ZGlmZiAtLWdpdCBhL0FCSS1idWdzLnR4dCBiL0FCSS1idWdzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44M2VlOTUyCi0tLSAvZGV2L251bGwKKysrIGIvQUJJLWJ1Z3MudHh0CkBAIC0wLDAgKzEsMTUgQEAKK0tOT1dOIEFCSSBCVUdTCistLS0tLS0tLS0tLS0tLQorCisgIHRpbWVfdCBpcyAzMi1iaXQuIGh0dHA6Ly9iLzU4MTk3MzcKKworICBvZmZfdCBpcyAzMi1iaXQuIFRoZXJlIGlzIG9mZjY0X3QsIGJ1dCBubyBfRklMRV9PRkZTRVRfQklUUyBzdXBwb3J0LgorCisgIHNpZ3NldF90IGlzIHRvbyBzbWFsbCBvbiBBUk0gYW5kIHg4NiAoYnV0IGNvcnJlY3Qgb24gTUlQUyksIHNvIHN1cHBvcnQKKyAgZm9yIHJlYWwtdGltZSBzaWduYWxzIGlzIGJyb2tlbi4gaHR0cDovL2IvNTgyODg5OQorCisgIFRvbyBmZXcgVExTIHNsb3RzIG1lYW4gd2UgY2FuJ3QgYWxsb2NhdGUgMTI4IHB0aHJlYWRfa2V5X3QgaW5zdGFuY2VzLAorICB3aGljaCBQT1NJWCBzYXlzIHNob3VsZCBiZSB0aGUgbWluaW11bS4KKworICBhdGV4aXQoMykgaGFuZGxlcnMgcmVnaXN0ZXJlZCBieSBhIHNoYXJlZCBsaWJyYXJ5IGFyZW4ndCBjYWxsZWQgb24KKyAgZGxjbG9zZSgzKTsgdGhpcyBvbmx5IGFmZmVjdHMgQVJNLiBodHRwOi8vYi80OTk4MzE1CmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNzZkYzI0Li4wMDAwMDAwCi0tLSBhL01BSU5UQUlORVJTCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi0KLUJpb25pYyBzdXBwb3J0IGZvciBTdXBlckgKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUJpb25pYyBzdXBwb3J0IGZvciBTdXBlckggYXJjaGl0ZWN0dXJlIGlzIHdyaXR0ZW4gYnkKLVNoaW4taWNoaXJvIEtBV0FTQUtJIDxzaGluaWNoaXJvLmthd2FzYWtpLm1nQGhpdGFjaGkuY29tPgotYW5kIENvbnRyaWJ1dGVkIHRvIEFuZHJvaWQgYnkgSGl0YWNoaSwgTHRkLiBhbmQgUmVuZXNhcyBTb2x1dGlvbnMgQ29ycC4KZGlmZiAtLWdpdCBhL1RoaXJkUGFydHlQcm9qZWN0LnByb3AgYi9UaGlyZFBhcnR5UHJvamVjdC5wcm9wCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMmMxOGNiLi4wMDAwMDAwCi0tLSBhL1RoaXJkUGFydHlQcm9qZWN0LnByb3AKKysrIC9kZXYvbnVsbApAQCAtMSwxMCArMCwwIEBACi0jIENvcHlyaWdodCAyMDEwIEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0jRnJpIEp1bCAxNiAxMDowMzowOCBQRFQgMjAxMAotY3VycmVudFZlcnNpb249VW5rbm93bgotdmVyc2lvbj1Vbmtub3duCi1pc05hdGl2ZT10cnVlCi1mZWVkdXJsPWh0dHBcOi8vd3d3Lm9wZW5ic2Qub3JnL3NlY3VyaXR5Lmh0bWwKLW5hbWU9b3BlbmJzZAota2V5d29yZHM9b3BlbmJzZAotb25EZXZpY2U9dHJ1ZQotaG9tZXBhZ2U9aHR0cFw6Ly9vcGVuYnNkLm9yZwpkaWZmIC0tZ2l0IGEvbGliYy9BbmRyb2lkLm1rIGIvbGliYy9BbmRyb2lkLm1rCmluZGV4IDhlODZkMjYuLmRiNjY4ZDMgMTAwNjQ0Ci0tLSBhL2xpYmMvQW5kcm9pZC5taworKysgYi9saWJjL0FuZHJvaWQubWsKQEAgLTYsMTI5ICs2LDMzIEBACiAjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogbGliY19jb21tb25fc3JjX2ZpbGVzIDo9IFwKIAkkKHN5c2NhbGxfc3JjKSBcCi0JdW5pc3RkL2Fib3J0LmMgXAogCXVuaXN0ZC9hbGFybS5jIFwKLQl1bmlzdGQvYnJrLmMgXAotCXVuaXN0ZC9jcmVhdC5jIFwKLQl1bmlzdGQvZGFlbW9uLmMgXAotCXVuaXN0ZC9ldmVudGZkLmMgXAogCXVuaXN0ZC9leGVjLmMgXAotCXVuaXN0ZC9mY250bC5jIFwKIAl1bmlzdGQvZm5tYXRjaC5jIFwKLQl1bmlzdGQvZnN0YXRmcy5jIFwKLQl1bmlzdGQvZnRpbWUuYyBcCi0JdW5pc3RkL2Z0b2suYyBcCi0JdW5pc3RkL2dldGN3ZC5jIFwKLQl1bmlzdGQvZ2V0ZHRhYmxlc2l6ZS5jIFwKLQl1bmlzdGQvZ2V0aG9zdG5hbWUuYyBcCi0JdW5pc3RkL2dldG9wdF9sb25nLmMgXAotCXVuaXN0ZC9nZXRwZ3JwLmMgXAotCXVuaXN0ZC9nZXRwcmlvcml0eS5jIFwKLQl1bmlzdGQvZ2V0cHQuYyBcCi0JdW5pc3RkL2luaXRncm91cHMuYyBcCi0JdW5pc3RkL2lzYXR0eS5jIFwKLQl1bmlzdGQvaXNzZXR1Z2lkLmMgXAotCXVuaXN0ZC9raWxscGcuYyBcCi0JdW5pc3RkL2xzZWVrNjQuYyBcCi0JdW5pc3RkL21tYXAuYyBcCi0JdW5pc3RkL25pY2UuYyBcCi0JdW5pc3RkL29wZW4uYyBcCi0JdW5pc3RkL29wZW5hdC5jIFwKLQl1bmlzdGQvb3BlbmRpci5jIFwKLQl1bmlzdGQvcGF0aGNvbmYuYyBcCi0JdW5pc3RkL3BlcnJvci5jIFwKLQl1bmlzdGQvcG9wZW4uYyBcCi0JdW5pc3RkL3ByZWFkLmMgXAotCXVuaXN0ZC9wc2VsZWN0LmMgXAotCXVuaXN0ZC9wdHNuYW1lLmMgXAotCXVuaXN0ZC9wdHNuYW1lX3IuYyBcCi0JdW5pc3RkL3B3cml0ZS5jIFwKLQl1bmlzdGQvcmFpc2UuYyBcCi0JdW5pc3RkL3JlYm9vdC5jIFwKLQl1bmlzdGQvcmVjdi5jIFwKLQl1bmlzdGQvc2Jyay5jIFwKLQl1bmlzdGQvc2VuZC5jIFwKLQl1bmlzdGQvc2V0ZWdpZC5jIFwKLQl1bmlzdGQvc2V0dWlkLmMgXAotCXVuaXN0ZC9zZXRldWlkLmMgXAotCXVuaXN0ZC9zZXRyZXVpZC5jIFwKLQl1bmlzdGQvc2V0cmVzdWlkLmMgXAotCXVuaXN0ZC9zZXRwZ3JwLmMgXAotCXVuaXN0ZC9zaWdibG9jay5jIFwKLQl1bmlzdGQvc2lnaW50ZXJydXB0LmMgXAotCXVuaXN0ZC9zaWdsaXN0LmMgXAotCXVuaXN0ZC9zaWduYWwuYyBcCi0JdW5pc3RkL3NpZ25hbWUuYyBcCi0JdW5pc3RkL3NpZ3NldG1hc2suYyBcCi0JdW5pc3RkL3NpZ3N1c3BlbmQuYyBcCi0JdW5pc3RkL3NpZ3dhaXQuYyBcCi0JdW5pc3RkL3NsZWVwLmMgXAotCXVuaXN0ZC9zdGF0ZnMuYyBcCi0JdW5pc3RkL3N0cnNpZ25hbC5jIFwKIAl1bmlzdGQvc3lzbG9nLmMgXAogCXVuaXN0ZC9zeXN0ZW0uYyBcCi0JdW5pc3RkL3RjZ2V0cGdycC5jIFwKLQl1bmlzdGQvdGNzZXRwZ3JwLmMgXAogCXVuaXN0ZC90aW1lLmMgXAotCXVuaXN0ZC91bW91bnQuYyBcCi0JdW5pc3RkL3VubG9ja3B0LmMgXAotCXVuaXN0ZC91c2xlZXAuYyBcCi0JdW5pc3RkL3dhaXQuYyBcCiAJc3RkaW8vYXNwcmludGYuYyBcCi0Jc3RkaW8vY2xyZXJyLmMgXAotCXN0ZGlvL2ZjbG9zZS5jIFwKLQlzdGRpby9mZG9wZW4uYyBcCi0Jc3RkaW8vZmVvZi5jIFwKLQlzdGRpby9mZXJyb3IuYyBcCiAJc3RkaW8vZmZsdXNoLmMgXAogCXN0ZGlvL2ZnZXRjLmMgXAotCXN0ZGlvL2ZnZXRsbi5jIFwKLQlzdGRpby9mZ2V0cG9zLmMgXAotCXN0ZGlvL2ZnZXRzLmMgXAotCXN0ZGlvL2ZpbGVuby5jIFwKIAlzdGRpby9maW5kZnAuYyBcCi0Jc3RkaW8vZmxhZ3MuYyBcCi0Jc3RkaW8vZmxvY2tmaWxlLmMgXAotCXN0ZGlvL2ZvcGVuLmMgXAogCXN0ZGlvL2ZwcmludGYuYyBcCi0Jc3RkaW8vZnB1cmdlLmMgXAogCXN0ZGlvL2ZwdXRjLmMgXAotCXN0ZGlvL2ZwdXRzLmMgXAogCXN0ZGlvL2ZyZWFkLmMgXAogCXN0ZGlvL2ZyZW9wZW4uYyBcCiAJc3RkaW8vZnNjYW5mLmMgXAogCXN0ZGlvL2ZzZWVrLmMgXAotCXN0ZGlvL2ZzZXRwb3MuYyBcCiAJc3RkaW8vZnRlbGwuYyBcCi0Jc3RkaW8vZnVub3Blbi5jIFwKIAlzdGRpby9mdndyaXRlLmMgXAotCXN0ZGlvL2Z3YWxrLmMgXAotCXN0ZGlvL2Z3cml0ZS5jIFwKLQlzdGRpby9nZXRjLmMgXAotCXN0ZGlvL2dldGNoYXIuYyBcCiAJc3RkaW8vZ2V0cy5jIFwKLQlzdGRpby9tYWtlYnVmLmMgXAotCXN0ZGlvL21rdGVtcC5jIFwKIAlzdGRpby9wcmludGYuYyBcCi0Jc3RkaW8vcHV0Yy5jIFwKLQlzdGRpby9wdXRjaGFyLmMgXAotCXN0ZGlvL3B1dHMuYyBcCi0Jc3RkaW8vcHV0dy5jIFwKIAlzdGRpby9yZWZpbGwuYyBcCi0Jc3RkaW8vcmVtb3ZlLmMgXAogCXN0ZGlvL3Jld2luZC5jIFwKLQlzdGRpby9yZ2V0LmMgXAogCXN0ZGlvL3NjYW5mLmMgXAotCXN0ZGlvL3NldGJ1Zi5jIFwKLQlzdGRpby9zZXRidWZmZXIuYyBcCi0Jc3RkaW8vc2V0dmJ1Zi5jIFwKIAlzdGRpby9zbnByaW50Zi5jXAogCXN0ZGlvL3NwcmludGYuYyBcCiAJc3RkaW8vc3NjYW5mLmMgXAogCXN0ZGlvL3N0ZGlvLmMgXAotCXN0ZGlvL3RlbXBuYW0uYyBcCi0Jc3RkaW8vdG1wZmlsZS5jIFwKLQlzdGRpby90bXBuYW0uYyBcCiAJc3RkaW8vdW5nZXRjLmMgXAogCXN0ZGlvL3Zhc3ByaW50Zi5jIFwKIAlzdGRpby92ZnByaW50Zi5jIFwKQEAgLTEzOSwzMyArNDMsMTIgQEAKIAlzdGRpby92c2NhbmYuYyBcCiAJc3RkaW8vdnNzY2FuZi5jIFwKIAlzdGRpby93YnVmLmMgXAotCXN0ZGlvL3dzZXR1cC5jIFwKLQlzdGRsaWIvX3JhbmQ0OC5jIFwKLQlzdGRsaWIvYXNzZXJ0LmMgXAogCXN0ZGxpYi9hdGV4aXQuYyBcCi0Jc3RkbGliL2F0b2kuYyBcCi0Jc3RkbGliL2F0b2wuYyBcCi0Jc3RkbGliL2F0b2xsLmMgXAotCXN0ZGxpYi9ic2VhcmNoLmMgXAogCXN0ZGxpYi9jdHlwZV8uYyBcCi0Jc3RkbGliL2Rpdi5jIFwKIAlzdGRsaWIvZXhpdC5jIFwKIAlzdGRsaWIvZ2V0ZW52LmMgXAotCXN0ZGxpYi9qcmFuZDQ4LmMgXAotCXN0ZGxpYi9sZGl2LmMgXAotCXN0ZGxpYi9sbGRpdi5jIFwKLQlzdGRsaWIvbG9jYWxlLmMgXAotCXN0ZGxpYi9scmFuZDQ4LmMgXAotCXN0ZGxpYi9tcmFuZDQ4LmMgXAotCXN0ZGxpYi9ucmFuZDQ4LmMgXAogCXN0ZGxpYi9wdXRlbnYuYyBcCi0Jc3RkbGliL3Fzb3J0LmMgXAotCXN0ZGxpYi9zZWVkNDguYyBcCiAJc3RkbGliL3NldGVudi5jIFwKLQlzdGRsaWIvc2V0am1wZXJyLmMgXAotCXN0ZGxpYi9zcmFuZDQ4LmMgXAotCXN0ZGxpYi9zdHJudG9pbWF4LmMgXAotCXN0ZGxpYi9zdHJudG91bWF4LmMgXAogCXN0ZGxpYi9zdHJ0b2QuYyBcCiAJc3RkbGliL3N0cnRvaW1heC5jIFwKIAlzdGRsaWIvc3RydG9sLmMgXApAQCAtMTc1LDExOSArNTgsMTAxIEBACiAJc3RkbGliL3N0cnRvdW1heC5jIFwKIAlzdGRsaWIvdG9sb3dlcl8uYyBcCiAJc3RkbGliL3RvdXBwZXJfLmMgXAotCXN0ZGxpYi93Y2hhci5jIFwKLQlzdHJpbmcvaW5kZXguYyBcCi0Jc3RyaW5nL21lbWNjcHkuYyBcCi0Jc3RyaW5nL21lbWNoci5jIFwKLQlzdHJpbmcvbWVtbWVtLmMgXAotCXN0cmluZy9tZW1yY2hyLmMgXAotCXN0cmluZy9tZW1zd2FwLmMgXAogCXN0cmluZy9zdHJjYXNlY21wLmMgXAotCXN0cmluZy9zdHJjYXNlc3RyLmMgXAotCXN0cmluZy9zdHJjYXQuYyBcCi0Jc3RyaW5nL3N0cmNoci5jIFwKLQlzdHJpbmcvc3RyY29sbC5jIFwKIAlzdHJpbmcvc3RyY3Nwbi5jIFwKIAlzdHJpbmcvc3RyZHVwLmMgXAotCXN0cmluZy9zdHJlcnJvci5jIFwKLQlzdHJpbmcvc3RyZXJyb3Jfci5jIFwKLQlzdHJpbmcvc3RybGNhdC5jIFwKLQlzdHJpbmcvc3RybGNweS5jIFwKLQlzdHJpbmcvc3RybmNhdC5jIFwKLQlzdHJpbmcvc3RybmNweS5jIFwKLQlzdHJpbmcvc3RybmR1cC5jIFwKLQlzdHJpbmcvc3Rybmxlbi5jIFwKIAlzdHJpbmcvc3RycGJyay5jIFwKLQlzdHJpbmcvc3RycmNoci5jIFwKKwlzdHJpbmcvX19zdHJyY2hyX2Noay5jIFwKIAlzdHJpbmcvc3Ryc2VwLmMgXAogCXN0cmluZy9zdHJzcG4uYyBcCiAJc3RyaW5nL3N0cnN0ci5jIFwKIAlzdHJpbmcvc3RydG9rLmMgXAotCXN0cmluZy9zdHJ0b3RpbWV2YWwuYyBcCi0Jc3RyaW5nL3N0cnhmcm0uYyBcCi0Jd2NoYXIvd2NwY3B5LmMgXAotCXdjaGFyL3djcG5jcHkuYyBcCi0Jd2NoYXIvd2NzY2FzZWNtcC5jIFwKLQl3Y2hhci93Y3NjYXQuYyBcCi0Jd2NoYXIvd2NzY2hyLmMgXAotCXdjaGFyL3djc2NtcC5jIFwKLQl3Y2hhci93Y3Njb2xsLmMgXAotCXdjaGFyL3djc2NweS5jIFwKLQl3Y2hhci93Y3Njc3BuLmMgXAotCXdjaGFyL3djc2R1cC5jIFwKLQl3Y2hhci93Y3NsY2F0LmMgXAotCXdjaGFyL3djc2xjcHkuYyBcCi0Jd2NoYXIvd2NzbGVuLmMgXAotCXdjaGFyL3djc25jYXNlY21wLmMgXAotCXdjaGFyL3djc25jYXQuYyBcCi0Jd2NoYXIvd2NzbmNtcC5jIFwKLQl3Y2hhci93Y3NuY3B5LmMgXAotCXdjaGFyL3djc25sZW4uYyBcCi0Jd2NoYXIvd2NzcGJyay5jIFwKLQl3Y2hhci93Y3NyY2hyLmMgXAotCXdjaGFyL3djc3Nwbi5jIFwKLQl3Y2hhci93Y3NzdHIuYyBcCi0Jd2NoYXIvd2NzdG9rLmMgXAogCXdjaGFyL3djc3dpZHRoLmMgXAogCXdjaGFyL3djc3hmcm0uYyBcCi0Jd2NoYXIvd21lbWNoci5jIFwKLQl3Y2hhci93bWVtY21wLmMgXAotCXdjaGFyL3dtZW1jcHkuYyBcCi0Jd2NoYXIvd21lbW1vdmUuYyBcCi0Jd2NoYXIvd21lbXNldC5jIFwKLQlpbmV0L2JpbmRyZXN2cG9ydC5jIFwKLQlpbmV0L2luZXRfYWRkci5jIFwKLQlpbmV0L2luZXRfYXRvbi5jIFwKLQlpbmV0L2luZXRfbnRvYS5jIFwKLQlpbmV0L2luZXRfbnRvcC5jIFwKLQlpbmV0L2luZXRfcHRvbi5jIFwKLQlpbmV0L2V0aGVyX2F0b24uYyBcCi0JaW5ldC9ldGhlcl9udG9hLmMgXAotCXR6Y29kZS9hc2N0aW1lLmMgXAotCXR6Y29kZS9kaWZmdGltZS5jIFwKLQl0emNvZGUvbG9jYWx0aW1lLmMgXAotCXR6Y29kZS9zdHJmdGltZS5jIFwKLQl0emNvZGUvc3RycHRpbWUuYyBcCi0JYmlvbmljL19fc2V0X2Vycm5vLmMgXAotCWJpb25pYy9jcHVhY2N0LmMgXAogCWJpb25pYy9hcmM0cmFuZG9tLmMgXAotCWJpb25pYy9iYXNlbmFtZS5jIFwKLQliaW9uaWMvYmFzZW5hbWVfci5jIFwKKwliaW9uaWMvYXRvaS5jIFwKKwliaW9uaWMvYXRvbC5jIFwKKwliaW9uaWMvYXRvbGwuYyBcCisJYmlvbmljL2JpbmRyZXN2cG9ydC5jIFwKKwliaW9uaWMvYmlvbmljX2Nsb25lLmMgXAogCWJpb25pYy9jbGVhcmVudi5jIFwKLQliaW9uaWMvZGlybmFtZS5jIFwKLQliaW9uaWMvZGlybmFtZV9yLmMgXAotCWJpb25pYy9kcmFuZDQ4LmMgXAotCWJpb25pYy9lcmFuZDQ4LmMgXAorCWJpb25pYy9jcHVhY2N0LmMgXAorCWJpb25pYy9kYWVtb24uYyBcCiAJYmlvbmljL2Vyci5jIFwKKwliaW9uaWMvZXRoZXJfYXRvbi5jIFwKKwliaW9uaWMvZXRoZXJfbnRvYS5jIFwKKwliaW9uaWMvZmNudGwuYyBcCiAJYmlvbmljL2ZkcHJpbnRmLmMgXAorCWJpb25pYy9mbG9ja2ZpbGUuYyBcCiAJYmlvbmljL2ZvcmsuYyBcCisJYmlvbmljL2ZzdGF0ZnMuYyBcCisJYmlvbmljL2Z0aW1lLmMgXAorCWJpb25pYy9mdG9rLmMgXAogCWJpb25pYy9mdHMuYyBcCi0JYmlvbmljL2lmX25hbWV0b2luZGV4LmMgXAorCWJpb25pYy9nZXRkdGFibGVzaXplLmMgXAorCWJpb25pYy9nZXRob3N0bmFtZS5jIFwKKwliaW9uaWMvZ2V0cGdycC5jIFwKKwliaW9uaWMvZ2V0cHJpb3JpdHkuYyBcCisJYmlvbmljL2dldHB0LmMgXAogCWJpb25pYy9pZl9pbmRleHRvbmFtZS5jIFwKKwliaW9uaWMvaWZfbmFtZXRvaW5kZXguYyBcCisJYmlvbmljL2luaXRncm91cHMuYyBcCiAJYmlvbmljL2lvY3RsLmMgXAorCWJpb25pYy9pc2F0dHkuYyBcCisJYmlvbmljL2lzc2V0dWdpZC5jIFwKIAliaW9uaWMvbGRleHAuYyBcCi0JYmlvbmljL2xpYmNfaW5pdF9jb21tb24uYyBcCi0JYmlvbmljL2xvZ2Rfd3JpdGUuYyBcCisJYmlvbmljL2xzZWVrNjQuYyBcCiAJYmlvbmljL21kNS5jIFwKLQliaW9uaWMvbWVtbW92ZV93b3Jkcy5jIFwKKwliaW9uaWMvbWVtbWVtLmMgXAorCWJpb25pYy9tZW1zd2FwLmMgXAorCWJpb25pYy9vcGVuYXQuYyBcCisJYmlvbmljL29wZW4uYyBcCisJYmlvbmljL3BhdGhjb25mLmMgXAorCWJpb25pYy9wZXJyb3IuYyBcCisJYmlvbmljL3ByZWFkLmMgXAorCWJpb25pYy9wc2VsZWN0LmMgXAorCWJpb25pYy9wdHNuYW1lLmMgXAorCWJpb25pYy9wdHNuYW1lX3IuYyBcCiAJYmlvbmljL3B1dHV0bGluZS5jIFwKLQliaW9uaWMvcmVhbHBhdGguYyBcCi0JYmlvbmljL3NjaGVkX2dldGFmZmluaXR5LmMgXAotCWJpb25pYy9zY2hlZF9nZXRjcHUuYyBcCisJYmlvbmljL3B3cml0ZS5jIFwKKwliaW9uaWMvcmVib290LmMgXAorCWJpb25pYy9yZWN2LmMgXAogCWJpb25pYy9zY2hlZF9jcHVhbGxvYy5jIFwKIAliaW9uaWMvc2NoZWRfY3B1Y291bnQuYyBcCisJYmlvbmljL3NjaGVkX2dldGNwdS5jIFwKIAliaW9uaWMvc2VtYXBob3JlLmMgXAotCWJpb25pYy9zaGExLmMgXAotCWJpb25pYy9zc3AuYyBcCi0JYmlvbmljL3N0dWJzLmMgXAorCWJpb25pYy9zZW5kLmMgXAorCWJpb25pYy9zZXRlZ2lkLmMgXAorCWJpb25pYy9zZXRldWlkLmMgXAorCWJpb25pYy9zZXRwZ3JwLmMgXAorCWJpb25pYy9zZXRyZXN1aWQuYyBcCisJYmlvbmljL3NldHJldWlkLmMgXAorCWJpb25pYy9zZXR1aWQuYyBcCisJYmlvbmljL3NpZ2Jsb2NrLmMgXAorCWJpb25pYy9zaWdpbnRlcnJ1cHQuYyBcCisJYmlvbmljL3NpZ2xpc3QuYyBcCisJYmlvbmljL3NpZ25hbC5jIFwKKwliaW9uaWMvc2lnbmFtZS5jIFwKKwliaW9uaWMvc2lnc2V0bWFzay5jIFwKKwliaW9uaWMvc2lnc3VzcGVuZC5jIFwKKwliaW9uaWMvc2xlZXAuYyBcCisJYmlvbmljL3N0YXRmcy5jIFwKKwliaW9uaWMvc3RybmR1cC5jIFwKKwliaW9uaWMvc3RybnRvaW1heC5jIFwKKwliaW9uaWMvc3RybnRvdW1heC5jIFwKKwliaW9uaWMvc3RydG90aW1ldmFsLmMgXAogCWJpb25pYy9zeXN0ZW1fcHJvcGVydGllcy5jIFwKLQliaW9uaWMvdGltZTY0LmMgXAorCWJpb25pYy9zeXN0ZW1fcHJvcGVydGllc19jb21wYXQuYyBcCisJYmlvbmljL3RjZ2V0cGdycC5jIFwKKwliaW9uaWMvdGNzZXRwZ3JwLmMgXAogCWJpb25pYy90aHJlYWRfYXRleGl0LmMgXAotCWJpb25pYy91dGltZS5jIFwKKwliaW9uaWMvdGltZTY0LmMgXAorCWJpb25pYy91bW91bnQuYyBcCisJYmlvbmljL3VubG9ja3B0LmMgXAorCWJpb25pYy91c2xlZXAuYyBcCiAJYmlvbmljL3V0bXAuYyBcCisJYmlvbmljL3djc2NvbGwuYyBcCiAJbmV0YnNkL2dldGhuYW1hZGRyLmMgXAotCW5ldGJzZC9pc2MvZXZfdGltZXJzLmMgXAotCW5ldGJzZC9pc2MvZXZfc3RyZWFtcy5jIFwKIAluZXRic2QvaW5ldC9uc2FwX2FkZHIuYyBcCiAJbmV0YnNkL3Jlc29sdi9fX2RuX2NvbXAuYyBcCiAJbmV0YnNkL3Jlc29sdi9fX3Jlc19jbG9zZS5jIFwKQEAgLTMxNSw1OSArMTgwLDIwMSBAQAogCW5ldGJzZC9uYW1lc2VyL25zX25ldGludC5jIFwKIAluZXRic2QvbmFtZXNlci9uc19wcmludC5jIFwKIAluZXRic2QvbmFtZXNlci9uc19zYW1lZG9tYWluLmMgXAotCXJlZ2V4L3JlZ2NvbXAuYyBcCi0JcmVnZXgvcmVnZXJyb3IuYyBcCi0JcmVnZXgvcmVnZXhlYy5jIFwKLQlyZWdleC9yZWdmcmVlLmMgXAogCi0jIFRoZSBmb2xsb3dpbmcgZmlsZXMgYXJlIGNvbW1vbiwgYnV0IG11c3QgYmUgY29tcGlsZWQKLSMgd2l0aCBkaWZmZXJlbnQgQyBmbGFncyB3aGVuIGJ1aWxkaW5nIGEgc3RhdGljIEMgbGlicmFyeS4KLSMKLSMgVGhlIHJlYXNvbiBmb3IgdGhpcyBpcyB0aGUgaW1wbGVtZW50YXRpb24gb2YgX19nZXRfdGxzKCkKLSMgdGhhdCB3aWxsIGRpZmZlciBiZXR3ZWVuIHRoZSBzaGFyZWQgYW5kIHN0YXRpYyB2ZXJzaW9ucwotIyBvZiB0aGUgbGlicmFyeS4KLSMKLSMgU2VlIGNvbW1lbnRzIGluIHByaXZhdGUvYmlvbmljX3Rscy5oIGZvciBtb3JlIGRldGFpbHMuCi0jCi0jIE5PVEU6IGJpb25pYy9wdGhyZWFkLmMgaXMgYWRkZWQgbGF0ZXIgdG8gdGhpcyBsaXN0Ci0jICAgICAgIGJlY2F1c2UgaXQgbmVlZHMgc3BlY2lhbCBoYW5kbGluZyBvbiBBUk0sIHNlZQotIyAgICAgICBiZWxvdy4KLSMKLWxpYmNfc3RhdGljX2NvbW1vbl9zcmNfZmlsZXMgOj0gXAotICAgICAgICB1bmlzdGQvc3lzY29uZi5jIFwKLSAgICAgICAgYmlvbmljL19fZXJybm8uYyBcCitsaWJjX2Jpb25pY19zcmNfZmlsZXMgOj0gXAorICAgIGJpb25pYy9hYm9ydC5jcHAgXAorICAgIGJpb25pYy9hc3NlcnQuY3BwIFwKKyAgICBiaW9uaWMvYnJrLmNwcCBcCisgICAgYmlvbmljL2RpcmVudC5jcHAgXAorICAgIGJpb25pYy9fX2Vycm5vLmMgXAorICAgIGJpb25pYy9ldmVudGZkX3JlYWQuY3BwIFwKKyAgICBiaW9uaWMvZXZlbnRmZF93cml0ZS5jcHAgXAorICAgIGJpb25pYy9fX2ZnZXRzX2Noay5jcHAgXAorICAgIGJpb25pYy9nZXRhdXh2YWwuY3BwIFwKKyAgICBiaW9uaWMvZ2V0Y3dkLmNwcCBcCisgICAgYmlvbmljL2xpYmNfaW5pdF9jb21tb24uY3BwIFwKKyAgICBiaW9uaWMvbGliY19sb2dnaW5nLmNwcCBcCisgICAgYmlvbmljL2xpYmdlbi5jcHAgXAorICAgIGJpb25pYy9fX21lbWNweV9jaGsuY3BwIFwKKyAgICBiaW9uaWMvX19tZW1tb3ZlX2Noay5jcHAgXAorICAgIGJpb25pYy9fX21lbXNldF9jaGsuY3BwIFwKKyAgICBiaW9uaWMvbW1hcC5jcHAgXAorICAgIGJpb25pYy9wdGhyZWFkX2F0dHIuY3BwIFwKKyAgICBiaW9uaWMvcHRocmVhZF9kZXRhY2guY3BwIFwKKyAgICBiaW9uaWMvcHRocmVhZF9lcXVhbC5jcHAgXAorICAgIGJpb25pYy9wdGhyZWFkX2dldGNwdWNsb2NraWQuY3BwIFwKKyAgICBiaW9uaWMvcHRocmVhZF9nZXRzY2hlZHBhcmFtLmNwcCBcCisgICAgYmlvbmljL3B0aHJlYWRfaW50ZXJuYWxzLmNwcCBcCisgICAgYmlvbmljL3B0aHJlYWRfam9pbi5jcHAgXAorICAgIGJpb25pYy9wdGhyZWFkX2tpbGwuY3BwIFwKKyAgICBiaW9uaWMvcHRocmVhZF9zZWxmLmNwcCBcCisgICAgYmlvbmljL3B0aHJlYWRfc2V0bmFtZV9ucC5jcHAgXAorICAgIGJpb25pYy9wdGhyZWFkX3NldHNjaGVkcGFyYW0uY3BwIFwKKyAgICBiaW9uaWMvcHRocmVhZF9zaWdtYXNrLmNwcCBcCisgICAgYmlvbmljL3JhaXNlLmNwcCBcCisgICAgYmlvbmljL3NicmsuY3BwIFwKKyAgICBiaW9uaWMvc2NhbmRpci5jcHAgXAorICAgIGJpb25pYy9zY2hlZF9nZXRhZmZpbml0eS5jcHAgXAorICAgIGJpb25pYy9fX3NldF9lcnJuby5jcHAgXAorICAgIGJpb25pYy9zZXRsb2NhbGUuY3BwIFwKKyAgICBiaW9uaWMvc2lnbmFsZmQuY3BwIFwKKyAgICBiaW9uaWMvc2lnd2FpdC5jcHAgXAorICAgIGJpb25pYy9zdGF0dmZzLmNwcCBcCisgICAgYmlvbmljL19fc3RyY2F0X2Noay5jcHAgXAorICAgIGJpb25pYy9fX3N0cmNocl9jaGsuY3BwIFwKKyAgICBiaW9uaWMvX19zdHJjcHlfY2hrLmNwcCBcCisgICAgYmlvbmljL3N0cmVycm9yLmNwcCBcCisgICAgYmlvbmljL3N0cmVycm9yX3IuY3BwIFwKKyAgICBiaW9uaWMvX19zdHJsY2F0X2Noay5jcHAgXAorICAgIGJpb25pYy9fX3N0cmxjcHlfY2hrLmNwcCBcCisgICAgYmlvbmljL19fc3RybGVuX2Noay5jcHAgXAorICAgIGJpb25pYy9fX3N0cm5jYXRfY2hrLmNwcCBcCisgICAgYmlvbmljL19fc3RybmNweV9jaGsuY3BwIFwKKyAgICBiaW9uaWMvc3Ryc2lnbmFsLmNwcCBcCisgICAgYmlvbmljL3N0dWJzLmNwcCBcCisgICAgYmlvbmljL3N5c2NvbmYuY3BwIFwKKyAgICBiaW9uaWMvdGRlc3Ryb3kuY3BwIFwKKyAgICBiaW9uaWMvdG1wZmlsZS5jcHAgXAorICAgIGJpb25pYy9fX3VtYXNrX2Noay5jcHAgXAorICAgIGJpb25pYy9fX3ZzbnByaW50Zl9jaGsuY3BwIFwKKyAgICBiaW9uaWMvX192c3ByaW50Zl9jaGsuY3BwIFwKKyAgICBiaW9uaWMvd2FpdC5jcHAgXAorICAgIGJpb25pYy93Y2hhci5jcHAgXAorCitsaWJjX3R6Y29kZV9zcmNfZmlsZXMgOj0gXAorICAgIHR6Y29kZS9hc2N0aW1lLmMgXAorICAgIHR6Y29kZS9kaWZmdGltZS5jIFwKKyAgICB0emNvZGUvbG9jYWx0aW1lLmMgXAorICAgIHR6Y29kZS9zdHJmdGltZS5jIFwKKyAgICB0emNvZGUvc3RycHRpbWUuYyBcCisKK2xpYmNfdXBzdHJlYW1fZnJlZWJzZF9zcmNfZmlsZXMgOj0gXAorICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RkaW8vY2xyZXJyLmMgXAorICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RkaW8vZmNsb3NlLmMgXAorICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RkaW8vZmRvcGVuLmMgXAorICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RkaW8vZmVvZi5jIFwKKyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0ZGlvL2ZlcnJvci5jIFwKKyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0ZGlvL2ZnZXRsbi5jIFwKKyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0ZGlvL2ZnZXRwb3MuYyBcCisgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdGRpby9mZ2V0cy5jIFwKKyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0ZGlvL2ZpbGVuby5jIFwKKyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0ZGlvL2ZsYWdzLmMgXAorICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RkaW8vZm9wZW4uYyBcCisgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdGRpby9mcHVyZ2UuYyBcCisgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdGRpby9mcHV0cy5jIFwKKyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0ZGlvL2ZzZXRwb3MuYyBcCisgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdGRpby9mdW5vcGVuLmMgXAorICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RkaW8vZndhbGsuYyBcCisgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdGRpby9md3JpdGUuYyBcCisgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdGRpby9nZXRjLmMgXAorICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RkaW8vZ2V0Y2hhci5jIFwKKyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0ZGlvL21ha2VidWYuYyBcCisgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdGRpby9ta3RlbXAuYyBcCisgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdGRpby9wdXRjLmMgXAorICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RkaW8vcHV0Y2hhci5jIFwKKyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0ZGlvL3B1dHMuYyBcCisgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdGRpby9wdXR3LmMgXAorICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RkaW8vcmVtb3ZlLmMgXAorICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RkaW8vcmdldC5jIFwKKyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0ZGlvL3NldGJ1Zi5jIFwKKyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0ZGlvL3NldGJ1ZmZlci5jIFwKKyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0ZGlvL3NldHZidWYuYyBcCisgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdGRpby90ZW1wbmFtLmMgXAorICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RkaW8vdG1wbmFtLmMgXAorICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RkaW8vd3NldHVwLmMgXAorICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RkbGliL2dldG9wdF9sb25nLmMgXAorICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RkbGliL3Fzb3J0LmMgXAorICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RkbGliL3JlYWxwYXRoLmMgXAorICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RyaW5nL3djcGNweS5jIFwKKyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0cmluZy93Y3BuY3B5LmMgXAorICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RyaW5nL3djc2Nhc2VjbXAuYyBcCisgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdHJpbmcvd2NzY3Nwbi5jIFwKKyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0cmluZy93Y3NkdXAuYyBcCisgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdHJpbmcvd2NzbGNhdC5jIFwKKyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0cmluZy93Y3NsY3B5LmMgXAorICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RyaW5nL3djc25jYXNlY21wLmMgXAorICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RyaW5nL3djc25jYXQuYyBcCisgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdHJpbmcvd2NzbmNtcC5jIFwKKyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0cmluZy93Y3NuY3B5LmMgXAorICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RyaW5nL3djc25sZW4uYyBcCisgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdHJpbmcvd2NzcGJyay5jIFwKKyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0cmluZy93Y3NzcG4uYyBcCisgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdHJpbmcvd2Nzc3RyLmMgXAorICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RyaW5nL3djc3Rvay5jIFwKKyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0cmluZy93bWVtY2hyLmMgXAorICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RyaW5nL3dtZW1jcHkuYyBcCisgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdHJpbmcvd21lbW1vdmUuYyBcCisgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdHJpbmcvd21lbXNldC5jIFwKKworbGliY191cHN0cmVhbV9uZXRic2Rfc3JjX2ZpbGVzIDo9IFwKKyAgICB1cHN0cmVhbS1uZXRic2QvY29tbW9uL2xpYi9saWJjL2hhc2gvc2hhMS9zaGExLmMgXAorICAgIHVwc3RyZWFtLW5ldGJzZC9jb21tb24vbGliL2xpYmMvaW5ldC9pbmV0X2FkZHIuYyBcCisgICAgdXBzdHJlYW0tbmV0YnNkL2xpYmMvY29tcGF0LTQzL2NyZWF0LmMgXAorICAgIHVwc3RyZWFtLW5ldGJzZC9saWJjL2dlbi9mdHcuYyBcCisgICAgdXBzdHJlYW0tbmV0YnNkL2xpYmMvZ2VuL25mdHcuYyBcCisgICAgdXBzdHJlYW0tbmV0YnNkL2xpYmMvZ2VuL25pY2UuYyBcCisgICAgdXBzdHJlYW0tbmV0YnNkL2xpYmMvZ2VuL3BvcGVuLmMgXAorICAgIHVwc3RyZWFtLW5ldGJzZC9saWJjL2dlbi9wc2lnbmFsLmMgXAorICAgIHVwc3RyZWFtLW5ldGJzZC9saWJjL2dlbi9zZXRqbXBlcnIuYyBcCisgICAgdXBzdHJlYW0tbmV0YnNkL2xpYmMvZ2VuL3V0aW1lLmMgXAorICAgIHVwc3RyZWFtLW5ldGJzZC9saWJjL2luZXQvaW5ldF9udG9hLmMgXAorICAgIHVwc3RyZWFtLW5ldGJzZC9saWJjL2luZXQvaW5ldF9udG9wLmMgXAorICAgIHVwc3RyZWFtLW5ldGJzZC9saWJjL2luZXQvaW5ldF9wdG9uLmMgXAorICAgIHVwc3RyZWFtLW5ldGJzZC9saWJjL2lzYy9ldl9zdHJlYW1zLmMgXAorICAgIHVwc3RyZWFtLW5ldGJzZC9saWJjL2lzYy9ldl90aW1lcnMuYyBcCisgICAgdXBzdHJlYW0tbmV0YnNkL2xpYmMvcmVnZXgvcmVnY29tcC5jIFwKKyAgICB1cHN0cmVhbS1uZXRic2QvbGliYy9yZWdleC9yZWdlcnJvci5jIFwKKyAgICB1cHN0cmVhbS1uZXRic2QvbGliYy9yZWdleC9yZWdleGVjLmMgXAorICAgIHVwc3RyZWFtLW5ldGJzZC9saWJjL3JlZ2V4L3JlZ2ZyZWUuYyBcCisgICAgdXBzdHJlYW0tbmV0YnNkL2xpYmMvc3RkaW8vZ2V0ZGVsaW0uYyBcCisgICAgdXBzdHJlYW0tbmV0YnNkL2xpYmMvc3RkaW8vZ2V0bGluZS5jIFwKKyAgICB1cHN0cmVhbS1uZXRic2QvbGliYy9zdGRsaWIvYnNlYXJjaC5jIFwKKyAgICB1cHN0cmVhbS1uZXRic2QvbGliYy9zdGRsaWIvZGl2LmMgXAorICAgIHVwc3RyZWFtLW5ldGJzZC9saWJjL3N0ZGxpYi9kcmFuZDQ4LmMgXAorICAgIHVwc3RyZWFtLW5ldGJzZC9saWJjL3N0ZGxpYi9lcmFuZDQ4LmMgXAorICAgIHVwc3RyZWFtLW5ldGJzZC9saWJjL3N0ZGxpYi9qcmFuZDQ4LmMgXAorICAgIHVwc3RyZWFtLW5ldGJzZC9saWJjL3N0ZGxpYi9sZGl2LmMgXAorICAgIHVwc3RyZWFtLW5ldGJzZC9saWJjL3N0ZGxpYi9sbGRpdi5jIFwKKyAgICB1cHN0cmVhbS1uZXRic2QvbGliYy9zdGRsaWIvbHJhbmQ0OC5jIFwKKyAgICB1cHN0cmVhbS1uZXRic2QvbGliYy9zdGRsaWIvbXJhbmQ0OC5jIFwKKyAgICB1cHN0cmVhbS1uZXRic2QvbGliYy9zdGRsaWIvbnJhbmQ0OC5jIFwKKyAgICB1cHN0cmVhbS1uZXRic2QvbGliYy9zdGRsaWIvX3JhbmQ0OC5jIFwKKyAgICB1cHN0cmVhbS1uZXRic2QvbGliYy9zdGRsaWIvc2VlZDQ4LmMgXAorICAgIHVwc3RyZWFtLW5ldGJzZC9saWJjL3N0ZGxpYi9zcmFuZDQ4LmMgXAorICAgIHVwc3RyZWFtLW5ldGJzZC9saWJjL3N0ZGxpYi90ZGVsZXRlLmMgXAorICAgIHVwc3RyZWFtLW5ldGJzZC9saWJjL3N0ZGxpYi90ZmluZC5jIFwKKyAgICB1cHN0cmVhbS1uZXRic2QvbGliYy9zdGRsaWIvdHNlYXJjaC5jIFwKKyAgICB1cHN0cmVhbS1uZXRic2QvbGliYy9zdHJpbmcvbWVtY2NweS5jIFwKKyAgICB1cHN0cmVhbS1uZXRic2QvbGliYy9zdHJpbmcvc3RyY2FzZXN0ci5jIFwKKyAgICB1cHN0cmVhbS1uZXRic2QvbGliYy9zdHJpbmcvc3RyY29sbC5jIFwKKyAgICB1cHN0cmVhbS1uZXRic2QvbGliYy9zdHJpbmcvc3RyeGZybS5jIFwKKyAgICB1cHN0cmVhbS1uZXRic2QvbGliYy91bmlzdGQva2lsbHBnLmMgXAogCiAjIEFyY2hpdGVjdHVyZSBzcGVjaWZpYyBzb3VyY2UgZmlsZXMgZ28gaGVyZQogIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIGlmZXEgKCQoVEFSR0VUX0FSQ0gpLGFybSkKIGxpYmNfY29tbW9uX3NyY19maWxlcyArPSBcCi0JYmlvbmljL2Jpb25pY19jbG9uZS5jIFwKLQlhcmNoLWFybS9iaW9uaWMvX19nZXRfcGMuUyBcCi0JYXJjaC1hcm0vYmlvbmljL19fZ2V0X3NwLlMgXAotCWFyY2gtYXJtL2Jpb25pYy9fZXhpdF93aXRoX3N0YWNrX3RlYXJkb3duLlMgXAotCWFyY2gtYXJtL2Jpb25pYy9fc2V0am1wLlMgXAotCWFyY2gtYXJtL2Jpb25pYy9hYm9ydF9hcm0uUyBcCi0JYXJjaC1hcm0vYmlvbmljL2F0b21pY3NfYXJtLlMgXAotCWFyY2gtYXJtL2Jpb25pYy9jbG9uZS5TIFwKLQlhcmNoLWFybS9iaW9uaWMvZWFiaS5jIFwKLQlhcmNoLWFybS9iaW9uaWMvZmZzLlMgXAotCWFyY2gtYXJtL2Jpb25pYy9raWxsLlMgXAotCWFyY2gtYXJtL2Jpb25pYy9saWJnY2NfY29tcGF0LmMgXAotCWFyY2gtYXJtL2Jpb25pYy90a2lsbC5TIFwKLQlhcmNoLWFybS9iaW9uaWMvbWVtY21wLlMgXAotCWFyY2gtYXJtL2Jpb25pYy9tZW1jbXAxNi5TIFwKLQlhcmNoLWFybS9iaW9uaWMvbWVtY3B5LlMgXAotCWFyY2gtYXJtL2Jpb25pYy9tZW1zZXQuUyBcCi0JYXJjaC1hcm0vYmlvbmljL3NldGptcC5TIFwKLQlhcmNoLWFybS9iaW9uaWMvc2lnc2V0am1wLlMgXAotCWFyY2gtYXJtL2Jpb25pYy9zdHJsZW4uYy5hcm0gXAotCWFyY2gtYXJtL2Jpb25pYy9zdHJjcHkuUyBcCi0JYXJjaC1hcm0vYmlvbmljL3N0cmNtcC5TIFwKLQlhcmNoLWFybS9iaW9uaWMvc3lzY2FsbC5TIFwKLQlzdHJpbmcvbWVtbW92ZS5jLmFybSBcCisJYmlvbmljL21lbW1vdmUuYy5hcm0gXAogCXN0cmluZy9iY29weS5jIFwKIAlzdHJpbmcvc3RybmNtcC5jIFwKLQl1bmlzdGQvc29ja2V0Y2FsbHMuYworCXN0cmluZy9zdHJjYXQuYyBcCisJc3RyaW5nL3N0cm5jYXQuYyBcCisJc3RyaW5nL3N0cm5jcHkuYyBcCisJYmlvbmljL3N0cmNoci5jcHAgXAorCXN0cmluZy9zdHJyY2hyLmMgXAorCWJpb25pYy9tZW1jaHIuYyBcCisJYmlvbmljL21lbXJjaHIuYyBcCisJc3RyaW5nL2luZGV4LmMgXAorCWJpb25pYy9zdHJubGVuLmMgXAorCXN0cmluZy9zdHJsY2F0LmMgXAorCXN0cmluZy9zdHJsY3B5LmMgXAorCXVwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RyaW5nL3djc2Noci5jIFwKKwl1cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0cmluZy93Y3NyY2hyLmMgXAorCXVwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RyaW5nL3djc2NtcC5jIFwKKwl1cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0cmluZy93Y3NjcHkuYyBcCisJdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdHJpbmcvd21lbWNtcC5jIFwKKwl1cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0cmluZy93Y3NsZW4uYyBcCisJdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdHJpbmcvd2NzY2F0LmMKIAogIyBUaGVzZSBmaWxlcyBuZWVkIHRvIGJlIGFybSBzbyB0aGF0IGdkYnNlcnZlcgogIyBjYW4gc2V0IGJyZWFrcG9pbnRzIGluIHRoZW0gd2l0aG91dCBtZXNzaW5nCkBAIC0zNzksODEgKzM4NiwxMTEgQEAKIAliaW9uaWMvcHRyYWNlLmMuYXJtCiAKIGxpYmNfc3RhdGljX2NvbW1vbl9zcmNfZmlsZXMgKz0gXAotICAgICAgICBiaW9uaWMvcHRocmVhZC5jLmFybSBcCisgICAgYmlvbmljL3B0aHJlYWQuYy5hcm0gXAorICAgIGJpb25pYy9wdGhyZWFkX2NyZWF0ZS5jcHAuYXJtIFwKKyAgICBiaW9uaWMvcHRocmVhZF9rZXkuY3BwLmFybSBcCiAKLSMgdGhlc2UgYXJlIHVzZWQgYnkgdGhlIHN0YXRpYyBhbmQgZHluYW1pYyB2ZXJzaW9ucyBvZiB0aGUgbGliYwotIyByZXNwZWN0aXZlbHkKLWxpYmNfYXJjaF9zdGF0aWNfc3JjX2ZpbGVzIDo9IFwKLQlhcmNoLWFybS9iaW9uaWMvZXhpZHhfc3RhdGljLmMKLQotbGliY19hcmNoX2R5bmFtaWNfc3JjX2ZpbGVzIDo9IFwKLQlhcmNoLWFybS9iaW9uaWMvZXhpZHhfZHluYW1pYy5jCi1lbHNlICMgIWFybQorZW5kaWYgIyBhcm0KIAogaWZlcSAoJChUQVJHRVRfQVJDSCkseDg2KQogbGliY19jb21tb25fc3JjX2ZpbGVzICs9IFwKLQlhcmNoLXg4Ni9iaW9uaWMvX19nZXRfc3AuUyBcCi0JYXJjaC14ODYvYmlvbmljL19fZ2V0X3Rscy5jIFwKLQlhcmNoLXg4Ni9iaW9uaWMvX19zZXRfdGxzLmMgXAotCWFyY2gteDg2L2Jpb25pYy9hdG9taWNzX3g4Ni5TIFwKLQlhcmNoLXg4Ni9iaW9uaWMvY2xvbmUuUyBcCi0JYXJjaC14ODYvYmlvbmljL19leGl0X3dpdGhfc3RhY2tfdGVhcmRvd24uUyBcCi0JYXJjaC14ODYvYmlvbmljL3NldGptcC5TIFwKLQlhcmNoLXg4Ni9iaW9uaWMvX3NldGptcC5TIFwKLQlhcmNoLXg4Ni9iaW9uaWMvc2lnc2V0am1wLlMgXAotCWFyY2gteDg2L2Jpb25pYy92Zm9yay5TIFwKLQlhcmNoLXg4Ni9iaW9uaWMvc3lzY2FsbC5TIFwKLQlhcmNoLXg4Ni9zdHJpbmcvYmNvcHlfd3JhcHBlci5TIFwKLQlhcmNoLXg4Ni9zdHJpbmcvbWVtY3B5X3dyYXBwZXIuUyBcCi0JYXJjaC14ODYvc3RyaW5nL21lbW1vdmVfd3JhcHBlci5TIFwKLQlhcmNoLXg4Ni9zdHJpbmcvYnplcm9fd3JhcHBlci5TIFwKLQlhcmNoLXg4Ni9zdHJpbmcvbWVtY21wX3dyYXBwZXIuUyBcCi0JYXJjaC14ODYvc3RyaW5nL21lbXNldF93cmFwcGVyLlMgXAotCWFyY2gteDg2L3N0cmluZy9zdHJjbXBfd3JhcHBlci5TIFwKLQlhcmNoLXg4Ni9zdHJpbmcvc3RybmNtcF93cmFwcGVyLlMgXAotCWFyY2gteDg2L3N0cmluZy9zdHJsZW5fd3JhcHBlci5TIFwKKyAgICBiaW9uaWMvcHRocmVhZC1hdGZvcmsuYyBcCisgICAgYmlvbmljL3B0aHJlYWQtcndsb2Nrcy5jIFwKKyAgICBiaW9uaWMvcHRocmVhZC10aW1lcnMuYyBcCisgICAgYmlvbmljL3B0cmFjZS5jIFwKKworbGliY19zdGF0aWNfY29tbW9uX3NyY19maWxlcyArPSBcCisgICAgYmlvbmljL3B0aHJlYWQuYyBcCisgICAgYmlvbmljL3B0aHJlYWRfY3JlYXRlLmNwcCBcCisgICAgYmlvbmljL3B0aHJlYWRfa2V5LmNwcCBcCisKK2VuZGlmICMgeDg2CisKK2lmZXEgKCQoVEFSR0VUX0FSQ0gpLG1pcHMpCitsaWJjX2NvbW1vbl9zcmNfZmlsZXMgKz0gXAorCWJpb25pYy9tZW1jbXAuYyBcCisJc3RyaW5nL2Jjb3B5LmMgXAorCXN0cmluZy9zdHJjbXAuYyBcCiAJc3RyaW5nL3N0cmNweS5jIFwKKwlzdHJpbmcvc3RybmNtcC5jIFwKKwlzdHJpbmcvc3RyY2F0LmMgXAorCXN0cmluZy9zdHJuY2F0LmMgXAorCXN0cmluZy9zdHJuY3B5LmMgXAorCWJpb25pYy9zdHJjaHIuY3BwIFwKKwlzdHJpbmcvc3RycmNoci5jIFwKKwliaW9uaWMvbWVtY2hyLmMgXAorCWJpb25pYy9tZW1yY2hyLmMgXAorCXN0cmluZy9pbmRleC5jIFwKKwliaW9uaWMvc3Rybmxlbi5jIFwKKwlzdHJpbmcvc3RybGNhdC5jIFwKKwlzdHJpbmcvc3RybGNweS5jIFwKKwl1cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0cmluZy93Y3NjaHIuYyBcCisJdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdHJpbmcvd2NzcmNoci5jIFwKKwl1cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0cmluZy93Y3NjbXAuYyBcCisJdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdHJpbmcvd2NzY3B5LmMgXAorCXVwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RyaW5nL3dtZW1jbXAuYyBcCisJdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdHJpbmcvd2NzbGVuLmMgXAorCXVwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RyaW5nL3djc2NhdC5jCisKK2xpYmNfY29tbW9uX3NyY19maWxlcyArPSBcCiAJYmlvbmljL3B0aHJlYWQtYXRmb3JrLmMgXAogCWJpb25pYy9wdGhyZWFkLXJ3bG9ja3MuYyBcCiAJYmlvbmljL3B0aHJlYWQtdGltZXJzLmMgXAogCWJpb25pYy9wdHJhY2UuYwogCiBsaWJjX3N0YXRpY19jb21tb25fc3JjX2ZpbGVzICs9IFwKLSAgICAgICAgYmlvbmljL3B0aHJlYWQuYyBcCisgICAgYmlvbmljL3B0aHJlYWQuYyBcCisgICAgYmlvbmljL3B0aHJlYWRfY3JlYXRlLmNwcCBcCisgICAgYmlvbmljL3B0aHJlYWRfa2V5LmNwcCBcCiAKLSMgdGhpcyBpcyBuZWVkZWQgZm9yIHN0YXRpYyB2ZXJzaW9ucyBvZiBsaWJjCi1saWJjX2FyY2hfc3RhdGljX3NyY19maWxlcyA6PSBcCi0JYXJjaC14ODYvYmlvbmljL2RsX2l0ZXJhdGVfcGhkcl9zdGF0aWMuYworZW5kaWYgIyBtaXBzCiAKLWxpYmNfYXJjaF9keW5hbWljX3NyY19maWxlcyA6PQotZWxzZSAjICF4ODYKK2lmZXEgKCQoc3RyaXAgJChUQVJHRVRfQ1BVX1ZBUklBTlQpKSwpCiskKHdhcm5pbmcgVEFSR0VUX0NQVV9WQVJJQU5UIGlzIG5vdCBkZWZpbmVkKQorZW5kaWYKIAotZW5kaWYgIyAheDg2Ci1lbmRpZiAjICFhcm0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyBBZGQgY3B1IHNwZWNpZmljIHNvdXJjZSBmaWxlcy4KKyMjCisjIyBUaGlzIGNhbiBiZSBjYWxsZWQgbXVsdGlwbGUgdGltZXMsIGJ1dCBpdCB3aWxsIG9ubHkgYWRkCisjIyB0aGUgZmlyc3Qgc291cmNlIGZpbGUgZm9yIGVhY2ggdW5pcXVlICQoMSkuCisjIyAkKDEpOiBVbmlxdWUgaWRlbnRpZmllciB0byBpZGVudGlmeSB0aGUgY3B1IHZhcmlhbnQKKyMjICAgICAgIGltcGxlbWVudGF0aW9uLgorIyMgJCgyKTogQ3B1IHNwZWNpZmljIHNvdXJjZSBmaWxlLgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworZGVmaW5lIGxpYmMtYWRkLWNwdS12YXJpYW50LXNyYworJChpZiAkKGZpbHRlciB0cnVlLCQoX0xJQkNfQVJDSF9DUFVfVkFSSUFOVF9IQVNfJCgxKSkpLCBcCisJLCBcCisgICAgICQoZXZhbCBfTElCQ19BUkNIX0NQVV9WQVJJQU5UX0hBU18kKDEpIDo9IHRydWUpIFwKKyAgICAgJChldmFsIF9MSUJDX0FSQ0hfQ1BVX1ZBUklBTlRfU1JDX0ZJTEUuJCgxKSA6PSAkKDIpKSBcCisgICAgICQoZXZhbCBfTElCQ19BUkNIX0NQVV9WQVJJQU5UX1NSQ19GSUxFUyArPSAkKDIpKSBcCispCitlbmRlZgorCitfTElCQ19BUkNIX0NPTU1PTl9TUkNfRklMRVMgOj0KK19MSUJDX0FSQ0hfQ1BVX1ZBUklBTlRfU1JDX0ZJTEVTIDo9CitfTElCQ19BUkNIX1NUQVRJQ19TUkNfRklMRVMgOj0KK19MSUJDX0FSQ0hfRFlOQU1JQ19TUkNfRklMRVMgOj0KK2luY2x1ZGUgYmlvbmljL2xpYmMvYXJjaC0kKFRBUkdFVF9BUkNIKS8kKFRBUkdFVF9BUkNIKS5taworCitsaWJjX2NvbW1vbl9zcmNfZmlsZXMgKz0gJChfTElCQ19BUkNIX0NPTU1PTl9TUkNfRklMRVMpCitsaWJjX2NvbW1vbl9zcmNfZmlsZXMgKz0gJChfTElCQ19BUkNIX0NQVV9WQVJJQU5UX1NSQ19GSUxFUykKK2xpYmNfYXJjaF9zdGF0aWNfc3JjX2ZpbGVzIDo9ICQoX0xJQkNfQVJDSF9TVEFUSUNfU1JDX0ZJTEVTKQorbGliY19hcmNoX2R5bmFtaWNfc3JjX2ZpbGVzIDo9ICQoX0xJQkNfQVJDSF9EWU5BTUlDX1NSQ19GSUxFUykKIAogIyBEZWZpbmUgc29tZSBjb21tb24gY2ZsYWdzCiAjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiBsaWJjX2NvbW1vbl9jZmxhZ3MgOj0gXAotCQktRFdJVEhfRVJSTElTVAkJCVwKLQkJLURBTkRST0lEX0NIQU5HRVMJCVwKLQkJLURVU0VfTE9DS1MgCQkJXAotCQktRFJFQUxMT0NfWkVST19CWVRFU19GUkVFUyAJXAotCQktRF9MSUJDPTEgCQkJXAotCQktRFNPRlRGTE9BVCAgICAgICAgICAgICAgICAgICAgIFwKLQkJLURGTE9BVElOR19QT0lOVAkJXAotCQktRElORVQ2IFwKLQkJLUkkKExPQ0FMX1BBVEgpL3ByaXZhdGUgXAotCQktRFVTRV9ETF9QUkVGSVggXAotCQktRFBPU0lYX01JU1RBS0UgXAotICAgICAgICAgICAgICAgIC1ETE9HX09OX0hFQVBfRVJST1IgXAotCi0jIHRoZXNlIG1hY3JvIGRlZmluaXRpb25zIGFyZSByZXF1aXJlZCB0byBpbXBsZW1lbnQgdGhlCi0jICd0aW1lem9uZScgYW5kICdkYXlsaWdodCcgZ2xvYmFsIHZhcmlhYmxlcywgYXMgd2VsbCBhcwotIyBwcm9wZXJseSB1cGRhdGUgdGhlICd0bV9nbXRvZmYnIGZpZWxkIGluICdzdHJ1Y3QgdG0nLgotIwotbGliY19jb21tb25fY2ZsYWdzICs9IFwKLSAgICAtRFRNX0dNVE9GRj10bV9nbXRvZmYgXAotICAgIC1EVVNHX0NPTVBBVD0xCisgICAgLURXSVRIX0VSUkxJU1QgXAorICAgIC1EQU5EUk9JRF9DSEFOR0VTIFwKKyAgICAtRF9MSUJDPTEgXAorICAgIC1ERkxPQVRJTkdfUE9JTlQgXAorICAgIC1ESU5FVDYgXAorICAgIC1JJChMT0NBTF9QQVRIKS9wcml2YXRlIFwKKyAgICAtRFBPU0lYX01JU1RBS0UgXAorICAgIC1ETE9HX09OX0hFQVBfRVJST1IgXAorICAgIC1XYWxsIC1XZXh0cmEKIAogaWZlcSAoJChzdHJpcCAkKERFQlVHX0JJT05JQ19MSUJDKSksdHJ1ZSkKICAgbGliY19jb21tb25fY2ZsYWdzICs9IC1EREVCVUcKQEAgLTQ2NywzMyArNTA0LDMwIEBACiBlbmRpZgogCiBpZmVxICgkKFRBUkdFVF9BUkNIKSxhcm0pCisgIGxpYmNfY29tbW9uX2NmbGFncyArPSAtRFNPRlRGTE9BVAogICBsaWJjX2NvbW1vbl9jZmxhZ3MgKz0gLWZzdHJpY3QtYWxpYXNpbmcKICAgbGliY19jcnRfdGFyZ2V0X2NmbGFncyA6PSAtbXRodW1iLWludGVyd29yawotICAjCi0gICMgRGVmaW5lIEhBVkVfQVJNX1RMU19SRUdJU1RFUiBtYWNybyB0byBpbmRpY2F0ZSB0byB0aGUgQyBsaWJyYXJ5Ci0gICMgdGhhdCBpdCBzaG91bGQgYWNjZXNzIHRoZSBoYXJkd2FyZSBUTFMgcmVnaXN0ZXIgZGlyZWN0bHkgaW4KLSAgIyBwcml2YXRlL2Jpb25pY190bHMuaAotICAjCi0gICMgVGhlIHZhbHVlIG11c3QgbWF0Y2ggeW91ciBrZXJuZWwgY29uZmlndXJhdGlvbgotICAjCi0gIGlmZXEgKCQoQVJDSF9BUk1fSEFWRV9UTFNfUkVHSVNURVIpLHRydWUpCi0gICAgbGliY19jb21tb25fY2ZsYWdzICs9IC1ESEFWRV9BUk1fVExTX1JFR0lTVEVSCi0gIGVuZGlmCi0gICMKLSAgIyBEZWZpbmUgSEFWRV8zMl9CWVRFX0NBQ0hFX0xJTkVTIHRvIGluZGljYXRlIHRvIEMKLSAgIyBsaWJyYXJ5IGl0IHNob3VsZCB1c2UgdG8gMzItYnl0ZSB2ZXJzaW9uIG9mIG1lbWNweSwgYW5kIG5vdAotICAjIHRoZSA2NC1ieXRlIHZlcnNpb24uCi0gICMKLSAgaWZlcSAoJChBUkNIX0FSTV9IQVZFXzMyX0JZVEVfQ0FDSEVfTElORVMpLHRydWUpCi0gICAgbGliY19jb21tb25fY2ZsYWdzICs9IC1ESEFWRV8zMl9CWVRFX0NBQ0hFX0xJTkUKLSAgZW5kaWYKLWVsc2UgIyAhYXJtCi0gIGlmZXEgKCQoVEFSR0VUX0FSQ0gpLHg4NikKLSAgICBsaWJjX2NydF90YXJnZXRfY2ZsYWdzIDo9Ci0gICAgIyBUQVJHRVRfR0xPQkFMX0NGTEFHUyBmcm9tIGJ1aWxkL2NvcmUvY29tYm8vVEFSR0VUX2xpbnV4LXg4Ni5tayBzZXRzIGFsbCByZXF1aXJlZCBmbGFncy4KLSAgZW5kaWYgIyB4ODYKIGVuZGlmICMgIWFybQogCitpZmVxICgkKFRBUkdFVF9BUkNIKSx4ODYpCisgIGxpYmNfY29tbW9uX2NmbGFncyArPSAtRFNPRlRGTE9BVAorICBsaWJjX2NydF90YXJnZXRfY2ZsYWdzIDo9CisgIGlmZXEgKCQoQVJDSF9YODZfSEFWRV9TU0UyKSx0cnVlKQorICAgICAgbGliY19jcnRfdGFyZ2V0X2NmbGFncyArPSAtRFVTRV9TU0UyPTEKKyAgZW5kaWYKKyAgaWZlcSAoJChBUkNIX1g4Nl9IQVZFX1NTU0UzKSx0cnVlKQorICAgICAgbGliY19jcnRfdGFyZ2V0X2NmbGFncyArPSAtRFVTRV9TU1NFMz0xCisgIGVuZGlmCitlbmRpZiAjIHg4NgorCitpZmVxICgkKFRBUkdFVF9BUkNIKSxtaXBzKQorICBpZm5lcSAoJChBUkNIX01JUFNfSEFTX0ZQVSksdHJ1ZSkKKyAgICBsaWJjX2NvbW1vbl9jZmxhZ3MgKz0gLURTT0ZURkxPQVQKKyAgZW5kaWYKKyAgbGliY19jb21tb25fY2ZsYWdzICs9IC1mc3RyaWN0LWFsaWFzaW5nCisgIGxpYmNfY3J0X3RhcmdldF9jZmxhZ3MgOj0gJChUQVJHRVRfR0xPQkFMX0NGTEFHUykKK2VuZGlmICMgbWlwcworCiAjIERlZmluZSBBTkRST0lEX1NNUCBhcHByb3ByaWF0ZWx5LgogaWZlcSAoJChUQVJHRVRfQ1BVX1NNUCksdHJ1ZSkKICAgICBsaWJjX2NvbW1vbl9jZmxhZ3MgKz0gLURBTkRST0lEX1NNUD0xCkBAIC01MDEsODIgKzUzNSwxMzkgQEAKICAgICBsaWJjX2NvbW1vbl9jZmxhZ3MgKz0gLURBTkRST0lEX1NNUD0wCiBlbmRpZgogCi0jIE5lZWRlZCB0byBhY2Nlc3MgcHJpdmF0ZS9fX2Rzb19oYW5kbGUuUyBmcm9tCi0jIGNydGJlZ2luX3h4eC5TIGFuZCBjcnRlbmRfeHh4LlMKLSMKLWxpYmNfY3J0X3RhcmdldF9jZmxhZ3MgKz0gLUkkKExPQ0FMX1BBVEgpL3ByaXZhdGUKLQotaWZlcSAoJChUQVJHRVRfQVJDSCksYXJtKQotbGliY19jcnRfdGFyZ2V0X2NmbGFncyArPSAtRENSVF9MRUdBQ1lfV09SS0FST1VORAotZW5kaWYKKyMgY3J0YnJhbmQuYyBuZWVkcyA8c3RkaW50Lmg+IGFuZCBhICNkZWZpbmUgZm9yIHRoZSBwbGF0Zm9ybSBTREsgdmVyc2lvbi4KK2xpYmNfY3J0X3RhcmdldF9jZmxhZ3MgKz0gXAorICAgIC1JJChMT0NBTF9QQVRIKS9pbmNsdWRlICBcCisgICAgLURQTEFURk9STV9TREtfVkVSU0lPTj0kKFBMQVRGT1JNX1NES19WRVJTSU9OKQogCiAjIERlZmluZSBzb21lIGNvbW1vbiBpbmNsdWRlcwogIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogbGliY19jb21tb25fY19pbmNsdWRlcyA6PSBcCiAJCSQoTE9DQUxfUEFUSCkvc3RkbGliICBcCiAJCSQoTE9DQUxfUEFUSCkvc3RyaW5nICBcCi0JCSQoTE9DQUxfUEFUSCkvc3RkaW8KKwkJJChMT0NBTF9QQVRIKS9zdGRpbyAgIFwKKwkJZXh0ZXJuYWwvc2FmZS1pb3AvaW5jbHVkZQogCi0jIE5lZWRlZCB0byBhY2Nlc3MgcHJpdmF0ZS9fX2Rzb19oYW5kbGUuUyBmcm9tCisjIE5lZWRlZCB0byBhY2Nlc3MgcHJpdmF0ZS9fX2Rzb19oYW5kbGUuaCBmcm9tCiAjIGNydGJlZ2luX3h4eC5TIGFuZCBjcnRlbmRfeHh4LlMKLSMKLWxpYmNfY3J0X3RhcmdldF9jZmxhZ3MgKz0gLUkkKExPQ0FMX1BBVEgpL3ByaXZhdGUKK2xpYmNfY3J0X3RhcmdldF9jZmxhZ3MgKz0gXAorICAgIC1JJChMT0NBTF9QQVRIKS9wcml2YXRlIFwKKyAgICAtSSQoTE9DQUxfUEFUSCkvYXJjaC0kKFRBUkdFVF9BUkNIKS9pbmNsdWRlCiAKICMgRGVmaW5lIHRoZSBsaWJjIHJ1bi10aW1lIChjcnQpIHN1cHBvcnQgb2JqZWN0IGZpbGVzIHRoYXQgbXVzdCBiZSBidWlsdCwKICMgd2hpY2ggYXJlIG5lZWRlZCB0byBidWlsZCBhbGwgb3RoZXIgb2JqZWN0cyAoc2hhcmVkL3N0YXRpYyBsaWJzIGFuZAogIyBleGVjdXRhYmxlcykKICMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotaWZuZXEgKCQoZmlsdGVyIGFybSB4ODYsJChUQVJHRVRfQVJDSCkpLCkKLSMgQVJNIGFuZCB4ODYgbmVlZCBjcnRiZWdpbl9zby9jcnRlbmRfc28uCisjIEFSTSwgTUlQUywgYW5kIHg4NiBhbGwgbmVlZCBjcnRiZWdpbl9zby9jcnRlbmRfc28uCiAjCiAjIEZvciB4ODYsIHRoZSAuaW5pdCBzZWN0aW9uIG11c3QgcG9pbnQgdG8gYSBmdW5jdGlvbiB0aGF0IGNhbGxzIGFsbAogIyBlbnRyaWVzIGluIHRoZSAuY3RvcnMgc2VjdGlvbi4gKG9uIEFSTSB0aGlzIGlzIGRvbmUgdGhyb3VnaCB0aGUKICMgLmluaXRfYXJyYXkgc2VjdGlvbiBpbnN0ZWFkKS4KICMKLSMgRm9yIGJvdGggcGxhdGZvcm1zLCB0aGUgLmZpbmlfYXJyYXkgc2VjdGlvbiBtdXN0IHBvaW50IHRvIGEgZnVuY3Rpb24KKyMgRm9yIGFsbCB0aGUgcGxhdGZvcm1zLCB0aGUgLmZpbmlfYXJyYXkgc2VjdGlvbiBtdXN0IHBvaW50IHRvIGEgZnVuY3Rpb24KICMgdGhhdCB3aWxsIGNhbGwgX19jeGFfZmluYWxpemUoJl9fZHNvX2hhbmRsZSkgaW4gb3JkZXIgdG8gZW5zdXJlIHRoYXQKICMgc3RhdGljIEMrKyBkZXN0cnVjdG9ycyBhcmUgcHJvcGVybHkgY2FsbGVkIG9uIGRsY2xvc2UoKS4KICMKLQotbGliY19jcnRfdGFyZ2V0X3NvX2NmbGFncyA6PSAkKGxpYmNfY3J0X3RhcmdldF9jZmxhZ3MpCi1pZmVxICgkKFRBUkdFVF9BUkNIKSx4ODYpCi0gICAgIyBUaGlzIGZsYWcgbXVzdCBiZSBhZGRlZCBmb3IgeDg2IHRhcmdldHMsIGJ1dCBub3QgZm9yIEFSTQotICAgIGxpYmNfY3J0X3RhcmdldF9zb19jZmxhZ3MgKz0gLWZQSUMKK2lmZXEgKCQoVEFSR0VUX0FSQ0gpLGFybSkKKyAgICBsaWJjX2NydF90YXJnZXRfc29fY2ZsYWdzIDo9CiBlbmRpZgotR0VOIDo9ICQoVEFSR0VUX09VVF9TVEFUSUNfTElCUkFSSUVTKS9jcnRiZWdpbl9zby5vCi0kKEdFTik6ICQoTE9DQUxfUEFUSCkvYXJjaC0kKFRBUkdFVF9BUkNIKS9iaW9uaWMvY3J0YmVnaW5fc28uUworaWZlcSAoJChUQVJHRVRfQVJDSCksbWlwcykKKyAgICBsaWJjX2NydF90YXJnZXRfc29fY2ZsYWdzIDo9IC1mUElDCitlbmRpZgoraWZlcSAoJChUQVJHRVRfQVJDSCkseDg2KQorICAgIGxpYmNfY3J0X3RhcmdldF9zb19jZmxhZ3MgOj0gLWZQSUMKK2VuZGlmCitsaWJjX2NydF90YXJnZXRfc29fY2ZsYWdzICs9ICQobGliY19jcnRfdGFyZ2V0X2NmbGFncykKK2xpYmNfY3J0X3RhcmdldF9jcnRiZWdpbl9maWxlIDo9ICQoTE9DQUxfUEFUSCkvYXJjaC0kKFRBUkdFVF9BUkNIKS9iaW9uaWMvY3J0YmVnaW4uYworbGliY19jcnRfdGFyZ2V0X2NydGJlZ2luX3NvX2ZpbGUgOj0gJChMT0NBTF9QQVRIKS9hcmNoLSQoVEFSR0VUX0FSQ0gpL2Jpb25pYy9jcnRiZWdpbl9zby5jCisKKyMgU2VlIHRoZSBjb21tZW50IGluIGNydGJyYW5kLmMgZm9yIHRoZSByZWFzb24gd2h5IHdlIG5lZWQgdG8gZ2VuZXJhdGUKKyMgY3J0YnJhbmQucyBiZWZvcmUgZ2VuZXJhdGluZyBjcnRicmFuZC5vLgorR0VOIDo9ICQoVEFSR0VUX09VVF9JTlRFUk1FRElBVEVfTElCUkFSSUVTKS9jcnRicmFuZC5zCiskKEdFTik6ICQoTE9DQUxfUEFUSCkvYmlvbmljL2NydGJyYW5kLmMKIAlAbWtkaXIgLXAgJChkaXIgJEApCi0JJChUQVJHRVRfQ0MpICQobGliY19jcnRfdGFyZ2V0X3NvX2NmbGFncykgLW8gJEAgLWMgJDwKKwkkKGhpZGUpICQoVEFSR0VUX0NDKSAkKGxpYmNfY3J0X3RhcmdldF9zb19jZmxhZ3MpIC1TIFwKKwkJLU1EIC1NRiAkKEA6JS5zPSUuZCkgLW8gJEAgJDwKKwkkKGhpZGUpIHNlZCAtaSAtZSAnL1wubm90ZVwuQUJJLXRhZy9zL3Byb2diaXRzL25vdGUvJyAkQAorCSQoY2FsbCB0cmFuc2Zvcm0tZC10by1wLWFyZ3MsJChAOiUucz0lLmQpLCQoQDolLnM9JS5QKSkKKy1pbmNsdWRlICQoR0VOOiUucz0lLlApCiBBTExfR0VORVJBVEVEX1NPVVJDRVMgKz0gJChHRU4pCiAKLUdFTiA6PSAkKFRBUkdFVF9PVVRfU1RBVElDX0xJQlJBUklFUykvY3J0ZW5kX3NvLm8KK0dFTiA6PSAkKFRBUkdFVF9PVVRfSU5URVJNRURJQVRFX0xJQlJBUklFUykvY3J0YnJhbmQubworJChHRU4pOiAkKFRBUkdFVF9PVVRfSU5URVJNRURJQVRFX0xJQlJBUklFUykvY3J0YnJhbmQucworCUBta2RpciAtcCAkKGRpciAkQCkKKwkkKGhpZGUpICQoVEFSR0VUX0NDKSAkKGxpYmNfY3J0X3RhcmdldF9zb19jZmxhZ3MpIC1vICRAIC1jICQ8CitBTExfR0VORVJBVEVEX1NPVVJDRVMgKz0gJChHRU4pCisKK0dFTiA6PSAkKFRBUkdFVF9PVVRfSU5URVJNRURJQVRFX0xJQlJBUklFUykvY3J0YmVnaW5fc28ubworJChHRU4pOiAkKGxpYmNfY3J0X3RhcmdldF9jcnRiZWdpbl9zb19maWxlKQorCUBta2RpciAtcCAkKGRpciAkQCkKKwkkKGhpZGUpICQoVEFSR0VUX0NDKSAkKGxpYmNfY3J0X3RhcmdldF9zb19jZmxhZ3MpIFwKKwkJLU1EIC1NRiAkKEA6JS5vPSUuZCkgLW8gJEAgLWMgJDwKKwkkKHRyYW5zZm9ybS1kLXRvLXApCistaW5jbHVkZSAkKEdFTjolLm89JS5QKQorQUxMX0dFTkVSQVRFRF9TT1VSQ0VTICs9ICQoR0VOKQorCitHRU4gOj0gJChUQVJHRVRfT1VUX0lOVEVSTUVESUFURV9MSUJSQVJJRVMpL2NydGVuZF9zby5vCiAkKEdFTik6ICQoTE9DQUxfUEFUSCkvYXJjaC0kKFRBUkdFVF9BUkNIKS9iaW9uaWMvY3J0ZW5kX3NvLlMKIAlAbWtkaXIgLXAgJChkaXIgJEApCi0JJChUQVJHRVRfQ0MpICQobGliY19jcnRfdGFyZ2V0X3NvX2NmbGFncykgLW8gJEAgLWMgJDwKKwkkKGhpZGUpICQoVEFSR0VUX0NDKSAkKGxpYmNfY3J0X3RhcmdldF9zb19jZmxhZ3MpIFwKKwkJLU1EIC1NRiAkKEA6JS5vPSUuZCkgLW8gJEAgLWMgJDwKKwkkKHRyYW5zZm9ybS1kLXRvLXApCistaW5jbHVkZSAkKEdFTjolLm89JS5QKQogQUxMX0dFTkVSQVRFRF9TT1VSQ0VTICs9ICQoR0VOKQotZW5kaWYgIyBUQVJHRVRfQVJDSCA9PSB4ODYgfHwgVEFSR0VUX0FSQ0ggPT0gYXJtCisKKyMgVGhlIGZvbGxvd2luZyB0d28gYXJlIGluc3RhbGxlZCB0byBkZXZpY2UKK0dFTiA6PSAkKFRBUkdFVF9PVVRfU0hBUkVEX0xJQlJBUklFUykvY3J0YmVnaW5fc28ubworJChHRU4pOiAkKFRBUkdFVF9PVVRfSU5URVJNRURJQVRFX0xJQlJBUklFUykvY3J0YmVnaW5fc28ubworCSQoaGlkZSkgbWtkaXIgLXAgJChkaXIgJEApICYmIGNwIC1mICQ8ICRACitBTExfR0VORVJBVEVEX1NPVVJDRVMgKz0gJChHRU4pCisKK0dFTiA6PSAkKFRBUkdFVF9PVVRfU0hBUkVEX0xJQlJBUklFUykvY3J0ZW5kX3NvLm8KKyQoR0VOKTogJChUQVJHRVRfT1VUX0lOVEVSTUVESUFURV9MSUJSQVJJRVMpL2NydGVuZF9zby5vCisJJChoaWRlKSBta2RpciAtcCAkKGRpciAkQCkgJiYgY3AgLWYgJDwgJEAKK0FMTF9HRU5FUkFURURfU09VUkNFUyArPSAkKEdFTikKIAogCi1HRU4gOj0gJChUQVJHRVRfT1VUX1NUQVRJQ19MSUJSQVJJRVMpL2NydGJlZ2luX3N0YXRpYy5vCi0kKEdFTik6ICQoTE9DQUxfUEFUSCkvYXJjaC0kKFRBUkdFVF9BUkNIKS9iaW9uaWMvY3J0YmVnaW5fc3RhdGljLlMKK0dFTiA6PSAkKFRBUkdFVF9PVVRfSU5URVJNRURJQVRFX0xJQlJBUklFUykvY3J0YmVnaW5fc3RhdGljMS5vCiskKEdFTik6ICQobGliY19jcnRfdGFyZ2V0X2NydGJlZ2luX2ZpbGUpCiAJQG1rZGlyIC1wICQoZGlyICRAKQotCSQoVEFSR0VUX0NDKSAkKGxpYmNfY3J0X3RhcmdldF9jZmxhZ3MpIC1vICRAIC1jICQ8CisJJChoaWRlKSAkKFRBUkdFVF9DQykgJChsaWJjX2NydF90YXJnZXRfY2ZsYWdzKSBcCisJCS1NRCAtTUYgJChAOiUubz0lLmQpIC1vICRAIC1jICQ8CisJJCh0cmFuc2Zvcm0tZC10by1wKQorLWluY2x1ZGUgJChHRU46JS5vPSUuUCkKIEFMTF9HRU5FUkFURURfU09VUkNFUyArPSAkKEdFTikKIAotR0VOIDo9ICQoVEFSR0VUX09VVF9TVEFUSUNfTElCUkFSSUVTKS9jcnRiZWdpbl9keW5hbWljLm8KLSQoR0VOKTogJChMT0NBTF9QQVRIKS9hcmNoLSQoVEFSR0VUX0FSQ0gpL2Jpb25pYy9jcnRiZWdpbl9keW5hbWljLlMKK0dFTiA6PSAkKFRBUkdFVF9PVVRfSU5URVJNRURJQVRFX0xJQlJBUklFUykvY3J0YmVnaW5fc3RhdGljLm8KKyQoR0VOKTogJChUQVJHRVRfT1VUX0lOVEVSTUVESUFURV9MSUJSQVJJRVMpL2NydGJlZ2luX3N0YXRpYzEubyAkKFRBUkdFVF9PVVRfSU5URVJNRURJQVRFX0xJQlJBUklFUykvY3J0YnJhbmQubwogCUBta2RpciAtcCAkKGRpciAkQCkKLQkkKFRBUkdFVF9DQykgJChsaWJjX2NydF90YXJnZXRfY2ZsYWdzKSAtbyAkQCAtYyAkPAorCSQoaGlkZSkgJChUQVJHRVRfTEQpIC1yIC1vICRAICReCiBBTExfR0VORVJBVEVEX1NPVVJDRVMgKz0gJChHRU4pCiAKK0dFTiA6PSAkKFRBUkdFVF9PVVRfSU5URVJNRURJQVRFX0xJQlJBUklFUykvY3J0YmVnaW5fZHluYW1pYzEubworJChHRU4pOiAkKGxpYmNfY3J0X3RhcmdldF9jcnRiZWdpbl9maWxlKQorCUBta2RpciAtcCAkKGRpciAkQCkKKwkkKGhpZGUpICQoVEFSR0VUX0NDKSAkKGxpYmNfY3J0X3RhcmdldF9jZmxhZ3MpIFwKKwkJLU1EIC1NRiAkKEA6JS5vPSUuZCkgLW8gJEAgLWMgJDwKKwkkKHRyYW5zZm9ybS1kLXRvLXApCistaW5jbHVkZSAkKEdFTjolLm89JS5QKQorQUxMX0dFTkVSQVRFRF9TT1VSQ0VTICs9ICQoR0VOKQorCitHRU4gOj0gJChUQVJHRVRfT1VUX0lOVEVSTUVESUFURV9MSUJSQVJJRVMpL2NydGJlZ2luX2R5bmFtaWMubworJChHRU4pOiAkKFRBUkdFVF9PVVRfSU5URVJNRURJQVRFX0xJQlJBUklFUykvY3J0YmVnaW5fZHluYW1pYzEubyAkKFRBUkdFVF9PVVRfSU5URVJNRURJQVRFX0xJQlJBUklFUykvY3J0YnJhbmQubworCUBta2RpciAtcCAkKGRpciAkQCkKKwkkKGhpZGUpICQoVEFSR0VUX0xEKSAtciAtbyAkQCAkXgorQUxMX0dFTkVSQVRFRF9TT1VSQ0VTICs9ICQoR0VOKQogCiAjIFdlIHJlbmFtZSBjcnRlbmQubyB0byBjcnRlbmRfYW5kcm9pZC5vIHRvIGF2b2lkIGEKICMgbmFtZSBjbGFzaCBiZXR3ZWVuIGdjYyBhbmQgYmlvbmljLgotR0VOIDo9ICQoVEFSR0VUX09VVF9TVEFUSUNfTElCUkFSSUVTKS9jcnRlbmRfYW5kcm9pZC5vCitHRU4gOj0gJChUQVJHRVRfT1VUX0lOVEVSTUVESUFURV9MSUJSQVJJRVMpL2NydGVuZF9hbmRyb2lkLm8KICQoR0VOKTogJChMT0NBTF9QQVRIKS9hcmNoLSQoVEFSR0VUX0FSQ0gpL2Jpb25pYy9jcnRlbmQuUwogCUBta2RpciAtcCAkKGRpciAkQCkKLQkkKFRBUkdFVF9DQykgJChsaWJjX2NydF90YXJnZXRfY2ZsYWdzKSAtbyAkQCAtYyAkPAorCSQoaGlkZSkgJChUQVJHRVRfQ0MpICQobGliY19jcnRfdGFyZ2V0X2NmbGFncykgXAorCQktTUQgLU1GICQoQDolLm89JS5kKSAtbyAkQCAtYyAkPAorCSQodHJhbnNmb3JtLWQtdG8tcCkKKy1pbmNsdWRlICQoR0VOOiUubz0lLlApCiBBTExfR0VORVJBVEVEX1NPVVJDRVMgKz0gJChHRU4pCiAKIApAQCAtNTg1LDE5ICs2NzYsMTMzIEBACiBXSVRIX01BTExPQ19DSEVDS19MSUJDX0EgOj0gJChzdHJpcCAkKFdJVEhfTUFMTE9DX0NIRUNLX0xJQkNfQSkpCiAKICMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgbGliYmlvbmljX3NzcC5hIC0gc3RhY2sgcHJvdGVjdG9yIGNvZGUKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMKKyMgVGhlIHN0YWNrIHByb3RlY3RvciBjb2RlIG5lZWRzIHRvIGJlIGNvbXBpbGVkCisjIHdpdGggLWZuby1zdGFjay1wcm90ZWN0b3IsIHNpbmNlIGl0IG1vZGlmaWVzIHRoZQorIyBzdGFjayBjYW5hcnkuCisKK2luY2x1ZGUgJChDTEVBUl9WQVJTKQorCitMT0NBTF9TUkNfRklMRVMgOj0gYmlvbmljL19fc3RhY2tfY2hrX2ZhaWwuY3BwCitMT0NBTF9DRkxBR1MgOj0gJChsaWJjX2NvbW1vbl9jZmxhZ3MpIC1mbm8tc3RhY2stcHJvdGVjdG9yIC1XZXJyb3IKK0xPQ0FMX0NfSU5DTFVERVMgOj0gJChsaWJjX2NvbW1vbl9jX2luY2x1ZGVzKQorTE9DQUxfTU9EVUxFIDo9IGxpYmJpb25pY19zc3AKK0xPQ0FMX0FERElUSU9OQUxfREVQRU5ERU5DSUVTIDo9ICQoTE9DQUxfUEFUSCkvQW5kcm9pZC5taworTE9DQUxfU1lTVEVNX1NIQVJFRF9MSUJSQVJJRVMgOj0KKworaW5jbHVkZSAkKEJVSUxEX1NUQVRJQ19MSUJSQVJZKQorCisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgbGliY190emNvZGUuYSAtIHVwc3RyZWFtICd0emNvZGUnIGNvZGUKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworaW5jbHVkZSAkKENMRUFSX1ZBUlMpCisKK0xPQ0FMX1NSQ19GSUxFUyA6PSAkKGxpYmNfdHpjb2RlX3NyY19maWxlcykKK0xPQ0FMX0NGTEFHUyA6PSBcCisgICAgJChsaWJjX2NvbW1vbl9jZmxhZ3MpIFwKKyAgICAtc3RkPWdudTk5IFwKKyAgICAtRFNURF9JTlNQSVJFRD0xIFwKKyAgICAtRFRaRElSPVwiL3N5c3RlbS91c3Ivc2hhcmUvem9uZWluZm9cIiBcCisgICAgLURUTV9HTVRPRkY9dG1fZ210b2ZmIFwKKyAgICAtRFVTR19DT01QQVQ9MQorTE9DQUxfQ19JTkNMVURFUyA6PSAkKGxpYmNfY29tbW9uX2NfaW5jbHVkZXMpCitMT0NBTF9NT0RVTEUgOj0gbGliY190emNvZGUKK0xPQ0FMX0FERElUSU9OQUxfREVQRU5ERU5DSUVTIDo9ICQoTE9DQUxfUEFUSCkvQW5kcm9pZC5taworTE9DQUxfU1lTVEVNX1NIQVJFRF9MSUJSQVJJRVMgOj0KKworaW5jbHVkZSAkKEJVSUxEX1NUQVRJQ19MSUJSQVJZKQorCisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgbGliY19mcmVlYnNkLmEgLSB1cHN0cmVhbSBGcmVlQlNEIEMgbGlicmFyeSBjb2RlCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjCisjIFRoZXNlIGZpbGVzIGFyZSBidWlsdCB3aXRoIHRoZSBmcmVlYnNkLWNvbXBhdC5oIGhlYWRlciBmaWxlCisjIGF1dG9tYXRpY2FsbHkgaW5jbHVkZWQuCisKK2luY2x1ZGUgJChDTEVBUl9WQVJTKQorCitMT0NBTF9TUkNfRklMRVMgOj0gJChsaWJjX3Vwc3RyZWFtX2ZyZWVic2Rfc3JjX2ZpbGVzKQorTE9DQUxfQ0ZMQUdTIDo9IFwKKyAgICAkKGxpYmNfY29tbW9uX2NmbGFncykgXAorICAgIC1JJChMT0NBTF9QQVRIKS91cHN0cmVhbS1mcmVlYnNkIFwKKyAgICAtSSQoTE9DQUxfUEFUSCkvdXBzdHJlYW0tZnJlZWJzZC9saWJjL2luY2x1ZGUgXAorICAgIC1pbmNsdWRlIHVwc3RyZWFtLWZyZWVic2QvZnJlZWJzZC1jb21wYXQuaAorTE9DQUxfQ19JTkNMVURFUyA6PSAkKGxpYmNfY29tbW9uX2NfaW5jbHVkZXMpCitMT0NBTF9NT0RVTEUgOj0gbGliY19mcmVlYnNkCitMT0NBTF9BRERJVElPTkFMX0RFUEVOREVOQ0lFUyA6PSAkKExPQ0FMX1BBVEgpL0FuZHJvaWQubWsKK0xPQ0FMX1NZU1RFTV9TSEFSRURfTElCUkFSSUVTIDo9CisKK2luY2x1ZGUgJChCVUlMRF9TVEFUSUNfTElCUkFSWSkKKworCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjIGxpYmNfbmV0YnNkLmEgLSB1cHN0cmVhbSBOZXRCU0QgQyBsaWJyYXJ5IGNvZGUKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMKKyMgVGhlc2UgZmlsZXMgYXJlIGJ1aWx0IHdpdGggdGhlIG5ldGJzZC1jb21wYXQuaCBoZWFkZXIgZmlsZQorIyBhdXRvbWF0aWNhbGx5IGluY2x1ZGVkLgorCitpbmNsdWRlICQoQ0xFQVJfVkFSUykKKworTE9DQUxfU1JDX0ZJTEVTIDo9ICQobGliY191cHN0cmVhbV9uZXRic2Rfc3JjX2ZpbGVzKQorTE9DQUxfQ0ZMQUdTIDo9IFwKKyAgICAkKGxpYmNfY29tbW9uX2NmbGFncykgXAorICAgIC1JJChMT0NBTF9QQVRIKS91cHN0cmVhbS1uZXRic2QgXAorICAgIC1JJChMT0NBTF9QQVRIKS91cHN0cmVhbS1uZXRic2QvbGliYy9pbmNsdWRlIFwKKyAgICAtaW5jbHVkZSB1cHN0cmVhbS1uZXRic2QvbmV0YnNkLWNvbXBhdC5oCitMT0NBTF9DX0lOQ0xVREVTIDo9ICQobGliY19jb21tb25fY19pbmNsdWRlcykKK0xPQ0FMX01PRFVMRSA6PSBsaWJjX25ldGJzZAorTE9DQUxfQURESVRJT05BTF9ERVBFTkRFTkNJRVMgOj0gJChMT0NBTF9QQVRIKS9BbmRyb2lkLm1rCitMT0NBTF9TWVNURU1fU0hBUkVEX0xJQlJBUklFUyA6PQorCitpbmNsdWRlICQoQlVJTERfU1RBVElDX0xJQlJBUlkpCisKKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyBsaWJjX2Jpb25pYy5hIC0gaG9tZS1ncm93biBDIGxpYnJhcnkgY29kZQorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIworaW5jbHVkZSAkKENMRUFSX1ZBUlMpCisKK0xPQ0FMX1NSQ19GSUxFUyA6PSAkKGxpYmNfYmlvbmljX3NyY19maWxlcykKK0xPQ0FMX0NGTEFHUyA6PSAkKGxpYmNfY29tbW9uX2NmbGFncykgLVdlcnJvcgorTE9DQUxfQ19JTkNMVURFUyA6PSAkKGxpYmNfY29tbW9uX2NfaW5jbHVkZXMpCitMT0NBTF9NT0RVTEUgOj0gbGliY19iaW9uaWMKK0xPQ0FMX0FERElUSU9OQUxfREVQRU5ERU5DSUVTIDo9ICQoTE9DQUxfUEFUSCkvQW5kcm9pZC5taworTE9DQUxfU1lTVEVNX1NIQVJFRF9MSUJSQVJJRVMgOj0KKworaW5jbHVkZSAkKEJVSUxEX1NUQVRJQ19MSUJSQVJZKQorCisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICMgbGliY19jb21tb24uYQogIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCiBpbmNsdWRlICQoQ0xFQVJfVkFSUykKIAogTE9DQUxfU1JDX0ZJTEVTIDo9ICQobGliY19jb21tb25fc3JjX2ZpbGVzKQotTE9DQUxfQ0ZMQUdTIDo9ICQobGliY19jb21tb25fY2ZsYWdzKQotaWZlcSAoJChUQVJHRVRfQVJDSCksYXJtKQotTE9DQUxfQ0ZMQUdTICs9IC1EQ1JUX0xFR0FDWV9XT1JLQVJPVU5ECi1lbmRpZgorTE9DQUxfQ0ZMQUdTIDo9ICQobGliY19jb21tb25fY2ZsYWdzKSBcCisgICAgLXN0ZD1nbnU5OSBcCisgICAgLUkkKExPQ0FMX1BBVEgpL3Vwc3RyZWFtLW5ldGJzZC9saWJjL2luY2x1ZGUgIyBmb3IgbmV0YnNkIHByaXZhdGUgaGVhZGVycwogTE9DQUxfQ19JTkNMVURFUyA6PSAkKGxpYmNfY29tbW9uX2NfaW5jbHVkZXMpCiBMT0NBTF9NT0RVTEUgOj0gbGliY19jb21tb24KK0xPQ0FMX0FERElUSU9OQUxfREVQRU5ERU5DSUVTIDo9ICQoTE9DQUxfUEFUSCkvQW5kcm9pZC5taworTE9DQUxfV0hPTEVfU1RBVElDX0xJQlJBUklFUyA6PSBcCisgICAgbGliYmlvbmljX3NzcCBcCisgICAgbGliY19iaW9uaWMgXAorICAgIGxpYmNfZnJlZWJzZCBcCisgICAgbGliY19uZXRic2QgXAorICAgIGxpYmNfdHpjb2RlCiBMT0NBTF9TWVNURU1fU0hBUkVEX0xJQlJBUklFUyA6PQogCisjIFRPRE86IHNwbGl0IG91dCB0aGUgYXNmbGFncy4KK0xPQ0FMX0FTRkxBR1MgOj0gJChMT0NBTF9DRkxBR1MpCisKIGluY2x1ZGUgJChCVUlMRF9TVEFUSUNfTElCUkFSWSkKIAogCkBAIC02MDYsMjMgKzgxMSwyNSBAQAogIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogIwogIyBUaGlzIGlzIGEgdmVyc2lvbiBvZiB0aGUgc3RhdGljIEMgbGlicmFyeSB0aGF0IGRvZXMgbm90Ci0jIGluY2x1ZGUgbWFsbG9jLiBJdCdzIHVzZWZ1bCBpbiBzaXR1YXRpb25zIHdoZW4gY2FsbGluZwotIyB0aGUgdXNlciB3YW50cyB0byBwcm92aWRlIHRoZWlyIG93biBtYWxsb2MgaW1wbGVtZW50YXRpb24sCi0jIG9yIHdhbnRzIHRvIGV4cGxpY2l0bHkgZGlzYWxsb3cgdGhlIHVzZSBvZiB0aGUgdXNlIG9mIG1hbGxvYywKLSMgbGlrZSB0aGUgZHluYW1pYyBsb2FkZXIuCisjIGluY2x1ZGUgbWFsbG9jLiBJdCdzIHVzZWZ1bCBpbiBzaXR1YXRpb25zIHdoZW4gdGhlIHVzZXIgd2FudHMKKyMgdG8gcHJvdmlkZSB0aGVpciBvd24gbWFsbG9jIGltcGxlbWVudGF0aW9uLCBvciB3YW50cyB0bworIyBleHBsaWNpdGx5IGRpc2FsbG93IHRoZSB1c2Ugb2YgdGhlIHVzZSBvZiBtYWxsb2MsCisjIHN1Y2ggYXMgaW4gdGhlIGR5bmFtaWMgbG9hZGVyLgogCiBpbmNsdWRlICQoQ0xFQVJfVkFSUykKIAogTE9DQUxfU1JDX0ZJTEVTIDo9IFwKIAkkKGxpYmNfYXJjaF9zdGF0aWNfc3JjX2ZpbGVzKSBcCiAJJChsaWJjX3N0YXRpY19jb21tb25fc3JjX2ZpbGVzKSBcCi0JYmlvbmljL2xpYmNfaW5pdF9zdGF0aWMuYworCWJpb25pYy9saWJjX2luaXRfc3RhdGljLmNwcAogCiBMT0NBTF9DX0lOQ0xVREVTIDo9ICQobGliY19jb21tb25fY19pbmNsdWRlcykKIExPQ0FMX0NGTEFHUyA6PSAkKGxpYmNfY29tbW9uX2NmbGFncykgXAotICAgICAgICAgICAgICAgIC1ETElCQ19TVEFUSUMKKyAgICAgICAgICAgICAgICAtRExJQkNfU1RBVElDIFwKKyAgICAgICAgICAgICAgICAtc3RkPWdudTk5CiAKIExPQ0FMX01PRFVMRSA6PSBsaWJjX25vbWFsbG9jCitMT0NBTF9BRERJVElPTkFMX0RFUEVOREVOQ0lFUyA6PSAkKExPQ0FMX1BBVEgpL0FuZHJvaWQubWsKIExPQ0FMX1dIT0xFX1NUQVRJQ19MSUJSQVJJRVMgOj0gbGliY19jb21tb24KIExPQ0FMX1NZU1RFTV9TSEFSRURfTElCUkFSSUVTIDo9CiAKQEAgLTYzOCwxMyArODQ1LDE1IEBACiAJJChsaWJjX2FyY2hfc3RhdGljX3NyY19maWxlcykgXAogCSQobGliY19zdGF0aWNfY29tbW9uX3NyY19maWxlcykgXAogCWJpb25pYy9kbG1hbGxvYy5jIFwKLQliaW9uaWMvbWFsbG9jX2RlYnVnX2NvbW1vbi5jIFwKLQliaW9uaWMvbGliY19pbml0X3N0YXRpYy5jCisJYmlvbmljL21hbGxvY19kZWJ1Z19jb21tb24uY3BwIFwKKwliaW9uaWMvbGliY19pbml0X3N0YXRpYy5jcHAKIAogTE9DQUxfQ0ZMQUdTIDo9ICQobGliY19jb21tb25fY2ZsYWdzKSBcCi0gICAgICAgICAgICAgICAgLURMSUJDX1NUQVRJQworICAgICAgICAgICAgICAgIC1ETElCQ19TVEFUSUMgXAorICAgICAgICAgICAgICAgIC1zdGQ9Z251OTkKIExPQ0FMX0NfSU5DTFVERVMgOj0gJChsaWJjX2NvbW1vbl9jX2luY2x1ZGVzKQogTE9DQUxfTU9EVUxFIDo9IGxpYmMKK0xPQ0FMX0FERElUSU9OQUxfREVQRU5ERU5DSUVTIDo9ICQoTE9DQUxfUEFUSCkvQW5kcm9pZC5tawogTE9DQUxfV0hPTEVfU1RBVElDX0xJQlJBUklFUyA6PSBsaWJjX2NvbW1vbgogTE9DQUxfU1lTVEVNX1NIQVJFRF9MSUJSQVJJRVMgOj0KIApAQCAtNjU2LDE3ICs4NjUsMzcgQEAKICMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIGluY2x1ZGUgJChDTEVBUl9WQVJTKQogCi1MT0NBTF9DRkxBR1MgOj0gJChsaWJjX2NvbW1vbl9jZmxhZ3MpCisjIHB0aHJlYWQgZGVhZGxvY2sgcHJlZGljdGlvbjoKKyMgc2V0IC1EUFRIUkVBRF9ERUJVRyAtRFBUSFJFQURfREVCVUdfRU5BQkxFRD0xIHRvIGVuYWJsZSBzdXBwb3J0IGZvcgorIyBwdGhyZWFkIGRlYWRsb2NrIHByZWRpY3Rpb24uCisjIFNpbmNlIHRoaXMgY29kZSBpcyBleHBlcmltZW50YWwgaXQgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdC4KKyMgc2VlIGxpYmMvYmlvbmljL3B0aHJlYWRfZGVidWcuYyBmb3IgZGV0YWlscworCitMT0NBTF9DRkxBR1MgOj0gJChsaWJjX2NvbW1vbl9jZmxhZ3MpIC1zdGQ9Z251OTkgLURQVEhSRUFEX0RFQlVHIC1EUFRIUkVBRF9ERUJVR19FTkFCTEVEPTAKIExPQ0FMX0NfSU5DTFVERVMgOj0gJChsaWJjX2NvbW1vbl9jX2luY2x1ZGVzKQogCiBMT0NBTF9TUkNfRklMRVMgOj0gXAogCSQobGliY19hcmNoX2R5bmFtaWNfc3JjX2ZpbGVzKSBcCiAJJChsaWJjX3N0YXRpY19jb21tb25fc3JjX2ZpbGVzKSBcCiAJYmlvbmljL2RsbWFsbG9jLmMgXAotCWJpb25pYy9tYWxsb2NfZGVidWdfY29tbW9uLmMgXAotCWJpb25pYy9saWJjX2luaXRfZHluYW1pYy5jCisJYmlvbmljL21hbGxvY19kZWJ1Z19jb21tb24uY3BwIFwKKwliaW9uaWMvcHRocmVhZF9kZWJ1Zy5jcHAgXAorCWJpb25pYy9saWJjX2luaXRfZHluYW1pYy5jcHAKKworaWZlcSAoJChUQVJHRVRfQVJDSCksYXJtKQorCUxPQ0FMX05PX0NSVCA6PSB0cnVlCisJTE9DQUxfQ0ZMQUdTICs9IC1EQ1JUX0xFR0FDWV9XT1JLQVJPVU5ECisKKwlMT0NBTF9TUkNfRklMRVMgOj0gXAorCQlhcmNoLWFybS9iaW9uaWMvY3J0YmVnaW5fc28uYyBcCisJCWFyY2gtYXJtL2Jpb25pYy9hdGV4aXRfbGVnYWN5LmMgXAorCQkkKExPQ0FMX1NSQ19GSUxFUykgXAorCQlhcmNoLWFybS9iaW9uaWMvY3J0ZW5kX3NvLlMKK2VuZGlmCiAKIExPQ0FMX01PRFVMRTo9IGxpYmMKK0xPQ0FMX0FERElUSU9OQUxfREVQRU5ERU5DSUVTIDo9ICQoTE9DQUxfUEFUSCkvQW5kcm9pZC5taworTE9DQUxfUkVRVUlSRURfTU9EVUxFUyA6PSB0emRhdGEKIAogIyBXQVJOSU5HOiBUaGUgb25seSBsaWJyYXJ5IGxpYmMuc28gc2hvdWxkIGRlcGVuZCBvbiBpcyBsaWJkbC5zbyEgIElmIHlvdSBhZGQgb3RoZXIgbGlicmFyaWVzLAogIyBtYWtlIHN1cmUgdG8gYWRkIC1XbCwtLWV4Y2x1ZGUtbGlicz1saWJnY2MuYSB0byB0aGUgTE9DQUxfTERGTEFHUyBmb3IgdGhvc2UgbGlicmFyaWVzLiAgVGhpcwpAQCAtNzAzLDExICs5MzIsMTUgQEAKIExPQ0FMX0NfSU5DTFVERVMgOj0gJChsaWJjX2NvbW1vbl9jX2luY2x1ZGVzKQogCiBMT0NBTF9TUkNfRklMRVMgOj0gXAotCWJpb25pYy9tYWxsb2NfZGVidWdfbGVhay5jCisJYmlvbmljL2RlYnVnX21hcGluZm8uY3BwIFwKKwliaW9uaWMvZGVidWdfc3RhY2t0cmFjZS5jcHAgXAorCWJpb25pYy9tYWxsb2NfZGVidWdfbGVhay5jcHAgXAorCWJpb25pYy9tYWxsb2NfZGVidWdfY2hlY2suY3BwIFwKIAogTE9DQUxfTU9EVUxFOj0gbGliY19tYWxsb2NfZGVidWdfbGVhaworTE9DQUxfQURESVRJT05BTF9ERVBFTkRFTkNJRVMgOj0gJChMT0NBTF9QQVRIKS9BbmRyb2lkLm1rCiAKLUxPQ0FMX1NIQVJFRF9MSUJSQVJJRVMgOj0gbGliYworTE9DQUxfU0hBUkVEX0xJQlJBUklFUyA6PSBsaWJjIGxpYmRsCiBMT0NBTF9XSE9MRV9TVEFUSUNfTElCUkFSSUVTIDo9IGxpYmNfY29tbW9uCiBMT0NBTF9TWVNURU1fU0hBUkVEX0xJQlJBUklFUyA6PQogTE9DQUxfQUxMT1dfVU5ERUZJTkVEX1NZTUJPTFMgOj0gdHJ1ZQpAQCAtNzMwLDExICs5NjMsMTIgQEAKIExPQ0FMX0NfSU5DTFVERVMgOj0gJChsaWJjX2NvbW1vbl9jX2luY2x1ZGVzKQogCiBMT0NBTF9TUkNfRklMRVMgOj0gXAotCWJpb25pYy9tYWxsb2NfZGVidWdfcWVtdS5jCisJYmlvbmljL21hbGxvY19kZWJ1Z19xZW11LmNwcAogCiBMT0NBTF9NT0RVTEU6PSBsaWJjX21hbGxvY19kZWJ1Z19xZW11CitMT0NBTF9BRERJVElPTkFMX0RFUEVOREVOQ0lFUyA6PSAkKExPQ0FMX1BBVEgpL0FuZHJvaWQubWsKIAotTE9DQUxfU0hBUkVEX0xJQlJBUklFUyA6PSBsaWJjCitMT0NBTF9TSEFSRURfTElCUkFSSUVTIDo9IGxpYmMgbGliZGwKIExPQ0FMX1dIT0xFX1NUQVRJQ19MSUJSQVJJRVMgOj0gbGliY19jb21tb24KIExPQ0FMX1NZU1RFTV9TSEFSRURfTElCUkFSSUVTIDo9CiAKZGlmZiAtLWdpdCBhL2xpYmMvSmFtZmlsZSBiL2xpYmMvSmFtZmlsZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTY1YmU1ZC4uMDAwMDAwMAotLS0gYS9saWJjL0phbWZpbGUKKysrIC9kZXYvbnVsbApAQCAtMSw0NDEgKzAsMCBAQAotIyBUaGlzIGZpbGUgaXMgdXNlZCB0byBidWlsZCB0aGUgQmlvbmljIGxpYnJhcnkgd2l0aCB0aGUgSmFtIGJ1aWxkCi0jIHRvb2wuIEZvciBpbmZvLCBzZWUgd3d3LnBlcmZvcmNlLmNvbS9qYW0vamFtLmh0bWwKLSMKLQotQklPTklDX1RPUCA/PSAkKERPVCkgOwotCi1ERUJVRyA9IDEgOwotCi0jIHBhdHRlcm4gdXNlZCBmb3IgYXV0b21hdGljIGhlYWRlIGluY2x1c2lvbiBkZXRlY3Rpb24KLUhEUlBBVFRFUk4gPSAiXlsgCV0qI1sgCV0qaW5jbHVkZVsgCV0qWzxcIl0oW15cIj5dKilbXCI+XS4qJCIgOwotCi0KLSMgZGVidWdnaW5nIHN1cHBvcnQsIHNpbXBseSBkZWZpbmUgdGhlIERFQlVHIHZhcmlhYmxlIHRvIGFjdGl2YXRlIHZlcmJvc2Ugb3V0cHV0Ci1ydWxlIERlYnVnCi17Ci0gICAgaWYgJChERUJVRykgewotICAgICAgICBFY2hvICQoMSkgOwotICAgIH0KLX0KLQotIyByZXR1cm4gYWxsIGVsZW1lbnRzIGZyb20gJCgxKSB0aGF0IGFyZSBub3QgaW4gJCgyKQotcnVsZSBGaWx0ZXIgIGxpc3QgOiBmaWx0ZXIKLXsKLSAgICBsb2NhbCByZXN1bHQgPSA7Ci0gICAgbG9jYWwgaXRlbSA7Ci0gICAgZm9yIGl0ZW0gaW4gJChsaXN0KSB7Ci0gICAgICAgIGlmICEgJChpdGVtKSBpbiAkKGZpbHRlcikgewotICAgICAgICAgICAgcmVzdWx0ICs9ICQoaXRlbSkgOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiAkKHJlc3VsdCkgOwotfQotCi0KLSMgcmV2ZXJzZSBhIGxpc3Qgb2YgZWxlbWVudHMKLXJ1bGUgUmV2ZXJzZSAgbGlzdAotewotICAgIGxvY2FsICByZXN1bHQgPSA7Ci0gICAgbG9jYWwgIGl0ZW0gOwotCi0gICAgZm9yIGl0ZW0gaW4gJChsaXN0KSB7Ci0gICAgICAgIHJlc3VsdCA9ICQoaXRlbSkgJChyZXN1bHQpIDsKLSAgICB9Ci0gICAgcmV0dXJuICQocmVzdWx0KSA7Ci19Ci0KLQotIyBkZWNvbXBvc2UgYSBwYXRoIGludG8gYSBsaXN0IG9mIGVsZW1lbnRzCi1ydWxlIFBhdGhEZWNvbXBvc2UgIGRpcgotewotICAgIGxvY2FsICByZXN1bHQgOwotCi0gICAgd2hpbGUgJChkaXI6RCkKLSAgICB7Ci0gICAgICAgIGlmICEgJChkaXI6QlMpIHsgICMgZm9yIHJvb3RlZCBwYXRocyBsaWtlICIvZm9vIgotICAgICAgICAgICAgYnJlYWsgOwotICAgICAgICB9Ci0gICAgICAgIHJlc3VsdCA9ICQoZGlyOkJTKSAkKHJlc3VsdCkgOwotICAgICAgICBkaXIgICAgPSAkKGRpcjpEKSA7Ci0gICAgfQotICAgIHJlc3VsdCA9ICQoZGlyKSAkKHJlc3VsdCkgOwotICAgIHJldHVybiAkKHJlc3VsdCkgOwotfQotCi0KLSMgc2ltcGx5IGEgZmlsZSBwYXRoLCBpLmUuIGdldCByaWQgb2YgLiBvciAuLiB3aGVuIHBvc3NpYmxlCi1ydWxlIF9QYXRoU2ltcGxpZnkgIGRpcgotewotICAgIGxvY2FsICByZXN1bHQgPSA7Ci0gICAgbG9jYWwgIGRpcjIgZCA7Ci0KLSAgICBkaXIgID0gWyBQYXRoRGVjb21wb3NlICQoZGlyKSBdIDsKLQotICAgICMgZ2V0IHJpZCBvZiBhbnkgc2luZ2xlIGRvdAotICAgIGRpcjIgPSA7Ci0gICAgZm9yIGQgaW4gJChkaXIpIHsKLSAgICAgICAgaWYgJChkKSA9ICIuIiB7Ci0gICAgICAgICAgICBjb250aW51ZSA7Ci0gICAgICAgIH0KLSAgICAgICAgZGlyMiArPSAkKGQpIDsKLSAgICB9Ci0KLSAgICAjIGdldCByaWQgb2YgLi4gd2hlbiBwb3NzaWJsZQotICAgIGZvciBkIGluICQoZGlyMikgewotICAgICAgICBpZiAkKGQpID0gIi4uIiAmJiAkKHJlc3VsdCkgewotICAgICAgICAgICAgcmVzdWx0ID0gJChyZXN1bHRbMi1dKSA7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmVzdWx0ID0gJChkKSAkKHJlc3VsdCkgOwotICAgIH0KLQotICAgICMgbm93IGludmVydCB0aGUgcmVzdWx0Ci0gICAgcmVzdWx0ID0gWyBSZXZlcnNlICQocmVzdWx0KSBdIDsKLSAgICBpZiAhICQocmVzdWx0KSB7Ci0gICAgICAgIHJlc3VsdCA9ICIuIiA7Ci0gICAgfQotICAgIHJldHVybiAkKHJlc3VsdDpKPSIvIikgOwotfQotCi0KLXJ1bGUgUGF0aFNpbXBsaWZ5ICBkaXJzCi17Ci0gICAgbG9jYWwgcmVzdWx0IDsKLSAgICBsb2NhbCBkIDsKLSAgICBmb3IgZCBpbiAkKGRpcnMpIHsKLSAgICAgICAgcmVzdWx0ICs9IFsgX1BhdGhTaW1wbGlmeSAkKGQpIF0gOwotICAgIH0KLSAgICByZXR1cm4gJChyZXN1bHQpIDsKLX0KLQotCi0jIHJldHJpZXZlIGxpc3Qgb2Ygc3ViZGlyZWN0b3JpZXMKLXJ1bGUgTGlzdFN1YkRpcnMgIHBhdGhzCi17Ci0gICAgbG9jYWwgIHJlc3VsdCAgPSA7Ci0gICAgbG9jYWwgIGVudHJ5IDsKLSAgICBmb3IgZW50cnkgaW4gWyBHbG9iICQocGF0aHMpIDogKiBdIHsKLSAgICAgICAgaWYgISAkKGVudHJ5OlMpIHsKLSAgICAgICAgICAgIHJlc3VsdCArPSAkKGVudHJ5KSA7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIFsgUGF0aFNpbXBsaWZ5ICQocmVzdWx0KSBdIDsKLX0KLQotCi0jIHJldHJpZXZlIGxpc3Qgb2Ygc291cmNlcyBpbiBhIGdpdmVuIGRpcmVjdG9yeQotcnVsZSBMaXN0U291cmNlcyAgcGF0aAotewotICAgIHJldHVybiBbIEdsb2IgJChwYXRoKSA6ICouUyAqLmMgXSA7Ci19Ci0KLQotIyBmaW5kIHRoZSBwcmVidWlsdCBkaXJlY3RvcnkKLSMKLWlmICEgJChUT1ApIHsKLSAgICBFY2hvICJQbGVhc2UgZGVmaW5lIFRPUCBhcyB0aGUgcm9vdCBvZiB5b3VyIGRldmljZSBidWlsZCB0cmVlIiA7Ci0gICAgRXhpdCA7Ci19Ci0KLURlYnVnICJPUyBpcyIgJChPUykgOwotRGVidWcgIkNQVSBpcyIgJChDUFUpIDsKLQotaWYgJChPUykgPSBMSU5VWAotewotICAgIFBSRUJVSUxUID0gJChUT1ApL3ByZWJ1aWx0L0xpbnV4IDsKLX0KLWVsc2UgaWYgJChPUykgPSBNQUNPU1gKLXsKLSAgICBzd2l0Y2ggJChDUFUpIHsKLSAgICAgICAgY2FzZSBpMzg2IDogUFJFQlVJTFQgPSAkKFRPUCkvcHJlYnVpbHQvZGFyd2luLXg4NiA7IGJyZWFrIDsKLSAgICAgICAgY2FzZSBwcGMgIDogUFJFQlVJTFQgPSAkKFRPUCkvcHJlYnVpbHQvZGFyd2luLXBwYyA7IGJyZWFrIDsKLSAgICAgICAgY2FzZSAqICAgIDogRWNobyAidW5zdXBwb3J0ZWQgQ1BVIiAiJChDUFUpICEhIiA7Ci0gICAgICAgICAgICAgICAgICAgIEVjaG8gIlBsZWFzZSBjb250YWN0IGRpZ2l0QGdvb2dsZS5jb20gZm9yIGhlbHAiIDsKLSAgICAgICAgICAgICAgICAgICAgRXhpdCA7Ci0gICAgfQotfQotZWxzZQotewotICAgIEVjaG8gIlVuc3VwcG9ydGVkIG9wZXJhdGluZyBzeXN0ZW0iICQoT1MpIDsKLSAgICBFY2hvICJQbGVhc2UgY29udGFjdCBkaWdpdEBnb29nbGUuY29tIGZvciBoZWxwIiA7Ci0gICAgRXhpdCA7Ci19Ci0KLURlYnVnICJUT1AgaXMiICQoVE9QKSA7Ci1EZWJ1ZyAiUFJFQlVJTFQgaXMiICQoUFJFQlVJTFQpIDsKLQotCi0jIGNoZWNrIGFyY2hpdGVjdHVyZXMgYW5kIHNldHVwIHRvb2xjaGFpbiB2YXJpYWJsZXMKLSMKLVNVUFBPUlRFRF9BUkNIUyA9IHg4NiBhcm0gOwotCi1BUkNIID89ICQoU1VQUE9SVEVEX0FSQ0hTKSA7Ci0KLWlmICEgJChBUkNIKSBpbiAkKFNVUFBPUlRFRF9BUkNIUykgewotICAgIEVjaG8gIlRoZSB2YXJpYWJsZSBBUkNIIGNvbnRhaW5zIGFuIHVuc3VwcG9ydGVkIHZhbHVlLCB1c2Ugb25lIG9yIG1vcmUgb2YgdGhlc2UgaW5zdGVhZCIgOwotICAgIEVjaG8gInNlcGFyYXRlZCBieSBzcGFjZXM6IiAkKFNVUFBPUlRFRF9BUkNIUykgOwotICAgIEV4aXQgOwotfQotCi14ODZfVE9PTFNFVF9QUkVGSVggPz0gIiIgOwotYXJtX1RPT0xTRVRfUFJFRklYID89ICQoVE9QKS9wcmVidWlsdC9MaW51eC90b29sY2hhaW4tNC4xLjEvYmluL2FybS1lbGYtIDsKLQotZm9yIGFyY2ggaW4gJChBUkNIKSB7Ci0gICAgQ0NfJChhcmNoKSAgPSAkKCQoYXJjaClfVE9PTFNFVF9QUkVGSVgpZ2NjIDsKLSAgICBDKytfJChhcmNoKSA9ICQoJChhcmNoKV9UT09MU0VUX1BSRUZJWClnKysgOwotICAgIEFSXyQoYXJjaCkgID0gJCgkKGFyY2gpX1RPT0xTRVRfUFJFRklYKWFyIDsKLX0KLQotCi0jIHRoZSBsaXN0IG9mIGFyY2gtaW5kZXBlbmRlbnQgc291cmNlIHN1YmRpcmVjdG9yaWVzCi1CSU9OSUNfU1JDX1NVQkRJUlMgPSBzdHJpbmcgOwotQklPTklDX3g4Nl9TVUJESVJTID0gOwotQklPTklDX2FybV9TVUJESVJTID0gOwotCi1DRkxBR1MgICA9IC1PMCAtZyAtVyA7Ci0KLQotCi0jIGZpbmQgc291cmNlcyBpbiBhIGdpdmVuIGxpc3Qgb2Ygc3ViZGlyZWN0b3JpZXMKLXJ1bGUgRmluZFNvdXJjZXMgIGRpcnMKLXsKLSAgICBsb2NhbCBkaXIgOwotCi0gICAgZm9yIGRpciBpbiAkKGRpcnMpCi0gICAgewotICAgICAgICBsb2NhbCBMT0NBTF9TUkMgTk9fTE9DQUxfU1JDIDsKLQotICAgICAgICBpZiBbIEdsb2IgJChkaXIpIDogcnVsZXMuamFtIF0gewotICAgICAgICAgICAgaW5jbHVkZSAkKGRpcikvcnVsZXMuamFtIDsKLSAgICAgICAgICAgIGlmICQoTE9DQUxfU1JDKSB7Ci0gICAgICAgICAgICAgICAgX3NvdXJjZXMgPSAkKExPQ0FMX1NSQykgOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgX3NvdXJjZXMgPSBbIEdsb2IgJChkaXIpIDogKi5TICouYyBdIDsKLSAgICAgICAgICAgICAgICBfc291cmNlcyA9ICQoX3NvdXJjZXM6QlMpIDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICQoTk9fTE9DQUxfU1JDKSB7Ci0gICAgICAgICAgICAgICAgX3NvdXJjZXMgPSBbIEZpbHRlciAkKF9zb3VyY2VzKSA6ICQoTk9fTE9DQUxfU1JDKSBdIDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHNvdXJjZXMgKz0gJChkaXIpLyQoX3NvdXJjZXMpIDsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzb3VyY2VzICs9IFsgTGlzdFNvdXJjZXMgJChkaXIpIF0gOwotICAgIH0KLX0KLQotIyBDb21waWxlIGEgZ2l2ZW4gb2JqZWN0IGZpbGUgZnJvbSBhIHNvdXJjZQotcnVsZSBDb21waWxlICBvYmplY3QgOiBzb3VyY2UKLXsKLSAgICBEZXBlbmRzICQob2JqZWN0KSA6ICQoc291cmNlKSA7Ci0gICAgRGVwZW5kcyBiaW9uaWMgOiAkKG9iamVjdCkgOwotICAgIENsZWFuIGNsZWFuIDogJChvYmplY3QpIDsKLQotICAgIE1ha2VMb2NhdGUgJChvYmplY3QpIDogJChPVVQpIDsKLQotCi0gICAgQ0Mgb24gJChvYmplY3QpICAgICAgID0gJChDQ18kKGFyY2gpKSA7Ci0gICAgQ0ZMQUdTIG9uICQob2JqZWN0KSAgID0gJChDRkxBR1MpIDsKLSAgICBJTkNMVURFUyBvbiAkKG9iamVjdCkgPSAkKElOQ0xVREVTKSA7Ci0gICAgREVGSU5FUyBvbiAkKG9iamVjdCkgID0gJChERUZJTkVTKSA7Ci0KLSAgICBIRFJSVUxFIG9uICQoPikgPSBIZHJSdWxlIDsKLSAgICBIRFJTQ0FOIG9uICQoPikgPSAkKEhEUlBBVFRFUk4pIDsKLSAgICBIRFJTRUFSQ0ggb24gJCg+KSA9ICQoSU5DTFVERVMpIDsKLSAgICBIRFJHUklTVCBvbiAkKD4pID0gJChIRFJHUklTVCkgOwotfQotCi0KLWFjdGlvbnMgQ29tcGlsZQotewotICAgICQoQ0MpIC1jIC1vICQoMSkgJChDRkxBR1MpIC1JJChJTkNMVURFUykgLUQkKERFRklORVMpICQoMikKLX0KLQotCi1ydWxlIFJtVGVtcHMKLXsKLSAgICBUZW1wb3JhcnkgJCgyKSA7Ci19Ci0KLWFjdGlvbnMgcXVpZXRseSB1cGRhdGVkIHBpZWNlbWVhbCB0b2dldGhlciBSbVRlbXBzCi17Ci0gICAgcm0gLWYgJCgyKQotfQotCi1hY3Rpb25zIEFyY2hpdmUKLXsKLSAgICAkKEFSKSBydSAkKDEpICQoMikKLX0KLQotcnVsZSBMaWJyYXJ5ICBsaWJyYXJ5IDogb2JqZWN0cwotewotICAgIGxvY2FsICBvYmogOwotCi0gICAgaWYgISAkKGxpYnJhcnk6UykgewotICAgICAgICBsaWJyYXJ5ID0gJChsaWJyYXJ5OlM9LmEpIDsKLSAgICB9Ci0gICAgbGlicmFyeSA9ICQobGlicmFyeTpHPTwkKGFyY2gpPikgOwotCi0gICAgRGVwZW5kcyBhbGwgOiAkKGxpYnJhcnkpIDsKLQotICAgIGlmICEgJChsaWJyYXJ5OkQpIHsKLSAgICAgICAgTWFrZUxvY2F0ZSAkKGxpYnJhcnkpICQobGlicmFyeSkoJChvYmplY3RzOkJTKSkgOiAkKE9VVCkgOwotICAgIH0KLQotICAgIERlcGVuZHMgJChsaWJyYXJ5KSA6ICQobGlicmFyeSkoJChvYmplY3RzOkJTKSkgOwotICAgIGZvciBvYmogaW4gJChvYmplY3RzKSB7Ci0gICAgICAgIERlcGVuZHMgJChsaWJyYXJ5KSgkKG9iajpCUykpIDogJChvYmopIDsKLSAgICB9Ci0KLSAgICBDbGVhbiBjbGVhbiA6ICQobGlicmFyeSkgOwotCi0gICAgQVIgb24gJChsaWJyYXJ5KSA9ICQoQVJfJChhcmNoKSkgOwotICAgIEFyY2hpdmUgJChsaWJyYXJ5KSA6ICQob2JqZWN0cykgOwotCi0gICAgUm1UZW1wcyAkKGxpYnJhcnkpIDogJChvYmplY3RzKSA7Ci19Ci0KLQotcnVsZSAgUHJvY2Vzc0RpcgotewotICAgIGxvY2FsIENGTEFHUyAgID0gJChDRkxBR1MpIDsKLSAgICBsb2NhbCBERUZJTkVTICA9ICQoREVGSU5FUykgOwotICAgIGxvY2FsIElOQ0xVREVTID0gJChJTkNMVURFUykgOwotICAgIGxvY2FsIGxvY2FsX3J1bGVzID0gWyBHbG9iICQoMSkgOiBydWxlcy5qYW0gXSA7Ci0gICAgbG9jYWwgc291cmNlIHNvdXJjZXMgOwotCi0gICAgaWYgJChsb2NhbF9ydWxlcykgewotICAgICAgICBsb2NhbCBMT0NBTF9DRkxBR1MgTE9DQUxfREVGSU5FUyBMT0NBTF9JTkNMVURFUyBMT0NBTF9TUkMgTk9fTE9DQUxfU1JDIDsKLQotICAgICAgICBpbmNsdWRlICQobG9jYWxfcnVsZXMpIDsKLSAgICAgICAgQ0ZMQUdTICAgKz0gJChMT0NBTF9DRkxBR1MpIDsKLSAgICAgICAgREVGSU5FUyAgKz0gJChMT0NBTF9ERUZJTkVTKSA7Ci0gICAgICAgIElOQ0xVREVTICs9ICQoTE9DQUxfSU5DTFVERVMpIDsKLQotICAgICAgICBpZiAkKExPQ0FMX1NSQykgewotICAgICAgICAgICAgc291cmNlcyA9ICQoTE9DQUxfU1JDKSA7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBzb3VyY2VzID0gWyBHbG9iICQoMSkgOiAqLlMgKi5jIF0gOwotICAgICAgICAgICAgc291cmNlcyA9ICQoc291cmNlczpCUykgOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgJChOT19MT0NBTF9TUkMpIHsKLSAgICAgICAgICAgIHNvdXJjZXMgPSBbIEZpbHRlciAkKHNvdXJjZXMpIDogJChOT19MT0NBTF9TUkMpIF0gOwotICAgICAgICB9Ci0KLSAgICAgICAgc291cmNlcyA9ICQoMSkvJChzb3VyY2VzKSA7Ci0gICAgfQotICAgIGVsc2UKLSAgICAgICAgc291cmNlcyA9IFsgR2xvYiAkKDEpIDogKi5TICouYyBdIDsKLQotICAgIGZvciBzb3VyY2UgaW4gJChzb3VyY2VzKSB7Ci0gICAgICAgIGxvY2FsIG5hbWUgPSAkKHNvdXJjZTpCKSA7Ci0KLSAgICAgICAgaWYgJChzb3VyY2U6UykgPSAiLlMiIHsKLSAgICAgICAgICAgICMgcmVjb3JkIHRoZSBsaXN0IG9mIGFzc2VtYmxlciBzb3VyY2VzCi0gICAgICAgICAgICBBU1NFTUJMRVJfU09VUkNFUyArPSAkKG5hbWUpIDsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmICQoc291cmNlOlMpID0gIi5jIiAmJiAkKG5hbWUpIGluICQoQVNTRU1CTEVSX1NPVVJDRVMpIHsKLSAgICAgICAgICAgICMgc2tpcCBDIHNvdXJjZSBmaWxlIGlmIGNvcnJlc3BvbmRpbmcgYXNzZW1ibGVyIGV4aXN0cwotICAgICAgICAgICAgY29udGludWUgOwotICAgICAgICB9Ci0KLSAgICAgICAgb2JqbmFtZSA9IDwkKGFyY2gpPiQobmFtZSkubyAgOwotCi0gICAgICAgIENvbXBpbGUgJChvYmpuYW1lKSA6ICQoc291cmNlKSA7Ci0gICAgICAgIEFMTF9PQkpFQ1RTICs9ICQob2JqbmFtZSkgOwotICAgIH0KLX0KLQotcnVsZSBQcm9jZXNzRGlycwotewotICAgIGxvY2FsICBkaXIgOwotICAgIGZvciBkaXIgaW4gJCgxKSB7Ci0gICAgICAgIFByb2Nlc3NEaXIgJChkaXIpIDsKLSAgICB9Ci19Ci0KLUlOQ0xVREVTX3g4NiA9IC91c3Ivc3JjL2xpbnV4L2luY2x1ZGUgOwotCi1JTkNMVURFU19hcm0gPSAuLi9rZXJuZWxfaGVhZGVycwotICAgICAgICAgICAgICAgaW5jbHVkZS9hcmNoL2FybQotICAgICAgICAgICAgICAgaW5jbHVkZS9iaXRzMzIKLSAgICAgICAgICAgICAgIDsKLQotSU5DTFVERVMgPSBpbmNsdWRlIHN0ZGlvIHN0cmluZyBzdGRsaWIgLgotICAgICAgICAgICAuLi9tc3VuL2luY2x1ZGUKLSAgICAgICAgICAgOwotCi1ERUZJTkVTICA9IEFORFJPSURfQ0hBTkdFUwotICAgICAgICAgICBVU0VfTE9DS1MKLSAgICAgICAgICAgUkVBTExPQ19aRVJPX0JZVEVTX0ZSRUVTCi0gICAgICAgICAgIF9MSUJDPTEKLSAgICAgICAgICAgU09GVEZMT0FUCi0gICAgICAgICAgIEZMT0FUSU5HX1BPSU5UCi0gICAgICAgICAgIE5FRURfUFNFTEVDVD0xCi0gICAgICAgICAgIEFORFJPSUQKLSAgICAgICAgICAgOwotCi1DRkxBR1NfeDg2ID0gOwotCi0KLWZvciBhcmNoIGluICQoQVJDSCkKLXsKLSAgICBsb2NhbCBBUkNIX0RJUiA9ICQoQklPTklDX1RPUCkvYXJjaC0kKGFyY2gpIDsKLSAgICBsb2NhbCBJTkNMVURFUyA9ICQoSU5DTFVERVNfJChhcmNoKSkgJChBUkNIX0RJUikvaW5jbHVkZSAkKElOQ0xVREVTKSA7Ci0gICAgbG9jYWwgREVGSU5FUyAgPSAkKERFRklORVNfJChhcmNoKSkgJChERUZJTkVTKSBBUkNIPSQoYXJjaCkgIDsKLSAgICBsb2NhbCBDRkxBR1MgICA9ICQoQ0ZMQUdTKSAkKENGTEFHU18kKGFyY2gpKSA7Ci0gICAgbG9jYWwgT1VUICAgICAgPSBvdXQvJChhcmNoKSA7Ci0gICAgbG9jYWwgQVNTRU1CTEVSX1NPVVJDRVMgQUxMX09CSkVDVFMgOwotCi0gICAgUHJvY2Vzc0RpcnMgWyBMaXN0U3ViRGlycyAkKEFSQ0hfRElSKSBdIDsKLSAgICBQcm9jZXNzRGlycyBzdGRsaWIgc3RkaW8gdW5pc3RkIHN0cmluZyB0emNvZGUgaW5ldCA7Ci0gICAgUHJvY2Vzc0RpcnMgWyBMaXN0U3ViRGlycyBuZXRic2QgXSA7Ci0gICAgUHJvY2Vzc0RpcnMgYmlvbmljIDsKLQotICAgIExpYnJhcnkgYmlvbmljIDogJChBTExfT0JKRUNUUykgOwotfQotCi1CSU9OSUNfU0VBUkNIID0gJChCSU9OSUNfVE9QKS9pbmNsdWRlIDsKLQotCi0KLSMgL0hkclJ1bGUgc291cmNlIDogaGVhZGVycyA7Ci0jCi0jIEFycmFuZ2VzIHRoZSBwcm9wZXIgZGVwZW5kZW5jaWVzIHdoZW4gdGhlIGZpbGUgX3NvdXJjZV8gaW5jbHVkZXMgdGhlIGZpbGVzCi0jIF9oZWFkZXJzXyB0aHJvdWdoIHRoZSAjaW5jbHVkZSBDIHByZXByb2Nlc3NvciBkaXJlY3RpdmUKLSMKLSMgdGhpcyBydWxlIGlzIG5vdCBpbnRlbmRlbmQgdG8gYmUgY2FsbGVkIGV4cGxpY2l0ZWx5LiBJdCBpcyBjYWxsZWQKLSMgYXV0b21hdGljYWxseSBkdXJpbmcgaGVhZGVyIHNjYW5uaW5nIG9uIHNvdXJjZXMgaGFuZGxlZCBieSB0aGUgQE9iamVjdAotIyBydWxlIChlLmcuIHNvdXJjZXMgaW4gQE1haW4gb3IgQExpYnJhcnkgcnVsZXMpCi0jCi1ydWxlIEhkclJ1bGUKLXsKLSAgICAjIEhkclJ1bGUgc291cmNlIDogaGVhZGVycyA7Ci0KLSAgICAjIE4uQi4gIFRoaXMgcnVsZSBpcyBjYWxsZWQgZHVyaW5nIGJpbmRpbmcsIHBvdGVudGlhbGx5IGFmdGVyCi0gICAgIyB0aGUgZmF0ZSBvZiBtYW55IHRhcmdldHMgaGFzIGJlZW4gZGV0ZXJtaW5lZCwgYW5kIG11c3QgYmUKLSAgICAjIHVzZWQgd2l0aCBjYXV0aW9uOiBkb24ndCBhZGQgZGVwZW5kZW5jaWVzIHRvIHVucmVsYXRlZAotICAgICMgdGFyZ2V0cywgYW5kIGRvbid0IHNldCB2YXJpYWJsZXMgb24gJCg8KS4KLQotICAgICMgVGVsbCBKYW0gdGhhdCBhbnl0aGluZyBkZXBlbmRpbmcgb24gJCg8KSBhbHNvIGRlcGVuZHMgb24gJCg+KSwKLSAgICAjIHNldCBTRUFSQ0ggc28gSmFtIGNhbiBmaW5kIHRoZSBoZWFkZXJzLCBidXQgdGhlbiBzYXkgd2UgZG9uJ3QKLSAgICAjIGNhcmUgaWYgd2UgY2FuJ3QgYWN0dWFsbHkgZmluZCB0aGUgaGVhZGVycyAodGhleSBtYXkgaGF2ZSBiZWVuCi0gICAgIyB3aXRoaW4gaWZkZWZzKSwKLQotICAgIGxvY2FsIHMgPSAkKD46Rz0kKEhEUkdSSVNUOkUpKSA7Ci0KLSAgICBJbmNsdWRlcyAkKDwpIDogJChzKSA7Ci0gICAgU0VBUkNIIG9uICQocykgPSAkKEhEUlNFQVJDSCkgOwotICAgIE5vQ2FyZSAkKHMpIDsKLQotICAgICMgUHJvcGFnYXRlIG9uICQoPCkgdG8gJCg+KQotCi0gICAgSERSU0VBUkNIIG9uICQocykgPSAkKEhEUlNFQVJDSCkgOwotICAgIEhEUlNDQU4gb24gJChzKSA9ICQoSERSU0NBTikgOwotICAgIEhEUlJVTEUgb24gJChzKSA9ICQoSERSUlVMRSkgOwotICAgIEhEUkdSSVNUIG9uICQocykgPSAkKEhEUkdSSVNUKSA7Ci19Ci0KLQpkaWZmIC0tZ2l0IGEvbGliYy9OT1RJQ0UgYi9saWJjL05PVElDRQppbmRleCBkOWU2ODE4Li44ZWQ0NTVjIDEwMDY0NAotLS0gYS9saWJjL05PVElDRQorKysgYi9saWJjL05PVElDRQpAQCAtMSw4NSArMSwxMyBAQAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ29weXJpZ2h0IChDKSAxOTkzIGJ5IFN1biBNaWNyb3N5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIAotQ29weXJpZ2h0IChjKSAyMDA1LTIwMTAsIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLUFsbCByaWdodHMgcmVzZXJ2ZWQuCitEZXZlbG9wZWQgYXQgU3VuUHJvLCBhIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gYnVzaW5lc3MuCitQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCitzb2Z0d2FyZSBpcyBmcmVlbHkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGlzIG5vdGljZQoraXMgcHJlc2VydmVkLgogCi1SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLW1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotYXJlIG1ldDoKLSAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0gICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIAotICAgZGlzdHJpYnV0aW9uLgotICogTmVpdGhlciB0aGUgbmFtZSBvZiBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0IG5vciB0aGUgbmFtZXMKLSAgIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCi0gICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4KLSAgIHBlcm1pc3Npb24uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLVRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi1MSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUwotRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLUNPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKLUlOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCi1CVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKLU9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCAKLUFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLU9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi1TVUNIIERBTUFHRS4KLQotCi1Db3B5cmlnaHQgKGMpIDIwMDQgYnkgSW50ZXJuZXQgU3lzdGVtcyBDb25zb3J0aXVtLCBJbmMuICgiSVNDIikKLUNvcHlyaWdodCAoYykgMTk5NSwxOTk2LDE5OTkgYnkgSW50ZXJuZXQgU29mdHdhcmUgQ29uc29ydGl1bS4KLQotUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55Ci1wdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCi1jb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgotCi1USEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgSVNDIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUwotV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgotTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiAgSU4gTk8gRVZFTlQgU0hBTEwgSVNDIEJFIExJQUJMRSBGT1IKLUFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKLVdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgotQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQKLU9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCi0KLQotUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk1IGJ5IEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMsIEluYy4KLQotSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcywgSW5jLiAoaGVyZWluYWZ0ZXIgY2FsbGVkIElCTSkgZ3JhbnRzCi1wZXJtaXNzaW9uIHVuZGVyIGl0cyBjb3B5cmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCi1Tb2Z0d2FyZSB3aXRoIG9yIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZAotYWxsIHBhcmFncmFwaHMgb2YgdGhpcyBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IHRoZSBuYW1lIG9mIElCTQotbm90IGJlIHVzZWQgaW4gY29ubmVjdGlvbiB3aXRoIHRoZSBtYXJrZXRpbmcgb2YgYW55IHByb2R1Y3QgaW5jb3Jwb3JhdGluZwotdGhlIFNvZnR3YXJlIG9yIG1vZGlmaWNhdGlvbnMgdGhlcmVvZiwgd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvcgotcGVybWlzc2lvbi4KLQotVG8gdGhlIGV4dGVudCBpdCBoYXMgYSByaWdodCB0byBkbyBzbywgSUJNIGdyYW50cyBhbiBpbW11bml0eSBmcm9tIHN1aXQKLXVuZGVyIGl0cyBwYXRlbnRzLCBpZiBhbnksIGZvciB0aGUgdXNlLCBzYWxlIG9yIG1hbnVmYWN0dXJlIG9mIHByb2R1Y3RzIHRvCi10aGUgZXh0ZW50IHRoYXQgc3VjaCBwcm9kdWN0cyBhcmUgdXNlZCBmb3IgcGVyZm9ybWluZyBEb21haW4gTmFtZSBTeXN0ZW0KLWR5bmFtaWMgdXBkYXRlcyBpbiBUQ1AvSVAgbmV0d29ya3MgYnkgbWVhbnMgb2YgdGhlIFNvZnR3YXJlLiAgTm8gaW1tdW5pdHkgaXMKLWdyYW50ZWQgZm9yIGFueSBwcm9kdWN0IHBlciBzZSBvciBmb3IgYW55IG90aGVyIGZ1bmN0aW9uIG9mIGFueSBwcm9kdWN0LgotCi1USEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgQU5EIElCTSBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMsCi1JTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEKLVBBUlRJQ1VMQVIgUFVSUE9TRS4gIElOIE5PIEVWRU5UIFNIQUxMIElCTSBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLAotRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgQVJJU0lORwotT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4KLUlGIElCTSBJUyBBUFBSSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgotCi1Db3B5cmlnaHQgKGMpIDE5OTcsIDE5OTgsIDE5OTksIDIwMDQgVGhlIE5ldEJTRCBGb3VuZGF0aW9uLCBJbmMuCi1BbGwgcmlnaHRzIHJlc2VydmVkLgotCi1UaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIFRoZSBOZXRCU0QgRm91bmRhdGlvbgotYnkgTHVrZSBNZXdidXJuOyBhbmQgYnkgSmFzb24gUi4gVGhvcnBlLgotVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBUaGUgTmV0QlNEIEZvdW5kYXRpb24KLWJ5IENocmlzdG9zIFpvdWxhcy4KLQotQ29weXJpZ2h0IChjKSAxOTkzIENocmlzdG9waGVyIEcuIERlbWV0cmlvdQotQ29weXJpZ2h0IChjKSAxOTgzLCAxOTg1LCAxOTkzIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotQ29weXJpZ2h0IChjKSAyMDAwIEJlbiBIYXJyaXMuCiBDb3B5cmlnaHQgKEMpIDE5OTUsIDE5OTYsIDE5OTcsIGFuZCAxOTk4IFdJREUgUHJvamVjdC4KIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAKQEAgLTEwNywxNCArMzUsMjAxIEBACiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCiBTVUNIIERBTUFHRS4KIAotQ29weXJpZ2h0IChjKSAyMDAzIE5ldHdvcmtzIEFzc29jaWF0ZXMgVGVjaG5vbG9neSwgSW5jLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDggIEludGVybmV0IFN5c3RlbXMgQ29uc29ydGl1bSwgSW5jLiAoIklTQyIpCitDb3B5cmlnaHQgKEMpIDE5OTUtMTk5OSwgMjAwMSwgMjAwMyAgSW50ZXJuZXQgU29mdHdhcmUgQ29uc29ydGl1bS4KKworUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CitwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCitjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorCitUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgSVNDIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRICitSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkKK0FORCBGSVRORVNTLiAgSU4gTk8gRVZFTlQgU0hBTEwgSVNDIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCwKK0lORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTQorTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UKK09SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IKK1BFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA4ICBJbnRlcm5ldCBTeXN0ZW1zIENvbnNvcnRpdW0sIEluYy4gKCJJU0MiKQorQ29weXJpZ2h0IChDKSAxOTk3LTIwMDEgIEludGVybmV0IFNvZnR3YXJlIENvbnNvcnRpdW0uCisKK1Blcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKworVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIElTQyBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSAorUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZCitBTkQgRklUTkVTUy4gIElOIE5PIEVWRU5UIFNIQUxMIElTQyBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsCitJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00KK0xPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFCitPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SCitQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NvcHlyaWdodCAoQykgMjAwNiBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CiBBbGwgcmlnaHRzIHJlc2VydmVkLgogCi1Qb3J0aW9ucyBvZiB0aGlzIHNvZnR3YXJlIHdlcmUgZGV2ZWxvcGVkIGZvciB0aGUgRnJlZUJTRCBQcm9qZWN0IGJ5Ci1KYWNxdWVzIEEuIFZpZHJpbmUsIFNhZmVwb3J0IE5ldHdvcmsgU2VydmljZXMsIGFuZCBOZXR3b3JrCi1Bc3NvY2lhdGVzIExhYm9yYXRvcmllcywgdGhlIFNlY3VyaXR5IFJlc2VhcmNoIERpdmlzaW9uIG9mIE5ldHdvcmsKLUFzc29jaWF0ZXMsIEluYy4gdW5kZXIgREFSUEEvU1BBV0FSIGNvbnRyYWN0IE42NjAwMS0wMS1DLTgwMzUKLSgiQ0JPU1MiKSwgYXMgcGFydCBvZiB0aGUgREFSUEEgQ0hBVFMgcmVzZWFyY2ggcHJvZ3JhbS4KK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCithcmUgbWV0OgorUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KK1JlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAgIGRpc3RyaWJ1dGlvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKK0xJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCitGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKK0JVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECitBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCitPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKK09GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorU1VDSCBEQU1BR0UuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKK0FsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCithcmUgbWV0OgorUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KK1JlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAgIGRpc3RyaWJ1dGlvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKK0xJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCitGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKK0JVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECitBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCitPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKK09GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorU1VDSCBEQU1BR0UuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ29weXJpZ2h0IChDKSAyMDA4LTIwMTAgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKK2FyZSBtZXQ6CitSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICAgZGlzdHJpYnV0aW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKK0ZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCitDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCitJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCitPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKK0FORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKK09SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCitTVUNIIERBTUFHRS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDb3B5cmlnaHQgKEMpIDIwMDkgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKK2FyZSBtZXQ6CitSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICAgZGlzdHJpYnV0aW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKK0ZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCitDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCitJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCitPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKK0FORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKK09SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCitTVUNIIERBTUFHRS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDb3B5cmlnaHQgKEMpIDIwMTAgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorCitMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKK3lvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KK1lvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCitVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCitkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCitTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCitsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDb3B5cmlnaHQgKEMpIDIwMTAgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKK2FyZSBtZXQ6CitSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICAgZGlzdHJpYnV0aW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKK0ZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCitDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCitJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCitPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKK0FORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKK09SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCitTVUNIIERBTUFHRS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDb3B5cmlnaHQgKEMpIDIwMTAgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorQ29weXJpZ2h0IChjKSAyMDA4IEFSTSBMdGQKK0FsbCByaWdodHMgcmVzZXJ2ZWQuCiAKIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMjQsMTkgKzIzOSwxODkgQEAKIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorMy4gVGhlIG5hbWUgb2YgdGhlIGNvbXBhbnkgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZQorICAgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuCisgICBwZXJtaXNzaW9uLgogCi1USElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFSTSBMVEQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVECitXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KK0lOIE5PIEVWRU5UIFNIQUxMIEFSTSBMVEQgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKK1NQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRAorVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRgorTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKK05FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK0FuZHJvaWQgYWRhcHRhdGlvbiBhbmQgdHdlYWsgYnkgSmltIEh1YW5nIDxqc2VydkAweGxhYi5vcmc+LgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NvcHlyaWdodCAoQykgMjAxMSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKK0xpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKK1VubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKK2Rpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCitXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KK1NlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKK2xpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NvcHlyaWdodCAoQykgMjAxMSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CitBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworYXJlIG1ldDoKK1JlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCitSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgICBkaXN0cmlidXRpb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCitMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKK0NPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKK0lOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCitCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKK09GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCitPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKK1NVQ0ggREFNQUdFLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NvcHlyaWdodCAoQykgMjAxMiBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKK0xpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKK1VubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKK2Rpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCitXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KK1NlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKK2xpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NvcHlyaWdodCAoQykgMjAxMiBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CitBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworYXJlIG1ldDoKK1JlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCitSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgICBkaXN0cmlidXRpb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCitMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKK0NPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKK0lOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCitCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKK09GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCitPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKK1NVQ0ggREFNQUdFLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKK0xpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKK1VubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKK2Rpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCitXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KK1NlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKK2xpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CitBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworYXJlIG1ldDoKK1JlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCitSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgICBkaXN0cmlidXRpb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCitMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKK0NPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKK0lOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCitCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKK09GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCitPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKK1NVQ0ggREFNQUdFLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NvcHlyaWdodCAoYykgMTk4MCwgMTk4MywgMTk4OCwgMTk5MworICAgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCithcmUgbWV0OgorMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKzIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCisgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6CisgICBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBVbml2ZXJzaXR5IG9mCisgICBDYWxpZm9ybmlhLCBCZXJrZWxleSBhbmQgaXRzIGNvbnRyaWJ1dG9ycy4KKzQuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKK0FSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi1PVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIAorT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgogU1VDSCBEQU1BR0UuCiAKKwogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTkzIGJ5IERpZ2l0YWwgRXF1aXBtZW50IENvcnBvcmF0aW9uLgogCiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKQEAgLTE1NSw5ICs0NDAsMTAgQEAKIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUwogU09GVFdBUkUuCiAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotQ29weXJpZ2h0IChjKSAxOTk3IE1hcmsgQnJpbmljb21iZQotQWxsIHJpZ2h0cyByZXNlcnZlZC4KK0NvcHlyaWdodCAoYykgMTk4MCwgMTk5MworICAgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAKIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xNjcsMTcgKzQ1MywxNCBAQAogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0zLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKLSAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKLSAgICAgVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSBNYXJrIEJyaW5pY29tYmUKLTQuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCiszLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KIAotVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLUFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCitBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCkBAIC0xODYsODYgKzQ2OSwzOSBAQAogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgogU1VDSCBEQU1BR0UuCiAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotQ29weXJpZ2h0IChjKSAxOTkzIE1hcnRpbiBCaXJnbWVpZXIKLUFsbCByaWdodHMgcmVzZXJ2ZWQuCitDb3B5cmlnaHQgKGMpIDE5ODIsIDE5ODYsIDE5OTMKKyAgIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogCi1Zb3UgbWF5IHJlZGlzdHJpYnV0ZSB1bm1vZGlmaWVkIG9yIG1vZGlmaWVkIHZlcnNpb25zIG9mIHRoaXMgc291cmNlCi1jb2RlIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgYW5kIHRoZQotZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIHJldGFpbmVkLgorUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKK2FyZSBtZXQ6CisxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiszLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KIAotVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCBgYGFzIGlzJycsIGFuZCBjb21lcyB3aXRoIG5vIHdhcnJhbnRpZXMKLW9mIGFueSBraW5kLiBJIHNoYWxsIGluIG5vIGV2ZW50IGJlIGxpYWJsZSBmb3IgYW55dGhpbmcgdGhhdCBoYXBwZW5zCi10byBhbnlvbmUvYW55dGhpbmcgd2hlbiB1c2luZyB0aGlzIHNvZnR3YXJlLgorVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKK0FOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKK0FSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKK0RBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCitPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKK0hPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCitMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCitPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCitTVUNIIERBTUFHRS4KIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1BcmM0IHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIGZvciBPcGVuQlNELgotQ29weXJpZ2h0IDE5OTYgRGF2aWQgTWF6aWVyZXMgPGRtQGxjcy5taXQuZWR1Pi4KLQotTW9kaWZpY2F0aW9uIGFuZCByZWRpc3RyaWJ1dGlvbiBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3JtcyBpcwotcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgZHVlIGNyZWRpdCBpcyBnaXZlbiB0byB0aGUgYXV0aG9yIGFuZCB0aGUKLU9wZW5CU0QgcHJvamVjdCBieSBsZWF2aW5nIHRoaXMgY29weXJpZ2h0IG5vdGljZSBpbnRhY3QuCi0KLQotQ29weXJpZ2h0IChjKSAxOTk5IEt1bmdsaWdhIFRla25pc2thIEjDtmdza29sYW4KLShSb3lhbCBJbnN0aXR1dGUgb2YgVGVjaG5vbG9neSwgU3RvY2tob2xtLCBTd2VkZW4pLiAKLUFsbCByaWdodHMgcmVzZXJ2ZWQuIAotCi1SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgCi1tb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgCi1hcmUgbWV0OiAKLQotMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgCi0gICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotCi0yLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCAKLSAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgCi0gICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKLQotMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBLVEggbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZQotICAgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAotICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotCi1USElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEtUSCBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQotRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLUlNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgS1RIIE9SIElUUyBDT05UUklCVVRPUlMgQkUKLUxJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLUNPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi1TVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IKLUJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLAotV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IKLU9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYKLUFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAqLwotCi0KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLUNvcHlyaWdodCAoQykgMTk5MyBieSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0KLURldmVsb3BlZCBhdCBTdW5Qcm8sIGEgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBidXNpbmVzcy4KLVBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKLXNvZnR3YXJlIGlzIGZyZWVseSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoaXMgbm90aWNlCi1pcyBwcmVzZXJ2ZWQuCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLQotQ29weXJpZ2h0IChjKSAxOTk3LCAyMDA1IFRvZGQgQy4gTWlsbGVyIDxUb2RkLk1pbGxlckBjb3VydGVzYW4uY29tPgotCi1QZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKLXB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKLWNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCi0KLVRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUwotV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgotTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IKLUFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKLVdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgotQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKLU9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCi0KLQotQ29weXJpZ2h0IChjKSAxOTg5LCAxOTkzCi0gICAgIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorQ29weXJpZ2h0IChjKSAxOTgyLCAxOTg2LCAxOTkzCisgICBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KIChjKSBVTklYIFN5c3RlbSBMYWJvcmF0b3JpZXMsIEluYy4KIEFsbCBvciBzb21lIHBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgZGVyaXZlZCBmcm9tIG1hdGVyaWFsIGxpY2Vuc2VkCiB0byB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhIGJ5IEFtZXJpY2FuIFRlbGVwaG9uZSBhbmQgVGVsZWdyYXBoCkBAIC0yOTYsNiArNTMyLDE5MjcgQEAKIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKIFNVQ0ggREFNQUdFLgogCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NvcHlyaWdodCAoYykgMTk4MywgMTk4NywgMTk4OQorICAgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCithcmUgbWV0OgorMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKzIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECitBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKK0lNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCitBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKK0ZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCitEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCitIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorU1VDSCBEQU1BR0UuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ29weXJpZ2h0IChjKSAxOTgzLCAxOTg4LCAxOTkzCisgICBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKK2FyZSBtZXQ6CisxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiszLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKK0FOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKK0FSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKK0RBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCitPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKK0hPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCitMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCitPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCitTVUNIIERBTUFHRS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDb3B5cmlnaHQgKGMpIDE5ODMsIDE5ODkKKyAgIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworYXJlIG1ldDoKKzEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKzMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQorICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgorICAgIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIFVuaXZlcnNpdHkgb2YKKyAgICBDYWxpZm9ybmlhLCBCZXJrZWxleSBhbmQgaXRzIGNvbnRyaWJ1dG9ycy4KKzQuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCitJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCitGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKK09SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKK0xJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKK09VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKK1NVQ0ggREFNQUdFLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NvcHlyaWdodCAoYykgMTk4MywgMTk4OSwgMTk5MworICAgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCithcmUgbWV0OgorMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKzIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECitBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKK0lNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCitBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKK0ZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCitEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCitIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorU1VDSCBEQU1BR0UuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ29weXJpZ2h0IChjKSAxOTgzLCAxOTkwLCAxOTkzCisgICBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKK2FyZSBtZXQ6CisxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiszLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKKyAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKKyAgICBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBVbml2ZXJzaXR5IG9mCisgICAgQ2FsaWZvcm5pYSwgQmVya2VsZXkgYW5kIGl0cyBjb250cmlidXRvcnMuCis0LiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKK0FOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKK0FSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKK0RBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCitPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKK0hPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCitMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCitPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCitTVUNIIERBTUFHRS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDb3B5cmlnaHQgKGMpIDE5ODMsIDE5OTMKKyAgIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworYXJlIG1ldDoKKzEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKzMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCitJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCitGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKK09SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKK0xJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKK09VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKK1NVQ0ggREFNQUdFLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NvcHlyaWdodCAoYykgMTk4MywgMTk5MworICAgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCithcmUgbWV0OgorMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKzIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorNC4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECitBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKK0lNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCitBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKK0ZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCitEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCitIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorU1VDSCBEQU1BR0UuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ29weXJpZ2h0IChjKSAxOTg1CisgICBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKK2FyZSBtZXQ6CisxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiszLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKKyAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKKyAgICBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBVbml2ZXJzaXR5IG9mCisgICAgQ2FsaWZvcm5pYSwgQmVya2VsZXkgYW5kIGl0cyBjb250cmlidXRvcnMuCis0LiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKK0FOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKK0FSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKK0RBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCitPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKK0hPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCitMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCitPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCitTVUNIIERBTUFHRS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDb3B5cmlnaHQgKGMpIDE5ODUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLgorQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKK2FyZSBtZXQ6CisxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiszLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKK0FOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKK0FSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKK0RBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCitPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKK0hPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCitMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCitPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCitTVUNIIERBTUFHRS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDb3B5cmlnaHQgKGMpIDE5ODUsIDE5ODgsIDE5OTMKKyAgIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworYXJlIG1ldDoKKzEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKzMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCitJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCitGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKK09SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKK0xJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKK09VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKK1NVQ0ggREFNQUdFLgorCitQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTMgYnkgRGlnaXRhbCBFcXVpcG1lbnQgQ29ycG9yYXRpb24uCisKK1Blcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQKK3RoZSBuYW1lIG9mIERpZ2l0YWwgRXF1aXBtZW50IENvcnBvcmF0aW9uIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yCitwdWJsaWNpdHkgcGVydGFpbmluZyB0byBkaXN0cmlidXRpb24gb2YgdGhlIGRvY3VtZW50IG9yIHNvZnR3YXJlIHdpdGhvdXQKK3NwZWNpZmljLCB3cml0dGVuIHByaW9yIHBlcm1pc3Npb24uCisKK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBESUdJVEFMIEVRVUlQTUVOVCBDT1JQLiBESVNDTEFJTVMgQUxMCitXQVJSQU5USUVTIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUsIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTCitPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuICAgSU4gTk8gRVZFTlQgU0hBTEwgRElHSVRBTCBFUVVJUE1FTlQKK0NPUlBPUkFUSU9OIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwKK0RBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUgorUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMKK0FDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUworU09GVFdBUkUuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ29weXJpZ2h0IChjKSAxOTg1LCAxOTg5LCAxOTkzCisgICBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKK2FyZSBtZXQ6CisxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiszLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKKyAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKKyAgICBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBVbml2ZXJzaXR5IG9mCisgICAgQ2FsaWZvcm5pYSwgQmVya2VsZXkgYW5kIGl0cyBjb250cmlidXRvcnMuCis0LiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKK0FOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKK0FSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKK0RBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCitPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKK0hPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCitMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCitPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCitTVUNIIERBTUFHRS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDb3B5cmlnaHQgKGMpIDE5ODUsIDE5OTMKKyAgIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworYXJlIG1ldDoKKzEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKzMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQorICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgorICAgIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIFVuaXZlcnNpdHkgb2YKKyAgICBDYWxpZm9ybmlhLCBCZXJrZWxleSBhbmQgaXRzIGNvbnRyaWJ1dG9ycy4KKzQuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCitJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCitGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKK09SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKK0xJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKK09VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKK1NVQ0ggREFNQUdFLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NvcHlyaWdodCAoYykgMTk4NSwgMTk5MworICAgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCithcmUgbWV0OgorMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKzIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECitBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKK0lNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCitBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKK0ZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCitEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCitIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorU1VDSCBEQU1BR0UuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ29weXJpZ2h0IChjKSAxOTg3IFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4KK0FsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCithcmUgbWV0OgorMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKzIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECitBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKK0lNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCitBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKK0ZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCitEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCitIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorU1VDSCBEQU1BR0UuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ29weXJpZ2h0IChjKSAxOTg3LCAxOTkzCisgICBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKK2FyZSBtZXQ6CisxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiszLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKKyAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKKyAgICBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBVbml2ZXJzaXR5IG9mCisgICAgQ2FsaWZvcm5pYSwgQmVya2VsZXkgYW5kIGl0cyBjb250cmlidXRvcnMuCis0LiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKK0FOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKK0FSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKK0RBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCitPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKK0hPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCitMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCitPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCitTVUNIIERBTUFHRS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDb3B5cmlnaHQgKGMpIDE5ODcsIDE5OTMKKyAgIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworYXJlIG1ldDoKKzEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKzMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCitJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCitGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKK09SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKK0xJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKK09VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKK1NVQ0ggREFNQUdFLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NvcHlyaWdodCAoYykgMTk4OCBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuCitBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworYXJlIG1ldDoKKzEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKzMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCitJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCitGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKK09SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKK0xJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKK09VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKK1NVQ0ggREFNQUdFLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NvcHlyaWdodCAoYykgMTk4OCBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLgorQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKK2FyZSBtZXQ6CisxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiszLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKK0FOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKK0FSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKK0RBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCitPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKK0hPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCitMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCitPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCitTVUNIIERBTUFHRS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDb3B5cmlnaHQgKGMpIDE5ODgsIDE5OTMKKyAgICBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKK2FyZSBtZXQ6CisxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiszLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKK0FOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKK0FSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKK0RBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCitPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKK0hPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCitMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCitPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCitTVUNIIERBTUFHRS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDb3B5cmlnaHQgKGMpIDE5ODgsIDE5OTMKKyAgIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworYXJlIG1ldDoKKzEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKzMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQorICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgorICAgIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIFVuaXZlcnNpdHkgb2YKKyAgICBDYWxpZm9ybmlhLCBCZXJrZWxleSBhbmQgaXRzIGNvbnRyaWJ1dG9ycy4KKzQuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCitJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCitGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKK09SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKK0xJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKK09VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKK1NVQ0ggREFNQUdFLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NvcHlyaWdodCAoYykgMTk4OCwgMTk5MworICAgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCithcmUgbWV0OgorMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKzIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECitBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKK0lNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCitBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKK0ZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCitEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCitIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorU1VDSCBEQU1BR0UuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ29weXJpZ2h0IChjKSAxOTg4LCAxOTkzCisgICBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSB3cml0dGVuIGJ5IEtlbiBBcm5vbGQgYW5kCitwdWJsaXNoZWQgaW4gVU5JWCBSZXZpZXcsIFZvbC4gNiwgTm8uIDguCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCithcmUgbWV0OgorMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKzIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECitBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKK0lNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCitBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKK0ZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCitEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCitIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorU1VDSCBEQU1BR0UuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ29weXJpZ2h0IChjKSAxOTg5IFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuCitBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zIGFyZSBwZXJtaXR0ZWQKK3Byb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGFyYWdyYXBoIGFyZQorZHVwbGljYXRlZCBpbiBhbGwgc3VjaCBmb3JtcyBhbmQgdGhhdCBhbnkgZG9jdW1lbnRhdGlvbiwKK2FkdmVydGlzaW5nIG1hdGVyaWFscywgYW5kIG90aGVyIG1hdGVyaWFscyByZWxhdGVkIHRvIHN1Y2gKK2Rpc3RyaWJ1dGlvbiBhbmQgdXNlIGFja25vd2xlZGdlIHRoYXQgdGhlIHNvZnR3YXJlIHdhcyBkZXZlbG9wZWQKK2J5IHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEsIEJlcmtlbGV5LiBUaGUgbmFtZSBvZiB0aGUKK1VuaXZlcnNpdHkgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCitmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUgorSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQKK1dBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDb3B5cmlnaHQgKGMpIDE5ODkgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4KK0FsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCithcmUgbWV0OgorMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKzIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECitBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKK0lNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCitBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKK0ZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCitEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCitIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorU1VDSCBEQU1BR0UuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ29weXJpZ2h0IChjKSAxOTg5IFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuCitBbGwgcmlnaHRzIHJlc2VydmVkLgorKGMpIFVOSVggU3lzdGVtIExhYm9yYXRvcmllcywgSW5jLgorQWxsIG9yIHNvbWUgcG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBkZXJpdmVkIGZyb20gbWF0ZXJpYWwgbGljZW5zZWQKK3RvIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEgYnkgQW1lcmljYW4gVGVsZXBob25lIGFuZCBUZWxlZ3JhcGgKK0NvLiBvciBVbml4IFN5c3RlbSBMYWJvcmF0b3JpZXMsIEluYy4gYW5kIGFyZSByZXByb2R1Y2VkIGhlcmVpbiB3aXRoCit0aGUgcGVybWlzc2lvbiBvZiBVTklYIFN5c3RlbSBMYWJvcmF0b3JpZXMsIEluYy4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKK2FyZSBtZXQ6CisxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiszLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKK0FOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKK0FSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKK0RBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCitPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKK0hPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCitMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCitPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCitTVUNIIERBTUFHRS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDb3B5cmlnaHQgKGMpIDE5ODksIDE5OTMKKyAgIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworYXJlIG1ldDoKKzEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKzMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCitJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCitGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKK09SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKK0xJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKK09VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKK1NVQ0ggREFNQUdFLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NvcHlyaWdodCAoYykgMTk4OSwgMTk5MworICAgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCithcmUgbWV0OgorMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKzIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorNC4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECitBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKK0lNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCitBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKK0ZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCitEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCitIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorU1VDSCBEQU1BR0UuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ29weXJpZ2h0IChjKSAxOTg5LCAxOTkzCisgICBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyhjKSBVTklYIFN5c3RlbSBMYWJvcmF0b3JpZXMsIEluYy4KK0FsbCBvciBzb21lIHBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgZGVyaXZlZCBmcm9tIG1hdGVyaWFsIGxpY2Vuc2VkCit0byB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhIGJ5IEFtZXJpY2FuIFRlbGVwaG9uZSBhbmQgVGVsZWdyYXBoCitDby4gb3IgVW5peCBTeXN0ZW0gTGFib3JhdG9yaWVzLCBJbmMuIGFuZCBhcmUgcmVwcm9kdWNlZCBoZXJlaW4gd2l0aAordGhlIHBlcm1pc3Npb24gb2YgVU5JWCBTeXN0ZW0gTGFib3JhdG9yaWVzLCBJbmMuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCithcmUgbWV0OgorMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKzIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECitBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKK0lNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCitBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKK0ZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCitEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCitIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorU1VDSCBEQU1BR0UuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ29weXJpZ2h0IChjKSAxOTg5LCAxOTkzCisgICBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyhjKSBVTklYIFN5c3RlbSBMYWJvcmF0b3JpZXMsIEluYy4KK0FsbCBvciBzb21lIHBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgZGVyaXZlZCBmcm9tIG1hdGVyaWFsIGxpY2Vuc2VkCit0byB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhIGJ5IEFtZXJpY2FuIFRlbGVwaG9uZSBhbmQgVGVsZWdyYXBoCitDby4gb3IgVW5peCBTeXN0ZW0gTGFib3JhdG9yaWVzLCBJbmMuIGFuZCBhcmUgcmVwcm9kdWNlZCBoZXJlaW4gd2l0aAordGhlIHBlcm1pc3Npb24gb2YgVU5JWCBTeXN0ZW0gTGFib3JhdG9yaWVzLCBJbmMuCisKK1RoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKK1BhdWwgQm9ybWFuIGF0IEtyeXN0YWwgVGVjaG5vbG9naWVzLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworYXJlIG1ldDoKKzEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKzQuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCitJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCitGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKK09SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKK0xJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKK09VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKK1NVQ0ggREFNQUdFLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NvcHlyaWdodCAoYykgMTk4OSwgMTk5MywgMTk5NAorICAgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCithcmUgbWV0OgorMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKzIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECitBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKK0lNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCitBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKK0ZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCitEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCitIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorU1VDSCBEQU1BR0UuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ29weXJpZ2h0IChjKSAxOTkwIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4KK0FsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCithcmUgbWV0OgorMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKzIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECitBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKK0lNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCitBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKK0ZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCitEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCitIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorU1VDSCBEQU1BR0UuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ29weXJpZ2h0IChjKSAxOTkwIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuCitBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworYXJlIG1ldDoKKzEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKzMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCitJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCitGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKK09SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKK0xJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKK09VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKK1NVQ0ggREFNQUdFLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NvcHlyaWdodCAoYykgMTk5MCBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLgorQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBsb2NvcmUucy4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKK2FyZSBtZXQ6CisxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiszLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKK0FOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKK0FSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKK0RBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCitPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKK0hPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCitMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCitPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCitTVUNIIERBTUFHRS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDb3B5cmlnaHQgKGMpIDE5OTAgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4KK0FsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1RoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKK0NocmlzIFRvcmVrLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworYXJlIG1ldDoKKzEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKzMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCitJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCitGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKK09SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKK0xJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKK09VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKK1NVQ0ggREFNQUdFLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NvcHlyaWdodCAoYykgMTk5MCBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLgorQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQorV2lsbGlhbSBKb2xpdHouCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCithcmUgbWV0OgorMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKzIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECitBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKK0lNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCitBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKK0ZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCitEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCitIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorU1VDSCBEQU1BR0UuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCisgICBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKK2FyZSBtZXQ6CisxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiszLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKK0FOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKK0FSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKK0RBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCitPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKK0hPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCitMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCitPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCitTVUNIIERBTUFHRS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKKyAgIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorCitUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5CitDaHJpcyBUb3Jlay4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKK2FyZSBtZXQ6CisxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiszLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKK0FOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKK0FSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKK0RBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCitPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKK0hPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCitMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCitPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCitTVUNIIERBTUFHRS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKKyAgIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorCitUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5CitEb25uIFNlZWxleSBhdCBVVU5FVCBUZWNobm9sb2dpZXMsIEluYy4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKK2FyZSBtZXQ6CisxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiszLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKK0FOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKK0FSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKK0RBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCitPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKK0hPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCitMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCitPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCitTVUNIIERBTUFHRS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKKyAgIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKGMpIFVOSVggU3lzdGVtIExhYm9yYXRvcmllcywgSW5jLgorQWxsIG9yIHNvbWUgcG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBkZXJpdmVkIGZyb20gbWF0ZXJpYWwgbGljZW5zZWQKK3RvIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEgYnkgQW1lcmljYW4gVGVsZXBob25lIGFuZCBUZWxlZ3JhcGgKK0NvLiBvciBVbml4IFN5c3RlbSBMYWJvcmF0b3JpZXMsIEluYy4gYW5kIGFyZSByZXByb2R1Y2VkIGhlcmVpbiB3aXRoCit0aGUgcGVybWlzc2lvbiBvZiBVTklYIFN5c3RlbSBMYWJvcmF0b3JpZXMsIEluYy4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKK2FyZSBtZXQ6CisxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiszLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKK0FOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKK0FSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKK0RBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCitPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKK0hPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCitMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCitPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCitTVUNIIERBTUFHRS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMsIDE5OTQKKyAgIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworYXJlIG1ldDoKKzEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKzMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCitJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCitGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKK09SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKK0xJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKK09VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKK1NVQ0ggREFNQUdFLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NvcHlyaWdodCAoYykgMTk5MCwgMTk5MywgMTk5NAorICAgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1RoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKK0NocmlzIFRvcmVrLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworYXJlIG1ldDoKKzEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKzMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCitJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCitGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKK09SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKK0xJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKK09VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKK1NVQ0ggREFNQUdFLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NvcHlyaWdodCAoYykgMTk5MSwgMTk5MworICAgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCithcmUgbWV0OgorMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKzIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECitBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKK0lNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCitBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKK0ZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCitEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCitIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorU1VDSCBEQU1BR0UuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ29weXJpZ2h0IChjKSAxOTkxLCAxOTkzCisgICBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQorQmVya2VsZXkgU29mdHdhcmUgRGVzaWduLCBJbmMuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCithcmUgbWV0OgorMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKzIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECitBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKK0lNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCitBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKK0ZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCitEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCitIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorU1VDSCBEQU1BR0UuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ29weXJpZ2h0IChjKSAxOTkxLCAxOTkzCisgICBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyhjKSBVTklYIFN5c3RlbSBMYWJvcmF0b3JpZXMsIEluYy4KK0FsbCBvciBzb21lIHBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgZGVyaXZlZCBmcm9tIG1hdGVyaWFsIGxpY2Vuc2VkCit0byB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhIGJ5IEFtZXJpY2FuIFRlbGVwaG9uZSBhbmQgVGVsZWdyYXBoCitDby4gb3IgVW5peCBTeXN0ZW0gTGFib3JhdG9yaWVzLCBJbmMuIGFuZCBhcmUgcmVwcm9kdWNlZCBoZXJlaW4gd2l0aAordGhlIHBlcm1pc3Npb24gb2YgVU5JWCBTeXN0ZW0gTGFib3JhdG9yaWVzLCBJbmMuCisKK1RoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKK0h1Z2ggU21pdGggYXQgVGhlIFVuaXZlcnNpdHkgb2YgR3VlbHBoLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworYXJlIG1ldDoKKzEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKzMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCitJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCitGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKK09SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKK0xJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKK09VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKK1NVQ0ggREFNQUdFLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NvcHlyaWdodCAoYykgMTk5MSwgMTk5MywgMTk5NSwKKyAgIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorCitUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5CitIYXZhcmQgRWlkbmVzLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworYXJlIG1ldDoKKzEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKzMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCitJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCitGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKK09SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKK0xJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKK09VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKK1NVQ0ggREFNQUdFLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NvcHlyaWdodCAoYykgMTk5MiBIZW5yeSBTcGVuY2VyLgorQ29weXJpZ2h0IChjKSAxOTkyLCAxOTkzCisgICBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQorSGVucnkgU3BlbmNlciBvZiB0aGUgVW5pdmVyc2l0eSBvZiBUb3JvbnRvLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworYXJlIG1ldDoKKzEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKzMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCitJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCitGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKK09SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKK0xJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKK09VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKK1NVQ0ggREFNQUdFLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NvcHlyaWdodCAoYykgMTk5MiBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLgorQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKK2FyZSBtZXQ6CisxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiszLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKK0FOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKK0FSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKK0RBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCitPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKK0hPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCitMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCitPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCitTVUNIIERBTUFHRS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDb3B5cmlnaHQgKGMpIDE5OTIsIDE5OTMKKyAgIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworYXJlIG1ldDoKKzEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKzMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCitJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCitGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKK09SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKK0xJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKK09VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKK1NVQ0ggREFNQUdFLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NvcHlyaWdodCAoYykgMTk5MiwgMTk5MworICAgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1RoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKK1JhbHBoIENhbXBiZWxsLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworYXJlIG1ldDoKKzEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKzMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCitJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCitGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKK09SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKK0xJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKK09VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKK1NVQ0ggREFNQUdFLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NvcHlyaWdodCAoYykgMTk5MiwgMTk5MworICAgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1RoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKK1JhbHBoIENhbXBiZWxsLiBUaGlzIGZpbGUgaXMgZGVyaXZlZCBmcm9tIHRoZSBNSVBTIFJJU0MKK0FyY2hpdGVjdHVyZSBib29rIGJ5IEdlcnJ5IEthbmUuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCithcmUgbWV0OgorMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKzIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECitBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKK0lNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCitBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKK0ZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCitEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCitIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorU1VDSCBEQU1BR0UuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ29weXJpZ2h0IChjKSAxOTkyLCAxOTkzCisgICBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworVGhpcyBzb2Z0d2FyZSB3YXMgZGV2ZWxvcGVkIGJ5IHRoZSBDb21wdXRlciBTeXN0ZW1zIEVuZ2luZWVyaW5nIGdyb3VwCithdCBMYXdyZW5jZSBCZXJrZWxleSBMYWJvcmF0b3J5IHVuZGVyIERBUlBBIGNvbnRyYWN0IEJHIDkxLTY2IGFuZAorY29udHJpYnV0ZWQgdG8gQmVya2VsZXkuCisKK0FsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQorbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgorICAgVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgVW5pdmVyc2l0eSBvZgorICAgQ2FsaWZvcm5pYSwgTGF3cmVuY2UgQmVya2VsZXkgTGFib3JhdG9yeS4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKK2FyZSBtZXQ6CisxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiszLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKKyAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKKyAgIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIFVuaXZlcnNpdHkgb2YKKyAgIENhbGlmb3JuaWEsIEJlcmtlbGV5IGFuZCBpdHMgY29udHJpYnV0b3JzLgorNC4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECitBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKK0lNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCitBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKK0ZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCitEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCitIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorU1VDSCBEQU1BR0UuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ29weXJpZ2h0IChjKSAxOTkyLCAxOTkzCisgICBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworVGhpcyBzb2Z0d2FyZSB3YXMgZGV2ZWxvcGVkIGJ5IHRoZSBDb21wdXRlciBTeXN0ZW1zIEVuZ2luZWVyaW5nIGdyb3VwCithdCBMYXdyZW5jZSBCZXJrZWxleSBMYWJvcmF0b3J5IHVuZGVyIERBUlBBIGNvbnRyYWN0IEJHIDkxLTY2IGFuZAorY29udHJpYnV0ZWQgdG8gQmVya2VsZXkuCisKK0FsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQorbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgorICAgVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgVW5pdmVyc2l0eSBvZgorICAgQ2FsaWZvcm5pYSwgTGF3cmVuY2UgQmVya2VsZXkgTGFib3JhdG9yeS4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKK2FyZSBtZXQ6CisxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiszLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKK0FOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKK0FSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKK0RBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCitPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKK0hPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCitMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCitPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCitTVUNIIERBTUFHRS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDb3B5cmlnaHQgKGMpIDE5OTIsIDE5OTMKKyAgIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorKGMpIFVOSVggU3lzdGVtIExhYm9yYXRvcmllcywgSW5jLgorQWxsIG9yIHNvbWUgcG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBkZXJpdmVkIGZyb20gbWF0ZXJpYWwgbGljZW5zZWQKK3RvIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEgYnkgQW1lcmljYW4gVGVsZXBob25lIGFuZCBUZWxlZ3JhcGgKK0NvLiBvciBVbml4IFN5c3RlbSBMYWJvcmF0b3JpZXMsIEluYy4gYW5kIGFyZSByZXByb2R1Y2VkIGhlcmVpbiB3aXRoCit0aGUgcGVybWlzc2lvbiBvZiBVTklYIFN5c3RlbSBMYWJvcmF0b3JpZXMsIEluYy4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKK2FyZSBtZXQ6CisxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiszLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKK0FOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKK0FSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKK0RBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCitPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKK0hPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCitMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCitPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCitTVUNIIERBTUFHRS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDb3B5cmlnaHQgKGMpIDE5OTIsIDE5OTMsIDE5OTQKKyAgIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorCitUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5CitIZW5yeSBTcGVuY2VyLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworYXJlIG1ldDoKKzEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKzMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCitJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCitGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKK09SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKK0xJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKK09VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKK1NVQ0ggREFNQUdFLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NvcHlyaWdodCAoYykgMTk5MiwgMTk5MywgMTk5NCBIZW5yeSBTcGVuY2VyLgorCitUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5CitIZW5yeSBTcGVuY2VyLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworYXJlIG1ldDoKKzEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKzMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQorICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgorICAgVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgVW5pdmVyc2l0eSBvZgorICAgQ2FsaWZvcm5pYSwgQmVya2VsZXkgYW5kIGl0cyBjb250cmlidXRvcnMuCis0LiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKK0FOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKK0FSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKK0RBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCitPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKK0hPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCitMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCitPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCitTVUNIIERBTUFHRS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDb3B5cmlnaHQgKGMpIDE5OTMKKyAgICAgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCithcmUgbWV0OgorMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKzIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECitBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKK0lNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCitBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKK0ZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCitEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCitIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorU1VDSCBEQU1BR0UuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ29weXJpZ2h0IChjKSAxOTkzCisgICBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKK2FyZSBtZXQ6CisxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiszLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKK0FOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKK0FSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKK0RBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCitPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKK0hPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCitMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCitPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCitTVUNIIERBTUFHRS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDb3B5cmlnaHQgKGMpIDE5OTMgQ2hyaXN0b3BoZXIgRy4gRGVtZXRyaW91CitBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworYXJlIG1ldDoKKzEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKzMuIFRoZSBuYW1lIG9mIHRoZSBhdXRob3IgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKK0lNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKK09GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCitJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCitJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKK05PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKK0RBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCitUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NvcHlyaWdodCAoYykgMTk5MyBNYXJ0aW4gQmlyZ21laWVyCitBbGwgcmlnaHRzIHJlc2VydmVkLgorCitZb3UgbWF5IHJlZGlzdHJpYnV0ZSB1bm1vZGlmaWVkIG9yIG1vZGlmaWVkIHZlcnNpb25zIG9mIHRoaXMgc291cmNlCitjb2RlIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgYW5kIHRoZQorZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIHJldGFpbmVkLgorCitUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkIGBgYXMgaXMnJywgYW5kIGNvbWVzIHdpdGggbm8gd2FycmFudGllcworb2YgYW55IGtpbmQuIEkgc2hhbGwgaW4gbm8gZXZlbnQgYmUgbGlhYmxlIGZvciBhbnl0aGluZyB0aGF0IGhhcHBlbnMKK3RvIGFueW9uZS9hbnl0aGluZyB3aGVuIHVzaW5nIHRoaXMgc29mdHdhcmUuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ29weXJpZ2h0IChjKSAxOTk0IFRoZSBOZXRCU0QgRm91bmRhdGlvbiwgSW5jLgorQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBUaGUgTmV0QlNEIEZvdW5kYXRpb24KK2J5IENocmlzdG9zIFpvdWxhcy4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKK2FyZSBtZXQ6CisxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE5FVEJTRCBGT1VOREFUSU9OLCBJTkMuIEFORCBDT05UUklCVVRPUlMKK2BgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRAorVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKK1BVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgRk9VTkRBVElPTiBPUiBDT05UUklCVVRPUlMKK0JFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKK0NPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCitTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKK0lOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCitDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKK1BPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NvcHlyaWdodCAoYykgMTk5NSAtIDIwMDEgS3VuZ2xpZ2EgVGVrbmlza2EgSMO2Z3Nrb2xhbgorKFJveWFsIEluc3RpdHV0ZSBvZiBUZWNobm9sb2d5LCBTdG9ja2hvbG0sIFN3ZWRlbikuCitBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworYXJlIG1ldDoKKworMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKworMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisKKzMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIEluc3RpdHV0ZSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIElOU1RJVFVURSBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKK0FOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKK0FSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIElOU1RJVFVURSBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCitGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKK09SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKK0xJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKK09VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKK1NVQ0ggREFNQUdFLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NvcHlyaWdodCAoYykgMTk5NSBBbGV4IFRhdG1hbmphbnRzIDxhbGV4QGVsdmlzdGkua2lldi51YT4KKyAgICAgICBhdCBFbGVjdHJvbm5pIFZpc3RpIElBLCBLaWV2LCBVa3JhaW5lLgorICAgICAgICAgICBBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworYXJlIG1ldDoKKzEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQKK0FOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKK0FSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUKK0ZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCitEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCitIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorU1VDSCBEQU1BR0UuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogQ29weXJpZ2h0IChjKSAxOTk1LCAxOTk2IENhcm5lZ2llLU1lbGxvbiBVbml2ZXJzaXR5LgogQWxsIHJpZ2h0cyByZXNlcnZlZC4KQEAgLTMyMiwzMiArMjQ3OSw5MDAgQEAKIGFueSBpbXByb3ZlbWVudHMgb3IgZXh0ZW5zaW9ucyB0aGF0IHRoZXkgbWFrZSBhbmQgZ3JhbnQgQ2FybmVnaWUgdGhlCiByaWdodHMgdG8gcmVkaXN0cmlidXRlIHRoZXNlIGNoYW5nZXMuCiAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotQ29weXJpZ2h0IChjKSAxOTk1LCAxOTk2IENhcm5lZ2llLU1lbGxvbiBVbml2ZXJzaXR5LgorQ29weXJpZ2h0IChjKSAxOTk2IGJ5IEludGVybmV0IFNvZnR3YXJlIENvbnNvcnRpdW0uCisKK1Blcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKworVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIElOVEVSTkVUIFNPRlRXQVJFIENPTlNPUlRJVU0gRElTQ0xBSU1TCitBTEwgV0FSUkFOVElFUyBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTCitPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIElOVEVSTkVUIFNPRlRXQVJFCitDT05TT1JUSVVNIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwKK0RBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUgorUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMKK0FDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUworU09GVFdBUkUuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ29weXJpZ2h0IChjKSAxOTk2LCBEYXZpZCBNYXppZXJlcyA8ZG1AdXVuLm9yZz4KK0NvcHlyaWdodCAoYykgMjAwOCwgRGFtaWVuIE1pbGxlciA8ZGptQG9wZW5ic2Qub3JnPgorCitQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKK3B1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKK2NvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisKK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IKK0FOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKK1dIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKK09SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ29weXJpZ2h0IChjKSAxOTk2LTIwMDQgUGVyIEZvZ2Vsc3Ryb20sIE9wc3ljb24gQUIKKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKK2FyZSBtZXQ6CisxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTCitPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCitBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkKK0RJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKK09SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKK0xJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKK09VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKK1NVQ0ggREFNQUdFLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NvcHlyaWdodCAoYykgMTk5NyBNYXJrIEJyaW5pY29tYmUKIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAKLUF1dGhvcjogQ2hyaXMgRy4gRGVtZXRyaW91CitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworYXJlIG1ldDoKKzEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKzMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQorICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgorICAgVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSBNYXJrIEJyaW5pY29tYmUKKzQuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgogCi1QZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5IGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgYW5kCi1pdHMgZG9jdW1lbnRhdGlvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCBib3RoIHRoZSBjb3B5cmlnaHQKLW5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBvZiB0aGUKLXNvZnR3YXJlLCBkZXJpdmF0aXZlIHdvcmtzIG9yIG1vZGlmaWVkIHZlcnNpb25zLCBhbmQgYW55IHBvcnRpb25zCi10aGVyZW9mLCBhbmQgdGhhdCBib3RoIG5vdGljZXMgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4KK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKK0FOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKK0FSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCitGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKK09SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKK0xJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKK09VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKK1NVQ0ggREFNQUdFLgogCi1DQVJORUdJRSBNRUxMT04gQUxMT1dTIEZSRUUgVVNFIE9GIFRISVMgU09GVFdBUkUgSU4gSVRTICJBUyBJUyIKLUNPTkRJVElPTi4gIENBUk5FR0lFIE1FTExPTiBESVNDTEFJTVMgQU5ZIExJQUJJTElUWSBPRiBBTlkgS0lORAotRk9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1DYXJuZWdpZSBNZWxsb24gcmVxdWVzdHMgdXNlcnMgb2YgdGhpcyBzb2Z0d2FyZSB0byByZXR1cm4gdG8KK0NvcHlyaWdodCAoYykgMTk5NyBNYXJrIEJyaW5pY29tYmUKK0NvcHlyaWdodCAoYykgMjAxMCBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QuCitBbGwgcmlnaHRzIHJlc2VydmVkLgogCi0gU29mdHdhcmUgRGlzdHJpYnV0aW9uIENvb3JkaW5hdG9yICBvciAgU29mdHdhcmUuRGlzdHJpYnV0aW9uQENTLkNNVS5FRFUKLSBTY2hvb2wgb2YgQ29tcHV0ZXIgU2NpZW5jZQotIENhcm5lZ2llIE1lbGxvbiBVbml2ZXJzaXR5Ci0gUGl0dHNidXJnaCBQQSAxNTIxMy0zODkwCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworYXJlIG1ldDoKKzEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKzMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQorICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgorICAgVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSBNYXJrIEJyaW5pY29tYmUKKzQuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgogCi1hbnkgaW1wcm92ZW1lbnRzIG9yIGV4dGVuc2lvbnMgdGhhdCB0aGV5IG1ha2UgYW5kIGdyYW50IENhcm5lZ2llIHRoZQotcmlnaHRzIHRvIHJlZGlzdHJpYnV0ZSB0aGVzZSBjaGFuZ2VzLgorVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCitJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKK0ZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCitEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCitIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorU1VDSCBEQU1BR0UuCiAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ29weXJpZ2h0IChjKSAxOTk3IE5pa2xhcyBIYWxscXZpc3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworYXJlIG1ldDoKKzEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKK0lNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKK09GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCitJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCitJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKK05PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKK0RBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCitUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NvcHlyaWdodCAoYykgMTk5NyBUb2RkIEMuIE1pbGxlciA8VG9kZC5NaWxsZXJAY291cnRlc2FuLmNvbT4KKworUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CitwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCitjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorCitUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKK1dJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKK01FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SCitBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCitXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KK0FDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCitPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NvcHlyaWdodCAoYykgMTk5NywgMTk5OCBUaGUgTmV0QlNEIEZvdW5kYXRpb24sIEluYy4KK0FsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1RoaXMgY29kZSB3YXMgY29udHJpYnV0ZWQgdG8gVGhlIE5ldEJTRCBGb3VuZGF0aW9uIGJ5IEtsYXVzIEtsZWluLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworYXJlIG1ldDoKKzEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKzMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQorICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgorICAgICAgIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE5ldEJTRAorICAgICAgIEZvdW5kYXRpb24sIEluYy4gYW5kIGl0cyBjb250cmlidXRvcnMuCis0LiBOZWl0aGVyIHRoZSBuYW1lIG9mIFRoZSBOZXRCU0QgRm91bmRhdGlvbiBub3IgdGhlIG5hbWVzIG9mIGl0cworICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE5FVEJTRCBGT1VOREFUSU9OLCBJTkMuIEFORCBDT05UUklCVVRPUlMKK2BgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRAorVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKK1BVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgRk9VTkRBVElPTiBPUiBDT05UUklCVVRPUlMKK0JFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKK0NPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCitTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKK0lOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCitDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKK1BPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NvcHlyaWdodCAoYykgMTk5NywgMTk5OCwgMTk5OSwgMjAwNCBUaGUgTmV0QlNEIEZvdW5kYXRpb24sIEluYy4KK0FsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1RoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gVGhlIE5ldEJTRCBGb3VuZGF0aW9uCitieSBMdWtlIE1ld2J1cm4uCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCithcmUgbWV0OgorMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKzIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCisgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6CisgICAgICAgVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgTmV0QlNECisgICAgICAgRm91bmRhdGlvbiwgSW5jLiBhbmQgaXRzIGNvbnRyaWJ1dG9ycy4KKzQuIE5laXRoZXIgdGhlIG5hbWUgb2YgVGhlIE5ldEJTRCBGb3VuZGF0aW9uIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgTkVUQlNEIEZPVU5EQVRJT04sIElOQy4gQU5EIENPTlRSSUJVVE9SUworYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVECitUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBGT1VOREFUSU9OIE9SIENPTlRSSUJVVE9SUworQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKK1NVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KK0NPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCitBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ29weXJpZ2h0IChjKSAxOTk3LCAxOTk4LCAxOTk5LCAyMDA0IFRoZSBOZXRCU0QgRm91bmRhdGlvbiwgSW5jLgorQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBUaGUgTmV0QlNEIEZvdW5kYXRpb24KK2J5IEx1a2UgTWV3YnVybjsgYW5kIGJ5IEphc29uIFIuIFRob3JwZS4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKK2FyZSBtZXQ6CisxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiszLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKKyAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKKyAgICAgICBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBOZXRCU0QKKyAgICAgICBGb3VuZGF0aW9uLCBJbmMuIGFuZCBpdHMgY29udHJpYnV0b3JzLgorNC4gTmVpdGhlciB0aGUgbmFtZSBvZiBUaGUgTmV0QlNEIEZvdW5kYXRpb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBORVRCU0QgRk9VTkRBVElPTiwgSU5DLiBBTkQgQ09OVFJJQlVUT1JTCitgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQKK1RPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCitQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEZPVU5EQVRJT04gT1IgQ09OVFJJQlVUT1JTCitCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCitDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCitJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKK0FSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCitQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDb3B5cmlnaHQgKGMpIDE5OTcsIDE5OTgsIDIwMDMgVGhlIE5ldEJTRCBGb3VuZGF0aW9uLCBJbmMuCitBbGwgcmlnaHRzIHJlc2VydmVkLgorCitUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIFRoZSBOZXRCU0QgRm91bmRhdGlvbgorYnkgSi5ULiBDb25rbGluLCBieSBOYXRoYW4gSi4gV2lsbGlhbXMsIGFuZCBieSBKYXNvbiBSLiBUaG9ycGUuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCithcmUgbWV0OgorMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKzIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCisgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6CisgICAgICAgVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgTmV0QlNECisgICAgICAgRm91bmRhdGlvbiwgSW5jLiBhbmQgaXRzIGNvbnRyaWJ1dG9ycy4KKzQuIE5laXRoZXIgdGhlIG5hbWUgb2YgVGhlIE5ldEJTRCBGb3VuZGF0aW9uIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgTkVUQlNEIEZPVU5EQVRJT04sIElOQy4gQU5EIENPTlRSSUJVVE9SUworYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVECitUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBGT1VOREFUSU9OIE9SIENPTlRSSUJVVE9SUworQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKK1NVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KK0NPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCitBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ29weXJpZ2h0IChjKSAxOTk3LCAyMDA1IFRvZGQgQy4gTWlsbGVyIDxUb2RkLk1pbGxlckBjb3VydGVzYW4uY29tPgorCitQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKK3B1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKK2NvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisKK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IKK0FOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKK1dIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKK09SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ29weXJpZ2h0IChjKSAxOTk4IFNvZnR3ZXlyIExMQy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKK3N0cnRva19yLCBmcm9tIEJlcmtlbGV5IHN0cnRvaworT2N0IDEzLCAxOTk4IGJ5IFdlcyBQZXRlcnMgPHdlc0Bzb2Z0d2V5ci5jb20+CisKK0NvcHlyaWdodCAoYykgMTk4OCwgMTk5MworICAgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCithcmUgbWV0OgorMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZXMsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlcywgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiszLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBTT0ZUV0VZUiBMTEMsIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMKK2BgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKK0xJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBCitQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBTT0ZUV0VZUiBMTEMsIFRIRQorUkVHRU5UUywgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCitTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQKK1RPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKK1BST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YKK0xJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCitORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKK1NPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NvcHlyaWdodCAoYykgMTk5OCBUaGUgTmV0QlNEIEZvdW5kYXRpb24sIEluYy4KK0FsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1RoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gVGhlIE5ldEJTRCBGb3VuZGF0aW9uCitieSBLbGF1cyBLbGVpbi4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKK2FyZSBtZXQ6CisxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiszLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKKyAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKKyAgICAgICBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBOZXRCU0QKKyAgICAgICBGb3VuZGF0aW9uLCBJbmMuIGFuZCBpdHMgY29udHJpYnV0b3JzLgorNC4gTmVpdGhlciB0aGUgbmFtZSBvZiBUaGUgTmV0QlNEIEZvdW5kYXRpb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBORVRCU0QgRk9VTkRBVElPTiwgSU5DLiBBTkQgQ09OVFJJQlVUT1JTCitgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQKK1RPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCitQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEZPVU5EQVRJT04gT1IgQ09OVFJJQlVUT1JTCitCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCitDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCitJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKK0FSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCitQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDb3B5cmlnaHQgKGMpIDE5OTggVG9kZCBDLiBNaWxsZXIgPFRvZGQuTWlsbGVyQGNvdXJ0ZXNhbi5jb20+CisKK1Blcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKworVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCitXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCitNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgorQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCitBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgorT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDb3B5cmlnaHQgKGMpIDE5OTggVG9kZCBDLiBNaWxsZXIgPFRvZGQuTWlsbGVyQGNvdXJ0ZXNhbi5jb20+CitBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworYXJlIG1ldDoKKzEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKzMuIFRoZSBuYW1lIG9mIHRoZSBhdXRob3IgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsCitJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkKK0FORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMCitUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCitFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCitQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsKK09SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLAorV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IKK09USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYKK0FEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NvcHlyaWdodCAoYykgMTk5OQorICAgRGF2aWQgRS4gTydCcmllbgorQ29weXJpZ2h0IChjKSAxOTg4LCAxOTkzCisgICBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKK2FyZSBtZXQ6CisxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiszLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKK0FOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKK0FSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKK0RBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCitPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKK0hPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCitMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCitPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCitTVUNIIERBTUFHRS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDb3B5cmlnaHQgKGMpIDE5OTkgS3VuZ2xpZ2EgVGVrbmlza2EgSMO2Z3Nrb2xhbgorKFJveWFsIEluc3RpdHV0ZSBvZiBUZWNobm9sb2d5LCBTdG9ja2hvbG0sIFN3ZWRlbikuCitBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworYXJlIG1ldDoKKworMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKworMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisKKzMuIE5laXRoZXIgdGhlIG5hbWUgb2YgS1RIIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUKKyAgIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBLVEggQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKK0VYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCitJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKK1BVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEtUSCBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFCitMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCitDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SCitCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwKK1dIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SCitPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ29weXJpZ2h0IChjKSAyMDAwIEJlbiBIYXJyaXMuCitDb3B5cmlnaHQgKEMpIDE5OTUsIDE5OTYsIDE5OTcsIGFuZCAxOTk4IFdJREUgUHJvamVjdC4KK0FsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCithcmUgbWV0OgorMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKzIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgcHJvamVjdCBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFBST0pFQ1QgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECitBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKK0lNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCitBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBQUk9KRUNUIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKK0ZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCitEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCitIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorU1VDSCBEQU1BR0UuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ29weXJpZ2h0IChjKSAyMDAwIFRoZSBOZXRCU0QgRm91bmRhdGlvbiwgSW5jLgorQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBUaGUgTmV0QlNEIEZvdW5kYXRpb24KK2J5IEF0c3VzaGkgT25vZS4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKK2FyZSBtZXQ6CisxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiszLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKKyAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKKyAgIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE5ldEJTRAorICAgRm91bmRhdGlvbiwgSW5jLiBhbmQgaXRzIGNvbnRyaWJ1dG9ycy4KKzQuIE5laXRoZXIgdGhlIG5hbWUgb2YgVGhlIE5ldEJTRCBGb3VuZGF0aW9uIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgTkVUQlNEIEZPVU5EQVRJT04sIElOQy4gQU5EIENPTlRSSUJVVE9SUworYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVECitUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBGT1VOREFUSU9OIE9SIENPTlRSSUJVVE9SUworQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKK1NVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KK0NPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCitBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ29weXJpZ2h0IChjKSAyMDAwIFRoZSBOZXRCU0QgRm91bmRhdGlvbiwgSW5jLgorQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBUaGUgTmV0QlNEIEZvdW5kYXRpb24KK2J5IERpZXRlciBCYXJvbiBhbmQgVGhvbWFzIEtsYXVzbmVyLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworYXJlIG1ldDoKKzEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgTkVUQlNEIEZPVU5EQVRJT04sIElOQy4gQU5EIENPTlRSSUJVVE9SUworYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVECitUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBGT1VOREFUSU9OIE9SIENPTlRSSUJVVE9SUworQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKK1NVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KK0NPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCitBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ29weXJpZ2h0IChjKSAyMDAxIENocmlzdG9waGVyIEdpbGJlcnQKK0FsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCithcmUgbWV0OgorMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKzIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorMy4gVGhlIG5hbWUgb2YgdGhlIGNvbXBhbnkgbm9yIHRoZSBuYW1lIG9mIHRoZSBhdXRob3IgbWF5IGJlIHVzZWQgdG8KKyAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljCisgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCitJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCitPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgorSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULAorSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKK1NFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKK0xJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKK09VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKK1NVQ0ggREFNQUdFLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NvcHlyaWdodCAoYykgMjAwMS0yMDAyIE9wc3ljb24gQUIgICh3d3cub3BzeWNvbi5zZSAvIHd3dy5vcHN5Y29uLmNvbSkKKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKK2FyZSBtZXQ6CisxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTCitPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCitBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkKK0RJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKK09SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKK0xJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKK09VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKK1NVQ0ggREFNQUdFLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NvcHlyaWdodCAoYykgMjAwMS0yMDAyIE9wc3ljb24gQUIgICh3d3cub3BzeWNvbi5zZSAvIHd3dy5vcHN5Y29uLmNvbSkKKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKK2FyZSBtZXQ6CisxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiszLiBOZWl0aGVyIHRoZSBuYW1lIG9mIE9wc3ljb24gQUIgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUworT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKK1dBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZCitESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKK0RBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCitPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKK0hPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCitMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCitPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCitTVUNIIERBTUFHRS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDb3B5cmlnaHQgKGMpIDIwMDIgRGFuaWVsIEhhcnRtZWllcgorQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKK2FyZSBtZXQ6CisKKyAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorICAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCitMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKK0NPUFlSSUdIVCBIT0xERVJTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKK0JVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKK0xPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKK0NBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4KK0FOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ29weXJpZ2h0IChjKSAyMDAyIE1hcmMgRXNwaWUuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCithcmUgbWV0OgorMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKzIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPUEVOQlNEIFBST0pFQ1QgQU5EIENPTlRSSUJVVE9SUworYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCitBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPUEVOQlNECitQUk9KRUNUIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCitEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKK1RIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyhJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDb3B5cmlnaHQgKGMpIDIwMDIgT3BzeWNvbiBBQiAgKHd3dy5vcHN5Y29uLnNlIC8gd3d3Lm9wc3ljb24uY29tKQorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworYXJlIG1ldDoKKzEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKzMuIE5laXRoZXIgdGhlIG5hbWUgb2YgT3BzeWNvbiBBQiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTCitPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCitBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkKK0RJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKK09SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKK0xJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKK09VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKK1NVQ0ggREFNQUdFLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NvcHlyaWdodCAoYykgMjAwMiBUaGUgTmV0QlNEIEZvdW5kYXRpb24sIEluYy4KK0FsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1RoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gVGhlIE5ldEJTRCBGb3VuZGF0aW9uCitieSBDaHJpc3RvcyBab3VsYXMuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCithcmUgbWV0OgorMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKzIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCisgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6CisgICAgICAgVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgTmV0QlNECisgICAgICAgRm91bmRhdGlvbiwgSW5jLiBhbmQgaXRzIGNvbnRyaWJ1dG9ycy4KKzQuIE5laXRoZXIgdGhlIG5hbWUgb2YgVGhlIE5ldEJTRCBGb3VuZGF0aW9uIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgTkVUQlNEIEZPVU5EQVRJT04sIElOQy4gQU5EIENPTlRSSUJVVE9SUworYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVECitUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBGT1VOREFUSU9OIE9SIENPTlRSSUJVVE9SUworQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKK1NVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KK0NPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCitBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ29weXJpZ2h0IChjKSAyMDAyIFRpbSBKLiBSb2JiaW5zCitBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworYXJlIG1ldDoKKzEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCitJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKK0ZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCitEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCitIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorU1VDSCBEQU1BR0UuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ29weXJpZ2h0IChjKSAyMDAyIFRvZGQgQy4gTWlsbGVyIDxUb2RkLk1pbGxlckBjb3VydGVzYW4uY29tPgorCitQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKK3B1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKK2NvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisKK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IKK0FOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKK1dIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKK09SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisKK1Nwb25zb3JlZCBpbiBwYXJ0IGJ5IHRoZSBEZWZlbnNlIEFkdmFuY2VkIFJlc2VhcmNoIFByb2plY3RzCitBZ2VuY3kgKERBUlBBKSBhbmQgQWlyIEZvcmNlIFJlc2VhcmNoIExhYm9yYXRvcnksIEFpciBGb3JjZQorTWF0ZXJpZWwgQ29tbWFuZCwgVVNBRiwgdW5kZXIgYWdyZWVtZW50IG51bWJlciBGMzk1MDItOTktMS0wNTEyLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NvcHlyaWdodCAoYykgMjAwMi0yMDAzIE9wc3ljb24gQUIgICh3d3cub3BzeWNvbi5zZSAvIHd3dy5vcHN5Y29uLmNvbSkKKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKK2FyZSBtZXQ6CisxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTCitPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCitBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkKK0RJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKK09SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKK0xJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKK09VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKK1NVQ0ggREFNQUdFLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NvcHlyaWdodCAoYykgMjAwMyBDb25zdGFudGluIFMuIFN2aW50c29mZiA8a29zdGlrQGljbHViLm5zdS5ydT4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKK2FyZSBtZXQ6CisxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiszLiBUaGUgbmFtZXMgb2YgdGhlIGF1dGhvcnMgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZQorICAgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuCisgICBwZXJtaXNzaW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECitBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKK0lNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCitBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKK0RBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCitPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKK0hPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCitMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCitPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCitTVUNIIERBTUFHRS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBDb3B5cmlnaHQgKGMpIDIwMDMgTmV0d29ya3MgQXNzb2NpYXRlcyBUZWNobm9sb2d5LCBJbmMuCiBBbGwgcmlnaHRzIHJlc2VydmVkLgpAQCAtMzc2LDcgKzM0MDEsMTAzMCBAQAogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiAKK09VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKIFNVQ0ggREFNQUdFLgogCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NvcHlyaWdodCAoYykgMjAwMyBUb2RkIEMuIE1pbGxlciA8VG9kZC5NaWxsZXJAY291cnRlc2FuLmNvbT4KKworUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CitwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCitjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorCitUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKK1dJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKK01FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SCitBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCitXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KK0FDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCitPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorCitTcG9uc29yZWQgaW4gcGFydCBieSB0aGUgRGVmZW5zZSBBZHZhbmNlZCBSZXNlYXJjaCBQcm9qZWN0cworQWdlbmN5IChEQVJQQSkgYW5kIEFpciBGb3JjZSBSZXNlYXJjaCBMYWJvcmF0b3J5LCBBaXIgRm9yY2UKK01hdGVyaWVsIENvbW1hbmQsIFVTQUYsIHVuZGVyIGFncmVlbWVudCBudW1iZXIgRjM5NTAyLTk5LTEtMDUxMi4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDb3B5cmlnaHQgKGMpIDIwMDQgVGhlIE5ldEJTRCBGb3VuZGF0aW9uLCBJbmMuCitBbGwgcmlnaHRzIHJlc2VydmVkLgorCitUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIFRoZSBOZXRCU0QgRm91bmRhdGlvbgorYnkgQ2hyaXN0b3MgWm91bGFzLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworYXJlIG1ldDoKKzEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKzMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQorICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgorICAgICAgIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE5ldEJTRAorICAgICAgIEZvdW5kYXRpb24sIEluYy4gYW5kIGl0cyBjb250cmlidXRvcnMuCis0LiBOZWl0aGVyIHRoZSBuYW1lIG9mIFRoZSBOZXRCU0QgRm91bmRhdGlvbiBub3IgdGhlIG5hbWVzIG9mIGl0cworICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE5FVEJTRCBGT1VOREFUSU9OLCBJTkMuIEFORCBDT05UUklCVVRPUlMKK2BgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRAorVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKK1BVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgRk9VTkRBVElPTiBPUiBDT05UUklCVVRPUlMKK0JFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKK0NPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCitTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKK0lOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCitDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKK1BPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NvcHlyaWdodCAoYykgMjAwNCBieSBJbnRlcm5ldCBTeXN0ZW1zIENvbnNvcnRpdW0sIEluYy4gKCJJU0MiKQorQ29weXJpZ2h0IChjKSAxOTk1LDE5OTkgYnkgSW50ZXJuZXQgU29mdHdhcmUgQ29uc29ydGl1bS4KKworUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CitwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCitjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorCitUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgSVNDIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiAgSU4gTk8gRVZFTlQgU0hBTEwgSVNDIEJFIExJQUJMRSBGT1IKK0FOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKK1dIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQKK09GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ29weXJpZ2h0IChjKSAyMDA0IGJ5IEludGVybmV0IFN5c3RlbXMgQ29uc29ydGl1bSwgSW5jLiAoIklTQyIpCitDb3B5cmlnaHQgKGMpIDE5OTUtMTk5OSBieSBJbnRlcm5ldCBTb2Z0d2FyZSBDb25zb3J0aXVtCisKK1Blcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKworVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIElTQyBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKK1dJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKK01FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gIElOIE5PIEVWRU5UIFNIQUxMIElTQyBCRSBMSUFCTEUgRk9SCitBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCitXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KK0FDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUCitPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NvcHlyaWdodCAoYykgMjAwNCBieSBJbnRlcm5ldCBTeXN0ZW1zIENvbnNvcnRpdW0sIEluYy4gKCJJU0MiKQorQ29weXJpZ2h0IChjKSAxOTk1LTE5OTkgYnkgSW50ZXJuZXQgU29mdHdhcmUgQ29uc29ydGl1bS4KKworUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CitwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCitjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorCitUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgSVNDIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiAgSU4gTk8gRVZFTlQgU0hBTEwgSVNDIEJFIExJQUJMRSBGT1IKK0FOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKK1dIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQKK09GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ29weXJpZ2h0IChjKSAyMDA0IGJ5IEludGVybmV0IFN5c3RlbXMgQ29uc29ydGl1bSwgSW5jLiAoIklTQyIpCitDb3B5cmlnaHQgKGMpIDE5OTYsMTk5OSBieSBJbnRlcm5ldCBTb2Z0d2FyZSBDb25zb3J0aXVtLgorCitQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKK3B1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKK2NvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisKK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBJU0MgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCitXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCitNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuICBJTiBOTyBFVkVOVCBTSEFMTCBJU0MgQkUgTElBQkxFIEZPUgorQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCitBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVAorT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDb3B5cmlnaHQgKGMpIDIwMDQgYnkgSW50ZXJuZXQgU3lzdGVtcyBDb25zb3J0aXVtLCBJbmMuICgiSVNDIikKK0NvcHlyaWdodCAoYykgMTk5Ni0xOTk5IGJ5IEludGVybmV0IFNvZnR3YXJlIENvbnNvcnRpdW0KKworUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CitwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCitjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorCitUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgSVNDIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiAgSU4gTk8gRVZFTlQgU0hBTEwgSVNDIEJFIExJQUJMRSBGT1IKK0FOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKK1dIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQKK09GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ29weXJpZ2h0IChjKSAyMDA0IGJ5IEludGVybmV0IFN5c3RlbXMgQ29uc29ydGl1bSwgSW5jLiAoIklTQyIpCitDb3B5cmlnaHQgKGMpIDE5OTYtMTk5OSBieSBJbnRlcm5ldCBTb2Z0d2FyZSBDb25zb3J0aXVtLgorCitQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKK3B1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKK2NvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisKK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBJU0MgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCitXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCitNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuICBJTiBOTyBFVkVOVCBTSEFMTCBJU0MgQkUgTElBQkxFIEZPUgorQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCitBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVAorT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDb3B5cmlnaHQgKGMpIDIwMDQgYnkgSW50ZXJuZXQgU3lzdGVtcyBDb25zb3J0aXVtLCBJbmMuICgiSVNDIikKK0NvcHlyaWdodCAoYykgMTk5NywxOTk5IGJ5IEludGVybmV0IFNvZnR3YXJlIENvbnNvcnRpdW0uCisKK1Blcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKworVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIElTQyBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKK1dJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKK01FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gIElOIE5PIEVWRU5UIFNIQUxMIElTQyBCRSBMSUFCTEUgRk9SCitBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCitXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KK0FDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUCitPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NvcHlyaWdodCAoYykgMjAwNCBieSBJbnRlcm5ldCBTeXN0ZW1zIENvbnNvcnRpdW0sIEluYy4gKCJJU0MiKQorQ29weXJpZ2h0IChjKSAxOTk5IGJ5IEludGVybmV0IFNvZnR3YXJlIENvbnNvcnRpdW0uCisKK1Blcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKworVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIElTQyBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKK1dJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKK01FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gIElOIE5PIEVWRU5UIFNIQUxMIElTQyBCRSBMSUFCTEUgRk9SCitBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCitXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KK0FDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUCitPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NvcHlyaWdodCAoYykgMjAwNCBieSBJbnRlcm5ldCBTeXN0ZW1zIENvbnNvcnRpdW0sIEluYy4gKCJJU0MiKQorUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2LTE5OTkgYnkgSW50ZXJuZXQgU29mdHdhcmUgQ29uc29ydGl1bS4KKworUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CitwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCitjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorCitUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgSVNDIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiAgSU4gTk8gRVZFTlQgU0hBTEwgSVNDIEJFIExJQUJMRSBGT1IKK0FOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKK1dIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQKK09GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ29weXJpZ2h0IChjKSAyMDA1IFRpbSBKLiBSb2JiaW5zLgorQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKK2FyZSBtZXQ6CisxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKK0FOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKK0FSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCitGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKK09SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKK0xJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKK09VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKK1NVQ0ggREFNQUdFLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NvcHlyaWdodCAoYykgMjAwNSBieSBJbnRlcm5ldCBTeXN0ZW1zIENvbnNvcnRpdW0sIEluYy4gKCJJU0MiKQorQ29weXJpZ2h0IChjKSAxOTk1LTE5OTkgYnkgSW50ZXJuZXQgU29mdHdhcmUgQ29uc29ydGl1bQorCitQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKK3B1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKK2NvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisKK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBJU0MgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCitXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCitNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuICBJTiBOTyBFVkVOVCBTSEFMTCBJU0MgQkUgTElBQkxFIEZPUgorQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCitBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVAorT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDb3B5cmlnaHQgKGMpIDIwMDctMjAwOCAgTWljaGFlbCBHIFNjaHdlcm4KKworVGhpcyBzb2Z0d2FyZSBvcmlnaW5hbGx5IGRlcml2ZWQgZnJvbSBQYXVsIFNoZWVyJ3MgcGl2b3RhbF9nbXRpbWVfci5jLgorCitUaGUgTUlUIExpY2Vuc2U6CisKK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKK29mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCitpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCit0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCitjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKK2Z1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKK1RoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCithbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKworVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKK0lNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCitBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCitMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgorVEhFIFNPRlRXQVJFLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NvcHlyaWdodCAoYykgMjAwNy0yMDA4ICBNaWNoYWVsIEcgU2Nod2VybgorCitUaGlzIHNvZnR3YXJlIG9yaWdpbmFsbHkgZGVyaXZlZCBmcm9tIFBhdWwgU2hlZXIncyBwaXZvdGFsX2dtdGltZV9yLmMuCisKK1RoZSBNSVQgTGljZW5zZToKKworUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKK2luIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKK3RvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKK2NvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KK2FsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorCitUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCitGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKK0FVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKK0xJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCitPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCitUSEUgU09GVFdBUkUuCisKK09yaWdpbjogaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL3kyMDM4CitNb2RpZmllZCBmb3IgQmlvbmljIGJ5IHRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDb3B5cmlnaHQgKGMpIDIwMDggIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdCAocXVlcnkgaWQgcmFuZG9taXphdGlvbikKK0NvcHlyaWdodCAoYykgMTk4NSwgMTk5MworICAgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCithcmUgbWV0OgorMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKzIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCisgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6CisgICAgVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgVW5pdmVyc2l0eSBvZgorICAgIENhbGlmb3JuaWEsIEJlcmtlbGV5IGFuZCBpdHMgY29udHJpYnV0b3JzLgorNC4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECitBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKK0lNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCitBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKK0ZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCitEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCitIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorU1VDSCBEQU1BR0UuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ29weXJpZ2h0IChjKSAyMDA4IFRvZGQgQy4gTWlsbGVyIDxtaWxsZXJ0QG9wZW5ic2Qub3JnPgorCitQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKK3B1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKK2NvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisKK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IKK0FOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKK1dIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKK09SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ29weXJpZ2h0IChjKSAyMDA5CisgICAgIE1JUFMgVGVjaG5vbG9naWVzLCBJbmMuLCBDYWxpZm9ybmlhLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworYXJlIG1ldDoKKzEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKzMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIE1JUFMgVGVjaG5vbG9naWVzLCBJbmMuLCBub3IgdGhlIG5hbWVzIG9mIGl0cworICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAgIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE1JUFMgVEVDSE5PTE9HSUVTLCBJTkMuIGBgQVMgSVMnJyBBTkQKK0FOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKK0FSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE1JUFMgVEVDSE5PTE9HSUVTLCBJTkMuIEJFIExJQUJMRQorRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKK0RBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCitPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKK0hPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCitMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCitPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCitTVUNIIERBTUFHRS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDb3B5cmlnaHQgKGMpIDIwMDkgRGF2aWQgU2NodWx0eiA8ZGFzQEZyZWVCU0Qub3JnPgorQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKK2FyZSBtZXQ6CisxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKK0FOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKK0FSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCitGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKK09SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKK0xJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKK09VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKK1NVQ0ggREFNQUdFLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NvcHlyaWdodCAoYykgMjAwOSBUaGUgTmV0QlNEIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBUaGUgTmV0QlNEIEZvdW5kYXRpb24KK2J5IFJveSBNYXJwbGVzLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworYXJlIG1ldDoKKzEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKK0lNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKK09GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCitJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCitJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKK05PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKK0RBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCitUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NvcHlyaWdodCAoYykgMjAxMCBNSVBTIFRlY2hub2xvZ2llcywgSW5jLgorCitBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworYXJlIG1ldDoKKworICAgIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICAgIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgICAgICAgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoCisgICAgICAgdGhlIGRpc3RyaWJ1dGlvbi4KKyAgICBOZWl0aGVyIHRoZSBuYW1lIG9mIE1JUFMgVGVjaG5vbG9naWVzIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAgICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAgICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCitMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKK0EgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCitPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKK1NQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKK0xJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCitUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKK09GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ29weXJpZ2h0IChjKSAyMDEwLCAyMDExIEludGVsIENvcnBvcmF0aW9uCitBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorCisgICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorCisgICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKworICAgTmVpdGhlciB0aGUgbmFtZSBvZiBJbnRlbCBDb3Jwb3JhdGlvbiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKK0FOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECitXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCitESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCitBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyhJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKK0xPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyhJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCitTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDb3B5cmlnaHQgKGMpIDIwMTAsIEludGVsIENvcnBvcmF0aW9uCitBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorCisgICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorCisgICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKworICAgTmVpdGhlciB0aGUgbmFtZSBvZiBJbnRlbCBDb3Jwb3JhdGlvbiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKK0FOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECitXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCitESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCitBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyhJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKK0xPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyhJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCitTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDb3B5cmlnaHQgKGMpIDIwMTEgSW50ZWwgQ29ycG9yYXRpb24KK0FsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisKKyAgIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisKKyAgIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCisgICBOZWl0aGVyIHRoZSBuYW1lIG9mIEludGVsIENvcnBvcmF0aW9uIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKK1dBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKK0RJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKK0FOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCitBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKK1NPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NvcHlyaWdodCAoYykgMjAxMSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CitDb3B5cmlnaHQgKGMpIDIwMDggQVJNIEx0ZAorQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKK2FyZSBtZXQ6CisxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiszLiBUaGUgbmFtZSBvZiB0aGUgY29tcGFueSBtYXkgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlCisgICBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4KKyAgIHBlcm1pc3Npb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVJNIExURCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQKK1dBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCitNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgorSU4gTk8gRVZFTlQgU0hBTEwgQVJNIExURCBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVECitUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCitQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GCitMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORworTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCitTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDb3B5cmlnaHQgKGMpIDIwMTEsIEludGVsIENvcnBvcmF0aW9uCitBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorCisgICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorCisgICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKworICAgTmVpdGhlciB0aGUgbmFtZSBvZiBJbnRlbCBDb3Jwb3JhdGlvbiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKK0FOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECitXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCitESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCitBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyhJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKK0xPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyhJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCitTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDb3B5cmlnaHQgKGMpIDIwMTEsIFZNd2FyZSwgSW5jLgorQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAgIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAgIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFZNd2FyZSwgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAgICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICAgICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKK0FSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBWTVdBUkUsIElOQy4gT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKK0FOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECitPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCitUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NvcHlyaWdodCAoYykgMjAxMiBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CitBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworYXJlIG1ldDoKK1JlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCitSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgICBkaXN0cmlidXRpb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCitMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKK0NPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKK0lOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCitCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKK09GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCitPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKK1NVQ0ggREFNQUdFLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NvcHlyaWdodCAoYykgMjAxMyBBUk0gTHRkCitBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworYXJlIG1ldDoKKzEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKzMuIFRoZSBuYW1lIG9mIHRoZSBjb21wYW55IG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUKKyAgIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbgorICAgcGVybWlzc2lvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUk0gTFREIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRAorV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKK01FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCitJTiBOTyBFVkVOVCBTSEFMTCBBUk0gTFREIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCitTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQKK1RPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKK1BST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YKK0xJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCitORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKK1NPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NvcHlyaWdodCAoYykgMjAxMywgTGluYXJvIExpbWl0ZWQKKyAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKKyAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgICBhcmUgbWV0OgorCisgICAgIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisKKyAgICAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisKKyAgICAgTmVpdGhlciB0aGUgbmFtZSBvZiBMaW5hcm8gTGltaXRlZCBub3IgdGhlIG5hbWVzIG9mIGl0cworICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKKyAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAgICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgICBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAgIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgICBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgICBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgICBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAgIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICAgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICAgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgICBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NvcHlyaWdodCAoYykxOTk5IENpdHJ1cyBQcm9qZWN0LAorQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKK2FyZSBtZXQ6CisxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKK0FOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKK0FSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCitGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKK09SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKK0xJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKK09VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKK1NVQ0ggREFNQUdFLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NvcHlyaWdodCAoYykyMDAxIENpdHJ1cyBQcm9qZWN0LAorQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKK2FyZSBtZXQ6CisxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKK0FOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKK0FSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCitGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKK09SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKK0xJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKK09VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKK1NVQ0ggREFNQUdFLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NvcHlyaWdodCAxOTk3IE5pZWxzIFByb3ZvcyA8cHJvdm9zQHBoeXNuZXQudW5pLWhhbWJ1cmcuZGU+CitDb3B5cmlnaHQgMjAwOCBEYW1pZW4gTWlsbGVyIDxkam1Ab3BlbmJzZC5vcmc+CitDb3B5cmlnaHQgMjAwOCBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QgKHRocmVhZC1zYWZldHkpCitBbGwgcmlnaHRzIHJlc2VydmVkLgorCitUaGVvIGRlIFJhYWR0IDxkZXJhYWR0QG9wZW5ic2Qub3JnPiBjYW1lIHVwIHdpdGggdGhlIGlkZWEgb2YgdXNpbmcKK3N1Y2ggYSBtYXRoZW1hdGljYWwgc3lzdGVtIHRvIGdlbmVyYXRlIG1vcmUgcmFuZG9tICh5ZXQgbm9uLXJlcGVhdGluZykKK2lkcyB0byBzb2x2ZSB0aGUgcmVzb2x2ZXIvbmFtZWQgcHJvYmxlbS4gIEJ1dCBOaWVscyBkZXNpZ25lZCB0aGUKK2FjdHVhbCBzeXN0ZW0gYmFzZWQgb24gdGhlIGNvbnN0cmFpbnRzLgorCitMYXRlciBtb2RpZmllZCBieSBEYW1pZW4gTWlsbGVyIHRvIHdyYXAgdGhlIExDRyBvdXRwdXQgaW4gYSAxNS1iaXQKK3Blcm11dGF0aW9uIGdlbmVyYXRvciBiYXNlZCBvbiBhIEx1YnktUmFja29mZiBibG9jayBjaXBoZXIuIFRoaXMKK2Vuc3VyZXMgdGhlIG91dHB1dCBpcyBub24tcmVwZWF0aW5nIGFuZCBwcmVzZXJ2ZXMgdGhlIE1TQiB0d2lkZGxlCit0cmljaywgYnV0IG1ha2VzIGl0IG1vcmUgcmVzaXN0YW50IHRvIExDRyBwcmVkaWN0aW9uLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworYXJlIG1ldDoKKzEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKK0lNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKK09GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCitJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCitJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKK05PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKK0RBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCitUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NvcHlyaWdodCAyMDAwIERhdmlkIEUuIE8nQnJpZW4sIEpvaG4gRC4gUG9sc3RyYS4KK0FsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCithcmUgbWV0OgorMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKzIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUgorSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUworT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KK0lOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKK0lOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCitUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKK1RISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ29weXJpZ2h0IDIwMDYsIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAgIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAgIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQorICAgICAgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAgICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEdvb2dsZSBJbmMuIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKK0lNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKK01FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PCitFVkVOVCBTSEFMTCBHb29nbGUgSW5jLiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7CitPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwKK1dIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SCitPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGCitBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDb3B5cmlnaHQgMjAwNi0yMDA4LCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgICBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkKKyAgICAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgICAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBHb29nbGUgSW5jLiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCitJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCitNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTworRVZFTlQgU0hBTEwgR29vZ2xlIEluYy4gQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKK1NQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKK1BST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOworT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksCitXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUgorT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRgorQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ29weXJpZ2h0IDIwMDggIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdCAoc291cmNlIHBvcnQgcmFuZG9taXphdGlvbikKK0NvcHlyaWdodCAoYykgMTk4NSwgMTk4OSwgMTk5MworICAgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCithcmUgbWV0OgorMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKzIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCisgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6CisgICAgVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgVW5pdmVyc2l0eSBvZgorICAgIENhbGlmb3JuaWEsIEJlcmtlbGV5IGFuZCBpdHMgY29udHJpYnV0b3JzLgorNC4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECitBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKK0lNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCitBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKK0ZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCitEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCitIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorU1VDSCBEQU1BR0UuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTkzIGJ5IERpZ2l0YWwgRXF1aXBtZW50IENvcnBvcmF0aW9uLgorCitQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKK3B1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKK2NvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0Cit0aGUgbmFtZSBvZiBEaWdpdGFsIEVxdWlwbWVudCBDb3Jwb3JhdGlvbiBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvcgorcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gZGlzdHJpYnV0aW9uIG9mIHRoZSBkb2N1bWVudCBvciBzb2Z0d2FyZSB3aXRob3V0CitzcGVjaWZpYywgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLgorCitUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgRElHSVRBTCBFUVVJUE1FTlQgQ09SUC4gRElTQ0xBSU1TIEFMTAorV0FSUkFOVElFUyBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFLCBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUworT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiAgIElOIE5PIEVWRU5UIFNIQUxMIERJR0lUQUwgRVFVSVBNRU5UCitDT1JQT1JBVElPTiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMCitEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IKK1BST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTCitBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMKK1NPRlRXQVJFLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1BvcnRpb25zIENvcHlyaWdodCAoYykgMTk5NSBieSBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzLCBJbmMuCisKK0ludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMsIEluYy4gKGhlcmVpbmFmdGVyIGNhbGxlZCBJQk0pIGdyYW50cworcGVybWlzc2lvbiB1bmRlciBpdHMgY29weXJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcworU29mdHdhcmUgd2l0aCBvciB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQKK2FsbCBwYXJhZ3JhcGhzIG9mIHRoaXMgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCB0aGUgbmFtZSBvZiBJQk0KK25vdCBiZSB1c2VkIGluIGNvbm5lY3Rpb24gd2l0aCB0aGUgbWFya2V0aW5nIG9mIGFueSBwcm9kdWN0IGluY29ycG9yYXRpbmcKK3RoZSBTb2Z0d2FyZSBvciBtb2RpZmljYXRpb25zIHRoZXJlb2YsIHdpdGhvdXQgc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IKK3Blcm1pc3Npb24uCisKK1RvIHRoZSBleHRlbnQgaXQgaGFzIGEgcmlnaHQgdG8gZG8gc28sIElCTSBncmFudHMgYW4gaW1tdW5pdHkgZnJvbSBzdWl0Cit1bmRlciBpdHMgcGF0ZW50cywgaWYgYW55LCBmb3IgdGhlIHVzZSwgc2FsZSBvciBtYW51ZmFjdHVyZSBvZiBwcm9kdWN0cyB0bwordGhlIGV4dGVudCB0aGF0IHN1Y2ggcHJvZHVjdHMgYXJlIHVzZWQgZm9yIHBlcmZvcm1pbmcgRG9tYWluIE5hbWUgU3lzdGVtCitkeW5hbWljIHVwZGF0ZXMgaW4gVENQL0lQIG5ldHdvcmtzIGJ5IG1lYW5zIG9mIHRoZSBTb2Z0d2FyZS4gIE5vIGltbXVuaXR5IGlzCitncmFudGVkIGZvciBhbnkgcHJvZHVjdCBwZXIgc2Ugb3IgZm9yIGFueSBvdGhlciBmdW5jdGlvbiBvZiBhbnkgcHJvZHVjdC4KKworVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIEFORCBJQk0gRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTLAorSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBCitQQVJUSUNVTEFSIFBVUlBPU0UuICBJTiBOTyBFVkVOVCBTSEFMTCBJQk0gQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwKK0RJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIEFSSVNJTkcKK09VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOCitJRiBJQk0gSVMgQVBQUklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitQb3J0aW9ucyBDb3B5cmlnaHQoQykgMTk5NSwgSmFzb24gRG93bnMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworYXJlIG1ldDoKKzEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SKFMpIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MKK09SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECitXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCitESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUihTKSBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsCitJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyhJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKK0NBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorU1VDSCBEQU1BR0UuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGF1dGhvciBvZiB0aGlzIHNvZnR3YXJlIGlzIERhdmlkIE0uIEdheS4KKworQ29weXJpZ2h0IChjKSAxOTkxIGJ5IEFUJlQuCisKK1Blcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorcHVycG9zZSB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGlzIGVudGlyZSBub3RpY2UKK2lzIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb2YgYW55IHNvZnR3YXJlIHdoaWNoIGlzIG9yIGluY2x1ZGVzIGEgY29weQorb3IgbW9kaWZpY2F0aW9uIG9mIHRoaXMgc29mdHdhcmUgYW5kIGluIGFsbCBjb3BpZXMgb2YgdGhlIHN1cHBvcnRpbmcKK2RvY3VtZW50YXRpb24gZm9yIHN1Y2ggc29mdHdhcmUuCisKK1RISVMgU09GVFdBUkUgSVMgQkVJTkcgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVECitXQVJSQU5UWS4gIElOIFBBUlRJQ1VMQVIsIE5FSVRIRVIgVEhFIEFVVEhPUiBOT1IgQVQmVCBNQUtFUyBBTlkKK1JFUFJFU0VOVEFUSU9OIE9SIFdBUlJBTlRZIE9GIEFOWSBLSU5EIENPTkNFUk5JTkcgVEhFIE1FUkNIQU5UQUJJTElUWQorT0YgVEhJUyBTT0ZUV0FSRSBPUiBJVFMgRklUTkVTUyBGT1IgQU5ZIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCmRpZmYgLS1naXQgYS9saWJjL1JFQURNRSBiL2xpYmMvUkVBRE1FCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkOTJkODVkLi4wMDAwMDAwCi0tLSBhL2xpYmMvUkVBRE1FCisrKyAvZGV2L251bGwKQEAgLTEsNTQgKzAsMCBAQAotV2VsY29tZSB0byBCaW9uaWMsIEFuZHJvaWQncyBzbWFsbCBhbmQgY3VzdG9tIEMgbGlicmFyeSBmb3IgdGhlIEFuZHJvaWQKLXBsYXRmb3JtLgotCi1CaW9uaWMgaXMgbWFpbmx5IGEgcG9ydCBvZiB0aGUgQlNEIEMgbGlicmFyeSB0byBvdXIgTGludXgga2VybmVsIHdpdGggdGhlCi1mb2xsb3dpbmcgYWRkaXRpb25zL2NoYW5nZXM6Ci0KLS0gbm8gc3VwcG9ydCBmb3IgbG9jYWxlcwotLSBubyBzdXBwb3J0IGZvciB3aWRlIGNoYXJzIChpLmUuIG11bHRpLWJ5dGUgY2hhcmFjdGVycykKLS0gaXRzIG93biBzbWFsbGlzaCBpbXBsZW1lbnRhdGlvbiBvZiBwdGhyZWFkcyBiYXNlZCBvbiBMaW51eCBmdXRleGVzCi0tIHN1cHBvcnQgZm9yIHg4NiwgQVJNIGFuZCBBUk0gdGh1bWIgQ1BVIGluc3RydWN0aW9uIHNldHMgYW5kIGtlcm5lbCBpbnRlcmZhY2VzCi0KLUJpb25pYyBpcyByZWxlYXNlZCB1bmRlciB0aGUgc3RhbmRhcmQgMy1jbGF1c2UgQlNEIExpY2Vuc2UKLQotQmlvbmljIGRvZXNuJ3Qgd2FudCB0byBpbXBsZW1lbnQgYWxsIGZlYXR1cmVzIG9mIGEgdHJhZGl0aW9uYWwgQyBsaWJyYXJ5LCB3ZSBvbmx5Ci1hZGQgZmVhdHVyZXMgdG8gaXQgYXMgd2UgbmVlZCB0aGVtLCBhbmQgd2UgdHJ5IHRvIGtlZXAgdGhpbmdzIGFzIHNpbXBsZSBhbmQgc21hbGwKLWFzIHBvc3NpYmxlLiBPdXIgZ29hbCBpcyBub3QgdG8gc3VwcG9ydCBzY2FsaW5nIHRvIHRob3VzYW5kcyBvZiBjb25jdXJyZW50IHRocmVhZHMKLW9uIG11bHRpLXByb2Nlc3NvcnMgbWFjaGluZXM7IHdlJ3JlIHJ1bm5pbmcgdGhpcyBvbiBjZWxsLXBob25lcywgZGFtbml0ICEhCi0KLU5vdGUgdGhhdCBCaW9uaWMgZG9lc24ndCBwcm92aWRlIGEgbGlidGhyZWFkX2RiIG9yIGEgbGlibSBpbXBsZW1lbnRhdGlvbi4KLQotCi1BZGRpbmcgbmV3IHN5c2NhbGxzOgotPT09PT09PT09PT09PT09PT09PT0KLQotQmlvbmljIHByb3ZpZGVzIHRoZSBnZW5zeXNjYWxscy5weSBQeXRob24gc2NyaXB0IHRvIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGUgc3lzY2FsbAotc3R1YnMgZnJvbSB0aGUgbGlzdCBkZWZpbmVkIGluIHRoZSBmaWxlIFNZU0NBTExTLlRYVC4gWW91IGNhbiB0aHVzIGFkZCBhIG5ldyBzeXNjYWxsCi1ieSBkb2luZyB0aGUgZm9sbG93aW5nOgotCi0tIGVkaXQgU1lTQ0FMTFMuVFhUCi0tIGFkZCBhIG5ldyBsaW5lIGRlc2NyaWJpbmcgeW91ciBzeXNjYWxsLCBpdCBzaG91bGQgbG9vayBsaWtlOgotCi0gICByZXR1cm5fdHlwZSAgc3lzY2FsbF9uYW1lKHBhcmFtZXRlcnMpICAgIHN5c2NhbGxfbnVtYmVyCi0KLS0gaW4gdGhlIGV2ZW50IHdoZXJlIHlvdSB3YW50IHRvIGRpZmZlcmVudGlhdGUgdGhlIHN5c2NhbGwgZnVuY3Rpb24gZnJvbSBpdHMgZW50cnkgbmFtZSwKLSAgdXNlIHRoZSBhbHRlcm5hdGU6Ci0KLSAgIHJldHVybl90eXBlICBmdW5jbmFtZTpzeXNjYWxsX25hbWUocGFyYW1ldGVycykgIHN5c2NhbGxfbnVtYmVyCi0KLS0gYWRkaXRpb25hbGx5LCBpZiB0aGUgc3lzY2FsbCBudW1iZXIgaXMgZGlmZmVyZW50IGJldHdlZW4gQVJNIGFuZCB4ODYsIHVzZToKLQotICAgcmV0dXJuX3R5cGUgIGZ1bmNuYW1lWzpzeXNjYWxsX25hbWVdKHBhcmFtZXRlcnMpICAgYXJtX251bWJlcix4ODZfbnVtYmVyCi0KLS0gYSBzeXNjYWxsIG51bWJlciBjYW4gYmUgLTEgdG8gaW5kaWNhdGUgdGhhdCB0aGUgc3lzY2FsbCBpcyBub3QgaW1wbGVtZW50ZWQgb24KLSAgYSBnaXZlbiBwbGF0Zm9ybSwgZm9yIGV4YW1wbGU6Ci0KLSAgIHZvaWQgICBfX3NldF90bHModm9pZCopICAgYXJtX251bWJlciwtMQotCi0KLXRoZSBjb21tZW50cyBpbiBTWVNDQUxMUy5UWFQgY29udGFpbiBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBsaW5lIGZvcm1hdAotCi1Zb3UgY2FuIGFsc28gdXNlIHRoZSAnY2hlY2tzeXNjYWxscy5weScgc2NyaXB0IHRvIGNoZWNrIHRoYXQgYWxsIHRoZSBzeXNjYWxsCi1udW1iZXJzIHlvdSBlbnRlcmVkIGFyZSBjb3JyZWN0LiBJdCBkb2VzIHNvIGJ5IGxvb2tpbmcgYXQgdGhlIHZhbHVlcyBkZWZpbmVkIGluCi15b3VyIExpbnV4IGtlcm5lbCBoZWFkZXJzLiBUaGUgc2NyaXB0IGluZGljYXRlcyB3aGVyZSB0aGUgdmFsdWVzIGFyZSBpbmNvcnJlY3QKLWFuZCB3aGF0IGlzIGV4cGVjdGVkIGluc3RlYWQuCmRpZmYgLS1naXQgYS9saWJjL1NZU0NBTExTLlRYVCBiL2xpYmMvU1lTQ0FMTFMuVFhUCmluZGV4IGUxOTM0ZmEuLjg4Yzk4MGYgMTAwNjQ0Ci0tLSBhL2xpYmMvU1lTQ0FMTFMuVFhUCisrKyBiL2xpYmMvU1lTQ0FMTFMuVFhUCkBAIC0xLDEzICsxLDExIEBACi0jIHRoaXMgZmlsZSBpcyB1c2VkIHRvIGxpc3QgYWxsIHRoZSBzeXNjYWxscyB0aGF0IHdpbGwgYmUgc3VwcG9ydGVkIGJ5Ci0jIHRoZSBCaW9uaWMgQyBsaWJyYXJ5LiBJdCBpcyB1c2VkIHRvIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGUgdGhlIHN5c2NhbGwKLSMgc3R1YnMsIHRoZSBsaXN0IG9mIHN5c2NhbGwgY29uc3RhbnRzIChfX05SX3h4eHgpIGFuZCB0aGUgY29udGVudCBvZiA8bGludXgvX3VuaXRzZC5oPgorIyBUaGlzIGZpbGUgaXMgdXNlZCB0byBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlIGJpb25pYydzIHRoZSBzeXN0ZW0gY2FsbHMgc3R1YnMuCiAjCi0jIGVhY2ggbm9uIGNvbW1lbnQgbGluZSBoYXMgdGhlIGZvbGxvd2luZyBmb3JtYXQ6CisjIEVhY2ggbm9uIGNvbW1lbnQgbGluZSBoYXMgdGhlIGZvbGxvd2luZyBmb3JtYXQ6CiAjCi0jIHJldHVybl90eXBlICAgIGZ1bmNfbmFtZVs6c3lzY2FsbF9uYW1lWzpjYWxsX2lkXV0oW3BhcmFtZXRlcl9saXN0XSkgIChzeXNjYWxsX251bWJlcnwic3R1YiIpCisjIHJldHVybl90eXBlICAgIGZ1bmNfbmFtZVs6c3lzY2FsbF9uYW1lWzpjYWxsX2lkXV0oW3BhcmFtZXRlcl9saXN0XSkgICgxfC0xfCJzdHViIikKICMKLSMgbm90ZSB0aGF0OgotIyAgICAgIC0gc3lzY2FsbF9uYW1lIGNvcnJlc3BvbmQgdG8gdGhlIG5hbWUgb2YgdGhlIHN5c2NhbGwsIHdoaWNoIG1heSBkaWZmZXIgZnJvbQorIyBOb3RlIHRoYXQ6CisjICAgICAgLSBzeXNjYWxsX25hbWUgY29ycmVzcG9uZHMgdG8gdGhlIG5hbWUgb2YgdGhlIHN5c2NhbGwsIHdoaWNoIG1heSBkaWZmZXIgZnJvbQogIyAgICAgICAgdGhlIGV4cG9ydGVkIGZ1bmN0aW9uIG5hbWUgKGV4YW1wbGU6IHRoZSBleGl0IHN5c2NhbGwgaXMgaW1wbGVtZW50ZWQgYnkgdGhlIF9leGl0KCkKICMgICAgICAgIGZ1bmN0aW9uLCB3aGljaCBpcyBub3QgdGhlIHNhbWUgYXMgdGhlIHN0YW5kYXJkIEMgZXhpdCgpIGZ1bmN0aW9uIHdoaWNoIGNhbGxzIGl0KQogIyAgICAgICAgVGhlIGNhbGxfaWQgcGFyYW1ldGVyLCBnaXZlbiB0aGF0IGZ1bmNfbmFtZSBhbmQgc3lzY2FsbF9uYW1lIGhhdmUKQEAgLTE4LDI5MCArMTYsMzExIEBACiAjICAgICAgLSBlYWNoIHBhcmFtZXRlciB0eXBlIGlzIGFzc3VtZWQgdG8gYmUgc3RvcmVkIG9uIDMyIGJpdHMsIHRoZXJlIGlzIG5vIHBsYW4gdG8gc3VwcG9ydAogIyAgICAgICAgNjQtYml0IGFyY2hpdGVjdHVyZXMgYXQgdGhlIG1vbWVudAogIwotIyAgICAgIC0gaXQgdGhlcmUgaXMgInN0dWIiIGluc3RlYWQgb2YgYSBzeXNjYWxsIG51bWJlciwgdGhlIHRvb2wgd2lsbCBub3QgZ2VuZXJhdGUgYW55Ci0jICAgICAgICBhc3NlbWJsZXIgdGVtcGxhdGUgZm9yIHRoZSBzeXNjYWxsOyBpdCdzIHVwIHRvIHRoZSBiaW9uaWMgaW1wbGVtZW50YXRpb24gdG8gcHJvdmlkZQotIyAgICAgICAgYSByZWxldmFudCBDIHN0dWIKKyMgICAgICAtIHRoZSBmaW5hbCBmaWVsZCBjYW4gYmUgIjEiLCBtZWFuaW5nOiBnZW5lcmF0ZSBhIHN0dWIgZm9yIGVhY2ggYXJjaGl0ZWN0dXJlLAorIyAgICAgICAgdGFraW5nIHRoZSBjb25zdGFudHMgZnJvbSB0aGUga2VybmVsIGhlYWRlciBmaWxlcy4KICMKLSMgICAgICAtIGFkZGl0aW9uYWxseSwgaWYgdGhlIHN5c2NhbGwgbnVtYmVyIGlzIGRpZmZlcmVudCBhbW91bmcgQVJNLCBhbmQgeDg2LCBNSVBTIHVzZToKLSMgICAgICAgIHJldHVybl90eXBlIGZ1bmNuYW1lWzpzeXNjYWxsX25hbWVdKHBhcmFtZXRlcnMpIGFybV9udW1iZXIseDg2X251bWJlciwgbWlwc19udW1iZXIKKyMgICAgICAtIHRoZSBmaW5hbCBmaWVsZCBjYW4gYmUgInN0dWIiIG1lYW5pbmc6IGRvIG5vdCBnZW5lcmF0ZSBhbnkgc3R1YnMgLS0tCisjICAgICAgICBpbiB0aGlzIGNhc2UsIGEgaGFuZC13cml0dGVuIGN1c3RvbSBzdHViIG11c3QgYmUgcHJvdmlkZWQuCisjICAgICAgICBUT0RPOiByZXBsYWNlIHRoaXMgd2l0aCBzb21ldGhpbmcgbGlrZSAiY3VzdG9tIiBvciAibm9uZSIsIG9yIHJlbW92ZQorIyAgICAgICAgaXQgZW50aXJlbHkuCiAjCi0jIHRoZSBmaWxlIGlzIHByb2Nlc3NlZCBieSBhIHB5dGhvbiBzY3JpcHQgbmFtZWQgZ2Vuc3lzY2FsbHMucHkKKyMgICAgICAtIHRoZSBmaW5hbCBmaWVsZCBjYW4gYmUgYSB0aHJlZS1lbGVtZW50IGxpc3Qgb2YgMXMgYW5kIC0xIG1lYW5pbmc6CisjICAgICAgICB0aGlzIHN5c3RlbSBjYWxsIGlzIG9ubHkgYXZhaWxhYmxlIG9uIHNvbWUgb2YgdGhlIGFyY2hpdGVjdHVyZXMgKDEpLAorIyAgICAgICAgYW5kIG5vIHN0dWIgc2hvdWxkIGJlIGdlbmVyYXRlZCBmb3IgdGhvc2UgYXJjaGl0ZWN0dXJlcyBtYXJrZWQgd2l0aCAtMS4KKyMgICAgICAgIHRoZSBvcmRlciBpcyBhcm0seDg2LG1pcHMuCisjICAgICAgICBUT0RPOiByZXBsYWNlIHRoaXMgd2l0aCBzb21ldGhpbmcgbW9yZSByZWFkYWJsZSBsaWtlICItYXJtLC1taXBzIiAobWVhbmluZyB4ODYgb25seSkuCisjCisjIFRoaXMgZmlsZSBpcyBwcm9jZXNzZWQgYnkgYSBweXRob24gc2NyaXB0IG5hbWVkIGdlbnN5c2NhbGxzLnB5LgogIwogCiAjIHByb2Nlc3MgbWFuYWdlbWVudAotdm9pZCAgICBfZXhpdDpleGl0X2dyb3VwIChpbnQpICAgICAgMjQ4LDI1MiwyNDYKK3ZvaWQgICAgX2V4aXQ6ZXhpdF9ncm91cCAoaW50KSAgICAgIDEKIHZvaWQgICAgX2V4aXRfdGhyZWFkOmV4aXQgKGludCkgICAgIDEKLXBpZF90ICAgX19mb3JrOmZvcmsgKHZvaWQpICAgICAgICAgICAyCi1waWRfdCAgIF93YWl0cGlkOndhaXRwaWQgKHBpZF90LCBpbnQqLCBpbnQsIHN0cnVjdCBydXNhZ2UqKSAgIC0xLDcsNwotaW50ICAgICBfX3dhaXRpZDp3YWl0aWQoaW50LCBwaWRfdCwgc3RydWN0IHNpZ2luZm9fdCosIGludCx2b2lkKikgICAgICAgICAgMjgwLDI4NCwyNzgKK3BpZF90ICAgX19mb3JrOmZvcmsgKHZvaWQpICAgICAgICAgICAxCitwaWRfdCAgIF93YWl0cGlkOndhaXRwaWQgKHBpZF90LCBpbnQqLCBpbnQsIHN0cnVjdCBydXNhZ2UqKSAgIC0xLDEsMQoraW50ICAgICBfX3dhaXRpZDp3YWl0aWQoaW50LCBwaWRfdCwgc3RydWN0IHNpZ2luZm9fdCosIGludCx2b2lkKikgICAgICAgICAgMQorcGlkX3QgICB3YWl0NChwaWRfdCBwaWQsIGludCAqc3RhdHVzLCBpbnQgb3B0aW9ucywgc3RydWN0IHJ1c2FnZSAqcnVzYWdlKSAgIDEKIAogIyBOT1RFOiB0aGlzIHN5c3RlbSBjYWxsIGlzIG5ldmVyIGNhbGxlZCBkaXJlY3RseSwgYnV0IHdlIGxpc3QgaXQgdGhlcmUKICMgICAgICAgdG8gaGF2ZSBfX05SX2Nsb25lIHByb3Blcmx5IGRlZmluZWQuCiAjCi1waWRfdCAgIF9fc3lzX2Nsb25lOmNsb25lIChpbnQsIHZvaWQqLCBpbnQqLCB2b2lkKiwgaW50KikgMTIwCitwaWRfdCAgIF9fc3lzX2Nsb25lOmNsb25lIChpbnQsIHZvaWQqLCBpbnQqLCB2b2lkKiwgaW50KikgMQogCi1pbnQgICAgIGV4ZWN2ZSAoY29uc3QgY2hhciosIGNoYXIqIGNvbnN0KiwgY2hhciogY29uc3QqKSAgMTEKK2ludCAgICAgZXhlY3ZlIChjb25zdCBjaGFyKiwgY2hhciogY29uc3QqLCBjaGFyKiBjb25zdCopICAxCiAKLWludCAgICAgX19zZXR1aWQ6c2V0dWlkMzIgKHVpZF90KSAgICAyMTMsMjEzLC0xCi1pbnQgICAgIF9fc2V0dWlkOnNldHVpZCAodWlkX3QpICAgLTEsLTEsMjMKLXVpZF90ICAgZ2V0dWlkOmdldHVpZDMyICgpICAgICAgICAgMTk5LDE5OSwtMQotdWlkX3QgICBnZXR1aWQ6Z2V0dWlkICgpICAgICAgICAgICAtMSwtMSwyNAotZ2lkX3QgICBnZXRnaWQ6Z2V0Z2lkMzIgKCkgICAgICAgICAyMDAsMjAwLC0xCi1naWRfdCAgIGdldGdpZDpnZXRnaWQgKCkgICAgICAgICAgIC0xLC0xLDQ3Ci11aWRfdCAgIGdldGV1aWQ6Z2V0ZXVpZDMyICgpICAgICAgIDIwMSwyMDEsLTEKLXVpZF90ICAgZ2V0ZXVpZDpnZXRldWlkICgpICAgICAgICAgLTEsLTEsNDkKLWdpZF90ICAgZ2V0ZWdpZDpnZXRlZ2lkMzIgKCkgICAgICAgMjAyLDIwMiwtMQotZ2lkX3QgICBnZXRlZ2lkOmdldGVnaWQgKCkgICAgICAgICAtMSwtMSw1MAotdWlkX3QgICBnZXRyZXN1aWQ6Z2V0cmVzdWlkMzIgKHVpZF90ICpydWlkLCB1aWRfdCAqZXVpZCwgdWlkX3QgKnN1aWQpICAgMjA5LDIwOSwtMQotdWlkX3QgICBnZXRyZXN1aWQ6Z2V0cmVzdWlkICh1aWRfdCAqcnVpZCwgdWlkX3QgKmV1aWQsIHVpZF90ICpzdWlkKSAgICAgLTEsLTEsMTg2Ci1naWRfdCAgIGdldHJlc2dpZDpnZXRyZXNnaWQzMiAoZ2lkX3QgKnJnaWQsIGdpZF90ICplZ2lkLCBnaWRfdCAqc2dpZCkgICAyMTEsMjExLC0xCi1naWRfdCAgIGdldHJlc2dpZDpnZXRyZXNnaWQgKGdpZF90ICpyZ2lkLCBnaWRfdCAqZWdpZCwgZ2lkX3QgKnNnaWQpICAgICAtMSwtMSwxOTEKLXBpZF90ICAgZ2V0dGlkKCkgICAgICAgICAgICAgICAgICAgMjI0LDIyNCwyMjIKLXNzaXplX3QgcmVhZGFoZWFkKGludCwgb2ZmNjRfdCwgc2l6ZV90KSAgICAgMjI1LDIyNSwyMjMKLWludCAgICAgZ2V0Z3JvdXBzOmdldGdyb3VwczMyKGludCwgZ2lkX3QgKikgICAgMjA1LDIwNSwtMQotaW50ICAgICBnZXRncm91cHM6Z2V0Z3JvdXBzKGludCwgZ2lkX3QgKikgICAgICAtMSwtMSw4MAotcGlkX3QgICBnZXRwZ2lkKHBpZF90KSAgICAgICAgICAgICAxMzIKLXBpZF90ICAgZ2V0cHBpZCgpICAgICAgICAgICAgICAgICAgNjQKLXBpZF90ICAgc2V0c2lkKCkgICAgICAgICAgICAgICAgICAgNjYKLWludCAgICAgc2V0Z2lkOnNldGdpZDMyKGdpZF90KSAgICAgMjE0LDIxNCwtMQotaW50ICAgICBzZXRnaWQ6c2V0Z2lkKGdpZF90KSAgICAgICAtMSwtMSw0NgoraW50ICAgICBfX3NldHVpZDpzZXR1aWQzMiAodWlkX3QpICAgIDEsMSwtMQoraW50ICAgICBfX3NldHVpZDpzZXR1aWQgKHVpZF90KSAgIC0xLC0xLDEKK3VpZF90ICAgZ2V0dWlkOmdldHVpZDMyICgpICAgICAgICAgMSwxLC0xCit1aWRfdCAgIGdldHVpZDpnZXR1aWQgKCkgICAgICAgICAgIC0xLC0xLDEKK2dpZF90ICAgZ2V0Z2lkOmdldGdpZDMyICgpICAgICAgICAgMSwxLC0xCitnaWRfdCAgIGdldGdpZDpnZXRnaWQgKCkgICAgICAgICAgIC0xLC0xLDEKK3VpZF90ICAgZ2V0ZXVpZDpnZXRldWlkMzIgKCkgICAgICAgMSwxLC0xCit1aWRfdCAgIGdldGV1aWQ6Z2V0ZXVpZCAoKSAgICAgICAgIC0xLC0xLDEKK2dpZF90ICAgZ2V0ZWdpZDpnZXRlZ2lkMzIgKCkgICAgICAgMSwxLC0xCitnaWRfdCAgIGdldGVnaWQ6Z2V0ZWdpZCAoKSAgICAgICAgIC0xLC0xLDEKK3VpZF90ICAgZ2V0cmVzdWlkOmdldHJlc3VpZDMyICh1aWRfdCAqcnVpZCwgdWlkX3QgKmV1aWQsIHVpZF90ICpzdWlkKSAgIDEsMSwtMQordWlkX3QgICBnZXRyZXN1aWQ6Z2V0cmVzdWlkICh1aWRfdCAqcnVpZCwgdWlkX3QgKmV1aWQsIHVpZF90ICpzdWlkKSAgICAgLTEsLTEsMQorZ2lkX3QgICBnZXRyZXNnaWQ6Z2V0cmVzZ2lkMzIgKGdpZF90ICpyZ2lkLCBnaWRfdCAqZWdpZCwgZ2lkX3QgKnNnaWQpICAgMSwxLC0xCitnaWRfdCAgIGdldHJlc2dpZDpnZXRyZXNnaWQgKGdpZF90ICpyZ2lkLCBnaWRfdCAqZWdpZCwgZ2lkX3QgKnNnaWQpICAgICAtMSwtMSwxCitwaWRfdCAgIGdldHRpZCgpICAgICAgICAgICAgICAgICAgIDEKK3NzaXplX3QgcmVhZGFoZWFkKGludCwgb2ZmNjRfdCwgc2l6ZV90KSAgICAgMQoraW50ICAgICBnZXRncm91cHM6Z2V0Z3JvdXBzMzIoaW50LCBnaWRfdCAqKSAgICAxLDEsLTEKK2ludCAgICAgZ2V0Z3JvdXBzOmdldGdyb3VwcyhpbnQsIGdpZF90ICopICAgICAgLTEsLTEsMQorcGlkX3QgICBnZXRwZ2lkKHBpZF90KSAgICAgICAgICAgICAxCitwaWRfdCAgIGdldHBwaWQoKSAgICAgICAgICAgICAgICAgIDEKK3BpZF90ICAgZ2V0c2lkKHBpZF90KSAgICAgICAgICAgICAgMQorcGlkX3QgICBzZXRzaWQoKSAgICAgICAgICAgICAgICAgICAxCitpbnQgICAgIHNldGdpZDpzZXRnaWQzMihnaWRfdCkgICAgIDEsMSwtMQoraW50ICAgICBzZXRnaWQ6c2V0Z2lkKGdpZF90KSAgICAgICAtMSwtMSwxCiBpbnQgICAgIHNldGV1aWQ6c2V0ZXVpZDMyKHVpZF90KSAgIHN0dWIKLWludCAgICAgX19zZXRyZXVpZDpzZXRyZXVpZDMyKHVpZF90LCB1aWRfdCkgICAyMDMsMjAzLC0xCi1pbnQgICAgIF9fc2V0cmV1aWQ6c2V0cmV1aWQodWlkX3QsIHVpZF90KSAgICAgLTEsLTEsNzAKLWludCAgICAgX19zZXRyZXN1aWQ6c2V0cmVzdWlkMzIodWlkX3QsIHVpZF90LCB1aWRfdCkgICAyMDgsMjA4LC0xCi1pbnQgICAgIF9fc2V0cmVzdWlkOnNldHJlc3VpZCh1aWRfdCwgdWlkX3QsIHVpZF90KSAgICAgLTEsLTEsMTg1Ci1pbnQgICAgIHNldHJlc2dpZDpzZXRyZXNnaWQzMihnaWRfdCwgZ2lkX3QsIGdpZF90KSAgIDIxMCwyMTAsLTEKLWludCAgICAgc2V0cmVzZ2lkOnNldHJlc2dpZChnaWRfdCwgZ2lkX3QsIGdpZF90KSAgICAgLTEsLTEsMTkwCi12b2lkKiAgIF9fYnJrOmJyayh2b2lkKikgICAgICAgICAgIDQ1CitpbnQgICAgIF9fc2V0cmV1aWQ6c2V0cmV1aWQzMih1aWRfdCwgdWlkX3QpICAgMSwxLC0xCitpbnQgICAgIF9fc2V0cmV1aWQ6c2V0cmV1aWQodWlkX3QsIHVpZF90KSAgICAgLTEsLTEsMQoraW50ICAgICBfX3NldHJlc3VpZDpzZXRyZXN1aWQzMih1aWRfdCwgdWlkX3QsIHVpZF90KSAgIDEsMSwtMQoraW50ICAgICBfX3NldHJlc3VpZDpzZXRyZXN1aWQodWlkX3QsIHVpZF90LCB1aWRfdCkgICAgIC0xLC0xLDEKK2ludCAgICAgc2V0cmVzZ2lkOnNldHJlc2dpZDMyKGdpZF90LCBnaWRfdCwgZ2lkX3QpICAgMSwxLC0xCitpbnQgICAgIHNldHJlc2dpZDpzZXRyZXNnaWQoZ2lkX3QsIGdpZF90LCBnaWRfdCkgICAgIC0xLC0xLDEKK3ZvaWQqICAgX19icms6YnJrKHZvaWQqKSAgICAgICAgICAgMQogIyBzZWUgY29tbWVudHMgaW4gYXJjaC1hcm0vYmlvbmljL2tpbGwuUyB0byB1bmRlcnN0YW5kIHdoeSB3ZSBkb24ndCBnZW5lcmF0ZSBhbiBBUk0gc3R1YiBmb3Iga2lsbC90a2lsbAotaW50ICAgICBraWxsKHBpZF90LCBpbnQpICAgICAgICAgICAtMSwzNywzNwotaW50ICAgICB0a2lsbChwaWRfdCB0aWQsIGludCBzaWcpICAtMSwyMzgsMjM2Ci1pbnQgICAgIF9fcHRyYWNlOnB0cmFjZShpbnQgcmVxdWVzdCwgaW50IHBpZCwgdm9pZCogYWRkciwgdm9pZCogZGF0YSkgIDI2Ci1pbnQgICAgIF9fc2V0X3RocmVhZF9hcmVhOnNldF90aHJlYWRfYXJlYSh2b2lkKiAgdXNlcl9kZXNjKSAgLTEsMjQzLDI4MwotaW50ICAgICBfX2dldHByaW9yaXR5OmdldHByaW9yaXR5KGludCwgaW50KSAgOTYKLWludCAgICAgc2V0cHJpb3JpdHkoaW50LCBpbnQsIGludCkgICA5NwotaW50ICAgICBzZXRybGltaXQoaW50IHJlc291cmNlLCBjb25zdCBzdHJ1Y3QgcmxpbWl0ICpybHApICA3NQotaW50ICAgICBnZXRybGltaXQ6dWdldHJsaW1pdChpbnQgcmVzb3VyY2UsIHN0cnVjdCBybGltaXQgKnJscCkgIDE5MSwxOTEsLTEKLWludCAgICAgZ2V0cmxpbWl0OmdldHJsaW1pdChpbnQgcmVzb3VyY2UsIHN0cnVjdCBybGltaXQgKnJscCkgIC0xLC0xLDc2Ci1pbnQgICAgIGdldHJ1c2FnZShpbnQgd2hvLCBzdHJ1Y3QgcnVzYWdlKiAgcl91c2FnZSkgIDc3Ci1pbnQgICAgIHNldGdyb3VwczpzZXRncm91cHMzMihpbnQsIGNvbnN0IGdpZF90ICopICAgMjA2LDIwNiwtMQotaW50ICAgICBzZXRncm91cHM6c2V0Z3JvdXBzKGludCwgY29uc3QgZ2lkX3QgKikgICAgIC0xLC0xLDgxCitpbnQgICAgIGtpbGwocGlkX3QsIGludCkgICAgICAgICAgIC0xLDEsMQoraW50ICAgICB0a2lsbChwaWRfdCB0aWQsIGludCBzaWcpICAtMSwxLDEKK2ludCAgICAgdGdraWxsKHBpZF90IHRnaWQsIHBpZF90IHRpZCwgaW50IHNpZykgIC0xLDEsMQoraW50ICAgICBfX3B0cmFjZTpwdHJhY2UoaW50IHJlcXVlc3QsIGludCBwaWQsIHZvaWQqIGFkZHIsIHZvaWQqIGRhdGEpICAxCitpbnQgICAgIF9fc2V0X3RocmVhZF9hcmVhOnNldF90aHJlYWRfYXJlYSh2b2lkKiAgdXNlcl9kZXNjKSAgLTEsMSwxCitpbnQgICAgIF9fZ2V0cHJpb3JpdHk6Z2V0cHJpb3JpdHkoaW50LCBpbnQpICAxCitpbnQgICAgIHNldHByaW9yaXR5KGludCwgaW50LCBpbnQpICAgMQoraW50ICAgICBzZXRybGltaXQoaW50IHJlc291cmNlLCBjb25zdCBzdHJ1Y3QgcmxpbWl0ICpybHApICAxCitpbnQgICAgIGdldHJsaW1pdDp1Z2V0cmxpbWl0KGludCByZXNvdXJjZSwgc3RydWN0IHJsaW1pdCAqcmxwKSAgMSwxLC0xCitpbnQgICAgIGdldHJsaW1pdDpnZXRybGltaXQoaW50IHJlc291cmNlLCBzdHJ1Y3QgcmxpbWl0ICpybHApICAtMSwtMSwxCitpbnQgICAgIGdldHJ1c2FnZShpbnQgd2hvLCBzdHJ1Y3QgcnVzYWdlKiAgcl91c2FnZSkgIDEKK2ludCAgICAgc2V0Z3JvdXBzOnNldGdyb3VwczMyKGludCwgY29uc3QgZ2lkX3QgKikgICAxLDEsLTEKK2ludCAgICAgc2V0Z3JvdXBzOnNldGdyb3VwcyhpbnQsIGNvbnN0IGdpZF90ICopICAgICAtMSwtMSwxCiBwaWRfdCAgIGdldHBncnAodm9pZCkgIHN0dWIKLWludCAgICAgc2V0cGdpZChwaWRfdCwgcGlkX3QpICA1NwotcGlkX3QgICB2Zm9yayh2b2lkKSAgMTkwLC0xLC0xCi1pbnQgICAgIHNldHJlZ2lkOnNldHJlZ2lkMzIoZ2lkX3QsIGdpZF90KSAgMjA0LDIwNCwtMQotaW50ICAgICBzZXRyZWdpZDpzZXRyZWdpZChnaWRfdCwgZ2lkX3QpICAgIC0xLC0xLDcxCi1pbnQgICAgIGNocm9vdChjb25zdCBjaGFyICopICA2MQoraW50ICAgICBzZXRwZ2lkKHBpZF90LCBwaWRfdCkgIDEKK3BpZF90ICAgdmZvcmsodm9pZCkgIDEsLTEsLTEKK2ludCAgICAgc2V0cmVnaWQ6c2V0cmVnaWQzMihnaWRfdCwgZ2lkX3QpICAxLDEsLTEKK2ludCAgICAgc2V0cmVnaWQ6c2V0cmVnaWQoZ2lkX3QsIGdpZF90KSAgICAtMSwtMSwxCitpbnQgICAgIGNocm9vdChjb25zdCBjaGFyICopICAxCiAjIElNUE9SVEFOVDogRXZlbiB0aG91Z2ggPHN5cy9wcmN0bC5oPiBkZWNsYXJlcyBwcmN0bChpbnQsLi4uKSwgdGhlIHN5c2NhbGwgc3R1YiBtdXN0IHRha2UgNiBhcmd1bWVudHMKICMgICAgICAgICAgICB0byBtYXRjaCB0aGUga2VybmVsIGltcGxlbWVudGF0aW9uLgotaW50ICAgICBwcmN0bChpbnQgb3B0aW9uLCB1bnNpZ25lZCBpbnQgYXJnMiwgdW5zaWduZWQgaW50IGFyZzMsIHVuc2lnbmVkIGludCBhcmc0LCB1bnNpZ25lZCBpbnQgYXJnNSkgIDE3MiwxNzIsMTkyCi1pbnQgICAgIGNhcGdldChjYXBfdXNlcl9oZWFkZXJfdCBoZWFkZXIsIGNhcF91c2VyX2RhdGFfdCBkYXRhKSAxODQsMTg0LDIwNAotaW50ICAgICBjYXBzZXQoY2FwX3VzZXJfaGVhZGVyX3QgaGVhZGVyLCBjb25zdCBjYXBfdXNlcl9kYXRhX3QgZGF0YSkgMTg1LDE4NSwyMDUKLWludCAgICAgc2lnYWx0c3RhY2soY29uc3Qgc3RhY2tfdCosIHN0YWNrX3QqKSAxODYsMTg2LDIwNgotaW50ICAgICBhY2N0KGNvbnN0IGNoYXIqICBmaWxlcGF0aCkgIDUxCitpbnQgICAgIHByY3RsKGludCBvcHRpb24sIHVuc2lnbmVkIGludCBhcmcyLCB1bnNpZ25lZCBpbnQgYXJnMywgdW5zaWduZWQgaW50IGFyZzQsIHVuc2lnbmVkIGludCBhcmc1KSAxCitpbnQgICAgIGNhcGdldChjYXBfdXNlcl9oZWFkZXJfdCBoZWFkZXIsIGNhcF91c2VyX2RhdGFfdCBkYXRhKSAxCitpbnQgICAgIGNhcHNldChjYXBfdXNlcl9oZWFkZXJfdCBoZWFkZXIsIGNvbnN0IGNhcF91c2VyX2RhdGFfdCBkYXRhKSAxCitpbnQgICAgIHNpZ2FsdHN0YWNrKGNvbnN0IHN0YWNrX3QqLCBzdGFja190KikgMQoraW50ICAgICBhY2N0KGNvbnN0IGNoYXIqICBmaWxlcGF0aCkgIDEKIAogIyBmaWxlIGRlc2NyaXB0b3JzCi1zc2l6ZV90ICAgICByZWFkIChpbnQsIHZvaWQqLCBzaXplX3QpICAgICAgICAzCi1zc2l6ZV90ICAgICB3cml0ZSAoaW50LCBjb25zdCB2b2lkKiwgc2l6ZV90KSAgICAgICA0Ci1zc2l6ZV90ICAgICBwcmVhZDY0IChpbnQsIHZvaWQgKiwgc2l6ZV90LCBvZmY2NF90KSAxODAsMTgwLDIwMAotc3NpemVfdCAgICAgcHdyaXRlNjQgKGludCwgdm9pZCAqLCBzaXplX3QsIG9mZjY0X3QpIDE4MSwxODEsMjAxCi1pbnQgICAgICAgICBfX29wZW46b3BlbiAoY29uc3QgY2hhciosIGludCwgbW9kZV90KSAgNQotaW50ICAgICAgICAgX19vcGVuYXQ6b3BlbmF0IChpbnQsIGNvbnN0IGNoYXIqLCBpbnQsIG1vZGVfdCkgIDMyMiwyOTUsMjg4Ci1pbnQgICAgICAgICBjbG9zZSAoaW50KSAgICAgICAgICAgICAgICAgICAgICA2Citzc2l6ZV90ICAgICByZWFkIChpbnQsIHZvaWQqLCBzaXplX3QpICAgICAgICAxCitzc2l6ZV90ICAgICB3cml0ZSAoaW50LCBjb25zdCB2b2lkKiwgc2l6ZV90KSAgICAgICAxCitzc2l6ZV90ICAgICBwcmVhZDY0IChpbnQsIHZvaWQgKiwgc2l6ZV90LCBvZmY2NF90KSAxCitzc2l6ZV90ICAgICBwd3JpdGU2NCAoaW50LCB2b2lkICosIHNpemVfdCwgb2ZmNjRfdCkgMQoraW50ICAgICAgICAgX19vcGVuOm9wZW4gKGNvbnN0IGNoYXIqLCBpbnQsIG1vZGVfdCkgIDEKK2ludCAgICAgICAgIF9fb3BlbmF0Om9wZW5hdCAoaW50LCBjb25zdCBjaGFyKiwgaW50LCBtb2RlX3QpIDEKK2ludCAgICAgICAgIGNsb3NlIChpbnQpICAgICAgICAgICAgICAgICAgICAgIDEKIGludCAgICAgICAgIGNyZWF0KGNvbnN0IGNoYXIqLCBtb2RlX3QpICAgICAgIHN0dWIKLW9mZl90ICAgICAgIGxzZWVrKGludCwgb2ZmX3QsIGludCkgICAgICAgICAgIDE5Ci1pbnQgICAgICAgICBfX2xsc2VlazpfbGxzZWVrIChpbnQsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIGxvZmZfdCosIGludCkgIDE0MAotcGlkX3QgICAgICAgZ2V0cGlkICgpICAgIDIwCitvZmZfdCAgICAgICBsc2VlayhpbnQsIG9mZl90LCBpbnQpICAgICAgICAgICAxCitpbnQgICAgICAgICBfX2xsc2VlazpfbGxzZWVrIChpbnQsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIGxvZmZfdCosIGludCkgIDEKK3BpZF90ICAgICAgIGdldHBpZCAoKSAgICAxCiB2b2lkICogICAgICBtbWFwKHZvaWQgKiwgc2l6ZV90LCBpbnQsIGludCwgaW50LCBsb25nKSAgc3R1Ygotdm9pZCAqICAgICAgX19tbWFwMjptbWFwMih2b2lkKiwgc2l6ZV90LCBpbnQsIGludCwgaW50LCBsb25nKSAgIDE5MiwxOTIsMjEwCi1pbnQgICAgICAgICBtdW5tYXAodm9pZCAqLCBzaXplX3QpICA5MQotdm9pZCAqICAgICAgbXJlbWFwKHZvaWQgKiwgc2l6ZV90LCBzaXplX3QsIHVuc2lnbmVkIGxvbmcpICAxNjMsMTYzLDE2NwotaW50ICAgICAgICAgbXN5bmMoY29uc3Qgdm9pZCAqLCBzaXplX3QsIGludCkgICAgMTQ0Ci1pbnQgICAgICAgICBtcHJvdGVjdChjb25zdCB2b2lkICosIHNpemVfdCwgaW50KSAgMTI1Ci1pbnQgICAgICAgICBtYWR2aXNlKGNvbnN0IHZvaWQgKiwgc2l6ZV90LCBpbnQpICAyMjAsMjE5LDIxOAotaW50ICAgICAgICAgbWxvY2soY29uc3Qgdm9pZCAqYWRkciwgc2l6ZV90IGxlbikgICAgMTUwLDE1MCwxNTQKLWludCAgICAgICAgIG11bmxvY2soY29uc3Qgdm9pZCAqYWRkciwgc2l6ZV90IGxlbikgICAxNTEsMTUxLDE1NQotaW50ICAgICAgICAgbWluY29yZSh2b2lkKiAgc3RhcnQsIHNpemVfdCAgbGVuZ3RoLCB1bnNpZ25lZCBjaGFyKiAgdmVjKSAgIDIxOSwyMTgsMjE3Ci1pbnQgICAgICAgICBfX2lvY3RsOmlvY3RsKGludCwgaW50LCB2b2lkICopICA1NAotaW50ICAgICAgICAgcmVhZHYoaW50LCBjb25zdCBzdHJ1Y3QgaW92ZWMgKiwgaW50KSAgIDE0NQotaW50ICAgICAgICAgd3JpdGV2KGludCwgY29uc3Qgc3RydWN0IGlvdmVjICosIGludCkgIDE0NgotaW50ICAgICAgICAgX19mY250bDpmY250bChpbnQsIGludCwgdm9pZCopICA1NQotaW50ICAgICAgICAgZmxvY2soaW50LCBpbnQpICAgMTQzCi1pbnQgICAgICAgICBmY2htb2QoaW50LCBtb2RlX3QpICA5NAotaW50ICAgICAgICAgZHVwKGludCkgIDQxCi1pbnQgICAgICAgICBwaXBlKGludCAqKSAgNDIsNDIsLTEKLWludCAgICAgICAgIHBpcGUyKGludCAqLCBpbnQpIDM1OSwzMzEsMzI4Ci1pbnQgICAgICAgICBkdXAyKGludCwgaW50KSAgIDYzCi1pbnQgICAgICAgICBzZWxlY3Q6X25ld3NlbGVjdChpbnQsIHN0cnVjdCBmZF9zZXQgKiwgc3RydWN0IGZkX3NldCAqLCBzdHJ1Y3QgZmRfc2V0ICosIHN0cnVjdCB0aW1ldmFsICopICAxNDIKLWludCAgICAgICAgIGZ0cnVuY2F0ZShpbnQsIG9mZl90KSAgOTMKLWludCAgICAgICAgIGZ0cnVuY2F0ZTY0KGludCwgb2ZmNjRfdCkgMTk0LDE5NCwyMTIKLWludCAgICAgICAgIGdldGRlbnRzOmdldGRlbnRzNjQodW5zaWduZWQgaW50LCBzdHJ1Y3QgZGlyZW50ICosIHVuc2lnbmVkIGludCkgICAyMTcsMjIwLDIxOQotaW50ICAgICAgICAgZnN5bmMoaW50KSAgMTE4Ci1pbnQgICAgICAgICBmZGF0YXN5bmMoaW50KSAxNDgsMTQ4LDE1MgotaW50ICAgICAgICAgZmNob3duOmZjaG93bjMyKGludCwgdWlkX3QsIGdpZF90KSAgMjA3LDIwNywtMQotaW50ICAgICAgICAgZmNob3duOmZjaG93bihpbnQsIHVpZF90LCBnaWRfdCkgICAgLTEsLTEsOTUKLXZvaWQgICAgICAgIHN5bmModm9pZCkgIDM2Ci1pbnQgICAgICAgICBfX2ZjbnRsNjQ6ZmNudGw2NChpbnQsIGludCwgdm9pZCAqKSAgMjIxLDIyMSwyMjAKLWludCAgICAgICAgIF9fZnN0YXRmczY0OmZzdGF0ZnM2NChpbnQsIHNpemVfdCwgc3RydWN0IHN0YXRmcyAqKSAgMjY3LDI2OSwyNTYKLXNzaXplX3QgICAgIHNlbmRmaWxlKGludCBvdXRfZmQsIGludCBpbl9mZCwgb2ZmX3QgKm9mZnNldCwgc2l6ZV90IGNvdW50KSAgMTg3LDE4NywyMDcKLWludCAgICAgICAgIGZzdGF0YXQ6ZnN0YXRhdDY0KGludCBkaXJmZCwgY29uc3QgY2hhciAqcGF0aCwgc3RydWN0IHN0YXQgKmJ1ZiwgaW50IGZsYWdzKSAgIDMyNywzMDAsMjkzCi1pbnQgICAgICAgICBta2RpcmF0KGludCBkaXJmZCwgY29uc3QgY2hhciAqcGF0aG5hbWUsIG1vZGVfdCBtb2RlKSAgMzIzLDI5NiwyODkKLWludCAgICAgICAgIGZjaG93bmF0KGludCBkaXJmZCwgY29uc3QgY2hhciAqcGF0aCwgdWlkX3Qgb3duZXIsIGdpZF90IGdyb3VwLCBpbnQgZmxhZ3MpICAzMjUsMjk4LDI5MQotaW50ICAgICAgICAgZmNobW9kYXQoaW50IGRpcmZkLCBjb25zdCBjaGFyICpwYXRoLCBtb2RlX3QgbW9kZSwgaW50IGZsYWdzKSAgMzMzLDMwNiwyOTkKLWludCAgICAgICAgIHJlbmFtZWF0KGludCBvbGRkaXJmZCwgY29uc3QgY2hhciAqb2xkcGF0aCwgaW50IG5ld2RpcmZkLCBjb25zdCBjaGFyICpuZXdwYXRoKSAgMzI5LDMwMiwyOTUKLWludCAgICAgICAgIGZzZXR4YXR0cihpbnQsIGNvbnN0IGNoYXIgKiwgY29uc3Qgdm9pZCAqLCBzaXplX3QsIGludCkgMjI4LDIyOCwyMjYKLXNzaXplX3QgICAgIGZnZXR4YXR0cihpbnQsIGNvbnN0IGNoYXIgKiwgdm9pZCAqLCBzaXplX3QpIDIzMSwyMzEsMjI5Ci1zc2l6ZV90ICAgICBmbGlzdHhhdHRyKGludCwgY2hhciAqLCBzaXplX3QpIDIzNCwyMzQsMjMyCi1pbnQgICAgICAgICBmcmVtb3ZleGF0dHIoaW50LCBjb25zdCBjaGFyICopIDIzNywyMzcsMjM1Cit2b2lkICogICAgICBfX21tYXAyOm1tYXAyKHZvaWQqLCBzaXplX3QsIGludCwgaW50LCBpbnQsIGxvbmcpICAgMQoraW50ICAgICAgICAgbXVubWFwKHZvaWQgKiwgc2l6ZV90KSAgMQordm9pZCAqICAgICAgbXJlbWFwKHZvaWQgKiwgc2l6ZV90LCBzaXplX3QsIHVuc2lnbmVkIGxvbmcpICAxCitpbnQgICAgICAgICBtc3luYyhjb25zdCB2b2lkICosIHNpemVfdCwgaW50KSAgICAxCitpbnQgICAgICAgICBtcHJvdGVjdChjb25zdCB2b2lkICosIHNpemVfdCwgaW50KSAgMQoraW50ICAgICAgICAgbWFkdmlzZShjb25zdCB2b2lkICosIHNpemVfdCwgaW50KSAgMQoraW50ICAgICAgICAgbWxvY2soY29uc3Qgdm9pZCAqYWRkciwgc2l6ZV90IGxlbikgICAgMQoraW50ICAgICAgICAgbXVubG9jayhjb25zdCB2b2lkICphZGRyLCBzaXplX3QgbGVuKSAgIDEKK2ludCAgICAgICAgIG1sb2NrYWxsKGludCBmbGFncykgICAxCitpbnQgICAgICAgICBtdW5sb2NrYWxsKCkgICAxCitpbnQgICAgICAgICBtaW5jb3JlKHZvaWQqICBzdGFydCwgc2l6ZV90ICBsZW5ndGgsIHVuc2lnbmVkIGNoYXIqICB2ZWMpICAgMQoraW50ICAgICAgICAgX19pb2N0bDppb2N0bChpbnQsIGludCwgdm9pZCAqKSAgMQoraW50ICAgICAgICAgcmVhZHYoaW50LCBjb25zdCBzdHJ1Y3QgaW92ZWMgKiwgaW50KSAgIDEKK2ludCAgICAgICAgIHdyaXRldihpbnQsIGNvbnN0IHN0cnVjdCBpb3ZlYyAqLCBpbnQpICAxCitpbnQgICAgICAgICBfX2ZjbnRsOmZjbnRsKGludCwgaW50LCB2b2lkKikgIDEKK2ludCAgICAgICAgIGZsb2NrKGludCwgaW50KSAgIDEKK2ludCAgICAgICAgIGZjaG1vZChpbnQsIG1vZGVfdCkgIDEKK2ludCAgICAgICAgIGR1cChpbnQpICAxCitpbnQgICAgICAgICBwaXBlKGludCAqKSAgMSwxLC0xCitpbnQgICAgICAgICBwaXBlMihpbnQgKiwgaW50KSAxCitpbnQgICAgICAgICBkdXAyKGludCwgaW50KSAgIDEKK2ludCAgICAgICAgIHNlbGVjdDpfbmV3c2VsZWN0KGludCwgc3RydWN0IGZkX3NldCAqLCBzdHJ1Y3QgZmRfc2V0ICosIHN0cnVjdCBmZF9zZXQgKiwgc3RydWN0IHRpbWV2YWwgKikgIDEKK2ludCAgICAgICAgIGZ0cnVuY2F0ZShpbnQsIG9mZl90KSAgMQoraW50ICAgICAgICAgZnRydW5jYXRlNjQoaW50LCBvZmY2NF90KSAxCitpbnQgICAgICAgICBnZXRkZW50czpnZXRkZW50czY0KHVuc2lnbmVkIGludCwgc3RydWN0IGRpcmVudCAqLCB1bnNpZ25lZCBpbnQpICAgMQoraW50ICAgICAgICAgZnN5bmMoaW50KSAgMQoraW50ICAgICAgICAgZmRhdGFzeW5jKGludCkgMQoraW50ICAgICAgICAgZmNob3duOmZjaG93bjMyKGludCwgdWlkX3QsIGdpZF90KSAgMSwxLC0xCitpbnQgICAgICAgICBmY2hvd246ZmNob3duKGludCwgdWlkX3QsIGdpZF90KSAgICAtMSwtMSwxCit2b2lkICAgICAgICBzeW5jKHZvaWQpICAxCitpbnQgICAgICAgICBfX2ZjbnRsNjQ6ZmNudGw2NChpbnQsIGludCwgdm9pZCAqKSAgMQoraW50ICAgICAgICAgX19mc3RhdGZzNjQ6ZnN0YXRmczY0KGludCwgc2l6ZV90LCBzdHJ1Y3Qgc3RhdGZzICopICAxCitzc2l6ZV90ICAgICBzZW5kZmlsZShpbnQgb3V0X2ZkLCBpbnQgaW5fZmQsIG9mZl90ICpvZmZzZXQsIHNpemVfdCBjb3VudCkgIDEKK2ludCAgICAgICAgIGZzdGF0YXQ6ZnN0YXRhdDY0KGludCBkaXJmZCwgY29uc3QgY2hhciAqcGF0aCwgc3RydWN0IHN0YXQgKmJ1ZiwgaW50IGZsYWdzKSAgIDEKK2ludCAgICAgICAgIG1rZGlyYXQoaW50IGRpcmZkLCBjb25zdCBjaGFyICpwYXRobmFtZSwgbW9kZV90IG1vZGUpICAxCitpbnQgICAgICAgICBmY2hvd25hdChpbnQgZGlyZmQsIGNvbnN0IGNoYXIgKnBhdGgsIHVpZF90IG93bmVyLCBnaWRfdCBncm91cCwgaW50IGZsYWdzKSAgMQoraW50ICAgICAgICAgZmNobW9kYXQoaW50IGRpcmZkLCBjb25zdCBjaGFyICpwYXRoLCBtb2RlX3QgbW9kZSwgaW50IGZsYWdzKSAgMQoraW50ICAgICAgICAgcmVuYW1lYXQoaW50IG9sZGRpcmZkLCBjb25zdCBjaGFyICpvbGRwYXRoLCBpbnQgbmV3ZGlyZmQsIGNvbnN0IGNoYXIgKm5ld3BhdGgpICAxCitpbnQgICAgICAgICBmc2V0eGF0dHIoaW50LCBjb25zdCBjaGFyICosIGNvbnN0IHZvaWQgKiwgc2l6ZV90LCBpbnQpIDEKK3NzaXplX3QgICAgIGZnZXR4YXR0cihpbnQsIGNvbnN0IGNoYXIgKiwgdm9pZCAqLCBzaXplX3QpIDEKK3NzaXplX3QgICAgIGZsaXN0eGF0dHIoaW50LCBjaGFyICosIHNpemVfdCkgMQoraW50ICAgICAgICAgZnJlbW92ZXhhdHRyKGludCwgY29uc3QgY2hhciAqKSAxCiAKICMgZmlsZSBzeXN0ZW0KLWludCAgICAgbGluayAoY29uc3QgY2hhciosIGNvbnN0IGNoYXIqKSAgOQotaW50ICAgICB1bmxpbmsgKGNvbnN0IGNoYXIqKSAgICAgICAgICAgICAxMAotaW50ICAgICB1bmxpbmthdCAoaW50LCBjb25zdCBjaGFyICosIGludCkgICAzMjgsMzAxLDI5NAotaW50ICAgICBjaGRpciAoY29uc3QgY2hhciopICAgICAgICAgICAgICAxMgotaW50ICAgICBta25vZCAoY29uc3QgY2hhciosIG1vZGVfdCwgZGV2X3QpICAxNAotaW50ICAgICBjaG1vZCAoY29uc3QgY2hhciosbW9kZV90KSAgICAgICAgICAxNQotaW50ICAgICBjaG93bjpjaG93bjMyKGNvbnN0IGNoYXIgKiwgdWlkX3QsIGdpZF90KSAgMjEyLDIxMiwtMQotaW50ICAgICBjaG93bjpjaG93bihjb25zdCBjaGFyICosIHVpZF90LCBnaWRfdCkgICAgLTEsLTEsMjAyCi1pbnQgICAgIGxjaG93bjpsY2hvd24zMiAoY29uc3QgY2hhciosIHVpZF90LCBnaWRfdCkgIDE5OCwxOTgsLTEKLWludCAgICAgbGNob3duOmxjaG93biAoY29uc3QgY2hhciosIHVpZF90LCBnaWRfdCkgIC0xLC0xLDE2Ci1pbnQgICAgIG1vdW50IChjb25zdCBjaGFyKiwgY29uc3QgY2hhciosIGNvbnN0IGNoYXIqLCB1bnNpZ25lZCBsb25nLCBjb25zdCB2b2lkKikgIDIxCitpbnQgICAgIGxpbmsgKGNvbnN0IGNoYXIqLCBjb25zdCBjaGFyKikgIDEKK2ludCAgICAgdW5saW5rIChjb25zdCBjaGFyKikgICAgICAgICAgICAgMQoraW50ICAgICB1bmxpbmthdCAoaW50LCBjb25zdCBjaGFyICosIGludCkgICAxCitpbnQgICAgIGNoZGlyIChjb25zdCBjaGFyKikgICAgICAgICAgICAgIDEKK2ludCAgICAgbWtub2QgKGNvbnN0IGNoYXIqLCBtb2RlX3QsIGRldl90KSAgMQoraW50ICAgICBjaG1vZCAoY29uc3QgY2hhciosbW9kZV90KSAgICAgICAgICAxCitpbnQgICAgIGNob3duOmNob3duMzIoY29uc3QgY2hhciAqLCB1aWRfdCwgZ2lkX3QpICAxLDEsLTEKK2ludCAgICAgY2hvd246Y2hvd24oY29uc3QgY2hhciAqLCB1aWRfdCwgZ2lkX3QpICAgIC0xLC0xLDEKK2ludCAgICAgbGNob3duOmxjaG93bjMyIChjb25zdCBjaGFyKiwgdWlkX3QsIGdpZF90KSAgMSwxLC0xCitpbnQgICAgIGxjaG93bjpsY2hvd24gKGNvbnN0IGNoYXIqLCB1aWRfdCwgZ2lkX3QpICAtMSwtMSwxCitpbnQgICAgIG1vdW50IChjb25zdCBjaGFyKiwgY29uc3QgY2hhciosIGNvbnN0IGNoYXIqLCB1bnNpZ25lZCBsb25nLCBjb25zdCB2b2lkKikgIDEKIGludCAgICAgdW1vdW50KGNvbnN0IGNoYXIqKSAgc3R1YgotaW50ICAgICB1bW91bnQyIChjb25zdCBjaGFyKiwgaW50KSAgNTIKLWludCAgICAgZnN0YXQ6ZnN0YXQ2NChpbnQsIHN0cnVjdCBzdGF0KikgICAgMTk3LDE5NywyMTUKLWludCAgICAgc3RhdDpzdGF0NjQoY29uc3QgY2hhciAqLCBzdHJ1Y3Qgc3RhdCAqKSAgMTk1LDE5NSwyMTMKLWludCAgICAgbHN0YXQ6bHN0YXQ2NChjb25zdCBjaGFyICosIHN0cnVjdCBzdGF0ICopICAxOTYsMTk2LDIxNAotaW50ICAgICBta2Rpcihjb25zdCBjaGFyICosIG1vZGVfdCkgMzkKLWludCAgICAgcmVhZGxpbmsoY29uc3QgY2hhciAqLCBjaGFyICosIHNpemVfdCkgIDg1Ci1pbnQgICAgIHJtZGlyKGNvbnN0IGNoYXIgKikgIDQwCi1pbnQgICAgIHJlbmFtZShjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKikgIDM4Ci1pbnQgICAgIF9fZ2V0Y3dkOmdldGN3ZChjaGFyICogYnVmLCBzaXplX3Qgc2l6ZSkgIDE4MywxODMsMjAzCi1pbnQgICAgIGFjY2Vzcyhjb25zdCBjaGFyICosIGludCkgIDMzCi1pbnQgICAgIHN5bWxpbmsoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopICA4MwotaW50ICAgICBmY2hkaXIoaW50KSAgICAxMzMKLWludCAgICAgdHJ1bmNhdGUoY29uc3QgY2hhciosIG9mZl90KSAgICA5MgotaW50ICAgICBzZXR4YXR0cihjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgY29uc3Qgdm9pZCAqLCBzaXplX3QsIGludCkgMjI2LDIyNiwyMjQKLWludCAgICAgbHNldHhhdHRyKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBjb25zdCB2b2lkICosIHNpemVfdCwgaW50KSAyMjcsMjI3LDIyNQotc3NpemVfdCBnZXR4YXR0cihjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgdm9pZCAqLCBzaXplX3QpIDIyOSwyMjksMjI3Ci1zc2l6ZV90IGxnZXR4YXR0cihjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgdm9pZCAqLCBzaXplX3QpIDIzMCwyMzAsMjI4Ci1zc2l6ZV90IGxpc3R4YXR0cihjb25zdCBjaGFyICosIGNoYXIgKiwgc2l6ZV90KSAyMzIsMjMyLDIzMAotc3NpemVfdCBsbGlzdHhhdHRyKGNvbnN0IGNoYXIgKiwgY2hhciAqLCBzaXplX3QpIDIzMywyMzMsMjMxCi1pbnQgICAgIHJlbW92ZXhhdHRyKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKSAyMzUsMjM1LDIzMwotaW50ICAgICBscmVtb3ZleGF0dHIoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopIDIzNiwyMzYsMjM0Ci1pbnQgICAgIF9fc3RhdGZzNjQ6c3RhdGZzNjQoY29uc3QgY2hhciAqLCBzaXplX3QsIHN0cnVjdCBzdGF0ZnMgKikgIDI2NiwyNjgsMjU1CitpbnQgICAgIHVtb3VudDIgKGNvbnN0IGNoYXIqLCBpbnQpICAxCitpbnQgICAgIGZzdGF0OmZzdGF0NjQoaW50LCBzdHJ1Y3Qgc3RhdCopICAgIDEKK2ludCAgICAgc3RhdDpzdGF0NjQoY29uc3QgY2hhciAqLCBzdHJ1Y3Qgc3RhdCAqKSAgMQoraW50ICAgICBsc3RhdDpsc3RhdDY0KGNvbnN0IGNoYXIgKiwgc3RydWN0IHN0YXQgKikgIDEKK2ludCAgICAgbWtkaXIoY29uc3QgY2hhciAqLCBtb2RlX3QpIDEKK2ludCAgICAgcmVhZGxpbmsoY29uc3QgY2hhciAqLCBjaGFyICosIHNpemVfdCkgIDEKK2ludCAgICAgcm1kaXIoY29uc3QgY2hhciAqKSAgMQoraW50ICAgICByZW5hbWUoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopICAxCitpbnQgICAgIF9fZ2V0Y3dkOmdldGN3ZChjaGFyICogYnVmLCBzaXplX3Qgc2l6ZSkgIDEKK2ludCAgICAgYWNjZXNzKGNvbnN0IGNoYXIgKiwgaW50KSAgMQoraW50ICAgICBmYWNjZXNzYXQoaW50LCBjb25zdCBjaGFyICosIGludCwgaW50KSAgMQoraW50ICAgICBzeW1saW5rKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKSAgMQoraW50ICAgICBmY2hkaXIoaW50KSAgICAxCitpbnQgICAgIHRydW5jYXRlKGNvbnN0IGNoYXIqLCBvZmZfdCkgICAgMQoraW50ICAgICBzZXR4YXR0cihjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgY29uc3Qgdm9pZCAqLCBzaXplX3QsIGludCkgMQoraW50ICAgICBsc2V0eGF0dHIoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIGNvbnN0IHZvaWQgKiwgc2l6ZV90LCBpbnQpIDEKK3NzaXplX3QgZ2V0eGF0dHIoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIHZvaWQgKiwgc2l6ZV90KSAxCitzc2l6ZV90IGxnZXR4YXR0cihjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgdm9pZCAqLCBzaXplX3QpIDEKK3NzaXplX3QgbGlzdHhhdHRyKGNvbnN0IGNoYXIgKiwgY2hhciAqLCBzaXplX3QpIDEKK3NzaXplX3QgbGxpc3R4YXR0cihjb25zdCBjaGFyICosIGNoYXIgKiwgc2l6ZV90KSAxCitpbnQgICAgIHJlbW92ZXhhdHRyKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKSAxCitpbnQgICAgIGxyZW1vdmV4YXR0cihjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKikgMQoraW50ICAgICBfX3N0YXRmczY0OnN0YXRmczY0KGNvbnN0IGNoYXIgKiwgc2l6ZV90LCBzdHJ1Y3Qgc3RhdGZzICopICAxCitsb25nICAgIHVuc2hhcmUodW5zaWduZWQgbG9uZykgIDEKK2ludCAgICAgc3dhcG9uKGNvbnN0IGNoYXIgKiwgaW50KSAxCitpbnQgICAgIHN3YXBvZmYoY29uc3QgY2hhciAqKSAxCiAKICMgdGltZQotaW50ICAgICAgICAgICBwYXVzZSAoKSAgICAgICAgICAgICAgICAgICAgICAgMjkKLWludCAgICAgICAgICAgZ2V0dGltZW9mZGF5KHN0cnVjdCB0aW1ldmFsKiwgc3RydWN0IHRpbWV6b25lKikgICAgICAgNzgKLWludCAgICAgICAgICAgc2V0dGltZW9mZGF5KGNvbnN0IHN0cnVjdCB0aW1ldmFsKiwgY29uc3Qgc3RydWN0IHRpbWV6b25lKikgICA3OQotY2xvY2tfdCAgICAgICB0aW1lcyhzdHJ1Y3QgdG1zICopICAgICAgIDQzCi1pbnQgICAgICAgICAgIG5hbm9zbGVlcChjb25zdCBzdHJ1Y3QgdGltZXNwZWMgKiwgc3RydWN0IHRpbWVzcGVjICopICAgMTYyLDE2MiwxNjYKLWludCAgICAgICAgICAgY2xvY2tfZ2V0dGltZShjbG9ja2lkX3QgY2xrX2lkLCBzdHJ1Y3QgdGltZXNwZWMgKnRwKSAgICAyNjMsMjY1LDI2MwotaW50ICAgICAgICAgICBjbG9ja19zZXR0aW1lKGNsb2NraWRfdCBjbGtfaWQsIGNvbnN0IHN0cnVjdCB0aW1lc3BlYyAqdHApICAyNjIsMjY0LDI2MgotaW50ICAgICAgICAgICBjbG9ja19nZXRyZXMoY2xvY2tpZF90IGNsa19pZCwgc3RydWN0IHRpbWVzcGVjICpyZXMpICAgMjY0LDI2NiwyNjQKLWludCAgICAgICAgICAgY2xvY2tfbmFub3NsZWVwKGNsb2NraWRfdCBjbG9ja19pZCwgaW50IGZsYWdzLCBjb25zdCBzdHJ1Y3QgdGltZXNwZWMgKnJlcSwgc3RydWN0IHRpbWVzcGVjICpyZW0pICAyNjUsMjY3LDI2NQotaW50ICAgICAgICAgICBnZXRpdGltZXIoaW50LCBjb25zdCBzdHJ1Y3QgaXRpbWVydmFsICopICAgMTA1Ci1pbnQgICAgICAgICAgIHNldGl0aW1lcihpbnQsIGNvbnN0IHN0cnVjdCBpdGltZXJ2YWwgKiwgc3RydWN0IGl0aW1lcnZhbCAqKSAgMTA0Ci1pbnQgICAgICAgICAgIF9fdGltZXJfY3JlYXRlOnRpbWVyX2NyZWF0ZShjbG9ja2lkX3QgY2xvY2tpZCwgc3RydWN0IHNpZ2V2ZW50ICpldnAsIHRpbWVyX3QgKnRpbWVyaWQpICAgIDI1NywyNTksMjU3Ci1pbnQgICAgICAgICAgIF9fdGltZXJfc2V0dGltZTp0aW1lcl9zZXR0aW1lKHRpbWVyX3QsIGludCwgY29uc3Qgc3RydWN0IGl0aW1lcnNwZWMqLCBzdHJ1Y3QgaXRpbWVyc3BlYyopIDI1OCwyNjAsMjU4Ci1pbnQgICAgICAgICAgIF9fdGltZXJfZ2V0dGltZTp0aW1lcl9nZXR0aW1lKHRpbWVyX3QsIHN0cnVjdCBpdGltZXJzcGVjKikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI1OSwyNjEsMjU5Ci1pbnQgICAgICAgICAgIF9fdGltZXJfZ2V0b3ZlcnJ1bjp0aW1lcl9nZXRvdmVycnVuKHRpbWVyX3QpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI2MCwyNjIsMjYwCi1pbnQgICAgICAgICAgIF9fdGltZXJfZGVsZXRlOnRpbWVyX2RlbGV0ZSh0aW1lcl90KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI2MSwyNjMsMjYxCi1pbnQgICAgICAgICAgIHV0aW1lcyhjb25zdCBjaGFyKiwgY29uc3Qgc3RydWN0IHRpbWV2YWwgdHZwWzJdKSAgICAgICAgICAgICAgICAgICAgICAgICAgMjY5LDI3MSwyNjcKLWludCAgICAgICAgICAgdXRpbWVuc2F0KGludCwgY29uc3QgY2hhciAqLCBjb25zdCBzdHJ1Y3QgdGltZXNwZWMgdGltZXNbMl0sIGludCkgICAgICAgICAzNDgsMzIwLDMxNgoraW50ICAgICAgICAgICBwYXVzZSAoKSAgICAgICAgICAgICAgICAgICAgICAgMQoraW50ICAgICAgICAgICBnZXR0aW1lb2ZkYXkoc3RydWN0IHRpbWV2YWwqLCBzdHJ1Y3QgdGltZXpvbmUqKSAgICAgICAxCitpbnQgICAgICAgICAgIHNldHRpbWVvZmRheShjb25zdCBzdHJ1Y3QgdGltZXZhbCosIGNvbnN0IHN0cnVjdCB0aW1lem9uZSopICAgMQorY2xvY2tfdCAgICAgICB0aW1lcyhzdHJ1Y3QgdG1zICopICAgICAgIDEKK2ludCAgICAgICAgICAgbmFub3NsZWVwKGNvbnN0IHN0cnVjdCB0aW1lc3BlYyAqLCBzdHJ1Y3QgdGltZXNwZWMgKikgICAxCitpbnQgICAgICAgICAgIGNsb2NrX2dldHRpbWUoY2xvY2tpZF90IGNsa19pZCwgc3RydWN0IHRpbWVzcGVjICp0cCkgICAgMQoraW50ICAgICAgICAgICBjbG9ja19zZXR0aW1lKGNsb2NraWRfdCBjbGtfaWQsIGNvbnN0IHN0cnVjdCB0aW1lc3BlYyAqdHApICAxCitpbnQgICAgICAgICAgIGNsb2NrX2dldHJlcyhjbG9ja2lkX3QgY2xrX2lkLCBzdHJ1Y3QgdGltZXNwZWMgKnJlcykgICAxCitpbnQgICAgICAgICAgIGNsb2NrX25hbm9zbGVlcChjbG9ja2lkX3QgY2xvY2tfaWQsIGludCBmbGFncywgY29uc3Qgc3RydWN0IHRpbWVzcGVjICpyZXEsIHN0cnVjdCB0aW1lc3BlYyAqcmVtKSAgMQoraW50ICAgICAgICAgICBnZXRpdGltZXIoaW50LCBjb25zdCBzdHJ1Y3QgaXRpbWVydmFsICopICAgMQoraW50ICAgICAgICAgICBzZXRpdGltZXIoaW50LCBjb25zdCBzdHJ1Y3QgaXRpbWVydmFsICosIHN0cnVjdCBpdGltZXJ2YWwgKikgIDEKK2ludCAgICAgICAgICAgX190aW1lcl9jcmVhdGU6dGltZXJfY3JlYXRlKGNsb2NraWRfdCBjbG9ja2lkLCBzdHJ1Y3Qgc2lnZXZlbnQgKmV2cCwgdGltZXJfdCAqdGltZXJpZCkgICAgMQoraW50ICAgICAgICAgICBfX3RpbWVyX3NldHRpbWU6dGltZXJfc2V0dGltZSh0aW1lcl90LCBpbnQsIGNvbnN0IHN0cnVjdCBpdGltZXJzcGVjKiwgc3RydWN0IGl0aW1lcnNwZWMqKSAxCitpbnQgICAgICAgICAgIF9fdGltZXJfZ2V0dGltZTp0aW1lcl9nZXR0aW1lKHRpbWVyX3QsIHN0cnVjdCBpdGltZXJzcGVjKikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKK2ludCAgICAgICAgICAgX190aW1lcl9nZXRvdmVycnVuOnRpbWVyX2dldG92ZXJydW4odGltZXJfdCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQoraW50ICAgICAgICAgICBfX3RpbWVyX2RlbGV0ZTp0aW1lcl9kZWxldGUodGltZXJfdCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCitpbnQgICAgICAgICAgIHV0aW1lcyhjb25zdCBjaGFyKiwgY29uc3Qgc3RydWN0IHRpbWV2YWwgdHZwWzJdKSAgICAgICAgICAgICAgICAgICAgICAgICAgMQoraW50ICAgICAgICAgICB1dGltZW5zYXQoaW50LCBjb25zdCBjaGFyICosIGNvbnN0IHN0cnVjdCB0aW1lc3BlYyB0aW1lc1syXSwgaW50KSAgICAgICAgIDEKK2ludCAgICAgICAgICAgdGltZXJmZF9jcmVhdGUoY2xvY2tpZF90LCBpbnQpICAgMQoraW50ICAgICAgICAgICB0aW1lcmZkX3NldHRpbWUoaW50LCBpbnQsIGNvbnN0IHN0cnVjdCBpdGltZXJzcGVjICosIHN0cnVjdCBpdGltZXJzcGVjICopICAgMQoraW50ICAgICAgICAgICB0aW1lcmZkX2dldHRpbWUoaW50LCBzdHJ1Y3QgaXRpbWVyc3BlYyAqKSAgIDEKIAogIyBzaWduYWxzCi1pbnQgICAgIHNpZ2FjdGlvbihpbnQsIGNvbnN0IHN0cnVjdCBzaWdhY3Rpb24gKiwgc3RydWN0IHNpZ2FjdGlvbiAqKSAgNjcKLWludCAgICAgc2lncHJvY21hc2soaW50LCBjb25zdCBzaWdzZXRfdCAqLCBzaWdzZXRfdCAqKSAgMTI2Ci1pbnQgICAgIF9fc2lnc3VzcGVuZDpzaWdzdXNwZW5kKGludCB1bnVzZWQxLCBpbnQgdW51c2VkMiwgdW5zaWduZWQgbWFzaykgIDcyCi1pbnQgICAgIF9fcnRfc2lnYWN0aW9uOnJ0X3NpZ2FjdGlvbiAoaW50IHNpZywgY29uc3Qgc3RydWN0IHNpZ2FjdGlvbiAqYWN0LCBzdHJ1Y3Qgc2lnYWN0aW9uICpvYWN0LCBzaXplX3Qgc2lnc2V0c2l6ZSkgIDE3NCwxNzQsMTk0Ci1pbnQgICAgIF9fcnRfc2lncHJvY21hc2s6cnRfc2lncHJvY21hc2sgKGludCAgaG93LCBjb25zdCBzaWdzZXRfdCAqc2V0LCBzaWdzZXRfdCAqb3NldCwgc2l6ZV90IHNpZ3NldHNpemUpICAxNzUsMTc1LDE5NQotaW50ICAgICBfX3J0X3NpZ3RpbWVkd2FpdDpydF9zaWd0aW1lZHdhaXQoY29uc3Qgc2lnc2V0X3QgKnNldCwgc3RydWN0IHNpZ2luZm9fdCAgKmluZm8sIHN0cnVjdCB0aW1lc3BlY190ICAqdGltZW91dCwgc2l6ZV90ICBzaWdzZXRfc2l6ZSkgIDE3NywxNzcsMTk3Ci1pbnQgICAgIHNpZ3BlbmRpbmcoc2lnc2V0X3QgKikgIDczCitpbnQgICAgIHNpZ2FjdGlvbihpbnQsIGNvbnN0IHN0cnVjdCBzaWdhY3Rpb24gKiwgc3RydWN0IHNpZ2FjdGlvbiAqKSAgMQoraW50ICAgICBzaWdwcm9jbWFzayhpbnQsIGNvbnN0IHNpZ3NldF90ICosIHNpZ3NldF90ICopICAxCitpbnQgICAgIF9fc2lnc3VzcGVuZDpzaWdzdXNwZW5kKGludCB1bnVzZWQxLCBpbnQgdW51c2VkMiwgdW5zaWduZWQgbWFzaykgIDEsMSwtMQoraW50ICAgICBfX3NpZ3N1c3BlbmQ6c2lnc3VzcGVuZChjb25zdCBzaWdzZXRfdCAqbWFzaykgIC0xLC0xLDEKK2ludCAgICAgX19ydF9zaWdhY3Rpb246cnRfc2lnYWN0aW9uIChpbnQgc2lnLCBjb25zdCBzdHJ1Y3Qgc2lnYWN0aW9uICphY3QsIHN0cnVjdCBzaWdhY3Rpb24gKm9hY3QsIHNpemVfdCBzaWdzZXRzaXplKSAgMQoraW50ICAgICBfX3J0X3NpZ3Byb2NtYXNrOnJ0X3NpZ3Byb2NtYXNrIChpbnQgIGhvdywgY29uc3Qgc2lnc2V0X3QgKnNldCwgc2lnc2V0X3QgKm9zZXQsIHNpemVfdCBzaWdzZXRzaXplKSAgMQoraW50ICAgICBfX3J0X3NpZ3RpbWVkd2FpdDpydF9zaWd0aW1lZHdhaXQoY29uc3Qgc2lnc2V0X3QgKnNldCwgc3RydWN0IHNpZ2luZm9fdCAgKmluZm8sIHN0cnVjdCB0aW1lc3BlY190ICAqdGltZW91dCwgc2l6ZV90ICBzaWdzZXRfc2l6ZSkgIDEKK2ludCAgICAgc2lncGVuZGluZyhzaWdzZXRfdCAqKSAgMQoraW50ICAgICBzaWduYWxmZDQoaW50IGZkLCBjb25zdCBzaWdzZXRfdCAqbWFzaywgc2l6ZV90IHNpemVtYXNrLCBpbnQgZmxhZ3MpICAxCiAKICMgc29ja2V0cwotaW50ICAgICAgICAgICBzb2NrZXQoaW50LCBpbnQsIGludCkgICAgICAgICAgICAgIDI4MSwtMSwxODMKLWludCAgICAgICAgICAgc29ja2V0cGFpcihpbnQsIGludCwgaW50LCBpbnQqKSAgICAyODgsLTEsMTg0Ci1pbnQgICAgICAgICAgIGJpbmQoaW50LCBzdHJ1Y3Qgc29ja2FkZHIgKiwgaW50KSAgMjgyLC0xLDE2OQotaW50ICAgICAgICAgICBjb25uZWN0KGludCwgc3RydWN0IHNvY2thZGRyICosIHNvY2tsZW5fdCkgICAyODMsLTEsMTcwCi1pbnQgICAgICAgICAgIGxpc3RlbihpbnQsIGludCkgICAgICAgICAgICAgICAgICAgMjg0LC0xLDE3NAotaW50ICAgICAgICAgICBhY2NlcHQoaW50LCBzdHJ1Y3Qgc29ja2FkZHIgKiwgc29ja2xlbl90ICopICAyODUsLTEsMTY4Ci1pbnQgICAgICAgICAgIGdldHNvY2tuYW1lKGludCwgc3RydWN0IHNvY2thZGRyICosIHNvY2tsZW5fdCAqKSAgMjg2LC0xLDE3MgotaW50ICAgICAgICAgICBnZXRwZWVybmFtZShpbnQsIHN0cnVjdCBzb2NrYWRkciAqLCBzb2NrbGVuX3QgKikgIDI4NywtMSwxNzEKLWludCAgICAgICAgICAgc2VuZHRvKGludCwgY29uc3Qgdm9pZCAqLCBzaXplX3QsIGludCwgY29uc3Qgc3RydWN0IHNvY2thZGRyICosIHNvY2tsZW5fdCkgIDI5MCwtMSwxODAKLWludCAgICAgICAgICAgcmVjdmZyb20oaW50LCB2b2lkICosIHNpemVfdCwgdW5zaWduZWQgaW50LCBzdHJ1Y3Qgc29ja2FkZHIgKiwgc29ja2xlbl90ICopICAyOTIsLTEsMTc2Ci1pbnQgICAgICAgICAgIHNodXRkb3duKGludCwgaW50KSAgMjkzLC0xLDE4MgotaW50ICAgICAgICAgICBzZXRzb2Nrb3B0KGludCwgaW50LCBpbnQsIGNvbnN0IHZvaWQgKiwgc29ja2xlbl90KSAgMjk0LC0xLDE4MQotaW50ICAgICAgICAgICBnZXRzb2Nrb3B0KGludCwgaW50LCBpbnQsIHZvaWQgKiwgc29ja2xlbl90ICopICAgIDI5NSwtMSwxNzMKLWludCAgICAgICAgICAgc2VuZG1zZyhpbnQsIGNvbnN0IHN0cnVjdCBtc2doZHIgKiwgdW5zaWduZWQgaW50KSAgMjk2LC0xLDE3OQotaW50ICAgICAgICAgICByZWN2bXNnKGludCwgc3RydWN0IG1zZ2hkciAqLCB1bnNpZ25lZCBpbnQpICAgMjk3LC0xLDE3NworaW50ICAgICAgICAgICBzb2NrZXQoaW50LCBpbnQsIGludCkgICAgICAgICAgICAgIDEsLTEsMQoraW50ICAgICAgICAgICBzb2NrZXRwYWlyKGludCwgaW50LCBpbnQsIGludCopICAgIDEsLTEsMQoraW50ICAgICAgICAgICBiaW5kKGludCwgc3RydWN0IHNvY2thZGRyICosIGludCkgIDEsLTEsMQoraW50ICAgICAgICAgICBjb25uZWN0KGludCwgc3RydWN0IHNvY2thZGRyICosIHNvY2tsZW5fdCkgICAxLC0xLDEKK2ludCAgICAgICAgICAgbGlzdGVuKGludCwgaW50KSAgICAgICAgICAgICAgICAgICAxLC0xLDEKK2ludCAgICAgICAgICAgYWNjZXB0KGludCwgc3RydWN0IHNvY2thZGRyICosIHNvY2tsZW5fdCAqKSAgMSwtMSwxCitpbnQgICAgICAgICAgIGdldHNvY2tuYW1lKGludCwgc3RydWN0IHNvY2thZGRyICosIHNvY2tsZW5fdCAqKSAgMSwtMSwxCitpbnQgICAgICAgICAgIGdldHBlZXJuYW1lKGludCwgc3RydWN0IHNvY2thZGRyICosIHNvY2tsZW5fdCAqKSAgMSwtMSwxCitpbnQgICAgICAgICAgIHNlbmR0byhpbnQsIGNvbnN0IHZvaWQgKiwgc2l6ZV90LCBpbnQsIGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqLCBzb2NrbGVuX3QpICAxLC0xLDEKK2ludCAgICAgICAgICAgcmVjdmZyb20oaW50LCB2b2lkICosIHNpemVfdCwgdW5zaWduZWQgaW50LCBzdHJ1Y3Qgc29ja2FkZHIgKiwgc29ja2xlbl90ICopICAxLC0xLDEKK2ludCAgICAgICAgICAgc2h1dGRvd24oaW50LCBpbnQpICAxLC0xLDEKK2ludCAgICAgICAgICAgc2V0c29ja29wdChpbnQsIGludCwgaW50LCBjb25zdCB2b2lkICosIHNvY2tsZW5fdCkgIDEsLTEsMQoraW50ICAgICAgICAgICBnZXRzb2Nrb3B0KGludCwgaW50LCBpbnQsIHZvaWQgKiwgc29ja2xlbl90ICopICAgIDEsLTEsMQoraW50ICAgICAgICAgICBzZW5kbXNnKGludCwgY29uc3Qgc3RydWN0IG1zZ2hkciAqLCB1bnNpZ25lZCBpbnQpICAxLC0xLDEKK2ludCAgICAgICAgICAgcmVjdm1zZyhpbnQsIHN0cnVjdCBtc2doZHIgKiwgdW5zaWduZWQgaW50KSAgIDEsLTEsMQogCiAjIHNvY2tldHMgZm9yIHg4Ni4gVGhlc2UgYXJlIGRvbmUgYXMgYW4gImluZGV4ZWQiIGNhbGwgdG8gc29ja2V0Y2FsbCBzeXNjYWxsLgotaW50ICAgICAgICAgICBzb2NrZXQ6c29ja2V0Y2FsbDoxIChpbnQsIGludCwgaW50KSAtMSwxMDIsLTEKLWludCAgICAgICAgICAgYmluZDpzb2NrZXRjYWxsOjIgKGludCwgc3RydWN0IHNvY2thZGRyICosIGludCkgIC0xLDEwMiwtMQotaW50ICAgICAgICAgICBjb25uZWN0OnNvY2tldGNhbGw6MyhpbnQsIHN0cnVjdCBzb2NrYWRkciAqLCBzb2NrbGVuX3QpICAgLTEsMTAyLC0xCi1pbnQgICAgICAgICAgIGxpc3Rlbjpzb2NrZXRjYWxsOjQoaW50LCBpbnQpICAgICAgICAgICAgICAgICAgIC0xLDEwMiwtMQotaW50ICAgICAgICAgICBhY2NlcHQ6c29ja2V0Y2FsbDo1KGludCwgc3RydWN0IHNvY2thZGRyICosIHNvY2tsZW5fdCAqKSAgLTEsMTAyLC0xCi1pbnQgICAgICAgICAgIGdldHNvY2tuYW1lOnNvY2tldGNhbGw6NihpbnQsIHN0cnVjdCBzb2NrYWRkciAqLCBzb2NrbGVuX3QgKikgIC0xLDEwMiwtMQotaW50ICAgICAgICAgICBnZXRwZWVybmFtZTpzb2NrZXRjYWxsOjcoaW50LCBzdHJ1Y3Qgc29ja2FkZHIgKiwgc29ja2xlbl90ICopICAtMSwxMDIsLTEKLWludCAgICAgICAgICAgc29ja2V0cGFpcjpzb2NrZXRjYWxsOjgoaW50LCBpbnQsIGludCwgaW50KikgICAgLTEsMTAyLC0xCi1pbnQgICAgICAgICAgIHNlbmR0bzpzb2NrZXRjYWxsOjExKGludCwgY29uc3Qgdm9pZCAqLCBzaXplX3QsIGludCwgY29uc3Qgc3RydWN0IHNvY2thZGRyICosIHNvY2tsZW5fdCkgIC0xLDEwMiwtMQotaW50ICAgICAgICAgICByZWN2ZnJvbTpzb2NrZXRjYWxsOjEyKGludCwgdm9pZCAqLCBzaXplX3QsIHVuc2lnbmVkIGludCwgc3RydWN0IHNvY2thZGRyICosIHNvY2tsZW5fdCAqKSAgLTEsMTAyLC0xCi1pbnQgICAgICAgICAgIHNodXRkb3duOnNvY2tldGNhbGw6MTMoaW50LCBpbnQpICAtMSwxMDIsLTEKLWludCAgICAgICAgICAgc2V0c29ja29wdDpzb2NrZXRjYWxsOjE0KGludCwgaW50LCBpbnQsIGNvbnN0IHZvaWQgKiwgc29ja2xlbl90KSAgLTEsMTAyLC0xCi1pbnQgICAgICAgICAgIGdldHNvY2tvcHQ6c29ja2V0Y2FsbDoxNShpbnQsIGludCwgaW50LCB2b2lkICosIHNvY2tsZW5fdCAqKSAgICAtMSwxMDIsLTEKLWludCAgICAgICAgICAgc2VuZG1zZzpzb2NrZXRjYWxsOjE2KGludCwgY29uc3Qgc3RydWN0IG1zZ2hkciAqLCB1bnNpZ25lZCBpbnQpICAtMSwxMDIsLTEKLWludCAgICAgICAgICAgcmVjdm1zZzpzb2NrZXRjYWxsOjE3KGludCwgc3RydWN0IG1zZ2hkciAqLCB1bnNpZ25lZCBpbnQpICAgLTEsMTAyLC0xCitpbnQgICAgICAgICAgIHNvY2tldDpzb2NrZXRjYWxsOjEgKGludCwgaW50LCBpbnQpIC0xLDEsLTEKK2ludCAgICAgICAgICAgYmluZDpzb2NrZXRjYWxsOjIgKGludCwgc3RydWN0IHNvY2thZGRyICosIGludCkgIC0xLDEsLTEKK2ludCAgICAgICAgICAgY29ubmVjdDpzb2NrZXRjYWxsOjMoaW50LCBzdHJ1Y3Qgc29ja2FkZHIgKiwgc29ja2xlbl90KSAgIC0xLDEsLTEKK2ludCAgICAgICAgICAgbGlzdGVuOnNvY2tldGNhbGw6NChpbnQsIGludCkgICAgICAgICAgICAgICAgICAgLTEsMSwtMQoraW50ICAgICAgICAgICBhY2NlcHQ6c29ja2V0Y2FsbDo1KGludCwgc3RydWN0IHNvY2thZGRyICosIHNvY2tsZW5fdCAqKSAgLTEsMSwtMQoraW50ICAgICAgICAgICBnZXRzb2NrbmFtZTpzb2NrZXRjYWxsOjYoaW50LCBzdHJ1Y3Qgc29ja2FkZHIgKiwgc29ja2xlbl90ICopICAtMSwxLC0xCitpbnQgICAgICAgICAgIGdldHBlZXJuYW1lOnNvY2tldGNhbGw6NyhpbnQsIHN0cnVjdCBzb2NrYWRkciAqLCBzb2NrbGVuX3QgKikgIC0xLDEsLTEKK2ludCAgICAgICAgICAgc29ja2V0cGFpcjpzb2NrZXRjYWxsOjgoaW50LCBpbnQsIGludCwgaW50KikgICAgLTEsMSwtMQoraW50ICAgICAgICAgICBzZW5kdG86c29ja2V0Y2FsbDoxMShpbnQsIGNvbnN0IHZvaWQgKiwgc2l6ZV90LCBpbnQsIGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqLCBzb2NrbGVuX3QpICAtMSwxLC0xCitpbnQgICAgICAgICAgIHJlY3Zmcm9tOnNvY2tldGNhbGw6MTIoaW50LCB2b2lkICosIHNpemVfdCwgdW5zaWduZWQgaW50LCBzdHJ1Y3Qgc29ja2FkZHIgKiwgc29ja2xlbl90ICopICAtMSwxLC0xCitpbnQgICAgICAgICAgIHNodXRkb3duOnNvY2tldGNhbGw6MTMoaW50LCBpbnQpICAtMSwxLC0xCitpbnQgICAgICAgICAgIHNldHNvY2tvcHQ6c29ja2V0Y2FsbDoxNChpbnQsIGludCwgaW50LCBjb25zdCB2b2lkICosIHNvY2tsZW5fdCkgIC0xLDEsLTEKK2ludCAgICAgICAgICAgZ2V0c29ja29wdDpzb2NrZXRjYWxsOjE1KGludCwgaW50LCBpbnQsIHZvaWQgKiwgc29ja2xlbl90ICopICAgIC0xLDEsLTEKK2ludCAgICAgICAgICAgc2VuZG1zZzpzb2NrZXRjYWxsOjE2KGludCwgY29uc3Qgc3RydWN0IG1zZ2hkciAqLCB1bnNpZ25lZCBpbnQpICAtMSwxLC0xCitpbnQgICAgICAgICAgIHJlY3Ztc2c6c29ja2V0Y2FsbDoxNyhpbnQsIHN0cnVjdCBtc2doZHIgKiwgdW5zaWduZWQgaW50KSAgIC0xLDEsLTEKIAogIyBzY2hlZHVsZXIgJiByZWFsLXRpbWUKLWludCBzY2hlZF9zZXRzY2hlZHVsZXIocGlkX3QgcGlkLCBpbnQgcG9saWN5LCBjb25zdCBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKnBhcmFtKSAgMTU2LDE1NiwxNjAKLWludCBzY2hlZF9nZXRzY2hlZHVsZXIocGlkX3QgcGlkKSAgMTU3LDE1NywxNjEKLWludCBzY2hlZF95aWVsZCh2b2lkKSAgMTU4LDE1OCwxNjIKLWludCBzY2hlZF9zZXRwYXJhbShwaWRfdCBwaWQsIGNvbnN0IHN0cnVjdCBzY2hlZF9wYXJhbSAqcGFyYW0pICAxNTQsMTU0LDE1OAotaW50IHNjaGVkX2dldHBhcmFtKHBpZF90IHBpZCwgc3RydWN0IHNjaGVkX3BhcmFtICpwYXJhbSkgIDE1NSwxNTUsMTU5Ci1pbnQgc2NoZWRfZ2V0X3ByaW9yaXR5X21heChpbnQgcG9saWN5KSAgMTU5LDE1OSwxNjMKLWludCBzY2hlZF9nZXRfcHJpb3JpdHlfbWluKGludCBwb2xpY3kpICAxNjAsMTYwLDE2NAotaW50IHNjaGVkX3JyX2dldF9pbnRlcnZhbChwaWRfdCBwaWQsIHN0cnVjdCB0aW1lc3BlYyAqaW50ZXJ2YWwpICAxNjEsMTYxLDE2NQotaW50IHNjaGVkX3NldGFmZmluaXR5KHBpZF90IHBpZCwgc2l6ZV90IHNldHNpemUsIGNvbnN0IGNwdV9zZXRfdCogc2V0KSAyNDEsMjQxLDIzOQotaW50IF9fc2NoZWRfZ2V0YWZmaW5pdHk6c2NoZWRfZ2V0YWZmaW5pdHkocGlkX3QgcGlkLCBzaXplX3Qgc2V0c2l6ZSwgY3B1X3NldF90KiBzZXQpICAyNDIsMjQyLDI0MAotaW50IF9fZ2V0Y3B1OmdldGNwdSh1bnNpZ25lZCAqY3B1LCB1bnNpZ25lZCAqbm9kZSwgdm9pZCAqdW51c2VkKSAzNDUsMzE4LDMxMgoraW50IHNjaGVkX3NldHNjaGVkdWxlcihwaWRfdCBwaWQsIGludCBwb2xpY3ksIGNvbnN0IHN0cnVjdCBzY2hlZF9wYXJhbSAqcGFyYW0pICAxCitpbnQgc2NoZWRfZ2V0c2NoZWR1bGVyKHBpZF90IHBpZCkgIDEKK2ludCBzY2hlZF95aWVsZCh2b2lkKSAgMQoraW50IHNjaGVkX3NldHBhcmFtKHBpZF90IHBpZCwgY29uc3Qgc3RydWN0IHNjaGVkX3BhcmFtICpwYXJhbSkgIDEKK2ludCBzY2hlZF9nZXRwYXJhbShwaWRfdCBwaWQsIHN0cnVjdCBzY2hlZF9wYXJhbSAqcGFyYW0pICAxCitpbnQgc2NoZWRfZ2V0X3ByaW9yaXR5X21heChpbnQgcG9saWN5KSAgMQoraW50IHNjaGVkX2dldF9wcmlvcml0eV9taW4oaW50IHBvbGljeSkgIDEKK2ludCBzY2hlZF9ycl9nZXRfaW50ZXJ2YWwocGlkX3QgcGlkLCBzdHJ1Y3QgdGltZXNwZWMgKmludGVydmFsKSAgMQoraW50IHNjaGVkX3NldGFmZmluaXR5KHBpZF90IHBpZCwgc2l6ZV90IHNldHNpemUsIGNvbnN0IGNwdV9zZXRfdCogc2V0KSAxCitpbnQgX19zY2hlZF9nZXRhZmZpbml0eTpzY2hlZF9nZXRhZmZpbml0eShwaWRfdCBwaWQsIHNpemVfdCBzZXRzaXplLCBjcHVfc2V0X3QqIHNldCkgIDEKK2ludCBfX2dldGNwdTpnZXRjcHUodW5zaWduZWQgKmNwdSwgdW5zaWduZWQgKm5vZGUsIHZvaWQgKnVudXNlZCkgMQogCiAjIGlvIHByaW9yaXRpZXMKLWludCBpb3ByaW9fc2V0KGludCB3aGljaCwgaW50IHdobywgaW50IGlvcHJpbykgMzE0LDI4OSwzMTQKLWludCBpb3ByaW9fZ2V0KGludCB3aGljaCwgaW50IHdobykgMzE1LDI5MCwzMTUKK2ludCBpb3ByaW9fc2V0KGludCB3aGljaCwgaW50IHdobywgaW50IGlvcHJpbykgMQoraW50IGlvcHJpb19nZXQoaW50IHdoaWNoLCBpbnQgd2hvKSAxCiAKICMgb3RoZXIKLWludCAgICAgdW5hbWUoc3RydWN0IHV0c25hbWUgKikgIDEyMgotcGlkX3QgICBfX3dhaXQ0OndhaXQ0KHBpZF90IHBpZCwgaW50ICpzdGF0dXMsIGludCBvcHRpb25zLCBzdHJ1Y3QgcnVzYWdlICpydXNhZ2UpICAgMTE0Ci1tb2RlX3QgIHVtYXNrKG1vZGVfdCkgIDYwCi1pbnQgICAgICBfX3JlYm9vdDpyZWJvb3QoaW50LCBpbnQsIGludCwgdm9pZCAqKSAgODgKLWludCAgICAgX19zeXNsb2c6c3lzbG9nKGludCwgY2hhciAqLCBpbnQpICAxMDMKLWludCAgICAgaW5pdF9tb2R1bGUodm9pZCAqLCB1bnNpZ25lZCBsb25nLCBjb25zdCBjaGFyICopICAxMjgKLWludCAgICAgZGVsZXRlX21vZHVsZShjb25zdCBjaGFyKiwgdW5zaWduZWQgaW50KSAgIDEyOQotaW50ICAgICBrbG9nY3RsOnN5c2xvZyhpbnQsIGNoYXIgKiwgaW50KSAgIDEwMwotaW50ICAgICBzeXNpbmZvKHN0cnVjdCBzeXNpbmZvICopICAxMTYKLWludCAgICAgcGVyc29uYWxpdHkodW5zaWduZWQgbG9uZykgIDEzNgoraW50ICAgICB1bmFtZShzdHJ1Y3QgdXRzbmFtZSAqKSAgMQorbW9kZV90ICB1bWFzayhtb2RlX3QpICAxCitpbnQgICAgICBfX3JlYm9vdDpyZWJvb3QoaW50LCBpbnQsIGludCwgdm9pZCAqKSAgMQoraW50ICAgICBfX3N5c2xvZzpzeXNsb2coaW50LCBjaGFyICosIGludCkgIDEKK2ludCAgICAgaW5pdF9tb2R1bGUodm9pZCAqLCB1bnNpZ25lZCBsb25nLCBjb25zdCBjaGFyICopICAxCitpbnQgICAgIGRlbGV0ZV9tb2R1bGUoY29uc3QgY2hhciosIHVuc2lnbmVkIGludCkgICAxCitpbnQgICAgIGtsb2djdGw6c3lzbG9nKGludCwgY2hhciAqLCBpbnQpICAgMQoraW50ICAgICBzeXNpbmZvKHN0cnVjdCBzeXNpbmZvICopICAxCitpbnQgICAgIHBlcnNvbmFsaXR5KHVuc2lnbmVkIGxvbmcpICAxCitsb25nICAgIHBlcmZfZXZlbnRfb3BlbihzdHJ1Y3QgcGVyZl9ldmVudF9hdHRyICphdHRyX3VwdHIsIHBpZF90IHBpZCwgaW50IGNwdSwgaW50IGdyb3VwX2ZkLCB1bnNpZ25lZCBsb25nIGZsYWdzKSAxCiAKICMgZnV0ZXgKLWludAlmdXRleCh2b2lkICosIGludCwgaW50LCB2b2lkICosIHZvaWQgKiwgaW50KSAyNDAsMjQwLDIzOAoraW50CWZ1dGV4KHZvaWQgKiwgaW50LCBpbnQsIHZvaWQgKiwgdm9pZCAqLCBpbnQpIDEKIAogIyBlcG9sbAotaW50ICAgICBlcG9sbF9jcmVhdGUoaW50IHNpemUpICAgICAyNTAsMjU0LDI0OAotaW50ICAgICBlcG9sbF9jdGwoaW50IGVwZmQsIGludCBvcCwgaW50IGZkLCBzdHJ1Y3QgZXBvbGxfZXZlbnQgKmV2ZW50KSAgICAyNTEsMjU1LDI0OQotaW50ICAgICBlcG9sbF93YWl0KGludCBlcGZkLCBzdHJ1Y3QgZXBvbGxfZXZlbnQgKmV2ZW50cywgaW50IG1heCwgaW50IHRpbWVvdXQpICAgMjUyLDI1NiwyNTAKK2ludCAgICAgZXBvbGxfY3JlYXRlKGludCBzaXplKSAgICAgMQoraW50ICAgICBlcG9sbF9jdGwoaW50IGVwZmQsIGludCBvcCwgaW50IGZkLCBzdHJ1Y3QgZXBvbGxfZXZlbnQgKmV2ZW50KSAgICAxCitpbnQgICAgIGVwb2xsX3dhaXQoaW50IGVwZmQsIHN0cnVjdCBlcG9sbF9ldmVudCAqZXZlbnRzLCBpbnQgbWF4LCBpbnQgdGltZW91dCkgICAxCiAKLWludCAgICAgaW5vdGlmeV9pbml0KHZvaWQpICAgICAgMzE2LDI5MSwyODQKLWludCAgICAgaW5vdGlmeV9hZGRfd2F0Y2goaW50LCBjb25zdCBjaGFyICosIHVuc2lnbmVkIGludCkgIDMxNywyOTIsMjg1Ci1pbnQgICAgIGlub3RpZnlfcm1fd2F0Y2goaW50LCB1bnNpZ25lZCBpbnQpICAzMTgsMjkzLDI4NgoraW50ICAgICBpbm90aWZ5X2luaXQodm9pZCkgICAgICAxCitpbnQgICAgIGlub3RpZnlfYWRkX3dhdGNoKGludCwgY29uc3QgY2hhciAqLCB1bnNpZ25lZCBpbnQpICAxCitpbnQgICAgIGlub3RpZnlfcm1fd2F0Y2goaW50LCB1bnNpZ25lZCBpbnQpICAxCiAKLWludCAgICAgcG9sbChzdHJ1Y3QgcG9sbGZkICosIHVuc2lnbmVkIGludCwgbG9uZykgIDE2OCwxNjgsMTg4CitpbnQgICAgIHBvbGwoc3RydWN0IHBvbGxmZCAqLCB1bnNpZ25lZCBpbnQsIGxvbmcpICAxCiAKLWludCAgICAgZXZlbnRmZDpldmVudGZkMih1bnNpZ25lZCBpbnQsIGludCkgIDM1NiwzMjgsMzI1CitpbnQgICAgIGV2ZW50ZmQ6ZXZlbnRmZDIodW5zaWduZWQgaW50LCBpbnQpICAxCiAKICMgQVJNLXNwZWNpZmljIEFSTV9OUl9CQVNFID09IDB4MGYwMDAwID09IDk4MzA0MAotaW50ICAgICBfX3NldF90bHM6QVJNX3NldF90bHModm9pZCopICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOTgzMDQ1LC0xLC0xCi1pbnQgICAgIGNhY2hlZmx1c2g6QVJNX2NhY2hlZmx1c2gobG9uZyBzdGFydCwgbG9uZyBlbmQsIGxvbmcgZmxhZ3MpICA5ODMwNDIsLTEsLTEKK2ludCAgICAgX19zZXRfdGxzOl9fQVJNX05SX3NldF90bHModm9pZCopICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwtMSwtMQoraW50ICAgICBjYWNoZWZsdXNoOl9fQVJNX05SX2NhY2hlZmx1c2gobG9uZyBzdGFydCwgbG9uZyBlbmQsIGxvbmcgZmxhZ3MpICAxLC0xLC0xCiAKICMgTUlQUy1zcGVjaWZpYwotaW50CV9mbHVzaF9jYWNoZTpjYWNoZWZsdXNoKGNoYXIgKmFkZHIsIGNvbnN0IGludCBuYnl0ZXMsIGNvbnN0IGludCBvcCkJLTEsLTEsMTQ3Ci1pbnQJc3lzY2FsbChpbnQgbnVtYmVyLC4uLikgLTEsLTEsMAoraW50ICAgICBfZmx1c2hfY2FjaGU6Y2FjaGVmbHVzaChjaGFyICphZGRyLCBjb25zdCBpbnQgbmJ5dGVzLCBjb25zdCBpbnQgb3ApIC0xLC0xLDEKK2ludCAgICAgc3lzY2FsbChpbnQgbnVtYmVyLC4uLikgLTEsLTEsMQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9hcm0ubWsgYi9saWJjL2FyY2gtYXJtL2FybS5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYTIxODVmCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9hcm0ubWsKQEAgLTAsMCArMSwzNCBAQAorX0xJQkNfQVJDSF9DT01NT05fU1JDX0ZJTEVTIDo9IFwKKyAgICBhcmNoLWFybS9iaW9uaWMvYWJvcnRfYXJtLlMgXAorICAgIGFyY2gtYXJtL2Jpb25pYy9hdG9taWNzX2FybS5jIFwKKyAgICBhcmNoLWFybS9iaW9uaWMvY2xvbmUuUyBcCisgICAgYXJjaC1hcm0vYmlvbmljL2VhYmkuYyBcCisgICAgYXJjaC1hcm0vYmlvbmljL19leGl0X3dpdGhfc3RhY2tfdGVhcmRvd24uUyBcCisgICAgYXJjaC1hcm0vYmlvbmljL2Zmcy5TIFwKKyAgICBhcmNoLWFybS9iaW9uaWMvZnV0ZXhfYXJtLlMgXAorICAgIGFyY2gtYXJtL2Jpb25pYy9fX2dldF9zcC5TIFwKKyAgICBhcmNoLWFybS9iaW9uaWMva2lsbC5TIFwKKyAgICBhcmNoLWFybS9iaW9uaWMvbGliZ2NjX2NvbXBhdC5jIFwKKyAgICBhcmNoLWFybS9iaW9uaWMvbWVtY21wMTYuUyBcCisgICAgYXJjaC1hcm0vYmlvbmljL21lbWNtcC5TIFwKKyAgICBhcmNoLWFybS9iaW9uaWMvX3NldGptcC5TIFwKKyAgICBhcmNoLWFybS9iaW9uaWMvc2V0am1wLlMgXAorICAgIGFyY2gtYXJtL2Jpb25pYy9zaWdzZXRqbXAuUyBcCisgICAgYXJjaC1hcm0vYmlvbmljL3N0cmNweS5TIFwKKyAgICBhcmNoLWFybS9iaW9uaWMvc3lzY2FsbC5TIFwKKyAgICBhcmNoLWFybS9iaW9uaWMvdGdraWxsLlMgXAorICAgIGFyY2gtYXJtL2Jpb25pYy90a2lsbC5TIFwKKworIyBUaGVzZSBhcmUgdXNlZCBieSB0aGUgc3RhdGljIGFuZCBkeW5hbWljIHZlcnNpb25zIG9mIHRoZSBsaWJjCisjIHJlc3BlY3RpdmVseS4KK19MSUJDX0FSQ0hfU1RBVElDX1NSQ19GSUxFUyA6PSBcCisgICAgYXJjaC1hcm0vYmlvbmljL2V4aWR4X3N0YXRpYy5jCisKK19MSUJDX0FSQ0hfRFlOQU1JQ19TUkNfRklMRVMgOj0gXAorICAgIGFyY2gtYXJtL2Jpb25pYy9leGlkeF9keW5hbWljLmMKKworaWZlcSAoJChzdHJpcCAkKHdpbGRjYXJkIGJpb25pYy9saWJjL2FyY2gtYXJtLyQoVEFSR0VUX0NQVV9WQVJJQU5UKS8kKFRBUkdFVF9DUFVfVkFSSUFOVCkubWspKSwpCiskKGVycm9yICJUQVJHRVRfQ1BVX1ZBUklBTlQgbm90IHNldCBvciBzZXQgdG8gYW4gdW5rbm93biB2YWx1ZS4gUG9zc2libGUgdmFsdWVzIGFyZSBjb3J0ZXgtYTcsIGNvcnRleC1hOCwgY29ydGV4LWE5LCBjb3J0ZXgtYTE1LCBrcmFpdC4gVXNlIGdlbmVyaWMgZm9yIGRldmljZXMgdGhhdCBkbyBub3QgaGF2ZSBhIENQVSBzaW1pbGFyIHRvIGFueSBvZiB0aGUgc3VwcG9ydGVkIGNwdSB2YXJpYW50cy4iKQorZW5kaWYKKworaW5jbHVkZSBiaW9uaWMvbGliYy9hcmNoLWFybS8kKFRBUkdFVF9DUFVfVkFSSUFOVCkvJChUQVJHRVRfQ1BVX1ZBUklBTlQpLm1rCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL2Jpb25pYy9fX2dldF9wYy5TIGIvbGliYy9hcmNoLWFybS9iaW9uaWMvX19nZXRfcGMuUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGZjODkyOS4uMDAwMDAwMAotLS0gYS9saWJjL2FyY2gtYXJtL2Jpb25pYy9fX2dldF9wYy5TCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqICAgIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKLSAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi0gKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCi0gKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAotICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCi0gKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKLSAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotLmdsb2JhbCBfX2dldF9wYwotLnR5cGUgX19nZXRfcGMsICVmdW5jdGlvbgotCi1fX2dldF9wYzoKLQltb3YgcjAsIHBjCi0JYnggbHIKLQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9iaW9uaWMvX19nZXRfc3AuUyBiL2xpYmMvYXJjaC1hcm0vYmlvbmljL19fZ2V0X3NwLlMKaW5kZXggMGEzMTNhMy4uMmE3ZTdiNyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9iaW9uaWMvX19nZXRfc3AuUworKysgYi9saWJjL2FyY2gtYXJtL2Jpb25pYy9fX2dldF9zcC5TCkBAIC0yNSwxMCArMjUsMTAgQEAKICAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgogICogU1VDSCBEQU1BR0UuCiAgKi8KLS5nbG9iYWwgX19nZXRfc3AKLS50eXBlIF9fZ2V0X3NwLCAlZnVuY3Rpb24KIAotX19nZXRfc3A6Ci0JbW92IHIwLCBzcAotCWJ4IGxyCisjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KIAorRU5UUlkoX19nZXRfc3ApCisgIG1vdiByMCwgc3AKKyAgYnggbHIKK0VORChfX2dldF9zcCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vYmlvbmljL19leGl0X3dpdGhfc3RhY2tfdGVhcmRvd24uUyBiL2xpYmMvYXJjaC1hcm0vYmlvbmljL19leGl0X3dpdGhfc3RhY2tfdGVhcmRvd24uUwppbmRleCBjMmQ3NzU4Li5hYzc5ZDQzIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL2Jpb25pYy9fZXhpdF93aXRoX3N0YWNrX3RlYXJkb3duLlMKKysrIGIvbGliYy9hcmNoLWFybS9iaW9uaWMvX2V4aXRfd2l0aF9zdGFja190ZWFyZG93bi5TCkBAIC0yNSwyNyArMjUsMjAgQEAKICAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgogICogU1VDSCBEQU1BR0UuCiAgKi8KLSNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CisKICNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KIAotQCB2b2lkIF9leGl0X3dpdGhfc3RhY2tfdGVhcmRvd24odm9pZCAqIHN0YWNrQmFzZSwgaW50IHN0YWNrU2l6ZSwgaW50IHJldENvZGUpCisvLyB2b2lkIF9leGl0X3dpdGhfc3RhY2tfdGVhcmRvd24odm9pZCogc3RhY2tCYXNlLCBpbnQgc3RhY2tTaXplLCBpbnQgcmV0Q29kZSkKIEVOVFJZKF9leGl0X3dpdGhfc3RhY2tfdGVhcmRvd24pCi0KLSNpZiBfX0FSTV9FQUJJX18KICAgICBtb3YgICAgIGxyLCByMgogICAgIGxkciAgICAgcjcsID1fX05SX211bm1hcAotICAgIHN3aSAgICAgIzAgICAgICAgICAgICAgIEAgdGhlIHN0YWNrIGlzIGRlc3Ryb3llZCBieSB0aGlzIGNhbGwKKyAgICBzd2kgICAgICMwICAgICAgICAgICAgICAvLyB0aGUgc3RhY2sgaXMgZGVzdHJveWVkIGJ5IHRoaXMgY2FsbAogICAgIG1vdiAgICAgcjAsIGxyCiAgICAgbGRyICAgICByNywgPV9fTlJfZXhpdAogICAgIHN3aSAgICAgIzAKLSNlbHNlCi0gICAgbW92ICAgICBsciwgcjIKLSAgICBzd2kgICAgICMgX19OUl9tdW5tYXAgICBAIHRoZSBzdGFjayBpcyBkZXN0cm95ZWQgYnkgdGhpcyBjYWxsCi0gICAgbW92ICAgICByMCwgbHIKLSAgICBzd2kgICAgICMgX19OUl9leGl0Ci0jZW5kaWYKIAotICAgIEAgZXhpdCgpIHNob3VsZCBuZXZlciByZXR1cm4sIGNhdXNlIGEgY3Jhc2ggaWYgaXQgZG9lcwotICAgIG1vdgkJcjAsICMwCi0gICAgbGRyCQlyMCwgW3IwXQorICAgIC8vIGV4aXQoKSBzaG91bGQgbmV2ZXIgcmV0dXJuLCBjYXVzZSBhIGNyYXNoIGlmIGl0IGRvZXMKKyAgICBtb3YgICAgIHIwLCAjMAorICAgIGxkciAgICAgcjAsIFtyMF0KIEVORChfZXhpdF93aXRoX3N0YWNrX3RlYXJkb3duKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9iaW9uaWMvYWJvcnRfYXJtLlMgYi9saWJjL2FyY2gtYXJtL2Jpb25pYy9hYm9ydF9hcm0uUwppbmRleCA1MWIwODcxLi5lMWFiODZiIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL2Jpb25pYy9hYm9ydF9hcm0uUworKysgYi9saWJjL2FyY2gtYXJtL2Jpb25pYy9hYm9ydF9hcm0uUwpAQCAtMzgsNSArMzgsNSBAQAogRU5UUlkoYWJvcnQpCiAgICAgLnNhdmUgICB7cjMsIHIxNH0KICAgICBzdG1mZCAgIHNwISwge3IzLCByMTR9Ci0gICAgYmx4ICAgICBQSUNfU1lNKF9DX0xBQkVMKF9fbGliY19hbmRyb2lkX2Fib3J0KSwgUExUKQorICAgIGJsICAgICAgUElDX1NZTShfQ19MQUJFTChfX2xpYmNfYW5kcm9pZF9hYm9ydCksIFBMVCkKIEVORChhYm9ydCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vYmlvbmljL2F0ZXhpdC5TIGIvbGliYy9hcmNoLWFybS9iaW9uaWMvYXRleGl0LlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJlZWE2ODUuLjAwMDAwMDAKLS0tIGEvbGliYy9hcmNoLWFybS9iaW9uaWMvYXRleGl0LlMKKysrIC9kZXYvbnVsbApAQCAtMSw2MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogICAgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUwotICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKLSAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCi0gKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKLSAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAotICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0gKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgQ1JUX0xFR0FDWV9XT1JLQVJPVU5ECi0JLmFyY2ggYXJtdjV0ZQotCS5mcHUgc29mdHZmcAotCS5lYWJpX2F0dHJpYnV0ZSAyMCwgMQotCS5lYWJpX2F0dHJpYnV0ZSAyMSwgMQotCS5lYWJpX2F0dHJpYnV0ZSAyMywgMwotCS5lYWJpX2F0dHJpYnV0ZSAyNCwgMQotCS5lYWJpX2F0dHJpYnV0ZSAyNSwgMQotCS5lYWJpX2F0dHJpYnV0ZSAyNiwgMgotCS5lYWJpX2F0dHJpYnV0ZSAzMCwgNAotCS5lYWJpX2F0dHJpYnV0ZSAxOCwgNAotCS5oaWRkZW4JYXRleGl0Ci0JLmNvZGUJMTYKLQkudGh1bWJfZnVuYwotRU5UUlkoYXRleGl0KQotLkxGQjA6Ci0JLnNhdmUJe3I0LCBscn0KLQlwdXNoCXtyNCwgbHJ9Ci0uTENGSTA6Ci0JbGRyCXIzLCAuTDMKLQltb3YJcjEsICMwCi0JQCBzcCBuZWVkZWQgZm9yIHByb2xvZ3VlCi0uTFBJQzA6Ci0JYWRkCXIzLCBwYwotCWxkcglyMiwgW3IzXQotCWJsCV9fY3hhX2F0ZXhpdAotCXBvcAl7cjQsIHBjfQotLkw0OgotCS5hbGlnbgkyCi0uTDM6Ci0JLndvcmQJX19kc29faGFuZGxlLSguTFBJQzArNCkKLS5MRkUwOgotRU5EKGF0ZXhpdCkKLSNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9iaW9uaWMvYXRleGl0LmggYi9saWJjL2FyY2gtYXJtL2Jpb25pYy9hdGV4aXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYzc3NmE4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9iaW9uaWMvYXRleGl0LmgKQEAgLTAsMCArMSwzNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCitleHRlcm4gdm9pZCAqX19kc29faGFuZGxlOworCitfX2F0dHJpYnV0ZV9fICgodmlzaWJpbGl0eSAoImhpZGRlbiIpKSkKK2ludCBhdGV4aXQodm9pZCAoKmZ1bmMpKHZvaWQpKQoreworICByZXR1cm4gKF9fY3hhX2F0ZXhpdCgodm9pZCAoKikodm9pZCAqKSlmdW5jLCAodm9pZCAqKTAsICZfX2Rzb19oYW5kbGUpKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vYmlvbmljL2F0ZXhpdF9sZWdhY3kuYyBiL2xpYmMvYXJjaC1hcm0vYmlvbmljL2F0ZXhpdF9sZWdhY3kuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMzVjNjhkCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9iaW9uaWMvYXRleGl0X2xlZ2FjeS5jCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTIgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHByaXZhdGUvbGliY19sb2dnaW5nLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKworLyoKKyAqIFRoaXMgc291cmNlIGZpbGUgc2hvdWxkIG9ubHkgYmUgaW5jbHVkZWQgYnkgbGliYy5zbywgaXRzIHB1cnBvc2UgaXMKKyAqIHRvIHN1cHBvcnQgbGVnYWN5IEFSTSBiaW5hcmllcyBieSBleHBvcnRpbmcgYSBwdWJsaWNseSB2aXNpYmxlCisgKiBpbXBsZW1lbnRhdGlvbiBvZiBhdGV4aXQoKS4KKyAqLworCitleHRlcm4gaW50IF9fY3hhX2F0ZXhpdCh2b2lkICgqZnVuYykodm9pZCAqKSwgdm9pZCAqYXJnLCB2b2lkICpkc28pOworCisvKgorICogUmVnaXN0ZXIgYSBmdW5jdGlvbiB0byBiZSBwZXJmb3JtZWQgYXQgZXhpdC4KKyAqLworaW50CithdGV4aXQodm9pZCAoKmZ1bmMpKHZvaWQpKQoreworICAgIC8qCisgICAgICogRXhpdCBmdW5jdGlvbnMgcXVldWVkIGJ5IHRoaXMgdmVyc2lvbiBvZiBhdGV4aXQgd2lsbCBub3QgYmUgY2FsbGVkCisgICAgICogb24gZGxjbG9zZSgpLCBhbmQgd2hlbiB0aGV5IGFyZSBjYWxsZWQgKGF0IHByb2dyYW0gZXhpdCksIHRoZQorICAgICAqIGNhbGxpbmcgbGlicmFyeSBtYXkgaGF2ZSBiZWVuIGRsY2xvc2UoKSdkLCBjYXVzaW5nIHRoZSBwcm9ncmFtIHRvCisgICAgICogY3Jhc2guCisgICAgICovCisgICAgc3RhdGljIGNoYXIgY29uc3Qgd2FybmluZ1tdID0gIldBUk5JTkc6IGdlbmVyaWMgYXRleGl0KCkgY2FsbGVkIGZyb20gbGVnYWN5IHNoYXJlZCBsaWJyYXJ5XG4iOworCisgICAgX19saWJjX2Zvcm1hdF9sb2coQU5EUk9JRF9MT0dfV0FSTiwgImxpYmMiLCB3YXJuaW5nKTsKKyAgICBmcHJpbnRmKHN0ZGVyciwgd2FybmluZyk7CisKKyAgICByZXR1cm4gKF9fY3hhX2F0ZXhpdCgodm9pZCAoKikodm9pZCAqKSlmdW5jLCBOVUxMLCBOVUxMKSk7Cit9CmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL2Jpb25pYy9hdG9taWNzX2FybS5TIGIvbGliYy9hcmNoLWFybS9iaW9uaWMvYXRvbWljc19hcm0uUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGQ5Y2JjZi4uMDAwMDAwMAotLS0gYS9saWJjL2FyY2gtYXJtL2Jpb25pYy9hdG9taWNzX2FybS5TCisrKyAvZGV2L251bGwKQEAgLTEsMjM2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0gKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiAgICBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCi0gKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQotICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAotICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKLSAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUwotICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECi0gKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0gKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KLSNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgotI2luY2x1ZGUgPG1hY2hpbmUvY3B1LWZlYXR1cmVzLmg+Ci0KLSNkZWZpbmUgRlVURVhfV0FJVCAwCi0jZGVmaW5lIEZVVEVYX1dBS0UgMQotCi0jaWYgZGVmaW5lZChfX0FSTV9IQVZFX0xEUkVYX1NUUkVYKQotLyoKLSAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogICAgICBBUk12NisgaW1wbGVtZW50YXRpb24KLSAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICovCi0KLS8qIHIwKGFkZHIpIC0+IHIwKG9sZCkgKi8KLUVOVFJZKF9fYXRvbWljX2RlYykKLSAgICBtb3YgICAgIHIxLCByMCAgICAgICAgICAgICAgICAgICAgICBAIGNvcHkgYWRkciBzbyB3ZSBkb24ndCBjbG9iYmVyIGl0Ci0xOiAgbGRyZXggICByMCwgW3IxXSAgICAgICAgICAgICAgICAgICAgQCBsb2FkIGN1cnJlbnQgdmFsdWUgaW50byByMAotICAgIHN1YiAgICAgcjIsIHIwLCAjMSAgICAgICAgICAgICAgICAgIEAgZ2VuZXJhdGUgbmV3IHZhbHVlIGludG8gcjIKLSAgICBzdHJleCAgIHIzLCByMiwgW3IxXSAgICAgICAgICAgICAgICBAIHRyeSB0byBzdG9yZSBuZXcgdmFsdWU7IHJlc3VsdCBpbiByMwotICAgIGNtcCAgICAgcjMsICMwICAgICAgICAgICAgICAgICAgICAgIEAgc3VjY2Vzcz8KLSAgICBieGVxICAgIGxyICAgICAgICAgICAgICAgICAgICAgICAgICBAIHllcywgcmV0dXJuCi0gICAgYiAgICAgICAxYiAgICAgICAgICAgICAgICAgICAgICAgICAgQCBubywgcmV0cnkKLUVORChfX2F0b21pY19kZWMpCi0KLS8qIHIwKGFkZHIpIC0+IHIwKG9sZCkgKi8KLUVOVFJZKF9fYXRvbWljX2luYykKLSAgICBtb3YgICAgIHIxLCByMAotMTogIGxkcmV4ICAgcjAsIFtyMV0KLSAgICBhZGQgICAgIHIyLCByMCwgIzEKLSAgICBzdHJleCAgIHIzLCByMiwgW3IxXQotICAgIGNtcCAgICAgcjMsICMwCi0gICAgYnhlcSAgICBscgotICAgIGIgICAgICAgMWIKLUVORChfX2F0b21pY19pbmMpCi0KLS8qIHIwKG9sZCkgcjEobmV3KSByMihhZGRyKSAtPiByMCh6ZXJvX2lmX3N1Y2NlZWRlZCkgKi8KLUVOVFJZKF9fYXRvbWljX2NtcHhjaGcpCi0xOiAgbW92ICAgICBpcCwgIzIgICAgICAgICAgICAgICAgICAgICAgQCBpcD0yIG1lYW5zICJuZXcgIT0gb2xkIgotICAgIGxkcmV4ICAgcjMsIFtyMl0gICAgICAgICAgICAgICAgICAgIEAgbG9hZCBjdXJyZW50IHZhbHVlIGludG8gcjMKLSAgICB0ZXEgICAgIHIwLCByMyAgICAgICAgICAgICAgICAgICAgICBAIG5ldyA9PSBvbGQ/Ci0gICAgc3RyZXhlcSBpcCwgcjEsIFtyMl0gICAgICAgICAgICAgICAgQCB5ZXMsIHRyeSBzdG9yZSwgc2V0IGlwIHRvIDAgb3IgMQotICAgIHRlcSAgICAgaXAsICMxICAgICAgICAgICAgICAgICAgICAgIEAgc3RyZXggZmFpbHVyZT8KLSAgICBiZXEgICAgIDFiICAgICAgICAgICAgICAgICAgICAgICAgICBAIHllcywgcmV0cnkKLSAgICBtb3YgICAgIHIwLCBpcCAgICAgICAgICAgICAgICAgICAgICBAIHJldHVybiAwIG9uIHN1Y2Nlc3MsIDIgb24gZmFpbHVyZQotICAgIGJ4ICAgICAgbHIKLUVORChfX2F0b21pY19jbXB4Y2hnKQotCi0vKiByMChuZXcpIHIxKGFkZHIpIC0+IHIwKG9sZCkgKi8KLUVOVFJZKF9fYXRvbWljX3N3YXApCi0xOiAgbGRyZXggICByMiwgW3IxXQotICAgIHN0cmV4ICAgcjMsIHIwLCBbcjFdCi0gICAgdGVxICAgICByMywgIzAKLSAgICBibmUgICAgIDFiCi0gICAgbW92ICAgICByMCwgcjIKLSAgICBieCAgICAgIGxyCi1FTkQoX19hdG9taWNfc3dhcCkKLQotI2Vsc2UgLypub3QgZGVmaW5lZCBfX0FSTV9IQVZFX0xEUkVYX1NUUkVYKi8KLS8qCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqICAgICAgUHJlLUFSTXY2IGltcGxlbWVudGF0aW9uCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqLwotCi0gICAgLyogaW50IF9fa2VybmVsX2NtcHhjaGcoaW50IG9sZHZhbCwgaW50IG5ld3ZhbCwgaW50KiBwdHIpICovCi0gICAgLmVxdSAgICBrZXJuZWxfY21weGNoZywgMHhGRkZGMEZDMAotICAgIC5lcXUgICAga2VybmVsX2F0b21pY19iYXNlLCAweEZGRkYwRkZGCi0KLS8qIHIwKGFkZHIpIC0+IHIwKG9sZCkgKi8KLUVOVFJZKF9fYXRvbWljX2RlYykKLSAgICAuc2F2ZSB7cjQsIGxyfQotICAgIHN0bWRiICAgc3AhLCB7cjQsIGxyfQotICAgIG1vdiAgICAgcjIsIHIwCi0xOiBAIGF0b21pY19kZWMKLSAgICBsZHIgICAgIHIwLCBbcjJdCi0gICAgbW92ICAgICByMywgI2tlcm5lbF9hdG9taWNfYmFzZQotICAgIGFkZCAgICAgbHIsIHBjLCAjNAotICAgIHN1YiAgICAgcjEsIHIwLCAjMQotICAgIGFkZCAgICAgcGMsIHIzLCAjKGtlcm5lbF9jbXB4Y2hnIC0ga2VybmVsX2F0b21pY19iYXNlKQotICAgIGJjYyAgICAgMWIKLSAgICBhZGQgICAgIHIwLCByMSwgIzEKLSAgICBsZG1pYSAgIHNwISwge3I0LCBscn0KLSAgICBieCAgICAgIGxyCi1FTkQoX19hdG9taWNfZGVjKQotCi0vKiByMChhZGRyKSAtPiByMChvbGQpICovCi1FTlRSWShfX2F0b21pY19pbmMpCi0gICAgLnNhdmUge3I0LCBscn0KLSAgICBzdG1kYiAgIHNwISwge3I0LCBscn0KLSAgICBtb3YgICAgIHIyLCByMAotMTogQCBhdG9taWNfaW5jCi0gICAgbGRyICAgICByMCwgW3IyXQotICAgIG1vdiAgICAgcjMsICNrZXJuZWxfYXRvbWljX2Jhc2UKLSAgICBhZGQgICAgIGxyLCBwYywgIzQKLSAgICBhZGQgICAgIHIxLCByMCwgIzEKLSAgICBhZGQgICAgIHBjLCByMywgIyhrZXJuZWxfY21weGNoZyAtIGtlcm5lbF9hdG9taWNfYmFzZSkKLSAgICBiY2MgICAgIDFiCi0gICAgc3ViICAgICByMCwgcjEsICMxCi0gICAgbGRtaWEgICBzcCEsIHtyNCwgbHJ9Ci0gICAgYnggICAgICBscgotRU5EKF9fYXRvbWljX2luYykKLQotLyogcjAob2xkKSByMShuZXcpIHIyKGFkZHIpIC0+IHIwKHplcm9faWZfc3VjY2VlZGVkKSAqLwotRU5UUlkoX19hdG9taWNfY21weGNoZykKLSAgICAuc2F2ZSB7cjQsIGxyfQotICAgIHN0bWRiICAgc3AhLCB7cjQsIGxyfQotICAgIG1vdiAgICAgcjQsIHIwICAgICAgICAgIC8qIHI0ID0gc2F2ZSBvbGR2YWx1ZSAqLwotMTogQCBhdG9taWNfY21weGNoZwotICAgIG1vdiAgICAgcjMsICNrZXJuZWxfYXRvbWljX2Jhc2UKLSAgICBhZGQgICAgIGxyLCBwYywgIzQKLSAgICBtb3YgICAgIHIwLCByNCAgICAgICAgICAvKiByMCA9IG9sZHZhbHVlICovCi0gICAgYWRkICAgICBwYywgcjMsICMoa2VybmVsX2NtcHhjaGcgLSBrZXJuZWxfYXRvbWljX2Jhc2UpCi0gICAgYmNzICAgICAyZiAgICAgICAgICAgICAgLyogc3dhcCB3YXMgbWFkZS4gd2UncmUgZ29vZCwgcmV0dXJuLiAqLwotICAgIGxkciAgICAgcjMsIFtyMl0gICAgICAgIC8qIHN3YXAgbm90IG1hZGUsIHNlZSBpZiBpdCdzIGJlY2F1c2UgKnB0ciE9b2xkdmFsdWUgKi8KLSAgICBjbXAgICAgIHIzLCByNAotICAgIGJlcSAgICAgMWIKLTI6IEAgYXRvbWljX2NtcHhjaGcKLSAgICBsZG1pYSAgIHNwISwge3I0LCBscn0KLSAgICBieCAgICAgIGxyCi1FTkQoX19hdG9taWNfY21weGNoZykKLQotLyogcjAobmV3KSByMShhZGRyKSAtPiByMChvbGQpICovCi1FTlRSWShfX2F0b21pY19zd2FwKQotICAgIHN3cCAgICAgcjAsIHIwLCBbcjFdCi0gICAgYnggICAgICBscgotRU5EKF9fYXRvbWljX3N3YXApCi0KLSNlbmRpZiAvKm5vdCBkZWZpbmVkIF9fQVJNX0hBVkVfTERSRVhfU1RSRVgqLwotCi0KLS8qIF9fZnV0ZXhfd2FpdCgqZnR4LCB2YWwsICp0aW1lc3BlYykgKi8KLS8qIF9fZnV0ZXhfd2FrZSgqZnR4LCBjb3VudGVyKSAqLwotLyogX19mdXRleF9zeXNjYWxsMygqZnR4LCBvcCwgdmFsKSAqLwotLyogX19mdXRleF9zeXNjYWxsNCgqZnR4LCBvcCwgdmFsLCAqdGltZXNwZWMpICovCi0KLS5nbG9iYWwgX19mdXRleF93YWl0Ci0udHlwZSBfX2Z1dGV4X3dhaXQsICVmdW5jdGlvbgotCi0uZ2xvYmFsIF9fZnV0ZXhfd2FrZQotLnR5cGUgX19mdXRleF93YWtlLCAlZnVuY3Rpb24KLQotLmdsb2JhbCBfX2Z1dGV4X3N5c2NhbGwzCi0udHlwZSBfX2Z1dGV4X3N5c2NhbGwzLCAlZnVuY3Rpb24KLQotLmdsb2JhbCBfX2Z1dGV4X3N5c2NhbGw0Ci0udHlwZSBfX2Z1dGV4X3N5c2NhbGw0LCAlZnVuY3Rpb24KLQotI2lmIF9fQVJNX0VBQklfXwotCi1FTlRSWShfX2Z1dGV4X3N5c2NhbGwzKQotICAgIHN0bWRiICAgc3AhLCB7cjQsIHI3fQotICAgIC5zYXZlICAge3I0LCByN30KLSAgICBsZHIgICAgIHI3LCA9X19OUl9mdXRleAotICAgIHN3aSAgICAgIzAKLSAgICBsZG1pYSAgIHNwISwge3I0LCByN30KLSAgICBieCAgICAgIGxyCi1FTkQoX19mdXRleF9zeXNjYWxsMykKLQotRU5UUlkoX19mdXRleF93YWl0KQotICAgIHN0bWRiICAgc3AhLCB7cjQsIHI3fQotICAgIC5zYXZlICAge3I0LCByN30KLSAgICBtb3YgICAgIHIzLCByMgotICAgIG1vdiAgICAgcjIsIHIxCi0gICAgbW92ICAgICByMSwgI0ZVVEVYX1dBSVQKLSAgICBsZHIgICAgIHI3LCA9X19OUl9mdXRleAotICAgIHN3aSAgICAgIzAKLSAgICBsZG1pYSAgIHNwISwge3I0LCByN30KLSAgICBieCAgICAgIGxyCi1FTkQoX19mdXRleF93YWl0KQotCi1FTlRSWShfX2Z1dGV4X3dha2UpCi0gICAgLnNhdmUgICB7cjQsIHI3fQotICAgIHN0bWRiICAgc3AhLCB7cjQsIHI3fQotICAgIG1vdiAgICAgcjIsIHIxCi0gICAgbW92ICAgICByMSwgI0ZVVEVYX1dBS0UKLSAgICBsZHIgICAgIHI3LCA9X19OUl9mdXRleAotICAgIHN3aSAgICAgIzAKLSAgICBsZG1pYSAgIHNwISwge3I0LCByN30KLSAgICBieCAgICAgIGxyCi1FTkQoX19mdXRleF93YWtlKQotCi0jZWxzZQotCi1FTlRSWShfX2Z1dGV4X3N5c2NhbGwzKQotICAgIHN3aSAgICAgI19fTlJfZnV0ZXgKLSAgICBieCAgICAgIGxyCi1FTkQoX19mdXRleF9zeXNjYWxsMykKLQotRU5UUlkoX19mdXRleF93YWl0KQotICAgIG1vdiAgICAgcjMsIHIyCi0gICAgbW92ICAgICByMiwgcjEKLSAgICBtb3YgICAgIHIxLCAjRlVURVhfV0FJVAotICAgIHN3aSAgICAgI19fTlJfZnV0ZXgKLSAgICBieCAgICAgIGxyCi1FTkQoX19mdXRleF93YWl0KQotCi1FTlRSWShfX2Z1dGV4X3dha2UpCi0gICAgbW92ICAgICByMiwgcjEKLSAgICBtb3YgICAgIHIxLCAjRlVURVhfV0FLRQotICAgIHN3aSAgICAgI19fTlJfZnV0ZXgKLSAgICBieCAgICAgIGxyCi1FTkQoX19mdXRleF93YWtlKQotCi0jZW5kaWYKLQotRU5UUlkoX19mdXRleF9zeXNjYWxsNCkKLSAgICBiIF9fZnV0ZXhfc3lzY2FsbDMKLUVORChfX2Z1dGV4X3N5c2NhbGw0KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9iaW9uaWMvYXRvbWljc19hcm0uYyBiL2xpYmMvYXJjaC1hcm0vYmlvbmljL2F0b21pY3NfYXJtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDY5ZWFmZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vYmlvbmljL2F0b21pY3NfYXJtLmMKQEAgLTAsMCArMSw4NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisKKy8qIFRoZSBwdXJwb3NlIG9mIHRoaXMgZmlsZSBpcyB0byBleHBvcnQgYSBzbWFsbCBzZXQgb2YgYXRvbWljLXJlbGF0ZWQKKyAqIGZ1bmN0aW9ucyBmcm9tIHRoZSBDIGxpYnJhcnksIHRvIGVuc3VyZSBiaW5hcnkgQUJJIGNvbXBhdGliaWxpdHkgZm9yCisgKiB0aGUgTkRLLgorICoKKyAqIFRoZXNlIGZ1bmN0aW9ucyB3ZXJlIGluaXRpYWxseSBleHBvc2VkIGJ5IHRoZSBOREsgdGhyb3VnaCA8c3lzL2F0b21pY3MuaD4sCisgKiB3aGljaCB3YXMgdW5mb3J0dW5hdGUgYmVjYXVzZSB0aGVpciBpbXBsZW1lbnRhdGlvbiBkaWRuJ3QgcHJvdmlkZSBhbnkKKyAqIG1lbW9yeSBiYXJyaWVycyBhdCBhbGwuCisgKgorICogVGhpcyB3YXNuJ3QgYSBwcm9ibGVtIGZvciB0aGUgcGxhdGZvcm0gY29kZSB0aGF0IHVzZWQgdGhlbSwgYmVjYXVzZSBpdAorICogdXNlZCBleHBsaWNpdCBiYXJyaWVyIGluc3RydWN0aW9ucyBhcm91bmQgdGhlbS4gT24gdGhlIG90aGVyIGhhbmQsIGl0IG1lYW5zCisgKiB0aGF0IGFueSBOREstZ2VuZXJhdGVkIG1hY2hpbmUgY29kZSB0aGF0IGxpbmtlZCBhZ2FpbnN0IHRoZW0gd291bGQgbm90CisgKiBwZXJmb3JtIGNvcnJlY3RseSB3aGVuIHJ1bm5pbmcgb24gbXVsdGktY29yZSBkZXZpY2VzLgorICoKKyAqIFRvIGZpeCB0aGlzLCB0aGUgcGxhdGZvcm0gY29kZSB3YXMgZmlyc3QgbW9kaWZpZWQgdG8gbm90IHVzZSBhbnkgb2YgdGhlc2UKKyAqIGZ1bmN0aW9ucyAoZXZlcnl0aGluZyBpcyBub3cgaW5saW5lZCB0aHJvdWdoIGFzc2VtYmx5IHN0YXRlbWVudHMsIHNlZQorICogbGliYy9wcml2YXRlL2Jpb25pY19hcm1faW5saW5lLmggYW5kIHRoZSBoZWFkZXJzIGl0IGluY2x1ZGVzLgorICoKKyAqIFRoZSBmdW5jdGlvbnMgaGVyZSBhcmUgdGh1cyBvbmx5IGZvciB0aGUgYmVuZWZpdCBvZiBOREsgYXBwbGljYXRpb25zLAorICogYW5kIG5vdyBpbmNsdWRlcyBmdWxsIG1lbW9yeSBiYXJyaWVycyB0byBwcmV2ZW50IGFueSByYW5kb20gbWVtb3J5IG9yZGVyaW5nCisgKiBpc3N1ZSBmcm9tIGNyb3BwaW5nLgorICoKKyAqIE5vdGUgdGhhdCB3ZSBhbHNvIHByb3ZpZGUgYW4gdXBkYXRlZCA8c3lzL2F0b21pY3MuaD4gaGVhZGVyIHRoYXQgZGVmaW5lcworICogYWx3YXlzX2lubGluZWQgdmVyc2lvbnMgb2YgdGhlIGZ1bmN0aW9ucyB0aGF0IHVzZSB0aGUgR0NDIGJ1aWx0aW4KKyAqIGludHJpbnNpY3MgdG8gcGVyZm9ybSB0aGUgc2FtZSB0aGluZy4KKyAqCisgKiBOT1RFOiBUaGVyZSBpcyBubyBuZWVkIGZvciBhIHNpbWlsYXIgZmlsZSBmb3Igbm9uLUFSTSBwbGF0Zm9ybXMuCisgKi8KKworLyogRE8gTk9UIElOQ0xVREUgPHN5cy9hdG9taWNzLmg+IEhFUkUgISAqLworCitpbnQKK19fYXRvbWljX2NtcHhjaGcoaW50IG9sZCwgaW50IF9uZXcsIHZvbGF0aWxlIGludCAqcHRyKQoreworICAgIC8qIFdlIG11c3QgcmV0dXJuIDAgb24gc3VjY2VzcyAqLworICAgIHJldHVybiBfX3N5bmNfdmFsX2NvbXBhcmVfYW5kX3N3YXAocHRyLCBvbGQsIF9uZXcpICE9IG9sZDsKK30KKworaW50CitfX2F0b21pY19zd2FwKGludCBfbmV3LCB2b2xhdGlsZSBpbnQgKnB0cikKK3sKKyAgICBpbnQgcHJldjsKKyAgICBkbyB7CisgICAgICAgIHByZXYgPSAqcHRyOworICAgIH0gd2hpbGUgKF9fc3luY192YWxfY29tcGFyZV9hbmRfc3dhcChwdHIsIHByZXYsIF9uZXcpICE9IHByZXYpOworICAgIHJldHVybiBwcmV2OworfQorCitpbnQKK19fYXRvbWljX2RlYyh2b2xhdGlsZSBpbnQgKnB0cikKK3sKKyAgcmV0dXJuIF9fc3luY19mZXRjaF9hbmRfc3ViIChwdHIsIDEpOworfQorCitpbnQKK19fYXRvbWljX2luYyh2b2xhdGlsZSBpbnQgKnB0cikKK3sKKyAgcmV0dXJuIF9fc3luY19mZXRjaF9hbmRfYWRkIChwdHIsIDEpOworfQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9iaW9uaWMvY2xvbmUuUyBiL2xpYmMvYXJjaC1hcm0vYmlvbmljL2Nsb25lLlMKaW5kZXggYTk1ZDJkNi4uZDAwYjZhNiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9iaW9uaWMvY2xvbmUuUworKysgYi9saWJjL2FyY2gtYXJtL2Jpb25pYy9jbG9uZS5TCkBAIC0yNSw0OSArMjUsNDIgQEAKICAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgogICogU1VDSCBEQU1BR0UuCiAgKi8KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogCisvLyBpbnQgIF9fcHRocmVhZF9jbG9uZSh2b2lkKiAoKmZuKSh2b2lkKiksIHZvaWQqIGNoaWxkX3N0YWNrLCBpbnQgZmxhZ3MsIHZvaWQqIGFyZyk7CiBFTlRSWShfX3B0aHJlYWRfY2xvbmUpCi0gICAgQCBpbnNlcnQgdGhlIGFyZ3Mgb250byB0aGUgbmV3IHN0YWNrCi0gICAgc3RyICAgICByMCwgW3IxLCAjLTRdCi0gICAgc3RyICAgICByMywgW3IxLCAjLThdCisgICAgIyBQdXNoICdmbicgYW5kICdhcmcnIG9udG8gJ2NoaWxkX3N0YWNrJy4KKyAgICBzdG1kYiAgIHIxISwge3IwLCByM30KIAotICAgIEAgZG8gdGhlIHN5c3RlbSBjYWxsCi0gICAgQCBnZXQgZmxhZ3MKLQorICAgICMgVGhlIHN5c19jbG9uZSBzeXN0ZW0gY2FsbCBvbmx5IHRha2VzIHR3byBhcmd1bWVudHM6ICdmbGFncycgYW5kICdjaGlsZF9zdGFjaycuCisgICAgIyAnY2hpbGRfc3RhY2snIGlzIGFscmVhZHkgaW4gcjEsIGJ1dCB3ZSBuZWVkIHRvIG1vdmUgJ2ZsYWdzJyBpbnRvIHBvc2l0aW9uLgogICAgIG1vdiAgICAgcjAsIHIyCiAKLSAgICBAIG5ldyBzcCBpcyBhbHJlYWR5IGluIHIxCi0KLSNpZiBfX0FSTV9FQUJJX18KLSAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICAjIFN5c3RlbSBjYWxsLgorICAgIG1vdiAgICAgaXAsIHI3CiAgICAgbGRyICAgICByNywgPV9fTlJfY2xvbmUKICAgICBzd2kgICAgICMwCi0jZWxzZQotICAgIHN3aSAgICAgI19fTlJfY2xvbmUKLSNlbmRpZgogCisgICAgIyBDaGlsZD8KICAgICBtb3ZzICAgIHIwLCByMAotI2lmIF9fQVJNX0VBQklfXwotICAgIGxkbW5lZmQgc3AhLCB7cjQsIHI3fQotI2VuZGlmCi0gICAgYmx0ICAgICBfX2Vycm9yCi0gICAgYnhuZSAgICBscgorICAgIGJlcSAgICAgMWYKIAorICAgICMgUGFyZW50LgorICAgIG1vdiAgICAgcjcsIGlwCisgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQorICAgIGJ4bHMgICAgbHIKKyAgICBuZWcgICAgIHIwLCByMAorICAgIGIgICAgICAgX19zZXRfZXJybm8KIAotICAgIEAgcGljayB0aGUgZnVuY3Rpb24gYXJnIGFuZCBjYWxsIGFkZHJlc3Mgb2ZmIHRoZSBzdGFjayBhbmQganVtcAotICAgIEAgdG8gdGhlIEMgX190aHJlYWRfZW50cnkgZnVuY3Rpb24gd2hpY2ggZG9lcyBzb21lIHNldHVwIGFuZCB0aGVuCi0gICAgQCBjYWxscyB0aGUgdGhyZWFkJ3Mgc3RhcnQgZnVuY3Rpb24KLQotICAgIGxkciAgICAgcjAsIFtzcCwgIy00XQotICAgIGxkciAgICAgcjEsIFtzcCwgIy04XQotICAgIG1vdiAgICAgcjIsIHNwCQkJQCBfX3RocmVhZF9lbnRyeSBuZWVkcyB0aGUgVExTIHBvaW50ZXIKKzE6ICAjIENoaWxkLgorICAgICMgUG9wICdmbicgYW5kICdhcmcnIGJhY2sgb2ZmIHRoZSBzdGFjayBhbmQgY2FsbCBfX3RocmVhZF9lbnRyeS4KKyAgICBwb3AgICAgIHtyMCwgcjF9CisgICAgIyBfX3RocmVhZF9lbnRyeSBhbHNvIG5lZWRzIG91ciBzdGFjayBwb2ludGVyLgorICAgIG1vdiAgICAgcjIsIHNwCiAgICAgYiAgICAgICBfX3RocmVhZF9lbnRyeQotCi1fX2Vycm9yOgotICAgIG1vdiAgICAgcjAsICMtMQotICAgIGJ4ICAgICAgbHIKIEVORChfX3B0aHJlYWRfY2xvbmUpCiAKIApAQCAtNzgsOCArNzEsOCBAQAogICAgICMgICAgICAgICAgICAgICAgICAgICAgICAgIHBpZF90ICpwaWQsIHZvaWQgKnRscywgcGlkX3QgKmN0aWQsCiAgICAgIyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICAoKmZuKSh2b2lkICopLCB2b2lkKiBhcmcgKTsKICAgICAjCi0gICAgIyBOT1RFOiBUaGlzIGlzIG5vdCB0aGUgc2FtZSBzaWduYXR1cmUgdGhhbiB0aGUgR0xpYmMKLSAgICAjICAgICAgIF9fY2xvbmUgZnVuY3Rpb24gaGVyZSAhISBQbGFjaW5nICdmbicgYW5kICdhcmcnCisgICAgIyBOT1RFOiBUaGlzIGlzIG5vdCB0aGUgc2FtZSBzaWduYXR1cmUgYXMgdGhlIGdsaWJjCisgICAgIyAgICAgICBfX2Nsb25lIGZ1bmN0aW9uLiBQbGFjaW5nICdmbicgYW5kICdhcmcnCiAgICAgIyAgICAgICBhdCB0aGUgZW5kIG9mIHRoZSBwYXJhbWV0ZXIgbGlzdCBtYWtlcyB0aGUKICAgICAjICAgICAgIGltcGxlbWVudGF0aW9uIG11Y2ggc2ltcGxlci4KICAgICAjCkBAIC05OCwyMCArOTEsMjAgQEAKICAgICBzdHIgICAgIHI1LCBbcjEsICMtNF0KICAgICBzdHIgICAgIHI2LCBbcjEsICMtOF0KIAotICAgICMgc3lzdGVtIGNhbGwKKyAgICAjIFN5c3RlbSBjYWxsCiAgICAgbGRyICAgICByNywgPV9fTlJfY2xvbmUKICAgICBzd2kgICAgICMwCiAgICAgbW92cyAgICByMCwgcjAKICAgICBiZXEgICAgIDFmCiAKLSAgICAjIGluIHBhcmVudCwgcmVsb2FkIHNhdmVkIHJlZ2lzdGVycwotICAgICMgdGhlbiBlaXRoZXIgZXhpdCBvciBlcnJvcgotICAgICMKKyAgICAjIEluIHRoZSBwYXJlbnQsIHJlbG9hZCBzYXZlZCByZWdpc3RlcnMgdGhlbiBlaXRoZXIgcmV0dXJuIG9yIHNldCBlcnJuby4KICAgICBsZG1mZCAgIHNwISwge3I0LCByNSwgcjYsIHI3fQotICAgIGJ4bmUgICAgbHIKLSAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCisgICAgYnhscyAgICBscgorICAgIG5lZyAgICAgcjAsIHIwCisgICAgYiAgICAgICBfX3NldF9lcnJubwogCi0xOiAgIyBpbiB0aGUgY2hpbGQgLSBwaWNrIGFyZ3VtZW50cworMTogICMgVGhlIGNoaWxkLgogICAgIGxkciAgICByMCwgW3NwLCAjLTRdCiAgICAgbGRyICAgIHIxLCBbc3AsICMtOF0KICAgICBiICAgICAgX19iaW9uaWNfY2xvbmVfZW50cnkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vYmlvbmljL2NydGJlZ2luLmMgYi9saWJjL2FyY2gtYXJtL2Jpb25pYy9jcnRiZWdpbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiY2IzMzUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL2Jpb25pYy9jcnRiZWdpbi5jCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgIi4uLy4uL2Jpb25pYy9saWJjX2luaXRfY29tbW9uLmgiCisjaW5jbHVkZSA8c3RkZGVmLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisKK19fYXR0cmlidXRlX18gKChzZWN0aW9uICgiLnByZWluaXRfYXJyYXkiKSkpCit2b2lkICgqX19QUkVJTklUX0FSUkFZX18pKHZvaWQpID0gKHZvaWQgKCopKHZvaWQpKSAtMTsKKworX19hdHRyaWJ1dGVfXyAoKHNlY3Rpb24gKCIuaW5pdF9hcnJheSIpKSkKK3ZvaWQgKCpfX0lOSVRfQVJSQVlfXykodm9pZCkgPSAodm9pZCAoKikodm9pZCkpIC0xOworCitfX2F0dHJpYnV0ZV9fICgoc2VjdGlvbiAoIi5maW5pX2FycmF5IikpKQordm9pZCAoKl9fRklOSV9BUlJBWV9fKSh2b2lkKSA9ICh2b2lkICgqKSh2b2lkKSkgLTE7CisKK19fTElCQ19ISURERU5fXyB2b2lkIF9zdGFydCgpIHsKKyAgc3RydWN0b3JzX2FycmF5X3QgYXJyYXk7CisgIGFycmF5LnByZWluaXRfYXJyYXkgPSAmX19QUkVJTklUX0FSUkFZX187CisgIGFycmF5LmluaXRfYXJyYXkgPSAmX19JTklUX0FSUkFZX187CisgIGFycmF5LmZpbmlfYXJyYXkgPSAmX19GSU5JX0FSUkFZX187CisKKyAgdm9pZCogcmF3X2FyZ3MgPSAodm9pZCopICgodWludHB0cl90KSBfX2J1aWx0aW5fZnJhbWVfYWRkcmVzcygwKSArIHNpemVvZih2b2lkKikpOworICBfX2xpYmNfaW5pdChyYXdfYXJncywgTlVMTCwgJm1haW4sICZhcnJheSk7Cit9CisKKyNpbmNsdWRlICJfX2Rzb19oYW5kbGUuaCIKKyNpbmNsdWRlICJhdGV4aXQuaCIKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vYmlvbmljL2NydGJlZ2luX2R5bmFtaWMuUyBiL2xpYmMvYXJjaC1hcm0vYmlvbmljL2NydGJlZ2luX2R5bmFtaWMuUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDk5OTA4NC4uMDAwMDAwMAotLS0gYS9saWJjL2FyY2gtYXJtL2Jpb25pYy9jcnRiZWdpbl9keW5hbWljLlMKKysrIC9kZXYvbnVsbApAQCAtMSw4OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogICAgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUwotICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKLSAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCi0gKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKLSAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAotICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0gKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0JLnRleHQKLQkuYWxpZ24gNAotCS50eXBlIF9zdGFydCwjZnVuY3Rpb24KLQkuZ2xvYmwgX3N0YXJ0Ci0KLSMgdGhpcyBpcyB0aGUgc21hbGwgc3RhcnR1cCBjb2RlIHRoYXQgaXMgZmlyc3QgcnVuIHdoZW4KLSMgYW55IGV4ZWN1dGFibGUgdGhhdCBpcyBkeW5hbWljYWxseS1saW5rZWQgd2l0aCBCaW9uaWMKLSMgcnVucy4KLSMKLSMgaXQncyBwdXJwb3NlIGlzIHRvIGNhbGwgX19saWJjX2luaXQgd2l0aCBhcHByb3ByaWF0ZQotIyBhcmd1bWVudHMsIHdoaWNoIGFyZToKLSMKLSMgICAgLSB0aGUgYWRkcmVzcyBvZiB0aGUgcmF3IGRhdGEgYmxvY2sgc2V0dXAgYnkgdGhlIExpbnV4Ci0jICAgICAga2VybmVsIEVMRiBsb2FkZXIKLSMKLSMgICAgLSBhZGRyZXNzIG9mIGFuICJvbmV4aXQiIGZ1bmN0aW9uLCBub3QgdXNlZCBvbiBhbnkKLSMgICAgICBwbGF0Zm9ybSBzdXBwb3J0ZWQgYnkgQmlvbmljCi0jCi0jICAgIC0gYWRkcmVzcyBvZiB0aGUgIm1haW4iIGZ1bmN0aW9uIG9mIHRoZSBwcm9ncmFtLiBXZQotIyAgICAgIGNhbid0IGhhcmQtY29kZSBpdCBpbiB0aGUgYWRyIHBzZXVkbyBpbnN0cnVjdGlvbgotIyAgICAgIHNvIHdlIHVzZSBhIHRpbnkgdHJhbXBvbGluZSB0aGF0IHdpbGwgZ2V0IHJlbG9jYXRlZAotIyAgICAgIGJ5IHRoZSBkeW5hbWljIGxpbmtlciBiZWZvcmUgdGhpcyBjb2RlIHJ1bnMKLSMKLSMgICAgLSBhZGRyZXNzIG9mIHRoZSBjb25zdHJ1Y3RvciBsaXN0Ci0jCi1fc3RhcnQ6CQotCW1vdglyMCwgc3AKLQltb3YJcjEsICMwCi0JYWRyIHIyLCAwZgotCWFkciByMywgMWYKLQliCV9fbGliY19pbml0Ci0KLTA6ICBiICAgbWFpbgotCi0xOiAgLmxvbmcgICBfX1BSRUlOSVRfQVJSQVlfXwotICAgIC5sb25nICAgX19JTklUX0FSUkFZX18KLSAgICAubG9uZyAgIF9fRklOSV9BUlJBWV9fCi0gICAgLmxvbmcgICBfX0NUT1JfTElTVF9fCi0KLQkuc2VjdGlvbiAucHJlaW5pdF9hcnJheSwgImF3IgotCS5nbG9ibCBfX1BSRUlOSVRfQVJSQVlfXwotX19QUkVJTklUX0FSUkFZX186Ci0JLmxvbmcgLTEKLQotCS5zZWN0aW9uIC5pbml0X2FycmF5LCAiYXciCi0JLmdsb2JsIF9fSU5JVF9BUlJBWV9fCi1fX0lOSVRfQVJSQVlfXzoKLQkubG9uZyAtMQotCi0JLnNlY3Rpb24gLmZpbmlfYXJyYXksICJhdyIKLQkuZ2xvYmwgX19GSU5JX0FSUkFZX18KLV9fRklOSV9BUlJBWV9fOgotCS5sb25nIC0xCi0KLQkuc2VjdGlvbiAuY3RvcnMsICJhdyIKLQkuZ2xvYmwgX19DVE9SX0xJU1RfXwotX19DVE9SX0xJU1RfXzoKLQkubG9uZyAtMQotCi0jaW5jbHVkZSAiX19kc29faGFuZGxlLlMiCi0jaW5jbHVkZSAiYXRleGl0LlMiCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL2Jpb25pYy9jcnRiZWdpbl9zby5TIGIvbGliYy9hcmNoLWFybS9iaW9uaWMvY3J0YmVnaW5fc28uUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTI3NWIxZS4uMDAwMDAwMAotLS0gYS9saWJjL2FyY2gtYXJtL2Jpb25pYy9jcnRiZWdpbl9zby5TCisrKyAvZGV2L251bGwKQEAgLTEsNjEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqICAgIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKLSAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi0gKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCi0gKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAotICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCi0gKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKLSAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jIEltcGxlbWVudCBzdGF0aWMgQysrIGRlc3RydWN0b3JzIHdoZW4gdGhlIHNoYXJlZAotIyBsaWJyYXJ5IGlzIHVubG9hZGVkIHRocm91Z2ggZGxjbG9zZSgpLgotIwotIyBBIGNhbGwgdG8gdGhpcyBmdW5jdGlvbiBtdXN0IGJlIHRoZSBmaXJzdCBlbnRyeQotIyBpbiB0aGUgLmZpbmlfYXJyYXkuIFNlZSAzLjMuNS4zLkMgb2YgQysrIEFCSQotIyBzdGFuZGFyZC4KLSMKLV9fb25fZGxjbG9zZToKLSAgICAgICAgYWRyICAgICByMCwgMGYKLSAgICAgICAgbGRyICAgICByMCwgW3IwXQotICAgICAgICBiICAgICAgIF9fY3hhX2ZpbmFsaXplCi0KLTA6Ci0gICAgICAgIC5sb25nICAgX19kc29faGFuZGxlCi0KLQkuc2VjdGlvbiAuaW5pdF9hcnJheSwgImF3IgotCS5nbG9ibCBfX0lOSVRfQVJSQVlfXwotX19JTklUX0FSUkFZX186Ci0JLmxvbmcgLTEKLQotICAgICAgICAuc2VjdGlvbiAuZmluaV9hcnJheSwgImF3IgotICAgICAgICAuZ2xvYmwgX19GSU5JX0FSUkFZX18KLV9fRklOSV9BUlJBWV9fOgotICAgICAgICAubG9uZyAtMQotICAgICAgICAubG9uZyBfX29uX2RsY2xvc2UKLQotI2lmZGVmIENSVF9MRUdBQ1lfV09SS0FST1VORAotI2luY2x1ZGUgIl9fZHNvX2hhbmRsZS5TIgotI2Vsc2UKLSNpbmNsdWRlICJfX2Rzb19oYW5kbGVfc28uUyIKLSNlbmRpZgotCi0jaW5jbHVkZSAiYXRleGl0LlMiCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL2Jpb25pYy9jcnRiZWdpbl9zby5jIGIvbGliYy9hcmNoLWFybS9iaW9uaWMvY3J0YmVnaW5fc28uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDAyNTdhCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9iaW9uaWMvY3J0YmVnaW5fc28uYwpAQCAtMCwwICsxLDU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKK2V4dGVybiB2b2lkIF9fY3hhX2ZpbmFsaXplKHZvaWQgKik7CitleHRlcm4gdm9pZCAqX19kc29faGFuZGxlOworCitfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJoaWRkZW4iKSxkZXN0cnVjdG9yKSkKK3ZvaWQgX19vbl9kbGNsb3NlKCkgeworICBfX2N4YV9maW5hbGl6ZSgmX19kc29faGFuZGxlKTsKK30KKworLyogQ1JUX0xFR0FDWV9XT1JLQVJPVU5EIHNob3VsZCBvbmx5IGJlIGRlZmluZWQgd2hlbiBidWlsZGluZworICogdGhpcyBmaWxlIGFzIHBhcnQgb2YgdGhlIHBsYXRmb3JtJ3MgQyBsaWJyYXJ5LgorICoKKyAqIFRoZSBDIGxpYnJhcnkgYWxyZWFkeSBkZWZpbmVzIGEgZnVuY3Rpb24gbmFtZWQgJ2F0ZXhpdCgpJworICogZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHdpdGggb2xkZXIgTkRLLWdlbmVyYXRlZCBiaW5hcmllcy4KKyAqCisgKiBGb3IgbmV3ZXIgb25lcywgJ2F0ZXhpdCcgaXMgYWN0dWFsbHkgZW1iZWRkZWQgaW4gdGhlIEMKKyAqIHJ1bnRpbWUgb2JqZWN0cyB0aGF0IGFyZSBsaW5rZWQgaW50byB0aGUgZmluYWwgRUxGCisgKiBiaW5hcnkgKHNoYXJlZCBsaWJyYXJ5IG9yIGV4ZWN1dGFibGUpLCBhbmQgd2lsbCBjYWxsCisgKiBfX2N4YV9hdGV4aXQoKSBpbiBvcmRlciB0byB1bi1yZWdpc3RlciBhbnkgYXRleGl0KCkKKyAqIGhhbmRsZXIgd2hlbiBhIGxpYnJhcnkgaXMgdW5sb2FkZWQuCisgKgorICogVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGdsb2JhbCAqYW5kKiBoaWRkZW4uIE9ubHkgdGhlCisgKiBjb2RlIGluc2lkZSB0aGUgc2FtZSBFTEYgYmluYXJ5IHNob3VsZCBiZSBhYmxlIHRvIGFjY2VzcyBpdC4KKyAqLworCisjaWZkZWYgQ1JUX0xFR0FDWV9XT1JLQVJPVU5ECisjaW5jbHVkZSAiX19kc29faGFuZGxlLmgiCisjZWxzZQorI2luY2x1ZGUgIl9fZHNvX2hhbmRsZV9zby5oIgorI2luY2x1ZGUgImF0ZXhpdC5oIgorI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL2Jpb25pYy9jcnRiZWdpbl9zdGF0aWMuUyBiL2xpYmMvYXJjaC1hcm0vYmlvbmljL2NydGJlZ2luX3N0YXRpYy5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxM2IwNWIyLi4wMDAwMDAwCi0tLSBhL2xpYmMvYXJjaC1hcm0vYmlvbmljL2NydGJlZ2luX3N0YXRpYy5TCisrKyAvZGV2L251bGwKQEAgLTEsODkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqICAgIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKLSAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi0gKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCi0gKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAotICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCi0gKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKLSAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCS50ZXh0Ci0JLmFsaWduIDQKLQkudHlwZSBfc3RhcnQsI2Z1bmN0aW9uCi0JLmdsb2JsIF9zdGFydAotCi0jIHRoaXMgaXMgdGhlIHNtYWxsIHN0YXJ0dXAgY29kZSB0aGF0IGlzIGZpcnN0IHJ1biB3aGVuCi0jIGFueSBleGVjdXRhYmxlIHRoYXQgaXMgc3RhdGljYWxseS1saW5rZWQgd2l0aCBCaW9uaWMKLSMgcnVucy4KLSMKLSMgaXQncyBwdXJwb3NlIGlzIHRvIGNhbGwgX19saWJjX2luaXQgd2l0aCBhcHByb3ByaWF0ZQotIyBhcmd1bWVudHMsIHdoaWNoIGFyZToKLSMKLSMgICAgLSB0aGUgYWRkcmVzcyBvZiB0aGUgcmF3IGRhdGEgYmxvY2sgc2V0dXAgYnkgdGhlIExpbnV4Ci0jICAgICAga2VybmVsIEVMRiBsb2FkZXIKLSMKLSMgICAgLSBhZGRyZXNzIG9mIGFuICJvbmV4aXQiIGZ1bmN0aW9uLCBub3QgdXNlZCBvbiBhbnkKLSMgICAgICBwbGF0Zm9ybSBzdXBwb3J0ZWQgYnkgQmlvbmljCi0jCi0jICAgIC0gYWRkcmVzcyBvZiB0aGUgIm1haW4iIGZ1bmN0aW9uIG9mIHRoZSBwcm9ncmFtLiBXZQotIyAgICAgIGNhbid0IGhhcmQtY29kZSBpdCBpbiB0aGUgYWRyIHBzZXVkbyBpbnN0cnVjdGlvbgotIyAgICAgIHNvIHdlIHVzZSBhIHRpbnkgdHJhbXBvbGluZSB0aGF0IHdpbGwgZ2V0IHJlbG9jYXRlZAotIyAgICAgIGJ5IHRoZSBkeW5hbWljIGxpbmtlciBiZWZvcmUgdGhpcyBjb2RlIHJ1bnMKLSMKLSMgICAgLSBhZGRyZXNzIG9mIHRoZSBjb25zdHJ1Y3RvciBsaXN0Ci0jCi1fc3RhcnQ6CQotCW1vdglyMCwgc3AKLQltb3YJcjEsICMwCi0JYWRyIHIyLCAwZgotCWFkciByMywgMWYKLQliCV9fbGliY19pbml0Ci0KLTA6ICBiICAgbWFpbgotCi0xOiAgLmxvbmcgICBfX1BSRUlOSVRfQVJSQVlfXwotICAgIC5sb25nICAgX19JTklUX0FSUkFZX18KLSAgICAubG9uZyAgIF9fRklOSV9BUlJBWV9fCi0gICAgLmxvbmcgICBfX0NUT1JfTElTVF9fCi0KLQkuc2VjdGlvbiAucHJlaW5pdF9hcnJheSwgImF3IgotCS5nbG9ibCBfX1BSRUlOSVRfQVJSQVlfXwotX19QUkVJTklUX0FSUkFZX186Ci0JLmxvbmcgLTEKLQotCS5zZWN0aW9uIC5pbml0X2FycmF5LCAiYXciCi0JLmdsb2JsIF9fSU5JVF9BUlJBWV9fCi1fX0lOSVRfQVJSQVlfXzoKLQkubG9uZyAtMQotCi0JLnNlY3Rpb24gLmZpbmlfYXJyYXksICJhdyIKLQkuZ2xvYmwgX19GSU5JX0FSUkFZX18KLV9fRklOSV9BUlJBWV9fOgotCS5sb25nIC0xCi0KLQkuc2VjdGlvbiAuY3RvcnMsICJhdyIKLQkuZ2xvYmwgX19DVE9SX0xJU1RfXwotX19DVE9SX0xJU1RfXzoKLQkubG9uZyAtMQotCi0KLSNpbmNsdWRlICJfX2Rzb19oYW5kbGUuUyIKLSNpbmNsdWRlICJhdGV4aXQuUyIKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vYmlvbmljL2NydGVuZC5TIGIvbGliYy9hcmNoLWFybS9iaW9uaWMvY3J0ZW5kLlMKaW5kZXggMmYzYjFlZC4uZmZmYjBhYiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9iaW9uaWMvY3J0ZW5kLlMKKysrIGIvbGliYy9hcmNoLWFybS9iaW9uaWMvY3J0ZW5kLlMKQEAgLTM1LDYgKzM1LDYgQEAKIAkuc2VjdGlvbiAuZmluaV9hcnJheSwgImF3IgogCS5sb25nIDAKIAotCS5zZWN0aW9uIC5jdG9ycywgImF3IgotCS5sb25nIDAKLQorI2lmIGRlZmluZWQoX19saW51eF9fKSAmJiBkZWZpbmVkKF9fRUxGX18pCisJLnNlY3Rpb24gLm5vdGUuR05VLXN0YWNrLCIiLCVwcm9nYml0cworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL2Jpb25pYy9jcnRlbmRfc28uUyBiL2xpYmMvYXJjaC1hcm0vYmlvbmljL2NydGVuZF9zby5TCmluZGV4IGExMjgxYzQuLmJiNjU3MGUgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vYmlvbmljL2NydGVuZF9zby5TCisrKyBiL2xpYmMvYXJjaC1hcm0vYmlvbmljL2NydGVuZF9zby5TCkBAIC0yNiwxMyArMjYsNiBAQAogICogU1VDSCBEQU1BR0UuCiAgKi8KIAotLyogVGhpcyBpcyB0aGUgc2FtZSB0aGFuIGNydGVuZC5TIGV4Y2VwdCB0aGF0IGEgc2hhcmVkIGxpYnJhcnkKLSAqIGNhbm5vdCBoYXZlIGEgLnByZWluaXRfYXJyYXkKLSAqLwotCQotCS5zZWN0aW9uIC5pbml0X2FycmF5LCAiYXciCi0JLmxvbmcgMAotCi0JLnNlY3Rpb24gLmZpbmlfYXJyYXksICJhdyIKLQkubG9uZyAwCi0KKyNpZiBkZWZpbmVkKF9fbGludXhfXykgJiYgZGVmaW5lZChfX0VMRl9fKQorCS5zZWN0aW9uIC5ub3RlLkdOVS1zdGFjaywiIiwlcHJvZ2JpdHMKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9iaW9uaWMvZWFiaS5jIGIvbGliYy9hcmNoLWFybS9iaW9uaWMvZWFiaS5jCmluZGV4IDNmMjZmMmIuLjUxYTViOTcgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vYmlvbmljL2VhYmkuYworKysgYi9saWJjL2FyY2gtYXJtL2Jpb25pYy9lYWJpLmMKQEAgLTMwLDIyICszMCw2IEBACiAKIGV4dGVybiBpbnQgIF9fY3hhX2F0ZXhpdCh2b2lkICgqKSh2b2lkKiksIHZvaWQqLCB2b2lkKiApOwogCi0vKiBUZW1wb3JhcnkgaGFjazogdGhpcyB2YXJpYWJsZSBzaG91bGQgbm90IGJlIHBhcnQgb2YgdGhlIEMgbGlicmFyeQotICogaXRzZWxmLCBidXQgcGxhY2VkIGluIHRoZSAuYnNzIHNlY3Rpb24gb2YgZWFjaCBleGVjdXRhYmxlIG9yCi0gKiBzaGFyZWQgbGlicmFyeSBpbnN0ZWFkLgotICoKLSAqIFdlIGtlZXAgaXQgaGVyZSB0ZW1wb3JhcmlseSB1bnRpbCB0aGUgYnVpbGQgc3lzdGVtIGhhcyBiZWVuCi0gKiBtb2RpZmllZCBwcm9wZXJseSB0byB1c2UgY3J0YmVnaW5fc28uUyBhbmQgY3J0ZW5kX3NvLlMgd2hlbgotICogZ2VuZXJhdGluZyBzaGFyZWQgbGlicmFyaWVzLgotICoKLSAqIEl0IG11c3QgYmUgYSAnd2Vhaycgc3ltYm9sIHRvIGF2b2lkIGNvbmZsaWN0cyB3aXRoIHRoZSBkZWZpbml0aW9ucwotICogdGhhdCBoYXZlIGJlZW4gbW92ZWQgdG8gY3J0YmVnaW5fc3RhdGljLlMgYW5kIGNydGJlZ2luX2R5bmFtaWMuUwotICoKLSAqIEZvciB0aGUgcmVjb3JkLCBpdCBpcyB1c2VkIGZvciBzdGF0aWMgQysrIG9iamVjdCBjb25zdHJ1Y3Rpb24KLSAqIGFuZCBkZXN0cnVjdGlvbi4gU2VlIGh0dHA6Ly93d3cuY29kZXNvdXJjZXJ5LmNvbS9wdWJsaWMvY3h4LWFiaS9hYmkuaHRtbCNkc28tZHRvcgotICovCi12b2lkKiBfX2F0dHJpYnV0ZV9fKCh3ZWFrKSkgX19kc29faGFuZGxlOwotCiAvKiBUaGUgIkMrKyBBQkkgZm9yIEFSTSIgZG9jdW1lbnQgc3RhdGVzIHRoYXQgc3RhdGljIEMrKyBjb25zdHJ1Y3RvcnMsCiAgKiB3aGljaCBhcmUgY2FsbGVkIGZyb20gdGhlIC5pbml0X2FycmF5LCBzaG91bGQgbWFudWFsbHkgY2FsbAogICogX19hZWFiaV9hdGV4aXQoKSB0byByZWdpc3RlciBzdGF0aWMgZGVzdHJ1Y3RvcnMgZXhwbGljaXRlbHkuCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL2Jpb25pYy9leGlkeF9keW5hbWljLmMgYi9saWJjL2FyY2gtYXJtL2Jpb25pYy9leGlkeF9keW5hbWljLmMKaW5kZXggOTYyNjA2Zi4uYzdiNzE1NiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9iaW9uaWMvZXhpZHhfZHluYW1pYy5jCisrKyBiL2xpYmMvYXJjaC1hcm0vYmlvbmljL2V4aWR4X2R5bmFtaWMuYwpAQCAtMjUsMTIgKzI1LDggQEAKICAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgogICogU1VDSCBEQU1BR0UuCiAgKi8KLXR5cGVkZWYgbG9uZyB1bnNpZ25lZCBpbnQgKl9VbndpbmRfUHRyOwogCi0vKiBTdHViYmVkIG91dCBpbiBsaWJkbCBhbmQgZGVmaW5lZCBpbiB0aGUgZHluYW1pYyBsaW5rZXIuCi0gKiBTYW1lIHNlbWFudGljcyBhcyBfX2dudV9VbndpbmRfRmluZF9leGlkeCgpLgotICovCi1leHRlcm4gX1Vud2luZF9QdHIgZGxfdW53aW5kX2ZpbmRfZXhpZHgoX1Vud2luZF9QdHIgcGMsIGludCAqcGNvdW50KTsKKyNpbmNsdWRlIDxsaW5rLmg+CiAKIC8qIEZvciBhIGdpdmVuIFBDLCBmaW5kIHRoZSAuc28gdGhhdCBpdCBiZWxvbmdzIHRvLgogICogUmV0dXJucyB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSAuQVJNLmV4aWR4IHNlY3Rpb24KZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vYmlvbmljL2V4aWR4X3N0YXRpYy5jIGIvbGliYy9hcmNoLWFybS9iaW9uaWMvZXhpZHhfc3RhdGljLmMKaW5kZXggZTc5ZTk1MS4uNzJjMGE1YiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9iaW9uaWMvZXhpZHhfc3RhdGljLmMKKysrIGIvbGliYy9hcmNoLWFybS9iaW9uaWMvZXhpZHhfc3RhdGljLmMKQEAgLTI1LDcgKzI1LDggQEAKICAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgogICogU1VDSCBEQU1BR0UuCiAgKi8KLXR5cGVkZWYgbG9uZyB1bnNpZ25lZCBpbnQgKl9VbndpbmRfUHRyOworCisjaW5jbHVkZSA8bGluay5oPgogCiAvKiBGaW5kIHRoZSAuQVJNLmV4aWR4IHNlY3Rpb24gKHdoaWNoIGluIHRoZSBjYXNlIG9mIGEgc3RhdGljIGV4ZWN1dGFibGUKICAqIGNhbiBiZSBpZGVudGlmaWVkIHRocm91Z2ggaXRzIHN0YXJ0IGFuZCBlbmQgc3ltYm9scyksIGFuZCByZXR1cm4gaXRzCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL2Jpb25pYy9mZnMuUyBiL2xpYmMvYXJjaC1hcm0vYmlvbmljL2Zmcy5TCmluZGV4IGM1OTA5MWYuLjcwMWFmOGMgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vYmlvbmljL2Zmcy5TCisrKyBiL2xpYmMvYXJjaC1hcm0vYmlvbmljL2Zmcy5TCkBAIC0zMSw1NSArMzEsMTEgQEAKICNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgogI2luY2x1ZGUgPG1hY2hpbmUvY3B1LWZlYXR1cmVzLmg+CiAKLS8qCi0gKiBmZnMgLSBmaW5kIGZpcnN0IHNldCBiaXQsIHRoaXMgYWxnb3JpdGhtIGlzb2xhdGVzIHRoZSBmaXJzdCBzZXQKLSAqIGJpdCwgdGhlbiBtdWx0aXBsaWVzIHRoZSBudW1iZXIgYnkgMHgwNDUwZmJhZiB3aGljaCBsZWF2ZXMgdGhlIHRvcAotICogNiBiaXRzIGFzIGFuIGluZGV4IGludG8gdGhlIHRhYmxlLiAgVGhpcyBhbGdvcml0aG0gc2hvdWxkIGJlIGEgd2luCi0gKiBvdmVyIHRoZSBjaGVja2luZyBlYWNoIGJpdCBpbiB0dXJuIGFzIHBlciB0aGUgQyBjb21waWxlZCB2ZXJzaW9uLgotICoKLSAqIFNvbWUgbmV3ZXIgQVJNIGFyY2hpdGVjdHVyZXMgaGF2ZSBhbiBpbnN0cnVjdGlvbiBuYW1lZAotICogQ0xaIChjb3VudCBsZWFkaW5nIFplcm8ncykgdGhhdCBpcyB1c2VkCi0gKgotICogVGhpcyBpcyB0aGUgZmZzIGFsZ29yaXRobSBkZXZpc2VkIGJ5IGQuc2VhbCBhbmQgcG9zdGVkIHRvIGNvbXAuc3lzLmFybSBvbgotICogMTYgRmViIDE5OTQuCi0gKi8KLQogRU5UUlkoZmZzKQogCS8qIFN0YW5kYXJkIHRyaWNrIHRvIGlzb2xhdGUgYm90dG9tIGJpdCBpbiByMCBvciAwIGlmIHIwID0gMCBvbiBlbnRyeSAqLwogIAlyc2IgICAgIHIxLCByMCwgIzAKICAJYW5kcyAgICByMCwgcjAsIHIxCi0jaWZuZGVmIF9fQVJNX0hBVkVfQ0xaCi0JLyoKLQkgKiBub3cgcjAgaGFzIGF0IG1vc3Qgb25lIHNldCBiaXQsIGNhbGwgdGhpcyBYCi0JICogaWYgWCA9IDAsIGFsbCBmdXJ0aGVyIGluc3RydWN0aW9ucyBhcmUgc2tpcHBlZAotCSAqLwotCWFkcm5lICAgcjIsIC5MX2Zmc190YWJsZQotCW9ycm5lICAgcjAsIHIwLCByMCwgbHNsICM0ICAvKiByMCA9IFggKiAweDExICovIAotCW9ycm5lICAgcjAsIHIwLCByMCwgbHNsICM2ICAvKiByMCA9IFggKiAweDQ1MSAqLwotCXJzYm5lICAgcjAsIHIwLCByMCwgbHNsICMxNiAvKiByMCA9IFggKiAweDA0NTBmYmFmICovCi0gICAgICAgICAgICAgIAotCS8qIG5vdyBsb29rdXAgaW4gdGFibGUgaW5kZXhlZCBvbiB0b3AgNiBiaXRzIG9mIHIwICovCi0JbGRybmViICByMCwgWyByMiwgcjAsIGxzciAjMjYgXQotCi0JYngJCWxyCi1FTkQoZmZzKQotCi0udGV4dDsKLS50eXBlIC5MX2Zmc190YWJsZSwgX0FTTV9UWVBFX09CSkVDVDsKLS5MX2Zmc190YWJsZToKLS8qICAgICAgICAgICAgICAgMCAgIDEgICAyICAgMyAgIDQgICA1ICAgNiAgIDcgICAgICAgICAgICovCi0JLmJ5dGUJIDAsICAxLCAgMiwgMTMsICAzLCAgNywgIDAsIDE0ICAvKiAgMC0gNyAqLwotCS5ieXRlCSA0LCAgMCwgIDgsICAwLCAgMCwgIDAsICAwLCAxNSAgLyogIDgtMTUgKi8KLQkuYnl0ZQkxMSwgIDUsICAwLCAgMCwgIDksICAwLCAgMCwgMjYgIC8qIDE2LTIzICovCi0JLmJ5dGUJIDAsICAwLCAgMCwgIDAsICAwLCAyMiwgMjgsIDE2ICAvKiAyNC0zMSAqLwotCS5ieXRlCTMyLCAxMiwgIDYsICAwLCAgMCwgIDAsICAwLCAgMAkvKiAzMi0zOSAqLwotCS5ieXRlCTEwLCAgMCwgIDAsIDI1LCAgMCwgIDAsIDIxLCAyNyAgLyogNDAtNDcgKi8KLQkuYnl0ZQkzMSwgIDAsICAwLCAgMCwgIDAsIDI0LCAgMCwgMjAgIC8qIDQ4LTU1ICovCi0JLmJ5dGUgICAzMCwgIDAsIDIzLCAxOSwgMjksIDE4LCAxNywgIDAgIC8qIDU2LTYzICovCi0jZWxzZSAvKiAhZGVmaW5lZChfX0FSTV9IQVZFX0NMWikgKi8KIAljbHpuZQlyMCwgcjAKIAlyc2JuZQlyMCwgcjAsICMzMgogCWJ4CQlscgogRU5EKGZmcykKLSNlbmRpZiAvKiAhZGVmaW5lZChfX0FSTV9IQVZFX0NMWikgKi8KLQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9iaW9uaWMvZnV0ZXhfYXJtLlMgYi9saWJjL2FyY2gtYXJtL2Jpb25pYy9mdXRleF9hcm0uUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTMxY2RiCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9iaW9uaWMvZnV0ZXhfYXJtLlMKQEAgLTAsMCArMSw3MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgorI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+CisKKyNkZWZpbmUgRlVURVhfV0FJVCAwCisjZGVmaW5lIEZVVEVYX1dBS0UgMQorCisvLyBfX2Z1dGV4X3N5c2NhbGwzKCpmdHgsIG9wLCB2YWwpCitFTlRSWShfX2Z1dGV4X3N5c2NhbGwzKQorICAgIG1vdiAgICAgaXAsIHI3CisgICAgbGRyICAgICByNywgPV9fTlJfZnV0ZXgKKyAgICBzd2kgICAgICMwCisgICAgbW92ICAgICByNywgaXAKKyAgICBieCAgICAgIGxyCitFTkQoX19mdXRleF9zeXNjYWxsMykKKworLy8gX19mdXRleF9zeXNjYWxsNCgqZnR4LCBvcCwgdmFsLCAqdGltZXNwZWMpCitFTlRSWShfX2Z1dGV4X3N5c2NhbGw0KQorICAgIGIgX19mdXRleF9zeXNjYWxsMworRU5EKF9fZnV0ZXhfc3lzY2FsbDQpCisKKy8vIF9fZnV0ZXhfd2FpdCgqZnR4LCB2YWwsICp0aW1lc3BlYykKK0VOVFJZKF9fZnV0ZXhfd2FpdCkKKyAgICBtb3YgICAgIGlwLCByNworICAgIG1vdiAgICAgcjMsIHIyCisgICAgbW92ICAgICByMiwgcjEKKyAgICBtb3YgICAgIHIxLCAjRlVURVhfV0FJVAorICAgIGxkciAgICAgcjcsID1fX05SX2Z1dGV4CisgICAgc3dpICAgICAjMAorICAgIG1vdiAgICAgcjcsIGlwCisgICAgYnggICAgICBscgorRU5EKF9fZnV0ZXhfd2FpdCkKKworLy8gX19mdXRleF93YWtlKCpmdHgsIGNvdW50ZXIpCitFTlRSWShfX2Z1dGV4X3dha2UpCisgICAgbW92ICAgICBpcCwgcjcKKyAgICBtb3YgICAgIHIyLCByMQorICAgIG1vdiAgICAgcjEsICNGVVRFWF9XQUtFCisgICAgbGRyICAgICByNywgPV9fTlJfZnV0ZXgKKyAgICBzd2kgICAgICMwCisgICAgbW92ICAgICByNywgaXAKKyAgICBieCAgICAgIGxyCitFTkQoX19mdXRleF93YWtlKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9iaW9uaWMva2lsbC5TIGIvbGliYy9hcmNoLWFybS9iaW9uaWMva2lsbC5TCmluZGV4IDMzZGZjMmIuLjcyMzYwMmEgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vYmlvbmljL2tpbGwuUworKysgYi9saWJjL2FyY2gtYXJtL2Jpb25pYy9raWxsLlMKQEAgLTI1LDYgKzI1LDExIEBACiAgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKICAqIFNVQ0ggREFNQUdFLgogICovCisKKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CisjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KKwogLyogdW5saWtlIG91ciBhdXRvLWdlbmVyYXRlZCBzeXNjYWxsIHN0dWJzLCB0aGlzIGNvZGUgc2F2ZXMgbHIKICAgIG9uIHRoZSBzdGFjaywgYXMgd2VsbCBhcyBhIGZldyBvdGhlciByZWdpc3RlcnMuIHRoaXMgbWFrZXMKICAgIG91ciBzdGFjayB1bndpbmRlciBoYXBweSwgd2hlbiB3ZSBnZW5lcmF0ZSBkZWJ1ZyBzdGFjawpAQCAtMzIsMTkgKzM3LDE0IEBACiAgICBhYm9ydCBkdWUgdG8gYSBmYXRhbCBydW50aW1lIGVycm9yIChlLmcuIGRldGVjdGlvbgogICAgb2YgYSBjb3JydXB0ZWQgbWFsbG9jIGhlYXApLgogKi8KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KLSNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgotCi0jaWZuZGVmIF9fTlJfa2lsbAotI2RlZmluZSBfX05SX2tpbGwgICAzNwotI2VuZGlmCiAKIEVOVFJZKGtpbGwpCiAgICAgc3RtZmQgICBzcCEsIHtyNC1yNywgaXAsIGxyfQogICAgIGxkciAgICAgcjcsID1fX05SX2tpbGwKICAgICBzd2kgICAgICMwCiAgICAgbGRtZmQgICBzcCEsIHtyNC1yNywgaXAsIGxyfQotICAgIG1vdnMgICAgcjAsIHIwCi0gICAgYnhwbCAgICBscgotICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKKyAgICBieGxzICAgIGxyCisgICAgbmVnICAgICByMCwgcjAKKyAgICBiICAgICAgIF9fc2V0X2Vycm5vCiBFTkQoa2lsbCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vYmlvbmljL2xpYmdjY19jb21wYXQuYyBiL2xpYmMvYXJjaC1hcm0vYmlvbmljL2xpYmdjY19jb21wYXQuYwppbmRleCBkMTg0NTY2Li5mNTdkZmIwIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL2Jpb25pYy9saWJnY2NfY29tcGF0LmMKKysrIGIvbGliYy9hcmNoLWFybS9iaW9uaWMvbGliZ2NjX2NvbXBhdC5jCkBAIC0zMCw4ICszMCw4IEBACiAgKiBkeW5hbWljIGxpbmtlciB0byBjb3B5IHRoZWlyIGRlZmluaXRpb24gaW50byB0aGUgZmluYWwgbGliYy5zbyBiaW5hcnkuCiAgKgogICogVGhleSBhcmUgcmVxdWlyZWQgdG8gZW5zdXJlIGJhY2t3YXJkcyBiaW5hcnkgY29tcGF0aWJpbGl0eSB3aXRoCi0gKiBBbmRyb2lkIDEuNSwgMS42IGFuZCBldmVuIDMuMCAgc3lzdGVtIGltYWdlcy4gU29tZSBhcHBsaWNhdGlvbnMgYnVpbHQKLSAqIHVzaW5nIHRoZSBOREsgcmVxdWlyZSB0aGVtIHRvIGJlIGhlcmUuCisgKiBsaWJjLnNvIHByb3ZpZGVkIGJ5IHRoZSBwbGF0Zm9ybSBhbmQgYmluYXJpZXMgYnVpbHQgd2l0aCB0aGUgTkRLIG9yCisgKiBkaWZmZXJlbnQgdmVyc2lvbnMvY29uZmlndXJhdGlvbnMgb2YgdG9vbGNoYWlucy4KICAqCiAgKiBOb3csIGZvciBhIG1vcmUgZWxhYm9yYXRlIGRlc2NyaXB0aW9uIG9mIHRoZSBpc3N1ZToKICAqCkBAIC00OCw3ICs0OCw5IEBACiAgKiAgICAgICAgIGdjYyA8b3B0aW9ucz4gLW8gbGliZm9vLnNvICBmb28uYSBsaWJnY2MuYSAtbGMgLWxtCiAgKgogICogVGhpcyBlbnN1cmVzIHRoYXQgYW55IGhlbHBlciBmdW5jdGlvbiBuZWVkZWQgYnkgdGhlIGNvZGUgaW4gZm9vLmEgaXMgY29waWVkCi0gKiBpbnRvIHRoZSBmaW5hbCBsaWJmb28uc28uIFVuZm9ydHVuYXRlbHksIHRoZSBBbmRyb2lkIGJ1aWxkIHN5c3RlbSBoYXMgYmVlbgorICogaW50byB0aGUgZmluYWwgbGliZm9vLnNvLiBIb3dldmVyLCBkb2luZyBzbyB3aWxsIGxpbmsgYSBidW5jaCBvZiBvdGhlciBfX2N4YQorICogZnVuY3Rpb25zIGZyb20gbGliZ2NjLmEgaW50byBlYWNoIC5zbyBhbmQgZXhlY3V0YWJsZSwgY2F1c2luZyA0aysgaW5jcmVhc2UKKyAqIGluIGV2ZXJ5IGJpbmFyeS4gVGhlcmVmb3JlIHRoZSBBbmRyb2lkIHBsYXRmb3JtIGJ1aWxkIHN5c3RlbSBoYXMgYmVlbgogICogdXNpbmcgdGhpcyBpbnN0ZWFkOgogICoKICAqICAgICAgICAgZ2NjIDxvcHRpb25zPiAtbyBsaWJmb28uc28gZm9vLmEgLWxjIC1sbSBsaWJnY2MuYQpAQCAtNTgsMjEgKzYwLDI3IEBACiAgKiBpbnRvIGxpYmZvby5zby4gSW5zdGVhZCwgYSBzeW1ib2wgaW1wb3J0IGRlZmluaXRpb24gd2lsbCBiZSBhZGRlZCB0byBpdAogICogc28gbGliZm9vLnNvIGNhbiBkaXJlY3RseSBjYWxsIHRoZSBvbmUgaW4gbGliYy5zbyBhdCBydW50aW1lLgogICoKLSAqIFdoZW4gY2hhbmdpbmcgdG9vbGNoYWlucyBmb3IgMi4wLCB0aGUgc2V0IG9mIGhlbHBlciBmdW5jdGlvbnMgY29waWVkIHRvCi0gKiBsaWJjLnNvIGNoYW5nZWQsIHdoaWNoIHJlc3VsdGVkIGluIHNvbWUgbmF0aXZlIHNoYXJlZCBsaWJyYXJpZXMgZ2VuZXJhdGVkCi0gKiB3aXRoIHRoZSBOREsgdG8gZmFpbCB0byBsb2FkIHByb3Blcmx5LgorICogV2hlbiByZWZyZXNoaW5nIHRvb2xjaGFpbnMgZm9yIG5ldyB2ZXJzaW9ucyBvciB1c2luZyBkaWZmZXJlbnQgYXJjaGl0ZWN0dXJlCisgKiBmbGFncywgdGhlIHNldCBvZiBoZWxwZXIgZnVuY3Rpb25zIGNvcGllZCB0byBsaWJjLnNvIG1heSBjaGFuZ2UsIHdoaWNoCisgKiByZXN1bHRlZCBpbiBzb21lIG5hdGl2ZSBzaGFyZWQgbGlicmFyaWVzIGdlbmVyYXRlZCB3aXRoIHRoZSBOREsgb3IgcHJlYnVpbHRzCisgKiBmcm9tIHZlbmRvcnMgdG8gZmFpbCB0byBsb2FkIHByb3Blcmx5LgogICoKICAqIFRoZSBOREsgaGFzIGJlZW4gZml4ZWQgYWZ0ZXIgMS42X3IxIHRvIHVzZSB0aGUgY29ycmVjdCBsaW5rIGNvbW1hbmQsIHNvCiAgKiBhbnkgbmF0aXZlIHNoYXJlZCBsaWJyYXJ5IGdlbmVyYXRlZCB3aXRoIGl0IHNob3VsZCBub3cgYmUgc2FmZSBmcm9tIHRoYXQKICAqIHByb2JsZW0uIE9uIHRoZSBvdGhlciBoYW5kLCBleGlzdGluZyBzaGFyZWQgbGlicmFyaWVzIGRpc3RyaWJ1dGVkIHdpdGgKICAqIGFwcGxpY2F0aW9ucyB0aGF0IHdlcmUgZ2VuZXJhdGVkIHdpdGggYSBwcmV2aW91cyB2ZXJzaW9uIG9mIHRoZSBOREsKLSAqIHN0aWxsIG5lZWQgYWxsIDEuNS8xLjYgaGVscGVyIGZ1bmN0aW9ucyBpbiBsaWJjLnNvIGFuZCBsaWJuLnNvCisgKiBzdGlsbCBuZWVkIGFsbCAxLjUvMS42IGhlbHBlciBmdW5jdGlvbnMgaW4gbGliYy5zbyBhbmQgbGlibS5zbwogICoKICAqIEFmdGVyIDMuMiwgdGhlIHRvb2xjaGFpbiB3YXMgdXBkYXRlZCBhZ2FpbiwgYWRkaW5nIF9fYWVhYmlfZjJ1aXogdG8gdGhlCiAgKiBsaXN0IG9mIHJlcXVpcmVtZW50cy4gVGVjaG5pY2FsbHksIHRoaXMgaXMgZHVlIHRvIG1pcy1saW5rZWQgTkRLIGxpYnJhcmllcwogICogYnV0IGl0IGlzIGVhc2llciB0byBhZGQgYSBzaW5nbGUgZnVuY3Rpb24gaGVyZSB0aGFuIGFza2luZyBzZXZlcmFsIGFwcAogICogZGV2ZWxvcGVycyB0byBmaXggdGhlaXIgYnVpbGQuCiAgKgorICogVGhlIF9fYWVhYmlfaWRpdiBmdW5jdGlvbiBpcyBhZGRlZCB0byB0aGUgbGlzdCBzaW5jZSBjb3J0ZXgtYTE1IHN1cHBvcnRzCisgKiBIVyBpZGl2IGluc3RydWN0aW9ucyBzbyB0aGUgc3lzdGVtIGxpYmMuc28gZG9lc24ndCBwdWxsIGluIHRoZSByZWZlcmVuY2UgdG8KKyAqIF9fYWVhYmlfaWRpdiBidXQgbGVnYWN5IGxpYnJhcmllcyBidWlsdCBhZ2FpbnN0IGNvcnRleC1hOSB0YXJnZXRzIHN0aWxsIG5lZWQKKyAqIGl0LgorICoKICAqIEZpbmFsIG5vdGU6IHNvbWUgb2YgdGhlIGZ1bmN0aW9ucyBiZWxvdyBzaG91bGQgcmVhbGx5IGJlIGluIGxpYm0uc28gdG8KICAqICAgICAgICAgICAgIGNvbXBsZXRlbHkgcmVmbGVjdCB0aGUgc3RhdGUgb2YgMS41LzEuNiBzeXN0ZW0gaW1hZ2VzLiBIb3dldmVyLAogICogICAgICAgICAgICAgc2luY2UgbGlibS5zbyBkZXBlbmRzIG9uIGxpYmMuc28sIGl0J3MgZWFzaWVyIHRvIHB1dCBhbGwgb2YKQEAgLTExMCw5ICsxMTgsMTMgQEAKICAgICBYWChfX2FlYWJpX2ZzdWIpICAgICAgICAgXAogICAgIFhYKF9fYWVhYmlfaTJkKSAgICAgICAgICBcCiAgICAgWFgoX19hZWFiaV9pMmYpICAgICAgICAgIFwKKyAgICBYWChfX2FlYWJpX2lkaXYpICAgICAgICAgXAogICAgIFhYKF9fYWVhYmlfbDJkKSAgICAgICAgICBcCiAgICAgWFgoX19hZWFiaV9sMmYpICAgICAgICAgIFwKKyAgICBYWChfX2FlYWJpX2xhc3IpICAgICAgICAgXAogICAgIFhYKF9fYWVhYmlfbG11bCkgICAgICAgICBcCisgICAgWFgoX19hZWFiaV9sbHNsKSAgICAgICAgIFwKKyAgICBYWChfX2FlYWJpX2xsc3IpICAgICAgICAgXAogICAgIFhYKF9fYWVhYmlfdWkyZCkgICAgICAgICBcCiAgICAgWFgoX19hZWFiaV91aTJmKSAgICAgICAgIFwKICAgICBYWChfX2FlYWJpX3VsMmQpICAgICAgICAgXApAQCAtMTIwLDcgKzEzMiw3IEBACiAgICAgWFgoX19jbXBkZjIpICAgICAgICAgICAgIFwKICAgICBYWChfX2RpdmRmMykgICAgICAgICAgICAgXAogICAgIFhYKF9fZGl2c2YzKSAgICAgICAgICAgICBcCi0gICAgWFgoX19lcWRmMikgICAgICAgICAgICAgXAorICAgIFhYKF9fZXFkZjIpICAgICAgICAgICAgICBcCiAgICAgWFgoX19leHRlbmRzZmRmMikgICAgICAgIFwKICAgICBYWChfX2ZpeGRmc2kpICAgICAgICAgICAgXAogICAgIFhYKF9fZml4c2ZzaSkgICAgICAgICAgICBcCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL2Jpb25pYy9tZW1jbXAuUyBiL2xpYmMvYXJjaC1hcm0vYmlvbmljL21lbWNtcC5TCmluZGV4IGM4NzJhNTEuLjdmYjQyODMgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vYmlvbmljL21lbWNtcC5TCisrKyBiL2xpYmMvYXJjaC1hcm0vYmlvbmljL21lbWNtcC5TCkBAIC0yOSw0NCArMjksOTMgQEAKICNpbmNsdWRlIDxtYWNoaW5lL2NwdS1mZWF0dXJlcy5oPgogI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+CiAKKworI2lmZGVmIEhBVkVfMzJfQllURV9DQUNIRV9MSU5FCisjZGVmaW5lIENBQ0hFX0xJTkVfU0laRSAgICAgMzIKKyNlbHNlCisjZGVmaW5lIENBQ0hFX0xJTkVfU0laRSAgICAgNjQKKyNlbmRpZgorCiAvKgotICogT3B0aW1pemVkIG1lbWNtcCgpIGZvciBBUk05LgotICogVGhpcyB3b3VsZCBub3QgYmUgb3B0aW1hbCBvbiBYU2NhbGUgb3IgQVJNMTEsIHdoZXJlIG1vcmUgcHJlZmV0Y2hpbmcKLSAqIGFuZCB1c2Ugb2YgUExEIHdpbGwgYmUgbmVlZGVkLgotICogVGhlIDIgbWFqb3Igb3B0aW16YXRpb25zIGhlcmUgYXJlCi0gKiAoMSkgVGhlIG1haW4gbG9vcCBjb21wYXJlcyAxNiBieXRlcyBhdCBhIHRpbWUKLSAqICgyKSBUaGUgbG9hZHMgYXJlIHNjaGVkdWxlZCBpbiBhIHdheSB0aGV5IHdvbid0IHN0YWxsCisgKiBPcHRpbWl6ZWQgbWVtY21wKCkgZm9yIENvcnRleC1BOS4KICAqLwogCiBFTlRSWShtZW1jbXApCi0gICAgICAgIFBMRCAgICAgICAgIChyMCwgIzApCi0gICAgICAgIFBMRCAgICAgICAgIChyMSwgIzApCisgICAgICAgIHBsZCAgICAgICAgIFtyMCwgIyhDQUNIRV9MSU5FX1NJWkUgKiAwKV0KKyAgICAgICAgcGxkICAgICAgICAgW3IwLCAjKENBQ0hFX0xJTkVfU0laRSAqIDEpXQogCiAgICAgICAgIC8qIHRha2Ugb2YgdGhlIGNhc2Ugd2hlcmUgbGVuZ3RoIGlzIDAgb3IgdGhlIGJ1ZmZlcnMgYXJlIHRoZSBzYW1lICovCiAgICAgICAgIGNtcCAgICAgICAgIHIwLCByMQotICAgICAgICBjbXBuZSAgICAgICByMiwgIzAKICAgICAgICAgbW92ZXEgICAgICAgcjAsICMwCiAgICAgICAgIGJ4ZXEgICAgICAgIGxyCiAKKyAgICAgICAgcGxkICAgICAgICAgW3IxLCAjKENBQ0hFX0xJTkVfU0laRSAqIDApXQorICAgICAgICBwbGQgICAgICAgICBbcjEsICMoQ0FDSEVfTElORV9TSVpFICogMSldCisKKyAgICAgICAgLyogbWFrZSBzdXJlIHdlIGhhdmUgYXQgbGVhc3QgOCs0IGJ5dGVzLCB0aGlzIHNpbXBsaWZ5IHRoaW5ncyBiZWxvdworICAgICAgICAgKiBhbmQgYXZvaWQgc29tZSBvdmVyaGVhZCBmb3Igc21hbGwgYmxvY2tzCisgICAgICAgICAqLworICAgICAgICBjbXAgICAgICAgIHIyLCAjKDgrNCkKKyAgICAgICAgYm1pICAgICAgICAxMGYKKy8qCisgKiBOZW9uIG9wdGltaXphdGlvbgorICogQ29tcGFyaW5nIDMyIGJ5dGVzIGF0IGEgdGltZQorICovCisjaWYgZGVmaW5lZChfX0FSTV9ORU9OX18pICYmIGRlZmluZWQoTkVPTl9VTkFMSUdORURfQUNDRVNTKQorICAgICAgICBzdWJzICAgICAgICByMiwgcjIsICMzMgorICAgICAgICBibG8gICAgICAgICAzZgorCisgICAgICAgIC8qIHByZWxvYWQgYWxsIHRoZSBjYWNoZSBsaW5lcyB3ZSBuZWVkLiAqLworICAgICAgICBwbGQgICAgICAgICBbcjAsICMoQ0FDSEVfTElORV9TSVpFICogMildCisgICAgICAgIHBsZCAgICAgICAgIFtyMSwgIyhDQUNIRV9MSU5FX1NJWkUgKiAyKV0KKworMTogICAgICAvKiBUaGUgbWFpbiBsb29wIGNvbXBhcmVzIDMyIGJ5dGVzIGF0IGEgdGltZSAqLworICAgICAgICB2bGQxLjggICAgICB7ZDAgLSBkM30sIFtyMF0hCisgICAgICAgIHBsZCAgICAgICAgIFtyMCwgIyhDQUNIRV9MSU5FX1NJWkUgKiAyKV0KKyAgICAgICAgdmxkMS44ICAgICAge2Q0IC0gZDd9LCBbcjFdIQorICAgICAgICBwbGQgICAgICAgICBbcjEsICMoQ0FDSEVfTElORV9TSVpFICogMildCisKKyAgICAgICAgLyogU3RhcnQgc3VidHJhY3RpbmcgdGhlIHZhbHVlcyBhbmQgbWVyZ2UgcmVzdWx0cyAqLworICAgICAgICB2c3ViLmk4ICAgICBxMCwgcTIKKyAgICAgICAgdnN1Yi5pOCAgICAgcTEsIHEzCisgICAgICAgIHZvcnIgICAgICAgIHEyLCBxMCwgcTEKKyAgICAgICAgdm9yciAgICAgICAgZDQsIGQ1CisgICAgICAgIHZtb3YgICAgICAgIHIzLCBpcCwgZDQKKyAgICAgICAgLyogQ2hlY2sgaWYgdGhlcmUgYXJlIGFueSBkaWZmZXJlbmNlcyBhbW9uZyB0aGUgMzIgYnl0ZXMgKi8KKyAgICAgICAgb3JycyAgICAgICAgcjMsIGlwCisgICAgICAgIGJuZSAgICAgICAgIDJmCisgICAgICAgIHN1YnMgICAgICAgIHIyLCByMiwgIzMyCisgICAgICAgIGJocyAgICAgICAgIDFiCisgICAgICAgIGIgICAgICAgICAgIDNmCisyOgorICAgICAgICAvKiBDaGVjayBpZiB0aGUgZGlmZmVyZW5jZSB3YXMgaW4gdGhlIGZpcnN0IG9yIGxhc3QgMTYgYnl0ZXMgKi8KKyAgICAgICAgc3ViICAgICAgICAgcjAsICMzMgorICAgICAgICB2b3JyICAgICAgICBkMCwgZDEKKyAgICAgICAgc3ViICAgICAgICAgcjEsICMzMgorICAgICAgICB2bW92ICAgICAgICByMywgaXAsIGQwCisgICAgICAgIG9ycnMgICAgICAgIHIzLCBpcAorICAgICAgICAvKiBpZiB0aGUgZmlyc3QgMTYgYnl0ZXMgYXJlIGVxdWFsLCB3ZSBvbmx5IGhhdmUgdG8gcmV3aW5kIDE2IGJ5dGVzICovCisgICAgICAgIGl0dHQgICAgICAgIGVxCisgICAgICAgIHN1YmVxICAgICAgIHIyLCAjMTYKKyAgICAgICAgYWRkZXEgICAgICAgcjAsICMxNgorICAgICAgICBhZGRlcSAgICAgICByMSwgIzE2CisKKzM6ICAgICAgLyogZml4LXVwIHRoZSByZW1haW5pbmcgY291bnQgKi8KKyAgICAgICAgYWRkICAgICAgICAgcjIsIHIyLCAjMzIKKworICAgICAgICBjbXAgICAgICAgIHIyLCAjKDgrNCkKKyAgICAgICAgYm1pICAgICAgICAxMGYKKyNlbmRpZgorCiAgICAgICAgIC5zYXZlIHtyNCwgbHJ9CiAgICAgICAgIC8qIHNhdmUgcmVnaXN0ZXJzICovCiAgICAgICAgIHN0bWZkICAgICAgIHNwISwge3I0LCBscn0KLSAgICAgICAgCi0gICAgICAgIFBMRCAgICAgICAgIChyMCwgIzMyKQotICAgICAgICBQTEQgICAgICAgICAocjEsICMzMikKIAogICAgICAgICAvKiBzaW5jZSByMCBob2xkIHRoZSByZXN1bHQsIG1vdmUgdGhlIGZpcnN0IHNvdXJjZQogICAgICAgICAgKiBwb2ludGVyIHNvbWV3aGVyZSBlbHNlCiAgICAgICAgICAqLwotICAgICAgICAgCiAgICAgICAgICBtb3YgICAgICAgIHI0LCByMAotICAgICAgICAgCi0gICAgICAgICAvKiBtYWtlIHN1cmUgd2UgaGF2ZSBhdCBsZWFzdCA4KzQgYnl0ZXMsIHRoaXMgc2ltcGxpZnkgdGhpbmdzIGJlbG93Ci0gICAgICAgICAgKiBhbmQgYXZvaWQgc29tZSBvdmVyaGVhZCBmb3Igc21hbGwgYmxvY2tzCi0gICAgICAgICAgKi8KLSAgICAgICAgIGNtcCAgICAgICAgcjIsICMoOCs0KQotICAgICAgICAgYm1pICAgICAgICA4ZgotICAgICAgICAKKwogICAgICAgICAvKiBhbGlnbiBmaXJzdCBwb2ludGVyIHRvIHdvcmQgYm91bmRhcnkKICAgICAgICAgICogb2Zmc2V0ID0gLXNyYyAmIDMKICAgICAgICAgICovCkBAIC0xMDIsOSArMTUxLDkgQEAKICAgICAgICAgbGRyICAgICAgICAgaXAsIFtyMV0KICAgICAgICAgc3VicyAgICAgICAgcjIsIHIyLCAjKDMyICsgNCkKICAgICAgICAgYm1pICAgICAgICAgMWYKLSAgICAgICAgCi0wOiAgICAgIFBMRCAgICAgICAgIChyNCwgIzY0KQotICAgICAgICBQTEQgICAgICAgICAocjEsICM2NCkKKworMDogICAgICBwbGQgICAgICAgICBbcjQsICMoQ0FDSEVfTElORV9TSVpFICogMildCisgICAgICAgIHBsZCAgICAgICAgIFtyMSwgIyhDQUNIRV9MSU5FX1NJWkUgKiAyKV0KICAgICAgICAgbGRyICAgICAgICAgcjAsIFtyNF0sICM0CiAgICAgICAgIGxkciAgICAgICAgIGxyLCBbcjEsICM0XSEKICAgICAgICAgZW9ycyAgICAgICAgcjAsIHIwLCBpcApAQCAtMTI5LDE0ICsxNzgsMTQgQEAKICAgICAgICAgbGRyZXEgICAgICAgcjAsIFtyNF0sICM0CiAgICAgICAgIGxkcmVxICAgICAgIGlwLCBbcjEsICM0XSEKICAgICAgICAgZW9yZXFzICAgICAgcjAsIHIwLCBscgotICAgICAgICBibmUgICAgICAgICAyZiAgICAgICAgCisgICAgICAgIGJuZSAgICAgICAgIDJmCiAgICAgICAgIHN1YnMgICAgICAgIHIyLCByMiwgIzMyCiAgICAgICAgIGJocyAgICAgICAgIDBiCiAKICAgICAgICAgLyogZG8gd2UgaGF2ZSBhdCBsZWFzdCA0IGJ5dGVzIGxlZnQ/ICovCiAxOiAgICAgIGFkZHMgICAgICAgIHIyLCByMiwgIygzMiAtIDQgKyA0KQogICAgICAgICBibWkgICAgICAgICA0ZgotICAgICAgICAKKwogICAgICAgICAvKiBmaW5pc2ggb2ZmIDQgYnl0ZXMgYXQgYSB0aW1lICovCiAzOiAgICAgIGxkciAgICAgICAgIHIwLCBbcjRdLCAjNAogICAgICAgICBsZHIgICAgICAgICBpcCwgW3IxXSwgIzQKQEAgLTE3MCwxOSArMjE5LDI4IEBACiA5OiAgICAgIC8qIHJlc3RvcmUgcmVnaXN0ZXJzIGFuZCByZXR1cm4gKi8KICAgICAgICAgbGRtZmQgICAgICAgc3AhLCB7cjQsIGxyfQogICAgICAgICBieCAgICAgICAgICBscgotRU5EKG1lbWNtcCkKIAotCi0KLQorMTA6ICAgICAvKiBwcm9jZXNzIGxlc3MgdGhhbiAxMiBieXRlcyAqLworICAgICAgICBjbXAgICAgICAgICByMiwgIzAKKyAgICAgICAgbW92ZXEgICAgICAgcjAsICMwCisgICAgICAgIGJ4ZXEgICAgICAgIGxyCisgICAgICAgIG1vdiAgICAgICAgIHIzLCByMAorMTE6CisgICAgICAgIGxkcmIgICAgICAgIHIwLCBbcjNdLCAjMQorICAgICAgICBsZHJiICAgICAgICBpcCwgW3IxXSwgIzEKKyAgICAgICAgc3VicyAgICAgICAgcjAsIGlwCisgICAgICAgIGJ4bmUgICAgICAgIGxyCisgICAgICAgIHN1YnMgICAgICAgIHIyLCByMiwgIzEKKyAgICAgICAgYm5lICAgICAgICAgMTFiCisgICAgICAgIGJ4ICAgICAgICAgIGxyCiAKIDU6ICAgICAgLyoqKioqKioqKioqKioqKiBub24tY29uZ3J1ZW50IGNhc2UgKioqKioqKioqKioqKioqLwotICAgICAgICBhbmQgICAgICAgICByMCwgcjEsICMzICAgICAgCisgICAgICAgIGFuZCAgICAgICAgIHIwLCByMSwgIzMKICAgICAgICAgY21wICAgICAgICAgcjAsICMyCiAgICAgICAgIGJuZSAgICAgICAgIDRmCiAKICAgICAgICAgLyogaGVyZSwgb2Zmc2V0IGlzIDIgKDE2LWJpdHMgYWxpZ25lZCwgc3BlY2lhbCBjYXNlZCkgKi8KLSAgICAgICAgCisKICAgICAgICAgLyogbWFrZSBzdXJlIHdlIGhhdmUgYXQgbGVhc3QgMTYgYnl0ZXMgdG8gcHJvY2VzcyAqLwogICAgICAgICBzdWJzICAgICAgICByMiwgcjIsICMxNgogICAgICAgICBhZGRtaSAgICAgICByMiwgcjIsICMxNgpAQCAtMTkyLDggKzI1MCw4IEBACiAgICAgICAgIGJpYyAgICAgICAgIHIxLCByMSwgIzMKICAgICAgICAgbGRyICAgICAgICAgbHIsIFtyMV0sICM0CiAKLTY6ICAgICAgUExEICAgICAgICAgKHIxLCAjNjQpCi0gICAgICAgIFBMRCAgICAgICAgIChyNCwgIzY0KQorNjogICAgICBwbGQgICAgICAgICBbcjEsICMoQ0FDSEVfTElORV9TSVpFICogMildCisgICAgICAgIHBsZCAgICAgICAgIFtyNCwgIyhDQUNIRV9MSU5FX1NJWkUgKiAyKV0KICAgICAgICAgbW92ICAgICAgICAgaXAsIGxyLCBsc3IgIzE2CiAgICAgICAgIGxkciAgICAgICAgIGxyLCBbcjFdLCAjNAogICAgICAgICBsZHIgICAgICAgICByMCwgW3I0XSwgIzQKQEAgLTI4MCwzICszMzgsNCBAQAogICAgICAgICBtb3YgICAgICAgICByMiwgIzQKIAkJbGRtZmQJCXNwISwge3I1LCByNiwgcjd9CiAgICAgICAgIGIgICAgICAgICAgIDhiCitFTkQobWVtY21wKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9iaW9uaWMvbWVtY3B5LlMgYi9saWJjL2FyY2gtYXJtL2Jpb25pYy9tZW1jcHkuUwppbmRleCA4MTViNWY2Li4wZGM4NmQ1IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL2Jpb25pYy9tZW1jcHkuUworKysgYi9saWJjL2FyY2gtYXJtL2Jpb25pYy9tZW1jcHkuUwpAQCAtMjksNyArMjksNyBAQAogI2luY2x1ZGUgPG1hY2hpbmUvY3B1LWZlYXR1cmVzLmg+CiAjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KIAotI2lmIGRlZmluZWQoX19BUk1fTkVPTl9fKQorI2lmIGRlZmluZWQoX19BUk1fTkVPTl9fKSAmJiAhZGVmaW5lZChBUkNIX0FSTV9VU0VfTk9OX05FT05fTUVNQ1BZKQogCiAgICAgICAgIC50ZXh0CiAgICAgICAgIC5mcHUgICAgbmVvbgpAQCAtMzcsMjggKzM3LDM1IEBACiAjaWZkZWYgSEFWRV8zMl9CWVRFX0NBQ0hFX0xJTkUKIC8qIGEgcHJlZmV0Y2ggZGlzdGFuY2Ugb2YgMiBjYWNoZS1saW5lcyAqLwogI2RlZmluZSBDQUNIRV9MSU5FX1NJWkUgICAgIDMyCi0jZGVmaW5lIFBSRUZFVENIX0RJU1RBTkNFICAgKENBQ0hFX0xJTkVfU0laRSoyKQogI2Vsc2UKIC8qIGEgcHJlZmV0Y2ggZGlzdGFuY2Ugb2YgNCBjYWNoZS1saW5lcyB3b3JrcyBiZXN0IGV4cGVyaW1lbnRhbGx5ICovCiAjZGVmaW5lIENBQ0hFX0xJTkVfU0laRSAgICAgNjQKLSNkZWZpbmUgUFJFRkVUQ0hfRElTVEFOQ0UgICAoQ0FDSEVfTElORV9TSVpFKjQpCiAjZW5kaWYKIAogRU5UUlkobWVtY3B5KQogICAgICAgICAuc2F2ZSAgICAgICB7cjAsIGxyfQogICAgICAgICAvKiBzdGFydCBwcmVsb2FkaW5nIGFzIGVhcmx5IGFzIHBvc3NpYmxlICovCi0gICAgICAgIHBsZCAgICAgICAgIFtyMSwgIyhDQUNIRV9MSU5FX1NJWkUqMCldCisgICAgICAgIHBsZCAgICAgICAgIFtyMSwgIyhDQUNIRV9MSU5FX1NJWkUgKiAwKV0KICAgICAgICAgc3RtZmQgICAgICAgc3AhLCB7cjAsIGxyfQotICAgICAgICBwbGQgICAgICAgICBbcjEsICMoQ0FDSEVfTElORV9TSVpFKjEpXQorICAgICAgICBwbGQgICAgICAgICBbcjEsICMoQ0FDSEVfTElORV9TSVpFICogMSldCiAKKy8qIElmIE5lb24gc3VwcG9ydHMgdW5hbGlnbmVkIGFjY2VzcyB0aGVuIHJlbW92ZSB0aGUgYWxpZ24gY29kZSwKKyAqIHVubGVzcyBhIHNpemUgbGltaXQgaGFzIGJlZW4gc3BlY2lmaWVkLgorICovCisjaWZuZGVmIE5FT05fVU5BTElHTkVEX0FDQ0VTUwogICAgICAgICAvKiBkbyB3ZSBoYXZlIGF0IGxlYXN0IDE2LWJ5dGVzIHRvIGNvcHkgKG5lZWRlZCBmb3IgYWxpZ25tZW50IGJlbG93KSAqLwogICAgICAgICBjbXAgICAgICAgICByMiwgIzE2CiAgICAgICAgIGJsbyAgICAgICAgIDVmCiAKKyAgICAgICAgLyogY2hlY2sgaWYgYnVmZmVycyBhcmUgYWxpZ25lZC4gSWYgc28sIHJ1biBhcm0tb25seSB2ZXJzaW9uICovCisgICAgICAgIGVvciAgICAgICAgIHIzLCByMCwgcjEKKyAgICAgICAgYW5kcyAgICAgICAgcjMsIHIzLCAjMHgzCisgICAgICAgIGJlcSAgICAgICAgIDExZgorCiAgICAgICAgIC8qIGFsaWduIGRlc3RpbmF0aW9uIHRvIGNhY2hlLWxpbmUgZm9yIHRoZSB3cml0ZS1idWZmZXIgKi8KICAgICAgICAgcnNiICAgICAgICAgcjMsIHIwLCAjMAogICAgICAgICBhbmRzICAgICAgICByMywgcjMsICMweEYKLSAgICAgICAgYmVxICAgICAgICAgMGYKKyAgICAgICAgYmVxICAgICAgICAgMmYKIAogICAgICAgICAvKiBjb3B5IHVwIHRvIDE1LWJ5dGVzIChjb3VudCBpbiByMykgKi8KICAgICAgICAgc3ViICAgICAgICAgcjIsIHIyLCByMwpAQCAtNzksMTAgKzg2LDkgQEAKICAgICAgICAgdmxkMS44ICAgICAge2QwfSwgW3IxXSEKICAgICAgICAgdnN0MS44ICAgICAge2QwfSwgW3IwLCA6NjRdIQogMjoKLQotMDogICAgICAvKiBwcmVsb2FkIGltbWVkaWF0ZWx5IHRoZSBuZXh0IGNhY2hlIGxpbmUsIHdoaWNoIHdlIG1heSBuZWVkICovCi0gICAgICAgIHBsZCAgICAgICAgIFtyMSwgIyhDQUNIRV9MSU5FX1NJWkUqMCldCi0gICAgICAgIHBsZCAgICAgICAgIFtyMSwgIyhDQUNIRV9MSU5FX1NJWkUqMSldCisgICAgICAgIC8qIHByZWxvYWQgaW1tZWRpYXRlbHkgdGhlIG5leHQgY2FjaGUgbGluZSwgd2hpY2ggd2UgbWF5IG5lZWQgKi8KKyAgICAgICAgcGxkICAgICAgICAgW3IxLCAjKENBQ0hFX0xJTkVfU0laRSAqIDApXQorICAgICAgICBwbGQgICAgICAgICBbcjEsICMoQ0FDSEVfTElORV9TSVpFICogMSldCiAKICNpZmRlZiBIQVZFXzMyX0JZVEVfQ0FDSEVfTElORQogICAgICAgICAvKiBtYWtlIHN1cmUgd2UgaGF2ZSBhdCBsZWFzdCAzMiBieXRlcyB0byBjb3B5ICovCkBAIC0xMDgsMjMgKzExNCwyMiBAQAogICAgICAgICBzdWJzICAgICAgICByMiwgcjIsICM2NAogICAgICAgICBibG8gICAgICAgICAyZgogCi0gICAgICAgIC8qIHByZWxvYWQgYWxsIHRoZSBjYWNoZSBsaW5lcyB3ZSBuZWVkLgotICAgICAgICAgKiBOT1RFOiB0aGUgbnVtYmVyIG9mIHBsZCBiZWxvdyBkZXBlbmRzIG9uIFBSRUZFVENIX0RJU1RBTkNFLAotICAgICAgICAgKiBpZGVhbGx5IHdvdWxkIHdvdWxkIGluY3JlYXNlIHRoZSBkaXN0YW5jZSBpbiB0aGUgbWFpbiBsb29wIHRvCi0gICAgICAgICAqIGF2b2lkIHRoZSBnb29meSBjb2RlIGJlbG93LiBJbiBwcmFjdGljZSB0aGlzIGRvZXNuJ3Qgc2VlbSB0byBtYWtlCi0gICAgICAgICAqIGEgYmlnIGRpZmZlcmVuY2UuCi0gICAgICAgICAqLwotICAgICAgICBwbGQgICAgICAgICBbcjEsICMoQ0FDSEVfTElORV9TSVpFKjIpXQotICAgICAgICBwbGQgICAgICAgICBbcjEsICMoQ0FDSEVfTElORV9TSVpFKjMpXQotICAgICAgICBwbGQgICAgICAgICBbcjEsICMoUFJFRkVUQ0hfRElTVEFOQ0UpXQorICAgICAgICAvKiBwcmVsb2FkIGFsbCB0aGUgY2FjaGUgbGluZXMgd2UgbmVlZC4gKi8KKyAgICAgICAgcGxkICAgICAgICAgW3IxLCAjKENBQ0hFX0xJTkVfU0laRSAqIDIpXQorICAgICAgICBwbGQgICAgICAgICBbcjEsICMoQ0FDSEVfTElORV9TSVpFICogMyldCiAKIDE6ICAgICAgLyogVGhlIG1haW4gbG9vcCBjb3BpZXMgNjQgYnl0ZXMgYXQgYSB0aW1lICovCi0gICAgICAgIHZsZDEuOCAgICAgIHtkMCAgLSBkM30sICAgW3IxXSEKLSAgICAgICAgdmxkMS44ICAgICAge2Q0ICAtIGQ3fSwgICBbcjFdIQotICAgICAgICBwbGQgICAgICAgICBbcjEsICMoUFJFRkVUQ0hfRElTVEFOQ0UpXQorICAgICAgICB2bGQxLjggICAgICB7ZDAgLSBkM30sIFtyMV0hCisgICAgICAgIHZsZDEuOCAgICAgIHtkNCAtIGQ3fSwgW3IxXSEKKyNpZmRlZiAgSEFWRV8zMl9CWVRFX0NBQ0hFX0xJTkUKKyAgICAgICAgcGxkICAgICAgICAgW3IxLCAjKENBQ0hFX0xJTkVfU0laRSAqIDIpXQorICAgICAgICBwbGQgICAgICAgICBbcjEsICMoQ0FDSEVfTElORV9TSVpFICogMyldCisjZWxzZQorICAgICAgICBwbGQgICAgICAgICBbcjEsICMoQ0FDSEVfTElORV9TSVpFICogMyldCisjZW5kaWYKICAgICAgICAgc3VicyAgICAgICAgcjIsIHIyLCAjNjQKLSAgICAgICAgdnN0MS44ICAgICAge2QwICAtIGQzfSwgICBbcjAsIDoxMjhdIQotICAgICAgICB2c3QxLjggICAgICB7ZDQgIC0gZDd9LCAgIFtyMCwgOjEyOF0hCisgICAgICAgIHZzdDEuOCAgICAgIHtkMCAtIGQzfSwgW3IwLCA6MTI4XSEKKyAgICAgICAgdnN0MS44ICAgICAge2Q0IC0gZDd9LCBbcjAsIDoxMjhdIQogICAgICAgICBiaHMgICAgICAgICAxYgogCiAyOiAgICAgIC8qIGZpeC11cCB0aGUgcmVtYWluaW5nIGNvdW50IGFuZCBtYWtlIHN1cmUgd2UgaGF2ZSA+PSAzMiBieXRlcyBsZWZ0ICovCkBAIC0xMzMsOSArMTM4LDkgQEAKICAgICAgICAgYmxvICAgICAgICAgNGYKIAogMzogICAgICAvKiAzMiBieXRlcyBhdCBhIHRpbWUuIFRoZXNlIGNhY2hlIGxpbmVzIHdlcmUgYWxyZWFkeSBwcmVsb2FkZWQgKi8KLSAgICAgICAgdmxkMS44ICAgICAge2QwIC0gZDN9LCAgW3IxXSEKKyAgICAgICAgdmxkMS44ICAgICAge2QwIC0gZDN9LCBbcjFdIQogICAgICAgICBzdWJzICAgICAgICByMiwgcjIsICMzMgotICAgICAgICB2c3QxLjggICAgICB7ZDAgLSBkM30sICBbcjAsIDoxMjhdIQorICAgICAgICB2c3QxLjggICAgICB7ZDAgLSBkM30sIFtyMCwgOjEyOF0hCiAgICAgICAgIGJocyAgICAgICAgIDNiCiAjZW5kaWYKIDQ6ICAgICAgLyogbGVzcyB0aGFuIDMyIGxlZnQgKi8KQEAgLTE0NSw3ICsxNTAsNiBAQAogICAgICAgICAvLyBjb3BpZXMgMTYgYnl0ZXMsIDEyOC1iaXRzIGFsaWduZWQKICAgICAgICAgdmxkMS44ICAgICAge2QwLCBkMX0sIFtyMV0hCiAgICAgICAgIHZzdDEuOCAgICAgIHtkMCwgZDF9LCBbcjAsIDoxMjhdIQotCiA1OiAgICAgIC8qIGNvcHkgdXAgdG8gMTUtYnl0ZXMgKGNvdW50IGluIHIyKSAqLwogICAgICAgICBtb3ZzICAgICAgICBpcCwgcjIsIGxzbCAjMjkKICAgICAgICAgYmNjICAgICAgICAgMWYKQEAgLTE2NCw2ICsxNjgsMTY0IEBACiAKICAgICAgICAgbGRtZmQgICAgICAgc3AhLCB7cjAsIGxyfQogICAgICAgICBieCAgICAgICAgICBscgorCisjZWxzZSAgIC8qIE5FT05fVU5BTElHTkVEX0FDQ0VTUyAqLworCisgICAgICAgIC8vIENoZWNrIHNvIGRpdmlkZXIgaXMgYXQgbGVhc3QgMTYgYnl0ZXMsIG5lZWRlZCBmb3IgYWxpZ25tZW50IGNvZGUuCisgICAgICAgIGNtcCAgICAgICAgIHIyLCAjMTYKKyAgICAgICAgYmxvICAgICAgICAgNWYKKworI2lmZGVmIE5FT05fTUVNQ1BZX0FMSUdOTUVOVF9ESVZJREVSCisgICAgICAgIC8qIENoZWNrIHRoZSB1cHBlciBzaXplIGxpbWl0IGZvciBOZW9uIHVuYWxpZ25lZCBtZW1vcnkgYWNjZXNzIGluIG1lbWNweSAqLworI2lmIE5FT05fTUVNQ1BZX0FMSUdOTUVOVF9ESVZJREVSID49IDE2CisgICAgICAgIGNtcCAgICAgICAgIHIyLCAjTkVPTl9NRU1DUFlfQUxJR05NRU5UX0RJVklERVIKKyAgICAgICAgYmxvICAgICAgICAgM2YKKyNlbmRpZgorICAgICAgICAvKiBjaGVjayBpZiBidWZmZXJzIGFyZSBhbGlnbmVkLiBJZiBzbywgcnVuIGFybS1vbmx5IHZlcnNpb24gKi8KKyAgICAgICAgZW9yICAgICAgICAgcjMsIHIwLCByMQorICAgICAgICBhbmRzICAgICAgICByMywgcjMsICMweDMKKyAgICAgICAgYmVxICAgICAgICAgMTFmCisKKyAgICAgICAgLyogYWxpZ24gZGVzdGluYXRpb24gdG8gMTYgYnl0ZXMgZm9yIHRoZSB3cml0ZS1idWZmZXIgKi8KKyAgICAgICAgcnNiICAgICAgICAgcjMsIHIwLCAjMAorICAgICAgICBhbmRzICAgICAgICByMywgcjMsICMweEYKKyAgICAgICAgYmVxICAgICAgICAgM2YKKworICAgICAgICAvKiBjb3B5IHVwIHRvIDE1LWJ5dGVzIChjb3VudCBpbiByMykgKi8KKyAgICAgICAgc3ViICAgICAgICAgcjIsIHIyLCByMworICAgICAgICBtb3ZzICAgICAgICBpcCwgcjMsIGxzbCAjMzEKKyAgICAgICAgbGRybWliICAgICAgbHIsIFtyMV0sICMxCisgICAgICAgIHN0cm1pYiAgICAgIGxyLCBbcjBdLCAjMQorICAgICAgICBsZHJjc2IgICAgICBpcCwgW3IxXSwgIzEKKyAgICAgICAgbGRyY3NiICAgICAgbHIsIFtyMV0sICMxCisgICAgICAgIHN0cmNzYiAgICAgIGlwLCBbcjBdLCAjMQorICAgICAgICBzdHJjc2IgICAgICBsciwgW3IwXSwgIzEKKyAgICAgICAgbW92cyAgICAgICAgaXAsIHIzLCBsc2wgIzI5CisgICAgICAgIGJnZSAgICAgICAgIDFmCisgICAgICAgIC8vIGNvcGllcyA0IGJ5dGVzLCBkZXN0aW5hdGlvbiAzMi1iaXRzIGFsaWduZWQKKyAgICAgICAgdmxkMS4zMiAgICAge2QwWzBdfSwgW3IxXSEKKyAgICAgICAgdnN0MS4zMiAgICAge2QwWzBdfSwgW3IwLCA6MzJdIQorMTogICAgICBiY2MgICAgICAgICAyZgorICAgICAgICAvLyBjb3BpZXMgOCBieXRlcywgZGVzdGluYXRpb24gNjQtYml0cyBhbGlnbmVkCisgICAgICAgIHZsZDEuOCAgICAgIHtkMH0sIFtyMV0hCisgICAgICAgIHZzdDEuOCAgICAgIHtkMH0sIFtyMCwgOjY0XSEKKzI6CisgICAgICAgIC8qIHByZWxvYWQgaW1tZWRpYXRlbHkgdGhlIG5leHQgY2FjaGUgbGluZSwgd2hpY2ggd2UgbWF5IG5lZWQgKi8KKyAgICAgICAgcGxkICAgICAgICAgW3IxLCAjKENBQ0hFX0xJTkVfU0laRSAqIDApXQorICAgICAgICBwbGQgICAgICAgICBbcjEsICMoQ0FDSEVfTElORV9TSVpFICogMSldCiszOgorI2VuZGlmCisgICAgICAgIC8qIG1ha2Ugc3VyZSB3ZSBoYXZlIGF0IGxlYXN0IDY0IGJ5dGVzIHRvIGNvcHkgKi8KKyAgICAgICAgc3VicyAgICAgICAgcjIsIHIyLCAjNjQKKyAgICAgICAgYmxvICAgICAgICAgMmYKKworICAgICAgICAvKiBwcmVsb2FkIGFsbCB0aGUgY2FjaGUgbGluZXMgd2UgbmVlZCAqLworICAgICAgICBwbGQgICAgICAgICBbcjEsICMoQ0FDSEVfTElORV9TSVpFICogMildCisgICAgICAgIHBsZCAgICAgICAgIFtyMSwgIyhDQUNIRV9MSU5FX1NJWkUgKiAzKV0KKworMTogICAgICAvKiBUaGUgbWFpbiBsb29wIGNvcGllcyA2NCBieXRlcyBhdCBhIHRpbWUgKi8KKyAgICAgICAgdmxkMS44ICAgICAge2QwIC0gZDN9LCBbcjFdIQorICAgICAgICB2bGQxLjggICAgICB7ZDQgLSBkN30sIFtyMV0hCisjaWZkZWYgIEhBVkVfMzJfQllURV9DQUNIRV9MSU5FCisgICAgICAgIHBsZCAgICAgICAgIFtyMSwgIyhDQUNIRV9MSU5FX1NJWkUgKiAyKV0KKyAgICAgICAgcGxkICAgICAgICAgW3IxLCAjKENBQ0hFX0xJTkVfU0laRSAqIDMpXQorI2Vsc2UKKyAgICAgICAgcGxkICAgICAgICAgW3IxLCAjKENBQ0hFX0xJTkVfU0laRSAqIDMpXQorI2VuZGlmCisgICAgICAgIHN1YnMgICAgICAgIHIyLCByMiwgIzY0CisgICAgICAgIHZzdDEuOCAgICAgIHtkMCAtIGQzfSwgW3IwXSEKKyAgICAgICAgdnN0MS44ICAgICAge2Q0IC0gZDd9LCBbcjBdIQorICAgICAgICBiaHMgICAgICAgICAxYgorCisyOiAgICAgIC8qIGZpeC11cCB0aGUgcmVtYWluaW5nIGNvdW50IGFuZCBtYWtlIHN1cmUgd2UgaGF2ZSA+PSAzMiBieXRlcyBsZWZ0ICovCisgICAgICAgIGFkZCAgICAgICAgIHIyLCByMiwgIzY0CisgICAgICAgIHN1YnMgICAgICAgIHIyLCByMiwgIzMyCisgICAgICAgIGJsbyAgICAgICAgIDRmCisKKzM6ICAgICAgLyogMzIgYnl0ZXMgYXQgYSB0aW1lLiBUaGVzZSBjYWNoZSBsaW5lcyB3ZXJlIGFscmVhZHkgcHJlbG9hZGVkICovCisgICAgICAgIHZsZDEuOCAgICAgIHtkMCAtIGQzfSwgW3IxXSEKKyAgICAgICAgc3VicyAgICAgICAgcjIsIHIyLCAjMzIKKyAgICAgICAgdnN0MS44ICAgICAge2QwIC0gZDN9LCBbcjBdIQorICAgICAgICBiaHMgICAgICAgICAzYgorCis0OiAgICAgIC8qIGxlc3MgdGhhbiAzMiBsZWZ0ICovCisgICAgICAgIGFkZCAgICAgICAgIHIyLCByMiwgIzMyCisgICAgICAgIHRzdCAgICAgICAgIHIyLCAjMHgxMAorICAgICAgICBiZXEgICAgICAgICA1ZgorICAgICAgICAvLyBjb3BpZXMgMTYgYnl0ZXMsIDEyOC1iaXRzIGFsaWduZWQKKyAgICAgICAgdmxkMS44ICAgICAge2QwLCBkMX0sIFtyMV0hCisgICAgICAgIHZzdDEuOCAgICAgIHtkMCwgZDF9LCBbcjBdIQorNTogICAgICAvKiBjb3B5IHVwIHRvIDE1LWJ5dGVzIChjb3VudCBpbiByMikgKi8KKyAgICAgICAgbW92cyAgICAgICAgaXAsIHIyLCBsc2wgIzI5CisgICAgICAgIGJjYyAgICAgICAgIDFmCisgICAgICAgIHZsZDEuOCAgICAgIHtkMH0sIFtyMV0hCisgICAgICAgIHZzdDEuOCAgICAgIHtkMH0sIFtyMF0hCisxOiAgICAgIGJnZSAgICAgICAgIDJmCisgICAgICAgIHZsZDEuMzIgICAgIHtkMFswXX0sIFtyMV0hCisgICAgICAgIHZzdDEuMzIgICAgIHtkMFswXX0sIFtyMF0hCisyOiAgICAgIG1vdnMgICAgICAgIGlwLCByMiwgbHNsICMzMQorICAgICAgICBsZHJtaWIgICAgICByMywgW3IxXSwgIzEKKyAgICAgICAgbGRyY3NiICAgICAgaXAsIFtyMV0sICMxCisgICAgICAgIGxkcmNzYiAgICAgIGxyLCBbcjFdLCAjMQorICAgICAgICBzdHJtaWIgICAgICByMywgW3IwXSwgIzEKKyAgICAgICAgc3RyY3NiICAgICAgaXAsIFtyMF0sICMxCisgICAgICAgIHN0cmNzYiAgICAgIGxyLCBbcjBdLCAjMQorCisgICAgICAgIGxkbWZkICAgICAgIHNwISwge3IwLCBscn0KKyAgICAgICAgYnggICAgICAgICAgbHIKKyNlbmRpZiAgLyogTkVPTl9VTkFMSUdORURfQUNDRVNTICovCisxMToKKyAgICAgICAgLyogU2ltcGxlIGFybS1vbmx5IGNvcHkgbG9vcCB0byBoYW5kbGUgYWxpZ25lZCBjb3B5IG9wZXJhdGlvbnMgKi8KKyAgICAgICAgc3RtZmQgICAgICAgc3AhLCB7cjQsIHI1LCByNiwgcjcsIHI4fQorICAgICAgICBwbGQgICAgICAgICBbcjEsICMoQ0FDSEVfTElORV9TSVpFICogMildCisKKyAgICAgICAgLyogQ2hlY2sgYWxpZ25tZW50ICovCisgICAgICAgIHJzYiAgICAgICAgIHIzLCByMSwgIzAKKyAgICAgICAgYW5kcyAgICAgICAgcjMsICMzCisgICAgICAgIGJlcSAgICAgICAgIDJmCisKKyAgICAgICAgLyogYWxpZ24gc291cmNlIHRvIDMyIGJpdHMuIFdlIG5lZWQgdG8gaW5zZXJ0IDIgaW5zdHJ1Y3Rpb25zIGJldHdlZW4KKyAgICAgICAgICogYSBsZHJbYnxoXSBhbmQgc3RyW2J8aF0gYmVjYXVzZSBieXRlIGFuZCBoYWxmLXdvcmQgaW5zdHJ1Y3Rpb25zCisgICAgICAgICAqIHN0YWxsIDIgY3ljbGVzLgorICAgICAgICAgKi8KKyAgICAgICAgbW92cyAgICAgICAgcjEyLCByMywgbHNsICMzMQorICAgICAgICBzdWIgICAgICAgICByMiwgcjIsIHIzICAgICAgLyogd2Uga25vdyB0aGF0IHIzIDw9IHIyIGJlY2F1c2UgcjIgPj0gNCAqLworICAgICAgICBsZHJtaWIgICAgICByMywgW3IxXSwgIzEKKyAgICAgICAgbGRyY3NiICAgICAgcjQsIFtyMV0sICMxCisgICAgICAgIGxkcmNzYiAgICAgIHI1LCBbcjFdLCAjMQorICAgICAgICBzdHJtaWIgICAgICByMywgW3IwXSwgIzEKKyAgICAgICAgc3RyY3NiICAgICAgcjQsIFtyMF0sICMxCisgICAgICAgIHN0cmNzYiAgICAgIHI1LCBbcjBdLCAjMQorMjoKKyAgICAgICAgc3VicyAgICAgICAgcjIsICMzMgorICAgICAgICBibHQgICAgICAgICA1ZgorICAgICAgICBwbGQgICAgICAgICBbcjEsICMoQ0FDSEVfTElORV9TSVpFICogMyldCiszOiAgICAgIC8qIE1haW4gY29weSBsb29wLCBjb3B5aW5nIDMyIGJ5dGVzIGF0IGEgdGltZSAqLworICAgICAgICBwbGQgICAgICAgICBbcjEsICMoQ0FDSEVfTElORV9TSVpFICogNCldCisgICAgICAgIGxkbWlhICAgICAgIHIxISwge3IzLCByNCwgcjUsIHI2LCByNywgcjgsIHIxMiwgbHJ9CisgICAgICAgIHN1YnMgICAgICAgIHIyLCByMiwgIzMyCisgICAgICAgIHN0bWlhICAgICAgIHIwISwge3IzLCByNCwgcjUsIHI2LCByNywgcjgsIHIxMiwgbHJ9CisgICAgICAgIGJnZSAgICAgICAgIDNiCis1OiAgICAgIC8qIEhhbmRsZSBhbnkgcmVtYWluaW5nIGJ5dGVzICovCisgICAgICAgIGFkZHMgICAgICAgIHIyLCAjMzIKKyAgICAgICAgYmVxICAgICAgICAgNmYKKworICAgICAgICBtb3ZzICAgICAgICByMTIsIHIyLCBsc2wgIzI4CisgICAgICAgIGxkbWNzaWEgICAgIHIxISwge3IzLCByNCwgcjUsIHI2fSAgIC8qIDE2IGJ5dGVzICovCisgICAgICAgIGxkbW1paWEgICAgIHIxISwge3I3LCByOH0gICAgICAgICAgIC8qICA4IGJ5dGVzICovCisgICAgICAgIHN0bWNzaWEgICAgIHIwISwge3IzLCByNCwgcjUsIHI2fQorICAgICAgICBzdG1taWlhICAgICByMCEsIHtyNywgcjh9CisgICAgICAgIG1vdnMgICAgICAgIHIxMiwgcjIsIGxzbCAjMzAKKyAgICAgICAgbGRyY3MgICAgICAgcjMsIFtyMV0sICM0ICAgICAgICAgICAgLyogIDQgYnl0ZXMgKi8KKyAgICAgICAgbGRybWloICAgICAgcjQsIFtyMV0sICMyICAgICAgICAgICAgLyogIDIgYnl0ZXMgKi8KKyAgICAgICAgc3RyY3MgICAgICAgcjMsIFtyMF0sICM0CisgICAgICAgIHN0cm1paCAgICAgIHI0LCBbcjBdLCAjMgorICAgICAgICB0c3QgICAgICAgICByMiwgIzB4MQorICAgICAgICBsZHJuZWIgICAgICByMywgW3IxXSAgICAgICAgICAgICAgICAvKiAgbGFzdCBieXRlICAqLworICAgICAgICBzdHJuZWIgICAgICByMywgW3IwXQorNjoKKyAgICAgICAgbGRtZmQgICAgICAgc3AhLCB7cjQsIHI1LCByNiwgcjcsIHI4fQorICAgICAgICBsZG1mZCAgICAgICBzcCEsIHtyMCwgcGN9CiBFTkQobWVtY3B5KQogCiAKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vYmlvbmljL21lbWNweS5hMTUuUyBiL2xpYmMvYXJjaC1hcm0vYmlvbmljL21lbWNweS5hMTUuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MTZlMjBjCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9iaW9uaWMvbWVtY3B5LmExNS5TCkBAIC0wLDAgKzEsNDA2IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDEzIEFSTSBMdGQKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBUaGUgbmFtZSBvZiB0aGUgY29tcGFueSBtYXkgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlCisgKiAgICBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4KKyAqICAgIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUk0gTFREIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRAorICogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBBUk0gTFREIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQKKyAqIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCisgKiBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyAgICAvKiBQcm90b3R5cGU6IHZvaWQgKm1lbWNweSAodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBjb3VudCkuICAqLworCisgICAgICAgIC8qIFVzZSB0aGUgdmVyc2lvbiBvZiBtZW1jcHkgaW1wbGVtZW50ZWQgdXNpbmcgTERSRCBhbmQgU1RSRC4KKyAgICAgICAgICAgVGhpcyB2ZXJzaW9uIGlzIHR1bmVkIGZvciBDb3J0ZXgtQTE1LgorICAgICAgICAgICBUaGlzIG1pZ2h0IG5vdCBiZSB0aGUgYmVzdCBmb3Igb3RoZXIgQVJNdjctQSBDUFVzLAorICAgICAgICAgICBidXQgdGhlcmUgaXMgbm8gcHJlZGVmaW5lIHRvIGRpc3Rpbmd1aXNoIGJldHdlZW4KKyAgICAgICAgICAgZGlmZmVyZW50IENQVXMgaW4gdGhlIHNhbWUgYXJjaGl0ZWN0dXJlLAorICAgICAgICAgICBhbmQgdGhpcyB2ZXJzaW9uIGlzIGJldHRlciB0aGFuIHRoZSBwbGFpbiBtZW1jcHkgcHJvdmlkZWQgaW4gbmV3bGliLgorCisgICAgICAgICAgIFRoZXJlZm9yZSwgd2UgdXNlIHRoaXMgdmVyc2lvbiBmb3IgYWxsIEFSTXY3LUEgQ1BVUy4gICovCisKKyAgICAgICAgLyogVG8gbWFrZSB0aGUgc2FtZSBjb2RlIGNvbXBpbGUgZm9yIGJvdGggQVJNIGFuZCBUaHVtYiBpbnN0cnVjdGlvbgorICAgICAgIHNldHMsIHN3aXRjaCB0byB1bmlmaWVkIHN5bnRheCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoaXMgZnVuY3Rpb24uCisgICAgICAgICAgIEhvd2V2ZXIsIGJ5IHVzaW5nIHRoZSBzYW1lIGNvZGUsIHdlIG1heSBiZSBtaXNzaW5nIG9wdGltaXphdGlvbgorICAgICAgIG9wcG9ydHVuaXRpZXMuICBGb3IgaW5zdGFuY2UsIGluIExEUkQvU1RSRCBpbnN0cnVjdGlvbnMsIHRoZSBmaXJzdAorICAgICAgIGRlc3RpbmF0aW9uIHJlZ2lzdGVyIG11c3QgYmUgZXZlbiBhbmQgdGhlIHNlY29uZCBjb25zZWN1dGl2ZSBpbgorICAgICAgIEFSTSBzdGF0ZSwgYnV0IG5vdCBpbiBUaHVtYiBzdGF0ZS4gICovCisKKyNpbmNsdWRlIDxtYWNoaW5lL2NwdS1mZWF0dXJlcy5oPgorI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+CisKKyAgICAgICAgLnN5bnRheCAgICAgICAgIHVuaWZpZWQKKworRU5UUlkobWVtY3B5KQorCisgICAgICAgLyogQXNzdW1lcyB0aGF0IG4gPj0gMCwgYW5kIGRzdCwgc3JjIGFyZSB2YWxpZCBwb2ludGVycy4KKyAgICAgICAgICBJZiB0aGVyZSBpcyBhdCBsZWFzdCA4IGJ5dGVzIHRvIGNvcHksIHVzZSBMRFJEL1NUUkQuCisgICAgICAgICAgSWYgc3JjIGFuZCBkc3QgYXJlIG1pc2FsaWduZWQgd2l0aCBkaWZmZXJlbnQgb2Zmc2V0cywKKyAgICAgICAgICBmaXJzdCBjb3B5IGJ5dGUgYnkgYnl0ZSB1bnRpbCBkc3QgaXMgYWxpZ25lZCwKKyAgICAgICAgICBhbmQgdGhlbiBjb3B5IHVzaW5nIExEUkQvU1RSRCBhbmQgc2hpZnQgaWYgbmVlZGVkLgorICAgICAgICAgIFdoZW4gbGVzcyB0aGFuIDggbGVmdCwgY29weSBhIHdvcmQgYW5kIHRoZW4gYnl0ZSBieSBieXRlLiAgKi8KKworICAgICAgIC8qIFNhdmUgcmVnaXN0ZXJzIChyMCBob2xkcyB0aGUgcmV0dXJuIHZhbHVlKToKKyAgICAgICAgICBvcHRpbWl6ZWQgcHVzaCB7cjAsIHI0LCByNSwgcjYsIHI3LCBscn0uCisgICAgICAgICAgVG8gdHJ5IGFuZCBpbXByb3ZlIHBlcmZvcm1hbmNlLCBzdGFjayBsYXlvdXQgY2hhbmdlZCwKKyAgICAgICAgICBpLmUuLCBub3Qga2VlcGluZyB0aGUgc3RhY2sgbG9va2luZyBsaWtlIHVzZXJzIGV4cGVjdAorICAgICAgICAgIChoaWdoZXN0IG51bWJlcmVkIHJlZ2lzdGVyIGF0IGhpZ2hlc3QgYWRkcmVzcykuICAqLworICAgICAgICAuc2F2ZSAgIHtyMCwgbHJ9CisgICAgICAgIHB1c2ggICAge3IwLCBscn0KKyAgICAgICAgLnNhdmUgICB7cjQsIHI1fQorICAgICAgICBzdHJkICAgIHI0LCByNSwgW3NwLCAjLThdIQorICAgICAgICAuc2F2ZSAgIHtyNiwgcjd9CisgICAgICAgIHN0cmQgICAgcjYsIHI3LCBbc3AsICMtOF0hCisKKyAgICAgICAvKiBUT0RPOiBBZGQgZGVidWcgZnJhbWUgZGlyZWN0aXZlcy4KKyAgICAgICAgICBXZSBkb24ndCBuZWVkIGV4Y2VwdGlvbiB1bndpbmQgZGlyZWN0aXZlcywgYmVjYXVzZSB0aGUgY29kZSBiZWxvdworICAgICAgZG9lcyBub3QgdGhyb3cgYW55IGV4Y2VwdGlvbnMgYW5kIGRvZXMgbm90IGNhbGwgYW55IG90aGVyIGZ1bmN0aW9ucy4KKyAgICAgICAgICBHZW5lcmFsbHksIG5ld2xpYiBmdW5jdGlvbnMgbGlrZSB0aGlzIGxhY2sgZGVidWcgaW5mb3JtYXRpb24gZm9yCisgICAgICBhc3NlbWJsZXIgc291cmNlLiAgKi8KKworICAgICAgICAvKiBHZXQgY29weWluZyBvZiB0aW55IGJsb2NrcyBvdXQgb2YgdGhlIHdheSBmaXJzdC4gICovCisgICAgICAgIC8qIElzIHRoZXJlIGF0IGxlYXN0IDQgYnl0ZXMgdG8gY29weT8gICovCisgICAgICAgIHN1YnMgICAgcjIsIHIyLCAjNAorICAgICAgICBibHQgICAgIGNvcHlfbGVzc190aGFuXzQgICAgICAgICAgICAgICAgIC8qIElmIG4gPCA0LiAgKi8KKworICAgICAgICAvKiBDaGVjayB3b3JkIGFsaWdubWVudC4gICovCisgICAgICAgIGFuZHMgICAgaXAsIHIwLCAjMyAgICAgICAgICAgICAgICAgICAgICAgLyogaXAgPSBsYXN0IDIgYml0cyBvZiBkc3QuICAqLworICAgICAgICBibmUgICAgIGRzdF9ub3Rfd29yZF9hbGlnbmVkICAgICAgICAgICAgIC8qIElmIGRzdCBpcyBub3Qgd29yZC1hbGlnbmVkLiAgKi8KKworICAgICAgICAvKiBHZXQgaGVyZSBpZiBkc3QgaXMgd29yZC1hbGlnbmVkLiAgKi8KKyAgICAgICAgYW5kcyAgICBpcCwgcjEsICMzICAgICAgICAgICAgICAgICAgICAgIC8qIGlwID0gbGFzdCAyIGJpdHMgb2Ygc3JjLiAgKi8KKyAgICAgICAgYm5lICAgICBzcmNfbm90X3dvcmRfYWxpZ25lZCAgICAgICAgICAgIC8qIElmIHNyYyBpcyBub3Qgd29yZC1hbGlnbmVkLiAgKi8KK3dvcmRfYWxpZ25lZDoKKyAgICAgICAgLyogR2V0IGhlcmUgaWYgc291cmNlIGFuZCBkc3QgYm90aCBhcmUgd29yZC1hbGlnbmVkLgorICAgICAgICAgICBUaGUgbnVtYmVyIG9mIGJ5dGVzIHJlbWFpbmluZyB0byBjb3B5IGlzIHIyKzQuICAqLworCisgICAgICAgIC8qIElzIHRoZXJlIGlzIGF0IGxlYXN0IDY0IGJ5dGVzIHRvIGNvcHk/ICAqLworICAgICAgICBzdWJzICAgIHIyLCByMiwgIzYwCisgICAgICAgIGJsdCAgICAgY29weV9sZXNzX3RoYW5fNjQgICAgICAgICAgICAgICAgLyogSWYgcjIgKyA0IDwgNjQuICAqLworCisgICAgICAgIC8qIEZpcnN0LCBhbGlnbiB0aGUgZGVzdGluYXRpb24gYnVmZmVyIHRvIDgtYnl0ZXMsCisgICAgICAgICAgIHRvIG1ha2Ugc3VyZSBkb3VibGUgbG9hZHMgYW5kIHN0b3JlcyBkb24ndCBjcm9zcyBjYWNoZSBsaW5lIGJvdW5kYXJ5LAorICAgICAgICAgICBhcyB0aGV5IGFyZSB0aGVuIG1vcmUgZXhwZW5zaXZlIGV2ZW4gaWYgdGhlIGRhdGEgaXMgaW4gdGhlIGNhY2hlCisgICAgICAgICAgIChyZXF1aXJlIHR3byBsb2FkL3N0b3JlIGlzc3VlIGN5Y2xlcyBpbnN0ZWFkIG9mIG9uZSkuCisgICAgICAgICAgIElmIG9ubHkgb25lIG9mIHRoZSBidWZmZXJzIGlzIG5vdCA4LWJ5dGVzIGFsaWduZWQsCisgICAgICAgICAgIHRoZW4gaXQncyBtb3JlIGltcG9ydGFudCB0byBhbGlnbiBkc3QgdGhhbiBzcmMsCisgICAgICAgICAgIGJlY2F1c2UgdGhlcmUgaXMgbW9yZSBwZW5hbHR5IGZvciBzdG9yZXMKKyAgICAgICAgICAgdGhhbiBsb2FkcyB0aGF0IGNyb3NzIGNhY2hlbGluZSBib3VuZGFyeS4KKyAgICAgICAgICAgVGhpcyBjaGVjayBhbmQgcmVhbGlnbm1lbnQgYXJlIG9ubHkgd29ydGggZG9pbmcKKyAgICAgICAgICAgaWYgdGhlcmUgaXMgYSBsb3QgdG8gY29weS4gICovCisKKyAgICAgICAgLyogR2V0IGhlcmUgaWYgZHN0IGlzIHdvcmQgYWxpZ25lZCwKKyAgICAgICAgICAgaS5lLiwgdGhlIDIgbGVhc3Qgc2lnbmlmaWNhbnQgYml0cyBhcmUgMC4KKyAgICAgICAgICAgSWYgZHN0IGlzIG5vdCAydyBhbGlnbmVkIChpLmUuLCB0aGUgM3JkIGJpdCBpcyBub3Qgc2V0IGluIGRzdCksCisgICAgICAgICAgIHRoZW4gY29weSAxIHdvcmQgKDQgYnl0ZXMpLiAgKi8KKyAgICAgICAgYW5kcyAgICByMywgcjAsICM0CisgICAgICAgIGJlcSAgICAgMTFmICAgICAgICAgICAgICAgICAgLyogSWYgZHN0IGFscmVhZHkgdHdvLXdvcmQgYWxpZ25lZC4gICovCisgICAgICAgIGxkciAgICAgcjMsIFtyMV0sICM0CisgICAgICAgIHN0ciAgICAgcjMsIFtyMF0sICM0CisgICAgICAgIHN1YnMgICAgcjIsIHIyLCAjNAorICAgICAgICBibHQgICAgIGNvcHlfbGVzc190aGFuXzY0CisKKzExOgorICAgICAgICAvKiBUT0RPOiBBbGlnbiB0byBjYWNoZWxpbmUgKHVzZWZ1bCBmb3IgUExEIG9wdGltaXphdGlvbikuICAqLworCisgICAgICAgIC8qIEV2ZXJ5IGxvb3AgaXRlcmF0aW9uIGNvcGllcyA2NCBieXRlcy4gICovCisxOgorICAgICAgICAuaXJwICAgIG9mZnNldCwgIzAsICM4LCAjMTYsICMyNCwgIzMyLCAjNDAsICM0OCwgIzU2CisgICAgICAgIGxkcmQgICAgcjQsIHI1LCBbcjEsIFxvZmZzZXRdCisgICAgICAgIHN0cmQgICAgcjQsIHI1LCBbcjAsIFxvZmZzZXRdCisgICAgICAgIC5lbmRyCisKKyAgICAgICAgYWRkICAgICByMCwgcjAsICM2NAorICAgICAgICBhZGQgICAgIHIxLCByMSwgIzY0CisgICAgICAgIHN1YnMgICAgcjIsIHIyLCAjNjQKKyAgICAgICAgYmdlICAgICAxYiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJZiB0aGVyZSBpcyBtb3JlIHRvIGNvcHkuICAqLworCitjb3B5X2xlc3NfdGhhbl82NDoKKworICAgICAgICAvKiBHZXQgaGVyZSBpZiBsZXNzIHRoYW4gNjQgYnl0ZXMgdG8gY29weSwgLTY0IDw9IHIyIDwgMC4KKyAgICAgICAgICAgUmVzdG9yZSB0aGUgY291bnQgaWYgdGhlcmUgaXMgbW9yZSB0aGFuIDcgYnl0ZXMgdG8gY29weS4gICovCisgICAgICAgIGFkZHMgICAgcjIsIHIyLCAjNTYKKyAgICAgICAgYmx0ICAgICBjb3B5X2xlc3NfdGhhbl84CisKKyAgICAgICAgLyogQ29weSA4IGJ5dGVzIGF0IGEgdGltZS4gICovCisyOgorICAgICAgICBsZHJkICAgIHI0LCByNSwgW3IxXSwgIzgKKyAgICAgICAgc3RyZCAgICByNCwgcjUsIFtyMF0sICM4CisgICAgICAgIHN1YnMgICAgcjIsIHIyLCAjOAorICAgICAgICBiZ2UgICAgIDJiICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIElmIHRoZXJlIGlzIG1vcmUgdG8gY29weS4gICovCisKK2NvcHlfbGVzc190aGFuXzg6CisKKyAgICAgICAgLyogR2V0IGhlcmUgaWYgbGVzcyB0aGFuIDggYnl0ZXMgdG8gY29weSwgLTggPD0gcjIgPCAwLgorICAgICAgICAgICBDaGVjayBpZiB0aGVyZSBpcyBtb3JlIHRvIGNvcHkuICAqLworICAgICAgICBjbW4gICAgIHIyLCAjOAorICAgICAgICBiZXEgICAgIHJldHVybiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSWYgcjIgKyA4ID09IDAuICAqLworCisgICAgICAgIC8qIFJlc3RvcmUgdGhlIGNvdW50IGlmIHRoZXJlIGlzIG1vcmUgdGhhbiAzIGJ5dGVzIHRvIGNvcHkuICAqLworICAgICAgICBhZGRzICAgIHIyLCByMiwgIzQKKyAgICAgICAgYmx0ICAgICBjb3B5X2xlc3NfdGhhbl80CisKKyAgICAgICAgLyogQ29weSA0IGJ5dGVzLiAgKi8KKyAgICAgICAgbGRyICAgICByMywgW3IxXSwgIzQKKyAgICAgICAgc3RyICAgICByMywgW3IwXSwgIzQKKworY29weV9sZXNzX3RoYW5fNDoKKyAgICAgICAgLyogR2V0IGhlcmUgaWYgbGVzcyB0aGFuIDQgYnl0ZXMgdG8gY29weSwgLTQgPD0gcjIgPCAwLiAgKi8KKworICAgICAgICAvKiBSZXN0b3JlIHRoZSBjb3VudCwgY2hlY2sgaWYgdGhlcmUgaXMgbW9yZSB0byBjb3B5LiAgKi8KKyAgICAgICAgYWRkcyAgICByMiwgcjIsICM0CisgICAgICAgIGJlcSAgICAgcmV0dXJuICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJZiByMiA9PSAwLiAgKi8KKworICAgICAgICAvKiBHZXQgaGVyZSB3aXRoIHIyIGlzIGluIHsxLDIsM309ezAxLDEwLDExfS4gICovCisgICAgICAgIC8qIExvZ2ljYWwgc2hpZnQgbGVmdCByMiwgaW5zZXJ0IDBzLCB1cGRhdGUgZmxhZ3MuICAqLworICAgICAgICBsc2xzICAgIHIyLCByMiwgIzMxCisKKyAgICAgICAgLyogQ29weSBieXRlIGJ5IGJ5dGUuCisgICAgICAgICAgIENvbmRpdGlvbiBuZSBtZWFucyB0aGUgbGFzdCBiaXQgb2YgcjIgaXMgMC4KKyAgICAgICAgICAgQ29uZGl0aW9uIGNzIG1lYW5zIHRoZSBzZWNvbmQgdG8gbGFzdCBiaXQgb2YgcjIgaXMgc2V0LAorICAgICAgICAgICBpLmUuLCByMiBpcyAxIG9yIDMuICAqLworICAgICAgICBpdHQgICAgIG5lCisgICAgICAgIGxkcmJuZSAgcjMsIFtyMV0sICMxCisgICAgICAgIHN0cmJuZSAgcjMsIFtyMF0sICMxCisKKyAgICAgICAgaXR0dHQgICBjcworICAgICAgICBsZHJiY3MgIHI0LCBbcjFdLCAjMQorICAgICAgICBsZHJiY3MgIHI1LCBbcjFdCisgICAgICAgIHN0cmJjcyAgcjQsIFtyMF0sICMxCisgICAgICAgIHN0cmJjcyAgcjUsIFtyMF0KKworcmV0dXJuOgorICAgICAgICAvKiBSZXN0b3JlIHJlZ2lzdGVyczogb3B0aW1pemVkIHBvcCB7cjAsIHI0LCByNSwgcjYsIHI3LCBwY30gICAqLworICAgICAgICAvKiBUaGlzIGlzIHRoZSBvbmx5IHJldHVybiBwb2ludCBvZiBtZW1jcHkuICAqLworICAgICAgICBsZHJkIHI2LCByNywgW3NwXSwgIzgKKyAgICAgICAgbGRyZCByNCwgcjUsIFtzcF0sICM4CisgICAgICAgIHBvcCB7cjAsIHBjfQorCisjaWZuZGVmIF9fQVJNX0ZFQVRVUkVfVU5BTElHTkVECisKKyAgICAgICAvKiBUaGUgZm9sbG93aW5nIGFzc2VtYmx5IG1hY3JvIGltcGxlbWVudHMgbWlzYWxpZ25lZCBjb3B5IGluIHNvZnR3YXJlLgorICAgICAgICAgIEFzc3VtZXMgdGhhdCBkc3QgaXMgd29yZCBhbGlnbmVkLCBzcmMgaXMgYXQgb2Zmc2V0ICJwdWxsIiBiaXRzIGZyb20KKyAgICAgIHdvcmQsIHB1c2ggPSAzMiAtIHB1bGwsIGFuZCB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRoYXQgcmVtYWluIHRvIGNvcHkKKyAgICAgIGlzIHIyICsgNCwgcjIgPj0gMC4gICovCisKKyAgICAgICAvKiBJbiB0aGUgY29kZSBiZWxvdywgcjIgaXMgdGhlIG51bWJlciBvZiBieXRlcyB0aGF0IHJlbWFpbiB0byBiZQorICAgICAgd3JpdHRlbi4gIFRoZSBudW1iZXIgb2YgYnl0ZXMgcmVhZCBpcyBhbHdheXMgbGFyZ2VyLCBiZWNhdXNlIHdlIGhhdmUKKyAgICAgIHBhcnRpYWwgd29yZHMgaW4gdGhlIHNoaWZ0IHF1ZXVlLiAgKi8KKworICAgICAgICAubWFjcm8gIG1pc2NvcHkgcHVsbCBwdXNoIHNoaWZ0bGVmdCBzaGlmdHJpZ2h0CisKKyAgICAgICAgLyogQWxpZ24gc3JjIHRvIHRoZSBwcmV2aW91cyB3b3JkIGJvdW5kYXJ5LiAgKi8KKyAgICAgICAgYmljICAgICByMSwgcjEsICMzCisKKyAgICAgICAgLyogSW5pdGlhbGl6ZSB0aGUgc2hpZnQgcXVldWUuICAqLworICAgICAgICBsZHIgICAgIHI1LCBbcjFdLCAjNCAgICAgICAgICAgICAgICAgICAvKiBMb2FkIGEgd29yZCBmcm9tIHNvdXJjZS4gICovCisKKyAgICAgICAgc3VicyAgICByMiwgcjIsICM0CisgICAgICAgIGJsdCAgICAgNmYgICAgICAgICAgLyogR28gdG8gbWlzYWxpZ25lZCBjb3B5IG9mIGxlc3MgdGhhbiA4IGJ5dGVzLiAgKi8KKworICAgICAgIC8qIEdldCBoZXJlIGlmIHRoZXJlIGlzIG1vcmUgdGhhbiA4IGJ5dGVzIHRvIGNvcHkuCisgICAgICAgICAgVGhlIG51bWJlciBvZiBieXRlcyB0byBjb3B5IGlzIHIyKzgsIHIyID49IDAuICAqLworCisgICAgICAgc3VicyAgICAgcjIsIHIyLCAjNTYKKyAgICAgICBibHQgICAgICA0ZiAgICAgICAgIC8qIEdvIHRvIG1pc2FsaWduZWQgY29weSBvZiBsZXNzIHRoYW4gNjQgYnl0ZXMuICAqLworCiszOgorICAgICAgIC8qIEdldCBoZXJlIGlmIHRoZXJlIGlzIG1vcmUgdGhhbiA2NCBieXRlcyB0byBjb3B5LgorICAgICAgICAgIFRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gY29weSBpcyByMis2NCwgcjIgPj0gMC4gICovCisKKyAgICAgICAvKiBDb3B5IDY0IGJ5dGVzIGluIGV2ZXJ5IGl0ZXJhdGlvbi4KKyAgICAgICAgICBVc2UgYSBwYXJ0aWFsIHdvcmQgZnJvbSB0aGUgc2hpZnQgcXVldWUuICAqLworICAgICAgICAuaXJwICAgIG9mZnNldCwgIzAsICM4LCAjMTYsICMyNCwgIzMyLCAjNDAsICM0OCwgIzU2CisgICAgICAgIG1vdiAgICAgcjYsIHI1LCBcc2hpZnRsZWZ0ICNccHVsbAorICAgICAgICBsZHJkICAgIHI0LCByNSwgW3IxLCBcb2Zmc2V0XQorICAgICAgICBvcnIgICAgIHI2LCByNiwgcjQsIFxzaGlmdHJpZ2h0ICNccHVzaAorICAgICAgICBtb3YgICAgIHI3LCByNCwgXHNoaWZ0bGVmdCAjXHB1bGwKKyAgICAgICAgb3JyICAgICByNywgcjcsIHI1LCBcc2hpZnRyaWdodCAjXHB1c2gKKyAgICAgICAgc3RyZCAgICByNiwgcjcsIFtyMCwgXG9mZnNldF0KKyAgICAgICAgLmVuZHIKKworICAgICAgICBhZGQgICAgIHIxLCByMSwgIzY0CisgICAgICAgIGFkZCAgICAgcjAsIHIwLCAjNjQKKyAgICAgICAgc3VicyAgICByMiwgcjIsICM2NAorICAgICAgICBiZ2UgICAgIDNiCisKKzQ6CisgICAgICAgLyogR2V0IGhlcmUgaWYgdGhlcmUgaXMgbGVzcyB0aGFuIDY0IGJ5dGVzIHRvIGNvcHkgKC02NCA8PSByMiA8IDApCisgICAgICBhbmQgdGhleSBhcmUgbWlzYWxpZ25lZC4gICovCisKKyAgICAgICAvKiBSZXN0b3JlIHRoZSBjb3VudCBpZiB0aGVyZSBpcyBtb3JlIHRoYW4gNyBieXRlcyB0byBjb3B5LiAgKi8KKyAgICAgICAgYWRkcyAgICByMiwgcjIsICM1NgorCisgICAgICAgIGJsdCAgICAgNmYgICAgICAgICAgLyogR28gdG8gbWlzYWxpZ25lZCBjb3B5IG9mIGxlc3MgdGhhbiA4IGJ5dGVzLiAgKi8KKworNToKKyAgICAgICAgLyogQ29weSA4IGJ5dGVzIGF0IGEgdGltZS4KKyAgICAgICAgICAgVXNlIGEgcGFydGlhbCB3b3JkIGZyb20gdGhlIHNoaWZ0IHF1ZXVlLiAgKi8KKyAgICAgICAgbW92ICAgICByNiwgcjUsIFxzaGlmdGxlZnQgI1xwdWxsCisgICAgICAgIGxkcmQgICAgcjQsIHI1LCBbcjFdLCAjOAorICAgICAgICBvcnIgICAgIHI2LCByNiwgcjQsIFxzaGlmdHJpZ2h0ICNccHVzaAorICAgICAgICBtb3YgICAgIHI3LCByNCwgXHNoaWZ0bGVmdCAjXHB1bGwKKyAgICAgICAgb3JyICAgICByNywgcjcsIHI1LCBcc2hpZnRyaWdodCAjXHB1c2gKKyAgICAgICAgc3RyZCAgICByNiwgcjcsIFtyMF0sICM4CisKKyAgICAgICAgc3VicyAgICByMiwgcjIsICM4CisgICAgICAgIGJnZSAgICAgNWIgICAgICAgICAgICAgICAgICAgICAgICAvKiBJZiB0aGVyZSBpcyBtb3JlIHRvIGNvcHkuICAqLworCis2OgorICAgICAgICAvKiBHZXQgaGVyZSBpZiB0aGVyZSBsZXNzIHRoYW4gOCBieXRlcyB0byBjb3B5ICgtOCA8PSByMiA8IDApCisgICAgICAgICAgIGFuZCB0aGV5IGFyZSBtaXNhbGlnbmVkLiAgKi8KKworICAgICAgICAvKiBDaGVjayBpZiB0aGVyZSBpcyBtb3JlIHRvIGNvcHkuICAqLworICAgICAgICBjbW4gICAgIHIyLCAjOAorICAgICAgICBiZXEgICAgIHJldHVybgorCisgICAgICAgIC8qIENoZWNrIGlmIHRoZXJlIGlzIGxlc3MgdGhhbiA0IGJ5dGVzIHRvIGNvcHkuICAqLworICAgICAgICBjbW4gICAgIHIyLCAjNAorCisgICAgICAgIGl0dCAgICAgbHQKKyAgICAgICAgLyogUmVzdG9yZSBzcmMgb2Zmc2V0IGZyb20gd29yZC1hbGlnbi4gICovCisgICAgICAgIHN1Ymx0ICAgcjEsIHIxLCAjKFxwdXNoIC8gOCkKKyAgICAgICAgYmx0ICAgICBjb3B5X2xlc3NfdGhhbl80CisKKyAgICAgICAgLyogVXNlIGEgcGFydGlhbCB3b3JkIGZyb20gdGhlIHNoaWZ0IHF1ZXVlLiAgKi8KKyAgICAgICAgbW92ICAgICByMywgcjUsIFxzaGlmdGxlZnQgI1xwdWxsCisgICAgICAgIC8qIExvYWQgYSB3b3JkIGZyb20gc3JjLCBidXQgd2l0aG91dCB3cml0ZWJhY2sKKyAgICAgICAgICAgKHRoaXMgd29yZCBpcyBub3QgZnVsbHkgd3JpdHRlbiB0byBkc3QpLiAgKi8KKyAgICAgICAgbGRyICAgICByNSwgW3IxXQorCisgICAgICAgIC8qIFJlc3RvcmUgc3JjIG9mZnNldCBmcm9tIHdvcmQtYWxpZ24uICAqLworICAgICAgICBhZGQgICAgIHIxLCByMSwgIyhccHVsbCAvIDgpCisKKyAgICAgICAgLyogU2hpZnQgYnl0ZXMgdG8gY3JlYXRlIG9uZSBkc3Qgd29yZCBhbmQgc3RvcmUgaXQuICAqLworICAgICAgICBvcnIgICAgIHIzLCByMywgcjUsIFxzaGlmdHJpZ2h0ICNccHVzaAorICAgICAgICBzdHIgICAgIHIzLCBbcjBdLCAjNAorCisgICAgICAgIC8qIFVzZSBzaW5nbGUgYnl0ZSBjb3B5aW5nIG9mIHRoZSByZW1haW5pbmcgYnl0ZXMuICAqLworICAgICAgICBiICAgICAgIGNvcHlfbGVzc190aGFuXzQKKworICAgICAgICAuZW5kbQorCisjZW5kaWYgLyogbm90IF9fQVJNX0ZFQVRVUkVfVU5BTElHTkVEICAqLworCitkc3Rfbm90X3dvcmRfYWxpZ25lZDoKKworICAgICAgIC8qIEdldCBoZXJlIHdoZW4gZHN0IGlzIG5vdCBhbGlnbmVkIGFuZCBpcCBoYXMgdGhlIGxhc3QgMiBiaXRzIG9mIGRzdCwKKyAgICAgICAgICBpLmUuLCBpcCBpcyB0aGUgb2Zmc2V0IG9mIGRzdCBmcm9tIHdvcmQuCisgICAgICAgICAgVGhlIG51bWJlciBvZiBieXRlcyB0aGF0IHJlbWFpbnMgdG8gY29weSBpcyByMiArIDQsCisgICAgICAgICAgaS5lLiwgdGhlcmUgYXJlIGF0IGxlYXN0IDQgYnl0ZXMgdG8gY29weS4KKyAgICAgICAgICBXcml0ZSBhIHBhcnRpYWwgd29yZCAoMCB0byAzIGJ5dGVzKSwgc3VjaCB0aGF0IGRzdCBiZWNvbWVzCisgICAgICB3b3JkLWFsaWduZWQuICAqLworCisgICAgICAgLyogSWYgZHN0IGlzIGF0IGlwIGJ5dGVzIG9mZnNldCBmcm9tIGEgd29yZCAod2l0aCAwIDwgaXAgPCA0KSwKKyAgICAgICAgICB0aGVuIHRoZXJlIGFyZSAoNCAtIGlwKSBieXRlcyB0byBmaWxsIHVwIHRvIGFsaWduIGRzdCB0byB0aGUgbmV4dAorICAgICAgd29yZC4gICovCisgICAgICAgIHJzYiAgICAgaXAsIGlwLCAjNCAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlwID0gIzQgLSBpcC4gICovCisgICAgICAgIGNtcCAgICAgaXAsICMyCisKKyAgICAgICAvKiBDb3B5IGJ5dGUgYnkgYnl0ZSB3aXRoIGNvbmRpdGlvbmFscy4gICovCisgICAgICAgIGl0dCAgICAgZ3QKKyAgICAgICAgbGRyYmd0ICByMywgW3IxXSwgIzEKKyAgICAgICAgc3RyYmd0ICByMywgW3IwXSwgIzEKKworICAgICAgICBpdHQgICAgIGdlCisgICAgICAgIGxkcmJnZSAgcjQsIFtyMV0sICMxCisgICAgICAgIHN0cmJnZSAgcjQsIFtyMF0sICMxCisKKyAgICAgICAgbGRyYiAgICBsciwgW3IxXSwgIzEKKyAgICAgICAgc3RyYiAgICBsciwgW3IwXSwgIzEKKworICAgICAgIC8qIFVwZGF0ZSB0aGUgY291bnQuCisgICAgICAgICAgaXAgaG9sZHMgdGhlIG51bWJlciBvZiBieXRlcyB3ZSBoYXZlIGp1c3QgY29waWVkLiAgKi8KKyAgICAgICAgc3VicyAgICByMiwgcjIsIGlwICAgICAgICAgICAgICAgICAgICAgICAgLyogcjIgPSByMiAtIGlwLiAgKi8KKyAgICAgICAgYmx0ICAgICBjb3B5X2xlc3NfdGhhbl80ICAgICAgICAgICAgICAgICAgLyogSWYgcjIgPCBpcC4gICovCisKKyAgICAgICAvKiBHZXQgaGVyZSBpZiB0aGVyZSBhcmUgbW9yZSB0aGFuIDQgYnl0ZXMgdG8gY29weS4KKyAgICAgICAgICBDaGVjayBpZiBzcmMgaXMgYWxpZ25lZC4gIElmIGJlZm9yZWhhbmQgc3JjIGFuZCBkc3Qgd2VyZSBub3Qgd29yZAorICAgICAgYWxpZ25lZCBidXQgY29uZ3J1ZW50IChzYW1lIG9mZnNldCksIHRoZW4gbm93IHRoZXkgYXJlIGJvdGgKKyAgICAgIHdvcmQtYWxpZ25lZCwgYW5kIHdlIGNhbiBjb3B5IHRoZSByZXN0IGVmZmljaWVudGx5ICh3aXRob3V0CisgICAgICBzaGlmdGluZykuICAqLworICAgICAgICBhbmRzICAgIGlwLCByMSwgIzMgICAgICAgICAgICAgICAgICAgIC8qIGlwID0gbGFzdCAyIGJpdHMgb2Ygc3JjLiAgKi8KKyAgICAgICAgYmVxICAgICB3b3JkX2FsaWduZWQgICAgICAgICAgICAgICAgICAvKiBJZiByMSBpcyB3b3JkLWFsaWduZWQuICAqLworCitzcmNfbm90X3dvcmRfYWxpZ25lZDoKKyAgICAgICAvKiBHZXQgaGVyZSB3aGVuIHNyYyBpcyBub3Qgd29yZC1hbGlnbmVkLCBidXQgZHN0IGlzIHdvcmQtYWxpZ25lZC4KKyAgICAgICAgICBUaGUgbnVtYmVyIG9mIGJ5dGVzIHRoYXQgcmVtYWlucyB0byBjb3B5IGlzIHIyKzQuICAqLworCisjaWZkZWYgX19BUk1fRkVBVFVSRV9VTkFMSUdORUQKKyAgICAgICAvKiBDb3B5IHdvcmQgYnkgd29yZCB1c2luZyBMRFIgd2hlbiBhbGlnbm1lbnQgY2FuIGJlIGRvbmUgaW4gaGFyZHdhcmUsCisgICAgICAgICAgaS5lLiwgU0NUTFIuQSBpcyBzZXQsIHN1cHBvcnRpbmcgdW5hbGlnbmVkIGFjY2VzcyBpbiBMRFIgYW5kIFNUUi4gICovCisgICAgICAgIHN1YnMgICAgcjIsIHIyLCAjNjAKKyAgICAgICAgYmx0ICAgICA4ZgorCis3OgorICAgICAgICAvKiBDb3B5IDY0IGJ5dGVzIGluIGV2ZXJ5IGxvb3AgaXRlcmF0aW9uLiAgKi8KKyAgICAgICAgLmlycCAgICBvZmZzZXQsICMwLCAjNCwgIzgsICMxMiwgIzE2LCAjMjAsICMyNCwgIzI4LCAjMzIsICMzNiwgIzQwLCAjNDQsICM0OCwgIzUyLCAjNTYsICM2MAorICAgICAgICBsZHIgICAgIHIzLCBbcjEsIFxvZmZzZXRdCisgICAgICAgIHN0ciAgICAgcjMsIFtyMCwgXG9mZnNldF0KKyAgICAgICAgLmVuZHIKKworICAgICAgICBhZGQgICAgIHIwLCByMCwgIzY0CisgICAgICAgIGFkZCAgICAgcjEsIHIxLCAjNjQKKyAgICAgICAgc3VicyAgICByMiwgcjIsICM2NAorICAgICAgICBiZ2UgICAgIDdiCisKKzg6CisgICAgICAgIC8qIEdldCBoZXJlIGlmIGxlc3MgdGhhbiA2NCBieXRlcyB0byBjb3B5LCAtNjQgPD0gcjIgPCAwLgorICAgICAgICAgICBDaGVjayBpZiB0aGVyZSBpcyBtb3JlIHRoYW4gMyBieXRlcyB0byBjb3B5LiAgKi8KKyAgICAgICAgYWRkcyAgICByMiwgcjIsICM2MAorICAgICAgICBibHQgICAgIGNvcHlfbGVzc190aGFuXzQKKworOToKKyAgICAgICAvKiBHZXQgaGVyZSBpZiB0aGVyZSBpcyBsZXNzIHRoYW4gNjQgYnV0IGF0IGxlYXN0IDQgYnl0ZXMgdG8gY29weSwKKyAgICAgICAgICB3aGVyZSB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRvIGNvcHkgaXMgcjIrNC4gICovCisgICAgICAgIGxkciAgICAgcjMsIFtyMV0sICM0CisgICAgICAgIHN0ciAgICAgcjMsIFtyMF0sICM0CisgICAgICAgIHN1YnMgICAgcjIsIHIyLCAjNAorICAgICAgICBiZ2UgICAgIDliCisKKyAgICAgICAgYiAgICAgICBjb3B5X2xlc3NfdGhhbl80CisKKyNlbHNlIC8qIG5vdCBfX0FSTV9GRUFUVVJFX1VOQUxJR05FRCAgKi8KKworICAgICAgIC8qIGlwIGhhcyBsYXN0IDIgYml0cyBvZiBzcmMsCisgICAgICAgICAgaS5lLiwgaXAgaXMgdGhlIG9mZnNldCBvZiBzcmMgZnJvbSB3b3JkLCBhbmQgaXAgPiAwLgorICAgICAgICAgIENvbXB1dGUgc2hpZnRzIG5lZWRlZCB0byBjb3B5IGZyb20gc3JjIHRvIGRzdC4gICovCisgICAgICAgIGNtcCAgICAgaXAsICMyCisgICAgICAgIGJlcSAgICAgbWlzY29weV8xNl8xNiAgICAgICAgICAgICAvKiBJZiBpcCA9PSAyLiAgKi8KKyAgICAgICAgYmdlICAgICBtaXNjb3B5XzI0XzggICAgICAgICAgICAgIC8qIElmIGlwID09IDMuICAqLworCisgICAgICAgIC8qIEdldCBoZXJlIGlmIGlwID09IDEuICAqLworCisgICAgICAgIC8qIEVuZGlhbiBpbmRlcGVuZGVudCBtYWNyb3MgZm9yIHNoaWZ0aW5nIGJ5dGVzIHdpdGhpbiByZWdpc3RlcnMuICAqLworCisjaWZuZGVmIF9fQVJNRUJfXworbWlzY29weV84XzI0OiAgIG1pc2NvcHkgcHVsbD04IHB1c2g9MjQgc2hpZnRsZWZ0PWxzciBzaGlmdHJpZ2h0PWxzbAorbWlzY29weV8xNl8xNjogIG1pc2NvcHkgcHVsbD0xNiBwdXNoPTE2IHNoaWZ0bGVmdD1sc3Igc2hpZnRyaWdodD1sc2wKK21pc2NvcHlfMjRfODogICBtaXNjb3B5IHB1bGw9MjQgcHVzaD04IHNoaWZ0bGVmdD1sc3Igc2hpZnRyaWdodD1sc2wKKyNlbHNlICAvKiBub3QgX19BUk1FQl9fICovCittaXNjb3B5XzhfMjQ6ICAgbWlzY29weSBwdWxsPTggcHVzaD0yNCBzaGlmdGxlZnQ9bHNsIHNoaWZ0cmlnaHQ9bHNyCittaXNjb3B5XzE2XzE2OiAgbWlzY29weSBwdWxsPTE2IHB1c2g9MTYgc2hpZnRsZWZ0PWxzbCBzaGlmdHJpZ2h0PWxzcgorbWlzY29weV8yNF84OiAgIG1pc2NvcHkgcHVsbD0yNCBwdXNoPTggc2hpZnRsZWZ0PWxzbCBzaGlmdHJpZ2h0PWxzcgorI2VuZGlmICAvKiBub3QgX19BUk1FQl9fICovCisKKyNlbmRpZiAgLyogbm90IF9fQVJNX0ZFQVRVUkVfVU5BTElHTkVEICAqLworCitFTkQobWVtY3B5KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9iaW9uaWMvbWVtY3B5LmE5LlMgYi9saWJjL2FyY2gtYXJtL2Jpb25pYy9tZW1jcHkuYTkuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYmExZmY1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9iaW9uaWMvbWVtY3B5LmE5LlMKQEAgLTAsMCArMSw2MTQgQEAKKy8qIENvcHlyaWdodCAoYykgMjAxMywgTGluYXJvIExpbWl0ZWQKKyAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKKyAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgICBhcmUgbWV0OgorCisgICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisKKyAgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisKKyAgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBMaW5hcm8gTGltaXRlZCBub3IgdGhlIG5hbWVzIG9mIGl0cworICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKKyAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAgICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgICBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAgIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgICBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgICBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgICBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAgIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICAgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICAgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgICBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisgKi8KKworLyoKKyAgIFRoaXMgbWVtY3B5IHJvdXRpbmUgaXMgb3B0aW1pc2VkIGZvciBDb3J0ZXgtQTE1IGNvcmVzIGFuZCB0YWtlcyBhZHZhbnRhZ2UKKyAgIG9mIFZGUCBvciBORU9OIHdoZW4gYnVpbHQgd2l0aCB0aGUgYXBwcm9wcmlhdGUgZmxhZ3MuCisKKyAgIEFzc3VtcHRpb25zOgorCisgICAgQVJNdjYgKEFSTXY3LWEgaWYgdXNpbmcgTmVvbikKKyAgICBBUk0gc3RhdGUKKyAgICBVbmFsaWduZWQgYWNjZXNzZXMKKyAgICBMRFJEL1NUUkQgc3VwcG9ydCB1bmFsaWduZWQgd29yZCBhY2Nlc3NlcworCisgKi8KKworI2luY2x1ZGUgPG1hY2hpbmUvY3B1LWZlYXR1cmVzLmg+CisjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KKworCS5zeW50YXggdW5pZmllZAorCS8qIFRoaXMgaW1wbGVtZW50YXRpb24gcmVxdWlyZXMgQVJNIHN0YXRlLiAgKi8KKwkuYXJtCisKKyNpZmRlZiBfX0FSTV9ORU9OX18KKworCS5mcHUJbmVvbgorCS5hcmNoCWFybXY3LWEKKyMgZGVmaW5lIEZSQU1FX1NJWkUJNAorIyBkZWZpbmUgVVNFX1ZGUAorIyBkZWZpbmUgVVNFX05FT04KKworI2VsaWYgIWRlZmluZWQgKF9fU09GVEZQX18pCisKKwkuYXJjaAlhcm12NgorCS5mcHUJdmZwdjIKKyMgZGVmaW5lIEZSQU1FX1NJWkUJMzIKKyMgZGVmaW5lIFVTRV9WRlAKKworI2Vsc2UKKwkuYXJjaAlhcm12NgorIyBkZWZpbmUgRlJBTUVfU0laRSAgICAzMgorCisjZW5kaWYKKworLyogT2xkIHZlcnNpb25zIG9mIEdBUyBpbmNvcnJlY3RseSBpbXBsZW1lbnQgdGhlIE5FT04gYWxpZ24gc2VtYW50aWNzLiAgKi8KKyNpZmRlZiBCUk9LRU5fQVNNX05FT05fQUxJR04KKyNkZWZpbmUgQUxJR04oYWRkciwgYWxpZ24pIGFkZHIsOmFsaWduCisjZWxzZQorI2RlZmluZSBBTElHTihhZGRyLCBhbGlnbikgYWRkcjphbGlnbgorI2VuZGlmCisKKyNkZWZpbmUgUENfT0ZGU0VUCTgJLyogUEMgcGlwZWxpbmUgY29tcGVuc2F0aW9uLiAgKi8KKyNkZWZpbmUgSU5TTl9TSVpFCTQKKworLyogQ2FsbCBwYXJhbWV0ZXJzLiAgKi8KKyNkZWZpbmUgZHN0aW4JcjAKKyNkZWZpbmUgc3JjCXIxCisjZGVmaW5lIGNvdW50CXIyCisKKy8qIExvY2Fscy4gICovCisjZGVmaW5lIHRtcDEJcjMKKyNkZWZpbmUgZHN0CWlwCisjZGVmaW5lIHRtcDIJcjEwCisKKyNpZm5kZWYgVVNFX05FT04KKy8qIEZvciBidWxrIGNvcGllcyB1c2luZyBHUCByZWdpc3RlcnMuICAqLworI2RlZmluZQlBX2wJcjIJCS8qIENhbGwtY2xvYmJlcmVkLiAgKi8KKyNkZWZpbmUJQV9oCXIzCQkvKiBDYWxsLWNsb2JiZXJlZC4gICovCisjZGVmaW5lCUJfbAlyNAorI2RlZmluZQlCX2gJcjUKKyNkZWZpbmUJQ19sCXI2CisjZGVmaW5lCUNfaAlyNworI2RlZmluZQlEX2wJcjgKKyNkZWZpbmUJRF9oCXI5CisjZW5kaWYKKworLyogTnVtYmVyIG9mIGxpbmVzIGFoZWFkIHRvIHByZS1mZXRjaCBkYXRhLiAgSWYgeW91IGNoYW5nZSB0aGlzIHRoZSBjb2RlCisgICBiZWxvdyB3aWxsIG5lZWQgYWRqdXN0bWVudCB0byBjb21wZW5zYXRlLiAgKi8KKworI2RlZmluZSBwcmVmZXRjaF9saW5lcwk1CisKKyNpZmRlZiBVU0VfVkZQCisJLm1hY3JvCWNweV9saW5lX3ZmcCB2cmVnLCBiYXNlCisJdnN0cglcdnJlZywgW2RzdCwgI1xiYXNlXQorCXZsZHIJXHZyZWcsIFtzcmMsICNcYmFzZV0KKwl2c3RyCWQwLCBbZHN0LCAjXGJhc2UgKyA4XQorCXZsZHIJZDAsIFtzcmMsICNcYmFzZSArIDhdCisJdnN0cglkMSwgW2RzdCwgI1xiYXNlICsgMTZdCisJdmxkcglkMSwgW3NyYywgI1xiYXNlICsgMTZdCisJdnN0cglkMiwgW2RzdCwgI1xiYXNlICsgMjRdCisJdmxkcglkMiwgW3NyYywgI1xiYXNlICsgMjRdCisJdnN0cglcdnJlZywgW2RzdCwgI1xiYXNlICsgMzJdCisJdmxkcglcdnJlZywgW3NyYywgI1xiYXNlICsgcHJlZmV0Y2hfbGluZXMgKiA2NCAtIDMyXQorCXZzdHIJZDAsIFtkc3QsICNcYmFzZSArIDQwXQorCXZsZHIJZDAsIFtzcmMsICNcYmFzZSArIDQwXQorCXZzdHIJZDEsIFtkc3QsICNcYmFzZSArIDQ4XQorCXZsZHIJZDEsIFtzcmMsICNcYmFzZSArIDQ4XQorCXZzdHIJZDIsIFtkc3QsICNcYmFzZSArIDU2XQorCXZsZHIJZDIsIFtzcmMsICNcYmFzZSArIDU2XQorCS5lbmRtCisKKwkubWFjcm8JY3B5X3RhaWxfdmZwIHZyZWcsIGJhc2UKKwl2c3RyCVx2cmVnLCBbZHN0LCAjXGJhc2VdCisJdmxkcglcdnJlZywgW3NyYywgI1xiYXNlXQorCXZzdHIJZDAsIFtkc3QsICNcYmFzZSArIDhdCisJdmxkcglkMCwgW3NyYywgI1xiYXNlICsgOF0KKwl2c3RyCWQxLCBbZHN0LCAjXGJhc2UgKyAxNl0KKwl2bGRyCWQxLCBbc3JjLCAjXGJhc2UgKyAxNl0KKwl2c3RyCWQyLCBbZHN0LCAjXGJhc2UgKyAyNF0KKwl2bGRyCWQyLCBbc3JjLCAjXGJhc2UgKyAyNF0KKwl2c3RyCVx2cmVnLCBbZHN0LCAjXGJhc2UgKyAzMl0KKwl2c3RyCWQwLCBbZHN0LCAjXGJhc2UgKyA0MF0KKwl2bGRyCWQwLCBbc3JjLCAjXGJhc2UgKyA0MF0KKwl2c3RyCWQxLCBbZHN0LCAjXGJhc2UgKyA0OF0KKwl2bGRyCWQxLCBbc3JjLCAjXGJhc2UgKyA0OF0KKwl2c3RyCWQyLCBbZHN0LCAjXGJhc2UgKyA1Nl0KKwl2bGRyCWQyLCBbc3JjLCAjXGJhc2UgKyA1Nl0KKwkuZW5kbQorI2VuZGlmCisKKwkucDJhbGlnbiA2CitFTlRSWShtZW1jcHkpCisKKwltb3YJZHN0LCBkc3RpbgkvKiBQcmVzZXJ2ZSBkc3Rpbiwgd2UgbmVlZCB0byByZXR1cm4gaXQuICAqLworCWNtcAljb3VudCwgIzY0CisJYmdlCS5MY3B5X25vdF9zaG9ydAorCS8qIERlYWwgd2l0aCBzbWFsbCBjb3BpZXMgcXVpY2tseSBieSBkcm9wcGluZyBzdHJhaWdodCBpbnRvIHRoZQorCSAgIGV4aXQgYmxvY2suICAqLworCisuTHRhaWw2M3VuYWxpZ25lZDoKKyNpZmRlZiBVU0VfTkVPTgorCWFuZAl0bXAxLCBjb3VudCwgIzB4MzgKKwlyc2IJdG1wMSwgdG1wMSwgIyg1NiAtIFBDX09GRlNFVCArIElOU05fU0laRSkKKwlhZGQJcGMsIHBjLCB0bXAxCisJdmxkMS44CXtkMH0sIFtzcmNdIQkvKiAxNCB3b3JkcyB0byBnby4gICovCisJdnN0MS44CXtkMH0sIFtkc3RdIQorCXZsZDEuOAl7ZDB9LCBbc3JjXSEJLyogMTIgd29yZHMgdG8gZ28uICAqLworCXZzdDEuOAl7ZDB9LCBbZHN0XSEKKwl2bGQxLjgJe2QwfSwgW3NyY10hCS8qIDEwIHdvcmRzIHRvIGdvLiAgKi8KKwl2c3QxLjgJe2QwfSwgW2RzdF0hCisJdmxkMS44CXtkMH0sIFtzcmNdIQkvKiA4IHdvcmRzIHRvIGdvLiAgKi8KKwl2c3QxLjgJe2QwfSwgW2RzdF0hCisJdmxkMS44CXtkMH0sIFtzcmNdIQkvKiA2IHdvcmRzIHRvIGdvLiAgKi8KKwl2c3QxLjgJe2QwfSwgW2RzdF0hCisJdmxkMS44CXtkMH0sIFtzcmNdIQkvKiA0IHdvcmRzIHRvIGdvLiAgKi8KKwl2c3QxLjgJe2QwfSwgW2RzdF0hCisJdmxkMS44CXtkMH0sIFtzcmNdIQkvKiAyIHdvcmRzIHRvIGdvLiAgKi8KKwl2c3QxLjgJe2QwfSwgW2RzdF0hCisKKwl0c3QJY291bnQsICM0CisJbGRybmUJdG1wMSwgW3NyY10sICM0CisJc3RybmUJdG1wMSwgW2RzdF0sICM0CisjZWxzZQorCS8qIENvcHkgdXAgdG8gMTUgZnVsbCB3b3JkcyBvZiBkYXRhLiAgTWF5IG5vdCBiZSBhbGlnbmVkLiAgKi8KKwkvKiBDYW5ub3QgdXNlIFZGUCBmb3IgdW5hbGlnbmVkIGRhdGEuICAqLworCWFuZAl0bXAxLCBjb3VudCwgIzB4M2MKKwlhZGQJZHN0LCBkc3QsIHRtcDEKKwlhZGQJc3JjLCBzcmMsIHRtcDEKKwlyc2IJdG1wMSwgdG1wMSwgIyg2MCAtIFBDX09GRlNFVC8yICsgSU5TTl9TSVpFLzIpCisJLyogSnVtcCBkaXJlY3RseSBpbnRvIHRoZSBzZXF1ZW5jZSBiZWxvdyBhdCB0aGUgY29ycmVjdCBvZmZzZXQuICAqLworCWFkZAlwYywgcGMsIHRtcDEsIGxzbCAjMQorCisJbGRyCXRtcDEsIFtzcmMsICMtNjBdCS8qIDE1IHdvcmRzIHRvIGdvLiAgKi8KKwlzdHIJdG1wMSwgW2RzdCwgIy02MF0KKworCWxkcgl0bXAxLCBbc3JjLCAjLTU2XQkvKiAxNCB3b3JkcyB0byBnby4gICovCisJc3RyCXRtcDEsIFtkc3QsICMtNTZdCisJbGRyCXRtcDEsIFtzcmMsICMtNTJdCisJc3RyCXRtcDEsIFtkc3QsICMtNTJdCisKKwlsZHIJdG1wMSwgW3NyYywgIy00OF0JLyogMTIgd29yZHMgdG8gZ28uICAqLworCXN0cgl0bXAxLCBbZHN0LCAjLTQ4XQorCWxkcgl0bXAxLCBbc3JjLCAjLTQ0XQorCXN0cgl0bXAxLCBbZHN0LCAjLTQ0XQorCisJbGRyCXRtcDEsIFtzcmMsICMtNDBdCS8qIDEwIHdvcmRzIHRvIGdvLiAgKi8KKwlzdHIJdG1wMSwgW2RzdCwgIy00MF0KKwlsZHIJdG1wMSwgW3NyYywgIy0zNl0KKwlzdHIJdG1wMSwgW2RzdCwgIy0zNl0KKworCWxkcgl0bXAxLCBbc3JjLCAjLTMyXQkvKiA4IHdvcmRzIHRvIGdvLiAgKi8KKwlzdHIJdG1wMSwgW2RzdCwgIy0zMl0KKwlsZHIJdG1wMSwgW3NyYywgIy0yOF0KKwlzdHIJdG1wMSwgW2RzdCwgIy0yOF0KKworCWxkcgl0bXAxLCBbc3JjLCAjLTI0XQkvKiA2IHdvcmRzIHRvIGdvLiAgKi8KKwlzdHIJdG1wMSwgW2RzdCwgIy0yNF0KKwlsZHIJdG1wMSwgW3NyYywgIy0yMF0KKwlzdHIJdG1wMSwgW2RzdCwgIy0yMF0KKworCWxkcgl0bXAxLCBbc3JjLCAjLTE2XQkvKiA0IHdvcmRzIHRvIGdvLiAgKi8KKwlzdHIJdG1wMSwgW2RzdCwgIy0xNl0KKwlsZHIJdG1wMSwgW3NyYywgIy0xMl0KKwlzdHIJdG1wMSwgW2RzdCwgIy0xMl0KKworCWxkcgl0bXAxLCBbc3JjLCAjLThdCS8qIDIgd29yZHMgdG8gZ28uICAqLworCXN0cgl0bXAxLCBbZHN0LCAjLThdCisJbGRyCXRtcDEsIFtzcmMsICMtNF0KKwlzdHIJdG1wMSwgW2RzdCwgIy00XQorI2VuZGlmCisKKwlsc2xzCWNvdW50LCBjb3VudCwgIzMxCisJbGRyaGNzCXRtcDEsIFtzcmNdLCAjMgorCWxkcmJuZQlzcmMsIFtzcmNdCQkvKiBTcmMgaXMgZGVhZCwgdXNlIGFzIGEgc2NyYXRjaC4gICovCisJc3RyaGNzCXRtcDEsIFtkc3RdLCAjMgorCXN0cmJuZQlzcmMsIFtkc3RdCisJYngJbHIKKworLkxjcHlfbm90X3Nob3J0OgorCS8qIEF0IGxlYXN0IDY0IGJ5dGVzIHRvIGNvcHksIGJ1dCBkb24ndCBrbm93IHRoZSBhbGlnbm1lbnQgeWV0LiAgKi8KKwlzdHIJdG1wMiwgW3NwLCAjLUZSQU1FX1NJWkVdIQorCWFuZAl0bXAyLCBzcmMsICM3CisJYW5kCXRtcDEsIGRzdCwgIzcKKwljbXAJdG1wMSwgdG1wMgorCWJuZQkuTGNweV9ub3RhbGlnbmVkCisKKyNpZmRlZiBVU0VfVkZQCisJLyogTWFnaWMgZHVzdCBhbGVydCEgIEZvcmNlIFZGUCBvbiBDb3J0ZXgtQTkuICBFeHBlcmltZW50cyBzaG93CisJICAgdGhhdCB0aGUgRlAgcGlwZWxpbmUgaXMgbXVjaCBiZXR0ZXIgYXQgc3RyZWFtaW5nIGxvYWRzIGFuZAorCSAgIHN0b3Jlcy4gIFRoaXMgaXMgb3V0c2lkZSB0aGUgY3JpdGljYWwgbG9vcC4gICovCisJdm1vdi5mMzIJczAsIHMwCisjZW5kaWYKKworCS8qIFNSQyBhbmQgRFNUIGhhdmUgdGhlIHNhbWUgbXV0dWFsIDMyLWJpdCBhbGlnbm1lbnQsIGJ1dCB3ZSBtYXkKKwkgICBzdGlsbCBuZWVkIHRvIHByZS1jb3B5IHNvbWUgYnl0ZXMgdG8gZ2V0IHRvIG5hdHVyYWwgYWxpZ25tZW50LgorCSAgIFdlIGJyaW5nIERTVCBpbnRvIGZ1bGwgNjQtYml0IGFsaWdubWVudC4gICovCisJbHNscwl0bXAyLCBkc3QsICMyOQorCWJlcQkxZgorCXJzYnMJdG1wMiwgdG1wMiwgIzAKKwlzdWIJY291bnQsIGNvdW50LCB0bXAyLCBsc3IgIzI5CisJbGRybWkJdG1wMSwgW3NyY10sICM0CisJc3RybWkJdG1wMSwgW2RzdF0sICM0CisJbHNscwl0bXAyLCB0bXAyLCAjMgorCWxkcmhjcwl0bXAxLCBbc3JjXSwgIzIKKwlsZHJibmUJdG1wMiwgW3NyY10sICMxCisJc3RyaGNzCXRtcDEsIFtkc3RdLCAjMgorCXN0cmJuZQl0bXAyLCBbZHN0XSwgIzEKKworMToKKwlzdWJzCXRtcDIsIGNvdW50LCAjNjQJLyogVXNlIHRtcDIgZm9yIGNvdW50LiAgKi8KKwlibHQJLkx0YWlsNjNhbGlnbmVkCisKKwljbXAJdG1wMiwgIzUxMgorCWJnZQkuTGNweV9ib2R5X2xvbmcKKworLkxjcHlfYm9keV9tZWRpdW06CQkJLyogQ291bnQgaW4gdG1wMi4gICovCisjaWZkZWYgVVNFX1ZGUAorMToKKwl2bGRyCWQwLCBbc3JjLCAjMF0KKwlzdWJzCXRtcDIsIHRtcDIsICM2NAorCXZsZHIJZDEsIFtzcmMsICM4XQorCXZzdHIJZDAsIFtkc3QsICMwXQorCXZsZHIJZDAsIFtzcmMsICMxNl0KKwl2c3RyCWQxLCBbZHN0LCAjOF0KKwl2bGRyCWQxLCBbc3JjLCAjMjRdCisJdnN0cglkMCwgW2RzdCwgIzE2XQorCXZsZHIJZDAsIFtzcmMsICMzMl0KKwl2c3RyCWQxLCBbZHN0LCAjMjRdCisJdmxkcglkMSwgW3NyYywgIzQwXQorCXZzdHIJZDAsIFtkc3QsICMzMl0KKwl2bGRyCWQwLCBbc3JjLCAjNDhdCisJdnN0cglkMSwgW2RzdCwgIzQwXQorCXZsZHIJZDEsIFtzcmMsICM1Nl0KKwl2c3RyCWQwLCBbZHN0LCAjNDhdCisJYWRkCXNyYywgc3JjLCAjNjQKKwl2c3RyCWQxLCBbZHN0LCAjNTZdCisJYWRkCWRzdCwgZHN0LCAjNjQKKwliZ2UJMWIKKwl0c3QJdG1wMiwgIzB4M2YKKwliZXEJLkxkb25lCisKKy5MdGFpbDYzYWxpZ25lZDoJCQkvKiBDb3VudCBpbiB0bXAyLiAgKi8KKwlhbmQJdG1wMSwgdG1wMiwgIzB4MzgKKwlhZGQJZHN0LCBkc3QsIHRtcDEKKwlhZGQJc3JjLCBzcmMsIHRtcDEKKwlyc2IJdG1wMSwgdG1wMSwgIyg1NiAtIFBDX09GRlNFVCArIElOU05fU0laRSkKKwlhZGQJcGMsIHBjLCB0bXAxCisKKwl2bGRyCWQwLCBbc3JjLCAjLTU2XQkvKiAxNCB3b3JkcyB0byBnby4gICovCisJdnN0cglkMCwgW2RzdCwgIy01Nl0KKwl2bGRyCWQwLCBbc3JjLCAjLTQ4XQkvKiAxMiB3b3JkcyB0byBnby4gICovCisJdnN0cglkMCwgW2RzdCwgIy00OF0KKwl2bGRyCWQwLCBbc3JjLCAjLTQwXQkvKiAxMCB3b3JkcyB0byBnby4gICovCisJdnN0cglkMCwgW2RzdCwgIy00MF0KKwl2bGRyCWQwLCBbc3JjLCAjLTMyXQkvKiA4IHdvcmRzIHRvIGdvLiAgKi8KKwl2c3RyCWQwLCBbZHN0LCAjLTMyXQorCXZsZHIJZDAsIFtzcmMsICMtMjRdCS8qIDYgd29yZHMgdG8gZ28uICAqLworCXZzdHIJZDAsIFtkc3QsICMtMjRdCisJdmxkcglkMCwgW3NyYywgIy0xNl0JLyogNCB3b3JkcyB0byBnby4gICovCisJdnN0cglkMCwgW2RzdCwgIy0xNl0KKwl2bGRyCWQwLCBbc3JjLCAjLThdCS8qIDIgd29yZHMgdG8gZ28uICAqLworCXZzdHIJZDAsIFtkc3QsICMtOF0KKyNlbHNlCisJc3ViCXNyYywgc3JjLCAjOAorCXN1Yglkc3QsIGRzdCwgIzgKKzE6CisJbGRyZAlBX2wsIEFfaCwgW3NyYywgIzhdCisJc3RyZAlBX2wsIEFfaCwgW2RzdCwgIzhdCisJbGRyZAlBX2wsIEFfaCwgW3NyYywgIzE2XQorCXN0cmQJQV9sLCBBX2gsIFtkc3QsICMxNl0KKwlsZHJkCUFfbCwgQV9oLCBbc3JjLCAjMjRdCisJc3RyZAlBX2wsIEFfaCwgW2RzdCwgIzI0XQorCWxkcmQJQV9sLCBBX2gsIFtzcmMsICMzMl0KKwlzdHJkCUFfbCwgQV9oLCBbZHN0LCAjMzJdCisJbGRyZAlBX2wsIEFfaCwgW3NyYywgIzQwXQorCXN0cmQJQV9sLCBBX2gsIFtkc3QsICM0MF0KKwlsZHJkCUFfbCwgQV9oLCBbc3JjLCAjNDhdCisJc3RyZAlBX2wsIEFfaCwgW2RzdCwgIzQ4XQorCWxkcmQJQV9sLCBBX2gsIFtzcmMsICM1Nl0KKwlzdHJkCUFfbCwgQV9oLCBbZHN0LCAjNTZdCisJbGRyZAlBX2wsIEFfaCwgW3NyYywgIzY0XSEKKwlzdHJkCUFfbCwgQV9oLCBbZHN0LCAjNjRdIQorCXN1YnMJdG1wMiwgdG1wMiwgIzY0CisJYmdlCTFiCisJdHN0CXRtcDIsICMweDNmCisJYm5lCTFmCisJbGRyCXRtcDIsW3NwXSwgI0ZSQU1FX1NJWkUKKwlieAlscgorMToKKwlhZGQJc3JjLCBzcmMsICM4CisJYWRkCWRzdCwgZHN0LCAjOAorCisuTHRhaWw2M2FsaWduZWQ6CQkJLyogQ291bnQgaW4gdG1wMi4gICovCisJLyogQ29weSB1cCB0byA3IGQtd29yZHMgb2YgZGF0YS4gIFNpbWlsYXIgdG8gTHRhaWw2M3VuYWxpZ25lZCwgYnV0CisJICAgd2Uga25vdyB0aGF0IHRoZSBzcmMgYW5kIGRlc3QgYXJlIDMyLWJpdCBhbGlnbmVkIHNvIHdlIGNhbiB1c2UKKwkgICBMRFJEL1NUUkQgdG8gaW1wcm92ZSBlZmZpY2llbmN5LiAgKi8KKwkvKiBUTVAyIGlzIG5vdyBuZWdhdGl2ZSwgYnV0IHdlIGRvbid0IGNhcmUgYWJvdXQgdGhhdC4gIFRoZSBib3R0b20KKwkgICBzaXggYml0cyBzdGlsbCB0ZWxsIHVzIGhvdyBtYW55IGJ5dGVzIGFyZSBsZWZ0IHRvIGNvcHkuICAqLworCisJYW5kCXRtcDEsIHRtcDIsICMweDM4CisJYWRkCWRzdCwgZHN0LCB0bXAxCisJYWRkCXNyYywgc3JjLCB0bXAxCisJcnNiCXRtcDEsIHRtcDEsICMoNTYgLSBQQ19PRkZTRVQgKyBJTlNOX1NJWkUpCisJYWRkCXBjLCBwYywgdG1wMQorCWxkcmQJQV9sLCBBX2gsIFtzcmMsICMtNTZdCS8qIDE0IHdvcmRzIHRvIGdvLiAgKi8KKwlzdHJkCUFfbCwgQV9oLCBbZHN0LCAjLTU2XQorCWxkcmQJQV9sLCBBX2gsIFtzcmMsICMtNDhdCS8qIDEyIHdvcmRzIHRvIGdvLiAgKi8KKwlzdHJkCUFfbCwgQV9oLCBbZHN0LCAjLTQ4XQorCWxkcmQJQV9sLCBBX2gsIFtzcmMsICMtNDBdCS8qIDEwIHdvcmRzIHRvIGdvLiAgKi8KKwlzdHJkCUFfbCwgQV9oLCBbZHN0LCAjLTQwXQorCWxkcmQJQV9sLCBBX2gsIFtzcmMsICMtMzJdCS8qIDggd29yZHMgdG8gZ28uICAqLworCXN0cmQJQV9sLCBBX2gsIFtkc3QsICMtMzJdCisJbGRyZAlBX2wsIEFfaCwgW3NyYywgIy0yNF0JLyogNiB3b3JkcyB0byBnby4gICovCisJc3RyZAlBX2wsIEFfaCwgW2RzdCwgIy0yNF0KKwlsZHJkCUFfbCwgQV9oLCBbc3JjLCAjLTE2XQkvKiA0IHdvcmRzIHRvIGdvLiAgKi8KKwlzdHJkCUFfbCwgQV9oLCBbZHN0LCAjLTE2XQorCWxkcmQJQV9sLCBBX2gsIFtzcmMsICMtOF0JLyogMiB3b3JkcyB0byBnby4gICovCisJc3RyZAlBX2wsIEFfaCwgW2RzdCwgIy04XQorCisjZW5kaWYKKwl0c3QJdG1wMiwgIzQKKwlsZHJuZQl0bXAxLCBbc3JjXSwgIzQKKwlzdHJuZQl0bXAxLCBbZHN0XSwgIzQKKwlsc2xzCXRtcDIsIHRtcDIsICMzMQkJLyogQ291bnQgKHRtcDIpIG5vdyBkZWFkLiAqLworCWxkcmhjcwl0bXAxLCBbc3JjXSwgIzIKKwlsZHJibmUJdG1wMiwgW3NyY10KKwlzdHJoY3MJdG1wMSwgW2RzdF0sICMyCisJc3RyYm5lCXRtcDIsIFtkc3RdCisKKy5MZG9uZToKKwlsZHIJdG1wMiwgW3NwXSwgI0ZSQU1FX1NJWkUKKwlieAlscgorCisuTGNweV9ib2R5X2xvbmc6CQkJLyogQ291bnQgaW4gdG1wMi4gICovCisKKwkvKiBMb25nIGNvcHkuICBXZSBrbm93IHRoYXQgdGhlcmUncyBhdCBsZWFzdCAocHJlZmV0Y2hfbGluZXMgKiA2NCkKKwkgICBieXRlcyB0byBnby4gICovCisjaWZkZWYgVVNFX1ZGUAorCS8qIERvbid0IHVzZSBQTEQuICBJbnN0ZWFkLCByZWFkIHNvbWUgZGF0YSBpbiBhZHZhbmNlIG9mIHRoZSBjdXJyZW50CisJICAgY29weSBwb3NpdGlvbiBpbnRvIGEgcmVnaXN0ZXIuICBUaGlzIHNob3VsZCBhY3QgbGlrZSBhIFBMRAorCSAgIG9wZXJhdGlvbiBidXQgd2Ugd29uJ3QgaGF2ZSB0byByZXBlYXQgdGhlIHRyYW5zZmVyLiAgKi8KKworCXZsZHIJZDMsIFtzcmMsICMwXQorCXZsZHIJZDQsIFtzcmMsICM2NF0KKwl2bGRyCWQ1LCBbc3JjLCAjMTI4XQorCXZsZHIJZDYsIFtzcmMsICMxOTJdCisJdmxkcglkNywgW3NyYywgIzI1Nl0KKworCXZsZHIJZDAsIFtzcmMsICM4XQorCXZsZHIJZDEsIFtzcmMsICMxNl0KKwl2bGRyCWQyLCBbc3JjLCAjMjRdCisJYWRkCXNyYywgc3JjLCAjMzIKKworCXN1YnMJdG1wMiwgdG1wMiwgI3ByZWZldGNoX2xpbmVzICogNjQgKiAyCisJYmx0CTJmCisxOgorCWNweV9saW5lX3ZmcAlkMywgMAorCWNweV9saW5lX3ZmcAlkNCwgNjQKKwljcHlfbGluZV92ZnAJZDUsIDEyOAorCWFkZAlkc3QsIGRzdCwgIzMgKiA2NAorCWFkZAlzcmMsIHNyYywgIzMgKiA2NAorCWNweV9saW5lX3ZmcAlkNiwgMAorCWNweV9saW5lX3ZmcAlkNywgNjQKKwlhZGQJZHN0LCBkc3QsICMyICogNjQKKwlhZGQJc3JjLCBzcmMsICMyICogNjQKKwlzdWJzCXRtcDIsIHRtcDIsICNwcmVmZXRjaF9saW5lcyAqIDY0CisJYmdlCTFiCisKKzI6CisJY3B5X3RhaWxfdmZwCWQzLCAwCisJY3B5X3RhaWxfdmZwCWQ0LCA2NAorCWNweV90YWlsX3ZmcAlkNSwgMTI4CisJYWRkCXNyYywgc3JjLCAjMyAqIDY0CisJYWRkCWRzdCwgZHN0LCAjMyAqIDY0CisJY3B5X3RhaWxfdmZwCWQ2LCAwCisJdnN0cglkNywgW2RzdCwgIzY0XQorCXZsZHIJZDcsIFtzcmMsICM2NF0KKwl2c3RyCWQwLCBbZHN0LCAjNjQgKyA4XQorCXZsZHIJZDAsIFtzcmMsICM2NCArIDhdCisJdnN0cglkMSwgW2RzdCwgIzY0ICsgMTZdCisJdmxkcglkMSwgW3NyYywgIzY0ICsgMTZdCisJdnN0cglkMiwgW2RzdCwgIzY0ICsgMjRdCisJdmxkcglkMiwgW3NyYywgIzY0ICsgMjRdCisJdnN0cglkNywgW2RzdCwgIzY0ICsgMzJdCisJYWRkCXNyYywgc3JjLCAjOTYKKwl2c3RyCWQwLCBbZHN0LCAjNjQgKyA0MF0KKwl2c3RyCWQxLCBbZHN0LCAjNjQgKyA0OF0KKwl2c3RyCWQyLCBbZHN0LCAjNjQgKyA1Nl0KKwlhZGQJZHN0LCBkc3QsICMxMjgKKwlhZGQJdG1wMiwgdG1wMiwgI3ByZWZldGNoX2xpbmVzICogNjQKKwliCS5MY3B5X2JvZHlfbWVkaXVtCisjZWxzZQorCS8qIExvbmcgY29weS4gIFVzZSBhbiBTTVMgc3R5bGUgbG9vcCB0byBtYXhpbWl6ZSB0aGUgSS9PCisJICAgYmFuZHdpZHRoIG9mIHRoZSBjb3JlLiAgV2UgZG9uJ3QgaGF2ZSBlbm91Z2ggc3BhcmUgcmVnaXN0ZXJzCisJICAgdG8gc3ludGhlc2lzZSBwcmVmZXRjaGluZywgc28gdXNlIFBMRCBvcGVyYXRpb25zLiAgKi8KKwkvKiBQcmUtYmlhcyBzcmMgYW5kIGRzdC4gICovCisJc3ViCXNyYywgc3JjLCAjOAorCXN1Yglkc3QsIGRzdCwgIzgKKwlwbGQJW3NyYywgIzhdCisJcGxkCVtzcmMsICM3Ml0KKwlzdWJzCXRtcDIsIHRtcDIsICM2NAorCXBsZAlbc3JjLCAjMTM2XQorCWxkcmQJQV9sLCBBX2gsIFtzcmMsICM4XQorCXN0cmQJQl9sLCBCX2gsIFtzcCwgIzhdCisJbGRyZAlCX2wsIEJfaCwgW3NyYywgIzE2XQorCXN0cmQJQ19sLCBDX2gsIFtzcCwgIzE2XQorCWxkcmQJQ19sLCBDX2gsIFtzcmMsICMyNF0KKwlzdHJkCURfbCwgRF9oLCBbc3AsICMyNF0KKwlwbGQJW3NyYywgIzIwMF0KKwlsZHJkCURfbCwgRF9oLCBbc3JjLCAjMzJdIQorCWIJMWYKKwkucDJhbGlnbgk2CisyOgorCXBsZAlbc3JjLCAjMjMyXQorCXN0cmQJQV9sLCBBX2gsIFtkc3QsICM0MF0KKwlsZHJkCUFfbCwgQV9oLCBbc3JjLCAjNDBdCisJc3RyZAlCX2wsIEJfaCwgW2RzdCwgIzQ4XQorCWxkcmQJQl9sLCBCX2gsIFtzcmMsICM0OF0KKwlzdHJkCUNfbCwgQ19oLCBbZHN0LCAjNTZdCisJbGRyZAlDX2wsIENfaCwgW3NyYywgIzU2XQorCXN0cmQJRF9sLCBEX2gsIFtkc3QsICM2NF0hCisJbGRyZAlEX2wsIERfaCwgW3NyYywgIzY0XSEKKwlzdWJzCXRtcDIsIHRtcDIsICM2NAorMToKKwlzdHJkCUFfbCwgQV9oLCBbZHN0LCAjOF0KKwlsZHJkCUFfbCwgQV9oLCBbc3JjLCAjOF0KKwlzdHJkCUJfbCwgQl9oLCBbZHN0LCAjMTZdCisJbGRyZAlCX2wsIEJfaCwgW3NyYywgIzE2XQorCXN0cmQJQ19sLCBDX2gsIFtkc3QsICMyNF0KKwlsZHJkCUNfbCwgQ19oLCBbc3JjLCAjMjRdCisJc3RyZAlEX2wsIERfaCwgW2RzdCwgIzMyXQorCWxkcmQJRF9sLCBEX2gsIFtzcmMsICMzMl0KKwliY3MJMmIKKwkvKiBTYXZlIHRoZSByZW1haW5pbmcgYnl0ZXMgYW5kIHJlc3RvcmUgdGhlIGNhbGxlZS1zYXZlZCByZWdzLiAgKi8KKwlzdHJkCUFfbCwgQV9oLCBbZHN0LCAjNDBdCisJYWRkCXNyYywgc3JjLCAjNDAKKwlzdHJkCUJfbCwgQl9oLCBbZHN0LCAjNDhdCisJbGRyZAlCX2wsIEJfaCwgW3NwLCAjOF0KKwlzdHJkCUNfbCwgQ19oLCBbZHN0LCAjNTZdCisJbGRyZAlDX2wsIENfaCwgW3NwLCAjMTZdCisJc3RyZAlEX2wsIERfaCwgW2RzdCwgIzY0XQorCWxkcmQJRF9sLCBEX2gsIFtzcCwgIzI0XQorCWFkZAlkc3QsIGRzdCwgIzcyCisJdHN0CXRtcDIsICMweDNmCisJYm5lCS5MdGFpbDYzYWxpZ25lZAorCWxkcgl0bXAyLCBbc3BdLCAjRlJBTUVfU0laRQorCWJ4CWxyCisjZW5kaWYKKworLkxjcHlfbm90YWxpZ25lZDoKKwlwbGQJW3NyY10KKwlwbGQJW3NyYywgIzY0XQorCS8qIFRoZXJlJ3MgYXQgbGVhc3QgNjQgYnl0ZXMgdG8gY29weSwgYnV0IHRoZXJlIGlzIG5vIG11dHVhbAorCSAgIGFsaWdubWVudC4gICovCisJLyogQnJpbmcgRFNUIHRvIDY0LWJpdCBhbGlnbm1lbnQuICAqLworCWxzbHMJdG1wMiwgZHN0LCAjMjkKKwlwbGQJW3NyYywgIygyICogNjQpXQorCWJlcQkxZgorCXJzYnMJdG1wMiwgdG1wMiwgIzAKKwlzdWIJY291bnQsIGNvdW50LCB0bXAyLCBsc3IgIzI5CisJbGRybWkJdG1wMSwgW3NyY10sICM0CisJc3RybWkJdG1wMSwgW2RzdF0sICM0CisJbHNscwl0bXAyLCB0bXAyLCAjMgorCWxkcmJuZQl0bXAxLCBbc3JjXSwgIzEKKwlsZHJoY3MJdG1wMiwgW3NyY10sICMyCisJc3RyYm5lCXRtcDEsIFtkc3RdLCAjMQorCXN0cmhjcwl0bXAyLCBbZHN0XSwgIzIKKzE6CisJcGxkCVtzcmMsICMoMyAqIDY0KV0KKwlzdWJzCWNvdW50LCBjb3VudCwgIzY0CisJbGRybWkJdG1wMiwgW3NwXSwgI0ZSQU1FX1NJWkUKKwlibWkJLkx0YWlsNjN1bmFsaWduZWQKKwlwbGQJW3NyYywgIyg0ICogNjQpXQorCisjaWZkZWYgVVNFX05FT04KKwl2bGQxLjgJe2QwLWQzfSwgW3NyY10hCisJdmxkMS44CXtkNC1kN30sIFtzcmNdIQorCXN1YnMJY291bnQsIGNvdW50LCAjNjQKKwlibWkJMmYKKzE6CisJcGxkCVtzcmMsICMoNCAqIDY0KV0KKwl2c3QxLjgJe2QwLWQzfSwgW0FMSUdOIChkc3QsIDY0KV0hCisJdmxkMS44CXtkMC1kM30sIFtzcmNdIQorCXZzdDEuOAl7ZDQtZDd9LCBbQUxJR04gKGRzdCwgNjQpXSEKKwl2bGQxLjgJe2Q0LWQ3fSwgW3NyY10hCisJc3Vicwljb3VudCwgY291bnQsICM2NAorCWJwbAkxYgorMjoKKwl2c3QxLjgJe2QwLWQzfSwgW0FMSUdOIChkc3QsIDY0KV0hCisJdnN0MS44CXtkNC1kN30sIFtBTElHTiAoZHN0LCA2NCldIQorCWFuZHMJY291bnQsIGNvdW50LCAjMHgzZgorI2Vsc2UKKwkvKiBVc2UgYW4gU01TIHN0eWxlIGxvb3AgdG8gbWF4aW1pemUgdGhlIEkvTyBiYW5kd2lkdGguICAqLworCXN1YglzcmMsIHNyYywgIzQKKwlzdWIJZHN0LCBkc3QsICM4CisJc3Vicwl0bXAyLCBjb3VudCwgIzY0CS8qIFVzZSB0bXAyIGZvciBjb3VudC4gICovCisJbGRyCUFfbCwgW3NyYywgIzRdCisJbGRyCUFfaCwgW3NyYywgIzhdCisJc3RyZAlCX2wsIEJfaCwgW3NwLCAjOF0KKwlsZHIJQl9sLCBbc3JjLCAjMTJdCisJbGRyCUJfaCwgW3NyYywgIzE2XQorCXN0cmQJQ19sLCBDX2gsIFtzcCwgIzE2XQorCWxkcglDX2wsIFtzcmMsICMyMF0KKwlsZHIJQ19oLCBbc3JjLCAjMjRdCisJc3RyZAlEX2wsIERfaCwgW3NwLCAjMjRdCisJbGRyCURfbCwgW3NyYywgIzI4XQorCWxkcglEX2gsIFtzcmMsICMzMl0hCisJYgkxZgorCS5wMmFsaWduCTYKKzI6CisJcGxkCVtzcmMsICMoNSAqIDY0KSAtICgzMiAtIDQpXQorCXN0cmQJQV9sLCBBX2gsIFtkc3QsICM0MF0KKwlsZHIJQV9sLCBbc3JjLCAjMzZdCisJbGRyCUFfaCwgW3NyYywgIzQwXQorCXN0cmQJQl9sLCBCX2gsIFtkc3QsICM0OF0KKwlsZHIJQl9sLCBbc3JjLCAjNDRdCisJbGRyCUJfaCwgW3NyYywgIzQ4XQorCXN0cmQJQ19sLCBDX2gsIFtkc3QsICM1Nl0KKwlsZHIJQ19sLCBbc3JjLCAjNTJdCisJbGRyCUNfaCwgW3NyYywgIzU2XQorCXN0cmQJRF9sLCBEX2gsIFtkc3QsICM2NF0hCisJbGRyCURfbCwgW3NyYywgIzYwXQorCWxkcglEX2gsIFtzcmMsICM2NF0hCisJc3Vicwl0bXAyLCB0bXAyLCAjNjQKKzE6CisJc3RyZAlBX2wsIEFfaCwgW2RzdCwgIzhdCisJbGRyCUFfbCwgW3NyYywgIzRdCisJbGRyCUFfaCwgW3NyYywgIzhdCisJc3RyZAlCX2wsIEJfaCwgW2RzdCwgIzE2XQorCWxkcglCX2wsIFtzcmMsICMxMl0KKwlsZHIJQl9oLCBbc3JjLCAjMTZdCisJc3RyZAlDX2wsIENfaCwgW2RzdCwgIzI0XQorCWxkcglDX2wsIFtzcmMsICMyMF0KKwlsZHIJQ19oLCBbc3JjLCAjMjRdCisJc3RyZAlEX2wsIERfaCwgW2RzdCwgIzMyXQorCWxkcglEX2wsIFtzcmMsICMyOF0KKwlsZHIJRF9oLCBbc3JjLCAjMzJdCisJYmNzCTJiCisKKwkvKiBTYXZlIHRoZSByZW1haW5pbmcgYnl0ZXMgYW5kIHJlc3RvcmUgdGhlIGNhbGxlZS1zYXZlZCByZWdzLiAgKi8KKwlzdHJkCUFfbCwgQV9oLCBbZHN0LCAjNDBdCisJYWRkCXNyYywgc3JjLCAjMzYKKwlzdHJkCUJfbCwgQl9oLCBbZHN0LCAjNDhdCisJbGRyZAlCX2wsIEJfaCwgW3NwLCAjOF0KKwlzdHJkCUNfbCwgQ19oLCBbZHN0LCAjNTZdCisJbGRyZAlDX2wsIENfaCwgW3NwLCAjMTZdCisJc3RyZAlEX2wsIERfaCwgW2RzdCwgIzY0XQorCWxkcmQJRF9sLCBEX2gsIFtzcCwgIzI0XQorCWFkZAlkc3QsIGRzdCwgIzcyCisJYW5kcwljb3VudCwgdG1wMiwgIzB4M2YKKyNlbmRpZgorCWxkcgl0bXAyLCBbc3BdLCAjRlJBTUVfU0laRQorCWJuZQkuTHRhaWw2M3VuYWxpZ25lZAorCWJ4CWxyCitFTkQobWVtY3B5KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9iaW9uaWMvbWVtc2V0LlMgYi9saWJjL2FyY2gtYXJtL2Jpb25pYy9tZW1zZXQuUwppbmRleCAyNzNiOWUzLi4xMDJkNTQxIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL2Jpb25pYy9tZW1zZXQuUworKysgYi9saWJjL2FyY2gtYXJtL2Jpb25pYy9tZW1zZXQuUwpAQCAtMjYsMjMgKzI2LDExNCBAQAogICogU1VDSCBEQU1BR0UuCiAgKi8KIAorI2luY2x1ZGUgPG1hY2hpbmUvY3B1LWZlYXR1cmVzLmg+CiAjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KLQkKKwogCQkvKgogCQkgKiBPcHRpbWl6ZWQgbWVtc2V0KCkgZm9yIEFSTS4KICAgICAgICAgICoKICAgICAgICAgICogbWVtc2V0KCkgcmV0dXJucyBpdHMgZmlyc3QgYXJndW1lbnQuCiAJCSAqLwotCQorCisjaWYgZGVmaW5lZChfX0FSTV9ORU9OX18pCisgICAgLmZwdSAgICBuZW9uCisjZW5kaWYKKwogRU5UUlkoYnplcm8pCiAgICAgICAgIG1vdiAgICAgcjIsIHIxCiAgICAgICAgIG1vdiAgICAgcjEsICMwCisgICAgICAgIC8vIEZhbGwgdGhyb3VnaCB0byBtZW1zZXQuLi4KIEVORChiemVybykKIAogRU5UUlkobWVtc2V0KQorI2lmIGRlZmluZWQoX19BUk1fTkVPTl9fKQorCisjaWZkZWYgIE5FT05fTUVNU0VUX0RJVklERVIKKyAgICAgICAgY21wICAgICAgICAgcjIsICNORU9OX01FTVNFVF9ESVZJREVSCisgICAgICAgIGJoaSAgICAgICAgIDExZgorI2VuZGlmCisgICAgICAgIC5zYXZlICAgICAgIHtyMH0KKyAgICAgICAgc3RtZmQgICAgICAgc3AhLCB7cjB9CisKKyAgICAgICAgdmR1cC44ICAgICAgcTAsIHIxCisKKyNpZm5kZWYgTkVPTl9VTkFMSUdORURfQUNDRVNTCisgICAgICAgIC8qIGRvIHdlIGhhdmUgYXQgbGVhc3QgMTYtYnl0ZXMgdG8gd3JpdGUgKG5lZWRlZCBmb3IgYWxpZ25tZW50IGJlbG93KSAqLworICAgICAgICBjbXAgICAgICAgICByMiwgIzE2CisgICAgICAgIGJsbyAgICAgICAgIDNmCisKKyAgICAgICAgLyogYWxpZ24gZGVzdGluYXRpb24gdG8gMTYgYnl0ZXMgZm9yIHRoZSB3cml0ZS1idWZmZXIgKi8KKyAgICAgICAgcnNiICAgICAgICAgcjMsIHIwLCAjMAorICAgICAgICBhbmRzICAgICAgICByMywgcjMsICMweEYKKyAgICAgICAgYmVxICAgICAgICAgMmYKKworICAgICAgICAvKiB3cml0ZSB1cCB0byAxNS1ieXRlcyAoY291bnQgaW4gcjMpICovCisgICAgICAgIHN1YiAgICAgICAgIHIyLCByMiwgcjMKKyAgICAgICAgbW92cyAgICAgICAgaXAsIHIzLCBsc2wgIzMxCisgICAgICAgIHN0cm1pYiAgICAgIHIxLCBbcjBdLCAjMQorICAgICAgICBzdHJjc2IgICAgICByMSwgW3IwXSwgIzEKKyAgICAgICAgc3RyY3NiICAgICAgcjEsIFtyMF0sICMxCisgICAgICAgIG1vdnMgICAgICAgIGlwLCByMywgbHNsICMyOQorICAgICAgICBiZ2UgICAgICAgICAxZgorCisgICAgICAgIC8vIHdyaXRlcyA0IGJ5dGVzLCAzMi1iaXRzIGFsaWduZWQKKyAgICAgICAgdnN0MS4zMiAgICAge2QwWzBdfSwgW3IwLCA6MzJdIQorMTogICAgICBiY2MgICAgICAgICAyZgorCisgICAgICAgIC8vIHdyaXRlcyA4IGJ5dGVzLCA2NC1iaXRzIGFsaWduZWQKKyAgICAgICAgdnN0MS44ICAgICAge2QwfSwgW3IwLCA6NjRdIQorMjoKKyNlbmRpZgorICAgICAgICAvKiBtYWtlIHN1cmUgd2UgaGF2ZSBhdCBsZWFzdCAzMiBieXRlcyB0byB3cml0ZSAqLworICAgICAgICBzdWJzICAgICAgICByMiwgcjIsICMzMgorICAgICAgICBibG8gICAgICAgICAyZgorICAgICAgICB2bW92ICAgICAgICBxMSwgcTAKKworMTogICAgICAvKiBUaGUgbWFpbiBsb29wIHdyaXRlcyAzMiBieXRlcyBhdCBhIHRpbWUgKi8KKyAgICAgICAgc3VicyAgICAgICAgcjIsIHIyLCAjMzIKKyNpZm5kZWYgTkVPTl9VTkFMSUdORURfQUNDRVNTCisgICAgICAgIHZzdDEuOCAgICAgIHtkMCAtIGQzfSwgW3IwLCA6MTI4XSEKKyNlbHNlCisgICAgICAgIHZzdDEuOCAgICAgIHtkMCAtIGQzfSwgW3IwXSEKKyNlbmRpZgorICAgICAgICBiaHMgICAgICAgICAxYgorCisyOiAgICAgIC8qIGxlc3MgdGhhbiAzMiBsZWZ0ICovCisgICAgICAgIGFkZCAgICAgICAgIHIyLCByMiwgIzMyCisgICAgICAgIHRzdCAgICAgICAgIHIyLCAjMHgxMAorICAgICAgICBiZXEgICAgICAgICAzZgorCisgICAgICAgIC8vIHdyaXRlcyAxNiBieXRlcywgMTI4LWJpdHMgYWxpZ25lZAorI2lmbmRlZiBORU9OX1VOQUxJR05FRF9BQ0NFU1MKKyAgICAgICAgdnN0MS44ICAgICAge2QwLCBkMX0sIFtyMCwgOjEyOF0hCisjZWxzZQorICAgICAgICB2c3QxLjggICAgICB7ZDAsIGQxfSwgW3IwXSEKKyNlbmRpZgorMzogICAgICAvKiB3cml0ZSB1cCB0byAxNS1ieXRlcyAoY291bnQgaW4gcjIpICovCisgICAgICAgIG1vdnMgICAgICAgIGlwLCByMiwgbHNsICMyOQorICAgICAgICBiY2MgICAgICAgICAxZgorICAgICAgICB2c3QxLjggICAgICB7ZDB9LCBbcjBdIQorMTogICAgICBiZ2UgICAgICAgICAyZgorICAgICAgICB2c3QxLjMyICAgICB7ZDBbMF19LCBbcjBdIQorMjogICAgICBtb3ZzICAgICAgICBpcCwgcjIsIGxzbCAjMzEKKyAgICAgICAgc3RybWliICAgICAgcjEsIFtyMF0sICMxCisgICAgICAgIHN0cmNzYiAgICAgIHIxLCBbcjBdLCAjMQorICAgICAgICBzdHJjc2IgICAgICByMSwgW3IwXSwgIzEKKyAgICAgICAgbGRtZmQgICAgICAgc3AhLCB7cjB9CisgICAgICAgIGJ4ICAgICAgICAgIGxyCisxMToKKyNlbmRpZgorCisgICAgICAgIC8qCisgICAgICAgICAqIE9wdGltaXplZCBtZW1zZXQoKSBmb3IgQVJNLgorICAgICAgICAgKgorICAgICAgICAgKiBtZW1zZXQoKSByZXR1cm5zIGl0cyBmaXJzdCBhcmd1bWVudC4KKyAgICAgICAgICovCisKIAkJLyogY29tcHV0ZSB0aGUgb2Zmc2V0IHRvIGFsaWduIHRoZSBkZXN0aW5hdGlvbgogCQkgKiBvZmZzZXQgPSAoNC0oc3JjJjMpKSYzID0gLXNyYyAmIDMKIAkJICovCisKICAgICAgICAgLnNhdmUgICAgICAge3IwLCByNC1yNywgbHJ9CiAJCXN0bWZkCQlzcCEsIHtyMCwgcjQtcjcsIGxyfQogCQlyc2IJCQlyMywgcjAsICMwCkBAIC03MCw3ICsxNjEsNyBAQAogICAgICAgICBtb3YgICAgICAgICByNSwgcjEKICAgICAgICAgbW92ICAgICAgICAgcjYsIHIxCiAgICAgICAgIG1vdiAgICAgICAgIHI3LCByMQotICAgICAgICAKKwogCQlyc2IgICAgICAgICByMywgcjAsICMwCiAJCWFuZHMJCXIzLCByMywgIzB4MUMKIAkJYmVxICAgICAgICAgM2YKQEAgLTc4LDcgKzE2OSw3IEBACiAJCWFuZGhpCQlyMywgcjIsICMweDFDCiAJCXN1YiAgICAgICAgIHIyLCByMiwgcjMKIAotCQkvKiBjb25kaXRpb25uYWx5IHdyaXRlcyAwIHRvIDcgd29yZHMgKGxlbmd0aCBpbiByMykgKi8KKwkJLyogY29uZGl0aW9uYWxseSB3cml0ZXMgMCB0byA3IHdvcmRzIChsZW5ndGggaW4gcjMpICovCiAJCW1vdnMJCXIzLCByMywgbHNsICMyOAogCQlzdG1jc2lhCQlyMCEsIHtyMSwgbHJ9CiAJCXN0bWNzaWEJCXIwISwge3IxLCBscn0KQEAgLTk1LDcgKzE4Niw3IEBACiAgICAgICAgIGJocyAgICAgICAgIDFiCiAyOiAgICAgIGFkZCAgICAgICAgIHIyLCByMiwgIzMyCiAKLQkJLyogY29uZGl0aW9ubmFseSBzdG9yZXMgMCB0byAzMSBieXRlcyAqLworCQkvKiBjb25kaXRpb25hbGx5IHN0b3JlcyAwIHRvIDMxIGJ5dGVzICovCiAJCW1vdnMJCXIyLCByMiwgbHNsICMyOAogCQlzdG1jc2lhCQlyMCEsIHtyMSxyMyxyMTIsbHJ9CiAJCXN0bW1paWEJCXIwISwge3IxLCBscn0KZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vYmlvbmljL3N0cmNtcC5hMTUuUyBiL2xpYmMvYXJjaC1hcm0vYmlvbmljL3N0cmNtcC5hMTUuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNzI2YTZlCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9iaW9uaWMvc3RyY21wLmExNS5TCkBAIC0wLDAgKzEsNzg3IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDEzIEFSTSBMdGQKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBUaGUgbmFtZSBvZiB0aGUgY29tcGFueSBtYXkgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlCisgKiAgICBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4KKyAqICAgIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUk0gTFREIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRAorICogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBBUk0gTFREIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQKKyAqIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCisgKiBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJhcm1fYXNtLmgiCisKKyNpZmRlZiBfX0FSTUVCX18KKyNkZWZpbmUgUzJMT01FTSBsc2wKKyNkZWZpbmUgUzJMT01FTUVRIGxzbGVxCisjZGVmaW5lIFMySElNRU0gbHNyCisjZGVmaW5lIE1TQiAweDAwMDAwMGZmCisjZGVmaW5lIExTQiAweGZmMDAwMDAwCisjZGVmaW5lIEJZVEUwX09GRlNFVCAyNAorI2RlZmluZSBCWVRFMV9PRkZTRVQgMTYKKyNkZWZpbmUgQllURTJfT0ZGU0VUIDgKKyNkZWZpbmUgQllURTNfT0ZGU0VUIDAKKyNlbHNlIC8qIG5vdCAgX19BUk1FQl9fICovCisjZGVmaW5lIFMyTE9NRU0gbHNyCisjZGVmaW5lIFMyTE9NRU1FUSBsc3JlcQorI2RlZmluZSBTMkhJTUVNIGxzbAorI2RlZmluZSBCWVRFMF9PRkZTRVQgMAorI2RlZmluZSBCWVRFMV9PRkZTRVQgOAorI2RlZmluZSBCWVRFMl9PRkZTRVQgMTYKKyNkZWZpbmUgQllURTNfT0ZGU0VUIDI0CisjZGVmaW5lIE1TQiAweGZmMDAwMDAwCisjZGVmaW5lIExTQiAweDAwMDAwMGZmCisjZW5kaWYgLyogbm90ICBfX0FSTUVCX18gKi8KKworLnN5bnRheCAgICAgICAgIHVuaWZpZWQKKworI2lmIGRlZmluZWQgKF9fdGh1bWJfXykKKyAgICAgICAgLnRodW1iCisgICAgICAgIC50aHVtYl9mdW5jCisjZW5kaWYKKyAgICAgICAgLmdsb2JhbCBzdHJjbXAKKyAgICAgICAgLnR5cGUgICBzdHJjbXAsICVmdW5jdGlvbgorc3RyY21wOgorCisjaWYgKGRlZmluZWQgKF9fdGh1bWJfXykgJiYgIWRlZmluZWQgKF9fdGh1bWIyX18pKQorMToKKyAgICAgICAgbGRyYiAgICByMiwgW3IwXQorICAgICAgICBsZHJiICAgIHIzLCBbcjFdCisgICAgICAgIGFkZHMgICAgcjAsIHIwLCAjMQorICAgICAgICBhZGRzICAgIHIxLCByMSwgIzEKKyAgICAgICAgY21wICAgICByMiwgIzAKKyAgICAgICAgYmVxICAgICAyZgorICAgICAgICBjbXAgICAgIHIyLCByMworICAgICAgICBiZXEgICAgIDFiCisyOgorICAgICAgICBzdWJzICAgIHIwLCByMiwgcjMKKyAgICAgICAgYnggICAgICBscgorI2VsaWYgKGRlZmluZWQgKF9fT1BUSU1JWkVfU0laRV9fKSB8fCBkZWZpbmVkIChQUkVGRVJfU0laRV9PVkVSX1NQRUVEKSkKKzE6CisgICAgICAgIGxkcmIgICAgcjIsIFtyMF0sICMxCisgICAgICAgIGxkcmIgICAgcjMsIFtyMV0sICMxCisgICAgICAgIGNtcCAgICAgcjIsICMxCisgICAgICAgIGl0ICAgICAgY3MKKyAgICAgICAgY21wY3MgICByMiwgcjMKKyAgICAgICAgYmVxICAgICAxYgorICAgICAgICBzdWJzICAgIHIwLCByMiwgcjMKKyAgICAgICAgUkVUVVJOCisKKworI2VsaWYgKGRlZmluZWQgKF9JU0FfVEhVTUJfMikgfHwgZGVmaW5lZCAoX0lTQV9BUk1fNikpCisgICAgICAvKiBVc2UgTERSRCB3aGVuZXZlciBwb3NzaWJsZS4gICovCisKKy8qIFRoZSBtYWluIHRoaW5nIHRvIGxvb2sgb3V0IGZvciB3aGVuIGNvbXBhcmluZyBsYXJnZSBibG9ja3MgaXMgdGhhdAorICAgdGhlIGxvYWRzIGRvIG5vdCBjcm9zcyBhIHBhZ2UgYm91bmRhcnkgd2hlbiBsb2FkaW5nIHBhc3QgdGhlIGluZGV4CisgICBvZiB0aGUgYnl0ZSB3aXRoIHRoZSBmaXJzdCBkaWZmZXJlbmNlIG9yIHRoZSBmaXJzdCBzdHJpbmctdGVybWluYXRvci4KKworICAgRm9yIGV4YW1wbGUsIGlmIHRoZSBzdHJpbmdzIGFyZSBpZGVudGljYWwgYW5kIHRoZSBzdHJpbmctdGVybWluYXRvcgorICAgaXMgYXQgaW5kZXggaywgYnl0ZSBieSBieXRlIGNvbXBhcmlzb24gd2lsbCBub3QgbG9hZCBiZXlvbmQgYWRkcmVzcworICAgczErayBhbmQgczIrazsgd29yZCBieSB3b3JkIGNvbXBhcmlzb24gbWF5IGxvYWQgdXAgdG8gMyBieXRlcyBiZXlvbmQKKyAgIGs7IGRvdWJsZSB3b3JkIC0gdXAgdG8gNyBieXRlcy4gIElmIHRoZSBsb2FkIG9mIHRoZXNlIGJ5dGVzIGNyb3NzZXMKKyAgIGEgcGFnZSBib3VuZGFyeSwgaXQgbWlnaHQgY2F1c2UgYSBtZW1vcnkgZmF1bHQgKGlmIHRoZSBwYWdlIGlzIG5vdCBtYXBwZWQpCisgICB0aGF0IHdvdWxkIG5vdCBoYXZlIGhhcHBlbmVkIGluIGJ5dGUgYnkgYnl0ZSBjb21wYXJpc29uLgorCisgICBJZiBhbiBhZGRyZXNzIGlzIChkb3VibGUpIHdvcmQgYWxpZ25lZCwgdGhlbiBhIGxvYWQgb2YgYSAoZG91YmxlKSB3b3JkCisgICBmcm9tIHRoYXQgYWRkcmVzcyB3aWxsIG5vdCBjcm9zcyBhIHBhZ2UgYm91bmRhcnkuCisgICBUaGVyZWZvcmUsIHRoZSBhbGdvcml0aG0gYmVsb3cgY29uc2lkZXJzIHdvcmQgYW5kIGRvdWJsZS13b3JkIGFsaWdubWVudAorICAgb2Ygc3RyaW5ncyBzZXBhcmF0ZWx5LiAgKi8KKworLyogSGlnaC1sZXZlbCBkZXNjcmlwdGlvbiBvZiB0aGUgYWxnb3JpdGhtLgorCisgICAqIFRoZSBmYXN0IHBhdGg6IGlmIGJvdGggc3RyaW5ncyBhcmUgZG91YmxlLXdvcmQgYWxpZ25lZCwKKyAgICAgdXNlIExEUkQgdG8gbG9hZCB0d28gd29yZHMgZnJvbSBlYWNoIHN0cmluZyBpbiBldmVyeSBsb29wIGl0ZXJhdGlvbi4KKyAgICogSWYgdGhlIHN0cmluZ3MgaGF2ZSB0aGUgc2FtZSBvZmZzZXQgZnJvbSBhIHdvcmQgYm91bmRhcnksCisgICAgIHVzZSBMRFJCIHRvIGxvYWQgYW5kIGNvbXBhcmUgYnl0ZSBieSBieXRlIHVudGlsCisgICAgIHRoZSBmaXJzdCBzdHJpbmcgaXMgYWxpZ25lZCB0byBhIHdvcmQgYm91bmRhcnkgKGF0IG1vc3QgMyBieXRlcykuCisgICAgIFRoaXMgaXMgb3B0aW1pemVkIGZvciBxdWljayByZXR1cm4gb24gc2hvcnQgdW5hbGlnbmVkIHN0cmluZ3MuCisgICAqIElmIHRoZSBzdHJpbmdzIGhhdmUgdGhlIHNhbWUgb2Zmc2V0IGZyb20gYSBkb3VibGUtd29yZCBib3VuZGFyeSwKKyAgICAgdXNlIExEUkQgdG8gbG9hZCB0d28gd29yZHMgZnJvbSBlYWNoIHN0cmluZyBpbiBldmVyeSBsb29wIGl0ZXJhdGlvbiwgYXMgaW4gdGhlIGZhc3QgcGF0aC4KKyAgICogSWYgdGhlIHN0cmluZ3MgZG8gbm90IGhhdmUgdGhlIHNhbWUgb2Zmc2V0IGZyb20gYSBkb3VibGUtd29yZCBib3VuZGFyeSwKKyAgICAgbG9hZCBhIHdvcmQgZnJvbSB0aGUgc2Vjb25kIHN0cmluZyBiZWZvcmUgdGhlIGxvb3AgdG8gaW5pdGlhbGl6ZSB0aGUgcXVldWUuCisgICAgIFVzZSBMRFJEIHRvIGxvYWQgdHdvIHdvcmRzIGZyb20gZXZlcnkgc3RyaW5nIGluIGV2ZXJ5IGxvb3AgaXRlcmF0aW9uLgorICAgICBJbnNpZGUgdGhlIGxvb3AsIGxvYWQgdGhlIHNlY29uZCB3b3JkIGZyb20gdGhlIHNlY29uZCBzdHJpbmcgb25seSBhZnRlciBjb21wYXJpbmcKKyAgICAgdGhlIGZpcnN0IHdvcmQsIHVzaW5nIHRoZSBxdWV1ZWQgdmFsdWUsIHRvIGd1YXJhbnRlZSBzYWZldHkgYWNyb3NzIHBhZ2UgYm91bmRhcmllcy4KKyAgICogSWYgdGhlIHN0cmluZ3MgZG8gbm90IGhhdmUgdGhlIHNhbWUgb2Zmc2V0IGZyb20gYSB3b3JkIGJvdW5kYXJ5LAorICAgICB1c2UgTERSIGFuZCBhIHNoaWZ0IHF1ZXVlLiBPcmRlciBvZiBsb2FkcyBhbmQgY29tcGFyaXNvbnMgbWF0dGVycywKKyAgICAgc2ltaWxhcmx5IHRvIHRoZSBwcmV2aW91cyBjYXNlLgorCisgICAqIFVzZSBVQUREOCBhbmQgU0VMIHRvIGNvbXBhcmUgd29yZHMsIGFuZCB1c2UgUkVWIGFuZCBDTFogdG8gY29tcHV0ZSB0aGUgcmV0dXJuIHZhbHVlLgorICAgKiBUaGUgb25seSBkaWZmZXJlbmNlIGJldHdlZW4gQVJNIGFuZCBUaHVtYiBtb2RlcyBpcyB0aGUgdXNlIG9mIENCWiBpbnN0cnVjdGlvbi4KKyAgICogVGhlIG9ubHkgZGlmZmVyZW5jZSBiZXR3ZWVuIGJpZyBhbmQgbGl0dGxlIGVuZGlhbiBpcyB0aGUgdXNlIG9mIFJFViBpbiBsaXR0bGUgZW5kaWFuCisgICAgIHRvIGNvbXB1dGUgdGhlIHJldHVybiB2YWx1ZSwgaW5zdGVhZCBvZiBNT1YuCisgICAqIE5vIHByZWxvYWQuIFtUT0RPLl0KKyovCisKKyAgICAgICAgLm1hY3JvIG1fY2J6IHJlZyBsYWJlbAorI2lmZGVmIF9fdGh1bWIyX18KKyAgICAgICAgY2J6ICAgICBccmVnLCBcbGFiZWwKKyNlbHNlICAgLyogbm90IGRlZmluZWQgX190aHVtYjJfXyAqLworICAgICAgICBjbXAgICAgIFxyZWcsICMwCisgICAgICAgIGJlcSAgICAgXGxhYmVsCisjZW5kaWYgLyogbm90IGRlZmluZWQgX190aHVtYjJfXyAqLworICAgICAgICAuZW5kbSAvKiBtX2NieiAqLworCisgICAgICAgIC5tYWNybyBtX2NibnogcmVnIGxhYmVsCisjaWZkZWYgX190aHVtYjJfXworICAgICAgICBjYm56ICAgIFxyZWcsIFxsYWJlbAorI2Vsc2UgICAvKiBub3QgZGVmaW5lZCBfX3RodW1iMl9fICovCisgICAgICAgIGNtcCAgICAgXHJlZywgIzAKKyAgICAgICAgYm5lICAgICBcbGFiZWwKKyNlbmRpZiAvKiBub3QgZGVmaW5lZCBfX3RodW1iMl9fICovCisgICAgICAgIC5lbmRtIC8qIG1fY2JueiAqLworCisgICAgICAgIC5tYWNybyAgaW5pdAorICAgICAgICAvKiBNYWNybyB0byBzYXZlIHRlbXBvcmFyeSByZWdpc3RlcnMgYW5kIHByZXBhcmUgbWFnaWMgdmFsdWVzLiAgKi8KKyAgICAgICAgc3VicyAgICBzcCwgc3AsICMxNgorICAgICAgICBzdHJkICAgIHI0LCByNSwgW3NwLCAjOF0KKyAgICAgICAgc3RyZCAgICByNiwgcjcsIFtzcF0KKyAgICAgICAgbXZuICAgICByNiwgIzAgIC8qIGFsbCBGICovCisgICAgICAgIG1vdiAgICAgcjcsICMwICAvKiBhbGwgMCAqLworICAgICAgICAuZW5kbSAgIC8qIGluaXQgKi8KKworICAgICAgICAubWFjcm8gIG1hZ2ljX2NvbXBhcmVfYW5kX2JyYW5jaCB3MSB3MiBsYWJlbAorICAgICAgICAvKiBNYWNybyB0byBjb21wYXJlIHJlZ2lzdGVycyB3MSBhbmQgdzIgYW5kIGNvbmRpdGlvbmFsbHkgYnJhbmNoIHRvIGxhYmVsLiAgKi8KKyAgICAgICAgY21wICAgICBcdzEsIFx3MiAgICAgICAgLyogQXJlIHcxIGFuZCB3MiB0aGUgc2FtZT8gICovCisgICAgICAgIG1hZ2ljX2ZpbmRfemVyb19ieXRlcyBcdzEKKyAgICAgICAgaXQgICAgICBlcQorICAgICAgICBjbXBlcSAgIGlwLCAjMCAgICAgICAgICAvKiBJcyB0aGVyZSBhIHplcm8gYnl0ZSBpbiB3MT8gICovCisgICAgICAgIGJuZSAgICAgXGxhYmVsCisgICAgICAgIC5lbmRtIC8qIG1hZ2ljX2NvbXBhcmVfYW5kX2JyYW5jaCAqLworCisgICAgICAgIC5tYWNybyAgbWFnaWNfZmluZF96ZXJvX2J5dGVzIHcxCisgICAgICAgIC8qIE1hY3JvIHRvIGZpbmQgYWxsLXplcm8gYnl0ZXMgaW4gdzEsIHJlc3VsdCBpcyBpbiBpcC4gICovCisjaWYgKGRlZmluZWQgKF9fQVJNX0ZFQVRVUkVfRFNQKSkKKyAgICAgICAgdWFkZDggICBpcCwgXHcxLCByNgorICAgICAgICBzZWwgICAgIGlwLCByNywgcjYKKyNlbHNlIC8qIG5vdCBkZWZpbmVkIChfX0FSTV9GRUFUVVJFX0RTUCkgKi8KKyAgICAgICAgLyogX19BUk1fRkVBVFVSRV9EU1AgaXMgbm90IGRlZmluZWQgZm9yIHNvbWUgQ29ydGV4LU0gcHJvY2Vzc29ycy4KKyAgICAgICAgQ29pbmNpZGVudGx5LCB0aGVzZSBwcm9jZXNzb3JzIG9ubHkgaGF2ZSBUaHVtYi0yIG1vZGUsIHdoZXJlIHdlIGNhbiB1c2UgdGhlCisgICAgICAgIHRoZSAobGFyZ2UpIG1hZ2ljIGNvbnN0YW50IGF2YWlsYWJsZSBkaXJlY3RseSBhcyBhbiBpbW1lZGlhdGUgaW4gaW5zdHJ1Y3Rpb25zLgorICAgICAgICBOb3RlIHRoYXQgd2UgY2Fubm90IHVzZSB0aGUgbWFnaWMgY29uc3RhbnQgaW4gQVJNIG1vZGUsIHdoZXJlIHdlIG5lZWQKKyAgICAgICAgdG8gY3JlYXRlIHRoZSBjb25zdGFudCBpbiBhIHJlZ2lzdGVyLiAgKi8KKyAgICAgICAgc3ViICAgICBpcCwgXHcxLCAjMHgwMTAxMDEwMQorICAgICAgICBiaWMgICAgIGlwLCBpcCwgXHcxCisgICAgICAgIGFuZCAgICAgaXAsIGlwLCAjMHg4MDgwODA4MAorI2VuZGlmIC8qIG5vdCBkZWZpbmVkIChfX0FSTV9GRUFUVVJFX0RTUCkgKi8KKyAgICAgICAgLmVuZG0gLyogbWFnaWNfZmluZF96ZXJvX2J5dGVzICovCisKKyAgICAgICAgLm1hY3JvICBzZXR1cF9yZXR1cm4gdzEgdzIKKyNpZmRlZiBfX0FSTUVCX18KKyAgICAgICAgbW92ICAgICByMSwgXHcxCisgICAgICAgIG1vdiAgICAgcjIsIFx3MgorI2Vsc2UgLyogbm90ICBfX0FSTUVCX18gKi8KKyAgICAgICAgcmV2ICAgICByMSwgXHcxCisgICAgICAgIHJldiAgICAgcjIsIFx3MgorI2VuZGlmIC8qIG5vdCAgX19BUk1FQl9fICovCisgICAgICAgIC5lbmRtIC8qIHNldHVwX3JldHVybiAqLworCisgICAgICAgIC8qCisgICAgICAgIG9wdHBsZCByMCwgIzAKKyAgICAgICAgb3B0cGxkIHIxLCAjMAorICAgICAgICAqLworCisgICAgICAgIC8qIEFyZSBib3RoIHN0cmluZ3MgZG91YmxlLXdvcmQgYWxpZ25lZD8gICovCisgICAgICAgIG9yciAgICAgaXAsIHIwLCByMQorICAgICAgICB0c3QgICAgIGlwLCAjNworICAgICAgICBibmUgICAgIGRvX2FsaWduCisKKyAgICAgICAgLyogRmFzdCBwYXRoLiAgKi8KKyAgICAgICAgaW5pdAorCitkb3VibGV3b3JkX2FsaWduZWQ6CisKKyAgICAgICAgLyogR2V0IGhlcmUgd2hlbiB0aGUgc3RyaW5ncyB0byBjb21wYXJlIGFyZSBkb3VibGUtd29yZCBhbGlnbmVkLiAgKi8KKyAgICAgICAgLyogQ29tcGFyZSB0d28gd29yZHMgaW4gZXZlcnkgaXRlcmF0aW9uLiAgKi8KKyAgICAgICAgLnAyYWxpZ24gICAgICAgIDIKKzI6CisgICAgICAgIC8qCisgICAgICAgIG9wdHBsZCByMCwgIzE2CisgICAgICAgIG9wdHBsZCByMSwgIzE2CisgICAgICAgICovCisKKyAgICAgICAgLyogTG9hZCB0aGUgbmV4dCBkb3VibGUtd29yZCBmcm9tIGVhY2ggc3RyaW5nLiAgKi8KKyAgICAgICAgbGRyZCAgICByMiwgcjMsIFtyMF0sICM4CisgICAgICAgIGxkcmQgICAgcjQsIHI1LCBbcjFdLCAjOAorCisgICAgICAgIG1hZ2ljX2NvbXBhcmVfYW5kX2JyYW5jaCB3MT1yMiwgdzI9cjQsIGxhYmVsPXJldHVybl8yNAorICAgICAgICBtYWdpY19jb21wYXJlX2FuZF9icmFuY2ggdzE9cjMsIHcyPXI1LCBsYWJlbD1yZXR1cm5fMzUKKyAgICAgICAgYiAgICAgICAyYgorCitkb19hbGlnbjoKKyAgICAgICAgLyogSXMgdGhlIGZpcnN0IHN0cmluZyB3b3JkLWFsaWduZWQ/ICAqLworICAgICAgICBhbmRzICAgIGlwLCByMCwgIzMKKyAgICAgICAgYmVxICAgICB3b3JkX2FsaWduZWRfcjAKKworICAgICAgICAvKiBGYXN0IGNvbXBhcmUgYnl0ZSBieSBieXRlIHVudGlsIHRoZSBmaXJzdCBzdHJpbmcgaXMgd29yZC1hbGlnbmVkLiAgKi8KKyAgICAgICAgLyogVGhlIG9mZnNldCBvZiByMCBmcm9tIGEgd29yZCBib3VuZGFyeSBpcyBpbiBpcC4gVGh1cywgdGhlIG51bWJlciBvZiBieXRlcworICAgICAgICB0byByZWFkIHVudGlsIHRoZSBuZXh0IHdvcmQgYm91ZG5hcnkgaXMgNC1pcC4gICovCisgICAgICAgIGJpYyAgICAgcjAsIHIwLCAjMworICAgICAgICBsZHIgICAgIHIyLCBbcjBdLCAjNAorICAgICAgICBsc2xzICAgIGlwLCBpcCwgIzMxCisgICAgICAgIGJlcSAgICAgYnl0ZTIKKyAgICAgICAgYmNzICAgICBieXRlMworCitieXRlMToKKyAgICAgICAgbGRyYiAgICBpcCwgW3IxXSwgIzEKKyAgICAgICAgdXh0YiAgICByMywgcjIsIHJvciAjQllURTFfT0ZGU0VUCisgICAgICAgIHN1YnMgICAgaXAsIHIzLCBpcAorICAgICAgICBibmUgICAgIGZhc3RfcmV0dXJuCisgICAgICAgIG1fY2J6ICAgcmVnPXIzLCBsYWJlbD1mYXN0X3JldHVybgorCitieXRlMjoKKyAgICAgICAgbGRyYiAgICBpcCwgW3IxXSwgIzEKKyAgICAgICAgdXh0YiAgICByMywgcjIsIHJvciAjQllURTJfT0ZGU0VUCisgICAgICAgIHN1YnMgICAgaXAsIHIzLCBpcAorICAgICAgICBibmUgICAgIGZhc3RfcmV0dXJuCisgICAgICAgIG1fY2J6ICAgcmVnPXIzLCBsYWJlbD1mYXN0X3JldHVybgorCitieXRlMzoKKyAgICAgICAgbGRyYiAgICBpcCwgW3IxXSwgIzEKKyAgICAgICAgdXh0YiAgICByMywgcjIsIHJvciAjQllURTNfT0ZGU0VUCisgICAgICAgIHN1YnMgICAgaXAsIHIzLCBpcAorICAgICAgICBibmUgICAgIGZhc3RfcmV0dXJuCisgICAgICAgIG1fY2JueiAgcmVnPXIzLCBsYWJlbD13b3JkX2FsaWduZWRfcjAKKworZmFzdF9yZXR1cm46CisgICAgICAgIG1vdiAgICAgcjAsIGlwCisgICAgICAgIGJ4ICAgICAgbHIKKword29yZF9hbGlnbmVkX3IwOgorICAgICAgICBpbml0CisgICAgICAgIC8qIFRoZSBmaXJzdCBzdHJpbmcgaXMgd29yZC1hbGlnbmVkLiAgKi8KKyAgICAgICAgLyogSXMgdGhlIHNlY29uZCBzdHJpbmcgd29yZC1hbGlnbmVkPyAgKi8KKyAgICAgICAgYW5kcyAgICBpcCwgcjEsICMzCisgICAgICAgIGJuZSAgICAgc3RyY21wX3VuYWxpZ25lZAorCit3b3JkX2FsaWduZWQ6CisgICAgICAgIC8qIFRoZSBzdHJpbmdzIGFyZSB3b3JkLWFsaWduZWQuICovCisgICAgICAgIC8qIElzIHRoZSBmaXJzdCBzdHJpbmcgZG91YmxlLXdvcmQgYWxpZ25lZD8gICovCisgICAgICAgIHRzdCAgICAgcjAsICM0CisgICAgICAgIGJlcSAgICAgZG91Ymxld29yZF9hbGlnbmVkX3IwCisKKyAgICAgICAgLyogSWYgcjAgaXMgbm90IGRvdWJsZS13b3JkIGFsaWduZWQgeWV0LCBhbGlnbiBpdCBieSBsb2FkaW5nCisgICAgICAgIGFuZCBjb21wYXJpbmcgdGhlIG5leHQgd29yZCBmcm9tIGVhY2ggc3RyaW5nLiAgKi8KKyAgICAgICAgbGRyICAgICByMiwgW3IwXSwgIzQKKyAgICAgICAgbGRyICAgICByNCwgW3IxXSwgIzQKKyAgICAgICAgbWFnaWNfY29tcGFyZV9hbmRfYnJhbmNoIHcxPXIyIHcyPXI0IGxhYmVsPXJldHVybl8yNAorCitkb3VibGV3b3JkX2FsaWduZWRfcjA6CisgICAgICAgIC8qIEdldCBoZXJlIHdoZW4gcjAgaXMgZG91YmxlLXdvcmQgYWxpZ25lZC4gICovCisgICAgICAgIC8qIElzIHIxIGRvdWJsZXdvcmRfYWxpZ25lZD8gICovCisgICAgICAgIHRzdCAgICAgcjEsICM0CisgICAgICAgIGJlcSAgICAgZG91Ymxld29yZF9hbGlnbmVkCisKKyAgICAgICAgLyogR2V0IGhlcmUgd2hlbiB0aGUgc3RyaW5ncyB0byBjb21wYXJlIGFyZSB3b3JkLWFsaWduZWQsCisgICAgICAgIHIwIGlzIGRvdWJsZS13b3JkIGFsaWduZWQsIGJ1dCByMSBpcyBub3QgZG91YmxlLXdvcmQgYWxpZ25lZC4gICovCisKKyAgICAgICAgLyogSW5pdGlhbGl6ZSB0aGUgcXVldWUuICAqLworICAgICAgICBsZHIgICAgIHI1LCBbcjFdLCAjNAorCisgICAgICAgIC8qIENvbXBhcmUgdHdvIHdvcmRzIGluIGV2ZXJ5IGl0ZXJhdGlvbi4gICovCisgICAgICAgIC5wMmFsaWduICAgICAgICAyCiszOgorICAgICAgICAvKgorICAgICAgICBvcHRwbGQgcjAsICMxNgorICAgICAgICBvcHRwbGQgcjEsICMxNgorICAgICAgICAqLworCisgICAgICAgIC8qIExvYWQgdGhlIG5leHQgZG91YmxlLXdvcmQgZnJvbSBlYWNoIHN0cmluZyBhbmQgY29tcGFyZS4gICovCisgICAgICAgIGxkcmQgICAgcjIsIHIzLCBbcjBdLCAjOAorICAgICAgICBtYWdpY19jb21wYXJlX2FuZF9icmFuY2ggdzE9cjIgdzI9cjUgbGFiZWw9cmV0dXJuXzI1CisgICAgICAgIGxkcmQgICAgcjQsIHI1LCBbcjFdLCAjOAorICAgICAgICBtYWdpY19jb21wYXJlX2FuZF9icmFuY2ggdzE9cjMgdzI9cjQgbGFiZWw9cmV0dXJuXzM0CisgICAgICAgIGIgICAgICAgM2IKKworICAgICAgICAubWFjcm8gbWlzY21wX3dvcmQgb2Zmc2V0bG8gb2Zmc2V0aGkKKyAgICAgICAgLyogTWFjcm8gdG8gY29tcGFyZSBtaXNhbGlnbmVkIHN0cmluZ3MuICAqLworICAgICAgICAvKiByMCwgcjEgYXJlIHdvcmQtYWxpZ25lZCwgYW5kIGF0IGxlYXN0IG9uZSBvZiB0aGUgc3RyaW5ncworICAgICAgICBpcyBub3QgZG91YmxlLXdvcmQgYWxpZ25lZC4gICovCisgICAgICAgIC8qIENvbXBhcmUgb25lIHdvcmQgaW4gZXZlcnkgbG9vcCBpdGVyYXRpb24uICAqLworICAgICAgICAvKiBPRkZTRVRMTyBpcyB0aGUgb3JpZ2luYWwgYml0LW9mZnNldCBvZiByMSBmcm9tIGEgd29yZC1ib3VuZGFyeSwKKyAgICAgICAgT0ZGU0VUSEkgaXMgMzIgLSBPRkZTRVRMTyAoaS5lLiwgb2Zmc2V0IGZyb20gdGhlIG5leHQgd29yZCkuICAqLworCisgICAgICAgIC8qIEluaXRpYWxpemUgdGhlIHNoaWZ0IHF1ZXVlLiAgKi8KKyAgICAgICAgbGRyICAgICByNSwgW3IxXSwgIzQKKworICAgICAgICAvKiBDb21wYXJlIG9uZSB3b3JkIGZyb20gZWFjaCBzdHJpbmcgaW4gZXZlcnkgbG9vcCBpdGVyYXRpb24uICAqLworICAgICAgICAucDJhbGlnbiAgICAgICAgMgorNzoKKyAgICAgICAgbGRyICAgICByMywgW3IwXSwgIzQKKyAgICAgICAgUzJMT01FTSByNSwgcjUsICNcb2Zmc2V0bG8KKyAgICAgICAgbWFnaWNfZmluZF96ZXJvX2J5dGVzIHcxPXIzCisgICAgICAgIGNtcCAgICAgcjcsIGlwLCBTMkhJTUVNICNcb2Zmc2V0bG8KKyAgICAgICAgYW5kICAgICByMiwgcjMsIHI2LCBTMkxPTUVNICNcb2Zmc2V0bG8KKyAgICAgICAgaXQgICAgICBlcQorICAgICAgICBjbXBlcSAgIHIyLCByNQorICAgICAgICBibmUgICAgIHJldHVybl8yNQorICAgICAgICBsZHIgICAgIHI1LCBbcjFdLCAjNAorICAgICAgICBjbXAgICAgIGlwLCAjMAorICAgICAgICBlb3IgcjMsIHIyLCByMworICAgICAgICBTMkhJTUVNIHIyLCByNSwgI1xvZmZzZXRoaQorICAgICAgICBpdCAgICAgIGVxCisgICAgICAgIGNtcGVxICAgcjMsIHIyCisgICAgICAgIGJuZSAgICAgcmV0dXJuXzMyCisgICAgICAgIGIgICAgICAgN2IKKyAgICAgICAgLmVuZG0gLyogbWlzY21wX3dvcmQgKi8KKworc3RyY21wX3VuYWxpZ25lZDoKKyAgICAgICAgLyogcjAgaXMgd29yZC1hbGlnbmVkLCByMSBpcyBhdCBvZmZzZXQgaXAgZnJvbSBhIHdvcmQuICAqLworICAgICAgICAvKiBBbGlnbiByMSB0byB0aGUgKHByZXZpb3VzKSB3b3JkLWJvdW5kYXJ5LiAgKi8KKyAgICAgICAgYmljICAgICByMSwgcjEsICMzCisKKyAgICAgICAgLyogVW5hbGlnbmVkIGNvbXBhcmlzb24gd29yZCBieSB3b3JkIHVzaW5nIExEUnMuICovCisgICAgICAgIGNtcCAgICAgaXAsICMyCisgICAgICAgIGJlcSAgICAgbWlzY21wX3dvcmRfMTYgICAgICAgICAgICAgICAgICAgIC8qIElmIGlwID09IDIuICAqLworICAgICAgICBiZ2UgICAgIG1pc2NtcF93b3JkXzI0ICAgICAgICAgICAgICAgICAgICAvKiBJZiBpcCA9PSAzLiAgKi8KKyAgICAgICAgbWlzY21wX3dvcmQgb2Zmc2V0bG89OCBvZmZzZXRoaT0yNCAgICAgICAgLyogSWYgaXAgPT0gMS4gICovCittaXNjbXBfd29yZF8xNjogIG1pc2NtcF93b3JkIG9mZnNldGxvPTE2IG9mZnNldGhpPTE2CittaXNjbXBfd29yZF8yNDogIG1pc2NtcF93b3JkIG9mZnNldGxvPTI0IG9mZnNldGhpPTgKKworCityZXR1cm5fMzI6CisgICAgICAgIHNldHVwX3JldHVybiB3MT1yMywgdzI9cjIKKyAgICAgICAgYiAgICAgICBkb19yZXR1cm4KK3JldHVybl8zNDoKKyAgICAgICAgc2V0dXBfcmV0dXJuIHcxPXIzLCB3Mj1yNAorICAgICAgICBiICAgICAgIGRvX3JldHVybgorcmV0dXJuXzI1OgorICAgICAgICBzZXR1cF9yZXR1cm4gdzE9cjIsIHcyPXI1CisgICAgICAgIGIgICAgICAgZG9fcmV0dXJuCityZXR1cm5fMzU6CisgICAgICAgIHNldHVwX3JldHVybiB3MT1yMywgdzI9cjUKKyAgICAgICAgYiAgICAgICBkb19yZXR1cm4KK3JldHVybl8yNDoKKyAgICAgICAgc2V0dXBfcmV0dXJuIHcxPXIyLCB3Mj1yNAorCitkb19yZXR1cm46CisKKyNpZmRlZiBfX0FSTUVCX18KKyAgICAgICAgbW92ICAgICByMCwgaXAKKyNlbHNlIC8qIG5vdCAgX19BUk1FQl9fICovCisgICAgICAgIHJldiAgICAgcjAsIGlwCisjZW5kaWYgLyogbm90ICBfX0FSTUVCX18gKi8KKworICAgICAgICAvKiBSZXN0b3JlIHRlbXBvcmFyaWVzIGVhcmx5LCBiZWZvcmUgY29tcHV0aW5nIHRoZSByZXR1cm4gdmFsdWUuICAqLworICAgICAgICBsZHJkICAgIHI2LCByNywgW3NwXQorICAgICAgICBsZHJkICAgIHI0LCByNSwgW3NwLCAjOF0KKyAgICAgICAgYWRkcyAgICBzcCwgc3AsICMxNgorCisgICAgICAgIC8qIFRoZXJlIGlzIGEgemVybyBvciBhIGRpZmZlcmVudCBieXRlIGJldHdlZW4gcjEgYW5kIHIyLiAgKi8KKyAgICAgICAgLyogcjAgY29udGFpbnMgYSBtYXNrIG9mIGFsbC16ZXJvIGJ5dGVzIGluIHIxLiAgKi8KKyAgICAgICAgLyogVXNpbmcgcjAgYW5kIG5vdCBpcCBoZXJlIGJlY2F1c2UgY2J6IHJlcXVpcmVzIGxvdyByZWdpc3Rlci4gICovCisgICAgICAgIG1fY2J6ICAgcmVnPXIwLCBsYWJlbD1jb21wdXRlX3JldHVybl92YWx1ZQorICAgICAgICBjbHogICAgIHIwLCByMAorICAgICAgICAvKiByMCBjb250YWlucyB0aGUgbnVtYmVyIG9mIGJpdHMgb24gdGhlIGxlZnQgb2YgdGhlIGZpcnN0IGFsbC16ZXJvIGJ5dGUgaW4gcjEuICAqLworICAgICAgICByc2IgICAgIHIwLCByMCwgIzI0CisgICAgICAgIC8qIEhlcmUsIHIwIGNvbnRhaW5zIHRoZSBudW1iZXIgb2YgYml0cyBvbiB0aGUgcmlnaHQgb2YgdGhlIGZpcnN0IGFsbC16ZXJvIGJ5dGUgaW4gcjEuICAqLworICAgICAgICBsc3IgICAgIHIxLCByMSwgcjAKKyAgICAgICAgbHNyICAgICByMiwgcjIsIHIwCisKK2NvbXB1dGVfcmV0dXJuX3ZhbHVlOgorICAgICAgICBtb3ZzICAgIHIwLCAjMQorICAgICAgICBjbXAgICAgIHIxLCByMgorICAgICAgICAvKiBUaGUgcmV0dXJuIHZhbHVlIGlzIGNvbXB1dGVkIGFzIGZvbGxvd3MuCisgICAgICAgIElmIHIxPnIyIHRoZW4gKEM9PTEgYW5kIFo9PTApIGFuZCBMUyBkb2Vzbid0IGhvbGQgYW5kIHIwIGlzICMxIGF0IHJldHVybi4KKyAgICAgICAgSWYgcjE8cjIgdGhlbiAoQz09MCBhbmQgWj09MCkgYW5kIHdlIGV4ZWN1dGUgU0JDIHdpdGggY2FycnlfaW49MCwKKyAgICAgICAgd2hpY2ggbWVhbnMgcjA6PXIwLXIwLTEgYW5kIHIwIGlzICMtMSBhdCByZXR1cm4uCisgICAgICAgIElmIHIxPXIyIHRoZW4gKEM9PTEgYW5kIFo9PTEpIGFuZCB3ZSBleGVjdXRlIFNCQyB3aXRoIGNhcnJ5X2luPTEsCisgICAgICAgIHdoaWNoIG1lYW5zIHIwOj1yMC1yMCBhbmQgcjAgaXMgIzAgYXQgcmV0dXJuLgorICAgICAgICAoQz09MCBhbmQgWj09MSkgY2Fubm90IGhhcHBlbiBiZWNhdXNlIHRoZSBjYXJyeSBiaXQgaXMgIm5vdCBib3Jyb3ciLiAgKi8KKyAgICAgICAgaXQgICAgICBscworICAgICAgICBzYmNscyAgIHIwLCByMCwgcjAKKyAgICAgICAgYnggICAgICBscgorCisKKyNlbHNlICAgLyogIShkZWZpbmVkIChfSVNBX1RIVU1CXzIpIHx8IGRlZmluZWQgKF9JU0FfQVJNXzYpCisgICAgICAgICAgICAgZGVmaW5lZCAoX19PUFRJTUlaRV9TSVpFX18pIHx8IGRlZmluZWQgKFBSRUZFUl9TSVpFX09WRVJfU1BFRUQpIHx8CisgICAgICAgICAgICAgKGRlZmluZWQgKF9fdGh1bWJfXykgJiYgIWRlZmluZWQgKF9fdGh1bWIyX18pKSkgKi8KKworICAgICAgICAvKiBVc2UgTERSIHdoZW5ldmVyIHBvc3NpYmxlLiAqLworCisjaWZkZWYgX190aHVtYjJfXworI2RlZmluZSBtYWdpYzEoUkVHKSAweDAxMDEwMTAxCisjZGVmaW5lIG1hZ2ljMihSRUcpIDB4ODA4MDgwODAKKyNlbHNlCisjZGVmaW5lIG1hZ2ljMShSRUcpIFJFRworI2RlZmluZSBtYWdpYzIoUkVHKSBSRUcsIGxzbCAjNworI2VuZGlmCisKKyAgICAgICAgb3B0cGxkICByMAorICAgICAgICBvcHRwbGQgIHIxCisgICAgICAgIGVvciAgICAgcjIsIHIwLCByMQorICAgICAgICB0c3QgICAgIHIyLCAjMworICAgICAgICAvKiBTdHJpbmdzIG5vdCBhdCBzYW1lIGJ5dGUgb2Zmc2V0IGZyb20gYSB3b3JkIGJvdW5kYXJ5LiAgKi8KKyAgICAgICAgYm5lICAgICBzdHJjbXBfdW5hbGlnbmVkCisgICAgICAgIGFuZHMgICAgcjIsIHIwLCAjMworICAgICAgICBiaWMgICAgIHIwLCByMCwgIzMKKyAgICAgICAgYmljICAgICByMSwgcjEsICMzCisgICAgICAgIGxkciAgICAgaXAsIFtyMF0sICM0CisgICAgICAgIGl0ICAgICAgZXEKKyAgICAgICAgbGRyZXEgICByMywgW3IxXSwgIzQKKyAgICAgICAgYmVxICAgICAxZgorICAgICAgICAvKiBBbHRob3VnaCBzMSBhbmQgczIgaGF2ZSBpZGVudGljYWwgaW5pdGlhbCBhbGlnbm1lbnQsIHRoZXkgYXJlCisgICAgICAgIG5vdCBjdXJyZW50bHkgd29yZCBhbGlnbmVkLiAgUmF0aGVyIHRoYW4gY29tcGFyaW5nIGJ5dGVzLAorICAgIG1ha2Ugc3VyZSB0aGF0IGFueSBieXRlcyBmZXRjaGVkIGZyb20gYmVmb3JlIHRoZSBhZGRyZXNzZWQKKyAgICBieXRlcyBhcmUgZm9yY2VkIHRvIDB4ZmYuICBUaGVuIHRoZXkgd2lsbCBhbHdheXMgY29tcGFyZQorICAgIGVxdWFsLiAgKi8KKyAgICAgICAgZW9yICAgICByMiwgcjIsICMzCisgICAgICAgIGxzbCAgICAgcjIsIHIyLCAjMworICAgICAgICBtdm4gICAgIHIzLCBNU0IKKyAgICAgICAgUzJMT01FTSAgICAgICAgcjIsIHIzLCByMgorICAgICAgICBsZHIgICAgIHIzLCBbcjFdLCAjNAorICAgICAgICBvcnIgICAgIGlwLCBpcCwgcjIKKyAgICAgICAgb3JyICAgICByMywgcjMsIHIyCisxOgorI2lmbmRlZiBfX3RodW1iMl9fCisgICAgICAgICAgICAgIC8qIExvYWQgdGhlICdtYWdpYycgY29uc3RhbnQgMHgwMTAxMDEwMS4gICovCisgICAgICAgIHN0ciAgICAgcjQsIFtzcCwgIy00XSEKKyAgICAgICAgbW92ICAgICByNCwgIzEKKyAgICAgICAgb3JyICAgICByNCwgcjQsIHI0LCBsc2wgIzgKKyAgICAgICAgb3JyICAgICByNCwgcjQsIHI0LCBsc2wgIzE2CisjZW5kaWYKKyAgICAgICAgLnAyYWxpZ24gICAgICAgIDIKKzQ6CisgICAgICAgIG9wdHBsZCAgcjAsICM4CisgICAgICAgIG9wdHBsZCAgcjEsICM4CisgICAgICAgIHN1YiAgICAgcjIsIGlwLCBtYWdpYzEocjQpCisgICAgICAgIGNtcCAgICAgaXAsIHIzCisgICAgICAgIGl0dHR0ICAgZXEKKyAgICAgICAgLyogY2hlY2sgZm9yIGFueSB6ZXJvIGJ5dGVzIGluIGZpcnN0IHdvcmQgKi8KKyAgICAgICAgYmljZXEgICByMiwgcjIsIGlwCisgICAgICAgIHRzdGVxICAgcjIsIG1hZ2ljMihyNCkKKyAgICAgICAgbGRyZXEgICBpcCwgW3IwXSwgIzQKKyAgICAgICAgbGRyZXEgICByMywgW3IxXSwgIzQKKyAgICAgICAgYmVxICAgICA0YgorMjoKKyAgICAgICAgLyogVGhlcmUncyBhIHplcm8gb3IgYSBkaWZmZXJlbnQgYnl0ZSBpbiB0aGUgd29yZCAqLworICAgICAgICBTMkhJTUVNICByMCwgaXAsICMyNAorICAgICAgICBTMkxPTUVNICBpcCwgaXAsICM4CisgICAgICAgIGNtcCAgICAgcjAsICMxCisgICAgICAgIGl0ICAgICAgY3MKKyAgICAgICAgY21wY3MgICByMCwgcjMsIFMySElNRU0gIzI0CisgICAgICAgIGl0ICAgICAgZXEKKyAgICAgICAgUzJMT01FTUVRIHIzLCByMywgIzgKKyAgICAgICAgYmVxICAgICAyYgorICAgICAgICAvKiBPbiBhIGJpZy1lbmRpYW4gbWFjaGluZSwgcjAgY29udGFpbnMgdGhlIGRlc2lyZWQgYnl0ZSBpbiBiaXRzCisgICAgICAgIDAtNzsgb24gYSBsaXR0bGUtZW5kaWFuIG1hY2hpbmUgdGhleSBhcmUgaW4gYml0cyAyNC0zMS4gIEluCisgICAgICAgIGJvdGggY2FzZXMgdGhlIG90aGVyIGJpdHMgaW4gcjAgYXJlIGFsbCB6ZXJvLiAgRm9yIHIzIHRoZQorICAgICAgICBpbnRlcmVzdGluZyBieXRlIGlzIGF0IHRoZSBvdGhlciBlbmQgb2YgdGhlIHdvcmQsIGJ1dCB0aGUKKyAgICAgICAgb3RoZXIgYml0cyBhcmUgbm90IG5lY2Vzc2FyaWx5IHplcm8uICBXZSBuZWVkIGEgc2lnbmVkIHJlc3VsdAorICAgICAgICByZXByZXNlbnRpbmcgdGhlIGRpZmZlcm5lY2UgaW4gdGhlIHVuc2lnbmVkIGJ5dGVzLCBzbyBmb3IgdGhlCisgICAgICAgIGxpdHRsZS1lbmRpYW4gY2FzZSB3ZSBjYW4ndCBqdXN0IHNoaWZ0IHRoZSBpbnRlcmVzdGluZyBiaXRzCisgICAgICAgIHVwLiAgKi8KKyNpZmRlZiBfX0FSTUVCX18KKyAgICAgICAgc3ViICAgICByMCwgcjAsIHIzLCBsc3IgIzI0CisjZWxzZQorICAgICAgICBhbmQgICAgIHIzLCByMywgIzI1NQorI2lmZGVmIF9fdGh1bWIyX18KKyAgICAgICAgLyogTm8gUlNCIGluc3RydWN0aW9uIGluIFRodW1iMiAqLworICAgICAgICBsc3IgICAgIHIwLCByMCwgIzI0CisgICAgICAgIHN1YiAgICAgcjAsIHIwLCByMworI2Vsc2UKKyAgICAgICAgcnNiICAgICByMCwgcjMsIHIwLCBsc3IgIzI0CisjZW5kaWYKKyNlbmRpZgorI2lmbmRlZiBfX3RodW1iMl9fCisgICAgICAgIGxkciAgICAgcjQsIFtzcF0sICM0CisjZW5kaWYKKyAgICAgICAgUkVUVVJOCisKKworc3RyY21wX3VuYWxpZ25lZDoKKworI2lmIDAKKyAgICAgICAgLyogVGhlIGFzc2VtYmx5IGNvZGUgYmVsb3cgaXMgYmFzZWQgb24gdGhlIGZvbGxvd2luZyBhbG9ncml0aG0uICAqLworI2lmZGVmIF9fQVJNRUJfXworI2RlZmluZSBSU0hJRlQgPDwKKyNkZWZpbmUgTFNISUZUID4+CisjZWxzZQorI2RlZmluZSBSU0hJRlQgPj4KKyNkZWZpbmUgTFNISUZUIDw8CisjZW5kaWYKKworI2RlZmluZSBib2R5KHNoaWZ0KSAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIG1hc2sgPSAweGZmZmZmZmZmVSBSU0hJRlQgc2hpZnQ7ICAgICAgICAgICAgICAgICAgXAorICB3MSA9ICp3cDErKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHcyID0gKndwMisrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgdDEgPSB3MSAmIG1hc2s7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgaWYgKF9fYnVpbHRpbl9leHBlY3QodDEgIT0gdzIgUlNISUZUIHNoaWZ0LCAwKSkgICAgICAgICAgIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHcyIFJTSElGVD0gc2hpZnQ7ICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIGlmIChfX2J1aWx0aW5fZXhwZWN0KCgodzEgLSBiMSkgJiB+dzEpICYgKGIxIDw8IDcpLCAwKSkgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgLyogU2VlIGNvbW1lbnQgaW4gYXNzZW1ibGVyIGJlbG93IHJlIHN5bmRyb21lIG9uIGJpZy1lbmRpYW4gKi9cCisgICAgICBpZiAoKCgodzEgLSBiMSkgJiB+dzEpICYgKGIxIDw8IDcpKSAmIG1hc2spICAgICAgICAgICBcCisgICAgICAgIHcyIFJTSElGVD0gc2hpZnQ7ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICB3MiA9ICp3cDI7ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIHQxID0gdzEgUlNISUZUICgzMiAtIHNoaWZ0KTsgICAgICAgICAgICAgIFwKKyAgICAgICAgICB3MiA9ICh3MiBMU0hJRlQgKDMyIC0gc2hpZnQpKSBSU0hJRlQgKDMyIC0gc2hpZnQpOyAgICBcCisgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHcyID0gKndwMisrOyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgdDEgXj0gdzE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICBpZiAoX19idWlsdGluX2V4cGVjdCh0MSAhPSB3MiBMU0hJRlQgKDMyIC0gc2hpZnQpLCAwKSkgICAgICAgIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHQxID0gdzEgPj4gKDMyIC0gc2hpZnQpOyAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHcyID0gKHcyIDw8ICgzMiAtIHNoaWZ0KSkgUlNISUZUICgzMiAtIHNoaWZ0KTsgICAgICAgIFwKKyAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICB3MSA9ICp3cDErKzsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9IHdoaWxlICgxKQorCisgIGNvbnN0IHVuc2lnbmVkKiB3cDE7CisgIGNvbnN0IHVuc2lnbmVkKiB3cDI7CisgIHVuc2lnbmVkIHcxLCB3MjsKKyAgdW5zaWduZWQgbWFzazsKKyAgdW5zaWduZWQgc2hpZnQ7CisgIHVuc2lnbmVkIGIxID0gMHgwMTAxMDEwMTsKKyAgY2hhciBjMSwgYzI7CisgIHVuc2lnbmVkIHQxOworCisgIHdoaWxlICgoKHVuc2lnbmVkKSBzMSkgJiAzKQorICAgIHsKKyAgICAgIGMxID0gKnMxKys7CisgICAgICBjMiA9ICpzMisrOworICAgICAgaWYgKGMxID09IDAgfHwgYzEgIT0gYzIpCisgICAgcmV0dXJuIGMxIC0gKGludCljMjsKKyAgICB9CisgIHdwMSA9ICh1bnNpZ25lZCopICgoKHVuc2lnbmVkKXMxKSAmIH4zKTsKKyAgd3AyID0gKHVuc2lnbmVkKikgKCgodW5zaWduZWQpczIpICYgfjMpOworICB0MSA9ICgodW5zaWduZWQpIHMyKSAmIDM7CisgIGlmICh0MSA9PSAxKQorICAgIHsKKyAgICAgIGJvZHkoOCk7CisgICAgfQorICBlbHNlIGlmICh0MSA9PSAyKQorICAgIHsKKyAgICAgIGJvZHkoMTYpOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIGJvZHkgKDI0KTsKKyAgICB9CisKKyAgZG8KKyAgICB7CisjaWZkZWYgX19BUk1FQl9fCisgICAgICBjMSA9IChjaGFyKSB0MSA+PiAyNDsKKyAgICAgIGMyID0gKGNoYXIpIHcyID4+IDI0OworI2Vsc2UgLyogbm90ICBfX0FSTUVCX18gKi8KKyAgICAgIGMxID0gKGNoYXIpIHQxOworICAgICAgYzIgPSAoY2hhcikgdzI7CisjZW5kaWYgLyogbm90ICBfX0FSTUVCX18gKi8KKyAgICAgIHQxIFJTSElGVD0gODsKKyAgICAgIHcyIFJTSElGVD0gODsKKyAgICB9IHdoaWxlIChjMSAhPSAwICYmIGMxID09IGMyKTsKKyAgcmV0dXJuIGMxIC0gYzI7CisjZW5kaWYgLyogMCAqLworCisKKyAgICAgICAgd3AxIC5yZXEgcjAKKyAgICAgICAgd3AyIC5yZXEgcjEKKyAgICAgICAgYjEgIC5yZXEgcjIKKyAgICAgICAgdzEgIC5yZXEgcjQKKyAgICAgICAgdzIgIC5yZXEgcjUKKyAgICAgICAgdDEgIC5yZXEgaXAKKyAgICAgICAgQCByMyBpcyBzY3JhdGNoCisKKyAgICAgICAgLyogRmlyc3Qgb2YgYWxsLCBjb21wYXJlIGJ5dGVzIHVudGlsIHdwMShzcDEpIGlzIHdvcmQtYWxpZ25lZC4gKi8KKzE6CisgICAgICAgIHRzdCAgICAgd3AxLCAjMworICAgICAgICBiZXEgICAgIDJmCisgICAgICAgIGxkcmIgICAgcjIsIFt3cDFdLCAjMQorICAgICAgICBsZHJiICAgIHIzLCBbd3AyXSwgIzEKKyAgICAgICAgY21wICAgICByMiwgIzEKKyAgICAgICAgaXQgICAgICBjcworICAgICAgICBjbXBjcyAgIHIyLCByMworICAgICAgICBiZXEgICAgIDFiCisgICAgICAgIHN1YiAgICAgcjAsIHIyLCByMworICAgICAgICBSRVRVUk4KKworMjoKKyAgICAgICAgc3RyICAgICByNSwgW3NwLCAjLTRdIQorICAgICAgICBzdHIgICAgIHI0LCBbc3AsICMtNF0hCisgICAgICAgIC8vc3RtZmQgICBzcCEsIHtyNCwgcjV9CisgICAgICAgIG1vdiAgICAgYjEsICMxCisgICAgICAgIG9yciAgICAgYjEsIGIxLCBiMSwgbHNsICM4CisgICAgICAgIG9yciAgICAgYjEsIGIxLCBiMSwgbHNsICMxNgorCisgICAgICAgIGFuZCAgICAgdDEsIHdwMiwgIzMKKyAgICAgICAgYmljICAgICB3cDIsIHdwMiwgIzMKKyAgICAgICAgbGRyICAgICB3MSwgW3dwMV0sICM0CisgICAgICAgIGxkciAgICAgdzIsIFt3cDJdLCAjNAorICAgICAgICBjbXAgICAgIHQxLCAjMgorICAgICAgICBiZXEgICAgIDJmCisgICAgICAgIGJoaSAgICAgM2YKKworICAgICAgICAvKiBDcml0aWNhbCBpbm5lciBMb29wOiBCbG9jayB3aXRoIDMgYnl0ZXMgaW5pdGlhbCBvdmVybGFwICovCisgICAgICAgIC5wMmFsaWduICAgICAgICAyCisxOgorICAgICAgICBiaWMgICAgIHQxLCB3MSwgTVNCCisgICAgICAgIGNtcCAgICAgdDEsIHcyLCBTMkxPTUVNICM4CisgICAgICAgIHN1YiAgICAgcjMsIHcxLCBiMQorICAgICAgICBiaWMgICAgIHIzLCByMywgdzEKKyAgICAgICAgYm5lICAgICA0ZgorICAgICAgICBhbmRzICAgIHIzLCByMywgYjEsIGxzbCAjNworICAgICAgICBpdCAgICAgIGVxCisgICAgICAgIGxkcmVxICAgdzIsIFt3cDJdLCAjNAorICAgICAgICBibmUgICAgIDVmCisgICAgICAgIGVvciAgICAgdDEsIHQxLCB3MQorICAgICAgICBjbXAgICAgIHQxLCB3MiwgUzJISU1FTSAjMjQKKyAgICAgICAgYm5lICAgICA2ZgorICAgICAgICBsZHIgICAgIHcxLCBbd3AxXSwgIzQKKyAgICAgICAgYiAgICAgICAxYgorNDoKKyAgICAgICAgUzJMT01FTSAgICAgICAgdzIsIHcyLCAjOAorICAgICAgICBiICAgICAgIDhmCisKKzU6CisjaWZkZWYgX19BUk1FQl9fCisgICAgICAgIC8qIFRoZSBzeW5kcm9tZSB2YWx1ZSBtYXkgY29udGFpbiBmYWxzZSBvbmVzIGlmIHRoZSBzdHJpbmcgZW5kcworICAgICAgICB3aXRoIHRoZSBieXRlcyAweDAxIDB4MDAgKi8KKyAgICAgICAgdHN0ICAgICB3MSwgIzB4ZmYwMDAwMDAKKyAgICAgICAgaXR0ICAgICBuZQorICAgICAgICB0c3RuZSAgIHcxLCAjMHgwMGZmMDAwMAorICAgICAgICB0c3RuZSAgIHcxLCAjMHgwMDAwZmYwMAorICAgICAgICBiZXEgICAgIDdmCisjZWxzZQorICAgICAgICBiaWNzICAgIHIzLCByMywgIzB4ZmYwMDAwMDAKKyAgICAgICAgYm5lICAgICA3ZgorI2VuZGlmCisgICAgICAgIGxkcmIgICAgdzIsIFt3cDJdCisgICAgICAgIFMyTE9NRU0gIHQxLCB3MSwgIzI0CisjaWZkZWYgX19BUk1FQl9fCisgICAgICAgIGxzbCAgICAgdzIsIHcyLCAjMjQKKyNlbmRpZgorICAgICAgICBiICAgICAgIDhmCisKKzY6CisgICAgICAgIFMyTE9NRU0gIHQxLCB3MSwgIzI0CisgICAgICAgIGFuZCAgICAgdzIsIHcyLCBMU0IKKyAgICAgICAgYiAgICAgICA4ZgorCisgICAgICAgIC8qIENyaXRpY2FsIGlubmVyIExvb3A6IEJsb2NrIHdpdGggMiBieXRlcyBpbml0aWFsIG92ZXJsYXAgKi8KKyAgICAgICAgLnAyYWxpZ24gICAgICAgIDIKKzI6CisgICAgICAgIFMySElNRU0gIHQxLCB3MSwgIzE2CisgICAgICAgIHN1YiAgICAgcjMsIHcxLCBiMQorICAgICAgICBTMkxPTUVNICB0MSwgdDEsICMxNgorICAgICAgICBiaWMgICAgIHIzLCByMywgdzEKKyAgICAgICAgY21wICAgICB0MSwgdzIsIFMyTE9NRU0gIzE2CisgICAgICAgIGJuZSAgICAgNGYKKyAgICAgICAgYW5kcyAgICByMywgcjMsIGIxLCBsc2wgIzcKKyAgICAgICAgaXQgICAgICBlcQorICAgICAgICBsZHJlcSAgIHcyLCBbd3AyXSwgIzQKKyAgICAgICAgYm5lICAgICA1ZgorICAgICAgICBlb3IgICAgIHQxLCB0MSwgdzEKKyAgICAgICAgY21wICAgICB0MSwgdzIsIFMySElNRU0gIzE2CisgICAgICAgIGJuZSAgICAgNmYKKyAgICAgICAgbGRyICAgICB3MSwgW3dwMV0sICM0CisgICAgICAgIGIgICAgICAgMmIKKworNToKKyNpZmRlZiBfX0FSTUVCX18KKyAgICAgICAgLyogVGhlIHN5bmRyb21lIHZhbHVlIG1heSBjb250YWluIGZhbHNlIG9uZXMgaWYgdGhlIHN0cmluZyBlbmRzCisgICAgICAgIHdpdGggdGhlIGJ5dGVzIDB4MDEgMHgwMCAqLworICAgICAgICB0c3QgICAgIHcxLCAjMHhmZjAwMDAwMAorICAgICAgICBpdCAgICAgIG5lCisgICAgICAgIHRzdG5lICAgdzEsICMweDAwZmYwMDAwCisgICAgICAgIGJlcSAgICAgN2YKKyNlbHNlCisgICAgICAgIGxzbHMgICAgcjMsIHIzLCAjMTYKKyAgICAgICAgYm5lICAgICA3ZgorI2VuZGlmCisgICAgICAgIGxkcmggICAgdzIsIFt3cDJdCisgICAgICAgIFMyTE9NRU0gIHQxLCB3MSwgIzE2CisjaWZkZWYgX19BUk1FQl9fCisgICAgICAgIGxzbCAgICAgdzIsIHcyLCAjMTYKKyNlbmRpZgorICAgICAgICBiICAgICAgIDhmCisKKzY6CisgICAgICAgIFMySElNRU0gIHcyLCB3MiwgIzE2CisgICAgICAgIFMyTE9NRU0gIHQxLCB3MSwgIzE2Cis0OgorICAgICAgICBTMkxPTUVNICB3MiwgdzIsICMxNgorICAgICAgICBiICAgICAgIDhmCisKKyAgICAgICAgLyogQ3JpdGljYWwgaW5uZXIgTG9vcDogQmxvY2sgd2l0aCAxIGJ5dGUgaW5pdGlhbCBvdmVybGFwICovCisgICAgICAgIC5wMmFsaWduICAgICAgICAyCiszOgorICAgICAgICBhbmQgICAgIHQxLCB3MSwgTFNCCisgICAgICAgIGNtcCAgICAgdDEsIHcyLCBTMkxPTUVNICMyNAorICAgICAgICBzdWIgICAgIHIzLCB3MSwgYjEKKyAgICAgICAgYmljICAgICByMywgcjMsIHcxCisgICAgICAgIGJuZSAgICAgNGYKKyAgICAgICAgYW5kcyAgICByMywgcjMsIGIxLCBsc2wgIzcKKyAgICAgICAgaXQgICAgICBlcQorICAgICAgICBsZHJlcSAgIHcyLCBbd3AyXSwgIzQKKyAgICAgICAgYm5lICAgICA1ZgorICAgICAgICBlb3IgICAgIHQxLCB0MSwgdzEKKyAgICAgICAgY21wICAgICB0MSwgdzIsIFMySElNRU0gIzgKKyAgICAgICAgYm5lICAgICA2ZgorICAgICAgICBsZHIgICAgIHcxLCBbd3AxXSwgIzQKKyAgICAgICAgYiAgICAgICAzYgorNDoKKyAgICAgICAgUzJMT01FTSAgdzIsIHcyLCAjMjQKKyAgICAgICAgYiAgICAgICA4ZgorNToKKyAgICAgICAgLyogVGhlIHN5bmRyb21lIHZhbHVlIG1heSBjb250YWluIGZhbHNlIG9uZXMgaWYgdGhlIHN0cmluZyBlbmRzCisgICAgICAgIHdpdGggdGhlIGJ5dGVzIDB4MDEgMHgwMCAqLworICAgICAgICB0c3QgICAgIHcxLCBMU0IKKyAgICAgICAgYmVxICAgICA3ZgorICAgICAgICBsZHIgICAgIHcyLCBbd3AyXSwgIzQKKzY6CisgICAgICAgIFMyTE9NRU0gIHQxLCB3MSwgIzgKKyAgICAgICAgYmljICAgICB3MiwgdzIsIE1TQgorICAgICAgICBiICAgICAgIDhmCis3OgorICAgICAgICBtb3YgICAgIHIwLCAjMAorICAgICAgICAvL2xkbWZkICAgc3AhLCB7cjQsIHI1fQorICAgICAgICBsZHIgICAgIHI0LCBbc3BdLCAjNAorICAgICAgICBsZHIgICAgIHI1LCBbc3BdLCAjNAorICAgICAgICBSRVRVUk4KKzg6CisgICAgICAgIGFuZCAgICAgcjIsIHQxLCBMU0IKKyAgICAgICAgYW5kICAgICByMCwgdzIsIExTQgorICAgICAgICBjbXAgICAgIHIwLCAjMQorICAgICAgICBpdCAgICAgIGNzCisgICAgICAgIGNtcGNzICAgcjAsIHIyCisgICAgICAgIGl0dCAgICAgZXEKKyAgICAgICAgUzJMT01FTUVRICAgICAgICB0MSwgdDEsICM4CisgICAgICAgIFMyTE9NRU1FUSAgICAgICAgdzIsIHcyLCAjOAorICAgICAgICBiZXEgICAgIDhiCisgICAgICAgIHN1YiAgICAgcjAsIHIyLCByMAorICAgICAgICAvL2xkbWZkICAgc3AhLCB7cjQsIHI1fQorICAgICAgICBsZHIgICAgIHI0LCBbc3BdLCAjNAorICAgICAgICBsZHIgICAgIHI1LCBbc3BdLCAjNAorICAgICAgICBSRVRVUk4KKworI2VuZGlmIC8qICEoZGVmaW5lZCAoX0lTQV9USFVNQl8yKSB8fCBkZWZpbmVkIChfSVNBX0FSTV82KQorICAgICAgICAgICAgZGVmaW5lZCAoX19PUFRJTUlaRV9TSVpFX18pIHx8IGRlZmluZWQgKFBSRUZFUl9TSVpFX09WRVJfU1BFRUQpIHx8CisgICAgICAgICAgICAoZGVmaW5lZCAoX190aHVtYl9fKSAmJiAhZGVmaW5lZCAoX190aHVtYjJfXykpKSAqLwpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9iaW9uaWMvc3RybGVuLmMgYi9saWJjL2FyY2gtYXJtL2Jpb25pYy9zdHJsZW4uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDE2MzJlMy4uMDAwMDAwMAotLS0gYS9saWJjL2FyY2gtYXJtL2Jpb25pYy9zdHJsZW4uYworKysgL2Rldi9udWxsCkBAIC0xLDEyOSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogICAgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUwotICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKLSAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCi0gKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKLSAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAotICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0gKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8c3RkaW50Lmg+Ci0jaW5jbHVkZSA8bWFjaGluZS9jcHUtZmVhdHVyZXMuaD4KLQotc2l6ZV90IHN0cmxlbihjb25zdCBjaGFyICpzKQotewotICAgIF9fYnVpbHRpbl9wcmVmZXRjaChzKTsKLSAgICBfX2J1aWx0aW5fcHJlZmV0Y2gocyszMik7Ci0gICAgCi0gICAgdW5pb24gewotICAgICAgICBjb25zdCBjaGFyICAgICAgKmI7Ci0gICAgICAgIGNvbnN0IHVpbnQzMl90ICAqdzsKLSAgICAgICAgdWludHB0cl90ICAgICAgIGk7Ci0gICAgfSB1OwotICAgIAotICAgIC8vIHRoZXNlIGFyZSBzb21lIHNjcmF0Y2ggdmFyaWFibGVzIGZvciB0aGUgYXNtIGNvZGUgYmVsb3cKLSAgICB1aW50MzJfdCB2LCB0OwotICAgIAotICAgIC8vIGluaXRpYWxpemUgdGhlIHN0cmluZyBsZW5ndGggdG8gemVybwotICAgIHNpemVfdCBsID0gMDsKLQotICAgIC8vIGFsaWduIHRoZSBwb2ludGVyIHRvIGEgMzItYml0IHdvcmQgYm91bmRhcnkKLSAgICB1LmIgPSBzOwotICAgIHdoaWxlICh1LmkgJiAweDMpICB7Ci0gICAgICAgIGlmIChfX2J1aWx0aW5fZXhwZWN0KCp1LmIrKyA9PSAwLCAwKSkgewotICAgICAgICAgICAgZ290byBkb25lOwotICAgICAgICB9Ci0gICAgICAgIGwrKzsKLSAgICB9Ci0KLSAgICAvLyBsb29wIGZvciBlYWNoIHdvcmQsIHRlc3RpbmcgaWYgaXQgY29udGFpbnMgYSB6ZXJvIGJ5dGUKLSAgICAvLyBpZiBzbywgZXhpdCB0aGUgbG9vcCBhbmQgdXBkYXRlIHRoZSBsZW5ndGguCi0gICAgLy8gV2UgbmVlZCB0byBwcm9jZXNzIDMyIGJ5dGVzIHBlciBsb29wIHRvIHNjaGVkdWxlIFBMRCBwcm9wZXJseQotICAgIC8vIGFuZCBhY2hpZXZlIHRoZSBtYXhpbXVtIGJ1cyBzcGVlZC4KLSAgICBhc20oCi0gICAgICAgICJsZHIgICAgICVbdl0sIFsgJVtzXSBdLCAjNCAgICAgICAgIFxuIgotICAgICAgICAic3ViICAgICAlW2xdLCAlW2xdLCAlW3NdICAgICAgICAgICBcbiIKLSAgICAgICAgIjA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCi0jaWYgX19BUk1fSEFWRV9QTEQKLSAgICAgICAgInBsZCAgICAgWyAlW3NdLCAjNjQgXSAgICAgICAgICAgICAgXG4iCi0jZW5kaWYKLSAgICAgICAgInN1YiAgICAgJVt0XSwgJVt2XSwgJVttYXNrXSwgbHNyICM3XG4iCi0gICAgICAgICJhbmQgICAgICVbdF0sICVbdF0sICVbbWFza10gICAgICAgIFxuIgotICAgICAgICAiYmljcyAgICAlW3RdLCAlW3RdLCAlW3ZdICAgICAgICAgICBcbiIKLSAgICAgICAgImxkcmVxICAgJVt2XSwgWyAlW3NdIF0sICM0ICAgICAgICAgXG4iCi0jaWYgIWRlZmluZWQoX19PUFRJTUlaRV9TSVpFX18pCi0gICAgICAgICJibmUgICAgIDFmICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgotICAgICAgICAic3ViICAgICAlW3RdLCAlW3ZdLCAlW21hc2tdLCBsc3IgIzdcbiIKLSAgICAgICAgImFuZCAgICAgJVt0XSwgJVt0XSwgJVttYXNrXSAgICAgICAgXG4iCi0gICAgICAgICJiaWNzICAgICVbdF0sICVbdF0sICVbdl0gICAgICAgICAgIFxuIgotICAgICAgICAibGRyZXEgICAlW3ZdLCBbICVbc10gXSwgIzQgICAgICAgICBcbiIKLSAgICAgICAgImJuZSAgICAgMWYgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCi0gICAgICAgICJzdWIgICAgICVbdF0sICVbdl0sICVbbWFza10sIGxzciAjN1xuIgotICAgICAgICAiYW5kICAgICAlW3RdLCAlW3RdLCAlW21hc2tdICAgICAgICBcbiIKLSAgICAgICAgImJpY3MgICAgJVt0XSwgJVt0XSwgJVt2XSAgICAgICAgICAgXG4iCi0gICAgICAgICJsZHJlcSAgICVbdl0sIFsgJVtzXSBdLCAjNCAgICAgICAgIFxuIgotICAgICAgICAiYm5lICAgICAxZiAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKLSAgICAgICAgInN1YiAgICAgJVt0XSwgJVt2XSwgJVttYXNrXSwgbHNyICM3XG4iCi0gICAgICAgICJhbmQgICAgICVbdF0sICVbdF0sICVbbWFza10gICAgICAgIFxuIgotICAgICAgICAiYmljcyAgICAlW3RdLCAlW3RdLCAlW3ZdICAgICAgICAgICBcbiIKLSAgICAgICAgImxkcmVxICAgJVt2XSwgWyAlW3NdIF0sICM0ICAgICAgICAgXG4iCi0gICAgICAgICJibmUgICAgIDFmICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgotICAgICAgICAic3ViICAgICAlW3RdLCAlW3ZdLCAlW21hc2tdLCBsc3IgIzdcbiIKLSAgICAgICAgImFuZCAgICAgJVt0XSwgJVt0XSwgJVttYXNrXSAgICAgICAgXG4iCi0gICAgICAgICJiaWNzICAgICVbdF0sICVbdF0sICVbdl0gICAgICAgICAgIFxuIgotICAgICAgICAibGRyZXEgICAlW3ZdLCBbICVbc10gXSwgIzQgICAgICAgICBcbiIKLSAgICAgICAgImJuZSAgICAgMWYgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCi0gICAgICAgICJzdWIgICAgICVbdF0sICVbdl0sICVbbWFza10sIGxzciAjN1xuIgotICAgICAgICAiYW5kICAgICAlW3RdLCAlW3RdLCAlW21hc2tdICAgICAgICBcbiIKLSAgICAgICAgImJpY3MgICAgJVt0XSwgJVt0XSwgJVt2XSAgICAgICAgICAgXG4iCi0gICAgICAgICJsZHJlcSAgICVbdl0sIFsgJVtzXSBdLCAjNCAgICAgICAgIFxuIgotICAgICAgICAiYm5lICAgICAxZiAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKLSAgICAgICAgInN1YiAgICAgJVt0XSwgJVt2XSwgJVttYXNrXSwgbHNyICM3XG4iCi0gICAgICAgICJhbmQgICAgICVbdF0sICVbdF0sICVbbWFza10gICAgICAgIFxuIgotICAgICAgICAiYmljcyAgICAlW3RdLCAlW3RdLCAlW3ZdICAgICAgICAgICBcbiIKLSAgICAgICAgImxkcmVxICAgJVt2XSwgWyAlW3NdIF0sICM0ICAgICAgICAgXG4iCi0gICAgICAgICJibmUgICAgIDFmICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgotICAgICAgICAic3ViICAgICAlW3RdLCAlW3ZdLCAlW21hc2tdLCBsc3IgIzdcbiIKLSAgICAgICAgImFuZCAgICAgJVt0XSwgJVt0XSwgJVttYXNrXSAgICAgICAgXG4iCi0gICAgICAgICJiaWNzICAgICVbdF0sICVbdF0sICVbdl0gICAgICAgICAgIFxuIgotICAgICAgICAibGRyZXEgICAlW3ZdLCBbICVbc10gXSwgIzQgICAgICAgICBcbiIKLSNlbmRpZgotICAgICAgICAiYmVxICAgICAwYiAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKLSAgICAgICAgIjE6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCi0gICAgICAgICJhZGQgICAgICVbbF0sICVbbF0sICVbc10gICAgICAgICAgIFxuIgotICAgICAgICAidHN0ICAgICAlW3ZdLCAjMHhGRiAgICAgICAgICAgICAgICBcbiIKLSAgICAgICAgImJlcSAgICAgMmYgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCi0gICAgICAgICJhZGQgICAgICVbbF0sICVbbF0sICMxICAgICAgICAgICAgIFxuIgotICAgICAgICAidHN0ICAgICAlW3ZdLCAjMHhGRjAwICAgICAgICAgICAgICBcbiIKLSAgICAgICAgImJlcSAgICAgMmYgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCi0gICAgICAgICJhZGQgICAgICVbbF0sICVbbF0sICMxICAgICAgICAgICAgIFxuIgotICAgICAgICAidHN0ICAgICAlW3ZdLCAjMHhGRjAwMDAgICAgICAgICAgICBcbiIKLSAgICAgICAgImFkZG5lICAgJVtsXSwgJVtsXSwgIzEgICAgICAgICAgICAgXG4iCi0gICAgICAgICIyOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgotICAgICAgICA6IFtsXSI9JnIiKGwpLCBbdl0iPSZyIih2KSwgW3RdIj0mciIodCksIFtzXSI9JnIiKHUuYikKLSAgICAgICAgOiAiJVtsXSIobCksICIlW3NdIih1LmIpLCBbbWFza10iciIoMHg4MDgwODA4MFVMKQotICAgICAgICA6ICJjYyIKLSAgICApOwotICAgIAotZG9uZToKLSAgICByZXR1cm4gbDsKLX0KZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vYmlvbmljL3N5c2NhbGwuUyBiL2xpYmMvYXJjaC1hcm0vYmlvbmljL3N5c2NhbGwuUwppbmRleCBhZGExMmE2Li41MTBkMjk4IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL2Jpb25pYy9zeXNjYWxsLlMKKysrIGIvbGliYy9hcmNoLWFybS9iaW9uaWMvc3lzY2FsbC5TCkBAIC0yNSw0NyArMjUsMjIgQEAKICAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgogICogU1VDSCBEQU1BR0UuCiAgKi8KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KIAorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+CiAKLQkudGV4dAotCS5hbGlnbiA0Ci0JLnR5cGUgc3lzY2FsbCwjZnVuY3Rpb24KLQkuZ2xvYmwgc3lzY2FsbAotIAotCS50ZXh0Ci0JLmFsaWduCi0KLSNpZiBfX0FSTV9FQUJJX18KLQotc3lzY2FsbDoKK0VOVFJZKHN5c2NhbGwpCiAgICAgbW92ICAgICBpcCwgc3AKLSAgICBzdG1mZAlzcCEsIHtyNCwgcjUsIHI2LCByN30KKyAgICBzdG1mZCAgIHNwISwge3I0LCByNSwgcjYsIHI3fQogICAgIG1vdiAgICAgcjcsIHIwCiAgICAgbW92ICAgICByMCwgcjEKICAgICBtb3YgICAgIHIxLCByMgogICAgIG1vdiAgICAgcjIsIHIzCi0gICAgbGRtZmQJaXAsIHtyMywgcjQsIHI1LCByNn0KKyAgICBsZG1mZCAgIGlwLCB7cjMsIHI0LCByNSwgcjZ9CiAgICAgc3dpICAgICAjMAogICAgIGxkbWZkICAgc3AhLCB7cjQsIHI1LCByNiwgcjd9Ci0gICAgbW92cyAgICByMCwgcjAKLSAgICBieHBsICAgIGxyCi0gICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCi0KLSNlbHNlCi0KLSNpZm5kZWYgX19OUl9zeXNjYWxsCi0jZGVmaW5lIF9fTlJfc3lzY2FsbCAgICAxMTMKLSNlbmRpZgotCi1zeXNjYWxsOgotICAgIHN0bWZkICAgc3AhLCB7cjQsIHI1LCBscn0KLSAgICBsZHIgICAgIHI0LCBbc3AsICMxMl0KLSAgICBsZHIgICAgIHI1LCBbc3AsICMxNl0KLSAgICBzd2kgICAgIF9fTlJfc3lzY2FsbAotICAgIGxkbWZkICAgc3AhLCB7cjQsIHI1LCBscn0KLSAgICBtb3ZzICAgIHIwLCByMAotICAgIGJ4cGwgICAgbHIKLSAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KLQotI2VuZGlmCisgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQorICAgIGJ4bHMgICAgbHIKKyAgICBuZWcgICAgIHIwLCByMAorICAgIGIgICAgICAgX19zZXRfZXJybm8KK0VORChzeXNjYWxsKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9iaW9uaWMvdGdraWxsLlMgYi9saWJjL2FyY2gtYXJtL2Jpb25pYy90Z2tpbGwuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZjExYjIwCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9iaW9uaWMvdGdraWxsLlMKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgorI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+CisKKy8qIHVubGlrZSBvdXIgYXV0by1nZW5lcmF0ZWQgc3lzY2FsbCBzdHVicywgdGhpcyBjb2RlIHNhdmVzIGxyCisgICBvbiB0aGUgc3RhY2ssIGFzIHdlbGwgYXMgYSBmZXcgb3RoZXIgcmVnaXN0ZXJzLiB0aGlzIG1ha2VzCisgICBvdXIgc3RhY2sgdW53aW5kZXIgaGFwcHksIHdoZW4gd2UgZ2VuZXJhdGUgZGVidWcgc3RhY2sKKyAgIHRyYWNlcyBhZnRlciB0aGUgQyBsaWJyYXJ5IG9yIG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0KKyAgIGFib3J0IGR1ZSB0byBhIGZhdGFsIHJ1bnRpbWUgZXJyb3IgKGUuZy4gZGV0ZWN0aW9uCisgICBvZiBhIGNvcnJ1cHRlZCBtYWxsb2MgaGVhcCkuCisqLworCitFTlRSWSh0Z2tpbGwpCisgICAgLnNhdmUgICB7cjQtcjcsIGlwLCBscn0KKyAgICBzdG1mZCAgIHNwISwge3I0LXI3LCBpcCwgbHJ9CisgICAgbGRyICAgICByNywgPV9fTlJfdGdraWxsCisgICAgc3dpICAgICAjMAorICAgIGxkbWZkICAgc3AhLCB7cjQtcjcsIGlwLCBscn0KKyAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCisgICAgYnhscyAgICBscgorICAgIG5lZyAgICAgcjAsIHIwCisgICAgYiAgICAgICBfX3NldF9lcnJubworRU5EKHRna2lsbCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vYmlvbmljL3RraWxsLlMgYi9saWJjL2FyY2gtYXJtL2Jpb25pYy90a2lsbC5TCmluZGV4IGZkYzVlZDQuLmZkNmUyMWUgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vYmlvbmljL3RraWxsLlMKKysrIGIvbGliYy9hcmNoLWFybS9iaW9uaWMvdGtpbGwuUwpAQCAtMjUsNiArMjUsMTEgQEAKICAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgogICogU1VDSCBEQU1BR0UuCiAgKi8KKworI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgorCiAvKiB1bmxpa2Ugb3VyIGF1dG8tZ2VuZXJhdGVkIHN5c2NhbGwgc3R1YnMsIHRoaXMgY29kZSBzYXZlcyBscgogICAgb24gdGhlIHN0YWNrLCBhcyB3ZWxsIGFzIGEgZmV3IG90aGVyIHJlZ2lzdGVycy4gdGhpcyBtYWtlcwogICAgb3VyIHN0YWNrIHVud2luZGVyIGhhcHB5LCB3aGVuIHdlIGdlbmVyYXRlIGRlYnVnIHN0YWNrCkBAIC0zMywxOSArMzgsMTMgQEAKICAgIG9mIGEgY29ycnVwdGVkIG1hbGxvYyBoZWFwKS4KICovCiAKLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KLSNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgotCi0jaWZuZGVmIF9fTlJfdGtpbGwKLSNkZWZpbmUgX19OUl90a2lsbCAgMjM4Ci0jZW5kaWYKLQogRU5UUlkodGtpbGwpCiAgICAgc3RtZmQgICBzcCEsIHtyNC1yNywgaXAsIGxyfQogICAgIGxkciAgICAgcjcsID1fX05SX3RraWxsCiAgICAgc3dpICAgICAjMAogICAgIGxkbWZkICAgc3AhLCB7cjQtcjcsIGlwLCBscn0KLSAgICBtb3ZzICAgIHIwLCByMAotICAgIGJ4cGwgICAgbHIKLSAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCisgICAgYnhscyAgICBscgorICAgIG5lZyAgICAgcjAsIHIwCisgICAgYiAgICAgICBfX3NldF9lcnJubwogRU5EKHRraWxsKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9jb3J0ZXgtYTE1L2Jpb25pYy9tZW1jcHkuUyBiL2xpYmMvYXJjaC1hcm0vY29ydGV4LWExNS9iaW9uaWMvbWVtY3B5LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDI5NzA2NAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vY29ydGV4LWExNS9iaW9uaWMvbWVtY3B5LlMKQEAgLTAsMCArMSwzMjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTMgQVJNIEx0ZAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIFRoZSBuYW1lIG9mIHRoZSBjb21wYW55IG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUKKyAqICAgIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbgorICogICAgcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFSTSBMVEQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVECisgKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KKyAqIElOIE5PIEVWRU5UIFNIQUxMIEFSTSBMVEQgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRAorICogVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKKyAqIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworICAgIC8qIFByb3RvdHlwZTogdm9pZCAqbWVtY3B5ICh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IGNvdW50KS4gICovCisKKyAgICAgICAgLy8gVGhpcyB2ZXJzaW9uIGlzIHR1bmVkIGZvciB0aGUgQ29ydGV4LUExNSBwcm9jZXNzb3IuCisKKyNpbmNsdWRlIDxtYWNoaW5lL2NwdS1mZWF0dXJlcy5oPgorI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+CisKKyAgICAgICAgLnRleHQKKyAgICAgICAgLnN5bnRheCB1bmlmaWVkCisgICAgICAgIC5mcHUgICAgbmVvbgorCisjZGVmaW5lIENBQ0hFX0xJTkVfU0laRSA2NAorCitFTlRSWShtZW1jcHkpCisgICAgICAgIC8vIEFzc3VtZXMgdGhhdCBuID49IDAsIGFuZCBkc3QsIHNyYyBhcmUgdmFsaWQgcG9pbnRlcnMuCisgICAgICAgIC8vIEZvciBhbnkgc2l6ZXMgbGVzcyB0aGFuIDgzMiB1c2UgdGhlIG5lb24gY29kZSB0aGF0IGRvZXNuJ3QKKyAgICAgICAgLy8gY2FyZSBhYm91dCB0aGUgc3JjIGFsaWdubWVudC4gVGhpcyBhdm9pZHMgYW55IGNoZWNrcworICAgICAgICAvLyBmb3Igc3JjIGFsaWdubWVudCwgYW5kIG9mZmVycyB0aGUgYmVzdCBpbXByb3ZlbWVudCBzaW5jZQorICAgICAgICAvLyBzbWFsbGVyIHNpemVkIGNvcGllcyBhcmUgZG9taW5hdGVkIGJ5IHRoZSBvdmVyaGVhZCBvZgorICAgICAgICAvLyB0aGUgcHJlIGFuZCBwb3N0IG1haW4gbG9vcC4KKyAgICAgICAgLy8gRm9yIGxhcmdlciBjb3BpZXMsIGlmIHNyYyBhbmQgZHN0IGNhbm5vdCBib3RoIGJlIGFsaWduZWQgdG8KKyAgICAgICAgLy8gd29yZCBib3VuZGFyaWVzLCB1c2UgdGhlIG5lb24gY29kZS4KKyAgICAgICAgLy8gRm9yIGFsbCBvdGhlciBjb3BpZXMsIGFsaWduIGRzdCB0byBhIGRvdWJsZSB3b3JkIGJvdW5kYXJ5CisgICAgICAgIC8vIGFuZCBjb3B5IHVzaW5nIExEUkQvU1RSRCBpbnN0cnVjdGlvbnMuCisKKyAgICAgICAgLy8gU2F2ZSByZWdpc3RlcnMgKHIwIGhvbGRzIHRoZSByZXR1cm4gdmFsdWUpOgorICAgICAgICAvLyBvcHRpbWl6ZWQgcHVzaCB7cjAsIGxyfS4KKyAgICAgICAgLnNhdmUgICB7cjAsIGxyfQorICAgICAgICBwbGQgICAgIFtyMSwgIyhDQUNIRV9MSU5FX1NJWkUqMTYpXQorICAgICAgICBwdXNoICAgIHtyMCwgbHJ9CisKKyAgICAgICAgY21wICAgICByMiwgIzE2CisgICAgICAgIGJsbyAgICAgY29weV9sZXNzX3RoYW5fMTZfdW5rbm93bl9hbGlnbgorCisgICAgICAgIGNtcCAgICAgcjIsICM4MzIKKyAgICAgICAgYmdlICAgICBjaGVja19hbGlnbm1lbnQKKworY29weV91bmtub3duX2FsaWdubWVudDoKKyAgICAgICAgLy8gVW5rbm93biBhbGlnbm1lbnQgb2Ygc3JjIGFuZCBkc3QuCisgICAgICAgIC8vIEFzc3VtZXMgdGhhdCB0aGUgZmlyc3QgZmV3IGJ5dGVzIGhhdmUgYWxyZWFkeSBiZWVuIHByZWZldGNoZWQuCisKKyAgICAgICAgLy8gQWxpZ24gZGVzdGluYXRpb24gdG8gMTI4IGJpdHMuIFRoZSBtYWlubG9vcCBzdG9yZSBpbnN0cnVjdGlvbnMKKyAgICAgICAgLy8gcmVxdWlyZSB0aGlzIGFsaWdubWVudCBvciB0aGV5IHdpbGwgdGhyb3cgYW4gZXhjZXB0aW9uLgorICAgICAgICByc2IgICAgICAgICByMywgcjAsICMwCisgICAgICAgIGFuZHMgICAgICAgIHIzLCByMywgIzB4RgorICAgICAgICBiZXEgICAgICAgICAyZgorCisgICAgICAgIC8vIENvcHkgdXAgdG8gMTUgYnl0ZXMgKGNvdW50IGluIHIzKS4KKyAgICAgICAgc3ViICAgICAgICAgcjIsIHIyLCByMworICAgICAgICBtb3ZzICAgICAgICBpcCwgcjMsIGxzbCAjMzEKKworICAgICAgICBpdHQgICAgICAgICBtaQorICAgICAgICBsZHJibWkgICAgICBsciwgW3IxXSwgIzEKKyAgICAgICAgc3RyYm1pICAgICAgbHIsIFtyMF0sICMxCisgICAgICAgIGl0dHR0ICAgICAgIGNzCisgICAgICAgIGxkcmJjcyAgICAgIGlwLCBbcjFdLCAjMQorICAgICAgICBsZHJiY3MgICAgICBsciwgW3IxXSwgIzEKKyAgICAgICAgc3RyYmNzICAgICAgaXAsIFtyMF0sICMxCisgICAgICAgIHN0cmJjcyAgICAgIGxyLCBbcjBdLCAjMQorCisgICAgICAgIG1vdnMgICAgICAgIGlwLCByMywgbHNsICMyOQorICAgICAgICBiZ2UgICAgICAgICAxZgorICAgICAgICAvLyBDb3BpZXMgNCBieXRlcywgZHN0IDMyIGJpdHMgYWxpZ25lZCBiZWZvcmUsIGF0IGxlYXN0IDY0IGJpdHMgYWZ0ZXIuCisgICAgICAgIHZsZDQuOCAgICAgIHtkMFswXSwgZDFbMF0sIGQyWzBdLCBkM1swXX0sIFtyMV0hCisgICAgICAgIHZzdDQuOCAgICAgIHtkMFswXSwgZDFbMF0sIGQyWzBdLCBkM1swXX0sIFtyMCwgOjMyXSEKKzE6ICAgICAgYmNjICAgICAgICAgMmYKKyAgICAgICAgLy8gQ29waWVzIDggYnl0ZXMsIGRzdCA2NCBiaXRzIGFsaWduZWQgYmVmb3JlLCBhdCBsZWFzdCAxMjggYml0cyBhZnRlci4KKyAgICAgICAgdmxkMS44ICAgICAge2QwfSwgW3IxXSEKKyAgICAgICAgdnN0MS44ICAgICAge2QwfSwgW3IwLCA6NjRdIQorCisyOiAgICAgIC8vIE1ha2Ugc3VyZSB3ZSBoYXZlIGF0IGxlYXN0IDY0IGJ5dGVzIHRvIGNvcHkuCisgICAgICAgIHN1YnMgICAgICAgIHIyLCByMiwgIzY0CisgICAgICAgIGJsbyAgICAgICAgIDJmCisKKzE6ICAgICAgLy8gVGhlIG1haW4gbG9vcCBjb3BpZXMgNjQgYnl0ZXMgYXQgYSB0aW1lLgorICAgICAgICB2bGQxLjggICAgICB7ZDAgIC0gZDN9LCAgIFtyMV0hCisgICAgICAgIHZsZDEuOCAgICAgIHtkNCAgLSBkN30sICAgW3IxXSEKKyAgICAgICAgcGxkICAgICAgICAgW3IxLCAjKENBQ0hFX0xJTkVfU0laRSo0KV0KKyAgICAgICAgc3VicyAgICAgICAgcjIsIHIyLCAjNjQKKyAgICAgICAgdnN0MS44ICAgICAge2QwICAtIGQzfSwgICBbcjAsIDoxMjhdIQorICAgICAgICB2c3QxLjggICAgICB7ZDQgIC0gZDd9LCAgIFtyMCwgOjEyOF0hCisgICAgICAgIGJocyAgICAgICAgIDFiCisKKzI6ICAgICAgLy8gRml4LXVwIHRoZSByZW1haW5pbmcgY291bnQgYW5kIG1ha2Ugc3VyZSB3ZSBoYXZlID49IDMyIGJ5dGVzIGxlZnQuCisgICAgICAgIGFkZHMgICAgICAgIHIyLCByMiwgIzMyCisgICAgICAgIGJsbyAgICAgICAgIDNmCisKKyAgICAgICAgLy8gMzIgYnl0ZXMuIFRoZXNlIGNhY2hlIGxpbmVzIHdlcmUgYWxyZWFkeSBwcmVsb2FkZWQuCisgICAgICAgIHZsZDEuOCAgICAgIHtkMCAtIGQzfSwgIFtyMV0hCisgICAgICAgIHN1YiAgICAgICAgIHIyLCByMiwgIzMyCisgICAgICAgIHZzdDEuOCAgICAgIHtkMCAtIGQzfSwgIFtyMCwgOjEyOF0hCiszOiAgICAgIC8vIExlc3MgdGhhbiAzMiBsZWZ0LgorICAgICAgICBhZGQgICAgICAgICByMiwgcjIsICMzMgorICAgICAgICB0c3QgICAgICAgICByMiwgIzB4MTAKKyAgICAgICAgYmVxICAgICAgICAgY29weV9sZXNzX3RoYW5fMTZfdW5rbm93bl9hbGlnbgorICAgICAgICAvLyBDb3BpZXMgMTYgYnl0ZXMsIGRlc3RpbmF0aW9uIDEyOCBiaXRzIGFsaWduZWQuCisgICAgICAgIHZsZDEuOCAgICAgIHtkMCwgZDF9LCBbcjFdIQorICAgICAgICB2c3QxLjggICAgICB7ZDAsIGQxfSwgW3IwLCA6MTI4XSEKKworY29weV9sZXNzX3RoYW5fMTZfdW5rbm93bl9hbGlnbjoKKyAgICAgICAgLy8gQ29weSB1cCB0byAxNSBieXRlcyAoY291bnQgaW4gcjIpLgorICAgICAgICBtb3ZzICAgICAgICBpcCwgcjIsIGxzbCAjMjkKKyAgICAgICAgYmNjICAgICAgICAgMWYKKyAgICAgICAgdmxkMS44ICAgICAge2QwfSwgW3IxXSEKKyAgICAgICAgdnN0MS44ICAgICAge2QwfSwgW3IwXSEKKzE6ICAgICAgYmdlICAgICAgICAgMmYKKyAgICAgICAgdmxkNC44ICAgICAge2QwWzBdLCBkMVswXSwgZDJbMF0sIGQzWzBdfSwgW3IxXSEKKyAgICAgICAgdnN0NC44ICAgICAge2QwWzBdLCBkMVswXSwgZDJbMF0sIGQzWzBdfSwgW3IwXSEKKworMjogICAgICAvLyBDb3B5IDAgdG8gNCBieXRlcy4KKyAgICAgICAgbHNscyAgICAgICAgcjIsIHIyLCAjMzEKKyAgICAgICAgaXR0ICAgICAgICAgbmUKKyAgICAgICAgbGRyYm5lICAgICAgbHIsIFtyMV0sICMxCisgICAgICAgIHN0cmJuZSAgICAgIGxyLCBbcjBdLCAjMQorICAgICAgICBpdHR0dCAgICAgICBjcworICAgICAgICBsZHJiY3MgICAgICBpcCwgW3IxXSwgIzEKKyAgICAgICAgbGRyYmNzICAgICAgbHIsIFtyMV0KKyAgICAgICAgc3RyYmNzICAgICAgaXAsIFtyMF0sICMxCisgICAgICAgIHN0cmJjcyAgICAgIGxyLCBbcjBdCisKKyAgICAgICAgcG9wICAgICAgICAge3IwLCBwY30KKworY2hlY2tfYWxpZ25tZW50OgorICAgICAgICAvLyBJZiBzcmMgYW5kIGRzdCBjYW5ub3QgYm90aCBiZSBhbGlnbmVkIHRvIGEgd29yZCBib3VuZGFyeSwKKyAgICAgICAgLy8gdXNlIHRoZSB1bmFsaWduZWQgY29weSB2ZXJzaW9uLgorICAgICAgICBlb3IgICAgIHIzLCByMCwgcjEKKyAgICAgICAgYW5kcyAgICByMywgcjMsICMweDMKKyAgICAgICAgYm5lICAgICBjb3B5X3Vua25vd25fYWxpZ25tZW50CisKKyAgICAgICAgLy8gVG8gdHJ5IGFuZCBpbXByb3ZlIHBlcmZvcm1hbmNlLCBzdGFjayBsYXlvdXQgY2hhbmdlZCwKKyAgICAgICAgLy8gaS5lLiwgbm90IGtlZXBpbmcgdGhlIHN0YWNrIGxvb2tpbmcgbGlrZSB1c2VycyBleHBlY3QKKyAgICAgICAgLy8gKGhpZ2hlc3QgbnVtYmVyZWQgcmVnaXN0ZXIgYXQgaGlnaGVzdCBhZGRyZXNzKS4KKyAgICAgICAgLy8gVE9ETzogQWRkIGRlYnVnIGZyYW1lIGRpcmVjdGl2ZXMuCisgICAgICAgIC8vIFdlIGRvbid0IG5lZWQgZXhjZXB0aW9uIHVud2luZCBkaXJlY3RpdmVzLCBiZWNhdXNlIHRoZSBjb2RlIGJlbG93CisgICAgICAgIC8vIGRvZXMgbm90IHRocm93IGFueSBleGNlcHRpb25zIGFuZCBkb2VzIG5vdCBjYWxsIGFueSBvdGhlciBmdW5jdGlvbnMuCisgICAgICAgIC8vIEdlbmVyYWxseSwgbmV3bGliIGZ1bmN0aW9ucyBsaWtlIHRoaXMgbGFjayBkZWJ1ZyBpbmZvcm1hdGlvbiBmb3IKKyAgICAgICAgLy8gYXNzZW1ibGVyIHNvdXJjZS4KKyAgICAgICAgLnNhdmUgICB7cjQsIHI1fQorICAgICAgICBzdHJkICAgIHI0LCByNSwgW3NwLCAjLThdIQorICAgICAgICAuc2F2ZSAgIHtyNiwgcjd9CisgICAgICAgIHN0cmQgICAgcjYsIHI3LCBbc3AsICMtOF0hCisgICAgICAgIC5zYXZlICAge3I4LCByOX0KKyAgICAgICAgc3RyZCAgICByOCwgcjksIFtzcCwgIy04XSEKKworICAgICAgICAvLyBPcHRpbWl6ZWQgZm9yIGFscmVhZHkgYWxpZ25lZCBkc3QgY29kZS4KKyAgICAgICAgYW5kcyAgICBpcCwgcjAsICMzCisgICAgICAgIGJuZSAgICAgZHN0X25vdF93b3JkX2FsaWduZWQKKword29yZF9hbGlnbmVkOgorICAgICAgICAvLyBBbGlnbiB0aGUgZGVzdGluYXRpb24gYnVmZmVyIHRvIDggYnl0ZXMsIHRvIG1ha2Ugc3VyZSBkb3VibGUKKyAgICAgICAgLy8gbG9hZHMgYW5kIHN0b3JlcyBkb24ndCBjcm9zcyBhIGNhY2hlIGxpbmUgYm91bmRhcnksCisgICAgICAgIC8vIGFzIHRoZXkgYXJlIHRoZW4gbW9yZSBleHBlbnNpdmUgZXZlbiBpZiB0aGUgZGF0YSBpcyBpbiB0aGUgY2FjaGUKKyAgICAgICAgLy8gKHJlcXVpcmUgdHdvIGxvYWQvc3RvcmUgaXNzdWUgY3ljbGVzIGluc3RlYWQgb2Ygb25lKS4KKyAgICAgICAgLy8gSWYgb25seSBvbmUgb2YgdGhlIGJ1ZmZlcnMgaXMgbm90IDggYnl0ZXMgYWxpZ25lZCwKKyAgICAgICAgLy8gdGhlbiBpdCdzIG1vcmUgaW1wb3J0YW50IHRvIGFsaWduIGRzdCB0aGFuIHNyYywKKyAgICAgICAgLy8gYmVjYXVzZSB0aGVyZSBpcyBtb3JlIHBlbmFsdHkgZm9yIHN0b3JlcworICAgICAgICAvLyB0aGFuIGxvYWRzIHRoYXQgY3Jvc3MgYSBjYWNoZWxpbmUgYm91bmRhcnkuCisgICAgICAgIC8vIFRoaXMgY2hlY2sgYW5kIHJlYWxpZ25tZW50IGFyZSBvbmx5IGRvbmUgaWYgdGhlcmUgaXMgPj0gODMyCisgICAgICAgIC8vIGJ5dGVzIHRvIGNvcHkuCisKKyAgICAgICAgLy8gRHN0IGlzIHdvcmQgYWxpZ25lZCwgYnV0IGNoZWNrIGlmIGl0IGlzIGFscmVhZHkgZG91YmxlIHdvcmQgYWxpZ25lZC4KKyAgICAgICAgYW5kcyAgICByMywgcjAsICM0CisgICAgICAgIGJlcSAgICAgMWYKKyAgICAgICAgbGRyICAgICByMywgW3IxXSwgIzQKKyAgICAgICAgc3RyICAgICByMywgW3IwXSwgIzQKKyAgICAgICAgc3ViICAgICByMiwgIzQKKworMTogICAgICAvLyBDYW4gb25seSBnZXQgaGVyZSBpZiA+IDY0IGJ5dGVzIHRvIGNvcHksIHNvIGRvbid0IGRvIGNoZWNrIHIyLgorICAgICAgICBzdWIgICAgIHIyLCAjNjQKKworMjogICAgICAvLyBFdmVyeSBsb29wIGl0ZXJhdGlvbiBjb3BpZXMgNjQgYnl0ZXMuCisgICAgICAgIC5pcnAgICAgb2Zmc2V0LCAjMCwgIzgsICMxNiwgIzI0LCAjMzIKKyAgICAgICAgbGRyZCAgICByNCwgcjUsIFtyMSwgXG9mZnNldF0KKyAgICAgICAgc3RyZCAgICByNCwgcjUsIFtyMCwgXG9mZnNldF0KKyAgICAgICAgLmVuZHIKKworICAgICAgICBsZHJkICAgIHI0LCByNSwgW3IxLCAjNDBdCisgICAgICAgIGxkcmQgICAgcjYsIHI3LCBbcjEsICM0OF0KKyAgICAgICAgbGRyZCAgICByOCwgcjksIFtyMSwgIzU2XQorCisgICAgICAgIC8vIEtlZXAgdGhlIHBsZCBhcyBmYXIgZnJvbSB0aGUgbmV4dCBsb2FkIGFzIHBvc3NpYmxlLgorICAgICAgICAvLyBUaGUgYW1vdW50IHRvIHByZWZldGNoIHdhcyBkZXRlcm1pbmVkIGV4cGVyaW1lbnRhbGx5IHVzaW5nCisgICAgICAgIC8vIGxhcmdlIHNpemVzLCBhbmQgdmVyaWZ5aW5nIHRoZSBwcmVmZXRjaCBzaXplIGRvZXMgbm90IGFmZmVjdAorICAgICAgICAvLyB0aGUgc21hbGxlciBjb3BpZXMgdG9vIG11Y2guCisgICAgICAgIC8vIFdBUk5JTkc6IElmIHRoZSBsZHJkIGFuZCBzdHJkIGluc3RydWN0aW9ucyBnZXQgdG9vIGZhciBhd2F5CisgICAgICAgIC8vICAgICAgICAgIGZyb20gZWFjaCBvdGhlciwgcGVyZm9ybWFuY2Ugc3VmZmVycy4gVGhyZWUgbG9hZHMKKyAgICAgICAgLy8gICAgICAgICAgaW4gYSByb3cgaXMgdGhlIGJlc3QgdHJhZGVvZmYuCisgICAgICAgIHBsZCAgICAgW3IxLCAjKENBQ0hFX0xJTkVfU0laRSoxNildCisgICAgICAgIHN0cmQgICAgcjQsIHI1LCBbcjAsICM0MF0KKyAgICAgICAgc3RyZCAgICByNiwgcjcsIFtyMCwgIzQ4XQorICAgICAgICBzdHJkICAgIHI4LCByOSwgW3IwLCAjNTZdCisKKyAgICAgICAgYWRkICAgICByMCwgcjAsICM2NAorICAgICAgICBhZGQgICAgIHIxLCByMSwgIzY0CisgICAgICAgIHN1YnMgICAgcjIsIHIyLCAjNjQKKyAgICAgICAgYmdlICAgICAyYgorCisgICAgICAgIC8vIEZpeC11cCB0aGUgcmVtYWluaW5nIGNvdW50IGFuZCBtYWtlIHN1cmUgd2UgaGF2ZSA+PSAzMiBieXRlcyBsZWZ0LgorICAgICAgICBhZGRzICAgIHIyLCByMiwgIzMyCisgICAgICAgIGJsbyAgICAgNGYKKworICAgICAgICAvLyBDb3B5IDMyIGJ5dGVzLiBUaGVzZSBjYWNoZSBsaW5lcyB3ZXJlIGFscmVhZHkgcHJlbG9hZGVkLgorICAgICAgICAuaXJwICAgIG9mZnNldCwgIzAsICM4LCAjMTYsICMyNAorICAgICAgICBsZHJkICAgIHI0LCByNSwgW3IxLCBcb2Zmc2V0XQorICAgICAgICBzdHJkICAgIHI0LCByNSwgW3IwLCBcb2Zmc2V0XQorICAgICAgICAuZW5kcgorICAgICAgICBhZGQgICAgIHIxLCByMSwgIzMyCisgICAgICAgIGFkZCAgICAgcjAsIHIwLCAjMzIKKyAgICAgICAgc3ViICAgICByMiwgcjIsICMzMgorNDogICAgICAvLyBMZXNzIHRoYW4gMzIgbGVmdC4KKyAgICAgICAgYWRkICAgICByMiwgcjIsICMzMgorICAgICAgICB0c3QgICAgIHIyLCAjMHgxMAorICAgICAgICBiZXEgICAgIDVmCisgICAgICAgIC8vIENvcHkgMTYgYnl0ZXMuCisgICAgICAgIC5pcnAgICAgb2Zmc2V0LCAjMCwgIzgKKyAgICAgICAgbGRyZCAgICByNCwgcjUsIFtyMSwgXG9mZnNldF0KKyAgICAgICAgc3RyZCAgICByNCwgcjUsIFtyMCwgXG9mZnNldF0KKyAgICAgICAgLmVuZHIKKyAgICAgICAgYWRkICAgICByMSwgcjEsICMxNgorICAgICAgICBhZGQgICAgIHIwLCByMCwgIzE2CisKKzU6ICAgICAgLy8gQ29weSB1cCB0byAxNSBieXRlcyAoY291bnQgaW4gcjIpLgorICAgICAgICBtb3ZzICAgIGlwLCByMiwgbHNsICMyOQorICAgICAgICBiY2MgICAgIDFmCisgICAgICAgIC8vIENvcHkgOCBieXRlcy4KKyAgICAgICAgbGRyZCAgICByNCwgcjUsIFtyMV0sICM4CisgICAgICAgIHN0cmQgICAgcjQsIHI1LCBbcjBdLCAjOAorMTogICAgICBiZ2UgICAgICAgICAyZgorICAgICAgICAvLyBDb3B5IDQgYnl0ZXMuCisgICAgICAgIGxkciAgICAgcjQsIFtyMV0sICM0CisgICAgICAgIHN0ciAgICAgcjQsIFtyMF0sICM0CisyOiAgICAgIC8vIENvcHkgMCB0byA0IGJ5dGVzLgorICAgICAgICBsc2xzICAgIHIyLCByMiwgIzMxCisgICAgICAgIGl0dCAgICAgbmUKKyAgICAgICAgbGRyYm5lICBsciwgW3IxXSwgIzEKKyAgICAgICAgc3RyYm5lICBsciwgW3IwXSwgIzEKKyAgICAgICAgaXR0dHQgICBjcworICAgICAgICBsZHJiY3MgIGlwLCBbcjFdLCAjMQorICAgICAgICBsZHJiY3MgIGxyLCBbcjFdCisgICAgICAgIHN0cmJjcyAgaXAsIFtyMF0sICMxCisgICAgICAgIHN0cmJjcyAgbHIsIFtyMF0KKworICAgICAgICAvLyBSZXN0b3JlIHJlZ2lzdGVyczogb3B0aW1pemVkIHBvcCB7cjAsIHBjfQorICAgICAgICBsZHJkICAgIHI4LCByOSwgW3NwXSwgIzgKKyAgICAgICAgbGRyZCAgICByNiwgcjcsIFtzcF0sICM4CisgICAgICAgIGxkcmQgICAgcjQsIHI1LCBbc3BdLCAjOAorICAgICAgICBwb3AgICAgIHtyMCwgcGN9CisKK2RzdF9ub3Rfd29yZF9hbGlnbmVkOgorICAgICAgICAvLyBBbGlnbiBkc3QgdG8gd29yZC4KKyAgICAgICAgcnNiICAgICBpcCwgaXAsICM0CisgICAgICAgIGNtcCAgICAgaXAsICMyCisKKyAgICAgICAgaXR0ICAgICBndAorICAgICAgICBsZHJiZ3QgIGxyLCBbcjFdLCAjMQorICAgICAgICBzdHJiZ3QgIGxyLCBbcjBdLCAjMQorCisgICAgICAgIGl0dCAgICAgZ2UKKyAgICAgICAgbGRyYmdlICBsciwgW3IxXSwgIzEKKyAgICAgICAgc3RyYmdlICBsciwgW3IwXSwgIzEKKworICAgICAgICBsZHJiICAgIGxyLCBbcjFdLCAjMQorICAgICAgICBzdHJiICAgIGxyLCBbcjBdLCAjMQorCisgICAgICAgIHN1YiAgICAgcjIsIHIyLCBpcAorCisgICAgICAgIC8vIFNyYyBpcyBndWFyYW50ZWVkIHRvIGJlIGF0IGxlYXN0IHdvcmQgYWxpZ25lZCBieSB0aGlzIHBvaW50LgorICAgICAgICBiICAgICAgIHdvcmRfYWxpZ25lZAorRU5EKG1lbWNweSkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vY29ydGV4LWExNS9iaW9uaWMvbWVtc2V0LlMgYi9saWJjL2FyY2gtYXJtL2NvcnRleC1hMTUvYmlvbmljL21lbXNldC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlMWFkNTQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL2NvcnRleC1hMTUvYmlvbmljL21lbXNldC5TCkBAIC0wLDAgKzEsMTY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxtYWNoaW5lL2NwdS1mZWF0dXJlcy5oPgorI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+CisKKwkJLyoKKwkJICogT3B0aW1pemVkIG1lbXNldCgpIGZvciBBUk0uCisgICAgICAgICAqCisgICAgICAgICAqIG1lbXNldCgpIHJldHVybnMgaXRzIGZpcnN0IGFyZ3VtZW50LgorCQkgKi8KKworICAgICAgICAuZnB1ICAgICAgICBuZW9uCisgICAgICAgIC5zeW50YXggICAgIHVuaWZpZWQKKworRU5UUlkoYnplcm8pCisgICAgICAgIG1vdiAgICAgICAgIHIyLCByMQorICAgICAgICBtb3YgICAgICAgICByMSwgIzAKKyAgICAgICAgLy8gRmFsbCB0aHJvdWdoIHRvIG1lbXNldC4uLgorRU5EKGJ6ZXJvKQorCitFTlRSWShtZW1zZXQpCisgICAgICAgIC5zYXZlICAgICAgIHtyMH0KKyAgICAgICAgc3RtZmQgICAgICAgc3AhLCB7cjB9CisKKyAgICAgICAgLy8gVGhlIG5ldyBhbGdvcml0aG0gaXMgc2xvd2VyIGZvciBjb3BpZXMgPCAxNiBzbyB1c2UgdGhlIG9sZAorICAgICAgICAvLyBuZW9uIGNvZGUgaW4gdGhhdCBjYXNlLgorICAgICAgICBjbXAgICAgICAgICByMiwgIzE2CisgICAgICAgIGJsbyAgICAgICAgIHNldF9sZXNzX3RoYW5fMTZfdW5rbm93bl9hbGlnbgorCisgICAgICAgIC8vIFVzZSBzdHJkIHdoaWNoIHJlcXVpcmVzIGFuIGV2ZW4gYW5kIG9kZCByZWdpc3RlciBzbyBtb3ZlIHRoZQorICAgICAgICAvLyB2YWx1ZXMgc28gdGhhdDoKKyAgICAgICAgLy8gICByMCBhbmQgcjEgY29udGFpbiB0aGUgbWVtc2V0IHZhbHVlCisgICAgICAgIC8vICAgcjIgaXMgdGhlIG51bWJlciBvZiBieXRlcyB0byBzZXQKKyAgICAgICAgLy8gICByMyBpcyB0aGUgZGVzdGluYXRpb24gcG9pbnRlcgorICAgICAgICBtb3YgICAgICAgICByMywgcjAKKworICAgICAgICAvLyBDb3B5IHRoZSBieXRlIHZhbHVlIGluIGV2ZXJ5IGJ5dGUgb2YgcjEuCisgICAgICAgIG1vdiAgICAgICAgIHIxLCByMSwgbHNsICMyNAorICAgICAgICBvcnIgICAgICAgICByMSwgcjEsIHIxLCBsc3IgIzgKKyAgICAgICAgb3JyICAgICAgICAgcjEsIHIxLCByMSwgbHNyICMxNgorCitjaGVja19hbGlnbm1lbnQ6CisgICAgICAgIC8vIEFsaWduIGRlc3RpbmF0aW9uIHRvIGEgZG91YmxlIHdvcmQgdG8gYXZvaWQgdGhlIHN0cmQgY3Jvc3NpbmcKKyAgICAgICAgLy8gYSBjYWNoZSBsaW5lIGJvdW5kYXJ5LgorICAgICAgICBhbmRzICAgICAgICBpcCwgcjMsICM3CisgICAgICAgIGJuZSAgICAgICAgIGRvX2RvdWJsZV93b3JkX2FsaWduCisKK2RvdWJsZV93b3JkX2FsaWduZWQ6CisgICAgICAgIG1vdiAgICAgICAgIHIwLCByMQorCisgICAgICAgIHN1YnMgICAgICAgIHIyLCAjNjQKKyAgICAgICAgYmxvICAgICAgICAgc2V0X2xlc3NfdGhhbl82NAorCisxOiAgICAgIC8vIE1haW4gbG9vcCBzZXRzIDY0IGJ5dGVzIGF0IGEgdGltZS4KKyAgICAgICAgLmlycCAgICAgICAgb2Zmc2V0LCAjMCwgIzgsICMxNiwgIzI0LCAjMzIsICM0MCwgIzQ4LCAjNTYKKyAgICAgICAgc3RyZCAgICAgICAgcjAsIHIxLCBbcjMsIFxvZmZzZXRdCisgICAgICAgIC5lbmRyCisKKyAgICAgICAgYWRkICAgICAgICAgcjMsICM2NAorICAgICAgICBzdWJzICAgICAgICByMiwgIzY0CisgICAgICAgIGJnZSAgICAgICAgIDFiCisKK3NldF9sZXNzX3RoYW5fNjQ6CisgICAgICAgIC8vIFJlc3RvcmUgcjIgdG8gdGhlIGNvdW50IG9mIGJ5dGVzIGxlZnQgdG8gc2V0LgorICAgICAgICBhZGQgICAgICAgICByMiwgIzY0CisgICAgICAgIGxzbHMgICAgICAgIGlwLCByMiwgIzI3CisgICAgICAgIGJjYyAgICAgICAgIHNldF9sZXNzX3RoYW5fMzIKKyAgICAgICAgLy8gU2V0IDMyIGJ5dGVzLgorICAgICAgICAuaXJwICAgICAgICBvZmZzZXQsICMwLCAjOCwgIzE2LCAjMjQKKyAgICAgICAgc3RyZCAgICAgICAgcjAsIHIxLCBbcjMsIFxvZmZzZXRdCisgICAgICAgIC5lbmRyCisgICAgICAgIGFkZCAgICAgICAgIHIzLCAjMzIKKworc2V0X2xlc3NfdGhhbl8zMjoKKyAgICAgICAgYnBsICAgICAgICAgc2V0X2xlc3NfdGhhbl8xNgorICAgICAgICAvLyBTZXQgMTYgYnl0ZXMuCisgICAgICAgIC5pcnAgICAgICAgIG9mZnNldCwgIzAsICM4CisgICAgICAgIHN0cmQgICAgICAgIHIwLCByMSwgW3IzLCBcb2Zmc2V0XQorICAgICAgICAuZW5kcgorICAgICAgICBhZGQgICAgICAgICByMywgIzE2CisKK3NldF9sZXNzX3RoYW5fMTY6CisgICAgICAgIC8vIExlc3MgdGhhbiAxNiBieXRlcyB0byBzZXQuCisgICAgICAgIGxzbHMgICAgICAgIGlwLCByMiwgIzI5CisgICAgICAgIGJjYyAgICAgICAgIHNldF9sZXNzX3RoYW5fOAorCisgICAgICAgIC8vIFNldCA4IGJ5dGVzLgorICAgICAgICBzdHJkICAgICAgICByMCwgcjEsIFtyM10sICM4CisKK3NldF9sZXNzX3RoYW5fODoKKyAgICAgICAgYnBsICAgICAgICAgc2V0X2xlc3NfdGhhbl80CisgICAgICAgIC8vIFNldCA0IGJ5dGVzCisgICAgICAgIHN0ciAgICAgICAgIHIxLCBbcjNdLCAjNAorCitzZXRfbGVzc190aGFuXzQ6CisgICAgICAgIGxzbHMgICAgICAgIGlwLCByMiwgIzMxCisgICAgICAgIGl0ICAgICAgICAgIG5lCisgICAgICAgIHN0cmJuZSAgICAgIHIxLCBbcjNdLCAjMQorICAgICAgICBpdHQgICAgICAgICBjcworICAgICAgICBzdHJiY3MgICAgICByMSwgW3IzXSwgIzEKKyAgICAgICAgc3RyYmNzICAgICAgcjEsIFtyM10KKworICAgICAgICBsZG1mZCAgICAgICBzcCEsIHtyMH0KKyAgICAgICAgYnggICAgICAgICAgbHIKKworZG9fZG91YmxlX3dvcmRfYWxpZ246CisgICAgICAgIHJzYiAgICAgICAgIGlwLCBpcCwgIzgKKyAgICAgICAgc3ViICAgICAgICAgcjIsIHIyLCBpcAorICAgICAgICBtb3ZzICAgICAgICByMCwgaXAsIGxzbCAjMzEKKyAgICAgICAgaXQgICAgICAgICAgbWkKKyAgICAgICAgc3RyYm1pICAgICAgcjEsIFtyM10sICMxCisgICAgICAgIGl0dCAgICAgICAgIGNzCisgICAgICAgIHN0cmJjcyAgICAgIHIxLCBbcjNdLCAjMQorICAgICAgICBzdHJiY3MgICAgICByMSwgW3IzXSwgIzEKKworICAgICAgICAvLyBEc3QgaXMgYXQgbGVhc3Qgd29yZCBhbGlnbmVkIGJ5IHRoaXMgcG9pbnQuCisgICAgICAgIGNtcCAgICAgICAgIGlwLCAjNAorICAgICAgICBibG8gICAgICAgICBkb3VibGVfd29yZF9hbGlnbmVkCisgICAgICAgIHN0ciAgICAgICAgIHIxLCBbcjNdLCAjNAorICAgICAgICBiICAgICAgICAgICBkb3VibGVfd29yZF9hbGlnbmVkCisKK3NldF9sZXNzX3RoYW5fMTZfdW5rbm93bl9hbGlnbjoKKyAgICAgICAgLy8gU2V0IHVwIHRvIDE1IGJ5dGVzLgorICAgICAgICB2ZHVwLjggICAgICBkMCwgcjEKKyAgICAgICAgbW92cyAgICAgICAgaXAsIHIyLCBsc2wgIzI5CisgICAgICAgIGJjYyAgICAgICAgIDFmCisgICAgICAgIHZzdDEuOCAgICAgIHtkMH0sIFtyMF0hCisxOiAgICAgIGJnZSAgICAgICAgIDJmCisgICAgICAgIHZzdDEuMzIgICAgIHtkMFswXX0sIFtyMF0hCisyOiAgICAgIG1vdnMgICAgICAgIGlwLCByMiwgbHNsICMzMQorICAgICAgICBpdCAgICAgICAgICBtaQorICAgICAgICBzdHJibWkgICAgICByMSwgW3IwXSwgIzEKKyAgICAgICAgaXR0ICAgICAgICAgY3MKKyAgICAgICAgc3RyYmNzICAgICAgcjEsIFtyMF0sICMxCisgICAgICAgIHN0cmJjcyAgICAgIHIxLCBbcjBdLCAjMQorICAgICAgICBsZG1mZCAgICAgICBzcCEsIHtyMH0KKyAgICAgICAgYnggICAgICAgICAgbHIKK0VORChtZW1zZXQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL2NvcnRleC1hMTUvYmlvbmljL3N0cmNtcC5TIGIvbGliYy9hcmNoLWFybS9jb3J0ZXgtYTE1L2Jpb25pYy9zdHJjbXAuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YWZmN2M0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9jb3J0ZXgtYTE1L2Jpb25pYy9zdHJjbXAuUwpAQCAtMCwwICsxLDM3NyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMyBBUk0gTHRkCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gVGhlIG5hbWUgb2YgdGhlIGNvbXBhbnkgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZQorICogICAgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuCisgKiAgICBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVJNIExURCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQKKyAqIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgorICogSU4gTk8gRVZFTlQgU0hBTEwgQVJNIExURCBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVECisgKiBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORworICogTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8bWFjaGluZS9jcHUtZmVhdHVyZXMuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgorCisjaWZkZWYgX19BUk1FQl9fCisjZGVmaW5lIFMyTE9NRU0gbHNsCisjZGVmaW5lIFMyTE9NRU1FUSBsc2xlcQorI2RlZmluZSBTMkhJTUVNIGxzcgorI2RlZmluZSBNU0IgMHgwMDAwMDBmZgorI2RlZmluZSBMU0IgMHhmZjAwMDAwMAorI2RlZmluZSBCWVRFMF9PRkZTRVQgMjQKKyNkZWZpbmUgQllURTFfT0ZGU0VUIDE2CisjZGVmaW5lIEJZVEUyX09GRlNFVCA4CisjZGVmaW5lIEJZVEUzX09GRlNFVCAwCisjZWxzZSAvKiBub3QgIF9fQVJNRUJfXyAqLworI2RlZmluZSBTMkxPTUVNIGxzcgorI2RlZmluZSBTMkxPTUVNRVEgbHNyZXEKKyNkZWZpbmUgUzJISU1FTSBsc2wKKyNkZWZpbmUgQllURTBfT0ZGU0VUIDAKKyNkZWZpbmUgQllURTFfT0ZGU0VUIDgKKyNkZWZpbmUgQllURTJfT0ZGU0VUIDE2CisjZGVmaW5lIEJZVEUzX09GRlNFVCAyNAorI2RlZmluZSBNU0IgMHhmZjAwMDAwMAorI2RlZmluZSBMU0IgMHgwMDAwMDBmZgorI2VuZGlmIC8qIG5vdCAgX19BUk1FQl9fICovCisKKy5zeW50YXggICAgICAgICB1bmlmaWVkCisKKyNpZiBkZWZpbmVkIChfX3RodW1iX18pCisgICAgICAgIC50aHVtYgorICAgICAgICAudGh1bWJfZnVuYworI2VuZGlmCisKK0VOVFJZKHN0cmNtcCkKKyAgICAgIC8qIFVzZSBMRFJEIHdoZW5ldmVyIHBvc3NpYmxlLiAgKi8KKworLyogVGhlIG1haW4gdGhpbmcgdG8gbG9vayBvdXQgZm9yIHdoZW4gY29tcGFyaW5nIGxhcmdlIGJsb2NrcyBpcyB0aGF0CisgICB0aGUgbG9hZHMgZG8gbm90IGNyb3NzIGEgcGFnZSBib3VuZGFyeSB3aGVuIGxvYWRpbmcgcGFzdCB0aGUgaW5kZXgKKyAgIG9mIHRoZSBieXRlIHdpdGggdGhlIGZpcnN0IGRpZmZlcmVuY2Ugb3IgdGhlIGZpcnN0IHN0cmluZy10ZXJtaW5hdG9yLgorCisgICBGb3IgZXhhbXBsZSwgaWYgdGhlIHN0cmluZ3MgYXJlIGlkZW50aWNhbCBhbmQgdGhlIHN0cmluZy10ZXJtaW5hdG9yCisgICBpcyBhdCBpbmRleCBrLCBieXRlIGJ5IGJ5dGUgY29tcGFyaXNvbiB3aWxsIG5vdCBsb2FkIGJleW9uZCBhZGRyZXNzCisgICBzMStrIGFuZCBzMitrOyB3b3JkIGJ5IHdvcmQgY29tcGFyaXNvbiBtYXkgbG9hZCB1cCB0byAzIGJ5dGVzIGJleW9uZAorICAgazsgZG91YmxlIHdvcmQgLSB1cCB0byA3IGJ5dGVzLiAgSWYgdGhlIGxvYWQgb2YgdGhlc2UgYnl0ZXMgY3Jvc3NlcworICAgYSBwYWdlIGJvdW5kYXJ5LCBpdCBtaWdodCBjYXVzZSBhIG1lbW9yeSBmYXVsdCAoaWYgdGhlIHBhZ2UgaXMgbm90IG1hcHBlZCkKKyAgIHRoYXQgd291bGQgbm90IGhhdmUgaGFwcGVuZWQgaW4gYnl0ZSBieSBieXRlIGNvbXBhcmlzb24uCisKKyAgIElmIGFuIGFkZHJlc3MgaXMgKGRvdWJsZSkgd29yZCBhbGlnbmVkLCB0aGVuIGEgbG9hZCBvZiBhIChkb3VibGUpIHdvcmQKKyAgIGZyb20gdGhhdCBhZGRyZXNzIHdpbGwgbm90IGNyb3NzIGEgcGFnZSBib3VuZGFyeS4KKyAgIFRoZXJlZm9yZSwgdGhlIGFsZ29yaXRobSBiZWxvdyBjb25zaWRlcnMgd29yZCBhbmQgZG91YmxlLXdvcmQgYWxpZ25tZW50CisgICBvZiBzdHJpbmdzIHNlcGFyYXRlbHkuICAqLworCisvKiBIaWdoLWxldmVsIGRlc2NyaXB0aW9uIG9mIHRoZSBhbGdvcml0aG0uCisKKyAgICogVGhlIGZhc3QgcGF0aDogaWYgYm90aCBzdHJpbmdzIGFyZSBkb3VibGUtd29yZCBhbGlnbmVkLAorICAgICB1c2UgTERSRCB0byBsb2FkIHR3byB3b3JkcyBmcm9tIGVhY2ggc3RyaW5nIGluIGV2ZXJ5IGxvb3AgaXRlcmF0aW9uLgorICAgKiBJZiB0aGUgc3RyaW5ncyBoYXZlIHRoZSBzYW1lIG9mZnNldCBmcm9tIGEgd29yZCBib3VuZGFyeSwKKyAgICAgdXNlIExEUkIgdG8gbG9hZCBhbmQgY29tcGFyZSBieXRlIGJ5IGJ5dGUgdW50aWwKKyAgICAgdGhlIGZpcnN0IHN0cmluZyBpcyBhbGlnbmVkIHRvIGEgd29yZCBib3VuZGFyeSAoYXQgbW9zdCAzIGJ5dGVzKS4KKyAgICAgVGhpcyBpcyBvcHRpbWl6ZWQgZm9yIHF1aWNrIHJldHVybiBvbiBzaG9ydCB1bmFsaWduZWQgc3RyaW5ncy4KKyAgICogSWYgdGhlIHN0cmluZ3MgaGF2ZSB0aGUgc2FtZSBvZmZzZXQgZnJvbSBhIGRvdWJsZS13b3JkIGJvdW5kYXJ5LAorICAgICB1c2UgTERSRCB0byBsb2FkIHR3byB3b3JkcyBmcm9tIGVhY2ggc3RyaW5nIGluIGV2ZXJ5IGxvb3AgaXRlcmF0aW9uLCBhcyBpbiB0aGUgZmFzdCBwYXRoLgorICAgKiBJZiB0aGUgc3RyaW5ncyBkbyBub3QgaGF2ZSB0aGUgc2FtZSBvZmZzZXQgZnJvbSBhIGRvdWJsZS13b3JkIGJvdW5kYXJ5LAorICAgICBsb2FkIGEgd29yZCBmcm9tIHRoZSBzZWNvbmQgc3RyaW5nIGJlZm9yZSB0aGUgbG9vcCB0byBpbml0aWFsaXplIHRoZSBxdWV1ZS4KKyAgICAgVXNlIExEUkQgdG8gbG9hZCB0d28gd29yZHMgZnJvbSBldmVyeSBzdHJpbmcgaW4gZXZlcnkgbG9vcCBpdGVyYXRpb24uCisgICAgIEluc2lkZSB0aGUgbG9vcCwgbG9hZCB0aGUgc2Vjb25kIHdvcmQgZnJvbSB0aGUgc2Vjb25kIHN0cmluZyBvbmx5IGFmdGVyIGNvbXBhcmluZworICAgICB0aGUgZmlyc3Qgd29yZCwgdXNpbmcgdGhlIHF1ZXVlZCB2YWx1ZSwgdG8gZ3VhcmFudGVlIHNhZmV0eSBhY3Jvc3MgcGFnZSBib3VuZGFyaWVzLgorICAgKiBJZiB0aGUgc3RyaW5ncyBkbyBub3QgaGF2ZSB0aGUgc2FtZSBvZmZzZXQgZnJvbSBhIHdvcmQgYm91bmRhcnksCisgICAgIHVzZSBMRFIgYW5kIGEgc2hpZnQgcXVldWUuIE9yZGVyIG9mIGxvYWRzIGFuZCBjb21wYXJpc29ucyBtYXR0ZXJzLAorICAgICBzaW1pbGFybHkgdG8gdGhlIHByZXZpb3VzIGNhc2UuCisKKyAgICogVXNlIFVBREQ4IGFuZCBTRUwgdG8gY29tcGFyZSB3b3JkcywgYW5kIHVzZSBSRVYgYW5kIENMWiB0byBjb21wdXRlIHRoZSByZXR1cm4gdmFsdWUuCisgICAqIFRoZSBvbmx5IGRpZmZlcmVuY2UgYmV0d2VlbiBBUk0gYW5kIFRodW1iIG1vZGVzIGlzIHRoZSB1c2Ugb2YgQ0JaIGluc3RydWN0aW9uLgorICAgKiBUaGUgb25seSBkaWZmZXJlbmNlIGJldHdlZW4gYmlnIGFuZCBsaXR0bGUgZW5kaWFuIGlzIHRoZSB1c2Ugb2YgUkVWIGluIGxpdHRsZSBlbmRpYW4KKyAgICAgdG8gY29tcHV0ZSB0aGUgcmV0dXJuIHZhbHVlLCBpbnN0ZWFkIG9mIE1PVi4KKyovCisKKyAgICAgICAgLm1hY3JvIG1fY2J6IHJlZyBsYWJlbAorI2lmZGVmIF9fdGh1bWIyX18KKyAgICAgICAgY2J6ICAgICBccmVnLCBcbGFiZWwKKyNlbHNlICAgLyogbm90IGRlZmluZWQgX190aHVtYjJfXyAqLworICAgICAgICBjbXAgICAgIFxyZWcsICMwCisgICAgICAgIGJlcSAgICAgXGxhYmVsCisjZW5kaWYgLyogbm90IGRlZmluZWQgX190aHVtYjJfXyAqLworICAgICAgICAuZW5kbSAvKiBtX2NieiAqLworCisgICAgICAgIC5tYWNybyBtX2NibnogcmVnIGxhYmVsCisjaWZkZWYgX190aHVtYjJfXworICAgICAgICBjYm56ICAgIFxyZWcsIFxsYWJlbAorI2Vsc2UgICAvKiBub3QgZGVmaW5lZCBfX3RodW1iMl9fICovCisgICAgICAgIGNtcCAgICAgXHJlZywgIzAKKyAgICAgICAgYm5lICAgICBcbGFiZWwKKyNlbmRpZiAvKiBub3QgZGVmaW5lZCBfX3RodW1iMl9fICovCisgICAgICAgIC5lbmRtIC8qIG1fY2JueiAqLworCisgICAgICAgIC5tYWNybyAgaW5pdAorICAgICAgICAvKiBNYWNybyB0byBzYXZlIHRlbXBvcmFyeSByZWdpc3RlcnMgYW5kIHByZXBhcmUgbWFnaWMgdmFsdWVzLiAgKi8KKyAgICAgICAgc3VicyAgICBzcCwgc3AsICMxNgorICAgICAgICBzdHJkICAgIHI0LCByNSwgW3NwLCAjOF0KKyAgICAgICAgc3RyZCAgICByNiwgcjcsIFtzcF0KKyAgICAgICAgbXZuICAgICByNiwgIzAgIC8qIGFsbCBGICovCisgICAgICAgIG1vdiAgICAgcjcsICMwICAvKiBhbGwgMCAqLworICAgICAgICAuZW5kbSAgIC8qIGluaXQgKi8KKworICAgICAgICAubWFjcm8gIG1hZ2ljX2NvbXBhcmVfYW5kX2JyYW5jaCB3MSB3MiBsYWJlbAorICAgICAgICAvKiBNYWNybyB0byBjb21wYXJlIHJlZ2lzdGVycyB3MSBhbmQgdzIgYW5kIGNvbmRpdGlvbmFsbHkgYnJhbmNoIHRvIGxhYmVsLiAgKi8KKyAgICAgICAgY21wICAgICBcdzEsIFx3MiAgICAgICAgLyogQXJlIHcxIGFuZCB3MiB0aGUgc2FtZT8gICovCisgICAgICAgIG1hZ2ljX2ZpbmRfemVyb19ieXRlcyBcdzEKKyAgICAgICAgaXQgICAgICBlcQorICAgICAgICBjbXBlcSAgIGlwLCAjMCAgICAgICAgICAvKiBJcyB0aGVyZSBhIHplcm8gYnl0ZSBpbiB3MT8gICovCisgICAgICAgIGJuZSAgICAgXGxhYmVsCisgICAgICAgIC5lbmRtIC8qIG1hZ2ljX2NvbXBhcmVfYW5kX2JyYW5jaCAqLworCisgICAgICAgIC5tYWNybyAgbWFnaWNfZmluZF96ZXJvX2J5dGVzIHcxCisgICAgICAgIC8qIE1hY3JvIHRvIGZpbmQgYWxsLXplcm8gYnl0ZXMgaW4gdzEsIHJlc3VsdCBpcyBpbiBpcC4gICovCisjaWYgKGRlZmluZWQgKF9fQVJNX0ZFQVRVUkVfRFNQKSkKKyAgICAgICAgdWFkZDggICBpcCwgXHcxLCByNgorICAgICAgICBzZWwgICAgIGlwLCByNywgcjYKKyNlbHNlIC8qIG5vdCBkZWZpbmVkIChfX0FSTV9GRUFUVVJFX0RTUCkgKi8KKyAgICAgICAgLyogX19BUk1fRkVBVFVSRV9EU1AgaXMgbm90IGRlZmluZWQgZm9yIHNvbWUgQ29ydGV4LU0gcHJvY2Vzc29ycy4KKyAgICAgICAgQ29pbmNpZGVudGx5LCB0aGVzZSBwcm9jZXNzb3JzIG9ubHkgaGF2ZSBUaHVtYi0yIG1vZGUsIHdoZXJlIHdlIGNhbiB1c2UgdGhlCisgICAgICAgIHRoZSAobGFyZ2UpIG1hZ2ljIGNvbnN0YW50IGF2YWlsYWJsZSBkaXJlY3RseSBhcyBhbiBpbW1lZGlhdGUgaW4gaW5zdHJ1Y3Rpb25zLgorICAgICAgICBOb3RlIHRoYXQgd2UgY2Fubm90IHVzZSB0aGUgbWFnaWMgY29uc3RhbnQgaW4gQVJNIG1vZGUsIHdoZXJlIHdlIG5lZWQKKyAgICAgICAgdG8gY3JlYXRlIHRoZSBjb25zdGFudCBpbiBhIHJlZ2lzdGVyLiAgKi8KKyAgICAgICAgc3ViICAgICBpcCwgXHcxLCAjMHgwMTAxMDEwMQorICAgICAgICBiaWMgICAgIGlwLCBpcCwgXHcxCisgICAgICAgIGFuZCAgICAgaXAsIGlwLCAjMHg4MDgwODA4MAorI2VuZGlmIC8qIG5vdCBkZWZpbmVkIChfX0FSTV9GRUFUVVJFX0RTUCkgKi8KKyAgICAgICAgLmVuZG0gLyogbWFnaWNfZmluZF96ZXJvX2J5dGVzICovCisKKyAgICAgICAgLm1hY3JvICBzZXR1cF9yZXR1cm4gdzEgdzIKKyNpZmRlZiBfX0FSTUVCX18KKyAgICAgICAgbW92ICAgICByMSwgXHcxCisgICAgICAgIG1vdiAgICAgcjIsIFx3MgorI2Vsc2UgLyogbm90ICBfX0FSTUVCX18gKi8KKyAgICAgICAgcmV2ICAgICByMSwgXHcxCisgICAgICAgIHJldiAgICAgcjIsIFx3MgorI2VuZGlmIC8qIG5vdCAgX19BUk1FQl9fICovCisgICAgICAgIC5lbmRtIC8qIHNldHVwX3JldHVybiAqLworCisgICAgICAgIHBsZCBbcjAsICMwXQorICAgICAgICBwbGQgW3IxLCAjMF0KKworICAgICAgICAvKiBBcmUgYm90aCBzdHJpbmdzIGRvdWJsZS13b3JkIGFsaWduZWQ/ICAqLworICAgICAgICBvcnIgICAgIGlwLCByMCwgcjEKKyAgICAgICAgdHN0ICAgICBpcCwgIzcKKyAgICAgICAgYm5lICAgICBkb19hbGlnbgorCisgICAgICAgIC8qIEZhc3QgcGF0aC4gICovCisgICAgICAgIGluaXQKKworZG91Ymxld29yZF9hbGlnbmVkOgorCisgICAgICAgIC8qIEdldCBoZXJlIHdoZW4gdGhlIHN0cmluZ3MgdG8gY29tcGFyZSBhcmUgZG91YmxlLXdvcmQgYWxpZ25lZC4gICovCisgICAgICAgIC8qIENvbXBhcmUgdHdvIHdvcmRzIGluIGV2ZXJ5IGl0ZXJhdGlvbi4gICovCisgICAgICAgIC5wMmFsaWduICAgICAgICAyCisyOgorICAgICAgICBwbGQgW3IwLCAjMTZdCisgICAgICAgIHBsZCBbcjEsICMxNl0KKworICAgICAgICAvKiBMb2FkIHRoZSBuZXh0IGRvdWJsZS13b3JkIGZyb20gZWFjaCBzdHJpbmcuICAqLworICAgICAgICBsZHJkICAgIHIyLCByMywgW3IwXSwgIzgKKyAgICAgICAgbGRyZCAgICByNCwgcjUsIFtyMV0sICM4CisKKyAgICAgICAgbWFnaWNfY29tcGFyZV9hbmRfYnJhbmNoIHcxPXIyLCB3Mj1yNCwgbGFiZWw9cmV0dXJuXzI0CisgICAgICAgIG1hZ2ljX2NvbXBhcmVfYW5kX2JyYW5jaCB3MT1yMywgdzI9cjUsIGxhYmVsPXJldHVybl8zNQorICAgICAgICBiICAgICAgIDJiCisKK2RvX2FsaWduOgorICAgICAgICAvKiBJcyB0aGUgZmlyc3Qgc3RyaW5nIHdvcmQtYWxpZ25lZD8gICovCisgICAgICAgIGFuZHMgICAgaXAsIHIwLCAjMworICAgICAgICBiZXEgICAgIHdvcmRfYWxpZ25lZF9yMAorCisgICAgICAgIC8qIEZhc3QgY29tcGFyZSBieXRlIGJ5IGJ5dGUgdW50aWwgdGhlIGZpcnN0IHN0cmluZyBpcyB3b3JkLWFsaWduZWQuICAqLworICAgICAgICAvKiBUaGUgb2Zmc2V0IG9mIHIwIGZyb20gYSB3b3JkIGJvdW5kYXJ5IGlzIGluIGlwLiBUaHVzLCB0aGUgbnVtYmVyIG9mIGJ5dGVzCisgICAgICAgIHRvIHJlYWQgdW50aWwgdGhlIG5leHQgd29yZCBib3VuZGFyeSBpcyA0LWlwLiAgKi8KKyAgICAgICAgYmljICAgICByMCwgcjAsICMzCisgICAgICAgIGxkciAgICAgcjIsIFtyMF0sICM0CisgICAgICAgIGxzbHMgICAgaXAsIGlwLCAjMzEKKyAgICAgICAgYmVxICAgICBieXRlMgorICAgICAgICBiY3MgICAgIGJ5dGUzCisKK2J5dGUxOgorICAgICAgICBsZHJiICAgIGlwLCBbcjFdLCAjMQorICAgICAgICB1eHRiICAgIHIzLCByMiwgcm9yICNCWVRFMV9PRkZTRVQKKyAgICAgICAgc3VicyAgICBpcCwgcjMsIGlwCisgICAgICAgIGJuZSAgICAgZmFzdF9yZXR1cm4KKyAgICAgICAgbV9jYnogICByZWc9cjMsIGxhYmVsPWZhc3RfcmV0dXJuCisKK2J5dGUyOgorICAgICAgICBsZHJiICAgIGlwLCBbcjFdLCAjMQorICAgICAgICB1eHRiICAgIHIzLCByMiwgcm9yICNCWVRFMl9PRkZTRVQKKyAgICAgICAgc3VicyAgICBpcCwgcjMsIGlwCisgICAgICAgIGJuZSAgICAgZmFzdF9yZXR1cm4KKyAgICAgICAgbV9jYnogICByZWc9cjMsIGxhYmVsPWZhc3RfcmV0dXJuCisKK2J5dGUzOgorICAgICAgICBsZHJiICAgIGlwLCBbcjFdLCAjMQorICAgICAgICB1eHRiICAgIHIzLCByMiwgcm9yICNCWVRFM19PRkZTRVQKKyAgICAgICAgc3VicyAgICBpcCwgcjMsIGlwCisgICAgICAgIGJuZSAgICAgZmFzdF9yZXR1cm4KKyAgICAgICAgbV9jYm56ICByZWc9cjMsIGxhYmVsPXdvcmRfYWxpZ25lZF9yMAorCitmYXN0X3JldHVybjoKKyAgICAgICAgbW92ICAgICByMCwgaXAKKyAgICAgICAgYnggICAgICBscgorCit3b3JkX2FsaWduZWRfcjA6CisgICAgICAgIGluaXQKKyAgICAgICAgLyogVGhlIGZpcnN0IHN0cmluZyBpcyB3b3JkLWFsaWduZWQuICAqLworICAgICAgICAvKiBJcyB0aGUgc2Vjb25kIHN0cmluZyB3b3JkLWFsaWduZWQ/ICAqLworICAgICAgICBhbmRzICAgIGlwLCByMSwgIzMKKyAgICAgICAgYm5lICAgICBzdHJjbXBfdW5hbGlnbmVkCisKK3dvcmRfYWxpZ25lZDoKKyAgICAgICAgLyogVGhlIHN0cmluZ3MgYXJlIHdvcmQtYWxpZ25lZC4gKi8KKyAgICAgICAgLyogSXMgdGhlIGZpcnN0IHN0cmluZyBkb3VibGUtd29yZCBhbGlnbmVkPyAgKi8KKyAgICAgICAgdHN0ICAgICByMCwgIzQKKyAgICAgICAgYmVxICAgICBkb3VibGV3b3JkX2FsaWduZWRfcjAKKworICAgICAgICAvKiBJZiByMCBpcyBub3QgZG91YmxlLXdvcmQgYWxpZ25lZCB5ZXQsIGFsaWduIGl0IGJ5IGxvYWRpbmcKKyAgICAgICAgYW5kIGNvbXBhcmluZyB0aGUgbmV4dCB3b3JkIGZyb20gZWFjaCBzdHJpbmcuICAqLworICAgICAgICBsZHIgICAgIHIyLCBbcjBdLCAjNAorICAgICAgICBsZHIgICAgIHI0LCBbcjFdLCAjNAorICAgICAgICBtYWdpY19jb21wYXJlX2FuZF9icmFuY2ggdzE9cjIgdzI9cjQgbGFiZWw9cmV0dXJuXzI0CisKK2RvdWJsZXdvcmRfYWxpZ25lZF9yMDoKKyAgICAgICAgLyogR2V0IGhlcmUgd2hlbiByMCBpcyBkb3VibGUtd29yZCBhbGlnbmVkLiAgKi8KKyAgICAgICAgLyogSXMgcjEgZG91Ymxld29yZF9hbGlnbmVkPyAgKi8KKyAgICAgICAgdHN0ICAgICByMSwgIzQKKyAgICAgICAgYmVxICAgICBkb3VibGV3b3JkX2FsaWduZWQKKworICAgICAgICAvKiBHZXQgaGVyZSB3aGVuIHRoZSBzdHJpbmdzIHRvIGNvbXBhcmUgYXJlIHdvcmQtYWxpZ25lZCwKKyAgICAgICAgcjAgaXMgZG91YmxlLXdvcmQgYWxpZ25lZCwgYnV0IHIxIGlzIG5vdCBkb3VibGUtd29yZCBhbGlnbmVkLiAgKi8KKworICAgICAgICAvKiBJbml0aWFsaXplIHRoZSBxdWV1ZS4gICovCisgICAgICAgIGxkciAgICAgcjUsIFtyMV0sICM0CisKKyAgICAgICAgLyogQ29tcGFyZSB0d28gd29yZHMgaW4gZXZlcnkgaXRlcmF0aW9uLiAgKi8KKyAgICAgICAgLnAyYWxpZ24gICAgICAgIDIKKzM6CisgICAgICAgIHBsZCBbcjAsICMxNl0KKyAgICAgICAgcGxkIFtyMSwgIzE2XQorCisgICAgICAgIC8qIExvYWQgdGhlIG5leHQgZG91YmxlLXdvcmQgZnJvbSBlYWNoIHN0cmluZyBhbmQgY29tcGFyZS4gICovCisgICAgICAgIGxkcmQgICAgcjIsIHIzLCBbcjBdLCAjOAorICAgICAgICBtYWdpY19jb21wYXJlX2FuZF9icmFuY2ggdzE9cjIgdzI9cjUgbGFiZWw9cmV0dXJuXzI1CisgICAgICAgIGxkcmQgICAgcjQsIHI1LCBbcjFdLCAjOAorICAgICAgICBtYWdpY19jb21wYXJlX2FuZF9icmFuY2ggdzE9cjMgdzI9cjQgbGFiZWw9cmV0dXJuXzM0CisgICAgICAgIGIgICAgICAgM2IKKworICAgICAgICAubWFjcm8gbWlzY21wX3dvcmQgb2Zmc2V0bG8gb2Zmc2V0aGkKKyAgICAgICAgLyogTWFjcm8gdG8gY29tcGFyZSBtaXNhbGlnbmVkIHN0cmluZ3MuICAqLworICAgICAgICAvKiByMCwgcjEgYXJlIHdvcmQtYWxpZ25lZCwgYW5kIGF0IGxlYXN0IG9uZSBvZiB0aGUgc3RyaW5ncworICAgICAgICBpcyBub3QgZG91YmxlLXdvcmQgYWxpZ25lZC4gICovCisgICAgICAgIC8qIENvbXBhcmUgb25lIHdvcmQgaW4gZXZlcnkgbG9vcCBpdGVyYXRpb24uICAqLworICAgICAgICAvKiBPRkZTRVRMTyBpcyB0aGUgb3JpZ2luYWwgYml0LW9mZnNldCBvZiByMSBmcm9tIGEgd29yZC1ib3VuZGFyeSwKKyAgICAgICAgT0ZGU0VUSEkgaXMgMzIgLSBPRkZTRVRMTyAoaS5lLiwgb2Zmc2V0IGZyb20gdGhlIG5leHQgd29yZCkuICAqLworCisgICAgICAgIC8qIEluaXRpYWxpemUgdGhlIHNoaWZ0IHF1ZXVlLiAgKi8KKyAgICAgICAgbGRyICAgICByNSwgW3IxXSwgIzQKKworICAgICAgICAvKiBDb21wYXJlIG9uZSB3b3JkIGZyb20gZWFjaCBzdHJpbmcgaW4gZXZlcnkgbG9vcCBpdGVyYXRpb24uICAqLworICAgICAgICAucDJhbGlnbiAgICAgICAgMgorNzoKKyAgICAgICAgbGRyICAgICByMywgW3IwXSwgIzQKKyAgICAgICAgUzJMT01FTSByNSwgcjUsICNcb2Zmc2V0bG8KKyAgICAgICAgbWFnaWNfZmluZF96ZXJvX2J5dGVzIHcxPXIzCisgICAgICAgIGNtcCAgICAgcjcsIGlwLCBTMkhJTUVNICNcb2Zmc2V0bG8KKyAgICAgICAgYW5kICAgICByMiwgcjMsIHI2LCBTMkxPTUVNICNcb2Zmc2V0bG8KKyAgICAgICAgaXQgICAgICBlcQorICAgICAgICBjbXBlcSAgIHIyLCByNQorICAgICAgICBibmUgICAgIHJldHVybl8yNQorICAgICAgICBsZHIgICAgIHI1LCBbcjFdLCAjNAorICAgICAgICBjbXAgICAgIGlwLCAjMAorICAgICAgICBlb3IgcjMsIHIyLCByMworICAgICAgICBTMkhJTUVNIHIyLCByNSwgI1xvZmZzZXRoaQorICAgICAgICBpdCAgICAgIGVxCisgICAgICAgIGNtcGVxICAgcjMsIHIyCisgICAgICAgIGJuZSAgICAgcmV0dXJuXzMyCisgICAgICAgIGIgICAgICAgN2IKKyAgICAgICAgLmVuZG0gLyogbWlzY21wX3dvcmQgKi8KKworc3RyY21wX3VuYWxpZ25lZDoKKyAgICAgICAgLyogcjAgaXMgd29yZC1hbGlnbmVkLCByMSBpcyBhdCBvZmZzZXQgaXAgZnJvbSBhIHdvcmQuICAqLworICAgICAgICAvKiBBbGlnbiByMSB0byB0aGUgKHByZXZpb3VzKSB3b3JkLWJvdW5kYXJ5LiAgKi8KKyAgICAgICAgYmljICAgICByMSwgcjEsICMzCisKKyAgICAgICAgLyogVW5hbGlnbmVkIGNvbXBhcmlzb24gd29yZCBieSB3b3JkIHVzaW5nIExEUnMuICovCisgICAgICAgIGNtcCAgICAgaXAsICMyCisgICAgICAgIGJlcSAgICAgbWlzY21wX3dvcmRfMTYgICAgICAgICAgICAgICAgICAgIC8qIElmIGlwID09IDIuICAqLworICAgICAgICBiZ2UgICAgIG1pc2NtcF93b3JkXzI0ICAgICAgICAgICAgICAgICAgICAvKiBJZiBpcCA9PSAzLiAgKi8KKyAgICAgICAgbWlzY21wX3dvcmQgb2Zmc2V0bG89OCBvZmZzZXRoaT0yNCAgICAgICAgLyogSWYgaXAgPT0gMS4gICovCittaXNjbXBfd29yZF8xNjogIG1pc2NtcF93b3JkIG9mZnNldGxvPTE2IG9mZnNldGhpPTE2CittaXNjbXBfd29yZF8yNDogIG1pc2NtcF93b3JkIG9mZnNldGxvPTI0IG9mZnNldGhpPTgKKworCityZXR1cm5fMzI6CisgICAgICAgIHNldHVwX3JldHVybiB3MT1yMywgdzI9cjIKKyAgICAgICAgYiAgICAgICBkb19yZXR1cm4KK3JldHVybl8zNDoKKyAgICAgICAgc2V0dXBfcmV0dXJuIHcxPXIzLCB3Mj1yNAorICAgICAgICBiICAgICAgIGRvX3JldHVybgorcmV0dXJuXzI1OgorICAgICAgICBzZXR1cF9yZXR1cm4gdzE9cjIsIHcyPXI1CisgICAgICAgIGIgICAgICAgZG9fcmV0dXJuCityZXR1cm5fMzU6CisgICAgICAgIHNldHVwX3JldHVybiB3MT1yMywgdzI9cjUKKyAgICAgICAgYiAgICAgICBkb19yZXR1cm4KK3JldHVybl8yNDoKKyAgICAgICAgc2V0dXBfcmV0dXJuIHcxPXIyLCB3Mj1yNAorCitkb19yZXR1cm46CisKKyNpZmRlZiBfX0FSTUVCX18KKyAgICAgICAgbW92ICAgICByMCwgaXAKKyNlbHNlIC8qIG5vdCAgX19BUk1FQl9fICovCisgICAgICAgIHJldiAgICAgcjAsIGlwCisjZW5kaWYgLyogbm90ICBfX0FSTUVCX18gKi8KKworICAgICAgICAvKiBSZXN0b3JlIHRlbXBvcmFyaWVzIGVhcmx5LCBiZWZvcmUgY29tcHV0aW5nIHRoZSByZXR1cm4gdmFsdWUuICAqLworICAgICAgICBsZHJkICAgIHI2LCByNywgW3NwXQorICAgICAgICBsZHJkICAgIHI0LCByNSwgW3NwLCAjOF0KKyAgICAgICAgYWRkcyAgICBzcCwgc3AsICMxNgorCisgICAgICAgIC8qIFRoZXJlIGlzIGEgemVybyBvciBhIGRpZmZlcmVudCBieXRlIGJldHdlZW4gcjEgYW5kIHIyLiAgKi8KKyAgICAgICAgLyogcjAgY29udGFpbnMgYSBtYXNrIG9mIGFsbC16ZXJvIGJ5dGVzIGluIHIxLiAgKi8KKyAgICAgICAgLyogVXNpbmcgcjAgYW5kIG5vdCBpcCBoZXJlIGJlY2F1c2UgY2J6IHJlcXVpcmVzIGxvdyByZWdpc3Rlci4gICovCisgICAgICAgIG1fY2J6ICAgcmVnPXIwLCBsYWJlbD1jb21wdXRlX3JldHVybl92YWx1ZQorICAgICAgICBjbHogICAgIHIwLCByMAorICAgICAgICAvKiByMCBjb250YWlucyB0aGUgbnVtYmVyIG9mIGJpdHMgb24gdGhlIGxlZnQgb2YgdGhlIGZpcnN0IGFsbC16ZXJvIGJ5dGUgaW4gcjEuICAqLworICAgICAgICByc2IgICAgIHIwLCByMCwgIzI0CisgICAgICAgIC8qIEhlcmUsIHIwIGNvbnRhaW5zIHRoZSBudW1iZXIgb2YgYml0cyBvbiB0aGUgcmlnaHQgb2YgdGhlIGZpcnN0IGFsbC16ZXJvIGJ5dGUgaW4gcjEuICAqLworICAgICAgICBsc3IgICAgIHIxLCByMSwgcjAKKyAgICAgICAgbHNyICAgICByMiwgcjIsIHIwCisKK2NvbXB1dGVfcmV0dXJuX3ZhbHVlOgorICAgICAgICBtb3ZzICAgIHIwLCAjMQorICAgICAgICBjbXAgICAgIHIxLCByMgorICAgICAgICAvKiBUaGUgcmV0dXJuIHZhbHVlIGlzIGNvbXB1dGVkIGFzIGZvbGxvd3MuCisgICAgICAgIElmIHIxPnIyIHRoZW4gKEM9PTEgYW5kIFo9PTApIGFuZCBMUyBkb2Vzbid0IGhvbGQgYW5kIHIwIGlzICMxIGF0IHJldHVybi4KKyAgICAgICAgSWYgcjE8cjIgdGhlbiAoQz09MCBhbmQgWj09MCkgYW5kIHdlIGV4ZWN1dGUgU0JDIHdpdGggY2FycnlfaW49MCwKKyAgICAgICAgd2hpY2ggbWVhbnMgcjA6PXIwLXIwLTEgYW5kIHIwIGlzICMtMSBhdCByZXR1cm4uCisgICAgICAgIElmIHIxPXIyIHRoZW4gKEM9PTEgYW5kIFo9PTEpIGFuZCB3ZSBleGVjdXRlIFNCQyB3aXRoIGNhcnJ5X2luPTEsCisgICAgICAgIHdoaWNoIG1lYW5zIHIwOj1yMC1yMCBhbmQgcjAgaXMgIzAgYXQgcmV0dXJuLgorICAgICAgICAoQz09MCBhbmQgWj09MSkgY2Fubm90IGhhcHBlbiBiZWNhdXNlIHRoZSBjYXJyeSBiaXQgaXMgIm5vdCBib3Jyb3ciLiAgKi8KKyAgICAgICAgaXQgICAgICBscworICAgICAgICBzYmNscyAgIHIwLCByMCwgcjAKKyAgICAgICAgYnggICAgICBscgorRU5EKHN0cmNtcCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vY29ydGV4LWExNS9iaW9uaWMvc3RybGVuLlMgYi9saWJjL2FyY2gtYXJtL2NvcnRleC1hMTUvYmlvbmljL3N0cmxlbi5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1YjhiYTQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL2NvcnRleC1hMTUvYmlvbmljL3N0cmxlbi5TCkBAIC0wLDAgKzEsMTUxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisvKgorICogQ29weXJpZ2h0IChjKSAyMDEzIEFSTSBMdGQKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBUaGUgbmFtZSBvZiB0aGUgY29tcGFueSBtYXkgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlCisgKiAgICBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4KKyAqICAgIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUk0gTFREIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRAorICogV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBBUk0gTFREIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQKKyAqIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCisgKiBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgorCisgICAgLnN5bnRheCB1bmlmaWVkCisKKyAgICAudGh1bWIKKyAgICAudGh1bWJfZnVuYworCitFTlRSWShzdHJsZW4pCisgICAgcGxkIFtyMSwgIzEyOF0KKyAgICBtb3YgcjEsIHIwCisKKyAgICByc2IgICAgIHIzLCByMCwgIzAKKyAgICBhbmRzICAgIHIzLCByMywgIzcKKyAgICBiZXEgICAgIG1haW5sb29wCisKKyAgICAvLyBBbGlnbiB0byBhIGRvdWJsZSB3b3JkICg2NCBiaXRzKS4KKyAgICBhbmRzICAgIGlwLCByMywgIzEKKyAgICBiZXEgICAgIGFsaWduX3RvXzMyCisKKyAgICBsZHJiICAgIHIyLCBbcjFdLCAjMQorICAgIGNtcCAgICAgcjIsICMwCisgICAgYmVxICAgICB1cGRhdGVfY291bnRfYW5kX3JldHVybgorCithbGlnbl90b18zMjoKKyAgICBhbmRzICAgIGlwLCByMywgIzIKKyAgICBiZXEgICAgIGFsaWduX3RvXzY0CisKKyAgICBsZHJiICAgIHIyLCBbcjFdLCAjMQorICAgIGNtcCAgICAgcjIsICMwCisgICAgYmVxICAgICB1cGRhdGVfY291bnRfYW5kX3JldHVybgorICAgIGxkcmIgICAgcjIsIFtyMV0sICMxCisgICAgY21wICAgICByMiwgIzAKKyAgICBiZXEgICAgIHVwZGF0ZV9jb3VudF9hbmRfcmV0dXJuCisKK2FsaWduX3RvXzY0OgorICAgIGFuZHMgICAgaXAsIHIzLCAjNAorICAgIGJlcSAgICAgbWFpbmxvb3AKKyAgICBsZHIgICAgIHIzLCBbcjFdLCAjNAorCisgICAgc3ViICAgICBpcCwgcjMsICMweDAxMDEwMTAxCisgICAgYmljICAgICBpcCwgaXAsIHIzCisgICAgYW5kcyAgICBpcCwgaXAsICMweDgwODA4MDgwCisgICAgYm5lICAgICB6ZXJvX2luX3NlY29uZF9yZWdpc3RlcgorCittYWlubG9vcDoKKyAgICBsZHJkICAgIHIyLCByMywgW3IxXSwgIzgKKworICAgIHBsZCAgICAgW3IxLCAjNjRdCisKKyAgICBzdWIgICAgIGlwLCByMiwgIzB4MDEwMTAxMDEKKyAgICBiaWMgICAgIGlwLCBpcCwgcjIKKyAgICBhbmRzICAgIGlwLCBpcCwgIzB4ODA4MDgwODAKKyAgICBibmUgICAgIHplcm9faW5fZmlyc3RfcmVnaXN0ZXIKKworICAgIHN1YiAgICAgaXAsIHIzLCAjMHgwMTAxMDEwMQorICAgIGJpYyAgICAgaXAsIGlwLCByMworICAgIGFuZHMgICAgaXAsIGlwLCAjMHg4MDgwODA4MAorICAgIGJuZSAgICAgemVyb19pbl9zZWNvbmRfcmVnaXN0ZXIKKyAgICBiICAgICAgIG1haW5sb29wCisKK3plcm9faW5fZmlyc3RfcmVnaXN0ZXI6CisgICAgc3ViICAgICByMSwgcjEsICM0CisKK3plcm9faW5fc2Vjb25kX3JlZ2lzdGVyOgorICAgIHN1YiAgICAgcjAsIHIxLCByMAorCisgICAgLy8gQ2hlY2sgZm9yIHplcm8gaW4gYnl0ZSAwLgorICAgIGFuZHMgICAgcjEsIGlwLCAjMHg4MAorICAgIGJlcSAgICAgY2hlY2tfYnl0ZTEKKworICAgIHN1YiAgICAgcjAsIHIwLCAjNAorICAgIGJ4ICAgICAgbHIKKworY2hlY2tfYnl0ZTE6CisgICAgLy8gQ2hlY2sgZm9yIHplcm8gaW4gYnl0ZSAxLgorICAgIGFuZHMgICAgcjEsIGlwLCAjMHg4MDAwCisgICAgYmVxICAgICBjaGVja19ieXRlMgorCisgICAgc3ViICAgICByMCwgcjAsICMzCisgICAgYnggICAgICBscgorCitjaGVja19ieXRlMjoKKyAgICAvLyBDaGVjayBmb3IgemVybyBpbiBieXRlIDIuCisgICAgYW5kcyAgICByMSwgaXAsICMweDgwMDAwMAorICAgIGJlcSAgICAgcmV0dXJuCisKKyAgICBzdWIgICAgIHIwLCByMCwgIzIKKyAgICBieCAgICAgIGxyCisKK3VwZGF0ZV9jb3VudF9hbmRfcmV0dXJuOgorICAgIHN1YiAgICAgcjAsIHIxLCByMAorCityZXR1cm46CisgICAgc3ViICAgICByMCwgcjAsICMxCisgICAgYnggICAgICBscgorRU5EKHN0cmxlbikKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vY29ydGV4LWExNS9jb3J0ZXgtYTE1Lm1rIGIvbGliYy9hcmNoLWFybS9jb3J0ZXgtYTE1L2NvcnRleC1hMTUubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDkwNGU2YgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vY29ydGV4LWExNS9jb3J0ZXgtYTE1Lm1rCkBAIC0wLDAgKzEsNiBAQAorJChjYWxsIGxpYmMtYWRkLWNwdS12YXJpYW50LXNyYyxNRU1DUFksYXJjaC1hcm0vY29ydGV4LWExNS9iaW9uaWMvbWVtY3B5LlMpCiskKGNhbGwgbGliYy1hZGQtY3B1LXZhcmlhbnQtc3JjLE1FTVNFVCxhcmNoLWFybS9jb3J0ZXgtYTE1L2Jpb25pYy9tZW1zZXQuUykKKyQoY2FsbCBsaWJjLWFkZC1jcHUtdmFyaWFudC1zcmMsU1RSQ01QLGFyY2gtYXJtL2NvcnRleC1hMTUvYmlvbmljL3N0cmNtcC5TKQorJChjYWxsIGxpYmMtYWRkLWNwdS12YXJpYW50LXNyYyxTVFJMRU4sYXJjaC1hcm0vY29ydGV4LWExNS9iaW9uaWMvc3RybGVuLlMpCisKK2luY2x1ZGUgYmlvbmljL2xpYmMvYXJjaC1hcm0vZ2VuZXJpYy9nZW5lcmljLm1rCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL2NvcnRleC1hNy9jb3J0ZXgtYTcubWsgYi9saWJjL2FyY2gtYXJtL2NvcnRleC1hNy9jb3J0ZXgtYTcubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWFmMDNkOQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vY29ydGV4LWE3L2NvcnRleC1hNy5tawpAQCAtMCwwICsxIEBACitpbmNsdWRlIGJpb25pYy9saWJjL2FyY2gtYXJtL2NvcnRleC1hMTUvY29ydGV4LWExNS5tawpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9jb3J0ZXgtYTgvY29ydGV4LWE4Lm1rIGIvbGliYy9hcmNoLWFybS9jb3J0ZXgtYTgvY29ydGV4LWE4Lm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhZjAzZDkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL2NvcnRleC1hOC9jb3J0ZXgtYTgubWsKQEAgLTAsMCArMSBAQAoraW5jbHVkZSBiaW9uaWMvbGliYy9hcmNoLWFybS9jb3J0ZXgtYTE1L2NvcnRleC1hMTUubWsKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vY29ydGV4LWE5L2Jpb25pYy9tZW1jcHkuUyBiL2xpYmMvYXJjaC1hcm0vY29ydGV4LWE5L2Jpb25pYy9tZW1jcHkuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MGUyN2IwCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9jb3J0ZXgtYTkvYmlvbmljL21lbWNweS5TCkBAIC0wLDAgKzEsMjExIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxtYWNoaW5lL2NwdS1mZWF0dXJlcy5oPgorI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+CisKKy8qCisgKiBUaGlzIGNvZGUgYXNzdW1lcyBpdCBpcyBydW5uaW5nIG9uIGEgcHJvY2Vzc29yIHRoYXQgc3VwcG9ydHMgYWxsIGFybSB2NworICogaW5zdHJ1Y3Rpb25zLCB0aGF0IHN1cHBvcnRzIG5lb24gaW5zdHJ1Y3Rpb25zLCBhbmQgdGhhdCBoYXMgYSAzMiBieXRlCisgKiBjYWNoZSBsaW5lLgorICovCisKKyAgICAgICAgLnRleHQKKyAgICAgICAgLmZwdSAgICBuZW9uCisKKyNkZWZpbmUgQ0FDSEVfTElORV9TSVpFICAgICAzMgorCitFTlRSWShtZW1jcHkpCisgICAgICAgIC5zYXZlICAgICAgIHtyMCwgbHJ9CisgICAgICAgIC8qIHN0YXJ0IHByZWxvYWRpbmcgYXMgZWFybHkgYXMgcG9zc2libGUgKi8KKyAgICAgICAgcGxkICAgICAgICAgW3IxLCAjKENBQ0hFX0xJTkVfU0laRSAqIDApXQorICAgICAgICBzdG1mZCAgICAgICBzcCEsIHtyMCwgbHJ9CisgICAgICAgIHBsZCAgICAgICAgIFtyMSwgIyhDQUNIRV9MSU5FX1NJWkUgKiAyKV0KKworICAgICAgICAvLyBDaGVjayBzbyBkaXZpZGVyIGlzIGF0IGxlYXN0IDE2IGJ5dGVzLCBuZWVkZWQgZm9yIGFsaWdubWVudCBjb2RlLgorICAgICAgICBjbXAgICAgICAgICByMiwgIzE2CisgICAgICAgIGJsbyAgICAgICAgIDVmCisKKworICAgICAgICAvKiBjaGVjayBpZiBidWZmZXJzIGFyZSBhbGlnbmVkLiBJZiBzbywgcnVuIGFybS1vbmx5IHZlcnNpb24gKi8KKyAgICAgICAgZW9yICAgICAgICAgcjMsIHIwLCByMQorICAgICAgICBhbmRzICAgICAgICByMywgcjMsICMweDMKKyAgICAgICAgYmVxICAgICAgICAgMTFmCisKKyAgICAgICAgLyogQ2hlY2sgdGhlIHVwcGVyIHNpemUgbGltaXQgZm9yIE5lb24gdW5hbGlnbmVkIG1lbW9yeSBhY2Nlc3MgaW4gbWVtY3B5ICovCisgICAgICAgIGNtcCAgICAgICAgIHIyLCAjMjI0CisgICAgICAgIGJsbyAgICAgICAgIDNmCisKKyAgICAgICAgLyogYWxpZ24gZGVzdGluYXRpb24gdG8gMTYgYnl0ZXMgZm9yIHRoZSB3cml0ZS1idWZmZXIgKi8KKyAgICAgICAgcnNiICAgICAgICAgcjMsIHIwLCAjMAorICAgICAgICBhbmRzICAgICAgICByMywgcjMsICMweEYKKyAgICAgICAgYmVxICAgICAgICAgM2YKKworICAgICAgICAvKiBjb3B5IHVwIHRvIDE1LWJ5dGVzIChjb3VudCBpbiByMykgKi8KKyAgICAgICAgc3ViICAgICAgICAgcjIsIHIyLCByMworICAgICAgICBtb3ZzICAgICAgICBpcCwgcjMsIGxzbCAjMzEKKyAgICAgICAgbGRybWliICAgICAgbHIsIFtyMV0sICMxCisgICAgICAgIHN0cm1pYiAgICAgIGxyLCBbcjBdLCAjMQorICAgICAgICBsZHJjc2IgICAgICBpcCwgW3IxXSwgIzEKKyAgICAgICAgbGRyY3NiICAgICAgbHIsIFtyMV0sICMxCisgICAgICAgIHN0cmNzYiAgICAgIGlwLCBbcjBdLCAjMQorICAgICAgICBzdHJjc2IgICAgICBsciwgW3IwXSwgIzEKKyAgICAgICAgbW92cyAgICAgICAgaXAsIHIzLCBsc2wgIzI5CisgICAgICAgIGJnZSAgICAgICAgIDFmCisgICAgICAgIC8vIGNvcGllcyA0IGJ5dGVzLCBkZXN0aW5hdGlvbiAzMi1iaXRzIGFsaWduZWQKKyAgICAgICAgdmxkMS4zMiAgICAge2QwWzBdfSwgW3IxXSEKKyAgICAgICAgdnN0MS4zMiAgICAge2QwWzBdfSwgW3IwLCA6MzJdIQorMTogICAgICBiY2MgICAgICAgICAyZgorICAgICAgICAvLyBjb3BpZXMgOCBieXRlcywgZGVzdGluYXRpb24gNjQtYml0cyBhbGlnbmVkCisgICAgICAgIHZsZDEuOCAgICAgIHtkMH0sIFtyMV0hCisgICAgICAgIHZzdDEuOCAgICAgIHtkMH0sIFtyMCwgOjY0XSEKKzI6CisgICAgICAgIC8qIHByZWxvYWQgaW1tZWRpYXRlbHkgdGhlIG5leHQgY2FjaGUgbGluZSwgd2hpY2ggd2UgbWF5IG5lZWQgKi8KKyAgICAgICAgcGxkICAgICAgICAgW3IxLCAjKENBQ0hFX0xJTkVfU0laRSAqIDApXQorICAgICAgICBwbGQgICAgICAgICBbcjEsICMoQ0FDSEVfTElORV9TSVpFICogMildCiszOgorICAgICAgICAvKiBtYWtlIHN1cmUgd2UgaGF2ZSBhdCBsZWFzdCA2NCBieXRlcyB0byBjb3B5ICovCisgICAgICAgIHN1YnMgICAgICAgIHIyLCByMiwgIzY0CisgICAgICAgIGJsbyAgICAgICAgIDJmCisKKyAgICAgICAgLyogcHJlbG9hZCBhbGwgdGhlIGNhY2hlIGxpbmVzIHdlIG5lZWQgKi8KKyAgICAgICAgcGxkICAgICAgICAgW3IxLCAjKENBQ0hFX0xJTkVfU0laRSAqIDQpXQorICAgICAgICBwbGQgICAgICAgICBbcjEsICMoQ0FDSEVfTElORV9TSVpFICogNildCisKKzE6ICAgICAgLyogVGhlIG1haW4gbG9vcCBjb3BpZXMgNjQgYnl0ZXMgYXQgYSB0aW1lICovCisgICAgICAgIHZsZDEuOCAgICAgIHtkMCAtIGQzfSwgW3IxXSEKKyAgICAgICAgdmxkMS44ICAgICAge2Q0IC0gZDd9LCBbcjFdIQorICAgICAgICBwbGQgICAgICAgICBbcjEsICMoQ0FDSEVfTElORV9TSVpFICogNildCisgICAgICAgIHN1YnMgICAgICAgIHIyLCByMiwgIzY0CisgICAgICAgIHZzdDEuOCAgICAgIHtkMCAtIGQzfSwgW3IwXSEKKyAgICAgICAgdnN0MS44ICAgICAge2Q0IC0gZDd9LCBbcjBdIQorICAgICAgICBiaHMgICAgICAgICAxYgorCisyOiAgICAgIC8qIGZpeC11cCB0aGUgcmVtYWluaW5nIGNvdW50IGFuZCBtYWtlIHN1cmUgd2UgaGF2ZSA+PSAzMiBieXRlcyBsZWZ0ICovCisgICAgICAgIGFkZCAgICAgICAgIHIyLCByMiwgIzY0CisgICAgICAgIHN1YnMgICAgICAgIHIyLCByMiwgIzMyCisgICAgICAgIGJsbyAgICAgICAgIDRmCisKKzM6ICAgICAgLyogMzIgYnl0ZXMgYXQgYSB0aW1lLiBUaGVzZSBjYWNoZSBsaW5lcyB3ZXJlIGFscmVhZHkgcHJlbG9hZGVkICovCisgICAgICAgIHZsZDEuOCAgICAgIHtkMCAtIGQzfSwgW3IxXSEKKyAgICAgICAgc3VicyAgICAgICAgcjIsIHIyLCAjMzIKKyAgICAgICAgdnN0MS44ICAgICAge2QwIC0gZDN9LCBbcjBdIQorICAgICAgICBiaHMgICAgICAgICAzYgorCis0OiAgICAgIC8qIGxlc3MgdGhhbiAzMiBsZWZ0ICovCisgICAgICAgIGFkZCAgICAgICAgIHIyLCByMiwgIzMyCisgICAgICAgIHRzdCAgICAgICAgIHIyLCAjMHgxMAorICAgICAgICBiZXEgICAgICAgICA1ZgorICAgICAgICAvLyBjb3BpZXMgMTYgYnl0ZXMsIDEyOC1iaXRzIGFsaWduZWQKKyAgICAgICAgdmxkMS44ICAgICAge2QwLCBkMX0sIFtyMV0hCisgICAgICAgIHZzdDEuOCAgICAgIHtkMCwgZDF9LCBbcjBdIQorNTogICAgICAvKiBjb3B5IHVwIHRvIDE1LWJ5dGVzIChjb3VudCBpbiByMikgKi8KKyAgICAgICAgbW92cyAgICAgICAgaXAsIHIyLCBsc2wgIzI5CisgICAgICAgIGJjYyAgICAgICAgIDFmCisgICAgICAgIHZsZDEuOCAgICAgIHtkMH0sIFtyMV0hCisgICAgICAgIHZzdDEuOCAgICAgIHtkMH0sIFtyMF0hCisxOiAgICAgIGJnZSAgICAgICAgIDJmCisgICAgICAgIHZsZDEuMzIgICAgIHtkMFswXX0sIFtyMV0hCisgICAgICAgIHZzdDEuMzIgICAgIHtkMFswXX0sIFtyMF0hCisyOiAgICAgIG1vdnMgICAgICAgIGlwLCByMiwgbHNsICMzMQorICAgICAgICBsZHJtaWIgICAgICByMywgW3IxXSwgIzEKKyAgICAgICAgbGRyY3NiICAgICAgaXAsIFtyMV0sICMxCisgICAgICAgIGxkcmNzYiAgICAgIGxyLCBbcjFdLCAjMQorICAgICAgICBzdHJtaWIgICAgICByMywgW3IwXSwgIzEKKyAgICAgICAgc3RyY3NiICAgICAgaXAsIFtyMF0sICMxCisgICAgICAgIHN0cmNzYiAgICAgIGxyLCBbcjBdLCAjMQorCisgICAgICAgIGxkbWZkICAgICAgIHNwISwge3IwLCBscn0KKyAgICAgICAgYnggICAgICAgICAgbHIKKzExOgorICAgICAgICAvKiBTaW1wbGUgYXJtLW9ubHkgY29weSBsb29wIHRvIGhhbmRsZSBhbGlnbmVkIGNvcHkgb3BlcmF0aW9ucyAqLworICAgICAgICBzdG1mZCAgICAgICBzcCEsIHtyNCwgcjUsIHI2LCByNywgcjh9CisgICAgICAgIHBsZCAgICAgICAgIFtyMSwgIyhDQUNIRV9MSU5FX1NJWkUgKiA0KV0KKworICAgICAgICAvKiBDaGVjayBhbGlnbm1lbnQgKi8KKyAgICAgICAgcnNiICAgICAgICAgcjMsIHIxLCAjMAorICAgICAgICBhbmRzICAgICAgICByMywgIzMKKyAgICAgICAgYmVxICAgICAgICAgMmYKKworICAgICAgICAvKiBhbGlnbiBzb3VyY2UgdG8gMzIgYml0cy4gV2UgbmVlZCB0byBpbnNlcnQgMiBpbnN0cnVjdGlvbnMgYmV0d2VlbgorICAgICAgICAgKiBhIGxkcltifGhdIGFuZCBzdHJbYnxoXSBiZWNhdXNlIGJ5dGUgYW5kIGhhbGYtd29yZCBpbnN0cnVjdGlvbnMKKyAgICAgICAgICogc3RhbGwgMiBjeWNsZXMuCisgICAgICAgICAqLworICAgICAgICBtb3ZzICAgICAgICByMTIsIHIzLCBsc2wgIzMxCisgICAgICAgIHN1YiAgICAgICAgIHIyLCByMiwgcjMgICAgICAvKiB3ZSBrbm93IHRoYXQgcjMgPD0gcjIgYmVjYXVzZSByMiA+PSA0ICovCisgICAgICAgIGxkcm1pYiAgICAgIHIzLCBbcjFdLCAjMQorICAgICAgICBsZHJjc2IgICAgICByNCwgW3IxXSwgIzEKKyAgICAgICAgbGRyY3NiICAgICAgcjUsIFtyMV0sICMxCisgICAgICAgIHN0cm1pYiAgICAgIHIzLCBbcjBdLCAjMQorICAgICAgICBzdHJjc2IgICAgICByNCwgW3IwXSwgIzEKKyAgICAgICAgc3RyY3NiICAgICAgcjUsIFtyMF0sICMxCisKKzI6CisgICAgICAgIHN1YnMgICAgICAgIHIyLCByMiwgIzY0CisgICAgICAgIGJsdCAgICAgICAgIDRmCisKKzM6ICAgICAgLyogTWFpbiBjb3B5IGxvb3AsIGNvcHlpbmcgNjQgYnl0ZXMgYXQgYSB0aW1lICovCisgICAgICAgIHBsZCAgICAgICAgIFtyMSwgIyhDQUNIRV9MSU5FX1NJWkUgKiA4KV0KKyAgICAgICAgbGRtaWEgICAgICAgcjEhLCB7cjMsIHI0LCByNSwgcjYsIHI3LCByOCwgcjEyLCBscn0KKyAgICAgICAgc3RtaWEgICAgICAgcjAhLCB7cjMsIHI0LCByNSwgcjYsIHI3LCByOCwgcjEyLCBscn0KKyAgICAgICAgbGRtaWEgICAgICAgcjEhLCB7cjMsIHI0LCByNSwgcjYsIHI3LCByOCwgcjEyLCBscn0KKyAgICAgICAgc3RtaWEgICAgICAgcjAhLCB7cjMsIHI0LCByNSwgcjYsIHI3LCByOCwgcjEyLCBscn0KKyAgICAgICAgc3VicyAgICAgICAgcjIsIHIyLCAjNjQKKyAgICAgICAgYmdlICAgICAgICAgM2IKKworNDogICAgICAvKiBDaGVjayBpZiB0aGVyZSBhcmUgPiAzMiBieXRlcyBsZWZ0ICovCisgICAgICAgIGFkZHMgICAgICAgIHIyLCByMiwgIzY0CisgICAgICAgIHN1YnMgICAgICAgIHIyLCByMiwgIzMyCisgICAgICAgIGJsdCAgICAgICAgIDVmCisKKyAgICAgICAgLyogQ29weSAzMiBieXRlcyAqLworICAgICAgICBsZG1pYSAgICAgICByMSEsIHtyMywgcjQsIHI1LCByNiwgcjcsIHI4LCByMTIsIGxyfQorICAgICAgICBzdG1pYSAgICAgICByMCEsIHtyMywgcjQsIHI1LCByNiwgcjcsIHI4LCByMTIsIGxyfQorICAgICAgICBzdWJzICAgICAgICByMiwgIzMyCisKKzU6ICAgICAgLyogSGFuZGxlIGFueSByZW1haW5pbmcgYnl0ZXMgKi8KKyAgICAgICAgYWRkcyAgICAgICAgcjIsICMzMgorICAgICAgICBiZXEgICAgICAgICA2ZgorCisgICAgICAgIG1vdnMgICAgICAgIHIxMiwgcjIsIGxzbCAjMjgKKyAgICAgICAgbGRtY3NpYSAgICAgcjEhLCB7cjMsIHI0LCByNSwgcjZ9ICAgLyogMTYgYnl0ZXMgKi8KKyAgICAgICAgbGRtbWlpYSAgICAgcjEhLCB7cjcsIHI4fSAgICAgICAgICAgLyogIDggYnl0ZXMgKi8KKyAgICAgICAgc3RtY3NpYSAgICAgcjAhLCB7cjMsIHI0LCByNSwgcjZ9CisgICAgICAgIHN0bW1paWEgICAgIHIwISwge3I3LCByOH0KKyAgICAgICAgbW92cyAgICAgICAgcjEyLCByMiwgbHNsICMzMAorICAgICAgICBsZHJjcyAgICAgICByMywgW3IxXSwgIzQgICAgICAgICAgICAvKiAgNCBieXRlcyAqLworICAgICAgICBsZHJtaWggICAgICByNCwgW3IxXSwgIzIgICAgICAgICAgICAvKiAgMiBieXRlcyAqLworICAgICAgICBzdHJjcyAgICAgICByMywgW3IwXSwgIzQKKyAgICAgICAgc3RybWloICAgICAgcjQsIFtyMF0sICMyCisgICAgICAgIHRzdCAgICAgICAgIHIyLCAjMHgxCisgICAgICAgIGxkcm5lYiAgICAgIHIzLCBbcjFdICAgICAgICAgICAgICAgIC8qICBsYXN0IGJ5dGUgICovCisgICAgICAgIHN0cm5lYiAgICAgIHIzLCBbcjBdCis2OgorICAgICAgICBsZG1mZCAgICAgICBzcCEsIHtyNCwgcjUsIHI2LCByNywgcjh9CisgICAgICAgIGxkbWZkICAgICAgIHNwISwge3IwLCBwY30KK0VORChtZW1jcHkpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL2NvcnRleC1hOS9iaW9uaWMvbWVtc2V0LlMgYi9saWJjL2FyY2gtYXJtL2NvcnRleC1hOS9iaW9uaWMvbWVtc2V0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjU4YWE0NQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vY29ydGV4LWE5L2Jpb25pYy9tZW1zZXQuUwpAQCAtMCwwICsxLDE1MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8bWFjaGluZS9jcHUtZmVhdHVyZXMuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgorCisvKgorICogVGhpcyBjb2RlIGFzc3VtZXMgaXQgaXMgcnVubmluZyBvbiBhIHByb2Nlc3NvciB0aGF0IHN1cHBvcnRzIGFsbCBhcm0gdjcKKyAqIGluc3RydWN0aW9ucyBhbmQgdGhhdCBzdXBwb3J0cyBuZW9uIGluc3RydWN0aW9ucy4KKyAqLworCisgICAgLmZwdSAgICBuZW9uCisKK0VOVFJZKGJ6ZXJvKQorICAgICAgICBtb3YgICAgIHIyLCByMQorICAgICAgICBtb3YgICAgIHIxLCAjMAorRU5EKGJ6ZXJvKQorCisvKiBtZW1zZXQoKSByZXR1cm5zIGl0cyBmaXJzdCBhcmd1bWVudC4gICovCitFTlRSWShtZW1zZXQpCisgICAgICAgICMgVGhlIG5lb24gbWVtc2V0IG9ubHkgd2lucyBmb3IgbGVzcyB0aGFuIDEzMi4KKyAgICAgICAgY21wICAgICAgICAgcjIsICMxMzIKKyAgICAgICAgYmhpICAgICAgICAgMTFmCisKKyAgICAgICAgLnNhdmUgICAgICAge3IwfQorICAgICAgICBzdG1mZCAgICAgICBzcCEsIHtyMH0KKworICAgICAgICB2ZHVwLjggICAgICBxMCwgcjEKKworICAgICAgICAvKiBtYWtlIHN1cmUgd2UgaGF2ZSBhdCBsZWFzdCAzMiBieXRlcyB0byB3cml0ZSAqLworICAgICAgICBzdWJzICAgICAgICByMiwgcjIsICMzMgorICAgICAgICBibG8gICAgICAgICAyZgorICAgICAgICB2bW92ICAgICAgICBxMSwgcTAKKworMTogICAgICAvKiBUaGUgbWFpbiBsb29wIHdyaXRlcyAzMiBieXRlcyBhdCBhIHRpbWUgKi8KKyAgICAgICAgc3VicyAgICAgICAgcjIsIHIyLCAjMzIKKyAgICAgICAgdnN0MS44ICAgICAge2QwIC0gZDN9LCBbcjBdIQorICAgICAgICBiaHMgICAgICAgICAxYgorCisyOiAgICAgIC8qIGxlc3MgdGhhbiAzMiBsZWZ0ICovCisgICAgICAgIGFkZCAgICAgICAgIHIyLCByMiwgIzMyCisgICAgICAgIHRzdCAgICAgICAgIHIyLCAjMHgxMAorICAgICAgICBiZXEgICAgICAgICAzZgorCisgICAgICAgIC8vIHdyaXRlcyAxNiBieXRlcywgMTI4LWJpdHMgYWxpZ25lZAorICAgICAgICB2c3QxLjggICAgICB7ZDAsIGQxfSwgW3IwXSEKKzM6ICAgICAgLyogd3JpdGUgdXAgdG8gMTUtYnl0ZXMgKGNvdW50IGluIHIyKSAqLworICAgICAgICBtb3ZzICAgICAgICBpcCwgcjIsIGxzbCAjMjkKKyAgICAgICAgYmNjICAgICAgICAgMWYKKyAgICAgICAgdnN0MS44ICAgICAge2QwfSwgW3IwXSEKKzE6ICAgICAgYmdlICAgICAgICAgMmYKKyAgICAgICAgdnN0MS4zMiAgICAge2QwWzBdfSwgW3IwXSEKKzI6ICAgICAgbW92cyAgICAgICAgaXAsIHIyLCBsc2wgIzMxCisgICAgICAgIHN0cm1pYiAgICAgIHIxLCBbcjBdLCAjMQorICAgICAgICBzdHJjc2IgICAgICByMSwgW3IwXSwgIzEKKyAgICAgICAgc3RyY3NiICAgICAgcjEsIFtyMF0sICMxCisgICAgICAgIGxkbWZkICAgICAgIHNwISwge3IwfQorICAgICAgICBieCAgICAgICAgICBscgorMTE6CisgICAgICAgIC8qIGNvbXB1dGUgdGhlIG9mZnNldCB0byBhbGlnbiB0aGUgZGVzdGluYXRpb24KKyAgICAgICAgICogb2Zmc2V0ID0gKDQtKHNyYyYzKSkmMyA9IC1zcmMgJiAzCisgICAgICAgICAqLworCisgICAgICAgIC5zYXZlICAgICAgIHtyMCwgcjQtcjcsIGxyfQorICAgICAgICBzdG1mZCAgICAgICBzcCEsIHtyMCwgcjQtcjcsIGxyfQorICAgICAgICByc2IgICAgICAgICByMywgcjAsICMwCisgICAgICAgIGFuZHMgICAgICAgIHIzLCByMywgIzMKKyAgICAgICAgY21wICAgICAgICAgcjMsIHIyCisgICAgICAgIG1vdmhpICAgICAgIHIzLCByMgorCisgICAgICAgIC8qIHNwbGF0IHIxICovCisgICAgICAgIG1vdiAgICAgICAgIHIxLCByMSwgbHNsICMyNAorICAgICAgICBvcnIgICAgICAgICByMSwgcjEsIHIxLCBsc3IgIzgKKyAgICAgICAgb3JyICAgICAgICAgcjEsIHIxLCByMSwgbHNyICMxNgorCisgICAgICAgIG1vdnMgICAgICAgIHIxMiwgcjMsIGxzbCAjMzEKKyAgICAgICAgc3RyY3NiICAgICAgcjEsIFtyMF0sICMxICAgIC8qIGNhbid0IHVzZSBzdHJoIChhbGlnbm1lbnQgdW5rbm93bikgKi8KKyAgICAgICAgc3RyY3NiICAgICAgcjEsIFtyMF0sICMxCisgICAgICAgIHN0cm1pYiAgICAgIHIxLCBbcjBdLCAjMQorICAgICAgICBzdWJzICAgICAgICByMiwgcjIsIHIzCisgICAgICAgIGxkbWxzZmQgICAgIHNwISwge3IwLCByNC1yNywgbHJ9ICAgLyogcmV0dXJuICovCisgICAgICAgIGJ4bHMgICAgICAgIGxyCisKKyAgICAgICAgLyogYWxpZ24gdGhlIGRlc3RpbmF0aW9uIHRvIGEgY2FjaGUtbGluZSAqLworICAgICAgICBtb3YgICAgICAgICByMTIsIHIxCisgICAgICAgIG1vdiAgICAgICAgIGxyLCByMQorICAgICAgICBtb3YgICAgICAgICByNCwgcjEKKyAgICAgICAgbW92ICAgICAgICAgcjUsIHIxCisgICAgICAgIG1vdiAgICAgICAgIHI2LCByMQorICAgICAgICBtb3YgICAgICAgICByNywgcjEKKworICAgICAgICByc2IgICAgICAgICByMywgcjAsICMwCisgICAgICAgIGFuZHMgICAgICAgIHIzLCByMywgIzB4MUMKKyAgICAgICAgYmVxICAgICAgICAgM2YKKyAgICAgICAgY21wICAgICAgICAgcjMsIHIyCisgICAgICAgIGFuZGhpICAgICAgIHIzLCByMiwgIzB4MUMKKyAgICAgICAgc3ViICAgICAgICAgcjIsIHIyLCByMworCisgICAgICAgIC8qIGNvbmRpdGlvbmFsbHkgd3JpdGVzIDAgdG8gNyB3b3JkcyAobGVuZ3RoIGluIHIzKSAqLworICAgICAgICBtb3ZzICAgICAgICByMywgcjMsIGxzbCAjMjgKKyAgICAgICAgc3RtY3NpYSAgICAgcjAhLCB7cjEsIGxyfQorICAgICAgICBzdG1jc2lhICAgICByMCEsIHtyMSwgbHJ9CisgICAgICAgIHN0bW1paWEgICAgIHIwISwge3IxLCBscn0KKyAgICAgICAgbW92cyAgICAgICAgcjMsIHIzLCBsc2wgIzIKKyAgICAgICAgc3RyY3MgICAgICAgcjEsIFtyMF0sICM0CisKKzM6CisgICAgICAgIHN1YnMgICAgICAgIHIyLCByMiwgIzMyCisgICAgICAgIG1vdiAgICAgICAgIHIzLCByMQorICAgICAgICBibWkgICAgICAgICAyZgorMTogICAgICBzdWJzICAgICAgICByMiwgcjIsICMzMgorICAgICAgICBzdG1pYSAgICAgICByMCEsIHtyMSxyMyxyNCxyNSxyNixyNyxyMTIsbHJ9CisgICAgICAgIGJocyAgICAgICAgIDFiCisyOiAgICAgIGFkZCAgICAgICAgIHIyLCByMiwgIzMyCisKKyAgICAgICAgLyogY29uZGl0aW9uYWxseSBzdG9yZXMgMCB0byAzMSBieXRlcyAqLworICAgICAgICBtb3ZzICAgICAgICByMiwgcjIsIGxzbCAjMjgKKyAgICAgICAgc3RtY3NpYSAgICAgcjAhLCB7cjEscjMscjEyLGxyfQorICAgICAgICBzdG1taWlhICAgICByMCEsIHtyMSwgbHJ9CisgICAgICAgIG1vdnMgICAgICAgIHIyLCByMiwgbHNsICMyCisgICAgICAgIHN0cmNzICAgICAgIHIxLCBbcjBdLCAjNAorICAgICAgICBzdHJtaWggICAgICByMSwgW3IwXSwgIzIKKyAgICAgICAgbW92cyAgICAgICAgcjIsIHIyLCBsc2wgIzIKKyAgICAgICAgc3RyY3NiICAgICAgcjEsIFtyMF0KKyAgICAgICAgbGRtZmQgICAgICAgc3AhLCB7cjAsIHI0LXI3LCBscn0KKyAgICAgICAgYnggICAgICAgICAgbHIKK0VORChtZW1zZXQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL2NvcnRleC1hOS9iaW9uaWMvc3RyY21wLlMgYi9saWJjL2FyY2gtYXJtL2NvcnRleC1hOS9iaW9uaWMvc3RyY21wLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTU5N2QwZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vY29ydGV4LWE5L2Jpb25pYy9zdHJjbXAuUwpAQCAtMCwwICsxLDU0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMyBBUk0gTHRkCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gVGhlIG5hbWUgb2YgdGhlIGNvbXBhbnkgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZQorICogICAgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuCisgKiAgICBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVJNIExURCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQKKyAqIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgorICogSU4gTk8gRVZFTlQgU0hBTEwgQVJNIExURCBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVECisgKiBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORworICogTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8bWFjaGluZS9jcHUtZmVhdHVyZXMuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgorCisjaWZkZWYgX19BUk1FQl9fCisjZGVmaW5lIFMyTE9NRU0gbHNsCisjZGVmaW5lIFMyTE9NRU1FUSBsc2xlcQorI2RlZmluZSBTMkhJTUVNIGxzcgorI2RlZmluZSBNU0IgMHgwMDAwMDBmZgorI2RlZmluZSBMU0IgMHhmZjAwMDAwMAorI2RlZmluZSBCWVRFMF9PRkZTRVQgMjQKKyNkZWZpbmUgQllURTFfT0ZGU0VUIDE2CisjZGVmaW5lIEJZVEUyX09GRlNFVCA4CisjZGVmaW5lIEJZVEUzX09GRlNFVCAwCisjZWxzZSAvKiBub3QgIF9fQVJNRUJfXyAqLworI2RlZmluZSBTMkxPTUVNIGxzcgorI2RlZmluZSBTMkxPTUVNRVEgbHNyZXEKKyNkZWZpbmUgUzJISU1FTSBsc2wKKyNkZWZpbmUgQllURTBfT0ZGU0VUIDAKKyNkZWZpbmUgQllURTFfT0ZGU0VUIDgKKyNkZWZpbmUgQllURTJfT0ZGU0VUIDE2CisjZGVmaW5lIEJZVEUzX09GRlNFVCAyNAorI2RlZmluZSBNU0IgMHhmZjAwMDAwMAorI2RlZmluZSBMU0IgMHgwMDAwMDBmZgorI2VuZGlmIC8qIG5vdCAgX19BUk1FQl9fICovCisKKy5zeW50YXggICAgICAgICB1bmlmaWVkCisKKyNpZiBkZWZpbmVkIChfX3RodW1iX18pCisgICAgICAgIC50aHVtYgorICAgICAgICAudGh1bWJfZnVuYworI2VuZGlmCisKK0VOVFJZKHN0cmNtcCkKKyAgICAgIC8qIFVzZSBMRFJEIHdoZW5ldmVyIHBvc3NpYmxlLiAgKi8KKworLyogVGhlIG1haW4gdGhpbmcgdG8gbG9vayBvdXQgZm9yIHdoZW4gY29tcGFyaW5nIGxhcmdlIGJsb2NrcyBpcyB0aGF0CisgICB0aGUgbG9hZHMgZG8gbm90IGNyb3NzIGEgcGFnZSBib3VuZGFyeSB3aGVuIGxvYWRpbmcgcGFzdCB0aGUgaW5kZXgKKyAgIG9mIHRoZSBieXRlIHdpdGggdGhlIGZpcnN0IGRpZmZlcmVuY2Ugb3IgdGhlIGZpcnN0IHN0cmluZy10ZXJtaW5hdG9yLgorCisgICBGb3IgZXhhbXBsZSwgaWYgdGhlIHN0cmluZ3MgYXJlIGlkZW50aWNhbCBhbmQgdGhlIHN0cmluZy10ZXJtaW5hdG9yCisgICBpcyBhdCBpbmRleCBrLCBieXRlIGJ5IGJ5dGUgY29tcGFyaXNvbiB3aWxsIG5vdCBsb2FkIGJleW9uZCBhZGRyZXNzCisgICBzMStrIGFuZCBzMitrOyB3b3JkIGJ5IHdvcmQgY29tcGFyaXNvbiBtYXkgbG9hZCB1cCB0byAzIGJ5dGVzIGJleW9uZAorICAgazsgZG91YmxlIHdvcmQgLSB1cCB0byA3IGJ5dGVzLiAgSWYgdGhlIGxvYWQgb2YgdGhlc2UgYnl0ZXMgY3Jvc3NlcworICAgYSBwYWdlIGJvdW5kYXJ5LCBpdCBtaWdodCBjYXVzZSBhIG1lbW9yeSBmYXVsdCAoaWYgdGhlIHBhZ2UgaXMgbm90IG1hcHBlZCkKKyAgIHRoYXQgd291bGQgbm90IGhhdmUgaGFwcGVuZWQgaW4gYnl0ZSBieSBieXRlIGNvbXBhcmlzb24uCisKKyAgIElmIGFuIGFkZHJlc3MgaXMgKGRvdWJsZSkgd29yZCBhbGlnbmVkLCB0aGVuIGEgbG9hZCBvZiBhIChkb3VibGUpIHdvcmQKKyAgIGZyb20gdGhhdCBhZGRyZXNzIHdpbGwgbm90IGNyb3NzIGEgcGFnZSBib3VuZGFyeS4KKyAgIFRoZXJlZm9yZSwgdGhlIGFsZ29yaXRobSBiZWxvdyBjb25zaWRlcnMgd29yZCBhbmQgZG91YmxlLXdvcmQgYWxpZ25tZW50CisgICBvZiBzdHJpbmdzIHNlcGFyYXRlbHkuICAqLworCisvKiBIaWdoLWxldmVsIGRlc2NyaXB0aW9uIG9mIHRoZSBhbGdvcml0aG0uCisKKyAgICogVGhlIGZhc3QgcGF0aDogaWYgYm90aCBzdHJpbmdzIGFyZSBkb3VibGUtd29yZCBhbGlnbmVkLAorICAgICB1c2UgTERSRCB0byBsb2FkIHR3byB3b3JkcyBmcm9tIGVhY2ggc3RyaW5nIGluIGV2ZXJ5IGxvb3AgaXRlcmF0aW9uLgorICAgKiBJZiB0aGUgc3RyaW5ncyBoYXZlIHRoZSBzYW1lIG9mZnNldCBmcm9tIGEgd29yZCBib3VuZGFyeSwKKyAgICAgdXNlIExEUkIgdG8gbG9hZCBhbmQgY29tcGFyZSBieXRlIGJ5IGJ5dGUgdW50aWwKKyAgICAgdGhlIGZpcnN0IHN0cmluZyBpcyBhbGlnbmVkIHRvIGEgd29yZCBib3VuZGFyeSAoYXQgbW9zdCAzIGJ5dGVzKS4KKyAgICAgVGhpcyBpcyBvcHRpbWl6ZWQgZm9yIHF1aWNrIHJldHVybiBvbiBzaG9ydCB1bmFsaWduZWQgc3RyaW5ncy4KKyAgICogSWYgdGhlIHN0cmluZ3MgaGF2ZSB0aGUgc2FtZSBvZmZzZXQgZnJvbSBhIGRvdWJsZS13b3JkIGJvdW5kYXJ5LAorICAgICB1c2UgTERSRCB0byBsb2FkIHR3byB3b3JkcyBmcm9tIGVhY2ggc3RyaW5nIGluIGV2ZXJ5IGxvb3AgaXRlcmF0aW9uLCBhcyBpbiB0aGUgZmFzdCBwYXRoLgorICAgKiBJZiB0aGUgc3RyaW5ncyBkbyBub3QgaGF2ZSB0aGUgc2FtZSBvZmZzZXQgZnJvbSBhIGRvdWJsZS13b3JkIGJvdW5kYXJ5LAorICAgICBsb2FkIGEgd29yZCBmcm9tIHRoZSBzZWNvbmQgc3RyaW5nIGJlZm9yZSB0aGUgbG9vcCB0byBpbml0aWFsaXplIHRoZSBxdWV1ZS4KKyAgICAgVXNlIExEUkQgdG8gbG9hZCB0d28gd29yZHMgZnJvbSBldmVyeSBzdHJpbmcgaW4gZXZlcnkgbG9vcCBpdGVyYXRpb24uCisgICAgIEluc2lkZSB0aGUgbG9vcCwgbG9hZCB0aGUgc2Vjb25kIHdvcmQgZnJvbSB0aGUgc2Vjb25kIHN0cmluZyBvbmx5IGFmdGVyIGNvbXBhcmluZworICAgICB0aGUgZmlyc3Qgd29yZCwgdXNpbmcgdGhlIHF1ZXVlZCB2YWx1ZSwgdG8gZ3VhcmFudGVlIHNhZmV0eSBhY3Jvc3MgcGFnZSBib3VuZGFyaWVzLgorICAgKiBJZiB0aGUgc3RyaW5ncyBkbyBub3QgaGF2ZSB0aGUgc2FtZSBvZmZzZXQgZnJvbSBhIHdvcmQgYm91bmRhcnksCisgICAgIHVzZSBMRFIgYW5kIGEgc2hpZnQgcXVldWUuIE9yZGVyIG9mIGxvYWRzIGFuZCBjb21wYXJpc29ucyBtYXR0ZXJzLAorICAgICBzaW1pbGFybHkgdG8gdGhlIHByZXZpb3VzIGNhc2UuCisKKyAgICogVXNlIFVBREQ4IGFuZCBTRUwgdG8gY29tcGFyZSB3b3JkcywgYW5kIHVzZSBSRVYgYW5kIENMWiB0byBjb21wdXRlIHRoZSByZXR1cm4gdmFsdWUuCisgICAqIFRoZSBvbmx5IGRpZmZlcmVuY2UgYmV0d2VlbiBBUk0gYW5kIFRodW1iIG1vZGVzIGlzIHRoZSB1c2Ugb2YgQ0JaIGluc3RydWN0aW9uLgorICAgKiBUaGUgb25seSBkaWZmZXJlbmNlIGJldHdlZW4gYmlnIGFuZCBsaXR0bGUgZW5kaWFuIGlzIHRoZSB1c2Ugb2YgUkVWIGluIGxpdHRsZSBlbmRpYW4KKyAgICAgdG8gY29tcHV0ZSB0aGUgcmV0dXJuIHZhbHVlLCBpbnN0ZWFkIG9mIE1PVi4KKyovCisKKyAgICAgICAgLm1hY3JvIG1fY2J6IHJlZyBsYWJlbAorI2lmZGVmIF9fdGh1bWIyX18KKyAgICAgICAgY2J6ICAgICBccmVnLCBcbGFiZWwKKyNlbHNlICAgLyogbm90IGRlZmluZWQgX190aHVtYjJfXyAqLworICAgICAgICBjbXAgICAgIFxyZWcsICMwCisgICAgICAgIGJlcSAgICAgXGxhYmVsCisjZW5kaWYgLyogbm90IGRlZmluZWQgX190aHVtYjJfXyAqLworICAgICAgICAuZW5kbSAvKiBtX2NieiAqLworCisgICAgICAgIC5tYWNybyBtX2NibnogcmVnIGxhYmVsCisjaWZkZWYgX190aHVtYjJfXworICAgICAgICBjYm56ICAgIFxyZWcsIFxsYWJlbAorI2Vsc2UgICAvKiBub3QgZGVmaW5lZCBfX3RodW1iMl9fICovCisgICAgICAgIGNtcCAgICAgXHJlZywgIzAKKyAgICAgICAgYm5lICAgICBcbGFiZWwKKyNlbmRpZiAvKiBub3QgZGVmaW5lZCBfX3RodW1iMl9fICovCisgICAgICAgIC5lbmRtIC8qIG1fY2JueiAqLworCisgICAgICAgIC5tYWNybyAgaW5pdAorICAgICAgICAvKiBNYWNybyB0byBzYXZlIHRlbXBvcmFyeSByZWdpc3RlcnMgYW5kIHByZXBhcmUgbWFnaWMgdmFsdWVzLiAgKi8KKyAgICAgICAgc3VicyAgICBzcCwgc3AsICMxNgorICAgICAgICBzdHJkICAgIHI0LCByNSwgW3NwLCAjOF0KKyAgICAgICAgc3RyZCAgICByNiwgcjcsIFtzcF0KKyAgICAgICAgbXZuICAgICByNiwgIzAgIC8qIGFsbCBGICovCisgICAgICAgIG1vdiAgICAgcjcsICMwICAvKiBhbGwgMCAqLworICAgICAgICAuZW5kbSAgIC8qIGluaXQgKi8KKworICAgICAgICAubWFjcm8gIG1hZ2ljX2NvbXBhcmVfYW5kX2JyYW5jaCB3MSB3MiBsYWJlbAorICAgICAgICAvKiBNYWNybyB0byBjb21wYXJlIHJlZ2lzdGVycyB3MSBhbmQgdzIgYW5kIGNvbmRpdGlvbmFsbHkgYnJhbmNoIHRvIGxhYmVsLiAgKi8KKyAgICAgICAgY21wICAgICBcdzEsIFx3MiAgICAgICAgLyogQXJlIHcxIGFuZCB3MiB0aGUgc2FtZT8gICovCisgICAgICAgIG1hZ2ljX2ZpbmRfemVyb19ieXRlcyBcdzEKKyAgICAgICAgaXQgICAgICBlcQorICAgICAgICBjbXBlcSAgIGlwLCAjMCAgICAgICAgICAvKiBJcyB0aGVyZSBhIHplcm8gYnl0ZSBpbiB3MT8gICovCisgICAgICAgIGJuZSAgICAgXGxhYmVsCisgICAgICAgIC5lbmRtIC8qIG1hZ2ljX2NvbXBhcmVfYW5kX2JyYW5jaCAqLworCisgICAgICAgIC5tYWNybyAgbWFnaWNfZmluZF96ZXJvX2J5dGVzIHcxCisgICAgICAgIC8qIE1hY3JvIHRvIGZpbmQgYWxsLXplcm8gYnl0ZXMgaW4gdzEsIHJlc3VsdCBpcyBpbiBpcC4gICovCisjaWYgKGRlZmluZWQgKF9fQVJNX0ZFQVRVUkVfRFNQKSkKKyAgICAgICAgdWFkZDggICBpcCwgXHcxLCByNgorICAgICAgICBzZWwgICAgIGlwLCByNywgcjYKKyNlbHNlIC8qIG5vdCBkZWZpbmVkIChfX0FSTV9GRUFUVVJFX0RTUCkgKi8KKyAgICAgICAgLyogX19BUk1fRkVBVFVSRV9EU1AgaXMgbm90IGRlZmluZWQgZm9yIHNvbWUgQ29ydGV4LU0gcHJvY2Vzc29ycy4KKyAgICAgICAgQ29pbmNpZGVudGx5LCB0aGVzZSBwcm9jZXNzb3JzIG9ubHkgaGF2ZSBUaHVtYi0yIG1vZGUsIHdoZXJlIHdlIGNhbiB1c2UgdGhlCisgICAgICAgIHRoZSAobGFyZ2UpIG1hZ2ljIGNvbnN0YW50IGF2YWlsYWJsZSBkaXJlY3RseSBhcyBhbiBpbW1lZGlhdGUgaW4gaW5zdHJ1Y3Rpb25zLgorICAgICAgICBOb3RlIHRoYXQgd2UgY2Fubm90IHVzZSB0aGUgbWFnaWMgY29uc3RhbnQgaW4gQVJNIG1vZGUsIHdoZXJlIHdlIG5lZWQKKyAgICAgICAgdG8gY3JlYXRlIHRoZSBjb25zdGFudCBpbiBhIHJlZ2lzdGVyLiAgKi8KKyAgICAgICAgc3ViICAgICBpcCwgXHcxLCAjMHgwMTAxMDEwMQorICAgICAgICBiaWMgICAgIGlwLCBpcCwgXHcxCisgICAgICAgIGFuZCAgICAgaXAsIGlwLCAjMHg4MDgwODA4MAorI2VuZGlmIC8qIG5vdCBkZWZpbmVkIChfX0FSTV9GRUFUVVJFX0RTUCkgKi8KKyAgICAgICAgLmVuZG0gLyogbWFnaWNfZmluZF96ZXJvX2J5dGVzICovCisKKyAgICAgICAgLm1hY3JvICBzZXR1cF9yZXR1cm4gdzEgdzIKKyNpZmRlZiBfX0FSTUVCX18KKyAgICAgICAgbW92ICAgICByMSwgXHcxCisgICAgICAgIG1vdiAgICAgcjIsIFx3MgorI2Vsc2UgLyogbm90ICBfX0FSTUVCX18gKi8KKyAgICAgICAgcmV2ICAgICByMSwgXHcxCisgICAgICAgIHJldiAgICAgcjIsIFx3MgorI2VuZGlmIC8qIG5vdCAgX19BUk1FQl9fICovCisgICAgICAgIC5lbmRtIC8qIHNldHVwX3JldHVybiAqLworCisgICAgICAgIHBsZCBbcjAsICMwXQorICAgICAgICBwbGQgW3IxLCAjMF0KKworICAgICAgICAvKiBBcmUgYm90aCBzdHJpbmdzIGRvdWJsZS13b3JkIGFsaWduZWQ/ICAqLworICAgICAgICBvcnIgICAgIGlwLCByMCwgcjEKKyAgICAgICAgdHN0ICAgICBpcCwgIzcKKyAgICAgICAgYm5lICAgICBkb19hbGlnbgorCisgICAgICAgIC8qIEZhc3QgcGF0aC4gICovCisgICAgICAgIGluaXQKKworZG91Ymxld29yZF9hbGlnbmVkOgorCisgICAgICAgIC8qIEdldCBoZXJlIHdoZW4gdGhlIHN0cmluZ3MgdG8gY29tcGFyZSBhcmUgZG91YmxlLXdvcmQgYWxpZ25lZC4gICovCisgICAgICAgIC8qIENvbXBhcmUgdHdvIHdvcmRzIGluIGV2ZXJ5IGl0ZXJhdGlvbi4gICovCisgICAgICAgIC5wMmFsaWduICAgICAgICAyCisyOgorICAgICAgICBwbGQgW3IwLCAjMTZdCisgICAgICAgIHBsZCBbcjEsICMxNl0KKworICAgICAgICAvKiBMb2FkIHRoZSBuZXh0IGRvdWJsZS13b3JkIGZyb20gZWFjaCBzdHJpbmcuICAqLworICAgICAgICBsZHJkICAgIHIyLCByMywgW3IwXSwgIzgKKyAgICAgICAgbGRyZCAgICByNCwgcjUsIFtyMV0sICM4CisKKyAgICAgICAgbWFnaWNfY29tcGFyZV9hbmRfYnJhbmNoIHcxPXIyLCB3Mj1yNCwgbGFiZWw9cmV0dXJuXzI0CisgICAgICAgIG1hZ2ljX2NvbXBhcmVfYW5kX2JyYW5jaCB3MT1yMywgdzI9cjUsIGxhYmVsPXJldHVybl8zNQorICAgICAgICBiICAgICAgIDJiCisKK2RvX2FsaWduOgorICAgICAgICAvKiBJcyB0aGUgZmlyc3Qgc3RyaW5nIHdvcmQtYWxpZ25lZD8gICovCisgICAgICAgIGFuZHMgICAgaXAsIHIwLCAjMworICAgICAgICBiZXEgICAgIHdvcmRfYWxpZ25lZF9yMAorCisgICAgICAgIC8qIEZhc3QgY29tcGFyZSBieXRlIGJ5IGJ5dGUgdW50aWwgdGhlIGZpcnN0IHN0cmluZyBpcyB3b3JkLWFsaWduZWQuICAqLworICAgICAgICAvKiBUaGUgb2Zmc2V0IG9mIHIwIGZyb20gYSB3b3JkIGJvdW5kYXJ5IGlzIGluIGlwLiBUaHVzLCB0aGUgbnVtYmVyIG9mIGJ5dGVzCisgICAgICAgIHRvIHJlYWQgdW50aWwgdGhlIG5leHQgd29yZCBib3VuZGFyeSBpcyA0LWlwLiAgKi8KKyAgICAgICAgYmljICAgICByMCwgcjAsICMzCisgICAgICAgIGxkciAgICAgcjIsIFtyMF0sICM0CisgICAgICAgIGxzbHMgICAgaXAsIGlwLCAjMzEKKyAgICAgICAgYmVxICAgICBieXRlMgorICAgICAgICBiY3MgICAgIGJ5dGUzCisKK2J5dGUxOgorICAgICAgICBsZHJiICAgIGlwLCBbcjFdLCAjMQorICAgICAgICB1eHRiICAgIHIzLCByMiwgcm9yICNCWVRFMV9PRkZTRVQKKyAgICAgICAgc3VicyAgICBpcCwgcjMsIGlwCisgICAgICAgIGJuZSAgICAgZmFzdF9yZXR1cm4KKyAgICAgICAgbV9jYnogICByZWc9cjMsIGxhYmVsPWZhc3RfcmV0dXJuCisKK2J5dGUyOgorICAgICAgICBsZHJiICAgIGlwLCBbcjFdLCAjMQorICAgICAgICB1eHRiICAgIHIzLCByMiwgcm9yICNCWVRFMl9PRkZTRVQKKyAgICAgICAgc3VicyAgICBpcCwgcjMsIGlwCisgICAgICAgIGJuZSAgICAgZmFzdF9yZXR1cm4KKyAgICAgICAgbV9jYnogICByZWc9cjMsIGxhYmVsPWZhc3RfcmV0dXJuCisKK2J5dGUzOgorICAgICAgICBsZHJiICAgIGlwLCBbcjFdLCAjMQorICAgICAgICB1eHRiICAgIHIzLCByMiwgcm9yICNCWVRFM19PRkZTRVQKKyAgICAgICAgc3VicyAgICBpcCwgcjMsIGlwCisgICAgICAgIGJuZSAgICAgZmFzdF9yZXR1cm4KKyAgICAgICAgbV9jYm56ICByZWc9cjMsIGxhYmVsPXdvcmRfYWxpZ25lZF9yMAorCitmYXN0X3JldHVybjoKKyAgICAgICAgbW92ICAgICByMCwgaXAKKyAgICAgICAgYnggICAgICBscgorCit3b3JkX2FsaWduZWRfcjA6CisgICAgICAgIGluaXQKKyAgICAgICAgLyogVGhlIGZpcnN0IHN0cmluZyBpcyB3b3JkLWFsaWduZWQuICAqLworICAgICAgICAvKiBJcyB0aGUgc2Vjb25kIHN0cmluZyB3b3JkLWFsaWduZWQ/ICAqLworICAgICAgICBhbmRzICAgIGlwLCByMSwgIzMKKyAgICAgICAgYm5lICAgICBzdHJjbXBfdW5hbGlnbmVkCisKK3dvcmRfYWxpZ25lZDoKKyAgICAgICAgLyogVGhlIHN0cmluZ3MgYXJlIHdvcmQtYWxpZ25lZC4gKi8KKyAgICAgICAgLyogSXMgdGhlIGZpcnN0IHN0cmluZyBkb3VibGUtd29yZCBhbGlnbmVkPyAgKi8KKyAgICAgICAgdHN0ICAgICByMCwgIzQKKyAgICAgICAgYmVxICAgICBkb3VibGV3b3JkX2FsaWduZWRfcjAKKworICAgICAgICAvKiBJZiByMCBpcyBub3QgZG91YmxlLXdvcmQgYWxpZ25lZCB5ZXQsIGFsaWduIGl0IGJ5IGxvYWRpbmcKKyAgICAgICAgYW5kIGNvbXBhcmluZyB0aGUgbmV4dCB3b3JkIGZyb20gZWFjaCBzdHJpbmcuICAqLworICAgICAgICBsZHIgICAgIHIyLCBbcjBdLCAjNAorICAgICAgICBsZHIgICAgIHI0LCBbcjFdLCAjNAorICAgICAgICBtYWdpY19jb21wYXJlX2FuZF9icmFuY2ggdzE9cjIgdzI9cjQgbGFiZWw9cmV0dXJuXzI0CisKK2RvdWJsZXdvcmRfYWxpZ25lZF9yMDoKKyAgICAgICAgLyogR2V0IGhlcmUgd2hlbiByMCBpcyBkb3VibGUtd29yZCBhbGlnbmVkLiAgKi8KKyAgICAgICAgLyogSXMgcjEgZG91Ymxld29yZF9hbGlnbmVkPyAgKi8KKyAgICAgICAgdHN0ICAgICByMSwgIzQKKyAgICAgICAgYmVxICAgICBkb3VibGV3b3JkX2FsaWduZWQKKworICAgICAgICAvKiBHZXQgaGVyZSB3aGVuIHRoZSBzdHJpbmdzIHRvIGNvbXBhcmUgYXJlIHdvcmQtYWxpZ25lZCwKKyAgICAgICAgcjAgaXMgZG91YmxlLXdvcmQgYWxpZ25lZCwgYnV0IHIxIGlzIG5vdCBkb3VibGUtd29yZCBhbGlnbmVkLiAgKi8KKworICAgICAgICAvKiBJbml0aWFsaXplIHRoZSBxdWV1ZS4gICovCisgICAgICAgIGxkciAgICAgcjUsIFtyMV0sICM0CisKKyAgICAgICAgLyogQ29tcGFyZSB0d28gd29yZHMgaW4gZXZlcnkgaXRlcmF0aW9uLiAgKi8KKyAgICAgICAgLnAyYWxpZ24gICAgICAgIDIKKzM6CisgICAgICAgIHBsZCBbcjAsICMxNl0KKyAgICAgICAgcGxkIFtyMSwgIzE2XQorCisgICAgICAgIC8qIExvYWQgdGhlIG5leHQgZG91YmxlLXdvcmQgZnJvbSBlYWNoIHN0cmluZyBhbmQgY29tcGFyZS4gICovCisgICAgICAgIGxkcmQgICAgcjIsIHIzLCBbcjBdLCAjOAorICAgICAgICBtYWdpY19jb21wYXJlX2FuZF9icmFuY2ggdzE9cjIgdzI9cjUgbGFiZWw9cmV0dXJuXzI1CisgICAgICAgIGxkcmQgICAgcjQsIHI1LCBbcjFdLCAjOAorICAgICAgICBtYWdpY19jb21wYXJlX2FuZF9icmFuY2ggdzE9cjMgdzI9cjQgbGFiZWw9cmV0dXJuXzM0CisgICAgICAgIGIgICAgICAgM2IKKworICAgICAgICAubWFjcm8gbWlzY21wX3dvcmQgb2Zmc2V0bG8gb2Zmc2V0aGkKKyAgICAgICAgLyogTWFjcm8gdG8gY29tcGFyZSBtaXNhbGlnbmVkIHN0cmluZ3MuICAqLworICAgICAgICAvKiByMCwgcjEgYXJlIHdvcmQtYWxpZ25lZCwgYW5kIGF0IGxlYXN0IG9uZSBvZiB0aGUgc3RyaW5ncworICAgICAgICBpcyBub3QgZG91YmxlLXdvcmQgYWxpZ25lZC4gICovCisgICAgICAgIC8qIENvbXBhcmUgb25lIHdvcmQgaW4gZXZlcnkgbG9vcCBpdGVyYXRpb24uICAqLworICAgICAgICAvKiBPRkZTRVRMTyBpcyB0aGUgb3JpZ2luYWwgYml0LW9mZnNldCBvZiByMSBmcm9tIGEgd29yZC1ib3VuZGFyeSwKKyAgICAgICAgT0ZGU0VUSEkgaXMgMzIgLSBPRkZTRVRMTyAoaS5lLiwgb2Zmc2V0IGZyb20gdGhlIG5leHQgd29yZCkuICAqLworCisgICAgICAgIC8qIEluaXRpYWxpemUgdGhlIHNoaWZ0IHF1ZXVlLiAgKi8KKyAgICAgICAgbGRyICAgICByNSwgW3IxXSwgIzQKKworICAgICAgICAvKiBDb21wYXJlIG9uZSB3b3JkIGZyb20gZWFjaCBzdHJpbmcgaW4gZXZlcnkgbG9vcCBpdGVyYXRpb24uICAqLworICAgICAgICAucDJhbGlnbiAgICAgICAgMgorNzoKKyAgICAgICAgbGRyICAgICByMywgW3IwXSwgIzQKKyAgICAgICAgUzJMT01FTSByNSwgcjUsICNcb2Zmc2V0bG8KKyAgICAgICAgbWFnaWNfZmluZF96ZXJvX2J5dGVzIHcxPXIzCisgICAgICAgIGNtcCAgICAgcjcsIGlwLCBTMkhJTUVNICNcb2Zmc2V0bG8KKyAgICAgICAgYW5kICAgICByMiwgcjMsIHI2LCBTMkxPTUVNICNcb2Zmc2V0bG8KKyAgICAgICAgaXQgICAgICBlcQorICAgICAgICBjbXBlcSAgIHIyLCByNQorICAgICAgICBibmUgICAgIHJldHVybl8yNQorICAgICAgICBsZHIgICAgIHI1LCBbcjFdLCAjNAorICAgICAgICBjbXAgICAgIGlwLCAjMAorICAgICAgICBlb3IgcjMsIHIyLCByMworICAgICAgICBTMkhJTUVNIHIyLCByNSwgI1xvZmZzZXRoaQorICAgICAgICBpdCAgICAgIGVxCisgICAgICAgIGNtcGVxICAgcjMsIHIyCisgICAgICAgIGJuZSAgICAgcmV0dXJuXzMyCisgICAgICAgIGIgICAgICAgN2IKKyAgICAgICAgLmVuZG0gLyogbWlzY21wX3dvcmQgKi8KKworcmV0dXJuXzMyOgorICAgICAgICBzZXR1cF9yZXR1cm4gdzE9cjMsIHcyPXIyCisgICAgICAgIGIgICAgICAgZG9fcmV0dXJuCityZXR1cm5fMzQ6CisgICAgICAgIHNldHVwX3JldHVybiB3MT1yMywgdzI9cjQKKyAgICAgICAgYiAgICAgICBkb19yZXR1cm4KK3JldHVybl8yNToKKyAgICAgICAgc2V0dXBfcmV0dXJuIHcxPXIyLCB3Mj1yNQorICAgICAgICBiICAgICAgIGRvX3JldHVybgorcmV0dXJuXzM1OgorICAgICAgICBzZXR1cF9yZXR1cm4gdzE9cjMsIHcyPXI1CisgICAgICAgIGIgICAgICAgZG9fcmV0dXJuCityZXR1cm5fMjQ6CisgICAgICAgIHNldHVwX3JldHVybiB3MT1yMiwgdzI9cjQKKworZG9fcmV0dXJuOgorCisjaWZkZWYgX19BUk1FQl9fCisgICAgICAgIG1vdiAgICAgcjAsIGlwCisjZWxzZSAvKiBub3QgIF9fQVJNRUJfXyAqLworICAgICAgICByZXYgICAgIHIwLCBpcAorI2VuZGlmIC8qIG5vdCAgX19BUk1FQl9fICovCisKKyAgICAgICAgLyogUmVzdG9yZSB0ZW1wb3JhcmllcyBlYXJseSwgYmVmb3JlIGNvbXB1dGluZyB0aGUgcmV0dXJuIHZhbHVlLiAgKi8KKyAgICAgICAgbGRyZCAgICByNiwgcjcsIFtzcF0KKyAgICAgICAgbGRyZCAgICByNCwgcjUsIFtzcCwgIzhdCisgICAgICAgIGFkZHMgICAgc3AsIHNwLCAjMTYKKworICAgICAgICAvKiBUaGVyZSBpcyBhIHplcm8gb3IgYSBkaWZmZXJlbnQgYnl0ZSBiZXR3ZWVuIHIxIGFuZCByMi4gICovCisgICAgICAgIC8qIHIwIGNvbnRhaW5zIGEgbWFzayBvZiBhbGwtemVybyBieXRlcyBpbiByMS4gICovCisgICAgICAgIC8qIFVzaW5nIHIwIGFuZCBub3QgaXAgaGVyZSBiZWNhdXNlIGNieiByZXF1aXJlcyBsb3cgcmVnaXN0ZXIuICAqLworICAgICAgICBtX2NieiAgIHJlZz1yMCwgbGFiZWw9Y29tcHV0ZV9yZXR1cm5fdmFsdWUKKyAgICAgICAgY2x6ICAgICByMCwgcjAKKyAgICAgICAgLyogcjAgY29udGFpbnMgdGhlIG51bWJlciBvZiBiaXRzIG9uIHRoZSBsZWZ0IG9mIHRoZSBmaXJzdCBhbGwtemVybyBieXRlIGluIHIxLiAgKi8KKyAgICAgICAgcnNiICAgICByMCwgcjAsICMyNAorICAgICAgICAvKiBIZXJlLCByMCBjb250YWlucyB0aGUgbnVtYmVyIG9mIGJpdHMgb24gdGhlIHJpZ2h0IG9mIHRoZSBmaXJzdCBhbGwtemVybyBieXRlIGluIHIxLiAgKi8KKyAgICAgICAgbHNyICAgICByMSwgcjEsIHIwCisgICAgICAgIGxzciAgICAgcjIsIHIyLCByMAorCitjb21wdXRlX3JldHVybl92YWx1ZToKKyAgICAgICAgbW92cyAgICByMCwgIzEKKyAgICAgICAgY21wICAgICByMSwgcjIKKyAgICAgICAgLyogVGhlIHJldHVybiB2YWx1ZSBpcyBjb21wdXRlZCBhcyBmb2xsb3dzLgorICAgICAgICBJZiByMT5yMiB0aGVuIChDPT0xIGFuZCBaPT0wKSBhbmQgTFMgZG9lc24ndCBob2xkIGFuZCByMCBpcyAjMSBhdCByZXR1cm4uCisgICAgICAgIElmIHIxPHIyIHRoZW4gKEM9PTAgYW5kIFo9PTApIGFuZCB3ZSBleGVjdXRlIFNCQyB3aXRoIGNhcnJ5X2luPTAsCisgICAgICAgIHdoaWNoIG1lYW5zIHIwOj1yMC1yMC0xIGFuZCByMCBpcyAjLTEgYXQgcmV0dXJuLgorICAgICAgICBJZiByMT1yMiB0aGVuIChDPT0xIGFuZCBaPT0xKSBhbmQgd2UgZXhlY3V0ZSBTQkMgd2l0aCBjYXJyeV9pbj0xLAorICAgICAgICB3aGljaCBtZWFucyByMDo9cjAtcjAgYW5kIHIwIGlzICMwIGF0IHJldHVybi4KKyAgICAgICAgKEM9PTAgYW5kIFo9PTEpIGNhbm5vdCBoYXBwZW4gYmVjYXVzZSB0aGUgY2FycnkgYml0IGlzICJub3QgYm9ycm93Ii4gICovCisgICAgICAgIGl0ICAgICAgbHMKKyAgICAgICAgc2JjbHMgICByMCwgcjAsIHIwCisgICAgICAgIGJ4ICAgICAgbHIKKworICAgIC8qIFRoZSBjb2RlIGZyb20gdGhlIHByZXZpb3VzIHZlcnNpb24gb2Ygc3RyY21wLlMgaGFuZGxlcyBhbGwgb2YgdGhlCisgICAgICogY2FzZXMgd2hlcmUgdGhlIGZpcnN0IHN0cmluZyBhbmQgc2Vjb25kcyBzdHJpbmcgY2Fubm90IGJvdGggYmUKKyAgICAgKiBhbGlnbmVkIHRvIGEgd29yZCBib3VuZGFyeSBmYXN0ZXIgdGhhbiB0aGUgbmV3IGFsZ29yaXRobS4gU2VlCisgICAgICogYmlvbmljL2xpYmMvYXJjaC1hcm0vY29ydGV4LWExNS9iaW9uaWMvc3RyY21wLlMgZm9yIHRoZSB1bmVkaXRlZAorICAgICAqIHZlcnNpb24gb2YgdGhlIGNvZGUuCisgICAgICovCitzdHJjbXBfdW5hbGlnbmVkOgorCXdwMSAucmVxIHIwCisJd3AyIC5yZXEgcjEKKwliMSAgLnJlcSByMgorCXcxICAucmVxIHI0CisJdzIgIC5yZXEgcjUKKwl0MSAgLnJlcSBpcAorCUAgcjMgaXMgc2NyYXRjaAorCisyOgorCW1vdgliMSwgIzEKKwlvcnIJYjEsIGIxLCBiMSwgbHNsICM4CisJb3JyCWIxLCBiMSwgYjEsIGxzbCAjMTYKKworCWFuZAl0MSwgd3AyLCAjMworCWJpYwl3cDIsIHdwMiwgIzMKKwlsZHIJdzEsIFt3cDFdLCAjNAorCWxkcgl3MiwgW3dwMl0sICM0CisJY21wCXQxLCAjMgorCWJlcQkyZgorCWJoaQkzZgorCisJLyogQ3JpdGljYWwgaW5uZXIgTG9vcDogQmxvY2sgd2l0aCAzIGJ5dGVzIGluaXRpYWwgb3ZlcmxhcCAqLworCS5wMmFsaWduCTIKKzE6CisJYmljCXQxLCB3MSwgI01TQgorCWNtcAl0MSwgdzIsIFMyTE9NRU0gIzgKKwlzdWIJcjMsIHcxLCBiMQorCWJpYwlyMywgcjMsIHcxCisJYm5lCTRmCisJYW5kcwlyMywgcjMsIGIxLCBsc2wgIzcKKwlpdAllcQorCWxkcmVxCXcyLCBbd3AyXSwgIzQKKwlibmUJNWYKKwllb3IJdDEsIHQxLCB3MQorCWNtcAl0MSwgdzIsIFMySElNRU0gIzI0CisJYm5lCTZmCisJbGRyCXcxLCBbd3AxXSwgIzQKKwliCTFiCis0OgorCVMyTE9NRU0JdzIsIHcyLCAjOAorCWIJOGYKKworNToKKyNpZmRlZiBfX0FSTUVCX18KKwkvKiBUaGUgc3luZHJvbWUgdmFsdWUgbWF5IGNvbnRhaW4gZmFsc2Ugb25lcyBpZiB0aGUgc3RyaW5nIGVuZHMKKwkgKiB3aXRoIHRoZSBieXRlcyAweDAxIDB4MDAKKwkgKi8KKwl0c3QJdzEsICMweGZmMDAwMDAwCisJaXR0CW5lCisJdHN0bmUJdzEsICMweDAwZmYwMDAwCisJdHN0bmUJdzEsICMweDAwMDBmZjAwCisJYmVxCTdmCisjZWxzZQorCWJpY3MJcjMsIHIzLCAjMHhmZjAwMDAwMAorCWJuZQk3ZgorI2VuZGlmCisJbGRyYgl3MiwgW3dwMl0KKwlTMkxPTUVNCXQxLCB3MSwgIzI0CisjaWZkZWYgX19BUk1FQl9fCisJbHNsCXcyLCB3MiwgIzI0CisjZW5kaWYKKwliCThmCisKKzY6CisJUzJMT01FTQl0MSwgdzEsICMyNAorCWFuZAl3MiwgdzIsICNMU0IKKwliCThmCisKKwkvKiBDcml0aWNhbCBpbm5lciBMb29wOiBCbG9jayB3aXRoIDIgYnl0ZXMgaW5pdGlhbCBvdmVybGFwICovCisJLnAyYWxpZ24JMgorMjoKKwlTMkhJTUVNCXQxLCB3MSwgIzE2CisJc3ViCXIzLCB3MSwgYjEKKwlTMkxPTUVNCXQxLCB0MSwgIzE2CisJYmljCXIzLCByMywgdzEKKwljbXAJdDEsIHcyLCBTMkxPTUVNICMxNgorCWJuZQk0ZgorCWFuZHMJcjMsIHIzLCBiMSwgbHNsICM3CisJaXQJZXEKKwlsZHJlcQl3MiwgW3dwMl0sICM0CisJYm5lCTVmCisJZW9yCXQxLCB0MSwgdzEKKwljbXAJdDEsIHcyLCBTMkhJTUVNICMxNgorCWJuZQk2ZgorCWxkcgl3MSwgW3dwMV0sICM0CisJYgkyYgorCis1OgorI2lmZGVmIF9fQVJNRUJfXworCS8qIFRoZSBzeW5kcm9tZSB2YWx1ZSBtYXkgY29udGFpbiBmYWxzZSBvbmVzIGlmIHRoZSBzdHJpbmcgZW5kcworCSAqIHdpdGggdGhlIGJ5dGVzIDB4MDEgMHgwMAorCSAqLworCXRzdAl3MSwgIzB4ZmYwMDAwMDAKKwlpdAluZQorCXRzdG5lCXcxLCAjMHgwMGZmMDAwMAorCWJlcQk3ZgorI2Vsc2UKKwlsc2xzCXIzLCByMywgIzE2CisJYm5lCTdmCisjZW5kaWYKKwlsZHJoCXcyLCBbd3AyXQorCVMyTE9NRU0JdDEsIHcxLCAjMTYKKyNpZmRlZiBfX0FSTUVCX18KKwlsc2wJdzIsIHcyLCAjMTYKKyNlbmRpZgorCWIJOGYKKworNjoKKwlTMkhJTUVNCXcyLCB3MiwgIzE2CisJUzJMT01FTQl0MSwgdzEsICMxNgorNDoKKwlTMkxPTUVNCXcyLCB3MiwgIzE2CisJYgk4ZgorCisJLyogQ3JpdGljYWwgaW5uZXIgTG9vcDogQmxvY2sgd2l0aCAxIGJ5dGUgaW5pdGlhbCBvdmVybGFwICovCisJLnAyYWxpZ24JMgorMzoKKwlhbmQJdDEsIHcxLCAjTFNCCisJY21wCXQxLCB3MiwgUzJMT01FTSAjMjQKKwlzdWIJcjMsIHcxLCBiMQorCWJpYwlyMywgcjMsIHcxCisJYm5lCTRmCisJYW5kcwlyMywgcjMsIGIxLCBsc2wgIzcKKwlpdAllcQorCWxkcmVxCXcyLCBbd3AyXSwgIzQKKwlibmUJNWYKKwllb3IJdDEsIHQxLCB3MQorCWNtcAl0MSwgdzIsIFMySElNRU0gIzgKKwlibmUJNmYKKwlsZHIJdzEsIFt3cDFdLCAjNAorCWIJM2IKKzQ6CisJUzJMT01FTQl3MiwgdzIsICMyNAorCWIJOGYKKzU6CisJLyogVGhlIHN5bmRyb21lIHZhbHVlIG1heSBjb250YWluIGZhbHNlIG9uZXMgaWYgdGhlIHN0cmluZyBlbmRzCisJICogd2l0aCB0aGUgYnl0ZXMgMHgwMSAweDAwCisJICovCisJdHN0CXcxLCAjTFNCCisJYmVxCTdmCisJbGRyCXcyLCBbd3AyXSwgIzQKKzY6CisJUzJMT01FTQl0MSwgdzEsICM4CisJYmljCXcyLCB3MiwgI01TQgorCWIJOGYKKzc6CisJbW92CXIwLCAjMAorCisgICAgLyogUmVzdG9yZSByZWdpc3RlcnMgYW5kIHN0YWNrLiAqLworICAgIGxkcmQgICAgcjYsIHI3LCBbc3BdCisgICAgbGRyZCAgICByNCwgcjUsIFtzcCwgIzhdCisgICAgYWRkcyAgICBzcCwgc3AsICMxNgorCisJYngJbHIKKworODoKKwlhbmQJcjIsIHQxLCAjTFNCCisJYW5kCXIwLCB3MiwgI0xTQgorCWNtcAlyMCwgIzEKKwlpdAljcworCWNtcGNzCXIwLCByMgorCWl0dAllcQorCVMyTE9NRU1FUQl0MSwgdDEsICM4CisJUzJMT01FTUVRCXcyLCB3MiwgIzgKKwliZXEJOGIKKwlzdWIJcjAsIHIyLCByMAorCisgICAgLyogUmVzdG9yZSByZWdpc3RlcnMgYW5kIHN0YWNrLiAqLworICAgIGxkcmQgICAgcjYsIHI3LCBbc3BdCisgICAgbGRyZCAgICByNCwgcjUsIFtzcCwgIzhdCisgICAgYWRkcyAgICBzcCwgc3AsICMxNgorCisJYngJbHIKK0VORChzdHJjbXApCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL2NvcnRleC1hOS9jb3J0ZXgtYTkubWsgYi9saWJjL2FyY2gtYXJtL2NvcnRleC1hOS9jb3J0ZXgtYTkubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWM2ODRlZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vY29ydGV4LWE5L2NvcnRleC1hOS5tawpAQCAtMCwwICsxLDcgQEAKKyQoY2FsbCBsaWJjLWFkZC1jcHUtdmFyaWFudC1zcmMsTUVNQ1BZLGFyY2gtYXJtL2NvcnRleC1hOS9iaW9uaWMvbWVtY3B5LlMpCiskKGNhbGwgbGliYy1hZGQtY3B1LXZhcmlhbnQtc3JjLE1FTVNFVCxhcmNoLWFybS9jb3J0ZXgtYTkvYmlvbmljL21lbXNldC5TKQorJChjYWxsIGxpYmMtYWRkLWNwdS12YXJpYW50LXNyYyxTVFJDTVAsYXJjaC1hcm0vY29ydGV4LWE5L2Jpb25pYy9zdHJjbXAuUykKKyMgVXNlIGNvcnRleC1hMTUgdmVyc2lvbiBvZiBzdHJsZW4uCiskKGNhbGwgbGliYy1hZGQtY3B1LXZhcmlhbnQtc3JjLFNUUkxFTixhcmNoLWFybS9jb3J0ZXgtYTE1L2Jpb25pYy9zdHJsZW4uUykKKworaW5jbHVkZSBiaW9uaWMvbGliYy9hcmNoLWFybS9nZW5lcmljL2dlbmVyaWMubWsKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vZ2VuZXJpYy9iaW9uaWMvbWVtY3B5LlMgYi9saWJjL2FyY2gtYXJtL2dlbmVyaWMvYmlvbmljL21lbWNweS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4OTBhNTUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL2dlbmVyaWMvYmlvbmljL21lbWNweS5TCkBAIC0wLDAgKzEsMzgwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxtYWNoaW5lL2NwdS1mZWF0dXJlcy5oPgorI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+CisKKyAgICAgICAgLyoKKyAgICAgICAgICogT3B0aW1pemVkIG1lbWNweSgpIGZvciBBUk0uCisgICAgICAgICAqCisgICAgICAgICAqIG5vdGUgdGhhdCBtZW1jcHkoKSBhbHdheXMgcmV0dXJucyB0aGUgZGVzdGluYXRpb24gcG9pbnRlciwKKyAgICAgICAgICogc28gd2UgaGF2ZSB0byBwcmVzZXJ2ZSBSMC4KKyAgICAgICAgICovCisKK0VOVFJZKG1lbWNweSkKKyAgICAgICAgLyogVGhlIHN0YWNrIG11c3QgYWx3YXlzIGJlIDY0LWJpdHMgYWxpZ25lZCB0byBiZSBjb21wbGlhbnQgd2l0aCB0aGUKKyAgICAgICAgICogQVJNIEFCSS4gU2luY2Ugd2UgaGF2ZSB0byBzYXZlIFIwLCB3ZSBtaWdodCBhcyB3ZWxsIHNhdmUgUjQKKyAgICAgICAgICogd2hpY2ggd2UgY2FuIHVzZSBmb3IgYmV0dGVyIHBpcGVsaW5pbmcgb2YgdGhlIHJlYWRzIGJlbG93CisgICAgICAgICAqLworICAgICAgICAuc2F2ZSAgICAgICB7cjAsIHI0LCBscn0KKyAgICAgICAgc3RtZmQgICAgICAgc3AhLCB7cjAsIHI0LCBscn0KKyAgICAgICAgLyogTWFraW5nIHJvb20gZm9yIHI1LXIxMSB3aGljaCB3aWxsIGJlIHNwaWxsZWQgbGF0ZXIgKi8KKyAgICAgICAgLnBhZCAgICAgICAgIzI4CisgICAgICAgIHN1YiAgICAgICAgIHNwLCBzcCwgIzI4CisKKyAgICAgICAgLy8gcHJlbG9hZCB0aGUgZGVzdGluYXRpb24gYmVjYXVzZSB3ZSdsbCBhbGlnbiBpdCB0byBhIGNhY2hlIGxpbmUKKyAgICAgICAgLy8gd2l0aCBzbWFsbCB3cml0ZXMuIEFsc28gc3RhcnQgdGhlIHNvdXJjZSAicHVtcCIuCisgICAgICAgIFBMRCAgICAgICAgIChyMCwgIzApCisgICAgICAgIFBMRCAgICAgICAgIChyMSwgIzApCisgICAgICAgIFBMRCAgICAgICAgIChyMSwgIzMyKQorCisgICAgICAgIC8qIGl0IHNpbXBsaWZpZXMgdGhpbmdzIHRvIHRha2UgY2FyZSBvZiBsZW48NCBlYXJseSAqLworICAgICAgICBjbXAgICAgICAgICByMiwgIzQKKyAgICAgICAgYmxvICAgICAgICAgY29weV9sYXN0XzNfYW5kX3JldHVybgorCisgICAgICAgIC8qIGNvbXB1dGUgdGhlIG9mZnNldCB0byBhbGlnbiB0aGUgc291cmNlCisgICAgICAgICAqIG9mZnNldCA9ICg0LShzcmMmMykpJjMgPSAtc3JjICYgMworICAgICAgICAgKi8KKyAgICAgICAgcnNiICAgICAgICAgcjMsIHIxLCAjMAorICAgICAgICBhbmRzICAgICAgICByMywgcjMsICMzCisgICAgICAgIGJlcSAgICAgICAgIHNyY19hbGlnbmVkCisKKyAgICAgICAgLyogYWxpZ24gc291cmNlIHRvIDMyIGJpdHMuIFdlIG5lZWQgdG8gaW5zZXJ0IDIgaW5zdHJ1Y3Rpb25zIGJldHdlZW4KKyAgICAgICAgICogYSBsZHJbYnxoXSBhbmQgc3RyW2J8aF0gYmVjYXVzZSBieXRlIGFuZCBoYWxmLXdvcmQgaW5zdHJ1Y3Rpb25zCisgICAgICAgICAqIHN0YWxsIDIgY3ljbGVzLgorICAgICAgICAgKi8KKyAgICAgICAgbW92cyAgICAgICAgcjEyLCByMywgbHNsICMzMQorICAgICAgICBzdWIgICAgICAgICByMiwgcjIsIHIzICAgICAgLyogd2Uga25vdyB0aGF0IHIzIDw9IHIyIGJlY2F1c2UgcjIgPj0gNCAqLworICAgICAgICBsZHJtaWIgICAgICByMywgW3IxXSwgIzEKKyAgICAgICAgbGRyY3NiICAgICAgcjQsIFtyMV0sICMxCisgICAgICAgIGxkcmNzYiAgICAgIHIxMixbcjFdLCAjMQorICAgICAgICBzdHJtaWIgICAgICByMywgW3IwXSwgIzEKKyAgICAgICAgc3RyY3NiICAgICAgcjQsIFtyMF0sICMxCisgICAgICAgIHN0cmNzYiAgICAgIHIxMixbcjBdLCAjMQorCitzcmNfYWxpZ25lZDoKKworICAgICAgICAvKiBzZWUgaWYgc3JjIGFuZCBkc3QgYXJlIGFsaWduZWQgdG9nZXRoZXIgKGNvbmdydWVudCkgKi8KKyAgICAgICAgZW9yICAgICAgICAgcjEyLCByMCwgcjEKKyAgICAgICAgdHN0ICAgICAgICAgcjEyLCAjMworICAgICAgICBibmUgICAgICAgICBub25fY29uZ3J1ZW50CisKKyAgICAgICAgLyogVXNlIHBvc3QtaW5jcmltZW50IG1vZGUgZm9yIHN0bSB0byBzcGlsbCByNS1yMTEgdG8gcmVzZXJ2ZWQgc3RhY2sKKyAgICAgICAgICogZnJhbWUuIERvbid0IHVwZGF0ZSBzcC4KKyAgICAgICAgICovCisgICAgICAgIHN0bWVhICAgICAgIHNwLCB7cjUtcjExfQorCisgICAgICAgIC8qIGFsaWduIHRoZSBkZXN0aW5hdGlvbiB0byBhIGNhY2hlLWxpbmUgKi8KKyAgICAgICAgcnNiICAgICAgICAgcjMsIHIwLCAjMAorICAgICAgICBhbmRzICAgICAgICByMywgcjMsICMweDFDCisgICAgICAgIGJlcSAgICAgICAgIGNvbmdydWVudF9hbGlnbmVkMzIKKyAgICAgICAgY21wICAgICAgICAgcjMsIHIyCisgICAgICAgIGFuZGhpICAgICAgIHIzLCByMiwgIzB4MUMKKworICAgICAgICAvKiBjb25kaXRpb25hbGx5IGNvcGllcyAwIHRvIDcgd29yZHMgKGxlbmd0aCBpbiByMykgKi8KKyAgICAgICAgbW92cyAgICAgICAgcjEyLCByMywgbHNsICMyOAorICAgICAgICBsZG1jc2lhICAgICByMSEsIHtyNCwgcjUsIHI2LCByN30gICAvKiAxNiBieXRlcyAqLworICAgICAgICBsZG1taWlhICAgICByMSEsIHtyOCwgcjl9ICAgICAgICAgICAvKiAgOCBieXRlcyAqLworICAgICAgICBzdG1jc2lhICAgICByMCEsIHtyNCwgcjUsIHI2LCByN30KKyAgICAgICAgc3RtbWlpYSAgICAgcjAhLCB7cjgsIHI5fQorICAgICAgICB0c3QgICAgICAgICByMywgIzB4NAorICAgICAgICBsZHJuZSAgICAgICByMTAsW3IxXSwgIzQgICAgICAgICAgICAvKiAgNCBieXRlcyAqLworICAgICAgICBzdHJuZSAgICAgICByMTAsW3IwXSwgIzQKKyAgICAgICAgc3ViICAgICAgICAgcjIsIHIyLCByMworCitjb25ncnVlbnRfYWxpZ25lZDMyOgorICAgICAgICAvKgorICAgICAgICAgKiBoZXJlIHNvdXJjZSBpcyBhbGlnbmVkIHRvIDMyIGJ5dGVzLgorICAgICAgICAgKi8KKworY2FjaGVkX2FsaWduZWQzMjoKKyAgICAgICAgc3VicyAgICAgICAgcjIsIHIyLCAjMzIKKyAgICAgICAgYmxvICAgICAgICAgbGVzc190aGFuXzMyX2xlZnQKKworICAgICAgICAvKgorICAgICAgICAgKiBXZSBwcmVsb2FkIGEgY2FjaGUtbGluZSB1cCB0byA2NCBieXRlcyBhaGVhZC4gT24gdGhlIDkyNiwgdGhpcyB3aWxsCisgICAgICAgICAqIHN0YWxsIG9ubHkgdW50aWwgdGhlIHJlcXVlc3RlZCB3b3JsZCBpcyBmZXRjaGVkLCBidXQgdGhlIGxpbmVmaWxsCisgICAgICAgICAqIGNvbnRpbnVlcyBpbiB0aGUgdGhlIGJhY2tncm91bmQuCisgICAgICAgICAqIFdoaWxlIHRoZSBsaW5lZmlsbCBpcyBnb2luZywgd2Ugd3JpdGUgb3VyIHByZXZpb3VzIGNhY2hlLWxpbmUKKyAgICAgICAgICogaW50byB0aGUgd3JpdGUtYnVmZmVyICh3aGljaCBzaG91bGQgaGF2ZSBzb21lIGZyZWUgc3BhY2UpLgorICAgICAgICAgKiBXaGVuIHRoZSBsaW5lZmlsbCBpcyBkb25lLCB0aGUgd3JpdGVidWZmZXIgd2lsbAorICAgICAgICAgKiBzdGFydCBkdW1waW5nIGl0cyBjb250ZW50IGludG8gbWVtb3J5CisgICAgICAgICAqCisgICAgICAgICAqIFdoaWxlIGFsbCB0aGlzIGlzIGdvaW5nLCB3ZSB0aGVuIGxvYWQgYSBmdWxsIGNhY2hlIGxpbmUgaW50bworICAgICAgICAgKiA4IHJlZ2lzdGVycywgdGhpcyBjYWNoZSBsaW5lIHNob3VsZCBiZSBpbiB0aGUgY2FjaGUgYnkgbm93CisgICAgICAgICAqIChvciBwYXJ0bHkgaW4gdGhlIGNhY2hlKS4KKyAgICAgICAgICoKKyAgICAgICAgICogVGhpcyBjb2RlIHNob3VsZCB3b3JrIHdlbGwgcmVnYXJkbGVzcyBvZiB0aGUgc291cmNlL2Rlc3QgYWxpZ25tZW50LgorICAgICAgICAgKgorICAgICAgICAgKi8KKworICAgICAgICAvLyBBbGlnbiB0aGUgcHJlbG9hZCByZWdpc3RlciB0byBhIGNhY2hlLWxpbmUgYmVjYXVzZSB0aGUgY3B1IGRvZXMKKyAgICAgICAgLy8gImNyaXRpY2FsIHdvcmQgZmlyc3QiICh0aGUgZmlyc3Qgd29yZCByZXF1ZXN0ZWQgaXMgbG9hZGVkIGZpcnN0KS4KKyAgICAgICAgYmljICAgICAgICAgcjEyLCByMSwgIzB4MUYKKyAgICAgICAgYWRkICAgICAgICAgcjEyLCByMTIsICM2NAorCisxOiAgICAgIGxkbWlhICAgICAgIHIxISwgeyByNC1yMTEgfQorICAgICAgICBQTEQgICAgICAgICAocjEyLCAjNjQpCisgICAgICAgIHN1YnMgICAgICAgIHIyLCByMiwgIzMyCisKKyAgICAgICAgLy8gTk9URTogaWYgcjEyIGlzIG1vcmUgdGhhbiA2NCBhaGVhZCBvZiByMSwgdGhlIGZvbGxvd2luZyBsZHJoaQorICAgICAgICAvLyBmb3IgQVJNOSBwcmVsb2FkIHdpbGwgbm90IGJlIHNhZmVseSBndWFyZGVkIGJ5IHRoZSBwcmVjZWRpbmcgc3Vicy4KKyAgICAgICAgLy8gV2hlbiBpdCBpcyBzYWZlbHkgZ3VhcmRlZCB0aGUgb25seSBwb3NzaWJpbGl0eSB0byBoYXZlIFNJR1NFR1YgaGVyZQorICAgICAgICAvLyBpcyBiZWNhdXNlIHRoZSBjYWxsZXIgb3ZlcnN0YXRlcyB0aGUgbGVuZ3RoLgorICAgICAgICBsZHJoaSAgICAgICByMywgW3IxMl0sICMzMiAgICAgIC8qIGNoZWFwIEFSTTkgcHJlbG9hZCAqLworICAgICAgICBzdG1pYSAgICAgICByMCEsIHsgcjQtcjExIH0KKyAgICAgICAgYmhzICAgICAgICAgMWIKKworICAgICAgICBhZGQgICAgICAgICByMiwgcjIsICMzMgorCisKKworCitsZXNzX3RoYW5fMzJfbGVmdDoKKyAgICAgICAgLyoKKyAgICAgICAgICogbGVzcyB0aGFuIDMyIGJ5dGVzIGxlZnQgYXQgdGhpcyBwb2ludCAobGVuZ3RoIGluIHIyKQorICAgICAgICAgKi8KKworICAgICAgICAvKiBza2lwIGFsbCB0aGlzIGlmIHRoZXJlIGlzIG5vdGhpbmcgdG8gZG8sIHdoaWNoIHNob3VsZAorICAgICAgICAgKiBiZSBhIGNvbW1vbiBjYXNlIChpZiBub3QgZXhlY3V0ZWQgdGhlIGNvZGUgYmVsb3cgdGFrZXMKKyAgICAgICAgICogYWJvdXQgMTYgY3ljbGVzKQorICAgICAgICAgKi8KKyAgICAgICAgdHN0ICAgICAgICAgcjIsICMweDFGCisgICAgICAgIGJlcSAgICAgICAgIDFmCisKKyAgICAgICAgLyogY29uZGl0aW9ubmFseSBjb3BpZXMgMCB0byAzMSBieXRlcyAqLworICAgICAgICBtb3ZzICAgICAgICByMTIsIHIyLCBsc2wgIzI4CisgICAgICAgIGxkbWNzaWEgICAgIHIxISwge3I0LCByNSwgcjYsIHI3fSAgIC8qIDE2IGJ5dGVzICovCisgICAgICAgIGxkbW1paWEgICAgIHIxISwge3I4LCByOX0gICAgICAgICAgIC8qICA4IGJ5dGVzICovCisgICAgICAgIHN0bWNzaWEgICAgIHIwISwge3I0LCByNSwgcjYsIHI3fQorICAgICAgICBzdG1taWlhICAgICByMCEsIHtyOCwgcjl9CisgICAgICAgIG1vdnMgICAgICAgIHIxMiwgcjIsIGxzbCAjMzAKKyAgICAgICAgbGRyY3MgICAgICAgcjMsIFtyMV0sICM0ICAgICAgICAgICAgLyogIDQgYnl0ZXMgKi8KKyAgICAgICAgbGRybWloICAgICAgcjQsIFtyMV0sICMyICAgICAgICAgICAgLyogIDIgYnl0ZXMgKi8KKyAgICAgICAgc3RyY3MgICAgICAgcjMsIFtyMF0sICM0CisgICAgICAgIHN0cm1paCAgICAgIHI0LCBbcjBdLCAjMgorICAgICAgICB0c3QgICAgICAgICByMiwgIzB4MQorICAgICAgICBsZHJuZWIgICAgICByMywgW3IxXSAgICAgICAgICAgICAgICAvKiAgbGFzdCBieXRlICAqLworICAgICAgICBzdHJuZWIgICAgICByMywgW3IwXQorCisgICAgICAgIC8qIHdlJ3JlIGRvbmUhIHJlc3RvcmUgZXZlcnl0aGluZyBhbmQgcmV0dXJuICovCisxOiAgICAgIGxkbWZkICAgICAgIHNwISwge3I1LXIxMX0KKyAgICAgICAgbGRtZmQgICAgICAgc3AhLCB7cjAsIHI0LCBscn0KKyAgICAgICAgYnggICAgICAgICAgbHIKKworICAgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK25vbl9jb25ncnVlbnQ6CisgICAgICAgIC8qCisgICAgICAgICAqIGhlcmUgc291cmNlIGlzIGFsaWduZWQgdG8gNCBieXRlcworICAgICAgICAgKiBidXQgZGVzdGluYXRpb24gaXMgbm90LgorICAgICAgICAgKgorICAgICAgICAgKiBpbiB0aGUgY29kZSBiZWxvdyByMiBpcyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHJlYWQKKyAgICAgICAgICogKHRoZSBudW1iZXIgb2YgYnl0ZXMgd3JpdHRlbiBpcyBhbHdheXMgc21hbGxlciwgYmVjYXVzZSB3ZSBoYXZlCisgICAgICAgICAqIHBhcnRpYWwgd29yZHMgaW4gdGhlIHNoaWZ0IHF1ZXVlKQorICAgICAgICAgKi8KKyAgICAgICAgY21wICAgICAgICAgcjIsICM0CisgICAgICAgIGJsbyAgICAgICAgIGNvcHlfbGFzdF8zX2FuZF9yZXR1cm4KKworICAgICAgICAvKiBVc2UgcG9zdC1pbmNyaW1lbnQgbW9kZSBmb3Igc3RtIHRvIHNwaWxsIHI1LXIxMSB0byByZXNlcnZlZCBzdGFjaworICAgICAgICAgKiBmcmFtZS4gRG9uJ3QgdXBkYXRlIHNwLgorICAgICAgICAgKi8KKyAgICAgICAgc3RtZWEgICAgICAgc3AsIHtyNS1yMTF9CisKKyAgICAgICAgLyogY29tcHV0ZSBzaGlmdHMgbmVlZGVkIHRvIGFsaWduIHNyYyB0byBkZXN0ICovCisgICAgICAgIHJzYiAgICAgICAgIHI1LCByMCwgIzAKKyAgICAgICAgYW5kICAgICAgICAgcjUsIHI1LCAjMyAgICAgICAgICAvKiByNSA9ICMgYnl0ZXMgaW4gcGFydGlhbCB3b3JkcyAqLworICAgICAgICBtb3YgICAgICAgICByMTIsIHI1LCBsc2wgIzMgICAgIC8qIHIxMiA9IHJpZ2h0ICovCisgICAgICAgIHJzYiAgICAgICAgIGxyLCByMTIsICMzMiAgICAgICAgLyogbHIgPSBsZWZ0ICAqLworCisgICAgICAgIC8qIHJlYWQgdGhlIGZpcnN0IHdvcmQgKi8KKyAgICAgICAgbGRyICAgICAgICAgcjMsIFtyMV0sICM0CisgICAgICAgIHN1YiAgICAgICAgIHIyLCByMiwgIzQKKworICAgICAgICAvKiB3cml0ZSBhIHBhcnRpYWwgd29yZCAoMCB0byAzIGJ5dGVzKSwgc3VjaCB0aGF0IGRlc3RpbmF0aW9uCisgICAgICAgICAqIGJlY29tZXMgYWxpZ25lZCB0byAzMiBiaXRzIChyNSA9IG5iIG9mIHdvcmRzIHRvIGNvcHkgZm9yIGFsaWdubWVudCkKKyAgICAgICAgICovCisgICAgICAgIG1vdnMgICAgICAgIHI1LCByNSwgbHNsICMzMQorICAgICAgICBzdHJtaWIgICAgICByMywgW3IwXSwgIzEKKyAgICAgICAgbW92bWkgICAgICAgcjMsIHIzLCBsc3IgIzgKKyAgICAgICAgc3RyY3NiICAgICAgcjMsIFtyMF0sICMxCisgICAgICAgIG1vdmNzICAgICAgIHIzLCByMywgbHNyICM4CisgICAgICAgIHN0cmNzYiAgICAgIHIzLCBbcjBdLCAjMQorICAgICAgICBtb3ZjcyAgICAgICByMywgcjMsIGxzciAjOAorCisgICAgICAgIGNtcCAgICAgICAgIHIyLCAjNAorICAgICAgICBibG8gICAgICAgICBwYXJ0aWFsX3dvcmRfdGFpbAorCisgICAgICAgIC8qIEFsaWduIGRlc3RpbmF0aW9uIHRvIDMyIGJ5dGVzIChjYWNoZSBsaW5lIGJvdW5kYXJ5KSAqLworMTogICAgICB0c3QgICAgICAgICByMCwgIzB4MWMKKyAgICAgICAgYmVxICAgICAgICAgMmYKKyAgICAgICAgbGRyICAgICAgICAgcjUsIFtyMV0sICM0CisgICAgICAgIHN1YiAgICAgICAgIHIyLCByMiwgIzQKKyAgICAgICAgb3JyICAgICAgICAgcjQsIHIzLCByNSwgICAgIGxzbCBscgorICAgICAgICBtb3YgICAgICAgICByMywgcjUsICAgICAgICAgbHNyIHIxMgorICAgICAgICBzdHIgICAgICAgICByNCwgW3IwXSwgIzQKKyAgICAgICAgY21wICAgICAgICAgcjIsICM0CisgICAgICAgIGJocyAgICAgICAgIDFiCisgICAgICAgIGJsbyAgICAgICAgIHBhcnRpYWxfd29yZF90YWlsCisKKyAgICAgICAgLyogY29weSAzMiBieXRlcyBhdCBhIHRpbWUgKi8KKzI6ICAgICAgc3VicyAgICAgICAgcjIsIHIyLCAjMzIKKyAgICAgICAgYmxvICAgICAgICAgbGVzc190aGFuX3RoaXJ0eXR3bworCisgICAgICAgIC8qIFVzZSBpbW1lZGlhdGUgbW9kZSBmb3IgdGhlIHNoaWZ0cywgYmVjYXVzZSB0aGVyZSBpcyBhbiBleHRyYSBjeWNsZQorICAgICAgICAgKiBmb3IgcmVnaXN0ZXIgc2hpZnRzLCB3aGljaCBjb3VsZCBhY2NvdW50IGZvciB1cCB0byA1MCUgb2YKKyAgICAgICAgICogcGVyZm9ybWFuY2UgaGl0LgorICAgICAgICAgKi8KKworICAgICAgICBjbXAgICAgICAgICByMTIsICMyNAorICAgICAgICBiZXEgICAgICAgICBsb29wMjQKKyAgICAgICAgY21wICAgICAgICAgcjEyLCAjOAorICAgICAgICBiZXEgICAgICAgICBsb29wOAorCitsb29wMTY6CisgICAgICAgIGxkciAgICAgICAgIHIxMiwgW3IxXSwgIzQKKzE6ICAgICAgbW92ICAgICAgICAgcjQsIHIxMgorICAgICAgICBsZG1pYSAgICAgICByMSEsIHsgICByNSxyNixyNywgIHI4LHI5LHIxMCxyMTF9CisgICAgICAgIFBMRCAgICAgICAgIChyMSwgIzY0KQorICAgICAgICBzdWJzICAgICAgICByMiwgcjIsICMzMgorICAgICAgICBsZHJocyAgICAgICByMTIsIFtyMV0sICM0CisgICAgICAgIG9yciAgICAgICAgIHIzLCByMywgcjQsICAgICBsc2wgIzE2CisgICAgICAgIG1vdiAgICAgICAgIHI0LCByNCwgICAgICAgICBsc3IgIzE2CisgICAgICAgIG9yciAgICAgICAgIHI0LCByNCwgcjUsICAgICBsc2wgIzE2CisgICAgICAgIG1vdiAgICAgICAgIHI1LCByNSwgICAgICAgICBsc3IgIzE2CisgICAgICAgIG9yciAgICAgICAgIHI1LCByNSwgcjYsICAgICBsc2wgIzE2CisgICAgICAgIG1vdiAgICAgICAgIHI2LCByNiwgICAgICAgICBsc3IgIzE2CisgICAgICAgIG9yciAgICAgICAgIHI2LCByNiwgcjcsICAgICBsc2wgIzE2CisgICAgICAgIG1vdiAgICAgICAgIHI3LCByNywgICAgICAgICBsc3IgIzE2CisgICAgICAgIG9yciAgICAgICAgIHI3LCByNywgcjgsICAgICBsc2wgIzE2CisgICAgICAgIG1vdiAgICAgICAgIHI4LCByOCwgICAgICAgICBsc3IgIzE2CisgICAgICAgIG9yciAgICAgICAgIHI4LCByOCwgcjksICAgICBsc2wgIzE2CisgICAgICAgIG1vdiAgICAgICAgIHI5LCByOSwgICAgICAgICBsc3IgIzE2CisgICAgICAgIG9yciAgICAgICAgIHI5LCByOSwgcjEwLCAgICBsc2wgIzE2CisgICAgICAgIG1vdiAgICAgICAgIHIxMCwgcjEwLCAgICAgICBsc3IgIzE2CisgICAgICAgIG9yciAgICAgICAgIHIxMCwgcjEwLCByMTEsICBsc2wgIzE2CisgICAgICAgIHN0bWlhICAgICAgIHIwISwge3IzLHI0LHI1LHI2LCByNyxyOCxyOSxyMTB9CisgICAgICAgIG1vdiAgICAgICAgIHIzLCByMTEsICAgICAgICBsc3IgIzE2CisgICAgICAgIGJocyAgICAgICAgIDFiCisgICAgICAgIGIgICAgICAgICAgIGxlc3NfdGhhbl90aGlydHl0d28KKworbG9vcDg6CisgICAgICAgIGxkciAgICAgICAgIHIxMiwgW3IxXSwgIzQKKzE6ICAgICAgbW92ICAgICAgICAgcjQsIHIxMgorICAgICAgICBsZG1pYSAgICAgICByMSEsIHsgICByNSxyNixyNywgIHI4LHI5LHIxMCxyMTF9CisgICAgICAgIFBMRCAgICAgICAgIChyMSwgIzY0KQorICAgICAgICBzdWJzICAgICAgICByMiwgcjIsICMzMgorICAgICAgICBsZHJocyAgICAgICByMTIsIFtyMV0sICM0CisgICAgICAgIG9yciAgICAgICAgIHIzLCByMywgcjQsICAgICBsc2wgIzI0CisgICAgICAgIG1vdiAgICAgICAgIHI0LCByNCwgICAgICAgICBsc3IgIzgKKyAgICAgICAgb3JyICAgICAgICAgcjQsIHI0LCByNSwgICAgIGxzbCAjMjQKKyAgICAgICAgbW92ICAgICAgICAgcjUsIHI1LCAgICAgICAgIGxzciAjOAorICAgICAgICBvcnIgICAgICAgICByNSwgcjUsIHI2LCAgICAgbHNsICMyNAorICAgICAgICBtb3YgICAgICAgICByNiwgcjYsICAgICAgICAgbHNyICM4CisgICAgICAgIG9yciAgICAgICAgIHI2LCByNiwgcjcsICAgICBsc2wgIzI0CisgICAgICAgIG1vdiAgICAgICAgIHI3LCByNywgICAgICAgICBsc3IgIzgKKyAgICAgICAgb3JyICAgICAgICAgcjcsIHI3LCByOCwgICAgIGxzbCAjMjQKKyAgICAgICAgbW92ICAgICAgICAgcjgsIHI4LCAgICAgICAgIGxzciAjOAorICAgICAgICBvcnIgICAgICAgICByOCwgcjgsIHI5LCAgICAgbHNsICMyNAorICAgICAgICBtb3YgICAgICAgICByOSwgcjksICAgICAgICAgbHNyICM4CisgICAgICAgIG9yciAgICAgICAgIHI5LCByOSwgcjEwLCAgICBsc2wgIzI0CisgICAgICAgIG1vdiAgICAgICAgIHIxMCwgcjEwLCAgICAgICBsc3IgIzgKKyAgICAgICAgb3JyICAgICAgICAgcjEwLCByMTAsIHIxMSwgIGxzbCAjMjQKKyAgICAgICAgc3RtaWEgICAgICAgcjAhLCB7cjMscjQscjUscjYsIHI3LHI4LHI5LHIxMH0KKyAgICAgICAgbW92ICAgICAgICAgcjMsIHIxMSwgICAgICAgIGxzciAjOAorICAgICAgICBiaHMgICAgICAgICAxYgorICAgICAgICBiICAgICAgICAgICBsZXNzX3RoYW5fdGhpcnR5dHdvCisKK2xvb3AyNDoKKyAgICAgICAgbGRyICAgICAgICAgcjEyLCBbcjFdLCAjNAorMTogICAgICBtb3YgICAgICAgICByNCwgcjEyCisgICAgICAgIGxkbWlhICAgICAgIHIxISwgeyAgIHI1LHI2LHI3LCAgcjgscjkscjEwLHIxMX0KKyAgICAgICAgUExEICAgICAgICAgKHIxLCAjNjQpCisgICAgICAgIHN1YnMgICAgICAgIHIyLCByMiwgIzMyCisgICAgICAgIGxkcmhzICAgICAgIHIxMiwgW3IxXSwgIzQKKyAgICAgICAgb3JyICAgICAgICAgcjMsIHIzLCByNCwgICAgIGxzbCAjOAorICAgICAgICBtb3YgICAgICAgICByNCwgcjQsICAgICAgICAgbHNyICMyNAorICAgICAgICBvcnIgICAgICAgICByNCwgcjQsIHI1LCAgICAgbHNsICM4CisgICAgICAgIG1vdiAgICAgICAgIHI1LCByNSwgICAgICAgICBsc3IgIzI0CisgICAgICAgIG9yciAgICAgICAgIHI1LCByNSwgcjYsICAgICBsc2wgIzgKKyAgICAgICAgbW92ICAgICAgICAgcjYsIHI2LCAgICAgICAgIGxzciAjMjQKKyAgICAgICAgb3JyICAgICAgICAgcjYsIHI2LCByNywgICAgIGxzbCAjOAorICAgICAgICBtb3YgICAgICAgICByNywgcjcsICAgICAgICAgbHNyICMyNAorICAgICAgICBvcnIgICAgICAgICByNywgcjcsIHI4LCAgICAgbHNsICM4CisgICAgICAgIG1vdiAgICAgICAgIHI4LCByOCwgICAgICAgICBsc3IgIzI0CisgICAgICAgIG9yciAgICAgICAgIHI4LCByOCwgcjksICAgICBsc2wgIzgKKyAgICAgICAgbW92ICAgICAgICAgcjksIHI5LCAgICAgICAgIGxzciAjMjQKKyAgICAgICAgb3JyICAgICAgICAgcjksIHI5LCByMTAsICAgIGxzbCAjOAorICAgICAgICBtb3YgICAgICAgICByMTAsIHIxMCwgICAgICAgbHNyICMyNAorICAgICAgICBvcnIgICAgICAgICByMTAsIHIxMCwgcjExLCAgbHNsICM4CisgICAgICAgIHN0bWlhICAgICAgIHIwISwge3IzLHI0LHI1LHI2LCByNyxyOCxyOSxyMTB9CisgICAgICAgIG1vdiAgICAgICAgIHIzLCByMTEsICAgICAgICBsc3IgIzI0CisgICAgICAgIGJocyAgICAgICAgIDFiCisKKworbGVzc190aGFuX3RoaXJ0eXR3bzoKKyAgICAgICAgLyogY29weSB0aGUgbGFzdCAwIHRvIDMxIGJ5dGVzIG9mIHRoZSBzb3VyY2UgKi8KKyAgICAgICAgcnNiICAgICAgICAgcjEyLCBsciwgIzMyICAgICAgICAvKiB3ZSBjb3JydXB0ZWQgcjEyLCByZWNvbXB1dGUgaXQgICovCisgICAgICAgIGFkZCAgICAgICAgIHIyLCByMiwgIzMyCisgICAgICAgIGNtcCAgICAgICAgIHIyLCAjNAorICAgICAgICBibG8gICAgICAgICBwYXJ0aWFsX3dvcmRfdGFpbAorCisxOiAgICAgIGxkciAgICAgICAgIHI1LCBbcjFdLCAjNAorICAgICAgICBzdWIgICAgICAgICByMiwgcjIsICM0CisgICAgICAgIG9yciAgICAgICAgIHI0LCByMywgcjUsICAgICBsc2wgbHIKKyAgICAgICAgbW92ICAgICAgICAgcjMsIHI1LCAgICAgICAgIGxzciByMTIKKyAgICAgICAgc3RyICAgICAgICAgcjQsIFtyMF0sICM0CisgICAgICAgIGNtcCAgICAgICAgIHIyLCAjNAorICAgICAgICBiaHMgICAgICAgICAxYgorCitwYXJ0aWFsX3dvcmRfdGFpbDoKKyAgICAgICAgLyogd2UgaGF2ZSBhIHBhcnRpYWwgd29yZCBpbiB0aGUgaW5wdXQgYnVmZmVyICovCisgICAgICAgIG1vdnMgICAgICAgIHI1LCBsciwgbHNsICMoMzEtMykKKyAgICAgICAgc3RybWliICAgICAgcjMsIFtyMF0sICMxCisgICAgICAgIG1vdm1pICAgICAgIHIzLCByMywgbHNyICM4CisgICAgICAgIHN0cmNzYiAgICAgIHIzLCBbcjBdLCAjMQorICAgICAgICBtb3ZjcyAgICAgICByMywgcjMsIGxzciAjOAorICAgICAgICBzdHJjc2IgICAgICByMywgW3IwXSwgIzEKKworICAgICAgICAvKiBSZWZpbGwgc3BpbGxlZCByZWdpc3RlcnMgZnJvbSB0aGUgc3RhY2suIERvbid0IHVwZGF0ZSBzcC4gKi8KKyAgICAgICAgbGRtZmQgICAgICAgc3AsIHtyNS1yMTF9CisKK2NvcHlfbGFzdF8zX2FuZF9yZXR1cm46CisgICAgICAgIG1vdnMgICAgICAgIHIyLCByMiwgbHNsICMzMSAvKiBjb3B5IHJlbWFpbmluZyAwLCAxLCAyIG9yIDMgYnl0ZXMgKi8KKyAgICAgICAgbGRybWliICAgICAgcjIsIFtyMV0sICMxCisgICAgICAgIGxkcmNzYiAgICAgIHIzLCBbcjFdLCAjMQorICAgICAgICBsZHJjc2IgICAgICByMTIsW3IxXQorICAgICAgICBzdHJtaWIgICAgICByMiwgW3IwXSwgIzEKKyAgICAgICAgc3RyY3NiICAgICAgcjMsIFtyMF0sICMxCisgICAgICAgIHN0cmNzYiAgICAgIHIxMixbcjBdCisKKyAgICAgICAgLyogd2UncmUgZG9uZSEgcmVzdG9yZSBzcCBhbmQgc3BpbGxlZCByZWdpc3RlcnMgYW5kIHJldHVybiAqLworICAgICAgICBhZGQgICAgICAgICBzcCwgIHNwLCAjMjgKKyAgICAgICAgbGRtZmQgICAgICAgc3AhLCB7cjAsIHI0LCBscn0KKyAgICAgICAgYnggICAgICAgICAgbHIKK0VORChtZW1jcHkpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL2dlbmVyaWMvYmlvbmljL21lbXNldC5TIGIvbGliYy9hcmNoLWFybS9nZW5lcmljL2Jpb25pYy9tZW1zZXQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYzAzNGUwCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9nZW5lcmljL2Jpb25pYy9tZW1zZXQuUwpAQCAtMCwwICsxLDEwOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KKworICAgICAgICAvKgorICAgICAgICAgKiBPcHRpbWl6ZWQgbWVtc2V0KCkgZm9yIEFSTS4KKyAgICAgICAgICoKKyAgICAgICAgICogbWVtc2V0KCkgcmV0dXJucyBpdHMgZmlyc3QgYXJndW1lbnQuCisgICAgICAgICAqLworCitFTlRSWShiemVybykKKyAgICAgICAgbW92ICAgICByMiwgcjEKKyAgICAgICAgbW92ICAgICByMSwgIzAKK0VORChiemVybykKKworRU5UUlkobWVtc2V0KQorICAgICAgICAvKiBjb21wdXRlIHRoZSBvZmZzZXQgdG8gYWxpZ24gdGhlIGRlc3RpbmF0aW9uCisgICAgICAgICAqIG9mZnNldCA9ICg0LShzcmMmMykpJjMgPSAtc3JjICYgMworICAgICAgICAgKi8KKyAgICAgICAgLnNhdmUgICAgICAge3IwLCByNC1yNywgbHJ9CisgICAgICAgIHN0bWZkICAgICAgIHNwISwge3IwLCByNC1yNywgbHJ9CisgICAgICAgIHJzYiAgICAgICAgIHIzLCByMCwgIzAKKyAgICAgICAgYW5kcyAgICAgICAgcjMsIHIzLCAjMworICAgICAgICBjbXAgICAgICAgICByMywgcjIKKyAgICAgICAgbW92aGkgICAgICAgcjMsIHIyCisKKyAgICAgICAgLyogc3BsYXQgcjEgKi8KKyAgICAgICAgbW92ICAgICAgICAgcjEsIHIxLCBsc2wgIzI0CisgICAgICAgIG9yciAgICAgICAgIHIxLCByMSwgcjEsIGxzciAjOAorICAgICAgICBvcnIgICAgICAgICByMSwgcjEsIHIxLCBsc3IgIzE2CisKKyAgICAgICAgbW92cyAgICAgICAgcjEyLCByMywgbHNsICMzMQorICAgICAgICBzdHJjc2IgICAgICByMSwgW3IwXSwgIzEgICAgLyogY2FuJ3QgdXNlIHN0cmggKGFsaWdubWVudCB1bmtub3duKSAqLworICAgICAgICBzdHJjc2IgICAgICByMSwgW3IwXSwgIzEKKyAgICAgICAgc3RybWliICAgICAgcjEsIFtyMF0sICMxCisgICAgICAgIHN1YnMgICAgICAgIHIyLCByMiwgcjMKKyAgICAgICAgbGRtbHNmZCAgICAgc3AhLCB7cjAsIHI0LXI3LCBscn0gICAgLyogcmV0dXJuICovCisgICAgICAgIGJ4bHMgICAgICAgIGxyCisKKyAgICAgICAgLyogYWxpZ24gdGhlIGRlc3RpbmF0aW9uIHRvIGEgY2FjaGUtbGluZSAqLworICAgICAgICBtb3YgICAgICAgICByMTIsIHIxCisgICAgICAgIG1vdiAgICAgICAgIGxyLCByMQorICAgICAgICBtb3YgICAgICAgICByNCwgcjEKKyAgICAgICAgbW92ICAgICAgICAgcjUsIHIxCisgICAgICAgIG1vdiAgICAgICAgIHI2LCByMQorICAgICAgICBtb3YgICAgICAgICByNywgcjEKKworICAgICAgICByc2IgICAgICAgICByMywgcjAsICMwCisgICAgICAgIGFuZHMgICAgICAgIHIzLCByMywgIzB4MUMKKyAgICAgICAgYmVxICAgICAgICAgM2YKKyAgICAgICAgY21wICAgICAgICAgcjMsIHIyCisgICAgICAgIGFuZGhpICAgICAgIHIzLCByMiwgIzB4MUMKKyAgICAgICAgc3ViICAgICAgICAgcjIsIHIyLCByMworCisgICAgICAgIC8qIGNvbmRpdGlvbmFsbHkgd3JpdGVzIDAgdG8gNyB3b3JkcyAobGVuZ3RoIGluIHIzKSAqLworICAgICAgICBtb3ZzICAgICAgICByMywgcjMsIGxzbCAjMjgKKyAgICAgICAgc3RtY3NpYSAgICAgcjAhLCB7cjEsIGxyfQorICAgICAgICBzdG1jc2lhICAgICByMCEsIHtyMSwgbHJ9CisgICAgICAgIHN0bW1paWEgICAgIHIwISwge3IxLCBscn0KKyAgICAgICAgbW92cyAgICAgICAgcjMsIHIzLCBsc2wgIzIKKyAgICAgICAgc3RyY3MgICAgICAgcjEsIFtyMF0sICM0CisKKzM6CisgICAgICAgIHN1YnMgICAgICAgIHIyLCByMiwgIzMyCisgICAgICAgIG1vdiAgICAgICAgIHIzLCByMQorICAgICAgICBibWkgICAgICAgICAyZgorMTogICAgICBzdWJzICAgICAgICByMiwgcjIsICMzMgorICAgICAgICBzdG1pYSAgICAgICByMCEsIHtyMSxyMyxyNCxyNSxyNixyNyxyMTIsbHJ9CisgICAgICAgIGJocyAgICAgICAgIDFiCisyOiAgICAgIGFkZCAgICAgICAgIHIyLCByMiwgIzMyCisKKyAgICAgICAgLyogY29uZGl0aW9uYWxseSBzdG9yZXMgMCB0byAzMSBieXRlcyAqLworICAgICAgICBtb3ZzICAgICAgICByMiwgcjIsIGxzbCAjMjgKKyAgICAgICAgc3RtY3NpYSAgICAgcjAhLCB7cjEscjMscjEyLGxyfQorICAgICAgICBzdG1taWlhICAgICByMCEsIHtyMSwgbHJ9CisgICAgICAgIG1vdnMgICAgICAgIHIyLCByMiwgbHNsICMyCisgICAgICAgIHN0cmNzICAgICAgIHIxLCBbcjBdLCAjNAorICAgICAgICBzdHJtaWggICAgICByMSwgW3IwXSwgIzIKKyAgICAgICAgbW92cyAgICAgICAgcjIsIHIyLCBsc2wgIzIKKyAgICAgICAgc3RyY3NiICAgICAgcjEsIFtyMF0KKyAgICAgICAgbGRtZmQgICAgICAgc3AhLCB7cjAsIHI0LXI3LCBscn0KKyAgICAgICAgYnggICAgICAgICAgbHIKK0VORChtZW1zZXQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL2dlbmVyaWMvYmlvbmljL3N0cmNtcC5TIGIvbGliYy9hcmNoLWFybS9nZW5lcmljL2Jpb25pYy9zdHJjbXAuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NjRhNTMxCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9nZW5lcmljL2Jpb25pYy9zdHJjbXAuUwpAQCAtMCwwICsxLDMxNyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBDb3B5cmlnaHQgKGMpIDIwMDggQVJNIEx0ZAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIFRoZSBuYW1lIG9mIHRoZSBjb21wYW55IG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUKKyAqICAgIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbgorICogICAgcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFSTSBMVEQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVECisgKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KKyAqIElOIE5PIEVWRU5UIFNIQUxMIEFSTSBMVEQgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRAorICogVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKKyAqIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPG1hY2hpbmUvY3B1LWZlYXR1cmVzLmg+CisjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KKworCS50ZXh0CisKKyNpZmRlZiBfX0FSTUVCX18KKyNkZWZpbmUgU0hGVDJMU0IgbHNsCisjZGVmaW5lIFNIRlQyTFNCRVEgbHNsZXEKKyNkZWZpbmUgU0hGVDJNU0IgbHNyCisjZGVmaW5lIFNIRlQyTVNCRVEgbHNyZXEKKyNkZWZpbmUgTVNCIDB4MDAwMDAwZmYKKyNkZWZpbmUgTFNCIDB4ZmYwMDAwMDAKKyNlbHNlCisjZGVmaW5lIFNIRlQyTFNCIGxzcgorI2RlZmluZSBTSEZUMkxTQkVRIGxzcmVxCisjZGVmaW5lIFNIRlQyTVNCIGxzbAorI2RlZmluZSBTSEZUMk1TQkVRIGxzbGVxCisjZGVmaW5lIE1TQiAweGZmMDAwMDAwCisjZGVmaW5lIExTQiAweDAwMDAwMGZmCisjZW5kaWYKKworI2RlZmluZSBtYWdpYzEoUkVHKSBSRUcKKyNkZWZpbmUgbWFnaWMyKFJFRykgUkVHLCBsc2wgIzcKKworRU5UUlkoc3RyY21wKQorCVBMRChyMCwgIzApCisJUExEKHIxLCAjMCkKKwllb3IJcjIsIHIwLCByMQorCXRzdAlyMiwgIzMKKworCS8qIFN0cmluZ3Mgbm90IGF0IHNhbWUgYnl0ZSBvZmZzZXQgZnJvbSBhIHdvcmQgYm91bmRhcnkuICAqLworCWJuZQkuTHN0cmNtcF91bmFsaWduZWQKKwlhbmRzCXIyLCByMCwgIzMKKwliaWMJcjAsIHIwLCAjMworCWJpYwlyMSwgcjEsICMzCisJbGRyCWlwLCBbcjBdLCAjNAorCWl0CWVxCisJbGRyZXEJcjMsIFtyMV0sICM0CisJYmVxCTFmCisKKwkvKiBBbHRob3VnaCBzMSBhbmQgczIgaGF2ZSBpZGVudGljYWwgaW5pdGlhbCBhbGlnbm1lbnQsIHRoZXkgYXJlCisJICogbm90IGN1cnJlbnRseSB3b3JkIGFsaWduZWQuICBSYXRoZXIgdGhhbiBjb21wYXJpbmcgYnl0ZXMsCisJICogbWFrZSBzdXJlIHRoYXQgYW55IGJ5dGVzIGZldGNoZWQgZnJvbSBiZWZvcmUgdGhlIGFkZHJlc3NlZAorCSAqIGJ5dGVzIGFyZSBmb3JjZWQgdG8gMHhmZi4gIFRoZW4gdGhleSB3aWxsIGFsd2F5cyBjb21wYXJlCisJICogZXF1YWwuCisJICovCisJZW9yCXIyLCByMiwgIzMKKwlsc2wJcjIsIHIyLCAjMworCW12bglyMywgI01TQgorCVNIRlQyTFNCCXIyLCByMywgcjIKKwlsZHIJcjMsIFtyMV0sICM0CisJb3JyCWlwLCBpcCwgcjIKKwlvcnIJcjMsIHIzLCByMgorMToKKwkvKiBMb2FkIHRoZSAnbWFnaWMnIGNvbnN0YW50IDB4MDEwMTAxMDEuICovCisJc3RyCXI0LCBbc3AsICMtNF0hCisJbW92CXI0LCAjMQorCW9ycglyNCwgcjQsIHI0LCBsc2wgIzgKKwlvcnIJcjQsIHI0LCByNCwgbHNsICMxNgorCS5wMmFsaWduCTIKKzQ6CisJUExEKHIwLCAjOCkKKwlQTEQocjEsICM4KQorCXN1YglyMiwgaXAsIG1hZ2ljMShyNCkKKwljbXAJaXAsIHIzCisJaXR0dHQJZXEKKworCS8qIGNoZWNrIGZvciBhbnkgemVybyBieXRlcyBpbiBmaXJzdCB3b3JkICovCisJYmljZXEJcjIsIHIyLCBpcAorCXRzdGVxCXIyLCBtYWdpYzIocjQpCisJbGRyZXEJaXAsIFtyMF0sICM0CisJbGRyZXEJcjMsIFtyMV0sICM0CisJYmVxCTRiCisyOgorCS8qIFRoZXJlJ3MgYSB6ZXJvIG9yIGEgZGlmZmVyZW50IGJ5dGUgaW4gdGhlIHdvcmQgKi8KKwlTSEZUMk1TQglyMCwgaXAsICMyNAorCVNIRlQyTFNCCWlwLCBpcCwgIzgKKwljbXAJcjAsICMxCisJaXQJY3MKKwljbXBjcwlyMCwgcjMsIFNIRlQyTVNCICMyNAorCWl0CWVxCisJU0hGVDJMU0JFUSByMywgcjMsICM4CisJYmVxCTJiCisJLyogT24gYSBiaWctZW5kaWFuIG1hY2hpbmUsIHIwIGNvbnRhaW5zIHRoZSBkZXNpcmVkIGJ5dGUgaW4gYml0cworCSAqIDAtNzsgb24gYSBsaXR0bGUtZW5kaWFuIG1hY2hpbmUgdGhleSBhcmUgaW4gYml0cyAyNC0zMS4gIEluCisJICogYm90aCBjYXNlcyB0aGUgb3RoZXIgYml0cyBpbiByMCBhcmUgYWxsIHplcm8uICBGb3IgcjMgdGhlCisJICogaW50ZXJlc3RpbmcgYnl0ZSBpcyBhdCB0aGUgb3RoZXIgZW5kIG9mIHRoZSB3b3JkLCBidXQgdGhlCisJICogb3RoZXIgYml0cyBhcmUgbm90IG5lY2Vzc2FyaWx5IHplcm8uICBXZSBuZWVkIGEgc2lnbmVkIHJlc3VsdAorCSAqIHJlcHJlc2VudGluZyB0aGUgZGlmZmVybmVjZSBpbiB0aGUgdW5zaWduZWQgYnl0ZXMsIHNvIGZvciB0aGUKKwkgKiBsaXR0bGUtZW5kaWFuIGNhc2Ugd2UgY2FuJ3QganVzdCBzaGlmdCB0aGUgaW50ZXJlc3RpbmcgYml0cyB1cC4KKwkgKi8KKyNpZmRlZiBfX0FSTUVCX18KKwlzdWIJcjAsIHIwLCByMywgbHNyICMyNAorI2Vsc2UKKwlhbmQJcjMsIHIzLCAjMjU1CisJLyogTm8gUlNCIGluc3RydWN0aW9uIGluIFRodW1iMiAqLworI2lmZGVmIF9fdGh1bWIyX18KKwlsc3IJcjAsIHIwLCAjMjQKKwlzdWIJcjAsIHIwLCByMworI2Vsc2UKKwlyc2IJcjAsIHIzLCByMCwgbHNyICMyNAorI2VuZGlmCisjZW5kaWYKKwlsZHIJcjQsIFtzcF0sICM0CisJYngJbHIKKworLkxzdHJjbXBfdW5hbGlnbmVkOgorCXdwMSAucmVxIHIwCisJd3AyIC5yZXEgcjEKKwliMSAgLnJlcSByMgorCXcxICAucmVxIHI0CisJdzIgIC5yZXEgcjUKKwl0MSAgLnJlcSBpcAorCUAgcjMgaXMgc2NyYXRjaAorCisJLyogRmlyc3Qgb2YgYWxsLCBjb21wYXJlIGJ5dGVzIHVudGlsIHdwMShzcDEpIGlzIHdvcmQtYWxpZ25lZC4gKi8KKzE6CisJdHN0CXdwMSwgIzMKKwliZXEJMmYKKwlsZHJiCXIyLCBbd3AxXSwgIzEKKwlsZHJiCXIzLCBbd3AyXSwgIzEKKwljbXAJcjIsICMxCisJaXQJY3MKKwljbXBjcwlyMiwgcjMKKwliZXEJMWIKKwlzdWIJcjAsIHIyLCByMworCWJ4CWxyCisKKzI6CisJc3RyCXI1LCBbc3AsICMtNF0hCisJc3RyCXI0LCBbc3AsICMtNF0hCisJbW92CWIxLCAjMQorCW9ycgliMSwgYjEsIGIxLCBsc2wgIzgKKwlvcnIJYjEsIGIxLCBiMSwgbHNsICMxNgorCisJYW5kCXQxLCB3cDIsICMzCisJYmljCXdwMiwgd3AyLCAjMworCWxkcgl3MSwgW3dwMV0sICM0CisJbGRyCXcyLCBbd3AyXSwgIzQKKwljbXAJdDEsICMyCisJYmVxCTJmCisJYmhpCTNmCisKKwkvKiBDcml0aWNhbCBpbm5lciBMb29wOiBCbG9jayB3aXRoIDMgYnl0ZXMgaW5pdGlhbCBvdmVybGFwICovCisJLnAyYWxpZ24JMgorMToKKwliaWMJdDEsIHcxLCAjTVNCCisJY21wCXQxLCB3MiwgU0hGVDJMU0IgIzgKKwlzdWIJcjMsIHcxLCBiMQorCWJpYwlyMywgcjMsIHcxCisJYm5lCTRmCisJYW5kcwlyMywgcjMsIGIxLCBsc2wgIzcKKwlpdAllcQorCWxkcmVxCXcyLCBbd3AyXSwgIzQKKwlibmUJNWYKKwllb3IJdDEsIHQxLCB3MQorCWNtcAl0MSwgdzIsIFNIRlQyTVNCICMyNAorCWJuZQk2ZgorCWxkcgl3MSwgW3dwMV0sICM0CisJYgkxYgorNDoKKwlTSEZUMkxTQgl3MiwgdzIsICM4CisJYgk4ZgorCis1OgorI2lmZGVmIF9fQVJNRUJfXworCS8qIFRoZSBzeW5kcm9tZSB2YWx1ZSBtYXkgY29udGFpbiBmYWxzZSBvbmVzIGlmIHRoZSBzdHJpbmcgZW5kcworCSAqIHdpdGggdGhlIGJ5dGVzIDB4MDEgMHgwMAorCSAqLworCXRzdAl3MSwgIzB4ZmYwMDAwMDAKKwlpdHQJbmUKKwl0c3RuZQl3MSwgIzB4MDBmZjAwMDAKKwl0c3RuZQl3MSwgIzB4MDAwMGZmMDAKKwliZXEJN2YKKyNlbHNlCisJYmljcwlyMywgcjMsICMweGZmMDAwMDAwCisJYm5lCTdmCisjZW5kaWYKKwlsZHJiCXcyLCBbd3AyXQorCVNIRlQyTFNCCXQxLCB3MSwgIzI0CisjaWZkZWYgX19BUk1FQl9fCisJbHNsCXcyLCB3MiwgIzI0CisjZW5kaWYKKwliCThmCisKKzY6CisJU0hGVDJMU0IJdDEsIHcxLCAjMjQKKwlhbmQJdzIsIHcyLCAjTFNCCisJYgk4ZgorCisJLyogQ3JpdGljYWwgaW5uZXIgTG9vcDogQmxvY2sgd2l0aCAyIGJ5dGVzIGluaXRpYWwgb3ZlcmxhcCAqLworCS5wMmFsaWduCTIKKzI6CisJU0hGVDJNU0IJdDEsIHcxLCAjMTYKKwlzdWIJcjMsIHcxLCBiMQorCVNIRlQyTFNCCXQxLCB0MSwgIzE2CisJYmljCXIzLCByMywgdzEKKwljbXAJdDEsIHcyLCBTSEZUMkxTQiAjMTYKKwlibmUJNGYKKwlhbmRzCXIzLCByMywgYjEsIGxzbCAjNworCWl0CWVxCisJbGRyZXEJdzIsIFt3cDJdLCAjNAorCWJuZQk1ZgorCWVvcgl0MSwgdDEsIHcxCisJY21wCXQxLCB3MiwgU0hGVDJNU0IgIzE2CisJYm5lCTZmCisJbGRyCXcxLCBbd3AxXSwgIzQKKwliCTJiCisKKzU6CisjaWZkZWYgX19BUk1FQl9fCisJLyogVGhlIHN5bmRyb21lIHZhbHVlIG1heSBjb250YWluIGZhbHNlIG9uZXMgaWYgdGhlIHN0cmluZyBlbmRzCisJICogd2l0aCB0aGUgYnl0ZXMgMHgwMSAweDAwCisJICovCisJdHN0CXcxLCAjMHhmZjAwMDAwMAorCWl0CW5lCisJdHN0bmUJdzEsICMweDAwZmYwMDAwCisJYmVxCTdmCisjZWxzZQorCWxzbHMJcjMsIHIzLCAjMTYKKwlibmUJN2YKKyNlbmRpZgorCWxkcmgJdzIsIFt3cDJdCisJU0hGVDJMU0IJdDEsIHcxLCAjMTYKKyNpZmRlZiBfX0FSTUVCX18KKwlsc2wJdzIsIHcyLCAjMTYKKyNlbmRpZgorCWIJOGYKKworNjoKKwlTSEZUMk1TQgl3MiwgdzIsICMxNgorCVNIRlQyTFNCCXQxLCB3MSwgIzE2Cis0OgorCVNIRlQyTFNCCXcyLCB3MiwgIzE2CisJYgk4ZgorCisJLyogQ3JpdGljYWwgaW5uZXIgTG9vcDogQmxvY2sgd2l0aCAxIGJ5dGUgaW5pdGlhbCBvdmVybGFwICovCisJLnAyYWxpZ24JMgorMzoKKwlhbmQJdDEsIHcxLCAjTFNCCisJY21wCXQxLCB3MiwgU0hGVDJMU0IgIzI0CisJc3ViCXIzLCB3MSwgYjEKKwliaWMJcjMsIHIzLCB3MQorCWJuZQk0ZgorCWFuZHMJcjMsIHIzLCBiMSwgbHNsICM3CisJaXQJZXEKKwlsZHJlcQl3MiwgW3dwMl0sICM0CisJYm5lCTVmCisJZW9yCXQxLCB0MSwgdzEKKwljbXAJdDEsIHcyLCBTSEZUMk1TQiAjOAorCWJuZQk2ZgorCWxkcgl3MSwgW3dwMV0sICM0CisJYgkzYgorNDoKKwlTSEZUMkxTQgl3MiwgdzIsICMyNAorCWIJOGYKKzU6CisJLyogVGhlIHN5bmRyb21lIHZhbHVlIG1heSBjb250YWluIGZhbHNlIG9uZXMgaWYgdGhlIHN0cmluZyBlbmRzCisJICogd2l0aCB0aGUgYnl0ZXMgMHgwMSAweDAwCisJICovCisJdHN0CXcxLCAjTFNCCisJYmVxCTdmCisJbGRyCXcyLCBbd3AyXSwgIzQKKzY6CisJU0hGVDJMU0IJdDEsIHcxLCAjOAorCWJpYwl3MiwgdzIsICNNU0IKKwliCThmCis3OgorCW1vdglyMCwgIzAKKwlsZHIJcjQsIFtzcF0sICM0CisJbGRyCXI1LCBbc3BdLCAjNAorCWJ4CWxyCisKKzg6CisJYW5kCXIyLCB0MSwgI0xTQgorCWFuZAlyMCwgdzIsICNMU0IKKwljbXAJcjAsICMxCisJaXQJY3MKKwljbXBjcwlyMCwgcjIKKwlpdHQJZXEKKwlTSEZUMkxTQkVRCXQxLCB0MSwgIzgKKwlTSEZUMkxTQkVRCXcyLCB3MiwgIzgKKwliZXEJOGIKKwlzdWIJcjAsIHIyLCByMAorCWxkcglyNCwgW3NwXSwgIzQKKwlsZHIJcjUsIFtzcF0sICM0CisJYngJbHIKK0VORChzdHJjbXApCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL2dlbmVyaWMvYmlvbmljL3N0cmxlbi5jIGIvbGliYy9hcmNoLWFybS9nZW5lcmljL2Jpb25pYy9zdHJsZW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MjRjZjc4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9nZW5lcmljL2Jpb25pYy9zdHJsZW4uYwpAQCAtMCwwICsxLDEzOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPG1hY2hpbmUvY3B1LWZlYXR1cmVzLmg+CisKK3NpemVfdCBzdHJsZW4oY29uc3QgY2hhciAqcykKK3sKKyAgICBfX2J1aWx0aW5fcHJlZmV0Y2gocyk7CisgICAgX19idWlsdGluX3ByZWZldGNoKHMrMzIpOworCisgICAgdW5pb24geworICAgICAgICBjb25zdCBjaGFyICAgICAgKmI7CisgICAgICAgIGNvbnN0IHVpbnQzMl90ICAqdzsKKyAgICAgICAgdWludHB0cl90ICAgICAgIGk7CisgICAgfSB1OworCisgICAgLy8gdGhlc2UgYXJlIHNvbWUgc2NyYXRjaCB2YXJpYWJsZXMgZm9yIHRoZSBhc20gY29kZSBiZWxvdworICAgIHVpbnQzMl90IHYsIHQ7CisKKyAgICAvLyBpbml0aWFsaXplIHRoZSBzdHJpbmcgbGVuZ3RoIHRvIHplcm8KKyAgICBzaXplX3QgbCA9IDA7CisKKyAgICAvLyBhbGlnbiB0aGUgcG9pbnRlciB0byBhIDMyLWJpdCB3b3JkIGJvdW5kYXJ5CisgICAgdS5iID0gczsKKyAgICB3aGlsZSAodS5pICYgMHgzKSAgeworICAgICAgICBpZiAoX19idWlsdGluX2V4cGVjdCgqdS5iKysgPT0gMCwgMCkpIHsKKyAgICAgICAgICAgIGdvdG8gZG9uZTsKKyAgICAgICAgfQorICAgICAgICBsKys7CisgICAgfQorCisgICAgLy8gbG9vcCBmb3IgZWFjaCB3b3JkLCB0ZXN0aW5nIGlmIGl0IGNvbnRhaW5zIGEgemVybyBieXRlCisgICAgLy8gaWYgc28sIGV4aXQgdGhlIGxvb3AgYW5kIHVwZGF0ZSB0aGUgbGVuZ3RoLgorICAgIC8vIFdlIG5lZWQgdG8gcHJvY2VzcyAzMiBieXRlcyBwZXIgbG9vcCB0byBzY2hlZHVsZSBQTEQgcHJvcGVybHkKKyAgICAvLyBhbmQgYWNoaWV2ZSB0aGUgbWF4aW11bSBidXMgc3BlZWQuCisgICAgYXNtKAorICAgICAgICAibGRyICAgICAlW3ZdLCBbJVtzXV0sICM0ICAgICAgICAgICBcbiIKKyAgICAgICAgInN1YiAgICAgJVtsXSwgJVtsXSwgJVtzXSAgICAgICAgICAgXG4iCisgICAgICAgICIwOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorI2lmIF9fQVJNX0hBVkVfUExECisgICAgICAgICJwbGQgICAgIFslW3NdLCAjNjRdICAgICAgICAgICAgICAgIFxuIgorI2VuZGlmCisgICAgICAgICJzdWIgICAgICVbdF0sICVbdl0sICVbbWFza10sIGxzciAjN1xuIgorICAgICAgICAiYW5kICAgICAlW3RdLCAlW3RdLCAlW21hc2tdICAgICAgICBcbiIKKyAgICAgICAgImJpY3MgICAgJVt0XSwgJVt0XSwgJVt2XSAgICAgICAgICAgXG4iCisgICAgICAgICJpdCAgICAgIGVxICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorICAgICAgICAibGRyZXEgICAlW3ZdLCBbJVtzXV0sICM0ICAgICAgICAgICBcbiIKKyNpZiAhZGVmaW5lZChfX09QVElNSVpFX1NJWkVfXykKKyAgICAgICAgImJuZSAgICAgMWYgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisgICAgICAgICJzdWIgICAgICVbdF0sICVbdl0sICVbbWFza10sIGxzciAjN1xuIgorICAgICAgICAiYW5kICAgICAlW3RdLCAlW3RdLCAlW21hc2tdICAgICAgICBcbiIKKyAgICAgICAgImJpY3MgICAgJVt0XSwgJVt0XSwgJVt2XSAgICAgICAgICAgXG4iCisgICAgICAgICJpdCAgICAgIGVxICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorICAgICAgICAibGRyZXEgICAlW3ZdLCBbJVtzXV0sICM0ICAgICAgICAgICBcbiIKKyAgICAgICAgImJuZSAgICAgMWYgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisgICAgICAgICJzdWIgICAgICVbdF0sICVbdl0sICVbbWFza10sIGxzciAjN1xuIgorICAgICAgICAiYW5kICAgICAlW3RdLCAlW3RdLCAlW21hc2tdICAgICAgICBcbiIKKyAgICAgICAgImJpY3MgICAgJVt0XSwgJVt0XSwgJVt2XSAgICAgICAgICAgXG4iCisgICAgICAgICJpdCAgICAgIGVxICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorICAgICAgICAibGRyZXEgICAlW3ZdLCBbJVtzXV0sICM0ICAgICAgICAgICBcbiIKKyAgICAgICAgImJuZSAgICAgMWYgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisgICAgICAgICJzdWIgICAgICVbdF0sICVbdl0sICVbbWFza10sIGxzciAjN1xuIgorICAgICAgICAiYW5kICAgICAlW3RdLCAlW3RdLCAlW21hc2tdICAgICAgICBcbiIKKyAgICAgICAgImJpY3MgICAgJVt0XSwgJVt0XSwgJVt2XSAgICAgICAgICAgXG4iCisgICAgICAgICJpdCAgICAgIGVxICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorICAgICAgICAibGRyZXEgICAlW3ZdLCBbJVtzXV0sICM0ICAgICAgICAgICBcbiIKKyAgICAgICAgImJuZSAgICAgMWYgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisgICAgICAgICJzdWIgICAgICVbdF0sICVbdl0sICVbbWFza10sIGxzciAjN1xuIgorICAgICAgICAiYW5kICAgICAlW3RdLCAlW3RdLCAlW21hc2tdICAgICAgICBcbiIKKyAgICAgICAgImJpY3MgICAgJVt0XSwgJVt0XSwgJVt2XSAgICAgICAgICAgXG4iCisgICAgICAgICJpdCAgICAgIGVxICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorICAgICAgICAibGRyZXEgICAlW3ZdLCBbJVtzXV0sICM0ICAgICAgICAgICBcbiIKKyAgICAgICAgImJuZSAgICAgMWYgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisgICAgICAgICJzdWIgICAgICVbdF0sICVbdl0sICVbbWFza10sIGxzciAjN1xuIgorICAgICAgICAiYW5kICAgICAlW3RdLCAlW3RdLCAlW21hc2tdICAgICAgICBcbiIKKyAgICAgICAgImJpY3MgICAgJVt0XSwgJVt0XSwgJVt2XSAgICAgICAgICAgXG4iCisgICAgICAgICJpdCAgICAgIGVxICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorICAgICAgICAibGRyZXEgICAlW3ZdLCBbJVtzXV0sICM0ICAgICAgICAgICBcbiIKKyAgICAgICAgImJuZSAgICAgMWYgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisgICAgICAgICJzdWIgICAgICVbdF0sICVbdl0sICVbbWFza10sIGxzciAjN1xuIgorICAgICAgICAiYW5kICAgICAlW3RdLCAlW3RdLCAlW21hc2tdICAgICAgICBcbiIKKyAgICAgICAgImJpY3MgICAgJVt0XSwgJVt0XSwgJVt2XSAgICAgICAgICAgXG4iCisgICAgICAgICJpdCAgICAgIGVxICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorICAgICAgICAibGRyZXEgICAlW3ZdLCBbJVtzXV0sICM0ICAgICAgICAgICBcbiIKKyAgICAgICAgImJuZSAgICAgMWYgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisgICAgICAgICJzdWIgICAgICVbdF0sICVbdl0sICVbbWFza10sIGxzciAjN1xuIgorICAgICAgICAiYW5kICAgICAlW3RdLCAlW3RdLCAlW21hc2tdICAgICAgICBcbiIKKyAgICAgICAgImJpY3MgICAgJVt0XSwgJVt0XSwgJVt2XSAgICAgICAgICAgXG4iCisgICAgICAgICJpdCAgICAgIGVxICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorICAgICAgICAibGRyZXEgICAlW3ZdLCBbJVtzXV0sICM0ICAgICAgICAgICBcbiIKKyNlbmRpZgorICAgICAgICAiYmVxICAgICAwYiAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKKyAgICAgICAgIjE6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisgICAgICAgICJhZGQgICAgICVbbF0sICVbbF0sICVbc10gICAgICAgICAgIFxuIgorICAgICAgICAidHN0ICAgICAlW3ZdLCAjMHhGRiAgICAgICAgICAgICAgICBcbiIKKyAgICAgICAgImJlcSAgICAgMmYgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisgICAgICAgICJhZGQgICAgICVbbF0sICVbbF0sICMxICAgICAgICAgICAgIFxuIgorICAgICAgICAidHN0ICAgICAlW3ZdLCAjMHhGRjAwICAgICAgICAgICAgICBcbiIKKyAgICAgICAgImJlcSAgICAgMmYgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisgICAgICAgICJhZGQgICAgICVbbF0sICVbbF0sICMxICAgICAgICAgICAgIFxuIgorICAgICAgICAidHN0ICAgICAlW3ZdLCAjMHhGRjAwMDAgICAgICAgICAgICBcbiIKKyAgICAgICAgIml0ICAgICAgbmUgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisgICAgICAgICJhZGRuZSAgICVbbF0sICVbbF0sICMxICAgICAgICAgICAgIFxuIgorICAgICAgICAiMjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKKyAgICAgICAgOiBbbF0iPSZyIihsKSwgW3ZdIj0mciIodiksIFt0XSI9JnIiKHQpLCBbc10iPSZyIih1LmIpCisgICAgICAgIDogIiVbbF0iKGwpLCAiJVtzXSIodS5iKSwgW21hc2tdInIiKDB4ODA4MDgwODBVTCkKKyAgICAgICAgOiAiY2MiCisgICAgKTsKKworZG9uZToKKyAgICByZXR1cm4gbDsKK30KZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vZ2VuZXJpYy9nZW5lcmljLm1rIGIvbGliYy9hcmNoLWFybS9nZW5lcmljL2dlbmVyaWMubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMThjYWQ5ZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vZ2VuZXJpYy9nZW5lcmljLm1rCkBAIC0wLDAgKzEsNCBAQAorJChjYWxsIGxpYmMtYWRkLWNwdS12YXJpYW50LXNyYyxNRU1DUFksYXJjaC1hcm0vZ2VuZXJpYy9iaW9uaWMvbWVtY3B5LlMpCiskKGNhbGwgbGliYy1hZGQtY3B1LXZhcmlhbnQtc3JjLE1FTVNFVCxhcmNoLWFybS9nZW5lcmljL2Jpb25pYy9tZW1zZXQuUykKKyQoY2FsbCBsaWJjLWFkZC1jcHUtdmFyaWFudC1zcmMsU1RSQ01QLGFyY2gtYXJtL2dlbmVyaWMvYmlvbmljL3N0cmNtcC5TKQorJChjYWxsIGxpYmMtYWRkLWNwdS12YXJpYW50LXNyYyxTVFJMRU4sYXJjaC1hcm0vZ2VuZXJpYy9iaW9uaWMvc3RybGVuLmMpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL2luY2x1ZGUvZW5kaWFuLmggYi9saWJjL2FyY2gtYXJtL2luY2x1ZGUvZW5kaWFuLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZkZTA4ODkuLjAwMDAwMDAKLS0tIGEvbGliYy9hcmNoLWFybS9pbmNsdWRlL2VuZGlhbi5oCisrKyAvZGV2L251bGwKQEAgLTEsODkgKzAsMCBAQAotLyoJJE9wZW5CU0Q6IGVuZGlhbi5oLHYgMS4zIDIwMDUvMTIvMTMgMDA6MzU6MjMgbWlsbGVydCBFeHAgJAkqLwotCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogICAgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUwotICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKLSAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCi0gKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKLSAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAotICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0gKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgX0FSTV9FTkRJQU5fSF8KLSNkZWZpbmUgX0FSTV9FTkRJQU5fSF8KLQotI2lmZGVmIF9fR05VQ19fCi0KLS8qCi0gKiBSRVYgYW5kIFJFVjE2IHdlcmVuJ3QgYXZhaWxhYmxlIG9uIEFSTTUgb3IgQVJNNC4KLSAqIFdlIGRvbid0IGluY2x1ZGUgPG1hY2hpbmUvY3B1LWZlYXR1cmVzLmg+IGJlY2F1c2UgaXQgcG9sbHV0ZXMgdGhlCi0gKiBuYW1lc3BhY2Ugd2l0aCBtYWNyb3MgbGlrZSBQTEQuCi0gKi8KLSNpZiAhZGVmaW5lZCBfX0FSTV9BUkNIXzVfXyAmJiAhZGVmaW5lZCBfX0FSTV9BUkNIXzVUX18gJiYgXAotICAgICFkZWZpbmVkIF9fQVJNX0FSQ0hfNVRFX18gJiYgIWRlZmluZWQgX19BUk1fQVJDSF81VEVKX18gJiYgXAotICAgICFkZWZpbmVkIF9fQVJNX0FSQ0hfNFRfXyAmJiAhZGVmaW5lZCBfX0FSTV9BUkNIXzRfXwotCi0vKiBBY2NvcmRpbmcgdG8gUmVhbFZpZXcgQXNzZW1ibGVyIFVzZXIncyBHdWlkZSwgUkVWIGFuZCBSRVYxNiBhcmUgYXZhaWxhYmxlCi0gKiBpbiBUaHVtYiBjb2RlIGFuZCAxNi1iaXQgaW5zdHJ1Y3Rpb25zIHdoZW4gdXNlZCBpbiBUaHVtYi0yIGNvZGUuCi0gKgotICogUkVWIFJkLCBSbQotICogICBSZCBhbmQgUm0gbXVzdCBib3RoIGJlIExvIHJlZ2lzdGVycy4KLSAqCi0gKiBSRVYxNiBSZCwgUm0KLSAqICAgUmQgYW5kIFJtIG11c3QgYm90aCBiZSBMbyByZWdpc3RlcnMuCi0gKgotICogVGhlICtsIGNvbnN0cmFpbnQgdGFrZXMgY2FyZSBvZiB0aGlzIHdpdGhvdXQgY29uc3RyYWluaW5nIHVzIGluIEFSTSBtb2RlLgotICovCi0jZGVmaW5lIF9fc3dhcDE2bWQoeCkgKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHJlZ2lzdGVyIHVfaW50MTZfdCBfeCA9ICh4KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBfX2FzbSB2b2xhdGlsZSAoInJldjE2ICUwLCAlMCIgOiAiK2wiIChfeCkpOyAgICAgICAgICAgICAgICBcCi0gICAgX3g7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotfSkKLQotI2RlZmluZSBfX3N3YXAzMm1kKHgpICh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICByZWdpc3RlciB1X2ludDMyX3QgX3ggPSAoeCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgX19hc20gdm9sYXRpbGUgKCJyZXYgJTAsICUwIiA6ICIrbCIgKF94KSk7ICAgICAgICAgICAgICAgICAgXAotICAgIF94OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLX0pCi0KLSNkZWZpbmUgX19zd2FwNjRtZCh4KSAoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgdV9pbnQ2NF90IF9zd2FwNjRtZF94ID0gKHgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICh1X2ludDY0X3QpIF9fc3dhcDMybWQoX3N3YXA2NG1kX3ggPj4gMzIpIHwgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgKHVfaW50NjRfdCkgX19zd2FwMzJtZChfc3dhcDY0bWRfeCAmIDB4ZmZmZmZmZmYpIDw8IDMyOyBcCi19KQotCi0vKiBUZWxsIHN5cy9lbmRpYW4uaCB3ZSBoYXZlIE1EIHZhcmlhbnRzIG9mIHRoZSBzd2FwIG1hY3Jvcy4gICovCi0jZGVmaW5lIE1EX1NXQVAKLQotI2VuZGlmICAvKiBfX0FSTV9BUkNIX18gKi8KLSNlbmRpZiAgLyogX19HTlVDX18gKi8KLQotI2lmZGVmIF9fQVJNRUJfXwotI2RlZmluZSBfQllURV9PUkRFUiBfQklHX0VORElBTgotI2Vsc2UKLSNkZWZpbmUgX0JZVEVfT1JERVIgX0xJVFRMRV9FTkRJQU4KLSNlbmRpZgotI2RlZmluZSBfX1NUUklDVF9BTElHTk1FTlQKLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpbmNsdWRlIDxzeXMvZW5kaWFuLmg+Ci0KLSNlbmRpZiAgLyogIV9BUk1fRU5ESUFOX0hfICovCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL2luY2x1ZGUvbWFjaGluZS9fdHlwZXMuaCBiL2xpYmMvYXJjaC1hcm0vaW5jbHVkZS9tYWNoaW5lL190eXBlcy5oCmluZGV4IDNlNzc5Y2EuLjBhOGI2MTAgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vaW5jbHVkZS9tYWNoaW5lL190eXBlcy5oCisrKyBiL2xpYmMvYXJjaC1hcm0vaW5jbHVkZS9tYWNoaW5lL190eXBlcy5oCkBAIC0zNSwxNyArMzUsNiBAQAogI2lmbmRlZiBfQVJNX19UWVBFU19IXwogI2RlZmluZSBfQVJNX19UWVBFU19IXwogCi0KLSNpZiAhZGVmaW5lZChfX0FSTV9FQUJJX18pCi0vKiB0aGUga2VybmVsIGRlZmluZXMgc2l6ZV90IGFzIHVuc2lnbmVkIGludCwgYnV0IGcrKyB3YW50cyBpdCB0byBiZSB1bnNpZ25lZCBsb25nICovCi0jZGVmaW5lIF9TSVpFX1QKLSNkZWZpbmUgX1NTSVpFX1QKLSNkZWZpbmUgX1BUUkRJRkZfVAotdHlwZWRlZiB1bnNpZ25lZCBsb25nICBzaXplX3Q7Ci10eXBlZGVmIGxvbmcgICAgICAgICAgIHNzaXplX3Q7Ci10eXBlZGVmIGxvbmcgICAgICAgICAgIHB0cmRpZmZfdDsKLSNlbmRpZgotCiAvKiA3LjE4LjEuMSBFeGFjdC13aWR0aCBpbnRlZ2VyIHR5cGVzICovCiB0eXBlZGVmCV9fc2lnbmVkIGNoYXIJCV9faW50OF90OwogdHlwZWRlZgl1bnNpZ25lZCBjaGFyCQlfX3VpbnQ4X3Q7CkBAIC05OCw2ICs4Nyw4IEBACiAvKiBTdGFuZGFyZCBzeXN0ZW0gdHlwZXMgKi8KIHR5cGVkZWYgaW50CQkJX19jbG9ja190OwogdHlwZWRlZiBpbnQJCQlfX2Nsb2NraWRfdDsKK3R5cGVkZWYgZG91YmxlCQkJX19kb3VibGVfdDsKK3R5cGVkZWYgZmxvYXQJCQlfX2Zsb2F0X3Q7CiB0eXBlZGVmIGxvbmcJCQlfX3B0cmRpZmZfdDsKIHR5cGVkZWYJaW50CQkJX190aW1lX3Q7CiB0eXBlZGVmIGludAkJCV9fdGltZXJfdDsKQEAgLTExNiwxMCArMTA3LDQgQEAKIHR5cGVkZWYJdm9pZCAqCQkJX193Y3RyYW5zX3Q7CiB0eXBlZGVmCXZvaWQgKgkJCV9fd2N0eXBlX3Q7CiAKLSNpZmRlZiBfX0FSTUVCX18KLSNkZWZpbmUgX0JZVEVfT1JERVIgX0JJR19FTkRJQU4KLSNlbHNlCi0jZGVmaW5lIF9CWVRFX09SREVSIF9MSVRUTEVfRU5ESUFOCi0jZW5kaWYKLQogI2VuZGlmCS8qIF9BUk1fX1RZUEVTX0hfICovCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL2luY2x1ZGUvbWFjaGluZS9lbGZfbWFjaGRlcC5oIGIvbGliYy9hcmNoLWFybS9pbmNsdWRlL21hY2hpbmUvZWxmX21hY2hkZXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45N2Q4NDM0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9pbmNsdWRlL21hY2hpbmUvZWxmX21hY2hkZXAuaApAQCAtMCwwICsxLDEzOCBAQAorLyoJJE5ldEJTRDogZWxmX21hY2hkZXAuaCx2IDEuMTAgMjAxMi8wOC8wNSAwNDoxMjo0NiBtYXR0IEV4cCAkCSovCisKKyNpZm5kZWYgX0FSTV9FTEZfTUFDSERFUF9IXworI2RlZmluZSBfQVJNX0VMRl9NQUNIREVQX0hfCisKKyNpZiBkZWZpbmVkKF9fQVJNRUJfXykKKyNkZWZpbmUgRUxGMzJfTUFDSERFUF9FTkRJQU5ORVNTCUVMRkRBVEEyTVNCCisjZWxzZQorI2RlZmluZSBFTEYzMl9NQUNIREVQX0VORElBTk5FU1MJRUxGREFUQTJMU0IKKyNlbmRpZgorCisjZGVmaW5lIEVMRjY0X01BQ0hERVBfRU5ESUFOTkVTUwlYWFgJLyogYnJlYWsgY29tcGlsYXRpb24gKi8KKyNkZWZpbmUgRUxGNjRfTUFDSERFUF9JRF9DQVNFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJLyogbm8gNjQtYml0IEVMRiBtYWNoaW5lIHR5cGVzIHN1cHBvcnRlZCAqLworCisvKiBQcm9jZXNzb3Igc3BlY2lmaWMgZmxhZ3MgZm9yIHRoZSBFTEYgaGVhZGVyIGVfZmxhZ3MgZmllbGQuICAqLworI2RlZmluZSBFRl9BUk1fUkVMRVhFQwkJMHgwMDAwMDAwMQorI2RlZmluZSBFRl9BUk1fSEFTRU5UUlkJCTB4MDAwMDAwMDIKKyNkZWZpbmUgRUZfQVJNX0lOVEVSV09SSwkweDAwMDAwMDA0IC8qIEdOVSBiaW51dGlscyAwMDA0MTMgKi8KKyNkZWZpbmUgRUZfQVJNX1NZTVNBUkVTT1JURUQJMHgwMDAwMDAwNCAvKiBBUk0gRUxGIEEwOCAqLworI2RlZmluZSBFRl9BUk1fQVBDU18yNgkJMHgwMDAwMDAwOCAvKiBHTlUgYmludXRpbHMgMDAwNDEzICovCisjZGVmaW5lIEVGX0FSTV9EWU5TWU1TVVNFU0VHSURYCTB4MDAwMDAwMDggLyogQVJNIEVMRiBCMDEgKi8KKyNkZWZpbmUgRUZfQVJNX0FQQ1NfRkxPQVQJMHgwMDAwMDAxMCAvKiBHTlUgYmludXRpbHMgMDAwNDEzICovCisjZGVmaW5lIEVGX0FSTV9NQVBTWU1TRklSU1QJMHgwMDAwMDAxMCAvKiBBUk0gRUxGIEIwMSAqLworI2RlZmluZSBFRl9BUk1fUElDCQkweDAwMDAwMDIwCisjZGVmaW5lIEVGX0FSTV9BTElHTjgJCTB4MDAwMDAwNDAgLyogOC1iaXQgc3RydWN0dXJlIGFsaWdubWVudC4gICovCisjZGVmaW5lIEVGX0FSTV9ORVdfQUJJCQkweDAwMDAwMDgwCisjZGVmaW5lIEVGX0FSTV9PTERfQUJJCQkweDAwMDAwMTAwCisjZGVmaW5lIEVGX0FSTV9TT0ZUX0ZMT0FUCTB4MDAwMDAyMDAKKyNkZWZpbmUgRUZfQVJNX0VBQklNQVNLCQkweGZmMDAwMDAwCisjZGVmaW5lCUVGX0FSTV9FQUJJX1ZFUjEJMHgwMTAwMDAwMAorI2RlZmluZQlFRl9BUk1fRUFCSV9WRVIyCTB4MDIwMDAwMDAKKyNkZWZpbmUJRUZfQVJNX0VBQklfVkVSMwkweDAzMDAwMDAwCisjZGVmaW5lCUVGX0FSTV9FQUJJX1ZFUjQJMHgwNDAwMDAwMAorI2RlZmluZQlFRl9BUk1fRUFCSV9WRVI1CTB4MDUwMDAwMDAKKworI2RlZmluZQlFTEYzMl9NQUNIREVQX0lEX0NBU0VTCQkJCQkJXAorCQljYXNlIEVNX0FSTToJCQkJCQlcCisJCQlicmVhazsKKworI2RlZmluZQlFTEYzMl9NQUNIREVQX0lECUVNX0FSTQorCisjZGVmaW5lIEFSQ0hfRUxGU0laRQkJMzIJLyogTUQgbmF0aXZlIGJpbmFyeSBzaXplICovCisKKy8qIFByb2Nlc3NvciBzcGVjaWZpYyByZWxvY2F0aW9uIHR5cGVzICovCisKKyNkZWZpbmUgUl9BUk1fTk9ORQkJMAorI2RlZmluZSBSX0FSTV9QQzI0CQkxCisjZGVmaW5lIFJfQVJNX0FCUzMyCQkyCisjZGVmaW5lIFJfQVJNX1JFTDMyCQkzCisjZGVmaW5lIFJfQVJNX1BDMTMJCTQKKyNkZWZpbmUgUl9BUk1fQUJTMTYJCTUKKyNkZWZpbmUgUl9BUk1fQUJTMTIJCTYKKyNkZWZpbmUgUl9BUk1fVEhNX0FCUzUJCTcKKyNkZWZpbmUgUl9BUk1fQUJTOAkJOAorI2RlZmluZSBSX0FSTV9TQlJFTDMyCQk5CisjZGVmaW5lIFJfQVJNX1RITV9QQzIyCQkxMAorI2RlZmluZSBSX0FSTV9USE1fUEM4CQkxMQorI2RlZmluZSBSX0FSTV9BTVBfVkNBTEw5CTEyCisjZGVmaW5lIFJfQVJNX1NXSTI0CQkxMworI2RlZmluZSBSX0FSTV9USE1fU1dJOAkJMTQKKyNkZWZpbmUgUl9BUk1fWFBDMjUJCTE1CisjZGVmaW5lIFJfQVJNX1RITV9YUEMyMgkJMTYKKworLyogVExTIHJlbG9jYXRpb25zICovCisjZGVmaW5lIFJfQVJNX1RMU19EVFBNT0QzMgkxNwkvKiBJRCBvZiBtb2R1bGUgY29udGFpbmluZyBzeW1ib2wgKi8KKyNkZWZpbmUgUl9BUk1fVExTX0RUUE9GRjMyCTE4CS8qIE9mZnNldCBpbiBUTFMgYmxvY2sgKi8KKyNkZWZpbmUgUl9BUk1fVExTX1RQT0ZGMzIJMTkJLyogT2Zmc2V0IGluIHN0YXRpYyBUTFMgYmxvY2sgKi8KKworLyogMjAtMzEgYXJlIHJlc2VydmVkIGZvciBBUk0gTGludXguICovCisjZGVmaW5lIFJfQVJNX0NPUFkJCTIwCisjZGVmaW5lIFJfQVJNX0dMT0JfREFUCQkyMQorI2RlZmluZQlSX0FSTV9KVU1QX1NMT1QJCTIyCisjZGVmaW5lIFJfQVJNX1JFTEFUSVZFCQkyMworI2RlZmluZQlSX0FSTV9HT1RPRkYJCTI0CisjZGVmaW5lIFJfQVJNX0dPVFBDCQkyNQorI2RlZmluZSBSX0FSTV9HT1QzMgkJMjYKKyNkZWZpbmUgUl9BUk1fUExUMzIJCTI3CisKKyNkZWZpbmUgUl9BUk1fQUxVX1BDUkVMXzdfMAkzMgorI2RlZmluZSBSX0FSTV9BTFVfUENSRUxfMTVfOAkzMworI2RlZmluZSBSX0FSTV9BTFVfUENSRUxfMjNfMTUJMzQKKyNkZWZpbmUgUl9BUk1fQUxVX1NCUkVMXzExXzAJMzUKKyNkZWZpbmUgUl9BUk1fQUxVX1NCUkVMXzE5XzEyCTM2CisjZGVmaW5lIFJfQVJNX0FMVV9TQlJFTF8yN18yMAkzNworCisvKiA5Ni0xMTEgYXJlIHJlc2VydmVkIHRvIEcrKy4gKi8KKyNkZWZpbmUgUl9BUk1fR05VX1ZURU5UUlkJMTAwCisjZGVmaW5lIFJfQVJNX0dOVV9WVElOSEVSSVQJMTAxCisjZGVmaW5lIFJfQVJNX1RITV9QQzExCQkxMDIKKyNkZWZpbmUgUl9BUk1fVEhNX1BDOQkJMTAzCisKKy8qIE1vcmUgVExTIHJlbG9jYXRpb25zICovCisjZGVmaW5lIFJfQVJNX1RMU19HRDMyCQkxMDQJLyogUEMtcmVsIDMyIGJpdCBmb3IgZ2xvYmFsIGR5bmFtaWMgKi8KKyNkZWZpbmUgUl9BUk1fVExTX0xETTMyCQkxMDUJLyogUEMtcmVsIDMyIGJpdCBmb3IgbG9jYWwgZHluYW1pYyAqLworI2RlZmluZSBSX0FSTV9UTFNfTERPMzIJCTEwNgkvKiAzMiBiaXQgb2Zmc2V0IHJlbGF0aXZlIHRvIFRMUyAqLworI2RlZmluZSBSX0FSTV9UTFNfSUUzMgkJMTA3CS8qIFBDLXJlbCAzMiBiaXQgZm9yIEdPVCBlbnRyeSBvZiAqLworI2RlZmluZSBSX0FSTV9UTFNfTEUzMgkJMTA4CisjZGVmaW5lIFJfQVJNX1RMU19MRE8xMgkJMTA5CisjZGVmaW5lIFJfQVJNX1RMU19MRTEyCQkxMTAKKyNkZWZpbmUgUl9BUk1fVExTX0lFMTJHUAkxMTEKKworLyogMTEyLTEyNyBhcmUgcmVzZXJ2ZWQgZm9yIHByaXZhdGUgZXhwZXJpbWVudHMuICovCisKKyNkZWZpbmUgUl9BUk1fUlhQQzI1CQkyNDkKKyNkZWZpbmUgUl9BUk1fUlNCUkVMMzIJCTI1MAorI2RlZmluZSBSX0FSTV9USE1fUlBDMjIJCTI1MQorI2RlZmluZSBSX0FSTV9SUkVMMzIJCTI1MgorI2RlZmluZSBSX0FSTV9SQUJTMzIJCTI1MworI2RlZmluZSBSX0FSTV9SUEMyNAkJMjU0CisjZGVmaW5lIFJfQVJNX1JCQVNFCQkyNTUKKworI2RlZmluZSBSX1RZUEUobmFtZSkJCV9fQ09OQ0FUKFJfQVJNXyxuYW1lKQorCisvKiBQcm9jZXNzb3Igc3BlY2lmaWMgcHJvZ3JhbSBoZWFkZXIgZmxhZ3MgKi8KKyNkZWZpbmUgUEZfQVJNX1NCCQkweDEwMDAwMDAwCisjZGVmaW5lIFBGX0FSTV9QSQkJMHgyMDAwMDAwMAorI2RlZmluZSBQRl9BUk1fRU5UUlkJCTB4ODAwMDAwMDAKKworLyogUHJvY2Vzc29yIHNwZWNpZmljIHNlY3Rpb24gaGVhZGVyIGZsYWdzICovCisjZGVmaW5lIFNIRl9FTlRSWVNFQ1QJCTB4MTAwMDAwMDAKKyNkZWZpbmUgU0hGX0NPTURFRgkJMHg4MDAwMDAwMAorCisvKiBQcm9jZXNzb3Igc3BlY2lmaWMgc3ltYm9sIHR5cGVzICovCisjZGVmaW5lIFNUVF9BUk1fVEZVTkMJCVNUVF9MT1BST0MKKworI2lmZGVmIF9LRVJORUwKKyNpZmRlZiBFTEZTSVpFCisjZGVmaW5lCUVMRl9NRF9QUk9CRV9GVU5DCUVMRk5BTUUyKGFybV9uZXRic2QscHJvYmUpCisjZW5kaWYKKworc3RydWN0IGV4ZWNfcGFja2FnZTsKKworaW50IGFybV9uZXRic2RfZWxmMzJfcHJvYmUoc3RydWN0IGx3cCAqLCBzdHJ1Y3QgZXhlY19wYWNrYWdlICosIHZvaWQgKiwgY2hhciAqLAorCXZhZGRyX3QgKik7CisjZW5kaWYKKworI2VuZGlmIC8qIF9BUk1fRUxGX01BQ0hERVBfSF8gKi8KZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vaW5jbHVkZS9tYWNoaW5lL2VuZGlhbi5oIGIvbGliYy9hcmNoLWFybS9pbmNsdWRlL21hY2hpbmUvZW5kaWFuLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2NiYTNiOQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vaW5jbHVkZS9tYWNoaW5lL2VuZGlhbi5oCkBAIC0wLDAgKzEsODkgQEAKKy8qCSRPcGVuQlNEOiBlbmRpYW4uaCx2IDEuMyAyMDA1LzEyLzEzIDAwOjM1OjIzIG1pbGxlcnQgRXhwICQJKi8KKworLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIF9BUk1fRU5ESUFOX0hfCisjZGVmaW5lIF9BUk1fRU5ESUFOX0hfCisKKyNpZmRlZiBfX0dOVUNfXworCisvKgorICogUkVWIGFuZCBSRVYxNiB3ZXJlbid0IGF2YWlsYWJsZSBvbiBBUk01IG9yIEFSTTQuCisgKiBXZSBkb24ndCBpbmNsdWRlIDxtYWNoaW5lL2NwdS1mZWF0dXJlcy5oPiBiZWNhdXNlIGl0IHBvbGx1dGVzIHRoZQorICogbmFtZXNwYWNlIHdpdGggbWFjcm9zIGxpa2UgUExELgorICovCisjaWYgIWRlZmluZWQgX19BUk1fQVJDSF81X18gJiYgIWRlZmluZWQgX19BUk1fQVJDSF81VF9fICYmIFwKKyAgICAhZGVmaW5lZCBfX0FSTV9BUkNIXzVURV9fICYmICFkZWZpbmVkIF9fQVJNX0FSQ0hfNVRFSl9fICYmIFwKKyAgICAhZGVmaW5lZCBfX0FSTV9BUkNIXzRUX18gJiYgIWRlZmluZWQgX19BUk1fQVJDSF80X18KKworLyogQWNjb3JkaW5nIHRvIFJlYWxWaWV3IEFzc2VtYmxlciBVc2VyJ3MgR3VpZGUsIFJFViBhbmQgUkVWMTYgYXJlIGF2YWlsYWJsZQorICogaW4gVGh1bWIgY29kZSBhbmQgMTYtYml0IGluc3RydWN0aW9ucyB3aGVuIHVzZWQgaW4gVGh1bWItMiBjb2RlLgorICoKKyAqIFJFViBSZCwgUm0KKyAqICAgUmQgYW5kIFJtIG11c3QgYm90aCBiZSBMbyByZWdpc3RlcnMuCisgKgorICogUkVWMTYgUmQsIFJtCisgKiAgIFJkIGFuZCBSbSBtdXN0IGJvdGggYmUgTG8gcmVnaXN0ZXJzLgorICoKKyAqIFRoZSArbCBjb25zdHJhaW50IHRha2VzIGNhcmUgb2YgdGhpcyB3aXRob3V0IGNvbnN0cmFpbmluZyB1cyBpbiBBUk0gbW9kZS4KKyAqLworI2RlZmluZSBfX3N3YXAxNm1kKHgpICh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICByZWdpc3RlciB1X2ludDE2X3QgX3ggPSAoeCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgX19hc20gdm9sYXRpbGUgKCJyZXYxNiAlMCwgJTAiIDogIitsIiAoX3gpKTsgICAgICAgICAgICAgICAgXAorICAgIF94OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30pCisKKyNkZWZpbmUgX19zd2FwMzJtZCh4KSAoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgcmVnaXN0ZXIgdV9pbnQzMl90IF94ID0gKHgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIF9fYXNtIHZvbGF0aWxlICgicmV2ICUwLCAlMCIgOiAiK2wiIChfeCkpOyAgICAgICAgICAgICAgICAgIFwKKyAgICBfeDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9KQorCisjZGVmaW5lIF9fc3dhcDY0bWQoeCkgKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHVfaW50NjRfdCBfc3dhcDY0bWRfeCA9ICh4KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAodV9pbnQ2NF90KSBfX3N3YXAzMm1kKF9zd2FwNjRtZF94ID4+IDMyKSB8ICAgICAgICAgICAgICAgICBcCisgICAgICAgICh1X2ludDY0X3QpIF9fc3dhcDMybWQoX3N3YXA2NG1kX3ggJiAweGZmZmZmZmZmKSA8PCAzMjsgXAorfSkKKworLyogVGVsbCBzeXMvZW5kaWFuLmggd2UgaGF2ZSBNRCB2YXJpYW50cyBvZiB0aGUgc3dhcCBtYWNyb3MuICAqLworI2RlZmluZSBNRF9TV0FQCisKKyNlbmRpZiAgLyogX19BUk1fQVJDSF9fICovCisjZW5kaWYgIC8qIF9fR05VQ19fICovCisKKyNpZiBkZWZpbmVkKF9fQVJNRUJfXykKKyNkZWZpbmUgX0JZVEVfT1JERVIgX0JJR19FTkRJQU4KKyNlbHNlCisjZGVmaW5lIF9CWVRFX09SREVSIF9MSVRUTEVfRU5ESUFOCisjZW5kaWYKKyNkZWZpbmUgX19TVFJJQ1RfQUxJR05NRU5UCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL2VuZGlhbi5oPgorCisjZW5kaWYgIC8qICFfQVJNX0VORElBTl9IXyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9rcmFpdC9iaW9uaWMvbWVtY3B5LlMgYi9saWJjL2FyY2gtYXJtL2tyYWl0L2Jpb25pYy9tZW1jcHkuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wY2Q0ZDQ0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9rcmFpdC9iaW9uaWMvbWVtY3B5LlMKQEAgLTAsMCArMSwxNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworLyogQXNzdW1lcyBuZW9uIGluc3RydWN0aW9ucyBhbmQgYSBjYWNoZSBsaW5lIHNpemUgb2YgMzIgYnl0ZXMuICovCisKKyNpbmNsdWRlIDxtYWNoaW5lL2NwdS1mZWF0dXJlcy5oPgorI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+CisKKy8qCisgKiBUaGlzIGNvZGUgYXNzdW1lcyBpdCBpcyBydW5uaW5nIG9uIGEgcHJvY2Vzc29yIHRoYXQgc3VwcG9ydHMgYWxsIGFybSB2NworICogaW5zdHJ1Y3Rpb25zLCB0aGF0IHN1cHBvcnRzIG5lb24gaW5zdHJ1Y3Rpb25zLCBhbmQgdGhhdCBoYXMgYSAzMiBieXRlCisgKiBjYWNoZSBsaW5lLgorICovCisKKyAgICAgICAgLnRleHQKKyAgICAgICAgLmZwdSAgICBuZW9uCisKKyNkZWZpbmUgQ0FDSEVfTElORV9TSVpFICAgICAzMgorCitFTlRSWShtZW1jcHkpCisgICAgICAgIC5zYXZlICAgICAgIHtyMCwgbHJ9CisgICAgICAgIC8qIHN0YXJ0IHByZWxvYWRpbmcgYXMgZWFybHkgYXMgcG9zc2libGUgKi8KKyAgICAgICAgcGxkICAgICAgICAgW3IxLCAjKENBQ0hFX0xJTkVfU0laRSowKV0KKyAgICAgICAgc3RtZmQgICAgICAgc3AhLCB7cjAsIGxyfQorICAgICAgICBwbGQgICAgICAgICBbcjEsICMoQ0FDSEVfTElORV9TSVpFKjIpXQorCisgICAgICAgIC8qIGRvIHdlIGhhdmUgYXQgbGVhc3QgMTYtYnl0ZXMgdG8gY29weSAobmVlZGVkIGZvciBhbGlnbm1lbnQgYmVsb3cpICovCisgICAgICAgIGNtcCAgICAgICAgIHIyLCAjMTYKKyAgICAgICAgYmxvICAgICAgICAgNWYKKworICAgICAgICAvKiBhbGlnbiBkZXN0aW5hdGlvbiB0byBjYWNoZS1saW5lIGZvciB0aGUgd3JpdGUtYnVmZmVyICovCisgICAgICAgIHJzYiAgICAgICAgIHIzLCByMCwgIzAKKyAgICAgICAgYW5kcyAgICAgICAgcjMsIHIzLCAjMHhGCisgICAgICAgIGJlcSAgICAgICAgIDBmCisKKyAgICAgICAgLyogY29weSB1cCB0byAxNS1ieXRlcyAoY291bnQgaW4gcjMpICovCisgICAgICAgIHN1YiAgICAgICAgIHIyLCByMiwgcjMKKyAgICAgICAgbW92cyAgICAgICAgaXAsIHIzLCBsc2wgIzMxCisgICAgICAgIGxkcm1pYiAgICAgIGxyLCBbcjFdLCAjMQorICAgICAgICBzdHJtaWIgICAgICBsciwgW3IwXSwgIzEKKyAgICAgICAgbGRyY3NiICAgICAgaXAsIFtyMV0sICMxCisgICAgICAgIGxkcmNzYiAgICAgIGxyLCBbcjFdLCAjMQorICAgICAgICBzdHJjc2IgICAgICBpcCwgW3IwXSwgIzEKKyAgICAgICAgc3RyY3NiICAgICAgbHIsIFtyMF0sICMxCisgICAgICAgIG1vdnMgICAgICAgIGlwLCByMywgbHNsICMyOQorICAgICAgICBiZ2UgICAgICAgICAxZgorICAgICAgICAvLyBjb3BpZXMgNCBieXRlcywgZGVzdGluYXRpb24gMzItYml0cyBhbGlnbmVkCisgICAgICAgIHZsZDQuOCAgICAgIHtkMFswXSwgZDFbMF0sIGQyWzBdLCBkM1swXX0sIFtyMV0hCisgICAgICAgIHZzdDQuOCAgICAgIHtkMFswXSwgZDFbMF0sIGQyWzBdLCBkM1swXX0sIFtyMCwgOjMyXSEKKzE6ICAgICAgYmNjICAgICAgICAgMmYKKyAgICAgICAgLy8gY29waWVzIDggYnl0ZXMsIGRlc3RpbmF0aW9uIDY0LWJpdHMgYWxpZ25lZAorICAgICAgICB2bGQxLjggICAgICB7ZDB9LCBbcjFdIQorICAgICAgICB2c3QxLjggICAgICB7ZDB9LCBbcjAsIDo2NF0hCisyOgorCiswOiAgICAgIC8qIHByZWxvYWQgaW1tZWRpYXRlbHkgdGhlIG5leHQgY2FjaGUgbGluZSwgd2hpY2ggd2UgbWF5IG5lZWQgKi8KKyAgICAgICAgcGxkICAgICAgICAgW3IxLCAjKENBQ0hFX0xJTkVfU0laRSowKV0KKyAgICAgICAgcGxkICAgICAgICAgW3IxLCAjKENBQ0hFX0xJTkVfU0laRSoyKV0KKworICAgICAgICAvKiBtYWtlIHN1cmUgd2UgaGF2ZSBhdCBsZWFzdCA2NCBieXRlcyB0byBjb3B5ICovCisgICAgICAgIHN1YnMgICAgICAgIHIyLCByMiwgIzY0CisgICAgICAgIGJsbyAgICAgICAgIDJmCisKKyAgICAgICAgLyogUHJlbG9hZCBhbGwgdGhlIGNhY2hlIGxpbmVzIHdlIG5lZWQuCisgICAgICAgICAqIE5PVEU6IFRoZSBudW1iZXIgb2YgcGxkIGJlbG93IGRlcGVuZHMgb24gQ0FDSEVfTElORV9TSVpFLAorICAgICAgICAgKiBpZGVhbGx5IHdlIHdvdWxkIGluY3JlYXNlIHRoZSBkaXN0YW5jZSBpbiB0aGUgbWFpbiBsb29wIHRvCisgICAgICAgICAqIGF2b2lkIHRoZSBnb29meSBjb2RlIGJlbG93LiBJbiBwcmFjdGljZSB0aGlzIGRvZXNuJ3Qgc2VlbSB0byBtYWtlCisgICAgICAgICAqIGEgYmlnIGRpZmZlcmVuY2UuCisgICAgICAgICAqIE5PVEU6IFRoZSB2YWx1ZSBDQUNIRV9MSU5FX1NJWkUgKiA4IHdhcyBjaG9zZW4gdGhyb3VnaAorICAgICAgICAgKiBleHBlcmltZW50YXRpb24uCisgICAgICAgICAqLworICAgICAgICBwbGQgICAgICAgICBbcjEsICMoQ0FDSEVfTElORV9TSVpFKjQpXQorICAgICAgICBwbGQgICAgICAgICBbcjEsICMoQ0FDSEVfTElORV9TSVpFKjYpXQorICAgICAgICBwbGQgICAgICAgICBbcjEsICMoQ0FDSEVfTElORV9TSVpFKjgpXQorCisxOiAgICAgIC8qIFRoZSBtYWluIGxvb3AgY29waWVzIDY0IGJ5dGVzIGF0IGEgdGltZSAqLworICAgICAgICB2bGQxLjggICAgICB7ZDAgIC0gZDN9LCAgIFtyMV0hCisgICAgICAgIHZsZDEuOCAgICAgIHtkNCAgLSBkN30sICAgW3IxXSEKKyAgICAgICAgcGxkICAgICAgICAgW3IxLCAjKENBQ0hFX0xJTkVfU0laRSo4KV0KKyAgICAgICAgc3VicyAgICAgICAgcjIsIHIyLCAjNjQKKyAgICAgICAgdnN0MS44ICAgICAge2QwICAtIGQzfSwgICBbcjAsIDoxMjhdIQorICAgICAgICB2c3QxLjggICAgICB7ZDQgIC0gZDd9LCAgIFtyMCwgOjEyOF0hCisgICAgICAgIGJocyAgICAgICAgIDFiCisKKzI6ICAgICAgLyogZml4LXVwIHRoZSByZW1haW5pbmcgY291bnQgYW5kIG1ha2Ugc3VyZSB3ZSBoYXZlID49IDMyIGJ5dGVzIGxlZnQgKi8KKyAgICAgICAgYWRkICAgICAgICAgcjIsIHIyLCAjNjQKKyAgICAgICAgc3VicyAgICAgICAgcjIsIHIyLCAjMzIKKyAgICAgICAgYmxvICAgICAgICAgNGYKKworMzogICAgICAvKiAzMiBieXRlcyBhdCBhIHRpbWUuIFRoZXNlIGNhY2hlIGxpbmVzIHdlcmUgYWxyZWFkeSBwcmVsb2FkZWQgKi8KKyAgICAgICAgdmxkMS44ICAgICAge2QwIC0gZDN9LCAgW3IxXSEKKyAgICAgICAgc3VicyAgICAgICAgcjIsIHIyLCAjMzIKKyAgICAgICAgdnN0MS44ICAgICAge2QwIC0gZDN9LCAgW3IwLCA6MTI4XSEKKyAgICAgICAgYmhzICAgICAgICAgM2IKKzQ6ICAgICAgLyogbGVzcyB0aGFuIDMyIGxlZnQgKi8KKyAgICAgICAgYWRkICAgICAgICAgcjIsIHIyLCAjMzIKKyAgICAgICAgdHN0ICAgICAgICAgcjIsICMweDEwCisgICAgICAgIGJlcSAgICAgICAgIDVmCisgICAgICAgIC8vIGNvcGllcyAxNiBieXRlcywgMTI4LWJpdHMgYWxpZ25lZAorICAgICAgICB2bGQxLjggICAgICB7ZDAsIGQxfSwgW3IxXSEKKyAgICAgICAgdnN0MS44ICAgICAge2QwLCBkMX0sIFtyMCwgOjEyOF0hCisKKzU6ICAgICAgLyogY29weSB1cCB0byAxNS1ieXRlcyAoY291bnQgaW4gcjIpICovCisgICAgICAgIG1vdnMgICAgICAgIGlwLCByMiwgbHNsICMyOQorICAgICAgICBiY2MgICAgICAgICAxZgorICAgICAgICB2bGQxLjggICAgICB7ZDB9LCBbcjFdIQorICAgICAgICB2c3QxLjggICAgICB7ZDB9LCBbcjBdIQorMTogICAgICBiZ2UgICAgICAgICAyZgorICAgICAgICB2bGQ0LjggICAgICB7ZDBbMF0sIGQxWzBdLCBkMlswXSwgZDNbMF19LCBbcjFdIQorICAgICAgICB2c3Q0LjggICAgICB7ZDBbMF0sIGQxWzBdLCBkMlswXSwgZDNbMF19LCBbcjBdIQorMjogICAgICBtb3ZzICAgICAgICBpcCwgcjIsIGxzbCAjMzEKKyAgICAgICAgbGRybWliICAgICAgcjMsIFtyMV0sICMxCisgICAgICAgIGxkcmNzYiAgICAgIGlwLCBbcjFdLCAjMQorICAgICAgICBsZHJjc2IgICAgICBsciwgW3IxXSwgIzEKKyAgICAgICAgc3RybWliICAgICAgcjMsIFtyMF0sICMxCisgICAgICAgIHN0cmNzYiAgICAgIGlwLCBbcjBdLCAjMQorICAgICAgICBzdHJjc2IgICAgICBsciwgW3IwXSwgIzEKKworICAgICAgICBsZG1mZCAgICAgICBzcCEsIHtyMCwgbHJ9CisgICAgICAgIGJ4ICAgICAgICAgIGxyCitFTkQobWVtY3B5KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9rcmFpdC9iaW9uaWMvbWVtc2V0LlMgYi9saWJjL2FyY2gtYXJtL2tyYWl0L2Jpb25pYy9tZW1zZXQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMmUyZDgwCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9rcmFpdC9iaW9uaWMvbWVtc2V0LlMKQEAgLTAsMCArMSw4MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8bWFjaGluZS9jcHUtZmVhdHVyZXMuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgorCisvKgorICogVGhpcyBjb2RlIGFzc3VtZXMgaXQgaXMgcnVubmluZyBvbiBhIHByb2Nlc3NvciB0aGF0IHN1cHBvcnRzIGFsbCBhcm0gdjcKKyAqIGluc3RydWN0aW9ucywgdGhhdCBzdXBwb3J0cyBuZW9uIGluc3RydWN0aW9ucywgYW5kIHRoYXQgc3VwcG9ydHMKKyAqIHVuYWxpZ25lZCBuZW9uIGluc3RydWN0aW9uIGFjY2Vzc2VzIHRvIG1lbW9yeS4KKyAqLworCisgICAgLmZwdSAgICBuZW9uCisKK0VOVFJZKGJ6ZXJvKQorICAgICAgICBtb3YgICAgIHIyLCByMQorICAgICAgICBtb3YgICAgIHIxLCAjMAorRU5EKGJ6ZXJvKQorCisvKiBtZW1zZXQoKSByZXR1cm5zIGl0cyBmaXJzdCBhcmd1bWVudC4gICovCitFTlRSWShtZW1zZXQpCisgICAgICAgIC5zYXZlICAgICAgIHtyMH0KKyAgICAgICAgc3RtZmQgICAgICAgc3AhLCB7cjB9CisKKyAgICAgICAgdmR1cC44ICAgICAgcTAsIHIxCisKKyAgICAgICAgLyogbWFrZSBzdXJlIHdlIGhhdmUgYXQgbGVhc3QgMzIgYnl0ZXMgdG8gd3JpdGUgKi8KKyAgICAgICAgc3VicyAgICAgICAgcjIsIHIyLCAjMzIKKyAgICAgICAgYmxvICAgICAgICAgMmYKKyAgICAgICAgdm1vdiAgICAgICAgcTEsIHEwCisKKzE6ICAgICAgLyogVGhlIG1haW4gbG9vcCB3cml0ZXMgMzIgYnl0ZXMgYXQgYSB0aW1lICovCisgICAgICAgIHN1YnMgICAgICAgIHIyLCByMiwgIzMyCisgICAgICAgIHZzdDEuOCAgICAgIHtkMCAtIGQzfSwgW3IwXSEKKyAgICAgICAgYmhzICAgICAgICAgMWIKKworMjogICAgICAvKiBsZXNzIHRoYW4gMzIgbGVmdCAqLworICAgICAgICBhZGQgICAgICAgICByMiwgcjIsICMzMgorICAgICAgICB0c3QgICAgICAgICByMiwgIzB4MTAKKyAgICAgICAgYmVxICAgICAgICAgM2YKKworICAgICAgICAvLyB3cml0ZXMgMTYgYnl0ZXMsIDEyOC1iaXRzIGFsaWduZWQKKyAgICAgICAgdnN0MS44ICAgICAge2QwLCBkMX0sIFtyMF0hCiszOiAgICAgIC8qIHdyaXRlIHVwIHRvIDE1LWJ5dGVzIChjb3VudCBpbiByMikgKi8KKyAgICAgICAgbW92cyAgICAgICAgaXAsIHIyLCBsc2wgIzI5CisgICAgICAgIGJjYyAgICAgICAgIDFmCisgICAgICAgIHZzdDEuOCAgICAgIHtkMH0sIFtyMF0hCisxOiAgICAgIGJnZSAgICAgICAgIDJmCisgICAgICAgIHZzdDEuMzIgICAgIHtkMFswXX0sIFtyMF0hCisyOiAgICAgIG1vdnMgICAgICAgIGlwLCByMiwgbHNsICMzMQorICAgICAgICBzdHJtaWIgICAgICByMSwgW3IwXSwgIzEKKyAgICAgICAgc3RyY3NiICAgICAgcjEsIFtyMF0sICMxCisgICAgICAgIHN0cmNzYiAgICAgIHIxLCBbcjBdLCAjMQorICAgICAgICBsZG1mZCAgICAgICBzcCEsIHtyMH0KKyAgICAgICAgYnggICAgICAgICAgbHIKK0VORChtZW1zZXQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL2tyYWl0L2Jpb25pYy9zdHJjbXAuUyBiL2xpYmMvYXJjaC1hcm0va3JhaXQvYmlvbmljL3N0cmNtcC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2MTRiOWQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL2tyYWl0L2Jpb25pYy9zdHJjbXAuUwpAQCAtMCwwICsxLDQ3NyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMyBBUk0gTHRkCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gVGhlIG5hbWUgb2YgdGhlIGNvbXBhbnkgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZQorICogICAgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuCisgKiAgICBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVJNIExURCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQKKyAqIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgorICogSU4gTk8gRVZFTlQgU0hBTEwgQVJNIExURCBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVECisgKiBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORworICogTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8bWFjaGluZS9jcHUtZmVhdHVyZXMuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgorCisjaWZkZWYgX19BUk1FQl9fCisjZGVmaW5lIFMyTE9NRU0gbHNsCisjZGVmaW5lIFMyTE9NRU1FUSBsc2xlcQorI2RlZmluZSBTMkhJTUVNIGxzcgorI2RlZmluZSBNU0IgMHgwMDAwMDBmZgorI2RlZmluZSBMU0IgMHhmZjAwMDAwMAorI2RlZmluZSBCWVRFMF9PRkZTRVQgMjQKKyNkZWZpbmUgQllURTFfT0ZGU0VUIDE2CisjZGVmaW5lIEJZVEUyX09GRlNFVCA4CisjZGVmaW5lIEJZVEUzX09GRlNFVCAwCisjZWxzZSAvKiBub3QgIF9fQVJNRUJfXyAqLworI2RlZmluZSBTMkxPTUVNIGxzcgorI2RlZmluZSBTMkxPTUVNRVEgbHNyZXEKKyNkZWZpbmUgUzJISU1FTSBsc2wKKyNkZWZpbmUgQllURTBfT0ZGU0VUIDAKKyNkZWZpbmUgQllURTFfT0ZGU0VUIDgKKyNkZWZpbmUgQllURTJfT0ZGU0VUIDE2CisjZGVmaW5lIEJZVEUzX09GRlNFVCAyNAorI2RlZmluZSBNU0IgMHhmZjAwMDAwMAorI2RlZmluZSBMU0IgMHgwMDAwMDBmZgorI2VuZGlmIC8qIG5vdCAgX19BUk1FQl9fICovCisKKy5zeW50YXggICAgICAgICB1bmlmaWVkCisKKyNpZiBkZWZpbmVkIChfX3RodW1iX18pCisgICAgICAgIC50aHVtYgorICAgICAgICAudGh1bWJfZnVuYworI2VuZGlmCisKK0VOVFJZKHN0cmNtcCkKKyAgICAgIC8qIFVzZSBMRFJEIHdoZW5ldmVyIHBvc3NpYmxlLiAgKi8KKworLyogVGhlIG1haW4gdGhpbmcgdG8gbG9vayBvdXQgZm9yIHdoZW4gY29tcGFyaW5nIGxhcmdlIGJsb2NrcyBpcyB0aGF0CisgICB0aGUgbG9hZHMgZG8gbm90IGNyb3NzIGEgcGFnZSBib3VuZGFyeSB3aGVuIGxvYWRpbmcgcGFzdCB0aGUgaW5kZXgKKyAgIG9mIHRoZSBieXRlIHdpdGggdGhlIGZpcnN0IGRpZmZlcmVuY2Ugb3IgdGhlIGZpcnN0IHN0cmluZy10ZXJtaW5hdG9yLgorCisgICBGb3IgZXhhbXBsZSwgaWYgdGhlIHN0cmluZ3MgYXJlIGlkZW50aWNhbCBhbmQgdGhlIHN0cmluZy10ZXJtaW5hdG9yCisgICBpcyBhdCBpbmRleCBrLCBieXRlIGJ5IGJ5dGUgY29tcGFyaXNvbiB3aWxsIG5vdCBsb2FkIGJleW9uZCBhZGRyZXNzCisgICBzMStrIGFuZCBzMitrOyB3b3JkIGJ5IHdvcmQgY29tcGFyaXNvbiBtYXkgbG9hZCB1cCB0byAzIGJ5dGVzIGJleW9uZAorICAgazsgZG91YmxlIHdvcmQgLSB1cCB0byA3IGJ5dGVzLiAgSWYgdGhlIGxvYWQgb2YgdGhlc2UgYnl0ZXMgY3Jvc3NlcworICAgYSBwYWdlIGJvdW5kYXJ5LCBpdCBtaWdodCBjYXVzZSBhIG1lbW9yeSBmYXVsdCAoaWYgdGhlIHBhZ2UgaXMgbm90IG1hcHBlZCkKKyAgIHRoYXQgd291bGQgbm90IGhhdmUgaGFwcGVuZWQgaW4gYnl0ZSBieSBieXRlIGNvbXBhcmlzb24uCisKKyAgIElmIGFuIGFkZHJlc3MgaXMgKGRvdWJsZSkgd29yZCBhbGlnbmVkLCB0aGVuIGEgbG9hZCBvZiBhIChkb3VibGUpIHdvcmQKKyAgIGZyb20gdGhhdCBhZGRyZXNzIHdpbGwgbm90IGNyb3NzIGEgcGFnZSBib3VuZGFyeS4KKyAgIFRoZXJlZm9yZSwgdGhlIGFsZ29yaXRobSBiZWxvdyBjb25zaWRlcnMgd29yZCBhbmQgZG91YmxlLXdvcmQgYWxpZ25tZW50CisgICBvZiBzdHJpbmdzIHNlcGFyYXRlbHkuICAqLworCisvKiBIaWdoLWxldmVsIGRlc2NyaXB0aW9uIG9mIHRoZSBhbGdvcml0aG0uCisKKyAgICogVGhlIGZhc3QgcGF0aDogaWYgYm90aCBzdHJpbmdzIGFyZSBkb3VibGUtd29yZCBhbGlnbmVkLAorICAgICB1c2UgTERSRCB0byBsb2FkIHR3byB3b3JkcyBmcm9tIGVhY2ggc3RyaW5nIGluIGV2ZXJ5IGxvb3AgaXRlcmF0aW9uLgorICAgKiBJZiB0aGUgc3RyaW5ncyBoYXZlIHRoZSBzYW1lIG9mZnNldCBmcm9tIGEgd29yZCBib3VuZGFyeSwKKyAgICAgdXNlIExEUkIgdG8gbG9hZCBhbmQgY29tcGFyZSBieXRlIGJ5IGJ5dGUgdW50aWwKKyAgICAgdGhlIGZpcnN0IHN0cmluZyBpcyBhbGlnbmVkIHRvIGEgd29yZCBib3VuZGFyeSAoYXQgbW9zdCAzIGJ5dGVzKS4KKyAgICAgVGhpcyBpcyBvcHRpbWl6ZWQgZm9yIHF1aWNrIHJldHVybiBvbiBzaG9ydCB1bmFsaWduZWQgc3RyaW5ncy4KKyAgICogSWYgdGhlIHN0cmluZ3MgaGF2ZSB0aGUgc2FtZSBvZmZzZXQgZnJvbSBhIGRvdWJsZS13b3JkIGJvdW5kYXJ5LAorICAgICB1c2UgTERSRCB0byBsb2FkIHR3byB3b3JkcyBmcm9tIGVhY2ggc3RyaW5nIGluIGV2ZXJ5IGxvb3AgaXRlcmF0aW9uLCBhcyBpbiB0aGUgZmFzdCBwYXRoLgorICAgKiBJZiB0aGUgc3RyaW5ncyBkbyBub3QgaGF2ZSB0aGUgc2FtZSBvZmZzZXQgZnJvbSBhIGRvdWJsZS13b3JkIGJvdW5kYXJ5LAorICAgICBsb2FkIGEgd29yZCBmcm9tIHRoZSBzZWNvbmQgc3RyaW5nIGJlZm9yZSB0aGUgbG9vcCB0byBpbml0aWFsaXplIHRoZSBxdWV1ZS4KKyAgICAgVXNlIExEUkQgdG8gbG9hZCB0d28gd29yZHMgZnJvbSBldmVyeSBzdHJpbmcgaW4gZXZlcnkgbG9vcCBpdGVyYXRpb24uCisgICAgIEluc2lkZSB0aGUgbG9vcCwgbG9hZCB0aGUgc2Vjb25kIHdvcmQgZnJvbSB0aGUgc2Vjb25kIHN0cmluZyBvbmx5IGFmdGVyIGNvbXBhcmluZworICAgICB0aGUgZmlyc3Qgd29yZCwgdXNpbmcgdGhlIHF1ZXVlZCB2YWx1ZSwgdG8gZ3VhcmFudGVlIHNhZmV0eSBhY3Jvc3MgcGFnZSBib3VuZGFyaWVzLgorICAgKiBJZiB0aGUgc3RyaW5ncyBkbyBub3QgaGF2ZSB0aGUgc2FtZSBvZmZzZXQgZnJvbSBhIHdvcmQgYm91bmRhcnksCisgICAgIHVzZSBMRFIgYW5kIGEgc2hpZnQgcXVldWUuIE9yZGVyIG9mIGxvYWRzIGFuZCBjb21wYXJpc29ucyBtYXR0ZXJzLAorICAgICBzaW1pbGFybHkgdG8gdGhlIHByZXZpb3VzIGNhc2UuCisKKyAgICogVXNlIFVBREQ4IGFuZCBTRUwgdG8gY29tcGFyZSB3b3JkcywgYW5kIHVzZSBSRVYgYW5kIENMWiB0byBjb21wdXRlIHRoZSByZXR1cm4gdmFsdWUuCisgICAqIFRoZSBvbmx5IGRpZmZlcmVuY2UgYmV0d2VlbiBBUk0gYW5kIFRodW1iIG1vZGVzIGlzIHRoZSB1c2Ugb2YgQ0JaIGluc3RydWN0aW9uLgorICAgKiBUaGUgb25seSBkaWZmZXJlbmNlIGJldHdlZW4gYmlnIGFuZCBsaXR0bGUgZW5kaWFuIGlzIHRoZSB1c2Ugb2YgUkVWIGluIGxpdHRsZSBlbmRpYW4KKyAgICAgdG8gY29tcHV0ZSB0aGUgcmV0dXJuIHZhbHVlLCBpbnN0ZWFkIG9mIE1PVi4KKyovCisKKyAgICAgICAgLm1hY3JvIG1fY2J6IHJlZyBsYWJlbAorI2lmZGVmIF9fdGh1bWIyX18KKyAgICAgICAgY2J6ICAgICBccmVnLCBcbGFiZWwKKyNlbHNlICAgLyogbm90IGRlZmluZWQgX190aHVtYjJfXyAqLworICAgICAgICBjbXAgICAgIFxyZWcsICMwCisgICAgICAgIGJlcSAgICAgXGxhYmVsCisjZW5kaWYgLyogbm90IGRlZmluZWQgX190aHVtYjJfXyAqLworICAgICAgICAuZW5kbSAvKiBtX2NieiAqLworCisgICAgICAgIC5tYWNybyBtX2NibnogcmVnIGxhYmVsCisjaWZkZWYgX190aHVtYjJfXworICAgICAgICBjYm56ICAgIFxyZWcsIFxsYWJlbAorI2Vsc2UgICAvKiBub3QgZGVmaW5lZCBfX3RodW1iMl9fICovCisgICAgICAgIGNtcCAgICAgXHJlZywgIzAKKyAgICAgICAgYm5lICAgICBcbGFiZWwKKyNlbmRpZiAvKiBub3QgZGVmaW5lZCBfX3RodW1iMl9fICovCisgICAgICAgIC5lbmRtIC8qIG1fY2JueiAqLworCisgICAgICAgIC5tYWNybyAgaW5pdAorICAgICAgICAvKiBNYWNybyB0byBzYXZlIHRlbXBvcmFyeSByZWdpc3RlcnMgYW5kIHByZXBhcmUgbWFnaWMgdmFsdWVzLiAgKi8KKyAgICAgICAgc3VicyAgICBzcCwgc3AsICMxNgorICAgICAgICBzdHJkICAgIHI0LCByNSwgW3NwLCAjOF0KKyAgICAgICAgc3RyZCAgICByNiwgcjcsIFtzcF0KKyAgICAgICAgbXZuICAgICByNiwgIzAgIC8qIGFsbCBGICovCisgICAgICAgIG1vdiAgICAgcjcsICMwICAvKiBhbGwgMCAqLworICAgICAgICAuZW5kbSAgIC8qIGluaXQgKi8KKworICAgICAgICAubWFjcm8gIG1hZ2ljX2NvbXBhcmVfYW5kX2JyYW5jaCB3MSB3MiBsYWJlbAorICAgICAgICAvKiBNYWNybyB0byBjb21wYXJlIHJlZ2lzdGVycyB3MSBhbmQgdzIgYW5kIGNvbmRpdGlvbmFsbHkgYnJhbmNoIHRvIGxhYmVsLiAgKi8KKyAgICAgICAgY21wICAgICBcdzEsIFx3MiAgICAgICAgLyogQXJlIHcxIGFuZCB3MiB0aGUgc2FtZT8gICovCisgICAgICAgIG1hZ2ljX2ZpbmRfemVyb19ieXRlcyBcdzEKKyAgICAgICAgaXQgICAgICBlcQorICAgICAgICBjbXBlcSAgIGlwLCAjMCAgICAgICAgICAvKiBJcyB0aGVyZSBhIHplcm8gYnl0ZSBpbiB3MT8gICovCisgICAgICAgIGJuZSAgICAgXGxhYmVsCisgICAgICAgIC5lbmRtIC8qIG1hZ2ljX2NvbXBhcmVfYW5kX2JyYW5jaCAqLworCisgICAgICAgIC5tYWNybyAgbWFnaWNfZmluZF96ZXJvX2J5dGVzIHcxCisgICAgICAgIC8qIE1hY3JvIHRvIGZpbmQgYWxsLXplcm8gYnl0ZXMgaW4gdzEsIHJlc3VsdCBpcyBpbiBpcC4gICovCisjaWYgKGRlZmluZWQgKF9fQVJNX0ZFQVRVUkVfRFNQKSkKKyAgICAgICAgdWFkZDggICBpcCwgXHcxLCByNgorICAgICAgICBzZWwgICAgIGlwLCByNywgcjYKKyNlbHNlIC8qIG5vdCBkZWZpbmVkIChfX0FSTV9GRUFUVVJFX0RTUCkgKi8KKyAgICAgICAgLyogX19BUk1fRkVBVFVSRV9EU1AgaXMgbm90IGRlZmluZWQgZm9yIHNvbWUgQ29ydGV4LU0gcHJvY2Vzc29ycy4KKyAgICAgICAgQ29pbmNpZGVudGx5LCB0aGVzZSBwcm9jZXNzb3JzIG9ubHkgaGF2ZSBUaHVtYi0yIG1vZGUsIHdoZXJlIHdlIGNhbiB1c2UgdGhlCisgICAgICAgIHRoZSAobGFyZ2UpIG1hZ2ljIGNvbnN0YW50IGF2YWlsYWJsZSBkaXJlY3RseSBhcyBhbiBpbW1lZGlhdGUgaW4gaW5zdHJ1Y3Rpb25zLgorICAgICAgICBOb3RlIHRoYXQgd2UgY2Fubm90IHVzZSB0aGUgbWFnaWMgY29uc3RhbnQgaW4gQVJNIG1vZGUsIHdoZXJlIHdlIG5lZWQKKyAgICAgICAgdG8gY3JlYXRlIHRoZSBjb25zdGFudCBpbiBhIHJlZ2lzdGVyLiAgKi8KKyAgICAgICAgc3ViICAgICBpcCwgXHcxLCAjMHgwMTAxMDEwMQorICAgICAgICBiaWMgICAgIGlwLCBpcCwgXHcxCisgICAgICAgIGFuZCAgICAgaXAsIGlwLCAjMHg4MDgwODA4MAorI2VuZGlmIC8qIG5vdCBkZWZpbmVkIChfX0FSTV9GRUFUVVJFX0RTUCkgKi8KKyAgICAgICAgLmVuZG0gLyogbWFnaWNfZmluZF96ZXJvX2J5dGVzICovCisKKyAgICAgICAgLm1hY3JvICBzZXR1cF9yZXR1cm4gdzEgdzIKKyNpZmRlZiBfX0FSTUVCX18KKyAgICAgICAgbW92ICAgICByMSwgXHcxCisgICAgICAgIG1vdiAgICAgcjIsIFx3MgorI2Vsc2UgLyogbm90ICBfX0FSTUVCX18gKi8KKyAgICAgICAgcmV2ICAgICByMSwgXHcxCisgICAgICAgIHJldiAgICAgcjIsIFx3MgorI2VuZGlmIC8qIG5vdCAgX19BUk1FQl9fICovCisgICAgICAgIC5lbmRtIC8qIHNldHVwX3JldHVybiAqLworCisgICAgICAgIHBsZCBbcjAsICMwXQorICAgICAgICBwbGQgW3IxLCAjMF0KKworICAgICAgICAvKiBBcmUgYm90aCBzdHJpbmdzIGRvdWJsZS13b3JkIGFsaWduZWQ/ICAqLworICAgICAgICBvcnIgICAgIGlwLCByMCwgcjEKKyAgICAgICAgdHN0ICAgICBpcCwgIzcKKyAgICAgICAgYm5lICAgICBkb19hbGlnbgorCisgICAgICAgIC8qIEZhc3QgcGF0aC4gICovCisgICAgICAgIGluaXQKKworZG91Ymxld29yZF9hbGlnbmVkOgorCisgICAgICAgIC8qIEdldCBoZXJlIHdoZW4gdGhlIHN0cmluZ3MgdG8gY29tcGFyZSBhcmUgZG91YmxlLXdvcmQgYWxpZ25lZC4gICovCisgICAgICAgIC8qIENvbXBhcmUgdHdvIHdvcmRzIGluIGV2ZXJ5IGl0ZXJhdGlvbi4gICovCisgICAgICAgIC5wMmFsaWduICAgICAgICAyCisyOgorICAgICAgICBwbGQgW3IwLCAjMTZdCisgICAgICAgIHBsZCBbcjEsICMxNl0KKworICAgICAgICAvKiBMb2FkIHRoZSBuZXh0IGRvdWJsZS13b3JkIGZyb20gZWFjaCBzdHJpbmcuICAqLworICAgICAgICBsZHJkICAgIHIyLCByMywgW3IwXSwgIzgKKyAgICAgICAgbGRyZCAgICByNCwgcjUsIFtyMV0sICM4CisKKyAgICAgICAgbWFnaWNfY29tcGFyZV9hbmRfYnJhbmNoIHcxPXIyLCB3Mj1yNCwgbGFiZWw9cmV0dXJuXzI0CisgICAgICAgIG1hZ2ljX2NvbXBhcmVfYW5kX2JyYW5jaCB3MT1yMywgdzI9cjUsIGxhYmVsPXJldHVybl8zNQorICAgICAgICBiICAgICAgIDJiCisKK2RvX2FsaWduOgorICAgICAgICAvKiBJcyB0aGUgZmlyc3Qgc3RyaW5nIHdvcmQtYWxpZ25lZD8gICovCisgICAgICAgIGFuZHMgICAgaXAsIHIwLCAjMworICAgICAgICBiZXEgICAgIHdvcmRfYWxpZ25lZF9yMAorCisgICAgICAgIC8qIEZhc3QgY29tcGFyZSBieXRlIGJ5IGJ5dGUgdW50aWwgdGhlIGZpcnN0IHN0cmluZyBpcyB3b3JkLWFsaWduZWQuICAqLworICAgICAgICAvKiBUaGUgb2Zmc2V0IG9mIHIwIGZyb20gYSB3b3JkIGJvdW5kYXJ5IGlzIGluIGlwLiBUaHVzLCB0aGUgbnVtYmVyIG9mIGJ5dGVzCisgICAgICAgIHRvIHJlYWQgdW50aWwgdGhlIG5leHQgd29yZCBib3VuZGFyeSBpcyA0LWlwLiAgKi8KKyAgICAgICAgYmljICAgICByMCwgcjAsICMzCisgICAgICAgIGxkciAgICAgcjIsIFtyMF0sICM0CisgICAgICAgIGxzbHMgICAgaXAsIGlwLCAjMzEKKyAgICAgICAgYmVxICAgICBieXRlMgorICAgICAgICBiY3MgICAgIGJ5dGUzCisKK2J5dGUxOgorICAgICAgICBsZHJiICAgIGlwLCBbcjFdLCAjMQorICAgICAgICB1eHRiICAgIHIzLCByMiwgcm9yICNCWVRFMV9PRkZTRVQKKyAgICAgICAgc3VicyAgICBpcCwgcjMsIGlwCisgICAgICAgIGJuZSAgICAgZmFzdF9yZXR1cm4KKyAgICAgICAgbV9jYnogICByZWc9cjMsIGxhYmVsPWZhc3RfcmV0dXJuCisKK2J5dGUyOgorICAgICAgICBsZHJiICAgIGlwLCBbcjFdLCAjMQorICAgICAgICB1eHRiICAgIHIzLCByMiwgcm9yICNCWVRFMl9PRkZTRVQKKyAgICAgICAgc3VicyAgICBpcCwgcjMsIGlwCisgICAgICAgIGJuZSAgICAgZmFzdF9yZXR1cm4KKyAgICAgICAgbV9jYnogICByZWc9cjMsIGxhYmVsPWZhc3RfcmV0dXJuCisKK2J5dGUzOgorICAgICAgICBsZHJiICAgIGlwLCBbcjFdLCAjMQorICAgICAgICB1eHRiICAgIHIzLCByMiwgcm9yICNCWVRFM19PRkZTRVQKKyAgICAgICAgc3VicyAgICBpcCwgcjMsIGlwCisgICAgICAgIGJuZSAgICAgZmFzdF9yZXR1cm4KKyAgICAgICAgbV9jYm56ICByZWc9cjMsIGxhYmVsPXdvcmRfYWxpZ25lZF9yMAorCitmYXN0X3JldHVybjoKKyAgICAgICAgbW92ICAgICByMCwgaXAKKyAgICAgICAgYnggICAgICBscgorCit3b3JkX2FsaWduZWRfcjA6CisgICAgICAgIGluaXQKKyAgICAgICAgLyogVGhlIGZpcnN0IHN0cmluZyBpcyB3b3JkLWFsaWduZWQuICAqLworICAgICAgICAvKiBJcyB0aGUgc2Vjb25kIHN0cmluZyB3b3JkLWFsaWduZWQ/ICAqLworICAgICAgICBhbmRzICAgIGlwLCByMSwgIzMKKyAgICAgICAgYm5lICAgICBzdHJjbXBfdW5hbGlnbmVkCisKK3dvcmRfYWxpZ25lZDoKKyAgICAgICAgLyogVGhlIHN0cmluZ3MgYXJlIHdvcmQtYWxpZ25lZC4gKi8KKyAgICAgICAgLyogSXMgdGhlIGZpcnN0IHN0cmluZyBkb3VibGUtd29yZCBhbGlnbmVkPyAgKi8KKyAgICAgICAgdHN0ICAgICByMCwgIzQKKyAgICAgICAgYmVxICAgICBkb3VibGV3b3JkX2FsaWduZWRfcjAKKworICAgICAgICAvKiBJZiByMCBpcyBub3QgZG91YmxlLXdvcmQgYWxpZ25lZCB5ZXQsIGFsaWduIGl0IGJ5IGxvYWRpbmcKKyAgICAgICAgYW5kIGNvbXBhcmluZyB0aGUgbmV4dCB3b3JkIGZyb20gZWFjaCBzdHJpbmcuICAqLworICAgICAgICBsZHIgICAgIHIyLCBbcjBdLCAjNAorICAgICAgICBsZHIgICAgIHI0LCBbcjFdLCAjNAorICAgICAgICBtYWdpY19jb21wYXJlX2FuZF9icmFuY2ggdzE9cjIgdzI9cjQgbGFiZWw9cmV0dXJuXzI0CisKK2RvdWJsZXdvcmRfYWxpZ25lZF9yMDoKKyAgICAgICAgLyogR2V0IGhlcmUgd2hlbiByMCBpcyBkb3VibGUtd29yZCBhbGlnbmVkLiAgKi8KKyAgICAgICAgLyogSXMgcjEgZG91Ymxld29yZF9hbGlnbmVkPyAgKi8KKyAgICAgICAgdHN0ICAgICByMSwgIzQKKyAgICAgICAgYmVxICAgICBkb3VibGV3b3JkX2FsaWduZWQKKworICAgICAgICAvKiBHZXQgaGVyZSB3aGVuIHRoZSBzdHJpbmdzIHRvIGNvbXBhcmUgYXJlIHdvcmQtYWxpZ25lZCwKKyAgICAgICAgcjAgaXMgZG91YmxlLXdvcmQgYWxpZ25lZCwgYnV0IHIxIGlzIG5vdCBkb3VibGUtd29yZCBhbGlnbmVkLiAgKi8KKworICAgICAgICAvKiBJbml0aWFsaXplIHRoZSBxdWV1ZS4gICovCisgICAgICAgIGxkciAgICAgcjUsIFtyMV0sICM0CisKKyAgICAgICAgLyogQ29tcGFyZSB0d28gd29yZHMgaW4gZXZlcnkgaXRlcmF0aW9uLiAgKi8KKyAgICAgICAgLnAyYWxpZ24gICAgICAgIDIKKzM6CisgICAgICAgIHBsZCBbcjAsICMxNl0KKyAgICAgICAgcGxkIFtyMSwgIzE2XQorCisgICAgICAgIC8qIExvYWQgdGhlIG5leHQgZG91YmxlLXdvcmQgZnJvbSBlYWNoIHN0cmluZyBhbmQgY29tcGFyZS4gICovCisgICAgICAgIGxkcmQgICAgcjIsIHIzLCBbcjBdLCAjOAorICAgICAgICBtYWdpY19jb21wYXJlX2FuZF9icmFuY2ggdzE9cjIgdzI9cjUgbGFiZWw9cmV0dXJuXzI1CisgICAgICAgIGxkcmQgICAgcjQsIHI1LCBbcjFdLCAjOAorICAgICAgICBtYWdpY19jb21wYXJlX2FuZF9icmFuY2ggdzE9cjMgdzI9cjQgbGFiZWw9cmV0dXJuXzM0CisgICAgICAgIGIgICAgICAgM2IKKworICAgICAgICAubWFjcm8gbWlzY21wX3dvcmQgb2Zmc2V0bG8gb2Zmc2V0aGkKKyAgICAgICAgLyogTWFjcm8gdG8gY29tcGFyZSBtaXNhbGlnbmVkIHN0cmluZ3MuICAqLworICAgICAgICAvKiByMCwgcjEgYXJlIHdvcmQtYWxpZ25lZCwgYW5kIGF0IGxlYXN0IG9uZSBvZiB0aGUgc3RyaW5ncworICAgICAgICBpcyBub3QgZG91YmxlLXdvcmQgYWxpZ25lZC4gICovCisgICAgICAgIC8qIENvbXBhcmUgb25lIHdvcmQgaW4gZXZlcnkgbG9vcCBpdGVyYXRpb24uICAqLworICAgICAgICAvKiBPRkZTRVRMTyBpcyB0aGUgb3JpZ2luYWwgYml0LW9mZnNldCBvZiByMSBmcm9tIGEgd29yZC1ib3VuZGFyeSwKKyAgICAgICAgT0ZGU0VUSEkgaXMgMzIgLSBPRkZTRVRMTyAoaS5lLiwgb2Zmc2V0IGZyb20gdGhlIG5leHQgd29yZCkuICAqLworCisgICAgICAgIC8qIEluaXRpYWxpemUgdGhlIHNoaWZ0IHF1ZXVlLiAgKi8KKyAgICAgICAgbGRyICAgICByNSwgW3IxXSwgIzQKKworICAgICAgICAvKiBDb21wYXJlIG9uZSB3b3JkIGZyb20gZWFjaCBzdHJpbmcgaW4gZXZlcnkgbG9vcCBpdGVyYXRpb24uICAqLworICAgICAgICAucDJhbGlnbiAgICAgICAgMgorNzoKKyAgICAgICAgbGRyICAgICByMywgW3IwXSwgIzQKKyAgICAgICAgUzJMT01FTSByNSwgcjUsICNcb2Zmc2V0bG8KKyAgICAgICAgbWFnaWNfZmluZF96ZXJvX2J5dGVzIHcxPXIzCisgICAgICAgIGNtcCAgICAgcjcsIGlwLCBTMkhJTUVNICNcb2Zmc2V0bG8KKyAgICAgICAgYW5kICAgICByMiwgcjMsIHI2LCBTMkxPTUVNICNcb2Zmc2V0bG8KKyAgICAgICAgaXQgICAgICBlcQorICAgICAgICBjbXBlcSAgIHIyLCByNQorICAgICAgICBibmUgICAgIHJldHVybl8yNQorICAgICAgICBsZHIgICAgIHI1LCBbcjFdLCAjNAorICAgICAgICBjbXAgICAgIGlwLCAjMAorICAgICAgICBlb3IgcjMsIHIyLCByMworICAgICAgICBTMkhJTUVNIHIyLCByNSwgI1xvZmZzZXRoaQorICAgICAgICBpdCAgICAgIGVxCisgICAgICAgIGNtcGVxICAgcjMsIHIyCisgICAgICAgIGJuZSAgICAgcmV0dXJuXzMyCisgICAgICAgIGIgICAgICAgN2IKKyAgICAgICAgLmVuZG0gLyogbWlzY21wX3dvcmQgKi8KKworc3RyY21wX3VuYWxpZ25lZDoKKyAgICAgICAgLyogcjAgaXMgd29yZC1hbGlnbmVkLCByMSBpcyBhdCBvZmZzZXQgaXAgZnJvbSBhIHdvcmQuICAqLworICAgICAgICAvKiBBbGlnbiByMSB0byB0aGUgKHByZXZpb3VzKSB3b3JkLWJvdW5kYXJ5LiAgKi8KKyAgICAgICAgYmljICAgICByMSwgcjEsICMzCisKKyAgICAgICAgLyogVW5hbGlnbmVkIGNvbXBhcmlzb24gd29yZCBieSB3b3JkIHVzaW5nIExEUnMuICovCisgICAgICAgIGNtcCAgICAgaXAsICMyCisgICAgICAgIGJlcSAgICAgbWlzY21wX3dvcmRfMTYgICAgICAgICAgICAgICAgICAgIC8qIElmIGlwID09IDIuICAqLworICAgICAgICBiZ2UgICAgIG1pc2NtcF93b3JkXzI0ICAgICAgICAgICAgICAgICAgICAvKiBJZiBpcCA9PSAzLiAgKi8KKyAgICAgICAgbWlzY21wX3dvcmQgb2Zmc2V0bG89OCBvZmZzZXRoaT0yNCAgICAgICAgLyogSWYgaXAgPT0gMS4gICovCittaXNjbXBfd29yZF8yNDogIG1pc2NtcF93b3JkIG9mZnNldGxvPTI0IG9mZnNldGhpPTgKKworCityZXR1cm5fMzI6CisgICAgICAgIHNldHVwX3JldHVybiB3MT1yMywgdzI9cjIKKyAgICAgICAgYiAgICAgICBkb19yZXR1cm4KK3JldHVybl8zNDoKKyAgICAgICAgc2V0dXBfcmV0dXJuIHcxPXIzLCB3Mj1yNAorICAgICAgICBiICAgICAgIGRvX3JldHVybgorcmV0dXJuXzI1OgorICAgICAgICBzZXR1cF9yZXR1cm4gdzE9cjIsIHcyPXI1CisgICAgICAgIGIgICAgICAgZG9fcmV0dXJuCityZXR1cm5fMzU6CisgICAgICAgIHNldHVwX3JldHVybiB3MT1yMywgdzI9cjUKKyAgICAgICAgYiAgICAgICBkb19yZXR1cm4KK3JldHVybl8yNDoKKyAgICAgICAgc2V0dXBfcmV0dXJuIHcxPXIyLCB3Mj1yNAorCitkb19yZXR1cm46CisKKyNpZmRlZiBfX0FSTUVCX18KKyAgICAgICAgbW92ICAgICByMCwgaXAKKyNlbHNlIC8qIG5vdCAgX19BUk1FQl9fICovCisgICAgICAgIHJldiAgICAgcjAsIGlwCisjZW5kaWYgLyogbm90ICBfX0FSTUVCX18gKi8KKworICAgICAgICAvKiBSZXN0b3JlIHRlbXBvcmFyaWVzIGVhcmx5LCBiZWZvcmUgY29tcHV0aW5nIHRoZSByZXR1cm4gdmFsdWUuICAqLworICAgICAgICBsZHJkICAgIHI2LCByNywgW3NwXQorICAgICAgICBsZHJkICAgIHI0LCByNSwgW3NwLCAjOF0KKyAgICAgICAgYWRkcyAgICBzcCwgc3AsICMxNgorCisgICAgICAgIC8qIFRoZXJlIGlzIGEgemVybyBvciBhIGRpZmZlcmVudCBieXRlIGJldHdlZW4gcjEgYW5kIHIyLiAgKi8KKyAgICAgICAgLyogcjAgY29udGFpbnMgYSBtYXNrIG9mIGFsbC16ZXJvIGJ5dGVzIGluIHIxLiAgKi8KKyAgICAgICAgLyogVXNpbmcgcjAgYW5kIG5vdCBpcCBoZXJlIGJlY2F1c2UgY2J6IHJlcXVpcmVzIGxvdyByZWdpc3Rlci4gICovCisgICAgICAgIG1fY2J6ICAgcmVnPXIwLCBsYWJlbD1jb21wdXRlX3JldHVybl92YWx1ZQorICAgICAgICBjbHogICAgIHIwLCByMAorICAgICAgICAvKiByMCBjb250YWlucyB0aGUgbnVtYmVyIG9mIGJpdHMgb24gdGhlIGxlZnQgb2YgdGhlIGZpcnN0IGFsbC16ZXJvIGJ5dGUgaW4gcjEuICAqLworICAgICAgICByc2IgICAgIHIwLCByMCwgIzI0CisgICAgICAgIC8qIEhlcmUsIHIwIGNvbnRhaW5zIHRoZSBudW1iZXIgb2YgYml0cyBvbiB0aGUgcmlnaHQgb2YgdGhlIGZpcnN0IGFsbC16ZXJvIGJ5dGUgaW4gcjEuICAqLworICAgICAgICBsc3IgICAgIHIxLCByMSwgcjAKKyAgICAgICAgbHNyICAgICByMiwgcjIsIHIwCisKK2NvbXB1dGVfcmV0dXJuX3ZhbHVlOgorICAgICAgICBtb3ZzICAgIHIwLCAjMQorICAgICAgICBjbXAgICAgIHIxLCByMgorICAgICAgICAvKiBUaGUgcmV0dXJuIHZhbHVlIGlzIGNvbXB1dGVkIGFzIGZvbGxvd3MuCisgICAgICAgIElmIHIxPnIyIHRoZW4gKEM9PTEgYW5kIFo9PTApIGFuZCBMUyBkb2Vzbid0IGhvbGQgYW5kIHIwIGlzICMxIGF0IHJldHVybi4KKyAgICAgICAgSWYgcjE8cjIgdGhlbiAoQz09MCBhbmQgWj09MCkgYW5kIHdlIGV4ZWN1dGUgU0JDIHdpdGggY2FycnlfaW49MCwKKyAgICAgICAgd2hpY2ggbWVhbnMgcjA6PXIwLXIwLTEgYW5kIHIwIGlzICMtMSBhdCByZXR1cm4uCisgICAgICAgIElmIHIxPXIyIHRoZW4gKEM9PTEgYW5kIFo9PTEpIGFuZCB3ZSBleGVjdXRlIFNCQyB3aXRoIGNhcnJ5X2luPTEsCisgICAgICAgIHdoaWNoIG1lYW5zIHIwOj1yMC1yMCBhbmQgcjAgaXMgIzAgYXQgcmV0dXJuLgorICAgICAgICAoQz09MCBhbmQgWj09MSkgY2Fubm90IGhhcHBlbiBiZWNhdXNlIHRoZSBjYXJyeSBiaXQgaXMgIm5vdCBib3Jyb3ciLiAgKi8KKyAgICAgICAgaXQgICAgICBscworICAgICAgICBzYmNscyAgIHIwLCByMCwgcjAKKyAgICAgICAgYnggICAgICBscgorCisgICAgLyogVGhlIGNvZGUgZnJvbSB0aGUgcHJldmlvdXMgdmVyc2lvbiBvZiBzdHJjbXAuUyBoYW5kbGVzIHRoaXMKKyAgICAgKiBwYXJ0aWN1bGFyIGNhc2UgKHRoZSBzZWNvbmQgc3RyaW5nIGlzIDIgYnl0ZXMgb2ZmIGEgd29yZCBhbGlnbm1lbnQpCisgICAgICogZmFzdGVyIHRoYW4gYW55IGN1cnJlbnQgdmVyc2lvbi4gSW4gdGhpcyB2ZXJ5IHNwZWNpZmljIGNhc2UsIHVzZSB0aGUKKyAgICAgKiBwcmV2aW91cyB2ZXJzaW9uLiBTZWUgYmlvbmljL2xpYmMvYXJjaC1hcm0vY29ydGV4LWExNS9iaW9uaWMvc3RyY21wLlMKKyAgICAgKiBmb3IgdGhlIHVuZWRpdGVkIHZlcnNpb24gb2YgdGhpcyBjb2RlLgorICAgICAqLworbWlzY21wX3dvcmRfMTY6CisJd3AxIC5yZXEgcjAKKwl3cDIgLnJlcSByMQorCWIxICAucmVxIHIyCisJdzEgIC5yZXEgcjQKKwl3MiAgLnJlcSByNQorCXQxICAucmVxIGlwCisJQCByMyBpcyBzY3JhdGNoCisKKyAgICAvKiBBdCB0aGlzIHBvaW50LCB3cDEgKHIwKSBoYXMgYWxyZWFkeSBiZWVuIHdvcmQtYWxpZ25lZC4gKi8KKzI6CisJbW92CWIxLCAjMQorCW9ycgliMSwgYjEsIGIxLCBsc2wgIzgKKwlvcnIJYjEsIGIxLCBiMSwgbHNsICMxNgorCisJYW5kCXQxLCB3cDIsICMzCisJYmljCXdwMiwgd3AyLCAjMworCWxkcgl3MSwgW3dwMV0sICM0CisJbGRyCXcyLCBbd3AyXSwgIzQKKworCS8qIENyaXRpY2FsIGlubmVyIExvb3A6IEJsb2NrIHdpdGggMiBieXRlcyBpbml0aWFsIG92ZXJsYXAgKi8KKwkucDJhbGlnbgkyCisyOgorCVMySElNRU0JdDEsIHcxLCAjMTYKKwlzdWIJcjMsIHcxLCBiMQorCVMyTE9NRU0JdDEsIHQxLCAjMTYKKwliaWMJcjMsIHIzLCB3MQorCWNtcAl0MSwgdzIsIFMyTE9NRU0gIzE2CisJYm5lCTRmCisJYW5kcwlyMywgcjMsIGIxLCBsc2wgIzcKKwlpdAllcQorCWxkcmVxCXcyLCBbd3AyXSwgIzQKKwlibmUJNWYKKwllb3IJdDEsIHQxLCB3MQorCWNtcAl0MSwgdzIsIFMySElNRU0gIzE2CisJYm5lCTZmCisJbGRyCXcxLCBbd3AxXSwgIzQKKwliCTJiCisKKzU6CisjaWZkZWYgX19BUk1FQl9fCisJLyogVGhlIHN5bmRyb21lIHZhbHVlIG1heSBjb250YWluIGZhbHNlIG9uZXMgaWYgdGhlIHN0cmluZyBlbmRzCisJICogd2l0aCB0aGUgYnl0ZXMgMHgwMSAweDAwCisJICovCisJdHN0CXcxLCAjMHhmZjAwMDAwMAorCWl0CW5lCisJdHN0bmUJdzEsICMweDAwZmYwMDAwCisJYmVxCTdmCisjZWxzZQorCWxzbHMJcjMsIHIzLCAjMTYKKwlibmUJN2YKKyNlbmRpZgorCWxkcmgJdzIsIFt3cDJdCisJUzJMT01FTQl0MSwgdzEsICMxNgorI2lmZGVmIF9fQVJNRUJfXworCWxzbAl3MiwgdzIsICMxNgorI2VuZGlmCisJYgk4ZgorCis2OgorCVMySElNRU0JdzIsIHcyLCAjMTYKKwlTMkxPTUVNCXQxLCB3MSwgIzE2Cis0OgorCVMyTE9NRU0JdzIsIHcyLCAjMTYKKwliCThmCisKKzc6CisJbW92CXIwLCAjMAorCisgICAgLyogUmVzdG9yZSByZWdpc3RlcnMgYW5kIHN0YWNrLiAqLworICAgIGxkcmQgICAgcjYsIHI3LCBbc3BdCisgICAgbGRyZCAgICByNCwgcjUsIFtzcCwgIzhdCisgICAgYWRkcyAgICBzcCwgc3AsICMxNgorCisJYngJbHIKKworODoKKwlhbmQJcjIsIHQxLCAjTFNCCisJYW5kCXIwLCB3MiwgI0xTQgorCWNtcAlyMCwgIzEKKwlpdAljcworCWNtcGNzCXIwLCByMgorCWl0dAllcQorCVMyTE9NRU1FUQl0MSwgdDEsICM4CisJUzJMT01FTUVRCXcyLCB3MiwgIzgKKwliZXEJOGIKKwlzdWIJcjAsIHIyLCByMAorCisgICAgLyogUmVzdG9yZSByZWdpc3RlcnMgYW5kIHN0YWNrLiAqLworICAgIGxkcmQgICAgcjYsIHI3LCBbc3BdCisgICAgbGRyZCAgICByNCwgcjUsIFtzcCwgIzhdCisgICAgYWRkcyAgICBzcCwgc3AsICMxNgorCisJYngJbHIKK0VORChzdHJjbXApCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL2tyYWl0L2tyYWl0Lm1rIGIvbGliYy9hcmNoLWFybS9rcmFpdC9rcmFpdC5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yODhhZmJiCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9rcmFpdC9rcmFpdC5tawpAQCAtMCwwICsxLDcgQEAKKyQoY2FsbCBsaWJjLWFkZC1jcHUtdmFyaWFudC1zcmMsTUVNQ1BZLGFyY2gtYXJtL2tyYWl0L2Jpb25pYy9tZW1jcHkuUykKKyQoY2FsbCBsaWJjLWFkZC1jcHUtdmFyaWFudC1zcmMsTUVNU0VULGFyY2gtYXJtL2tyYWl0L2Jpb25pYy9tZW1zZXQuUykKKyQoY2FsbCBsaWJjLWFkZC1jcHUtdmFyaWFudC1zcmMsU1RSQ01QLGFyY2gtYXJtL2tyYWl0L2Jpb25pYy9zdHJjbXAuUykKKyMgVXNlIGNvcnRleC1hMTUgdmVyc2lvbiBvZiBzdHJsZW4uCiskKGNhbGwgbGliYy1hZGQtY3B1LXZhcmlhbnQtc3JjLFNUUkxFTixhcmNoLWFybS9jb3J0ZXgtYTE1L2Jpb25pYy9zdHJsZW4uUykKKworaW5jbHVkZSBiaW9uaWMvbGliYy9hcmNoLWFybS9nZW5lcmljL2dlbmVyaWMubWsKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMubWsgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzLm1rCmluZGV4IGIxOWZiNjguLjI1MmE0MjggMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMubWsKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy5tawpAQCAtNCw2ICs0LDcgQEAKIHN5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL19leGl0X3RocmVhZC5TCiBzeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9fX2ZvcmsuUwogc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvX193YWl0aWQuUworc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvd2FpdDQuUwogc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvX19zeXNfY2xvbmUuUwogc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvZXhlY3ZlLlMKIHN5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL19fc2V0dWlkLlMKQEAgLTE4LDYgKzE5LDcgQEAKIHN5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL2dldGdyb3Vwcy5TCiBzeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9nZXRwZ2lkLlMKIHN5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL2dldHBwaWQuUworc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvZ2V0c2lkLlMKIHN5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL3NldHNpZC5TCiBzeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9zZXRnaWQuUwogc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvX19zZXRyZXVpZC5TCkBAIC01OCw2ICs2MCw4IEBACiBzeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9tYWR2aXNlLlMKIHN5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL21sb2NrLlMKIHN5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL211bmxvY2suUworc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvbWxvY2thbGwuUworc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvbXVubG9ja2FsbC5TCiBzeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9taW5jb3JlLlMKIHN5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL19faW9jdGwuUwogc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvcmVhZHYuUwpAQCAtMTA4LDYgKzExMiw3IEBACiBzeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9yZW5hbWUuUwogc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvX19nZXRjd2QuUwogc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvYWNjZXNzLlMKK3N5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL2ZhY2Nlc3NhdC5TCiBzeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9zeW1saW5rLlMKIHN5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL2ZjaGRpci5TCiBzeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy90cnVuY2F0ZS5TCkBAIC0xMjAsNiArMTI1LDkgQEAKIHN5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL3JlbW92ZXhhdHRyLlMKIHN5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL2xyZW1vdmV4YXR0ci5TCiBzeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9fX3N0YXRmczY0LlMKK3N5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL3Vuc2hhcmUuUworc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvc3dhcG9uLlMKK3N5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL3N3YXBvZmYuUwogc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvcGF1c2UuUwogc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvZ2V0dGltZW9mZGF5LlMKIHN5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL3NldHRpbWVvZmRheS5TCkBAIC0xMzgsNiArMTQ2LDkgQEAKIHN5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL19fdGltZXJfZGVsZXRlLlMKIHN5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL3V0aW1lcy5TCiBzeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy91dGltZW5zYXQuUworc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvdGltZXJmZF9jcmVhdGUuUworc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvdGltZXJmZF9zZXR0aW1lLlMKK3N5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL3RpbWVyZmRfZ2V0dGltZS5TCiBzeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9zaWdhY3Rpb24uUwogc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvc2lncHJvY21hc2suUwogc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvX19zaWdzdXNwZW5kLlMKQEAgLTE0NSw2ICsxNTYsNyBAQAogc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvX19ydF9zaWdwcm9jbWFzay5TCiBzeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9fX3J0X3NpZ3RpbWVkd2FpdC5TCiBzeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9zaWdwZW5kaW5nLlMKK3N5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL3NpZ25hbGZkNC5TCiBzeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9zb2NrZXQuUwogc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvc29ja2V0cGFpci5TCiBzeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9iaW5kLlMKQEAgLTE3NCw3ICsxODYsNiBAQAogc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvaW9wcmlvX3NldC5TCiBzeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9pb3ByaW9fZ2V0LlMKIHN5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL3VuYW1lLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL19fd2FpdDQuUwogc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvdW1hc2suUwogc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvX19yZWJvb3QuUwogc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvX19zeXNsb2cuUwpAQCAtMTgzLDYgKzE5NCw3IEBACiBzeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9rbG9nY3RsLlMKIHN5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL3N5c2luZm8uUwogc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvcGVyc29uYWxpdHkuUworc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvcGVyZl9ldmVudF9vcGVuLlMKIHN5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL2Z1dGV4LlMKIHN5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL2Vwb2xsX2NyZWF0ZS5TCiBzeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9lcG9sbF9jdGwuUwpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX2Jyay5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX2Jyay5TCmluZGV4IGEwODU0YTAuLjQwZmE0OWEgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19icmsuUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fYnJrLlMKQEAgLTEsMTQgKzEsMTUgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KIAogRU5UUlkoX19icmspCi0gICAgLnNhdmUgICB7cjQsIHI3fQotICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdiAgICAgaXAsIHI3CiAgICAgbGRyICAgICByNywgPV9fTlJfYnJrCiAgICAgc3dpICAgICAjMAotICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQotICAgIG1vdnMgICAgcjAsIHIwCi0gICAgYnhwbCAgICBscgotICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIG1vdiAgICAgcjcsIGlwCisgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQorICAgIGJ4bHMgICAgbHIKKyAgICBuZWcgICAgIHIwLCByMAorICAgIGIgICAgICAgX19zZXRfZXJybm8KIEVORChfX2JyaykKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19mY250bC5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX2ZjbnRsLlMKaW5kZXggMDY3ZWU5YS4uMTI2ZmIwZiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX2ZjbnRsLlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX2ZjbnRsLlMKQEAgLTEsMTQgKzEsMTUgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KIAogRU5UUlkoX19mY250bCkKLSAgICAuc2F2ZSAgIHtyNCwgcjd9Ci0gICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92ICAgICBpcCwgcjcKICAgICBsZHIgICAgIHI3LCA9X19OUl9mY250bAogICAgIHN3aSAgICAgIzAKLSAgICBsZG1mZCAgIHNwISwge3I0LCByN30KLSAgICBtb3ZzICAgIHIwLCByMAotICAgIGJ4cGwgICAgbHIKLSAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICBtb3YgICAgIHI3LCBpcAorICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKKyAgICBieGxzICAgIGxyCisgICAgbmVnICAgICByMCwgcjAKKyAgICBiICAgICAgIF9fc2V0X2Vycm5vCiBFTkQoX19mY250bCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19mY250bDY0LlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fZmNudGw2NC5TCmluZGV4IDNkMzk1NjcuLmI3YmM4N2IgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19mY250bDY0LlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX2ZjbnRsNjQuUwpAQCAtMSwxNCArMSwxNSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgogCiBFTlRSWShfX2ZjbnRsNjQpCi0gICAgLnNhdmUgICB7cjQsIHI3fQotICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdiAgICAgaXAsIHI3CiAgICAgbGRyICAgICByNywgPV9fTlJfZmNudGw2NAogICAgIHN3aSAgICAgIzAKLSAgICBsZG1mZCAgIHNwISwge3I0LCByN30KLSAgICBtb3ZzICAgIHIwLCByMAotICAgIGJ4cGwgICAgbHIKLSAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICBtb3YgICAgIHI3LCBpcAorICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKKyAgICBieGxzICAgIGxyCisgICAgbmVnICAgICByMCwgcjAKKyAgICBiICAgICAgIF9fc2V0X2Vycm5vCiBFTkQoX19mY250bDY0KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX2ZvcmsuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19mb3JrLlMKaW5kZXggNmNmMDhhZC4uM2JiMmZiOCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX2ZvcmsuUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fZm9yay5TCkBAIC0xLDE0ICsxLDE1IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+Ci0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CiAKIEVOVFJZKF9fZm9yaykKLSAgICAuc2F2ZSAgIHtyNCwgcjd9Ci0gICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92ICAgICBpcCwgcjcKICAgICBsZHIgICAgIHI3LCA9X19OUl9mb3JrCiAgICAgc3dpICAgICAjMAotICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQotICAgIG1vdnMgICAgcjAsIHIwCi0gICAgYnhwbCAgICBscgotICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIG1vdiAgICAgcjcsIGlwCisgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQorICAgIGJ4bHMgICAgbHIKKyAgICBuZWcgICAgIHIwLCByMAorICAgIGIgICAgICAgX19zZXRfZXJybm8KIEVORChfX2ZvcmspCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fZnN0YXRmczY0LlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fZnN0YXRmczY0LlMKaW5kZXggZThhYTJmNC4uYWZiYWQyNCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX2ZzdGF0ZnM2NC5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19mc3RhdGZzNjQuUwpAQCAtMSwxNCArMSwxNSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgogCiBFTlRSWShfX2ZzdGF0ZnM2NCkKLSAgICAuc2F2ZSAgIHtyNCwgcjd9Ci0gICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92ICAgICBpcCwgcjcKICAgICBsZHIgICAgIHI3LCA9X19OUl9mc3RhdGZzNjQKICAgICBzd2kgICAgICMwCi0gICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9Ci0gICAgbW92cyAgICByMCwgcjAKLSAgICBieHBsICAgIGxyCi0gICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgbW92ICAgICByNywgaXAKKyAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCisgICAgYnhscyAgICBscgorICAgIG5lZyAgICAgcjAsIHIwCisgICAgYiAgICAgICBfX3NldF9lcnJubwogRU5EKF9fZnN0YXRmczY0KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX2dldGNwdS5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX2dldGNwdS5TCmluZGV4IDc4MjcxZWIuLjNiMmNiZDkgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19nZXRjcHUuUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fZ2V0Y3B1LlMKQEAgLTEsMTQgKzEsMTUgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KIAogRU5UUlkoX19nZXRjcHUpCi0gICAgLnNhdmUgICB7cjQsIHI3fQotICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdiAgICAgaXAsIHI3CiAgICAgbGRyICAgICByNywgPV9fTlJfZ2V0Y3B1CiAgICAgc3dpICAgICAjMAotICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQotICAgIG1vdnMgICAgcjAsIHIwCi0gICAgYnhwbCAgICBscgotICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIG1vdiAgICAgcjcsIGlwCisgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQorICAgIGJ4bHMgICAgbHIKKyAgICBuZWcgICAgIHIwLCByMAorICAgIGIgICAgICAgX19zZXRfZXJybm8KIEVORChfX2dldGNwdSkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19nZXRjd2QuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19nZXRjd2QuUwppbmRleCBlMDlhNDg0Li43NzgzZTAzIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fZ2V0Y3dkLlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX2dldGN3ZC5TCkBAIC0xLDE0ICsxLDE1IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+Ci0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CiAKIEVOVFJZKF9fZ2V0Y3dkKQotICAgIC5zYXZlICAge3I0LCByN30KLSAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBtb3YgICAgIGlwLCByNwogICAgIGxkciAgICAgcjcsID1fX05SX2dldGN3ZAogICAgIHN3aSAgICAgIzAKLSAgICBsZG1mZCAgIHNwISwge3I0LCByN30KLSAgICBtb3ZzICAgIHIwLCByMAotICAgIGJ4cGwgICAgbHIKLSAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICBtb3YgICAgIHI3LCBpcAorICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKKyAgICBieGxzICAgIGxyCisgICAgbmVnICAgICByMCwgcjAKKyAgICBiICAgICAgIF9fc2V0X2Vycm5vCiBFTkQoX19nZXRjd2QpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fZ2V0cHJpb3JpdHkuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19nZXRwcmlvcml0eS5TCmluZGV4IDMwZTMzNWMuLjdhNmViZWMgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19nZXRwcmlvcml0eS5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19nZXRwcmlvcml0eS5TCkBAIC0xLDE0ICsxLDE1IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+Ci0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CiAKIEVOVFJZKF9fZ2V0cHJpb3JpdHkpCi0gICAgLnNhdmUgICB7cjQsIHI3fQotICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdiAgICAgaXAsIHI3CiAgICAgbGRyICAgICByNywgPV9fTlJfZ2V0cHJpb3JpdHkKICAgICBzd2kgICAgICMwCi0gICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9Ci0gICAgbW92cyAgICByMCwgcjAKLSAgICBieHBsICAgIGxyCi0gICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgbW92ICAgICByNywgaXAKKyAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCisgICAgYnhscyAgICBscgorICAgIG5lZyAgICAgcjAsIHIwCisgICAgYiAgICAgICBfX3NldF9lcnJubwogRU5EKF9fZ2V0cHJpb3JpdHkpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19faW9jdGwuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19pb2N0bC5TCmluZGV4IDU1NDgwOWYuLmNlMjBhNzEgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19pb2N0bC5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19pb2N0bC5TCkBAIC0xLDE0ICsxLDE1IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+Ci0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CiAKIEVOVFJZKF9faW9jdGwpCi0gICAgLnNhdmUgICB7cjQsIHI3fQotICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdiAgICAgaXAsIHI3CiAgICAgbGRyICAgICByNywgPV9fTlJfaW9jdGwKICAgICBzd2kgICAgICMwCi0gICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9Ci0gICAgbW92cyAgICByMCwgcjAKLSAgICBieHBsICAgIGxyCi0gICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgbW92ICAgICByNywgaXAKKyAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCisgICAgYnhscyAgICBscgorICAgIG5lZyAgICAgcjAsIHIwCisgICAgYiAgICAgICBfX3NldF9lcnJubwogRU5EKF9faW9jdGwpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fbGxzZWVrLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fbGxzZWVrLlMKaW5kZXggOTg5Mzg4Ni4uYWYzYjM4YyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX2xsc2Vlay5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19sbHNlZWsuUwpAQCAtMSw2ICsxLDcgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KIAogRU5UUlkoX19sbHNlZWspCiAgICAgbW92ICAgICBpcCwgc3AKQEAgLTEwLDcgKzExLDggQEAKICAgICBsZHIgICAgIHI3LCA9X19OUl9fbGxzZWVrCiAgICAgc3dpICAgICAjMAogICAgIGxkbWZkICAgc3AhLCB7cjQsIHI1LCByNiwgcjd9Ci0gICAgbW92cyAgICByMCwgcjAKLSAgICBieHBsICAgIGxyCi0gICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQorICAgIGJ4bHMgICAgbHIKKyAgICBuZWcgICAgIHIwLCByMAorICAgIGIgICAgICAgX19zZXRfZXJybm8KIEVORChfX2xsc2VlaykKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19tbWFwMi5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX21tYXAyLlMKaW5kZXggNTQyYjNlMC4uYzBjNWI1NSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX21tYXAyLlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX21tYXAyLlMKQEAgLTEsNiArMSw3IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+Ci0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CiAKIEVOVFJZKF9fbW1hcDIpCiAgICAgbW92ICAgICBpcCwgc3AKQEAgLTEwLDcgKzExLDggQEAKICAgICBsZHIgICAgIHI3LCA9X19OUl9tbWFwMgogICAgIHN3aSAgICAgIzAKICAgICBsZG1mZCAgIHNwISwge3I0LCByNSwgcjYsIHI3fQotICAgIG1vdnMgICAgcjAsIHIwCi0gICAgYnhwbCAgICBscgotICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKKyAgICBieGxzICAgIGxyCisgICAgbmVnICAgICByMCwgcjAKKyAgICBiICAgICAgIF9fc2V0X2Vycm5vCiBFTkQoX19tbWFwMikKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19vcGVuLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fb3Blbi5TCmluZGV4IGJlMmY0YmYuLmEzZjM1YmUgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19vcGVuLlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX29wZW4uUwpAQCAtMSwxNCArMSwxNSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgogCiBFTlRSWShfX29wZW4pCi0gICAgLnNhdmUgICB7cjQsIHI3fQotICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdiAgICAgaXAsIHI3CiAgICAgbGRyICAgICByNywgPV9fTlJfb3BlbgogICAgIHN3aSAgICAgIzAKLSAgICBsZG1mZCAgIHNwISwge3I0LCByN30KLSAgICBtb3ZzICAgIHIwLCByMAotICAgIGJ4cGwgICAgbHIKLSAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICBtb3YgICAgIHI3LCBpcAorICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKKyAgICBieGxzICAgIGxyCisgICAgbmVnICAgICByMCwgcjAKKyAgICBiICAgICAgIF9fc2V0X2Vycm5vCiBFTkQoX19vcGVuKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX29wZW5hdC5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX29wZW5hdC5TCmluZGV4IDRkOTE3ODAuLmVhMWEzYTcgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19vcGVuYXQuUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fb3BlbmF0LlMKQEAgLTEsMTQgKzEsMTUgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KIAogRU5UUlkoX19vcGVuYXQpCi0gICAgLnNhdmUgICB7cjQsIHI3fQotICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdiAgICAgaXAsIHI3CiAgICAgbGRyICAgICByNywgPV9fTlJfb3BlbmF0CiAgICAgc3dpICAgICAjMAotICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQotICAgIG1vdnMgICAgcjAsIHIwCi0gICAgYnhwbCAgICBscgotICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIG1vdiAgICAgcjcsIGlwCisgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQorICAgIGJ4bHMgICAgbHIKKyAgICBuZWcgICAgIHIwLCByMAorICAgIGIgICAgICAgX19zZXRfZXJybm8KIEVORChfX29wZW5hdCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19wdHJhY2UuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19wdHJhY2UuUwppbmRleCAwNGUwYTMwLi5iMWFiZjg3IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fcHRyYWNlLlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX3B0cmFjZS5TCkBAIC0xLDE0ICsxLDE1IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+Ci0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CiAKIEVOVFJZKF9fcHRyYWNlKQotICAgIC5zYXZlICAge3I0LCByN30KLSAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBtb3YgICAgIGlwLCByNwogICAgIGxkciAgICAgcjcsID1fX05SX3B0cmFjZQogICAgIHN3aSAgICAgIzAKLSAgICBsZG1mZCAgIHNwISwge3I0LCByN30KLSAgICBtb3ZzICAgIHIwLCByMAotICAgIGJ4cGwgICAgbHIKLSAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICBtb3YgICAgIHI3LCBpcAorICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKKyAgICBieGxzICAgIGxyCisgICAgbmVnICAgICByMCwgcjAKKyAgICBiICAgICAgIF9fc2V0X2Vycm5vCiBFTkQoX19wdHJhY2UpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fcmVib290LlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fcmVib290LlMKaW5kZXggZTc1ZGY0NS4uYWQyYmM4ZCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX3JlYm9vdC5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19yZWJvb3QuUwpAQCAtMSwxNCArMSwxNSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgogCiBFTlRSWShfX3JlYm9vdCkKLSAgICAuc2F2ZSAgIHtyNCwgcjd9Ci0gICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92ICAgICBpcCwgcjcKICAgICBsZHIgICAgIHI3LCA9X19OUl9yZWJvb3QKICAgICBzd2kgICAgICMwCi0gICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9Ci0gICAgbW92cyAgICByMCwgcjAKLSAgICBieHBsICAgIGxyCi0gICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgbW92ICAgICByNywgaXAKKyAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCisgICAgYnhscyAgICBscgorICAgIG5lZyAgICAgcjAsIHIwCisgICAgYiAgICAgICBfX3NldF9lcnJubwogRU5EKF9fcmVib290KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX3J0X3NpZ2FjdGlvbi5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX3J0X3NpZ2FjdGlvbi5TCmluZGV4IDU3YTMxNDkuLjBhNGJlMmEgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19ydF9zaWdhY3Rpb24uUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fcnRfc2lnYWN0aW9uLlMKQEAgLTEsMTQgKzEsMTUgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KIAogRU5UUlkoX19ydF9zaWdhY3Rpb24pCi0gICAgLnNhdmUgICB7cjQsIHI3fQotICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdiAgICAgaXAsIHI3CiAgICAgbGRyICAgICByNywgPV9fTlJfcnRfc2lnYWN0aW9uCiAgICAgc3dpICAgICAjMAotICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQotICAgIG1vdnMgICAgcjAsIHIwCi0gICAgYnhwbCAgICBscgotICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIG1vdiAgICAgcjcsIGlwCisgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQorICAgIGJ4bHMgICAgbHIKKyAgICBuZWcgICAgIHIwLCByMAorICAgIGIgICAgICAgX19zZXRfZXJybm8KIEVORChfX3J0X3NpZ2FjdGlvbikKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19ydF9zaWdwcm9jbWFzay5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX3J0X3NpZ3Byb2NtYXNrLlMKaW5kZXggODIyMDgyNS4uMDAwOGRhMiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX3J0X3NpZ3Byb2NtYXNrLlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX3J0X3NpZ3Byb2NtYXNrLlMKQEAgLTEsMTQgKzEsMTUgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KIAogRU5UUlkoX19ydF9zaWdwcm9jbWFzaykKLSAgICAuc2F2ZSAgIHtyNCwgcjd9Ci0gICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92ICAgICBpcCwgcjcKICAgICBsZHIgICAgIHI3LCA9X19OUl9ydF9zaWdwcm9jbWFzawogICAgIHN3aSAgICAgIzAKLSAgICBsZG1mZCAgIHNwISwge3I0LCByN30KLSAgICBtb3ZzICAgIHIwLCByMAotICAgIGJ4cGwgICAgbHIKLSAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICBtb3YgICAgIHI3LCBpcAorICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKKyAgICBieGxzICAgIGxyCisgICAgbmVnICAgICByMCwgcjAKKyAgICBiICAgICAgIF9fc2V0X2Vycm5vCiBFTkQoX19ydF9zaWdwcm9jbWFzaykKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19ydF9zaWd0aW1lZHdhaXQuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19ydF9zaWd0aW1lZHdhaXQuUwppbmRleCBiY2U2M2VkLi4wMmM0ZDE4IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fcnRfc2lndGltZWR3YWl0LlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX3J0X3NpZ3RpbWVkd2FpdC5TCkBAIC0xLDE0ICsxLDE1IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+Ci0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CiAKIEVOVFJZKF9fcnRfc2lndGltZWR3YWl0KQotICAgIC5zYXZlICAge3I0LCByN30KLSAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBtb3YgICAgIGlwLCByNwogICAgIGxkciAgICAgcjcsID1fX05SX3J0X3NpZ3RpbWVkd2FpdAogICAgIHN3aSAgICAgIzAKLSAgICBsZG1mZCAgIHNwISwge3I0LCByN30KLSAgICBtb3ZzICAgIHIwLCByMAotICAgIGJ4cGwgICAgbHIKLSAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICBtb3YgICAgIHI3LCBpcAorICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKKyAgICBieGxzICAgIGxyCisgICAgbmVnICAgICByMCwgcjAKKyAgICBiICAgICAgIF9fc2V0X2Vycm5vCiBFTkQoX19ydF9zaWd0aW1lZHdhaXQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fc2NoZWRfZ2V0YWZmaW5pdHkuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19zY2hlZF9nZXRhZmZpbml0eS5TCmluZGV4IGJkZDQ1MTcuLmMwMmY3ZmQgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19zY2hlZF9nZXRhZmZpbml0eS5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19zY2hlZF9nZXRhZmZpbml0eS5TCkBAIC0xLDE0ICsxLDE1IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+Ci0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CiAKIEVOVFJZKF9fc2NoZWRfZ2V0YWZmaW5pdHkpCi0gICAgLnNhdmUgICB7cjQsIHI3fQotICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdiAgICAgaXAsIHI3CiAgICAgbGRyICAgICByNywgPV9fTlJfc2NoZWRfZ2V0YWZmaW5pdHkKICAgICBzd2kgICAgICMwCi0gICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9Ci0gICAgbW92cyAgICByMCwgcjAKLSAgICBieHBsICAgIGxyCi0gICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgbW92ICAgICByNywgaXAKKyAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCisgICAgYnhscyAgICBscgorICAgIG5lZyAgICAgcjAsIHIwCisgICAgYiAgICAgICBfX3NldF9lcnJubwogRU5EKF9fc2NoZWRfZ2V0YWZmaW5pdHkpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fc2V0X3Rscy5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX3NldF90bHMuUwppbmRleCBjZjVkNmI2Li43MzE0MmJhIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fc2V0X3Rscy5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19zZXRfdGxzLlMKQEAgLTEsMTQgKzEsMTUgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KIAogRU5UUlkoX19zZXRfdGxzKQotICAgIC5zYXZlICAge3I0LCByN30KLSAgICBzdG1mZCAgIHNwISwge3I0LCByN30KLSAgICBsZHIgICAgIHI3LCA9X19OUl9BUk1fc2V0X3RscworICAgIG1vdiAgICAgaXAsIHI3CisgICAgbGRyICAgICByNywgPV9fQVJNX05SX3NldF90bHMKICAgICBzd2kgICAgICMwCi0gICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9Ci0gICAgbW92cyAgICByMCwgcjAKLSAgICBieHBsICAgIGxyCi0gICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgbW92ICAgICByNywgaXAKKyAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCisgICAgYnhscyAgICBscgorICAgIG5lZyAgICAgcjAsIHIwCisgICAgYiAgICAgICBfX3NldF9lcnJubwogRU5EKF9fc2V0X3RscykKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19zZXRyZXN1aWQuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19zZXRyZXN1aWQuUwppbmRleCBkNTA1M2JhLi4wZmQ4YWU2IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fc2V0cmVzdWlkLlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX3NldHJlc3VpZC5TCkBAIC0xLDE0ICsxLDE1IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+Ci0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CiAKIEVOVFJZKF9fc2V0cmVzdWlkKQotICAgIC5zYXZlICAge3I0LCByN30KLSAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBtb3YgICAgIGlwLCByNwogICAgIGxkciAgICAgcjcsID1fX05SX3NldHJlc3VpZDMyCiAgICAgc3dpICAgICAjMAotICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQotICAgIG1vdnMgICAgcjAsIHIwCi0gICAgYnhwbCAgICBscgotICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIG1vdiAgICAgcjcsIGlwCisgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQorICAgIGJ4bHMgICAgbHIKKyAgICBuZWcgICAgIHIwLCByMAorICAgIGIgICAgICAgX19zZXRfZXJybm8KIEVORChfX3NldHJlc3VpZCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19zZXRyZXVpZC5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX3NldHJldWlkLlMKaW5kZXggOWNkNTFmNi4uYmMyZmU4NCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX3NldHJldWlkLlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX3NldHJldWlkLlMKQEAgLTEsMTQgKzEsMTUgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KIAogRU5UUlkoX19zZXRyZXVpZCkKLSAgICAuc2F2ZSAgIHtyNCwgcjd9Ci0gICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92ICAgICBpcCwgcjcKICAgICBsZHIgICAgIHI3LCA9X19OUl9zZXRyZXVpZDMyCiAgICAgc3dpICAgICAjMAotICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQotICAgIG1vdnMgICAgcjAsIHIwCi0gICAgYnhwbCAgICBscgotICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIG1vdiAgICAgcjcsIGlwCisgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQorICAgIGJ4bHMgICAgbHIKKyAgICBuZWcgICAgIHIwLCByMAorICAgIGIgICAgICAgX19zZXRfZXJybm8KIEVORChfX3NldHJldWlkKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX3NldHVpZC5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX3NldHVpZC5TCmluZGV4IDg4ZGM1OGUuLmY3Yjk0ZGEgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19zZXR1aWQuUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fc2V0dWlkLlMKQEAgLTEsMTQgKzEsMTUgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KIAogRU5UUlkoX19zZXR1aWQpCi0gICAgLnNhdmUgICB7cjQsIHI3fQotICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdiAgICAgaXAsIHI3CiAgICAgbGRyICAgICByNywgPV9fTlJfc2V0dWlkMzIKICAgICBzd2kgICAgICMwCi0gICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9Ci0gICAgbW92cyAgICByMCwgcjAKLSAgICBieHBsICAgIGxyCi0gICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgbW92ICAgICByNywgaXAKKyAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCisgICAgYnhscyAgICBscgorICAgIG5lZyAgICAgcjAsIHIwCisgICAgYiAgICAgICBfX3NldF9lcnJubwogRU5EKF9fc2V0dWlkKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX3NpZ3N1c3BlbmQuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19zaWdzdXNwZW5kLlMKaW5kZXggMWVjZWNiNy4uZGM1MTlkMiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX3NpZ3N1c3BlbmQuUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fc2lnc3VzcGVuZC5TCkBAIC0xLDE0ICsxLDE1IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+Ci0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CiAKIEVOVFJZKF9fc2lnc3VzcGVuZCkKLSAgICAuc2F2ZSAgIHtyNCwgcjd9Ci0gICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92ICAgICBpcCwgcjcKICAgICBsZHIgICAgIHI3LCA9X19OUl9zaWdzdXNwZW5kCiAgICAgc3dpICAgICAjMAotICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQotICAgIG1vdnMgICAgcjAsIHIwCi0gICAgYnhwbCAgICBscgotICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIG1vdiAgICAgcjcsIGlwCisgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQorICAgIGJ4bHMgICAgbHIKKyAgICBuZWcgICAgIHIwLCByMAorICAgIGIgICAgICAgX19zZXRfZXJybm8KIEVORChfX3NpZ3N1c3BlbmQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fc3RhdGZzNjQuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19zdGF0ZnM2NC5TCmluZGV4IDRhZmVmNzEuLjRiYTU5MmUgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19zdGF0ZnM2NC5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19zdGF0ZnM2NC5TCkBAIC0xLDE0ICsxLDE1IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+Ci0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CiAKIEVOVFJZKF9fc3RhdGZzNjQpCi0gICAgLnNhdmUgICB7cjQsIHI3fQotICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdiAgICAgaXAsIHI3CiAgICAgbGRyICAgICByNywgPV9fTlJfc3RhdGZzNjQKICAgICBzd2kgICAgICMwCi0gICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9Ci0gICAgbW92cyAgICByMCwgcjAKLSAgICBieHBsICAgIGxyCi0gICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgbW92ICAgICByNywgaXAKKyAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCisgICAgYnhscyAgICBscgorICAgIG5lZyAgICAgcjAsIHIwCisgICAgYiAgICAgICBfX3NldF9lcnJubwogRU5EKF9fc3RhdGZzNjQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fc3lzX2Nsb25lLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fc3lzX2Nsb25lLlMKaW5kZXggNDgwNDZiYy4uNzMwOGMyMSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX3N5c19jbG9uZS5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19zeXNfY2xvbmUuUwpAQCAtMSw2ICsxLDcgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KIAogRU5UUlkoX19zeXNfY2xvbmUpCiAgICAgbW92ICAgICBpcCwgc3AKQEAgLTEwLDcgKzExLDggQEAKICAgICBsZHIgICAgIHI3LCA9X19OUl9jbG9uZQogICAgIHN3aSAgICAgIzAKICAgICBsZG1mZCAgIHNwISwge3I0LCByNSwgcjYsIHI3fQotICAgIG1vdnMgICAgcjAsIHIwCi0gICAgYnhwbCAgICBscgotICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKKyAgICBieGxzICAgIGxyCisgICAgbmVnICAgICByMCwgcjAKKyAgICBiICAgICAgIF9fc2V0X2Vycm5vCiBFTkQoX19zeXNfY2xvbmUpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fc3lzbG9nLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fc3lzbG9nLlMKaW5kZXggNmRiZTc0NS4uMTU4ODkwMyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX3N5c2xvZy5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19zeXNsb2cuUwpAQCAtMSwxNCArMSwxNSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgogCiBFTlRSWShfX3N5c2xvZykKLSAgICAuc2F2ZSAgIHtyNCwgcjd9Ci0gICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92ICAgICBpcCwgcjcKICAgICBsZHIgICAgIHI3LCA9X19OUl9zeXNsb2cKICAgICBzd2kgICAgICMwCi0gICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9Ci0gICAgbW92cyAgICByMCwgcjAKLSAgICBieHBsICAgIGxyCi0gICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgbW92ICAgICByNywgaXAKKyAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCisgICAgYnhscyAgICBscgorICAgIG5lZyAgICAgcjAsIHIwCisgICAgYiAgICAgICBfX3NldF9lcnJubwogRU5EKF9fc3lzbG9nKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX3RpbWVyX2NyZWF0ZS5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX3RpbWVyX2NyZWF0ZS5TCmluZGV4IGM1NDcxMzcuLmVlZGZmOTMgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX190aW1lcl9jcmVhdGUuUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fdGltZXJfY3JlYXRlLlMKQEAgLTEsMTQgKzEsMTUgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KIAogRU5UUlkoX190aW1lcl9jcmVhdGUpCi0gICAgLnNhdmUgICB7cjQsIHI3fQotICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdiAgICAgaXAsIHI3CiAgICAgbGRyICAgICByNywgPV9fTlJfdGltZXJfY3JlYXRlCiAgICAgc3dpICAgICAjMAotICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQotICAgIG1vdnMgICAgcjAsIHIwCi0gICAgYnhwbCAgICBscgotICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIG1vdiAgICAgcjcsIGlwCisgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQorICAgIGJ4bHMgICAgbHIKKyAgICBuZWcgICAgIHIwLCByMAorICAgIGIgICAgICAgX19zZXRfZXJybm8KIEVORChfX3RpbWVyX2NyZWF0ZSkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX190aW1lcl9kZWxldGUuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX190aW1lcl9kZWxldGUuUwppbmRleCBjYTJlMGEzLi5iZTI5YzQwIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fdGltZXJfZGVsZXRlLlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX3RpbWVyX2RlbGV0ZS5TCkBAIC0xLDE0ICsxLDE1IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+Ci0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CiAKIEVOVFJZKF9fdGltZXJfZGVsZXRlKQotICAgIC5zYXZlICAge3I0LCByN30KLSAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBtb3YgICAgIGlwLCByNwogICAgIGxkciAgICAgcjcsID1fX05SX3RpbWVyX2RlbGV0ZQogICAgIHN3aSAgICAgIzAKLSAgICBsZG1mZCAgIHNwISwge3I0LCByN30KLSAgICBtb3ZzICAgIHIwLCByMAotICAgIGJ4cGwgICAgbHIKLSAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICBtb3YgICAgIHI3LCBpcAorICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKKyAgICBieGxzICAgIGxyCisgICAgbmVnICAgICByMCwgcjAKKyAgICBiICAgICAgIF9fc2V0X2Vycm5vCiBFTkQoX190aW1lcl9kZWxldGUpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fdGltZXJfZ2V0b3ZlcnJ1bi5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX3RpbWVyX2dldG92ZXJydW4uUwppbmRleCBiMGYxOGU3Li4xMWRkOTFjIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fdGltZXJfZ2V0b3ZlcnJ1bi5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX190aW1lcl9nZXRvdmVycnVuLlMKQEAgLTEsMTQgKzEsMTUgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KIAogRU5UUlkoX190aW1lcl9nZXRvdmVycnVuKQotICAgIC5zYXZlICAge3I0LCByN30KLSAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBtb3YgICAgIGlwLCByNwogICAgIGxkciAgICAgcjcsID1fX05SX3RpbWVyX2dldG92ZXJydW4KICAgICBzd2kgICAgICMwCi0gICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9Ci0gICAgbW92cyAgICByMCwgcjAKLSAgICBieHBsICAgIGxyCi0gICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgbW92ICAgICByNywgaXAKKyAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCisgICAgYnhscyAgICBscgorICAgIG5lZyAgICAgcjAsIHIwCisgICAgYiAgICAgICBfX3NldF9lcnJubwogRU5EKF9fdGltZXJfZ2V0b3ZlcnJ1bikKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX190aW1lcl9nZXR0aW1lLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fdGltZXJfZ2V0dGltZS5TCmluZGV4IGMxNzI2MDIuLjQ2ZjlhNWUgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX190aW1lcl9nZXR0aW1lLlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX3RpbWVyX2dldHRpbWUuUwpAQCAtMSwxNCArMSwxNSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgogCiBFTlRSWShfX3RpbWVyX2dldHRpbWUpCi0gICAgLnNhdmUgICB7cjQsIHI3fQotICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdiAgICAgaXAsIHI3CiAgICAgbGRyICAgICByNywgPV9fTlJfdGltZXJfZ2V0dGltZQogICAgIHN3aSAgICAgIzAKLSAgICBsZG1mZCAgIHNwISwge3I0LCByN30KLSAgICBtb3ZzICAgIHIwLCByMAotICAgIGJ4cGwgICAgbHIKLSAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICBtb3YgICAgIHI3LCBpcAorICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKKyAgICBieGxzICAgIGxyCisgICAgbmVnICAgICByMCwgcjAKKyAgICBiICAgICAgIF9fc2V0X2Vycm5vCiBFTkQoX190aW1lcl9nZXR0aW1lKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX3RpbWVyX3NldHRpbWUuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX190aW1lcl9zZXR0aW1lLlMKaW5kZXggODIyMDQ0MC4uZjVhZGE3NiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX3RpbWVyX3NldHRpbWUuUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fdGltZXJfc2V0dGltZS5TCkBAIC0xLDE0ICsxLDE1IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+Ci0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CiAKIEVOVFJZKF9fdGltZXJfc2V0dGltZSkKLSAgICAuc2F2ZSAgIHtyNCwgcjd9Ci0gICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92ICAgICBpcCwgcjcKICAgICBsZHIgICAgIHI3LCA9X19OUl90aW1lcl9zZXR0aW1lCiAgICAgc3dpICAgICAjMAotICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQotICAgIG1vdnMgICAgcjAsIHIwCi0gICAgYnhwbCAgICBscgotICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIG1vdiAgICAgcjcsIGlwCisgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQorICAgIGJ4bHMgICAgbHIKKyAgICBuZWcgICAgIHIwLCByMAorICAgIGIgICAgICAgX19zZXRfZXJybm8KIEVORChfX3RpbWVyX3NldHRpbWUpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fd2FpdDQuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX193YWl0NC5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYTM0NTAyLi4wMDAwMDAwCi0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX193YWl0NC5TCisrKyAvZGV2L251bGwKQEAgLTEsMTQgKzAsMCBAQAotLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLwotI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+Ci0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+Ci0KLUVOVFJZKF9fd2FpdDQpCi0gICAgLnNhdmUgICB7cjQsIHI3fQotICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQotICAgIGxkciAgICAgcjcsID1fX05SX3dhaXQ0Ci0gICAgc3dpICAgICAjMAotICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQotICAgIG1vdnMgICAgcjAsIHIwCi0gICAgYnhwbCAgICBscgotICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubwotRU5EKF9fd2FpdDQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fd2FpdGlkLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fd2FpdGlkLlMKaW5kZXggOTk1MGU5Yy4uOGRiMjgxMiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX3dhaXRpZC5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX193YWl0aWQuUwpAQCAtMSw2ICsxLDcgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KIAogRU5UUlkoX193YWl0aWQpCiAgICAgbW92ICAgICBpcCwgc3AKQEAgLTEwLDcgKzExLDggQEAKICAgICBsZHIgICAgIHI3LCA9X19OUl93YWl0aWQKICAgICBzd2kgICAgICMwCiAgICAgbGRtZmQgICBzcCEsIHtyNCwgcjUsIHI2LCByN30KLSAgICBtb3ZzICAgIHIwLCByMAotICAgIGJ4cGwgICAgbHIKLSAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCisgICAgYnhscyAgICBscgorICAgIG5lZyAgICAgcjAsIHIwCisgICAgYiAgICAgICBfX3NldF9lcnJubwogRU5EKF9fd2FpdGlkKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fZXhpdC5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fZXhpdC5TCmluZGV4IDc3NDg3YjUuLjA2OWE0ZWMgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX2V4aXQuUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19leGl0LlMKQEAgLTEsMTQgKzEsMTUgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KIAogRU5UUlkoX2V4aXQpCi0gICAgLnNhdmUgICB7cjQsIHI3fQotICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdiAgICAgaXAsIHI3CiAgICAgbGRyICAgICByNywgPV9fTlJfZXhpdF9ncm91cAogICAgIHN3aSAgICAgIzAKLSAgICBsZG1mZCAgIHNwISwge3I0LCByN30KLSAgICBtb3ZzICAgIHIwLCByMAotICAgIGJ4cGwgICAgbHIKLSAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICBtb3YgICAgIHI3LCBpcAorICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKKyAgICBieGxzICAgIGxyCisgICAgbmVnICAgICByMCwgcjAKKyAgICBiICAgICAgIF9fc2V0X2Vycm5vCiBFTkQoX2V4aXQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19leGl0X3RocmVhZC5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fZXhpdF90aHJlYWQuUwppbmRleCBiZDE2ZmYxLi5iNDFkN2I0IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19leGl0X3RocmVhZC5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX2V4aXRfdGhyZWFkLlMKQEAgLTEsMTQgKzEsMTUgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KIAogRU5UUlkoX2V4aXRfdGhyZWFkKQotICAgIC5zYXZlICAge3I0LCByN30KLSAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBtb3YgICAgIGlwLCByNwogICAgIGxkciAgICAgcjcsID1fX05SX2V4aXQKICAgICBzd2kgICAgICMwCi0gICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9Ci0gICAgbW92cyAgICByMCwgcjAKLSAgICBieHBsICAgIGxyCi0gICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgbW92ICAgICByNywgaXAKKyAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCisgICAgYnhscyAgICBscgorICAgIG5lZyAgICAgcjAsIHIwCisgICAgYiAgICAgICBfX3NldF9lcnJubwogRU5EKF9leGl0X3RocmVhZCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvYWNjZXB0LlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2FjY2VwdC5TCmluZGV4IDBkY2ZiMGMuLjY3NGJhZmUgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvYWNjZXB0LlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9hY2NlcHQuUwpAQCAtMSwxNCArMSwxNSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgogCiBFTlRSWShhY2NlcHQpCi0gICAgLnNhdmUgICB7cjQsIHI3fQotICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdiAgICAgaXAsIHI3CiAgICAgbGRyICAgICByNywgPV9fTlJfYWNjZXB0CiAgICAgc3dpICAgICAjMAotICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQotICAgIG1vdnMgICAgcjAsIHIwCi0gICAgYnhwbCAgICBscgotICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIG1vdiAgICAgcjcsIGlwCisgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQorICAgIGJ4bHMgICAgbHIKKyAgICBuZWcgICAgIHIwLCByMAorICAgIGIgICAgICAgX19zZXRfZXJybm8KIEVORChhY2NlcHQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2FjY2Vzcy5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9hY2Nlc3MuUwppbmRleCBjZjU4NWEzLi42ZWFlY2E5IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2FjY2Vzcy5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvYWNjZXNzLlMKQEAgLTEsMTQgKzEsMTUgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KIAogRU5UUlkoYWNjZXNzKQotICAgIC5zYXZlICAge3I0LCByN30KLSAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBtb3YgICAgIGlwLCByNwogICAgIGxkciAgICAgcjcsID1fX05SX2FjY2VzcwogICAgIHN3aSAgICAgIzAKLSAgICBsZG1mZCAgIHNwISwge3I0LCByN30KLSAgICBtb3ZzICAgIHIwLCByMAotICAgIGJ4cGwgICAgbHIKLSAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICBtb3YgICAgIHI3LCBpcAorICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKKyAgICBieGxzICAgIGxyCisgICAgbmVnICAgICByMCwgcjAKKyAgICBiICAgICAgIF9fc2V0X2Vycm5vCiBFTkQoYWNjZXNzKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9hY2N0LlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2FjY3QuUwppbmRleCA4NTM0NmU0Li4yN2E0MTM2IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2FjY3QuUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2FjY3QuUwpAQCAtMSwxNCArMSwxNSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgogCiBFTlRSWShhY2N0KQotICAgIC5zYXZlICAge3I0LCByN30KLSAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBtb3YgICAgIGlwLCByNwogICAgIGxkciAgICAgcjcsID1fX05SX2FjY3QKICAgICBzd2kgICAgICMwCi0gICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9Ci0gICAgbW92cyAgICByMCwgcjAKLSAgICBieHBsICAgIGxyCi0gICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgbW92ICAgICByNywgaXAKKyAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCisgICAgYnhscyAgICBscgorICAgIG5lZyAgICAgcjAsIHIwCisgICAgYiAgICAgICBfX3NldF9lcnJubwogRU5EKGFjY3QpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2JpbmQuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvYmluZC5TCmluZGV4IDg1ZDA0NzEuLjY0MTQwNWYgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvYmluZC5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvYmluZC5TCkBAIC0xLDE0ICsxLDE1IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+Ci0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CiAKIEVOVFJZKGJpbmQpCi0gICAgLnNhdmUgICB7cjQsIHI3fQotICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdiAgICAgaXAsIHI3CiAgICAgbGRyICAgICByNywgPV9fTlJfYmluZAogICAgIHN3aSAgICAgIzAKLSAgICBsZG1mZCAgIHNwISwge3I0LCByN30KLSAgICBtb3ZzICAgIHIwLCByMAotICAgIGJ4cGwgICAgbHIKLSAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICBtb3YgICAgIHI3LCBpcAorICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKKyAgICBieGxzICAgIGxyCisgICAgbmVnICAgICByMCwgcjAKKyAgICBiICAgICAgIF9fc2V0X2Vycm5vCiBFTkQoYmluZCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvY2FjaGVmbHVzaC5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9jYWNoZWZsdXNoLlMKaW5kZXggMDViMjQxMS4uMzU1MTI3NCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9jYWNoZWZsdXNoLlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9jYWNoZWZsdXNoLlMKQEAgLTEsMTQgKzEsMTUgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KIAogRU5UUlkoY2FjaGVmbHVzaCkKLSAgICAuc2F2ZSAgIHtyNCwgcjd9Ci0gICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9Ci0gICAgbGRyICAgICByNywgPV9fTlJfQVJNX2NhY2hlZmx1c2gKKyAgICBtb3YgICAgIGlwLCByNworICAgIGxkciAgICAgcjcsID1fX0FSTV9OUl9jYWNoZWZsdXNoCiAgICAgc3dpICAgICAjMAotICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQotICAgIG1vdnMgICAgcjAsIHIwCi0gICAgYnhwbCAgICBscgotICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIG1vdiAgICAgcjcsIGlwCisgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQorICAgIGJ4bHMgICAgbHIKKyAgICBuZWcgICAgIHIwLCByMAorICAgIGIgICAgICAgX19zZXRfZXJybm8KIEVORChjYWNoZWZsdXNoKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9jYXBnZXQuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvY2FwZ2V0LlMKaW5kZXggMGYzYmEzMS4uMDhjMGYzOCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9jYXBnZXQuUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2NhcGdldC5TCkBAIC0xLDE0ICsxLDE1IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+Ci0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CiAKIEVOVFJZKGNhcGdldCkKLSAgICAuc2F2ZSAgIHtyNCwgcjd9Ci0gICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92ICAgICBpcCwgcjcKICAgICBsZHIgICAgIHI3LCA9X19OUl9jYXBnZXQKICAgICBzd2kgICAgICMwCi0gICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9Ci0gICAgbW92cyAgICByMCwgcjAKLSAgICBieHBsICAgIGxyCi0gICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgbW92ICAgICByNywgaXAKKyAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCisgICAgYnhscyAgICBscgorICAgIG5lZyAgICAgcjAsIHIwCisgICAgYiAgICAgICBfX3NldF9lcnJubwogRU5EKGNhcGdldCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvY2Fwc2V0LlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2NhcHNldC5TCmluZGV4IDIyNTRkYjIuLjkwYWEzNDMgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvY2Fwc2V0LlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9jYXBzZXQuUwpAQCAtMSwxNCArMSwxNSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgogCiBFTlRSWShjYXBzZXQpCi0gICAgLnNhdmUgICB7cjQsIHI3fQotICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdiAgICAgaXAsIHI3CiAgICAgbGRyICAgICByNywgPV9fTlJfY2Fwc2V0CiAgICAgc3dpICAgICAjMAotICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQotICAgIG1vdnMgICAgcjAsIHIwCi0gICAgYnhwbCAgICBscgotICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIG1vdiAgICAgcjcsIGlwCisgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQorICAgIGJ4bHMgICAgbHIKKyAgICBuZWcgICAgIHIwLCByMAorICAgIGIgICAgICAgX19zZXRfZXJybm8KIEVORChjYXBzZXQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2NoZGlyLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2NoZGlyLlMKaW5kZXggNTdkNmIxMy4uZTY0ODVhNiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9jaGRpci5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvY2hkaXIuUwpAQCAtMSwxNCArMSwxNSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgogCiBFTlRSWShjaGRpcikKLSAgICAuc2F2ZSAgIHtyNCwgcjd9Ci0gICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92ICAgICBpcCwgcjcKICAgICBsZHIgICAgIHI3LCA9X19OUl9jaGRpcgogICAgIHN3aSAgICAgIzAKLSAgICBsZG1mZCAgIHNwISwge3I0LCByN30KLSAgICBtb3ZzICAgIHIwLCByMAotICAgIGJ4cGwgICAgbHIKLSAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICBtb3YgICAgIHI3LCBpcAorICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKKyAgICBieGxzICAgIGxyCisgICAgbmVnICAgICByMCwgcjAKKyAgICBiICAgICAgIF9fc2V0X2Vycm5vCiBFTkQoY2hkaXIpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2NobW9kLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2NobW9kLlMKaW5kZXggODkwOWM2Zi4uNGI5OGNhNiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9jaG1vZC5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvY2htb2QuUwpAQCAtMSwxNCArMSwxNSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgogCiBFTlRSWShjaG1vZCkKLSAgICAuc2F2ZSAgIHtyNCwgcjd9Ci0gICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92ICAgICBpcCwgcjcKICAgICBsZHIgICAgIHI3LCA9X19OUl9jaG1vZAogICAgIHN3aSAgICAgIzAKLSAgICBsZG1mZCAgIHNwISwge3I0LCByN30KLSAgICBtb3ZzICAgIHIwLCByMAotICAgIGJ4cGwgICAgbHIKLSAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICBtb3YgICAgIHI3LCBpcAorICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKKyAgICBieGxzICAgIGxyCisgICAgbmVnICAgICByMCwgcjAKKyAgICBiICAgICAgIF9fc2V0X2Vycm5vCiBFTkQoY2htb2QpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2Nob3duLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2Nob3duLlMKaW5kZXggY2JiZDhhOC4uNzgzOGEyYSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9jaG93bi5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvY2hvd24uUwpAQCAtMSwxNCArMSwxNSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgogCiBFTlRSWShjaG93bikKLSAgICAuc2F2ZSAgIHtyNCwgcjd9Ci0gICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92ICAgICBpcCwgcjcKICAgICBsZHIgICAgIHI3LCA9X19OUl9jaG93bjMyCiAgICAgc3dpICAgICAjMAotICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQotICAgIG1vdnMgICAgcjAsIHIwCi0gICAgYnhwbCAgICBscgotICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIG1vdiAgICAgcjcsIGlwCisgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQorICAgIGJ4bHMgICAgbHIKKyAgICBuZWcgICAgIHIwLCByMAorICAgIGIgICAgICAgX19zZXRfZXJybm8KIEVORChjaG93bikKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvY2hyb290LlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2Nocm9vdC5TCmluZGV4IGE2NzkxNzIuLmYzNTM0YjYgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvY2hyb290LlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9jaHJvb3QuUwpAQCAtMSwxNCArMSwxNSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgogCiBFTlRSWShjaHJvb3QpCi0gICAgLnNhdmUgICB7cjQsIHI3fQotICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdiAgICAgaXAsIHI3CiAgICAgbGRyICAgICByNywgPV9fTlJfY2hyb290CiAgICAgc3dpICAgICAjMAotICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQotICAgIG1vdnMgICAgcjAsIHIwCi0gICAgYnhwbCAgICBscgotICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIG1vdiAgICAgcjcsIGlwCisgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQorICAgIGJ4bHMgICAgbHIKKyAgICBuZWcgICAgIHIwLCByMAorICAgIGIgICAgICAgX19zZXRfZXJybm8KIEVORChjaHJvb3QpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2Nsb2NrX2dldHJlcy5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9jbG9ja19nZXRyZXMuUwppbmRleCA3MDVmMjk2Li44MWEyY2RjIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2Nsb2NrX2dldHJlcy5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvY2xvY2tfZ2V0cmVzLlMKQEAgLTEsMTQgKzEsMTUgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KIAogRU5UUlkoY2xvY2tfZ2V0cmVzKQotICAgIC5zYXZlICAge3I0LCByN30KLSAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBtb3YgICAgIGlwLCByNwogICAgIGxkciAgICAgcjcsID1fX05SX2Nsb2NrX2dldHJlcwogICAgIHN3aSAgICAgIzAKLSAgICBsZG1mZCAgIHNwISwge3I0LCByN30KLSAgICBtb3ZzICAgIHIwLCByMAotICAgIGJ4cGwgICAgbHIKLSAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICBtb3YgICAgIHI3LCBpcAorICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKKyAgICBieGxzICAgIGxyCisgICAgbmVnICAgICByMCwgcjAKKyAgICBiICAgICAgIF9fc2V0X2Vycm5vCiBFTkQoY2xvY2tfZ2V0cmVzKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9jbG9ja19nZXR0aW1lLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2Nsb2NrX2dldHRpbWUuUwppbmRleCBhOWFiNDFmLi5lMjZkNzAwIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2Nsb2NrX2dldHRpbWUuUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2Nsb2NrX2dldHRpbWUuUwpAQCAtMSwxNCArMSwxNSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgogCiBFTlRSWShjbG9ja19nZXR0aW1lKQotICAgIC5zYXZlICAge3I0LCByN30KLSAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBtb3YgICAgIGlwLCByNwogICAgIGxkciAgICAgcjcsID1fX05SX2Nsb2NrX2dldHRpbWUKICAgICBzd2kgICAgICMwCi0gICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9Ci0gICAgbW92cyAgICByMCwgcjAKLSAgICBieHBsICAgIGxyCi0gICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgbW92ICAgICByNywgaXAKKyAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCisgICAgYnhscyAgICBscgorICAgIG5lZyAgICAgcjAsIHIwCisgICAgYiAgICAgICBfX3NldF9lcnJubwogRU5EKGNsb2NrX2dldHRpbWUpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2Nsb2NrX25hbm9zbGVlcC5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9jbG9ja19uYW5vc2xlZXAuUwppbmRleCBmOGU3ZjczLi5kYzA1ODRmIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2Nsb2NrX25hbm9zbGVlcC5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvY2xvY2tfbmFub3NsZWVwLlMKQEAgLTEsMTQgKzEsMTUgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KIAogRU5UUlkoY2xvY2tfbmFub3NsZWVwKQotICAgIC5zYXZlICAge3I0LCByN30KLSAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBtb3YgICAgIGlwLCByNwogICAgIGxkciAgICAgcjcsID1fX05SX2Nsb2NrX25hbm9zbGVlcAogICAgIHN3aSAgICAgIzAKLSAgICBsZG1mZCAgIHNwISwge3I0LCByN30KLSAgICBtb3ZzICAgIHIwLCByMAotICAgIGJ4cGwgICAgbHIKLSAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICBtb3YgICAgIHI3LCBpcAorICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKKyAgICBieGxzICAgIGxyCisgICAgbmVnICAgICByMCwgcjAKKyAgICBiICAgICAgIF9fc2V0X2Vycm5vCiBFTkQoY2xvY2tfbmFub3NsZWVwKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9jbG9ja19zZXR0aW1lLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2Nsb2NrX3NldHRpbWUuUwppbmRleCBhOTk2NDQxLi4yNTk2ZjUzIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2Nsb2NrX3NldHRpbWUuUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2Nsb2NrX3NldHRpbWUuUwpAQCAtMSwxNCArMSwxNSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgogCiBFTlRSWShjbG9ja19zZXR0aW1lKQotICAgIC5zYXZlICAge3I0LCByN30KLSAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBtb3YgICAgIGlwLCByNwogICAgIGxkciAgICAgcjcsID1fX05SX2Nsb2NrX3NldHRpbWUKICAgICBzd2kgICAgICMwCi0gICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9Ci0gICAgbW92cyAgICByMCwgcjAKLSAgICBieHBsICAgIGxyCi0gICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgbW92ICAgICByNywgaXAKKyAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCisgICAgYnhscyAgICBscgorICAgIG5lZyAgICAgcjAsIHIwCisgICAgYiAgICAgICBfX3NldF9lcnJubwogRU5EKGNsb2NrX3NldHRpbWUpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2Nsb3NlLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2Nsb3NlLlMKaW5kZXggMzZkNzhhNC4uMjIyNTkyOSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9jbG9zZS5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvY2xvc2UuUwpAQCAtMSwxNCArMSwxNSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgogCiBFTlRSWShjbG9zZSkKLSAgICAuc2F2ZSAgIHtyNCwgcjd9Ci0gICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92ICAgICBpcCwgcjcKICAgICBsZHIgICAgIHI3LCA9X19OUl9jbG9zZQogICAgIHN3aSAgICAgIzAKLSAgICBsZG1mZCAgIHNwISwge3I0LCByN30KLSAgICBtb3ZzICAgIHIwLCByMAotICAgIGJ4cGwgICAgbHIKLSAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICBtb3YgICAgIHI3LCBpcAorICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKKyAgICBieGxzICAgIGxyCisgICAgbmVnICAgICByMCwgcjAKKyAgICBiICAgICAgIF9fc2V0X2Vycm5vCiBFTkQoY2xvc2UpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2Nvbm5lY3QuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvY29ubmVjdC5TCmluZGV4IGVhMTRjMTcuLjBkNDY4MmEgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvY29ubmVjdC5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvY29ubmVjdC5TCkBAIC0xLDE0ICsxLDE1IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+Ci0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CiAKIEVOVFJZKGNvbm5lY3QpCi0gICAgLnNhdmUgICB7cjQsIHI3fQotICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdiAgICAgaXAsIHI3CiAgICAgbGRyICAgICByNywgPV9fTlJfY29ubmVjdAogICAgIHN3aSAgICAgIzAKLSAgICBsZG1mZCAgIHNwISwge3I0LCByN30KLSAgICBtb3ZzICAgIHIwLCByMAotICAgIGJ4cGwgICAgbHIKLSAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICBtb3YgICAgIHI3LCBpcAorICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKKyAgICBieGxzICAgIGxyCisgICAgbmVnICAgICByMCwgcjAKKyAgICBiICAgICAgIF9fc2V0X2Vycm5vCiBFTkQoY29ubmVjdCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZGVsZXRlX21vZHVsZS5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9kZWxldGVfbW9kdWxlLlMKaW5kZXggZGY4YWFlMC4uMzQ1YzAxMiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9kZWxldGVfbW9kdWxlLlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9kZWxldGVfbW9kdWxlLlMKQEAgLTEsMTQgKzEsMTUgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KIAogRU5UUlkoZGVsZXRlX21vZHVsZSkKLSAgICAuc2F2ZSAgIHtyNCwgcjd9Ci0gICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92ICAgICBpcCwgcjcKICAgICBsZHIgICAgIHI3LCA9X19OUl9kZWxldGVfbW9kdWxlCiAgICAgc3dpICAgICAjMAotICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQotICAgIG1vdnMgICAgcjAsIHIwCi0gICAgYnhwbCAgICBscgotICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIG1vdiAgICAgcjcsIGlwCisgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQorICAgIGJ4bHMgICAgbHIKKyAgICBuZWcgICAgIHIwLCByMAorICAgIGIgICAgICAgX19zZXRfZXJybm8KIEVORChkZWxldGVfbW9kdWxlKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9kdXAuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZHVwLlMKaW5kZXggYjBjMWNkYS4uMDYwZDU1NSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9kdXAuUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2R1cC5TCkBAIC0xLDE0ICsxLDE1IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+Ci0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CiAKIEVOVFJZKGR1cCkKLSAgICAuc2F2ZSAgIHtyNCwgcjd9Ci0gICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92ICAgICBpcCwgcjcKICAgICBsZHIgICAgIHI3LCA9X19OUl9kdXAKICAgICBzd2kgICAgICMwCi0gICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9Ci0gICAgbW92cyAgICByMCwgcjAKLSAgICBieHBsICAgIGxyCi0gICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgbW92ICAgICByNywgaXAKKyAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCisgICAgYnhscyAgICBscgorICAgIG5lZyAgICAgcjAsIHIwCisgICAgYiAgICAgICBfX3NldF9lcnJubwogRU5EKGR1cCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZHVwMi5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9kdXAyLlMKaW5kZXggZWQzNDZkOS4uOTQ2NTg2MCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9kdXAyLlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9kdXAyLlMKQEAgLTEsMTQgKzEsMTUgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KIAogRU5UUlkoZHVwMikKLSAgICAuc2F2ZSAgIHtyNCwgcjd9Ci0gICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92ICAgICBpcCwgcjcKICAgICBsZHIgICAgIHI3LCA9X19OUl9kdXAyCiAgICAgc3dpICAgICAjMAotICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQotICAgIG1vdnMgICAgcjAsIHIwCi0gICAgYnhwbCAgICBscgotICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIG1vdiAgICAgcjcsIGlwCisgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQorICAgIGJ4bHMgICAgbHIKKyAgICBuZWcgICAgIHIwLCByMAorICAgIGIgICAgICAgX19zZXRfZXJybm8KIEVORChkdXAyKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9lcG9sbF9jcmVhdGUuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZXBvbGxfY3JlYXRlLlMKaW5kZXggMWFhYjYwNi4uYjI4OTRlNiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9lcG9sbF9jcmVhdGUuUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2Vwb2xsX2NyZWF0ZS5TCkBAIC0xLDE0ICsxLDE1IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+Ci0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CiAKIEVOVFJZKGVwb2xsX2NyZWF0ZSkKLSAgICAuc2F2ZSAgIHtyNCwgcjd9Ci0gICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92ICAgICBpcCwgcjcKICAgICBsZHIgICAgIHI3LCA9X19OUl9lcG9sbF9jcmVhdGUKICAgICBzd2kgICAgICMwCi0gICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9Ci0gICAgbW92cyAgICByMCwgcjAKLSAgICBieHBsICAgIGxyCi0gICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgbW92ICAgICByNywgaXAKKyAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCisgICAgYnhscyAgICBscgorICAgIG5lZyAgICAgcjAsIHIwCisgICAgYiAgICAgICBfX3NldF9lcnJubwogRU5EKGVwb2xsX2NyZWF0ZSkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZXBvbGxfY3RsLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2Vwb2xsX2N0bC5TCmluZGV4IGMwZWNmMDYuLjdhNTZiOTkgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZXBvbGxfY3RsLlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9lcG9sbF9jdGwuUwpAQCAtMSwxNCArMSwxNSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgogCiBFTlRSWShlcG9sbF9jdGwpCi0gICAgLnNhdmUgICB7cjQsIHI3fQotICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdiAgICAgaXAsIHI3CiAgICAgbGRyICAgICByNywgPV9fTlJfZXBvbGxfY3RsCiAgICAgc3dpICAgICAjMAotICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQotICAgIG1vdnMgICAgcjAsIHIwCi0gICAgYnhwbCAgICBscgotICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIG1vdiAgICAgcjcsIGlwCisgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQorICAgIGJ4bHMgICAgbHIKKyAgICBuZWcgICAgIHIwLCByMAorICAgIGIgICAgICAgX19zZXRfZXJybm8KIEVORChlcG9sbF9jdGwpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2Vwb2xsX3dhaXQuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZXBvbGxfd2FpdC5TCmluZGV4IDM1MzUwMDEuLjExMjUyYmUgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZXBvbGxfd2FpdC5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZXBvbGxfd2FpdC5TCkBAIC0xLDE0ICsxLDE1IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+Ci0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CiAKIEVOVFJZKGVwb2xsX3dhaXQpCi0gICAgLnNhdmUgICB7cjQsIHI3fQotICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdiAgICAgaXAsIHI3CiAgICAgbGRyICAgICByNywgPV9fTlJfZXBvbGxfd2FpdAogICAgIHN3aSAgICAgIzAKLSAgICBsZG1mZCAgIHNwISwge3I0LCByN30KLSAgICBtb3ZzICAgIHIwLCByMAotICAgIGJ4cGwgICAgbHIKLSAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICBtb3YgICAgIHI3LCBpcAorICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKKyAgICBieGxzICAgIGxyCisgICAgbmVnICAgICByMCwgcjAKKyAgICBiICAgICAgIF9fc2V0X2Vycm5vCiBFTkQoZXBvbGxfd2FpdCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZXZlbnRmZC5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9ldmVudGZkLlMKaW5kZXggODU3YjZjMC4uNjAyYWVjZCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9ldmVudGZkLlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9ldmVudGZkLlMKQEAgLTEsMTQgKzEsMTUgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KIAogRU5UUlkoZXZlbnRmZCkKLSAgICAuc2F2ZSAgIHtyNCwgcjd9Ci0gICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92ICAgICBpcCwgcjcKICAgICBsZHIgICAgIHI3LCA9X19OUl9ldmVudGZkMgogICAgIHN3aSAgICAgIzAKLSAgICBsZG1mZCAgIHNwISwge3I0LCByN30KLSAgICBtb3ZzICAgIHIwLCByMAotICAgIGJ4cGwgICAgbHIKLSAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICBtb3YgICAgIHI3LCBpcAorICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKKyAgICBieGxzICAgIGxyCisgICAgbmVnICAgICByMCwgcjAKKyAgICBiICAgICAgIF9fc2V0X2Vycm5vCiBFTkQoZXZlbnRmZCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZXhlY3ZlLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2V4ZWN2ZS5TCmluZGV4IDFhNjYxNjcuLjAwZGU0YjggMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZXhlY3ZlLlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9leGVjdmUuUwpAQCAtMSwxNCArMSwxNSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgogCiBFTlRSWShleGVjdmUpCi0gICAgLnNhdmUgICB7cjQsIHI3fQotICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdiAgICAgaXAsIHI3CiAgICAgbGRyICAgICByNywgPV9fTlJfZXhlY3ZlCiAgICAgc3dpICAgICAjMAotICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQotICAgIG1vdnMgICAgcjAsIHIwCi0gICAgYnhwbCAgICBscgotICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIG1vdiAgICAgcjcsIGlwCisgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQorICAgIGJ4bHMgICAgbHIKKyAgICBuZWcgICAgIHIwLCByMAorICAgIGIgICAgICAgX19zZXRfZXJybm8KIEVORChleGVjdmUpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2ZhY2Nlc3NhdC5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9mYWNjZXNzYXQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Njc0NTFlCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9mYWNjZXNzYXQuUwpAQCAtMCwwICsxLDE1IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+CisKK0VOVFJZKGZhY2Nlc3NhdCkKKyAgICBtb3YgICAgIGlwLCByNworICAgIGxkciAgICAgcjcsID1fX05SX2ZhY2Nlc3NhdAorICAgIHN3aSAgICAgIzAKKyAgICBtb3YgICAgIHI3LCBpcAorICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKKyAgICBieGxzICAgIGxyCisgICAgbmVnICAgICByMCwgcjAKKyAgICBiICAgICAgIF9fc2V0X2Vycm5vCitFTkQoZmFjY2Vzc2F0KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9mY2hkaXIuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZmNoZGlyLlMKaW5kZXggN2Q4MGNmMC4uMTcwMzI0ZSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9mY2hkaXIuUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2ZjaGRpci5TCkBAIC0xLDE0ICsxLDE1IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+Ci0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CiAKIEVOVFJZKGZjaGRpcikKLSAgICAuc2F2ZSAgIHtyNCwgcjd9Ci0gICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92ICAgICBpcCwgcjcKICAgICBsZHIgICAgIHI3LCA9X19OUl9mY2hkaXIKICAgICBzd2kgICAgICMwCi0gICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9Ci0gICAgbW92cyAgICByMCwgcjAKLSAgICBieHBsICAgIGxyCi0gICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgbW92ICAgICByNywgaXAKKyAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCisgICAgYnhscyAgICBscgorICAgIG5lZyAgICAgcjAsIHIwCisgICAgYiAgICAgICBfX3NldF9lcnJubwogRU5EKGZjaGRpcikKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZmNobW9kLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2ZjaG1vZC5TCmluZGV4IGJjOGU2NDMuLjY1N2E1NjUgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZmNobW9kLlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9mY2htb2QuUwpAQCAtMSwxNCArMSwxNSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgogCiBFTlRSWShmY2htb2QpCi0gICAgLnNhdmUgICB7cjQsIHI3fQotICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdiAgICAgaXAsIHI3CiAgICAgbGRyICAgICByNywgPV9fTlJfZmNobW9kCiAgICAgc3dpICAgICAjMAotICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQotICAgIG1vdnMgICAgcjAsIHIwCi0gICAgYnhwbCAgICBscgotICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIG1vdiAgICAgcjcsIGlwCisgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQorICAgIGJ4bHMgICAgbHIKKyAgICBuZWcgICAgIHIwLCByMAorICAgIGIgICAgICAgX19zZXRfZXJybm8KIEVORChmY2htb2QpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2ZjaG1vZGF0LlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2ZjaG1vZGF0LlMKaW5kZXggYWM3ODJlNS4uYWNkZjZjOCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9mY2htb2RhdC5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZmNobW9kYXQuUwpAQCAtMSwxNCArMSwxNSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgogCiBFTlRSWShmY2htb2RhdCkKLSAgICAuc2F2ZSAgIHtyNCwgcjd9Ci0gICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92ICAgICBpcCwgcjcKICAgICBsZHIgICAgIHI3LCA9X19OUl9mY2htb2RhdAogICAgIHN3aSAgICAgIzAKLSAgICBsZG1mZCAgIHNwISwge3I0LCByN30KLSAgICBtb3ZzICAgIHIwLCByMAotICAgIGJ4cGwgICAgbHIKLSAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICBtb3YgICAgIHI3LCBpcAorICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKKyAgICBieGxzICAgIGxyCisgICAgbmVnICAgICByMCwgcjAKKyAgICBiICAgICAgIF9fc2V0X2Vycm5vCiBFTkQoZmNobW9kYXQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2ZjaG93bi5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9mY2hvd24uUwppbmRleCAyMmQ3ZmQyLi42ZDc1ZWI0IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2ZjaG93bi5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZmNob3duLlMKQEAgLTEsMTQgKzEsMTUgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KIAogRU5UUlkoZmNob3duKQotICAgIC5zYXZlICAge3I0LCByN30KLSAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBtb3YgICAgIGlwLCByNwogICAgIGxkciAgICAgcjcsID1fX05SX2ZjaG93bjMyCiAgICAgc3dpICAgICAjMAotICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQotICAgIG1vdnMgICAgcjAsIHIwCi0gICAgYnhwbCAgICBscgotICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIG1vdiAgICAgcjcsIGlwCisgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQorICAgIGJ4bHMgICAgbHIKKyAgICBuZWcgICAgIHIwLCByMAorICAgIGIgICAgICAgX19zZXRfZXJybm8KIEVORChmY2hvd24pCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2ZjaG93bmF0LlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2ZjaG93bmF0LlMKaW5kZXggMTQ4MjgzMi4uMzE4NjRlYyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9mY2hvd25hdC5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZmNob3duYXQuUwpAQCAtMSw2ICsxLDcgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KIAogRU5UUlkoZmNob3duYXQpCiAgICAgbW92ICAgICBpcCwgc3AKQEAgLTEwLDcgKzExLDggQEAKICAgICBsZHIgICAgIHI3LCA9X19OUl9mY2hvd25hdAogICAgIHN3aSAgICAgIzAKICAgICBsZG1mZCAgIHNwISwge3I0LCByNSwgcjYsIHI3fQotICAgIG1vdnMgICAgcjAsIHIwCi0gICAgYnhwbCAgICBscgotICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKKyAgICBieGxzICAgIGxyCisgICAgbmVnICAgICByMCwgcjAKKyAgICBiICAgICAgIF9fc2V0X2Vycm5vCiBFTkQoZmNob3duYXQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2ZkYXRhc3luYy5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9mZGF0YXN5bmMuUwppbmRleCBkNDFlODIzLi42MmI4OWNjIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2ZkYXRhc3luYy5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZmRhdGFzeW5jLlMKQEAgLTEsMTQgKzEsMTUgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KIAogRU5UUlkoZmRhdGFzeW5jKQotICAgIC5zYXZlICAge3I0LCByN30KLSAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBtb3YgICAgIGlwLCByNwogICAgIGxkciAgICAgcjcsID1fX05SX2ZkYXRhc3luYwogICAgIHN3aSAgICAgIzAKLSAgICBsZG1mZCAgIHNwISwge3I0LCByN30KLSAgICBtb3ZzICAgIHIwLCByMAotICAgIGJ4cGwgICAgbHIKLSAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICBtb3YgICAgIHI3LCBpcAorICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKKyAgICBieGxzICAgIGxyCisgICAgbmVnICAgICByMCwgcjAKKyAgICBiICAgICAgIF9fc2V0X2Vycm5vCiBFTkQoZmRhdGFzeW5jKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9mZ2V0eGF0dHIuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZmdldHhhdHRyLlMKaW5kZXggMzJiOGVmOC4uZThjYzhkMyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9mZ2V0eGF0dHIuUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2ZnZXR4YXR0ci5TCkBAIC0xLDE0ICsxLDE1IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+Ci0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CiAKIEVOVFJZKGZnZXR4YXR0cikKLSAgICAuc2F2ZSAgIHtyNCwgcjd9Ci0gICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92ICAgICBpcCwgcjcKICAgICBsZHIgICAgIHI3LCA9X19OUl9mZ2V0eGF0dHIKICAgICBzd2kgICAgICMwCi0gICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9Ci0gICAgbW92cyAgICByMCwgcjAKLSAgICBieHBsICAgIGxyCi0gICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgbW92ICAgICByNywgaXAKKyAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCisgICAgYnhscyAgICBscgorICAgIG5lZyAgICAgcjAsIHIwCisgICAgYiAgICAgICBfX3NldF9lcnJubwogRU5EKGZnZXR4YXR0cikKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZmxpc3R4YXR0ci5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9mbGlzdHhhdHRyLlMKaW5kZXggMDc4NWU3Ny4uZmU4ZDg3NiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9mbGlzdHhhdHRyLlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9mbGlzdHhhdHRyLlMKQEAgLTEsMTQgKzEsMTUgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KIAogRU5UUlkoZmxpc3R4YXR0cikKLSAgICAuc2F2ZSAgIHtyNCwgcjd9Ci0gICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92ICAgICBpcCwgcjcKICAgICBsZHIgICAgIHI3LCA9X19OUl9mbGlzdHhhdHRyCiAgICAgc3dpICAgICAjMAotICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQotICAgIG1vdnMgICAgcjAsIHIwCi0gICAgYnhwbCAgICBscgotICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIG1vdiAgICAgcjcsIGlwCisgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQorICAgIGJ4bHMgICAgbHIKKyAgICBuZWcgICAgIHIwLCByMAorICAgIGIgICAgICAgX19zZXRfZXJybm8KIEVORChmbGlzdHhhdHRyKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9mbG9jay5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9mbG9jay5TCmluZGV4IGMwZDI4NDQuLjJlMjhiMWIgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZmxvY2suUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2Zsb2NrLlMKQEAgLTEsMTQgKzEsMTUgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KIAogRU5UUlkoZmxvY2spCi0gICAgLnNhdmUgICB7cjQsIHI3fQotICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdiAgICAgaXAsIHI3CiAgICAgbGRyICAgICByNywgPV9fTlJfZmxvY2sKICAgICBzd2kgICAgICMwCi0gICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9Ci0gICAgbW92cyAgICByMCwgcjAKLSAgICBieHBsICAgIGxyCi0gICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgbW92ICAgICByNywgaXAKKyAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCisgICAgYnhscyAgICBscgorICAgIG5lZyAgICAgcjAsIHIwCisgICAgYiAgICAgICBfX3NldF9lcnJubwogRU5EKGZsb2NrKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9mcmVtb3ZleGF0dHIuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZnJlbW92ZXhhdHRyLlMKaW5kZXggYWU5N2QxMy4uOWZhYjhmMyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9mcmVtb3ZleGF0dHIuUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2ZyZW1vdmV4YXR0ci5TCkBAIC0xLDE0ICsxLDE1IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+Ci0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CiAKIEVOVFJZKGZyZW1vdmV4YXR0cikKLSAgICAuc2F2ZSAgIHtyNCwgcjd9Ci0gICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92ICAgICBpcCwgcjcKICAgICBsZHIgICAgIHI3LCA9X19OUl9mcmVtb3ZleGF0dHIKICAgICBzd2kgICAgICMwCi0gICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9Ci0gICAgbW92cyAgICByMCwgcjAKLSAgICBieHBsICAgIGxyCi0gICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgbW92ICAgICByNywgaXAKKyAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCisgICAgYnhscyAgICBscgorICAgIG5lZyAgICAgcjAsIHIwCisgICAgYiAgICAgICBfX3NldF9lcnJubwogRU5EKGZyZW1vdmV4YXR0cikKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZnNldHhhdHRyLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2ZzZXR4YXR0ci5TCmluZGV4IDE3NmNhZDkuLjg3ZWQ4MzUgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZnNldHhhdHRyLlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9mc2V0eGF0dHIuUwpAQCAtMSw2ICsxLDcgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KIAogRU5UUlkoZnNldHhhdHRyKQogICAgIG1vdiAgICAgaXAsIHNwCkBAIC0xMCw3ICsxMSw4IEBACiAgICAgbGRyICAgICByNywgPV9fTlJfZnNldHhhdHRyCiAgICAgc3dpICAgICAjMAogICAgIGxkbWZkICAgc3AhLCB7cjQsIHI1LCByNiwgcjd9Ci0gICAgbW92cyAgICByMCwgcjAKLSAgICBieHBsICAgIGxyCi0gICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQorICAgIGJ4bHMgICAgbHIKKyAgICBuZWcgICAgIHIwLCByMAorICAgIGIgICAgICAgX19zZXRfZXJybm8KIEVORChmc2V0eGF0dHIpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2ZzdGF0LlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2ZzdGF0LlMKaW5kZXggZTc1NjQ5Zi4uNmFkNTU4OSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9mc3RhdC5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZnN0YXQuUwpAQCAtMSwxNCArMSwxNSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgogCiBFTlRSWShmc3RhdCkKLSAgICAuc2F2ZSAgIHtyNCwgcjd9Ci0gICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92ICAgICBpcCwgcjcKICAgICBsZHIgICAgIHI3LCA9X19OUl9mc3RhdDY0CiAgICAgc3dpICAgICAjMAotICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQotICAgIG1vdnMgICAgcjAsIHIwCi0gICAgYnhwbCAgICBscgotICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIG1vdiAgICAgcjcsIGlwCisgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQorICAgIGJ4bHMgICAgbHIKKyAgICBuZWcgICAgIHIwLCByMAorICAgIGIgICAgICAgX19zZXRfZXJybm8KIEVORChmc3RhdCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZnN0YXRhdC5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9mc3RhdGF0LlMKaW5kZXggMDY1ZWY5Zi4uZjQ1NzdkYyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9mc3RhdGF0LlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9mc3RhdGF0LlMKQEAgLTEsMTQgKzEsMTUgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KIAogRU5UUlkoZnN0YXRhdCkKLSAgICAuc2F2ZSAgIHtyNCwgcjd9Ci0gICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92ICAgICBpcCwgcjcKICAgICBsZHIgICAgIHI3LCA9X19OUl9mc3RhdGF0NjQKICAgICBzd2kgICAgICMwCi0gICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9Ci0gICAgbW92cyAgICByMCwgcjAKLSAgICBieHBsICAgIGxyCi0gICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgbW92ICAgICByNywgaXAKKyAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCisgICAgYnhscyAgICBscgorICAgIG5lZyAgICAgcjAsIHIwCisgICAgYiAgICAgICBfX3NldF9lcnJubwogRU5EKGZzdGF0YXQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2ZzeW5jLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2ZzeW5jLlMKaW5kZXggZjBkZTljYS4uNTRmN2Q1NyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9mc3luYy5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZnN5bmMuUwpAQCAtMSwxNCArMSwxNSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgogCiBFTlRSWShmc3luYykKLSAgICAuc2F2ZSAgIHtyNCwgcjd9Ci0gICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92ICAgICBpcCwgcjcKICAgICBsZHIgICAgIHI3LCA9X19OUl9mc3luYwogICAgIHN3aSAgICAgIzAKLSAgICBsZG1mZCAgIHNwISwge3I0LCByN30KLSAgICBtb3ZzICAgIHIwLCByMAotICAgIGJ4cGwgICAgbHIKLSAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICBtb3YgICAgIHI3LCBpcAorICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKKyAgICBieGxzICAgIGxyCisgICAgbmVnICAgICByMCwgcjAKKyAgICBiICAgICAgIF9fc2V0X2Vycm5vCiBFTkQoZnN5bmMpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2Z0cnVuY2F0ZS5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9mdHJ1bmNhdGUuUwppbmRleCAyZTRhMzA4Li42NTliZmJmIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2Z0cnVuY2F0ZS5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZnRydW5jYXRlLlMKQEAgLTEsMTQgKzEsMTUgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KIAogRU5UUlkoZnRydW5jYXRlKQotICAgIC5zYXZlICAge3I0LCByN30KLSAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBtb3YgICAgIGlwLCByNwogICAgIGxkciAgICAgcjcsID1fX05SX2Z0cnVuY2F0ZQogICAgIHN3aSAgICAgIzAKLSAgICBsZG1mZCAgIHNwISwge3I0LCByN30KLSAgICBtb3ZzICAgIHIwLCByMAotICAgIGJ4cGwgICAgbHIKLSAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICBtb3YgICAgIHI3LCBpcAorICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKKyAgICBieGxzICAgIGxyCisgICAgbmVnICAgICByMCwgcjAKKyAgICBiICAgICAgIF9fc2V0X2Vycm5vCiBFTkQoZnRydW5jYXRlKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9mdHJ1bmNhdGU2NC5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9mdHJ1bmNhdGU2NC5TCmluZGV4IDdjN2I4MGIuLjEyMzg5N2QgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZnRydW5jYXRlNjQuUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2Z0cnVuY2F0ZTY0LlMKQEAgLTEsMTQgKzEsMTUgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KIAogRU5UUlkoZnRydW5jYXRlNjQpCi0gICAgLnNhdmUgICB7cjQsIHI3fQotICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdiAgICAgaXAsIHI3CiAgICAgbGRyICAgICByNywgPV9fTlJfZnRydW5jYXRlNjQKICAgICBzd2kgICAgICMwCi0gICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9Ci0gICAgbW92cyAgICByMCwgcjAKLSAgICBieHBsICAgIGxyCi0gICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgbW92ICAgICByNywgaXAKKyAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCisgICAgYnhscyAgICBscgorICAgIG5lZyAgICAgcjAsIHIwCisgICAgYiAgICAgICBfX3NldF9lcnJubwogRU5EKGZ0cnVuY2F0ZTY0KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9mdXRleC5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9mdXRleC5TCmluZGV4IDQ3MjE5ZTMuLjI3YjE1YjcgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZnV0ZXguUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2Z1dGV4LlMKQEAgLTEsNiArMSw3IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+Ci0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CiAKIEVOVFJZKGZ1dGV4KQogICAgIG1vdiAgICAgaXAsIHNwCkBAIC0xMCw3ICsxMSw4IEBACiAgICAgbGRyICAgICByNywgPV9fTlJfZnV0ZXgKICAgICBzd2kgICAgICMwCiAgICAgbGRtZmQgICBzcCEsIHtyNCwgcjUsIHI2LCByN30KLSAgICBtb3ZzICAgIHIwLCByMAotICAgIGJ4cGwgICAgbHIKLSAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCisgICAgYnhscyAgICBscgorICAgIG5lZyAgICAgcjAsIHIwCisgICAgYiAgICAgICBfX3NldF9lcnJubwogRU5EKGZ1dGV4KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9nZXRkZW50cy5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9nZXRkZW50cy5TCmluZGV4IDgyYjZlNGMuLjg1MDZmMjkgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZ2V0ZGVudHMuUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2dldGRlbnRzLlMKQEAgLTEsMTQgKzEsMTUgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KIAogRU5UUlkoZ2V0ZGVudHMpCi0gICAgLnNhdmUgICB7cjQsIHI3fQotICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdiAgICAgaXAsIHI3CiAgICAgbGRyICAgICByNywgPV9fTlJfZ2V0ZGVudHM2NAogICAgIHN3aSAgICAgIzAKLSAgICBsZG1mZCAgIHNwISwge3I0LCByN30KLSAgICBtb3ZzICAgIHIwLCByMAotICAgIGJ4cGwgICAgbHIKLSAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICBtb3YgICAgIHI3LCBpcAorICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKKyAgICBieGxzICAgIGxyCisgICAgbmVnICAgICByMCwgcjAKKyAgICBiICAgICAgIF9fc2V0X2Vycm5vCiBFTkQoZ2V0ZGVudHMpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2dldGVnaWQuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZ2V0ZWdpZC5TCmluZGV4IDI3ZWEyNzIuLjdkYzUyNGUgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZ2V0ZWdpZC5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZ2V0ZWdpZC5TCkBAIC0xLDE0ICsxLDE1IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+Ci0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CiAKIEVOVFJZKGdldGVnaWQpCi0gICAgLnNhdmUgICB7cjQsIHI3fQotICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdiAgICAgaXAsIHI3CiAgICAgbGRyICAgICByNywgPV9fTlJfZ2V0ZWdpZDMyCiAgICAgc3dpICAgICAjMAotICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQotICAgIG1vdnMgICAgcjAsIHIwCi0gICAgYnhwbCAgICBscgotICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIG1vdiAgICAgcjcsIGlwCisgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQorICAgIGJ4bHMgICAgbHIKKyAgICBuZWcgICAgIHIwLCByMAorICAgIGIgICAgICAgX19zZXRfZXJybm8KIEVORChnZXRlZ2lkKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9nZXRldWlkLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2dldGV1aWQuUwppbmRleCBkNGM5Y2QxLi42NGNjMDc0IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2dldGV1aWQuUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2dldGV1aWQuUwpAQCAtMSwxNCArMSwxNSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgogCiBFTlRSWShnZXRldWlkKQotICAgIC5zYXZlICAge3I0LCByN30KLSAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBtb3YgICAgIGlwLCByNwogICAgIGxkciAgICAgcjcsID1fX05SX2dldGV1aWQzMgogICAgIHN3aSAgICAgIzAKLSAgICBsZG1mZCAgIHNwISwge3I0LCByN30KLSAgICBtb3ZzICAgIHIwLCByMAotICAgIGJ4cGwgICAgbHIKLSAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICBtb3YgICAgIHI3LCBpcAorICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKKyAgICBieGxzICAgIGxyCisgICAgbmVnICAgICByMCwgcjAKKyAgICBiICAgICAgIF9fc2V0X2Vycm5vCiBFTkQoZ2V0ZXVpZCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZ2V0Z2lkLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2dldGdpZC5TCmluZGV4IDlhNDBmZTYuLmE1NmExNjAgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZ2V0Z2lkLlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9nZXRnaWQuUwpAQCAtMSwxNCArMSwxNSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgogCiBFTlRSWShnZXRnaWQpCi0gICAgLnNhdmUgICB7cjQsIHI3fQotICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdiAgICAgaXAsIHI3CiAgICAgbGRyICAgICByNywgPV9fTlJfZ2V0Z2lkMzIKICAgICBzd2kgICAgICMwCi0gICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9Ci0gICAgbW92cyAgICByMCwgcjAKLSAgICBieHBsICAgIGxyCi0gICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgbW92ICAgICByNywgaXAKKyAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCisgICAgYnhscyAgICBscgorICAgIG5lZyAgICAgcjAsIHIwCisgICAgYiAgICAgICBfX3NldF9lcnJubwogRU5EKGdldGdpZCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZ2V0Z3JvdXBzLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2dldGdyb3Vwcy5TCmluZGV4IDI5OTVjYzguLjNlZDIzNmQgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZ2V0Z3JvdXBzLlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9nZXRncm91cHMuUwpAQCAtMSwxNCArMSwxNSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgogCiBFTlRSWShnZXRncm91cHMpCi0gICAgLnNhdmUgICB7cjQsIHI3fQotICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdiAgICAgaXAsIHI3CiAgICAgbGRyICAgICByNywgPV9fTlJfZ2V0Z3JvdXBzMzIKICAgICBzd2kgICAgICMwCi0gICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9Ci0gICAgbW92cyAgICByMCwgcjAKLSAgICBieHBsICAgIGxyCi0gICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgbW92ICAgICByNywgaXAKKyAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCisgICAgYnhscyAgICBscgorICAgIG5lZyAgICAgcjAsIHIwCisgICAgYiAgICAgICBfX3NldF9lcnJubwogRU5EKGdldGdyb3VwcykKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZ2V0aXRpbWVyLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2dldGl0aW1lci5TCmluZGV4IGEzZjE0MjMuLjA5MTQ1MGYgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZ2V0aXRpbWVyLlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9nZXRpdGltZXIuUwpAQCAtMSwxNCArMSwxNSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgogCiBFTlRSWShnZXRpdGltZXIpCi0gICAgLnNhdmUgICB7cjQsIHI3fQotICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdiAgICAgaXAsIHI3CiAgICAgbGRyICAgICByNywgPV9fTlJfZ2V0aXRpbWVyCiAgICAgc3dpICAgICAjMAotICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQotICAgIG1vdnMgICAgcjAsIHIwCi0gICAgYnhwbCAgICBscgotICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIG1vdiAgICAgcjcsIGlwCisgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQorICAgIGJ4bHMgICAgbHIKKyAgICBuZWcgICAgIHIwLCByMAorICAgIGIgICAgICAgX19zZXRfZXJybm8KIEVORChnZXRpdGltZXIpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2dldHBlZXJuYW1lLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2dldHBlZXJuYW1lLlMKaW5kZXggZjkwYzM0NC4uOGI5NTZiZiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9nZXRwZWVybmFtZS5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZ2V0cGVlcm5hbWUuUwpAQCAtMSwxNCArMSwxNSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgogCiBFTlRSWShnZXRwZWVybmFtZSkKLSAgICAuc2F2ZSAgIHtyNCwgcjd9Ci0gICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92ICAgICBpcCwgcjcKICAgICBsZHIgICAgIHI3LCA9X19OUl9nZXRwZWVybmFtZQogICAgIHN3aSAgICAgIzAKLSAgICBsZG1mZCAgIHNwISwge3I0LCByN30KLSAgICBtb3ZzICAgIHIwLCByMAotICAgIGJ4cGwgICAgbHIKLSAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICBtb3YgICAgIHI3LCBpcAorICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKKyAgICBieGxzICAgIGxyCisgICAgbmVnICAgICByMCwgcjAKKyAgICBiICAgICAgIF9fc2V0X2Vycm5vCiBFTkQoZ2V0cGVlcm5hbWUpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2dldHBnaWQuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZ2V0cGdpZC5TCmluZGV4IDBmYzU3YTQuLmNiYzUxMGYgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZ2V0cGdpZC5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZ2V0cGdpZC5TCkBAIC0xLDE0ICsxLDE1IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+Ci0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CiAKIEVOVFJZKGdldHBnaWQpCi0gICAgLnNhdmUgICB7cjQsIHI3fQotICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdiAgICAgaXAsIHI3CiAgICAgbGRyICAgICByNywgPV9fTlJfZ2V0cGdpZAogICAgIHN3aSAgICAgIzAKLSAgICBsZG1mZCAgIHNwISwge3I0LCByN30KLSAgICBtb3ZzICAgIHIwLCByMAotICAgIGJ4cGwgICAgbHIKLSAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICBtb3YgICAgIHI3LCBpcAorICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKKyAgICBieGxzICAgIGxyCisgICAgbmVnICAgICByMCwgcjAKKyAgICBiICAgICAgIF9fc2V0X2Vycm5vCiBFTkQoZ2V0cGdpZCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZ2V0cGlkLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2dldHBpZC5TCmluZGV4IDQ0MGFlOWIuLmVjYjEyNWIgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZ2V0cGlkLlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9nZXRwaWQuUwpAQCAtMSwxNCArMSwxNSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgogCiBFTlRSWShnZXRwaWQpCi0gICAgLnNhdmUgICB7cjQsIHI3fQotICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdiAgICAgaXAsIHI3CiAgICAgbGRyICAgICByNywgPV9fTlJfZ2V0cGlkCiAgICAgc3dpICAgICAjMAotICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQotICAgIG1vdnMgICAgcjAsIHIwCi0gICAgYnhwbCAgICBscgotICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIG1vdiAgICAgcjcsIGlwCisgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQorICAgIGJ4bHMgICAgbHIKKyAgICBuZWcgICAgIHIwLCByMAorICAgIGIgICAgICAgX19zZXRfZXJybm8KIEVORChnZXRwaWQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2dldHBwaWQuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZ2V0cHBpZC5TCmluZGV4IDNlYjFiODYuLjRhNzc1ZTcgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZ2V0cHBpZC5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZ2V0cHBpZC5TCkBAIC0xLDE0ICsxLDE1IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+Ci0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CiAKIEVOVFJZKGdldHBwaWQpCi0gICAgLnNhdmUgICB7cjQsIHI3fQotICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdiAgICAgaXAsIHI3CiAgICAgbGRyICAgICByNywgPV9fTlJfZ2V0cHBpZAogICAgIHN3aSAgICAgIzAKLSAgICBsZG1mZCAgIHNwISwge3I0LCByN30KLSAgICBtb3ZzICAgIHIwLCByMAotICAgIGJ4cGwgICAgbHIKLSAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICBtb3YgICAgIHI3LCBpcAorICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKKyAgICBieGxzICAgIGxyCisgICAgbmVnICAgICByMCwgcjAKKyAgICBiICAgICAgIF9fc2V0X2Vycm5vCiBFTkQoZ2V0cHBpZCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZ2V0cmVzZ2lkLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2dldHJlc2dpZC5TCmluZGV4IGEwMjIzNDEuLmU1NzRlZjMgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZ2V0cmVzZ2lkLlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9nZXRyZXNnaWQuUwpAQCAtMSwxNCArMSwxNSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgogCiBFTlRSWShnZXRyZXNnaWQpCi0gICAgLnNhdmUgICB7cjQsIHI3fQotICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdiAgICAgaXAsIHI3CiAgICAgbGRyICAgICByNywgPV9fTlJfZ2V0cmVzZ2lkMzIKICAgICBzd2kgICAgICMwCi0gICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9Ci0gICAgbW92cyAgICByMCwgcjAKLSAgICBieHBsICAgIGxyCi0gICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgbW92ICAgICByNywgaXAKKyAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCisgICAgYnhscyAgICBscgorICAgIG5lZyAgICAgcjAsIHIwCisgICAgYiAgICAgICBfX3NldF9lcnJubwogRU5EKGdldHJlc2dpZCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZ2V0cmVzdWlkLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2dldHJlc3VpZC5TCmluZGV4IDIzMTEyYTYuLjljOGIwYmYgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZ2V0cmVzdWlkLlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9nZXRyZXN1aWQuUwpAQCAtMSwxNCArMSwxNSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgogCiBFTlRSWShnZXRyZXN1aWQpCi0gICAgLnNhdmUgICB7cjQsIHI3fQotICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdiAgICAgaXAsIHI3CiAgICAgbGRyICAgICByNywgPV9fTlJfZ2V0cmVzdWlkMzIKICAgICBzd2kgICAgICMwCi0gICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9Ci0gICAgbW92cyAgICByMCwgcjAKLSAgICBieHBsICAgIGxyCi0gICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgbW92ICAgICByNywgaXAKKyAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCisgICAgYnhscyAgICBscgorICAgIG5lZyAgICAgcjAsIHIwCisgICAgYiAgICAgICBfX3NldF9lcnJubwogRU5EKGdldHJlc3VpZCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZ2V0cmxpbWl0LlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2dldHJsaW1pdC5TCmluZGV4IDhiMWMwODkuLjIxMzgwZjkgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZ2V0cmxpbWl0LlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9nZXRybGltaXQuUwpAQCAtMSwxNCArMSwxNSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgogCiBFTlRSWShnZXRybGltaXQpCi0gICAgLnNhdmUgICB7cjQsIHI3fQotICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdiAgICAgaXAsIHI3CiAgICAgbGRyICAgICByNywgPV9fTlJfdWdldHJsaW1pdAogICAgIHN3aSAgICAgIzAKLSAgICBsZG1mZCAgIHNwISwge3I0LCByN30KLSAgICBtb3ZzICAgIHIwLCByMAotICAgIGJ4cGwgICAgbHIKLSAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICBtb3YgICAgIHI3LCBpcAorICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKKyAgICBieGxzICAgIGxyCisgICAgbmVnICAgICByMCwgcjAKKyAgICBiICAgICAgIF9fc2V0X2Vycm5vCiBFTkQoZ2V0cmxpbWl0KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9nZXRydXNhZ2UuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZ2V0cnVzYWdlLlMKaW5kZXggNzRmYTIwYi4uMTMxYzU4ZiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9nZXRydXNhZ2UuUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2dldHJ1c2FnZS5TCkBAIC0xLDE0ICsxLDE1IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+Ci0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CiAKIEVOVFJZKGdldHJ1c2FnZSkKLSAgICAuc2F2ZSAgIHtyNCwgcjd9Ci0gICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92ICAgICBpcCwgcjcKICAgICBsZHIgICAgIHI3LCA9X19OUl9nZXRydXNhZ2UKICAgICBzd2kgICAgICMwCi0gICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9Ci0gICAgbW92cyAgICByMCwgcjAKLSAgICBieHBsICAgIGxyCi0gICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgbW92ICAgICByNywgaXAKKyAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCisgICAgYnhscyAgICBscgorICAgIG5lZyAgICAgcjAsIHIwCisgICAgYiAgICAgICBfX3NldF9lcnJubwogRU5EKGdldHJ1c2FnZSkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZ2V0c2lkLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2dldHNpZC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1ZmZkNWYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2dldHNpZC5TCkBAIC0wLDAgKzEsMTUgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KKworRU5UUlkoZ2V0c2lkKQorICAgIG1vdiAgICAgaXAsIHI3CisgICAgbGRyICAgICByNywgPV9fTlJfZ2V0c2lkCisgICAgc3dpICAgICAjMAorICAgIG1vdiAgICAgcjcsIGlwCisgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQorICAgIGJ4bHMgICAgbHIKKyAgICBuZWcgICAgIHIwLCByMAorICAgIGIgICAgICAgX19zZXRfZXJybm8KK0VORChnZXRzaWQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2dldHNvY2tuYW1lLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2dldHNvY2tuYW1lLlMKaW5kZXggOTk0NzBlMi4uZWMwZjkzMCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9nZXRzb2NrbmFtZS5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZ2V0c29ja25hbWUuUwpAQCAtMSwxNCArMSwxNSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgogCiBFTlRSWShnZXRzb2NrbmFtZSkKLSAgICAuc2F2ZSAgIHtyNCwgcjd9Ci0gICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92ICAgICBpcCwgcjcKICAgICBsZHIgICAgIHI3LCA9X19OUl9nZXRzb2NrbmFtZQogICAgIHN3aSAgICAgIzAKLSAgICBsZG1mZCAgIHNwISwge3I0LCByN30KLSAgICBtb3ZzICAgIHIwLCByMAotICAgIGJ4cGwgICAgbHIKLSAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICBtb3YgICAgIHI3LCBpcAorICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKKyAgICBieGxzICAgIGxyCisgICAgbmVnICAgICByMCwgcjAKKyAgICBiICAgICAgIF9fc2V0X2Vycm5vCiBFTkQoZ2V0c29ja25hbWUpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2dldHNvY2tvcHQuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZ2V0c29ja29wdC5TCmluZGV4IGQ1MmY0NDEuLjk1Zjc5YWYgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZ2V0c29ja29wdC5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZ2V0c29ja29wdC5TCkBAIC0xLDYgKzEsNyBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgogCiBFTlRSWShnZXRzb2Nrb3B0KQogICAgIG1vdiAgICAgaXAsIHNwCkBAIC0xMCw3ICsxMSw4IEBACiAgICAgbGRyICAgICByNywgPV9fTlJfZ2V0c29ja29wdAogICAgIHN3aSAgICAgIzAKICAgICBsZG1mZCAgIHNwISwge3I0LCByNSwgcjYsIHI3fQotICAgIG1vdnMgICAgcjAsIHIwCi0gICAgYnhwbCAgICBscgotICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKKyAgICBieGxzICAgIGxyCisgICAgbmVnICAgICByMCwgcjAKKyAgICBiICAgICAgIF9fc2V0X2Vycm5vCiBFTkQoZ2V0c29ja29wdCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZ2V0dGlkLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2dldHRpZC5TCmluZGV4IGY1YjE1YmUuLmI4ZGQxMjAgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZ2V0dGlkLlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9nZXR0aWQuUwpAQCAtMSwxNCArMSwxNSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgogCiBFTlRSWShnZXR0aWQpCi0gICAgLnNhdmUgICB7cjQsIHI3fQotICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdiAgICAgaXAsIHI3CiAgICAgbGRyICAgICByNywgPV9fTlJfZ2V0dGlkCiAgICAgc3dpICAgICAjMAotICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQotICAgIG1vdnMgICAgcjAsIHIwCi0gICAgYnhwbCAgICBscgotICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIG1vdiAgICAgcjcsIGlwCisgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQorICAgIGJ4bHMgICAgbHIKKyAgICBuZWcgICAgIHIwLCByMAorICAgIGIgICAgICAgX19zZXRfZXJybm8KIEVORChnZXR0aWQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2dldHRpbWVvZmRheS5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9nZXR0aW1lb2ZkYXkuUwppbmRleCA5YjQ3ZGFmLi45ZjQzYjk4IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2dldHRpbWVvZmRheS5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZ2V0dGltZW9mZGF5LlMKQEAgLTEsMTQgKzEsMTUgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KIAogRU5UUlkoZ2V0dGltZW9mZGF5KQotICAgIC5zYXZlICAge3I0LCByN30KLSAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBtb3YgICAgIGlwLCByNwogICAgIGxkciAgICAgcjcsID1fX05SX2dldHRpbWVvZmRheQogICAgIHN3aSAgICAgIzAKLSAgICBsZG1mZCAgIHNwISwge3I0LCByN30KLSAgICBtb3ZzICAgIHIwLCByMAotICAgIGJ4cGwgICAgbHIKLSAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICBtb3YgICAgIHI3LCBpcAorICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKKyAgICBieGxzICAgIGxyCisgICAgbmVnICAgICByMCwgcjAKKyAgICBiICAgICAgIF9fc2V0X2Vycm5vCiBFTkQoZ2V0dGltZW9mZGF5KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9nZXR1aWQuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZ2V0dWlkLlMKaW5kZXggMDUzZGMzMS4uMDJmYjZmYyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9nZXR1aWQuUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2dldHVpZC5TCkBAIC0xLDE0ICsxLDE1IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+Ci0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CiAKIEVOVFJZKGdldHVpZCkKLSAgICAuc2F2ZSAgIHtyNCwgcjd9Ci0gICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92ICAgICBpcCwgcjcKICAgICBsZHIgICAgIHI3LCA9X19OUl9nZXR1aWQzMgogICAgIHN3aSAgICAgIzAKLSAgICBsZG1mZCAgIHNwISwge3I0LCByN30KLSAgICBtb3ZzICAgIHIwLCByMAotICAgIGJ4cGwgICAgbHIKLSAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICBtb3YgICAgIHI3LCBpcAorICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKKyAgICBieGxzICAgIGxyCisgICAgbmVnICAgICByMCwgcjAKKyAgICBiICAgICAgIF9fc2V0X2Vycm5vCiBFTkQoZ2V0dWlkKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9nZXR4YXR0ci5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9nZXR4YXR0ci5TCmluZGV4IDE4NTMyY2UuLjM1NGQ5NDggMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZ2V0eGF0dHIuUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2dldHhhdHRyLlMKQEAgLTEsMTQgKzEsMTUgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KIAogRU5UUlkoZ2V0eGF0dHIpCi0gICAgLnNhdmUgICB7cjQsIHI3fQotICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdiAgICAgaXAsIHI3CiAgICAgbGRyICAgICByNywgPV9fTlJfZ2V0eGF0dHIKICAgICBzd2kgICAgICMwCi0gICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9Ci0gICAgbW92cyAgICByMCwgcjAKLSAgICBieHBsICAgIGxyCi0gICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgbW92ICAgICByNywgaXAKKyAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCisgICAgYnhscyAgICBscgorICAgIG5lZyAgICAgcjAsIHIwCisgICAgYiAgICAgICBfX3NldF9lcnJubwogRU5EKGdldHhhdHRyKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9pbml0X21vZHVsZS5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9pbml0X21vZHVsZS5TCmluZGV4IDczYmViNDYuLmM3MmMzNGMgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvaW5pdF9tb2R1bGUuUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2luaXRfbW9kdWxlLlMKQEAgLTEsMTQgKzEsMTUgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KIAogRU5UUlkoaW5pdF9tb2R1bGUpCi0gICAgLnNhdmUgICB7cjQsIHI3fQotICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdiAgICAgaXAsIHI3CiAgICAgbGRyICAgICByNywgPV9fTlJfaW5pdF9tb2R1bGUKICAgICBzd2kgICAgICMwCi0gICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9Ci0gICAgbW92cyAgICByMCwgcjAKLSAgICBieHBsICAgIGxyCi0gICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgbW92ICAgICByNywgaXAKKyAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCisgICAgYnhscyAgICBscgorICAgIG5lZyAgICAgcjAsIHIwCisgICAgYiAgICAgICBfX3NldF9lcnJubwogRU5EKGluaXRfbW9kdWxlKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9pbm90aWZ5X2FkZF93YXRjaC5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9pbm90aWZ5X2FkZF93YXRjaC5TCmluZGV4IGRhNGEyOTYuLmM5OTQ2NzcgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvaW5vdGlmeV9hZGRfd2F0Y2guUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2lub3RpZnlfYWRkX3dhdGNoLlMKQEAgLTEsMTQgKzEsMTUgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KIAogRU5UUlkoaW5vdGlmeV9hZGRfd2F0Y2gpCi0gICAgLnNhdmUgICB7cjQsIHI3fQotICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdiAgICAgaXAsIHI3CiAgICAgbGRyICAgICByNywgPV9fTlJfaW5vdGlmeV9hZGRfd2F0Y2gKICAgICBzd2kgICAgICMwCi0gICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9Ci0gICAgbW92cyAgICByMCwgcjAKLSAgICBieHBsICAgIGxyCi0gICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgbW92ICAgICByNywgaXAKKyAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCisgICAgYnhscyAgICBscgorICAgIG5lZyAgICAgcjAsIHIwCisgICAgYiAgICAgICBfX3NldF9lcnJubwogRU5EKGlub3RpZnlfYWRkX3dhdGNoKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9pbm90aWZ5X2luaXQuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvaW5vdGlmeV9pbml0LlMKaW5kZXggYmFjMTI0Yy4uMzcxMzMwMyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9pbm90aWZ5X2luaXQuUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2lub3RpZnlfaW5pdC5TCkBAIC0xLDE0ICsxLDE1IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+Ci0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CiAKIEVOVFJZKGlub3RpZnlfaW5pdCkKLSAgICAuc2F2ZSAgIHtyNCwgcjd9Ci0gICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92ICAgICBpcCwgcjcKICAgICBsZHIgICAgIHI3LCA9X19OUl9pbm90aWZ5X2luaXQKICAgICBzd2kgICAgICMwCi0gICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9Ci0gICAgbW92cyAgICByMCwgcjAKLSAgICBieHBsICAgIGxyCi0gICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgbW92ICAgICByNywgaXAKKyAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCisgICAgYnhscyAgICBscgorICAgIG5lZyAgICAgcjAsIHIwCisgICAgYiAgICAgICBfX3NldF9lcnJubwogRU5EKGlub3RpZnlfaW5pdCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvaW5vdGlmeV9ybV93YXRjaC5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9pbm90aWZ5X3JtX3dhdGNoLlMKaW5kZXggZjU3NjQ4MC4uZDc0MGRlMCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9pbm90aWZ5X3JtX3dhdGNoLlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9pbm90aWZ5X3JtX3dhdGNoLlMKQEAgLTEsMTQgKzEsMTUgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KIAogRU5UUlkoaW5vdGlmeV9ybV93YXRjaCkKLSAgICAuc2F2ZSAgIHtyNCwgcjd9Ci0gICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92ICAgICBpcCwgcjcKICAgICBsZHIgICAgIHI3LCA9X19OUl9pbm90aWZ5X3JtX3dhdGNoCiAgICAgc3dpICAgICAjMAotICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQotICAgIG1vdnMgICAgcjAsIHIwCi0gICAgYnhwbCAgICBscgotICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIG1vdiAgICAgcjcsIGlwCisgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQorICAgIGJ4bHMgICAgbHIKKyAgICBuZWcgICAgIHIwLCByMAorICAgIGIgICAgICAgX19zZXRfZXJybm8KIEVORChpbm90aWZ5X3JtX3dhdGNoKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9pb3ByaW9fZ2V0LlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2lvcHJpb19nZXQuUwppbmRleCAxMzczOWRjLi5iYjFkZDFhIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2lvcHJpb19nZXQuUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2lvcHJpb19nZXQuUwpAQCAtMSwxNCArMSwxNSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgogCiBFTlRSWShpb3ByaW9fZ2V0KQotICAgIC5zYXZlICAge3I0LCByN30KLSAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBtb3YgICAgIGlwLCByNwogICAgIGxkciAgICAgcjcsID1fX05SX2lvcHJpb19nZXQKICAgICBzd2kgICAgICMwCi0gICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9Ci0gICAgbW92cyAgICByMCwgcjAKLSAgICBieHBsICAgIGxyCi0gICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgbW92ICAgICByNywgaXAKKyAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCisgICAgYnhscyAgICBscgorICAgIG5lZyAgICAgcjAsIHIwCisgICAgYiAgICAgICBfX3NldF9lcnJubwogRU5EKGlvcHJpb19nZXQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2lvcHJpb19zZXQuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvaW9wcmlvX3NldC5TCmluZGV4IDdlNDBlZTUuLjA2NGEzOTkgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvaW9wcmlvX3NldC5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvaW9wcmlvX3NldC5TCkBAIC0xLDE0ICsxLDE1IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+Ci0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CiAKIEVOVFJZKGlvcHJpb19zZXQpCi0gICAgLnNhdmUgICB7cjQsIHI3fQotICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdiAgICAgaXAsIHI3CiAgICAgbGRyICAgICByNywgPV9fTlJfaW9wcmlvX3NldAogICAgIHN3aSAgICAgIzAKLSAgICBsZG1mZCAgIHNwISwge3I0LCByN30KLSAgICBtb3ZzICAgIHIwLCByMAotICAgIGJ4cGwgICAgbHIKLSAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICBtb3YgICAgIHI3LCBpcAorICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKKyAgICBieGxzICAgIGxyCisgICAgbmVnICAgICByMCwgcjAKKyAgICBiICAgICAgIF9fc2V0X2Vycm5vCiBFTkQoaW9wcmlvX3NldCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMva2xvZ2N0bC5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9rbG9nY3RsLlMKaW5kZXggNTQzNGIzMC4uZjk3Y2YxYSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9rbG9nY3RsLlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9rbG9nY3RsLlMKQEAgLTEsMTQgKzEsMTUgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KIAogRU5UUlkoa2xvZ2N0bCkKLSAgICAuc2F2ZSAgIHtyNCwgcjd9Ci0gICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92ICAgICBpcCwgcjcKICAgICBsZHIgICAgIHI3LCA9X19OUl9zeXNsb2cKICAgICBzd2kgICAgICMwCi0gICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9Ci0gICAgbW92cyAgICByMCwgcjAKLSAgICBieHBsICAgIGxyCi0gICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgbW92ICAgICByNywgaXAKKyAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCisgICAgYnhscyAgICBscgorICAgIG5lZyAgICAgcjAsIHIwCisgICAgYiAgICAgICBfX3NldF9lcnJubwogRU5EKGtsb2djdGwpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2xjaG93bi5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9sY2hvd24uUwppbmRleCA3ODllNWFmLi5lNTczOGI1IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2xjaG93bi5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvbGNob3duLlMKQEAgLTEsMTQgKzEsMTUgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KIAogRU5UUlkobGNob3duKQotICAgIC5zYXZlICAge3I0LCByN30KLSAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBtb3YgICAgIGlwLCByNwogICAgIGxkciAgICAgcjcsID1fX05SX2xjaG93bjMyCiAgICAgc3dpICAgICAjMAotICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQotICAgIG1vdnMgICAgcjAsIHIwCi0gICAgYnhwbCAgICBscgotICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIG1vdiAgICAgcjcsIGlwCisgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQorICAgIGJ4bHMgICAgbHIKKyAgICBuZWcgICAgIHIwLCByMAorICAgIGIgICAgICAgX19zZXRfZXJybm8KIEVORChsY2hvd24pCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2xnZXR4YXR0ci5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9sZ2V0eGF0dHIuUwppbmRleCA2MWZjMDk4Li43YWY3NDRlIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2xnZXR4YXR0ci5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvbGdldHhhdHRyLlMKQEAgLTEsMTQgKzEsMTUgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KIAogRU5UUlkobGdldHhhdHRyKQotICAgIC5zYXZlICAge3I0LCByN30KLSAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBtb3YgICAgIGlwLCByNwogICAgIGxkciAgICAgcjcsID1fX05SX2xnZXR4YXR0cgogICAgIHN3aSAgICAgIzAKLSAgICBsZG1mZCAgIHNwISwge3I0LCByN30KLSAgICBtb3ZzICAgIHIwLCByMAotICAgIGJ4cGwgICAgbHIKLSAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICBtb3YgICAgIHI3LCBpcAorICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKKyAgICBieGxzICAgIGxyCisgICAgbmVnICAgICByMCwgcjAKKyAgICBiICAgICAgIF9fc2V0X2Vycm5vCiBFTkQobGdldHhhdHRyKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9saW5rLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2xpbmsuUwppbmRleCBjY2YwYTFkLi5lMDc0ZWQwIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2xpbmsuUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2xpbmsuUwpAQCAtMSwxNCArMSwxNSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgogCiBFTlRSWShsaW5rKQotICAgIC5zYXZlICAge3I0LCByN30KLSAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBtb3YgICAgIGlwLCByNwogICAgIGxkciAgICAgcjcsID1fX05SX2xpbmsKICAgICBzd2kgICAgICMwCi0gICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9Ci0gICAgbW92cyAgICByMCwgcjAKLSAgICBieHBsICAgIGxyCi0gICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgbW92ICAgICByNywgaXAKKyAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCisgICAgYnhscyAgICBscgorICAgIG5lZyAgICAgcjAsIHIwCisgICAgYiAgICAgICBfX3NldF9lcnJubwogRU5EKGxpbmspCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2xpc3Rlbi5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9saXN0ZW4uUwppbmRleCBiYjdmN2E0Li4yMWY0MjcxIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2xpc3Rlbi5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvbGlzdGVuLlMKQEAgLTEsMTQgKzEsMTUgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KIAogRU5UUlkobGlzdGVuKQotICAgIC5zYXZlICAge3I0LCByN30KLSAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBtb3YgICAgIGlwLCByNwogICAgIGxkciAgICAgcjcsID1fX05SX2xpc3RlbgogICAgIHN3aSAgICAgIzAKLSAgICBsZG1mZCAgIHNwISwge3I0LCByN30KLSAgICBtb3ZzICAgIHIwLCByMAotICAgIGJ4cGwgICAgbHIKLSAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICBtb3YgICAgIHI3LCBpcAorICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKKyAgICBieGxzICAgIGxyCisgICAgbmVnICAgICByMCwgcjAKKyAgICBiICAgICAgIF9fc2V0X2Vycm5vCiBFTkQobGlzdGVuKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9saXN0eGF0dHIuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvbGlzdHhhdHRyLlMKaW5kZXggNmJiZGI2YS4uOTA5NGE2YyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9saXN0eGF0dHIuUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2xpc3R4YXR0ci5TCkBAIC0xLDE0ICsxLDE1IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+Ci0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CiAKIEVOVFJZKGxpc3R4YXR0cikKLSAgICAuc2F2ZSAgIHtyNCwgcjd9Ci0gICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92ICAgICBpcCwgcjcKICAgICBsZHIgICAgIHI3LCA9X19OUl9saXN0eGF0dHIKICAgICBzd2kgICAgICMwCi0gICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9Ci0gICAgbW92cyAgICByMCwgcjAKLSAgICBieHBsICAgIGxyCi0gICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgbW92ICAgICByNywgaXAKKyAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCisgICAgYnhscyAgICBscgorICAgIG5lZyAgICAgcjAsIHIwCisgICAgYiAgICAgICBfX3NldF9lcnJubwogRU5EKGxpc3R4YXR0cikKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvbGxpc3R4YXR0ci5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9sbGlzdHhhdHRyLlMKaW5kZXggODk2ODJkZi4uNzJkNzkwZiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9sbGlzdHhhdHRyLlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9sbGlzdHhhdHRyLlMKQEAgLTEsMTQgKzEsMTUgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KIAogRU5UUlkobGxpc3R4YXR0cikKLSAgICAuc2F2ZSAgIHtyNCwgcjd9Ci0gICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92ICAgICBpcCwgcjcKICAgICBsZHIgICAgIHI3LCA9X19OUl9sbGlzdHhhdHRyCiAgICAgc3dpICAgICAjMAotICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQotICAgIG1vdnMgICAgcjAsIHIwCi0gICAgYnhwbCAgICBscgotICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIG1vdiAgICAgcjcsIGlwCisgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQorICAgIGJ4bHMgICAgbHIKKyAgICBuZWcgICAgIHIwLCByMAorICAgIGIgICAgICAgX19zZXRfZXJybm8KIEVORChsbGlzdHhhdHRyKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9scmVtb3ZleGF0dHIuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvbHJlbW92ZXhhdHRyLlMKaW5kZXggNjJmNjcyMi4uNzI5YzRmYSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9scmVtb3ZleGF0dHIuUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2xyZW1vdmV4YXR0ci5TCkBAIC0xLDE0ICsxLDE1IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+Ci0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CiAKIEVOVFJZKGxyZW1vdmV4YXR0cikKLSAgICAuc2F2ZSAgIHtyNCwgcjd9Ci0gICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92ICAgICBpcCwgcjcKICAgICBsZHIgICAgIHI3LCA9X19OUl9scmVtb3ZleGF0dHIKICAgICBzd2kgICAgICMwCi0gICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9Ci0gICAgbW92cyAgICByMCwgcjAKLSAgICBieHBsICAgIGxyCi0gICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgbW92ICAgICByNywgaXAKKyAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCisgICAgYnhscyAgICBscgorICAgIG5lZyAgICAgcjAsIHIwCisgICAgYiAgICAgICBfX3NldF9lcnJubwogRU5EKGxyZW1vdmV4YXR0cikKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvbHNlZWsuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvbHNlZWsuUwppbmRleCAyY2QwODUzLi45MWY4MDI5IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2xzZWVrLlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9sc2Vlay5TCkBAIC0xLDE0ICsxLDE1IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+Ci0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CiAKIEVOVFJZKGxzZWVrKQotICAgIC5zYXZlICAge3I0LCByN30KLSAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBtb3YgICAgIGlwLCByNwogICAgIGxkciAgICAgcjcsID1fX05SX2xzZWVrCiAgICAgc3dpICAgICAjMAotICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQotICAgIG1vdnMgICAgcjAsIHIwCi0gICAgYnhwbCAgICBscgotICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIG1vdiAgICAgcjcsIGlwCisgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQorICAgIGJ4bHMgICAgbHIKKyAgICBuZWcgICAgIHIwLCByMAorICAgIGIgICAgICAgX19zZXRfZXJybm8KIEVORChsc2VlaykKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvbHNldHhhdHRyLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2xzZXR4YXR0ci5TCmluZGV4IGJkZTdjMjQuLmMwMTc3ZWUgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvbHNldHhhdHRyLlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9sc2V0eGF0dHIuUwpAQCAtMSw2ICsxLDcgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KIAogRU5UUlkobHNldHhhdHRyKQogICAgIG1vdiAgICAgaXAsIHNwCkBAIC0xMCw3ICsxMSw4IEBACiAgICAgbGRyICAgICByNywgPV9fTlJfbHNldHhhdHRyCiAgICAgc3dpICAgICAjMAogICAgIGxkbWZkICAgc3AhLCB7cjQsIHI1LCByNiwgcjd9Ci0gICAgbW92cyAgICByMCwgcjAKLSAgICBieHBsICAgIGxyCi0gICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQorICAgIGJ4bHMgICAgbHIKKyAgICBuZWcgICAgIHIwLCByMAorICAgIGIgICAgICAgX19zZXRfZXJybm8KIEVORChsc2V0eGF0dHIpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2xzdGF0LlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2xzdGF0LlMKaW5kZXggZGJlY2VmZS4uYmU5ZWJhYSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9sc3RhdC5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvbHN0YXQuUwpAQCAtMSwxNCArMSwxNSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgogCiBFTlRSWShsc3RhdCkKLSAgICAuc2F2ZSAgIHtyNCwgcjd9Ci0gICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92ICAgICBpcCwgcjcKICAgICBsZHIgICAgIHI3LCA9X19OUl9sc3RhdDY0CiAgICAgc3dpICAgICAjMAotICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQotICAgIG1vdnMgICAgcjAsIHIwCi0gICAgYnhwbCAgICBscgotICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIG1vdiAgICAgcjcsIGlwCisgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQorICAgIGJ4bHMgICAgbHIKKyAgICBuZWcgICAgIHIwLCByMAorICAgIGIgICAgICAgX19zZXRfZXJybm8KIEVORChsc3RhdCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvbWFkdmlzZS5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9tYWR2aXNlLlMKaW5kZXggMDI0NDc2Zi4uZDdmNzc3NiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9tYWR2aXNlLlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9tYWR2aXNlLlMKQEAgLTEsMTQgKzEsMTUgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KIAogRU5UUlkobWFkdmlzZSkKLSAgICAuc2F2ZSAgIHtyNCwgcjd9Ci0gICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92ICAgICBpcCwgcjcKICAgICBsZHIgICAgIHI3LCA9X19OUl9tYWR2aXNlCiAgICAgc3dpICAgICAjMAotICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQotICAgIG1vdnMgICAgcjAsIHIwCi0gICAgYnhwbCAgICBscgotICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIG1vdiAgICAgcjcsIGlwCisgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQorICAgIGJ4bHMgICAgbHIKKyAgICBuZWcgICAgIHIwLCByMAorICAgIGIgICAgICAgX19zZXRfZXJybm8KIEVORChtYWR2aXNlKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9taW5jb3JlLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL21pbmNvcmUuUwppbmRleCA3YTJhMzc4Li43NDRiMWU0IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL21pbmNvcmUuUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL21pbmNvcmUuUwpAQCAtMSwxNCArMSwxNSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgogCiBFTlRSWShtaW5jb3JlKQotICAgIC5zYXZlICAge3I0LCByN30KLSAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBtb3YgICAgIGlwLCByNwogICAgIGxkciAgICAgcjcsID1fX05SX21pbmNvcmUKICAgICBzd2kgICAgICMwCi0gICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9Ci0gICAgbW92cyAgICByMCwgcjAKLSAgICBieHBsICAgIGxyCi0gICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgbW92ICAgICByNywgaXAKKyAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCisgICAgYnhscyAgICBscgorICAgIG5lZyAgICAgcjAsIHIwCisgICAgYiAgICAgICBfX3NldF9lcnJubwogRU5EKG1pbmNvcmUpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL21rZGlyLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL21rZGlyLlMKaW5kZXggZTUxYmVhYi4uNDE2MzMxOCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9ta2Rpci5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvbWtkaXIuUwpAQCAtMSwxNCArMSwxNSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgogCiBFTlRSWShta2RpcikKLSAgICAuc2F2ZSAgIHtyNCwgcjd9Ci0gICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92ICAgICBpcCwgcjcKICAgICBsZHIgICAgIHI3LCA9X19OUl9ta2RpcgogICAgIHN3aSAgICAgIzAKLSAgICBsZG1mZCAgIHNwISwge3I0LCByN30KLSAgICBtb3ZzICAgIHIwLCByMAotICAgIGJ4cGwgICAgbHIKLSAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICBtb3YgICAgIHI3LCBpcAorICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKKyAgICBieGxzICAgIGxyCisgICAgbmVnICAgICByMCwgcjAKKyAgICBiICAgICAgIF9fc2V0X2Vycm5vCiBFTkQobWtkaXIpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL21rZGlyYXQuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvbWtkaXJhdC5TCmluZGV4IDUyZjBiZTMuLmRhNTgzY2EgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvbWtkaXJhdC5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvbWtkaXJhdC5TCkBAIC0xLDE0ICsxLDE1IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+Ci0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CiAKIEVOVFJZKG1rZGlyYXQpCi0gICAgLnNhdmUgICB7cjQsIHI3fQotICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdiAgICAgaXAsIHI3CiAgICAgbGRyICAgICByNywgPV9fTlJfbWtkaXJhdAogICAgIHN3aSAgICAgIzAKLSAgICBsZG1mZCAgIHNwISwge3I0LCByN30KLSAgICBtb3ZzICAgIHIwLCByMAotICAgIGJ4cGwgICAgbHIKLSAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICBtb3YgICAgIHI3LCBpcAorICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKKyAgICBieGxzICAgIGxyCisgICAgbmVnICAgICByMCwgcjAKKyAgICBiICAgICAgIF9fc2V0X2Vycm5vCiBFTkQobWtkaXJhdCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvbWtub2QuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvbWtub2QuUwppbmRleCBhYzZkOTc2Li4xNTcxNmQzIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL21rbm9kLlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9ta25vZC5TCkBAIC0xLDE0ICsxLDE1IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+Ci0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CiAKIEVOVFJZKG1rbm9kKQotICAgIC5zYXZlICAge3I0LCByN30KLSAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBtb3YgICAgIGlwLCByNwogICAgIGxkciAgICAgcjcsID1fX05SX21rbm9kCiAgICAgc3dpICAgICAjMAotICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQotICAgIG1vdnMgICAgcjAsIHIwCi0gICAgYnhwbCAgICBscgotICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIG1vdiAgICAgcjcsIGlwCisgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQorICAgIGJ4bHMgICAgbHIKKyAgICBuZWcgICAgIHIwLCByMAorICAgIGIgICAgICAgX19zZXRfZXJybm8KIEVORChta25vZCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvbWxvY2suUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvbWxvY2suUwppbmRleCBhZDE0MGQxLi5kMDBlYTAxIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL21sb2NrLlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9tbG9jay5TCkBAIC0xLDE0ICsxLDE1IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+Ci0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CiAKIEVOVFJZKG1sb2NrKQotICAgIC5zYXZlICAge3I0LCByN30KLSAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBtb3YgICAgIGlwLCByNwogICAgIGxkciAgICAgcjcsID1fX05SX21sb2NrCiAgICAgc3dpICAgICAjMAotICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQotICAgIG1vdnMgICAgcjAsIHIwCi0gICAgYnhwbCAgICBscgotICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIG1vdiAgICAgcjcsIGlwCisgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQorICAgIGJ4bHMgICAgbHIKKyAgICBuZWcgICAgIHIwLCByMAorICAgIGIgICAgICAgX19zZXRfZXJybm8KIEVORChtbG9jaykKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvbWxvY2thbGwuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvbWxvY2thbGwuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NDk0MGYxCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9tbG9ja2FsbC5TCkBAIC0wLDAgKzEsMTUgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KKworRU5UUlkobWxvY2thbGwpCisgICAgbW92ICAgICBpcCwgcjcKKyAgICBsZHIgICAgIHI3LCA9X19OUl9tbG9ja2FsbAorICAgIHN3aSAgICAgIzAKKyAgICBtb3YgICAgIHI3LCBpcAorICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKKyAgICBieGxzICAgIGxyCisgICAgbmVnICAgICByMCwgcjAKKyAgICBiICAgICAgIF9fc2V0X2Vycm5vCitFTkQobWxvY2thbGwpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL21vdW50LlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL21vdW50LlMKaW5kZXggZWIxNjI0Yy4uYjJlZjZmOCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9tb3VudC5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvbW91bnQuUwpAQCAtMSw2ICsxLDcgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KIAogRU5UUlkobW91bnQpCiAgICAgbW92ICAgICBpcCwgc3AKQEAgLTEwLDcgKzExLDggQEAKICAgICBsZHIgICAgIHI3LCA9X19OUl9tb3VudAogICAgIHN3aSAgICAgIzAKICAgICBsZG1mZCAgIHNwISwge3I0LCByNSwgcjYsIHI3fQotICAgIG1vdnMgICAgcjAsIHIwCi0gICAgYnhwbCAgICBscgotICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKKyAgICBieGxzICAgIGxyCisgICAgbmVnICAgICByMCwgcjAKKyAgICBiICAgICAgIF9fc2V0X2Vycm5vCiBFTkQobW91bnQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL21wcm90ZWN0LlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL21wcm90ZWN0LlMKaW5kZXggMzlhZTM1My4uZTUyNThmZCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9tcHJvdGVjdC5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvbXByb3RlY3QuUwpAQCAtMSwxNCArMSwxNSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgogCiBFTlRSWShtcHJvdGVjdCkKLSAgICAuc2F2ZSAgIHtyNCwgcjd9Ci0gICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92ICAgICBpcCwgcjcKICAgICBsZHIgICAgIHI3LCA9X19OUl9tcHJvdGVjdAogICAgIHN3aSAgICAgIzAKLSAgICBsZG1mZCAgIHNwISwge3I0LCByN30KLSAgICBtb3ZzICAgIHIwLCByMAotICAgIGJ4cGwgICAgbHIKLSAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICBtb3YgICAgIHI3LCBpcAorICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKKyAgICBieGxzICAgIGxyCisgICAgbmVnICAgICByMCwgcjAKKyAgICBiICAgICAgIF9fc2V0X2Vycm5vCiBFTkQobXByb3RlY3QpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL21yZW1hcC5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9tcmVtYXAuUwppbmRleCA5MThmM2I3Li4wNGJhMmJjIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL21yZW1hcC5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvbXJlbWFwLlMKQEAgLTEsMTQgKzEsMTUgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KIAogRU5UUlkobXJlbWFwKQotICAgIC5zYXZlICAge3I0LCByN30KLSAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBtb3YgICAgIGlwLCByNwogICAgIGxkciAgICAgcjcsID1fX05SX21yZW1hcAogICAgIHN3aSAgICAgIzAKLSAgICBsZG1mZCAgIHNwISwge3I0LCByN30KLSAgICBtb3ZzICAgIHIwLCByMAotICAgIGJ4cGwgICAgbHIKLSAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICBtb3YgICAgIHI3LCBpcAorICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKKyAgICBieGxzICAgIGxyCisgICAgbmVnICAgICByMCwgcjAKKyAgICBiICAgICAgIF9fc2V0X2Vycm5vCiBFTkQobXJlbWFwKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9tc3luYy5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9tc3luYy5TCmluZGV4IDJhNTkyMmMuLmJjZDg5MmQgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvbXN5bmMuUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL21zeW5jLlMKQEAgLTEsMTQgKzEsMTUgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KIAogRU5UUlkobXN5bmMpCi0gICAgLnNhdmUgICB7cjQsIHI3fQotICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdiAgICAgaXAsIHI3CiAgICAgbGRyICAgICByNywgPV9fTlJfbXN5bmMKICAgICBzd2kgICAgICMwCi0gICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9Ci0gICAgbW92cyAgICByMCwgcjAKLSAgICBieHBsICAgIGxyCi0gICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgbW92ICAgICByNywgaXAKKyAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCisgICAgYnhscyAgICBscgorICAgIG5lZyAgICAgcjAsIHIwCisgICAgYiAgICAgICBfX3NldF9lcnJubwogRU5EKG1zeW5jKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9tdW5sb2NrLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL211bmxvY2suUwppbmRleCA1YTAyYWFmLi5kZWVkNjk3IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL211bmxvY2suUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL211bmxvY2suUwpAQCAtMSwxNCArMSwxNSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgogCiBFTlRSWShtdW5sb2NrKQotICAgIC5zYXZlICAge3I0LCByN30KLSAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBtb3YgICAgIGlwLCByNwogICAgIGxkciAgICAgcjcsID1fX05SX211bmxvY2sKICAgICBzd2kgICAgICMwCi0gICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9Ci0gICAgbW92cyAgICByMCwgcjAKLSAgICBieHBsICAgIGxyCi0gICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgbW92ICAgICByNywgaXAKKyAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCisgICAgYnhscyAgICBscgorICAgIG5lZyAgICAgcjAsIHIwCisgICAgYiAgICAgICBfX3NldF9lcnJubwogRU5EKG11bmxvY2spCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL211bmxvY2thbGwuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvbXVubG9ja2FsbC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4ODgxZjQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL211bmxvY2thbGwuUwpAQCAtMCwwICsxLDE1IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+CisKK0VOVFJZKG11bmxvY2thbGwpCisgICAgbW92ICAgICBpcCwgcjcKKyAgICBsZHIgICAgIHI3LCA9X19OUl9tdW5sb2NrYWxsCisgICAgc3dpICAgICAjMAorICAgIG1vdiAgICAgcjcsIGlwCisgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQorICAgIGJ4bHMgICAgbHIKKyAgICBuZWcgICAgIHIwLCByMAorICAgIGIgICAgICAgX19zZXRfZXJybm8KK0VORChtdW5sb2NrYWxsKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9tdW5tYXAuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvbXVubWFwLlMKaW5kZXggNmJiOGRkOC4uM2Y1MmRhNCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9tdW5tYXAuUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL211bm1hcC5TCkBAIC0xLDE0ICsxLDE1IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+Ci0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CiAKIEVOVFJZKG11bm1hcCkKLSAgICAuc2F2ZSAgIHtyNCwgcjd9Ci0gICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92ICAgICBpcCwgcjcKICAgICBsZHIgICAgIHI3LCA9X19OUl9tdW5tYXAKICAgICBzd2kgICAgICMwCi0gICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9Ci0gICAgbW92cyAgICByMCwgcjAKLSAgICBieHBsICAgIGxyCi0gICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgbW92ICAgICByNywgaXAKKyAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCisgICAgYnhscyAgICBscgorICAgIG5lZyAgICAgcjAsIHIwCisgICAgYiAgICAgICBfX3NldF9lcnJubwogRU5EKG11bm1hcCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvbmFub3NsZWVwLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL25hbm9zbGVlcC5TCmluZGV4IGFmMzZjZWQuLmRlODI2ZWEgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvbmFub3NsZWVwLlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9uYW5vc2xlZXAuUwpAQCAtMSwxNCArMSwxNSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgogCiBFTlRSWShuYW5vc2xlZXApCi0gICAgLnNhdmUgICB7cjQsIHI3fQotICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdiAgICAgaXAsIHI3CiAgICAgbGRyICAgICByNywgPV9fTlJfbmFub3NsZWVwCiAgICAgc3dpICAgICAjMAotICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQotICAgIG1vdnMgICAgcjAsIHIwCi0gICAgYnhwbCAgICBscgotICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIG1vdiAgICAgcjcsIGlwCisgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQorICAgIGJ4bHMgICAgbHIKKyAgICBuZWcgICAgIHIwLCByMAorICAgIGIgICAgICAgX19zZXRfZXJybm8KIEVORChuYW5vc2xlZXApCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3BhdXNlLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3BhdXNlLlMKaW5kZXggZTY0ZjRmMy4uZGU1NDgzNCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9wYXVzZS5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvcGF1c2UuUwpAQCAtMSwxNCArMSwxNSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgogCiBFTlRSWShwYXVzZSkKLSAgICAuc2F2ZSAgIHtyNCwgcjd9Ci0gICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92ICAgICBpcCwgcjcKICAgICBsZHIgICAgIHI3LCA9X19OUl9wYXVzZQogICAgIHN3aSAgICAgIzAKLSAgICBsZG1mZCAgIHNwISwge3I0LCByN30KLSAgICBtb3ZzICAgIHIwLCByMAotICAgIGJ4cGwgICAgbHIKLSAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICBtb3YgICAgIHI3LCBpcAorICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKKyAgICBieGxzICAgIGxyCisgICAgbmVnICAgICByMCwgcjAKKyAgICBiICAgICAgIF9fc2V0X2Vycm5vCiBFTkQocGF1c2UpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3BlcmZfZXZlbnRfb3Blbi5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9wZXJmX2V2ZW50X29wZW4uUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Yjk5N2U2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9wZXJmX2V2ZW50X29wZW4uUwpAQCAtMCwwICsxLDE4IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+CisKK0VOVFJZKHBlcmZfZXZlbnRfb3BlbikKKyAgICBtb3YgICAgIGlwLCBzcAorICAgIC5zYXZlICAge3I0LCByNSwgcjYsIHI3fQorICAgIHN0bWZkICAgc3AhLCB7cjQsIHI1LCByNiwgcjd9CisgICAgbGRtZmQgICBpcCwge3I0LCByNSwgcjZ9CisgICAgbGRyICAgICByNywgPV9fTlJfcGVyZl9ldmVudF9vcGVuCisgICAgc3dpICAgICAjMAorICAgIGxkbWZkICAgc3AhLCB7cjQsIHI1LCByNiwgcjd9CisgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQorICAgIGJ4bHMgICAgbHIKKyAgICBuZWcgICAgIHIwLCByMAorICAgIGIgICAgICAgX19zZXRfZXJybm8KK0VORChwZXJmX2V2ZW50X29wZW4pCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3BlcnNvbmFsaXR5LlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3BlcnNvbmFsaXR5LlMKaW5kZXggMTdhYzY4Ni4uZTRlOGU0MCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9wZXJzb25hbGl0eS5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvcGVyc29uYWxpdHkuUwpAQCAtMSwxNCArMSwxNSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgogCiBFTlRSWShwZXJzb25hbGl0eSkKLSAgICAuc2F2ZSAgIHtyNCwgcjd9Ci0gICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92ICAgICBpcCwgcjcKICAgICBsZHIgICAgIHI3LCA9X19OUl9wZXJzb25hbGl0eQogICAgIHN3aSAgICAgIzAKLSAgICBsZG1mZCAgIHNwISwge3I0LCByN30KLSAgICBtb3ZzICAgIHIwLCByMAotICAgIGJ4cGwgICAgbHIKLSAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICBtb3YgICAgIHI3LCBpcAorICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKKyAgICBieGxzICAgIGxyCisgICAgbmVnICAgICByMCwgcjAKKyAgICBiICAgICAgIF9fc2V0X2Vycm5vCiBFTkQocGVyc29uYWxpdHkpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3BpcGUuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvcGlwZS5TCmluZGV4IDM5Njg3MDMuLjYyY2M5YzcgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvcGlwZS5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvcGlwZS5TCkBAIC0xLDE0ICsxLDE1IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+Ci0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CiAKIEVOVFJZKHBpcGUpCi0gICAgLnNhdmUgICB7cjQsIHI3fQotICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdiAgICAgaXAsIHI3CiAgICAgbGRyICAgICByNywgPV9fTlJfcGlwZQogICAgIHN3aSAgICAgIzAKLSAgICBsZG1mZCAgIHNwISwge3I0LCByN30KLSAgICBtb3ZzICAgIHIwLCByMAotICAgIGJ4cGwgICAgbHIKLSAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICBtb3YgICAgIHI3LCBpcAorICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKKyAgICBieGxzICAgIGxyCisgICAgbmVnICAgICByMCwgcjAKKyAgICBiICAgICAgIF9fc2V0X2Vycm5vCiBFTkQocGlwZSkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvcGlwZTIuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvcGlwZTIuUwppbmRleCBkYTJlY2JhLi5iYjcyMjg5IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3BpcGUyLlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9waXBlMi5TCkBAIC0xLDE0ICsxLDE1IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+Ci0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CiAKIEVOVFJZKHBpcGUyKQotICAgIC5zYXZlICAge3I0LCByN30KLSAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBtb3YgICAgIGlwLCByNwogICAgIGxkciAgICAgcjcsID1fX05SX3BpcGUyCiAgICAgc3dpICAgICAjMAotICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQotICAgIG1vdnMgICAgcjAsIHIwCi0gICAgYnhwbCAgICBscgotICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIG1vdiAgICAgcjcsIGlwCisgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQorICAgIGJ4bHMgICAgbHIKKyAgICBuZWcgICAgIHIwLCByMAorICAgIGIgICAgICAgX19zZXRfZXJybm8KIEVORChwaXBlMikKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvcG9sbC5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9wb2xsLlMKaW5kZXggNGQzNDVlYS4uNzFkNGM4MSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9wb2xsLlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9wb2xsLlMKQEAgLTEsMTQgKzEsMTUgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KIAogRU5UUlkocG9sbCkKLSAgICAuc2F2ZSAgIHtyNCwgcjd9Ci0gICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92ICAgICBpcCwgcjcKICAgICBsZHIgICAgIHI3LCA9X19OUl9wb2xsCiAgICAgc3dpICAgICAjMAotICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQotICAgIG1vdnMgICAgcjAsIHIwCi0gICAgYnhwbCAgICBscgotICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIG1vdiAgICAgcjcsIGlwCisgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQorICAgIGJ4bHMgICAgbHIKKyAgICBuZWcgICAgIHIwLCByMAorICAgIGIgICAgICAgX19zZXRfZXJybm8KIEVORChwb2xsKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9wcmN0bC5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9wcmN0bC5TCmluZGV4IDAwOWRjNTQuLmFlMzJiYTUgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvcHJjdGwuUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3ByY3RsLlMKQEAgLTEsNiArMSw3IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+Ci0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CiAKIEVOVFJZKHByY3RsKQogICAgIG1vdiAgICAgaXAsIHNwCkBAIC0xMCw3ICsxMSw4IEBACiAgICAgbGRyICAgICByNywgPV9fTlJfcHJjdGwKICAgICBzd2kgICAgICMwCiAgICAgbGRtZmQgICBzcCEsIHtyNCwgcjUsIHI2LCByN30KLSAgICBtb3ZzICAgIHIwLCByMAotICAgIGJ4cGwgICAgbHIKLSAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCisgICAgYnhscyAgICBscgorICAgIG5lZyAgICAgcjAsIHIwCisgICAgYiAgICAgICBfX3NldF9lcnJubwogRU5EKHByY3RsKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9wcmVhZDY0LlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3ByZWFkNjQuUwppbmRleCAwMDkwZmQzLi45NjI2Njk1IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3ByZWFkNjQuUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3ByZWFkNjQuUwpAQCAtMSw2ICsxLDcgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KIAogRU5UUlkocHJlYWQ2NCkKICAgICBtb3YgICAgIGlwLCBzcApAQCAtMTAsNyArMTEsOCBAQAogICAgIGxkciAgICAgcjcsID1fX05SX3ByZWFkNjQKICAgICBzd2kgICAgICMwCiAgICAgbGRtZmQgICBzcCEsIHtyNCwgcjUsIHI2LCByN30KLSAgICBtb3ZzICAgIHIwLCByMAotICAgIGJ4cGwgICAgbHIKLSAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCisgICAgYnhscyAgICBscgorICAgIG5lZyAgICAgcjAsIHIwCisgICAgYiAgICAgICBfX3NldF9lcnJubwogRU5EKHByZWFkNjQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3B3cml0ZTY0LlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3B3cml0ZTY0LlMKaW5kZXggNDQ0ZDc4Zi4uZTdkYzA5YyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9wd3JpdGU2NC5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvcHdyaXRlNjQuUwpAQCAtMSw2ICsxLDcgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KIAogRU5UUlkocHdyaXRlNjQpCiAgICAgbW92ICAgICBpcCwgc3AKQEAgLTEwLDcgKzExLDggQEAKICAgICBsZHIgICAgIHI3LCA9X19OUl9wd3JpdGU2NAogICAgIHN3aSAgICAgIzAKICAgICBsZG1mZCAgIHNwISwge3I0LCByNSwgcjYsIHI3fQotICAgIG1vdnMgICAgcjAsIHIwCi0gICAgYnhwbCAgICBscgotICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKKyAgICBieGxzICAgIGxyCisgICAgbmVnICAgICByMCwgcjAKKyAgICBiICAgICAgIF9fc2V0X2Vycm5vCiBFTkQocHdyaXRlNjQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3JlYWQuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvcmVhZC5TCmluZGV4IGMwNjIzODguLjJiMTIzMDUgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvcmVhZC5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvcmVhZC5TCkBAIC0xLDE0ICsxLDE1IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+Ci0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CiAKIEVOVFJZKHJlYWQpCi0gICAgLnNhdmUgICB7cjQsIHI3fQotICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdiAgICAgaXAsIHI3CiAgICAgbGRyICAgICByNywgPV9fTlJfcmVhZAogICAgIHN3aSAgICAgIzAKLSAgICBsZG1mZCAgIHNwISwge3I0LCByN30KLSAgICBtb3ZzICAgIHIwLCByMAotICAgIGJ4cGwgICAgbHIKLSAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICBtb3YgICAgIHI3LCBpcAorICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKKyAgICBieGxzICAgIGxyCisgICAgbmVnICAgICByMCwgcjAKKyAgICBiICAgICAgIF9fc2V0X2Vycm5vCiBFTkQocmVhZCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvcmVhZGFoZWFkLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3JlYWRhaGVhZC5TCmluZGV4IDZhYTgyNjUuLjdlZDJkZGEgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvcmVhZGFoZWFkLlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9yZWFkYWhlYWQuUwpAQCAtMSw2ICsxLDcgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KIAogRU5UUlkocmVhZGFoZWFkKQogICAgIG1vdiAgICAgaXAsIHNwCkBAIC0xMCw3ICsxMSw4IEBACiAgICAgbGRyICAgICByNywgPV9fTlJfcmVhZGFoZWFkCiAgICAgc3dpICAgICAjMAogICAgIGxkbWZkICAgc3AhLCB7cjQsIHI1LCByNiwgcjd9Ci0gICAgbW92cyAgICByMCwgcjAKLSAgICBieHBsICAgIGxyCi0gICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQorICAgIGJ4bHMgICAgbHIKKyAgICBuZWcgICAgIHIwLCByMAorICAgIGIgICAgICAgX19zZXRfZXJybm8KIEVORChyZWFkYWhlYWQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3JlYWRsaW5rLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3JlYWRsaW5rLlMKaW5kZXggNzYwMmU2MS4uMTA4NWRiNiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9yZWFkbGluay5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvcmVhZGxpbmsuUwpAQCAtMSwxNCArMSwxNSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgogCiBFTlRSWShyZWFkbGluaykKLSAgICAuc2F2ZSAgIHtyNCwgcjd9Ci0gICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92ICAgICBpcCwgcjcKICAgICBsZHIgICAgIHI3LCA9X19OUl9yZWFkbGluawogICAgIHN3aSAgICAgIzAKLSAgICBsZG1mZCAgIHNwISwge3I0LCByN30KLSAgICBtb3ZzICAgIHIwLCByMAotICAgIGJ4cGwgICAgbHIKLSAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICBtb3YgICAgIHI3LCBpcAorICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKKyAgICBieGxzICAgIGxyCisgICAgbmVnICAgICByMCwgcjAKKyAgICBiICAgICAgIF9fc2V0X2Vycm5vCiBFTkQocmVhZGxpbmspCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3JlYWR2LlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3JlYWR2LlMKaW5kZXggZTcxN2U2MS4uNzg1N2M0MyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9yZWFkdi5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvcmVhZHYuUwpAQCAtMSwxNCArMSwxNSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgogCiBFTlRSWShyZWFkdikKLSAgICAuc2F2ZSAgIHtyNCwgcjd9Ci0gICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92ICAgICBpcCwgcjcKICAgICBsZHIgICAgIHI3LCA9X19OUl9yZWFkdgogICAgIHN3aSAgICAgIzAKLSAgICBsZG1mZCAgIHNwISwge3I0LCByN30KLSAgICBtb3ZzICAgIHIwLCByMAotICAgIGJ4cGwgICAgbHIKLSAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICBtb3YgICAgIHI3LCBpcAorICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKKyAgICBieGxzICAgIGxyCisgICAgbmVnICAgICByMCwgcjAKKyAgICBiICAgICAgIF9fc2V0X2Vycm5vCiBFTkQocmVhZHYpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3JlY3Zmcm9tLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3JlY3Zmcm9tLlMKaW5kZXggZGY2MzAyZi4uYzEwNWE0YSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9yZWN2ZnJvbS5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvcmVjdmZyb20uUwpAQCAtMSw2ICsxLDcgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KIAogRU5UUlkocmVjdmZyb20pCiAgICAgbW92ICAgICBpcCwgc3AKQEAgLTEwLDcgKzExLDggQEAKICAgICBsZHIgICAgIHI3LCA9X19OUl9yZWN2ZnJvbQogICAgIHN3aSAgICAgIzAKICAgICBsZG1mZCAgIHNwISwge3I0LCByNSwgcjYsIHI3fQotICAgIG1vdnMgICAgcjAsIHIwCi0gICAgYnhwbCAgICBscgotICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKKyAgICBieGxzICAgIGxyCisgICAgbmVnICAgICByMCwgcjAKKyAgICBiICAgICAgIF9fc2V0X2Vycm5vCiBFTkQocmVjdmZyb20pCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3JlY3Ztc2cuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvcmVjdm1zZy5TCmluZGV4IDVjMTY4ZGMuLmY4YWQ3MDYgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvcmVjdm1zZy5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvcmVjdm1zZy5TCkBAIC0xLDE0ICsxLDE1IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+Ci0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CiAKIEVOVFJZKHJlY3Ztc2cpCi0gICAgLnNhdmUgICB7cjQsIHI3fQotICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdiAgICAgaXAsIHI3CiAgICAgbGRyICAgICByNywgPV9fTlJfcmVjdm1zZwogICAgIHN3aSAgICAgIzAKLSAgICBsZG1mZCAgIHNwISwge3I0LCByN30KLSAgICBtb3ZzICAgIHIwLCByMAotICAgIGJ4cGwgICAgbHIKLSAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICBtb3YgICAgIHI3LCBpcAorICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKKyAgICBieGxzICAgIGxyCisgICAgbmVnICAgICByMCwgcjAKKyAgICBiICAgICAgIF9fc2V0X2Vycm5vCiBFTkQocmVjdm1zZykKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvcmVtb3ZleGF0dHIuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvcmVtb3ZleGF0dHIuUwppbmRleCAxYTQ0Y2FmLi4yZGE5YmU4IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3JlbW92ZXhhdHRyLlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9yZW1vdmV4YXR0ci5TCkBAIC0xLDE0ICsxLDE1IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+Ci0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CiAKIEVOVFJZKHJlbW92ZXhhdHRyKQotICAgIC5zYXZlICAge3I0LCByN30KLSAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBtb3YgICAgIGlwLCByNwogICAgIGxkciAgICAgcjcsID1fX05SX3JlbW92ZXhhdHRyCiAgICAgc3dpICAgICAjMAotICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQotICAgIG1vdnMgICAgcjAsIHIwCi0gICAgYnhwbCAgICBscgotICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIG1vdiAgICAgcjcsIGlwCisgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQorICAgIGJ4bHMgICAgbHIKKyAgICBuZWcgICAgIHIwLCByMAorICAgIGIgICAgICAgX19zZXRfZXJybm8KIEVORChyZW1vdmV4YXR0cikKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvcmVuYW1lLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3JlbmFtZS5TCmluZGV4IDkzMGRkYjYuLjY1NDYyM2MgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvcmVuYW1lLlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9yZW5hbWUuUwpAQCAtMSwxNCArMSwxNSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgogCiBFTlRSWShyZW5hbWUpCi0gICAgLnNhdmUgICB7cjQsIHI3fQotICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdiAgICAgaXAsIHI3CiAgICAgbGRyICAgICByNywgPV9fTlJfcmVuYW1lCiAgICAgc3dpICAgICAjMAotICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQotICAgIG1vdnMgICAgcjAsIHIwCi0gICAgYnhwbCAgICBscgotICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIG1vdiAgICAgcjcsIGlwCisgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQorICAgIGJ4bHMgICAgbHIKKyAgICBuZWcgICAgIHIwLCByMAorICAgIGIgICAgICAgX19zZXRfZXJybm8KIEVORChyZW5hbWUpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3JlbmFtZWF0LlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3JlbmFtZWF0LlMKaW5kZXggYTEzYzRlZS4uOWVjNTkzNyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9yZW5hbWVhdC5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvcmVuYW1lYXQuUwpAQCAtMSwxNCArMSwxNSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgogCiBFTlRSWShyZW5hbWVhdCkKLSAgICAuc2F2ZSAgIHtyNCwgcjd9Ci0gICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92ICAgICBpcCwgcjcKICAgICBsZHIgICAgIHI3LCA9X19OUl9yZW5hbWVhdAogICAgIHN3aSAgICAgIzAKLSAgICBsZG1mZCAgIHNwISwge3I0LCByN30KLSAgICBtb3ZzICAgIHIwLCByMAotICAgIGJ4cGwgICAgbHIKLSAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICBtb3YgICAgIHI3LCBpcAorICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKKyAgICBieGxzICAgIGxyCisgICAgbmVnICAgICByMCwgcjAKKyAgICBiICAgICAgIF9fc2V0X2Vycm5vCiBFTkQocmVuYW1lYXQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3JtZGlyLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3JtZGlyLlMKaW5kZXggMDlhOTU2Zi4uODk5ODVlYyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9ybWRpci5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvcm1kaXIuUwpAQCAtMSwxNCArMSwxNSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgogCiBFTlRSWShybWRpcikKLSAgICAuc2F2ZSAgIHtyNCwgcjd9Ci0gICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92ICAgICBpcCwgcjcKICAgICBsZHIgICAgIHI3LCA9X19OUl9ybWRpcgogICAgIHN3aSAgICAgIzAKLSAgICBsZG1mZCAgIHNwISwge3I0LCByN30KLSAgICBtb3ZzICAgIHIwLCByMAotICAgIGJ4cGwgICAgbHIKLSAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICBtb3YgICAgIHI3LCBpcAorICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKKyAgICBieGxzICAgIGxyCisgICAgbmVnICAgICByMCwgcjAKKyAgICBiICAgICAgIF9fc2V0X2Vycm5vCiBFTkQocm1kaXIpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NjaGVkX2dldF9wcmlvcml0eV9tYXguUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2NoZWRfZ2V0X3ByaW9yaXR5X21heC5TCmluZGV4IDJkZWEzYjcuLmQ5MGFmZTcgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2NoZWRfZ2V0X3ByaW9yaXR5X21heC5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2NoZWRfZ2V0X3ByaW9yaXR5X21heC5TCkBAIC0xLDE0ICsxLDE1IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+Ci0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CiAKIEVOVFJZKHNjaGVkX2dldF9wcmlvcml0eV9tYXgpCi0gICAgLnNhdmUgICB7cjQsIHI3fQotICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdiAgICAgaXAsIHI3CiAgICAgbGRyICAgICByNywgPV9fTlJfc2NoZWRfZ2V0X3ByaW9yaXR5X21heAogICAgIHN3aSAgICAgIzAKLSAgICBsZG1mZCAgIHNwISwge3I0LCByN30KLSAgICBtb3ZzICAgIHIwLCByMAotICAgIGJ4cGwgICAgbHIKLSAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICBtb3YgICAgIHI3LCBpcAorICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKKyAgICBieGxzICAgIGxyCisgICAgbmVnICAgICByMCwgcjAKKyAgICBiICAgICAgIF9fc2V0X2Vycm5vCiBFTkQoc2NoZWRfZ2V0X3ByaW9yaXR5X21heCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2NoZWRfZ2V0X3ByaW9yaXR5X21pbi5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zY2hlZF9nZXRfcHJpb3JpdHlfbWluLlMKaW5kZXggZGU4Yjg3OC4uNGZiZGRmZSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zY2hlZF9nZXRfcHJpb3JpdHlfbWluLlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zY2hlZF9nZXRfcHJpb3JpdHlfbWluLlMKQEAgLTEsMTQgKzEsMTUgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KIAogRU5UUlkoc2NoZWRfZ2V0X3ByaW9yaXR5X21pbikKLSAgICAuc2F2ZSAgIHtyNCwgcjd9Ci0gICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92ICAgICBpcCwgcjcKICAgICBsZHIgICAgIHI3LCA9X19OUl9zY2hlZF9nZXRfcHJpb3JpdHlfbWluCiAgICAgc3dpICAgICAjMAotICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQotICAgIG1vdnMgICAgcjAsIHIwCi0gICAgYnhwbCAgICBscgotICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIG1vdiAgICAgcjcsIGlwCisgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQorICAgIGJ4bHMgICAgbHIKKyAgICBuZWcgICAgIHIwLCByMAorICAgIGIgICAgICAgX19zZXRfZXJybm8KIEVORChzY2hlZF9nZXRfcHJpb3JpdHlfbWluKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zY2hlZF9nZXRwYXJhbS5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zY2hlZF9nZXRwYXJhbS5TCmluZGV4IDY0MzQyMTcuLjFkOTQwNmEgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2NoZWRfZ2V0cGFyYW0uUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NjaGVkX2dldHBhcmFtLlMKQEAgLTEsMTQgKzEsMTUgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KIAogRU5UUlkoc2NoZWRfZ2V0cGFyYW0pCi0gICAgLnNhdmUgICB7cjQsIHI3fQotICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdiAgICAgaXAsIHI3CiAgICAgbGRyICAgICByNywgPV9fTlJfc2NoZWRfZ2V0cGFyYW0KICAgICBzd2kgICAgICMwCi0gICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9Ci0gICAgbW92cyAgICByMCwgcjAKLSAgICBieHBsICAgIGxyCi0gICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgbW92ICAgICByNywgaXAKKyAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCisgICAgYnhscyAgICBscgorICAgIG5lZyAgICAgcjAsIHIwCisgICAgYiAgICAgICBfX3NldF9lcnJubwogRU5EKHNjaGVkX2dldHBhcmFtKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zY2hlZF9nZXRzY2hlZHVsZXIuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2NoZWRfZ2V0c2NoZWR1bGVyLlMKaW5kZXggOGU0NWNlNi4uZjM0ZmI5OCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zY2hlZF9nZXRzY2hlZHVsZXIuUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NjaGVkX2dldHNjaGVkdWxlci5TCkBAIC0xLDE0ICsxLDE1IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+Ci0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CiAKIEVOVFJZKHNjaGVkX2dldHNjaGVkdWxlcikKLSAgICAuc2F2ZSAgIHtyNCwgcjd9Ci0gICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92ICAgICBpcCwgcjcKICAgICBsZHIgICAgIHI3LCA9X19OUl9zY2hlZF9nZXRzY2hlZHVsZXIKICAgICBzd2kgICAgICMwCi0gICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9Ci0gICAgbW92cyAgICByMCwgcjAKLSAgICBieHBsICAgIGxyCi0gICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgbW92ICAgICByNywgaXAKKyAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCisgICAgYnhscyAgICBscgorICAgIG5lZyAgICAgcjAsIHIwCisgICAgYiAgICAgICBfX3NldF9lcnJubwogRU5EKHNjaGVkX2dldHNjaGVkdWxlcikKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2NoZWRfcnJfZ2V0X2ludGVydmFsLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NjaGVkX3JyX2dldF9pbnRlcnZhbC5TCmluZGV4IGU4OGQyNmUuLmNiZDYyODggMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2NoZWRfcnJfZ2V0X2ludGVydmFsLlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zY2hlZF9ycl9nZXRfaW50ZXJ2YWwuUwpAQCAtMSwxNCArMSwxNSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgogCiBFTlRSWShzY2hlZF9ycl9nZXRfaW50ZXJ2YWwpCi0gICAgLnNhdmUgICB7cjQsIHI3fQotICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdiAgICAgaXAsIHI3CiAgICAgbGRyICAgICByNywgPV9fTlJfc2NoZWRfcnJfZ2V0X2ludGVydmFsCiAgICAgc3dpICAgICAjMAotICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQotICAgIG1vdnMgICAgcjAsIHIwCi0gICAgYnhwbCAgICBscgotICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIG1vdiAgICAgcjcsIGlwCisgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQorICAgIGJ4bHMgICAgbHIKKyAgICBuZWcgICAgIHIwLCByMAorICAgIGIgICAgICAgX19zZXRfZXJybm8KIEVORChzY2hlZF9ycl9nZXRfaW50ZXJ2YWwpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NjaGVkX3NldGFmZmluaXR5LlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NjaGVkX3NldGFmZmluaXR5LlMKaW5kZXggYjlkZDI5OS4uMmE3MThlYSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zY2hlZF9zZXRhZmZpbml0eS5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2NoZWRfc2V0YWZmaW5pdHkuUwpAQCAtMSwxNCArMSwxNSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgogCiBFTlRSWShzY2hlZF9zZXRhZmZpbml0eSkKLSAgICAuc2F2ZSAgIHtyNCwgcjd9Ci0gICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92ICAgICBpcCwgcjcKICAgICBsZHIgICAgIHI3LCA9X19OUl9zY2hlZF9zZXRhZmZpbml0eQogICAgIHN3aSAgICAgIzAKLSAgICBsZG1mZCAgIHNwISwge3I0LCByN30KLSAgICBtb3ZzICAgIHIwLCByMAotICAgIGJ4cGwgICAgbHIKLSAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICBtb3YgICAgIHI3LCBpcAorICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKKyAgICBieGxzICAgIGxyCisgICAgbmVnICAgICByMCwgcjAKKyAgICBiICAgICAgIF9fc2V0X2Vycm5vCiBFTkQoc2NoZWRfc2V0YWZmaW5pdHkpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NjaGVkX3NldHBhcmFtLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NjaGVkX3NldHBhcmFtLlMKaW5kZXggNzNkNmFiNi4uZTViM2ZlNiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zY2hlZF9zZXRwYXJhbS5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2NoZWRfc2V0cGFyYW0uUwpAQCAtMSwxNCArMSwxNSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgogCiBFTlRSWShzY2hlZF9zZXRwYXJhbSkKLSAgICAuc2F2ZSAgIHtyNCwgcjd9Ci0gICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92ICAgICBpcCwgcjcKICAgICBsZHIgICAgIHI3LCA9X19OUl9zY2hlZF9zZXRwYXJhbQogICAgIHN3aSAgICAgIzAKLSAgICBsZG1mZCAgIHNwISwge3I0LCByN30KLSAgICBtb3ZzICAgIHIwLCByMAotICAgIGJ4cGwgICAgbHIKLSAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICBtb3YgICAgIHI3LCBpcAorICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKKyAgICBieGxzICAgIGxyCisgICAgbmVnICAgICByMCwgcjAKKyAgICBiICAgICAgIF9fc2V0X2Vycm5vCiBFTkQoc2NoZWRfc2V0cGFyYW0pCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NjaGVkX3NldHNjaGVkdWxlci5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zY2hlZF9zZXRzY2hlZHVsZXIuUwppbmRleCAzM2MyOGFiLi4yODdjMDhkIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NjaGVkX3NldHNjaGVkdWxlci5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2NoZWRfc2V0c2NoZWR1bGVyLlMKQEAgLTEsMTQgKzEsMTUgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KIAogRU5UUlkoc2NoZWRfc2V0c2NoZWR1bGVyKQotICAgIC5zYXZlICAge3I0LCByN30KLSAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBtb3YgICAgIGlwLCByNwogICAgIGxkciAgICAgcjcsID1fX05SX3NjaGVkX3NldHNjaGVkdWxlcgogICAgIHN3aSAgICAgIzAKLSAgICBsZG1mZCAgIHNwISwge3I0LCByN30KLSAgICBtb3ZzICAgIHIwLCByMAotICAgIGJ4cGwgICAgbHIKLSAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICBtb3YgICAgIHI3LCBpcAorICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKKyAgICBieGxzICAgIGxyCisgICAgbmVnICAgICByMCwgcjAKKyAgICBiICAgICAgIF9fc2V0X2Vycm5vCiBFTkQoc2NoZWRfc2V0c2NoZWR1bGVyKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zY2hlZF95aWVsZC5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zY2hlZF95aWVsZC5TCmluZGV4IDcxNjI4YjMuLjc2NTJmZjEgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2NoZWRfeWllbGQuUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NjaGVkX3lpZWxkLlMKQEAgLTEsMTQgKzEsMTUgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KIAogRU5UUlkoc2NoZWRfeWllbGQpCi0gICAgLnNhdmUgICB7cjQsIHI3fQotICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdiAgICAgaXAsIHI3CiAgICAgbGRyICAgICByNywgPV9fTlJfc2NoZWRfeWllbGQKICAgICBzd2kgICAgICMwCi0gICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9Ci0gICAgbW92cyAgICByMCwgcjAKLSAgICBieHBsICAgIGxyCi0gICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgbW92ICAgICByNywgaXAKKyAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCisgICAgYnhscyAgICBscgorICAgIG5lZyAgICAgcjAsIHIwCisgICAgYiAgICAgICBfX3NldF9lcnJubwogRU5EKHNjaGVkX3lpZWxkKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zZWxlY3QuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2VsZWN0LlMKaW5kZXggZWRkNzdhMy4uMDlmYjUyYiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zZWxlY3QuUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NlbGVjdC5TCkBAIC0xLDYgKzEsNyBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgogCiBFTlRSWShzZWxlY3QpCiAgICAgbW92ICAgICBpcCwgc3AKQEAgLTEwLDcgKzExLDggQEAKICAgICBsZHIgICAgIHI3LCA9X19OUl9fbmV3c2VsZWN0CiAgICAgc3dpICAgICAjMAogICAgIGxkbWZkICAgc3AhLCB7cjQsIHI1LCByNiwgcjd9Ci0gICAgbW92cyAgICByMCwgcjAKLSAgICBieHBsICAgIGxyCi0gICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQorICAgIGJ4bHMgICAgbHIKKyAgICBuZWcgICAgIHIwLCByMAorICAgIGIgICAgICAgX19zZXRfZXJybm8KIEVORChzZWxlY3QpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NlbmRmaWxlLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NlbmRmaWxlLlMKaW5kZXggMjc5MGI0Yi4uZmI0YjM4YyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zZW5kZmlsZS5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2VuZGZpbGUuUwpAQCAtMSwxNCArMSwxNSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgogCiBFTlRSWShzZW5kZmlsZSkKLSAgICAuc2F2ZSAgIHtyNCwgcjd9Ci0gICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92ICAgICBpcCwgcjcKICAgICBsZHIgICAgIHI3LCA9X19OUl9zZW5kZmlsZQogICAgIHN3aSAgICAgIzAKLSAgICBsZG1mZCAgIHNwISwge3I0LCByN30KLSAgICBtb3ZzICAgIHIwLCByMAotICAgIGJ4cGwgICAgbHIKLSAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICBtb3YgICAgIHI3LCBpcAorICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKKyAgICBieGxzICAgIGxyCisgICAgbmVnICAgICByMCwgcjAKKyAgICBiICAgICAgIF9fc2V0X2Vycm5vCiBFTkQoc2VuZGZpbGUpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NlbmRtc2cuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2VuZG1zZy5TCmluZGV4IDk5YjU0NzkuLjIxYzAyMjMgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2VuZG1zZy5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2VuZG1zZy5TCkBAIC0xLDE0ICsxLDE1IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+Ci0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CiAKIEVOVFJZKHNlbmRtc2cpCi0gICAgLnNhdmUgICB7cjQsIHI3fQotICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdiAgICAgaXAsIHI3CiAgICAgbGRyICAgICByNywgPV9fTlJfc2VuZG1zZwogICAgIHN3aSAgICAgIzAKLSAgICBsZG1mZCAgIHNwISwge3I0LCByN30KLSAgICBtb3ZzICAgIHIwLCByMAotICAgIGJ4cGwgICAgbHIKLSAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICBtb3YgICAgIHI3LCBpcAorICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKKyAgICBieGxzICAgIGxyCisgICAgbmVnICAgICByMCwgcjAKKyAgICBiICAgICAgIF9fc2V0X2Vycm5vCiBFTkQoc2VuZG1zZykKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2VuZHRvLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NlbmR0by5TCmluZGV4IDMwMmJhOGEuLjdmNjQyOTMgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2VuZHRvLlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zZW5kdG8uUwpAQCAtMSw2ICsxLDcgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KIAogRU5UUlkoc2VuZHRvKQogICAgIG1vdiAgICAgaXAsIHNwCkBAIC0xMCw3ICsxMSw4IEBACiAgICAgbGRyICAgICByNywgPV9fTlJfc2VuZHRvCiAgICAgc3dpICAgICAjMAogICAgIGxkbWZkICAgc3AhLCB7cjQsIHI1LCByNiwgcjd9Ci0gICAgbW92cyAgICByMCwgcjAKLSAgICBieHBsICAgIGxyCi0gICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQorICAgIGJ4bHMgICAgbHIKKyAgICBuZWcgICAgIHIwLCByMAorICAgIGIgICAgICAgX19zZXRfZXJybm8KIEVORChzZW5kdG8pCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NldGdpZC5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zZXRnaWQuUwppbmRleCBmMjg2ODdkLi4wMDg0Njg4IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NldGdpZC5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2V0Z2lkLlMKQEAgLTEsMTQgKzEsMTUgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KIAogRU5UUlkoc2V0Z2lkKQotICAgIC5zYXZlICAge3I0LCByN30KLSAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBtb3YgICAgIGlwLCByNwogICAgIGxkciAgICAgcjcsID1fX05SX3NldGdpZDMyCiAgICAgc3dpICAgICAjMAotICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQotICAgIG1vdnMgICAgcjAsIHIwCi0gICAgYnhwbCAgICBscgotICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIG1vdiAgICAgcjcsIGlwCisgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQorICAgIGJ4bHMgICAgbHIKKyAgICBuZWcgICAgIHIwLCByMAorICAgIGIgICAgICAgX19zZXRfZXJybm8KIEVORChzZXRnaWQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NldGdyb3Vwcy5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zZXRncm91cHMuUwppbmRleCBkMmM5MzJmLi4zYzFkOTRmIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NldGdyb3Vwcy5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2V0Z3JvdXBzLlMKQEAgLTEsMTQgKzEsMTUgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KIAogRU5UUlkoc2V0Z3JvdXBzKQotICAgIC5zYXZlICAge3I0LCByN30KLSAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBtb3YgICAgIGlwLCByNwogICAgIGxkciAgICAgcjcsID1fX05SX3NldGdyb3VwczMyCiAgICAgc3dpICAgICAjMAotICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQotICAgIG1vdnMgICAgcjAsIHIwCi0gICAgYnhwbCAgICBscgotICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIG1vdiAgICAgcjcsIGlwCisgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQorICAgIGJ4bHMgICAgbHIKKyAgICBuZWcgICAgIHIwLCByMAorICAgIGIgICAgICAgX19zZXRfZXJybm8KIEVORChzZXRncm91cHMpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NldGl0aW1lci5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zZXRpdGltZXIuUwppbmRleCBjNmI1MDY0Li45MDM4ODc4IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NldGl0aW1lci5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2V0aXRpbWVyLlMKQEAgLTEsMTQgKzEsMTUgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KIAogRU5UUlkoc2V0aXRpbWVyKQotICAgIC5zYXZlICAge3I0LCByN30KLSAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBtb3YgICAgIGlwLCByNwogICAgIGxkciAgICAgcjcsID1fX05SX3NldGl0aW1lcgogICAgIHN3aSAgICAgIzAKLSAgICBsZG1mZCAgIHNwISwge3I0LCByN30KLSAgICBtb3ZzICAgIHIwLCByMAotICAgIGJ4cGwgICAgbHIKLSAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICBtb3YgICAgIHI3LCBpcAorICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKKyAgICBieGxzICAgIGxyCisgICAgbmVnICAgICByMCwgcjAKKyAgICBiICAgICAgIF9fc2V0X2Vycm5vCiBFTkQoc2V0aXRpbWVyKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zZXRwZ2lkLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NldHBnaWQuUwppbmRleCAzOWUxZTAzLi5iZjYzOWEyIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NldHBnaWQuUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NldHBnaWQuUwpAQCAtMSwxNCArMSwxNSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgogCiBFTlRSWShzZXRwZ2lkKQotICAgIC5zYXZlICAge3I0LCByN30KLSAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBtb3YgICAgIGlwLCByNwogICAgIGxkciAgICAgcjcsID1fX05SX3NldHBnaWQKICAgICBzd2kgICAgICMwCi0gICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9Ci0gICAgbW92cyAgICByMCwgcjAKLSAgICBieHBsICAgIGxyCi0gICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgbW92ICAgICByNywgaXAKKyAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCisgICAgYnhscyAgICBscgorICAgIG5lZyAgICAgcjAsIHIwCisgICAgYiAgICAgICBfX3NldF9lcnJubwogRU5EKHNldHBnaWQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NldHByaW9yaXR5LlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NldHByaW9yaXR5LlMKaW5kZXggNWNiODRhOC4uYjE2MTU4YiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zZXRwcmlvcml0eS5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2V0cHJpb3JpdHkuUwpAQCAtMSwxNCArMSwxNSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgogCiBFTlRSWShzZXRwcmlvcml0eSkKLSAgICAuc2F2ZSAgIHtyNCwgcjd9Ci0gICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92ICAgICBpcCwgcjcKICAgICBsZHIgICAgIHI3LCA9X19OUl9zZXRwcmlvcml0eQogICAgIHN3aSAgICAgIzAKLSAgICBsZG1mZCAgIHNwISwge3I0LCByN30KLSAgICBtb3ZzICAgIHIwLCByMAotICAgIGJ4cGwgICAgbHIKLSAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICBtb3YgICAgIHI3LCBpcAorICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKKyAgICBieGxzICAgIGxyCisgICAgbmVnICAgICByMCwgcjAKKyAgICBiICAgICAgIF9fc2V0X2Vycm5vCiBFTkQoc2V0cHJpb3JpdHkpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NldHJlZ2lkLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NldHJlZ2lkLlMKaW5kZXggYmM3OWU5ZS4uZWZjMjBhNSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zZXRyZWdpZC5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2V0cmVnaWQuUwpAQCAtMSwxNCArMSwxNSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgogCiBFTlRSWShzZXRyZWdpZCkKLSAgICAuc2F2ZSAgIHtyNCwgcjd9Ci0gICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92ICAgICBpcCwgcjcKICAgICBsZHIgICAgIHI3LCA9X19OUl9zZXRyZWdpZDMyCiAgICAgc3dpICAgICAjMAotICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQotICAgIG1vdnMgICAgcjAsIHIwCi0gICAgYnhwbCAgICBscgotICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIG1vdiAgICAgcjcsIGlwCisgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQorICAgIGJ4bHMgICAgbHIKKyAgICBuZWcgICAgIHIwLCByMAorICAgIGIgICAgICAgX19zZXRfZXJybm8KIEVORChzZXRyZWdpZCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2V0cmVzZ2lkLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NldHJlc2dpZC5TCmluZGV4IDcxMTYyNmUuLjU1YzgwNGQgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2V0cmVzZ2lkLlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zZXRyZXNnaWQuUwpAQCAtMSwxNCArMSwxNSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgogCiBFTlRSWShzZXRyZXNnaWQpCi0gICAgLnNhdmUgICB7cjQsIHI3fQotICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdiAgICAgaXAsIHI3CiAgICAgbGRyICAgICByNywgPV9fTlJfc2V0cmVzZ2lkMzIKICAgICBzd2kgICAgICMwCi0gICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9Ci0gICAgbW92cyAgICByMCwgcjAKLSAgICBieHBsICAgIGxyCi0gICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgbW92ICAgICByNywgaXAKKyAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCisgICAgYnhscyAgICBscgorICAgIG5lZyAgICAgcjAsIHIwCisgICAgYiAgICAgICBfX3NldF9lcnJubwogRU5EKHNldHJlc2dpZCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2V0cmxpbWl0LlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NldHJsaW1pdC5TCmluZGV4IDBmZTI0NjcuLjIzOTc0ZjcgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2V0cmxpbWl0LlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zZXRybGltaXQuUwpAQCAtMSwxNCArMSwxNSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgogCiBFTlRSWShzZXRybGltaXQpCi0gICAgLnNhdmUgICB7cjQsIHI3fQotICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdiAgICAgaXAsIHI3CiAgICAgbGRyICAgICByNywgPV9fTlJfc2V0cmxpbWl0CiAgICAgc3dpICAgICAjMAotICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQotICAgIG1vdnMgICAgcjAsIHIwCi0gICAgYnhwbCAgICBscgotICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIG1vdiAgICAgcjcsIGlwCisgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQorICAgIGJ4bHMgICAgbHIKKyAgICBuZWcgICAgIHIwLCByMAorICAgIGIgICAgICAgX19zZXRfZXJybm8KIEVORChzZXRybGltaXQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NldHNpZC5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zZXRzaWQuUwppbmRleCBmMTFiNmZiLi41Y2QyN2MyIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NldHNpZC5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2V0c2lkLlMKQEAgLTEsMTQgKzEsMTUgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KIAogRU5UUlkoc2V0c2lkKQotICAgIC5zYXZlICAge3I0LCByN30KLSAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBtb3YgICAgIGlwLCByNwogICAgIGxkciAgICAgcjcsID1fX05SX3NldHNpZAogICAgIHN3aSAgICAgIzAKLSAgICBsZG1mZCAgIHNwISwge3I0LCByN30KLSAgICBtb3ZzICAgIHIwLCByMAotICAgIGJ4cGwgICAgbHIKLSAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICBtb3YgICAgIHI3LCBpcAorICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKKyAgICBieGxzICAgIGxyCisgICAgbmVnICAgICByMCwgcjAKKyAgICBiICAgICAgIF9fc2V0X2Vycm5vCiBFTkQoc2V0c2lkKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zZXRzb2Nrb3B0LlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NldHNvY2tvcHQuUwppbmRleCA3Y2E5MWRkLi4yZDE4NWQ5IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NldHNvY2tvcHQuUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NldHNvY2tvcHQuUwpAQCAtMSw2ICsxLDcgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KIAogRU5UUlkoc2V0c29ja29wdCkKICAgICBtb3YgICAgIGlwLCBzcApAQCAtMTAsNyArMTEsOCBAQAogICAgIGxkciAgICAgcjcsID1fX05SX3NldHNvY2tvcHQKICAgICBzd2kgICAgICMwCiAgICAgbGRtZmQgICBzcCEsIHtyNCwgcjUsIHI2LCByN30KLSAgICBtb3ZzICAgIHIwLCByMAotICAgIGJ4cGwgICAgbHIKLSAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCisgICAgYnhscyAgICBscgorICAgIG5lZyAgICAgcjAsIHIwCisgICAgYiAgICAgICBfX3NldF9lcnJubwogRU5EKHNldHNvY2tvcHQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NldHRpbWVvZmRheS5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zZXR0aW1lb2ZkYXkuUwppbmRleCAyNzQxZTA1Li5mNzFmMTM5IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NldHRpbWVvZmRheS5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2V0dGltZW9mZGF5LlMKQEAgLTEsMTQgKzEsMTUgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KIAogRU5UUlkoc2V0dGltZW9mZGF5KQotICAgIC5zYXZlICAge3I0LCByN30KLSAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBtb3YgICAgIGlwLCByNwogICAgIGxkciAgICAgcjcsID1fX05SX3NldHRpbWVvZmRheQogICAgIHN3aSAgICAgIzAKLSAgICBsZG1mZCAgIHNwISwge3I0LCByN30KLSAgICBtb3ZzICAgIHIwLCByMAotICAgIGJ4cGwgICAgbHIKLSAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICBtb3YgICAgIHI3LCBpcAorICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKKyAgICBieGxzICAgIGxyCisgICAgbmVnICAgICByMCwgcjAKKyAgICBiICAgICAgIF9fc2V0X2Vycm5vCiBFTkQoc2V0dGltZW9mZGF5KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zZXR4YXR0ci5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zZXR4YXR0ci5TCmluZGV4IGU4NmZlOWYuLjcwMmJlODkgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2V0eGF0dHIuUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NldHhhdHRyLlMKQEAgLTEsNiArMSw3IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+Ci0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CiAKIEVOVFJZKHNldHhhdHRyKQogICAgIG1vdiAgICAgaXAsIHNwCkBAIC0xMCw3ICsxMSw4IEBACiAgICAgbGRyICAgICByNywgPV9fTlJfc2V0eGF0dHIKICAgICBzd2kgICAgICMwCiAgICAgbGRtZmQgICBzcCEsIHtyNCwgcjUsIHI2LCByN30KLSAgICBtb3ZzICAgIHIwLCByMAotICAgIGJ4cGwgICAgbHIKLSAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCisgICAgYnhscyAgICBscgorICAgIG5lZyAgICAgcjAsIHIwCisgICAgYiAgICAgICBfX3NldF9lcnJubwogRU5EKHNldHhhdHRyKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zaHV0ZG93bi5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zaHV0ZG93bi5TCmluZGV4IDA4MDI2MzEuLjJmNTIxZGMgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2h1dGRvd24uUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NodXRkb3duLlMKQEAgLTEsMTQgKzEsMTUgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KIAogRU5UUlkoc2h1dGRvd24pCi0gICAgLnNhdmUgICB7cjQsIHI3fQotICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdiAgICAgaXAsIHI3CiAgICAgbGRyICAgICByNywgPV9fTlJfc2h1dGRvd24KICAgICBzd2kgICAgICMwCi0gICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9Ci0gICAgbW92cyAgICByMCwgcjAKLSAgICBieHBsICAgIGxyCi0gICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgbW92ICAgICByNywgaXAKKyAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCisgICAgYnhscyAgICBscgorICAgIG5lZyAgICAgcjAsIHIwCisgICAgYiAgICAgICBfX3NldF9lcnJubwogRU5EKHNodXRkb3duKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zaWdhY3Rpb24uUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2lnYWN0aW9uLlMKaW5kZXggMDRhOGI5NC4uMzc1ZWMwNCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zaWdhY3Rpb24uUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NpZ2FjdGlvbi5TCkBAIC0xLDE0ICsxLDE1IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+Ci0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CiAKIEVOVFJZKHNpZ2FjdGlvbikKLSAgICAuc2F2ZSAgIHtyNCwgcjd9Ci0gICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92ICAgICBpcCwgcjcKICAgICBsZHIgICAgIHI3LCA9X19OUl9zaWdhY3Rpb24KICAgICBzd2kgICAgICMwCi0gICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9Ci0gICAgbW92cyAgICByMCwgcjAKLSAgICBieHBsICAgIGxyCi0gICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgbW92ICAgICByNywgaXAKKyAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCisgICAgYnhscyAgICBscgorICAgIG5lZyAgICAgcjAsIHIwCisgICAgYiAgICAgICBfX3NldF9lcnJubwogRU5EKHNpZ2FjdGlvbikKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2lnYWx0c3RhY2suUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2lnYWx0c3RhY2suUwppbmRleCBiNTQxYTg3Li5jYTY4MDA0IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NpZ2FsdHN0YWNrLlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zaWdhbHRzdGFjay5TCkBAIC0xLDE0ICsxLDE1IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+Ci0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CiAKIEVOVFJZKHNpZ2FsdHN0YWNrKQotICAgIC5zYXZlICAge3I0LCByN30KLSAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBtb3YgICAgIGlwLCByNwogICAgIGxkciAgICAgcjcsID1fX05SX3NpZ2FsdHN0YWNrCiAgICAgc3dpICAgICAjMAotICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQotICAgIG1vdnMgICAgcjAsIHIwCi0gICAgYnhwbCAgICBscgotICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIG1vdiAgICAgcjcsIGlwCisgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQorICAgIGJ4bHMgICAgbHIKKyAgICBuZWcgICAgIHIwLCByMAorICAgIGIgICAgICAgX19zZXRfZXJybm8KIEVORChzaWdhbHRzdGFjaykKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2lnbmFsZmQ0LlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NpZ25hbGZkNC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzZGNlMzQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NpZ25hbGZkNC5TCkBAIC0wLDAgKzEsMTUgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KKworRU5UUlkoc2lnbmFsZmQ0KQorICAgIG1vdiAgICAgaXAsIHI3CisgICAgbGRyICAgICByNywgPV9fTlJfc2lnbmFsZmQ0CisgICAgc3dpICAgICAjMAorICAgIG1vdiAgICAgcjcsIGlwCisgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQorICAgIGJ4bHMgICAgbHIKKyAgICBuZWcgICAgIHIwLCByMAorICAgIGIgICAgICAgX19zZXRfZXJybm8KK0VORChzaWduYWxmZDQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NpZ3BlbmRpbmcuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2lncGVuZGluZy5TCmluZGV4IDRjN2Q5MTkuLmJhNjY3YTAgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2lncGVuZGluZy5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2lncGVuZGluZy5TCkBAIC0xLDE0ICsxLDE1IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+Ci0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CiAKIEVOVFJZKHNpZ3BlbmRpbmcpCi0gICAgLnNhdmUgICB7cjQsIHI3fQotICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdiAgICAgaXAsIHI3CiAgICAgbGRyICAgICByNywgPV9fTlJfc2lncGVuZGluZwogICAgIHN3aSAgICAgIzAKLSAgICBsZG1mZCAgIHNwISwge3I0LCByN30KLSAgICBtb3ZzICAgIHIwLCByMAotICAgIGJ4cGwgICAgbHIKLSAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICBtb3YgICAgIHI3LCBpcAorICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKKyAgICBieGxzICAgIGxyCisgICAgbmVnICAgICByMCwgcjAKKyAgICBiICAgICAgIF9fc2V0X2Vycm5vCiBFTkQoc2lncGVuZGluZykKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2lncHJvY21hc2suUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2lncHJvY21hc2suUwppbmRleCA3YzU5YTZiLi5mOTM1MzQwIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NpZ3Byb2NtYXNrLlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zaWdwcm9jbWFzay5TCkBAIC0xLDE0ICsxLDE1IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+Ci0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CiAKIEVOVFJZKHNpZ3Byb2NtYXNrKQotICAgIC5zYXZlICAge3I0LCByN30KLSAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBtb3YgICAgIGlwLCByNwogICAgIGxkciAgICAgcjcsID1fX05SX3NpZ3Byb2NtYXNrCiAgICAgc3dpICAgICAjMAotICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQotICAgIG1vdnMgICAgcjAsIHIwCi0gICAgYnhwbCAgICBscgotICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIG1vdiAgICAgcjcsIGlwCisgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQorICAgIGJ4bHMgICAgbHIKKyAgICBuZWcgICAgIHIwLCByMAorICAgIGIgICAgICAgX19zZXRfZXJybm8KIEVORChzaWdwcm9jbWFzaykKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc29ja2V0LlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NvY2tldC5TCmluZGV4IGUyOGQyNTIuLjNjYWFlMDkgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc29ja2V0LlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zb2NrZXQuUwpAQCAtMSwxNCArMSwxNSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgogCiBFTlRSWShzb2NrZXQpCi0gICAgLnNhdmUgICB7cjQsIHI3fQotICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdiAgICAgaXAsIHI3CiAgICAgbGRyICAgICByNywgPV9fTlJfc29ja2V0CiAgICAgc3dpICAgICAjMAotICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQotICAgIG1vdnMgICAgcjAsIHIwCi0gICAgYnhwbCAgICBscgotICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIG1vdiAgICAgcjcsIGlwCisgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQorICAgIGJ4bHMgICAgbHIKKyAgICBuZWcgICAgIHIwLCByMAorICAgIGIgICAgICAgX19zZXRfZXJybm8KIEVORChzb2NrZXQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NvY2tldHBhaXIuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc29ja2V0cGFpci5TCmluZGV4IGU2OTkwMDAuLjBlNGRiNzcgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc29ja2V0cGFpci5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc29ja2V0cGFpci5TCkBAIC0xLDE0ICsxLDE1IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+Ci0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CiAKIEVOVFJZKHNvY2tldHBhaXIpCi0gICAgLnNhdmUgICB7cjQsIHI3fQotICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdiAgICAgaXAsIHI3CiAgICAgbGRyICAgICByNywgPV9fTlJfc29ja2V0cGFpcgogICAgIHN3aSAgICAgIzAKLSAgICBsZG1mZCAgIHNwISwge3I0LCByN30KLSAgICBtb3ZzICAgIHIwLCByMAotICAgIGJ4cGwgICAgbHIKLSAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICBtb3YgICAgIHI3LCBpcAorICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKKyAgICBieGxzICAgIGxyCisgICAgbmVnICAgICByMCwgcjAKKyAgICBiICAgICAgIF9fc2V0X2Vycm5vCiBFTkQoc29ja2V0cGFpcikKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc3RhdC5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zdGF0LlMKaW5kZXggYTQ2NjlhNi4uYzVjMzEwYyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zdGF0LlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zdGF0LlMKQEAgLTEsMTQgKzEsMTUgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KIAogRU5UUlkoc3RhdCkKLSAgICAuc2F2ZSAgIHtyNCwgcjd9Ci0gICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92ICAgICBpcCwgcjcKICAgICBsZHIgICAgIHI3LCA9X19OUl9zdGF0NjQKICAgICBzd2kgICAgICMwCi0gICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9Ci0gICAgbW92cyAgICByMCwgcjAKLSAgICBieHBsICAgIGxyCi0gICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgbW92ICAgICByNywgaXAKKyAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCisgICAgYnhscyAgICBscgorICAgIG5lZyAgICAgcjAsIHIwCisgICAgYiAgICAgICBfX3NldF9lcnJubwogRU5EKHN0YXQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3N3YXBvZmYuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc3dhcG9mZi5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3MGQxNjAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3N3YXBvZmYuUwpAQCAtMCwwICsxLDE1IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+CisKK0VOVFJZKHN3YXBvZmYpCisgICAgbW92ICAgICBpcCwgcjcKKyAgICBsZHIgICAgIHI3LCA9X19OUl9zd2Fwb2ZmCisgICAgc3dpICAgICAjMAorICAgIG1vdiAgICAgcjcsIGlwCisgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQorICAgIGJ4bHMgICAgbHIKKyAgICBuZWcgICAgIHIwLCByMAorICAgIGIgICAgICAgX19zZXRfZXJybm8KK0VORChzd2Fwb2ZmKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zd2Fwb24uUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc3dhcG9uLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTc3ZTBjZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc3dhcG9uLlMKQEAgLTAsMCArMSwxNSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgorCitFTlRSWShzd2Fwb24pCisgICAgbW92ICAgICBpcCwgcjcKKyAgICBsZHIgICAgIHI3LCA9X19OUl9zd2Fwb24KKyAgICBzd2kgICAgICMwCisgICAgbW92ICAgICByNywgaXAKKyAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCisgICAgYnhscyAgICBscgorICAgIG5lZyAgICAgcjAsIHIwCisgICAgYiAgICAgICBfX3NldF9lcnJubworRU5EKHN3YXBvbikKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc3ltbGluay5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zeW1saW5rLlMKaW5kZXggMTRhNzUzZi4uNDA2ZDdiMiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zeW1saW5rLlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zeW1saW5rLlMKQEAgLTEsMTQgKzEsMTUgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KIAogRU5UUlkoc3ltbGluaykKLSAgICAuc2F2ZSAgIHtyNCwgcjd9Ci0gICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92ICAgICBpcCwgcjcKICAgICBsZHIgICAgIHI3LCA9X19OUl9zeW1saW5rCiAgICAgc3dpICAgICAjMAotICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQotICAgIG1vdnMgICAgcjAsIHIwCi0gICAgYnhwbCAgICBscgotICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIG1vdiAgICAgcjcsIGlwCisgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQorICAgIGJ4bHMgICAgbHIKKyAgICBuZWcgICAgIHIwLCByMAorICAgIGIgICAgICAgX19zZXRfZXJybm8KIEVORChzeW1saW5rKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zeW5jLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3N5bmMuUwppbmRleCA2OGMwYzBmLi4zZWZlMjYzIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3N5bmMuUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3N5bmMuUwpAQCAtMSwxNCArMSwxNSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgogCiBFTlRSWShzeW5jKQotICAgIC5zYXZlICAge3I0LCByN30KLSAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBtb3YgICAgIGlwLCByNwogICAgIGxkciAgICAgcjcsID1fX05SX3N5bmMKICAgICBzd2kgICAgICMwCi0gICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9Ci0gICAgbW92cyAgICByMCwgcjAKLSAgICBieHBsICAgIGxyCi0gICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgbW92ICAgICByNywgaXAKKyAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCisgICAgYnhscyAgICBscgorICAgIG5lZyAgICAgcjAsIHIwCisgICAgYiAgICAgICBfX3NldF9lcnJubwogRU5EKHN5bmMpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3N5c2luZm8uUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc3lzaW5mby5TCmluZGV4IDJhMmZiNTkuLjA1NmMwM2UgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc3lzaW5mby5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc3lzaW5mby5TCkBAIC0xLDE0ICsxLDE1IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+Ci0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CiAKIEVOVFJZKHN5c2luZm8pCi0gICAgLnNhdmUgICB7cjQsIHI3fQotICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdiAgICAgaXAsIHI3CiAgICAgbGRyICAgICByNywgPV9fTlJfc3lzaW5mbwogICAgIHN3aSAgICAgIzAKLSAgICBsZG1mZCAgIHNwISwge3I0LCByN30KLSAgICBtb3ZzICAgIHIwLCByMAotICAgIGJ4cGwgICAgbHIKLSAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICBtb3YgICAgIHI3LCBpcAorICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKKyAgICBieGxzICAgIGxyCisgICAgbmVnICAgICByMCwgcjAKKyAgICBiICAgICAgIF9fc2V0X2Vycm5vCiBFTkQoc3lzaW5mbykKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvdGltZXJmZF9jcmVhdGUuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvdGltZXJmZF9jcmVhdGUuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZTNmMTZmCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy90aW1lcmZkX2NyZWF0ZS5TCkBAIC0wLDAgKzEsMTUgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KKworRU5UUlkodGltZXJmZF9jcmVhdGUpCisgICAgbW92ICAgICBpcCwgcjcKKyAgICBsZHIgICAgIHI3LCA9X19OUl90aW1lcmZkX2NyZWF0ZQorICAgIHN3aSAgICAgIzAKKyAgICBtb3YgICAgIHI3LCBpcAorICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKKyAgICBieGxzICAgIGxyCisgICAgbmVnICAgICByMCwgcjAKKyAgICBiICAgICAgIF9fc2V0X2Vycm5vCitFTkQodGltZXJmZF9jcmVhdGUpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3RpbWVyZmRfZ2V0dGltZS5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy90aW1lcmZkX2dldHRpbWUuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzNlMmNmCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy90aW1lcmZkX2dldHRpbWUuUwpAQCAtMCwwICsxLDE1IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+CisKK0VOVFJZKHRpbWVyZmRfZ2V0dGltZSkKKyAgICBtb3YgICAgIGlwLCByNworICAgIGxkciAgICAgcjcsID1fX05SX3RpbWVyZmRfZ2V0dGltZQorICAgIHN3aSAgICAgIzAKKyAgICBtb3YgICAgIHI3LCBpcAorICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKKyAgICBieGxzICAgIGxyCisgICAgbmVnICAgICByMCwgcjAKKyAgICBiICAgICAgIF9fc2V0X2Vycm5vCitFTkQodGltZXJmZF9nZXR0aW1lKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy90aW1lcmZkX3NldHRpbWUuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvdGltZXJmZF9zZXR0aW1lLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjdmMGNmMAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvdGltZXJmZF9zZXR0aW1lLlMKQEAgLTAsMCArMSwxNSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgorCitFTlRSWSh0aW1lcmZkX3NldHRpbWUpCisgICAgbW92ICAgICBpcCwgcjcKKyAgICBsZHIgICAgIHI3LCA9X19OUl90aW1lcmZkX3NldHRpbWUKKyAgICBzd2kgICAgICMwCisgICAgbW92ICAgICByNywgaXAKKyAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCisgICAgYnhscyAgICBscgorICAgIG5lZyAgICAgcjAsIHIwCisgICAgYiAgICAgICBfX3NldF9lcnJubworRU5EKHRpbWVyZmRfc2V0dGltZSkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvdGltZXMuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvdGltZXMuUwppbmRleCBhYWNiNGNhLi5iNjBmN2QyIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3RpbWVzLlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy90aW1lcy5TCkBAIC0xLDE0ICsxLDE1IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+Ci0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CiAKIEVOVFJZKHRpbWVzKQotICAgIC5zYXZlICAge3I0LCByN30KLSAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBtb3YgICAgIGlwLCByNwogICAgIGxkciAgICAgcjcsID1fX05SX3RpbWVzCiAgICAgc3dpICAgICAjMAotICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQotICAgIG1vdnMgICAgcjAsIHIwCi0gICAgYnhwbCAgICBscgotICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIG1vdiAgICAgcjcsIGlwCisgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQorICAgIGJ4bHMgICAgbHIKKyAgICBuZWcgICAgIHIwLCByMAorICAgIGIgICAgICAgX19zZXRfZXJybm8KIEVORCh0aW1lcykKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvdHJ1bmNhdGUuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvdHJ1bmNhdGUuUwppbmRleCA4YzBiMjRmLi42OTc3MDBjIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3RydW5jYXRlLlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy90cnVuY2F0ZS5TCkBAIC0xLDE0ICsxLDE1IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+Ci0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CiAKIEVOVFJZKHRydW5jYXRlKQotICAgIC5zYXZlICAge3I0LCByN30KLSAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBtb3YgICAgIGlwLCByNwogICAgIGxkciAgICAgcjcsID1fX05SX3RydW5jYXRlCiAgICAgc3dpICAgICAjMAotICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQotICAgIG1vdnMgICAgcjAsIHIwCi0gICAgYnhwbCAgICBscgotICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIG1vdiAgICAgcjcsIGlwCisgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQorICAgIGJ4bHMgICAgbHIKKyAgICBuZWcgICAgIHIwLCByMAorICAgIGIgICAgICAgX19zZXRfZXJybm8KIEVORCh0cnVuY2F0ZSkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvdW1hc2suUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvdW1hc2suUwppbmRleCBhN2JjMjBiLi5kZjc1NDRkIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3VtYXNrLlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy91bWFzay5TCkBAIC0xLDE0ICsxLDE1IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+Ci0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CiAKIEVOVFJZKHVtYXNrKQotICAgIC5zYXZlICAge3I0LCByN30KLSAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBtb3YgICAgIGlwLCByNwogICAgIGxkciAgICAgcjcsID1fX05SX3VtYXNrCiAgICAgc3dpICAgICAjMAotICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQotICAgIG1vdnMgICAgcjAsIHIwCi0gICAgYnhwbCAgICBscgotICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIG1vdiAgICAgcjcsIGlwCisgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQorICAgIGJ4bHMgICAgbHIKKyAgICBuZWcgICAgIHIwLCByMAorICAgIGIgICAgICAgX19zZXRfZXJybm8KIEVORCh1bWFzaykKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvdW1vdW50Mi5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy91bW91bnQyLlMKaW5kZXggMDRiMjhmNC4uNjBiZjdiMiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy91bW91bnQyLlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy91bW91bnQyLlMKQEAgLTEsMTQgKzEsMTUgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KIAogRU5UUlkodW1vdW50MikKLSAgICAuc2F2ZSAgIHtyNCwgcjd9Ci0gICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92ICAgICBpcCwgcjcKICAgICBsZHIgICAgIHI3LCA9X19OUl91bW91bnQyCiAgICAgc3dpICAgICAjMAotICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQotICAgIG1vdnMgICAgcjAsIHIwCi0gICAgYnhwbCAgICBscgotICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIG1vdiAgICAgcjcsIGlwCisgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQorICAgIGJ4bHMgICAgbHIKKyAgICBuZWcgICAgIHIwLCByMAorICAgIGIgICAgICAgX19zZXRfZXJybm8KIEVORCh1bW91bnQyKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy91bmFtZS5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy91bmFtZS5TCmluZGV4IDRhNmYwZjQuLjUxODJjM2YgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvdW5hbWUuUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3VuYW1lLlMKQEAgLTEsMTQgKzEsMTUgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KIAogRU5UUlkodW5hbWUpCi0gICAgLnNhdmUgICB7cjQsIHI3fQotICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdiAgICAgaXAsIHI3CiAgICAgbGRyICAgICByNywgPV9fTlJfdW5hbWUKICAgICBzd2kgICAgICMwCi0gICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9Ci0gICAgbW92cyAgICByMCwgcjAKLSAgICBieHBsICAgIGxyCi0gICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgbW92ICAgICByNywgaXAKKyAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCisgICAgYnhscyAgICBscgorICAgIG5lZyAgICAgcjAsIHIwCisgICAgYiAgICAgICBfX3NldF9lcnJubwogRU5EKHVuYW1lKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy91bmxpbmsuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvdW5saW5rLlMKaW5kZXggODdmYTc5ZS4uMWE3NGVlNCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy91bmxpbmsuUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3VubGluay5TCkBAIC0xLDE0ICsxLDE1IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+Ci0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CiAKIEVOVFJZKHVubGluaykKLSAgICAuc2F2ZSAgIHtyNCwgcjd9Ci0gICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92ICAgICBpcCwgcjcKICAgICBsZHIgICAgIHI3LCA9X19OUl91bmxpbmsKICAgICBzd2kgICAgICMwCi0gICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9Ci0gICAgbW92cyAgICByMCwgcjAKLSAgICBieHBsICAgIGxyCi0gICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgbW92ICAgICByNywgaXAKKyAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCisgICAgYnhscyAgICBscgorICAgIG5lZyAgICAgcjAsIHIwCisgICAgYiAgICAgICBfX3NldF9lcnJubwogRU5EKHVubGluaykKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvdW5saW5rYXQuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvdW5saW5rYXQuUwppbmRleCAzYmVhZTZjLi42NmQ3MzRkIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3VubGlua2F0LlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy91bmxpbmthdC5TCkBAIC0xLDE0ICsxLDE1IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+Ci0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CiAKIEVOVFJZKHVubGlua2F0KQotICAgIC5zYXZlICAge3I0LCByN30KLSAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBtb3YgICAgIGlwLCByNwogICAgIGxkciAgICAgcjcsID1fX05SX3VubGlua2F0CiAgICAgc3dpICAgICAjMAotICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQotICAgIG1vdnMgICAgcjAsIHIwCi0gICAgYnhwbCAgICBscgotICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIG1vdiAgICAgcjcsIGlwCisgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQorICAgIGJ4bHMgICAgbHIKKyAgICBuZWcgICAgIHIwLCByMAorICAgIGIgICAgICAgX19zZXRfZXJybm8KIEVORCh1bmxpbmthdCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvdW5zaGFyZS5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy91bnNoYXJlLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTU1MTVjNwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvdW5zaGFyZS5TCkBAIC0wLDAgKzEsMTUgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KKworRU5UUlkodW5zaGFyZSkKKyAgICBtb3YgICAgIGlwLCByNworICAgIGxkciAgICAgcjcsID1fX05SX3Vuc2hhcmUKKyAgICBzd2kgICAgICMwCisgICAgbW92ICAgICByNywgaXAKKyAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCisgICAgYnhscyAgICBscgorICAgIG5lZyAgICAgcjAsIHIwCisgICAgYiAgICAgICBfX3NldF9lcnJubworRU5EKHVuc2hhcmUpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3V0aW1lbnNhdC5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy91dGltZW5zYXQuUwppbmRleCBjZWFlN2ZhLi5hMTNmZWFjIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3V0aW1lbnNhdC5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvdXRpbWVuc2F0LlMKQEAgLTEsMTQgKzEsMTUgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KIAogRU5UUlkodXRpbWVuc2F0KQotICAgIC5zYXZlICAge3I0LCByN30KLSAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBtb3YgICAgIGlwLCByNwogICAgIGxkciAgICAgcjcsID1fX05SX3V0aW1lbnNhdAogICAgIHN3aSAgICAgIzAKLSAgICBsZG1mZCAgIHNwISwge3I0LCByN30KLSAgICBtb3ZzICAgIHIwLCByMAotICAgIGJ4cGwgICAgbHIKLSAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICBtb3YgICAgIHI3LCBpcAorICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKKyAgICBieGxzICAgIGxyCisgICAgbmVnICAgICByMCwgcjAKKyAgICBiICAgICAgIF9fc2V0X2Vycm5vCiBFTkQodXRpbWVuc2F0KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy91dGltZXMuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvdXRpbWVzLlMKaW5kZXggYTJkNThhMy4uNjVhY2IyNSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy91dGltZXMuUworKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3V0aW1lcy5TCkBAIC0xLDE0ICsxLDE1IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+Ci0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CiAKIEVOVFJZKHV0aW1lcykKLSAgICAuc2F2ZSAgIHtyNCwgcjd9Ci0gICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92ICAgICBpcCwgcjcKICAgICBsZHIgICAgIHI3LCA9X19OUl91dGltZXMKICAgICBzd2kgICAgICMwCi0gICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9Ci0gICAgbW92cyAgICByMCwgcjAKLSAgICBieHBsICAgIGxyCi0gICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgbW92ICAgICByNywgaXAKKyAgICBjbW4gICAgIHIwLCAjKE1BWF9FUlJOTyArIDEpCisgICAgYnhscyAgICBscgorICAgIG5lZyAgICAgcjAsIHIwCisgICAgYiAgICAgICBfX3NldF9lcnJubwogRU5EKHV0aW1lcykKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvdmZvcmsuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvdmZvcmsuUwppbmRleCAzYmQyNjY4Li5lOGExMDIyIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3Zmb3JrLlMKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy92Zm9yay5TCkBAIC0xLDE0ICsxLDE1IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+Ci0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CiAKIEVOVFJZKHZmb3JrKQotICAgIC5zYXZlICAge3I0LCByN30KLSAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBtb3YgICAgIGlwLCByNwogICAgIGxkciAgICAgcjcsID1fX05SX3Zmb3JrCiAgICAgc3dpICAgICAjMAotICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQotICAgIG1vdnMgICAgcjAsIHIwCi0gICAgYnhwbCAgICBscgotICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIG1vdiAgICAgcjcsIGlwCisgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQorICAgIGJ4bHMgICAgbHIKKyAgICBuZWcgICAgIHIwLCByMAorICAgIGIgICAgICAgX19zZXRfZXJybm8KIEVORCh2Zm9yaykKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvd2FpdDQuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvd2FpdDQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODk1YWNmCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy93YWl0NC5TCkBAIC0wLDAgKzEsMTUgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KKworRU5UUlkod2FpdDQpCisgICAgbW92ICAgICBpcCwgcjcKKyAgICBsZHIgICAgIHI3LCA9X19OUl93YWl0NAorICAgIHN3aSAgICAgIzAKKyAgICBtb3YgICAgIHI3LCBpcAorICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKKyAgICBieGxzICAgIGxyCisgICAgbmVnICAgICByMCwgcjAKKyAgICBiICAgICAgIF9fc2V0X2Vycm5vCitFTkQod2FpdDQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3dyaXRlLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3dyaXRlLlMKaW5kZXggODI2ZTgyYy4uMTMwMmZlYiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy93cml0ZS5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvd3JpdGUuUwpAQCAtMSwxNCArMSwxNSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgogCiBFTlRSWSh3cml0ZSkKLSAgICAuc2F2ZSAgIHtyNCwgcjd9Ci0gICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92ICAgICBpcCwgcjcKICAgICBsZHIgICAgIHI3LCA9X19OUl93cml0ZQogICAgIHN3aSAgICAgIzAKLSAgICBsZG1mZCAgIHNwISwge3I0LCByN30KLSAgICBtb3ZzICAgIHIwLCByMAotICAgIGJ4cGwgICAgbHIKLSAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICBtb3YgICAgIHI3LCBpcAorICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKKyAgICBieGxzICAgIGxyCisgICAgbmVnICAgICByMCwgcjAKKyAgICBiICAgICAgIF9fc2V0X2Vycm5vCiBFTkQod3JpdGUpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3dyaXRldi5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy93cml0ZXYuUwppbmRleCAxNmE2ZGY5Li5iY2YzNTIxIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3dyaXRldi5TCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvd3JpdGV2LlMKQEAgLTEsMTQgKzEsMTUgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KIAogRU5UUlkod3JpdGV2KQotICAgIC5zYXZlICAge3I0LCByN30KLSAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBtb3YgICAgIGlwLCByNwogICAgIGxkciAgICAgcjcsID1fX05SX3dyaXRldgogICAgIHN3aSAgICAgIzAKLSAgICBsZG1mZCAgIHNwISwge3I0LCByN30KLSAgICBtb3ZzICAgIHIwLCByMAotICAgIGJ4cGwgICAgbHIKLSAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICBtb3YgICAgIHI3LCBpcAorICAgIGNtbiAgICAgcjAsICMoTUFYX0VSUk5PICsgMSkKKyAgICBieGxzICAgIGxyCisgICAgbmVnICAgICByMCwgcjAKKyAgICBiICAgICAgIF9fc2V0X2Vycm5vCiBFTkQod3JpdGV2KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvYmlvbmljL19fZ2V0X3NwLlMgYi9saWJjL2FyY2gtbWlwcy9iaW9uaWMvX19nZXRfc3AuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MzRjODlkCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHMvYmlvbmljL19fZ2V0X3NwLlMKQEAgLTAsMCArMSwzOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCS50ZXh0CisKKy8qIHZvaWQgKl9fZ2V0X3NwKHZvaWQpICovCisKKwkudHlwZQlfX2dldF9zcCwgQGZ1bmN0aW9uCisJLmdsb2JhbAlfX2dldF9zcAorCS5hbGlnbgk0CisJLmVudAlfX2dldF9zcAorX19nZXRfc3A6CisJbW92ZQkkdjAsICRzcAorCWoJJHJhCisJLmVuZAlfX2dldF9zcApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvYmlvbmljL19fZ2V0X3Rscy5jIGIvbGliYy9hcmNoLW1pcHMvYmlvbmljL19fZ2V0X3Rscy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxY2RmMGUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtbWlwcy9iaW9uaWMvX19nZXRfdGxzLmMKQEAgLTAsMCArMSwzNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLwordm9pZCogICBfX2dldF90bHModm9pZCkKK3sKKyAgcmVnaXN0ZXIgdm9pZCAgKnRscyBhc20oInYxIik7CisgIGFzbSAoIi5zZXQgcHVzaFxuXHQiCisgICAgICAgIi5zZXQgbWlwczMycjJcblx0IgorICAgICAgICJyZGh3ciAlMCwkMjlcblx0IgorICAgICAgICIuc2V0IHBvcCIKKyAgICAgICA6ICI9ciIodGxzKSk7CisgIHJldHVybiB0bHM7Cit9CmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9iaW9uaWMvX19zZXRfdGxzLmMgYi9saWJjL2FyY2gtbWlwcy9iaW9uaWMvX19zZXRfdGxzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzhlM2E1MAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzL2Jpb25pYy9fX3NldF90bHMuYwpAQCAtMCwwICsxLDM1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisjaW5jbHVkZSA8cHRocmVhZC5oPgorCitleHRlcm4gaW50IF9fc2V0X3RocmVhZF9hcmVhKHZvaWQgKnVfaW5mbyk7CisKK2ludCBfX3NldF90bHModm9pZCAqcHRyKQoreworICAgIHJldHVybiBfX3NldF90aHJlYWRfYXJlYShwdHIpOworfQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvYmlvbmljL19leGl0X3dpdGhfc3RhY2tfdGVhcmRvd24uUyBiL2xpYmMvYXJjaC1taXBzL2Jpb25pYy9fZXhpdF93aXRoX3N0YWNrX3RlYXJkb3duLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTk3NGU4NAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzL2Jpb25pYy9fZXhpdF93aXRoX3N0YWNrX3RlYXJkb3duLlMKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgorCisJLnRleHQKKworLyogdm9pZCBfZXhpdF93aXRoX3N0YWNrX3RlYXJkb3duKHZvaWQgKiBzdGFja0Jhc2UsIGludCBzdGFja1NpemUsIGludCByZXRDb2RlKSAqLworCisJLnR5cGUJX2V4aXRfd2l0aF9zdGFja190ZWFyZG93biwgQGZ1bmN0aW9uCisJLmdsb2JhbAlfZXhpdF93aXRoX3N0YWNrX3RlYXJkb3duCisJLmFsaWduCTQKKwkuZW50CV9leGl0X3dpdGhfc3RhY2tfdGVhcmRvd24KK19leGl0X3dpdGhfc3RhY2tfdGVhcmRvd246CisJbW92ZQkkczAsJGEyCQkvKiBwcmVzZXJ2ZSByZXRDb2RlIGZvciBleGl0KCkgY2FsbCAqLworCisJbGkJJHYwLF9fTlJfbXVubWFwCisJc3lzY2FsbAkJCS8qIHRoZSBzdGFjayBpcyBkZXN0cm95ZWQgYnkgdGhpcyBjYWxsICovCisJbW92ZQkkYTAsJHMwCisJbGkJJHYwLF9fTlJfZXhpdAorCXN5c2NhbGwKKworCS8qIGV4aXQoKSBzaG91bGQgbmV2ZXIgcmV0dXJuLCBjYXVzZSBhIGNyYXNoIGlmIGl0IGRvZXMgKi8KKwltb3ZlCSRhMCwkMAorCWx3CSRhMCwoJGEwKQorCS5lbmQJX2V4aXRfd2l0aF9zdGFja190ZWFyZG93bgpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvYmlvbmljL19zZXRqbXAuUyBiL2xpYmMvYXJjaC1taXBzL2Jpb25pYy9fc2V0am1wLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTcwODNhZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzL2Jpb25pYy9fc2V0am1wLlMKQEAgLTAsMCArMSwxODggQEAKKy8qCSRPcGVuQlNEOiBfc2V0am1wLlMsdiAxLjQgMjAwNS8wOC8wNyAxNjo0MDoxNSBlc3BpZSBFeHAgJCAqLworCisvKgorICogQ29weXJpZ2h0IChjKSAyMDAyIE9wc3ljb24gQUIgICh3d3cub3BzeWNvbi5zZSAvIHd3dy5vcHN5Y29uLmNvbSkKKyAqIAorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIE9wc3ljb24gQUIgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTCisgKiBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqLworCisjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KKyNpbmNsdWRlIDxtYWNoaW5lL3JlZ251bS5oPgorI2luY2x1ZGUgPG1hY2hpbmUvc2lnbmFsLmg+CisKKy8qCisgKiBfc2V0am1wLCBfbG9uZ2ptcCAobm90IHJlc3RvcmluZyBzaWduYWwgc3RhdGUpCisgKgorICogWFhYIEZQU0VUIHNob3VsZCBwcm9iYWJseSBiZSB0YWtlbiBmcm9tIFNSIHNldHRpbmcuIGhtbW0uLi4KKyAqICBHUE9GRiBhbmQgRlJBTUVTSVpFIG11c3QgYmUgdGhlIHNhbWUgZm9yIGJvdGggX3NldGptcCBhbmQgX2xvbmdqbXAhCisgKgorICovCisKK0ZSQU1FU1o9IE1LRlNJWigwLDQpCitHUE9GRj0gRlJBTUVTWi0yKlJFR1NaCisKKyNkZWZpbmUgRlBSRUc2NF9TKEZQUiwgT0ZGLCBCQVNFKSAgICAgICBcCisgICAgICAgIHN3YzEgICAgRlBSLCBPRkYoQkFTRSkgIDsgICAgICAgXAorICAgICAgICBtZmhjMSAgIHQwLCBGUFIgICAgICAgICA7ICAgICAgIFwKKyAgICAgICAgc3cgICAgICB0MCwgT0ZGKzQoQkFTRSkgOworICAgICAgICAKKyNkZWZpbmUgRlBSRUc2NF9MKEZQUiwgT0ZGLCBCQVNFKSAgICAgICBcCisgICAgICAgIGx3ICAgICAgdDAsIE9GRis0KEJBU0UpIDsgICAgICAgXAorICAgICAgICBsdyAgICAgIHQxLCBPRkYoQkFTRSkgICA7ICAgICAgIFwKKyAgICAgICAgbXRjMSAgICB0MSwgRlBSICAgICAgICAgOyAgICAgICBcCisgICAgICAgIG10aGMxICAgdDAsIEZQUiAgICAgICAgIDsgICAgICAgXAorICAgICAgICAKK0xFQUYoX3NldGptcCwgRlJBTUVTWikKKwlQVFJfU1VCVSBzcCwgRlJBTUVTWgorCVNFVFVQX0dQNjQoR1BPRkYsIF9zZXRqbXApCisJU0FWRV9HUChHUE9GRikKKwkuc2V0CW5vcmVvcmRlcgorI2lmIGRlZmluZWQoX19taXBzNjQpCisJZGxpCXYwLCAweEFDRURCQURFCQkJIyBzaWdjb250ZXh0IG1hZ2ljIG51bWJlcgorI2Vsc2UKKwlsaQl2MCwgMHhBQ0VEQkFERQkJCSMgc2lnY29udGV4dCBtYWdpYyBudW1iZXIKKyNlbmRpZgorCVJFR19TCXYwLCBTQ19SRUdTK1pFUk8qUkVHU1ooYTApCisJUkVHX1MJczAsIFNDX1JFR1MrUzAqUkVHU1ooYTApCisJUkVHX1MJczEsIFNDX1JFR1MrUzEqUkVHU1ooYTApCisJUkVHX1MJczIsIFNDX1JFR1MrUzIqUkVHU1ooYTApCisJUkVHX1MJczMsIFNDX1JFR1MrUzMqUkVHU1ooYTApCisJUkVHX1MJczQsIFNDX1JFR1MrUzQqUkVHU1ooYTApCisJUkVHX1MJczUsIFNDX1JFR1MrUzUqUkVHU1ooYTApCisJUkVHX1MJczYsIFNDX1JFR1MrUzYqUkVHU1ooYTApCisJUkVHX1MJczcsIFNDX1JFR1MrUzcqUkVHU1ooYTApCisJUkVHX1MJczgsIFNDX1JFR1MrUzgqUkVHU1ooYTApCisJUkVHX0wJdjAsIEdQT0ZGKHNwKQorCVJFR19TCXYwLCBTQ19SRUdTK0dQKlJFR1NaKGEwKQorCVBUUl9BRERVIHYwLCBzcCwgRlJBTUVTWgorCVJFR19TCXYwLCBTQ19SRUdTK1NQKlJFR1NaKGEwKQorCVJFR19TCXJhLCBTQ19QQyhhMCkKKworI2lmICFkZWZpbmVkKFNPRlRGTE9BVCkKKwlsaQl2MCwgMQkJCQkjIGJlIG5pY2UgaWYgd2UgY291bGQgdGVsbAorCVJFR19TCXYwLCBTQ19GUFVTRUQoYTApCQkjIHNjX2ZwdXNlZCA9IDEKKwljZmMxCXYwLCAkMzEKKyNpZiBfTUlQU19GUFNFVCA9PSAzMgorICAgICAgICBGUFJFRzY0X1MoJGYyMCwgU0NfRlBSRUdTKygoRjIwLUYwKSpSRUdTWl9GUCksIGEwKQorICAgICAgICBGUFJFRzY0X1MoJGYyMSwgU0NfRlBSRUdTKygoRjIxLUYwKSpSRUdTWl9GUCksIGEwKQorICAgICAgICBGUFJFRzY0X1MoJGYyMiwgU0NfRlBSRUdTKygoRjIyLUYwKSpSRUdTWl9GUCksIGEwKQorICAgICAgICBGUFJFRzY0X1MoJGYyMywgU0NfRlBSRUdTKygoRjIzLUYwKSpSRUdTWl9GUCksIGEwKQorICAgICAgICBGUFJFRzY0X1MoJGYyNCwgU0NfRlBSRUdTKygoRjI0LUYwKSpSRUdTWl9GUCksIGEwKQorICAgICAgICBGUFJFRzY0X1MoJGYyNSwgU0NfRlBSRUdTKygoRjI1LUYwKSpSRUdTWl9GUCksIGEwKQorICAgICAgICBGUFJFRzY0X1MoJGYyNiwgU0NfRlBSRUdTKygoRjI2LUYwKSpSRUdTWl9GUCksIGEwKQorICAgICAgICBGUFJFRzY0X1MoJGYyNywgU0NfRlBSRUdTKygoRjI3LUYwKSpSRUdTWl9GUCksIGEwKQorICAgICAgICBGUFJFRzY0X1MoJGYyOCwgU0NfRlBSRUdTKygoRjI4LUYwKSpSRUdTWl9GUCksIGEwKQorICAgICAgICBGUFJFRzY0X1MoJGYyOSwgU0NfRlBSRUdTKygoRjI5LUYwKSpSRUdTWl9GUCksIGEwKQorICAgICAgICBGUFJFRzY0X1MoJGYzMCwgU0NfRlBSRUdTKygoRjMwLUYwKSpSRUdTWl9GUCksIGEwKQorICAgICAgICBGUFJFRzY0X1MoJGYzMSwgU0NfRlBSRUdTKygoRjMxLUYwKSpSRUdTWl9GUCksIGEwKQorI2Vsc2UKKyAgICAgICAgc3djMSAgICAkZjIwLCBTQ19GUFJFR1MrKChGMjAtRjApKlJFR1NaX0ZQKShhMCkKKyAgICAgICAgc3djMSAgICAkZjIxLCBTQ19GUFJFR1MrKChGMjEtRjApKlJFR1NaX0ZQKShhMCkKKyAgICAgICAgc3djMSAgICAkZjIyLCBTQ19GUFJFR1MrKChGMjItRjApKlJFR1NaX0ZQKShhMCkKKyAgICAgICAgc3djMSAgICAkZjIzLCBTQ19GUFJFR1MrKChGMjMtRjApKlJFR1NaX0ZQKShhMCkKKyAgICAgICAgc3djMSAgICAkZjI0LCBTQ19GUFJFR1MrKChGMjQtRjApKlJFR1NaX0ZQKShhMCkKKyAgICAgICAgc3djMSAgICAkZjI1LCBTQ19GUFJFR1MrKChGMjUtRjApKlJFR1NaX0ZQKShhMCkKKyAgICAgICAgc3djMSAgICAkZjI2LCBTQ19GUFJFR1MrKChGMjYtRjApKlJFR1NaX0ZQKShhMCkKKyAgICAgICAgc3djMSAgICAkZjI3LCBTQ19GUFJFR1MrKChGMjctRjApKlJFR1NaX0ZQKShhMCkKKyAgICAgICAgc3djMSAgICAkZjI4LCBTQ19GUFJFR1MrKChGMjgtRjApKlJFR1NaX0ZQKShhMCkKKyAgICAgICAgc3djMSAgICAkZjI5LCBTQ19GUFJFR1MrKChGMjktRjApKlJFR1NaX0ZQKShhMCkKKyAgICAgICAgc3djMSAgICAkZjMwLCBTQ19GUFJFR1MrKChGMzAtRjApKlJFR1NaX0ZQKShhMCkKKyAgICAgICAgc3djMSAgICAkZjMxLCBTQ19GUFJFR1MrKChGMzEtRjApKlJFR1NaX0ZQKShhMCkKKyNlbmRpZgorCVJFR19TCXYwLCBTQ19GUFJFR1MrKChGU1ItRjApKlJFR1NaKShhMCkKKyNlbmRpZiAvKiAhU09GVEZMT0FUICovCisJUkVTVE9SRV9HUDY0CisJUFRSX0FERFUgc3AsIEZSQU1FU1oKKwlqCXJhCisJIG1vdmUJdjAsIHplcm8KK0VORChfc2V0am1wKQorCitMRUFGKF9sb25nam1wLCBGUkFNRVNaKQorCVBUUl9TVUJVIHNwLCBGUkFNRVNaCisJU0VUVVBfR1A2NChHUE9GRiwgX2xvbmdqbXApCisJU0FWRV9HUChHUE9GRikKKwkuc2V0ICAgIG5vcmVvcmRlcgorCVJFR19MCXYwLCBTQ19SRUdTK1pFUk8qUkVHU1ooYTApCisJYm5lCXYwLCAweEFDRURCQURFLCBib3RjaAkJIyBqdW1wIGlmIGVycm9yCisJUkVHX0wJcmEsIFNDX1BDKGEwKQorCVJFR19MCXYwLCBTQ19GUFJFR1MrKChGU1ItRjApKlJFR1NaKShhMCkKKwlSRUdfTAlzMCwgU0NfUkVHUytTMCpSRUdTWihhMCkKKwlSRUdfTAlzMSwgU0NfUkVHUytTMSpSRUdTWihhMCkKKwlSRUdfTAlzMiwgU0NfUkVHUytTMipSRUdTWihhMCkKKwlSRUdfTAlzMywgU0NfUkVHUytTMypSRUdTWihhMCkKKwlSRUdfTAlzNCwgU0NfUkVHUytTNCpSRUdTWihhMCkKKwlSRUdfTAlzNSwgU0NfUkVHUytTNSpSRUdTWihhMCkKKwlSRUdfTAlzNiwgU0NfUkVHUytTNipSRUdTWihhMCkKKwlSRUdfTAlzNywgU0NfUkVHUytTNypSRUdTWihhMCkKKwlSRUdfTAlzOCwgU0NfUkVHUytTOCpSRUdTWihhMCkKKwlSRUdfTAlncCwgU0NfUkVHUytHUCpSRUdTWihhMCkKKwlSRUdfTAlzcCwgU0NfUkVHUytTUCpSRUdTWihhMCkKKyNpZiAhZGVmaW5lZChTT0ZURkxPQVQpCisJY3RjMQl2MCwgJDMxCisjaWYgX01JUFNfRlBTRVQgPT0gMzIKKyAgICAgICAgRlBSRUc2NF9MKCRmMjAsIFNDX0ZQUkVHUysoKEYyMC1GMCkqUkVHU1pfRlApLCBhMCkKKyAgICAgICAgRlBSRUc2NF9MKCRmMjEsIFNDX0ZQUkVHUysoKEYyMS1GMCkqUkVHU1pfRlApLCBhMCkKKyAgICAgICAgRlBSRUc2NF9MKCRmMjIsIFNDX0ZQUkVHUysoKEYyMi1GMCkqUkVHU1pfRlApLCBhMCkKKyAgICAgICAgRlBSRUc2NF9MKCRmMjMsIFNDX0ZQUkVHUysoKEYyMy1GMCkqUkVHU1pfRlApLCBhMCkKKyAgICAgICAgRlBSRUc2NF9MKCRmMjQsIFNDX0ZQUkVHUysoKEYyNC1GMCkqUkVHU1pfRlApLCBhMCkKKyAgICAgICAgRlBSRUc2NF9MKCRmMjUsIFNDX0ZQUkVHUysoKEYyNS1GMCkqUkVHU1pfRlApLCBhMCkKKyAgICAgICAgRlBSRUc2NF9MKCRmMjYsIFNDX0ZQUkVHUysoKEYyNi1GMCkqUkVHU1pfRlApLCBhMCkKKyAgICAgICAgRlBSRUc2NF9MKCRmMjcsIFNDX0ZQUkVHUysoKEYyNy1GMCkqUkVHU1pfRlApLCBhMCkKKyAgICAgICAgRlBSRUc2NF9MKCRmMjgsIFNDX0ZQUkVHUysoKEYyOC1GMCkqUkVHU1pfRlApLCBhMCkKKyAgICAgICAgRlBSRUc2NF9MKCRmMjksIFNDX0ZQUkVHUysoKEYyOS1GMCkqUkVHU1pfRlApLCBhMCkKKyAgICAgICAgRlBSRUc2NF9MKCRmMzAsIFNDX0ZQUkVHUysoKEYzMC1GMCkqUkVHU1pfRlApLCBhMCkKKyAgICAgICAgRlBSRUc2NF9MKCRmMzEsIFNDX0ZQUkVHUysoKEYzMS1GMCkqUkVHU1pfRlApLCBhMCkKKyNlbHNlCisgICAgICAgIGx3YzEgICAgJGYyMCwgU0NfRlBSRUdTKygoRjIwLUYwKSpSRUdTWl9GUCkoYTApCisgICAgICAgIGx3YzEgICAgJGYyMSwgU0NfRlBSRUdTKygoRjIxLUYwKSpSRUdTWl9GUCkoYTApCisgICAgICAgIGx3YzEgICAgJGYyMiwgU0NfRlBSRUdTKygoRjIyLUYwKSpSRUdTWl9GUCkoYTApCisgICAgICAgIGx3YzEgICAgJGYyMywgU0NfRlBSRUdTKygoRjIzLUYwKSpSRUdTWl9GUCkoYTApCisgICAgICAgIGx3YzEgICAgJGYyNCwgU0NfRlBSRUdTKygoRjI0LUYwKSpSRUdTWl9GUCkoYTApCisgICAgICAgIGx3YzEgICAgJGYyNSwgU0NfRlBSRUdTKygoRjI1LUYwKSpSRUdTWl9GUCkoYTApCisgICAgICAgIGx3YzEgICAgJGYyNiwgU0NfRlBSRUdTKygoRjI2LUYwKSpSRUdTWl9GUCkoYTApCisgICAgICAgIGx3YzEgICAgJGYyNywgU0NfRlBSRUdTKygoRjI3LUYwKSpSRUdTWl9GUCkoYTApCisgICAgICAgIGx3YzEgICAgJGYyOCwgU0NfRlBSRUdTKygoRjI4LUYwKSpSRUdTWl9GUCkoYTApCisgICAgICAgIGx3YzEgICAgJGYyOSwgU0NfRlBSRUdTKygoRjI5LUYwKSpSRUdTWl9GUCkoYTApCisgICAgICAgIGx3YzEgICAgJGYzMCwgU0NfRlBSRUdTKygoRjMwLUYwKSpSRUdTWl9GUCkoYTApCisgICAgICAgIGx3YzEgICAgJGYzMSwgU0NfRlBSRUdTKygoRjMxLUYwKSpSRUdTWl9GUCkoYTApCisjZW5kaWYKKyNlbmRpZiAvKiAhU09GVEZMT0FUICovCisJYm5lCWExLCB6ZXJvLCAxZgorCSBub3AKKwlsaQlhMSwgMQkJCSMgbmV2ZXIgcmV0dXJuIDAhCisxOgorCWoJcmEKKwkgbW92ZQl2MCwgYTEKKworYm90Y2g6CisJamFsCWxvbmdqbXBlcnJvcgorCW5vcAorCWphbAlhYm9ydAorCW5vcAorCVJFU1RPUkVfR1A2NAorCVBUUl9BRERVIHNwLCBGUkFNRVNaCitFTkQoX2xvbmdqbXApCisKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL2Jpb25pYy9hdGV4aXQuaCBiL2xpYmMvYXJjaC1taXBzL2Jpb25pYy9hdGV4aXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NTkwMDhjCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHMvYmlvbmljL2F0ZXhpdC5oCkBAIC0wLDAgKzEsMzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworZXh0ZXJuIHZvaWQgKl9fZHNvX2hhbmRsZTsKK2V4dGVybiBpbnQgX19jeGFfYXRleGl0KHZvaWQgKCpmdW5jKSh2b2lkICopLCB2b2lkICphcmcsIHZvaWQgKmRzbyk7CisKK19fYXR0cmlidXRlX18gKCh2aXNpYmlsaXR5ICgiaGlkZGVuIikpKQoraW50IGF0ZXhpdCh2b2lkICgqZnVuYykodm9pZCkpCit7CisgIHJldHVybiAoX19jeGFfYXRleGl0KCh2b2lkICgqKSh2b2lkICopKWZ1bmMsICh2b2lkICopMCwgJl9fZHNvX2hhbmRsZSkpOworfQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvYmlvbmljL2J6ZXJvLlMgYi9saWJjL2FyY2gtbWlwcy9iaW9uaWMvYnplcm8uUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NzM5MzQ1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHMvYmlvbmljL2J6ZXJvLlMKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCS50ZXh0CisKKy8qCisgKiB2b2lkIGJ6ZXJvKHZvaWQgKnMsIHNpemVfdCBuKTsKKyAqLworCS50eXBlCWJ6ZXJvLCBAZnVuY3Rpb24KKwkuZ2xvYmFsCWJ6ZXJvCisJLmFsaWduCTQKKwkuZW50CWJ6ZXJvCisJLnNldAlub3Jlb3JkZXIKK2J6ZXJvOgorCS5jcGxvYWQJJHQ5CisJbW92ZQkkYTIsJGExCisJbGEJJHQ5LG1lbXNldAorCWoJJHQ5CisJIG1vdmUJJGExLCR6ZXJvCisJLmVuZAliemVybworCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9iaW9uaWMvY2FjaGVmbHVzaC5jIGIvbGliYy9hcmNoLW1pcHMvYmlvbmljL2NhY2hlZmx1c2guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45N2U2N2Q0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHMvYmlvbmljL2NhY2hlZmx1c2guYwpAQCAtMCwwICsxLDEwMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN5cy9jYWNoZWN0bC5oPgorCisjaWZkZWYgREVCVUcKKyNpbmNsdWRlIDxwcml2YXRlL2xpYmNfbG9nZ2luZy5oPgorI2RlZmluZSAgWExPRyguLi4pIF9fbGliY19mb3JtYXRfbG9nKEFORFJPSURfTE9HX0RFQlVHLCJsaWJjLWNhY2hlZmx1c2giLF9fVkFfQVJHU19fKQorI2VuZGlmCisKKy8qCisgKiBMaW51eCBoaXN0b3JpY2FsbHkgZGVmaW5lcyBhIGNhY2hlZmx1c2goMykgcm91dGluZSBmb3IgTUlQUworICogd2l0aCB0aGlzIHNpZ25hdHVyZToKKyAqIGludCBjYWNoZWZsdXNoKGNoYXIgKmFkZHIsIGludCBuYnl0ZXMsIGludCBjYWNoZSk7CisgKgorICogQW5kcm9pZCBkZWZpbmVzIGFuIGFsdGVybmF0ZSBjYWNoZWZsdXNoIHJvdXRpbmUgd2hpY2ggZXhwb3NlcyB0aGUKKyAqIEFSTSBzeXN0ZW0gY2FsbCBpbnRlcmZhY2U6CisgKiBpbnQgY2FjaGVmbHVzaCAobG9uZyBzdGFydCwgbG9uZyBlbmQsIGxvbmcgZmxhZ3MpCisgKgorICogVGhpcyBpcyBhbiBhdHRlbXB0IHRvIG1haW50YWluIGNvbXBhdGliaWxpdHkgYmV0d2VlbiB0aGUgaGlzdG9yaWNhbCBNSVBTCisgKiB1c2FnZSBmb3Igc29mdHdhcmUgcHJldmlvdXNseSBwb3J0ZWQgdG8gTUlQUyBhbmQgQW5kcm9pZCBzcGVjaWZpYworICogdXNlcyBvZiBjYWNoZWZsdXNoKCkKKyAqCisgKiBVc2UgdGhlIGdjYyBfX2NsZWFyX2NhY2hlIGJ1aWx0aW4gaWYgcG9zc2libGUuIFRoaXMgd2lsbCBnZW5lcmF0ZSBpbmxpbmUgc3luY2kKKyAqIGluc3RydWN0aW9ucyBpZiBhdmFpbGFibGUgb3IgY2FsbCBfZmx1c2hfY2FjaGUoc3RhcnQsIGxlbiwgQkNBQ0hFKSBkaXJlY3RseQorICovCisKKyNpZiBkZWZpbmVkIChfX0dOVUNfXykKKyNkZWZpbmUgR0NDX1ZFUlNJT04gKChfX0dOVUNfXyoxMDAwMCkgKyBfX0dOVUNfTUlOT1JfXyoxMDAgKyBfX0dOVUNfUEFUQ0hMRVZFTF9fKQorI2VuZGlmCisKKy8qIFRoaXMgaXMgdGhlIEFuZHJvaWQgc2lnbmF0dXJlICovCitpbnQgY2FjaGVmbHVzaCAobG9uZyBzdGFydCwgbG9uZyBlbmQsIGxvbmcgZmxhZ3MpCit7CisJaWYgKGVuZCA8IHN0YXJ0KSB7CisJCS8qCisJCSAqIEl0IGxvb2tzIGxpa2UgdGhpcyBpcyByZWFsbHkgTUlQUyBzdHlsZSBjYWNoZWZsdXNoIGNhbGwKKwkJICogc3RhcnQgPT4gYWRkcgorCQkgKiBlbmQgPT4gbmJ5dGVzCisJCSAqLworI2lmZGVmIERFQlVHCisJCXN0YXRpYyBpbnQgd2FybmVkID0gMDsKKwkJaWYgKCF3YXJuZWQpIHsKKwkJCVhMT0coImNhbGxlZCB3aXRoIChzdGFydCxsZW4pIGluc3RlYWQgb2YgKHN0YXJ0LGVuZCkiKTsKKwkJCXdhcm5lZCA9IDE7CisJCX0KKyNlbmRpZgorCQllbmQgKz0gc3RhcnQ7CisJfQorCisjaWYgIWRlZmluZWQoQVJDSF9NSVBTX1VTRV9GTFVTSENBQ0hFX1NZU0NBTEwpICYmIFwKKwlkZWZpbmVkKEdDQ19WRVJTSU9OKSAmJiAoR0NDX1ZFUlNJT04gPj0gNDAzMDApCisKKyNpZiAoX19taXBzX2lzYV9yZXYgPj0gMikgJiYgKEdDQ19WRVJTSU9OIDwgNDA0MDMpCisJLyoKKwkgKiBNb2RpZnkgInN0YXJ0IiBhbmQgImVuZCIgdG8gYXZvaWQgR0NDIDQuMy4wLTQuNC4yIGJ1ZyBpbgorCSAqIG1pcHNfZXhwYW5kX3N5bmNpX2xvb3AgdGhhdCBtYXkgZXhlY3V0ZSBzeW5jaSBvbmUgbW9yZSB0aW1lLgorCSAqICJzdGFydCIgcG9pbnRzIHRvIHRoZSBmaXJzdCBieXRlIG9mIHRoZSBjYWNoZSBsaW5lLgorCSAqICJlbmQiIHBvaW50cyB0byB0aGUgbGFzdCBieXRlIG9mIHRoZSBsaW5lIGJlZm9yZSB0aGUgbGFzdCBjYWNoZSBsaW5lLgorCSAqIEJlY2F1c2Ugc2l6ZSBpcyBhbHdheXMgYSBtdWx0aXBsZSBvZiA0LCB0aGlzIGlzIHNhZmUgdG8gc2V0CisJICogImVuZCIgdG8gdGhlIGxhc3QgYnl0ZS4KKwkgKi8KKwl7CisJCWludCBsaW5lU2l6ZTsKKwkJYXNtKCJyZGh3ciAlMCwgJDEiIDogIj1yIiAobGluZVNpemUpKTsKKwkJc3RhcnQgPSBzdGFydCAmICgtbGluZVNpemUpOworCQllbmQgPSAoZW5kICYgKC1saW5lU2l6ZSkpIC0gMTsKKwl9CisjZW5kaWYKKwlfX2J1aWx0aW5fX19jbGVhcl9jYWNoZSgoY2hhciAqKXN0YXJ0LCAoY2hhciAqKWVuZCk7CisjZWxzZQorCV9mbHVzaF9jYWNoZSgoY2hhciAqKXN0YXJ0LCBlbmQtc3RhcnQsIEJDQUNIRSk7CisjZW5kaWYKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL2Jpb25pYy9jbG9uZS5TIGIvbGliYy9hcmNoLW1pcHMvYmlvbmljL2Nsb25lLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTRlMThhMgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzL2Jpb25pYy9jbG9uZS5TCkBAIC0wLDAgKzEsMTQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorCisJLnRleHQKKwkudHlwZSBfX3B0aHJlYWRfY2xvbmUsIEBmdW5jdGlvbgorCS5nbG9iYWwgX19wdGhyZWFkX2Nsb25lCisJLmFsaWduIDQKKyAgICAgICAgLmVudCBfX3B0aHJlYWRfY2xvbmUKKworLyoKKyAqIGludCBfX3B0aHJlYWRfY2xvbmUodm9pZCogKCpmbikodm9pZCopLCB2b2lkICpjaGlsZF9zdGFjaywKKyAqCQkJIGludCBmbGFncywgdm9pZCAqYXJnKTsKKyAqLworCitfX3B0aHJlYWRfY2xvbmU6CisgICAgICAgIC5zZXQJbm9yZW9yZGVyCisgICAgICAgIC5jcGxvYWQgJHQ5CisgICAgICAgIC5zZXQJcmVvcmRlcgorCisJIyBzZXQgdXAgY2hpbGQgc3RhY2sKKwlzdWJ1CSRhMSwxNgorCXN3CSRhMCwwKCRhMSkJIyBmbgorCXN3CSRhMyw0KCRhMSkJIyBhcmcKKyMJc3cJJGExKzE2LDgoJGExKQkjIHRscworCisJLyoKKwkgKiBpbnQgc3lzX2Nsb25lKGludCBmbGFncywgdm9pZCAqY2hpbGRfc3RhY2ssIGludCAqcGFyZW50X3RpZHB0ciwKKwkgKgkgc3RydWN0IHVzZXJfZGVzYyAqbmV3dGxzLCBpbnQgKmNoaWxkX3RpZHB0cik7CisJICovCisKKwltb3ZlCSRhMCwkYTIJCSMgZmxhZ3MKKyMJbW92ZQkkYTEsJGExCQkjIGNoaWxkX3N0YWNrCisJbW92ZQkkYTIsJDAJCSMgcGFyZW50X3RpZHB0cgorCW1vdmUJJGEzLCQwCQkjIHVzZXJfZGVzYworCWFuZAkkYTAsfihDTE9ORV9DSElMRF9TRVRUSUQgfCBDTE9ORV9DSElMRF9DTEVBUlRJRCkKKwkJCQkjIG1ha2Ugc3VyZSB0aGUga2VybmVsIGRvZXNuJ3QgYWNjZXNzIGNoaWxkX3RpZHB0cgorCisgICAgICAgIGxpCSR2MCxfX05SX2Nsb25lCisgICAgICAgIHN5c2NhbGwKKworICAgICAgICBibmV6CSRhMywuTF9fZXJyb3IKKworICAgICAgICBiZXF6CSR2MCwuTF9fdGhyZWFkX3N0YXJ0CisKKyAgICAgICAgaiAkcmEKKworLkxfX3RocmVhZF9zdGFydDoKKyAgICAgICAgbHcJJGEwLDAoJHNwKQkjICBmbgorICAgICAgICBsdwkkYTEsNCgkc3ApCSMgIGFyZworICAgICAgICBhZGR1CSRhMiwkc3AsMTYJIyAgdGxzCisKKwkjIHZvaWQgX190aHJlYWRfZW50cnkodm9pZCogKCpmdW5jKSh2b2lkKiksIHZvaWQgKmFyZywgdm9pZCAqdGxzKQorICAgICAgICBsYQkkdDksIF9fdGhyZWFkX2VudHJ5CisgICAgICAgIGoJJHQ5CisKKy5MX19lcnJvcjoKKwltb3ZlCSRhMCwkdjAKKwlsYQkkdDksX19zZXRfZXJybm8KKwlqCSR0OQorCisgICAgICAgIC5lbmQgX19wdGhyZWFkX2Nsb25lCisKKworICAgICMKKyAgICAjIFRoaXMgZnVuY3Rpb24gaXMgZGVmaW5lZCBhczoKKyAgICAjCisgICAgIyAgIHBpZF90ICBfX2Jpb25pY19jbG9uZSggaW50ICBmbGFncywgdm9pZCAqY2hpbGRfc3RhY2ssCisgICAgIyAgICAgICAgICAgICAgICAgICAgICAgICAgcGlkX3QgKnBpZCwgdm9pZCAqdGxzLCBwaWRfdCAqY3RpZCwKKyAgICAjICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgICgqZm4pKHZvaWQgKiksIHZvaWQqIGFyZyApOworICAgICMKKyAgICAjIE5PVEU6IFRoaXMgaXMgbm90IHRoZSBzYW1lIHNpZ25hdHVyZSB0aGFuIHRoZSBHTGliYworICAgICMgICAgICAgX19jbG9uZSBmdW5jdGlvbiBoZXJlICEhIFBsYWNpbmcgJ2ZuJyBhbmQgJ2FyZycKKyAgICAjICAgICAgIGF0IHRoZSBlbmQgb2YgdGhlIHBhcmFtZXRlciBsaXN0IG1ha2VzIHRoZQorICAgICMgICAgICAgaW1wbGVtZW50YXRpb24gbXVjaCBzaW1wbGVyLgorICAgICMKKwkudGV4dAorCS50eXBlIF9fYmlvbmljX2Nsb25lLCBAZnVuY3Rpb24KKwkuZ2xvYmFsIF9fYmlvbmljX2Nsb25lCisJLmFsaWduIDQKKyAgICAgICAgLmVudCBfX2Jpb25pY19jbG9uZQorX19iaW9uaWNfY2xvbmU6CisgICAgICAgIC5zZXQJbm9yZW9yZGVyCisgICAgICAgIC5jcGxvYWQgJHQ5CisgICAgICAgIC5zZXQJcmVvcmRlcgorCisJIyBzZXQgdXAgY2hpbGQgc3RhY2sKKwlzdWJ1CSRhMSwxNgorCWx3CSR0MCwyMCgkc3ApICAgICAjIGZuCisJbHcJJHQxLDI0KCRzcCkgICAgICMgYXJnCisJc3cJJHQwLDAoJGExKQkjIGZuCisJc3cJJHQxLDQoJGExKQkjIGFyZworCisJIyByZW1haW5kZXIgb2YgYXJndW1lbnRzIGFyZSBjb3JyZWN0IGZvciBjbG9uZSBzeXN0ZW0gY2FsbAorICAgICAgICBsaQkkdjAsX19OUl9jbG9uZQorICAgICAgICBzeXNjYWxsCisKKyAgICAgICAgYm5legkkYTMsLkxfX2Vycm9yX2JjCisKKyAgICAgICAgYmVxegkkdjAsLkxfX3RocmVhZF9zdGFydF9iYworCisgICAgICAgIGogJHJhCisKKy5MX190aHJlYWRfc3RhcnRfYmM6CisgICAgICAgIGx3CSRhMCwwKCRzcCkJIyAgZm4KKyAgICAgICAgbHcJJGExLDQoJHNwKQkjICBhcmcKKworCSMgdm9pZCBfX2Jpb25pY19jbG9uZV9lbnRyeShpbnQgKCpmdW5jKSh2b2lkKiksIHZvaWQgKmFyZykKKyAgICAgICAgbGEJJHQ5LF9fYmlvbmljX2Nsb25lX2VudHJ5CisgICAgICAgIGoJJHQ5CisKKy5MX19lcnJvcl9iYzoKKwltb3ZlCSRhMCwkdjAKKwlsYQkkdDksX19zZXRfZXJybm8KKwlqCSR0OQorCisgICAgICAgIC5lbmQgX19iaW9uaWNfY2xvbmUKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL2Jpb25pYy9jcnRiZWdpbi5jIGIvbGliYy9hcmNoLW1pcHMvYmlvbmljL2NydGJlZ2luLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDNhMzQwMQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzL2Jpb25pYy9jcnRiZWdpbi5jCkBAIC0wLDAgKzEsOTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgIi4uLy4uL2Jpb25pYy9saWJjX2luaXRfY29tbW9uLmgiCisjaW5jbHVkZSA8c3RkZGVmLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisKK19fYXR0cmlidXRlX18gKChzZWN0aW9uICgiLnByZWluaXRfYXJyYXkiKSkpCit2b2lkICgqX19QUkVJTklUX0FSUkFZX18pKHZvaWQpID0gKHZvaWQgKCopKHZvaWQpKSAtMTsKKworX19hdHRyaWJ1dGVfXyAoKHNlY3Rpb24gKCIuaW5pdF9hcnJheSIpKSkKK3ZvaWQgKCpfX0lOSVRfQVJSQVlfXykodm9pZCkgPSAodm9pZCAoKikodm9pZCkpIC0xOworCitfX2F0dHJpYnV0ZV9fICgoc2VjdGlvbiAoIi5maW5pX2FycmF5IikpKQordm9pZCAoKl9fRklOSV9BUlJBWV9fKSh2b2lkKSA9ICh2b2lkICgqKSh2b2lkKSkgLTE7CisKKworX19MSUJDX0hJRERFTl9fICB2b2lkIGRvX21pcHNfc3RhcnQodm9pZCAqcmF3X2FyZ3MpIHsKKyAgc3RydWN0b3JzX2FycmF5X3QgYXJyYXk7CisgIGFycmF5LnByZWluaXRfYXJyYXkgPSAmX19QUkVJTklUX0FSUkFZX187CisgIGFycmF5LmluaXRfYXJyYXkgPSAmX19JTklUX0FSUkFZX187CisgIGFycmF5LmZpbmlfYXJyYXkgPSAmX19GSU5JX0FSUkFZX187CisKKyAgX19saWJjX2luaXQocmF3X2FyZ3MsIE5VTEwsICZtYWluLCAmYXJyYXkpOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBwcmVwYXJlcyB0aGUgcmV0dXJuIGFkZHJlc3Mgd2l0aCBhIGJyYW5jaC1hbmQtbGluaworICogaW5zdHJ1Y3Rpb24gKGJhbCkgYW5kIHRoZW4gdXNlcyBhIC5jcGxvYWQgdG8gY29tcHV0ZSB0aGUgR2xvYmFsCisgKiBPZmZzZXQgVGFibGUgKEdPVCkgcG9pbnRlciAoJGdwKS4gVGhlICRncCBpcyB0aGVuIHVzZWQgdG8gbG9hZAorICogdGhlIGFkZHJlc3Mgb2YgX2RvX3N0YXJ0KCkgaW50byAkdDkganVzdCBiZWZvcmUgY2FsbGluZyBpdC4KKyAqIFRlcm1pbmF0aW5nIHRoZSBzdGFjayB3aXRoIGEgTlVMTCByZXR1cm4gYWRkcmVzcy4KKyAqLworX19hc21fXyAoCisiICAgICAgIC5zZXQgcHVzaCAgICAgICAgICAgICAgICAgICBcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorIiAgICAgICAudGV4dCAgICAgICAgICAgICAgICAgICAgICAgXG4iCisiICAgICAgIC5hbGlnbiAgNCAgICAgICAgICAgICAgICAgICBcbiIKKyIgICAgICAgLnR5cGUgX19zdGFydCxAZnVuY3Rpb24gICAgIFxuIgorIiAgICAgICAuZ2xvYmwgX19zdGFydCAgICAgICAgICAgICAgXG4iCisiICAgICAgIC5nbG9ibCAgX3N0YXJ0ICAgICAgICAgICAgICBcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorIiAgICAgICAuZW50ICAgIF9fc3RhcnQgICAgICAgICAgICAgXG4iCisiX19zdGFydDogICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKKyIgX3N0YXJ0OiAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorIiAgICAgICAuZnJhbWUgICAkc3AsMzIsJHJhICAgICAgICAgXG4iCisiICAgICAgIC5tYXNrICAgMHg4MDAwMDAwMCwtNCAgICAgICBcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorIiAgICAgICAuc2V0IG5vcmVvcmRlciAgICAgICAgICAgICAgXG4iCisiICAgICAgIGJhbCAgICAgMWYgICAgICAgICAgICAgICAgICBcbiIKKyIgICAgICAgbm9wICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorIjE6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisiICAgICAgIC5jcGxvYWQgJHJhICAgICAgICAgICAgICAgICBcbiIKKyIgICAgICAgLnNldCByZW9yZGVyICAgICAgICAgICAgICAgIFxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisiICAgICAgIG1vdmUgICAgJGEwLCAkc3AgICAgICAgICAgICBcbiIKKyIgICAgICAgYWRkaXUgICAkc3AsICRzcCwgKC0zMikgICAgIFxuIgorIiAgICAgICBzdyAgICAgICQwLCAyOCgkc3ApICAgICAgICAgXG4iCisiICAgICAgIGxhICAgICAgJHQ5LCBkb19taXBzX3N0YXJ0ICBcbiIKKyIgICAgICAgamFsciAgICAkdDkgICAgICAgICAgICAgICAgIFxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisiMjogICAgIGIgICAgICAgMmIgICAgICAgICAgICAgICAgICBcbiIKKyIgICAgICAgLmVuZCAgICBfX3N0YXJ0ICAgICAgICAgICAgIFxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisiICAgICAgIC5zZXQgcG9wICAgICAgICAgICAgICAgICAgICBcbiIKKyk7CisKKyNpbmNsdWRlICJfX2Rzb19oYW5kbGUuaCIKKyNpbmNsdWRlICJhdGV4aXQuaCIKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL2Jpb25pYy9jcnRiZWdpbl9zby5jIGIvbGliYy9hcmNoLW1pcHMvYmlvbmljL2NydGJlZ2luX3NvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTI1ZGM4YwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzL2Jpb25pYy9jcnRiZWdpbl9zby5jCkBAIC0wLDAgKzEsMzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworZXh0ZXJuIHZvaWQgX19jeGFfZmluYWxpemUodm9pZCAqKTsKK2V4dGVybiB2b2lkICpfX2Rzb19oYW5kbGU7CisKK19fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImhpZGRlbiIpLGRlc3RydWN0b3IpKQordm9pZCBfX29uX2RsY2xvc2UoKSB7CisgIF9fY3hhX2ZpbmFsaXplKCZfX2Rzb19oYW5kbGUpOworfQorCisjaW5jbHVkZSAiX19kc29faGFuZGxlX3NvLmgiCisjaW5jbHVkZSAiYXRleGl0LmgiCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9iaW9uaWMvY3J0ZW5kLlMgYi9saWJjL2FyY2gtbWlwcy9iaW9uaWMvY3J0ZW5kLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjk4NGQwZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzL2Jpb25pYy9jcnRlbmQuUwpAQCAtMCwwICsxLDM3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisJCisJLnNlY3Rpb24gLnByZWluaXRfYXJyYXksICJhdyIKKwkubG9uZyAwCisKKwkuc2VjdGlvbiAuaW5pdF9hcnJheSwgImF3IgorCS5sb25nIDAKKworCS5zZWN0aW9uIC5maW5pX2FycmF5LCAiYXciCisJLmxvbmcgMAorCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9iaW9uaWMvY3J0ZW5kX3NvLlMgYi9saWJjL2FyY2gtbWlwcy9iaW9uaWMvY3J0ZW5kX3NvLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjA5YzQyNwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzL2Jpb25pYy9jcnRlbmRfc28uUwpAQCAtMCwwICsxLDUgQEAKKwkuc2VjdGlvbiAuaW5pdF9hcnJheSwgImF3IgorCS5sb25nIDAKKworCS5zZWN0aW9uIC5maW5pX2FycmF5LCAiYXciCisJLmxvbmcgMApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvYmlvbmljL2Zmcy5TIGIvbGliYy9hcmNoLW1pcHMvYmlvbmljL2Zmcy5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmMzhiMmEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtbWlwcy9iaW9uaWMvZmZzLlMKQEAgLTAsMCArMSw5MiBAQAorLyoJJE5ldEJTRDogZmZzLlMsdiAxLjUgMjAwMy8wNC8wNSAyMzowODo1MiBiamgyMSBFeHAgJAkqLworLyoKKyAqIENvcHlyaWdodCAoYykgMjAwMSBDaHJpc3RvcGhlciBHaWxiZXJ0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gVGhlIG5hbWUgb2YgdGhlIGNvbXBhbnkgbm9yIHRoZSBuYW1lIG9mIHRoZSBhdXRob3IgbWF5IGJlIHVzZWQgdG8KKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljCisgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsCisgKiBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworLyoKKyAqIGZmcyAtIGZpbmQgZmlyc3Qgc2V0IGJpdCwgdGhpcyBhbGdvcml0aG0gaXNvbGF0ZXMgdGhlIGZpcnN0IHNldAorICogYml0LCB0aGVuIG11bHRpcGxpZXMgdGhlIG51bWJlciBieSAweDA0NTBmYmFmIHdoaWNoIGxlYXZlcyB0aGUgdG9wCisgKiA2IGJpdHMgYXMgYW4gaW5kZXggaW50byB0aGUgdGFibGUuICBUaGlzIGFsZ29yaXRobSBzaG91bGQgYmUgYSB3aW4KKyAqIG92ZXIgdGhlIGNoZWNraW5nIGVhY2ggYml0IGluIHR1cm4gYXMgcGVyIHRoZSBDIGNvbXBpbGVkIHZlcnNpb24uCisgKgorICogVGhpcyBpcyB0aGUgZmZzIGFsZ29yaXRobSBkZXZpc2VkIGJ5IGQuc2VhbCBhbmQgcG9zdGVkIHRvIGNvbXAuc3lzLmFybSBvbgorICogMTYgRmViIDE5OTQuCisgKi8KKworCS50ZXh0CisKKwkuZW50CWZmcworCS50eXBlCWZmcywgQGZ1bmN0aW9uCisJLmdsb2JhbAlmZnMKKwkuYWxpZ24JNAorCS5zZXQgbm9yZW9yZGVyCitmZnM6CisjaWYgKF9fbWlwcz09MzIpCisJc3VidQkkdDAsJDAsJGEwCisJYW5kCSRhMCwkdDAKKwljbHoJJHQwLCRhMAorCWxpCSR2MCwzMgorCWoJJHJhCQorCSBzdWJ1CSR2MCwkdDAKKyNlbHNlCisvKiBTaXplIG9mIHRoZSBmZnMgcm91dGluZSBpbiBieXRlcworICogVGhpcyBpcyB1c2VkIHRvIGluZGV4IC5MX2Zmc190YWJsZSBmcm9tICR0OQorICogRklYTUU6IHRoZXJlIG11c3QgYmUgYSBiZXR0ZXIgd2F5IHRvIGRvIHRoaXMKKyAqLworI2RlZmluZSBGRlNTSVpFCTEyKjQKKwlzdWJ1CSR0MCwkMCwkYTAKKwlhbmQJJGEwLCR0MAorCS8qCisJICogbm93IGEwIGhhcyBhdCBtb3N0IG9uZSBzZXQgYml0LCBjYWxsIHRoaXMgWAorCSAqIGlmIFggPSAwLCBhbGwgZnVydGhlciBpbnN0cnVjdGlvbnMgYXJlIHNraXBwZWQKKwkgKi8KKwlzbGwJJHQwLCRhMCw0CS8qIHQwID0gWCAqIDB4MDAwMDAwMTAgKi8KKwlvcgkkYTAsJHQwCQkvKiBhMCA9IFggKiAweDAwMDAwMDExICovIAorCXNsbAkkdDAsJGEwLDYJLyogdDAgPSBYICogMHgwMDAwMDQ0MCAqLworCW9yCSRhMCwkdDAJCS8qIGEwID0gWCAqIDB4MDAwMDA0NTEgKi8KKwlzbGwJJHQwLCRhMCwxNgkvKiB0MCA9IFggKiAweDA0NTEwMDAwICovCisJc3VidQkkYTAsJHQwLCRhMAkvKiBhMCA9IFggKiAweDA0NTBmYmFmICovCisJCisJLyogbm93IGxvb2t1cCBpbiB0YWJsZSBpbmRleGVkIG9uIHRvcCA2IGJpdHMgb2YgYTAgKi8KKwlzcmwJJGEwLDI1CisJYWRkdQkkdDksJGEwCisJagkkcmEKKwkgbGJ1CSR2MCxGRlNTSVpFKCR0OSkKKy5MX2Zmc190YWJsZToKKy8qICAgICAgICAgICAgICAgMCAgIDEgICAyICAgMyAgIDQgICA1ICAgNiAgIDcgICAgICAgICAgICovCisJLmJ5dGUJIDAsICAxLCAgMiwgMTMsICAzLCAgNywgIDAsIDE0ICAvKiAgMC0gNyAqLworCS5ieXRlCSA0LCAgMCwgIDgsICAwLCAgMCwgIDAsICAwLCAxNSAgLyogIDgtMTUgKi8KKwkuYnl0ZQkxMSwgIDUsICAwLCAgMCwgIDksICAwLCAgMCwgMjYgIC8qIDE2LTIzICovCisJLmJ5dGUJIDAsICAwLCAgMCwgIDAsICAwLCAyMiwgMjgsIDE2ICAvKiAyNC0zMSAqLworCS5ieXRlCTMyLCAxMiwgIDYsICAwLCAgMCwgIDAsICAwLCAgMAkvKiAzMi0zOSAqLworCS5ieXRlCTEwLCAgMCwgIDAsIDI1LCAgMCwgIDAsIDIxLCAyNyAgLyogNDAtNDcgKi8KKwkuYnl0ZQkzMSwgIDAsICAwLCAgMCwgIDAsIDI0LCAgMCwgMjAgIC8qIDQ4LTU1ICovCisJLmJ5dGUgICAzMCwgIDAsIDIzLCAxOSwgMjksIDE4LCAxNywgIDAgIC8qIDU2LTYzICovCisJCisjZW5kaWYKKwkuZW5kCWZmcwpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvYmlvbmljL2Z1dGV4X21pcHMuUyBiL2xpYmMvYXJjaC1taXBzL2Jpb25pYy9mdXRleF9taXBzLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmE5NTNjYQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzL2Jpb25pYy9mdXRleF9taXBzLlMKQEAgLTAsMCArMSwxNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KKworI2RlZmluZSBGVVRFWF9XQUlUIDAKKyNkZWZpbmUgRlVURVhfV0FLRSAxCisKKy8qCisgKiBfX2Z1dGV4X3dhaXQoKmZ0eCwgdmFsLCAqdGltZXNwZWMpCisgKiBmdXRleF9zeXNjYWxsKCpmdHgsIG9wLCB2YWwsICp0aW1lc3BlYywgKmFkZHIyLCB2YWwzKQorICovCisJLnR5cGUJX19mdXRleF93YWl0LCBAZnVuY3Rpb24KKwkuZ2xvYmFsCV9fZnV0ZXhfd2FpdAorCS5hbGlnbgk0CisJLmVudAlfX2Z1dGV4X3dhaXQKK19fZnV0ZXhfd2FpdDoKKwlzdWJ1CSRzcCw0KjYKKwlzdwkkMCwyMCgkc3ApCS8qIHZhbDMgKi8KKwlzdwkkMCwxNigkc3ApCS8qIGFkZHIyICovCisJbW92ZQkkYTMsJGEyCQkvKiB0aW1lc3BlYyAqLworCW1vdmUJJGEyLCRhMQkJLyogdmFsICovCisJbGkJJGExLEZVVEVYX1dBSVQJLyogb3AgKi8KKyMJbW92ZQkkYTAsJGEwCQkvKiBmdHggKi8KKwlsaQkkdjAsX19OUl9mdXRleAorCXN5c2NhbGwKKwkuc2V0IG5vcmVvcmRlcgorCWJuZXoJJGEzLCAxZgkJLyogQ2hlY2sgZm9yIGVycm9yICovCisgICAgICAgICBuZWcJJHYwCQkvKiBOZWdhdGUgZXJyb3IgbnVtYmVyIGlmIGl0J3MgdmFsaWQgKi8KKwltb3ZlCSR2MCwkMAkJLyogT3RoZXJ3aXNlIHJldHVybiAwICovCisxOgorCS5zZXQgcmVvcmRlcgorCWFkZHUJJHNwLDQqNgorCWoJJHJhCisJLmVuZAlfX2Z1dGV4X3dhaXQKKworLyoKKyAqIGludCBfX2Z1dGV4X3dha2Uodm9sYXRpbGUgdm9pZCAqZnR4LCBpbnQgY291bnQpCisgKiBpbnQgZnV0ZXhfc3lzY2FsbCgqZnR4LCBvcCwgdmFsLCAqdGltZXNwZWMsICphZGRyMiwgdmFsMykKKyAqLworCS50eXBlCV9fZnV0ZXhfd2FrZSwgQGZ1bmN0aW9uCisJLmdsb2JsCV9fZnV0ZXhfd2FrZQorCS5hbGlnbgk0CisJLmVudAlfX2Z1dGV4X3dha2UKK19fZnV0ZXhfd2FrZToKKwlzdWJ1CSRzcCw0KjYKKwlzdwkkMCwyMCgkc3ApCS8qIHZhbDMgKi8KKwlzdwkkMCwxNigkc3ApCS8qIGFkZHIyICovCisJbW92ZQkkYTMsJDAJCS8qIHRpbWVzcGVjICovCisJbW92ZQkkYTIsJGExCQkvKiB2YWwgKi8KKwlsaQkkYTEsRlVURVhfV0FLRQkvKiBvcCAqLworIwltb3ZlCSRhMCwkYTAJCS8qIGZ0eCAqLworCWxpCSR2MCxfX05SX2Z1dGV4CisJc3lzY2FsbAorCS5zZXQgbm9yZW9yZGVyCisJYm5legkkYTMsIDFmCQkvKiBDaGVjayBmb3IgZXJyb3IgKi8KKyAgICAgICAgIG5lZwkkdjAJCS8qIE5lZ2F0ZSBlcnJvciBudW1iZXIgaWYgaXQncyB2YWxpZCAqLworCW1vdmUJJHYwLCQwCQkvKiBPdGhlcndpc2UgcmV0dXJuIDAgKi8KKzE6CisJLnNldCByZW9yZGVyCisJYWRkdQkkc3AsNCo2CisJagkkcmEKKwkuZW5kCV9fZnV0ZXhfd2FrZQorCisvKiBfX2Z1dGV4X3N5c2NhbGwzKCpmdHgsIG9wLCB2YWwpCisgKiBmdXRleF9zeXNjYWxsKCpmdHgsIG9wLCB2YWwsICp0aW1lc3BlYywgKmFkZHIyLCB2YWwzKQorICovCisJLnR5cGUJX19mdXRleF9zeXNjYWxsMywgQGZ1bmN0aW9uCisJLmdsb2JhbAlfX2Z1dGV4X3N5c2NhbGwzCisJLmFsaWduCTQKKwkuZW50CV9fZnV0ZXhfc3lzY2FsbDMKK19fZnV0ZXhfc3lzY2FsbDM6CisJc3VidQkkc3AsNCo2CisJc3cJJDAsMjAoJHNwKQkvKiB2YWwzICovCisJc3cJJDAsMTYoJHNwKQkvKiBhZGRyMiAqLworCW1vdmUJJGEzLCQwCQkvKiB0aW1lc3BlYyAqLworIwltb3ZlCSRhMiwkYTIJCS8qIHZhbCAqLworIwlsaQkkYTEsJGExCQkvKiBvcCAqLworIwltb3ZlCSRhMCwkYTAJCS8qIGZ0eCAqLworCWxpCSR2MCxfX05SX2Z1dGV4CisJc3lzY2FsbAorCS5zZXQgbm9yZW9yZGVyCisJYm5legkkYTMsIDFmCQkvKiBDaGVjayBmb3IgZXJyb3IgKi8KKyAgICAgICAgIG5lZwkkdjAJCS8qIE5lZ2F0ZSBlcnJvciBudW1iZXIgaWYgaXQncyB2YWxpZCAqLworCW1vdmUJJHYwLCQwCQkvKiBPdGhlcndpc2UgcmV0dXJuIDAgKi8KKzE6CisJLnNldCByZW9yZGVyCisJYWRkdQkkc3AsNCo2CisJagkkcmEKKwkuZW5kCV9fZnV0ZXhfc3lzY2FsbDMKKworLyogX19mdXRleF9zeXNjYWxsNCgqZnR4LCBvcCwgdmFsKQorICogZnV0ZXhfc3lzY2FsbCgqZnR4LCBvcCwgdmFsLCAqdGltZXNwZWMsICphZGRyMiwgdmFsMykKKyAqLworCS50eXBlCV9fZnV0ZXhfc3lzY2FsbDQsIEBmdW5jdGlvbgorCS5nbG9iYWwJX19mdXRleF9zeXNjYWxsNAorCS5hbGlnbgk0CisJLmVudAlfX2Z1dGV4X3N5c2NhbGw0CitfX2Z1dGV4X3N5c2NhbGw0OgorCXN1YnUJJHNwLDQqNgorCXN3CSQwLDIwKCRzcCkJLyogdmFsMyAqLworCXN3CSQwLDE2KCRzcCkJLyogYWRkcjIgKi8KKyMJbW92ZQkkYTMsJGEzCQkvKiB0aW1lc3BlYyAqLworIwltb3ZlCSRhMiwkYTIJCS8qIHZhbCAqLworIwlsaQkkYTEsJGExCQkvKiBvcCAqLworIwltb3ZlCSRhMCwkYTAJCS8qIGZ0eCAqLworCWxpCSR2MCxfX05SX2Z1dGV4CisJc3lzY2FsbAorCS5zZXQgbm9yZW9yZGVyCisJYm5legkkYTMsIDFmCQkvKiBDaGVjayBmb3IgZXJyb3IgKi8KKyAgICAgICAgIG5lZwkkdjAJCS8qIE5lZ2F0ZSBlcnJvciBudW1iZXIgaWYgaXQncyB2YWxpZCAqLworCW1vdmUJJHYwLCQwCQkvKiBPdGhlcndpc2UgcmV0dXJuIDAgKi8KKzE6CisJLnNldCByZW9yZGVyCisJYWRkdQkkc3AsNCo2CisJagkkcmEKKwkuZW5kCV9fZnV0ZXhfc3lzY2FsbDQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL2Jpb25pYy9tZW1jbXAxNi5TIGIvbGliYy9hcmNoLW1pcHMvYmlvbmljL21lbWNtcDE2LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTJiMjU0NAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzL2Jpb25pYy9tZW1jbXAxNi5TCkBAIC0wLDAgKzEsNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKwkudGV4dAorCisvKgorICogdTQgX19tZW1jbXAxNihjb25zdCB1MiogczAsIGNvbnN0IHUyKiBzMSwgc2l6ZV90IGNvdW50KTsKKyAqLworCS50eXBlCV9fbWVtY21wMTYsIEBmdW5jdGlvbgorCS5nbG9iYWwJX19tZW1jbXAxNgorCS5hbGlnbgk0CisJLmVudCBfX21lbWNtcDE2CitfX21lbWNtcDE2OgorCWxpCSR0MCwwCisJbGkJJHQxLDAKKwliZXF6CSRhMixkb25lCQkvKiAwIGxlbmd0aCBzdHJpbmcgKi8gCisJYmVxCSRhMCwkYTEsZG9uZQkJLyogc3RyaW5ncyBhcmUgaWRlbnRpY2FsICovCisKKwkvKiBVbm9wdGltaXNlZC4uLiAqLworMToJbGh1CSR0MCwwKCRhMCkKKwlsaHUJJHQxLDAoJGExKQorCWFkZHUJJGExLDIKKwlibmUJJHQwLCR0MSxkb25lCisJYWRkdQkkYTAsMgorCXN1YnUJJGEyLDEKKwlibmV6CSRhMiwxYgorCitkb25lOgorCXN1YnUJJHYwLCR0MCwkdDEKKwlqCSRyYQorICAgICAgICAuZW5kIF9fbWVtY21wMTYKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL2Jpb25pYy9tZW1tb3ZlLmMgYi9saWJjL2FyY2gtbWlwcy9iaW9uaWMvbWVtbW92ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmNDUyMmIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtbWlwcy9iaW9uaWMvbWVtbW92ZS5jCkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzdHJpbmdzLmg+CisKK3ZvaWQgKm1lbW1vdmUodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBuKQoreworICBjb25zdCBjaGFyICpwID0gc3JjOworICBjaGFyICpxID0gZHN0OworICAvKiBXZSBjYW4gdXNlIHRoZSBvcHRpbWl6ZWQgbWVtY3B5IGlmIHRoZSBkZXN0aW5hdGlvbiBpcyBjb21wbGV0ZWx5IGJlbG93IHRoZQorICAgKiBzb3VyY2UgKGkuZS4gcSArIG4gPD0gcCksIG9yIGlmIGl0IGlzIGNvbXBsZXRlbHkgb3ZlciBpdCAoaS5lLiBxID49IHArbikuCisgICAqLworICBpZiAoX19idWlsdGluX2V4cGVjdCgocSArIG4gPCBwKSB8fCAocSA+PSBwICsgbiksIDEpKSB7CisgICAgcmV0dXJuIG1lbWNweShkc3QsIHNyYywgbik7CisgIH0gZWxzZSB7CisgICAgYmNvcHkoc3JjLCBkc3QsIG4pOworICAgIHJldHVybiBkc3Q7CisgIH0KK30KZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL2Jpb25pYy9waXBlLlMgYi9saWJjL2FyY2gtbWlwcy9iaW9uaWMvcGlwZS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiYWYyNDYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtbWlwcy9iaW9uaWMvcGlwZS5TCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworLyoKKyAqIFRoZSBNSVBTIHBpcGUgc3lzY2FsbCByZXR1cm5zIHJlc3VsdHMgaW4gdHdvIHJlZ2lzdGVycywgd2hpY2gKKyAqIHdlIGhhdmUgdG8gY29weSBpbnRvIHRoZSBzdXBwbGllZCBhcnJheS4gVGhpcyBwcmV2ZW50cyB1cyBmcm9tCisgKiB1c2luZyBhbiBhdXRvLWdlbmVyYXRlZCBzdHViLgorICovCisKKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CisKKwkudGV4dAorCisvKiBpbnQgcGlwZShpbnRbXSkgKi8KKworCS50eXBlCXBpcGUsQGZ1bmN0aW9uCisJLmdsb2JhbAlwaXBlCisJLmFsaWduCTQKKwkuZW50CXBpcGUKK3BpcGU6CisJLnNldAlub3Jlb3JkZXIKKwkuY3Bsb2FkCSR0OQorCWxpCSR2MCxfX05SX3BpcGUKKwlzeXNjYWxsCQkJLyogc3lzY2FsbCByZXR1cm5zIHJlc3VsdHMgaW4gdjAsdjEgKi8KKwlibmV6CSRhMywgMWYJCS8qIGNoZWNrIGVycm5vICovCisJIG5vcAorCXN3CSR2MCwgMCgkYTApCisJc3cJJHYxLCA0KCRhMCkKKwlqCSRyYQorCSBtb3ZlCSR2MCwgJHplcm8KKzE6CisJbGEJJHQ5LCBfX3NldF9lcnJubworCWoJJHQ5CisJIG1vdmUgICAgJGEwLCAkdjAJLyogZGVsYXkgc2xvdCwgcHJlcGFyZSBhcmdzIGZvciBfX3NldF9lcnJubyAqLworCS5lbmQJcGlwZQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvYmlvbmljL3NldGptcC5TIGIvbGliYy9hcmNoLW1pcHMvYmlvbmljL3NldGptcC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjMjExOTUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtbWlwcy9iaW9uaWMvc2V0am1wLlMKQEAgLTAsMCArMSwyMTEgQEAKKy8qICAgICAgJE9wZW5CU0Q6IHNldGptcC5TLHYgMS41IDIwMDUvMDgvMDcgMTY6NDA6MTUgZXNwaWUgRXhwICQgKi8KKworLyoKKyAqIENvcHlyaWdodCAoYykgMjAwMS0yMDAyIE9wc3ljb24gQUIgICh3d3cub3BzeWNvbi5zZSAvIHd3dy5vcHN5Y29uLmNvbSkKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgT3BzeWNvbiBBQiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MKKyAqIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKgorICovCisKKyNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgorI2luY2x1ZGUgPG1hY2hpbmUvcmVnbnVtLmg+CisjaW5jbHVkZSA8bWFjaGluZS9zaWduYWwuaD4KKworLyoKKyAqIHNldGptcCwgbG9uZ2ptcCBpbXBsZW1lbnRhdGlvbiBmb3IgbGliYy4gdGhpcyBjb2RlIGRlcGVuZHMKKyAqIG9uIHRoZSBsYXlvdXQgb2YgdGhlIHN0cnVjdCBzaWdjb250ZXh0IGluIG1hY2hpbmUvc2lnbmFsLmguCisgKgorICovCisKK0ZSQU1FU1o9IE1LRlNJWigyLDYpCitBMU9GRj0gRlJBTUVTWi00KlJFR1NaCitBME9GRj0gRlJBTUVTWi0zKlJFR1NaCitHUE9GRj0gRlJBTUVTWi0yKlJFR1NaCitSQU9GRj0gRlJBTUVTWi0xKlJFR1NaCisKKyNkZWZpbmUgRlBSRUc2NF9TKEZQUiwgT0ZGLCBCQVNFKSAgICAgICBcCisgICAgICAgIHN3YzEgICAgRlBSLCBPRkYoQkFTRSkgIDsgICAgICAgXAorICAgICAgICBtZmhjMSAgIHQwLCBGUFIgICAgICAgICA7ICAgICAgIFwKKyAgICAgICAgc3cgICAgICB0MCwgT0ZGKzQoQkFTRSkgOworICAgICAgICAKKyNkZWZpbmUgRlBSRUc2NF9MKEZQUiwgT0ZGLCBCQVNFKSAgICAgICBcCisgICAgICAgIGx3ICAgICAgdDAsIE9GRis0KEJBU0UpIDsgICAgICAgXAorICAgICAgICBsdyAgICAgIHQxLCBPRkYoQkFTRSkgICA7ICAgICAgIFwKKyAgICAgICAgbXRjMSAgICB0MSwgRlBSICAgICAgICAgOyAgICAgICBcCisgICAgICAgIG10aGMxICAgdDAsIEZQUiAgICAgICAgIDsgICAgICAgXAorICAgICAgICAKK05PTl9MRUFGKHNldGptcCwgRlJBTUVTWiwgcmEpCisJLm1hc2sJMHg4MDAwMDAwMCwgUkFPRkYKKwlQVFJfU1VCVSBzcCwgRlJBTUVTWgkJCSMgYWxsb2NhdGUgc3RhY2sgZnJhbWUKKwlTRVRVUF9HUDY0KEdQT0ZGLCBzZXRqbXApCisJU0FWRV9HUChHUE9GRikKKwkuc2V0CXJlb3JkZXIKKwlSRUdfUwlyYSwgUkFPRkYoc3ApCQkJIyBzYXZlIHN0YXRlCisJUkVHX1MJYTAsIEEwT0ZGKHNwKQorCisJbW92ZQlhMCwgemVybwkJCSMgZ2V0IGN1cnJlbnQgc2lnbmFsIG1hc2sKKwlqYWwJc2lnYmxvY2sKKworCVJFR19MCXYxLCBBME9GRihzcCkJCQkjIHYxID0gam1wYnVmCisJUkVHX1MJdjAsIFNDX01BU0sodjEpCQkJIyBzYXZlIHNjX21hc2sgPSBzaWdibG9jaygwKQorCisJUkVHX0wJYTAsIEEwT0ZGKHNwKQkJCSMgcmVzdG9yZSBqbXBidWYKKwlSRUdfTAlyYSwgUkFPRkYoc3ApCisJUkVHX1MJcmEsIFNDX1BDKGEwKQkJCSMgc2NfcGMgPSByZXR1cm4gYWRkcmVzcworI2lmIGRlZmluZWQoX19taXBzNjQpCisJZGxpCXYwLCAweEFDRURCQURFCQkJIyBzaWdjb250ZXh0IG1hZ2ljIG51bWJlcgorI2Vsc2UKKwlsaQl2MCwgMHhBQ0VEQkFERQkJCSMgc2lnY29udGV4dCBtYWdpYyBudW1iZXIKKyNlbmRpZgorCVJFR19TCXYwLCBTQ19SRUdTK1pFUk8qUkVHU1ooYTApCisJUkVHX1MJczAsIFNDX1JFR1MrUzAqUkVHU1ooYTApCisJUkVHX1MJczEsIFNDX1JFR1MrUzEqUkVHU1ooYTApCisJUkVHX1MJczIsIFNDX1JFR1MrUzIqUkVHU1ooYTApCisJUkVHX1MJczMsIFNDX1JFR1MrUzMqUkVHU1ooYTApCisJUkVHX1MJczQsIFNDX1JFR1MrUzQqUkVHU1ooYTApCisJUkVHX1MJczUsIFNDX1JFR1MrUzUqUkVHU1ooYTApCisJUkVHX1MJczYsIFNDX1JFR1MrUzYqUkVHU1ooYTApCisJUkVHX1MJczcsIFNDX1JFR1MrUzcqUkVHU1ooYTApCisJUkVHX1MJczgsIFNDX1JFR1MrUzgqUkVHU1ooYTApCisJUkVHX0wJdjAsIEdQT0ZGKHNwKQorCVJFR19TCXYwLCBTQ19SRUdTK0dQKlJFR1NaKGEwKQorCVBUUl9BRERVIHYwLCBzcCwgRlJBTUVTWgorCVJFR19TCXYwLCBTQ19SRUdTK1NQKlJFR1NaKGEwKQorCisjaWYgIWRlZmluZWQoU09GVEZMT0FUKQorCWxpCXYwLCAxCQkJCSMgYmUgbmljZSBpZiB3ZSBjb3VsZCB0ZWxsCisJUkVHX1MJdjAsIFNDX0ZQVVNFRChhMCkJCSMgc2NfZnB1c2VkID0gMQorCWNmYzEJdjAsICQzMQorI2lmIF9NSVBTX0ZQU0VUID09IDMyCisgICAgICAgIEZQUkVHNjRfUygkZjIwLCBTQ19GUFJFR1MrKChGMjAtRjApKlJFR1NaX0ZQKSwgYTApCisgICAgICAgIEZQUkVHNjRfUygkZjIxLCBTQ19GUFJFR1MrKChGMjEtRjApKlJFR1NaX0ZQKSwgYTApCisgICAgICAgIEZQUkVHNjRfUygkZjIyLCBTQ19GUFJFR1MrKChGMjItRjApKlJFR1NaX0ZQKSwgYTApCisgICAgICAgIEZQUkVHNjRfUygkZjIzLCBTQ19GUFJFR1MrKChGMjMtRjApKlJFR1NaX0ZQKSwgYTApCisgICAgICAgIEZQUkVHNjRfUygkZjI0LCBTQ19GUFJFR1MrKChGMjQtRjApKlJFR1NaX0ZQKSwgYTApCisgICAgICAgIEZQUkVHNjRfUygkZjI1LCBTQ19GUFJFR1MrKChGMjUtRjApKlJFR1NaX0ZQKSwgYTApCisgICAgICAgIEZQUkVHNjRfUygkZjI2LCBTQ19GUFJFR1MrKChGMjYtRjApKlJFR1NaX0ZQKSwgYTApCisgICAgICAgIEZQUkVHNjRfUygkZjI3LCBTQ19GUFJFR1MrKChGMjctRjApKlJFR1NaX0ZQKSwgYTApCisgICAgICAgIEZQUkVHNjRfUygkZjI4LCBTQ19GUFJFR1MrKChGMjgtRjApKlJFR1NaX0ZQKSwgYTApCisgICAgICAgIEZQUkVHNjRfUygkZjI5LCBTQ19GUFJFR1MrKChGMjktRjApKlJFR1NaX0ZQKSwgYTApCisgICAgICAgIEZQUkVHNjRfUygkZjMwLCBTQ19GUFJFR1MrKChGMzAtRjApKlJFR1NaX0ZQKSwgYTApCisgICAgICAgIEZQUkVHNjRfUygkZjMxLCBTQ19GUFJFR1MrKChGMzEtRjApKlJFR1NaX0ZQKSwgYTApCisjZWxzZQorICAgICAgICBzd2MxICAgICRmMjAsIFNDX0ZQUkVHUysoKEYyMC1GMCkqUkVHU1pfRlApKGEwKQorICAgICAgICBzd2MxICAgICRmMjEsIFNDX0ZQUkVHUysoKEYyMS1GMCkqUkVHU1pfRlApKGEwKQorICAgICAgICBzd2MxICAgICRmMjIsIFNDX0ZQUkVHUysoKEYyMi1GMCkqUkVHU1pfRlApKGEwKQorICAgICAgICBzd2MxICAgICRmMjMsIFNDX0ZQUkVHUysoKEYyMy1GMCkqUkVHU1pfRlApKGEwKQorICAgICAgICBzd2MxICAgICRmMjQsIFNDX0ZQUkVHUysoKEYyNC1GMCkqUkVHU1pfRlApKGEwKQorICAgICAgICBzd2MxICAgICRmMjUsIFNDX0ZQUkVHUysoKEYyNS1GMCkqUkVHU1pfRlApKGEwKQorICAgICAgICBzd2MxICAgICRmMjYsIFNDX0ZQUkVHUysoKEYyNi1GMCkqUkVHU1pfRlApKGEwKQorICAgICAgICBzd2MxICAgICRmMjcsIFNDX0ZQUkVHUysoKEYyNy1GMCkqUkVHU1pfRlApKGEwKQorICAgICAgICBzd2MxICAgICRmMjgsIFNDX0ZQUkVHUysoKEYyOC1GMCkqUkVHU1pfRlApKGEwKQorICAgICAgICBzd2MxICAgICRmMjksIFNDX0ZQUkVHUysoKEYyOS1GMCkqUkVHU1pfRlApKGEwKQorICAgICAgICBzd2MxICAgICRmMzAsIFNDX0ZQUkVHUysoKEYzMC1GMCkqUkVHU1pfRlApKGEwKQorICAgICAgICBzd2MxICAgICRmMzEsIFNDX0ZQUkVHUysoKEYzMS1GMCkqUkVHU1pfRlApKGEwKQorI2VuZGlmCisJUkVHX1MJdjAsIFNDX0ZQUkVHUysoKEZTUi1GMCkqUkVHU1opKGEwKQorI2VuZGlmIC8qICFTT0ZURkxPQVQgKi8KKwltb3ZlCXYwLCB6ZXJvCisJUkVTVE9SRV9HUDY0CisJUFRSX0FERFUgc3AsIEZSQU1FU1oKKwlqCXJhCisKK2JvdGNoOgorCWphbAlsb25nam1wZXJyb3IKKwlqYWwJYWJvcnQKKwlSRVNUT1JFX0dQNjQKKwlQVFJfQUREVSBzcCwgRlJBTUVTWgorRU5EKHNldGptcCkKKworCitMRUFGKGxvbmdqbXAsIEZSQU1FU1opCisJUFRSX1NVQlUgc3AsIEZSQU1FU1oKKwlTRVRVUF9HUDY0KEdQT0ZGLCBsb25nam1wKQorCVNBVkVfR1AoR1BPRkYpCisJLnNldAlyZW9yZGVyCisJc3cJYTEsIEExT0ZGKHNwKQorCXN3CWEwLCBBME9GRihzcCkKKworCWx3CWEwLCBTQ19NQVNLKGEwKQorCWphbAlzaWdzZXRtYXNrCisKKwlsdwlhMCwgQTBPRkYoc3ApCisJbHcJYTEsIEExT0ZGKHNwKQorCisJLnNldAlub3Jlb3JkZXIJCisJUkVHX0wJdjAsIFNDX1JFR1MrWkVSTypSRUdTWihhMCkKKwlibmUJdjAsIDB4QUNFREJBREUsIGJvdGNoCQkjIGp1bXAgaWYgZXJyb3IKKwlSRUdfTAlyYSwgU0NfUEMoYTApCisJUkVHX0wJczAsIFNDX1JFR1MrUzAqUkVHU1ooYTApCisJUkVHX0wJczEsIFNDX1JFR1MrUzEqUkVHU1ooYTApCisJUkVHX0wJczIsIFNDX1JFR1MrUzIqUkVHU1ooYTApCisJUkVHX0wJczMsIFNDX1JFR1MrUzMqUkVHU1ooYTApCisJUkVHX0wJczQsIFNDX1JFR1MrUzQqUkVHU1ooYTApCisJUkVHX0wJczUsIFNDX1JFR1MrUzUqUkVHU1ooYTApCisJUkVHX0wJczYsIFNDX1JFR1MrUzYqUkVHU1ooYTApCisJUkVHX0wJczcsIFNDX1JFR1MrUzcqUkVHU1ooYTApCisJUkVHX0wJczgsIFNDX1JFR1MrUzgqUkVHU1ooYTApCisJUkVHX0wJZ3AsIFNDX1JFR1MrR1AqUkVHU1ooYTApCisJUkVHX0wJc3AsIFNDX1JFR1MrU1AqUkVHU1ooYTApCisJCisjaWYgIWRlZmluZWQoU09GVEZMT0FUKQorCVJFR19MCXYwLCBTQ19GUFJFR1MrKChGU1ItRjApKlJFR1NaKShhMCkJCisJY3RjMQl2MCwgJDMxCisjaWYgX01JUFNfRlBTRVQgPT0gMzIKKyAgICAgICAgRlBSRUc2NF9MKCRmMjAsIFNDX0ZQUkVHUysoKEYyMC1GMCkqUkVHU1pfRlApLCBhMCkKKyAgICAgICAgRlBSRUc2NF9MKCRmMjEsIFNDX0ZQUkVHUysoKEYyMS1GMCkqUkVHU1pfRlApLCBhMCkKKyAgICAgICAgRlBSRUc2NF9MKCRmMjIsIFNDX0ZQUkVHUysoKEYyMi1GMCkqUkVHU1pfRlApLCBhMCkKKyAgICAgICAgRlBSRUc2NF9MKCRmMjMsIFNDX0ZQUkVHUysoKEYyMy1GMCkqUkVHU1pfRlApLCBhMCkKKyAgICAgICAgRlBSRUc2NF9MKCRmMjQsIFNDX0ZQUkVHUysoKEYyNC1GMCkqUkVHU1pfRlApLCBhMCkKKyAgICAgICAgRlBSRUc2NF9MKCRmMjUsIFNDX0ZQUkVHUysoKEYyNS1GMCkqUkVHU1pfRlApLCBhMCkKKyAgICAgICAgRlBSRUc2NF9MKCRmMjYsIFNDX0ZQUkVHUysoKEYyNi1GMCkqUkVHU1pfRlApLCBhMCkKKyAgICAgICAgRlBSRUc2NF9MKCRmMjcsIFNDX0ZQUkVHUysoKEYyNy1GMCkqUkVHU1pfRlApLCBhMCkKKyAgICAgICAgRlBSRUc2NF9MKCRmMjgsIFNDX0ZQUkVHUysoKEYyOC1GMCkqUkVHU1pfRlApLCBhMCkKKyAgICAgICAgRlBSRUc2NF9MKCRmMjksIFNDX0ZQUkVHUysoKEYyOS1GMCkqUkVHU1pfRlApLCBhMCkKKyAgICAgICAgRlBSRUc2NF9MKCRmMzAsIFNDX0ZQUkVHUysoKEYzMC1GMCkqUkVHU1pfRlApLCBhMCkKKyAgICAgICAgRlBSRUc2NF9MKCRmMzEsIFNDX0ZQUkVHUysoKEYzMS1GMCkqUkVHU1pfRlApLCBhMCkKKyNlbHNlCisgICAgICAgIGx3YzEgICAgJGYyMCwgU0NfRlBSRUdTKygoRjIwLUYwKSpSRUdTWl9GUCkoYTApCisgICAgICAgIGx3YzEgICAgJGYyMSwgU0NfRlBSRUdTKygoRjIxLUYwKSpSRUdTWl9GUCkoYTApCisgICAgICAgIGx3YzEgICAgJGYyMiwgU0NfRlBSRUdTKygoRjIyLUYwKSpSRUdTWl9GUCkoYTApCisgICAgICAgIGx3YzEgICAgJGYyMywgU0NfRlBSRUdTKygoRjIzLUYwKSpSRUdTWl9GUCkoYTApCisgICAgICAgIGx3YzEgICAgJGYyNCwgU0NfRlBSRUdTKygoRjI0LUYwKSpSRUdTWl9GUCkoYTApCisgICAgICAgIGx3YzEgICAgJGYyNSwgU0NfRlBSRUdTKygoRjI1LUYwKSpSRUdTWl9GUCkoYTApCisgICAgICAgIGx3YzEgICAgJGYyNiwgU0NfRlBSRUdTKygoRjI2LUYwKSpSRUdTWl9GUCkoYTApCisgICAgICAgIGx3YzEgICAgJGYyNywgU0NfRlBSRUdTKygoRjI3LUYwKSpSRUdTWl9GUCkoYTApCisgICAgICAgIGx3YzEgICAgJGYyOCwgU0NfRlBSRUdTKygoRjI4LUYwKSpSRUdTWl9GUCkoYTApCisgICAgICAgIGx3YzEgICAgJGYyOSwgU0NfRlBSRUdTKygoRjI5LUYwKSpSRUdTWl9GUCkoYTApCisgICAgICAgIGx3YzEgICAgJGYzMCwgU0NfRlBSRUdTKygoRjMwLUYwKSpSRUdTWl9GUCkoYTApCisgICAgICAgIGx3YzEgICAgJGYzMSwgU0NfRlBSRUdTKygoRjMxLUYwKSpSRUdTWl9GUCkoYTApCisjZW5kaWYKKyNlbmRpZiAvKiAhU09GVEZMT0FUICovCisJYm5lCWExLCB6ZXJvLCAxZgorCSBub3AKKwlsaQlhMSwgMQkJCSMgbmV2ZXIgcmV0dXJuIDAhCisxOgorCWoJcmEKKwkgbW92ZQl2MCwgYTEKKworRU5EKGxvbmdqbXApCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9iaW9uaWMvc2lnc2V0am1wLlMgYi9saWJjL2FyY2gtbWlwcy9iaW9uaWMvc2lnc2V0am1wLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjA1NDU0YwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzL2Jpb25pYy9zaWdzZXRqbXAuUwpAQCAtMCwwICsxLDc3IEBACisvKiAkT3BlbkJTRDogc2lnc2V0am1wLlMsdiAxLjUgMjAwNS8wOC8wNyAxNjo0MDoxNSBlc3BpZSBFeHAgJCAqLworLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTEsIDE5OTMsIDE5OTUsCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5CisgKiBIYXZhcmQgRWlkbmVzLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KKyNpbmNsdWRlIDxtYWNoaW5lL3JlZ251bS5oPgorI2luY2x1ZGUgPG1hY2hpbmUvc2V0am1wLmg+CisKKy8qCisgKiB0cmFtcG9saW5lcyBmb3Igc2lnc2V0am1wIGFuZCAgc2lnbG9uZ2ptcCBzYXZlIGFuZCByZXN0b3JlIG1hc2suCisgKgorICovCitGUkFNRVNaPSBNS0ZTSVooMSwxKQorR1BPRkY9IEZSQU1FU1otMipSRUdTWgorCitMRUFGKHNpZ3NldGptcCwgRlJBTUVTWikKKwlQVFJfU1VCVSBzcCwgRlJBTUVTWgorCVNFVFVQX0dQNjQoR1BPRkYsIHNpZ3NldGptcCkKKwkuc2V0CXJlb3JkZXIKKwlSRUdfUwlhMSwgKF9KQkxFTipSRUdTWikoYTApCQkjIHNhdmUgInNhdmVtYXNrIgorCWJuZQlhMSwgMHgwLCAxZgkJCSMgZG8gc2F2aW5nIG9mIHNpZ25hbCBtYXNrPworCUxBCXQ5LCBfc2V0am1wCisJUkVTVE9SRV9HUDY0CisJUFRSX0FERFUgc3AsIEZSQU1FU1oKKwlqciB0OQorCisxOglMQQl0OSwgc2V0am1wCisJUkVTVE9SRV9HUDY0CisJUFRSX0FERFUgc3AsIEZSQU1FU1oKKwlqciB0OQorRU5EKHNpZ3NldGptcCkKKworTEVBRihzaWdsb25nam1wLCBGUkFNRVNaKQorCVBUUl9TVUJVIHNwLCBGUkFNRVNaCisJU0VUVVBfR1A2NChHUE9GRiwgc2lnbG9uZ2ptcCkKKwkuc2V0CXJlb3JkZXIKKwlSRUdfTAl0MCwgKF9KQkxFTipSRUdTWikoYTApCQkjIGdldCAic2F2ZW1hc2siCisJYm5lCXQwLCAweDAsIDFmCQkJIyByZXN0b3JlIHNpZ25hbCBtYXNrPworCUxBCXQ5LCBfbG9uZ2ptcAorCVJFU1RPUkVfR1A2NAorCVBUUl9BRERVIHNwLCBGUkFNRVNaCisJanIJdDkKKzE6CisJTEEJdDksIGxvbmdqbXAKKwlSRVNUT1JFX0dQNjQKKwlQVFJfQUREVSBzcCwgRlJBTUVTWgorCWpyCXQ5CitFTkQoc2lnbG9uZ2ptcCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL2Jpb25pYy92Zm9yay5TIGIvbGliYy9hcmNoLW1pcHMvYmlvbmljL3Zmb3JrLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmUyZTRmZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzL2Jpb25pYy92Zm9yay5TCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KKworCS50ZXh0CisKKy8qIGludCB2Zm9yaygpIGltcGxlbWVudGVkIHVzaW5nIGNsb25lKCkgKi8KKworCS50eXBlCXZmb3JrLCBAZnVuY3Rpb24KKwkuZ2xvYmFsCXZmb3JrCisJLmFsaWduCTQKKwkuZW50CXZmb3JrCit2Zm9yazoKKwkuc2V0CW5vcmVvcmRlcgorCS5jcGxvYWQJJHQ5CisKKwlsaQkkYTAsIDB4NDExMiAgICAgICAgLyogQ0xPTkVfVk0gfCBDTE9ORV9WRk9SSyB8IFNJR0NITEQgKi8KKwltb3ZlCSRhMSwgJHNwCisJbGkJJHYwLCBfX05SX2Nsb25lCisJc3lzY2FsbAorCWJuZXoJJGEzLDFmCisJIG5vcAorCisJagkkcmEKKwkgbm9wCisxOgorCWxhCSR0OSxfX3NldF9lcnJubworCWoJJHQ5CisJIG1vdmUJJGEwLCR2MAorCS5lbmQJdmZvcmsKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL2luY2x1ZGUvbWFjaGluZS9fdHlwZXMuaCBiL2xpYmMvYXJjaC1taXBzL2luY2x1ZGUvbWFjaGluZS9fdHlwZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNWY3OWVmCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHMvaW5jbHVkZS9tYWNoaW5lL190eXBlcy5oCkBAIC0wLDAgKzEsMTM3IEBACisvKgkkT3BlbkJTRDogX3R5cGVzLmgsdiAxLjUgMjAwOC8wNy8yMSAyMDo1MDo1NCBtYXJ0eW5hcyBFeHAgJAkqLworCisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqCUAoIyl0eXBlcy5oCTguMyAoQmVya2VsZXkpIDEvNS85NAorICoJQCgjKWFuc2kuaAk4LjIgKEJlcmtlbGV5KSAxLzQvOTQKKyAqLworCisjaWZuZGVmIF9NSVBTNjRfX1RZUEVTX0hfCisjZGVmaW5lIF9NSVBTNjRfX1RZUEVTX0hfCisKKy8qCisgKiAgV2UgbmVlZCB0byBoYW5kbGUgdGhlIHZhcmlvdXMgSVNBIGxldmVscyBmb3Igc2l6ZXMuCisgKi8KKyNkZWZpbmUJX01JUFNfSVNBX01JUFMxCTEJLyogUjIwMDAvUjMwMDAgKi8KKyNkZWZpbmUJX01JUFNfSVNBX01JUFMyCTIJLyogUjQwMDAvUjYwMDAgKi8KKyNkZWZpbmUJX01JUFNfSVNBX01JUFMzCTMJLyogUjQwMDAgKi8KKyNkZWZpbmUJX01JUFNfSVNBX01JUFM0CTQJLyogVEZQIChSMXgwMDApICovCisKKy8qIDcuMTguMS4xIEV4YWN0LXdpZHRoIGludGVnZXIgdHlwZXMgKi8KK3R5cGVkZWYJX19zaWduZWQgY2hhcgkJX19pbnQ4X3Q7Cit0eXBlZGVmCXVuc2lnbmVkIGNoYXIJCV9fdWludDhfdDsKK3R5cGVkZWYJc2hvcnQJCQlfX2ludDE2X3Q7Cit0eXBlZGVmCXVuc2lnbmVkIHNob3J0CQlfX3VpbnQxNl90OwordHlwZWRlZglpbnQJCQlfX2ludDMyX3Q7Cit0eXBlZGVmCXVuc2lnbmVkIGludAkJX191aW50MzJfdDsKKy8qIExPTkdMT05HICovCit0eXBlZGVmCWxvbmcgbG9uZwkJX19pbnQ2NF90OworLyogTE9OR0xPTkcgKi8KK3R5cGVkZWYJdW5zaWduZWQgbG9uZyBsb25nCV9fdWludDY0X3Q7CisKKy8qIDcuMTguMS4yIE1pbmltdW0td2lkdGggaW50ZWdlciB0eXBlcyAqLwordHlwZWRlZglfX2ludDhfdAkJX19pbnRfbGVhc3Q4X3Q7Cit0eXBlZGVmCV9fdWludDhfdAkJX191aW50X2xlYXN0OF90OwordHlwZWRlZglfX2ludDE2X3QJCV9faW50X2xlYXN0MTZfdDsKK3R5cGVkZWYJX191aW50MTZfdAkJX191aW50X2xlYXN0MTZfdDsKK3R5cGVkZWYJX19pbnQzMl90CQlfX2ludF9sZWFzdDMyX3Q7Cit0eXBlZGVmCV9fdWludDMyX3QJCV9fdWludF9sZWFzdDMyX3Q7Cit0eXBlZGVmCV9faW50NjRfdAkJX19pbnRfbGVhc3Q2NF90OwordHlwZWRlZglfX3VpbnQ2NF90CQlfX3VpbnRfbGVhc3Q2NF90OworCisvKiA3LjE4LjEuMyBGYXN0ZXN0IG1pbmltdW0td2lkdGggaW50ZWdlciB0eXBlcyAqLwordHlwZWRlZglfX2ludDMyX3QJCV9faW50X2Zhc3Q4X3Q7Cit0eXBlZGVmCV9fdWludDMyX3QJCV9fdWludF9mYXN0OF90OwordHlwZWRlZglfX2ludDMyX3QJCV9faW50X2Zhc3QxNl90OwordHlwZWRlZglfX3VpbnQzMl90CQlfX3VpbnRfZmFzdDE2X3Q7Cit0eXBlZGVmCV9faW50MzJfdAkJX19pbnRfZmFzdDMyX3Q7Cit0eXBlZGVmCV9fdWludDMyX3QJCV9fdWludF9mYXN0MzJfdDsKK3R5cGVkZWYJX19pbnQ2NF90CQlfX2ludF9mYXN0NjRfdDsKK3R5cGVkZWYJX191aW50NjRfdAkJX191aW50X2Zhc3Q2NF90OworCisvKiA3LjE4LjEuNCBJbnRlZ2VyIHR5cGVzIGNhcGFibGUgb2YgaG9sZGluZyBvYmplY3QgcG9pbnRlcnMgKi8KK3R5cGVkZWYJbG9uZwkJCV9faW50cHRyX3Q7Cit0eXBlZGVmCXVuc2lnbmVkIGxvbmcJCV9fdWludHB0cl90OworCisvKiA3LjE4LjEuNSBHcmVhdGVzdC13aWR0aCBpbnRlZ2VyIHR5cGVzICovCit0eXBlZGVmCV9faW50NjRfdAkJX19pbnRtYXhfdDsKK3R5cGVkZWYJX191aW50NjRfdAkJX191aW50bWF4X3Q7CisKKy8qIFJlZ2lzdGVyIHNpemUgKi8KKyNpZiAoX01JUFNfSVNBID09IF9NSVBTX0lTQV9NSVBTMyB8fCBfTUlQU19JU0EgPT0gX01JUFNfSVNBX01JUFM0KQordHlwZWRlZiBfX2ludDY0X3QJCV9fcmVnaXN0ZXJfdDsKK3R5cGVkZWYgX19pbnQ2NF90CQlmX3JlZ2lzdGVyX3Q7CS8qIFhYWCAqLworI2Vsc2UKK3R5cGVkZWYgX19pbnQzMl90CQlfX3JlZ2lzdGVyX3Q7Cit0eXBlZGVmIF9faW50MzJfdAkJZl9yZWdpc3Rlcl90OwkvKiBYWFggKi8KKyNlbmRpZgorCisvKiBWTSBzeXN0ZW0gdHlwZXMgKi8KK3R5cGVkZWYgdW5zaWduZWQgbG9uZwkJX192YWRkcl90OwordHlwZWRlZiB1bnNpZ25lZCBsb25nCQlfX3BhZGRyX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcJCV9fdnNpemVfdDsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZwkJX19wc2l6ZV90OworCisvKiBTdGFuZGFyZCBzeXN0ZW0gdHlwZXMgKi8KK3R5cGVkZWYgaW50CQkJX19jbG9ja190OwordHlwZWRlZiBpbnQJCQlfX2Nsb2NraWRfdDsKK3R5cGVkZWYgZG91YmxlCQkJX19kb3VibGVfdDsKK3R5cGVkZWYgZmxvYXQJCQlfX2Zsb2F0X3Q7Cit0eXBlZGVmIGxvbmcgbG9uZwkJX19vZmZfdDsKK3R5cGVkZWYgbG9uZwkJCV9fcHRyZGlmZl90OwordHlwZWRlZglpbnQJCQlfX3RpbWVfdDsKK3R5cGVkZWYgaW50CQkJX190aW1lcl90OworI2lmIGRlZmluZWQoX19HTlVDX18pICYmIF9fR05VQ19fID49IDMKK3R5cGVkZWYJX19idWlsdGluX3ZhX2xpc3QJX192YV9saXN0OworI2Vsc2UKK3R5cGVkZWYJY2hhciAqCQkJX192YV9saXN0OworI2VuZGlmCisKKy8qIFdpZGUgY2hhcmFjdGVyIHN1cHBvcnQgdHlwZXMgKi8KKyNpZm5kZWYgX19jcGx1c3BsdXMKK3R5cGVkZWYJaW50CQkJX193Y2hhcl90OworI2VuZGlmCit0eXBlZGVmIGludAkJCV9fd2ludF90OwordHlwZWRlZglpbnQJCQlfX3J1bmVfdDsKK3R5cGVkZWYJdm9pZCAqCQkJX193Y3RyYW5zX3Q7Cit0eXBlZGVmCXZvaWQgKgkJCV9fd2N0eXBlX3Q7CisKKyNpZiBkZWZpbmVkKF9LRVJORUwpCit0eXBlZGVmIHN0cnVjdCBsYWJlbF90IHsKKwlfX3JlZ2lzdGVyX3QgdmFsWzE0XTsKK30gbGFiZWxfdDsKKyNlbmRpZgorCisvKiBYWFggY2hlY2sgd2h5IHRoaXMgc3RpbGwgaGFzIHRvIGJlIGRlZmluZWQuIHBtYXAuYyBpc3N1ZT8gKi8KKyNkZWZpbmUgX19TV0FQX0JST0tFTgorCisvKiBGZWF0dXJlIHRlc3QgbWFjcm9zICovCisjZGVmaW5lIF9fSEFWRV9USU1FQ09VTlRFUgorCisjZW5kaWYJLyogX01JUFM2NF9fVFlQRVNfSF8gKi8KZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL2luY2x1ZGUvbWFjaGluZS9hc20uaCBiL2xpYmMvYXJjaC1taXBzL2luY2x1ZGUvbWFjaGluZS9hc20uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40M2RiYzA5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHMvaW5jbHVkZS9tYWNoaW5lL2FzbS5oCkBAIC0wLDAgKzEsMzA1IEBACisvKgkkT3BlbkJTRDogYXNtLmgsdiAxLjcgMjAwNC8xMC8yMCAxMjo0OToxNSBwZWZvIEV4cCAkICovCisKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAwMiBPcHN5Y29uIEFCICAod3d3Lm9wc3ljb24uc2UgLyB3d3cub3BzeWNvbi5jb20pCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MKKyAqIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKgorICovCisjaWZuZGVmIF9NSVBTNjRfQVNNX0gKKyNkZWZpbmUgX01JUFM2NF9BU01fSAorCisjaW5jbHVkZSA8bWFjaGluZS9yZWdkZWYuaD4KKworI2lmZGVmIE5FRURfT0xEX1JNN0tGSVgKKyNkZWZpbmUgSVRMQk5PUEZJWCAgICAgIG5vcDtub3A7bm9wO25vcDtub3A7bm9wO25vcDtub3A7bm9wO25vcDsKKyNlbHNlCisjZGVmaW5lIElUTEJOT1BGSVggICAgICBub3A7bm9wO25vcDtub3AKKyNlbmRpZgorCisjZGVmaW5lCV9NSVBTX0lTQV9NSVBTMQkxCS8qIFIyMDAwL1IzMDAwICovCisjZGVmaW5lCV9NSVBTX0lTQV9NSVBTMgkyCS8qIFI0MDAwL1I2MDAwICovCisjZGVmaW5lCV9NSVBTX0lTQV9NSVBTMwkzCS8qIFI0MDAwICovCisjZGVmaW5lCV9NSVBTX0lTQV9NSVBTNAk0CS8qIFRGUCAoUjF4MDAwKSAqLworI2lmZGVmIF9fbGludXhfXworI2RlZmluZQlfTUlQU19JU0FfTUlQUzUgNQorI2RlZmluZQlfTUlQU19JU0FfTUlQUzMyIDYKKyNkZWZpbmUJX01JUFNfSVNBX01JUFM2NCA3CisjZWxzZQorI2RlZmluZQlfTUlQU19JU0FfTUlQUzMyIDMyCS8qIE1JUFMzMiAqLworI2VuZGlmCisKKyNpZiAhZGVmaW5lZChBQklDQUxMUykgJiYgIWRlZmluZWQoX05PX0FCSUNBTExTKQorI2RlZmluZQlBQklDQUxMUwkuYWJpY2FsbHMKKyNlbmRpZgorCisjaWYgZGVmaW5lZChBQklDQUxMUykgJiYgIWRlZmluZWQoX0tFUk5FTCkKKwlBQklDQUxMUworI2VuZGlmCisKKyNkZWZpbmUgX0NfTEFCRUwoeCkgeAkJLyogWFhYIE9ic29sZXRlIGJ1dCBrZWVwIGZvciBhIHdoaWxlICovCisKKyNpZiAhZGVmaW5lZChfX01JUFNFTF9fKSAmJiAhZGVmaW5lZChfX01JUFNFQl9fKQorI2Vycm9yICJfX01JUFNFTF9fIG9yIF9fTUlQU0VCX18gbXVzdCBiZSBkZWZpbmVkIgorI2VuZGlmCisvKgorICogRGVmaW5lIGhvdyB0byBhY2Nlc3MgdW5hbGlnbmVkIGRhdGEgd29yZAorICovCisjaWYgZGVmaW5lZChfX01JUFNFTF9fKQorI2RlZmluZSBMV0xPICAgIGx3bAorI2RlZmluZSBMV0hJICAgIGx3cgorI2RlZmluZQlTV0xPCXN3bAorI2RlZmluZQlTV0hJCXN3cgorI2RlZmluZSBMRExPICAgIGxkbAorI2RlZmluZSBMREhJICAgIGxkcgorI2RlZmluZQlTRExPCXNkbAorI2RlZmluZQlTREhJCXNkcgorI2VuZGlmCisjaWYgZGVmaW5lZChfX01JUFNFQl9fKQorI2RlZmluZSBMV0xPICAgIGx3cgorI2RlZmluZSBMV0hJICAgIGx3bAorI2RlZmluZQlTV0xPCXN3cgorI2RlZmluZQlTV0hJCXN3bAorI2RlZmluZSBMRExPICAgIGxkcgorI2RlZmluZSBMREhJICAgIGxkbAorI2RlZmluZQlTRExPCXNkcgorI2RlZmluZQlTREhJCXNkbAorI2VuZGlmCisKKy8qCisgKiAgRGVmaW5lIHByb2dyYW1taW5nIGVudmlyb25tZW50IGZvciBBQkkuCisgKi8KKyNpZiBkZWZpbmVkKEFCSUNBTExTKSAmJiAhZGVmaW5lZChfS0VSTkVMKSAmJiAhZGVmaW5lZChfU1RBTkRBTE9ORSkKKworI2lmbmRlZiBfTUlQU19TSU0KKyNkZWZpbmUgX01JUFNfU0lNIDEKKyNkZWZpbmUgX0FCSU8zMgkxCisjZW5kaWYKKyNpZm5kZWYgX01JUFNfSVNBCisjZGVmaW5lIF9NSVBTX0lTQSAyCisjZGVmaW5lIF9NSVBTX0lTQV9NSVBTMiAyCisjZW5kaWYKKworI2lmIChfTUlQU19TSU0gPT0gX0FCSU8zMikgfHwgKF9NSVBTX1NJTSA9PSBfQUJJMzIpCisjZGVmaW5lIE5BUkdTQVZFCTQKKworI2RlZmluZQlTRVRVUF9HUAkJXAorCS5zZXQJbm9yZW9yZGVyOwlcCisJLmNwbG9hZAl0OTsJCVwKKwkuc2V0CXJlb3JkZXI7CisKKyNkZWZpbmUJU0FWRV9HUCh4KQkJXAorCS5jcHJlc3RvcmUgeAorCisjZGVmaW5lCVNFVFVQX0dQNjQoZ3BvZmYsIG5hbWUpCisjZGVmaW5lCVJFU1RPUkVfR1A2NAorI2VuZGlmCisKKyNpZiAoX01JUFNfU0lNID09IF9BQkk2NCkgfHwgKF9NSVBTX1NJTSA9PSBfQUJJTjMyKQorI2RlZmluZSBOQVJHU0FWRQkwCisKKyNkZWZpbmUJU0VUVVBfR1AKKyNkZWZpbmUJU0FWRV9HUCh4KQorI2RlZmluZQlTRVRVUF9HUDY0KGdwb2ZmLCBuYW1lKQlcCisJLmNwc2V0dXAgdDksIGdwb2ZmLCBuYW1lCisjZGVmaW5lCVJFU1RPUkVfR1A2NAkJXAorCS5jcHJldHVybgorI2VuZGlmCisKKyNkZWZpbmUJTUtGU0laKG5hcmcsbG9jYWxzKSAoKChuYXJnK2xvY2FscykqUkVHU1orMzEpJih+MzEpKQorCisjZWxzZSAvKiBkZWZpbmVkKEFCSUNBTExTKSAmJiAhZGVmaW5lZChfS0VSTkVMKSAqLworCisjZGVmaW5lCU5BUkdTQVZFCTQKKyNkZWZpbmUJU0VUVVBfR1AKKyNkZWZpbmUJU0FWRV9HUCh4KQorCisjZGVmaW5lCUFMSUdOU1oJCTE2CS8qIFN0YWNrIGxheW91dCBhbGlnbm1lbnQgKi8KKyNkZWZpbmUJRlJBTUVTWihzeikJKCgoc3opICsgKEFMSUdOU1otMSkpICYgfihBTElHTlNaLTEpKQorCisjZW5kaWYKKworLyoKKyAqICBCYXNpYyByZWdpc3RlciBvcGVyYXRpb25zIGJhc2VkIG9uIHNlbGVjdGVkIElTQQorICovCisjaWYgKF9NSVBTX0lTQSA9PSBfTUlQU19JU0FfTUlQUzEgfHwgX01JUFNfSVNBID09IF9NSVBTX0lTQV9NSVBTMiB8fCBfTUlQU19JU0EgPT0gX01JUFNfSVNBX01JUFMzMikKKyNkZWZpbmUgUkVHU1oJCTQJLyogMzIgYml0IG1vZGUgcmVnaXN0ZXIgc2l6ZSAqLworI2RlZmluZSBMT0dSRUdTWgkyCS8qIGxvZyByc2l6ZSAqLworI2RlZmluZQlSRUdfUwlzdworI2RlZmluZQlSRUdfTAlsdworI2RlZmluZQlDRl9TWgkJMjQJLyogQ2FsbCBmcmFtZSBzaXplICovCisjZGVmaW5lCUNGX0FSR1NaCTE2CS8qIENhbGwgZnJhbWUgYXJnIHNpemUgKi8KKyNkZWZpbmUJQ0ZfUkFfT0ZGUwkyMAkvKiBDYWxsIHJhIHNhdmUgb2Zmc2V0ICovCisjZW5kaWYKKworI2lmIChfTUlQU19JU0EgPT0gX01JUFNfSVNBX01JUFMzIHx8IF9NSVBTX0lTQSA9PSBfTUlQU19JU0FfTUlQUzQpCisjZGVmaW5lIFJFR1NaCQk4CS8qIDY0IGJpdCBtb2RlIHJlZ2lzdGVyIHNpemUgKi8KKyNkZWZpbmUgTE9HUkVHU1oJMwkvKiBsb2cgcnNpemUgKi8KKyNkZWZpbmUJUkVHX1MJc2QKKyNkZWZpbmUJUkVHX0wJbGQKKyNkZWZpbmUJQ0ZfU1oJCTQ4CS8qIENhbGwgZnJhbWUgc2l6ZSAobXVsdGlwbGUgb2YgQUxJR05TWikgKi8KKyNkZWZpbmUJQ0ZfQVJHU1oJMzIJLyogQ2FsbCBmcmFtZSBhcmcgc2l6ZSAqLworI2RlZmluZQlDRl9SQV9PRkZTCTQwCS8qIENhbGwgcmEgc2F2ZSBvZmZzZXQgKi8KKyNlbmRpZgorCisjZGVmaW5lIFJFR1NaX0ZQCSA4CS8qIDY0IGJpdCBGUCByZWdpc3RlciBzaXplICovCisKKyNpZm5kZWYgX19MUDY0X18KKyNkZWZpbmUJUFRSX0wJCWx3CisjZGVmaW5lCVBUUl9TCQlzdworI2RlZmluZQlQVFJfU1VCCQlzdWIKKyNkZWZpbmUJUFRSX0FERAkJYWRkCisjZGVmaW5lCVBUUl9TVUJVCXN1YnUKKyNkZWZpbmUJUFRSX0FERFUJYWRkdQorI2RlZmluZSBMSQkJbGkKKyNkZWZpbmUJTEEJCWxhCisjZGVmaW5lCVBUUl9TTEwJCXNsbAorI2RlZmluZQlQVFJfU1JMCQlzcmwKKyNkZWZpbmUJUFRSX1ZBTAkJLndvcmQKKyNlbHNlCisjZGVmaW5lCVBUUl9MCQlsZAorI2RlZmluZQlQVFJfUwkJc2QKKyNkZWZpbmUJUFRSX0FERAkJZGFkZAorI2RlZmluZQlQVFJfU1VCCQlkc3ViCisjZGVmaW5lCVBUUl9TVUJVCWRzdWJ1CisjZGVmaW5lCVBUUl9BRERVCWRhZGR1CisjZGVmaW5lIExJCQlkbGkKKyNkZWZpbmUgTEEJCWRsYQorI2RlZmluZQlQVFJfU0xMCQlkc2xsCisjZGVmaW5lCVBUUl9TUkwJCWRzcmwKKyNkZWZpbmUJUFRSX1ZBTAkJLmR3b3JkCisjZW5kaWYKKworLyoKKyAqIERlZmluZSAtcGcgcHJvZmlsZSBlbnRyeSBjb2RlLgorICovCisjaWYgZGVmaW5lZChYR1BST0YpIHx8IGRlZmluZWQoWFBST0YpCisjZGVmaW5lCU1DT1VOVAkJCVwKKwlQVFJfU1VCVSBzcCwgc3AsIDMyOwlcCisJU0FWRV9HUCgxNik7CQlcCisJc3cJcmEsIDI4KHNwKTsJXAorCXN3CWdwLCAyNChzcCk7CVwKKwkuc2V0CW5vYXQ7CQlcCisJLnNldAlub3Jlb3JkZXI7CVwKKwltb3ZlCUFULCByYTsJCVwKKwlqYWwJX21jb3VudDsJXAorCVBUUl9TVUJVIHNwLCBzcCwgODsJXAorCWx3CXJhLCAyOChzcCk7CVwKKwlQVFJfQUREVSBzcCwgc3AsIDMyOwlcCisJLnNldCByZW9yZGVyOwkJXAorCS5zZXQJYXQ7CisjZWxzZQorI2RlZmluZQlNQ09VTlQKKyNlbmRpZgorCisvKgorICogTEVBRih4LCBmc2l6ZSkKKyAqCisgKglEZWNsYXJlIGEgbGVhZiByb3V0aW5lLgorICovCisjZGVmaW5lIExFQUYoeCwgZnNpemUpCQlcCisJLmFsaWduCTM7CQlcCisJLmdsb2JsIHg7CQlcCisJLmVudCB4LCAwOwkJXAoreDogOwkJCQlcCisJLmZyYW1lIHNwLCBmc2l6ZSwgcmE7CVwKKwlTRVRVUF9HUAkJXAorCU1DT1VOVAorCisjZGVmaW5lCUFMRUFGKHgpCQlcCisJLmdsb2JsCXg7CQlcCit4OgorCisvKgorICogTkxFQUYoeCkKKyAqCisgKglEZWNsYXJlIGEgbm9uLXByb2ZpbGVkIGxlYWYgcm91dGluZS4KKyAqLworI2RlZmluZSBOTEVBRih4LCBmc2l6ZSkJCVwKKwkuYWxpZ24JMzsJCVwKKwkuZ2xvYmwgeDsJCVwKKwkuZW50IHgsIDA7CQlcCit4OiA7CQkJCVwKKwkuZnJhbWUgc3AsIGZzaXplLCByYTsJXAorCVNFVFVQX0dQCisKKy8qCisgKiBOT05fTEVBRih4KQorICoKKyAqCURlY2xhcmUgYSBub24tbGVhZiByb3V0aW5lIChhIHJvdXRpbmUgdGhhdCBtYWtlcyBvdGhlciBDIGNhbGxzKS4KKyAqLworI2RlZmluZSBOT05fTEVBRih4LCBmc2l6ZSwgcmV0cGMpIFwKKwkuYWxpZ24JMzsJCVwKKwkuZ2xvYmwgeDsJCVwKKwkuZW50IHgsIDA7CQlcCit4OiA7CQkJCVwKKwkuZnJhbWUgc3AsIGZzaXplLCByZXRwYzsgXAorCVNFVFVQX0dQCQlcCisJTUNPVU5UCisKKy8qCisgKiBOTk9OX0xFQUYoeCkKKyAqCisgKglEZWNsYXJlIGEgbm9uLXByb2ZpbGVkIG5vbi1sZWFmIHJvdXRpbmUKKyAqCShhIHJvdXRpbmUgdGhhdCBtYWtlcyBvdGhlciBDIGNhbGxzKS4KKyAqLworI2RlZmluZSBOTk9OX0xFQUYoeCwgZnNpemUsIHJldHBjKSBcCisJLmFsaWduCTM7CQlcCisJLmdsb2JsIHg7CQlcCisJLmVudCB4LCAwOwkJXAoreDogOwkJCQlcCisJLmZyYW1lIHNwLCBmc2l6ZSwgcmV0cGMJXAorCVNFVFVQX0dQCisKKy8qCisgKiBFTkQoeCkKKyAqCisgKglNYXJrIGVuZCBvZiBhIHByb2NlZHVyZS4KKyAqLworI2RlZmluZSBFTkQoeCkgXAorCS5lbmQgeAorCisvKgorICogTWFjcm9zIHRvIHBhbmljIGFuZCBwcmludGYgZnJvbSBhc3NlbWJseSBsYW5ndWFnZS4KKyAqLworI2RlZmluZSBQQU5JQyhtc2cpIFwKKwlMQQlhMCwgOWY7IFwKKwlqYWwJcGFuaWM7CVwKKwlub3AJOwlcCisJTVNHKG1zZykKKworI2RlZmluZQlQUklOVEYobXNnKSBcCisJbGEJYTAsIDlmOyBcCisJamFsCXByaW50ZjsgXAorCW5vcAk7CVwKKwlNU0cobXNnKQorCisjZGVmaW5lCU1TRyhtc2cpIFwKKwkucmRhdGE7IFwKKzk6CS5hc2NpaXoJbXNnOyBcCisJLnRleHQKKworI2RlZmluZSBBU01TVFIoc3RyKSBcCisJLmFzY2lpeiBzdHI7IFwKKwkuYWxpZ24JMworCisjZW5kaWYgLyogIV9NSVBTX0FTTV9IICovCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9pbmNsdWRlL21hY2hpbmUvY2RlZnMuaCBiL2xpYmMvYXJjaC1taXBzL2luY2x1ZGUvbWFjaGluZS9jZGVmcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1MjM3NmEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtbWlwcy9pbmNsdWRlL21hY2hpbmUvY2RlZnMuaApAQCAtMCwwICsxLDQ3IEBACisvKgkkT3BlbkJTRDogY2RlZnMuaCx2IDEuNCAyMDA2LzAxLzEwIDAwOjA0OjA0IG1pbGxlcnQgRXhwICQJKi8KKworLyoKKyAqIENvcHlyaWdodCAoYykgMjAwMi0yMDAzIE9wc3ljb24gQUIgICh3d3cub3BzeWNvbi5zZSAvIHd3dy5vcHN5Y29uLmNvbSkKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUworICogT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKi8KKworCisjaWZuZGVmIF9NSVBTX0NERUZTX0hfCisjZGVmaW5lCV9NSVBTX0NERUZTX0hfCisKKyNpZiBkZWZpbmVkKGxpbnQpCisjZGVmaW5lIF9faW5kcl9yZWZlcmVuY2Uoc3ltLGFsaWFzKQlfX2xpbnRfZXF1YWxfXyhzeW0sYWxpYXMpCisjZGVmaW5lIF9fd2Fybl9yZWZlcmVuY2VzKHN5bSxtc2cpCisjZGVmaW5lIF9fd2Vha19hbGlhcyhhbGlhcyxzeW0pCQlfX2xpbnRfZXF1YWxfXyhzeW0sYWxpYXMpCisjZWxpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiBkZWZpbmVkKF9fU1REQ19fKQorI2RlZmluZSBfX3dlYWtfYWxpYXMoYWxpYXMsc3ltKQkJCQlcCisJX19hc21fXygiLndlYWsgIiBfX1NUUklORyhhbGlhcykgIiA7ICIJCVwKKwkgICAgX19TVFJJTkcoYWxpYXMpICIgPSAiIF9fU1RSSU5HKHN5bSkpCisjZGVmaW5lCV9fd2Fybl9yZWZlcmVuY2VzKHN5bSxtc2cpCQkJXAorCV9fYXNtX18oIi5zZWN0aW9uIC5nbnUud2FybmluZy4iIF9fU1RSSU5HKHN5bSkJXAorCSAgICAiIDsgLmFzY2lpIFwiIiBtc2cgIlwiIDsgLnRleHQiKQorI2RlZmluZQlfX2luZHJfcmVmZXJlbmNlcyhzeW0sbXNnKQkvKiBub3RoaW5nICovCisjZW5kaWYKKworI2VuZGlmIC8qICFfTUlQU19DREVGU19IXyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvaW5jbHVkZS9tYWNoaW5lL2VsZl9tYWNoZGVwLmggYi9saWJjL2FyY2gtbWlwcy9pbmNsdWRlL21hY2hpbmUvZWxmX21hY2hkZXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMjdkNDMxCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHMvaW5jbHVkZS9tYWNoaW5lL2VsZl9tYWNoZGVwLmgKQEAgLTAsMCArMSwxOTYgQEAKKy8qCSROZXRCU0Q6IGVsZl9tYWNoZGVwLmgsdiAxLjE1IDIwMTEvMDMvMTUgMDc6Mzk6MjIgbWF0dCBFeHAgJAkqLworCisjaWZuZGVmIF9NSVBTX0VMRl9NQUNIREVQX0hfCisjZGVmaW5lICBfTUlQU19FTEZfTUFDSERFUF9IXworCisjaWZkZWYgX0xQNjQKKyNkZWZpbmUgQVJDSF9FTEZTSVpFCQk2NAkvKiBNRCBuYXRpdmUgYmluYXJ5IHNpemUgKi8KKyNlbHNlCisjZGVmaW5lIEFSQ0hfRUxGU0laRQkJMzIJLyogTUQgbmF0aXZlIGJpbmFyeSBzaXplICovCisjZW5kaWYKKworI2lmIEVMRlNJWkUgPT0gMzIKKyNkZWZpbmUJRUxGMzJfTUFDSERFUF9JRF9DQVNFUwkJCQkJCVwKKwkJY2FzZSBFTV9NSVBTOgkJCQkJCVwKKwkJCWJyZWFrOworCisjZGVmaW5lCUVMRjMyX01BQ0hERVBfSUQJRU1fTUlQUworI2VsaWYgRUxGU0laRSA9PSA2NAorI2RlZmluZQlFTEY2NF9NQUNIREVQX0lEX0NBU0VTCQkJCQkJXAorCQljYXNlIEVNX01JUFM6CQkJCQkJXAorCQkJYnJlYWs7CisKKyNkZWZpbmUJRUxGNjRfTUFDSERFUF9JRAlFTV9NSVBTCisjZW5kaWYKKworLyogbWlwcyByZWxvY3MuICAqLworCisjZGVmaW5lIFJfTUlQU19OT05FCQkwCisjZGVmaW5lIFJfTUlQU18xNgkJMQorI2RlZmluZSBSX01JUFNfMzIJCTIKKyNkZWZpbmUgUl9NSVBTX1JFTDMyCQkzCisjZGVmaW5lIFJfTUlQU19SRUwJCVJfTUlQU19SRUwzMgorI2RlZmluZSBSX01JUFNfMjYJCTQKKyNkZWZpbmUgUl9NSVBTX0hJMTYJCTUJLyogaGlnaCAxNiBiaXRzIG9mIHN5bWJvbCB2YWx1ZSAqLworI2RlZmluZSBSX01JUFNfTE8xNgkJNgkvKiBsb3cgMTYgYml0cyBvZiBzeW1ib2wgdmFsdWUgKi8KKyNkZWZpbmUgUl9NSVBTX0dQUkVMMTYJCTcgIAkvKiBHUC1yZWxhdGl2ZSByZWZlcmVuY2UgICovCisjZGVmaW5lIFJfTUlQU19MSVRFUkFMCQk4IAkvKiBSZWZlcmVuY2UgdG8gbGl0ZXJhbCBzZWN0aW9uICAqLworI2RlZmluZSBSX01JUFNfR09UMTYJCTkJLyogUmVmZXJlbmNlIHRvIGdsb2JhbCBvZmZzZXQgdGFibGUgKi8KKyNkZWZpbmUgUl9NSVBTX0dPVAkJUl9NSVBTX0dPVDE2CisjZGVmaW5lIFJfTUlQU19QQzE2CQkxMCAgCS8qIDE2IGJpdCBQQyByZWxhdGl2ZSByZWZlcmVuY2UgKi8KKyNkZWZpbmUgUl9NSVBTX0NBTEwxNiAJCTExICAJLyogMTYgYml0IGNhbGwgdGhydSBnbGJsIG9mZnNldCB0YmwgKi8KKyNkZWZpbmUgUl9NSVBTX0NBTEwJCVJfTUlQU19DQUxMMTYKKyNkZWZpbmUgUl9NSVBTX0dQUkVMMzIJCTEyCisKKy8qIDEzLCAxNCwgMTUgYXJlIG5vdCBkZWZpbmVkIGF0IHRoaXMgcG9pbnQuICovCisjZGVmaW5lIFJfTUlQU19VTlVTRUQxCQkxMworI2RlZmluZSBSX01JUFNfVU5VU0VEMgkJMTQKKyNkZWZpbmUgUl9NSVBTX1VOVVNFRDMJCTE1CisKKy8qCisgKiBUaGUgcmVtYWluaW5nIHJlbG9jcyBhcmUgYXBwYXJlbnRseSBwYXJ0IG9mIHRoZSA2NC1iaXQgSXJpeCBFTEYgQUJJLgorICovCisjZGVmaW5lIFJfTUlQU19TSElGVDUJCTE2CisjZGVmaW5lIFJfTUlQU19TSElGVDYJCTE3CisKKyNkZWZpbmUgUl9NSVBTXzY0CQkxOAorI2RlZmluZSBSX01JUFNfR09UX0RJU1AJCTE5CisjZGVmaW5lIFJfTUlQU19HT1RfUEFHRQkJMjAKKyNkZWZpbmUgUl9NSVBTX0dPVF9PRlNUCQkyMQorI2RlZmluZSBSX01JUFNfR09UX0hJMTYJCTIyCisjZGVmaW5lIFJfTUlQU19HT1RfTE8xNgkJMjMKKyNkZWZpbmUgUl9NSVBTX1NVQiAJCTI0CisjZGVmaW5lIFJfTUlQU19JTlNFUlRfQQkJMjUKKyNkZWZpbmUgUl9NSVBTX0lOU0VSVF9CCQkyNgorI2RlZmluZSBSX01JUFNfREVMRVRFCQkyNworI2RlZmluZSBSX01JUFNfSElHSEVSCQkyOAorI2RlZmluZSBSX01JUFNfSElHSEVTVAkJMjkKKyNkZWZpbmUgUl9NSVBTX0NBTExfSEkxNgkzMAorI2RlZmluZSBSX01JUFNfQ0FMTF9MTzE2CTMxCisjZGVmaW5lIFJfTUlQU19TQ05fRElTUAkJMzIKKyNkZWZpbmUgUl9NSVBTX1JFTDE2CQkzMworI2RlZmluZSBSX01JUFNfQUREX0lNTUVESUFURQkzNAorI2RlZmluZSBSX01JUFNfUEpVTVAJCTM1CisjZGVmaW5lIFJfTUlQU19SRUxHT1QJCTM2CisjZGVmaW5lCVJfTUlQU19KQUxSCQkzNworLyogVExTIHJlbG9jYXRpb25zICovCisKKyNkZWZpbmUgUl9NSVBTX1RMU19EVFBNT0QzMgkzOAkvKiBNb2R1bGUgbnVtYmVyIDMyIGJpdCAqLworI2RlZmluZSBSX01JUFNfVExTX0RUUFJFTDMyCTM5CS8qIE1vZHVsZS1yZWxhdGl2ZSBvZmZzZXQgMzIgYml0ICovCisjZGVmaW5lIFJfTUlQU19UTFNfRFRQTU9ENjQJNDAJLyogTW9kdWxlIG51bWJlciA2NCBiaXQgKi8KKyNkZWZpbmUgUl9NSVBTX1RMU19EVFBSRUw2NAk0MQkvKiBNb2R1bGUtcmVsYXRpdmUgb2Zmc2V0IDY0IGJpdCAqLworI2RlZmluZSBSX01JUFNfVExTX0dECQk0MgkvKiAxNiBiaXQgR09UIG9mZnNldCBmb3IgR0QgKi8KKyNkZWZpbmUgUl9NSVBTX1RMU19MRE0JCTQzCS8qIDE2IGJpdCBHT1Qgb2Zmc2V0IGZvciBMRE0gKi8KKyNkZWZpbmUgUl9NSVBTX1RMU19EVFBSRUxfSEkxNgk0NAkvKiBNb2R1bGUtcmVsYXRpdmUgb2Zmc2V0LCBoaWdoIDE2IGJpdHMgKi8KKyNkZWZpbmUgUl9NSVBTX1RMU19EVFBSRUxfTE8xNgk0NQkvKiBNb2R1bGUtcmVsYXRpdmUgb2Zmc2V0LCBsb3cgMTYgYml0cyAqLworI2RlZmluZSBSX01JUFNfVExTX0dPVFRQUkVMCTQ2CS8qIDE2IGJpdCBHT1Qgb2Zmc2V0IGZvciBJRSAqLworI2RlZmluZSBSX01JUFNfVExTX1RQUkVMMzIJNDcJLyogVFAtcmVsYXRpdmUgb2Zmc2V0LCAzMiBiaXQgKi8KKyNkZWZpbmUgUl9NSVBTX1RMU19UUFJFTDY0CTQ4CS8qIFRQLXJlbGF0aXZlIG9mZnNldCwgNjQgYml0ICovCisjZGVmaW5lIFJfTUlQU19UTFNfVFBSRUxfSEkxNgk0OQkvKiBUUC1yZWxhdGl2ZSBvZmZzZXQsIGhpZ2ggMTYgYml0cyAqLworI2RlZmluZSBSX01JUFNfVExTX1RQUkVMX0xPMTYJNTAJLyogVFAtcmVsYXRpdmUgb2Zmc2V0LCBsb3cgMTYgYml0cyAqLworCisjZGVmaW5lIFJfTUlQU19tYXgJCTUxCisKKyNkZWZpbmUgUl9UWVBFKG5hbWUpCQlfX0NPTkNBVChSX01JUFNfLG5hbWUpCisKKyNkZWZpbmUJUl9NSVBTMTZfbWluCQkxMDAKKyNkZWZpbmUJUl9NSVBTMTZfMjYJCTEwMAorI2RlZmluZQlSX01JUFMxNl9HUFJFTAkJMTAxCisjZGVmaW5lCVJfTUlQUzE2X0dPVDE2CQkxMDIKKyNkZWZpbmUJUl9NSVBTMTZfQ0FMTDE2CQkxMDMKKyNkZWZpbmUJUl9NSVBTMTZfSEkxNgkJMTA0CisjZGVmaW5lCVJfTUlQUzE2X0xPMTYJCTEwNQorI2RlZmluZQlSX01JUFMxNl9tYXgJCTEwNgorCisKKy8qIG1pcHMgZHluYW1pYyB0YWdzICovCisKKyNkZWZpbmUgRFRfTUlQU19STERfVkVSU0lPTgkweDcwMDAwMDAxCisjZGVmaW5lIERUX01JUFNfVElNRV9TVEFNUAkweDcwMDAwMDAyCisjZGVmaW5lIERUX01JUFNfSUNIRUNLU1VNCTB4NzAwMDAwMDMKKyNkZWZpbmUgRFRfTUlQU19JVkVSU0lPTgkweDcwMDAwMDA0CisjZGVmaW5lIERUX01JUFNfRkxBR1MJCTB4NzAwMDAwMDUKKyNkZWZpbmUgRFRfTUlQU19CQVNFX0FERFJFU1MJMHg3MDAwMDAwNgorI2RlZmluZSBEVF9NSVBTX0NPTkZMSUNUCTB4NzAwMDAwMDgKKyNkZWZpbmUgRFRfTUlQU19MSUJMSVNUCQkweDcwMDAwMDA5CisjZGVmaW5lIERUX01JUFNfQ09ORkxJQ1ROTwkweDcwMDAwMDBiCisjZGVmaW5lCURUX01JUFNfTE9DQUxfR09UTk8JMHg3MDAwMDAwYQkvKiBudW1iZXIgb2YgbG9jYWwgZ290IGVudHMgKi8KKyNkZWZpbmUgRFRfTUlQU19MSUJMSVNUTk8JMHg3MDAwMDAxMAorI2RlZmluZQlEVF9NSVBTX1NZTVRBQk5PCTB4NzAwMDAwMTEJLyogbnVtYmVyIG9mIC5keW5zeW0gZW50cmllcyAqLworI2RlZmluZSBEVF9NSVBTX1VOUkVGRVhUTk8JMHg3MDAwMDAxMgorI2RlZmluZQlEVF9NSVBTX0dPVFNZTQkJMHg3MDAwMDAxMwkvKiBmaXJzdCBkeW5hbWljIHN5bSBpbiBnb3QgKi8KKyNkZWZpbmUgRFRfTUlQU19ISVBBR0VOTwkweDcwMDAwMDE0CisjZGVmaW5lCURUX01JUFNfUkxEX01BUAkJMHg3MDAwMDAxNgkvKiBhZGRyZXNzIG9mIGxvYWRlciBtYXAgKi8KKworLyoKKyAqIEVMRiBGbGFncworICovCisjZGVmaW5lCUVGX01JUFNfUElDCQkweDAwMDAwMDAyCS8qIENvbnRhaW5zIFBJQyBjb2RlICovCisjZGVmaW5lCUVGX01JUFNfQ1BJQwkJMHgwMDAwMDAwNAkvKiBTVEQgUElDIGNhbGxpbmcgc2VxdWVuY2UgKi8KKyNkZWZpbmUJRUZfTUlQU19BQkkyCQkweDAwMDAwMDIwCS8qIE4zMiAqLworCisjZGVmaW5lCUVGX01JUFNfQVJDSF9BU0UJMHgwZjAwMDAwMAkvKiBBcmNoaXRlY3R1cmFsIGV4dGVuc2lvbnMgKi8KKyNkZWZpbmUJRUZfTUlQU19BUkNIX01ETVgJMHgwODAwMDAwMAkvKiBNRE1YIG11bHRpbWVkaWEgZXh0ZW5zaW9uICovCisjZGVmaW5lCUVGX01JUFNfQVJDSF9NMTYJMHgwNDAwMDAwMAkvKiBNSVBTLTE2IElTQSBleHRlbnNpb25zICovCisKKyNkZWZpbmUJRUZfTUlQU19BUkNICQkweGYwMDAwMDAwCS8qIEFyY2hpdGVjdHVyZSBmaWVsZCAqLworI2RlZmluZQlFRl9NSVBTX0FSQ0hfMQkJMHgwMDAwMDAwMAkvKiAtbWlwczEgY29kZSAqLworI2RlZmluZQlFRl9NSVBTX0FSQ0hfMgkJMHgxMDAwMDAwMAkvKiAtbWlwczIgY29kZSAqLworI2RlZmluZQlFRl9NSVBTX0FSQ0hfMwkJMHgyMDAwMDAwMAkvKiAtbWlwczMgY29kZSAqLworI2RlZmluZQlFRl9NSVBTX0FSQ0hfNAkJMHgzMDAwMDAwMAkvKiAtbWlwczQgY29kZSAqLworI2RlZmluZQlFRl9NSVBTX0FSQ0hfNQkJMHg0MDAwMDAwMAkvKiAtbWlwczUgY29kZSAqLworI2RlZmluZQlFRl9NSVBTX0FSQ0hfMzIJCTB4NTAwMDAwMDAJLyogLW1pcHMzMiBjb2RlICovCisjZGVmaW5lCUVGX01JUFNfQVJDSF82NAkJMHg2MDAwMDAwMAkvKiAtbWlwczY0IGNvZGUgKi8KKyNkZWZpbmUJRUZfTUlQU19BUkNIXzMyUjIJMHg3MDAwMDAwMAkvKiAtbWlwczMycjIgY29kZSAqLworI2RlZmluZQlFRl9NSVBTX0FSQ0hfNjRSMgkweDgwMDAwMDAwCS8qIC1taXBzNjRyMiBjb2RlICovCisKKyNkZWZpbmUJRUZfTUlQU19BQkkJCTB4MDAwMGYwMDAKKyNkZWZpbmUJRUZfTUlQU19BQklfTzMyCQkweDAwMDAxMDAwCisjZGVmaW5lCUVGX01JUFNfQUJJX082NAkJMHgwMDAwMjAwMAorI2RlZmluZQlFRl9NSVBTX0FCSV9FQUJJMzIJMHgwMDAwMzAwMAorI2RlZmluZQlFRl9NSVBTX0FCSV9FQUJJNjQJMHgwMDAwNDAwMAorCisjaWYgZGVmaW5lZChfX01JUFNFQl9fKQorI2RlZmluZQlFTEYzMl9NQUNIREVQX0VORElBTk5FU1MJRUxGREFUQTJNU0IKKyNkZWZpbmUJRUxGNjRfTUFDSERFUF9FTkRJQU5ORVNTCUVMRkRBVEEyTVNCCisjZWxpZiBkZWZpbmVkKF9fTUlQU0VMX18pCisjZGVmaW5lCUVMRjMyX01BQ0hERVBfRU5ESUFOTkVTUwlFTEZEQVRBMkxTQgorI2RlZmluZQlFTEY2NF9NQUNIREVQX0VORElBTk5FU1MJRUxGREFUQTJMU0IKKyNlbGlmICFkZWZpbmVkKEhBVkVfTkJUT09MX0NPTkZJR19IKQorI2Vycm9yIG5laXRoZXIgX19NSVBTRUxfXyBub3IgX19NSVBTRUJfXyBhcmUgZGVmaW5lZC4KKyNlbmRpZgorCisjaWZkZWYgX0tFUk5FTAorI2lmZGVmIF9LRVJORUxfT1BUCisjaW5jbHVkZSAib3B0X2NvbXBhdF9uZXRic2QuaCIKKyNlbmRpZgorI2lmZGVmIENPTVBBVF8xNgorLyoKKyAqIFVwIHRvIDEuNiwgdGhlIEVMRiBkeW5hbWljIGxvYWRlciAobGQuZWxmX3NvKSB3YXMgbm90IHJlbG9jYXRhYmxlLgorICogVGVsbCB0aGUga2VybmVsIEVMRiBleGVjIGNvZGUgbm90IHRvIHRyeSByZWxvY2F0aW5nIHRoZSBpbnRlcnByZXRlcgorICogZm9yIGR5bmFtaWNhbGx5LWxpbmtlZCBFTEYgYmluYXJpZXMuCisgKi8KKyNkZWZpbmUgRUxGX0lOVEVSUF9OT05fUkVMT0NBVEFCTEUKKyNlbmRpZiAvKiBDT01QQVRfMTYgKi8KKworLyoKKyAqIFdlIG5lZWQgdG8gYmUgYWJsZSB0byBpbmNsdWRlIHRoZSBFTEYgaGVhZGVyIHNvIHdlIGNhbiBwaWNrIG91dCB0aGUKKyAqIEFCSSBiZWluZyB1c2VkLgorICovCisjaWZkZWYgRUxGU0laRQorI2RlZmluZQlFTEZfTURfUFJPQkVfRlVOQwlFTEZOQU1FMihtaXBzX25ldGJzZCxwcm9iZSkKKyNkZWZpbmUJRUxGX01EX0NPUkVEVU1QX1NFVFVQCUVMRk5BTUUyKGNvcmVkdW1wLHNldHVwKQorI2VuZGlmCisKK3N0cnVjdCBleGVjX3BhY2thZ2U7CisKK2ludCBtaXBzX25ldGJzZF9lbGYzMl9wcm9iZShzdHJ1Y3QgbHdwICosIHN0cnVjdCBleGVjX3BhY2thZ2UgKiwgdm9pZCAqLCBjaGFyICosCisJdmFkZHJfdCAqKTsKK3ZvaWQgY29yZWR1bXBfZWxmMzJfc2V0dXAoc3RydWN0IGx3cCAqLCB2b2lkICopOworCitpbnQgbWlwc19uZXRic2RfZWxmNjRfcHJvYmUoc3RydWN0IGx3cCAqLCBzdHJ1Y3QgZXhlY19wYWNrYWdlICosIHZvaWQgKiwgY2hhciAqLAorCXZhZGRyX3QgKik7Cit2b2lkIGNvcmVkdW1wX2VsZjY0X3NldHVwKHN0cnVjdCBsd3AgKiwgdm9pZCAqKTsKKyNlbmRpZiAvKiBfS0VSTkVMICovCisKKyNlbmRpZiAvKiBfTUlQU19FTEZfTUFDSERFUF9IXyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvaW5jbHVkZS9tYWNoaW5lL2VuZGlhbi5oIGIvbGliYy9hcmNoLW1pcHMvaW5jbHVkZS9tYWNoaW5lL2VuZGlhbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxYTkwMDQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtbWlwcy9pbmNsdWRlL21hY2hpbmUvZW5kaWFuLmgKQEAgLTAsMCArMSw3MCBAQAorLyoJJE9wZW5CU0Q6IGVuZGlhbi5oLHYgMS41IDIwMDYvMDIvMjcgMjM6MzU6NTkgbWlvZCBFeHAgJCAqLworCisvKgorICogQ29weXJpZ2h0IChjKSAyMDAxLTIwMDIgT3BzeWNvbiBBQiAgKHd3dy5vcHN5Y29uLnNlIC8gd3d3Lm9wc3ljb24uY29tKQorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTCisgKiBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqLworCisjaWZuZGVmIF9NSVBTNjRfRU5ESUFOX0hfCisjZGVmaW5lIF9NSVBTNjRfRU5ESUFOX0hfCisKKyNpZmRlZiBfX0dOVUNfXworCisjaWYgZGVmaW5lZChfX21pcHNfaXNhX3JldikgJiYgKF9fbWlwc19pc2FfcmV2ID49IDIpCisjZGVmaW5lIF9fc3dhcDE2bWQoeCkgKHsJCQkJCVwKKyAgICByZWdpc3RlciB1aW50MTZfdCBfeCA9ICh4KTsJCQkJCVwKKyAgICByZWdpc3RlciB1aW50MTZfdCBfcjsJCQkJCVwKKyAgICBfX2FzbSB2b2xhdGlsZSAoIndzYmggJTAsICUxIiA6ICI9ciIgKF9yKSA6ICJyIiAoX3gpKTsJXAorICAgIF9yOwkJCQkJCQkJXAorfSkKKworI2RlZmluZSBfX3N3YXAzMm1kKHgpICh7CQkJCQlcCisgICAgcmVnaXN0ZXIgdWludDMyX3QgX3ggPSAoeCk7CQkJCQlcCisgICAgcmVnaXN0ZXIgdWludDMyX3QgX3I7CQkJCQlcCisgICAgX19hc20gdm9sYXRpbGUgKCJ3c2JoICUwLCAlMTsgcm90ciAlMCwgJTAsIDE2IiA6ICI9ciIgKF9yKSA6ICJyIiAoX3gpKTsgXAorICAgIF9yOwkJCQkJCQkJXAorfSkKKworI2RlZmluZSBfX3N3YXA2NG1kKHgpICh7CQkJCQlcCisgICAgdWludDY0X3QgX3N3YXA2NG1kX3ggPSAoeCk7CQkJCQlcCisgICAgKHVpbnQ2NF90KSBfX3N3YXAzMm1kKF9zd2FwNjRtZF94ID4+IDMyKSB8CQkJXAorICAgICAgICAodWludDY0X3QpIF9fc3dhcDMybWQoX3N3YXA2NG1kX3ggJiAweGZmZmZmZmZmKSA8PCAzMjsJXAorfSkKKworLyogVGVsbCBzeXMvZW5kaWFuLmggd2UgaGF2ZSBNRCB2YXJpYW50cyBvZiB0aGUgc3dhcCBtYWNyb3MuICAqLworI2RlZmluZSBNRF9TV0FQCisKKyNlbmRpZiAgLyogX19taXBzMzJyMl9fICovCisjZW5kaWYgIC8qIF9fR05VQ19fICovCisKKyNpZiBkZWZpbmVkKF9fTUlQU0VCX18pCisjZGVmaW5lIF9CWVRFX09SREVSIF9CSUdfRU5ESUFOCisjZWxzZQorI2RlZmluZSBfQllURV9PUkRFUiBfTElUVExFX0VORElBTgorI2VuZGlmCisjZGVmaW5lIF9fU1RSSUNUX0FMSUdOTUVOVAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9lbmRpYW4uaD4KKworI2VuZGlmIC8qIF9NSVBTNjRfRU5ESUFOX0hfICovCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9pbmNsdWRlL21hY2hpbmUvZXhlYy5oIGIvbGliYy9hcmNoLW1pcHMvaW5jbHVkZS9tYWNoaW5lL2V4ZWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYzYzZjc0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHMvaW5jbHVkZS9tYWNoaW5lL2V4ZWMuaApAQCAtMCwwICsxLDE4OCBAQAorLyoJJE9wZW5CU0Q6IGV4ZWMuaCx2IDEuMSAyMDA0LzEwLzE4IDE5OjA1OjM2IGdyYW5nZSBFeHAgJAkqLworCisvKgorICogQ29weXJpZ2h0IChjKSAxOTk2LTIwMDQgUGVyIEZvZ2Vsc3Ryb20sIE9wc3ljb24gQUIKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUworICogT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKi8KKworI2lmbmRlZiBfTUlQUzY0X0VYRUNfSF8KKyNkZWZpbmUgX01JUFM2NF9FWEVDX0hfCisKKyNkZWZpbmUJX19MRFBHU1oJNDA5NgorCisvKgorICogIERlZmluZSB3aGF0IGV4ZWMgImZvcm1hdHMiIHdlIHNob3VsZCBoYW5kbGUuCisgKi8KKyNkZWZpbmUgTkFUSVZFX0VYRUNfRUxGCisjZGVmaW5lIE5BVElWRV9FTEZTSVpFIDY0CisjZGVmaW5lCUVYRUNfU0NSSVBUCisKKy8qCisgKiAgSWYgaW5jbHVkZWQgZnJvbSBzeXMvZXhlYy5oIGRlZmluZSBrZXJuZWxzIEVMRiBmb3JtYXQuCisgKi8KKyNpZmRlZiBfX0xQNjRfXworI2RlZmluZQlBUkNIX0VMRlNJWkUgNjQKKyNkZWZpbmUgREJfRUxGU0laRSA2NAorI2RlZmluZSBFTEZfVEFSR19DTEFTUyAgRUxGQ0xBU1M2NAorI2Vsc2UKKyNkZWZpbmUJQVJDSF9FTEZTSVpFIDMyCisjZGVmaW5lIERCX0VMRlNJWkUgMzIKKyNkZWZpbmUgRUxGX1RBUkdfQ0xBU1MgIEVMRkNMQVNTMzIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChfX01JUFNFQl9fKQorI2RlZmluZSBFTEZfVEFSR19EQVRBCQlFTEZEQVRBMk1TQgorI2Vsc2UKKyNkZWZpbmUgRUxGX1RBUkdfREFUQQkJRUxGREFUQTJMU0IKKyNlbmRpZgorI2RlZmluZSBFTEZfVEFSR19NQUNICQlFTV9NSVBTCisKKyNkZWZpbmUgX05MSVNUX0RPX0VMRgorCisjaWYgZGVmaW5lZChfTFA2NCkKKyNkZWZpbmUgX0tFUk5fRE9fRUxGNjQKKyNpZiBkZWZpbmVkKENPTVBBVF9PMzIpCisjZGVmaW5lIF9LRVJOX0RPX0VMRgorI2VuZGlmCisjZWxzZQorI2RlZmluZSBfS0VSTl9ET19FTEYKKyNlbmRpZgorCisvKiBJbmZvcm1hdGlvbiB0YWtlbiBmcm9tIE1JUFMgQUJJIHN1cHBsZW1lbnRhbCAqLworCisvKiBBcmNoaXRlY3R1cmUgZGVwZW5kZW50IFNlZ21lbnQgdHlwZXMgLSBwX3R5cGUgKi8KKyNkZWZpbmUgUFRfTUlQU19SRUdJTkZPIDB4NzAwMDAwMDAgICAgICAvKiBSZWdpc3RlciB1c2FnZSBpbmZvcm1hdGlvbiAqLworCisvKiBBcmNoaXRlY3R1cmUgZGVwZW5kZW50IGRfdGFnIGZpZWxkIGZvciBFbGYzMl9EeW4uICAqLworI2RlZmluZSBEVF9NSVBTX1JMRF9WRVJTSU9OICAweDcwMDAwMDAxIC8qIFJ1bnRpbWUgTGlua2VyIEludGVyZmFjZSBJRCAqLworI2RlZmluZSBEVF9NSVBTX1RJTUVfU1RBTVAgICAweDcwMDAwMDAyIC8qIFRpbWVzdGFtcCAqLworI2RlZmluZSBEVF9NSVBTX0lDSEVDS1NVTSAgICAweDcwMDAwMDAzIC8qIENrc3VtIG9mIGV4dC4gc3RyLiBhbmQgY29tLiBzaXplcyAqLworI2RlZmluZSBEVF9NSVBTX0lWRVJTSU9OICAgICAweDcwMDAwMDA0IC8qIFZlcnNpb24gc3RyaW5nIChzdHJpbmcgdGJsIGluZGV4KSAqLworI2RlZmluZSBEVF9NSVBTX0ZMQUdTICAgICAgICAweDcwMDAwMDA1IC8qIEZsYWdzICovCisjZGVmaW5lIERUX01JUFNfQkFTRV9BRERSRVNTIDB4NzAwMDAwMDYgLyogU2VnbWVudCBiYXNlIGFkZHJlc3MgKi8KKyNkZWZpbmUgRFRfTUlQU19DT05GTElDVCAgICAgMHg3MDAwMDAwOCAvKiBBZHIgb2YgLmNvbmZsaWN0IHNlY3Rpb24gKi8KKyNkZWZpbmUgRFRfTUlQU19MSUJMSVNUICAgICAgMHg3MDAwMDAwOSAvKiBBZGRyZXNzIG9mIC5saWJsaXN0IHNlY3Rpb24gKi8KKyNkZWZpbmUgRFRfTUlQU19MT0NBTF9HT1ROTyAgMHg3MDAwMDAwYSAvKiBOdW1iZXIgb2YgbG9jYWwgLkdPVCBlbnRyaWVzICovCisjZGVmaW5lIERUX01JUFNfQ09ORkxJQ1ROTyAgIDB4NzAwMDAwMGIgLyogTnVtYmVyIG9mIC5jb25mbGljdCBlbnRyaWVzICovCisjZGVmaW5lIERUX01JUFNfTElCTElTVE5PICAgIDB4NzAwMDAwMTAgLyogTnVtYmVyIG9mIC5saWJsaXN0IGVudHJpZXMgKi8KKyNkZWZpbmUgRFRfTUlQU19TWU1UQUJOTyAgICAgMHg3MDAwMDAxMSAvKiBOdW1iZXIgb2YgLmR5bnN5bSBlbnRyaWVzICovCisjZGVmaW5lIERUX01JUFNfVU5SRUZFWFROTyAgIDB4NzAwMDAwMTIgLyogRmlyc3QgZXh0ZXJuYWwgRFlOU1lNICovCisjZGVmaW5lIERUX01JUFNfR09UU1lNICAgICAgIDB4NzAwMDAwMTMgLyogRmlyc3QgR09UIGVudHJ5IGluIC5keW5zeW0gKi8KKyNkZWZpbmUgRFRfTUlQU19ISVBBR0VOTyAgICAgMHg3MDAwMDAxNCAvKiBOdW1iZXIgb2YgR09UIHBhZ2UgdGFibGUgZW50cmllcyAqLworI2RlZmluZSBEVF9NSVBTX1JMRF9NQVAgICAgICAweDcwMDAwMDE2IC8qIEFkZHJlc3Mgb2YgZGVidWcgbWFwIHBvaW50ZXIgKi8KKworI2RlZmluZSBEVF9QUk9DTlVNIChEVF9NSVBTX1JMRF9NQVAgLSBEVF9MT1BST0MgKyAxKQorCisvKgorICogTGVnYWwgdmFsdWVzIGZvciBlX2ZsYWdzIGZpZWxkIG9mIEVsZjMyX0VoZHIuCisgKi8KKyNkZWZpbmUgRUZfTUlQU19OT1JFT1JERVIJMHgwMDAwMDAwMQkvKiAubm9yZW9yZGVyIHdhcyB1c2VkICovCisjZGVmaW5lIEVGX01JUFNfUElDCQkweDAwMDAwMDAyCS8qIENvbnRhaW5zIFBJQyBjb2RlICovCisjZGVmaW5lIEVGX01JUFNfQ1BJQwkJMHgwMDAwMDAwNAkvKiBVc2VzIFBJQyBjYWxsaW5nIHNlcXVlbmNlICovCisjZGVmaW5lCUVGX01JUFNfQUJJMgkJMHgwMDAwMDAyMAkvKiAtbjMyIG9uIElyaXggNiAqLworI2RlZmluZQlFRl9NSVBTXzMyQklUTU9ERQkweDAwMDAwMTAwCS8qIDY0IGJpdCBpbiAzMiBiaXQgbW9kZS4uLiAqLworI2RlZmluZSBFRl9NSVBTX0FSQ0gJCTB4ZjAwMDAwMDAJLyogTUlQUyBhcmNoaXRlY3R1cmUgbGV2ZWwgKi8KKyNkZWZpbmUJRV9NSVBTX0FSQ0hfMQkJMHgwMDAwMDAwMAorI2RlZmluZQlFX01JUFNfQVJDSF8yCQkweDEwMDAwMDAwCisjZGVmaW5lCUVfTUlQU19BUkNIXzMJCTB4MjAwMDAwMDAKKyNkZWZpbmUJRV9NSVBTX0FSQ0hfNAkJMHgzMDAwMDAwMAorI2RlZmluZQlFRl9NSVBTX0FCSQkJMHgwMDAwZjAwMAkvKiBBQkkgbGV2ZWwgKi8KKyNkZWZpbmUJRV9NSVBTX0FCSV9OT05FCQkweDAwMDAwMDAwCS8qIEFCSSBsZXZlbCBub3Qgc2V0ICovCisjZGVmaW5lCUVfTUlQU19BQklfTzMyCQkweDAwMDAxMDAwCisjZGVmaW5lCUVfTUlQU19BQklfTzY0CQkweDAwMDAyMDAwCisjZGVmaW5lCUVfTUlQU19BQklfRUFCSTMyCTB4MDAwMDQwMDAKKyNkZWZpbmUJRV9NSVBTX0FCSV9FQUJJNjQJMHgwMDAwNDAwMAorCisvKgorICogTWlwcyBzcGVjaWFsIHNlY3Rpb25zLgorICovCisjZGVmaW5lCVNITl9NSVBTX0FDT01NT04JMHhmZjAwCQkvKiBBbGxvY2F0ZWQgY29tbW9uIHN5bWJvbHMgKi8KKyNkZWZpbmUJU0hOX01JUFNfU0NPTU1PTgkweGZmMDMJCS8qIFNtYWxsIGNvbW1vbiBzeW1ib2xzICovCisjZGVmaW5lCVNITl9NSVBTX1NVTkRFRklORUQJMHhmZjA0CQkvKiBTbWFsbCB1bmRlZmluZWQgc3ltYm9scyAqLworCisvKgorICogTGVnYWwgdmFsdWVzIGZvciBzaF90eXBlIGZpZWxkIG9mIEVsZjMyX1NoZHIuCisgKi8KKyNkZWZpbmUJU0hUX01JUFNfTElCTElTVCAgMHg3MDAwMDAwMAkvKiBTaGFyZWQgb2JqZWN0cyB1c2VkIGluIGxpbmsgKi8KKyNkZWZpbmUJU0hUX01JUFNfQ09ORkxJQ1QgMHg3MDAwMDAwMgkvKiBDb25mbGljdGluZyBzeW1ib2xzICovCisjZGVmaW5lCVNIVF9NSVBTX0dQVEFCICAgIDB4NzAwMDAwMDMJLyogR2xvYmFsIGRhdGEgYXJlYSBzaXplcyAqLworI2RlZmluZQlTSFRfTUlQU19VQ09ERSAgICAweDcwMDAwMDA0CS8qIFJlc2VydmVkIGZvciBTR0kvTUlQUyBjb21waWxlcnMgKi8KKyNkZWZpbmUJU0hUX01JUFNfREVCVUcgICAgMHg3MDAwMDAwNQkvKiBNSVBTIEVDT0ZGIGRlYnVnZ2luZyBpbmZvcm1hdGlvbiAqLworI2RlZmluZQlTSFRfTUlQU19SRUdJTkZPICAweDcwMDAwMDA2CS8qIFJlZ2lzdGVyIHVzYWdlIGluZm9ybWF0aW9uICovCisKKy8qCisgKiBMZWdhbCB2YWx1ZXMgZm9yIHNoX2ZsYWdzIGZpZWxkIG9mIEVsZjMyX1NoZHIuCisgKi8KKyNkZWZpbmUJU0hGX01JUFNfR1BSRUwJMHgxMDAwMDAwMAkvKiBNdXN0IGJlIHBhcnQgb2YgZ2xvYmFsIGRhdGEgYXJlYSAqLworCisjaWYgMAorLyoKKyAqIEVudHJpZXMgZm91bmQgaW4gc2VjdGlvbnMgb2YgdHlwZSBTSFRfTUlQU19HUFRBQi4KKyAqLwordHlwZWRlZiB1bmlvbiB7CisJc3RydWN0IHsKKwkJRWxmMzJfV29yZCBndF9jdXJyZW50X2dfdmFsdWU7CS8qIC1HIHZhbCB1c2VkIGluIGNvbXBpbGF0aW9uICovCisJCUVsZjMyX1dvcmQgZ3RfdW51c2VkOwkvKiBOb3QgdXNlZCAqLworCX0gZ3RfaGVhZGVyOwkJCS8qIEZpcnN0IGVudHJ5IGluIHNlY3Rpb24gKi8KKwlzdHJ1Y3QgeworCQlFbGYzMl9Xb3JkIGd0X2dfdmFsdWU7CS8qIElmIHRoaXMgdmFsIHdlcmUgdXNlZCBmb3IgLUcgKi8KKwkJRWxmMzJfV29yZCBndF9ieXRlczsJLyogVGhpcyBtYW55IGJ5dGVzIHdvdWxkIGJlIHVzZWQgKi8KKwl9IGd0X2VudHJ5OwkJCS8qIFN1YnNlcXVlbnQgZW50cmllcyBpbiBzZWN0aW9uICovCit9IEVsZjMyX2dwdGFiOworCisvKgorICogRW50cnkgZm91bmQgaW4gc2VjdGlvbnMgb2YgdHlwZSBTSFRfTUlQU19SRUdJTkZPLgorICovCit0eXBlZGVmIHN0cnVjdCB7CisJRWxmMzJfV29yZAlyaV9ncHJtYXNrOwkvKiBHZW5lcmFsIHJlZ2lzdGVycyB1c2VkICovCisJRWxmMzJfV29yZAlyaV9jcHJtYXNrWzRdOwkvKiBDb3Byb2Nlc3NvciByZWdpc3RlcnMgdXNlZCAqLworCUVsZjMyX1N3b3JkCXJpX2dwX3ZhbHVlOwkvKiAkZ3AgcmVnaXN0ZXIgdmFsdWUgKi8KK30gRWxmMzJfUmVnSW5mbzsKKyNlbmRpZgorCisKKy8qCisgKiBNaXBzIHJlbG9jYXRpb25zLgorICovCisKKyNkZWZpbmUJUl9NSVBTX05PTkUJMAkvKiBObyByZWxvYyAqLworI2RlZmluZQlSX01JUFNfMTYJMQkvKiBEaXJlY3QgMTYgYml0ICovCisjZGVmaW5lCVJfTUlQU18zMgkyCS8qIERpcmVjdCAzMiBiaXQgKi8KKyNkZWZpbmUJUl9NSVBTX1JFTDMyCTMJLyogUEMgcmVsYXRpdmUgMzIgYml0ICovCisjZGVmaW5lCVJfTUlQU18yNgk0CS8qIERpcmVjdCAyNiBiaXQgc2hpZnRlZCAqLworI2RlZmluZQlSX01JUFNfSEkxNgk1CS8qIEhpZ2ggMTYgYml0ICovCisjZGVmaW5lCVJfTUlQU19MTzE2CTYJLyogTG93IDE2IGJpdCAqLworI2RlZmluZQlSX01JUFNfR1BSRUwxNgk3CS8qIEdQIHJlbGF0aXZlIDE2IGJpdCAqLworI2RlZmluZQlSX01JUFNfTElURVJBTAk4CS8qIDE2IGJpdCBsaXRlcmFsIGVudHJ5ICovCisjZGVmaW5lCVJfTUlQU19HT1QxNgk5CS8qIDE2IGJpdCBHT1QgZW50cnkgKi8KKyNkZWZpbmUJUl9NSVBTX1BDMTYJMTAJLyogUEMgcmVsYXRpdmUgMTYgYml0ICovCisjZGVmaW5lCVJfTUlQU19DQUxMMTYJMTEJLyogMTYgYml0IEdPVCBlbnRyeSBmb3IgZnVuY3Rpb24gKi8KKyNkZWZpbmUJUl9NSVBTX0dQUkVMMzIJMTIJLyogR1AgcmVsYXRpdmUgMzIgYml0ICovCisKKyNkZWZpbmUJUl9NSVBTXzY0CTE4CisKKyNkZWZpbmUJUl9NSVBTX1JFTDMyXzY0CSgoUl9NSVBTXzY0IDw8IDgpIHwgUl9NSVBTX1JFTDMyKQorCisKKyNlbmRpZgkvKiAhX01JUFM2NF9FWEVDX0hfICovCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9pbmNsdWRlL21hY2hpbmUvaWVlZS5oIGIvbGliYy9hcmNoLW1pcHMvaW5jbHVkZS9tYWNoaW5lL2llZWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MjBhNzdiCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHMvaW5jbHVkZS9tYWNoaW5lL2llZWUuaApAQCAtMCwwICsxLDE2OSBAQAorLyoJJE9wZW5CU0Q6IGllZWUuaCx2IDEuNCAyMDEwLzAxLzIzIDE5OjExOjIxIG1pb2QgRXhwICQJKi8KKworLyoKKyAqIENvcHlyaWdodCAoYykgMTk5MiwgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSB3YXMgZGV2ZWxvcGVkIGJ5IHRoZSBDb21wdXRlciBTeXN0ZW1zIEVuZ2luZWVyaW5nIGdyb3VwCisgKiBhdCBMYXdyZW5jZSBCZXJrZWxleSBMYWJvcmF0b3J5IHVuZGVyIERBUlBBIGNvbnRyYWN0IEJHIDkxLTY2IGFuZAorICogY29udHJpYnV0ZWQgdG8gQmVya2VsZXkuCisgKgorICogQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCisgKiBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6CisgKglUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBVbml2ZXJzaXR5IG9mCisgKglDYWxpZm9ybmlhLCBMYXdyZW5jZSBCZXJrZWxleSBMYWJvcmF0b3J5LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKglAKCMpaWVlZS5oCTguMSAoQmVya2VsZXkpIDYvMTEvOTMKKyAqLworCisvKgorICogaWVlZS5oIGRlZmluZXMgdGhlIG1hY2hpbmUtZGVwZW5kZW50IGxheW91dCBvZiB0aGUgbWFjaGluZSdzIElFRUUKKyAqIGZsb2F0aW5nIHBvaW50LiAgSXQgZG9lcyAqbm90KiBkZWZpbmUgKHlldD8pIGFueSBvZiB0aGUgcm91bmRpbmcKKyAqIG1vZGUgYml0cywgZXhjZXB0aW9ucywgYW5kIHNvIGZvcnRoLgorICovCisKKy8qCisgKiBEZWZpbmUgdGhlIG51bWJlciBvZiBiaXRzIGluIGVhY2ggZnJhY3Rpb24gYW5kIGV4cG9uZW50LgorICoKKyAqCQkgICAgIGsJICAgICAgICAgaysxCisgKiBOb3RlIHRoYXQgIDEuMCB4IDIgID09IDAuMSB4IDIgICAgICBhbmQgdGhhdCBkZW5vcm1zIGFyZSByZXByZXNlbnRlZAorICoKKyAqCQkJCQkgICgtZXhwX2JpYXMrMSkKKyAqIGFzIGZyYWN0aW9ucyB0aGF0IGxvb2sgbGlrZSAwLmZmZmZmIHggMiAgICAgICAgICAgICAuICBUaGlzIG1lYW5zIHRoYXQKKyAqCisgKgkJCSAtMTI2CisgKiB0aGUgbnVtYmVyIDAuMTAwMDAgeCAyICAgICwgZm9yIGluc3RhbmNlLCBpcyB0aGUgc2FtZSBhcyB0aGUgbm9ybWFsaXplZAorICoKKyAqCQktMTI3CQkJICAgLTEyOAorICogZmxvYXQgMS4wIHggMiAgICAuICBUaHVzLCB0byByZXByZXNlbnQgMiAgICAsIHdlIG5lZWQgb25lIGxlYWRpbmcgemVybworICoKKyAqCQkJCSAgLTEyOQorICogaW4gdGhlIGZyYWN0aW9uOyB0byByZXByZXNlbnQgMiAgICAsIHdlIG5lZWQgdHdvLCBhbmQgc28gb24uICBUaGlzCisgKgorICoJCQkJCQkgICAgICgtZXhwX2JpYXMtZnJhY2JpdHMrMSkKKyAqIGltcGxpZXMgdGhhdCB0aGUgc21hbGxlc3QgZGVub3JtYWxpemVkIG51bWJlciBpcyAyCisgKgorICogZm9yIHdoaWNoZXZlciBmb3JtYXQgd2UgYXJlIHRhbGtpbmcgYWJvdXQ6IGZvciBzaW5nbGUgcHJlY2lzaW9uLCBmb3IKKyAqCisgKgkJCQkJCS0xMjYJCS0xNDkKKyAqIGluc3RhbmNlLCB3ZSBnZXQgLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxIHggMiAgICAsIG9yIDEuMCB4IDIgICAgLCBhbmQKKyAqCisgKiAtMTQ5ID09IC0xMjcgLSAyMyArIDEuCisgKi8KKyNkZWZpbmUJU05HX0VYUEJJVFMJOAorI2RlZmluZQlTTkdfRlJBQ0JJVFMJMjMKKworI2RlZmluZQlEQkxfRVhQQklUUwkxMQorI2RlZmluZQlEQkxfRlJBQ0hCSVRTCTIwCisjZGVmaW5lCURCTF9GUkFDTEJJVFMJMzIKKyNkZWZpbmUJREJMX0ZSQUNCSVRTCTUyCisKKyNkZWZpbmUJRVhUX0VYUEJJVFMJMTUKKyNkZWZpbmUJRVhUX0ZSQUNIQklUUwkxNgorI2RlZmluZQlFWFRfRlJBQ0hNQklUUwkzMgorI2RlZmluZQlFWFRfRlJBQ0xNQklUUwkzMgorI2RlZmluZQlFWFRfRlJBQ0xCSVRTCTMyCisjZGVmaW5lCUVYVF9GUkFDQklUUwkxMTIKKworI2RlZmluZQlFWFRfSU1QTElDSVRfTkJJVAorCisjZGVmaW5lCUVYVF9UT19BUlJBWTMyKHAsIGEpIGRvIHsJCVwKKwkoYSlbMF0gPSAodWludDMyX3QpKHApLT5leHRfZnJhY2w7CVwKKwkoYSlbMV0gPSAodWludDMyX3QpKHApLT5leHRfZnJhY2xtOwlcCisJKGEpWzJdID0gKHVpbnQzMl90KShwKS0+ZXh0X2ZyYWNobTsJXAorCShhKVszXSA9ICh1aW50MzJfdCkocCktPmV4dF9mcmFjaDsJXAorfSB3aGlsZSgwKQorCitzdHJ1Y3QgaWVlZV9zaW5nbGUgeworI2lmZGVmIF9fTUlQU0VCX18KKwl1X2ludAlzbmdfc2lnbjoxOworCXVfaW50CXNuZ19leHA6ODsKKwl1X2ludAlzbmdfZnJhYzoyMzsKKyNlbHNlCisJdV9pbnQJc25nX2ZyYWM6MjM7CisJdV9pbnQJc25nX2V4cDo4OworCXVfaW50CXNuZ19zaWduOjE7CisjZW5kaWYKK307CisKK3N0cnVjdCBpZWVlX2RvdWJsZSB7CisjaWZkZWYgX19NSVBTRUJfXworCXVfaW50CWRibF9zaWduOjE7CisJdV9pbnQJZGJsX2V4cDoxMTsKKwl1X2ludAlkYmxfZnJhY2g6MjA7CisJdV9pbnQJZGJsX2ZyYWNsOworI2Vsc2UKKwl1X2ludAlkYmxfZnJhY2w7CisJdV9pbnQJZGJsX2ZyYWNoOjIwOworCXVfaW50CWRibF9leHA6MTE7CisJdV9pbnQJZGJsX3NpZ246MTsKKyNlbmRpZgorfTsKKworc3RydWN0IGllZWVfZXh0IHsKKyNpZmRlZiBfX01JUFNFQl9fCisJdV9pbnQJZXh0X3NpZ246MTsKKwl1X2ludAlleHRfZXhwOjE1OworCXVfaW50CWV4dF9mcmFjaDoxNjsKKwl1X2ludAlleHRfZnJhY2htOworCXVfaW50CWV4dF9mcmFjbG07CisJdV9pbnQJZXh0X2ZyYWNsOworI2Vsc2UKKwl1X2ludAlleHRfZnJhY2w7CisJdV9pbnQJZXh0X2ZyYWNsbTsKKwl1X2ludAlleHRfZnJhY2htOworCXVfaW50CWV4dF9mcmFjaDoxNjsKKwl1X2ludAlleHRfZXhwOjE1OworCXVfaW50CWV4dF9zaWduOjE7CisjZW5kaWYKK307CisKKy8qCisgKiBGbG9hdHMgd2hvc2UgZXhwb25lbnQgaXMgaW4gWzEuLklORk5BTikgKG9mIHdoYXRldmVyIHR5cGUpIGFyZQorICogYG5vcm1hbCcuICBGbG9hdHMgd2hvc2UgZXhwb25lbnQgaXMgSU5GTkFOIGFyZSBlaXRoZXIgSW5mIG9yIE5hTi4KKyAqIEZsb2F0cyB3aG9zZSBleHBvbmVudCBpcyB6ZXJvIGFyZSBlaXRoZXIgemVybyAoaWZmIGFsbCBmcmFjdGlvbgorICogYml0cyBhcmUgemVybykgb3Igc3Vibm9ybWFsIHZhbHVlcy4KKyAqCisgKiBBIE5hTiBpcyBhIGBzaWduYWxsaW5nIE5hTicgaWYgaXRzIFFVSUVUTkFOIGJpdCBpcyBjbGVhciBpbiBpdHMKKyAqIGhpZ2ggZnJhY3Rpb247IGlmIHRoZSBiaXQgaXMgc2V0LCBpdCBpcyBhIGBxdWlldCBOYU4nLgorICovCisjZGVmaW5lCVNOR19FWFBfSU5GTkFOCTI1NQorI2RlZmluZQlEQkxfRVhQX0lORk5BTgkyMDQ3CisjZGVmaW5lCUVYVF9FWFBfSU5GTkFOCTMyNzY3CisKKyNpZiAwCisjZGVmaW5lCVNOR19RVUlFVE5BTgkoMSA8PCAyMikKKyNkZWZpbmUJREJMX1FVSUVUTkFOCSgxIDw8IDE5KQorI2RlZmluZQlFWFRfUVVJRVROQU4JKDEgPDwgMTUpCisjZW5kaWYKKworLyoKKyAqIEV4cG9uZW50IGJpYXNlcy4KKyAqLworI2RlZmluZQlTTkdfRVhQX0JJQVMJMTI3CisjZGVmaW5lCURCTF9FWFBfQklBUwkxMDIzCisjZGVmaW5lCUVYVF9FWFBfQklBUwkxNjM4MwpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvaW5jbHVkZS9tYWNoaW5lL2ludGVybmFsX3R5cGVzLmggYi9saWJjL2FyY2gtbWlwcy9pbmNsdWRlL21hY2hpbmUvaW50ZXJuYWxfdHlwZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MjkwNzlmCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHMvaW5jbHVkZS9tYWNoaW5lL2ludGVybmFsX3R5cGVzLmgKQEAgLTAsMCArMSw4IEBACisvKiAkT3BlbkJTRDogaW50ZXJuYWxfdHlwZXMuaCx2IDEuMSAyMDA0LzA4LzA2IDIwOjU2OjAyIHBlZm8gRXhwICQgKi8KKy8qIFB1YmxpYyBkb21haW4gKi8KKyNpZm5kZWYgX01JUFM2NF9JTlRFUk5BTF9UWVBFU19IXworI2RlZmluZSBfTUlQUzY0X0lOVEVSTkFMX1RZUEVTX0hfCisKKy8qIE1hY2hpbmUgc3BlY2lhbCB0eXBlIGRlZmluaXRpb25zICovCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvaW5jbHVkZS9tYWNoaW5lL2tlcm5lbC5oIGIvbGliYy9hcmNoLW1pcHMvaW5jbHVkZS9tYWNoaW5lL2tlcm5lbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5YWQ0MGMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtbWlwcy9pbmNsdWRlL21hY2hpbmUva2VybmVsLmgKQEAgLTAsMCArMSw0MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworI2lmbmRlZiBfQVJDSF9NSVBTX0tFUk5FTF9ICisjZGVmaW5lIF9BUkNIX01JUFNfS0VSTkVMX0gKKworLyogdGhpcyBmaWxlIGNvbnRhaW5zIGtlcm5lbC1zcGVjaWZpYyBkZWZpbml0aW9ucyB0aGF0IHdlcmUgb3B0aW1pemVkIG91dCBvZgorICAgb3VyIHByb2Nlc3NlZCBrZXJuZWwgaGVhZGVycywgYnV0IHN0aWxsIHVzZWZ1bCBub25ldGhlbGVzcy4uLiAqLworCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgICBfX2tlcm5lbF9ibGtjbnRfdDsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyAgIF9fa2VybmVsX2Jsa3NpemVfdDsKKworLyogdGhlc2UgYXJlbid0IHJlYWxseSBkZWZpbmVkIGJ5IHRoZSBrZXJuZWwgaGVhZGVycyB0aG91Z2guLi4gKi8KK3R5cGVkZWYgdW5zaWduZWQgbG9uZyAgIF9fa2VybmVsX2ZzYmxrY250X3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgICBfX2tlcm5lbF9mc2ZpbGNudF90OwordHlwZWRlZiB1bnNpZ25lZCBpbnQgICAgX19rZXJuZWxfaWRfdDsKKworI2VuZGlmIC8qIF9BUkNIX01JUFNfS0VSTkVMX0ggKi8KZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL2luY2x1ZGUvbWFjaGluZS9saW1pdHMuaCBiL2xpYmMvYXJjaC1taXBzL2luY2x1ZGUvbWFjaGluZS9saW1pdHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMzk0NDRkCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHMvaW5jbHVkZS9tYWNoaW5lL2xpbWl0cy5oCkBAIC0wLDAgKzEsNjIgQEAKKy8qCSRPcGVuQlNEOiBsaW1pdHMuaCx2IDEuNSAyMDA3LzA1LzA3IDIwOjUxOjA3IGtldHRlbmlzIEV4cCAkCSovCisKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDE5ODgsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKglAKCMpbGltaXRzLmgJOC4zIChCZXJrZWxleSkgMS80Lzk0CisgKi8KKworI2lmbmRlZiBfTUlQU19MSU1JVFNfSF8KKyNkZWZpbmUgX01JUFNfTElNSVRTX0hfCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKworI2RlZmluZQlNQl9MRU5fTUFYCTYJCS8qIEFsbG93IDMxIGJpdCBVVEYyICovCisKKyNpZm5kZWYJU0laRV9NQVgKKyNkZWZpbmUJU0laRV9NQVgJVUxPTkdfTUFYCS8qIG1heCB2YWx1ZSBmb3IgYSBzaXplX3QgKi8KKyNlbmRpZgorI2RlZmluZQlTU0laRV9NQVgJTE9OR19NQVgJLyogbWF4IHZhbHVlIGZvciBhIHNzaXplX3QgKi8KKworI2lmIF9fQlNEX1ZJU0lCTEUKKyNkZWZpbmUJU0laRV9UX01BWAlVTE9OR19NQVgJLyogbWF4IHZhbHVlIGZvciBhIHNpemVfdCAoaGlzdG9yaWMpICovCisKKy8qIFF1YWRzIGFuZCBsb25ncyBhcmUgdGhlIHNhbWUgb24gbWlwczY0ICovCisjZGVmaW5lCVVRVUFEX01BWAkoVUxPTkdfTUFYKQkvKiBtYXggdmFsdWUgZm9yIGEgdXF1YWRfdCAqLworI2RlZmluZQlRVUFEX01BWAkoTE9OR19NQVgpCS8qIG1heCB2YWx1ZSBmb3IgYSBxdWFkX3QgKi8KKyNkZWZpbmUJUVVBRF9NSU4JKExPTkdfTUlOKQkvKiBtaW4gdmFsdWUgZm9yIGEgcXVhZF90ICovCisKKyNlbmRpZiAvKiBfX0JTRF9WSVNJQkxFICovCisKKworI2RlZmluZSBMT05HTE9OR19CSVQgICAgNjQKKyNkZWZpbmUgTE9OR0xPTkdfTUlOICAgICgtOTIyMzM3MjAzNjg1NDc3NTgwN0xMLTEpCisjZGVmaW5lIExPTkdMT05HX01BWCAgICA5MjIzMzcyMDM2ODU0Nzc1ODA3TEwKKyNkZWZpbmUgVUxPTkdMT05HX01BWCAgIDE4NDQ2NzQ0MDczNzA5NTUxNjE1VUxMCisKKyNlbmRpZiAvKiAhX01JUFNfTElNSVRTX0hfICovCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9pbmNsdWRlL21hY2hpbmUvcmVnZGVmLmggYi9saWJjL2FyY2gtbWlwcy9pbmNsdWRlL21hY2hpbmUvcmVnZGVmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWUxODM5MgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzL2luY2x1ZGUvbWFjaGluZS9yZWdkZWYuaApAQCAtMCwwICsxLDkyIEBACisvKgkkT3BlbkJTRDogcmVnZGVmLmgsdiAxLjMgMjAwNS8wOC8wNyAwNzoyOTo0NCBtaW9kIEV4cCAkCSovCisKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDE5OTIsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKKyAqIFJhbHBoIENhbXBiZWxsLiBUaGlzIGZpbGUgaXMgZGVyaXZlZCBmcm9tIHRoZSBNSVBTIFJJU0MKKyAqIEFyY2hpdGVjdHVyZSBib29rIGJ5IEdlcnJ5IEthbmUuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqCUAoIylyZWdkZWYuaAk4LjEgKEJlcmtlbGV5KSA2LzEwLzkzCisgKi8KKyNpZm5kZWYgX01JUFNfUkVHREVGX0hfCisjZGVmaW5lIF9NSVBTX1JFR0RFRl9IXworCisjZGVmaW5lIHplcm8JJDAJLyogYWx3YXlzIHplcm8gKi8KKyNkZWZpbmUgQVQJJGF0CS8qIGFzc2VtYmxlciB0ZW1wICovCisjZGVmaW5lIHYwCSQyCS8qIHJldHVybiB2YWx1ZSAqLworI2RlZmluZSB2MQkkMworI2RlZmluZSBhMAkkNAkvKiBhcmd1bWVudCByZWdpc3RlcnMgKi8KKyNkZWZpbmUgYTEJJDUKKyNkZWZpbmUgYTIJJDYKKyNkZWZpbmUgYTMJJDcKKyNpZiBkZWZpbmVkKF9fbWlwc19uMzIpIHx8IGRlZmluZWQoX19taXBzX242NCkKKyNkZWZpbmUgYTQJJDgJLyogZXhwYW5kZWQgcmVnaXN0ZXIgYXJndW1lbnRzICovCisjZGVmaW5lIGE1CSQ5CisjZGVmaW5lIGE2CSQxMAorI2RlZmluZSBhNwkkMTEKKyNkZWZpbmUgdGEwCSQ4CS8qIGFsaWFzICovCisjZGVmaW5lIHRhMQkkOQorI2RlZmluZSB0YTIJJDEwCisjZGVmaW5lIHRhMwkkMTEKKyNkZWZpbmUgdDAJJDEyCS8qIHRlbXAgcmVnaXN0ZXJzIChub3Qgc2F2ZWQgYWNyb3NzIHN1YnJvdXRpbmUgY2FsbHMpICovCisjZGVmaW5lIHQxCSQxMworI2RlZmluZSB0MgkkMTQKKyNkZWZpbmUgdDMJJDE1CisjZWxzZQorI2RlZmluZSB0MAkkOAkvKiB0ZW1wIHJlZ2lzdGVycyAobm90IHNhdmVkIGFjcm9zcyBzdWJyb3V0aW5lIGNhbGxzKSAqLworI2RlZmluZSB0MQkkOQorI2RlZmluZSB0MgkkMTAKKyNkZWZpbmUgdDMJJDExCisjZGVmaW5lIHQ0CSQxMgorI2RlZmluZSB0NQkkMTMKKyNkZWZpbmUgdDYJJDE0CisjZGVmaW5lIHQ3CSQxNQorI2RlZmluZSB0YTAJJDEyCS8qIGFsaWFzICovCisjZGVmaW5lIHRhMQkkMTMKKyNkZWZpbmUgdGEyCSQxNAorI2RlZmluZSB0YTMJJDE1CisjZW5kaWYKKyNkZWZpbmUgczAJJDE2CS8qIHNhdmVkIGFjcm9zcyBzdWJyb3V0aW5lIGNhbGxzIChjYWxsZWUgc2F2ZWQpICovCisjZGVmaW5lIHMxCSQxNworI2RlZmluZSBzMgkkMTgKKyNkZWZpbmUgczMJJDE5CisjZGVmaW5lIHM0CSQyMAorI2RlZmluZSBzNQkkMjEKKyNkZWZpbmUgczYJJDIyCisjZGVmaW5lIHM3CSQyMworI2RlZmluZSB0OAkkMjQJLyogdHdvIG1vcmUgdGVtcCByZWdpc3RlcnMgKi8KKyNkZWZpbmUgdDkJJDI1CisjZGVmaW5lIGswCSQyNgkvKiBrZXJuZWwgdGVtcG9yYXJ5ICovCisjZGVmaW5lIGsxCSQyNworI2RlZmluZSBncAkkMjgJLyogZ2xvYmFsIHBvaW50ZXIgKi8KKyNkZWZpbmUgc3AJJDI5CS8qIHN0YWNrIHBvaW50ZXIgKi8KKyNkZWZpbmUgczgJJDMwCS8qIG9uZSBtb3JlIGNhbGxlZSBzYXZlZCAqLworI2RlZmluZSByYQkkMzEJLyogcmV0dXJuIGFkZHJlc3MgKi8KKworI2VuZGlmIC8qICFfTUlQU19SRUdERUZfSF8gKi8KZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL2luY2x1ZGUvbWFjaGluZS9yZWdudW0uaCBiL2xpYmMvYXJjaC1taXBzL2luY2x1ZGUvbWFjaGluZS9yZWdudW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZmUxMjgwCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHMvaW5jbHVkZS9tYWNoaW5lL3JlZ251bS5oCkBAIC0wLDAgKzEsMTE5IEBACisvKgkkT3BlbkJTRDogcmVnbnVtLmgsdiAxLjMgMjAwNC8wOC8xMCAyMDoyODoxMyBkZXJhYWR0IEV4cCAkICovCisKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAwMiBPcHN5Y29uIEFCICAod3d3Lm9wc3ljb24uc2UgLyB3d3cub3BzeWNvbi5jb20pCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MKKyAqIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKgorICovCisKKyNpZm5kZWYgX01JUFM2NF9SRUdOVU1fSF8KKyNkZWZpbmUgX01JUFM2NF9SRUdOVU1fSF8KKworLyoKKyAqIExvY2F0aW9uIG9mIHRoZSBzYXZlZCByZWdpc3RlcnMgcmVsYXRpdmUgdG8gWkVSTy4KKyAqIFVzYWdlIGlzIHAtPnBfcmVnc1tYWF0uCisgKi8KKyNkZWZpbmUgWkVSTwkwCisjZGVmaW5lIEFTVAkxCisjZGVmaW5lIFYwCTIKKyNkZWZpbmUgVjEJMworI2RlZmluZSBBMAk0CisjZGVmaW5lIEExCTUKKyNkZWZpbmUgQTIJNgorI2RlZmluZSBBMwk3CisjZGVmaW5lIFQwCTgKKyNkZWZpbmUgVDEJOQorI2RlZmluZSBUMgkxMAorI2RlZmluZSBUMwkxMQorI2RlZmluZSBUNAkxMgorI2RlZmluZSBUNQkxMworI2RlZmluZSBUNgkxNAorI2RlZmluZSBUNwkxNQorI2RlZmluZSBTMAkxNgorI2RlZmluZSBTMQkxNworI2RlZmluZSBTMgkxOAorI2RlZmluZSBTMwkxOQorI2RlZmluZSBTNAkyMAorI2RlZmluZSBTNQkyMQorI2RlZmluZSBTNgkyMgorI2RlZmluZSBTNwkyMworI2RlZmluZSBUOAkyNAorI2RlZmluZSBUOQkyNQorI2RlZmluZSBLMAkyNgorI2RlZmluZSBLMQkyNworI2RlZmluZSBHUAkyOAorI2RlZmluZSBTUAkyOQorI2RlZmluZSBTOAkzMAorI2RlZmluZSBSQQkzMQorI2RlZmluZQlTUgkzMgorI2RlZmluZQlQUwlTUgkvKiBhbGlhcyBmb3IgU1IgKi8KKyNkZWZpbmUgTVVMTE8JMzMKKyNkZWZpbmUgTVVMSEkJMzQKKyNkZWZpbmUgQkFEVkFERFIgMzUKKyNkZWZpbmUgQ0FVU0UJMzYKKyNkZWZpbmUJUEMJMzcKKyNkZWZpbmUJSUMJMzgKKyNkZWZpbmUJQ1BMCTM5CisKKyNkZWZpbmUJTlVNU0FWRVJFR1MgNDAJCS8qIE51bWJlciBvZiByZWdpc3RlcnMgc2F2ZWQgaW4gdHJhcCAqLworCisjZGVmaW5lIEZQQkFTRQlOVU1TQVZFUkVHUworI2RlZmluZSBGMAkoRlBCQVNFKzApCisjZGVmaW5lIEYxCShGUEJBU0UrMSkKKyNkZWZpbmUgRjIJKEZQQkFTRSsyKQorI2RlZmluZSBGMwkoRlBCQVNFKzMpCisjZGVmaW5lIEY0CShGUEJBU0UrNCkKKyNkZWZpbmUgRjUJKEZQQkFTRSs1KQorI2RlZmluZSBGNgkoRlBCQVNFKzYpCisjZGVmaW5lIEY3CShGUEJBU0UrNykKKyNkZWZpbmUgRjgJKEZQQkFTRSs4KQorI2RlZmluZSBGOQkoRlBCQVNFKzkpCisjZGVmaW5lIEYxMAkoRlBCQVNFKzEwKQorI2RlZmluZSBGMTEJKEZQQkFTRSsxMSkKKyNkZWZpbmUgRjEyCShGUEJBU0UrMTIpCisjZGVmaW5lIEYxMwkoRlBCQVNFKzEzKQorI2RlZmluZSBGMTQJKEZQQkFTRSsxNCkKKyNkZWZpbmUgRjE1CShGUEJBU0UrMTUpCisjZGVmaW5lIEYxNgkoRlBCQVNFKzE2KQorI2RlZmluZSBGMTcJKEZQQkFTRSsxNykKKyNkZWZpbmUgRjE4CShGUEJBU0UrMTgpCisjZGVmaW5lIEYxOQkoRlBCQVNFKzE5KQorI2RlZmluZSBGMjAJKEZQQkFTRSsyMCkKKyNkZWZpbmUgRjIxCShGUEJBU0UrMjEpCisjZGVmaW5lIEYyMgkoRlBCQVNFKzIyKQorI2RlZmluZSBGMjMJKEZQQkFTRSsyMykKKyNkZWZpbmUgRjI0CShGUEJBU0UrMjQpCisjZGVmaW5lIEYyNQkoRlBCQVNFKzI1KQorI2RlZmluZSBGMjYJKEZQQkFTRSsyNikKKyNkZWZpbmUgRjI3CShGUEJBU0UrMjcpCisjZGVmaW5lIEYyOAkoRlBCQVNFKzI4KQorI2RlZmluZSBGMjkJKEZQQkFTRSsyOSkKKyNkZWZpbmUgRjMwCShGUEJBU0UrMzApCisjZGVmaW5lIEYzMQkoRlBCQVNFKzMxKQorI2RlZmluZQlGU1IJKEZQQkFTRSszMikKKworI2RlZmluZQlOVU1GUFJFR1MgMzMKKworI2RlZmluZQlOUkVHUwkoTlVNU0FWRVJFR1MgKyBOVU1GUFJFR1MpCisKKyNlbmRpZiAvKiAhX01JUFM2NF9SRUdOVU1fSF8gKi8KZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL2luY2x1ZGUvbWFjaGluZS9zZXRqbXAuaCBiL2xpYmMvYXJjaC1taXBzL2luY2x1ZGUvbWFjaGluZS9zZXRqbXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NWJhN2JlCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHMvaW5jbHVkZS9tYWNoaW5lL3NldGptcC5oCkBAIC0wLDAgKzEsMTAgQEAKKy8qCSRPcGVuQlNEOiBzZXRqbXAuaCx2IDEuMiAyMDA0LzA4LzEwIDIxOjEwOjU2IHBlZm8gRXhwICQJKi8KKworLyogUHVibGljIGRvbWFpbiAqLworCisjaWZuZGVmIF9NSVBTX1NFVEpNUF9IXworI2RlZmluZSBfTUlQU19TRVRKTVBfSF8KKworI2RlZmluZQlfSkJMRU4JMTU3CQkvKiBzaXplLCBpbiBsb25ncywgb2YgYSBqbXBfYnVmICovCisKKyNlbmRpZiAvKiAhX01JUFNfU0VUSk1QX0hfICovCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9pbmNsdWRlL21hY2hpbmUvc2lnbmFsLmggYi9saWJjL2FyY2gtbWlwcy9pbmNsdWRlL21hY2hpbmUvc2lnbmFsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGVmYjg1NgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzL2luY2x1ZGUvbWFjaGluZS9zaWduYWwuaApAQCAtMCwwICsxLDE0NyBAQAorLyoJJE9wZW5CU0Q6IHNpZ25hbC5oLHYgMS44IDIwMDYvMDEvMDkgMTg6MTg6MzcgbWlsbGVydCBFeHAgJAkqLworCisvKgorICogQ29weXJpZ2h0IChjKSAxOTkyLCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5CisgKiBSYWxwaCBDYW1wYmVsbC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKgorICoJQCgjKXNpZ25hbC5oCTguMSAoQmVya2VsZXkpIDYvMTAvOTMKKyAqLworCisjaWZuZGVmIF9NSVBTX1NJR05BTF9IXworI2RlZmluZSBfTUlQU19TSUdOQUxfSF8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorCisjaWYgIWRlZmluZWQoX19MQU5HVUFHRV9BU1NFTUJMWSkKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKworLyoKKyAqIE1hY2hpbmUtZGVwZW5kZW50IHNpZ25hbCBkZWZpbml0aW9ucworICovCit0eXBlZGVmIGludCBzaWdfYXRvbWljX3Q7CisKKyNpZiBfX0JTRF9WSVNJQkxFIHx8IF9fWFBHX1ZJU0lCTEUgPj0gNDIwCisKKy8qCisgKiBJbmZvcm1hdGlvbiBwdXNoZWQgb24gc3RhY2sgd2hlbiBhIHNpZ25hbCBpcyBkZWxpdmVyZWQuCisgKiBUaGlzIGlzIHVzZWQgYnkgdGhlIGtlcm5lbCB0byByZXN0b3JlIHN0YXRlIGZvbGxvd2luZworICogZXhlY3V0aW9uIG9mIHRoZSBzaWduYWwgaGFuZGxlci4gIEl0IGlzIGFsc28gbWFkZSBhdmFpbGFibGUKKyAqIHRvIHRoZSBoYW5kbGVyIHRvIGFsbG93IGl0IHRvIHJlc3RvcmUgc3RhdGUgcHJvcGVybHkgaWYKKyAqIGEgbm9uLXN0YW5kYXJkIGV4aXQgaXMgcGVyZm9ybWVkLgorICovCisKKyNpZiBkZWZpbmVkKF9fQU5EUk9JRF9fKQorCisvKgorICogVGhlIExpbnV4IGFuZCBPcGVuQlNEIHNpZ2NvbnRleHQgc3RydWN0dXJlcyBhcmUgc2xpZ2h0bHkgZGlmZmVyZW50CisgKiBUaGlzIGlzIHRoZSBMaW51eCBPMzIgQUJJIGNvbXBhdGlibGUgc2lnY29udGV4dAorICovCisKK3N0cnVjdCBzaWdjb250ZXh0IHsKKwl1bnNpZ25lZCBpbnQgc2NfcmVnbWFzazsKKwl1bnNpZ25lZCBpbnQgc2Nfc3RhdHVzOworCXVuc2lnbmVkIGxvbmcgbG9uZyBzY19wYzsKKwl1bnNpZ25lZCBsb25nIGxvbmcgc2NfcmVnc1szMl07CisJdW5zaWduZWQgbG9uZyBsb25nIHNjX2ZwcmVnc1szMl07CisJdW5zaWduZWQgaW50IHNjX2FjeDsKKwl1bnNpZ25lZCBpbnQgc2NfZnBjX2NzcjsKKwl1bnNpZ25lZCBpbnQgc2NfZnBjX2VpcjsKKwl1bnNpZ25lZCBpbnQgc2NfdXNlZF9tYXRoOworCXVuc2lnbmVkIGludCBzY19kc3A7CisJdW5zaWduZWQgbG9uZyBsb25nIHNjX21kaGk7CisJdW5zaWduZWQgbG9uZyBsb25nIHNjX21kbG87CisJdW5zaWduZWQgbG9uZyBzY19oaTE7CisJdW5zaWduZWQgbG9uZyBzY19sbzE7CisJdW5zaWduZWQgbG9uZyBzY19oaTI7CisJdW5zaWduZWQgbG9uZyBzY19sbzI7CisJdW5zaWduZWQgbG9uZyBzY19oaTM7CisJdW5zaWduZWQgbG9uZyBzY19sbzM7Cit9OworCisjZWxzZQorCitzdHJ1Y3QJc2lnY29udGV4dCB7CisJbG9uZwlzY19vbnN0YWNrOwkvKiBzaWdzdGFjayBzdGF0ZSB0byByZXN0b3JlICovCisJbG9uZwkgc2NfbWFzazsJLyogc2lnbmFsIG1hc2sgdG8gcmVzdG9yZSAqLworCV9fcmVnaXN0ZXJfdCBzY19wYzsJLyogcGMgYXQgdGltZSBvZiBzaWduYWwgKi8KKwlfX3JlZ2lzdGVyX3Qgc2NfcmVnc1szMl07IC8qIHByb2Nlc3NvciByZWdzIDAgdG8gMzEgKi8KKwlfX3JlZ2lzdGVyX3QgbXVsbG87CS8qIG11bGxvIGFuZCBtdWxoaSByZWdpc3RlcnMuLi4gKi8KKwlfX3JlZ2lzdGVyX3QgbXVsaGk7CS8qIG11bGxvIGFuZCBtdWxoaSByZWdpc3RlcnMuLi4gKi8KKwlmX3JlZ2lzdGVyX3Qgc2NfZnByZWdzWzMzXTsgLyogZnAgcmVncyAwIHRvIDMxIGFuZCBjc3IgKi8KKwlsb25nCXNjX2ZwdXNlZDsJLyogZnAgaGFzIGJlZW4gdXNlZCAqLworCWxvbmcJc2NfZnBjX2VpcjsJLyogZmxvYXRpbmcgcG9pbnQgZXhjZXB0aW9uIGluc3RydWN0aW9uIHJlZyAqLworCWxvbmcJeHh4WzhdOwkJLyogWFhYIHJlc2VydmVkICovCit9OworI2VuZGlmCisjZW5kaWYgLyogX19CU0RfVklTSUJMRSB8fCBfX1hQR19WSVNJQkxFID49IDQyMCAqLworCisjZWxzZSAvKiBfX0xBTkdVQUdFX0FTU0VNQkxZICovCisKKyNpZmRlZiBfX0FORFJPSURfXworCisjZGVmaW5lCVNDX1JFR01BU0sJKDAqUkVHU1opCisjZGVmaW5lCVNDX1NUQVRVUwkoMSpSRUdTWikKKyNkZWZpbmUJU0NfUEMJCSgyKlJFR1NaKQorI2RlZmluZQlTQ19SRUdTCQkoU0NfUEMrOCkKKyNkZWZpbmUJU0NfRlBSRUdTCShTQ19SRUdTKzMyKjgpCisjZGVmaW5lCVNDX0FDWAkJKFNDX0ZQUkVHUyszMipSRUdTWl9GUCkKKyNkZWZpbmUJU0NfRlBDX0NTUgkoU0NfQUNYKzEqUkVHU1opCisjZGVmaW5lCVNDX0ZQQ19FSVIJKFNDX0FDWCsyKlJFR1NaKQorI2RlZmluZQlTQ19VU0VEX01BVEgJKFNDX0FDWCszKlJFR1NaKQorI2RlZmluZQlTQ19EU1AJCShTQ19BQ1grNCpSRUdTWikKKyNkZWZpbmUJU0NfTURISQkJKFNDX0FDWCs1KlJFR1NaKQorI2RlZmluZQlTQ19NRExPCQkoU0NfTURISSs4KQorI2RlZmluZQlTQ19ISTEJCShTQ19NRExPKzgpCisjZGVmaW5lCVNDX0xPMQkJKFNDX0hJMSsxKlJFR1NaKQorI2RlZmluZQlTQ19ISTIJCShTQ19ISTErMipSRUdTWikKKyNkZWZpbmUJU0NfTE8yCQkoU0NfSEkxKzMqUkVHU1opCisjZGVmaW5lCVNDX0hJMwkJKFNDX0hJMSs0KlJFR1NaKQorI2RlZmluZQlTQ19MTzMJCShTQ19ISTErNSpSRUdTWikKKy8qIE9wZW5CU0QgY29tcGF0aWJpbGl0eSAqLworI2RlZmluZQlTQ19NQVNLCQlTQ19SRUdNQVNLCisjZGVmaW5lCVNDX0ZQVVNFRAlTQ19VU0VEX01BVEgKKworI2Vsc2UKKworI2RlZmluZSBTQ19PTlNUQUNLCSgwICogUkVHU1opCisjZGVmaW5lCVNDX01BU0sJCSgxICogUkVHU1opCisjZGVmaW5lCVNDX1BDCQkoMiAqIFJFR1NaKQorI2RlZmluZQlTQ19SRUdTCQkoMyAqIFJFR1NaKQorI2RlZmluZQlTQ19NVUxMTwkoMzUgKiBSRUdTWikKKyNkZWZpbmUJU0NfTVVMSEkJKDM2ICogUkVHU1opCisjZGVmaW5lCVNDX0ZQUkVHUwkoMzcgKiBSRUdTWikKKyNkZWZpbmUJU0NfRlBVU0VECSg3MCAqIFJFR1NaKQorI2RlZmluZQlTQ19GUENfRUlSCSg3MSAqIFJFR1NaKQorCisjZW5kaWYgLyogX19BTkRST0lEX18gKi8KKworI2VuZGlmIC8qIF9fTEFOR1VBR0VfQVNTRU1CTFkgKi8KKworI2VuZGlmCS8qICFfTUlQU19TSUdOQUxfSF8gKi8KZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL21pcHMubWsgYi9saWJjL2FyY2gtbWlwcy9taXBzLm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlNTdlZTcKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtbWlwcy9taXBzLm1rCkBAIC0wLDAgKzEsMjUgQEAKK19MSUJDX0FSQ0hfQ09NTU9OX1NSQ19GSUxFUyA6PSBcCisgICAgYXJjaC1taXBzL2Jpb25pYy9fX2dldF9zcC5TIFwKKyAgICBhcmNoLW1pcHMvYmlvbmljL19fZ2V0X3Rscy5jIFwKKyAgICBhcmNoLW1pcHMvYmlvbmljL19fc2V0X3Rscy5jIFwKKyAgICBhcmNoLW1pcHMvYmlvbmljL19leGl0X3dpdGhfc3RhY2tfdGVhcmRvd24uUyBcCisgICAgYXJjaC1taXBzL2Jpb25pYy9fc2V0am1wLlMgXAorICAgIGFyY2gtbWlwcy9iaW9uaWMvZnV0ZXhfbWlwcy5TIFwKKyAgICBhcmNoLW1pcHMvYmlvbmljL2J6ZXJvLlMgXAorICAgIGFyY2gtbWlwcy9iaW9uaWMvY2FjaGVmbHVzaC5jIFwKKyAgICBhcmNoLW1pcHMvYmlvbmljL2Nsb25lLlMgXAorICAgIGFyY2gtbWlwcy9iaW9uaWMvZmZzLlMgXAorICAgIGFyY2gtbWlwcy9iaW9uaWMvbWVtY21wMTYuUyBcCisgICAgYXJjaC1taXBzL2Jpb25pYy9tZW1tb3ZlLmMgXAorICAgIGFyY2gtbWlwcy9iaW9uaWMvcGlwZS5TIFwKKyAgICBhcmNoLW1pcHMvYmlvbmljL3NldGptcC5TIFwKKyAgICBhcmNoLW1pcHMvYmlvbmljL3NpZ3NldGptcC5TIFwKKyAgICBhcmNoLW1pcHMvYmlvbmljL3Zmb3JrLlMgXAorICAgIGFyY2gtbWlwcy9zdHJpbmcvbWVtc2V0LlMgXAorICAgIGFyY2gtbWlwcy9zdHJpbmcvbWVtY3B5LlMgXAorICAgIGFyY2gtbWlwcy9zdHJpbmcvbWlwc19zdHJsZW4uYyBcCisKK19MSUJDX0FSQ0hfU1RBVElDX1NSQ19GSUxFUyA6PSBcCisgICAgYmlvbmljL2RsX2l0ZXJhdGVfcGhkcl9zdGF0aWMuYyBcCisKK19MSUJDX0FSQ0hfRFlOQU1JQ19TUkNfRklMRVMgOj0KZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N0cmluZy9tZW1jcHkuUyBiL2xpYmMvYXJjaC1taXBzL3N0cmluZy9tZW1jcHkuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYWJkZmNmCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHMvc3RyaW5nL21lbWNweS5TCkBAIC0wLDAgKzEsNDIzIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA5CisgKiAgICAgIE1JUFMgVGVjaG5vbG9naWVzLCBJbmMuLCBDYWxpZm9ybmlhLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgTUlQUyBUZWNobm9sb2dpZXMsIEluYy4sIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogICAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBNSVBTIFRFQ0hOT0xPR0lFUywgSU5DLiBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBNSVBTIFRFQ0hOT0xPR0lFUywgSU5DLiBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqICBtZW1jcHkuUworICogIFZlcnNpb246ICIwNDMwMDkiCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgSW5jbHVkZSBmaWxlcworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgIm1hY2hpbmUvYXNtLmgiCisKKworLyogCisgKiBUaGlzIHJvdXRpbmUgY291bGQgYmUgb3B0aW1pemVkIGZvciBNSVBTNjQuIFRoZSBjdXJyZW50IGNvZGUgb25seQorICogdXNlcyBNSVBTMzIgaW5zdHJ1Y3Rpb25zLgorICovCQorI2lmIGRlZmluZWQoX19NSVBTRUJfXykKKyMgIGRlZmluZSBMV0hJCWx3bAkJLyogaGlnaCBwYXJ0IGlzIGxlZnQgaW4gYmlnLWVuZGlhbgkqLworIyAgZGVmaW5lIFNXSEkJc3dsCQkvKiBoaWdoIHBhcnQgaXMgbGVmdCBpbiBiaWctZW5kaWFuCSovCisjICBkZWZpbmUgTFdMTwlsd3IJCS8qIGxvdyBwYXJ0IGlzIHJpZ2h0IGluIGJpZy1lbmRpYW4JKi8KKyMgIGRlZmluZSBTV0xPCXN3cgkJLyogbG93IHBhcnQgaXMgcmlnaHQgaW4gYmlnLWVuZGlhbgkqLworI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9fTUlQU0VMX18pCisjICBkZWZpbmUgTFdISQlsd3IJCS8qIGhpZ2ggcGFydCBpcyByaWdodCBpbiBsaXR0bGUtZW5kaWFuCSovCisjICBkZWZpbmUgU1dISQlzd3IJCS8qIGhpZ2ggcGFydCBpcyByaWdodCBpbiBsaXR0bGUtZW5kaWFuCSovCisjICBkZWZpbmUgTFdMTwlsd2wJCS8qIGxvdyBwYXJ0IGlzIGxlZnQgaW4gYmlnLWVuZGlhbgkqLworIyAgZGVmaW5lIFNXTE8Jc3dsCQkvKiBsb3cgcGFydCBpcyBsZWZ0IGluIGJpZy1lbmRpYW4JKi8KKyNlbmRpZgorCitMRUFGKG1lbWNweSwwKQorCisJLnNldAlub3Jlb3JkZXIKKwkuc2V0CW5vYXQKKy8qCisgKiBCZWxvdyB3ZSBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUgbWVtY3B5IGlzIGNhbGxlZCB3aXRoIG92ZXJsYXBwaW5nIHNyYyBhbmQgZHN0LgorICogQWx0aG91Z2ggbWVtY3B5IGlzIG5vdCByZXF1aXJlZCB0byBoYW5kbGUgdGhpcyBjYXNlLCBzb21lIHBhcnRzIG9mIEFuZHJvaWQgbGlrZSBTa2lhCisgKiByZWx5IG9uIHN1Y2ggdXNhZ2UuIFdlIGNhbGwgbWVtbW92ZSB0byBoYW5kbGUgc3VjaCBjYXNlcy4KKyAqLworCXN1YnUJdDAsYTAsYTEKKwlzcmEJQVQsdDAsMzEKKwl4b3IJdDEsdDAsQVQKKwlzdWJ1CXQwLHQxLEFUCisJc2x0dQlBVCx0MCxhMgorCWJlcQlBVCx6ZXJvLC5MbWVtY3B5CisJIGxhCXQ5LG1lbW1vdmUKKwlqcgl0OQorCSBub3AKKy5MbWVtY3B5OgorCXNsdGkJQVQsYTIsOAorCWJuZQlBVCx6ZXJvLC5MbGFzdDgKKwkgbW92ZQl2MCxhMAkjIG1lbWNweSByZXR1cm5zIHRoZSBkc3QgcG9pbnRlcgorCisjIFRlc3QgaWYgdGhlIHNyYyBhbmQgZHN0IGFyZSB3b3JkLWFsaWduZWQsIG9yIGNhbiBiZSBtYWRlIHdvcmQtYWxpZ25lZAorCXhvcgl0OCxhMSxhMAorCWFuZGkJdDgsdDgsMHgzCQkjIHQ4IGlzIGEwL2ExIHdvcmQtZGlzcGxhY2VtZW50CisKKwlibmUJdDgsemVybywuTHVuYWxpZ25lZAorCSBuZWd1CWEzLGEwCisKKwlhbmRpCWEzLGEzLDB4MwkjIHdlIG5lZWQgdG8gY29weSBhMyBieXRlcyB0byBtYWtlIGEwL2ExIGFsaWduZWQKKwliZXEJYTMsemVybywuTGNoazE2dyAjIHdoZW4gYTM9MCB0aGVuIHRoZSBkc3QgKGEwKSBpcyB3b3JkLWFsaWduZWQKKwkgc3VidQlhMixhMixhMwkjIG5vdyBhMiBpcyB0aGUgcmVtaW5pbmcgYnl0ZXMgY291bnQKKworCUxXSEkJdDgsMChhMSkKKwlhZGR1CWExLGExLGEzCisJU1dISQl0OCwwKGEwKQorCWFkZHUJYTAsYTAsYTMKKworIyBOb3cgdGhlIGRzdC9zcmMgYXJlIG11dHVhbGx5IHdvcmQtYWxpZ25lZCB3aXRoIHdvcmQtYWxpZ25lZCBhZGRyZXNzZXMKKy5MY2hrMTZ3OgorCWFuZGkJdDgsYTIsMHgzZgkjIGFueSB3aG9sZSA2NC1ieXRlIGNodW5rcz8KKwkJCQkjIHQ4IGlzIHRoZSBieXRlIGNvdW50IGFmdGVyIDY0LWJ5dGUgY2h1bmtzCisKKwliZXEJYTIsdDgsLkxjaGs4dwkjIGlmIGEyPT10OCwgbm8gNjQtYnl0ZSBjaHVua3MKKwkJCQkjIFRoZXJlIHdpbGwgYmUgYXQgbW9zdCAxIDMyLWJ5dGUgY2h1bmsgYWZ0ZXIgaXQKKwkgc3VidQlhMyxhMix0OAkjIHN1YnRyYWN0IGZyb20gYTIgdGhlIHJlbWluZGVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgSGVyZSBhMyBjb3VudHMgYnl0ZXMgaW4gMTZ3IGNodW5rcworCWFkZHUJYTMsYTAsYTMJIyBOb3cgYTMgaXMgdGhlIGZpbmFsIGRzdCBhZnRlciA2NC1ieXRlIGNodW5rcworCisJYWRkdQl0MCxhMCxhMgkjIHQwIGlzIHRoZSAicGFzdCB0aGUgZW5kIiBhZGRyZXNzCisKKyMgV2hlbiBpbiB0aGUgbG9vcCB3ZSBleGVyY2lzZSAicHJlZiAzMCx4KGEwKSIsIHRoZSBhMCt4IHNob3VsZCBub3QgYmUgcGFzdAorIyB0aGUgInQwLTMyIiBhZGRyZXNzCisjIFRoaXMgbWVhbnM6IGZvciB4PTEyOCB0aGUgbGFzdCAic2FmZSIgYTAgYWRkcmVzcyBpcyAidDAtMTYwIgorIyBBbHRlcm5hdGl2ZWx5LCBmb3IgeD02NCB0aGUgbGFzdCAic2FmZSIgYTAgYWRkcmVzcyBpcyAidDAtOTYiCisjIEluIHRoZSBjdXJyZW50IHZlcnNpb24gd2Ugd2lsbCB1c2UgInByZWYgMzAsMTI4KGEwKSIsIHNvICJ0MC0xNjAiIGlzIHRoZSBsaW1pdAorCXN1YnUJdDksdDAsMTYwCSMgdDkgaXMgdGhlICJsYXN0IHNhZmUgcHJlZiAzMCwxMjgoYTApIiBhZGRyZXNzCisKKwlwcmVmICAgIDAsMChhMSkJCSMgYnJpbmcgdGhlIGZpcnN0IGxpbmUgb2Ygc3JjLCBhZGRyIDAKKwlwcmVmICAgIDAsMzIoYTEpCSMgYnJpbmcgdGhlIHNlY29uZCBsaW5lIG9mIHNyYywgYWRkciAzMgorCXByZWYgICAgMCw2NChhMSkJIyBicmluZyB0aGUgdGhpcmQgbGluZSBvZiBzcmMsIGFkZHIgNjQKKwlwcmVmCTMwLDMyKGEwKQkjIHNhZmUsIGFzIHdlIGhhdmUgYXQgbGVhc3QgNjQgYnl0ZXMgYWhlYWQKKyMgSW4gY2FzZSB0aGUgYTAgPiB0OSBkb24ndCB1c2UgInByZWYgMzAiIGF0IGFsbAorCXNndHUJdjEsYTAsdDkKKwliZ3R6CXYxLC5MbG9vcDE2dwkjIHNraXAgInByZWYgMzAsNjQoYTApIiBmb3IgdG9vIHNob3J0IGFycmF5cworCSBub3AKKyMgb3RoZXJ3aXNlLCBzdGFydCB3aXRoIHVzaW5nIHByZWYzMAorCXByZWYJMzAsNjQoYTApCisuTGxvb3AxNnc6CisJcHJlZgkwLDk2KGExKQorCWx3CXQwLDAoYTEpCisJYmd0egl2MSwuTHNraXBfcHJlZjMwXzk2CSMgc2tpcCAicHJlZiAzMCw5NihhMCkiCisJIGx3CXQxLDQoYTEpCisJcHJlZiAgICAzMCw5NihhMCkgICAjIGNvbnRpbnVlIHNldHRpbmcgdXAgdGhlIGRlc3QsIGFkZHIgOTYKKy5Mc2tpcF9wcmVmMzBfOTY6CisJbHcJdDIsOChhMSkKKwlsdwl0MywxMihhMSkKKwlsdwl0NCwxNihhMSkKKwlsdwl0NSwyMChhMSkKKwlsdwl0NiwyNChhMSkKKwlsdwl0NywyOChhMSkKKyAgICAgICAgcHJlZiAgICAwLDEyOChhMSkgICAgIyBicmluZyB0aGUgbmV4dCBsaW5lcyBvZiBzcmMsIGFkZHIgMTI4CisKKwlzdwl0MCwwKGEwKQorCXN3CXQxLDQoYTApCisJc3cJdDIsOChhMCkKKwlzdwl0MywxMihhMCkKKwlzdwl0NCwxNihhMCkKKwlzdwl0NSwyMChhMCkKKwlzdwl0NiwyNChhMCkKKwlzdwl0NywyOChhMCkKKworCWx3CXQwLDMyKGExKQorCWJndHoJdjEsLkxza2lwX3ByZWYzMF8xMjgJIyBza2lwICJwcmVmIDMwLDEyOChhMCkiCisJIGx3CXQxLDM2KGExKQorCXByZWYgICAgMzAsMTI4KGEwKSAgICMgY29udGludWUgc2V0dGluZyB1cCB0aGUgZGVzdCwgYWRkciAxMjgKKy5Mc2tpcF9wcmVmMzBfMTI4OgorCWx3CXQyLDQwKGExKQorCWx3CXQzLDQ0KGExKQorCWx3CXQ0LDQ4KGExKQorCWx3CXQ1LDUyKGExKQorCWx3CXQ2LDU2KGExKQorCWx3CXQ3LDYwKGExKQorICAgICAgICBwcmVmICAgIDAsIDE2MChhMSkgICAgIyBicmluZyB0aGUgbmV4dCBsaW5lcyBvZiBzcmMsIGFkZHIgMTYwCisKKwlzdwl0MCwzMihhMCkKKwlzdwl0MSwzNihhMCkKKwlzdwl0Miw0MChhMCkKKwlzdwl0Myw0NChhMCkKKwlzdwl0NCw0OChhMCkKKwlzdwl0NSw1MihhMCkKKwlzdwl0Niw1NihhMCkKKwlzdwl0Nyw2MChhMCkKKworCWFkZGl1CWEwLGEwLDY0CSMgYWRkaW5nIDY0IHRvIGRlc3QKKwlzZ3R1CXYxLGEwLHQ5CisJYm5lCWEwLGEzLC5MbG9vcDE2dworCSBhZGRpdQlhMSxhMSw2NAkjIGFkZGluZyA2NCB0byBzcmMKKwltb3ZlCWEyLHQ4CisKKyMgSGVyZSB3ZSBoYXZlIHNyYyBhbmQgZGVzdCB3b3JkLWFsaWduZWQgYnV0IGxlc3MgdGhhbiA2NC1ieXRlcyB0byBnbworCisuTGNoazh3OgorCXByZWYgMCwgMHgwKGExKQorCWFuZGkJdDgsYTIsMHgxZgkjIGlzIHRoZXJlIGEgMzItYnl0ZSBjaHVuaz8KKwkJCQkjIHRoZSB0OCBpcyB0aGUgcmVtaW5kZXIgY291bnQgcGFzdCAzMi1ieXRlcworCWJlcQlhMix0OCwuTGNoazF3CSMgd2hlbiBhMj10OCwgbm8gMzItYnl0ZSBjaHVuaworCSBub3AKKworCWx3CXQwLDAoYTEpCisJbHcJdDEsNChhMSkKKwlsdwl0Miw4KGExKQorCWx3CXQzLDEyKGExKQorCWx3CXQ0LDE2KGExKQorCWx3CXQ1LDIwKGExKQorCWx3CXQ2LDI0KGExKQorCWx3CXQ3LDI4KGExKQorCWFkZGl1CWExLGExLDMyCisKKwlzdwl0MCwwKGEwKQorCXN3CXQxLDQoYTApCisJc3cJdDIsOChhMCkKKwlzdwl0MywxMihhMCkKKwlzdwl0NCwxNihhMCkKKwlzdwl0NSwyMChhMCkKKwlzdwl0NiwyNChhMCkKKwlzdwl0NywyOChhMCkKKwlhZGRpdQlhMCxhMCwzMgorCisuTGNoazF3OgorCWFuZGkJYTIsdDgsMHgzCSMgbm93IGEyIGlzIHRoZSByZW1pbmRlciBwYXN0IDF3IGNodW5rcworCWJlcQlhMix0OCwuTGxhc3Q4CisJIHN1YnUJYTMsdDgsYTIJIyBhMyBpcyBjb3VudCBvZiBieXRlcyBpbiAxdyBjaHVua3MKKwlhZGR1CWEzLGEwLGEzCSMgbm93IGEzIGlzIHRoZSBkc3QgYWRkcmVzcyBwYXN0IHRoZSAxdyBjaHVua3MKKworIyBjb3B5aW5nIGluIHdvcmRzICg0LWJ5dGUgY2h1bmtzKQorLkx3b3JkQ29weV9sb29wOgorCWx3CXQzLDAoYTEpCSMgdGhlIGZpcnN0IHQzIG1heSBiZSBlcXVhbCB0MCAuLi4gb3B0aW1pemU/CisJYWRkaXUJYTEsYTEsNAorCWFkZGl1CWEwLGEwLDQKKwlibmUJYTAsYTMsLkx3b3JkQ29weV9sb29wCisJIHN3CXQzLC00KGEwKQorCisjIEZvciB0aGUgbGFzdCAoPDgpIGJ5dGVzCisuTGxhc3Q4OgorCWJsZXoJYTIsLkxsZWF2ZQorCSBhZGR1CWEzLGEwLGEyCSMgYTMgaXMgdGhlIGxhc3QgZHN0IGFkZHJlc3MKKy5MbGFzdDhsb29wOgorCWxiCXYxLDAoYTEpCisJYWRkaXUJYTEsYTEsMQorCWFkZGl1CWEwLGEwLDEKKwlibmUJYTAsYTMsLkxsYXN0OGxvb3AKKwkgc2IJdjEsLTEoYTApCisKKy5MbGVhdmU6CisJaglyYQorCSBub3AKKworIworIyBVTkFMSUdORUQgY2FzZQorIworCisuTHVuYWxpZ25lZDoKKwkjIGdvdCBoZXJlIHdpdGggYTM9Im5lZ3UgYTAiCisJYW5kaQlhMyxhMywweDMJIyB0ZXN0IGlmIHRoZSBhMCBpcyB3b3JkIGFsaWduZWQKKwliZXF6CWEzLC5MdWFfY2hrMTZ3CisJIHN1YnUJYTIsYTIsYTMJIyBieXRlcyBsZWZ0IGFmdGVyIGluaXRpYWwgYTMgYnl0ZXMKKworCUxXSEkJdjEsMChhMSkKKwlMV0xPCXYxLDMoYTEpCisJYWRkdQlhMSxhMSxhMwkjIGEzIG1heSBiZSBoZXJlIDEsIDIgb3IgMworCVNXSEkJdjEsMChhMCkKKwlhZGR1CWEwLGEwLGEzCSMgYmVsb3cgdGhlIGRzdCB3aWxsIGJlIHdvcmQgYWxpZ25lZCAoTk9URTEpCisKKy5MdWFfY2hrMTZ3OgorCWFuZGkJdDgsYTIsMHgzZgkjIGFueSB3aG9sZSA2NC1ieXRlIGNodW5rcz8KKwkJCQkjIHQ4IGlzIHRoZSBieXRlIGNvdW50IGFmdGVyIDY0LWJ5dGUgY2h1bmtzCisJYmVxCWEyLHQ4LC5MdWFfY2hrOHcgIyBpZiBhMj09dDgsIG5vIDY0LWJ5dGUgY2h1bmtzCisJCQkJIyBUaGVyZSB3aWxsIGJlIGF0IG1vc3QgMSAzMi1ieXRlIGNodW5rIGFmdGVyIGl0CisJIHN1YnUJYTMsYTIsdDgJIyBzdWJ0cmFjdCBmcm9tIGEyIHRoZSByZW1pbmRlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEhlcmUgYTMgY291bnRzIGJ5dGVzIGluIDE2dyBjaHVua3MKKwlhZGR1CWEzLGEwLGEzCSMgTm93IGEzIGlzIHRoZSBmaW5hbCBkc3QgYWZ0ZXIgNjQtYnl0ZSBjaHVua3MKKworCWFkZHUJdDAsYTAsYTIJIyB0MCBpcyB0aGUgInBhc3QgdGhlIGVuZCIgYWRkcmVzcworCisJc3VidQl0OSx0MCwxNjAJIyB0OSBpcyB0aGUgImxhc3Qgc2FmZSBwcmVmIDMwLDEyOChhMCkiIGFkZHJlc3MKKworCXByZWYgICAgMCwwKGExKQkJIyBicmluZyB0aGUgZmlyc3QgbGluZSBvZiBzcmMsIGFkZHIgMAorCXByZWYgICAgMCwzMihhMSkJIyBicmluZyB0aGUgc2Vjb25kIGxpbmUgb2Ygc3JjLCBhZGRyIDMyCisJcHJlZiAgICAwLDY0KGExKQkjIGJyaW5nIHRoZSB0aGlyZCBsaW5lIG9mIHNyYywgYWRkciA2NAorCXByZWYJMzAsMzIoYTApCSMgc2FmZSwgYXMgd2UgaGF2ZSBhdCBsZWFzdCA2NCBieXRlcyBhaGVhZAorIyBJbiBjYXNlIHRoZSBhMCA+IHQ5IGRvbid0IHVzZSAicHJlZiAzMCIgYXQgYWxsCisJc2d0dQl2MSxhMCx0OQorCWJndHoJdjEsLkx1YV9sb29wMTZ3CSMgc2tpcCAicHJlZiAzMCw2NChhMCkiIGZvciB0b28gc2hvcnQgYXJyYXlzCisJIG5vcAorIyBvdGhlcndpc2UsIHN0YXJ0IHdpdGggdXNpbmcgcHJlZjMwCisJcHJlZgkzMCw2NChhMCkKKy5MdWFfbG9vcDE2dzoKKwlwcmVmCTAsOTYoYTEpCisJTFdISQl0MCwwKGExKQorCUxXTE8JdDAsMyhhMSkKKwlMV0hJCXQxLDQoYTEpCisJYmd0egl2MSwuTHVhX3NraXBfcHJlZjMwXzk2CisJIExXTE8JdDEsNyhhMSkKKwlwcmVmICAgIDMwLDk2KGEwKSAgICMgY29udGludWUgc2V0dGluZyB1cCB0aGUgZGVzdCwgYWRkciA5NgorLkx1YV9za2lwX3ByZWYzMF85NjoKKwlMV0hJCXQyLDgoYTEpCisJTFdMTwl0MiwxMShhMSkKKwlMV0hJCXQzLDEyKGExKQorCUxXTE8JdDMsMTUoYTEpCisJTFdISQl0NCwxNihhMSkKKwlMV0xPCXQ0LDE5KGExKQorCUxXSEkJdDUsMjAoYTEpCisJTFdMTwl0NSwyMyhhMSkKKwlMV0hJCXQ2LDI0KGExKQorCUxXTE8JdDYsMjcoYTEpCisJTFdISQl0NywyOChhMSkKKwlMV0xPCXQ3LDMxKGExKQorICAgICAgICBwcmVmICAgIDAsMTI4KGExKSAgICAjIGJyaW5nIHRoZSBuZXh0IGxpbmVzIG9mIHNyYywgYWRkciAxMjgKKworCXN3CXQwLDAoYTApCisJc3cJdDEsNChhMCkKKwlzdwl0Miw4KGEwKQorCXN3CXQzLDEyKGEwKQorCXN3CXQ0LDE2KGEwKQorCXN3CXQ1LDIwKGEwKQorCXN3CXQ2LDI0KGEwKQorCXN3CXQ3LDI4KGEwKQorCisJTFdISQl0MCwzMihhMSkKKwlMV0xPCXQwLDM1KGExKQorCUxXSEkJdDEsMzYoYTEpCisJYmd0egl2MSwuTHVhX3NraXBfcHJlZjMwXzEyOAorCUxXTE8JdDEsMzkoYTEpCisJcHJlZiAgICAzMCwxMjgoYTApICAgIyBjb250aW51ZSBzZXR0aW5nIHVwIHRoZSBkZXN0LCBhZGRyIDEyOAorLkx1YV9za2lwX3ByZWYzMF8xMjg6CisJTFdISQl0Miw0MChhMSkKKwlMV0xPCXQyLDQzKGExKQorCUxXSEkJdDMsNDQoYTEpCisJTFdMTwl0Myw0NyhhMSkKKwlMV0hJCXQ0LDQ4KGExKQorCUxXTE8JdDQsNTEoYTEpCisJTFdISQl0NSw1MihhMSkKKwlMV0xPCXQ1LDU1KGExKQorCUxXSEkJdDYsNTYoYTEpCisJTFdMTwl0Niw1OShhMSkKKwlMV0hJCXQ3LDYwKGExKQorCUxXTE8JdDcsNjMoYTEpCisgICAgICAgIHByZWYgICAgMCwgMTYwKGExKSAgICAjIGJyaW5nIHRoZSBuZXh0IGxpbmVzIG9mIHNyYywgYWRkciAxNjAKKworCXN3CXQwLDMyKGEwKQorCXN3CXQxLDM2KGEwKQorCXN3CXQyLDQwKGEwKQorCXN3CXQzLDQ0KGEwKQorCXN3CXQ0LDQ4KGEwKQorCXN3CXQ1LDUyKGEwKQorCXN3CXQ2LDU2KGEwKQorCXN3CXQ3LDYwKGEwKQorCisJYWRkaXUJYTAsYTAsNjQJIyBhZGRpbmcgNjQgdG8gZGVzdAorCXNndHUJdjEsYTAsdDkKKwlibmUJYTAsYTMsLkx1YV9sb29wMTZ3CisJIGFkZGl1CWExLGExLDY0CSMgYWRkaW5nIDY0IHRvIHNyYworCW1vdmUJYTIsdDgKKworIyBIZXJlIHdlIGhhdmUgc3JjIGFuZCBkZXN0IHdvcmQtYWxpZ25lZCBidXQgbGVzcyB0aGFuIDY0LWJ5dGVzIHRvIGdvCisKKy5MdWFfY2hrOHc6CisJcHJlZiAwLCAweDAoYTEpCisJYW5kaQl0OCxhMiwweDFmCSMgaXMgdGhlcmUgYSAzMi1ieXRlIGNodW5rPworCQkJCSMgdGhlIHQ4IGlzIHRoZSByZW1pbmRlciBjb3VudAorCWJlcQlhMix0OCwuTHVhX2NoazF3ICMgd2hlbiBhMj10OCwgbm8gMzItYnl0ZSBjaHVuaworCSBub3AKKworCUxXSEkJdDAsMChhMSkKKwlMV0xPCXQwLDMoYTEpCisJTFdISQl0MSw0KGExKQorCUxXTE8JdDEsNyhhMSkKKwlMV0hJCXQyLDgoYTEpCisJTFdMTwl0MiwxMShhMSkKKwlMV0hJCXQzLDEyKGExKQorCUxXTE8JdDMsMTUoYTEpCisJTFdISQl0NCwxNihhMSkKKwlMV0xPCXQ0LDE5KGExKQorCUxXSEkJdDUsMjAoYTEpCisJTFdMTwl0NSwyMyhhMSkKKwlMV0hJCXQ2LDI0KGExKQorCUxXTE8JdDYsMjcoYTEpCisJTFdISQl0NywyOChhMSkKKwlMV0xPCXQ3LDMxKGExKQorCWFkZGl1CWExLGExLDMyCisKKwlzdwl0MCwwKGEwKQorCXN3CXQxLDQoYTApCisJc3cJdDIsOChhMCkKKwlzdwl0MywxMihhMCkKKwlzdwl0NCwxNihhMCkKKwlzdwl0NSwyMChhMCkKKwlzdwl0NiwyNChhMCkKKwlzdwl0NywyOChhMCkKKwlhZGRpdQlhMCxhMCwzMgorCisuTHVhX2NoazF3OgorCWFuZGkJYTIsdDgsMHgzCSMgbm93IGEyIGlzIHRoZSByZW1pbmRlciBwYXN0IDF3IGNodW5rcworCWJlcQlhMix0OCwuTHVhX3NtYWxsQ29weQorCSBzdWJ1CWEzLHQ4LGEyCSMgYTMgaXMgY291bnQgb2YgYnl0ZXMgaW4gMXcgY2h1bmtzCisJYWRkdQlhMyxhMCxhMwkjIG5vdyBhMyBpcyB0aGUgZHN0IGFkZHJlc3MgcGFzdCB0aGUgMXcgY2h1bmtzCisKKyMgY29weWluZyBpbiB3b3JkcyAoNC1ieXRlIGNodW5rcykKKy5MdWFfd29yZENvcHlfbG9vcDoKKwlMV0hJCXYxLDAoYTEpCisJTFdMTwl2MSwzKGExKQorCWFkZGl1CWExLGExLDQKKwlhZGRpdQlhMCxhMCw0CQkjIG5vdGU6IGRzdD1hMCBpcyB3b3JkIGFsaWduZWQgaGVyZSwgc2VlIE5PVEUxCisJYm5lCWEwLGEzLC5MdWFfd29yZENvcHlfbG9vcAorCSBzdwl2MSwtNChhMCkKKworIyBOb3cgbGVzcyB0aGFuIDQgYnl0ZXMgKHZhbHVlIGluIGEyKSBsZWZ0IHRvIGNvcHkKKy5MdWFfc21hbGxDb3B5OgorCWJlcXoJYTIsLkxsZWF2ZQorCWFkZHUJYTMsYTAsYTIJIyBhMyBpcyB0aGUgbGFzdCBkc3QgYWRkcmVzcworLkx1YV9zbWFsbENvcHlfbG9vcDoKKwlsYgl2MSwwKGExKQorCWFkZGl1CWExLGExLDEKKwlhZGRpdQlhMCxhMCwxCisJYm5lCWEwLGEzLC5MdWFfc21hbGxDb3B5X2xvb3AKKwkgc2IJdjEsLTEoYTApCisKKwlqCXJhCisJIG5vcAorCisJLnNldAlhdAorCS5zZXQJcmVvcmRlcgorCitFTkQobWVtY3B5KQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBJbXBsZW1lbnRhdGlvbiA6IFN0YXRpYyBmdW5jdGlvbnMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zdHJpbmcvbWVtc2V0LlMgYi9saWJjL2FyY2gtbWlwcy9zdHJpbmcvbWVtc2V0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTFjNTA1NQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzL3N0cmluZy9tZW1zZXQuUwpAQCAtMCwwICsxLDMyMyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwOQorICogICAgICBNSVBTIFRlY2hub2xvZ2llcywgSW5jLiwgQ2FsaWZvcm5pYS4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIE1JUFMgVGVjaG5vbG9naWVzLCBJbmMuLCBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqICAgIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgTUlQUyBURUNITk9MT0dJRVMsIElOQy4gYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgTUlQUyBURUNITk9MT0dJRVMsIElOQy4gQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiAgbWVtc2V0LlMsIHZlcnNpb24gIjY0aCIgd2l0aCAxIGNhY2hlIGxpbmUgaG9yaXpvbiBmb3IgInByZWYgMzAiIGFuZCAxNCBub3BzCisgKiAgVmVyc2lvbjogIjA0MzAwOSIKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBJbmNsdWRlIGZpbGVzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAibWFjaGluZS9hc20uaCIKKworLyogCisgKiBUaGlzIHJvdXRpbmUgY291bGQgYmUgb3B0aW1pemVkIGZvciBNSVBTNjQuIFRoZSBjdXJyZW50IGNvZGUgb25seQorICogdXNlcyBNSVBTMzIgaW5zdHJ1Y3Rpb25zLgorICovCQorCisjaWYgZGVmaW5lZChfX01JUFNFQl9fKQorIyAgZGVmaW5lIFNXSEkJc3dsCQkvKiBoaWdoIHBhcnQgaXMgbGVmdCBpbiBiaWctZW5kaWFuCSovCisjICBkZWZpbmUgU1dMTwlzd3IJCS8qIGxvdyBwYXJ0IGlzIHJpZ2h0IGluIGJpZy1lbmRpYW4JKi8KKyNlbmRpZgorCisjaWYgZGVmaW5lZChfX01JUFNFTF9fKQorIyAgZGVmaW5lIFNXSEkJc3dyCQkvKiBoaWdoIHBhcnQgaXMgcmlnaHQgaW4gbGl0dGxlLWVuZGlhbgkqLworIyAgZGVmaW5lIFNXTE8Jc3dsCQkvKiBsb3cgcGFydCBpcyBsZWZ0IGluIGxpdHRsZS1lbmRpYW4JKi8KKyNlbmRpZgorCisjaWYgIShkZWZpbmVkKFhHUFJPRikgfHwgZGVmaW5lZChYUFJPRikpCisjdW5kZWYgU0VUVVBfR1AKKyNkZWZpbmUgU0VUVVBfR1AKKyNlbmRpZgorCisjaWZkZWYgTkRFQlVHCisjZGVmaW5lIERCRyAjCisjZWxzZQorI2RlZmluZSBEQkcKKyNlbmRpZgorCisvKgorICogdm9pZCBfbWVtc2V0MTYodWludDE2X3QqIGRzdCwgdWludDE2X3QgdmFsdWUsIHNpemVfdCBzaXplKTsKKyAqLworCitMRUFGKF9tZW1zZXQxNiwwKQorCS5zZXQgbm9yZW9yZGVyCitEQkcJLyogQ2hlY2sgcGFyYW1ldGVycyAqLworREJHCWFuZGkJdDAsYTAsMQkJCSMgYTAgbXVzdCBiZSBoYWxmd29yZCBhbGlnbmVkCitEQkcJdG5lCXQwLHplcm8KK0RCRwlhbmRpCXQyLGEyLDEJCQkjIGEyIG11c3QgYmUgZXZlbgorREJHCXRuZQl0Mix6ZXJvCisKKyNpZmRlZiBGSVhBUkdTCisJIyBlbnN1cmUgY291bnQgaXMgZXZlbgorI2lmIChfX21pcHM9PTMyKSAmJiAoX19taXBzX2lzYV9yZXY+PTIpCisJaW5zCWEyLHplcm8sMCwxCisjZWxzZQorCW9yaQlhMiwxCisJeG9yaQlhMiwxCisjZW5kaWYKKyNlbmRpZgorCisjaWYgKF9fbWlwcz09MzIpICYmIChfX21pcHNfaXNhX3Jldj49MikKKwlpbnMJYTEsYTEsMTYsMTYKKyNlbHNlCisJYW5kaQlhMSwweGZmZmYKKwlzbGwJdDMsYTEsMTYKKwlvcglhMSx0MworI2VuZGlmCisKKwliZXF6CWEyLC5MZG9uZQorCSBhbmRpCXQxLGEwLDIKKwliZXF6CXQxLC5MYWxpZ25vaworCSBhZGR1CXQwLGEwLGEyCQkjIHQwIGlzIHRoZSAicGFzdCB0aGUgZW5kIiBhZGRyZXNzCisJc2gJYTEsMChhMCkJCSMgc3RvcmUgb25lIGhhbGZ3b3JkIHRvIGdldCBhbGlnbmVkCisJYWRkdQlhMCwyCisJc3VidQlhMiwyCisuTGFsaWdub2s6CisJc2x0aQl0MSxhMiw0CQkJIyAuTGFsaWduZWQgZm9yIDQgb3IgbW9yZSBieXRlcworCWJlcXoJdDEsLkxhbGlnbmVkCisJIHNuZQl0MSxhMiwyCQkJIyBvbmUgbW9yZSBoYWxmd29yZD8KKwlibmV6CXQxLC5MZG9uZQorCSBub3AKKwlzaAlhMSwwKGEwKQorLkxkb25lOgorCWoJcmEKKwkgbm9wCisJLnNldCByZW9yZGVyCitFTkQoX21lbXNldDE2KQorCisvKgorICogdm9pZCBfbWVtc2V0MzIodWludDMyX3QqIGRzdCwgdWludDMyX3QgdmFsdWUsIHNpemVfdCBzaXplKTsKKyAqLworCitMRUFGKF9tZW1zZXQzMiwwKQorCS5zZXQgbm9yZW9yZGVyCitEQkcJLyogQ2hlY2sgcGFyYW1ldGVycyAqLworREJHCWFuZGkJdDAsYTAsMwkJCSMgYTAgbXVzdCBiZSB3b3JkIGFsaWduZWQKK0RCRwl0bmUJdDAsemVybworREJHCWFuZGkJdDIsYTIsMwkJCSMgYTIgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDQgYnl0ZXMKK0RCRwl0bmUJdDIsemVybworCisjaWZkZWYgRklYQVJHUworCSMgZW5zdXJlIGNvdW50IGlzIGEgbXVsdGlwbGUgb2YgNAorI2lmIChfX21pcHM9PTMyKSAmJiAoX19taXBzX2lzYV9yZXY+PTIpCisJaW5zCSRhMiwkMCwwLDIKKyNlbHNlCisJb3JpCWEyLDMKKwl4b3JpCWEyLDMKKyNlbmRpZgorI2VuZGlmCisKKwlibmV6CWEyLC5MYWxpZ25lZAkJIyBhbnkgd29yayB0byBkbz8KKwkgYWRkdQl0MCxhMCxhMgkJIyB0MCBpcyB0aGUgInBhc3QgdGhlIGVuZCIgYWRkcmVzcworCisJaglyYQorCSBub3AKKwkuc2V0IHJlb3JkZXIKK0VORChfbWVtc2V0MzIpCisKK0xFQUYobWVtc2V0LDApCisKKwkuc2V0CW5vcmVvcmRlcgorCS5zZXQJbm9hdAorCisJYWRkdQl0MCxhMCxhMgkJIyB0MCBpcyB0aGUgInBhc3QgdGhlIGVuZCIgYWRkcmVzcworCXNsdGkJQVQsYTIsNAkJCSMgaXMgYTIgbGVzcyB0aGFuIDQ/CisJYm5lCUFULHplcm8sLkxsYXN0NAkJIyBpZiB5ZXMsIGdvIHRvIGxhc3Q0CisJIG1vdmUJdjAsYTAJCQkjIG1lbXNldCByZXR1cm5zIHRoZSBkc3QgcG9pbnRlcgorCisJYmVxCWExLHplcm8sLkxzZXQwCisJIHN1YnUJdjEsemVybyxhMAorCisJIyBzbWVhciBieXRlIGludG8gMzIgYml0IHdvcmQKKyNpZiAoX19taXBzPT0zMikgJiYgKF9fbWlwc19pc2FfcmV2Pj0yKQorCWlucyAgICAgYTEsIGExLCA4LCA4ICAgICAgICAjIFJlcGxpY2F0ZSBmaWxsIGJ5dGUgaW50byBoYWxmLXdvcmQuCisJaW5zICAgICBhMSwgYTEsIDE2LCAxNiAgICAgICMgUmVwbGljYXRlIGZpbGwgYnl0ZSBpbnRvIHdvcmQuCisjZWxzZQorCWFuZAlhMSwweGZmCisJc2xsCUFULGExLDgKKwlvcglhMSxBVAorCXNsbAlBVCxhMSwxNgorCW9yCWExLEFUCisjZW5kaWYKKworLkxzZXQwOgorCWFuZGkJdjEsdjEsMHgzCQkjIHdvcmQtdW5hbGlnbmVkIGFkZHJlc3M/CisJYmVxCXYxLHplcm8sLkxhbGlnbmVkCSMgdjEgaXMgdGhlIHVuYWxpZ25tZW50IGNvdW50CisJIHN1YnUJYTIsYTIsdjEKKwlTV0hJCWExLDAoYTApCisJYWRkdQlhMCxhMCx2MQorCisjIEhlcmUgd2UgaGF2ZSB0aGUgIndvcmQtYWxpZ25lZCIgYTAgKHVudGlsIHRoZSAibGFzdDQiKQorLkxhbGlnbmVkOgorCWFuZGkJdDgsYTIsMHgzZgkjIGFueSA2NC1ieXRlIGNodW5rcz8KKwkJCQkjIHQ4IGlzIHRoZSBieXRlIGNvdW50IHBhc3QgNjQtYnl0ZSBjaHVua3MKKwliZXEJYTIsdDgsLkxjaGs4dwkjIHdoZW4gYTI9PXQ4LCBubyA2NC1ieXRlIGNodW5rcworCQkJCSMgVGhlcmUgd2lsbCBiZSBhdCBtb3N0IDEgMzItYnl0ZSBjaHVuayB0aGVuCisJIHN1YnUJYTMsYTIsdDgJIyBzdWJ0cmFjdCBmcm9tIGEyIHRoZSByZW1pbmRlcgorCQkJCSMgSGVyZSBhMyBjb3VudHMgYnl0ZXMgaW4gMTZ3IGNodW5rcworCWFkZHUJYTMsYTAsYTMJIyBOb3cgYTMgaXMgdGhlIGZpbmFsIGRzdCBhZnRlciA2NC1ieXRlIGNodW5rcworCisjIEZpbmQgb3V0LCBpZiB0aGVyZSBhcmUgYW55IDY0LWJ5dGUgY2h1bmtzIGFmdGVyIHdoaWNoIHdpbGwgYmUgc3RpbGwgYXQgbGVhc3QKKyMgOTYgYnl0ZXMgbGVmdC4gVGhlIHZhbHVlICI5NiIgaXMgY2FsY3VsYXRlZCBhcyBuZWVkZWQgYnVmZmVyIGZvcgorIyAicHJlZiAzMCw2NChhMCkiIHByZWZldGNoLCB3aGljaCBjYW4gYmUgdXNlZCBhcyAicHJlZiAzMCwwKGEwKSIgYWZ0ZXIKKyMgaW5jcmVtZW50aW5nICJhMCIgYnkgNjQuCisjIEZvciAiYTIiIGJlbG93IDE2MCB0aGVyZSB3aWxsIGJlIG5vIHN1Y2ggInByZWYgMzAgc2FmZSIgNjQtYnl0ZSBjaHVuay4KKyMKKwlzbHRpdQl2MSxhMiwxNjAKKwliZ3R6CXYxLC5MbG9vcDE2d19ub3ByZWYzMAkjIHNraXAgInByZWYgMzAsMChhMCkiCisJIHN1YnUJdDcsYTIsOTYJIyBzdWJ0cmFjdCAicHJlZiAzMCB1bnNhZmUiIHJlZ2lvbgorCQkjIGJlbG93IHdlIGhhdmUgYXQgbGVhc3QgMSA2NC1ieXRlIGNodW5rIHdoaWNoIGlzICJwcmVmIDMwIHNhZmUiCisJYW5kaQl0Nix0NywweDNmCSMgdDYgaXMgcGFzdCAiNjQtYnl0ZSBzYWZlIGNodW5rcyIgcmVtaW5kZXIKKwlzdWJ1CXQ1LHQ3LHQ2CSMgc3VidHJhY3QgZnJvbSB0NyB0aGUgcmVtaW5kZXIKKwkJCQkjIEhlcmUgdDUgY291bnRzIGJ5dGVzIGluIDE2dyAic2FmZSIgY2h1bmtzCisJYWRkdQl0NCxhMCx0NQkjIE5vdyB0NCBpcyB0aGUgZHN0IGFmdGVyIDY0LWJ5dGUgInNhZmUiIGNodW5rcworCisjIERvbid0IHVzZSAicHJlZiAzMCwwKGEwKSIgZm9yIGEwIGluIGEgIm1pZGRsZSIgb2YgYSBjYWNoZSBsaW5lCisjCXByZWYJMzAsMChhMCkKKyMgSGVyZSB3ZSBhcmUgaW4gdGhlIHJlZ2lvbiwgd2hlcmUgaXQgaXMgc2FmZSB0byB1c2UgInByZWYgMzAsNjQoYTApIgorLkxsb29wMTZ3OgorCWFkZGl1CWEwLGEwLDY0CisJcHJlZgkzMCwtMzIoYTApCSMgY29udGludWUgc2V0dGluZyB1cCB0aGUgZGVzdCwgYWRkciA2NC0zMgorCXN3CWExLC02NChhMCkKKwlzdwlhMSwtNjAoYTApCisJc3cJYTEsLTU2KGEwKQorCXN3CWExLC01MihhMCkKKwlzdwlhMSwtNDgoYTApCisJc3cJYTEsLTQ0KGEwKQorCXN3CWExLC00MChhMCkKKwlzdwlhMSwtMzYoYTApCisJbm9wCisJbm9wCQkJIyB0aGUgZXh0cmEgbm9wIGluc3RydWN0aW9ucyBoZWxwIHRvIGJhbGFuY2UKKwlub3AJCQkjIGN5Y2xlcyBuZWVkZWQgZm9yICJzdG9yZSIgKyAiZmlsbCIgKyAiZXZpY3QiIAorCW5vcAkJCSMgRm9yIDY0Ynl0ZSBzdG9yZSB0aGVyZSBhcmUgbmVlZGVkIDggZmlsbAorCW5vcAkJCSMgYW5kIDggZXZpY3QgY3ljbGVzLCBpLmUuIGF0IGxlYXN0IDMyIGluc3RyLgorCW5vcAorCW5vcAorCXByZWYJMzAsMChhMCkJIyBjb250aW51ZSBzZXR0aW5nIHVwIHRoZSBkZXN0LCBhZGRyIDY0LTAKKwlzdwlhMSwtMzIoYTApCisJc3cJYTEsLTI4KGEwKQorCXN3CWExLC0yNChhMCkKKwlzdwlhMSwtMjAoYTApCisJc3cJYTEsLTE2KGEwKQorCXN3CWExLC0xMihhMCkKKwlzdwlhMSwtOChhMCkKKwlzdwlhMSwtNChhMCkKKwlub3AKKwlub3AKKwlub3AKKwlub3AJCQkjIE5PVEU6IGFkZGluZyAxNCBub3AtcyBpbnN0ZWFkIG9mIDEyIG5vcC1zCisJbm9wCQkJIyBnaXZlcyBiZXR0ZXIgcmVzdWx0cyBmb3IgImZhc3QiIG1lbW9yeQorCW5vcAorCWJuZQlhMCx0NCwuTGxvb3AxNncKKwkgbm9wCisKKwliZXEJYTAsYTMsLkxjaGs4dwkjIG1heWJlIG5vIG1vcmUgNjQtYnl0ZSBjaHVua3M/CisJIG5vcAkJCSMgdGhpcyAiZGVsYXllZCBzbG90IiBpcyB1c2VsZXNzIC4uLgorCisuTGxvb3AxNndfbm9wcmVmMzA6CSMgdGhlcmUgY291bGQgYmUgdXAgdG8gMyAiNjQtYnl0ZSBub3ByZWYzMCIgY2h1bmtzCisJYWRkaXUJYTAsYTAsNjQKKwlzdwlhMSwtNjQoYTApCisJc3cJYTEsLTYwKGEwKQorCXN3CWExLC01NihhMCkKKwlzdwlhMSwtNTIoYTApCisJc3cJYTEsLTQ4KGEwKQorCXN3CWExLC00NChhMCkKKwlzdwlhMSwtNDAoYTApCisJc3cJYTEsLTM2KGEwKQorCXN3CWExLC0zMihhMCkKKwlzdwlhMSwtMjgoYTApCisJc3cJYTEsLTI0KGEwKQorCXN3CWExLC0yMChhMCkKKwlzdwlhMSwtMTYoYTApCisJc3cJYTEsLTEyKGEwKQorCXN3CWExLC04KGEwKQorCWJuZQlhMCxhMywuTGxvb3AxNndfbm9wcmVmMzAKKwkgc3cJYTEsLTQoYTApCisKKy5MY2hrOHc6CQkjIHQ4IGhlcmUgaXMgdGhlIGJ5dGUgY291bnQgcGFzdCA2NC1ieXRlIGNodW5rcworCisJYW5kaQl0Nyx0OCwweDFmCSMgaXMgdGhlcmUgYSAzMi1ieXRlIGNodW5rPworCQkJCSMgdGhlIHQ3IGlzIHRoZSByZW1pbmRlciBjb3VudCBwYXN0IDMyLWJ5dGVzCisJYmVxCXQ4LHQ3LC5MY2hrMXcJIyB3aGVuIHQ4PT10Nywgbm8gMzItYnl0ZSBjaHVuaworCSBtb3ZlCWEyLHQ3CisKKwlzdwlhMSwwKGEwKQorCXN3CWExLDQoYTApCisJc3cJYTEsOChhMCkKKwlzdwlhMSwxMihhMCkKKwlzdwlhMSwxNihhMCkKKwlzdwlhMSwyMChhMCkKKwlzdwlhMSwyNChhMCkKKwlzdwlhMSwyOChhMCkKKwlhZGRpdQlhMCxhMCwzMgorCisuTGNoazF3OgorCWFuZGkJdDgsYTIsMHgzCSMgbm93IHQ4IGlzIHRoZSByZW1pbmRlciBwYXN0IDF3IGNodW5rcworCWJlcQlhMix0OCwuTGxhc3Q0YWxpZ25lZAorCSBzdWJ1CWEzLGEyLHQ4CSMgYTMgaXMgdGhlIGNvdW50IG9mIGJ5dGVzIGluIDF3IGNodW5rcworCWFkZHUJYTMsYTAsYTMJIyBub3cgYTMgaXMgdGhlIGRzdCBhZGRyZXNzIHBhc3QgdGhlIDF3IGNodW5rcworCisjIGNvcHlpbmcgaW4gd29yZHMgKDQtYnl0ZSBjaHVua3MpCisuTHdvcmRDb3B5X2xvb3A6CisJYWRkaXUJYTAsYTAsNAorCWJuZQlhMCxhMywuTHdvcmRDb3B5X2xvb3AKKwkgc3cJYTEsLTQoYTApCisKKyMgc3RvcmUgbGFzdCAwLTMgYnl0ZXMKKyMgdGhpcyB3aWxsIHJlcGVhdCB0aGUgbGFzdCBzdG9yZSBpZiB0aGUgbWVtc2V0IGZpbmlzaGVzIG9uIGEgd29yZCBib3VuZGFyeQorLkxsYXN0NGFsaWduZWQ6CisJaglyYQorCSBTV0xPCWExLC0xKHQwKQorCisuTGxhc3Q0OgorCWJlcQlhMCx0MCwuTGxhc3Q0ZQorLkxsYXN0NGw6CisJIGFkZGl1CWEwLGEwLDEKKwlibmUJYTAsdDAsLkxsYXN0NGwKKwkgc2IJYTEsLTEoYTApCisuTGxhc3Q0ZToKKwlqCXJhCisJIG5vcAorCisJLnNldAlhdAorCS5zZXQJcmVvcmRlcgorCitFTkQobWVtc2V0KQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICBJbXBsZW1lbnRhdGlvbiA6IFN0YXRpYyBmdW5jdGlvbnMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N0cmluZy9taXBzLXN0cmluZy1vcHMuaCBiL2xpYmMvYXJjaC1taXBzL3N0cmluZy9taXBzLXN0cmluZy1vcHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MGY3ZTNhCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHMvc3RyaW5nL21pcHMtc3RyaW5nLW9wcy5oCkBAIC0wLDAgKzEsMTQ4IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDEwIE1JUFMgVGVjaG5vbG9naWVzLCBJbmMuCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqICAgICAgICBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgKKyAqICAgICAgICB0aGUgZGlzdHJpYnV0aW9uLgorICogICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgTUlQUyBUZWNobm9sb2dpZXMgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICAgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgX19NSVBTX1NUUklOR19PUFNfSAorI2RlZmluZSBfX01JUFNfU1RSSU5HX09QU19ICisgICAgLyogVGhpcyBkZWZpbml0aW9uIG9mIHRoZSBieXRlIGJpdGZpZWxkcyB1c2VzIHRoZQorICAgICAgIGFzc3VtcHRpb24gdGhhdCB0aGUgbGF5b3V0IG9mIHRoZSBiaXRmaWVsZHMgaXMKKyAgICAgICBlcXVpdmFsZW50IHRvIHRoZSBsYXlvdXQgaW4gbWVtb3J5LiAgR2VuZXJhbGx5LAorICAgICAgIGZvciB0aGUgTUlQUyBBQklzLCB0aGlzIGlzIHRydWUuIElmIHlvdSBjb21waWxlCisgICAgICAgdGhlIHN0cmNtcC5jIGZpbGUgd2l0aCAtRFNNT0tFX1RFU1RfTkVXX1NUUkNNUCwKKyAgICAgICB0aGlzIGFzc3VtcHRpb24gd2lsbCBiZSB0ZXN0ZWQuCisKKyAgICAgICBBbHNvLCByZWdhcmRsZXNzIG9mIGNoYXIgc2lnbmVkbmVzcywgQU5TSSBDIGRpY3RhdGVzIHRoYXQKKyAgICAgICBzdHJjbXAoKSB0cmVhdHMgZWFjaCBjaGFyYWN0ZXIgYXMgdW5zaWduZWQgY2hhci4gIEZvcgorICAgICAgIHN0cmxlbiBhbmQgdGhlIGxpa2UsIHNpZ25lZG5lc3MgZG9lc24ndCBtYXR0ZXIuCisKKyAgICAgICBBbHNvLCB0aGlzIGNvZGUgYXNzdW1lcyB0aGF0IHRoZXJlIGFyZSA4LWJpdHMgcGVyICdjaGFyJy4gICovCisKKyNpZiBfX21pcHM2NAordHlwZWRlZiBzdHJ1Y3QgYml0cworeworICB1bnNpZ25lZCBCMDo4LCBCMTo4LCBCMjo4LCBCMzo4LCBCNDo4LCBCNTo4LCBCNjo4LCBCNzo4OworfSBiaXRzX3Q7CisjZWxzZQordHlwZWRlZiBzdHJ1Y3QgYml0cworeworICB1bnNpZ25lZCBCMDo4LCBCMTo4LCBCMjo4LCBCMzo4OworfSBiaXRzX3Q7CisjZW5kaWYKKworI2lmbmRlZiBfVUxXCisgICAgLyogZm9yIE1JUFMgR0NDLCB0aGVyZSBpcyBubyB1bmFsaWduZWQgYnVpbHRpbnMgLSBzbyB0aGlzIGNvZGUgZm9yY2VzCisgICAgICAgdGhlIGNvbXBpbGVyIHRvIHRyZWF0IHRoZSBwb2ludGVyIGFjY2VzcyBhcyB1bmFsaWduZWQuICAqLworc3RydWN0IHVsdworeworICB1bnNpZ25lZCBiOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKyNkZWZpbmUgX1VMVyhfX3gpICgoc3RydWN0IHVsdyAqKSAoKGNoYXIgKikoJl9feCkpKS0+YjsKKyNlbmRpZgorCisvKiBUaGlzIHVuaW9uIGFzc3VtZXMgdGhhdCBzbWFsbCBzdHJ1Y3R1cmVzIGNhbiBiZSBpbiByZWdpc3RlcnMuICBJZgorICAgbm90LCB0aGVuIG1lbW9yeSBhY2Nlc3NlcyB3aWxsIGJlIGRvbmUgLSBub3Qgb3B0aW1hbCwgYnV0IG9rLiAgKi8KK3R5cGVkZWYgdW5pb24KK3sKKyAgdW5zaWduZWQgdjsKKyAgYml0c190IGI7Cit9IGJpdGZpZWxkc190OworCisjaWZuZGVmIGRldGVjdF96ZXJvCisvKiBfX21pcHNfZHNwLCBfX21pcHNfZHNwcjIsIGFuZCBfX21pcHM2NCBhcmUgcHJlZGVmaW5lZCBieQorICAgdGhlIGNvbXBpbGVyLCBiYXNlZCBvbiBjb21tYW5kIGxpbmUgb3B0aW9ucy4gICovCisjaWYgKF9fbWlwc19kc3AgfHwgX19taXBzX2RzcHIyKSAmJiAhX19taXBzNjQKKyNkZWZpbmUgX19taXBzX3VzaW5nX2RzcCAxCisKKy8qIERTUCA0LWxhbmUgKDggdW5zaWduZWQgYml0cyBwZXIgbGluZSkgc3VidHJhY3QgYW5kIHNhdHVyYXRlCisgKiBJbnRyaW5zaWMgb3BlcmF0aW9uLiBIb3cgdGhpcyB3b3JrczoKKyAqICAgICBHaXZlbiBhIDQtYnl0ZSBzdHJpbmcgb2YgIkFCQ1wwIiwgc3VidHJhY3QgdGhpcyBhcworICogICAgIGFuIHVuc2lnbmVkIGludGVnZXIgZnJvbSAweDAxMDEwMTAxOgorICoJICAgMHgwMTAxMDEwMQorICogICAgICAgLSAweDQxNDI0MzAwCisgKiAgICAgICAgLS0tLS0tLS0tLS0KKyAoICAgICAgICAgMHhiZmJlYmUwMSA8LS0gYW5zd2VyIHdpdGhvdXQgc2F0dXJhdGlvbgorICoJICAgMHgwMDAwMDAwMSA8LS0gYW5zd2VyIHdpdGggc2F0dXJhdGlvbgorICogV2hlbiB0aGlzIDQtbGFuZSB2ZWN0b3IgaXMgdHJlYXRlZCBhcyBhbiB1bnNpZ25lZCBpbnQgdmFsdWUsCisgKiBhIG5vbi16ZXJvIGFuc3dlciBpbmRpY2F0ZXMgdGhlIHByZXNlbmNlIG9mIGEgemVybyBpbiB0aGUKKyAqIG9yaWdpbmFsIDQtYnl0ZSBhcmd1bWVudC4gICovCisKK3R5cGVkZWYgc2lnbmVkIGNoYXIgdjRpOCBfX2F0dHJpYnV0ZV9fICgodmVjdG9yX3NpemUgKDQpKSk7CisKKyNkZWZpbmUgZGV0ZWN0X3plcm8oX194LF9feSxfXzAxcyxfXzgwcylcCisgICAgICAgKCh1bnNpZ25lZCkgX19idWlsdGluX21pcHNfc3VidV9zX3FiKCh2NGk4KSBfXzAxcywodjRpOCkgX194KSkKKworICAgIC8qIHNldHMgYWxsIDQgbGFuZXMgdG8gcmVxdWVzdGVkIGJ5dGUuICAqLworI2RlZmluZSBzZXRfYnl0ZV9sYW5lcyhfX3gpICgodW5zaWduZWQpIF9fYnVpbHRpbl9taXBzX3JlcGxfcWIoX194KSkKKworICAgIC8qIHNldHMgYWxsIDQgbGFuZXMgdG8gMHgwMS4gICovCisjZGVmaW5lIGRlZl9hbmRfc2V0XzAxKF9feCkgdW5zaWduZWQgX194ID0gKHVuc2lnbmVkKSBfX2J1aWx0aW5fbWlwc19yZXBsX3FiKDB4MDEpCisKKyAgICAvKiBzZXRzIGFsbCA0IGxhbmVzIHRvIDB4ODAuIE5vdCBuZWVkZWQgd2hlbiBzdWJ1X3MucWIgdXNlZC4gKi8KKyNkZWZpbmUgZGVmX2FuZF9zZXRfODAoX194KSAvKiBkbyBub3RoaW5nICovCisKKyNlbHNlCisgICAgLyogdGhpcyB2ZXJzaW9uLCBvcmlnaW5hbGx5IHB1Ymxpc2hlZCBpbiB0aGUgODAncywgdXNlcworICAgICAgIGEgcmV2ZXJzZS1jYXJyeS1zZXQgbGlrZSBkZXRlcm1pbmF0aW9uIG9mIHRoZSB6ZXJvIGJ5dGUuCisgICAgICAgVGhlIHN0ZXBzIGFyZSwgZm9yIF9feCA9IDB4MzFmZjAwMDE6CisgICAgICAgX194IC0gXzAxcyA9IDB4MzBmZGZmMDAKKyAgICAgICB+X194ID0gMHhjZTAwZmZmZQorICAgICAgICgoX194IC0gXzAxcykgJiB+X194KSA9IDB4MDAwMGZmMDAKKyAgICAgICB4ICYgXzgwcyA9IDB4MDAwMDgwMDAgPC0gYnl0ZSAzIHdhcyB6ZXJvCisgICAgICAgU29tZSBpbXBsZW1lbnRhaW9ucyBuYWl2ZWx5IGFzc3VtZSB0aGF0IGNoYXJhY3RlcnMgYXJlCisgICAgICAgYWx3YXlzIDctYml0IHVuc2lnbmVkIEFTQ0lJLiBXaXRoIHRoYXQgYXNzdW1wdGlvbiwgdGhlCisgICAgICAgIiYgfngiIGlzIHVzdWFsbHkgZGlzY2FyZGVkLiBTaW5jZSBjaGFyYWN0ZXIgc3RyaW5ncworICAgICAgIGFyZSA4LWJpdCwgdGhlIGFuZCBpcyBuZWVkZWQgdG8gY2F0Y2ggdGhlIGNhc2Ugb2YKKyAgICAgICBhIGZhbHNlIHBvc2l0aXZlIHdoZW4gdGhlIGJ5dGUgaXMgMHg4MC4gKi8KKworI2RlZmluZSBkZXRlY3RfemVybyhfX3gsX195LF8wMXMsXzgwcylcCisJKCh1bnNpZ25lZCkgKCgoX194KSAtIF8wMXMpICYgfihfX3gpKSAmIF84MHMpCisKKyNpZiBfX21pcHM2NAorI2RlZmluZSBkZWZfYW5kX3NldF84MChfX3gpIHVuc2lnbmVkIF9feCA9ICAweDgwODA4MDgwODA4MDgwODB1bAorI2RlZmluZSBkZWZfYW5kX3NldF8wMShfX3gpICB1bnNpZ25lZCBfX3ggPSAweDAxMDEwMTAxMDEwMTAxMDF1bAorI2Vsc2UKKyNkZWZpbmUgZGVmX2FuZF9zZXRfODAoX194KSB1bnNpZ25lZCBfX3ggPSAweDgwODA4MDgwdWwKKyNkZWZpbmUgZGVmX2FuZF9zZXRfMDEoX194KSB1bnNpZ25lZCBfX3ggPSAweDAxMDEwMTAxdWwKKyNlbmRpZgorCisjZW5kaWYKKyNlbmRpZgorCisvKiBkZWFsaW5nIHdpdGggJ3ZvaWQgKicgY29udmVyc2lvbnMgd2l0aG91dCB1c2luZyBleHRyYSB2YXJpYWJsZXMuICovCisjZGVmaW5lIGdldF9ieXRlKF9feCxfX2lkeCkgKCgodW5zaWduZWQgY2hhciAqKSAoX194KSlbX19pZHhdKQorI2RlZmluZSBzZXRfYnl0ZShfX3gsX19pZHgsX19maWxsKSAoKHVuc2lnbmVkIGNoYXIgKikgKF9feCkpW19faWR4XSA9IChfX2ZpbGwpCisjZGVmaW5lIGdldF93b3JkKF9feCxfX2lkeCkgKCgodW5zaWduZWQgKikgKF9feCkpW19faWR4XSkKKyNkZWZpbmUgc2V0X3dvcmQoX194LF9faWR4LF9fZmlsbCkgKCh1bnNpZ25lZCAqKSAoX194KSlbX19pZHhdID0gKF9fZmlsbCkKKyNkZWZpbmUgaW5jX3B0cl9hcyhfX3R5cGUsX194LF9faW5jKSBfX3ggPSAodm9pZCAqKSAoKChfX3R5cGUpIF9feCkgKyAoX19pbmMpKQorI2RlZmluZSBjdnRfcHRyX3RvKF9fdHlwZSxfX3gpICgoX190eXBlKSAoX194KSkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zdHJpbmcvbWlwc19zdHJsZW4uYyBiL2xpYmMvYXJjaC1taXBzL3N0cmluZy9taXBzX3N0cmxlbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmYjdlNmEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtbWlwcy9zdHJpbmcvbWlwc19zdHJsZW4uYwpAQCAtMCwwICsxLDIyMyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMCBNSVBTIFRlY2hub2xvZ2llcywgSW5jLgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiAgICAgICAgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoCisgKiAgICAgICAgdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIE1JUFMgVGVjaG5vbG9naWVzIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAibWlwcy1zdHJpbmctb3BzLmgiCisKKyNkZWZpbmUgZG9fc3RybGVuX3dvcmQoX19hdikge1wKKyAgICBpZiAoZGV0ZWN0X3plcm8oeCx4LF8wMXMsXzgwcykpIGJyZWFrO1wKKyAgICB4ID0gX19hdjtcCisgICAgY250ICs9IHNpemVvZiAodW5zaWduZWQpO1wKKyAgICB9CisKKyNkZWZpbmUgZG9fc3RybGVuX2J5dGUoX194KSB7XAorICBpZiAoKGJ4LmIuQiMjX194KSA9PSAwKSBicmVhaztcCisgICsrY250O1wKKyAgfQorCisjaWYgU01PS0VfVEVTVF9NSVBTX1NUUkxFTgorI2RlZmluZSBzdHJsZW4gbXlfc3RybGVuCisjZW5kaWYKKworaW50CitzdHJsZW4gKGNvbnN0IHZvaWQgKl9hKQoreworICBpbnQgY250ID0gMDsKKyAgdW5zaWduZWQgeDsKKworICAvKiBhbGlnbiB0aGUgc3RyaW5nIHRvIHdvcmQgYm91bmRhcnkgc28gd2UgY2FuIGRvIHdvcmQgYXQgYSB0aW1lLiAgKi8KKyAgaWYgKChjdnRfcHRyX3RvICh1bnNpZ25lZCwgX2EpICYgKHNpemVvZiAodW5zaWduZWQpIC0gMSkpICE9IDApCisgICAgeworICAgICAgaWYgKChjdnRfcHRyX3RvICh1bnNpZ25lZCwgX2EpICYgMSkgIT0gMCkKKwl7CisJICBpZiAoZ2V0X2J5dGUgKF9hLCAwKSA9PSAwKQorCSAgICByZXR1cm4gY250OworCSAgLyogc2V0IGJpdCAxIHNvIDItYnl0ZXMgYXJlIGNoZWNrZWQgYW5kIGluY3JlbWVudGVkLiAqLworCSAgaW5jX3B0cl9hcyAoY2hhciAqLCBfYSwgMSk7CisJICArK2NudDsKKwl9CisgICAgICBpZiAoKGN2dF9wdHJfdG8gKHVuc2lnbmVkLCBfYSkgJiAyKSAhPSAwKQorCXsKKwkgIGlmIChnZXRfYnl0ZSAoX2EsIDApID09IDApCisJICAgIHJldHVybiBjbnQgKyAwOworCSAgaWYgKGdldF9ieXRlIChfYSwgMSkgPT0gMCkKKwkgICAgcmV0dXJuIGNudCArIDE7CisJICBpbmNfcHRyX2FzIChjaGFyICosIF9hLCAyKTsKKwkgIGNudCArPSAyOworCX0KKyAgICB9CisKKyNpZiBfX21pcHM2NAorI2Vycm9yIHN0cmxlbjogbWlwczY0IGNoZWNrIGZvciA0LWJ5dGUgYWxpZ25tZW50IG5vdCBpbXBsZW1lbnRlZC4KKyNlbmRpZgorCisgIGlmICgxKQorICAgIHsKKyAgICAgIGRlZl9hbmRfc2V0XzAxIChfMDFzKTsKKyAgICAgIGRlZl9hbmRfc2V0XzgwIChfODBzKTsKKworICAgICAgLyogYXMgYWR2YW50YWdvdXMgYXMgaXQgaXMgdG8gcGVyZm9ybWFuY2UsIHRoaXMgY29kZSBjYW5ub3QgcHJlLWxvYWQKKyAgICAgICAgIHRoZSBmb2xsb3dpbmcgd29yZCwgbm9yIGNhbiBpdCBwcmVmZXRjaCB0aGUgbmV4dCBsaW5lIGF0IHRoZSBzdGFydAorICAgICAgICAgb2YgdGhlIGxvb3Agc2luY2UgdGhlIHN0cmluZyBjYW4gYmUgYXQgdGhlIGVuZCBvZiBhIHBhZ2Ugd2l0aCB0aGUKKyAgICAgICAgIGZvbGxvd2luZyBwYWdlIHVubWFwcGVkLiBUaGVyZSBhcmUgdGVzdHMgaW4gdGhlIHN1aXRlIHRvIGNhdGNoCisgICAgICAgICBhbnkgYXR0ZW1wdCB0byBnbyBiZXlvbmQgdGhlIGN1cnJlbnQgd29yZC4gKi8KKyAgICAgIHggPSBnZXRfd29yZCAoX2EsIDApOworICAgICAgd2hpbGUgKDEpCisJeworCSAgLyogZG9pbmcgOCB3b3JkcyBzaG91bGQgY292ZXIgbW9zdCBzdHJpbmdzLiAgKi8KKwkgIGRvX3N0cmxlbl93b3JkIChnZXRfd29yZCAoX2EsIDEpKTsKKwkgIGRvX3N0cmxlbl93b3JkIChnZXRfd29yZCAoX2EsIDIpKTsKKwkgIGRvX3N0cmxlbl93b3JkIChnZXRfd29yZCAoX2EsIDMpKTsKKwkgIGRvX3N0cmxlbl93b3JkIChnZXRfd29yZCAoX2EsIDQpKTsKKwkgIGRvX3N0cmxlbl93b3JkIChnZXRfd29yZCAoX2EsIDUpKTsKKwkgIGRvX3N0cmxlbl93b3JkIChnZXRfd29yZCAoX2EsIDYpKTsKKwkgIGRvX3N0cmxlbl93b3JkIChnZXRfd29yZCAoX2EsIDcpKTsKKwkgIGRvX3N0cmxlbl93b3JkIChnZXRfd29yZCAoX2EsIDgpKTsKKwkgIGluY19wdHJfYXMgKHVuc2lnbmVkICosIF9hLCA4KTsKKwl9CisgICAgfQorICB3aGlsZSAoMSkKKyAgICB7CisgICAgICAvKiBwdWxsIGFwYXJ0IHRoZSBsYXN0IHdvcmQgcHJvY2Vzc2VkIGFuZCBmaW5kIHRoZSB6ZXJvLiAgKi8KKyAgICAgIGJpdGZpZWxkc190IGJ4OworICAgICAgYngudiA9IHg7CisjaWYgX19taXBzNjQKKyAgICAgIGRvX3N0cmxlbl9ieXRlICgwKTsKKyAgICAgIGRvX3N0cmxlbl9ieXRlICgxKTsKKyAgICAgIGRvX3N0cmxlbl9ieXRlICgyKTsKKyAgICAgIGRvX3N0cmxlbl9ieXRlICgzKTsKKyAgICAgIGRvX3N0cmxlbl9ieXRlICg0KTsKKyAgICAgIGRvX3N0cmxlbl9ieXRlICg1KTsKKyAgICAgIGRvX3N0cmxlbl9ieXRlICg2KTsKKyNlbHNlCisgICAgICBkb19zdHJsZW5fYnl0ZSAoMCk7CisgICAgICBkb19zdHJsZW5fYnl0ZSAoMSk7CisgICAgICBkb19zdHJsZW5fYnl0ZSAoMik7CisjZW5kaWYKKyAgICAgIC8qIGxhc3QgYnl0ZSBpcyB6ZXJvICovCisgICAgICBicmVhazsKKyAgICB9CisgIHJldHVybiBjbnQ7Cit9CisKKyN1bmRlZiBkb19zdHJsZW5fYnl0ZQorI3VuZGVmIGRvX3N0cmxlbl93b3JkCisKKyNpZiBTTU9LRV9URVNUX01JUFNfU1RSTEVOCisjaW5jbHVkZSA8c3RkaW8uaD4KK2NoYXIgc3RyMVtdID0gIkRIUllTVE9ORSBQUk9HUkFNLCAxJ1NUIFNUUklORyI7CitjaGFyIHN0cjJbXSA9ICJESFJZU1RPTkUgUFJPR1JBTSwgMidTVCBTVFJJTkciOworCitjaGFyIHN0cjNbXSA9ICJhbm90aGVyIHN0cmluZyI7CitjaGFyIHN0cjRbXSA9ICJhbm90aGVyIjsKKworY2hhciBzdHI1W10gPSAic29tZXMgdHJpbmciOworY2hhciBzdHI2W10gPSAic29tZXNfdHJpbmciOworCitjaGFyIHN0cjdbMTZdLCBzdHI4WzE2XTsKKworc3RhdGljIGNoYXIgKgorY2hrICh1bnNpZ25lZCBtaW5lLCB1bnNpZ25lZCBsaWJzLCBpbnQgKmVycm9ycykKK3sKKyAgc3RhdGljIGNoYXIgYW5zd2VyWzEwMjRdOworICBjaGFyICpyZXN1bHQgPSBtaW5lID09IGxpYnMgPyAiUEFTUyIgOiAiRkFJTCI7CisgIHNwcmludGYgKGFuc3dlciwgIm5ld19zdHJsZW49JWQ6IGxpYl9zdHJsZW49JWQ6ICVzISIsIG1pbmUsIGxpYnMsIHJlc3VsdCk7CisgIGlmIChtaW5lICE9IGxpYnMpCisgICAgKCplcnJvcnMpKys7CisgIHJldHVybiBhbnN3ZXI7Cit9CisKK2ludAorbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworICBpbnQgZXJyb3JzID0gMDsKKyAgLyogc2V0IC0xIGluIG9uZSBwb3NpdGlvbiAqLworICBzdHI2WzVdID0gMHhmZjsKKyAgLyogc2V0IHplcm8gaW4gc2FtZSBwb3NpdGlvbiB3aXRoIGp1bmsgaW4gZm9sbG93aW5nIDMgKi8KKyAgc3RyN1swXSA9IHN0cjhbMF0gPSAwOworICBzdHI3WzFdID0gMHhmZjsKKyAgc3RyN1syXSA9ICdhJzsKKyAgc3RyN1szXSA9IDI7CisgIHN0cjhbMV0gPSAncyc7CisgIHN0cjhbMl0gPSAtMjsKKyAgc3RyOFszXSA9IDA7CisKKyAgZnByaW50ZiAoc3RkZXJyLCAiPT09PT09PT09PSBtaXBzX3N0cmxlbiVzIHRlc3QuLi5cbiIsCisJICAgYXJndlswXSA/IGFyZ3ZbMF0gOiAidW5rbm93biBzdHJsZW4iKTsKKyNkZWZpbmUgUChfX3gsX195KSB7XAorICAgIGludCBhID0gbXlfc3RybGVuKF9feCArIF9feSk7XAorICAgIGludCBiID0gKHN0cmxlbikoX194ICsgX195KSAvKiBsaWJyYXJ5IHZlcnNpb24gKi87XAorICAgIGZwcmludGYoc3RkZXJyLCIlcyslZDogJXNcbiIsI19feCxfX3ksY2hrKGEsYiwmZXJyb3JzKSk7XAorICAgIH0KKworICBQIChzdHIxLCAwKTsKKyAgUCAoc3RyMSwgMSk7CisgIFAgKHN0cjEsIDIpOworICBQIChzdHIxLCAzKTsKKworICBQIChzdHIyLCAwKTsKKyAgUCAoc3RyMiwgMSk7CisgIFAgKHN0cjIsIDIpOworICBQIChzdHIyLCAzKTsKKworICBQIChzdHIzLCAwKTsKKyAgUCAoc3RyMywgMSk7CisgIFAgKHN0cjMsIDIpOworICBQIChzdHIzLCAzKTsKKworICBQIChzdHI0LCAwKTsKKyAgUCAoc3RyNCwgMSk7CisgIFAgKHN0cjQsIDIpOworICBQIChzdHI0LCAzKTsKKworICBQIChzdHI1LCAwKTsKKyAgUCAoc3RyNSwgMSk7CisgIFAgKHN0cjUsIDIpOworICBQIChzdHI1LCAzKTsKKworICBQIChzdHI2LCAwKTsKKyAgUCAoc3RyNiwgMSk7CisgIFAgKHN0cjYsIDIpOworICBQIChzdHI2LCAzKTsKKworICBQIChzdHI3LCAwKTsKKyAgUCAoc3RyNywgMSk7CisgIFAgKHN0cjcsIDIpOworICBQIChzdHI3LCAzKTsKKworICBQIChzdHI4LCAwKTsKKyAgUCAoc3RyOCwgMSk7CisgIFAgKHN0cjgsIDIpOworICBQIChzdHI4LCAzKTsKKworICByZXR1cm4gZXJyb3JzOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy5tayBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzLm1rCmluZGV4IGQ0YjcwYTQuLjIzMzkzYTIgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzLm1rCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzLm1rCkBAIC01LDYgKzUsNyBAQAogc3lzY2FsbF9zcmMgKz0gYXJjaC1taXBzL3N5c2NhbGxzL19fZm9yay5TCiBzeXNjYWxsX3NyYyArPSBhcmNoLW1pcHMvc3lzY2FsbHMvX3dhaXRwaWQuUwogc3lzY2FsbF9zcmMgKz0gYXJjaC1taXBzL3N5c2NhbGxzL19fd2FpdGlkLlMKK3N5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy93YWl0NC5TCiBzeXNjYWxsX3NyYyArPSBhcmNoLW1pcHMvc3lzY2FsbHMvX19zeXNfY2xvbmUuUwogc3lzY2FsbF9zcmMgKz0gYXJjaC1taXBzL3N5c2NhbGxzL2V4ZWN2ZS5TCiBzeXNjYWxsX3NyYyArPSBhcmNoLW1pcHMvc3lzY2FsbHMvX19zZXR1aWQuUwpAQCAtMTksNiArMjAsNyBAQAogc3lzY2FsbF9zcmMgKz0gYXJjaC1taXBzL3N5c2NhbGxzL2dldGdyb3Vwcy5TCiBzeXNjYWxsX3NyYyArPSBhcmNoLW1pcHMvc3lzY2FsbHMvZ2V0cGdpZC5TCiBzeXNjYWxsX3NyYyArPSBhcmNoLW1pcHMvc3lzY2FsbHMvZ2V0cHBpZC5TCitzeXNjYWxsX3NyYyArPSBhcmNoLW1pcHMvc3lzY2FsbHMvZ2V0c2lkLlMKIHN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy9zZXRzaWQuUwogc3lzY2FsbF9zcmMgKz0gYXJjaC1taXBzL3N5c2NhbGxzL3NldGdpZC5TCiBzeXNjYWxsX3NyYyArPSBhcmNoLW1pcHMvc3lzY2FsbHMvX19zZXRyZXVpZC5TCkBAIC0yNyw2ICsyOSw3IEBACiBzeXNjYWxsX3NyYyArPSBhcmNoLW1pcHMvc3lzY2FsbHMvX19icmsuUwogc3lzY2FsbF9zcmMgKz0gYXJjaC1taXBzL3N5c2NhbGxzL2tpbGwuUwogc3lzY2FsbF9zcmMgKz0gYXJjaC1taXBzL3N5c2NhbGxzL3RraWxsLlMKK3N5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy90Z2tpbGwuUwogc3lzY2FsbF9zcmMgKz0gYXJjaC1taXBzL3N5c2NhbGxzL19fcHRyYWNlLlMKIHN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy9fX3NldF90aHJlYWRfYXJlYS5TCiBzeXNjYWxsX3NyYyArPSBhcmNoLW1pcHMvc3lzY2FsbHMvX19nZXRwcmlvcml0eS5TCkBAIC02MSw2ICs2NCw4IEBACiBzeXNjYWxsX3NyYyArPSBhcmNoLW1pcHMvc3lzY2FsbHMvbWFkdmlzZS5TCiBzeXNjYWxsX3NyYyArPSBhcmNoLW1pcHMvc3lzY2FsbHMvbWxvY2suUwogc3lzY2FsbF9zcmMgKz0gYXJjaC1taXBzL3N5c2NhbGxzL211bmxvY2suUworc3lzY2FsbF9zcmMgKz0gYXJjaC1taXBzL3N5c2NhbGxzL21sb2NrYWxsLlMKK3N5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy9tdW5sb2NrYWxsLlMKIHN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy9taW5jb3JlLlMKIHN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy9fX2lvY3RsLlMKIHN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy9yZWFkdi5TCkBAIC0xMTAsNiArMTE1LDcgQEAKIHN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy9yZW5hbWUuUwogc3lzY2FsbF9zcmMgKz0gYXJjaC1taXBzL3N5c2NhbGxzL19fZ2V0Y3dkLlMKIHN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy9hY2Nlc3MuUworc3lzY2FsbF9zcmMgKz0gYXJjaC1taXBzL3N5c2NhbGxzL2ZhY2Nlc3NhdC5TCiBzeXNjYWxsX3NyYyArPSBhcmNoLW1pcHMvc3lzY2FsbHMvc3ltbGluay5TCiBzeXNjYWxsX3NyYyArPSBhcmNoLW1pcHMvc3lzY2FsbHMvZmNoZGlyLlMKIHN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy90cnVuY2F0ZS5TCkBAIC0xMjIsNiArMTI4LDkgQEAKIHN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy9yZW1vdmV4YXR0ci5TCiBzeXNjYWxsX3NyYyArPSBhcmNoLW1pcHMvc3lzY2FsbHMvbHJlbW92ZXhhdHRyLlMKIHN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy9fX3N0YXRmczY0LlMKK3N5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy91bnNoYXJlLlMKK3N5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy9zd2Fwb24uUworc3lzY2FsbF9zcmMgKz0gYXJjaC1taXBzL3N5c2NhbGxzL3N3YXBvZmYuUwogc3lzY2FsbF9zcmMgKz0gYXJjaC1taXBzL3N5c2NhbGxzL3BhdXNlLlMKIHN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy9nZXR0aW1lb2ZkYXkuUwogc3lzY2FsbF9zcmMgKz0gYXJjaC1taXBzL3N5c2NhbGxzL3NldHRpbWVvZmRheS5TCkBAIC0xNDAsNiArMTQ5LDkgQEAKIHN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy9fX3RpbWVyX2RlbGV0ZS5TCiBzeXNjYWxsX3NyYyArPSBhcmNoLW1pcHMvc3lzY2FsbHMvdXRpbWVzLlMKIHN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy91dGltZW5zYXQuUworc3lzY2FsbF9zcmMgKz0gYXJjaC1taXBzL3N5c2NhbGxzL3RpbWVyZmRfY3JlYXRlLlMKK3N5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy90aW1lcmZkX3NldHRpbWUuUworc3lzY2FsbF9zcmMgKz0gYXJjaC1taXBzL3N5c2NhbGxzL3RpbWVyZmRfZ2V0dGltZS5TCiBzeXNjYWxsX3NyYyArPSBhcmNoLW1pcHMvc3lzY2FsbHMvc2lnYWN0aW9uLlMKIHN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy9zaWdwcm9jbWFzay5TCiBzeXNjYWxsX3NyYyArPSBhcmNoLW1pcHMvc3lzY2FsbHMvX19zaWdzdXNwZW5kLlMKQEAgLTE0Nyw2ICsxNTksNyBAQAogc3lzY2FsbF9zcmMgKz0gYXJjaC1taXBzL3N5c2NhbGxzL19fcnRfc2lncHJvY21hc2suUwogc3lzY2FsbF9zcmMgKz0gYXJjaC1taXBzL3N5c2NhbGxzL19fcnRfc2lndGltZWR3YWl0LlMKIHN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy9zaWdwZW5kaW5nLlMKK3N5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy9zaWduYWxmZDQuUwogc3lzY2FsbF9zcmMgKz0gYXJjaC1taXBzL3N5c2NhbGxzL3NvY2tldC5TCiBzeXNjYWxsX3NyYyArPSBhcmNoLW1pcHMvc3lzY2FsbHMvc29ja2V0cGFpci5TCiBzeXNjYWxsX3NyYyArPSBhcmNoLW1pcHMvc3lzY2FsbHMvYmluZC5TCkBAIC0xNzYsNyArMTg5LDYgQEAKIHN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy9pb3ByaW9fc2V0LlMKIHN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy9pb3ByaW9fZ2V0LlMKIHN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy91bmFtZS5TCi1zeXNjYWxsX3NyYyArPSBhcmNoLW1pcHMvc3lzY2FsbHMvX193YWl0NC5TCiBzeXNjYWxsX3NyYyArPSBhcmNoLW1pcHMvc3lzY2FsbHMvdW1hc2suUwogc3lzY2FsbF9zcmMgKz0gYXJjaC1taXBzL3N5c2NhbGxzL19fcmVib290LlMKIHN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy9fX3N5c2xvZy5TCkBAIC0xODUsNiArMTk3LDcgQEAKIHN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy9rbG9nY3RsLlMKIHN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy9zeXNpbmZvLlMKIHN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy9wZXJzb25hbGl0eS5TCitzeXNjYWxsX3NyYyArPSBhcmNoLW1pcHMvc3lzY2FsbHMvcGVyZl9ldmVudF9vcGVuLlMKIHN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy9mdXRleC5TCiBzeXNjYWxsX3NyYyArPSBhcmNoLW1pcHMvc3lzY2FsbHMvZXBvbGxfY3JlYXRlLlMKIHN5c2NhbGxfc3JjICs9IGFyY2gtbWlwcy9zeXNjYWxscy9lcG9sbF9jdGwuUwpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX19icmsuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19fYnJrLlMKaW5kZXggMWYwOTc3Mi4uOTc5N2I5ZCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX19icmsuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fX2Jyay5TCkBAIC0xLDUgKzEsNSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLwotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KICAgICAudGV4dAogICAgIC5nbG9ibCBfX2JyawogICAgIC5hbGlnbiA0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fX2ZjbnRsLlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fX2ZjbnRsLlMKaW5kZXggNmRkNzZlMy4uYjZhMGZkYSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX19mY250bC5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19fZmNudGwuUwpAQCAtMSw1ICsxLDUgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAgICAgLnRleHQKICAgICAuZ2xvYmwgX19mY250bAogICAgIC5hbGlnbiA0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fX2ZjbnRsNjQuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19fZmNudGw2NC5TCmluZGV4IGU4MmUzODIuLmQyNzI1ZTMgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19fZmNudGw2NC5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19fZmNudGw2NC5TCkBAIC0xLDUgKzEsNSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLwotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KICAgICAudGV4dAogICAgIC5nbG9ibCBfX2ZjbnRsNjQKICAgICAuYWxpZ24gNApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX19mb3JrLlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fX2ZvcmsuUwppbmRleCBkYjMwNDcyLi5lOGQxZGVhIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fX2ZvcmsuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fX2ZvcmsuUwpAQCAtMSw1ICsxLDUgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAgICAgLnRleHQKICAgICAuZ2xvYmwgX19mb3JrCiAgICAgLmFsaWduIDQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19fZnN0YXRmczY0LlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fX2ZzdGF0ZnM2NC5TCmluZGV4IDY0ODVkMTAuLjBlOWJjZTQgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19fZnN0YXRmczY0LlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX19mc3RhdGZzNjQuUwpAQCAtMSw1ICsxLDUgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAgICAgLnRleHQKICAgICAuZ2xvYmwgX19mc3RhdGZzNjQKICAgICAuYWxpZ24gNApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX19nZXRjcHUuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19fZ2V0Y3B1LlMKaW5kZXggOTBkNTlmNC4uMDUyNTEwZiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX19nZXRjcHUuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fX2dldGNwdS5TCkBAIC0xLDUgKzEsNSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLwotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KICAgICAudGV4dAogICAgIC5nbG9ibCBfX2dldGNwdQogICAgIC5hbGlnbiA0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fX2dldGN3ZC5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX19nZXRjd2QuUwppbmRleCBlOGZhMzQwLi4xMWE3YTk0IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fX2dldGN3ZC5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19fZ2V0Y3dkLlMKQEAgLTEsNSArMSw1IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCi0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogICAgIC50ZXh0CiAgICAgLmdsb2JsIF9fZ2V0Y3dkCiAgICAgLmFsaWduIDQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19fZ2V0cHJpb3JpdHkuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19fZ2V0cHJpb3JpdHkuUwppbmRleCA3Y2FiZDMxLi5iMWJmOWVhIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fX2dldHByaW9yaXR5LlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX19nZXRwcmlvcml0eS5TCkBAIC0xLDUgKzEsNSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLwotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KICAgICAudGV4dAogICAgIC5nbG9ibCBfX2dldHByaW9yaXR5CiAgICAgLmFsaWduIDQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19faW9jdGwuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19faW9jdGwuUwppbmRleCAyNTI0ZTAyLi5kMDcyYmQ4IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fX2lvY3RsLlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX19pb2N0bC5TCkBAIC0xLDUgKzEsNSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLwotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KICAgICAudGV4dAogICAgIC5nbG9ibCBfX2lvY3RsCiAgICAgLmFsaWduIDQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19fbGxzZWVrLlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fX2xsc2Vlay5TCmluZGV4IGZiZmQ1ODMuLjQyNDhlMGMgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19fbGxzZWVrLlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX19sbHNlZWsuUwpAQCAtMSw1ICsxLDUgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAgICAgLnRleHQKICAgICAuZ2xvYmwgX19sbHNlZWsKICAgICAuYWxpZ24gNApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX19tbWFwMi5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX19tbWFwMi5TCmluZGV4IDk4Zjk3ZWIuLjhmNDUzNGMgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19fbW1hcDIuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fX21tYXAyLlMKQEAgLTEsNSArMSw1IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCi0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogICAgIC50ZXh0CiAgICAgLmdsb2JsIF9fbW1hcDIKICAgICAuYWxpZ24gNApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX19vcGVuLlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fX29wZW4uUwppbmRleCAwY2NiMjg2Li45YzBhN2M2IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fX29wZW4uUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fX29wZW4uUwpAQCAtMSw1ICsxLDUgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAgICAgLnRleHQKICAgICAuZ2xvYmwgX19vcGVuCiAgICAgLmFsaWduIDQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19fb3BlbmF0LlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fX29wZW5hdC5TCmluZGV4IDA0Mzk5YjQuLmYyNDUxYjQgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19fb3BlbmF0LlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX19vcGVuYXQuUwpAQCAtMSw1ICsxLDUgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAgICAgLnRleHQKICAgICAuZ2xvYmwgX19vcGVuYXQKICAgICAuYWxpZ24gNApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX19wdHJhY2UuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19fcHRyYWNlLlMKaW5kZXggMGJjYmE5Zi4uZjg5MjY1MCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX19wdHJhY2UuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fX3B0cmFjZS5TCkBAIC0xLDUgKzEsNSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLwotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KICAgICAudGV4dAogICAgIC5nbG9ibCBfX3B0cmFjZQogICAgIC5hbGlnbiA0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fX3JlYm9vdC5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX19yZWJvb3QuUwppbmRleCA1ZThlNTdhLi5kY2Q2OGU0IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fX3JlYm9vdC5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19fcmVib290LlMKQEAgLTEsNSArMSw1IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCi0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogICAgIC50ZXh0CiAgICAgLmdsb2JsIF9fcmVib290CiAgICAgLmFsaWduIDQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19fcnRfc2lnYWN0aW9uLlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fX3J0X3NpZ2FjdGlvbi5TCmluZGV4IDQzYTU3MWEuLmI4Mjg2ODEgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19fcnRfc2lnYWN0aW9uLlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX19ydF9zaWdhY3Rpb24uUwpAQCAtMSw1ICsxLDUgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAgICAgLnRleHQKICAgICAuZ2xvYmwgX19ydF9zaWdhY3Rpb24KICAgICAuYWxpZ24gNApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX19ydF9zaWdwcm9jbWFzay5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX19ydF9zaWdwcm9jbWFzay5TCmluZGV4IDU5YTg4OTQuLjZmYWYxZWYgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19fcnRfc2lncHJvY21hc2suUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fX3J0X3NpZ3Byb2NtYXNrLlMKQEAgLTEsNSArMSw1IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCi0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogICAgIC50ZXh0CiAgICAgLmdsb2JsIF9fcnRfc2lncHJvY21hc2sKICAgICAuYWxpZ24gNApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX19ydF9zaWd0aW1lZHdhaXQuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19fcnRfc2lndGltZWR3YWl0LlMKaW5kZXggZGFlODcyZS4uMWE2YWU2ZSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX19ydF9zaWd0aW1lZHdhaXQuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fX3J0X3NpZ3RpbWVkd2FpdC5TCkBAIC0xLDUgKzEsNSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLwotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KICAgICAudGV4dAogICAgIC5nbG9ibCBfX3J0X3NpZ3RpbWVkd2FpdAogICAgIC5hbGlnbiA0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fX3NjaGVkX2dldGFmZmluaXR5LlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fX3NjaGVkX2dldGFmZmluaXR5LlMKaW5kZXggY2MwMWZmMi4uNDA5OWJhYSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX19zY2hlZF9nZXRhZmZpbml0eS5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19fc2NoZWRfZ2V0YWZmaW5pdHkuUwpAQCAtMSw1ICsxLDUgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAgICAgLnRleHQKICAgICAuZ2xvYmwgX19zY2hlZF9nZXRhZmZpbml0eQogICAgIC5hbGlnbiA0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fX3NldF90aHJlYWRfYXJlYS5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX19zZXRfdGhyZWFkX2FyZWEuUwppbmRleCAyYWFjOTAxLi5kMTk4NTEzIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fX3NldF90aHJlYWRfYXJlYS5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19fc2V0X3RocmVhZF9hcmVhLlMKQEAgLTEsNSArMSw1IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCi0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogICAgIC50ZXh0CiAgICAgLmdsb2JsIF9fc2V0X3RocmVhZF9hcmVhCiAgICAgLmFsaWduIDQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19fc2V0cmVzdWlkLlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fX3NldHJlc3VpZC5TCmluZGV4IGUwMGQyZTEuLmU0M2UxMjEgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19fc2V0cmVzdWlkLlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX19zZXRyZXN1aWQuUwpAQCAtMSw1ICsxLDUgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAgICAgLnRleHQKICAgICAuZ2xvYmwgX19zZXRyZXN1aWQKICAgICAuYWxpZ24gNApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX19zZXRyZXVpZC5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX19zZXRyZXVpZC5TCmluZGV4IGI0NWYzZmMuLjcyYmNhMTYgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19fc2V0cmV1aWQuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fX3NldHJldWlkLlMKQEAgLTEsNSArMSw1IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCi0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogICAgIC50ZXh0CiAgICAgLmdsb2JsIF9fc2V0cmV1aWQKICAgICAuYWxpZ24gNApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX19zZXR1aWQuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19fc2V0dWlkLlMKaW5kZXggYzIyMTUyNi4uMzYwNTUyYyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX19zZXR1aWQuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fX3NldHVpZC5TCkBAIC0xLDUgKzEsNSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLwotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KICAgICAudGV4dAogICAgIC5nbG9ibCBfX3NldHVpZAogICAgIC5hbGlnbiA0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fX3NpZ3N1c3BlbmQuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19fc2lnc3VzcGVuZC5TCmluZGV4IGI2MjJlZmUuLjJiNmY2ZDcgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19fc2lnc3VzcGVuZC5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19fc2lnc3VzcGVuZC5TCkBAIC0xLDUgKzEsNSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLwotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KICAgICAudGV4dAogICAgIC5nbG9ibCBfX3NpZ3N1c3BlbmQKICAgICAuYWxpZ24gNApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX19zdGF0ZnM2NC5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX19zdGF0ZnM2NC5TCmluZGV4IDRkMWIxN2YuLjE2N2YzMzggMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19fc3RhdGZzNjQuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fX3N0YXRmczY0LlMKQEAgLTEsNSArMSw1IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCi0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogICAgIC50ZXh0CiAgICAgLmdsb2JsIF9fc3RhdGZzNjQKICAgICAuYWxpZ24gNApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX19zeXNfY2xvbmUuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19fc3lzX2Nsb25lLlMKaW5kZXggMzQ1MWUwMi4uNzE4NDY2YiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX19zeXNfY2xvbmUuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fX3N5c19jbG9uZS5TCkBAIC0xLDUgKzEsNSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLwotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KICAgICAudGV4dAogICAgIC5nbG9ibCBfX3N5c19jbG9uZQogICAgIC5hbGlnbiA0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fX3N5c2xvZy5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX19zeXNsb2cuUwppbmRleCBiZGMxOTRkLi44YjMwYzUwIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fX3N5c2xvZy5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19fc3lzbG9nLlMKQEAgLTEsNSArMSw1IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCi0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogICAgIC50ZXh0CiAgICAgLmdsb2JsIF9fc3lzbG9nCiAgICAgLmFsaWduIDQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19fdGltZXJfY3JlYXRlLlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fX3RpbWVyX2NyZWF0ZS5TCmluZGV4IDE0MGQwZDEuLjdkMzQzMTIgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19fdGltZXJfY3JlYXRlLlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX190aW1lcl9jcmVhdGUuUwpAQCAtMSw1ICsxLDUgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAgICAgLnRleHQKICAgICAuZ2xvYmwgX190aW1lcl9jcmVhdGUKICAgICAuYWxpZ24gNApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX190aW1lcl9kZWxldGUuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19fdGltZXJfZGVsZXRlLlMKaW5kZXggNGYzNjJlNi4uNDVjOTViYyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX190aW1lcl9kZWxldGUuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fX3RpbWVyX2RlbGV0ZS5TCkBAIC0xLDUgKzEsNSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLwotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KICAgICAudGV4dAogICAgIC5nbG9ibCBfX3RpbWVyX2RlbGV0ZQogICAgIC5hbGlnbiA0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fX3RpbWVyX2dldG92ZXJydW4uUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19fdGltZXJfZ2V0b3ZlcnJ1bi5TCmluZGV4IDY4YWZhMWMuLjIxNzVlY2QgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19fdGltZXJfZ2V0b3ZlcnJ1bi5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19fdGltZXJfZ2V0b3ZlcnJ1bi5TCkBAIC0xLDUgKzEsNSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLwotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KICAgICAudGV4dAogICAgIC5nbG9ibCBfX3RpbWVyX2dldG92ZXJydW4KICAgICAuYWxpZ24gNApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX190aW1lcl9nZXR0aW1lLlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fX3RpbWVyX2dldHRpbWUuUwppbmRleCA0YTcwZGE2Li4zZDU5NDRmIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fX3RpbWVyX2dldHRpbWUuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fX3RpbWVyX2dldHRpbWUuUwpAQCAtMSw1ICsxLDUgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAgICAgLnRleHQKICAgICAuZ2xvYmwgX190aW1lcl9nZXR0aW1lCiAgICAgLmFsaWduIDQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19fdGltZXJfc2V0dGltZS5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX190aW1lcl9zZXR0aW1lLlMKaW5kZXggYWQ4NDYwNi4uMzg3YWI0YSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX190aW1lcl9zZXR0aW1lLlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX190aW1lcl9zZXR0aW1lLlMKQEAgLTEsNSArMSw1IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCi0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogICAgIC50ZXh0CiAgICAgLmdsb2JsIF9fdGltZXJfc2V0dGltZQogICAgIC5hbGlnbiA0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fX3dhaXQ0LlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fX3dhaXQ0LlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcxM2I3Y2IuLjAwMDAwMDAKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX193YWl0NC5TCisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLwotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgotICAgIC50ZXh0Ci0gICAgLmdsb2JsIF9fd2FpdDQKLSAgICAuYWxpZ24gNAotICAgIC5lbnQgX193YWl0NAotCi1fX3dhaXQ0OgotICAgIC5zZXQgbm9yZW9yZGVyCi0gICAgLmNwbG9hZCAkdDkKLSAgICBsaSAkdjAsIF9fTlJfd2FpdDQKLSAgICBzeXNjYWxsCi0gICAgYm5leiAkYTMsIDFmCi0gICAgbW92ZSAkYTAsICR2MAotICAgIGogJHJhCi0gICAgbm9wCi0xOgotICAgIGxhICR0OSxfX3NldF9lcnJubwotICAgIGogJHQ5Ci0gICAgbm9wCi0gICAgLnNldCByZW9yZGVyCi0gICAgLmVuZCBfX3dhaXQ0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fX3dhaXRpZC5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX193YWl0aWQuUwppbmRleCA4M2U1YWEzLi45NzlhMjJiIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fX3dhaXRpZC5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19fd2FpdGlkLlMKQEAgLTEsNSArMSw1IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCi0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogICAgIC50ZXh0CiAgICAgLmdsb2JsIF9fd2FpdGlkCiAgICAgLmFsaWduIDQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19leGl0LlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fZXhpdC5TCmluZGV4IGI3ZWM4NzYuLmM2Zjg0ZjUgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19leGl0LlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX2V4aXQuUwpAQCAtMSw1ICsxLDUgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAgICAgLnRleHQKICAgICAuZ2xvYmwgX2V4aXQKICAgICAuYWxpZ24gNApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX2V4aXRfdGhyZWFkLlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fZXhpdF90aHJlYWQuUwppbmRleCAwYWY5ZDNkLi5kNTU0N2U4IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fZXhpdF90aHJlYWQuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fZXhpdF90aHJlYWQuUwpAQCAtMSw1ICsxLDUgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAgICAgLnRleHQKICAgICAuZ2xvYmwgX2V4aXRfdGhyZWFkCiAgICAgLmFsaWduIDQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL19mbHVzaF9jYWNoZS5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX2ZsdXNoX2NhY2hlLlMKaW5kZXggMDdkZWU2Ni4uY2VlOWRiYyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX2ZsdXNoX2NhY2hlLlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX2ZsdXNoX2NhY2hlLlMKQEAgLTEsNSArMSw1IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCi0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogICAgIC50ZXh0CiAgICAgLmdsb2JsIF9mbHVzaF9jYWNoZQogICAgIC5hbGlnbiA0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fd2FpdHBpZC5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvX3dhaXRwaWQuUwppbmRleCAyMGRiM2E4Li5iZTU4ODdmIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9fd2FpdHBpZC5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL193YWl0cGlkLlMKQEAgLTEsNSArMSw1IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCi0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogICAgIC50ZXh0CiAgICAgLmdsb2JsIF93YWl0cGlkCiAgICAgLmFsaWduIDQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2FjY2VwdC5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvYWNjZXB0LlMKaW5kZXggYzE5MjE2ZS4uYzliNDc3MiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvYWNjZXB0LlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvYWNjZXB0LlMKQEAgLTEsNSArMSw1IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCi0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogICAgIC50ZXh0CiAgICAgLmdsb2JsIGFjY2VwdAogICAgIC5hbGlnbiA0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9hY2Nlc3MuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2FjY2Vzcy5TCmluZGV4IGEyMmVkOTIuLjJiNGJlYzQgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2FjY2Vzcy5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2FjY2Vzcy5TCkBAIC0xLDUgKzEsNSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLwotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KICAgICAudGV4dAogICAgIC5nbG9ibCBhY2Nlc3MKICAgICAuYWxpZ24gNApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvYWNjdC5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvYWNjdC5TCmluZGV4IDUyMzVlZGUuLjU5OGY3NjIgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2FjY3QuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9hY2N0LlMKQEAgLTEsNSArMSw1IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCi0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogICAgIC50ZXh0CiAgICAgLmdsb2JsIGFjY3QKICAgICAuYWxpZ24gNApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvYmluZC5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvYmluZC5TCmluZGV4IDRmMDA5MjIuLjU4YWI2MDMgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2JpbmQuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9iaW5kLlMKQEAgLTEsNSArMSw1IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCi0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogICAgIC50ZXh0CiAgICAgLmdsb2JsIGJpbmQKICAgICAuYWxpZ24gNApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvY2FwZ2V0LlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9jYXBnZXQuUwppbmRleCA4MGU1NWVlLi5lNmQ4NzU1IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9jYXBnZXQuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9jYXBnZXQuUwpAQCAtMSw1ICsxLDUgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAgICAgLnRleHQKICAgICAuZ2xvYmwgY2FwZ2V0CiAgICAgLmFsaWduIDQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2NhcHNldC5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvY2Fwc2V0LlMKaW5kZXggMGU0YTNiZS4uNDEyZDYyZSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvY2Fwc2V0LlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvY2Fwc2V0LlMKQEAgLTEsNSArMSw1IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCi0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogICAgIC50ZXh0CiAgICAgLmdsb2JsIGNhcHNldAogICAgIC5hbGlnbiA0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9jaGRpci5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvY2hkaXIuUwppbmRleCA0MmViMzdjLi4yMTdlMDAwIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9jaGRpci5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2NoZGlyLlMKQEAgLTEsNSArMSw1IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCi0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogICAgIC50ZXh0CiAgICAgLmdsb2JsIGNoZGlyCiAgICAgLmFsaWduIDQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2NobW9kLlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9jaG1vZC5TCmluZGV4IDdlYTNlZGUuLjdmN2Y4ZWUgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2NobW9kLlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvY2htb2QuUwpAQCAtMSw1ICsxLDUgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAgICAgLnRleHQKICAgICAuZ2xvYmwgY2htb2QKICAgICAuYWxpZ24gNApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvY2hvd24uUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2Nob3duLlMKaW5kZXggNWZiMWUzMi4uODA2NDU3MiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvY2hvd24uUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9jaG93bi5TCkBAIC0xLDUgKzEsNSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLwotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KICAgICAudGV4dAogICAgIC5nbG9ibCBjaG93bgogICAgIC5hbGlnbiA0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9jaHJvb3QuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2Nocm9vdC5TCmluZGV4IGZhZmI2YTIuLjA3YjI4ZTkgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2Nocm9vdC5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2Nocm9vdC5TCkBAIC0xLDUgKzEsNSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLwotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KICAgICAudGV4dAogICAgIC5nbG9ibCBjaHJvb3QKICAgICAuYWxpZ24gNApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvY2xvY2tfZ2V0cmVzLlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9jbG9ja19nZXRyZXMuUwppbmRleCA0MDIxYjE0Li5jN2M4ZGUxIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9jbG9ja19nZXRyZXMuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9jbG9ja19nZXRyZXMuUwpAQCAtMSw1ICsxLDUgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAgICAgLnRleHQKICAgICAuZ2xvYmwgY2xvY2tfZ2V0cmVzCiAgICAgLmFsaWduIDQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2Nsb2NrX2dldHRpbWUuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2Nsb2NrX2dldHRpbWUuUwppbmRleCBiYTdhZmI5Li5iODljOWQwIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9jbG9ja19nZXR0aW1lLlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvY2xvY2tfZ2V0dGltZS5TCkBAIC0xLDUgKzEsNSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLwotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KICAgICAudGV4dAogICAgIC5nbG9ibCBjbG9ja19nZXR0aW1lCiAgICAgLmFsaWduIDQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2Nsb2NrX25hbm9zbGVlcC5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvY2xvY2tfbmFub3NsZWVwLlMKaW5kZXggMWE5YWVmNS4uZWM4NTM2MSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvY2xvY2tfbmFub3NsZWVwLlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvY2xvY2tfbmFub3NsZWVwLlMKQEAgLTEsNSArMSw1IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCi0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogICAgIC50ZXh0CiAgICAgLmdsb2JsIGNsb2NrX25hbm9zbGVlcAogICAgIC5hbGlnbiA0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9jbG9ja19zZXR0aW1lLlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9jbG9ja19zZXR0aW1lLlMKaW5kZXggNjVkNDM4OC4uM2U2ZjJlNiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvY2xvY2tfc2V0dGltZS5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2Nsb2NrX3NldHRpbWUuUwpAQCAtMSw1ICsxLDUgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAgICAgLnRleHQKICAgICAuZ2xvYmwgY2xvY2tfc2V0dGltZQogICAgIC5hbGlnbiA0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9jbG9zZS5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvY2xvc2UuUwppbmRleCAwN2ZmNGUzLi4xMTVjMjg2IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9jbG9zZS5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2Nsb3NlLlMKQEAgLTEsNSArMSw1IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCi0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogICAgIC50ZXh0CiAgICAgLmdsb2JsIGNsb3NlCiAgICAgLmFsaWduIDQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2Nvbm5lY3QuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2Nvbm5lY3QuUwppbmRleCBkMWZjMjgwLi4xMzMwMGUyIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9jb25uZWN0LlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvY29ubmVjdC5TCkBAIC0xLDUgKzEsNSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLwotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KICAgICAudGV4dAogICAgIC5nbG9ibCBjb25uZWN0CiAgICAgLmFsaWduIDQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2RlbGV0ZV9tb2R1bGUuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2RlbGV0ZV9tb2R1bGUuUwppbmRleCBkYjgwYmE3Li5iODIwYzdkIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9kZWxldGVfbW9kdWxlLlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZGVsZXRlX21vZHVsZS5TCkBAIC0xLDUgKzEsNSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLwotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KICAgICAudGV4dAogICAgIC5nbG9ibCBkZWxldGVfbW9kdWxlCiAgICAgLmFsaWduIDQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2R1cC5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZHVwLlMKaW5kZXggZTgxNTc0OS4uZGE0NWM5ZSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZHVwLlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZHVwLlMKQEAgLTEsNSArMSw1IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCi0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogICAgIC50ZXh0CiAgICAgLmdsb2JsIGR1cAogICAgIC5hbGlnbiA0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9kdXAyLlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9kdXAyLlMKaW5kZXggNmZiMTUxZi4uZDA0MGVmMyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZHVwMi5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2R1cDIuUwpAQCAtMSw1ICsxLDUgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAgICAgLnRleHQKICAgICAuZ2xvYmwgZHVwMgogICAgIC5hbGlnbiA0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9lcG9sbF9jcmVhdGUuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2Vwb2xsX2NyZWF0ZS5TCmluZGV4IGU1ZTQyMGIuLjJmNGFjN2YgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2Vwb2xsX2NyZWF0ZS5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2Vwb2xsX2NyZWF0ZS5TCkBAIC0xLDUgKzEsNSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLwotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KICAgICAudGV4dAogICAgIC5nbG9ibCBlcG9sbF9jcmVhdGUKICAgICAuYWxpZ24gNApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZXBvbGxfY3RsLlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9lcG9sbF9jdGwuUwppbmRleCBmNGY5ZjA1Li45MmI1NDI1IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9lcG9sbF9jdGwuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9lcG9sbF9jdGwuUwpAQCAtMSw1ICsxLDUgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAgICAgLnRleHQKICAgICAuZ2xvYmwgZXBvbGxfY3RsCiAgICAgLmFsaWduIDQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2Vwb2xsX3dhaXQuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2Vwb2xsX3dhaXQuUwppbmRleCA2NGQzM2ZiLi43NjY1YTEwIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9lcG9sbF93YWl0LlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZXBvbGxfd2FpdC5TCkBAIC0xLDUgKzEsNSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLwotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KICAgICAudGV4dAogICAgIC5nbG9ibCBlcG9sbF93YWl0CiAgICAgLmFsaWduIDQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2V2ZW50ZmQuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2V2ZW50ZmQuUwppbmRleCA1YzRlMjJiLi40OGQ0YzA0IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9ldmVudGZkLlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZXZlbnRmZC5TCkBAIC0xLDUgKzEsNSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLwotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KICAgICAudGV4dAogICAgIC5nbG9ibCBldmVudGZkCiAgICAgLmFsaWduIDQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2V4ZWN2ZS5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZXhlY3ZlLlMKaW5kZXggMzFiOTI3Ni4uMmYyNzliOCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZXhlY3ZlLlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZXhlY3ZlLlMKQEAgLTEsNSArMSw1IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCi0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogICAgIC50ZXh0CiAgICAgLmdsb2JsIGV4ZWN2ZQogICAgIC5hbGlnbiA0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9mYWNjZXNzYXQuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2ZhY2Nlc3NhdC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzMzQ2ZjEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9mYWNjZXNzYXQuUwpAQCAtMCwwICsxLDIyIEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgorICAgIC50ZXh0CisgICAgLmdsb2JsIGZhY2Nlc3NhdAorICAgIC5hbGlnbiA0CisgICAgLmVudCBmYWNjZXNzYXQKKworZmFjY2Vzc2F0OgorICAgIC5zZXQgbm9yZW9yZGVyCisgICAgLmNwbG9hZCAkdDkKKyAgICBsaSAkdjAsIF9fTlJfZmFjY2Vzc2F0CisgICAgc3lzY2FsbAorICAgIGJuZXogJGEzLCAxZgorICAgIG1vdmUgJGEwLCAkdjAKKyAgICBqICRyYQorICAgIG5vcAorMToKKyAgICBsYSAkdDksX19zZXRfZXJybm8KKyAgICBqICR0OQorICAgIG5vcAorICAgIC5zZXQgcmVvcmRlcgorICAgIC5lbmQgZmFjY2Vzc2F0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9mY2hkaXIuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2ZjaGRpci5TCmluZGV4IDkzMjk4YmQuLmQzYWE4ZDkgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2ZjaGRpci5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2ZjaGRpci5TCkBAIC0xLDUgKzEsNSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLwotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KICAgICAudGV4dAogICAgIC5nbG9ibCBmY2hkaXIKICAgICAuYWxpZ24gNApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZmNobW9kLlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9mY2htb2QuUwppbmRleCBmNDgzNTY3Li4zODM3ZjE4IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9mY2htb2QuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9mY2htb2QuUwpAQCAtMSw1ICsxLDUgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAgICAgLnRleHQKICAgICAuZ2xvYmwgZmNobW9kCiAgICAgLmFsaWduIDQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2ZjaG1vZGF0LlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9mY2htb2RhdC5TCmluZGV4IDhiYTFiYmUuLjc3NDg3YWIgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2ZjaG1vZGF0LlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZmNobW9kYXQuUwpAQCAtMSw1ICsxLDUgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAgICAgLnRleHQKICAgICAuZ2xvYmwgZmNobW9kYXQKICAgICAuYWxpZ24gNApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZmNob3duLlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9mY2hvd24uUwppbmRleCAyNGZjMDhmLi5iYTJlYzgxIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9mY2hvd24uUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9mY2hvd24uUwpAQCAtMSw1ICsxLDUgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAgICAgLnRleHQKICAgICAuZ2xvYmwgZmNob3duCiAgICAgLmFsaWduIDQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2ZjaG93bmF0LlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9mY2hvd25hdC5TCmluZGV4IDk4M2VkNTYuLjViNDY0ZTMgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2ZjaG93bmF0LlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZmNob3duYXQuUwpAQCAtMSw1ICsxLDUgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAgICAgLnRleHQKICAgICAuZ2xvYmwgZmNob3duYXQKICAgICAuYWxpZ24gNApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZmRhdGFzeW5jLlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9mZGF0YXN5bmMuUwppbmRleCAzMTI0MzlkLi40NWQ0M2ZkIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9mZGF0YXN5bmMuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9mZGF0YXN5bmMuUwpAQCAtMSw1ICsxLDUgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAgICAgLnRleHQKICAgICAuZ2xvYmwgZmRhdGFzeW5jCiAgICAgLmFsaWduIDQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2ZnZXR4YXR0ci5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZmdldHhhdHRyLlMKaW5kZXggN2U3N2U2MS4uNDU0ZTgwOSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZmdldHhhdHRyLlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZmdldHhhdHRyLlMKQEAgLTEsNSArMSw1IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCi0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogICAgIC50ZXh0CiAgICAgLmdsb2JsIGZnZXR4YXR0cgogICAgIC5hbGlnbiA0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9mbGlzdHhhdHRyLlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9mbGlzdHhhdHRyLlMKaW5kZXggMjZlMjZlMS4uMzE5ZDQ1YSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZmxpc3R4YXR0ci5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2ZsaXN0eGF0dHIuUwpAQCAtMSw1ICsxLDUgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAgICAgLnRleHQKICAgICAuZ2xvYmwgZmxpc3R4YXR0cgogICAgIC5hbGlnbiA0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9mbG9jay5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZmxvY2suUwppbmRleCBmOWEzMTQyLi40MWQwZGViIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9mbG9jay5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2Zsb2NrLlMKQEAgLTEsNSArMSw1IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCi0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogICAgIC50ZXh0CiAgICAgLmdsb2JsIGZsb2NrCiAgICAgLmFsaWduIDQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2ZyZW1vdmV4YXR0ci5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZnJlbW92ZXhhdHRyLlMKaW5kZXggZGIzZWI2Yy4uNDQ5ZTAwYyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZnJlbW92ZXhhdHRyLlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZnJlbW92ZXhhdHRyLlMKQEAgLTEsNSArMSw1IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCi0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogICAgIC50ZXh0CiAgICAgLmdsb2JsIGZyZW1vdmV4YXR0cgogICAgIC5hbGlnbiA0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9mc2V0eGF0dHIuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2ZzZXR4YXR0ci5TCmluZGV4IDllNjY2ZjIuLjVjNzczMWEgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2ZzZXR4YXR0ci5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2ZzZXR4YXR0ci5TCkBAIC0xLDUgKzEsNSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLwotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KICAgICAudGV4dAogICAgIC5nbG9ibCBmc2V0eGF0dHIKICAgICAuYWxpZ24gNApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZnN0YXQuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2ZzdGF0LlMKaW5kZXggNzNkNzIzNS4uMjAxZTk0YyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZnN0YXQuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9mc3RhdC5TCkBAIC0xLDUgKzEsNSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLwotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KICAgICAudGV4dAogICAgIC5nbG9ibCBmc3RhdAogICAgIC5hbGlnbiA0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9mc3RhdGF0LlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9mc3RhdGF0LlMKaW5kZXggM2FlMjI5ZS4uZTIyZDZmZCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZnN0YXRhdC5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2ZzdGF0YXQuUwpAQCAtMSw1ICsxLDUgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAgICAgLnRleHQKICAgICAuZ2xvYmwgZnN0YXRhdAogICAgIC5hbGlnbiA0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9mc3luYy5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZnN5bmMuUwppbmRleCBlMWNkMzE2Li4xNjhiYzg4IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9mc3luYy5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2ZzeW5jLlMKQEAgLTEsNSArMSw1IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCi0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogICAgIC50ZXh0CiAgICAgLmdsb2JsIGZzeW5jCiAgICAgLmFsaWduIDQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2Z0cnVuY2F0ZS5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZnRydW5jYXRlLlMKaW5kZXggNWQ3MmI0My4uYWE4NGUxZiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZnRydW5jYXRlLlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZnRydW5jYXRlLlMKQEAgLTEsNSArMSw1IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCi0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogICAgIC50ZXh0CiAgICAgLmdsb2JsIGZ0cnVuY2F0ZQogICAgIC5hbGlnbiA0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9mdHJ1bmNhdGU2NC5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZnRydW5jYXRlNjQuUwppbmRleCAyMTZhZTM4Li4zOTgwNjljIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9mdHJ1bmNhdGU2NC5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2Z0cnVuY2F0ZTY0LlMKQEAgLTEsNSArMSw1IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCi0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogICAgIC50ZXh0CiAgICAgLmdsb2JsIGZ0cnVuY2F0ZTY0CiAgICAgLmFsaWduIDQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2Z1dGV4LlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9mdXRleC5TCmluZGV4IDY1ZTUzN2EuLjJjZjRlYjAgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2Z1dGV4LlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZnV0ZXguUwpAQCAtMSw1ICsxLDUgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAgICAgLnRleHQKICAgICAuZ2xvYmwgZnV0ZXgKICAgICAuYWxpZ24gNApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZ2V0ZGVudHMuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2dldGRlbnRzLlMKaW5kZXggOGZmMGYyNi4uNGE0ZjYzYyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZ2V0ZGVudHMuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9nZXRkZW50cy5TCkBAIC0xLDUgKzEsNSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLwotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KICAgICAudGV4dAogICAgIC5nbG9ibCBnZXRkZW50cwogICAgIC5hbGlnbiA0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9nZXRlZ2lkLlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9nZXRlZ2lkLlMKaW5kZXggZGMyYTA0Yi4uYzZiNmNjYiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZ2V0ZWdpZC5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2dldGVnaWQuUwpAQCAtMSw1ICsxLDUgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAgICAgLnRleHQKICAgICAuZ2xvYmwgZ2V0ZWdpZAogICAgIC5hbGlnbiA0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9nZXRldWlkLlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9nZXRldWlkLlMKaW5kZXggOGJlY2E4OC4uY2RjZjc5MyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZ2V0ZXVpZC5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2dldGV1aWQuUwpAQCAtMSw1ICsxLDUgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAgICAgLnRleHQKICAgICAuZ2xvYmwgZ2V0ZXVpZAogICAgIC5hbGlnbiA0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9nZXRnaWQuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2dldGdpZC5TCmluZGV4IDZhNjE1ZWUuLmFmMjVmZjAgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2dldGdpZC5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2dldGdpZC5TCkBAIC0xLDUgKzEsNSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLwotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KICAgICAudGV4dAogICAgIC5nbG9ibCBnZXRnaWQKICAgICAuYWxpZ24gNApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZ2V0Z3JvdXBzLlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9nZXRncm91cHMuUwppbmRleCA4YmU3MzA4Li4zNWI2MmE2IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9nZXRncm91cHMuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9nZXRncm91cHMuUwpAQCAtMSw1ICsxLDUgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAgICAgLnRleHQKICAgICAuZ2xvYmwgZ2V0Z3JvdXBzCiAgICAgLmFsaWduIDQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2dldGl0aW1lci5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZ2V0aXRpbWVyLlMKaW5kZXggM2RmMWQxMS4uODJlNmE0NSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZ2V0aXRpbWVyLlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZ2V0aXRpbWVyLlMKQEAgLTEsNSArMSw1IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCi0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogICAgIC50ZXh0CiAgICAgLmdsb2JsIGdldGl0aW1lcgogICAgIC5hbGlnbiA0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9nZXRwZWVybmFtZS5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZ2V0cGVlcm5hbWUuUwppbmRleCA0YTNiZWRhLi43NzFhYzU1IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9nZXRwZWVybmFtZS5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2dldHBlZXJuYW1lLlMKQEAgLTEsNSArMSw1IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCi0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogICAgIC50ZXh0CiAgICAgLmdsb2JsIGdldHBlZXJuYW1lCiAgICAgLmFsaWduIDQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2dldHBnaWQuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2dldHBnaWQuUwppbmRleCBmZDc5MzUxLi4xYjQ4MzRjIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9nZXRwZ2lkLlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZ2V0cGdpZC5TCkBAIC0xLDUgKzEsNSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLwotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KICAgICAudGV4dAogICAgIC5nbG9ibCBnZXRwZ2lkCiAgICAgLmFsaWduIDQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2dldHBpZC5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZ2V0cGlkLlMKaW5kZXggZjUyZTMxYi4uODE5ZTk1NCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZ2V0cGlkLlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZ2V0cGlkLlMKQEAgLTEsNSArMSw1IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCi0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogICAgIC50ZXh0CiAgICAgLmdsb2JsIGdldHBpZAogICAgIC5hbGlnbiA0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9nZXRwcGlkLlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9nZXRwcGlkLlMKaW5kZXggNWUzZmUxOS4uYTAzYTdhNyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZ2V0cHBpZC5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2dldHBwaWQuUwpAQCAtMSw1ICsxLDUgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAgICAgLnRleHQKICAgICAuZ2xvYmwgZ2V0cHBpZAogICAgIC5hbGlnbiA0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9nZXRyZXNnaWQuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2dldHJlc2dpZC5TCmluZGV4IDhlOWJmMzkuLmZlNzUxZmIgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2dldHJlc2dpZC5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2dldHJlc2dpZC5TCkBAIC0xLDUgKzEsNSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLwotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KICAgICAudGV4dAogICAgIC5nbG9ibCBnZXRyZXNnaWQKICAgICAuYWxpZ24gNApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZ2V0cmVzdWlkLlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9nZXRyZXN1aWQuUwppbmRleCBmZjI3Y2RlLi5hODFmNmJjIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9nZXRyZXN1aWQuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9nZXRyZXN1aWQuUwpAQCAtMSw1ICsxLDUgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAgICAgLnRleHQKICAgICAuZ2xvYmwgZ2V0cmVzdWlkCiAgICAgLmFsaWduIDQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2dldHJsaW1pdC5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZ2V0cmxpbWl0LlMKaW5kZXggNzJlZDdkOC4uMjI4MjdlMCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZ2V0cmxpbWl0LlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZ2V0cmxpbWl0LlMKQEAgLTEsNSArMSw1IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCi0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogICAgIC50ZXh0CiAgICAgLmdsb2JsIGdldHJsaW1pdAogICAgIC5hbGlnbiA0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9nZXRydXNhZ2UuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2dldHJ1c2FnZS5TCmluZGV4IDRjMGY3ZDAuLjk1NTU3OTkgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2dldHJ1c2FnZS5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2dldHJ1c2FnZS5TCkBAIC0xLDUgKzEsNSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLwotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KICAgICAudGV4dAogICAgIC5nbG9ibCBnZXRydXNhZ2UKICAgICAuYWxpZ24gNApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZ2V0c2lkLlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9nZXRzaWQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYTQ1NGI2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZ2V0c2lkLlMKQEAgLTAsMCArMSwyMiBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KKyAgICAudGV4dAorICAgIC5nbG9ibCBnZXRzaWQKKyAgICAuYWxpZ24gNAorICAgIC5lbnQgZ2V0c2lkCisKK2dldHNpZDoKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIC5jcGxvYWQgJHQ5CisgICAgbGkgJHYwLCBfX05SX2dldHNpZAorICAgIHN5c2NhbGwKKyAgICBibmV6ICRhMywgMWYKKyAgICBtb3ZlICRhMCwgJHYwCisgICAgaiAkcmEKKyAgICBub3AKKzE6CisgICAgbGEgJHQ5LF9fc2V0X2Vycm5vCisgICAgaiAkdDkKKyAgICBub3AKKyAgICAuc2V0IHJlb3JkZXIKKyAgICAuZW5kIGdldHNpZApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZ2V0c29ja25hbWUuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2dldHNvY2tuYW1lLlMKaW5kZXggZTNkNDFmOS4uYzhjYzAzNyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZ2V0c29ja25hbWUuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9nZXRzb2NrbmFtZS5TCkBAIC0xLDUgKzEsNSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLwotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KICAgICAudGV4dAogICAgIC5nbG9ibCBnZXRzb2NrbmFtZQogICAgIC5hbGlnbiA0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9nZXRzb2Nrb3B0LlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9nZXRzb2Nrb3B0LlMKaW5kZXggZDU1YWU2YS4uZjJhZDEzNSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZ2V0c29ja29wdC5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2dldHNvY2tvcHQuUwpAQCAtMSw1ICsxLDUgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAgICAgLnRleHQKICAgICAuZ2xvYmwgZ2V0c29ja29wdAogICAgIC5hbGlnbiA0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9nZXR0aWQuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2dldHRpZC5TCmluZGV4IGRlMzdkZjUuLjg0NTU2Y2MgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2dldHRpZC5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2dldHRpZC5TCkBAIC0xLDUgKzEsNSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLwotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KICAgICAudGV4dAogICAgIC5nbG9ibCBnZXR0aWQKICAgICAuYWxpZ24gNApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZ2V0dGltZW9mZGF5LlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9nZXR0aW1lb2ZkYXkuUwppbmRleCBhOWE5M2E1Li41MDI3MGNiIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9nZXR0aW1lb2ZkYXkuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9nZXR0aW1lb2ZkYXkuUwpAQCAtMSw1ICsxLDUgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAgICAgLnRleHQKICAgICAuZ2xvYmwgZ2V0dGltZW9mZGF5CiAgICAgLmFsaWduIDQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2dldHVpZC5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZ2V0dWlkLlMKaW5kZXggZTViYTY5OC4uNWU4MjBkMSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZ2V0dWlkLlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZ2V0dWlkLlMKQEAgLTEsNSArMSw1IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCi0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogICAgIC50ZXh0CiAgICAgLmdsb2JsIGdldHVpZAogICAgIC5hbGlnbiA0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9nZXR4YXR0ci5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvZ2V0eGF0dHIuUwppbmRleCA2YzcwNTc5Li45Y2E4NDNjIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9nZXR4YXR0ci5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2dldHhhdHRyLlMKQEAgLTEsNSArMSw1IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCi0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogICAgIC50ZXh0CiAgICAgLmdsb2JsIGdldHhhdHRyCiAgICAgLmFsaWduIDQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2luaXRfbW9kdWxlLlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9pbml0X21vZHVsZS5TCmluZGV4IDVjZmJkMmYuLmJhZjRkYmEgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2luaXRfbW9kdWxlLlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvaW5pdF9tb2R1bGUuUwpAQCAtMSw1ICsxLDUgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAgICAgLnRleHQKICAgICAuZ2xvYmwgaW5pdF9tb2R1bGUKICAgICAuYWxpZ24gNApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvaW5vdGlmeV9hZGRfd2F0Y2guUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2lub3RpZnlfYWRkX3dhdGNoLlMKaW5kZXggOGRkZTY2Ny4uMzI5MzY4ZSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvaW5vdGlmeV9hZGRfd2F0Y2guUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9pbm90aWZ5X2FkZF93YXRjaC5TCkBAIC0xLDUgKzEsNSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLwotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KICAgICAudGV4dAogICAgIC5nbG9ibCBpbm90aWZ5X2FkZF93YXRjaAogICAgIC5hbGlnbiA0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9pbm90aWZ5X2luaXQuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2lub3RpZnlfaW5pdC5TCmluZGV4IGNkZTQ2NjcuLjE0YjhjNzMgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2lub3RpZnlfaW5pdC5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2lub3RpZnlfaW5pdC5TCkBAIC0xLDUgKzEsNSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLwotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KICAgICAudGV4dAogICAgIC5nbG9ibCBpbm90aWZ5X2luaXQKICAgICAuYWxpZ24gNApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvaW5vdGlmeV9ybV93YXRjaC5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvaW5vdGlmeV9ybV93YXRjaC5TCmluZGV4IDFiMjk2NGUuLmRlZmY4MzcgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2lub3RpZnlfcm1fd2F0Y2guUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9pbm90aWZ5X3JtX3dhdGNoLlMKQEAgLTEsNSArMSw1IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCi0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogICAgIC50ZXh0CiAgICAgLmdsb2JsIGlub3RpZnlfcm1fd2F0Y2gKICAgICAuYWxpZ24gNApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvaW9wcmlvX2dldC5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvaW9wcmlvX2dldC5TCmluZGV4IGY3ZjI0NDEuLmFkMGIwY2IgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2lvcHJpb19nZXQuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9pb3ByaW9fZ2V0LlMKQEAgLTEsNSArMSw1IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCi0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogICAgIC50ZXh0CiAgICAgLmdsb2JsIGlvcHJpb19nZXQKICAgICAuYWxpZ24gNApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvaW9wcmlvX3NldC5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvaW9wcmlvX3NldC5TCmluZGV4IDMzYTMwZTcuLmQxMTk4MTkgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2lvcHJpb19zZXQuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9pb3ByaW9fc2V0LlMKQEAgLTEsNSArMSw1IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCi0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogICAgIC50ZXh0CiAgICAgLmdsb2JsIGlvcHJpb19zZXQKICAgICAuYWxpZ24gNApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMva2lsbC5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMva2lsbC5TCmluZGV4IGE2NjQwZmYuLjQ3OTIwMTUgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2tpbGwuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9raWxsLlMKQEAgLTEsNSArMSw1IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCi0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogICAgIC50ZXh0CiAgICAgLmdsb2JsIGtpbGwKICAgICAuYWxpZ24gNApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMva2xvZ2N0bC5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMva2xvZ2N0bC5TCmluZGV4IDhjNDFkY2YuLmZmODYyZWQgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2tsb2djdGwuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9rbG9nY3RsLlMKQEAgLTEsNSArMSw1IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCi0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogICAgIC50ZXh0CiAgICAgLmdsb2JsIGtsb2djdGwKICAgICAuYWxpZ24gNApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvbGNob3duLlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9sY2hvd24uUwppbmRleCA5ZmI0NjYwLi40ZGU2NWY4IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9sY2hvd24uUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9sY2hvd24uUwpAQCAtMSw1ICsxLDUgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAgICAgLnRleHQKICAgICAuZ2xvYmwgbGNob3duCiAgICAgLmFsaWduIDQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2xnZXR4YXR0ci5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvbGdldHhhdHRyLlMKaW5kZXggZDU0NmQyOC4uZTZjMThiNyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvbGdldHhhdHRyLlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvbGdldHhhdHRyLlMKQEAgLTEsNSArMSw1IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCi0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogICAgIC50ZXh0CiAgICAgLmdsb2JsIGxnZXR4YXR0cgogICAgIC5hbGlnbiA0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9saW5rLlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9saW5rLlMKaW5kZXggNDA5NmI0NC4uYzNhOTkwMyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvbGluay5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2xpbmsuUwpAQCAtMSw1ICsxLDUgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAgICAgLnRleHQKICAgICAuZ2xvYmwgbGluawogICAgIC5hbGlnbiA0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9saXN0ZW4uUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2xpc3Rlbi5TCmluZGV4IGYzNjVkMWQuLjMyNGY0ODYgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2xpc3Rlbi5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2xpc3Rlbi5TCkBAIC0xLDUgKzEsNSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLwotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KICAgICAudGV4dAogICAgIC5nbG9ibCBsaXN0ZW4KICAgICAuYWxpZ24gNApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvbGlzdHhhdHRyLlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9saXN0eGF0dHIuUwppbmRleCA5MGI0NTQ0Li41Mjg3MWFmIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9saXN0eGF0dHIuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9saXN0eGF0dHIuUwpAQCAtMSw1ICsxLDUgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAgICAgLnRleHQKICAgICAuZ2xvYmwgbGlzdHhhdHRyCiAgICAgLmFsaWduIDQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2xsaXN0eGF0dHIuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2xsaXN0eGF0dHIuUwppbmRleCBlNzRiZjg1Li5mNDhhNjU3IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9sbGlzdHhhdHRyLlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvbGxpc3R4YXR0ci5TCkBAIC0xLDUgKzEsNSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLwotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KICAgICAudGV4dAogICAgIC5nbG9ibCBsbGlzdHhhdHRyCiAgICAgLmFsaWduIDQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2xyZW1vdmV4YXR0ci5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvbHJlbW92ZXhhdHRyLlMKaW5kZXggYThkOGRmOS4uZjE5YWUxOCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvbHJlbW92ZXhhdHRyLlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvbHJlbW92ZXhhdHRyLlMKQEAgLTEsNSArMSw1IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCi0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogICAgIC50ZXh0CiAgICAgLmdsb2JsIGxyZW1vdmV4YXR0cgogICAgIC5hbGlnbiA0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9sc2Vlay5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvbHNlZWsuUwppbmRleCBiZjQ4NmFjLi4zZGM5YjM2IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9sc2Vlay5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2xzZWVrLlMKQEAgLTEsNSArMSw1IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCi0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogICAgIC50ZXh0CiAgICAgLmdsb2JsIGxzZWVrCiAgICAgLmFsaWduIDQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2xzZXR4YXR0ci5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvbHNldHhhdHRyLlMKaW5kZXggMTlhMGZkZi4uNzc0ODRhOSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvbHNldHhhdHRyLlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvbHNldHhhdHRyLlMKQEAgLTEsNSArMSw1IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCi0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogICAgIC50ZXh0CiAgICAgLmdsb2JsIGxzZXR4YXR0cgogICAgIC5hbGlnbiA0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9sc3RhdC5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvbHN0YXQuUwppbmRleCAzNTVkMWRhLi5hOTYxY2NiIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9sc3RhdC5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL2xzdGF0LlMKQEAgLTEsNSArMSw1IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCi0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogICAgIC50ZXh0CiAgICAgLmdsb2JsIGxzdGF0CiAgICAgLmFsaWduIDQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL21hZHZpc2UuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL21hZHZpc2UuUwppbmRleCA0ZGY3MzI1Li4wOGNkOGNhIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9tYWR2aXNlLlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvbWFkdmlzZS5TCkBAIC0xLDUgKzEsNSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLwotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KICAgICAudGV4dAogICAgIC5nbG9ibCBtYWR2aXNlCiAgICAgLmFsaWduIDQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL21pbmNvcmUuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL21pbmNvcmUuUwppbmRleCA4ZjQ2N2NkLi43ZjZhMWQwIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9taW5jb3JlLlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvbWluY29yZS5TCkBAIC0xLDUgKzEsNSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLwotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KICAgICAudGV4dAogICAgIC5nbG9ibCBtaW5jb3JlCiAgICAgLmFsaWduIDQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL21rZGlyLlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9ta2Rpci5TCmluZGV4IGFiZjdkYjguLmJhYTE4NjAgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL21rZGlyLlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvbWtkaXIuUwpAQCAtMSw1ICsxLDUgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAgICAgLnRleHQKICAgICAuZ2xvYmwgbWtkaXIKICAgICAuYWxpZ24gNApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvbWtkaXJhdC5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvbWtkaXJhdC5TCmluZGV4IDRjY2JlM2IuLjE1ODM1OWEgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL21rZGlyYXQuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9ta2RpcmF0LlMKQEAgLTEsNSArMSw1IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCi0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogICAgIC50ZXh0CiAgICAgLmdsb2JsIG1rZGlyYXQKICAgICAuYWxpZ24gNApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvbWtub2QuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL21rbm9kLlMKaW5kZXggNWViYjBhZC4uMWIwMzk2MiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvbWtub2QuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9ta25vZC5TCkBAIC0xLDUgKzEsNSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLwotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KICAgICAudGV4dAogICAgIC5nbG9ibCBta25vZAogICAgIC5hbGlnbiA0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9tbG9jay5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvbWxvY2suUwppbmRleCA5OWFjYTZlLi4zNGVhZTg5IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9tbG9jay5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL21sb2NrLlMKQEAgLTEsNSArMSw1IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCi0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogICAgIC50ZXh0CiAgICAgLmdsb2JsIG1sb2NrCiAgICAgLmFsaWduIDQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL21sb2NrYWxsLlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9tbG9ja2FsbC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjMmQ4NTIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9tbG9ja2FsbC5TCkBAIC0wLDAgKzEsMjIgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CisgICAgLnRleHQKKyAgICAuZ2xvYmwgbWxvY2thbGwKKyAgICAuYWxpZ24gNAorICAgIC5lbnQgbWxvY2thbGwKKworbWxvY2thbGw6CisgICAgLnNldCBub3Jlb3JkZXIKKyAgICAuY3Bsb2FkICR0OQorICAgIGxpICR2MCwgX19OUl9tbG9ja2FsbAorICAgIHN5c2NhbGwKKyAgICBibmV6ICRhMywgMWYKKyAgICBtb3ZlICRhMCwgJHYwCisgICAgaiAkcmEKKyAgICBub3AKKzE6CisgICAgbGEgJHQ5LF9fc2V0X2Vycm5vCisgICAgaiAkdDkKKyAgICBub3AKKyAgICAuc2V0IHJlb3JkZXIKKyAgICAuZW5kIG1sb2NrYWxsCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9tb3VudC5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvbW91bnQuUwppbmRleCAxYjMzODVhLi4yMzE5ZTM5IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9tb3VudC5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL21vdW50LlMKQEAgLTEsNSArMSw1IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCi0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogICAgIC50ZXh0CiAgICAgLmdsb2JsIG1vdW50CiAgICAgLmFsaWduIDQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL21wcm90ZWN0LlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9tcHJvdGVjdC5TCmluZGV4IDRkYzNiZWEuLmM1NGMzM2YgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL21wcm90ZWN0LlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvbXByb3RlY3QuUwpAQCAtMSw1ICsxLDUgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAgICAgLnRleHQKICAgICAuZ2xvYmwgbXByb3RlY3QKICAgICAuYWxpZ24gNApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvbXJlbWFwLlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9tcmVtYXAuUwppbmRleCA3MjFjY2Q5Li5jOTJiMzEzIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9tcmVtYXAuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9tcmVtYXAuUwpAQCAtMSw1ICsxLDUgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAgICAgLnRleHQKICAgICAuZ2xvYmwgbXJlbWFwCiAgICAgLmFsaWduIDQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL21zeW5jLlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9tc3luYy5TCmluZGV4IDM3ZTFjOWEuLjllYmQyYjEgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL21zeW5jLlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvbXN5bmMuUwpAQCAtMSw1ICsxLDUgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAgICAgLnRleHQKICAgICAuZ2xvYmwgbXN5bmMKICAgICAuYWxpZ24gNApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvbXVubG9jay5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvbXVubG9jay5TCmluZGV4IGJlZmMyODIuLjEwMTg0MTMgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL211bmxvY2suUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9tdW5sb2NrLlMKQEAgLTEsNSArMSw1IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCi0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogICAgIC50ZXh0CiAgICAgLmdsb2JsIG11bmxvY2sKICAgICAuYWxpZ24gNApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvbXVubG9ja2FsbC5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvbXVubG9ja2FsbC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0MWRkMWMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9tdW5sb2NrYWxsLlMKQEAgLTAsMCArMSwyMiBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KKyAgICAudGV4dAorICAgIC5nbG9ibCBtdW5sb2NrYWxsCisgICAgLmFsaWduIDQKKyAgICAuZW50IG11bmxvY2thbGwKKworbXVubG9ja2FsbDoKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIC5jcGxvYWQgJHQ5CisgICAgbGkgJHYwLCBfX05SX211bmxvY2thbGwKKyAgICBzeXNjYWxsCisgICAgYm5leiAkYTMsIDFmCisgICAgbW92ZSAkYTAsICR2MAorICAgIGogJHJhCisgICAgbm9wCisxOgorICAgIGxhICR0OSxfX3NldF9lcnJubworICAgIGogJHQ5CisgICAgbm9wCisgICAgLnNldCByZW9yZGVyCisgICAgLmVuZCBtdW5sb2NrYWxsCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9tdW5tYXAuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL211bm1hcC5TCmluZGV4IDViNzE3YTkuLjBjY2QwNzIgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL211bm1hcC5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL211bm1hcC5TCkBAIC0xLDUgKzEsNSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLwotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KICAgICAudGV4dAogICAgIC5nbG9ibCBtdW5tYXAKICAgICAuYWxpZ24gNApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvbmFub3NsZWVwLlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9uYW5vc2xlZXAuUwppbmRleCA1OGFjZTEyLi42YmJiY2MxIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9uYW5vc2xlZXAuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9uYW5vc2xlZXAuUwpAQCAtMSw1ICsxLDUgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAgICAgLnRleHQKICAgICAuZ2xvYmwgbmFub3NsZWVwCiAgICAgLmFsaWduIDQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3BhdXNlLlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9wYXVzZS5TCmluZGV4IDcwMzQ2YjQuLmJhOTVmYTUgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3BhdXNlLlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvcGF1c2UuUwpAQCAtMSw1ICsxLDUgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAgICAgLnRleHQKICAgICAuZ2xvYmwgcGF1c2UKICAgICAuYWxpZ24gNApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvcGVyZl9ldmVudF9vcGVuLlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9wZXJmX2V2ZW50X29wZW4uUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zODY3YzJkCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvcGVyZl9ldmVudF9vcGVuLlMKQEAgLTAsMCArMSwyMiBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KKyAgICAudGV4dAorICAgIC5nbG9ibCBwZXJmX2V2ZW50X29wZW4KKyAgICAuYWxpZ24gNAorICAgIC5lbnQgcGVyZl9ldmVudF9vcGVuCisKK3BlcmZfZXZlbnRfb3BlbjoKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIC5jcGxvYWQgJHQ5CisgICAgbGkgJHYwLCBfX05SX3BlcmZfZXZlbnRfb3BlbgorICAgIHN5c2NhbGwKKyAgICBibmV6ICRhMywgMWYKKyAgICBtb3ZlICRhMCwgJHYwCisgICAgaiAkcmEKKyAgICBub3AKKzE6CisgICAgbGEgJHQ5LF9fc2V0X2Vycm5vCisgICAgaiAkdDkKKyAgICBub3AKKyAgICAuc2V0IHJlb3JkZXIKKyAgICAuZW5kIHBlcmZfZXZlbnRfb3BlbgpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvcGVyc29uYWxpdHkuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3BlcnNvbmFsaXR5LlMKaW5kZXggMDAyMDQ2OS4uMTU3MGFjNSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvcGVyc29uYWxpdHkuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9wZXJzb25hbGl0eS5TCkBAIC0xLDUgKzEsNSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLwotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KICAgICAudGV4dAogICAgIC5nbG9ibCBwZXJzb25hbGl0eQogICAgIC5hbGlnbiA0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9waXBlMi5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvcGlwZTIuUwppbmRleCA5ZGZkZTI5Li45MDZiZTYzIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9waXBlMi5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3BpcGUyLlMKQEAgLTEsNSArMSw1IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCi0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogICAgIC50ZXh0CiAgICAgLmdsb2JsIHBpcGUyCiAgICAgLmFsaWduIDQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3BvbGwuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3BvbGwuUwppbmRleCBjMWZlYzk3Li45ZTNiMTQyIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9wb2xsLlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvcG9sbC5TCkBAIC0xLDUgKzEsNSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLwotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KICAgICAudGV4dAogICAgIC5nbG9ibCBwb2xsCiAgICAgLmFsaWduIDQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3ByY3RsLlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9wcmN0bC5TCmluZGV4IGFhZjEzNDQuLmE5YjFhYzggMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3ByY3RsLlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvcHJjdGwuUwpAQCAtMSw1ICsxLDUgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAgICAgLnRleHQKICAgICAuZ2xvYmwgcHJjdGwKICAgICAuYWxpZ24gNApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvcHJlYWQ2NC5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvcHJlYWQ2NC5TCmluZGV4IDg2ZTgxN2MuLjUxZDg0YTkgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3ByZWFkNjQuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9wcmVhZDY0LlMKQEAgLTEsNSArMSw1IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCi0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogICAgIC50ZXh0CiAgICAgLmdsb2JsIHByZWFkNjQKICAgICAuYWxpZ24gNApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvcHdyaXRlNjQuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3B3cml0ZTY0LlMKaW5kZXggYThkY2Q5OC4uNDZkZmRmNiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvcHdyaXRlNjQuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9wd3JpdGU2NC5TCkBAIC0xLDUgKzEsNSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLwotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KICAgICAudGV4dAogICAgIC5nbG9ibCBwd3JpdGU2NAogICAgIC5hbGlnbiA0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9yZWFkLlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9yZWFkLlMKaW5kZXggNzU4MTZjZC4uZWU2ZTYxYSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvcmVhZC5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3JlYWQuUwpAQCAtMSw1ICsxLDUgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAgICAgLnRleHQKICAgICAuZ2xvYmwgcmVhZAogICAgIC5hbGlnbiA0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9yZWFkYWhlYWQuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3JlYWRhaGVhZC5TCmluZGV4IDVlYzYwMGQuLjk1YzRlNWIgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3JlYWRhaGVhZC5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3JlYWRhaGVhZC5TCkBAIC0xLDUgKzEsNSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLwotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KICAgICAudGV4dAogICAgIC5nbG9ibCByZWFkYWhlYWQKICAgICAuYWxpZ24gNApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvcmVhZGxpbmsuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3JlYWRsaW5rLlMKaW5kZXggY2NkZDU5Ni4uMmFjZjU2NiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvcmVhZGxpbmsuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9yZWFkbGluay5TCkBAIC0xLDUgKzEsNSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLwotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KICAgICAudGV4dAogICAgIC5nbG9ibCByZWFkbGluawogICAgIC5hbGlnbiA0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9yZWFkdi5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvcmVhZHYuUwppbmRleCAwNTYxYzE4Li5lMGNlYTRlIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9yZWFkdi5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3JlYWR2LlMKQEAgLTEsNSArMSw1IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCi0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogICAgIC50ZXh0CiAgICAgLmdsb2JsIHJlYWR2CiAgICAgLmFsaWduIDQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3JlY3Zmcm9tLlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9yZWN2ZnJvbS5TCmluZGV4IGNmMzQ0MWQuLmMzNGU1MDYgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3JlY3Zmcm9tLlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvcmVjdmZyb20uUwpAQCAtMSw1ICsxLDUgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAgICAgLnRleHQKICAgICAuZ2xvYmwgcmVjdmZyb20KICAgICAuYWxpZ24gNApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvcmVjdm1zZy5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvcmVjdm1zZy5TCmluZGV4IDVmMjJjNDkuLmI0N2Q4NjYgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3JlY3Ztc2cuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9yZWN2bXNnLlMKQEAgLTEsNSArMSw1IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCi0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogICAgIC50ZXh0CiAgICAgLmdsb2JsIHJlY3Ztc2cKICAgICAuYWxpZ24gNApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvcmVtb3ZleGF0dHIuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3JlbW92ZXhhdHRyLlMKaW5kZXggN2QxMmI5Ni4uNTVjOGU1OSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvcmVtb3ZleGF0dHIuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9yZW1vdmV4YXR0ci5TCkBAIC0xLDUgKzEsNSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLwotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KICAgICAudGV4dAogICAgIC5nbG9ibCByZW1vdmV4YXR0cgogICAgIC5hbGlnbiA0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9yZW5hbWUuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3JlbmFtZS5TCmluZGV4IDk1MGQ1NzkuLmUzNmRjYmEgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3JlbmFtZS5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3JlbmFtZS5TCkBAIC0xLDUgKzEsNSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLwotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KICAgICAudGV4dAogICAgIC5nbG9ibCByZW5hbWUKICAgICAuYWxpZ24gNApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvcmVuYW1lYXQuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3JlbmFtZWF0LlMKaW5kZXggYTJmM2M0Zi4uODkzYzI0NSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvcmVuYW1lYXQuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9yZW5hbWVhdC5TCkBAIC0xLDUgKzEsNSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLwotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KICAgICAudGV4dAogICAgIC5nbG9ibCByZW5hbWVhdAogICAgIC5hbGlnbiA0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9ybWRpci5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvcm1kaXIuUwppbmRleCAyZjc3ZDBkLi43OWYzNmM0IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9ybWRpci5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3JtZGlyLlMKQEAgLTEsNSArMSw1IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCi0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogICAgIC50ZXh0CiAgICAgLmdsb2JsIHJtZGlyCiAgICAgLmFsaWduIDQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3NjaGVkX2dldF9wcmlvcml0eV9tYXguUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3NjaGVkX2dldF9wcmlvcml0eV9tYXguUwppbmRleCAxNThiMGZlLi4xNjA5NWM0IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zY2hlZF9nZXRfcHJpb3JpdHlfbWF4LlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc2NoZWRfZ2V0X3ByaW9yaXR5X21heC5TCkBAIC0xLDUgKzEsNSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLwotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KICAgICAudGV4dAogICAgIC5nbG9ibCBzY2hlZF9nZXRfcHJpb3JpdHlfbWF4CiAgICAgLmFsaWduIDQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3NjaGVkX2dldF9wcmlvcml0eV9taW4uUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3NjaGVkX2dldF9wcmlvcml0eV9taW4uUwppbmRleCA4YzA3ZDcyLi45NmNkMmU2IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zY2hlZF9nZXRfcHJpb3JpdHlfbWluLlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc2NoZWRfZ2V0X3ByaW9yaXR5X21pbi5TCkBAIC0xLDUgKzEsNSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLwotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KICAgICAudGV4dAogICAgIC5nbG9ibCBzY2hlZF9nZXRfcHJpb3JpdHlfbWluCiAgICAgLmFsaWduIDQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3NjaGVkX2dldHBhcmFtLlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zY2hlZF9nZXRwYXJhbS5TCmluZGV4IDZhYmE3Y2YuLmM3ODFjNGEgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3NjaGVkX2dldHBhcmFtLlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc2NoZWRfZ2V0cGFyYW0uUwpAQCAtMSw1ICsxLDUgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAgICAgLnRleHQKICAgICAuZ2xvYmwgc2NoZWRfZ2V0cGFyYW0KICAgICAuYWxpZ24gNApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc2NoZWRfZ2V0c2NoZWR1bGVyLlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zY2hlZF9nZXRzY2hlZHVsZXIuUwppbmRleCAzM2Q3ZjQ5Li44Y2JjMGY1IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zY2hlZF9nZXRzY2hlZHVsZXIuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zY2hlZF9nZXRzY2hlZHVsZXIuUwpAQCAtMSw1ICsxLDUgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAgICAgLnRleHQKICAgICAuZ2xvYmwgc2NoZWRfZ2V0c2NoZWR1bGVyCiAgICAgLmFsaWduIDQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3NjaGVkX3JyX2dldF9pbnRlcnZhbC5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc2NoZWRfcnJfZ2V0X2ludGVydmFsLlMKaW5kZXggZTYzNGVkMC4uM2UwMTBkYiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc2NoZWRfcnJfZ2V0X2ludGVydmFsLlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc2NoZWRfcnJfZ2V0X2ludGVydmFsLlMKQEAgLTEsNSArMSw1IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCi0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogICAgIC50ZXh0CiAgICAgLmdsb2JsIHNjaGVkX3JyX2dldF9pbnRlcnZhbAogICAgIC5hbGlnbiA0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zY2hlZF9zZXRhZmZpbml0eS5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc2NoZWRfc2V0YWZmaW5pdHkuUwppbmRleCBhZWZjMjQwLi43OTEwZGM3IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zY2hlZF9zZXRhZmZpbml0eS5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3NjaGVkX3NldGFmZmluaXR5LlMKQEAgLTEsNSArMSw1IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCi0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogICAgIC50ZXh0CiAgICAgLmdsb2JsIHNjaGVkX3NldGFmZmluaXR5CiAgICAgLmFsaWduIDQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3NjaGVkX3NldHBhcmFtLlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zY2hlZF9zZXRwYXJhbS5TCmluZGV4IDRkNjQ2YmQuLjA0YmRhNGYgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3NjaGVkX3NldHBhcmFtLlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc2NoZWRfc2V0cGFyYW0uUwpAQCAtMSw1ICsxLDUgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAgICAgLnRleHQKICAgICAuZ2xvYmwgc2NoZWRfc2V0cGFyYW0KICAgICAuYWxpZ24gNApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc2NoZWRfc2V0c2NoZWR1bGVyLlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zY2hlZF9zZXRzY2hlZHVsZXIuUwppbmRleCBhNzllMzljLi4wYzQyNzU5IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zY2hlZF9zZXRzY2hlZHVsZXIuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zY2hlZF9zZXRzY2hlZHVsZXIuUwpAQCAtMSw1ICsxLDUgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAgICAgLnRleHQKICAgICAuZ2xvYmwgc2NoZWRfc2V0c2NoZWR1bGVyCiAgICAgLmFsaWduIDQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3NjaGVkX3lpZWxkLlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zY2hlZF95aWVsZC5TCmluZGV4IGM3Yzk5ZGMuLjU4ZjQ3OTYgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3NjaGVkX3lpZWxkLlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc2NoZWRfeWllbGQuUwpAQCAtMSw1ICsxLDUgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAgICAgLnRleHQKICAgICAuZ2xvYmwgc2NoZWRfeWllbGQKICAgICAuYWxpZ24gNApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc2VsZWN0LlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zZWxlY3QuUwppbmRleCBjZTQxMTJmLi42ZjY0MzFhIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zZWxlY3QuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zZWxlY3QuUwpAQCAtMSw1ICsxLDUgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAgICAgLnRleHQKICAgICAuZ2xvYmwgc2VsZWN0CiAgICAgLmFsaWduIDQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3NlbmRmaWxlLlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zZW5kZmlsZS5TCmluZGV4IGM0YzE3NmUuLjE3OTgwMWYgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3NlbmRmaWxlLlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc2VuZGZpbGUuUwpAQCAtMSw1ICsxLDUgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAgICAgLnRleHQKICAgICAuZ2xvYmwgc2VuZGZpbGUKICAgICAuYWxpZ24gNApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc2VuZG1zZy5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc2VuZG1zZy5TCmluZGV4IDE5MTNmMTMuLjAzNDEyNDMgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3NlbmRtc2cuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zZW5kbXNnLlMKQEAgLTEsNSArMSw1IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCi0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogICAgIC50ZXh0CiAgICAgLmdsb2JsIHNlbmRtc2cKICAgICAuYWxpZ24gNApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc2VuZHRvLlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zZW5kdG8uUwppbmRleCBmMTc3NDNkLi5hZWE0M2UyIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zZW5kdG8uUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zZW5kdG8uUwpAQCAtMSw1ICsxLDUgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAgICAgLnRleHQKICAgICAuZ2xvYmwgc2VuZHRvCiAgICAgLmFsaWduIDQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3NldGdpZC5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc2V0Z2lkLlMKaW5kZXggODNkYmZlNS4uODFkZmJhNyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc2V0Z2lkLlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc2V0Z2lkLlMKQEAgLTEsNSArMSw1IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCi0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogICAgIC50ZXh0CiAgICAgLmdsb2JsIHNldGdpZAogICAgIC5hbGlnbiA0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zZXRncm91cHMuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3NldGdyb3Vwcy5TCmluZGV4IGVmOTMyN2QuLmQyZDY5ZWQgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3NldGdyb3Vwcy5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3NldGdyb3Vwcy5TCkBAIC0xLDUgKzEsNSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLwotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KICAgICAudGV4dAogICAgIC5nbG9ibCBzZXRncm91cHMKICAgICAuYWxpZ24gNApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc2V0aXRpbWVyLlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zZXRpdGltZXIuUwppbmRleCBiMDQyZTA3Li43ZTYzZDkxIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zZXRpdGltZXIuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zZXRpdGltZXIuUwpAQCAtMSw1ICsxLDUgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAgICAgLnRleHQKICAgICAuZ2xvYmwgc2V0aXRpbWVyCiAgICAgLmFsaWduIDQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3NldHBnaWQuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3NldHBnaWQuUwppbmRleCAyZGRjODI4Li4yYmMwYzRiIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zZXRwZ2lkLlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc2V0cGdpZC5TCkBAIC0xLDUgKzEsNSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLwotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KICAgICAudGV4dAogICAgIC5nbG9ibCBzZXRwZ2lkCiAgICAgLmFsaWduIDQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3NldHByaW9yaXR5LlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zZXRwcmlvcml0eS5TCmluZGV4IDAyNTUwZTkuLjk5NmI4ZTEgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3NldHByaW9yaXR5LlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc2V0cHJpb3JpdHkuUwpAQCAtMSw1ICsxLDUgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAgICAgLnRleHQKICAgICAuZ2xvYmwgc2V0cHJpb3JpdHkKICAgICAuYWxpZ24gNApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc2V0cmVnaWQuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3NldHJlZ2lkLlMKaW5kZXggNjE5YjNhMS4uZGVhNzIxOCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc2V0cmVnaWQuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zZXRyZWdpZC5TCkBAIC0xLDUgKzEsNSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLwotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KICAgICAudGV4dAogICAgIC5nbG9ibCBzZXRyZWdpZAogICAgIC5hbGlnbiA0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zZXRyZXNnaWQuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3NldHJlc2dpZC5TCmluZGV4IDNmZjk0YzcuLmE3OTMzODUgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3NldHJlc2dpZC5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3NldHJlc2dpZC5TCkBAIC0xLDUgKzEsNSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLwotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KICAgICAudGV4dAogICAgIC5nbG9ibCBzZXRyZXNnaWQKICAgICAuYWxpZ24gNApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc2V0cmxpbWl0LlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zZXRybGltaXQuUwppbmRleCAzZWMzN2M1Li5iM2Q5NGEwIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zZXRybGltaXQuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zZXRybGltaXQuUwpAQCAtMSw1ICsxLDUgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAgICAgLnRleHQKICAgICAuZ2xvYmwgc2V0cmxpbWl0CiAgICAgLmFsaWduIDQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3NldHNpZC5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc2V0c2lkLlMKaW5kZXggMmEwOTY2My4uZmMyNjNiNiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc2V0c2lkLlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc2V0c2lkLlMKQEAgLTEsNSArMSw1IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCi0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogICAgIC50ZXh0CiAgICAgLmdsb2JsIHNldHNpZAogICAgIC5hbGlnbiA0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zZXRzb2Nrb3B0LlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zZXRzb2Nrb3B0LlMKaW5kZXggZGM1ZTYyZi4uYTgyMzJhZSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc2V0c29ja29wdC5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3NldHNvY2tvcHQuUwpAQCAtMSw1ICsxLDUgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAgICAgLnRleHQKICAgICAuZ2xvYmwgc2V0c29ja29wdAogICAgIC5hbGlnbiA0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zZXR0aW1lb2ZkYXkuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3NldHRpbWVvZmRheS5TCmluZGV4IGY3YzAzZWEuLjdhNWE4OWUgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3NldHRpbWVvZmRheS5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3NldHRpbWVvZmRheS5TCkBAIC0xLDUgKzEsNSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLwotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KICAgICAudGV4dAogICAgIC5nbG9ibCBzZXR0aW1lb2ZkYXkKICAgICAuYWxpZ24gNApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc2V0eGF0dHIuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3NldHhhdHRyLlMKaW5kZXggYmFhNzhhNC4uMGIyYzA1MiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc2V0eGF0dHIuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zZXR4YXR0ci5TCkBAIC0xLDUgKzEsNSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLwotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KICAgICAudGV4dAogICAgIC5nbG9ibCBzZXR4YXR0cgogICAgIC5hbGlnbiA0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zaHV0ZG93bi5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc2h1dGRvd24uUwppbmRleCBiODBkOTliLi41NDVjOGY3IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zaHV0ZG93bi5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3NodXRkb3duLlMKQEAgLTEsNSArMSw1IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCi0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogICAgIC50ZXh0CiAgICAgLmdsb2JsIHNodXRkb3duCiAgICAgLmFsaWduIDQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3NpZ2FjdGlvbi5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc2lnYWN0aW9uLlMKaW5kZXggNzAwZGE1NC4uMzA2YmMyYiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc2lnYWN0aW9uLlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc2lnYWN0aW9uLlMKQEAgLTEsNSArMSw1IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCi0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogICAgIC50ZXh0CiAgICAgLmdsb2JsIHNpZ2FjdGlvbgogICAgIC5hbGlnbiA0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zaWdhbHRzdGFjay5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc2lnYWx0c3RhY2suUwppbmRleCBkMmE0YTlhLi5iZDc0NDI4IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zaWdhbHRzdGFjay5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3NpZ2FsdHN0YWNrLlMKQEAgLTEsNSArMSw1IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCi0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogICAgIC50ZXh0CiAgICAgLmdsb2JsIHNpZ2FsdHN0YWNrCiAgICAgLmFsaWduIDQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3NpZ25hbGZkNC5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc2lnbmFsZmQ0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDAzOTc3OAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3NpZ25hbGZkNC5TCkBAIC0wLDAgKzEsMjIgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CisgICAgLnRleHQKKyAgICAuZ2xvYmwgc2lnbmFsZmQ0CisgICAgLmFsaWduIDQKKyAgICAuZW50IHNpZ25hbGZkNAorCitzaWduYWxmZDQ6CisgICAgLnNldCBub3Jlb3JkZXIKKyAgICAuY3Bsb2FkICR0OQorICAgIGxpICR2MCwgX19OUl9zaWduYWxmZDQKKyAgICBzeXNjYWxsCisgICAgYm5leiAkYTMsIDFmCisgICAgbW92ZSAkYTAsICR2MAorICAgIGogJHJhCisgICAgbm9wCisxOgorICAgIGxhICR0OSxfX3NldF9lcnJubworICAgIGogJHQ5CisgICAgbm9wCisgICAgLnNldCByZW9yZGVyCisgICAgLmVuZCBzaWduYWxmZDQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3NpZ3BlbmRpbmcuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3NpZ3BlbmRpbmcuUwppbmRleCA2OGRmNGRiLi40NWJhYTRmIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zaWdwZW5kaW5nLlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc2lncGVuZGluZy5TCkBAIC0xLDUgKzEsNSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLwotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KICAgICAudGV4dAogICAgIC5nbG9ibCBzaWdwZW5kaW5nCiAgICAgLmFsaWduIDQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3NpZ3Byb2NtYXNrLlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zaWdwcm9jbWFzay5TCmluZGV4IDE3YzAxY2IuLmE0MDQ5YmIgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3NpZ3Byb2NtYXNrLlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc2lncHJvY21hc2suUwpAQCAtMSw1ICsxLDUgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAgICAgLnRleHQKICAgICAuZ2xvYmwgc2lncHJvY21hc2sKICAgICAuYWxpZ24gNApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc29ja2V0LlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zb2NrZXQuUwppbmRleCBlN2Q0M2Y5Li4zNDIzYmI3IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zb2NrZXQuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zb2NrZXQuUwpAQCAtMSw1ICsxLDUgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAgICAgLnRleHQKICAgICAuZ2xvYmwgc29ja2V0CiAgICAgLmFsaWduIDQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3NvY2tldHBhaXIuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3NvY2tldHBhaXIuUwppbmRleCA5N2M2N2FmLi5mZDJiMmUxIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zb2NrZXRwYWlyLlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc29ja2V0cGFpci5TCkBAIC0xLDUgKzEsNSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLwotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KICAgICAudGV4dAogICAgIC5nbG9ibCBzb2NrZXRwYWlyCiAgICAgLmFsaWduIDQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3N0YXQuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3N0YXQuUwppbmRleCBhZWM5MTBkLi45YTEyYmE4IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zdGF0LlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc3RhdC5TCkBAIC0xLDUgKzEsNSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLwotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KICAgICAudGV4dAogICAgIC5nbG9ibCBzdGF0CiAgICAgLmFsaWduIDQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3N3YXBvZmYuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3N3YXBvZmYuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZjIwNGM5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc3dhcG9mZi5TCkBAIC0wLDAgKzEsMjIgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CisgICAgLnRleHQKKyAgICAuZ2xvYmwgc3dhcG9mZgorICAgIC5hbGlnbiA0CisgICAgLmVudCBzd2Fwb2ZmCisKK3N3YXBvZmY6CisgICAgLnNldCBub3Jlb3JkZXIKKyAgICAuY3Bsb2FkICR0OQorICAgIGxpICR2MCwgX19OUl9zd2Fwb2ZmCisgICAgc3lzY2FsbAorICAgIGJuZXogJGEzLCAxZgorICAgIG1vdmUgJGEwLCAkdjAKKyAgICBqICRyYQorICAgIG5vcAorMToKKyAgICBsYSAkdDksX19zZXRfZXJybm8KKyAgICBqICR0OQorICAgIG5vcAorICAgIC5zZXQgcmVvcmRlcgorICAgIC5lbmQgc3dhcG9mZgpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc3dhcG9uLlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zd2Fwb24uUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZjNkZGE2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc3dhcG9uLlMKQEAgLTAsMCArMSwyMiBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KKyAgICAudGV4dAorICAgIC5nbG9ibCBzd2Fwb24KKyAgICAuYWxpZ24gNAorICAgIC5lbnQgc3dhcG9uCisKK3N3YXBvbjoKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIC5jcGxvYWQgJHQ5CisgICAgbGkgJHYwLCBfX05SX3N3YXBvbgorICAgIHN5c2NhbGwKKyAgICBibmV6ICRhMywgMWYKKyAgICBtb3ZlICRhMCwgJHYwCisgICAgaiAkcmEKKyAgICBub3AKKzE6CisgICAgbGEgJHQ5LF9fc2V0X2Vycm5vCisgICAgaiAkdDkKKyAgICBub3AKKyAgICAuc2V0IHJlb3JkZXIKKyAgICAuZW5kIHN3YXBvbgpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc3ltbGluay5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc3ltbGluay5TCmluZGV4IGY4MWM2ZGQuLmI3NGI1NDUgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3N5bWxpbmsuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zeW1saW5rLlMKQEAgLTEsNSArMSw1IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCi0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogICAgIC50ZXh0CiAgICAgLmdsb2JsIHN5bWxpbmsKICAgICAuYWxpZ24gNApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc3luYy5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc3luYy5TCmluZGV4IGExMjI4NzMuLjFhOWY5ODEgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3N5bmMuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zeW5jLlMKQEAgLTEsNSArMSw1IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCi0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogICAgIC50ZXh0CiAgICAgLmdsb2JsIHN5bmMKICAgICAuYWxpZ24gNApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc3lzY2FsbC5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc3lzY2FsbC5TCmluZGV4IDIxOTJiZDUuLjE3YjA4MzUgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3N5c2NhbGwuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zeXNjYWxsLlMKQEAgLTEsNSArMSw1IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCi0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogICAgIC50ZXh0CiAgICAgLmdsb2JsIHN5c2NhbGwKICAgICAuYWxpZ24gNApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc3lzaW5mby5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvc3lzaW5mby5TCmluZGV4IDQ1NzdhZjkuLmJhMGIxMjEgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3N5c2luZm8uUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy9zeXNpbmZvLlMKQEAgLTEsNSArMSw1IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCi0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogICAgIC50ZXh0CiAgICAgLmdsb2JsIHN5c2luZm8KICAgICAuYWxpZ24gNApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvdGdraWxsLlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy90Z2tpbGwuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjliYTc5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvdGdraWxsLlMKQEAgLTAsMCArMSwyMiBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KKyAgICAudGV4dAorICAgIC5nbG9ibCB0Z2tpbGwKKyAgICAuYWxpZ24gNAorICAgIC5lbnQgdGdraWxsCisKK3Rna2lsbDoKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIC5jcGxvYWQgJHQ5CisgICAgbGkgJHYwLCBfX05SX3Rna2lsbAorICAgIHN5c2NhbGwKKyAgICBibmV6ICRhMywgMWYKKyAgICBtb3ZlICRhMCwgJHYwCisgICAgaiAkcmEKKyAgICBub3AKKzE6CisgICAgbGEgJHQ5LF9fc2V0X2Vycm5vCisgICAgaiAkdDkKKyAgICBub3AKKyAgICAuc2V0IHJlb3JkZXIKKyAgICAuZW5kIHRna2lsbApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvdGltZXJmZF9jcmVhdGUuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3RpbWVyZmRfY3JlYXRlLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjVhYzAwMwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3RpbWVyZmRfY3JlYXRlLlMKQEAgLTAsMCArMSwyMiBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KKyAgICAudGV4dAorICAgIC5nbG9ibCB0aW1lcmZkX2NyZWF0ZQorICAgIC5hbGlnbiA0CisgICAgLmVudCB0aW1lcmZkX2NyZWF0ZQorCit0aW1lcmZkX2NyZWF0ZToKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIC5jcGxvYWQgJHQ5CisgICAgbGkgJHYwLCBfX05SX3RpbWVyZmRfY3JlYXRlCisgICAgc3lzY2FsbAorICAgIGJuZXogJGEzLCAxZgorICAgIG1vdmUgJGEwLCAkdjAKKyAgICBqICRyYQorICAgIG5vcAorMToKKyAgICBsYSAkdDksX19zZXRfZXJybm8KKyAgICBqICR0OQorICAgIG5vcAorICAgIC5zZXQgcmVvcmRlcgorICAgIC5lbmQgdGltZXJmZF9jcmVhdGUKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3RpbWVyZmRfZ2V0dGltZS5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvdGltZXJmZF9nZXR0aW1lLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjFjMjFmZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3RpbWVyZmRfZ2V0dGltZS5TCkBAIC0wLDAgKzEsMjIgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CisgICAgLnRleHQKKyAgICAuZ2xvYmwgdGltZXJmZF9nZXR0aW1lCisgICAgLmFsaWduIDQKKyAgICAuZW50IHRpbWVyZmRfZ2V0dGltZQorCit0aW1lcmZkX2dldHRpbWU6CisgICAgLnNldCBub3Jlb3JkZXIKKyAgICAuY3Bsb2FkICR0OQorICAgIGxpICR2MCwgX19OUl90aW1lcmZkX2dldHRpbWUKKyAgICBzeXNjYWxsCisgICAgYm5leiAkYTMsIDFmCisgICAgbW92ZSAkYTAsICR2MAorICAgIGogJHJhCisgICAgbm9wCisxOgorICAgIGxhICR0OSxfX3NldF9lcnJubworICAgIGogJHQ5CisgICAgbm9wCisgICAgLnNldCByZW9yZGVyCisgICAgLmVuZCB0aW1lcmZkX2dldHRpbWUKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3RpbWVyZmRfc2V0dGltZS5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvdGltZXJmZF9zZXR0aW1lLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjY4ODE5ZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3RpbWVyZmRfc2V0dGltZS5TCkBAIC0wLDAgKzEsMjIgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CisgICAgLnRleHQKKyAgICAuZ2xvYmwgdGltZXJmZF9zZXR0aW1lCisgICAgLmFsaWduIDQKKyAgICAuZW50IHRpbWVyZmRfc2V0dGltZQorCit0aW1lcmZkX3NldHRpbWU6CisgICAgLnNldCBub3Jlb3JkZXIKKyAgICAuY3Bsb2FkICR0OQorICAgIGxpICR2MCwgX19OUl90aW1lcmZkX3NldHRpbWUKKyAgICBzeXNjYWxsCisgICAgYm5leiAkYTMsIDFmCisgICAgbW92ZSAkYTAsICR2MAorICAgIGogJHJhCisgICAgbm9wCisxOgorICAgIGxhICR0OSxfX3NldF9lcnJubworICAgIGogJHQ5CisgICAgbm9wCisgICAgLnNldCByZW9yZGVyCisgICAgLmVuZCB0aW1lcmZkX3NldHRpbWUKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3RpbWVzLlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy90aW1lcy5TCmluZGV4IDNlODk1MGQuLmU1M2NkYjAgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3RpbWVzLlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvdGltZXMuUwpAQCAtMSw1ICsxLDUgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAgICAgLnRleHQKICAgICAuZ2xvYmwgdGltZXMKICAgICAuYWxpZ24gNApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvdGtpbGwuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3RraWxsLlMKaW5kZXggMzAzN2JhYS4uZjE0MzljYyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvdGtpbGwuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy90a2lsbC5TCkBAIC0xLDUgKzEsNSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLwotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KICAgICAudGV4dAogICAgIC5nbG9ibCB0a2lsbAogICAgIC5hbGlnbiA0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy90cnVuY2F0ZS5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvdHJ1bmNhdGUuUwppbmRleCA0YThmMTJjLi5iMTZkZjgxIDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy90cnVuY2F0ZS5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3RydW5jYXRlLlMKQEAgLTEsNSArMSw1IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCi0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogICAgIC50ZXh0CiAgICAgLmdsb2JsIHRydW5jYXRlCiAgICAgLmFsaWduIDQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3VtYXNrLlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy91bWFzay5TCmluZGV4IGVlZTkxMWUuLmI5NTJlNjkgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3VtYXNrLlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvdW1hc2suUwpAQCAtMSw1ICsxLDUgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAgICAgLnRleHQKICAgICAuZ2xvYmwgdW1hc2sKICAgICAuYWxpZ24gNApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvdW1vdW50Mi5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvdW1vdW50Mi5TCmluZGV4IGM2ZDlkZjYuLjFlNWEwYmIgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3Vtb3VudDIuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy91bW91bnQyLlMKQEAgLTEsNSArMSw1IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCi0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogICAgIC50ZXh0CiAgICAgLmdsb2JsIHVtb3VudDIKICAgICAuYWxpZ24gNApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvdW5hbWUuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3VuYW1lLlMKaW5kZXggN2U0Zjc4MC4uN2JkYTZiOCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvdW5hbWUuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy91bmFtZS5TCkBAIC0xLDUgKzEsNSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLwotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KICAgICAudGV4dAogICAgIC5nbG9ibCB1bmFtZQogICAgIC5hbGlnbiA0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy91bmxpbmsuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3VubGluay5TCmluZGV4IGZkOGRhZDkuLmUwOGJiM2UgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3VubGluay5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3VubGluay5TCkBAIC0xLDUgKzEsNSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLwotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KICAgICAudGV4dAogICAgIC5nbG9ibCB1bmxpbmsKICAgICAuYWxpZ24gNApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvdW5saW5rYXQuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3VubGlua2F0LlMKaW5kZXggNzkzYWI1ZS4uMGUwOWRiMSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvdW5saW5rYXQuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy91bmxpbmthdC5TCkBAIC0xLDUgKzEsNSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLwotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KICAgICAudGV4dAogICAgIC5nbG9ibCB1bmxpbmthdAogICAgIC5hbGlnbiA0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy91bnNoYXJlLlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy91bnNoYXJlLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzViYjZkNgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3Vuc2hhcmUuUwpAQCAtMCwwICsxLDIyIEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgorICAgIC50ZXh0CisgICAgLmdsb2JsIHVuc2hhcmUKKyAgICAuYWxpZ24gNAorICAgIC5lbnQgdW5zaGFyZQorCit1bnNoYXJlOgorICAgIC5zZXQgbm9yZW9yZGVyCisgICAgLmNwbG9hZCAkdDkKKyAgICBsaSAkdjAsIF9fTlJfdW5zaGFyZQorICAgIHN5c2NhbGwKKyAgICBibmV6ICRhMywgMWYKKyAgICBtb3ZlICRhMCwgJHYwCisgICAgaiAkcmEKKyAgICBub3AKKzE6CisgICAgbGEgJHQ5LF9fc2V0X2Vycm5vCisgICAgaiAkdDkKKyAgICBub3AKKyAgICAuc2V0IHJlb3JkZXIKKyAgICAuZW5kIHVuc2hhcmUKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3V0aW1lbnNhdC5TIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvdXRpbWVuc2F0LlMKaW5kZXggNDM1YzQ5ZS4uMGQwMGNmMiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvdXRpbWVuc2F0LlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvdXRpbWVuc2F0LlMKQEAgLTEsNSArMSw1IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCi0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogICAgIC50ZXh0CiAgICAgLmdsb2JsIHV0aW1lbnNhdAogICAgIC5hbGlnbiA0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy91dGltZXMuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3V0aW1lcy5TCmluZGV4IDhjZTFlNDQuLjg1YTU0NDMgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3V0aW1lcy5TCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3V0aW1lcy5TCkBAIC0xLDUgKzEsNSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLwotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KICAgICAudGV4dAogICAgIC5nbG9ibCB1dGltZXMKICAgICAuYWxpZ24gNApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvd2FpdDQuUyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3dhaXQ0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzY4YjVkNQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3dhaXQ0LlMKQEAgLTAsMCArMSwyMiBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KKyAgICAudGV4dAorICAgIC5nbG9ibCB3YWl0NAorICAgIC5hbGlnbiA0CisgICAgLmVudCB3YWl0NAorCit3YWl0NDoKKyAgICAuc2V0IG5vcmVvcmRlcgorICAgIC5jcGxvYWQgJHQ5CisgICAgbGkgJHYwLCBfX05SX3dhaXQ0CisgICAgc3lzY2FsbAorICAgIGJuZXogJGEzLCAxZgorICAgIG1vdmUgJGEwLCAkdjAKKyAgICBqICRyYQorICAgIG5vcAorMToKKyAgICBsYSAkdDksX19zZXRfZXJybm8KKyAgICBqICR0OQorICAgIG5vcAorICAgIC5zZXQgcmVvcmRlcgorICAgIC5lbmQgd2FpdDQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3dyaXRlLlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy93cml0ZS5TCmluZGV4IGE3NzJhY2UuLmVkY2YzNTYgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC1taXBzL3N5c2NhbGxzL3dyaXRlLlMKKysrIGIvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvd3JpdGUuUwpAQCAtMSw1ICsxLDUgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAgICAgLnRleHQKICAgICAuZ2xvYmwgd3JpdGUKICAgICAuYWxpZ24gNApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLW1pcHMvc3lzY2FsbHMvd3JpdGV2LlMgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy93cml0ZXYuUwppbmRleCBiZGFjYjQyLi40OGMwYTY5IDEwMDY0NAotLS0gYS9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy93cml0ZXYuUworKysgYi9saWJjL2FyY2gtbWlwcy9zeXNjYWxscy93cml0ZXYuUwpAQCAtMSw1ICsxLDUgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAgICAgLnRleHQKICAgICAuZ2xvYmwgd3JpdGV2CiAgICAgLmFsaWduIDQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1zaC9zeXNjYWxscy9wZXJzb25hbGl0eS5TIGIvbGliYy9hcmNoLXNoL3N5c2NhbGxzL3BlcnNvbmFsaXR5LlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVmYzJlYTMuLjAwMDAwMDAKLS0tIGEvbGliYy9hcmNoLXNoL3N5c2NhbGxzL3BlcnNvbmFsaXR5LlMKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi0vKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCi0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+Ci0KLSAgICAudGV4dAotICAgIC50eXBlIHBlcnNvbmFsaXR5LCBAZnVuY3Rpb24KLSAgICAuZ2xvYmwgcGVyc29uYWxpdHkKLSAgICAuYWxpZ24gNAotCi1wZXJzb25hbGl0eToKLQotICAgIC8qIGludm9rZSB0cmFwICovCi0gICAgbW92LmwgICAwZiwgcjMgIC8qIHRyYXAgbnVtICovCi0gICAgdHJhcGEgICAjKDEgKyAweDEwKQotCi0gICAgLyogY2hlY2sgcmV0dXJuIHZhbHVlICovCi0gICAgY21wL3B6ICByMAotICAgIGJ0ICAgICAgX19OUl9wZXJzb25hbGl0eV9lbmQKLQotICAgIC8qIGtlZXAgZXJyb3IgbnVtYmVyICovCi0gICAgc3RzLmwgICBwciwgQC1yMTUKLSAgICBtb3YubCAgIDFmLCByMQotICAgIGpzciAgICAgQHIxCi0gICAgbW92ICAgICByMCwgcjQKLSAgICBsZHMubCAgIEByMTUrLCBwcgotCi1fX05SX3BlcnNvbmFsaXR5X2VuZDoKLSAgICBydHMKLSAgICBub3AKLQotICAgIC5hbGlnbiAgMgotMDogIC5sb25nICAgX19OUl9wZXJzb25hbGl0eQotMTogIC5sb25nICAgX19zZXRfc3lzY2FsbF9lcnJubwpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9iaW9uaWMvX19nZXRfc3AuUyBiL2xpYmMvYXJjaC14ODYvYmlvbmljL19fZ2V0X3NwLlMKaW5kZXggYWVhYWE2Ni4uMDczOWQ3OSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9iaW9uaWMvX19nZXRfc3AuUworKysgYi9saWJjL2FyY2gteDg2L2Jpb25pYy9fX2dldF9zcC5TCkBAIC0yNSwxMSArMjUsMTAgQEAKICAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgogICogU1VDSCBEQU1BR0UuCiAgKi8KLSAgICAudGV4dAotICAgIC50eXBlIF9fZ2V0X3NwLCBAZnVuY3Rpb24KLSAgICAuZ2xvYmFsIF9fZ2V0X3NwCi0gICAgLmFsaWduIDQKIAotX19nZXRfc3A6Ci0gICAgbW92ICAlZXNwLCAlZWF4Ci0gICAgcmV0CisjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KKworRU5UUlkoX19nZXRfc3ApCisgIG1vdiAgJWVzcCwgJWVheAorICByZXQKK0VORChfX2dldF9zcCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvYmlvbmljL19fZ2V0X3Rscy5jIGIvbGliYy9hcmNoLXg4Ni9iaW9uaWMvX19nZXRfdGxzLmMKb2xkIG1vZGUgMTAwNzU1Cm5ldyBtb2RlIDEwMDY0NApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9iaW9uaWMvX19zZXRfdGxzLmMgYi9saWJjL2FyY2gteDg2L2Jpb25pYy9fX3NldF90bHMuYwpvbGQgbW9kZSAxMDA3NTUKbmV3IG1vZGUgMTAwNjQ0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L2Jpb25pYy9fX3N0YWNrX2Noa19mYWlsX2xvY2FsLlMgYi9saWJjL2FyY2gteDg2L2Jpb25pYy9fX3N0YWNrX2Noa19mYWlsX2xvY2FsLlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU5ZmU4NmUuLjAwMDAwMDAKLS0tIGEvbGliYy9hcmNoLXg4Ni9iaW9uaWMvX19zdGFja19jaGtfZmFpbF9sb2NhbC5TCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqICAgIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKLSAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi0gKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCi0gKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAotICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCi0gKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKLSAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotLyoKLSAqIENvbnRyaWJ1dGVkIGJ5OiBJbnRlbCBDb3Jwb3JhdGlvbgotICovCi0KLQkudGV4dAotCS5wMmFsaWduIDQsLDE1Ci0JLmdsb2JsCV9fc3RhY2tfY2hrX2ZhaWxfbG9jYWwKLQkuaGlkZGVuCV9fc3RhY2tfY2hrX2ZhaWxfbG9jYWwKLQkudHlwZQlfX3N0YWNrX2Noa19mYWlsX2xvY2FsLCBAZnVuY3Rpb24KLQotX19zdGFja19jaGtfZmFpbF9sb2NhbDoKLSNpZmRlZiBfX1BJQ19fCi0JcHVzaGwJJWVieAotCWNhbGwJX194ODYuZ2V0X3BjX3RodW5rLmJ4Ci0JYWRkbAkkX0dMT0JBTF9PRkZTRVRfVEFCTEVfLCAlZWJ4Ci0JY2FsbAlfX3N0YWNrX2Noa19mYWlsQFBMVAotI2Vsc2UgLyogUElDICovCi0Jam1wICAgX19zdGFja19jaGtfZmFpbAotI2VuZGlmIC8qIG5vdCBQSUMgKi8KLQotCS5zaXplCV9fc3RhY2tfY2hrX2ZhaWxfbG9jYWwsIC4tX19zdGFja19jaGtfZmFpbF9sb2NhbApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9iaW9uaWMvX19zdGFja19jaGtfZmFpbF9sb2NhbC5oIGIvbGliYy9hcmNoLXg4Ni9iaW9uaWMvX19zdGFja19jaGtfZmFpbF9sb2NhbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmMzY5OWEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L2Jpb25pYy9fX3N0YWNrX2Noa19mYWlsX2xvY2FsLmgKQEAgLTAsMCArMSw2MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisKKy8qCisgICBfX3N0YWNrX2Noa19mYWlsIHJvdXRpbmUgaXMgcnVudGltZSBwYXJ0IG9mIHN0YWNrIHByb3RlY3RvciBjb21waWxlcgorICAgZmVhdHVyZS4gSXQncyBpbXBsZW1lbnRlZCBpbiBsaWJjIGFuZCByZXByZXNlbnRzIGRpZSByb3V0aW5lIHdoZW4gc3RhY2sKKyAgIGNvcnJ1cHRpb24gaXMgZGV0ZWN0ZWQuCisKKyAgIENhbGxzIGFyZSBnZW5lcmF0ZWQgYnkgY29tcGlsZXIgYW5kIGluamVjdGVkIGludG8gdXNlciBmdW5jdGlvbnMgd2hlbgorICAgLWZzdGFjay1wcm90ZWN0b3IqIG9wdGlvbnMgYXJlIHVzZWQuCisKKyAgIF9fc3RhY2tfY2hrX2ZhaWxfbG9jYWwgaXMgd3JhcHBlciBmb3IgX19zdGFja19jaGtfZmFpbC4gQ29tcGlsZXIgZ2VuZXJhdGVzCisgICB3cmFwcGVyIGNhbGxzIGluc3RlYWQgZm9yIFBJQyBjb2RlIG9ubHkgYW5kIG9ubHkgb24gSUEzMiBmb3Igb3B0aW1pemF0aW9uCisgICBwdXJwb3NlIChzZWUgZ2NjL2NvbmZpZy9pMzg2L2kzODYuYykuIFdyYXBwZXIgYm9keSBpcyBhbHdheXMgaW5jbHVkZWQgaW50bworICAgZXhlY3V0YWJsZSBvciBsaWJyYXJ5LiBUaGlzIGlzIHRoZSBpZGVhIG9mIG9wdGltaXphdGlvbi4KKworICAgR2xpYmMgaXMgZG9pbmcgdGhpcyB2aWEgbGliY19ub25zaGFyZWQuYSB3aGljaCBpcyBsaW5rZWQgYXV0b21hdGljYWxseQorICAgZXZlcnl0aW1lIHdpdGggbGliYy5zby4gSW4gYmlvbmljIHdlIGhhdmUgdG8gYnJpbmcgaXQgd2l0aGluIGNydGZpbGVzCisgICBiZWNhdXNlIGxpYmMuc28gaXMgcmVhbCBsaWJyYXJ5IGFuZCBub3QgYSBsaW5rIHNjcmlwdCBsaWtlIGxpYmMuc28gYXQgZ2xpYmMuCisKKyAgIEZvciB4ODZfNjQgb3Igbm9uLVBJQyBjb2RlIGNvbXBpbGVyIGFsd2F5cyBnZW5lcmF0ZXMgX19zdGFja19jaGtfZmFpbCBjYWxscy4KKyovCisKKyNpZmRlZiBfX2kzODZfXworI2lmZGVmIF9fUElDX18KK2V4dGVybiB2b2lkIF9fc3RhY2tfY2hrX2ZhaWwoKTsKKworX19hdHRyaWJ1dGVfXyAoKHZpc2liaWxpdHkgKCJoaWRkZW4iKSkpCit2b2lkIF9fc3RhY2tfY2hrX2ZhaWxfbG9jYWwoKQoreworICBfX3N0YWNrX2Noa19mYWlsKCk7Cit9CisjZW5kaWYKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9iaW9uaWMvX2V4aXRfd2l0aF9zdGFja190ZWFyZG93bi5TIGIvbGliYy9hcmNoLXg4Ni9iaW9uaWMvX2V4aXRfd2l0aF9zdGFja190ZWFyZG93bi5TCmluZGV4IDgzYTUwNGQuLmFhZDNmMGIgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvYmlvbmljL19leGl0X3dpdGhfc3RhY2tfdGVhcmRvd24uUworKysgYi9saWJjL2FyY2gteDg2L2Jpb25pYy9fZXhpdF93aXRoX3N0YWNrX3RlYXJkb3duLlMKQEAgLTEsMTUgKzEsOCBAQAotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgogCi0udGV4dAotLnR5cGUgX2V4aXRfd2l0aF9zdGFja190ZWFyZG93biwgQGZ1bmN0aW9uCi0uZ2xvYmwgX2V4aXRfd2l0aF9zdGFja190ZWFyZG93bgotLmFsaWduIDQKLQotLyoKLSAqIHZvaWQgX2V4aXRfd2l0aF9zdGFja190ZWFyZG93bih2b2lkICpzdGFja0Jhc2UsIGludCBzdGFja1NpemUsIGludCAqcmV0Q29kZSkgCi0gKi8KLQotX2V4aXRfd2l0aF9zdGFja190ZWFyZG93bjoKKy8vIHZvaWQgX2V4aXRfd2l0aF9zdGFja190ZWFyZG93bih2b2lkICpzdGFja0Jhc2UsIGludCBzdGFja1NpemUsIGludCAqcmV0Q29kZSkKK0VOVFJZKF9leGl0X3dpdGhfc3RhY2tfdGVhcmRvd24pCiAgICAgLyogd2UgY2FuIHRyYXNoICVlYnggaGVyZSBzaW5jZSB0aGlzIGNhbGwgc2hvdWxkIG5ldmVyIHJldHVybi4gKi8KICAgICAvKiBXZSBjYW4gYWxzbyB0YWtlIGFkdmFudGFnZSBvZiB0aGUgZmFjdCB0aGF0IHRoZSBsaW51eCBzeXNjYWxsIHRyYXAKICAgICAgKiBoYW5kbGVyIHNhdmVzIGFsbCB0aGUgcmVnaXN0ZXJzLCBzbyB3ZSBkb24ndCBuZWVkIGEgc3RhY2sgdG8ga2VlcApAQCAtMzIsMyArMjUsNCBAQAogICAgICAqIHRoYXQgcHJlc2VudGx5LCAnaGx0JyB3aWxsIGNhdXNlIHRoZSBwcm9ncmFtIHRvIHNlZ2ZhdWx0Li4gYnV0IHRoaXMKICAgICAgKiBzaG91bGQgbmV2ZXIgaGFwcGVuIDopICovCiAgICAgaGx0CitFTkQoX2V4aXRfd2l0aF9zdGFja190ZWFyZG93bikKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvYmlvbmljL19zZXRqbXAuUyBiL2xpYmMvYXJjaC14ODYvYmlvbmljL19zZXRqbXAuUwppbmRleCBhYzYyNjM1Li45MjIxMTM4IDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L2Jpb25pYy9fc2V0am1wLlMKKysrIGIvbGliYy9hcmNoLXg4Ni9iaW9uaWMvX3NldGptcC5TCkBAIC01NCw2ICs1NCw3IEBACiAJbW92bAklZWRpLDIwKCVlYXgpCiAJeG9ybAklZWF4LCVlYXgKIAlyZXQKK0VORChfc2V0am1wKQogCiBFTlRSWShfbG9uZ2ptcCkKIAltb3ZsCTQoJWVzcCksJWVkeApAQCAtNjksMyArNzAsNCBAQAogCWluY2wJJWVheAogMToJbW92bAklZWN4LDAoJWVzcCkKIAlyZXQKK0VORChfbG9uZ2ptcCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvYmlvbmljL2F0ZXhpdC5TIGIvbGliYy9hcmNoLXg4Ni9iaW9uaWMvYXRleGl0LlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIyOGY0MGIuLjAwMDAwMDAKLS0tIGEvbGliYy9hcmNoLXg4Ni9iaW9uaWMvYXRleGl0LlMKKysrIC9kZXYvbnVsbApAQCAtMSw2NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogICAgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUwotICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKLSAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCi0gKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKLSAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAotICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0gKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0JLnRleHQKLQkucDJhbGlnbiA0LCwxNQotCS5nbG9ibAlhdGV4aXQKLQkuaGlkZGVuCWF0ZXhpdAotCS50eXBlCWF0ZXhpdCwgQGZ1bmN0aW9uCi1hdGV4aXQ6Ci0JcHVzaGwJJWVicAotCW1vdmwJJWVzcCwgJWVicAotCXB1c2hsCSVlYngKLQljYWxsCV9feDg2LmdldF9wY190aHVuay5ieAotCWFkZGwJJF9HTE9CQUxfT0ZGU0VUX1RBQkxFXywgJWVieAotCXN1YmwJJDIwLCAlZXNwCi0JbW92bAkkMCwgNCglZXNwKQotCW1vdmwJX19kc29faGFuZGxlQEdPVE9GRiglZWJ4KSwgJWVheAotCW1vdmwJJWVheCwgOCglZXNwKQotCW1vdmwJOCglZWJwKSwgJWVheAotCW1vdmwJJWVheCwgKCVlc3ApCi0JY2FsbAlfX2N4YV9hdGV4aXRAUExUCi0JYWRkbAkkMjAsICVlc3AKLQlwb3BsCSVlYngKLQlwb3BsCSVlYnAKLQlyZXQKLQkuc2l6ZQlhdGV4aXQsIC4tYXRleGl0Ci0KLQkuc2VjdGlvbgkudGV4dC5fX3g4Ni5nZXRfcGNfdGh1bmsuYngsImF4RyIsQHByb2diaXRzLF9feDg2LmdldF9wY190aHVuay5ieCxjb21kYXQKLQkuZ2xvYmwJX194ODYuZ2V0X3BjX3RodW5rLmJ4Ci0JLmhpZGRlbglfX3g4Ni5nZXRfcGNfdGh1bmsuYngKLQkudHlwZQlfX3g4Ni5nZXRfcGNfdGh1bmsuYngsIEBmdW5jdGlvbgotX194ODYuZ2V0X3BjX3RodW5rLmJ4OgotCW5vcAotCW5vcAotCW5vcAotCW5vcAotCW5vcAotCW5vcAotCW5vcAotCW5vcAotCW1vdmwJKCVlc3ApLCAlZWJ4Ci0JcmV0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L2Jpb25pYy9hdGV4aXQuaCBiL2xpYmMvYXJjaC14ODYvYmlvbmljL2F0ZXhpdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjNzc2YTgKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L2Jpb25pYy9hdGV4aXQuaApAQCAtMCwwICsxLDM1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKK2V4dGVybiB2b2lkICpfX2Rzb19oYW5kbGU7CisKK19fYXR0cmlidXRlX18gKCh2aXNpYmlsaXR5ICgiaGlkZGVuIikpKQoraW50IGF0ZXhpdCh2b2lkICgqZnVuYykodm9pZCkpCit7CisgIHJldHVybiAoX19jeGFfYXRleGl0KCh2b2lkICgqKSh2b2lkICopKWZ1bmMsICh2b2lkICopMCwgJl9fZHNvX2hhbmRsZSkpOworfQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9iaW9uaWMvYXRvbWljc194ODYuUyBiL2xpYmMvYXJjaC14ODYvYmlvbmljL2F0b21pY3NfeDg2LlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU5OGEzOTEuLjAwMDAwMDAKLS0tIGEvbGliYy9hcmNoLXg4Ni9iaW9uaWMvYXRvbWljc194ODYuUworKysgL2Rldi9udWxsCkBAIC0xLDc1ICswLDAgQEAKLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KLQotI2RlZmluZSBGVVRFWF9XQUlUIDAKLSNkZWZpbmUgRlVURVhfV0FLRSAxCi0KLQotLyoKLSAqIGludCBfX2Z1dGV4X3dhaXQodm9sYXRpbGUgdm9pZCAqZnR4LCBpbnQgdmFsLCBjb25zdCBzdHJ1Y3QgdGltZXNwZWMgKnRpbWVvdXQpCi0gKi8KLS50ZXh0Ci0uZ2xvYmwgX19mdXRleF93YWl0Ci0udHlwZSBfX2Z1dGV4X3dhaXQsIEBmdW5jdGlvbgotLmFsaWduIDQKLV9fZnV0ZXhfd2FpdDoKLSAgICBwdXNobCAgICVlYngKLSAgICBwdXNobCAgICVlc2kKLSAgICBtb3YgICAgIDEyKCVlc3ApLCAlZWJ4ICAgICAgICAgICAvKiBmdHggKi8KLSAgICBtb3ZsICAgICRGVVRFWF9XQUlULCAlZWN4Ci0gICAgbW92ICAgICAxNiglZXNwKSwgJWVkeCAgICAgICAgICAgLyogdmFsICovCi0gICAgbW92ICAgICAyMCglZXNwKSwgJWVzaSAgICAgICAgICAgLyogdGltZW91dCAqLwotICAgIG1vdmwgICAgJF9fTlJfZnV0ZXgsICVlYXgKLSAgICBpbnQgICAgICQweDgwCi0gICAgcG9wbCAgICAlZXNpCi0gICAgcG9wbCAgICAlZWJ4Ci0gICAgcmV0Ci0KLQotLyogaW50IF9fZnV0ZXhfd2FrZSh2b2xhdGlsZSB2b2lkICpmdHgsIGludCBjb3VudCkgKi8KLQotLnRleHQKLS5nbG9ibCBfX2Z1dGV4X3dha2UKLS50eXBlIF9fZnV0ZXhfd2FrZSwgQGZ1bmN0aW9uCi0uYWxpZ24gNAotX19mdXRleF93YWtlOgotICAgIHB1c2hsICAgJWVieAotICAgIG1vdiAgICAgOCglZXNwKSwgJWVieCAgICAgICAgICAgIC8qIGZ0eCAqLwotICAgIG1vdmwgICAgJEZVVEVYX1dBS0UsICVlY3gKLSAgICBtb3YgICAgIDEyKCVlc3ApLCAlZWR4ICAgICAgICAgICAvKiBjb3VudCAqLwotICAgIG1vdmwgICAgJF9fTlJfZnV0ZXgsICVlYXgKLSAgICBpbnQgICAgICQweDgwCi0gICAgcG9wbCAgICAlZWJ4Ci0gICAgcmV0Ci0KLS8qIGludCBfX2Z1dGV4X3N5c2NhbGwzKHZvbGF0aWxlIHZvaWQgKmZ0eCwgaW50IG9wLCBpbnQgY291bnQpICovCi0udGV4dAotLmdsb2JsIF9fZnV0ZXhfc3lzY2FsbDMKLS50eXBlIF9fZnV0ZXhfc3lzY2FsbDMsIEBmdW5jdGlvbgotLmFsaWduIDQKLV9fZnV0ZXhfc3lzY2FsbDM6Ci0gICAgcHVzaGwgICAlZWJ4Ci0gICAgbW92bCAgICA4KCVlc3ApLCAlZWJ4ICAgICAgLyogZnR4ICovCi0gICAgbW92bCAgICAxMiglZXNwKSwgJWVjeCAgICAgIC8qIG9wICovCi0gICAgbW92bCAgICAxNiglZXNwKSwgJWVkeCAgICAgIC8qIHZhbHVlICovCi0gICAgbW92bCAgICAkX19OUl9mdXRleCwgJWVheAotICAgIGludCAgICAgJDB4ODAKLSAgICBwb3BsICAgICVlYngKLSAgICByZXQKLQotLyogaW50IF9fZnV0ZXhfc3lzY2FsbDQodm9sYXRpbGUgdm9pZCAqZnR4LCBpbnQgb3AsIGludCB2YWwsIGNvbnN0IHN0cnVjdCB0aW1lc3BlYyAqdGltZW91dCkgKi8KLS50ZXh0Ci0uZ2xvYmwgX19mdXRleF9zeXNjYWxsNAotLnR5cGUgX19mdXRleF9zeXNjYWxsNCwgQGZ1bmN0aW9uCi0uYWxpZ24gNAotX19mdXRleF9zeXNjYWxsNDoKLSAgICBwdXNobCAgICVlYngKLSAgICBwdXNobCAgICVlc2kKLSAgICBtb3ZsICAgIDEyKCVlc3ApLCAlZWJ4ICAgICAgLyogZnR4ICovCi0gICAgbW92bCAgICAxNiglZXNwKSwgJWVjeCAgICAgIC8qIG9wICovCi0gICAgbW92bCAgICAyMCglZXNwKSwgJWVkeCAgICAgIC8qIHZhbCAqLwotICAgIG1vdmwgICAgMjQoJWVzcCksICVlc2kgICAgICAvKiB0aW1lb3V0ICovCi0gICAgbW92bCAgICAkX19OUl9mdXRleCwgJWVheAotICAgIGludCAgICAgJDB4ODAKLSAgICBwb3BsICAgICVlc2kKLSAgICBwb3BsICAgICVlYngKLSAgICByZXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvYmlvbmljL2Nsb25lLlMgYi9saWJjL2FyY2gteDg2L2Jpb25pYy9jbG9uZS5TCmluZGV4IDM1MmQyM2MuLjQ1N2NiNGEgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvYmlvbmljL2Nsb25lLlMKKysrIGIvbGliYy9hcmNoLXg4Ni9iaW9uaWMvY2xvbmUuUwpAQCAtMSwxNSArMSw4IEBACi0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgorI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+CiAKLS50ZXh0Ci0KLS8qCi0gKiBpbnQgIF9fcHRocmVhZF9jbG9uZShpbnQgKCpmbikodm9pZCopLCB2b2lkICp0bHMsIGludCBmbGFncywKLSAqICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmFyZyk7Ci0gKi8KLS5nbG9ibCBfX3B0aHJlYWRfY2xvbmUKLS50eXBlIF9fcHRocmVhZF9jbG9uZSwgQGZ1bmN0aW9uCi0uYWxpZ24gNAotX19wdGhyZWFkX2Nsb25lOgorLy8gaW50ICBfX3B0aHJlYWRfY2xvbmUodm9pZCogKCpmbikodm9pZCopLCB2b2lkKiB0bHMsIGludCBmbGFncywgdm9pZCogYXJnKTsKK0VOVFJZKF9fcHRocmVhZF9jbG9uZSkKICAgICAgICAgcHVzaGwgICAlZWJ4CiAgICAgICAgIHB1c2hsICAgJWVjeAogICAgICAgICBtb3ZsICAgIDE2KCVlc3ApLCAlZWN4CkBAIC0yOCwzMiArMjEsOTUgQEAKIAogICAgICAgICBzdWJsICAgICQxNiwgJWVjeAogICAgICAgICBtb3ZsICAgIDIwKCVlc3ApLCAlZWJ4CisKKyAgICAgICAgIyBtYWtlIHN5c3RlbSBjYWxsCiAgICAgICAgIG1vdmwgICAgJF9fTlJfY2xvbmUsICVlYXgKICAgICAgICAgaW50ICAgICAkMHg4MAotICAgICAgICB0ZXN0ICAgICVlYXgsICVlYXgKLSAgICAgICAgam5zICAgICAxZgogCi0gICAgICAgICMgYW4gZXJyb3Igb2NjdXJlZCwgc2V0IGVycm5vIGFuZCByZXR1cm4gLTEKKyAgICAgICAgY21wbCAgICAkMCwgJWVheAorICAgICAgICBqZSAgICAgIHBjX2NoaWxkCisgICAgICAgIGpnICAgICAgcGNfcGFyZW50CisKKyAgICAgICAgIyBhbiBlcnJvciBvY2N1cnJlZCwgc2V0IGVycm5vIGFuZCByZXR1cm4gLTEKICAgICAgICAgbmVnbCAgICAlZWF4CisgICAgICAgIHB1c2hsICAgJWVheAogICAgICAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgICAgIGFkZGwgICAgJDQsICVlc3AKICAgICAgICAgb3JsICAgICAkLTEsICVlYXgKLSAgICAgICAgam1wICAgICAyZgorICAgICAgICBqbXAgICAgIHBjX3JldHVybgogCi0xOgotICAgICAgICBqbnogICAgIDJmCi0KK3BjX2NoaWxkOgogICAgICAgICAjIHdlJ3JlIGluIHRoZSBjaGlsZCB0aHJlYWQgbm93LCBjYWxsIF9fdGhyZWFkX2VudHJ5CiAgICAgICAgICMgd2l0aCB0aGUgYXBwcm9wcmlhdGUgYXJndW1lbnRzIG9uIHRoZSBjaGlsZCBzdGFjawogICAgICAgICAjIHdlIGFscmVhZHkgcGxhY2VkIG1vc3Qgb2YgdGhlbQogICAgICAgICBjYWxsICAgIF9fdGhyZWFkX2VudHJ5CiAgICAgICAgIGhsdAogCi0yOgorcGNfcGFyZW50OgorICAgICAgICAjIHdlJ3JlIHRoZSBwYXJlbnQ7IG5vdGhpbmcgdG8gZG8uCitwY19yZXR1cm46CiAgICAgICAgIHBvcGwgICAgJWVjeAogICAgICAgICBwb3BsICAgICVlYngKICAgICAgICAgcmV0CitFTkQoX19wdGhyZWFkX2Nsb25lKQogCi0vKiBYWFg6IFRPRE86IEFkZCBfX2Jpb25pY19jbG9uZSBoZXJlCi0gKiAgICAgICAgICAgIFNlZSBiaW9uaWMvYmlvbmljX2Nsb25lLmMgYW5kIGFyY2gtYXJtL2Jpb25pYy9jbG9uZS5TCi0gKiAgICAgICAgICAgIGZvciBtb3JlIGRldGFpbHMuLi4KKworLyoKKyAqIGludCAgX19iaW9uaWNfY2xvbmUodW5zaWduZWQgbG9uZyBjbG9uZV9mbGFncywKKyAqICAgICAgICAgICAgICAgICAgICAgdm9pZCogICAgICAgICBuZXdzcCwKKyAqICAgICAgICAgICAgICAgICAgICAgaW50ICAgICAgICAgICAqcGFyZW50X3RpZHB0ciwKKyAqICAgICAgICAgICAgICAgICAgICAgdm9pZCAgICAgICAgICAqbmV3X3RscywKKyAqICAgICAgICAgICAgICAgICAgICAgaW50ICAgICAgICAgICAqY2hpbGRfdGlkcHRyLAorICogICAgICAgICAgICAgICAgICAgICBpbnQgICAgICAgICAgICgqZm4pKHZvaWQgKiksCisgKiAgICAgICAgICAgICAgICAgICAgIHZvaWQgICAgICAgICAgKmFyZyk7CiAgKi8KK0VOVFJZKF9fYmlvbmljX2Nsb25lKQorICAgICAgICBwdXNobCAgICVlYngKKyAgICAgICAgcHVzaGwgICAlZXNpCisgICAgICAgIHB1c2hsICAgJWVkaQorCisgICAgICAgICMgaW5zZXJ0IGFyZ3VtZW50cyBvbnRvIHRoZSBjaGlsZCBzdGFjaworICAgICAgICBtb3ZsICAgIDIwKCVlc3ApLCAlZWN4CisgICAgICAgIGFuZGwgICAgJH4xNSwgJWVjeAorICAgICAgICBtb3ZsICAgIDM2KCVlc3ApLCAlZWF4CisgICAgICAgIG1vdmwgICAgJWVheCwgLTE2KCVlY3gpCisgICAgICAgIG1vdmwgICAgNDAoJWVzcCksICVlYXgKKyAgICAgICAgbW92bCAgICAlZWF4LCAtMTIoJWVjeCkKKworICAgICAgICBzdWJsICAgICQxNiwgJWVjeAorICAgICAgICBtb3ZsICAgIDE2KCVlc3ApLCAlZWJ4CisgICAgICAgIG1vdmwgICAgMjQoJWVzcCksICVlZHgKKyAgICAgICAgbW92bCAgICAzMiglZXNwKSwgJWVzaQorICAgICAgICBtb3ZsICAgIDI4KCVlc3ApLCAlZWRpCisKKyAgICAgICAgIyBtYWtlIHN5c3RlbSBjYWxsCisgICAgICAgIG1vdmwgICAgJF9fTlJfY2xvbmUsICVlYXgKKyAgICAgICAgaW50ICAgICAkMHg4MAorCisgICAgICAgIGNtcGwgICAgJDAsICVlYXgKKyAgICAgICAgamUgICAgICBiY19jaGlsZAorICAgICAgICBqZyAgICAgIGJjX3BhcmVudAorCisgICAgICAgICMgYW4gZXJyb3Igb2NjdXJyZWQsIHNldCBlcnJubyBhbmQgcmV0dXJuIC0xCisgICAgICAgIG5lZ2wgICAgJWVheAorICAgICAgICBwdXNobCAgICVlYXgKKyAgICAgICAgY2FsbCAgICBfX3NldF9lcnJubworICAgICAgICBhZGRsICAgICQ0LCAlZXNwCisgICAgICAgIG9ybCAgICAgJC0xLCAlZWF4CisgICAgICAgIGptcCAgICAgYmNfcmV0dXJuCisKK2JjX2NoaWxkOgorICAgICAgICAjIHdlJ3JlIGluIHRoZSBjaGlsZCBub3csIGNhbGwgX19iaW9uaWNfY2xvbmVfZW50cnkKKyAgICAgICAgIyB3aXRoIHRoZSBhcHByb3ByaWF0ZSBhcmd1bWVudHMgb24gdGhlIGNoaWxkIHN0YWNrCisgICAgICAgICMgd2UgYWxyZWFkeSBwbGFjZWQgbW9zdCBvZiB0aGVtCisgICAgICAgIGNhbGwgICAgX19iaW9uaWNfY2xvbmVfZW50cnkKKyAgICAgICAgaGx0CisKK2JjX3BhcmVudDoKKyAgICAgICAgIyB3ZSdyZSB0aGUgcGFyZW50OyBub3RoaW5nIHRvIGRvLgorYmNfcmV0dXJuOgorICAgICAgICBwb3BsICAgICVlZGkKKyAgICAgICAgcG9wbCAgICAlZXNpCisgICAgICAgIHBvcGwgICAgJWVieAorICAgICAgICByZXQKK0VORChfX2Jpb25pY19jbG9uZSkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvYmlvbmljL2NydGJlZ2luLmMgYi9saWJjL2FyY2gteDg2L2Jpb25pYy9jcnRiZWdpbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzZTkzMDYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L2Jpb25pYy9jcnRiZWdpbi5jCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgIi4uLy4uL2Jpb25pYy9saWJjX2luaXRfY29tbW9uLmgiCisjaW5jbHVkZSA8c3RkZGVmLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisKK19fYXR0cmlidXRlX18gKChzZWN0aW9uICgiLnByZWluaXRfYXJyYXkiKSkpCit2b2lkICgqX19QUkVJTklUX0FSUkFZX18pKHZvaWQpID0gKHZvaWQgKCopKHZvaWQpKSAtMTsKKworX19hdHRyaWJ1dGVfXyAoKHNlY3Rpb24gKCIuaW5pdF9hcnJheSIpKSkKK3ZvaWQgKCpfX0lOSVRfQVJSQVlfXykodm9pZCkgPSAodm9pZCAoKikodm9pZCkpIC0xOworCitfX2F0dHJpYnV0ZV9fICgoc2VjdGlvbiAoIi5maW5pX2FycmF5IikpKQordm9pZCAoKl9fRklOSV9BUlJBWV9fKSh2b2lkKSA9ICh2b2lkICgqKSh2b2lkKSkgLTE7CisKK19fTElCQ19ISURERU5fXworX19hdHRyaWJ1dGVfXygoZm9yY2VfYWxpZ25fYXJnX3BvaW50ZXIpKQordm9pZCBfc3RhcnQoKSB7CisgIHN0cnVjdG9yc19hcnJheV90IGFycmF5OworICBhcnJheS5wcmVpbml0X2FycmF5ID0gJl9fUFJFSU5JVF9BUlJBWV9fOworICBhcnJheS5pbml0X2FycmF5ID0gJl9fSU5JVF9BUlJBWV9fOworICBhcnJheS5maW5pX2FycmF5ID0gJl9fRklOSV9BUlJBWV9fOworCisgIHZvaWQqIHJhd19hcmdzID0gKHZvaWQqKSAoKHVpbnRwdHJfdCkgX19idWlsdGluX2ZyYW1lX2FkZHJlc3MoMCkgKyBzaXplb2Yodm9pZCopKTsKKyAgX19saWJjX2luaXQocmF3X2FyZ3MsIE5VTEwsICZtYWluLCAmYXJyYXkpOworfQorCisjaW5jbHVkZSAiX19kc29faGFuZGxlLmgiCisjaW5jbHVkZSAiYXRleGl0LmgiCisjaW5jbHVkZSAiX19zdGFja19jaGtfZmFpbF9sb2NhbC5oIgpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9iaW9uaWMvY3J0YmVnaW5fZHluYW1pYy5TIGIvbGliYy9hcmNoLXg4Ni9iaW9uaWMvY3J0YmVnaW5fZHluYW1pYy5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNzcyNDRiLi4wMDAwMDAwCi0tLSBhL2xpYmMvYXJjaC14ODYvYmlvbmljL2NydGJlZ2luX2R5bmFtaWMuUworKysgL2Rldi9udWxsCkBAIC0xLDEzOSArMCwwIEBACi0jIGJpb25pYy9hcmNoLXg4Ni9iaW9uaWMvY3J0YmVnaW5fZHluYW1pYy5TCi0jCi0jIENvcHlyaWdodCAyMDA2LCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0jCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKLSMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotIyAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0jICAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0jICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQotIyAgICAgICBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotIyAgICAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSMKLSMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBHb29nbGUgSW5jLiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIAotIyBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCi0jIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIAotIyBFVkVOVCBTSEFMTCBHb29nbGUgSW5jLiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0jIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyAKLSMgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIAotIyBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiAKLSMgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRgotIyBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLQotCS50ZXh0Ci0JLmFsaWduIDQKLQkudHlwZSBfc3RhcnQsIEBmdW5jdGlvbgotCS5nbG9ibCBfc3RhcnQKLQotIyB0aGlzIGlzIHRoZSBzbWFsbCBzdGFydHVwIGNvZGUgdGhhdCBpcyBmaXJzdCBydW4gd2hlbgotIyBhbnkgZXhlY3V0YWJsZSB0aGF0IGlzIGR5bmFtaWNhbGx5LWxpbmtlZCB3aXRoIEJpb25pYwotIyBydW5zLgotIwotIyBpdCdzIHB1cnBvc2UgaXMgdG8gY2FsbCBfX2xpYmNfaW5pdCB3aXRoIGFwcHJvcHJpYXRlCi0jIGFyZ3VtZW50cywgd2hpY2ggYXJlOgotIwotIyAgICAtIHRoZSBhZGRyZXNzIG9mIHRoZSByYXcgZGF0YSBibG9jayBzZXR1cCBieSB0aGUgTGludXgKLSMgICAgICBrZXJuZWwgRUxGIGxvYWRlcgotIwotIyAgICAtIGFkZHJlc3Mgb2YgYW4gIm9uZXhpdCIgZnVuY3Rpb24sIG5vdCB1c2VkIG9uIGFueQotIyAgICAgIHBsYXRmb3JtIHN1cHBvcnRlZCBieSBCaW9uaWMKLSMKLSMgICAgLSBhZGRyZXNzIG9mIHRoZSAibWFpbiIgZnVuY3Rpb24gb2YgdGhlIHByb2dyYW0uIFdlCi0jICAgICAgY2FuJ3QgaGFyZC1jb2RlIGl0IGluIHRoZSBhZHIgcHNldWRvIGluc3RydWN0aW9uCi0jICAgICAgc28gd2UgdXNlIGEgdGlueSB0cmFtcG9saW5lIHRoYXQgd2lsbCBnZXQgcmVsb2NhdGVkCi0jICAgICAgYnkgdGhlIGR5bmFtaWMgbGlua2VyIGJlZm9yZSB0aGlzIGNvZGUgcnVucwotIwotIyAgICAtIGFkZHJlc3Mgb2YgdGhlIGNvbnN0cnVjdG9yIGxpc3QKLSMKLV9zdGFydDoJCi0gICAgICAgIG1vdiAgICAgJWVzcCwgJWVheAotICAgICAgICAjIGJlZm9yZSBwdXNoIGFyZ3VtZW50cywgYWxpZ24gdGhlIHN0YWNrIHRvIGEgMTYgYnl0ZSBib3VuZGFyeQotICAgICAgICBhbmRsICAgICR+MTUsICVlc3AKLSAgICAgICAgbW92ICAgICAkMWYsICVlZHgKLSAgICAgICAgcHVzaGwgICAlZWR4Ci0gICAgICAgIG1vdiAgICAgJDBmLCAlZWR4Ci0gICAgICAgIHB1c2hsICAgJWVkeAotICAgICAgICBtb3YgICAgICQwLCAlZWR4Ci0gICAgICAgIHB1c2hsICAgJWVkeAotICAgICAgICBwdXNobCAgICVlYXgKLSAgICAgICAgY2FsbCAgICAgX19saWJjX2luaXQKLQotMDoKLSAgICAgICAgam1wICAgbWFpbgotCi0xOiAgLmxvbmcgICBfX1BSRUlOSVRfQVJSQVlfXwotICAgIC5sb25nICAgX19JTklUX0FSUkFZX18KLSAgICAubG9uZyAgIF9fRklOSV9BUlJBWV9fCi0KLQkuc2VjdGlvbiAucHJlaW5pdF9hcnJheSwgImF3IgotCS5nbG9ibCBfX1BSRUlOSVRfQVJSQVlfXwotX19QUkVJTklUX0FSUkFZX186Ci0JLmxvbmcgLTEKLQotCS5zZWN0aW9uIC5pbml0X2FycmF5LCAiYXciCi0JLmdsb2JsIF9fSU5JVF9BUlJBWV9fCi1fX0lOSVRfQVJSQVlfXzoKLQkubG9uZyAtMQotCS5sb25nCWZyYW1lX2R1bW15Ci0KLQkuc2VjdGlvbiAuZmluaV9hcnJheSwgImF3IgotCS5nbG9ibCBfX0ZJTklfQVJSQVlfXwotX19GSU5JX0FSUkFZX186Ci0JLmxvbmcgLTEKLQkubG9uZwlfX2RvX2dsb2JhbF9kdG9yc19hdXgKLQotCS5zZWN0aW9uCS5laF9mcmFtZSwiYSIsQHByb2diaXRzCi0JLmFsaWduIDQKLQkudHlwZQlfX0VIX0ZSQU1FX0JFR0lOX18sIEBvYmplY3QKLV9fRUhfRlJBTUVfQkVHSU5fXzoKLQkudGV4dAotCS5wMmFsaWduIDQsLDE1Ci0JLnR5cGUJX19kb19nbG9iYWxfZHRvcnNfYXV4LCBAZnVuY3Rpb24KLV9fZG9fZ2xvYmFsX2R0b3JzX2F1eDoKLQlwdXNobAklZWJwCi0JbW92bAklZXNwLCAlZWJwCi0Jc3VibAkkMjQsICVlc3AKLQljbXBiCSQwLCBjb21wbGV0ZWQuNDQ1NAotCWpuZQkuTDQKLQltb3ZsCSRfX2RlcmVnaXN0ZXJfZnJhbWVfaW5mb19iYXNlcywgJWVheAotCXRlc3RsCSVlYXgsICVlYXgKLQlqZQkuTDMKLQltb3ZsCSRfX0VIX0ZSQU1FX0JFR0lOX18sICglZXNwKQotCWNhbGwJX19kZXJlZ2lzdGVyX2ZyYW1lX2luZm9fYmFzZXMKLS5MMzoKLQltb3ZiCSQxLCBjb21wbGV0ZWQuNDQ1NAotLkw0OgotCWxlYXZlCi0JcmV0Ci0JLnRleHQKLQkucDJhbGlnbiA0LCwxNQotCS50eXBlCWZyYW1lX2R1bW15LCBAZnVuY3Rpb24KLWZyYW1lX2R1bW15OgotCXB1c2hsCSVlYnAKLQltb3ZsCSRfX3JlZ2lzdGVyX2ZyYW1lX2luZm9fYmFzZXMsICVlYXgKLQltb3ZsCSVlc3AsICVlYnAKLQlzdWJsCSQyNCwgJWVzcAotCXRlc3RsCSVlYXgsICVlYXgKLQlqZQkuTDcKLQltb3ZsCSVlYngsIDEyKCVlc3ApCi0JbW92bAkkMCwgOCglZXNwKQotCW1vdmwJJG9iamVjdC40NDY2LCA0KCVlc3ApCi0JbW92bAkkX19FSF9GUkFNRV9CRUdJTl9fLCAoJWVzcCkKLQljYWxsCV9fcmVnaXN0ZXJfZnJhbWVfaW5mb19iYXNlcwotLkw3OgotCWxlYXZlCi0JcmV0Ci0JLmxvY2FsCWNvbXBsZXRlZC40NDU0Ci0JLmNvbW0JY29tcGxldGVkLjQ0NTQsMSwxCi0JLmxvY2FsCW9iamVjdC40NDY2Ci0JLmNvbW0Jb2JqZWN0LjQ0NjYsMjQsNAotCS53ZWFrCV9fcmVnaXN0ZXJfZnJhbWVfaW5mb19iYXNlcwotCS53ZWFrCV9fZGVyZWdpc3Rlcl9mcmFtZV9pbmZvX2Jhc2VzCi0KLSNpbmNsdWRlICJfX2Rzb19oYW5kbGUuUyIKLSNpbmNsdWRlICJhdGV4aXQuUyIKLSNpbmNsdWRlICJfX3N0YWNrX2Noa19mYWlsX2xvY2FsLlMiCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L2Jpb25pYy9jcnRiZWdpbl9zby5TIGIvbGliYy9hcmNoLXg4Ni9iaW9uaWMvY3J0YmVnaW5fc28uUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTk2NjJmZS4uMDAwMDAwMAotLS0gYS9saWJjL2FyY2gteDg2L2Jpb25pYy9jcnRiZWdpbl9zby5TCisrKyAvZGV2L251bGwKQEAgLTEsMTExICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0gKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiAgICBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCi0gKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQotICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAotICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKLSAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUwotICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECi0gKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0gKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotLnNlY3Rpb24gLmluaXRfYXJyYXksICJhdyIKLS5hbGlnbiA0Ci0udHlwZSBfX0lOSVRfQVJSQVlfXywgQG9iamVjdAotLmdsb2JsIF9fSU5JVF9BUlJBWV9fCi1fX0lOSVRfQVJSQVlfXzoKLSAgICAubG9uZyAtMQotICAgIC5sb25nIGZyYW1lX2R1bW15Ci0KLS5zZWN0aW9uIC5maW5pX2FycmF5LCAiYXciCi0uYWxpZ24gNAotLnR5cGUgX19GSU5JX0FSUkFZX18sIEBvYmplY3QKLS5nbG9ibCBfX0ZJTklfQVJSQVlfXwotX19GSU5JX0FSUkFZX186Ci0gICAgLmxvbmcgLTEKLSAgICAubG9uZyBfX2RvX2dsb2JhbF9kdG9yc19hdXgKLQotCS5zZWN0aW9uCS5laF9mcmFtZSwiYSIsQHByb2diaXRzCi0JLmFsaWduIDQKLQkudHlwZQlfX0VIX0ZSQU1FX0JFR0lOX18sIEBvYmplY3QKLV9fRUhfRlJBTUVfQkVHSU5fXzoKLQkudGV4dAotCS5wMmFsaWduIDQsLDE1Ci0JLnR5cGUJX19kb19nbG9iYWxfZHRvcnNfYXV4LCBAZnVuY3Rpb24KLV9fZG9fZ2xvYmFsX2R0b3JzX2F1eDoKLQlwdXNobAklZWJwCi0JbW92bAklZXNwLCAlZWJwCi0JcHVzaGwJJWVieAotCWNhbGwJX194ODYuZ2V0X3BjX3RodW5rLmJ4Ci0JYWRkbAkkX0dMT0JBTF9PRkZTRVRfVEFCTEVfLCAlZWJ4Ci0Jc3VibAkkMjAsICVlc3AKLQljbXBiCSQwLCBjb21wbGV0ZWQuNDQ1NEBHT1RPRkYoJWVieCkKLQlqbmUJLkw1Ci0JbW92bAlfX2Rzb19oYW5kbGVAR09UT0ZGKCVlYngpLCAlZWF4Ci0JbW92bAklZWF4LCAoJWVzcCkKLQljYWxsCV9fY3hhX2ZpbmFsaXplQFBMVAotCW1vdmwJX19kZXJlZ2lzdGVyX2ZyYW1lX2luZm9fYmFzZXNAR09UKCVlYngpLCAlZWF4Ci0JdGVzdGwJJWVheCwgJWVheAotCWplCS5MNAotCWxlYWwJX19FSF9GUkFNRV9CRUdJTl9fQEdPVE9GRiglZWJ4KSwgJWVheAotCW1vdmwJJWVheCwgKCVlc3ApCi0JY2FsbAlfX2RlcmVnaXN0ZXJfZnJhbWVfaW5mb19iYXNlc0BQTFQKLS5MNDoKLQltb3ZiCSQxLCBjb21wbGV0ZWQuNDQ1NEBHT1RPRkYoJWVieCkKLS5MNToKLQlhZGRsCSQyMCwgJWVzcAotCXBvcGwJJWVieAotCXBvcGwJJWVicAotCXJldAotCS50ZXh0Ci0JLnAyYWxpZ24gNCwsMTUKLQkudHlwZQlmcmFtZV9kdW1teSwgQGZ1bmN0aW9uCi1mcmFtZV9kdW1teToKLQlwdXNobAklZWJwCi0JbW92bAklZXNwLCAlZWJwCi0JcHVzaGwJJWVieAotCWNhbGwJX194ODYuZ2V0X3BjX3RodW5rLmJ4Ci0JYWRkbAkkX0dMT0JBTF9PRkZTRVRfVEFCTEVfLCAlZWJ4Ci0Jc3VibAkkMjAsICVlc3AKLQltb3ZsCV9fcmVnaXN0ZXJfZnJhbWVfaW5mb19iYXNlc0BHT1QoJWVieCksICVlYXgKLQl0ZXN0bAklZWF4LCAlZWF4Ci0JamUJLkw4Ci0JbGVhbAlvYmplY3QuNDQ2OUBHT1RPRkYoJWVieCksICVlYXgKLQltb3ZsCSVlYXgsIDQoJWVzcCkKLQlsZWFsCV9fRUhfRlJBTUVfQkVHSU5fX0BHT1RPRkYoJWVieCksICVlYXgKLQltb3ZsCSVlYngsIDEyKCVlc3ApCi0JbW92bAkkMCwgOCglZXNwKQotCW1vdmwJJWVheCwgKCVlc3ApCi0JY2FsbAlfX3JlZ2lzdGVyX2ZyYW1lX2luZm9fYmFzZXNAUExUCi0uTDg6Ci0JYWRkbAkkMjAsICVlc3AKLQlwb3BsCSVlYngKLQlwb3BsCSVlYnAKLQlyZXQKLQkubG9jYWwJY29tcGxldGVkLjQ0NTQKLQkuY29tbQljb21wbGV0ZWQuNDQ1NCwxLDEKLQkubG9jYWwJb2JqZWN0LjQ0NjkKLQkuY29tbQlvYmplY3QuNDQ2OSwyNCw0Ci0JLndlYWsJX19yZWdpc3Rlcl9mcmFtZV9pbmZvX2Jhc2VzCi0JLndlYWsJX19kZXJlZ2lzdGVyX2ZyYW1lX2luZm9fYmFzZXMKLQotI2luY2x1ZGUgIl9fZHNvX2hhbmRsZV9zby5TIgotI2luY2x1ZGUgImF0ZXhpdC5TIgotI2luY2x1ZGUgIl9fc3RhY2tfY2hrX2ZhaWxfbG9jYWwuUyIKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvYmlvbmljL2NydGJlZ2luX3NvLmMgYi9saWJjL2FyY2gteDg2L2Jpb25pYy9jcnRiZWdpbl9zby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwZGU2YWYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L2Jpb25pYy9jcnRiZWdpbl9zby5jCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworZXh0ZXJuIHZvaWQgX19jeGFfZmluYWxpemUodm9pZCAqKTsKK2V4dGVybiB2b2lkICpfX2Rzb19oYW5kbGU7CisKK19fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImhpZGRlbiIpLGRlc3RydWN0b3IpKQordm9pZCBfX29uX2RsY2xvc2UoKSB7CisgIF9fY3hhX2ZpbmFsaXplKCZfX2Rzb19oYW5kbGUpOworfQorCisvKiBDUlRfTEVHQUNZX1dPUktBUk9VTkQgc2hvdWxkIG9ubHkgYmUgZGVmaW5lZCB3aGVuIGJ1aWxkaW5nCisgKiB0aGlzIGZpbGUgYXMgcGFydCBvZiB0aGUgcGxhdGZvcm0ncyBDIGxpYnJhcnkuCisgKgorICogVGhlIEMgbGlicmFyeSBhbHJlYWR5IGRlZmluZXMgYSBmdW5jdGlvbiBuYW1lZCAnYXRleGl0KCknCisgKiBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgd2l0aCBvbGRlciBOREstZ2VuZXJhdGVkIGJpbmFyaWVzLgorICoKKyAqIEZvciBuZXdlciBvbmVzLCAnYXRleGl0JyBpcyBhY3R1YWxseSBlbWJlZGRlZCBpbiB0aGUgQworICogcnVudGltZSBvYmplY3RzIHRoYXQgYXJlIGxpbmtlZCBpbnRvIHRoZSBmaW5hbCBFTEYKKyAqIGJpbmFyeSAoc2hhcmVkIGxpYnJhcnkgb3IgZXhlY3V0YWJsZSksIGFuZCB3aWxsIGNhbGwKKyAqIF9fY3hhX2F0ZXhpdCgpIGluIG9yZGVyIHRvIHVuLXJlZ2lzdGVyIGFueSBhdGV4aXQoKQorICogaGFuZGxlciB3aGVuIGEgbGlicmFyeSBpcyB1bmxvYWRlZC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgZ2xvYmFsICphbmQqIGhpZGRlbi4gT25seSB0aGUKKyAqIGNvZGUgaW5zaWRlIHRoZSBzYW1lIEVMRiBiaW5hcnkgc2hvdWxkIGJlIGFibGUgdG8gYWNjZXNzIGl0LgorICovCisKKyNpZmRlZiBDUlRfTEVHQUNZX1dPUktBUk9VTkQKKyNpbmNsdWRlICJfX2Rzb19oYW5kbGUuaCIKKyNlbHNlCisjaW5jbHVkZSAiX19kc29faGFuZGxlX3NvLmgiCisjaW5jbHVkZSAiYXRleGl0LmgiCisjaW5jbHVkZSAiX19zdGFja19jaGtfZmFpbF9sb2NhbC5oIgorI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L2Jpb25pYy9jcnRiZWdpbl9zdGF0aWMuUyBiL2xpYmMvYXJjaC14ODYvYmlvbmljL2NydGJlZ2luX3N0YXRpYy5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZmZmZWNkLi4wMDAwMDAwCi0tLSBhL2xpYmMvYXJjaC14ODYvYmlvbmljL2NydGJlZ2luX3N0YXRpYy5TCisrKyAvZGV2L251bGwKQEAgLTEsMTM4ICswLDAgQEAKLSMgYmlvbmljL2FyY2gteDg2L2Jpb25pYy9jcnRiZWdpbl9zdGF0aWMuUwotIwotIyBDb3B5cmlnaHQgMjAwNiwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotIwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6Ci0jICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotIyAgICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkKLSMgICAgICAgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKLSMgICAgICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0jCi0jIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgR29vZ2xlIEluYy4gYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiAKLSMgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgotIyBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyAKLSMgRVZFTlQgU0hBTEwgR29vZ2xlIEluYy4gQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotIyBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgCi0jIE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCAKLSMgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgCi0jIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYKLSMgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLQkudGV4dAotCS5hbGlnbiA0Ci0JLnR5cGUgX3N0YXJ0LCBAZnVuY3Rpb24KLQkuZ2xvYmwgX3N0YXJ0Ci0KLSMgdGhpcyBpcyB0aGUgc21hbGwgc3RhcnR1cCBjb2RlIHRoYXQgaXMgZmlyc3QgcnVuIHdoZW4KLSMgYW55IGV4ZWN1dGFibGUgdGhhdCBpcyBzdGF0aWNhbGx5LWxpbmtlZCB3aXRoIEJpb25pYwotIyBydW5zLgotIwotIyBpdCdzIHB1cnBvc2UgaXMgdG8gY2FsbCBfX2xpYmNfaW5pdCB3aXRoIGFwcHJvcHJpYXRlCi0jIGFyZ3VtZW50cywgd2hpY2ggYXJlOgotIwotIyAgICAtIHRoZSBhZGRyZXNzIG9mIHRoZSByYXcgZGF0YSBibG9jayBzZXR1cCBieSB0aGUgTGludXgKLSMgICAgICBrZXJuZWwgRUxGIGxvYWRlcgotIwotIyAgICAtIGFkZHJlc3Mgb2YgYW4gIm9uZXhpdCIgZnVuY3Rpb24sIG5vdCB1c2VkIG9uIGFueQotIyAgICAgIHBsYXRmb3JtIHN1cHBvcnRlZCBieSBCaW9uaWMKLSMKLSMgICAgLSBhZGRyZXNzIG9mIHRoZSAibWFpbiIgZnVuY3Rpb24gb2YgdGhlIHByb2dyYW0uIFdlCi0jICAgICAgY2FuJ3QgaGFyZC1jb2RlIGl0IGluIHRoZSBhZHIgcHNldWRvIGluc3RydWN0aW9uCi0jICAgICAgc28gd2UgdXNlIGEgdGlueSB0cmFtcG9saW5lIHRoYXQgd2lsbCBnZXQgcmVsb2NhdGVkCi0jICAgICAgYnkgdGhlIGR5bmFtaWMgbGlua2VyIGJlZm9yZSB0aGlzIGNvZGUgcnVucwotIwotIyAgICAtIGFkZHJlc3Mgb2YgdGhlIGNvbnN0cnVjdG9yIGxpc3QKLSMKLV9zdGFydDoJCi0gICAgICAgIG1vdiAgICAgJWVzcCwgJWVheAotICAgICAgICAjIGJlZm9yZSBwdXNoIGFyZ3VtZW50cywgYWxpZ24gdGhlIHN0YWNrIHRvIGEgMTYgYnl0ZSBib3VuZGFyeQotICAgICAgICBhbmRsICAgICR+MTUsICVlc3AKLSAgICAgICAgbW92ICAgICAkMWYsICVlZHgKLSAgICAgICAgcHVzaGwgICAlZWR4Ci0gICAgICAgIG1vdiAgICAgJDBmLCAlZWR4Ci0gICAgICAgIHB1c2hsICAgJWVkeAotICAgICAgICBtb3YgICAgICQwLCAlZWR4Ci0gICAgICAgIHB1c2hsICAgJWVkeAotICAgICAgICBwdXNobCAgICVlYXgKLSAgICAgICAgY2FsbCAgICBfX2xpYmNfaW5pdAotCi0wOiAgam1wICAgbWFpbgotCi0xOiAgLmxvbmcgICBfX1BSRUlOSVRfQVJSQVlfXwotICAgIC5sb25nICAgX19JTklUX0FSUkFZX18KLSAgICAubG9uZyAgIF9fRklOSV9BUlJBWV9fCi0KLQkuc2VjdGlvbiAucHJlaW5pdF9hcnJheSwgImF3IgotCS5nbG9ibCBfX1BSRUlOSVRfQVJSQVlfXwotX19QUkVJTklUX0FSUkFZX186Ci0JLmxvbmcgLTEKLQotCS5zZWN0aW9uIC5pbml0X2FycmF5LCAiYXciCi0JLmdsb2JsIF9fSU5JVF9BUlJBWV9fCi1fX0lOSVRfQVJSQVlfXzoKLQkubG9uZyAtMQotCS5sb25nCWZyYW1lX2R1bW15Ci0KLQkuc2VjdGlvbiAuZmluaV9hcnJheSwgImF3IgotCS5nbG9ibCBfX0ZJTklfQVJSQVlfXwotX19GSU5JX0FSUkFZX186Ci0JLmxvbmcgLTEKLQkubG9uZwlfX2RvX2dsb2JhbF9kdG9yc19hdXgKLQotCS5zZWN0aW9uCS5laF9mcmFtZSwiYSIsQHByb2diaXRzCi0JLmFsaWduIDQKLQkudHlwZQlfX0VIX0ZSQU1FX0JFR0lOX18sIEBvYmplY3QKLV9fRUhfRlJBTUVfQkVHSU5fXzoKLQkudGV4dAotCS5wMmFsaWduIDQsLDE1Ci0JLnR5cGUJX19kb19nbG9iYWxfZHRvcnNfYXV4LCBAZnVuY3Rpb24KLV9fZG9fZ2xvYmFsX2R0b3JzX2F1eDoKLQlwdXNobAklZWJwCi0JbW92bAklZXNwLCAlZWJwCi0Jc3VibAkkMjQsICVlc3AKLQljbXBiCSQwLCBjb21wbGV0ZWQuNDQ1NAotCWpuZQkuTDQKLQltb3ZsCSRfX2RlcmVnaXN0ZXJfZnJhbWVfaW5mb19iYXNlcywgJWVheAotCXRlc3RsCSVlYXgsICVlYXgKLQlqZQkuTDMKLQltb3ZsCSRfX0VIX0ZSQU1FX0JFR0lOX18sICglZXNwKQotCWNhbGwJX19kZXJlZ2lzdGVyX2ZyYW1lX2luZm9fYmFzZXMKLS5MMzoKLQltb3ZiCSQxLCBjb21wbGV0ZWQuNDQ1NAotLkw0OgotCWxlYXZlCi0JcmV0Ci0JLnRleHQKLQkucDJhbGlnbiA0LCwxNQotCS50eXBlCWZyYW1lX2R1bW15LCBAZnVuY3Rpb24KLWZyYW1lX2R1bW15OgotCXB1c2hsCSVlYnAKLQltb3ZsCSRfX3JlZ2lzdGVyX2ZyYW1lX2luZm9fYmFzZXMsICVlYXgKLQltb3ZsCSVlc3AsICVlYnAKLQlzdWJsCSQyNCwgJWVzcAotCXRlc3RsCSVlYXgsICVlYXgKLQlqZQkuTDcKLQltb3ZsCSVlYngsIDEyKCVlc3ApCi0JbW92bAkkMCwgOCglZXNwKQotCW1vdmwJJG9iamVjdC40NDY2LCA0KCVlc3ApCi0JbW92bAkkX19FSF9GUkFNRV9CRUdJTl9fLCAoJWVzcCkKLQljYWxsCV9fcmVnaXN0ZXJfZnJhbWVfaW5mb19iYXNlcwotLkw3OgotCWxlYXZlCi0JcmV0Ci0JLmxvY2FsCWNvbXBsZXRlZC40NDU0Ci0JLmNvbW0JY29tcGxldGVkLjQ0NTQsMSwxCi0JLmxvY2FsCW9iamVjdC40NDY2Ci0JLmNvbW0Jb2JqZWN0LjQ0NjYsMjQsNAotCS53ZWFrCV9fcmVnaXN0ZXJfZnJhbWVfaW5mb19iYXNlcwotCS53ZWFrCV9fZGVyZWdpc3Rlcl9mcmFtZV9pbmZvX2Jhc2VzCi0KLSNpbmNsdWRlICJfX2Rzb19oYW5kbGUuUyIKLSNpbmNsdWRlICJhdGV4aXQuUyIKLSNpbmNsdWRlICJfX3N0YWNrX2Noa19mYWlsX2xvY2FsLlMiCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L2Jpb25pYy9kbF9pdGVyYXRlX3BoZHJfc3RhdGljLmMgYi9saWJjL2FyY2gteDg2L2Jpb25pYy9kbF9pdGVyYXRlX3BoZHJfc3RhdGljLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZkMTIxMDYuLjAwMDAwMDAKLS0tIGEvbGliYy9hcmNoLXg4Ni9iaW9uaWMvZGxfaXRlcmF0ZV9waGRyX3N0YXRpYy5jCisrKyAvZGV2L251bGwKQEAgLTEsNzQgKzAsMCBAQAotLyogYmlvbmljL2FyY2gteDg2L2Jpb25pYy9kbF9pdGVyYXRlX3BoZHJfc3RhdGljLmMKLSoqCi0qKiBDb3B5cmlnaHQgMjAwNiwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotKioKLSoqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6Ci0qKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiogICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotKiogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSoqICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSoqICAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0qKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkKLSoqICAgICAgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0qKiAgICAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSoqCi0qKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEdvb2dsZSBJbmMuIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKLSoqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKLSoqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PCi0qKiBFVkVOVCBTSEFMTCBHb29nbGUgSW5jLiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotKiogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotKiogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7Ci0qKiBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwKLSoqIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SCi0qKiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGCi0qKiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSovCi0KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9lbGYuaD4KLQotLyogVE9ETzogTW92ZSB0aGlzIGludG8gYSBoZWFkZXIgdGhhdCBsaW5rZXIuaCBjYW4gYWxzbyBwdWxsIGl0IGluLgotICogU2lsbHkgdG8gaGF2ZSBzYW1lIHN0cnVjdCBpbiAyIHBsYWNlcy4gVGhpcyBpcyB0ZW1wb3JhcnkuICovCi1zdHJ1Y3QgZGxfcGhkcl9pbmZvCi17Ci0gICAgRWxmMzJfQWRkciBkbHBpX2FkZHI7Ci0gICAgY29uc3QgY2hhciAqZGxwaV9uYW1lOwotICAgIGNvbnN0IEVsZjMyX1BoZHIgKmRscGlfcGhkcjsKLSAgICBFbGYzMl9IYWxmIGRscGlfcGhudW07Ci19OwotCi0vKiBEeW5hbWljIGJpbmFyaWVzIGdldCB0aGlzIGZyb20gdGhlIGR5bmFtaWMgbGlua2VyIChzeXN0ZW0vbGlua2VyKSwgd2hpY2gKLSAqIHdlIGRvbid0IHB1bGwgaW4gZm9yIHN0YXRpYyBiaW5zLiBXZSBhbHNvIGRvbid0IGhhdmUgYSBsaXN0IG9mIHNvJ3MgdG8KLSAqIGl0ZXJhdGUgb3Zlciwgc2luY2UgdGhlcmUncyByZWFsbHkgb25seSBhIHNpbmdsZSBtb25vbGl0aGljIGJsb2Igb2YKLSAqIGNvZGUvZGF0YS4KLSAqCi0gKiBBbGwgd2UgbmVlZCB0byBkbyBpcyB0byBmaW5kIHdoZXJlIHRoZSBleGVjdXRhYmxlIGlzIGluIG1lbW9yeSwgYW5kIGdyYWIgdGhlCi0gKiBwaGRyIGFuZCBwaG51bSBmcm9tIHRoZXJlLgotICovCi0KLS8qIGxkIHByb3ZpZGVzIHRoaXMgdG8gdXMgaW4gdGhlIGRlZmF1bHQgbGluayBzY3JpcHQgKi8KLWV4dGVybiB2b2lkICpfX2V4ZWN1dGFibGVfc3RhcnQ7Ci0KLWludAotZGxfaXRlcmF0ZV9waGRyKGludCAoKmNiKShzdHJ1Y3QgZGxfcGhkcl9pbmZvICppbmZvLCBzaXplX3Qgc2l6ZSwgdm9pZCAqZGF0YSksCi0gICAgICAgICAgICAgICAgdm9pZCAqZGF0YSkKLXsKLSAgICBzdHJ1Y3QgZGxfcGhkcl9pbmZvIGRsX2luZm87Ci0gICAgRWxmMzJfRWhkciAqZWhkciA9IChFbGYzMl9FaGRyICopICZfX2V4ZWN1dGFibGVfc3RhcnQ7Ci0gICAgRWxmMzJfUGhkciAqcGhkciA9IChFbGYzMl9QaGRyICopKCh1bnNpZ25lZCBsb25nKWVoZHIgKyBlaGRyLT5lX3Bob2ZmKTsKLQotICAgIC8qIFRPRE86IGFnYWluLCBjb3BpZWQgZnJvbSBsaW5rZXIuYy4gRmluZCBhIGJldHRlciBob21lIGZvciB0aGlzCi0gICAgICogbGF0ZXIuICovCi0gICAgaWYgKGVoZHItPmVfaWRlbnRbRUlfTUFHMF0gIT0gRUxGTUFHMCkgcmV0dXJuIC0xOwotICAgIGlmIChlaGRyLT5lX2lkZW50W0VJX01BRzFdICE9IEVMRk1BRzEpIHJldHVybiAtMTsKLSAgICBpZiAoZWhkci0+ZV9pZGVudFtFSV9NQUcyXSAhPSBFTEZNQUcyKSByZXR1cm4gLTE7Ci0gICAgaWYgKGVoZHItPmVfaWRlbnRbRUlfTUFHM10gIT0gRUxGTUFHMykgcmV0dXJuIC0xOwotCi0gICAgZGxfaW5mby5kbHBpX2FkZHIgPSAwOwotICAgIGRsX2luZm8uZGxwaV9uYW1lID0gTlVMTDsKLSAgICBkbF9pbmZvLmRscGlfcGhkciA9IHBoZHI7Ci0gICAgZGxfaW5mby5kbHBpX3BobnVtID0gZWhkci0+ZV9waG51bTsKLSAgICByZXR1cm4gY2IoJmRsX2luZm8sIHNpemVvZiAoc3RydWN0IGRsX3BoZHJfaW5mbyksIGRhdGEpOwotfQotCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L2Jpb25pYy9mdXRleF94ODYuUyBiL2xpYmMvYXJjaC14ODYvYmlvbmljL2Z1dGV4X3g4Ni5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhMzM3NTgKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L2Jpb25pYy9mdXRleF94ODYuUwpAQCAtMCwwICsxLDU5IEBACisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgorI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+CisKKyNkZWZpbmUgRlVURVhfV0FJVCAwCisjZGVmaW5lIEZVVEVYX1dBS0UgMQorCisvLyBpbnQgX19mdXRleF93YWl0KHZvbGF0aWxlIHZvaWQgKmZ0eCwgaW50IHZhbCwgY29uc3Qgc3RydWN0IHRpbWVzcGVjICp0aW1lb3V0KQorRU5UUlkoX19mdXRleF93YWl0KQorICAgIHB1c2hsICAgJWVieAorICAgIHB1c2hsICAgJWVzaQorICAgIG1vdiAgICAgMTIoJWVzcCksICVlYnggICAgICAgICAgIC8qIGZ0eCAqLworICAgIG1vdmwgICAgJEZVVEVYX1dBSVQsICVlY3gKKyAgICBtb3YgICAgIDE2KCVlc3ApLCAlZWR4ICAgICAgICAgICAvKiB2YWwgKi8KKyAgICBtb3YgICAgIDIwKCVlc3ApLCAlZXNpICAgICAgICAgICAvKiB0aW1lb3V0ICovCisgICAgbW92bCAgICAkX19OUl9mdXRleCwgJWVheAorICAgIGludCAgICAgJDB4ODAKKyAgICBwb3BsICAgICVlc2kKKyAgICBwb3BsICAgICVlYngKKyAgICByZXQKK0VORChfX2Z1dGV4X3dhaXQpCisKKy8vIGludCBfX2Z1dGV4X3dha2Uodm9sYXRpbGUgdm9pZCAqZnR4LCBpbnQgY291bnQpCitFTlRSWShfX2Z1dGV4X3dha2UpCisgICAgcHVzaGwgICAlZWJ4CisgICAgbW92ICAgICA4KCVlc3ApLCAlZWJ4ICAgICAgICAgICAgLyogZnR4ICovCisgICAgbW92bCAgICAkRlVURVhfV0FLRSwgJWVjeAorICAgIG1vdiAgICAgMTIoJWVzcCksICVlZHggICAgICAgICAgIC8qIGNvdW50ICovCisgICAgbW92bCAgICAkX19OUl9mdXRleCwgJWVheAorICAgIGludCAgICAgJDB4ODAKKyAgICBwb3BsICAgICVlYngKKyAgICByZXQKK0VORChfX2Z1dGV4X3dha2UpCisKKy8vIGludCBfX2Z1dGV4X3N5c2NhbGwzKHZvbGF0aWxlIHZvaWQgKmZ0eCwgaW50IG9wLCBpbnQgY291bnQpCitFTlRSWShfX2Z1dGV4X3N5c2NhbGwzKQorICAgIHB1c2hsICAgJWVieAorICAgIG1vdmwgICAgOCglZXNwKSwgJWVieCAgICAgIC8qIGZ0eCAqLworICAgIG1vdmwgICAgMTIoJWVzcCksICVlY3ggICAgICAvKiBvcCAqLworICAgIG1vdmwgICAgMTYoJWVzcCksICVlZHggICAgICAvKiB2YWx1ZSAqLworICAgIG1vdmwgICAgJF9fTlJfZnV0ZXgsICVlYXgKKyAgICBpbnQgICAgICQweDgwCisgICAgcG9wbCAgICAlZWJ4CisgICAgcmV0CitFTkQoX19mdXRleF9zeXNjYWxsMykKKworLy8gaW50IF9fZnV0ZXhfc3lzY2FsbDQodm9sYXRpbGUgdm9pZCAqZnR4LCBpbnQgb3AsIGludCB2YWwsIGNvbnN0IHN0cnVjdCB0aW1lc3BlYyAqdGltZW91dCkKK0VOVFJZKF9fZnV0ZXhfc3lzY2FsbDQpCisgICAgcHVzaGwgICAlZWJ4CisgICAgcHVzaGwgICAlZXNpCisgICAgbW92bCAgICAxMiglZXNwKSwgJWVieCAgICAgIC8qIGZ0eCAqLworICAgIG1vdmwgICAgMTYoJWVzcCksICVlY3ggICAgICAvKiBvcCAqLworICAgIG1vdmwgICAgMjAoJWVzcCksICVlZHggICAgICAvKiB2YWwgKi8KKyAgICBtb3ZsICAgIDI0KCVlc3ApLCAlZXNpICAgICAgLyogdGltZW91dCAqLworICAgIG1vdmwgICAgJF9fTlJfZnV0ZXgsICVlYXgKKyAgICBpbnQgICAgICQweDgwCisgICAgcG9wbCAgICAlZXNpCisgICAgcG9wbCAgICAlZWJ4CisgICAgcmV0CitFTkQoX19mdXRleF9zeXNjYWxsNCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvYmlvbmljL3NldGptcC5TIGIvbGliYy9hcmNoLXg4Ni9iaW9uaWMvc2V0am1wLlMKaW5kZXggYmNiNWY5ZC4uYzBkZjY0NyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9iaW9uaWMvc2V0am1wLlMKKysrIGIvbGliYy9hcmNoLXg4Ni9iaW9uaWMvc2V0am1wLlMKQEAgLTUyLDcgKzUyLDcgQEAKIAljYWxsCV9DX0xBQkVMKHNpZ2Jsb2NrKQogI2VuZGlmCiAJYWRkbAkkNCwlZXNwCi0JUElDX0VQSUxPR1VFIAorCVBJQ19FUElMT0dVRQogCiAJbW92bAk0KCVlc3ApLCVlY3gKIAltb3ZsCTAoJWVzcCksJWVkeApAQCAtNjUsNiArNjUsNyBAQAogCW1vdmwJJWVheCwyNCglZWN4KQogCXhvcmwJJWVheCwlZWF4CiAJcmV0CitFTkQoc2V0am1wKQogCiBFTlRSWShsb25nam1wKQogCW1vdmwJNCglZXNwKSwlZWR4CkBAIC03Niw3ICs3Nyw3IEBACiAJY2FsbAlfQ19MQUJFTChzaWdzZXRtYXNrKQogI2VuZGlmCiAJYWRkbAkkNCwlZXNwCi0JUElDX0VQSUxPR1VFIAorCVBJQ19FUElMT0dVRQogCiAJbW92bAk0KCVlc3ApLCVlZHgKIAltb3ZsCTgoJWVzcCksJWVheApAQCAtOTEsMyArOTIsNCBAQAogCWluY2wJJWVheAogMToJbW92bAklZWN4LDAoJWVzcCkKIAlyZXQKK0VORChsb25nam1wKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9iaW9uaWMvc2lnc2V0am1wLlMgYi9saWJjL2FyY2gteDg2L2Jpb25pYy9zaWdzZXRqbXAuUwppbmRleCBjOTkwYTA1Li43MGNjNmRiIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L2Jpb25pYy9zaWdzZXRqbXAuUworKysgYi9saWJjL2FyY2gteDg2L2Jpb25pYy9zaWdzZXRqbXAuUwpAQCAtNjEsNiArNjEsNyBAQAogCW1vdmwJJWVkaSwyMCglZWN4KQogCXhvcmwJJWVheCwlZWF4CiAJcmV0CitFTkQoc2lnc2V0am1wKQogCiBFTlRSWShzaWdsb25nam1wKQogCW1vdmwJNCglZXNwKSwlZWR4CkBAIC05MCwzICs5MSw0IEBACiAJaW5jbAklZWF4CiAyOgltb3ZsCSVlY3gsMCglZXNwKQogCXJldAorRU5EKHNpZ2xvbmdqbXApCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L2Jpb25pYy9zeXNjYWxsLlMgYi9saWJjL2FyY2gteDg2L2Jpb25pYy9zeXNjYWxsLlMKaW5kZXggODM3MGYwYi4uNDQ1MmRhNCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9iaW9uaWMvc3lzY2FsbC5TCisrKyBiL2xpYmMvYXJjaC14ODYvYmlvbmljL3N5c2NhbGwuUwpAQCAtMSw0NiArMSw1MiBAQAogLyoKICAqIEdlbmVyaWMgc3lzY2FsbCBjYWxsLgotICogVXBvbiBlbnRyeQotICoJJWVheDogc3lzdGVtIGNhbGwgbnVtYmVyCi0gKgklZWJ4OiBhcmcwIHRvIHN5c3RlbSBjYWxsCi0gKgklZWN4OiBhcmcuLgotICoJJWVkeDogYXJnLi4KLSAqCSVlc2k6IGFyZy4uCi0gKgklZWRpOiBhcmcuLgotICogV2UgcHVzaCB0aGVzZSAodG8gc2F2ZSB0aGVtKSBsb2FkIHRoZW0gdXAgd2l0aCB0aGUKLSAqIHZhbHVlcyBmcm9tIHRoZSBjYWxsaW5nIGZyYW1lIChub3QgYWxsIHdpbGwgYWN0dWFsbHkgYmUgdmFsaWQpCi0gKiBhbmQgbWFrZSB0aGUgc3lzY2FsbC4KKyAqIFVwb24gZW50cnk6CisgKgklZWF4OiBzeXN0ZW0gY2FsbCBudW1iZXIgIC0gY2FsbGVyIHNhdmUKKyAqCSVlYng6IGFyZzAgdG8gc3lzdGVtIGNhbGwgLSAgIGNhbGxlZSBzYXZlCisgKgklZWN4OiBhcmcxICAgICAgICAgICAgICAgIC0gY2FsbGVyIHNhdmUKKyAqCSVlZHg6IGFyZzIgICAgICAgICAgICAgICAgLSBjYWxsZXIgc2F2ZQorICoJJWVzaTogYXJnMyAgICAgICAgICAgICAgICAtICAgY2FsbGVlIHNhdmUKKyAqCSVlZGk6IGFyZzQgICAgICAgICAgICAgICAgLSAgIGNhbGxlZSBzYXZlCisgKgklZWJwOiBhcmc1ICAgICAgICAgICAgICAgIC0gICBjYWxsZWUgc2F2ZQogICovCiAKLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CisjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KIAotICAgIC50ZXh0Ci0gICAgLnR5cGUgc3lzY2FsbCwgQGZ1bmN0aW9uCi0gICAgLmdsb2JsIHN5c2NhbGwKLSAgICAuYWxpZ24gNAotCi1zeXNjYWxsOgorRU5UUlkoc3lzY2FsbCkKKyAgICAjIFB1c2ggdGhlIGNhbGxlZSBzYXZlIHJlZ2lzdGVycy4KICAgICBwdXNoICAgICVlYngKICAgICBwdXNoICAgICVlc2kKICAgICBwdXNoICAgICVlZGkKLSAgICBtb3YgICAgIDE2KCVlc3ApLCVlYXgKLSAgICBtb3YgICAgIDIwKCVlc3ApLCVlYngKLSAgICBtb3YgICAgIDI0KCVlc3ApLCVlY3gKLSAgICBtb3YgICAgIDI4KCVlc3ApLCVlZHgKLSAgICBtb3YgICAgIDMyKCVlc3ApLCVlc2kKLSAgICBtb3YgICAgIDM2KCVlc3ApLCVlZGkKKyAgICBwdXNoICAgICVlYnAKIAorICAgICMgTG9hZCBhbGwgdGhlIGFyZ3VtZW50cyBmcm9tIHRoZSBjYWxsaW5nIGZyYW1lLgorICAgICMgKE5vdCBhbGwgd2lsbCBiZSB2YWxpZCwgZGVwZW5kaW5nIG9uIHRoZSBzeXNjYWxsLikKKyAgICBtb3YgICAgIDIwKCVlc3ApLCVlYXgKKyAgICBtb3YgICAgIDI0KCVlc3ApLCVlYngKKyAgICBtb3YgICAgIDI4KCVlc3ApLCVlY3gKKyAgICBtb3YgICAgIDMyKCVlc3ApLCVlZHgKKyAgICBtb3YgICAgIDM2KCVlc3ApLCVlc2kKKyAgICBtb3YgICAgIDQwKCVlc3ApLCVlZGkKKyAgICBtb3YgICAgIDQ0KCVlc3ApLCVlYnAKKworICAgICMgTWFrZSB0aGUgc3lzdGVtIGNhbGwuCiAgICAgaW50ICAgICAkMHg4MAogCisgICAgIyBFcnJvcj8KICAgICBjbXBsICAgICQtNDA5NSwgJWVheAogICAgIGpiICAgICAgMWYKKyAgICAjIFllcywgc28gc2V0IGVycm5vLgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheAogICAgIGNhbGwgICAgX19zZXRfZXJybm8KICAgICBhZGRsICAgICQ0LCAlZXNwCiAgICAgb3JsICAgICAkLTEsICVlYXgKIDE6CisgICAgIyBSZXN0b3JlIHRoZSBjYWxsZWUgc2F2ZSByZWdpc3RlcnMuCisgICAgcG9wICAgICVlYnAKICAgICBwb3AgICAgJWVkaQogICAgIHBvcCAgICAlZXNpCiAgICAgcG9wICAgICVlYngKICAgICByZXQKK0VORChzeXNjYWxsKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9iaW9uaWMvdmZvcmsuUyBiL2xpYmMvYXJjaC14ODYvYmlvbmljL3Zmb3JrLlMKaW5kZXggNTM5MTBhYi4uN2I2MjQ0OSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9iaW9uaWMvdmZvcmsuUworKysgYi9saWJjL2FyY2gteDg2L2Jpb25pYy92Zm9yay5TCkBAIC0xLDIxICsxLDEyIEBACi0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+Ci0KLSNpZm5kZWYgX19OUl92Zm9yawotI2RlZmluZSBfX05SX3Zmb3JrICAxOTAKLSNlbmRpZgotCi0KLSAgICAudGV4dAotICAgIC50eXBlIHZmb3JrLCBAZnVuY3Rpb24KLSAgICAuZ2xvYmwgdmZvcmsKLSAgICAuYWxpZ24gNAorI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogCiAvKiBHZXQgcmlkIG9mIHRoZSBzdGFjayBtb2RpZmljYXRpb25zIChwb3BsL3JldCkgYWZ0ZXIgdmZvcmsoKSBzdWNjZXNzLgogICogdmZvcmsgaXMgVkVSWSBzbmVha3kuIE9uZSBoYXMgdG8gYmUgdmVyeSBjYXJlZnVsIGFib3V0IHdoYXQgY2FuIGJlIGRvbmUKICAqIGJldHdlZW4gYSBzdWNjZXNzZnVsIHZmb3JrIGFuZCBhIGEgc3Vic2VxdWVudCBleGVjdmUoKQogICovCiAKLXZmb3JrOgorRU5UUlkodmZvcmspCiAgICAgLyogZ3JhYiB0aGUgcmV0dXJuIGFkZHJlc3MgKi8KICAgICBwb3BsICAgICVlY3gKICAgICBtb3ZsICAgICRfX05SX3Zmb3JrLCAlZWF4CkBAIC0yOCwzICsxOSw0IEBACiAgICAgb3JsICAgICAkLTEsICVlYXgKIDE6CiAgICAgam1wICAgICAqJWVjeAorRU5EKHZmb3JrKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9pbmNsdWRlL2VuZGlhbi5oIGIvbGliYy9hcmNoLXg4Ni9pbmNsdWRlL2VuZGlhbi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YTcwNTM2Li4wMDAwMDAwCi0tLSBhL2xpYmMvYXJjaC14ODYvaW5jbHVkZS9lbmRpYW4uaAorKysgL2Rldi9udWxsCkBAIC0xLDcwICswLDAgQEAKLS8qCSRPcGVuQlNEOiBlbmRpYW4uaCx2IDEuMTQgMjAwNS8xMi8xMyAwMDozNToyMyBtaWxsZXJ0IEV4cCAkCSovCi0KLS8qLQotICogQ29weXJpZ2h0IChjKSAxOTk3IE5pa2xhcyBIYWxscXZpc3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0gKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgotICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAotICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0gKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIF9JMzg2X0VORElBTl9IXwotI2RlZmluZSBfSTM4Nl9FTkRJQU5fSF8KLQotI2lmZGVmIF9fR05VQ19fCi0KLSNpZiBkZWZpbmVkKF9LRVJORUwpICYmICFkZWZpbmVkKEkzODZfQ1BVKQotI2RlZmluZQlfX3N3YXAzMm1kKHgpICh7CQkJCQkJXAotCXVpbnQzMl90IF9fc3dhcDMybWRfeCA9ICh4KTsJCQkJCVwKLQkJCQkJCQkJCVwKLQlfX2FzbSAoImJzd2FwICUxIiA6ICIrciIgKF9fc3dhcDMybWRfeCkpOwkJCVwKLQlfX3N3YXAzMm1kX3g7CQkJCQkJCVwKLX0pCi0jZWxzZQotI2RlZmluZQlfX3N3YXAzMm1kKHgpICh7CQkJCQkJXAotCXVpbnQzMl90IF9fc3dhcDMybWRfeCA9ICh4KTsJCQkJCVwKLQkJCQkJCQkJCVwKLQlfX2FzbSAoInJvcncgJDgsICV3MTsgcm9ybCAkMTYsICUxOyByb3J3ICQ4LCAldzEiIDoJCVwKLQkgICAgIityIiAoX19zd2FwMzJtZF94KSk7CQkJCQlcCi0JX19zd2FwMzJtZF94OwkJCQkJCQlcCi19KQotI2VuZGlmCS8qIF9LRVJORUwgJiYgIUkzODZfQ1BVICovCi0KLSNkZWZpbmUJX19zd2FwNjRtZCh4KSAoewkJCQkJCVwKLQl1aW50NjRfdCBfX3N3YXA2NG1kX3ggPSAoeCk7CQkJCQlcCi0JCQkJCQkJCQlcCi0JKHVpbnQ2NF90KV9fc3dhcDMybWQoX19zd2FwNjRtZF94ID4+IDMyKSB8CQkJXAotCSAgICAodWludDY0X3QpX19zd2FwMzJtZChfX3N3YXA2NG1kX3ggJiAweGZmZmZmZmZmKSA8PCAzMjsJXAotfSkKLSNkZWZpbmUJX19zd2FwMTZtZCh4KSAoewkJCQkJCVwKLQl1aW50MTZfdCBfX3N3YXAxNm1kX3ggPSAoeCk7CQkJCQlcCi0JCQkJCQkJCQlcCi0JX19hc20gKCJyb3J3ICQ4LCAldzEiIDogIityIiAoX19zd2FwMTZtZF94KSk7CQkJXAotCV9fc3dhcDE2bWRfeDsJCQkJCQkJXAotfSkKLQotLyogVGVsbCBzeXMvZW5kaWFuLmggd2UgaGF2ZSBNRCB2YXJpYW50cyBvZiB0aGUgc3dhcCBtYWNyb3MuICAqLwotI2RlZmluZSBNRF9TV0FQCi0KLSNlbmRpZgkvKiBfX0dOVUNfXyAqLwotCi0jZGVmaW5lIF9CWVRFX09SREVSIF9MSVRUTEVfRU5ESUFOCi0jaW5jbHVkZSA8c3lzL2VuZGlhbi5oPgotCi0jZW5kaWYgLyogX0kzODZfRU5ESUFOX0hfICovCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L2luY2x1ZGUvbWFjaGluZS9fdHlwZXMuaCBiL2xpYmMvYXJjaC14ODYvaW5jbHVkZS9tYWNoaW5lL190eXBlcy5oCmluZGV4IDY1ODkyYTEuLjM4MDZmNzggMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvaW5jbHVkZS9tYWNoaW5lL190eXBlcy5oCisrKyBiL2xpYmMvYXJjaC14ODYvaW5jbHVkZS9tYWNoaW5lL190eXBlcy5oCkBAIC0zNSwzMSArMzUsNiBAQAogI2lmbmRlZiBfSTM4Nl9fVFlQRVNfSF8KICNkZWZpbmUgX0kzODZfX1RZUEVTX0hfCiAKLS8qIHRoZSBrZXJuZWwgZGVmaW5lcyBzaXplX3QgYXMgdW5zaWduZWQgaW50LCBidXQgZysrIHdhbnRzIGl0IHRvIGJlIHVuc2lnbmVkIGxvbmcgKi8KLSNpZm5kZWYgX1NJWkVfVF9ERUZJTkVEXwotIyAgZGVmaW5lIF9TSVpFX1RfREVGSU5FRF8KLSMgIGlmZGVmIF9fQU5EUk9JRF9fCi0gICAgIHR5cGVkZWYgdW5zaWduZWQgaW50ICBzaXplX3Q7Ci0jICBlbHNlCi0gICAgIHR5cGVkZWYgdW5zaWduZWQgbG9uZyAgc2l6ZV90OwotIyAgZW5kaWYKLSNlbmRpZgotI2lmICFkZWZpbmVkKF9TU0laRV9UKSAmJiAhZGVmaW5lZChfU1NJWkVfVF9ERUZJTkVEXykKLSNkZWZpbmUgX1NTSVpFX1QKLSNkZWZpbmUgX1NTSVpFX1RfREVGSU5FRF8KLXR5cGVkZWYgbG9uZyBpbnQgICAgICAgc3NpemVfdDsKLSNlbmRpZgotI2lmbmRlZiBfUFRSRElGRl9UCi0jZGVmaW5lIF9QVFJESUZGX1QKLSMgIGlmZGVmIF9fQU5EUk9JRF9fCi0gICAgIHR5cGVkZWYgaW50ICAgICAgICAgICAgcHRyZGlmZl90OwotIyAgZWxzZQotICAgICB0eXBlZGVmIGxvbmcgICAgICAgICAgIHB0cmRpZmZfdDsKLSMgIGVuZGlmCi0jZW5kaWYKLQotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0KIC8qIDcuMTguMS4xIEV4YWN0LXdpZHRoIGludGVnZXIgdHlwZXMgKi8KIHR5cGVkZWYJX19zaWduZWQgY2hhcgkJX19pbnQ4X3Q7CiB0eXBlZGVmCXVuc2lnbmVkIGNoYXIJCV9fdWludDhfdDsKQEAgLTExMiw2ICs4Nyw4IEBACiAvKiBTdGFuZGFyZCBzeXN0ZW0gdHlwZXMgKi8KIHR5cGVkZWYgaW50CQkJX19jbG9ja190OwogdHlwZWRlZiBpbnQJCQlfX2Nsb2NraWRfdDsKK3R5cGVkZWYgZG91YmxlCQkJX19kb3VibGVfdDsKK3R5cGVkZWYgZmxvYXQJCQlfX2Zsb2F0X3Q7CiB0eXBlZGVmIGxvbmcJCQlfX3B0cmRpZmZfdDsKIHR5cGVkZWYJaW50CQkJX190aW1lX3Q7CiB0eXBlZGVmIGludAkJCV9fdGltZXJfdDsKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvaW5jbHVkZS9tYWNoaW5lL2FzbS5oIGIvbGliYy9hcmNoLXg4Ni9pbmNsdWRlL21hY2hpbmUvYXNtLmgKaW5kZXggNDlkM2VhOC4uMmU4ZDI5OCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9pbmNsdWRlL21hY2hpbmUvYXNtLmgKKysrIGIvbGliYy9hcmNoLXg4Ni9pbmNsdWRlL21hY2hpbmUvYXNtLmgKQEAgLTEsNSArMSw0IEBACi0vKgkkT3BlbkJTRDogYXNtLmgsdiAxLjggMjAwNC8wNi8xMyAyMTo0OToxNiBuaWtsYXMgRXhwICQJKi8KLS8qCSROZXRCU0Q6IGFzbS5oLHYgMS43IDE5OTQvMTAvMjcgMDQ6MTU6NTYgY2dkIEV4cCAkCSovCisvKgkkTmV0QlNEOiBhc20uaCx2IDEuNDAgMjAxMS8wNi8xNiAxMzoxNjoyMCBqb2VyZyBFeHAgJAkqLwogCiAvKi0KICAqIENvcHlyaWdodCAoYykgMTk5MCBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLgpAQCAtMzgsMjQgKzM3LDE3IEBACiAjaWZuZGVmIF9JMzg2X0FTTV9IXwogI2RlZmluZSBfSTM4Nl9BU01fSF8KIAotLyogVGhpcyBpcyBib3Jyb3dlZCBmcm9tIEZyZWVCU0QgL3NyYy9zeXMvaTM4Ni9pbmNsdWRlL2FzbWFjcm9zLmggdjEuMjcgKi8KLS8qCi0gKiBDTkFNRSBhbmQgSElERU5BTUUgbWFuYWdlIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBzeW1ib2wgbmFtZXMgaW4gQwotICogYW5kIHRoZSBlcXVpdmFsZW50IGFzc2VtYmx5IGxhbmd1YWdlIG5hbWVzLiAgQ05BTUUgaXMgZ2l2ZW4gYSBuYW1lIGFzCi0gKiBpdCB3b3VsZCBiZSB1c2VkIGluIGEgQyBwcm9ncmFtLiAgSXQgZXhwYW5kcyB0byB0aGUgZXF1aXZhbGVudCBhc3NlbWJseQotICogbGFuZ3VhZ2UgbmFtZS4gIEhJREVOQU1FIGlzIGdpdmVuIGFuIGFzc2VtYmx5LWxhbmd1YWdlIG5hbWUsIGFuZCBleHBhbmRzCi0gKiB0byBhIHBvc3NpYmx5LW1vZGlmaWVkIGZvcm0gdGhhdCB3aWxsIGJlIGludmlzaWJsZSB0byBDIHByb2dyYW1zLgotICovCi0jZGVmaW5lIENOQU1FKGNzeW0pICAgICAgICAgICAgIGNzeW0KLSNkZWZpbmUgSElERU5BTUUoYXNtc3ltKSAgICAgICAgLmFzbXN5bQorI2lmZGVmIF9LRVJORUxfT1BUCisjaW5jbHVkZSAib3B0X211bHRpcHJvY2Vzc29yLmgiCisjZW5kaWYKIAogI2lmZGVmIFBJQwogI2RlZmluZSBQSUNfUFJPTE9HVUUJXAogCXB1c2hsCSVlYng7CVwKLQljYWxsCTY2NmY7CVwKLTY2NjoJCQlcCisJY2FsbAkxZjsJXAorMToJCQlcCiAJcG9wbAklZWJ4OwlcCi0JYWRkbAkkX0NfTEFCRUwoX0dMT0JBTF9PRkZTRVRfVEFCTEVfKStbLi02NjZiXSwgJWVieAorCWFkZGwJJF9HTE9CQUxfT0ZGU0VUX1RBQkxFXytbLi0xYl0sICVlYngKICNkZWZpbmUgUElDX0VQSUxPR1VFCVwKIAlwb3BsCSVlYngKICNkZWZpbmUgUElDX1BMVCh4KQl4QFBMVApAQCAtNjksMTAgKzYxLDE4IEBACiAjZGVmaW5lIFBJQ19HT1RPRkYoeCkJeAogI2VuZGlmCiAKLSNkZWZpbmUgX0NfTEFCRUwobmFtZSkJbmFtZQorI2lmZGVmIF9fRUxGX18KKyMgZGVmaW5lIF9DX0xBQkVMKHgpCXgKKyNlbHNlCisjIGlmZGVmIF9fU1REQ19fCisjICBkZWZpbmUgX0NfTEFCRUwoeCkJXyAjIyB4CisjIGVsc2UKKyMgIGRlZmluZSBfQ19MQUJFTCh4KQlfLyoqL3gKKyMgZW5kaWYKKyNlbmRpZgogI2RlZmluZQlfQVNNX0xBQkVMKHgpCXgKIAotI2RlZmluZSBDVkFST0ZGKHgsIHkpCV9DX0xBQkVMKHgpICsgeQorI2RlZmluZSBDVkFST0ZGKHgsIHkpCQlfQ19MQUJFTCh4KSArIHkKIAogI2lmZGVmIF9fU1REQ19fCiAjIGRlZmluZSBfX0NPTkNBVCh4LHkpCXggIyMgeQpAQCAtODIsNTMgKzgyLDEzNyBAQAogIyBkZWZpbmUgX19TVFJJTkcoeCkJIngiCiAjZW5kaWYKIAotLyoKLSAqIFdFQUsgQUxJQVM6IGNyZWF0ZSBhIHdlYWsgYWxpYXMKLSAqLwotI2RlZmluZSBXRUFLX0FMSUFTKGFsaWFzLHN5bSkgXAotCS53ZWFrIGFsaWFzOyBcCi0JYWxpYXMgPSBzeW0KLQotLyoKLSAqIFdBUk5fUkVGRVJFTkNFUzogY3JlYXRlIGEgd2FybmluZyBpZiB0aGUgc3BlY2lmaWVkIHN5bWJvbCBpcyByZWZlcmVuY2VkCi0gKi8KLSNkZWZpbmUgV0FSTl9SRUZFUkVOQ0VTKF9zeW0sX21zZykJXAotCS5zZWN0aW9uIC5nbnUud2FybmluZy4gIyMgX3N5bSA7IC5hc2NpaSBfbXNnIDsgLnRleHQKLQogLyogbGV0IGtlcm5lbHMgYW5kIG90aGVycyBvdmVycmlkZSBlbnRyeXBvaW50IGFsaWdubWVudCAqLwotI2lmbmRlZiBfQUxJR05fVEVYVAotIyBkZWZpbmUgX0FMSUdOX1RFWFQgLmFsaWduIDIsIDB4OTAKKyNpZiAhZGVmaW5lZChfQUxJR05fVEVYVCkgJiYgIWRlZmluZWQoX0tFUk5FTCkKKyMgaWZkZWYgX1NUQU5EQUxPTkUKKyMgIGRlZmluZSBfQUxJR05fVEVYVCAuYWxpZ24gMQorIyBlbGlmIGRlZmluZWQgX19FTEZfXworIyAgZGVmaW5lIF9BTElHTl9URVhUIC5hbGlnbiAxNgorIyBlbHNlCisjICBkZWZpbmUgX0FMSUdOX1RFWFQgLmFsaWduIDQKKyMgZW5kaWYKICNlbmRpZgogCiAjZGVmaW5lIF9FTlRSWSh4KSBcCiAJLnRleHQ7IF9BTElHTl9URVhUOyAuZ2xvYmwgeDsgLnR5cGUgeCxAZnVuY3Rpb247IHg6CisjZGVmaW5lIF9MQUJFTCh4KSBcCisJLmdsb2JsIHg7IHg6CiAKLSNkZWZpbmUgX0FTTV9TSVpFKHgpICAgIC5zaXplIHgsIC4teDsKKyNpZmRlZiBfS0VSTkVMCiAKLSNkZWZpbmUgX0VORCh4KSBcCi0JLmZuZW5kOyBcCi0JX0FTTV9TSVpFKHgpCisjZGVmaW5lIENQVVZBUihvZmYpICVmczpfX0NPTkNBVChDUFVfSU5GT18sb2ZmKQorCisvKiBYWFggQ2FuJ3QgdXNlIF9fQ09OQ0FUKCkgaGVyZSwgYXMgaXQgd291bGQgYmUgZXZhbHVhdGVkIGluY29ycmVjdGx5LiAqLworI2lmZGVmIF9fRUxGX18KKyNpZmRlZiBfX1NURENfXworI2RlZmluZQlJRFRWRUMobmFtZSkgXAorCUFMSUdOX1RFWFQ7IC5nbG9ibCBYICMjIG5hbWU7IC50eXBlIFggIyMgbmFtZSxAZnVuY3Rpb247IFggIyMgbmFtZToKKyNkZWZpbmUJSURUVkVDX0VORChuYW1lKSBcCisJLnNpemUgWCAjIyBuYW1lLCAuIC0gWCAjIyBuYW1lCisjZWxzZSAKKyNkZWZpbmUJSURUVkVDKG5hbWUpIFwKKwlBTElHTl9URVhUOyAuZ2xvYmwgWC8qKi9uYW1lOyAudHlwZSBYLyoqL25hbWUsQGZ1bmN0aW9uOyBYLyoqL25hbWU6CisjZGVmaW5lCUlEVFZFQ19FTkQobmFtZSkgXAorCS5zaXplIFgvKiovbmFtZSwgLiAtIFgvKiovbmFtZQorI2VuZGlmIC8qIF9fU1REQ19fICovIAorI2Vsc2UgCisjaWZkZWYgX19TVERDX18KKyNkZWZpbmUJSURUVkVDKG5hbWUpIFwKKwlBTElHTl9URVhUOyAuZ2xvYmwgX1ggIyMgbmFtZTsgLnR5cGUgX1ggIyMgbmFtZSxAZnVuY3Rpb247IF9YICMjIG5hbWU6IAorI2RlZmluZQlJRFRWRUNfRU5EKG5hbWUpIFwKKwkuc2l6ZSBfWCAjIyBuYW1lLCAuIC0gX1ggIyMgbmFtZQorI2Vsc2UKKyNkZWZpbmUJSURUVkVDKG5hbWUpIFwKKwlBTElHTl9URVhUOyAuZ2xvYmwgX1gvKiovbmFtZTsgLnR5cGUgX1gvKiovbmFtZSxAZnVuY3Rpb247IF9YLyoqL25hbWU6CisjZGVmaW5lCUlEVFZFQ19FTkQobmFtZSkgXAorCS5zaXplIF9YLyoqL25hbWUsIC4gLSBfWC8qKi9uYW1lCisjZW5kaWYgLyogX19TVERDX18gKi8KKyNlbmRpZiAvKiBfX0VMRl9fICovCisKKyNpZmRlZiBfU1RBTkRBTE9ORQorI2RlZmluZSBBTElHTl9EQVRBCS5hbGlnbgk0CisjZGVmaW5lIEFMSUdOX1RFWFQJLmFsaWduCTQJLyogNC1ieXRlIGJvdW5kYXJpZXMgKi8KKyNkZWZpbmUgU1VQRVJBTElHTl9URVhUCS5hbGlnbgkxNgkvKiAxNS1ieXRlIGJvdW5kYXJpZXMgKi8KKyNlbGlmIGRlZmluZWQgX19FTEZfXworI2RlZmluZSBBTElHTl9EQVRBCS5hbGlnbgk0CisjZGVmaW5lIEFMSUdOX1RFWFQJLmFsaWduCTE2CS8qIDE2LWJ5dGUgYm91bmRhcmllcyAqLworI2RlZmluZSBTVVBFUkFMSUdOX1RFWFQJLmFsaWduCTE2CS8qIDE2LWJ5dGUgYm91bmRhcmllcyAqLworI2Vsc2UKKyNkZWZpbmUgQUxJR05fREFUQQkuYWxpZ24JMgorI2RlZmluZSBBTElHTl9URVhUCS5hbGlnbgk0CS8qIDE2LWJ5dGUgYm91bmRhcmllcyAqLworI2RlZmluZSBTVVBFUkFMSUdOX1RFWFQJLmFsaWduCTQJLyogMTYtYnl0ZSBib3VuZGFyaWVzICovCisjZW5kaWYgLyogX19FTEZfXyAqLworCisjZGVmaW5lIF9BTElHTl9URVhUIEFMSUdOX1RFWFQKIAogI2lmZGVmIEdQUk9GCi0jIGRlZmluZSBfUFJPRl9QUk9MT0dVRQlcCisjaWZkZWYgX19FTEZfXworI2RlZmluZQlNQ09VTlRfQVNNCWNhbGwJX0NfTEFCRUwoX19tY291bnQpCisjZWxzZSAvKiBfX0VMRl9fICovCisjZGVmaW5lCU1DT1VOVF9BU00JY2FsbAlfQ19MQUJFTChtY291bnQpCisjZW5kaWYgLyogX19FTEZfXyAqLworI2Vsc2UgLyogR1BST0YgKi8KKyNkZWZpbmUJTUNPVU5UX0FTTQkvKiBub3RoaW5nICovCisjZW5kaWYgLyogR1BST0YgKi8KKworI2VuZGlmIC8qIF9LRVJORUwgKi8KKworCisKKyNpZmRlZiBHUFJPRgorIyBpZmRlZiBfX0VMRl9fCisjICBkZWZpbmUgX1BST0ZfUFJPTE9HVUUJXAorCXB1c2hsICVlYnA7IG1vdmwgJWVzcCwlZWJwOyBjYWxsIFBJQ19QTFQoX19tY291bnQpOyBwb3BsICVlYnAKKyMgZWxzZSAKKyMgIGRlZmluZSBfUFJPRl9QUk9MT0dVRQlcCiAJcHVzaGwgJWVicDsgbW92bCAlZXNwLCVlYnA7IGNhbGwgUElDX1BMVChtY291bnQpOyBwb3BsICVlYnAKKyMgZW5kaWYKICNlbHNlCiAjIGRlZmluZSBfUFJPRl9QUk9MT0dVRQogI2VuZGlmCiAKICNkZWZpbmUJRU5UUlkoeSkJX0VOVFJZKF9DX0xBQkVMKHkpKTsgX1BST0ZfUFJPTE9HVUUKICNkZWZpbmUJTkVOVFJZKHkpCV9FTlRSWShfQ19MQUJFTCh5KSkKLSNkZWZpbmUJRU5EKHkpCQlfRU5EKF9DX0xBQkVMKHkpKQogI2RlZmluZQlBU0VOVFJZKHkpCV9FTlRSWShfQVNNX0xBQkVMKHkpKTsgX1BST0ZfUFJPTE9HVUUKLQotI2RlZmluZSBFTlRSWV9QUklWQVRFKHkpICBFTlRSWSh5KTsgLmhpZGRlbiBfQ19MQUJFTCh5KQotCi0KLSNkZWZpbmUJQUxURU5UUlkobmFtZSkJLmdsb2JsIF9DX0xBQkVMKG5hbWUpOyBfQ19MQUJFTChuYW1lKToKKyNkZWZpbmUJTEFCRUwoeSkJX0xBQkVMKF9DX0xBQkVMKHkpKQorI2RlZmluZQlFTkQoeSkJCS5zaXplIHksIC4gLSB5CiAKICNkZWZpbmUJQVNNU1RSCQkuYXNjaXoKIAorI2lmZGVmIF9fRUxGX18KKyNkZWZpbmUgUkNTSUQoeCkJLnB1c2hzZWN0aW9uICIuaWRlbnQiOyAuYXNjaXogeDsgLnBvcHNlY3Rpb24KKyNlbHNlCiAjZGVmaW5lIFJDU0lEKHgpCS50ZXh0OyAuYXNjaXogeAotI2RlZmluZSBfX0ZCU0RJRCh4KSAgICAgUkNTSUQoeCkKKyNlbmRpZgorCisjaWZkZWYgTk9fS0VSTkVMX1JDU0lEUworI2RlZmluZQlfX0tFUk5FTF9SQ1NJRChfbiwgX3MpCS8qIG5vdGhpbmcgKi8KKyNlbHNlCisjZGVmaW5lCV9fS0VSTkVMX1JDU0lEKF9uLCBfcykJUkNTSUQoX3MpCisjZW5kaWYKKworI2lmZGVmIF9fRUxGX18KKyNkZWZpbmUJV0VBS19BTElBUyhhbGlhcyxzeW0pCQkJCQkJXAorCS53ZWFrIGFsaWFzOwkJCQkJCQlcCisJYWxpYXMgPSBzeW0KKyNlbmRpZgorLyoKKyAqIFNUUk9OR19BTElBUzogY3JlYXRlIGEgc3Ryb25nIGFsaWFzLgorICovCisjZGVmaW5lIFNUUk9OR19BTElBUyhhbGlhcyxzeW0pCQkJCQkJXAorCS5nbG9ibCBhbGlhczsJCQkJCQkJXAorCWFsaWFzID0gc3ltCisKKyNpZmRlZiBfX1NURENfXworI2RlZmluZQlXQVJOX1JFRkVSRU5DRVMoc3ltLG1zZykJCQkJCVwKKwkucHVzaHNlY3Rpb24gLmdudS53YXJuaW5nLiAjIyBzeW07CQkJCVwKKwkuYXNjaWkgbXNnOwkJCQkJCQlcCisJLnBvcHNlY3Rpb24KKyNlbHNlCisjZGVmaW5lCVdBUk5fUkVGRVJFTkNFUyhzeW0sbXNnKQkJCQkJXAorCS5wdXNoc2VjdGlvbiAuZ251Lndhcm5pbmcuLyoqL3N5bTsJCQkJXAorCS5hc2NpaSBtc2c7CQkJCQkJCVwKKwkucG9wc2VjdGlvbgorI2VuZGlmIC8qIF9fU1REQ19fICovCiAKICNlbmRpZiAvKiAhX0kzODZfQVNNX0hfICovCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L2luY2x1ZGUvbWFjaGluZS9lbGZfbWFjaGRlcC5oIGIvbGliYy9hcmNoLXg4Ni9pbmNsdWRlL21hY2hpbmUvZWxmX21hY2hkZXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NDJjNTYxCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9pbmNsdWRlL21hY2hpbmUvZWxmX21hY2hkZXAuaApAQCAtMCwwICsxLDYzIEBACisvKgkkTmV0QlNEOiBlbGZfbWFjaGRlcC5oLHYgMS4xMCAyMDA5LzA1LzMwIDA1OjU2OjUyIHNrcmxsIEV4cCAkCSovCisKKyNkZWZpbmUJRUxGMzJfTUFDSERFUF9FTkRJQU5ORVNTCUVMRkRBVEEyTFNCCisjZGVmaW5lCUVMRjMyX01BQ0hERVBfSURfQ0FTRVMJCQkJCQlcCisJCWNhc2UgRU1fMzg2OgkJCQkJCVwKKwkJY2FzZSBFTV80ODY6CQkJCQkJXAorCQkJYnJlYWs7CisKKyNkZWZpbmUJRUxGNjRfTUFDSERFUF9FTkRJQU5ORVNTCVhYWAkvKiBicmVhayBjb21waWxhdGlvbiAqLworI2RlZmluZQlFTEY2NF9NQUNIREVQX0lEX0NBU0VTCQkJCQkJXAorCQkvKiBubyA2NC1iaXQgRUxGIG1hY2hpbmUgdHlwZXMgc3VwcG9ydGVkICovCisKKyNkZWZpbmUJRUxGMzJfTUFDSERFUF9JRAkJRU1fMzg2CisKKyNkZWZpbmUgQVJDSF9FTEZTSVpFCQkzMgkvKiBNRCBuYXRpdmUgYmluYXJ5IHNpemUgKi8KKworLyogaTM4NiByZWxvY2F0aW9ucyAqLworI2RlZmluZQlSXzM4Nl9OT05FCTAKKyNkZWZpbmUJUl8zODZfMzIJMQorI2RlZmluZQlSXzM4Nl9QQzMyCTIKKyNkZWZpbmUJUl8zODZfR09UMzIJMworI2RlZmluZQlSXzM4Nl9QTFQzMgk0CisjZGVmaW5lCVJfMzg2X0NPUFkJNQorI2RlZmluZQlSXzM4Nl9HTE9CX0RBVAk2CisjZGVmaW5lCVJfMzg2X0pNUF9TTE9UCTcKKyNkZWZpbmUJUl8zODZfUkVMQVRJVkUJOAorI2RlZmluZQlSXzM4Nl9HT1RPRkYJOQorI2RlZmluZQlSXzM4Nl9HT1RQQwkxMAorCisvKiBUTFMgcmVsb2NhdGlvbnMgKi8KKyNkZWZpbmUJUl8zODZfVExTX1RQT0ZGCTE0CisjZGVmaW5lCVJfMzg2X1RMU19JRQkxNQorI2RlZmluZQlSXzM4Nl9UTFNfR09USUUJMTYKKyNkZWZpbmUJUl8zODZfVExTX0xFCTE3CisjZGVmaW5lCVJfMzg2X1RMU19HRAkxOAorI2RlZmluZQlSXzM4Nl9UTFNfTERNCTE5CisKKy8qIFRoZSBmb2xsb3dpbmcgcmVsb2NhdGlvbnMgYXJlIEdOVSBleHRlbnNpb25zLiAqLworI2RlZmluZQlSXzM4Nl8xNgkyMAorI2RlZmluZQlSXzM4Nl9QQzE2CTIxCisjZGVmaW5lCVJfMzg2XzgJCTIyCisjZGVmaW5lCVJfMzg2X1BDOAkyMworCisvKiBNb3JlIFRMUyByZWxvY2F0aW9ucyAqLworI2RlZmluZQlSXzM4Nl9UTFNfR0RfMzIJCTI0CisjZGVmaW5lCVJfMzg2X1RMU19HRF9QVVNICTI1CisjZGVmaW5lCVJfMzg2X1RMU19HRF9DQUxMCTI2CisjZGVmaW5lCVJfMzg2X1RMU19HRF9QT1AJMjcKKyNkZWZpbmUJUl8zODZfVExTX0xETV8zMgkyOAorI2RlZmluZQlSXzM4Nl9UTFNfTERNX1BVU0gJMjkKKyNkZWZpbmUJUl8zODZfVExTX0xETV9DQUxMCTMwCisjZGVmaW5lCVJfMzg2X1RMU19MRE1fUE9QCTMxCisjZGVmaW5lCVJfMzg2X1RMU19MRE9fMzIJMzIKKyNkZWZpbmUJUl8zODZfVExTX0lFXzMyCQkzMworI2RlZmluZQlSXzM4Nl9UTFNfTEVfMzIJCTM0CisjZGVmaW5lCVJfMzg2X1RMU19EVFBNT0QzMgkzNQorI2RlZmluZQlSXzM4Nl9UTFNfRFRQT0ZGMzIJMzYKKyNkZWZpbmUJUl8zODZfVExTX1RQT0ZGMzIJMzcKKyNkZWZpbmUJUl8zODZfVExTX0dPVERFU0MJMzkKKyNkZWZpbmUJUl8zODZfVExTX0RFU0NfQ0FMTAk0MAorI2RlZmluZQlSXzM4Nl9UTFNfREVTQwkJNDEKKworI2RlZmluZQlSX1RZUEUobmFtZSkJX19DT05DQVQoUl8zODZfLG5hbWUpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L2luY2x1ZGUvbWFjaGluZS9lbmRpYW4uaCBiL2xpYmMvYXJjaC14ODYvaW5jbHVkZS9tYWNoaW5lL2VuZGlhbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxNTA2YjEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L2luY2x1ZGUvbWFjaGluZS9lbmRpYW4uaApAQCAtMCwwICsxLDYxIEBACisvKgkkT3BlbkJTRDogZW5kaWFuLmgsdiAxLjE3IDIwMTEvMDMvMTIgMDQ6MDM6MDQgZ3VlbnRoZXIgRXhwICQJKi8KKworLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTcgTmlrbGFzIEhhbGxxdmlzdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgX01BQ0hJTkVfRU5ESUFOX0hfCisjZGVmaW5lIF9NQUNISU5FX0VORElBTl9IXworCisjaWZkZWYgX19HTlVDX18KKworI2RlZmluZQlfX3N3YXAzMm1kKHgpIF9fc3RhdGVtZW50KHsJCQkJCVwKKwl1aW50MzJfdCBfX3N3YXAzMm1kX3ggPSAoeCk7CQkJCQlcCisJCQkJCQkJCQlcCisJX19hc20gKCJic3dhcCAlMCIgOiAiK3IiIChfX3N3YXAzMm1kX3gpKTsJCQlcCisJX19zd2FwMzJtZF94OwkJCQkJCQlcCit9KQorCisjZGVmaW5lCV9fc3dhcDY0bWQoeCkgX19zdGF0ZW1lbnQoewkJCQkJXAorCXVpbnQ2NF90IF9fc3dhcDY0bWRfeCA9ICh4KTsJCQkJCVwKKwkJCQkJCQkJCVwKKwkodWludDY0X3QpX19zd2FwMzJtZChfX3N3YXA2NG1kX3ggPj4gMzIpIHwJCQlcCisJICAgICh1aW50NjRfdClfX3N3YXAzMm1kKF9fc3dhcDY0bWRfeCAmIDB4ZmZmZmZmZmYpIDw8IDMyOwlcCit9KQorI2RlZmluZQlfX3N3YXAxNm1kKHgpIF9fc3RhdGVtZW50KHsJCQkJCVwKKwl1aW50MTZfdCBfX3N3YXAxNm1kX3ggPSAoeCk7CQkJCQlcCisJCQkJCQkJCQlcCisJX19hc20gKCJyb3J3ICQ4LCAldzAiIDogIityIiAoX19zd2FwMTZtZF94KSk7CQkJXAorCV9fc3dhcDE2bWRfeDsJCQkJCQkJXAorfSkKKworLyogVGVsbCBzeXMvZW5kaWFuLmggd2UgaGF2ZSBNRCB2YXJpYW50cyBvZiB0aGUgc3dhcCBtYWNyb3MuICAqLworI2RlZmluZSBNRF9TV0FQCisKKyNlbmRpZgkvKiBfX0dOVUNfXyAqLworCisjZGVmaW5lIF9CWVRFX09SREVSIF9MSVRUTEVfRU5ESUFOCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL2VuZGlhbi5oPgorCisjZW5kaWYgLyogX01BQ0hJTkVfRU5ESUFOX0hfICovCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L2luY2x1ZGUvc3lzL2F0b21pY3MuaCBiL2xpYmMvYXJjaC14ODYvaW5jbHVkZS9zeXMvYXRvbWljcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YWVkM2FlLi4wMDAwMDAwCi0tLSBhL2xpYmMvYXJjaC14ODYvaW5jbHVkZS9zeXMvYXRvbWljcy5oCisrKyAvZGV2L251bGwKQEAgLTEsNjUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqICAgIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKLSAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi0gKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCi0gKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAotICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCi0gKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKLSAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotI2lmbmRlZiBfU1lTX0FUT01JQ1NfSAotI2RlZmluZSBfU1lTX0FUT01JQ1NfSAotCi0jaW5jbHVkZSA8c3lzL2NkZWZzLmg+Ci0jaW5jbHVkZSA8c3lzL3RpbWUuaD4KLQotX19CRUdJTl9ERUNMUwotCi1zdGF0aWMgaW5saW5lIF9fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBpbnQKLV9fYXRvbWljX2NtcHhjaGcoaW50IG9sZCwgaW50IF9uZXcsIHZvbGF0aWxlIGludCAqcHRyKQotewotICByZXR1cm4gIV9fc3luY19ib29sX2NvbXBhcmVfYW5kX3N3YXAgKHB0ciwgb2xkLCBfbmV3KTsKLX0KLQotc3RhdGljIGlubGluZSBfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgaW50Ci1fX2F0b21pY19zd2FwKGludCBfbmV3LCB2b2xhdGlsZSBpbnQgKnB0cikKLXsKLSAgcmV0dXJuIF9fc3luY19sb2NrX3Rlc3RfYW5kX3NldChwdHIsIF9uZXcpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBpbnQKLV9fYXRvbWljX2RlYyh2b2xhdGlsZSBpbnQgKnB0cikKLXsKLSAgcmV0dXJuIF9fc3luY19mZXRjaF9hbmRfc3ViIChwdHIsIDEpOwotfQotCi1zdGF0aWMgaW5saW5lIF9fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKSBpbnQKLV9fYXRvbWljX2luYyh2b2xhdGlsZSBpbnQgKnB0cikKLXsKLSAgcmV0dXJuIF9fc3luY19mZXRjaF9hbmRfYWRkIChwdHIsIDEpOwotfQotCi1pbnQgX19mdXRleF93YWl0KHZvbGF0aWxlIHZvaWQgKmZ0eCwgaW50IHZhbCwgY29uc3Qgc3RydWN0IHRpbWVzcGVjICp0aW1lb3V0KTsKLWludCBfX2Z1dGV4X3dha2Uodm9sYXRpbGUgdm9pZCAqZnR4LCBpbnQgY291bnQpOwotCi1fX0VORF9ERUNMUwotCi0jZW5kaWYgLyogX1NZU19BVE9NSUNTX0ggKi8KZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3RyaW5nL2JjbXAuUyBiL2xpYmMvYXJjaC14ODYvc3RyaW5nL2JjbXAuUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTViNDZhZS4uMDAwMDAwMAotLS0gYS9saWJjL2FyY2gteDg2L3N0cmluZy9iY21wLlMKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi0vKgkkT3BlbkJTRDogYmNtcC5TLHYgMS4zIDIwMDUvMDgvMDcgMTE6MzA6MzggZXNwaWUgRXhwICQgKi8KLS8qCi0gKiBXcml0dGVuIGJ5IEouVC4gQ29ua2xpbiA8anRjQG5ldGJzZC5vcmc+LgotICogUHVibGljIGRvbWFpbi4KLSAqLwotCi0jaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KLQotRU5UUlkoYmNtcCkKLQlwdXNobAklZWRpCi0JcHVzaGwJJWVzaQotCW1vdmwJMTIoJWVzcCksJWVkaQotCW1vdmwJMTYoJWVzcCksJWVzaQotCXhvcmwJJWVheCwlZWF4CQkvKiBjbGVhciByZXR1cm4gdmFsdWUgKi8KLQljbGQJCQkJLyogc2V0IGNvbXBhcmUgZGlyZWN0aW9uIGZvcndhcmQgKi8KLQotCW1vdmwJMjAoJWVzcCksJWVjeAkJLyogY29tcGFyZSBieSB3b3JkcyAqLwotCXNocmwJJDIsJWVjeAotCXJlcGUKLQljbXBzbAotCWpuZQlMMQotCi0JbW92bAkyMCglZXNwKSwlZWN4CQkvKiBjb21wYXJlIHJlbWFpbmRlciBieSBieXRlcyAqLwotCWFuZGwJJDMsJWVjeAotCXJlcGUKLQljbXBzYgotCWplCUwyCi0KLUwxOglpbmNsCSVlYXgKLUwyOglwb3BsCSVlc2kKLQlwb3BsCSVlZGkKLQlyZXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3RyaW5nL2Jjb3B5X3dyYXBwZXIuUyBiL2xpYmMvYXJjaC14ODYvc3RyaW5nL2Jjb3B5X3dyYXBwZXIuUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmE4Nzc0Yy4uMDAwMDAwMAotLS0gYS9saWJjL2FyY2gteDg2L3N0cmluZy9iY29weV93cmFwcGVyLlMKKysrIC9kZXYvbnVsbApAQCAtMSw0NSArMCwwIEBACi0vKgotQ29weXJpZ2h0IChjKSAyMDEwLCBJbnRlbCBDb3Jwb3JhdGlvbgotQWxsIHJpZ2h0cyByZXNlcnZlZC4KLQotUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci1tb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKLQotICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAotICAgICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLQotICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAotICAgICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgotICAgICogYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0KLSAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgSW50ZWwgQ29ycG9yYXRpb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0gICAgKiBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKLSAgICAqIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotCi1USElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECi1BTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgotQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0oSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci1MT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLUFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0oSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwotU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0qLwotCi0KLSNpZiBkZWZpbmVkKFVTRV9TU1NFMykKLQotIyBpbmNsdWRlICJjYWNoZV93cmFwcGVyLlMiCi0jIHVuZGVmIF9faTY4NgotIyBkZWZpbmUgTUVNQ1BZCWJjb3B5Ci0jIGRlZmluZSBVU0VfQVNfTUVNTU9WRQotIyBkZWZpbmUgVVNFX0FTX0JDT1BZCi0jIGluY2x1ZGUgInNzc2UzLW1lbWNweTUuUyIKLQotI2Vsc2UKLQotIyBpbmNsdWRlICJiY29weS5TIgotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3RyaW5nL2J6ZXJvLlMgYi9saWJjL2FyY2gteDg2L3N0cmluZy9iemVyby5TCmluZGV4IDJlYzljN2QuLmM3M2EzNTEgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3RyaW5nL2J6ZXJvLlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zdHJpbmcvYnplcm8uUwpAQCAtNDEsMyArNDEsNCBAQAogCiAJcG9wbAklZWRpCiAJcmV0CitFTkQoYnplcm8pCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N0cmluZy9iemVyb193cmFwcGVyLlMgYi9saWJjL2FyY2gteDg2L3N0cmluZy9iemVyb193cmFwcGVyLlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhMWJiOWMuLjAwMDAwMDAKLS0tIGEvbGliYy9hcmNoLXg4Ni9zdHJpbmcvYnplcm9fd3JhcHBlci5TCisrKyAvZGV2L251bGwKQEAgLTEsNDMgKzAsMCBAQAotLyoKLUNvcHlyaWdodCAoYykgMjAxMCwgSW50ZWwgQ29ycG9yYXRpb24KLUFsbCByaWdodHMgcmVzZXJ2ZWQuCi0KLVJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6Ci0KLSAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKLSAgICAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0KLSAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKLSAgICAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KLSAgICAqIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotCi0gICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEludGVsIENvcnBvcmF0aW9uIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICAgICogbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0gICAgKiB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLQotVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAotQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLVdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLURJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKLUFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCi1BTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKLVNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKi8KLQotI2lmIGRlZmluZWQoVVNFX1NTRTIpCi0KLSMgaW5jbHVkZSAiY2FjaGVfd3JhcHBlci5TIgotIyB1bmRlZiBfX2k2ODYKLSMgZGVmaW5lIFVTRV9BU19CWkVSTwotIyBkZWZpbmUgc3NlMl9tZW1zZXQ1X2F0b20gYnplcm8KLSMgaW5jbHVkZSAic3NlMi1tZW1zZXQ1LWF0b20uUyIKLQotI2Vsc2UKLQotIyBpbmNsdWRlICJiemVyby5TIgotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3RyaW5nL2NhY2hlX3dyYXBwZXIuUyBiL2xpYmMvYXJjaC14ODYvc3RyaW5nL2NhY2hlLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGxpYmMvYXJjaC14ODYvc3RyaW5nL2NhY2hlX3dyYXBwZXIuUwpyZW5hbWUgdG8gbGliYy9hcmNoLXg4Ni9zdHJpbmcvY2FjaGUuaApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zdHJpbmcvZmZzLlMgYi9saWJjL2FyY2gteDg2L3N0cmluZy9mZnMuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kODE5MzA2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9zdHJpbmcvZmZzLlMKQEAgLTAsMCArMSwxOCBAQAorLyoJJE9wZW5CU0Q6IGZmcy5TLHYgMS4zIDIwMDUvMDgvMDcgMTE6MzA6MzggZXNwaWUgRXhwICQgKi8KKy8qCisgKiBXcml0dGVuIGJ5IEouVC4gQ29ua2xpbiA8anRjQG5ldGJzZC5vcmc+LgorICogUHVibGljIGRvbWFpbi4KKyAqLworCisjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KKworRU5UUlkoZmZzKQorCWJzZmwJNCglZXNwKSwlZWF4CisJanoJTDEJIAkJLyogWkYgaXMgc2V0IGlmIGFsbCBiaXRzIGFyZSAwICovCisJaW5jbAklZWF4CQkJLyogYml0cyBudW1iZXJlZCBmcm9tIDEsIG5vdCAwICovCisJcmV0CisKKwkuYWxpZ24gMgorTDE6CXhvcmwJJWVheCwlZWF4CQkvKiBjbGVhciByZXN1bHQgKi8KKwlyZXQKK0VORChmZnMpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N0cmluZy9mc3MuUyBiL2xpYmMvYXJjaC14ODYvc3RyaW5nL2Zzcy5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NmFmZmFiLi4wMDAwMDAwCi0tLSBhL2xpYmMvYXJjaC14ODYvc3RyaW5nL2Zzcy5TCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotLyoJJE9wZW5CU0Q6IGZmcy5TLHYgMS4zIDIwMDUvMDgvMDcgMTE6MzA6MzggZXNwaWUgRXhwICQgKi8KLS8qCi0gKiBXcml0dGVuIGJ5IEouVC4gQ29ua2xpbiA8anRjQG5ldGJzZC5vcmc+LgotICogUHVibGljIGRvbWFpbi4KLSAqLwotCi0jaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KLQotRU5UUlkoZmZzKQotCWJzZmwJNCglZXNwKSwlZWF4Ci0JanoJTDEJIAkJLyogWkYgaXMgc2V0IGlmIGFsbCBiaXRzIGFyZSAwICovCi0JaW5jbAklZWF4CQkJLyogYml0cyBudW1iZXJlZCBmcm9tIDEsIG5vdCAwICovCi0JcmV0Ci0KLQkuYWxpZ24gMgotTDE6CXhvcmwJJWVheCwlZWF4CQkvKiBjbGVhciByZXN1bHQgKi8KLQlyZXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3RyaW5nL2luZGV4LlMgYi9saWJjL2FyY2gteDg2L3N0cmluZy9pbmRleC5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZjgzZWY1Li4wMDAwMDAwCi0tLSBhL2xpYmMvYXJjaC14ODYvc3RyaW5nL2luZGV4LlMKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi0vKgkkT3BlbkJTRDogaW5kZXguUyx2IDEuNCAyMDA1LzA4LzA3IDExOjMwOjM4IGVzcGllIEV4cCAkICovCi0vKgotICogV3JpdHRlbiBieSBKLlQuIENvbmtsaW4gPGp0Y0BuZXRic2Qub3JnPi4KLSAqIFB1YmxpYyBkb21haW4uCi0gKi8KLQotI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+Ci0KLSNpZmRlZiBTVFJDSFIKLUVOVFJZKHN0cmNocikKLSNlbHNlCi1FTlRSWShpbmRleCkKLSNlbmRpZgotCW1vdmwJNCglZXNwKSwlZWF4Ci0JbW92Ygk4KCVlc3ApLCVjbAotCS5hbGlnbiAyLDB4OTAKLUwxOgotCW1vdmIJKCVlYXgpLCVkbAotCWNtcGIJJWRsLCVjbAkJCS8qIGZvdW5kIGNoYXI/Pz8gKi8KLQlqZSAJTDIKLQlpbmNsCSVlYXgKLQl0ZXN0YgklZGwsJWRsCQkJLyogbnVsbCB0ZXJtaW5hdG9yPz8/ICovCi0Jam56CUwxCi0JeG9ybAklZWF4LCVlYXgKLUwyOgotCXJldApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zdHJpbmcvbWVtY2hyLlMgYi9saWJjL2FyY2gteDg2L3N0cmluZy9tZW1jaHIuUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDZiY2JlNi4uMDAwMDAwMAotLS0gYS9saWJjL2FyY2gteDg2L3N0cmluZy9tZW1jaHIuUworKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLS8qCSRPcGVuQlNEOiBtZW1jaHIuUyx2IDEuMyAyMDA1LzA4LzA3IDExOjMwOjM4IGVzcGllIEV4cCAkICovCi0vKgotICogV3JpdHRlbiBieSBKLlQuIENvbmtsaW4gPGp0Y0BuZXRic2Qub3JnPi4KLSAqIFB1YmxpYyBkb21haW4uCi0gKi8KLQotI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+Ci0KLUVOVFJZKG1lbWNocikKLQlwdXNobAklZWRpCi0JbW92bAk4KCVlc3ApLCVlZGkJCS8qIHN0cmluZyBhZGRyZXNzICovCi0JbW92bAkxMiglZXNwKSwlZWF4CQkvKiBzZXQgY2hhcmFjdGVyIHRvIHNlYXJjaCBmb3IgKi8KLQltb3ZsCTE2KCVlc3ApLCVlY3gJCS8qIHNldCBsZW5ndGggb2Ygc2VhcmNoICovCi0JdGVzdGwJJWVjeCwlZWN4CQkvKiB0ZXN0IGZvciBsZW4gPT0gMCAqLwotCWp6CUwxCi0JY2xkCQkJCS8qIHNldCBzZWFyY2ggZm9yd2FyZCAqLwotCXJlcG5lCQkJCS8qIHNlYXJjaCEgKi8KLQlzY2FzYgotCWpuZQlMMQkJCS8qIHNjYW4gZmFpbGVkLCByZXR1cm4gbnVsbCAqLwotCWxlYWwJLTEoJWVkaSksJWVheAkJLyogYWRqdXN0IHJlc3VsdCBvZiBzY2FuICovCi0JcG9wbAklZWRpCi0JcmV0Ci0JLmFsaWduIDIsMHg5MAotTDE6CXhvcmwJJWVheCwlZWF4Ci0JcG9wbAklZWRpCi0JcmV0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N0cmluZy9tZW1jbXAuUyBiL2xpYmMvYXJjaC14ODYvc3RyaW5nL21lbWNtcC5TCmluZGV4IDFiZTE4OWEuLjNiNTA1MzAgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3RyaW5nL21lbWNtcC5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3RyaW5nL21lbWNtcC5TCkBAIC00MSwzICs0MSw0IEBACiAJcG9wbAklZXNpCiAJcG9wbAklZWRpCiAJcmV0CitFTkQobWVtY21wKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zdHJpbmcvbWVtY21wX3dyYXBwZXIuUyBiL2xpYmMvYXJjaC14ODYvc3RyaW5nL21lbWNtcF93cmFwcGVyLlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZhMGM2NzIuLjAwMDAwMDAKLS0tIGEvbGliYy9hcmNoLXg4Ni9zdHJpbmcvbWVtY21wX3dyYXBwZXIuUworKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLS8qCi1Db3B5cmlnaHQgKGMpIDIwMTAsIEludGVsIENvcnBvcmF0aW9uCi1BbGwgcmlnaHRzIHJlc2VydmVkLgotCi1SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLW1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgotCi0gICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCi0gICAgKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotCi0gICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCi0gICAgKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCi0gICAgKiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLQotICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBJbnRlbCBDb3Jwb3JhdGlvbiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAgICAqIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICAgICogd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0KLVRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKLUFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi1XQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi1ESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCi1BTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLShJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLUxPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgotQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLShJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCi1TT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSovCi0KLSNpZiBkZWZpbmVkKFVTRV9TU1NFMykKLQotIyBkZWZpbmUgTUVNQ01QIG1lbWNtcAotIyBpbmNsdWRlICJzc3NlMy1tZW1jbXAzLW5ldy5TIgotCi0jZWxzZQotCi0jIGluY2x1ZGUgIm1lbWNtcC5TIgotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3RyaW5nL21lbWNweV93cmFwcGVyLlMgYi9saWJjL2FyY2gteDg2L3N0cmluZy9tZW1jcHlfd3JhcHBlci5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZTc2NWVhLi4wMDAwMDAwCi0tLSBhL2xpYmMvYXJjaC14ODYvc3RyaW5nL21lbWNweV93cmFwcGVyLlMKKysrIC9kZXYvbnVsbApAQCAtMSw0MyArMCwwIEBACi0vKgotQ29weXJpZ2h0IChjKSAyMDEwLCBJbnRlbCBDb3Jwb3JhdGlvbgotQWxsIHJpZ2h0cyByZXNlcnZlZC4KLQotUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci1tb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKLQotICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAotICAgICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLQotICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAotICAgICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgotICAgICogYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0KLSAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgSW50ZWwgQ29ycG9yYXRpb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0gICAgKiBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKLSAgICAqIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotCi1USElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECi1BTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgotQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0oSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci1MT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLUFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0oSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwotU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0qLwotCi0jaWYgZGVmaW5lZChVU0VfU1NTRTMpCi0KLSMgaW5jbHVkZSAiY2FjaGVfd3JhcHBlci5TIgotIyB1bmRlZiBfX2k2ODYKLSMgZGVmaW5lIE1FTUNQWQltZW1jcHkKLSMgZGVmaW5lIFVTRV9BU19NRU1NT1ZFCi0jIGluY2x1ZGUgInNzc2UzLW1lbWNweTUuUyIKLQotI2Vsc2UKLQotIyBpbmNsdWRlICJtZW1jcHkuUyIKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N0cmluZy9tZW1tb3ZlX3dyYXBwZXIuUyBiL2xpYmMvYXJjaC14ODYvc3RyaW5nL21lbW1vdmVfd3JhcHBlci5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZTgzZTI3Li4wMDAwMDAwCi0tLSBhL2xpYmMvYXJjaC14ODYvc3RyaW5nL21lbW1vdmVfd3JhcHBlci5TCisrKyAvZGV2L251bGwKQEAgLTEsNDMgKzAsMCBAQAotLyoKLUNvcHlyaWdodCAoYykgMjAxMCwgSW50ZWwgQ29ycG9yYXRpb24KLUFsbCByaWdodHMgcmVzZXJ2ZWQuCi0KLVJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6Ci0KLSAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKLSAgICAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0KLSAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKLSAgICAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KLSAgICAqIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotCi0gICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEludGVsIENvcnBvcmF0aW9uIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICAgICogbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0gICAgKiB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLQotVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAotQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLVdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLURJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKLUFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCi1BTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKLVNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKi8KLQotI2lmIGRlZmluZWQoVVNFX1NTU0UzKQotCi0jIGluY2x1ZGUgImNhY2hlX3dyYXBwZXIuUyIKLSMgdW5kZWYgX19pNjg2Ci0jIGRlZmluZSBNRU1DUFkgbWVtbW92ZQotIyBkZWZpbmUgVVNFX0FTX01FTU1PVkUKLSMgaW5jbHVkZSAic3NzZTMtbWVtY3B5NS5TIgotCi0jZWxzZQotCi0jIGluY2x1ZGUgIm1lbW1vdmUuUyIKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N0cmluZy9tZW1zZXQuUyBiL2xpYmMvYXJjaC14ODYvc3RyaW5nL21lbXNldC5TCmluZGV4IDEwNTljY2MuLjYyZTZhMTcgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3RyaW5nL21lbXNldC5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3RyaW5nL21lbXNldC5TCkBAIC01MywzICs1Myw0IEBACiAJcG9wbAklZWJ4CiAJcG9wbAklZWRpCiAJcmV0CitFTkQobWVtc2V0KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zdHJpbmcvbWVtc2V0X3dyYXBwZXIuUyBiL2xpYmMvYXJjaC14ODYvc3RyaW5nL21lbXNldF93cmFwcGVyLlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQwMzdhNTAuLjAwMDAwMDAKLS0tIGEvbGliYy9hcmNoLXg4Ni9zdHJpbmcvbWVtc2V0X3dyYXBwZXIuUworKysgL2Rldi9udWxsCkBAIC0xLDQyICswLDAgQEAKLS8qCi1Db3B5cmlnaHQgKGMpIDIwMTAsIEludGVsIENvcnBvcmF0aW9uCi1BbGwgcmlnaHRzIHJlc2VydmVkLgotCi1SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLW1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgotCi0gICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCi0gICAgKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotCi0gICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCi0gICAgKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCi0gICAgKiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLQotICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBJbnRlbCBDb3Jwb3JhdGlvbiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAgICAqIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICAgICogd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0KLVRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKLUFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi1XQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi1ESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCi1BTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLShJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLUxPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgotQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLShJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCi1TT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSovCi0KLSNpZiBkZWZpbmVkKFVTRV9TU0UyKQotCi0jIGluY2x1ZGUgImNhY2hlX3dyYXBwZXIuUyIKLSMgdW5kZWYgX19pNjg2Ci0jIGRlZmluZSBzc2UyX21lbXNldDVfYXRvbSBtZW1zZXQKLSMgaW5jbHVkZSAic3NlMi1tZW1zZXQ1LWF0b20uUyIKLQotI2Vsc2UKLQotIyBpbmNsdWRlICJtZW1zZXQuUyIKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N0cmluZy9yaW5kZXguUyBiL2xpYmMvYXJjaC14ODYvc3RyaW5nL3JpbmRleC5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMjYwZDM4Li4wMDAwMDAwCi0tLSBhL2xpYmMvYXJjaC14ODYvc3RyaW5nL3JpbmRleC5TCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotLyoJJE9wZW5CU0Q6IHJpbmRleC5TLHYgMS4zIDIwMDUvMDgvMDcgMTE6MzA6MzggZXNwaWUgRXhwICQgKi8KLS8qCi0gKiBXcml0dGVuIGJ5IEouVC4gQ29ua2xpbiA8anRjQG5ldGJzZC5vcmc+LgotICogUHVibGljIGRvbWFpbi4KLSAqLwotCi0jaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KLQotI2lmZGVmIFNUUlJDSFIKLUVOVFJZKHN0cnJjaHIpCi0jZWxzZQotRU5UUlkocmluZGV4KQotI2VuZGlmCi0JcHVzaGwJJWVieAotCW1vdmwJOCglZXNwKSwlZWR4Ci0JbW92YgkxMiglZXNwKSwlY2wKLQl4b3JsCSVlYXgsJWVheAkJLyogaW5pdCBwb2ludGVyIHRvIG51bGwgKi8KLQkuYWxpZ24gMiwweDkwCi1MMToKLQltb3ZiCSglZWR4KSwlYmwKLQljbXBiCSVibCwlY2wKLQlqbmUJTDIKLQltb3ZsCSVlZHgsJWVheAotTDI6Ci0JaW5jbAklZWR4Ci0JdGVzdGIJJWJsLCVibAkJCS8qIG51bGwgdGVybWluYXRvcj8/PyAqLwotCWpueglMMQotCXBvcGwJJWVieAotCXJldApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zdHJpbmcvc3NlMi1iemVyby1hdG9tLlMgYi9saWJjL2FyY2gteDg2L3N0cmluZy9zc2UyLWJ6ZXJvLWF0b20uUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZGRjNDk5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9zdHJpbmcvc3NlMi1iemVyby1hdG9tLlMKQEAgLTAsMCArMSwzMyBAQAorLyoKK0NvcHlyaWdodCAoYykgMjAxMCwgSW50ZWwgQ29ycG9yYXRpb24KK0FsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisKKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAgICAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisKKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAgICAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAgICAqIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCisgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEludGVsIENvcnBvcmF0aW9uIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICAgICogbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgICAgKiB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKK1dBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKK0RJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKK0FOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCitBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKK1NPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKi8KKworI2RlZmluZSBVU0VfQVNfQlpFUk8KKyNkZWZpbmUgTUVNU0VUICBiemVybworI2luY2x1ZGUgInNzZTItbWVtc2V0LWF0b20uUyIKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3RyaW5nL3NzZTItaW5kZXgtYXRvbS5TIGIvbGliYy9hcmNoLXg4Ni9zdHJpbmcvc3NlMi1pbmRleC1hdG9tLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDUxZTFkNAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc3RyaW5nL3NzZTItaW5kZXgtYXRvbS5TCkBAIC0wLDAgKzEsMzIgQEAKKy8qCitDb3B5cmlnaHQgKGMpIDIwMTEsIEludGVsIENvcnBvcmF0aW9uCitBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgICAgKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgICAgKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgICAgKiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKworICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBJbnRlbCBDb3Jwb3JhdGlvbiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAgICAqIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICAgICogd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKK0FOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECitXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCitESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCitBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyhJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKK0xPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyhJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCitTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisKKyNkZWZpbmUgc3RyY2hyICBpbmRleAorI2luY2x1ZGUgInNzZTItc3RyY2hyLWF0b20uUyIKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3RyaW5nL3NzZTItbWVtY2hyLWF0b20uUyBiL2xpYmMvYXJjaC14ODYvc3RyaW5nL3NzZTItbWVtY2hyLWF0b20uUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTNhZjliCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9zdHJpbmcvc3NlMi1tZW1jaHItYXRvbS5TCkBAIC0wLDAgKzEsNTU2IEBACisvKgorQ29weXJpZ2h0IChjKSAyMDExLCBJbnRlbCBDb3Jwb3JhdGlvbgorQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKworICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICAgICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKworICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICAgICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorICAgICogYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisKKyAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgSW50ZWwgQ29ycG9yYXRpb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgICAgKiBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAgICAqIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECitBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CitMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KK0FOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqLworCisjaWZuZGVmIEwKKyMgZGVmaW5lIEwobGFiZWwpCS5MIyNsYWJlbAorI2VuZGlmCisKKyNpZm5kZWYgY2ZpX3N0YXJ0cHJvYworIyBkZWZpbmUgY2ZpX3N0YXJ0cHJvYwkuY2ZpX3N0YXJ0cHJvYworI2VuZGlmCisKKyNpZm5kZWYgY2ZpX2VuZHByb2MKKyMgZGVmaW5lIGNmaV9lbmRwcm9jCS5jZmlfZW5kcHJvYworI2VuZGlmCisKKyNpZm5kZWYgY2ZpX3JlbF9vZmZzZXQKKyMgZGVmaW5lIGNmaV9yZWxfb2Zmc2V0KHJlZywgb2ZmKQkuY2ZpX3JlbF9vZmZzZXQgcmVnLCBvZmYKKyNlbmRpZgorCisjaWZuZGVmIGNmaV9yZXN0b3JlCisjIGRlZmluZSBjZmlfcmVzdG9yZShyZWcpCS5jZmlfcmVzdG9yZSByZWcKKyNlbmRpZgorCisjaWZuZGVmIGNmaV9hZGp1c3RfY2ZhX29mZnNldAorIyBkZWZpbmUgY2ZpX2FkanVzdF9jZmFfb2Zmc2V0KG9mZikJLmNmaV9hZGp1c3RfY2ZhX29mZnNldCBvZmYKKyNlbmRpZgorCisjaWZuZGVmIEVOVFJZCisjIGRlZmluZSBFTlRSWShuYW1lKQlcCisJLnR5cGUgbmFtZSwgIEBmdW5jdGlvbjsJXAorCS5nbG9ibCBuYW1lOwlcCisJLnAyYWxpZ24gNDsJXAorbmFtZToJXAorCWNmaV9zdGFydHByb2MKKyNlbmRpZgorCisjaWZuZGVmIEVORAorIyBkZWZpbmUgRU5EKG5hbWUpCVwKKwljZmlfZW5kcHJvYzsJXAorCS5zaXplIG5hbWUsCS4tbmFtZQorI2VuZGlmCisKKyNkZWZpbmUgQ0ZJX1BVU0goUkVHKQlcCisJY2ZpX2FkanVzdF9jZmFfb2Zmc2V0ICg0KTsJXAorCWNmaV9yZWxfb2Zmc2V0IChSRUcsIDApCisKKyNkZWZpbmUgQ0ZJX1BPUChSRUcpCVwKKwljZmlfYWRqdXN0X2NmYV9vZmZzZXQgKC00KTsJXAorCWNmaV9yZXN0b3JlIChSRUcpCisKKyNkZWZpbmUgUFVTSChSRUcpIHB1c2hsIFJFRzsgQ0ZJX1BVU0ggKFJFRykKKyNkZWZpbmUgUE9QKFJFRykgcG9wbCBSRUc7IENGSV9QT1AgKFJFRykKKworI2RlZmluZSBFTlRSQU5DRSBQVVNIICglZWRpKTsKKyNkZWZpbmUgUEFSTVMgIDgKKyNkZWZpbmUgUkVUVVJOICBQT1AgKCVlZGkpOyByZXQ7IENGSV9QVVNIICglZWRpKTsKKworI2RlZmluZSBTVFIxICBQQVJNUworI2RlZmluZSBTVFIyICBTVFIxKzQKKyNkZWZpbmUgTEVOICAgU1RSMis0CisKKwkudGV4dAorRU5UUlkgKG1lbWNocikKKwlFTlRSQU5DRQorCW1vdglTVFIxKCVlc3ApLCAlZWN4CisJbW92ZAlTVFIyKCVlc3ApLCAleG1tMQorCW1vdglMRU4oJWVzcCksICVlZHgKKwl0ZXN0CSVlZHgsICVlZHgKKwlqeglMKHJldHVybl9udWxsKQorCisJcHVucGNrbGJ3ICV4bW0xLCAleG1tMQorCW1vdgklZWN4LCAlZWRpCisJcHVucGNrbGJ3ICV4bW0xLCAleG1tMQorCisJYW5kCSQ2MywgJWVjeAorCXBzaHVmZAkkMCwgJXhtbTEsICV4bW0xCisJY21wCSQ0OCwgJWVjeAorCWphCUwoY3Jvc3NjYWNoZSkKKworCW1vdmRxdQkoJWVkaSksICV4bW0wCisJcGNtcGVxYgkleG1tMSwgJXhtbTAKKwlwbW92bXNrYiAleG1tMCwgJWVheAorCXRlc3QJJWVheCwgJWVheAorCWpueglMKG1hdGNoX2Nhc2UyX3Byb2xvZykKKworCXN1YgkkMTYsICVlZHgKKwlqYmUJTChyZXR1cm5fbnVsbCkKKwlsZWEJMTYoJWVkaSksICVlZGkKKwlhbmQJJDE1LCAlZWN4CisJYW5kCSQtMTYsICVlZGkKKwlhZGQJJWVjeCwgJWVkeAorCXN1YgkkNjQsICVlZHgKKwlqYmUJTChleGl0X2xvb3ApCisJam1wCUwobG9vcF9wcm9sb2cpCisKKwkucDJhbGlnbiA0CitMKGNyb3NzY2FjaGUpOgorCWFuZAkkMTUsICVlY3gKKwlhbmQJJC0xNiwgJWVkaQorCW1vdmRxYQkoJWVkaSksICV4bW0wCisJcGNtcGVxYgkleG1tMSwgJXhtbTAKKwlwbW92bXNrYiAleG1tMCwgJWVheAorCXNhcgklY2wsICVlYXgKKwl0ZXN0CSVlYXgsICVlYXgKKworCWpueglMKG1hdGNoX2Nhc2UyX3Byb2xvZzEpCisJbGVhCS0xNiglZWR4KSwgJWVkeAorCWFkZAklZWN4LCAlZWR4CisJamxlCUwocmV0dXJuX251bGwpCisJbGVhCTE2KCVlZGkpLCAlZWRpCisJc3ViCSQ2NCwgJWVkeAorCWpiZQlMKGV4aXRfbG9vcCkKKworCS5wMmFsaWduIDQKK0wobG9vcF9wcm9sb2cpOgorCW1vdmRxYQkoJWVkaSksICV4bW0wCisJcGNtcGVxYgkleG1tMSwgJXhtbTAKKwl4b3IJJWVjeCwgJWVjeAorCXBtb3Ztc2tiICV4bW0wLCAlZWF4CisJdGVzdAklZWF4LCAlZWF4CisJam56CUwobWF0Y2hfY2FzZTEpCisKKwltb3ZkcWEJMTYoJWVkaSksICV4bW0yCisJcGNtcGVxYgkleG1tMSwgJXhtbTIKKwlsZWEJMTYoJWVjeCksICVlY3gKKwlwbW92bXNrYiAleG1tMiwgJWVheAorCXRlc3QJJWVheCwgJWVheAorCWpueglMKG1hdGNoX2Nhc2UxKQorCisJbW92ZHFhCTMyKCVlZGkpLCAleG1tMworCXBjbXBlcWIJJXhtbTEsICV4bW0zCisJbGVhCTE2KCVlY3gpLCAlZWN4CisJcG1vdm1za2IgJXhtbTMsICVlYXgKKwl0ZXN0CSVlYXgsICVlYXgKKwlqbnoJTChtYXRjaF9jYXNlMSkKKworCW1vdmRxYQk0OCglZWRpKSwgJXhtbTQKKwlwY21wZXFiCSV4bW0xLCAleG1tNAorCWxlYQkxNiglZWN4KSwgJWVjeAorCXBtb3Ztc2tiICV4bW00LCAlZWF4CisJdGVzdAklZWF4LCAlZWF4CisJam56CUwobWF0Y2hfY2FzZTEpCisKKwlsZWEJNjQoJWVkaSksICVlZGkKKwlzdWIJJDY0LCAlZWR4CisJamJlCUwoZXhpdF9sb29wKQorCisJbW92ZHFhCSglZWRpKSwgJXhtbTAKKwlwY21wZXFiCSV4bW0xLCAleG1tMAorCXhvcgklZWN4LCAlZWN4CisJcG1vdm1za2IgJXhtbTAsICVlYXgKKwl0ZXN0CSVlYXgsICVlYXgKKwlqbnoJTChtYXRjaF9jYXNlMSkKKworCW1vdmRxYQkxNiglZWRpKSwgJXhtbTIKKwlwY21wZXFiCSV4bW0xLCAleG1tMgorCWxlYQkxNiglZWN4KSwgJWVjeAorCXBtb3Ztc2tiICV4bW0yLCAlZWF4CisJdGVzdAklZWF4LCAlZWF4CisJam56CUwobWF0Y2hfY2FzZTEpCisKKwltb3ZkcWEJMzIoJWVkaSksICV4bW0zCisJcGNtcGVxYgkleG1tMSwgJXhtbTMKKwlsZWEJMTYoJWVjeCksICVlY3gKKwlwbW92bXNrYiAleG1tMywgJWVheAorCXRlc3QJJWVheCwgJWVheAorCWpueglMKG1hdGNoX2Nhc2UxKQorCisJbW92ZHFhCTQ4KCVlZGkpLCAleG1tNAorCXBjbXBlcWIJJXhtbTEsICV4bW00CisJbGVhCTE2KCVlY3gpLCAlZWN4CisJcG1vdm1za2IgJXhtbTQsICVlYXgKKwl0ZXN0CSVlYXgsICVlYXgKKwlqbnoJTChtYXRjaF9jYXNlMSkKKworCWxlYQk2NCglZWRpKSwgJWVkaQorCW1vdgklZWRpLCAlZWN4CisJYW5kCSQtNjQsICVlZGkKKwlhbmQJJDYzLCAlZWN4CisJYWRkCSVlY3gsICVlZHgKKworCS5wMmFsaWduIDQKK0woYWxpZ242NF9sb29wKToKKwlzdWIJJDY0LCAlZWR4CisJamJlCUwoZXhpdF9sb29wKQorCW1vdmRxYQkoJWVkaSksICV4bW0wCisJbW92ZHFhCTE2KCVlZGkpLCAleG1tMgorCW1vdmRxYQkzMiglZWRpKSwgJXhtbTMKKwltb3ZkcWEJNDgoJWVkaSksICV4bW00CisJcGNtcGVxYgkleG1tMSwgJXhtbTAKKwlwY21wZXFiCSV4bW0xLCAleG1tMgorCXBjbXBlcWIJJXhtbTEsICV4bW0zCisJcGNtcGVxYgkleG1tMSwgJXhtbTQKKworCXBtYXh1YgkleG1tMCwgJXhtbTMKKwlwbWF4dWIJJXhtbTIsICV4bW00CisJcG1heHViCSV4bW0zLCAleG1tNAorCWFkZAkkNjQsICVlZGkKKwlwbW92bXNrYiAleG1tNCwgJWVheAorCisJdGVzdAklZWF4LCAlZWF4CisJanoJTChhbGlnbjY0X2xvb3ApCisKKwlzdWIJJDY0LCAlZWRpCisKKwlwbW92bXNrYiAleG1tMCwgJWVheAorCXhvcgklZWN4LCAlZWN4CisJdGVzdAklZWF4LCAlZWF4CisJam56CUwobWF0Y2hfY2FzZTEpCisKKwlwbW92bXNrYiAleG1tMiwgJWVheAorCWxlYQkxNiglZWN4KSwgJWVjeAorCXRlc3QJJWVheCwgJWVheAorCWpueglMKG1hdGNoX2Nhc2UxKQorCisJbW92ZHFhCTMyKCVlZGkpLCAleG1tMworCXBjbXBlcWIJJXhtbTEsICV4bW0zCisJcG1vdm1za2IgJXhtbTMsICVlYXgKKwlsZWEJMTYoJWVjeCksICVlY3gKKwl0ZXN0CSVlYXgsICVlYXgKKwlqbnoJTChtYXRjaF9jYXNlMSkKKworCXBjbXBlcWIJNDgoJWVkaSksICV4bW0xCisJcG1vdm1za2IgJXhtbTEsICVlYXgKKwlsZWEJMTYoJWVjeCksICVlY3gKKworCS5wMmFsaWduIDQKK0wobWF0Y2hfY2FzZTEpOgorCWFkZAklZWN4LCAlZWRpCisJdGVzdAklYWwsICVhbAorCWp6CUwobWF0Y2hfY2FzZTFfaGlnaCkKKwltb3YJJWFsLCAlY2wKKwlhbmQJJDE1LCAlY2wKKwlqeglMKG1hdGNoX2Nhc2UxXzgpCisJdGVzdAkkMHgwMSwgJWFsCisJam56CUwoZXhpdF9jYXNlMV8xKQorCXRlc3QJJDB4MDIsICVhbAorCWpueglMKGV4aXRfY2FzZTFfMikKKwl0ZXN0CSQweDA0LCAlYWwKKwlqbnoJTChleGl0X2Nhc2UxXzMpCisJbGVhCTMoJWVkaSksICVlYXgKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0wobWF0Y2hfY2FzZTFfOCk6CisJdGVzdAkkMHgxMCwgJWFsCisJam56CUwoZXhpdF9jYXNlMV81KQorCXRlc3QJJDB4MjAsICVhbAorCWpueglMKGV4aXRfY2FzZTFfNikKKwl0ZXN0CSQweDQwLCAlYWwKKwlqbnoJTChleGl0X2Nhc2UxXzcpCisJbGVhCTcoJWVkaSksICVlYXgKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0wobWF0Y2hfY2FzZTFfaGlnaCk6CisJbW92CSVhaCwgJWNoCisJYW5kCSQxNSwgJWNoCisJanoJTChtYXRjaF9jYXNlMV9oaWdoXzgpCisJdGVzdAkkMHgwMSwgJWFoCisJam56CUwoZXhpdF9jYXNlMV85KQorCXRlc3QJJDB4MDIsICVhaAorCWpueglMKGV4aXRfY2FzZTFfMTApCisJdGVzdAkkMHgwNCwgJWFoCisJam56CUwoZXhpdF9jYXNlMV8xMSkKKwlsZWEJMTEoJWVkaSksICVlYXgKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0wobWF0Y2hfY2FzZTFfaGlnaF84KToKKwl0ZXN0CSQweDEwLCAlYWgKKwlqbnoJTChleGl0X2Nhc2UxXzEzKQorCXRlc3QJJDB4MjAsICVhaAorCWpueglMKGV4aXRfY2FzZTFfMTQpCisJdGVzdAkkMHg0MCwgJWFoCisJam56CUwoZXhpdF9jYXNlMV8xNSkKKwlsZWEJMTUoJWVkaSksICVlYXgKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woZXhpdF9sb29wKToKKwlhZGQJJDY0LCAlZWR4CisKKwltb3ZkcWEJKCVlZGkpLCAleG1tMAorCXBjbXBlcWIJJXhtbTEsICV4bW0wCisJeG9yCSVlY3gsICVlY3gKKwlwbW92bXNrYiAleG1tMCwgJWVheAorCXRlc3QJJWVheCwgJWVheAorCWpueglMKG1hdGNoX2Nhc2UyKQorCWNtcAkkMTYsICVlZHgKKwlqYmUJTChyZXR1cm5fbnVsbCkKKworCW1vdmRxYQkxNiglZWRpKSwgJXhtbTIKKwlwY21wZXFiCSV4bW0xLCAleG1tMgorCWxlYQkxNiglZWN4KSwgJWVjeAorCXBtb3Ztc2tiICV4bW0yLCAlZWF4CisJdGVzdAklZWF4LCAlZWF4CisJam56CUwobWF0Y2hfY2FzZTIpCisJY21wCSQzMiwgJWVkeAorCWpiZQlMKHJldHVybl9udWxsKQorCisJbW92ZHFhCTMyKCVlZGkpLCAleG1tMworCXBjbXBlcWIJJXhtbTEsICV4bW0zCisJbGVhCTE2KCVlY3gpLCAlZWN4CisJcG1vdm1za2IgJXhtbTMsICVlYXgKKwl0ZXN0CSVlYXgsICVlYXgKKwlqbnoJTChtYXRjaF9jYXNlMikKKwljbXAJJDQ4LCAlZWR4CisJamJlCUwocmV0dXJuX251bGwpCisKKwlwY21wZXFiCTQ4KCVlZGkpLCAleG1tMQorCWxlYQkxNiglZWN4KSwgJWVjeAorCXBtb3Ztc2tiICV4bW0xLCAlZWF4CisJdGVzdAklZWF4LCAlZWF4CisJam56CUwobWF0Y2hfY2FzZTIpCisKKwl4b3IJJWVheCwgJWVheAorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChleGl0X2Nhc2UxXzEpOgorCW1vdgklZWRpLCAlZWF4CisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKGV4aXRfY2FzZTFfMik6CisJbGVhCTEoJWVkaSksICVlYXgKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woZXhpdF9jYXNlMV8zKToKKwlsZWEJMiglZWRpKSwgJWVheAorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChleGl0X2Nhc2UxXzUpOgorCWxlYQk0KCVlZGkpLCAlZWF4CisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKGV4aXRfY2FzZTFfNik6CisJbGVhCTUoJWVkaSksICVlYXgKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woZXhpdF9jYXNlMV83KToKKwlsZWEJNiglZWRpKSwgJWVheAorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChleGl0X2Nhc2UxXzkpOgorCWxlYQk4KCVlZGkpLCAlZWF4CisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKGV4aXRfY2FzZTFfMTApOgorCWxlYQk5KCVlZGkpLCAlZWF4CisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKGV4aXRfY2FzZTFfMTEpOgorCWxlYQkxMCglZWRpKSwgJWVheAorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChleGl0X2Nhc2UxXzEzKToKKwlsZWEJMTIoJWVkaSksICVlYXgKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woZXhpdF9jYXNlMV8xNCk6CisJbGVhCTEzKCVlZGkpLCAlZWF4CisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKGV4aXRfY2FzZTFfMTUpOgorCWxlYQkxNCglZWRpKSwgJWVheAorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChtYXRjaF9jYXNlMik6CisJc3ViCSVlY3gsICVlZHgKK0wobWF0Y2hfY2FzZTJfcHJvbG9nMSk6CisJYWRkCSVlY3gsICVlZGkKK0wobWF0Y2hfY2FzZTJfcHJvbG9nKToKKwl0ZXN0CSVhbCwgJWFsCisJanoJTChtYXRjaF9jYXNlMl9oaWdoKQorCW1vdgklYWwsICVjbAorCWFuZAkkMTUsICVjbAorCWp6CUwobWF0Y2hfY2FzZTJfOCkKKwl0ZXN0CSQweDAxLCAlYWwKKwlqbnoJTChleGl0X2Nhc2UyXzEpCisJdGVzdAkkMHgwMiwgJWFsCisJam56CUwoZXhpdF9jYXNlMl8yKQorCXRlc3QJJDB4MDQsICVhbAorCWpueglMKGV4aXRfY2FzZTJfMykKKwlzdWIJJDQsICVlZHgKKwlqYglMKHJldHVybl9udWxsKQorCWxlYQkzKCVlZGkpLCAlZWF4CisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKG1hdGNoX2Nhc2UyXzgpOgorCXRlc3QJJDB4MTAsICVhbAorCWpueglMKGV4aXRfY2FzZTJfNSkKKwl0ZXN0CSQweDIwLCAlYWwKKwlqbnoJTChleGl0X2Nhc2UyXzYpCisJdGVzdAkkMHg0MCwgJWFsCisJam56CUwoZXhpdF9jYXNlMl83KQorCXN1YgkkOCwgJWVkeAorCWpiCUwocmV0dXJuX251bGwpCisJbGVhCTcoJWVkaSksICVlYXgKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0wobWF0Y2hfY2FzZTJfaGlnaCk6CisJbW92CSVhaCwgJWNoCisJYW5kCSQxNSwgJWNoCisJanoJTChtYXRjaF9jYXNlMl9oaWdoXzgpCisJdGVzdAkkMHgwMSwgJWFoCisJam56CUwoZXhpdF9jYXNlMl85KQorCXRlc3QJJDB4MDIsICVhaAorCWpueglMKGV4aXRfY2FzZTJfMTApCisJdGVzdAkkMHgwNCwgJWFoCisJam56CUwoZXhpdF9jYXNlMl8xMSkKKwlzdWIJJDEyLCAlZWR4CisJamIJTChyZXR1cm5fbnVsbCkKKwlsZWEJMTEoJWVkaSksICVlYXgKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0wobWF0Y2hfY2FzZTJfaGlnaF84KToKKwl0ZXN0CSQweDEwLCAlYWgKKwlqbnoJTChleGl0X2Nhc2UyXzEzKQorCXRlc3QJJDB4MjAsICVhaAorCWpueglMKGV4aXRfY2FzZTJfMTQpCisJdGVzdAkkMHg0MCwgJWFoCisJam56CUwoZXhpdF9jYXNlMl8xNSkKKwlzdWIJJDE2LCAlZWR4CisJamIJTChyZXR1cm5fbnVsbCkKKwlsZWEJMTUoJWVkaSksICVlYXgKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woZXhpdF9jYXNlMl8xKToKKwltb3YJJWVkaSwgJWVheAorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChleGl0X2Nhc2UyXzIpOgorCXN1YgkkMiwgJWVkeAorCWpiCUwocmV0dXJuX251bGwpCisJbGVhCTEoJWVkaSksICVlYXgKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woZXhpdF9jYXNlMl8zKToKKwlzdWIJJDMsICVlZHgKKwlqYglMKHJldHVybl9udWxsKQorCWxlYQkyKCVlZGkpLCAlZWF4CisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKGV4aXRfY2FzZTJfNSk6CisJc3ViCSQ1LCAlZWR4CisJamIJTChyZXR1cm5fbnVsbCkKKwlsZWEJNCglZWRpKSwgJWVheAorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChleGl0X2Nhc2UyXzYpOgorCXN1YgkkNiwgJWVkeAorCWpiCUwocmV0dXJuX251bGwpCisJbGVhCTUoJWVkaSksICVlYXgKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woZXhpdF9jYXNlMl83KToKKwlzdWIJJDcsICVlZHgKKwlqYglMKHJldHVybl9udWxsKQorCWxlYQk2KCVlZGkpLCAlZWF4CisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKGV4aXRfY2FzZTJfOSk6CisJc3ViCSQ5LCAlZWR4CisJamIJTChyZXR1cm5fbnVsbCkKKwlsZWEJOCglZWRpKSwgJWVheAorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChleGl0X2Nhc2UyXzEwKToKKwlzdWIJJDEwLCAlZWR4CisJamIJTChyZXR1cm5fbnVsbCkKKwlsZWEJOSglZWRpKSwgJWVheAorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChleGl0X2Nhc2UyXzExKToKKwlzdWIJJDExLCAlZWR4CisJamIJTChyZXR1cm5fbnVsbCkKKwlsZWEJMTAoJWVkaSksICVlYXgKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woZXhpdF9jYXNlMl8xMyk6CisJc3ViCSQxMywgJWVkeAorCWpiCUwocmV0dXJuX251bGwpCisJbGVhCTEyKCVlZGkpLCAlZWF4CisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKGV4aXRfY2FzZTJfMTQpOgorCXN1YgkkMTQsICVlZHgKKwlqYglMKHJldHVybl9udWxsKQorCWxlYQkxMyglZWRpKSwgJWVheAorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChleGl0X2Nhc2UyXzE1KToKKwlzdWIJJDE1LCAlZWR4CisJamIJTChyZXR1cm5fbnVsbCkKKwlsZWEJMTQoJWVkaSksICVlYXgKKwlSRVRVUk4KKwkucDJhbGlnbiA0CitMKHJldHVybl9udWxsKToKKwl4b3IJJWVheCwgJWVheAorCVJFVFVSTgorRU5EIChtZW1jaHIpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N0cmluZy9zc2UyLW1lbXJjaHItYXRvbS5TIGIvbGliYy9hcmNoLXg4Ni9zdHJpbmcvc3NlMi1tZW1yY2hyLWF0b20uUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYWExYTFhCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9zdHJpbmcvc3NlMi1tZW1yY2hyLWF0b20uUwpAQCAtMCwwICsxLDc3OCBAQAorLyoKK0NvcHlyaWdodCAoYykgMjAxMSwgSW50ZWwgQ29ycG9yYXRpb24KK0FsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisKKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAgICAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisKKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAgICAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAgICAqIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCisgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEludGVsIENvcnBvcmF0aW9uIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICAgICogbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgICAgKiB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKK1dBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKK0RJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKK0FOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCitBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKK1NPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKi8KKworI2lmbmRlZiBMCisjIGRlZmluZSBMKGxhYmVsKQkuTCMjbGFiZWwKKyNlbmRpZgorCisjaWZuZGVmIGNmaV9zdGFydHByb2MKKyMgZGVmaW5lIGNmaV9zdGFydHByb2MJLmNmaV9zdGFydHByb2MKKyNlbmRpZgorCisjaWZuZGVmIGNmaV9lbmRwcm9jCisjIGRlZmluZSBjZmlfZW5kcHJvYwkuY2ZpX2VuZHByb2MKKyNlbmRpZgorCisjaWZuZGVmIGNmaV9yZWxfb2Zmc2V0CisjIGRlZmluZSBjZmlfcmVsX29mZnNldChyZWcsIG9mZikJLmNmaV9yZWxfb2Zmc2V0IHJlZywgb2ZmCisjZW5kaWYKKworI2lmbmRlZiBjZmlfcmVzdG9yZQorIyBkZWZpbmUgY2ZpX3Jlc3RvcmUocmVnKQkuY2ZpX3Jlc3RvcmUgcmVnCisjZW5kaWYKKworI2lmbmRlZiBjZmlfYWRqdXN0X2NmYV9vZmZzZXQKKyMgZGVmaW5lIGNmaV9hZGp1c3RfY2ZhX29mZnNldChvZmYpCS5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgb2ZmCisjZW5kaWYKKworI2lmbmRlZiBFTlRSWQorIyBkZWZpbmUgRU5UUlkobmFtZSkJXAorCS50eXBlIG5hbWUsICBAZnVuY3Rpb247CVwKKwkuZ2xvYmwgbmFtZTsJXAorCS5wMmFsaWduIDQ7CVwKK25hbWU6CVwKKwljZmlfc3RhcnRwcm9jCisjZW5kaWYKKworI2lmbmRlZiBFTkQKKyMgZGVmaW5lIEVORChuYW1lKQlcCisJY2ZpX2VuZHByb2M7CVwKKwkuc2l6ZSBuYW1lLAkuLW5hbWUKKyNlbmRpZgorCisjZGVmaW5lIENGSV9QVVNIKFJFRykJXAorCWNmaV9hZGp1c3RfY2ZhX29mZnNldCAoNCk7CVwKKwljZmlfcmVsX29mZnNldCAoUkVHLCAwKQorCisjZGVmaW5lIENGSV9QT1AoUkVHKQlcCisJY2ZpX2FkanVzdF9jZmFfb2Zmc2V0ICgtNCk7CVwKKwljZmlfcmVzdG9yZSAoUkVHKQorCisjZGVmaW5lIFBVU0goUkVHKSBwdXNobCBSRUc7IENGSV9QVVNIIChSRUcpCisjZGVmaW5lIFBPUChSRUcpIHBvcGwgUkVHOyBDRklfUE9QIChSRUcpCisKKyNkZWZpbmUgUEFSTVMgIDQKKyNkZWZpbmUgU1RSMSAgUEFSTVMKKyNkZWZpbmUgU1RSMiAgU1RSMSs0CisjZGVmaW5lIExFTiAgIFNUUjIrNAorCisJLnRleHQKK0VOVFJZIChtZW1yY2hyKQorCW1vdglTVFIxKCVlc3ApLCAlZWN4CisJbW92ZAlTVFIyKCVlc3ApLCAleG1tMQorCW1vdglMRU4oJWVzcCksICVlZHgKKworCXRlc3QJJWVkeCwgJWVkeAorCWp6CUwocmV0dXJuX251bGwpCisJc3ViCSQxNiwgJWVkeAorCWpiZQlMKGxlbmd0aF9sZXNzMTYpCisKKwlwdW5wY2tsYncgJXhtbTEsICV4bW0xCisJYWRkCSVlZHgsICVlY3gKKwlwdW5wY2tsYncgJXhtbTEsICV4bW0xCisKKwltb3ZkcXUJKCVlY3gpLCAleG1tMAorCXBzaHVmZAkkMCwgJXhtbTEsICV4bW0xCisJcGNtcGVxYgkleG1tMSwgJXhtbTAKKworCXBtb3Ztc2tiICV4bW0wLCAlZWF4CisJdGVzdAklZWF4LCAlZWF4CisJam56CUwoZXhpdF9kaXNwYXRjaCkKKworCXN1YgkkNjQsICVlY3gKKwltb3YJJWVjeCwgJWVheAorCWFuZAkkMTUsICVlYXgKKwlqeglMKGxvb3BfcHJvbG9nKQorCisJYWRkCSQxNiwgJWVjeAorCWFkZAkkMTYsICVlZHgKKwlhbmQJJC0xNiwgJWVjeAorCXN1YgklZWF4LCAlZWR4CisKKwkucDJhbGlnbiA0CisvKiBMb29wIHN0YXJ0IG9uIGFsaWduZWQgc3RyaW5nLiAgKi8KK0wobG9vcF9wcm9sb2cpOgorCXN1YgkkNjQsICVlZHgKKwlqYmUJTChleGl0X2xvb3ApCisKKwltb3ZkcWEJNDgoJWVjeCksICV4bW0wCisJcGNtcGVxYgkleG1tMSwgJXhtbTAKKwlwbW92bXNrYiAleG1tMCwgJWVheAorCXRlc3QJJWVheCwgJWVheAorCWpueglMKG1hdGNoZXM0OCkKKworCW1vdmRxYQkzMiglZWN4KSwgJXhtbTIKKwlwY21wZXFiCSV4bW0xLCAleG1tMgorCXBtb3Ztc2tiICV4bW0yLCAlZWF4CisJdGVzdAklZWF4LCAlZWF4CisJam56CUwobWF0Y2hlczMyKQorCisJbW92ZHFhCTE2KCVlY3gpLCAleG1tMworCXBjbXBlcWIJJXhtbTEsICV4bW0zCisJcG1vdm1za2IgJXhtbTMsICVlYXgKKwl0ZXN0CSVlYXgsICVlYXgKKwlqbnoJTChtYXRjaGVzMTYpCisKKwltb3ZkcWEJKCVlY3gpLCAleG1tNAorCXBjbXBlcWIJJXhtbTEsICV4bW00CisJcG1vdm1za2IgJXhtbTQsICVlYXgKKwl0ZXN0CSVlYXgsICVlYXgKKwlqbnoJTChleGl0X2Rpc3BhdGNoKQorCisJc3ViCSQ2NCwgJWVjeAorCXN1YgkkNjQsICVlZHgKKwlqYmUJTChleGl0X2xvb3ApCisKKwltb3ZkcWEJNDgoJWVjeCksICV4bW0wCisJcGNtcGVxYgkleG1tMSwgJXhtbTAKKwlwbW92bXNrYiAleG1tMCwgJWVheAorCXRlc3QJJWVheCwgJWVheAorCWpueglMKG1hdGNoZXM0OCkKKworCW1vdmRxYQkzMiglZWN4KSwgJXhtbTIKKwlwY21wZXFiCSV4bW0xLCAleG1tMgorCXBtb3Ztc2tiICV4bW0yLCAlZWF4CisJdGVzdAklZWF4LCAlZWF4CisJam56CUwobWF0Y2hlczMyKQorCisJbW92ZHFhCTE2KCVlY3gpLCAleG1tMworCXBjbXBlcWIJJXhtbTEsICV4bW0zCisJcG1vdm1za2IgJXhtbTMsICVlYXgKKwl0ZXN0CSVlYXgsICVlYXgKKwlqbnoJTChtYXRjaGVzMTYpCisKKwltb3ZkcWEJKCVlY3gpLCAleG1tMworCXBjbXBlcWIJJXhtbTEsICV4bW0zCisJcG1vdm1za2IgJXhtbTMsICVlYXgKKwl0ZXN0CSVlYXgsICVlYXgKKwlqbnoJTChleGl0X2Rpc3BhdGNoKQorCisJbW92CSVlY3gsICVlYXgKKwlhbmQJJDYzLCAlZWF4CisJdGVzdAklZWF4LCAlZWF4CisJanoJTChhbGlnbjY0X2xvb3ApCisKKwlhZGQJJDY0LCAlZWN4CisJYWRkCSQ2NCwgJWVkeAorCWFuZAkkLTY0LCAlZWN4CisJc3ViCSVlYXgsICVlZHgKKworCS5wMmFsaWduIDQKK0woYWxpZ242NF9sb29wKToKKwlzdWIJJDY0LCAlZWN4CisJc3ViCSQ2NCwgJWVkeAorCWpiZQlMKGV4aXRfbG9vcCkKKworCW1vdmRxYQkoJWVjeCksICV4bW0wCisJbW92ZHFhCTE2KCVlY3gpLCAleG1tMgorCW1vdmRxYQkzMiglZWN4KSwgJXhtbTMKKwltb3ZkcWEJNDgoJWVjeCksICV4bW00CisKKwlwY21wZXFiCSV4bW0xLCAleG1tMAorCXBjbXBlcWIJJXhtbTEsICV4bW0yCisJcGNtcGVxYgkleG1tMSwgJXhtbTMKKwlwY21wZXFiCSV4bW0xLCAleG1tNAorCisJcG1heHViCSV4bW0zLCAleG1tMAorCXBtYXh1YgkleG1tNCwgJXhtbTIKKwlwbWF4dWIJJXhtbTAsICV4bW0yCisJcG1vdm1za2IgJXhtbTIsICVlYXgKKworCXRlc3QJJWVheCwgJWVheAorCWp6CUwoYWxpZ242NF9sb29wKQorCisJcG1vdm1za2IgJXhtbTQsICVlYXgKKwl0ZXN0CSVlYXgsICVlYXgKKwlqbnoJTChtYXRjaGVzNDgpCisKKwlwbW92bXNrYiAleG1tMywgJWVheAorCXRlc3QJJWVheCwgJWVheAorCWpueglMKG1hdGNoZXMzMikKKworCW1vdmRxYQkxNiglZWN4KSwgJXhtbTIKKworCXBjbXBlcWIJJXhtbTEsICV4bW0yCisJcGNtcGVxYgkoJWVjeCksICV4bW0xCisKKwlwbW92bXNrYiAleG1tMiwgJWVheAorCXRlc3QJJWVheCwgJWVheAorCWpueglMKG1hdGNoZXMxNikKKworCXBtb3Ztc2tiICV4bW0xLCAlZWF4CisJdGVzdAklYWgsICVhaAorCWpueglMKGV4aXRfZGlzcGF0Y2hfaGlnaCkKKwltb3YJJWFsLCAlZGwKKwlhbmQJJDE1IDw8IDQsICVkbAorCWpueglMKGV4aXRfZGlzcGF0Y2hfOCkKKwl0ZXN0CSQweDA4LCAlYWwKKwlqbnoJTChleGl0XzQpCisJdGVzdAkkMHgwNCwgJWFsCisJam56CUwoZXhpdF8zKQorCXRlc3QJJDB4MDIsICVhbAorCWpueglMKGV4aXRfMikKKwltb3YJJWVjeCwgJWVheAorCXJldAorCisJLnAyYWxpZ24gNAorTChleGl0X2xvb3ApOgorCWFkZAkkNjQsICVlZHgKKwljbXAJJDMyLCAlZWR4CisJamJlCUwoZXhpdF9sb29wXzMyKQorCisJbW92ZHFhCTQ4KCVlY3gpLCAleG1tMAorCXBjbXBlcWIJJXhtbTEsICV4bW0wCisJcG1vdm1za2IgJXhtbTAsICVlYXgKKwl0ZXN0CSVlYXgsICVlYXgKKwlqbnoJTChtYXRjaGVzNDgpCisKKwltb3ZkcWEJMzIoJWVjeCksICV4bW0yCisJcGNtcGVxYgkleG1tMSwgJXhtbTIKKwlwbW92bXNrYiAleG1tMiwgJWVheAorCXRlc3QJJWVheCwgJWVheAorCWpueglMKG1hdGNoZXMzMikKKworCW1vdmRxYQkxNiglZWN4KSwgJXhtbTMKKwlwY21wZXFiCSV4bW0xLCAleG1tMworCXBtb3Ztc2tiICV4bW0zLCAlZWF4CisJdGVzdAklZWF4LCAlZWF4CisJam56CUwobWF0Y2hlczE2XzEpCisJY21wCSQ0OCwgJWVkeAorCWpiZQlMKHJldHVybl9udWxsKQorCisJcGNtcGVxYgkoJWVjeCksICV4bW0xCisJcG1vdm1za2IgJXhtbTEsICVlYXgKKwl0ZXN0CSVlYXgsICVlYXgKKwlqbnoJTChtYXRjaGVzMF8xKQorCXhvcgklZWF4LCAlZWF4CisJcmV0CisKKwkucDJhbGlnbiA0CitMKGV4aXRfbG9vcF8zMik6CisJbW92ZHFhCTQ4KCVlY3gpLCAleG1tMAorCXBjbXBlcWIJJXhtbTEsICV4bW0wCisJcG1vdm1za2IgJXhtbTAsICVlYXgKKwl0ZXN0CSVlYXgsICVlYXgKKwlqbnoJTChtYXRjaGVzNDhfMSkKKwljbXAJJDE2LCAlZWR4CisJamJlCUwocmV0dXJuX251bGwpCisKKwlwY21wZXFiCTMyKCVlY3gpLCAleG1tMQorCXBtb3Ztc2tiICV4bW0xLCAlZWF4CisJdGVzdAklZWF4LCAlZWF4CisJam56CUwobWF0Y2hlczMyXzEpCisJeG9yCSVlYXgsICVlYXgKKwlyZXQKKworCS5wMmFsaWduIDQKK0wobWF0Y2hlczE2KToKKwlsZWEJMTYoJWVjeCksICVlY3gKKwl0ZXN0CSVhaCwgJWFoCisJam56CUwoZXhpdF9kaXNwYXRjaF9oaWdoKQorCW1vdgklYWwsICVkbAorCWFuZAkkMTUgPDwgNCwgJWRsCisJam56CUwoZXhpdF9kaXNwYXRjaF84KQorCXRlc3QJJDB4MDgsICVhbAorCWpueglMKGV4aXRfNCkKKwl0ZXN0CSQweDA0LCAlYWwKKwlqbnoJTChleGl0XzMpCisJdGVzdAkkMHgwMiwgJWFsCisJam56CUwoZXhpdF8yKQorCW1vdgklZWN4LCAlZWF4CisJcmV0CisKKwkucDJhbGlnbiA0CitMKG1hdGNoZXMzMik6CisJbGVhCTMyKCVlY3gpLCAlZWN4CisJdGVzdAklYWgsICVhaAorCWpueglMKGV4aXRfZGlzcGF0Y2hfaGlnaCkKKwltb3YJJWFsLCAlZGwKKwlhbmQJJDE1IDw8IDQsICVkbAorCWpueglMKGV4aXRfZGlzcGF0Y2hfOCkKKwl0ZXN0CSQweDA4LCAlYWwKKwlqbnoJTChleGl0XzQpCisJdGVzdAkkMHgwNCwgJWFsCisJam56CUwoZXhpdF8zKQorCXRlc3QJJDB4MDIsICVhbAorCWpueglMKGV4aXRfMikKKwltb3YJJWVjeCwgJWVheAorCXJldAorCisJLnAyYWxpZ24gNAorTChtYXRjaGVzNDgpOgorCWxlYQk0OCglZWN4KSwgJWVjeAorCisJLnAyYWxpZ24gNAorTChleGl0X2Rpc3BhdGNoKToKKwl0ZXN0CSVhaCwgJWFoCisJam56CUwoZXhpdF9kaXNwYXRjaF9oaWdoKQorCW1vdgklYWwsICVkbAorCWFuZAkkMTUgPDwgNCwgJWRsCisJam56CUwoZXhpdF9kaXNwYXRjaF84KQorCXRlc3QJJDB4MDgsICVhbAorCWpueglMKGV4aXRfNCkKKwl0ZXN0CSQweDA0LCAlYWwKKwlqbnoJTChleGl0XzMpCisJdGVzdAkkMHgwMiwgJWFsCisJam56CUwoZXhpdF8yKQorCW1vdgklZWN4LCAlZWF4CisJcmV0CisKKwkucDJhbGlnbiA0CitMKGV4aXRfZGlzcGF0Y2hfOCk6CisJdGVzdAkkMHg4MCwgJWFsCisJam56CUwoZXhpdF84KQorCXRlc3QJJDB4NDAsICVhbAorCWpueglMKGV4aXRfNykKKwl0ZXN0CSQweDIwLCAlYWwKKwlqbnoJTChleGl0XzYpCisJbGVhCTQoJWVjeCksICVlYXgKKwlyZXQKKworCS5wMmFsaWduIDQKK0woZXhpdF9kaXNwYXRjaF9oaWdoKToKKwltb3YJJWFoLCAlZGgKKwlhbmQJJDE1IDw8IDQsICVkaAorCWpueglMKGV4aXRfZGlzcGF0Y2hfaGlnaF84KQorCXRlc3QJJDB4MDgsICVhaAorCWpueglMKGV4aXRfMTIpCisJdGVzdAkkMHgwNCwgJWFoCisJam56CUwoZXhpdF8xMSkKKwl0ZXN0CSQweDAyLCAlYWgKKwlqbnoJTChleGl0XzEwKQorCWxlYQk4KCVlY3gpLCAlZWF4CisJcmV0CisKKwkucDJhbGlnbiA0CitMKGV4aXRfZGlzcGF0Y2hfaGlnaF84KToKKwl0ZXN0CSQweDgwLCAlYWgKKwlqbnoJTChleGl0XzE2KQorCXRlc3QJJDB4NDAsICVhaAorCWpueglMKGV4aXRfMTUpCisJdGVzdAkkMHgyMCwgJWFoCisJam56CUwoZXhpdF8xNCkKKwlsZWEJMTIoJWVjeCksICVlYXgKKwlyZXQKKworCS5wMmFsaWduIDQKK0woZXhpdF8yKToKKwlsZWEJMSglZWN4KSwgJWVheAorCXJldAorCisJLnAyYWxpZ24gNAorTChleGl0XzMpOgorCWxlYQkyKCVlY3gpLCAlZWF4CisJcmV0CisKKwkucDJhbGlnbiA0CitMKGV4aXRfNCk6CisJbGVhCTMoJWVjeCksICVlYXgKKwlyZXQKKworCS5wMmFsaWduIDQKK0woZXhpdF82KToKKwlsZWEJNSglZWN4KSwgJWVheAorCXJldAorCisJLnAyYWxpZ24gNAorTChleGl0XzcpOgorCWxlYQk2KCVlY3gpLCAlZWF4CisJcmV0CisKKwkucDJhbGlnbiA0CitMKGV4aXRfOCk6CisJbGVhCTcoJWVjeCksICVlYXgKKwlyZXQKKworCS5wMmFsaWduIDQKK0woZXhpdF8xMCk6CisJbGVhCTkoJWVjeCksICVlYXgKKwlyZXQKKworCS5wMmFsaWduIDQKK0woZXhpdF8xMSk6CisJbGVhCTEwKCVlY3gpLCAlZWF4CisJcmV0CisKKwkucDJhbGlnbiA0CitMKGV4aXRfMTIpOgorCWxlYQkxMSglZWN4KSwgJWVheAorCXJldAorCisJLnAyYWxpZ24gNAorTChleGl0XzE0KToKKwlsZWEJMTMoJWVjeCksICVlYXgKKwlyZXQKKworCS5wMmFsaWduIDQKK0woZXhpdF8xNSk6CisJbGVhCTE0KCVlY3gpLCAlZWF4CisJcmV0CisKKwkucDJhbGlnbiA0CitMKGV4aXRfMTYpOgorCWxlYQkxNSglZWN4KSwgJWVheAorCXJldAorCisJLnAyYWxpZ24gNAorTChtYXRjaGVzMF8xKToKKwlsZWEJLTY0KCVlZHgpLCAlZWR4CisKKwl0ZXN0CSVhaCwgJWFoCisJam56CUwoZXhpdF9kaXNwYXRjaF8xX2hpZ2gpCisJbW92CSVhbCwgJWFoCisJYW5kCSQxNSA8PCA0LCAlYWgKKwlqbnoJTChleGl0X2Rpc3BhdGNoXzFfOCkKKwl0ZXN0CSQweDA4LCAlYWwKKwlqbnoJTChleGl0XzFfNCkKKwl0ZXN0CSQweDA0LCAlYWwKKwlqbnoJTChleGl0XzFfMykKKwl0ZXN0CSQweDAyLCAlYWwKKwlqbnoJTChleGl0XzFfMikKKworCWFkZAkkMCwgJWVkeAorCWpsCUwocmV0dXJuX251bGwpCisJbW92CSVlY3gsICVlYXgKKwlyZXQKKworCS5wMmFsaWduIDQKK0wobWF0Y2hlczE2XzEpOgorCWxlYQktNDgoJWVkeCksICVlZHgKKwlsZWEJMTYoJWVjeCksICVlY3gKKworCXRlc3QJJWFoLCAlYWgKKwlqbnoJTChleGl0X2Rpc3BhdGNoXzFfaGlnaCkKKwltb3YJJWFsLCAlYWgKKwlhbmQJJDE1IDw8IDQsICVhaAorCWpueglMKGV4aXRfZGlzcGF0Y2hfMV84KQorCXRlc3QJJDB4MDgsICVhbAorCWpueglMKGV4aXRfMV80KQorCXRlc3QJJDB4MDQsICVhbAorCWpueglMKGV4aXRfMV8zKQorCXRlc3QJJDB4MDIsICVhbAorCWpueglMKGV4aXRfMV8yKQorCisJYWRkCSQwLCAlZWR4CisJamwJTChyZXR1cm5fbnVsbCkKKwltb3YJJWVjeCwgJWVheAorCXJldAorCisJLnAyYWxpZ24gNAorTChtYXRjaGVzMzJfMSk6CisJbGVhCS0zMiglZWR4KSwgJWVkeAorCWxlYQkzMiglZWN4KSwgJWVjeAorCisJdGVzdAklYWgsICVhaAorCWpueglMKGV4aXRfZGlzcGF0Y2hfMV9oaWdoKQorCW1vdgklYWwsICVhaAorCWFuZAkkMTUgPDwgNCwgJWFoCisJam56CUwoZXhpdF9kaXNwYXRjaF8xXzgpCisJdGVzdAkkMHgwOCwgJWFsCisJam56CUwoZXhpdF8xXzQpCisJdGVzdAkkMHgwNCwgJWFsCisJam56CUwoZXhpdF8xXzMpCisJdGVzdAkkMHgwMiwgJWFsCisJam56CUwoZXhpdF8xXzIpCisKKwlhZGQJJDAsICVlZHgKKwlqbAlMKHJldHVybl9udWxsKQorCW1vdgklZWN4LCAlZWF4CisJcmV0CisKKwkucDJhbGlnbiA0CitMKG1hdGNoZXM0OF8xKToKKwlsZWEJLTE2KCVlZHgpLCAlZWR4CisJbGVhCTQ4KCVlY3gpLCAlZWN4CisKKwkucDJhbGlnbiA0CitMKGV4aXRfZGlzcGF0Y2hfMSk6CisJdGVzdAklYWgsICVhaAorCWpueglMKGV4aXRfZGlzcGF0Y2hfMV9oaWdoKQorCW1vdgklYWwsICVhaAorCWFuZAkkMTUgPDwgNCwgJWFoCisJam56CUwoZXhpdF9kaXNwYXRjaF8xXzgpCisJdGVzdAkkMHgwOCwgJWFsCisJam56CUwoZXhpdF8xXzQpCisJdGVzdAkkMHgwNCwgJWFsCisJam56CUwoZXhpdF8xXzMpCisJdGVzdAkkMHgwMiwgJWFsCisJam56CUwoZXhpdF8xXzIpCisKKwlhZGQJJDAsICVlZHgKKwlqbAlMKHJldHVybl9udWxsKQorCW1vdgklZWN4LCAlZWF4CisJcmV0CisKKwkucDJhbGlnbiA0CitMKGV4aXRfZGlzcGF0Y2hfMV84KToKKwl0ZXN0CSQweDgwLCAlYWwKKwlqbnoJTChleGl0XzFfOCkKKwl0ZXN0CSQweDQwLCAlYWwKKwlqbnoJTChleGl0XzFfNykKKwl0ZXN0CSQweDIwLCAlYWwKKwlqbnoJTChleGl0XzFfNikKKworCWFkZAkkNCwgJWVkeAorCWpsCUwocmV0dXJuX251bGwpCisJbGVhCTQoJWVjeCksICVlYXgKKwlyZXQKKworCS5wMmFsaWduIDQKK0woZXhpdF9kaXNwYXRjaF8xX2hpZ2gpOgorCW1vdgklYWgsICVhbAorCWFuZAkkMTUgPDwgNCwgJWFsCisJam56CUwoZXhpdF9kaXNwYXRjaF8xX2hpZ2hfOCkKKwl0ZXN0CSQweDA4LCAlYWgKKwlqbnoJTChleGl0XzFfMTIpCisJdGVzdAkkMHgwNCwgJWFoCisJam56CUwoZXhpdF8xXzExKQorCXRlc3QJJDB4MDIsICVhaAorCWpueglMKGV4aXRfMV8xMCkKKworCWFkZAkkOCwgJWVkeAorCWpsCUwocmV0dXJuX251bGwpCisJbGVhCTgoJWVjeCksICVlYXgKKwlyZXQKKworCS5wMmFsaWduIDQKK0woZXhpdF9kaXNwYXRjaF8xX2hpZ2hfOCk6CisJdGVzdAkkMHg4MCwgJWFoCisJam56CUwoZXhpdF8xXzE2KQorCXRlc3QJJDB4NDAsICVhaAorCWpueglMKGV4aXRfMV8xNSkKKwl0ZXN0CSQweDIwLCAlYWgKKwlqbnoJTChleGl0XzFfMTQpCisKKwlhZGQJJDEyLCAlZWR4CisJamwJTChyZXR1cm5fbnVsbCkKKwlsZWEJMTIoJWVjeCksICVlYXgKKwlyZXQKKworCS5wMmFsaWduIDQKK0woZXhpdF8xXzIpOgorCWFkZAkkMSwgJWVkeAorCWpsCUwocmV0dXJuX251bGwpCisJbGVhCTEoJWVjeCksICVlYXgKKwlyZXQKKworCS5wMmFsaWduIDQKK0woZXhpdF8xXzMpOgorCWFkZAkkMiwgJWVkeAorCWpsCUwocmV0dXJuX251bGwpCisJbGVhCTIoJWVjeCksICVlYXgKKwlyZXQKKworCS5wMmFsaWduIDQKK0woZXhpdF8xXzQpOgorCWFkZAkkMywgJWVkeAorCWpsCUwocmV0dXJuX251bGwpCisJbGVhCTMoJWVjeCksICVlYXgKKwlyZXQKKworCS5wMmFsaWduIDQKK0woZXhpdF8xXzYpOgorCWFkZAkkNSwgJWVkeAorCWpsCUwocmV0dXJuX251bGwpCisJbGVhCTUoJWVjeCksICVlYXgKKwlyZXQKKworCS5wMmFsaWduIDQKK0woZXhpdF8xXzcpOgorCWFkZAkkNiwgJWVkeAorCWpsCUwocmV0dXJuX251bGwpCisJbGVhCTYoJWVjeCksICVlYXgKKwlyZXQKKworCS5wMmFsaWduIDQKK0woZXhpdF8xXzgpOgorCWFkZAkkNywgJWVkeAorCWpsCUwocmV0dXJuX251bGwpCisJbGVhCTcoJWVjeCksICVlYXgKKwlyZXQKKworCS5wMmFsaWduIDQKK0woZXhpdF8xXzEwKToKKwlhZGQJJDksICVlZHgKKwlqbAlMKHJldHVybl9udWxsKQorCWxlYQk5KCVlY3gpLCAlZWF4CisJcmV0CisKKwkucDJhbGlnbiA0CitMKGV4aXRfMV8xMSk6CisJYWRkCSQxMCwgJWVkeAorCWpsCUwocmV0dXJuX251bGwpCisJbGVhCTEwKCVlY3gpLCAlZWF4CisJcmV0CisKKwkucDJhbGlnbiA0CitMKGV4aXRfMV8xMik6CisJYWRkCSQxMSwgJWVkeAorCWpsCUwocmV0dXJuX251bGwpCisJbGVhCTExKCVlY3gpLCAlZWF4CisJcmV0CisKKwkucDJhbGlnbiA0CitMKGV4aXRfMV8xNCk6CisJYWRkCSQxMywgJWVkeAorCWpsCUwocmV0dXJuX251bGwpCisJbGVhCTEzKCVlY3gpLCAlZWF4CisJcmV0CisKKwkucDJhbGlnbiA0CitMKGV4aXRfMV8xNSk6CisJYWRkCSQxNCwgJWVkeAorCWpsCUwocmV0dXJuX251bGwpCisJbGVhCTE0KCVlY3gpLCAlZWF4CisJcmV0CisKKwkucDJhbGlnbiA0CitMKGV4aXRfMV8xNik6CisJYWRkCSQxNSwgJWVkeAorCWpsCUwocmV0dXJuX251bGwpCisJbGVhCTE1KCVlY3gpLCAlZWF4CisJcmV0CisKKwkucDJhbGlnbiA0CitMKHJldHVybl9udWxsKToKKwl4b3IJJWVheCwgJWVheAorCXJldAorCisJLnAyYWxpZ24gNAorTChsZW5ndGhfbGVzczE2X29mZnNldDApOgorCW1vdgklZGwsICVjbAorCXBjbXBlcWIJKCVlYXgpLCAleG1tMQorCisJbW92CSQxLCAlZWR4CisJc2FsCSVjbCwgJWVkeAorCXN1YgkkMSwgJWVkeAorCisJbW92CSVlYXgsICVlY3gKKwlwbW92bXNrYiAleG1tMSwgJWVheAorCisJYW5kCSVlZHgsICVlYXgKKwl0ZXN0CSVlYXgsICVlYXgKKwlqbnoJTChleGl0X2Rpc3BhdGNoKQorCisJeG9yCSVlYXgsICVlYXgKKwlyZXQKKworCS5wMmFsaWduIDQKK0wobGVuZ3RoX2xlc3MxNik6CisJcHVucGNrbGJ3ICV4bW0xLCAleG1tMQorCWFkZAkkMTYsICVlZHgKKwlwdW5wY2tsYncgJXhtbTEsICV4bW0xCisKKwltb3YJJWVjeCwgJWVheAorCXBzaHVmZAkkMCwgJXhtbTEsICV4bW0xCisKKwlhbmQJJDE1LCAlZWN4CisJanoJTChsZW5ndGhfbGVzczE2X29mZnNldDApCisKKwlQVVNICSglZWRpKQorCisJbW92CSVjbCwgJWRoCisJYWRkCSVkbCwgJWRoCisJYW5kCSQtMTYsICVlYXgKKworCXN1YgkkMTYsICVkaAorCWphCUwobGVuZ3RoX2xlc3MxNl9wYXJ0MikKKworCXBjbXBlcWIJKCVlYXgpLCAleG1tMQorCXBtb3Ztc2tiICV4bW0xLCAlZWRpCisKKwlzYXIJJWNsLCAlZWRpCisJYWRkCSVlY3gsICVlYXgKKwltb3YJJWRsLCAlY2wKKworCW1vdgkkMSwgJWVkeAorCXNhbAklY2wsICVlZHgKKwlzdWIJJDEsICVlZHgKKworCWFuZAklZWR4LCAlZWRpCisJdGVzdAklZWRpLCAlZWRpCisJanoJTChyZXRfbnVsbCkKKworCWJzcgklZWRpLCAlZWRpCisJYWRkCSVlZGksICVlYXgKKwlQT1AJKCVlZGkpCisJcmV0CisKKwlDRklfUFVTSCAgICAgKCVlZGkpCisKKwkucDJhbGlnbiA0CitMKGxlbmd0aF9sZXNzMTZfcGFydDIpOgorCW1vdmRxYQkxNiglZWF4KSwgJXhtbTIKKwlwY21wZXFiCSV4bW0xLCAleG1tMgorCXBtb3Ztc2tiICV4bW0yLCAlZWRpCisKKwltb3YJJWNsLCAlY2gKKworCW1vdgklZGgsICVjbAorCW1vdgkkMSwgJWVkeAorCXNhbAklY2wsICVlZHgKKwlzdWIJJDEsICVlZHgKKworCWFuZAklZWR4LCAlZWRpCisKKwl0ZXN0CSVlZGksICVlZGkKKwlqbnoJTChsZW5ndGhfbGVzczE2X3BhcnQyX3JldHVybikKKworCXBjbXBlcWIJKCVlYXgpLCAleG1tMQorCXBtb3Ztc2tiICV4bW0xLCAlZWRpCisKKwltb3YJJWNoLCAlY2wKKwlzYXIJJWNsLCAlZWRpCisJdGVzdAklZWRpLCAlZWRpCisJanoJTChyZXRfbnVsbCkKKworCWJzcgklZWRpLCAlZWRpCisJYWRkCSVlZGksICVlYXgKKwl4b3IJJWNoLCAlY2gKKwlhZGQJJWVjeCwgJWVheAorCVBPUAkoJWVkaSkKKwlyZXQKKworCUNGSV9QVVNIICAgICAoJWVkaSkKKworCS5wMmFsaWduIDQKK0wobGVuZ3RoX2xlc3MxNl9wYXJ0Ml9yZXR1cm4pOgorCWJzcgklZWRpLCAlZWRpCisJbGVhCTE2KCVlYXgsICVlZGkpLCAlZWF4CisJUE9QCSglZWRpKQorCXJldAorCisJQ0ZJX1BVU0ggICAgICglZWRpKQorCisJLnAyYWxpZ24gNAorTChyZXRfbnVsbCk6CisJeG9yCSVlYXgsICVlYXgKKwlQT1AJKCVlZGkpCisJcmV0CisKK0VORCAobWVtcmNocikKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3RyaW5nL3NzZTItbWVtc2V0LWF0b20uUyBiL2xpYmMvYXJjaC14ODYvc3RyaW5nL3NzZTItbWVtc2V0LWF0b20uUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTRiZjUxCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9zdHJpbmcvc3NlMi1tZW1zZXQtYXRvbS5TCkBAIC0wLDAgKzEsOTIxIEBACisvKgorQ29weXJpZ2h0IChjKSAyMDEwLCBJbnRlbCBDb3Jwb3JhdGlvbgorQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKworICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICAgICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKworICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICAgICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorICAgICogYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisKKyAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgSW50ZWwgQ29ycG9yYXRpb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgICAgKiBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAgICAqIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECitBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CitMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KK0FOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqLworCisjaW5jbHVkZSAiY2FjaGUuaCIKKyN1bmRlZiBfX2k2ODYKKworI2lmbmRlZiBMCisjIGRlZmluZSBMKGxhYmVsKQkuTCMjbGFiZWwKKyNlbmRpZgorCisjaWZuZGVmIEFMSUdOCisjIGRlZmluZSBBTElHTihuKQkucDJhbGlnbiBuCisjZW5kaWYKKworI2lmbmRlZiBjZmlfc3RhcnRwcm9jCisjIGRlZmluZSBjZmlfc3RhcnRwcm9jCQkJLmNmaV9zdGFydHByb2MKKyNlbmRpZgorCisjaWZuZGVmIGNmaV9lbmRwcm9jCisjIGRlZmluZSBjZmlfZW5kcHJvYwkJCS5jZmlfZW5kcHJvYworI2VuZGlmCisKKyNpZm5kZWYgY2ZpX3JlbF9vZmZzZXQKKyMgZGVmaW5lIGNmaV9yZWxfb2Zmc2V0KHJlZywgb2ZmKQkuY2ZpX3JlbF9vZmZzZXQgcmVnLCBvZmYKKyNlbmRpZgorCisjaWZuZGVmIGNmaV9yZXN0b3JlCisjIGRlZmluZSBjZmlfcmVzdG9yZShyZWcpCQkuY2ZpX3Jlc3RvcmUgcmVnCisjZW5kaWYKKworI2lmbmRlZiBjZmlfYWRqdXN0X2NmYV9vZmZzZXQKKyMgZGVmaW5lIGNmaV9hZGp1c3RfY2ZhX29mZnNldChvZmYpCS5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgb2ZmCisjZW5kaWYKKworI2lmbmRlZiBFTlRSWQorIyBkZWZpbmUgRU5UUlkobmFtZSkJCQlcCisJLnR5cGUgbmFtZSwgIEBmdW5jdGlvbjsgCVwKKwkuZ2xvYmwgbmFtZTsJCQlcCisJLnAyYWxpZ24gNDsJCQlcCituYW1lOgkJCQkJXAorCWNmaV9zdGFydHByb2MKKyNlbmRpZgorCisjaWZuZGVmIEVORAorIyBkZWZpbmUgRU5EKG5hbWUpCQkJXAorCWNmaV9lbmRwcm9jOwkJCVwKKwkuc2l6ZSBuYW1lLCAuLW5hbWUKKyNlbmRpZgorCisjZGVmaW5lIENGSV9QVVNIKFJFRykJCQkJCQlcCisgIGNmaV9hZGp1c3RfY2ZhX29mZnNldCAoNCk7CQkJCQlcCisgIGNmaV9yZWxfb2Zmc2V0IChSRUcsIDApCisKKyNkZWZpbmUgQ0ZJX1BPUChSRUcpCQkJCQkJXAorICBjZmlfYWRqdXN0X2NmYV9vZmZzZXQgKC00KTsJCQkJCVwKKyAgY2ZpX3Jlc3RvcmUgKFJFRykKKworI2RlZmluZSBQVVNIKFJFRykJcHVzaGwgUkVHOyBDRklfUFVTSCAoUkVHKQorI2RlZmluZSBQT1AoUkVHKQlwb3BsIFJFRzsgQ0ZJX1BPUCAoUkVHKQorCisjaWZkZWYgVVNFX0FTX0JaRVJPCisjIGRlZmluZSBERVNUCQlQQVJNUworIyBkZWZpbmUgTEVOCQlERVNUKzQKKyMgZGVmaW5lIFNFVFJUTlZBTAorI2Vsc2UKKyMgZGVmaW5lIERFU1QJCVBBUk1TCisjIGRlZmluZSBDSFIJCURFU1QrNAorIyBkZWZpbmUgTEVOCQlDSFIrNAorIyBkZWZpbmUgU0VUUlROVkFMCW1vdmwgREVTVCglZXNwKSwgJWVheAorI2VuZGlmCisKKyNpZiAoZGVmaW5lZCBTSEFSRUQgfHwgZGVmaW5lZCBfX1BJQ19fKQorIyBkZWZpbmUgRU5UUkFOQ0UJUFVTSCAoJWVieCk7CisjIGRlZmluZSBSRVRVUk5fRU5ECVBPUCAoJWVieCk7IHJldAorIyBkZWZpbmUgUkVUVVJOCQlSRVRVUk5fRU5EOyBDRklfUFVTSCAoJWVieCkKKyMgZGVmaW5lIFBBUk1TCQk4CQkvKiBQcmVzZXJ2ZSBFQlguICAqLworIyBkZWZpbmUgSk1QVEJMKEksIEIpCUkgLSBCCisKKy8qIExvYWQgYW4gZW50cnkgaW4gYSBqdW1wIHRhYmxlIGludG8gRUJYIGFuZCBicmFuY2ggdG8gaXQuICBUQUJMRSBpcyBhCisgICBqdW1wIHRhYmxlIHdpdGggcmVsYXRpdmUgb2Zmc2V0cy4gICAqLworIyBkZWZpbmUgQlJBTkNIX1RPX0pNUFRCTF9FTlRSWShUQUJMRSkJCQkJXAorICAgIC8qIFdlIGZpcnN0IGxvYWQgUEMgaW50byBFQlguICAqLwkJCQlcCisgICAgY2FsbAlfX2k2ODYuZ2V0X3BjX3RodW5rLmJ4OwkJCQlcCisgICAgLyogR2V0IHRoZSBhZGRyZXNzIG9mIHRoZSBqdW1wIHRhYmxlLiAgKi8JCQlcCisgICAgYWRkCQkkKFRBQkxFIC0gLiksICVlYng7CQkJCVwKKyAgICAvKiBHZXQgdGhlIGVudHJ5IGFuZCBjb252ZXJ0IHRoZSByZWxhdGl2ZSBvZmZzZXQgdG8gdGhlCVwKKyAgICAgICBhYnNvbHV0ZSBhZGRyZXNzLiAgKi8JCQkJCVwKKyAgICBhZGQJCSglZWJ4LCVlY3gsNCksICVlYng7CQkJCVwKKyAgICBhZGQJCSVlY3gsICVlZHg7CQkJCQlcCisgICAgLyogV2UgbG9hZGVkIHRoZSBqdW1wIHRhYmxlIGFuZCBhZGp1ZXN0ZWQgRURYLiBHby4gICovCVwKKyAgICBqbXAJCSolZWJ4CisKKwkuc2VjdGlvbgkuZ251LmxpbmtvbmNlLnQuX19pNjg2LmdldF9wY190aHVuay5ieCwiYXgiLEBwcm9nYml0cworCS5nbG9ibAlfX2k2ODYuZ2V0X3BjX3RodW5rLmJ4CisJLmhpZGRlbglfX2k2ODYuZ2V0X3BjX3RodW5rLmJ4CisJQUxJR04gKDQpCisJLnR5cGUJX19pNjg2LmdldF9wY190aHVuay5ieCxAZnVuY3Rpb24KK19faTY4Ni5nZXRfcGNfdGh1bmsuYng6CisJbW92bAkoJWVzcCksICVlYngKKwlyZXQKKyNlbHNlCisjIGRlZmluZSBFTlRSQU5DRQorIyBkZWZpbmUgUkVUVVJOX0VORAlyZXQKKyMgZGVmaW5lIFJFVFVSTgkJUkVUVVJOX0VORAorIyBkZWZpbmUgUEFSTVMJCTQKKyMgZGVmaW5lIEpNUFRCTChJLCBCKQlJCisKKy8qIEJyYW5jaCB0byBhbiBlbnRyeSBpbiBhIGp1bXAgdGFibGUuICBUQUJMRSBpcyBhIGp1bXAgdGFibGUgd2l0aAorICAgYWJzb2x1dGUgb2Zmc2V0cy4gICovCisjIGRlZmluZSBCUkFOQ0hfVE9fSk1QVEJMX0VOVFJZKFRBQkxFKQkJCQlcCisgICAgYWRkCQklZWN4LCAlZWR4OwkJCQkJXAorICAgIGptcAkJKlRBQkxFKCwlZWN4LDQpCisjZW5kaWYKKworI2lmbmRlZiBNRU1TRVQKKyMgZGVmaW5lIE1FTVNFVCBtZW1zZXQKKyNlbmRpZgorCisJLnNlY3Rpb24gLnRleHQuc3NlMiwiYXgiLEBwcm9nYml0cworCUFMSUdOICg0KQorRU5UUlkgKE1FTVNFVCkKKwlFTlRSQU5DRQorCisJbW92bAlMRU4oJWVzcCksICVlY3gKKyNpZmRlZiBVU0VfQVNfQlpFUk8KKwl4b3IJJWVheCwgJWVheAorI2Vsc2UKKwltb3Z6YmwJQ0hSKCVlc3ApLCAlZWF4CisJbW92YgklYWwsICVhaAorCS8qIEZpbGwgdGhlIHdob2xlIEVBWCB3aXRoIHBhdHRlcm4uICAqLworCW1vdmwJJWVheCwgJWVkeAorCXNobAkkMTYsICVlYXgKKwlvcgklZWR4LCAlZWF4CisjZW5kaWYKKwltb3ZsCURFU1QoJWVzcCksICVlZHgKKwljbXAJJDMyLCAlZWN4CisJamFlCUwoMzJieXRlc29ybW9yZSkKKworTCh3cml0ZV9sZXNzMzJieXRlcyk6CisJQlJBTkNIX1RPX0pNUFRCTF9FTlRSWSAoTCh0YWJsZV9sZXNzXzMyYnl0ZXMpKQorCisKKwkucHVzaHNlY3Rpb24gLnJvZGF0YS5zc2UyLCJhIixAcHJvZ2JpdHMKKwlBTElHTiAoMikKK0wodGFibGVfbGVzc18zMmJ5dGVzKToKKwkuaW50CUpNUFRCTCAoTCh3cml0ZV8wYnl0ZXMpLCBMKHRhYmxlX2xlc3NfMzJieXRlcykpCisJLmludAlKTVBUQkwgKEwod3JpdGVfMWJ5dGVzKSwgTCh0YWJsZV9sZXNzXzMyYnl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKHdyaXRlXzJieXRlcyksIEwodGFibGVfbGVzc18zMmJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTCh3cml0ZV8zYnl0ZXMpLCBMKHRhYmxlX2xlc3NfMzJieXRlcykpCisJLmludAlKTVBUQkwgKEwod3JpdGVfNGJ5dGVzKSwgTCh0YWJsZV9sZXNzXzMyYnl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKHdyaXRlXzVieXRlcyksIEwodGFibGVfbGVzc18zMmJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTCh3cml0ZV82Ynl0ZXMpLCBMKHRhYmxlX2xlc3NfMzJieXRlcykpCisJLmludAlKTVBUQkwgKEwod3JpdGVfN2J5dGVzKSwgTCh0YWJsZV9sZXNzXzMyYnl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKHdyaXRlXzhieXRlcyksIEwodGFibGVfbGVzc18zMmJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTCh3cml0ZV85Ynl0ZXMpLCBMKHRhYmxlX2xlc3NfMzJieXRlcykpCisJLmludAlKTVBUQkwgKEwod3JpdGVfMTBieXRlcyksIEwodGFibGVfbGVzc18zMmJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTCh3cml0ZV8xMWJ5dGVzKSwgTCh0YWJsZV9sZXNzXzMyYnl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKHdyaXRlXzEyYnl0ZXMpLCBMKHRhYmxlX2xlc3NfMzJieXRlcykpCisJLmludAlKTVBUQkwgKEwod3JpdGVfMTNieXRlcyksIEwodGFibGVfbGVzc18zMmJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTCh3cml0ZV8xNGJ5dGVzKSwgTCh0YWJsZV9sZXNzXzMyYnl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKHdyaXRlXzE1Ynl0ZXMpLCBMKHRhYmxlX2xlc3NfMzJieXRlcykpCisJLmludAlKTVBUQkwgKEwod3JpdGVfMTZieXRlcyksIEwodGFibGVfbGVzc18zMmJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTCh3cml0ZV8xN2J5dGVzKSwgTCh0YWJsZV9sZXNzXzMyYnl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKHdyaXRlXzE4Ynl0ZXMpLCBMKHRhYmxlX2xlc3NfMzJieXRlcykpCisJLmludAlKTVBUQkwgKEwod3JpdGVfMTlieXRlcyksIEwodGFibGVfbGVzc18zMmJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTCh3cml0ZV8yMGJ5dGVzKSwgTCh0YWJsZV9sZXNzXzMyYnl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKHdyaXRlXzIxYnl0ZXMpLCBMKHRhYmxlX2xlc3NfMzJieXRlcykpCisJLmludAlKTVBUQkwgKEwod3JpdGVfMjJieXRlcyksIEwodGFibGVfbGVzc18zMmJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTCh3cml0ZV8yM2J5dGVzKSwgTCh0YWJsZV9sZXNzXzMyYnl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKHdyaXRlXzI0Ynl0ZXMpLCBMKHRhYmxlX2xlc3NfMzJieXRlcykpCisJLmludAlKTVBUQkwgKEwod3JpdGVfMjVieXRlcyksIEwodGFibGVfbGVzc18zMmJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTCh3cml0ZV8yNmJ5dGVzKSwgTCh0YWJsZV9sZXNzXzMyYnl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKHdyaXRlXzI3Ynl0ZXMpLCBMKHRhYmxlX2xlc3NfMzJieXRlcykpCisJLmludAlKTVBUQkwgKEwod3JpdGVfMjhieXRlcyksIEwodGFibGVfbGVzc18zMmJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTCh3cml0ZV8yOWJ5dGVzKSwgTCh0YWJsZV9sZXNzXzMyYnl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKHdyaXRlXzMwYnl0ZXMpLCBMKHRhYmxlX2xlc3NfMzJieXRlcykpCisJLmludAlKTVBUQkwgKEwod3JpdGVfMzFieXRlcyksIEwodGFibGVfbGVzc18zMmJ5dGVzKSkKKwkucG9wc2VjdGlvbgorCisJQUxJR04gKDQpCitMKHdyaXRlXzI4Ynl0ZXMpOgorCW1vdmwJJWVheCwgLTI4KCVlZHgpCitMKHdyaXRlXzI0Ynl0ZXMpOgorCW1vdmwJJWVheCwgLTI0KCVlZHgpCitMKHdyaXRlXzIwYnl0ZXMpOgorCW1vdmwJJWVheCwgLTIwKCVlZHgpCitMKHdyaXRlXzE2Ynl0ZXMpOgorCW1vdmwJJWVheCwgLTE2KCVlZHgpCitMKHdyaXRlXzEyYnl0ZXMpOgorCW1vdmwJJWVheCwgLTEyKCVlZHgpCitMKHdyaXRlXzhieXRlcyk6CisJbW92bAklZWF4LCAtOCglZWR4KQorTCh3cml0ZV80Ynl0ZXMpOgorCW1vdmwJJWVheCwgLTQoJWVkeCkKK0wod3JpdGVfMGJ5dGVzKToKKwlTRVRSVE5WQUwKKwlSRVRVUk4KKworCUFMSUdOICg0KQorTCh3cml0ZV8yOWJ5dGVzKToKKwltb3ZsCSVlYXgsIC0yOSglZWR4KQorTCh3cml0ZV8yNWJ5dGVzKToKKwltb3ZsCSVlYXgsIC0yNSglZWR4KQorTCh3cml0ZV8yMWJ5dGVzKToKKwltb3ZsCSVlYXgsIC0yMSglZWR4KQorTCh3cml0ZV8xN2J5dGVzKToKKwltb3ZsCSVlYXgsIC0xNyglZWR4KQorTCh3cml0ZV8xM2J5dGVzKToKKwltb3ZsCSVlYXgsIC0xMyglZWR4KQorTCh3cml0ZV85Ynl0ZXMpOgorCW1vdmwJJWVheCwgLTkoJWVkeCkKK0wod3JpdGVfNWJ5dGVzKToKKwltb3ZsCSVlYXgsIC01KCVlZHgpCitMKHdyaXRlXzFieXRlcyk6CisJbW92YgklYWwsIC0xKCVlZHgpCisJU0VUUlROVkFMCisJUkVUVVJOCisKKwlBTElHTiAoNCkKK0wod3JpdGVfMzBieXRlcyk6CisJbW92bAklZWF4LCAtMzAoJWVkeCkKK0wod3JpdGVfMjZieXRlcyk6CisJbW92bAklZWF4LCAtMjYoJWVkeCkKK0wod3JpdGVfMjJieXRlcyk6CisJbW92bAklZWF4LCAtMjIoJWVkeCkKK0wod3JpdGVfMThieXRlcyk6CisJbW92bAklZWF4LCAtMTgoJWVkeCkKK0wod3JpdGVfMTRieXRlcyk6CisJbW92bAklZWF4LCAtMTQoJWVkeCkKK0wod3JpdGVfMTBieXRlcyk6CisJbW92bAklZWF4LCAtMTAoJWVkeCkKK0wod3JpdGVfNmJ5dGVzKToKKwltb3ZsCSVlYXgsIC02KCVlZHgpCitMKHdyaXRlXzJieXRlcyk6CisJbW92dwklYXgsIC0yKCVlZHgpCisJU0VUUlROVkFMCisJUkVUVVJOCisKKwlBTElHTiAoNCkKK0wod3JpdGVfMzFieXRlcyk6CisJbW92bAklZWF4LCAtMzEoJWVkeCkKK0wod3JpdGVfMjdieXRlcyk6CisJbW92bAklZWF4LCAtMjcoJWVkeCkKK0wod3JpdGVfMjNieXRlcyk6CisJbW92bAklZWF4LCAtMjMoJWVkeCkKK0wod3JpdGVfMTlieXRlcyk6CisJbW92bAklZWF4LCAtMTkoJWVkeCkKK0wod3JpdGVfMTVieXRlcyk6CisJbW92bAklZWF4LCAtMTUoJWVkeCkKK0wod3JpdGVfMTFieXRlcyk6CisJbW92bAklZWF4LCAtMTEoJWVkeCkKK0wod3JpdGVfN2J5dGVzKToKKwltb3ZsCSVlYXgsIC03KCVlZHgpCitMKHdyaXRlXzNieXRlcyk6CisJbW92dwklYXgsIC0zKCVlZHgpCisJbW92YgklYWwsIC0xKCVlZHgpCisJU0VUUlROVkFMCisJUkVUVVJOCisKKwlBTElHTiAoNCkKKy8qIEVDWCA+IDMyIGFuZCBFRFggaXMgNCBieXRlIGFsaWduZWQuICAqLworTCgzMmJ5dGVzb3Jtb3JlKToKKwkvKiBGaWxsIHhtbTAgd2l0aCB0aGUgcGF0dGVybi4gICovCisjaWZkZWYgVVNFX0FTX0JaRVJPCisJcHhvcgkleG1tMCwgJXhtbTAKKyNlbHNlCisJbW92ZAklZWF4LCAleG1tMAorCXBzaHVmZAkkMCwgJXhtbTAsICV4bW0wCisjZW5kaWYKKwl0ZXN0bAkkMHhmLCAlZWR4CisJanoJTChhbGlnbmVkXzE2KQorLyogRUNYID4gMzIgYW5kIEVEWCBpcyBub3QgMTYgYnl0ZSBhbGlnbmVkLiAgKi8KK0wobm90X2FsaWduZWRfMTYpOgorCW1vdmRxdQkleG1tMCwgKCVlZHgpCisJbW92bAklZWR4LCAlZWF4CisJYW5kCSQtMTYsICVlZHgKKwlhZGQJJDE2LCAlZWR4CisJc3ViCSVlZHgsICVlYXgKKwlhZGQJJWVheCwgJWVjeAorCW1vdmQJJXhtbTAsICVlYXgKKworCUFMSUdOICg0KQorTChhbGlnbmVkXzE2KToKKwljbXAJJDEyOCwgJWVjeAorCWphZQlMKDEyOGJ5dGVzb3Jtb3JlKQorCitMKGFsaWduZWRfMTZfbGVzczEyOGJ5dGVzKToKKwlCUkFOQ0hfVE9fSk1QVEJMX0VOVFJZIChMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKworCUFMSUdOICg0KQorTCgxMjhieXRlc29ybW9yZSk6CisjaWZkZWYgU0hBUkVEX0NBQ0hFX1NJWkUKKwlQVVNIICglZWJ4KQorCW1vdgkkU0hBUkVEX0NBQ0hFX1NJWkUsICVlYngKKyNlbHNlCisjIGlmIChkZWZpbmVkIFNIQVJFRCB8fCBkZWZpbmVkIF9fUElDX18pCisJY2FsbAlfX2k2ODYuZ2V0X3BjX3RodW5rLmJ4CisJYWRkCSRfR0xPQkFMX09GRlNFVF9UQUJMRV8sICVlYngKKwltb3YJX194ODZfc2hhcmVkX2NhY2hlX3NpemVAR09UT0ZGKCVlYngpLCAlZWJ4CisjIGVsc2UKKwlQVVNIICglZWJ4KQorCW1vdglfX3g4Nl9zaGFyZWRfY2FjaGVfc2l6ZSwgJWVieAorIyBlbmRpZgorI2VuZGlmCisJY21wCSVlYngsICVlY3gKKwlqYWUJTCgxMjhieXRlc29ybW9yZV9udF9zdGFydCkKKworCisjaWZkZWYgREFUQV9DQUNIRV9TSVpFCisJUE9QICglZWJ4KQorIyBkZWZpbmUgUkVTVE9SRV9FQlhfU1RBVEUgQ0ZJX1BVU0ggKCVlYngpCisJY21wCSREQVRBX0NBQ0hFX1NJWkUsICVlY3gKKyNlbHNlCisjIGlmIChkZWZpbmVkIFNIQVJFRCB8fCBkZWZpbmVkIF9fUElDX18pCisjICBkZWZpbmUgUkVTVE9SRV9FQlhfU1RBVEUKKwljYWxsCV9faTY4Ni5nZXRfcGNfdGh1bmsuYngKKwlhZGQJJF9HTE9CQUxfT0ZGU0VUX1RBQkxFXywgJWVieAorCWNtcAlfX3g4Nl9kYXRhX2NhY2hlX3NpemVAR09UT0ZGKCVlYngpLCAlZWN4CisjIGVsc2UKKwlQT1AgKCVlYngpCisjICBkZWZpbmUgUkVTVE9SRV9FQlhfU1RBVEUgQ0ZJX1BVU0ggKCVlYngpCisJY21wCV9feDg2X2RhdGFfY2FjaGVfc2l6ZSwgJWVjeAorIyBlbmRpZgorI2VuZGlmCisKKwlqYWUJTCgxMjhieXRlc19MMl9ub3JtYWwpCisJc3VibAkkMTI4LCAlZWN4CitMKDEyOGJ5dGVzb3Jtb3JlX25vcm1hbCk6CisJc3ViCSQxMjgsICVlY3gKKwltb3ZkcWEJJXhtbTAsICglZWR4KQorCW1vdmRxYQkleG1tMCwgMHgxMCglZWR4KQorCW1vdmRxYQkleG1tMCwgMHgyMCglZWR4KQorCW1vdmRxYQkleG1tMCwgMHgzMCglZWR4KQorCW1vdmRxYQkleG1tMCwgMHg0MCglZWR4KQorCW1vdmRxYQkleG1tMCwgMHg1MCglZWR4KQorCW1vdmRxYQkleG1tMCwgMHg2MCglZWR4KQorCW1vdmRxYQkleG1tMCwgMHg3MCglZWR4KQorCWxlYQkxMjgoJWVkeCksICVlZHgKKwlqYglMKDEyOGJ5dGVzbGVzc19ub3JtYWwpCisKKworCXN1YgkkMTI4LCAlZWN4CisJbW92ZHFhCSV4bW0wLCAoJWVkeCkKKwltb3ZkcWEJJXhtbTAsIDB4MTAoJWVkeCkKKwltb3ZkcWEJJXhtbTAsIDB4MjAoJWVkeCkKKwltb3ZkcWEJJXhtbTAsIDB4MzAoJWVkeCkKKwltb3ZkcWEJJXhtbTAsIDB4NDAoJWVkeCkKKwltb3ZkcWEJJXhtbTAsIDB4NTAoJWVkeCkKKwltb3ZkcWEJJXhtbTAsIDB4NjAoJWVkeCkKKwltb3ZkcWEJJXhtbTAsIDB4NzAoJWVkeCkKKwlsZWEJMTI4KCVlZHgpLCAlZWR4CisJamFlCUwoMTI4Ynl0ZXNvcm1vcmVfbm9ybWFsKQorCitMKDEyOGJ5dGVzbGVzc19ub3JtYWwpOgorCWFkZAkkMTI4LCAlZWN4CisJQlJBTkNIX1RPX0pNUFRCTF9FTlRSWSAoTCh0YWJsZV8xNl8xMjhieXRlcykpCisKKwlBTElHTiAoNCkKK0woMTI4Ynl0ZXNfTDJfbm9ybWFsKToKKwlwcmVmZXRjaHQwCTB4MzgwKCVlZHgpCisJcHJlZmV0Y2h0MAkweDNjMCglZWR4KQorCXN1YgkkMTI4LCAlZWN4CisJbW92ZHFhCSV4bW0wLCAoJWVkeCkKKwltb3ZhcHMJJXhtbTAsIDB4MTAoJWVkeCkKKwltb3ZhcHMJJXhtbTAsIDB4MjAoJWVkeCkKKwltb3ZhcHMJJXhtbTAsIDB4MzAoJWVkeCkKKwltb3ZhcHMJJXhtbTAsIDB4NDAoJWVkeCkKKwltb3ZhcHMJJXhtbTAsIDB4NTAoJWVkeCkKKwltb3ZhcHMJJXhtbTAsIDB4NjAoJWVkeCkKKwltb3ZhcHMJJXhtbTAsIDB4NzAoJWVkeCkKKwlhZGQJJDEyOCwgJWVkeAorCWNtcAkkMTI4LCAlZWN4CisJamFlCUwoMTI4Ynl0ZXNfTDJfbm9ybWFsKQorCitMKDEyOGJ5dGVzbGVzc19MMl9ub3JtYWwpOgorCUJSQU5DSF9UT19KTVBUQkxfRU5UUlkgKEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCisJUkVTVE9SRV9FQlhfU1RBVEUKK0woMTI4Ynl0ZXNvcm1vcmVfbnRfc3RhcnQpOgorCXN1YgklZWJ4LCAlZWN4CisJbW92CSVlYngsICVlYXgKKwlhbmQJJDB4N2YsICVlYXgKKwlhZGQJJWVheCwgJWVjeAorCW1vdmQJJXhtbTAsICVlYXgKKwlBTElHTiAoNCkKK0woMTI4Ynl0ZXNvcm1vcmVfc2hhcmVkX2NhY2hlX2xvb3ApOgorCXByZWZldGNodDAJMHgzYzAoJWVkeCkKKwlwcmVmZXRjaHQwCTB4MzgwKCVlZHgpCisJc3ViCSQweDgwLCAlZWJ4CisJbW92ZHFhCSV4bW0wLCAoJWVkeCkKKwltb3ZkcWEJJXhtbTAsIDB4MTAoJWVkeCkKKwltb3ZkcWEJJXhtbTAsIDB4MjAoJWVkeCkKKwltb3ZkcWEJJXhtbTAsIDB4MzAoJWVkeCkKKwltb3ZkcWEJJXhtbTAsIDB4NDAoJWVkeCkKKwltb3ZkcWEJJXhtbTAsIDB4NTAoJWVkeCkKKwltb3ZkcWEJJXhtbTAsIDB4NjAoJWVkeCkKKwltb3ZkcWEJJXhtbTAsIDB4NzAoJWVkeCkKKwlhZGQJJDB4ODAsICVlZHgKKwljbXAJJDB4ODAsICVlYngKKwlqYWUJTCgxMjhieXRlc29ybW9yZV9zaGFyZWRfY2FjaGVfbG9vcCkKKwljbXAJJDB4ODAsICVlY3gKKwlqYglMKHNoYXJlZF9jYWNoZV9sb29wX2VuZCkKKwlBTElHTiAoNCkKK0woMTI4Ynl0ZXNvcm1vcmVfbnQpOgorCXN1YgkkMHg4MCwgJWVjeAorCW1vdm50ZHEJJXhtbTAsICglZWR4KQorCW1vdm50ZHEJJXhtbTAsIDB4MTAoJWVkeCkKKwltb3ZudGRxCSV4bW0wLCAweDIwKCVlZHgpCisJbW92bnRkcQkleG1tMCwgMHgzMCglZWR4KQorCW1vdm50ZHEJJXhtbTAsIDB4NDAoJWVkeCkKKwltb3ZudGRxCSV4bW0wLCAweDUwKCVlZHgpCisJbW92bnRkcQkleG1tMCwgMHg2MCglZWR4KQorCW1vdm50ZHEJJXhtbTAsIDB4NzAoJWVkeCkKKwlhZGQJJDB4ODAsICVlZHgKKwljbXAJJDB4ODAsICVlY3gKKwlqYWUJTCgxMjhieXRlc29ybW9yZV9udCkKKwlzZmVuY2UKK0woc2hhcmVkX2NhY2hlX2xvb3BfZW5kKToKKyNpZiBkZWZpbmVkIERBVEFfQ0FDSEVfU0laRSB8fCAhKGRlZmluZWQgU0hBUkVEIHx8IGRlZmluZWQgX19QSUNfXykKKwlQT1AgKCVlYngpCisjZW5kaWYKKwlCUkFOQ0hfVE9fSk1QVEJMX0VOVFJZIChMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKworCisJLnB1c2hzZWN0aW9uIC5yb2RhdGEuc3NlMiwiYSIsQHByb2diaXRzCisJQUxJR04gKDIpCitMKHRhYmxlXzE2XzEyOGJ5dGVzKToKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzBieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMWJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCisJLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl8yYnl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzNieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNGJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCisJLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl81Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzZieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfN2J5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCisJLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl84Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzlieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMTBieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMTFieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMTJieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMTNieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMTRieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMTVieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMTZieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMTdieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMThieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMTlieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMjBieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMjFieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMjJieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMjNieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMjRieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMjVieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMjZieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMjdieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMjhieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMjlieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMzBieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMzFieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMzJieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMzNieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMzRieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMzVieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMzZieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMzdieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMzhieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMzlieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNDBieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNDFieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNDJieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNDNieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNDRieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNDVieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNDZieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNDdieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNDhieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNDlieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNTBieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNTFieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNTJieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNTNieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNTRieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNTVieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNTZieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNTdieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNThieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNTlieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNjBieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNjFieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNjJieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNjNieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNjRieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNjVieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNjZieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNjdieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNjhieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNjlieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNzBieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNzFieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNzJieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNzNieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNzRieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNzVieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNzZieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNzdieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNzhieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNzlieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfODBieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfODFieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfODJieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfODNieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfODRieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfODVieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfODZieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfODdieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfODhieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfODlieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfOTBieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfOTFieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfOTJieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfOTNieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfOTRieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfOTVieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfOTZieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfOTdieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfOThieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfOTlieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMTAwYnl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzEwMWJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCisJLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl8xMDJieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMTAzYnl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzEwNGJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCisJLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl8xMDVieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMTA2Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzEwN2J5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCisJLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl8xMDhieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMTA5Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzExMGJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCisJLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl8xMTFieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMTEyYnl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzExM2J5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCisJLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl8xMTRieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMTE1Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzExNmJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCisJLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl8xMTdieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMTE4Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzExOWJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCisJLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl8xMjBieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMTIxYnl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzEyMmJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCisJLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl8xMjNieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMTI0Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzEyNWJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCisJLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl8xMjZieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQorCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMTI3Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKKwkucG9wc2VjdGlvbgorCisJQUxJR04gKDQpCitMKGFsaWduZWRfMTZfMTEyYnl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTExMiglZWR4KQorTChhbGlnbmVkXzE2Xzk2Ynl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTk2KCVlZHgpCitMKGFsaWduZWRfMTZfODBieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtODAoJWVkeCkKK0woYWxpZ25lZF8xNl82NGJ5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC02NCglZWR4KQorTChhbGlnbmVkXzE2XzQ4Ynl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTQ4KCVlZHgpCitMKGFsaWduZWRfMTZfMzJieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtMzIoJWVkeCkKK0woYWxpZ25lZF8xNl8xNmJ5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC0xNiglZWR4KQorTChhbGlnbmVkXzE2XzBieXRlcyk6CisJU0VUUlROVkFMCisJUkVUVVJOCisKKwlBTElHTiAoNCkKK0woYWxpZ25lZF8xNl8xMTNieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtMTEzKCVlZHgpCitMKGFsaWduZWRfMTZfOTdieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtOTcoJWVkeCkKK0woYWxpZ25lZF8xNl84MWJ5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC04MSglZWR4KQorTChhbGlnbmVkXzE2XzY1Ynl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTY1KCVlZHgpCitMKGFsaWduZWRfMTZfNDlieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtNDkoJWVkeCkKK0woYWxpZ25lZF8xNl8zM2J5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC0zMyglZWR4KQorTChhbGlnbmVkXzE2XzE3Ynl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTE3KCVlZHgpCitMKGFsaWduZWRfMTZfMWJ5dGVzKToKKwltb3ZiCSVhbCwgLTEoJWVkeCkKKwlTRVRSVE5WQUwKKwlSRVRVUk4KKworCUFMSUdOICg0KQorTChhbGlnbmVkXzE2XzExNGJ5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC0xMTQoJWVkeCkKK0woYWxpZ25lZF8xNl85OGJ5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC05OCglZWR4KQorTChhbGlnbmVkXzE2XzgyYnl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTgyKCVlZHgpCitMKGFsaWduZWRfMTZfNjZieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtNjYoJWVkeCkKK0woYWxpZ25lZF8xNl81MGJ5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC01MCglZWR4KQorTChhbGlnbmVkXzE2XzM0Ynl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTM0KCVlZHgpCitMKGFsaWduZWRfMTZfMThieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtMTgoJWVkeCkKK0woYWxpZ25lZF8xNl8yYnl0ZXMpOgorCW1vdncJJWF4LCAtMiglZWR4KQorCVNFVFJUTlZBTAorCVJFVFVSTgorCisJQUxJR04gKDQpCitMKGFsaWduZWRfMTZfMTE1Ynl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTExNSglZWR4KQorTChhbGlnbmVkXzE2Xzk5Ynl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTk5KCVlZHgpCitMKGFsaWduZWRfMTZfODNieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtODMoJWVkeCkKK0woYWxpZ25lZF8xNl82N2J5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC02NyglZWR4KQorTChhbGlnbmVkXzE2XzUxYnl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTUxKCVlZHgpCitMKGFsaWduZWRfMTZfMzVieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtMzUoJWVkeCkKK0woYWxpZ25lZF8xNl8xOWJ5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC0xOSglZWR4KQorTChhbGlnbmVkXzE2XzNieXRlcyk6CisJbW92dwklYXgsIC0zKCVlZHgpCisJbW92YgklYWwsIC0xKCVlZHgpCisJU0VUUlROVkFMCisJUkVUVVJOCisKKwlBTElHTiAoNCkKK0woYWxpZ25lZF8xNl8xMTZieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtMTE2KCVlZHgpCitMKGFsaWduZWRfMTZfMTAwYnl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTEwMCglZWR4KQorTChhbGlnbmVkXzE2Xzg0Ynl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTg0KCVlZHgpCitMKGFsaWduZWRfMTZfNjhieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtNjgoJWVkeCkKK0woYWxpZ25lZF8xNl81MmJ5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC01MiglZWR4KQorTChhbGlnbmVkXzE2XzM2Ynl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTM2KCVlZHgpCitMKGFsaWduZWRfMTZfMjBieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtMjAoJWVkeCkKK0woYWxpZ25lZF8xNl80Ynl0ZXMpOgorCW1vdmwJJWVheCwgLTQoJWVkeCkKKwlTRVRSVE5WQUwKKwlSRVRVUk4KKworCUFMSUdOICg0KQorTChhbGlnbmVkXzE2XzExN2J5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC0xMTcoJWVkeCkKK0woYWxpZ25lZF8xNl8xMDFieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtMTAxKCVlZHgpCitMKGFsaWduZWRfMTZfODVieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtODUoJWVkeCkKK0woYWxpZ25lZF8xNl82OWJ5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC02OSglZWR4KQorTChhbGlnbmVkXzE2XzUzYnl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTUzKCVlZHgpCitMKGFsaWduZWRfMTZfMzdieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtMzcoJWVkeCkKK0woYWxpZ25lZF8xNl8yMWJ5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC0yMSglZWR4KQorTChhbGlnbmVkXzE2XzVieXRlcyk6CisJbW92bAklZWF4LCAtNSglZWR4KQorCW1vdmIJJWFsLCAtMSglZWR4KQorCVNFVFJUTlZBTAorCVJFVFVSTgorCisJQUxJR04gKDQpCitMKGFsaWduZWRfMTZfMTE4Ynl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTExOCglZWR4KQorTChhbGlnbmVkXzE2XzEwMmJ5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC0xMDIoJWVkeCkKK0woYWxpZ25lZF8xNl84NmJ5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC04NiglZWR4KQorTChhbGlnbmVkXzE2XzcwYnl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTcwKCVlZHgpCitMKGFsaWduZWRfMTZfNTRieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtNTQoJWVkeCkKK0woYWxpZ25lZF8xNl8zOGJ5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC0zOCglZWR4KQorTChhbGlnbmVkXzE2XzIyYnl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTIyKCVlZHgpCitMKGFsaWduZWRfMTZfNmJ5dGVzKToKKwltb3ZsCSVlYXgsIC02KCVlZHgpCisJbW92dwklYXgsIC0yKCVlZHgpCisJU0VUUlROVkFMCisJUkVUVVJOCisKKwlBTElHTiAoNCkKK0woYWxpZ25lZF8xNl8xMTlieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtMTE5KCVlZHgpCitMKGFsaWduZWRfMTZfMTAzYnl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTEwMyglZWR4KQorTChhbGlnbmVkXzE2Xzg3Ynl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTg3KCVlZHgpCitMKGFsaWduZWRfMTZfNzFieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtNzEoJWVkeCkKK0woYWxpZ25lZF8xNl81NWJ5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC01NSglZWR4KQorTChhbGlnbmVkXzE2XzM5Ynl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTM5KCVlZHgpCitMKGFsaWduZWRfMTZfMjNieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtMjMoJWVkeCkKK0woYWxpZ25lZF8xNl83Ynl0ZXMpOgorCW1vdmwJJWVheCwgLTcoJWVkeCkKKwltb3Z3CSVheCwgLTMoJWVkeCkKKwltb3ZiCSVhbCwgLTEoJWVkeCkKKwlTRVRSVE5WQUwKKwlSRVRVUk4KKworCUFMSUdOICg0KQorTChhbGlnbmVkXzE2XzEyMGJ5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC0xMjAoJWVkeCkKK0woYWxpZ25lZF8xNl8xMDRieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtMTA0KCVlZHgpCitMKGFsaWduZWRfMTZfODhieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtODgoJWVkeCkKK0woYWxpZ25lZF8xNl83MmJ5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC03MiglZWR4KQorTChhbGlnbmVkXzE2XzU2Ynl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTU2KCVlZHgpCitMKGFsaWduZWRfMTZfNDBieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtNDAoJWVkeCkKK0woYWxpZ25lZF8xNl8yNGJ5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC0yNCglZWR4KQorTChhbGlnbmVkXzE2XzhieXRlcyk6CisJbW92cQkleG1tMCwgLTgoJWVkeCkKKwlTRVRSVE5WQUwKKwlSRVRVUk4KKworCUFMSUdOICg0KQorTChhbGlnbmVkXzE2XzEyMWJ5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC0xMjEoJWVkeCkKK0woYWxpZ25lZF8xNl8xMDVieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtMTA1KCVlZHgpCitMKGFsaWduZWRfMTZfODlieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtODkoJWVkeCkKK0woYWxpZ25lZF8xNl83M2J5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC03MyglZWR4KQorTChhbGlnbmVkXzE2XzU3Ynl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTU3KCVlZHgpCitMKGFsaWduZWRfMTZfNDFieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtNDEoJWVkeCkKK0woYWxpZ25lZF8xNl8yNWJ5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC0yNSglZWR4KQorTChhbGlnbmVkXzE2XzlieXRlcyk6CisJbW92cQkleG1tMCwgLTkoJWVkeCkKKwltb3ZiCSVhbCwgLTEoJWVkeCkKKwlTRVRSVE5WQUwKKwlSRVRVUk4KKworCUFMSUdOICg0KQorTChhbGlnbmVkXzE2XzEyMmJ5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC0xMjIoJWVkeCkKK0woYWxpZ25lZF8xNl8xMDZieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtMTA2KCVlZHgpCitMKGFsaWduZWRfMTZfOTBieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtOTAoJWVkeCkKK0woYWxpZ25lZF8xNl83NGJ5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC03NCglZWR4KQorTChhbGlnbmVkXzE2XzU4Ynl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTU4KCVlZHgpCitMKGFsaWduZWRfMTZfNDJieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtNDIoJWVkeCkKK0woYWxpZ25lZF8xNl8yNmJ5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC0yNiglZWR4KQorTChhbGlnbmVkXzE2XzEwYnl0ZXMpOgorCW1vdnEJJXhtbTAsIC0xMCglZWR4KQorCW1vdncJJWF4LCAtMiglZWR4KQorCVNFVFJUTlZBTAorCVJFVFVSTgorCisJQUxJR04gKDQpCitMKGFsaWduZWRfMTZfMTIzYnl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTEyMyglZWR4KQorTChhbGlnbmVkXzE2XzEwN2J5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC0xMDcoJWVkeCkKK0woYWxpZ25lZF8xNl85MWJ5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC05MSglZWR4KQorTChhbGlnbmVkXzE2Xzc1Ynl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTc1KCVlZHgpCitMKGFsaWduZWRfMTZfNTlieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtNTkoJWVkeCkKK0woYWxpZ25lZF8xNl80M2J5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC00MyglZWR4KQorTChhbGlnbmVkXzE2XzI3Ynl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTI3KCVlZHgpCitMKGFsaWduZWRfMTZfMTFieXRlcyk6CisJbW92cQkleG1tMCwgLTExKCVlZHgpCisJbW92dwklYXgsIC0zKCVlZHgpCisJbW92YgklYWwsIC0xKCVlZHgpCisJU0VUUlROVkFMCisJUkVUVVJOCisKKwlBTElHTiAoNCkKK0woYWxpZ25lZF8xNl8xMjRieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtMTI0KCVlZHgpCitMKGFsaWduZWRfMTZfMTA4Ynl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTEwOCglZWR4KQorTChhbGlnbmVkXzE2XzkyYnl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTkyKCVlZHgpCitMKGFsaWduZWRfMTZfNzZieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtNzYoJWVkeCkKK0woYWxpZ25lZF8xNl82MGJ5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC02MCglZWR4KQorTChhbGlnbmVkXzE2XzQ0Ynl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTQ0KCVlZHgpCitMKGFsaWduZWRfMTZfMjhieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtMjgoJWVkeCkKK0woYWxpZ25lZF8xNl8xMmJ5dGVzKToKKwltb3ZxCSV4bW0wLCAtMTIoJWVkeCkKKwltb3ZsCSVlYXgsIC00KCVlZHgpCisJU0VUUlROVkFMCisJUkVUVVJOCisKKwlBTElHTiAoNCkKK0woYWxpZ25lZF8xNl8xMjVieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtMTI1KCVlZHgpCitMKGFsaWduZWRfMTZfMTA5Ynl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTEwOSglZWR4KQorTChhbGlnbmVkXzE2XzkzYnl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTkzKCVlZHgpCitMKGFsaWduZWRfMTZfNzdieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtNzcoJWVkeCkKK0woYWxpZ25lZF8xNl82MWJ5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC02MSglZWR4KQorTChhbGlnbmVkXzE2XzQ1Ynl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTQ1KCVlZHgpCitMKGFsaWduZWRfMTZfMjlieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtMjkoJWVkeCkKK0woYWxpZ25lZF8xNl8xM2J5dGVzKToKKwltb3ZxCSV4bW0wLCAtMTMoJWVkeCkKKwltb3ZsCSVlYXgsIC01KCVlZHgpCisJbW92YgklYWwsIC0xKCVlZHgpCisJU0VUUlROVkFMCisJUkVUVVJOCisKKwlBTElHTiAoNCkKK0woYWxpZ25lZF8xNl8xMjZieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtMTI2KCVlZHgpCitMKGFsaWduZWRfMTZfMTEwYnl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTExMCglZWR4KQorTChhbGlnbmVkXzE2Xzk0Ynl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTk0KCVlZHgpCitMKGFsaWduZWRfMTZfNzhieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtNzgoJWVkeCkKK0woYWxpZ25lZF8xNl82MmJ5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC02MiglZWR4KQorTChhbGlnbmVkXzE2XzQ2Ynl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTQ2KCVlZHgpCitMKGFsaWduZWRfMTZfMzBieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtMzAoJWVkeCkKK0woYWxpZ25lZF8xNl8xNGJ5dGVzKToKKwltb3ZxCSV4bW0wLCAtMTQoJWVkeCkKKwltb3ZsCSVlYXgsIC02KCVlZHgpCisJbW92dwklYXgsIC0yKCVlZHgpCisJU0VUUlROVkFMCisJUkVUVVJOCisKKwlBTElHTiAoNCkKK0woYWxpZ25lZF8xNl8xMjdieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtMTI3KCVlZHgpCitMKGFsaWduZWRfMTZfMTExYnl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTExMSglZWR4KQorTChhbGlnbmVkXzE2Xzk1Ynl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTk1KCVlZHgpCitMKGFsaWduZWRfMTZfNzlieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtNzkoJWVkeCkKK0woYWxpZ25lZF8xNl82M2J5dGVzKToKKwltb3ZkcWEJJXhtbTAsIC02MyglZWR4KQorTChhbGlnbmVkXzE2XzQ3Ynl0ZXMpOgorCW1vdmRxYQkleG1tMCwgLTQ3KCVlZHgpCitMKGFsaWduZWRfMTZfMzFieXRlcyk6CisJbW92ZHFhCSV4bW0wLCAtMzEoJWVkeCkKK0woYWxpZ25lZF8xNl8xNWJ5dGVzKToKKwltb3ZxCSV4bW0wLCAtMTUoJWVkeCkKKwltb3ZsCSVlYXgsIC03KCVlZHgpCisJbW92dwklYXgsIC0zKCVlZHgpCisJbW92YgklYWwsIC0xKCVlZHgpCisJU0VUUlROVkFMCisJUkVUVVJOX0VORAorCitFTkQgKE1FTVNFVCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3RyaW5nL3NzZTItbWVtc2V0NS1hdG9tLlMgYi9saWJjL2FyY2gteDg2L3N0cmluZy9zc2UyLW1lbXNldDUtYXRvbS5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NTdjMDE5Li4wMDAwMDAwCi0tLSBhL2xpYmMvYXJjaC14ODYvc3RyaW5nL3NzZTItbWVtc2V0NS1hdG9tLlMKKysrIC9kZXYvbnVsbApAQCAtMSw5MTQgKzAsMCBAQAotLyoKLUNvcHlyaWdodCAoYykgMjAxMCwgSW50ZWwgQ29ycG9yYXRpb24KLUFsbCByaWdodHMgcmVzZXJ2ZWQuCi0KLVJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6Ci0KLSAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKLSAgICAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0KLSAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKLSAgICAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KLSAgICAqIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotCi0gICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEludGVsIENvcnBvcmF0aW9uIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICAgICogbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0gICAgKiB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLQotVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAotQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLVdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLURJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKLUFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCi1BTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKLVNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKi8KLQotI2lmbmRlZiBMCi0jIGRlZmluZSBMKGxhYmVsKQkuTCMjbGFiZWwKLSNlbmRpZgotCi0jaWZuZGVmIEFMSUdOCi0jIGRlZmluZSBBTElHTihuKQkucDJhbGlnbiBuCi0jZW5kaWYKLQotI2lmbmRlZiBjZmlfc3RhcnRwcm9jCi0jIGRlZmluZSBjZmlfc3RhcnRwcm9jCQkJLmNmaV9zdGFydHByb2MKLSNlbmRpZgotCi0jaWZuZGVmIGNmaV9lbmRwcm9jCi0jIGRlZmluZSBjZmlfZW5kcHJvYwkJCS5jZmlfZW5kcHJvYwotI2VuZGlmCi0KLSNpZm5kZWYgY2ZpX3JlbF9vZmZzZXQKLSMgZGVmaW5lIGNmaV9yZWxfb2Zmc2V0KHJlZywgb2ZmKQkuY2ZpX3JlbF9vZmZzZXQgcmVnLCBvZmYKLSNlbmRpZgotCi0jaWZuZGVmIGNmaV9yZXN0b3JlCi0jIGRlZmluZSBjZmlfcmVzdG9yZShyZWcpCQkuY2ZpX3Jlc3RvcmUgcmVnCi0jZW5kaWYKLQotI2lmbmRlZiBjZmlfYWRqdXN0X2NmYV9vZmZzZXQKLSMgZGVmaW5lIGNmaV9hZGp1c3RfY2ZhX29mZnNldChvZmYpCS5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgb2ZmCi0jZW5kaWYKLQotI2lmbmRlZiBFTlRSWQotIyBkZWZpbmUgRU5UUlkobmFtZSkJCQlcCi0JLnR5cGUgbmFtZSwgIEBmdW5jdGlvbjsgCVwKLQkuZ2xvYmwgbmFtZTsJCQlcCi0JLnAyYWxpZ24gNDsJCQlcCi1uYW1lOgkJCQkJXAotCWNmaV9zdGFydHByb2MKLSNlbmRpZgotCi0jaWZuZGVmIEVORAotIyBkZWZpbmUgRU5EKG5hbWUpCQkJXAotCWNmaV9lbmRwcm9jOwkJCVwKLQkuc2l6ZSBuYW1lLCAuLW5hbWUKLSNlbmRpZgotCi0jZGVmaW5lIENGSV9QVVNIKFJFRykJCQkJCQlcCi0gIGNmaV9hZGp1c3RfY2ZhX29mZnNldCAoNCk7CQkJCQlcCi0gIGNmaV9yZWxfb2Zmc2V0IChSRUcsIDApCi0KLSNkZWZpbmUgQ0ZJX1BPUChSRUcpCQkJCQkJXAotICBjZmlfYWRqdXN0X2NmYV9vZmZzZXQgKC00KTsJCQkJCVwKLSAgY2ZpX3Jlc3RvcmUgKFJFRykKLQotI2RlZmluZSBQVVNIKFJFRykJcHVzaGwgUkVHOyBDRklfUFVTSCAoUkVHKQotI2RlZmluZSBQT1AoUkVHKQlwb3BsIFJFRzsgQ0ZJX1BPUCAoUkVHKQotCi0jaWZkZWYgVVNFX0FTX0JaRVJPCi0jIGRlZmluZSBERVNUCQlQQVJNUwotIyBkZWZpbmUgTEVOCQlERVNUKzQKLSMgZGVmaW5lIFNFVFJUTlZBTAotI2Vsc2UKLSMgZGVmaW5lIERFU1QJCVBBUk1TCi0jIGRlZmluZSBDSFIJCURFU1QrNAotIyBkZWZpbmUgTEVOCQlDSFIrNAotIyBkZWZpbmUgU0VUUlROVkFMCW1vdmwgREVTVCglZXNwKSwgJWVheAotI2VuZGlmCi0KLSNpZiAoZGVmaW5lZCBTSEFSRUQgfHwgZGVmaW5lZCBfX1BJQ19fKQotIyBkZWZpbmUgRU5UUkFOQ0UJUFVTSCAoJWVieCk7Ci0jIGRlZmluZSBSRVRVUk5fRU5ECVBPUCAoJWVieCk7IHJldAotIyBkZWZpbmUgUkVUVVJOCQlSRVRVUk5fRU5EOyBDRklfUFVTSCAoJWVieCkKLSMgZGVmaW5lIFBBUk1TCQk4CQkvKiBQcmVzZXJ2ZSBFQlguICAqLwotIyBkZWZpbmUgSk1QVEJMKEksIEIpCUkgLSBCCi0KLS8qIExvYWQgYW4gZW50cnkgaW4gYSBqdW1wIHRhYmxlIGludG8gRUJYIGFuZCBicmFuY2ggdG8gaXQuICBUQUJMRSBpcyBhCi0gICBqdW1wIHRhYmxlIHdpdGggcmVsYXRpdmUgb2Zmc2V0cy4gICAqLwotIyBkZWZpbmUgQlJBTkNIX1RPX0pNUFRCTF9FTlRSWShUQUJMRSkJCQkJXAotICAgIC8qIFdlIGZpcnN0IGxvYWQgUEMgaW50byBFQlguICAqLwkJCQlcCi0gICAgY2FsbAlfX2k2ODYuZ2V0X3BjX3RodW5rLmJ4OwkJCQlcCi0gICAgLyogR2V0IHRoZSBhZGRyZXNzIG9mIHRoZSBqdW1wIHRhYmxlLiAgKi8JCQlcCi0gICAgYWRkCQkkKFRBQkxFIC0gLiksICVlYng7CQkJCVwKLSAgICAvKiBHZXQgdGhlIGVudHJ5IGFuZCBjb252ZXJ0IHRoZSByZWxhdGl2ZSBvZmZzZXQgdG8gdGhlCVwKLSAgICAgICBhYnNvbHV0ZSBhZGRyZXNzLiAgKi8JCQkJCVwKLSAgICBhZGQJCSglZWJ4LCVlY3gsNCksICVlYng7CQkJCVwKLSAgICBhZGQJCSVlY3gsICVlZHg7CQkJCQlcCi0gICAgLyogV2UgbG9hZGVkIHRoZSBqdW1wIHRhYmxlIGFuZCBhZGp1ZXN0ZWQgRURYLiBHby4gICovCVwKLSAgICBqbXAJCSolZWJ4Ci0KLQkuc2VjdGlvbgkuZ251LmxpbmtvbmNlLnQuX19pNjg2LmdldF9wY190aHVuay5ieCwiYXgiLEBwcm9nYml0cwotCS5nbG9ibAlfX2k2ODYuZ2V0X3BjX3RodW5rLmJ4Ci0JLmhpZGRlbglfX2k2ODYuZ2V0X3BjX3RodW5rLmJ4Ci0JQUxJR04gKDQpCi0JLnR5cGUJX19pNjg2LmdldF9wY190aHVuay5ieCxAZnVuY3Rpb24KLV9faTY4Ni5nZXRfcGNfdGh1bmsuYng6Ci0JbW92bAkoJWVzcCksICVlYngKLQlyZXQKLSNlbHNlCi0jIGRlZmluZSBFTlRSQU5DRQotIyBkZWZpbmUgUkVUVVJOX0VORAlyZXQKLSMgZGVmaW5lIFJFVFVSTgkJUkVUVVJOX0VORAotIyBkZWZpbmUgUEFSTVMJCTQKLSMgZGVmaW5lIEpNUFRCTChJLCBCKQlJCi0KLS8qIEJyYW5jaCB0byBhbiBlbnRyeSBpbiBhIGp1bXAgdGFibGUuICBUQUJMRSBpcyBhIGp1bXAgdGFibGUgd2l0aAotICAgYWJzb2x1dGUgb2Zmc2V0cy4gICovCi0jIGRlZmluZSBCUkFOQ0hfVE9fSk1QVEJMX0VOVFJZKFRBQkxFKQkJCQlcCi0gICAgYWRkCQklZWN4LCAlZWR4OwkJCQkJXAotICAgIGptcAkJKlRBQkxFKCwlZWN4LDQpCi0jZW5kaWYKLQotCS5zZWN0aW9uIC50ZXh0LnNzZTIsImF4IixAcHJvZ2JpdHMKLQlBTElHTiAoNCkKLUVOVFJZIChzc2UyX21lbXNldDVfYXRvbSkKLQlFTlRSQU5DRQotCi0JbW92bAlMRU4oJWVzcCksICVlY3gKLSNpZmRlZiBVU0VfQVNfQlpFUk8KLQl4b3IJJWVheCwgJWVheAotI2Vsc2UKLQltb3Z6YmwJQ0hSKCVlc3ApLCAlZWF4Ci0JbW92YgklYWwsICVhaAotCS8qIEZpbGwgdGhlIHdob2xlIEVBWCB3aXRoIHBhdHRlcm4uICAqLwotCW1vdmwJJWVheCwgJWVkeAotCXNobAkkMTYsICVlYXgKLQlvcgklZWR4LCAlZWF4Ci0jZW5kaWYKLQltb3ZsCURFU1QoJWVzcCksICVlZHgKLQljbXAJJDMyLCAlZWN4Ci0JamFlCUwoMzJieXRlc29ybW9yZSkKLQotTCh3cml0ZV9sZXNzMzJieXRlcyk6Ci0JQlJBTkNIX1RPX0pNUFRCTF9FTlRSWSAoTCh0YWJsZV9sZXNzXzMyYnl0ZXMpKQotCi0KLQkucHVzaHNlY3Rpb24gLnJvZGF0YS5zc2UyLCJhIixAcHJvZ2JpdHMKLQlBTElHTiAoMikKLUwodGFibGVfbGVzc18zMmJ5dGVzKToKLQkuaW50CUpNUFRCTCAoTCh3cml0ZV8wYnl0ZXMpLCBMKHRhYmxlX2xlc3NfMzJieXRlcykpCi0JLmludAlKTVBUQkwgKEwod3JpdGVfMWJ5dGVzKSwgTCh0YWJsZV9sZXNzXzMyYnl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKHdyaXRlXzJieXRlcyksIEwodGFibGVfbGVzc18zMmJ5dGVzKSkKLQkuaW50CUpNUFRCTCAoTCh3cml0ZV8zYnl0ZXMpLCBMKHRhYmxlX2xlc3NfMzJieXRlcykpCi0JLmludAlKTVBUQkwgKEwod3JpdGVfNGJ5dGVzKSwgTCh0YWJsZV9sZXNzXzMyYnl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKHdyaXRlXzVieXRlcyksIEwodGFibGVfbGVzc18zMmJ5dGVzKSkKLQkuaW50CUpNUFRCTCAoTCh3cml0ZV82Ynl0ZXMpLCBMKHRhYmxlX2xlc3NfMzJieXRlcykpCi0JLmludAlKTVBUQkwgKEwod3JpdGVfN2J5dGVzKSwgTCh0YWJsZV9sZXNzXzMyYnl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKHdyaXRlXzhieXRlcyksIEwodGFibGVfbGVzc18zMmJ5dGVzKSkKLQkuaW50CUpNUFRCTCAoTCh3cml0ZV85Ynl0ZXMpLCBMKHRhYmxlX2xlc3NfMzJieXRlcykpCi0JLmludAlKTVBUQkwgKEwod3JpdGVfMTBieXRlcyksIEwodGFibGVfbGVzc18zMmJ5dGVzKSkKLQkuaW50CUpNUFRCTCAoTCh3cml0ZV8xMWJ5dGVzKSwgTCh0YWJsZV9sZXNzXzMyYnl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKHdyaXRlXzEyYnl0ZXMpLCBMKHRhYmxlX2xlc3NfMzJieXRlcykpCi0JLmludAlKTVBUQkwgKEwod3JpdGVfMTNieXRlcyksIEwodGFibGVfbGVzc18zMmJ5dGVzKSkKLQkuaW50CUpNUFRCTCAoTCh3cml0ZV8xNGJ5dGVzKSwgTCh0YWJsZV9sZXNzXzMyYnl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKHdyaXRlXzE1Ynl0ZXMpLCBMKHRhYmxlX2xlc3NfMzJieXRlcykpCi0JLmludAlKTVBUQkwgKEwod3JpdGVfMTZieXRlcyksIEwodGFibGVfbGVzc18zMmJ5dGVzKSkKLQkuaW50CUpNUFRCTCAoTCh3cml0ZV8xN2J5dGVzKSwgTCh0YWJsZV9sZXNzXzMyYnl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKHdyaXRlXzE4Ynl0ZXMpLCBMKHRhYmxlX2xlc3NfMzJieXRlcykpCi0JLmludAlKTVBUQkwgKEwod3JpdGVfMTlieXRlcyksIEwodGFibGVfbGVzc18zMmJ5dGVzKSkKLQkuaW50CUpNUFRCTCAoTCh3cml0ZV8yMGJ5dGVzKSwgTCh0YWJsZV9sZXNzXzMyYnl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKHdyaXRlXzIxYnl0ZXMpLCBMKHRhYmxlX2xlc3NfMzJieXRlcykpCi0JLmludAlKTVBUQkwgKEwod3JpdGVfMjJieXRlcyksIEwodGFibGVfbGVzc18zMmJ5dGVzKSkKLQkuaW50CUpNUFRCTCAoTCh3cml0ZV8yM2J5dGVzKSwgTCh0YWJsZV9sZXNzXzMyYnl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKHdyaXRlXzI0Ynl0ZXMpLCBMKHRhYmxlX2xlc3NfMzJieXRlcykpCi0JLmludAlKTVBUQkwgKEwod3JpdGVfMjVieXRlcyksIEwodGFibGVfbGVzc18zMmJ5dGVzKSkKLQkuaW50CUpNUFRCTCAoTCh3cml0ZV8yNmJ5dGVzKSwgTCh0YWJsZV9sZXNzXzMyYnl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKHdyaXRlXzI3Ynl0ZXMpLCBMKHRhYmxlX2xlc3NfMzJieXRlcykpCi0JLmludAlKTVBUQkwgKEwod3JpdGVfMjhieXRlcyksIEwodGFibGVfbGVzc18zMmJ5dGVzKSkKLQkuaW50CUpNUFRCTCAoTCh3cml0ZV8yOWJ5dGVzKSwgTCh0YWJsZV9sZXNzXzMyYnl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKHdyaXRlXzMwYnl0ZXMpLCBMKHRhYmxlX2xlc3NfMzJieXRlcykpCi0JLmludAlKTVBUQkwgKEwod3JpdGVfMzFieXRlcyksIEwodGFibGVfbGVzc18zMmJ5dGVzKSkKLQkucG9wc2VjdGlvbgotCi0JQUxJR04gKDQpCi1MKHdyaXRlXzI4Ynl0ZXMpOgotCW1vdmwJJWVheCwgLTI4KCVlZHgpCi1MKHdyaXRlXzI0Ynl0ZXMpOgotCW1vdmwJJWVheCwgLTI0KCVlZHgpCi1MKHdyaXRlXzIwYnl0ZXMpOgotCW1vdmwJJWVheCwgLTIwKCVlZHgpCi1MKHdyaXRlXzE2Ynl0ZXMpOgotCW1vdmwJJWVheCwgLTE2KCVlZHgpCi1MKHdyaXRlXzEyYnl0ZXMpOgotCW1vdmwJJWVheCwgLTEyKCVlZHgpCi1MKHdyaXRlXzhieXRlcyk6Ci0JbW92bAklZWF4LCAtOCglZWR4KQotTCh3cml0ZV80Ynl0ZXMpOgotCW1vdmwJJWVheCwgLTQoJWVkeCkKLUwod3JpdGVfMGJ5dGVzKToKLQlTRVRSVE5WQUwKLQlSRVRVUk4KLQotCUFMSUdOICg0KQotTCh3cml0ZV8yOWJ5dGVzKToKLQltb3ZsCSVlYXgsIC0yOSglZWR4KQotTCh3cml0ZV8yNWJ5dGVzKToKLQltb3ZsCSVlYXgsIC0yNSglZWR4KQotTCh3cml0ZV8yMWJ5dGVzKToKLQltb3ZsCSVlYXgsIC0yMSglZWR4KQotTCh3cml0ZV8xN2J5dGVzKToKLQltb3ZsCSVlYXgsIC0xNyglZWR4KQotTCh3cml0ZV8xM2J5dGVzKToKLQltb3ZsCSVlYXgsIC0xMyglZWR4KQotTCh3cml0ZV85Ynl0ZXMpOgotCW1vdmwJJWVheCwgLTkoJWVkeCkKLUwod3JpdGVfNWJ5dGVzKToKLQltb3ZsCSVlYXgsIC01KCVlZHgpCi1MKHdyaXRlXzFieXRlcyk6Ci0JbW92YgklYWwsIC0xKCVlZHgpCi0JU0VUUlROVkFMCi0JUkVUVVJOCi0KLQlBTElHTiAoNCkKLUwod3JpdGVfMzBieXRlcyk6Ci0JbW92bAklZWF4LCAtMzAoJWVkeCkKLUwod3JpdGVfMjZieXRlcyk6Ci0JbW92bAklZWF4LCAtMjYoJWVkeCkKLUwod3JpdGVfMjJieXRlcyk6Ci0JbW92bAklZWF4LCAtMjIoJWVkeCkKLUwod3JpdGVfMThieXRlcyk6Ci0JbW92bAklZWF4LCAtMTgoJWVkeCkKLUwod3JpdGVfMTRieXRlcyk6Ci0JbW92bAklZWF4LCAtMTQoJWVkeCkKLUwod3JpdGVfMTBieXRlcyk6Ci0JbW92bAklZWF4LCAtMTAoJWVkeCkKLUwod3JpdGVfNmJ5dGVzKToKLQltb3ZsCSVlYXgsIC02KCVlZHgpCi1MKHdyaXRlXzJieXRlcyk6Ci0JbW92dwklYXgsIC0yKCVlZHgpCi0JU0VUUlROVkFMCi0JUkVUVVJOCi0KLQlBTElHTiAoNCkKLUwod3JpdGVfMzFieXRlcyk6Ci0JbW92bAklZWF4LCAtMzEoJWVkeCkKLUwod3JpdGVfMjdieXRlcyk6Ci0JbW92bAklZWF4LCAtMjcoJWVkeCkKLUwod3JpdGVfMjNieXRlcyk6Ci0JbW92bAklZWF4LCAtMjMoJWVkeCkKLUwod3JpdGVfMTlieXRlcyk6Ci0JbW92bAklZWF4LCAtMTkoJWVkeCkKLUwod3JpdGVfMTVieXRlcyk6Ci0JbW92bAklZWF4LCAtMTUoJWVkeCkKLUwod3JpdGVfMTFieXRlcyk6Ci0JbW92bAklZWF4LCAtMTEoJWVkeCkKLUwod3JpdGVfN2J5dGVzKToKLQltb3ZsCSVlYXgsIC03KCVlZHgpCi1MKHdyaXRlXzNieXRlcyk6Ci0JbW92dwklYXgsIC0zKCVlZHgpCi0JbW92YgklYWwsIC0xKCVlZHgpCi0JU0VUUlROVkFMCi0JUkVUVVJOCi0KLQlBTElHTiAoNCkKLS8qIEVDWCA+IDMyIGFuZCBFRFggaXMgNCBieXRlIGFsaWduZWQuICAqLwotTCgzMmJ5dGVzb3Jtb3JlKToKLQkvKiBGaWxsIHhtbTAgd2l0aCB0aGUgcGF0dGVybi4gICovCi0jaWZkZWYgVVNFX0FTX0JaRVJPCi0JcHhvcgkleG1tMCwgJXhtbTAKLSNlbHNlCi0JbW92ZAklZWF4LCAleG1tMAotCXBzaHVmZAkkMCwgJXhtbTAsICV4bW0wCi0jZW5kaWYKLQl0ZXN0bAkkMHhmLCAlZWR4Ci0JanoJTChhbGlnbmVkXzE2KQotLyogRUNYID4gMzIgYW5kIEVEWCBpcyBub3QgMTYgYnl0ZSBhbGlnbmVkLiAgKi8KLUwobm90X2FsaWduZWRfMTYpOgotCW1vdmRxdQkleG1tMCwgKCVlZHgpCi0JbW92bAklZWR4LCAlZWF4Ci0JYW5kCSQtMTYsICVlZHgKLQlhZGQJJDE2LCAlZWR4Ci0Jc3ViCSVlZHgsICVlYXgKLQlhZGQJJWVheCwgJWVjeAotCW1vdmQJJXhtbTAsICVlYXgKLQotCUFMSUdOICg0KQotTChhbGlnbmVkXzE2KToKLQljbXAJJDEyOCwgJWVjeAotCWphZQlMKDEyOGJ5dGVzb3Jtb3JlKQotCi1MKGFsaWduZWRfMTZfbGVzczEyOGJ5dGVzKToKLQlCUkFOQ0hfVE9fSk1QVEJMX0VOVFJZIChMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKLQotCUFMSUdOICg0KQotTCgxMjhieXRlc29ybW9yZSk6Ci0jaWZkZWYgU0hBUkVEX0NBQ0hFX1NJWkUKLQlQVVNIICglZWJ4KQotCW1vdgkkU0hBUkVEX0NBQ0hFX1NJWkUsICVlYngKLSNlbHNlCi0jIGlmIChkZWZpbmVkIFNIQVJFRCB8fCBkZWZpbmVkIF9fUElDX18pCi0JY2FsbAlfX2k2ODYuZ2V0X3BjX3RodW5rLmJ4Ci0JYWRkCSRfR0xPQkFMX09GRlNFVF9UQUJMRV8sICVlYngKLQltb3YJX194ODZfc2hhcmVkX2NhY2hlX3NpemVAR09UT0ZGKCVlYngpLCAlZWJ4Ci0jIGVsc2UKLQlQVVNIICglZWJ4KQotCW1vdglfX3g4Nl9zaGFyZWRfY2FjaGVfc2l6ZSwgJWVieAotIyBlbmRpZgotI2VuZGlmCi0JY21wCSVlYngsICVlY3gKLQlqYWUJTCgxMjhieXRlc29ybW9yZV9udF9zdGFydCkKLQotCi0jaWZkZWYgREFUQV9DQUNIRV9TSVpFCi0JUE9QICglZWJ4KQotIyBkZWZpbmUgUkVTVE9SRV9FQlhfU1RBVEUgQ0ZJX1BVU0ggKCVlYngpCi0JY21wCSREQVRBX0NBQ0hFX1NJWkUsICVlY3gKLSNlbHNlCi0jIGlmIChkZWZpbmVkIFNIQVJFRCB8fCBkZWZpbmVkIF9fUElDX18pCi0jICBkZWZpbmUgUkVTVE9SRV9FQlhfU1RBVEUKLQljYWxsCV9faTY4Ni5nZXRfcGNfdGh1bmsuYngKLQlhZGQJJF9HTE9CQUxfT0ZGU0VUX1RBQkxFXywgJWVieAotCWNtcAlfX3g4Nl9kYXRhX2NhY2hlX3NpemVAR09UT0ZGKCVlYngpLCAlZWN4Ci0jIGVsc2UKLQlQT1AgKCVlYngpCi0jICBkZWZpbmUgUkVTVE9SRV9FQlhfU1RBVEUgQ0ZJX1BVU0ggKCVlYngpCi0JY21wCV9feDg2X2RhdGFfY2FjaGVfc2l6ZSwgJWVjeAotIyBlbmRpZgotI2VuZGlmCi0KLQlqYWUJTCgxMjhieXRlc19MMl9ub3JtYWwpCi0Jc3VibAkkMTI4LCAlZWN4Ci1MKDEyOGJ5dGVzb3Jtb3JlX25vcm1hbCk6Ci0Jc3ViCSQxMjgsICVlY3gKLQltb3ZkcWEJJXhtbTAsICglZWR4KQotCW1vdmRxYQkleG1tMCwgMHgxMCglZWR4KQotCW1vdmRxYQkleG1tMCwgMHgyMCglZWR4KQotCW1vdmRxYQkleG1tMCwgMHgzMCglZWR4KQotCW1vdmRxYQkleG1tMCwgMHg0MCglZWR4KQotCW1vdmRxYQkleG1tMCwgMHg1MCglZWR4KQotCW1vdmRxYQkleG1tMCwgMHg2MCglZWR4KQotCW1vdmRxYQkleG1tMCwgMHg3MCglZWR4KQotCWxlYQkxMjgoJWVkeCksICVlZHgKLQlqYglMKDEyOGJ5dGVzbGVzc19ub3JtYWwpCi0KLQotCXN1YgkkMTI4LCAlZWN4Ci0JbW92ZHFhCSV4bW0wLCAoJWVkeCkKLQltb3ZkcWEJJXhtbTAsIDB4MTAoJWVkeCkKLQltb3ZkcWEJJXhtbTAsIDB4MjAoJWVkeCkKLQltb3ZkcWEJJXhtbTAsIDB4MzAoJWVkeCkKLQltb3ZkcWEJJXhtbTAsIDB4NDAoJWVkeCkKLQltb3ZkcWEJJXhtbTAsIDB4NTAoJWVkeCkKLQltb3ZkcWEJJXhtbTAsIDB4NjAoJWVkeCkKLQltb3ZkcWEJJXhtbTAsIDB4NzAoJWVkeCkKLQlsZWEJMTI4KCVlZHgpLCAlZWR4Ci0JamFlCUwoMTI4Ynl0ZXNvcm1vcmVfbm9ybWFsKQotCi1MKDEyOGJ5dGVzbGVzc19ub3JtYWwpOgotCWFkZAkkMTI4LCAlZWN4Ci0JQlJBTkNIX1RPX0pNUFRCTF9FTlRSWSAoTCh0YWJsZV8xNl8xMjhieXRlcykpCi0KLQlBTElHTiAoNCkKLUwoMTI4Ynl0ZXNfTDJfbm9ybWFsKToKLQlwcmVmZXRjaHQwCTB4MzgwKCVlZHgpCi0JcHJlZmV0Y2h0MAkweDNjMCglZWR4KQotCXN1YgkkMTI4LCAlZWN4Ci0JbW92ZHFhCSV4bW0wLCAoJWVkeCkKLQltb3ZhcHMJJXhtbTAsIDB4MTAoJWVkeCkKLQltb3ZhcHMJJXhtbTAsIDB4MjAoJWVkeCkKLQltb3ZhcHMJJXhtbTAsIDB4MzAoJWVkeCkKLQltb3ZhcHMJJXhtbTAsIDB4NDAoJWVkeCkKLQltb3ZhcHMJJXhtbTAsIDB4NTAoJWVkeCkKLQltb3ZhcHMJJXhtbTAsIDB4NjAoJWVkeCkKLQltb3ZhcHMJJXhtbTAsIDB4NzAoJWVkeCkKLQlhZGQJJDEyOCwgJWVkeAotCWNtcAkkMTI4LCAlZWN4Ci0JamFlCUwoMTI4Ynl0ZXNfTDJfbm9ybWFsKQotCi1MKDEyOGJ5dGVzbGVzc19MMl9ub3JtYWwpOgotCUJSQU5DSF9UT19KTVBUQkxfRU5UUlkgKEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCi0JUkVTVE9SRV9FQlhfU1RBVEUKLUwoMTI4Ynl0ZXNvcm1vcmVfbnRfc3RhcnQpOgotCXN1YgklZWJ4LCAlZWN4Ci0JbW92CSVlYngsICVlYXgKLQlhbmQJJDB4N2YsICVlYXgKLQlhZGQJJWVheCwgJWVjeAotCW1vdmQJJXhtbTAsICVlYXgKLQlBTElHTiAoNCkKLUwoMTI4Ynl0ZXNvcm1vcmVfc2hhcmVkX2NhY2hlX2xvb3ApOgotCXByZWZldGNodDAJMHgzYzAoJWVkeCkKLQlwcmVmZXRjaHQwCTB4MzgwKCVlZHgpCi0Jc3ViCSQweDgwLCAlZWJ4Ci0JbW92ZHFhCSV4bW0wLCAoJWVkeCkKLQltb3ZkcWEJJXhtbTAsIDB4MTAoJWVkeCkKLQltb3ZkcWEJJXhtbTAsIDB4MjAoJWVkeCkKLQltb3ZkcWEJJXhtbTAsIDB4MzAoJWVkeCkKLQltb3ZkcWEJJXhtbTAsIDB4NDAoJWVkeCkKLQltb3ZkcWEJJXhtbTAsIDB4NTAoJWVkeCkKLQltb3ZkcWEJJXhtbTAsIDB4NjAoJWVkeCkKLQltb3ZkcWEJJXhtbTAsIDB4NzAoJWVkeCkKLQlhZGQJJDB4ODAsICVlZHgKLQljbXAJJDB4ODAsICVlYngKLQlqYWUJTCgxMjhieXRlc29ybW9yZV9zaGFyZWRfY2FjaGVfbG9vcCkKLQljbXAJJDB4ODAsICVlY3gKLQlqYglMKHNoYXJlZF9jYWNoZV9sb29wX2VuZCkKLQlBTElHTiAoNCkKLUwoMTI4Ynl0ZXNvcm1vcmVfbnQpOgotCXN1YgkkMHg4MCwgJWVjeAotCW1vdm50ZHEJJXhtbTAsICglZWR4KQotCW1vdm50ZHEJJXhtbTAsIDB4MTAoJWVkeCkKLQltb3ZudGRxCSV4bW0wLCAweDIwKCVlZHgpCi0JbW92bnRkcQkleG1tMCwgMHgzMCglZWR4KQotCW1vdm50ZHEJJXhtbTAsIDB4NDAoJWVkeCkKLQltb3ZudGRxCSV4bW0wLCAweDUwKCVlZHgpCi0JbW92bnRkcQkleG1tMCwgMHg2MCglZWR4KQotCW1vdm50ZHEJJXhtbTAsIDB4NzAoJWVkeCkKLQlhZGQJJDB4ODAsICVlZHgKLQljbXAJJDB4ODAsICVlY3gKLQlqYWUJTCgxMjhieXRlc29ybW9yZV9udCkKLQlzZmVuY2UKLUwoc2hhcmVkX2NhY2hlX2xvb3BfZW5kKToKLSNpZiBkZWZpbmVkIERBVEFfQ0FDSEVfU0laRSB8fCAhKGRlZmluZWQgU0hBUkVEIHx8IGRlZmluZWQgX19QSUNfXykKLQlQT1AgKCVlYngpCi0jZW5kaWYKLQlCUkFOQ0hfVE9fSk1QVEJMX0VOVFJZIChMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKLQotCi0JLnB1c2hzZWN0aW9uIC5yb2RhdGEuc3NlMiwiYSIsQHByb2diaXRzCi0JQUxJR04gKDIpCi1MKHRhYmxlXzE2XzEyOGJ5dGVzKToKLQkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzBieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMWJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCi0JLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl8yYnl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKLQkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzNieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNGJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCi0JLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl81Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKLQkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzZieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfN2J5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCi0JLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl84Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKLQkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzlieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMTBieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMTFieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMTJieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMTNieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMTRieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMTVieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMTZieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMTdieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMThieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMTlieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMjBieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMjFieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMjJieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMjNieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMjRieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMjVieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMjZieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMjdieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMjhieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMjlieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMzBieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMzFieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMzJieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMzNieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMzRieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMzVieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMzZieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMzdieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMzhieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMzlieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNDBieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNDFieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNDJieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNDNieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNDRieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNDVieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNDZieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNDdieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNDhieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNDlieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNTBieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNTFieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNTJieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNTNieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNTRieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNTVieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNTZieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNTdieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNThieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNTlieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNjBieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNjFieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNjJieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNjNieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNjRieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNjVieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNjZieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNjdieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNjhieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNjlieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNzBieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNzFieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNzJieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNzNieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNzRieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNzVieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNzZieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNzdieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNzhieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfNzlieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfODBieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfODFieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfODJieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfODNieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfODRieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfODVieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfODZieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfODdieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfODhieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfODlieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfOTBieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfOTFieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfOTJieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfOTNieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfOTRieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfOTVieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfOTZieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfOTdieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfOThieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfOTlieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMTAwYnl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKLQkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzEwMWJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCi0JLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl8xMDJieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMTAzYnl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKLQkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzEwNGJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCi0JLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl8xMDVieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMTA2Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKLQkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzEwN2J5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCi0JLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl8xMDhieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMTA5Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKLQkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzExMGJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCi0JLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl8xMTFieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMTEyYnl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKLQkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzExM2J5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCi0JLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl8xMTRieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMTE1Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKLQkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzExNmJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCi0JLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl8xMTdieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMTE4Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKLQkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzExOWJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCi0JLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl8xMjBieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMTIxYnl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKLQkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzEyMmJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCi0JLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl8xMjNieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMTI0Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKLQkuaW50CUpNUFRCTCAoTChhbGlnbmVkXzE2XzEyNWJ5dGVzKSwgTCh0YWJsZV8xNl8xMjhieXRlcykpCi0JLmludAlKTVBUQkwgKEwoYWxpZ25lZF8xNl8xMjZieXRlcyksIEwodGFibGVfMTZfMTI4Ynl0ZXMpKQotCS5pbnQJSk1QVEJMIChMKGFsaWduZWRfMTZfMTI3Ynl0ZXMpLCBMKHRhYmxlXzE2XzEyOGJ5dGVzKSkKLQkucG9wc2VjdGlvbgotCi0JQUxJR04gKDQpCi1MKGFsaWduZWRfMTZfMTEyYnl0ZXMpOgotCW1vdmRxYQkleG1tMCwgLTExMiglZWR4KQotTChhbGlnbmVkXzE2Xzk2Ynl0ZXMpOgotCW1vdmRxYQkleG1tMCwgLTk2KCVlZHgpCi1MKGFsaWduZWRfMTZfODBieXRlcyk6Ci0JbW92ZHFhCSV4bW0wLCAtODAoJWVkeCkKLUwoYWxpZ25lZF8xNl82NGJ5dGVzKToKLQltb3ZkcWEJJXhtbTAsIC02NCglZWR4KQotTChhbGlnbmVkXzE2XzQ4Ynl0ZXMpOgotCW1vdmRxYQkleG1tMCwgLTQ4KCVlZHgpCi1MKGFsaWduZWRfMTZfMzJieXRlcyk6Ci0JbW92ZHFhCSV4bW0wLCAtMzIoJWVkeCkKLUwoYWxpZ25lZF8xNl8xNmJ5dGVzKToKLQltb3ZkcWEJJXhtbTAsIC0xNiglZWR4KQotTChhbGlnbmVkXzE2XzBieXRlcyk6Ci0JU0VUUlROVkFMCi0JUkVUVVJOCi0KLQlBTElHTiAoNCkKLUwoYWxpZ25lZF8xNl8xMTNieXRlcyk6Ci0JbW92ZHFhCSV4bW0wLCAtMTEzKCVlZHgpCi1MKGFsaWduZWRfMTZfOTdieXRlcyk6Ci0JbW92ZHFhCSV4bW0wLCAtOTcoJWVkeCkKLUwoYWxpZ25lZF8xNl84MWJ5dGVzKToKLQltb3ZkcWEJJXhtbTAsIC04MSglZWR4KQotTChhbGlnbmVkXzE2XzY1Ynl0ZXMpOgotCW1vdmRxYQkleG1tMCwgLTY1KCVlZHgpCi1MKGFsaWduZWRfMTZfNDlieXRlcyk6Ci0JbW92ZHFhCSV4bW0wLCAtNDkoJWVkeCkKLUwoYWxpZ25lZF8xNl8zM2J5dGVzKToKLQltb3ZkcWEJJXhtbTAsIC0zMyglZWR4KQotTChhbGlnbmVkXzE2XzE3Ynl0ZXMpOgotCW1vdmRxYQkleG1tMCwgLTE3KCVlZHgpCi1MKGFsaWduZWRfMTZfMWJ5dGVzKToKLQltb3ZiCSVhbCwgLTEoJWVkeCkKLQlTRVRSVE5WQUwKLQlSRVRVUk4KLQotCUFMSUdOICg0KQotTChhbGlnbmVkXzE2XzExNGJ5dGVzKToKLQltb3ZkcWEJJXhtbTAsIC0xMTQoJWVkeCkKLUwoYWxpZ25lZF8xNl85OGJ5dGVzKToKLQltb3ZkcWEJJXhtbTAsIC05OCglZWR4KQotTChhbGlnbmVkXzE2XzgyYnl0ZXMpOgotCW1vdmRxYQkleG1tMCwgLTgyKCVlZHgpCi1MKGFsaWduZWRfMTZfNjZieXRlcyk6Ci0JbW92ZHFhCSV4bW0wLCAtNjYoJWVkeCkKLUwoYWxpZ25lZF8xNl81MGJ5dGVzKToKLQltb3ZkcWEJJXhtbTAsIC01MCglZWR4KQotTChhbGlnbmVkXzE2XzM0Ynl0ZXMpOgotCW1vdmRxYQkleG1tMCwgLTM0KCVlZHgpCi1MKGFsaWduZWRfMTZfMThieXRlcyk6Ci0JbW92ZHFhCSV4bW0wLCAtMTgoJWVkeCkKLUwoYWxpZ25lZF8xNl8yYnl0ZXMpOgotCW1vdncJJWF4LCAtMiglZWR4KQotCVNFVFJUTlZBTAotCVJFVFVSTgotCi0JQUxJR04gKDQpCi1MKGFsaWduZWRfMTZfMTE1Ynl0ZXMpOgotCW1vdmRxYQkleG1tMCwgLTExNSglZWR4KQotTChhbGlnbmVkXzE2Xzk5Ynl0ZXMpOgotCW1vdmRxYQkleG1tMCwgLTk5KCVlZHgpCi1MKGFsaWduZWRfMTZfODNieXRlcyk6Ci0JbW92ZHFhCSV4bW0wLCAtODMoJWVkeCkKLUwoYWxpZ25lZF8xNl82N2J5dGVzKToKLQltb3ZkcWEJJXhtbTAsIC02NyglZWR4KQotTChhbGlnbmVkXzE2XzUxYnl0ZXMpOgotCW1vdmRxYQkleG1tMCwgLTUxKCVlZHgpCi1MKGFsaWduZWRfMTZfMzVieXRlcyk6Ci0JbW92ZHFhCSV4bW0wLCAtMzUoJWVkeCkKLUwoYWxpZ25lZF8xNl8xOWJ5dGVzKToKLQltb3ZkcWEJJXhtbTAsIC0xOSglZWR4KQotTChhbGlnbmVkXzE2XzNieXRlcyk6Ci0JbW92dwklYXgsIC0zKCVlZHgpCi0JbW92YgklYWwsIC0xKCVlZHgpCi0JU0VUUlROVkFMCi0JUkVUVVJOCi0KLQlBTElHTiAoNCkKLUwoYWxpZ25lZF8xNl8xMTZieXRlcyk6Ci0JbW92ZHFhCSV4bW0wLCAtMTE2KCVlZHgpCi1MKGFsaWduZWRfMTZfMTAwYnl0ZXMpOgotCW1vdmRxYQkleG1tMCwgLTEwMCglZWR4KQotTChhbGlnbmVkXzE2Xzg0Ynl0ZXMpOgotCW1vdmRxYQkleG1tMCwgLTg0KCVlZHgpCi1MKGFsaWduZWRfMTZfNjhieXRlcyk6Ci0JbW92ZHFhCSV4bW0wLCAtNjgoJWVkeCkKLUwoYWxpZ25lZF8xNl81MmJ5dGVzKToKLQltb3ZkcWEJJXhtbTAsIC01MiglZWR4KQotTChhbGlnbmVkXzE2XzM2Ynl0ZXMpOgotCW1vdmRxYQkleG1tMCwgLTM2KCVlZHgpCi1MKGFsaWduZWRfMTZfMjBieXRlcyk6Ci0JbW92ZHFhCSV4bW0wLCAtMjAoJWVkeCkKLUwoYWxpZ25lZF8xNl80Ynl0ZXMpOgotCW1vdmwJJWVheCwgLTQoJWVkeCkKLQlTRVRSVE5WQUwKLQlSRVRVUk4KLQotCUFMSUdOICg0KQotTChhbGlnbmVkXzE2XzExN2J5dGVzKToKLQltb3ZkcWEJJXhtbTAsIC0xMTcoJWVkeCkKLUwoYWxpZ25lZF8xNl8xMDFieXRlcyk6Ci0JbW92ZHFhCSV4bW0wLCAtMTAxKCVlZHgpCi1MKGFsaWduZWRfMTZfODVieXRlcyk6Ci0JbW92ZHFhCSV4bW0wLCAtODUoJWVkeCkKLUwoYWxpZ25lZF8xNl82OWJ5dGVzKToKLQltb3ZkcWEJJXhtbTAsIC02OSglZWR4KQotTChhbGlnbmVkXzE2XzUzYnl0ZXMpOgotCW1vdmRxYQkleG1tMCwgLTUzKCVlZHgpCi1MKGFsaWduZWRfMTZfMzdieXRlcyk6Ci0JbW92ZHFhCSV4bW0wLCAtMzcoJWVkeCkKLUwoYWxpZ25lZF8xNl8yMWJ5dGVzKToKLQltb3ZkcWEJJXhtbTAsIC0yMSglZWR4KQotTChhbGlnbmVkXzE2XzVieXRlcyk6Ci0JbW92bAklZWF4LCAtNSglZWR4KQotCW1vdmIJJWFsLCAtMSglZWR4KQotCVNFVFJUTlZBTAotCVJFVFVSTgotCi0JQUxJR04gKDQpCi1MKGFsaWduZWRfMTZfMTE4Ynl0ZXMpOgotCW1vdmRxYQkleG1tMCwgLTExOCglZWR4KQotTChhbGlnbmVkXzE2XzEwMmJ5dGVzKToKLQltb3ZkcWEJJXhtbTAsIC0xMDIoJWVkeCkKLUwoYWxpZ25lZF8xNl84NmJ5dGVzKToKLQltb3ZkcWEJJXhtbTAsIC04NiglZWR4KQotTChhbGlnbmVkXzE2XzcwYnl0ZXMpOgotCW1vdmRxYQkleG1tMCwgLTcwKCVlZHgpCi1MKGFsaWduZWRfMTZfNTRieXRlcyk6Ci0JbW92ZHFhCSV4bW0wLCAtNTQoJWVkeCkKLUwoYWxpZ25lZF8xNl8zOGJ5dGVzKToKLQltb3ZkcWEJJXhtbTAsIC0zOCglZWR4KQotTChhbGlnbmVkXzE2XzIyYnl0ZXMpOgotCW1vdmRxYQkleG1tMCwgLTIyKCVlZHgpCi1MKGFsaWduZWRfMTZfNmJ5dGVzKToKLQltb3ZsCSVlYXgsIC02KCVlZHgpCi0JbW92dwklYXgsIC0yKCVlZHgpCi0JU0VUUlROVkFMCi0JUkVUVVJOCi0KLQlBTElHTiAoNCkKLUwoYWxpZ25lZF8xNl8xMTlieXRlcyk6Ci0JbW92ZHFhCSV4bW0wLCAtMTE5KCVlZHgpCi1MKGFsaWduZWRfMTZfMTAzYnl0ZXMpOgotCW1vdmRxYQkleG1tMCwgLTEwMyglZWR4KQotTChhbGlnbmVkXzE2Xzg3Ynl0ZXMpOgotCW1vdmRxYQkleG1tMCwgLTg3KCVlZHgpCi1MKGFsaWduZWRfMTZfNzFieXRlcyk6Ci0JbW92ZHFhCSV4bW0wLCAtNzEoJWVkeCkKLUwoYWxpZ25lZF8xNl81NWJ5dGVzKToKLQltb3ZkcWEJJXhtbTAsIC01NSglZWR4KQotTChhbGlnbmVkXzE2XzM5Ynl0ZXMpOgotCW1vdmRxYQkleG1tMCwgLTM5KCVlZHgpCi1MKGFsaWduZWRfMTZfMjNieXRlcyk6Ci0JbW92ZHFhCSV4bW0wLCAtMjMoJWVkeCkKLUwoYWxpZ25lZF8xNl83Ynl0ZXMpOgotCW1vdmwJJWVheCwgLTcoJWVkeCkKLQltb3Z3CSVheCwgLTMoJWVkeCkKLQltb3ZiCSVhbCwgLTEoJWVkeCkKLQlTRVRSVE5WQUwKLQlSRVRVUk4KLQotCUFMSUdOICg0KQotTChhbGlnbmVkXzE2XzEyMGJ5dGVzKToKLQltb3ZkcWEJJXhtbTAsIC0xMjAoJWVkeCkKLUwoYWxpZ25lZF8xNl8xMDRieXRlcyk6Ci0JbW92ZHFhCSV4bW0wLCAtMTA0KCVlZHgpCi1MKGFsaWduZWRfMTZfODhieXRlcyk6Ci0JbW92ZHFhCSV4bW0wLCAtODgoJWVkeCkKLUwoYWxpZ25lZF8xNl83MmJ5dGVzKToKLQltb3ZkcWEJJXhtbTAsIC03MiglZWR4KQotTChhbGlnbmVkXzE2XzU2Ynl0ZXMpOgotCW1vdmRxYQkleG1tMCwgLTU2KCVlZHgpCi1MKGFsaWduZWRfMTZfNDBieXRlcyk6Ci0JbW92ZHFhCSV4bW0wLCAtNDAoJWVkeCkKLUwoYWxpZ25lZF8xNl8yNGJ5dGVzKToKLQltb3ZkcWEJJXhtbTAsIC0yNCglZWR4KQotTChhbGlnbmVkXzE2XzhieXRlcyk6Ci0JbW92cQkleG1tMCwgLTgoJWVkeCkKLQlTRVRSVE5WQUwKLQlSRVRVUk4KLQotCUFMSUdOICg0KQotTChhbGlnbmVkXzE2XzEyMWJ5dGVzKToKLQltb3ZkcWEJJXhtbTAsIC0xMjEoJWVkeCkKLUwoYWxpZ25lZF8xNl8xMDVieXRlcyk6Ci0JbW92ZHFhCSV4bW0wLCAtMTA1KCVlZHgpCi1MKGFsaWduZWRfMTZfODlieXRlcyk6Ci0JbW92ZHFhCSV4bW0wLCAtODkoJWVkeCkKLUwoYWxpZ25lZF8xNl83M2J5dGVzKToKLQltb3ZkcWEJJXhtbTAsIC03MyglZWR4KQotTChhbGlnbmVkXzE2XzU3Ynl0ZXMpOgotCW1vdmRxYQkleG1tMCwgLTU3KCVlZHgpCi1MKGFsaWduZWRfMTZfNDFieXRlcyk6Ci0JbW92ZHFhCSV4bW0wLCAtNDEoJWVkeCkKLUwoYWxpZ25lZF8xNl8yNWJ5dGVzKToKLQltb3ZkcWEJJXhtbTAsIC0yNSglZWR4KQotTChhbGlnbmVkXzE2XzlieXRlcyk6Ci0JbW92cQkleG1tMCwgLTkoJWVkeCkKLQltb3ZiCSVhbCwgLTEoJWVkeCkKLQlTRVRSVE5WQUwKLQlSRVRVUk4KLQotCUFMSUdOICg0KQotTChhbGlnbmVkXzE2XzEyMmJ5dGVzKToKLQltb3ZkcWEJJXhtbTAsIC0xMjIoJWVkeCkKLUwoYWxpZ25lZF8xNl8xMDZieXRlcyk6Ci0JbW92ZHFhCSV4bW0wLCAtMTA2KCVlZHgpCi1MKGFsaWduZWRfMTZfOTBieXRlcyk6Ci0JbW92ZHFhCSV4bW0wLCAtOTAoJWVkeCkKLUwoYWxpZ25lZF8xNl83NGJ5dGVzKToKLQltb3ZkcWEJJXhtbTAsIC03NCglZWR4KQotTChhbGlnbmVkXzE2XzU4Ynl0ZXMpOgotCW1vdmRxYQkleG1tMCwgLTU4KCVlZHgpCi1MKGFsaWduZWRfMTZfNDJieXRlcyk6Ci0JbW92ZHFhCSV4bW0wLCAtNDIoJWVkeCkKLUwoYWxpZ25lZF8xNl8yNmJ5dGVzKToKLQltb3ZkcWEJJXhtbTAsIC0yNiglZWR4KQotTChhbGlnbmVkXzE2XzEwYnl0ZXMpOgotCW1vdnEJJXhtbTAsIC0xMCglZWR4KQotCW1vdncJJWF4LCAtMiglZWR4KQotCVNFVFJUTlZBTAotCVJFVFVSTgotCi0JQUxJR04gKDQpCi1MKGFsaWduZWRfMTZfMTIzYnl0ZXMpOgotCW1vdmRxYQkleG1tMCwgLTEyMyglZWR4KQotTChhbGlnbmVkXzE2XzEwN2J5dGVzKToKLQltb3ZkcWEJJXhtbTAsIC0xMDcoJWVkeCkKLUwoYWxpZ25lZF8xNl85MWJ5dGVzKToKLQltb3ZkcWEJJXhtbTAsIC05MSglZWR4KQotTChhbGlnbmVkXzE2Xzc1Ynl0ZXMpOgotCW1vdmRxYQkleG1tMCwgLTc1KCVlZHgpCi1MKGFsaWduZWRfMTZfNTlieXRlcyk6Ci0JbW92ZHFhCSV4bW0wLCAtNTkoJWVkeCkKLUwoYWxpZ25lZF8xNl80M2J5dGVzKToKLQltb3ZkcWEJJXhtbTAsIC00MyglZWR4KQotTChhbGlnbmVkXzE2XzI3Ynl0ZXMpOgotCW1vdmRxYQkleG1tMCwgLTI3KCVlZHgpCi1MKGFsaWduZWRfMTZfMTFieXRlcyk6Ci0JbW92cQkleG1tMCwgLTExKCVlZHgpCi0JbW92dwklYXgsIC0zKCVlZHgpCi0JbW92YgklYWwsIC0xKCVlZHgpCi0JU0VUUlROVkFMCi0JUkVUVVJOCi0KLQlBTElHTiAoNCkKLUwoYWxpZ25lZF8xNl8xMjRieXRlcyk6Ci0JbW92ZHFhCSV4bW0wLCAtMTI0KCVlZHgpCi1MKGFsaWduZWRfMTZfMTA4Ynl0ZXMpOgotCW1vdmRxYQkleG1tMCwgLTEwOCglZWR4KQotTChhbGlnbmVkXzE2XzkyYnl0ZXMpOgotCW1vdmRxYQkleG1tMCwgLTkyKCVlZHgpCi1MKGFsaWduZWRfMTZfNzZieXRlcyk6Ci0JbW92ZHFhCSV4bW0wLCAtNzYoJWVkeCkKLUwoYWxpZ25lZF8xNl82MGJ5dGVzKToKLQltb3ZkcWEJJXhtbTAsIC02MCglZWR4KQotTChhbGlnbmVkXzE2XzQ0Ynl0ZXMpOgotCW1vdmRxYQkleG1tMCwgLTQ0KCVlZHgpCi1MKGFsaWduZWRfMTZfMjhieXRlcyk6Ci0JbW92ZHFhCSV4bW0wLCAtMjgoJWVkeCkKLUwoYWxpZ25lZF8xNl8xMmJ5dGVzKToKLQltb3ZxCSV4bW0wLCAtMTIoJWVkeCkKLQltb3ZsCSVlYXgsIC00KCVlZHgpCi0JU0VUUlROVkFMCi0JUkVUVVJOCi0KLQlBTElHTiAoNCkKLUwoYWxpZ25lZF8xNl8xMjVieXRlcyk6Ci0JbW92ZHFhCSV4bW0wLCAtMTI1KCVlZHgpCi1MKGFsaWduZWRfMTZfMTA5Ynl0ZXMpOgotCW1vdmRxYQkleG1tMCwgLTEwOSglZWR4KQotTChhbGlnbmVkXzE2XzkzYnl0ZXMpOgotCW1vdmRxYQkleG1tMCwgLTkzKCVlZHgpCi1MKGFsaWduZWRfMTZfNzdieXRlcyk6Ci0JbW92ZHFhCSV4bW0wLCAtNzcoJWVkeCkKLUwoYWxpZ25lZF8xNl82MWJ5dGVzKToKLQltb3ZkcWEJJXhtbTAsIC02MSglZWR4KQotTChhbGlnbmVkXzE2XzQ1Ynl0ZXMpOgotCW1vdmRxYQkleG1tMCwgLTQ1KCVlZHgpCi1MKGFsaWduZWRfMTZfMjlieXRlcyk6Ci0JbW92ZHFhCSV4bW0wLCAtMjkoJWVkeCkKLUwoYWxpZ25lZF8xNl8xM2J5dGVzKToKLQltb3ZxCSV4bW0wLCAtMTMoJWVkeCkKLQltb3ZsCSVlYXgsIC01KCVlZHgpCi0JbW92YgklYWwsIC0xKCVlZHgpCi0JU0VUUlROVkFMCi0JUkVUVVJOCi0KLQlBTElHTiAoNCkKLUwoYWxpZ25lZF8xNl8xMjZieXRlcyk6Ci0JbW92ZHFhCSV4bW0wLCAtMTI2KCVlZHgpCi1MKGFsaWduZWRfMTZfMTEwYnl0ZXMpOgotCW1vdmRxYQkleG1tMCwgLTExMCglZWR4KQotTChhbGlnbmVkXzE2Xzk0Ynl0ZXMpOgotCW1vdmRxYQkleG1tMCwgLTk0KCVlZHgpCi1MKGFsaWduZWRfMTZfNzhieXRlcyk6Ci0JbW92ZHFhCSV4bW0wLCAtNzgoJWVkeCkKLUwoYWxpZ25lZF8xNl82MmJ5dGVzKToKLQltb3ZkcWEJJXhtbTAsIC02MiglZWR4KQotTChhbGlnbmVkXzE2XzQ2Ynl0ZXMpOgotCW1vdmRxYQkleG1tMCwgLTQ2KCVlZHgpCi1MKGFsaWduZWRfMTZfMzBieXRlcyk6Ci0JbW92ZHFhCSV4bW0wLCAtMzAoJWVkeCkKLUwoYWxpZ25lZF8xNl8xNGJ5dGVzKToKLQltb3ZxCSV4bW0wLCAtMTQoJWVkeCkKLQltb3ZsCSVlYXgsIC02KCVlZHgpCi0JbW92dwklYXgsIC0yKCVlZHgpCi0JU0VUUlROVkFMCi0JUkVUVVJOCi0KLQlBTElHTiAoNCkKLUwoYWxpZ25lZF8xNl8xMjdieXRlcyk6Ci0JbW92ZHFhCSV4bW0wLCAtMTI3KCVlZHgpCi1MKGFsaWduZWRfMTZfMTExYnl0ZXMpOgotCW1vdmRxYQkleG1tMCwgLTExMSglZWR4KQotTChhbGlnbmVkXzE2Xzk1Ynl0ZXMpOgotCW1vdmRxYQkleG1tMCwgLTk1KCVlZHgpCi1MKGFsaWduZWRfMTZfNzlieXRlcyk6Ci0JbW92ZHFhCSV4bW0wLCAtNzkoJWVkeCkKLUwoYWxpZ25lZF8xNl82M2J5dGVzKToKLQltb3ZkcWEJJXhtbTAsIC02MyglZWR4KQotTChhbGlnbmVkXzE2XzQ3Ynl0ZXMpOgotCW1vdmRxYQkleG1tMCwgLTQ3KCVlZHgpCi1MKGFsaWduZWRfMTZfMzFieXRlcyk6Ci0JbW92ZHFhCSV4bW0wLCAtMzEoJWVkeCkKLUwoYWxpZ25lZF8xNl8xNWJ5dGVzKToKLQltb3ZxCSV4bW0wLCAtMTUoJWVkeCkKLQltb3ZsCSVlYXgsIC03KCVlZHgpCi0JbW92dwklYXgsIC0zKCVlZHgpCi0JbW92YgklYWwsIC0xKCVlZHgpCi0JU0VUUlROVkFMCi0JUkVUVVJOX0VORAotCi1FTkQgKHNzZTJfbWVtc2V0NV9hdG9tKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zdHJpbmcvc3NlMi1zdHJjaHItYXRvbS5TIGIvbGliYy9hcmNoLXg4Ni9zdHJpbmcvc3NlMi1zdHJjaHItYXRvbS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzMjUxODEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N0cmluZy9zc2UyLXN0cmNoci1hdG9tLlMKQEAgLTAsMCArMSwzOTEgQEAKKy8qCitDb3B5cmlnaHQgKGMpIDIwMTEsIEludGVsIENvcnBvcmF0aW9uCitBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgICAgKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgICAgKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgICAgKiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKworICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBJbnRlbCBDb3Jwb3JhdGlvbiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAgICAqIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICAgICogd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKK0FOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECitXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCitESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCitBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyhJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKK0xPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyhJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCitTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisKKyNpZm5kZWYgTAorIyBkZWZpbmUgTChsYWJlbCkJLkwjI2xhYmVsCisjZW5kaWYKKworI2lmbmRlZiBjZmlfc3RhcnRwcm9jCisjIGRlZmluZSBjZmlfc3RhcnRwcm9jCS5jZmlfc3RhcnRwcm9jCisjZW5kaWYKKworI2lmbmRlZiBjZmlfZW5kcHJvYworIyBkZWZpbmUgY2ZpX2VuZHByb2MJLmNmaV9lbmRwcm9jCisjZW5kaWYKKworI2lmbmRlZiBjZmlfcmVsX29mZnNldAorIyBkZWZpbmUgY2ZpX3JlbF9vZmZzZXQocmVnLCBvZmYpCS5jZmlfcmVsX29mZnNldCByZWcsIG9mZgorI2VuZGlmCisKKyNpZm5kZWYgY2ZpX3Jlc3RvcmUKKyMgZGVmaW5lIGNmaV9yZXN0b3JlKHJlZykJLmNmaV9yZXN0b3JlIHJlZworI2VuZGlmCisKKyNpZm5kZWYgY2ZpX2FkanVzdF9jZmFfb2Zmc2V0CisjIGRlZmluZSBjZmlfYWRqdXN0X2NmYV9vZmZzZXQob2ZmKQkuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IG9mZgorI2VuZGlmCisKKyNpZm5kZWYgRU5UUlkKKyMgZGVmaW5lIEVOVFJZKG5hbWUpCVwKKwkudHlwZSBuYW1lLCAgQGZ1bmN0aW9uOwlcCisJLmdsb2JsIG5hbWU7CVwKKwkucDJhbGlnbiA0OwlcCituYW1lOglcCisJY2ZpX3N0YXJ0cHJvYworI2VuZGlmCisKKyNpZm5kZWYgRU5ECisjIGRlZmluZSBFTkQobmFtZSkJXAorCWNmaV9lbmRwcm9jOwlcCisJLnNpemUgbmFtZSwJLi1uYW1lCisjZW5kaWYKKworI2RlZmluZSBDRklfUFVTSChSRUcpCVwKKwljZmlfYWRqdXN0X2NmYV9vZmZzZXQgKDQpOwlcCisJY2ZpX3JlbF9vZmZzZXQgKFJFRywgMCkKKworI2RlZmluZSBDRklfUE9QKFJFRykJXAorCWNmaV9hZGp1c3RfY2ZhX29mZnNldCAoLTQpOwlcCisJY2ZpX3Jlc3RvcmUgKFJFRykKKworI2RlZmluZSBQVVNIKFJFRykJcHVzaGwgUkVHOwlDRklfUFVTSCAoUkVHKQorI2RlZmluZSBQT1AoUkVHKQlwb3BsIFJFRzsJQ0ZJX1BPUCAoUkVHKQorCisjZGVmaW5lIFBBUk1TCTgKKyNkZWZpbmUgRU5UUkFOQ0UJUFVTSCglZWRpKQorI2RlZmluZSBSRVRVUk4JUE9QICglZWRpKTsgcmV0OyBDRklfUFVTSCAoJWVkaSk7CisKKworI2RlZmluZSBTVFIxCVBBUk1TCisjZGVmaW5lIFNUUjIJU1RSMSs0CisKKwkudGV4dAorRU5UUlkgKHN0cmNocikKKworCUVOVFJBTkNFCisJbW92CVNUUjEoJWVzcCksICVlY3gKKwltb3ZkCVNUUjIoJWVzcCksICV4bW0xCisKKwlweG9yCSV4bW0yLCAleG1tMgorCW1vdgklZWN4LCAlZWRpCisJcHVucGNrbGJ3ICV4bW0xLCAleG1tMQorCXB1bnBja2xidyAleG1tMSwgJXhtbTEKKwkvKiBFQ1ggaGFzIE9GRlNFVC4gKi8KKwlhbmQJJDE1LCAlZWN4CisJcHNodWZkCSQwLCAleG1tMSwgJXhtbTEKKwlqZQlMKGxvb3ApCisKKy8qIEhhbmRsZSB1bmFsaWduZWQgc3RyaW5nLiAgKi8KKwlhbmQJJC0xNiwgJWVkaQorCW1vdmRxYQkoJWVkaSksICV4bW0wCisJcGNtcGVxYgkleG1tMCwgJXhtbTIKKwlwY21wZXFiCSV4bW0xLCAleG1tMAorCS8qIEZpbmQgd2hlcmUgTlVMTCBpcy4gICovCisJcG1vdm1za2IgJXhtbTIsICVlZHgKKwkvKiBDaGVjayBpZiB0aGVyZSBpcyBhIG1hdGNoLiAgKi8KKwlwbW92bXNrYiAleG1tMCwgJWVheAorCS8qIFJlbW92ZSB0aGUgbGVhZGluZyBieXRlcy4gICovCisJc2FybAklY2wsICVlZHgKKwlzYXJsCSVjbCwgJWVheAorCXRlc3QJJWVheCwgJWVheAorCWp6CUwodW5hbGlnbmVkX25vX21hdGNoKQorCWFkZAklZWN4LCAlZWRpCisJdGVzdAklZWR4LCAlZWR4CisJanoJTChtYXRjaF9jYXNlMSkKKwlqbXAJTChtYXRjaF9jYXNlMikKKworCS5wMmFsaWduIDQKK0wodW5hbGlnbmVkX25vX21hdGNoKToKKwl0ZXN0CSVlZHgsICVlZHgKKwlqbmUJTChyZXR1cm5fbnVsbCkKKworCXB4b3IJJXhtbTIsICV4bW0yCisJYWRkCSQxNiwgJWVkaQorCisJLnAyYWxpZ24gNAorLyogTG9vcCBzdGFydCBvbiBhbGlnbmVkIHN0cmluZy4gICovCitMKGxvb3ApOgorCW1vdmRxYQkoJWVkaSksICV4bW0wCisJcGNtcGVxYgkleG1tMCwgJXhtbTIKKwlwY21wZXFiCSV4bW0xLCAleG1tMAorCXBtb3Ztc2tiICV4bW0yLCAlZWR4CisJcG1vdm1za2IgJXhtbTAsICVlYXgKKwl0ZXN0CSVlYXgsICVlYXgKKwlqbnoJTChtYXRjaGVzKQorCXRlc3QJJWVkeCwgJWVkeAorCWpueglMKHJldHVybl9udWxsKQorCWFkZAkkMTYsICVlZGkKKworCW1vdmRxYQkoJWVkaSksICV4bW0wCisJcGNtcGVxYgkleG1tMCwgJXhtbTIKKwlwY21wZXFiCSV4bW0xLCAleG1tMAorCXBtb3Ztc2tiICV4bW0yLCAlZWR4CisJcG1vdm1za2IgJXhtbTAsICVlYXgKKwl0ZXN0CSVlYXgsICVlYXgKKwlqbnoJTChtYXRjaGVzKQorCXRlc3QJJWVkeCwgJWVkeAorCWpueglMKHJldHVybl9udWxsKQorCWFkZAkkMTYsICVlZGkKKworCW1vdmRxYQkoJWVkaSksICV4bW0wCisJcGNtcGVxYgkleG1tMCwgJXhtbTIKKwlwY21wZXFiCSV4bW0xLCAleG1tMAorCXBtb3Ztc2tiICV4bW0yLCAlZWR4CisJcG1vdm1za2IgJXhtbTAsICVlYXgKKwl0ZXN0CSVlYXgsICVlYXgKKwlqbnoJTChtYXRjaGVzKQorCXRlc3QJJWVkeCwgJWVkeAorCWpueglMKHJldHVybl9udWxsKQorCWFkZAkkMTYsICVlZGkKKworCW1vdmRxYQkoJWVkaSksICV4bW0wCisJcGNtcGVxYgkleG1tMCwgJXhtbTIKKwlwY21wZXFiCSV4bW0xLCAleG1tMAorCXBtb3Ztc2tiICV4bW0yLCAlZWR4CisJcG1vdm1za2IgJXhtbTAsICVlYXgKKwl0ZXN0CSVlYXgsICVlYXgKKwlqbnoJTChtYXRjaGVzKQorCXRlc3QJJWVkeCwgJWVkeAorCWpueglMKHJldHVybl9udWxsKQorCWFkZAkkMTYsICVlZGkKKwlqbXAJTChsb29wKQorCitMKG1hdGNoZXMpOgorCS8qIFRoZXJlIGlzIGEgbWF0Y2guICBGaXJzdCBmaW5kIHdoZXJlIE5VTEwgaXMuICAqLworCXRlc3QJJWVkeCwgJWVkeAorCWp6CUwobWF0Y2hfY2FzZTEpCisKKwkucDJhbGlnbiA0CitMKG1hdGNoX2Nhc2UyKToKKwl0ZXN0CSVhbCwgJWFsCisJanoJTChtYXRjaF9oaWd0aF9jYXNlMikKKworCW1vdgklYWwsICVjbAorCWFuZAkkMTUsICVjbAorCWpueglMKG1hdGNoX2Nhc2UyXzQpCisKKwltb3YJJWRsLCAlY2gKKwlhbmQJJDE1LCAlY2gKKwlqbnoJTChyZXR1cm5fbnVsbCkKKworCXRlc3QJJDB4MTAsICVhbAorCWpueglMKEV4aXQ1KQorCXRlc3QJJDB4MTAsICVkbAorCWpueglMKHJldHVybl9udWxsKQorCXRlc3QJJDB4MjAsICVhbAorCWpueglMKEV4aXQ2KQorCXRlc3QJJDB4MjAsICVkbAorCWpueglMKHJldHVybl9udWxsKQorCXRlc3QJJDB4NDAsICVhbAorCWpueglMKEV4aXQ3KQorCXRlc3QJJDB4NDAsICVkbAorCWpueglMKHJldHVybl9udWxsKQorCWxlYQk3KCVlZGkpLCAlZWF4CisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKG1hdGNoX2Nhc2UyXzQpOgorCXRlc3QJJDB4MDEsICVhbAorCWpueglMKEV4aXQxKQorCXRlc3QJJDB4MDEsICVkbAorCWpueglMKHJldHVybl9udWxsKQorCXRlc3QJJDB4MDIsICVhbAorCWpueglMKEV4aXQyKQorCXRlc3QJJDB4MDIsICVkbAorCWpueglMKHJldHVybl9udWxsKQorCXRlc3QJJDB4MDQsICVhbAorCWpueglMKEV4aXQzKQorCXRlc3QJJDB4MDQsICVkbAorCWpueglMKHJldHVybl9udWxsKQorCWxlYQkzKCVlZGkpLCAlZWF4CisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKG1hdGNoX2hpZ3RoX2Nhc2UyKToKKwl0ZXN0CSVkbCwgJWRsCisJam56CUwocmV0dXJuX251bGwpCisKKwltb3YJJWFoLCAlY2wKKwlhbmQJJDE1LCAlY2wKKwlqbnoJTChtYXRjaF9jYXNlMl8xMikKKworCW1vdgklZGgsICVjaAorCWFuZAkkMTUsICVjaAorCWpueglMKHJldHVybl9udWxsKQorCisJdGVzdAkkMHgxMCwgJWFoCisJam56CUwoRXhpdDEzKQorCXRlc3QJJDB4MTAsICVkaAorCWpueglMKHJldHVybl9udWxsKQorCXRlc3QJJDB4MjAsICVhaAorCWpueglMKEV4aXQxNCkKKwl0ZXN0CSQweDIwLCAlZGgKKwlqbnoJTChyZXR1cm5fbnVsbCkKKwl0ZXN0CSQweDQwLCAlYWgKKwlqbnoJTChFeGl0MTUpCisJdGVzdAkkMHg0MCwgJWRoCisJam56CUwocmV0dXJuX251bGwpCisJbGVhCTE1KCVlZGkpLCAlZWF4CisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKG1hdGNoX2Nhc2UyXzEyKToKKwl0ZXN0CSQweDAxLCAlYWgKKwlqbnoJTChFeGl0OSkKKwl0ZXN0CSQweDAxLCAlZGgKKwlqbnoJTChyZXR1cm5fbnVsbCkKKwl0ZXN0CSQweDAyLCAlYWgKKwlqbnoJTChFeGl0MTApCisJdGVzdAkkMHgwMiwgJWRoCisJam56CUwocmV0dXJuX251bGwpCisJdGVzdAkkMHgwNCwgJWFoCisJam56CUwoRXhpdDExKQorCXRlc3QJJDB4MDQsICVkaAorCWpueglMKHJldHVybl9udWxsKQorCWxlYQkxMSglZWRpKSwgJWVheAorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChtYXRjaF9jYXNlMSk6CisJdGVzdAklYWwsICVhbAorCWp6CUwobWF0Y2hfaGlndGhfY2FzZTEpCisKKwl0ZXN0CSQweDAxLCAlYWwKKwlqbnoJTChFeGl0MSkKKwl0ZXN0CSQweDAyLCAlYWwKKwlqbnoJTChFeGl0MikKKwl0ZXN0CSQweDA0LCAlYWwKKwlqbnoJTChFeGl0MykKKwl0ZXN0CSQweDA4LCAlYWwKKwlqbnoJTChFeGl0NCkKKwl0ZXN0CSQweDEwLCAlYWwKKwlqbnoJTChFeGl0NSkKKwl0ZXN0CSQweDIwLCAlYWwKKwlqbnoJTChFeGl0NikKKwl0ZXN0CSQweDQwLCAlYWwKKwlqbnoJTChFeGl0NykKKwlsZWEJNyglZWRpKSwgJWVheAorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChtYXRjaF9oaWd0aF9jYXNlMSk6CisJdGVzdAkkMHgwMSwgJWFoCisJam56CUwoRXhpdDkpCisJdGVzdAkkMHgwMiwgJWFoCisJam56CUwoRXhpdDEwKQorCXRlc3QJJDB4MDQsICVhaAorCWpueglMKEV4aXQxMSkKKwl0ZXN0CSQweDA4LCAlYWgKKwlqbnoJTChFeGl0MTIpCisJdGVzdAkkMHgxMCwgJWFoCisJam56CUwoRXhpdDEzKQorCXRlc3QJJDB4MjAsICVhaAorCWpueglMKEV4aXQxNCkKKwl0ZXN0CSQweDQwLCAlYWgKKwlqbnoJTChFeGl0MTUpCisJbGVhCTE1KCVlZGkpLCAlZWF4CisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKEV4aXQxKToKKwlsZWEJKCVlZGkpLCAlZWF4CisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKEV4aXQyKToKKwlsZWEJMSglZWRpKSwgJWVheAorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChFeGl0Myk6CisJbGVhCTIoJWVkaSksICVlYXgKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woRXhpdDQpOgorCWxlYQkzKCVlZGkpLCAlZWF4CisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKEV4aXQ1KToKKwlsZWEJNCglZWRpKSwgJWVheAorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChFeGl0Nik6CisJbGVhCTUoJWVkaSksICVlYXgKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woRXhpdDcpOgorCWxlYQk2KCVlZGkpLCAlZWF4CisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKEV4aXQ5KToKKwlsZWEJOCglZWRpKSwgJWVheAorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChFeGl0MTApOgorCWxlYQk5KCVlZGkpLCAlZWF4CisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKEV4aXQxMSk6CisJbGVhCTEwKCVlZGkpLCAlZWF4CisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKEV4aXQxMik6CisJbGVhCTExKCVlZGkpLCAlZWF4CisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKEV4aXQxMyk6CisJbGVhCTEyKCVlZGkpLCAlZWF4CisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKEV4aXQxNCk6CisJbGVhCTEzKCVlZGkpLCAlZWF4CisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKEV4aXQxNSk6CisJbGVhCTE0KCVlZGkpLCAlZWF4CisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKHJldHVybl9udWxsKToKKwl4b3IJJWVheCwgJWVheAorCVJFVFVSTgorCitFTkQgKHN0cmNocikKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3RyaW5nL3NzZTItc3RybGVuLWF0b20uUyBiL2xpYmMvYXJjaC14ODYvc3RyaW5nL3NzZTItc3RybGVuLWF0b20uUwppbmRleCA4OTExODY4Li44MTc2OGZiIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N0cmluZy9zc2UyLXN0cmxlbi1hdG9tLlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zdHJpbmcvc3NlMi1zdHJsZW4tYXRvbS5TCkBAIC0xLDcxICsxLDExMiBAQAotI2RlZmluZSBTVFJMRU4gc3NlMl9zdHJsZW5fYXRvbQorLyoKK0NvcHlyaWdodCAoYykgMjAxMSwgSW50ZWwgQ29ycG9yYXRpb24KK0FsbCByaWdodHMgcmVzZXJ2ZWQuCiAKLSNpZm5kZWYgTAotIyBkZWZpbmUgTChsYWJlbCkJLkwjI2xhYmVsCi0jZW5kaWYKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CiAKLSNpZm5kZWYgY2ZpX3N0YXJ0cHJvYwotIyBkZWZpbmUgY2ZpX3N0YXJ0cHJvYwkJCS5jZmlfc3RhcnRwcm9jCi0jZW5kaWYKKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAgICAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCiAKLSNpZm5kZWYgY2ZpX2VuZHByb2MKLSMgZGVmaW5lIGNmaV9lbmRwcm9jCQkJLmNmaV9lbmRwcm9jCi0jZW5kaWYKKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAgICAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAgICAqIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgogCi0jaWZuZGVmIGNmaV9yZWxfb2Zmc2V0Ci0jIGRlZmluZSBjZmlfcmVsX29mZnNldChyZWcsIG9mZikJLmNmaV9yZWxfb2Zmc2V0IHJlZywgb2ZmCi0jZW5kaWYKKyAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgSW50ZWwgQ29ycG9yYXRpb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgICAgKiBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAgICAqIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgogCi0jaWZuZGVmIGNmaV9yZXN0b3JlCi0jIGRlZmluZSBjZmlfcmVzdG9yZShyZWcpCQkuY2ZpX3Jlc3RvcmUgcmVnCi0jZW5kaWYKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKK0FOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECitXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCitESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCitBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyhJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKK0xPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyhJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCitTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCiAKLSNpZm5kZWYgY2ZpX2FkanVzdF9jZmFfb2Zmc2V0Ci0jIGRlZmluZSBjZmlfYWRqdXN0X2NmYV9vZmZzZXQob2ZmKQkuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IG9mZgotI2VuZGlmCisjaWZuZGVmIFVTRV9BU19TVFJDQVQKIAotI2lmbmRlZiBjZmlfcmVtZW1iZXJfc3RhdGUKLSMgZGVmaW5lIGNmaV9yZW1lbWJlcl9zdGF0ZQkJLmNmaV9yZW1lbWJlcl9zdGF0ZQotI2VuZGlmCisjIGlmbmRlZiBTVFJMRU4KKyMgIGRlZmluZSBTVFJMRU4gc3RybGVuCisjIGVuZGlmCiAKLSNpZm5kZWYgY2ZpX3Jlc3RvcmVfc3RhdGUKLSMgZGVmaW5lIGNmaV9yZXN0b3JlX3N0YXRlCQkuY2ZpX3Jlc3RvcmVfc3RhdGUKLSNlbmRpZgorIyBpZm5kZWYgTAorIyAgZGVmaW5lIEwobGFiZWwpCS5MIyNsYWJlbAorIyBlbmRpZgogCi0jaWZuZGVmIEVOVFJZCi0jIGRlZmluZSBFTlRSWShuYW1lKQkJCVwKLQkudHlwZSBuYW1lLCAgQGZ1bmN0aW9uOyAJXAotCS5nbG9ibCBuYW1lOwkJCVwKLQkucDJhbGlnbiA0OwkJCVwKLW5hbWU6CQkJCQlcCisjIGlmbmRlZiBjZmlfc3RhcnRwcm9jCisjICBkZWZpbmUgY2ZpX3N0YXJ0cHJvYwkuY2ZpX3N0YXJ0cHJvYworIyBlbmRpZgorCisjIGlmbmRlZiBjZmlfZW5kcHJvYworIyAgZGVmaW5lIGNmaV9lbmRwcm9jCS5jZmlfZW5kcHJvYworIyBlbmRpZgorCisvKiBjYWxlZSBzYWZlIHJlZ2lzdGVyIG9ubHkgZm9yIHN0cm5sZW4gaXMgcmVxdWlyZWQgKi8KKworIyBpZmRlZiBVU0VfQVNfU1RSTkxFTgorIyAgaWZuZGVmIGNmaV9yZWxfb2Zmc2V0CisjICAgZGVmaW5lIGNmaV9yZWxfb2Zmc2V0KHJlZywgb2ZmKQkuY2ZpX3JlbF9vZmZzZXQgcmVnLCBvZmYKKyMgIGVuZGlmCisKKyMgIGlmbmRlZiBjZmlfcmVzdG9yZQorIyAgIGRlZmluZSBjZmlfcmVzdG9yZShyZWcpCS5jZmlfcmVzdG9yZSByZWcKKyMgIGVuZGlmCisKKyMgIGlmbmRlZiBjZmlfYWRqdXN0X2NmYV9vZmZzZXQKKyMgICBkZWZpbmUgY2ZpX2FkanVzdF9jZmFfb2Zmc2V0KG9mZikJLmNmaV9hZGp1c3RfY2ZhX29mZnNldCBvZmYKKyMgIGVuZGlmCisjIGVuZGlmCisKKyMgaWZuZGVmIEVOVFJZCisjICBkZWZpbmUgRU5UUlkobmFtZSkJXAorCS50eXBlIG5hbWUsICBAZnVuY3Rpb247CVwKKwkuZ2xvYmwgbmFtZTsJXAorCS5wMmFsaWduIDQ7CVwKK25hbWU6CVwKIAljZmlfc3RhcnRwcm9jCi0jZW5kaWYKKyMgZW5kaWYKIAotI2lmbmRlZiBFTkQKLSMgZGVmaW5lIEVORChuYW1lKQkJCVwKLQljZmlfZW5kcHJvYzsJCQlcCisjIGlmbmRlZiBFTkQKKyMgIGRlZmluZSBFTkQobmFtZSkJXAorCWNmaV9lbmRwcm9jOwlcCiAJLnNpemUgbmFtZSwgLi1uYW1lCi0jZW5kaWYKKyMgZW5kaWYKIAotI2RlZmluZSBDRklfUFVTSChSRUcpCQkJCQkJXAotICBjZmlfYWRqdXN0X2NmYV9vZmZzZXQgKDQpOwkJCQkJXAotICBjZmlfcmVsX29mZnNldCAoUkVHLCAwKQorIyBkZWZpbmUgUEFSTVMJNAorIyBkZWZpbmUgU1RSCVBBUk1TCisjIGRlZmluZSBSRVRVUk4JcmV0CiAKLSNkZWZpbmUgQ0ZJX1BPUChSRUcpCQkJCQkJXAotICBjZmlfYWRqdXN0X2NmYV9vZmZzZXQgKC00KTsJCQkJCVwKLSAgY2ZpX3Jlc3RvcmUgKFJFRykKKyMgaWZkZWYgVVNFX0FTX1NUUk5MRU4KKyMgIGRlZmluZSBMRU4JUEFSTVMgKyA4CisjICBkZWZpbmUgQ0ZJX1BVU0goUkVHKQlcCisJY2ZpX2FkanVzdF9jZmFfb2Zmc2V0ICg0KTsJXAorCWNmaV9yZWxfb2Zmc2V0IChSRUcsIDApCiAKLSNkZWZpbmUgUFVTSChSRUcpCXB1c2hsIFJFRzsgQ0ZJX1BVU0ggKFJFRykKLSNkZWZpbmUgUE9QKFJFRykJcG9wbCBSRUc7IENGSV9QT1AgKFJFRykKLSNkZWZpbmUgUEFSTVMJCTQKLSNkZWZpbmUJU1RSCQlQQVJNUwotI2RlZmluZSBFTlRSQU5DRQotI2RlZmluZSBSRVRVUk4JCXJldAorIyAgZGVmaW5lIENGSV9QT1AoUkVHKQlcCisJY2ZpX2FkanVzdF9jZmFfb2Zmc2V0ICgtNCk7CVwKKwljZmlfcmVzdG9yZSAoUkVHKQorCisjICBkZWZpbmUgUFVTSChSRUcpCXB1c2hsCVJFRzsJQ0ZJX1BVU0ggKFJFRykKKyMgIGRlZmluZSBQT1AoUkVHKQlwb3BsCVJFRzsJQ0ZJX1BPUCAoUkVHKQorIyAgdW5kZWYgUkVUVVJOCisjICBkZWZpbmUgUkVUVVJOCVBPUCAoJWVkaSk7IHJldDsgQ0ZJX1BVU0goJWVkaSk7CisjIGVuZGlmCiAKIAkudGV4dAogRU5UUlkgKFNUUkxFTikKLQlFTlRSQU5DRQogCW1vdglTVFIoJWVzcCksICVlZHgKKyMgaWZkZWYgVVNFX0FTX1NUUk5MRU4KKwlQVVNICSglZWRpKQorCW1vdmwJTEVOKCVlc3ApLCAlZWRpCisJc3ViCSQ0LCAlZWRpCisJamJlCUwobGVuX2xlc3M0X3Byb2xvZykKKyMgZW5kaWYKKyNlbmRpZgogCXhvcgklZWF4LCAlZWF4CiAJY21wYgkkMCwgKCVlZHgpCiAJanoJTChleGl0X3RhaWwwKQpAQCAtNzUsNiArMTE2LDEyIEBACiAJanoJTChleGl0X3RhaWwyKQogCWNtcGIJJDAsIDMoJWVkeCkKIAlqeglMKGV4aXRfdGFpbDMpCisKKyNpZmRlZiBVU0VfQVNfU1RSTkxFTgorCXN1YgkkNCwgJWVkaQorCWpiZQlMKGxlbl9sZXNzOF9wcm9sb2cpCisjZW5kaWYKKwogCWNtcGIJJDAsIDQoJWVkeCkKIAlqeglMKGV4aXRfdGFpbDQpCiAJY21wYgkkMCwgNSglZWR4KQpAQCAtODMsNiArMTMwLDEyIEBACiAJanoJTChleGl0X3RhaWw2KQogCWNtcGIJJDAsIDcoJWVkeCkKIAlqeglMKGV4aXRfdGFpbDcpCisKKyNpZmRlZiBVU0VfQVNfU1RSTkxFTgorCXN1YgkkNCwgJWVkaQorCWpiZQlMKGxlbl9sZXNzMTJfcHJvbG9nKQorI2VuZGlmCisKIAljbXBiCSQwLCA4KCVlZHgpCiAJanoJTChleGl0X3RhaWw4KQogCWNtcGIJJDAsIDkoJWVkeCkKQEAgLTkxLDYgKzE0NCwxMiBAQAogCWp6CUwoZXhpdF90YWlsMTApCiAJY21wYgkkMCwgMTEoJWVkeCkKIAlqeglMKGV4aXRfdGFpbDExKQorCisjaWZkZWYgVVNFX0FTX1NUUk5MRU4KKwlzdWIJJDQsICVlZGkKKwlqYmUJTChsZW5fbGVzczE2X3Byb2xvZykKKyNlbmRpZgorCiAJY21wYgkkMCwgMTIoJWVkeCkKIAlqeglMKGV4aXRfdGFpbDEyKQogCWNtcGIJJDAsIDEzKCVlZHgpCkBAIC05OSwyMTEgKzE1OCw1MzEgQEAKIAlqeglMKGV4aXRfdGFpbDE0KQogCWNtcGIJJDAsIDE1KCVlZHgpCiAJanoJTChleGl0X3RhaWwxNSkKKwogCXB4b3IJJXhtbTAsICV4bW0wCi0JbW92CSVlZHgsICVlYXgKLQltb3YJJWVkeCwgJWVjeAorCWxlYQkxNiglZWR4KSwgJWVheAorCW1vdgklZWF4LCAlZWN4CiAJYW5kCSQtMTYsICVlYXgKLQlhZGQJJDE2LCAlZWN4Ci0JYWRkCSQxNiwgJWVheAorCisjaWZkZWYgVVNFX0FTX1NUUk5MRU4KKwlhbmQJJDE1LCAlZWR4CisJYWRkCSVlZHgsICVlZGkKKwlzdWIJJDY0LCAlZWRpCisJamJlCUwobGVuX2xlc3M2NCkKKyNlbmRpZgogCiAJcGNtcGVxYgkoJWVheCksICV4bW0wCiAJcG1vdm1za2IgJXhtbTAsICVlZHgKIAlweG9yCSV4bW0xLCAleG1tMQotCXRlc3QJJWVkeCwgJWVkeAogCWxlYQkxNiglZWF4KSwgJWVheAorCXRlc3QJJWVkeCwgJWVkeAogCWpueglMKGV4aXQpCiAKIAlwY21wZXFiCSglZWF4KSwgJXhtbTEKIAlwbW92bXNrYiAleG1tMSwgJWVkeAogCXB4b3IJJXhtbTIsICV4bW0yCi0JdGVzdAklZWR4LCAlZWR4CiAJbGVhCTE2KCVlYXgpLCAlZWF4CisJdGVzdAklZWR4LCAlZWR4CiAJam56CUwoZXhpdCkKIAotCiAJcGNtcGVxYgkoJWVheCksICV4bW0yCiAJcG1vdm1za2IgJXhtbTIsICVlZHgKIAlweG9yCSV4bW0zLCAleG1tMwotCXRlc3QJJWVkeCwgJWVkeAogCWxlYQkxNiglZWF4KSwgJWVheAorCXRlc3QJJWVkeCwgJWVkeAogCWpueglMKGV4aXQpCiAKIAlwY21wZXFiCSglZWF4KSwgJXhtbTMKIAlwbW92bXNrYiAleG1tMywgJWVkeAotCXRlc3QJJWVkeCwgJWVkeAogCWxlYQkxNiglZWF4KSwgJWVheAorCXRlc3QJJWVkeCwgJWVkeAogCWpueglMKGV4aXQpCiAKKyNpZmRlZiBVU0VfQVNfU1RSTkxFTgorCXN1YgkkNjQsICVlZGkKKwlqYmUJTChsZW5fbGVzczY0KQorI2VuZGlmCisKIAlwY21wZXFiCSglZWF4KSwgJXhtbTAKIAlwbW92bXNrYiAleG1tMCwgJWVkeAotCXRlc3QJJWVkeCwgJWVkeAogCWxlYQkxNiglZWF4KSwgJWVheAorCXRlc3QJJWVkeCwgJWVkeAogCWpueglMKGV4aXQpCiAKIAlwY21wZXFiCSglZWF4KSwgJXhtbTEKIAlwbW92bXNrYiAleG1tMSwgJWVkeAotCXRlc3QJJWVkeCwgJWVkeAogCWxlYQkxNiglZWF4KSwgJWVheAorCXRlc3QJJWVkeCwgJWVkeAogCWpueglMKGV4aXQpCiAKIAlwY21wZXFiCSglZWF4KSwgJXhtbTIKIAlwbW92bXNrYiAleG1tMiwgJWVkeAotCXRlc3QJJWVkeCwgJWVkeAogCWxlYQkxNiglZWF4KSwgJWVheAorCXRlc3QJJWVkeCwgJWVkeAogCWpueglMKGV4aXQpCiAKIAlwY21wZXFiCSglZWF4KSwgJXhtbTMKIAlwbW92bXNrYiAleG1tMywgJWVkeAotCXRlc3QJJWVkeCwgJWVkeAogCWxlYQkxNiglZWF4KSwgJWVheAorCXRlc3QJJWVkeCwgJWVkeAogCWpueglMKGV4aXQpCiAKKyNpZmRlZiBVU0VfQVNfU1RSTkxFTgorCXN1YgkkNjQsICVlZGkKKwlqYmUJTChsZW5fbGVzczY0KQorI2VuZGlmCisKIAlwY21wZXFiCSglZWF4KSwgJXhtbTAKIAlwbW92bXNrYiAleG1tMCwgJWVkeAotCXRlc3QJJWVkeCwgJWVkeAogCWxlYQkxNiglZWF4KSwgJWVheAorCXRlc3QJJWVkeCwgJWVkeAogCWpueglMKGV4aXQpCiAKIAlwY21wZXFiCSglZWF4KSwgJXhtbTEKIAlwbW92bXNrYiAleG1tMSwgJWVkeAotCXRlc3QJJWVkeCwgJWVkeAogCWxlYQkxNiglZWF4KSwgJWVheAorCXRlc3QJJWVkeCwgJWVkeAogCWpueglMKGV4aXQpCiAKIAlwY21wZXFiCSglZWF4KSwgJXhtbTIKIAlwbW92bXNrYiAleG1tMiwgJWVkeAotCXRlc3QJJWVkeCwgJWVkeAogCWxlYQkxNiglZWF4KSwgJWVheAorCXRlc3QJJWVkeCwgJWVkeAogCWpueglMKGV4aXQpCiAKIAlwY21wZXFiCSglZWF4KSwgJXhtbTMKIAlwbW92bXNrYiAleG1tMywgJWVkeAotCXRlc3QJJWVkeCwgJWVkeAogCWxlYQkxNiglZWF4KSwgJWVheAorCXRlc3QJJWVkeCwgJWVkeAogCWpueglMKGV4aXQpCiAKKyNpZmRlZiBVU0VfQVNfU1RSTkxFTgorCXN1YgkkNjQsICVlZGkKKwlqYmUJTChsZW5fbGVzczY0KQorI2VuZGlmCisKIAlwY21wZXFiCSglZWF4KSwgJXhtbTAKIAlwbW92bXNrYiAleG1tMCwgJWVkeAotCXRlc3QJJWVkeCwgJWVkeAogCWxlYQkxNiglZWF4KSwgJWVheAorCXRlc3QJJWVkeCwgJWVkeAogCWpueglMKGV4aXQpCiAKIAlwY21wZXFiCSglZWF4KSwgJXhtbTEKIAlwbW92bXNrYiAleG1tMSwgJWVkeAotCXRlc3QJJWVkeCwgJWVkeAogCWxlYQkxNiglZWF4KSwgJWVheAorCXRlc3QJJWVkeCwgJWVkeAogCWpueglMKGV4aXQpCiAKIAlwY21wZXFiCSglZWF4KSwgJXhtbTIKIAlwbW92bXNrYiAleG1tMiwgJWVkeAotCXRlc3QJJWVkeCwgJWVkeAogCWxlYQkxNiglZWF4KSwgJWVheAorCXRlc3QJJWVkeCwgJWVkeAogCWpueglMKGV4aXQpCiAKIAlwY21wZXFiCSglZWF4KSwgJXhtbTMKIAlwbW92bXNrYiAleG1tMywgJWVkeAotCXRlc3QJJWVkeCwgJWVkeAogCWxlYQkxNiglZWF4KSwgJWVheAorCXRlc3QJJWVkeCwgJWVkeAogCWpueglMKGV4aXQpCiAKKyNpZmRlZiBVU0VfQVNfU1RSTkxFTgorCW1vdgklZWF4LCAlZWR4CisJYW5kCSQ2MywgJWVkeAorCWFkZAklZWR4LCAlZWRpCisjZW5kaWYKKwogCWFuZAkkLTB4NDAsICVlYXgKLQlQVVNIICglZXNpKQotCVBVU0ggKCVlZGkpCi0JUFVTSCAoJWVieCkKLQlQVVNIICglZWJwKQotCXhvcgklZWJwLCAlZWJwCi1MKGFsaWduZWRfNjQpOgotCXBjbXBlcWIJKCVlYXgpLCAleG1tMAotCXBjbXBlcWIJMTYoJWVheCksICV4bW0xCi0JcGNtcGVxYgkzMiglZWF4KSwgJXhtbTIKLQlwY21wZXFiCTQ4KCVlYXgpLCAleG1tMwotCXBtb3Ztc2tiICV4bW0wLCAlZWR4Ci0JcG1vdm1za2IgJXhtbTEsICVlc2kKLQlwbW92bXNrYiAleG1tMiwgJWVkaQotCXBtb3Ztc2tiICV4bW0zLCAlZWJ4Ci0Jb3IJJWVkeCwgJWVicAotCW9yCSVlc2ksICVlYnAKLQlvcgklZWRpLCAlZWJwCi0Jb3IJJWVieCwgJWVicAorCisJLnAyYWxpZ24gNAorTChhbGlnbmVkXzY0X2xvb3ApOgorI2lmZGVmIFVTRV9BU19TVFJOTEVOCisJc3ViCSQ2NCwgJWVkaQorCWpiZQlMKGxlbl9sZXNzNjQpCisjZW5kaWYKKwltb3ZhcHMJKCVlYXgpLCAleG1tMAorCW1vdmFwcwkxNiglZWF4KSwgJXhtbTEKKwltb3ZhcHMJMzIoJWVheCksICV4bW0yCisJbW92YXBzCTQ4KCVlYXgpLCAleG1tNgorCXBtaW51YgkleG1tMSwgJXhtbTAKKwlwbWludWIJJXhtbTYsICV4bW0yCisJcG1pbnViCSV4bW0wLCAleG1tMgorCXBjbXBlcWIJJXhtbTMsICV4bW0yCisJcG1vdm1za2IgJXhtbTIsICVlZHgKIAlsZWEJNjQoJWVheCksICVlYXgKLQlqeglMKGFsaWduZWRfNjQpCi1MKDQ4bGVhdmUpOgogCXRlc3QJJWVkeCwgJWVkeAotCWpueglMKGFsaWduZWRfNjRfZXhpdF8xNikKLQl0ZXN0CSVlc2ksICVlc2kKLQlqbnoJTChhbGlnbmVkXzY0X2V4aXRfMzIpCi0JdGVzdAklZWRpLCAlZWRpCi0Jam56CUwoYWxpZ25lZF82NF9leGl0XzQ4KQotCW1vdgklZWJ4LCAlZWR4Ci0JbGVhCSglZWF4KSwgJWVheAotCWptcAlMKGFsaWduZWRfNjRfZXhpdCkKLUwoYWxpZ25lZF82NF9leGl0XzQ4KToKLQlsZWEJLTE2KCVlYXgpLCAlZWF4Ci0JbW92CSVlZGksICVlZHgKLQlqbXAJTChhbGlnbmVkXzY0X2V4aXQpCi1MKGFsaWduZWRfNjRfZXhpdF8zMik6Ci0JbGVhCS0zMiglZWF4KSwgJWVheAotCW1vdgklZXNpLCAlZWR4Ci0Jam1wCUwoYWxpZ25lZF82NF9leGl0KQotTChhbGlnbmVkXzY0X2V4aXRfMTYpOgotCWxlYQktNDgoJWVheCksICVlYXgKLUwoYWxpZ25lZF82NF9leGl0KToKLQlQT1AgKCVlYnApCi0JUE9QICglZWJ4KQotCVBPUCAoJWVkaSkKLQlQT1AgKCVlc2kpCisJanoJTChhbGlnbmVkXzY0X2xvb3ApCisKKwlwY21wZXFiCS02NCglZWF4KSwgJXhtbTMKKwlwbW92bXNrYiAleG1tMywgJWVkeAorCWxlYQk0OCglZWN4KSwgJWVjeAorCXRlc3QJJWVkeCwgJWVkeAorCWpueglMKGV4aXQpCisKKwlwY21wZXFiCSV4bW0xLCAleG1tMworCXBtb3Ztc2tiICV4bW0zLCAlZWR4CisJbGVhCS0xNiglZWN4KSwgJWVjeAorCXRlc3QJJWVkeCwgJWVkeAorCWpueglMKGV4aXQpCisKKwlwY21wZXFiCS0zMiglZWF4KSwgJXhtbTMKKwlwbW92bXNrYiAleG1tMywgJWVkeAorCWxlYQktMTYoJWVjeCksICVlY3gKKwl0ZXN0CSVlZHgsICVlZHgKKwlqbnoJTChleGl0KQorCisJcGNtcGVxYgkleG1tNiwgJXhtbTMKKwlwbW92bXNrYiAleG1tMywgJWVkeAorCWxlYQktMTYoJWVjeCksICVlY3gKIEwoZXhpdCk6CiAJc3ViCSVlY3gsICVlYXgKIAl0ZXN0CSVkbCwgJWRsCiAJanoJTChleGl0X2hpZ2gpCisKKwltb3YJJWRsLCAlY2wKKwlhbmQJJDE1LCAlY2wKKwlqeglMKGV4aXRfOCkKIAl0ZXN0CSQweDAxLCAlZGwKIAlqbnoJTChleGl0X3RhaWwwKQotCiAJdGVzdAkkMHgwMiwgJWRsCiAJam56CUwoZXhpdF90YWlsMSkKLQogCXRlc3QJJDB4MDQsICVkbAogCWpueglMKGV4aXRfdGFpbDIpCisJYWRkCSQzLCAlZWF4CisJUkVUVVJOCiAKLQl0ZXN0CSQweDA4LCAlZGwKLQlqbnoJTChleGl0X3RhaWwzKQotCisJLnAyYWxpZ24gNAorTChleGl0XzgpOgogCXRlc3QJJDB4MTAsICVkbAogCWpueglMKGV4aXRfdGFpbDQpCi0KIAl0ZXN0CSQweDIwLCAlZGwKIAlqbnoJTChleGl0X3RhaWw1KQotCiAJdGVzdAkkMHg0MCwgJWRsCiAJam56CUwoZXhpdF90YWlsNikKIAlhZGQJJDcsICVlYXgKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woZXhpdF9oaWdoKToKKwltb3YJJWRoLCAlY2gKKwlhbmQJJDE1LCAlY2gKKwlqeglMKGV4aXRfaGlnaF84KQorCXRlc3QJJDB4MDEsICVkaAorCWpueglMKGV4aXRfdGFpbDgpCisJdGVzdAkkMHgwMiwgJWRoCisJam56CUwoZXhpdF90YWlsOSkKKwl0ZXN0CSQweDA0LCAlZGgKKwlqbnoJTChleGl0X3RhaWwxMCkKKwlhZGQJJDExLCAlZWF4CisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKGV4aXRfaGlnaF84KToKKwl0ZXN0CSQweDEwLCAlZGgKKwlqbnoJTChleGl0X3RhaWwxMikKKwl0ZXN0CSQweDIwLCAlZGgKKwlqbnoJTChleGl0X3RhaWwxMykKKwl0ZXN0CSQweDQwLCAlZGgKKwlqbnoJTChleGl0X3RhaWwxNCkKKwlhZGQJJDE1LCAlZWF4CiBMKGV4aXRfdGFpbDApOgogCVJFVFVSTgogCi1MKGV4aXRfaGlnaCk6Ci0JYWRkCSQ4LCAlZWF4Ci0JdGVzdAkkMHgwMSwgJWRoCi0Jam56CUwoZXhpdF90YWlsMCkKKyNpZmRlZiBVU0VfQVNfU1RSTkxFTgogCi0JdGVzdAkkMHgwMiwgJWRoCi0Jam56CUwoZXhpdF90YWlsMSkKKwkucDJhbGlnbiA0CitMKGxlbl9sZXNzNjQpOgorCXB4b3IJJXhtbTAsICV4bW0wCisJYWRkCSQ2NCwgJWVkaQogCi0JdGVzdAkkMHgwNCwgJWRoCi0Jam56CUwoZXhpdF90YWlsMikKKwlwY21wZXFiCSglZWF4KSwgJXhtbTAKKwlwbW92bXNrYiAleG1tMCwgJWVkeAorCXB4b3IJJXhtbTEsICV4bW0xCisJbGVhCTE2KCVlYXgpLCAlZWF4CisJdGVzdAklZWR4LCAlZWR4CisJam56CUwoc3Rybmxlbl9leGl0KQogCi0JdGVzdAkkMHgwOCwgJWRoCi0Jam56CUwoZXhpdF90YWlsMykKKwlzdWIJJDE2LCAlZWRpCisJamJlCUwocmV0dXJuX3N0YXJ0X2xlbikKIAotCXRlc3QJJDB4MTAsICVkaAotCWpueglMKGV4aXRfdGFpbDQpCisJcGNtcGVxYgkoJWVheCksICV4bW0xCisJcG1vdm1za2IgJXhtbTEsICVlZHgKKwlsZWEJMTYoJWVheCksICVlYXgKKwl0ZXN0CSVlZHgsICVlZHgKKwlqbnoJTChzdHJubGVuX2V4aXQpCiAKLQl0ZXN0CSQweDIwLCAlZGgKLQlqbnoJTChleGl0X3RhaWw1KQorCXN1YgkkMTYsICVlZGkKKwlqYmUJTChyZXR1cm5fc3RhcnRfbGVuKQogCi0JdGVzdAkkMHg0MCwgJWRoCi0Jam56CUwoZXhpdF90YWlsNikKLQlhZGQJJDcsICVlYXgKKwlwY21wZXFiCSglZWF4KSwgJXhtbTAKKwlwbW92bXNrYiAleG1tMCwgJWVkeAorCWxlYQkxNiglZWF4KSwgJWVheAorCXRlc3QJJWVkeCwgJWVkeAorCWpueglMKHN0cm5sZW5fZXhpdCkKKworCXN1YgkkMTYsICVlZGkKKwlqYmUJTChyZXR1cm5fc3RhcnRfbGVuKQorCisJcGNtcGVxYgkoJWVheCksICV4bW0xCisJcG1vdm1za2IgJXhtbTEsICVlZHgKKwlsZWEJMTYoJWVheCksICVlYXgKKwl0ZXN0CSVlZHgsICVlZHgKKwlqbnoJTChzdHJubGVuX2V4aXQpCisKKyNpZm5kZWYgVVNFX0FTX1NUUkxDQVQKKwltb3ZsCUxFTiglZXNwKSwgJWVheAogCVJFVFVSTgorI2Vsc2UKKwlqbXAJTChyZXR1cm5fc3RhcnRfbGVuKQorI2VuZGlmCisKKwkucDJhbGlnbiA0CitMKHN0cm5sZW5fZXhpdCk6CisJc3ViCSVlY3gsICVlYXgKKworCXRlc3QJJWRsLCAlZGwKKwlqeglMKHN0cm5sZW5fZXhpdF9oaWdoKQorCW1vdgklZGwsICVjbAorCWFuZAkkMTUsICVjbAorCWp6CUwoc3Rybmxlbl9leGl0XzgpCisJdGVzdAkkMHgwMSwgJWRsCisJam56CUwoZXhpdF90YWlsMCkKKwl0ZXN0CSQweDAyLCAlZGwKKwlqbnoJTChzdHJubGVuX2V4aXRfdGFpbDEpCisJdGVzdAkkMHgwNCwgJWRsCisJam56CUwoc3Rybmxlbl9leGl0X3RhaWwyKQorCXN1YgkkNCwgJWVkaQorCWpiCUwocmV0dXJuX3N0YXJ0X2xlbikKKwlsZWEJMyglZWF4KSwgJWVheAorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChzdHJubGVuX2V4aXRfOCk6CisJdGVzdAkkMHgxMCwgJWRsCisJam56CUwoc3Rybmxlbl9leGl0X3RhaWw0KQorCXRlc3QJJDB4MjAsICVkbAorCWpueglMKHN0cm5sZW5fZXhpdF90YWlsNSkKKwl0ZXN0CSQweDQwLCAlZGwKKwlqbnoJTChzdHJubGVuX2V4aXRfdGFpbDYpCisJc3ViCSQ4LCAlZWRpCisJamIJTChyZXR1cm5fc3RhcnRfbGVuKQorCWxlYQk3KCVlYXgpLCAlZWF4CisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKHN0cm5sZW5fZXhpdF9oaWdoKToKKwltb3YJJWRoLCAlY2gKKwlhbmQJJDE1LCAlY2gKKwlqeglMKHN0cm5sZW5fZXhpdF9oaWdoXzgpCisJdGVzdAkkMHgwMSwgJWRoCisJam56CUwoc3Rybmxlbl9leGl0X3RhaWw4KQorCXRlc3QJJDB4MDIsICVkaAorCWpueglMKHN0cm5sZW5fZXhpdF90YWlsOSkKKwl0ZXN0CSQweDA0LCAlZGgKKwlqbnoJTChzdHJubGVuX2V4aXRfdGFpbDEwKQorCXN1YgkkMTIsICVlZGkKKwlqYglMKHJldHVybl9zdGFydF9sZW4pCisJbGVhCTExKCVlYXgpLCAlZWF4CisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKHN0cm5sZW5fZXhpdF9oaWdoXzgpOgorCXRlc3QJJDB4MTAsICVkaAorCWpueglMKHN0cm5sZW5fZXhpdF90YWlsMTIpCisJdGVzdAkkMHgyMCwgJWRoCisJam56CUwoc3Rybmxlbl9leGl0X3RhaWwxMykKKwl0ZXN0CSQweDQwLCAlZGgKKwlqbnoJTChzdHJubGVuX2V4aXRfdGFpbDE0KQorCXN1YgkkMTYsICVlZGkKKwlqYglMKHJldHVybl9zdGFydF9sZW4pCisJbGVhCTE1KCVlYXgpLCAlZWF4CisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKHN0cm5sZW5fZXhpdF90YWlsMSk6CisJc3ViCSQyLCAlZWRpCisJamIJTChyZXR1cm5fc3RhcnRfbGVuKQorCWxlYQkxKCVlYXgpLCAlZWF4CisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKHN0cm5sZW5fZXhpdF90YWlsMik6CisJc3ViCSQzLCAlZWRpCisJamIJTChyZXR1cm5fc3RhcnRfbGVuKQorCWxlYQkyKCVlYXgpLCAlZWF4CisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKHN0cm5sZW5fZXhpdF90YWlsNCk6CisJc3ViCSQ1LCAlZWRpCisJamIJTChyZXR1cm5fc3RhcnRfbGVuKQorCWxlYQk0KCVlYXgpLCAlZWF4CisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKHN0cm5sZW5fZXhpdF90YWlsNSk6CisJc3ViCSQ2LCAlZWRpCisJamIJTChyZXR1cm5fc3RhcnRfbGVuKQorCWxlYQk1KCVlYXgpLCAlZWF4CisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKHN0cm5sZW5fZXhpdF90YWlsNik6CisJc3ViCSQ3LCAlZWRpCisJamIJTChyZXR1cm5fc3RhcnRfbGVuKQorCWxlYQk2KCVlYXgpLCAlZWF4CisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKHN0cm5sZW5fZXhpdF90YWlsOCk6CisJc3ViCSQ5LCAlZWRpCisJamIJTChyZXR1cm5fc3RhcnRfbGVuKQorCWxlYQk4KCVlYXgpLCAlZWF4CisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKHN0cm5sZW5fZXhpdF90YWlsOSk6CisJc3ViCSQxMCwgJWVkaQorCWpiCUwocmV0dXJuX3N0YXJ0X2xlbikKKwlsZWEJOSglZWF4KSwgJWVheAorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChzdHJubGVuX2V4aXRfdGFpbDEwKToKKwlzdWIJJDExLCAlZWRpCisJamIJTChyZXR1cm5fc3RhcnRfbGVuKQorCWxlYQkxMCglZWF4KSwgJWVheAorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChzdHJubGVuX2V4aXRfdGFpbDEyKToKKwlzdWIJJDEzLCAlZWRpCisJamIJTChyZXR1cm5fc3RhcnRfbGVuKQorCWxlYQkxMiglZWF4KSwgJWVheAorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChzdHJubGVuX2V4aXRfdGFpbDEzKToKKwlzdWIJJDE0LCAlZWRpCisJamIJTChyZXR1cm5fc3RhcnRfbGVuKQorCWxlYQkxMyglZWF4KSwgJWVheAorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChzdHJubGVuX2V4aXRfdGFpbDE0KToKKwlzdWIJJDE1LCAlZWRpCisJamIJTChyZXR1cm5fc3RhcnRfbGVuKQorCWxlYQkxNCglZWF4KSwgJWVheAorCVJFVFVSTgorCisjaWZuZGVmIFVTRV9BU19TVFJMQ0FUCisJLnAyYWxpZ24gNAorTChyZXR1cm5fc3RhcnRfbGVuKToKKwltb3ZsCUxFTiglZXNwKSwgJWVheAorCVJFVFVSTgorI2VuZGlmCisKKy8qIGZvciBwcm9sb2cgb25seSAqLworCisJLnAyYWxpZ24gNAorTChsZW5fbGVzczRfcHJvbG9nKToKKwl4b3IJJWVheCwgJWVheAorCisJYWRkCSQ0LCAlZWRpCisJanoJTChleGl0X3RhaWwwKQorCisJY21wYgkkMCwgKCVlZHgpCisJanoJTChleGl0X3RhaWwwKQorCWNtcAkkMSwgJWVkaQorCWplCUwoZXhpdF90YWlsMSkKKworCWNtcGIJJDAsIDEoJWVkeCkKKwlqeglMKGV4aXRfdGFpbDEpCisJY21wCSQyLCAlZWRpCisJamUJTChleGl0X3RhaWwyKQorCisJY21wYgkkMCwgMiglZWR4KQorCWp6CUwoZXhpdF90YWlsMikKKwljbXAJJDMsICVlZGkKKwlqZQlMKGV4aXRfdGFpbDMpCisKKwljbXBiCSQwLCAzKCVlZHgpCisJanoJTChleGl0X3RhaWwzKQorCW1vdgklZWRpLCAlZWF4CisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKGxlbl9sZXNzOF9wcm9sb2cpOgorCWFkZAkkNCwgJWVkaQorCisJY21wYgkkMCwgNCglZWR4KQorCWp6CUwoZXhpdF90YWlsNCkKKwljbXAJJDEsICVlZGkKKwlqZQlMKGV4aXRfdGFpbDUpCisKKwljbXBiCSQwLCA1KCVlZHgpCisJanoJTChleGl0X3RhaWw1KQorCWNtcAkkMiwgJWVkaQorCWplCUwoZXhpdF90YWlsNikKKworCWNtcGIJJDAsIDYoJWVkeCkKKwlqeglMKGV4aXRfdGFpbDYpCisJY21wCSQzLCAlZWRpCisJamUJTChleGl0X3RhaWw3KQorCisJY21wYgkkMCwgNyglZWR4KQorCWp6CUwoZXhpdF90YWlsNykKKwltb3YJJDgsICVlYXgKKwlSRVRVUk4KKworCisJLnAyYWxpZ24gNAorTChsZW5fbGVzczEyX3Byb2xvZyk6CisJYWRkCSQ0LCAlZWRpCisKKwljbXBiCSQwLCA4KCVlZHgpCisJanoJTChleGl0X3RhaWw4KQorCWNtcAkkMSwgJWVkaQorCWplCUwoZXhpdF90YWlsOSkKKworCWNtcGIJJDAsIDkoJWVkeCkKKwlqeglMKGV4aXRfdGFpbDkpCisJY21wCSQyLCAlZWRpCisJamUJTChleGl0X3RhaWwxMCkKKworCWNtcGIJJDAsIDEwKCVlZHgpCisJanoJTChleGl0X3RhaWwxMCkKKwljbXAJJDMsICVlZGkKKwlqZQlMKGV4aXRfdGFpbDExKQorCisJY21wYgkkMCwgMTEoJWVkeCkKKwlqeglMKGV4aXRfdGFpbDExKQorCW1vdgkkMTIsICVlYXgKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0wobGVuX2xlc3MxNl9wcm9sb2cpOgorCWFkZAkkNCwgJWVkaQorCisJY21wYgkkMCwgMTIoJWVkeCkKKwlqeglMKGV4aXRfdGFpbDEyKQorCWNtcAkkMSwgJWVkaQorCWplCUwoZXhpdF90YWlsMTMpCisKKwljbXBiCSQwLCAxMyglZWR4KQorCWp6CUwoZXhpdF90YWlsMTMpCisJY21wCSQyLCAlZWRpCisJamUJTChleGl0X3RhaWwxNCkKKworCWNtcGIJJDAsIDE0KCVlZHgpCisJanoJTChleGl0X3RhaWwxNCkKKwljbXAJJDMsICVlZGkKKwlqZQlMKGV4aXRfdGFpbDE1KQorCisJY21wYgkkMCwgMTUoJWVkeCkKKwlqeglMKGV4aXRfdGFpbDE1KQorCW1vdgkkMTYsICVlYXgKKwlSRVRVUk4KKyNlbmRpZgogCiAJLnAyYWxpZ24gNAogTChleGl0X3RhaWwxKToKQEAgLTM2NCw2ICs3NDMsNyBAQAogCiBMKGV4aXRfdGFpbDE1KToKIAlhZGQJJDE1LCAlZWF4Ci0JcmV0Ci0KKyNpZm5kZWYgVVNFX0FTX1NUUkNBVAorCVJFVFVSTgogRU5EIChTVFJMRU4pCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3RyaW5nL3NzZTItc3Rybmxlbi1hdG9tLlMgYi9saWJjL2FyY2gteDg2L3N0cmluZy9zc2UyLXN0cm5sZW4tYXRvbS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmODliNGUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N0cmluZy9zc2UyLXN0cm5sZW4tYXRvbS5TCkBAIC0wLDAgKzEsMzMgQEAKKy8qCitDb3B5cmlnaHQgKGMpIDIwMTEsIEludGVsIENvcnBvcmF0aW9uCitBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgICAgKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgICAgKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgICAgKiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKworICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBJbnRlbCBDb3Jwb3JhdGlvbiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAgICAqIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICAgICogd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKK0FOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECitXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCitESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCitBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyhJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKK0xPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyhJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCitTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisKKyNkZWZpbmUgVVNFX0FTX1NUUk5MRU4gMQorI2RlZmluZSBTVFJMRU4gIHN0cm5sZW4KKyNpbmNsdWRlICJzc2UyLXN0cmxlbi1hdG9tLlMiCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N0cmluZy9zc2UyLXN0cnJjaHItYXRvbS5TIGIvbGliYy9hcmNoLXg4Ni9zdHJpbmcvc3NlMi1zdHJyY2hyLWF0b20uUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYTNkYzNiCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9zdHJpbmcvc3NlMi1zdHJyY2hyLWF0b20uUwpAQCAtMCwwICsxLDc1MyBAQAorLyoKK0NvcHlyaWdodCAoYykgMjAxMSwgSW50ZWwgQ29ycG9yYXRpb24KK0FsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisKKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAgICAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisKKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAgICAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAgICAqIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCisgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEludGVsIENvcnBvcmF0aW9uIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICAgICogbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgICAgKiB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKK1dBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKK0RJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKK0FOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCitBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKK1NPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKi8KKworI2lmbmRlZiBMCisjIGRlZmluZSBMKGxhYmVsKQkuTCMjbGFiZWwKKyNlbmRpZgorCisjaWZuZGVmIGNmaV9zdGFydHByb2MKKyMgZGVmaW5lIGNmaV9zdGFydHByb2MJLmNmaV9zdGFydHByb2MKKyNlbmRpZgorCisjaWZuZGVmIGNmaV9lbmRwcm9jCisjIGRlZmluZSBjZmlfZW5kcHJvYwkuY2ZpX2VuZHByb2MKKyNlbmRpZgorCisjaWZuZGVmIGNmaV9yZWxfb2Zmc2V0CisjIGRlZmluZSBjZmlfcmVsX29mZnNldChyZWcsIG9mZikJLmNmaV9yZWxfb2Zmc2V0IHJlZywgb2ZmCisjZW5kaWYKKworI2lmbmRlZiBjZmlfcmVzdG9yZQorIyBkZWZpbmUgY2ZpX3Jlc3RvcmUocmVnKQkuY2ZpX3Jlc3RvcmUgcmVnCisjZW5kaWYKKworI2lmbmRlZiBjZmlfYWRqdXN0X2NmYV9vZmZzZXQKKyMgZGVmaW5lIGNmaV9hZGp1c3RfY2ZhX29mZnNldChvZmYpCS5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgb2ZmCisjZW5kaWYKKworI2lmbmRlZiBFTlRSWQorIyBkZWZpbmUgRU5UUlkobmFtZSkJXAorCS50eXBlIG5hbWUsIEBmdW5jdGlvbjsJXAorCS5nbG9ibCBuYW1lOwlcCisJLnAyYWxpZ24gNDsJXAorbmFtZToJXAorCWNmaV9zdGFydHByb2MKKyNlbmRpZgorCisjaWZuZGVmIEVORAorIyBkZWZpbmUgRU5EKG5hbWUpCVwKKwljZmlfZW5kcHJvYzsJXAorCS5zaXplIG5hbWUsIC4tbmFtZQorI2VuZGlmCisKKyNkZWZpbmUgQ0ZJX1BVU0goUkVHKQlcCisJY2ZpX2FkanVzdF9jZmFfb2Zmc2V0ICg0KTsJXAorCWNmaV9yZWxfb2Zmc2V0IChSRUcsIDApCisKKyNkZWZpbmUgQ0ZJX1BPUChSRUcpCVwKKwljZmlfYWRqdXN0X2NmYV9vZmZzZXQgKC00KTsJXAorCWNmaV9yZXN0b3JlIChSRUcpCisKKyNkZWZpbmUgUFVTSChSRUcpCXB1c2hsIFJFRzsgQ0ZJX1BVU0ggKFJFRykKKyNkZWZpbmUgUE9QKFJFRykJcG9wbCBSRUc7IENGSV9QT1AgKFJFRykKKworI2RlZmluZSBQQVJNUwk4CisjZGVmaW5lIEVOVFJBTkNFCVBVU0goJWVkaSk7CisjZGVmaW5lIFJFVFVSTglQT1AgKCVlZGkpOyByZXQ7IENGSV9QVVNIICglZWRpKTsKKworI2RlZmluZSBTVFIxICBQQVJNUworI2RlZmluZSBTVFIyICBTVFIxKzQKKworCS50ZXh0CitFTlRSWSAoc3RycmNocikKKworCUVOVFJBTkNFCisJbW92CVNUUjEoJWVzcCksICVlY3gKKwltb3ZkCVNUUjIoJWVzcCksICV4bW0xCisKKwlweG9yCSV4bW0yLCAleG1tMgorCW1vdgklZWN4LCAlZWRpCisJcHVucGNrbGJ3ICV4bW0xLCAleG1tMQorCXB1bnBja2xidyAleG1tMSwgJXhtbTEKKwkvKiBFQ1ggaGFzIE9GRlNFVC4gKi8KKwlhbmQJJDYzLCAlZWN4CisJcHNodWZkCSQwLCAleG1tMSwgJXhtbTEKKwljbXAJJDQ4LCAlZWN4CisJamEJTChjcm9zc2NhY2hlKQorCisvKiB1bmFsaWduZWQgc3RyaW5nLiAqLworCW1vdmRxdQkoJWVkaSksICV4bW0wCisJcGNtcGVxYgkleG1tMCwgJXhtbTIKKwlwY21wZXFiCSV4bW0xLCAleG1tMAorCS8qIEZpbmQgd2hlcmUgTlVMTCBpcy4gICovCisJcG1vdm1za2IgJXhtbTIsICVlY3gKKwkvKiBDaGVjayBpZiB0aGVyZSBpcyBhIG1hdGNoLiAgKi8KKwlwbW92bXNrYiAleG1tMCwgJWVheAorCWFkZAkkMTYsICVlZGkKKworCXRlc3QJJWVheCwgJWVheAorCWpueglMKHVuYWxpZ25lZF9tYXRjaDEpCisKKwl0ZXN0CSVlY3gsICVlY3gKKwlqbnoJTChyZXR1cm5fbnVsbCkKKworCWFuZAkkLTE2LCAlZWRpCisKKwlQVVNICSglZXNpKQorCVBVU0gJKCVlYngpCisKKwl4b3IJJWVieCwgJWVieAorCWptcAlMKGxvb3ApCisKKwlDRklfUE9QICAgICglZXNpKQorCUNGSV9QT1AgICAgKCVlYngpCisKKwkucDJhbGlnbiA0CitMKHVuYWxpZ25lZF9tYXRjaDEpOgorCXRlc3QJJWVjeCwgJWVjeAorCWpueglMKHByb2xvZ19maW5kX3plcm9fMSkKKworCVBVU0gJKCVlc2kpCisJUFVTSAkoJWVieCkKKworCW1vdgklZWF4LCAlZWJ4CisJbW92CSVlZGksICVlc2kKKwlhbmQJJC0xNiwgJWVkaQorCWptcAlMKGxvb3ApCisKKwlDRklfUE9QICAgICglZXNpKQorCUNGSV9QT1AgICAgKCVlYngpCisKKwkucDJhbGlnbiA0CitMKGNyb3NzY2FjaGUpOgorLyogSGFuY2xlIHVuYWxpZ25lZCBzdHJpbmcuICAqLworCWFuZAkkMTUsICVlY3gKKwlhbmQJJC0xNiwgJWVkaQorCXB4b3IJJXhtbTMsICV4bW0zCisJbW92ZHFhCSglZWRpKSwgJXhtbTAKKwlwY21wZXFiCSV4bW0wLCAleG1tMworCXBjbXBlcWIJJXhtbTEsICV4bW0wCisJLyogRmluZCB3aGVyZSBOVUxMIGlzLiAgKi8KKwlwbW92bXNrYiAleG1tMywgJWVkeAorCS8qIENoZWNrIGlmIHRoZXJlIGlzIGEgbWF0Y2guICAqLworCXBtb3Ztc2tiICV4bW0wLCAlZWF4CisJLyogUmVtb3ZlIHRoZSBsZWFkaW5nIGJ5dGVzLiAgKi8KKwlzaHIJJWNsLCAlZWR4CisJc2hyCSVjbCwgJWVheAorCWFkZAkkMTYsICVlZGkKKworCXRlc3QJJWVheCwgJWVheAorCWpueglMKHVuYWxpZ25lZF9tYXRjaCkKKworCXRlc3QJJWVkeCwgJWVkeAorCWpueglMKHJldHVybl9udWxsKQorCisJUFVTSAkoJWVzaSkKKwlQVVNICSglZWJ4KQorCisJeG9yCSVlYngsICVlYngKKwlqbXAJTChsb29wKQorCisJQ0ZJX1BPUCAgICAoJWVzaSkKKwlDRklfUE9QICAgICglZWJ4KQorCisJLnAyYWxpZ24gNAorTCh1bmFsaWduZWRfbWF0Y2gpOgorCXRlc3QJJWVkeCwgJWVkeAorCWpueglMKHByb2xvZ19maW5kX3plcm8pCisKKwlQVVNICSglZXNpKQorCVBVU0gJKCVlYngpCisKKwltb3YJJWVheCwgJWVieAorCWxlYQkoJWVkaSwgJWVjeCksICVlc2kKKworLyogTG9vcCBzdGFydCBvbiBhbGlnbmVkIHN0cmluZy4gICovCisJLnAyYWxpZ24gNAorTChsb29wKToKKwltb3ZkcWEJKCVlZGkpLCAleG1tMAorCXBjbXBlcWIJJXhtbTAsICV4bW0yCisJYWRkCSQxNiwgJWVkaQorCXBjbXBlcWIJJXhtbTEsICV4bW0wCisJcG1vdm1za2IgJXhtbTIsICVlY3gKKwlwbW92bXNrYiAleG1tMCwgJWVheAorCW9yCSVlYXgsICVlY3gKKwlqbnoJTChtYXRjaGVzKQorCisJbW92ZHFhCSglZWRpKSwgJXhtbTAKKwlwY21wZXFiCSV4bW0wLCAleG1tMgorCWFkZAkkMTYsICVlZGkKKwlwY21wZXFiCSV4bW0xLCAleG1tMAorCXBtb3Ztc2tiICV4bW0yLCAlZWN4CisJcG1vdm1za2IgJXhtbTAsICVlYXgKKwlvcgklZWF4LCAlZWN4CisJam56CUwobWF0Y2hlcykKKworCW1vdmRxYQkoJWVkaSksICV4bW0wCisJcGNtcGVxYgkleG1tMCwgJXhtbTIKKwlhZGQJJDE2LCAlZWRpCisJcGNtcGVxYgkleG1tMSwgJXhtbTAKKwlwbW92bXNrYiAleG1tMiwgJWVjeAorCXBtb3Ztc2tiICV4bW0wLCAlZWF4CisJb3IJJWVheCwgJWVjeAorCWpueglMKG1hdGNoZXMpCisKKwltb3ZkcWEJKCVlZGkpLCAleG1tMAorCXBjbXBlcWIJJXhtbTAsICV4bW0yCisJYWRkCSQxNiwgJWVkaQorCXBjbXBlcWIJJXhtbTEsICV4bW0wCisJcG1vdm1za2IgJXhtbTIsICVlY3gKKwlwbW92bXNrYiAleG1tMCwgJWVheAorCW9yCSVlYXgsICVlY3gKKwlqeglMKGxvb3ApCisKK0wobWF0Y2hlcyk6CisJdGVzdAklZWF4LCAlZWF4CisJam56CUwobWF0Y2gpCitMKHJldHVybl92YWx1ZSk6CisJdGVzdAklZWJ4LCAlZWJ4CisJanoJTChyZXR1cm5fbnVsbF8xKQorCW1vdgklZWJ4LCAlZWF4CisJbW92CSVlc2ksICVlZGkKKworCVBPUAkoJWVieCkKKwlQT1AJKCVlc2kpCisKKwlqbXAJTChtYXRjaF9jYXNlMSkKKworCUNGSV9QVVNIICAgICglZWJ4KQorCUNGSV9QVVNIICAgICglZXNpKQorCisJLnAyYWxpZ24gNAorTChyZXR1cm5fbnVsbF8xKToKKwlQT1AJKCVlYngpCisJUE9QCSglZXNpKQorCisJeG9yCSVlYXgsICVlYXgKKwlSRVRVUk4KKworCUNGSV9QVVNIICAgICglZWJ4KQorCUNGSV9QVVNIICAgICglZXNpKQorCisJLnAyYWxpZ24gNAorTChtYXRjaCk6CisJcG1vdm1za2IgJXhtbTIsICVlY3gKKwl0ZXN0CSVlY3gsICVlY3gKKwlqbnoJTChmaW5kX3plcm8pCisJbW92CSVlYXgsICVlYngKKwltb3YJJWVkaSwgJWVzaQorCWptcAlMKGxvb3ApCisKKwkucDJhbGlnbiA0CitMKGZpbmRfemVybyk6CisJdGVzdAklY2wsICVjbAorCWp6CUwoZmluZF96ZXJvX2hpZ2gpCisJbW92CSVjbCwgJWRsCisJYW5kCSQxNSwgJWRsCisJanoJTChmaW5kX3plcm9fOCkKKwl0ZXN0CSQweDAxLCAlY2wKKwlqbnoJTChGaW5kWmVyb0V4aXQxKQorCXRlc3QJJDB4MDIsICVjbAorCWpueglMKEZpbmRaZXJvRXhpdDIpCisJdGVzdAkkMHgwNCwgJWNsCisJam56CUwoRmluZFplcm9FeGl0MykKKwlhbmQJJDEgPDwgNCAtIDEsICVlYXgKKwlqeglMKHJldHVybl92YWx1ZSkKKworCVBPUAkoJWVieCkKKwlQT1AJKCVlc2kpCisJam1wICAgICBMKG1hdGNoX2Nhc2UxKQorCisJQ0ZJX1BVU0gJKCVlYngpCisJQ0ZJX1BVU0gJKCVlc2kpCisKKwkucDJhbGlnbiA0CitMKGZpbmRfemVyb184KToKKwl0ZXN0CSQweDEwLCAlY2wKKwlqbnoJTChGaW5kWmVyb0V4aXQ1KQorCXRlc3QJJDB4MjAsICVjbAorCWpueglMKEZpbmRaZXJvRXhpdDYpCisJdGVzdAkkMHg0MCwgJWNsCisJam56CUwoRmluZFplcm9FeGl0NykKKwlhbmQJJDEgPDwgOCAtIDEsICVlYXgKKwlqeglMKHJldHVybl92YWx1ZSkKKworCVBPUAkoJWVieCkKKwlQT1AJKCVlc2kpCisJam1wICAgICBMKG1hdGNoX2Nhc2UxKQorCisJQ0ZJX1BVU0gJKCVlYngpCisJQ0ZJX1BVU0gJKCVlc2kpCisKKwkucDJhbGlnbiA0CitMKGZpbmRfemVyb19oaWdoKToKKwltb3YJJWNoLCAlZGgKKwlhbmQJJDE1LCAlZGgKKwlqeglMKGZpbmRfemVyb19oaWdoXzgpCisJdGVzdAkkMHgwMSwgJWNoCisJam56CUwoRmluZFplcm9FeGl0OSkKKwl0ZXN0CSQweDAyLCAlY2gKKwlqbnoJTChGaW5kWmVyb0V4aXQxMCkKKwl0ZXN0CSQweDA0LCAlY2gKKwlqbnoJTChGaW5kWmVyb0V4aXQxMSkKKwlhbmQJJDEgPDwgMTIgLSAxLCAlZWF4CisJanoJTChyZXR1cm5fdmFsdWUpCisKKwlQT1AJKCVlYngpCisJUE9QCSglZXNpKQorCWptcCAgICAgTChtYXRjaF9jYXNlMSkKKworCUNGSV9QVVNICSglZWJ4KQorCUNGSV9QVVNICSglZXNpKQorCisJLnAyYWxpZ24gNAorTChmaW5kX3plcm9faGlnaF84KToKKwl0ZXN0CSQweDEwLCAlY2gKKwlqbnoJTChGaW5kWmVyb0V4aXQxMykKKwl0ZXN0CSQweDIwLCAlY2gKKwlqbnoJTChGaW5kWmVyb0V4aXQxNCkKKwl0ZXN0CSQweDQwLCAlY2gKKwlqbnoJTChGaW5kWmVyb0V4aXQxNSkKKwlhbmQJJDEgPDwgMTYgLSAxLCAlZWF4CisJanoJTChyZXR1cm5fdmFsdWUpCisKKwlQT1AJKCVlYngpCisJUE9QCSglZXNpKQorCWptcCAgICAgTChtYXRjaF9jYXNlMSkKKworCUNGSV9QVVNICSglZWJ4KQorCUNGSV9QVVNICSglZXNpKQorCisJLnAyYWxpZ24gNAorTChGaW5kWmVyb0V4aXQxKToKKwlhbmQJJDEsICVlYXgKKwlqeglMKHJldHVybl92YWx1ZSkKKworCVBPUAkoJWVieCkKKwlQT1AJKCVlc2kpCisJam1wICAgICBMKG1hdGNoX2Nhc2UxKQorCisJQ0ZJX1BVU0gJKCVlYngpCisJQ0ZJX1BVU0gJKCVlc2kpCisKKwkucDJhbGlnbiA0CitMKEZpbmRaZXJvRXhpdDIpOgorCWFuZAkkMSA8PCAyIC0gMSwgJWVheAorCWp6CUwocmV0dXJuX3ZhbHVlKQorCisJUE9QCSglZWJ4KQorCVBPUAkoJWVzaSkKKwlqbXAgICAgIEwobWF0Y2hfY2FzZTEpCisKKwlDRklfUFVTSAkoJWVieCkKKwlDRklfUFVTSAkoJWVzaSkKKworCS5wMmFsaWduIDQKK0woRmluZFplcm9FeGl0Myk6CisJYW5kCSQxIDw8IDMgLSAxLCAlZWF4CisJanoJTChyZXR1cm5fdmFsdWUpCisKKwlQT1AJKCVlYngpCisJUE9QCSglZXNpKQorCWptcCAgICAgTChtYXRjaF9jYXNlMSkKKworCUNGSV9QVVNICSglZWJ4KQorCUNGSV9QVVNICSglZXNpKQorCisJLnAyYWxpZ24gNAorTChGaW5kWmVyb0V4aXQ1KToKKwlhbmQJJDEgPDwgNSAtIDEsICVlYXgKKwlqeglMKHJldHVybl92YWx1ZSkKKworCVBPUAkoJWVieCkKKwlQT1AJKCVlc2kpCisJam1wICAgICBMKG1hdGNoX2Nhc2UxKQorCisJQ0ZJX1BVU0gJKCVlYngpCisJQ0ZJX1BVU0gJKCVlc2kpCisKKwkucDJhbGlnbiA0CitMKEZpbmRaZXJvRXhpdDYpOgorCWFuZAkkMSA8PCA2IC0gMSwgJWVheAorCWp6CUwocmV0dXJuX3ZhbHVlKQorCisJUE9QCSglZWJ4KQorCVBPUAkoJWVzaSkKKwlqbXAgICAgIEwobWF0Y2hfY2FzZTEpCisKKwlDRklfUFVTSAkoJWVieCkKKwlDRklfUFVTSAkoJWVzaSkKKworCS5wMmFsaWduIDQKK0woRmluZFplcm9FeGl0Nyk6CisJYW5kCSQxIDw8IDcgLSAxLCAlZWF4CisJanoJTChyZXR1cm5fdmFsdWUpCisKKwlQT1AJKCVlYngpCisJUE9QCSglZXNpKQorCWptcCAgICAgTChtYXRjaF9jYXNlMSkKKworCUNGSV9QVVNICSglZWJ4KQorCUNGSV9QVVNICSglZXNpKQorCisJLnAyYWxpZ24gNAorTChGaW5kWmVyb0V4aXQ5KToKKwlhbmQJJDEgPDwgOSAtIDEsICVlYXgKKwlqeglMKHJldHVybl92YWx1ZSkKKworCVBPUAkoJWVieCkKKwlQT1AJKCVlc2kpCisJam1wICAgICBMKG1hdGNoX2Nhc2UxKQorCisJQ0ZJX1BVU0gJKCVlYngpCisJQ0ZJX1BVU0gJKCVlc2kpCisKKwkucDJhbGlnbiA0CitMKEZpbmRaZXJvRXhpdDEwKToKKwlhbmQJJDEgPDwgMTAgLSAxLCAlZWF4CisJanoJTChyZXR1cm5fdmFsdWUpCisKKwlQT1AJKCVlYngpCisJUE9QCSglZXNpKQorCWptcCAgICAgTChtYXRjaF9jYXNlMSkKKworCUNGSV9QVVNICSglZWJ4KQorCUNGSV9QVVNICSglZXNpKQorCisJLnAyYWxpZ24gNAorTChGaW5kWmVyb0V4aXQxMSk6CisJYW5kCSQxIDw8IDExIC0gMSwgJWVheAorCWp6CUwocmV0dXJuX3ZhbHVlKQorCisJUE9QCSglZWJ4KQorCVBPUAkoJWVzaSkKKwlqbXAgICAgIEwobWF0Y2hfY2FzZTEpCisKKwlDRklfUFVTSAkoJWVieCkKKwlDRklfUFVTSAkoJWVzaSkKKworCS5wMmFsaWduIDQKK0woRmluZFplcm9FeGl0MTMpOgorCWFuZAkkMSA8PCAxMyAtIDEsICVlYXgKKwlqeglMKHJldHVybl92YWx1ZSkKKworCVBPUAkoJWVieCkKKwlQT1AJKCVlc2kpCisJam1wICAgICBMKG1hdGNoX2Nhc2UxKQorCisJQ0ZJX1BVU0gJKCVlYngpCisJQ0ZJX1BVU0gJKCVlc2kpCisKKwkucDJhbGlnbiA0CitMKEZpbmRaZXJvRXhpdDE0KToKKwlhbmQJJDEgPDwgMTQgLSAxLCAlZWF4CisJanoJTChyZXR1cm5fdmFsdWUpCisKKwlQT1AJKCVlYngpCisJUE9QCSglZXNpKQorCWptcCAgICAgTChtYXRjaF9jYXNlMSkKKworCUNGSV9QVVNICSglZWJ4KQorCUNGSV9QVVNICSglZXNpKQorCisJLnAyYWxpZ24gNAorTChGaW5kWmVyb0V4aXQxNSk6CisJYW5kCSQxIDw8IDE1IC0gMSwgJWVheAorCWp6CUwocmV0dXJuX3ZhbHVlKQorCisJUE9QCSglZWJ4KQorCVBPUAkoJWVzaSkKKworCS5wMmFsaWduIDQKK0wobWF0Y2hfY2FzZTEpOgorCXRlc3QJJWFoLCAlYWgKKwlqbnoJTChtYXRjaF9jYXNlMV9oaWdoKQorCW1vdgklYWwsICVkbAorCWFuZAkkMTUgPDwgNCwgJWRsCisJam56CUwobWF0Y2hfY2FzZTFfOCkKKwl0ZXN0CSQweDA4LCAlYWwKKwlqbnoJTChFeGl0NCkKKwl0ZXN0CSQweDA0LCAlYWwKKwlqbnoJTChFeGl0MykKKwl0ZXN0CSQweDAyLCAlYWwKKwlqbnoJTChFeGl0MikKKwlsZWEJLTE2KCVlZGkpLCAlZWF4CisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKG1hdGNoX2Nhc2UxXzgpOgorCXRlc3QJJDB4ODAsICVhbAorCWpueglMKEV4aXQ4KQorCXRlc3QJJDB4NDAsICVhbAorCWpueglMKEV4aXQ3KQorCXRlc3QJJDB4MjAsICVhbAorCWpueglMKEV4aXQ2KQorCWxlYQktMTIoJWVkaSksICVlYXgKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0wobWF0Y2hfY2FzZTFfaGlnaCk6CisJbW92CSVhaCwgJWRoCisJYW5kCSQxNSA8PCA0LCAlZGgKKwlqbnoJTChtYXRjaF9jYXNlMV9oaWdoXzgpCisJdGVzdAkkMHgwOCwgJWFoCisJam56CUwoRXhpdDEyKQorCXRlc3QJJDB4MDQsICVhaAorCWpueglMKEV4aXQxMSkKKwl0ZXN0CSQweDAyLCAlYWgKKwlqbnoJTChFeGl0MTApCisJbGVhCS04KCVlZGkpLCAlZWF4CisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKG1hdGNoX2Nhc2UxX2hpZ2hfOCk6CisJdGVzdAkkMHg4MCwgJWFoCisJam56CUwoRXhpdDE2KQorCXRlc3QJJDB4NDAsICVhaAorCWpueglMKEV4aXQxNSkKKwl0ZXN0CSQweDIwLCAlYWgKKwlqbnoJTChFeGl0MTQpCisJbGVhCS00KCVlZGkpLCAlZWF4CisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKEV4aXQyKToKKwlsZWEJLTE1KCVlZGkpLCAlZWF4CisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKEV4aXQzKToKKwlsZWEJLTE0KCVlZGkpLCAlZWF4CisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKEV4aXQ0KToKKwlsZWEJLTEzKCVlZGkpLCAlZWF4CisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKEV4aXQ2KToKKwlsZWEJLTExKCVlZGkpLCAlZWF4CisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKEV4aXQ3KToKKwlsZWEJLTEwKCVlZGkpLCAlZWF4CisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKEV4aXQ4KToKKwlsZWEJLTkoJWVkaSksICVlYXgKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woRXhpdDEwKToKKwlsZWEJLTcoJWVkaSksICVlYXgKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woRXhpdDExKToKKwlsZWEJLTYoJWVkaSksICVlYXgKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woRXhpdDEyKToKKwlsZWEJLTUoJWVkaSksICVlYXgKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woRXhpdDE0KToKKwlsZWEJLTMoJWVkaSksICVlYXgKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woRXhpdDE1KToKKwlsZWEJLTIoJWVkaSksICVlYXgKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woRXhpdDE2KToKKwlsZWEJLTEoJWVkaSksICVlYXgKKwlSRVRVUk4KKworLyogUmV0dXJuIE5VTEwuICAqLworCS5wMmFsaWduIDQKK0wocmV0dXJuX251bGwpOgorCXhvcgklZWF4LCAlZWF4CisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKHByb2xvZ19maW5kX3plcm8pOgorCWFkZAklZWN4LCAlZWRpCisJbW92ICAgICAlZWR4LCAlZWN4CitMKHByb2xvZ19maW5kX3plcm9fMSk6CisJdGVzdAklY2wsICVjbAorCWp6CUwocHJvbG9nX2ZpbmRfemVyb19oaWdoKQorCW1vdgklY2wsICVkbAorCWFuZAkkMTUsICVkbAorCWp6CUwocHJvbG9nX2ZpbmRfemVyb184KQorCXRlc3QJJDB4MDEsICVjbAorCWpueglMKFByb2xvZ0ZpbmRaZXJvRXhpdDEpCisJdGVzdAkkMHgwMiwgJWNsCisJam56CUwoUHJvbG9nRmluZFplcm9FeGl0MikKKwl0ZXN0CSQweDA0LCAlY2wKKwlqbnoJTChQcm9sb2dGaW5kWmVyb0V4aXQzKQorCWFuZAkkMSA8PCA0IC0gMSwgJWVheAorCWpueglMKG1hdGNoX2Nhc2UxKQorCXhvcgklZWF4LCAlZWF4CisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKHByb2xvZ19maW5kX3plcm9fOCk6CisJdGVzdAkkMHgxMCwgJWNsCisJam56CUwoUHJvbG9nRmluZFplcm9FeGl0NSkKKwl0ZXN0CSQweDIwLCAlY2wKKwlqbnoJTChQcm9sb2dGaW5kWmVyb0V4aXQ2KQorCXRlc3QJJDB4NDAsICVjbAorCWpueglMKFByb2xvZ0ZpbmRaZXJvRXhpdDcpCisJYW5kCSQxIDw8IDggLSAxLCAlZWF4CisJam56CUwobWF0Y2hfY2FzZTEpCisJeG9yCSVlYXgsICVlYXgKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0wocHJvbG9nX2ZpbmRfemVyb19oaWdoKToKKwltb3YJJWNoLCAlZGgKKwlhbmQJJDE1LCAlZGgKKwlqeglMKHByb2xvZ19maW5kX3plcm9faGlnaF84KQorCXRlc3QJJDB4MDEsICVjaAorCWpueglMKFByb2xvZ0ZpbmRaZXJvRXhpdDkpCisJdGVzdAkkMHgwMiwgJWNoCisJam56CUwoUHJvbG9nRmluZFplcm9FeGl0MTApCisJdGVzdAkkMHgwNCwgJWNoCisJam56CUwoUHJvbG9nRmluZFplcm9FeGl0MTEpCisJYW5kCSQxIDw8IDEyIC0gMSwgJWVheAorCWpueglMKG1hdGNoX2Nhc2UxKQorCXhvcgklZWF4LCAlZWF4CisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKHByb2xvZ19maW5kX3plcm9faGlnaF84KToKKwl0ZXN0CSQweDEwLCAlY2gKKwlqbnoJTChQcm9sb2dGaW5kWmVyb0V4aXQxMykKKwl0ZXN0CSQweDIwLCAlY2gKKwlqbnoJTChQcm9sb2dGaW5kWmVyb0V4aXQxNCkKKwl0ZXN0CSQweDQwLCAlY2gKKwlqbnoJTChQcm9sb2dGaW5kWmVyb0V4aXQxNSkKKwlhbmQJJDEgPDwgMTYgLSAxLCAlZWF4CisJam56CUwobWF0Y2hfY2FzZTEpCisJeG9yCSVlYXgsICVlYXgKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woUHJvbG9nRmluZFplcm9FeGl0MSk6CisJYW5kCSQxLCAlZWF4CisJam56CUwobWF0Y2hfY2FzZTEpCisJeG9yCSVlYXgsICVlYXgKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woUHJvbG9nRmluZFplcm9FeGl0Mik6CisJYW5kCSQxIDw8IDIgLSAxLCAlZWF4CisJam56CUwobWF0Y2hfY2FzZTEpCisJeG9yCSVlYXgsICVlYXgKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woUHJvbG9nRmluZFplcm9FeGl0Myk6CisJYW5kCSQxIDw8IDMgLSAxLCAlZWF4CisJam56CUwobWF0Y2hfY2FzZTEpCisJeG9yCSVlYXgsICVlYXgKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woUHJvbG9nRmluZFplcm9FeGl0NSk6CisJYW5kCSQxIDw8IDUgLSAxLCAlZWF4CisJam56CUwobWF0Y2hfY2FzZTEpCisJeG9yCSVlYXgsICVlYXgKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woUHJvbG9nRmluZFplcm9FeGl0Nik6CisJYW5kCSQxIDw8IDYgLSAxLCAlZWF4CisJam56CUwobWF0Y2hfY2FzZTEpCisJeG9yCSVlYXgsICVlYXgKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woUHJvbG9nRmluZFplcm9FeGl0Nyk6CisJYW5kCSQxIDw8IDcgLSAxLCAlZWF4CisJam56CUwobWF0Y2hfY2FzZTEpCisJeG9yCSVlYXgsICVlYXgKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woUHJvbG9nRmluZFplcm9FeGl0OSk6CisJYW5kCSQxIDw8IDkgLSAxLCAlZWF4CisJam56CUwobWF0Y2hfY2FzZTEpCisJeG9yCSVlYXgsICVlYXgKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woUHJvbG9nRmluZFplcm9FeGl0MTApOgorCWFuZAkkMSA8PCAxMCAtIDEsICVlYXgKKwlqbnoJTChtYXRjaF9jYXNlMSkKKwl4b3IJJWVheCwgJWVheAorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChQcm9sb2dGaW5kWmVyb0V4aXQxMSk6CisJYW5kCSQxIDw8IDExIC0gMSwgJWVheAorCWpueglMKG1hdGNoX2Nhc2UxKQorCXhvcgklZWF4LCAlZWF4CisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKFByb2xvZ0ZpbmRaZXJvRXhpdDEzKToKKwlhbmQJJDEgPDwgMTMgLSAxLCAlZWF4CisJam56CUwobWF0Y2hfY2FzZTEpCisJeG9yCSVlYXgsICVlYXgKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woUHJvbG9nRmluZFplcm9FeGl0MTQpOgorCWFuZAkkMSA8PCAxNCAtIDEsICVlYXgKKwlqbnoJTChtYXRjaF9jYXNlMSkKKwl4b3IJJWVheCwgJWVheAorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChQcm9sb2dGaW5kWmVyb0V4aXQxNSk6CisJYW5kCSQxIDw8IDE1IC0gMSwgJWVheAorCWpueglMKG1hdGNoX2Nhc2UxKQorCXhvcgklZWF4LCAlZWF4CisJUkVUVVJOCisKK0VORCAoc3RycmNocikKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3RyaW5nL3NzZTItd2NzY2hyLWF0b20uUyBiL2xpYmMvYXJjaC14ODYvc3RyaW5nL3NzZTItd2NzY2hyLWF0b20uUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MjkzMDJiCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9zdHJpbmcvc3NlMi13Y3NjaHItYXRvbS5TCkBAIC0wLDAgKzEsMjY3IEBACisvKgorQ29weXJpZ2h0IChjKSAyMDExIEludGVsIENvcnBvcmF0aW9uCitBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgICAgKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgICAgKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgICAgKiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKworICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBJbnRlbCBDb3Jwb3JhdGlvbiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAgICAqIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICAgICogd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKK0FOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECitXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCitESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCitBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyhJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKK0xPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyhJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCitTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisKKyNpZm5kZWYgTAorIyBkZWZpbmUgTChsYWJlbCkJLkwjI2xhYmVsCisjZW5kaWYKKworI2lmbmRlZiBjZmlfc3RhcnRwcm9jCisjIGRlZmluZSBjZmlfc3RhcnRwcm9jCS5jZmlfc3RhcnRwcm9jCisjZW5kaWYKKworI2lmbmRlZiBjZmlfZW5kcHJvYworIyBkZWZpbmUgY2ZpX2VuZHByb2MJLmNmaV9lbmRwcm9jCisjZW5kaWYKKworI2lmbmRlZiBjZmlfcmVsX29mZnNldAorIyBkZWZpbmUgY2ZpX3JlbF9vZmZzZXQocmVnLCBvZmYpCS5jZmlfcmVsX29mZnNldCByZWcsIG9mZgorI2VuZGlmCisKKyNpZm5kZWYgY2ZpX3Jlc3RvcmUKKyMgZGVmaW5lIGNmaV9yZXN0b3JlKHJlZykJLmNmaV9yZXN0b3JlIHJlZworI2VuZGlmCisKKyNpZm5kZWYgY2ZpX2FkanVzdF9jZmFfb2Zmc2V0CisjIGRlZmluZSBjZmlfYWRqdXN0X2NmYV9vZmZzZXQob2ZmKQkuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IG9mZgorI2VuZGlmCisKKyNpZm5kZWYgRU5UUlkKKyMgZGVmaW5lIEVOVFJZKG5hbWUpCVwKKwkudHlwZSBuYW1lLCAgQGZ1bmN0aW9uOwlcCisJLmdsb2JsIG5hbWU7CVwKKwkucDJhbGlnbiA0OwlcCituYW1lOglcCisJY2ZpX3N0YXJ0cHJvYworI2VuZGlmCisKKyNpZm5kZWYgRU5ECisjIGRlZmluZSBFTkQobmFtZSkJXAorCWNmaV9lbmRwcm9jOwlcCisJLnNpemUgbmFtZSwJLi1uYW1lCisjZW5kaWYKKworI2RlZmluZSBDRklfUFVTSChSRUcpCVwKKwljZmlfYWRqdXN0X2NmYV9vZmZzZXQgKDQpOwlcCisJY2ZpX3JlbF9vZmZzZXQgKFJFRywgMCkKKworI2RlZmluZSBDRklfUE9QKFJFRykJXAorCWNmaV9hZGp1c3RfY2ZhX29mZnNldCAoLTQpOwlcCisJY2ZpX3Jlc3RvcmUgKFJFRykKKworI2RlZmluZSBQVVNIKFJFRykJcHVzaGwgUkVHOyBDRklfUFVTSCAoUkVHKQorI2RlZmluZSBQT1AoUkVHKQlwb3BsIFJFRzsgQ0ZJX1BPUCAoUkVHKQorCisjZGVmaW5lIFBBUk1TCTQKKworCisjZGVmaW5lIFNUUjEgIFBBUk1TCisjZGVmaW5lIFNUUjIgIFNUUjErNAorCisJLnRleHQKK0VOVFJZICh3Y3NjaHIpCisKKwltb3YJU1RSMSglZXNwKSwgJWVjeAorCW1vdmQJU1RSMiglZXNwKSwgJXhtbTEKKworCW1vdgklZWN4LCAlZWF4CisJcHVucGNrbGRxICV4bW0xLCAleG1tMQorCXB4b3IJJXhtbTIsICV4bW0yCisJcHVucGNrbGRxICV4bW0xLCAleG1tMQorCisJYW5kCSQ2MywgJWVheAorCWNtcAkkNDgsICVlYXgKKwlqYQlMKGNyb3NzX2NhY2hlKQorCisJbW92ZHF1CSglZWN4KSwgJXhtbTAKKwlwY21wZXFkCSV4bW0wLCAleG1tMgorCXBjbXBlcWQJJXhtbTEsICV4bW0wCisJcG1vdm1za2IgJXhtbTIsICVlZHgKKwlwbW92bXNrYiAleG1tMCwgJWVheAorCW9yCSVlYXgsICVlZHgKKwlqbnoJTChtYXRjaGVzKQorCWFuZAkkLTE2LCAlZWN4CisJam1wCUwobG9vcCkKKworCS5wMmFsaWduIDQKK0woY3Jvc3NfY2FjaGUpOgorCVBVU0gJKCVlZGkpCisJbW92CSVlY3gsICVlZGkKKwltb3YJJWVheCwgJWVjeAorCWFuZAkkLTE2LCAlZWRpCisJYW5kCSQxNSwgJWVjeAorCW1vdmRxYQkoJWVkaSksICV4bW0wCisJcGNtcGVxZAkleG1tMCwgJXhtbTIKKwlwY21wZXFkCSV4bW0xLCAleG1tMAorCXBtb3Ztc2tiICV4bW0yLCAlZWR4CisJcG1vdm1za2IgJXhtbTAsICVlYXgKKworCXNhcmwJJWNsLCAlZWR4CisJc2FybAklY2wsICVlYXgKKwl0ZXN0CSVlYXgsICVlYXgKKwlqeglMKHVuYWxpZ25lZF9ub19tYXRjaCkKKworCWFkZAklZWRpLCAlZWN4CisJUE9QCSglZWRpKQorCisJdGVzdAklZWR4LCAlZWR4CisJanoJTChtYXRjaF9jYXNlMSkKKwl0ZXN0CSVhbCwgJWFsCisJanoJTChtYXRjaF9oaWd0aF9jYXNlMikKKwl0ZXN0CSQxNSwgJWFsCisJam56CUwobWF0Y2hfY2FzZTJfNCkKKwl0ZXN0CSQxNSwgJWRsCisJam56CUwocmV0dXJuX251bGwpCisJbGVhCTQoJWVjeCksICVlYXgKKwlyZXQKKworCUNGSV9QVVNIICglZWRpKQorCisJLnAyYWxpZ24gNAorTCh1bmFsaWduZWRfbm9fbWF0Y2gpOgorCW1vdgklZWRpLCAlZWN4CisJUE9QCSglZWRpKQorCisJdGVzdAklZWR4LCAlZWR4CisJam56CUwocmV0dXJuX251bGwpCisKKwlweG9yCSV4bW0yLCAleG1tMgorCisvKiBMb29wIHN0YXJ0IG9uIGFsaWduZWQgc3RyaW5nLiAgKi8KKwkucDJhbGlnbiA0CitMKGxvb3ApOgorCWFkZAkkMTYsICVlY3gKKwltb3ZkcWEJKCVlY3gpLCAleG1tMAorCXBjbXBlcWQJJXhtbTAsICV4bW0yCisJcGNtcGVxZAkleG1tMSwgJXhtbTAKKwlwbW92bXNrYiAleG1tMiwgJWVkeAorCXBtb3Ztc2tiICV4bW0wLCAlZWF4CisJb3IJJWVheCwgJWVkeAorCWpueglMKG1hdGNoZXMpCisJYWRkCSQxNiwgJWVjeAorCisJbW92ZHFhCSglZWN4KSwgJXhtbTAKKwlwY21wZXFkCSV4bW0wLCAleG1tMgorCXBjbXBlcWQJJXhtbTEsICV4bW0wCisJcG1vdm1za2IgJXhtbTIsICVlZHgKKwlwbW92bXNrYiAleG1tMCwgJWVheAorCW9yCSVlYXgsICVlZHgKKwlqbnoJTChtYXRjaGVzKQorCWFkZAkkMTYsICVlY3gKKworCW1vdmRxYQkoJWVjeCksICV4bW0wCisJcGNtcGVxZAkleG1tMCwgJXhtbTIKKwlwY21wZXFkCSV4bW0xLCAleG1tMAorCXBtb3Ztc2tiICV4bW0yLCAlZWR4CisJcG1vdm1za2IgJXhtbTAsICVlYXgKKwlvcgklZWF4LCAlZWR4CisJam56CUwobWF0Y2hlcykKKwlhZGQJJDE2LCAlZWN4CisKKwltb3ZkcWEJKCVlY3gpLCAleG1tMAorCXBjbXBlcWQJJXhtbTAsICV4bW0yCisJcGNtcGVxZAkleG1tMSwgJXhtbTAKKwlwbW92bXNrYiAleG1tMiwgJWVkeAorCXBtb3Ztc2tiICV4bW0wLCAlZWF4CisJb3IJJWVheCwgJWVkeAorCWp6CUwobG9vcCkKKworCS5wMmFsaWduIDQKK0wobWF0Y2hlcyk6CisJcG1vdm1za2IgJXhtbTIsICVlZHgKKwl0ZXN0CSVlYXgsICVlYXgKKwlqeglMKHJldHVybl9udWxsKQorCXRlc3QJJWVkeCwgJWVkeAorCWp6CUwobWF0Y2hfY2FzZTEpCisKKwkucDJhbGlnbiA0CitMKG1hdGNoX2Nhc2UyKToKKwl0ZXN0CSVhbCwgJWFsCisJanoJTChtYXRjaF9oaWd0aF9jYXNlMikKKwl0ZXN0CSQxNSwgJWFsCisJam56CUwobWF0Y2hfY2FzZTJfNCkKKwl0ZXN0CSQxNSwgJWRsCisJam56CUwocmV0dXJuX251bGwpCisJbGVhCTQoJWVjeCksICVlYXgKKwlyZXQKKworCS5wMmFsaWduIDQKK0wobWF0Y2hfY2FzZTJfNCk6CisJbW92CSVlY3gsICVlYXgKKwlyZXQKKworCS5wMmFsaWduIDQKK0wobWF0Y2hfaGlndGhfY2FzZTIpOgorCXRlc3QJJWRsLCAlZGwKKwlqbnoJTChyZXR1cm5fbnVsbCkKKwl0ZXN0CSQxNSwgJWFoCisJam56CUwobWF0Y2hfY2FzZTJfMTIpCisJdGVzdAkkMTUsICVkaAorCWpueglMKHJldHVybl9udWxsKQorCWxlYQkxMiglZWN4KSwgJWVheAorCXJldAorCisJLnAyYWxpZ24gNAorTChtYXRjaF9jYXNlMl8xMik6CisJbGVhCTgoJWVjeCksICVlYXgKKwlyZXQKKworCS5wMmFsaWduIDQKK0wobWF0Y2hfY2FzZTEpOgorCXRlc3QJJWFsLCAlYWwKKwlqeglMKG1hdGNoX2hpZ3RoX2Nhc2UxKQorCisJdGVzdAkkMHgwMSwgJWFsCisJam56CUwoZXhpdDApCisJbGVhCTQoJWVjeCksICVlYXgKKwlyZXQKKworCS5wMmFsaWduIDQKK0wobWF0Y2hfaGlndGhfY2FzZTEpOgorCXRlc3QJJDB4MDEsICVhaAorCWpueglMKGV4aXQzKQorCWxlYQkxMiglZWN4KSwgJWVheAorCXJldAorCisJLnAyYWxpZ24gNAorTChleGl0MCk6CisJbW92CSVlY3gsICVlYXgKKwlyZXQKKworCS5wMmFsaWduIDQKK0woZXhpdDMpOgorCWxlYQk4KCVlY3gpLCAlZWF4CisJcmV0CisKKwkucDJhbGlnbiA0CitMKHJldHVybl9udWxsKToKKwl4b3IJJWVheCwgJWVheAorCXJldAorCitFTkQgKHdjc2NocikKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3RyaW5nL3NzZTItd2NzY21wLWF0b20uUyBiL2xpYmMvYXJjaC14ODYvc3RyaW5nL3NzZTItd2NzY21wLWF0b20uUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ODY3ZDI4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9zdHJpbmcvc3NlMi13Y3NjbXAtYXRvbS5TCkBAIC0wLDAgKzEsMTA2MiBAQAorLyoKK0NvcHlyaWdodCAoYykgMjAxMSBJbnRlbCBDb3Jwb3JhdGlvbgorQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKworICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICAgICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKworICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICAgICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorICAgICogYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisKKyAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgSW50ZWwgQ29ycG9yYXRpb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgICAgKiBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAgICAqIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECitBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CitMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KK0FOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqLworCisjaWZuZGVmIEwKKyMgZGVmaW5lIEwobGFiZWwpCS5MIyNsYWJlbAorI2VuZGlmCisKKyNpZm5kZWYgY2ZpX3N0YXJ0cHJvYworIyBkZWZpbmUgY2ZpX3N0YXJ0cHJvYwkuY2ZpX3N0YXJ0cHJvYworI2VuZGlmCisKKyNpZm5kZWYgY2ZpX2VuZHByb2MKKyMgZGVmaW5lIGNmaV9lbmRwcm9jCS5jZmlfZW5kcHJvYworI2VuZGlmCisKKyNpZm5kZWYgY2ZpX3JlbF9vZmZzZXQKKyMgZGVmaW5lIGNmaV9yZWxfb2Zmc2V0KHJlZywgb2ZmKQkuY2ZpX3JlbF9vZmZzZXQgcmVnLCBvZmYKKyNlbmRpZgorCisjaWZuZGVmIGNmaV9yZXN0b3JlCisjIGRlZmluZSBjZmlfcmVzdG9yZShyZWcpCS5jZmlfcmVzdG9yZSByZWcKKyNlbmRpZgorCisjaWZuZGVmIGNmaV9hZGp1c3RfY2ZhX29mZnNldAorIyBkZWZpbmUgY2ZpX2FkanVzdF9jZmFfb2Zmc2V0KG9mZikJLmNmaV9hZGp1c3RfY2ZhX29mZnNldCBvZmYKKyNlbmRpZgorCisjaWZuZGVmIEVOVFJZCisjIGRlZmluZSBFTlRSWShuYW1lKQlcCisJLnR5cGUgbmFtZSwgQGZ1bmN0aW9uOwlcCisJLmdsb2JsIG5hbWU7CVwKKwkucDJhbGlnbiA0OwlcCituYW1lOglcCisJY2ZpX3N0YXJ0cHJvYworI2VuZGlmCisKKyNpZm5kZWYgRU5ECisjIGRlZmluZSBFTkQobmFtZSkJXAorCWNmaV9lbmRwcm9jOwlcCisJLnNpemUgbmFtZSwgLi1uYW1lCisjZW5kaWYKKworI2RlZmluZSBDRklfUFVTSChSRUcpCVwKKwljZmlfYWRqdXN0X2NmYV9vZmZzZXQgKDQpOwlcCisJY2ZpX3JlbF9vZmZzZXQgKFJFRywgMCkKKworI2RlZmluZSBDRklfUE9QKFJFRykJXAorCWNmaV9hZGp1c3RfY2ZhX29mZnNldCAoLTQpOwlcCisJY2ZpX3Jlc3RvcmUgKFJFRykKKworI2RlZmluZSBQVVNIKFJFRykgcHVzaGwgUkVHOyBDRklfUFVTSCAoUkVHKQorI2RlZmluZSBQT1AoUkVHKSBwb3BsIFJFRzsgQ0ZJX1BPUCAoUkVHKQorCisjZGVmaW5lIEVOVFJBTkNFIFBVU0goJWVzaSk7IFBVU0goJWVkaSkKKyNkZWZpbmUgUkVUVVJOICBQT1AoJWVkaSk7IFBPUCglZXNpKTsgcmV0OyBDRklfUFVTSCglZXNpKTsgQ0ZJX1BVU0goJWVkaSk7CisjZGVmaW5lIFBBUk1TICA0CisjZGVmaW5lIFNUUjEgIFBBUk1TCisjZGVmaW5lIFNUUjIgIFNUUjErNAorCisJLnRleHQKK0VOVFJZICh3Y3NjbXApCisvKgorCSogVGhpcyBpbXBsZW1lbnRhdGlvbiB1c2VzIFNTRSB0byBjb21wYXJlIHVwIHRvIDE2IGJ5dGVzIGF0IGEgdGltZS4KKyovCisJbW92CVNUUjEoJWVzcCksICVlZHgKKwltb3YJU1RSMiglZXNwKSwgJWVheAorCisJbW92CSglZWF4KSwgJWVjeAorCWNtcAklZWN4LCAoJWVkeCkKKwlqbmUJTChuZXEpCisJdGVzdAklZWN4LCAlZWN4CisJanoJTChlcSkKKworCW1vdgk0KCVlYXgpLCAlZWN4CisJY21wCSVlY3gsIDQoJWVkeCkKKwlqbmUJTChuZXEpCisJdGVzdAklZWN4LCAlZWN4CisJanoJTChlcSkKKworCW1vdgk4KCVlYXgpLCAlZWN4CisJY21wCSVlY3gsIDgoJWVkeCkKKwlqbmUJTChuZXEpCisJdGVzdAklZWN4LCAlZWN4CisJanoJTChlcSkKKworCW1vdgkxMiglZWF4KSwgJWVjeAorCWNtcAklZWN4LCAxMiglZWR4KQorCWpuZQlMKG5lcSkKKwl0ZXN0CSVlY3gsICVlY3gKKwlqeglMKGVxKQorCisJRU5UUkFOQ0UKKwlhZGQJJDE2LCAlZWF4CisJYWRkCSQxNiwgJWVkeAorCisJbW92CSVlYXgsICVlc2kKKwltb3YJJWVkeCwgJWVkaQorCXB4b3IJJXhtbTAsICV4bW0wCQkvKiBjbGVhciAleG1tMCBmb3IgbnVsbCBjaGFyIGNoZWNrcyAqLworCW1vdgklYWwsICVjaAorCW1vdgklZGwsICVjbAorCWFuZAkkNjMsICVlYXgJCS8qIGVzaSBhbGlnbm1lbnQgaW4gY2FjaGUgbGluZSAqLworCWFuZAkkNjMsICVlZHgJCS8qIGVkaSBhbGlnbm1lbnQgaW4gY2FjaGUgbGluZSAqLworCWFuZAkkMTUsICVjbAorCWp6CUwoY29udGludWVfMDApCisJY21wCSQxNiwgJWVkeAorCWpiCUwoY29udGludWVfMCkKKwljbXAJJDMyLCAlZWR4CisJamIJTChjb250aW51ZV8xNikKKwljbXAJJDQ4LCAlZWR4CisJamIJTChjb250aW51ZV8zMikKKworTChjb250aW51ZV80OCk6CisJYW5kCSQxNSwgJWNoCisJanoJTChjb250aW51ZV80OF8wMCkKKwljbXAJJDE2LCAlZWF4CisJamIJTChjb250aW51ZV8wXzQ4KQorCWNtcAkkMzIsICVlYXgKKwlqYglMKGNvbnRpbnVlXzE2XzQ4KQorCWNtcAkkNDgsICVlYXgKKwlqYglMKGNvbnRpbnVlXzMyXzQ4KQorCisJLnAyYWxpZ24gNAorTChjb250aW51ZV80OF80OCk6CisJbW92CSglZXNpKSwgJWVjeAorCWNtcAklZWN4LCAoJWVkaSkKKwlqbmUJTChuZXF1YWwpCisJdGVzdAklZWN4LCAlZWN4CisJanoJTChlcXVhbCkKKworCW1vdgk0KCVlc2kpLCAlZWN4CisJY21wCSVlY3gsIDQoJWVkaSkKKwlqbmUJTChuZXF1YWwpCisJdGVzdAklZWN4LCAlZWN4CisJanoJTChlcXVhbCkKKworCW1vdgk4KCVlc2kpLCAlZWN4CisJY21wCSVlY3gsIDgoJWVkaSkKKwlqbmUJTChuZXF1YWwpCisJdGVzdAklZWN4LCAlZWN4CisJanoJTChlcXVhbCkKKworCW1vdgkxMiglZXNpKSwgJWVjeAorCWNtcAklZWN4LCAxMiglZWRpKQorCWpuZQlMKG5lcXVhbCkKKwl0ZXN0CSVlY3gsICVlY3gKKwlqeglMKGVxdWFsKQorCisJbW92ZHF1CTE2KCVlZGkpLCAleG1tMQorCW1vdmRxdQkxNiglZXNpKSwgJXhtbTIKKwlwY21wZXFkCSV4bW0xLCAleG1tMAkJLyogQW55IG51bGwgZG91YmxlX3dvcmQ/ICovCisJcGNtcGVxZAkleG1tMiwgJXhtbTEJCS8qIGNvbXBhcmUgZmlyc3QgNCBkb3VibGVfd29yZHMgZm9yIGVxdWFsaXR5ICovCisJcHN1YmIJJXhtbTAsICV4bW0xCQkvKiBwYWNrZWQgc3ViIG9mIGNvbXBhcmlzb24gcmVzdWx0cyovCisJcG1vdm1za2IgJXhtbTEsICVlZHgKKwlzdWIJJDB4ZmZmZiwgJWVkeAkJLyogaWYgZmlyc3QgNCBkb3VibGVfd29yZHMgYXJlIHNhbWUsIGVkeCA9PSAweGZmZmYgKi8KKwlqbnoJTChsZXNzNF9kb3VibGVfd29yZHNfMTYpCisKKwltb3ZkcXUJMzIoJWVkaSksICV4bW0xCisJbW92ZHF1CTMyKCVlc2kpLCAleG1tMgorCXBjbXBlcWQJJXhtbTEsICV4bW0wCQkvKiBBbnkgbnVsbCBkb3VibGVfd29yZD8gKi8KKwlwY21wZXFkCSV4bW0yLCAleG1tMQkJLyogY29tcGFyZSBmaXJzdCA0IGRvdWJsZV93b3JkcyBmb3IgZXF1YWxpdHkgKi8KKwlwc3ViYgkleG1tMCwgJXhtbTEJCS8qIHBhY2tlZCBzdWIgb2YgY29tcGFyaXNvbiByZXN1bHRzKi8KKwlwbW92bXNrYiAleG1tMSwgJWVkeAorCXN1YgkkMHhmZmZmLCAlZWR4CQkvKiBpZiBmaXJzdCA0IGRvdWJsZV93b3JkcyBhcmUgc2FtZSwgZWR4ID09IDB4ZmZmZiAqLworCWpueglMKGxlc3M0X2RvdWJsZV93b3Jkc18zMikKKworCW1vdmRxdQk0OCglZWRpKSwgJXhtbTEKKwltb3ZkcXUJNDgoJWVzaSksICV4bW0yCisJcGNtcGVxZAkleG1tMSwgJXhtbTAJCS8qIEFueSBudWxsIGRvdWJsZV93b3JkPyAqLworCXBjbXBlcWQJJXhtbTIsICV4bW0xCQkvKiBjb21wYXJlIGZpcnN0IDQgZG91YmxlX3dvcmRzIGZvciBlcXVhbGl0eSAqLworCXBzdWJiCSV4bW0wLCAleG1tMQkJLyogcGFja2VkIHN1YiBvZiBjb21wYXJpc29uIHJlc3VsdHMqLworCXBtb3Ztc2tiICV4bW0xLCAlZWR4CisJc3ViCSQweGZmZmYsICVlZHgJCS8qIGlmIGZpcnN0IDQgZG91YmxlX3dvcmRzIGFyZSBzYW1lLCBlZHggPT0gMHhmZmZmICovCisJam56CUwobGVzczRfZG91YmxlX3dvcmRzXzQ4KQorCisJYWRkCSQ2NCwgJWVzaQorCWFkZAkkNjQsICVlZGkKKwlqbXAJTChjb250aW51ZV80OF80OCkKKworTChjb250aW51ZV8wKToKKwlhbmQJJDE1LCAlY2gKKwlqeglMKGNvbnRpbnVlXzBfMDApCisJY21wCSQxNiwgJWVheAorCWpiCUwoY29udGludWVfMF8wKQorCWNtcAkkMzIsICVlYXgKKwlqYglMKGNvbnRpbnVlXzBfMTYpCisJY21wCSQ0OCwgJWVheAorCWpiCUwoY29udGludWVfMF8zMikKKworCS5wMmFsaWduIDQKK0woY29udGludWVfMF80OCk6CisJbW92CSglZXNpKSwgJWVjeAorCWNtcAklZWN4LCAoJWVkaSkKKwlqbmUJTChuZXF1YWwpCisJdGVzdAklZWN4LCAlZWN4CisJanoJTChlcXVhbCkKKworCW1vdgk0KCVlc2kpLCAlZWN4CisJY21wCSVlY3gsIDQoJWVkaSkKKwlqbmUJTChuZXF1YWwpCisJdGVzdAklZWN4LCAlZWN4CisJanoJTChlcXVhbCkKKworCW1vdgk4KCVlc2kpLCAlZWN4CisJY21wCSVlY3gsIDgoJWVkaSkKKwlqbmUJTChuZXF1YWwpCisJdGVzdAklZWN4LCAlZWN4CisJanoJTChlcXVhbCkKKworCW1vdgkxMiglZXNpKSwgJWVjeAorCWNtcAklZWN4LCAxMiglZWRpKQorCWpuZQlMKG5lcXVhbCkKKwl0ZXN0CSVlY3gsICVlY3gKKwlqeglMKGVxdWFsKQorCisJbW92ZHF1CTE2KCVlZGkpLCAleG1tMQorCW1vdmRxdQkxNiglZXNpKSwgJXhtbTIKKwlwY21wZXFkCSV4bW0xLCAleG1tMAkJLyogQW55IG51bGwgZG91YmxlX3dvcmQ/ICovCisJcGNtcGVxZAkleG1tMiwgJXhtbTEJCS8qIGNvbXBhcmUgZmlyc3QgNCBkb3VibGVfd29yZHMgZm9yIGVxdWFsaXR5ICovCisJcHN1YmIJJXhtbTAsICV4bW0xCQkvKiBwYWNrZWQgc3ViIG9mIGNvbXBhcmlzb24gcmVzdWx0cyovCisJcG1vdm1za2IgJXhtbTEsICVlZHgKKwlzdWIJJDB4ZmZmZiwgJWVkeAkJLyogaWYgZmlyc3QgNCBkb3VibGVfd29yZHMgYXJlIHNhbWUsIGVkeCA9PSAweGZmZmYgKi8KKwlqbnoJTChsZXNzNF9kb3VibGVfd29yZHNfMTYpCisKKwltb3ZkcXUJMzIoJWVkaSksICV4bW0xCisJbW92ZHF1CTMyKCVlc2kpLCAleG1tMgorCXBjbXBlcWQJJXhtbTEsICV4bW0wCQkvKiBBbnkgbnVsbCBkb3VibGVfd29yZD8gKi8KKwlwY21wZXFkCSV4bW0yLCAleG1tMQkJLyogY29tcGFyZSBmaXJzdCA0IGRvdWJsZV93b3JkcyBmb3IgZXF1YWxpdHkgKi8KKwlwc3ViYgkleG1tMCwgJXhtbTEJCS8qIHBhY2tlZCBzdWIgb2YgY29tcGFyaXNvbiByZXN1bHRzKi8KKwlwbW92bXNrYiAleG1tMSwgJWVkeAorCXN1YgkkMHhmZmZmLCAlZWR4CQkvKiBpZiBmaXJzdCA0IGRvdWJsZV93b3JkcyBhcmUgc2FtZSwgZWR4ID09IDB4ZmZmZiAqLworCWpueglMKGxlc3M0X2RvdWJsZV93b3Jkc18zMikKKworCW1vdgk0OCglZXNpKSwgJWVjeAorCWNtcAklZWN4LCA0OCglZWRpKQorCWpuZQlMKG5lcXVhbCkKKwl0ZXN0CSVlY3gsICVlY3gKKwlqeglMKGVxdWFsKQorCisJbW92CTUyKCVlc2kpLCAlZWN4CisJY21wCSVlY3gsIDUyKCVlZGkpCisJam5lCUwobmVxdWFsKQorCXRlc3QJJWVjeCwgJWVjeAorCWp6CUwoZXF1YWwpCisKKwltb3YJNTYoJWVzaSksICVlY3gKKwljbXAJJWVjeCwgNTYoJWVkaSkKKwlqbmUJTChuZXF1YWwpCisJdGVzdAklZWN4LCAlZWN4CisJanoJTChlcXVhbCkKKworCW1vdgk2MCglZXNpKSwgJWVjeAorCWNtcAklZWN4LCA2MCglZWRpKQorCWpuZQlMKG5lcXVhbCkKKwl0ZXN0CSVlY3gsICVlY3gKKwlqeglMKGVxdWFsKQorCisJYWRkCSQ2NCwgJWVzaQorCWFkZAkkNjQsICVlZGkKKwlqbXAJTChjb250aW51ZV8wXzQ4KQorCisJLnAyYWxpZ24gNAorTChjb250aW51ZV8wMCk6CisJYW5kCSQxNSwgJWNoCisJanoJTChjb250aW51ZV8wMF8wMCkKKwljbXAJJDE2LCAlZWF4CisJamIJTChjb250aW51ZV8wMF8wKQorCWNtcAkkMzIsICVlYXgKKwlqYglMKGNvbnRpbnVlXzAwXzE2KQorCWNtcAkkNDgsICVlYXgKKwlqYglMKGNvbnRpbnVlXzAwXzMyKQorCisJLnAyYWxpZ24gNAorTChjb250aW51ZV8wMF80OCk6CisJcGNtcGVxZAkoJWVkaSksICV4bW0wCisJbW92CSglZWRpKSwgJWVheAorCXBtb3Ztc2tiICV4bW0wLCAlZWN4CisJdGVzdAklZWN4LCAlZWN4CisJam56CUwobGVzczRfZG91YmxlX3dvcmRzMSkKKworCWNtcAkoJWVzaSksICVlYXgKKwlqbmUJTChuZXF1YWwpCisKKwltb3YJNCglZWRpKSwgJWVheAorCWNtcAk0KCVlc2kpLCAlZWF4CisJam5lCUwobmVxdWFsKQorCisJbW92CTgoJWVkaSksICVlYXgKKwljbXAJOCglZXNpKSwgJWVheAorCWpuZQlMKG5lcXVhbCkKKworCW1vdgkxMiglZWRpKSwgJWVheAorCWNtcAkxMiglZXNpKSwgJWVheAorCWpuZQlMKG5lcXVhbCkKKworCW1vdmRxdQkxNiglZXNpKSwgJXhtbTIKKwlwY21wZXFkCSV4bW0yLCAleG1tMAkJLyogQW55IG51bGwgZG91YmxlX3dvcmQ/ICovCisJcGNtcGVxZAkxNiglZWRpKSwgJXhtbTIJCS8qIGNvbXBhcmUgZmlyc3QgNCBkb3VibGVfd29yZHMgZm9yIGVxdWFsaXR5ICovCisJcHN1YmIJJXhtbTAsICV4bW0yCQkvKiBwYWNrZWQgc3ViIG9mIGNvbXBhcmlzb24gcmVzdWx0cyovCisJcG1vdm1za2IgJXhtbTIsICVlZHgKKwlzdWIJJDB4ZmZmZiwgJWVkeAkJLyogaWYgZmlyc3QgNCBkb3VibGVfd29yZHMgYXJlIHNhbWUsIGVkeCA9PSAweGZmZmYgKi8KKwlqbnoJTChsZXNzNF9kb3VibGVfd29yZHNfMTYpCisKKwltb3ZkcXUJMzIoJWVzaSksICV4bW0yCisJcGNtcGVxZAkleG1tMiwgJXhtbTAJCS8qIEFueSBudWxsIGRvdWJsZV93b3JkPyAqLworCXBjbXBlcWQJMzIoJWVkaSksICV4bW0yCQkvKiBjb21wYXJlIGZpcnN0IDQgZG91YmxlX3dvcmRzIGZvciBlcXVhbGl0eSAqLworCXBzdWJiCSV4bW0wLCAleG1tMgkJLyogcGFja2VkIHN1YiBvZiBjb21wYXJpc29uIHJlc3VsdHMqLworCXBtb3Ztc2tiICV4bW0yLCAlZWR4CisJc3ViCSQweGZmZmYsICVlZHgJCS8qIGlmIGZpcnN0IDQgZG91YmxlX3dvcmRzIGFyZSBzYW1lLCBlZHggPT0gMHhmZmZmICovCisJam56CUwobGVzczRfZG91YmxlX3dvcmRzXzMyKQorCisJbW92ZHF1CTQ4KCVlc2kpLCAleG1tMgorCXBjbXBlcWQJJXhtbTIsICV4bW0wCQkvKiBBbnkgbnVsbCBkb3VibGVfd29yZD8gKi8KKwlwY21wZXFkCTQ4KCVlZGkpLCAleG1tMgkJLyogY29tcGFyZSBmaXJzdCA0IGRvdWJsZV93b3JkcyBmb3IgZXF1YWxpdHkgKi8KKwlwc3ViYgkleG1tMCwgJXhtbTIJCS8qIHBhY2tlZCBzdWIgb2YgY29tcGFyaXNvbiByZXN1bHRzKi8KKwlwbW92bXNrYiAleG1tMiwgJWVkeAorCXN1YgkkMHhmZmZmLCAlZWR4CQkvKiBpZiBmaXJzdCA0IGRvdWJsZV93b3JkcyBhcmUgc2FtZSwgZWR4ID09IDB4ZmZmZiAqLworCWpueglMKGxlc3M0X2RvdWJsZV93b3Jkc180OCkKKworCWFkZAkkNjQsICVlc2kKKwlhZGQJJDY0LCAlZWRpCisJam1wCUwoY29udGludWVfMDBfNDgpCisKKwkucDJhbGlnbiA0CitMKGNvbnRpbnVlXzMyKToKKwlhbmQJJDE1LCAlY2gKKwlqeglMKGNvbnRpbnVlXzMyXzAwKQorCWNtcAkkMTYsICVlYXgKKwlqYglMKGNvbnRpbnVlXzBfMzIpCisJY21wCSQzMiwgJWVheAorCWpiCUwoY29udGludWVfMTZfMzIpCisJY21wCSQ0OCwgJWVheAorCWpiCUwoY29udGludWVfMzJfMzIpCisKKwkucDJhbGlnbiA0CitMKGNvbnRpbnVlXzMyXzQ4KToKKwltb3YJKCVlc2kpLCAlZWN4CisJY21wCSVlY3gsICglZWRpKQorCWpuZQlMKG5lcXVhbCkKKwl0ZXN0CSVlY3gsICVlY3gKKwlqeglMKGVxdWFsKQorCisJbW92CTQoJWVzaSksICVlY3gKKwljbXAJJWVjeCwgNCglZWRpKQorCWpuZQlMKG5lcXVhbCkKKwl0ZXN0CSVlY3gsICVlY3gKKwlqeglMKGVxdWFsKQorCisJbW92CTgoJWVzaSksICVlY3gKKwljbXAJJWVjeCwgOCglZWRpKQorCWpuZQlMKG5lcXVhbCkKKwl0ZXN0CSVlY3gsICVlY3gKKwlqeglMKGVxdWFsKQorCisJbW92CTEyKCVlc2kpLCAlZWN4CisJY21wCSVlY3gsIDEyKCVlZGkpCisJam5lCUwobmVxdWFsKQorCXRlc3QJJWVjeCwgJWVjeAorCWp6CUwoZXF1YWwpCisKKwltb3YJMTYoJWVzaSksICVlY3gKKwljbXAJJWVjeCwgMTYoJWVkaSkKKwlqbmUJTChuZXF1YWwpCisJdGVzdAklZWN4LCAlZWN4CisJanoJTChlcXVhbCkKKworCW1vdgkyMCglZXNpKSwgJWVjeAorCWNtcAklZWN4LCAyMCglZWRpKQorCWpuZQlMKG5lcXVhbCkKKwl0ZXN0CSVlY3gsICVlY3gKKwlqeglMKGVxdWFsKQorCisJbW92CTI0KCVlc2kpLCAlZWN4CisJY21wCSVlY3gsIDI0KCVlZGkpCisJam5lCUwobmVxdWFsKQorCXRlc3QJJWVjeCwgJWVjeAorCWp6CUwoZXF1YWwpCisKKwltb3YJMjgoJWVzaSksICVlY3gKKwljbXAJJWVjeCwgMjgoJWVkaSkKKwlqbmUJTChuZXF1YWwpCisJdGVzdAklZWN4LCAlZWN4CisJanoJTChlcXVhbCkKKworCW1vdmRxdQkzMiglZWRpKSwgJXhtbTEKKwltb3ZkcXUJMzIoJWVzaSksICV4bW0yCisJcGNtcGVxZAkleG1tMSwgJXhtbTAJCS8qIEFueSBudWxsIGRvdWJsZV93b3JkPyAqLworCXBjbXBlcWQJJXhtbTIsICV4bW0xCQkvKiBjb21wYXJlIGZpcnN0IDQgZG91YmxlX3dvcmRzIGZvciBlcXVhbGl0eSAqLworCXBzdWJiCSV4bW0wLCAleG1tMQkJLyogcGFja2VkIHN1YiBvZiBjb21wYXJpc29uIHJlc3VsdHMqLworCXBtb3Ztc2tiICV4bW0xLCAlZWR4CisJc3ViCSQweGZmZmYsICVlZHgJCS8qIGlmIGZpcnN0IDQgZG91YmxlX3dvcmRzIGFyZSBzYW1lLCBlZHggPT0gMHhmZmZmICovCisJam56CUwobGVzczRfZG91YmxlX3dvcmRzXzMyKQorCisJbW92ZHF1CTQ4KCVlZGkpLCAleG1tMQorCW1vdmRxdQk0OCglZXNpKSwgJXhtbTIKKwlwY21wZXFkCSV4bW0xLCAleG1tMAkJLyogQW55IG51bGwgZG91YmxlX3dvcmQ/ICovCisJcGNtcGVxZAkleG1tMiwgJXhtbTEJCS8qIGNvbXBhcmUgZmlyc3QgNCBkb3VibGVfd29yZHMgZm9yIGVxdWFsaXR5ICovCisJcHN1YmIJJXhtbTAsICV4bW0xCQkvKiBwYWNrZWQgc3ViIG9mIGNvbXBhcmlzb24gcmVzdWx0cyovCisJcG1vdm1za2IgJXhtbTEsICVlZHgKKwlzdWIJJDB4ZmZmZiwgJWVkeAkJLyogaWYgZmlyc3QgNCBkb3VibGVfd29yZHMgYXJlIHNhbWUsIGVkeCA9PSAweGZmZmYgKi8KKwlqbnoJTChsZXNzNF9kb3VibGVfd29yZHNfNDgpCisKKwlhZGQJJDY0LCAlZXNpCisJYWRkCSQ2NCwgJWVkaQorCWptcAlMKGNvbnRpbnVlXzMyXzQ4KQorCisJLnAyYWxpZ24gNAorTChjb250aW51ZV8xNik6CisJYW5kCSQxNSwgJWNoCisJanoJTChjb250aW51ZV8xNl8wMCkKKwljbXAJJDE2LCAlZWF4CisJamIJTChjb250aW51ZV8wXzE2KQorCWNtcAkkMzIsICVlYXgKKwlqYglMKGNvbnRpbnVlXzE2XzE2KQorCWNtcAkkNDgsICVlYXgKKwlqYglMKGNvbnRpbnVlXzE2XzMyKQorCisJLnAyYWxpZ24gNAorTChjb250aW51ZV8xNl80OCk6CisJbW92CSglZXNpKSwgJWVjeAorCWNtcAklZWN4LCAoJWVkaSkKKwlqbmUJTChuZXF1YWwpCisJdGVzdAklZWN4LCAlZWN4CisJanoJTChlcXVhbCkKKworCW1vdgk0KCVlc2kpLCAlZWN4CisJY21wCSVlY3gsIDQoJWVkaSkKKwlqbmUJTChuZXF1YWwpCisJdGVzdAklZWN4LCAlZWN4CisJanoJTChlcXVhbCkKKworCW1vdgk4KCVlc2kpLCAlZWN4CisJY21wCSVlY3gsIDgoJWVkaSkKKwlqbmUJTChuZXF1YWwpCisJdGVzdAklZWN4LCAlZWN4CisJanoJTChlcXVhbCkKKworCW1vdgkxMiglZXNpKSwgJWVjeAorCWNtcAklZWN4LCAxMiglZWRpKQorCWpuZQlMKG5lcXVhbCkKKwl0ZXN0CSVlY3gsICVlY3gKKwlqeglMKGVxdWFsKQorCisJbW92ZHF1CTE2KCVlZGkpLCAleG1tMQorCW1vdmRxdQkxNiglZXNpKSwgJXhtbTIKKwlwY21wZXFkCSV4bW0xLCAleG1tMAkJLyogQW55IG51bGwgZG91YmxlX3dvcmQ/ICovCisJcGNtcGVxZAkleG1tMiwgJXhtbTEJCS8qIGNvbXBhcmUgZmlyc3QgNCBkb3VibGVfd29yZHMgZm9yIGVxdWFsaXR5ICovCisJcHN1YmIJJXhtbTAsICV4bW0xCQkvKiBwYWNrZWQgc3ViIG9mIGNvbXBhcmlzb24gcmVzdWx0cyovCisJcG1vdm1za2IgJXhtbTEsICVlZHgKKwlzdWIJJDB4ZmZmZiwgJWVkeAkJLyogaWYgZmlyc3QgNCBkb3VibGVfd29yZHMgYXJlIHNhbWUsIGVkeCA9PSAweGZmZmYgKi8KKwlqbnoJTChsZXNzNF9kb3VibGVfd29yZHNfMTYpCisKKwltb3YJMzIoJWVzaSksICVlY3gKKwljbXAJJWVjeCwgMzIoJWVkaSkKKwlqbmUJTChuZXF1YWwpCisJdGVzdAklZWN4LCAlZWN4CisJanoJTChlcXVhbCkKKworCW1vdgkzNiglZXNpKSwgJWVjeAorCWNtcAklZWN4LCAzNiglZWRpKQorCWpuZQlMKG5lcXVhbCkKKwl0ZXN0CSVlY3gsICVlY3gKKwlqeglMKGVxdWFsKQorCisJbW92CTQwKCVlc2kpLCAlZWN4CisJY21wCSVlY3gsIDQwKCVlZGkpCisJam5lCUwobmVxdWFsKQorCXRlc3QJJWVjeCwgJWVjeAorCWp6CUwoZXF1YWwpCisKKwltb3YJNDQoJWVzaSksICVlY3gKKwljbXAJJWVjeCwgNDQoJWVkaSkKKwlqbmUJTChuZXF1YWwpCisJdGVzdAklZWN4LCAlZWN4CisJanoJTChlcXVhbCkKKworCW1vdmRxdQk0OCglZWRpKSwgJXhtbTEKKwltb3ZkcXUJNDgoJWVzaSksICV4bW0yCisJcGNtcGVxZAkleG1tMSwgJXhtbTAJCS8qIEFueSBudWxsIGRvdWJsZV93b3JkPyAqLworCXBjbXBlcWQJJXhtbTIsICV4bW0xCQkvKiBjb21wYXJlIGZpcnN0IDQgZG91YmxlX3dvcmRzIGZvciBlcXVhbGl0eSAqLworCXBzdWJiCSV4bW0wLCAleG1tMQkJLyogcGFja2VkIHN1YiBvZiBjb21wYXJpc29uIHJlc3VsdHMqLworCXBtb3Ztc2tiICV4bW0xLCAlZWR4CisJc3ViCSQweGZmZmYsICVlZHgJCS8qIGlmIGZpcnN0IDQgZG91YmxlX3dvcmRzIGFyZSBzYW1lLCBlZHggPT0gMHhmZmZmICovCisJam56CUwobGVzczRfZG91YmxlX3dvcmRzXzQ4KQorCisJYWRkCSQ2NCwgJWVzaQorCWFkZAkkNjQsICVlZGkKKwlqbXAJTChjb250aW51ZV8xNl80OCkKKworCS5wMmFsaWduIDQKK0woY29udGludWVfMDBfMDApOgorCW1vdmRxYQkoJWVkaSksICV4bW0xCisJcGNtcGVxZAkleG1tMSwgJXhtbTAJCS8qIEFueSBudWxsIGRvdWJsZV93b3JkPyAqLworCXBjbXBlcWQJKCVlc2kpLCAleG1tMQkJLyogY29tcGFyZSBmaXJzdCA0IGRvdWJsZV93b3JkcyBmb3IgZXF1YWxpdHkgKi8KKwlwc3ViYgkleG1tMCwgJXhtbTEJCS8qIHBhY2tlZCBzdWIgb2YgY29tcGFyaXNvbiByZXN1bHRzKi8KKwlwbW92bXNrYiAleG1tMSwgJWVkeAorCXN1YgkkMHhmZmZmLCAlZWR4CQkvKiBpZiBmaXJzdCA0IGRvdWJsZV93b3JkcyBhcmUgc2FtZSwgZWR4ID09IDB4ZmZmZiAqLworCWpueglMKGxlc3M0X2RvdWJsZV93b3JkcykKKworCW1vdmRxYQkxNiglZWRpKSwgJXhtbTMKKwlwY21wZXFkCSV4bW0zLCAleG1tMAkJLyogQW55IG51bGwgZG91YmxlX3dvcmQ/ICovCisJcGNtcGVxZAkxNiglZXNpKSwgJXhtbTMJCS8qIGNvbXBhcmUgZmlyc3QgNCBkb3VibGVfd29yZHMgZm9yIGVxdWFsaXR5ICovCisJcHN1YmIJJXhtbTAsICV4bW0zCQkvKiBwYWNrZWQgc3ViIG9mIGNvbXBhcmlzb24gcmVzdWx0cyovCisJcG1vdm1za2IgJXhtbTMsICVlZHgKKwlzdWIJJDB4ZmZmZiwgJWVkeAkJLyogaWYgZmlyc3QgNCBkb3VibGVfd29yZHMgYXJlIHNhbWUsIGVkeCA9PSAweGZmZmYgKi8KKwlqbnoJTChsZXNzNF9kb3VibGVfd29yZHNfMTYpCisKKwltb3ZkcWEJMzIoJWVkaSksICV4bW01CisJcGNtcGVxZAkleG1tNSwgJXhtbTAJCS8qIEFueSBudWxsIGRvdWJsZV93b3JkPyAqLworCXBjbXBlcWQJMzIoJWVzaSksICV4bW01CQkvKiBjb21wYXJlIGZpcnN0IDQgZG91YmxlX3dvcmRzIGZvciBlcXVhbGl0eSAqLworCXBzdWJiCSV4bW0wLCAleG1tNQkJLyogcGFja2VkIHN1YiBvZiBjb21wYXJpc29uIHJlc3VsdHMqLworCXBtb3Ztc2tiICV4bW01LCAlZWR4CisJc3ViCSQweGZmZmYsICVlZHgJCS8qIGlmIGZpcnN0IDQgZG91YmxlX3dvcmRzIGFyZSBzYW1lLCBlZHggPT0gMHhmZmZmICovCisJam56CUwobGVzczRfZG91YmxlX3dvcmRzXzMyKQorCisJbW92ZHFhCTQ4KCVlZGkpLCAleG1tMQorCXBjbXBlcWQJJXhtbTEsICV4bW0wCQkvKiBBbnkgbnVsbCBkb3VibGVfd29yZD8gKi8KKwlwY21wZXFkCTQ4KCVlc2kpLCAleG1tMQkJLyogY29tcGFyZSBmaXJzdCA0IGRvdWJsZV93b3JkcyBmb3IgZXF1YWxpdHkgKi8KKwlwc3ViYgkleG1tMCwgJXhtbTEJCS8qIHBhY2tlZCBzdWIgb2YgY29tcGFyaXNvbiByZXN1bHRzKi8KKwlwbW92bXNrYiAleG1tMSwgJWVkeAorCXN1YgkkMHhmZmZmLCAlZWR4CQkvKiBpZiBmaXJzdCA0IGRvdWJsZV93b3JkcyBhcmUgc2FtZSwgZWR4ID09IDB4ZmZmZiAqLworCWpueglMKGxlc3M0X2RvdWJsZV93b3Jkc180OCkKKworCWFkZAkkNjQsICVlc2kKKwlhZGQJJDY0LCAlZWRpCisJam1wCUwoY29udGludWVfMDBfMDApCisKKwkucDJhbGlnbiA0CitMKGNvbnRpbnVlXzAwXzMyKToKKwltb3ZkcXUJKCVlc2kpLCAleG1tMgorCXBjbXBlcWQJJXhtbTIsICV4bW0wCQkvKiBBbnkgbnVsbCBkb3VibGVfd29yZD8gKi8KKwlwY21wZXFkCSglZWRpKSwgJXhtbTIJCS8qIGNvbXBhcmUgZmlyc3QgNCBkb3VibGVfd29yZHMgZm9yIGVxdWFsaXR5ICovCisJcHN1YmIJJXhtbTAsICV4bW0yCQkvKiBwYWNrZWQgc3ViIG9mIGNvbXBhcmlzb24gcmVzdWx0cyovCisJcG1vdm1za2IgJXhtbTIsICVlZHgKKwlzdWIJJDB4ZmZmZiwgJWVkeAkJLyogaWYgZmlyc3QgNCBkb3VibGVfd29yZHMgYXJlIHNhbWUsIGVkeCA9PSAweGZmZmYgKi8KKwlqbnoJTChsZXNzNF9kb3VibGVfd29yZHMpCisKKwlhZGQJJDE2LCAlZXNpCisJYWRkCSQxNiwgJWVkaQorCWptcAlMKGNvbnRpbnVlXzAwXzQ4KQorCisJLnAyYWxpZ24gNAorTChjb250aW51ZV8wMF8xNik6CisJbW92ZHF1CSglZXNpKSwgJXhtbTIKKwlwY21wZXFkCSV4bW0yLCAleG1tMAkJLyogQW55IG51bGwgZG91YmxlX3dvcmQ/ICovCisJcGNtcGVxZAkoJWVkaSksICV4bW0yCQkvKiBjb21wYXJlIGZpcnN0IDQgZG91YmxlX3dvcmRzIGZvciBlcXVhbGl0eSAqLworCXBzdWJiCSV4bW0wLCAleG1tMgkJLyogcGFja2VkIHN1YiBvZiBjb21wYXJpc29uIHJlc3VsdHMqLworCXBtb3Ztc2tiICV4bW0yLCAlZWR4CisJc3ViCSQweGZmZmYsICVlZHgJCS8qIGlmIGZpcnN0IDQgZG91YmxlX3dvcmRzIGFyZSBzYW1lLCBlZHggPT0gMHhmZmZmICovCisJam56CUwobGVzczRfZG91YmxlX3dvcmRzKQorCisJbW92ZHF1CTE2KCVlc2kpLCAleG1tMgorCXBjbXBlcWQJJXhtbTIsICV4bW0wCQkvKiBBbnkgbnVsbCBkb3VibGVfd29yZD8gKi8KKwlwY21wZXFkCTE2KCVlZGkpLCAleG1tMgkJLyogY29tcGFyZSBmaXJzdCA0IGRvdWJsZV93b3JkcyBmb3IgZXF1YWxpdHkgKi8KKwlwc3ViYgkleG1tMCwgJXhtbTIJCS8qIHBhY2tlZCBzdWIgb2YgY29tcGFyaXNvbiByZXN1bHRzKi8KKwlwbW92bXNrYiAleG1tMiwgJWVkeAorCXN1YgkkMHhmZmZmLCAlZWR4CQkvKiBpZiBmaXJzdCA0IGRvdWJsZV93b3JkcyBhcmUgc2FtZSwgZWR4ID09IDB4ZmZmZiAqLworCWpueglMKGxlc3M0X2RvdWJsZV93b3Jkc18xNikKKworCWFkZAkkMzIsICVlc2kKKwlhZGQJJDMyLCAlZWRpCisJam1wCUwoY29udGludWVfMDBfNDgpCisKKwkucDJhbGlnbiA0CitMKGNvbnRpbnVlXzAwXzApOgorCW1vdmRxdQkoJWVzaSksICV4bW0yCisJcGNtcGVxZAkleG1tMiwgJXhtbTAJCS8qIEFueSBudWxsIGRvdWJsZV93b3JkPyAqLworCXBjbXBlcWQJKCVlZGkpLCAleG1tMgkJLyogY29tcGFyZSBmaXJzdCA0IGRvdWJsZV93b3JkcyBmb3IgZXF1YWxpdHkgKi8KKwlwc3ViYgkleG1tMCwgJXhtbTIJCS8qIHBhY2tlZCBzdWIgb2YgY29tcGFyaXNvbiByZXN1bHRzKi8KKwlwbW92bXNrYiAleG1tMiwgJWVkeAorCXN1YgkkMHhmZmZmLCAlZWR4CQkvKiBpZiBmaXJzdCA0IGRvdWJsZV93b3JkcyBhcmUgc2FtZSwgZWR4ID09IDB4ZmZmZiAqLworCWpueglMKGxlc3M0X2RvdWJsZV93b3JkcykKKworCW1vdmRxdQkxNiglZXNpKSwgJXhtbTIKKwlwY21wZXFkCSV4bW0yLCAleG1tMAkJLyogQW55IG51bGwgZG91YmxlX3dvcmQ/ICovCisJcGNtcGVxZAkxNiglZWRpKSwgJXhtbTIJCS8qIGNvbXBhcmUgZmlyc3QgNCBkb3VibGVfd29yZHMgZm9yIGVxdWFsaXR5ICovCisJcHN1YmIJJXhtbTAsICV4bW0yCQkvKiBwYWNrZWQgc3ViIG9mIGNvbXBhcmlzb24gcmVzdWx0cyovCisJcG1vdm1za2IgJXhtbTIsICVlZHgKKwlzdWIJJDB4ZmZmZiwgJWVkeAkJLyogaWYgZmlyc3QgNCBkb3VibGVfd29yZHMgYXJlIHNhbWUsIGVkeCA9PSAweGZmZmYgKi8KKwlqbnoJTChsZXNzNF9kb3VibGVfd29yZHNfMTYpCisKKwltb3ZkcXUJMzIoJWVzaSksICV4bW0yCisJcGNtcGVxZAkleG1tMiwgJXhtbTAJCS8qIEFueSBudWxsIGRvdWJsZV93b3JkPyAqLworCXBjbXBlcWQJMzIoJWVkaSksICV4bW0yCQkvKiBjb21wYXJlIGZpcnN0IDQgZG91YmxlX3dvcmRzIGZvciBlcXVhbGl0eSAqLworCXBzdWJiCSV4bW0wLCAleG1tMgkJLyogcGFja2VkIHN1YiBvZiBjb21wYXJpc29uIHJlc3VsdHMqLworCXBtb3Ztc2tiICV4bW0yLCAlZWR4CisJc3ViCSQweGZmZmYsICVlZHgJCS8qIGlmIGZpcnN0IDQgZG91YmxlX3dvcmRzIGFyZSBzYW1lLCBlZHggPT0gMHhmZmZmICovCisJam56CUwobGVzczRfZG91YmxlX3dvcmRzXzMyKQorCisJYWRkCSQ0OCwgJWVzaQorCWFkZAkkNDgsICVlZGkKKwlqbXAJTChjb250aW51ZV8wMF80OCkKKworCS5wMmFsaWduIDQKK0woY29udGludWVfNDhfMDApOgorCXBjbXBlcWQJKCVlc2kpLCAleG1tMAorCW1vdgkoJWVkaSksICVlYXgKKwlwbW92bXNrYiAleG1tMCwgJWVjeAorCXRlc3QJJWVjeCwgJWVjeAorCWpueglMKGxlc3M0X2RvdWJsZV93b3JkczEpCisKKwljbXAJKCVlc2kpLCAlZWF4CisJam5lCUwobmVxdWFsKQorCisJbW92CTQoJWVkaSksICVlYXgKKwljbXAJNCglZXNpKSwgJWVheAorCWpuZQlMKG5lcXVhbCkKKworCW1vdgk4KCVlZGkpLCAlZWF4CisJY21wCTgoJWVzaSksICVlYXgKKwlqbmUJTChuZXF1YWwpCisKKwltb3YJMTIoJWVkaSksICVlYXgKKwljbXAJMTIoJWVzaSksICVlYXgKKwlqbmUJTChuZXF1YWwpCisKKwltb3ZkcXUJMTYoJWVkaSksICV4bW0xCisJcGNtcGVxZAkleG1tMSwgJXhtbTAJCS8qIEFueSBudWxsIGRvdWJsZV93b3JkPyAqLworCXBjbXBlcWQJMTYoJWVzaSksICV4bW0xCQkvKiBjb21wYXJlIGZpcnN0IDQgZG91YmxlX3dvcmRzIGZvciBlcXVhbGl0eSAqLworCXBzdWJiCSV4bW0wLCAleG1tMQkJLyogcGFja2VkIHN1YiBvZiBjb21wYXJpc29uIHJlc3VsdHMqLworCXBtb3Ztc2tiICV4bW0xLCAlZWR4CisJc3ViCSQweGZmZmYsICVlZHgJCS8qIGlmIGZpcnN0IDQgZG91YmxlX3dvcmRzIGFyZSBzYW1lLCBlZHggPT0gMHhmZmZmICovCisJam56CUwobGVzczRfZG91YmxlX3dvcmRzXzE2KQorCisJbW92ZHF1CTMyKCVlZGkpLCAleG1tMQorCXBjbXBlcWQJJXhtbTEsICV4bW0wCQkvKiBBbnkgbnVsbCBkb3VibGVfd29yZD8gKi8KKwlwY21wZXFkCTMyKCVlc2kpLCAleG1tMQkJLyogY29tcGFyZSBmaXJzdCA0IGRvdWJsZV93b3JkcyBmb3IgZXF1YWxpdHkgKi8KKwlwc3ViYgkleG1tMCwgJXhtbTEJCS8qIHBhY2tlZCBzdWIgb2YgY29tcGFyaXNvbiByZXN1bHRzKi8KKwlwbW92bXNrYiAleG1tMSwgJWVkeAorCXN1YgkkMHhmZmZmLCAlZWR4CQkvKiBpZiBmaXJzdCA0IGRvdWJsZV93b3JkcyBhcmUgc2FtZSwgZWR4ID09IDB4ZmZmZiAqLworCWpueglMKGxlc3M0X2RvdWJsZV93b3Jkc18zMikKKworCW1vdmRxdQk0OCglZWRpKSwgJXhtbTEKKwlwY21wZXFkCSV4bW0xLCAleG1tMAkJLyogQW55IG51bGwgZG91YmxlX3dvcmQ/ICovCisJcGNtcGVxZAk0OCglZXNpKSwgJXhtbTEJCS8qIGNvbXBhcmUgZmlyc3QgNCBkb3VibGVfd29yZHMgZm9yIGVxdWFsaXR5ICovCisJcHN1YmIJJXhtbTAsICV4bW0xCQkvKiBwYWNrZWQgc3ViIG9mIGNvbXBhcmlzb24gcmVzdWx0cyovCisJcG1vdm1za2IgJXhtbTEsICVlZHgKKwlzdWIJJDB4ZmZmZiwgJWVkeAkJLyogaWYgZmlyc3QgNCBkb3VibGVfd29yZHMgYXJlIHNhbWUsIGVkeCA9PSAweGZmZmYgKi8KKwlqbnoJTChsZXNzNF9kb3VibGVfd29yZHNfNDgpCisKKwlhZGQJJDY0LCAlZXNpCisJYWRkCSQ2NCwgJWVkaQorCWptcAlMKGNvbnRpbnVlXzQ4XzAwKQorCisJLnAyYWxpZ24gNAorTChjb250aW51ZV8zMl8wMCk6CisJbW92ZHF1CSglZWRpKSwgJXhtbTEKKwlwY21wZXFkCSV4bW0xLCAleG1tMAkJLyogQW55IG51bGwgZG91YmxlX3dvcmQ/ICovCisJcGNtcGVxZAkoJWVzaSksICV4bW0xCQkvKiBjb21wYXJlIGZpcnN0IDQgZG91YmxlX3dvcmRzIGZvciBlcXVhbGl0eSAqLworCXBzdWJiCSV4bW0wLCAleG1tMQkJLyogcGFja2VkIHN1YiBvZiBjb21wYXJpc29uIHJlc3VsdHMqLworCXBtb3Ztc2tiICV4bW0xLCAlZWR4CisJc3ViCSQweGZmZmYsICVlZHgJCS8qIGlmIGZpcnN0IDQgZG91YmxlX3dvcmRzIGFyZSBzYW1lLCBlZHggPT0gMHhmZmZmICovCisJam56CUwobGVzczRfZG91YmxlX3dvcmRzKQorCisJYWRkCSQxNiwgJWVzaQorCWFkZAkkMTYsICVlZGkKKwlqbXAJTChjb250aW51ZV80OF8wMCkKKworCS5wMmFsaWduIDQKK0woY29udGludWVfMTZfMDApOgorCW1vdmRxdQkoJWVkaSksICV4bW0xCisJcGNtcGVxZAkleG1tMSwgJXhtbTAJCS8qIEFueSBudWxsIGRvdWJsZV93b3JkPyAqLworCXBjbXBlcWQJKCVlc2kpLCAleG1tMQkJLyogY29tcGFyZSBmaXJzdCA0IGRvdWJsZV93b3JkcyBmb3IgZXF1YWxpdHkgKi8KKwlwc3ViYgkleG1tMCwgJXhtbTEJCS8qIHBhY2tlZCBzdWIgb2YgY29tcGFyaXNvbiByZXN1bHRzKi8KKwlwbW92bXNrYiAleG1tMSwgJWVkeAorCXN1YgkkMHhmZmZmLCAlZWR4CQkvKiBpZiBmaXJzdCA0IGRvdWJsZV93b3JkcyBhcmUgc2FtZSwgZWR4ID09IDB4ZmZmZiAqLworCWpueglMKGxlc3M0X2RvdWJsZV93b3JkcykKKworCW1vdmRxdQkxNiglZWRpKSwgJXhtbTEKKwlwY21wZXFkCSV4bW0xLCAleG1tMAkJLyogQW55IG51bGwgZG91YmxlX3dvcmQ/ICovCisJcGNtcGVxZAkxNiglZXNpKSwgJXhtbTEJCS8qIGNvbXBhcmUgZmlyc3QgNCBkb3VibGVfd29yZHMgZm9yIGVxdWFsaXR5ICovCisJcHN1YmIJJXhtbTAsICV4bW0xCQkvKiBwYWNrZWQgc3ViIG9mIGNvbXBhcmlzb24gcmVzdWx0cyovCisJcG1vdm1za2IgJXhtbTEsICVlZHgKKwlzdWIJJDB4ZmZmZiwgJWVkeAkJLyogaWYgZmlyc3QgNCBkb3VibGVfd29yZHMgYXJlIHNhbWUsIGVkeCA9PSAweGZmZmYgKi8KKwlqbnoJTChsZXNzNF9kb3VibGVfd29yZHNfMTYpCisKKwlhZGQJJDMyLCAlZXNpCisJYWRkCSQzMiwgJWVkaQorCWptcAlMKGNvbnRpbnVlXzQ4XzAwKQorCisJLnAyYWxpZ24gNAorTChjb250aW51ZV8wXzAwKToKKwltb3ZkcXUJKCVlZGkpLCAleG1tMQorCXBjbXBlcWQJJXhtbTEsICV4bW0wCQkvKiBBbnkgbnVsbCBkb3VibGVfd29yZD8gKi8KKwlwY21wZXFkCSglZXNpKSwgJXhtbTEJCS8qIGNvbXBhcmUgZmlyc3QgNCBkb3VibGVfd29yZHMgZm9yIGVxdWFsaXR5ICovCisJcHN1YmIJJXhtbTAsICV4bW0xCQkvKiBwYWNrZWQgc3ViIG9mIGNvbXBhcmlzb24gcmVzdWx0cyovCisJcG1vdm1za2IgJXhtbTEsICVlZHgKKwlzdWIJJDB4ZmZmZiwgJWVkeAkJLyogaWYgZmlyc3QgNCBkb3VibGVfd29yZHMgYXJlIHNhbWUsIGVkeCA9PSAweGZmZmYgKi8KKwlqbnoJTChsZXNzNF9kb3VibGVfd29yZHMpCisKKwltb3ZkcXUJMTYoJWVkaSksICV4bW0xCisJcGNtcGVxZAkleG1tMSwgJXhtbTAJCS8qIEFueSBudWxsIGRvdWJsZV93b3JkPyAqLworCXBjbXBlcWQJMTYoJWVzaSksICV4bW0xCQkvKiBjb21wYXJlIGZpcnN0IDQgZG91YmxlX3dvcmRzIGZvciBlcXVhbGl0eSAqLworCXBzdWJiCSV4bW0wLCAleG1tMQkJLyogcGFja2VkIHN1YiBvZiBjb21wYXJpc29uIHJlc3VsdHMqLworCXBtb3Ztc2tiICV4bW0xLCAlZWR4CisJc3ViCSQweGZmZmYsICVlZHgJCS8qIGlmIGZpcnN0IDQgZG91YmxlX3dvcmRzIGFyZSBzYW1lLCBlZHggPT0gMHhmZmZmICovCisJam56CUwobGVzczRfZG91YmxlX3dvcmRzXzE2KQorCisJbW92ZHF1CTMyKCVlZGkpLCAleG1tMQorCXBjbXBlcWQJJXhtbTEsICV4bW0wCQkvKiBBbnkgbnVsbCBkb3VibGVfd29yZD8gKi8KKwlwY21wZXFkCTMyKCVlc2kpLCAleG1tMQkJLyogY29tcGFyZSBmaXJzdCA0IGRvdWJsZV93b3JkcyBmb3IgZXF1YWxpdHkgKi8KKwlwc3ViYgkleG1tMCwgJXhtbTEJCS8qIHBhY2tlZCBzdWIgb2YgY29tcGFyaXNvbiByZXN1bHRzKi8KKwlwbW92bXNrYiAleG1tMSwgJWVkeAorCXN1YgkkMHhmZmZmLCAlZWR4CQkvKiBpZiBmaXJzdCA0IGRvdWJsZV93b3JkcyBhcmUgc2FtZSwgZWR4ID09IDB4ZmZmZiAqLworCWpueglMKGxlc3M0X2RvdWJsZV93b3Jkc18zMikKKworCWFkZAkkNDgsICVlc2kKKwlhZGQJJDQ4LCAlZWRpCisJam1wCUwoY29udGludWVfNDhfMDApCisKKwkucDJhbGlnbiA0CitMKGNvbnRpbnVlXzMyXzMyKToKKwltb3ZkcXUJKCVlZGkpLCAleG1tMQorCW1vdmRxdQkoJWVzaSksICV4bW0yCisJcGNtcGVxZAkleG1tMSwgJXhtbTAJCS8qIEFueSBudWxsIGRvdWJsZV93b3JkPyAqLworCXBjbXBlcWQJJXhtbTIsICV4bW0xCQkvKiBjb21wYXJlIGZpcnN0IDQgZG91YmxlX3dvcmRzIGZvciBlcXVhbGl0eSAqLworCXBzdWJiCSV4bW0wLCAleG1tMQkJLyogcGFja2VkIHN1YiBvZiBjb21wYXJpc29uIHJlc3VsdHMqLworCXBtb3Ztc2tiICV4bW0xLCAlZWR4CisJc3ViCSQweGZmZmYsICVlZHgJCS8qIGlmIGZpcnN0IDQgZG91YmxlX3dvcmRzIGFyZSBzYW1lLCBlZHggPT0gMHhmZmZmICovCisJam56CUwobGVzczRfZG91YmxlX3dvcmRzKQorCisJYWRkCSQxNiwgJWVzaQorCWFkZAkkMTYsICVlZGkKKwlqbXAJTChjb250aW51ZV80OF80OCkKKworCS5wMmFsaWduIDQKK0woY29udGludWVfMTZfMTYpOgorCW1vdmRxdQkoJWVkaSksICV4bW0xCisJbW92ZHF1CSglZXNpKSwgJXhtbTIKKwlwY21wZXFkCSV4bW0xLCAleG1tMAkJLyogQW55IG51bGwgZG91YmxlX3dvcmQ/ICovCisJcGNtcGVxZAkleG1tMiwgJXhtbTEJCS8qIGNvbXBhcmUgZmlyc3QgNCBkb3VibGVfd29yZHMgZm9yIGVxdWFsaXR5ICovCisJcHN1YmIJJXhtbTAsICV4bW0xCQkvKiBwYWNrZWQgc3ViIG9mIGNvbXBhcmlzb24gcmVzdWx0cyovCisJcG1vdm1za2IgJXhtbTEsICVlZHgKKwlzdWIJJDB4ZmZmZiwgJWVkeAkJLyogaWYgZmlyc3QgNCBkb3VibGVfd29yZHMgYXJlIHNhbWUsIGVkeCA9PSAweGZmZmYgKi8KKwlqbnoJTChsZXNzNF9kb3VibGVfd29yZHMpCisKKwltb3ZkcXUJMTYoJWVkaSksICV4bW0zCisJbW92ZHF1CTE2KCVlc2kpLCAleG1tNAorCXBjbXBlcWQJJXhtbTMsICV4bW0wCQkvKiBBbnkgbnVsbCBkb3VibGVfd29yZD8gKi8KKwlwY21wZXFkCSV4bW00LCAleG1tMwkJLyogY29tcGFyZSBmaXJzdCA0IGRvdWJsZV93b3JkcyBmb3IgZXF1YWxpdHkgKi8KKwlwc3ViYgkleG1tMCwgJXhtbTMJCS8qIHBhY2tlZCBzdWIgb2YgY29tcGFyaXNvbiByZXN1bHRzKi8KKwlwbW92bXNrYiAleG1tMywgJWVkeAorCXN1YgkkMHhmZmZmLCAlZWR4CQkvKiBpZiBmaXJzdCA0IGRvdWJsZV93b3JkcyBhcmUgc2FtZSwgZWR4ID09IDB4ZmZmZiAqLworCWpueglMKGxlc3M0X2RvdWJsZV93b3Jkc18xNikKKworCWFkZAkkMzIsICVlc2kKKwlhZGQJJDMyLCAlZWRpCisJam1wCUwoY29udGludWVfNDhfNDgpCisKKwkucDJhbGlnbiA0CitMKGNvbnRpbnVlXzBfMCk6CisJbW92ZHF1CSglZWRpKSwgJXhtbTEKKwltb3ZkcXUJKCVlc2kpLCAleG1tMgorCXBjbXBlcWQJJXhtbTEsICV4bW0wCQkvKiBBbnkgbnVsbCBkb3VibGVfd29yZD8gKi8KKwlwY21wZXFkCSV4bW0yLCAleG1tMQkJLyogY29tcGFyZSBmaXJzdCA0IGRvdWJsZV93b3JkcyBmb3IgZXF1YWxpdHkgKi8KKwlwc3ViYgkleG1tMCwgJXhtbTEJCS8qIHBhY2tlZCBzdWIgb2YgY29tcGFyaXNvbiByZXN1bHRzKi8KKwlwbW92bXNrYiAleG1tMSwgJWVkeAorCXN1YgkkMHhmZmZmLCAlZWR4CQkvKiBpZiBmaXJzdCA0IGRvdWJsZV93b3JkcyBhcmUgc2FtZSwgZWR4ID09IDB4ZmZmZiAqLworCWpueglMKGxlc3M0X2RvdWJsZV93b3JkcykKKworCW1vdmRxdQkxNiglZWRpKSwgJXhtbTMKKwltb3ZkcXUJMTYoJWVzaSksICV4bW00CisJcGNtcGVxZAkleG1tMywgJXhtbTAJCS8qIEFueSBudWxsIGRvdWJsZV93b3JkPyAqLworCXBjbXBlcWQJJXhtbTQsICV4bW0zCQkvKiBjb21wYXJlIGZpcnN0IDQgZG91YmxlX3dvcmRzIGZvciBlcXVhbGl0eSAqLworCXBzdWJiCSV4bW0wLCAleG1tMwkJLyogcGFja2VkIHN1YiBvZiBjb21wYXJpc29uIHJlc3VsdHMqLworCXBtb3Ztc2tiICV4bW0zLCAlZWR4CisJc3ViCSQweGZmZmYsICVlZHgJCS8qIGlmIGZpcnN0IDQgZG91YmxlX3dvcmRzIGFyZSBzYW1lLCBlZHggPT0gMHhmZmZmICovCisJam56CUwobGVzczRfZG91YmxlX3dvcmRzXzE2KQorCisJbW92ZHF1CTMyKCVlZGkpLCAleG1tMQorCW1vdmRxdQkzMiglZXNpKSwgJXhtbTIKKwlwY21wZXFkCSV4bW0xLCAleG1tMAkJLyogQW55IG51bGwgZG91YmxlX3dvcmQ/ICovCisJcGNtcGVxZAkleG1tMiwgJXhtbTEJCS8qIGNvbXBhcmUgZmlyc3QgNCBkb3VibGVfd29yZHMgZm9yIGVxdWFsaXR5ICovCisJcHN1YmIJJXhtbTAsICV4bW0xCQkvKiBwYWNrZWQgc3ViIG9mIGNvbXBhcmlzb24gcmVzdWx0cyovCisJcG1vdm1za2IgJXhtbTEsICVlZHgKKwlzdWIJJDB4ZmZmZiwgJWVkeAkJLyogaWYgZmlyc3QgNCBkb3VibGVfd29yZHMgYXJlIHNhbWUsIGVkeCA9PSAweGZmZmYgKi8KKwlqbnoJTChsZXNzNF9kb3VibGVfd29yZHNfMzIpCisKKwlhZGQJJDQ4LCAlZXNpCisJYWRkCSQ0OCwgJWVkaQorCWptcAlMKGNvbnRpbnVlXzQ4XzQ4KQorCisJLnAyYWxpZ24gNAorTChjb250aW51ZV8wXzE2KToKKwltb3ZkcXUJKCVlZGkpLCAleG1tMQorCW1vdmRxdQkoJWVzaSksICV4bW0yCisJcGNtcGVxZAkleG1tMSwgJXhtbTAJCS8qIEFueSBudWxsIGRvdWJsZV93b3JkPyAqLworCXBjbXBlcWQJJXhtbTIsICV4bW0xCQkvKiBjb21wYXJlIGZpcnN0IDQgZG91YmxlX3dvcmRzIGZvciBlcXVhbGl0eSAqLworCXBzdWJiCSV4bW0wLCAleG1tMQkJLyogcGFja2VkIHN1YiBvZiBjb21wYXJpc29uIHJlc3VsdHMqLworCXBtb3Ztc2tiICV4bW0xLCAlZWR4CisJc3ViCSQweGZmZmYsICVlZHgJCS8qIGlmIGZpcnN0IDQgZG91YmxlX3dvcmRzIGFyZSBzYW1lLCBlZHggPT0gMHhmZmZmICovCisJam56CUwobGVzczRfZG91YmxlX3dvcmRzKQorCisJbW92ZHF1CTE2KCVlZGkpLCAleG1tMQorCW1vdmRxdQkxNiglZXNpKSwgJXhtbTIKKwlwY21wZXFkCSV4bW0xLCAleG1tMAkJLyogQW55IG51bGwgZG91YmxlX3dvcmQ/ICovCisJcGNtcGVxZAkleG1tMiwgJXhtbTEJCS8qIGNvbXBhcmUgZmlyc3QgNCBkb3VibGVfd29yZHMgZm9yIGVxdWFsaXR5ICovCisJcHN1YmIJJXhtbTAsICV4bW0xCQkvKiBwYWNrZWQgc3ViIG9mIGNvbXBhcmlzb24gcmVzdWx0cyovCisJcG1vdm1za2IgJXhtbTEsICVlZHgKKwlzdWIJJDB4ZmZmZiwgJWVkeAkJLyogaWYgZmlyc3QgNCBkb3VibGVfd29yZHMgYXJlIHNhbWUsIGVkeCA9PSAweGZmZmYgKi8KKwlqbnoJTChsZXNzNF9kb3VibGVfd29yZHNfMTYpCisKKwlhZGQJJDMyLCAlZXNpCisJYWRkCSQzMiwgJWVkaQorCWptcAlMKGNvbnRpbnVlXzMyXzQ4KQorCisJLnAyYWxpZ24gNAorTChjb250aW51ZV8wXzMyKToKKwltb3ZkcXUJKCVlZGkpLCAleG1tMQorCW1vdmRxdQkoJWVzaSksICV4bW0yCisJcGNtcGVxZAkleG1tMSwgJXhtbTAJCS8qIEFueSBudWxsIGRvdWJsZV93b3JkPyAqLworCXBjbXBlcWQJJXhtbTIsICV4bW0xCQkvKiBjb21wYXJlIGZpcnN0IDQgZG91YmxlX3dvcmRzIGZvciBlcXVhbGl0eSAqLworCXBzdWJiCSV4bW0wLCAleG1tMQkJLyogcGFja2VkIHN1YiBvZiBjb21wYXJpc29uIHJlc3VsdHMqLworCXBtb3Ztc2tiICV4bW0xLCAlZWR4CisJc3ViCSQweGZmZmYsICVlZHgJCS8qIGlmIGZpcnN0IDQgZG91YmxlX3dvcmRzIGFyZSBzYW1lLCBlZHggPT0gMHhmZmZmICovCisJam56CUwobGVzczRfZG91YmxlX3dvcmRzKQorCisJYWRkCSQxNiwgJWVzaQorCWFkZAkkMTYsICVlZGkKKwlqbXAJTChjb250aW51ZV8xNl80OCkKKworCS5wMmFsaWduIDQKK0woY29udGludWVfMTZfMzIpOgorCW1vdmRxdQkoJWVkaSksICV4bW0xCisJbW92ZHF1CSglZXNpKSwgJXhtbTIKKwlwY21wZXFkCSV4bW0xLCAleG1tMAkJLyogQW55IG51bGwgZG91YmxlX3dvcmQ/ICovCisJcGNtcGVxZAkleG1tMiwgJXhtbTEJCS8qIGNvbXBhcmUgZmlyc3QgNCBkb3VibGVfd29yZHMgZm9yIGVxdWFsaXR5ICovCisJcHN1YmIJJXhtbTAsICV4bW0xCQkvKiBwYWNrZWQgc3ViIG9mIGNvbXBhcmlzb24gcmVzdWx0cyovCisJcG1vdm1za2IgJXhtbTEsICVlZHgKKwlzdWIJJDB4ZmZmZiwgJWVkeAkJLyogaWYgZmlyc3QgNCBkb3VibGVfd29yZHMgYXJlIHNhbWUsIGVkeCA9PSAweGZmZmYgKi8KKwlqbnoJTChsZXNzNF9kb3VibGVfd29yZHMpCisKKwlhZGQJJDE2LCAlZXNpCisJYWRkCSQxNiwgJWVkaQorCWptcAlMKGNvbnRpbnVlXzMyXzQ4KQorCisJLnAyYWxpZ24gNAorTChsZXNzNF9kb3VibGVfd29yZHMxKToKKwljbXAJKCVlc2kpLCAlZWF4CisJam5lCUwobmVxdWFsKQorCXRlc3QJJWVheCwgJWVheAorCWp6CUwoZXF1YWwpCisKKwltb3YJNCglZXNpKSwgJWVjeAorCWNtcAklZWN4LCA0KCVlZGkpCisJam5lCUwobmVxdWFsKQorCXRlc3QJJWVjeCwgJWVjeAorCWp6CUwoZXF1YWwpCisKKwltb3YJOCglZXNpKSwgJWVjeAorCWNtcAklZWN4LCA4KCVlZGkpCisJam5lCUwobmVxdWFsKQorCXRlc3QJJWVjeCwgJWVjeAorCWp6CUwoZXF1YWwpCisKKwltb3YJMTIoJWVzaSksICVlY3gKKwljbXAJJWVjeCwgMTIoJWVkaSkKKwlqbmUJTChuZXF1YWwpCisJeG9yCSVlYXgsICVlYXgKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0wobGVzczRfZG91YmxlX3dvcmRzKToKKwl4b3IJJWVheCwgJWVheAorCXRlc3QJJWRsLCAlZGwKKwlqeglMKG5leHRfdHdvX2RvdWJsZV93b3JkcykKKwlhbmQJJDE1LCAlZGwKKwlqeglMKHNlY29uZF9kb3VibGVfd29yZCkKKwltb3YJKCVlc2kpLCAlZWN4CisJY21wCSVlY3gsICglZWRpKQorCWpuZQlMKG5lcXVhbCkKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woc2Vjb25kX2RvdWJsZV93b3JkKToKKwltb3YJNCglZXNpKSwgJWVjeAorCWNtcAklZWN4LCA0KCVlZGkpCisJam5lCUwobmVxdWFsKQorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChuZXh0X3R3b19kb3VibGVfd29yZHMpOgorCWFuZAkkMTUsICVkaAorCWp6CUwoZm91cnRoX2RvdWJsZV93b3JkKQorCW1vdgk4KCVlc2kpLCAlZWN4CisJY21wCSVlY3gsIDgoJWVkaSkKKwlqbmUJTChuZXF1YWwpCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKGZvdXJ0aF9kb3VibGVfd29yZCk6CisJbW92CTEyKCVlc2kpLCAlZWN4CisJY21wCSVlY3gsIDEyKCVlZGkpCisJam5lCUwobmVxdWFsKQorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChsZXNzNF9kb3VibGVfd29yZHNfMTYpOgorCXhvcgklZWF4LCAlZWF4CisJdGVzdAklZGwsICVkbAorCWp6CUwobmV4dF90d29fZG91YmxlX3dvcmRzXzE2KQorCWFuZAkkMTUsICVkbAorCWp6CUwoc2Vjb25kX2RvdWJsZV93b3JkXzE2KQorCW1vdgkxNiglZXNpKSwgJWVjeAorCWNtcAklZWN4LCAxNiglZWRpKQorCWpuZQlMKG5lcXVhbCkKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woc2Vjb25kX2RvdWJsZV93b3JkXzE2KToKKwltb3YJMjAoJWVzaSksICVlY3gKKwljbXAJJWVjeCwgMjAoJWVkaSkKKwlqbmUJTChuZXF1YWwpCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKG5leHRfdHdvX2RvdWJsZV93b3Jkc18xNik6CisJYW5kCSQxNSwgJWRoCisJanoJTChmb3VydGhfZG91YmxlX3dvcmRfMTYpCisJbW92CTI0KCVlc2kpLCAlZWN4CisJY21wCSVlY3gsIDI0KCVlZGkpCisJam5lCUwobmVxdWFsKQorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChmb3VydGhfZG91YmxlX3dvcmRfMTYpOgorCW1vdgkyOCglZXNpKSwgJWVjeAorCWNtcAklZWN4LCAyOCglZWRpKQorCWpuZQlMKG5lcXVhbCkKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0wobGVzczRfZG91YmxlX3dvcmRzXzMyKToKKwl4b3IJJWVheCwgJWVheAorCXRlc3QJJWRsLCAlZGwKKwlqeglMKG5leHRfdHdvX2RvdWJsZV93b3Jkc18zMikKKwlhbmQJJDE1LCAlZGwKKwlqeglMKHNlY29uZF9kb3VibGVfd29yZF8zMikKKwltb3YJMzIoJWVzaSksICVlY3gKKwljbXAJJWVjeCwgMzIoJWVkaSkKKwlqbmUJTChuZXF1YWwpCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKHNlY29uZF9kb3VibGVfd29yZF8zMik6CisJbW92CTM2KCVlc2kpLCAlZWN4CisJY21wCSVlY3gsIDM2KCVlZGkpCisJam5lCUwobmVxdWFsKQorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChuZXh0X3R3b19kb3VibGVfd29yZHNfMzIpOgorCWFuZAkkMTUsICVkaAorCWp6CUwoZm91cnRoX2RvdWJsZV93b3JkXzMyKQorCW1vdgk0MCglZXNpKSwgJWVjeAorCWNtcAklZWN4LCA0MCglZWRpKQorCWpuZQlMKG5lcXVhbCkKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woZm91cnRoX2RvdWJsZV93b3JkXzMyKToKKwltb3YJNDQoJWVzaSksICVlY3gKKwljbXAJJWVjeCwgNDQoJWVkaSkKKwlqbmUJTChuZXF1YWwpCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKGxlc3M0X2RvdWJsZV93b3Jkc180OCk6CisJeG9yCSVlYXgsICVlYXgKKwl0ZXN0CSVkbCwgJWRsCisJanoJTChuZXh0X3R3b19kb3VibGVfd29yZHNfNDgpCisJYW5kCSQxNSwgJWRsCisJanoJTChzZWNvbmRfZG91YmxlX3dvcmRfNDgpCisJbW92CTQ4KCVlc2kpLCAlZWN4CisJY21wCSVlY3gsIDQ4KCVlZGkpCisJam5lCUwobmVxdWFsKQorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChzZWNvbmRfZG91YmxlX3dvcmRfNDgpOgorCW1vdgk1MiglZXNpKSwgJWVjeAorCWNtcAklZWN4LCA1MiglZWRpKQorCWpuZQlMKG5lcXVhbCkKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0wobmV4dF90d29fZG91YmxlX3dvcmRzXzQ4KToKKwlhbmQJJDE1LCAlZGgKKwlqeglMKGZvdXJ0aF9kb3VibGVfd29yZF80OCkKKwltb3YJNTYoJWVzaSksICVlY3gKKwljbXAJJWVjeCwgNTYoJWVkaSkKKwlqbmUJTChuZXF1YWwpCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKGZvdXJ0aF9kb3VibGVfd29yZF80OCk6CisJbW92CTYwKCVlc2kpLCAlZWN4CisJY21wCSVlY3gsIDYwKCVlZGkpCisJam5lCUwobmVxdWFsKQorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChuZXF1YWwpOgorCW1vdgkkMSwgJWVheAorCWpnCUwocmV0dXJuKQorCW5lZwklZWF4CisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKHJldHVybik6CisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKGVxdWFsKToKKwl4b3JsCSVlYXgsICVlYXgKKwlSRVRVUk4KKworCUNGSV9QT1AgKCVlZGkpCisJQ0ZJX1BPUCAoJWVzaSkKKworCS5wMmFsaWduIDQKK0wobmVxKToKKwltb3YJJDEsICVlYXgKKwlqZwlMKG5lcV9iaWdnZXIpCisJbmVnCSVlYXgKKworTChuZXFfYmlnZ2VyKToKKwlyZXQKKworCS5wMmFsaWduIDQKK0woZXEpOgorCXhvcmwJJWVheCwgJWVheAorCXJldAorCitFTkQgKHdjc2NtcCkKKwpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zdHJpbmcvc3NlMi13Y3NsZW4tYXRvbS5TIGIvbGliYy9hcmNoLXg4Ni9zdHJpbmcvc3NlMi13Y3NsZW4tYXRvbS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhNmFkNTEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N0cmluZy9zc2UyLXdjc2xlbi1hdG9tLlMKQEAgLTAsMCArMSwzMDYgQEAKKy8qCitDb3B5cmlnaHQgKGMpIDIwMTEgSW50ZWwgQ29ycG9yYXRpb24KK0FsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisKKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAgICAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisKKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAgICAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAgICAqIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCisgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEludGVsIENvcnBvcmF0aW9uIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICAgICogbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgICAgKiB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKK1dBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKK0RJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKK0FOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCitBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKK1NPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKi8KKworI2lmbmRlZiBVU0VfQVNfV0NTQ0FUCisKKyMgaWZuZGVmIEwKKyMgIGRlZmluZSBMKGxhYmVsKQkuTCMjbGFiZWwKKyMgZW5kaWYKKworIyBpZm5kZWYgY2ZpX3N0YXJ0cHJvYworIyAgZGVmaW5lIGNmaV9zdGFydHByb2MJLmNmaV9zdGFydHByb2MKKyMgZW5kaWYKKworIyBpZm5kZWYgY2ZpX2VuZHByb2MKKyMgIGRlZmluZSBjZmlfZW5kcHJvYwkuY2ZpX2VuZHByb2MKKyMgZW5kaWYKKworIyBpZm5kZWYgRU5UUlkKKyMgIGRlZmluZSBFTlRSWShuYW1lKQlcCisJLnR5cGUgbmFtZSwgIEBmdW5jdGlvbjsJXAorCS5nbG9ibCBuYW1lOwlcCisJLnAyYWxpZ24gNDsJXAorbmFtZToJXAorCWNmaV9zdGFydHByb2MKKyMgZW5kaWYKKworIyBpZm5kZWYgRU5ECisjICBkZWZpbmUgRU5EKG5hbWUpCVwKKwljZmlfZW5kcHJvYzsJXAorCS5zaXplIG5hbWUsIC4tbmFtZQorIyBlbmRpZgorCisjIGRlZmluZSBQQVJNUwk0CisjIGRlZmluZSBTVFIJUEFSTVMKKyMgZGVmaW5lIFJFVFVSTiByZXQKKworCS50ZXh0CitFTlRSWSAod2NzbGVuKQorCW1vdglTVFIoJWVzcCksICVlZHgKKyNlbmRpZgorCWNtcAkkMCwgKCVlZHgpCisJanoJTChleGl0X3RhaWwwKQorCWNtcAkkMCwgNCglZWR4KQorCWp6CUwoZXhpdF90YWlsMSkKKwljbXAJJDAsIDgoJWVkeCkKKwlqeglMKGV4aXRfdGFpbDIpCisJY21wCSQwLCAxMiglZWR4KQorCWp6CUwoZXhpdF90YWlsMykKKwljbXAJJDAsIDE2KCVlZHgpCisJanoJTChleGl0X3RhaWw0KQorCWNtcAkkMCwgMjAoJWVkeCkKKwlqeglMKGV4aXRfdGFpbDUpCisJY21wCSQwLCAyNCglZWR4KQorCWp6CUwoZXhpdF90YWlsNikKKwljbXAJJDAsIDI4KCVlZHgpCisJanoJTChleGl0X3RhaWw3KQorCisJcHhvcgkleG1tMCwgJXhtbTAKKworCWxlYQkzMiglZWR4KSwgJWVheAorCWxlYQktMTYoJWVheCksICVlY3gKKwlhbmQJJC0xNiwgJWVheAorCisJcGNtcGVxZAkoJWVheCksICV4bW0wCisJcG1vdm1za2IgJXhtbTAsICVlZHgKKwlweG9yCSV4bW0xLCAleG1tMQorCWxlYQkxNiglZWF4KSwgJWVheAorCXRlc3QJJWVkeCwgJWVkeAorCWpueglMKGV4aXQpCisKKwlwY21wZXFkCSglZWF4KSwgJXhtbTEKKwlwbW92bXNrYiAleG1tMSwgJWVkeAorCXB4b3IJJXhtbTIsICV4bW0yCisJbGVhCTE2KCVlYXgpLCAlZWF4CisJdGVzdAklZWR4LCAlZWR4CisJam56CUwoZXhpdCkKKworCXBjbXBlcWQJKCVlYXgpLCAleG1tMgorCXBtb3Ztc2tiICV4bW0yLCAlZWR4CisJcHhvcgkleG1tMywgJXhtbTMKKwlsZWEJMTYoJWVheCksICVlYXgKKwl0ZXN0CSVlZHgsICVlZHgKKwlqbnoJTChleGl0KQorCisJcGNtcGVxZAkoJWVheCksICV4bW0zCisJcG1vdm1za2IgJXhtbTMsICVlZHgKKwlsZWEJMTYoJWVheCksICVlYXgKKwl0ZXN0CSVlZHgsICVlZHgKKwlqbnoJTChleGl0KQorCisJcGNtcGVxZAkoJWVheCksICV4bW0wCisJcG1vdm1za2IgJXhtbTAsICVlZHgKKwlsZWEJMTYoJWVheCksICVlYXgKKwl0ZXN0CSVlZHgsICVlZHgKKwlqbnoJTChleGl0KQorCisJcGNtcGVxZAkoJWVheCksICV4bW0xCisJcG1vdm1za2IgJXhtbTEsICVlZHgKKwlsZWEJMTYoJWVheCksICVlYXgKKwl0ZXN0CSVlZHgsICVlZHgKKwlqbnoJTChleGl0KQorCisJcGNtcGVxZAkoJWVheCksICV4bW0yCisJcG1vdm1za2IgJXhtbTIsICVlZHgKKwlsZWEJMTYoJWVheCksICVlYXgKKwl0ZXN0CSVlZHgsICVlZHgKKwlqbnoJTChleGl0KQorCisJcGNtcGVxZAkoJWVheCksICV4bW0zCisJcG1vdm1za2IgJXhtbTMsICVlZHgKKwlsZWEJMTYoJWVheCksICVlYXgKKwl0ZXN0CSVlZHgsICVlZHgKKwlqbnoJTChleGl0KQorCisJcGNtcGVxZAkoJWVheCksICV4bW0wCisJcG1vdm1za2IgJXhtbTAsICVlZHgKKwlsZWEJMTYoJWVheCksICVlYXgKKwl0ZXN0CSVlZHgsICVlZHgKKwlqbnoJTChleGl0KQorCisJcGNtcGVxZAkoJWVheCksICV4bW0xCisJcG1vdm1za2IgJXhtbTEsICVlZHgKKwlsZWEJMTYoJWVheCksICVlYXgKKwl0ZXN0CSVlZHgsICVlZHgKKwlqbnoJTChleGl0KQorCisJcGNtcGVxZAkoJWVheCksICV4bW0yCisJcG1vdm1za2IgJXhtbTIsICVlZHgKKwlsZWEJMTYoJWVheCksICVlYXgKKwl0ZXN0CSVlZHgsICVlZHgKKwlqbnoJTChleGl0KQorCisJcGNtcGVxZAkoJWVheCksICV4bW0zCisJcG1vdm1za2IgJXhtbTMsICVlZHgKKwlsZWEJMTYoJWVheCksICVlYXgKKwl0ZXN0CSVlZHgsICVlZHgKKwlqbnoJTChleGl0KQorCisJcGNtcGVxZAkoJWVheCksICV4bW0wCisJcG1vdm1za2IgJXhtbTAsICVlZHgKKwlsZWEJMTYoJWVheCksICVlYXgKKwl0ZXN0CSVlZHgsICVlZHgKKwlqbnoJTChleGl0KQorCisJcGNtcGVxZAkoJWVheCksICV4bW0xCisJcG1vdm1za2IgJXhtbTEsICVlZHgKKwlsZWEJMTYoJWVheCksICVlYXgKKwl0ZXN0CSVlZHgsICVlZHgKKwlqbnoJTChleGl0KQorCisJcGNtcGVxZAkoJWVheCksICV4bW0yCisJcG1vdm1za2IgJXhtbTIsICVlZHgKKwlsZWEJMTYoJWVheCksICVlYXgKKwl0ZXN0CSVlZHgsICVlZHgKKwlqbnoJTChleGl0KQorCisJcGNtcGVxZAkoJWVheCksICV4bW0zCisJcG1vdm1za2IgJXhtbTMsICVlZHgKKwlsZWEJMTYoJWVheCksICVlYXgKKwl0ZXN0CSVlZHgsICVlZHgKKwlqbnoJTChleGl0KQorCisJYW5kCSQtMHg0MCwgJWVheAorCisJLnAyYWxpZ24gNAorTChhbGlnbmVkXzY0X2xvb3ApOgorCW1vdmFwcwkoJWVheCksICV4bW0wCisJbW92YXBzCTE2KCVlYXgpLCAleG1tMQorCW1vdmFwcwkzMiglZWF4KSwgJXhtbTIKKwltb3ZhcHMJNDgoJWVheCksICV4bW02CisKKwlwbWludWIJJXhtbTEsICV4bW0wCisJcG1pbnViCSV4bW02LCAleG1tMgorCXBtaW51YgkleG1tMCwgJXhtbTIKKwlwY21wZXFkCSV4bW0zLCAleG1tMgorCXBtb3Ztc2tiICV4bW0yLCAlZWR4CisJbGVhCTY0KCVlYXgpLCAlZWF4CisJdGVzdAklZWR4LCAlZWR4CisJanoJTChhbGlnbmVkXzY0X2xvb3ApCisKKwlwY21wZXFkCS02NCglZWF4KSwgJXhtbTMKKwlwbW92bXNrYiAleG1tMywgJWVkeAorCWxlYQk0OCglZWN4KSwgJWVjeAorCXRlc3QJJWVkeCwgJWVkeAorCWpueglMKGV4aXQpCisKKwlwY21wZXFkCSV4bW0xLCAleG1tMworCXBtb3Ztc2tiICV4bW0zLCAlZWR4CisJbGVhCS0xNiglZWN4KSwgJWVjeAorCXRlc3QJJWVkeCwgJWVkeAorCWpueglMKGV4aXQpCisKKwlwY21wZXFkCS0zMiglZWF4KSwgJXhtbTMKKwlwbW92bXNrYiAleG1tMywgJWVkeAorCWxlYQktMTYoJWVjeCksICVlY3gKKwl0ZXN0CSVlZHgsICVlZHgKKwlqbnoJTChleGl0KQorCisJcGNtcGVxZAkleG1tNiwgJXhtbTMKKwlwbW92bXNrYiAleG1tMywgJWVkeAorCWxlYQktMTYoJWVjeCksICVlY3gKKwl0ZXN0CSVlZHgsICVlZHgKKwlqbnoJTChleGl0KQorCisJam1wCUwoYWxpZ25lZF82NF9sb29wKQorCisJLnAyYWxpZ24gNAorTChleGl0KToKKwlzdWIJJWVjeCwgJWVheAorCXNocgkkMiwgJWVheAorCXRlc3QJJWRsLCAlZGwKKwlqeglMKGV4aXRfaGlnaCkKKworCW1vdgklZGwsICVjbAorCWFuZAkkMTUsICVjbAorCWp6CUwoZXhpdF8xKQorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChleGl0X2hpZ2gpOgorCW1vdgklZGgsICVjaAorCWFuZAkkMTUsICVjaAorCWp6CUwoZXhpdF8zKQorCWFkZAkkMiwgJWVheAorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChleGl0XzEpOgorCWFkZAkkMSwgJWVheAorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChleGl0XzMpOgorCWFkZAkkMywgJWVheAorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChleGl0X3RhaWwwKToKKwl4b3IJJWVheCwgJWVheAorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChleGl0X3RhaWwxKToKKwltb3YJJDEsICVlYXgKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woZXhpdF90YWlsMik6CisJbW92CSQyLCAlZWF4CisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKGV4aXRfdGFpbDMpOgorCW1vdgkkMywgJWVheAorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChleGl0X3RhaWw0KToKKwltb3YJJDQsICVlYXgKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woZXhpdF90YWlsNSk6CisJbW92CSQ1LCAlZWF4CisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKGV4aXRfdGFpbDYpOgorCW1vdgkkNiwgJWVheAorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChleGl0X3RhaWw3KToKKwltb3YJJDcsICVlYXgKKyNpZm5kZWYgVVNFX0FTX1dDU0NBVAorCVJFVFVSTgorCitFTkQgKHdjc2xlbikKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zdHJpbmcvc3NlMi13Y3NyY2hyLWF0b20uUyBiL2xpYmMvYXJjaC14ODYvc3RyaW5nL3NzZTItd2NzcmNoci1hdG9tLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTMwNzc5ZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc3RyaW5nL3NzZTItd2NzcmNoci1hdG9tLlMKQEAgLTAsMCArMSw0MDIgQEAKKy8qCitDb3B5cmlnaHQgKGMpIDIwMTEgSW50ZWwgQ29ycG9yYXRpb24KK0FsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisKKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAgICAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisKKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAgICAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAgICAqIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCisgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEludGVsIENvcnBvcmF0aW9uIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICAgICogbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgICAgKiB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKK1dBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKK0RJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKK0FOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCitBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKK1NPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKi8KKworI2lmbmRlZiBMCisjIGRlZmluZSBMKGxhYmVsKQkuTCMjbGFiZWwKKyNlbmRpZgorCisjaWZuZGVmIGNmaV9zdGFydHByb2MKKyMgZGVmaW5lIGNmaV9zdGFydHByb2MJLmNmaV9zdGFydHByb2MKKyNlbmRpZgorCisjaWZuZGVmIGNmaV9lbmRwcm9jCisjIGRlZmluZSBjZmlfZW5kcHJvYwkuY2ZpX2VuZHByb2MKKyNlbmRpZgorCisjaWZuZGVmIGNmaV9yZWxfb2Zmc2V0CisjIGRlZmluZSBjZmlfcmVsX29mZnNldChyZWcsIG9mZikJLmNmaV9yZWxfb2Zmc2V0IHJlZywgb2ZmCisjZW5kaWYKKworI2lmbmRlZiBjZmlfcmVzdG9yZQorIyBkZWZpbmUgY2ZpX3Jlc3RvcmUocmVnKQkuY2ZpX3Jlc3RvcmUgcmVnCisjZW5kaWYKKworI2lmbmRlZiBjZmlfYWRqdXN0X2NmYV9vZmZzZXQKKyMgZGVmaW5lIGNmaV9hZGp1c3RfY2ZhX29mZnNldChvZmYpCS5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgb2ZmCisjZW5kaWYKKworI2lmbmRlZiBFTlRSWQorIyBkZWZpbmUgRU5UUlkobmFtZSkJXAorCS50eXBlIG5hbWUsIEBmdW5jdGlvbjsJXAorCS5nbG9ibCBuYW1lOwlcCisJLnAyYWxpZ24gNDsJXAorbmFtZToJXAorCWNmaV9zdGFydHByb2MKKyNlbmRpZgorCisjaWZuZGVmIEVORAorIyBkZWZpbmUgRU5EKG5hbWUpCVwKKwljZmlfZW5kcHJvYzsJXAorCS5zaXplIG5hbWUsIC4tbmFtZQorI2VuZGlmCisKKyNkZWZpbmUgQ0ZJX1BVU0goUkVHKQlcCisJY2ZpX2FkanVzdF9jZmFfb2Zmc2V0ICg0KTsJXAorCWNmaV9yZWxfb2Zmc2V0IChSRUcsIDApCisKKyNkZWZpbmUgQ0ZJX1BPUChSRUcpCVwKKwljZmlfYWRqdXN0X2NmYV9vZmZzZXQgKC00KTsJXAorCWNmaV9yZXN0b3JlIChSRUcpCisKKyNkZWZpbmUgUFVTSChSRUcpCXB1c2hsIFJFRzsJQ0ZJX1BVU0ggKFJFRykKKyNkZWZpbmUgUE9QKFJFRykJcG9wbCBSRUc7CUNGSV9QT1AgKFJFRykKKworI2RlZmluZSBQQVJNUyAgOAorI2RlZmluZSBFTlRSQU5DRSBQVVNIKCVlZGkpOworI2RlZmluZSBSRVRVUk4gIFBPUCglZWRpKTsJcmV0OwlDRklfUFVTSCglZWRpKTsKKworI2RlZmluZSBTVFIxICBQQVJNUworI2RlZmluZSBTVFIyICBTVFIxKzQKKworCS50ZXh0CitFTlRSWSAod2NzcmNocikKKworCUVOVFJBTkNFCisJbW92CVNUUjEoJWVzcCksICVlY3gKKwltb3ZkCVNUUjIoJWVzcCksICV4bW0xCisKKwltb3YJJWVjeCwgJWVkaQorCXB1bnBja2xkcSAleG1tMSwgJXhtbTEKKwlweG9yCSV4bW0yLCAleG1tMgorCXB1bnBja2xkcSAleG1tMSwgJXhtbTEKKworLyogRUNYIGhhcyBPRkZTRVQuICovCisJYW5kCSQ2MywgJWVjeAorCWNtcAkkNDgsICVlY3gKKwlqYQlMKGNyb3NzY2FjaGUpCisKKy8qIHVuYWxpZ25lZCBzdHJpbmcuICovCisJbW92ZHF1CSglZWRpKSwgJXhtbTAKKwlwY21wZXFkCSV4bW0wLCAleG1tMgorCXBjbXBlcWQJJXhtbTEsICV4bW0wCisvKiBGaW5kIHdoZXJlIE5VTEwgaXMuICAqLworCXBtb3Ztc2tiICV4bW0yLCAlZWN4CisvKiBDaGVjayBpZiB0aGVyZSBpcyBhIG1hdGNoLiAgKi8KKwlwbW92bXNrYiAleG1tMCwgJWVheAorCWFkZAkkMTYsICVlZGkKKworCXRlc3QJJWVheCwgJWVheAorCWpueglMKHVuYWxpZ25lZF9tYXRjaDEpCisKKwl0ZXN0CSVlY3gsICVlY3gKKwlqbnoJTChyZXR1cm5fbnVsbCkKKworCWFuZAkkLTE2LCAlZWRpCisKKwlQVVNICSglZXNpKQorCisJeG9yCSVlZHgsICVlZHgKKwlqbXAJTChsb29wKQorCisJQ0ZJX1BPUAkoJWVzaSkKKworCS5wMmFsaWduIDQKK0wodW5hbGlnbmVkX21hdGNoMSk6CisJdGVzdAklZWN4LCAlZWN4CisJam56CUwocHJvbG9nX2ZpbmRfemVyb18xKQorCisJUFVTSAkoJWVzaSkKKworLyogU2F2ZSBjdXJyZW50IG1hdGNoICovCisJbW92CSVlYXgsICVlZHgKKwltb3YJJWVkaSwgJWVzaQorCWFuZAkkLTE2LCAlZWRpCisJam1wCUwobG9vcCkKKworCUNGSV9QT1AJKCVlc2kpCisKKwkucDJhbGlnbiA0CitMKGNyb3NzY2FjaGUpOgorLyogSGFuY2xlIHVuYWxpZ25lZCBzdHJpbmcuICAqLworCWFuZAkkMTUsICVlY3gKKwlhbmQJJC0xNiwgJWVkaQorCXB4b3IJJXhtbTMsICV4bW0zCisJbW92ZHFhCSglZWRpKSwgJXhtbTAKKwlwY21wZXFkCSV4bW0wLCAleG1tMworCXBjbXBlcWQJJXhtbTEsICV4bW0wCisvKiBGaW5kIHdoZXJlIE5VTEwgaXMuICAqLworCXBtb3Ztc2tiICV4bW0zLCAlZWR4CisvKiBDaGVjayBpZiB0aGVyZSBpcyBhIG1hdGNoLiAgKi8KKwlwbW92bXNrYiAleG1tMCwgJWVheAorLyogUmVtb3ZlIHRoZSBsZWFkaW5nIGJ5dGVzLiAgKi8KKwlzaHIJJWNsLCAlZWR4CisJc2hyCSVjbCwgJWVheAorCWFkZAkkMTYsICVlZGkKKworCXRlc3QJJWVheCwgJWVheAorCWpueglMKHVuYWxpZ25lZF9tYXRjaCkKKworCXRlc3QJJWVkeCwgJWVkeAorCWpueglMKHJldHVybl9udWxsKQorCisJUFVTSAkoJWVzaSkKKworCXhvcgklZWR4LCAlZWR4CisJam1wCUwobG9vcCkKKworCUNGSV9QT1AJKCVlc2kpCisKKwkucDJhbGlnbiA0CitMKHVuYWxpZ25lZF9tYXRjaCk6CisJdGVzdAklZWR4LCAlZWR4CisJam56CUwocHJvbG9nX2ZpbmRfemVybykKKworCVBVU0gJKCVlc2kpCisKKwltb3YJJWVheCwgJWVkeAorCWxlYQkoJWVkaSwgJWVjeCksICVlc2kKKworLyogTG9vcCBzdGFydCBvbiBhbGlnbmVkIHN0cmluZy4gICovCisJLnAyYWxpZ24gNAorTChsb29wKToKKwltb3ZkcWEJKCVlZGkpLCAleG1tMAorCXBjbXBlcWQJJXhtbTAsICV4bW0yCisJYWRkCSQxNiwgJWVkaQorCXBjbXBlcWQJJXhtbTEsICV4bW0wCisJcG1vdm1za2IgJXhtbTIsICVlY3gKKwlwbW92bXNrYiAleG1tMCwgJWVheAorCW9yCSVlYXgsICVlY3gKKwlqbnoJTChtYXRjaGVzKQorCisJbW92ZHFhCSglZWRpKSwgJXhtbTMKKwlwY21wZXFkCSV4bW0zLCAleG1tMgorCWFkZAkkMTYsICVlZGkKKwlwY21wZXFkCSV4bW0xLCAleG1tMworCXBtb3Ztc2tiICV4bW0yLCAlZWN4CisJcG1vdm1za2IgJXhtbTMsICVlYXgKKwlvcgklZWF4LCAlZWN4CisJam56CUwobWF0Y2hlcykKKworCW1vdmRxYQkoJWVkaSksICV4bW00CisJcGNtcGVxZAkleG1tNCwgJXhtbTIKKwlhZGQJJDE2LCAlZWRpCisJcGNtcGVxZAkleG1tMSwgJXhtbTQKKwlwbW92bXNrYiAleG1tMiwgJWVjeAorCXBtb3Ztc2tiICV4bW00LCAlZWF4CisJb3IJJWVheCwgJWVjeAorCWpueglMKG1hdGNoZXMpCisKKwltb3ZkcWEJKCVlZGkpLCAleG1tNQorCXBjbXBlcWQJJXhtbTUsICV4bW0yCisJYWRkCSQxNiwgJWVkaQorCXBjbXBlcWQJJXhtbTEsICV4bW01CisJcG1vdm1za2IgJXhtbTIsICVlY3gKKwlwbW92bXNrYiAleG1tNSwgJWVheAorCW9yCSVlYXgsICVlY3gKKwlqeglMKGxvb3ApCisKKwkucDJhbGlnbiA0CitMKG1hdGNoZXMpOgorCXRlc3QJJWVheCwgJWVheAorCWpueglMKG1hdGNoKQorTChyZXR1cm5fdmFsdWUpOgorCXRlc3QJJWVkeCwgJWVkeAorCWp6CUwocmV0dXJuX251bGxfMSkKKwltb3YJJWVkeCwgJWVheAorCW1vdgklZXNpLCAlZWRpCisKKwlQT1AJKCVlc2kpCisKKwl0ZXN0CSVhaCwgJWFoCisJam56CUwobWF0Y2hfdGhpcmRfb3JfZm91cnRoX3djaGFyKQorCXRlc3QJJDE1IDw8IDQsICVhbAorCWpueglMKG1hdGNoX3NlY29uZF93Y2hhcikKKwlsZWEJLTE2KCVlZGkpLCAlZWF4CisJUkVUVVJOCisKKwlDRklfUFVTSAkoJWVzaSkKKworCS5wMmFsaWduIDQKK0wocmV0dXJuX251bGxfMSk6CisJUE9QCSglZXNpKQorCisJeG9yCSVlYXgsICVlYXgKKwlSRVRVUk4KKworCUNGSV9QVVNICSglZXNpKQorCisJLnAyYWxpZ24gNAorTChtYXRjaCk6CisJcG1vdm1za2IgJXhtbTIsICVlY3gKKwl0ZXN0CSVlY3gsICVlY3gKKwlqbnoJTChmaW5kX3plcm8pCisvKiBzYXZlIG1hdGNoIGluZm8gKi8KKwltb3YJJWVheCwgJWVkeAorCW1vdgklZWRpLCAlZXNpCisJam1wCUwobG9vcCkKKworCS5wMmFsaWduIDQKK0woZmluZF96ZXJvKToKKwl0ZXN0CSVjbCwgJWNsCisJanoJTChmaW5kX3plcm9faW5fdGhpcmRfb3JfZm91cnRoX3djaGFyKQorCXRlc3QJJDE1LCAlY2wKKwlqeglMKGZpbmRfemVyb19pbl9zZWNvbmRfd2NoYXIpCisJYW5kCSQxLCAlZWF4CisJanoJTChyZXR1cm5fdmFsdWUpCisKKwlQT1AJKCVlc2kpCisKKwlsZWEJLTE2KCVlZGkpLCAlZWF4CisJUkVUVVJOCisKKwlDRklfUFVTSAkoJWVzaSkKKworCS5wMmFsaWduIDQKK0woZmluZF96ZXJvX2luX3NlY29uZF93Y2hhcik6CisJYW5kCSQxIDw8IDUgLSAxLCAlZWF4CisJanoJTChyZXR1cm5fdmFsdWUpCisKKwlQT1AJKCVlc2kpCisKKwl0ZXN0CSQxNSA8PCA0LCAlYWwKKwlqbnoJTChtYXRjaF9zZWNvbmRfd2NoYXIpCisJbGVhCS0xNiglZWRpKSwgJWVheAorCVJFVFVSTgorCisJQ0ZJX1BVU0gJKCVlc2kpCisKKwkucDJhbGlnbiA0CitMKGZpbmRfemVyb19pbl90aGlyZF9vcl9mb3VydGhfd2NoYXIpOgorCXRlc3QJJDE1LCAlY2gKKwlqeglMKGZpbmRfemVyb19pbl9mb3VydGhfd2NoYXIpCisJYW5kCSQxIDw8IDkgLSAxLCAlZWF4CisJanoJTChyZXR1cm5fdmFsdWUpCisKKwlQT1AJKCVlc2kpCisKKwl0ZXN0CSVhaCwgJWFoCisJam56CUwobWF0Y2hfdGhpcmRfd2NoYXIpCisJdGVzdAkkMTUgPDwgNCwgJWFsCisJam56CUwobWF0Y2hfc2Vjb25kX3djaGFyKQorCWxlYQktMTYoJWVkaSksICVlYXgKKwlSRVRVUk4KKworCUNGSV9QVVNICSglZXNpKQorCisJLnAyYWxpZ24gNAorTChmaW5kX3plcm9faW5fZm91cnRoX3djaGFyKToKKworCVBPUAkoJWVzaSkKKworCXRlc3QJJWFoLCAlYWgKKwlqbnoJTChtYXRjaF90aGlyZF9vcl9mb3VydGhfd2NoYXIpCisJdGVzdAkkMTUgPDwgNCwgJWFsCisJam56CUwobWF0Y2hfc2Vjb25kX3djaGFyKQorCWxlYQktMTYoJWVkaSksICVlYXgKKwlSRVRVUk4KKworCUNGSV9QVVNICSglZXNpKQorCisJLnAyYWxpZ24gNAorTChtYXRjaF9zZWNvbmRfd2NoYXIpOgorCWxlYQktMTIoJWVkaSksICVlYXgKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0wobWF0Y2hfdGhpcmRfb3JfZm91cnRoX3djaGFyKToKKwl0ZXN0CSQxNSA8PCA0LCAlYWgKKwlqbnoJTChtYXRjaF9mb3VydGhfd2NoYXIpCisJbGVhCS04KCVlZGkpLCAlZWF4CisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKG1hdGNoX3RoaXJkX3djaGFyKToKKwlsZWEJLTgoJWVkaSksICVlYXgKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0wobWF0Y2hfZm91cnRoX3djaGFyKToKKwlsZWEJLTQoJWVkaSksICVlYXgKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0wocmV0dXJuX251bGwpOgorCXhvcgklZWF4LCAlZWF4CisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKHByb2xvZ19maW5kX3plcm8pOgorCWFkZAklZWN4LCAlZWRpCisJbW92ICAgICAlZWR4LCAlZWN4CitMKHByb2xvZ19maW5kX3plcm9fMSk6CisJdGVzdAklY2wsICVjbAorCWp6CUwocHJvbG9nX2ZpbmRfemVyb19pbl90aGlyZF9vcl9mb3VydGhfd2NoYXIpCisJdGVzdAkkMTUsICVjbAorCWp6CUwocHJvbG9nX2ZpbmRfemVyb19pbl9zZWNvbmRfd2NoYXIpCisJYW5kCSQxLCAlZWF4CisJanoJTChyZXR1cm5fbnVsbCkKKworCWxlYQktMTYoJWVkaSksICVlYXgKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0wocHJvbG9nX2ZpbmRfemVyb19pbl9zZWNvbmRfd2NoYXIpOgorCWFuZAkkMSA8PCA1IC0gMSwgJWVheAorCWp6CUwocmV0dXJuX251bGwpCisKKwl0ZXN0CSQxNSA8PCA0LCAlYWwKKwlqbnoJTChtYXRjaF9zZWNvbmRfd2NoYXIpCisJbGVhCS0xNiglZWRpKSwgJWVheAorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChwcm9sb2dfZmluZF96ZXJvX2luX3RoaXJkX29yX2ZvdXJ0aF93Y2hhcik6CisJdGVzdAkkMTUsICVjaAorCWp6CUwocHJvbG9nX2ZpbmRfemVyb19pbl9mb3VydGhfd2NoYXIpCisJYW5kCSQxIDw8IDkgLSAxLCAlZWF4CisJanoJTChyZXR1cm5fbnVsbCkKKworCXRlc3QJJWFoLCAlYWgKKwlqbnoJTChtYXRjaF90aGlyZF93Y2hhcikKKwl0ZXN0CSQxNSA8PCA0LCAlYWwKKwlqbnoJTChtYXRjaF9zZWNvbmRfd2NoYXIpCisJbGVhCS0xNiglZWRpKSwgJWVheAorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChwcm9sb2dfZmluZF96ZXJvX2luX2ZvdXJ0aF93Y2hhcik6CisJdGVzdAklYWgsICVhaAorCWpueglMKG1hdGNoX3RoaXJkX29yX2ZvdXJ0aF93Y2hhcikKKwl0ZXN0CSQxNSA8PCA0LCAlYWwKKwlqbnoJTChtYXRjaF9zZWNvbmRfd2NoYXIpCisJbGVhCS0xNiglZWRpKSwgJWVheAorCVJFVFVSTgorCitFTkQgKHdjc3JjaHIpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N0cmluZy9zc3NlMy1iY29weS1hdG9tLlMgYi9saWJjL2FyY2gteDg2L3N0cmluZy9zc3NlMy1iY29weS1hdG9tLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTRiNzkxYQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc3RyaW5nL3Nzc2UzLWJjb3B5LWF0b20uUwpAQCAtMCwwICsxLDM1IEBACisvKgorQ29weXJpZ2h0IChjKSAyMDEwLCBJbnRlbCBDb3Jwb3JhdGlvbgorQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKworICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICAgICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKworICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICAgICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorICAgICogYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisKKyAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgSW50ZWwgQ29ycG9yYXRpb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgICAgKiBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAgICAqIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECitBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CitMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KK0FOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqLworCisKKyNkZWZpbmUgTUVNQ1BZCWJjb3B5CisjZGVmaW5lIFVTRV9BU19NRU1NT1ZFCisjZGVmaW5lIFVTRV9BU19CQ09QWQorI2luY2x1ZGUgInNzc2UzLW1lbWNweS1hdG9tLlMiCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N0cmluZy9zc3NlMy1tZW1jbXAtYXRvbS5TIGIvbGliYy9hcmNoLXg4Ni9zdHJpbmcvc3NzZTMtbWVtY21wLWF0b20uUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMzg3MDg0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9zdHJpbmcvc3NzZTMtbWVtY21wLWF0b20uUwpAQCAtMCwwICsxLDI0OTYgQEAKKy8qCitDb3B5cmlnaHQgKGMpIDIwMTAsIDIwMTEsIDIwMTIsIDIwMTMgSW50ZWwgQ29ycG9yYXRpb24KK0FsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisKKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAgICAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisKKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAgICAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAgICAqIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCisgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEludGVsIENvcnBvcmF0aW9uIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICAgICogbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgICAgKiB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKK1dBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKK0RJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKK0FOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCitBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKK1NPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKi8KKworI2lmbmRlZiBMCisjIGRlZmluZSBMKGxhYmVsKQkuTCMjbGFiZWwKKyNlbmRpZgorCisjaWZuZGVmIGNmaV9zdGFydHByb2MKKyMgZGVmaW5lIGNmaV9zdGFydHByb2MJLmNmaV9zdGFydHByb2MKKyNlbmRpZgorCisjaWZuZGVmIGNmaV9lbmRwcm9jCisjIGRlZmluZSBjZmlfZW5kcHJvYwkuY2ZpX2VuZHByb2MKKyNlbmRpZgorCisjaWZuZGVmIGNmaV9yZWxfb2Zmc2V0CisjIGRlZmluZSBjZmlfcmVsX29mZnNldChyZWcsIG9mZikJLmNmaV9yZWxfb2Zmc2V0IHJlZywgb2ZmCisjZW5kaWYKKworI2lmbmRlZiBjZmlfcmVzdG9yZQorIyBkZWZpbmUgY2ZpX3Jlc3RvcmUocmVnKQkuY2ZpX3Jlc3RvcmUgcmVnCisjZW5kaWYKKworI2lmbmRlZiBjZmlfYWRqdXN0X2NmYV9vZmZzZXQKKyMgZGVmaW5lIGNmaV9hZGp1c3RfY2ZhX29mZnNldChvZmYpCS5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgb2ZmCisjZW5kaWYKKworI2lmbmRlZiBjZmlfcmVtZW1iZXJfc3RhdGUKKyMgZGVmaW5lIGNmaV9yZW1lbWJlcl9zdGF0ZQkuY2ZpX3JlbWVtYmVyX3N0YXRlCisjZW5kaWYKKworI2lmbmRlZiBjZmlfcmVzdG9yZV9zdGF0ZQorIyBkZWZpbmUgY2ZpX3Jlc3RvcmVfc3RhdGUJLmNmaV9yZXN0b3JlX3N0YXRlCisjZW5kaWYKKworI2lmbmRlZiBFTlRSWQorIyBkZWZpbmUgRU5UUlkobmFtZSkgICAgICAgICAgICAgXAorCS50eXBlIG5hbWUsIEBmdW5jdGlvbjsgICBcCisJLmdsb2JsIG5hbWU7ICAgICAgICAgICAgIFwKKwkucDJhbGlnbiA0OyAgICAgICAgICAgICAgXAorbmFtZTogICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCWNmaV9zdGFydHByb2MKKyNlbmRpZgorCisjaWZuZGVmIEVORAorIyBkZWZpbmUgRU5EKG5hbWUpICAgICAgICAgICAgICAgXAorCWNmaV9lbmRwcm9jOyAgICAgICAgICAgICBcCisJLnNpemUgbmFtZSwgLi1uYW1lCisjZW5kaWYKKworI2lmbmRlZiBNRU1DTVAKKyMgZGVmaW5lIE1FTUNNUAltZW1jbXAKKyNlbmRpZgorCisjZGVmaW5lIENGSV9QVVNIKFJFRykJXAorCWNmaV9hZGp1c3RfY2ZhX29mZnNldCAoNCk7CVwKKwljZmlfcmVsX29mZnNldCAoUkVHLCAwKQorCisjZGVmaW5lIENGSV9QT1AoUkVHKQlcCisJY2ZpX2FkanVzdF9jZmFfb2Zmc2V0ICgtNCk7CVwKKwljZmlfcmVzdG9yZSAoUkVHKQorCisjZGVmaW5lIFBVU0goUkVHKQlwdXNobCBSRUc7IENGSV9QVVNIIChSRUcpCisjZGVmaW5lIFBPUChSRUcpCXBvcGwgUkVHOyBDRklfUE9QIChSRUcpCisKKyNkZWZpbmUgUEFSTVMJCTQKKyNkZWZpbmUgQkxLMQkJUEFSTVMKKyNkZWZpbmUgQkxLMgkJQkxLMSs0CisjZGVmaW5lIExFTgkJQkxLMis0CisjZGVmaW5lIFJFVFVSTl9FTkQJUE9QICglZWRpKTsgUE9QICglZXNpKTsgUE9QICglZWJ4KTsgcmV0CisjZGVmaW5lIFJFVFVSTgkJUkVUVVJOX0VORDsgY2ZpX3Jlc3RvcmVfc3RhdGU7IGNmaV9yZW1lbWJlcl9zdGF0ZQorCisvKiBXYXJuaW5nIQorICAgICAgICAgICB3bWVtY21wIGhhcyB0byB1c2UgU0lHTkVEIGNvbXBhcmlzb24gZm9yIGVsZW1lbnRzLgorICAgICAgICAgICBtZW1jbXAgaGFzIHRvIHVzZSBVTlNJR05FRCBjb21wYXJpc29uIGZvciBlbGVtbnRzLgorKi8KKworCS50ZXh0CitFTlRSWSAoTUVNQ01QKQorCW1vdmwJTEVOKCVlc3ApLCAlZWN4CisKKyNpZmRlZiBVU0VfV0NIQVIKKwlzaGwJJDIsICVlY3gKKwlqeglMKHplcm8pCisjZWxpZiBkZWZpbmVkIFVTRV9VVEYxNgorCXNobAkkMSwgJWVjeAorCWp6CUwoemVybykKKyNlbmRpZgorCisJbW92bAlCTEsxKCVlc3ApLCAlZWF4CisJY21wCSQ0OCwgJWVjeAorCW1vdmwJQkxLMiglZXNwKSwgJWVkeAorCWphZQlMKDQ4Ynl0ZXNvcm1vcmUpCisKKyNpZiAhZGVmaW5lZChVU0VfV0NIQVIpICYmICFkZWZpbmVkKFVTRV9VVEYxNikKKwljbXAJJDEsICVlY3gKKwlqYmUJTChsZXNzMWJ5dGVzKQorI2VuZGlmCisKKwlQVVNICSglZWJ4KQorCWFkZAklZWN4LCAlZWR4CisJYWRkCSVlY3gsICVlYXgKKwlqbXAJTChsZXNzNDhieXRlcykKKworCUNGSV9QT1AJKCVlYngpCisKKyNpZiAhZGVmaW5lZChVU0VfV0NIQVIpICYmICFkZWZpbmVkKFVTRV9VVEYxNikKKwkucDJhbGlnbiA0CitMKGxlc3MxYnl0ZXMpOgorCWpiCUwoemVybykKKwltb3ZiCSglZWF4KSwgJWNsCisJY21wCSglZWR4KSwgJWNsCisJamUJTCh6ZXJvKQorCW1vdgkkMSwgJWVheAorCWphCUwoMWJ5dGVzZW5kKQorCW5lZwklZWF4CitMKDFieXRlc2VuZCk6CisJcmV0CisjZW5kaWYKKworCS5wMmFsaWduIDQKK0woemVybyk6CisJeG9yCSVlYXgsICVlYXgKKwlyZXQKKworCS5wMmFsaWduIDQKK0woNDhieXRlc29ybW9yZSk6CisJUFVTSAkoJWVieCkKKwlQVVNICSglZXNpKQorCVBVU0gJKCVlZGkpCisJY2ZpX3JlbWVtYmVyX3N0YXRlCisJbW92ZHF1CSglZWF4KSwgJXhtbTMKKwltb3ZkcXUJKCVlZHgpLCAleG1tMAorCW1vdmwJJWVheCwgJWVkaQorCW1vdmwJJWVkeCwgJWVzaQorCXBjbXBlcWIJJXhtbTAsICV4bW0zCisJcG1vdm1za2IgJXhtbTMsICVlZHgKKwlsZWEJMTYoJWVkaSksICVlZGkKKworCXN1YgkkMHhmZmZmLCAlZWR4CisJbGVhCTE2KCVlc2kpLCAlZXNpCisJam56CUwobGVzczE2Ynl0ZXMpCisJbW92CSVlZGksICVlZHgKKwlhbmQJJDB4ZiwgJWVkeAorCXhvcgklZWR4LCAlZWRpCisJc3ViCSVlZHgsICVlc2kKKwlhZGQJJWVkeCwgJWVjeAorCW1vdgklZXNpLCAlZWR4CisJYW5kCSQweGYsICVlZHgKKwlqeglMKHNocl8wKQorCXhvcgklZWR4LCAlZXNpCisKKyNpZiAhZGVmaW5lZChVU0VfV0NIQVIpICYmICFkZWZpbmVkKFVTRV9VVEYxNikKKwljbXAJJDgsICVlZHgKKwlqYWUJTChuZXh0X3VuYWxpZ25lZF90YWJsZSkKKwljbXAJJDAsICVlZHgKKwlqZQlMKHNocl8wKQorCWNtcAkkMSwgJWVkeAorCWplCUwoc2hyXzEpCisJY21wCSQyLCAlZWR4CisJamUJTChzaHJfMikKKwljbXAJJDMsICVlZHgKKwlqZQlMKHNocl8zKQorCWNtcAkkNCwgJWVkeAorCWplCUwoc2hyXzQpCisJY21wCSQ1LCAlZWR4CisJamUJTChzaHJfNSkKKwljbXAJJDYsICVlZHgKKwlqZQlMKHNocl82KQorCWptcAlMKHNocl83KQorCisJLnAyYWxpZ24gMgorTChuZXh0X3VuYWxpZ25lZF90YWJsZSk6CisJY21wCSQ4LCAlZWR4CisJamUJTChzaHJfOCkKKwljbXAJJDksICVlZHgKKwlqZQlMKHNocl85KQorCWNtcAkkMTAsICVlZHgKKwlqZQlMKHNocl8xMCkKKwljbXAJJDExLCAlZWR4CisJamUJTChzaHJfMTEpCisJY21wCSQxMiwgJWVkeAorCWplCUwoc2hyXzEyKQorCWNtcAkkMTMsICVlZHgKKwlqZQlMKHNocl8xMykKKwljbXAJJDE0LCAlZWR4CisJamUJTChzaHJfMTQpCisJam1wCUwoc2hyXzE1KQorI2VsaWYgZGVmaW5lZChVU0VfV0NIQVIpCisJY21wCSQwLCAlZWR4CisJamUJTChzaHJfMCkKKwljbXAJJDQsICVlZHgKKwlqZQlMKHNocl80KQorCWNtcAkkOCwgJWVkeAorCWplCUwoc2hyXzgpCisJam1wCUwoc2hyXzEyKQorI2VsaWYgZGVmaW5lZChVU0VfVVRGMTYpCisJY21wCSQwLCAlZWR4CisJamUJTChzaHJfMCkKKwljbXAJJDIsICVlZHgKKwlqZQlMKHNocl8yKQorCWNtcAkkNCwgJWVkeAorCWplCUwoc2hyXzQpCisJY21wCSQ2LCAlZWR4CisJamUJTChzaHJfNikKKwljbXAJJDgsICVlZHgKKwlqZQlMKHNocl84KQorCWNtcAkkMTAsICVlZHgKKwlqZQlMKHNocl8xMCkKKwljbXAJJDEyLCAlZWR4CisJamUJTChzaHJfMTIpCisJam1wCUwoc2hyXzE0KQorI2VuZGlmCisKKwkucDJhbGlnbiA0CitMKHNocl8wKToKKwljbXAJJDgwLCAlZWN4CisJamFlCUwoc2hyXzBfZ29iYmxlKQorCWxlYQktNDgoJWVjeCksICVlY3gKKwl4b3IJJWVheCwgJWVheAorCW1vdmFwcwkoJWVzaSksICV4bW0xCisJcGNtcGVxYgkoJWVkaSksICV4bW0xCisJbW92YXBzCTE2KCVlc2kpLCAleG1tMgorCXBjbXBlcWIJMTYoJWVkaSksICV4bW0yCisJcGFuZAkleG1tMSwgJXhtbTIKKwlwbW92bXNrYiAleG1tMiwgJWVkeAorCWFkZAkkMzIsICVlZGkKKwlhZGQJJDMyLCAlZXNpCisJc3ViCSQweGZmZmYsICVlZHgKKwlqbnoJTChleGl0KQorCisJbGVhCSglZWN4LCAlZWRpLDEpLCAlZWF4CisJbGVhCSglZWN4LCAlZXNpLDEpLCAlZWR4CisJUE9QCSglZWRpKQorCVBPUAkoJWVzaSkKKwlqbXAJTChsZXNzNDhieXRlcykKKworCWNmaV9yZXN0b3JlX3N0YXRlCisJY2ZpX3JlbWVtYmVyX3N0YXRlCisJLnAyYWxpZ24gNAorTChzaHJfMF9nb2JibGUpOgorCWxlYQktNDgoJWVjeCksICVlY3gKKwltb3ZkcWEJKCVlc2kpLCAleG1tMAorCXhvcgklZWF4LCAlZWF4CisJcGNtcGVxYgkoJWVkaSksICV4bW0wCisJc3ViCSQzMiwgJWVjeAorCW1vdmRxYQkxNiglZXNpKSwgJXhtbTIKKwlwY21wZXFiCTE2KCVlZGkpLCAleG1tMgorTChzaHJfMF9nb2JibGVfbG9vcCk6CisJcGFuZAkleG1tMCwgJXhtbTIKKwlzdWIJJDMyLCAlZWN4CisJcG1vdm1za2IgJXhtbTIsICVlZHgKKwltb3ZkcWEJJXhtbTAsICV4bW0xCisJbW92ZHFhCTMyKCVlc2kpLCAleG1tMAorCW1vdmRxYQk0OCglZXNpKSwgJXhtbTIKKwlzYmIJJDB4ZmZmZiwgJWVkeAorCXBjbXBlcWIJMzIoJWVkaSksICV4bW0wCisJcGNtcGVxYgk0OCglZWRpKSwgJXhtbTIKKwlsZWEJMzIoJWVkaSksICVlZGkKKwlsZWEJMzIoJWVzaSksICVlc2kKKwlqeglMKHNocl8wX2dvYmJsZV9sb29wKQorCisJcGFuZAkleG1tMCwgJXhtbTIKKwljbXAJJDAsICVlY3gKKwlqZ2UJTChzaHJfMF9nb2JibGVfbG9vcF9uZXh0KQorCWluYwklZWR4CisJYWRkCSQzMiwgJWVjeAorTChzaHJfMF9nb2JibGVfbG9vcF9uZXh0KToKKwl0ZXN0CSVlZHgsICVlZHgKKwlqbnoJTChleGl0KQorCisJcG1vdm1za2IgJXhtbTIsICVlZHgKKwltb3ZkcWEJJXhtbTAsICV4bW0xCisJbGVhCTMyKCVlZGkpLCAlZWRpCisJbGVhCTMyKCVlc2kpLCAlZXNpCisJc3ViCSQweGZmZmYsICVlZHgKKwlqbnoJTChleGl0KQorCWxlYQkoJWVjeCwgJWVkaSwxKSwgJWVheAorCWxlYQkoJWVjeCwgJWVzaSwxKSwgJWVkeAorCVBPUAkoJWVkaSkKKwlQT1AJKCVlc2kpCisJam1wCUwobGVzczQ4Ynl0ZXMpCisKKyNpZiAhZGVmaW5lZChVU0VfV0NIQVIpICYmICFkZWZpbmVkKFVTRV9VVEYxNikKKwljZmlfcmVzdG9yZV9zdGF0ZQorCWNmaV9yZW1lbWJlcl9zdGF0ZQorCS5wMmFsaWduIDQKK0woc2hyXzEpOgorCWNtcAkkODAsICVlY3gKKwlsZWEJLTQ4KCVlY3gpLCAlZWN4CisJbW92CSVlZHgsICVlYXgKKwlqYWUJTChzaHJfMV9nb2JibGUpCisKKwltb3ZkcWEJMTYoJWVzaSksICV4bW0xCisJbW92ZHFhCSV4bW0xLCAleG1tMgorCXBhbGlnbnIJJDEsKCVlc2kpLCAleG1tMQorCXBjbXBlcWIJKCVlZGkpLCAleG1tMQorCisJbW92ZHFhCTMyKCVlc2kpLCAleG1tMworCXBhbGlnbnIJJDEsJXhtbTIsICV4bW0zCisJcGNtcGVxYgkxNiglZWRpKSwgJXhtbTMKKworCXBhbmQJJXhtbTEsICV4bW0zCisJcG1vdm1za2IgJXhtbTMsICVlZHgKKwlsZWEJMzIoJWVkaSksICVlZGkKKwlsZWEJMzIoJWVzaSksICVlc2kKKwlzdWIJJDB4ZmZmZiwgJWVkeAorCWpueglMKGV4aXQpCisJbGVhCSglZWN4LCAlZWRpLDEpLCAlZWF4CisJbGVhCTEoJWVjeCwgJWVzaSwxKSwgJWVkeAorCVBPUAkoJWVkaSkKKwlQT1AJKCVlc2kpCisJam1wCUwobGVzczQ4Ynl0ZXMpCisKKwljZmlfcmVzdG9yZV9zdGF0ZQorCWNmaV9yZW1lbWJlcl9zdGF0ZQorCS5wMmFsaWduIDQKK0woc2hyXzFfZ29iYmxlKToKKwlzdWIJJDMyLCAlZWN4CisJbW92ZHFhCTE2KCVlc2kpLCAleG1tMAorCXBhbGlnbnIJJDEsKCVlc2kpLCAleG1tMAorCXBjbXBlcWIJKCVlZGkpLCAleG1tMAorCisJbW92ZHFhCTMyKCVlc2kpLCAleG1tMworCXBhbGlnbnIJJDEsMTYoJWVzaSksICV4bW0zCisJcGNtcGVxYgkxNiglZWRpKSwgJXhtbTMKKworTChzaHJfMV9nb2JibGVfbG9vcCk6CisJcGFuZAkleG1tMCwgJXhtbTMKKwlzdWIJJDMyLCAlZWN4CisJcG1vdm1za2IgJXhtbTMsICVlZHgKKwltb3ZkcWEJJXhtbTAsICV4bW0xCisKKwltb3ZkcWEJNjQoJWVzaSksICV4bW0zCisJcGFsaWducgkkMSw0OCglZXNpKSwgJXhtbTMKKwlzYmIJJDB4ZmZmZiwgJWVkeAorCW1vdmRxYQk0OCglZXNpKSwgJXhtbTAKKwlwYWxpZ25yCSQxLDMyKCVlc2kpLCAleG1tMAorCXBjbXBlcWIJMzIoJWVkaSksICV4bW0wCisJbGVhCTMyKCVlc2kpLCAlZXNpCisJcGNtcGVxYgk0OCglZWRpKSwgJXhtbTMKKworCWxlYQkzMiglZWRpKSwgJWVkaQorCWp6CUwoc2hyXzFfZ29iYmxlX2xvb3ApCisJcGFuZAkleG1tMCwgJXhtbTMKKworCWNtcAkkMCwgJWVjeAorCWpnZQlMKHNocl8xX2dvYmJsZV9uZXh0KQorCWluYwklZWR4CisJYWRkCSQzMiwgJWVjeAorTChzaHJfMV9nb2JibGVfbmV4dCk6CisJdGVzdAklZWR4LCAlZWR4CisJam56CUwoZXhpdCkKKworCXBtb3Ztc2tiICV4bW0zLCAlZWR4CisJbW92ZHFhCSV4bW0wLCAleG1tMQorCWxlYQkzMiglZWRpKSwgJWVkaQorCWxlYQkzMiglZXNpKSwgJWVzaQorCXN1YgkkMHhmZmZmLCAlZWR4CisJam56CUwoZXhpdCkKKworCWxlYQkoJWVjeCwgJWVkaSwxKSwgJWVheAorCWxlYQkxKCVlY3gsICVlc2ksMSksICVlZHgKKwlQT1AJKCVlZGkpCisJUE9QCSglZXNpKQorCWptcAlMKGxlc3M0OGJ5dGVzKQorI2VuZGlmCisKKworI2lmICFkZWZpbmVkKFVTRV9XQ0hBUikKKwljZmlfcmVzdG9yZV9zdGF0ZQorCWNmaV9yZW1lbWJlcl9zdGF0ZQorCS5wMmFsaWduIDQKK0woc2hyXzIpOgorCWNtcAkkODAsICVlY3gKKwlsZWEJLTQ4KCVlY3gpLCAlZWN4CisJbW92CSVlZHgsICVlYXgKKwlqYWUJTChzaHJfMl9nb2JibGUpCisKKwltb3ZkcWEJMTYoJWVzaSksICV4bW0xCisJbW92ZHFhCSV4bW0xLCAleG1tMgorCXBhbGlnbnIJJDIsKCVlc2kpLCAleG1tMQorCXBjbXBlcWIJKCVlZGkpLCAleG1tMQorCisJbW92ZHFhCTMyKCVlc2kpLCAleG1tMworCXBhbGlnbnIJJDIsJXhtbTIsICV4bW0zCisJcGNtcGVxYgkxNiglZWRpKSwgJXhtbTMKKworCXBhbmQJJXhtbTEsICV4bW0zCisJcG1vdm1za2IgJXhtbTMsICVlZHgKKwlsZWEJMzIoJWVkaSksICVlZGkKKwlsZWEJMzIoJWVzaSksICVlc2kKKwlzdWIJJDB4ZmZmZiwgJWVkeAorCWpueglMKGV4aXQpCisJbGVhCSglZWN4LCAlZWRpLDEpLCAlZWF4CisJbGVhCTIoJWVjeCwgJWVzaSwxKSwgJWVkeAorCVBPUAkoJWVkaSkKKwlQT1AJKCVlc2kpCisJam1wCUwobGVzczQ4Ynl0ZXMpCisKKwljZmlfcmVzdG9yZV9zdGF0ZQorCWNmaV9yZW1lbWJlcl9zdGF0ZQorCS5wMmFsaWduIDQKK0woc2hyXzJfZ29iYmxlKToKKwlzdWIJJDMyLCAlZWN4CisJbW92ZHFhCTE2KCVlc2kpLCAleG1tMAorCXBhbGlnbnIJJDIsKCVlc2kpLCAleG1tMAorCXBjbXBlcWIJKCVlZGkpLCAleG1tMAorCisJbW92ZHFhCTMyKCVlc2kpLCAleG1tMworCXBhbGlnbnIJJDIsMTYoJWVzaSksICV4bW0zCisJcGNtcGVxYgkxNiglZWRpKSwgJXhtbTMKKworTChzaHJfMl9nb2JibGVfbG9vcCk6CisJcGFuZAkleG1tMCwgJXhtbTMKKwlzdWIJJDMyLCAlZWN4CisJcG1vdm1za2IgJXhtbTMsICVlZHgKKwltb3ZkcWEJJXhtbTAsICV4bW0xCisKKwltb3ZkcWEJNjQoJWVzaSksICV4bW0zCisJcGFsaWducgkkMiw0OCglZXNpKSwgJXhtbTMKKwlzYmIJJDB4ZmZmZiwgJWVkeAorCW1vdmRxYQk0OCglZXNpKSwgJXhtbTAKKwlwYWxpZ25yCSQyLDMyKCVlc2kpLCAleG1tMAorCXBjbXBlcWIJMzIoJWVkaSksICV4bW0wCisJbGVhCTMyKCVlc2kpLCAlZXNpCisJcGNtcGVxYgk0OCglZWRpKSwgJXhtbTMKKworCWxlYQkzMiglZWRpKSwgJWVkaQorCWp6CUwoc2hyXzJfZ29iYmxlX2xvb3ApCisJcGFuZAkleG1tMCwgJXhtbTMKKworCWNtcAkkMCwgJWVjeAorCWpnZQlMKHNocl8yX2dvYmJsZV9uZXh0KQorCWluYwklZWR4CisJYWRkCSQzMiwgJWVjeAorTChzaHJfMl9nb2JibGVfbmV4dCk6CisJdGVzdAklZWR4LCAlZWR4CisJam56CUwoZXhpdCkKKworCXBtb3Ztc2tiICV4bW0zLCAlZWR4CisJbW92ZHFhCSV4bW0wLCAleG1tMQorCWxlYQkzMiglZWRpKSwgJWVkaQorCWxlYQkzMiglZXNpKSwgJWVzaQorCXN1YgkkMHhmZmZmLCAlZWR4CisJam56CUwoZXhpdCkKKworCWxlYQkoJWVjeCwgJWVkaSwxKSwgJWVheAorCWxlYQkyKCVlY3gsICVlc2ksMSksICVlZHgKKwlQT1AJKCVlZGkpCisJUE9QCSglZXNpKQorCWptcAlMKGxlc3M0OGJ5dGVzKQorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChVU0VfV0NIQVIpICYmICFkZWZpbmVkKFVTRV9VVEYxNikKKwljZmlfcmVzdG9yZV9zdGF0ZQorCWNmaV9yZW1lbWJlcl9zdGF0ZQorCS5wMmFsaWduIDQKK0woc2hyXzMpOgorCWNtcAkkODAsICVlY3gKKwlsZWEJLTQ4KCVlY3gpLCAlZWN4CisJbW92CSVlZHgsICVlYXgKKwlqYWUJTChzaHJfM19nb2JibGUpCisKKwltb3ZkcWEJMTYoJWVzaSksICV4bW0xCisJbW92ZHFhCSV4bW0xLCAleG1tMgorCXBhbGlnbnIJJDMsKCVlc2kpLCAleG1tMQorCXBjbXBlcWIJKCVlZGkpLCAleG1tMQorCisJbW92ZHFhCTMyKCVlc2kpLCAleG1tMworCXBhbGlnbnIJJDMsJXhtbTIsICV4bW0zCisJcGNtcGVxYgkxNiglZWRpKSwgJXhtbTMKKworCXBhbmQJJXhtbTEsICV4bW0zCisJcG1vdm1za2IgJXhtbTMsICVlZHgKKwlsZWEJMzIoJWVkaSksICVlZGkKKwlsZWEJMzIoJWVzaSksICVlc2kKKwlzdWIJJDB4ZmZmZiwgJWVkeAorCWpueglMKGV4aXQpCisJbGVhCSglZWN4LCAlZWRpLDEpLCAlZWF4CisJbGVhCTMoJWVjeCwgJWVzaSwxKSwgJWVkeAorCVBPUAkoJWVkaSkKKwlQT1AJKCVlc2kpCisJam1wCUwobGVzczQ4Ynl0ZXMpCisKKwljZmlfcmVzdG9yZV9zdGF0ZQorCWNmaV9yZW1lbWJlcl9zdGF0ZQorCS5wMmFsaWduIDQKK0woc2hyXzNfZ29iYmxlKToKKwlzdWIJJDMyLCAlZWN4CisJbW92ZHFhCTE2KCVlc2kpLCAleG1tMAorCXBhbGlnbnIJJDMsKCVlc2kpLCAleG1tMAorCXBjbXBlcWIJKCVlZGkpLCAleG1tMAorCisJbW92ZHFhCTMyKCVlc2kpLCAleG1tMworCXBhbGlnbnIJJDMsMTYoJWVzaSksICV4bW0zCisJcGNtcGVxYgkxNiglZWRpKSwgJXhtbTMKKworTChzaHJfM19nb2JibGVfbG9vcCk6CisJcGFuZAkleG1tMCwgJXhtbTMKKwlzdWIJJDMyLCAlZWN4CisJcG1vdm1za2IgJXhtbTMsICVlZHgKKwltb3ZkcWEJJXhtbTAsICV4bW0xCisKKwltb3ZkcWEJNjQoJWVzaSksICV4bW0zCisJcGFsaWducgkkMyw0OCglZXNpKSwgJXhtbTMKKwlzYmIJJDB4ZmZmZiwgJWVkeAorCW1vdmRxYQk0OCglZXNpKSwgJXhtbTAKKwlwYWxpZ25yCSQzLDMyKCVlc2kpLCAleG1tMAorCXBjbXBlcWIJMzIoJWVkaSksICV4bW0wCisJbGVhCTMyKCVlc2kpLCAlZXNpCisJcGNtcGVxYgk0OCglZWRpKSwgJXhtbTMKKworCWxlYQkzMiglZWRpKSwgJWVkaQorCWp6CUwoc2hyXzNfZ29iYmxlX2xvb3ApCisJcGFuZAkleG1tMCwgJXhtbTMKKworCWNtcAkkMCwgJWVjeAorCWpnZQlMKHNocl8zX2dvYmJsZV9uZXh0KQorCWluYwklZWR4CisJYWRkCSQzMiwgJWVjeAorTChzaHJfM19nb2JibGVfbmV4dCk6CisJdGVzdAklZWR4LCAlZWR4CisJam56CUwoZXhpdCkKKworCXBtb3Ztc2tiICV4bW0zLCAlZWR4CisJbW92ZHFhCSV4bW0wLCAleG1tMQorCWxlYQkzMiglZWRpKSwgJWVkaQorCWxlYQkzMiglZXNpKSwgJWVzaQorCXN1YgkkMHhmZmZmLCAlZWR4CisJam56CUwoZXhpdCkKKworCWxlYQkoJWVjeCwgJWVkaSwxKSwgJWVheAorCWxlYQkzKCVlY3gsICVlc2ksMSksICVlZHgKKwlQT1AJKCVlZGkpCisJUE9QCSglZXNpKQorCWptcAlMKGxlc3M0OGJ5dGVzKQorI2VuZGlmCisKKwljZmlfcmVzdG9yZV9zdGF0ZQorCWNmaV9yZW1lbWJlcl9zdGF0ZQorCS5wMmFsaWduIDQKK0woc2hyXzQpOgorCWNtcAkkODAsICVlY3gKKwlsZWEJLTQ4KCVlY3gpLCAlZWN4CisJbW92CSVlZHgsICVlYXgKKwlqYWUJTChzaHJfNF9nb2JibGUpCisKKwltb3ZkcWEJMTYoJWVzaSksICV4bW0xCisJbW92ZHFhCSV4bW0xLCAleG1tMgorCXBhbGlnbnIJJDQsKCVlc2kpLCAleG1tMQorCXBjbXBlcWIJKCVlZGkpLCAleG1tMQorCisJbW92ZHFhCTMyKCVlc2kpLCAleG1tMworCXBhbGlnbnIJJDQsJXhtbTIsICV4bW0zCisJcGNtcGVxYgkxNiglZWRpKSwgJXhtbTMKKworCXBhbmQJJXhtbTEsICV4bW0zCisJcG1vdm1za2IgJXhtbTMsICVlZHgKKwlsZWEJMzIoJWVkaSksICVlZGkKKwlsZWEJMzIoJWVzaSksICVlc2kKKwlzdWIJJDB4ZmZmZiwgJWVkeAorCWpueglMKGV4aXQpCisJbGVhCSglZWN4LCAlZWRpLDEpLCAlZWF4CisJbGVhCTQoJWVjeCwgJWVzaSwxKSwgJWVkeAorCVBPUAkoJWVkaSkKKwlQT1AJKCVlc2kpCisJam1wCUwobGVzczQ4Ynl0ZXMpCisKKwljZmlfcmVzdG9yZV9zdGF0ZQorCWNmaV9yZW1lbWJlcl9zdGF0ZQorCS5wMmFsaWduIDQKK0woc2hyXzRfZ29iYmxlKToKKwlzdWIJJDMyLCAlZWN4CisJbW92ZHFhCTE2KCVlc2kpLCAleG1tMAorCXBhbGlnbnIJJDQsKCVlc2kpLCAleG1tMAorCXBjbXBlcWIJKCVlZGkpLCAleG1tMAorCisJbW92ZHFhCTMyKCVlc2kpLCAleG1tMworCXBhbGlnbnIJJDQsMTYoJWVzaSksICV4bW0zCisJcGNtcGVxYgkxNiglZWRpKSwgJXhtbTMKKworTChzaHJfNF9nb2JibGVfbG9vcCk6CisJcGFuZAkleG1tMCwgJXhtbTMKKwlzdWIJJDMyLCAlZWN4CisJcG1vdm1za2IgJXhtbTMsICVlZHgKKwltb3ZkcWEJJXhtbTAsICV4bW0xCisKKwltb3ZkcWEJNjQoJWVzaSksICV4bW0zCisJcGFsaWducgkkNCw0OCglZXNpKSwgJXhtbTMKKwlzYmIJJDB4ZmZmZiwgJWVkeAorCW1vdmRxYQk0OCglZXNpKSwgJXhtbTAKKwlwYWxpZ25yCSQ0LDMyKCVlc2kpLCAleG1tMAorCXBjbXBlcWIJMzIoJWVkaSksICV4bW0wCisJbGVhCTMyKCVlc2kpLCAlZXNpCisJcGNtcGVxYgk0OCglZWRpKSwgJXhtbTMKKworCWxlYQkzMiglZWRpKSwgJWVkaQorCWp6CUwoc2hyXzRfZ29iYmxlX2xvb3ApCisJcGFuZAkleG1tMCwgJXhtbTMKKworCWNtcAkkMCwgJWVjeAorCWpnZQlMKHNocl80X2dvYmJsZV9uZXh0KQorCWluYwklZWR4CisJYWRkCSQzMiwgJWVjeAorTChzaHJfNF9nb2JibGVfbmV4dCk6CisJdGVzdAklZWR4LCAlZWR4CisJam56CUwoZXhpdCkKKworCXBtb3Ztc2tiICV4bW0zLCAlZWR4CisJbW92ZHFhCSV4bW0wLCAleG1tMQorCWxlYQkzMiglZWRpKSwgJWVkaQorCWxlYQkzMiglZXNpKSwgJWVzaQorCXN1YgkkMHhmZmZmLCAlZWR4CisJam56CUwoZXhpdCkKKworCWxlYQkoJWVjeCwgJWVkaSwxKSwgJWVheAorCWxlYQk0KCVlY3gsICVlc2ksMSksICVlZHgKKwlQT1AJKCVlZGkpCisJUE9QCSglZXNpKQorCWptcAlMKGxlc3M0OGJ5dGVzKQorCisjaWYgIWRlZmluZWQoVVNFX1dDSEFSKSAmJiAhZGVmaW5lZChVU0VfVVRGMTYpCisJY2ZpX3Jlc3RvcmVfc3RhdGUKKwljZmlfcmVtZW1iZXJfc3RhdGUKKwkucDJhbGlnbiA0CitMKHNocl81KToKKwljbXAJJDgwLCAlZWN4CisJbGVhCS00OCglZWN4KSwgJWVjeAorCW1vdgklZWR4LCAlZWF4CisJamFlCUwoc2hyXzVfZ29iYmxlKQorCisJbW92ZHFhCTE2KCVlc2kpLCAleG1tMQorCW1vdmRxYQkleG1tMSwgJXhtbTIKKwlwYWxpZ25yCSQ1LCglZXNpKSwgJXhtbTEKKwlwY21wZXFiCSglZWRpKSwgJXhtbTEKKworCW1vdmRxYQkzMiglZXNpKSwgJXhtbTMKKwlwYWxpZ25yCSQ1LCV4bW0yLCAleG1tMworCXBjbXBlcWIJMTYoJWVkaSksICV4bW0zCisKKwlwYW5kCSV4bW0xLCAleG1tMworCXBtb3Ztc2tiICV4bW0zLCAlZWR4CisJbGVhCTMyKCVlZGkpLCAlZWRpCisJbGVhCTMyKCVlc2kpLCAlZXNpCisJc3ViCSQweGZmZmYsICVlZHgKKwlqbnoJTChleGl0KQorCWxlYQkoJWVjeCwgJWVkaSwxKSwgJWVheAorCWxlYQk1KCVlY3gsICVlc2ksMSksICVlZHgKKwlQT1AJKCVlZGkpCisJUE9QCSglZXNpKQorCWptcAlMKGxlc3M0OGJ5dGVzKQorCisJY2ZpX3Jlc3RvcmVfc3RhdGUKKwljZmlfcmVtZW1iZXJfc3RhdGUKKwkucDJhbGlnbiA0CitMKHNocl81X2dvYmJsZSk6CisJc3ViCSQzMiwgJWVjeAorCW1vdmRxYQkxNiglZXNpKSwgJXhtbTAKKwlwYWxpZ25yCSQ1LCglZXNpKSwgJXhtbTAKKwlwY21wZXFiCSglZWRpKSwgJXhtbTAKKworCW1vdmRxYQkzMiglZXNpKSwgJXhtbTMKKwlwYWxpZ25yCSQ1LDE2KCVlc2kpLCAleG1tMworCXBjbXBlcWIJMTYoJWVkaSksICV4bW0zCisKK0woc2hyXzVfZ29iYmxlX2xvb3ApOgorCXBhbmQJJXhtbTAsICV4bW0zCisJc3ViCSQzMiwgJWVjeAorCXBtb3Ztc2tiICV4bW0zLCAlZWR4CisJbW92ZHFhCSV4bW0wLCAleG1tMQorCisJbW92ZHFhCTY0KCVlc2kpLCAleG1tMworCXBhbGlnbnIJJDUsNDgoJWVzaSksICV4bW0zCisJc2JiCSQweGZmZmYsICVlZHgKKwltb3ZkcWEJNDgoJWVzaSksICV4bW0wCisJcGFsaWducgkkNSwzMiglZXNpKSwgJXhtbTAKKwlwY21wZXFiCTMyKCVlZGkpLCAleG1tMAorCWxlYQkzMiglZXNpKSwgJWVzaQorCXBjbXBlcWIJNDgoJWVkaSksICV4bW0zCisKKwlsZWEJMzIoJWVkaSksICVlZGkKKwlqeglMKHNocl81X2dvYmJsZV9sb29wKQorCXBhbmQJJXhtbTAsICV4bW0zCisKKwljbXAJJDAsICVlY3gKKwlqZ2UJTChzaHJfNV9nb2JibGVfbmV4dCkKKwlpbmMJJWVkeAorCWFkZAkkMzIsICVlY3gKK0woc2hyXzVfZ29iYmxlX25leHQpOgorCXRlc3QJJWVkeCwgJWVkeAorCWpueglMKGV4aXQpCisKKwlwbW92bXNrYiAleG1tMywgJWVkeAorCW1vdmRxYQkleG1tMCwgJXhtbTEKKwlsZWEJMzIoJWVkaSksICVlZGkKKwlsZWEJMzIoJWVzaSksICVlc2kKKwlzdWIJJDB4ZmZmZiwgJWVkeAorCWpueglMKGV4aXQpCisKKwlsZWEJKCVlY3gsICVlZGksMSksICVlYXgKKwlsZWEJNSglZWN4LCAlZXNpLDEpLCAlZWR4CisJUE9QCSglZWRpKQorCVBPUAkoJWVzaSkKKwlqbXAJTChsZXNzNDhieXRlcykKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoVVNFX1dDSEFSKQorCWNmaV9yZXN0b3JlX3N0YXRlCisJY2ZpX3JlbWVtYmVyX3N0YXRlCisJLnAyYWxpZ24gNAorTChzaHJfNik6CisJY21wCSQ4MCwgJWVjeAorCWxlYQktNDgoJWVjeCksICVlY3gKKwltb3YJJWVkeCwgJWVheAorCWphZQlMKHNocl82X2dvYmJsZSkKKworCW1vdmRxYQkxNiglZXNpKSwgJXhtbTEKKwltb3ZkcWEJJXhtbTEsICV4bW0yCisJcGFsaWducgkkNiwoJWVzaSksICV4bW0xCisJcGNtcGVxYgkoJWVkaSksICV4bW0xCisKKwltb3ZkcWEJMzIoJWVzaSksICV4bW0zCisJcGFsaWducgkkNiwleG1tMiwgJXhtbTMKKwlwY21wZXFiCTE2KCVlZGkpLCAleG1tMworCisJcGFuZAkleG1tMSwgJXhtbTMKKwlwbW92bXNrYiAleG1tMywgJWVkeAorCWxlYQkzMiglZWRpKSwgJWVkaQorCWxlYQkzMiglZXNpKSwgJWVzaQorCXN1YgkkMHhmZmZmLCAlZWR4CisJam56CUwoZXhpdCkKKwlsZWEJKCVlY3gsICVlZGksMSksICVlYXgKKwlsZWEJNiglZWN4LCAlZXNpLDEpLCAlZWR4CisJUE9QCSglZWRpKQorCVBPUAkoJWVzaSkKKwlqbXAJTChsZXNzNDhieXRlcykKKworCWNmaV9yZXN0b3JlX3N0YXRlCisJY2ZpX3JlbWVtYmVyX3N0YXRlCisJLnAyYWxpZ24gNAorTChzaHJfNl9nb2JibGUpOgorCXN1YgkkMzIsICVlY3gKKwltb3ZkcWEJMTYoJWVzaSksICV4bW0wCisJcGFsaWducgkkNiwoJWVzaSksICV4bW0wCisJcGNtcGVxYgkoJWVkaSksICV4bW0wCisKKwltb3ZkcWEJMzIoJWVzaSksICV4bW0zCisJcGFsaWducgkkNiwxNiglZXNpKSwgJXhtbTMKKwlwY21wZXFiCTE2KCVlZGkpLCAleG1tMworCitMKHNocl82X2dvYmJsZV9sb29wKToKKwlwYW5kCSV4bW0wLCAleG1tMworCXN1YgkkMzIsICVlY3gKKwlwbW92bXNrYiAleG1tMywgJWVkeAorCW1vdmRxYQkleG1tMCwgJXhtbTEKKworCW1vdmRxYQk2NCglZXNpKSwgJXhtbTMKKwlwYWxpZ25yCSQ2LDQ4KCVlc2kpLCAleG1tMworCXNiYgkkMHhmZmZmLCAlZWR4CisJbW92ZHFhCTQ4KCVlc2kpLCAleG1tMAorCXBhbGlnbnIJJDYsMzIoJWVzaSksICV4bW0wCisJcGNtcGVxYgkzMiglZWRpKSwgJXhtbTAKKwlsZWEJMzIoJWVzaSksICVlc2kKKwlwY21wZXFiCTQ4KCVlZGkpLCAleG1tMworCisJbGVhCTMyKCVlZGkpLCAlZWRpCisJanoJTChzaHJfNl9nb2JibGVfbG9vcCkKKwlwYW5kCSV4bW0wLCAleG1tMworCisJY21wCSQwLCAlZWN4CisJamdlCUwoc2hyXzZfZ29iYmxlX25leHQpCisJaW5jCSVlZHgKKwlhZGQJJDMyLCAlZWN4CitMKHNocl82X2dvYmJsZV9uZXh0KToKKwl0ZXN0CSVlZHgsICVlZHgKKwlqbnoJTChleGl0KQorCisJcG1vdm1za2IgJXhtbTMsICVlZHgKKwltb3ZkcWEJJXhtbTAsICV4bW0xCisJbGVhCTMyKCVlZGkpLCAlZWRpCisJbGVhCTMyKCVlc2kpLCAlZXNpCisJc3ViCSQweGZmZmYsICVlZHgKKwlqbnoJTChleGl0KQorCisJbGVhCSglZWN4LCAlZWRpLDEpLCAlZWF4CisJbGVhCTYoJWVjeCwgJWVzaSwxKSwgJWVkeAorCVBPUAkoJWVkaSkKKwlQT1AJKCVlc2kpCisJam1wCUwobGVzczQ4Ynl0ZXMpCisjZW5kaWYKKworI2lmICFkZWZpbmVkKFVTRV9XQ0hBUikgJiYgIWRlZmluZWQoVVNFX1VURjE2KQorCWNmaV9yZXN0b3JlX3N0YXRlCisJY2ZpX3JlbWVtYmVyX3N0YXRlCisJLnAyYWxpZ24gNAorTChzaHJfNyk6CisJY21wCSQ4MCwgJWVjeAorCWxlYQktNDgoJWVjeCksICVlY3gKKwltb3YJJWVkeCwgJWVheAorCWphZQlMKHNocl83X2dvYmJsZSkKKworCW1vdmRxYQkxNiglZXNpKSwgJXhtbTEKKwltb3ZkcWEJJXhtbTEsICV4bW0yCisJcGFsaWducgkkNywoJWVzaSksICV4bW0xCisJcGNtcGVxYgkoJWVkaSksICV4bW0xCisKKwltb3ZkcWEJMzIoJWVzaSksICV4bW0zCisJcGFsaWducgkkNywleG1tMiwgJXhtbTMKKwlwY21wZXFiCTE2KCVlZGkpLCAleG1tMworCisJcGFuZAkleG1tMSwgJXhtbTMKKwlwbW92bXNrYiAleG1tMywgJWVkeAorCWxlYQkzMiglZWRpKSwgJWVkaQorCWxlYQkzMiglZXNpKSwgJWVzaQorCXN1YgkkMHhmZmZmLCAlZWR4CisJam56CUwoZXhpdCkKKwlsZWEJKCVlY3gsICVlZGksMSksICVlYXgKKwlsZWEJNyglZWN4LCAlZXNpLDEpLCAlZWR4CisJUE9QCSglZWRpKQorCVBPUAkoJWVzaSkKKwlqbXAJTChsZXNzNDhieXRlcykKKworCWNmaV9yZXN0b3JlX3N0YXRlCisJY2ZpX3JlbWVtYmVyX3N0YXRlCisJLnAyYWxpZ24gNAorTChzaHJfN19nb2JibGUpOgorCXN1YgkkMzIsICVlY3gKKwltb3ZkcWEJMTYoJWVzaSksICV4bW0wCisJcGFsaWducgkkNywoJWVzaSksICV4bW0wCisJcGNtcGVxYgkoJWVkaSksICV4bW0wCisKKwltb3ZkcWEJMzIoJWVzaSksICV4bW0zCisJcGFsaWducgkkNywxNiglZXNpKSwgJXhtbTMKKwlwY21wZXFiCTE2KCVlZGkpLCAleG1tMworCitMKHNocl83X2dvYmJsZV9sb29wKToKKwlwYW5kCSV4bW0wLCAleG1tMworCXN1YgkkMzIsICVlY3gKKwlwbW92bXNrYiAleG1tMywgJWVkeAorCW1vdmRxYQkleG1tMCwgJXhtbTEKKworCW1vdmRxYQk2NCglZXNpKSwgJXhtbTMKKwlwYWxpZ25yCSQ3LDQ4KCVlc2kpLCAleG1tMworCXNiYgkkMHhmZmZmLCAlZWR4CisJbW92ZHFhCTQ4KCVlc2kpLCAleG1tMAorCXBhbGlnbnIJJDcsMzIoJWVzaSksICV4bW0wCisJcGNtcGVxYgkzMiglZWRpKSwgJXhtbTAKKwlsZWEJMzIoJWVzaSksICVlc2kKKwlwY21wZXFiCTQ4KCVlZGkpLCAleG1tMworCisJbGVhCTMyKCVlZGkpLCAlZWRpCisJanoJTChzaHJfN19nb2JibGVfbG9vcCkKKwlwYW5kCSV4bW0wLCAleG1tMworCisJY21wCSQwLCAlZWN4CisJamdlCUwoc2hyXzdfZ29iYmxlX25leHQpCisJaW5jCSVlZHgKKwlhZGQJJDMyLCAlZWN4CitMKHNocl83X2dvYmJsZV9uZXh0KToKKwl0ZXN0CSVlZHgsICVlZHgKKwlqbnoJTChleGl0KQorCisJcG1vdm1za2IgJXhtbTMsICVlZHgKKwltb3ZkcWEJJXhtbTAsICV4bW0xCisJbGVhCTMyKCVlZGkpLCAlZWRpCisJbGVhCTMyKCVlc2kpLCAlZXNpCisJc3ViCSQweGZmZmYsICVlZHgKKwlqbnoJTChleGl0KQorCisJbGVhCSglZWN4LCAlZWRpLDEpLCAlZWF4CisJbGVhCTcoJWVjeCwgJWVzaSwxKSwgJWVkeAorCVBPUAkoJWVkaSkKKwlQT1AJKCVlc2kpCisJam1wCUwobGVzczQ4Ynl0ZXMpCisjZW5kaWYKKworCWNmaV9yZXN0b3JlX3N0YXRlCisJY2ZpX3JlbWVtYmVyX3N0YXRlCisJLnAyYWxpZ24gNAorTChzaHJfOCk6CisJY21wCSQ4MCwgJWVjeAorCWxlYQktNDgoJWVjeCksICVlY3gKKwltb3YJJWVkeCwgJWVheAorCWphZQlMKHNocl84X2dvYmJsZSkKKworCW1vdmRxYQkxNiglZXNpKSwgJXhtbTEKKwltb3ZkcWEJJXhtbTEsICV4bW0yCisJcGFsaWducgkkOCwoJWVzaSksICV4bW0xCisJcGNtcGVxYgkoJWVkaSksICV4bW0xCisKKwltb3ZkcWEJMzIoJWVzaSksICV4bW0zCisJcGFsaWducgkkOCwleG1tMiwgJXhtbTMKKwlwY21wZXFiCTE2KCVlZGkpLCAleG1tMworCisJcGFuZAkleG1tMSwgJXhtbTMKKwlwbW92bXNrYiAleG1tMywgJWVkeAorCWxlYQkzMiglZWRpKSwgJWVkaQorCWxlYQkzMiglZXNpKSwgJWVzaQorCXN1YgkkMHhmZmZmLCAlZWR4CisJam56CUwoZXhpdCkKKwlsZWEJKCVlY3gsICVlZGksMSksICVlYXgKKwlsZWEJOCglZWN4LCAlZXNpLDEpLCAlZWR4CisJUE9QCSglZWRpKQorCVBPUAkoJWVzaSkKKwlqbXAJTChsZXNzNDhieXRlcykKKworCWNmaV9yZXN0b3JlX3N0YXRlCisJY2ZpX3JlbWVtYmVyX3N0YXRlCisJLnAyYWxpZ24gNAorTChzaHJfOF9nb2JibGUpOgorCXN1YgkkMzIsICVlY3gKKwltb3ZkcWEJMTYoJWVzaSksICV4bW0wCisJcGFsaWducgkkOCwoJWVzaSksICV4bW0wCisJcGNtcGVxYgkoJWVkaSksICV4bW0wCisKKwltb3ZkcWEJMzIoJWVzaSksICV4bW0zCisJcGFsaWducgkkOCwxNiglZXNpKSwgJXhtbTMKKwlwY21wZXFiCTE2KCVlZGkpLCAleG1tMworCitMKHNocl84X2dvYmJsZV9sb29wKToKKwlwYW5kCSV4bW0wLCAleG1tMworCXN1YgkkMzIsICVlY3gKKwlwbW92bXNrYiAleG1tMywgJWVkeAorCW1vdmRxYQkleG1tMCwgJXhtbTEKKworCW1vdmRxYQk2NCglZXNpKSwgJXhtbTMKKwlwYWxpZ25yCSQ4LDQ4KCVlc2kpLCAleG1tMworCXNiYgkkMHhmZmZmLCAlZWR4CisJbW92ZHFhCTQ4KCVlc2kpLCAleG1tMAorCXBhbGlnbnIJJDgsMzIoJWVzaSksICV4bW0wCisJcGNtcGVxYgkzMiglZWRpKSwgJXhtbTAKKwlsZWEJMzIoJWVzaSksICVlc2kKKwlwY21wZXFiCTQ4KCVlZGkpLCAleG1tMworCisJbGVhCTMyKCVlZGkpLCAlZWRpCisJanoJTChzaHJfOF9nb2JibGVfbG9vcCkKKwlwYW5kCSV4bW0wLCAleG1tMworCisJY21wCSQwLCAlZWN4CisJamdlCUwoc2hyXzhfZ29iYmxlX25leHQpCisJaW5jCSVlZHgKKwlhZGQJJDMyLCAlZWN4CitMKHNocl84X2dvYmJsZV9uZXh0KToKKwl0ZXN0CSVlZHgsICVlZHgKKwlqbnoJTChleGl0KQorCisJcG1vdm1za2IgJXhtbTMsICVlZHgKKwltb3ZkcWEJJXhtbTAsICV4bW0xCisJbGVhCTMyKCVlZGkpLCAlZWRpCisJbGVhCTMyKCVlc2kpLCAlZXNpCisJc3ViCSQweGZmZmYsICVlZHgKKwlqbnoJTChleGl0KQorCisJbGVhCSglZWN4LCAlZWRpLDEpLCAlZWF4CisJbGVhCTgoJWVjeCwgJWVzaSwxKSwgJWVkeAorCVBPUAkoJWVkaSkKKwlQT1AJKCVlc2kpCisJam1wCUwobGVzczQ4Ynl0ZXMpCisKKyNpZiAhZGVmaW5lZChVU0VfV0NIQVIpICYmICFkZWZpbmVkKFVTRV9VVEYxNikKKwljZmlfcmVzdG9yZV9zdGF0ZQorCWNmaV9yZW1lbWJlcl9zdGF0ZQorCS5wMmFsaWduIDQKK0woc2hyXzkpOgorCWNtcAkkODAsICVlY3gKKwlsZWEJLTQ4KCVlY3gpLCAlZWN4CisJbW92CSVlZHgsICVlYXgKKwlqYWUJTChzaHJfOV9nb2JibGUpCisKKwltb3ZkcWEJMTYoJWVzaSksICV4bW0xCisJbW92ZHFhCSV4bW0xLCAleG1tMgorCXBhbGlnbnIJJDksKCVlc2kpLCAleG1tMQorCXBjbXBlcWIJKCVlZGkpLCAleG1tMQorCisJbW92ZHFhCTMyKCVlc2kpLCAleG1tMworCXBhbGlnbnIJJDksJXhtbTIsICV4bW0zCisJcGNtcGVxYgkxNiglZWRpKSwgJXhtbTMKKworCXBhbmQJJXhtbTEsICV4bW0zCisJcG1vdm1za2IgJXhtbTMsICVlZHgKKwlsZWEJMzIoJWVkaSksICVlZGkKKwlsZWEJMzIoJWVzaSksICVlc2kKKwlzdWIJJDB4ZmZmZiwgJWVkeAorCWpueglMKGV4aXQpCisJbGVhCSglZWN4LCAlZWRpLDEpLCAlZWF4CisJbGVhCTkoJWVjeCwgJWVzaSwxKSwgJWVkeAorCVBPUAkoJWVkaSkKKwlQT1AJKCVlc2kpCisJam1wCUwobGVzczQ4Ynl0ZXMpCisKKwljZmlfcmVzdG9yZV9zdGF0ZQorCWNmaV9yZW1lbWJlcl9zdGF0ZQorCS5wMmFsaWduIDQKK0woc2hyXzlfZ29iYmxlKToKKwlzdWIJJDMyLCAlZWN4CisJbW92ZHFhCTE2KCVlc2kpLCAleG1tMAorCXBhbGlnbnIJJDksKCVlc2kpLCAleG1tMAorCXBjbXBlcWIJKCVlZGkpLCAleG1tMAorCisJbW92ZHFhCTMyKCVlc2kpLCAleG1tMworCXBhbGlnbnIJJDksMTYoJWVzaSksICV4bW0zCisJcGNtcGVxYgkxNiglZWRpKSwgJXhtbTMKKworTChzaHJfOV9nb2JibGVfbG9vcCk6CisJcGFuZAkleG1tMCwgJXhtbTMKKwlzdWIJJDMyLCAlZWN4CisJcG1vdm1za2IgJXhtbTMsICVlZHgKKwltb3ZkcWEJJXhtbTAsICV4bW0xCisKKwltb3ZkcWEJNjQoJWVzaSksICV4bW0zCisJcGFsaWducgkkOSw0OCglZXNpKSwgJXhtbTMKKwlzYmIJJDB4ZmZmZiwgJWVkeAorCW1vdmRxYQk0OCglZXNpKSwgJXhtbTAKKwlwYWxpZ25yCSQ5LDMyKCVlc2kpLCAleG1tMAorCXBjbXBlcWIJMzIoJWVkaSksICV4bW0wCisJbGVhCTMyKCVlc2kpLCAlZXNpCisJcGNtcGVxYgk0OCglZWRpKSwgJXhtbTMKKworCWxlYQkzMiglZWRpKSwgJWVkaQorCWp6CUwoc2hyXzlfZ29iYmxlX2xvb3ApCisJcGFuZAkleG1tMCwgJXhtbTMKKworCWNtcAkkMCwgJWVjeAorCWpnZQlMKHNocl85X2dvYmJsZV9uZXh0KQorCWluYwklZWR4CisJYWRkCSQzMiwgJWVjeAorTChzaHJfOV9nb2JibGVfbmV4dCk6CisJdGVzdAklZWR4LCAlZWR4CisJam56CUwoZXhpdCkKKworCXBtb3Ztc2tiICV4bW0zLCAlZWR4CisJbW92ZHFhCSV4bW0wLCAleG1tMQorCWxlYQkzMiglZWRpKSwgJWVkaQorCWxlYQkzMiglZXNpKSwgJWVzaQorCXN1YgkkMHhmZmZmLCAlZWR4CisJam56CUwoZXhpdCkKKworCWxlYQkoJWVjeCwgJWVkaSwxKSwgJWVheAorCWxlYQk5KCVlY3gsICVlc2ksMSksICVlZHgKKwlQT1AJKCVlZGkpCisJUE9QCSglZXNpKQorCWptcAlMKGxlc3M0OGJ5dGVzKQorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChVU0VfV0NIQVIpCisJY2ZpX3Jlc3RvcmVfc3RhdGUKKwljZmlfcmVtZW1iZXJfc3RhdGUKKwkucDJhbGlnbiA0CitMKHNocl8xMCk6CisJY21wCSQ4MCwgJWVjeAorCWxlYQktNDgoJWVjeCksICVlY3gKKwltb3YJJWVkeCwgJWVheAorCWphZQlMKHNocl8xMF9nb2JibGUpCisKKwltb3ZkcWEJMTYoJWVzaSksICV4bW0xCisJbW92ZHFhCSV4bW0xLCAleG1tMgorCXBhbGlnbnIJJDEwLCAoJWVzaSksICV4bW0xCisJcGNtcGVxYgkoJWVkaSksICV4bW0xCisKKwltb3ZkcWEJMzIoJWVzaSksICV4bW0zCisJcGFsaWducgkkMTAsJXhtbTIsICV4bW0zCisJcGNtcGVxYgkxNiglZWRpKSwgJXhtbTMKKworCXBhbmQJJXhtbTEsICV4bW0zCisJcG1vdm1za2IgJXhtbTMsICVlZHgKKwlsZWEJMzIoJWVkaSksICVlZGkKKwlsZWEJMzIoJWVzaSksICVlc2kKKwlzdWIJJDB4ZmZmZiwgJWVkeAorCWpueglMKGV4aXQpCisJbGVhCSglZWN4LCAlZWRpLDEpLCAlZWF4CisJbGVhCTEwKCVlY3gsICVlc2ksMSksICVlZHgKKwlQT1AJKCVlZGkpCisJUE9QCSglZXNpKQorCWptcAlMKGxlc3M0OGJ5dGVzKQorCisJY2ZpX3Jlc3RvcmVfc3RhdGUKKwljZmlfcmVtZW1iZXJfc3RhdGUKKwkucDJhbGlnbiA0CitMKHNocl8xMF9nb2JibGUpOgorCXN1YgkkMzIsICVlY3gKKwltb3ZkcWEJMTYoJWVzaSksICV4bW0wCisJcGFsaWducgkkMTAsICglZXNpKSwgJXhtbTAKKwlwY21wZXFiCSglZWRpKSwgJXhtbTAKKworCW1vdmRxYQkzMiglZXNpKSwgJXhtbTMKKwlwYWxpZ25yCSQxMCwgMTYoJWVzaSksICV4bW0zCisJcGNtcGVxYgkxNiglZWRpKSwgJXhtbTMKKworTChzaHJfMTBfZ29iYmxlX2xvb3ApOgorCXBhbmQJJXhtbTAsICV4bW0zCisJc3ViCSQzMiwgJWVjeAorCXBtb3Ztc2tiICV4bW0zLCAlZWR4CisJbW92ZHFhCSV4bW0wLCAleG1tMQorCisJbW92ZHFhCTY0KCVlc2kpLCAleG1tMworCXBhbGlnbnIJJDEwLDQ4KCVlc2kpLCAleG1tMworCXNiYgkkMHhmZmZmLCAlZWR4CisJbW92ZHFhCTQ4KCVlc2kpLCAleG1tMAorCXBhbGlnbnIJJDEwLDMyKCVlc2kpLCAleG1tMAorCXBjbXBlcWIJMzIoJWVkaSksICV4bW0wCisJbGVhCTMyKCVlc2kpLCAlZXNpCisJcGNtcGVxYgk0OCglZWRpKSwgJXhtbTMKKworCWxlYQkzMiglZWRpKSwgJWVkaQorCWp6CUwoc2hyXzEwX2dvYmJsZV9sb29wKQorCXBhbmQJJXhtbTAsICV4bW0zCisKKwljbXAJJDAsICVlY3gKKwlqZ2UJTChzaHJfMTBfZ29iYmxlX25leHQpCisJaW5jCSVlZHgKKwlhZGQJJDMyLCAlZWN4CitMKHNocl8xMF9nb2JibGVfbmV4dCk6CisJdGVzdAklZWR4LCAlZWR4CisJam56CUwoZXhpdCkKKworCXBtb3Ztc2tiICV4bW0zLCAlZWR4CisJbW92ZHFhCSV4bW0wLCAleG1tMQorCWxlYQkzMiglZWRpKSwgJWVkaQorCWxlYQkzMiglZXNpKSwgJWVzaQorCXN1YgkkMHhmZmZmLCAlZWR4CisJam56CUwoZXhpdCkKKworCWxlYQkoJWVjeCwgJWVkaSwxKSwgJWVheAorCWxlYQkxMCglZWN4LCAlZXNpLDEpLCAlZWR4CisJUE9QCSglZWRpKQorCVBPUAkoJWVzaSkKKwlqbXAJTChsZXNzNDhieXRlcykKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoVVNFX1dDSEFSKSAmJiAhZGVmaW5lZChVU0VfVVRGMTYpCisJY2ZpX3Jlc3RvcmVfc3RhdGUKKwljZmlfcmVtZW1iZXJfc3RhdGUKKwkucDJhbGlnbiA0CitMKHNocl8xMSk6CisJY21wCSQ4MCwgJWVjeAorCWxlYQktNDgoJWVjeCksICVlY3gKKwltb3YJJWVkeCwgJWVheAorCWphZQlMKHNocl8xMV9nb2JibGUpCisKKwltb3ZkcWEJMTYoJWVzaSksICV4bW0xCisJbW92ZHFhCSV4bW0xLCAleG1tMgorCXBhbGlnbnIJJDExLCAoJWVzaSksICV4bW0xCisJcGNtcGVxYgkoJWVkaSksICV4bW0xCisKKwltb3ZkcWEJMzIoJWVzaSksICV4bW0zCisJcGFsaWducgkkMTEsICV4bW0yLCAleG1tMworCXBjbXBlcWIJMTYoJWVkaSksICV4bW0zCisKKwlwYW5kCSV4bW0xLCAleG1tMworCXBtb3Ztc2tiICV4bW0zLCAlZWR4CisJbGVhCTMyKCVlZGkpLCAlZWRpCisJbGVhCTMyKCVlc2kpLCAlZXNpCisJc3ViCSQweGZmZmYsICVlZHgKKwlqbnoJTChleGl0KQorCWxlYQkoJWVjeCwgJWVkaSwxKSwgJWVheAorCWxlYQkxMSglZWN4LCAlZXNpLDEpLCAlZWR4CisJUE9QCSglZWRpKQorCVBPUAkoJWVzaSkKKwlqbXAJTChsZXNzNDhieXRlcykKKworCWNmaV9yZXN0b3JlX3N0YXRlCisJY2ZpX3JlbWVtYmVyX3N0YXRlCisJLnAyYWxpZ24gNAorTChzaHJfMTFfZ29iYmxlKToKKwlzdWIJJDMyLCAlZWN4CisJbW92ZHFhCTE2KCVlc2kpLCAleG1tMAorCXBhbGlnbnIJJDExLCAoJWVzaSksICV4bW0wCisJcGNtcGVxYgkoJWVkaSksICV4bW0wCisKKwltb3ZkcWEJMzIoJWVzaSksICV4bW0zCisJcGFsaWducgkkMTEsIDE2KCVlc2kpLCAleG1tMworCXBjbXBlcWIJMTYoJWVkaSksICV4bW0zCisKK0woc2hyXzExX2dvYmJsZV9sb29wKToKKwlwYW5kCSV4bW0wLCAleG1tMworCXN1YgkkMzIsICVlY3gKKwlwbW92bXNrYiAleG1tMywgJWVkeAorCW1vdmRxYQkleG1tMCwgJXhtbTEKKworCW1vdmRxYQk2NCglZXNpKSwgJXhtbTMKKwlwYWxpZ25yCSQxMSw0OCglZXNpKSwgJXhtbTMKKwlzYmIJJDB4ZmZmZiwgJWVkeAorCW1vdmRxYQk0OCglZXNpKSwgJXhtbTAKKwlwYWxpZ25yCSQxMSwzMiglZXNpKSwgJXhtbTAKKwlwY21wZXFiCTMyKCVlZGkpLCAleG1tMAorCWxlYQkzMiglZXNpKSwgJWVzaQorCXBjbXBlcWIJNDgoJWVkaSksICV4bW0zCisKKwlsZWEJMzIoJWVkaSksICVlZGkKKwlqeglMKHNocl8xMV9nb2JibGVfbG9vcCkKKwlwYW5kCSV4bW0wLCAleG1tMworCisJY21wCSQwLCAlZWN4CisJamdlCUwoc2hyXzExX2dvYmJsZV9uZXh0KQorCWluYwklZWR4CisJYWRkCSQzMiwgJWVjeAorTChzaHJfMTFfZ29iYmxlX25leHQpOgorCXRlc3QJJWVkeCwgJWVkeAorCWpueglMKGV4aXQpCisKKwlwbW92bXNrYiAleG1tMywgJWVkeAorCW1vdmRxYQkleG1tMCwgJXhtbTEKKwlsZWEJMzIoJWVkaSksICVlZGkKKwlsZWEJMzIoJWVzaSksICVlc2kKKwlzdWIJJDB4ZmZmZiwgJWVkeAorCWpueglMKGV4aXQpCisKKwlsZWEJKCVlY3gsICVlZGksMSksICVlYXgKKwlsZWEJMTEoJWVjeCwgJWVzaSwxKSwgJWVkeAorCVBPUAkoJWVkaSkKKwlQT1AJKCVlc2kpCisJam1wCUwobGVzczQ4Ynl0ZXMpCisjZW5kaWYKKworCWNmaV9yZXN0b3JlX3N0YXRlCisJY2ZpX3JlbWVtYmVyX3N0YXRlCisJLnAyYWxpZ24gNAorTChzaHJfMTIpOgorCWNtcAkkODAsICVlY3gKKwlsZWEJLTQ4KCVlY3gpLCAlZWN4CisJbW92CSVlZHgsICVlYXgKKwlqYWUJTChzaHJfMTJfZ29iYmxlKQorCisJbW92ZHFhCTE2KCVlc2kpLCAleG1tMQorCW1vdmRxYQkleG1tMSwgJXhtbTIKKwlwYWxpZ25yCSQxMiwgKCVlc2kpLCAleG1tMQorCXBjbXBlcWIJKCVlZGkpLCAleG1tMQorCisJbW92ZHFhCTMyKCVlc2kpLCAleG1tMworCXBhbGlnbnIJJDEyLCAleG1tMiwgJXhtbTMKKwlwY21wZXFiCTE2KCVlZGkpLCAleG1tMworCisJcGFuZAkleG1tMSwgJXhtbTMKKwlwbW92bXNrYiAleG1tMywgJWVkeAorCWxlYQkzMiglZWRpKSwgJWVkaQorCWxlYQkzMiglZXNpKSwgJWVzaQorCXN1YgkkMHhmZmZmLCAlZWR4CisJam56CUwoZXhpdCkKKwlsZWEJKCVlY3gsICVlZGksMSksICVlYXgKKwlsZWEJMTIoJWVjeCwgJWVzaSwxKSwgJWVkeAorCVBPUAkoJWVkaSkKKwlQT1AJKCVlc2kpCisJam1wCUwobGVzczQ4Ynl0ZXMpCisKKwljZmlfcmVzdG9yZV9zdGF0ZQorCWNmaV9yZW1lbWJlcl9zdGF0ZQorCS5wMmFsaWduIDQKK0woc2hyXzEyX2dvYmJsZSk6CisJc3ViCSQzMiwgJWVjeAorCW1vdmRxYQkxNiglZXNpKSwgJXhtbTAKKwlwYWxpZ25yCSQxMiwgKCVlc2kpLCAleG1tMAorCXBjbXBlcWIJKCVlZGkpLCAleG1tMAorCisJbW92ZHFhCTMyKCVlc2kpLCAleG1tMworCXBhbGlnbnIJJDEyLCAxNiglZXNpKSwgJXhtbTMKKwlwY21wZXFiCTE2KCVlZGkpLCAleG1tMworCitMKHNocl8xMl9nb2JibGVfbG9vcCk6CisJcGFuZAkleG1tMCwgJXhtbTMKKwlzdWIJJDMyLCAlZWN4CisJcG1vdm1za2IgJXhtbTMsICVlZHgKKwltb3ZkcWEJJXhtbTAsICV4bW0xCisKKwltb3ZkcWEJNjQoJWVzaSksICV4bW0zCisJcGFsaWducgkkMTIsNDgoJWVzaSksICV4bW0zCisJc2JiCSQweGZmZmYsICVlZHgKKwltb3ZkcWEJNDgoJWVzaSksICV4bW0wCisJcGFsaWducgkkMTIsMzIoJWVzaSksICV4bW0wCisJcGNtcGVxYgkzMiglZWRpKSwgJXhtbTAKKwlsZWEJMzIoJWVzaSksICVlc2kKKwlwY21wZXFiCTQ4KCVlZGkpLCAleG1tMworCisJbGVhCTMyKCVlZGkpLCAlZWRpCisJanoJTChzaHJfMTJfZ29iYmxlX2xvb3ApCisJcGFuZAkleG1tMCwgJXhtbTMKKworCWNtcAkkMCwgJWVjeAorCWpnZQlMKHNocl8xMl9nb2JibGVfbmV4dCkKKwlpbmMJJWVkeAorCWFkZAkkMzIsICVlY3gKK0woc2hyXzEyX2dvYmJsZV9uZXh0KToKKwl0ZXN0CSVlZHgsICVlZHgKKwlqbnoJTChleGl0KQorCisJcG1vdm1za2IgJXhtbTMsICVlZHgKKwltb3ZkcWEJJXhtbTAsICV4bW0xCisJbGVhCTMyKCVlZGkpLCAlZWRpCisJbGVhCTMyKCVlc2kpLCAlZXNpCisJc3ViCSQweGZmZmYsICVlZHgKKwlqbnoJTChleGl0KQorCisJbGVhCSglZWN4LCAlZWRpLDEpLCAlZWF4CisJbGVhCTEyKCVlY3gsICVlc2ksMSksICVlZHgKKwlQT1AJKCVlZGkpCisJUE9QCSglZXNpKQorCWptcAlMKGxlc3M0OGJ5dGVzKQorCisjaWYgIWRlZmluZWQoVVNFX1dDSEFSKSAmJiAhZGVmaW5lZChVU0VfVVRGMTYpCisJY2ZpX3Jlc3RvcmVfc3RhdGUKKwljZmlfcmVtZW1iZXJfc3RhdGUKKwkucDJhbGlnbiA0CitMKHNocl8xMyk6CisJY21wCSQ4MCwgJWVjeAorCWxlYQktNDgoJWVjeCksICVlY3gKKwltb3YJJWVkeCwgJWVheAorCWphZQlMKHNocl8xM19nb2JibGUpCisKKwltb3ZkcWEJMTYoJWVzaSksICV4bW0xCisJbW92ZHFhCSV4bW0xLCAleG1tMgorCXBhbGlnbnIJJDEzLCAoJWVzaSksICV4bW0xCisJcGNtcGVxYgkoJWVkaSksICV4bW0xCisKKwltb3ZkcWEJMzIoJWVzaSksICV4bW0zCisJcGFsaWducgkkMTMsICV4bW0yLCAleG1tMworCXBjbXBlcWIJMTYoJWVkaSksICV4bW0zCisKKwlwYW5kCSV4bW0xLCAleG1tMworCXBtb3Ztc2tiICV4bW0zLCAlZWR4CisJbGVhCTMyKCVlZGkpLCAlZWRpCisJbGVhCTMyKCVlc2kpLCAlZXNpCisJc3ViCSQweGZmZmYsICVlZHgKKwlqbnoJTChleGl0KQorCWxlYQkoJWVjeCwgJWVkaSwxKSwgJWVheAorCWxlYQkxMyglZWN4LCAlZXNpLDEpLCAlZWR4CisJUE9QCSglZWRpKQorCVBPUAkoJWVzaSkKKwlqbXAJTChsZXNzNDhieXRlcykKKworCWNmaV9yZXN0b3JlX3N0YXRlCisJY2ZpX3JlbWVtYmVyX3N0YXRlCisJLnAyYWxpZ24gNAorTChzaHJfMTNfZ29iYmxlKToKKwlzdWIJJDMyLCAlZWN4CisJbW92ZHFhCTE2KCVlc2kpLCAleG1tMAorCXBhbGlnbnIJJDEzLCAoJWVzaSksICV4bW0wCisJcGNtcGVxYgkoJWVkaSksICV4bW0wCisKKwltb3ZkcWEJMzIoJWVzaSksICV4bW0zCisJcGFsaWducgkkMTMsIDE2KCVlc2kpLCAleG1tMworCXBjbXBlcWIJMTYoJWVkaSksICV4bW0zCisKK0woc2hyXzEzX2dvYmJsZV9sb29wKToKKwlwYW5kCSV4bW0wLCAleG1tMworCXN1YgkkMzIsICVlY3gKKwlwbW92bXNrYiAleG1tMywgJWVkeAorCW1vdmRxYQkleG1tMCwgJXhtbTEKKworCW1vdmRxYQk2NCglZXNpKSwgJXhtbTMKKwlwYWxpZ25yCSQxMyw0OCglZXNpKSwgJXhtbTMKKwlzYmIJJDB4ZmZmZiwgJWVkeAorCW1vdmRxYQk0OCglZXNpKSwgJXhtbTAKKwlwYWxpZ25yCSQxMywzMiglZXNpKSwgJXhtbTAKKwlwY21wZXFiCTMyKCVlZGkpLCAleG1tMAorCWxlYQkzMiglZXNpKSwgJWVzaQorCXBjbXBlcWIJNDgoJWVkaSksICV4bW0zCisKKwlsZWEJMzIoJWVkaSksICVlZGkKKwlqeglMKHNocl8xM19nb2JibGVfbG9vcCkKKwlwYW5kCSV4bW0wLCAleG1tMworCisJY21wCSQwLCAlZWN4CisJamdlCUwoc2hyXzEzX2dvYmJsZV9uZXh0KQorCWluYwklZWR4CisJYWRkCSQzMiwgJWVjeAorTChzaHJfMTNfZ29iYmxlX25leHQpOgorCXRlc3QJJWVkeCwgJWVkeAorCWpueglMKGV4aXQpCisKKwlwbW92bXNrYiAleG1tMywgJWVkeAorCW1vdmRxYQkleG1tMCwgJXhtbTEKKwlsZWEJMzIoJWVkaSksICVlZGkKKwlsZWEJMzIoJWVzaSksICVlc2kKKwlzdWIJJDB4ZmZmZiwgJWVkeAorCWpueglMKGV4aXQpCisKKwlsZWEJKCVlY3gsICVlZGksMSksICVlYXgKKwlsZWEJMTMoJWVjeCwgJWVzaSwxKSwgJWVkeAorCVBPUAkoJWVkaSkKKwlQT1AJKCVlc2kpCisJam1wCUwobGVzczQ4Ynl0ZXMpCisjZW5kaWYKKworI2lmICFkZWZpbmVkKFVTRV9XQ0hBUikKKwljZmlfcmVzdG9yZV9zdGF0ZQorCWNmaV9yZW1lbWJlcl9zdGF0ZQorCS5wMmFsaWduIDQKK0woc2hyXzE0KToKKwljbXAJJDgwLCAlZWN4CisJbGVhCS00OCglZWN4KSwgJWVjeAorCW1vdgklZWR4LCAlZWF4CisJamFlCUwoc2hyXzE0X2dvYmJsZSkKKworCW1vdmRxYQkxNiglZXNpKSwgJXhtbTEKKwltb3ZkcWEJJXhtbTEsICV4bW0yCisJcGFsaWducgkkMTQsICglZXNpKSwgJXhtbTEKKwlwY21wZXFiCSglZWRpKSwgJXhtbTEKKworCW1vdmRxYQkzMiglZXNpKSwgJXhtbTMKKwlwYWxpZ25yCSQxNCwgJXhtbTIsICV4bW0zCisJcGNtcGVxYgkxNiglZWRpKSwgJXhtbTMKKworCXBhbmQJJXhtbTEsICV4bW0zCisJcG1vdm1za2IgJXhtbTMsICVlZHgKKwlsZWEJMzIoJWVkaSksICVlZGkKKwlsZWEJMzIoJWVzaSksICVlc2kKKwlzdWIJJDB4ZmZmZiwgJWVkeAorCWpueglMKGV4aXQpCisJbGVhCSglZWN4LCAlZWRpLDEpLCAlZWF4CisJbGVhCTE0KCVlY3gsICVlc2ksMSksICVlZHgKKwlQT1AJKCVlZGkpCisJUE9QCSglZXNpKQorCWptcAlMKGxlc3M0OGJ5dGVzKQorCisJY2ZpX3Jlc3RvcmVfc3RhdGUKKwljZmlfcmVtZW1iZXJfc3RhdGUKKwkucDJhbGlnbiA0CitMKHNocl8xNF9nb2JibGUpOgorCXN1YgkkMzIsICVlY3gKKwltb3ZkcWEJMTYoJWVzaSksICV4bW0wCisJcGFsaWducgkkMTQsICglZXNpKSwgJXhtbTAKKwlwY21wZXFiCSglZWRpKSwgJXhtbTAKKworCW1vdmRxYQkzMiglZXNpKSwgJXhtbTMKKwlwYWxpZ25yCSQxNCwgMTYoJWVzaSksICV4bW0zCisJcGNtcGVxYgkxNiglZWRpKSwgJXhtbTMKKworTChzaHJfMTRfZ29iYmxlX2xvb3ApOgorCXBhbmQJJXhtbTAsICV4bW0zCisJc3ViCSQzMiwgJWVjeAorCXBtb3Ztc2tiICV4bW0zLCAlZWR4CisJbW92ZHFhCSV4bW0wLCAleG1tMQorCisJbW92ZHFhCTY0KCVlc2kpLCAleG1tMworCXBhbGlnbnIJJDE0LDQ4KCVlc2kpLCAleG1tMworCXNiYgkkMHhmZmZmLCAlZWR4CisJbW92ZHFhCTQ4KCVlc2kpLCAleG1tMAorCXBhbGlnbnIJJDE0LDMyKCVlc2kpLCAleG1tMAorCXBjbXBlcWIJMzIoJWVkaSksICV4bW0wCisJbGVhCTMyKCVlc2kpLCAlZXNpCisJcGNtcGVxYgk0OCglZWRpKSwgJXhtbTMKKworCWxlYQkzMiglZWRpKSwgJWVkaQorCWp6CUwoc2hyXzE0X2dvYmJsZV9sb29wKQorCXBhbmQJJXhtbTAsICV4bW0zCisKKwljbXAJJDAsICVlY3gKKwlqZ2UJTChzaHJfMTRfZ29iYmxlX25leHQpCisJaW5jCSVlZHgKKwlhZGQJJDMyLCAlZWN4CitMKHNocl8xNF9nb2JibGVfbmV4dCk6CisJdGVzdAklZWR4LCAlZWR4CisJam56CUwoZXhpdCkKKworCXBtb3Ztc2tiICV4bW0zLCAlZWR4CisJbW92ZHFhCSV4bW0wLCAleG1tMQorCWxlYQkzMiglZWRpKSwgJWVkaQorCWxlYQkzMiglZXNpKSwgJWVzaQorCXN1YgkkMHhmZmZmLCAlZWR4CisJam56CUwoZXhpdCkKKworCWxlYQkoJWVjeCwgJWVkaSwxKSwgJWVheAorCWxlYQkxNCglZWN4LCAlZXNpLDEpLCAlZWR4CisJUE9QCSglZWRpKQorCVBPUAkoJWVzaSkKKwlqbXAJTChsZXNzNDhieXRlcykKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoVVNFX1dDSEFSKSAmJiAhZGVmaW5lZChVU0VfVVRGMTYpCisJY2ZpX3Jlc3RvcmVfc3RhdGUKKwljZmlfcmVtZW1iZXJfc3RhdGUKKwkucDJhbGlnbiA0CitMKHNocl8xNSk6CisJY21wCSQ4MCwgJWVjeAorCWxlYQktNDgoJWVjeCksICVlY3gKKwltb3YJJWVkeCwgJWVheAorCWphZQlMKHNocl8xNV9nb2JibGUpCisKKwltb3ZkcWEJMTYoJWVzaSksICV4bW0xCisJbW92ZHFhCSV4bW0xLCAleG1tMgorCXBhbGlnbnIJJDE1LCAoJWVzaSksICV4bW0xCisJcGNtcGVxYgkoJWVkaSksICV4bW0xCisKKwltb3ZkcWEJMzIoJWVzaSksICV4bW0zCisJcGFsaWducgkkMTUsICV4bW0yLCAleG1tMworCXBjbXBlcWIJMTYoJWVkaSksICV4bW0zCisKKwlwYW5kCSV4bW0xLCAleG1tMworCXBtb3Ztc2tiICV4bW0zLCAlZWR4CisJbGVhCTMyKCVlZGkpLCAlZWRpCisJbGVhCTMyKCVlc2kpLCAlZXNpCisJc3ViCSQweGZmZmYsICVlZHgKKwlqbnoJTChleGl0KQorCWxlYQkoJWVjeCwgJWVkaSwxKSwgJWVheAorCWxlYQkxNSglZWN4LCAlZXNpLDEpLCAlZWR4CisJUE9QCSglZWRpKQorCVBPUAkoJWVzaSkKKwlqbXAJTChsZXNzNDhieXRlcykKKworCWNmaV9yZXN0b3JlX3N0YXRlCisJY2ZpX3JlbWVtYmVyX3N0YXRlCisJLnAyYWxpZ24gNAorTChzaHJfMTVfZ29iYmxlKToKKwlzdWIJJDMyLCAlZWN4CisJbW92ZHFhCTE2KCVlc2kpLCAleG1tMAorCXBhbGlnbnIJJDE1LCAoJWVzaSksICV4bW0wCisJcGNtcGVxYgkoJWVkaSksICV4bW0wCisKKwltb3ZkcWEJMzIoJWVzaSksICV4bW0zCisJcGFsaWducgkkMTUsIDE2KCVlc2kpLCAleG1tMworCXBjbXBlcWIJMTYoJWVkaSksICV4bW0zCisKK0woc2hyXzE1X2dvYmJsZV9sb29wKToKKwlwYW5kCSV4bW0wLCAleG1tMworCXN1YgkkMzIsICVlY3gKKwlwbW92bXNrYiAleG1tMywgJWVkeAorCW1vdmRxYQkleG1tMCwgJXhtbTEKKworCW1vdmRxYQk2NCglZXNpKSwgJXhtbTMKKwlwYWxpZ25yCSQxNSw0OCglZXNpKSwgJXhtbTMKKwlzYmIJJDB4ZmZmZiwgJWVkeAorCW1vdmRxYQk0OCglZXNpKSwgJXhtbTAKKwlwYWxpZ25yCSQxNSwzMiglZXNpKSwgJXhtbTAKKwlwY21wZXFiCTMyKCVlZGkpLCAleG1tMAorCWxlYQkzMiglZXNpKSwgJWVzaQorCXBjbXBlcWIJNDgoJWVkaSksICV4bW0zCisKKwlsZWEJMzIoJWVkaSksICVlZGkKKwlqeglMKHNocl8xNV9nb2JibGVfbG9vcCkKKwlwYW5kCSV4bW0wLCAleG1tMworCisJY21wCSQwLCAlZWN4CisJamdlCUwoc2hyXzE1X2dvYmJsZV9uZXh0KQorCWluYwklZWR4CisJYWRkCSQzMiwgJWVjeAorTChzaHJfMTVfZ29iYmxlX25leHQpOgorCXRlc3QJJWVkeCwgJWVkeAorCWpueglMKGV4aXQpCisKKwlwbW92bXNrYiAleG1tMywgJWVkeAorCW1vdmRxYQkleG1tMCwgJXhtbTEKKwlsZWEJMzIoJWVkaSksICVlZGkKKwlsZWEJMzIoJWVzaSksICVlc2kKKwlzdWIJJDB4ZmZmZiwgJWVkeAorCWpueglMKGV4aXQpCisKKwlsZWEJKCVlY3gsICVlZGksMSksICVlYXgKKwlsZWEJMTUoJWVjeCwgJWVzaSwxKSwgJWVkeAorCVBPUAkoJWVkaSkKKwlQT1AJKCVlc2kpCisJam1wCUwobGVzczQ4Ynl0ZXMpCisjZW5kaWYKKworCWNmaV9yZXN0b3JlX3N0YXRlCisJY2ZpX3JlbWVtYmVyX3N0YXRlCisJLnAyYWxpZ24gNAorTChleGl0KToKKwlwbW92bXNrYiAleG1tMSwgJWVieAorCXN1YgkkMHhmZmZmLCAlZWJ4CisJanoJTChmaXJzdDE2Ynl0ZXMpCisJbGVhCS0xNiglZXNpKSwgJWVzaQorCWxlYQktMTYoJWVkaSksICVlZGkKKwltb3YJJWVieCwgJWVkeAorCitMKGZpcnN0MTZieXRlcyk6CisJYWRkCSVlYXgsICVlc2kKK0wobGVzczE2Ynl0ZXMpOgorCisjaWYgIWRlZmluZWQoVVNFX1dDSEFSKSAmJiAhZGVmaW5lZChVU0VfVVRGMTYpCisJdGVzdAklZGwsICVkbAorCWp6CUwobmV4dF8yNF9ieXRlcykKKworCXRlc3QJJDB4MDEsICVkbAorCWpueglMKEJ5dGUxNikKKworCXRlc3QJJDB4MDIsICVkbAorCWpueglMKEJ5dGUxNykKKworCXRlc3QJJDB4MDQsICVkbAorCWpueglMKEJ5dGUxOCkKKworCXRlc3QJJDB4MDgsICVkbAorCWpueglMKEJ5dGUxOSkKKworCXRlc3QJJDB4MTAsICVkbAorCWpueglMKEJ5dGUyMCkKKworCXRlc3QJJDB4MjAsICVkbAorCWpueglMKEJ5dGUyMSkKKworCXRlc3QJJDB4NDAsICVkbAorCWpueglMKEJ5dGUyMikKK0woQnl0ZTIzKToKKwltb3Z6YmwJLTkoJWVkaSksICVlYXgKKwltb3Z6YmwJLTkoJWVzaSksICVlZHgKKwlzdWIJJWVkeCwgJWVheAorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChCeXRlMTYpOgorCW1vdnpibAktMTYoJWVkaSksICVlYXgKKwltb3Z6YmwJLTE2KCVlc2kpLCAlZWR4CisJc3ViCSVlZHgsICVlYXgKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woQnl0ZTE3KToKKwltb3Z6YmwJLTE1KCVlZGkpLCAlZWF4CisJbW92emJsCS0xNSglZXNpKSwgJWVkeAorCXN1YgklZWR4LCAlZWF4CisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKEJ5dGUxOCk6CisJbW92emJsCS0xNCglZWRpKSwgJWVheAorCW1vdnpibAktMTQoJWVzaSksICVlZHgKKwlzdWIJJWVkeCwgJWVheAorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChCeXRlMTkpOgorCW1vdnpibAktMTMoJWVkaSksICVlYXgKKwltb3Z6YmwJLTEzKCVlc2kpLCAlZWR4CisJc3ViCSVlZHgsICVlYXgKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woQnl0ZTIwKToKKwltb3Z6YmwJLTEyKCVlZGkpLCAlZWF4CisJbW92emJsCS0xMiglZXNpKSwgJWVkeAorCXN1YgklZWR4LCAlZWF4CisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKEJ5dGUyMSk6CisJbW92emJsCS0xMSglZWRpKSwgJWVheAorCW1vdnpibAktMTEoJWVzaSksICVlZHgKKwlzdWIJJWVkeCwgJWVheAorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChCeXRlMjIpOgorCW1vdnpibAktMTAoJWVkaSksICVlYXgKKwltb3Z6YmwJLTEwKCVlc2kpLCAlZWR4CisJc3ViCSVlZHgsICVlYXgKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0wobmV4dF8yNF9ieXRlcyk6CisJbGVhCTgoJWVkaSksICVlZGkKKwlsZWEJOCglZXNpKSwgJWVzaQorCXRlc3QJJDB4MDEsICVkaAorCWpueglMKEJ5dGUxNikKKworCXRlc3QJJDB4MDIsICVkaAorCWpueglMKEJ5dGUxNykKKworCXRlc3QJJDB4MDQsICVkaAorCWpueglMKEJ5dGUxOCkKKworCXRlc3QJJDB4MDgsICVkaAorCWpueglMKEJ5dGUxOSkKKworCXRlc3QJJDB4MTAsICVkaAorCWpueglMKEJ5dGUyMCkKKworCXRlc3QJJDB4MjAsICVkaAorCWpueglMKEJ5dGUyMSkKKworCXRlc3QJJDB4NDAsICVkaAorCWpueglMKEJ5dGUyMikKKworCS5wMmFsaWduIDQKK0woQnl0ZTMxKToKKwltb3Z6YmwJLTkoJWVkaSksICVlYXgKKwltb3Z6YmwJLTkoJWVzaSksICVlZHgKKwlzdWIJJWVkeCwgJWVheAorCVJFVFVSTl9FTkQKKyNlbGlmIGRlZmluZWQoVVNFX0FTX1dNRU1DTVApCisKKy8qIHNwZWNpYWwgZm9yIHdtZW1jbXAgKi8KKwl0ZXN0CSVkbCwgJWRsCisJanoJTChuZXh0X3R3b19kb3VibGVfd29yZHMpCisJYW5kCSQxNSwgJWRsCisJanoJTChzZWNvbmRfZG91YmxlX3dvcmQpCisJbW92CS0xNiglZWRpKSwgJWVjeAorCWNtcAktMTYoJWVzaSksICVlY3gKKwltb3YJJDEsICVlYXgKKwlqZwlMKG5lcXVhbF9iaWdnZXIpCisJbmVnCSVlYXgKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woc2Vjb25kX2RvdWJsZV93b3JkKToKKwltb3YJLTEyKCVlZGkpLCAlZWN4CisJY21wCS0xMiglZXNpKSwgJWVjeAorCW1vdgkkMSwgJWVheAorCWpnCUwobmVxdWFsX2JpZ2dlcikKKwluZWcJJWVheAorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChuZXh0X3R3b19kb3VibGVfd29yZHMpOgorCWFuZAkkMTUsICVkaAorCWp6CUwoZm91cnRoX2RvdWJsZV93b3JkKQorCW1vdgktOCglZWRpKSwgJWVjeAorCWNtcAktOCglZXNpKSwgJWVjeAorCW1vdgkkMSwgJWVheAorCWpnCUwobmVxdWFsX2JpZ2dlcikKKwluZWcJJWVheAorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChmb3VydGhfZG91YmxlX3dvcmQpOgorCW1vdgktNCglZWRpKSwgJWVjeAorCWNtcAktNCglZXNpKSwgJWVjeAorCW1vdgkkMSwgJWVheAorCWpnCUwobmVxdWFsX2JpZ2dlcikKKwluZWcJJWVheAorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChuZXF1YWxfYmlnZ2VyKToKKwlSRVRVUk5fRU5ECisKKyNlbGlmIGRlZmluZWQoVVNFX0FTX01FTUNNUDE2KQorCisvKiBzcGVjaWFsIGZvciBfX21lbWNtcDE2ICovCisJdGVzdAklZGwsICVkbAorCWp6CUwobmV4dF9mb3VyX3dvcmRzKQorCXRlc3QJJDE1LCAlZGwKKwlqeglMKHNlY29uZF90d29fd29yZHMpCisJdGVzdAkkMywgJWRsCisJanoJTChzZWNvbmRfd29yZCkKKwltb3Z6d2wJLTE2KCVlZGkpLCAlZWF4CisJbW92endsCS0xNiglZXNpKSwgJWVieAorCXN1YmwJJWVieCwgJWVheAorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChzZWNvbmRfd29yZCk6CisJbW92endsCS0xNCglZWRpKSwgJWVheAorCW1vdnp3bAktMTQoJWVzaSksICVlYngKKwlzdWJsCSVlYngsICVlYXgKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woc2Vjb25kX3R3b193b3Jkcyk6CisJdGVzdAkkNjMsICVkbAorCWp6CUwoZm91cnRoX3dvcmQpCisJbW92endsCS0xMiglZWRpKSwgJWVheAorCW1vdnp3bAktMTIoJWVzaSksICVlYngKKwlzdWJsCSVlYngsICVlYXgKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woZm91cnRoX3dvcmQpOgorCW1vdnp3bAktMTAoJWVkaSksICVlYXgKKwltb3Z6d2wJLTEwKCVlc2kpLCAlZWJ4CisJc3VibAklZWJ4LCAlZWF4CisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKG5leHRfZm91cl93b3Jkcyk6CisJdGVzdAkkMTUsICVkaAorCWp6CUwoZm91cnRoX3R3b193b3JkcykKKwl0ZXN0CSQzLCAlZGgKKwlqeglMKHNpeHRoX3dvcmQpCisJbW92endsCS04KCVlZGkpLCAlZWF4CisJbW92endsCS04KCVlc2kpLCAlZWJ4CisJc3VibAklZWJ4LCAlZWF4CisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKHNpeHRoX3dvcmQpOgorCW1vdnp3bAktNiglZWRpKSwgJWVheAorCW1vdnp3bAktNiglZXNpKSwgJWVieAorCXN1YmwJJWVieCwgJWVheAorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChmb3VydGhfdHdvX3dvcmRzKToKKwl0ZXN0CSQ2MywgJWRoCisJanoJTChlaWdodGhfd29yZCkKKwltb3Z6d2wJLTQoJWVkaSksICVlYXgKKwltb3Z6d2wJLTQoJWVzaSksICVlYngKKwlzdWJsCSVlYngsICVlYXgKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woZWlnaHRoX3dvcmQpOgorCW1vdnp3bAktMiglZWRpKSwgJWVheAorCW1vdnp3bAktMiglZXNpKSwgJWVieAorCXN1YmwJJWVieCwgJWVheAorCVJFVFVSTgorI2Vsc2UKKyMgZXJyb3IgVW5yZWFjaGFibGUgcHJlcHJvY2Vzc29yIGNhc2UKKyNlbmRpZgorCisJQ0ZJX1BVU0ggKCVlYngpCisKKwkucDJhbGlnbiA0CitMKG1vcmU4Ynl0ZXMpOgorCWNtcAkkMTYsICVlY3gKKwlqYWUJTChtb3JlMTZieXRlcykKKwljbXAJJDgsICVlY3gKKwlqZQlMKDhieXRlcykKKyNpZiAhZGVmaW5lZChVU0VfV0NIQVIpICYmICFkZWZpbmVkKFVTRV9VVEYxNikKKwljbXAJJDksICVlY3gKKwlqZQlMKDlieXRlcykKKwljbXAJJDEwLCAlZWN4CisJamUJTCgxMGJ5dGVzKQorCWNtcAkkMTEsICVlY3gKKwlqZQlMKDExYnl0ZXMpCisJY21wCSQxMiwgJWVjeAorCWplCUwoMTJieXRlcykKKwljbXAJJDEzLCAlZWN4CisJamUJTCgxM2J5dGVzKQorCWNtcAkkMTQsICVlY3gKKwlqZQlMKDE0Ynl0ZXMpCisJam1wCUwoMTVieXRlcykKKyNlbGlmIGRlZmluZWQoVVNFX1dDSEFSKSAmJiAhZGVmaW5lZChVU0VfVVRGMTYpCisJam1wCUwoMTJieXRlcykKKyNlbGlmIGRlZmluZWQoVVNFX1VURjE2KSAmJiAhZGVmaW5lZChVU0VfV0NIQVIpCisJY21wCSQxMCwgJWVjeAorCWplCUwoMTBieXRlcykKKwljbXAJJDEyLCAlZWN4CisJamUJTCgxMmJ5dGVzKQorCWptcAlMKDE0Ynl0ZXMpCisjZWxzZQorIyBlcnJvciBVbnJlYWNoYWJsZSBwcmVwcm9jZXNzb3IgY2FzZQorI2VuZGlmCisKKwkucDJhbGlnbiA0CitMKG1vcmUxNmJ5dGVzKToKKwljbXAJJDI0LCAlZWN4CisJamFlCUwobW9yZTI0Ynl0ZXMpCisJY21wCSQxNiwgJWVjeAorCWplCUwoMTZieXRlcykKKyNpZiAhZGVmaW5lZChVU0VfV0NIQVIpICYmICFkZWZpbmVkKFVTRV9VVEYxNikKKwljbXAJJDE3LCAlZWN4CisJamUJTCgxN2J5dGVzKQorCWNtcAkkMTgsICVlY3gKKwlqZQlMKDE4Ynl0ZXMpCisJY21wCSQxOSwgJWVjeAorCWplCUwoMTlieXRlcykKKwljbXAJJDIwLCAlZWN4CisJamUJTCgyMGJ5dGVzKQorCWNtcAkkMjEsICVlY3gKKwlqZQlMKDIxYnl0ZXMpCisJY21wCSQyMiwgJWVjeAorCWplCUwoMjJieXRlcykKKwlqbXAJTCgyM2J5dGVzKQorI2VsaWYgZGVmaW5lZChVU0VfV0NIQVIpICYmICFkZWZpbmVkKFVTRV9VVEYxNikKKwlqbXAJTCgyMGJ5dGVzKQorI2VsaWYgZGVmaW5lZChVU0VfVVRGMTYpICYmICFkZWZpbmVkKFVTRV9XQ0hBUikKKwljbXAJJDE4LCAlZWN4CisJamUJTCgxOGJ5dGVzKQorCWNtcAkkMjAsICVlY3gKKwlqZQlMKDIwYnl0ZXMpCisJam1wCUwoMjJieXRlcykKKyNlbHNlCisjIGVycm9yIFVucmVhY2hhYmxlIHByZXByb2Nlc3NvciBjYXNlCisjZW5kaWYKKworCS5wMmFsaWduIDQKK0wobW9yZTI0Ynl0ZXMpOgorCWNtcAkkMzIsICVlY3gKKwlqYWUJTChtb3JlMzJieXRlcykKKwljbXAJJDI0LCAlZWN4CisJamUJTCgyNGJ5dGVzKQorI2lmICFkZWZpbmVkKFVTRV9XQ0hBUikgJiYgIWRlZmluZWQoVVNFX1VURjE2KQorCWNtcAkkMjUsICVlY3gKKwlqZQlMKDI1Ynl0ZXMpCisJY21wCSQyNiwgJWVjeAorCWplCUwoMjZieXRlcykKKwljbXAJJDI3LCAlZWN4CisJamUJTCgyN2J5dGVzKQorCWNtcAkkMjgsICVlY3gKKwlqZQlMKDI4Ynl0ZXMpCisJY21wCSQyOSwgJWVjeAorCWplCUwoMjlieXRlcykKKwljbXAJJDMwLCAlZWN4CisJamUJTCgzMGJ5dGVzKQorCWptcAlMKDMxYnl0ZXMpCisjZWxpZiBkZWZpbmVkKFVTRV9XQ0hBUikgJiYgIWRlZmluZWQoVVNFX1VURjE2KQorCWptcAlMKDI4Ynl0ZXMpCisjZWxpZiBkZWZpbmVkKFVTRV9VVEYxNikgJiYgIWRlZmluZWQoVVNFX1dDSEFSKQorCWNtcAkkMjYsICVlY3gKKwlqZQlMKDI2Ynl0ZXMpCisJY21wCSQyOCwgJWVjeAorCWplCUwoMjhieXRlcykKKwlqbXAJTCgzMGJ5dGVzKQorI2Vsc2UKKyMgZXJyb3IgVW5yZWFjaGFibGUgcHJlcHJvY2Vzc29yIGNhc2UKKyNlbmRpZgorCisJLnAyYWxpZ24gNAorTChtb3JlMzJieXRlcyk6CisJY21wCSQ0MCwgJWVjeAorCWphZQlMKG1vcmU0MGJ5dGVzKQorCWNtcAkkMzIsICVlY3gKKwlqZQlMKDMyYnl0ZXMpCisjaWYgIWRlZmluZWQoVVNFX1dDSEFSKSAmJiAhZGVmaW5lZChVU0VfVVRGMTYpCisJY21wCSQzMywgJWVjeAorCWplCUwoMzNieXRlcykKKwljbXAJJDM0LCAlZWN4CisJamUJTCgzNGJ5dGVzKQorCWNtcAkkMzUsICVlY3gKKwlqZQlMKDM1Ynl0ZXMpCisJY21wCSQzNiwgJWVjeAorCWplCUwoMzZieXRlcykKKwljbXAJJDM3LCAlZWN4CisJamUJTCgzN2J5dGVzKQorCWNtcAkkMzgsICVlY3gKKwlqZQlMKDM4Ynl0ZXMpCisJam1wCUwoMzlieXRlcykKKyNlbGlmIGRlZmluZWQoVVNFX1dDSEFSKSAmJiAhZGVmaW5lZChVU0VfVVRGMTYpCisJam1wCUwoMzZieXRlcykKKyNlbGlmIGRlZmluZWQoVVNFX1VURjE2KSAmJiAhZGVmaW5lZChVU0VfV0NIQVIpCisJY21wCSQzNCwgJWVjeAorCWplCUwoMzRieXRlcykKKwljbXAJJDM2LCAlZWN4CisJamUJTCgzNmJ5dGVzKQorCWptcAlMKDM4Ynl0ZXMpCisjZWxzZQorIyBlcnJvciBVbnJlYWNoYWJsZSBwcmVwcm9jZXNzb3IgY2FzZQorI2VuZGlmCisKKwkucDJhbGlnbiA0CitMKGxlc3M0OGJ5dGVzKToKKwljbXAJJDgsICVlY3gKKwlqYWUJTChtb3JlOGJ5dGVzKQorI2lmICFkZWZpbmVkKFVTRV9XQ0hBUikgJiYgIWRlZmluZWQoVVNFX1VURjE2KQorCWNtcAkkMiwgJWVjeAorCWplCUwoMmJ5dGVzKQorCWNtcAkkMywgJWVjeAorCWplCUwoM2J5dGVzKQorCWNtcAkkNCwgJWVjeAorCWplCUwoNGJ5dGVzKQorCWNtcAkkNSwgJWVjeAorCWplCUwoNWJ5dGVzKQorCWNtcAkkNiwgJWVjeAorCWplCUwoNmJ5dGVzKQorCWptcAlMKDdieXRlcykKKyNlbGlmIGRlZmluZWQoVVNFX1dDSEFSKSAmJiAhZGVmaW5lZChVU0VfVVRGMTYpCisJam1wCUwoNGJ5dGVzKQorI2VsaWYgZGVmaW5lZChVU0VfVVRGMTYpICYmICFkZWZpbmVkKFVTRV9XQ0hBUikKKwljbXAJJDIsICVlY3gKKwlqZQlMKDJieXRlcykKKwljbXAJJDQsICVlY3gKKwlqZQlMKDRieXRlcykKKwlqbXAJTCg2Ynl0ZXMpCisjZWxzZQorIyBlcnJvciBVbnJlYWNoYWJsZSBwcmVwcm9jZXNzb3IgY2FzZQorI2VuZGlmCisKKwkucDJhbGlnbiA0CitMKG1vcmU0MGJ5dGVzKToKKwljbXAJJDQwLCAlZWN4CisJamUJTCg0MGJ5dGVzKQorI2lmICFkZWZpbmVkKFVTRV9XQ0hBUikgJiYgIWRlZmluZWQoVVNFX1VURjE2KQorCWNtcAkkNDEsICVlY3gKKwlqZQlMKDQxYnl0ZXMpCisJY21wCSQ0MiwgJWVjeAorCWplCUwoNDJieXRlcykKKwljbXAJJDQzLCAlZWN4CisJamUJTCg0M2J5dGVzKQorCWNtcAkkNDQsICVlY3gKKwlqZQlMKDQ0Ynl0ZXMpCisJY21wCSQ0NSwgJWVjeAorCWplCUwoNDVieXRlcykKKwljbXAJJDQ2LCAlZWN4CisJamUJTCg0NmJ5dGVzKQorCWptcAlMKDQ3Ynl0ZXMpCisjZWxpZiBkZWZpbmVkKFVTRV9VVEYxNikgJiYgIWRlZmluZWQoVVNFX1dDSEFSKQorCWNtcAkkNDIsICVlY3gKKwlqZQlMKDQyYnl0ZXMpCisJY21wCSQ0NCwgJWVjeAorCWplCUwoNDRieXRlcykKKwlqbXAJTCg0NmJ5dGVzKQorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChVU0VfQVNfV01FTUNNUCkgJiYgIWRlZmluZWQoVVNFX0FTX01FTUNNUDE2KQorCS5wMmFsaWduIDQKK0woNDRieXRlcyk6CisJbW92CS00NCglZWF4KSwgJWVjeAorCW1vdgktNDQoJWVkeCksICVlYngKKwljbXAJJWVieCwgJWVjeAorCWpuZQlMKGZpbmRfZGlmZikKK0woNDBieXRlcyk6CisJbW92CS00MCglZWF4KSwgJWVjeAorCW1vdgktNDAoJWVkeCksICVlYngKKwljbXAJJWVieCwgJWVjeAorCWpuZQlMKGZpbmRfZGlmZikKK0woMzZieXRlcyk6CisJbW92CS0zNiglZWF4KSwgJWVjeAorCW1vdgktMzYoJWVkeCksICVlYngKKwljbXAJJWVieCwgJWVjeAorCWpuZQlMKGZpbmRfZGlmZikKK0woMzJieXRlcyk6CisJbW92CS0zMiglZWF4KSwgJWVjeAorCW1vdgktMzIoJWVkeCksICVlYngKKwljbXAJJWVieCwgJWVjeAorCWpuZQlMKGZpbmRfZGlmZikKK0woMjhieXRlcyk6CisJbW92CS0yOCglZWF4KSwgJWVjeAorCW1vdgktMjgoJWVkeCksICVlYngKKwljbXAJJWVieCwgJWVjeAorCWpuZQlMKGZpbmRfZGlmZikKK0woMjRieXRlcyk6CisJbW92CS0yNCglZWF4KSwgJWVjeAorCW1vdgktMjQoJWVkeCksICVlYngKKwljbXAJJWVieCwgJWVjeAorCWpuZQlMKGZpbmRfZGlmZikKK0woMjBieXRlcyk6CisJbW92CS0yMCglZWF4KSwgJWVjeAorCW1vdgktMjAoJWVkeCksICVlYngKKwljbXAJJWVieCwgJWVjeAorCWpuZQlMKGZpbmRfZGlmZikKK0woMTZieXRlcyk6CisJbW92CS0xNiglZWF4KSwgJWVjeAorCW1vdgktMTYoJWVkeCksICVlYngKKwljbXAJJWVieCwgJWVjeAorCWpuZQlMKGZpbmRfZGlmZikKK0woMTJieXRlcyk6CisJbW92CS0xMiglZWF4KSwgJWVjeAorCW1vdgktMTIoJWVkeCksICVlYngKKwljbXAJJWVieCwgJWVjeAorCWpuZQlMKGZpbmRfZGlmZikKK0woOGJ5dGVzKToKKwltb3YJLTgoJWVheCksICVlY3gKKwltb3YJLTgoJWVkeCksICVlYngKKwljbXAJJWVieCwgJWVjeAorCWpuZQlMKGZpbmRfZGlmZikKK0woNGJ5dGVzKToKKwltb3YJLTQoJWVheCksICVlY3gKKwltb3YJLTQoJWVkeCksICVlYngKKwljbXAJJWVieCwgJWVjeAorCW1vdgkkMCwgJWVheAorCWpuZQlMKGZpbmRfZGlmZikKKwlQT1AJKCVlYngpCisJcmV0CisJQ0ZJX1BVU0ggKCVlYngpCisjZWxpZiBkZWZpbmVkKFVTRV9BU19XTUVNQ01QKQorCisJLnAyYWxpZ24gNAorTCg0NGJ5dGVzKToKKwltb3YJLTQ0KCVlYXgpLCAlZWN4CisJY21wCS00NCglZWR4KSwgJWVjeAorCWpuZQlMKGZpbmRfZGlmZikKK0woNDBieXRlcyk6CisJbW92CS00MCglZWF4KSwgJWVjeAorCWNtcAktNDAoJWVkeCksICVlY3gKKwlqbmUJTChmaW5kX2RpZmYpCitMKDM2Ynl0ZXMpOgorCW1vdgktMzYoJWVheCksICVlY3gKKwljbXAJLTM2KCVlZHgpLCAlZWN4CisJam5lCUwoZmluZF9kaWZmKQorTCgzMmJ5dGVzKToKKwltb3YJLTMyKCVlYXgpLCAlZWN4CisJY21wCS0zMiglZWR4KSwgJWVjeAorCWpuZQlMKGZpbmRfZGlmZikKK0woMjhieXRlcyk6CisJbW92CS0yOCglZWF4KSwgJWVjeAorCWNtcAktMjgoJWVkeCksICVlY3gKKwlqbmUJTChmaW5kX2RpZmYpCitMKDI0Ynl0ZXMpOgorCW1vdgktMjQoJWVheCksICVlY3gKKwljbXAJLTI0KCVlZHgpLCAlZWN4CisJam5lCUwoZmluZF9kaWZmKQorTCgyMGJ5dGVzKToKKwltb3YJLTIwKCVlYXgpLCAlZWN4CisJY21wCS0yMCglZWR4KSwgJWVjeAorCWpuZQlMKGZpbmRfZGlmZikKK0woMTZieXRlcyk6CisJbW92CS0xNiglZWF4KSwgJWVjeAorCWNtcAktMTYoJWVkeCksICVlY3gKKwlqbmUJTChmaW5kX2RpZmYpCitMKDEyYnl0ZXMpOgorCW1vdgktMTIoJWVheCksICVlY3gKKwljbXAJLTEyKCVlZHgpLCAlZWN4CisJam5lCUwoZmluZF9kaWZmKQorTCg4Ynl0ZXMpOgorCW1vdgktOCglZWF4KSwgJWVjeAorCWNtcAktOCglZWR4KSwgJWVjeAorCWpuZQlMKGZpbmRfZGlmZikKK0woNGJ5dGVzKToKKwltb3YJLTQoJWVheCksICVlY3gKKwl4b3IJJWVheCwgJWVheAorCWNtcAktNCglZWR4KSwgJWVjeAorCWpuZQlMKGZpbmRfZGlmZikKKwlQT1AJKCVlYngpCisJcmV0CisJQ0ZJX1BVU0ggKCVlYngpCisjZWxpZiBkZWZpbmVkIFVTRV9BU19NRU1DTVAxNgorCisJLnAyYWxpZ24gNAorTCg0NmJ5dGVzKToKKwltb3Z6d2wJLTQ2KCVlYXgpLCAlZWN4CisJbW92endsCS00NiglZWR4KSwgJWVieAorCXN1YmwJJWVieCwgJWVjeAorCWpuZQlMKG1lbWNtcDE2X2V4aXQpCitMKDQ0Ynl0ZXMpOgorCW1vdnp3bAktNDQoJWVheCksICVlY3gKKwltb3Z6d2wJLTQ0KCVlZHgpLCAlZWJ4CisJc3VibAklZWJ4LCAlZWN4CisJam5lCUwobWVtY21wMTZfZXhpdCkKK0woNDJieXRlcyk6CisJbW92endsCS00MiglZWF4KSwgJWVjeAorCW1vdnp3bAktNDIoJWVkeCksICVlYngKKwlzdWJsCSVlYngsICVlY3gKKwlqbmUJTChtZW1jbXAxNl9leGl0KQorTCg0MGJ5dGVzKToKKwltb3Z6d2wJLTQwKCVlYXgpLCAlZWN4CisJbW92endsCS00MCglZWR4KSwgJWVieAorCXN1YmwJJWVieCwgJWVjeAorCWpuZQlMKG1lbWNtcDE2X2V4aXQpCitMKDM4Ynl0ZXMpOgorCW1vdnp3bAktMzgoJWVheCksICVlY3gKKwltb3Z6d2wJLTM4KCVlZHgpLCAlZWJ4CisJc3VibAklZWJ4LCAlZWN4CisJam5lCUwobWVtY21wMTZfZXhpdCkKK0woMzZieXRlcyk6CisJbW92endsCS0zNiglZWF4KSwgJWVjeAorCW1vdnp3bAktMzYoJWVkeCksICVlYngKKwlzdWJsCSVlYngsICVlY3gKKwlqbmUJTChtZW1jbXAxNl9leGl0KQorTCgzNGJ5dGVzKToKKwltb3Z6d2wJLTM0KCVlYXgpLCAlZWN4CisJbW92endsCS0zNCglZWR4KSwgJWVieAorCXN1YmwJJWVieCwgJWVjeAorCWpuZQlMKG1lbWNtcDE2X2V4aXQpCitMKDMyYnl0ZXMpOgorCW1vdnp3bAktMzIoJWVheCksICVlY3gKKwltb3Z6d2wJLTMyKCVlZHgpLCAlZWJ4CisJc3VibAklZWJ4LCAlZWN4CisJam5lCUwobWVtY21wMTZfZXhpdCkKK0woMzBieXRlcyk6CisJbW92endsCS0zMCglZWF4KSwgJWVjeAorCW1vdnp3bAktMzAoJWVkeCksICVlYngKKwlzdWJsCSVlYngsICVlY3gKKwlqbmUJTChtZW1jbXAxNl9leGl0KQorTCgyOGJ5dGVzKToKKwltb3Z6d2wJLTI4KCVlYXgpLCAlZWN4CisJbW92endsCS0yOCglZWR4KSwgJWVieAorCXN1YmwJJWVieCwgJWVjeAorCWpuZQlMKG1lbWNtcDE2X2V4aXQpCitMKDI2Ynl0ZXMpOgorCW1vdnp3bAktMjYoJWVheCksICVlY3gKKwltb3Z6d2wJLTI2KCVlZHgpLCAlZWJ4CisJc3VibAklZWJ4LCAlZWN4CisJam5lCUwobWVtY21wMTZfZXhpdCkKK0woMjRieXRlcyk6CisJbW92endsCS0yNCglZWF4KSwgJWVjeAorCW1vdnp3bAktMjQoJWVkeCksICVlYngKKwlzdWJsCSVlYngsICVlY3gKKwlqbmUJTChtZW1jbXAxNl9leGl0KQorTCgyMmJ5dGVzKToKKwltb3Z6d2wJLTIyKCVlYXgpLCAlZWN4CisJbW92endsCS0yMiglZWR4KSwgJWVieAorCXN1YmwJJWVieCwgJWVjeAorCWpuZQlMKG1lbWNtcDE2X2V4aXQpCitMKDIwYnl0ZXMpOgorCW1vdnp3bAktMjAoJWVheCksICVlY3gKKwltb3Z6d2wJLTIwKCVlZHgpLCAlZWJ4CisJc3VibAklZWJ4LCAlZWN4CisJam5lCUwobWVtY21wMTZfZXhpdCkKK0woMThieXRlcyk6CisJbW92endsCS0xOCglZWF4KSwgJWVjeAorCW1vdnp3bAktMTgoJWVkeCksICVlYngKKwlzdWJsCSVlYngsICVlY3gKKwlqbmUJTChtZW1jbXAxNl9leGl0KQorTCgxNmJ5dGVzKToKKwltb3Z6d2wJLTE2KCVlYXgpLCAlZWN4CisJbW92endsCS0xNiglZWR4KSwgJWVieAorCXN1YmwJJWVieCwgJWVjeAorCWpuZQlMKG1lbWNtcDE2X2V4aXQpCitMKDE0Ynl0ZXMpOgorCW1vdnp3bAktMTQoJWVheCksICVlY3gKKwltb3Z6d2wJLTE0KCVlZHgpLCAlZWJ4CisJc3VibAklZWJ4LCAlZWN4CisJam5lCUwobWVtY21wMTZfZXhpdCkKK0woMTJieXRlcyk6CisJbW92endsCS0xMiglZWF4KSwgJWVjeAorCW1vdnp3bAktMTIoJWVkeCksICVlYngKKwlzdWJsCSVlYngsICVlY3gKKwlqbmUJTChtZW1jbXAxNl9leGl0KQorTCgxMGJ5dGVzKToKKwltb3Z6d2wJLTEwKCVlYXgpLCAlZWN4CisJbW92endsCS0xMCglZWR4KSwgJWVieAorCXN1YmwJJWVieCwgJWVjeAorCWpuZQlMKG1lbWNtcDE2X2V4aXQpCitMKDhieXRlcyk6CisJbW92endsCS04KCVlYXgpLCAlZWN4CisJbW92endsCS04KCVlZHgpLCAlZWJ4CisJc3VibAklZWJ4LCAlZWN4CisJam5lCUwobWVtY21wMTZfZXhpdCkKK0woNmJ5dGVzKToKKwltb3Z6d2wJLTYoJWVheCksICVlY3gKKwltb3Z6d2wJLTYoJWVkeCksICVlYngKKwlzdWJsCSVlYngsICVlY3gKKwlqbmUJTChtZW1jbXAxNl9leGl0KQorTCg0Ynl0ZXMpOgorCW1vdnp3bAktNCglZWF4KSwgJWVjeAorCW1vdnp3bAktNCglZWR4KSwgJWVieAorCXN1YmwJJWVieCwgJWVjeAorCWpuZQlMKG1lbWNtcDE2X2V4aXQpCitMKDJieXRlcyk6CisJbW92endsCS0yKCVlYXgpLCAlZWF4CisJbW92endsCS0yKCVlZHgpLCAlZWJ4CisJc3VibAklZWJ4LCAlZWF4CisJUE9QCSglZWJ4KQorCXJldAorCUNGSV9QVVNIICglZWJ4KQorI2Vsc2UKKyMgZXJyb3IgVW5yZWFjaGFibGUgcHJlcHJvY2Vzc29yIGNhc2UKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoVVNFX0FTX1dNRU1DTVApICYmICFkZWZpbmVkKFVTRV9BU19NRU1DTVAxNikKKworCS5wMmFsaWduIDQKK0woNDVieXRlcyk6CisJbW92CS00NSglZWF4KSwgJWVjeAorCW1vdgktNDUoJWVkeCksICVlYngKKwljbXAJJWVieCwgJWVjeAorCWpuZQlMKGZpbmRfZGlmZikKK0woNDFieXRlcyk6CisJbW92CS00MSglZWF4KSwgJWVjeAorCW1vdgktNDEoJWVkeCksICVlYngKKwljbXAJJWVieCwgJWVjeAorCWpuZQlMKGZpbmRfZGlmZikKK0woMzdieXRlcyk6CisJbW92CS0zNyglZWF4KSwgJWVjeAorCW1vdgktMzcoJWVkeCksICVlYngKKwljbXAJJWVieCwgJWVjeAorCWpuZQlMKGZpbmRfZGlmZikKK0woMzNieXRlcyk6CisJbW92CS0zMyglZWF4KSwgJWVjeAorCW1vdgktMzMoJWVkeCksICVlYngKKwljbXAJJWVieCwgJWVjeAorCWpuZQlMKGZpbmRfZGlmZikKK0woMjlieXRlcyk6CisJbW92CS0yOSglZWF4KSwgJWVjeAorCW1vdgktMjkoJWVkeCksICVlYngKKwljbXAJJWVieCwgJWVjeAorCWpuZQlMKGZpbmRfZGlmZikKK0woMjVieXRlcyk6CisJbW92CS0yNSglZWF4KSwgJWVjeAorCW1vdgktMjUoJWVkeCksICVlYngKKwljbXAJJWVieCwgJWVjeAorCWpuZQlMKGZpbmRfZGlmZikKK0woMjFieXRlcyk6CisJbW92CS0yMSglZWF4KSwgJWVjeAorCW1vdgktMjEoJWVkeCksICVlYngKKwljbXAJJWVieCwgJWVjeAorCWpuZQlMKGZpbmRfZGlmZikKK0woMTdieXRlcyk6CisJbW92CS0xNyglZWF4KSwgJWVjeAorCW1vdgktMTcoJWVkeCksICVlYngKKwljbXAJJWVieCwgJWVjeAorCWpuZQlMKGZpbmRfZGlmZikKK0woMTNieXRlcyk6CisJbW92CS0xMyglZWF4KSwgJWVjeAorCW1vdgktMTMoJWVkeCksICVlYngKKwljbXAJJWVieCwgJWVjeAorCWpuZQlMKGZpbmRfZGlmZikKK0woOWJ5dGVzKToKKwltb3YJLTkoJWVheCksICVlY3gKKwltb3YJLTkoJWVkeCksICVlYngKKwljbXAJJWVieCwgJWVjeAorCWpuZQlMKGZpbmRfZGlmZikKK0woNWJ5dGVzKToKKwltb3YJLTUoJWVheCksICVlY3gKKwltb3YJLTUoJWVkeCksICVlYngKKwljbXAJJWVieCwgJWVjeAorCWpuZQlMKGZpbmRfZGlmZikKKwltb3Z6YmwJLTEoJWVheCksICVlY3gKKwljbXAJLTEoJWVkeCksICVjbAorCW1vdgkkMCwgJWVheAorCWpuZQlMKGVuZCkKKwlQT1AJKCVlYngpCisJcmV0CisJQ0ZJX1BVU0ggKCVlYngpCisKKwkucDJhbGlnbiA0CitMKDQ2Ynl0ZXMpOgorCW1vdgktNDYoJWVheCksICVlY3gKKwltb3YJLTQ2KCVlZHgpLCAlZWJ4CisJY21wCSVlYngsICVlY3gKKwlqbmUJTChmaW5kX2RpZmYpCitMKDQyYnl0ZXMpOgorCW1vdgktNDIoJWVheCksICVlY3gKKwltb3YJLTQyKCVlZHgpLCAlZWJ4CisJY21wCSVlYngsICVlY3gKKwlqbmUJTChmaW5kX2RpZmYpCitMKDM4Ynl0ZXMpOgorCW1vdgktMzgoJWVheCksICVlY3gKKwltb3YJLTM4KCVlZHgpLCAlZWJ4CisJY21wCSVlYngsICVlY3gKKwlqbmUJTChmaW5kX2RpZmYpCitMKDM0Ynl0ZXMpOgorCW1vdgktMzQoJWVheCksICVlY3gKKwltb3YJLTM0KCVlZHgpLCAlZWJ4CisJY21wCSVlYngsICVlY3gKKwlqbmUJTChmaW5kX2RpZmYpCitMKDMwYnl0ZXMpOgorCW1vdgktMzAoJWVheCksICVlY3gKKwltb3YJLTMwKCVlZHgpLCAlZWJ4CisJY21wCSVlYngsICVlY3gKKwlqbmUJTChmaW5kX2RpZmYpCitMKDI2Ynl0ZXMpOgorCW1vdgktMjYoJWVheCksICVlY3gKKwltb3YJLTI2KCVlZHgpLCAlZWJ4CisJY21wCSVlYngsICVlY3gKKwlqbmUJTChmaW5kX2RpZmYpCitMKDIyYnl0ZXMpOgorCW1vdgktMjIoJWVheCksICVlY3gKKwltb3YJLTIyKCVlZHgpLCAlZWJ4CisJY21wCSVlYngsICVlY3gKKwlqbmUJTChmaW5kX2RpZmYpCitMKDE4Ynl0ZXMpOgorCW1vdgktMTgoJWVheCksICVlY3gKKwltb3YJLTE4KCVlZHgpLCAlZWJ4CisJY21wCSVlYngsICVlY3gKKwlqbmUJTChmaW5kX2RpZmYpCitMKDE0Ynl0ZXMpOgorCW1vdgktMTQoJWVheCksICVlY3gKKwltb3YJLTE0KCVlZHgpLCAlZWJ4CisJY21wCSVlYngsICVlY3gKKwlqbmUJTChmaW5kX2RpZmYpCitMKDEwYnl0ZXMpOgorCW1vdgktMTAoJWVheCksICVlY3gKKwltb3YJLTEwKCVlZHgpLCAlZWJ4CisJY21wCSVlYngsICVlY3gKKwlqbmUJTChmaW5kX2RpZmYpCitMKDZieXRlcyk6CisJbW92CS02KCVlYXgpLCAlZWN4CisJbW92CS02KCVlZHgpLCAlZWJ4CisJY21wCSVlYngsICVlY3gKKwlqbmUJTChmaW5kX2RpZmYpCitMKDJieXRlcyk6CisJbW92endsCS0yKCVlYXgpLCAlZWN4CisJbW92endsCS0yKCVlZHgpLCAlZWJ4CisJY21wCSVibCwgJWNsCisJam5lCUwoZW5kKQorCWNtcAklYmgsICVjaAorCW1vdgkkMCwgJWVheAorCWpuZQlMKGVuZCkKKwlQT1AJKCVlYngpCisJcmV0CisJQ0ZJX1BVU0ggKCVlYngpCisKKwkucDJhbGlnbiA0CitMKDQ3Ynl0ZXMpOgorCW1vdmwJLTQ3KCVlYXgpLCAlZWN4CisJbW92bAktNDcoJWVkeCksICVlYngKKwljbXAJJWVieCwgJWVjeAorCWpuZQlMKGZpbmRfZGlmZikKK0woNDNieXRlcyk6CisJbW92bAktNDMoJWVheCksICVlY3gKKwltb3ZsCS00MyglZWR4KSwgJWVieAorCWNtcAklZWJ4LCAlZWN4CisJam5lCUwoZmluZF9kaWZmKQorTCgzOWJ5dGVzKToKKwltb3ZsCS0zOSglZWF4KSwgJWVjeAorCW1vdmwJLTM5KCVlZHgpLCAlZWJ4CisJY21wCSVlYngsICVlY3gKKwlqbmUJTChmaW5kX2RpZmYpCitMKDM1Ynl0ZXMpOgorCW1vdmwJLTM1KCVlYXgpLCAlZWN4CisJbW92bAktMzUoJWVkeCksICVlYngKKwljbXAJJWVieCwgJWVjeAorCWpuZQlMKGZpbmRfZGlmZikKK0woMzFieXRlcyk6CisJbW92bAktMzEoJWVheCksICVlY3gKKwltb3ZsCS0zMSglZWR4KSwgJWVieAorCWNtcAklZWJ4LCAlZWN4CisJam5lCUwoZmluZF9kaWZmKQorTCgyN2J5dGVzKToKKwltb3ZsCS0yNyglZWF4KSwgJWVjeAorCW1vdmwJLTI3KCVlZHgpLCAlZWJ4CisJY21wCSVlYngsICVlY3gKKwlqbmUJTChmaW5kX2RpZmYpCitMKDIzYnl0ZXMpOgorCW1vdmwJLTIzKCVlYXgpLCAlZWN4CisJbW92bAktMjMoJWVkeCksICVlYngKKwljbXAJJWVieCwgJWVjeAorCWpuZQlMKGZpbmRfZGlmZikKK0woMTlieXRlcyk6CisJbW92bAktMTkoJWVheCksICVlY3gKKwltb3ZsCS0xOSglZWR4KSwgJWVieAorCWNtcAklZWJ4LCAlZWN4CisJam5lCUwoZmluZF9kaWZmKQorTCgxNWJ5dGVzKToKKwltb3ZsCS0xNSglZWF4KSwgJWVjeAorCW1vdmwJLTE1KCVlZHgpLCAlZWJ4CisJY21wCSVlYngsICVlY3gKKwlqbmUJTChmaW5kX2RpZmYpCitMKDExYnl0ZXMpOgorCW1vdmwJLTExKCVlYXgpLCAlZWN4CisJbW92bAktMTEoJWVkeCksICVlYngKKwljbXAJJWVieCwgJWVjeAorCWpuZQlMKGZpbmRfZGlmZikKK0woN2J5dGVzKToKKwltb3ZsCS03KCVlYXgpLCAlZWN4CisJbW92bAktNyglZWR4KSwgJWVieAorCWNtcAklZWJ4LCAlZWN4CisJam5lCUwoZmluZF9kaWZmKQorTCgzYnl0ZXMpOgorCW1vdnp3bAktMyglZWF4KSwgJWVjeAorCW1vdnp3bAktMyglZWR4KSwgJWVieAorCWNtcGIJJWJsLCAlY2wKKwlqbmUJTChlbmQpCisJY21wCSVieCwgJWN4CisJam5lCUwoZW5kKQorCW1vdnpibAktMSglZWF4KSwgJWVheAorCWNtcGIJLTEoJWVkeCksICVhbAorCW1vdgkkMCwgJWVheAorCWpuZQlMKGVuZCkKKwlQT1AJKCVlYngpCisJcmV0CisJQ0ZJX1BVU0ggKCVlYngpCisKKwkucDJhbGlnbiA0CitMKGZpbmRfZGlmZik6CisJY21wYgklYmwsICVjbAorCWpuZQlMKGVuZCkKKwljbXAJJWJ4LCAlY3gKKwlqbmUJTChlbmQpCisJc2hyCSQxNiwlZWN4CisJc2hyCSQxNiwlZWJ4CisJY21wCSVibCwgJWNsCisJam5lCUwoZW5kKQorCWNtcAklYngsICVjeAorCisJLnAyYWxpZ24gNAorTChlbmQpOgorCVBPUAkoJWVieCkKKwltb3YJJDEsICVlYXgKKwlqYQlMKGJpZ2dlcikKKwluZWcJJWVheAorTChiaWdnZXIpOgorCXJldAorI2VsaWYgZGVmaW5lZChVU0VfQVNfV01FTUNNUCkKKworCS5wMmFsaWduIDQKK0woZmluZF9kaWZmKToKKwlQT1AJKCVlYngpCisJbW92CSQxLCAlZWF4CisJamcJTChmaW5kX2RpZmZfYmlnZ2VyKQorCW5lZwklZWF4CisJcmV0CisKKwkucDJhbGlnbiA0CitMKGZpbmRfZGlmZl9iaWdnZXIpOgorCXJldAorCisjZWxpZiBkZWZpbmVkKFVTRV9BU19NRU1DTVAxNikKKworCS5wMmFsaWduIDQKK0wobWVtY21wMTZfZXhpdCk6CisJUE9QCSglZWJ4KQorCW1vdgklZWN4LCAlZWF4CisJcmV0CisjZWxzZQorIyBlcnJvciBVbnJlYWNoYWJsZSBwcmVwcm9jZXNzb3IgY2FzZQorI2VuZGlmCitFTkQgKE1FTUNNUCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3RyaW5nL3Nzc2UzLW1lbWNtcDE2LWF0b20uUyBiL2xpYmMvYXJjaC14ODYvc3RyaW5nL3Nzc2UzLW1lbWNtcDE2LWF0b20uUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYmU4ZjNkCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9zdHJpbmcvc3NzZTMtbWVtY21wMTYtYXRvbS5TCkBAIC0wLDAgKzEsMzcgQEAKKy8qCitDb3B5cmlnaHQgKGMpIDIwMTMsIEludGVsIENvcnBvcmF0aW9uCitBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgICAgKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgICAgKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgICAgKiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKworICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBJbnRlbCBDb3Jwb3JhdGlvbiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAgICAqIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICAgICogd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKK0FOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECitXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCitESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCitBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyhJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKK0xPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyhJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCitTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisKKyNkZWZpbmUgTUVNQ01QICBfX21lbWNtcDE2CisKKy8qIGludCBfX21lbWNtcDE2KGNvbnN0IHVuc2lnbmVkIHNob3J0ICpwdHIxLCBjb25zdCB1bnNpZ25lZCBzaG9ydCAqcHRyMiwgc2l6ZV90IG4pOyAqLworCisjZGVmaW5lIFVTRV9VVEYxNgorI2RlZmluZSBVU0VfQVNfTUVNQ01QMTYgMQorI2luY2x1ZGUgInNzc2UzLW1lbWNtcC1hdG9tLlMiCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N0cmluZy9zc3NlMy1tZW1jbXAzLW5ldy5TIGIvbGliYy9hcmNoLXg4Ni9zdHJpbmcvc3NzZTMtbWVtY21wMy1uZXcuUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWFkODc5MS4uMDAwMDAwMAotLS0gYS9saWJjL2FyY2gteDg2L3N0cmluZy9zc3NlMy1tZW1jbXAzLW5ldy5TCisrKyAvZGV2L251bGwKQEAgLTEsMjAzNSArMCwwIEBACi0vKgotQ29weXJpZ2h0IChjKSAyMDEwLCBJbnRlbCBDb3Jwb3JhdGlvbgotQWxsIHJpZ2h0cyByZXNlcnZlZC4KLQotUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci1tb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKLQotICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAotICAgICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLQotICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAotICAgICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgotICAgICogYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0KLSAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgSW50ZWwgQ29ycG9yYXRpb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0gICAgKiBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKLSAgICAqIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotCi1USElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECi1BTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgotQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0oSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci1MT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLUFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0oSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwotU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0qLwotCi0jaWZuZGVmIE1FTUNNUAotIyBkZWZpbmUgTUVNQ01QCQlzc3NlM19tZW1jbXAzX25ldwotI2VuZGlmCi0KLSNpZm5kZWYgTAotIyBkZWZpbmUgTChsYWJlbCkJLkwjI2xhYmVsCi0jZW5kaWYKLQotI2lmbmRlZiBBTElHTgotIyBkZWZpbmUgQUxJR04obikJLnAyYWxpZ24gbgotI2VuZGlmCi0KLSNpZm5kZWYgY2ZpX3N0YXJ0cHJvYwotIyBkZWZpbmUgY2ZpX3N0YXJ0cHJvYwkJCS5jZmlfc3RhcnRwcm9jCi0jZW5kaWYKLQotI2lmbmRlZiBjZmlfZW5kcHJvYwotIyBkZWZpbmUgY2ZpX2VuZHByb2MJCQkuY2ZpX2VuZHByb2MKLSNlbmRpZgotCi0jaWZuZGVmIGNmaV9yZWxfb2Zmc2V0Ci0jIGRlZmluZSBjZmlfcmVsX29mZnNldChyZWcsIG9mZikJLmNmaV9yZWxfb2Zmc2V0IHJlZywgb2ZmCi0jZW5kaWYKLQotI2lmbmRlZiBjZmlfcmVzdG9yZQotIyBkZWZpbmUgY2ZpX3Jlc3RvcmUocmVnKQkJLmNmaV9yZXN0b3JlIHJlZwotI2VuZGlmCi0KLSNpZm5kZWYgY2ZpX2FkanVzdF9jZmFfb2Zmc2V0Ci0jIGRlZmluZSBjZmlfYWRqdXN0X2NmYV9vZmZzZXQob2ZmKQkuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IG9mZgotI2VuZGlmCi0KLSNpZm5kZWYgY2ZpX3JlbWVtYmVyX3N0YXRlCi0jIGRlZmluZSBjZmlfcmVtZW1iZXJfc3RhdGUJCS5jZmlfcmVtZW1iZXJfc3RhdGUKLSNlbmRpZgotCi0jaWZuZGVmIGNmaV9yZXN0b3JlX3N0YXRlCi0jIGRlZmluZSBjZmlfcmVzdG9yZV9zdGF0ZQkJLmNmaV9yZXN0b3JlX3N0YXRlCi0jZW5kaWYKLQotI2lmbmRlZiBFTlRSWQotIyBkZWZpbmUgRU5UUlkobmFtZSkJCQlcCi0JLnR5cGUgbmFtZSwgIEBmdW5jdGlvbjsgCVwKLQkuZ2xvYmwgbmFtZTsJCQlcCi0JLnAyYWxpZ24gNDsJCQlcCi1uYW1lOgkJCQkJXAotCWNmaV9zdGFydHByb2MKLSNlbmRpZgotCi0jaWZuZGVmIEVORAotIyBkZWZpbmUgRU5EKG5hbWUpCQkJXAotCWNmaV9lbmRwcm9jOwkJCVwKLQkuc2l6ZSBuYW1lLCAuLW5hbWUKLSNlbmRpZgotCi0jZGVmaW5lIENGSV9QVVNIKFJFRykJCQkJCQlcCi0gIGNmaV9hZGp1c3RfY2ZhX29mZnNldCAoNCk7CQkJCQlcCi0gIGNmaV9yZWxfb2Zmc2V0IChSRUcsIDApCi0KLSNkZWZpbmUgQ0ZJX1BPUChSRUcpCQkJCQkJXAotICBjZmlfYWRqdXN0X2NmYV9vZmZzZXQgKC00KTsJCQkJCVwKLSAgY2ZpX3Jlc3RvcmUgKFJFRykKLQotI2RlZmluZSBQVVNIKFJFRykJcHVzaGwgUkVHOyBDRklfUFVTSCAoUkVHKQotI2RlZmluZSBQT1AoUkVHKQlwb3BsIFJFRzsgQ0ZJX1BPUCAoUkVHKQotCi0jZGVmaW5lIFBBUk1TCQk0Ci0jZGVmaW5lIEJMSzEJCVBBUk1TCi0jZGVmaW5lIEJMSzIJCUJMSzErNAotI2RlZmluZSBMRU4JCUJMSzIrNAotI2RlZmluZSBSRVRVUk5fRU5ECVBPUCAoJWVkaSk7IFBPUCAoJWVzaSk7IFBPUCAoJWVieCk7IHJldAotI2RlZmluZSBSRVRVUk4JCVJFVFVSTl9FTkQ7IGNmaV9yZXN0b3JlX3N0YXRlOyBjZmlfcmVtZW1iZXJfc3RhdGUKLQotCS5zZWN0aW9uIC50ZXh0LnNzc2UzLCJheCIsQHByb2diaXRzCi1FTlRSWSAoTUVNQ01QKQotCW1vdmwJTEVOKCVlc3ApLCAlZWN4Ci0JbW92bAlCTEsxKCVlc3ApLCAlZWF4Ci0JY21wCSQ0OCwgJWVjeAotCW1vdmwJQkxLMiglZXNwKSwgJWVkeAotCWphZQlMKDQ4Ynl0ZXNvcm1vcmUpCi0JY21wCSQxLCAlZWN4Ci0JamJlCUwobGVzczFieXRlcykKLQlQVVNIICglZWJ4KQotCWFkZAklZWN4LCAlZWR4Ci0JYWRkCSVlY3gsICVlYXgKLQlqbXAJTChsZXNzNDhieXRlcykKLQotCUNGSV9QT1AgKCVlYngpCi0JQUxJR04gKDQpCi1MKGxlc3MxYnl0ZXMpOgotCWpiCUwoemVybykKLQltb3ZiCSglZWF4KSwgJWNsCi0JY21wCSglZWR4KSwgJWNsCi0JamUJTCh6ZXJvKQotCW1vdgkkMSwgJWVheAotCWphCUwoMWJ5dGVzZW5kKQotCW5lZwklZWF4Ci1MKDFieXRlc2VuZCk6Ci0JcmV0Ci0KLQlBTElHTiAoNCkKLUwoemVybyk6Ci0JbW92CSQwLCAlZWF4Ci0JcmV0Ci0KLQlBTElHTiAoNCkKLUwoNDhieXRlc29ybW9yZSk6Ci0JUFVTSCAoJWVieCkKLQlQVVNIICglZXNpKQotCVBVU0ggKCVlZGkpCi0JY2ZpX3JlbWVtYmVyX3N0YXRlCi0JbW92ZHF1ICAgICglZWF4KSwgJXhtbTMKLQltb3ZkcXUgICAgKCVlZHgpLCAleG1tMAotCW1vdmwJJWVheCwgJWVkaQotCW1vdmwJJWVkeCwgJWVzaQotCXBjbXBlcWIgICAleG1tMCwgJXhtbTMKLQlwbW92bXNrYiAgJXhtbTMsICVlZHgKLQlsZWEJMTYoJWVkaSksICVlZGkKLQotCXN1YiAgICAgICQweGZmZmYsICVlZHgKLQlsZWEJMTYoJWVzaSksICVlc2kKLQlqbnoJICBMKGxlc3MxNmJ5dGVzKQotCW1vdgklZWRpLCAlZWR4Ci0JYW5kCSQweGYsICVlZHgKLQl4b3IJJWVkeCwgJWVkaQotCXN1YgklZWR4LCAlZXNpCi0JYWRkCSVlZHgsICVlY3gKLQltb3YJJWVzaSwgJWVkeAotCWFuZAkkMHhmLCAlZWR4Ci0JanoJTChzaHJfMCkKLQl4b3IJJWVkeCwgJWVzaQotCi0JY21wCSQ4LCAlZWR4Ci0JamFlCUwobmV4dF91bmFsaWduZWRfdGFibGUpCi0JY21wCSQwLCAlZWR4Ci0JamUJTChzaHJfMCkKLQljbXAJJDEsICVlZHgKLQlqZQlMKHNocl8xKQotCWNtcAkkMiwgJWVkeAotCWplCUwoc2hyXzIpCi0JY21wCSQzLCAlZWR4Ci0JamUJTChzaHJfMykKLQljbXAJJDQsICVlZHgKLQlqZQlMKHNocl80KQotCWNtcAkkNSwgJWVkeAotCWplCUwoc2hyXzUpCi0JY21wCSQ2LCAlZWR4Ci0JamUJTChzaHJfNikKLQlqbXAJTChzaHJfNykKLQotCUFMSUdOICg0KQotTChuZXh0X3VuYWxpZ25lZF90YWJsZSk6Ci0JY21wCSQ4LCAlZWR4Ci0JamUJTChzaHJfOCkKLQljbXAJJDksICVlZHgKLQlqZQlMKHNocl85KQotCWNtcAkkMTAsICVlZHgKLQlqZQlMKHNocl8xMCkKLQljbXAJJDExLCAlZWR4Ci0JamUJTChzaHJfMTEpCi0JY21wCSQxMiwgJWVkeAotCWplCUwoc2hyXzEyKQotCWNtcAkkMTMsICVlZHgKLQlqZQlMKHNocl8xMykKLQljbXAJJDE0LCAlZWR4Ci0JamUJTChzaHJfMTQpCi0Jam1wCUwoc2hyXzE1KQotCi0JQUxJR04gKDQpCi1MKHNocl8wKToKLQljbXAJJDgwLCAlZWN4Ci0JamFlCUwoc2hyXzBfZ29iYmxlKQotCWxlYQktNDgoJWVjeCksICVlY3gKLQl4b3IJJWVheCwgJWVheAotCW1vdmFwcwkoJWVzaSksICV4bW0xCi0JcGNtcGVxYgkoJWVkaSksICV4bW0xCi0JbW92YXBzCTE2KCVlc2kpLCAleG1tMgotCXBjbXBlcWIJMTYoJWVkaSksICV4bW0yCi0JcGFuZAkleG1tMSwgJXhtbTIKLQlwbW92bXNrYiAleG1tMiwgJWVkeAotCWFkZAkkMzIsICVlZGkKLQlhZGQJJDMyLCAlZXNpCi0Jc3ViCSQweGZmZmYsICVlZHgKLQlqbnoJTChleGl0KQotCi0JbGVhCSglZWN4LCAlZWRpLDEpLCAlZWF4Ci0JbGVhCSglZWN4LCAlZXNpLDEpLCAlZWR4Ci0JUE9QICglZWRpKQotCVBPUCAoJWVzaSkKLQlqbXAJTChsZXNzNDhieXRlcykKLQotCWNmaV9yZXN0b3JlX3N0YXRlCi0JY2ZpX3JlbWVtYmVyX3N0YXRlCi0JQUxJR04gKDQpCi1MKHNocl8wX2dvYmJsZSk6Ci0JbGVhCS00OCglZWN4KSwgJWVjeAotCW1vdmRxYQkoJWVzaSksICV4bW0wCi0JeG9yCSVlYXgsICVlYXgKLQlwY21wZXFiCSglZWRpKSwgJXhtbTAKLQlzdWIJJDMyLCAlZWN4Ci0JbW92ZHFhCTE2KCVlc2kpLCAleG1tMgotCXBjbXBlcWIJMTYoJWVkaSksICV4bW0yCi1MKHNocl8wX2dvYmJsZV9sb29wKToKLQlwYW5kCSV4bW0wLCAleG1tMgotCXN1YgkkMzIsICVlY3gKLQlwbW92bXNrYiAleG1tMiwgJWVkeAotCW1vdmRxYQkleG1tMCwgJXhtbTEKLQltb3ZkcWEJMzIoJWVzaSksICV4bW0wCi0JbW92ZHFhCTQ4KCVlc2kpLCAleG1tMgotCXNiYgkkMHhmZmZmLCAlZWR4Ci0JcGNtcGVxYgkzMiglZWRpKSwgJXhtbTAKLQlwY21wZXFiCTQ4KCVlZGkpLCAleG1tMgotCWxlYQkzMiglZWRpKSwgJWVkaQotCWxlYQkzMiglZXNpKSwgJWVzaQotCWp6CUwoc2hyXzBfZ29iYmxlX2xvb3ApCi0KLQlwYW5kCSV4bW0wLCAleG1tMgotCWNtcAkkMCwgJWVjeAotCWpnZQlMKHNocl8wX2dvYmJsZV9sb29wX25leHQpCi0JaW5jCSVlZHgKLQlhZGQJJDMyLCAlZWN4Ci1MKHNocl8wX2dvYmJsZV9sb29wX25leHQpOgotCXRlc3QJJWVkeCwgJWVkeAotCWpueglMKGV4aXQpCi0KLQlwbW92bXNrYiAleG1tMiwgJWVkeAotCW1vdmRxYQkleG1tMCwgJXhtbTEKLQlsZWEJMzIoJWVkaSksICVlZGkKLQlsZWEJMzIoJWVzaSksICVlc2kKLQlzdWIJJDB4ZmZmZiwgJWVkeAotCWpueglMKGV4aXQpCi0JbGVhCSglZWN4LCAlZWRpLDEpLCAlZWF4Ci0JbGVhCSglZWN4LCAlZXNpLDEpLCAlZWR4Ci0JUE9QICglZWRpKQotCVBPUCAoJWVzaSkKLQlqbXAJTChsZXNzNDhieXRlcykKLQotCWNmaV9yZXN0b3JlX3N0YXRlCi0JY2ZpX3JlbWVtYmVyX3N0YXRlCi0JQUxJR04gKDQpCi1MKHNocl8xKToKLQljbXAJJDgwLCAlZWN4Ci0JbGVhCS00OCglZWN4KSwgJWVjeAotCW1vdgklZWR4LCAlZWF4Ci0JamFlCUwoc2hyXzFfZ29iYmxlKQotCi0JbW92ZHFhCTE2KCVlc2kpLCAleG1tMQotCW1vdmRxYQkleG1tMSwgJXhtbTIKLQlwYWxpZ25yCSQxLCglZXNpKSwgJXhtbTEKLQlwY21wZXFiCSglZWRpKSwgJXhtbTEKLQotCW1vdmRxYQkzMiglZXNpKSwgJXhtbTMKLQlwYWxpZ25yCSQxLCV4bW0yLCAleG1tMwotCXBjbXBlcWIJMTYoJWVkaSksICV4bW0zCi0KLQlwYW5kCSV4bW0xLCAleG1tMwotCXBtb3Ztc2tiICV4bW0zLCAlZWR4Ci0JbGVhCTMyKCVlZGkpLCAlZWRpCi0JbGVhCTMyKCVlc2kpLCAlZXNpCi0Jc3ViCSQweGZmZmYsICVlZHgKLQlqbnoJTChleGl0KQotCWxlYQkoJWVjeCwgJWVkaSwxKSwgJWVheAotCWxlYQkxKCVlY3gsICVlc2ksMSksICVlZHgKLQlQT1AgKCVlZGkpCi0JUE9QICglZXNpKQotCWptcAlMKGxlc3M0OGJ5dGVzKQotCi0JY2ZpX3Jlc3RvcmVfc3RhdGUKLQljZmlfcmVtZW1iZXJfc3RhdGUKLQlBTElHTiAoNCkKLUwoc2hyXzFfZ29iYmxlKToKLQlzdWIJJDMyLCAlZWN4Ci0JbW92ZHFhCTE2KCVlc2kpLCAleG1tMAotCXBhbGlnbnIJJDEsKCVlc2kpLCAleG1tMAotCXBjbXBlcWIJKCVlZGkpLCAleG1tMAotCi0JbW92ZHFhCTMyKCVlc2kpLCAleG1tMwotCXBhbGlnbnIJJDEsMTYoJWVzaSksICV4bW0zCi0JcGNtcGVxYgkxNiglZWRpKSwgJXhtbTMKLQotTChzaHJfMV9nb2JibGVfbG9vcCk6Ci0JcGFuZAkleG1tMCwgJXhtbTMKLQlzdWIJJDMyLCAlZWN4Ci0JcG1vdm1za2IgJXhtbTMsICVlZHgKLQltb3ZkcWEJJXhtbTAsICV4bW0xCi0KLQltb3ZkcWEJNjQoJWVzaSksICV4bW0zCi0JcGFsaWducgkkMSw0OCglZXNpKSwgJXhtbTMKLQlzYmIJJDB4ZmZmZiwgJWVkeAotCW1vdmRxYQk0OCglZXNpKSwgJXhtbTAKLQlwYWxpZ25yCSQxLDMyKCVlc2kpLCAleG1tMAotCXBjbXBlcWIJMzIoJWVkaSksICV4bW0wCi0JbGVhCTMyKCVlc2kpLCAlZXNpCi0JcGNtcGVxYgk0OCglZWRpKSwgJXhtbTMKLQotCWxlYQkzMiglZWRpKSwgJWVkaQotCWp6CUwoc2hyXzFfZ29iYmxlX2xvb3ApCi0JcGFuZAkleG1tMCwgJXhtbTMKLQotCWNtcAkkMCwgJWVjeAotCWpnZQlMKHNocl8xX2dvYmJsZV9uZXh0KQotCWluYwklZWR4Ci0JYWRkCSQzMiwgJWVjeAotTChzaHJfMV9nb2JibGVfbmV4dCk6Ci0JdGVzdAklZWR4LCAlZWR4Ci0Jam56CUwoZXhpdCkKLQotCXBtb3Ztc2tiICV4bW0zLCAlZWR4Ci0JbW92ZHFhCSV4bW0wLCAleG1tMQotCWxlYQkzMiglZWRpKSwgJWVkaQotCWxlYQkzMiglZXNpKSwgJWVzaQotCXN1YgkkMHhmZmZmLCAlZWR4Ci0Jam56CUwoZXhpdCkKLQotCWxlYQkoJWVjeCwgJWVkaSwxKSwgJWVheAotCWxlYQkxKCVlY3gsICVlc2ksMSksICVlZHgKLQlQT1AgKCVlZGkpCi0JUE9QICglZXNpKQotCWptcAlMKGxlc3M0OGJ5dGVzKQotCi0JY2ZpX3Jlc3RvcmVfc3RhdGUKLQljZmlfcmVtZW1iZXJfc3RhdGUKLQlBTElHTiAoNCkKLUwoc2hyXzIpOgotCWNtcAkkODAsICVlY3gKLQlsZWEJLTQ4KCVlY3gpLCAlZWN4Ci0JbW92CSVlZHgsICVlYXgKLQlqYWUJTChzaHJfMl9nb2JibGUpCi0KLQltb3ZkcWEJMTYoJWVzaSksICV4bW0xCi0JbW92ZHFhCSV4bW0xLCAleG1tMgotCXBhbGlnbnIJJDIsKCVlc2kpLCAleG1tMQotCXBjbXBlcWIJKCVlZGkpLCAleG1tMQotCi0JbW92ZHFhCTMyKCVlc2kpLCAleG1tMwotCXBhbGlnbnIJJDIsJXhtbTIsICV4bW0zCi0JcGNtcGVxYgkxNiglZWRpKSwgJXhtbTMKLQotCXBhbmQJJXhtbTEsICV4bW0zCi0JcG1vdm1za2IgJXhtbTMsICVlZHgKLQlsZWEJMzIoJWVkaSksICVlZGkKLQlsZWEJMzIoJWVzaSksICVlc2kKLQlzdWIJJDB4ZmZmZiwgJWVkeAotCWpueglMKGV4aXQpCi0JbGVhCSglZWN4LCAlZWRpLDEpLCAlZWF4Ci0JbGVhCTIoJWVjeCwgJWVzaSwxKSwgJWVkeAotCVBPUCAoJWVkaSkKLQlQT1AgKCVlc2kpCi0Jam1wCUwobGVzczQ4Ynl0ZXMpCi0KLQljZmlfcmVzdG9yZV9zdGF0ZQotCWNmaV9yZW1lbWJlcl9zdGF0ZQotCUFMSUdOICg0KQotTChzaHJfMl9nb2JibGUpOgotCXN1YgkkMzIsICVlY3gKLQltb3ZkcWEJMTYoJWVzaSksICV4bW0wCi0JcGFsaWducgkkMiwoJWVzaSksICV4bW0wCi0JcGNtcGVxYgkoJWVkaSksICV4bW0wCi0KLQltb3ZkcWEJMzIoJWVzaSksICV4bW0zCi0JcGFsaWducgkkMiwxNiglZXNpKSwgJXhtbTMKLQlwY21wZXFiCTE2KCVlZGkpLCAleG1tMwotCi1MKHNocl8yX2dvYmJsZV9sb29wKToKLQlwYW5kCSV4bW0wLCAleG1tMwotCXN1YgkkMzIsICVlY3gKLQlwbW92bXNrYiAleG1tMywgJWVkeAotCW1vdmRxYQkleG1tMCwgJXhtbTEKLQotCW1vdmRxYQk2NCglZXNpKSwgJXhtbTMKLQlwYWxpZ25yCSQyLDQ4KCVlc2kpLCAleG1tMwotCXNiYgkkMHhmZmZmLCAlZWR4Ci0JbW92ZHFhCTQ4KCVlc2kpLCAleG1tMAotCXBhbGlnbnIJJDIsMzIoJWVzaSksICV4bW0wCi0JcGNtcGVxYgkzMiglZWRpKSwgJXhtbTAKLQlsZWEJMzIoJWVzaSksICVlc2kKLQlwY21wZXFiCTQ4KCVlZGkpLCAleG1tMwotCi0JbGVhCTMyKCVlZGkpLCAlZWRpCi0JanoJTChzaHJfMl9nb2JibGVfbG9vcCkKLQlwYW5kCSV4bW0wLCAleG1tMwotCi0JY21wCSQwLCAlZWN4Ci0JamdlCUwoc2hyXzJfZ29iYmxlX25leHQpCi0JaW5jCSVlZHgKLQlhZGQJJDMyLCAlZWN4Ci1MKHNocl8yX2dvYmJsZV9uZXh0KToKLQl0ZXN0CSVlZHgsICVlZHgKLQlqbnoJTChleGl0KQotCi0JcG1vdm1za2IgJXhtbTMsICVlZHgKLQltb3ZkcWEJJXhtbTAsICV4bW0xCi0JbGVhCTMyKCVlZGkpLCAlZWRpCi0JbGVhCTMyKCVlc2kpLCAlZXNpCi0Jc3ViCSQweGZmZmYsICVlZHgKLQlqbnoJTChleGl0KQotCi0JbGVhCSglZWN4LCAlZWRpLDEpLCAlZWF4Ci0JbGVhCTIoJWVjeCwgJWVzaSwxKSwgJWVkeAotCVBPUCAoJWVkaSkKLQlQT1AgKCVlc2kpCi0Jam1wCUwobGVzczQ4Ynl0ZXMpCi0KLQljZmlfcmVzdG9yZV9zdGF0ZQotCWNmaV9yZW1lbWJlcl9zdGF0ZQotCUFMSUdOICg0KQotTChzaHJfMyk6Ci0JY21wCSQ4MCwgJWVjeAotCWxlYQktNDgoJWVjeCksICVlY3gKLQltb3YJJWVkeCwgJWVheAotCWphZQlMKHNocl8zX2dvYmJsZSkKLQotCW1vdmRxYQkxNiglZXNpKSwgJXhtbTEKLQltb3ZkcWEJJXhtbTEsICV4bW0yCi0JcGFsaWducgkkMywoJWVzaSksICV4bW0xCi0JcGNtcGVxYgkoJWVkaSksICV4bW0xCi0KLQltb3ZkcWEJMzIoJWVzaSksICV4bW0zCi0JcGFsaWducgkkMywleG1tMiwgJXhtbTMKLQlwY21wZXFiCTE2KCVlZGkpLCAleG1tMwotCi0JcGFuZAkleG1tMSwgJXhtbTMKLQlwbW92bXNrYiAleG1tMywgJWVkeAotCWxlYQkzMiglZWRpKSwgJWVkaQotCWxlYQkzMiglZXNpKSwgJWVzaQotCXN1YgkkMHhmZmZmLCAlZWR4Ci0Jam56CUwoZXhpdCkKLQlsZWEJKCVlY3gsICVlZGksMSksICVlYXgKLQlsZWEJMyglZWN4LCAlZXNpLDEpLCAlZWR4Ci0JUE9QICglZWRpKQotCVBPUCAoJWVzaSkKLQlqbXAJTChsZXNzNDhieXRlcykKLQotCWNmaV9yZXN0b3JlX3N0YXRlCi0JY2ZpX3JlbWVtYmVyX3N0YXRlCi0JQUxJR04gKDQpCi1MKHNocl8zX2dvYmJsZSk6Ci0Jc3ViCSQzMiwgJWVjeAotCW1vdmRxYQkxNiglZXNpKSwgJXhtbTAKLQlwYWxpZ25yCSQzLCglZXNpKSwgJXhtbTAKLQlwY21wZXFiCSglZWRpKSwgJXhtbTAKLQotCW1vdmRxYQkzMiglZXNpKSwgJXhtbTMKLQlwYWxpZ25yCSQzLDE2KCVlc2kpLCAleG1tMwotCXBjbXBlcWIJMTYoJWVkaSksICV4bW0zCi0KLUwoc2hyXzNfZ29iYmxlX2xvb3ApOgotCXBhbmQJJXhtbTAsICV4bW0zCi0Jc3ViCSQzMiwgJWVjeAotCXBtb3Ztc2tiICV4bW0zLCAlZWR4Ci0JbW92ZHFhCSV4bW0wLCAleG1tMQotCi0JbW92ZHFhCTY0KCVlc2kpLCAleG1tMwotCXBhbGlnbnIJJDMsNDgoJWVzaSksICV4bW0zCi0Jc2JiCSQweGZmZmYsICVlZHgKLQltb3ZkcWEJNDgoJWVzaSksICV4bW0wCi0JcGFsaWducgkkMywzMiglZXNpKSwgJXhtbTAKLQlwY21wZXFiCTMyKCVlZGkpLCAleG1tMAotCWxlYQkzMiglZXNpKSwgJWVzaQotCXBjbXBlcWIJNDgoJWVkaSksICV4bW0zCi0KLQlsZWEJMzIoJWVkaSksICVlZGkKLQlqeglMKHNocl8zX2dvYmJsZV9sb29wKQotCXBhbmQJJXhtbTAsICV4bW0zCi0KLQljbXAJJDAsICVlY3gKLQlqZ2UJTChzaHJfM19nb2JibGVfbmV4dCkKLQlpbmMJJWVkeAotCWFkZAkkMzIsICVlY3gKLUwoc2hyXzNfZ29iYmxlX25leHQpOgotCXRlc3QJJWVkeCwgJWVkeAotCWpueglMKGV4aXQpCi0KLQlwbW92bXNrYiAleG1tMywgJWVkeAotCW1vdmRxYQkleG1tMCwgJXhtbTEKLQlsZWEJMzIoJWVkaSksICVlZGkKLQlsZWEJMzIoJWVzaSksICVlc2kKLQlzdWIJJDB4ZmZmZiwgJWVkeAotCWpueglMKGV4aXQpCi0KLQlsZWEJKCVlY3gsICVlZGksMSksICVlYXgKLQlsZWEJMyglZWN4LCAlZXNpLDEpLCAlZWR4Ci0JUE9QICglZWRpKQotCVBPUCAoJWVzaSkKLQlqbXAJTChsZXNzNDhieXRlcykKLQotCWNmaV9yZXN0b3JlX3N0YXRlCi0JY2ZpX3JlbWVtYmVyX3N0YXRlCi0JQUxJR04gKDQpCi1MKHNocl80KToKLQljbXAJJDgwLCAlZWN4Ci0JbGVhCS00OCglZWN4KSwgJWVjeAotCW1vdgklZWR4LCAlZWF4Ci0JamFlCUwoc2hyXzRfZ29iYmxlKQotCi0JbW92ZHFhCTE2KCVlc2kpLCAleG1tMQotCW1vdmRxYQkleG1tMSwgJXhtbTIKLQlwYWxpZ25yCSQ0LCglZXNpKSwgJXhtbTEKLQlwY21wZXFiCSglZWRpKSwgJXhtbTEKLQotCW1vdmRxYQkzMiglZXNpKSwgJXhtbTMKLQlwYWxpZ25yCSQ0LCV4bW0yLCAleG1tMwotCXBjbXBlcWIJMTYoJWVkaSksICV4bW0zCi0KLQlwYW5kCSV4bW0xLCAleG1tMwotCXBtb3Ztc2tiICV4bW0zLCAlZWR4Ci0JbGVhCTMyKCVlZGkpLCAlZWRpCi0JbGVhCTMyKCVlc2kpLCAlZXNpCi0Jc3ViCSQweGZmZmYsICVlZHgKLQlqbnoJTChleGl0KQotCWxlYQkoJWVjeCwgJWVkaSwxKSwgJWVheAotCWxlYQk0KCVlY3gsICVlc2ksMSksICVlZHgKLQlQT1AgKCVlZGkpCi0JUE9QICglZXNpKQotCWptcAlMKGxlc3M0OGJ5dGVzKQotCi0JY2ZpX3Jlc3RvcmVfc3RhdGUKLQljZmlfcmVtZW1iZXJfc3RhdGUKLQlBTElHTiAoNCkKLUwoc2hyXzRfZ29iYmxlKToKLQlzdWIJJDMyLCAlZWN4Ci0JbW92ZHFhCTE2KCVlc2kpLCAleG1tMAotCXBhbGlnbnIJJDQsKCVlc2kpLCAleG1tMAotCXBjbXBlcWIJKCVlZGkpLCAleG1tMAotCi0JbW92ZHFhCTMyKCVlc2kpLCAleG1tMwotCXBhbGlnbnIJJDQsMTYoJWVzaSksICV4bW0zCi0JcGNtcGVxYgkxNiglZWRpKSwgJXhtbTMKLQotTChzaHJfNF9nb2JibGVfbG9vcCk6Ci0JcGFuZAkleG1tMCwgJXhtbTMKLQlzdWIJJDMyLCAlZWN4Ci0JcG1vdm1za2IgJXhtbTMsICVlZHgKLQltb3ZkcWEJJXhtbTAsICV4bW0xCi0KLQltb3ZkcWEJNjQoJWVzaSksICV4bW0zCi0JcGFsaWducgkkNCw0OCglZXNpKSwgJXhtbTMKLQlzYmIJJDB4ZmZmZiwgJWVkeAotCW1vdmRxYQk0OCglZXNpKSwgJXhtbTAKLQlwYWxpZ25yCSQ0LDMyKCVlc2kpLCAleG1tMAotCXBjbXBlcWIJMzIoJWVkaSksICV4bW0wCi0JbGVhCTMyKCVlc2kpLCAlZXNpCi0JcGNtcGVxYgk0OCglZWRpKSwgJXhtbTMKLQotCWxlYQkzMiglZWRpKSwgJWVkaQotCWp6CUwoc2hyXzRfZ29iYmxlX2xvb3ApCi0JcGFuZAkleG1tMCwgJXhtbTMKLQotCWNtcAkkMCwgJWVjeAotCWpnZQlMKHNocl80X2dvYmJsZV9uZXh0KQotCWluYwklZWR4Ci0JYWRkCSQzMiwgJWVjeAotTChzaHJfNF9nb2JibGVfbmV4dCk6Ci0JdGVzdAklZWR4LCAlZWR4Ci0Jam56CUwoZXhpdCkKLQotCXBtb3Ztc2tiICV4bW0zLCAlZWR4Ci0JbW92ZHFhCSV4bW0wLCAleG1tMQotCWxlYQkzMiglZWRpKSwgJWVkaQotCWxlYQkzMiglZXNpKSwgJWVzaQotCXN1YgkkMHhmZmZmLCAlZWR4Ci0Jam56CUwoZXhpdCkKLQotCWxlYQkoJWVjeCwgJWVkaSwxKSwgJWVheAotCWxlYQk0KCVlY3gsICVlc2ksMSksICVlZHgKLQlQT1AgKCVlZGkpCi0JUE9QICglZXNpKQotCWptcAlMKGxlc3M0OGJ5dGVzKQotCi0JY2ZpX3Jlc3RvcmVfc3RhdGUKLQljZmlfcmVtZW1iZXJfc3RhdGUKLQlBTElHTiAoNCkKLUwoc2hyXzUpOgotCWNtcAkkODAsICVlY3gKLQlsZWEJLTQ4KCVlY3gpLCAlZWN4Ci0JbW92CSVlZHgsICVlYXgKLQlqYWUJTChzaHJfNV9nb2JibGUpCi0KLQltb3ZkcWEJMTYoJWVzaSksICV4bW0xCi0JbW92ZHFhCSV4bW0xLCAleG1tMgotCXBhbGlnbnIJJDUsKCVlc2kpLCAleG1tMQotCXBjbXBlcWIJKCVlZGkpLCAleG1tMQotCi0JbW92ZHFhCTMyKCVlc2kpLCAleG1tMwotCXBhbGlnbnIJJDUsJXhtbTIsICV4bW0zCi0JcGNtcGVxYgkxNiglZWRpKSwgJXhtbTMKLQotCXBhbmQJJXhtbTEsICV4bW0zCi0JcG1vdm1za2IgJXhtbTMsICVlZHgKLQlsZWEJMzIoJWVkaSksICVlZGkKLQlsZWEJMzIoJWVzaSksICVlc2kKLQlzdWIJJDB4ZmZmZiwgJWVkeAotCWpueglMKGV4aXQpCi0JbGVhCSglZWN4LCAlZWRpLDEpLCAlZWF4Ci0JbGVhCTUoJWVjeCwgJWVzaSwxKSwgJWVkeAotCVBPUCAoJWVkaSkKLQlQT1AgKCVlc2kpCi0Jam1wCUwobGVzczQ4Ynl0ZXMpCi0KLQljZmlfcmVzdG9yZV9zdGF0ZQotCWNmaV9yZW1lbWJlcl9zdGF0ZQotCUFMSUdOICg0KQotTChzaHJfNV9nb2JibGUpOgotCXN1YgkkMzIsICVlY3gKLQltb3ZkcWEJMTYoJWVzaSksICV4bW0wCi0JcGFsaWducgkkNSwoJWVzaSksICV4bW0wCi0JcGNtcGVxYgkoJWVkaSksICV4bW0wCi0KLQltb3ZkcWEJMzIoJWVzaSksICV4bW0zCi0JcGFsaWducgkkNSwxNiglZXNpKSwgJXhtbTMKLQlwY21wZXFiCTE2KCVlZGkpLCAleG1tMwotCi1MKHNocl81X2dvYmJsZV9sb29wKToKLQlwYW5kCSV4bW0wLCAleG1tMwotCXN1YgkkMzIsICVlY3gKLQlwbW92bXNrYiAleG1tMywgJWVkeAotCW1vdmRxYQkleG1tMCwgJXhtbTEKLQotCW1vdmRxYQk2NCglZXNpKSwgJXhtbTMKLQlwYWxpZ25yCSQ1LDQ4KCVlc2kpLCAleG1tMwotCXNiYgkkMHhmZmZmLCAlZWR4Ci0JbW92ZHFhCTQ4KCVlc2kpLCAleG1tMAotCXBhbGlnbnIJJDUsMzIoJWVzaSksICV4bW0wCi0JcGNtcGVxYgkzMiglZWRpKSwgJXhtbTAKLQlsZWEJMzIoJWVzaSksICVlc2kKLQlwY21wZXFiCTQ4KCVlZGkpLCAleG1tMwotCi0JbGVhCTMyKCVlZGkpLCAlZWRpCi0JanoJTChzaHJfNV9nb2JibGVfbG9vcCkKLQlwYW5kCSV4bW0wLCAleG1tMwotCi0JY21wCSQwLCAlZWN4Ci0JamdlCUwoc2hyXzVfZ29iYmxlX25leHQpCi0JaW5jCSVlZHgKLQlhZGQJJDMyLCAlZWN4Ci1MKHNocl81X2dvYmJsZV9uZXh0KToKLQl0ZXN0CSVlZHgsICVlZHgKLQlqbnoJTChleGl0KQotCi0JcG1vdm1za2IgJXhtbTMsICVlZHgKLQltb3ZkcWEJJXhtbTAsICV4bW0xCi0JbGVhCTMyKCVlZGkpLCAlZWRpCi0JbGVhCTMyKCVlc2kpLCAlZXNpCi0Jc3ViCSQweGZmZmYsICVlZHgKLQlqbnoJTChleGl0KQotCi0JbGVhCSglZWN4LCAlZWRpLDEpLCAlZWF4Ci0JbGVhCTUoJWVjeCwgJWVzaSwxKSwgJWVkeAotCVBPUCAoJWVkaSkKLQlQT1AgKCVlc2kpCi0Jam1wCUwobGVzczQ4Ynl0ZXMpCi0KLQljZmlfcmVzdG9yZV9zdGF0ZQotCWNmaV9yZW1lbWJlcl9zdGF0ZQotCUFMSUdOICg0KQotTChzaHJfNik6Ci0JY21wCSQ4MCwgJWVjeAotCWxlYQktNDgoJWVjeCksICVlY3gKLQltb3YJJWVkeCwgJWVheAotCWphZQlMKHNocl82X2dvYmJsZSkKLQotCW1vdmRxYQkxNiglZXNpKSwgJXhtbTEKLQltb3ZkcWEJJXhtbTEsICV4bW0yCi0JcGFsaWducgkkNiwoJWVzaSksICV4bW0xCi0JcGNtcGVxYgkoJWVkaSksICV4bW0xCi0KLQltb3ZkcWEJMzIoJWVzaSksICV4bW0zCi0JcGFsaWducgkkNiwleG1tMiwgJXhtbTMKLQlwY21wZXFiCTE2KCVlZGkpLCAleG1tMwotCi0JcGFuZAkleG1tMSwgJXhtbTMKLQlwbW92bXNrYiAleG1tMywgJWVkeAotCWxlYQkzMiglZWRpKSwgJWVkaQotCWxlYQkzMiglZXNpKSwgJWVzaQotCXN1YgkkMHhmZmZmLCAlZWR4Ci0Jam56CUwoZXhpdCkKLQlsZWEJKCVlY3gsICVlZGksMSksICVlYXgKLQlsZWEJNiglZWN4LCAlZXNpLDEpLCAlZWR4Ci0JUE9QICglZWRpKQotCVBPUCAoJWVzaSkKLQlqbXAJTChsZXNzNDhieXRlcykKLQotCWNmaV9yZXN0b3JlX3N0YXRlCi0JY2ZpX3JlbWVtYmVyX3N0YXRlCi0JQUxJR04gKDQpCi1MKHNocl82X2dvYmJsZSk6Ci0Jc3ViCSQzMiwgJWVjeAotCW1vdmRxYQkxNiglZXNpKSwgJXhtbTAKLQlwYWxpZ25yCSQ2LCglZXNpKSwgJXhtbTAKLQlwY21wZXFiCSglZWRpKSwgJXhtbTAKLQotCW1vdmRxYQkzMiglZXNpKSwgJXhtbTMKLQlwYWxpZ25yCSQ2LDE2KCVlc2kpLCAleG1tMwotCXBjbXBlcWIJMTYoJWVkaSksICV4bW0zCi0KLUwoc2hyXzZfZ29iYmxlX2xvb3ApOgotCXBhbmQJJXhtbTAsICV4bW0zCi0Jc3ViCSQzMiwgJWVjeAotCXBtb3Ztc2tiICV4bW0zLCAlZWR4Ci0JbW92ZHFhCSV4bW0wLCAleG1tMQotCi0JbW92ZHFhCTY0KCVlc2kpLCAleG1tMwotCXBhbGlnbnIJJDYsNDgoJWVzaSksICV4bW0zCi0Jc2JiCSQweGZmZmYsICVlZHgKLQltb3ZkcWEJNDgoJWVzaSksICV4bW0wCi0JcGFsaWducgkkNiwzMiglZXNpKSwgJXhtbTAKLQlwY21wZXFiCTMyKCVlZGkpLCAleG1tMAotCWxlYQkzMiglZXNpKSwgJWVzaQotCXBjbXBlcWIJNDgoJWVkaSksICV4bW0zCi0KLQlsZWEJMzIoJWVkaSksICVlZGkKLQlqeglMKHNocl82X2dvYmJsZV9sb29wKQotCXBhbmQJJXhtbTAsICV4bW0zCi0KLQljbXAJJDAsICVlY3gKLQlqZ2UJTChzaHJfNl9nb2JibGVfbmV4dCkKLQlpbmMJJWVkeAotCWFkZAkkMzIsICVlY3gKLUwoc2hyXzZfZ29iYmxlX25leHQpOgotCXRlc3QJJWVkeCwgJWVkeAotCWpueglMKGV4aXQpCi0KLQlwbW92bXNrYiAleG1tMywgJWVkeAotCW1vdmRxYQkleG1tMCwgJXhtbTEKLQlsZWEJMzIoJWVkaSksICVlZGkKLQlsZWEJMzIoJWVzaSksICVlc2kKLQlzdWIJJDB4ZmZmZiwgJWVkeAotCWpueglMKGV4aXQpCi0KLQlsZWEJKCVlY3gsICVlZGksMSksICVlYXgKLQlsZWEJNiglZWN4LCAlZXNpLDEpLCAlZWR4Ci0JUE9QICglZWRpKQotCVBPUCAoJWVzaSkKLQlqbXAJTChsZXNzNDhieXRlcykKLQotCWNmaV9yZXN0b3JlX3N0YXRlCi0JY2ZpX3JlbWVtYmVyX3N0YXRlCi0JQUxJR04gKDQpCi1MKHNocl83KToKLQljbXAJJDgwLCAlZWN4Ci0JbGVhCS00OCglZWN4KSwgJWVjeAotCW1vdgklZWR4LCAlZWF4Ci0JamFlCUwoc2hyXzdfZ29iYmxlKQotCi0JbW92ZHFhCTE2KCVlc2kpLCAleG1tMQotCW1vdmRxYQkleG1tMSwgJXhtbTIKLQlwYWxpZ25yCSQ3LCglZXNpKSwgJXhtbTEKLQlwY21wZXFiCSglZWRpKSwgJXhtbTEKLQotCW1vdmRxYQkzMiglZXNpKSwgJXhtbTMKLQlwYWxpZ25yCSQ3LCV4bW0yLCAleG1tMwotCXBjbXBlcWIJMTYoJWVkaSksICV4bW0zCi0KLQlwYW5kCSV4bW0xLCAleG1tMwotCXBtb3Ztc2tiICV4bW0zLCAlZWR4Ci0JbGVhCTMyKCVlZGkpLCAlZWRpCi0JbGVhCTMyKCVlc2kpLCAlZXNpCi0Jc3ViCSQweGZmZmYsICVlZHgKLQlqbnoJTChleGl0KQotCWxlYQkoJWVjeCwgJWVkaSwxKSwgJWVheAotCWxlYQk3KCVlY3gsICVlc2ksMSksICVlZHgKLQlQT1AgKCVlZGkpCi0JUE9QICglZXNpKQotCWptcAlMKGxlc3M0OGJ5dGVzKQotCi0JY2ZpX3Jlc3RvcmVfc3RhdGUKLQljZmlfcmVtZW1iZXJfc3RhdGUKLQlBTElHTiAoNCkKLUwoc2hyXzdfZ29iYmxlKToKLQlzdWIJJDMyLCAlZWN4Ci0JbW92ZHFhCTE2KCVlc2kpLCAleG1tMAotCXBhbGlnbnIJJDcsKCVlc2kpLCAleG1tMAotCXBjbXBlcWIJKCVlZGkpLCAleG1tMAotCi0JbW92ZHFhCTMyKCVlc2kpLCAleG1tMwotCXBhbGlnbnIJJDcsMTYoJWVzaSksICV4bW0zCi0JcGNtcGVxYgkxNiglZWRpKSwgJXhtbTMKLQotTChzaHJfN19nb2JibGVfbG9vcCk6Ci0JcGFuZAkleG1tMCwgJXhtbTMKLQlzdWIJJDMyLCAlZWN4Ci0JcG1vdm1za2IgJXhtbTMsICVlZHgKLQltb3ZkcWEJJXhtbTAsICV4bW0xCi0KLQltb3ZkcWEJNjQoJWVzaSksICV4bW0zCi0JcGFsaWducgkkNyw0OCglZXNpKSwgJXhtbTMKLQlzYmIJJDB4ZmZmZiwgJWVkeAotCW1vdmRxYQk0OCglZXNpKSwgJXhtbTAKLQlwYWxpZ25yCSQ3LDMyKCVlc2kpLCAleG1tMAotCXBjbXBlcWIJMzIoJWVkaSksICV4bW0wCi0JbGVhCTMyKCVlc2kpLCAlZXNpCi0JcGNtcGVxYgk0OCglZWRpKSwgJXhtbTMKLQotCWxlYQkzMiglZWRpKSwgJWVkaQotCWp6CUwoc2hyXzdfZ29iYmxlX2xvb3ApCi0JcGFuZAkleG1tMCwgJXhtbTMKLQotCWNtcAkkMCwgJWVjeAotCWpnZQlMKHNocl83X2dvYmJsZV9uZXh0KQotCWluYwklZWR4Ci0JYWRkCSQzMiwgJWVjeAotTChzaHJfN19nb2JibGVfbmV4dCk6Ci0JdGVzdAklZWR4LCAlZWR4Ci0Jam56CUwoZXhpdCkKLQotCXBtb3Ztc2tiICV4bW0zLCAlZWR4Ci0JbW92ZHFhCSV4bW0wLCAleG1tMQotCWxlYQkzMiglZWRpKSwgJWVkaQotCWxlYQkzMiglZXNpKSwgJWVzaQotCXN1YgkkMHhmZmZmLCAlZWR4Ci0Jam56CUwoZXhpdCkKLQotCWxlYQkoJWVjeCwgJWVkaSwxKSwgJWVheAotCWxlYQk3KCVlY3gsICVlc2ksMSksICVlZHgKLQlQT1AgKCVlZGkpCi0JUE9QICglZXNpKQotCWptcAlMKGxlc3M0OGJ5dGVzKQotCi0JY2ZpX3Jlc3RvcmVfc3RhdGUKLQljZmlfcmVtZW1iZXJfc3RhdGUKLQlBTElHTiAoNCkKLUwoc2hyXzgpOgotCWNtcAkkODAsICVlY3gKLQlsZWEJLTQ4KCVlY3gpLCAlZWN4Ci0JbW92CSVlZHgsICVlYXgKLQlqYWUJTChzaHJfOF9nb2JibGUpCi0KLQltb3ZkcWEJMTYoJWVzaSksICV4bW0xCi0JbW92ZHFhCSV4bW0xLCAleG1tMgotCXBhbGlnbnIJJDgsKCVlc2kpLCAleG1tMQotCXBjbXBlcWIJKCVlZGkpLCAleG1tMQotCi0JbW92ZHFhCTMyKCVlc2kpLCAleG1tMwotCXBhbGlnbnIJJDgsJXhtbTIsICV4bW0zCi0JcGNtcGVxYgkxNiglZWRpKSwgJXhtbTMKLQotCXBhbmQJJXhtbTEsICV4bW0zCi0JcG1vdm1za2IgJXhtbTMsICVlZHgKLQlsZWEJMzIoJWVkaSksICVlZGkKLQlsZWEJMzIoJWVzaSksICVlc2kKLQlzdWIJJDB4ZmZmZiwgJWVkeAotCWpueglMKGV4aXQpCi0JbGVhCSglZWN4LCAlZWRpLDEpLCAlZWF4Ci0JbGVhCTgoJWVjeCwgJWVzaSwxKSwgJWVkeAotCVBPUCAoJWVkaSkKLQlQT1AgKCVlc2kpCi0Jam1wCUwobGVzczQ4Ynl0ZXMpCi0KLQljZmlfcmVzdG9yZV9zdGF0ZQotCWNmaV9yZW1lbWJlcl9zdGF0ZQotCUFMSUdOICg0KQotTChzaHJfOF9nb2JibGUpOgotCXN1YgkkMzIsICVlY3gKLQltb3ZkcWEJMTYoJWVzaSksICV4bW0wCi0JcGFsaWducgkkOCwoJWVzaSksICV4bW0wCi0JcGNtcGVxYgkoJWVkaSksICV4bW0wCi0KLQltb3ZkcWEJMzIoJWVzaSksICV4bW0zCi0JcGFsaWducgkkOCwxNiglZXNpKSwgJXhtbTMKLQlwY21wZXFiCTE2KCVlZGkpLCAleG1tMwotCi1MKHNocl84X2dvYmJsZV9sb29wKToKLQlwYW5kCSV4bW0wLCAleG1tMwotCXN1YgkkMzIsICVlY3gKLQlwbW92bXNrYiAleG1tMywgJWVkeAotCW1vdmRxYQkleG1tMCwgJXhtbTEKLQotCW1vdmRxYQk2NCglZXNpKSwgJXhtbTMKLQlwYWxpZ25yCSQ4LDQ4KCVlc2kpLCAleG1tMwotCXNiYgkkMHhmZmZmLCAlZWR4Ci0JbW92ZHFhCTQ4KCVlc2kpLCAleG1tMAotCXBhbGlnbnIJJDgsMzIoJWVzaSksICV4bW0wCi0JcGNtcGVxYgkzMiglZWRpKSwgJXhtbTAKLQlsZWEJMzIoJWVzaSksICVlc2kKLQlwY21wZXFiCTQ4KCVlZGkpLCAleG1tMwotCi0JbGVhCTMyKCVlZGkpLCAlZWRpCi0JanoJTChzaHJfOF9nb2JibGVfbG9vcCkKLQlwYW5kCSV4bW0wLCAleG1tMwotCi0JY21wCSQwLCAlZWN4Ci0JamdlCUwoc2hyXzhfZ29iYmxlX25leHQpCi0JaW5jCSVlZHgKLQlhZGQJJDMyLCAlZWN4Ci1MKHNocl84X2dvYmJsZV9uZXh0KToKLQl0ZXN0CSVlZHgsICVlZHgKLQlqbnoJTChleGl0KQotCi0JcG1vdm1za2IgJXhtbTMsICVlZHgKLQltb3ZkcWEJJXhtbTAsICV4bW0xCi0JbGVhCTMyKCVlZGkpLCAlZWRpCi0JbGVhCTMyKCVlc2kpLCAlZXNpCi0Jc3ViCSQweGZmZmYsICVlZHgKLQlqbnoJTChleGl0KQotCi0JbGVhCSglZWN4LCAlZWRpLDEpLCAlZWF4Ci0JbGVhCTgoJWVjeCwgJWVzaSwxKSwgJWVkeAotCVBPUCAoJWVkaSkKLQlQT1AgKCVlc2kpCi0Jam1wCUwobGVzczQ4Ynl0ZXMpCi0KLQljZmlfcmVzdG9yZV9zdGF0ZQotCWNmaV9yZW1lbWJlcl9zdGF0ZQotCUFMSUdOICg0KQotTChzaHJfOSk6Ci0JY21wCSQ4MCwgJWVjeAotCWxlYQktNDgoJWVjeCksICVlY3gKLQltb3YJJWVkeCwgJWVheAotCWphZQlMKHNocl85X2dvYmJsZSkKLQotCW1vdmRxYQkxNiglZXNpKSwgJXhtbTEKLQltb3ZkcWEJJXhtbTEsICV4bW0yCi0JcGFsaWducgkkOSwoJWVzaSksICV4bW0xCi0JcGNtcGVxYgkoJWVkaSksICV4bW0xCi0KLQltb3ZkcWEJMzIoJWVzaSksICV4bW0zCi0JcGFsaWducgkkOSwleG1tMiwgJXhtbTMKLQlwY21wZXFiCTE2KCVlZGkpLCAleG1tMwotCi0JcGFuZAkleG1tMSwgJXhtbTMKLQlwbW92bXNrYiAleG1tMywgJWVkeAotCWxlYQkzMiglZWRpKSwgJWVkaQotCWxlYQkzMiglZXNpKSwgJWVzaQotCXN1YgkkMHhmZmZmLCAlZWR4Ci0Jam56CUwoZXhpdCkKLQlsZWEJKCVlY3gsICVlZGksMSksICVlYXgKLQlsZWEJOSglZWN4LCAlZXNpLDEpLCAlZWR4Ci0JUE9QICglZWRpKQotCVBPUCAoJWVzaSkKLQlqbXAJTChsZXNzNDhieXRlcykKLQotCWNmaV9yZXN0b3JlX3N0YXRlCi0JY2ZpX3JlbWVtYmVyX3N0YXRlCi0JQUxJR04gKDQpCi1MKHNocl85X2dvYmJsZSk6Ci0Jc3ViCSQzMiwgJWVjeAotCW1vdmRxYQkxNiglZXNpKSwgJXhtbTAKLQlwYWxpZ25yCSQ5LCglZXNpKSwgJXhtbTAKLQlwY21wZXFiCSglZWRpKSwgJXhtbTAKLQotCW1vdmRxYQkzMiglZXNpKSwgJXhtbTMKLQlwYWxpZ25yCSQ5LDE2KCVlc2kpLCAleG1tMwotCXBjbXBlcWIJMTYoJWVkaSksICV4bW0zCi0KLUwoc2hyXzlfZ29iYmxlX2xvb3ApOgotCXBhbmQJJXhtbTAsICV4bW0zCi0Jc3ViCSQzMiwgJWVjeAotCXBtb3Ztc2tiICV4bW0zLCAlZWR4Ci0JbW92ZHFhCSV4bW0wLCAleG1tMQotCi0JbW92ZHFhCTY0KCVlc2kpLCAleG1tMwotCXBhbGlnbnIJJDksNDgoJWVzaSksICV4bW0zCi0Jc2JiCSQweGZmZmYsICVlZHgKLQltb3ZkcWEJNDgoJWVzaSksICV4bW0wCi0JcGFsaWducgkkOSwzMiglZXNpKSwgJXhtbTAKLQlwY21wZXFiCTMyKCVlZGkpLCAleG1tMAotCWxlYQkzMiglZXNpKSwgJWVzaQotCXBjbXBlcWIJNDgoJWVkaSksICV4bW0zCi0KLQlsZWEJMzIoJWVkaSksICVlZGkKLQlqeglMKHNocl85X2dvYmJsZV9sb29wKQotCXBhbmQJJXhtbTAsICV4bW0zCi0KLQljbXAJJDAsICVlY3gKLQlqZ2UJTChzaHJfOV9nb2JibGVfbmV4dCkKLQlpbmMJJWVkeAotCWFkZAkkMzIsICVlY3gKLUwoc2hyXzlfZ29iYmxlX25leHQpOgotCXRlc3QJJWVkeCwgJWVkeAotCWpueglMKGV4aXQpCi0KLQlwbW92bXNrYiAleG1tMywgJWVkeAotCW1vdmRxYQkleG1tMCwgJXhtbTEKLQlsZWEJMzIoJWVkaSksICVlZGkKLQlsZWEJMzIoJWVzaSksICVlc2kKLQlzdWIJJDB4ZmZmZiwgJWVkeAotCWpueglMKGV4aXQpCi0KLQlsZWEJKCVlY3gsICVlZGksMSksICVlYXgKLQlsZWEJOSglZWN4LCAlZXNpLDEpLCAlZWR4Ci0JUE9QICglZWRpKQotCVBPUCAoJWVzaSkKLQlqbXAJTChsZXNzNDhieXRlcykKLQotCWNmaV9yZXN0b3JlX3N0YXRlCi0JY2ZpX3JlbWVtYmVyX3N0YXRlCi0JQUxJR04gKDQpCi1MKHNocl8xMCk6Ci0JY21wCSQ4MCwgJWVjeAotCWxlYQktNDgoJWVjeCksICVlY3gKLQltb3YJJWVkeCwgJWVheAotCWphZQlMKHNocl8xMF9nb2JibGUpCi0KLQltb3ZkcWEJMTYoJWVzaSksICV4bW0xCi0JbW92ZHFhCSV4bW0xLCAleG1tMgotCXBhbGlnbnIJJDEwLCAoJWVzaSksICV4bW0xCi0JcGNtcGVxYgkoJWVkaSksICV4bW0xCi0KLQltb3ZkcWEJMzIoJWVzaSksICV4bW0zCi0JcGFsaWducgkkMTAsJXhtbTIsICV4bW0zCi0JcGNtcGVxYgkxNiglZWRpKSwgJXhtbTMKLQotCXBhbmQJJXhtbTEsICV4bW0zCi0JcG1vdm1za2IgJXhtbTMsICVlZHgKLQlsZWEJMzIoJWVkaSksICVlZGkKLQlsZWEJMzIoJWVzaSksICVlc2kKLQlzdWIJJDB4ZmZmZiwgJWVkeAotCWpueglMKGV4aXQpCi0JbGVhCSglZWN4LCAlZWRpLDEpLCAlZWF4Ci0JbGVhCTEwKCVlY3gsICVlc2ksMSksICVlZHgKLQlQT1AgKCVlZGkpCi0JUE9QICglZXNpKQotCWptcAlMKGxlc3M0OGJ5dGVzKQotCi0JY2ZpX3Jlc3RvcmVfc3RhdGUKLQljZmlfcmVtZW1iZXJfc3RhdGUKLQlBTElHTiAoNCkKLUwoc2hyXzEwX2dvYmJsZSk6Ci0Jc3ViCSQzMiwgJWVjeAotCW1vdmRxYQkxNiglZXNpKSwgJXhtbTAKLQlwYWxpZ25yCSQxMCwgKCVlc2kpLCAleG1tMAotCXBjbXBlcWIJKCVlZGkpLCAleG1tMAotCi0JbW92ZHFhCTMyKCVlc2kpLCAleG1tMwotCXBhbGlnbnIJJDEwLCAxNiglZXNpKSwgJXhtbTMKLQlwY21wZXFiCTE2KCVlZGkpLCAleG1tMwotCi1MKHNocl8xMF9nb2JibGVfbG9vcCk6Ci0JcGFuZAkleG1tMCwgJXhtbTMKLQlzdWIJJDMyLCAlZWN4Ci0JcG1vdm1za2IgJXhtbTMsICVlZHgKLQltb3ZkcWEJJXhtbTAsICV4bW0xCi0KLQltb3ZkcWEJNjQoJWVzaSksICV4bW0zCi0JcGFsaWducgkkMTAsNDgoJWVzaSksICV4bW0zCi0Jc2JiCSQweGZmZmYsICVlZHgKLQltb3ZkcWEJNDgoJWVzaSksICV4bW0wCi0JcGFsaWducgkkMTAsMzIoJWVzaSksICV4bW0wCi0JcGNtcGVxYgkzMiglZWRpKSwgJXhtbTAKLQlsZWEJMzIoJWVzaSksICVlc2kKLQlwY21wZXFiCTQ4KCVlZGkpLCAleG1tMwotCi0JbGVhCTMyKCVlZGkpLCAlZWRpCi0JanoJTChzaHJfMTBfZ29iYmxlX2xvb3ApCi0JcGFuZAkleG1tMCwgJXhtbTMKLQotCWNtcAkkMCwgJWVjeAotCWpnZQlMKHNocl8xMF9nb2JibGVfbmV4dCkKLQlpbmMJJWVkeAotCWFkZAkkMzIsICVlY3gKLUwoc2hyXzEwX2dvYmJsZV9uZXh0KToKLQl0ZXN0CSVlZHgsICVlZHgKLQlqbnoJTChleGl0KQotCi0JcG1vdm1za2IgJXhtbTMsICVlZHgKLQltb3ZkcWEJJXhtbTAsICV4bW0xCi0JbGVhCTMyKCVlZGkpLCAlZWRpCi0JbGVhCTMyKCVlc2kpLCAlZXNpCi0Jc3ViCSQweGZmZmYsICVlZHgKLQlqbnoJTChleGl0KQotCi0JbGVhCSglZWN4LCAlZWRpLDEpLCAlZWF4Ci0JbGVhCTEwKCVlY3gsICVlc2ksMSksICVlZHgKLQlQT1AgKCVlZGkpCi0JUE9QICglZXNpKQotCWptcAlMKGxlc3M0OGJ5dGVzKQotCi0JY2ZpX3Jlc3RvcmVfc3RhdGUKLQljZmlfcmVtZW1iZXJfc3RhdGUKLQlBTElHTiAoNCkKLUwoc2hyXzExKToKLQljbXAJJDgwLCAlZWN4Ci0JbGVhCS00OCglZWN4KSwgJWVjeAotCW1vdgklZWR4LCAlZWF4Ci0JamFlCUwoc2hyXzExX2dvYmJsZSkKLQotCW1vdmRxYQkxNiglZXNpKSwgJXhtbTEKLQltb3ZkcWEJJXhtbTEsICV4bW0yCi0JcGFsaWducgkkMTEsICglZXNpKSwgJXhtbTEKLQlwY21wZXFiCSglZWRpKSwgJXhtbTEKLQotCW1vdmRxYQkzMiglZXNpKSwgJXhtbTMKLQlwYWxpZ25yCSQxMSwgJXhtbTIsICV4bW0zCi0JcGNtcGVxYgkxNiglZWRpKSwgJXhtbTMKLQotCXBhbmQJJXhtbTEsICV4bW0zCi0JcG1vdm1za2IgJXhtbTMsICVlZHgKLQlsZWEJMzIoJWVkaSksICVlZGkKLQlsZWEJMzIoJWVzaSksICVlc2kKLQlzdWIJJDB4ZmZmZiwgJWVkeAotCWpueglMKGV4aXQpCi0JbGVhCSglZWN4LCAlZWRpLDEpLCAlZWF4Ci0JbGVhCTExKCVlY3gsICVlc2ksMSksICVlZHgKLQlQT1AgKCVlZGkpCi0JUE9QICglZXNpKQotCWptcAlMKGxlc3M0OGJ5dGVzKQotCi0JY2ZpX3Jlc3RvcmVfc3RhdGUKLQljZmlfcmVtZW1iZXJfc3RhdGUKLQlBTElHTiAoNCkKLUwoc2hyXzExX2dvYmJsZSk6Ci0Jc3ViCSQzMiwgJWVjeAotCW1vdmRxYQkxNiglZXNpKSwgJXhtbTAKLQlwYWxpZ25yCSQxMSwgKCVlc2kpLCAleG1tMAotCXBjbXBlcWIJKCVlZGkpLCAleG1tMAotCi0JbW92ZHFhCTMyKCVlc2kpLCAleG1tMwotCXBhbGlnbnIJJDExLCAxNiglZXNpKSwgJXhtbTMKLQlwY21wZXFiCTE2KCVlZGkpLCAleG1tMwotCi1MKHNocl8xMV9nb2JibGVfbG9vcCk6Ci0JcGFuZAkleG1tMCwgJXhtbTMKLQlzdWIJJDMyLCAlZWN4Ci0JcG1vdm1za2IgJXhtbTMsICVlZHgKLQltb3ZkcWEJJXhtbTAsICV4bW0xCi0KLQltb3ZkcWEJNjQoJWVzaSksICV4bW0zCi0JcGFsaWducgkkMTEsNDgoJWVzaSksICV4bW0zCi0Jc2JiCSQweGZmZmYsICVlZHgKLQltb3ZkcWEJNDgoJWVzaSksICV4bW0wCi0JcGFsaWducgkkMTEsMzIoJWVzaSksICV4bW0wCi0JcGNtcGVxYgkzMiglZWRpKSwgJXhtbTAKLQlsZWEJMzIoJWVzaSksICVlc2kKLQlwY21wZXFiCTQ4KCVlZGkpLCAleG1tMwotCi0JbGVhCTMyKCVlZGkpLCAlZWRpCi0JanoJTChzaHJfMTFfZ29iYmxlX2xvb3ApCi0JcGFuZAkleG1tMCwgJXhtbTMKLQotCWNtcAkkMCwgJWVjeAotCWpnZQlMKHNocl8xMV9nb2JibGVfbmV4dCkKLQlpbmMJJWVkeAotCWFkZAkkMzIsICVlY3gKLUwoc2hyXzExX2dvYmJsZV9uZXh0KToKLQl0ZXN0CSVlZHgsICVlZHgKLQlqbnoJTChleGl0KQotCi0JcG1vdm1za2IgJXhtbTMsICVlZHgKLQltb3ZkcWEJJXhtbTAsICV4bW0xCi0JbGVhCTMyKCVlZGkpLCAlZWRpCi0JbGVhCTMyKCVlc2kpLCAlZXNpCi0Jc3ViCSQweGZmZmYsICVlZHgKLQlqbnoJTChleGl0KQotCi0JbGVhCSglZWN4LCAlZWRpLDEpLCAlZWF4Ci0JbGVhCTExKCVlY3gsICVlc2ksMSksICVlZHgKLQlQT1AgKCVlZGkpCi0JUE9QICglZXNpKQotCWptcAlMKGxlc3M0OGJ5dGVzKQotCi0JY2ZpX3Jlc3RvcmVfc3RhdGUKLQljZmlfcmVtZW1iZXJfc3RhdGUKLQlBTElHTiAoNCkKLUwoc2hyXzEyKToKLQljbXAJJDgwLCAlZWN4Ci0JbGVhCS00OCglZWN4KSwgJWVjeAotCW1vdgklZWR4LCAlZWF4Ci0JamFlCUwoc2hyXzEyX2dvYmJsZSkKLQotCW1vdmRxYQkxNiglZXNpKSwgJXhtbTEKLQltb3ZkcWEJJXhtbTEsICV4bW0yCi0JcGFsaWducgkkMTIsICglZXNpKSwgJXhtbTEKLQlwY21wZXFiCSglZWRpKSwgJXhtbTEKLQotCW1vdmRxYQkzMiglZXNpKSwgJXhtbTMKLQlwYWxpZ25yCSQxMiwgJXhtbTIsICV4bW0zCi0JcGNtcGVxYgkxNiglZWRpKSwgJXhtbTMKLQotCXBhbmQJJXhtbTEsICV4bW0zCi0JcG1vdm1za2IgJXhtbTMsICVlZHgKLQlsZWEJMzIoJWVkaSksICVlZGkKLQlsZWEJMzIoJWVzaSksICVlc2kKLQlzdWIJJDB4ZmZmZiwgJWVkeAotCWpueglMKGV4aXQpCi0JbGVhCSglZWN4LCAlZWRpLDEpLCAlZWF4Ci0JbGVhCTEyKCVlY3gsICVlc2ksMSksICVlZHgKLQlQT1AgKCVlZGkpCi0JUE9QICglZXNpKQotCWptcAlMKGxlc3M0OGJ5dGVzKQotCi0JY2ZpX3Jlc3RvcmVfc3RhdGUKLQljZmlfcmVtZW1iZXJfc3RhdGUKLQlBTElHTiAoNCkKLUwoc2hyXzEyX2dvYmJsZSk6Ci0Jc3ViCSQzMiwgJWVjeAotCW1vdmRxYQkxNiglZXNpKSwgJXhtbTAKLQlwYWxpZ25yCSQxMiwgKCVlc2kpLCAleG1tMAotCXBjbXBlcWIJKCVlZGkpLCAleG1tMAotCi0JbW92ZHFhCTMyKCVlc2kpLCAleG1tMwotCXBhbGlnbnIJJDEyLCAxNiglZXNpKSwgJXhtbTMKLQlwY21wZXFiCTE2KCVlZGkpLCAleG1tMwotCi1MKHNocl8xMl9nb2JibGVfbG9vcCk6Ci0JcGFuZAkleG1tMCwgJXhtbTMKLQlzdWIJJDMyLCAlZWN4Ci0JcG1vdm1za2IgJXhtbTMsICVlZHgKLQltb3ZkcWEJJXhtbTAsICV4bW0xCi0KLQltb3ZkcWEJNjQoJWVzaSksICV4bW0zCi0JcGFsaWducgkkMTIsNDgoJWVzaSksICV4bW0zCi0Jc2JiCSQweGZmZmYsICVlZHgKLQltb3ZkcWEJNDgoJWVzaSksICV4bW0wCi0JcGFsaWducgkkMTIsMzIoJWVzaSksICV4bW0wCi0JcGNtcGVxYgkzMiglZWRpKSwgJXhtbTAKLQlsZWEJMzIoJWVzaSksICVlc2kKLQlwY21wZXFiCTQ4KCVlZGkpLCAleG1tMwotCi0JbGVhCTMyKCVlZGkpLCAlZWRpCi0JanoJTChzaHJfMTJfZ29iYmxlX2xvb3ApCi0JcGFuZAkleG1tMCwgJXhtbTMKLQotCWNtcAkkMCwgJWVjeAotCWpnZQlMKHNocl8xMl9nb2JibGVfbmV4dCkKLQlpbmMJJWVkeAotCWFkZAkkMzIsICVlY3gKLUwoc2hyXzEyX2dvYmJsZV9uZXh0KToKLQl0ZXN0CSVlZHgsICVlZHgKLQlqbnoJTChleGl0KQotCi0JcG1vdm1za2IgJXhtbTMsICVlZHgKLQltb3ZkcWEJJXhtbTAsICV4bW0xCi0JbGVhCTMyKCVlZGkpLCAlZWRpCi0JbGVhCTMyKCVlc2kpLCAlZXNpCi0Jc3ViCSQweGZmZmYsICVlZHgKLQlqbnoJTChleGl0KQotCi0JbGVhCSglZWN4LCAlZWRpLDEpLCAlZWF4Ci0JbGVhCTEyKCVlY3gsICVlc2ksMSksICVlZHgKLQlQT1AgKCVlZGkpCi0JUE9QICglZXNpKQotCWptcAlMKGxlc3M0OGJ5dGVzKQotCi0JY2ZpX3Jlc3RvcmVfc3RhdGUKLQljZmlfcmVtZW1iZXJfc3RhdGUKLQlBTElHTiAoNCkKLUwoc2hyXzEzKToKLQljbXAJJDgwLCAlZWN4Ci0JbGVhCS00OCglZWN4KSwgJWVjeAotCW1vdgklZWR4LCAlZWF4Ci0JamFlCUwoc2hyXzEzX2dvYmJsZSkKLQotCW1vdmRxYQkxNiglZXNpKSwgJXhtbTEKLQltb3ZkcWEJJXhtbTEsICV4bW0yCi0JcGFsaWducgkkMTMsICglZXNpKSwgJXhtbTEKLQlwY21wZXFiCSglZWRpKSwgJXhtbTEKLQotCW1vdmRxYQkzMiglZXNpKSwgJXhtbTMKLQlwYWxpZ25yCSQxMywgJXhtbTIsICV4bW0zCi0JcGNtcGVxYgkxNiglZWRpKSwgJXhtbTMKLQotCXBhbmQJJXhtbTEsICV4bW0zCi0JcG1vdm1za2IgJXhtbTMsICVlZHgKLQlsZWEJMzIoJWVkaSksICVlZGkKLQlsZWEJMzIoJWVzaSksICVlc2kKLQlzdWIJJDB4ZmZmZiwgJWVkeAotCWpueglMKGV4aXQpCi0JbGVhCSglZWN4LCAlZWRpLDEpLCAlZWF4Ci0JbGVhCTEzKCVlY3gsICVlc2ksMSksICVlZHgKLQlQT1AgKCVlZGkpCi0JUE9QICglZXNpKQotCWptcAlMKGxlc3M0OGJ5dGVzKQotCi0JY2ZpX3Jlc3RvcmVfc3RhdGUKLQljZmlfcmVtZW1iZXJfc3RhdGUKLQlBTElHTiAoNCkKLUwoc2hyXzEzX2dvYmJsZSk6Ci0Jc3ViCSQzMiwgJWVjeAotCW1vdmRxYQkxNiglZXNpKSwgJXhtbTAKLQlwYWxpZ25yCSQxMywgKCVlc2kpLCAleG1tMAotCXBjbXBlcWIJKCVlZGkpLCAleG1tMAotCi0JbW92ZHFhCTMyKCVlc2kpLCAleG1tMwotCXBhbGlnbnIJJDEzLCAxNiglZXNpKSwgJXhtbTMKLQlwY21wZXFiCTE2KCVlZGkpLCAleG1tMwotCi1MKHNocl8xM19nb2JibGVfbG9vcCk6Ci0JcGFuZAkleG1tMCwgJXhtbTMKLQlzdWIJJDMyLCAlZWN4Ci0JcG1vdm1za2IgJXhtbTMsICVlZHgKLQltb3ZkcWEJJXhtbTAsICV4bW0xCi0KLQltb3ZkcWEJNjQoJWVzaSksICV4bW0zCi0JcGFsaWducgkkMTMsNDgoJWVzaSksICV4bW0zCi0Jc2JiCSQweGZmZmYsICVlZHgKLQltb3ZkcWEJNDgoJWVzaSksICV4bW0wCi0JcGFsaWducgkkMTMsMzIoJWVzaSksICV4bW0wCi0JcGNtcGVxYgkzMiglZWRpKSwgJXhtbTAKLQlsZWEJMzIoJWVzaSksICVlc2kKLQlwY21wZXFiCTQ4KCVlZGkpLCAleG1tMwotCi0JbGVhCTMyKCVlZGkpLCAlZWRpCi0JanoJTChzaHJfMTNfZ29iYmxlX2xvb3ApCi0JcGFuZAkleG1tMCwgJXhtbTMKLQotCWNtcAkkMCwgJWVjeAotCWpnZQlMKHNocl8xM19nb2JibGVfbmV4dCkKLQlpbmMJJWVkeAotCWFkZAkkMzIsICVlY3gKLUwoc2hyXzEzX2dvYmJsZV9uZXh0KToKLQl0ZXN0CSVlZHgsICVlZHgKLQlqbnoJTChleGl0KQotCi0JcG1vdm1za2IgJXhtbTMsICVlZHgKLQltb3ZkcWEJJXhtbTAsICV4bW0xCi0JbGVhCTMyKCVlZGkpLCAlZWRpCi0JbGVhCTMyKCVlc2kpLCAlZXNpCi0Jc3ViCSQweGZmZmYsICVlZHgKLQlqbnoJTChleGl0KQotCi0JbGVhCSglZWN4LCAlZWRpLDEpLCAlZWF4Ci0JbGVhCTEzKCVlY3gsICVlc2ksMSksICVlZHgKLQlQT1AgKCVlZGkpCi0JUE9QICglZXNpKQotCWptcAlMKGxlc3M0OGJ5dGVzKQotCi0JY2ZpX3Jlc3RvcmVfc3RhdGUKLQljZmlfcmVtZW1iZXJfc3RhdGUKLQlBTElHTiAoNCkKLUwoc2hyXzE0KToKLQljbXAJJDgwLCAlZWN4Ci0JbGVhCS00OCglZWN4KSwgJWVjeAotCW1vdgklZWR4LCAlZWF4Ci0JamFlCUwoc2hyXzE0X2dvYmJsZSkKLQotCW1vdmRxYQkxNiglZXNpKSwgJXhtbTEKLQltb3ZkcWEJJXhtbTEsICV4bW0yCi0JcGFsaWducgkkMTQsICglZXNpKSwgJXhtbTEKLQlwY21wZXFiCSglZWRpKSwgJXhtbTEKLQotCW1vdmRxYQkzMiglZXNpKSwgJXhtbTMKLQlwYWxpZ25yCSQxNCwgJXhtbTIsICV4bW0zCi0JcGNtcGVxYgkxNiglZWRpKSwgJXhtbTMKLQotCXBhbmQJJXhtbTEsICV4bW0zCi0JcG1vdm1za2IgJXhtbTMsICVlZHgKLQlsZWEJMzIoJWVkaSksICVlZGkKLQlsZWEJMzIoJWVzaSksICVlc2kKLQlzdWIJJDB4ZmZmZiwgJWVkeAotCWpueglMKGV4aXQpCi0JbGVhCSglZWN4LCAlZWRpLDEpLCAlZWF4Ci0JbGVhCTE0KCVlY3gsICVlc2ksMSksICVlZHgKLQlQT1AgKCVlZGkpCi0JUE9QICglZXNpKQotCWptcAlMKGxlc3M0OGJ5dGVzKQotCi0JY2ZpX3Jlc3RvcmVfc3RhdGUKLQljZmlfcmVtZW1iZXJfc3RhdGUKLQlBTElHTiAoNCkKLUwoc2hyXzE0X2dvYmJsZSk6Ci0Jc3ViCSQzMiwgJWVjeAotCW1vdmRxYQkxNiglZXNpKSwgJXhtbTAKLQlwYWxpZ25yCSQxNCwgKCVlc2kpLCAleG1tMAotCXBjbXBlcWIJKCVlZGkpLCAleG1tMAotCi0JbW92ZHFhCTMyKCVlc2kpLCAleG1tMwotCXBhbGlnbnIJJDE0LCAxNiglZXNpKSwgJXhtbTMKLQlwY21wZXFiCTE2KCVlZGkpLCAleG1tMwotCi1MKHNocl8xNF9nb2JibGVfbG9vcCk6Ci0JcGFuZAkleG1tMCwgJXhtbTMKLQlzdWIJJDMyLCAlZWN4Ci0JcG1vdm1za2IgJXhtbTMsICVlZHgKLQltb3ZkcWEJJXhtbTAsICV4bW0xCi0KLQltb3ZkcWEJNjQoJWVzaSksICV4bW0zCi0JcGFsaWducgkkMTQsNDgoJWVzaSksICV4bW0zCi0Jc2JiCSQweGZmZmYsICVlZHgKLQltb3ZkcWEJNDgoJWVzaSksICV4bW0wCi0JcGFsaWducgkkMTQsMzIoJWVzaSksICV4bW0wCi0JcGNtcGVxYgkzMiglZWRpKSwgJXhtbTAKLQlsZWEJMzIoJWVzaSksICVlc2kKLQlwY21wZXFiCTQ4KCVlZGkpLCAleG1tMwotCi0JbGVhCTMyKCVlZGkpLCAlZWRpCi0JanoJTChzaHJfMTRfZ29iYmxlX2xvb3ApCi0JcGFuZAkleG1tMCwgJXhtbTMKLQotCWNtcAkkMCwgJWVjeAotCWpnZQlMKHNocl8xNF9nb2JibGVfbmV4dCkKLQlpbmMJJWVkeAotCWFkZAkkMzIsICVlY3gKLUwoc2hyXzE0X2dvYmJsZV9uZXh0KToKLQl0ZXN0CSVlZHgsICVlZHgKLQlqbnoJTChleGl0KQotCi0JcG1vdm1za2IgJXhtbTMsICVlZHgKLQltb3ZkcWEJJXhtbTAsICV4bW0xCi0JbGVhCTMyKCVlZGkpLCAlZWRpCi0JbGVhCTMyKCVlc2kpLCAlZXNpCi0Jc3ViCSQweGZmZmYsICVlZHgKLQlqbnoJTChleGl0KQotCi0JbGVhCSglZWN4LCAlZWRpLDEpLCAlZWF4Ci0JbGVhCTE0KCVlY3gsICVlc2ksMSksICVlZHgKLQlQT1AgKCVlZGkpCi0JUE9QICglZXNpKQotCWptcAlMKGxlc3M0OGJ5dGVzKQotCi0JY2ZpX3Jlc3RvcmVfc3RhdGUKLQljZmlfcmVtZW1iZXJfc3RhdGUKLQlBTElHTiAoNCkKLUwoc2hyXzE1KToKLQljbXAJJDgwLCAlZWN4Ci0JbGVhCS00OCglZWN4KSwgJWVjeAotCW1vdgklZWR4LCAlZWF4Ci0JamFlCUwoc2hyXzE1X2dvYmJsZSkKLQotCW1vdmRxYQkxNiglZXNpKSwgJXhtbTEKLQltb3ZkcWEJJXhtbTEsICV4bW0yCi0JcGFsaWducgkkMTUsICglZXNpKSwgJXhtbTEKLQlwY21wZXFiCSglZWRpKSwgJXhtbTEKLQotCW1vdmRxYQkzMiglZXNpKSwgJXhtbTMKLQlwYWxpZ25yCSQxNSwgJXhtbTIsICV4bW0zCi0JcGNtcGVxYgkxNiglZWRpKSwgJXhtbTMKLQotCXBhbmQJJXhtbTEsICV4bW0zCi0JcG1vdm1za2IgJXhtbTMsICVlZHgKLQlsZWEJMzIoJWVkaSksICVlZGkKLQlsZWEJMzIoJWVzaSksICVlc2kKLQlzdWIJJDB4ZmZmZiwgJWVkeAotCWpueglMKGV4aXQpCi0JbGVhCSglZWN4LCAlZWRpLDEpLCAlZWF4Ci0JbGVhCTE1KCVlY3gsICVlc2ksMSksICVlZHgKLQlQT1AgKCVlZGkpCi0JUE9QICglZXNpKQotCWptcAlMKGxlc3M0OGJ5dGVzKQotCi0JY2ZpX3Jlc3RvcmVfc3RhdGUKLQljZmlfcmVtZW1iZXJfc3RhdGUKLQlBTElHTiAoNCkKLUwoc2hyXzE1X2dvYmJsZSk6Ci0Jc3ViCSQzMiwgJWVjeAotCW1vdmRxYQkxNiglZXNpKSwgJXhtbTAKLQlwYWxpZ25yCSQxNSwgKCVlc2kpLCAleG1tMAotCXBjbXBlcWIJKCVlZGkpLCAleG1tMAotCi0JbW92ZHFhCTMyKCVlc2kpLCAleG1tMwotCXBhbGlnbnIJJDE1LCAxNiglZXNpKSwgJXhtbTMKLQlwY21wZXFiCTE2KCVlZGkpLCAleG1tMwotCi1MKHNocl8xNV9nb2JibGVfbG9vcCk6Ci0JcGFuZAkleG1tMCwgJXhtbTMKLQlzdWIJJDMyLCAlZWN4Ci0JcG1vdm1za2IgJXhtbTMsICVlZHgKLQltb3ZkcWEJJXhtbTAsICV4bW0xCi0KLQltb3ZkcWEJNjQoJWVzaSksICV4bW0zCi0JcGFsaWducgkkMTUsNDgoJWVzaSksICV4bW0zCi0Jc2JiCSQweGZmZmYsICVlZHgKLQltb3ZkcWEJNDgoJWVzaSksICV4bW0wCi0JcGFsaWducgkkMTUsMzIoJWVzaSksICV4bW0wCi0JcGNtcGVxYgkzMiglZWRpKSwgJXhtbTAKLQlsZWEJMzIoJWVzaSksICVlc2kKLQlwY21wZXFiCTQ4KCVlZGkpLCAleG1tMwotCi0JbGVhCTMyKCVlZGkpLCAlZWRpCi0JanoJTChzaHJfMTVfZ29iYmxlX2xvb3ApCi0JcGFuZAkleG1tMCwgJXhtbTMKLQotCWNtcAkkMCwgJWVjeAotCWpnZQlMKHNocl8xNV9nb2JibGVfbmV4dCkKLQlpbmMJJWVkeAotCWFkZAkkMzIsICVlY3gKLUwoc2hyXzE1X2dvYmJsZV9uZXh0KToKLQl0ZXN0CSVlZHgsICVlZHgKLQlqbnoJTChleGl0KQotCi0JcG1vdm1za2IgJXhtbTMsICVlZHgKLQltb3ZkcWEJJXhtbTAsICV4bW0xCi0JbGVhCTMyKCVlZGkpLCAlZWRpCi0JbGVhCTMyKCVlc2kpLCAlZXNpCi0Jc3ViCSQweGZmZmYsICVlZHgKLQlqbnoJTChleGl0KQotCi0JbGVhCSglZWN4LCAlZWRpLDEpLCAlZWF4Ci0JbGVhCTE1KCVlY3gsICVlc2ksMSksICVlZHgKLQlQT1AgKCVlZGkpCi0JUE9QICglZXNpKQotCWptcAlMKGxlc3M0OGJ5dGVzKQotCi0JY2ZpX3Jlc3RvcmVfc3RhdGUKLQljZmlfcmVtZW1iZXJfc3RhdGUKLQlBTElHTiAoNCkKLUwoZXhpdCk6Ci0JcG1vdm1za2IgJXhtbTEsICVlYngKLQlzdWIJJDB4ZmZmZiwgJWVieAotCWp6CUwoZmlyc3QxNmJ5dGVzKQotCWxlYQktMTYoJWVzaSksICVlc2kKLQlsZWEJLTE2KCVlZGkpLCAlZWRpCi0JbW92CSVlYngsICVlZHgKLUwoZmlyc3QxNmJ5dGVzKToKLQlhZGQJJWVheCwgJWVzaQotTChsZXNzMTZieXRlcyk6Ci0JdGVzdAklZGwsICVkbAotCWp6CUwobmV4dF8yNF9ieXRlcykKLQotCXRlc3QJJDB4MDEsICVkbAotCWpueglMKEJ5dGUxNikKLQotCXRlc3QJJDB4MDIsICVkbAotCWpueglMKEJ5dGUxNykKLQotCXRlc3QJJDB4MDQsICVkbAotCWpueglMKEJ5dGUxOCkKLQotCXRlc3QJJDB4MDgsICVkbAotCWpueglMKEJ5dGUxOSkKLQotCXRlc3QJJDB4MTAsICVkbAotCWpueglMKEJ5dGUyMCkKLQotCXRlc3QJJDB4MjAsICVkbAotCWpueglMKEJ5dGUyMSkKLQotCXRlc3QJJDB4NDAsICVkbAotCWpueglMKEJ5dGUyMikKLUwoQnl0ZTIzKToKLQltb3Z6YmwJIC05KCVlZGkpLCAlZWF4Ci0JbW92emJsCSAtOSglZXNpKSwgJWVkeAotCXN1YgklZWR4LCAlZWF4Ci0JUkVUVVJOCi0KLQlBTElHTiAoNCkKLUwoQnl0ZTE2KToKLQltb3Z6YmwJIC0xNiglZWRpKSwgJWVheAotCW1vdnpibAkgLTE2KCVlc2kpLCAlZWR4Ci0Jc3ViCSVlZHgsICVlYXgKLQlSRVRVUk4KLQotCUFMSUdOICg0KQotTChCeXRlMTcpOgotCW1vdnpibAkgLTE1KCVlZGkpLCAlZWF4Ci0JbW92emJsCSAtMTUoJWVzaSksICVlZHgKLQlzdWIJJWVkeCwgJWVheAotCVJFVFVSTgotCi0JQUxJR04gKDQpCi1MKEJ5dGUxOCk6Ci0JbW92emJsCSAtMTQoJWVkaSksICVlYXgKLQltb3Z6YmwJIC0xNCglZXNpKSwgJWVkeAotCXN1YgklZWR4LCAlZWF4Ci0JUkVUVVJOCi0KLQlBTElHTiAoNCkKLUwoQnl0ZTE5KToKLQltb3Z6YmwJIC0xMyglZWRpKSwgJWVheAotCW1vdnpibAkgLTEzKCVlc2kpLCAlZWR4Ci0Jc3ViCSVlZHgsICVlYXgKLQlSRVRVUk4KLQotCUFMSUdOICg0KQotTChCeXRlMjApOgotCW1vdnpibAkgLTEyKCVlZGkpLCAlZWF4Ci0JbW92emJsCSAtMTIoJWVzaSksICVlZHgKLQlzdWIJJWVkeCwgJWVheAotCVJFVFVSTgotCi0JQUxJR04gKDQpCi1MKEJ5dGUyMSk6Ci0JbW92emJsCSAtMTEoJWVkaSksICVlYXgKLQltb3Z6YmwJIC0xMSglZXNpKSwgJWVkeAotCXN1YgklZWR4LCAlZWF4Ci0JUkVUVVJOCi0KLQlBTElHTiAoNCkKLUwoQnl0ZTIyKToKLQltb3Z6YmwJIC0xMCglZWRpKSwgJWVheAotCW1vdnpibAkgLTEwKCVlc2kpLCAlZWR4Ci0Jc3ViCSVlZHgsICVlYXgKLQlSRVRVUk4KLQotCUFMSUdOICg0KQotTChuZXh0XzI0X2J5dGVzKToKLQlsZWEJOCglZWRpKSwgJWVkaQotCWxlYQk4KCVlc2kpLCAlZXNpCi0JdGVzdAkkMHgwMSwgJWRoCi0Jam56CUwoQnl0ZTE2KQotCi0JdGVzdAkkMHgwMiwgJWRoCi0Jam56CUwoQnl0ZTE3KQotCi0JdGVzdAkkMHgwNCwgJWRoCi0Jam56CUwoQnl0ZTE4KQotCi0JdGVzdAkkMHgwOCwgJWRoCi0Jam56CUwoQnl0ZTE5KQotCi0JdGVzdAkkMHgxMCwgJWRoCi0Jam56CUwoQnl0ZTIwKQotCi0JdGVzdAkkMHgyMCwgJWRoCi0Jam56CUwoQnl0ZTIxKQotCi0JdGVzdAkkMHg0MCwgJWRoCi0Jam56CUwoQnl0ZTIyKQotCi0JQUxJR04gKDQpCi1MKEJ5dGUzMSk6Ci0JbW92emJsCSAtOSglZWRpKSwgJWVheAotCW1vdnpibAkgLTkoJWVzaSksICVlZHgKLQlzdWIJJWVkeCwgJWVheAotCVJFVFVSTl9FTkQKLQlDRklfUFVTSCAoJWVieCkKLQotCUFMSUdOICg0KQotTChtb3JlOGJ5dGVzKToKLQljbXAJJDE2LCAlZWN4Ci0JamFlCUwobW9yZTE2Ynl0ZXMpCi0JY21wCSQ4LCAlZWN4Ci0JamUJTCg4Ynl0ZXMpCi0JY21wCSQ5LCAlZWN4Ci0JamUJTCg5Ynl0ZXMpCi0JY21wCSQxMCwgJWVjeAotCWplCUwoMTBieXRlcykKLQljbXAJJDExLCAlZWN4Ci0JamUJTCgxMWJ5dGVzKQotCWNtcAkkMTIsICVlY3gKLQlqZQlMKDEyYnl0ZXMpCi0JY21wCSQxMywgJWVjeAotCWplCUwoMTNieXRlcykKLQljbXAJJDE0LCAlZWN4Ci0JamUJTCgxNGJ5dGVzKQotCWptcAlMKDE1Ynl0ZXMpCi0KLQlBTElHTiAoNCkKLUwobW9yZTE2Ynl0ZXMpOgotCWNtcAkkMjQsICVlY3gKLQlqYWUJTChtb3JlMjRieXRlcykKLQljbXAJJDE2LCAlZWN4Ci0JamUJTCgxNmJ5dGVzKQotCWNtcAkkMTcsICVlY3gKLQlqZQlMKDE3Ynl0ZXMpCi0JY21wCSQxOCwgJWVjeAotCWplCUwoMThieXRlcykKLQljbXAJJDE5LCAlZWN4Ci0JamUJTCgxOWJ5dGVzKQotCWNtcAkkMjAsICVlY3gKLQlqZQlMKDIwYnl0ZXMpCi0JY21wCSQyMSwgJWVjeAotCWplCUwoMjFieXRlcykKLQljbXAJJDIyLCAlZWN4Ci0JamUJTCgyMmJ5dGVzKQotCWptcAlMKDIzYnl0ZXMpCi0KLQlBTElHTiAoNCkKLUwobW9yZTI0Ynl0ZXMpOgotCWNtcAkkMzIsICVlY3gKLQlqYWUJTChtb3JlMzJieXRlcykKLQljbXAJJDI0LCAlZWN4Ci0JamUJTCgyNGJ5dGVzKQotCWNtcAkkMjUsICVlY3gKLQlqZQlMKDI1Ynl0ZXMpCi0JY21wCSQyNiwgJWVjeAotCWplCUwoMjZieXRlcykKLQljbXAJJDI3LCAlZWN4Ci0JamUJTCgyN2J5dGVzKQotCWNtcAkkMjgsICVlY3gKLQlqZQlMKDI4Ynl0ZXMpCi0JY21wCSQyOSwgJWVjeAotCWplCUwoMjlieXRlcykKLQljbXAJJDMwLCAlZWN4Ci0JamUJTCgzMGJ5dGVzKQotCWptcAlMKDMxYnl0ZXMpCi0KLQlBTElHTiAoNCkKLUwobW9yZTMyYnl0ZXMpOgotCWNtcAkkNDAsICVlY3gKLQlqYWUJTChtb3JlNDBieXRlcykKLQljbXAJJDMyLCAlZWN4Ci0JamUJTCgzMmJ5dGVzKQotCWNtcAkkMzMsICVlY3gKLQlqZQlMKDMzYnl0ZXMpCi0JY21wCSQzNCwgJWVjeAotCWplCUwoMzRieXRlcykKLQljbXAJJDM1LCAlZWN4Ci0JamUJTCgzNWJ5dGVzKQotCWNtcAkkMzYsICVlY3gKLQlqZQlMKDM2Ynl0ZXMpCi0JY21wCSQzNywgJWVjeAotCWplCUwoMzdieXRlcykKLQljbXAJJDM4LCAlZWN4Ci0JamUJTCgzOGJ5dGVzKQotCWptcAlMKDM5Ynl0ZXMpCi0KLQlBTElHTiAoNCkKLUwobW9yZTQwYnl0ZXMpOgotCWNtcAkkNDAsICVlY3gKLQlqZQlMKDQwYnl0ZXMpCi0JY21wCSQ0MSwgJWVjeAotCWplCUwoNDFieXRlcykKLQljbXAJJDQyLCAlZWN4Ci0JamUJTCg0MmJ5dGVzKQotCWNtcAkkNDMsICVlY3gKLQlqZQlMKDQzYnl0ZXMpCi0JY21wCSQ0NCwgJWVjeAotCWplCUwoNDRieXRlcykKLQljbXAJJDQ1LCAlZWN4Ci0JamUJTCg0NWJ5dGVzKQotCWNtcAkkNDYsICVlY3gKLQlqZQlMKDQ2Ynl0ZXMpCi0Jam1wCUwoNDdieXRlcykKLQotCUFMSUdOICg0KQotTChsZXNzNDhieXRlcyk6Ci0JY21wCSQ4LCAlZWN4Ci0JamFlCUwobW9yZThieXRlcykKLQljbXAJJDIsICVlY3gKLQlqZQlMKDJieXRlcykKLQljbXAJJDMsICVlY3gKLQlqZQlMKDNieXRlcykKLQljbXAJJDQsICVlY3gKLQlqZQlMKDRieXRlcykKLQljbXAJJDUsICVlY3gKLQlqZQlMKDVieXRlcykKLQljbXAJJDYsICVlY3gKLQlqZQlMKDZieXRlcykKLQlqbXAJTCg3Ynl0ZXMpCi0KLQotCUFMSUdOICg0KQotTCg0NGJ5dGVzKToKLQltb3YJLTQ0KCVlYXgpLCAlZWN4Ci0JbW92CS00NCglZWR4KSwgJWVieAotCWNtcAklZWJ4LCAlZWN4Ci0Jam5lCUwoZmluZF9kaWZmKQotTCg0MGJ5dGVzKToKLQltb3YJLTQwKCVlYXgpLCAlZWN4Ci0JbW92CS00MCglZWR4KSwgJWVieAotCWNtcAklZWJ4LCAlZWN4Ci0Jam5lCUwoZmluZF9kaWZmKQotTCgzNmJ5dGVzKToKLQltb3YJLTM2KCVlYXgpLCAlZWN4Ci0JbW92CS0zNiglZWR4KSwgJWVieAotCWNtcAklZWJ4LCAlZWN4Ci0Jam5lCUwoZmluZF9kaWZmKQotTCgzMmJ5dGVzKToKLQltb3YJLTMyKCVlYXgpLCAlZWN4Ci0JbW92CS0zMiglZWR4KSwgJWVieAotCWNtcAklZWJ4LCAlZWN4Ci0Jam5lCUwoZmluZF9kaWZmKQotTCgyOGJ5dGVzKToKLQltb3YJLTI4KCVlYXgpLCAlZWN4Ci0JbW92CS0yOCglZWR4KSwgJWVieAotCWNtcAklZWJ4LCAlZWN4Ci0Jam5lCUwoZmluZF9kaWZmKQotTCgyNGJ5dGVzKToKLQltb3YJLTI0KCVlYXgpLCAlZWN4Ci0JbW92CS0yNCglZWR4KSwgJWVieAotCWNtcAklZWJ4LCAlZWN4Ci0Jam5lCUwoZmluZF9kaWZmKQotTCgyMGJ5dGVzKToKLQltb3YJLTIwKCVlYXgpLCAlZWN4Ci0JbW92CS0yMCglZWR4KSwgJWVieAotCWNtcAklZWJ4LCAlZWN4Ci0Jam5lCUwoZmluZF9kaWZmKQotTCgxNmJ5dGVzKToKLQltb3YJLTE2KCVlYXgpLCAlZWN4Ci0JbW92CS0xNiglZWR4KSwgJWVieAotCWNtcAklZWJ4LCAlZWN4Ci0Jam5lCUwoZmluZF9kaWZmKQotTCgxMmJ5dGVzKToKLQltb3YJLTEyKCVlYXgpLCAlZWN4Ci0JbW92CS0xMiglZWR4KSwgJWVieAotCWNtcAklZWJ4LCAlZWN4Ci0Jam5lCUwoZmluZF9kaWZmKQotTCg4Ynl0ZXMpOgotCW1vdgktOCglZWF4KSwgJWVjeAotCW1vdgktOCglZWR4KSwgJWVieAotCWNtcAklZWJ4LCAlZWN4Ci0Jam5lCUwoZmluZF9kaWZmKQotTCg0Ynl0ZXMpOgotCW1vdgktNCglZWF4KSwgJWVjeAotCW1vdgktNCglZWR4KSwgJWVieAotCWNtcAklZWJ4LCAlZWN4Ci0JbW92CSQwLCAlZWF4Ci0Jam5lCUwoZmluZF9kaWZmKQotCVBPUCAoJWVieCkKLQlyZXQKLQlDRklfUFVTSCAoJWVieCkKLQotCUFMSUdOICg0KQotTCg0NWJ5dGVzKToKLQltb3YJLTQ1KCVlYXgpLCAlZWN4Ci0JbW92CS00NSglZWR4KSwgJWVieAotCWNtcAklZWJ4LCAlZWN4Ci0Jam5lCUwoZmluZF9kaWZmKQotTCg0MWJ5dGVzKToKLQltb3YJLTQxKCVlYXgpLCAlZWN4Ci0JbW92CS00MSglZWR4KSwgJWVieAotCWNtcAklZWJ4LCAlZWN4Ci0Jam5lCUwoZmluZF9kaWZmKQotTCgzN2J5dGVzKToKLQltb3YJLTM3KCVlYXgpLCAlZWN4Ci0JbW92CS0zNyglZWR4KSwgJWVieAotCWNtcAklZWJ4LCAlZWN4Ci0Jam5lCUwoZmluZF9kaWZmKQotTCgzM2J5dGVzKToKLQltb3YJLTMzKCVlYXgpLCAlZWN4Ci0JbW92CS0zMyglZWR4KSwgJWVieAotCWNtcAklZWJ4LCAlZWN4Ci0Jam5lCUwoZmluZF9kaWZmKQotTCgyOWJ5dGVzKToKLQltb3YJLTI5KCVlYXgpLCAlZWN4Ci0JbW92CS0yOSglZWR4KSwgJWVieAotCWNtcAklZWJ4LCAlZWN4Ci0Jam5lCUwoZmluZF9kaWZmKQotTCgyNWJ5dGVzKToKLQltb3YJLTI1KCVlYXgpLCAlZWN4Ci0JbW92CS0yNSglZWR4KSwgJWVieAotCWNtcAklZWJ4LCAlZWN4Ci0Jam5lCUwoZmluZF9kaWZmKQotTCgyMWJ5dGVzKToKLQltb3YJLTIxKCVlYXgpLCAlZWN4Ci0JbW92CS0yMSglZWR4KSwgJWVieAotCWNtcAklZWJ4LCAlZWN4Ci0Jam5lCUwoZmluZF9kaWZmKQotTCgxN2J5dGVzKToKLQltb3YJLTE3KCVlYXgpLCAlZWN4Ci0JbW92CS0xNyglZWR4KSwgJWVieAotCWNtcAklZWJ4LCAlZWN4Ci0Jam5lCUwoZmluZF9kaWZmKQotTCgxM2J5dGVzKToKLQltb3YJLTEzKCVlYXgpLCAlZWN4Ci0JbW92CS0xMyglZWR4KSwgJWVieAotCWNtcAklZWJ4LCAlZWN4Ci0Jam5lCUwoZmluZF9kaWZmKQotTCg5Ynl0ZXMpOgotCW1vdgktOSglZWF4KSwgJWVjeAotCW1vdgktOSglZWR4KSwgJWVieAotCWNtcAklZWJ4LCAlZWN4Ci0Jam5lCUwoZmluZF9kaWZmKQotTCg1Ynl0ZXMpOgotCW1vdgktNSglZWF4KSwgJWVjeAotCW1vdgktNSglZWR4KSwgJWVieAotCWNtcAklZWJ4LCAlZWN4Ci0Jam5lCUwoZmluZF9kaWZmKQotCW1vdnpibAktMSglZWF4KSwgJWVjeAotCWNtcAktMSglZWR4KSwgJWNsCi0JbW92CSQwLCAlZWF4Ci0Jam5lCUwoZW5kKQotCVBPUCAoJWVieCkKLQlyZXQKLQlDRklfUFVTSCAoJWVieCkKLQotCUFMSUdOICg0KQotTCg0NmJ5dGVzKToKLQltb3YJLTQ2KCVlYXgpLCAlZWN4Ci0JbW92CS00NiglZWR4KSwgJWVieAotCWNtcAklZWJ4LCAlZWN4Ci0Jam5lCUwoZmluZF9kaWZmKQotTCg0MmJ5dGVzKToKLQltb3YJLTQyKCVlYXgpLCAlZWN4Ci0JbW92CS00MiglZWR4KSwgJWVieAotCWNtcAklZWJ4LCAlZWN4Ci0Jam5lCUwoZmluZF9kaWZmKQotTCgzOGJ5dGVzKToKLQltb3YJLTM4KCVlYXgpLCAlZWN4Ci0JbW92CS0zOCglZWR4KSwgJWVieAotCWNtcAklZWJ4LCAlZWN4Ci0Jam5lCUwoZmluZF9kaWZmKQotTCgzNGJ5dGVzKToKLQltb3YJLTM0KCVlYXgpLCAlZWN4Ci0JbW92CS0zNCglZWR4KSwgJWVieAotCWNtcAklZWJ4LCAlZWN4Ci0Jam5lCUwoZmluZF9kaWZmKQotTCgzMGJ5dGVzKToKLQltb3YJLTMwKCVlYXgpLCAlZWN4Ci0JbW92CS0zMCglZWR4KSwgJWVieAotCWNtcAklZWJ4LCAlZWN4Ci0Jam5lCUwoZmluZF9kaWZmKQotTCgyNmJ5dGVzKToKLQltb3YJLTI2KCVlYXgpLCAlZWN4Ci0JbW92CS0yNiglZWR4KSwgJWVieAotCWNtcAklZWJ4LCAlZWN4Ci0Jam5lCUwoZmluZF9kaWZmKQotTCgyMmJ5dGVzKToKLQltb3YJLTIyKCVlYXgpLCAlZWN4Ci0JbW92CS0yMiglZWR4KSwgJWVieAotCWNtcAklZWJ4LCAlZWN4Ci0Jam5lCUwoZmluZF9kaWZmKQotTCgxOGJ5dGVzKToKLQltb3YJLTE4KCVlYXgpLCAlZWN4Ci0JbW92CS0xOCglZWR4KSwgJWVieAotCWNtcAklZWJ4LCAlZWN4Ci0Jam5lCUwoZmluZF9kaWZmKQotTCgxNGJ5dGVzKToKLQltb3YJLTE0KCVlYXgpLCAlZWN4Ci0JbW92CS0xNCglZWR4KSwgJWVieAotCWNtcAklZWJ4LCAlZWN4Ci0Jam5lCUwoZmluZF9kaWZmKQotTCgxMGJ5dGVzKToKLQltb3YJLTEwKCVlYXgpLCAlZWN4Ci0JbW92CS0xMCglZWR4KSwgJWVieAotCWNtcAklZWJ4LCAlZWN4Ci0Jam5lCUwoZmluZF9kaWZmKQotTCg2Ynl0ZXMpOgotCW1vdgktNiglZWF4KSwgJWVjeAotCW1vdgktNiglZWR4KSwgJWVieAotCWNtcAklZWJ4LCAlZWN4Ci0Jam5lCUwoZmluZF9kaWZmKQotTCgyYnl0ZXMpOgotCW1vdnp3bAktMiglZWF4KSwgJWVjeAotCW1vdnp3bAktMiglZWR4KSwgJWVieAotCWNtcAklYmwsICVjbAotCWpuZQlMKGVuZCkKLQljbXAJJWJoLCAlY2gKLQltb3YJJDAsICVlYXgKLQlqbmUJTChlbmQpCi0JUE9QICglZWJ4KQotCXJldAotCUNGSV9QVVNIICglZWJ4KQotCi0JQUxJR04gKDQpCi1MKDQ3Ynl0ZXMpOgotCW1vdmwJLTQ3KCVlYXgpLCAlZWN4Ci0JbW92bAktNDcoJWVkeCksICVlYngKLQljbXAJJWVieCwgJWVjeAotCWpuZQlMKGZpbmRfZGlmZikKLUwoNDNieXRlcyk6Ci0JbW92bAktNDMoJWVheCksICVlY3gKLQltb3ZsCS00MyglZWR4KSwgJWVieAotCWNtcAklZWJ4LCAlZWN4Ci0Jam5lCUwoZmluZF9kaWZmKQotTCgzOWJ5dGVzKToKLQltb3ZsCS0zOSglZWF4KSwgJWVjeAotCW1vdmwJLTM5KCVlZHgpLCAlZWJ4Ci0JY21wCSVlYngsICVlY3gKLQlqbmUJTChmaW5kX2RpZmYpCi1MKDM1Ynl0ZXMpOgotCW1vdmwJLTM1KCVlYXgpLCAlZWN4Ci0JbW92bAktMzUoJWVkeCksICVlYngKLQljbXAJJWVieCwgJWVjeAotCWpuZQlMKGZpbmRfZGlmZikKLUwoMzFieXRlcyk6Ci0JbW92bAktMzEoJWVheCksICVlY3gKLQltb3ZsCS0zMSglZWR4KSwgJWVieAotCWNtcAklZWJ4LCAlZWN4Ci0Jam5lCUwoZmluZF9kaWZmKQotTCgyN2J5dGVzKToKLQltb3ZsCS0yNyglZWF4KSwgJWVjeAotCW1vdmwJLTI3KCVlZHgpLCAlZWJ4Ci0JY21wCSVlYngsICVlY3gKLQlqbmUJTChmaW5kX2RpZmYpCi1MKDIzYnl0ZXMpOgotCW1vdmwJLTIzKCVlYXgpLCAlZWN4Ci0JbW92bAktMjMoJWVkeCksICVlYngKLQljbXAJJWVieCwgJWVjeAotCWpuZQlMKGZpbmRfZGlmZikKLUwoMTlieXRlcyk6Ci0JbW92bAktMTkoJWVheCksICVlY3gKLQltb3ZsCS0xOSglZWR4KSwgJWVieAotCWNtcAklZWJ4LCAlZWN4Ci0Jam5lCUwoZmluZF9kaWZmKQotTCgxNWJ5dGVzKToKLQltb3ZsCS0xNSglZWF4KSwgJWVjeAotCW1vdmwJLTE1KCVlZHgpLCAlZWJ4Ci0JY21wCSVlYngsICVlY3gKLQlqbmUJTChmaW5kX2RpZmYpCi1MKDExYnl0ZXMpOgotCW1vdmwJLTExKCVlYXgpLCAlZWN4Ci0JbW92bAktMTEoJWVkeCksICVlYngKLQljbXAJJWVieCwgJWVjeAotCWpuZQlMKGZpbmRfZGlmZikKLUwoN2J5dGVzKToKLQltb3ZsCS03KCVlYXgpLCAlZWN4Ci0JbW92bAktNyglZWR4KSwgJWVieAotCWNtcAklZWJ4LCAlZWN4Ci0Jam5lCUwoZmluZF9kaWZmKQotTCgzYnl0ZXMpOgotCW1vdnp3bAktMyglZWF4KSwgJWVjeAotCW1vdnp3bAktMyglZWR4KSwgJWVieAotCWNtcGIJJWJsLCAlY2wKLQlqbmUJTChlbmQpCi0JY21wCSVieCwgJWN4Ci0Jam5lCUwoZW5kKQotCW1vdnpibAktMSglZWF4KSwgJWVheAotCWNtcGIJLTEoJWVkeCksICVhbAotCW1vdgkkMCwgJWVheAotCWpuZQlMKGVuZCkKLQlQT1AgKCVlYngpCi0JcmV0Ci0JQ0ZJX1BVU0ggKCVlYngpCi0KLQlBTElHTiAoNCkKLUwoZmluZF9kaWZmKToKLQljbXBiCSVibCwgJWNsCi0Jam5lCUwoZW5kKQotCWNtcAklYngsICVjeAotCWpuZQlMKGVuZCkKLQlzaHIJJDE2LCVlY3gKLQlzaHIJJDE2LCVlYngKLQljbXAJJWJsLCAlY2wKLQlqbmUJTChlbmQpCi0JY21wCSVieCwgJWN4Ci1MKGVuZCk6Ci0JUE9QICglZWJ4KQotCW1vdgkkMSwgJWVheAotCWphCUwoYmlnZ2VyKQotCW5lZwklZWF4Ci1MKGJpZ2dlcik6Ci0JcmV0Ci0KLUVORCAoTUVNQ01QKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zdHJpbmcvc3NzZTMtbWVtY3B5LWF0b20uUyBiL2xpYmMvYXJjaC14ODYvc3RyaW5nL3Nzc2UzLW1lbWNweS1hdG9tLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTA4MGEzOAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc3RyaW5nL3Nzc2UzLW1lbWNweS1hdG9tLlMKQEAgLTAsMCArMSwzMjAwIEBACisvKgorQ29weXJpZ2h0IChjKSAyMDEwLCBJbnRlbCBDb3Jwb3JhdGlvbgorQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKworICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICAgICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKworICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICAgICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorICAgICogYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisKKyAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgSW50ZWwgQ29ycG9yYXRpb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgICAgKiBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAgICAqIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECitBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CitMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KK0FOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqLworCisjaW5jbHVkZSAiY2FjaGUuaCIKKyN1bmRlZiBfX2k2ODYKKworI2lmbmRlZiBNRU1DUFkKKyMgZGVmaW5lIE1FTUNQWQltZW1jcHkKKyNlbmRpZgorCisjaWZuZGVmIEwKKyMgZGVmaW5lIEwobGFiZWwpCS5MIyNsYWJlbAorI2VuZGlmCisKKyNpZm5kZWYgY2ZpX3N0YXJ0cHJvYworIyBkZWZpbmUgY2ZpX3N0YXJ0cHJvYwkuY2ZpX3N0YXJ0cHJvYworI2VuZGlmCisKKyNpZm5kZWYgY2ZpX2VuZHByb2MKKyMgZGVmaW5lIGNmaV9lbmRwcm9jCS5jZmlfZW5kcHJvYworI2VuZGlmCisKKyNpZm5kZWYgY2ZpX3JlbF9vZmZzZXQKKyMgZGVmaW5lIGNmaV9yZWxfb2Zmc2V0KHJlZywgb2ZmKQkuY2ZpX3JlbF9vZmZzZXQgcmVnLCBvZmYKKyNlbmRpZgorCisjaWZuZGVmIGNmaV9yZXN0b3JlCisjIGRlZmluZSBjZmlfcmVzdG9yZShyZWcpCS5jZmlfcmVzdG9yZSByZWcKKyNlbmRpZgorCisjaWZuZGVmIGNmaV9hZGp1c3RfY2ZhX29mZnNldAorIyBkZWZpbmUgY2ZpX2FkanVzdF9jZmFfb2Zmc2V0KG9mZikJLmNmaV9hZGp1c3RfY2ZhX29mZnNldCBvZmYKKyNlbmRpZgorCisjaWZuZGVmIEVOVFJZCisjIGRlZmluZSBFTlRSWShuYW1lKQkJXAorCS50eXBlIG5hbWUsICBAZnVuY3Rpb247CQlcCisJLmdsb2JsIG5hbWU7CQlcCisJLnAyYWxpZ24gNDsJCVwKK25hbWU6CQlcCisJY2ZpX3N0YXJ0cHJvYworI2VuZGlmCisKKyNpZm5kZWYgRU5ECisjIGRlZmluZSBFTkQobmFtZSkJCVwKKwljZmlfZW5kcHJvYzsJCVwKKwkuc2l6ZSBuYW1lLCAuLW5hbWUKKyNlbmRpZgorCisjaWZkZWYgVVNFX0FTX0JDT1BZCisjIGRlZmluZSBTUkMJCVBBUk1TCisjIGRlZmluZSBERVNUCQlTUkMrNAorIyBkZWZpbmUgTEVOCQlERVNUKzQKKyNlbHNlCisjIGRlZmluZSBERVNUCQlQQVJNUworIyBkZWZpbmUgU1JDCQlERVNUKzQKKyMgZGVmaW5lIExFTgkJU1JDKzQKKyNlbmRpZgorCisjZGVmaW5lIENGSV9QVVNIKFJFRykJCVwKKyAgY2ZpX2FkanVzdF9jZmFfb2Zmc2V0ICg0KTsJCVwKKyAgY2ZpX3JlbF9vZmZzZXQgKFJFRywgMCkKKworI2RlZmluZSBDRklfUE9QKFJFRykJCVwKKyAgY2ZpX2FkanVzdF9jZmFfb2Zmc2V0ICgtNCk7CQlcCisgIGNmaV9yZXN0b3JlIChSRUcpCisKKyNkZWZpbmUgUFVTSChSRUcpCXB1c2hsIFJFRzsgQ0ZJX1BVU0ggKFJFRykKKyNkZWZpbmUgUE9QKFJFRykJcG9wbCBSRUc7IENGSV9QT1AgKFJFRykKKworI2lmIChkZWZpbmVkIFNIQVJFRCB8fCBkZWZpbmVkIF9fUElDX18pCisjIGRlZmluZSBQQVJNUwkJOAkJLyogUHJlc2VydmUgRUJYLiAgKi8KKyMgZGVmaW5lIEVOVFJBTkNFCVBVU0ggKCVlYngpOworIyBkZWZpbmUgUkVUVVJOX0VORAlQT1AgKCVlYngpOyByZXQKKyMgZGVmaW5lIFJFVFVSTgkJUkVUVVJOX0VORDsgQ0ZJX1BVU0ggKCVlYngpCisjIGRlZmluZSBKTVBUQkwoSSwgQikJSSAtIEIKKyMgdW5kZWYgX19pNjg2CisKKyMgZGVmaW5lIFNFVFVQX1BJQ19SRUcoeCkJY2FsbAlfX2k2ODYuZ2V0X3BjX3RodW5rLngKKworLyogTG9hZCBhbiBlbnRyeSBpbiBhIGp1bXAgdGFibGUgaW50byBFQlggYW5kIGJyYW5jaCB0byBpdC4gIFRBQkxFIGlzIGEKKwlqdW1wIHRhYmxlIHdpdGggcmVsYXRpdmUgb2Zmc2V0cy4gIElOREVYIGlzIGEgcmVnaXN0ZXIgY29udGFpbnMgdGhlCisJaW5kZXggaW50byB0aGUganVtcCB0YWJsZS4gICBTQ0FMRSBpcyB0aGUgc2NhbGUgb2YgSU5ERVguICovCisKKyMgZGVmaW5lIEJSQU5DSF9UT19KTVBUQkxfRU5UUlkoVEFCTEUsIElOREVYLCBTQ0FMRSkJCVwKKyAgICAvKiBXZSBmaXJzdCBsb2FkIFBDIGludG8gRUJYLiAgKi8JCVwKKwlTRVRVUF9QSUNfUkVHKGJ4KTsJCVwKKyAgICAvKiBHZXQgdGhlIGFkZHJlc3Mgb2YgdGhlIGp1bXAgdGFibGUuICAqLwkJXAorCWFkZGwJJChUQUJMRSAtIC4pLCAlZWJ4OwkJXAorICAgIC8qIEdldCB0aGUgZW50cnkgYW5kIGNvbnZlcnQgdGhlIHJlbGF0aXZlIG9mZnNldCB0byB0aGUJCVwKKwlhYnNvbHV0ZQlhZGRyZXNzLiAgKi8JCVwKKwlhZGRsCSglZWJ4LCBJTkRFWCwgU0NBTEUpLCAlZWJ4OwkJXAorICAgIC8qIFdlIGxvYWRlZCB0aGUganVtcCB0YWJsZS4gIEdvLiAgKi8JCVwKKwlqbXAJKiVlYngKKyNlbHNlCisKKyMgZGVmaW5lIFBBUk1TCQk0CisjIGRlZmluZSBFTlRSQU5DRQorIyBkZWZpbmUgUkVUVVJOX0VORAlyZXQKKyMgZGVmaW5lIFJFVFVSTgkJUkVUVVJOX0VORAorIyBkZWZpbmUgSk1QVEJMKEksIEIpCUkKKworLyogQnJhbmNoIHRvIGFuIGVudHJ5IGluIGEganVtcCB0YWJsZS4gIFRBQkxFIGlzIGEganVtcCB0YWJsZSB3aXRoCisJYWJzb2x1dGUgb2Zmc2V0cy4gIElOREVYIGlzIGEgcmVnaXN0ZXIgY29udGFpbnMgdGhlIGluZGV4IGludG8gdGhlCisJanVtcCB0YWJsZS4gIFNDQUxFIGlzIHRoZSBzY2FsZSBvZiBJTkRFWC4gKi8KKworIyBkZWZpbmUgQlJBTkNIX1RPX0pNUFRCTF9FTlRSWShUQUJMRSwgSU5ERVgsIFNDQUxFKQkJXAorCWptcAkqVEFCTEUoLCBJTkRFWCwgU0NBTEUpCisjZW5kaWYKKworCS5zZWN0aW9uIC50ZXh0LnNzc2UzLCJheCIsQHByb2diaXRzCitFTlRSWSAoTUVNQ1BZKQorCUVOVFJBTkNFCisJbW92bAlMRU4oJWVzcCksICVlY3gKKwltb3ZsCVNSQyglZXNwKSwgJWVheAorCW1vdmwJREVTVCglZXNwKSwgJWVkeAorCisjaWZkZWYgVVNFX0FTX01FTU1PVkUKKwljbXAJJWVheCwgJWVkeAorCWpiCUwoY29weV9mb3J3YXJkKQorCWplCUwoZndkX3dyaXRlXzBieXRlcykKKwljbXAJJDMyLCAlZWN4CisJamFlCUwobWVtbW92ZV9id2QpCisJam1wCUwoYmtfd3JpdGVfbGVzczMyYnl0ZXNfMikKKworCS5wMmFsaWduIDQKK0wobWVtbW92ZV9id2QpOgorCWFkZAklZWN4LCAlZWF4CisJY21wCSVlYXgsICVlZHgKKwltb3ZsCVNSQyglZXNwKSwgJWVheAorCWpiCUwoY29weV9iYWNrd2FyZCkKKworTChjb3B5X2ZvcndhcmQpOgorI2VuZGlmCisJY21wCSQ0OCwgJWVjeAorCWphZQlMKDQ4Ynl0ZXNvcm1vcmUpCisKK0woZndkX3dyaXRlX2xlc3MzMmJ5dGVzKToKKyNpZm5kZWYgVVNFX0FTX01FTU1PVkUKKwljbXAJJWRsLCAlYWwKKwlqYglMKGJrX3dyaXRlKQorI2VuZGlmCisJYWRkCSVlY3gsICVlZHgKKwlhZGQJJWVjeCwgJWVheAorCUJSQU5DSF9UT19KTVBUQkxfRU5UUlkgKEwodGFibGVfNDhieXRlc19md2QpLCAlZWN4LCA0KQorI2lmbmRlZiBVU0VfQVNfTUVNTU9WRQorCS5wMmFsaWduIDQKK0woYmtfd3JpdGUpOgorCUJSQU5DSF9UT19KTVBUQkxfRU5UUlkgKEwodGFibGVfNDhfYnl0ZXNfYndkKSwgJWVjeCwgNCkKKyNlbmRpZgorCisJLnAyYWxpZ24gNAorTCg0OGJ5dGVzb3Jtb3JlKToKKyNpZm5kZWYgVVNFX0FTX01FTU1PVkUKKwltb3ZscGQJKCVlYXgpLCAleG1tMAorCW1vdmxwZAk4KCVlYXgpLCAleG1tMQorCW1vdmxwZAkleG1tMCwgKCVlZHgpCisJbW92bHBkCSV4bW0xLCA4KCVlZHgpCisjZWxzZQorCW1vdmRxdQkoJWVheCksICV4bW0wCisjZW5kaWYKKwlQVVNIICglZWRpKQorCW1vdmwJJWVkeCwgJWVkaQorCWFuZAkkLTE2LCAlZWR4CisJYWRkCSQxNiwgJWVkeAorCXN1YgklZWR4LCAlZWRpCisJYWRkCSVlZGksICVlY3gKKwlzdWIJJWVkaSwgJWVheAorCisjaWZkZWYgU0hBUkVEX0NBQ0hFX1NJWkVfSEFMRgorCWNtcAkkU0hBUkVEX0NBQ0hFX1NJWkVfSEFMRiwgJWVjeAorI2Vsc2UKKyMgaWYgKGRlZmluZWQgU0hBUkVEIHx8IGRlZmluZWQgX19QSUNfXykKKwlTRVRVUF9QSUNfUkVHKGJ4KQorCWFkZAkkX0dMT0JBTF9PRkZTRVRfVEFCTEVfLCAlZWJ4CisJY21wCV9feDg2X3NoYXJlZF9jYWNoZV9zaXplX2hhbGZAR09UT0ZGKCVlYngpLCAlZWN4CisjIGVsc2UKKwljbXAJX194ODZfc2hhcmVkX2NhY2hlX3NpemVfaGFsZiwgJWVjeAorIyBlbmRpZgorI2VuZGlmCisKKwltb3YJJWVheCwgJWVkaQorCWphZQlMKGxhcmdlX3BhZ2UpCisJYW5kCSQweGYsICVlZGkKKwlqeglMKHNobF8wKQorCUJSQU5DSF9UT19KTVBUQkxfRU5UUlkgKEwoc2hsX3RhYmxlKSwgJWVkaSwgNCkKKworCS5wMmFsaWduIDQKK0woc2hsXzApOgorI2lmZGVmIFVTRV9BU19NRU1NT1ZFCisJbW92bAlERVNUKzQoJWVzcCksICVlZGkKKwltb3ZkcXUJJXhtbTAsICglZWRpKQorI2VuZGlmCisJeG9yCSVlZGksICVlZGkKKwljbXAJJDEyNywgJWVjeAorCWphCUwoc2hsXzBfZ29iYmxlKQorCWxlYQktMzIoJWVjeCksICVlY3gKKworCS5wMmFsaWduIDQKK0woc2hsXzBfbG9vcCk6CisJbW92ZHFhCSglZWF4LCAlZWRpKSwgJXhtbTAKKwltb3ZkcWEJMTYoJWVheCwgJWVkaSksICV4bW0xCisJc3ViCSQzMiwgJWVjeAorCW1vdmRxYQkleG1tMCwgKCVlZHgsICVlZGkpCisJbW92ZHFhCSV4bW0xLCAxNiglZWR4LCAlZWRpKQorCWxlYQkzMiglZWRpKSwgJWVkaQorCWpiCUwoc2hsXzBfZW5kKQorCisJbW92ZHFhCSglZWF4LCAlZWRpKSwgJXhtbTAKKwltb3ZkcWEJMTYoJWVheCwgJWVkaSksICV4bW0xCisJc3ViCSQzMiwgJWVjeAorCW1vdmRxYQkleG1tMCwgKCVlZHgsICVlZGkpCisJbW92ZHFhCSV4bW0xLCAxNiglZWR4LCAlZWRpKQorCWxlYQkzMiglZWRpKSwgJWVkaQorCWpiCUwoc2hsXzBfZW5kKQorCisJbW92ZHFhCSglZWF4LCAlZWRpKSwgJXhtbTAKKwltb3ZkcWEJMTYoJWVheCwgJWVkaSksICV4bW0xCisJc3ViCSQzMiwgJWVjeAorCW1vdmRxYQkleG1tMCwgKCVlZHgsICVlZGkpCisJbW92ZHFhCSV4bW0xLCAxNiglZWR4LCAlZWRpKQorCWxlYQkzMiglZWRpKSwgJWVkaQorCWpiCUwoc2hsXzBfZW5kKQorCisJbW92ZHFhCSglZWF4LCAlZWRpKSwgJXhtbTAKKwltb3ZkcWEJMTYoJWVheCwgJWVkaSksICV4bW0xCisJc3ViCSQzMiwgJWVjeAorCW1vdmRxYQkleG1tMCwgKCVlZHgsICVlZGkpCisJbW92ZHFhCSV4bW0xLCAxNiglZWR4LCAlZWRpKQorCWxlYQkzMiglZWRpKSwgJWVkaQorCitMKHNobF8wX2VuZCk6CisJbGVhCTMyKCVlY3gpLCAlZWN4CisJYWRkCSVlY3gsICVlZGkKKwlhZGQJJWVkaSwgJWVkeAorCWFkZAklZWRpLCAlZWF4CisJUE9QICglZWRpKQorCUJSQU5DSF9UT19KTVBUQkxfRU5UUlkgKEwodGFibGVfNDhieXRlc19md2RfYWxpZ24pLCAlZWN4LCA0KQorCisJQ0ZJX1BVU0ggKCVlZGkpCisKKwkucDJhbGlnbiA0CitMKHNobF8wX2dvYmJsZSk6CisjaWZkZWYgREFUQV9DQUNIRV9TSVpFX0hBTEYKKwljbXAJJERBVEFfQ0FDSEVfU0laRV9IQUxGLCAlZWN4CisjZWxzZQorIyBpZiAoZGVmaW5lZCBTSEFSRUQgfHwgZGVmaW5lZCBfX1BJQ19fKQorCVNFVFVQX1BJQ19SRUcoYngpCisJYWRkCSRfR0xPQkFMX09GRlNFVF9UQUJMRV8sICVlYngKKwljbXAJX194ODZfZGF0YV9jYWNoZV9zaXplX2hhbGZAR09UT0ZGKCVlYngpLCAlZWN4CisjIGVsc2UKKwljbXAJX194ODZfZGF0YV9jYWNoZV9zaXplX2hhbGYsICVlY3gKKyMgZW5kaWYKKyNlbmRpZgorCVBPUAkoJWVkaSkKKwlsZWEJLTEyOCglZWN4KSwgJWVjeAorCWphZQlMKHNobF8wX2dvYmJsZV9tZW1fbG9vcCkKKworCS5wMmFsaWduIDQKK0woc2hsXzBfZ29iYmxlX2NhY2hlX2xvb3ApOgorCW1vdmRxYQkoJWVheCksICV4bW0wCisJbW92ZHFhCTB4MTAoJWVheCksICV4bW0xCisJbW92ZHFhCTB4MjAoJWVheCksICV4bW0yCisJbW92ZHFhCTB4MzAoJWVheCksICV4bW0zCisJbW92ZHFhCTB4NDAoJWVheCksICV4bW00CisJbW92ZHFhCTB4NTAoJWVheCksICV4bW01CisJbW92ZHFhCTB4NjAoJWVheCksICV4bW02CisJbW92ZHFhCTB4NzAoJWVheCksICV4bW03CisJbGVhCTB4ODAoJWVheCksICVlYXgKKwlzdWIJJDEyOCwgJWVjeAorCW1vdmRxYQkleG1tMCwgKCVlZHgpCisJbW92ZHFhCSV4bW0xLCAweDEwKCVlZHgpCisJbW92ZHFhCSV4bW0yLCAweDIwKCVlZHgpCisJbW92ZHFhCSV4bW0zLCAweDMwKCVlZHgpCisJbW92ZHFhCSV4bW00LCAweDQwKCVlZHgpCisJbW92ZHFhCSV4bW01LCAweDUwKCVlZHgpCisJbW92ZHFhCSV4bW02LCAweDYwKCVlZHgpCisJbW92ZHFhCSV4bW03LCAweDcwKCVlZHgpCisJbGVhCTB4ODAoJWVkeCksICVlZHgKKworCWphZQlMKHNobF8wX2dvYmJsZV9jYWNoZV9sb29wKQorCWNtcAkkLTB4NDAsICVlY3gKKwlsZWEJMHg4MCglZWN4KSwgJWVjeAorCWpsCUwoc2hsXzBfY2FjaGVfbGVzc182NGJ5dGVzKQorCisJbW92ZHFhCSglZWF4KSwgJXhtbTAKKwlzdWIJJDB4NDAsICVlY3gKKwltb3ZkcWEJMHgxMCglZWF4KSwgJXhtbTEKKwltb3ZkcWEJJXhtbTAsICglZWR4KQorCW1vdmRxYQkleG1tMSwgMHgxMCglZWR4KQorCW1vdmRxYQkweDIwKCVlYXgpLCAleG1tMAorCW1vdmRxYQkweDMwKCVlYXgpLCAleG1tMQorCWFkZAkkMHg0MCwgJWVheAorCW1vdmRxYQkleG1tMCwgMHgyMCglZWR4KQorCW1vdmRxYQkleG1tMSwgMHgzMCglZWR4KQorCWFkZAkkMHg0MCwgJWVkeAorCitMKHNobF8wX2NhY2hlX2xlc3NfNjRieXRlcyk6CisJY21wCSQweDIwLCAlZWN4CisJamIJTChzaGxfMF9jYWNoZV9sZXNzXzMyYnl0ZXMpCisJbW92ZHFhCSglZWF4KSwgJXhtbTAKKwlzdWIJJDB4MjAsICVlY3gKKwltb3ZkcWEJMHgxMCglZWF4KSwgJXhtbTEKKwlhZGQJJDB4MjAsICVlYXgKKwltb3ZkcWEJJXhtbTAsICglZWR4KQorCW1vdmRxYQkleG1tMSwgMHgxMCglZWR4KQorCWFkZAkkMHgyMCwgJWVkeAorCitMKHNobF8wX2NhY2hlX2xlc3NfMzJieXRlcyk6CisJY21wCSQweDEwLCAlZWN4CisJamIJTChzaGxfMF9jYWNoZV9sZXNzXzE2Ynl0ZXMpCisJc3ViCSQweDEwLCAlZWN4CisJbW92ZHFhCSglZWF4KSwgJXhtbTAKKwlhZGQJJDB4MTAsICVlYXgKKwltb3ZkcWEJJXhtbTAsICglZWR4KQorCWFkZAkkMHgxMCwgJWVkeAorCitMKHNobF8wX2NhY2hlX2xlc3NfMTZieXRlcyk6CisJYWRkCSVlY3gsICVlZHgKKwlhZGQJJWVjeCwgJWVheAorCUJSQU5DSF9UT19KTVBUQkxfRU5UUlkgKEwodGFibGVfNDhieXRlc19md2QpLCAlZWN4LCA0KQorCisJLnAyYWxpZ24gNAorTChzaGxfMF9nb2JibGVfbWVtX2xvb3ApOgorCXByZWZldGNodDAgMHgxYzAoJWVheCkKKwlwcmVmZXRjaHQwIDB4MjgwKCVlYXgpCisJcHJlZmV0Y2h0MCAweDFjMCglZWR4KQorCisJbW92ZHFhCSglZWF4KSwgJXhtbTAKKwltb3ZkcWEJMHgxMCglZWF4KSwgJXhtbTEKKwltb3ZkcWEJMHgyMCglZWF4KSwgJXhtbTIKKwltb3ZkcWEJMHgzMCglZWF4KSwgJXhtbTMKKwltb3ZkcWEJMHg0MCglZWF4KSwgJXhtbTQKKwltb3ZkcWEJMHg1MCglZWF4KSwgJXhtbTUKKwltb3ZkcWEJMHg2MCglZWF4KSwgJXhtbTYKKwltb3ZkcWEJMHg3MCglZWF4KSwgJXhtbTcKKwlsZWEJMHg4MCglZWF4KSwgJWVheAorCXN1YgkkMHg4MCwgJWVjeAorCW1vdmRxYQkleG1tMCwgKCVlZHgpCisJbW92ZHFhCSV4bW0xLCAweDEwKCVlZHgpCisJbW92ZHFhCSV4bW0yLCAweDIwKCVlZHgpCisJbW92ZHFhCSV4bW0zLCAweDMwKCVlZHgpCisJbW92ZHFhCSV4bW00LCAweDQwKCVlZHgpCisJbW92ZHFhCSV4bW01LCAweDUwKCVlZHgpCisJbW92ZHFhCSV4bW02LCAweDYwKCVlZHgpCisJbW92ZHFhCSV4bW03LCAweDcwKCVlZHgpCisJbGVhCTB4ODAoJWVkeCksICVlZHgKKworCWphZQlMKHNobF8wX2dvYmJsZV9tZW1fbG9vcCkKKwljbXAJJC0weDQwLCAlZWN4CisJbGVhCTB4ODAoJWVjeCksICVlY3gKKwlqbAlMKHNobF8wX21lbV9sZXNzXzY0Ynl0ZXMpCisKKwltb3ZkcWEJKCVlYXgpLCAleG1tMAorCXN1YgkkMHg0MCwgJWVjeAorCW1vdmRxYQkweDEwKCVlYXgpLCAleG1tMQorCisJbW92ZHFhCSV4bW0wLCAoJWVkeCkKKwltb3ZkcWEJJXhtbTEsIDB4MTAoJWVkeCkKKworCW1vdmRxYQkweDIwKCVlYXgpLCAleG1tMAorCW1vdmRxYQkweDMwKCVlYXgpLCAleG1tMQorCWFkZAkkMHg0MCwgJWVheAorCisJbW92ZHFhCSV4bW0wLCAweDIwKCVlZHgpCisJbW92ZHFhCSV4bW0xLCAweDMwKCVlZHgpCisJYWRkCSQweDQwLCAlZWR4CisKK0woc2hsXzBfbWVtX2xlc3NfNjRieXRlcyk6CisJY21wCSQweDIwLCAlZWN4CisJamIJTChzaGxfMF9tZW1fbGVzc18zMmJ5dGVzKQorCW1vdmRxYQkoJWVheCksICV4bW0wCisJc3ViCSQweDIwLCAlZWN4CisJbW92ZHFhCTB4MTAoJWVheCksICV4bW0xCisJYWRkCSQweDIwLCAlZWF4CisJbW92ZHFhCSV4bW0wLCAoJWVkeCkKKwltb3ZkcWEJJXhtbTEsIDB4MTAoJWVkeCkKKwlhZGQJJDB4MjAsICVlZHgKKworTChzaGxfMF9tZW1fbGVzc18zMmJ5dGVzKToKKwljbXAJJDB4MTAsICVlY3gKKwlqYglMKHNobF8wX21lbV9sZXNzXzE2Ynl0ZXMpCisJc3ViCSQweDEwLCAlZWN4CisJbW92ZHFhCSglZWF4KSwgJXhtbTAKKwlhZGQJJDB4MTAsICVlYXgKKwltb3ZkcWEJJXhtbTAsICglZWR4KQorCWFkZAkkMHgxMCwgJWVkeAorCitMKHNobF8wX21lbV9sZXNzXzE2Ynl0ZXMpOgorCWFkZAklZWN4LCAlZWR4CisJYWRkCSVlY3gsICVlYXgKKwlCUkFOQ0hfVE9fSk1QVEJMX0VOVFJZIChMKHRhYmxlXzQ4Ynl0ZXNfZndkX2FsaWduKSwgJWVjeCwgNCkKKworCS5wMmFsaWduIDQKK0woc2hsXzEpOgorI2lmbmRlZiBVU0VfQVNfTUVNTU9WRQorCW1vdmFwcwktMSglZWF4KSwgJXhtbTEKKyNlbHNlCisJbW92bAlERVNUKzQoJWVzcCksICVlZGkKKwltb3ZhcHMJLTEoJWVheCksICV4bW0xCisJbW92ZHF1CSV4bW0wLCAoJWVkaSkKKyNlbmRpZgorI2lmZGVmIERBVEFfQ0FDSEVfU0laRV9IQUxGCisJY21wCSREQVRBX0NBQ0hFX1NJWkVfSEFMRiwgJWVjeAorI2Vsc2UKKyMgaWYgKGRlZmluZWQgU0hBUkVEIHx8IGRlZmluZWQgX19QSUNfXykKKwlTRVRVUF9QSUNfUkVHKGJ4KQorCWFkZAkkX0dMT0JBTF9PRkZTRVRfVEFCTEVfLCAlZWJ4CisJY21wCV9feDg2X2RhdGFfY2FjaGVfc2l6ZV9oYWxmQEdPVE9GRiglZWJ4KSwgJWVjeAorIyBlbHNlCisJY21wCV9feDg2X2RhdGFfY2FjaGVfc2l6ZV9oYWxmLCAlZWN4CisjIGVuZGlmCisjZW5kaWYKKwlqYiBMKHNoXzFfbm9fcHJlZmV0Y2gpCisKKwlsZWEJLTY0KCVlY3gpLCAlZWN4CisKKwkucDJhbGlnbiA0CitMKFNobDFMb29wU3RhcnQpOgorCXByZWZldGNodDAgMHgxYzAoJWVheCkKKwlwcmVmZXRjaHQwIDB4MWMwKCVlZHgpCisJbW92YXBzCTE1KCVlYXgpLCAleG1tMgorCW1vdmFwcwkzMSglZWF4KSwgJXhtbTMKKwltb3ZhcHMJNDcoJWVheCksICV4bW00CisJbW92YXBzCTYzKCVlYXgpLCAleG1tNQorCW1vdmFwcwkleG1tNSwgJXhtbTcKKwlwYWxpZ25yCSQxLCAleG1tNCwgJXhtbTUKKwlwYWxpZ25yCSQxLCAleG1tMywgJXhtbTQKKwltb3ZhcHMJJXhtbTUsIDQ4KCVlZHgpCisJcGFsaWducgkkMSwgJXhtbTIsICV4bW0zCisJbGVhCTY0KCVlYXgpLCAlZWF4CisJcGFsaWducgkkMSwgJXhtbTEsICV4bW0yCisJbW92YXBzCSV4bW00LCAzMiglZWR4KQorCW1vdmFwcwkleG1tMywgMTYoJWVkeCkKKwltb3ZhcHMJJXhtbTcsICV4bW0xCisJbW92YXBzCSV4bW0yLCAoJWVkeCkKKwlsZWEJNjQoJWVkeCksICVlZHgKKwlzdWIJJDY0LCAlZWN4CisJamEJTChTaGwxTG9vcFN0YXJ0KQorCitMKFNobDFMb29wTGVhdmUpOgorCWFkZAkkMzIsICVlY3gKKwlqbGUJTChzaGxfZW5kXzApCisKKwltb3ZhcHMJMTUoJWVheCksICV4bW0yCisJbW92YXBzCTMxKCVlYXgpLCAleG1tMworCXBhbGlnbnIJJDEsICV4bW0yLCAleG1tMworCXBhbGlnbnIJJDEsICV4bW0xLCAleG1tMgorCW1vdmFwcwkleG1tMiwgKCVlZHgpCisJbW92YXBzCSV4bW0zLCAxNiglZWR4KQorCWxlYQkzMiglZWR4LCAlZWN4KSwgJWVkeAorCWxlYQkzMiglZWF4LCAlZWN4KSwgJWVheAorCVBPUCAoJWVkaSkKKwlCUkFOQ0hfVE9fSk1QVEJMX0VOVFJZKEwodGFibGVfNDhieXRlc19md2QpLCAlZWN4LCA0KQorCisJQ0ZJX1BVU0ggKCVlZGkpCisKKwkucDJhbGlnbiA0CitMKHNoXzFfbm9fcHJlZmV0Y2gpOgorCWxlYQktMzIoJWVjeCksICVlY3gKKwlsZWEJLTEoJWVheCksICVlYXgKKwl4b3IJJWVkaSwgJWVkaQorCisJLnAyYWxpZ24gNAorTChzaF8xX25vX3ByZWZldGNoX2xvb3ApOgorCW1vdmRxYQkxNiglZWF4LCAlZWRpKSwgJXhtbTIKKwlzdWIJJDMyLCAlZWN4CisJbW92ZHFhCTMyKCVlYXgsICVlZGkpLCAleG1tMworCW1vdmRxYQkleG1tMywgJXhtbTQKKwlwYWxpZ25yCSQxLCAleG1tMiwgJXhtbTMKKwlwYWxpZ25yCSQxLCAleG1tMSwgJXhtbTIKKwlsZWEJMzIoJWVkaSksICVlZGkKKwltb3ZkcWEJJXhtbTIsIC0zMiglZWR4LCAlZWRpKQorCW1vdmRxYQkleG1tMywgLTE2KCVlZHgsICVlZGkpCisJamIJTChzaF8xX2VuZF9ub19wcmVmZXRjaF9sb29wKQorCisJbW92ZHFhCTE2KCVlYXgsICVlZGkpLCAleG1tMgorCXN1YgkkMzIsICVlY3gKKwltb3ZkcWEJMzIoJWVheCwgJWVkaSksICV4bW0zCisJbW92ZHFhCSV4bW0zLCAleG1tMQorCXBhbGlnbnIJJDEsICV4bW0yLCAleG1tMworCXBhbGlnbnIJJDEsICV4bW00LCAleG1tMgorCWxlYQkzMiglZWRpKSwgJWVkaQorCW1vdmRxYQkleG1tMiwgLTMyKCVlZHgsICVlZGkpCisJbW92ZHFhCSV4bW0zLCAtMTYoJWVkeCwgJWVkaSkKKwlqYWUJTChzaF8xX25vX3ByZWZldGNoX2xvb3ApCisKK0woc2hfMV9lbmRfbm9fcHJlZmV0Y2hfbG9vcCk6CisJbGVhCTMyKCVlY3gpLCAlZWN4CisJYWRkCSVlY3gsICVlZGkKKwlhZGQJJWVkaSwgJWVkeAorCWxlYQkxKCVlZGksICVlYXgpLCAlZWF4CisJUE9QCSglZWRpKQorCUJSQU5DSF9UT19KTVBUQkxfRU5UUlkoTCh0YWJsZV80OGJ5dGVzX2Z3ZCksICVlY3gsIDQpCisKKwlDRklfUFVTSCAoJWVkaSkKKworCS5wMmFsaWduIDQKK0woc2hsXzIpOgorI2lmbmRlZiBVU0VfQVNfTUVNTU9WRQorCW1vdmFwcwktMiglZWF4KSwgJXhtbTEKKyNlbHNlCisJbW92bAlERVNUKzQoJWVzcCksICVlZGkKKwltb3ZhcHMJLTIoJWVheCksICV4bW0xCisJbW92ZHF1CSV4bW0wLCAoJWVkaSkKKyNlbmRpZgorI2lmZGVmIERBVEFfQ0FDSEVfU0laRV9IQUxGCisJY21wCSREQVRBX0NBQ0hFX1NJWkVfSEFMRiwgJWVjeAorI2Vsc2UKKyMgaWYgKGRlZmluZWQgU0hBUkVEIHx8IGRlZmluZWQgX19QSUNfXykKKwlTRVRVUF9QSUNfUkVHKGJ4KQorCWFkZAkkX0dMT0JBTF9PRkZTRVRfVEFCTEVfLCAlZWJ4CisJY21wCV9feDg2X2RhdGFfY2FjaGVfc2l6ZV9oYWxmQEdPVE9GRiglZWJ4KSwgJWVjeAorIyBlbHNlCisJY21wCV9feDg2X2RhdGFfY2FjaGVfc2l6ZV9oYWxmLCAlZWN4CisjIGVuZGlmCisjZW5kaWYKKwlqYiBMKHNoXzJfbm9fcHJlZmV0Y2gpCisKKwlsZWEJLTY0KCVlY3gpLCAlZWN4CisKKwkucDJhbGlnbiA0CitMKFNobDJMb29wU3RhcnQpOgorCXByZWZldGNodDAgMHgxYzAoJWVheCkKKwlwcmVmZXRjaHQwIDB4MWMwKCVlZHgpCisJbW92YXBzCTE0KCVlYXgpLCAleG1tMgorCW1vdmFwcwkzMCglZWF4KSwgJXhtbTMKKwltb3ZhcHMJNDYoJWVheCksICV4bW00CisJbW92YXBzCTYyKCVlYXgpLCAleG1tNQorCW1vdmFwcwkleG1tNSwgJXhtbTcKKwlwYWxpZ25yCSQyLCAleG1tNCwgJXhtbTUKKwlwYWxpZ25yCSQyLCAleG1tMywgJXhtbTQKKwltb3ZhcHMJJXhtbTUsIDQ4KCVlZHgpCisJcGFsaWducgkkMiwgJXhtbTIsICV4bW0zCisJbGVhCTY0KCVlYXgpLCAlZWF4CisJcGFsaWducgkkMiwgJXhtbTEsICV4bW0yCisJbW92YXBzCSV4bW00LCAzMiglZWR4KQorCW1vdmFwcwkleG1tMywgMTYoJWVkeCkKKwltb3ZhcHMJJXhtbTcsICV4bW0xCisJbW92YXBzCSV4bW0yLCAoJWVkeCkKKwlsZWEJNjQoJWVkeCksICVlZHgKKwlzdWIJJDY0LCAlZWN4CisJamEJTChTaGwyTG9vcFN0YXJ0KQorCitMKFNobDJMb29wTGVhdmUpOgorCWFkZAkkMzIsICVlY3gKKwlqbGUJTChzaGxfZW5kXzApCisKKwltb3ZhcHMJMTQoJWVheCksICV4bW0yCisJbW92YXBzCTMwKCVlYXgpLCAleG1tMworCXBhbGlnbnIJJDIsICV4bW0yLCAleG1tMworCXBhbGlnbnIJJDIsICV4bW0xLCAleG1tMgorCW1vdmFwcwkleG1tMiwgKCVlZHgpCisJbW92YXBzCSV4bW0zLCAxNiglZWR4KQorCWxlYQkzMiglZWR4LCAlZWN4KSwgJWVkeAorCWxlYQkzMiglZWF4LCAlZWN4KSwgJWVheAorCVBPUCAoJWVkaSkKKwlCUkFOQ0hfVE9fSk1QVEJMX0VOVFJZKEwodGFibGVfNDhieXRlc19md2QpLCAlZWN4LCA0KQorCisJQ0ZJX1BVU0ggKCVlZGkpCisKKwkucDJhbGlnbiA0CitMKHNoXzJfbm9fcHJlZmV0Y2gpOgorCWxlYQktMzIoJWVjeCksICVlY3gKKwlsZWEJLTIoJWVheCksICVlYXgKKwl4b3IJJWVkaSwgJWVkaQorCisJLnAyYWxpZ24gNAorTChzaF8yX25vX3ByZWZldGNoX2xvb3ApOgorCW1vdmRxYQkxNiglZWF4LCAlZWRpKSwgJXhtbTIKKwlzdWIJJDMyLCAlZWN4CisJbW92ZHFhCTMyKCVlYXgsICVlZGkpLCAleG1tMworCW1vdmRxYQkleG1tMywgJXhtbTQKKwlwYWxpZ25yCSQyLCAleG1tMiwgJXhtbTMKKwlwYWxpZ25yCSQyLCAleG1tMSwgJXhtbTIKKwlsZWEJMzIoJWVkaSksICVlZGkKKwltb3ZkcWEJJXhtbTIsIC0zMiglZWR4LCAlZWRpKQorCW1vdmRxYQkleG1tMywgLTE2KCVlZHgsICVlZGkpCisJamIJTChzaF8yX2VuZF9ub19wcmVmZXRjaF9sb29wKQorCisJbW92ZHFhCTE2KCVlYXgsICVlZGkpLCAleG1tMgorCXN1YgkkMzIsICVlY3gKKwltb3ZkcWEJMzIoJWVheCwgJWVkaSksICV4bW0zCisJbW92ZHFhCSV4bW0zLCAleG1tMQorCXBhbGlnbnIJJDIsICV4bW0yLCAleG1tMworCXBhbGlnbnIJJDIsICV4bW00LCAleG1tMgorCWxlYQkzMiglZWRpKSwgJWVkaQorCW1vdmRxYQkleG1tMiwgLTMyKCVlZHgsICVlZGkpCisJbW92ZHFhCSV4bW0zLCAtMTYoJWVkeCwgJWVkaSkKKwlqYWUJTChzaF8yX25vX3ByZWZldGNoX2xvb3ApCisKK0woc2hfMl9lbmRfbm9fcHJlZmV0Y2hfbG9vcCk6CisJbGVhCTMyKCVlY3gpLCAlZWN4CisJYWRkCSVlY3gsICVlZGkKKwlhZGQJJWVkaSwgJWVkeAorCWxlYQkyKCVlZGksICVlYXgpLCAlZWF4CisJUE9QCSglZWRpKQorCUJSQU5DSF9UT19KTVBUQkxfRU5UUlkoTCh0YWJsZV80OGJ5dGVzX2Z3ZCksICVlY3gsIDQpCisKKwlDRklfUFVTSCAoJWVkaSkKKworCS5wMmFsaWduIDQKK0woc2hsXzMpOgorI2lmbmRlZiBVU0VfQVNfTUVNTU9WRQorCW1vdmFwcwktMyglZWF4KSwgJXhtbTEKKyNlbHNlCisJbW92bAlERVNUKzQoJWVzcCksICVlZGkKKwltb3ZhcHMJLTMoJWVheCksICV4bW0xCisJbW92ZHF1CSV4bW0wLCAoJWVkaSkKKyNlbmRpZgorI2lmZGVmIERBVEFfQ0FDSEVfU0laRV9IQUxGCisJY21wCSREQVRBX0NBQ0hFX1NJWkVfSEFMRiwgJWVjeAorI2Vsc2UKKyMgaWYgKGRlZmluZWQgU0hBUkVEIHx8IGRlZmluZWQgX19QSUNfXykKKwlTRVRVUF9QSUNfUkVHKGJ4KQorCWFkZAkkX0dMT0JBTF9PRkZTRVRfVEFCTEVfLCAlZWJ4CisJY21wCV9feDg2X2RhdGFfY2FjaGVfc2l6ZV9oYWxmQEdPVE9GRiglZWJ4KSwgJWVjeAorIyBlbHNlCisJY21wCV9feDg2X2RhdGFfY2FjaGVfc2l6ZV9oYWxmLCAlZWN4CisjIGVuZGlmCisjZW5kaWYKKwlqYiBMKHNoXzNfbm9fcHJlZmV0Y2gpCisKKwlsZWEJLTY0KCVlY3gpLCAlZWN4CisKKwkucDJhbGlnbiA0CitMKFNobDNMb29wU3RhcnQpOgorCXByZWZldGNodDAgMHgxYzAoJWVheCkKKwlwcmVmZXRjaHQwIDB4MWMwKCVlZHgpCisJbW92YXBzCTEzKCVlYXgpLCAleG1tMgorCW1vdmFwcwkyOSglZWF4KSwgJXhtbTMKKwltb3ZhcHMJNDUoJWVheCksICV4bW00CisJbW92YXBzCTYxKCVlYXgpLCAleG1tNQorCW1vdmFwcwkleG1tNSwgJXhtbTcKKwlwYWxpZ25yCSQzLCAleG1tNCwgJXhtbTUKKwlwYWxpZ25yCSQzLCAleG1tMywgJXhtbTQKKwltb3ZhcHMJJXhtbTUsIDQ4KCVlZHgpCisJcGFsaWducgkkMywgJXhtbTIsICV4bW0zCisJbGVhCTY0KCVlYXgpLCAlZWF4CisJcGFsaWducgkkMywgJXhtbTEsICV4bW0yCisJbW92YXBzCSV4bW00LCAzMiglZWR4KQorCW1vdmFwcwkleG1tMywgMTYoJWVkeCkKKwltb3ZhcHMJJXhtbTcsICV4bW0xCisJbW92YXBzCSV4bW0yLCAoJWVkeCkKKwlsZWEJNjQoJWVkeCksICVlZHgKKwlzdWIJJDY0LCAlZWN4CisJamEJTChTaGwzTG9vcFN0YXJ0KQorCitMKFNobDNMb29wTGVhdmUpOgorCWFkZAkkMzIsICVlY3gKKwlqbGUJTChzaGxfZW5kXzApCisKKwltb3ZhcHMJMTMoJWVheCksICV4bW0yCisJbW92YXBzCTI5KCVlYXgpLCAleG1tMworCXBhbGlnbnIJJDMsICV4bW0yLCAleG1tMworCXBhbGlnbnIJJDMsICV4bW0xLCAleG1tMgorCW1vdmFwcwkleG1tMiwgKCVlZHgpCisJbW92YXBzCSV4bW0zLCAxNiglZWR4KQorCWxlYQkzMiglZWR4LCAlZWN4KSwgJWVkeAorCWxlYQkzMiglZWF4LCAlZWN4KSwgJWVheAorCVBPUCAoJWVkaSkKKwlCUkFOQ0hfVE9fSk1QVEJMX0VOVFJZKEwodGFibGVfNDhieXRlc19md2QpLCAlZWN4LCA0KQorCisJQ0ZJX1BVU0ggKCVlZGkpCisKKwkucDJhbGlnbiA0CitMKHNoXzNfbm9fcHJlZmV0Y2gpOgorCWxlYQktMzIoJWVjeCksICVlY3gKKwlsZWEJLTMoJWVheCksICVlYXgKKwl4b3IJJWVkaSwgJWVkaQorCisJLnAyYWxpZ24gNAorTChzaF8zX25vX3ByZWZldGNoX2xvb3ApOgorCW1vdmRxYQkxNiglZWF4LCAlZWRpKSwgJXhtbTIKKwlzdWIJJDMyLCAlZWN4CisJbW92ZHFhCTMyKCVlYXgsICVlZGkpLCAleG1tMworCW1vdmRxYQkleG1tMywgJXhtbTQKKwlwYWxpZ25yCSQzLCAleG1tMiwgJXhtbTMKKwlwYWxpZ25yCSQzLCAleG1tMSwgJXhtbTIKKwlsZWEJMzIoJWVkaSksICVlZGkKKwltb3ZkcWEJJXhtbTIsIC0zMiglZWR4LCAlZWRpKQorCW1vdmRxYQkleG1tMywgLTE2KCVlZHgsICVlZGkpCisKKwlqYglMKHNoXzNfZW5kX25vX3ByZWZldGNoX2xvb3ApCisKKwltb3ZkcWEJMTYoJWVheCwgJWVkaSksICV4bW0yCisJc3ViCSQzMiwgJWVjeAorCW1vdmRxYQkzMiglZWF4LCAlZWRpKSwgJXhtbTMKKwltb3ZkcWEJJXhtbTMsICV4bW0xCisJcGFsaWducgkkMywgJXhtbTIsICV4bW0zCisJcGFsaWducgkkMywgJXhtbTQsICV4bW0yCisJbGVhCTMyKCVlZGkpLCAlZWRpCisJbW92ZHFhCSV4bW0yLCAtMzIoJWVkeCwgJWVkaSkKKwltb3ZkcWEJJXhtbTMsIC0xNiglZWR4LCAlZWRpKQorCisJamFlCUwoc2hfM19ub19wcmVmZXRjaF9sb29wKQorCitMKHNoXzNfZW5kX25vX3ByZWZldGNoX2xvb3ApOgorCWxlYQkzMiglZWN4KSwgJWVjeAorCWFkZAklZWN4LCAlZWRpCisJYWRkCSVlZGksICVlZHgKKwlsZWEJMyglZWRpLCAlZWF4KSwgJWVheAorCVBPUAkoJWVkaSkKKwlCUkFOQ0hfVE9fSk1QVEJMX0VOVFJZKEwodGFibGVfNDhieXRlc19md2QpLCAlZWN4LCA0KQorCisJQ0ZJX1BVU0ggKCVlZGkpCisKKwkucDJhbGlnbiA0CitMKHNobF80KToKKyNpZm5kZWYgVVNFX0FTX01FTU1PVkUKKwltb3ZhcHMJLTQoJWVheCksICV4bW0xCisjZWxzZQorCW1vdmwJREVTVCs0KCVlc3ApLCAlZWRpCisJbW92YXBzCS00KCVlYXgpLCAleG1tMQorCW1vdmRxdQkleG1tMCwgKCVlZGkpCisjZW5kaWYKKyNpZmRlZiBEQVRBX0NBQ0hFX1NJWkVfSEFMRgorCWNtcAkkREFUQV9DQUNIRV9TSVpFX0hBTEYsICVlY3gKKyNlbHNlCisjIGlmIChkZWZpbmVkIFNIQVJFRCB8fCBkZWZpbmVkIF9fUElDX18pCisJU0VUVVBfUElDX1JFRyhieCkKKwlhZGQJJF9HTE9CQUxfT0ZGU0VUX1RBQkxFXywgJWVieAorCWNtcAlfX3g4Nl9kYXRhX2NhY2hlX3NpemVfaGFsZkBHT1RPRkYoJWVieCksICVlY3gKKyMgZWxzZQorCWNtcAlfX3g4Nl9kYXRhX2NhY2hlX3NpemVfaGFsZiwgJWVjeAorIyBlbmRpZgorI2VuZGlmCisJamIgTChzaF80X25vX3ByZWZldGNoKQorCisJbGVhCS02NCglZWN4KSwgJWVjeAorCisJLnAyYWxpZ24gNAorTChTaGw0TG9vcFN0YXJ0KToKKwlwcmVmZXRjaHQwIDB4MWMwKCVlYXgpCisJcHJlZmV0Y2h0MCAweDFjMCglZWR4KQorCW1vdmFwcwkxMiglZWF4KSwgJXhtbTIKKwltb3ZhcHMJMjgoJWVheCksICV4bW0zCisJbW92YXBzCTQ0KCVlYXgpLCAleG1tNAorCW1vdmFwcwk2MCglZWF4KSwgJXhtbTUKKwltb3ZhcHMJJXhtbTUsICV4bW03CisJcGFsaWducgkkNCwgJXhtbTQsICV4bW01CisJcGFsaWducgkkNCwgJXhtbTMsICV4bW00CisJbW92YXBzCSV4bW01LCA0OCglZWR4KQorCXBhbGlnbnIJJDQsICV4bW0yLCAleG1tMworCWxlYQk2NCglZWF4KSwgJWVheAorCXBhbGlnbnIJJDQsICV4bW0xLCAleG1tMgorCW1vdmFwcwkleG1tNCwgMzIoJWVkeCkKKwltb3ZhcHMJJXhtbTMsIDE2KCVlZHgpCisJbW92YXBzCSV4bW03LCAleG1tMQorCW1vdmFwcwkleG1tMiwgKCVlZHgpCisJbGVhCTY0KCVlZHgpLCAlZWR4CisJc3ViCSQ2NCwgJWVjeAorCWphCUwoU2hsNExvb3BTdGFydCkKKworTChTaGw0TG9vcExlYXZlKToKKwlhZGQJJDMyLCAlZWN4CisJamxlCUwoc2hsX2VuZF8wKQorCisJbW92YXBzCTEyKCVlYXgpLCAleG1tMgorCW1vdmFwcwkyOCglZWF4KSwgJXhtbTMKKwlwYWxpZ25yCSQ0LCAleG1tMiwgJXhtbTMKKwlwYWxpZ25yCSQ0LCAleG1tMSwgJXhtbTIKKwltb3ZhcHMJJXhtbTIsICglZWR4KQorCW1vdmFwcwkleG1tMywgMTYoJWVkeCkKKwlsZWEJMzIoJWVkeCwgJWVjeCksICVlZHgKKwlsZWEJMzIoJWVheCwgJWVjeCksICVlYXgKKwlQT1AgKCVlZGkpCisJQlJBTkNIX1RPX0pNUFRCTF9FTlRSWShMKHRhYmxlXzQ4Ynl0ZXNfZndkKSwgJWVjeCwgNCkKKworCUNGSV9QVVNIICglZWRpKQorCisJLnAyYWxpZ24gNAorTChzaF80X25vX3ByZWZldGNoKToKKwlsZWEJLTMyKCVlY3gpLCAlZWN4CisJbGVhCS00KCVlYXgpLCAlZWF4CisJeG9yCSVlZGksICVlZGkKKworCS5wMmFsaWduIDQKK0woc2hfNF9ub19wcmVmZXRjaF9sb29wKToKKwltb3ZkcWEJMTYoJWVheCwgJWVkaSksICV4bW0yCisJc3ViCSQzMiwgJWVjeAorCW1vdmRxYQkzMiglZWF4LCAlZWRpKSwgJXhtbTMKKwltb3ZkcWEJJXhtbTMsICV4bW00CisJcGFsaWducgkkNCwgJXhtbTIsICV4bW0zCisJcGFsaWducgkkNCwgJXhtbTEsICV4bW0yCisJbGVhCTMyKCVlZGkpLCAlZWRpCisJbW92ZHFhCSV4bW0yLCAtMzIoJWVkeCwgJWVkaSkKKwltb3ZkcWEJJXhtbTMsIC0xNiglZWR4LCAlZWRpKQorCisJamIJTChzaF80X2VuZF9ub19wcmVmZXRjaF9sb29wKQorCisJbW92ZHFhCTE2KCVlYXgsICVlZGkpLCAleG1tMgorCXN1YgkkMzIsICVlY3gKKwltb3ZkcWEJMzIoJWVheCwgJWVkaSksICV4bW0zCisJbW92ZHFhCSV4bW0zLCAleG1tMQorCXBhbGlnbnIJJDQsICV4bW0yLCAleG1tMworCXBhbGlnbnIJJDQsICV4bW00LCAleG1tMgorCWxlYQkzMiglZWRpKSwgJWVkaQorCW1vdmRxYQkleG1tMiwgLTMyKCVlZHgsICVlZGkpCisJbW92ZHFhCSV4bW0zLCAtMTYoJWVkeCwgJWVkaSkKKworCWphZQlMKHNoXzRfbm9fcHJlZmV0Y2hfbG9vcCkKKworTChzaF80X2VuZF9ub19wcmVmZXRjaF9sb29wKToKKwlsZWEJMzIoJWVjeCksICVlY3gKKwlhZGQJJWVjeCwgJWVkaQorCWFkZAklZWRpLCAlZWR4CisJbGVhCTQoJWVkaSwgJWVheCksICVlYXgKKwlQT1AJKCVlZGkpCisJQlJBTkNIX1RPX0pNUFRCTF9FTlRSWShMKHRhYmxlXzQ4Ynl0ZXNfZndkKSwgJWVjeCwgNCkKKworCUNGSV9QVVNIICglZWRpKQorCisJLnAyYWxpZ24gNAorTChzaGxfNSk6CisjaWZuZGVmIFVTRV9BU19NRU1NT1ZFCisJbW92YXBzCS01KCVlYXgpLCAleG1tMQorI2Vsc2UKKwltb3ZsCURFU1QrNCglZXNwKSwgJWVkaQorCW1vdmFwcwktNSglZWF4KSwgJXhtbTEKKwltb3ZkcXUJJXhtbTAsICglZWRpKQorI2VuZGlmCisjaWZkZWYgREFUQV9DQUNIRV9TSVpFX0hBTEYKKwljbXAJJERBVEFfQ0FDSEVfU0laRV9IQUxGLCAlZWN4CisjZWxzZQorIyBpZiAoZGVmaW5lZCBTSEFSRUQgfHwgZGVmaW5lZCBfX1BJQ19fKQorCVNFVFVQX1BJQ19SRUcoYngpCisJYWRkCSRfR0xPQkFMX09GRlNFVF9UQUJMRV8sICVlYngKKwljbXAJX194ODZfZGF0YV9jYWNoZV9zaXplX2hhbGZAR09UT0ZGKCVlYngpLCAlZWN4CisjIGVsc2UKKwljbXAJX194ODZfZGF0YV9jYWNoZV9zaXplX2hhbGYsICVlY3gKKyMgZW5kaWYKKyNlbmRpZgorCWpiIEwoc2hfNV9ub19wcmVmZXRjaCkKKworCWxlYQktNjQoJWVjeCksICVlY3gKKworCS5wMmFsaWduIDQKK0woU2hsNUxvb3BTdGFydCk6CisJcHJlZmV0Y2h0MCAweDFjMCglZWF4KQorCXByZWZldGNodDAgMHgxYzAoJWVkeCkKKwltb3ZhcHMJMTEoJWVheCksICV4bW0yCisJbW92YXBzCTI3KCVlYXgpLCAleG1tMworCW1vdmFwcwk0MyglZWF4KSwgJXhtbTQKKwltb3ZhcHMJNTkoJWVheCksICV4bW01CisJbW92YXBzCSV4bW01LCAleG1tNworCXBhbGlnbnIJJDUsICV4bW00LCAleG1tNQorCXBhbGlnbnIJJDUsICV4bW0zLCAleG1tNAorCW1vdmFwcwkleG1tNSwgNDgoJWVkeCkKKwlwYWxpZ25yCSQ1LCAleG1tMiwgJXhtbTMKKwlsZWEJNjQoJWVheCksICVlYXgKKwlwYWxpZ25yCSQ1LCAleG1tMSwgJXhtbTIKKwltb3ZhcHMJJXhtbTQsIDMyKCVlZHgpCisJbW92YXBzCSV4bW0zLCAxNiglZWR4KQorCW1vdmFwcwkleG1tNywgJXhtbTEKKwltb3ZhcHMJJXhtbTIsICglZWR4KQorCWxlYQk2NCglZWR4KSwgJWVkeAorCXN1YgkkNjQsICVlY3gKKwlqYQlMKFNobDVMb29wU3RhcnQpCisKK0woU2hsNUxvb3BMZWF2ZSk6CisJYWRkCSQzMiwgJWVjeAorCWpsZQlMKHNobF9lbmRfMCkKKworCW1vdmFwcwkxMSglZWF4KSwgJXhtbTIKKwltb3ZhcHMJMjcoJWVheCksICV4bW0zCisJcGFsaWducgkkNSwgJXhtbTIsICV4bW0zCisJcGFsaWducgkkNSwgJXhtbTEsICV4bW0yCisJbW92YXBzCSV4bW0yLCAoJWVkeCkKKwltb3ZhcHMJJXhtbTMsIDE2KCVlZHgpCisJbGVhCTMyKCVlZHgsICVlY3gpLCAlZWR4CisJbGVhCTMyKCVlYXgsICVlY3gpLCAlZWF4CisJUE9QICglZWRpKQorCUJSQU5DSF9UT19KTVBUQkxfRU5UUlkoTCh0YWJsZV80OGJ5dGVzX2Z3ZCksICVlY3gsIDQpCisKKwlDRklfUFVTSCAoJWVkaSkKKworCS5wMmFsaWduIDQKK0woc2hfNV9ub19wcmVmZXRjaCk6CisJbGVhCS0zMiglZWN4KSwgJWVjeAorCWxlYQktNSglZWF4KSwgJWVheAorCXhvcgklZWRpLCAlZWRpCisKKwkucDJhbGlnbiA0CitMKHNoXzVfbm9fcHJlZmV0Y2hfbG9vcCk6CisJbW92ZHFhCTE2KCVlYXgsICVlZGkpLCAleG1tMgorCXN1YgkkMzIsICVlY3gKKwltb3ZkcWEJMzIoJWVheCwgJWVkaSksICV4bW0zCisJbW92ZHFhCSV4bW0zLCAleG1tNAorCXBhbGlnbnIJJDUsICV4bW0yLCAleG1tMworCXBhbGlnbnIJJDUsICV4bW0xLCAleG1tMgorCWxlYQkzMiglZWRpKSwgJWVkaQorCW1vdmRxYQkleG1tMiwgLTMyKCVlZHgsICVlZGkpCisJbW92ZHFhCSV4bW0zLCAtMTYoJWVkeCwgJWVkaSkKKworCWpiCUwoc2hfNV9lbmRfbm9fcHJlZmV0Y2hfbG9vcCkKKworCW1vdmRxYQkxNiglZWF4LCAlZWRpKSwgJXhtbTIKKwlzdWIJJDMyLCAlZWN4CisJbW92ZHFhCTMyKCVlYXgsICVlZGkpLCAleG1tMworCW1vdmRxYQkleG1tMywgJXhtbTEKKwlwYWxpZ25yCSQ1LCAleG1tMiwgJXhtbTMKKwlwYWxpZ25yCSQ1LCAleG1tNCwgJXhtbTIKKwlsZWEJMzIoJWVkaSksICVlZGkKKwltb3ZkcWEJJXhtbTIsIC0zMiglZWR4LCAlZWRpKQorCW1vdmRxYQkleG1tMywgLTE2KCVlZHgsICVlZGkpCisKKwlqYWUJTChzaF81X25vX3ByZWZldGNoX2xvb3ApCisKK0woc2hfNV9lbmRfbm9fcHJlZmV0Y2hfbG9vcCk6CisJbGVhCTMyKCVlY3gpLCAlZWN4CisJYWRkCSVlY3gsICVlZGkKKwlhZGQJJWVkaSwgJWVkeAorCWxlYQk1KCVlZGksICVlYXgpLCAlZWF4CisJUE9QCSglZWRpKQorCUJSQU5DSF9UT19KTVBUQkxfRU5UUlkoTCh0YWJsZV80OGJ5dGVzX2Z3ZCksICVlY3gsIDQpCisKKwlDRklfUFVTSCAoJWVkaSkKKworCS5wMmFsaWduIDQKK0woc2hsXzYpOgorI2lmbmRlZiBVU0VfQVNfTUVNTU9WRQorCW1vdmFwcwktNiglZWF4KSwgJXhtbTEKKyNlbHNlCisJbW92bAlERVNUKzQoJWVzcCksICVlZGkKKwltb3ZhcHMJLTYoJWVheCksICV4bW0xCisJbW92ZHF1CSV4bW0wLCAoJWVkaSkKKyNlbmRpZgorI2lmZGVmIERBVEFfQ0FDSEVfU0laRV9IQUxGCisJY21wCSREQVRBX0NBQ0hFX1NJWkVfSEFMRiwgJWVjeAorI2Vsc2UKKyMgaWYgKGRlZmluZWQgU0hBUkVEIHx8IGRlZmluZWQgX19QSUNfXykKKwlTRVRVUF9QSUNfUkVHKGJ4KQorCWFkZAkkX0dMT0JBTF9PRkZTRVRfVEFCTEVfLCAlZWJ4CisJY21wCV9feDg2X2RhdGFfY2FjaGVfc2l6ZV9oYWxmQEdPVE9GRiglZWJ4KSwgJWVjeAorIyBlbHNlCisJY21wCV9feDg2X2RhdGFfY2FjaGVfc2l6ZV9oYWxmLCAlZWN4CisjIGVuZGlmCisjZW5kaWYKKwlqYiBMKHNoXzZfbm9fcHJlZmV0Y2gpCisKKwlsZWEJLTY0KCVlY3gpLCAlZWN4CisKKwkucDJhbGlnbiA0CitMKFNobDZMb29wU3RhcnQpOgorCXByZWZldGNodDAgMHgxYzAoJWVheCkKKwlwcmVmZXRjaHQwIDB4MWMwKCVlZHgpCisJbW92YXBzCTEwKCVlYXgpLCAleG1tMgorCW1vdmFwcwkyNiglZWF4KSwgJXhtbTMKKwltb3ZhcHMJNDIoJWVheCksICV4bW00CisJbW92YXBzCTU4KCVlYXgpLCAleG1tNQorCW1vdmFwcwkleG1tNSwgJXhtbTcKKwlwYWxpZ25yCSQ2LCAleG1tNCwgJXhtbTUKKwlwYWxpZ25yCSQ2LCAleG1tMywgJXhtbTQKKwltb3ZhcHMJJXhtbTUsIDQ4KCVlZHgpCisJcGFsaWducgkkNiwgJXhtbTIsICV4bW0zCisJbGVhCTY0KCVlYXgpLCAlZWF4CisJcGFsaWducgkkNiwgJXhtbTEsICV4bW0yCisJbW92YXBzCSV4bW00LCAzMiglZWR4KQorCW1vdmFwcwkleG1tMywgMTYoJWVkeCkKKwltb3ZhcHMJJXhtbTcsICV4bW0xCisJbW92YXBzCSV4bW0yLCAoJWVkeCkKKwlsZWEJNjQoJWVkeCksICVlZHgKKwlzdWIJJDY0LCAlZWN4CisJamEJTChTaGw2TG9vcFN0YXJ0KQorCitMKFNobDZMb29wTGVhdmUpOgorCWFkZAkkMzIsICVlY3gKKwlqbGUJTChzaGxfZW5kXzApCisKKwltb3ZhcHMJMTAoJWVheCksICV4bW0yCisJbW92YXBzCTI2KCVlYXgpLCAleG1tMworCXBhbGlnbnIJJDYsICV4bW0yLCAleG1tMworCXBhbGlnbnIJJDYsICV4bW0xLCAleG1tMgorCW1vdmFwcwkleG1tMiwgKCVlZHgpCisJbW92YXBzCSV4bW0zLCAxNiglZWR4KQorCWxlYQkzMiglZWR4LCAlZWN4KSwgJWVkeAorCWxlYQkzMiglZWF4LCAlZWN4KSwgJWVheAorCVBPUCAoJWVkaSkKKwlCUkFOQ0hfVE9fSk1QVEJMX0VOVFJZKEwodGFibGVfNDhieXRlc19md2QpLCAlZWN4LCA0KQorCisJQ0ZJX1BVU0ggKCVlZGkpCisKKwkucDJhbGlnbiA0CitMKHNoXzZfbm9fcHJlZmV0Y2gpOgorCWxlYQktMzIoJWVjeCksICVlY3gKKwlsZWEJLTYoJWVheCksICVlYXgKKwl4b3IJJWVkaSwgJWVkaQorCisJLnAyYWxpZ24gNAorTChzaF82X25vX3ByZWZldGNoX2xvb3ApOgorCW1vdmRxYQkxNiglZWF4LCAlZWRpKSwgJXhtbTIKKwlzdWIJJDMyLCAlZWN4CisJbW92ZHFhCTMyKCVlYXgsICVlZGkpLCAleG1tMworCW1vdmRxYQkleG1tMywgJXhtbTQKKwlwYWxpZ25yCSQ2LCAleG1tMiwgJXhtbTMKKwlwYWxpZ25yCSQ2LCAleG1tMSwgJXhtbTIKKwlsZWEJMzIoJWVkaSksICVlZGkKKwltb3ZkcWEJJXhtbTIsIC0zMiglZWR4LCAlZWRpKQorCW1vdmRxYQkleG1tMywgLTE2KCVlZHgsICVlZGkpCisKKwlqYglMKHNoXzZfZW5kX25vX3ByZWZldGNoX2xvb3ApCisKKwltb3ZkcWEJMTYoJWVheCwgJWVkaSksICV4bW0yCisJc3ViCSQzMiwgJWVjeAorCW1vdmRxYQkzMiglZWF4LCAlZWRpKSwgJXhtbTMKKwltb3ZkcWEJJXhtbTMsICV4bW0xCisJcGFsaWducgkkNiwgJXhtbTIsICV4bW0zCisJcGFsaWducgkkNiwgJXhtbTQsICV4bW0yCisJbGVhCTMyKCVlZGkpLCAlZWRpCisJbW92ZHFhCSV4bW0yLCAtMzIoJWVkeCwgJWVkaSkKKwltb3ZkcWEJJXhtbTMsIC0xNiglZWR4LCAlZWRpKQorCisJamFlCUwoc2hfNl9ub19wcmVmZXRjaF9sb29wKQorCitMKHNoXzZfZW5kX25vX3ByZWZldGNoX2xvb3ApOgorCWxlYQkzMiglZWN4KSwgJWVjeAorCWFkZAklZWN4LCAlZWRpCisJYWRkCSVlZGksICVlZHgKKwlsZWEJNiglZWRpLCAlZWF4KSwgJWVheAorCVBPUAkoJWVkaSkKKwlCUkFOQ0hfVE9fSk1QVEJMX0VOVFJZKEwodGFibGVfNDhieXRlc19md2QpLCAlZWN4LCA0KQorCisJQ0ZJX1BVU0ggKCVlZGkpCisKKwkucDJhbGlnbiA0CitMKHNobF83KToKKyNpZm5kZWYgVVNFX0FTX01FTU1PVkUKKwltb3ZhcHMJLTcoJWVheCksICV4bW0xCisjZWxzZQorCW1vdmwJREVTVCs0KCVlc3ApLCAlZWRpCisJbW92YXBzCS03KCVlYXgpLCAleG1tMQorCW1vdmRxdQkleG1tMCwgKCVlZGkpCisjZW5kaWYKKyNpZmRlZiBEQVRBX0NBQ0hFX1NJWkVfSEFMRgorCWNtcAkkREFUQV9DQUNIRV9TSVpFX0hBTEYsICVlY3gKKyNlbHNlCisjIGlmIChkZWZpbmVkIFNIQVJFRCB8fCBkZWZpbmVkIF9fUElDX18pCisJU0VUVVBfUElDX1JFRyhieCkKKwlhZGQJJF9HTE9CQUxfT0ZGU0VUX1RBQkxFXywgJWVieAorCWNtcAlfX3g4Nl9kYXRhX2NhY2hlX3NpemVfaGFsZkBHT1RPRkYoJWVieCksICVlY3gKKyMgZWxzZQorCWNtcAlfX3g4Nl9kYXRhX2NhY2hlX3NpemVfaGFsZiwgJWVjeAorIyBlbmRpZgorI2VuZGlmCisJamIgTChzaF83X25vX3ByZWZldGNoKQorCisJbGVhCS02NCglZWN4KSwgJWVjeAorCisJLnAyYWxpZ24gNAorTChTaGw3TG9vcFN0YXJ0KToKKwlwcmVmZXRjaHQwIDB4MWMwKCVlYXgpCisJcHJlZmV0Y2h0MCAweDFjMCglZWR4KQorCW1vdmFwcwk5KCVlYXgpLCAleG1tMgorCW1vdmFwcwkyNSglZWF4KSwgJXhtbTMKKwltb3ZhcHMJNDEoJWVheCksICV4bW00CisJbW92YXBzCTU3KCVlYXgpLCAleG1tNQorCW1vdmFwcwkleG1tNSwgJXhtbTcKKwlwYWxpZ25yCSQ3LCAleG1tNCwgJXhtbTUKKwlwYWxpZ25yCSQ3LCAleG1tMywgJXhtbTQKKwltb3ZhcHMJJXhtbTUsIDQ4KCVlZHgpCisJcGFsaWducgkkNywgJXhtbTIsICV4bW0zCisJbGVhCTY0KCVlYXgpLCAlZWF4CisJcGFsaWducgkkNywgJXhtbTEsICV4bW0yCisJbW92YXBzCSV4bW00LCAzMiglZWR4KQorCW1vdmFwcwkleG1tMywgMTYoJWVkeCkKKwltb3ZhcHMJJXhtbTcsICV4bW0xCisJbW92YXBzCSV4bW0yLCAoJWVkeCkKKwlsZWEJNjQoJWVkeCksICVlZHgKKwlzdWIJJDY0LCAlZWN4CisJamEJTChTaGw3TG9vcFN0YXJ0KQorCitMKFNobDdMb29wTGVhdmUpOgorCWFkZAkkMzIsICVlY3gKKwlqbGUJTChzaGxfZW5kXzApCisKKwltb3ZhcHMJOSglZWF4KSwgJXhtbTIKKwltb3ZhcHMJMjUoJWVheCksICV4bW0zCisJcGFsaWducgkkNywgJXhtbTIsICV4bW0zCisJcGFsaWducgkkNywgJXhtbTEsICV4bW0yCisJbW92YXBzCSV4bW0yLCAoJWVkeCkKKwltb3ZhcHMJJXhtbTMsIDE2KCVlZHgpCisJbGVhCTMyKCVlZHgsICVlY3gpLCAlZWR4CisJbGVhCTMyKCVlYXgsICVlY3gpLCAlZWF4CisJUE9QICglZWRpKQorCUJSQU5DSF9UT19KTVBUQkxfRU5UUlkoTCh0YWJsZV80OGJ5dGVzX2Z3ZCksICVlY3gsIDQpCisKKwlDRklfUFVTSCAoJWVkaSkKKworCS5wMmFsaWduIDQKK0woc2hfN19ub19wcmVmZXRjaCk6CisJbGVhCS0zMiglZWN4KSwgJWVjeAorCWxlYQktNyglZWF4KSwgJWVheAorCXhvcgklZWRpLCAlZWRpCisKKwkucDJhbGlnbiA0CitMKHNoXzdfbm9fcHJlZmV0Y2hfbG9vcCk6CisJbW92ZHFhCTE2KCVlYXgsICVlZGkpLCAleG1tMgorCXN1YgkkMzIsICVlY3gKKwltb3ZkcWEJMzIoJWVheCwgJWVkaSksICV4bW0zCisJbW92ZHFhCSV4bW0zLCAleG1tNAorCXBhbGlnbnIJJDcsICV4bW0yLCAleG1tMworCXBhbGlnbnIJJDcsICV4bW0xLCAleG1tMgorCWxlYQkzMiglZWRpKSwgJWVkaQorCW1vdmRxYQkleG1tMiwgLTMyKCVlZHgsICVlZGkpCisJbW92ZHFhCSV4bW0zLCAtMTYoJWVkeCwgJWVkaSkKKwlqYglMKHNoXzdfZW5kX25vX3ByZWZldGNoX2xvb3ApCisKKwltb3ZkcWEJMTYoJWVheCwgJWVkaSksICV4bW0yCisJc3ViCSQzMiwgJWVjeAorCW1vdmRxYQkzMiglZWF4LCAlZWRpKSwgJXhtbTMKKwltb3ZkcWEJJXhtbTMsICV4bW0xCisJcGFsaWducgkkNywgJXhtbTIsICV4bW0zCisJcGFsaWducgkkNywgJXhtbTQsICV4bW0yCisJbGVhCTMyKCVlZGkpLCAlZWRpCisJbW92ZHFhCSV4bW0yLCAtMzIoJWVkeCwgJWVkaSkKKwltb3ZkcWEJJXhtbTMsIC0xNiglZWR4LCAlZWRpKQorCWphZQlMKHNoXzdfbm9fcHJlZmV0Y2hfbG9vcCkKKworTChzaF83X2VuZF9ub19wcmVmZXRjaF9sb29wKToKKwlsZWEJMzIoJWVjeCksICVlY3gKKwlhZGQJJWVjeCwgJWVkaQorCWFkZAklZWRpLCAlZWR4CisJbGVhCTcoJWVkaSwgJWVheCksICVlYXgKKwlQT1AJKCVlZGkpCisJQlJBTkNIX1RPX0pNUFRCTF9FTlRSWShMKHRhYmxlXzQ4Ynl0ZXNfZndkKSwgJWVjeCwgNCkKKworCUNGSV9QVVNIICglZWRpKQorCisJLnAyYWxpZ24gNAorTChzaGxfOCk6CisjaWZuZGVmIFVTRV9BU19NRU1NT1ZFCisJbW92YXBzCS04KCVlYXgpLCAleG1tMQorI2Vsc2UKKwltb3ZsCURFU1QrNCglZXNwKSwgJWVkaQorCW1vdmFwcwktOCglZWF4KSwgJXhtbTEKKwltb3ZkcXUJJXhtbTAsICglZWRpKQorI2VuZGlmCisjaWZkZWYgREFUQV9DQUNIRV9TSVpFX0hBTEYKKwljbXAJJERBVEFfQ0FDSEVfU0laRV9IQUxGLCAlZWN4CisjZWxzZQorIyBpZiAoZGVmaW5lZCBTSEFSRUQgfHwgZGVmaW5lZCBfX1BJQ19fKQorCVNFVFVQX1BJQ19SRUcoYngpCisJYWRkCSRfR0xPQkFMX09GRlNFVF9UQUJMRV8sICVlYngKKwljbXAJX194ODZfZGF0YV9jYWNoZV9zaXplX2hhbGZAR09UT0ZGKCVlYngpLCAlZWN4CisjIGVsc2UKKwljbXAJX194ODZfZGF0YV9jYWNoZV9zaXplX2hhbGYsICVlY3gKKyMgZW5kaWYKKyNlbmRpZgorCWpiIEwoc2hfOF9ub19wcmVmZXRjaCkKKworCWxlYQktNjQoJWVjeCksICVlY3gKKworCS5wMmFsaWduIDQKK0woU2hsOExvb3BTdGFydCk6CisJcHJlZmV0Y2h0MCAweDFjMCglZWF4KQorCXByZWZldGNodDAgMHgxYzAoJWVkeCkKKwltb3ZhcHMJOCglZWF4KSwgJXhtbTIKKwltb3ZhcHMJMjQoJWVheCksICV4bW0zCisJbW92YXBzCTQwKCVlYXgpLCAleG1tNAorCW1vdmFwcwk1NiglZWF4KSwgJXhtbTUKKwltb3ZhcHMJJXhtbTUsICV4bW03CisJcGFsaWducgkkOCwgJXhtbTQsICV4bW01CisJcGFsaWducgkkOCwgJXhtbTMsICV4bW00CisJbW92YXBzCSV4bW01LCA0OCglZWR4KQorCXBhbGlnbnIJJDgsICV4bW0yLCAleG1tMworCWxlYQk2NCglZWF4KSwgJWVheAorCXBhbGlnbnIJJDgsICV4bW0xLCAleG1tMgorCW1vdmFwcwkleG1tNCwgMzIoJWVkeCkKKwltb3ZhcHMJJXhtbTMsIDE2KCVlZHgpCisJbW92YXBzCSV4bW03LCAleG1tMQorCW1vdmFwcwkleG1tMiwgKCVlZHgpCisJbGVhCTY0KCVlZHgpLCAlZWR4CisJc3ViCSQ2NCwgJWVjeAorCWphCUwoU2hsOExvb3BTdGFydCkKKworTChMb29wTGVhdmU4KToKKwlhZGQJJDMyLCAlZWN4CisJamxlCUwoc2hsX2VuZF8wKQorCisJbW92YXBzCTgoJWVheCksICV4bW0yCisJbW92YXBzCTI0KCVlYXgpLCAleG1tMworCXBhbGlnbnIJJDgsICV4bW0yLCAleG1tMworCXBhbGlnbnIJJDgsICV4bW0xLCAleG1tMgorCW1vdmFwcwkleG1tMiwgKCVlZHgpCisJbW92YXBzCSV4bW0zLCAxNiglZWR4KQorCWxlYQkzMiglZWR4LCAlZWN4KSwgJWVkeAorCWxlYQkzMiglZWF4LCAlZWN4KSwgJWVheAorCVBPUCAoJWVkaSkKKwlCUkFOQ0hfVE9fSk1QVEJMX0VOVFJZKEwodGFibGVfNDhieXRlc19md2QpLCAlZWN4LCA0KQorCisJQ0ZJX1BVU0ggKCVlZGkpCisKKwkucDJhbGlnbiA0CitMKHNoXzhfbm9fcHJlZmV0Y2gpOgorCWxlYQktMzIoJWVjeCksICVlY3gKKwlsZWEJLTgoJWVheCksICVlYXgKKwl4b3IJJWVkaSwgJWVkaQorCisJLnAyYWxpZ24gNAorTChzaF84X25vX3ByZWZldGNoX2xvb3ApOgorCW1vdmRxYQkxNiglZWF4LCAlZWRpKSwgJXhtbTIKKwlzdWIJJDMyLCAlZWN4CisJbW92ZHFhCTMyKCVlYXgsICVlZGkpLCAleG1tMworCW1vdmRxYQkleG1tMywgJXhtbTQKKwlwYWxpZ25yCSQ4LCAleG1tMiwgJXhtbTMKKwlwYWxpZ25yCSQ4LCAleG1tMSwgJXhtbTIKKwlsZWEJMzIoJWVkaSksICVlZGkKKwltb3ZkcWEJJXhtbTIsIC0zMiglZWR4LCAlZWRpKQorCW1vdmRxYQkleG1tMywgLTE2KCVlZHgsICVlZGkpCisJamIJTChzaF84X2VuZF9ub19wcmVmZXRjaF9sb29wKQorCisJbW92ZHFhCTE2KCVlYXgsICVlZGkpLCAleG1tMgorCXN1YgkkMzIsICVlY3gKKwltb3ZkcWEJMzIoJWVheCwgJWVkaSksICV4bW0zCisJbW92ZHFhCSV4bW0zLCAleG1tMQorCXBhbGlnbnIJJDgsICV4bW0yLCAleG1tMworCXBhbGlnbnIJJDgsICV4bW00LCAleG1tMgorCWxlYQkzMiglZWRpKSwgJWVkaQorCW1vdmRxYQkleG1tMiwgLTMyKCVlZHgsICVlZGkpCisJbW92ZHFhCSV4bW0zLCAtMTYoJWVkeCwgJWVkaSkKKwlqYWUJTChzaF84X25vX3ByZWZldGNoX2xvb3ApCisKK0woc2hfOF9lbmRfbm9fcHJlZmV0Y2hfbG9vcCk6CisJbGVhCTMyKCVlY3gpLCAlZWN4CisJYWRkCSVlY3gsICVlZGkKKwlhZGQJJWVkaSwgJWVkeAorCWxlYQk4KCVlZGksICVlYXgpLCAlZWF4CisJUE9QCSglZWRpKQorCUJSQU5DSF9UT19KTVBUQkxfRU5UUlkoTCh0YWJsZV80OGJ5dGVzX2Z3ZCksICVlY3gsIDQpCisKKwlDRklfUFVTSCAoJWVkaSkKKworCS5wMmFsaWduIDQKK0woc2hsXzkpOgorI2lmbmRlZiBVU0VfQVNfTUVNTU9WRQorCW1vdmFwcwktOSglZWF4KSwgJXhtbTEKKyNlbHNlCisJbW92bAlERVNUKzQoJWVzcCksICVlZGkKKwltb3ZhcHMJLTkoJWVheCksICV4bW0xCisJbW92ZHF1CSV4bW0wLCAoJWVkaSkKKyNlbmRpZgorI2lmZGVmIERBVEFfQ0FDSEVfU0laRV9IQUxGCisJY21wCSREQVRBX0NBQ0hFX1NJWkVfSEFMRiwgJWVjeAorI2Vsc2UKKyMgaWYgKGRlZmluZWQgU0hBUkVEIHx8IGRlZmluZWQgX19QSUNfXykKKwlTRVRVUF9QSUNfUkVHKGJ4KQorCWFkZAkkX0dMT0JBTF9PRkZTRVRfVEFCTEVfLCAlZWJ4CisJY21wCV9feDg2X2RhdGFfY2FjaGVfc2l6ZV9oYWxmQEdPVE9GRiglZWJ4KSwgJWVjeAorIyBlbHNlCisJY21wCV9feDg2X2RhdGFfY2FjaGVfc2l6ZV9oYWxmLCAlZWN4CisjIGVuZGlmCisjZW5kaWYKKwlqYiBMKHNoXzlfbm9fcHJlZmV0Y2gpCisKKwlsZWEJLTY0KCVlY3gpLCAlZWN4CisKKwkucDJhbGlnbiA0CitMKFNobDlMb29wU3RhcnQpOgorCXByZWZldGNodDAgMHgxYzAoJWVheCkKKwlwcmVmZXRjaHQwIDB4MWMwKCVlZHgpCisJbW92YXBzCTcoJWVheCksICV4bW0yCisJbW92YXBzCTIzKCVlYXgpLCAleG1tMworCW1vdmFwcwkzOSglZWF4KSwgJXhtbTQKKwltb3ZhcHMJNTUoJWVheCksICV4bW01CisJbW92YXBzCSV4bW01LCAleG1tNworCXBhbGlnbnIJJDksICV4bW00LCAleG1tNQorCXBhbGlnbnIJJDksICV4bW0zLCAleG1tNAorCW1vdmFwcwkleG1tNSwgNDgoJWVkeCkKKwlwYWxpZ25yCSQ5LCAleG1tMiwgJXhtbTMKKwlsZWEJNjQoJWVheCksICVlYXgKKwlwYWxpZ25yCSQ5LCAleG1tMSwgJXhtbTIKKwltb3ZhcHMJJXhtbTQsIDMyKCVlZHgpCisJbW92YXBzCSV4bW0zLCAxNiglZWR4KQorCW1vdmFwcwkleG1tNywgJXhtbTEKKwltb3ZhcHMJJXhtbTIsICglZWR4KQorCWxlYQk2NCglZWR4KSwgJWVkeAorCXN1YgkkNjQsICVlY3gKKwlqYQlMKFNobDlMb29wU3RhcnQpCisKK0woU2hsOUxvb3BMZWF2ZSk6CisJYWRkCSQzMiwgJWVjeAorCWpsZQlMKHNobF9lbmRfMCkKKworCW1vdmFwcwk3KCVlYXgpLCAleG1tMgorCW1vdmFwcwkyMyglZWF4KSwgJXhtbTMKKwlwYWxpZ25yCSQ5LCAleG1tMiwgJXhtbTMKKwlwYWxpZ25yCSQ5LCAleG1tMSwgJXhtbTIKKworCW1vdmFwcwkleG1tMiwgKCVlZHgpCisJbW92YXBzCSV4bW0zLCAxNiglZWR4KQorCWxlYQkzMiglZWR4LCAlZWN4KSwgJWVkeAorCWxlYQkzMiglZWF4LCAlZWN4KSwgJWVheAorCVBPUCAoJWVkaSkKKwlCUkFOQ0hfVE9fSk1QVEJMX0VOVFJZKEwodGFibGVfNDhieXRlc19md2QpLCAlZWN4LCA0KQorCisJQ0ZJX1BVU0ggKCVlZGkpCisKKwkucDJhbGlnbiA0CitMKHNoXzlfbm9fcHJlZmV0Y2gpOgorCWxlYQktMzIoJWVjeCksICVlY3gKKwlsZWEJLTkoJWVheCksICVlYXgKKwl4b3IJJWVkaSwgJWVkaQorCisJLnAyYWxpZ24gNAorTChzaF85X25vX3ByZWZldGNoX2xvb3ApOgorCW1vdmRxYQkxNiglZWF4LCAlZWRpKSwgJXhtbTIKKwlzdWIJJDMyLCAlZWN4CisJbW92ZHFhCTMyKCVlYXgsICVlZGkpLCAleG1tMworCW1vdmRxYQkleG1tMywgJXhtbTQKKwlwYWxpZ25yCSQ5LCAleG1tMiwgJXhtbTMKKwlwYWxpZ25yCSQ5LCAleG1tMSwgJXhtbTIKKwlsZWEJMzIoJWVkaSksICVlZGkKKwltb3ZkcWEJJXhtbTIsIC0zMiglZWR4LCAlZWRpKQorCW1vdmRxYQkleG1tMywgLTE2KCVlZHgsICVlZGkpCisJamIJTChzaF85X2VuZF9ub19wcmVmZXRjaF9sb29wKQorCisJbW92ZHFhCTE2KCVlYXgsICVlZGkpLCAleG1tMgorCXN1YgkkMzIsICVlY3gKKwltb3ZkcWEJMzIoJWVheCwgJWVkaSksICV4bW0zCisJbW92ZHFhCSV4bW0zLCAleG1tMQorCXBhbGlnbnIJJDksICV4bW0yLCAleG1tMworCXBhbGlnbnIJJDksICV4bW00LCAleG1tMgorCWxlYQkzMiglZWRpKSwgJWVkaQorCW1vdmRxYQkleG1tMiwgLTMyKCVlZHgsICVlZGkpCisJbW92ZHFhCSV4bW0zLCAtMTYoJWVkeCwgJWVkaSkKKwlqYWUJTChzaF85X25vX3ByZWZldGNoX2xvb3ApCisKK0woc2hfOV9lbmRfbm9fcHJlZmV0Y2hfbG9vcCk6CisJbGVhCTMyKCVlY3gpLCAlZWN4CisJYWRkCSVlY3gsICVlZGkKKwlhZGQJJWVkaSwgJWVkeAorCWxlYQk5KCVlZGksICVlYXgpLCAlZWF4CisJUE9QCSglZWRpKQorCUJSQU5DSF9UT19KTVBUQkxfRU5UUlkoTCh0YWJsZV80OGJ5dGVzX2Z3ZCksICVlY3gsIDQpCisKKwlDRklfUFVTSCAoJWVkaSkKKworCS5wMmFsaWduIDQKK0woc2hsXzEwKToKKyNpZm5kZWYgVVNFX0FTX01FTU1PVkUKKwltb3ZhcHMJLTEwKCVlYXgpLCAleG1tMQorI2Vsc2UKKwltb3ZsCURFU1QrNCglZXNwKSwgJWVkaQorCW1vdmFwcwktMTAoJWVheCksICV4bW0xCisJbW92ZHF1CSV4bW0wLCAoJWVkaSkKKyNlbmRpZgorI2lmZGVmIERBVEFfQ0FDSEVfU0laRV9IQUxGCisJY21wCSREQVRBX0NBQ0hFX1NJWkVfSEFMRiwgJWVjeAorI2Vsc2UKKyMgaWYgKGRlZmluZWQgU0hBUkVEIHx8IGRlZmluZWQgX19QSUNfXykKKwlTRVRVUF9QSUNfUkVHKGJ4KQorCWFkZAkkX0dMT0JBTF9PRkZTRVRfVEFCTEVfLCAlZWJ4CisJY21wCV9feDg2X2RhdGFfY2FjaGVfc2l6ZV9oYWxmQEdPVE9GRiglZWJ4KSwgJWVjeAorIyBlbHNlCisJY21wCV9feDg2X2RhdGFfY2FjaGVfc2l6ZV9oYWxmLCAlZWN4CisjIGVuZGlmCisjZW5kaWYKKwlqYiBMKHNoXzEwX25vX3ByZWZldGNoKQorCisJbGVhCS02NCglZWN4KSwgJWVjeAorCisJLnAyYWxpZ24gNAorTChTaGwxMExvb3BTdGFydCk6CisJcHJlZmV0Y2h0MCAweDFjMCglZWF4KQorCXByZWZldGNodDAgMHgxYzAoJWVkeCkKKwltb3ZhcHMJNiglZWF4KSwgJXhtbTIKKwltb3ZhcHMJMjIoJWVheCksICV4bW0zCisJbW92YXBzCTM4KCVlYXgpLCAleG1tNAorCW1vdmFwcwk1NCglZWF4KSwgJXhtbTUKKwltb3ZhcHMJJXhtbTUsICV4bW03CisJcGFsaWducgkkMTAsICV4bW00LCAleG1tNQorCXBhbGlnbnIJJDEwLCAleG1tMywgJXhtbTQKKwltb3ZhcHMJJXhtbTUsIDQ4KCVlZHgpCisJcGFsaWducgkkMTAsICV4bW0yLCAleG1tMworCWxlYQk2NCglZWF4KSwgJWVheAorCXBhbGlnbnIJJDEwLCAleG1tMSwgJXhtbTIKKwltb3ZhcHMJJXhtbTQsIDMyKCVlZHgpCisJbW92YXBzCSV4bW0zLCAxNiglZWR4KQorCW1vdmFwcwkleG1tNywgJXhtbTEKKwltb3ZhcHMJJXhtbTIsICglZWR4KQorCWxlYQk2NCglZWR4KSwgJWVkeAorCXN1YgkkNjQsICVlY3gKKwlqYQlMKFNobDEwTG9vcFN0YXJ0KQorCitMKFNobDEwTG9vcExlYXZlKToKKwlhZGQJJDMyLCAlZWN4CisJamxlCUwoc2hsX2VuZF8wKQorCisJbW92YXBzCTYoJWVheCksICV4bW0yCisJbW92YXBzCTIyKCVlYXgpLCAleG1tMworCXBhbGlnbnIJJDEwLCAleG1tMiwgJXhtbTMKKwlwYWxpZ25yCSQxMCwgJXhtbTEsICV4bW0yCisKKwltb3ZhcHMJJXhtbTIsICglZWR4KQorCW1vdmFwcwkleG1tMywgMTYoJWVkeCkKKwlsZWEJMzIoJWVkeCwgJWVjeCksICVlZHgKKwlsZWEJMzIoJWVheCwgJWVjeCksICVlYXgKKwlQT1AgKCVlZGkpCisJQlJBTkNIX1RPX0pNUFRCTF9FTlRSWShMKHRhYmxlXzQ4Ynl0ZXNfZndkKSwgJWVjeCwgNCkKKworCUNGSV9QVVNIICglZWRpKQorCisJLnAyYWxpZ24gNAorTChzaF8xMF9ub19wcmVmZXRjaCk6CisJbGVhCS0zMiglZWN4KSwgJWVjeAorCWxlYQktMTAoJWVheCksICVlYXgKKwl4b3IJJWVkaSwgJWVkaQorCisJLnAyYWxpZ24gNAorTChzaF8xMF9ub19wcmVmZXRjaF9sb29wKToKKwltb3ZkcWEJMTYoJWVheCwgJWVkaSksICV4bW0yCisJc3ViCSQzMiwgJWVjeAorCW1vdmRxYQkzMiglZWF4LCAlZWRpKSwgJXhtbTMKKwltb3ZkcWEJJXhtbTMsICV4bW00CisJcGFsaWducgkkMTAsICV4bW0yLCAleG1tMworCXBhbGlnbnIJJDEwLCAleG1tMSwgJXhtbTIKKwlsZWEJMzIoJWVkaSksICVlZGkKKwltb3ZkcWEJJXhtbTIsIC0zMiglZWR4LCAlZWRpKQorCW1vdmRxYQkleG1tMywgLTE2KCVlZHgsICVlZGkpCisJamIJTChzaF8xMF9lbmRfbm9fcHJlZmV0Y2hfbG9vcCkKKworCW1vdmRxYQkxNiglZWF4LCAlZWRpKSwgJXhtbTIKKwlzdWIJJDMyLCAlZWN4CisJbW92ZHFhCTMyKCVlYXgsICVlZGkpLCAleG1tMworCW1vdmRxYQkleG1tMywgJXhtbTEKKwlwYWxpZ25yCSQxMCwgJXhtbTIsICV4bW0zCisJcGFsaWducgkkMTAsICV4bW00LCAleG1tMgorCWxlYQkzMiglZWRpKSwgJWVkaQorCW1vdmRxYQkleG1tMiwgLTMyKCVlZHgsICVlZGkpCisJbW92ZHFhCSV4bW0zLCAtMTYoJWVkeCwgJWVkaSkKKwlqYWUJTChzaF8xMF9ub19wcmVmZXRjaF9sb29wKQorCitMKHNoXzEwX2VuZF9ub19wcmVmZXRjaF9sb29wKToKKwlsZWEJMzIoJWVjeCksICVlY3gKKwlhZGQJJWVjeCwgJWVkaQorCWFkZAklZWRpLCAlZWR4CisJbGVhCTEwKCVlZGksICVlYXgpLCAlZWF4CisJUE9QCSglZWRpKQorCUJSQU5DSF9UT19KTVBUQkxfRU5UUlkoTCh0YWJsZV80OGJ5dGVzX2Z3ZCksICVlY3gsIDQpCisKKwlDRklfUFVTSCAoJWVkaSkKKworCS5wMmFsaWduIDQKK0woc2hsXzExKToKKyNpZm5kZWYgVVNFX0FTX01FTU1PVkUKKwltb3ZhcHMJLTExKCVlYXgpLCAleG1tMQorI2Vsc2UKKwltb3ZsCURFU1QrNCglZXNwKSwgJWVkaQorCW1vdmFwcwktMTEoJWVheCksICV4bW0xCisJbW92ZHF1CSV4bW0wLCAoJWVkaSkKKyNlbmRpZgorI2lmZGVmIERBVEFfQ0FDSEVfU0laRV9IQUxGCisJY21wCSREQVRBX0NBQ0hFX1NJWkVfSEFMRiwgJWVjeAorI2Vsc2UKKyMgaWYgKGRlZmluZWQgU0hBUkVEIHx8IGRlZmluZWQgX19QSUNfXykKKwlTRVRVUF9QSUNfUkVHKGJ4KQorCWFkZAkkX0dMT0JBTF9PRkZTRVRfVEFCTEVfLCAlZWJ4CisJY21wCV9feDg2X2RhdGFfY2FjaGVfc2l6ZV9oYWxmQEdPVE9GRiglZWJ4KSwgJWVjeAorIyBlbHNlCisJY21wCV9feDg2X2RhdGFfY2FjaGVfc2l6ZV9oYWxmLCAlZWN4CisjIGVuZGlmCisjZW5kaWYKKwlqYiBMKHNoXzExX25vX3ByZWZldGNoKQorCisJbGVhCS02NCglZWN4KSwgJWVjeAorCisJLnAyYWxpZ24gNAorTChTaGwxMUxvb3BTdGFydCk6CisJcHJlZmV0Y2h0MCAweDFjMCglZWF4KQorCXByZWZldGNodDAgMHgxYzAoJWVkeCkKKwltb3ZhcHMJNSglZWF4KSwgJXhtbTIKKwltb3ZhcHMJMjEoJWVheCksICV4bW0zCisJbW92YXBzCTM3KCVlYXgpLCAleG1tNAorCW1vdmFwcwk1MyglZWF4KSwgJXhtbTUKKwltb3ZhcHMJJXhtbTUsICV4bW03CisJcGFsaWducgkkMTEsICV4bW00LCAleG1tNQorCXBhbGlnbnIJJDExLCAleG1tMywgJXhtbTQKKwltb3ZhcHMJJXhtbTUsIDQ4KCVlZHgpCisJcGFsaWducgkkMTEsICV4bW0yLCAleG1tMworCWxlYQk2NCglZWF4KSwgJWVheAorCXBhbGlnbnIJJDExLCAleG1tMSwgJXhtbTIKKwltb3ZhcHMJJXhtbTQsIDMyKCVlZHgpCisJbW92YXBzCSV4bW0zLCAxNiglZWR4KQorCW1vdmFwcwkleG1tNywgJXhtbTEKKwltb3ZhcHMJJXhtbTIsICglZWR4KQorCWxlYQk2NCglZWR4KSwgJWVkeAorCXN1YgkkNjQsICVlY3gKKwlqYQlMKFNobDExTG9vcFN0YXJ0KQorCitMKFNobDExTG9vcExlYXZlKToKKwlhZGQJJDMyLCAlZWN4CisJamxlCUwoc2hsX2VuZF8wKQorCisJbW92YXBzCTUoJWVheCksICV4bW0yCisJbW92YXBzCTIxKCVlYXgpLCAleG1tMworCXBhbGlnbnIJJDExLCAleG1tMiwgJXhtbTMKKwlwYWxpZ25yCSQxMSwgJXhtbTEsICV4bW0yCisKKwltb3ZhcHMJJXhtbTIsICglZWR4KQorCW1vdmFwcwkleG1tMywgMTYoJWVkeCkKKwlsZWEJMzIoJWVkeCwgJWVjeCksICVlZHgKKwlsZWEJMzIoJWVheCwgJWVjeCksICVlYXgKKwlQT1AgKCVlZGkpCisJQlJBTkNIX1RPX0pNUFRCTF9FTlRSWShMKHRhYmxlXzQ4Ynl0ZXNfZndkKSwgJWVjeCwgNCkKKworCUNGSV9QVVNIICglZWRpKQorCisJLnAyYWxpZ24gNAorTChzaF8xMV9ub19wcmVmZXRjaCk6CisJbGVhCS0zMiglZWN4KSwgJWVjeAorCWxlYQktMTEoJWVheCksICVlYXgKKwl4b3IJJWVkaSwgJWVkaQorCisJLnAyYWxpZ24gNAorTChzaF8xMV9ub19wcmVmZXRjaF9sb29wKToKKwltb3ZkcWEJMTYoJWVheCwgJWVkaSksICV4bW0yCisJc3ViCSQzMiwgJWVjeAorCW1vdmRxYQkzMiglZWF4LCAlZWRpKSwgJXhtbTMKKwltb3ZkcWEJJXhtbTMsICV4bW00CisJcGFsaWducgkkMTEsICV4bW0yLCAleG1tMworCXBhbGlnbnIJJDExLCAleG1tMSwgJXhtbTIKKwlsZWEJMzIoJWVkaSksICVlZGkKKwltb3ZkcWEJJXhtbTIsIC0zMiglZWR4LCAlZWRpKQorCW1vdmRxYQkleG1tMywgLTE2KCVlZHgsICVlZGkpCisJamIJTChzaF8xMV9lbmRfbm9fcHJlZmV0Y2hfbG9vcCkKKworCW1vdmRxYQkxNiglZWF4LCAlZWRpKSwgJXhtbTIKKwlzdWIJJDMyLCAlZWN4CisJbW92ZHFhCTMyKCVlYXgsICVlZGkpLCAleG1tMworCW1vdmRxYQkleG1tMywgJXhtbTEKKwlwYWxpZ25yCSQxMSwgJXhtbTIsICV4bW0zCisJcGFsaWducgkkMTEsICV4bW00LCAleG1tMgorCWxlYQkzMiglZWRpKSwgJWVkaQorCW1vdmRxYQkleG1tMiwgLTMyKCVlZHgsICVlZGkpCisJbW92ZHFhCSV4bW0zLCAtMTYoJWVkeCwgJWVkaSkKKwlqYWUJTChzaF8xMV9ub19wcmVmZXRjaF9sb29wKQorCitMKHNoXzExX2VuZF9ub19wcmVmZXRjaF9sb29wKToKKwlsZWEJMzIoJWVjeCksICVlY3gKKwlhZGQJJWVjeCwgJWVkaQorCWFkZAklZWRpLCAlZWR4CisJbGVhCTExKCVlZGksICVlYXgpLCAlZWF4CisJUE9QCSglZWRpKQorCUJSQU5DSF9UT19KTVBUQkxfRU5UUlkoTCh0YWJsZV80OGJ5dGVzX2Z3ZCksICVlY3gsIDQpCisKKwlDRklfUFVTSCAoJWVkaSkKKworCS5wMmFsaWduIDQKK0woc2hsXzEyKToKKyNpZm5kZWYgVVNFX0FTX01FTU1PVkUKKwltb3ZhcHMJLTEyKCVlYXgpLCAleG1tMQorI2Vsc2UKKwltb3ZsCURFU1QrNCglZXNwKSwgJWVkaQorCW1vdmFwcwktMTIoJWVheCksICV4bW0xCisJbW92ZHF1CSV4bW0wLCAoJWVkaSkKKyNlbmRpZgorI2lmZGVmIERBVEFfQ0FDSEVfU0laRV9IQUxGCisJY21wCSREQVRBX0NBQ0hFX1NJWkVfSEFMRiwgJWVjeAorI2Vsc2UKKyMgaWYgKGRlZmluZWQgU0hBUkVEIHx8IGRlZmluZWQgX19QSUNfXykKKwlTRVRVUF9QSUNfUkVHKGJ4KQorCWFkZAkkX0dMT0JBTF9PRkZTRVRfVEFCTEVfLCAlZWJ4CisJY21wCV9feDg2X2RhdGFfY2FjaGVfc2l6ZV9oYWxmQEdPVE9GRiglZWJ4KSwgJWVjeAorIyBlbHNlCisJY21wCV9feDg2X2RhdGFfY2FjaGVfc2l6ZV9oYWxmLCAlZWN4CisjIGVuZGlmCisjZW5kaWYKKwlqYiBMKHNoXzEyX25vX3ByZWZldGNoKQorCisJbGVhCS02NCglZWN4KSwgJWVjeAorCisJLnAyYWxpZ24gNAorTChTaGwxMkxvb3BTdGFydCk6CisJcHJlZmV0Y2h0MCAweDFjMCglZWF4KQorCXByZWZldGNodDAgMHgxYzAoJWVkeCkKKwltb3ZhcHMJNCglZWF4KSwgJXhtbTIKKwltb3ZhcHMJMjAoJWVheCksICV4bW0zCisJbW92YXBzCTM2KCVlYXgpLCAleG1tNAorCW1vdmFwcwk1MiglZWF4KSwgJXhtbTUKKwltb3ZhcHMJJXhtbTUsICV4bW03CisJcGFsaWducgkkMTIsICV4bW00LCAleG1tNQorCXBhbGlnbnIJJDEyLCAleG1tMywgJXhtbTQKKwltb3ZhcHMJJXhtbTUsIDQ4KCVlZHgpCisJcGFsaWducgkkMTIsICV4bW0yLCAleG1tMworCWxlYQk2NCglZWF4KSwgJWVheAorCXBhbGlnbnIJJDEyLCAleG1tMSwgJXhtbTIKKwltb3ZhcHMJJXhtbTQsIDMyKCVlZHgpCisJbW92YXBzCSV4bW0zLCAxNiglZWR4KQorCW1vdmFwcwkleG1tNywgJXhtbTEKKwltb3ZhcHMJJXhtbTIsICglZWR4KQorCWxlYQk2NCglZWR4KSwgJWVkeAorCXN1YgkkNjQsICVlY3gKKwlqYQlMKFNobDEyTG9vcFN0YXJ0KQorCitMKFNobDEyTG9vcExlYXZlKToKKwlhZGQJJDMyLCAlZWN4CisJamxlCUwoc2hsX2VuZF8wKQorCisJbW92YXBzCTQoJWVheCksICV4bW0yCisJbW92YXBzCTIwKCVlYXgpLCAleG1tMworCXBhbGlnbnIJJDEyLCAleG1tMiwgJXhtbTMKKwlwYWxpZ25yCSQxMiwgJXhtbTEsICV4bW0yCisKKwltb3ZhcHMJJXhtbTIsICglZWR4KQorCW1vdmFwcwkleG1tMywgMTYoJWVkeCkKKwlsZWEJMzIoJWVkeCwgJWVjeCksICVlZHgKKwlsZWEJMzIoJWVheCwgJWVjeCksICVlYXgKKwlQT1AgKCVlZGkpCisJQlJBTkNIX1RPX0pNUFRCTF9FTlRSWShMKHRhYmxlXzQ4Ynl0ZXNfZndkKSwgJWVjeCwgNCkKKworCUNGSV9QVVNIICglZWRpKQorCisJLnAyYWxpZ24gNAorTChzaF8xMl9ub19wcmVmZXRjaCk6CisJbGVhCS0zMiglZWN4KSwgJWVjeAorCWxlYQktMTIoJWVheCksICVlYXgKKwl4b3IJJWVkaSwgJWVkaQorCisJLnAyYWxpZ24gNAorTChzaF8xMl9ub19wcmVmZXRjaF9sb29wKToKKwltb3ZkcWEJMTYoJWVheCwgJWVkaSksICV4bW0yCisJc3ViCSQzMiwgJWVjeAorCW1vdmRxYQkzMiglZWF4LCAlZWRpKSwgJXhtbTMKKwltb3ZkcWEJJXhtbTMsICV4bW00CisJcGFsaWducgkkMTIsICV4bW0yLCAleG1tMworCXBhbGlnbnIJJDEyLCAleG1tMSwgJXhtbTIKKwlsZWEJMzIoJWVkaSksICVlZGkKKwltb3ZkcWEJJXhtbTIsIC0zMiglZWR4LCAlZWRpKQorCW1vdmRxYQkleG1tMywgLTE2KCVlZHgsICVlZGkpCisJamIJTChzaF8xMl9lbmRfbm9fcHJlZmV0Y2hfbG9vcCkKKworCW1vdmRxYQkxNiglZWF4LCAlZWRpKSwgJXhtbTIKKwlzdWIJJDMyLCAlZWN4CisJbW92ZHFhCTMyKCVlYXgsICVlZGkpLCAleG1tMworCW1vdmRxYQkleG1tMywgJXhtbTEKKwlwYWxpZ25yCSQxMiwgJXhtbTIsICV4bW0zCisJcGFsaWducgkkMTIsICV4bW00LCAleG1tMgorCWxlYQkzMiglZWRpKSwgJWVkaQorCW1vdmRxYQkleG1tMiwgLTMyKCVlZHgsICVlZGkpCisJbW92ZHFhCSV4bW0zLCAtMTYoJWVkeCwgJWVkaSkKKwlqYWUJTChzaF8xMl9ub19wcmVmZXRjaF9sb29wKQorCitMKHNoXzEyX2VuZF9ub19wcmVmZXRjaF9sb29wKToKKwlsZWEJMzIoJWVjeCksICVlY3gKKwlhZGQJJWVjeCwgJWVkaQorCWFkZAklZWRpLCAlZWR4CisJbGVhCTEyKCVlZGksICVlYXgpLCAlZWF4CisJUE9QCSglZWRpKQorCUJSQU5DSF9UT19KTVBUQkxfRU5UUlkoTCh0YWJsZV80OGJ5dGVzX2Z3ZCksICVlY3gsIDQpCisKKwlDRklfUFVTSCAoJWVkaSkKKworCS5wMmFsaWduIDQKK0woc2hsXzEzKToKKyNpZm5kZWYgVVNFX0FTX01FTU1PVkUKKwltb3ZhcHMJLTEzKCVlYXgpLCAleG1tMQorI2Vsc2UKKwltb3ZsCURFU1QrNCglZXNwKSwgJWVkaQorCW1vdmFwcwktMTMoJWVheCksICV4bW0xCisJbW92ZHF1CSV4bW0wLCAoJWVkaSkKKyNlbmRpZgorI2lmZGVmIERBVEFfQ0FDSEVfU0laRV9IQUxGCisJY21wCSREQVRBX0NBQ0hFX1NJWkVfSEFMRiwgJWVjeAorI2Vsc2UKKyMgaWYgKGRlZmluZWQgU0hBUkVEIHx8IGRlZmluZWQgX19QSUNfXykKKwlTRVRVUF9QSUNfUkVHKGJ4KQorCWFkZAkkX0dMT0JBTF9PRkZTRVRfVEFCTEVfLCAlZWJ4CisJY21wCV9feDg2X2RhdGFfY2FjaGVfc2l6ZV9oYWxmQEdPVE9GRiglZWJ4KSwgJWVjeAorIyBlbHNlCisJY21wCV9feDg2X2RhdGFfY2FjaGVfc2l6ZV9oYWxmLCAlZWN4CisjIGVuZGlmCisjZW5kaWYKKwlqYiBMKHNoXzEzX25vX3ByZWZldGNoKQorCisJbGVhCS02NCglZWN4KSwgJWVjeAorCisJLnAyYWxpZ24gNAorTChTaGwxM0xvb3BTdGFydCk6CisJcHJlZmV0Y2h0MCAweDFjMCglZWF4KQorCXByZWZldGNodDAgMHgxYzAoJWVkeCkKKwltb3ZhcHMJMyglZWF4KSwgJXhtbTIKKwltb3ZhcHMJMTkoJWVheCksICV4bW0zCisJbW92YXBzCTM1KCVlYXgpLCAleG1tNAorCW1vdmFwcwk1MSglZWF4KSwgJXhtbTUKKwltb3ZhcHMJJXhtbTUsICV4bW03CisJcGFsaWducgkkMTMsICV4bW00LCAleG1tNQorCXBhbGlnbnIJJDEzLCAleG1tMywgJXhtbTQKKwltb3ZhcHMJJXhtbTUsIDQ4KCVlZHgpCisJcGFsaWducgkkMTMsICV4bW0yLCAleG1tMworCWxlYQk2NCglZWF4KSwgJWVheAorCXBhbGlnbnIJJDEzLCAleG1tMSwgJXhtbTIKKwltb3ZhcHMJJXhtbTQsIDMyKCVlZHgpCisJbW92YXBzCSV4bW0zLCAxNiglZWR4KQorCW1vdmFwcwkleG1tNywgJXhtbTEKKwltb3ZhcHMJJXhtbTIsICglZWR4KQorCWxlYQk2NCglZWR4KSwgJWVkeAorCXN1YgkkNjQsICVlY3gKKwlqYQlMKFNobDEzTG9vcFN0YXJ0KQorCitMKFNobDEzTG9vcExlYXZlKToKKwlhZGQJJDMyLCAlZWN4CisJamxlCUwoc2hsX2VuZF8wKQorCisJbW92YXBzCTMoJWVheCksICV4bW0yCisJbW92YXBzCTE5KCVlYXgpLCAleG1tMworCXBhbGlnbnIJJDEzLCAleG1tMiwgJXhtbTMKKwlwYWxpZ25yCSQxMywgJXhtbTEsICV4bW0yCisKKwltb3ZhcHMJJXhtbTIsICglZWR4KQorCW1vdmFwcwkleG1tMywgMTYoJWVkeCkKKwlsZWEJMzIoJWVkeCwgJWVjeCksICVlZHgKKwlsZWEJMzIoJWVheCwgJWVjeCksICVlYXgKKwlQT1AgKCVlZGkpCisJQlJBTkNIX1RPX0pNUFRCTF9FTlRSWShMKHRhYmxlXzQ4Ynl0ZXNfZndkKSwgJWVjeCwgNCkKKworCUNGSV9QVVNIICglZWRpKQorCisJLnAyYWxpZ24gNAorTChzaF8xM19ub19wcmVmZXRjaCk6CisJbGVhCS0zMiglZWN4KSwgJWVjeAorCWxlYQktMTMoJWVheCksICVlYXgKKwl4b3IJJWVkaSwgJWVkaQorCisJLnAyYWxpZ24gNAorTChzaF8xM19ub19wcmVmZXRjaF9sb29wKToKKwltb3ZkcWEJMTYoJWVheCwgJWVkaSksICV4bW0yCisJc3ViCSQzMiwgJWVjeAorCW1vdmRxYQkzMiglZWF4LCAlZWRpKSwgJXhtbTMKKwltb3ZkcWEJJXhtbTMsICV4bW00CisJcGFsaWducgkkMTMsICV4bW0yLCAleG1tMworCXBhbGlnbnIJJDEzLCAleG1tMSwgJXhtbTIKKwlsZWEJMzIoJWVkaSksICVlZGkKKwltb3ZkcWEJJXhtbTIsIC0zMiglZWR4LCAlZWRpKQorCW1vdmRxYQkleG1tMywgLTE2KCVlZHgsICVlZGkpCisJamIJTChzaF8xM19lbmRfbm9fcHJlZmV0Y2hfbG9vcCkKKworCW1vdmRxYQkxNiglZWF4LCAlZWRpKSwgJXhtbTIKKwlzdWIJJDMyLCAlZWN4CisJbW92ZHFhCTMyKCVlYXgsICVlZGkpLCAleG1tMworCW1vdmRxYQkleG1tMywgJXhtbTEKKwlwYWxpZ25yCSQxMywgJXhtbTIsICV4bW0zCisJcGFsaWducgkkMTMsICV4bW00LCAleG1tMgorCWxlYQkzMiglZWRpKSwgJWVkaQorCW1vdmRxYQkleG1tMiwgLTMyKCVlZHgsICVlZGkpCisJbW92ZHFhCSV4bW0zLCAtMTYoJWVkeCwgJWVkaSkKKwlqYWUJTChzaF8xM19ub19wcmVmZXRjaF9sb29wKQorCitMKHNoXzEzX2VuZF9ub19wcmVmZXRjaF9sb29wKToKKwlsZWEJMzIoJWVjeCksICVlY3gKKwlhZGQJJWVjeCwgJWVkaQorCWFkZAklZWRpLCAlZWR4CisJbGVhCTEzKCVlZGksICVlYXgpLCAlZWF4CisJUE9QCSglZWRpKQorCUJSQU5DSF9UT19KTVBUQkxfRU5UUlkoTCh0YWJsZV80OGJ5dGVzX2Z3ZCksICVlY3gsIDQpCisKKwlDRklfUFVTSCAoJWVkaSkKKworCS5wMmFsaWduIDQKK0woc2hsXzE0KToKKyNpZm5kZWYgVVNFX0FTX01FTU1PVkUKKwltb3ZhcHMJLTE0KCVlYXgpLCAleG1tMQorI2Vsc2UKKwltb3ZsCURFU1QrNCglZXNwKSwgJWVkaQorCW1vdmFwcwktMTQoJWVheCksICV4bW0xCisJbW92ZHF1CSV4bW0wLCAoJWVkaSkKKyNlbmRpZgorI2lmZGVmIERBVEFfQ0FDSEVfU0laRV9IQUxGCisJY21wCSREQVRBX0NBQ0hFX1NJWkVfSEFMRiwgJWVjeAorI2Vsc2UKKyMgaWYgKGRlZmluZWQgU0hBUkVEIHx8IGRlZmluZWQgX19QSUNfXykKKwlTRVRVUF9QSUNfUkVHKGJ4KQorCWFkZAkkX0dMT0JBTF9PRkZTRVRfVEFCTEVfLCAlZWJ4CisJY21wCV9feDg2X2RhdGFfY2FjaGVfc2l6ZV9oYWxmQEdPVE9GRiglZWJ4KSwgJWVjeAorIyBlbHNlCisJY21wCV9feDg2X2RhdGFfY2FjaGVfc2l6ZV9oYWxmLCAlZWN4CisjIGVuZGlmCisjZW5kaWYKKwlqYiBMKHNoXzE0X25vX3ByZWZldGNoKQorCisJbGVhCS02NCglZWN4KSwgJWVjeAorCisJLnAyYWxpZ24gNAorTChTaGwxNExvb3BTdGFydCk6CisJcHJlZmV0Y2h0MCAweDFjMCglZWF4KQorCXByZWZldGNodDAgMHgxYzAoJWVkeCkKKwltb3ZhcHMJMiglZWF4KSwgJXhtbTIKKwltb3ZhcHMJMTgoJWVheCksICV4bW0zCisJbW92YXBzCTM0KCVlYXgpLCAleG1tNAorCW1vdmFwcwk1MCglZWF4KSwgJXhtbTUKKwltb3ZhcHMJJXhtbTUsICV4bW03CisJcGFsaWducgkkMTQsICV4bW00LCAleG1tNQorCXBhbGlnbnIJJDE0LCAleG1tMywgJXhtbTQKKwltb3ZhcHMJJXhtbTUsIDQ4KCVlZHgpCisJcGFsaWducgkkMTQsICV4bW0yLCAleG1tMworCWxlYQk2NCglZWF4KSwgJWVheAorCXBhbGlnbnIJJDE0LCAleG1tMSwgJXhtbTIKKwltb3ZhcHMJJXhtbTQsIDMyKCVlZHgpCisJbW92YXBzCSV4bW0zLCAxNiglZWR4KQorCW1vdmFwcwkleG1tNywgJXhtbTEKKwltb3ZhcHMJJXhtbTIsICglZWR4KQorCWxlYQk2NCglZWR4KSwgJWVkeAorCXN1YgkkNjQsICVlY3gKKwlqYQlMKFNobDE0TG9vcFN0YXJ0KQorCitMKFNobDE0TG9vcExlYXZlKToKKwlhZGQJJDMyLCAlZWN4CisJamxlCUwoc2hsX2VuZF8wKQorCisJbW92YXBzCTIoJWVheCksICV4bW0yCisJbW92YXBzCTE4KCVlYXgpLCAleG1tMworCXBhbGlnbnIJJDE0LCAleG1tMiwgJXhtbTMKKwlwYWxpZ25yCSQxNCwgJXhtbTEsICV4bW0yCisKKwltb3ZhcHMJJXhtbTIsICglZWR4KQorCW1vdmFwcwkleG1tMywgMTYoJWVkeCkKKwlsZWEJMzIoJWVkeCwgJWVjeCksICVlZHgKKwlsZWEJMzIoJWVheCwgJWVjeCksICVlYXgKKwlQT1AgKCVlZGkpCisJQlJBTkNIX1RPX0pNUFRCTF9FTlRSWShMKHRhYmxlXzQ4Ynl0ZXNfZndkKSwgJWVjeCwgNCkKKworCUNGSV9QVVNIICglZWRpKQorCisJLnAyYWxpZ24gNAorTChzaF8xNF9ub19wcmVmZXRjaCk6CisJbGVhCS0zMiglZWN4KSwgJWVjeAorCWxlYQktMTQoJWVheCksICVlYXgKKwl4b3IJJWVkaSwgJWVkaQorCisJLnAyYWxpZ24gNAorTChzaF8xNF9ub19wcmVmZXRjaF9sb29wKToKKwltb3ZkcWEJMTYoJWVheCwgJWVkaSksICV4bW0yCisJc3ViCSQzMiwgJWVjeAorCW1vdmRxYQkzMiglZWF4LCAlZWRpKSwgJXhtbTMKKwltb3ZkcWEJJXhtbTMsICV4bW00CisJcGFsaWducgkkMTQsICV4bW0yLCAleG1tMworCXBhbGlnbnIJJDE0LCAleG1tMSwgJXhtbTIKKwlsZWEJMzIoJWVkaSksICVlZGkKKwltb3ZkcWEJJXhtbTIsIC0zMiglZWR4LCAlZWRpKQorCW1vdmRxYQkleG1tMywgLTE2KCVlZHgsICVlZGkpCisJamIJTChzaF8xNF9lbmRfbm9fcHJlZmV0Y2hfbG9vcCkKKworCW1vdmRxYQkxNiglZWF4LCAlZWRpKSwgJXhtbTIKKwlzdWIJJDMyLCAlZWN4CisJbW92ZHFhCTMyKCVlYXgsICVlZGkpLCAleG1tMworCW1vdmRxYQkleG1tMywgJXhtbTEKKwlwYWxpZ25yCSQxNCwgJXhtbTIsICV4bW0zCisJcGFsaWducgkkMTQsICV4bW00LCAleG1tMgorCWxlYQkzMiglZWRpKSwgJWVkaQorCW1vdmRxYQkleG1tMiwgLTMyKCVlZHgsICVlZGkpCisJbW92ZHFhCSV4bW0zLCAtMTYoJWVkeCwgJWVkaSkKKwlqYWUJTChzaF8xNF9ub19wcmVmZXRjaF9sb29wKQorCitMKHNoXzE0X2VuZF9ub19wcmVmZXRjaF9sb29wKToKKwlsZWEJMzIoJWVjeCksICVlY3gKKwlhZGQJJWVjeCwgJWVkaQorCWFkZAklZWRpLCAlZWR4CisJbGVhCTE0KCVlZGksICVlYXgpLCAlZWF4CisJUE9QCSglZWRpKQorCUJSQU5DSF9UT19KTVBUQkxfRU5UUlkoTCh0YWJsZV80OGJ5dGVzX2Z3ZCksICVlY3gsIDQpCisKKwlDRklfUFVTSCAoJWVkaSkKKworCS5wMmFsaWduIDQKK0woc2hsXzE1KToKKyNpZm5kZWYgVVNFX0FTX01FTU1PVkUKKwltb3ZhcHMJLTE1KCVlYXgpLCAleG1tMQorI2Vsc2UKKwltb3ZsCURFU1QrNCglZXNwKSwgJWVkaQorCW1vdmFwcwktMTUoJWVheCksICV4bW0xCisJbW92ZHF1CSV4bW0wLCAoJWVkaSkKKyNlbmRpZgorI2lmZGVmIERBVEFfQ0FDSEVfU0laRV9IQUxGCisJY21wCSREQVRBX0NBQ0hFX1NJWkVfSEFMRiwgJWVjeAorI2Vsc2UKKyMgaWYgKGRlZmluZWQgU0hBUkVEIHx8IGRlZmluZWQgX19QSUNfXykKKwlTRVRVUF9QSUNfUkVHKGJ4KQorCWFkZAkkX0dMT0JBTF9PRkZTRVRfVEFCTEVfLCAlZWJ4CisJY21wCV9feDg2X2RhdGFfY2FjaGVfc2l6ZV9oYWxmQEdPVE9GRiglZWJ4KSwgJWVjeAorIyBlbHNlCisJY21wCV9feDg2X2RhdGFfY2FjaGVfc2l6ZV9oYWxmLCAlZWN4CisjIGVuZGlmCisjZW5kaWYKKwlqYiBMKHNoXzE1X25vX3ByZWZldGNoKQorCisJbGVhCS02NCglZWN4KSwgJWVjeAorCisJLnAyYWxpZ24gNAorTChTaGwxNUxvb3BTdGFydCk6CisJcHJlZmV0Y2h0MCAweDFjMCglZWF4KQorCXByZWZldGNodDAgMHgxYzAoJWVkeCkKKwltb3ZhcHMJMSglZWF4KSwgJXhtbTIKKwltb3ZhcHMJMTcoJWVheCksICV4bW0zCisJbW92YXBzCTMzKCVlYXgpLCAleG1tNAorCW1vdmFwcwk0OSglZWF4KSwgJXhtbTUKKwltb3ZhcHMJJXhtbTUsICV4bW03CisJcGFsaWducgkkMTUsICV4bW00LCAleG1tNQorCXBhbGlnbnIJJDE1LCAleG1tMywgJXhtbTQKKwltb3ZhcHMJJXhtbTUsIDQ4KCVlZHgpCisJcGFsaWducgkkMTUsICV4bW0yLCAleG1tMworCWxlYQk2NCglZWF4KSwgJWVheAorCXBhbGlnbnIJJDE1LCAleG1tMSwgJXhtbTIKKwltb3ZhcHMJJXhtbTQsIDMyKCVlZHgpCisJbW92YXBzCSV4bW0zLCAxNiglZWR4KQorCW1vdmFwcwkleG1tNywgJXhtbTEKKwltb3ZhcHMJJXhtbTIsICglZWR4KQorCWxlYQk2NCglZWR4KSwgJWVkeAorCXN1YgkkNjQsICVlY3gKKwlqYQlMKFNobDE1TG9vcFN0YXJ0KQorCitMKFNobDE1TG9vcExlYXZlKToKKwlhZGQJJDMyLCAlZWN4CisJamxlCUwoc2hsX2VuZF8wKQorCisJbW92YXBzCTEoJWVheCksICV4bW0yCisJbW92YXBzCTE3KCVlYXgpLCAleG1tMworCXBhbGlnbnIJJDE1LCAleG1tMiwgJXhtbTMKKwlwYWxpZ25yCSQxNSwgJXhtbTEsICV4bW0yCisKKwltb3ZhcHMJJXhtbTIsICglZWR4KQorCW1vdmFwcwkleG1tMywgMTYoJWVkeCkKKwlsZWEJMzIoJWVkeCwgJWVjeCksICVlZHgKKwlsZWEJMzIoJWVheCwgJWVjeCksICVlYXgKKwlQT1AgKCVlZGkpCisJQlJBTkNIX1RPX0pNUFRCTF9FTlRSWShMKHRhYmxlXzQ4Ynl0ZXNfZndkKSwgJWVjeCwgNCkKKworCUNGSV9QVVNIICglZWRpKQorCisJLnAyYWxpZ24gNAorTChzaF8xNV9ub19wcmVmZXRjaCk6CisJbGVhCS0zMiglZWN4KSwgJWVjeAorCWxlYQktMTUoJWVheCksICVlYXgKKwl4b3IJJWVkaSwgJWVkaQorCisJLnAyYWxpZ24gNAorTChzaF8xNV9ub19wcmVmZXRjaF9sb29wKToKKwltb3ZkcWEJMTYoJWVheCwgJWVkaSksICV4bW0yCisJc3ViCSQzMiwgJWVjeAorCW1vdmRxYQkzMiglZWF4LCAlZWRpKSwgJXhtbTMKKwltb3ZkcWEJJXhtbTMsICV4bW00CisJcGFsaWducgkkMTUsICV4bW0yLCAleG1tMworCXBhbGlnbnIJJDE1LCAleG1tMSwgJXhtbTIKKwlsZWEJMzIoJWVkaSksICVlZGkKKwltb3ZkcWEJJXhtbTIsIC0zMiglZWR4LCAlZWRpKQorCW1vdmRxYQkleG1tMywgLTE2KCVlZHgsICVlZGkpCisJamIJTChzaF8xNV9lbmRfbm9fcHJlZmV0Y2hfbG9vcCkKKworCW1vdmRxYQkxNiglZWF4LCAlZWRpKSwgJXhtbTIKKwlzdWIJJDMyLCAlZWN4CisJbW92ZHFhCTMyKCVlYXgsICVlZGkpLCAleG1tMworCW1vdmRxYQkleG1tMywgJXhtbTEKKwlwYWxpZ25yCSQxNSwgJXhtbTIsICV4bW0zCisJcGFsaWducgkkMTUsICV4bW00LCAleG1tMgorCWxlYQkzMiglZWRpKSwgJWVkaQorCW1vdmRxYQkleG1tMiwgLTMyKCVlZHgsICVlZGkpCisJbW92ZHFhCSV4bW0zLCAtMTYoJWVkeCwgJWVkaSkKKwlqYWUJTChzaF8xNV9ub19wcmVmZXRjaF9sb29wKQorCitMKHNoXzE1X2VuZF9ub19wcmVmZXRjaF9sb29wKToKKwlsZWEJMzIoJWVjeCksICVlY3gKKwlhZGQJJWVjeCwgJWVkaQorCWFkZAklZWRpLCAlZWR4CisJbGVhCTE1KCVlZGksICVlYXgpLCAlZWF4CisJUE9QCSglZWRpKQorCUJSQU5DSF9UT19KTVBUQkxfRU5UUlkoTCh0YWJsZV80OGJ5dGVzX2Z3ZCksICVlY3gsIDQpCisKKwlDRklfUFVTSCAoJWVkaSkKKworCS5wMmFsaWduIDQKK0woc2hsX2VuZF8wKToKKwlsZWEJMzIoJWVjeCksICVlY3gKKwlsZWEJKCVlZHgsICVlY3gpLCAlZWR4CisJbGVhCSglZWF4LCAlZWN4KSwgJWVheAorCVBPUAkoJWVkaSkKKwlCUkFOQ0hfVE9fSk1QVEJMX0VOVFJZKEwodGFibGVfNDhieXRlc19md2QpLCAlZWN4LCA0KQorCisJLnAyYWxpZ24gNAorTChmd2Rfd3JpdGVfNDRieXRlcyk6CisJbW92cQktNDQoJWVheCksICV4bW0wCisJbW92cQkleG1tMCwgLTQ0KCVlZHgpCitMKGZ3ZF93cml0ZV8zNmJ5dGVzKToKKwltb3ZxCS0zNiglZWF4KSwgJXhtbTAKKwltb3ZxCSV4bW0wLCAtMzYoJWVkeCkKK0woZndkX3dyaXRlXzI4Ynl0ZXMpOgorCW1vdnEJLTI4KCVlYXgpLCAleG1tMAorCW1vdnEJJXhtbTAsIC0yOCglZWR4KQorTChmd2Rfd3JpdGVfMjBieXRlcyk6CisJbW92cQktMjAoJWVheCksICV4bW0wCisJbW92cQkleG1tMCwgLTIwKCVlZHgpCitMKGZ3ZF93cml0ZV8xMmJ5dGVzKToKKwltb3ZxCS0xMiglZWF4KSwgJXhtbTAKKwltb3ZxCSV4bW0wLCAtMTIoJWVkeCkKK0woZndkX3dyaXRlXzRieXRlcyk6CisJbW92bAktNCglZWF4KSwgJWVjeAorCW1vdmwJJWVjeCwgLTQoJWVkeCkKKyNpZm5kZWYgVVNFX0FTX0JDT1BZCisjIGlmZGVmIFVTRV9BU19NRU1QQ1BZCisJbW92bAklZWR4LCAlZWF4CisjIGVsc2UKKwltb3ZsCURFU1QoJWVzcCksICVlYXgKKyMgZW5kaWYKKyNlbmRpZgorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChmd2Rfd3JpdGVfNDBieXRlcyk6CisJbW92cQktNDAoJWVheCksICV4bW0wCisJbW92cQkleG1tMCwgLTQwKCVlZHgpCitMKGZ3ZF93cml0ZV8zMmJ5dGVzKToKKwltb3ZxCS0zMiglZWF4KSwgJXhtbTAKKwltb3ZxCSV4bW0wLCAtMzIoJWVkeCkKK0woZndkX3dyaXRlXzI0Ynl0ZXMpOgorCW1vdnEJLTI0KCVlYXgpLCAleG1tMAorCW1vdnEJJXhtbTAsIC0yNCglZWR4KQorTChmd2Rfd3JpdGVfMTZieXRlcyk6CisJbW92cQktMTYoJWVheCksICV4bW0wCisJbW92cQkleG1tMCwgLTE2KCVlZHgpCitMKGZ3ZF93cml0ZV84Ynl0ZXMpOgorCW1vdnEJLTgoJWVheCksICV4bW0wCisJbW92cQkleG1tMCwgLTgoJWVkeCkKK0woZndkX3dyaXRlXzBieXRlcyk6CisjaWZuZGVmIFVTRV9BU19CQ09QWQorIyBpZmRlZiBVU0VfQVNfTUVNUENQWQorCW1vdmwJJWVkeCwgJWVheAorIyBlbHNlCisJbW92bAlERVNUKCVlc3ApLCAlZWF4CisjIGVuZGlmCisjZW5kaWYKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woZndkX3dyaXRlXzVieXRlcyk6CisJbW92bAktNSglZWF4KSwgJWVjeAorCW1vdmwJLTQoJWVheCksICVlYXgKKwltb3ZsCSVlY3gsIC01KCVlZHgpCisJbW92bAklZWF4LCAtNCglZWR4KQorI2lmbmRlZiBVU0VfQVNfQkNPUFkKKyMgaWZkZWYgVVNFX0FTX01FTVBDUFkKKwltb3ZsCSVlZHgsICVlYXgKKyMgZWxzZQorCW1vdmwJREVTVCglZXNwKSwgJWVheAorIyBlbmRpZgorI2VuZGlmCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKGZ3ZF93cml0ZV80NWJ5dGVzKToKKwltb3ZxCS00NSglZWF4KSwgJXhtbTAKKwltb3ZxCSV4bW0wLCAtNDUoJWVkeCkKK0woZndkX3dyaXRlXzM3Ynl0ZXMpOgorCW1vdnEJLTM3KCVlYXgpLCAleG1tMAorCW1vdnEJJXhtbTAsIC0zNyglZWR4KQorTChmd2Rfd3JpdGVfMjlieXRlcyk6CisJbW92cQktMjkoJWVheCksICV4bW0wCisJbW92cQkleG1tMCwgLTI5KCVlZHgpCitMKGZ3ZF93cml0ZV8yMWJ5dGVzKToKKwltb3ZxCS0yMSglZWF4KSwgJXhtbTAKKwltb3ZxCSV4bW0wLCAtMjEoJWVkeCkKK0woZndkX3dyaXRlXzEzYnl0ZXMpOgorCW1vdnEJLTEzKCVlYXgpLCAleG1tMAorCW1vdnEJJXhtbTAsIC0xMyglZWR4KQorCW1vdmwJLTUoJWVheCksICVlY3gKKwltb3ZsCSVlY3gsIC01KCVlZHgpCisJbW92emJsCS0xKCVlYXgpLCAlZWN4CisJbW92YgklY2wsIC0xKCVlZHgpCisjaWZuZGVmIFVTRV9BU19CQ09QWQorIyBpZmRlZiBVU0VfQVNfTUVNUENQWQorCW1vdmwJJWVkeCwgJWVheAorIyBlbHNlCisJbW92bAlERVNUKCVlc3ApLCAlZWF4CisjIGVuZGlmCisjZW5kaWYKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woZndkX3dyaXRlXzQxYnl0ZXMpOgorCW1vdnEJLTQxKCVlYXgpLCAleG1tMAorCW1vdnEJJXhtbTAsIC00MSglZWR4KQorTChmd2Rfd3JpdGVfMzNieXRlcyk6CisJbW92cQktMzMoJWVheCksICV4bW0wCisJbW92cQkleG1tMCwgLTMzKCVlZHgpCitMKGZ3ZF93cml0ZV8yNWJ5dGVzKToKKwltb3ZxCS0yNSglZWF4KSwgJXhtbTAKKwltb3ZxCSV4bW0wLCAtMjUoJWVkeCkKK0woZndkX3dyaXRlXzE3Ynl0ZXMpOgorCW1vdnEJLTE3KCVlYXgpLCAleG1tMAorCW1vdnEJJXhtbTAsIC0xNyglZWR4KQorTChmd2Rfd3JpdGVfOWJ5dGVzKToKKwltb3ZxCS05KCVlYXgpLCAleG1tMAorCW1vdnEJJXhtbTAsIC05KCVlZHgpCitMKGZ3ZF93cml0ZV8xYnl0ZXMpOgorCW1vdnpibAktMSglZWF4KSwgJWVjeAorCW1vdmIJJWNsLCAtMSglZWR4KQorI2lmbmRlZiBVU0VfQVNfQkNPUFkKKyMgaWZkZWYgVVNFX0FTX01FTVBDUFkKKwltb3ZsCSVlZHgsICVlYXgKKyMgZWxzZQorCW1vdmwJREVTVCglZXNwKSwgJWVheAorIyBlbmRpZgorI2VuZGlmCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKGZ3ZF93cml0ZV80NmJ5dGVzKToKKwltb3ZxCS00NiglZWF4KSwgJXhtbTAKKwltb3ZxCSV4bW0wLCAtNDYoJWVkeCkKK0woZndkX3dyaXRlXzM4Ynl0ZXMpOgorCW1vdnEJLTM4KCVlYXgpLCAleG1tMAorCW1vdnEJJXhtbTAsIC0zOCglZWR4KQorTChmd2Rfd3JpdGVfMzBieXRlcyk6CisJbW92cQktMzAoJWVheCksICV4bW0wCisJbW92cQkleG1tMCwgLTMwKCVlZHgpCitMKGZ3ZF93cml0ZV8yMmJ5dGVzKToKKwltb3ZxCS0yMiglZWF4KSwgJXhtbTAKKwltb3ZxCSV4bW0wLCAtMjIoJWVkeCkKK0woZndkX3dyaXRlXzE0Ynl0ZXMpOgorCW1vdnEJLTE0KCVlYXgpLCAleG1tMAorCW1vdnEJJXhtbTAsIC0xNCglZWR4KQorTChmd2Rfd3JpdGVfNmJ5dGVzKToKKwltb3ZsCS02KCVlYXgpLCAlZWN4CisJbW92bAklZWN4LCAtNiglZWR4KQorCW1vdnp3bAktMiglZWF4KSwgJWVjeAorCW1vdncJJWN4LCAtMiglZWR4KQorI2lmbmRlZiBVU0VfQVNfQkNPUFkKKyMgaWZkZWYgVVNFX0FTX01FTVBDUFkKKwltb3ZsCSVlZHgsICVlYXgKKyMgZWxzZQorCW1vdmwJREVTVCglZXNwKSwgJWVheAorIyBlbmRpZgorI2VuZGlmCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKGZ3ZF93cml0ZV80MmJ5dGVzKToKKwltb3ZxCS00MiglZWF4KSwgJXhtbTAKKwltb3ZxCSV4bW0wLCAtNDIoJWVkeCkKK0woZndkX3dyaXRlXzM0Ynl0ZXMpOgorCW1vdnEJLTM0KCVlYXgpLCAleG1tMAorCW1vdnEJJXhtbTAsIC0zNCglZWR4KQorTChmd2Rfd3JpdGVfMjZieXRlcyk6CisJbW92cQktMjYoJWVheCksICV4bW0wCisJbW92cQkleG1tMCwgLTI2KCVlZHgpCitMKGZ3ZF93cml0ZV8xOGJ5dGVzKToKKwltb3ZxCS0xOCglZWF4KSwgJXhtbTAKKwltb3ZxCSV4bW0wLCAtMTgoJWVkeCkKK0woZndkX3dyaXRlXzEwYnl0ZXMpOgorCW1vdnEJLTEwKCVlYXgpLCAleG1tMAorCW1vdnEJJXhtbTAsIC0xMCglZWR4KQorTChmd2Rfd3JpdGVfMmJ5dGVzKToKKwltb3Z6d2wJLTIoJWVheCksICVlY3gKKwltb3Z3CSVjeCwgLTIoJWVkeCkKKyNpZm5kZWYgVVNFX0FTX0JDT1BZCisjIGlmZGVmIFVTRV9BU19NRU1QQ1BZCisJbW92bAklZWR4LCAlZWF4CisjIGVsc2UKKwltb3ZsCURFU1QoJWVzcCksICVlYXgKKyMgZW5kaWYKKyNlbmRpZgorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChmd2Rfd3JpdGVfNDdieXRlcyk6CisJbW92cQktNDcoJWVheCksICV4bW0wCisJbW92cQkleG1tMCwgLTQ3KCVlZHgpCitMKGZ3ZF93cml0ZV8zOWJ5dGVzKToKKwltb3ZxCS0zOSglZWF4KSwgJXhtbTAKKwltb3ZxCSV4bW0wLCAtMzkoJWVkeCkKK0woZndkX3dyaXRlXzMxYnl0ZXMpOgorCW1vdnEJLTMxKCVlYXgpLCAleG1tMAorCW1vdnEJJXhtbTAsIC0zMSglZWR4KQorTChmd2Rfd3JpdGVfMjNieXRlcyk6CisJbW92cQktMjMoJWVheCksICV4bW0wCisJbW92cQkleG1tMCwgLTIzKCVlZHgpCitMKGZ3ZF93cml0ZV8xNWJ5dGVzKToKKwltb3ZxCS0xNSglZWF4KSwgJXhtbTAKKwltb3ZxCSV4bW0wLCAtMTUoJWVkeCkKK0woZndkX3dyaXRlXzdieXRlcyk6CisJbW92bAktNyglZWF4KSwgJWVjeAorCW1vdmwJJWVjeCwgLTcoJWVkeCkKKwltb3Z6d2wJLTMoJWVheCksICVlY3gKKwltb3Z6YmwJLTEoJWVheCksICVlYXgKKwltb3Z3CSVjeCwgLTMoJWVkeCkKKwltb3ZiCSVhbCwgLTEoJWVkeCkKKyNpZm5kZWYgVVNFX0FTX0JDT1BZCisjIGlmZGVmIFVTRV9BU19NRU1QQ1BZCisJbW92bAklZWR4LCAlZWF4CisjIGVsc2UKKwltb3ZsCURFU1QoJWVzcCksICVlYXgKKyMgZW5kaWYKKyNlbmRpZgorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChmd2Rfd3JpdGVfNDNieXRlcyk6CisJbW92cQktNDMoJWVheCksICV4bW0wCisJbW92cQkleG1tMCwgLTQzKCVlZHgpCitMKGZ3ZF93cml0ZV8zNWJ5dGVzKToKKwltb3ZxCS0zNSglZWF4KSwgJXhtbTAKKwltb3ZxCSV4bW0wLCAtMzUoJWVkeCkKK0woZndkX3dyaXRlXzI3Ynl0ZXMpOgorCW1vdnEJLTI3KCVlYXgpLCAleG1tMAorCW1vdnEJJXhtbTAsIC0yNyglZWR4KQorTChmd2Rfd3JpdGVfMTlieXRlcyk6CisJbW92cQktMTkoJWVheCksICV4bW0wCisJbW92cQkleG1tMCwgLTE5KCVlZHgpCitMKGZ3ZF93cml0ZV8xMWJ5dGVzKToKKwltb3ZxCS0xMSglZWF4KSwgJXhtbTAKKwltb3ZxCSV4bW0wLCAtMTEoJWVkeCkKK0woZndkX3dyaXRlXzNieXRlcyk6CisJbW92endsCS0zKCVlYXgpLCAlZWN4CisJbW92emJsCS0xKCVlYXgpLCAlZWF4CisJbW92dwklY3gsIC0zKCVlZHgpCisJbW92YgklYWwsIC0xKCVlZHgpCisjaWZuZGVmIFVTRV9BU19CQ09QWQorIyBpZmRlZiBVU0VfQVNfTUVNUENQWQorCW1vdmwJJWVkeCwgJWVheAorIyBlbHNlCisJbW92bAlERVNUKCVlc3ApLCAlZWF4CisjIGVuZGlmCisjZW5kaWYKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woZndkX3dyaXRlXzQwYnl0ZXNfYWxpZ24pOgorCW1vdmRxYQktNDAoJWVheCksICV4bW0wCisJbW92ZHFhCSV4bW0wLCAtNDAoJWVkeCkKK0woZndkX3dyaXRlXzI0Ynl0ZXNfYWxpZ24pOgorCW1vdmRxYQktMjQoJWVheCksICV4bW0wCisJbW92ZHFhCSV4bW0wLCAtMjQoJWVkeCkKK0woZndkX3dyaXRlXzhieXRlc19hbGlnbik6CisJbW92cQktOCglZWF4KSwgJXhtbTAKKwltb3ZxCSV4bW0wLCAtOCglZWR4KQorTChmd2Rfd3JpdGVfMGJ5dGVzX2FsaWduKToKKyNpZm5kZWYgVVNFX0FTX0JDT1BZCisjIGlmZGVmIFVTRV9BU19NRU1QQ1BZCisJbW92bAklZWR4LCAlZWF4CisjIGVsc2UKKwltb3ZsCURFU1QoJWVzcCksICVlYXgKKyMgZW5kaWYKKyNlbmRpZgorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChmd2Rfd3JpdGVfMzJieXRlc19hbGlnbik6CisJbW92ZHFhCS0zMiglZWF4KSwgJXhtbTAKKwltb3ZkcWEJJXhtbTAsIC0zMiglZWR4KQorTChmd2Rfd3JpdGVfMTZieXRlc19hbGlnbik6CisJbW92ZHFhCS0xNiglZWF4KSwgJXhtbTAKKwltb3ZkcWEJJXhtbTAsIC0xNiglZWR4KQorI2lmbmRlZiBVU0VfQVNfQkNPUFkKKyMgaWZkZWYgVVNFX0FTX01FTVBDUFkKKwltb3ZsCSVlZHgsICVlYXgKKyMgZWxzZQorCW1vdmwJREVTVCglZXNwKSwgJWVheAorIyBlbmRpZgorI2VuZGlmCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKGZ3ZF93cml0ZV81Ynl0ZXNfYWxpZ24pOgorCW1vdmwJLTUoJWVheCksICVlY3gKKwltb3ZsCS00KCVlYXgpLCAlZWF4CisJbW92bAklZWN4LCAtNSglZWR4KQorCW1vdmwJJWVheCwgLTQoJWVkeCkKKyNpZm5kZWYgVVNFX0FTX0JDT1BZCisjIGlmZGVmIFVTRV9BU19NRU1QQ1BZCisJbW92bAklZWR4LCAlZWF4CisjIGVsc2UKKwltb3ZsCURFU1QoJWVzcCksICVlYXgKKyMgZW5kaWYKKyNlbmRpZgorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChmd2Rfd3JpdGVfNDVieXRlc19hbGlnbik6CisJbW92ZHFhCS00NSglZWF4KSwgJXhtbTAKKwltb3ZkcWEJJXhtbTAsIC00NSglZWR4KQorTChmd2Rfd3JpdGVfMjlieXRlc19hbGlnbik6CisJbW92ZHFhCS0yOSglZWF4KSwgJXhtbTAKKwltb3ZkcWEJJXhtbTAsIC0yOSglZWR4KQorTChmd2Rfd3JpdGVfMTNieXRlc19hbGlnbik6CisJbW92cQktMTMoJWVheCksICV4bW0wCisJbW92cQkleG1tMCwgLTEzKCVlZHgpCisJbW92bAktNSglZWF4KSwgJWVjeAorCW1vdmwJJWVjeCwgLTUoJWVkeCkKKwltb3Z6YmwJLTEoJWVheCksICVlY3gKKwltb3ZiCSVjbCwgLTEoJWVkeCkKKyNpZm5kZWYgVVNFX0FTX0JDT1BZCisjIGlmZGVmIFVTRV9BU19NRU1QQ1BZCisJbW92bAklZWR4LCAlZWF4CisjIGVsc2UKKwltb3ZsCURFU1QoJWVzcCksICVlYXgKKyMgZW5kaWYKKyNlbmRpZgorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChmd2Rfd3JpdGVfMzdieXRlc19hbGlnbik6CisJbW92ZHFhCS0zNyglZWF4KSwgJXhtbTAKKwltb3ZkcWEJJXhtbTAsIC0zNyglZWR4KQorTChmd2Rfd3JpdGVfMjFieXRlc19hbGlnbik6CisJbW92ZHFhCS0yMSglZWF4KSwgJXhtbTAKKwltb3ZkcWEJJXhtbTAsIC0yMSglZWR4KQorCW1vdmwJLTUoJWVheCksICVlY3gKKwltb3ZsCSVlY3gsIC01KCVlZHgpCisJbW92emJsCS0xKCVlYXgpLCAlZWN4CisJbW92YgklY2wsIC0xKCVlZHgpCisjaWZuZGVmIFVTRV9BU19CQ09QWQorIyBpZmRlZiBVU0VfQVNfTUVNUENQWQorCW1vdmwJJWVkeCwgJWVheAorIyBlbHNlCisJbW92bAlERVNUKCVlc3ApLCAlZWF4CisjIGVuZGlmCisjZW5kaWYKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woZndkX3dyaXRlXzQxYnl0ZXNfYWxpZ24pOgorCW1vdmRxYQktNDEoJWVheCksICV4bW0wCisJbW92ZHFhCSV4bW0wLCAtNDEoJWVkeCkKK0woZndkX3dyaXRlXzI1Ynl0ZXNfYWxpZ24pOgorCW1vdmRxYQktMjUoJWVheCksICV4bW0wCisJbW92ZHFhCSV4bW0wLCAtMjUoJWVkeCkKK0woZndkX3dyaXRlXzlieXRlc19hbGlnbik6CisJbW92cQktOSglZWF4KSwgJXhtbTAKKwltb3ZxCSV4bW0wLCAtOSglZWR4KQorTChmd2Rfd3JpdGVfMWJ5dGVzX2FsaWduKToKKwltb3Z6YmwJLTEoJWVheCksICVlY3gKKwltb3ZiCSVjbCwgLTEoJWVkeCkKKyNpZm5kZWYgVVNFX0FTX0JDT1BZCisjIGlmZGVmIFVTRV9BU19NRU1QQ1BZCisJbW92bAklZWR4LCAlZWF4CisjIGVsc2UKKwltb3ZsCURFU1QoJWVzcCksICVlYXgKKyMgZW5kaWYKKyNlbmRpZgorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChmd2Rfd3JpdGVfMzNieXRlc19hbGlnbik6CisJbW92ZHFhCS0zMyglZWF4KSwgJXhtbTAKKwltb3ZkcWEJJXhtbTAsIC0zMyglZWR4KQorTChmd2Rfd3JpdGVfMTdieXRlc19hbGlnbik6CisJbW92ZHFhCS0xNyglZWF4KSwgJXhtbTAKKwltb3ZkcWEJJXhtbTAsIC0xNyglZWR4KQorCW1vdnpibAktMSglZWF4KSwgJWVjeAorCW1vdmIJJWNsLCAtMSglZWR4KQorI2lmbmRlZiBVU0VfQVNfQkNPUFkKKyMgaWZkZWYgVVNFX0FTX01FTVBDUFkKKwltb3ZsCSVlZHgsICVlYXgKKyMgZWxzZQorCW1vdmwJREVTVCglZXNwKSwgJWVheAorIyBlbmRpZgorI2VuZGlmCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKGZ3ZF93cml0ZV80NmJ5dGVzX2FsaWduKToKKwltb3ZkcWEJLTQ2KCVlYXgpLCAleG1tMAorCW1vdmRxYQkleG1tMCwgLTQ2KCVlZHgpCitMKGZ3ZF93cml0ZV8zMGJ5dGVzX2FsaWduKToKKwltb3ZkcWEJLTMwKCVlYXgpLCAleG1tMAorCW1vdmRxYQkleG1tMCwgLTMwKCVlZHgpCitMKGZ3ZF93cml0ZV8xNGJ5dGVzX2FsaWduKToKKwltb3ZxCS0xNCglZWF4KSwgJXhtbTAKKwltb3ZxCSV4bW0wLCAtMTQoJWVkeCkKK0woZndkX3dyaXRlXzZieXRlc19hbGlnbik6CisJbW92bAktNiglZWF4KSwgJWVjeAorCW1vdmwJJWVjeCwgLTYoJWVkeCkKKwltb3Z6d2wJLTIoJWVheCksICVlY3gKKwltb3Z3CSVjeCwgLTIoJWVkeCkKKyNpZm5kZWYgVVNFX0FTX0JDT1BZCisjIGlmZGVmIFVTRV9BU19NRU1QQ1BZCisJbW92bAklZWR4LCAlZWF4CisjIGVsc2UKKwltb3ZsCURFU1QoJWVzcCksICVlYXgKKyMgZW5kaWYKKyNlbmRpZgorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChmd2Rfd3JpdGVfMzhieXRlc19hbGlnbik6CisJbW92ZHFhCS0zOCglZWF4KSwgJXhtbTAKKwltb3ZkcWEJJXhtbTAsIC0zOCglZWR4KQorTChmd2Rfd3JpdGVfMjJieXRlc19hbGlnbik6CisJbW92ZHFhCS0yMiglZWF4KSwgJXhtbTAKKwltb3ZkcWEJJXhtbTAsIC0yMiglZWR4KQorCW1vdmwJLTYoJWVheCksICVlY3gKKwltb3ZsCSVlY3gsIC02KCVlZHgpCisJbW92endsCS0yKCVlYXgpLCAlZWN4CisJbW92dwklY3gsIC0yKCVlZHgpCisjaWZuZGVmIFVTRV9BU19CQ09QWQorIyBpZmRlZiBVU0VfQVNfTUVNUENQWQorCW1vdmwJJWVkeCwgJWVheAorIyBlbHNlCisJbW92bAlERVNUKCVlc3ApLCAlZWF4CisjIGVuZGlmCisjZW5kaWYKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woZndkX3dyaXRlXzQyYnl0ZXNfYWxpZ24pOgorCW1vdmRxYQktNDIoJWVheCksICV4bW0wCisJbW92ZHFhCSV4bW0wLCAtNDIoJWVkeCkKK0woZndkX3dyaXRlXzI2Ynl0ZXNfYWxpZ24pOgorCW1vdmRxYQktMjYoJWVheCksICV4bW0wCisJbW92ZHFhCSV4bW0wLCAtMjYoJWVkeCkKK0woZndkX3dyaXRlXzEwYnl0ZXNfYWxpZ24pOgorCW1vdnEJLTEwKCVlYXgpLCAleG1tMAorCW1vdnEJJXhtbTAsIC0xMCglZWR4KQorTChmd2Rfd3JpdGVfMmJ5dGVzX2FsaWduKToKKwltb3Z6d2wJLTIoJWVheCksICVlY3gKKwltb3Z3CSVjeCwgLTIoJWVkeCkKKyNpZm5kZWYgVVNFX0FTX0JDT1BZCisjIGlmZGVmIFVTRV9BU19NRU1QQ1BZCisJbW92bAklZWR4LCAlZWF4CisjIGVsc2UKKwltb3ZsCURFU1QoJWVzcCksICVlYXgKKyMgZW5kaWYKKyNlbmRpZgorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChmd2Rfd3JpdGVfMzRieXRlc19hbGlnbik6CisJbW92ZHFhCS0zNCglZWF4KSwgJXhtbTAKKwltb3ZkcWEJJXhtbTAsIC0zNCglZWR4KQorTChmd2Rfd3JpdGVfMThieXRlc19hbGlnbik6CisJbW92ZHFhCS0xOCglZWF4KSwgJXhtbTAKKwltb3ZkcWEJJXhtbTAsIC0xOCglZWR4KQorCW1vdnp3bAktMiglZWF4KSwgJWVjeAorCW1vdncJJWN4LCAtMiglZWR4KQorI2lmbmRlZiBVU0VfQVNfQkNPUFkKKyMgaWZkZWYgVVNFX0FTX01FTVBDUFkKKwltb3ZsCSVlZHgsICVlYXgKKyMgZWxzZQorCW1vdmwJREVTVCglZXNwKSwgJWVheAorIyBlbmRpZgorI2VuZGlmCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKGZ3ZF93cml0ZV80N2J5dGVzX2FsaWduKToKKwltb3ZkcWEJLTQ3KCVlYXgpLCAleG1tMAorCW1vdmRxYQkleG1tMCwgLTQ3KCVlZHgpCitMKGZ3ZF93cml0ZV8zMWJ5dGVzX2FsaWduKToKKwltb3ZkcWEJLTMxKCVlYXgpLCAleG1tMAorCW1vdmRxYQkleG1tMCwgLTMxKCVlZHgpCitMKGZ3ZF93cml0ZV8xNWJ5dGVzX2FsaWduKToKKwltb3ZxCS0xNSglZWF4KSwgJXhtbTAKKwltb3ZxCSV4bW0wLCAtMTUoJWVkeCkKK0woZndkX3dyaXRlXzdieXRlc19hbGlnbik6CisJbW92bAktNyglZWF4KSwgJWVjeAorCW1vdmwJJWVjeCwgLTcoJWVkeCkKKwltb3Z6d2wJLTMoJWVheCksICVlY3gKKwltb3Z6YmwJLTEoJWVheCksICVlYXgKKwltb3Z3CSVjeCwgLTMoJWVkeCkKKwltb3ZiCSVhbCwgLTEoJWVkeCkKKyNpZm5kZWYgVVNFX0FTX0JDT1BZCisjIGlmZGVmIFVTRV9BU19NRU1QQ1BZCisJbW92bAklZWR4LCAlZWF4CisjIGVsc2UKKwltb3ZsCURFU1QoJWVzcCksICVlYXgKKyMgZW5kaWYKKyNlbmRpZgorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChmd2Rfd3JpdGVfMzlieXRlc19hbGlnbik6CisJbW92ZHFhCS0zOSglZWF4KSwgJXhtbTAKKwltb3ZkcWEJJXhtbTAsIC0zOSglZWR4KQorTChmd2Rfd3JpdGVfMjNieXRlc19hbGlnbik6CisJbW92ZHFhCS0yMyglZWF4KSwgJXhtbTAKKwltb3ZkcWEJJXhtbTAsIC0yMyglZWR4KQorCW1vdmwJLTcoJWVheCksICVlY3gKKwltb3ZsCSVlY3gsIC03KCVlZHgpCisJbW92endsCS0zKCVlYXgpLCAlZWN4CisJbW92emJsCS0xKCVlYXgpLCAlZWF4CisJbW92dwklY3gsIC0zKCVlZHgpCisJbW92YgklYWwsIC0xKCVlZHgpCisjaWZuZGVmIFVTRV9BU19CQ09QWQorIyBpZmRlZiBVU0VfQVNfTUVNUENQWQorCW1vdmwJJWVkeCwgJWVheAorIyBlbHNlCisJbW92bAlERVNUKCVlc3ApLCAlZWF4CisjIGVuZGlmCisjZW5kaWYKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woZndkX3dyaXRlXzQzYnl0ZXNfYWxpZ24pOgorCW1vdmRxYQktNDMoJWVheCksICV4bW0wCisJbW92ZHFhCSV4bW0wLCAtNDMoJWVkeCkKK0woZndkX3dyaXRlXzI3Ynl0ZXNfYWxpZ24pOgorCW1vdmRxYQktMjcoJWVheCksICV4bW0wCisJbW92ZHFhCSV4bW0wLCAtMjcoJWVkeCkKK0woZndkX3dyaXRlXzExYnl0ZXNfYWxpZ24pOgorCW1vdnEJLTExKCVlYXgpLCAleG1tMAorCW1vdnEJJXhtbTAsIC0xMSglZWR4KQorTChmd2Rfd3JpdGVfM2J5dGVzX2FsaWduKToKKwltb3Z6d2wJLTMoJWVheCksICVlY3gKKwltb3Z6YmwJLTEoJWVheCksICVlYXgKKwltb3Z3CSVjeCwgLTMoJWVkeCkKKwltb3ZiCSVhbCwgLTEoJWVkeCkKKyNpZm5kZWYgVVNFX0FTX0JDT1BZCisjIGlmZGVmIFVTRV9BU19NRU1QQ1BZCisJbW92bAklZWR4LCAlZWF4CisjIGVsc2UKKwltb3ZsCURFU1QoJWVzcCksICVlYXgKKyMgZW5kaWYKKyNlbmRpZgorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChmd2Rfd3JpdGVfMzVieXRlc19hbGlnbik6CisJbW92ZHFhCS0zNSglZWF4KSwgJXhtbTAKKwltb3ZkcWEJJXhtbTAsIC0zNSglZWR4KQorTChmd2Rfd3JpdGVfMTlieXRlc19hbGlnbik6CisJbW92ZHFhCS0xOSglZWF4KSwgJXhtbTAKKwltb3ZkcWEJJXhtbTAsIC0xOSglZWR4KQorCW1vdnp3bAktMyglZWF4KSwgJWVjeAorCW1vdnpibAktMSglZWF4KSwgJWVheAorCW1vdncJJWN4LCAtMyglZWR4KQorCW1vdmIJJWFsLCAtMSglZWR4KQorI2lmbmRlZiBVU0VfQVNfQkNPUFkKKyMgaWZkZWYgVVNFX0FTX01FTVBDUFkKKwltb3ZsCSVlZHgsICVlYXgKKyMgZWxzZQorCW1vdmwJREVTVCglZXNwKSwgJWVheAorIyBlbmRpZgorI2VuZGlmCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKGZ3ZF93cml0ZV80NGJ5dGVzX2FsaWduKToKKwltb3ZkcWEJLTQ0KCVlYXgpLCAleG1tMAorCW1vdmRxYQkleG1tMCwgLTQ0KCVlZHgpCitMKGZ3ZF93cml0ZV8yOGJ5dGVzX2FsaWduKToKKwltb3ZkcWEJLTI4KCVlYXgpLCAleG1tMAorCW1vdmRxYQkleG1tMCwgLTI4KCVlZHgpCitMKGZ3ZF93cml0ZV8xMmJ5dGVzX2FsaWduKToKKwltb3ZxCS0xMiglZWF4KSwgJXhtbTAKKwltb3ZxCSV4bW0wLCAtMTIoJWVkeCkKK0woZndkX3dyaXRlXzRieXRlc19hbGlnbik6CisJbW92bAktNCglZWF4KSwgJWVjeAorCW1vdmwJJWVjeCwgLTQoJWVkeCkKKyNpZm5kZWYgVVNFX0FTX0JDT1BZCisjIGlmZGVmIFVTRV9BU19NRU1QQ1BZCisJbW92bAklZWR4LCAlZWF4CisjIGVsc2UKKwltb3ZsCURFU1QoJWVzcCksICVlYXgKKyMgZW5kaWYKKyNlbmRpZgorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChmd2Rfd3JpdGVfMzZieXRlc19hbGlnbik6CisJbW92ZHFhCS0zNiglZWF4KSwgJXhtbTAKKwltb3ZkcWEJJXhtbTAsIC0zNiglZWR4KQorTChmd2Rfd3JpdGVfMjBieXRlc19hbGlnbik6CisJbW92ZHFhCS0yMCglZWF4KSwgJXhtbTAKKwltb3ZkcWEJJXhtbTAsIC0yMCglZWR4KQorCW1vdmwJLTQoJWVheCksICVlY3gKKwltb3ZsCSVlY3gsIC00KCVlZHgpCisjaWZuZGVmIFVTRV9BU19CQ09QWQorIyBpZmRlZiBVU0VfQVNfTUVNUENQWQorCW1vdmwJJWVkeCwgJWVheAorIyBlbHNlCisJbW92bAlERVNUKCVlc3ApLCAlZWF4CisjIGVuZGlmCisjZW5kaWYKKwlSRVRVUk5fRU5ECisKKwlDRklfUFVTSCAoJWVkaSkKKworCS5wMmFsaWduIDQKK0wobGFyZ2VfcGFnZSk6CisJbW92ZHF1CSglZWF4KSwgJXhtbTEKKyNpZmRlZiBVU0VfQVNfTUVNTU9WRQorCW1vdmwJREVTVCs0KCVlc3ApLCAlZWRpCisJbW92ZHF1CSV4bW0wLCAoJWVkaSkKKyNlbmRpZgorCWxlYQkxNiglZWF4KSwgJWVheAorCW1vdm50ZHEJJXhtbTEsICglZWR4KQorCWxlYQkxNiglZWR4KSwgJWVkeAorCWxlYQktMHg5MCglZWN4KSwgJWVjeAorCVBPUCAoJWVkaSkKKworCS5wMmFsaWduIDQKK0wobGFyZ2VfcGFnZV9sb29wKToKKwltb3ZkcXUJKCVlYXgpLCAleG1tMAorCW1vdmRxdQkweDEwKCVlYXgpLCAleG1tMQorCW1vdmRxdQkweDIwKCVlYXgpLCAleG1tMgorCW1vdmRxdQkweDMwKCVlYXgpLCAleG1tMworCW1vdmRxdQkweDQwKCVlYXgpLCAleG1tNAorCW1vdmRxdQkweDUwKCVlYXgpLCAleG1tNQorCW1vdmRxdQkweDYwKCVlYXgpLCAleG1tNgorCW1vdmRxdQkweDcwKCVlYXgpLCAleG1tNworCWxlYQkweDgwKCVlYXgpLCAlZWF4CisKKwlzdWIJJDB4ODAsICVlY3gKKwltb3ZudGRxCSV4bW0wLCAoJWVkeCkKKwltb3ZudGRxCSV4bW0xLCAweDEwKCVlZHgpCisJbW92bnRkcQkleG1tMiwgMHgyMCglZWR4KQorCW1vdm50ZHEJJXhtbTMsIDB4MzAoJWVkeCkKKwltb3ZudGRxCSV4bW00LCAweDQwKCVlZHgpCisJbW92bnRkcQkleG1tNSwgMHg1MCglZWR4KQorCW1vdm50ZHEJJXhtbTYsIDB4NjAoJWVkeCkKKwltb3ZudGRxCSV4bW03LCAweDcwKCVlZHgpCisJbGVhCTB4ODAoJWVkeCksICVlZHgKKwlqYWUJTChsYXJnZV9wYWdlX2xvb3ApCisJY21wCSQtMHg0MCwgJWVjeAorCWxlYQkweDgwKCVlY3gpLCAlZWN4CisJamwJTChsYXJnZV9wYWdlX2xlc3NfNjRieXRlcykKKworCW1vdmRxdQkoJWVheCksICV4bW0wCisJbW92ZHF1CTB4MTAoJWVheCksICV4bW0xCisJbW92ZHF1CTB4MjAoJWVheCksICV4bW0yCisJbW92ZHF1CTB4MzAoJWVheCksICV4bW0zCisJbGVhCTB4NDAoJWVheCksICVlYXgKKworCW1vdm50ZHEJJXhtbTAsICglZWR4KQorCW1vdm50ZHEJJXhtbTEsIDB4MTAoJWVkeCkKKwltb3ZudGRxCSV4bW0yLCAweDIwKCVlZHgpCisJbW92bnRkcQkleG1tMywgMHgzMCglZWR4KQorCWxlYQkweDQwKCVlZHgpLCAlZWR4CisJc3ViCSQweDQwLCAlZWN4CitMKGxhcmdlX3BhZ2VfbGVzc182NGJ5dGVzKToKKwljbXAJJDMyLCAlZWN4CisJamIJTChsYXJnZV9wYWdlX2xlc3NfMzJieXRlcykKKwltb3ZkcXUJKCVlYXgpLCAleG1tMAorCW1vdmRxdQkweDEwKCVlYXgpLCAleG1tMQorCWxlYQkweDIwKCVlYXgpLCAlZWF4CisJbW92bnRkcQkleG1tMCwgKCVlZHgpCisJbW92bnRkcQkleG1tMSwgMHgxMCglZWR4KQorCWxlYQkweDIwKCVlZHgpLCAlZWR4CisJc3ViCSQweDIwLCAlZWN4CitMKGxhcmdlX3BhZ2VfbGVzc18zMmJ5dGVzKToKKwlhZGQJJWVjeCwgJWVkeAorCWFkZAklZWN4LCAlZWF4CisJc2ZlbmNlCisJQlJBTkNIX1RPX0pNUFRCTF9FTlRSWSAoTCh0YWJsZV80OGJ5dGVzX2Z3ZCksICVlY3gsIDQpCisKKwkucDJhbGlnbiA0CitMKGJrX3dyaXRlXzQ0Ynl0ZXMpOgorCW1vdnEJMzYoJWVheCksICV4bW0wCisJbW92cQkleG1tMCwgMzYoJWVkeCkKK0woYmtfd3JpdGVfMzZieXRlcyk6CisJbW92cQkyOCglZWF4KSwgJXhtbTAKKwltb3ZxCSV4bW0wLCAyOCglZWR4KQorTChia193cml0ZV8yOGJ5dGVzKToKKwltb3ZxCTIwKCVlYXgpLCAleG1tMAorCW1vdnEJJXhtbTAsIDIwKCVlZHgpCitMKGJrX3dyaXRlXzIwYnl0ZXMpOgorCW1vdnEJMTIoJWVheCksICV4bW0wCisJbW92cQkleG1tMCwgMTIoJWVkeCkKK0woYmtfd3JpdGVfMTJieXRlcyk6CisJbW92cQk0KCVlYXgpLCAleG1tMAorCW1vdnEJJXhtbTAsIDQoJWVkeCkKK0woYmtfd3JpdGVfNGJ5dGVzKToKKwltb3ZsCSglZWF4KSwgJWVjeAorCW1vdmwJJWVjeCwgKCVlZHgpCitMKGJrX3dyaXRlXzBieXRlcyk6CisjaWZuZGVmIFVTRV9BU19CQ09QWQorCW1vdmwJREVTVCglZXNwKSwgJWVheAorIyBpZmRlZiBVU0VfQVNfTUVNUENQWQorCW1vdmwJTEVOKCVlc3ApLCAlZWN4CisJYWRkCSVlY3gsICVlYXgKKyMgZW5kaWYKKyNlbmRpZgorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChia193cml0ZV80MGJ5dGVzKToKKwltb3ZxCTMyKCVlYXgpLCAleG1tMAorCW1vdnEJJXhtbTAsIDMyKCVlZHgpCitMKGJrX3dyaXRlXzMyYnl0ZXMpOgorCW1vdnEJMjQoJWVheCksICV4bW0wCisJbW92cQkleG1tMCwgMjQoJWVkeCkKK0woYmtfd3JpdGVfMjRieXRlcyk6CisJbW92cQkxNiglZWF4KSwgJXhtbTAKKwltb3ZxCSV4bW0wLCAxNiglZWR4KQorTChia193cml0ZV8xNmJ5dGVzKToKKwltb3ZxCTgoJWVheCksICV4bW0wCisJbW92cQkleG1tMCwgOCglZWR4KQorTChia193cml0ZV84Ynl0ZXMpOgorCW1vdnEJKCVlYXgpLCAleG1tMAorCW1vdnEJJXhtbTAsICglZWR4KQorI2lmbmRlZiBVU0VfQVNfQkNPUFkKKwltb3ZsCURFU1QoJWVzcCksICVlYXgKKyMgaWZkZWYgVVNFX0FTX01FTVBDUFkKKwltb3ZsCUxFTiglZXNwKSwgJWVjeAorCWFkZAklZWN4LCAlZWF4CisjIGVuZGlmCisjZW5kaWYKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woYmtfd3JpdGVfNDVieXRlcyk6CisJbW92cQkzNyglZWF4KSwgJXhtbTAKKwltb3ZxCSV4bW0wLCAzNyglZWR4KQorTChia193cml0ZV8zN2J5dGVzKToKKwltb3ZxCTI5KCVlYXgpLCAleG1tMAorCW1vdnEJJXhtbTAsIDI5KCVlZHgpCitMKGJrX3dyaXRlXzI5Ynl0ZXMpOgorCW1vdnEJMjEoJWVheCksICV4bW0wCisJbW92cQkleG1tMCwgMjEoJWVkeCkKK0woYmtfd3JpdGVfMjFieXRlcyk6CisJbW92cQkxMyglZWF4KSwgJXhtbTAKKwltb3ZxCSV4bW0wLCAxMyglZWR4KQorTChia193cml0ZV8xM2J5dGVzKToKKwltb3ZxCTUoJWVheCksICV4bW0wCisJbW92cQkleG1tMCwgNSglZWR4KQorTChia193cml0ZV81Ynl0ZXMpOgorCW1vdmwJMSglZWF4KSwgJWVjeAorCW1vdmwJJWVjeCwgMSglZWR4KQorTChia193cml0ZV8xYnl0ZXMpOgorCW1vdnpibAkoJWVheCksICVlY3gKKwltb3ZiCSVjbCwgKCVlZHgpCisjaWZuZGVmIFVTRV9BU19CQ09QWQorCW1vdmwJREVTVCglZXNwKSwgJWVheAorIyBpZmRlZiBVU0VfQVNfTUVNUENQWQorCW1vdmwJTEVOKCVlc3ApLCAlZWN4CisJYWRkCSVlY3gsICVlYXgKKyMgZW5kaWYKKyNlbmRpZgorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChia193cml0ZV80MWJ5dGVzKToKKwltb3ZxCTMzKCVlYXgpLCAleG1tMAorCW1vdnEJJXhtbTAsIDMzKCVlZHgpCitMKGJrX3dyaXRlXzMzYnl0ZXMpOgorCW1vdnEJMjUoJWVheCksICV4bW0wCisJbW92cQkleG1tMCwgMjUoJWVkeCkKK0woYmtfd3JpdGVfMjVieXRlcyk6CisJbW92cQkxNyglZWF4KSwgJXhtbTAKKwltb3ZxCSV4bW0wLCAxNyglZWR4KQorTChia193cml0ZV8xN2J5dGVzKToKKwltb3ZxCTkoJWVheCksICV4bW0wCisJbW92cQkleG1tMCwgOSglZWR4KQorTChia193cml0ZV85Ynl0ZXMpOgorCW1vdnEJMSglZWF4KSwgJXhtbTAKKwltb3ZxCSV4bW0wLCAxKCVlZHgpCisJbW92emJsCSglZWF4KSwgJWVjeAorCW1vdmIJJWNsLCAoJWVkeCkKKyNpZm5kZWYgVVNFX0FTX0JDT1BZCisJbW92bAlERVNUKCVlc3ApLCAlZWF4CisjIGlmZGVmIFVTRV9BU19NRU1QQ1BZCisJbW92bAlMRU4oJWVzcCksICVlY3gKKwlhZGQJJWVjeCwgJWVheAorIyBlbmRpZgorI2VuZGlmCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKGJrX3dyaXRlXzQ2Ynl0ZXMpOgorCW1vdnEJMzgoJWVheCksICV4bW0wCisJbW92cQkleG1tMCwgMzgoJWVkeCkKK0woYmtfd3JpdGVfMzhieXRlcyk6CisJbW92cQkzMCglZWF4KSwgJXhtbTAKKwltb3ZxCSV4bW0wLCAzMCglZWR4KQorTChia193cml0ZV8zMGJ5dGVzKToKKwltb3ZxCTIyKCVlYXgpLCAleG1tMAorCW1vdnEJJXhtbTAsIDIyKCVlZHgpCitMKGJrX3dyaXRlXzIyYnl0ZXMpOgorCW1vdnEJMTQoJWVheCksICV4bW0wCisJbW92cQkleG1tMCwgMTQoJWVkeCkKK0woYmtfd3JpdGVfMTRieXRlcyk6CisJbW92cQk2KCVlYXgpLCAleG1tMAorCW1vdnEJJXhtbTAsIDYoJWVkeCkKK0woYmtfd3JpdGVfNmJ5dGVzKToKKwltb3ZsCTIoJWVheCksICVlY3gKKwltb3ZsCSVlY3gsIDIoJWVkeCkKKwltb3Z6d2wJKCVlYXgpLCAlZWN4CisJbW92dwklY3gsICglZWR4KQorI2lmbmRlZiBVU0VfQVNfQkNPUFkKKwltb3ZsCURFU1QoJWVzcCksICVlYXgKKyMgaWZkZWYgVVNFX0FTX01FTVBDUFkKKwltb3ZsCUxFTiglZXNwKSwgJWVjeAorCWFkZAklZWN4LCAlZWF4CisjIGVuZGlmCisjZW5kaWYKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woYmtfd3JpdGVfNDJieXRlcyk6CisJbW92cQkzNCglZWF4KSwgJXhtbTAKKwltb3ZxCSV4bW0wLCAzNCglZWR4KQorTChia193cml0ZV8zNGJ5dGVzKToKKwltb3ZxCTI2KCVlYXgpLCAleG1tMAorCW1vdnEJJXhtbTAsIDI2KCVlZHgpCitMKGJrX3dyaXRlXzI2Ynl0ZXMpOgorCW1vdnEJMTgoJWVheCksICV4bW0wCisJbW92cQkleG1tMCwgMTgoJWVkeCkKK0woYmtfd3JpdGVfMThieXRlcyk6CisJbW92cQkxMCglZWF4KSwgJXhtbTAKKwltb3ZxCSV4bW0wLCAxMCglZWR4KQorTChia193cml0ZV8xMGJ5dGVzKToKKwltb3ZxCTIoJWVheCksICV4bW0wCisJbW92cQkleG1tMCwgMiglZWR4KQorTChia193cml0ZV8yYnl0ZXMpOgorCW1vdnp3bAkoJWVheCksICVlY3gKKwltb3Z3CSVjeCwgKCVlZHgpCisjaWZuZGVmIFVTRV9BU19CQ09QWQorCW1vdmwJREVTVCglZXNwKSwgJWVheAorIyBpZmRlZiBVU0VfQVNfTUVNUENQWQorCW1vdmwJTEVOKCVlc3ApLCAlZWN4CisJYWRkCSVlY3gsICVlYXgKKyMgZW5kaWYKKyNlbmRpZgorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChia193cml0ZV80N2J5dGVzKToKKwltb3ZxCTM5KCVlYXgpLCAleG1tMAorCW1vdnEJJXhtbTAsIDM5KCVlZHgpCitMKGJrX3dyaXRlXzM5Ynl0ZXMpOgorCW1vdnEJMzEoJWVheCksICV4bW0wCisJbW92cQkleG1tMCwgMzEoJWVkeCkKK0woYmtfd3JpdGVfMzFieXRlcyk6CisJbW92cQkyMyglZWF4KSwgJXhtbTAKKwltb3ZxCSV4bW0wLCAyMyglZWR4KQorTChia193cml0ZV8yM2J5dGVzKToKKwltb3ZxCTE1KCVlYXgpLCAleG1tMAorCW1vdnEJJXhtbTAsIDE1KCVlZHgpCitMKGJrX3dyaXRlXzE1Ynl0ZXMpOgorCW1vdnEJNyglZWF4KSwgJXhtbTAKKwltb3ZxCSV4bW0wLCA3KCVlZHgpCitMKGJrX3dyaXRlXzdieXRlcyk6CisJbW92bAkzKCVlYXgpLCAlZWN4CisJbW92bAklZWN4LCAzKCVlZHgpCisJbW92endsCTEoJWVheCksICVlY3gKKwltb3Z3CSVjeCwgMSglZWR4KQorCW1vdnpibAkoJWVheCksICVlYXgKKwltb3ZiCSVhbCwgKCVlZHgpCisjaWZuZGVmIFVTRV9BU19CQ09QWQorCW1vdmwJREVTVCglZXNwKSwgJWVheAorIyBpZmRlZiBVU0VfQVNfTUVNUENQWQorCW1vdmwJTEVOKCVlc3ApLCAlZWN4CisJYWRkCSVlY3gsICVlYXgKKyMgZW5kaWYKKyNlbmRpZgorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChia193cml0ZV80M2J5dGVzKToKKwltb3ZxCTM1KCVlYXgpLCAleG1tMAorCW1vdnEJJXhtbTAsIDM1KCVlZHgpCitMKGJrX3dyaXRlXzM1Ynl0ZXMpOgorCW1vdnEJMjcoJWVheCksICV4bW0wCisJbW92cQkleG1tMCwgMjcoJWVkeCkKK0woYmtfd3JpdGVfMjdieXRlcyk6CisJbW92cQkxOSglZWF4KSwgJXhtbTAKKwltb3ZxCSV4bW0wLCAxOSglZWR4KQorTChia193cml0ZV8xOWJ5dGVzKToKKwltb3ZxCTExKCVlYXgpLCAleG1tMAorCW1vdnEJJXhtbTAsIDExKCVlZHgpCitMKGJrX3dyaXRlXzExYnl0ZXMpOgorCW1vdnEJMyglZWF4KSwgJXhtbTAKKwltb3ZxCSV4bW0wLCAzKCVlZHgpCitMKGJrX3dyaXRlXzNieXRlcyk6CisJbW92endsCTEoJWVheCksICVlY3gKKwltb3Z3CSVjeCwgMSglZWR4KQorCW1vdnpibAkoJWVheCksICVlYXgKKwltb3ZiCSVhbCwgKCVlZHgpCisjaWZuZGVmIFVTRV9BU19CQ09QWQorCW1vdmwJREVTVCglZXNwKSwgJWVheAorIyBpZmRlZiBVU0VfQVNfTUVNUENQWQorCW1vdmwJTEVOKCVlc3ApLCAlZWN4CisJYWRkCSVlY3gsICVlYXgKKyMgZW5kaWYKKyNlbmRpZgorCVJFVFVSTl9FTkQKKworCisJLnB1c2hzZWN0aW9uIC5yb2RhdGEuc3NzZTMsImEiLEBwcm9nYml0cworCS5wMmFsaWduIDIKK0wodGFibGVfNDhieXRlc19md2QpOgorCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV8wYnl0ZXMpLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkKSkKKwkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfMWJ5dGVzKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZCkpCisJLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzJieXRlcyksIEwodGFibGVfNDhieXRlc19md2QpKQorCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV8zYnl0ZXMpLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkKSkKKwkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfNGJ5dGVzKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZCkpCisJLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzVieXRlcyksIEwodGFibGVfNDhieXRlc19md2QpKQorCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV82Ynl0ZXMpLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkKSkKKwkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfN2J5dGVzKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZCkpCisJLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzhieXRlcyksIEwodGFibGVfNDhieXRlc19md2QpKQorCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV85Ynl0ZXMpLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkKSkKKwkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfMTBieXRlcyksIEwodGFibGVfNDhieXRlc19md2QpKQorCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV8xMWJ5dGVzKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZCkpCisJLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzEyYnl0ZXMpLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkKSkKKwkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfMTNieXRlcyksIEwodGFibGVfNDhieXRlc19md2QpKQorCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV8xNGJ5dGVzKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZCkpCisJLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzE1Ynl0ZXMpLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkKSkKKwkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfMTZieXRlcyksIEwodGFibGVfNDhieXRlc19md2QpKQorCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV8xN2J5dGVzKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZCkpCisJLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzE4Ynl0ZXMpLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkKSkKKwkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfMTlieXRlcyksIEwodGFibGVfNDhieXRlc19md2QpKQorCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV8yMGJ5dGVzKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZCkpCisJLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzIxYnl0ZXMpLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkKSkKKwkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfMjJieXRlcyksIEwodGFibGVfNDhieXRlc19md2QpKQorCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV8yM2J5dGVzKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZCkpCisJLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzI0Ynl0ZXMpLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkKSkKKwkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfMjVieXRlcyksIEwodGFibGVfNDhieXRlc19md2QpKQorCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV8yNmJ5dGVzKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZCkpCisJLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzI3Ynl0ZXMpLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkKSkKKwkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfMjhieXRlcyksIEwodGFibGVfNDhieXRlc19md2QpKQorCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV8yOWJ5dGVzKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZCkpCisJLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzMwYnl0ZXMpLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkKSkKKwkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfMzFieXRlcyksIEwodGFibGVfNDhieXRlc19md2QpKQorCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV8zMmJ5dGVzKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZCkpCisJLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzMzYnl0ZXMpLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkKSkKKwkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfMzRieXRlcyksIEwodGFibGVfNDhieXRlc19md2QpKQorCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV8zNWJ5dGVzKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZCkpCisJLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzM2Ynl0ZXMpLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkKSkKKwkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfMzdieXRlcyksIEwodGFibGVfNDhieXRlc19md2QpKQorCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV8zOGJ5dGVzKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZCkpCisJLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzM5Ynl0ZXMpLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkKSkKKwkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfNDBieXRlcyksIEwodGFibGVfNDhieXRlc19md2QpKQorCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV80MWJ5dGVzKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZCkpCisJLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzQyYnl0ZXMpLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkKSkKKwkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfNDNieXRlcyksIEwodGFibGVfNDhieXRlc19md2QpKQorCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV80NGJ5dGVzKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZCkpCisJLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzQ1Ynl0ZXMpLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkKSkKKwkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfNDZieXRlcyksIEwodGFibGVfNDhieXRlc19md2QpKQorCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV80N2J5dGVzKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZCkpCisKKwkucDJhbGlnbiAyCitMKHRhYmxlXzQ4Ynl0ZXNfZndkX2FsaWduKToKKwkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfMGJ5dGVzX2FsaWduKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZF9hbGlnbikpCisJLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzFieXRlc19hbGlnbiksIEwodGFibGVfNDhieXRlc19md2RfYWxpZ24pKQorCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV8yYnl0ZXNfYWxpZ24pLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkX2FsaWduKSkKKwkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfM2J5dGVzX2FsaWduKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZF9hbGlnbikpCisJLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzRieXRlc19hbGlnbiksIEwodGFibGVfNDhieXRlc19md2RfYWxpZ24pKQorCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV81Ynl0ZXNfYWxpZ24pLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkX2FsaWduKSkKKwkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfNmJ5dGVzX2FsaWduKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZF9hbGlnbikpCisJLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzdieXRlc19hbGlnbiksIEwodGFibGVfNDhieXRlc19md2RfYWxpZ24pKQorCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV84Ynl0ZXNfYWxpZ24pLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkX2FsaWduKSkKKwkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfOWJ5dGVzX2FsaWduKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZF9hbGlnbikpCisJLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzEwYnl0ZXNfYWxpZ24pLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkX2FsaWduKSkKKwkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfMTFieXRlc19hbGlnbiksIEwodGFibGVfNDhieXRlc19md2RfYWxpZ24pKQorCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV8xMmJ5dGVzX2FsaWduKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZF9hbGlnbikpCisJLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzEzYnl0ZXNfYWxpZ24pLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkX2FsaWduKSkKKwkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfMTRieXRlc19hbGlnbiksIEwodGFibGVfNDhieXRlc19md2RfYWxpZ24pKQorCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV8xNWJ5dGVzX2FsaWduKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZF9hbGlnbikpCisJLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzE2Ynl0ZXNfYWxpZ24pLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkX2FsaWduKSkKKwkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfMTdieXRlc19hbGlnbiksIEwodGFibGVfNDhieXRlc19md2RfYWxpZ24pKQorCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV8xOGJ5dGVzX2FsaWduKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZF9hbGlnbikpCisJLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzE5Ynl0ZXNfYWxpZ24pLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkX2FsaWduKSkKKwkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfMjBieXRlc19hbGlnbiksIEwodGFibGVfNDhieXRlc19md2RfYWxpZ24pKQorCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV8yMWJ5dGVzX2FsaWduKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZF9hbGlnbikpCisJLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzIyYnl0ZXNfYWxpZ24pLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkX2FsaWduKSkKKwkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfMjNieXRlc19hbGlnbiksIEwodGFibGVfNDhieXRlc19md2RfYWxpZ24pKQorCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV8yNGJ5dGVzX2FsaWduKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZF9hbGlnbikpCisJLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzI1Ynl0ZXNfYWxpZ24pLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkX2FsaWduKSkKKwkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfMjZieXRlc19hbGlnbiksIEwodGFibGVfNDhieXRlc19md2RfYWxpZ24pKQorCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV8yN2J5dGVzX2FsaWduKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZF9hbGlnbikpCisJLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzI4Ynl0ZXNfYWxpZ24pLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkX2FsaWduKSkKKwkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfMjlieXRlc19hbGlnbiksIEwodGFibGVfNDhieXRlc19md2RfYWxpZ24pKQorCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV8zMGJ5dGVzX2FsaWduKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZF9hbGlnbikpCisJLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzMxYnl0ZXNfYWxpZ24pLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkX2FsaWduKSkKKwkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfMzJieXRlc19hbGlnbiksIEwodGFibGVfNDhieXRlc19md2RfYWxpZ24pKQorCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV8zM2J5dGVzX2FsaWduKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZF9hbGlnbikpCisJLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzM0Ynl0ZXNfYWxpZ24pLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkX2FsaWduKSkKKwkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfMzVieXRlc19hbGlnbiksIEwodGFibGVfNDhieXRlc19md2RfYWxpZ24pKQorCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV8zNmJ5dGVzX2FsaWduKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZF9hbGlnbikpCisJLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzM3Ynl0ZXNfYWxpZ24pLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkX2FsaWduKSkKKwkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfMzhieXRlc19hbGlnbiksIEwodGFibGVfNDhieXRlc19md2RfYWxpZ24pKQorCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV8zOWJ5dGVzX2FsaWduKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZF9hbGlnbikpCisJLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzQwYnl0ZXNfYWxpZ24pLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkX2FsaWduKSkKKwkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfNDFieXRlc19hbGlnbiksIEwodGFibGVfNDhieXRlc19md2RfYWxpZ24pKQorCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV80MmJ5dGVzX2FsaWduKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZF9hbGlnbikpCisJLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzQzYnl0ZXNfYWxpZ24pLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkX2FsaWduKSkKKwkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfNDRieXRlc19hbGlnbiksIEwodGFibGVfNDhieXRlc19md2RfYWxpZ24pKQorCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV80NWJ5dGVzX2FsaWduKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZF9hbGlnbikpCisJLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzQ2Ynl0ZXNfYWxpZ24pLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkX2FsaWduKSkKKwkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfNDdieXRlc19hbGlnbiksIEwodGFibGVfNDhieXRlc19md2RfYWxpZ24pKQorCisJLnAyYWxpZ24gMgorTChzaGxfdGFibGUpOgorCS5pbnQJSk1QVEJMIChMKHNobF8wKSwgTChzaGxfdGFibGUpKQorCS5pbnQJSk1QVEJMIChMKHNobF8xKSwgTChzaGxfdGFibGUpKQorCS5pbnQJSk1QVEJMIChMKHNobF8yKSwgTChzaGxfdGFibGUpKQorCS5pbnQJSk1QVEJMIChMKHNobF8zKSwgTChzaGxfdGFibGUpKQorCS5pbnQJSk1QVEJMIChMKHNobF80KSwgTChzaGxfdGFibGUpKQorCS5pbnQJSk1QVEJMIChMKHNobF81KSwgTChzaGxfdGFibGUpKQorCS5pbnQJSk1QVEJMIChMKHNobF82KSwgTChzaGxfdGFibGUpKQorCS5pbnQJSk1QVEJMIChMKHNobF83KSwgTChzaGxfdGFibGUpKQorCS5pbnQJSk1QVEJMIChMKHNobF84KSwgTChzaGxfdGFibGUpKQorCS5pbnQJSk1QVEJMIChMKHNobF85KSwgTChzaGxfdGFibGUpKQorCS5pbnQJSk1QVEJMIChMKHNobF8xMCksIEwoc2hsX3RhYmxlKSkKKwkuaW50CUpNUFRCTCAoTChzaGxfMTEpLCBMKHNobF90YWJsZSkpCisJLmludAlKTVBUQkwgKEwoc2hsXzEyKSwgTChzaGxfdGFibGUpKQorCS5pbnQJSk1QVEJMIChMKHNobF8xMyksIEwoc2hsX3RhYmxlKSkKKwkuaW50CUpNUFRCTCAoTChzaGxfMTQpLCBMKHNobF90YWJsZSkpCisJLmludAlKTVBUQkwgKEwoc2hsXzE1KSwgTChzaGxfdGFibGUpKQorCisJLnAyYWxpZ24gMgorTCh0YWJsZV80OF9ieXRlc19id2QpOgorCS5pbnQJSk1QVEJMIChMKGJrX3dyaXRlXzBieXRlcyksIEwodGFibGVfNDhfYnl0ZXNfYndkKSkKKwkuaW50CUpNUFRCTCAoTChia193cml0ZV8xYnl0ZXMpLCBMKHRhYmxlXzQ4X2J5dGVzX2J3ZCkpCisJLmludAlKTVBUQkwgKEwoYmtfd3JpdGVfMmJ5dGVzKSwgTCh0YWJsZV80OF9ieXRlc19id2QpKQorCS5pbnQJSk1QVEJMIChMKGJrX3dyaXRlXzNieXRlcyksIEwodGFibGVfNDhfYnl0ZXNfYndkKSkKKwkuaW50CUpNUFRCTCAoTChia193cml0ZV80Ynl0ZXMpLCBMKHRhYmxlXzQ4X2J5dGVzX2J3ZCkpCisJLmludAlKTVBUQkwgKEwoYmtfd3JpdGVfNWJ5dGVzKSwgTCh0YWJsZV80OF9ieXRlc19id2QpKQorCS5pbnQJSk1QVEJMIChMKGJrX3dyaXRlXzZieXRlcyksIEwodGFibGVfNDhfYnl0ZXNfYndkKSkKKwkuaW50CUpNUFRCTCAoTChia193cml0ZV83Ynl0ZXMpLCBMKHRhYmxlXzQ4X2J5dGVzX2J3ZCkpCisJLmludAlKTVBUQkwgKEwoYmtfd3JpdGVfOGJ5dGVzKSwgTCh0YWJsZV80OF9ieXRlc19id2QpKQorCS5pbnQJSk1QVEJMIChMKGJrX3dyaXRlXzlieXRlcyksIEwodGFibGVfNDhfYnl0ZXNfYndkKSkKKwkuaW50CUpNUFRCTCAoTChia193cml0ZV8xMGJ5dGVzKSwgTCh0YWJsZV80OF9ieXRlc19id2QpKQorCS5pbnQJSk1QVEJMIChMKGJrX3dyaXRlXzExYnl0ZXMpLCBMKHRhYmxlXzQ4X2J5dGVzX2J3ZCkpCisJLmludAlKTVBUQkwgKEwoYmtfd3JpdGVfMTJieXRlcyksIEwodGFibGVfNDhfYnl0ZXNfYndkKSkKKwkuaW50CUpNUFRCTCAoTChia193cml0ZV8xM2J5dGVzKSwgTCh0YWJsZV80OF9ieXRlc19id2QpKQorCS5pbnQJSk1QVEJMIChMKGJrX3dyaXRlXzE0Ynl0ZXMpLCBMKHRhYmxlXzQ4X2J5dGVzX2J3ZCkpCisJLmludAlKTVBUQkwgKEwoYmtfd3JpdGVfMTVieXRlcyksIEwodGFibGVfNDhfYnl0ZXNfYndkKSkKKwkuaW50CUpNUFRCTCAoTChia193cml0ZV8xNmJ5dGVzKSwgTCh0YWJsZV80OF9ieXRlc19id2QpKQorCS5pbnQJSk1QVEJMIChMKGJrX3dyaXRlXzE3Ynl0ZXMpLCBMKHRhYmxlXzQ4X2J5dGVzX2J3ZCkpCisJLmludAlKTVBUQkwgKEwoYmtfd3JpdGVfMThieXRlcyksIEwodGFibGVfNDhfYnl0ZXNfYndkKSkKKwkuaW50CUpNUFRCTCAoTChia193cml0ZV8xOWJ5dGVzKSwgTCh0YWJsZV80OF9ieXRlc19id2QpKQorCS5pbnQJSk1QVEJMIChMKGJrX3dyaXRlXzIwYnl0ZXMpLCBMKHRhYmxlXzQ4X2J5dGVzX2J3ZCkpCisJLmludAlKTVBUQkwgKEwoYmtfd3JpdGVfMjFieXRlcyksIEwodGFibGVfNDhfYnl0ZXNfYndkKSkKKwkuaW50CUpNUFRCTCAoTChia193cml0ZV8yMmJ5dGVzKSwgTCh0YWJsZV80OF9ieXRlc19id2QpKQorCS5pbnQJSk1QVEJMIChMKGJrX3dyaXRlXzIzYnl0ZXMpLCBMKHRhYmxlXzQ4X2J5dGVzX2J3ZCkpCisJLmludAlKTVBUQkwgKEwoYmtfd3JpdGVfMjRieXRlcyksIEwodGFibGVfNDhfYnl0ZXNfYndkKSkKKwkuaW50CUpNUFRCTCAoTChia193cml0ZV8yNWJ5dGVzKSwgTCh0YWJsZV80OF9ieXRlc19id2QpKQorCS5pbnQJSk1QVEJMIChMKGJrX3dyaXRlXzI2Ynl0ZXMpLCBMKHRhYmxlXzQ4X2J5dGVzX2J3ZCkpCisJLmludAlKTVBUQkwgKEwoYmtfd3JpdGVfMjdieXRlcyksIEwodGFibGVfNDhfYnl0ZXNfYndkKSkKKwkuaW50CUpNUFRCTCAoTChia193cml0ZV8yOGJ5dGVzKSwgTCh0YWJsZV80OF9ieXRlc19id2QpKQorCS5pbnQJSk1QVEJMIChMKGJrX3dyaXRlXzI5Ynl0ZXMpLCBMKHRhYmxlXzQ4X2J5dGVzX2J3ZCkpCisJLmludAlKTVBUQkwgKEwoYmtfd3JpdGVfMzBieXRlcyksIEwodGFibGVfNDhfYnl0ZXNfYndkKSkKKwkuaW50CUpNUFRCTCAoTChia193cml0ZV8zMWJ5dGVzKSwgTCh0YWJsZV80OF9ieXRlc19id2QpKQorCS5pbnQJSk1QVEJMIChMKGJrX3dyaXRlXzMyYnl0ZXMpLCBMKHRhYmxlXzQ4X2J5dGVzX2J3ZCkpCisJLmludAlKTVBUQkwgKEwoYmtfd3JpdGVfMzNieXRlcyksIEwodGFibGVfNDhfYnl0ZXNfYndkKSkKKwkuaW50CUpNUFRCTCAoTChia193cml0ZV8zNGJ5dGVzKSwgTCh0YWJsZV80OF9ieXRlc19id2QpKQorCS5pbnQJSk1QVEJMIChMKGJrX3dyaXRlXzM1Ynl0ZXMpLCBMKHRhYmxlXzQ4X2J5dGVzX2J3ZCkpCisJLmludAlKTVBUQkwgKEwoYmtfd3JpdGVfMzZieXRlcyksIEwodGFibGVfNDhfYnl0ZXNfYndkKSkKKwkuaW50CUpNUFRCTCAoTChia193cml0ZV8zN2J5dGVzKSwgTCh0YWJsZV80OF9ieXRlc19id2QpKQorCS5pbnQJSk1QVEJMIChMKGJrX3dyaXRlXzM4Ynl0ZXMpLCBMKHRhYmxlXzQ4X2J5dGVzX2J3ZCkpCisJLmludAlKTVBUQkwgKEwoYmtfd3JpdGVfMzlieXRlcyksIEwodGFibGVfNDhfYnl0ZXNfYndkKSkKKwkuaW50CUpNUFRCTCAoTChia193cml0ZV80MGJ5dGVzKSwgTCh0YWJsZV80OF9ieXRlc19id2QpKQorCS5pbnQJSk1QVEJMIChMKGJrX3dyaXRlXzQxYnl0ZXMpLCBMKHRhYmxlXzQ4X2J5dGVzX2J3ZCkpCisJLmludAlKTVBUQkwgKEwoYmtfd3JpdGVfNDJieXRlcyksIEwodGFibGVfNDhfYnl0ZXNfYndkKSkKKwkuaW50CUpNUFRCTCAoTChia193cml0ZV80M2J5dGVzKSwgTCh0YWJsZV80OF9ieXRlc19id2QpKQorCS5pbnQJSk1QVEJMIChMKGJrX3dyaXRlXzQ0Ynl0ZXMpLCBMKHRhYmxlXzQ4X2J5dGVzX2J3ZCkpCisJLmludAlKTVBUQkwgKEwoYmtfd3JpdGVfNDVieXRlcyksIEwodGFibGVfNDhfYnl0ZXNfYndkKSkKKwkuaW50CUpNUFRCTCAoTChia193cml0ZV80NmJ5dGVzKSwgTCh0YWJsZV80OF9ieXRlc19id2QpKQorCS5pbnQJSk1QVEJMIChMKGJrX3dyaXRlXzQ3Ynl0ZXMpLCBMKHRhYmxlXzQ4X2J5dGVzX2J3ZCkpCisKKwkucG9wc2VjdGlvbgorCisjaWZkZWYgVVNFX0FTX01FTU1PVkUKKwkucDJhbGlnbiA0CitMKGNvcHlfYmFja3dhcmQpOgorCVBVU0ggKCVlZGkpCisJbW92bAklZWF4LCAlZWRpCisJbGVhCSglZWN4LCVlZHgsMSksJWVkeAorCWxlYQkoJWVjeCwlZWRpLDEpLCVlZGkKKwl0ZXN0bAkkMHgzLCAlZWR4CisJam56CUwoYmtfYWxpZ24pCisKK0woYmtfYWxpZ25lZF80KToKKwljbXAJJDY0LCAlZWN4CisJamFlCUwoYmtfd3JpdGVfbW9yZTY0Ynl0ZXMpCisKK0woYmtfd3JpdGVfNjRieXRlc2xlc3MpOgorCWNtcAkkMzIsICVlY3gKKwlqYglMKGJrX3dyaXRlX2xlc3MzMmJ5dGVzKQorCitMKGJrX3dyaXRlX21vcmUzMmJ5dGVzKToKKwkvKiBDb3B5IDMyIGJ5dGVzIGF0IGEgdGltZS4gICovCisJc3ViCSQzMiwgJWVjeAorCW1vdnEJLTgoJWVkaSksICV4bW0wCisJbW92cQkleG1tMCwgLTgoJWVkeCkKKwltb3ZxCS0xNiglZWRpKSwgJXhtbTAKKwltb3ZxCSV4bW0wLCAtMTYoJWVkeCkKKwltb3ZxCS0yNCglZWRpKSwgJXhtbTAKKwltb3ZxCSV4bW0wLCAtMjQoJWVkeCkKKwltb3ZxCS0zMiglZWRpKSwgJXhtbTAKKwltb3ZxCSV4bW0wLCAtMzIoJWVkeCkKKwlzdWIJJDMyLCAlZWR4CisJc3ViCSQzMiwgJWVkaQorCitMKGJrX3dyaXRlX2xlc3MzMmJ5dGVzKToKKwltb3ZsCSVlZGksICVlYXgKKwlzdWIJJWVjeCwgJWVkeAorCXN1YgklZWN4LCAlZWF4CisJUE9QICglZWRpKQorTChia193cml0ZV9sZXNzMzJieXRlc18yKToKKwlCUkFOQ0hfVE9fSk1QVEJMX0VOVFJZIChMKHRhYmxlXzQ4X2J5dGVzX2J3ZCksICVlY3gsIDQpCisKKwlDRklfUFVTSCAoJWVkaSkKKworCS5wMmFsaWduIDQKK0woYmtfYWxpZ24pOgorCWNtcAkkOCwgJWVjeAorCWpiZQlMKGJrX3dyaXRlX2xlc3MzMmJ5dGVzKQorCXRlc3RsCSQxLCAlZWR4CisJLyogV2UgZ2V0IGhlcmUgb25seSBpZiAoRURYICYgMyApICE9IDAgc28gaWYgKEVEWCAmIDEpID09MCwKKwl0aGVuCShFRFggJiAyKSBtdXN0IGJlICE9IDAuICAqLworCWp6CUwoYmtfZ290MikKKwlzdWIJJDEsICVlZGkKKwlzdWIJJDEsICVlY3gKKwlzdWIJJDEsICVlZHgKKwltb3Z6YmwJKCVlZGkpLCAlZWF4CisJbW92YgklYWwsICglZWR4KQorCisJdGVzdGwJJDIsICVlZHgKKwlqeglMKGJrX2FsaWduZWRfNCkKKworTChia19nb3QyKToKKwlzdWIJJDIsICVlZGkKKwlzdWIJJDIsICVlY3gKKwlzdWIJJDIsICVlZHgKKwltb3Z6d2wJKCVlZGkpLCAlZWF4CisJbW92dwklYXgsICglZWR4KQorCWptcAlMKGJrX2FsaWduZWRfNCkKKworCS5wMmFsaWduIDQKK0woYmtfd3JpdGVfbW9yZTY0Ynl0ZXMpOgorCS8qIENoZWNrIGFsaWdubWVudCBvZiBsYXN0IGJ5dGUuICAqLworCXRlc3RsCSQxNSwgJWVkeAorCWp6CUwoYmtfc3NzZTNfY3B5X3ByZSkKKworLyogRURYIGlzIGFsaWduZWQgNCBieXRlcywgYnV0IG5vdCAxNiBieXRlcy4gICovCitMKGJrX3Nzc2UzX2FsaWduKToKKwlzdWIJJDQsICVlZGkKKwlzdWIJJDQsICVlY3gKKwlzdWIJJDQsICVlZHgKKwltb3ZsCSglZWRpKSwgJWVheAorCW1vdmwJJWVheCwgKCVlZHgpCisKKwl0ZXN0bAkkMTUsICVlZHgKKwlqeglMKGJrX3Nzc2UzX2NweV9wcmUpCisKKwlzdWIJJDQsICVlZGkKKwlzdWIJJDQsICVlY3gKKwlzdWIJJDQsICVlZHgKKwltb3ZsCSglZWRpKSwgJWVheAorCW1vdmwJJWVheCwgKCVlZHgpCisKKwl0ZXN0bAkkMTUsICVlZHgKKwlqeglMKGJrX3Nzc2UzX2NweV9wcmUpCisKKwlzdWIJJDQsICVlZGkKKwlzdWIJJDQsICVlY3gKKwlzdWIJJDQsICVlZHgKKwltb3ZsCSglZWRpKSwgJWVheAorCW1vdmwJJWVheCwgKCVlZHgpCisKK0woYmtfc3NzZTNfY3B5X3ByZSk6CisJY21wCSQ2NCwgJWVjeAorCWpiCUwoYmtfd3JpdGVfbW9yZTMyYnl0ZXMpCisKKwkucDJhbGlnbiA0CitMKGJrX3Nzc2UzX2NweSk6CisJc3ViCSQ2NCwgJWVkaQorCXN1YgkkNjQsICVlY3gKKwlzdWIJJDY0LCAlZWR4CisJbW92ZHF1CTB4MzAoJWVkaSksICV4bW0zCisJbW92ZHFhCSV4bW0zLCAweDMwKCVlZHgpCisJbW92ZHF1CTB4MjAoJWVkaSksICV4bW0yCisJbW92ZHFhCSV4bW0yLCAweDIwKCVlZHgpCisJbW92ZHF1CTB4MTAoJWVkaSksICV4bW0xCisJbW92ZHFhCSV4bW0xLCAweDEwKCVlZHgpCisJbW92ZHF1CSglZWRpKSwgJXhtbTAKKwltb3ZkcWEJJXhtbTAsICglZWR4KQorCWNtcAkkNjQsICVlY3gKKwlqYWUJTChia19zc3NlM19jcHkpCisJam1wCUwoYmtfd3JpdGVfNjRieXRlc2xlc3MpCisKKyNlbmRpZgorCitFTkQgKE1FTUNQWSkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3RyaW5nL3Nzc2UzLW1lbWNweTUuUyBiL2xpYmMvYXJjaC14ODYvc3RyaW5nL3Nzc2UzLW1lbWNweTUuUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjA2MTJhNi4uMDAwMDAwMAotLS0gYS9saWJjL2FyY2gteDg2L3N0cmluZy9zc3NlMy1tZW1jcHk1LlMKKysrIC9kZXYvbnVsbApAQCAtMSwzMTk3ICswLDAgQEAKLS8qCi1Db3B5cmlnaHQgKGMpIDIwMTAsIEludGVsIENvcnBvcmF0aW9uCi1BbGwgcmlnaHRzIHJlc2VydmVkLgotCi1SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLW1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgotCi0gICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCi0gICAgKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotCi0gICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCi0gICAgKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCi0gICAgKiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLQotICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBJbnRlbCBDb3Jwb3JhdGlvbiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAgICAqIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICAgICogd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0KLVRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKLUFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi1XQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi1ESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCi1BTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLShJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLUxPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgotQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLShJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCi1TT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSovCi0KLSNpZm5kZWYgTUVNQ1BZCi0jIGRlZmluZSBNRU1DUFkJc3NzZTNfbWVtY3B5NQotI2VuZGlmCi0KLSNpZm5kZWYgTAotIyBkZWZpbmUgTChsYWJlbCkJLkwjI2xhYmVsCi0jZW5kaWYKLQotI2lmbmRlZiBjZmlfc3RhcnRwcm9jCi0jIGRlZmluZSBjZmlfc3RhcnRwcm9jCS5jZmlfc3RhcnRwcm9jCi0jZW5kaWYKLQotI2lmbmRlZiBjZmlfZW5kcHJvYwotIyBkZWZpbmUgY2ZpX2VuZHByb2MJLmNmaV9lbmRwcm9jCi0jZW5kaWYKLQotI2lmbmRlZiBjZmlfcmVsX29mZnNldAotIyBkZWZpbmUgY2ZpX3JlbF9vZmZzZXQocmVnLCBvZmYpCS5jZmlfcmVsX29mZnNldCByZWcsIG9mZgotI2VuZGlmCi0KLSNpZm5kZWYgY2ZpX3Jlc3RvcmUKLSMgZGVmaW5lIGNmaV9yZXN0b3JlKHJlZykJLmNmaV9yZXN0b3JlIHJlZwotI2VuZGlmCi0KLSNpZm5kZWYgY2ZpX2FkanVzdF9jZmFfb2Zmc2V0Ci0jIGRlZmluZSBjZmlfYWRqdXN0X2NmYV9vZmZzZXQob2ZmKQkuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IG9mZgotI2VuZGlmCi0KLSNpZm5kZWYgRU5UUlkKLSMgZGVmaW5lIEVOVFJZKG5hbWUpCQlcCi0JLnR5cGUgbmFtZSwgIEBmdW5jdGlvbjsJCVwKLQkuZ2xvYmwgbmFtZTsJCVwKLQkucDJhbGlnbiA0OwkJXAotbmFtZToJCVwKLQljZmlfc3RhcnRwcm9jCi0jZW5kaWYKLQotI2lmbmRlZiBFTkQKLSMgZGVmaW5lIEVORChuYW1lKQkJXAotCWNmaV9lbmRwcm9jOwkJXAotCS5zaXplIG5hbWUsIC4tbmFtZQotI2VuZGlmCi0KLSNpZmRlZiBVU0VfQVNfQkNPUFkKLSMgZGVmaW5lIFNSQwkJUEFSTVMKLSMgZGVmaW5lIERFU1QJCVNSQys0Ci0jIGRlZmluZSBMRU4JCURFU1QrNAotI2Vsc2UKLSMgZGVmaW5lIERFU1QJCVBBUk1TCi0jIGRlZmluZSBTUkMJCURFU1QrNAotIyBkZWZpbmUgTEVOCQlTUkMrNAotI2VuZGlmCi0KLSNkZWZpbmUgQ0ZJX1BVU0goUkVHKQkJXAotICBjZmlfYWRqdXN0X2NmYV9vZmZzZXQgKDQpOwkJXAotICBjZmlfcmVsX29mZnNldCAoUkVHLCAwKQotCi0jZGVmaW5lIENGSV9QT1AoUkVHKQkJXAotICBjZmlfYWRqdXN0X2NmYV9vZmZzZXQgKC00KTsJCVwKLSAgY2ZpX3Jlc3RvcmUgKFJFRykKLQotI2RlZmluZSBQVVNIKFJFRykJcHVzaGwgUkVHOyBDRklfUFVTSCAoUkVHKQotI2RlZmluZSBQT1AoUkVHKQlwb3BsIFJFRzsgQ0ZJX1BPUCAoUkVHKQotCi0jaWYgKGRlZmluZWQgU0hBUkVEIHx8IGRlZmluZWQgX19QSUNfXykKLSMgZGVmaW5lIFBBUk1TCQk4CQkvKiBQcmVzZXJ2ZSBFQlguICAqLwotIyBkZWZpbmUgRU5UUkFOQ0UJUFVTSCAoJWVieCk7Ci0jIGRlZmluZSBSRVRVUk5fRU5ECVBPUCAoJWVieCk7IHJldAotIyBkZWZpbmUgUkVUVVJOCQlSRVRVUk5fRU5EOyBDRklfUFVTSCAoJWVieCkKLSMgZGVmaW5lIEpNUFRCTChJLCBCKQlJIC0gQgotIyB1bmRlZiBfX2k2ODYKLQotIyBkZWZpbmUgU0VUVVBfUElDX1JFRyh4KQljYWxsCV9faTY4Ni5nZXRfcGNfdGh1bmsueAotCi0vKiBMb2FkIGFuIGVudHJ5IGluIGEganVtcCB0YWJsZSBpbnRvIEVCWCBhbmQgYnJhbmNoIHRvIGl0LiAgVEFCTEUgaXMgYQotCWp1bXAgdGFibGUgd2l0aCByZWxhdGl2ZSBvZmZzZXRzLiAgSU5ERVggaXMgYSByZWdpc3RlciBjb250YWlucyB0aGUKLQlpbmRleCBpbnRvIHRoZSBqdW1wIHRhYmxlLiAgIFNDQUxFIGlzIHRoZSBzY2FsZSBvZiBJTkRFWC4gKi8KLQotIyBkZWZpbmUgQlJBTkNIX1RPX0pNUFRCTF9FTlRSWShUQUJMRSwgSU5ERVgsIFNDQUxFKQkJXAotICAgIC8qIFdlIGZpcnN0IGxvYWQgUEMgaW50byBFQlguICAqLwkJXAotCVNFVFVQX1BJQ19SRUcoYngpOwkJXAotICAgIC8qIEdldCB0aGUgYWRkcmVzcyBvZiB0aGUganVtcCB0YWJsZS4gICovCQlcCi0JYWRkbAkkKFRBQkxFIC0gLiksICVlYng7CQlcCi0gICAgLyogR2V0IHRoZSBlbnRyeSBhbmQgY29udmVydCB0aGUgcmVsYXRpdmUgb2Zmc2V0IHRvIHRoZQkJXAotCWFic29sdXRlCWFkZHJlc3MuICAqLwkJXAotCWFkZGwJKCVlYngsIElOREVYLCBTQ0FMRSksICVlYng7CQlcCi0gICAgLyogV2UgbG9hZGVkIHRoZSBqdW1wIHRhYmxlLiAgR28uICAqLwkJXAotCWptcAkqJWVieAotI2Vsc2UKLQotIyBkZWZpbmUgUEFSTVMJCTQKLSMgZGVmaW5lIEVOVFJBTkNFCi0jIGRlZmluZSBSRVRVUk5fRU5ECXJldAotIyBkZWZpbmUgUkVUVVJOCQlSRVRVUk5fRU5ECi0jIGRlZmluZSBKTVBUQkwoSSwgQikJSQotCi0vKiBCcmFuY2ggdG8gYW4gZW50cnkgaW4gYSBqdW1wIHRhYmxlLiAgVEFCTEUgaXMgYSBqdW1wIHRhYmxlIHdpdGgKLQlhYnNvbHV0ZSBvZmZzZXRzLiAgSU5ERVggaXMgYSByZWdpc3RlciBjb250YWlucyB0aGUgaW5kZXggaW50byB0aGUKLQlqdW1wIHRhYmxlLiAgU0NBTEUgaXMgdGhlIHNjYWxlIG9mIElOREVYLiAqLwotCi0jIGRlZmluZSBCUkFOQ0hfVE9fSk1QVEJMX0VOVFJZKFRBQkxFLCBJTkRFWCwgU0NBTEUpCQlcCi0Jam1wCSpUQUJMRSgsIElOREVYLCBTQ0FMRSkKLSNlbmRpZgotCi0JLnNlY3Rpb24gLnRleHQuc3NzZTMsImF4IixAcHJvZ2JpdHMKLUVOVFJZIChNRU1DUFkpCi0JRU5UUkFOQ0UKLQltb3ZsCUxFTiglZXNwKSwgJWVjeAotCW1vdmwJU1JDKCVlc3ApLCAlZWF4Ci0JbW92bAlERVNUKCVlc3ApLCAlZWR4Ci0KLSNpZmRlZiBVU0VfQVNfTUVNTU9WRQotCWNtcAklZWF4LCAlZWR4Ci0JamIJTChjb3B5X2ZvcndhcmQpCi0JamUJTChmd2Rfd3JpdGVfMGJ5dGVzKQotCWNtcAkkMzIsICVlY3gKLQlqYWUJTChtZW1tb3ZlX2J3ZCkKLQlqbXAJTChia193cml0ZV9sZXNzMzJieXRlc18yKQotCi0JLnAyYWxpZ24gNAotTChtZW1tb3ZlX2J3ZCk6Ci0JYWRkCSVlY3gsICVlYXgKLQljbXAJJWVheCwgJWVkeAotCW1vdmwJU1JDKCVlc3ApLCAlZWF4Ci0JamIJTChjb3B5X2JhY2t3YXJkKQotCi1MKGNvcHlfZm9yd2FyZCk6Ci0jZW5kaWYKLQljbXAJJDQ4LCAlZWN4Ci0JamFlCUwoNDhieXRlc29ybW9yZSkKLQotTChmd2Rfd3JpdGVfbGVzczMyYnl0ZXMpOgotI2lmbmRlZiBVU0VfQVNfTUVNTU9WRQotCWNtcAklZGwsICVhbAotCWpiCUwoYmtfd3JpdGUpCi0jZW5kaWYKLQlhZGQJJWVjeCwgJWVkeAotCWFkZAklZWN4LCAlZWF4Ci0JQlJBTkNIX1RPX0pNUFRCTF9FTlRSWSAoTCh0YWJsZV80OGJ5dGVzX2Z3ZCksICVlY3gsIDQpCi0jaWZuZGVmIFVTRV9BU19NRU1NT1ZFCi0JLnAyYWxpZ24gNAotTChia193cml0ZSk6Ci0JQlJBTkNIX1RPX0pNUFRCTF9FTlRSWSAoTCh0YWJsZV80OF9ieXRlc19id2QpLCAlZWN4LCA0KQotI2VuZGlmCi0KLQkucDJhbGlnbiA0Ci1MKDQ4Ynl0ZXNvcm1vcmUpOgotI2lmbmRlZiBVU0VfQVNfTUVNTU9WRQotCW1vdmxwZAkoJWVheCksICV4bW0wCi0JbW92bHBkCTgoJWVheCksICV4bW0xCi0JbW92bHBkCSV4bW0wLCAoJWVkeCkKLQltb3ZscGQJJXhtbTEsIDgoJWVkeCkKLSNlbHNlCi0JbW92ZHF1CSglZWF4KSwgJXhtbTAKLSNlbmRpZgotCVBVU0ggKCVlZGkpCi0JbW92bAklZWR4LCAlZWRpCi0JYW5kCSQtMTYsICVlZHgKLQlhZGQJJDE2LCAlZWR4Ci0Jc3ViCSVlZHgsICVlZGkKLQlhZGQJJWVkaSwgJWVjeAotCXN1YgklZWRpLCAlZWF4Ci0KLSNpZmRlZiBTSEFSRURfQ0FDSEVfU0laRV9IQUxGCi0JY21wCSRTSEFSRURfQ0FDSEVfU0laRV9IQUxGLCAlZWN4Ci0jZWxzZQotIyBpZiAoZGVmaW5lZCBTSEFSRUQgfHwgZGVmaW5lZCBfX1BJQ19fKQotCVNFVFVQX1BJQ19SRUcoYngpCi0JYWRkCSRfR0xPQkFMX09GRlNFVF9UQUJMRV8sICVlYngKLQljbXAJX194ODZfc2hhcmVkX2NhY2hlX3NpemVfaGFsZkBHT1RPRkYoJWVieCksICVlY3gKLSMgZWxzZQotCWNtcAlfX3g4Nl9zaGFyZWRfY2FjaGVfc2l6ZV9oYWxmLCAlZWN4Ci0jIGVuZGlmCi0jZW5kaWYKLQotCW1vdgklZWF4LCAlZWRpCi0JamFlCUwobGFyZ2VfcGFnZSkKLQlhbmQJJDB4ZiwgJWVkaQotCWp6CUwoc2hsXzApCi0JQlJBTkNIX1RPX0pNUFRCTF9FTlRSWSAoTChzaGxfdGFibGUpLCAlZWRpLCA0KQotCi0JLnAyYWxpZ24gNAotTChzaGxfMCk6Ci0jaWZkZWYgVVNFX0FTX01FTU1PVkUKLQltb3ZsCURFU1QrNCglZXNwKSwgJWVkaQotCW1vdmRxdQkleG1tMCwgKCVlZGkpCi0jZW5kaWYKLQl4b3IJJWVkaSwgJWVkaQotCWNtcAkkMTI3LCAlZWN4Ci0JamEJTChzaGxfMF9nb2JibGUpCi0JbGVhCS0zMiglZWN4KSwgJWVjeAotCi0JLnAyYWxpZ24gNAotTChzaGxfMF9sb29wKToKLQltb3ZkcWEJKCVlYXgsICVlZGkpLCAleG1tMAotCW1vdmRxYQkxNiglZWF4LCAlZWRpKSwgJXhtbTEKLQlzdWIJJDMyLCAlZWN4Ci0JbW92ZHFhCSV4bW0wLCAoJWVkeCwgJWVkaSkKLQltb3ZkcWEJJXhtbTEsIDE2KCVlZHgsICVlZGkpCi0JbGVhCTMyKCVlZGkpLCAlZWRpCi0JamIJTChzaGxfMF9lbmQpCi0KLQltb3ZkcWEJKCVlYXgsICVlZGkpLCAleG1tMAotCW1vdmRxYQkxNiglZWF4LCAlZWRpKSwgJXhtbTEKLQlzdWIJJDMyLCAlZWN4Ci0JbW92ZHFhCSV4bW0wLCAoJWVkeCwgJWVkaSkKLQltb3ZkcWEJJXhtbTEsIDE2KCVlZHgsICVlZGkpCi0JbGVhCTMyKCVlZGkpLCAlZWRpCi0JamIJTChzaGxfMF9lbmQpCi0KLQltb3ZkcWEJKCVlYXgsICVlZGkpLCAleG1tMAotCW1vdmRxYQkxNiglZWF4LCAlZWRpKSwgJXhtbTEKLQlzdWIJJDMyLCAlZWN4Ci0JbW92ZHFhCSV4bW0wLCAoJWVkeCwgJWVkaSkKLQltb3ZkcWEJJXhtbTEsIDE2KCVlZHgsICVlZGkpCi0JbGVhCTMyKCVlZGkpLCAlZWRpCi0JamIJTChzaGxfMF9lbmQpCi0KLQltb3ZkcWEJKCVlYXgsICVlZGkpLCAleG1tMAotCW1vdmRxYQkxNiglZWF4LCAlZWRpKSwgJXhtbTEKLQlzdWIJJDMyLCAlZWN4Ci0JbW92ZHFhCSV4bW0wLCAoJWVkeCwgJWVkaSkKLQltb3ZkcWEJJXhtbTEsIDE2KCVlZHgsICVlZGkpCi0JbGVhCTMyKCVlZGkpLCAlZWRpCi0KLUwoc2hsXzBfZW5kKToKLQlsZWEJMzIoJWVjeCksICVlY3gKLQlhZGQJJWVjeCwgJWVkaQotCWFkZAklZWRpLCAlZWR4Ci0JYWRkCSVlZGksICVlYXgKLQlQT1AgKCVlZGkpCi0JQlJBTkNIX1RPX0pNUFRCTF9FTlRSWSAoTCh0YWJsZV80OGJ5dGVzX2Z3ZF9hbGlnbiksICVlY3gsIDQpCi0KLQlDRklfUFVTSCAoJWVkaSkKLQotCS5wMmFsaWduIDQKLUwoc2hsXzBfZ29iYmxlKToKLSNpZmRlZiBEQVRBX0NBQ0hFX1NJWkVfSEFMRgotCWNtcAkkREFUQV9DQUNIRV9TSVpFX0hBTEYsICVlY3gKLSNlbHNlCi0jIGlmIChkZWZpbmVkIFNIQVJFRCB8fCBkZWZpbmVkIF9fUElDX18pCi0JU0VUVVBfUElDX1JFRyhieCkKLQlhZGQJJF9HTE9CQUxfT0ZGU0VUX1RBQkxFXywgJWVieAotCWNtcAlfX3g4Nl9kYXRhX2NhY2hlX3NpemVfaGFsZkBHT1RPRkYoJWVieCksICVlY3gKLSMgZWxzZQotCWNtcAlfX3g4Nl9kYXRhX2NhY2hlX3NpemVfaGFsZiwgJWVjeAotIyBlbmRpZgotI2VuZGlmCi0JUE9QCSglZWRpKQotCWxlYQktMTI4KCVlY3gpLCAlZWN4Ci0JamFlCUwoc2hsXzBfZ29iYmxlX21lbV9sb29wKQotCi0JLnAyYWxpZ24gNAotTChzaGxfMF9nb2JibGVfY2FjaGVfbG9vcCk6Ci0JbW92ZHFhCSglZWF4KSwgJXhtbTAKLQltb3ZkcWEJMHgxMCglZWF4KSwgJXhtbTEKLQltb3ZkcWEJMHgyMCglZWF4KSwgJXhtbTIKLQltb3ZkcWEJMHgzMCglZWF4KSwgJXhtbTMKLQltb3ZkcWEJMHg0MCglZWF4KSwgJXhtbTQKLQltb3ZkcWEJMHg1MCglZWF4KSwgJXhtbTUKLQltb3ZkcWEJMHg2MCglZWF4KSwgJXhtbTYKLQltb3ZkcWEJMHg3MCglZWF4KSwgJXhtbTcKLQlsZWEJMHg4MCglZWF4KSwgJWVheAotCXN1YgkkMTI4LCAlZWN4Ci0JbW92ZHFhCSV4bW0wLCAoJWVkeCkKLQltb3ZkcWEJJXhtbTEsIDB4MTAoJWVkeCkKLQltb3ZkcWEJJXhtbTIsIDB4MjAoJWVkeCkKLQltb3ZkcWEJJXhtbTMsIDB4MzAoJWVkeCkKLQltb3ZkcWEJJXhtbTQsIDB4NDAoJWVkeCkKLQltb3ZkcWEJJXhtbTUsIDB4NTAoJWVkeCkKLQltb3ZkcWEJJXhtbTYsIDB4NjAoJWVkeCkKLQltb3ZkcWEJJXhtbTcsIDB4NzAoJWVkeCkKLQlsZWEJMHg4MCglZWR4KSwgJWVkeAotCi0JamFlCUwoc2hsXzBfZ29iYmxlX2NhY2hlX2xvb3ApCi0JY21wCSQtMHg0MCwgJWVjeAotCWxlYQkweDgwKCVlY3gpLCAlZWN4Ci0JamwJTChzaGxfMF9jYWNoZV9sZXNzXzY0Ynl0ZXMpCi0KLQltb3ZkcWEJKCVlYXgpLCAleG1tMAotCXN1YgkkMHg0MCwgJWVjeAotCW1vdmRxYQkweDEwKCVlYXgpLCAleG1tMQotCW1vdmRxYQkleG1tMCwgKCVlZHgpCi0JbW92ZHFhCSV4bW0xLCAweDEwKCVlZHgpCi0JbW92ZHFhCTB4MjAoJWVheCksICV4bW0wCi0JbW92ZHFhCTB4MzAoJWVheCksICV4bW0xCi0JYWRkCSQweDQwLCAlZWF4Ci0JbW92ZHFhCSV4bW0wLCAweDIwKCVlZHgpCi0JbW92ZHFhCSV4bW0xLCAweDMwKCVlZHgpCi0JYWRkCSQweDQwLCAlZWR4Ci0KLUwoc2hsXzBfY2FjaGVfbGVzc182NGJ5dGVzKToKLQljbXAJJDB4MjAsICVlY3gKLQlqYglMKHNobF8wX2NhY2hlX2xlc3NfMzJieXRlcykKLQltb3ZkcWEJKCVlYXgpLCAleG1tMAotCXN1YgkkMHgyMCwgJWVjeAotCW1vdmRxYQkweDEwKCVlYXgpLCAleG1tMQotCWFkZAkkMHgyMCwgJWVheAotCW1vdmRxYQkleG1tMCwgKCVlZHgpCi0JbW92ZHFhCSV4bW0xLCAweDEwKCVlZHgpCi0JYWRkCSQweDIwLCAlZWR4Ci0KLUwoc2hsXzBfY2FjaGVfbGVzc18zMmJ5dGVzKToKLQljbXAJJDB4MTAsICVlY3gKLQlqYglMKHNobF8wX2NhY2hlX2xlc3NfMTZieXRlcykKLQlzdWIJJDB4MTAsICVlY3gKLQltb3ZkcWEJKCVlYXgpLCAleG1tMAotCWFkZAkkMHgxMCwgJWVheAotCW1vdmRxYQkleG1tMCwgKCVlZHgpCi0JYWRkCSQweDEwLCAlZWR4Ci0KLUwoc2hsXzBfY2FjaGVfbGVzc18xNmJ5dGVzKToKLQlhZGQJJWVjeCwgJWVkeAotCWFkZAklZWN4LCAlZWF4Ci0JQlJBTkNIX1RPX0pNUFRCTF9FTlRSWSAoTCh0YWJsZV80OGJ5dGVzX2Z3ZCksICVlY3gsIDQpCi0KLQkucDJhbGlnbiA0Ci1MKHNobF8wX2dvYmJsZV9tZW1fbG9vcCk6Ci0JcHJlZmV0Y2h0MCAweDFjMCglZWF4KQotCXByZWZldGNodDAgMHgyODAoJWVheCkKLQlwcmVmZXRjaHQwIDB4MWMwKCVlZHgpCi0KLQltb3ZkcWEJKCVlYXgpLCAleG1tMAotCW1vdmRxYQkweDEwKCVlYXgpLCAleG1tMQotCW1vdmRxYQkweDIwKCVlYXgpLCAleG1tMgotCW1vdmRxYQkweDMwKCVlYXgpLCAleG1tMwotCW1vdmRxYQkweDQwKCVlYXgpLCAleG1tNAotCW1vdmRxYQkweDUwKCVlYXgpLCAleG1tNQotCW1vdmRxYQkweDYwKCVlYXgpLCAleG1tNgotCW1vdmRxYQkweDcwKCVlYXgpLCAleG1tNwotCWxlYQkweDgwKCVlYXgpLCAlZWF4Ci0Jc3ViCSQweDgwLCAlZWN4Ci0JbW92ZHFhCSV4bW0wLCAoJWVkeCkKLQltb3ZkcWEJJXhtbTEsIDB4MTAoJWVkeCkKLQltb3ZkcWEJJXhtbTIsIDB4MjAoJWVkeCkKLQltb3ZkcWEJJXhtbTMsIDB4MzAoJWVkeCkKLQltb3ZkcWEJJXhtbTQsIDB4NDAoJWVkeCkKLQltb3ZkcWEJJXhtbTUsIDB4NTAoJWVkeCkKLQltb3ZkcWEJJXhtbTYsIDB4NjAoJWVkeCkKLQltb3ZkcWEJJXhtbTcsIDB4NzAoJWVkeCkKLQlsZWEJMHg4MCglZWR4KSwgJWVkeAotCi0JamFlCUwoc2hsXzBfZ29iYmxlX21lbV9sb29wKQotCWNtcAkkLTB4NDAsICVlY3gKLQlsZWEJMHg4MCglZWN4KSwgJWVjeAotCWpsCUwoc2hsXzBfbWVtX2xlc3NfNjRieXRlcykKLQotCW1vdmRxYQkoJWVheCksICV4bW0wCi0Jc3ViCSQweDQwLCAlZWN4Ci0JbW92ZHFhCTB4MTAoJWVheCksICV4bW0xCi0KLQltb3ZkcWEJJXhtbTAsICglZWR4KQotCW1vdmRxYQkleG1tMSwgMHgxMCglZWR4KQotCi0JbW92ZHFhCTB4MjAoJWVheCksICV4bW0wCi0JbW92ZHFhCTB4MzAoJWVheCksICV4bW0xCi0JYWRkCSQweDQwLCAlZWF4Ci0KLQltb3ZkcWEJJXhtbTAsIDB4MjAoJWVkeCkKLQltb3ZkcWEJJXhtbTEsIDB4MzAoJWVkeCkKLQlhZGQJJDB4NDAsICVlZHgKLQotTChzaGxfMF9tZW1fbGVzc182NGJ5dGVzKToKLQljbXAJJDB4MjAsICVlY3gKLQlqYglMKHNobF8wX21lbV9sZXNzXzMyYnl0ZXMpCi0JbW92ZHFhCSglZWF4KSwgJXhtbTAKLQlzdWIJJDB4MjAsICVlY3gKLQltb3ZkcWEJMHgxMCglZWF4KSwgJXhtbTEKLQlhZGQJJDB4MjAsICVlYXgKLQltb3ZkcWEJJXhtbTAsICglZWR4KQotCW1vdmRxYQkleG1tMSwgMHgxMCglZWR4KQotCWFkZAkkMHgyMCwgJWVkeAotCi1MKHNobF8wX21lbV9sZXNzXzMyYnl0ZXMpOgotCWNtcAkkMHgxMCwgJWVjeAotCWpiCUwoc2hsXzBfbWVtX2xlc3NfMTZieXRlcykKLQlzdWIJJDB4MTAsICVlY3gKLQltb3ZkcWEJKCVlYXgpLCAleG1tMAotCWFkZAkkMHgxMCwgJWVheAotCW1vdmRxYQkleG1tMCwgKCVlZHgpCi0JYWRkCSQweDEwLCAlZWR4Ci0KLUwoc2hsXzBfbWVtX2xlc3NfMTZieXRlcyk6Ci0JYWRkCSVlY3gsICVlZHgKLQlhZGQJJWVjeCwgJWVheAotCUJSQU5DSF9UT19KTVBUQkxfRU5UUlkgKEwodGFibGVfNDhieXRlc19md2RfYWxpZ24pLCAlZWN4LCA0KQotCi0JLnAyYWxpZ24gNAotTChzaGxfMSk6Ci0jaWZuZGVmIFVTRV9BU19NRU1NT1ZFCi0JbW92YXBzCS0xKCVlYXgpLCAleG1tMQotI2Vsc2UKLQltb3ZsCURFU1QrNCglZXNwKSwgJWVkaQotCW1vdmFwcwktMSglZWF4KSwgJXhtbTEKLQltb3ZkcXUJJXhtbTAsICglZWRpKQotI2VuZGlmCi0jaWZkZWYgREFUQV9DQUNIRV9TSVpFX0hBTEYKLQljbXAJJERBVEFfQ0FDSEVfU0laRV9IQUxGLCAlZWN4Ci0jZWxzZQotIyBpZiAoZGVmaW5lZCBTSEFSRUQgfHwgZGVmaW5lZCBfX1BJQ19fKQotCVNFVFVQX1BJQ19SRUcoYngpCi0JYWRkCSRfR0xPQkFMX09GRlNFVF9UQUJMRV8sICVlYngKLQljbXAJX194ODZfZGF0YV9jYWNoZV9zaXplX2hhbGZAR09UT0ZGKCVlYngpLCAlZWN4Ci0jIGVsc2UKLQljbXAJX194ODZfZGF0YV9jYWNoZV9zaXplX2hhbGYsICVlY3gKLSMgZW5kaWYKLSNlbmRpZgotCWpiIEwoc2hfMV9ub19wcmVmZXRjaCkKLQotCWxlYQktNjQoJWVjeCksICVlY3gKLQotCS5wMmFsaWduIDQKLUwoU2hsMUxvb3BTdGFydCk6Ci0JcHJlZmV0Y2h0MCAweDFjMCglZWF4KQotCXByZWZldGNodDAgMHgxYzAoJWVkeCkKLQltb3ZhcHMJMTUoJWVheCksICV4bW0yCi0JbW92YXBzCTMxKCVlYXgpLCAleG1tMwotCW1vdmFwcwk0NyglZWF4KSwgJXhtbTQKLQltb3ZhcHMJNjMoJWVheCksICV4bW01Ci0JbW92YXBzCSV4bW01LCAleG1tNwotCXBhbGlnbnIJJDEsICV4bW00LCAleG1tNQotCXBhbGlnbnIJJDEsICV4bW0zLCAleG1tNAotCW1vdmFwcwkleG1tNSwgNDgoJWVkeCkKLQlwYWxpZ25yCSQxLCAleG1tMiwgJXhtbTMKLQlsZWEJNjQoJWVheCksICVlYXgKLQlwYWxpZ25yCSQxLCAleG1tMSwgJXhtbTIKLQltb3ZhcHMJJXhtbTQsIDMyKCVlZHgpCi0JbW92YXBzCSV4bW0zLCAxNiglZWR4KQotCW1vdmFwcwkleG1tNywgJXhtbTEKLQltb3ZhcHMJJXhtbTIsICglZWR4KQotCWxlYQk2NCglZWR4KSwgJWVkeAotCXN1YgkkNjQsICVlY3gKLQlqYQlMKFNobDFMb29wU3RhcnQpCi0KLUwoU2hsMUxvb3BMZWF2ZSk6Ci0JYWRkCSQzMiwgJWVjeAotCWpsZQlMKHNobF9lbmRfMCkKLQotCW1vdmFwcwkxNSglZWF4KSwgJXhtbTIKLQltb3ZhcHMJMzEoJWVheCksICV4bW0zCi0JcGFsaWducgkkMSwgJXhtbTIsICV4bW0zCi0JcGFsaWducgkkMSwgJXhtbTEsICV4bW0yCi0JbW92YXBzCSV4bW0yLCAoJWVkeCkKLQltb3ZhcHMJJXhtbTMsIDE2KCVlZHgpCi0JbGVhCTMyKCVlZHgsICVlY3gpLCAlZWR4Ci0JbGVhCTMyKCVlYXgsICVlY3gpLCAlZWF4Ci0JUE9QICglZWRpKQotCUJSQU5DSF9UT19KTVBUQkxfRU5UUlkoTCh0YWJsZV80OGJ5dGVzX2Z3ZCksICVlY3gsIDQpCi0KLQlDRklfUFVTSCAoJWVkaSkKLQotCS5wMmFsaWduIDQKLUwoc2hfMV9ub19wcmVmZXRjaCk6Ci0JbGVhCS0zMiglZWN4KSwgJWVjeAotCWxlYQktMSglZWF4KSwgJWVheAotCXhvcgklZWRpLCAlZWRpCi0KLQkucDJhbGlnbiA0Ci1MKHNoXzFfbm9fcHJlZmV0Y2hfbG9vcCk6Ci0JbW92ZHFhCTE2KCVlYXgsICVlZGkpLCAleG1tMgotCXN1YgkkMzIsICVlY3gKLQltb3ZkcWEJMzIoJWVheCwgJWVkaSksICV4bW0zCi0JbW92ZHFhCSV4bW0zLCAleG1tNAotCXBhbGlnbnIJJDEsICV4bW0yLCAleG1tMwotCXBhbGlnbnIJJDEsICV4bW0xLCAleG1tMgotCWxlYQkzMiglZWRpKSwgJWVkaQotCW1vdmRxYQkleG1tMiwgLTMyKCVlZHgsICVlZGkpCi0JbW92ZHFhCSV4bW0zLCAtMTYoJWVkeCwgJWVkaSkKLQlqYglMKHNoXzFfZW5kX25vX3ByZWZldGNoX2xvb3ApCi0KLQltb3ZkcWEJMTYoJWVheCwgJWVkaSksICV4bW0yCi0Jc3ViCSQzMiwgJWVjeAotCW1vdmRxYQkzMiglZWF4LCAlZWRpKSwgJXhtbTMKLQltb3ZkcWEJJXhtbTMsICV4bW0xCi0JcGFsaWducgkkMSwgJXhtbTIsICV4bW0zCi0JcGFsaWducgkkMSwgJXhtbTQsICV4bW0yCi0JbGVhCTMyKCVlZGkpLCAlZWRpCi0JbW92ZHFhCSV4bW0yLCAtMzIoJWVkeCwgJWVkaSkKLQltb3ZkcWEJJXhtbTMsIC0xNiglZWR4LCAlZWRpKQotCWphZQlMKHNoXzFfbm9fcHJlZmV0Y2hfbG9vcCkKLQotTChzaF8xX2VuZF9ub19wcmVmZXRjaF9sb29wKToKLQlsZWEJMzIoJWVjeCksICVlY3gKLQlhZGQJJWVjeCwgJWVkaQotCWFkZAklZWRpLCAlZWR4Ci0JbGVhCTEoJWVkaSwgJWVheCksICVlYXgKLQlQT1AJKCVlZGkpCi0JQlJBTkNIX1RPX0pNUFRCTF9FTlRSWShMKHRhYmxlXzQ4Ynl0ZXNfZndkKSwgJWVjeCwgNCkKLQotCUNGSV9QVVNIICglZWRpKQotCi0JLnAyYWxpZ24gNAotTChzaGxfMik6Ci0jaWZuZGVmIFVTRV9BU19NRU1NT1ZFCi0JbW92YXBzCS0yKCVlYXgpLCAleG1tMQotI2Vsc2UKLQltb3ZsCURFU1QrNCglZXNwKSwgJWVkaQotCW1vdmFwcwktMiglZWF4KSwgJXhtbTEKLQltb3ZkcXUJJXhtbTAsICglZWRpKQotI2VuZGlmCi0jaWZkZWYgREFUQV9DQUNIRV9TSVpFX0hBTEYKLQljbXAJJERBVEFfQ0FDSEVfU0laRV9IQUxGLCAlZWN4Ci0jZWxzZQotIyBpZiAoZGVmaW5lZCBTSEFSRUQgfHwgZGVmaW5lZCBfX1BJQ19fKQotCVNFVFVQX1BJQ19SRUcoYngpCi0JYWRkCSRfR0xPQkFMX09GRlNFVF9UQUJMRV8sICVlYngKLQljbXAJX194ODZfZGF0YV9jYWNoZV9zaXplX2hhbGZAR09UT0ZGKCVlYngpLCAlZWN4Ci0jIGVsc2UKLQljbXAJX194ODZfZGF0YV9jYWNoZV9zaXplX2hhbGYsICVlY3gKLSMgZW5kaWYKLSNlbmRpZgotCWpiIEwoc2hfMl9ub19wcmVmZXRjaCkKLQotCWxlYQktNjQoJWVjeCksICVlY3gKLQotCS5wMmFsaWduIDQKLUwoU2hsMkxvb3BTdGFydCk6Ci0JcHJlZmV0Y2h0MCAweDFjMCglZWF4KQotCXByZWZldGNodDAgMHgxYzAoJWVkeCkKLQltb3ZhcHMJMTQoJWVheCksICV4bW0yCi0JbW92YXBzCTMwKCVlYXgpLCAleG1tMwotCW1vdmFwcwk0NiglZWF4KSwgJXhtbTQKLQltb3ZhcHMJNjIoJWVheCksICV4bW01Ci0JbW92YXBzCSV4bW01LCAleG1tNwotCXBhbGlnbnIJJDIsICV4bW00LCAleG1tNQotCXBhbGlnbnIJJDIsICV4bW0zLCAleG1tNAotCW1vdmFwcwkleG1tNSwgNDgoJWVkeCkKLQlwYWxpZ25yCSQyLCAleG1tMiwgJXhtbTMKLQlsZWEJNjQoJWVheCksICVlYXgKLQlwYWxpZ25yCSQyLCAleG1tMSwgJXhtbTIKLQltb3ZhcHMJJXhtbTQsIDMyKCVlZHgpCi0JbW92YXBzCSV4bW0zLCAxNiglZWR4KQotCW1vdmFwcwkleG1tNywgJXhtbTEKLQltb3ZhcHMJJXhtbTIsICglZWR4KQotCWxlYQk2NCglZWR4KSwgJWVkeAotCXN1YgkkNjQsICVlY3gKLQlqYQlMKFNobDJMb29wU3RhcnQpCi0KLUwoU2hsMkxvb3BMZWF2ZSk6Ci0JYWRkCSQzMiwgJWVjeAotCWpsZQlMKHNobF9lbmRfMCkKLQotCW1vdmFwcwkxNCglZWF4KSwgJXhtbTIKLQltb3ZhcHMJMzAoJWVheCksICV4bW0zCi0JcGFsaWducgkkMiwgJXhtbTIsICV4bW0zCi0JcGFsaWducgkkMiwgJXhtbTEsICV4bW0yCi0JbW92YXBzCSV4bW0yLCAoJWVkeCkKLQltb3ZhcHMJJXhtbTMsIDE2KCVlZHgpCi0JbGVhCTMyKCVlZHgsICVlY3gpLCAlZWR4Ci0JbGVhCTMyKCVlYXgsICVlY3gpLCAlZWF4Ci0JUE9QICglZWRpKQotCUJSQU5DSF9UT19KTVBUQkxfRU5UUlkoTCh0YWJsZV80OGJ5dGVzX2Z3ZCksICVlY3gsIDQpCi0KLQlDRklfUFVTSCAoJWVkaSkKLQotCS5wMmFsaWduIDQKLUwoc2hfMl9ub19wcmVmZXRjaCk6Ci0JbGVhCS0zMiglZWN4KSwgJWVjeAotCWxlYQktMiglZWF4KSwgJWVheAotCXhvcgklZWRpLCAlZWRpCi0KLQkucDJhbGlnbiA0Ci1MKHNoXzJfbm9fcHJlZmV0Y2hfbG9vcCk6Ci0JbW92ZHFhCTE2KCVlYXgsICVlZGkpLCAleG1tMgotCXN1YgkkMzIsICVlY3gKLQltb3ZkcWEJMzIoJWVheCwgJWVkaSksICV4bW0zCi0JbW92ZHFhCSV4bW0zLCAleG1tNAotCXBhbGlnbnIJJDIsICV4bW0yLCAleG1tMwotCXBhbGlnbnIJJDIsICV4bW0xLCAleG1tMgotCWxlYQkzMiglZWRpKSwgJWVkaQotCW1vdmRxYQkleG1tMiwgLTMyKCVlZHgsICVlZGkpCi0JbW92ZHFhCSV4bW0zLCAtMTYoJWVkeCwgJWVkaSkKLQlqYglMKHNoXzJfZW5kX25vX3ByZWZldGNoX2xvb3ApCi0KLQltb3ZkcWEJMTYoJWVheCwgJWVkaSksICV4bW0yCi0Jc3ViCSQzMiwgJWVjeAotCW1vdmRxYQkzMiglZWF4LCAlZWRpKSwgJXhtbTMKLQltb3ZkcWEJJXhtbTMsICV4bW0xCi0JcGFsaWducgkkMiwgJXhtbTIsICV4bW0zCi0JcGFsaWducgkkMiwgJXhtbTQsICV4bW0yCi0JbGVhCTMyKCVlZGkpLCAlZWRpCi0JbW92ZHFhCSV4bW0yLCAtMzIoJWVkeCwgJWVkaSkKLQltb3ZkcWEJJXhtbTMsIC0xNiglZWR4LCAlZWRpKQotCWphZQlMKHNoXzJfbm9fcHJlZmV0Y2hfbG9vcCkKLQotTChzaF8yX2VuZF9ub19wcmVmZXRjaF9sb29wKToKLQlsZWEJMzIoJWVjeCksICVlY3gKLQlhZGQJJWVjeCwgJWVkaQotCWFkZAklZWRpLCAlZWR4Ci0JbGVhCTIoJWVkaSwgJWVheCksICVlYXgKLQlQT1AJKCVlZGkpCi0JQlJBTkNIX1RPX0pNUFRCTF9FTlRSWShMKHRhYmxlXzQ4Ynl0ZXNfZndkKSwgJWVjeCwgNCkKLQotCUNGSV9QVVNIICglZWRpKQotCi0JLnAyYWxpZ24gNAotTChzaGxfMyk6Ci0jaWZuZGVmIFVTRV9BU19NRU1NT1ZFCi0JbW92YXBzCS0zKCVlYXgpLCAleG1tMQotI2Vsc2UKLQltb3ZsCURFU1QrNCglZXNwKSwgJWVkaQotCW1vdmFwcwktMyglZWF4KSwgJXhtbTEKLQltb3ZkcXUJJXhtbTAsICglZWRpKQotI2VuZGlmCi0jaWZkZWYgREFUQV9DQUNIRV9TSVpFX0hBTEYKLQljbXAJJERBVEFfQ0FDSEVfU0laRV9IQUxGLCAlZWN4Ci0jZWxzZQotIyBpZiAoZGVmaW5lZCBTSEFSRUQgfHwgZGVmaW5lZCBfX1BJQ19fKQotCVNFVFVQX1BJQ19SRUcoYngpCi0JYWRkCSRfR0xPQkFMX09GRlNFVF9UQUJMRV8sICVlYngKLQljbXAJX194ODZfZGF0YV9jYWNoZV9zaXplX2hhbGZAR09UT0ZGKCVlYngpLCAlZWN4Ci0jIGVsc2UKLQljbXAJX194ODZfZGF0YV9jYWNoZV9zaXplX2hhbGYsICVlY3gKLSMgZW5kaWYKLSNlbmRpZgotCWpiIEwoc2hfM19ub19wcmVmZXRjaCkKLQotCWxlYQktNjQoJWVjeCksICVlY3gKLQotCS5wMmFsaWduIDQKLUwoU2hsM0xvb3BTdGFydCk6Ci0JcHJlZmV0Y2h0MCAweDFjMCglZWF4KQotCXByZWZldGNodDAgMHgxYzAoJWVkeCkKLQltb3ZhcHMJMTMoJWVheCksICV4bW0yCi0JbW92YXBzCTI5KCVlYXgpLCAleG1tMwotCW1vdmFwcwk0NSglZWF4KSwgJXhtbTQKLQltb3ZhcHMJNjEoJWVheCksICV4bW01Ci0JbW92YXBzCSV4bW01LCAleG1tNwotCXBhbGlnbnIJJDMsICV4bW00LCAleG1tNQotCXBhbGlnbnIJJDMsICV4bW0zLCAleG1tNAotCW1vdmFwcwkleG1tNSwgNDgoJWVkeCkKLQlwYWxpZ25yCSQzLCAleG1tMiwgJXhtbTMKLQlsZWEJNjQoJWVheCksICVlYXgKLQlwYWxpZ25yCSQzLCAleG1tMSwgJXhtbTIKLQltb3ZhcHMJJXhtbTQsIDMyKCVlZHgpCi0JbW92YXBzCSV4bW0zLCAxNiglZWR4KQotCW1vdmFwcwkleG1tNywgJXhtbTEKLQltb3ZhcHMJJXhtbTIsICglZWR4KQotCWxlYQk2NCglZWR4KSwgJWVkeAotCXN1YgkkNjQsICVlY3gKLQlqYQlMKFNobDNMb29wU3RhcnQpCi0KLUwoU2hsM0xvb3BMZWF2ZSk6Ci0JYWRkCSQzMiwgJWVjeAotCWpsZQlMKHNobF9lbmRfMCkKLQotCW1vdmFwcwkxMyglZWF4KSwgJXhtbTIKLQltb3ZhcHMJMjkoJWVheCksICV4bW0zCi0JcGFsaWducgkkMywgJXhtbTIsICV4bW0zCi0JcGFsaWducgkkMywgJXhtbTEsICV4bW0yCi0JbW92YXBzCSV4bW0yLCAoJWVkeCkKLQltb3ZhcHMJJXhtbTMsIDE2KCVlZHgpCi0JbGVhCTMyKCVlZHgsICVlY3gpLCAlZWR4Ci0JbGVhCTMyKCVlYXgsICVlY3gpLCAlZWF4Ci0JUE9QICglZWRpKQotCUJSQU5DSF9UT19KTVBUQkxfRU5UUlkoTCh0YWJsZV80OGJ5dGVzX2Z3ZCksICVlY3gsIDQpCi0KLQlDRklfUFVTSCAoJWVkaSkKLQotCS5wMmFsaWduIDQKLUwoc2hfM19ub19wcmVmZXRjaCk6Ci0JbGVhCS0zMiglZWN4KSwgJWVjeAotCWxlYQktMyglZWF4KSwgJWVheAotCXhvcgklZWRpLCAlZWRpCi0KLQkucDJhbGlnbiA0Ci1MKHNoXzNfbm9fcHJlZmV0Y2hfbG9vcCk6Ci0JbW92ZHFhCTE2KCVlYXgsICVlZGkpLCAleG1tMgotCXN1YgkkMzIsICVlY3gKLQltb3ZkcWEJMzIoJWVheCwgJWVkaSksICV4bW0zCi0JbW92ZHFhCSV4bW0zLCAleG1tNAotCXBhbGlnbnIJJDMsICV4bW0yLCAleG1tMwotCXBhbGlnbnIJJDMsICV4bW0xLCAleG1tMgotCWxlYQkzMiglZWRpKSwgJWVkaQotCW1vdmRxYQkleG1tMiwgLTMyKCVlZHgsICVlZGkpCi0JbW92ZHFhCSV4bW0zLCAtMTYoJWVkeCwgJWVkaSkKLQotCWpiCUwoc2hfM19lbmRfbm9fcHJlZmV0Y2hfbG9vcCkKLQotCW1vdmRxYQkxNiglZWF4LCAlZWRpKSwgJXhtbTIKLQlzdWIJJDMyLCAlZWN4Ci0JbW92ZHFhCTMyKCVlYXgsICVlZGkpLCAleG1tMwotCW1vdmRxYQkleG1tMywgJXhtbTEKLQlwYWxpZ25yCSQzLCAleG1tMiwgJXhtbTMKLQlwYWxpZ25yCSQzLCAleG1tNCwgJXhtbTIKLQlsZWEJMzIoJWVkaSksICVlZGkKLQltb3ZkcWEJJXhtbTIsIC0zMiglZWR4LCAlZWRpKQotCW1vdmRxYQkleG1tMywgLTE2KCVlZHgsICVlZGkpCi0KLQlqYWUJTChzaF8zX25vX3ByZWZldGNoX2xvb3ApCi0KLUwoc2hfM19lbmRfbm9fcHJlZmV0Y2hfbG9vcCk6Ci0JbGVhCTMyKCVlY3gpLCAlZWN4Ci0JYWRkCSVlY3gsICVlZGkKLQlhZGQJJWVkaSwgJWVkeAotCWxlYQkzKCVlZGksICVlYXgpLCAlZWF4Ci0JUE9QCSglZWRpKQotCUJSQU5DSF9UT19KTVBUQkxfRU5UUlkoTCh0YWJsZV80OGJ5dGVzX2Z3ZCksICVlY3gsIDQpCi0KLQlDRklfUFVTSCAoJWVkaSkKLQotCS5wMmFsaWduIDQKLUwoc2hsXzQpOgotI2lmbmRlZiBVU0VfQVNfTUVNTU9WRQotCW1vdmFwcwktNCglZWF4KSwgJXhtbTEKLSNlbHNlCi0JbW92bAlERVNUKzQoJWVzcCksICVlZGkKLQltb3ZhcHMJLTQoJWVheCksICV4bW0xCi0JbW92ZHF1CSV4bW0wLCAoJWVkaSkKLSNlbmRpZgotI2lmZGVmIERBVEFfQ0FDSEVfU0laRV9IQUxGCi0JY21wCSREQVRBX0NBQ0hFX1NJWkVfSEFMRiwgJWVjeAotI2Vsc2UKLSMgaWYgKGRlZmluZWQgU0hBUkVEIHx8IGRlZmluZWQgX19QSUNfXykKLQlTRVRVUF9QSUNfUkVHKGJ4KQotCWFkZAkkX0dMT0JBTF9PRkZTRVRfVEFCTEVfLCAlZWJ4Ci0JY21wCV9feDg2X2RhdGFfY2FjaGVfc2l6ZV9oYWxmQEdPVE9GRiglZWJ4KSwgJWVjeAotIyBlbHNlCi0JY21wCV9feDg2X2RhdGFfY2FjaGVfc2l6ZV9oYWxmLCAlZWN4Ci0jIGVuZGlmCi0jZW5kaWYKLQlqYiBMKHNoXzRfbm9fcHJlZmV0Y2gpCi0KLQlsZWEJLTY0KCVlY3gpLCAlZWN4Ci0KLQkucDJhbGlnbiA0Ci1MKFNobDRMb29wU3RhcnQpOgotCXByZWZldGNodDAgMHgxYzAoJWVheCkKLQlwcmVmZXRjaHQwIDB4MWMwKCVlZHgpCi0JbW92YXBzCTEyKCVlYXgpLCAleG1tMgotCW1vdmFwcwkyOCglZWF4KSwgJXhtbTMKLQltb3ZhcHMJNDQoJWVheCksICV4bW00Ci0JbW92YXBzCTYwKCVlYXgpLCAleG1tNQotCW1vdmFwcwkleG1tNSwgJXhtbTcKLQlwYWxpZ25yCSQ0LCAleG1tNCwgJXhtbTUKLQlwYWxpZ25yCSQ0LCAleG1tMywgJXhtbTQKLQltb3ZhcHMJJXhtbTUsIDQ4KCVlZHgpCi0JcGFsaWducgkkNCwgJXhtbTIsICV4bW0zCi0JbGVhCTY0KCVlYXgpLCAlZWF4Ci0JcGFsaWducgkkNCwgJXhtbTEsICV4bW0yCi0JbW92YXBzCSV4bW00LCAzMiglZWR4KQotCW1vdmFwcwkleG1tMywgMTYoJWVkeCkKLQltb3ZhcHMJJXhtbTcsICV4bW0xCi0JbW92YXBzCSV4bW0yLCAoJWVkeCkKLQlsZWEJNjQoJWVkeCksICVlZHgKLQlzdWIJJDY0LCAlZWN4Ci0JamEJTChTaGw0TG9vcFN0YXJ0KQotCi1MKFNobDRMb29wTGVhdmUpOgotCWFkZAkkMzIsICVlY3gKLQlqbGUJTChzaGxfZW5kXzApCi0KLQltb3ZhcHMJMTIoJWVheCksICV4bW0yCi0JbW92YXBzCTI4KCVlYXgpLCAleG1tMwotCXBhbGlnbnIJJDQsICV4bW0yLCAleG1tMwotCXBhbGlnbnIJJDQsICV4bW0xLCAleG1tMgotCW1vdmFwcwkleG1tMiwgKCVlZHgpCi0JbW92YXBzCSV4bW0zLCAxNiglZWR4KQotCWxlYQkzMiglZWR4LCAlZWN4KSwgJWVkeAotCWxlYQkzMiglZWF4LCAlZWN4KSwgJWVheAotCVBPUCAoJWVkaSkKLQlCUkFOQ0hfVE9fSk1QVEJMX0VOVFJZKEwodGFibGVfNDhieXRlc19md2QpLCAlZWN4LCA0KQotCi0JQ0ZJX1BVU0ggKCVlZGkpCi0KLQkucDJhbGlnbiA0Ci1MKHNoXzRfbm9fcHJlZmV0Y2gpOgotCWxlYQktMzIoJWVjeCksICVlY3gKLQlsZWEJLTQoJWVheCksICVlYXgKLQl4b3IJJWVkaSwgJWVkaQotCi0JLnAyYWxpZ24gNAotTChzaF80X25vX3ByZWZldGNoX2xvb3ApOgotCW1vdmRxYQkxNiglZWF4LCAlZWRpKSwgJXhtbTIKLQlzdWIJJDMyLCAlZWN4Ci0JbW92ZHFhCTMyKCVlYXgsICVlZGkpLCAleG1tMwotCW1vdmRxYQkleG1tMywgJXhtbTQKLQlwYWxpZ25yCSQ0LCAleG1tMiwgJXhtbTMKLQlwYWxpZ25yCSQ0LCAleG1tMSwgJXhtbTIKLQlsZWEJMzIoJWVkaSksICVlZGkKLQltb3ZkcWEJJXhtbTIsIC0zMiglZWR4LCAlZWRpKQotCW1vdmRxYQkleG1tMywgLTE2KCVlZHgsICVlZGkpCi0KLQlqYglMKHNoXzRfZW5kX25vX3ByZWZldGNoX2xvb3ApCi0KLQltb3ZkcWEJMTYoJWVheCwgJWVkaSksICV4bW0yCi0Jc3ViCSQzMiwgJWVjeAotCW1vdmRxYQkzMiglZWF4LCAlZWRpKSwgJXhtbTMKLQltb3ZkcWEJJXhtbTMsICV4bW0xCi0JcGFsaWducgkkNCwgJXhtbTIsICV4bW0zCi0JcGFsaWducgkkNCwgJXhtbTQsICV4bW0yCi0JbGVhCTMyKCVlZGkpLCAlZWRpCi0JbW92ZHFhCSV4bW0yLCAtMzIoJWVkeCwgJWVkaSkKLQltb3ZkcWEJJXhtbTMsIC0xNiglZWR4LCAlZWRpKQotCi0JamFlCUwoc2hfNF9ub19wcmVmZXRjaF9sb29wKQotCi1MKHNoXzRfZW5kX25vX3ByZWZldGNoX2xvb3ApOgotCWxlYQkzMiglZWN4KSwgJWVjeAotCWFkZAklZWN4LCAlZWRpCi0JYWRkCSVlZGksICVlZHgKLQlsZWEJNCglZWRpLCAlZWF4KSwgJWVheAotCVBPUAkoJWVkaSkKLQlCUkFOQ0hfVE9fSk1QVEJMX0VOVFJZKEwodGFibGVfNDhieXRlc19md2QpLCAlZWN4LCA0KQotCi0JQ0ZJX1BVU0ggKCVlZGkpCi0KLQkucDJhbGlnbiA0Ci1MKHNobF81KToKLSNpZm5kZWYgVVNFX0FTX01FTU1PVkUKLQltb3ZhcHMJLTUoJWVheCksICV4bW0xCi0jZWxzZQotCW1vdmwJREVTVCs0KCVlc3ApLCAlZWRpCi0JbW92YXBzCS01KCVlYXgpLCAleG1tMQotCW1vdmRxdQkleG1tMCwgKCVlZGkpCi0jZW5kaWYKLSNpZmRlZiBEQVRBX0NBQ0hFX1NJWkVfSEFMRgotCWNtcAkkREFUQV9DQUNIRV9TSVpFX0hBTEYsICVlY3gKLSNlbHNlCi0jIGlmIChkZWZpbmVkIFNIQVJFRCB8fCBkZWZpbmVkIF9fUElDX18pCi0JU0VUVVBfUElDX1JFRyhieCkKLQlhZGQJJF9HTE9CQUxfT0ZGU0VUX1RBQkxFXywgJWVieAotCWNtcAlfX3g4Nl9kYXRhX2NhY2hlX3NpemVfaGFsZkBHT1RPRkYoJWVieCksICVlY3gKLSMgZWxzZQotCWNtcAlfX3g4Nl9kYXRhX2NhY2hlX3NpemVfaGFsZiwgJWVjeAotIyBlbmRpZgotI2VuZGlmCi0JamIgTChzaF81X25vX3ByZWZldGNoKQotCi0JbGVhCS02NCglZWN4KSwgJWVjeAotCi0JLnAyYWxpZ24gNAotTChTaGw1TG9vcFN0YXJ0KToKLQlwcmVmZXRjaHQwIDB4MWMwKCVlYXgpCi0JcHJlZmV0Y2h0MCAweDFjMCglZWR4KQotCW1vdmFwcwkxMSglZWF4KSwgJXhtbTIKLQltb3ZhcHMJMjcoJWVheCksICV4bW0zCi0JbW92YXBzCTQzKCVlYXgpLCAleG1tNAotCW1vdmFwcwk1OSglZWF4KSwgJXhtbTUKLQltb3ZhcHMJJXhtbTUsICV4bW03Ci0JcGFsaWducgkkNSwgJXhtbTQsICV4bW01Ci0JcGFsaWducgkkNSwgJXhtbTMsICV4bW00Ci0JbW92YXBzCSV4bW01LCA0OCglZWR4KQotCXBhbGlnbnIJJDUsICV4bW0yLCAleG1tMwotCWxlYQk2NCglZWF4KSwgJWVheAotCXBhbGlnbnIJJDUsICV4bW0xLCAleG1tMgotCW1vdmFwcwkleG1tNCwgMzIoJWVkeCkKLQltb3ZhcHMJJXhtbTMsIDE2KCVlZHgpCi0JbW92YXBzCSV4bW03LCAleG1tMQotCW1vdmFwcwkleG1tMiwgKCVlZHgpCi0JbGVhCTY0KCVlZHgpLCAlZWR4Ci0Jc3ViCSQ2NCwgJWVjeAotCWphCUwoU2hsNUxvb3BTdGFydCkKLQotTChTaGw1TG9vcExlYXZlKToKLQlhZGQJJDMyLCAlZWN4Ci0JamxlCUwoc2hsX2VuZF8wKQotCi0JbW92YXBzCTExKCVlYXgpLCAleG1tMgotCW1vdmFwcwkyNyglZWF4KSwgJXhtbTMKLQlwYWxpZ25yCSQ1LCAleG1tMiwgJXhtbTMKLQlwYWxpZ25yCSQ1LCAleG1tMSwgJXhtbTIKLQltb3ZhcHMJJXhtbTIsICglZWR4KQotCW1vdmFwcwkleG1tMywgMTYoJWVkeCkKLQlsZWEJMzIoJWVkeCwgJWVjeCksICVlZHgKLQlsZWEJMzIoJWVheCwgJWVjeCksICVlYXgKLQlQT1AgKCVlZGkpCi0JQlJBTkNIX1RPX0pNUFRCTF9FTlRSWShMKHRhYmxlXzQ4Ynl0ZXNfZndkKSwgJWVjeCwgNCkKLQotCUNGSV9QVVNIICglZWRpKQotCi0JLnAyYWxpZ24gNAotTChzaF81X25vX3ByZWZldGNoKToKLQlsZWEJLTMyKCVlY3gpLCAlZWN4Ci0JbGVhCS01KCVlYXgpLCAlZWF4Ci0JeG9yCSVlZGksICVlZGkKLQotCS5wMmFsaWduIDQKLUwoc2hfNV9ub19wcmVmZXRjaF9sb29wKToKLQltb3ZkcWEJMTYoJWVheCwgJWVkaSksICV4bW0yCi0Jc3ViCSQzMiwgJWVjeAotCW1vdmRxYQkzMiglZWF4LCAlZWRpKSwgJXhtbTMKLQltb3ZkcWEJJXhtbTMsICV4bW00Ci0JcGFsaWducgkkNSwgJXhtbTIsICV4bW0zCi0JcGFsaWducgkkNSwgJXhtbTEsICV4bW0yCi0JbGVhCTMyKCVlZGkpLCAlZWRpCi0JbW92ZHFhCSV4bW0yLCAtMzIoJWVkeCwgJWVkaSkKLQltb3ZkcWEJJXhtbTMsIC0xNiglZWR4LCAlZWRpKQotCi0JamIJTChzaF81X2VuZF9ub19wcmVmZXRjaF9sb29wKQotCi0JbW92ZHFhCTE2KCVlYXgsICVlZGkpLCAleG1tMgotCXN1YgkkMzIsICVlY3gKLQltb3ZkcWEJMzIoJWVheCwgJWVkaSksICV4bW0zCi0JbW92ZHFhCSV4bW0zLCAleG1tMQotCXBhbGlnbnIJJDUsICV4bW0yLCAleG1tMwotCXBhbGlnbnIJJDUsICV4bW00LCAleG1tMgotCWxlYQkzMiglZWRpKSwgJWVkaQotCW1vdmRxYQkleG1tMiwgLTMyKCVlZHgsICVlZGkpCi0JbW92ZHFhCSV4bW0zLCAtMTYoJWVkeCwgJWVkaSkKLQotCWphZQlMKHNoXzVfbm9fcHJlZmV0Y2hfbG9vcCkKLQotTChzaF81X2VuZF9ub19wcmVmZXRjaF9sb29wKToKLQlsZWEJMzIoJWVjeCksICVlY3gKLQlhZGQJJWVjeCwgJWVkaQotCWFkZAklZWRpLCAlZWR4Ci0JbGVhCTUoJWVkaSwgJWVheCksICVlYXgKLQlQT1AJKCVlZGkpCi0JQlJBTkNIX1RPX0pNUFRCTF9FTlRSWShMKHRhYmxlXzQ4Ynl0ZXNfZndkKSwgJWVjeCwgNCkKLQotCUNGSV9QVVNIICglZWRpKQotCi0JLnAyYWxpZ24gNAotTChzaGxfNik6Ci0jaWZuZGVmIFVTRV9BU19NRU1NT1ZFCi0JbW92YXBzCS02KCVlYXgpLCAleG1tMQotI2Vsc2UKLQltb3ZsCURFU1QrNCglZXNwKSwgJWVkaQotCW1vdmFwcwktNiglZWF4KSwgJXhtbTEKLQltb3ZkcXUJJXhtbTAsICglZWRpKQotI2VuZGlmCi0jaWZkZWYgREFUQV9DQUNIRV9TSVpFX0hBTEYKLQljbXAJJERBVEFfQ0FDSEVfU0laRV9IQUxGLCAlZWN4Ci0jZWxzZQotIyBpZiAoZGVmaW5lZCBTSEFSRUQgfHwgZGVmaW5lZCBfX1BJQ19fKQotCVNFVFVQX1BJQ19SRUcoYngpCi0JYWRkCSRfR0xPQkFMX09GRlNFVF9UQUJMRV8sICVlYngKLQljbXAJX194ODZfZGF0YV9jYWNoZV9zaXplX2hhbGZAR09UT0ZGKCVlYngpLCAlZWN4Ci0jIGVsc2UKLQljbXAJX194ODZfZGF0YV9jYWNoZV9zaXplX2hhbGYsICVlY3gKLSMgZW5kaWYKLSNlbmRpZgotCWpiIEwoc2hfNl9ub19wcmVmZXRjaCkKLQotCWxlYQktNjQoJWVjeCksICVlY3gKLQotCS5wMmFsaWduIDQKLUwoU2hsNkxvb3BTdGFydCk6Ci0JcHJlZmV0Y2h0MCAweDFjMCglZWF4KQotCXByZWZldGNodDAgMHgxYzAoJWVkeCkKLQltb3ZhcHMJMTAoJWVheCksICV4bW0yCi0JbW92YXBzCTI2KCVlYXgpLCAleG1tMwotCW1vdmFwcwk0MiglZWF4KSwgJXhtbTQKLQltb3ZhcHMJNTgoJWVheCksICV4bW01Ci0JbW92YXBzCSV4bW01LCAleG1tNwotCXBhbGlnbnIJJDYsICV4bW00LCAleG1tNQotCXBhbGlnbnIJJDYsICV4bW0zLCAleG1tNAotCW1vdmFwcwkleG1tNSwgNDgoJWVkeCkKLQlwYWxpZ25yCSQ2LCAleG1tMiwgJXhtbTMKLQlsZWEJNjQoJWVheCksICVlYXgKLQlwYWxpZ25yCSQ2LCAleG1tMSwgJXhtbTIKLQltb3ZhcHMJJXhtbTQsIDMyKCVlZHgpCi0JbW92YXBzCSV4bW0zLCAxNiglZWR4KQotCW1vdmFwcwkleG1tNywgJXhtbTEKLQltb3ZhcHMJJXhtbTIsICglZWR4KQotCWxlYQk2NCglZWR4KSwgJWVkeAotCXN1YgkkNjQsICVlY3gKLQlqYQlMKFNobDZMb29wU3RhcnQpCi0KLUwoU2hsNkxvb3BMZWF2ZSk6Ci0JYWRkCSQzMiwgJWVjeAotCWpsZQlMKHNobF9lbmRfMCkKLQotCW1vdmFwcwkxMCglZWF4KSwgJXhtbTIKLQltb3ZhcHMJMjYoJWVheCksICV4bW0zCi0JcGFsaWducgkkNiwgJXhtbTIsICV4bW0zCi0JcGFsaWducgkkNiwgJXhtbTEsICV4bW0yCi0JbW92YXBzCSV4bW0yLCAoJWVkeCkKLQltb3ZhcHMJJXhtbTMsIDE2KCVlZHgpCi0JbGVhCTMyKCVlZHgsICVlY3gpLCAlZWR4Ci0JbGVhCTMyKCVlYXgsICVlY3gpLCAlZWF4Ci0JUE9QICglZWRpKQotCUJSQU5DSF9UT19KTVBUQkxfRU5UUlkoTCh0YWJsZV80OGJ5dGVzX2Z3ZCksICVlY3gsIDQpCi0KLQlDRklfUFVTSCAoJWVkaSkKLQotCS5wMmFsaWduIDQKLUwoc2hfNl9ub19wcmVmZXRjaCk6Ci0JbGVhCS0zMiglZWN4KSwgJWVjeAotCWxlYQktNiglZWF4KSwgJWVheAotCXhvcgklZWRpLCAlZWRpCi0KLQkucDJhbGlnbiA0Ci1MKHNoXzZfbm9fcHJlZmV0Y2hfbG9vcCk6Ci0JbW92ZHFhCTE2KCVlYXgsICVlZGkpLCAleG1tMgotCXN1YgkkMzIsICVlY3gKLQltb3ZkcWEJMzIoJWVheCwgJWVkaSksICV4bW0zCi0JbW92ZHFhCSV4bW0zLCAleG1tNAotCXBhbGlnbnIJJDYsICV4bW0yLCAleG1tMwotCXBhbGlnbnIJJDYsICV4bW0xLCAleG1tMgotCWxlYQkzMiglZWRpKSwgJWVkaQotCW1vdmRxYQkleG1tMiwgLTMyKCVlZHgsICVlZGkpCi0JbW92ZHFhCSV4bW0zLCAtMTYoJWVkeCwgJWVkaSkKLQotCWpiCUwoc2hfNl9lbmRfbm9fcHJlZmV0Y2hfbG9vcCkKLQotCW1vdmRxYQkxNiglZWF4LCAlZWRpKSwgJXhtbTIKLQlzdWIJJDMyLCAlZWN4Ci0JbW92ZHFhCTMyKCVlYXgsICVlZGkpLCAleG1tMwotCW1vdmRxYQkleG1tMywgJXhtbTEKLQlwYWxpZ25yCSQ2LCAleG1tMiwgJXhtbTMKLQlwYWxpZ25yCSQ2LCAleG1tNCwgJXhtbTIKLQlsZWEJMzIoJWVkaSksICVlZGkKLQltb3ZkcWEJJXhtbTIsIC0zMiglZWR4LCAlZWRpKQotCW1vdmRxYQkleG1tMywgLTE2KCVlZHgsICVlZGkpCi0KLQlqYWUJTChzaF82X25vX3ByZWZldGNoX2xvb3ApCi0KLUwoc2hfNl9lbmRfbm9fcHJlZmV0Y2hfbG9vcCk6Ci0JbGVhCTMyKCVlY3gpLCAlZWN4Ci0JYWRkCSVlY3gsICVlZGkKLQlhZGQJJWVkaSwgJWVkeAotCWxlYQk2KCVlZGksICVlYXgpLCAlZWF4Ci0JUE9QCSglZWRpKQotCUJSQU5DSF9UT19KTVBUQkxfRU5UUlkoTCh0YWJsZV80OGJ5dGVzX2Z3ZCksICVlY3gsIDQpCi0KLQlDRklfUFVTSCAoJWVkaSkKLQotCS5wMmFsaWduIDQKLUwoc2hsXzcpOgotI2lmbmRlZiBVU0VfQVNfTUVNTU9WRQotCW1vdmFwcwktNyglZWF4KSwgJXhtbTEKLSNlbHNlCi0JbW92bAlERVNUKzQoJWVzcCksICVlZGkKLQltb3ZhcHMJLTcoJWVheCksICV4bW0xCi0JbW92ZHF1CSV4bW0wLCAoJWVkaSkKLSNlbmRpZgotI2lmZGVmIERBVEFfQ0FDSEVfU0laRV9IQUxGCi0JY21wCSREQVRBX0NBQ0hFX1NJWkVfSEFMRiwgJWVjeAotI2Vsc2UKLSMgaWYgKGRlZmluZWQgU0hBUkVEIHx8IGRlZmluZWQgX19QSUNfXykKLQlTRVRVUF9QSUNfUkVHKGJ4KQotCWFkZAkkX0dMT0JBTF9PRkZTRVRfVEFCTEVfLCAlZWJ4Ci0JY21wCV9feDg2X2RhdGFfY2FjaGVfc2l6ZV9oYWxmQEdPVE9GRiglZWJ4KSwgJWVjeAotIyBlbHNlCi0JY21wCV9feDg2X2RhdGFfY2FjaGVfc2l6ZV9oYWxmLCAlZWN4Ci0jIGVuZGlmCi0jZW5kaWYKLQlqYiBMKHNoXzdfbm9fcHJlZmV0Y2gpCi0KLQlsZWEJLTY0KCVlY3gpLCAlZWN4Ci0KLQkucDJhbGlnbiA0Ci1MKFNobDdMb29wU3RhcnQpOgotCXByZWZldGNodDAgMHgxYzAoJWVheCkKLQlwcmVmZXRjaHQwIDB4MWMwKCVlZHgpCi0JbW92YXBzCTkoJWVheCksICV4bW0yCi0JbW92YXBzCTI1KCVlYXgpLCAleG1tMwotCW1vdmFwcwk0MSglZWF4KSwgJXhtbTQKLQltb3ZhcHMJNTcoJWVheCksICV4bW01Ci0JbW92YXBzCSV4bW01LCAleG1tNwotCXBhbGlnbnIJJDcsICV4bW00LCAleG1tNQotCXBhbGlnbnIJJDcsICV4bW0zLCAleG1tNAotCW1vdmFwcwkleG1tNSwgNDgoJWVkeCkKLQlwYWxpZ25yCSQ3LCAleG1tMiwgJXhtbTMKLQlsZWEJNjQoJWVheCksICVlYXgKLQlwYWxpZ25yCSQ3LCAleG1tMSwgJXhtbTIKLQltb3ZhcHMJJXhtbTQsIDMyKCVlZHgpCi0JbW92YXBzCSV4bW0zLCAxNiglZWR4KQotCW1vdmFwcwkleG1tNywgJXhtbTEKLQltb3ZhcHMJJXhtbTIsICglZWR4KQotCWxlYQk2NCglZWR4KSwgJWVkeAotCXN1YgkkNjQsICVlY3gKLQlqYQlMKFNobDdMb29wU3RhcnQpCi0KLUwoU2hsN0xvb3BMZWF2ZSk6Ci0JYWRkCSQzMiwgJWVjeAotCWpsZQlMKHNobF9lbmRfMCkKLQotCW1vdmFwcwk5KCVlYXgpLCAleG1tMgotCW1vdmFwcwkyNSglZWF4KSwgJXhtbTMKLQlwYWxpZ25yCSQ3LCAleG1tMiwgJXhtbTMKLQlwYWxpZ25yCSQ3LCAleG1tMSwgJXhtbTIKLQltb3ZhcHMJJXhtbTIsICglZWR4KQotCW1vdmFwcwkleG1tMywgMTYoJWVkeCkKLQlsZWEJMzIoJWVkeCwgJWVjeCksICVlZHgKLQlsZWEJMzIoJWVheCwgJWVjeCksICVlYXgKLQlQT1AgKCVlZGkpCi0JQlJBTkNIX1RPX0pNUFRCTF9FTlRSWShMKHRhYmxlXzQ4Ynl0ZXNfZndkKSwgJWVjeCwgNCkKLQotCUNGSV9QVVNIICglZWRpKQotCi0JLnAyYWxpZ24gNAotTChzaF83X25vX3ByZWZldGNoKToKLQlsZWEJLTMyKCVlY3gpLCAlZWN4Ci0JbGVhCS03KCVlYXgpLCAlZWF4Ci0JeG9yCSVlZGksICVlZGkKLQotCS5wMmFsaWduIDQKLUwoc2hfN19ub19wcmVmZXRjaF9sb29wKToKLQltb3ZkcWEJMTYoJWVheCwgJWVkaSksICV4bW0yCi0Jc3ViCSQzMiwgJWVjeAotCW1vdmRxYQkzMiglZWF4LCAlZWRpKSwgJXhtbTMKLQltb3ZkcWEJJXhtbTMsICV4bW00Ci0JcGFsaWducgkkNywgJXhtbTIsICV4bW0zCi0JcGFsaWducgkkNywgJXhtbTEsICV4bW0yCi0JbGVhCTMyKCVlZGkpLCAlZWRpCi0JbW92ZHFhCSV4bW0yLCAtMzIoJWVkeCwgJWVkaSkKLQltb3ZkcWEJJXhtbTMsIC0xNiglZWR4LCAlZWRpKQotCWpiCUwoc2hfN19lbmRfbm9fcHJlZmV0Y2hfbG9vcCkKLQotCW1vdmRxYQkxNiglZWF4LCAlZWRpKSwgJXhtbTIKLQlzdWIJJDMyLCAlZWN4Ci0JbW92ZHFhCTMyKCVlYXgsICVlZGkpLCAleG1tMwotCW1vdmRxYQkleG1tMywgJXhtbTEKLQlwYWxpZ25yCSQ3LCAleG1tMiwgJXhtbTMKLQlwYWxpZ25yCSQ3LCAleG1tNCwgJXhtbTIKLQlsZWEJMzIoJWVkaSksICVlZGkKLQltb3ZkcWEJJXhtbTIsIC0zMiglZWR4LCAlZWRpKQotCW1vdmRxYQkleG1tMywgLTE2KCVlZHgsICVlZGkpCi0JamFlCUwoc2hfN19ub19wcmVmZXRjaF9sb29wKQotCi1MKHNoXzdfZW5kX25vX3ByZWZldGNoX2xvb3ApOgotCWxlYQkzMiglZWN4KSwgJWVjeAotCWFkZAklZWN4LCAlZWRpCi0JYWRkCSVlZGksICVlZHgKLQlsZWEJNyglZWRpLCAlZWF4KSwgJWVheAotCVBPUAkoJWVkaSkKLQlCUkFOQ0hfVE9fSk1QVEJMX0VOVFJZKEwodGFibGVfNDhieXRlc19md2QpLCAlZWN4LCA0KQotCi0JQ0ZJX1BVU0ggKCVlZGkpCi0KLQkucDJhbGlnbiA0Ci1MKHNobF84KToKLSNpZm5kZWYgVVNFX0FTX01FTU1PVkUKLQltb3ZhcHMJLTgoJWVheCksICV4bW0xCi0jZWxzZQotCW1vdmwJREVTVCs0KCVlc3ApLCAlZWRpCi0JbW92YXBzCS04KCVlYXgpLCAleG1tMQotCW1vdmRxdQkleG1tMCwgKCVlZGkpCi0jZW5kaWYKLSNpZmRlZiBEQVRBX0NBQ0hFX1NJWkVfSEFMRgotCWNtcAkkREFUQV9DQUNIRV9TSVpFX0hBTEYsICVlY3gKLSNlbHNlCi0jIGlmIChkZWZpbmVkIFNIQVJFRCB8fCBkZWZpbmVkIF9fUElDX18pCi0JU0VUVVBfUElDX1JFRyhieCkKLQlhZGQJJF9HTE9CQUxfT0ZGU0VUX1RBQkxFXywgJWVieAotCWNtcAlfX3g4Nl9kYXRhX2NhY2hlX3NpemVfaGFsZkBHT1RPRkYoJWVieCksICVlY3gKLSMgZWxzZQotCWNtcAlfX3g4Nl9kYXRhX2NhY2hlX3NpemVfaGFsZiwgJWVjeAotIyBlbmRpZgotI2VuZGlmCi0JamIgTChzaF84X25vX3ByZWZldGNoKQotCi0JbGVhCS02NCglZWN4KSwgJWVjeAotCi0JLnAyYWxpZ24gNAotTChTaGw4TG9vcFN0YXJ0KToKLQlwcmVmZXRjaHQwIDB4MWMwKCVlYXgpCi0JcHJlZmV0Y2h0MCAweDFjMCglZWR4KQotCW1vdmFwcwk4KCVlYXgpLCAleG1tMgotCW1vdmFwcwkyNCglZWF4KSwgJXhtbTMKLQltb3ZhcHMJNDAoJWVheCksICV4bW00Ci0JbW92YXBzCTU2KCVlYXgpLCAleG1tNQotCW1vdmFwcwkleG1tNSwgJXhtbTcKLQlwYWxpZ25yCSQ4LCAleG1tNCwgJXhtbTUKLQlwYWxpZ25yCSQ4LCAleG1tMywgJXhtbTQKLQltb3ZhcHMJJXhtbTUsIDQ4KCVlZHgpCi0JcGFsaWducgkkOCwgJXhtbTIsICV4bW0zCi0JbGVhCTY0KCVlYXgpLCAlZWF4Ci0JcGFsaWducgkkOCwgJXhtbTEsICV4bW0yCi0JbW92YXBzCSV4bW00LCAzMiglZWR4KQotCW1vdmFwcwkleG1tMywgMTYoJWVkeCkKLQltb3ZhcHMJJXhtbTcsICV4bW0xCi0JbW92YXBzCSV4bW0yLCAoJWVkeCkKLQlsZWEJNjQoJWVkeCksICVlZHgKLQlzdWIJJDY0LCAlZWN4Ci0JamEJTChTaGw4TG9vcFN0YXJ0KQotCi1MKExvb3BMZWF2ZTgpOgotCWFkZAkkMzIsICVlY3gKLQlqbGUJTChzaGxfZW5kXzApCi0KLQltb3ZhcHMJOCglZWF4KSwgJXhtbTIKLQltb3ZhcHMJMjQoJWVheCksICV4bW0zCi0JcGFsaWducgkkOCwgJXhtbTIsICV4bW0zCi0JcGFsaWducgkkOCwgJXhtbTEsICV4bW0yCi0JbW92YXBzCSV4bW0yLCAoJWVkeCkKLQltb3ZhcHMJJXhtbTMsIDE2KCVlZHgpCi0JbGVhCTMyKCVlZHgsICVlY3gpLCAlZWR4Ci0JbGVhCTMyKCVlYXgsICVlY3gpLCAlZWF4Ci0JUE9QICglZWRpKQotCUJSQU5DSF9UT19KTVBUQkxfRU5UUlkoTCh0YWJsZV80OGJ5dGVzX2Z3ZCksICVlY3gsIDQpCi0KLQlDRklfUFVTSCAoJWVkaSkKLQotCS5wMmFsaWduIDQKLUwoc2hfOF9ub19wcmVmZXRjaCk6Ci0JbGVhCS0zMiglZWN4KSwgJWVjeAotCWxlYQktOCglZWF4KSwgJWVheAotCXhvcgklZWRpLCAlZWRpCi0KLQkucDJhbGlnbiA0Ci1MKHNoXzhfbm9fcHJlZmV0Y2hfbG9vcCk6Ci0JbW92ZHFhCTE2KCVlYXgsICVlZGkpLCAleG1tMgotCXN1YgkkMzIsICVlY3gKLQltb3ZkcWEJMzIoJWVheCwgJWVkaSksICV4bW0zCi0JbW92ZHFhCSV4bW0zLCAleG1tNAotCXBhbGlnbnIJJDgsICV4bW0yLCAleG1tMwotCXBhbGlnbnIJJDgsICV4bW0xLCAleG1tMgotCWxlYQkzMiglZWRpKSwgJWVkaQotCW1vdmRxYQkleG1tMiwgLTMyKCVlZHgsICVlZGkpCi0JbW92ZHFhCSV4bW0zLCAtMTYoJWVkeCwgJWVkaSkKLQlqYglMKHNoXzhfZW5kX25vX3ByZWZldGNoX2xvb3ApCi0KLQltb3ZkcWEJMTYoJWVheCwgJWVkaSksICV4bW0yCi0Jc3ViCSQzMiwgJWVjeAotCW1vdmRxYQkzMiglZWF4LCAlZWRpKSwgJXhtbTMKLQltb3ZkcWEJJXhtbTMsICV4bW0xCi0JcGFsaWducgkkOCwgJXhtbTIsICV4bW0zCi0JcGFsaWducgkkOCwgJXhtbTQsICV4bW0yCi0JbGVhCTMyKCVlZGkpLCAlZWRpCi0JbW92ZHFhCSV4bW0yLCAtMzIoJWVkeCwgJWVkaSkKLQltb3ZkcWEJJXhtbTMsIC0xNiglZWR4LCAlZWRpKQotCWphZQlMKHNoXzhfbm9fcHJlZmV0Y2hfbG9vcCkKLQotTChzaF84X2VuZF9ub19wcmVmZXRjaF9sb29wKToKLQlsZWEJMzIoJWVjeCksICVlY3gKLQlhZGQJJWVjeCwgJWVkaQotCWFkZAklZWRpLCAlZWR4Ci0JbGVhCTgoJWVkaSwgJWVheCksICVlYXgKLQlQT1AJKCVlZGkpCi0JQlJBTkNIX1RPX0pNUFRCTF9FTlRSWShMKHRhYmxlXzQ4Ynl0ZXNfZndkKSwgJWVjeCwgNCkKLQotCUNGSV9QVVNIICglZWRpKQotCi0JLnAyYWxpZ24gNAotTChzaGxfOSk6Ci0jaWZuZGVmIFVTRV9BU19NRU1NT1ZFCi0JbW92YXBzCS05KCVlYXgpLCAleG1tMQotI2Vsc2UKLQltb3ZsCURFU1QrNCglZXNwKSwgJWVkaQotCW1vdmFwcwktOSglZWF4KSwgJXhtbTEKLQltb3ZkcXUJJXhtbTAsICglZWRpKQotI2VuZGlmCi0jaWZkZWYgREFUQV9DQUNIRV9TSVpFX0hBTEYKLQljbXAJJERBVEFfQ0FDSEVfU0laRV9IQUxGLCAlZWN4Ci0jZWxzZQotIyBpZiAoZGVmaW5lZCBTSEFSRUQgfHwgZGVmaW5lZCBfX1BJQ19fKQotCVNFVFVQX1BJQ19SRUcoYngpCi0JYWRkCSRfR0xPQkFMX09GRlNFVF9UQUJMRV8sICVlYngKLQljbXAJX194ODZfZGF0YV9jYWNoZV9zaXplX2hhbGZAR09UT0ZGKCVlYngpLCAlZWN4Ci0jIGVsc2UKLQljbXAJX194ODZfZGF0YV9jYWNoZV9zaXplX2hhbGYsICVlY3gKLSMgZW5kaWYKLSNlbmRpZgotCWpiIEwoc2hfOV9ub19wcmVmZXRjaCkKLQotCWxlYQktNjQoJWVjeCksICVlY3gKLQotCS5wMmFsaWduIDQKLUwoU2hsOUxvb3BTdGFydCk6Ci0JcHJlZmV0Y2h0MCAweDFjMCglZWF4KQotCXByZWZldGNodDAgMHgxYzAoJWVkeCkKLQltb3ZhcHMJNyglZWF4KSwgJXhtbTIKLQltb3ZhcHMJMjMoJWVheCksICV4bW0zCi0JbW92YXBzCTM5KCVlYXgpLCAleG1tNAotCW1vdmFwcwk1NSglZWF4KSwgJXhtbTUKLQltb3ZhcHMJJXhtbTUsICV4bW03Ci0JcGFsaWducgkkOSwgJXhtbTQsICV4bW01Ci0JcGFsaWducgkkOSwgJXhtbTMsICV4bW00Ci0JbW92YXBzCSV4bW01LCA0OCglZWR4KQotCXBhbGlnbnIJJDksICV4bW0yLCAleG1tMwotCWxlYQk2NCglZWF4KSwgJWVheAotCXBhbGlnbnIJJDksICV4bW0xLCAleG1tMgotCW1vdmFwcwkleG1tNCwgMzIoJWVkeCkKLQltb3ZhcHMJJXhtbTMsIDE2KCVlZHgpCi0JbW92YXBzCSV4bW03LCAleG1tMQotCW1vdmFwcwkleG1tMiwgKCVlZHgpCi0JbGVhCTY0KCVlZHgpLCAlZWR4Ci0Jc3ViCSQ2NCwgJWVjeAotCWphCUwoU2hsOUxvb3BTdGFydCkKLQotTChTaGw5TG9vcExlYXZlKToKLQlhZGQJJDMyLCAlZWN4Ci0JamxlCUwoc2hsX2VuZF8wKQotCi0JbW92YXBzCTcoJWVheCksICV4bW0yCi0JbW92YXBzCTIzKCVlYXgpLCAleG1tMwotCXBhbGlnbnIJJDksICV4bW0yLCAleG1tMwotCXBhbGlnbnIJJDksICV4bW0xLCAleG1tMgotCi0JbW92YXBzCSV4bW0yLCAoJWVkeCkKLQltb3ZhcHMJJXhtbTMsIDE2KCVlZHgpCi0JbGVhCTMyKCVlZHgsICVlY3gpLCAlZWR4Ci0JbGVhCTMyKCVlYXgsICVlY3gpLCAlZWF4Ci0JUE9QICglZWRpKQotCUJSQU5DSF9UT19KTVBUQkxfRU5UUlkoTCh0YWJsZV80OGJ5dGVzX2Z3ZCksICVlY3gsIDQpCi0KLQlDRklfUFVTSCAoJWVkaSkKLQotCS5wMmFsaWduIDQKLUwoc2hfOV9ub19wcmVmZXRjaCk6Ci0JbGVhCS0zMiglZWN4KSwgJWVjeAotCWxlYQktOSglZWF4KSwgJWVheAotCXhvcgklZWRpLCAlZWRpCi0KLQkucDJhbGlnbiA0Ci1MKHNoXzlfbm9fcHJlZmV0Y2hfbG9vcCk6Ci0JbW92ZHFhCTE2KCVlYXgsICVlZGkpLCAleG1tMgotCXN1YgkkMzIsICVlY3gKLQltb3ZkcWEJMzIoJWVheCwgJWVkaSksICV4bW0zCi0JbW92ZHFhCSV4bW0zLCAleG1tNAotCXBhbGlnbnIJJDksICV4bW0yLCAleG1tMwotCXBhbGlnbnIJJDksICV4bW0xLCAleG1tMgotCWxlYQkzMiglZWRpKSwgJWVkaQotCW1vdmRxYQkleG1tMiwgLTMyKCVlZHgsICVlZGkpCi0JbW92ZHFhCSV4bW0zLCAtMTYoJWVkeCwgJWVkaSkKLQlqYglMKHNoXzlfZW5kX25vX3ByZWZldGNoX2xvb3ApCi0KLQltb3ZkcWEJMTYoJWVheCwgJWVkaSksICV4bW0yCi0Jc3ViCSQzMiwgJWVjeAotCW1vdmRxYQkzMiglZWF4LCAlZWRpKSwgJXhtbTMKLQltb3ZkcWEJJXhtbTMsICV4bW0xCi0JcGFsaWducgkkOSwgJXhtbTIsICV4bW0zCi0JcGFsaWducgkkOSwgJXhtbTQsICV4bW0yCi0JbGVhCTMyKCVlZGkpLCAlZWRpCi0JbW92ZHFhCSV4bW0yLCAtMzIoJWVkeCwgJWVkaSkKLQltb3ZkcWEJJXhtbTMsIC0xNiglZWR4LCAlZWRpKQotCWphZQlMKHNoXzlfbm9fcHJlZmV0Y2hfbG9vcCkKLQotTChzaF85X2VuZF9ub19wcmVmZXRjaF9sb29wKToKLQlsZWEJMzIoJWVjeCksICVlY3gKLQlhZGQJJWVjeCwgJWVkaQotCWFkZAklZWRpLCAlZWR4Ci0JbGVhCTkoJWVkaSwgJWVheCksICVlYXgKLQlQT1AJKCVlZGkpCi0JQlJBTkNIX1RPX0pNUFRCTF9FTlRSWShMKHRhYmxlXzQ4Ynl0ZXNfZndkKSwgJWVjeCwgNCkKLQotCUNGSV9QVVNIICglZWRpKQotCi0JLnAyYWxpZ24gNAotTChzaGxfMTApOgotI2lmbmRlZiBVU0VfQVNfTUVNTU9WRQotCW1vdmFwcwktMTAoJWVheCksICV4bW0xCi0jZWxzZQotCW1vdmwJREVTVCs0KCVlc3ApLCAlZWRpCi0JbW92YXBzCS0xMCglZWF4KSwgJXhtbTEKLQltb3ZkcXUJJXhtbTAsICglZWRpKQotI2VuZGlmCi0jaWZkZWYgREFUQV9DQUNIRV9TSVpFX0hBTEYKLQljbXAJJERBVEFfQ0FDSEVfU0laRV9IQUxGLCAlZWN4Ci0jZWxzZQotIyBpZiAoZGVmaW5lZCBTSEFSRUQgfHwgZGVmaW5lZCBfX1BJQ19fKQotCVNFVFVQX1BJQ19SRUcoYngpCi0JYWRkCSRfR0xPQkFMX09GRlNFVF9UQUJMRV8sICVlYngKLQljbXAJX194ODZfZGF0YV9jYWNoZV9zaXplX2hhbGZAR09UT0ZGKCVlYngpLCAlZWN4Ci0jIGVsc2UKLQljbXAJX194ODZfZGF0YV9jYWNoZV9zaXplX2hhbGYsICVlY3gKLSMgZW5kaWYKLSNlbmRpZgotCWpiIEwoc2hfMTBfbm9fcHJlZmV0Y2gpCi0KLQlsZWEJLTY0KCVlY3gpLCAlZWN4Ci0KLQkucDJhbGlnbiA0Ci1MKFNobDEwTG9vcFN0YXJ0KToKLQlwcmVmZXRjaHQwIDB4MWMwKCVlYXgpCi0JcHJlZmV0Y2h0MCAweDFjMCglZWR4KQotCW1vdmFwcwk2KCVlYXgpLCAleG1tMgotCW1vdmFwcwkyMiglZWF4KSwgJXhtbTMKLQltb3ZhcHMJMzgoJWVheCksICV4bW00Ci0JbW92YXBzCTU0KCVlYXgpLCAleG1tNQotCW1vdmFwcwkleG1tNSwgJXhtbTcKLQlwYWxpZ25yCSQxMCwgJXhtbTQsICV4bW01Ci0JcGFsaWducgkkMTAsICV4bW0zLCAleG1tNAotCW1vdmFwcwkleG1tNSwgNDgoJWVkeCkKLQlwYWxpZ25yCSQxMCwgJXhtbTIsICV4bW0zCi0JbGVhCTY0KCVlYXgpLCAlZWF4Ci0JcGFsaWducgkkMTAsICV4bW0xLCAleG1tMgotCW1vdmFwcwkleG1tNCwgMzIoJWVkeCkKLQltb3ZhcHMJJXhtbTMsIDE2KCVlZHgpCi0JbW92YXBzCSV4bW03LCAleG1tMQotCW1vdmFwcwkleG1tMiwgKCVlZHgpCi0JbGVhCTY0KCVlZHgpLCAlZWR4Ci0Jc3ViCSQ2NCwgJWVjeAotCWphCUwoU2hsMTBMb29wU3RhcnQpCi0KLUwoU2hsMTBMb29wTGVhdmUpOgotCWFkZAkkMzIsICVlY3gKLQlqbGUJTChzaGxfZW5kXzApCi0KLQltb3ZhcHMJNiglZWF4KSwgJXhtbTIKLQltb3ZhcHMJMjIoJWVheCksICV4bW0zCi0JcGFsaWducgkkMTAsICV4bW0yLCAleG1tMwotCXBhbGlnbnIJJDEwLCAleG1tMSwgJXhtbTIKLQotCW1vdmFwcwkleG1tMiwgKCVlZHgpCi0JbW92YXBzCSV4bW0zLCAxNiglZWR4KQotCWxlYQkzMiglZWR4LCAlZWN4KSwgJWVkeAotCWxlYQkzMiglZWF4LCAlZWN4KSwgJWVheAotCVBPUCAoJWVkaSkKLQlCUkFOQ0hfVE9fSk1QVEJMX0VOVFJZKEwodGFibGVfNDhieXRlc19md2QpLCAlZWN4LCA0KQotCi0JQ0ZJX1BVU0ggKCVlZGkpCi0KLQkucDJhbGlnbiA0Ci1MKHNoXzEwX25vX3ByZWZldGNoKToKLQlsZWEJLTMyKCVlY3gpLCAlZWN4Ci0JbGVhCS0xMCglZWF4KSwgJWVheAotCXhvcgklZWRpLCAlZWRpCi0KLQkucDJhbGlnbiA0Ci1MKHNoXzEwX25vX3ByZWZldGNoX2xvb3ApOgotCW1vdmRxYQkxNiglZWF4LCAlZWRpKSwgJXhtbTIKLQlzdWIJJDMyLCAlZWN4Ci0JbW92ZHFhCTMyKCVlYXgsICVlZGkpLCAleG1tMwotCW1vdmRxYQkleG1tMywgJXhtbTQKLQlwYWxpZ25yCSQxMCwgJXhtbTIsICV4bW0zCi0JcGFsaWducgkkMTAsICV4bW0xLCAleG1tMgotCWxlYQkzMiglZWRpKSwgJWVkaQotCW1vdmRxYQkleG1tMiwgLTMyKCVlZHgsICVlZGkpCi0JbW92ZHFhCSV4bW0zLCAtMTYoJWVkeCwgJWVkaSkKLQlqYglMKHNoXzEwX2VuZF9ub19wcmVmZXRjaF9sb29wKQotCi0JbW92ZHFhCTE2KCVlYXgsICVlZGkpLCAleG1tMgotCXN1YgkkMzIsICVlY3gKLQltb3ZkcWEJMzIoJWVheCwgJWVkaSksICV4bW0zCi0JbW92ZHFhCSV4bW0zLCAleG1tMQotCXBhbGlnbnIJJDEwLCAleG1tMiwgJXhtbTMKLQlwYWxpZ25yCSQxMCwgJXhtbTQsICV4bW0yCi0JbGVhCTMyKCVlZGkpLCAlZWRpCi0JbW92ZHFhCSV4bW0yLCAtMzIoJWVkeCwgJWVkaSkKLQltb3ZkcWEJJXhtbTMsIC0xNiglZWR4LCAlZWRpKQotCWphZQlMKHNoXzEwX25vX3ByZWZldGNoX2xvb3ApCi0KLUwoc2hfMTBfZW5kX25vX3ByZWZldGNoX2xvb3ApOgotCWxlYQkzMiglZWN4KSwgJWVjeAotCWFkZAklZWN4LCAlZWRpCi0JYWRkCSVlZGksICVlZHgKLQlsZWEJMTAoJWVkaSwgJWVheCksICVlYXgKLQlQT1AJKCVlZGkpCi0JQlJBTkNIX1RPX0pNUFRCTF9FTlRSWShMKHRhYmxlXzQ4Ynl0ZXNfZndkKSwgJWVjeCwgNCkKLQotCUNGSV9QVVNIICglZWRpKQotCi0JLnAyYWxpZ24gNAotTChzaGxfMTEpOgotI2lmbmRlZiBVU0VfQVNfTUVNTU9WRQotCW1vdmFwcwktMTEoJWVheCksICV4bW0xCi0jZWxzZQotCW1vdmwJREVTVCs0KCVlc3ApLCAlZWRpCi0JbW92YXBzCS0xMSglZWF4KSwgJXhtbTEKLQltb3ZkcXUJJXhtbTAsICglZWRpKQotI2VuZGlmCi0jaWZkZWYgREFUQV9DQUNIRV9TSVpFX0hBTEYKLQljbXAJJERBVEFfQ0FDSEVfU0laRV9IQUxGLCAlZWN4Ci0jZWxzZQotIyBpZiAoZGVmaW5lZCBTSEFSRUQgfHwgZGVmaW5lZCBfX1BJQ19fKQotCVNFVFVQX1BJQ19SRUcoYngpCi0JYWRkCSRfR0xPQkFMX09GRlNFVF9UQUJMRV8sICVlYngKLQljbXAJX194ODZfZGF0YV9jYWNoZV9zaXplX2hhbGZAR09UT0ZGKCVlYngpLCAlZWN4Ci0jIGVsc2UKLQljbXAJX194ODZfZGF0YV9jYWNoZV9zaXplX2hhbGYsICVlY3gKLSMgZW5kaWYKLSNlbmRpZgotCWpiIEwoc2hfMTFfbm9fcHJlZmV0Y2gpCi0KLQlsZWEJLTY0KCVlY3gpLCAlZWN4Ci0KLQkucDJhbGlnbiA0Ci1MKFNobDExTG9vcFN0YXJ0KToKLQlwcmVmZXRjaHQwIDB4MWMwKCVlYXgpCi0JcHJlZmV0Y2h0MCAweDFjMCglZWR4KQotCW1vdmFwcwk1KCVlYXgpLCAleG1tMgotCW1vdmFwcwkyMSglZWF4KSwgJXhtbTMKLQltb3ZhcHMJMzcoJWVheCksICV4bW00Ci0JbW92YXBzCTUzKCVlYXgpLCAleG1tNQotCW1vdmFwcwkleG1tNSwgJXhtbTcKLQlwYWxpZ25yCSQxMSwgJXhtbTQsICV4bW01Ci0JcGFsaWducgkkMTEsICV4bW0zLCAleG1tNAotCW1vdmFwcwkleG1tNSwgNDgoJWVkeCkKLQlwYWxpZ25yCSQxMSwgJXhtbTIsICV4bW0zCi0JbGVhCTY0KCVlYXgpLCAlZWF4Ci0JcGFsaWducgkkMTEsICV4bW0xLCAleG1tMgotCW1vdmFwcwkleG1tNCwgMzIoJWVkeCkKLQltb3ZhcHMJJXhtbTMsIDE2KCVlZHgpCi0JbW92YXBzCSV4bW03LCAleG1tMQotCW1vdmFwcwkleG1tMiwgKCVlZHgpCi0JbGVhCTY0KCVlZHgpLCAlZWR4Ci0Jc3ViCSQ2NCwgJWVjeAotCWphCUwoU2hsMTFMb29wU3RhcnQpCi0KLUwoU2hsMTFMb29wTGVhdmUpOgotCWFkZAkkMzIsICVlY3gKLQlqbGUJTChzaGxfZW5kXzApCi0KLQltb3ZhcHMJNSglZWF4KSwgJXhtbTIKLQltb3ZhcHMJMjEoJWVheCksICV4bW0zCi0JcGFsaWducgkkMTEsICV4bW0yLCAleG1tMwotCXBhbGlnbnIJJDExLCAleG1tMSwgJXhtbTIKLQotCW1vdmFwcwkleG1tMiwgKCVlZHgpCi0JbW92YXBzCSV4bW0zLCAxNiglZWR4KQotCWxlYQkzMiglZWR4LCAlZWN4KSwgJWVkeAotCWxlYQkzMiglZWF4LCAlZWN4KSwgJWVheAotCVBPUCAoJWVkaSkKLQlCUkFOQ0hfVE9fSk1QVEJMX0VOVFJZKEwodGFibGVfNDhieXRlc19md2QpLCAlZWN4LCA0KQotCi0JQ0ZJX1BVU0ggKCVlZGkpCi0KLQkucDJhbGlnbiA0Ci1MKHNoXzExX25vX3ByZWZldGNoKToKLQlsZWEJLTMyKCVlY3gpLCAlZWN4Ci0JbGVhCS0xMSglZWF4KSwgJWVheAotCXhvcgklZWRpLCAlZWRpCi0KLQkucDJhbGlnbiA0Ci1MKHNoXzExX25vX3ByZWZldGNoX2xvb3ApOgotCW1vdmRxYQkxNiglZWF4LCAlZWRpKSwgJXhtbTIKLQlzdWIJJDMyLCAlZWN4Ci0JbW92ZHFhCTMyKCVlYXgsICVlZGkpLCAleG1tMwotCW1vdmRxYQkleG1tMywgJXhtbTQKLQlwYWxpZ25yCSQxMSwgJXhtbTIsICV4bW0zCi0JcGFsaWducgkkMTEsICV4bW0xLCAleG1tMgotCWxlYQkzMiglZWRpKSwgJWVkaQotCW1vdmRxYQkleG1tMiwgLTMyKCVlZHgsICVlZGkpCi0JbW92ZHFhCSV4bW0zLCAtMTYoJWVkeCwgJWVkaSkKLQlqYglMKHNoXzExX2VuZF9ub19wcmVmZXRjaF9sb29wKQotCi0JbW92ZHFhCTE2KCVlYXgsICVlZGkpLCAleG1tMgotCXN1YgkkMzIsICVlY3gKLQltb3ZkcWEJMzIoJWVheCwgJWVkaSksICV4bW0zCi0JbW92ZHFhCSV4bW0zLCAleG1tMQotCXBhbGlnbnIJJDExLCAleG1tMiwgJXhtbTMKLQlwYWxpZ25yCSQxMSwgJXhtbTQsICV4bW0yCi0JbGVhCTMyKCVlZGkpLCAlZWRpCi0JbW92ZHFhCSV4bW0yLCAtMzIoJWVkeCwgJWVkaSkKLQltb3ZkcWEJJXhtbTMsIC0xNiglZWR4LCAlZWRpKQotCWphZQlMKHNoXzExX25vX3ByZWZldGNoX2xvb3ApCi0KLUwoc2hfMTFfZW5kX25vX3ByZWZldGNoX2xvb3ApOgotCWxlYQkzMiglZWN4KSwgJWVjeAotCWFkZAklZWN4LCAlZWRpCi0JYWRkCSVlZGksICVlZHgKLQlsZWEJMTEoJWVkaSwgJWVheCksICVlYXgKLQlQT1AJKCVlZGkpCi0JQlJBTkNIX1RPX0pNUFRCTF9FTlRSWShMKHRhYmxlXzQ4Ynl0ZXNfZndkKSwgJWVjeCwgNCkKLQotCUNGSV9QVVNIICglZWRpKQotCi0JLnAyYWxpZ24gNAotTChzaGxfMTIpOgotI2lmbmRlZiBVU0VfQVNfTUVNTU9WRQotCW1vdmFwcwktMTIoJWVheCksICV4bW0xCi0jZWxzZQotCW1vdmwJREVTVCs0KCVlc3ApLCAlZWRpCi0JbW92YXBzCS0xMiglZWF4KSwgJXhtbTEKLQltb3ZkcXUJJXhtbTAsICglZWRpKQotI2VuZGlmCi0jaWZkZWYgREFUQV9DQUNIRV9TSVpFX0hBTEYKLQljbXAJJERBVEFfQ0FDSEVfU0laRV9IQUxGLCAlZWN4Ci0jZWxzZQotIyBpZiAoZGVmaW5lZCBTSEFSRUQgfHwgZGVmaW5lZCBfX1BJQ19fKQotCVNFVFVQX1BJQ19SRUcoYngpCi0JYWRkCSRfR0xPQkFMX09GRlNFVF9UQUJMRV8sICVlYngKLQljbXAJX194ODZfZGF0YV9jYWNoZV9zaXplX2hhbGZAR09UT0ZGKCVlYngpLCAlZWN4Ci0jIGVsc2UKLQljbXAJX194ODZfZGF0YV9jYWNoZV9zaXplX2hhbGYsICVlY3gKLSMgZW5kaWYKLSNlbmRpZgotCWpiIEwoc2hfMTJfbm9fcHJlZmV0Y2gpCi0KLQlsZWEJLTY0KCVlY3gpLCAlZWN4Ci0KLQkucDJhbGlnbiA0Ci1MKFNobDEyTG9vcFN0YXJ0KToKLQlwcmVmZXRjaHQwIDB4MWMwKCVlYXgpCi0JcHJlZmV0Y2h0MCAweDFjMCglZWR4KQotCW1vdmFwcwk0KCVlYXgpLCAleG1tMgotCW1vdmFwcwkyMCglZWF4KSwgJXhtbTMKLQltb3ZhcHMJMzYoJWVheCksICV4bW00Ci0JbW92YXBzCTUyKCVlYXgpLCAleG1tNQotCW1vdmFwcwkleG1tNSwgJXhtbTcKLQlwYWxpZ25yCSQxMiwgJXhtbTQsICV4bW01Ci0JcGFsaWducgkkMTIsICV4bW0zLCAleG1tNAotCW1vdmFwcwkleG1tNSwgNDgoJWVkeCkKLQlwYWxpZ25yCSQxMiwgJXhtbTIsICV4bW0zCi0JbGVhCTY0KCVlYXgpLCAlZWF4Ci0JcGFsaWducgkkMTIsICV4bW0xLCAleG1tMgotCW1vdmFwcwkleG1tNCwgMzIoJWVkeCkKLQltb3ZhcHMJJXhtbTMsIDE2KCVlZHgpCi0JbW92YXBzCSV4bW03LCAleG1tMQotCW1vdmFwcwkleG1tMiwgKCVlZHgpCi0JbGVhCTY0KCVlZHgpLCAlZWR4Ci0Jc3ViCSQ2NCwgJWVjeAotCWphCUwoU2hsMTJMb29wU3RhcnQpCi0KLUwoU2hsMTJMb29wTGVhdmUpOgotCWFkZAkkMzIsICVlY3gKLQlqbGUJTChzaGxfZW5kXzApCi0KLQltb3ZhcHMJNCglZWF4KSwgJXhtbTIKLQltb3ZhcHMJMjAoJWVheCksICV4bW0zCi0JcGFsaWducgkkMTIsICV4bW0yLCAleG1tMwotCXBhbGlnbnIJJDEyLCAleG1tMSwgJXhtbTIKLQotCW1vdmFwcwkleG1tMiwgKCVlZHgpCi0JbW92YXBzCSV4bW0zLCAxNiglZWR4KQotCWxlYQkzMiglZWR4LCAlZWN4KSwgJWVkeAotCWxlYQkzMiglZWF4LCAlZWN4KSwgJWVheAotCVBPUCAoJWVkaSkKLQlCUkFOQ0hfVE9fSk1QVEJMX0VOVFJZKEwodGFibGVfNDhieXRlc19md2QpLCAlZWN4LCA0KQotCi0JQ0ZJX1BVU0ggKCVlZGkpCi0KLQkucDJhbGlnbiA0Ci1MKHNoXzEyX25vX3ByZWZldGNoKToKLQlsZWEJLTMyKCVlY3gpLCAlZWN4Ci0JbGVhCS0xMiglZWF4KSwgJWVheAotCXhvcgklZWRpLCAlZWRpCi0KLQkucDJhbGlnbiA0Ci1MKHNoXzEyX25vX3ByZWZldGNoX2xvb3ApOgotCW1vdmRxYQkxNiglZWF4LCAlZWRpKSwgJXhtbTIKLQlzdWIJJDMyLCAlZWN4Ci0JbW92ZHFhCTMyKCVlYXgsICVlZGkpLCAleG1tMwotCW1vdmRxYQkleG1tMywgJXhtbTQKLQlwYWxpZ25yCSQxMiwgJXhtbTIsICV4bW0zCi0JcGFsaWducgkkMTIsICV4bW0xLCAleG1tMgotCWxlYQkzMiglZWRpKSwgJWVkaQotCW1vdmRxYQkleG1tMiwgLTMyKCVlZHgsICVlZGkpCi0JbW92ZHFhCSV4bW0zLCAtMTYoJWVkeCwgJWVkaSkKLQlqYglMKHNoXzEyX2VuZF9ub19wcmVmZXRjaF9sb29wKQotCi0JbW92ZHFhCTE2KCVlYXgsICVlZGkpLCAleG1tMgotCXN1YgkkMzIsICVlY3gKLQltb3ZkcWEJMzIoJWVheCwgJWVkaSksICV4bW0zCi0JbW92ZHFhCSV4bW0zLCAleG1tMQotCXBhbGlnbnIJJDEyLCAleG1tMiwgJXhtbTMKLQlwYWxpZ25yCSQxMiwgJXhtbTQsICV4bW0yCi0JbGVhCTMyKCVlZGkpLCAlZWRpCi0JbW92ZHFhCSV4bW0yLCAtMzIoJWVkeCwgJWVkaSkKLQltb3ZkcWEJJXhtbTMsIC0xNiglZWR4LCAlZWRpKQotCWphZQlMKHNoXzEyX25vX3ByZWZldGNoX2xvb3ApCi0KLUwoc2hfMTJfZW5kX25vX3ByZWZldGNoX2xvb3ApOgotCWxlYQkzMiglZWN4KSwgJWVjeAotCWFkZAklZWN4LCAlZWRpCi0JYWRkCSVlZGksICVlZHgKLQlsZWEJMTIoJWVkaSwgJWVheCksICVlYXgKLQlQT1AJKCVlZGkpCi0JQlJBTkNIX1RPX0pNUFRCTF9FTlRSWShMKHRhYmxlXzQ4Ynl0ZXNfZndkKSwgJWVjeCwgNCkKLQotCUNGSV9QVVNIICglZWRpKQotCi0JLnAyYWxpZ24gNAotTChzaGxfMTMpOgotI2lmbmRlZiBVU0VfQVNfTUVNTU9WRQotCW1vdmFwcwktMTMoJWVheCksICV4bW0xCi0jZWxzZQotCW1vdmwJREVTVCs0KCVlc3ApLCAlZWRpCi0JbW92YXBzCS0xMyglZWF4KSwgJXhtbTEKLQltb3ZkcXUJJXhtbTAsICglZWRpKQotI2VuZGlmCi0jaWZkZWYgREFUQV9DQUNIRV9TSVpFX0hBTEYKLQljbXAJJERBVEFfQ0FDSEVfU0laRV9IQUxGLCAlZWN4Ci0jZWxzZQotIyBpZiAoZGVmaW5lZCBTSEFSRUQgfHwgZGVmaW5lZCBfX1BJQ19fKQotCVNFVFVQX1BJQ19SRUcoYngpCi0JYWRkCSRfR0xPQkFMX09GRlNFVF9UQUJMRV8sICVlYngKLQljbXAJX194ODZfZGF0YV9jYWNoZV9zaXplX2hhbGZAR09UT0ZGKCVlYngpLCAlZWN4Ci0jIGVsc2UKLQljbXAJX194ODZfZGF0YV9jYWNoZV9zaXplX2hhbGYsICVlY3gKLSMgZW5kaWYKLSNlbmRpZgotCWpiIEwoc2hfMTNfbm9fcHJlZmV0Y2gpCi0KLQlsZWEJLTY0KCVlY3gpLCAlZWN4Ci0KLQkucDJhbGlnbiA0Ci1MKFNobDEzTG9vcFN0YXJ0KToKLQlwcmVmZXRjaHQwIDB4MWMwKCVlYXgpCi0JcHJlZmV0Y2h0MCAweDFjMCglZWR4KQotCW1vdmFwcwkzKCVlYXgpLCAleG1tMgotCW1vdmFwcwkxOSglZWF4KSwgJXhtbTMKLQltb3ZhcHMJMzUoJWVheCksICV4bW00Ci0JbW92YXBzCTUxKCVlYXgpLCAleG1tNQotCW1vdmFwcwkleG1tNSwgJXhtbTcKLQlwYWxpZ25yCSQxMywgJXhtbTQsICV4bW01Ci0JcGFsaWducgkkMTMsICV4bW0zLCAleG1tNAotCW1vdmFwcwkleG1tNSwgNDgoJWVkeCkKLQlwYWxpZ25yCSQxMywgJXhtbTIsICV4bW0zCi0JbGVhCTY0KCVlYXgpLCAlZWF4Ci0JcGFsaWducgkkMTMsICV4bW0xLCAleG1tMgotCW1vdmFwcwkleG1tNCwgMzIoJWVkeCkKLQltb3ZhcHMJJXhtbTMsIDE2KCVlZHgpCi0JbW92YXBzCSV4bW03LCAleG1tMQotCW1vdmFwcwkleG1tMiwgKCVlZHgpCi0JbGVhCTY0KCVlZHgpLCAlZWR4Ci0Jc3ViCSQ2NCwgJWVjeAotCWphCUwoU2hsMTNMb29wU3RhcnQpCi0KLUwoU2hsMTNMb29wTGVhdmUpOgotCWFkZAkkMzIsICVlY3gKLQlqbGUJTChzaGxfZW5kXzApCi0KLQltb3ZhcHMJMyglZWF4KSwgJXhtbTIKLQltb3ZhcHMJMTkoJWVheCksICV4bW0zCi0JcGFsaWducgkkMTMsICV4bW0yLCAleG1tMwotCXBhbGlnbnIJJDEzLCAleG1tMSwgJXhtbTIKLQotCW1vdmFwcwkleG1tMiwgKCVlZHgpCi0JbW92YXBzCSV4bW0zLCAxNiglZWR4KQotCWxlYQkzMiglZWR4LCAlZWN4KSwgJWVkeAotCWxlYQkzMiglZWF4LCAlZWN4KSwgJWVheAotCVBPUCAoJWVkaSkKLQlCUkFOQ0hfVE9fSk1QVEJMX0VOVFJZKEwodGFibGVfNDhieXRlc19md2QpLCAlZWN4LCA0KQotCi0JQ0ZJX1BVU0ggKCVlZGkpCi0KLQkucDJhbGlnbiA0Ci1MKHNoXzEzX25vX3ByZWZldGNoKToKLQlsZWEJLTMyKCVlY3gpLCAlZWN4Ci0JbGVhCS0xMyglZWF4KSwgJWVheAotCXhvcgklZWRpLCAlZWRpCi0KLQkucDJhbGlnbiA0Ci1MKHNoXzEzX25vX3ByZWZldGNoX2xvb3ApOgotCW1vdmRxYQkxNiglZWF4LCAlZWRpKSwgJXhtbTIKLQlzdWIJJDMyLCAlZWN4Ci0JbW92ZHFhCTMyKCVlYXgsICVlZGkpLCAleG1tMwotCW1vdmRxYQkleG1tMywgJXhtbTQKLQlwYWxpZ25yCSQxMywgJXhtbTIsICV4bW0zCi0JcGFsaWducgkkMTMsICV4bW0xLCAleG1tMgotCWxlYQkzMiglZWRpKSwgJWVkaQotCW1vdmRxYQkleG1tMiwgLTMyKCVlZHgsICVlZGkpCi0JbW92ZHFhCSV4bW0zLCAtMTYoJWVkeCwgJWVkaSkKLQlqYglMKHNoXzEzX2VuZF9ub19wcmVmZXRjaF9sb29wKQotCi0JbW92ZHFhCTE2KCVlYXgsICVlZGkpLCAleG1tMgotCXN1YgkkMzIsICVlY3gKLQltb3ZkcWEJMzIoJWVheCwgJWVkaSksICV4bW0zCi0JbW92ZHFhCSV4bW0zLCAleG1tMQotCXBhbGlnbnIJJDEzLCAleG1tMiwgJXhtbTMKLQlwYWxpZ25yCSQxMywgJXhtbTQsICV4bW0yCi0JbGVhCTMyKCVlZGkpLCAlZWRpCi0JbW92ZHFhCSV4bW0yLCAtMzIoJWVkeCwgJWVkaSkKLQltb3ZkcWEJJXhtbTMsIC0xNiglZWR4LCAlZWRpKQotCWphZQlMKHNoXzEzX25vX3ByZWZldGNoX2xvb3ApCi0KLUwoc2hfMTNfZW5kX25vX3ByZWZldGNoX2xvb3ApOgotCWxlYQkzMiglZWN4KSwgJWVjeAotCWFkZAklZWN4LCAlZWRpCi0JYWRkCSVlZGksICVlZHgKLQlsZWEJMTMoJWVkaSwgJWVheCksICVlYXgKLQlQT1AJKCVlZGkpCi0JQlJBTkNIX1RPX0pNUFRCTF9FTlRSWShMKHRhYmxlXzQ4Ynl0ZXNfZndkKSwgJWVjeCwgNCkKLQotCUNGSV9QVVNIICglZWRpKQotCi0JLnAyYWxpZ24gNAotTChzaGxfMTQpOgotI2lmbmRlZiBVU0VfQVNfTUVNTU9WRQotCW1vdmFwcwktMTQoJWVheCksICV4bW0xCi0jZWxzZQotCW1vdmwJREVTVCs0KCVlc3ApLCAlZWRpCi0JbW92YXBzCS0xNCglZWF4KSwgJXhtbTEKLQltb3ZkcXUJJXhtbTAsICglZWRpKQotI2VuZGlmCi0jaWZkZWYgREFUQV9DQUNIRV9TSVpFX0hBTEYKLQljbXAJJERBVEFfQ0FDSEVfU0laRV9IQUxGLCAlZWN4Ci0jZWxzZQotIyBpZiAoZGVmaW5lZCBTSEFSRUQgfHwgZGVmaW5lZCBfX1BJQ19fKQotCVNFVFVQX1BJQ19SRUcoYngpCi0JYWRkCSRfR0xPQkFMX09GRlNFVF9UQUJMRV8sICVlYngKLQljbXAJX194ODZfZGF0YV9jYWNoZV9zaXplX2hhbGZAR09UT0ZGKCVlYngpLCAlZWN4Ci0jIGVsc2UKLQljbXAJX194ODZfZGF0YV9jYWNoZV9zaXplX2hhbGYsICVlY3gKLSMgZW5kaWYKLSNlbmRpZgotCWpiIEwoc2hfMTRfbm9fcHJlZmV0Y2gpCi0KLQlsZWEJLTY0KCVlY3gpLCAlZWN4Ci0KLQkucDJhbGlnbiA0Ci1MKFNobDE0TG9vcFN0YXJ0KToKLQlwcmVmZXRjaHQwIDB4MWMwKCVlYXgpCi0JcHJlZmV0Y2h0MCAweDFjMCglZWR4KQotCW1vdmFwcwkyKCVlYXgpLCAleG1tMgotCW1vdmFwcwkxOCglZWF4KSwgJXhtbTMKLQltb3ZhcHMJMzQoJWVheCksICV4bW00Ci0JbW92YXBzCTUwKCVlYXgpLCAleG1tNQotCW1vdmFwcwkleG1tNSwgJXhtbTcKLQlwYWxpZ25yCSQxNCwgJXhtbTQsICV4bW01Ci0JcGFsaWducgkkMTQsICV4bW0zLCAleG1tNAotCW1vdmFwcwkleG1tNSwgNDgoJWVkeCkKLQlwYWxpZ25yCSQxNCwgJXhtbTIsICV4bW0zCi0JbGVhCTY0KCVlYXgpLCAlZWF4Ci0JcGFsaWducgkkMTQsICV4bW0xLCAleG1tMgotCW1vdmFwcwkleG1tNCwgMzIoJWVkeCkKLQltb3ZhcHMJJXhtbTMsIDE2KCVlZHgpCi0JbW92YXBzCSV4bW03LCAleG1tMQotCW1vdmFwcwkleG1tMiwgKCVlZHgpCi0JbGVhCTY0KCVlZHgpLCAlZWR4Ci0Jc3ViCSQ2NCwgJWVjeAotCWphCUwoU2hsMTRMb29wU3RhcnQpCi0KLUwoU2hsMTRMb29wTGVhdmUpOgotCWFkZAkkMzIsICVlY3gKLQlqbGUJTChzaGxfZW5kXzApCi0KLQltb3ZhcHMJMiglZWF4KSwgJXhtbTIKLQltb3ZhcHMJMTgoJWVheCksICV4bW0zCi0JcGFsaWducgkkMTQsICV4bW0yLCAleG1tMwotCXBhbGlnbnIJJDE0LCAleG1tMSwgJXhtbTIKLQotCW1vdmFwcwkleG1tMiwgKCVlZHgpCi0JbW92YXBzCSV4bW0zLCAxNiglZWR4KQotCWxlYQkzMiglZWR4LCAlZWN4KSwgJWVkeAotCWxlYQkzMiglZWF4LCAlZWN4KSwgJWVheAotCVBPUCAoJWVkaSkKLQlCUkFOQ0hfVE9fSk1QVEJMX0VOVFJZKEwodGFibGVfNDhieXRlc19md2QpLCAlZWN4LCA0KQotCi0JQ0ZJX1BVU0ggKCVlZGkpCi0KLQkucDJhbGlnbiA0Ci1MKHNoXzE0X25vX3ByZWZldGNoKToKLQlsZWEJLTMyKCVlY3gpLCAlZWN4Ci0JbGVhCS0xNCglZWF4KSwgJWVheAotCXhvcgklZWRpLCAlZWRpCi0KLQkucDJhbGlnbiA0Ci1MKHNoXzE0X25vX3ByZWZldGNoX2xvb3ApOgotCW1vdmRxYQkxNiglZWF4LCAlZWRpKSwgJXhtbTIKLQlzdWIJJDMyLCAlZWN4Ci0JbW92ZHFhCTMyKCVlYXgsICVlZGkpLCAleG1tMwotCW1vdmRxYQkleG1tMywgJXhtbTQKLQlwYWxpZ25yCSQxNCwgJXhtbTIsICV4bW0zCi0JcGFsaWducgkkMTQsICV4bW0xLCAleG1tMgotCWxlYQkzMiglZWRpKSwgJWVkaQotCW1vdmRxYQkleG1tMiwgLTMyKCVlZHgsICVlZGkpCi0JbW92ZHFhCSV4bW0zLCAtMTYoJWVkeCwgJWVkaSkKLQlqYglMKHNoXzE0X2VuZF9ub19wcmVmZXRjaF9sb29wKQotCi0JbW92ZHFhCTE2KCVlYXgsICVlZGkpLCAleG1tMgotCXN1YgkkMzIsICVlY3gKLQltb3ZkcWEJMzIoJWVheCwgJWVkaSksICV4bW0zCi0JbW92ZHFhCSV4bW0zLCAleG1tMQotCXBhbGlnbnIJJDE0LCAleG1tMiwgJXhtbTMKLQlwYWxpZ25yCSQxNCwgJXhtbTQsICV4bW0yCi0JbGVhCTMyKCVlZGkpLCAlZWRpCi0JbW92ZHFhCSV4bW0yLCAtMzIoJWVkeCwgJWVkaSkKLQltb3ZkcWEJJXhtbTMsIC0xNiglZWR4LCAlZWRpKQotCWphZQlMKHNoXzE0X25vX3ByZWZldGNoX2xvb3ApCi0KLUwoc2hfMTRfZW5kX25vX3ByZWZldGNoX2xvb3ApOgotCWxlYQkzMiglZWN4KSwgJWVjeAotCWFkZAklZWN4LCAlZWRpCi0JYWRkCSVlZGksICVlZHgKLQlsZWEJMTQoJWVkaSwgJWVheCksICVlYXgKLQlQT1AJKCVlZGkpCi0JQlJBTkNIX1RPX0pNUFRCTF9FTlRSWShMKHRhYmxlXzQ4Ynl0ZXNfZndkKSwgJWVjeCwgNCkKLQotCUNGSV9QVVNIICglZWRpKQotCi0JLnAyYWxpZ24gNAotTChzaGxfMTUpOgotI2lmbmRlZiBVU0VfQVNfTUVNTU9WRQotCW1vdmFwcwktMTUoJWVheCksICV4bW0xCi0jZWxzZQotCW1vdmwJREVTVCs0KCVlc3ApLCAlZWRpCi0JbW92YXBzCS0xNSglZWF4KSwgJXhtbTEKLQltb3ZkcXUJJXhtbTAsICglZWRpKQotI2VuZGlmCi0jaWZkZWYgREFUQV9DQUNIRV9TSVpFX0hBTEYKLQljbXAJJERBVEFfQ0FDSEVfU0laRV9IQUxGLCAlZWN4Ci0jZWxzZQotIyBpZiAoZGVmaW5lZCBTSEFSRUQgfHwgZGVmaW5lZCBfX1BJQ19fKQotCVNFVFVQX1BJQ19SRUcoYngpCi0JYWRkCSRfR0xPQkFMX09GRlNFVF9UQUJMRV8sICVlYngKLQljbXAJX194ODZfZGF0YV9jYWNoZV9zaXplX2hhbGZAR09UT0ZGKCVlYngpLCAlZWN4Ci0jIGVsc2UKLQljbXAJX194ODZfZGF0YV9jYWNoZV9zaXplX2hhbGYsICVlY3gKLSMgZW5kaWYKLSNlbmRpZgotCWpiIEwoc2hfMTVfbm9fcHJlZmV0Y2gpCi0KLQlsZWEJLTY0KCVlY3gpLCAlZWN4Ci0KLQkucDJhbGlnbiA0Ci1MKFNobDE1TG9vcFN0YXJ0KToKLQlwcmVmZXRjaHQwIDB4MWMwKCVlYXgpCi0JcHJlZmV0Y2h0MCAweDFjMCglZWR4KQotCW1vdmFwcwkxKCVlYXgpLCAleG1tMgotCW1vdmFwcwkxNyglZWF4KSwgJXhtbTMKLQltb3ZhcHMJMzMoJWVheCksICV4bW00Ci0JbW92YXBzCTQ5KCVlYXgpLCAleG1tNQotCW1vdmFwcwkleG1tNSwgJXhtbTcKLQlwYWxpZ25yCSQxNSwgJXhtbTQsICV4bW01Ci0JcGFsaWducgkkMTUsICV4bW0zLCAleG1tNAotCW1vdmFwcwkleG1tNSwgNDgoJWVkeCkKLQlwYWxpZ25yCSQxNSwgJXhtbTIsICV4bW0zCi0JbGVhCTY0KCVlYXgpLCAlZWF4Ci0JcGFsaWducgkkMTUsICV4bW0xLCAleG1tMgotCW1vdmFwcwkleG1tNCwgMzIoJWVkeCkKLQltb3ZhcHMJJXhtbTMsIDE2KCVlZHgpCi0JbW92YXBzCSV4bW03LCAleG1tMQotCW1vdmFwcwkleG1tMiwgKCVlZHgpCi0JbGVhCTY0KCVlZHgpLCAlZWR4Ci0Jc3ViCSQ2NCwgJWVjeAotCWphCUwoU2hsMTVMb29wU3RhcnQpCi0KLUwoU2hsMTVMb29wTGVhdmUpOgotCWFkZAkkMzIsICVlY3gKLQlqbGUJTChzaGxfZW5kXzApCi0KLQltb3ZhcHMJMSglZWF4KSwgJXhtbTIKLQltb3ZhcHMJMTcoJWVheCksICV4bW0zCi0JcGFsaWducgkkMTUsICV4bW0yLCAleG1tMwotCXBhbGlnbnIJJDE1LCAleG1tMSwgJXhtbTIKLQotCW1vdmFwcwkleG1tMiwgKCVlZHgpCi0JbW92YXBzCSV4bW0zLCAxNiglZWR4KQotCWxlYQkzMiglZWR4LCAlZWN4KSwgJWVkeAotCWxlYQkzMiglZWF4LCAlZWN4KSwgJWVheAotCVBPUCAoJWVkaSkKLQlCUkFOQ0hfVE9fSk1QVEJMX0VOVFJZKEwodGFibGVfNDhieXRlc19md2QpLCAlZWN4LCA0KQotCi0JQ0ZJX1BVU0ggKCVlZGkpCi0KLQkucDJhbGlnbiA0Ci1MKHNoXzE1X25vX3ByZWZldGNoKToKLQlsZWEJLTMyKCVlY3gpLCAlZWN4Ci0JbGVhCS0xNSglZWF4KSwgJWVheAotCXhvcgklZWRpLCAlZWRpCi0KLQkucDJhbGlnbiA0Ci1MKHNoXzE1X25vX3ByZWZldGNoX2xvb3ApOgotCW1vdmRxYQkxNiglZWF4LCAlZWRpKSwgJXhtbTIKLQlzdWIJJDMyLCAlZWN4Ci0JbW92ZHFhCTMyKCVlYXgsICVlZGkpLCAleG1tMwotCW1vdmRxYQkleG1tMywgJXhtbTQKLQlwYWxpZ25yCSQxNSwgJXhtbTIsICV4bW0zCi0JcGFsaWducgkkMTUsICV4bW0xLCAleG1tMgotCWxlYQkzMiglZWRpKSwgJWVkaQotCW1vdmRxYQkleG1tMiwgLTMyKCVlZHgsICVlZGkpCi0JbW92ZHFhCSV4bW0zLCAtMTYoJWVkeCwgJWVkaSkKLQlqYglMKHNoXzE1X2VuZF9ub19wcmVmZXRjaF9sb29wKQotCi0JbW92ZHFhCTE2KCVlYXgsICVlZGkpLCAleG1tMgotCXN1YgkkMzIsICVlY3gKLQltb3ZkcWEJMzIoJWVheCwgJWVkaSksICV4bW0zCi0JbW92ZHFhCSV4bW0zLCAleG1tMQotCXBhbGlnbnIJJDE1LCAleG1tMiwgJXhtbTMKLQlwYWxpZ25yCSQxNSwgJXhtbTQsICV4bW0yCi0JbGVhCTMyKCVlZGkpLCAlZWRpCi0JbW92ZHFhCSV4bW0yLCAtMzIoJWVkeCwgJWVkaSkKLQltb3ZkcWEJJXhtbTMsIC0xNiglZWR4LCAlZWRpKQotCWphZQlMKHNoXzE1X25vX3ByZWZldGNoX2xvb3ApCi0KLUwoc2hfMTVfZW5kX25vX3ByZWZldGNoX2xvb3ApOgotCWxlYQkzMiglZWN4KSwgJWVjeAotCWFkZAklZWN4LCAlZWRpCi0JYWRkCSVlZGksICVlZHgKLQlsZWEJMTUoJWVkaSwgJWVheCksICVlYXgKLQlQT1AJKCVlZGkpCi0JQlJBTkNIX1RPX0pNUFRCTF9FTlRSWShMKHRhYmxlXzQ4Ynl0ZXNfZndkKSwgJWVjeCwgNCkKLQotCUNGSV9QVVNIICglZWRpKQotCi0JLnAyYWxpZ24gNAotTChzaGxfZW5kXzApOgotCWxlYQkzMiglZWN4KSwgJWVjeAotCWxlYQkoJWVkeCwgJWVjeCksICVlZHgKLQlsZWEJKCVlYXgsICVlY3gpLCAlZWF4Ci0JUE9QCSglZWRpKQotCUJSQU5DSF9UT19KTVBUQkxfRU5UUlkoTCh0YWJsZV80OGJ5dGVzX2Z3ZCksICVlY3gsIDQpCi0KLQkucDJhbGlnbiA0Ci1MKGZ3ZF93cml0ZV80NGJ5dGVzKToKLQltb3ZxCS00NCglZWF4KSwgJXhtbTAKLQltb3ZxCSV4bW0wLCAtNDQoJWVkeCkKLUwoZndkX3dyaXRlXzM2Ynl0ZXMpOgotCW1vdnEJLTM2KCVlYXgpLCAleG1tMAotCW1vdnEJJXhtbTAsIC0zNiglZWR4KQotTChmd2Rfd3JpdGVfMjhieXRlcyk6Ci0JbW92cQktMjgoJWVheCksICV4bW0wCi0JbW92cQkleG1tMCwgLTI4KCVlZHgpCi1MKGZ3ZF93cml0ZV8yMGJ5dGVzKToKLQltb3ZxCS0yMCglZWF4KSwgJXhtbTAKLQltb3ZxCSV4bW0wLCAtMjAoJWVkeCkKLUwoZndkX3dyaXRlXzEyYnl0ZXMpOgotCW1vdnEJLTEyKCVlYXgpLCAleG1tMAotCW1vdnEJJXhtbTAsIC0xMiglZWR4KQotTChmd2Rfd3JpdGVfNGJ5dGVzKToKLQltb3ZsCS00KCVlYXgpLCAlZWN4Ci0JbW92bAklZWN4LCAtNCglZWR4KQotI2lmbmRlZiBVU0VfQVNfQkNPUFkKLSMgaWZkZWYgVVNFX0FTX01FTVBDUFkKLQltb3ZsCSVlZHgsICVlYXgKLSMgZWxzZQotCW1vdmwJREVTVCglZXNwKSwgJWVheAotIyBlbmRpZgotI2VuZGlmCi0JUkVUVVJOCi0KLQkucDJhbGlnbiA0Ci1MKGZ3ZF93cml0ZV80MGJ5dGVzKToKLQltb3ZxCS00MCglZWF4KSwgJXhtbTAKLQltb3ZxCSV4bW0wLCAtNDAoJWVkeCkKLUwoZndkX3dyaXRlXzMyYnl0ZXMpOgotCW1vdnEJLTMyKCVlYXgpLCAleG1tMAotCW1vdnEJJXhtbTAsIC0zMiglZWR4KQotTChmd2Rfd3JpdGVfMjRieXRlcyk6Ci0JbW92cQktMjQoJWVheCksICV4bW0wCi0JbW92cQkleG1tMCwgLTI0KCVlZHgpCi1MKGZ3ZF93cml0ZV8xNmJ5dGVzKToKLQltb3ZxCS0xNiglZWF4KSwgJXhtbTAKLQltb3ZxCSV4bW0wLCAtMTYoJWVkeCkKLUwoZndkX3dyaXRlXzhieXRlcyk6Ci0JbW92cQktOCglZWF4KSwgJXhtbTAKLQltb3ZxCSV4bW0wLCAtOCglZWR4KQotTChmd2Rfd3JpdGVfMGJ5dGVzKToKLSNpZm5kZWYgVVNFX0FTX0JDT1BZCi0jIGlmZGVmIFVTRV9BU19NRU1QQ1BZCi0JbW92bAklZWR4LCAlZWF4Ci0jIGVsc2UKLQltb3ZsCURFU1QoJWVzcCksICVlYXgKLSMgZW5kaWYKLSNlbmRpZgotCVJFVFVSTgotCi0JLnAyYWxpZ24gNAotTChmd2Rfd3JpdGVfNWJ5dGVzKToKLQltb3ZsCS01KCVlYXgpLCAlZWN4Ci0JbW92bAktNCglZWF4KSwgJWVheAotCW1vdmwJJWVjeCwgLTUoJWVkeCkKLQltb3ZsCSVlYXgsIC00KCVlZHgpCi0jaWZuZGVmIFVTRV9BU19CQ09QWQotIyBpZmRlZiBVU0VfQVNfTUVNUENQWQotCW1vdmwJJWVkeCwgJWVheAotIyBlbHNlCi0JbW92bAlERVNUKCVlc3ApLCAlZWF4Ci0jIGVuZGlmCi0jZW5kaWYKLQlSRVRVUk4KLQotCS5wMmFsaWduIDQKLUwoZndkX3dyaXRlXzQ1Ynl0ZXMpOgotCW1vdnEJLTQ1KCVlYXgpLCAleG1tMAotCW1vdnEJJXhtbTAsIC00NSglZWR4KQotTChmd2Rfd3JpdGVfMzdieXRlcyk6Ci0JbW92cQktMzcoJWVheCksICV4bW0wCi0JbW92cQkleG1tMCwgLTM3KCVlZHgpCi1MKGZ3ZF93cml0ZV8yOWJ5dGVzKToKLQltb3ZxCS0yOSglZWF4KSwgJXhtbTAKLQltb3ZxCSV4bW0wLCAtMjkoJWVkeCkKLUwoZndkX3dyaXRlXzIxYnl0ZXMpOgotCW1vdnEJLTIxKCVlYXgpLCAleG1tMAotCW1vdnEJJXhtbTAsIC0yMSglZWR4KQotTChmd2Rfd3JpdGVfMTNieXRlcyk6Ci0JbW92cQktMTMoJWVheCksICV4bW0wCi0JbW92cQkleG1tMCwgLTEzKCVlZHgpCi0JbW92bAktNSglZWF4KSwgJWVjeAotCW1vdmwJJWVjeCwgLTUoJWVkeCkKLQltb3Z6YmwJLTEoJWVheCksICVlY3gKLQltb3ZiCSVjbCwgLTEoJWVkeCkKLSNpZm5kZWYgVVNFX0FTX0JDT1BZCi0jIGlmZGVmIFVTRV9BU19NRU1QQ1BZCi0JbW92bAklZWR4LCAlZWF4Ci0jIGVsc2UKLQltb3ZsCURFU1QoJWVzcCksICVlYXgKLSMgZW5kaWYKLSNlbmRpZgotCVJFVFVSTgotCi0JLnAyYWxpZ24gNAotTChmd2Rfd3JpdGVfNDFieXRlcyk6Ci0JbW92cQktNDEoJWVheCksICV4bW0wCi0JbW92cQkleG1tMCwgLTQxKCVlZHgpCi1MKGZ3ZF93cml0ZV8zM2J5dGVzKToKLQltb3ZxCS0zMyglZWF4KSwgJXhtbTAKLQltb3ZxCSV4bW0wLCAtMzMoJWVkeCkKLUwoZndkX3dyaXRlXzI1Ynl0ZXMpOgotCW1vdnEJLTI1KCVlYXgpLCAleG1tMAotCW1vdnEJJXhtbTAsIC0yNSglZWR4KQotTChmd2Rfd3JpdGVfMTdieXRlcyk6Ci0JbW92cQktMTcoJWVheCksICV4bW0wCi0JbW92cQkleG1tMCwgLTE3KCVlZHgpCi1MKGZ3ZF93cml0ZV85Ynl0ZXMpOgotCW1vdnEJLTkoJWVheCksICV4bW0wCi0JbW92cQkleG1tMCwgLTkoJWVkeCkKLUwoZndkX3dyaXRlXzFieXRlcyk6Ci0JbW92emJsCS0xKCVlYXgpLCAlZWN4Ci0JbW92YgklY2wsIC0xKCVlZHgpCi0jaWZuZGVmIFVTRV9BU19CQ09QWQotIyBpZmRlZiBVU0VfQVNfTUVNUENQWQotCW1vdmwJJWVkeCwgJWVheAotIyBlbHNlCi0JbW92bAlERVNUKCVlc3ApLCAlZWF4Ci0jIGVuZGlmCi0jZW5kaWYKLQlSRVRVUk4KLQotCS5wMmFsaWduIDQKLUwoZndkX3dyaXRlXzQ2Ynl0ZXMpOgotCW1vdnEJLTQ2KCVlYXgpLCAleG1tMAotCW1vdnEJJXhtbTAsIC00NiglZWR4KQotTChmd2Rfd3JpdGVfMzhieXRlcyk6Ci0JbW92cQktMzgoJWVheCksICV4bW0wCi0JbW92cQkleG1tMCwgLTM4KCVlZHgpCi1MKGZ3ZF93cml0ZV8zMGJ5dGVzKToKLQltb3ZxCS0zMCglZWF4KSwgJXhtbTAKLQltb3ZxCSV4bW0wLCAtMzAoJWVkeCkKLUwoZndkX3dyaXRlXzIyYnl0ZXMpOgotCW1vdnEJLTIyKCVlYXgpLCAleG1tMAotCW1vdnEJJXhtbTAsIC0yMiglZWR4KQotTChmd2Rfd3JpdGVfMTRieXRlcyk6Ci0JbW92cQktMTQoJWVheCksICV4bW0wCi0JbW92cQkleG1tMCwgLTE0KCVlZHgpCi1MKGZ3ZF93cml0ZV82Ynl0ZXMpOgotCW1vdmwJLTYoJWVheCksICVlY3gKLQltb3ZsCSVlY3gsIC02KCVlZHgpCi0JbW92endsCS0yKCVlYXgpLCAlZWN4Ci0JbW92dwklY3gsIC0yKCVlZHgpCi0jaWZuZGVmIFVTRV9BU19CQ09QWQotIyBpZmRlZiBVU0VfQVNfTUVNUENQWQotCW1vdmwJJWVkeCwgJWVheAotIyBlbHNlCi0JbW92bAlERVNUKCVlc3ApLCAlZWF4Ci0jIGVuZGlmCi0jZW5kaWYKLQlSRVRVUk4KLQotCS5wMmFsaWduIDQKLUwoZndkX3dyaXRlXzQyYnl0ZXMpOgotCW1vdnEJLTQyKCVlYXgpLCAleG1tMAotCW1vdnEJJXhtbTAsIC00MiglZWR4KQotTChmd2Rfd3JpdGVfMzRieXRlcyk6Ci0JbW92cQktMzQoJWVheCksICV4bW0wCi0JbW92cQkleG1tMCwgLTM0KCVlZHgpCi1MKGZ3ZF93cml0ZV8yNmJ5dGVzKToKLQltb3ZxCS0yNiglZWF4KSwgJXhtbTAKLQltb3ZxCSV4bW0wLCAtMjYoJWVkeCkKLUwoZndkX3dyaXRlXzE4Ynl0ZXMpOgotCW1vdnEJLTE4KCVlYXgpLCAleG1tMAotCW1vdnEJJXhtbTAsIC0xOCglZWR4KQotTChmd2Rfd3JpdGVfMTBieXRlcyk6Ci0JbW92cQktMTAoJWVheCksICV4bW0wCi0JbW92cQkleG1tMCwgLTEwKCVlZHgpCi1MKGZ3ZF93cml0ZV8yYnl0ZXMpOgotCW1vdnp3bAktMiglZWF4KSwgJWVjeAotCW1vdncJJWN4LCAtMiglZWR4KQotI2lmbmRlZiBVU0VfQVNfQkNPUFkKLSMgaWZkZWYgVVNFX0FTX01FTVBDUFkKLQltb3ZsCSVlZHgsICVlYXgKLSMgZWxzZQotCW1vdmwJREVTVCglZXNwKSwgJWVheAotIyBlbmRpZgotI2VuZGlmCi0JUkVUVVJOCi0KLQkucDJhbGlnbiA0Ci1MKGZ3ZF93cml0ZV80N2J5dGVzKToKLQltb3ZxCS00NyglZWF4KSwgJXhtbTAKLQltb3ZxCSV4bW0wLCAtNDcoJWVkeCkKLUwoZndkX3dyaXRlXzM5Ynl0ZXMpOgotCW1vdnEJLTM5KCVlYXgpLCAleG1tMAotCW1vdnEJJXhtbTAsIC0zOSglZWR4KQotTChmd2Rfd3JpdGVfMzFieXRlcyk6Ci0JbW92cQktMzEoJWVheCksICV4bW0wCi0JbW92cQkleG1tMCwgLTMxKCVlZHgpCi1MKGZ3ZF93cml0ZV8yM2J5dGVzKToKLQltb3ZxCS0yMyglZWF4KSwgJXhtbTAKLQltb3ZxCSV4bW0wLCAtMjMoJWVkeCkKLUwoZndkX3dyaXRlXzE1Ynl0ZXMpOgotCW1vdnEJLTE1KCVlYXgpLCAleG1tMAotCW1vdnEJJXhtbTAsIC0xNSglZWR4KQotTChmd2Rfd3JpdGVfN2J5dGVzKToKLQltb3ZsCS03KCVlYXgpLCAlZWN4Ci0JbW92bAklZWN4LCAtNyglZWR4KQotCW1vdnp3bAktMyglZWF4KSwgJWVjeAotCW1vdnpibAktMSglZWF4KSwgJWVheAotCW1vdncJJWN4LCAtMyglZWR4KQotCW1vdmIJJWFsLCAtMSglZWR4KQotI2lmbmRlZiBVU0VfQVNfQkNPUFkKLSMgaWZkZWYgVVNFX0FTX01FTVBDUFkKLQltb3ZsCSVlZHgsICVlYXgKLSMgZWxzZQotCW1vdmwJREVTVCglZXNwKSwgJWVheAotIyBlbmRpZgotI2VuZGlmCi0JUkVUVVJOCi0KLQkucDJhbGlnbiA0Ci1MKGZ3ZF93cml0ZV80M2J5dGVzKToKLQltb3ZxCS00MyglZWF4KSwgJXhtbTAKLQltb3ZxCSV4bW0wLCAtNDMoJWVkeCkKLUwoZndkX3dyaXRlXzM1Ynl0ZXMpOgotCW1vdnEJLTM1KCVlYXgpLCAleG1tMAotCW1vdnEJJXhtbTAsIC0zNSglZWR4KQotTChmd2Rfd3JpdGVfMjdieXRlcyk6Ci0JbW92cQktMjcoJWVheCksICV4bW0wCi0JbW92cQkleG1tMCwgLTI3KCVlZHgpCi1MKGZ3ZF93cml0ZV8xOWJ5dGVzKToKLQltb3ZxCS0xOSglZWF4KSwgJXhtbTAKLQltb3ZxCSV4bW0wLCAtMTkoJWVkeCkKLUwoZndkX3dyaXRlXzExYnl0ZXMpOgotCW1vdnEJLTExKCVlYXgpLCAleG1tMAotCW1vdnEJJXhtbTAsIC0xMSglZWR4KQotTChmd2Rfd3JpdGVfM2J5dGVzKToKLQltb3Z6d2wJLTMoJWVheCksICVlY3gKLQltb3Z6YmwJLTEoJWVheCksICVlYXgKLQltb3Z3CSVjeCwgLTMoJWVkeCkKLQltb3ZiCSVhbCwgLTEoJWVkeCkKLSNpZm5kZWYgVVNFX0FTX0JDT1BZCi0jIGlmZGVmIFVTRV9BU19NRU1QQ1BZCi0JbW92bAklZWR4LCAlZWF4Ci0jIGVsc2UKLQltb3ZsCURFU1QoJWVzcCksICVlYXgKLSMgZW5kaWYKLSNlbmRpZgotCVJFVFVSTgotCi0JLnAyYWxpZ24gNAotTChmd2Rfd3JpdGVfNDBieXRlc19hbGlnbik6Ci0JbW92ZHFhCS00MCglZWF4KSwgJXhtbTAKLQltb3ZkcWEJJXhtbTAsIC00MCglZWR4KQotTChmd2Rfd3JpdGVfMjRieXRlc19hbGlnbik6Ci0JbW92ZHFhCS0yNCglZWF4KSwgJXhtbTAKLQltb3ZkcWEJJXhtbTAsIC0yNCglZWR4KQotTChmd2Rfd3JpdGVfOGJ5dGVzX2FsaWduKToKLQltb3ZxCS04KCVlYXgpLCAleG1tMAotCW1vdnEJJXhtbTAsIC04KCVlZHgpCi1MKGZ3ZF93cml0ZV8wYnl0ZXNfYWxpZ24pOgotI2lmbmRlZiBVU0VfQVNfQkNPUFkKLSMgaWZkZWYgVVNFX0FTX01FTVBDUFkKLQltb3ZsCSVlZHgsICVlYXgKLSMgZWxzZQotCW1vdmwJREVTVCglZXNwKSwgJWVheAotIyBlbmRpZgotI2VuZGlmCi0JUkVUVVJOCi0KLQkucDJhbGlnbiA0Ci1MKGZ3ZF93cml0ZV8zMmJ5dGVzX2FsaWduKToKLQltb3ZkcWEJLTMyKCVlYXgpLCAleG1tMAotCW1vdmRxYQkleG1tMCwgLTMyKCVlZHgpCi1MKGZ3ZF93cml0ZV8xNmJ5dGVzX2FsaWduKToKLQltb3ZkcWEJLTE2KCVlYXgpLCAleG1tMAotCW1vdmRxYQkleG1tMCwgLTE2KCVlZHgpCi0jaWZuZGVmIFVTRV9BU19CQ09QWQotIyBpZmRlZiBVU0VfQVNfTUVNUENQWQotCW1vdmwJJWVkeCwgJWVheAotIyBlbHNlCi0JbW92bAlERVNUKCVlc3ApLCAlZWF4Ci0jIGVuZGlmCi0jZW5kaWYKLQlSRVRVUk4KLQotCS5wMmFsaWduIDQKLUwoZndkX3dyaXRlXzVieXRlc19hbGlnbik6Ci0JbW92bAktNSglZWF4KSwgJWVjeAotCW1vdmwJLTQoJWVheCksICVlYXgKLQltb3ZsCSVlY3gsIC01KCVlZHgpCi0JbW92bAklZWF4LCAtNCglZWR4KQotI2lmbmRlZiBVU0VfQVNfQkNPUFkKLSMgaWZkZWYgVVNFX0FTX01FTVBDUFkKLQltb3ZsCSVlZHgsICVlYXgKLSMgZWxzZQotCW1vdmwJREVTVCglZXNwKSwgJWVheAotIyBlbmRpZgotI2VuZGlmCi0JUkVUVVJOCi0KLQkucDJhbGlnbiA0Ci1MKGZ3ZF93cml0ZV80NWJ5dGVzX2FsaWduKToKLQltb3ZkcWEJLTQ1KCVlYXgpLCAleG1tMAotCW1vdmRxYQkleG1tMCwgLTQ1KCVlZHgpCi1MKGZ3ZF93cml0ZV8yOWJ5dGVzX2FsaWduKToKLQltb3ZkcWEJLTI5KCVlYXgpLCAleG1tMAotCW1vdmRxYQkleG1tMCwgLTI5KCVlZHgpCi1MKGZ3ZF93cml0ZV8xM2J5dGVzX2FsaWduKToKLQltb3ZxCS0xMyglZWF4KSwgJXhtbTAKLQltb3ZxCSV4bW0wLCAtMTMoJWVkeCkKLQltb3ZsCS01KCVlYXgpLCAlZWN4Ci0JbW92bAklZWN4LCAtNSglZWR4KQotCW1vdnpibAktMSglZWF4KSwgJWVjeAotCW1vdmIJJWNsLCAtMSglZWR4KQotI2lmbmRlZiBVU0VfQVNfQkNPUFkKLSMgaWZkZWYgVVNFX0FTX01FTVBDUFkKLQltb3ZsCSVlZHgsICVlYXgKLSMgZWxzZQotCW1vdmwJREVTVCglZXNwKSwgJWVheAotIyBlbmRpZgotI2VuZGlmCi0JUkVUVVJOCi0KLQkucDJhbGlnbiA0Ci1MKGZ3ZF93cml0ZV8zN2J5dGVzX2FsaWduKToKLQltb3ZkcWEJLTM3KCVlYXgpLCAleG1tMAotCW1vdmRxYQkleG1tMCwgLTM3KCVlZHgpCi1MKGZ3ZF93cml0ZV8yMWJ5dGVzX2FsaWduKToKLQltb3ZkcWEJLTIxKCVlYXgpLCAleG1tMAotCW1vdmRxYQkleG1tMCwgLTIxKCVlZHgpCi0JbW92bAktNSglZWF4KSwgJWVjeAotCW1vdmwJJWVjeCwgLTUoJWVkeCkKLQltb3Z6YmwJLTEoJWVheCksICVlY3gKLQltb3ZiCSVjbCwgLTEoJWVkeCkKLSNpZm5kZWYgVVNFX0FTX0JDT1BZCi0jIGlmZGVmIFVTRV9BU19NRU1QQ1BZCi0JbW92bAklZWR4LCAlZWF4Ci0jIGVsc2UKLQltb3ZsCURFU1QoJWVzcCksICVlYXgKLSMgZW5kaWYKLSNlbmRpZgotCVJFVFVSTgotCi0JLnAyYWxpZ24gNAotTChmd2Rfd3JpdGVfNDFieXRlc19hbGlnbik6Ci0JbW92ZHFhCS00MSglZWF4KSwgJXhtbTAKLQltb3ZkcWEJJXhtbTAsIC00MSglZWR4KQotTChmd2Rfd3JpdGVfMjVieXRlc19hbGlnbik6Ci0JbW92ZHFhCS0yNSglZWF4KSwgJXhtbTAKLQltb3ZkcWEJJXhtbTAsIC0yNSglZWR4KQotTChmd2Rfd3JpdGVfOWJ5dGVzX2FsaWduKToKLQltb3ZxCS05KCVlYXgpLCAleG1tMAotCW1vdnEJJXhtbTAsIC05KCVlZHgpCi1MKGZ3ZF93cml0ZV8xYnl0ZXNfYWxpZ24pOgotCW1vdnpibAktMSglZWF4KSwgJWVjeAotCW1vdmIJJWNsLCAtMSglZWR4KQotI2lmbmRlZiBVU0VfQVNfQkNPUFkKLSMgaWZkZWYgVVNFX0FTX01FTVBDUFkKLQltb3ZsCSVlZHgsICVlYXgKLSMgZWxzZQotCW1vdmwJREVTVCglZXNwKSwgJWVheAotIyBlbmRpZgotI2VuZGlmCi0JUkVUVVJOCi0KLQkucDJhbGlnbiA0Ci1MKGZ3ZF93cml0ZV8zM2J5dGVzX2FsaWduKToKLQltb3ZkcWEJLTMzKCVlYXgpLCAleG1tMAotCW1vdmRxYQkleG1tMCwgLTMzKCVlZHgpCi1MKGZ3ZF93cml0ZV8xN2J5dGVzX2FsaWduKToKLQltb3ZkcWEJLTE3KCVlYXgpLCAleG1tMAotCW1vdmRxYQkleG1tMCwgLTE3KCVlZHgpCi0JbW92emJsCS0xKCVlYXgpLCAlZWN4Ci0JbW92YgklY2wsIC0xKCVlZHgpCi0jaWZuZGVmIFVTRV9BU19CQ09QWQotIyBpZmRlZiBVU0VfQVNfTUVNUENQWQotCW1vdmwJJWVkeCwgJWVheAotIyBlbHNlCi0JbW92bAlERVNUKCVlc3ApLCAlZWF4Ci0jIGVuZGlmCi0jZW5kaWYKLQlSRVRVUk4KLQotCS5wMmFsaWduIDQKLUwoZndkX3dyaXRlXzQ2Ynl0ZXNfYWxpZ24pOgotCW1vdmRxYQktNDYoJWVheCksICV4bW0wCi0JbW92ZHFhCSV4bW0wLCAtNDYoJWVkeCkKLUwoZndkX3dyaXRlXzMwYnl0ZXNfYWxpZ24pOgotCW1vdmRxYQktMzAoJWVheCksICV4bW0wCi0JbW92ZHFhCSV4bW0wLCAtMzAoJWVkeCkKLUwoZndkX3dyaXRlXzE0Ynl0ZXNfYWxpZ24pOgotCW1vdnEJLTE0KCVlYXgpLCAleG1tMAotCW1vdnEJJXhtbTAsIC0xNCglZWR4KQotTChmd2Rfd3JpdGVfNmJ5dGVzX2FsaWduKToKLQltb3ZsCS02KCVlYXgpLCAlZWN4Ci0JbW92bAklZWN4LCAtNiglZWR4KQotCW1vdnp3bAktMiglZWF4KSwgJWVjeAotCW1vdncJJWN4LCAtMiglZWR4KQotI2lmbmRlZiBVU0VfQVNfQkNPUFkKLSMgaWZkZWYgVVNFX0FTX01FTVBDUFkKLQltb3ZsCSVlZHgsICVlYXgKLSMgZWxzZQotCW1vdmwJREVTVCglZXNwKSwgJWVheAotIyBlbmRpZgotI2VuZGlmCi0JUkVUVVJOCi0KLQkucDJhbGlnbiA0Ci1MKGZ3ZF93cml0ZV8zOGJ5dGVzX2FsaWduKToKLQltb3ZkcWEJLTM4KCVlYXgpLCAleG1tMAotCW1vdmRxYQkleG1tMCwgLTM4KCVlZHgpCi1MKGZ3ZF93cml0ZV8yMmJ5dGVzX2FsaWduKToKLQltb3ZkcWEJLTIyKCVlYXgpLCAleG1tMAotCW1vdmRxYQkleG1tMCwgLTIyKCVlZHgpCi0JbW92bAktNiglZWF4KSwgJWVjeAotCW1vdmwJJWVjeCwgLTYoJWVkeCkKLQltb3Z6d2wJLTIoJWVheCksICVlY3gKLQltb3Z3CSVjeCwgLTIoJWVkeCkKLSNpZm5kZWYgVVNFX0FTX0JDT1BZCi0jIGlmZGVmIFVTRV9BU19NRU1QQ1BZCi0JbW92bAklZWR4LCAlZWF4Ci0jIGVsc2UKLQltb3ZsCURFU1QoJWVzcCksICVlYXgKLSMgZW5kaWYKLSNlbmRpZgotCVJFVFVSTgotCi0JLnAyYWxpZ24gNAotTChmd2Rfd3JpdGVfNDJieXRlc19hbGlnbik6Ci0JbW92ZHFhCS00MiglZWF4KSwgJXhtbTAKLQltb3ZkcWEJJXhtbTAsIC00MiglZWR4KQotTChmd2Rfd3JpdGVfMjZieXRlc19hbGlnbik6Ci0JbW92ZHFhCS0yNiglZWF4KSwgJXhtbTAKLQltb3ZkcWEJJXhtbTAsIC0yNiglZWR4KQotTChmd2Rfd3JpdGVfMTBieXRlc19hbGlnbik6Ci0JbW92cQktMTAoJWVheCksICV4bW0wCi0JbW92cQkleG1tMCwgLTEwKCVlZHgpCi1MKGZ3ZF93cml0ZV8yYnl0ZXNfYWxpZ24pOgotCW1vdnp3bAktMiglZWF4KSwgJWVjeAotCW1vdncJJWN4LCAtMiglZWR4KQotI2lmbmRlZiBVU0VfQVNfQkNPUFkKLSMgaWZkZWYgVVNFX0FTX01FTVBDUFkKLQltb3ZsCSVlZHgsICVlYXgKLSMgZWxzZQotCW1vdmwJREVTVCglZXNwKSwgJWVheAotIyBlbmRpZgotI2VuZGlmCi0JUkVUVVJOCi0KLQkucDJhbGlnbiA0Ci1MKGZ3ZF93cml0ZV8zNGJ5dGVzX2FsaWduKToKLQltb3ZkcWEJLTM0KCVlYXgpLCAleG1tMAotCW1vdmRxYQkleG1tMCwgLTM0KCVlZHgpCi1MKGZ3ZF93cml0ZV8xOGJ5dGVzX2FsaWduKToKLQltb3ZkcWEJLTE4KCVlYXgpLCAleG1tMAotCW1vdmRxYQkleG1tMCwgLTE4KCVlZHgpCi0JbW92endsCS0yKCVlYXgpLCAlZWN4Ci0JbW92dwklY3gsIC0yKCVlZHgpCi0jaWZuZGVmIFVTRV9BU19CQ09QWQotIyBpZmRlZiBVU0VfQVNfTUVNUENQWQotCW1vdmwJJWVkeCwgJWVheAotIyBlbHNlCi0JbW92bAlERVNUKCVlc3ApLCAlZWF4Ci0jIGVuZGlmCi0jZW5kaWYKLQlSRVRVUk4KLQotCS5wMmFsaWduIDQKLUwoZndkX3dyaXRlXzQ3Ynl0ZXNfYWxpZ24pOgotCW1vdmRxYQktNDcoJWVheCksICV4bW0wCi0JbW92ZHFhCSV4bW0wLCAtNDcoJWVkeCkKLUwoZndkX3dyaXRlXzMxYnl0ZXNfYWxpZ24pOgotCW1vdmRxYQktMzEoJWVheCksICV4bW0wCi0JbW92ZHFhCSV4bW0wLCAtMzEoJWVkeCkKLUwoZndkX3dyaXRlXzE1Ynl0ZXNfYWxpZ24pOgotCW1vdnEJLTE1KCVlYXgpLCAleG1tMAotCW1vdnEJJXhtbTAsIC0xNSglZWR4KQotTChmd2Rfd3JpdGVfN2J5dGVzX2FsaWduKToKLQltb3ZsCS03KCVlYXgpLCAlZWN4Ci0JbW92bAklZWN4LCAtNyglZWR4KQotCW1vdnp3bAktMyglZWF4KSwgJWVjeAotCW1vdnpibAktMSglZWF4KSwgJWVheAotCW1vdncJJWN4LCAtMyglZWR4KQotCW1vdmIJJWFsLCAtMSglZWR4KQotI2lmbmRlZiBVU0VfQVNfQkNPUFkKLSMgaWZkZWYgVVNFX0FTX01FTVBDUFkKLQltb3ZsCSVlZHgsICVlYXgKLSMgZWxzZQotCW1vdmwJREVTVCglZXNwKSwgJWVheAotIyBlbmRpZgotI2VuZGlmCi0JUkVUVVJOCi0KLQkucDJhbGlnbiA0Ci1MKGZ3ZF93cml0ZV8zOWJ5dGVzX2FsaWduKToKLQltb3ZkcWEJLTM5KCVlYXgpLCAleG1tMAotCW1vdmRxYQkleG1tMCwgLTM5KCVlZHgpCi1MKGZ3ZF93cml0ZV8yM2J5dGVzX2FsaWduKToKLQltb3ZkcWEJLTIzKCVlYXgpLCAleG1tMAotCW1vdmRxYQkleG1tMCwgLTIzKCVlZHgpCi0JbW92bAktNyglZWF4KSwgJWVjeAotCW1vdmwJJWVjeCwgLTcoJWVkeCkKLQltb3Z6d2wJLTMoJWVheCksICVlY3gKLQltb3Z6YmwJLTEoJWVheCksICVlYXgKLQltb3Z3CSVjeCwgLTMoJWVkeCkKLQltb3ZiCSVhbCwgLTEoJWVkeCkKLSNpZm5kZWYgVVNFX0FTX0JDT1BZCi0jIGlmZGVmIFVTRV9BU19NRU1QQ1BZCi0JbW92bAklZWR4LCAlZWF4Ci0jIGVsc2UKLQltb3ZsCURFU1QoJWVzcCksICVlYXgKLSMgZW5kaWYKLSNlbmRpZgotCVJFVFVSTgotCi0JLnAyYWxpZ24gNAotTChmd2Rfd3JpdGVfNDNieXRlc19hbGlnbik6Ci0JbW92ZHFhCS00MyglZWF4KSwgJXhtbTAKLQltb3ZkcWEJJXhtbTAsIC00MyglZWR4KQotTChmd2Rfd3JpdGVfMjdieXRlc19hbGlnbik6Ci0JbW92ZHFhCS0yNyglZWF4KSwgJXhtbTAKLQltb3ZkcWEJJXhtbTAsIC0yNyglZWR4KQotTChmd2Rfd3JpdGVfMTFieXRlc19hbGlnbik6Ci0JbW92cQktMTEoJWVheCksICV4bW0wCi0JbW92cQkleG1tMCwgLTExKCVlZHgpCi1MKGZ3ZF93cml0ZV8zYnl0ZXNfYWxpZ24pOgotCW1vdnp3bAktMyglZWF4KSwgJWVjeAotCW1vdnpibAktMSglZWF4KSwgJWVheAotCW1vdncJJWN4LCAtMyglZWR4KQotCW1vdmIJJWFsLCAtMSglZWR4KQotI2lmbmRlZiBVU0VfQVNfQkNPUFkKLSMgaWZkZWYgVVNFX0FTX01FTVBDUFkKLQltb3ZsCSVlZHgsICVlYXgKLSMgZWxzZQotCW1vdmwJREVTVCglZXNwKSwgJWVheAotIyBlbmRpZgotI2VuZGlmCi0JUkVUVVJOCi0KLQkucDJhbGlnbiA0Ci1MKGZ3ZF93cml0ZV8zNWJ5dGVzX2FsaWduKToKLQltb3ZkcWEJLTM1KCVlYXgpLCAleG1tMAotCW1vdmRxYQkleG1tMCwgLTM1KCVlZHgpCi1MKGZ3ZF93cml0ZV8xOWJ5dGVzX2FsaWduKToKLQltb3ZkcWEJLTE5KCVlYXgpLCAleG1tMAotCW1vdmRxYQkleG1tMCwgLTE5KCVlZHgpCi0JbW92endsCS0zKCVlYXgpLCAlZWN4Ci0JbW92emJsCS0xKCVlYXgpLCAlZWF4Ci0JbW92dwklY3gsIC0zKCVlZHgpCi0JbW92YgklYWwsIC0xKCVlZHgpCi0jaWZuZGVmIFVTRV9BU19CQ09QWQotIyBpZmRlZiBVU0VfQVNfTUVNUENQWQotCW1vdmwJJWVkeCwgJWVheAotIyBlbHNlCi0JbW92bAlERVNUKCVlc3ApLCAlZWF4Ci0jIGVuZGlmCi0jZW5kaWYKLQlSRVRVUk4KLQotCS5wMmFsaWduIDQKLUwoZndkX3dyaXRlXzQ0Ynl0ZXNfYWxpZ24pOgotCW1vdmRxYQktNDQoJWVheCksICV4bW0wCi0JbW92ZHFhCSV4bW0wLCAtNDQoJWVkeCkKLUwoZndkX3dyaXRlXzI4Ynl0ZXNfYWxpZ24pOgotCW1vdmRxYQktMjgoJWVheCksICV4bW0wCi0JbW92ZHFhCSV4bW0wLCAtMjgoJWVkeCkKLUwoZndkX3dyaXRlXzEyYnl0ZXNfYWxpZ24pOgotCW1vdnEJLTEyKCVlYXgpLCAleG1tMAotCW1vdnEJJXhtbTAsIC0xMiglZWR4KQotTChmd2Rfd3JpdGVfNGJ5dGVzX2FsaWduKToKLQltb3ZsCS00KCVlYXgpLCAlZWN4Ci0JbW92bAklZWN4LCAtNCglZWR4KQotI2lmbmRlZiBVU0VfQVNfQkNPUFkKLSMgaWZkZWYgVVNFX0FTX01FTVBDUFkKLQltb3ZsCSVlZHgsICVlYXgKLSMgZWxzZQotCW1vdmwJREVTVCglZXNwKSwgJWVheAotIyBlbmRpZgotI2VuZGlmCi0JUkVUVVJOCi0KLQkucDJhbGlnbiA0Ci1MKGZ3ZF93cml0ZV8zNmJ5dGVzX2FsaWduKToKLQltb3ZkcWEJLTM2KCVlYXgpLCAleG1tMAotCW1vdmRxYQkleG1tMCwgLTM2KCVlZHgpCi1MKGZ3ZF93cml0ZV8yMGJ5dGVzX2FsaWduKToKLQltb3ZkcWEJLTIwKCVlYXgpLCAleG1tMAotCW1vdmRxYQkleG1tMCwgLTIwKCVlZHgpCi0JbW92bAktNCglZWF4KSwgJWVjeAotCW1vdmwJJWVjeCwgLTQoJWVkeCkKLSNpZm5kZWYgVVNFX0FTX0JDT1BZCi0jIGlmZGVmIFVTRV9BU19NRU1QQ1BZCi0JbW92bAklZWR4LCAlZWF4Ci0jIGVsc2UKLQltb3ZsCURFU1QoJWVzcCksICVlYXgKLSMgZW5kaWYKLSNlbmRpZgotCVJFVFVSTl9FTkQKLQotCUNGSV9QVVNIICglZWRpKQotCi0JLnAyYWxpZ24gNAotTChsYXJnZV9wYWdlKToKLQltb3ZkcXUJKCVlYXgpLCAleG1tMQotI2lmZGVmIFVTRV9BU19NRU1NT1ZFCi0JbW92bAlERVNUKzQoJWVzcCksICVlZGkKLQltb3ZkcXUJJXhtbTAsICglZWRpKQotI2VuZGlmCi0JbGVhCTE2KCVlYXgpLCAlZWF4Ci0JbW92bnRkcQkleG1tMSwgKCVlZHgpCi0JbGVhCTE2KCVlZHgpLCAlZWR4Ci0JbGVhCS0weDkwKCVlY3gpLCAlZWN4Ci0JUE9QICglZWRpKQotCi0JLnAyYWxpZ24gNAotTChsYXJnZV9wYWdlX2xvb3ApOgotCW1vdmRxdQkoJWVheCksICV4bW0wCi0JbW92ZHF1CTB4MTAoJWVheCksICV4bW0xCi0JbW92ZHF1CTB4MjAoJWVheCksICV4bW0yCi0JbW92ZHF1CTB4MzAoJWVheCksICV4bW0zCi0JbW92ZHF1CTB4NDAoJWVheCksICV4bW00Ci0JbW92ZHF1CTB4NTAoJWVheCksICV4bW01Ci0JbW92ZHF1CTB4NjAoJWVheCksICV4bW02Ci0JbW92ZHF1CTB4NzAoJWVheCksICV4bW03Ci0JbGVhCTB4ODAoJWVheCksICVlYXgKLQotCXN1YgkkMHg4MCwgJWVjeAotCW1vdm50ZHEJJXhtbTAsICglZWR4KQotCW1vdm50ZHEJJXhtbTEsIDB4MTAoJWVkeCkKLQltb3ZudGRxCSV4bW0yLCAweDIwKCVlZHgpCi0JbW92bnRkcQkleG1tMywgMHgzMCglZWR4KQotCW1vdm50ZHEJJXhtbTQsIDB4NDAoJWVkeCkKLQltb3ZudGRxCSV4bW01LCAweDUwKCVlZHgpCi0JbW92bnRkcQkleG1tNiwgMHg2MCglZWR4KQotCW1vdm50ZHEJJXhtbTcsIDB4NzAoJWVkeCkKLQlsZWEJMHg4MCglZWR4KSwgJWVkeAotCWphZQlMKGxhcmdlX3BhZ2VfbG9vcCkKLQljbXAJJC0weDQwLCAlZWN4Ci0JbGVhCTB4ODAoJWVjeCksICVlY3gKLQlqbAlMKGxhcmdlX3BhZ2VfbGVzc182NGJ5dGVzKQotCi0JbW92ZHF1CSglZWF4KSwgJXhtbTAKLQltb3ZkcXUJMHgxMCglZWF4KSwgJXhtbTEKLQltb3ZkcXUJMHgyMCglZWF4KSwgJXhtbTIKLQltb3ZkcXUJMHgzMCglZWF4KSwgJXhtbTMKLQlsZWEJMHg0MCglZWF4KSwgJWVheAotCi0JbW92bnRkcQkleG1tMCwgKCVlZHgpCi0JbW92bnRkcQkleG1tMSwgMHgxMCglZWR4KQotCW1vdm50ZHEJJXhtbTIsIDB4MjAoJWVkeCkKLQltb3ZudGRxCSV4bW0zLCAweDMwKCVlZHgpCi0JbGVhCTB4NDAoJWVkeCksICVlZHgKLQlzdWIJJDB4NDAsICVlY3gKLUwobGFyZ2VfcGFnZV9sZXNzXzY0Ynl0ZXMpOgotCWNtcAkkMzIsICVlY3gKLQlqYglMKGxhcmdlX3BhZ2VfbGVzc18zMmJ5dGVzKQotCW1vdmRxdQkoJWVheCksICV4bW0wCi0JbW92ZHF1CTB4MTAoJWVheCksICV4bW0xCi0JbGVhCTB4MjAoJWVheCksICVlYXgKLQltb3ZudGRxCSV4bW0wLCAoJWVkeCkKLQltb3ZudGRxCSV4bW0xLCAweDEwKCVlZHgpCi0JbGVhCTB4MjAoJWVkeCksICVlZHgKLQlzdWIJJDB4MjAsICVlY3gKLUwobGFyZ2VfcGFnZV9sZXNzXzMyYnl0ZXMpOgotCWFkZAklZWN4LCAlZWR4Ci0JYWRkCSVlY3gsICVlYXgKLQlzZmVuY2UKLQlCUkFOQ0hfVE9fSk1QVEJMX0VOVFJZIChMKHRhYmxlXzQ4Ynl0ZXNfZndkKSwgJWVjeCwgNCkKLQotCS5wMmFsaWduIDQKLUwoYmtfd3JpdGVfNDRieXRlcyk6Ci0JbW92cQkzNiglZWF4KSwgJXhtbTAKLQltb3ZxCSV4bW0wLCAzNiglZWR4KQotTChia193cml0ZV8zNmJ5dGVzKToKLQltb3ZxCTI4KCVlYXgpLCAleG1tMAotCW1vdnEJJXhtbTAsIDI4KCVlZHgpCi1MKGJrX3dyaXRlXzI4Ynl0ZXMpOgotCW1vdnEJMjAoJWVheCksICV4bW0wCi0JbW92cQkleG1tMCwgMjAoJWVkeCkKLUwoYmtfd3JpdGVfMjBieXRlcyk6Ci0JbW92cQkxMiglZWF4KSwgJXhtbTAKLQltb3ZxCSV4bW0wLCAxMiglZWR4KQotTChia193cml0ZV8xMmJ5dGVzKToKLQltb3ZxCTQoJWVheCksICV4bW0wCi0JbW92cQkleG1tMCwgNCglZWR4KQotTChia193cml0ZV80Ynl0ZXMpOgotCW1vdmwJKCVlYXgpLCAlZWN4Ci0JbW92bAklZWN4LCAoJWVkeCkKLUwoYmtfd3JpdGVfMGJ5dGVzKToKLSNpZm5kZWYgVVNFX0FTX0JDT1BZCi0JbW92bAlERVNUKCVlc3ApLCAlZWF4Ci0jIGlmZGVmIFVTRV9BU19NRU1QQ1BZCi0JbW92bAlMRU4oJWVzcCksICVlY3gKLQlhZGQJJWVjeCwgJWVheAotIyBlbmRpZgotI2VuZGlmCi0JUkVUVVJOCi0KLQkucDJhbGlnbiA0Ci1MKGJrX3dyaXRlXzQwYnl0ZXMpOgotCW1vdnEJMzIoJWVheCksICV4bW0wCi0JbW92cQkleG1tMCwgMzIoJWVkeCkKLUwoYmtfd3JpdGVfMzJieXRlcyk6Ci0JbW92cQkyNCglZWF4KSwgJXhtbTAKLQltb3ZxCSV4bW0wLCAyNCglZWR4KQotTChia193cml0ZV8yNGJ5dGVzKToKLQltb3ZxCTE2KCVlYXgpLCAleG1tMAotCW1vdnEJJXhtbTAsIDE2KCVlZHgpCi1MKGJrX3dyaXRlXzE2Ynl0ZXMpOgotCW1vdnEJOCglZWF4KSwgJXhtbTAKLQltb3ZxCSV4bW0wLCA4KCVlZHgpCi1MKGJrX3dyaXRlXzhieXRlcyk6Ci0JbW92cQkoJWVheCksICV4bW0wCi0JbW92cQkleG1tMCwgKCVlZHgpCi0jaWZuZGVmIFVTRV9BU19CQ09QWQotCW1vdmwJREVTVCglZXNwKSwgJWVheAotIyBpZmRlZiBVU0VfQVNfTUVNUENQWQotCW1vdmwJTEVOKCVlc3ApLCAlZWN4Ci0JYWRkCSVlY3gsICVlYXgKLSMgZW5kaWYKLSNlbmRpZgotCVJFVFVSTgotCi0JLnAyYWxpZ24gNAotTChia193cml0ZV80NWJ5dGVzKToKLQltb3ZxCTM3KCVlYXgpLCAleG1tMAotCW1vdnEJJXhtbTAsIDM3KCVlZHgpCi1MKGJrX3dyaXRlXzM3Ynl0ZXMpOgotCW1vdnEJMjkoJWVheCksICV4bW0wCi0JbW92cQkleG1tMCwgMjkoJWVkeCkKLUwoYmtfd3JpdGVfMjlieXRlcyk6Ci0JbW92cQkyMSglZWF4KSwgJXhtbTAKLQltb3ZxCSV4bW0wLCAyMSglZWR4KQotTChia193cml0ZV8yMWJ5dGVzKToKLQltb3ZxCTEzKCVlYXgpLCAleG1tMAotCW1vdnEJJXhtbTAsIDEzKCVlZHgpCi1MKGJrX3dyaXRlXzEzYnl0ZXMpOgotCW1vdnEJNSglZWF4KSwgJXhtbTAKLQltb3ZxCSV4bW0wLCA1KCVlZHgpCi1MKGJrX3dyaXRlXzVieXRlcyk6Ci0JbW92bAkxKCVlYXgpLCAlZWN4Ci0JbW92bAklZWN4LCAxKCVlZHgpCi1MKGJrX3dyaXRlXzFieXRlcyk6Ci0JbW92emJsCSglZWF4KSwgJWVjeAotCW1vdmIJJWNsLCAoJWVkeCkKLSNpZm5kZWYgVVNFX0FTX0JDT1BZCi0JbW92bAlERVNUKCVlc3ApLCAlZWF4Ci0jIGlmZGVmIFVTRV9BU19NRU1QQ1BZCi0JbW92bAlMRU4oJWVzcCksICVlY3gKLQlhZGQJJWVjeCwgJWVheAotIyBlbmRpZgotI2VuZGlmCi0JUkVUVVJOCi0KLQkucDJhbGlnbiA0Ci1MKGJrX3dyaXRlXzQxYnl0ZXMpOgotCW1vdnEJMzMoJWVheCksICV4bW0wCi0JbW92cQkleG1tMCwgMzMoJWVkeCkKLUwoYmtfd3JpdGVfMzNieXRlcyk6Ci0JbW92cQkyNSglZWF4KSwgJXhtbTAKLQltb3ZxCSV4bW0wLCAyNSglZWR4KQotTChia193cml0ZV8yNWJ5dGVzKToKLQltb3ZxCTE3KCVlYXgpLCAleG1tMAotCW1vdnEJJXhtbTAsIDE3KCVlZHgpCi1MKGJrX3dyaXRlXzE3Ynl0ZXMpOgotCW1vdnEJOSglZWF4KSwgJXhtbTAKLQltb3ZxCSV4bW0wLCA5KCVlZHgpCi1MKGJrX3dyaXRlXzlieXRlcyk6Ci0JbW92cQkxKCVlYXgpLCAleG1tMAotCW1vdnEJJXhtbTAsIDEoJWVkeCkKLQltb3Z6YmwJKCVlYXgpLCAlZWN4Ci0JbW92YgklY2wsICglZWR4KQotI2lmbmRlZiBVU0VfQVNfQkNPUFkKLQltb3ZsCURFU1QoJWVzcCksICVlYXgKLSMgaWZkZWYgVVNFX0FTX01FTVBDUFkKLQltb3ZsCUxFTiglZXNwKSwgJWVjeAotCWFkZAklZWN4LCAlZWF4Ci0jIGVuZGlmCi0jZW5kaWYKLQlSRVRVUk4KLQotCS5wMmFsaWduIDQKLUwoYmtfd3JpdGVfNDZieXRlcyk6Ci0JbW92cQkzOCglZWF4KSwgJXhtbTAKLQltb3ZxCSV4bW0wLCAzOCglZWR4KQotTChia193cml0ZV8zOGJ5dGVzKToKLQltb3ZxCTMwKCVlYXgpLCAleG1tMAotCW1vdnEJJXhtbTAsIDMwKCVlZHgpCi1MKGJrX3dyaXRlXzMwYnl0ZXMpOgotCW1vdnEJMjIoJWVheCksICV4bW0wCi0JbW92cQkleG1tMCwgMjIoJWVkeCkKLUwoYmtfd3JpdGVfMjJieXRlcyk6Ci0JbW92cQkxNCglZWF4KSwgJXhtbTAKLQltb3ZxCSV4bW0wLCAxNCglZWR4KQotTChia193cml0ZV8xNGJ5dGVzKToKLQltb3ZxCTYoJWVheCksICV4bW0wCi0JbW92cQkleG1tMCwgNiglZWR4KQotTChia193cml0ZV82Ynl0ZXMpOgotCW1vdmwJMiglZWF4KSwgJWVjeAotCW1vdmwJJWVjeCwgMiglZWR4KQotCW1vdnp3bAkoJWVheCksICVlY3gKLQltb3Z3CSVjeCwgKCVlZHgpCi0jaWZuZGVmIFVTRV9BU19CQ09QWQotCW1vdmwJREVTVCglZXNwKSwgJWVheAotIyBpZmRlZiBVU0VfQVNfTUVNUENQWQotCW1vdmwJTEVOKCVlc3ApLCAlZWN4Ci0JYWRkCSVlY3gsICVlYXgKLSMgZW5kaWYKLSNlbmRpZgotCVJFVFVSTgotCi0JLnAyYWxpZ24gNAotTChia193cml0ZV80MmJ5dGVzKToKLQltb3ZxCTM0KCVlYXgpLCAleG1tMAotCW1vdnEJJXhtbTAsIDM0KCVlZHgpCi1MKGJrX3dyaXRlXzM0Ynl0ZXMpOgotCW1vdnEJMjYoJWVheCksICV4bW0wCi0JbW92cQkleG1tMCwgMjYoJWVkeCkKLUwoYmtfd3JpdGVfMjZieXRlcyk6Ci0JbW92cQkxOCglZWF4KSwgJXhtbTAKLQltb3ZxCSV4bW0wLCAxOCglZWR4KQotTChia193cml0ZV8xOGJ5dGVzKToKLQltb3ZxCTEwKCVlYXgpLCAleG1tMAotCW1vdnEJJXhtbTAsIDEwKCVlZHgpCi1MKGJrX3dyaXRlXzEwYnl0ZXMpOgotCW1vdnEJMiglZWF4KSwgJXhtbTAKLQltb3ZxCSV4bW0wLCAyKCVlZHgpCi1MKGJrX3dyaXRlXzJieXRlcyk6Ci0JbW92endsCSglZWF4KSwgJWVjeAotCW1vdncJJWN4LCAoJWVkeCkKLSNpZm5kZWYgVVNFX0FTX0JDT1BZCi0JbW92bAlERVNUKCVlc3ApLCAlZWF4Ci0jIGlmZGVmIFVTRV9BU19NRU1QQ1BZCi0JbW92bAlMRU4oJWVzcCksICVlY3gKLQlhZGQJJWVjeCwgJWVheAotIyBlbmRpZgotI2VuZGlmCi0JUkVUVVJOCi0KLQkucDJhbGlnbiA0Ci1MKGJrX3dyaXRlXzQ3Ynl0ZXMpOgotCW1vdnEJMzkoJWVheCksICV4bW0wCi0JbW92cQkleG1tMCwgMzkoJWVkeCkKLUwoYmtfd3JpdGVfMzlieXRlcyk6Ci0JbW92cQkzMSglZWF4KSwgJXhtbTAKLQltb3ZxCSV4bW0wLCAzMSglZWR4KQotTChia193cml0ZV8zMWJ5dGVzKToKLQltb3ZxCTIzKCVlYXgpLCAleG1tMAotCW1vdnEJJXhtbTAsIDIzKCVlZHgpCi1MKGJrX3dyaXRlXzIzYnl0ZXMpOgotCW1vdnEJMTUoJWVheCksICV4bW0wCi0JbW92cQkleG1tMCwgMTUoJWVkeCkKLUwoYmtfd3JpdGVfMTVieXRlcyk6Ci0JbW92cQk3KCVlYXgpLCAleG1tMAotCW1vdnEJJXhtbTAsIDcoJWVkeCkKLUwoYmtfd3JpdGVfN2J5dGVzKToKLQltb3ZsCTMoJWVheCksICVlY3gKLQltb3ZsCSVlY3gsIDMoJWVkeCkKLQltb3Z6d2wJMSglZWF4KSwgJWVjeAotCW1vdncJJWN4LCAxKCVlZHgpCi0JbW92emJsCSglZWF4KSwgJWVheAotCW1vdmIJJWFsLCAoJWVkeCkKLSNpZm5kZWYgVVNFX0FTX0JDT1BZCi0JbW92bAlERVNUKCVlc3ApLCAlZWF4Ci0jIGlmZGVmIFVTRV9BU19NRU1QQ1BZCi0JbW92bAlMRU4oJWVzcCksICVlY3gKLQlhZGQJJWVjeCwgJWVheAotIyBlbmRpZgotI2VuZGlmCi0JUkVUVVJOCi0KLQkucDJhbGlnbiA0Ci1MKGJrX3dyaXRlXzQzYnl0ZXMpOgotCW1vdnEJMzUoJWVheCksICV4bW0wCi0JbW92cQkleG1tMCwgMzUoJWVkeCkKLUwoYmtfd3JpdGVfMzVieXRlcyk6Ci0JbW92cQkyNyglZWF4KSwgJXhtbTAKLQltb3ZxCSV4bW0wLCAyNyglZWR4KQotTChia193cml0ZV8yN2J5dGVzKToKLQltb3ZxCTE5KCVlYXgpLCAleG1tMAotCW1vdnEJJXhtbTAsIDE5KCVlZHgpCi1MKGJrX3dyaXRlXzE5Ynl0ZXMpOgotCW1vdnEJMTEoJWVheCksICV4bW0wCi0JbW92cQkleG1tMCwgMTEoJWVkeCkKLUwoYmtfd3JpdGVfMTFieXRlcyk6Ci0JbW92cQkzKCVlYXgpLCAleG1tMAotCW1vdnEJJXhtbTAsIDMoJWVkeCkKLUwoYmtfd3JpdGVfM2J5dGVzKToKLQltb3Z6d2wJMSglZWF4KSwgJWVjeAotCW1vdncJJWN4LCAxKCVlZHgpCi0JbW92emJsCSglZWF4KSwgJWVheAotCW1vdmIJJWFsLCAoJWVkeCkKLSNpZm5kZWYgVVNFX0FTX0JDT1BZCi0JbW92bAlERVNUKCVlc3ApLCAlZWF4Ci0jIGlmZGVmIFVTRV9BU19NRU1QQ1BZCi0JbW92bAlMRU4oJWVzcCksICVlY3gKLQlhZGQJJWVjeCwgJWVheAotIyBlbmRpZgotI2VuZGlmCi0JUkVUVVJOX0VORAotCi0KLQkucHVzaHNlY3Rpb24gLnJvZGF0YS5zc3NlMywiYSIsQHByb2diaXRzCi0JLnAyYWxpZ24gMgotTCh0YWJsZV80OGJ5dGVzX2Z3ZCk6Ci0JLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzBieXRlcyksIEwodGFibGVfNDhieXRlc19md2QpKQotCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV8xYnl0ZXMpLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkKSkKLQkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfMmJ5dGVzKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZCkpCi0JLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzNieXRlcyksIEwodGFibGVfNDhieXRlc19md2QpKQotCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV80Ynl0ZXMpLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkKSkKLQkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfNWJ5dGVzKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZCkpCi0JLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzZieXRlcyksIEwodGFibGVfNDhieXRlc19md2QpKQotCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV83Ynl0ZXMpLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkKSkKLQkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfOGJ5dGVzKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZCkpCi0JLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzlieXRlcyksIEwodGFibGVfNDhieXRlc19md2QpKQotCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV8xMGJ5dGVzKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZCkpCi0JLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzExYnl0ZXMpLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkKSkKLQkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfMTJieXRlcyksIEwodGFibGVfNDhieXRlc19md2QpKQotCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV8xM2J5dGVzKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZCkpCi0JLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzE0Ynl0ZXMpLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkKSkKLQkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfMTVieXRlcyksIEwodGFibGVfNDhieXRlc19md2QpKQotCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV8xNmJ5dGVzKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZCkpCi0JLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzE3Ynl0ZXMpLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkKSkKLQkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfMThieXRlcyksIEwodGFibGVfNDhieXRlc19md2QpKQotCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV8xOWJ5dGVzKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZCkpCi0JLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzIwYnl0ZXMpLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkKSkKLQkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfMjFieXRlcyksIEwodGFibGVfNDhieXRlc19md2QpKQotCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV8yMmJ5dGVzKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZCkpCi0JLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzIzYnl0ZXMpLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkKSkKLQkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfMjRieXRlcyksIEwodGFibGVfNDhieXRlc19md2QpKQotCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV8yNWJ5dGVzKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZCkpCi0JLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzI2Ynl0ZXMpLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkKSkKLQkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfMjdieXRlcyksIEwodGFibGVfNDhieXRlc19md2QpKQotCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV8yOGJ5dGVzKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZCkpCi0JLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzI5Ynl0ZXMpLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkKSkKLQkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfMzBieXRlcyksIEwodGFibGVfNDhieXRlc19md2QpKQotCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV8zMWJ5dGVzKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZCkpCi0JLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzMyYnl0ZXMpLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkKSkKLQkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfMzNieXRlcyksIEwodGFibGVfNDhieXRlc19md2QpKQotCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV8zNGJ5dGVzKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZCkpCi0JLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzM1Ynl0ZXMpLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkKSkKLQkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfMzZieXRlcyksIEwodGFibGVfNDhieXRlc19md2QpKQotCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV8zN2J5dGVzKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZCkpCi0JLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzM4Ynl0ZXMpLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkKSkKLQkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfMzlieXRlcyksIEwodGFibGVfNDhieXRlc19md2QpKQotCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV80MGJ5dGVzKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZCkpCi0JLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzQxYnl0ZXMpLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkKSkKLQkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfNDJieXRlcyksIEwodGFibGVfNDhieXRlc19md2QpKQotCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV80M2J5dGVzKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZCkpCi0JLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzQ0Ynl0ZXMpLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkKSkKLQkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfNDVieXRlcyksIEwodGFibGVfNDhieXRlc19md2QpKQotCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV80NmJ5dGVzKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZCkpCi0JLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzQ3Ynl0ZXMpLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkKSkKLQotCS5wMmFsaWduIDIKLUwodGFibGVfNDhieXRlc19md2RfYWxpZ24pOgotCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV8wYnl0ZXNfYWxpZ24pLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkX2FsaWduKSkKLQkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfMWJ5dGVzX2FsaWduKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZF9hbGlnbikpCi0JLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzJieXRlc19hbGlnbiksIEwodGFibGVfNDhieXRlc19md2RfYWxpZ24pKQotCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV8zYnl0ZXNfYWxpZ24pLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkX2FsaWduKSkKLQkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfNGJ5dGVzX2FsaWduKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZF9hbGlnbikpCi0JLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzVieXRlc19hbGlnbiksIEwodGFibGVfNDhieXRlc19md2RfYWxpZ24pKQotCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV82Ynl0ZXNfYWxpZ24pLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkX2FsaWduKSkKLQkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfN2J5dGVzX2FsaWduKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZF9hbGlnbikpCi0JLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzhieXRlc19hbGlnbiksIEwodGFibGVfNDhieXRlc19md2RfYWxpZ24pKQotCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV85Ynl0ZXNfYWxpZ24pLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkX2FsaWduKSkKLQkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfMTBieXRlc19hbGlnbiksIEwodGFibGVfNDhieXRlc19md2RfYWxpZ24pKQotCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV8xMWJ5dGVzX2FsaWduKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZF9hbGlnbikpCi0JLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzEyYnl0ZXNfYWxpZ24pLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkX2FsaWduKSkKLQkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfMTNieXRlc19hbGlnbiksIEwodGFibGVfNDhieXRlc19md2RfYWxpZ24pKQotCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV8xNGJ5dGVzX2FsaWduKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZF9hbGlnbikpCi0JLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzE1Ynl0ZXNfYWxpZ24pLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkX2FsaWduKSkKLQkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfMTZieXRlc19hbGlnbiksIEwodGFibGVfNDhieXRlc19md2RfYWxpZ24pKQotCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV8xN2J5dGVzX2FsaWduKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZF9hbGlnbikpCi0JLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzE4Ynl0ZXNfYWxpZ24pLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkX2FsaWduKSkKLQkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfMTlieXRlc19hbGlnbiksIEwodGFibGVfNDhieXRlc19md2RfYWxpZ24pKQotCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV8yMGJ5dGVzX2FsaWduKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZF9hbGlnbikpCi0JLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzIxYnl0ZXNfYWxpZ24pLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkX2FsaWduKSkKLQkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfMjJieXRlc19hbGlnbiksIEwodGFibGVfNDhieXRlc19md2RfYWxpZ24pKQotCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV8yM2J5dGVzX2FsaWduKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZF9hbGlnbikpCi0JLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzI0Ynl0ZXNfYWxpZ24pLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkX2FsaWduKSkKLQkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfMjVieXRlc19hbGlnbiksIEwodGFibGVfNDhieXRlc19md2RfYWxpZ24pKQotCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV8yNmJ5dGVzX2FsaWduKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZF9hbGlnbikpCi0JLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzI3Ynl0ZXNfYWxpZ24pLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkX2FsaWduKSkKLQkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfMjhieXRlc19hbGlnbiksIEwodGFibGVfNDhieXRlc19md2RfYWxpZ24pKQotCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV8yOWJ5dGVzX2FsaWduKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZF9hbGlnbikpCi0JLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzMwYnl0ZXNfYWxpZ24pLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkX2FsaWduKSkKLQkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfMzFieXRlc19hbGlnbiksIEwodGFibGVfNDhieXRlc19md2RfYWxpZ24pKQotCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV8zMmJ5dGVzX2FsaWduKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZF9hbGlnbikpCi0JLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzMzYnl0ZXNfYWxpZ24pLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkX2FsaWduKSkKLQkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfMzRieXRlc19hbGlnbiksIEwodGFibGVfNDhieXRlc19md2RfYWxpZ24pKQotCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV8zNWJ5dGVzX2FsaWduKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZF9hbGlnbikpCi0JLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzM2Ynl0ZXNfYWxpZ24pLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkX2FsaWduKSkKLQkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfMzdieXRlc19hbGlnbiksIEwodGFibGVfNDhieXRlc19md2RfYWxpZ24pKQotCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV8zOGJ5dGVzX2FsaWduKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZF9hbGlnbikpCi0JLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzM5Ynl0ZXNfYWxpZ24pLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkX2FsaWduKSkKLQkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfNDBieXRlc19hbGlnbiksIEwodGFibGVfNDhieXRlc19md2RfYWxpZ24pKQotCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV80MWJ5dGVzX2FsaWduKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZF9hbGlnbikpCi0JLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzQyYnl0ZXNfYWxpZ24pLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkX2FsaWduKSkKLQkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfNDNieXRlc19hbGlnbiksIEwodGFibGVfNDhieXRlc19md2RfYWxpZ24pKQotCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV80NGJ5dGVzX2FsaWduKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZF9hbGlnbikpCi0JLmludAlKTVBUQkwgKEwoZndkX3dyaXRlXzQ1Ynl0ZXNfYWxpZ24pLCBMKHRhYmxlXzQ4Ynl0ZXNfZndkX2FsaWduKSkKLQkuaW50CUpNUFRCTCAoTChmd2Rfd3JpdGVfNDZieXRlc19hbGlnbiksIEwodGFibGVfNDhieXRlc19md2RfYWxpZ24pKQotCS5pbnQJSk1QVEJMIChMKGZ3ZF93cml0ZV80N2J5dGVzX2FsaWduKSwgTCh0YWJsZV80OGJ5dGVzX2Z3ZF9hbGlnbikpCi0KLQkucDJhbGlnbiAyCi1MKHNobF90YWJsZSk6Ci0JLmludAlKTVBUQkwgKEwoc2hsXzApLCBMKHNobF90YWJsZSkpCi0JLmludAlKTVBUQkwgKEwoc2hsXzEpLCBMKHNobF90YWJsZSkpCi0JLmludAlKTVBUQkwgKEwoc2hsXzIpLCBMKHNobF90YWJsZSkpCi0JLmludAlKTVBUQkwgKEwoc2hsXzMpLCBMKHNobF90YWJsZSkpCi0JLmludAlKTVBUQkwgKEwoc2hsXzQpLCBMKHNobF90YWJsZSkpCi0JLmludAlKTVBUQkwgKEwoc2hsXzUpLCBMKHNobF90YWJsZSkpCi0JLmludAlKTVBUQkwgKEwoc2hsXzYpLCBMKHNobF90YWJsZSkpCi0JLmludAlKTVBUQkwgKEwoc2hsXzcpLCBMKHNobF90YWJsZSkpCi0JLmludAlKTVBUQkwgKEwoc2hsXzgpLCBMKHNobF90YWJsZSkpCi0JLmludAlKTVBUQkwgKEwoc2hsXzkpLCBMKHNobF90YWJsZSkpCi0JLmludAlKTVBUQkwgKEwoc2hsXzEwKSwgTChzaGxfdGFibGUpKQotCS5pbnQJSk1QVEJMIChMKHNobF8xMSksIEwoc2hsX3RhYmxlKSkKLQkuaW50CUpNUFRCTCAoTChzaGxfMTIpLCBMKHNobF90YWJsZSkpCi0JLmludAlKTVBUQkwgKEwoc2hsXzEzKSwgTChzaGxfdGFibGUpKQotCS5pbnQJSk1QVEJMIChMKHNobF8xNCksIEwoc2hsX3RhYmxlKSkKLQkuaW50CUpNUFRCTCAoTChzaGxfMTUpLCBMKHNobF90YWJsZSkpCi0KLQkucDJhbGlnbiAyCi1MKHRhYmxlXzQ4X2J5dGVzX2J3ZCk6Ci0JLmludAlKTVBUQkwgKEwoYmtfd3JpdGVfMGJ5dGVzKSwgTCh0YWJsZV80OF9ieXRlc19id2QpKQotCS5pbnQJSk1QVEJMIChMKGJrX3dyaXRlXzFieXRlcyksIEwodGFibGVfNDhfYnl0ZXNfYndkKSkKLQkuaW50CUpNUFRCTCAoTChia193cml0ZV8yYnl0ZXMpLCBMKHRhYmxlXzQ4X2J5dGVzX2J3ZCkpCi0JLmludAlKTVBUQkwgKEwoYmtfd3JpdGVfM2J5dGVzKSwgTCh0YWJsZV80OF9ieXRlc19id2QpKQotCS5pbnQJSk1QVEJMIChMKGJrX3dyaXRlXzRieXRlcyksIEwodGFibGVfNDhfYnl0ZXNfYndkKSkKLQkuaW50CUpNUFRCTCAoTChia193cml0ZV81Ynl0ZXMpLCBMKHRhYmxlXzQ4X2J5dGVzX2J3ZCkpCi0JLmludAlKTVBUQkwgKEwoYmtfd3JpdGVfNmJ5dGVzKSwgTCh0YWJsZV80OF9ieXRlc19id2QpKQotCS5pbnQJSk1QVEJMIChMKGJrX3dyaXRlXzdieXRlcyksIEwodGFibGVfNDhfYnl0ZXNfYndkKSkKLQkuaW50CUpNUFRCTCAoTChia193cml0ZV84Ynl0ZXMpLCBMKHRhYmxlXzQ4X2J5dGVzX2J3ZCkpCi0JLmludAlKTVBUQkwgKEwoYmtfd3JpdGVfOWJ5dGVzKSwgTCh0YWJsZV80OF9ieXRlc19id2QpKQotCS5pbnQJSk1QVEJMIChMKGJrX3dyaXRlXzEwYnl0ZXMpLCBMKHRhYmxlXzQ4X2J5dGVzX2J3ZCkpCi0JLmludAlKTVBUQkwgKEwoYmtfd3JpdGVfMTFieXRlcyksIEwodGFibGVfNDhfYnl0ZXNfYndkKSkKLQkuaW50CUpNUFRCTCAoTChia193cml0ZV8xMmJ5dGVzKSwgTCh0YWJsZV80OF9ieXRlc19id2QpKQotCS5pbnQJSk1QVEJMIChMKGJrX3dyaXRlXzEzYnl0ZXMpLCBMKHRhYmxlXzQ4X2J5dGVzX2J3ZCkpCi0JLmludAlKTVBUQkwgKEwoYmtfd3JpdGVfMTRieXRlcyksIEwodGFibGVfNDhfYnl0ZXNfYndkKSkKLQkuaW50CUpNUFRCTCAoTChia193cml0ZV8xNWJ5dGVzKSwgTCh0YWJsZV80OF9ieXRlc19id2QpKQotCS5pbnQJSk1QVEJMIChMKGJrX3dyaXRlXzE2Ynl0ZXMpLCBMKHRhYmxlXzQ4X2J5dGVzX2J3ZCkpCi0JLmludAlKTVBUQkwgKEwoYmtfd3JpdGVfMTdieXRlcyksIEwodGFibGVfNDhfYnl0ZXNfYndkKSkKLQkuaW50CUpNUFRCTCAoTChia193cml0ZV8xOGJ5dGVzKSwgTCh0YWJsZV80OF9ieXRlc19id2QpKQotCS5pbnQJSk1QVEJMIChMKGJrX3dyaXRlXzE5Ynl0ZXMpLCBMKHRhYmxlXzQ4X2J5dGVzX2J3ZCkpCi0JLmludAlKTVBUQkwgKEwoYmtfd3JpdGVfMjBieXRlcyksIEwodGFibGVfNDhfYnl0ZXNfYndkKSkKLQkuaW50CUpNUFRCTCAoTChia193cml0ZV8yMWJ5dGVzKSwgTCh0YWJsZV80OF9ieXRlc19id2QpKQotCS5pbnQJSk1QVEJMIChMKGJrX3dyaXRlXzIyYnl0ZXMpLCBMKHRhYmxlXzQ4X2J5dGVzX2J3ZCkpCi0JLmludAlKTVBUQkwgKEwoYmtfd3JpdGVfMjNieXRlcyksIEwodGFibGVfNDhfYnl0ZXNfYndkKSkKLQkuaW50CUpNUFRCTCAoTChia193cml0ZV8yNGJ5dGVzKSwgTCh0YWJsZV80OF9ieXRlc19id2QpKQotCS5pbnQJSk1QVEJMIChMKGJrX3dyaXRlXzI1Ynl0ZXMpLCBMKHRhYmxlXzQ4X2J5dGVzX2J3ZCkpCi0JLmludAlKTVBUQkwgKEwoYmtfd3JpdGVfMjZieXRlcyksIEwodGFibGVfNDhfYnl0ZXNfYndkKSkKLQkuaW50CUpNUFRCTCAoTChia193cml0ZV8yN2J5dGVzKSwgTCh0YWJsZV80OF9ieXRlc19id2QpKQotCS5pbnQJSk1QVEJMIChMKGJrX3dyaXRlXzI4Ynl0ZXMpLCBMKHRhYmxlXzQ4X2J5dGVzX2J3ZCkpCi0JLmludAlKTVBUQkwgKEwoYmtfd3JpdGVfMjlieXRlcyksIEwodGFibGVfNDhfYnl0ZXNfYndkKSkKLQkuaW50CUpNUFRCTCAoTChia193cml0ZV8zMGJ5dGVzKSwgTCh0YWJsZV80OF9ieXRlc19id2QpKQotCS5pbnQJSk1QVEJMIChMKGJrX3dyaXRlXzMxYnl0ZXMpLCBMKHRhYmxlXzQ4X2J5dGVzX2J3ZCkpCi0JLmludAlKTVBUQkwgKEwoYmtfd3JpdGVfMzJieXRlcyksIEwodGFibGVfNDhfYnl0ZXNfYndkKSkKLQkuaW50CUpNUFRCTCAoTChia193cml0ZV8zM2J5dGVzKSwgTCh0YWJsZV80OF9ieXRlc19id2QpKQotCS5pbnQJSk1QVEJMIChMKGJrX3dyaXRlXzM0Ynl0ZXMpLCBMKHRhYmxlXzQ4X2J5dGVzX2J3ZCkpCi0JLmludAlKTVBUQkwgKEwoYmtfd3JpdGVfMzVieXRlcyksIEwodGFibGVfNDhfYnl0ZXNfYndkKSkKLQkuaW50CUpNUFRCTCAoTChia193cml0ZV8zNmJ5dGVzKSwgTCh0YWJsZV80OF9ieXRlc19id2QpKQotCS5pbnQJSk1QVEJMIChMKGJrX3dyaXRlXzM3Ynl0ZXMpLCBMKHRhYmxlXzQ4X2J5dGVzX2J3ZCkpCi0JLmludAlKTVBUQkwgKEwoYmtfd3JpdGVfMzhieXRlcyksIEwodGFibGVfNDhfYnl0ZXNfYndkKSkKLQkuaW50CUpNUFRCTCAoTChia193cml0ZV8zOWJ5dGVzKSwgTCh0YWJsZV80OF9ieXRlc19id2QpKQotCS5pbnQJSk1QVEJMIChMKGJrX3dyaXRlXzQwYnl0ZXMpLCBMKHRhYmxlXzQ4X2J5dGVzX2J3ZCkpCi0JLmludAlKTVBUQkwgKEwoYmtfd3JpdGVfNDFieXRlcyksIEwodGFibGVfNDhfYnl0ZXNfYndkKSkKLQkuaW50CUpNUFRCTCAoTChia193cml0ZV80MmJ5dGVzKSwgTCh0YWJsZV80OF9ieXRlc19id2QpKQotCS5pbnQJSk1QVEJMIChMKGJrX3dyaXRlXzQzYnl0ZXMpLCBMKHRhYmxlXzQ4X2J5dGVzX2J3ZCkpCi0JLmludAlKTVBUQkwgKEwoYmtfd3JpdGVfNDRieXRlcyksIEwodGFibGVfNDhfYnl0ZXNfYndkKSkKLQkuaW50CUpNUFRCTCAoTChia193cml0ZV80NWJ5dGVzKSwgTCh0YWJsZV80OF9ieXRlc19id2QpKQotCS5pbnQJSk1QVEJMIChMKGJrX3dyaXRlXzQ2Ynl0ZXMpLCBMKHRhYmxlXzQ4X2J5dGVzX2J3ZCkpCi0JLmludAlKTVBUQkwgKEwoYmtfd3JpdGVfNDdieXRlcyksIEwodGFibGVfNDhfYnl0ZXNfYndkKSkKLQotCS5wb3BzZWN0aW9uCi0KLSNpZmRlZiBVU0VfQVNfTUVNTU9WRQotCS5wMmFsaWduIDQKLUwoY29weV9iYWNrd2FyZCk6Ci0JUFVTSCAoJWVkaSkKLQltb3ZsCSVlYXgsICVlZGkKLQlsZWEJKCVlY3gsJWVkeCwxKSwlZWR4Ci0JbGVhCSglZWN4LCVlZGksMSksJWVkaQotCXRlc3RsCSQweDMsICVlZHgKLQlqbnoJTChia19hbGlnbikKLQotTChia19hbGlnbmVkXzQpOgotCWNtcAkkNjQsICVlY3gKLQlqYWUJTChia193cml0ZV9tb3JlNjRieXRlcykKLQotTChia193cml0ZV82NGJ5dGVzbGVzcyk6Ci0JY21wCSQzMiwgJWVjeAotCWpiCUwoYmtfd3JpdGVfbGVzczMyYnl0ZXMpCi0KLUwoYmtfd3JpdGVfbW9yZTMyYnl0ZXMpOgotCS8qIENvcHkgMzIgYnl0ZXMgYXQgYSB0aW1lLiAgKi8KLQlzdWIJJDMyLCAlZWN4Ci0JbW92cQktOCglZWRpKSwgJXhtbTAKLQltb3ZxCSV4bW0wLCAtOCglZWR4KQotCW1vdnEJLTE2KCVlZGkpLCAleG1tMAotCW1vdnEJJXhtbTAsIC0xNiglZWR4KQotCW1vdnEJLTI0KCVlZGkpLCAleG1tMAotCW1vdnEJJXhtbTAsIC0yNCglZWR4KQotCW1vdnEJLTMyKCVlZGkpLCAleG1tMAotCW1vdnEJJXhtbTAsIC0zMiglZWR4KQotCXN1YgkkMzIsICVlZHgKLQlzdWIJJDMyLCAlZWRpCi0KLUwoYmtfd3JpdGVfbGVzczMyYnl0ZXMpOgotCW1vdmwJJWVkaSwgJWVheAotCXN1YgklZWN4LCAlZWR4Ci0Jc3ViCSVlY3gsICVlYXgKLQlQT1AgKCVlZGkpCi1MKGJrX3dyaXRlX2xlc3MzMmJ5dGVzXzIpOgotCUJSQU5DSF9UT19KTVBUQkxfRU5UUlkgKEwodGFibGVfNDhfYnl0ZXNfYndkKSwgJWVjeCwgNCkKLQotCUNGSV9QVVNIICglZWRpKQotCi0JLnAyYWxpZ24gNAotTChia19hbGlnbik6Ci0JY21wCSQ4LCAlZWN4Ci0JamJlCUwoYmtfd3JpdGVfbGVzczMyYnl0ZXMpCi0JdGVzdGwJJDEsICVlZHgKLQkvKiBXZSBnZXQgaGVyZSBvbmx5IGlmIChFRFggJiAzICkgIT0gMCBzbyBpZiAoRURYICYgMSkgPT0wLAotCXRoZW4JKEVEWCAmIDIpIG11c3QgYmUgIT0gMC4gICovCi0JanoJTChia19nb3QyKQotCXN1YgkkMSwgJWVkaQotCXN1YgkkMSwgJWVjeAotCXN1YgkkMSwgJWVkeAotCW1vdnpibAkoJWVkaSksICVlYXgKLQltb3ZiCSVhbCwgKCVlZHgpCi0KLQl0ZXN0bAkkMiwgJWVkeAotCWp6CUwoYmtfYWxpZ25lZF80KQotCi1MKGJrX2dvdDIpOgotCXN1YgkkMiwgJWVkaQotCXN1YgkkMiwgJWVjeAotCXN1YgkkMiwgJWVkeAotCW1vdnp3bAkoJWVkaSksICVlYXgKLQltb3Z3CSVheCwgKCVlZHgpCi0Jam1wCUwoYmtfYWxpZ25lZF80KQotCi0JLnAyYWxpZ24gNAotTChia193cml0ZV9tb3JlNjRieXRlcyk6Ci0JLyogQ2hlY2sgYWxpZ25tZW50IG9mIGxhc3QgYnl0ZS4gICovCi0JdGVzdGwJJDE1LCAlZWR4Ci0JanoJTChia19zc3NlM19jcHlfcHJlKQotCi0vKiBFRFggaXMgYWxpZ25lZCA0IGJ5dGVzLCBidXQgbm90IDE2IGJ5dGVzLiAgKi8KLUwoYmtfc3NzZTNfYWxpZ24pOgotCXN1YgkkNCwgJWVkaQotCXN1YgkkNCwgJWVjeAotCXN1YgkkNCwgJWVkeAotCW1vdmwJKCVlZGkpLCAlZWF4Ci0JbW92bAklZWF4LCAoJWVkeCkKLQotCXRlc3RsCSQxNSwgJWVkeAotCWp6CUwoYmtfc3NzZTNfY3B5X3ByZSkKLQotCXN1YgkkNCwgJWVkaQotCXN1YgkkNCwgJWVjeAotCXN1YgkkNCwgJWVkeAotCW1vdmwJKCVlZGkpLCAlZWF4Ci0JbW92bAklZWF4LCAoJWVkeCkKLQotCXRlc3RsCSQxNSwgJWVkeAotCWp6CUwoYmtfc3NzZTNfY3B5X3ByZSkKLQotCXN1YgkkNCwgJWVkaQotCXN1YgkkNCwgJWVjeAotCXN1YgkkNCwgJWVkeAotCW1vdmwJKCVlZGkpLCAlZWF4Ci0JbW92bAklZWF4LCAoJWVkeCkKLQotTChia19zc3NlM19jcHlfcHJlKToKLQljbXAJJDY0LCAlZWN4Ci0JamIJTChia193cml0ZV9tb3JlMzJieXRlcykKLQotCS5wMmFsaWduIDQKLUwoYmtfc3NzZTNfY3B5KToKLQlzdWIJJDY0LCAlZWRpCi0Jc3ViCSQ2NCwgJWVjeAotCXN1YgkkNjQsICVlZHgKLQltb3ZkcXUJMHgzMCglZWRpKSwgJXhtbTMKLQltb3ZkcWEJJXhtbTMsIDB4MzAoJWVkeCkKLQltb3ZkcXUJMHgyMCglZWRpKSwgJXhtbTIKLQltb3ZkcWEJJXhtbTIsIDB4MjAoJWVkeCkKLQltb3ZkcXUJMHgxMCglZWRpKSwgJXhtbTEKLQltb3ZkcWEJJXhtbTEsIDB4MTAoJWVkeCkKLQltb3ZkcXUJKCVlZGkpLCAleG1tMAotCW1vdmRxYQkleG1tMCwgKCVlZHgpCi0JY21wCSQ2NCwgJWVjeAotCWphZQlMKGJrX3Nzc2UzX2NweSkKLQlqbXAJTChia193cml0ZV82NGJ5dGVzbGVzcykKLQotI2VuZGlmCi0KLUVORCAoTUVNQ1BZKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zdHJpbmcvc3NzZTMtbWVtbW92ZS1hdG9tLlMgYi9saWJjL2FyY2gteDg2L3N0cmluZy9zc3NlMy1tZW1tb3ZlLWF0b20uUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTg1NTk2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9zdHJpbmcvc3NzZTMtbWVtbW92ZS1hdG9tLlMKQEAgLTAsMCArMSwzNCBAQAorLyoKK0NvcHlyaWdodCAoYykgMjAxMCwgSW50ZWwgQ29ycG9yYXRpb24KK0FsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisKKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAgICAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisKKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAgICAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAgICAqIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCisgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEludGVsIENvcnBvcmF0aW9uIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICAgICogbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgICAgKiB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKK1dBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKK0RJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKK0FOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCitBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKK1NPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKi8KKworCisjZGVmaW5lIE1FTUNQWSBtZW1tb3ZlCisjZGVmaW5lIFVTRV9BU19NRU1NT1ZFCisjaW5jbHVkZSAic3NzZTMtbWVtY3B5LWF0b20uUyIKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3RyaW5nL3Nzc2UzLXN0cmNhdC1hdG9tLlMgYi9saWJjL2FyY2gteDg2L3N0cmluZy9zc3NlMy1zdHJjYXQtYXRvbS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5YjYxMjkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N0cmluZy9zc3NlMy1zdHJjYXQtYXRvbS5TCkBAIC0wLDAgKzEsNjIwIEBACisvKgorQ29weXJpZ2h0IChjKSAyMDExLCBJbnRlbCBDb3Jwb3JhdGlvbgorQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKworICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICAgICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKworICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICAgICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorICAgICogYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisKKyAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgSW50ZWwgQ29ycG9yYXRpb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgICAgKiBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAgICAqIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECitBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CitMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KK0FOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqLworCisjaWZuZGVmIEwKKyMgZGVmaW5lIEwobGFiZWwpCS5MIyNsYWJlbAorI2VuZGlmCisKKyNpZm5kZWYgY2ZpX3N0YXJ0cHJvYworIyBkZWZpbmUgY2ZpX3N0YXJ0cHJvYwkJCS5jZmlfc3RhcnRwcm9jCisjZW5kaWYKKworI2lmbmRlZiBjZmlfZW5kcHJvYworIyBkZWZpbmUgY2ZpX2VuZHByb2MJCQkuY2ZpX2VuZHByb2MKKyNlbmRpZgorCisjaWZuZGVmIGNmaV9yZWxfb2Zmc2V0CisjIGRlZmluZSBjZmlfcmVsX29mZnNldChyZWcsIG9mZikJLmNmaV9yZWxfb2Zmc2V0IHJlZywgb2ZmCisjZW5kaWYKKworI2lmbmRlZiBjZmlfcmVzdG9yZQorIyBkZWZpbmUgY2ZpX3Jlc3RvcmUocmVnKQkJLmNmaV9yZXN0b3JlIHJlZworI2VuZGlmCisKKyNpZm5kZWYgY2ZpX2FkanVzdF9jZmFfb2Zmc2V0CisjIGRlZmluZSBjZmlfYWRqdXN0X2NmYV9vZmZzZXQob2ZmKQkuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IG9mZgorI2VuZGlmCisKKyNpZm5kZWYgY2ZpX3JlbWVtYmVyX3N0YXRlCisjIGRlZmluZSBjZmlfcmVtZW1iZXJfc3RhdGUJCS5jZmlfcmVtZW1iZXJfc3RhdGUKKyNlbmRpZgorCisjaWZuZGVmIGNmaV9yZXN0b3JlX3N0YXRlCisjIGRlZmluZSBjZmlfcmVzdG9yZV9zdGF0ZQkJLmNmaV9yZXN0b3JlX3N0YXRlCisjZW5kaWYKKworI2lmbmRlZiBFTlRSWQorIyBkZWZpbmUgRU5UUlkobmFtZSkJCQlcCisJLnR5cGUgbmFtZSwgIEBmdW5jdGlvbjsgCVwKKwkuZ2xvYmwgbmFtZTsJCQlcCisJLnAyYWxpZ24gNDsJCQlcCituYW1lOgkJCQkJXAorCWNmaV9zdGFydHByb2MKKyNlbmRpZgorCisjaWZuZGVmIEVORAorIyBkZWZpbmUgRU5EKG5hbWUpCQkJXAorCWNmaV9lbmRwcm9jOwkJCVwKKwkuc2l6ZSBuYW1lLCAuLW5hbWUKKyNlbmRpZgorCisjZGVmaW5lIENGSV9QVVNIKFJFRykJCQlcCisgIGNmaV9hZGp1c3RfY2ZhX29mZnNldCAoNCk7CQlcCisgIGNmaV9yZWxfb2Zmc2V0IChSRUcsIDApCisKKyNkZWZpbmUgQ0ZJX1BPUChSRUcpCQkJXAorICBjZmlfYWRqdXN0X2NmYV9vZmZzZXQgKC00KTsJCVwKKyAgY2ZpX3Jlc3RvcmUgKFJFRykKKworI2RlZmluZSBQVVNIKFJFRykJcHVzaGwgUkVHOyBDRklfUFVTSCAoUkVHKQorI2RlZmluZSBQT1AoUkVHKQlwb3BsIFJFRzsgQ0ZJX1BPUCAoUkVHKQorCisjaWZuZGVmIFNUUkNBVAorIyBkZWZpbmUgU1RSQ0FUCXN0cmNhdAorI2VuZGlmCisKKyNkZWZpbmUgUEFSTVMJNAorI2RlZmluZSBTVFIxCVBBUk1TKzQKKyNkZWZpbmUgU1RSMglTVFIxKzQKKworI2lmZGVmIFVTRV9BU19TVFJOQ0FUCisjIGRlZmluZSBMRU4JU1RSMis4CisjZW5kaWYKKworI2RlZmluZSBVU0VfQVNfU1RSQ0FUCisKKwkuc2VjdGlvbiAudGV4dC5zc3NlMywiYXgiLEBwcm9nYml0cworRU5UUlkgKFNUUkNBVCkKKwlQVVNICSglZWRpKQorCW1vdglTVFIxKCVlc3ApLCAlZWRpCisJbW92CSVlZGksICVlZHgKKworI2RlZmluZSBSRVRVUk4Jam1wCUwoU3RyY3B5QXRvbSkKKyNpbmNsdWRlICJzc2UyLXN0cmxlbi1hdG9tLlMiCisKK0woU3RyY3B5QXRvbSk6CisJbW92CVNUUjIoJWVzcCksICVlY3gKKwlsZWEJKCVlZGksICVlYXgpLCAlZWR4CisjaWZkZWYgVVNFX0FTX1NUUk5DQVQKKwlQVVNICSglZWJ4KQorCW1vdglMRU4oJWVzcCksICVlYngKKwl0ZXN0CSVlYngsICVlYngKKwlqeglMKFN0cm5jYXRFeGl0MCkKKwljbXAJJDgsICVlYngKKwlqYmUJTChTdHJuY3B5RXhpdDhCeXRlcykKKyNlbmRpZgorCWNtcGIJJDAsICglZWN4KQorCWp6CUwoRXhpdDEpCisJY21wYgkkMCwgMSglZWN4KQorCWp6CUwoRXhpdDIpCisJY21wYgkkMCwgMiglZWN4KQorCWp6CUwoRXhpdDMpCisJY21wYgkkMCwgMyglZWN4KQorCWp6CUwoRXhpdDQpCisJY21wYgkkMCwgNCglZWN4KQorCWp6CUwoRXhpdDUpCisJY21wYgkkMCwgNSglZWN4KQorCWp6CUwoRXhpdDYpCisJY21wYgkkMCwgNiglZWN4KQorCWp6CUwoRXhpdDcpCisJY21wYgkkMCwgNyglZWN4KQorCWp6CUwoRXhpdDgpCisJY21wYgkkMCwgOCglZWN4KQorCWp6CUwoRXhpdDkpCisjaWZkZWYgVVNFX0FTX1NUUk5DQVQKKwljbXAJJDE2LCAlZWJ4CisJamIJTChTdHJuY3B5RXhpdDE1Qnl0ZXMpCisjZW5kaWYKKwljbXBiCSQwLCA5KCVlY3gpCisJanoJTChFeGl0MTApCisJY21wYgkkMCwgMTAoJWVjeCkKKwlqeglMKEV4aXQxMSkKKwljbXBiCSQwLCAxMSglZWN4KQorCWp6CUwoRXhpdDEyKQorCWNtcGIJJDAsIDEyKCVlY3gpCisJanoJTChFeGl0MTMpCisJY21wYgkkMCwgMTMoJWVjeCkKKwlqeglMKEV4aXQxNCkKKwljbXBiCSQwLCAxNCglZWN4KQorCWp6CUwoRXhpdDE1KQorCWNtcGIJJDAsIDE1KCVlY3gpCisJanoJTChFeGl0MTYpCisjaWZkZWYgVVNFX0FTX1NUUk5DQVQKKwljbXAJJDE2LCAlZWJ4CisJamUJTChTdHJuY2F0RXhpdDE2KQorCisjIGRlZmluZSBSRVRVUk4xCVBPUCAoJWVieCk7IFBPUCAoJWVkaSk7CXJldDsgXAorCUNGSV9QVVNIICglZWJ4KTsgQ0ZJX1BVU0ggKCVlZGkpCisjIGRlZmluZSBVU0VfQVNfU1RSTkNQWQorI2Vsc2UKKyMgZGVmaW5lIFJFVFVSTjEJUE9QKCVlZGkpOyByZXQ7IENGSV9QVVNIKCVlZGkpCisjZW5kaWYKKyNpbmNsdWRlICJzc3NlMy1zdHJjcHktYXRvbS5TIgorCisJLnAyYWxpZ24gNAorTChDb3B5RnJvbTFUbzE2Qnl0ZXMpOgorCWFkZAklZXNpLCAlZWR4CisJYWRkCSVlc2ksICVlY3gKKworCVBPUAkoJWVzaSkKKwl0ZXN0CSVhbCwgJWFsCisJanoJTChFeGl0SGlnaCkKKwl0ZXN0CSQweDAxLCAlYWwKKwlqbnoJTChFeGl0MSkKKwl0ZXN0CSQweDAyLCAlYWwKKwlqbnoJTChFeGl0MikKKwl0ZXN0CSQweDA0LCAlYWwKKwlqbnoJTChFeGl0MykKKwl0ZXN0CSQweDA4LCAlYWwKKwlqbnoJTChFeGl0NCkKKwl0ZXN0CSQweDEwLCAlYWwKKwlqbnoJTChFeGl0NSkKKwl0ZXN0CSQweDIwLCAlYWwKKwlqbnoJTChFeGl0NikKKwl0ZXN0CSQweDQwLCAlYWwKKwlqbnoJTChFeGl0NykKKwltb3ZscGQJKCVlY3gpLCAleG1tMAorCW1vdmxwZAkleG1tMCwgKCVlZHgpCisJbW92bAklZWRpLCAlZWF4CisJUkVUVVJOMQorCisJLnAyYWxpZ24gNAorTChFeGl0SGlnaCk6CisJdGVzdAkkMHgwMSwgJWFoCisJam56CUwoRXhpdDkpCisJdGVzdAkkMHgwMiwgJWFoCisJam56CUwoRXhpdDEwKQorCXRlc3QJJDB4MDQsICVhaAorCWpueglMKEV4aXQxMSkKKwl0ZXN0CSQweDA4LCAlYWgKKwlqbnoJTChFeGl0MTIpCisJdGVzdAkkMHgxMCwgJWFoCisJam56CUwoRXhpdDEzKQorCXRlc3QJJDB4MjAsICVhaAorCWpueglMKEV4aXQxNCkKKwl0ZXN0CSQweDQwLCAlYWgKKwlqbnoJTChFeGl0MTUpCisJbW92bHBkCSglZWN4KSwgJXhtbTAKKwltb3ZscGQJOCglZWN4KSwgJXhtbTEKKwltb3ZscGQJJXhtbTAsICglZWR4KQorCW1vdmxwZAkleG1tMSwgOCglZWR4KQorCW1vdmwJJWVkaSwgJWVheAorCVJFVFVSTjEKKworCS5wMmFsaWduIDQKK0woU3RybmNhdEV4aXQxKToKKwltb3ZiCSViaCwgMSglZWR4KQorTChFeGl0MSk6CisJbW92YgkoJWVjeCksICVhbAorCW1vdmIJJWFsLCAoJWVkeCkKKwltb3ZsCSVlZGksICVlYXgKKwlSRVRVUk4xCisKKwkucDJhbGlnbiA0CitMKFN0cm5jYXRFeGl0Mik6CisJbW92YgklYmgsIDIoJWVkeCkKK0woRXhpdDIpOgorCW1vdncJKCVlY3gpLCAlYXgKKwltb3Z3CSVheCwgKCVlZHgpCisJbW92bAklZWRpLCAlZWF4CisJUkVUVVJOMQorCisJLnAyYWxpZ24gNAorTChTdHJuY2F0RXhpdDMpOgorCW1vdmIJJWJoLCAzKCVlZHgpCitMKEV4aXQzKToKKwltb3Z3CSglZWN4KSwgJWF4CisJbW92dwklYXgsICglZWR4KQorCW1vdmIJMiglZWN4KSwgJWFsCisJbW92YgklYWwsIDIoJWVkeCkKKwltb3ZsCSVlZGksICVlYXgKKwlSRVRVUk4xCisKKwkucDJhbGlnbiA0CitMKFN0cm5jYXRFeGl0NCk6CisJbW92YgklYmgsIDQoJWVkeCkKK0woRXhpdDQpOgorCW1vdmwJKCVlY3gpLCAlZWF4CisJbW92bAklZWF4LCAoJWVkeCkKKwltb3ZsCSVlZGksICVlYXgKKwlSRVRVUk4xCisKKwkucDJhbGlnbiA0CitMKFN0cm5jYXRFeGl0NSk6CisJbW92YgklYmgsIDUoJWVkeCkKK0woRXhpdDUpOgorCW1vdmwJKCVlY3gpLCAlZWF4CisJbW92bAklZWF4LCAoJWVkeCkKKwltb3ZiCTQoJWVjeCksICVhbAorCW1vdmIJJWFsLCA0KCVlZHgpCisJbW92bAklZWRpLCAlZWF4CisJUkVUVVJOMQorCisJLnAyYWxpZ24gNAorTChTdHJuY2F0RXhpdDYpOgorCW1vdmIJJWJoLCA2KCVlZHgpCitMKEV4aXQ2KToKKwltb3ZsCSglZWN4KSwgJWVheAorCW1vdmwJJWVheCwgKCVlZHgpCisJbW92dwk0KCVlY3gpLCAlYXgKKwltb3Z3CSVheCwgNCglZWR4KQorCW1vdmwJJWVkaSwgJWVheAorCVJFVFVSTjEKKworCS5wMmFsaWduIDQKK0woU3RybmNhdEV4aXQ3KToKKwltb3ZiCSViaCwgNyglZWR4KQorTChFeGl0Nyk6CisJbW92bAkoJWVjeCksICVlYXgKKwltb3ZsCSVlYXgsICglZWR4KQorCW1vdmwJMyglZWN4KSwgJWVheAorCW1vdmwJJWVheCwgMyglZWR4KQorCW1vdmwJJWVkaSwgJWVheAorCVJFVFVSTjEKKworCS5wMmFsaWduIDQKK0woU3RybmNhdEV4aXQ4KToKKwltb3ZiCSViaCwgOCglZWR4KQorTChFeGl0OCk6CisJbW92bHBkCSglZWN4KSwgJXhtbTAKKwltb3ZscGQJJXhtbTAsICglZWR4KQorCW1vdmwJJWVkaSwgJWVheAorCVJFVFVSTjEKKworCS5wMmFsaWduIDQKK0woU3RybmNhdEV4aXQ5KToKKwltb3ZiCSViaCwgOSglZWR4KQorTChFeGl0OSk6CisJbW92bHBkCSglZWN4KSwgJXhtbTAKKwltb3ZscGQJJXhtbTAsICglZWR4KQorCW1vdmIJOCglZWN4KSwgJWFsCisJbW92YgklYWwsIDgoJWVkeCkKKwltb3ZsCSVlZGksICVlYXgKKwlSRVRVUk4xCisKKwkucDJhbGlnbiA0CitMKFN0cm5jYXRFeGl0MTApOgorCW1vdmIJJWJoLCAxMCglZWR4KQorTChFeGl0MTApOgorCW1vdmxwZAkoJWVjeCksICV4bW0wCisJbW92bHBkCSV4bW0wLCAoJWVkeCkKKwltb3Z3CTgoJWVjeCksICVheAorCW1vdncJJWF4LCA4KCVlZHgpCisJbW92bAklZWRpLCAlZWF4CisJUkVUVVJOMQorCisJLnAyYWxpZ24gNAorTChTdHJuY2F0RXhpdDExKToKKwltb3ZiCSViaCwgMTEoJWVkeCkKK0woRXhpdDExKToKKwltb3ZscGQJKCVlY3gpLCAleG1tMAorCW1vdmxwZAkleG1tMCwgKCVlZHgpCisJbW92bAk3KCVlY3gpLCAlZWF4CisJbW92bAklZWF4LCA3KCVlZHgpCisJbW92bAklZWRpLCAlZWF4CisJUkVUVVJOMQorCisJLnAyYWxpZ24gNAorTChTdHJuY2F0RXhpdDEyKToKKwltb3ZiCSViaCwgMTIoJWVkeCkKK0woRXhpdDEyKToKKwltb3ZscGQJKCVlY3gpLCAleG1tMAorCW1vdmxwZAkleG1tMCwgKCVlZHgpCisJbW92bAk4KCVlY3gpLCAlZWF4CisJbW92bAklZWF4LCA4KCVlZHgpCisJbW92bAklZWRpLCAlZWF4CisJUkVUVVJOMQorCisJLnAyYWxpZ24gNAorTChTdHJuY2F0RXhpdDEzKToKKwltb3ZiCSViaCwgMTMoJWVkeCkKK0woRXhpdDEzKToKKwltb3ZscGQJKCVlY3gpLCAleG1tMAorCW1vdmxwZAkleG1tMCwgKCVlZHgpCisJbW92bHBkCTUoJWVjeCksICV4bW0wCisJbW92bHBkCSV4bW0wLCA1KCVlZHgpCisJbW92bAklZWRpLCAlZWF4CisJUkVUVVJOMQorCisJLnAyYWxpZ24gNAorTChTdHJuY2F0RXhpdDE0KToKKwltb3ZiCSViaCwgMTQoJWVkeCkKK0woRXhpdDE0KToKKwltb3ZscGQJKCVlY3gpLCAleG1tMAorCW1vdmxwZAkleG1tMCwgKCVlZHgpCisJbW92bHBkCTYoJWVjeCksICV4bW0wCisJbW92bHBkCSV4bW0wLCA2KCVlZHgpCisJbW92bAklZWRpLCAlZWF4CisJUkVUVVJOMQorCisJLnAyYWxpZ24gNAorTChTdHJuY2F0RXhpdDE1KToKKwltb3ZiCSViaCwgMTUoJWVkeCkKK0woRXhpdDE1KToKKwltb3ZscGQJKCVlY3gpLCAleG1tMAorCW1vdmxwZAkleG1tMCwgKCVlZHgpCisJbW92bHBkCTcoJWVjeCksICV4bW0wCisJbW92bHBkCSV4bW0wLCA3KCVlZHgpCisJbW92bAklZWRpLCAlZWF4CisJUkVUVVJOMQorCisJLnAyYWxpZ24gNAorTChTdHJuY2F0RXhpdDE2KToKKwltb3ZiCSViaCwgMTYoJWVkeCkKK0woRXhpdDE2KToKKwltb3ZscGQJKCVlY3gpLCAleG1tMAorCW1vdmxwZAk4KCVlY3gpLCAleG1tMQorCW1vdmxwZAkleG1tMCwgKCVlZHgpCisJbW92bHBkCSV4bW0xLCA4KCVlZHgpCisJbW92bAklZWRpLCAlZWF4CisJUkVUVVJOMQorCisjaWZkZWYgVVNFX0FTX1NUUk5DUFkKKworCUNGSV9QVVNIKCVlc2kpCisKKwkucDJhbGlnbiA0CitMKENvcHlGcm9tMVRvMTZCeXRlc0Nhc2UyKToKKwlhZGQJJDE2LCAlZWJ4CisJYWRkCSVlc2ksICVlY3gKKwlsZWEJKCVlc2ksICVlZHgpLCAlZXNpCisJbGVhCS05KCVlYngpLCAlZWR4CisJYW5kCSQxPDw3LCAlZGgKKwlvcgklYWwsICVkaAorCWxlYQkoJWVzaSksICVlZHgKKwlQT1AJKCVlc2kpCisJanoJTChFeGl0SGlnaENhc2UyKQorCisJdGVzdAkkMHgwMSwgJWFsCisJam56CUwoRXhpdDEpCisJY21wCSQxLCAlZWJ4CisJamUJTChTdHJuY2F0RXhpdDEpCisJdGVzdAkkMHgwMiwgJWFsCisJam56CUwoRXhpdDIpCisJY21wCSQyLCAlZWJ4CisJamUJTChTdHJuY2F0RXhpdDIpCisJdGVzdAkkMHgwNCwgJWFsCisJam56CUwoRXhpdDMpCisJY21wCSQzLCAlZWJ4CisJamUJTChTdHJuY2F0RXhpdDMpCisJdGVzdAkkMHgwOCwgJWFsCisJam56CUwoRXhpdDQpCisJY21wCSQ0LCAlZWJ4CisJamUJTChTdHJuY2F0RXhpdDQpCisJdGVzdAkkMHgxMCwgJWFsCisJam56CUwoRXhpdDUpCisJY21wCSQ1LCAlZWJ4CisJamUJTChTdHJuY2F0RXhpdDUpCisJdGVzdAkkMHgyMCwgJWFsCisJam56CUwoRXhpdDYpCisJY21wCSQ2LCAlZWJ4CisJamUJTChTdHJuY2F0RXhpdDYpCisJdGVzdAkkMHg0MCwgJWFsCisJam56CUwoRXhpdDcpCisJY21wCSQ3LCAlZWJ4CisJamUJTChTdHJuY2F0RXhpdDcpCisJbW92bHBkCSglZWN4KSwgJXhtbTAKKwltb3ZscGQJJXhtbTAsICglZWR4KQorCWxlYQk3KCVlZHgpLCAlZWF4CisJY21wYgkkMSwgKCVlYXgpCisJc2JiCSQtMSwgJWVheAorCXhvcgklY2wsICVjbAorCW1vdmIJJWNsLCAoJWVheCkKKwltb3ZsCSVlZGksICVlYXgKKwlSRVRVUk4xCisKKwkucDJhbGlnbiA0CitMKEV4aXRIaWdoQ2FzZTIpOgorCXRlc3QJJDB4MDEsICVhaAorCWpueglMKEV4aXQ5KQorCWNtcAkkOSwgJWVieAorCWplCUwoU3RybmNhdEV4aXQ5KQorCXRlc3QJJDB4MDIsICVhaAorCWpueglMKEV4aXQxMCkKKwljbXAJJDEwLCAlZWJ4CisJamUJTChTdHJuY2F0RXhpdDEwKQorCXRlc3QJJDB4MDQsICVhaAorCWpueglMKEV4aXQxMSkKKwljbXAJJDExLCAlZWJ4CisJamUJTChTdHJuY2F0RXhpdDExKQorCXRlc3QJJDB4OCwgJWFoCisJam56CUwoRXhpdDEyKQorCWNtcAkkMTIsICVlYngKKwlqZQlMKFN0cm5jYXRFeGl0MTIpCisJdGVzdAkkMHgxMCwgJWFoCisJam56CUwoRXhpdDEzKQorCWNtcAkkMTMsICVlYngKKwlqZQlMKFN0cm5jYXRFeGl0MTMpCisJdGVzdAkkMHgyMCwgJWFoCisJam56CUwoRXhpdDE0KQorCWNtcAkkMTQsICVlYngKKwlqZQlMKFN0cm5jYXRFeGl0MTQpCisJdGVzdAkkMHg0MCwgJWFoCisJam56CUwoRXhpdDE1KQorCWNtcAkkMTUsICVlYngKKwlqZQlMKFN0cm5jYXRFeGl0MTUpCisJbW92bHBkCSglZWN4KSwgJXhtbTAKKwltb3ZscGQJJXhtbTAsICglZWR4KQorCW1vdmxwZAk4KCVlY3gpLCAleG1tMQorCW1vdmxwZAkleG1tMSwgOCglZWR4KQorCW1vdmwJJWVkaSwgJWVheAorCVJFVFVSTjEKKworCUNGSV9QVVNIKCVlc2kpCisKK0woQ29weUZyb20xVG8xNkJ5dGVzQ2FzZTJPckNhc2UzKToKKwl0ZXN0CSVlYXgsICVlYXgKKwlqbnoJTChDb3B5RnJvbTFUbzE2Qnl0ZXNDYXNlMikKKworCS5wMmFsaWduIDQKK0woQ29weUZyb20xVG8xNkJ5dGVzQ2FzZTMpOgorCWFkZAkkMTYsICVlYngKKwlhZGQJJWVzaSwgJWVkeAorCWFkZAklZXNpLCAlZWN4CisKKwlQT1AJKCVlc2kpCisKKwljbXAJJDgsICVlYngKKwlqYQlMKEV4aXRIaWdoQ2FzZTMpCisJY21wCSQxLCAlZWJ4CisJamUJTChTdHJuY2F0RXhpdDEpCisJY21wCSQyLCAlZWJ4CisJamUJTChTdHJuY2F0RXhpdDIpCisJY21wCSQzLCAlZWJ4CisJamUJTChTdHJuY2F0RXhpdDMpCisJY21wCSQ0LCAlZWJ4CisJamUJTChTdHJuY2F0RXhpdDQpCisJY21wCSQ1LCAlZWJ4CisJamUJTChTdHJuY2F0RXhpdDUpCisJY21wCSQ2LCAlZWJ4CisJamUJTChTdHJuY2F0RXhpdDYpCisJY21wCSQ3LCAlZWJ4CisJamUJTChTdHJuY2F0RXhpdDcpCisJbW92bHBkCSglZWN4KSwgJXhtbTAKKwltb3ZscGQJJXhtbTAsICglZWR4KQorCW1vdmIJJWJoLCA4KCVlZHgpCisJbW92bAklZWRpLCAlZWF4CisJUkVUVVJOMQorCisJLnAyYWxpZ24gNAorTChFeGl0SGlnaENhc2UzKToKKwljbXAJJDksICVlYngKKwlqZQlMKFN0cm5jYXRFeGl0OSkKKwljbXAJJDEwLCAlZWJ4CisJamUJTChTdHJuY2F0RXhpdDEwKQorCWNtcAkkMTEsICVlYngKKwlqZQlMKFN0cm5jYXRFeGl0MTEpCisJY21wCSQxMiwgJWVieAorCWplCUwoU3RybmNhdEV4aXQxMikKKwljbXAJJDEzLCAlZWJ4CisJamUJTChTdHJuY2F0RXhpdDEzKQorCWNtcAkkMTQsICVlYngKKwlqZQlMKFN0cm5jYXRFeGl0MTQpCisJY21wCSQxNSwgJWVieAorCWplCUwoU3RybmNhdEV4aXQxNSkKKwltb3ZscGQJKCVlY3gpLCAleG1tMAorCW1vdmxwZAkleG1tMCwgKCVlZHgpCisJbW92bHBkCTgoJWVjeCksICV4bW0xCisJbW92bHBkCSV4bW0xLCA4KCVlZHgpCisJbW92YgklYmgsIDE2KCVlZHgpCisJbW92bAklZWRpLCAlZWF4CisJUkVUVVJOMQorCisJLnAyYWxpZ24gNAorTChTdHJuY2F0RXhpdDApOgorCW1vdmwJJWVkaSwgJWVheAorCVJFVFVSTjEKKworCS5wMmFsaWduIDQKK0woU3RybmNweUV4aXQxNUJ5dGVzKToKKwljbXAJJDksICVlYngKKwlqZQlMKFN0cm5jYXRFeGl0OSkKKwljbXBiCSQwLCA5KCVlY3gpCisJanoJTChFeGl0MTApCisJY21wCSQxMCwgJWVieAorCWplCUwoU3RybmNhdEV4aXQxMCkKKwljbXBiCSQwLCAxMCglZWN4KQorCWp6CUwoRXhpdDExKQorCWNtcAkkMTEsICVlYngKKwlqZQlMKFN0cm5jYXRFeGl0MTEpCisJY21wYgkkMCwgMTEoJWVjeCkKKwlqeglMKEV4aXQxMikKKwljbXAJJDEyLCAlZWJ4CisJamUJTChTdHJuY2F0RXhpdDEyKQorCWNtcGIJJDAsIDEyKCVlY3gpCisJanoJTChFeGl0MTMpCisJY21wCSQxMywgJWVieAorCWplCUwoU3RybmNhdEV4aXQxMykKKwljbXBiCSQwLCAxMyglZWN4KQorCWp6CUwoRXhpdDE0KQorCWNtcAkkMTQsICVlYngKKwlqZQlMKFN0cm5jYXRFeGl0MTQpCisJbW92bHBkCSglZWN4KSwgJXhtbTAKKwltb3ZscGQJJXhtbTAsICglZWR4KQorCW1vdmxwZAk3KCVlY3gpLCAleG1tMAorCW1vdmxwZAkleG1tMCwgNyglZWR4KQorCWxlYQkxNCglZWR4KSwgJWVheAorCWNtcGIJJDEsICglZWF4KQorCXNiYgkkLTEsICVlYXgKKwltb3ZiCSViaCwgKCVlYXgpCisJbW92bAklZWRpLCAlZWF4CisJUkVUVVJOMQorCisJLnAyYWxpZ24gNAorTChTdHJuY3B5RXhpdDhCeXRlcyk6CisJY21wYgkkMCwgKCVlY3gpCisJanoJTChFeGl0MSkKKwljbXAJJDEsICVlYngKKwlqZQlMKFN0cm5jYXRFeGl0MSkKKwljbXBiCSQwLCAxKCVlY3gpCisJanoJTChFeGl0MikKKwljbXAJJDIsICVlYngKKwlqZQlMKFN0cm5jYXRFeGl0MikKKwljbXBiCSQwLCAyKCVlY3gpCisJanoJTChFeGl0MykKKwljbXAJJDMsICVlYngKKwlqZQlMKFN0cm5jYXRFeGl0MykKKwljbXBiCSQwLCAzKCVlY3gpCisJanoJTChFeGl0NCkKKwljbXAJJDQsICVlYngKKwlqZQlMKFN0cm5jYXRFeGl0NCkKKwljbXBiCSQwLCA0KCVlY3gpCisJanoJTChFeGl0NSkKKwljbXAJJDUsICVlYngKKwlqZQlMKFN0cm5jYXRFeGl0NSkKKwljbXBiCSQwLCA1KCVlY3gpCisJanoJTChFeGl0NikKKwljbXAJJDYsICVlYngKKwlqZQlMKFN0cm5jYXRFeGl0NikKKwljbXBiCSQwLCA2KCVlY3gpCisJanoJTChFeGl0NykKKwljbXAJJDcsICVlYngKKwlqZQlMKFN0cm5jYXRFeGl0NykKKwltb3ZscGQJKCVlY3gpLCAleG1tMAorCW1vdmxwZAkleG1tMCwgKCVlZHgpCisJbGVhCTcoJWVkeCksICVlYXgKKwljbXBiCSQxLCAoJWVheCkKKwlzYmIJJC0xLCAlZWF4CisJbW92YgklYmgsICglZWF4KQorCW1vdmwJJWVkaSwgJWVheAorCVJFVFVSTjEKKworI2VuZGlmCitFTkQgKFNUUkNBVCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3RyaW5nL3Nzc2UzLXN0cmNtcC1hdG9tLlMgYi9saWJjL2FyY2gteDg2L3N0cmluZy9zc3NlMy1zdHJjbXAtYXRvbS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyNzUzNzkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N0cmluZy9zc3NlMy1zdHJjbXAtYXRvbS5TCkBAIC0wLDAgKzEsMjI3OCBAQAorLyoKK0NvcHlyaWdodCAoYykgMjAxMCwgSW50ZWwgQ29ycG9yYXRpb24KK0FsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisKKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAgICAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisKKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAgICAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAgICAqIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCisgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEludGVsIENvcnBvcmF0aW9uIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICAgICogbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgICAgKiB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKK1dBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKK0RJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKK0FOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCitBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKK1NPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKi8KKworI2lmbmRlZiBMCisjIGRlZmluZSBMKGxhYmVsKQkuTCMjbGFiZWwKKyNlbmRpZgorCisjaWZuZGVmIGNmaV9zdGFydHByb2MKKyMgZGVmaW5lIGNmaV9zdGFydHByb2MJCQkuY2ZpX3N0YXJ0cHJvYworI2VuZGlmCisKKyNpZm5kZWYgY2ZpX2VuZHByb2MKKyMgZGVmaW5lIGNmaV9lbmRwcm9jCQkJLmNmaV9lbmRwcm9jCisjZW5kaWYKKworI2lmbmRlZiBjZmlfcmVsX29mZnNldAorIyBkZWZpbmUgY2ZpX3JlbF9vZmZzZXQocmVnLCBvZmYpCS5jZmlfcmVsX29mZnNldCByZWcsIG9mZgorI2VuZGlmCisKKyNpZm5kZWYgY2ZpX3Jlc3RvcmUKKyMgZGVmaW5lIGNmaV9yZXN0b3JlKHJlZykJCS5jZmlfcmVzdG9yZSByZWcKKyNlbmRpZgorCisjaWZuZGVmIGNmaV9hZGp1c3RfY2ZhX29mZnNldAorIyBkZWZpbmUgY2ZpX2FkanVzdF9jZmFfb2Zmc2V0KG9mZikJLmNmaV9hZGp1c3RfY2ZhX29mZnNldCBvZmYKKyNlbmRpZgorCisjaWZuZGVmIGNmaV9yZW1lbWJlcl9zdGF0ZQorIyBkZWZpbmUgY2ZpX3JlbWVtYmVyX3N0YXRlCQkuY2ZpX3JlbWVtYmVyX3N0YXRlCisjZW5kaWYKKworI2lmbmRlZiBjZmlfcmVzdG9yZV9zdGF0ZQorIyBkZWZpbmUgY2ZpX3Jlc3RvcmVfc3RhdGUJCS5jZmlfcmVzdG9yZV9zdGF0ZQorI2VuZGlmCisKKyNpZm5kZWYgRU5UUlkKKyMgZGVmaW5lIEVOVFJZKG5hbWUpCQkJXAorCS50eXBlIG5hbWUsICBAZnVuY3Rpb247IAlcCisJLmdsb2JsIG5hbWU7CQkJXAorCS5wMmFsaWduIDQ7CQkJXAorbmFtZToJCQkJCVwKKwljZmlfc3RhcnRwcm9jCisjZW5kaWYKKworI2lmbmRlZiBFTkQKKyMgZGVmaW5lIEVORChuYW1lKQkJCVwKKwljZmlfZW5kcHJvYzsJCQlcCisJLnNpemUgbmFtZSwgLi1uYW1lCisjZW5kaWYKKworI2RlZmluZSBDRklfUFVTSChSRUcpCQkJCQkJXAorICBjZmlfYWRqdXN0X2NmYV9vZmZzZXQgKDQpOwkJCQkJXAorICBjZmlfcmVsX29mZnNldCAoUkVHLCAwKQorCisjZGVmaW5lIENGSV9QT1AoUkVHKQkJCQkJCVwKKyAgY2ZpX2FkanVzdF9jZmFfb2Zmc2V0ICgtNCk7CQkJCQlcCisgIGNmaV9yZXN0b3JlIChSRUcpCisKKyNkZWZpbmUgUFVTSChSRUcpCXB1c2hsIFJFRzsgQ0ZJX1BVU0ggKFJFRykKKyNkZWZpbmUgUE9QKFJFRykJcG9wbCBSRUc7IENGSV9QT1AgKFJFRykKKworI2lmbmRlZiBVU0VfQVNfU1RSTkNNUAorIyBkZWZpbmUgU1RSMQkJNAorIyBkZWZpbmUgU1RSMgkJU1RSMSs0CisjIGRlZmluZSBSRVRVUk4JCXJldAorCisjIGRlZmluZSBVUERBVEVfU1RSTkNNUF9DT1VOVEVSCisjZWxzZQorIyBkZWZpbmUgU1RSMQkJOAorIyBkZWZpbmUgU1RSMgkJU1RSMSs0CisjIGRlZmluZSBDTlQJCVNUUjIrNAorIyBkZWZpbmUgUkVUVVJOCQlQT1AgKCVlYnApOyByZXQ7IENGSV9QVVNIICglZWJwKQorCisjIGRlZmluZSBVUERBVEVfU1RSTkNNUF9DT1VOVEVSCQkJCVwKKwkvKiBjYWxjdWxhdGUgbGVmdCBudW1iZXIgdG8gY29tcGFyZSAqLwkJXAorCW1vdgkkMTYsICVlc2k7CQkJCVwKKwlzdWIJJWVjeCwgJWVzaTsJCQkJXAorCWNtcGwJJWVzaSwgJWVicDsJCQkJXAorCWpiZQlMKG1vcmU4Ynl0ZXNlcSk7CQkJXAorCXN1YgklZXNpLCAlZWJwCisjZW5kaWYKKworI2lmbmRlZiBTVFJDTVAKKyMgZGVmaW5lIFNUUkNNUCBzdHJjbXAKKyNlbmRpZgorCisJLnNlY3Rpb24gLnRleHQuc3NzZTMsImF4IixAcHJvZ2JpdHMKK0VOVFJZIChTVFJDTVApCisjaWZkZWYgVVNFX0FTX1NUUk5DTVAKKwlQVVNICSglZWJwKQorI2VuZGlmCisJbW92bAlTVFIxKCVlc3ApLCAlZWR4CisJbW92bAlTVFIyKCVlc3ApLCAlZWF4CisjaWZkZWYgVVNFX0FTX1NUUk5DTVAKKwltb3ZsCUNOVCglZXNwKSwgJWVicAorCWNtcGwJJDE2LCAlZWJwCisJamIJTChsZXNzMTZieXRlc19zbmNtcCkKKwlqbXAJTChtb3JlMTZieXRlcykKKyNlbmRpZgorCisJbW92emJsCSglZWF4KSwgJWVjeAorCWNtcGIJJWNsLCAoJWVkeCkKKwlqbmUJTChuZXEpCisJY21wbAkkMCwgJWVjeAorCWplCUwoZXEpCisKKwltb3Z6YmwJMSglZWF4KSwgJWVjeAorCWNtcGIJJWNsLCAxKCVlZHgpCisJam5lCUwobmVxKQorCWNtcGwJJDAsICVlY3gKKwlqZQlMKGVxKQorCisJbW92emJsCTIoJWVheCksICVlY3gKKwljbXBiCSVjbCwgMiglZWR4KQorCWpuZQlMKG5lcSkKKwljbXBsCSQwLCAlZWN4CisJamUJTChlcSkKKworCW1vdnpibAkzKCVlYXgpLCAlZWN4CisJY21wYgklY2wsIDMoJWVkeCkKKwlqbmUJTChuZXEpCisJY21wbAkkMCwgJWVjeAorCWplCUwoZXEpCisKKwltb3Z6YmwJNCglZWF4KSwgJWVjeAorCWNtcGIJJWNsLCA0KCVlZHgpCisJam5lCUwobmVxKQorCWNtcGwJJDAsICVlY3gKKwlqZQlMKGVxKQorCisJbW92emJsCTUoJWVheCksICVlY3gKKwljbXBiCSVjbCwgNSglZWR4KQorCWpuZQlMKG5lcSkKKwljbXBsCSQwLCAlZWN4CisJamUJTChlcSkKKworCW1vdnpibAk2KCVlYXgpLCAlZWN4CisJY21wYgklY2wsIDYoJWVkeCkKKwlqbmUJTChuZXEpCisJY21wbAkkMCwgJWVjeAorCWplCUwoZXEpCisKKwltb3Z6YmwJNyglZWF4KSwgJWVjeAorCWNtcGIJJWNsLCA3KCVlZHgpCisJam5lCUwobmVxKQorCWNtcGwJJDAsICVlY3gKKwlqZQlMKGVxKQorCisJYWRkCSQ4LCAlZWR4CisJYWRkCSQ4LCAlZWF4CisjaWZkZWYgVVNFX0FTX1NUUk5DTVAKKwljbXBsCSQ4LCAlZWJwCisJbGVhCS04KCVlYnApLCAlZWJwCisJamUJTChlcSkKK0wobW9yZTE2Ynl0ZXMpOgorI2VuZGlmCisJbW92bAklZWR4LCAlZWN4CisJYW5kCSQweGZmZiwgJWVjeAorCWNtcGwJJDB4ZmYwLCAlZWN4CisJamEJTChjcm9zc3BhZ2UpCisJbW92CSVlYXgsICVlY3gKKwlhbmQJJDB4ZmZmLCAlZWN4CisJY21wbAkkMHhmZjAsICVlY3gKKwlqYQlMKGNyb3NzcGFnZSkKKwlweG9yCSV4bW0wLCAleG1tMAorCW1vdmxwZAkoJWVheCksICV4bW0xCisJbW92bHBkCSglZWR4KSwgJXhtbTIKKwltb3ZocGQJOCglZWF4KSwgJXhtbTEKKwltb3ZocGQJOCglZWR4KSwgJXhtbTIKKwlwY21wZXFiCSV4bW0xLCAleG1tMAorCXBjbXBlcWIJJXhtbTIsICV4bW0xCisJcHN1YmIJJXhtbTAsICV4bW0xCisJcG1vdm1za2IgJXhtbTEsICVlY3gKKwlzdWIJJDB4ZmZmZiwgJWVjeAorCWpueglMKGxlc3MxNmJ5dGVzKQorI2lmZGVmIFVTRV9BU19TVFJOQ01QCisJY21wbAkkMTYsICVlYnAKKwlsZWEJLTE2KCVlYnApLCAlZWJwCisJamJlCUwoZXEpCisjZW5kaWYKKwlhZGQJJDE2LCAlZWF4CisJYWRkCSQxNiwgJWVkeAorCitMKGNyb3NzcGFnZSk6CisKKwlQVVNICSglZWJ4KQorCVBVU0gJKCVlZGkpCisJUFVTSAkoJWVzaSkKKyNpZmRlZiBVU0VfQVNfU1RSTkNNUAorCWNmaV9yZW1lbWJlcl9zdGF0ZQorI2VuZGlmCisKKwltb3ZsCSVlZHgsICVlZGkKKwltb3ZsCSVlYXgsICVlY3gKKwlhbmQJJDB4ZiwgJWVjeAorCWFuZAkkMHhmLCAlZWRpCisJeG9yCSVlY3gsICVlYXgKKwl4b3IJJWVkaSwgJWVkeAorCXhvcgklZWJ4LCAlZWJ4CisJY21wbAklZWRpLCAlZWN4CisJamUJTChhc2hyXzApCisJamEJTChiaWdnZXIpCisJb3IJJDB4MjAsICVlYngKKwl4Y2hnCSVlZHgsICVlYXgKKwl4Y2hnCSVlY3gsICVlZGkKK0woYmlnZ2VyKToKKwlsZWEJMTUoJWVkaSksICVlZGkKKwlzdWIJJWVjeCwgJWVkaQorCWNtcGwJJDgsICVlZGkKKwlqbGUJTChhc2hyX2xlc3NfOCkKKwljbXBsCSQxNCwgJWVkaQorCWplCUwoYXNocl8xNSkKKwljbXBsCSQxMywgJWVkaQorCWplCUwoYXNocl8xNCkKKwljbXBsCSQxMiwgJWVkaQorCWplCUwoYXNocl8xMykKKwljbXBsCSQxMSwgJWVkaQorCWplCUwoYXNocl8xMikKKwljbXBsCSQxMCwgJWVkaQorCWplCUwoYXNocl8xMSkKKwljbXBsCSQ5LCAlZWRpCisJamUJTChhc2hyXzEwKQorTChhc2hyX2xlc3NfOCk6CisJamUJTChhc2hyXzkpCisJY21wbAkkNywgJWVkaQorCWplCUwoYXNocl84KQorCWNtcGwJJDYsICVlZGkKKwlqZQlMKGFzaHJfNykKKwljbXBsCSQ1LCAlZWRpCisJamUJTChhc2hyXzYpCisJY21wbAkkNCwgJWVkaQorCWplCUwoYXNocl81KQorCWNtcGwJJDMsICVlZGkKKwlqZQlMKGFzaHJfNCkKKwljbXBsCSQyLCAlZWRpCisJamUJTChhc2hyXzMpCisJY21wbAkkMSwgJWVkaQorCWplCUwoYXNocl8yKQorCWNtcGwJJDAsICVlZGkKKwlqZQlMKGFzaHJfMSkKKworLyoKKyAqIFRoZSBmb2xsb3dpbmcgY2FzZXMgd2lsbCBiZSBoYW5kbGVkIGJ5IGFzaHJfMAorICogIGVjeChvZmZzZXQgb2YgZXNpKSAgZWF4KG9mZnNldCBvZiBlZGkpICByZWxhdGl2ZSBvZmZzZXQgIGNvcnJlc3BvbmRpbmcgY2FzZQorICogICAgICAgIG4oMH4xNSkgICAgICAgICAgICBuKDB+MTUpICAgICAgICAgICAxNSgxNSsgbi1uKSAgICAgICAgIGFzaHJfMAorICovCisJLnAyYWxpZ24gNAorTChhc2hyXzApOgorCW1vdgkkMHhmZmZmLCAlZXNpCisJbW92ZHFhCSglZWF4KSwgJXhtbTEKKwlweG9yCSV4bW0wLCAleG1tMAorCXBjbXBlcWIJJXhtbTEsICV4bW0wCisJcGNtcGVxYgkoJWVkeCksICV4bW0xCisJcHN1YmIJJXhtbTAsICV4bW0xCisJcG1vdm1za2IgJXhtbTEsICVlZGkKKwlzaHIJJWNsLCAlZXNpCisJc2hyCSVjbCwgJWVkaQorCXN1YgklZWRpLCAlZXNpCisJbW92CSVlY3gsICVlZGkKKwlqbmUJTChsZXNzMzJieXRlcykKKwlVUERBVEVfU1RSTkNNUF9DT1VOVEVSCisJbW92CSQweDEwLCAlZWJ4CisJbW92CSQweDEwLCAlZWN4CisJcHhvcgkleG1tMCwgJXhtbTAKKwkucDJhbGlnbiA0CitMKGxvb3BfYXNocl8wKToKKwltb3ZkcWEJKCVlYXgsICVlY3gpLCAleG1tMQorCW1vdmRxYQkoJWVkeCwgJWVjeCksICV4bW0yCisKKwlwY21wZXFiCSV4bW0xLCAleG1tMAorCXBjbXBlcWIJJXhtbTIsICV4bW0xCisJcHN1YmIJJXhtbTAsICV4bW0xCisJcG1vdm1za2IgJXhtbTEsICVlc2kKKwlzdWIJJDB4ZmZmZiwgJWVzaQorCWpueglMKGV4aXQpCisjaWZkZWYgVVNFX0FTX1NUUk5DTVAKKwljbXBsCSQxNiwgJWVicAorCWxlYQktMTYoJWVicCksICVlYnAKKwlqYmUJTChtb3JlOGJ5dGVzZXEpCisjZW5kaWYKKwlhZGQJJDE2LCAlZWN4CisJam1wCUwobG9vcF9hc2hyXzApCisKKy8qCisgKiBUaGUgZm9sbG93aW5nIGNhc2VzIHdpbGwgYmUgaGFuZGxlZCBieSBhc2hyXzEKKyAqIGVjeChvZmZzZXQgb2YgZXNpKSAgZWF4KG9mZnNldCBvZiBlZGkpICAgcmVsYXRpdmUgb2Zmc2V0ICAgCWNvcnJlc3BvbmRpbmcgY2FzZQorICogICAgICAgIG4oMTUpICAgICAgICAgICAgbiAtMTUgICAgICAgICAgICAwKDE1ICsobi0xNSkgLSBuKSAgICAgICAgIGFzaHJfMQorICovCisJLnAyYWxpZ24gNAorTChhc2hyXzEpOgorCW1vdgkkMHhmZmZmLCAlZXNpCisJcHhvcgkleG1tMCwgJXhtbTAKKwltb3ZkcWEJKCVlZHgpLCAleG1tMgorCW1vdmRxYQkoJWVheCksICV4bW0xCisJcGNtcGVxYgkleG1tMSwgJXhtbTAKKwlwc2xsZHEJJDE1LCAleG1tMgorCXBjbXBlcWIJJXhtbTEsICV4bW0yCisJcHN1YmIJJXhtbTAsICV4bW0yCisJcG1vdm1za2IgJXhtbTIsICVlZGkKKwlzaHIJJWNsLCAlZXNpCisJc2hyCSVjbCwgJWVkaQorCXN1YgklZWRpLCAlZXNpCisJbGVhCS0xNSglZWN4KSwgJWVkaQorCWpueglMKGxlc3MzMmJ5dGVzKQorCisJVVBEQVRFX1NUUk5DTVBfQ09VTlRFUgorCisJbW92ZHFhCSglZWR4KSwgJXhtbTMKKwlweG9yCSV4bW0wLCAleG1tMAorCW1vdgkkMTYsICVlY3gKKwlvcgkkMSwgJWVieAorCWxlYQkxKCVlZHgpLCAlZWRpCisJYW5kCSQweGZmZiwgJWVkaQorCXN1YgkkMHgxMDAwLCAlZWRpCisKKwkucDJhbGlnbiA0CitMKGxvb3BfYXNocl8xKToKKwlhZGQJJDE2LCAlZWRpCisJamcJTChuaWJibGVfYXNocl8xKQorCitMKGdvYmJsZV9hc2hyXzEpOgorCW1vdmRxYQkoJWVheCwgJWVjeCksICV4bW0xCisJbW92ZHFhCSglZWR4LCAlZWN4KSwgJXhtbTIKKwltb3ZkcWEJJXhtbTIsICV4bW00CisKKwlwYWxpZ25yCSQxLCAleG1tMywgJXhtbTIKKworCXBjbXBlcWIJJXhtbTEsICV4bW0wCisJcGNtcGVxYgkleG1tMiwgJXhtbTEKKwlwc3ViYgkleG1tMCwgJXhtbTEKKwlwbW92bXNrYiAleG1tMSwgJWVzaQorCXN1YgkkMHhmZmZmLCAlZXNpCisJam56CUwoZXhpdCkKKyNpZmRlZiBVU0VfQVNfU1RSTkNNUAorCWNtcGwJJDE2LCAlZWJwCisJbGVhCS0xNiglZWJwKSwgJWVicAorCWpiZQlMKG1vcmU4Ynl0ZXNlcSkKKyNlbmRpZgorCisJYWRkCSQxNiwgJWVjeAorCW1vdmRxYQkleG1tNCwgJXhtbTMKKworCWFkZAkkMTYsICVlZGkKKwlqZwlMKG5pYmJsZV9hc2hyXzEpCisKKwltb3ZkcWEJKCVlYXgsICVlY3gpLCAleG1tMQorCW1vdmRxYQkoJWVkeCwgJWVjeCksICV4bW0yCisJbW92ZHFhCSV4bW0yLCAleG1tNAorCisJcGFsaWducgkkMSwgJXhtbTMsICV4bW0yCisKKwlwY21wZXFiCSV4bW0xLCAleG1tMAorCXBjbXBlcWIJJXhtbTIsICV4bW0xCisJcHN1YmIJJXhtbTAsICV4bW0xCisJcG1vdm1za2IgJXhtbTEsICVlc2kKKwlzdWIJJDB4ZmZmZiwgJWVzaQorCWpueglMKGV4aXQpCisKKyNpZmRlZiBVU0VfQVNfU1RSTkNNUAorCWNtcGwJJDE2LCAlZWJwCisJbGVhCS0xNiglZWJwKSwgJWVicAorCWpiZQlMKG1vcmU4Ynl0ZXNlcSkKKyNlbmRpZgorCWFkZAkkMTYsICVlY3gKKwltb3ZkcWEJJXhtbTQsICV4bW0zCisJam1wCUwobG9vcF9hc2hyXzEpCisKKwkucDJhbGlnbiA0CitMKG5pYmJsZV9hc2hyXzEpOgorCXBjbXBlcWIJJXhtbTMsICV4bW0wCisJcG1vdm1za2IgJXhtbTAsICVlc2kKKwl0ZXN0CSQweGZmZmUsICVlc2kKKwlqbnoJTChhc2hyXzFfZXhpdHRhaWwpCisKKyNpZmRlZiBVU0VfQVNfU1RSTkNNUAorCWNtcGwJJDE1LCAlZWJwCisJamJlCUwoYXNocl8xX2V4aXR0YWlsKQorI2VuZGlmCisJcHhvcgkleG1tMCwgJXhtbTAKKwlzdWIJJDB4MTAwMCwgJWVkaQorCWptcAlMKGdvYmJsZV9hc2hyXzEpCisKKwkucDJhbGlnbiA0CitMKGFzaHJfMV9leGl0dGFpbCk6CisJbW92ZHFhCSglZWF4LCAlZWN4KSwgJXhtbTEKKwlwc3JsZHEJJDEsICV4bW0wCisJcHNybGRxCSQxLCAleG1tMworCWptcAlMKGFmdGVydGFpbCkKKworLyoKKyAqIFRoZSBmb2xsb3dpbmcgY2FzZXMgd2lsbCBiZSBoYW5kbGVkIGJ5IGFzaHJfMgorICogZWN4KG9mZnNldCBvZiBlc2kpICBlYXgob2Zmc2V0IG9mIGVkaSkgICByZWxhdGl2ZSBvZmZzZXQgICAJY29ycmVzcG9uZGluZyBjYXNlCisgKiAgICAgICAgbigxNH4xNSkgICAgICAgICAgICBuIC0xNCAgICAgICAgICAgIDEoMTUgKyhuLTE0KSAtIG4pICAgICAgICAgYXNocl8yCisgKi8KKwkucDJhbGlnbiA0CitMKGFzaHJfMik6CisJbW92CSQweGZmZmYsICVlc2kKKwlweG9yCSV4bW0wLCAleG1tMAorCW1vdmRxYQkoJWVkeCksICV4bW0yCisJbW92ZHFhCSglZWF4KSwgJXhtbTEKKwlwY21wZXFiCSV4bW0xLCAleG1tMAorCXBzbGxkcQkkMTQsICV4bW0yCisJcGNtcGVxYgkleG1tMSwgJXhtbTIKKwlwc3ViYgkleG1tMCwgJXhtbTIKKwlwbW92bXNrYiAleG1tMiwgJWVkaQorCXNocgklY2wsICVlc2kKKwlzaHIJJWNsLCAlZWRpCisJc3ViCSVlZGksICVlc2kKKwlsZWEJLTE0KCVlY3gpLCAlZWRpCisJam56CUwobGVzczMyYnl0ZXMpCisKKwlVUERBVEVfU1RSTkNNUF9DT1VOVEVSCisKKwltb3ZkcWEJKCVlZHgpLCAleG1tMworCXB4b3IJJXhtbTAsICV4bW0wCisJbW92CSQxNiwgJWVjeAorCW9yCSQyLCAlZWJ4CisJbGVhCTIoJWVkeCksICVlZGkKKwlhbmQJJDB4ZmZmLCAlZWRpCisJc3ViCSQweDEwMDAsICVlZGkKKworCS5wMmFsaWduIDQKK0wobG9vcF9hc2hyXzIpOgorCWFkZAkkMTYsICVlZGkKKwlqZwlMKG5pYmJsZV9hc2hyXzIpCisKK0woZ29iYmxlX2FzaHJfMik6CisJbW92ZHFhCSglZWF4LCAlZWN4KSwgJXhtbTEKKwltb3ZkcWEJKCVlZHgsICVlY3gpLCAleG1tMgorCW1vdmRxYQkleG1tMiwgJXhtbTQKKworCXBhbGlnbnIJJDIsICV4bW0zLCAleG1tMgorCisJcGNtcGVxYgkleG1tMSwgJXhtbTAKKwlwY21wZXFiCSV4bW0yLCAleG1tMQorCXBzdWJiCSV4bW0wLCAleG1tMQorCXBtb3Ztc2tiICV4bW0xLCAlZXNpCisJc3ViCSQweGZmZmYsICVlc2kKKwlqbnoJTChleGl0KQorCisjaWZkZWYgVVNFX0FTX1NUUk5DTVAKKwljbXBsCSQxNiwgJWVicAorCWxlYQktMTYoJWVicCksICVlYnAKKwlqYmUJTChtb3JlOGJ5dGVzZXEpCisjZW5kaWYKKwlhZGQJJDE2LCAlZWN4CisJbW92ZHFhCSV4bW00LCAleG1tMworCisJYWRkCSQxNiwgJWVkaQorCWpnCUwobmliYmxlX2FzaHJfMikKKworCW1vdmRxYQkoJWVheCwgJWVjeCksICV4bW0xCisJbW92ZHFhCSglZWR4LCAlZWN4KSwgJXhtbTIKKwltb3ZkcWEJJXhtbTIsICV4bW00CisKKwlwYWxpZ25yCSQyLCAleG1tMywgJXhtbTIKKworCXBjbXBlcWIJJXhtbTEsICV4bW0wCisJcGNtcGVxYgkleG1tMiwgJXhtbTEKKwlwc3ViYgkleG1tMCwgJXhtbTEKKwlwbW92bXNrYiAleG1tMSwgJWVzaQorCXN1YgkkMHhmZmZmLCAlZXNpCisJam56CUwoZXhpdCkKKworI2lmZGVmIFVTRV9BU19TVFJOQ01QCisJY21wbAkkMTYsICVlYnAKKwlsZWEJLTE2KCVlYnApLCAlZWJwCisJamJlCUwobW9yZThieXRlc2VxKQorI2VuZGlmCisJYWRkCSQxNiwgJWVjeAorCW1vdmRxYQkleG1tNCwgJXhtbTMKKwlqbXAJTChsb29wX2FzaHJfMikKKworCS5wMmFsaWduIDQKK0wobmliYmxlX2FzaHJfMik6CisJcGNtcGVxYgkleG1tMywgJXhtbTAKKwlwbW92bXNrYiAleG1tMCwgJWVzaQorCXRlc3QJJDB4ZmZmYywgJWVzaQorCWpueglMKGFzaHJfMl9leGl0dGFpbCkKKworI2lmZGVmIFVTRV9BU19TVFJOQ01QCisJY21wbAkkMTQsICVlYnAKKwlqYmUJTChhc2hyXzJfZXhpdHRhaWwpCisjZW5kaWYKKworCXB4b3IJJXhtbTAsICV4bW0wCisJc3ViCSQweDEwMDAsICVlZGkKKwlqbXAJTChnb2JibGVfYXNocl8yKQorCisJLnAyYWxpZ24gNAorTChhc2hyXzJfZXhpdHRhaWwpOgorCW1vdmRxYQkoJWVheCwgJWVjeCksICV4bW0xCisJcHNybGRxCSQyLCAleG1tMAorCXBzcmxkcQkkMiwgJXhtbTMKKwlqbXAJTChhZnRlcnRhaWwpCisKKy8qCisgKiBUaGUgZm9sbG93aW5nIGNhc2VzIHdpbGwgYmUgaGFuZGxlZCBieSBhc2hyXzMKKyAqIGVjeChvZmZzZXQgb2YgZXNpKSAgZWF4KG9mZnNldCBvZiBlZGkpICAgcmVsYXRpdmUgb2Zmc2V0ICAgCWNvcnJlc3BvbmRpbmcgY2FzZQorICogICAgICAgIG4oMTN+MTUpICAgICAgICAgICAgbiAtMTMgICAgICAgICAgICAyKDE1ICsobi0xMykgLSBuKSAgICAgICAgIGFzaHJfMworICovCisJLnAyYWxpZ24gNAorTChhc2hyXzMpOgorCW1vdgkkMHhmZmZmLCAlZXNpCisJcHhvcgkleG1tMCwgJXhtbTAKKwltb3ZkcWEJKCVlZHgpLCAleG1tMgorCW1vdmRxYQkoJWVheCksICV4bW0xCisJcGNtcGVxYgkleG1tMSwgJXhtbTAKKwlwc2xsZHEJJDEzLCAleG1tMgorCXBjbXBlcWIJJXhtbTEsICV4bW0yCisJcHN1YmIJJXhtbTAsICV4bW0yCisJcG1vdm1za2IgJXhtbTIsICVlZGkKKwlzaHIJJWNsLCAlZXNpCisJc2hyCSVjbCwgJWVkaQorCXN1YgklZWRpLCAlZXNpCisJbGVhCS0xMyglZWN4KSwgJWVkaQorCWpueglMKGxlc3MzMmJ5dGVzKQorCisJVVBEQVRFX1NUUk5DTVBfQ09VTlRFUgorCisJbW92ZHFhCSglZWR4KSwgJXhtbTMKKwlweG9yCSV4bW0wLCAleG1tMAorCW1vdgkkMTYsICVlY3gKKwlvcgkkMywgJWVieAorCWxlYQkzKCVlZHgpLCAlZWRpCisJYW5kCSQweGZmZiwgJWVkaQorCXN1YgkkMHgxMDAwLCAlZWRpCisKKwkucDJhbGlnbiA0CitMKGxvb3BfYXNocl8zKToKKwlhZGQJJDE2LCAlZWRpCisJamcJTChuaWJibGVfYXNocl8zKQorCitMKGdvYmJsZV9hc2hyXzMpOgorCW1vdmRxYQkoJWVheCwgJWVjeCksICV4bW0xCisJbW92ZHFhCSglZWR4LCAlZWN4KSwgJXhtbTIKKwltb3ZkcWEJJXhtbTIsICV4bW00CisKKwlwYWxpZ25yCSQzLCAleG1tMywgJXhtbTIKKworCXBjbXBlcWIJJXhtbTEsICV4bW0wCisJcGNtcGVxYgkleG1tMiwgJXhtbTEKKwlwc3ViYgkleG1tMCwgJXhtbTEKKwlwbW92bXNrYiAleG1tMSwgJWVzaQorCXN1YgkkMHhmZmZmLCAlZXNpCisJam56CUwoZXhpdCkKKworI2lmZGVmIFVTRV9BU19TVFJOQ01QCisJY21wbAkkMTYsICVlYnAKKwlsZWEJLTE2KCVlYnApLCAlZWJwCisJamJlCUwobW9yZThieXRlc2VxKQorI2VuZGlmCisJYWRkCSQxNiwgJWVjeAorCW1vdmRxYQkleG1tNCwgJXhtbTMKKworCWFkZAkkMTYsICVlZGkKKwlqZwlMKG5pYmJsZV9hc2hyXzMpCisKKwltb3ZkcWEJKCVlYXgsICVlY3gpLCAleG1tMQorCW1vdmRxYQkoJWVkeCwgJWVjeCksICV4bW0yCisJbW92ZHFhCSV4bW0yLCAleG1tNAorCisJcGFsaWducgkkMywgJXhtbTMsICV4bW0yCisKKwlwY21wZXFiCSV4bW0xLCAleG1tMAorCXBjbXBlcWIJJXhtbTIsICV4bW0xCisJcHN1YmIJJXhtbTAsICV4bW0xCisJcG1vdm1za2IgJXhtbTEsICVlc2kKKwlzdWIJJDB4ZmZmZiwgJWVzaQorCWpueglMKGV4aXQpCisKKyNpZmRlZiBVU0VfQVNfU1RSTkNNUAorCWNtcGwJJDE2LCAlZWJwCisJbGVhCS0xNiglZWJwKSwgJWVicAorCWpiZQlMKG1vcmU4Ynl0ZXNlcSkKKyNlbmRpZgorCWFkZAkkMTYsICVlY3gKKwltb3ZkcWEJJXhtbTQsICV4bW0zCisJam1wCUwobG9vcF9hc2hyXzMpCisKKwkucDJhbGlnbiA0CitMKG5pYmJsZV9hc2hyXzMpOgorCXBjbXBlcWIJJXhtbTMsICV4bW0wCisJcG1vdm1za2IgJXhtbTAsICVlc2kKKwl0ZXN0CSQweGZmZjgsICVlc2kKKwlqbnoJTChhc2hyXzNfZXhpdHRhaWwpCisKKyNpZmRlZiBVU0VfQVNfU1RSTkNNUAorCWNtcGwJJDEzLCAlZWJwCisJamJlCUwoYXNocl8zX2V4aXR0YWlsKQorI2VuZGlmCisJcHhvcgkleG1tMCwgJXhtbTAKKwlzdWIJJDB4MTAwMCwgJWVkaQorCWptcAlMKGdvYmJsZV9hc2hyXzMpCisKKwkucDJhbGlnbiA0CitMKGFzaHJfM19leGl0dGFpbCk6CisJbW92ZHFhCSglZWF4LCAlZWN4KSwgJXhtbTEKKwlwc3JsZHEJJDMsICV4bW0wCisJcHNybGRxCSQzLCAleG1tMworCWptcAlMKGFmdGVydGFpbCkKKworLyoKKyAqIFRoZSBmb2xsb3dpbmcgY2FzZXMgd2lsbCBiZSBoYW5kbGVkIGJ5IGFzaHJfNAorICogZWN4KG9mZnNldCBvZiBlc2kpICBlYXgob2Zmc2V0IG9mIGVkaSkgICByZWxhdGl2ZSBvZmZzZXQgICAJY29ycmVzcG9uZGluZyBjYXNlCisgKiAgICAgICAgbigxMn4xNSkgICAgICAgICAgICBuIC0xMiAgICAgICAgICAgIDMoMTUgKyhuLTEyKSAtIG4pICAgICAgICAgYXNocl80CisgKi8KKwkucDJhbGlnbiA0CitMKGFzaHJfNCk6CisJbW92CSQweGZmZmYsICVlc2kKKwlweG9yCSV4bW0wLCAleG1tMAorCW1vdmRxYQkoJWVkeCksICV4bW0yCisJbW92ZHFhCSglZWF4KSwgJXhtbTEKKwlwY21wZXFiCSV4bW0xLCAleG1tMAorCXBzbGxkcQkkMTIsICV4bW0yCisJcGNtcGVxYgkleG1tMSwgJXhtbTIKKwlwc3ViYgkleG1tMCwgJXhtbTIKKwlwbW92bXNrYiAleG1tMiwgJWVkaQorCXNocgklY2wsICVlc2kKKwlzaHIJJWNsLCAlZWRpCisJc3ViCSVlZGksICVlc2kKKwlsZWEJLTEyKCVlY3gpLCAlZWRpCisJam56CUwobGVzczMyYnl0ZXMpCisKKwlVUERBVEVfU1RSTkNNUF9DT1VOVEVSCisKKwltb3ZkcWEJKCVlZHgpLCAleG1tMworCXB4b3IJJXhtbTAsICV4bW0wCisJbW92CSQxNiwgJWVjeAorCW9yCSQ0LCAlZWJ4CisJbGVhCTQoJWVkeCksICVlZGkKKwlhbmQJJDB4ZmZmLCAlZWRpCisJc3ViCSQweDEwMDAsICVlZGkKKworCS5wMmFsaWduIDQKK0wobG9vcF9hc2hyXzQpOgorCWFkZAkkMTYsICVlZGkKKwlqZwlMKG5pYmJsZV9hc2hyXzQpCisKK0woZ29iYmxlX2FzaHJfNCk6CisJbW92ZHFhCSglZWF4LCAlZWN4KSwgJXhtbTEKKwltb3ZkcWEJKCVlZHgsICVlY3gpLCAleG1tMgorCW1vdmRxYQkleG1tMiwgJXhtbTQKKworCXBhbGlnbnIJJDQsICV4bW0zLCAleG1tMgorCisJcGNtcGVxYgkleG1tMSwgJXhtbTAKKwlwY21wZXFiCSV4bW0yLCAleG1tMQorCXBzdWJiCSV4bW0wLCAleG1tMQorCXBtb3Ztc2tiICV4bW0xLCAlZXNpCisJc3ViCSQweGZmZmYsICVlc2kKKwlqbnoJTChleGl0KQorCisjaWZkZWYgVVNFX0FTX1NUUk5DTVAKKwljbXBsCSQxNiwgJWVicAorCWxlYQktMTYoJWVicCksICVlYnAKKwlqYmUJTChtb3JlOGJ5dGVzZXEpCisjZW5kaWYKKworCWFkZAkkMTYsICVlY3gKKwltb3ZkcWEJJXhtbTQsICV4bW0zCisKKwlhZGQJJDE2LCAlZWRpCisJamcJTChuaWJibGVfYXNocl80KQorCisJbW92ZHFhCSglZWF4LCAlZWN4KSwgJXhtbTEKKwltb3ZkcWEJKCVlZHgsICVlY3gpLCAleG1tMgorCW1vdmRxYQkleG1tMiwgJXhtbTQKKworCXBhbGlnbnIJJDQsICV4bW0zLCAleG1tMgorCisJcGNtcGVxYgkleG1tMSwgJXhtbTAKKwlwY21wZXFiCSV4bW0yLCAleG1tMQorCXBzdWJiCSV4bW0wLCAleG1tMQorCXBtb3Ztc2tiICV4bW0xLCAlZXNpCisJc3ViCSQweGZmZmYsICVlc2kKKwlqbnoJTChleGl0KQorCisjaWZkZWYgVVNFX0FTX1NUUk5DTVAKKwljbXBsCSQxNiwgJWVicAorCWxlYQktMTYoJWVicCksICVlYnAKKwlqYmUJTChtb3JlOGJ5dGVzZXEpCisjZW5kaWYKKworCWFkZAkkMTYsICVlY3gKKwltb3ZkcWEJJXhtbTQsICV4bW0zCisJam1wCUwobG9vcF9hc2hyXzQpCisKKwkucDJhbGlnbiA0CitMKG5pYmJsZV9hc2hyXzQpOgorCXBjbXBlcWIJJXhtbTMsICV4bW0wCisJcG1vdm1za2IgJXhtbTAsICVlc2kKKwl0ZXN0CSQweGZmZjAsICVlc2kKKwlqbnoJTChhc2hyXzRfZXhpdHRhaWwpCisKKyNpZmRlZiBVU0VfQVNfU1RSTkNNUAorCWNtcGwJJDEyLCAlZWJwCisJamJlCUwoYXNocl80X2V4aXR0YWlsKQorI2VuZGlmCisKKwlweG9yCSV4bW0wLCAleG1tMAorCXN1YgkkMHgxMDAwLCAlZWRpCisJam1wCUwoZ29iYmxlX2FzaHJfNCkKKworCS5wMmFsaWduIDQKK0woYXNocl80X2V4aXR0YWlsKToKKwltb3ZkcWEJKCVlYXgsICVlY3gpLCAleG1tMQorCXBzcmxkcQkkNCwgJXhtbTAKKwlwc3JsZHEJJDQsICV4bW0zCisJam1wCUwoYWZ0ZXJ0YWlsKQorCisvKgorICogVGhlIGZvbGxvd2luZyBjYXNlcyB3aWxsIGJlIGhhbmRsZWQgYnkgYXNocl81CisgKiBlY3gob2Zmc2V0IG9mIGVzaSkgIGVheChvZmZzZXQgb2YgZWRpKSAgIHJlbGF0aXZlIG9mZnNldCAgIAljb3JyZXNwb25kaW5nIGNhc2UKKyAqICAgICAgICBuKDExfjE1KSAgICAgICAgICAgIG4gLTExICAgICAgICAgICAgNCgxNSArKG4tMTEpIC0gbikgICAgICAgICBhc2hyXzUKKyAqLworCS5wMmFsaWduIDQKK0woYXNocl81KToKKwltb3YJJDB4ZmZmZiwgJWVzaQorCXB4b3IJJXhtbTAsICV4bW0wCisJbW92ZHFhCSglZWR4KSwgJXhtbTIKKwltb3ZkcWEJKCVlYXgpLCAleG1tMQorCXBjbXBlcWIJJXhtbTEsICV4bW0wCisJcHNsbGRxCSQxMSwgJXhtbTIKKwlwY21wZXFiCSV4bW0xLCAleG1tMgorCXBzdWJiCSV4bW0wLCAleG1tMgorCXBtb3Ztc2tiICV4bW0yLCAlZWRpCisJc2hyCSVjbCwgJWVzaQorCXNocgklY2wsICVlZGkKKwlzdWIJJWVkaSwgJWVzaQorCWxlYQktMTEoJWVjeCksICVlZGkKKwlqbnoJTChsZXNzMzJieXRlcykKKworCVVQREFURV9TVFJOQ01QX0NPVU5URVIKKworCW1vdmRxYQkoJWVkeCksICV4bW0zCisJcHhvcgkleG1tMCwgJXhtbTAKKwltb3YJJDE2LCAlZWN4CisJb3IJJDUsICVlYngKKwlsZWEJNSglZWR4KSwgJWVkaQorCWFuZAkkMHhmZmYsICVlZGkKKwlzdWIJJDB4MTAwMCwgJWVkaQorCisJLnAyYWxpZ24gNAorTChsb29wX2FzaHJfNSk6CisJYWRkCSQxNiwgJWVkaQorCWpnCUwobmliYmxlX2FzaHJfNSkKKworTChnb2JibGVfYXNocl81KToKKwltb3ZkcWEJKCVlYXgsICVlY3gpLCAleG1tMQorCW1vdmRxYQkoJWVkeCwgJWVjeCksICV4bW0yCisJbW92ZHFhCSV4bW0yLCAleG1tNAorCisJcGFsaWducgkkNSwgJXhtbTMsICV4bW0yCisKKwlwY21wZXFiCSV4bW0xLCAleG1tMAorCXBjbXBlcWIJJXhtbTIsICV4bW0xCisJcHN1YmIJJXhtbTAsICV4bW0xCisJcG1vdm1za2IgJXhtbTEsICVlc2kKKwlzdWIJJDB4ZmZmZiwgJWVzaQorCWpueglMKGV4aXQpCisKKyNpZmRlZiBVU0VfQVNfU1RSTkNNUAorCWNtcGwJJDE2LCAlZWJwCisJbGVhCS0xNiglZWJwKSwgJWVicAorCWpiZQlMKG1vcmU4Ynl0ZXNlcSkKKyNlbmRpZgorCWFkZAkkMTYsICVlY3gKKwltb3ZkcWEJJXhtbTQsICV4bW0zCisKKwlhZGQJJDE2LCAlZWRpCisJamcJTChuaWJibGVfYXNocl81KQorCisJbW92ZHFhCSglZWF4LCAlZWN4KSwgJXhtbTEKKwltb3ZkcWEJKCVlZHgsICVlY3gpLCAleG1tMgorCW1vdmRxYQkleG1tMiwgJXhtbTQKKworCXBhbGlnbnIJJDUsICV4bW0zLCAleG1tMgorCisJcGNtcGVxYgkleG1tMSwgJXhtbTAKKwlwY21wZXFiCSV4bW0yLCAleG1tMQorCXBzdWJiCSV4bW0wLCAleG1tMQorCXBtb3Ztc2tiICV4bW0xLCAlZXNpCisJc3ViCSQweGZmZmYsICVlc2kKKwlqbnoJTChleGl0KQorCisjaWZkZWYgVVNFX0FTX1NUUk5DTVAKKwljbXBsCSQxNiwgJWVicAorCWxlYQktMTYoJWVicCksICVlYnAKKwlqYmUJTChtb3JlOGJ5dGVzZXEpCisjZW5kaWYKKwlhZGQJJDE2LCAlZWN4CisJbW92ZHFhCSV4bW00LCAleG1tMworCWptcAlMKGxvb3BfYXNocl81KQorCisJLnAyYWxpZ24gNAorTChuaWJibGVfYXNocl81KToKKwlwY21wZXFiCSV4bW0zLCAleG1tMAorCXBtb3Ztc2tiICV4bW0wLCAlZXNpCisJdGVzdAkkMHhmZmUwLCAlZXNpCisJam56CUwoYXNocl81X2V4aXR0YWlsKQorCisjaWZkZWYgVVNFX0FTX1NUUk5DTVAKKwljbXBsCSQxMSwgJWVicAorCWpiZQlMKGFzaHJfNV9leGl0dGFpbCkKKyNlbmRpZgorCXB4b3IJJXhtbTAsICV4bW0wCisJc3ViCSQweDEwMDAsICVlZGkKKwlqbXAJTChnb2JibGVfYXNocl81KQorCisJLnAyYWxpZ24gNAorTChhc2hyXzVfZXhpdHRhaWwpOgorCW1vdmRxYQkoJWVheCwgJWVjeCksICV4bW0xCisJcHNybGRxCSQ1LCAleG1tMAorCXBzcmxkcQkkNSwgJXhtbTMKKwlqbXAJTChhZnRlcnRhaWwpCisKKy8qCisgKiBUaGUgZm9sbG93aW5nIGNhc2VzIHdpbGwgYmUgaGFuZGxlZCBieSBhc2hyXzYKKyAqIGVjeChvZmZzZXQgb2YgZXNpKSAgZWF4KG9mZnNldCBvZiBlZGkpICAgcmVsYXRpdmUgb2Zmc2V0ICAgCWNvcnJlc3BvbmRpbmcgY2FzZQorICogICAgICAgIG4oMTB+MTUpICAgICAgICAgICAgbiAtMTAgICAgICAgICAgICA1KDE1ICsobi0xMCkgLSBuKSAgICAgICAgIGFzaHJfNgorICovCisKKwkucDJhbGlnbiA0CitMKGFzaHJfNik6CisJbW92CSQweGZmZmYsICVlc2kKKwlweG9yCSV4bW0wLCAleG1tMAorCW1vdmRxYQkoJWVkeCksICV4bW0yCisJbW92ZHFhCSglZWF4KSwgJXhtbTEKKwlwY21wZXFiCSV4bW0xLCAleG1tMAorCXBzbGxkcQkkMTAsICV4bW0yCisJcGNtcGVxYgkleG1tMSwgJXhtbTIKKwlwc3ViYgkleG1tMCwgJXhtbTIKKwlwbW92bXNrYiAleG1tMiwgJWVkaQorCXNocgklY2wsICVlc2kKKwlzaHIJJWNsLCAlZWRpCisJc3ViCSVlZGksICVlc2kKKwlsZWEJLTEwKCVlY3gpLCAlZWRpCisJam56CUwobGVzczMyYnl0ZXMpCisKKwlVUERBVEVfU1RSTkNNUF9DT1VOVEVSCisKKwltb3ZkcWEJKCVlZHgpLCAleG1tMworCXB4b3IJJXhtbTAsICV4bW0wCisJbW92CSQxNiwgJWVjeAorCW9yCSQ2LCAlZWJ4CisJbGVhCTYoJWVkeCksICVlZGkKKwlhbmQJJDB4ZmZmLCAlZWRpCisJc3ViCSQweDEwMDAsICVlZGkKKworCS5wMmFsaWduIDQKK0wobG9vcF9hc2hyXzYpOgorCWFkZAkkMTYsICVlZGkKKwlqZwlMKG5pYmJsZV9hc2hyXzYpCisKK0woZ29iYmxlX2FzaHJfNik6CisJbW92ZHFhCSglZWF4LCAlZWN4KSwgJXhtbTEKKwltb3ZkcWEJKCVlZHgsICVlY3gpLCAleG1tMgorCW1vdmRxYQkleG1tMiwgJXhtbTQKKworCXBhbGlnbnIJJDYsICV4bW0zLCAleG1tMgorCisJcGNtcGVxYgkleG1tMSwgJXhtbTAKKwlwY21wZXFiCSV4bW0yLCAleG1tMQorCXBzdWJiCSV4bW0wLCAleG1tMQorCXBtb3Ztc2tiICV4bW0xLCAlZXNpCisJc3ViCSQweGZmZmYsICVlc2kKKwlqbnoJTChleGl0KQorCisjaWZkZWYgVVNFX0FTX1NUUk5DTVAKKwljbXBsCSQxNiwgJWVicAorCWxlYQktMTYoJWVicCksICVlYnAKKwlqYmUJTChtb3JlOGJ5dGVzZXEpCisjZW5kaWYKKworCWFkZAkkMTYsICVlY3gKKwltb3ZkcWEJJXhtbTQsICV4bW0zCisKKwlhZGQJJDE2LCAlZWRpCisJamcJTChuaWJibGVfYXNocl82KQorCisJbW92ZHFhCSglZWF4LCAlZWN4KSwgJXhtbTEKKwltb3ZkcWEJKCVlZHgsICVlY3gpLCAleG1tMgorCW1vdmRxYQkleG1tMiwgJXhtbTQKKworCXBhbGlnbnIJJDYsICV4bW0zLCAleG1tMgorCisJcGNtcGVxYgkleG1tMSwgJXhtbTAKKwlwY21wZXFiCSV4bW0yLCAleG1tMQorCXBzdWJiCSV4bW0wLCAleG1tMQorCXBtb3Ztc2tiICV4bW0xLCAlZXNpCisJc3ViCSQweGZmZmYsICVlc2kKKwlqbnoJTChleGl0KQorI2lmZGVmIFVTRV9BU19TVFJOQ01QCisJY21wbAkkMTYsICVlYnAKKwlsZWEJLTE2KCVlYnApLCAlZWJwCisJamJlCUwobW9yZThieXRlc2VxKQorI2VuZGlmCisKKwlhZGQJJDE2LCAlZWN4CisJbW92ZHFhCSV4bW00LCAleG1tMworCWptcAlMKGxvb3BfYXNocl82KQorCisJLnAyYWxpZ24gNAorTChuaWJibGVfYXNocl82KToKKwlwY21wZXFiCSV4bW0zLCAleG1tMAorCXBtb3Ztc2tiICV4bW0wLCAlZXNpCisJdGVzdAkkMHhmZmMwLCAlZXNpCisJam56CUwoYXNocl82X2V4aXR0YWlsKQorCisjaWZkZWYgVVNFX0FTX1NUUk5DTVAKKwljbXBsCSQxMCwgJWVicAorCWpiZQlMKGFzaHJfNl9leGl0dGFpbCkKKyNlbmRpZgorCXB4b3IJJXhtbTAsICV4bW0wCisJc3ViCSQweDEwMDAsICVlZGkKKwlqbXAJTChnb2JibGVfYXNocl82KQorCisJLnAyYWxpZ24gNAorTChhc2hyXzZfZXhpdHRhaWwpOgorCW1vdmRxYQkoJWVheCwgJWVjeCksICV4bW0xCisJcHNybGRxCSQ2LCAleG1tMAorCXBzcmxkcQkkNiwgJXhtbTMKKwlqbXAJTChhZnRlcnRhaWwpCisKKy8qCisgKiBUaGUgZm9sbG93aW5nIGNhc2VzIHdpbGwgYmUgaGFuZGxlZCBieSBhc2hyXzcKKyAqIGVjeChvZmZzZXQgb2YgZXNpKSAgZWF4KG9mZnNldCBvZiBlZGkpICAgcmVsYXRpdmUgb2Zmc2V0ICAgCWNvcnJlc3BvbmRpbmcgY2FzZQorICogICAgICAgIG4oOX4xNSkgICAgICAgICAgICBuIC0gOSAgICAgICAgICAgIDYoMTUgKyhuLTkpIC0gbikgICAgICAgICBhc2hyXzcKKyAqLworCisJLnAyYWxpZ24gNAorTChhc2hyXzcpOgorCW1vdgkkMHhmZmZmLCAlZXNpCisJcHhvcgkleG1tMCwgJXhtbTAKKwltb3ZkcWEJKCVlZHgpLCAleG1tMgorCW1vdmRxYQkoJWVheCksICV4bW0xCisJcGNtcGVxYgkleG1tMSwgJXhtbTAKKwlwc2xsZHEJJDksICV4bW0yCisJcGNtcGVxYgkleG1tMSwgJXhtbTIKKwlwc3ViYgkleG1tMCwgJXhtbTIKKwlwbW92bXNrYiAleG1tMiwgJWVkaQorCXNocgklY2wsICVlc2kKKwlzaHIJJWNsLCAlZWRpCisJc3ViCSVlZGksICVlc2kKKwlsZWEJLTkoJWVjeCksICVlZGkKKwlqbnoJTChsZXNzMzJieXRlcykKKworCVVQREFURV9TVFJOQ01QX0NPVU5URVIKKworCW1vdmRxYQkoJWVkeCksICV4bW0zCisJcHhvcgkleG1tMCwgJXhtbTAKKwltb3YJJDE2LCAlZWN4CisJb3IJJDcsICVlYngKKwlsZWEJOCglZWR4KSwgJWVkaQorCWFuZAkkMHhmZmYsICVlZGkKKwlzdWIJJDB4MTAwMCwgJWVkaQorCisJLnAyYWxpZ24gNAorTChsb29wX2FzaHJfNyk6CisJYWRkCSQxNiwgJWVkaQorCWpnCUwobmliYmxlX2FzaHJfNykKKworTChnb2JibGVfYXNocl83KToKKwltb3ZkcWEJKCVlYXgsICVlY3gpLCAleG1tMQorCW1vdmRxYQkoJWVkeCwgJWVjeCksICV4bW0yCisJbW92ZHFhCSV4bW0yLCAleG1tNAorCisJcGFsaWducgkkNywgJXhtbTMsICV4bW0yCisKKwlwY21wZXFiCSV4bW0xLCAleG1tMAorCXBjbXBlcWIJJXhtbTIsICV4bW0xCisJcHN1YmIJJXhtbTAsICV4bW0xCisJcG1vdm1za2IgJXhtbTEsICVlc2kKKwlzdWIJJDB4ZmZmZiwgJWVzaQorCWpueglMKGV4aXQpCisKKyNpZmRlZiBVU0VfQVNfU1RSTkNNUAorCWNtcGwJJDE2LCAlZWJwCisJbGVhCS0xNiglZWJwKSwgJWVicAorCWpiZQlMKG1vcmU4Ynl0ZXNlcSkKKyNlbmRpZgorCisJYWRkCSQxNiwgJWVjeAorCW1vdmRxYQkleG1tNCwgJXhtbTMKKworCWFkZAkkMTYsICVlZGkKKwlqZwlMKG5pYmJsZV9hc2hyXzcpCisKKwltb3ZkcWEJKCVlYXgsICVlY3gpLCAleG1tMQorCW1vdmRxYQkoJWVkeCwgJWVjeCksICV4bW0yCisJbW92ZHFhCSV4bW0yLCAleG1tNAorCisJcGFsaWducgkkNywgJXhtbTMsICV4bW0yCisKKwlwY21wZXFiCSV4bW0xLCAleG1tMAorCXBjbXBlcWIJJXhtbTIsICV4bW0xCisJcHN1YmIJJXhtbTAsICV4bW0xCisJcG1vdm1za2IgJXhtbTEsICVlc2kKKwlzdWIJJDB4ZmZmZiwgJWVzaQorCWpueglMKGV4aXQpCisKKyNpZmRlZiBVU0VfQVNfU1RSTkNNUAorCWNtcGwJJDE2LCAlZWJwCisJbGVhCS0xNiglZWJwKSwgJWVicAorCWpiZQlMKG1vcmU4Ynl0ZXNlcSkKKyNlbmRpZgorCisJYWRkCSQxNiwgJWVjeAorCW1vdmRxYQkleG1tNCwgJXhtbTMKKwlqbXAJTChsb29wX2FzaHJfNykKKworCS5wMmFsaWduIDQKK0wobmliYmxlX2FzaHJfNyk6CisJcGNtcGVxYgkleG1tMywgJXhtbTAKKwlwbW92bXNrYiAleG1tMCwgJWVzaQorCXRlc3QJJDB4ZmY4MCwgJWVzaQorCWpueglMKGFzaHJfN19leGl0dGFpbCkKKworI2lmZGVmIFVTRV9BU19TVFJOQ01QCisJY21wbAkkOSwgJWVicAorCWpiZQlMKGFzaHJfN19leGl0dGFpbCkKKyNlbmRpZgorCXB4b3IJJXhtbTAsICV4bW0wCisJcHhvcgkleG1tMCwgJXhtbTAKKwlzdWIJJDB4MTAwMCwgJWVkaQorCWptcAlMKGdvYmJsZV9hc2hyXzcpCisKKwkucDJhbGlnbiA0CitMKGFzaHJfN19leGl0dGFpbCk6CisJbW92ZHFhCSglZWF4LCAlZWN4KSwgJXhtbTEKKwlwc3JsZHEJJDcsICV4bW0wCisJcHNybGRxCSQ3LCAleG1tMworCWptcAlMKGFmdGVydGFpbCkKKworLyoKKyAqIFRoZSBmb2xsb3dpbmcgY2FzZXMgd2lsbCBiZSBoYW5kbGVkIGJ5IGFzaHJfOAorICogZWN4KG9mZnNldCBvZiBlc2kpICBlYXgob2Zmc2V0IG9mIGVkaSkgICByZWxhdGl2ZSBvZmZzZXQgICAJY29ycmVzcG9uZGluZyBjYXNlCisgKiAgICAgICAgbig4fjE1KSAgICAgICAgICAgIG4gLSA4ICAgICAgICAgICAgNygxNSArKG4tOCkgLSBuKSAgICAgICAgIGFzaHJfOAorICovCisJLnAyYWxpZ24gNAorTChhc2hyXzgpOgorCW1vdgkkMHhmZmZmLCAlZXNpCisJcHhvcgkleG1tMCwgJXhtbTAKKwltb3ZkcWEJKCVlZHgpLCAleG1tMgorCW1vdmRxYQkoJWVheCksICV4bW0xCisJcGNtcGVxYgkleG1tMSwgJXhtbTAKKwlwc2xsZHEJJDgsICV4bW0yCisJcGNtcGVxYgkleG1tMSwgJXhtbTIKKwlwc3ViYgkleG1tMCwgJXhtbTIKKwlwbW92bXNrYiAleG1tMiwgJWVkaQorCXNocgklY2wsICVlc2kKKwlzaHIJJWNsLCAlZWRpCisJc3ViCSVlZGksICVlc2kKKwlsZWEJLTgoJWVjeCksICVlZGkKKwlqbnoJTChsZXNzMzJieXRlcykKKworCVVQREFURV9TVFJOQ01QX0NPVU5URVIKKworCW1vdmRxYQkoJWVkeCksICV4bW0zCisJcHhvcgkleG1tMCwgJXhtbTAKKwltb3YJJDE2LCAlZWN4CisJb3IJJDgsICVlYngKKwlsZWEJOCglZWR4KSwgJWVkaQorCWFuZAkkMHhmZmYsICVlZGkKKwlzdWIJJDB4MTAwMCwgJWVkaQorCisJLnAyYWxpZ24gNAorTChsb29wX2FzaHJfOCk6CisJYWRkCSQxNiwgJWVkaQorCWpnCUwobmliYmxlX2FzaHJfOCkKKworTChnb2JibGVfYXNocl84KToKKwltb3ZkcWEJKCVlYXgsICVlY3gpLCAleG1tMQorCW1vdmRxYQkoJWVkeCwgJWVjeCksICV4bW0yCisJbW92ZHFhCSV4bW0yLCAleG1tNAorCisJcGFsaWducgkkOCwgJXhtbTMsICV4bW0yCisKKwlwY21wZXFiCSV4bW0xLCAleG1tMAorCXBjbXBlcWIJJXhtbTIsICV4bW0xCisJcHN1YmIJJXhtbTAsICV4bW0xCisJcG1vdm1za2IgJXhtbTEsICVlc2kKKwlzdWIJJDB4ZmZmZiwgJWVzaQorCWpueglMKGV4aXQpCisKKyNpZmRlZiBVU0VfQVNfU1RSTkNNUAorCWNtcGwJJDE2LCAlZWJwCisJbGVhCS0xNiglZWJwKSwgJWVicAorCWpiZQlMKG1vcmU4Ynl0ZXNlcSkKKyNlbmRpZgorCWFkZAkkMTYsICVlY3gKKwltb3ZkcWEJJXhtbTQsICV4bW0zCisKKwlhZGQJJDE2LCAlZWRpCisJamcJTChuaWJibGVfYXNocl84KQorCisJbW92ZHFhCSglZWF4LCAlZWN4KSwgJXhtbTEKKwltb3ZkcWEJKCVlZHgsICVlY3gpLCAleG1tMgorCW1vdmRxYQkleG1tMiwgJXhtbTQKKworCXBhbGlnbnIJJDgsICV4bW0zLCAleG1tMgorCisJcGNtcGVxYgkleG1tMSwgJXhtbTAKKwlwY21wZXFiCSV4bW0yLCAleG1tMQorCXBzdWJiCSV4bW0wLCAleG1tMQorCXBtb3Ztc2tiICV4bW0xLCAlZXNpCisJc3ViCSQweGZmZmYsICVlc2kKKwlqbnoJTChleGl0KQorCisjaWZkZWYgVVNFX0FTX1NUUk5DTVAKKwljbXBsCSQxNiwgJWVicAorCWxlYQktMTYoJWVicCksICVlYnAKKwlqYmUJTChtb3JlOGJ5dGVzZXEpCisjZW5kaWYKKwlhZGQJJDE2LCAlZWN4CisJbW92ZHFhCSV4bW00LCAleG1tMworCWptcAlMKGxvb3BfYXNocl84KQorCisJLnAyYWxpZ24gNAorTChuaWJibGVfYXNocl84KToKKwlwY21wZXFiCSV4bW0zLCAleG1tMAorCXBtb3Ztc2tiICV4bW0wLCAlZXNpCisJdGVzdAkkMHhmZjAwLCAlZXNpCisJam56CUwoYXNocl84X2V4aXR0YWlsKQorCisjaWZkZWYgVVNFX0FTX1NUUk5DTVAKKwljbXBsCSQ4LCAlZWJwCisJamJlCUwoYXNocl84X2V4aXR0YWlsKQorI2VuZGlmCisJcHhvcgkleG1tMCwgJXhtbTAKKwlweG9yCSV4bW0wLCAleG1tMAorCXN1YgkkMHgxMDAwLCAlZWRpCisJam1wCUwoZ29iYmxlX2FzaHJfOCkKKworCS5wMmFsaWduIDQKK0woYXNocl84X2V4aXR0YWlsKToKKwltb3ZkcWEJKCVlYXgsICVlY3gpLCAleG1tMQorCXBzcmxkcQkkOCwgJXhtbTAKKwlwc3JsZHEJJDgsICV4bW0zCisJam1wCUwoYWZ0ZXJ0YWlsKQorCisvKgorICogVGhlIGZvbGxvd2luZyBjYXNlcyB3aWxsIGJlIGhhbmRsZWQgYnkgYXNocl85CisgKiBlY3gob2Zmc2V0IG9mIGVzaSkgIGVheChvZmZzZXQgb2YgZWRpKSAgIHJlbGF0aXZlIG9mZnNldCAgIAljb3JyZXNwb25kaW5nIGNhc2UKKyAqICAgICAgICBuKDd+MTUpICAgICAgICAgICAgbiAtIDcgICAgICAgICAgICA4KDE1ICsobi03KSAtIG4pICAgICAgICAgYXNocl85CisgKi8KKwkucDJhbGlnbiA0CitMKGFzaHJfOSk6CisJbW92CSQweGZmZmYsICVlc2kKKwlweG9yCSV4bW0wLCAleG1tMAorCW1vdmRxYQkoJWVkeCksICV4bW0yCisJbW92ZHFhCSglZWF4KSwgJXhtbTEKKwlwY21wZXFiCSV4bW0xLCAleG1tMAorCXBzbGxkcQkkNywgJXhtbTIKKwlwY21wZXFiCSV4bW0xLCAleG1tMgorCXBzdWJiCSV4bW0wLCAleG1tMgorCXBtb3Ztc2tiICV4bW0yLCAlZWRpCisJc2hyCSVjbCwgJWVzaQorCXNocgklY2wsICVlZGkKKwlzdWIJJWVkaSwgJWVzaQorCWxlYQktNyglZWN4KSwgJWVkaQorCWpueglMKGxlc3MzMmJ5dGVzKQorCisJVVBEQVRFX1NUUk5DTVBfQ09VTlRFUgorCisJbW92ZHFhCSglZWR4KSwgJXhtbTMKKwlweG9yCSV4bW0wLCAleG1tMAorCW1vdgkkMTYsICVlY3gKKwlvcgkkOSwgJWVieAorCWxlYQk5KCVlZHgpLCAlZWRpCisJYW5kCSQweGZmZiwgJWVkaQorCXN1YgkkMHgxMDAwLCAlZWRpCisKKwkucDJhbGlnbiA0CitMKGxvb3BfYXNocl85KToKKwlhZGQJJDE2LCAlZWRpCisJamcJTChuaWJibGVfYXNocl85KQorCitMKGdvYmJsZV9hc2hyXzkpOgorCW1vdmRxYQkoJWVheCwgJWVjeCksICV4bW0xCisJbW92ZHFhCSglZWR4LCAlZWN4KSwgJXhtbTIKKwltb3ZkcWEJJXhtbTIsICV4bW00CisKKwlwYWxpZ25yCSQ5LCAleG1tMywgJXhtbTIKKworCXBjbXBlcWIJJXhtbTEsICV4bW0wCisJcGNtcGVxYgkleG1tMiwgJXhtbTEKKwlwc3ViYgkleG1tMCwgJXhtbTEKKwlwbW92bXNrYiAleG1tMSwgJWVzaQorCXN1YgkkMHhmZmZmLCAlZXNpCisJam56CUwoZXhpdCkKKworI2lmZGVmIFVTRV9BU19TVFJOQ01QCisJY21wbAkkMTYsICVlYnAKKwlsZWEJLTE2KCVlYnApLCAlZWJwCisJamJlCUwobW9yZThieXRlc2VxKQorI2VuZGlmCisJYWRkCSQxNiwgJWVjeAorCW1vdmRxYQkleG1tNCwgJXhtbTMKKworCWFkZAkkMTYsICVlZGkKKwlqZwlMKG5pYmJsZV9hc2hyXzkpCisKKwltb3ZkcWEJKCVlYXgsICVlY3gpLCAleG1tMQorCW1vdmRxYQkoJWVkeCwgJWVjeCksICV4bW0yCisJbW92ZHFhCSV4bW0yLCAleG1tNAorCisJcGFsaWducgkkOSwgJXhtbTMsICV4bW0yCisKKwlwY21wZXFiCSV4bW0xLCAleG1tMAorCXBjbXBlcWIJJXhtbTIsICV4bW0xCisJcHN1YmIJJXhtbTAsICV4bW0xCisJcG1vdm1za2IgJXhtbTEsICVlc2kKKwlzdWIJJDB4ZmZmZiwgJWVzaQorCWpueglMKGV4aXQpCisKKyNpZmRlZiBVU0VfQVNfU1RSTkNNUAorCWNtcGwJJDE2LCAlZWJwCisJbGVhCS0xNiglZWJwKSwgJWVicAorCWpiZQlMKG1vcmU4Ynl0ZXNlcSkKKyNlbmRpZgorCWFkZAkkMTYsICVlY3gKKwltb3ZkcWEJJXhtbTQsICV4bW0zCisJam1wCUwobG9vcF9hc2hyXzkpCisKKwkucDJhbGlnbiA0CitMKG5pYmJsZV9hc2hyXzkpOgorCXBjbXBlcWIJJXhtbTMsICV4bW0wCisJcG1vdm1za2IgJXhtbTAsICVlc2kKKwl0ZXN0CSQweGZlMDAsICVlc2kKKwlqbnoJTChhc2hyXzlfZXhpdHRhaWwpCisKKyNpZmRlZiBVU0VfQVNfU1RSTkNNUAorCWNtcGwJJDcsICVlYnAKKwlqYmUJTChhc2hyXzlfZXhpdHRhaWwpCisjZW5kaWYKKwlweG9yCSV4bW0wLCAleG1tMAorCXN1YgkkMHgxMDAwLCAlZWRpCisJam1wCUwoZ29iYmxlX2FzaHJfOSkKKworCS5wMmFsaWduIDQKK0woYXNocl85X2V4aXR0YWlsKToKKwltb3ZkcWEJKCVlYXgsICVlY3gpLCAleG1tMQorCXBzcmxkcQkkOSwgJXhtbTAKKwlwc3JsZHEJJDksICV4bW0zCisJam1wCUwoYWZ0ZXJ0YWlsKQorCisvKgorICogVGhlIGZvbGxvd2luZyBjYXNlcyB3aWxsIGJlIGhhbmRsZWQgYnkgYXNocl8xMAorICogZWN4KG9mZnNldCBvZiBlc2kpICBlYXgob2Zmc2V0IG9mIGVkaSkgICByZWxhdGl2ZSBvZmZzZXQgICAJY29ycmVzcG9uZGluZyBjYXNlCisgKiAgICAgICAgbig2fjE1KSAgICAgICAgICAgIG4gLSA2ICAgICAgICAgICAgOSgxNSArKG4tNikgLSBuKSAgICAgICAgIGFzaHJfMTAKKyAqLworCS5wMmFsaWduIDQKK0woYXNocl8xMCk6CisJbW92CSQweGZmZmYsICVlc2kKKwlweG9yCSV4bW0wLCAleG1tMAorCW1vdmRxYQkoJWVkeCksICV4bW0yCisJbW92ZHFhCSglZWF4KSwgJXhtbTEKKwlwY21wZXFiCSV4bW0xLCAleG1tMAorCXBzbGxkcQkkNiwgJXhtbTIKKwlwY21wZXFiCSV4bW0xLCAleG1tMgorCXBzdWJiCSV4bW0wLCAleG1tMgorCXBtb3Ztc2tiICV4bW0yLCAlZWRpCisJc2hyCSVjbCwgJWVzaQorCXNocgklY2wsICVlZGkKKwlzdWIJJWVkaSwgJWVzaQorCWxlYQktNiglZWN4KSwgJWVkaQorCWpueglMKGxlc3MzMmJ5dGVzKQorCisJVVBEQVRFX1NUUk5DTVBfQ09VTlRFUgorCisJbW92ZHFhCSglZWR4KSwgJXhtbTMKKwlweG9yCSV4bW0wLCAleG1tMAorCW1vdgkkMTYsICVlY3gKKwlvcgkkMTAsICVlYngKKwlsZWEJMTAoJWVkeCksICVlZGkKKwlhbmQJJDB4ZmZmLCAlZWRpCisJc3ViCSQweDEwMDAsICVlZGkKKworCS5wMmFsaWduIDQKK0wobG9vcF9hc2hyXzEwKToKKwlhZGQJJDE2LCAlZWRpCisJamcJTChuaWJibGVfYXNocl8xMCkKKworTChnb2JibGVfYXNocl8xMCk6CisJbW92ZHFhCSglZWF4LCAlZWN4KSwgJXhtbTEKKwltb3ZkcWEJKCVlZHgsICVlY3gpLCAleG1tMgorCW1vdmRxYQkleG1tMiwgJXhtbTQKKworCXBhbGlnbnIJJDEwLCAleG1tMywgJXhtbTIKKworCXBjbXBlcWIJJXhtbTEsICV4bW0wCisJcGNtcGVxYgkleG1tMiwgJXhtbTEKKwlwc3ViYgkleG1tMCwgJXhtbTEKKwlwbW92bXNrYiAleG1tMSwgJWVzaQorCXN1YgkkMHhmZmZmLCAlZXNpCisJam56CUwoZXhpdCkKKworI2lmZGVmIFVTRV9BU19TVFJOQ01QCisJY21wbAkkMTYsICVlYnAKKwlsZWEJLTE2KCVlYnApLCAlZWJwCisJamJlCUwobW9yZThieXRlc2VxKQorI2VuZGlmCisJYWRkCSQxNiwgJWVjeAorCW1vdmRxYQkleG1tNCwgJXhtbTMKKworCWFkZAkkMTYsICVlZGkKKwlqZwlMKG5pYmJsZV9hc2hyXzEwKQorCisJbW92ZHFhCSglZWF4LCAlZWN4KSwgJXhtbTEKKwltb3ZkcWEJKCVlZHgsICVlY3gpLCAleG1tMgorCW1vdmRxYQkleG1tMiwgJXhtbTQKKworCXBhbGlnbnIJJDEwLCAleG1tMywgJXhtbTIKKworCXBjbXBlcWIJJXhtbTEsICV4bW0wCisJcGNtcGVxYgkleG1tMiwgJXhtbTEKKwlwc3ViYgkleG1tMCwgJXhtbTEKKwlwbW92bXNrYiAleG1tMSwgJWVzaQorCXN1YgkkMHhmZmZmLCAlZXNpCisJam56CUwoZXhpdCkKKworI2lmZGVmIFVTRV9BU19TVFJOQ01QCisJY21wbAkkMTYsICVlYnAKKwlsZWEJLTE2KCVlYnApLCAlZWJwCisJamJlCUwobW9yZThieXRlc2VxKQorI2VuZGlmCisJYWRkCSQxNiwgJWVjeAorCW1vdmRxYQkleG1tNCwgJXhtbTMKKwlqbXAJTChsb29wX2FzaHJfMTApCisKKwkucDJhbGlnbiA0CitMKG5pYmJsZV9hc2hyXzEwKToKKwlwY21wZXFiCSV4bW0zLCAleG1tMAorCXBtb3Ztc2tiICV4bW0wLCAlZXNpCisJdGVzdAkkMHhmYzAwLCAlZXNpCisJam56CUwoYXNocl8xMF9leGl0dGFpbCkKKworI2lmZGVmIFVTRV9BU19TVFJOQ01QCisJY21wbAkkNiwgJWVicAorCWpiZQlMKGFzaHJfMTBfZXhpdHRhaWwpCisjZW5kaWYKKwlweG9yCSV4bW0wLCAleG1tMAorCXN1YgkkMHgxMDAwLCAlZWRpCisJam1wCUwoZ29iYmxlX2FzaHJfMTApCisKKwkucDJhbGlnbiA0CitMKGFzaHJfMTBfZXhpdHRhaWwpOgorCW1vdmRxYQkoJWVheCwgJWVjeCksICV4bW0xCisJcHNybGRxCSQxMCwgJXhtbTAKKwlwc3JsZHEJJDEwLCAleG1tMworCWptcAlMKGFmdGVydGFpbCkKKworLyoKKyAqIFRoZSBmb2xsb3dpbmcgY2FzZXMgd2lsbCBiZSBoYW5kbGVkIGJ5IGFzaHJfMTEKKyAqIGVjeChvZmZzZXQgb2YgZXNpKSAgZWF4KG9mZnNldCBvZiBlZGkpICAgcmVsYXRpdmUgb2Zmc2V0ICAgCWNvcnJlc3BvbmRpbmcgY2FzZQorICogICAgICAgIG4oNX4xNSkgICAgICAgICAgICBuIC0gNSAgICAgICAgICAgIDEwKDE1ICsobi01KSAtIG4pICAgICAgICAgYXNocl8xMQorICovCisJLnAyYWxpZ24gNAorTChhc2hyXzExKToKKwltb3YJJDB4ZmZmZiwgJWVzaQorCXB4b3IJJXhtbTAsICV4bW0wCisJbW92ZHFhCSglZWR4KSwgJXhtbTIKKwltb3ZkcWEJKCVlYXgpLCAleG1tMQorCXBjbXBlcWIJJXhtbTEsICV4bW0wCisJcHNsbGRxCSQ1LCAleG1tMgorCXBjbXBlcWIJJXhtbTEsICV4bW0yCisJcHN1YmIJJXhtbTAsICV4bW0yCisJcG1vdm1za2IgJXhtbTIsICVlZGkKKwlzaHIJJWNsLCAlZXNpCisJc2hyCSVjbCwgJWVkaQorCXN1YgklZWRpLCAlZXNpCisJbGVhCS01KCVlY3gpLCAlZWRpCisJam56CUwobGVzczMyYnl0ZXMpCisKKwlVUERBVEVfU1RSTkNNUF9DT1VOVEVSCisKKwltb3ZkcWEJKCVlZHgpLCAleG1tMworCXB4b3IJJXhtbTAsICV4bW0wCisJbW92CSQxNiwgJWVjeAorCW9yCSQxMSwgJWVieAorCWxlYQkxMSglZWR4KSwgJWVkaQorCWFuZAkkMHhmZmYsICVlZGkKKwlzdWIJJDB4MTAwMCwgJWVkaQorCisJLnAyYWxpZ24gNAorTChsb29wX2FzaHJfMTEpOgorCWFkZAkkMTYsICVlZGkKKwlqZwlMKG5pYmJsZV9hc2hyXzExKQorCitMKGdvYmJsZV9hc2hyXzExKToKKwltb3ZkcWEJKCVlYXgsICVlY3gpLCAleG1tMQorCW1vdmRxYQkoJWVkeCwgJWVjeCksICV4bW0yCisJbW92ZHFhCSV4bW0yLCAleG1tNAorCisJcGFsaWducgkkMTEsICV4bW0zLCAleG1tMgorCisJcGNtcGVxYgkleG1tMSwgJXhtbTAKKwlwY21wZXFiCSV4bW0yLCAleG1tMQorCXBzdWJiCSV4bW0wLCAleG1tMQorCXBtb3Ztc2tiICV4bW0xLCAlZXNpCisJc3ViCSQweGZmZmYsICVlc2kKKwlqbnoJTChleGl0KQorCisjaWZkZWYgVVNFX0FTX1NUUk5DTVAKKwljbXBsCSQxNiwgJWVicAorCWxlYQktMTYoJWVicCksICVlYnAKKwlqYmUJTChtb3JlOGJ5dGVzZXEpCisjZW5kaWYKKwlhZGQJJDE2LCAlZWN4CisJbW92ZHFhCSV4bW00LCAleG1tMworCisJYWRkCSQxNiwgJWVkaQorCWpnCUwobmliYmxlX2FzaHJfMTEpCisKKwltb3ZkcWEJKCVlYXgsICVlY3gpLCAleG1tMQorCW1vdmRxYQkoJWVkeCwgJWVjeCksICV4bW0yCisJbW92ZHFhCSV4bW0yLCAleG1tNAorCisJcGFsaWducgkkMTEsICV4bW0zLCAleG1tMgorCisJcGNtcGVxYgkleG1tMSwgJXhtbTAKKwlwY21wZXFiCSV4bW0yLCAleG1tMQorCXBzdWJiCSV4bW0wLCAleG1tMQorCXBtb3Ztc2tiICV4bW0xLCAlZXNpCisJc3ViCSQweGZmZmYsICVlc2kKKwlqbnoJTChleGl0KQorCisjaWZkZWYgVVNFX0FTX1NUUk5DTVAKKwljbXBsCSQxNiwgJWVicAorCWxlYQktMTYoJWVicCksICVlYnAKKwlqYmUJTChtb3JlOGJ5dGVzZXEpCisjZW5kaWYKKwlhZGQJJDE2LCAlZWN4CisJbW92ZHFhCSV4bW00LCAleG1tMworCWptcAlMKGxvb3BfYXNocl8xMSkKKworCS5wMmFsaWduIDQKK0wobmliYmxlX2FzaHJfMTEpOgorCXBjbXBlcWIJJXhtbTMsICV4bW0wCisJcG1vdm1za2IgJXhtbTAsICVlc2kKKwl0ZXN0CSQweGY4MDAsICVlc2kKKwlqbnoJTChhc2hyXzExX2V4aXR0YWlsKQorCisjaWZkZWYgVVNFX0FTX1NUUk5DTVAKKwljbXBsCSQ1LCAlZWJwCisJamJlCUwoYXNocl8xMV9leGl0dGFpbCkKKyNlbmRpZgorCXB4b3IJJXhtbTAsICV4bW0wCisJc3ViCSQweDEwMDAsICVlZGkKKwlqbXAJTChnb2JibGVfYXNocl8xMSkKKworCS5wMmFsaWduIDQKK0woYXNocl8xMV9leGl0dGFpbCk6CisJbW92ZHFhCSglZWF4LCAlZWN4KSwgJXhtbTEKKwlwc3JsZHEJJDExLCAleG1tMAorCXBzcmxkcQkkMTEsICV4bW0zCisJam1wCUwoYWZ0ZXJ0YWlsKQorCisvKgorICogVGhlIGZvbGxvd2luZyBjYXNlcyB3aWxsIGJlIGhhbmRsZWQgYnkgYXNocl8xMgorICogZWN4KG9mZnNldCBvZiBlc2kpICBlYXgob2Zmc2V0IG9mIGVkaSkgICByZWxhdGl2ZSBvZmZzZXQgICAJY29ycmVzcG9uZGluZyBjYXNlCisgKiAgICAgICAgbig0fjE1KSAgICAgICAgICAgIG4gLSA0ICAgICAgICAgICAgMTEoMTUgKyhuLTQpIC0gbikgICAgICAgICBhc2hyXzEyCisgKi8KKwkucDJhbGlnbiA0CitMKGFzaHJfMTIpOgorCW1vdgkkMHhmZmZmLCAlZXNpCisJcHhvcgkleG1tMCwgJXhtbTAKKwltb3ZkcWEJKCVlZHgpLCAleG1tMgorCW1vdmRxYQkoJWVheCksICV4bW0xCisJcGNtcGVxYgkleG1tMSwgJXhtbTAKKwlwc2xsZHEJJDQsICV4bW0yCisJcGNtcGVxYgkleG1tMSwgJXhtbTIKKwlwc3ViYgkleG1tMCwgJXhtbTIKKwlwbW92bXNrYiAleG1tMiwgJWVkaQorCXNocgklY2wsICVlc2kKKwlzaHIJJWNsLCAlZWRpCisJc3ViCSVlZGksICVlc2kKKwlsZWEJLTQoJWVjeCksICVlZGkKKwlqbnoJTChsZXNzMzJieXRlcykKKworCVVQREFURV9TVFJOQ01QX0NPVU5URVIKKworCW1vdmRxYQkoJWVkeCksICV4bW0zCisJcHhvcgkleG1tMCwgJXhtbTAKKwltb3YJJDE2LCAlZWN4CisJb3IJJDEyLCAlZWJ4CisJbGVhCTEyKCVlZHgpLCAlZWRpCisJYW5kCSQweGZmZiwgJWVkaQorCXN1YgkkMHgxMDAwLCAlZWRpCisKKwkucDJhbGlnbiA0CitMKGxvb3BfYXNocl8xMik6CisJYWRkCSQxNiwgJWVkaQorCWpnCUwobmliYmxlX2FzaHJfMTIpCisKK0woZ29iYmxlX2FzaHJfMTIpOgorCW1vdmRxYQkoJWVheCwgJWVjeCksICV4bW0xCisJbW92ZHFhCSglZWR4LCAlZWN4KSwgJXhtbTIKKwltb3ZkcWEJJXhtbTIsICV4bW00CisKKwlwYWxpZ25yCSQxMiwgJXhtbTMsICV4bW0yCisKKwlwY21wZXFiCSV4bW0xLCAleG1tMAorCXBjbXBlcWIJJXhtbTIsICV4bW0xCisJcHN1YmIJJXhtbTAsICV4bW0xCisJcG1vdm1za2IgJXhtbTEsICVlc2kKKwlzdWIJJDB4ZmZmZiwgJWVzaQorCWpueglMKGV4aXQpCisKKyNpZmRlZiBVU0VfQVNfU1RSTkNNUAorCWNtcGwJJDE2LCAlZWJwCisJbGVhCS0xNiglZWJwKSwgJWVicAorCWpiZQlMKG1vcmU4Ynl0ZXNlcSkKKyNlbmRpZgorCisJYWRkCSQxNiwgJWVjeAorCW1vdmRxYQkleG1tNCwgJXhtbTMKKworCWFkZAkkMTYsICVlZGkKKwlqZwlMKG5pYmJsZV9hc2hyXzEyKQorCisJbW92ZHFhCSglZWF4LCAlZWN4KSwgJXhtbTEKKwltb3ZkcWEJKCVlZHgsICVlY3gpLCAleG1tMgorCW1vdmRxYQkleG1tMiwgJXhtbTQKKworCXBhbGlnbnIJJDEyLCAleG1tMywgJXhtbTIKKworCXBjbXBlcWIJJXhtbTEsICV4bW0wCisJcGNtcGVxYgkleG1tMiwgJXhtbTEKKwlwc3ViYgkleG1tMCwgJXhtbTEKKwlwbW92bXNrYiAleG1tMSwgJWVzaQorCXN1YgkkMHhmZmZmLCAlZXNpCisJam56CUwoZXhpdCkKKworI2lmZGVmIFVTRV9BU19TVFJOQ01QCisJY21wbAkkMTYsICVlYnAKKwlsZWEJLTE2KCVlYnApLCAlZWJwCisJamJlCUwobW9yZThieXRlc2VxKQorI2VuZGlmCisJYWRkCSQxNiwgJWVjeAorCW1vdmRxYQkleG1tNCwgJXhtbTMKKwlqbXAJTChsb29wX2FzaHJfMTIpCisKKwkucDJhbGlnbiA0CitMKG5pYmJsZV9hc2hyXzEyKToKKwlwY21wZXFiCSV4bW0zLCAleG1tMAorCXBtb3Ztc2tiICV4bW0wLCAlZXNpCisJdGVzdAkkMHhmMDAwLCAlZXNpCisJam56CUwoYXNocl8xMl9leGl0dGFpbCkKKworI2lmZGVmIFVTRV9BU19TVFJOQ01QCisJY21wbAkkNCwgJWVicAorCWpiZQlMKGFzaHJfMTJfZXhpdHRhaWwpCisjZW5kaWYKKwlweG9yCSV4bW0wLCAleG1tMAorCXN1YgkkMHgxMDAwLCAlZWRpCisJam1wCUwoZ29iYmxlX2FzaHJfMTIpCisKKwkucDJhbGlnbiA0CitMKGFzaHJfMTJfZXhpdHRhaWwpOgorCW1vdmRxYQkoJWVheCwgJWVjeCksICV4bW0xCisJcHNybGRxCSQxMiwgJXhtbTAKKwlwc3JsZHEJJDEyLCAleG1tMworCWptcAlMKGFmdGVydGFpbCkKKworLyoKKyAqIFRoZSBmb2xsb3dpbmcgY2FzZXMgd2lsbCBiZSBoYW5kbGVkIGJ5IGFzaHJfMTMKKyAqIGVjeChvZmZzZXQgb2YgZXNpKSAgZWF4KG9mZnNldCBvZiBlZGkpICAgcmVsYXRpdmUgb2Zmc2V0ICAgCWNvcnJlc3BvbmRpbmcgY2FzZQorICogICAgICAgIG4oM34xNSkgICAgICAgICAgICBuIC0gMyAgICAgICAgICAgIDEyKDE1ICsobi0zKSAtIG4pICAgICAgICAgYXNocl8xMworICovCisJLnAyYWxpZ24gNAorTChhc2hyXzEzKToKKwltb3YJJDB4ZmZmZiwgJWVzaQorCXB4b3IJJXhtbTAsICV4bW0wCisJbW92ZHFhCSglZWR4KSwgJXhtbTIKKwltb3ZkcWEJKCVlYXgpLCAleG1tMQorCXBjbXBlcWIJJXhtbTEsICV4bW0wCisJcHNsbGRxCSQzLCAleG1tMgorCXBjbXBlcWIJJXhtbTEsICV4bW0yCisJcHN1YmIJJXhtbTAsICV4bW0yCisJcG1vdm1za2IgJXhtbTIsICVlZGkKKwlzaHIJJWNsLCAlZXNpCisJc2hyCSVjbCwgJWVkaQorCXN1YgklZWRpLCAlZXNpCisJbGVhCS0zKCVlY3gpLCAlZWRpCisJam56CUwobGVzczMyYnl0ZXMpCisKKwlVUERBVEVfU1RSTkNNUF9DT1VOVEVSCisKKwltb3ZkcWEJKCVlZHgpLCAleG1tMworCXB4b3IJJXhtbTAsICV4bW0wCisJbW92CSQxNiwgJWVjeAorCW9yCSQxMywgJWVieAorCWxlYQkxMyglZWR4KSwgJWVkaQorCWFuZAkkMHhmZmYsICVlZGkKKwlzdWIJJDB4MTAwMCwgJWVkaQorCisJLnAyYWxpZ24gNAorTChsb29wX2FzaHJfMTMpOgorCWFkZAkkMTYsICVlZGkKKwlqZwlMKG5pYmJsZV9hc2hyXzEzKQorCitMKGdvYmJsZV9hc2hyXzEzKToKKwltb3ZkcWEJKCVlYXgsICVlY3gpLCAleG1tMQorCW1vdmRxYQkoJWVkeCwgJWVjeCksICV4bW0yCisJbW92ZHFhCSV4bW0yLCAleG1tNAorCisJcGFsaWducgkkMTMsICV4bW0zLCAleG1tMgorCisJcGNtcGVxYgkleG1tMSwgJXhtbTAKKwlwY21wZXFiCSV4bW0yLCAleG1tMQorCXBzdWJiCSV4bW0wLCAleG1tMQorCXBtb3Ztc2tiICV4bW0xLCAlZXNpCisJc3ViCSQweGZmZmYsICVlc2kKKwlqbnoJTChleGl0KQorCisjaWZkZWYgVVNFX0FTX1NUUk5DTVAKKwljbXBsCSQxNiwgJWVicAorCWxlYQktMTYoJWVicCksICVlYnAKKwlqYmUJTChtb3JlOGJ5dGVzZXEpCisjZW5kaWYKKwlhZGQJJDE2LCAlZWN4CisJbW92ZHFhCSV4bW00LCAleG1tMworCisJYWRkCSQxNiwgJWVkaQorCWpnCUwobmliYmxlX2FzaHJfMTMpCisKKwltb3ZkcWEJKCVlYXgsICVlY3gpLCAleG1tMQorCW1vdmRxYQkoJWVkeCwgJWVjeCksICV4bW0yCisJbW92ZHFhCSV4bW0yLCAleG1tNAorCisJcGFsaWducgkkMTMsICV4bW0zLCAleG1tMgorCisJcGNtcGVxYgkleG1tMSwgJXhtbTAKKwlwY21wZXFiCSV4bW0yLCAleG1tMQorCXBzdWJiCSV4bW0wLCAleG1tMQorCXBtb3Ztc2tiICV4bW0xLCAlZXNpCisJc3ViCSQweGZmZmYsICVlc2kKKwlqbnoJTChleGl0KQorCisjaWZkZWYgVVNFX0FTX1NUUk5DTVAKKwljbXBsCSQxNiwgJWVicAorCWxlYQktMTYoJWVicCksICVlYnAKKwlqYmUJTChtb3JlOGJ5dGVzZXEpCisjZW5kaWYKKwlhZGQJJDE2LCAlZWN4CisJbW92ZHFhCSV4bW00LCAleG1tMworCWptcAlMKGxvb3BfYXNocl8xMykKKworCS5wMmFsaWduIDQKK0wobmliYmxlX2FzaHJfMTMpOgorCXBjbXBlcWIJJXhtbTMsICV4bW0wCisJcG1vdm1za2IgJXhtbTAsICVlc2kKKwl0ZXN0CSQweGUwMDAsICVlc2kKKwlqbnoJTChhc2hyXzEzX2V4aXR0YWlsKQorCisjaWZkZWYgVVNFX0FTX1NUUk5DTVAKKwljbXBsCSQzLCAlZWJwCisJamJlCUwoYXNocl8xM19leGl0dGFpbCkKKyNlbmRpZgorCXB4b3IJJXhtbTAsICV4bW0wCisJc3ViCSQweDEwMDAsICVlZGkKKwlqbXAJTChnb2JibGVfYXNocl8xMykKKworCS5wMmFsaWduIDQKK0woYXNocl8xM19leGl0dGFpbCk6CisJbW92ZHFhCSglZWF4LCAlZWN4KSwgJXhtbTEKKwlwc3JsZHEJJDEzLCAleG1tMAorCXBzcmxkcQkkMTMsICV4bW0zCisJam1wCUwoYWZ0ZXJ0YWlsKQorCisvKgorICogVGhlIGZvbGxvd2luZyBjYXNlcyB3aWxsIGJlIGhhbmRsZWQgYnkgYXNocl8xNAorICogZWN4KG9mZnNldCBvZiBlc2kpICBlYXgob2Zmc2V0IG9mIGVkaSkgICByZWxhdGl2ZSBvZmZzZXQgICAJY29ycmVzcG9uZGluZyBjYXNlCisgKiAgICAgICAgbigyfjE1KSAgICAgICAgICAgIG4gLSAyICAgICAgICAgICAgMTMoMTUgKyhuLTIpIC0gbikgICAgICAgICBhc2hyXzE0CisgKi8KKwkucDJhbGlnbiA0CitMKGFzaHJfMTQpOgorCW1vdgkkMHhmZmZmLCAlZXNpCisJcHhvcgkleG1tMCwgJXhtbTAKKwltb3ZkcWEJKCVlZHgpLCAleG1tMgorCW1vdmRxYQkoJWVheCksICV4bW0xCisJcGNtcGVxYgkleG1tMSwgJXhtbTAKKwlwc2xsZHEJJDIsICV4bW0yCisJcGNtcGVxYgkleG1tMSwgJXhtbTIKKwlwc3ViYgkleG1tMCwgJXhtbTIKKwlwbW92bXNrYiAleG1tMiwgJWVkaQorCXNocgklY2wsICVlc2kKKwlzaHIJJWNsLCAlZWRpCisJc3ViCSVlZGksICVlc2kKKwlsZWEJLTIoJWVjeCksICVlZGkKKwlqbnoJTChsZXNzMzJieXRlcykKKworCVVQREFURV9TVFJOQ01QX0NPVU5URVIKKworCW1vdmRxYQkoJWVkeCksICV4bW0zCisJcHhvcgkleG1tMCwgJXhtbTAKKwltb3YJJDE2LCAlZWN4CisJb3IJJDE0LCAlZWJ4CisJbGVhCTE0KCVlZHgpLCAlZWRpCisJYW5kCSQweGZmZiwgJWVkaQorCXN1YgkkMHgxMDAwLCAlZWRpCisKKwkucDJhbGlnbiA0CitMKGxvb3BfYXNocl8xNCk6CisJYWRkCSQxNiwgJWVkaQorCWpnCUwobmliYmxlX2FzaHJfMTQpCisKK0woZ29iYmxlX2FzaHJfMTQpOgorCW1vdmRxYQkoJWVheCwgJWVjeCksICV4bW0xCisJbW92ZHFhCSglZWR4LCAlZWN4KSwgJXhtbTIKKwltb3ZkcWEJJXhtbTIsICV4bW00CisKKwlwYWxpZ25yCSQxNCwgJXhtbTMsICV4bW0yCisKKwlwY21wZXFiCSV4bW0xLCAleG1tMAorCXBjbXBlcWIJJXhtbTIsICV4bW0xCisJcHN1YmIJJXhtbTAsICV4bW0xCisJcG1vdm1za2IgJXhtbTEsICVlc2kKKwlzdWIJJDB4ZmZmZiwgJWVzaQorCWpueglMKGV4aXQpCisKKyNpZmRlZiBVU0VfQVNfU1RSTkNNUAorCWNtcGwJJDE2LCAlZWJwCisJbGVhCS0xNiglZWJwKSwgJWVicAorCWpiZQlMKG1vcmU4Ynl0ZXNlcSkKKyNlbmRpZgorCWFkZAkkMTYsICVlY3gKKwltb3ZkcWEJJXhtbTQsICV4bW0zCisKKwlhZGQJJDE2LCAlZWRpCisJamcJTChuaWJibGVfYXNocl8xNCkKKworCW1vdmRxYQkoJWVheCwgJWVjeCksICV4bW0xCisJbW92ZHFhCSglZWR4LCAlZWN4KSwgJXhtbTIKKwltb3ZkcWEJJXhtbTIsICV4bW00CisKKwlwYWxpZ25yCSQxNCwgJXhtbTMsICV4bW0yCisKKwlwY21wZXFiCSV4bW0xLCAleG1tMAorCXBjbXBlcWIJJXhtbTIsICV4bW0xCisJcHN1YmIJJXhtbTAsICV4bW0xCisJcG1vdm1za2IgJXhtbTEsICVlc2kKKwlzdWIJJDB4ZmZmZiwgJWVzaQorCWpueglMKGV4aXQpCisKKyNpZmRlZiBVU0VfQVNfU1RSTkNNUAorCWNtcGwJJDE2LCAlZWJwCisJbGVhCS0xNiglZWJwKSwgJWVicAorCWpiZQlMKG1vcmU4Ynl0ZXNlcSkKKyNlbmRpZgorCWFkZAkkMTYsICVlY3gKKwltb3ZkcWEJJXhtbTQsICV4bW0zCisJam1wCUwobG9vcF9hc2hyXzE0KQorCisJLnAyYWxpZ24gNAorTChuaWJibGVfYXNocl8xNCk6CisJcGNtcGVxYgkleG1tMywgJXhtbTAKKwlwbW92bXNrYiAleG1tMCwgJWVzaQorCXRlc3QJJDB4YzAwMCwgJWVzaQorCWpueglMKGFzaHJfMTRfZXhpdHRhaWwpCisKKyNpZmRlZiBVU0VfQVNfU1RSTkNNUAorCWNtcGwJJDIsICVlYnAKKwlqYmUJTChhc2hyXzE0X2V4aXR0YWlsKQorI2VuZGlmCisJcHhvcgkleG1tMCwgJXhtbTAKKwlzdWIJJDB4MTAwMCwgJWVkaQorCWptcAlMKGdvYmJsZV9hc2hyXzE0KQorCisJLnAyYWxpZ24gNAorTChhc2hyXzE0X2V4aXR0YWlsKToKKwltb3ZkcWEJKCVlYXgsICVlY3gpLCAleG1tMQorCXBzcmxkcQkkMTQsICV4bW0wCisJcHNybGRxCSQxNCwgJXhtbTMKKwlqbXAJTChhZnRlcnRhaWwpCisKKy8qCisgKiBUaGUgZm9sbG93aW5nIGNhc2VzIHdpbGwgYmUgaGFuZGxlZCBieSBhc2hyXzE0CisgKiBlY3gob2Zmc2V0IG9mIGVzaSkgIGVheChvZmZzZXQgb2YgZWRpKSAgIHJlbGF0aXZlIG9mZnNldCAgIAljb3JyZXNwb25kaW5nIGNhc2UKKyAqICAgICAgICBuKDF+MTUpICAgICAgICAgICAgbiAtIDEgICAgICAgICAgICAxNCgxNSArKG4tMSkgLSBuKSAgICAgICAgIGFzaHJfMTUKKyAqLworCisJLnAyYWxpZ24gNAorTChhc2hyXzE1KToKKwltb3YJJDB4ZmZmZiwgJWVzaQorCXB4b3IJJXhtbTAsICV4bW0wCisJbW92ZHFhCSglZWR4KSwgJXhtbTIKKwltb3ZkcWEJKCVlYXgpLCAleG1tMQorCXBjbXBlcWIJJXhtbTEsICV4bW0wCisJcHNsbGRxCSQxLCAleG1tMgorCXBjbXBlcWIJJXhtbTEsICV4bW0yCisJcHN1YmIJJXhtbTAsICV4bW0yCisJcG1vdm1za2IgJXhtbTIsICVlZGkKKwlzaHIJJWNsLCAlZXNpCisJc2hyCSVjbCwgJWVkaQorCXN1YgklZWRpLCAlZXNpCisJbGVhCS0xKCVlY3gpLCAlZWRpCisJam56CUwobGVzczMyYnl0ZXMpCisKKwlVUERBVEVfU1RSTkNNUF9DT1VOVEVSCisKKwltb3ZkcWEJKCVlZHgpLCAleG1tMworCXB4b3IJJXhtbTAsICV4bW0wCisJbW92CSQxNiwgJWVjeAorCW9yCSQxNSwgJWVieAorCWxlYQkxNSglZWR4KSwgJWVkaQorCWFuZAkkMHhmZmYsICVlZGkKKwlzdWIJJDB4MTAwMCwgJWVkaQorCisJLnAyYWxpZ24gNAorTChsb29wX2FzaHJfMTUpOgorCWFkZAkkMTYsICVlZGkKKwlqZwlMKG5pYmJsZV9hc2hyXzE1KQorCitMKGdvYmJsZV9hc2hyXzE1KToKKwltb3ZkcWEJKCVlYXgsICVlY3gpLCAleG1tMQorCW1vdmRxYQkoJWVkeCwgJWVjeCksICV4bW0yCisJbW92ZHFhCSV4bW0yLCAleG1tNAorCisJcGFsaWducgkkMTUsICV4bW0zLCAleG1tMgorCisJcGNtcGVxYgkleG1tMSwgJXhtbTAKKwlwY21wZXFiCSV4bW0yLCAleG1tMQorCXBzdWJiCSV4bW0wLCAleG1tMQorCXBtb3Ztc2tiICV4bW0xLCAlZXNpCisJc3ViCSQweGZmZmYsICVlc2kKKwlqbnoJTChleGl0KQorCisjaWZkZWYgVVNFX0FTX1NUUk5DTVAKKwljbXBsCSQxNiwgJWVicAorCWxlYQktMTYoJWVicCksICVlYnAKKwlqYmUJTChtb3JlOGJ5dGVzZXEpCisjZW5kaWYKKwlhZGQJJDE2LCAlZWN4CisJbW92ZHFhCSV4bW00LCAleG1tMworCisJYWRkCSQxNiwgJWVkaQorCWpnCUwobmliYmxlX2FzaHJfMTUpCisKKwltb3ZkcWEJKCVlYXgsICVlY3gpLCAleG1tMQorCW1vdmRxYQkoJWVkeCwgJWVjeCksICV4bW0yCisJbW92ZHFhCSV4bW0yLCAleG1tNAorCisJcGFsaWducgkkMTUsICV4bW0zLCAleG1tMgorCisJcGNtcGVxYgkleG1tMSwgJXhtbTAKKwlwY21wZXFiCSV4bW0yLCAleG1tMQorCXBzdWJiCSV4bW0wLCAleG1tMQorCXBtb3Ztc2tiICV4bW0xLCAlZXNpCisJc3ViCSQweGZmZmYsICVlc2kKKwlqbnoJTChleGl0KQorCisjaWZkZWYgVVNFX0FTX1NUUk5DTVAKKwljbXBsCSQxNiwgJWVicAorCWxlYQktMTYoJWVicCksICVlYnAKKwlqYmUJTChtb3JlOGJ5dGVzZXEpCisjZW5kaWYKKwlhZGQJJDE2LCAlZWN4CisJbW92ZHFhCSV4bW00LCAleG1tMworCWptcAlMKGxvb3BfYXNocl8xNSkKKworCS5wMmFsaWduIDQKK0wobmliYmxlX2FzaHJfMTUpOgorCXBjbXBlcWIJJXhtbTMsICV4bW0wCisJcG1vdm1za2IgJXhtbTAsICVlc2kKKwl0ZXN0CSQweDgwMDAsICVlc2kKKwlqbnoJTChhc2hyXzE1X2V4aXR0YWlsKQorCisjaWZkZWYgVVNFX0FTX1NUUk5DTVAKKwljbXBsCSQxLCAlZWJwCisJamJlCUwoYXNocl8xNV9leGl0dGFpbCkKKyNlbmRpZgorCXB4b3IJJXhtbTAsICV4bW0wCisJc3ViCSQweDEwMDAsICVlZGkKKwlqbXAJTChnb2JibGVfYXNocl8xNSkKKworCS5wMmFsaWduIDQKK0woYXNocl8xNV9leGl0dGFpbCk6CisJbW92ZHFhCSglZWF4LCAlZWN4KSwgJXhtbTEKKwlwc3JsZHEJJDE1LCAleG1tMAorCXBzcmxkcQkkMTUsICV4bW0zCisJam1wCUwoYWZ0ZXJ0YWlsKQorCisJLnAyYWxpZ24gNAorTChhZnRlcnRhaWwpOgorCXBjbXBlcWIJJXhtbTMsICV4bW0xCisJcHN1YmIJJXhtbTAsICV4bW0xCisJcG1vdm1za2IgJXhtbTEsICVlc2kKKwlub3QJJWVzaQorTChleGl0KToKKwltb3YJJWVieCwgJWVkaQorCWFuZAkkMHgxZiwgJWVkaQorCWxlYQktMTYoJWVkaSwgJWVjeCksICVlZGkKK0wobGVzczMyYnl0ZXMpOgorCWFkZAklZWRpLCAlZWR4CisJYWRkCSVlY3gsICVlYXgKKwl0ZXN0CSQweDIwLCAlZWJ4CisJanoJTChyZXQyKQorCXhjaGcJJWVheCwgJWVkeAorCisJLnAyYWxpZ24gNAorTChyZXQyKToKKwltb3YJJWVzaSwgJWVjeAorCVBPUAkoJWVzaSkKKwlQT1AJKCVlZGkpCisJUE9QCSglZWJ4KQorTChsZXNzMTZieXRlcyk6CisJdGVzdAklY2wsICVjbAorCWp6CUwoMm5leHRfOF9ieXRlcykKKworCXRlc3QJJDB4MDEsICVjbAorCWpueglMKEJ5dGUwKQorCisJdGVzdAkkMHgwMiwgJWNsCisJam56CUwoQnl0ZTEpCisKKwl0ZXN0CSQweDA0LCAlY2wKKwlqbnoJTChCeXRlMikKKworCXRlc3QJJDB4MDgsICVjbAorCWpueglMKEJ5dGUzKQorCisJdGVzdAkkMHgxMCwgJWNsCisJam56CUwoQnl0ZTQpCisKKwl0ZXN0CSQweDIwLCAlY2wKKwlqbnoJTChCeXRlNSkKKworCXRlc3QJJDB4NDAsICVjbAorCWpueglMKEJ5dGU2KQorI2lmZGVmIFVTRV9BU19TVFJOQ01QCisJY21wbAkkNywgJWVicAorCWpiZQlMKGVxKQorI2VuZGlmCisKKwltb3Z6YmwJNyglZWF4KSwgJWVjeAorCW1vdnpibAk3KCVlZHgpLCAlZWF4CisKKwlzdWIJJWVjeCwgJWVheAorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChCeXRlMCk6CisjaWZkZWYgVVNFX0FTX1NUUk5DTVAKKwljbXBsCSQwLCAlZWJwCisJamJlCUwoZXEpCisjZW5kaWYKKwltb3Z6YmwJKCVlYXgpLCAlZWN4CisJbW92emJsCSglZWR4KSwgJWVheAorCisJc3ViCSVlY3gsICVlYXgKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woQnl0ZTEpOgorI2lmZGVmIFVTRV9BU19TVFJOQ01QCisJY21wbAkkMSwgJWVicAorCWpiZQlMKGVxKQorI2VuZGlmCisJbW92emJsCTEoJWVheCksICVlY3gKKwltb3Z6YmwJMSglZWR4KSwgJWVheAorCisJc3ViCSVlY3gsICVlYXgKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woQnl0ZTIpOgorI2lmZGVmIFVTRV9BU19TVFJOQ01QCisJY21wbAkkMiwgJWVicAorCWpiZQlMKGVxKQorI2VuZGlmCisJbW92emJsCTIoJWVheCksICVlY3gKKwltb3Z6YmwJMiglZWR4KSwgJWVheAorCisJc3ViCSVlY3gsICVlYXgKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woQnl0ZTMpOgorI2lmZGVmIFVTRV9BU19TVFJOQ01QCisJY21wbAkkMywgJWVicAorCWpiZQlMKGVxKQorI2VuZGlmCisJbW92emJsCTMoJWVheCksICVlY3gKKwltb3Z6YmwJMyglZWR4KSwgJWVheAorCisJc3ViCSVlY3gsICVlYXgKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woQnl0ZTQpOgorI2lmZGVmIFVTRV9BU19TVFJOQ01QCisJY21wbAkkNCwgJWVicAorCWpiZQlMKGVxKQorI2VuZGlmCisJbW92emJsCTQoJWVheCksICVlY3gKKwltb3Z6YmwJNCglZWR4KSwgJWVheAorCisJc3ViCSVlY3gsICVlYXgKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woQnl0ZTUpOgorI2lmZGVmIFVTRV9BU19TVFJOQ01QCisJY21wbAkkNSwgJWVicAorCWpiZQlMKGVxKQorI2VuZGlmCisJbW92emJsCTUoJWVheCksICVlY3gKKwltb3Z6YmwJNSglZWR4KSwgJWVheAorCisJc3ViCSVlY3gsICVlYXgKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woQnl0ZTYpOgorI2lmZGVmIFVTRV9BU19TVFJOQ01QCisJY21wbAkkNiwgJWVicAorCWpiZQlMKGVxKQorI2VuZGlmCisJbW92emJsCTYoJWVheCksICVlY3gKKwltb3Z6YmwJNiglZWR4KSwgJWVheAorCisJc3ViCSVlY3gsICVlYXgKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woMm5leHRfOF9ieXRlcyk6CisJYWRkCSQ4LCAlZWF4CisJYWRkCSQ4LCAlZWR4CisjaWZkZWYgVVNFX0FTX1NUUk5DTVAKKwljbXBsCSQ4LCAlZWJwCisJbGVhCS04KCVlYnApLCAlZWJwCisJamJlCUwoZXEpCisjZW5kaWYKKworCXRlc3QJJDB4MDEsICVjaAorCWpueglMKEJ5dGUwKQorCisJdGVzdAkkMHgwMiwgJWNoCisJam56CUwoQnl0ZTEpCisKKwl0ZXN0CSQweDA0LCAlY2gKKwlqbnoJTChCeXRlMikKKworCXRlc3QJJDB4MDgsICVjaAorCWpueglMKEJ5dGUzKQorCisJdGVzdAkkMHgxMCwgJWNoCisJam56CUwoQnl0ZTQpCisKKwl0ZXN0CSQweDIwLCAlY2gKKwlqbnoJTChCeXRlNSkKKworCXRlc3QJJDB4NDAsICVjaAorCWpueglMKEJ5dGU2KQorCisjaWZkZWYgVVNFX0FTX1NUUk5DTVAKKwljbXBsCSQ3LCAlZWJwCisJamJlCUwoZXEpCisjZW5kaWYKKwltb3Z6YmwJNyglZWF4KSwgJWVjeAorCW1vdnpibAk3KCVlZHgpLCAlZWF4CisKKwlzdWIJJWVjeCwgJWVheAorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChuZXEpOgorCW1vdgkkMSwgJWVheAorCWphCUwobmVxX2JpZ2dlcikKKwluZWcJJWVheAorTChuZXFfYmlnZ2VyKToKKwlSRVRVUk4KKworI2lmZGVmIFVTRV9BU19TVFJOQ01QCisJY2ZpX3Jlc3RvcmVfc3RhdGUKKwkucDJhbGlnbiA0CitMKG1vcmU4Ynl0ZXNlcSk6CisJUE9QCSglZXNpKQorCVBPUAkoJWVkaSkKKwlQT1AJKCVlYngpCisjZW5kaWYKKworTChlcSk6CisKKyNpZmRlZiBVU0VfQVNfU1RSTkNNUAorCVBPUAkoJWVicCkKKyNlbmRpZgorCXhvcmwJJWVheCwgJWVheAorCXJldAorCisjaWZkZWYgVVNFX0FTX1NUUk5DTVAKKwlDRklfUFVTSCAoJWVicCkKKworCS5wMmFsaWduIDQKK0wobGVzczE2Ynl0ZXNfc25jbXApOgorCXRlc3QJJWVicCwgJWVicAorCWp6CUwoZXEpCisKKwltb3Z6YmwJKCVlYXgpLCAlZWN4CisJY21wYgklY2wsICglZWR4KQorCWpuZQlMKG5lcSkKKwl0ZXN0CSVjbCwgJWNsCisJamUJTChlcSkKKworCWNtcGwJJDEsICVlYnAKKwlqZQlMKGVxKQorCisJbW92emJsCTEoJWVheCksICVlY3gKKwljbXBiCSVjbCwgMSglZWR4KQorCWpuZQlMKG5lcSkKKwl0ZXN0CSVjbCwgJWNsCisJamUJTChlcSkKKworCWNtcGwJJDIsICVlYnAKKwlqZQlMKGVxKQorCisJbW92emJsCTIoJWVheCksICVlY3gKKwljbXBiCSVjbCwgMiglZWR4KQorCWpuZQlMKG5lcSkKKwl0ZXN0CSVjbCwgJWNsCisJamUJTChlcSkKKworCWNtcGwJJDMsICVlYnAKKwlqZQlMKGVxKQorCisJbW92emJsCTMoJWVheCksICVlY3gKKwljbXBiCSVjbCwgMyglZWR4KQorCWpuZQlMKG5lcSkKKwl0ZXN0CSVjbCwgJWNsCisJamUJTChlcSkKKworCWNtcGwJJDQsICVlYnAKKwlqZQlMKGVxKQorCisJbW92emJsCTQoJWVheCksICVlY3gKKwljbXBiCSVjbCwgNCglZWR4KQorCWpuZQlMKG5lcSkKKwl0ZXN0CSVjbCwgJWNsCisJamUJTChlcSkKKworCWNtcGwJJDUsICVlYnAKKwlqZQlMKGVxKQorCisJbW92emJsCTUoJWVheCksICVlY3gKKwljbXBiCSVjbCwgNSglZWR4KQorCWpuZQlMKG5lcSkKKwl0ZXN0CSVjbCwgJWNsCisJamUJTChlcSkKKworCWNtcGwJJDYsICVlYnAKKwlqZQlMKGVxKQorCisJbW92emJsCTYoJWVheCksICVlY3gKKwljbXBiCSVjbCwgNiglZWR4KQorCWpuZQlMKG5lcSkKKwl0ZXN0CSVjbCwgJWNsCisJamUJTChlcSkKKworCWNtcGwJJDcsICVlYnAKKwlqZQlMKGVxKQorCisJbW92emJsCTcoJWVheCksICVlY3gKKwljbXBiCSVjbCwgNyglZWR4KQorCWpuZQlMKG5lcSkKKwl0ZXN0CSVjbCwgJWNsCisJamUJTChlcSkKKworCisJY21wbAkkOCwgJWVicAorCWplCUwoZXEpCisKKwltb3Z6YmwJOCglZWF4KSwgJWVjeAorCWNtcGIJJWNsLCA4KCVlZHgpCisJam5lCUwobmVxKQorCXRlc3QJJWNsLCAlY2wKKwlqZQlMKGVxKQorCisJY21wbAkkOSwgJWVicAorCWplCUwoZXEpCisKKwltb3Z6YmwJOSglZWF4KSwgJWVjeAorCWNtcGIJJWNsLCA5KCVlZHgpCisJam5lCUwobmVxKQorCXRlc3QJJWNsLCAlY2wKKwlqZQlMKGVxKQorCisJY21wbAkkMTAsICVlYnAKKwlqZQlMKGVxKQorCisJbW92emJsCTEwKCVlYXgpLCAlZWN4CisJY21wYgklY2wsIDEwKCVlZHgpCisJam5lCUwobmVxKQorCXRlc3QJJWNsLCAlY2wKKwlqZQlMKGVxKQorCisJY21wbAkkMTEsICVlYnAKKwlqZQlMKGVxKQorCisJbW92emJsCTExKCVlYXgpLCAlZWN4CisJY21wYgklY2wsIDExKCVlZHgpCisJam5lCUwobmVxKQorCXRlc3QJJWNsLCAlY2wKKwlqZQlMKGVxKQorCisKKwljbXBsCSQxMiwgJWVicAorCWplCUwoZXEpCisKKwltb3Z6YmwJMTIoJWVheCksICVlY3gKKwljbXBiCSVjbCwgMTIoJWVkeCkKKwlqbmUJTChuZXEpCisJdGVzdAklY2wsICVjbAorCWplCUwoZXEpCisKKwljbXBsCSQxMywgJWVicAorCWplCUwoZXEpCisKKwltb3Z6YmwJMTMoJWVheCksICVlY3gKKwljbXBiCSVjbCwgMTMoJWVkeCkKKwlqbmUJTChuZXEpCisJdGVzdAklY2wsICVjbAorCWplCUwoZXEpCisKKwljbXBsCSQxNCwgJWVicAorCWplCUwoZXEpCisKKwltb3Z6YmwJMTQoJWVheCksICVlY3gKKwljbXBiCSVjbCwgMTQoJWVkeCkKKwlqbmUJTChuZXEpCisJdGVzdAklY2wsICVjbAorCWplCUwoZXEpCisKKwljbXBsCSQxNSwgJWVicAorCWplCUwoZXEpCisKKwltb3Z6YmwJMTUoJWVheCksICVlY3gKKwljbXBiCSVjbCwgMTUoJWVkeCkKKwlqbmUJTChuZXEpCisJdGVzdAklY2wsICVjbAorCWplCUwoZXEpCisKKwlQT1AJKCVlYnApCisJeG9yCSVlYXgsICVlYXgKKwlyZXQKKyNlbmRpZgorCitFTkQgKFNUUkNNUCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3RyaW5nL3Nzc2UzLXN0cmNtcC1sYXRlc3QuUyBiL2xpYmMvYXJjaC14ODYvc3RyaW5nL3Nzc2UzLXN0cmNtcC1sYXRlc3QuUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjljNjQyNS4uMDAwMDAwMAotLS0gYS9saWJjL2FyY2gteDg2L3N0cmluZy9zc3NlMy1zdHJjbXAtbGF0ZXN0LlMKKysrIC9kZXYvbnVsbApAQCAtMSwyMjc0ICswLDAgQEAKLS8qCi1Db3B5cmlnaHQgKGMpIDIwMTAsIEludGVsIENvcnBvcmF0aW9uCi1BbGwgcmlnaHRzIHJlc2VydmVkLgotCi1SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLW1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgotCi0gICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCi0gICAgKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotCi0gICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCi0gICAgKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCi0gICAgKiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLQotICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBJbnRlbCBDb3Jwb3JhdGlvbiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAgICAqIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICAgICogd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0KLVRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKLUFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi1XQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi1ESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCi1BTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLShJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLUxPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgotQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLShJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCi1TT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSovCi0KLSNpZm5kZWYgTAotIyBkZWZpbmUgTChsYWJlbCkJLkwjI2xhYmVsCi0jZW5kaWYKLQotI2lmbmRlZiBjZmlfc3RhcnRwcm9jCi0jIGRlZmluZSBjZmlfc3RhcnRwcm9jCQkJLmNmaV9zdGFydHByb2MKLSNlbmRpZgotCi0jaWZuZGVmIGNmaV9lbmRwcm9jCi0jIGRlZmluZSBjZmlfZW5kcHJvYwkJCS5jZmlfZW5kcHJvYwotI2VuZGlmCi0KLSNpZm5kZWYgY2ZpX3JlbF9vZmZzZXQKLSMgZGVmaW5lIGNmaV9yZWxfb2Zmc2V0KHJlZywgb2ZmKQkuY2ZpX3JlbF9vZmZzZXQgcmVnLCBvZmYKLSNlbmRpZgotCi0jaWZuZGVmIGNmaV9yZXN0b3JlCi0jIGRlZmluZSBjZmlfcmVzdG9yZShyZWcpCQkuY2ZpX3Jlc3RvcmUgcmVnCi0jZW5kaWYKLQotI2lmbmRlZiBjZmlfYWRqdXN0X2NmYV9vZmZzZXQKLSMgZGVmaW5lIGNmaV9hZGp1c3RfY2ZhX29mZnNldChvZmYpCS5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgb2ZmCi0jZW5kaWYKLQotI2lmbmRlZiBjZmlfcmVtZW1iZXJfc3RhdGUKLSMgZGVmaW5lIGNmaV9yZW1lbWJlcl9zdGF0ZQkJLmNmaV9yZW1lbWJlcl9zdGF0ZQotI2VuZGlmCi0KLSNpZm5kZWYgY2ZpX3Jlc3RvcmVfc3RhdGUKLSMgZGVmaW5lIGNmaV9yZXN0b3JlX3N0YXRlCQkuY2ZpX3Jlc3RvcmVfc3RhdGUKLSNlbmRpZgotCi0jaWZuZGVmIEVOVFJZCi0jIGRlZmluZSBFTlRSWShuYW1lKQkJCVwKLQkudHlwZSBuYW1lLCAgQGZ1bmN0aW9uOyAJXAotCS5nbG9ibCBuYW1lOwkJCVwKLQkucDJhbGlnbiA0OwkJCVwKLW5hbWU6CQkJCQlcCi0JY2ZpX3N0YXJ0cHJvYwotI2VuZGlmCi0KLSNpZm5kZWYgRU5ECi0jIGRlZmluZSBFTkQobmFtZSkJCQlcCi0JY2ZpX2VuZHByb2M7CQkJXAotCS5zaXplIG5hbWUsIC4tbmFtZQotI2VuZGlmCi0KLSNkZWZpbmUgQ0ZJX1BVU0goUkVHKQkJCQkJCVwKLSAgY2ZpX2FkanVzdF9jZmFfb2Zmc2V0ICg0KTsJCQkJCVwKLSAgY2ZpX3JlbF9vZmZzZXQgKFJFRywgMCkKLQotI2RlZmluZSBDRklfUE9QKFJFRykJCQkJCQlcCi0gIGNmaV9hZGp1c3RfY2ZhX29mZnNldCAoLTQpOwkJCQkJXAotICBjZmlfcmVzdG9yZSAoUkVHKQotCi0jZGVmaW5lIFBVU0goUkVHKQlwdXNobCBSRUc7IENGSV9QVVNIIChSRUcpCi0jZGVmaW5lIFBPUChSRUcpCXBvcGwgUkVHOyBDRklfUE9QIChSRUcpCi0KLSNpZm5kZWYgVVNFX0FTX1NUUk5DTVAKLSMgZGVmaW5lIFNUUjEJCTQKLSMgZGVmaW5lIFNUUjIJCVNUUjErNAotIyBkZWZpbmUgUkVUVVJOCQlyZXQKLQotIyBkZWZpbmUgVVBEQVRFX1NUUk5DTVBfQ09VTlRFUgotI2Vsc2UKLSMgZGVmaW5lIFNUUjEJCTgKLSMgZGVmaW5lIFNUUjIJCVNUUjErNAotIyBkZWZpbmUgQ05UCQlTVFIyKzQKLSMgZGVmaW5lIFJFVFVSTgkJUE9QICglZWJwKTsgcmV0OyBDRklfUFVTSCAoJWVicCkKLQotIyBkZWZpbmUgVVBEQVRFX1NUUk5DTVBfQ09VTlRFUgkJCQlcCi0JLyogY2FsY3VsYXRlIGxlZnQgbnVtYmVyIHRvIGNvbXBhcmUgKi8JCVwKLQltb3YJJDE2LCAlZXNpOwkJCQlcCi0Jc3ViCSVlY3gsICVlc2k7CQkJCVwKLQljbXAJJWVzaSwgJWVicDsJCQkJXAotCWpiZQlMKG1vcmU4Ynl0ZXNlcSk7CQkJXAotCXN1YgklZXNpLCAlZWJwCi0jZW5kaWYKLQotCS5zZWN0aW9uIC50ZXh0LnNzc2UzLCJheCIsQHByb2diaXRzCi1FTlRSWSAoc3NzZTNfc3RyY21wX2xhdGVzdCkKLSNpZmRlZiBVU0VfQVNfU1RSTkNNUAotCVBVU0gJKCVlYnApCi0jZW5kaWYKLQltb3ZsCVNUUjEoJWVzcCksICVlZHgKLQltb3ZsCVNUUjIoJWVzcCksICVlYXgKLSNpZmRlZiBVU0VfQVNfU1RSTkNNUAotCW1vdmwJQ05UKCVlc3ApLCAlZWJwCi0JY21wCSQxNiwgJWVicAotCWpiCUwobGVzczE2Ynl0ZXNfc25jbXApCi0Jam1wCUwobW9yZTE2Ynl0ZXMpCi0jZW5kaWYKLQotCW1vdnpibAkoJWVheCksICVlY3gKLQljbXBiCSVjbCwgKCVlZHgpCi0Jam5lCUwobmVxKQotCWNtcGwJJDAsICVlY3gKLQlqZQlMKGVxKQotCi0JbW92emJsCTEoJWVheCksICVlY3gKLQljbXBiCSVjbCwgMSglZWR4KQotCWpuZQlMKG5lcSkKLQljbXBsCSQwLCAlZWN4Ci0JamUJTChlcSkKLQotCW1vdnpibAkyKCVlYXgpLCAlZWN4Ci0JY21wYgklY2wsIDIoJWVkeCkKLQlqbmUJTChuZXEpCi0JY21wbAkkMCwgJWVjeAotCWplCUwoZXEpCi0KLQltb3Z6YmwJMyglZWF4KSwgJWVjeAotCWNtcGIJJWNsLCAzKCVlZHgpCi0Jam5lCUwobmVxKQotCWNtcGwJJDAsICVlY3gKLQlqZQlMKGVxKQotCi0JbW92emJsCTQoJWVheCksICVlY3gKLQljbXBiCSVjbCwgNCglZWR4KQotCWpuZQlMKG5lcSkKLQljbXBsCSQwLCAlZWN4Ci0JamUJTChlcSkKLQotCW1vdnpibAk1KCVlYXgpLCAlZWN4Ci0JY21wYgklY2wsIDUoJWVkeCkKLQlqbmUJTChuZXEpCi0JY21wbAkkMCwgJWVjeAotCWplCUwoZXEpCi0KLQltb3Z6YmwJNiglZWF4KSwgJWVjeAotCWNtcGIJJWNsLCA2KCVlZHgpCi0Jam5lCUwobmVxKQotCWNtcGwJJDAsICVlY3gKLQlqZQlMKGVxKQotCi0JbW92emJsCTcoJWVheCksICVlY3gKLQljbXBiCSVjbCwgNyglZWR4KQotCWpuZQlMKG5lcSkKLQljbXBsCSQwLCAlZWN4Ci0JamUJTChlcSkKLQotCWFkZAkkOCwgJWVkeAotCWFkZAkkOCwgJWVheAotI2lmZGVmIFVTRV9BU19TVFJOQ01QCi0JY21wCSQ4LCAlZWJwCi0JbGVhCS04KCVlYnApLCAlZWJwCi0JamUJTChlcSkKLUwobW9yZTE2Ynl0ZXMpOgotI2VuZGlmCi0JbW92bAklZWR4LCAlZWN4Ci0JYW5kCSQweGZmZiwgJWVjeAotCWNtcAkkMHhmZjAsICVlY3gKLQlqYQlMKGNyb3NzcGFnZSkKLQltb3YJJWVheCwgJWVjeAotCWFuZAkkMHhmZmYsICVlY3gKLQljbXAJJDB4ZmYwLCAlZWN4Ci0JamEJTChjcm9zc3BhZ2UpCi0JcHhvcgkleG1tMCwgJXhtbTAKLQltb3ZscGQJKCVlYXgpLCAleG1tMQotCW1vdmxwZAkoJWVkeCksICV4bW0yCi0JbW92aHBkCTgoJWVheCksICV4bW0xCi0JbW92aHBkCTgoJWVkeCksICV4bW0yCi0JcGNtcGVxYgkleG1tMSwgJXhtbTAKLQlwY21wZXFiCSV4bW0yLCAleG1tMQotCXBzdWJiCSV4bW0wLCAleG1tMQotCXBtb3Ztc2tiICV4bW0xLCAlZWN4Ci0Jc3ViCSQweGZmZmYsICVlY3gKLQlqbnoJTChsZXNzMTZieXRlcykKLSNpZmRlZiBVU0VfQVNfU1RSTkNNUAotCWNtcAkkMTYsICVlYnAKLQlsZWEJLTE2KCVlYnApLCAlZWJwCi0JamJlCUwoZXEpCi0jZW5kaWYKLQlhZGQJJDE2LCAlZWF4Ci0JYWRkCSQxNiwgJWVkeAotCi1MKGNyb3NzcGFnZSk6Ci0KLQlQVVNICSglZWJ4KQotCVBVU0gJKCVlZGkpCi0JUFVTSAkoJWVzaSkKLSNpZmRlZiBVU0VfQVNfU1RSTkNNUAotCWNmaV9yZW1lbWJlcl9zdGF0ZQotI2VuZGlmCi0KLQltb3ZsCSVlZHgsICVlZGkKLQltb3ZsCSVlYXgsICVlY3gKLQlhbmQJJDB4ZiwgJWVjeAotCWFuZAkkMHhmLCAlZWRpCi0JeG9yCSVlY3gsICVlYXgKLQl4b3IJJWVkaSwgJWVkeAotCXhvcgklZWJ4LCAlZWJ4Ci0JY21wCSVlZGksICVlY3gKLQlqZQlMKGFzaHJfMCkKLQlqYQlMKGJpZ2dlcikKLQlvcgkkMHgyMCwgJWVieAotCXhjaGcJJWVkeCwgJWVheAotCXhjaGcJJWVjeCwgJWVkaQotTChiaWdnZXIpOgotCWxlYQkxNSglZWRpKSwgJWVkaQotCXN1YgklZWN4LCAlZWRpCi0JY21wCSQ4LCAlZWRpCi0JamxlCUwoYXNocl9sZXNzXzgpCi0JY21wCSQxNCwgJWVkaQotCWplCUwoYXNocl8xNSkKLQljbXAJJDEzLCAlZWRpCi0JamUJTChhc2hyXzE0KQotCWNtcAkkMTIsICVlZGkKLQlqZQlMKGFzaHJfMTMpCi0JY21wCSQxMSwgJWVkaQotCWplCUwoYXNocl8xMikKLQljbXAJJDEwLCAlZWRpCi0JamUJTChhc2hyXzExKQotCWNtcAkkOSwgJWVkaQotCWplCUwoYXNocl8xMCkKLUwoYXNocl9sZXNzXzgpOgotCWplCUwoYXNocl85KQotCWNtcAkkNywgJWVkaQotCWplCUwoYXNocl84KQotCWNtcAkkNiwgJWVkaQotCWplCUwoYXNocl83KQotCWNtcAkkNSwgJWVkaQotCWplCUwoYXNocl82KQotCWNtcAkkNCwgJWVkaQotCWplCUwoYXNocl81KQotCWNtcAkkMywgJWVkaQotCWplCUwoYXNocl80KQotCWNtcAkkMiwgJWVkaQotCWplCUwoYXNocl8zKQotCWNtcAkkMSwgJWVkaQotCWplCUwoYXNocl8yKQotCWNtcAkkMCwgJWVkaQotCWplCUwoYXNocl8xKQotCi0vKgotICogVGhlIGZvbGxvd2luZyBjYXNlcyB3aWxsIGJlIGhhbmRsZWQgYnkgYXNocl8wCi0gKiAgZWN4KG9mZnNldCBvZiBlc2kpICBlYXgob2Zmc2V0IG9mIGVkaSkgIHJlbGF0aXZlIG9mZnNldCAgY29ycmVzcG9uZGluZyBjYXNlCi0gKiAgICAgICAgbigwfjE1KSAgICAgICAgICAgIG4oMH4xNSkgICAgICAgICAgIDE1KDE1KyBuLW4pICAgICAgICAgYXNocl8wCi0gKi8KLQkucDJhbGlnbiA0Ci1MKGFzaHJfMCk6Ci0JbW92CSQweGZmZmYsICVlc2kKLQltb3ZkcWEJKCVlYXgpLCAleG1tMQotCXB4b3IJJXhtbTAsICV4bW0wCi0JcGNtcGVxYgkleG1tMSwgJXhtbTAKLQlwY21wZXFiCSglZWR4KSwgJXhtbTEKLQlwc3ViYgkleG1tMCwgJXhtbTEKLQlwbW92bXNrYiAleG1tMSwgJWVkaQotCXNocgklY2wsICVlc2kKLQlzaHIJJWNsLCAlZWRpCi0Jc3ViCSVlZGksICVlc2kKLQltb3YJJWVjeCwgJWVkaQotCWpuZQlMKGxlc3MzMmJ5dGVzKQotCVVQREFURV9TVFJOQ01QX0NPVU5URVIKLQltb3YJJDB4MTAsICVlYngKLQltb3YJJDB4MTAsICVlY3gKLQlweG9yCSV4bW0wLCAleG1tMAotCS5wMmFsaWduIDQKLUwobG9vcF9hc2hyXzApOgotCW1vdmRxYQkoJWVheCwgJWVjeCksICV4bW0xCi0JbW92ZHFhCSglZWR4LCAlZWN4KSwgJXhtbTIKLQotCXBjbXBlcWIJJXhtbTEsICV4bW0wCi0JcGNtcGVxYgkleG1tMiwgJXhtbTEKLQlwc3ViYgkleG1tMCwgJXhtbTEKLQlwbW92bXNrYiAleG1tMSwgJWVzaQotCXN1YgkkMHhmZmZmLCAlZXNpCi0Jam56CUwoZXhpdCkKLSNpZmRlZiBVU0VfQVNfU1RSTkNNUAotCWNtcAkkMTYsICVlYnAKLQlsZWEJLTE2KCVlYnApLCAlZWJwCi0JamJlCUwobW9yZThieXRlc2VxKQotI2VuZGlmCi0JYWRkCSQxNiwgJWVjeAotCWptcAlMKGxvb3BfYXNocl8wKQotCi0vKgotICogVGhlIGZvbGxvd2luZyBjYXNlcyB3aWxsIGJlIGhhbmRsZWQgYnkgYXNocl8xCi0gKiBlY3gob2Zmc2V0IG9mIGVzaSkgIGVheChvZmZzZXQgb2YgZWRpKSAgIHJlbGF0aXZlIG9mZnNldCAgIAljb3JyZXNwb25kaW5nIGNhc2UKLSAqICAgICAgICBuKDE1KSAgICAgICAgICAgIG4gLTE1ICAgICAgICAgICAgMCgxNSArKG4tMTUpIC0gbikgICAgICAgICBhc2hyXzEKLSAqLwotCS5wMmFsaWduIDQKLUwoYXNocl8xKToKLQltb3YJJDB4ZmZmZiwgJWVzaQotCXB4b3IJJXhtbTAsICV4bW0wCi0JbW92ZHFhCSglZWR4KSwgJXhtbTIKLQltb3ZkcWEJKCVlYXgpLCAleG1tMQotCXBjbXBlcWIJJXhtbTEsICV4bW0wCi0JcHNsbGRxCSQxNSwgJXhtbTIKLQlwY21wZXFiCSV4bW0xLCAleG1tMgotCXBzdWJiCSV4bW0wLCAleG1tMgotCXBtb3Ztc2tiICV4bW0yLCAlZWRpCi0Jc2hyCSVjbCwgJWVzaQotCXNocgklY2wsICVlZGkKLQlzdWIJJWVkaSwgJWVzaQotCWxlYQktMTUoJWVjeCksICVlZGkKLQlqbnoJTChsZXNzMzJieXRlcykKLQotCVVQREFURV9TVFJOQ01QX0NPVU5URVIKLQotCW1vdmRxYQkoJWVkeCksICV4bW0zCi0JcHhvcgkleG1tMCwgJXhtbTAKLQltb3YJJDE2LCAlZWN4Ci0Jb3IJJDEsICVlYngKLQlsZWEJMSglZWR4KSwgJWVkaQotCWFuZAkkMHhmZmYsICVlZGkKLQlzdWIJJDB4MTAwMCwgJWVkaQotCi0JLnAyYWxpZ24gNAotTChsb29wX2FzaHJfMSk6Ci0JYWRkCSQxNiwgJWVkaQotCWpnCUwobmliYmxlX2FzaHJfMSkKLQotTChnb2JibGVfYXNocl8xKToKLQltb3ZkcWEJKCVlYXgsICVlY3gpLCAleG1tMQotCW1vdmRxYQkoJWVkeCwgJWVjeCksICV4bW0yCi0JbW92ZHFhCSV4bW0yLCAleG1tNAotCi0JcGFsaWducgkkMSwgJXhtbTMsICV4bW0yCi0KLQlwY21wZXFiCSV4bW0xLCAleG1tMAotCXBjbXBlcWIJJXhtbTIsICV4bW0xCi0JcHN1YmIJJXhtbTAsICV4bW0xCi0JcG1vdm1za2IgJXhtbTEsICVlc2kKLQlzdWIJJDB4ZmZmZiwgJWVzaQotCWpueglMKGV4aXQpCi0jaWZkZWYgVVNFX0FTX1NUUk5DTVAKLQljbXAJJDE2LCAlZWJwCi0JbGVhCS0xNiglZWJwKSwgJWVicAotCWpiZQlMKG1vcmU4Ynl0ZXNlcSkKLSNlbmRpZgotCi0JYWRkCSQxNiwgJWVjeAotCW1vdmRxYQkleG1tNCwgJXhtbTMKLQotCWFkZAkkMTYsICVlZGkKLQlqZwlMKG5pYmJsZV9hc2hyXzEpCi0KLQltb3ZkcWEJKCVlYXgsICVlY3gpLCAleG1tMQotCW1vdmRxYQkoJWVkeCwgJWVjeCksICV4bW0yCi0JbW92ZHFhCSV4bW0yLCAleG1tNAotCi0JcGFsaWducgkkMSwgJXhtbTMsICV4bW0yCi0KLQlwY21wZXFiCSV4bW0xLCAleG1tMAotCXBjbXBlcWIJJXhtbTIsICV4bW0xCi0JcHN1YmIJJXhtbTAsICV4bW0xCi0JcG1vdm1za2IgJXhtbTEsICVlc2kKLQlzdWIJJDB4ZmZmZiwgJWVzaQotCWpueglMKGV4aXQpCi0KLSNpZmRlZiBVU0VfQVNfU1RSTkNNUAotCWNtcAkkMTYsICVlYnAKLQlsZWEJLTE2KCVlYnApLCAlZWJwCi0JamJlCUwobW9yZThieXRlc2VxKQotI2VuZGlmCi0JYWRkCSQxNiwgJWVjeAotCW1vdmRxYQkleG1tNCwgJXhtbTMKLQlqbXAJTChsb29wX2FzaHJfMSkKLQotCS5wMmFsaWduIDQKLUwobmliYmxlX2FzaHJfMSk6Ci0JcGNtcGVxYgkleG1tMywgJXhtbTAKLQlwbW92bXNrYiAleG1tMCwgJWVzaQotCXRlc3QJJDB4ZmZmZSwgJWVzaQotCWpueglMKGFzaHJfMV9leGl0dGFpbCkKLQotI2lmZGVmIFVTRV9BU19TVFJOQ01QCi0JY21wCSQxNSwgJWVicAotCWpiZQlMKGFzaHJfMV9leGl0dGFpbCkKLSNlbmRpZgotCXB4b3IJJXhtbTAsICV4bW0wCi0Jc3ViCSQweDEwMDAsICVlZGkKLQlqbXAJTChnb2JibGVfYXNocl8xKQotCi0JLnAyYWxpZ24gNAotTChhc2hyXzFfZXhpdHRhaWwpOgotCW1vdmRxYQkoJWVheCwgJWVjeCksICV4bW0xCi0JcHNybGRxCSQxLCAleG1tMAotCXBzcmxkcQkkMSwgJXhtbTMKLQlqbXAJTChhZnRlcnRhaWwpCi0KLS8qCi0gKiBUaGUgZm9sbG93aW5nIGNhc2VzIHdpbGwgYmUgaGFuZGxlZCBieSBhc2hyXzIKLSAqIGVjeChvZmZzZXQgb2YgZXNpKSAgZWF4KG9mZnNldCBvZiBlZGkpICAgcmVsYXRpdmUgb2Zmc2V0ICAgCWNvcnJlc3BvbmRpbmcgY2FzZQotICogICAgICAgIG4oMTR+MTUpICAgICAgICAgICAgbiAtMTQgICAgICAgICAgICAxKDE1ICsobi0xNCkgLSBuKSAgICAgICAgIGFzaHJfMgotICovCi0JLnAyYWxpZ24gNAotTChhc2hyXzIpOgotCW1vdgkkMHhmZmZmLCAlZXNpCi0JcHhvcgkleG1tMCwgJXhtbTAKLQltb3ZkcWEJKCVlZHgpLCAleG1tMgotCW1vdmRxYQkoJWVheCksICV4bW0xCi0JcGNtcGVxYgkleG1tMSwgJXhtbTAKLQlwc2xsZHEJJDE0LCAleG1tMgotCXBjbXBlcWIJJXhtbTEsICV4bW0yCi0JcHN1YmIJJXhtbTAsICV4bW0yCi0JcG1vdm1za2IgJXhtbTIsICVlZGkKLQlzaHIJJWNsLCAlZXNpCi0Jc2hyCSVjbCwgJWVkaQotCXN1YgklZWRpLCAlZXNpCi0JbGVhCS0xNCglZWN4KSwgJWVkaQotCWpueglMKGxlc3MzMmJ5dGVzKQotCi0JVVBEQVRFX1NUUk5DTVBfQ09VTlRFUgotCi0JbW92ZHFhCSglZWR4KSwgJXhtbTMKLQlweG9yCSV4bW0wLCAleG1tMAotCW1vdgkkMTYsICVlY3gKLQlvcgkkMiwgJWVieAotCWxlYQkyKCVlZHgpLCAlZWRpCi0JYW5kCSQweGZmZiwgJWVkaQotCXN1YgkkMHgxMDAwLCAlZWRpCi0KLQkucDJhbGlnbiA0Ci1MKGxvb3BfYXNocl8yKToKLQlhZGQJJDE2LCAlZWRpCi0JamcJTChuaWJibGVfYXNocl8yKQotCi1MKGdvYmJsZV9hc2hyXzIpOgotCW1vdmRxYQkoJWVheCwgJWVjeCksICV4bW0xCi0JbW92ZHFhCSglZWR4LCAlZWN4KSwgJXhtbTIKLQltb3ZkcWEJJXhtbTIsICV4bW00Ci0KLQlwYWxpZ25yCSQyLCAleG1tMywgJXhtbTIKLQotCXBjbXBlcWIJJXhtbTEsICV4bW0wCi0JcGNtcGVxYgkleG1tMiwgJXhtbTEKLQlwc3ViYgkleG1tMCwgJXhtbTEKLQlwbW92bXNrYiAleG1tMSwgJWVzaQotCXN1YgkkMHhmZmZmLCAlZXNpCi0Jam56CUwoZXhpdCkKLQotI2lmZGVmIFVTRV9BU19TVFJOQ01QCi0JY21wCSQxNiwgJWVicAotCWxlYQktMTYoJWVicCksICVlYnAKLQlqYmUJTChtb3JlOGJ5dGVzZXEpCi0jZW5kaWYKLQlhZGQJJDE2LCAlZWN4Ci0JbW92ZHFhCSV4bW00LCAleG1tMwotCi0JYWRkCSQxNiwgJWVkaQotCWpnCUwobmliYmxlX2FzaHJfMikKLQotCW1vdmRxYQkoJWVheCwgJWVjeCksICV4bW0xCi0JbW92ZHFhCSglZWR4LCAlZWN4KSwgJXhtbTIKLQltb3ZkcWEJJXhtbTIsICV4bW00Ci0KLQlwYWxpZ25yCSQyLCAleG1tMywgJXhtbTIKLQotCXBjbXBlcWIJJXhtbTEsICV4bW0wCi0JcGNtcGVxYgkleG1tMiwgJXhtbTEKLQlwc3ViYgkleG1tMCwgJXhtbTEKLQlwbW92bXNrYiAleG1tMSwgJWVzaQotCXN1YgkkMHhmZmZmLCAlZXNpCi0Jam56CUwoZXhpdCkKLQotI2lmZGVmIFVTRV9BU19TVFJOQ01QCi0JY21wCSQxNiwgJWVicAotCWxlYQktMTYoJWVicCksICVlYnAKLQlqYmUJTChtb3JlOGJ5dGVzZXEpCi0jZW5kaWYKLQlhZGQJJDE2LCAlZWN4Ci0JbW92ZHFhCSV4bW00LCAleG1tMwotCWptcAlMKGxvb3BfYXNocl8yKQotCi0JLnAyYWxpZ24gNAotTChuaWJibGVfYXNocl8yKToKLQlwY21wZXFiCSV4bW0zLCAleG1tMAotCXBtb3Ztc2tiICV4bW0wLCAlZXNpCi0JdGVzdAkkMHhmZmZjLCAlZXNpCi0Jam56CUwoYXNocl8yX2V4aXR0YWlsKQotCi0jaWZkZWYgVVNFX0FTX1NUUk5DTVAKLQljbXAJJDE0LCAlZWJwCi0JamJlCUwoYXNocl8yX2V4aXR0YWlsKQotI2VuZGlmCi0KLQlweG9yCSV4bW0wLCAleG1tMAotCXN1YgkkMHgxMDAwLCAlZWRpCi0Jam1wCUwoZ29iYmxlX2FzaHJfMikKLQotCS5wMmFsaWduIDQKLUwoYXNocl8yX2V4aXR0YWlsKToKLQltb3ZkcWEJKCVlYXgsICVlY3gpLCAleG1tMQotCXBzcmxkcQkkMiwgJXhtbTAKLQlwc3JsZHEJJDIsICV4bW0zCi0Jam1wCUwoYWZ0ZXJ0YWlsKQotCi0vKgotICogVGhlIGZvbGxvd2luZyBjYXNlcyB3aWxsIGJlIGhhbmRsZWQgYnkgYXNocl8zCi0gKiBlY3gob2Zmc2V0IG9mIGVzaSkgIGVheChvZmZzZXQgb2YgZWRpKSAgIHJlbGF0aXZlIG9mZnNldCAgIAljb3JyZXNwb25kaW5nIGNhc2UKLSAqICAgICAgICBuKDEzfjE1KSAgICAgICAgICAgIG4gLTEzICAgICAgICAgICAgMigxNSArKG4tMTMpIC0gbikgICAgICAgICBhc2hyXzMKLSAqLwotCS5wMmFsaWduIDQKLUwoYXNocl8zKToKLQltb3YJJDB4ZmZmZiwgJWVzaQotCXB4b3IJJXhtbTAsICV4bW0wCi0JbW92ZHFhCSglZWR4KSwgJXhtbTIKLQltb3ZkcWEJKCVlYXgpLCAleG1tMQotCXBjbXBlcWIJJXhtbTEsICV4bW0wCi0JcHNsbGRxCSQxMywgJXhtbTIKLQlwY21wZXFiCSV4bW0xLCAleG1tMgotCXBzdWJiCSV4bW0wLCAleG1tMgotCXBtb3Ztc2tiICV4bW0yLCAlZWRpCi0Jc2hyCSVjbCwgJWVzaQotCXNocgklY2wsICVlZGkKLQlzdWIJJWVkaSwgJWVzaQotCWxlYQktMTMoJWVjeCksICVlZGkKLQlqbnoJTChsZXNzMzJieXRlcykKLQotCVVQREFURV9TVFJOQ01QX0NPVU5URVIKLQotCW1vdmRxYQkoJWVkeCksICV4bW0zCi0JcHhvcgkleG1tMCwgJXhtbTAKLQltb3YJJDE2LCAlZWN4Ci0Jb3IJJDMsICVlYngKLQlsZWEJMyglZWR4KSwgJWVkaQotCWFuZAkkMHhmZmYsICVlZGkKLQlzdWIJJDB4MTAwMCwgJWVkaQotCi0JLnAyYWxpZ24gNAotTChsb29wX2FzaHJfMyk6Ci0JYWRkCSQxNiwgJWVkaQotCWpnCUwobmliYmxlX2FzaHJfMykKLQotTChnb2JibGVfYXNocl8zKToKLQltb3ZkcWEJKCVlYXgsICVlY3gpLCAleG1tMQotCW1vdmRxYQkoJWVkeCwgJWVjeCksICV4bW0yCi0JbW92ZHFhCSV4bW0yLCAleG1tNAotCi0JcGFsaWducgkkMywgJXhtbTMsICV4bW0yCi0KLQlwY21wZXFiCSV4bW0xLCAleG1tMAotCXBjbXBlcWIJJXhtbTIsICV4bW0xCi0JcHN1YmIJJXhtbTAsICV4bW0xCi0JcG1vdm1za2IgJXhtbTEsICVlc2kKLQlzdWIJJDB4ZmZmZiwgJWVzaQotCWpueglMKGV4aXQpCi0KLSNpZmRlZiBVU0VfQVNfU1RSTkNNUAotCWNtcAkkMTYsICVlYnAKLQlsZWEJLTE2KCVlYnApLCAlZWJwCi0JamJlCUwobW9yZThieXRlc2VxKQotI2VuZGlmCi0JYWRkCSQxNiwgJWVjeAotCW1vdmRxYQkleG1tNCwgJXhtbTMKLQotCWFkZAkkMTYsICVlZGkKLQlqZwlMKG5pYmJsZV9hc2hyXzMpCi0KLQltb3ZkcWEJKCVlYXgsICVlY3gpLCAleG1tMQotCW1vdmRxYQkoJWVkeCwgJWVjeCksICV4bW0yCi0JbW92ZHFhCSV4bW0yLCAleG1tNAotCi0JcGFsaWducgkkMywgJXhtbTMsICV4bW0yCi0KLQlwY21wZXFiCSV4bW0xLCAleG1tMAotCXBjbXBlcWIJJXhtbTIsICV4bW0xCi0JcHN1YmIJJXhtbTAsICV4bW0xCi0JcG1vdm1za2IgJXhtbTEsICVlc2kKLQlzdWIJJDB4ZmZmZiwgJWVzaQotCWpueglMKGV4aXQpCi0KLSNpZmRlZiBVU0VfQVNfU1RSTkNNUAotCWNtcAkkMTYsICVlYnAKLQlsZWEJLTE2KCVlYnApLCAlZWJwCi0JamJlCUwobW9yZThieXRlc2VxKQotI2VuZGlmCi0JYWRkCSQxNiwgJWVjeAotCW1vdmRxYQkleG1tNCwgJXhtbTMKLQlqbXAJTChsb29wX2FzaHJfMykKLQotCS5wMmFsaWduIDQKLUwobmliYmxlX2FzaHJfMyk6Ci0JcGNtcGVxYgkleG1tMywgJXhtbTAKLQlwbW92bXNrYiAleG1tMCwgJWVzaQotCXRlc3QJJDB4ZmZmOCwgJWVzaQotCWpueglMKGFzaHJfM19leGl0dGFpbCkKLQotI2lmZGVmIFVTRV9BU19TVFJOQ01QCi0JY21wCSQxMywgJWVicAotCWpiZQlMKGFzaHJfM19leGl0dGFpbCkKLSNlbmRpZgotCXB4b3IJJXhtbTAsICV4bW0wCi0Jc3ViCSQweDEwMDAsICVlZGkKLQlqbXAJTChnb2JibGVfYXNocl8zKQotCi0JLnAyYWxpZ24gNAotTChhc2hyXzNfZXhpdHRhaWwpOgotCW1vdmRxYQkoJWVheCwgJWVjeCksICV4bW0xCi0JcHNybGRxCSQzLCAleG1tMAotCXBzcmxkcQkkMywgJXhtbTMKLQlqbXAJTChhZnRlcnRhaWwpCi0KLS8qCi0gKiBUaGUgZm9sbG93aW5nIGNhc2VzIHdpbGwgYmUgaGFuZGxlZCBieSBhc2hyXzQKLSAqIGVjeChvZmZzZXQgb2YgZXNpKSAgZWF4KG9mZnNldCBvZiBlZGkpICAgcmVsYXRpdmUgb2Zmc2V0ICAgCWNvcnJlc3BvbmRpbmcgY2FzZQotICogICAgICAgIG4oMTJ+MTUpICAgICAgICAgICAgbiAtMTIgICAgICAgICAgICAzKDE1ICsobi0xMikgLSBuKSAgICAgICAgIGFzaHJfNAotICovCi0JLnAyYWxpZ24gNAotTChhc2hyXzQpOgotCW1vdgkkMHhmZmZmLCAlZXNpCi0JcHhvcgkleG1tMCwgJXhtbTAKLQltb3ZkcWEJKCVlZHgpLCAleG1tMgotCW1vdmRxYQkoJWVheCksICV4bW0xCi0JcGNtcGVxYgkleG1tMSwgJXhtbTAKLQlwc2xsZHEJJDEyLCAleG1tMgotCXBjbXBlcWIJJXhtbTEsICV4bW0yCi0JcHN1YmIJJXhtbTAsICV4bW0yCi0JcG1vdm1za2IgJXhtbTIsICVlZGkKLQlzaHIJJWNsLCAlZXNpCi0Jc2hyCSVjbCwgJWVkaQotCXN1YgklZWRpLCAlZXNpCi0JbGVhCS0xMiglZWN4KSwgJWVkaQotCWpueglMKGxlc3MzMmJ5dGVzKQotCi0JVVBEQVRFX1NUUk5DTVBfQ09VTlRFUgotCi0JbW92ZHFhCSglZWR4KSwgJXhtbTMKLQlweG9yCSV4bW0wLCAleG1tMAotCW1vdgkkMTYsICVlY3gKLQlvcgkkNCwgJWVieAotCWxlYQk0KCVlZHgpLCAlZWRpCi0JYW5kCSQweGZmZiwgJWVkaQotCXN1YgkkMHgxMDAwLCAlZWRpCi0KLQkucDJhbGlnbiA0Ci1MKGxvb3BfYXNocl80KToKLQlhZGQJJDE2LCAlZWRpCi0JamcJTChuaWJibGVfYXNocl80KQotCi1MKGdvYmJsZV9hc2hyXzQpOgotCW1vdmRxYQkoJWVheCwgJWVjeCksICV4bW0xCi0JbW92ZHFhCSglZWR4LCAlZWN4KSwgJXhtbTIKLQltb3ZkcWEJJXhtbTIsICV4bW00Ci0KLQlwYWxpZ25yCSQ0LCAleG1tMywgJXhtbTIKLQotCXBjbXBlcWIJJXhtbTEsICV4bW0wCi0JcGNtcGVxYgkleG1tMiwgJXhtbTEKLQlwc3ViYgkleG1tMCwgJXhtbTEKLQlwbW92bXNrYiAleG1tMSwgJWVzaQotCXN1YgkkMHhmZmZmLCAlZXNpCi0Jam56CUwoZXhpdCkKLQotI2lmZGVmIFVTRV9BU19TVFJOQ01QCi0JY21wCSQxNiwgJWVicAotCWxlYQktMTYoJWVicCksICVlYnAKLQlqYmUJTChtb3JlOGJ5dGVzZXEpCi0jZW5kaWYKLQotCWFkZAkkMTYsICVlY3gKLQltb3ZkcWEJJXhtbTQsICV4bW0zCi0KLQlhZGQJJDE2LCAlZWRpCi0JamcJTChuaWJibGVfYXNocl80KQotCi0JbW92ZHFhCSglZWF4LCAlZWN4KSwgJXhtbTEKLQltb3ZkcWEJKCVlZHgsICVlY3gpLCAleG1tMgotCW1vdmRxYQkleG1tMiwgJXhtbTQKLQotCXBhbGlnbnIJJDQsICV4bW0zLCAleG1tMgotCi0JcGNtcGVxYgkleG1tMSwgJXhtbTAKLQlwY21wZXFiCSV4bW0yLCAleG1tMQotCXBzdWJiCSV4bW0wLCAleG1tMQotCXBtb3Ztc2tiICV4bW0xLCAlZXNpCi0Jc3ViCSQweGZmZmYsICVlc2kKLQlqbnoJTChleGl0KQotCi0jaWZkZWYgVVNFX0FTX1NUUk5DTVAKLQljbXAJJDE2LCAlZWJwCi0JbGVhCS0xNiglZWJwKSwgJWVicAotCWpiZQlMKG1vcmU4Ynl0ZXNlcSkKLSNlbmRpZgotCi0JYWRkCSQxNiwgJWVjeAotCW1vdmRxYQkleG1tNCwgJXhtbTMKLQlqbXAJTChsb29wX2FzaHJfNCkKLQotCS5wMmFsaWduIDQKLUwobmliYmxlX2FzaHJfNCk6Ci0JcGNtcGVxYgkleG1tMywgJXhtbTAKLQlwbW92bXNrYiAleG1tMCwgJWVzaQotCXRlc3QJJDB4ZmZmMCwgJWVzaQotCWpueglMKGFzaHJfNF9leGl0dGFpbCkKLQotI2lmZGVmIFVTRV9BU19TVFJOQ01QCi0JY21wCSQxMiwgJWVicAotCWpiZQlMKGFzaHJfNF9leGl0dGFpbCkKLSNlbmRpZgotCi0JcHhvcgkleG1tMCwgJXhtbTAKLQlzdWIJJDB4MTAwMCwgJWVkaQotCWptcAlMKGdvYmJsZV9hc2hyXzQpCi0KLQkucDJhbGlnbiA0Ci1MKGFzaHJfNF9leGl0dGFpbCk6Ci0JbW92ZHFhCSglZWF4LCAlZWN4KSwgJXhtbTEKLQlwc3JsZHEJJDQsICV4bW0wCi0JcHNybGRxCSQ0LCAleG1tMwotCWptcAlMKGFmdGVydGFpbCkKLQotLyoKLSAqIFRoZSBmb2xsb3dpbmcgY2FzZXMgd2lsbCBiZSBoYW5kbGVkIGJ5IGFzaHJfNQotICogZWN4KG9mZnNldCBvZiBlc2kpICBlYXgob2Zmc2V0IG9mIGVkaSkgICByZWxhdGl2ZSBvZmZzZXQgICAJY29ycmVzcG9uZGluZyBjYXNlCi0gKiAgICAgICAgbigxMX4xNSkgICAgICAgICAgICBuIC0xMSAgICAgICAgICAgIDQoMTUgKyhuLTExKSAtIG4pICAgICAgICAgYXNocl81Ci0gKi8KLQkucDJhbGlnbiA0Ci1MKGFzaHJfNSk6Ci0JbW92CSQweGZmZmYsICVlc2kKLQlweG9yCSV4bW0wLCAleG1tMAotCW1vdmRxYQkoJWVkeCksICV4bW0yCi0JbW92ZHFhCSglZWF4KSwgJXhtbTEKLQlwY21wZXFiCSV4bW0xLCAleG1tMAotCXBzbGxkcQkkMTEsICV4bW0yCi0JcGNtcGVxYgkleG1tMSwgJXhtbTIKLQlwc3ViYgkleG1tMCwgJXhtbTIKLQlwbW92bXNrYiAleG1tMiwgJWVkaQotCXNocgklY2wsICVlc2kKLQlzaHIJJWNsLCAlZWRpCi0Jc3ViCSVlZGksICVlc2kKLQlsZWEJLTExKCVlY3gpLCAlZWRpCi0Jam56CUwobGVzczMyYnl0ZXMpCi0KLQlVUERBVEVfU1RSTkNNUF9DT1VOVEVSCi0KLQltb3ZkcWEJKCVlZHgpLCAleG1tMwotCXB4b3IJJXhtbTAsICV4bW0wCi0JbW92CSQxNiwgJWVjeAotCW9yCSQ1LCAlZWJ4Ci0JbGVhCTUoJWVkeCksICVlZGkKLQlhbmQJJDB4ZmZmLCAlZWRpCi0Jc3ViCSQweDEwMDAsICVlZGkKLQotCS5wMmFsaWduIDQKLUwobG9vcF9hc2hyXzUpOgotCWFkZAkkMTYsICVlZGkKLQlqZwlMKG5pYmJsZV9hc2hyXzUpCi0KLUwoZ29iYmxlX2FzaHJfNSk6Ci0JbW92ZHFhCSglZWF4LCAlZWN4KSwgJXhtbTEKLQltb3ZkcWEJKCVlZHgsICVlY3gpLCAleG1tMgotCW1vdmRxYQkleG1tMiwgJXhtbTQKLQotCXBhbGlnbnIJJDUsICV4bW0zLCAleG1tMgotCi0JcGNtcGVxYgkleG1tMSwgJXhtbTAKLQlwY21wZXFiCSV4bW0yLCAleG1tMQotCXBzdWJiCSV4bW0wLCAleG1tMQotCXBtb3Ztc2tiICV4bW0xLCAlZXNpCi0Jc3ViCSQweGZmZmYsICVlc2kKLQlqbnoJTChleGl0KQotCi0jaWZkZWYgVVNFX0FTX1NUUk5DTVAKLQljbXAJJDE2LCAlZWJwCi0JbGVhCS0xNiglZWJwKSwgJWVicAotCWpiZQlMKG1vcmU4Ynl0ZXNlcSkKLSNlbmRpZgotCWFkZAkkMTYsICVlY3gKLQltb3ZkcWEJJXhtbTQsICV4bW0zCi0KLQlhZGQJJDE2LCAlZWRpCi0JamcJTChuaWJibGVfYXNocl81KQotCi0JbW92ZHFhCSglZWF4LCAlZWN4KSwgJXhtbTEKLQltb3ZkcWEJKCVlZHgsICVlY3gpLCAleG1tMgotCW1vdmRxYQkleG1tMiwgJXhtbTQKLQotCXBhbGlnbnIJJDUsICV4bW0zLCAleG1tMgotCi0JcGNtcGVxYgkleG1tMSwgJXhtbTAKLQlwY21wZXFiCSV4bW0yLCAleG1tMQotCXBzdWJiCSV4bW0wLCAleG1tMQotCXBtb3Ztc2tiICV4bW0xLCAlZXNpCi0Jc3ViCSQweGZmZmYsICVlc2kKLQlqbnoJTChleGl0KQotCi0jaWZkZWYgVVNFX0FTX1NUUk5DTVAKLQljbXAJJDE2LCAlZWJwCi0JbGVhCS0xNiglZWJwKSwgJWVicAotCWpiZQlMKG1vcmU4Ynl0ZXNlcSkKLSNlbmRpZgotCWFkZAkkMTYsICVlY3gKLQltb3ZkcWEJJXhtbTQsICV4bW0zCi0Jam1wCUwobG9vcF9hc2hyXzUpCi0KLQkucDJhbGlnbiA0Ci1MKG5pYmJsZV9hc2hyXzUpOgotCXBjbXBlcWIJJXhtbTMsICV4bW0wCi0JcG1vdm1za2IgJXhtbTAsICVlc2kKLQl0ZXN0CSQweGZmZTAsICVlc2kKLQlqbnoJTChhc2hyXzVfZXhpdHRhaWwpCi0KLSNpZmRlZiBVU0VfQVNfU1RSTkNNUAotCWNtcAkkMTEsICVlYnAKLQlqYmUJTChhc2hyXzVfZXhpdHRhaWwpCi0jZW5kaWYKLQlweG9yCSV4bW0wLCAleG1tMAotCXN1YgkkMHgxMDAwLCAlZWRpCi0Jam1wCUwoZ29iYmxlX2FzaHJfNSkKLQotCS5wMmFsaWduIDQKLUwoYXNocl81X2V4aXR0YWlsKToKLQltb3ZkcWEJKCVlYXgsICVlY3gpLCAleG1tMQotCXBzcmxkcQkkNSwgJXhtbTAKLQlwc3JsZHEJJDUsICV4bW0zCi0Jam1wCUwoYWZ0ZXJ0YWlsKQotCi0vKgotICogVGhlIGZvbGxvd2luZyBjYXNlcyB3aWxsIGJlIGhhbmRsZWQgYnkgYXNocl82Ci0gKiBlY3gob2Zmc2V0IG9mIGVzaSkgIGVheChvZmZzZXQgb2YgZWRpKSAgIHJlbGF0aXZlIG9mZnNldCAgIAljb3JyZXNwb25kaW5nIGNhc2UKLSAqICAgICAgICBuKDEwfjE1KSAgICAgICAgICAgIG4gLTEwICAgICAgICAgICAgNSgxNSArKG4tMTApIC0gbikgICAgICAgICBhc2hyXzYKLSAqLwotCi0JLnAyYWxpZ24gNAotTChhc2hyXzYpOgotCW1vdgkkMHhmZmZmLCAlZXNpCi0JcHhvcgkleG1tMCwgJXhtbTAKLQltb3ZkcWEJKCVlZHgpLCAleG1tMgotCW1vdmRxYQkoJWVheCksICV4bW0xCi0JcGNtcGVxYgkleG1tMSwgJXhtbTAKLQlwc2xsZHEJJDEwLCAleG1tMgotCXBjbXBlcWIJJXhtbTEsICV4bW0yCi0JcHN1YmIJJXhtbTAsICV4bW0yCi0JcG1vdm1za2IgJXhtbTIsICVlZGkKLQlzaHIJJWNsLCAlZXNpCi0Jc2hyCSVjbCwgJWVkaQotCXN1YgklZWRpLCAlZXNpCi0JbGVhCS0xMCglZWN4KSwgJWVkaQotCWpueglMKGxlc3MzMmJ5dGVzKQotCi0JVVBEQVRFX1NUUk5DTVBfQ09VTlRFUgotCi0JbW92ZHFhCSglZWR4KSwgJXhtbTMKLQlweG9yCSV4bW0wLCAleG1tMAotCW1vdgkkMTYsICVlY3gKLQlvcgkkNiwgJWVieAotCWxlYQk2KCVlZHgpLCAlZWRpCi0JYW5kCSQweGZmZiwgJWVkaQotCXN1YgkkMHgxMDAwLCAlZWRpCi0KLQkucDJhbGlnbiA0Ci1MKGxvb3BfYXNocl82KToKLQlhZGQJJDE2LCAlZWRpCi0JamcJTChuaWJibGVfYXNocl82KQotCi1MKGdvYmJsZV9hc2hyXzYpOgotCW1vdmRxYQkoJWVheCwgJWVjeCksICV4bW0xCi0JbW92ZHFhCSglZWR4LCAlZWN4KSwgJXhtbTIKLQltb3ZkcWEJJXhtbTIsICV4bW00Ci0KLQlwYWxpZ25yCSQ2LCAleG1tMywgJXhtbTIKLQotCXBjbXBlcWIJJXhtbTEsICV4bW0wCi0JcGNtcGVxYgkleG1tMiwgJXhtbTEKLQlwc3ViYgkleG1tMCwgJXhtbTEKLQlwbW92bXNrYiAleG1tMSwgJWVzaQotCXN1YgkkMHhmZmZmLCAlZXNpCi0Jam56CUwoZXhpdCkKLQotI2lmZGVmIFVTRV9BU19TVFJOQ01QCi0JY21wCSQxNiwgJWVicAotCWxlYQktMTYoJWVicCksICVlYnAKLQlqYmUJTChtb3JlOGJ5dGVzZXEpCi0jZW5kaWYKLQotCWFkZAkkMTYsICVlY3gKLQltb3ZkcWEJJXhtbTQsICV4bW0zCi0KLQlhZGQJJDE2LCAlZWRpCi0JamcJTChuaWJibGVfYXNocl82KQotCi0JbW92ZHFhCSglZWF4LCAlZWN4KSwgJXhtbTEKLQltb3ZkcWEJKCVlZHgsICVlY3gpLCAleG1tMgotCW1vdmRxYQkleG1tMiwgJXhtbTQKLQotCXBhbGlnbnIJJDYsICV4bW0zLCAleG1tMgotCi0JcGNtcGVxYgkleG1tMSwgJXhtbTAKLQlwY21wZXFiCSV4bW0yLCAleG1tMQotCXBzdWJiCSV4bW0wLCAleG1tMQotCXBtb3Ztc2tiICV4bW0xLCAlZXNpCi0Jc3ViCSQweGZmZmYsICVlc2kKLQlqbnoJTChleGl0KQotI2lmZGVmIFVTRV9BU19TVFJOQ01QCi0JY21wCSQxNiwgJWVicAotCWxlYQktMTYoJWVicCksICVlYnAKLQlqYmUJTChtb3JlOGJ5dGVzZXEpCi0jZW5kaWYKLQotCWFkZAkkMTYsICVlY3gKLQltb3ZkcWEJJXhtbTQsICV4bW0zCi0Jam1wCUwobG9vcF9hc2hyXzYpCi0KLQkucDJhbGlnbiA0Ci1MKG5pYmJsZV9hc2hyXzYpOgotCXBjbXBlcWIJJXhtbTMsICV4bW0wCi0JcG1vdm1za2IgJXhtbTAsICVlc2kKLQl0ZXN0CSQweGZmYzAsICVlc2kKLQlqbnoJTChhc2hyXzZfZXhpdHRhaWwpCi0KLSNpZmRlZiBVU0VfQVNfU1RSTkNNUAotCWNtcAkkMTAsICVlYnAKLQlqYmUJTChhc2hyXzZfZXhpdHRhaWwpCi0jZW5kaWYKLQlweG9yCSV4bW0wLCAleG1tMAotCXN1YgkkMHgxMDAwLCAlZWRpCi0Jam1wCUwoZ29iYmxlX2FzaHJfNikKLQotCS5wMmFsaWduIDQKLUwoYXNocl82X2V4aXR0YWlsKToKLQltb3ZkcWEJKCVlYXgsICVlY3gpLCAleG1tMQotCXBzcmxkcQkkNiwgJXhtbTAKLQlwc3JsZHEJJDYsICV4bW0zCi0Jam1wCUwoYWZ0ZXJ0YWlsKQotCi0vKgotICogVGhlIGZvbGxvd2luZyBjYXNlcyB3aWxsIGJlIGhhbmRsZWQgYnkgYXNocl83Ci0gKiBlY3gob2Zmc2V0IG9mIGVzaSkgIGVheChvZmZzZXQgb2YgZWRpKSAgIHJlbGF0aXZlIG9mZnNldCAgIAljb3JyZXNwb25kaW5nIGNhc2UKLSAqICAgICAgICBuKDl+MTUpICAgICAgICAgICAgbiAtIDkgICAgICAgICAgICA2KDE1ICsobi05KSAtIG4pICAgICAgICAgYXNocl83Ci0gKi8KLQotCS5wMmFsaWduIDQKLUwoYXNocl83KToKLQltb3YJJDB4ZmZmZiwgJWVzaQotCXB4b3IJJXhtbTAsICV4bW0wCi0JbW92ZHFhCSglZWR4KSwgJXhtbTIKLQltb3ZkcWEJKCVlYXgpLCAleG1tMQotCXBjbXBlcWIJJXhtbTEsICV4bW0wCi0JcHNsbGRxCSQ5LCAleG1tMgotCXBjbXBlcWIJJXhtbTEsICV4bW0yCi0JcHN1YmIJJXhtbTAsICV4bW0yCi0JcG1vdm1za2IgJXhtbTIsICVlZGkKLQlzaHIJJWNsLCAlZXNpCi0Jc2hyCSVjbCwgJWVkaQotCXN1YgklZWRpLCAlZXNpCi0JbGVhCS05KCVlY3gpLCAlZWRpCi0Jam56CUwobGVzczMyYnl0ZXMpCi0KLQlVUERBVEVfU1RSTkNNUF9DT1VOVEVSCi0KLQltb3ZkcWEJKCVlZHgpLCAleG1tMwotCXB4b3IJJXhtbTAsICV4bW0wCi0JbW92CSQxNiwgJWVjeAotCW9yCSQ3LCAlZWJ4Ci0JbGVhCTgoJWVkeCksICVlZGkKLQlhbmQJJDB4ZmZmLCAlZWRpCi0Jc3ViCSQweDEwMDAsICVlZGkKLQotCS5wMmFsaWduIDQKLUwobG9vcF9hc2hyXzcpOgotCWFkZAkkMTYsICVlZGkKLQlqZwlMKG5pYmJsZV9hc2hyXzcpCi0KLUwoZ29iYmxlX2FzaHJfNyk6Ci0JbW92ZHFhCSglZWF4LCAlZWN4KSwgJXhtbTEKLQltb3ZkcWEJKCVlZHgsICVlY3gpLCAleG1tMgotCW1vdmRxYQkleG1tMiwgJXhtbTQKLQotCXBhbGlnbnIJJDcsICV4bW0zLCAleG1tMgotCi0JcGNtcGVxYgkleG1tMSwgJXhtbTAKLQlwY21wZXFiCSV4bW0yLCAleG1tMQotCXBzdWJiCSV4bW0wLCAleG1tMQotCXBtb3Ztc2tiICV4bW0xLCAlZXNpCi0Jc3ViCSQweGZmZmYsICVlc2kKLQlqbnoJTChleGl0KQotCi0jaWZkZWYgVVNFX0FTX1NUUk5DTVAKLQljbXAJJDE2LCAlZWJwCi0JbGVhCS0xNiglZWJwKSwgJWVicAotCWpiZQlMKG1vcmU4Ynl0ZXNlcSkKLSNlbmRpZgotCi0JYWRkCSQxNiwgJWVjeAotCW1vdmRxYQkleG1tNCwgJXhtbTMKLQotCWFkZAkkMTYsICVlZGkKLQlqZwlMKG5pYmJsZV9hc2hyXzcpCi0KLQltb3ZkcWEJKCVlYXgsICVlY3gpLCAleG1tMQotCW1vdmRxYQkoJWVkeCwgJWVjeCksICV4bW0yCi0JbW92ZHFhCSV4bW0yLCAleG1tNAotCi0JcGFsaWducgkkNywgJXhtbTMsICV4bW0yCi0KLQlwY21wZXFiCSV4bW0xLCAleG1tMAotCXBjbXBlcWIJJXhtbTIsICV4bW0xCi0JcHN1YmIJJXhtbTAsICV4bW0xCi0JcG1vdm1za2IgJXhtbTEsICVlc2kKLQlzdWIJJDB4ZmZmZiwgJWVzaQotCWpueglMKGV4aXQpCi0KLSNpZmRlZiBVU0VfQVNfU1RSTkNNUAotCWNtcAkkMTYsICVlYnAKLQlsZWEJLTE2KCVlYnApLCAlZWJwCi0JamJlCUwobW9yZThieXRlc2VxKQotI2VuZGlmCi0KLQlhZGQJJDE2LCAlZWN4Ci0JbW92ZHFhCSV4bW00LCAleG1tMwotCWptcAlMKGxvb3BfYXNocl83KQotCi0JLnAyYWxpZ24gNAotTChuaWJibGVfYXNocl83KToKLQlwY21wZXFiCSV4bW0zLCAleG1tMAotCXBtb3Ztc2tiICV4bW0wLCAlZXNpCi0JdGVzdAkkMHhmZjgwLCAlZXNpCi0Jam56CUwoYXNocl83X2V4aXR0YWlsKQotCi0jaWZkZWYgVVNFX0FTX1NUUk5DTVAKLQljbXAJJDksICVlYnAKLQlqYmUJTChhc2hyXzdfZXhpdHRhaWwpCi0jZW5kaWYKLQlweG9yCSV4bW0wLCAleG1tMAotCXB4b3IJJXhtbTAsICV4bW0wCi0Jc3ViCSQweDEwMDAsICVlZGkKLQlqbXAJTChnb2JibGVfYXNocl83KQotCi0JLnAyYWxpZ24gNAotTChhc2hyXzdfZXhpdHRhaWwpOgotCW1vdmRxYQkoJWVheCwgJWVjeCksICV4bW0xCi0JcHNybGRxCSQ3LCAleG1tMAotCXBzcmxkcQkkNywgJXhtbTMKLQlqbXAJTChhZnRlcnRhaWwpCi0KLS8qCi0gKiBUaGUgZm9sbG93aW5nIGNhc2VzIHdpbGwgYmUgaGFuZGxlZCBieSBhc2hyXzgKLSAqIGVjeChvZmZzZXQgb2YgZXNpKSAgZWF4KG9mZnNldCBvZiBlZGkpICAgcmVsYXRpdmUgb2Zmc2V0ICAgCWNvcnJlc3BvbmRpbmcgY2FzZQotICogICAgICAgIG4oOH4xNSkgICAgICAgICAgICBuIC0gOCAgICAgICAgICAgIDcoMTUgKyhuLTgpIC0gbikgICAgICAgICBhc2hyXzgKLSAqLwotCS5wMmFsaWduIDQKLUwoYXNocl84KToKLQltb3YJJDB4ZmZmZiwgJWVzaQotCXB4b3IJJXhtbTAsICV4bW0wCi0JbW92ZHFhCSglZWR4KSwgJXhtbTIKLQltb3ZkcWEJKCVlYXgpLCAleG1tMQotCXBjbXBlcWIJJXhtbTEsICV4bW0wCi0JcHNsbGRxCSQ4LCAleG1tMgotCXBjbXBlcWIJJXhtbTEsICV4bW0yCi0JcHN1YmIJJXhtbTAsICV4bW0yCi0JcG1vdm1za2IgJXhtbTIsICVlZGkKLQlzaHIJJWNsLCAlZXNpCi0Jc2hyCSVjbCwgJWVkaQotCXN1YgklZWRpLCAlZXNpCi0JbGVhCS04KCVlY3gpLCAlZWRpCi0Jam56CUwobGVzczMyYnl0ZXMpCi0KLQlVUERBVEVfU1RSTkNNUF9DT1VOVEVSCi0KLQltb3ZkcWEJKCVlZHgpLCAleG1tMwotCXB4b3IJJXhtbTAsICV4bW0wCi0JbW92CSQxNiwgJWVjeAotCW9yCSQ4LCAlZWJ4Ci0JbGVhCTgoJWVkeCksICVlZGkKLQlhbmQJJDB4ZmZmLCAlZWRpCi0Jc3ViCSQweDEwMDAsICVlZGkKLQotCS5wMmFsaWduIDQKLUwobG9vcF9hc2hyXzgpOgotCWFkZAkkMTYsICVlZGkKLQlqZwlMKG5pYmJsZV9hc2hyXzgpCi0KLUwoZ29iYmxlX2FzaHJfOCk6Ci0JbW92ZHFhCSglZWF4LCAlZWN4KSwgJXhtbTEKLQltb3ZkcWEJKCVlZHgsICVlY3gpLCAleG1tMgotCW1vdmRxYQkleG1tMiwgJXhtbTQKLQotCXBhbGlnbnIJJDgsICV4bW0zLCAleG1tMgotCi0JcGNtcGVxYgkleG1tMSwgJXhtbTAKLQlwY21wZXFiCSV4bW0yLCAleG1tMQotCXBzdWJiCSV4bW0wLCAleG1tMQotCXBtb3Ztc2tiICV4bW0xLCAlZXNpCi0Jc3ViCSQweGZmZmYsICVlc2kKLQlqbnoJTChleGl0KQotCi0jaWZkZWYgVVNFX0FTX1NUUk5DTVAKLQljbXAJJDE2LCAlZWJwCi0JbGVhCS0xNiglZWJwKSwgJWVicAotCWpiZQlMKG1vcmU4Ynl0ZXNlcSkKLSNlbmRpZgotCWFkZAkkMTYsICVlY3gKLQltb3ZkcWEJJXhtbTQsICV4bW0zCi0KLQlhZGQJJDE2LCAlZWRpCi0JamcJTChuaWJibGVfYXNocl84KQotCi0JbW92ZHFhCSglZWF4LCAlZWN4KSwgJXhtbTEKLQltb3ZkcWEJKCVlZHgsICVlY3gpLCAleG1tMgotCW1vdmRxYQkleG1tMiwgJXhtbTQKLQotCXBhbGlnbnIJJDgsICV4bW0zLCAleG1tMgotCi0JcGNtcGVxYgkleG1tMSwgJXhtbTAKLQlwY21wZXFiCSV4bW0yLCAleG1tMQotCXBzdWJiCSV4bW0wLCAleG1tMQotCXBtb3Ztc2tiICV4bW0xLCAlZXNpCi0Jc3ViCSQweGZmZmYsICVlc2kKLQlqbnoJTChleGl0KQotCi0jaWZkZWYgVVNFX0FTX1NUUk5DTVAKLQljbXAJJDE2LCAlZWJwCi0JbGVhCS0xNiglZWJwKSwgJWVicAotCWpiZQlMKG1vcmU4Ynl0ZXNlcSkKLSNlbmRpZgotCWFkZAkkMTYsICVlY3gKLQltb3ZkcWEJJXhtbTQsICV4bW0zCi0Jam1wCUwobG9vcF9hc2hyXzgpCi0KLQkucDJhbGlnbiA0Ci1MKG5pYmJsZV9hc2hyXzgpOgotCXBjbXBlcWIJJXhtbTMsICV4bW0wCi0JcG1vdm1za2IgJXhtbTAsICVlc2kKLQl0ZXN0CSQweGZmMDAsICVlc2kKLQlqbnoJTChhc2hyXzhfZXhpdHRhaWwpCi0KLSNpZmRlZiBVU0VfQVNfU1RSTkNNUAotCWNtcAkkOCwgJWVicAotCWpiZQlMKGFzaHJfOF9leGl0dGFpbCkKLSNlbmRpZgotCXB4b3IJJXhtbTAsICV4bW0wCi0JcHhvcgkleG1tMCwgJXhtbTAKLQlzdWIJJDB4MTAwMCwgJWVkaQotCWptcAlMKGdvYmJsZV9hc2hyXzgpCi0KLQkucDJhbGlnbiA0Ci1MKGFzaHJfOF9leGl0dGFpbCk6Ci0JbW92ZHFhCSglZWF4LCAlZWN4KSwgJXhtbTEKLQlwc3JsZHEJJDgsICV4bW0wCi0JcHNybGRxCSQ4LCAleG1tMwotCWptcAlMKGFmdGVydGFpbCkKLQotLyoKLSAqIFRoZSBmb2xsb3dpbmcgY2FzZXMgd2lsbCBiZSBoYW5kbGVkIGJ5IGFzaHJfOQotICogZWN4KG9mZnNldCBvZiBlc2kpICBlYXgob2Zmc2V0IG9mIGVkaSkgICByZWxhdGl2ZSBvZmZzZXQgICAJY29ycmVzcG9uZGluZyBjYXNlCi0gKiAgICAgICAgbig3fjE1KSAgICAgICAgICAgIG4gLSA3ICAgICAgICAgICAgOCgxNSArKG4tNykgLSBuKSAgICAgICAgIGFzaHJfOQotICovCi0JLnAyYWxpZ24gNAotTChhc2hyXzkpOgotCW1vdgkkMHhmZmZmLCAlZXNpCi0JcHhvcgkleG1tMCwgJXhtbTAKLQltb3ZkcWEJKCVlZHgpLCAleG1tMgotCW1vdmRxYQkoJWVheCksICV4bW0xCi0JcGNtcGVxYgkleG1tMSwgJXhtbTAKLQlwc2xsZHEJJDcsICV4bW0yCi0JcGNtcGVxYgkleG1tMSwgJXhtbTIKLQlwc3ViYgkleG1tMCwgJXhtbTIKLQlwbW92bXNrYiAleG1tMiwgJWVkaQotCXNocgklY2wsICVlc2kKLQlzaHIJJWNsLCAlZWRpCi0Jc3ViCSVlZGksICVlc2kKLQlsZWEJLTcoJWVjeCksICVlZGkKLQlqbnoJTChsZXNzMzJieXRlcykKLQotCVVQREFURV9TVFJOQ01QX0NPVU5URVIKLQotCW1vdmRxYQkoJWVkeCksICV4bW0zCi0JcHhvcgkleG1tMCwgJXhtbTAKLQltb3YJJDE2LCAlZWN4Ci0Jb3IJJDksICVlYngKLQlsZWEJOSglZWR4KSwgJWVkaQotCWFuZAkkMHhmZmYsICVlZGkKLQlzdWIJJDB4MTAwMCwgJWVkaQotCi0JLnAyYWxpZ24gNAotTChsb29wX2FzaHJfOSk6Ci0JYWRkCSQxNiwgJWVkaQotCWpnCUwobmliYmxlX2FzaHJfOSkKLQotTChnb2JibGVfYXNocl85KToKLQltb3ZkcWEJKCVlYXgsICVlY3gpLCAleG1tMQotCW1vdmRxYQkoJWVkeCwgJWVjeCksICV4bW0yCi0JbW92ZHFhCSV4bW0yLCAleG1tNAotCi0JcGFsaWducgkkOSwgJXhtbTMsICV4bW0yCi0KLQlwY21wZXFiCSV4bW0xLCAleG1tMAotCXBjbXBlcWIJJXhtbTIsICV4bW0xCi0JcHN1YmIJJXhtbTAsICV4bW0xCi0JcG1vdm1za2IgJXhtbTEsICVlc2kKLQlzdWIJJDB4ZmZmZiwgJWVzaQotCWpueglMKGV4aXQpCi0KLSNpZmRlZiBVU0VfQVNfU1RSTkNNUAotCWNtcAkkMTYsICVlYnAKLQlsZWEJLTE2KCVlYnApLCAlZWJwCi0JamJlCUwobW9yZThieXRlc2VxKQotI2VuZGlmCi0JYWRkCSQxNiwgJWVjeAotCW1vdmRxYQkleG1tNCwgJXhtbTMKLQotCWFkZAkkMTYsICVlZGkKLQlqZwlMKG5pYmJsZV9hc2hyXzkpCi0KLQltb3ZkcWEJKCVlYXgsICVlY3gpLCAleG1tMQotCW1vdmRxYQkoJWVkeCwgJWVjeCksICV4bW0yCi0JbW92ZHFhCSV4bW0yLCAleG1tNAotCi0JcGFsaWducgkkOSwgJXhtbTMsICV4bW0yCi0KLQlwY21wZXFiCSV4bW0xLCAleG1tMAotCXBjbXBlcWIJJXhtbTIsICV4bW0xCi0JcHN1YmIJJXhtbTAsICV4bW0xCi0JcG1vdm1za2IgJXhtbTEsICVlc2kKLQlzdWIJJDB4ZmZmZiwgJWVzaQotCWpueglMKGV4aXQpCi0KLSNpZmRlZiBVU0VfQVNfU1RSTkNNUAotCWNtcAkkMTYsICVlYnAKLQlsZWEJLTE2KCVlYnApLCAlZWJwCi0JamJlCUwobW9yZThieXRlc2VxKQotI2VuZGlmCi0JYWRkCSQxNiwgJWVjeAotCW1vdmRxYQkleG1tNCwgJXhtbTMKLQlqbXAJTChsb29wX2FzaHJfOSkKLQotCS5wMmFsaWduIDQKLUwobmliYmxlX2FzaHJfOSk6Ci0JcGNtcGVxYgkleG1tMywgJXhtbTAKLQlwbW92bXNrYiAleG1tMCwgJWVzaQotCXRlc3QJJDB4ZmUwMCwgJWVzaQotCWpueglMKGFzaHJfOV9leGl0dGFpbCkKLQotI2lmZGVmIFVTRV9BU19TVFJOQ01QCi0JY21wCSQ3LCAlZWJwCi0JamJlCUwoYXNocl85X2V4aXR0YWlsKQotI2VuZGlmCi0JcHhvcgkleG1tMCwgJXhtbTAKLQlzdWIJJDB4MTAwMCwgJWVkaQotCWptcAlMKGdvYmJsZV9hc2hyXzkpCi0KLQkucDJhbGlnbiA0Ci1MKGFzaHJfOV9leGl0dGFpbCk6Ci0JbW92ZHFhCSglZWF4LCAlZWN4KSwgJXhtbTEKLQlwc3JsZHEJJDksICV4bW0wCi0JcHNybGRxCSQ5LCAleG1tMwotCWptcAlMKGFmdGVydGFpbCkKLQotLyoKLSAqIFRoZSBmb2xsb3dpbmcgY2FzZXMgd2lsbCBiZSBoYW5kbGVkIGJ5IGFzaHJfMTAKLSAqIGVjeChvZmZzZXQgb2YgZXNpKSAgZWF4KG9mZnNldCBvZiBlZGkpICAgcmVsYXRpdmUgb2Zmc2V0ICAgCWNvcnJlc3BvbmRpbmcgY2FzZQotICogICAgICAgIG4oNn4xNSkgICAgICAgICAgICBuIC0gNiAgICAgICAgICAgIDkoMTUgKyhuLTYpIC0gbikgICAgICAgICBhc2hyXzEwCi0gKi8KLQkucDJhbGlnbiA0Ci1MKGFzaHJfMTApOgotCW1vdgkkMHhmZmZmLCAlZXNpCi0JcHhvcgkleG1tMCwgJXhtbTAKLQltb3ZkcWEJKCVlZHgpLCAleG1tMgotCW1vdmRxYQkoJWVheCksICV4bW0xCi0JcGNtcGVxYgkleG1tMSwgJXhtbTAKLQlwc2xsZHEJJDYsICV4bW0yCi0JcGNtcGVxYgkleG1tMSwgJXhtbTIKLQlwc3ViYgkleG1tMCwgJXhtbTIKLQlwbW92bXNrYiAleG1tMiwgJWVkaQotCXNocgklY2wsICVlc2kKLQlzaHIJJWNsLCAlZWRpCi0Jc3ViCSVlZGksICVlc2kKLQlsZWEJLTYoJWVjeCksICVlZGkKLQlqbnoJTChsZXNzMzJieXRlcykKLQotCVVQREFURV9TVFJOQ01QX0NPVU5URVIKLQotCW1vdmRxYQkoJWVkeCksICV4bW0zCi0JcHhvcgkleG1tMCwgJXhtbTAKLQltb3YJJDE2LCAlZWN4Ci0Jb3IJJDEwLCAlZWJ4Ci0JbGVhCTEwKCVlZHgpLCAlZWRpCi0JYW5kCSQweGZmZiwgJWVkaQotCXN1YgkkMHgxMDAwLCAlZWRpCi0KLQkucDJhbGlnbiA0Ci1MKGxvb3BfYXNocl8xMCk6Ci0JYWRkCSQxNiwgJWVkaQotCWpnCUwobmliYmxlX2FzaHJfMTApCi0KLUwoZ29iYmxlX2FzaHJfMTApOgotCW1vdmRxYQkoJWVheCwgJWVjeCksICV4bW0xCi0JbW92ZHFhCSglZWR4LCAlZWN4KSwgJXhtbTIKLQltb3ZkcWEJJXhtbTIsICV4bW00Ci0KLQlwYWxpZ25yCSQxMCwgJXhtbTMsICV4bW0yCi0KLQlwY21wZXFiCSV4bW0xLCAleG1tMAotCXBjbXBlcWIJJXhtbTIsICV4bW0xCi0JcHN1YmIJJXhtbTAsICV4bW0xCi0JcG1vdm1za2IgJXhtbTEsICVlc2kKLQlzdWIJJDB4ZmZmZiwgJWVzaQotCWpueglMKGV4aXQpCi0KLSNpZmRlZiBVU0VfQVNfU1RSTkNNUAotCWNtcAkkMTYsICVlYnAKLQlsZWEJLTE2KCVlYnApLCAlZWJwCi0JamJlCUwobW9yZThieXRlc2VxKQotI2VuZGlmCi0JYWRkCSQxNiwgJWVjeAotCW1vdmRxYQkleG1tNCwgJXhtbTMKLQotCWFkZAkkMTYsICVlZGkKLQlqZwlMKG5pYmJsZV9hc2hyXzEwKQotCi0JbW92ZHFhCSglZWF4LCAlZWN4KSwgJXhtbTEKLQltb3ZkcWEJKCVlZHgsICVlY3gpLCAleG1tMgotCW1vdmRxYQkleG1tMiwgJXhtbTQKLQotCXBhbGlnbnIJJDEwLCAleG1tMywgJXhtbTIKLQotCXBjbXBlcWIJJXhtbTEsICV4bW0wCi0JcGNtcGVxYgkleG1tMiwgJXhtbTEKLQlwc3ViYgkleG1tMCwgJXhtbTEKLQlwbW92bXNrYiAleG1tMSwgJWVzaQotCXN1YgkkMHhmZmZmLCAlZXNpCi0Jam56CUwoZXhpdCkKLQotI2lmZGVmIFVTRV9BU19TVFJOQ01QCi0JY21wCSQxNiwgJWVicAotCWxlYQktMTYoJWVicCksICVlYnAKLQlqYmUJTChtb3JlOGJ5dGVzZXEpCi0jZW5kaWYKLQlhZGQJJDE2LCAlZWN4Ci0JbW92ZHFhCSV4bW00LCAleG1tMwotCWptcAlMKGxvb3BfYXNocl8xMCkKLQotCS5wMmFsaWduIDQKLUwobmliYmxlX2FzaHJfMTApOgotCXBjbXBlcWIJJXhtbTMsICV4bW0wCi0JcG1vdm1za2IgJXhtbTAsICVlc2kKLQl0ZXN0CSQweGZjMDAsICVlc2kKLQlqbnoJTChhc2hyXzEwX2V4aXR0YWlsKQotCi0jaWZkZWYgVVNFX0FTX1NUUk5DTVAKLQljbXAJJDYsICVlYnAKLQlqYmUJTChhc2hyXzEwX2V4aXR0YWlsKQotI2VuZGlmCi0JcHhvcgkleG1tMCwgJXhtbTAKLQlzdWIJJDB4MTAwMCwgJWVkaQotCWptcAlMKGdvYmJsZV9hc2hyXzEwKQotCi0JLnAyYWxpZ24gNAotTChhc2hyXzEwX2V4aXR0YWlsKToKLQltb3ZkcWEJKCVlYXgsICVlY3gpLCAleG1tMQotCXBzcmxkcQkkMTAsICV4bW0wCi0JcHNybGRxCSQxMCwgJXhtbTMKLQlqbXAJTChhZnRlcnRhaWwpCi0KLS8qCi0gKiBUaGUgZm9sbG93aW5nIGNhc2VzIHdpbGwgYmUgaGFuZGxlZCBieSBhc2hyXzExCi0gKiBlY3gob2Zmc2V0IG9mIGVzaSkgIGVheChvZmZzZXQgb2YgZWRpKSAgIHJlbGF0aXZlIG9mZnNldCAgIAljb3JyZXNwb25kaW5nIGNhc2UKLSAqICAgICAgICBuKDV+MTUpICAgICAgICAgICAgbiAtIDUgICAgICAgICAgICAxMCgxNSArKG4tNSkgLSBuKSAgICAgICAgIGFzaHJfMTEKLSAqLwotCS5wMmFsaWduIDQKLUwoYXNocl8xMSk6Ci0JbW92CSQweGZmZmYsICVlc2kKLQlweG9yCSV4bW0wLCAleG1tMAotCW1vdmRxYQkoJWVkeCksICV4bW0yCi0JbW92ZHFhCSglZWF4KSwgJXhtbTEKLQlwY21wZXFiCSV4bW0xLCAleG1tMAotCXBzbGxkcQkkNSwgJXhtbTIKLQlwY21wZXFiCSV4bW0xLCAleG1tMgotCXBzdWJiCSV4bW0wLCAleG1tMgotCXBtb3Ztc2tiICV4bW0yLCAlZWRpCi0Jc2hyCSVjbCwgJWVzaQotCXNocgklY2wsICVlZGkKLQlzdWIJJWVkaSwgJWVzaQotCWxlYQktNSglZWN4KSwgJWVkaQotCWpueglMKGxlc3MzMmJ5dGVzKQotCi0JVVBEQVRFX1NUUk5DTVBfQ09VTlRFUgotCi0JbW92ZHFhCSglZWR4KSwgJXhtbTMKLQlweG9yCSV4bW0wLCAleG1tMAotCW1vdgkkMTYsICVlY3gKLQlvcgkkMTEsICVlYngKLQlsZWEJMTEoJWVkeCksICVlZGkKLQlhbmQJJDB4ZmZmLCAlZWRpCi0Jc3ViCSQweDEwMDAsICVlZGkKLQotCS5wMmFsaWduIDQKLUwobG9vcF9hc2hyXzExKToKLQlhZGQJJDE2LCAlZWRpCi0JamcJTChuaWJibGVfYXNocl8xMSkKLQotTChnb2JibGVfYXNocl8xMSk6Ci0JbW92ZHFhCSglZWF4LCAlZWN4KSwgJXhtbTEKLQltb3ZkcWEJKCVlZHgsICVlY3gpLCAleG1tMgotCW1vdmRxYQkleG1tMiwgJXhtbTQKLQotCXBhbGlnbnIJJDExLCAleG1tMywgJXhtbTIKLQotCXBjbXBlcWIJJXhtbTEsICV4bW0wCi0JcGNtcGVxYgkleG1tMiwgJXhtbTEKLQlwc3ViYgkleG1tMCwgJXhtbTEKLQlwbW92bXNrYiAleG1tMSwgJWVzaQotCXN1YgkkMHhmZmZmLCAlZXNpCi0Jam56CUwoZXhpdCkKLQotI2lmZGVmIFVTRV9BU19TVFJOQ01QCi0JY21wCSQxNiwgJWVicAotCWxlYQktMTYoJWVicCksICVlYnAKLQlqYmUJTChtb3JlOGJ5dGVzZXEpCi0jZW5kaWYKLQlhZGQJJDE2LCAlZWN4Ci0JbW92ZHFhCSV4bW00LCAleG1tMwotCi0JYWRkCSQxNiwgJWVkaQotCWpnCUwobmliYmxlX2FzaHJfMTEpCi0KLQltb3ZkcWEJKCVlYXgsICVlY3gpLCAleG1tMQotCW1vdmRxYQkoJWVkeCwgJWVjeCksICV4bW0yCi0JbW92ZHFhCSV4bW0yLCAleG1tNAotCi0JcGFsaWducgkkMTEsICV4bW0zLCAleG1tMgotCi0JcGNtcGVxYgkleG1tMSwgJXhtbTAKLQlwY21wZXFiCSV4bW0yLCAleG1tMQotCXBzdWJiCSV4bW0wLCAleG1tMQotCXBtb3Ztc2tiICV4bW0xLCAlZXNpCi0Jc3ViCSQweGZmZmYsICVlc2kKLQlqbnoJTChleGl0KQotCi0jaWZkZWYgVVNFX0FTX1NUUk5DTVAKLQljbXAJJDE2LCAlZWJwCi0JbGVhCS0xNiglZWJwKSwgJWVicAotCWpiZQlMKG1vcmU4Ynl0ZXNlcSkKLSNlbmRpZgotCWFkZAkkMTYsICVlY3gKLQltb3ZkcWEJJXhtbTQsICV4bW0zCi0Jam1wCUwobG9vcF9hc2hyXzExKQotCi0JLnAyYWxpZ24gNAotTChuaWJibGVfYXNocl8xMSk6Ci0JcGNtcGVxYgkleG1tMywgJXhtbTAKLQlwbW92bXNrYiAleG1tMCwgJWVzaQotCXRlc3QJJDB4ZjgwMCwgJWVzaQotCWpueglMKGFzaHJfMTFfZXhpdHRhaWwpCi0KLSNpZmRlZiBVU0VfQVNfU1RSTkNNUAotCWNtcAkkNSwgJWVicAotCWpiZQlMKGFzaHJfMTFfZXhpdHRhaWwpCi0jZW5kaWYKLQlweG9yCSV4bW0wLCAleG1tMAotCXN1YgkkMHgxMDAwLCAlZWRpCi0Jam1wCUwoZ29iYmxlX2FzaHJfMTEpCi0KLQkucDJhbGlnbiA0Ci1MKGFzaHJfMTFfZXhpdHRhaWwpOgotCW1vdmRxYQkoJWVheCwgJWVjeCksICV4bW0xCi0JcHNybGRxCSQxMSwgJXhtbTAKLQlwc3JsZHEJJDExLCAleG1tMwotCWptcAlMKGFmdGVydGFpbCkKLQotLyoKLSAqIFRoZSBmb2xsb3dpbmcgY2FzZXMgd2lsbCBiZSBoYW5kbGVkIGJ5IGFzaHJfMTIKLSAqIGVjeChvZmZzZXQgb2YgZXNpKSAgZWF4KG9mZnNldCBvZiBlZGkpICAgcmVsYXRpdmUgb2Zmc2V0ICAgCWNvcnJlc3BvbmRpbmcgY2FzZQotICogICAgICAgIG4oNH4xNSkgICAgICAgICAgICBuIC0gNCAgICAgICAgICAgIDExKDE1ICsobi00KSAtIG4pICAgICAgICAgYXNocl8xMgotICovCi0JLnAyYWxpZ24gNAotTChhc2hyXzEyKToKLQltb3YJJDB4ZmZmZiwgJWVzaQotCXB4b3IJJXhtbTAsICV4bW0wCi0JbW92ZHFhCSglZWR4KSwgJXhtbTIKLQltb3ZkcWEJKCVlYXgpLCAleG1tMQotCXBjbXBlcWIJJXhtbTEsICV4bW0wCi0JcHNsbGRxCSQ0LCAleG1tMgotCXBjbXBlcWIJJXhtbTEsICV4bW0yCi0JcHN1YmIJJXhtbTAsICV4bW0yCi0JcG1vdm1za2IgJXhtbTIsICVlZGkKLQlzaHIJJWNsLCAlZXNpCi0Jc2hyCSVjbCwgJWVkaQotCXN1YgklZWRpLCAlZXNpCi0JbGVhCS00KCVlY3gpLCAlZWRpCi0Jam56CUwobGVzczMyYnl0ZXMpCi0KLQlVUERBVEVfU1RSTkNNUF9DT1VOVEVSCi0KLQltb3ZkcWEJKCVlZHgpLCAleG1tMwotCXB4b3IJJXhtbTAsICV4bW0wCi0JbW92CSQxNiwgJWVjeAotCW9yCSQxMiwgJWVieAotCWxlYQkxMiglZWR4KSwgJWVkaQotCWFuZAkkMHhmZmYsICVlZGkKLQlzdWIJJDB4MTAwMCwgJWVkaQotCi0JLnAyYWxpZ24gNAotTChsb29wX2FzaHJfMTIpOgotCWFkZAkkMTYsICVlZGkKLQlqZwlMKG5pYmJsZV9hc2hyXzEyKQotCi1MKGdvYmJsZV9hc2hyXzEyKToKLQltb3ZkcWEJKCVlYXgsICVlY3gpLCAleG1tMQotCW1vdmRxYQkoJWVkeCwgJWVjeCksICV4bW0yCi0JbW92ZHFhCSV4bW0yLCAleG1tNAotCi0JcGFsaWducgkkMTIsICV4bW0zLCAleG1tMgotCi0JcGNtcGVxYgkleG1tMSwgJXhtbTAKLQlwY21wZXFiCSV4bW0yLCAleG1tMQotCXBzdWJiCSV4bW0wLCAleG1tMQotCXBtb3Ztc2tiICV4bW0xLCAlZXNpCi0Jc3ViCSQweGZmZmYsICVlc2kKLQlqbnoJTChleGl0KQotCi0jaWZkZWYgVVNFX0FTX1NUUk5DTVAKLQljbXAJJDE2LCAlZWJwCi0JbGVhCS0xNiglZWJwKSwgJWVicAotCWpiZQlMKG1vcmU4Ynl0ZXNlcSkKLSNlbmRpZgotCi0JYWRkCSQxNiwgJWVjeAotCW1vdmRxYQkleG1tNCwgJXhtbTMKLQotCWFkZAkkMTYsICVlZGkKLQlqZwlMKG5pYmJsZV9hc2hyXzEyKQotCi0JbW92ZHFhCSglZWF4LCAlZWN4KSwgJXhtbTEKLQltb3ZkcWEJKCVlZHgsICVlY3gpLCAleG1tMgotCW1vdmRxYQkleG1tMiwgJXhtbTQKLQotCXBhbGlnbnIJJDEyLCAleG1tMywgJXhtbTIKLQotCXBjbXBlcWIJJXhtbTEsICV4bW0wCi0JcGNtcGVxYgkleG1tMiwgJXhtbTEKLQlwc3ViYgkleG1tMCwgJXhtbTEKLQlwbW92bXNrYiAleG1tMSwgJWVzaQotCXN1YgkkMHhmZmZmLCAlZXNpCi0Jam56CUwoZXhpdCkKLQotI2lmZGVmIFVTRV9BU19TVFJOQ01QCi0JY21wCSQxNiwgJWVicAotCWxlYQktMTYoJWVicCksICVlYnAKLQlqYmUJTChtb3JlOGJ5dGVzZXEpCi0jZW5kaWYKLQlhZGQJJDE2LCAlZWN4Ci0JbW92ZHFhCSV4bW00LCAleG1tMwotCWptcAlMKGxvb3BfYXNocl8xMikKLQotCS5wMmFsaWduIDQKLUwobmliYmxlX2FzaHJfMTIpOgotCXBjbXBlcWIJJXhtbTMsICV4bW0wCi0JcG1vdm1za2IgJXhtbTAsICVlc2kKLQl0ZXN0CSQweGYwMDAsICVlc2kKLQlqbnoJTChhc2hyXzEyX2V4aXR0YWlsKQotCi0jaWZkZWYgVVNFX0FTX1NUUk5DTVAKLQljbXAJJDQsICVlYnAKLQlqYmUJTChhc2hyXzEyX2V4aXR0YWlsKQotI2VuZGlmCi0JcHhvcgkleG1tMCwgJXhtbTAKLQlzdWIJJDB4MTAwMCwgJWVkaQotCWptcAlMKGdvYmJsZV9hc2hyXzEyKQotCi0JLnAyYWxpZ24gNAotTChhc2hyXzEyX2V4aXR0YWlsKToKLQltb3ZkcWEJKCVlYXgsICVlY3gpLCAleG1tMQotCXBzcmxkcQkkMTIsICV4bW0wCi0JcHNybGRxCSQxMiwgJXhtbTMKLQlqbXAJTChhZnRlcnRhaWwpCi0KLS8qCi0gKiBUaGUgZm9sbG93aW5nIGNhc2VzIHdpbGwgYmUgaGFuZGxlZCBieSBhc2hyXzEzCi0gKiBlY3gob2Zmc2V0IG9mIGVzaSkgIGVheChvZmZzZXQgb2YgZWRpKSAgIHJlbGF0aXZlIG9mZnNldCAgIAljb3JyZXNwb25kaW5nIGNhc2UKLSAqICAgICAgICBuKDN+MTUpICAgICAgICAgICAgbiAtIDMgICAgICAgICAgICAxMigxNSArKG4tMykgLSBuKSAgICAgICAgIGFzaHJfMTMKLSAqLwotCS5wMmFsaWduIDQKLUwoYXNocl8xMyk6Ci0JbW92CSQweGZmZmYsICVlc2kKLQlweG9yCSV4bW0wLCAleG1tMAotCW1vdmRxYQkoJWVkeCksICV4bW0yCi0JbW92ZHFhCSglZWF4KSwgJXhtbTEKLQlwY21wZXFiCSV4bW0xLCAleG1tMAotCXBzbGxkcQkkMywgJXhtbTIKLQlwY21wZXFiCSV4bW0xLCAleG1tMgotCXBzdWJiCSV4bW0wLCAleG1tMgotCXBtb3Ztc2tiICV4bW0yLCAlZWRpCi0Jc2hyCSVjbCwgJWVzaQotCXNocgklY2wsICVlZGkKLQlzdWIJJWVkaSwgJWVzaQotCWxlYQktMyglZWN4KSwgJWVkaQotCWpueglMKGxlc3MzMmJ5dGVzKQotCi0JVVBEQVRFX1NUUk5DTVBfQ09VTlRFUgotCi0JbW92ZHFhCSglZWR4KSwgJXhtbTMKLQlweG9yCSV4bW0wLCAleG1tMAotCW1vdgkkMTYsICVlY3gKLQlvcgkkMTMsICVlYngKLQlsZWEJMTMoJWVkeCksICVlZGkKLQlhbmQJJDB4ZmZmLCAlZWRpCi0Jc3ViCSQweDEwMDAsICVlZGkKLQotCS5wMmFsaWduIDQKLUwobG9vcF9hc2hyXzEzKToKLQlhZGQJJDE2LCAlZWRpCi0JamcJTChuaWJibGVfYXNocl8xMykKLQotTChnb2JibGVfYXNocl8xMyk6Ci0JbW92ZHFhCSglZWF4LCAlZWN4KSwgJXhtbTEKLQltb3ZkcWEJKCVlZHgsICVlY3gpLCAleG1tMgotCW1vdmRxYQkleG1tMiwgJXhtbTQKLQotCXBhbGlnbnIJJDEzLCAleG1tMywgJXhtbTIKLQotCXBjbXBlcWIJJXhtbTEsICV4bW0wCi0JcGNtcGVxYgkleG1tMiwgJXhtbTEKLQlwc3ViYgkleG1tMCwgJXhtbTEKLQlwbW92bXNrYiAleG1tMSwgJWVzaQotCXN1YgkkMHhmZmZmLCAlZXNpCi0Jam56CUwoZXhpdCkKLQotI2lmZGVmIFVTRV9BU19TVFJOQ01QCi0JY21wCSQxNiwgJWVicAotCWxlYQktMTYoJWVicCksICVlYnAKLQlqYmUJTChtb3JlOGJ5dGVzZXEpCi0jZW5kaWYKLQlhZGQJJDE2LCAlZWN4Ci0JbW92ZHFhCSV4bW00LCAleG1tMwotCi0JYWRkCSQxNiwgJWVkaQotCWpnCUwobmliYmxlX2FzaHJfMTMpCi0KLQltb3ZkcWEJKCVlYXgsICVlY3gpLCAleG1tMQotCW1vdmRxYQkoJWVkeCwgJWVjeCksICV4bW0yCi0JbW92ZHFhCSV4bW0yLCAleG1tNAotCi0JcGFsaWducgkkMTMsICV4bW0zLCAleG1tMgotCi0JcGNtcGVxYgkleG1tMSwgJXhtbTAKLQlwY21wZXFiCSV4bW0yLCAleG1tMQotCXBzdWJiCSV4bW0wLCAleG1tMQotCXBtb3Ztc2tiICV4bW0xLCAlZXNpCi0Jc3ViCSQweGZmZmYsICVlc2kKLQlqbnoJTChleGl0KQotCi0jaWZkZWYgVVNFX0FTX1NUUk5DTVAKLQljbXAJJDE2LCAlZWJwCi0JbGVhCS0xNiglZWJwKSwgJWVicAotCWpiZQlMKG1vcmU4Ynl0ZXNlcSkKLSNlbmRpZgotCWFkZAkkMTYsICVlY3gKLQltb3ZkcWEJJXhtbTQsICV4bW0zCi0Jam1wCUwobG9vcF9hc2hyXzEzKQotCi0JLnAyYWxpZ24gNAotTChuaWJibGVfYXNocl8xMyk6Ci0JcGNtcGVxYgkleG1tMywgJXhtbTAKLQlwbW92bXNrYiAleG1tMCwgJWVzaQotCXRlc3QJJDB4ZTAwMCwgJWVzaQotCWpueglMKGFzaHJfMTNfZXhpdHRhaWwpCi0KLSNpZmRlZiBVU0VfQVNfU1RSTkNNUAotCWNtcAkkMywgJWVicAotCWpiZQlMKGFzaHJfMTNfZXhpdHRhaWwpCi0jZW5kaWYKLQlweG9yCSV4bW0wLCAleG1tMAotCXN1YgkkMHgxMDAwLCAlZWRpCi0Jam1wCUwoZ29iYmxlX2FzaHJfMTMpCi0KLQkucDJhbGlnbiA0Ci1MKGFzaHJfMTNfZXhpdHRhaWwpOgotCW1vdmRxYQkoJWVheCwgJWVjeCksICV4bW0xCi0JcHNybGRxCSQxMywgJXhtbTAKLQlwc3JsZHEJJDEzLCAleG1tMwotCWptcAlMKGFmdGVydGFpbCkKLQotLyoKLSAqIFRoZSBmb2xsb3dpbmcgY2FzZXMgd2lsbCBiZSBoYW5kbGVkIGJ5IGFzaHJfMTQKLSAqIGVjeChvZmZzZXQgb2YgZXNpKSAgZWF4KG9mZnNldCBvZiBlZGkpICAgcmVsYXRpdmUgb2Zmc2V0ICAgCWNvcnJlc3BvbmRpbmcgY2FzZQotICogICAgICAgIG4oMn4xNSkgICAgICAgICAgICBuIC0gMiAgICAgICAgICAgIDEzKDE1ICsobi0yKSAtIG4pICAgICAgICAgYXNocl8xNAotICovCi0JLnAyYWxpZ24gNAotTChhc2hyXzE0KToKLQltb3YJJDB4ZmZmZiwgJWVzaQotCXB4b3IJJXhtbTAsICV4bW0wCi0JbW92ZHFhCSglZWR4KSwgJXhtbTIKLQltb3ZkcWEJKCVlYXgpLCAleG1tMQotCXBjbXBlcWIJJXhtbTEsICV4bW0wCi0JcHNsbGRxCSQyLCAleG1tMgotCXBjbXBlcWIJJXhtbTEsICV4bW0yCi0JcHN1YmIJJXhtbTAsICV4bW0yCi0JcG1vdm1za2IgJXhtbTIsICVlZGkKLQlzaHIJJWNsLCAlZXNpCi0Jc2hyCSVjbCwgJWVkaQotCXN1YgklZWRpLCAlZXNpCi0JbGVhCS0yKCVlY3gpLCAlZWRpCi0Jam56CUwobGVzczMyYnl0ZXMpCi0KLQlVUERBVEVfU1RSTkNNUF9DT1VOVEVSCi0KLQltb3ZkcWEJKCVlZHgpLCAleG1tMwotCXB4b3IJJXhtbTAsICV4bW0wCi0JbW92CSQxNiwgJWVjeAotCW9yCSQxNCwgJWVieAotCWxlYQkxNCglZWR4KSwgJWVkaQotCWFuZAkkMHhmZmYsICVlZGkKLQlzdWIJJDB4MTAwMCwgJWVkaQotCi0JLnAyYWxpZ24gNAotTChsb29wX2FzaHJfMTQpOgotCWFkZAkkMTYsICVlZGkKLQlqZwlMKG5pYmJsZV9hc2hyXzE0KQotCi1MKGdvYmJsZV9hc2hyXzE0KToKLQltb3ZkcWEJKCVlYXgsICVlY3gpLCAleG1tMQotCW1vdmRxYQkoJWVkeCwgJWVjeCksICV4bW0yCi0JbW92ZHFhCSV4bW0yLCAleG1tNAotCi0JcGFsaWducgkkMTQsICV4bW0zLCAleG1tMgotCi0JcGNtcGVxYgkleG1tMSwgJXhtbTAKLQlwY21wZXFiCSV4bW0yLCAleG1tMQotCXBzdWJiCSV4bW0wLCAleG1tMQotCXBtb3Ztc2tiICV4bW0xLCAlZXNpCi0Jc3ViCSQweGZmZmYsICVlc2kKLQlqbnoJTChleGl0KQotCi0jaWZkZWYgVVNFX0FTX1NUUk5DTVAKLQljbXAJJDE2LCAlZWJwCi0JbGVhCS0xNiglZWJwKSwgJWVicAotCWpiZQlMKG1vcmU4Ynl0ZXNlcSkKLSNlbmRpZgotCWFkZAkkMTYsICVlY3gKLQltb3ZkcWEJJXhtbTQsICV4bW0zCi0KLQlhZGQJJDE2LCAlZWRpCi0JamcJTChuaWJibGVfYXNocl8xNCkKLQotCW1vdmRxYQkoJWVheCwgJWVjeCksICV4bW0xCi0JbW92ZHFhCSglZWR4LCAlZWN4KSwgJXhtbTIKLQltb3ZkcWEJJXhtbTIsICV4bW00Ci0KLQlwYWxpZ25yCSQxNCwgJXhtbTMsICV4bW0yCi0KLQlwY21wZXFiCSV4bW0xLCAleG1tMAotCXBjbXBlcWIJJXhtbTIsICV4bW0xCi0JcHN1YmIJJXhtbTAsICV4bW0xCi0JcG1vdm1za2IgJXhtbTEsICVlc2kKLQlzdWIJJDB4ZmZmZiwgJWVzaQotCWpueglMKGV4aXQpCi0KLSNpZmRlZiBVU0VfQVNfU1RSTkNNUAotCWNtcAkkMTYsICVlYnAKLQlsZWEJLTE2KCVlYnApLCAlZWJwCi0JamJlCUwobW9yZThieXRlc2VxKQotI2VuZGlmCi0JYWRkCSQxNiwgJWVjeAotCW1vdmRxYQkleG1tNCwgJXhtbTMKLQlqbXAJTChsb29wX2FzaHJfMTQpCi0KLQkucDJhbGlnbiA0Ci1MKG5pYmJsZV9hc2hyXzE0KToKLQlwY21wZXFiCSV4bW0zLCAleG1tMAotCXBtb3Ztc2tiICV4bW0wLCAlZXNpCi0JdGVzdAkkMHhjMDAwLCAlZXNpCi0Jam56CUwoYXNocl8xNF9leGl0dGFpbCkKLQotI2lmZGVmIFVTRV9BU19TVFJOQ01QCi0JY21wCSQyLCAlZWJwCi0JamJlCUwoYXNocl8xNF9leGl0dGFpbCkKLSNlbmRpZgotCXB4b3IJJXhtbTAsICV4bW0wCi0Jc3ViCSQweDEwMDAsICVlZGkKLQlqbXAJTChnb2JibGVfYXNocl8xNCkKLQotCS5wMmFsaWduIDQKLUwoYXNocl8xNF9leGl0dGFpbCk6Ci0JbW92ZHFhCSglZWF4LCAlZWN4KSwgJXhtbTEKLQlwc3JsZHEJJDE0LCAleG1tMAotCXBzcmxkcQkkMTQsICV4bW0zCi0Jam1wCUwoYWZ0ZXJ0YWlsKQotCi0vKgotICogVGhlIGZvbGxvd2luZyBjYXNlcyB3aWxsIGJlIGhhbmRsZWQgYnkgYXNocl8xNAotICogZWN4KG9mZnNldCBvZiBlc2kpICBlYXgob2Zmc2V0IG9mIGVkaSkgICByZWxhdGl2ZSBvZmZzZXQgICAJY29ycmVzcG9uZGluZyBjYXNlCi0gKiAgICAgICAgbigxfjE1KSAgICAgICAgICAgIG4gLSAxICAgICAgICAgICAgMTQoMTUgKyhuLTEpIC0gbikgICAgICAgICBhc2hyXzE1Ci0gKi8KLQotCS5wMmFsaWduIDQKLUwoYXNocl8xNSk6Ci0JbW92CSQweGZmZmYsICVlc2kKLQlweG9yCSV4bW0wLCAleG1tMAotCW1vdmRxYQkoJWVkeCksICV4bW0yCi0JbW92ZHFhCSglZWF4KSwgJXhtbTEKLQlwY21wZXFiCSV4bW0xLCAleG1tMAotCXBzbGxkcQkkMSwgJXhtbTIKLQlwY21wZXFiCSV4bW0xLCAleG1tMgotCXBzdWJiCSV4bW0wLCAleG1tMgotCXBtb3Ztc2tiICV4bW0yLCAlZWRpCi0Jc2hyCSVjbCwgJWVzaQotCXNocgklY2wsICVlZGkKLQlzdWIJJWVkaSwgJWVzaQotCWxlYQktMSglZWN4KSwgJWVkaQotCWpueglMKGxlc3MzMmJ5dGVzKQotCi0JVVBEQVRFX1NUUk5DTVBfQ09VTlRFUgotCi0JbW92ZHFhCSglZWR4KSwgJXhtbTMKLQlweG9yCSV4bW0wLCAleG1tMAotCW1vdgkkMTYsICVlY3gKLQlvcgkkMTUsICVlYngKLQlsZWEJMTUoJWVkeCksICVlZGkKLQlhbmQJJDB4ZmZmLCAlZWRpCi0Jc3ViCSQweDEwMDAsICVlZGkKLQotCS5wMmFsaWduIDQKLUwobG9vcF9hc2hyXzE1KToKLQlhZGQJJDE2LCAlZWRpCi0JamcJTChuaWJibGVfYXNocl8xNSkKLQotTChnb2JibGVfYXNocl8xNSk6Ci0JbW92ZHFhCSglZWF4LCAlZWN4KSwgJXhtbTEKLQltb3ZkcWEJKCVlZHgsICVlY3gpLCAleG1tMgotCW1vdmRxYQkleG1tMiwgJXhtbTQKLQotCXBhbGlnbnIJJDE1LCAleG1tMywgJXhtbTIKLQotCXBjbXBlcWIJJXhtbTEsICV4bW0wCi0JcGNtcGVxYgkleG1tMiwgJXhtbTEKLQlwc3ViYgkleG1tMCwgJXhtbTEKLQlwbW92bXNrYiAleG1tMSwgJWVzaQotCXN1YgkkMHhmZmZmLCAlZXNpCi0Jam56CUwoZXhpdCkKLQotI2lmZGVmIFVTRV9BU19TVFJOQ01QCi0JY21wCSQxNiwgJWVicAotCWxlYQktMTYoJWVicCksICVlYnAKLQlqYmUJTChtb3JlOGJ5dGVzZXEpCi0jZW5kaWYKLQlhZGQJJDE2LCAlZWN4Ci0JbW92ZHFhCSV4bW00LCAleG1tMwotCi0JYWRkCSQxNiwgJWVkaQotCWpnCUwobmliYmxlX2FzaHJfMTUpCi0KLQltb3ZkcWEJKCVlYXgsICVlY3gpLCAleG1tMQotCW1vdmRxYQkoJWVkeCwgJWVjeCksICV4bW0yCi0JbW92ZHFhCSV4bW0yLCAleG1tNAotCi0JcGFsaWducgkkMTUsICV4bW0zLCAleG1tMgotCi0JcGNtcGVxYgkleG1tMSwgJXhtbTAKLQlwY21wZXFiCSV4bW0yLCAleG1tMQotCXBzdWJiCSV4bW0wLCAleG1tMQotCXBtb3Ztc2tiICV4bW0xLCAlZXNpCi0Jc3ViCSQweGZmZmYsICVlc2kKLQlqbnoJTChleGl0KQotCi0jaWZkZWYgVVNFX0FTX1NUUk5DTVAKLQljbXAJJDE2LCAlZWJwCi0JbGVhCS0xNiglZWJwKSwgJWVicAotCWpiZQlMKG1vcmU4Ynl0ZXNlcSkKLSNlbmRpZgotCWFkZAkkMTYsICVlY3gKLQltb3ZkcWEJJXhtbTQsICV4bW0zCi0Jam1wCUwobG9vcF9hc2hyXzE1KQotCi0JLnAyYWxpZ24gNAotTChuaWJibGVfYXNocl8xNSk6Ci0JcGNtcGVxYgkleG1tMywgJXhtbTAKLQlwbW92bXNrYiAleG1tMCwgJWVzaQotCXRlc3QJJDB4ODAwMCwgJWVzaQotCWpueglMKGFzaHJfMTVfZXhpdHRhaWwpCi0KLSNpZmRlZiBVU0VfQVNfU1RSTkNNUAotCWNtcAkkMSwgJWVicAotCWpiZQlMKGFzaHJfMTVfZXhpdHRhaWwpCi0jZW5kaWYKLQlweG9yCSV4bW0wLCAleG1tMAotCXN1YgkkMHgxMDAwLCAlZWRpCi0Jam1wCUwoZ29iYmxlX2FzaHJfMTUpCi0KLQkucDJhbGlnbiA0Ci1MKGFzaHJfMTVfZXhpdHRhaWwpOgotCW1vdmRxYQkoJWVheCwgJWVjeCksICV4bW0xCi0JcHNybGRxCSQxNSwgJXhtbTAKLQlwc3JsZHEJJDE1LCAleG1tMwotCWptcAlMKGFmdGVydGFpbCkKLQotCS5wMmFsaWduIDQKLUwoYWZ0ZXJ0YWlsKToKLQlwY21wZXFiCSV4bW0zLCAleG1tMQotCXBzdWJiCSV4bW0wLCAleG1tMQotCXBtb3Ztc2tiICV4bW0xLCAlZXNpCi0Jbm90CSVlc2kKLUwoZXhpdCk6Ci0JbW92CSVlYngsICVlZGkKLQlhbmQJJDB4MWYsICVlZGkKLQlsZWEJLTE2KCVlZGksICVlY3gpLCAlZWRpCi1MKGxlc3MzMmJ5dGVzKToKLQlhZGQJJWVkaSwgJWVkeAotCWFkZAklZWN4LCAlZWF4Ci0JdGVzdAkkMHgyMCwgJWVieAotCWp6CUwocmV0MikKLQl4Y2hnCSVlYXgsICVlZHgKLQotCS5wMmFsaWduIDQKLUwocmV0Mik6Ci0JbW92CSVlc2ksICVlY3gKLQlQT1AJKCVlc2kpCi0JUE9QCSglZWRpKQotCVBPUAkoJWVieCkKLUwobGVzczE2Ynl0ZXMpOgotCXRlc3QJJWNsLCAlY2wKLQlqeglMKDJuZXh0XzhfYnl0ZXMpCi0KLQl0ZXN0CSQweDAxLCAlY2wKLQlqbnoJTChCeXRlMCkKLQotCXRlc3QJJDB4MDIsICVjbAotCWpueglMKEJ5dGUxKQotCi0JdGVzdAkkMHgwNCwgJWNsCi0Jam56CUwoQnl0ZTIpCi0KLQl0ZXN0CSQweDA4LCAlY2wKLQlqbnoJTChCeXRlMykKLQotCXRlc3QJJDB4MTAsICVjbAotCWpueglMKEJ5dGU0KQotCi0JdGVzdAkkMHgyMCwgJWNsCi0Jam56CUwoQnl0ZTUpCi0KLQl0ZXN0CSQweDQwLCAlY2wKLQlqbnoJTChCeXRlNikKLSNpZmRlZiBVU0VfQVNfU1RSTkNNUAotCWNtcAkkNywgJWVicAotCWpiZQlMKGVxKQotI2VuZGlmCi0KLQltb3Z6eAk3KCVlYXgpLCAlZWN4Ci0JbW92engJNyglZWR4KSwgJWVheAotCi0Jc3ViCSVlY3gsICVlYXgKLQlSRVRVUk4KLQotCS5wMmFsaWduIDQKLUwoQnl0ZTApOgotI2lmZGVmIFVTRV9BU19TVFJOQ01QCi0JY21wCSQwLCAlZWJwCi0JamJlCUwoZXEpCi0jZW5kaWYKLQltb3Z6eAkoJWVheCksICVlY3gKLQltb3Z6eAkoJWVkeCksICVlYXgKLQotCXN1YgklZWN4LCAlZWF4Ci0JUkVUVVJOCi0KLQkucDJhbGlnbiA0Ci1MKEJ5dGUxKToKLSNpZmRlZiBVU0VfQVNfU1RSTkNNUAotCWNtcAkkMSwgJWVicAotCWpiZQlMKGVxKQotI2VuZGlmCi0JbW92engJMSglZWF4KSwgJWVjeAotCW1vdnp4CTEoJWVkeCksICVlYXgKLQotCXN1YgklZWN4LCAlZWF4Ci0JUkVUVVJOCi0KLQkucDJhbGlnbiA0Ci1MKEJ5dGUyKToKLSNpZmRlZiBVU0VfQVNfU1RSTkNNUAotCWNtcAkkMiwgJWVicAotCWpiZQlMKGVxKQotI2VuZGlmCi0JbW92engJMiglZWF4KSwgJWVjeAotCW1vdnp4CTIoJWVkeCksICVlYXgKLQotCXN1YgklZWN4LCAlZWF4Ci0JUkVUVVJOCi0KLQkucDJhbGlnbiA0Ci1MKEJ5dGUzKToKLSNpZmRlZiBVU0VfQVNfU1RSTkNNUAotCWNtcAkkMywgJWVicAotCWpiZQlMKGVxKQotI2VuZGlmCi0JbW92engJMyglZWF4KSwgJWVjeAotCW1vdnp4CTMoJWVkeCksICVlYXgKLQotCXN1YgklZWN4LCAlZWF4Ci0JUkVUVVJOCi0KLQkucDJhbGlnbiA0Ci1MKEJ5dGU0KToKLSNpZmRlZiBVU0VfQVNfU1RSTkNNUAotCWNtcAkkNCwgJWVicAotCWpiZQlMKGVxKQotI2VuZGlmCi0JbW92engJNCglZWF4KSwgJWVjeAotCW1vdnp4CTQoJWVkeCksICVlYXgKLQotCXN1YgklZWN4LCAlZWF4Ci0JUkVUVVJOCi0KLQkucDJhbGlnbiA0Ci1MKEJ5dGU1KToKLSNpZmRlZiBVU0VfQVNfU1RSTkNNUAotCWNtcAkkNSwgJWVicAotCWpiZQlMKGVxKQotI2VuZGlmCi0JbW92engJNSglZWF4KSwgJWVjeAotCW1vdnp4CTUoJWVkeCksICVlYXgKLQotCXN1YgklZWN4LCAlZWF4Ci0JUkVUVVJOCi0KLQkucDJhbGlnbiA0Ci1MKEJ5dGU2KToKLSNpZmRlZiBVU0VfQVNfU1RSTkNNUAotCWNtcAkkNiwgJWVicAotCWpiZQlMKGVxKQotI2VuZGlmCi0JbW92engJNiglZWF4KSwgJWVjeAotCW1vdnp4CTYoJWVkeCksICVlYXgKLQotCXN1YgklZWN4LCAlZWF4Ci0JUkVUVVJOCi0KLQkucDJhbGlnbiA0Ci1MKDJuZXh0XzhfYnl0ZXMpOgotCWFkZAkkOCwgJWVheAotCWFkZAkkOCwgJWVkeAotI2lmZGVmIFVTRV9BU19TVFJOQ01QCi0JY21wCSQ4LCAlZWJwCi0JbGVhCS04KCVlYnApLCAlZWJwCi0JamJlCUwoZXEpCi0jZW5kaWYKLQotCXRlc3QJJDB4MDEsICVjaAotCWpueglMKEJ5dGUwKQotCi0JdGVzdAkkMHgwMiwgJWNoCi0Jam56CUwoQnl0ZTEpCi0KLQl0ZXN0CSQweDA0LCAlY2gKLQlqbnoJTChCeXRlMikKLQotCXRlc3QJJDB4MDgsICVjaAotCWpueglMKEJ5dGUzKQotCi0JdGVzdAkkMHgxMCwgJWNoCi0Jam56CUwoQnl0ZTQpCi0KLQl0ZXN0CSQweDIwLCAlY2gKLQlqbnoJTChCeXRlNSkKLQotCXRlc3QJJDB4NDAsICVjaAotCWpueglMKEJ5dGU2KQotCi0jaWZkZWYgVVNFX0FTX1NUUk5DTVAKLQljbXAJJDcsICVlYnAKLQlqYmUJTChlcSkKLSNlbmRpZgotCW1vdnp4CTcoJWVheCksICVlY3gKLQltb3Z6eAk3KCVlZHgpLCAlZWF4Ci0KLQlzdWIJJWVjeCwgJWVheAotCVJFVFVSTgotCi0JLnAyYWxpZ24gNAotTChuZXEpOgotCW1vdgkkMSwgJWVheAotCWphCUwobmVxX2JpZ2dlcikKLQluZWcJJWVheAotTChuZXFfYmlnZ2VyKToKLQlSRVRVUk4KLQotI2lmZGVmIFVTRV9BU19TVFJOQ01QCi0JY2ZpX3Jlc3RvcmVfc3RhdGUKLQkucDJhbGlnbiA0Ci1MKG1vcmU4Ynl0ZXNlcSk6Ci0JUE9QCSglZXNpKQotCVBPUAkoJWVkaSkKLQlQT1AJKCVlYngpCi0jZW5kaWYKLQotTChlcSk6Ci0KLSNpZmRlZiBVU0VfQVNfU1RSTkNNUAotCVBPUAkoJWVicCkKLSNlbmRpZgotCXhvcmwJJWVheCwgJWVheAotCXJldAotCi0jaWZkZWYgVVNFX0FTX1NUUk5DTVAKLQlDRklfUFVTSCAoJWVicCkKLQotCS5wMmFsaWduIDQKLUwobGVzczE2Ynl0ZXNfc25jbXApOgotCXRlc3QJJWVicCwgJWVicAotCWp6CUwoZXEpCi0KLQltb3Z6YmwJKCVlYXgpLCAlZWN4Ci0JY21wYgklY2wsICglZWR4KQotCWpuZQlMKG5lcSkKLQl0ZXN0CSVjbCwgJWNsCi0JamUJTChlcSkKLQotCWNtcAkkMSwgJWVicAotCWplCUwoZXEpCi0KLQltb3Z6YmwJMSglZWF4KSwgJWVjeAotCWNtcGIJJWNsLCAxKCVlZHgpCi0Jam5lCUwobmVxKQotCXRlc3QJJWNsLCAlY2wKLQlqZQlMKGVxKQotCi0JY21wCSQyLCAlZWJwCi0JamUJTChlcSkKLQotCW1vdnpibAkyKCVlYXgpLCAlZWN4Ci0JY21wYgklY2wsIDIoJWVkeCkKLQlqbmUJTChuZXEpCi0JdGVzdAklY2wsICVjbAotCWplCUwoZXEpCi0KLQljbXAJJDMsICVlYnAKLQlqZQlMKGVxKQotCi0JbW92emJsCTMoJWVheCksICVlY3gKLQljbXBiCSVjbCwgMyglZWR4KQotCWpuZQlMKG5lcSkKLQl0ZXN0CSVjbCwgJWNsCi0JamUJTChlcSkKLQotCWNtcAkkNCwgJWVicAotCWplCUwoZXEpCi0KLQltb3Z6YmwJNCglZWF4KSwgJWVjeAotCWNtcGIJJWNsLCA0KCVlZHgpCi0Jam5lCUwobmVxKQotCXRlc3QJJWNsLCAlY2wKLQlqZQlMKGVxKQotCi0JY21wCSQ1LCAlZWJwCi0JamUJTChlcSkKLQotCW1vdnpibAk1KCVlYXgpLCAlZWN4Ci0JY21wYgklY2wsIDUoJWVkeCkKLQlqbmUJTChuZXEpCi0JdGVzdAklY2wsICVjbAotCWplCUwoZXEpCi0KLQljbXAJJDYsICVlYnAKLQlqZQlMKGVxKQotCi0JbW92emJsCTYoJWVheCksICVlY3gKLQljbXBiCSVjbCwgNiglZWR4KQotCWpuZQlMKG5lcSkKLQl0ZXN0CSVjbCwgJWNsCi0JamUJTChlcSkKLQotCWNtcAkkNywgJWVicAotCWplCUwoZXEpCi0KLQltb3Z6YmwJNyglZWF4KSwgJWVjeAotCWNtcGIJJWNsLCA3KCVlZHgpCi0Jam5lCUwobmVxKQotCXRlc3QJJWNsLCAlY2wKLQlqZQlMKGVxKQotCi0KLQljbXAJJDgsICVlYnAKLQlqZQlMKGVxKQotCi0JbW92emJsCTgoJWVheCksICVlY3gKLQljbXBiCSVjbCwgOCglZWR4KQotCWpuZQlMKG5lcSkKLQl0ZXN0CSVjbCwgJWNsCi0JamUJTChlcSkKLQotCWNtcAkkOSwgJWVicAotCWplCUwoZXEpCi0KLQltb3Z6YmwJOSglZWF4KSwgJWVjeAotCWNtcGIJJWNsLCA5KCVlZHgpCi0Jam5lCUwobmVxKQotCXRlc3QJJWNsLCAlY2wKLQlqZQlMKGVxKQotCi0JY21wCSQxMCwgJWVicAotCWplCUwoZXEpCi0KLQltb3Z6YmwJMTAoJWVheCksICVlY3gKLQljbXBiCSVjbCwgMTAoJWVkeCkKLQlqbmUJTChuZXEpCi0JdGVzdAklY2wsICVjbAotCWplCUwoZXEpCi0KLQljbXAJJDExLCAlZWJwCi0JamUJTChlcSkKLQotCW1vdnpibAkxMSglZWF4KSwgJWVjeAotCWNtcGIJJWNsLCAxMSglZWR4KQotCWpuZQlMKG5lcSkKLQl0ZXN0CSVjbCwgJWNsCi0JamUJTChlcSkKLQotCi0JY21wCSQxMiwgJWVicAotCWplCUwoZXEpCi0KLQltb3Z6YmwJMTIoJWVheCksICVlY3gKLQljbXBiCSVjbCwgMTIoJWVkeCkKLQlqbmUJTChuZXEpCi0JdGVzdAklY2wsICVjbAotCWplCUwoZXEpCi0KLQljbXAJJDEzLCAlZWJwCi0JamUJTChlcSkKLQotCW1vdnpibAkxMyglZWF4KSwgJWVjeAotCWNtcGIJJWNsLCAxMyglZWR4KQotCWpuZQlMKG5lcSkKLQl0ZXN0CSVjbCwgJWNsCi0JamUJTChlcSkKLQotCWNtcAkkMTQsICVlYnAKLQlqZQlMKGVxKQotCi0JbW92emJsCTE0KCVlYXgpLCAlZWN4Ci0JY21wYgklY2wsIDE0KCVlZHgpCi0Jam5lCUwobmVxKQotCXRlc3QJJWNsLCAlY2wKLQlqZQlMKGVxKQotCi0JY21wCSQxNSwgJWVicAotCWplCUwoZXEpCi0KLQltb3Z6YmwJMTUoJWVheCksICVlY3gKLQljbXBiCSVjbCwgMTUoJWVkeCkKLQlqbmUJTChuZXEpCi0JdGVzdAklY2wsICVjbAotCWplCUwoZXEpCi0KLQlQT1AJKCVlYnApCi0JeG9yCSVlYXgsICVlYXgKLQlyZXQKLSNlbmRpZgotCi1FTkQgKHNzc2UzX3N0cmNtcF9sYXRlc3QpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N0cmluZy9zc3NlMy1zdHJjcHktYXRvbS5TIGIvbGliYy9hcmNoLXg4Ni9zdHJpbmcvc3NzZTMtc3RyY3B5LWF0b20uUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDI1NGNhCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9zdHJpbmcvc3NzZTMtc3RyY3B5LWF0b20uUwpAQCAtMCwwICsxLDM5NTUgQEAKKy8qCitDb3B5cmlnaHQgKGMpIDIwMTEsIEludGVsIENvcnBvcmF0aW9uCitBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgICAgKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgICAgKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgICAgKiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKworICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBJbnRlbCBDb3Jwb3JhdGlvbiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAgICAqIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICAgICogd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKK0FOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECitXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCitESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCitBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyhJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKK0xPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyhJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCitTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisKKyNpZm5kZWYgVVNFX0FTX1NUUkNBVAorCisjIGlmbmRlZiBMCisjICBkZWZpbmUgTChsYWJlbCkJLkwjI2xhYmVsCisjIGVuZGlmCisKKyMgaWZuZGVmIGNmaV9zdGFydHByb2MKKyMgIGRlZmluZSBjZmlfc3RhcnRwcm9jCS5jZmlfc3RhcnRwcm9jCisjIGVuZGlmCisKKyMgaWZuZGVmIGNmaV9lbmRwcm9jCisjICBkZWZpbmUgY2ZpX2VuZHByb2MJLmNmaV9lbmRwcm9jCisjIGVuZGlmCisKKyMgaWZuZGVmIGNmaV9yZWxfb2Zmc2V0CisjICBkZWZpbmUgY2ZpX3JlbF9vZmZzZXQocmVnLCBvZmYpCS5jZmlfcmVsX29mZnNldCByZWcsIG9mZgorIyBlbmRpZgorCisjIGlmbmRlZiBjZmlfcmVzdG9yZQorIyAgZGVmaW5lIGNmaV9yZXN0b3JlKHJlZykJLmNmaV9yZXN0b3JlIHJlZworIyBlbmRpZgorCisjIGlmbmRlZiBjZmlfYWRqdXN0X2NmYV9vZmZzZXQKKyMgIGRlZmluZSBjZmlfYWRqdXN0X2NmYV9vZmZzZXQob2ZmKQkuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IG9mZgorIyBlbmRpZgorCisjIGlmbmRlZiBFTlRSWQorIyAgZGVmaW5lIEVOVFJZKG5hbWUpCVwKKwkudHlwZSBuYW1lLCBAZnVuY3Rpb247CVwKKwkuZ2xvYmwgbmFtZTsJXAorCS5wMmFsaWduIDQ7CVwKK25hbWU6CVwKKwljZmlfc3RhcnRwcm9jCisjIGVuZGlmCisKKyMgaWZuZGVmIEVORAorIyAgZGVmaW5lIEVORChuYW1lKQlcCisJY2ZpX2VuZHByb2M7CVwKKwkuc2l6ZSBuYW1lLCAuLW5hbWUKKyMgZW5kaWYKKworIyBkZWZpbmUgQ0ZJX1BVU0goUkVHKQlcCisJY2ZpX2FkanVzdF9jZmFfb2Zmc2V0ICg0KTsJXAorCWNmaV9yZWxfb2Zmc2V0IChSRUcsIDApCisKKyMgZGVmaW5lIENGSV9QT1AoUkVHKQlcCisJY2ZpX2FkanVzdF9jZmFfb2Zmc2V0ICgtNCk7CVwKKwljZmlfcmVzdG9yZSAoUkVHKQorCisjIGRlZmluZSBQVVNIKFJFRykJcHVzaGwgUkVHOyBDRklfUFVTSCAoUkVHKQorIyBkZWZpbmUgUE9QKFJFRykJcG9wbCBSRUc7IENGSV9QT1AgKFJFRykKKworIyBpZm5kZWYgU1RSQ1BZCisjICBkZWZpbmUgU1RSQ1BZICBzdHJjcHkKKyMgZW5kaWYKKworIyBpZmRlZiBVU0VfQVNfU1RSTkNQWQorIyAgZGVmaW5lIFBBUk1TICA4CisjICBkZWZpbmUgRU5UUkFOQ0UgUFVTSCAoJWVieCkKKyMgIGRlZmluZSBSRVRVUk4gIFBPUCAoJWVieCk7IHJldDsgQ0ZJX1BVU0ggKCVlYngpOworIyAgZGVmaW5lIFJFVFVSTjEgIFBPUCAoJWVkaSk7IFBPUCAoJWVieCk7IHJldDsgQ0ZJX1BVU0ggKCVlYngpOyBDRklfUFVTSCAoJWVkaSkKKyMgZWxzZQorIyAgZGVmaW5lIFBBUk1TICA0CisjICBkZWZpbmUgRU5UUkFOQ0UKKyMgIGRlZmluZSBSRVRVUk4gIHJldAorIyAgZGVmaW5lIFJFVFVSTjEgIFBPUCAoJWVkaSk7IHJldDsgQ0ZJX1BVU0ggKCVlZGkpCisjIGVuZGlmCisKKyMgaWZkZWYgVVNFX0FTX1NUUENQWQorIyAgZGVmaW5lIFNBVkVfUkVTVUxUKG4pICBsZWEJbiglZWR4KSwgJWVheAorIyAgZGVmaW5lIFNBVkVfUkVTVUxUX1RBSUwobikgIGxlYQluKCVlZHgpLCAlZWF4CisjIGVsc2UKKyMgIGRlZmluZSBTQVZFX1JFU1VMVChuKSAgbW92bAklZWRpLCAlZWF4CisjICBkZWZpbmUgU0FWRV9SRVNVTFRfVEFJTChuKSAgbW92bAklZWR4LCAlZWF4CisjIGVuZGlmCisKKyMgZGVmaW5lIFNUUjEgIFBBUk1TCisjIGRlZmluZSBTVFIyICBTVFIxKzQKKyMgZGVmaW5lIExFTiAgU1RSMis0CisKKy8qIEluIHRoaXMgY29kZSBmb2xsb3dpbmcgaW5zdHJ1Y3Rpb25zIGFyZSB1c2VkIGZvciBjb3B5aW5nOgorCW1vdmIJLSAxIGJ5dGUKKwltb3Z3CS0gMiBieXRlCisJbW92bAktIDQgYnl0ZQorCW1vdmxwZAktIDggYnl0ZQorCW1vdmFwcwktIDE2IGJ5dGUgLSByZXF1aXJlcyAxNiBieXRlIGFsaWdubWVudAorCW9mCXNvdXJzZSBhbmQgZGVzdGluYXRpb24gYWRyZXNzZXMuCisqLworCisudGV4dAorRU5UUlkgKFNUUkNQWSkKKwlFTlRSQU5DRQorCW1vdglTVFIxKCVlc3ApLCAlZWR4CisJbW92CVNUUjIoJWVzcCksICVlY3gKKyMgaWZkZWYgVVNFX0FTX1NUUk5DUFkKKwltb3ZsCUxFTiglZXNwKSwgJWVieAorCWNtcAkkOCwgJWVieAorCWpiZQlMKFN0cm5jcHlFeGl0OEJ5dGVzKQorIyBlbmRpZgorCWNtcGIJJDAsICglZWN4KQorCWp6CUwoRXhpdFRhaWwxKQorCWNtcGIJJDAsIDEoJWVjeCkKKwlqeglMKEV4aXRUYWlsMikKKwljbXBiCSQwLCAyKCVlY3gpCisJanoJTChFeGl0VGFpbDMpCisJY21wYgkkMCwgMyglZWN4KQorCWp6CUwoRXhpdFRhaWw0KQorCWNtcGIJJDAsIDQoJWVjeCkKKwlqeglMKEV4aXRUYWlsNSkKKwljbXBiCSQwLCA1KCVlY3gpCisJanoJTChFeGl0VGFpbDYpCisJY21wYgkkMCwgNiglZWN4KQorCWp6CUwoRXhpdFRhaWw3KQorCWNtcGIJJDAsIDcoJWVjeCkKKwlqeglMKEV4aXRUYWlsOCkKKyMgaWZkZWYgVVNFX0FTX1NUUk5DUFkKKwljbXAJJDE2LCAlZWJ4CisJamIJTChTdHJuY3B5RXhpdDE1Qnl0ZXMpCisjIGVuZGlmCisJY21wYgkkMCwgOCglZWN4KQorCWp6CUwoRXhpdFRhaWw5KQorCWNtcGIJJDAsIDkoJWVjeCkKKwlqeglMKEV4aXRUYWlsMTApCisJY21wYgkkMCwgMTAoJWVjeCkKKwlqeglMKEV4aXRUYWlsMTEpCisJY21wYgkkMCwgMTEoJWVjeCkKKwlqeglMKEV4aXRUYWlsMTIpCisJY21wYgkkMCwgMTIoJWVjeCkKKwlqeglMKEV4aXRUYWlsMTMpCisJY21wYgkkMCwgMTMoJWVjeCkKKwlqeglMKEV4aXRUYWlsMTQpCisJY21wYgkkMCwgMTQoJWVjeCkKKwlqeglMKEV4aXRUYWlsMTUpCisjIGlmIGRlZmluZWQgVVNFX0FTX1NUUk5DUFkgJiYgIWRlZmluZWQgVVNFX0FTX1NUUkxDUFkKKwljbXAJJDE2LCAlZWJ4CisJamUJTChFeGl0VGFpbDE2KQorIyBlbmRpZgorCWNtcGIJJDAsIDE1KCVlY3gpCisJanoJTChFeGl0VGFpbDE2KQorCisjIGlmIGRlZmluZWQgVVNFX0FTX1NUUk5DUFkgJiYgZGVmaW5lZCBVU0VfQVNfU1RSTENQWQorCWNtcAkkMTYsICVlYngKKwlqZQlMKFN0cmxjcHlFeGl0VGFpbDE2KQorIyBlbmRpZgorCisJUFVTSAkoJWVkaSkKKyMgaWZuZGVmIFVTRV9BU19TVFJMQ1BZCisJbW92CSVlZHgsICVlZGkKKyMgZWxzZQorCW1vdgklZWN4LCAlZWRpCisjIGVuZGlmCisjZW5kaWYKKwlQVVNICSglZXNpKQorI2lmZGVmIFVTRV9BU19TVFJOQ1BZCisJbW92CSVlY3gsICVlc2kKKwlzdWIJJDE2LCAlZWJ4CisJYW5kCSQweGYsICVlc2kKKworLyogYWRkIDE2IGJ5dGVzIGVjeF9vZmZzZXQgdG8gZWJ4ICovCisKKwlhZGQJJWVzaSwgJWVieAorI2VuZGlmCisJbGVhCTE2KCVlY3gpLCAlZXNpCisJYW5kCSQtMTYsICVlc2kKKwlweG9yCSV4bW0wLCAleG1tMAorCW1vdmxwZAkoJWVjeCksICV4bW0xCisJbW92bHBkCSV4bW0xLCAoJWVkeCkKKworCXBjbXBlcWIJKCVlc2kpLCAleG1tMAorCW1vdmxwZAk4KCVlY3gpLCAleG1tMQorCW1vdmxwZAkleG1tMSwgOCglZWR4KQorCisJcG1vdm1za2IgJXhtbTAsICVlYXgKKwlzdWIJJWVjeCwgJWVzaQorCisjaWZkZWYgVVNFX0FTX1NUUk5DUFkKKwlzdWIJJDE2LCAlZWJ4CisJamJlCUwoQ29weUZyb20xVG8xNkJ5dGVzQ2FzZTJPckNhc2UzKQorI2VuZGlmCisJdGVzdAklZWF4LCAlZWF4CisJam56CUwoQ29weUZyb20xVG8xNkJ5dGVzKQorCisJbW92CSVlZHgsICVlYXgKKwlsZWEJMTYoJWVkeCksICVlZHgKKwlhbmQJJC0xNiwgJWVkeAorCXN1YgklZWR4LCAlZWF4CisKKyNpZmRlZiBVU0VfQVNfU1RSTkNQWQorCWFkZAklZWF4LCAlZXNpCisJbGVhCS0xKCVlc2kpLCAlZXNpCisJYW5kCSQxPDwzMSwgJWVzaQorCXRlc3QJJWVzaSwgJWVzaQorCWpueglMKENvbnRpbnVlQ29weSkKKwlsZWEJMTYoJWVieCksICVlYngKKworTChDb250aW51ZUNvcHkpOgorI2VuZGlmCisJc3ViCSVlYXgsICVlY3gKKwltb3YJJWVjeCwgJWVheAorCWFuZAkkMHhmLCAlZWF4CisJbW92CSQwLCAlZXNpCisKKy8qIGNhc2U6IGVjeF9vZmZzZXQgPT0gZWR4X29mZnNldCAqLworCisJanoJTChBbGlnbjE2Qm90aCkKKworCWNtcAkkOCwgJWVheAorCWphZQlMKFNobEhpZ2g4KQorCWNtcAkkMSwgJWVheAorCWplCUwoU2hsMSkKKwljbXAJJDIsICVlYXgKKwlqZQlMKFNobDIpCisJY21wCSQzLCAlZWF4CisJamUJTChTaGwzKQorCWNtcAkkNCwgJWVheAorCWplCUwoU2hsNCkKKwljbXAJJDUsICVlYXgKKwlqZQlMKFNobDUpCisJY21wCSQ2LCAlZWF4CisJamUJTChTaGw2KQorCWptcAlMKFNobDcpCisKK0woU2hsSGlnaDgpOgorCWplCUwoU2hsOCkKKwljbXAJJDksICVlYXgKKwlqZQlMKFNobDkpCisJY21wCSQxMCwgJWVheAorCWplCUwoU2hsMTApCisJY21wCSQxMSwgJWVheAorCWplCUwoU2hsMTEpCisJY21wCSQxMiwgJWVheAorCWplCUwoU2hsMTIpCisJY21wCSQxMywgJWVheAorCWplCUwoU2hsMTMpCisJY21wCSQxNCwgJWVheAorCWplCUwoU2hsMTQpCisJam1wCUwoU2hsMTUpCisKK0woQWxpZ24xNkJvdGgpOgorCW1vdmFwcwkoJWVjeCksICV4bW0xCisJbW92YXBzCTE2KCVlY3gpLCAleG1tMgorCW1vdmFwcwkleG1tMSwgKCVlZHgpCisJcGNtcGVxYgkleG1tMiwgJXhtbTAKKwlwbW92bXNrYiAleG1tMCwgJWVheAorCWxlYQkxNiglZXNpKSwgJWVzaQorI2lmZGVmIFVTRV9BU19TVFJOQ1BZCisJc3ViCSQxNiwgJWVieAorCWpiZQlMKENvcHlGcm9tMVRvMTZCeXRlc0Nhc2UyT3JDYXNlMykKKyNlbmRpZgorCXRlc3QJJWVheCwgJWVheAorCWpueglMKENvcHlGcm9tMVRvMTZCeXRlcykKKworCW1vdmFwcwkxNiglZWN4LCAlZXNpKSwgJXhtbTMKKwltb3ZhcHMJJXhtbTIsICglZWR4LCAlZXNpKQorCXBjbXBlcWIJJXhtbTMsICV4bW0wCisJcG1vdm1za2IgJXhtbTAsICVlYXgKKwlsZWEJMTYoJWVzaSksICVlc2kKKyNpZmRlZiBVU0VfQVNfU1RSTkNQWQorCXN1YgkkMTYsICVlYngKKwlqYmUJTChDb3B5RnJvbTFUbzE2Qnl0ZXNDYXNlMk9yQ2FzZTMpCisjZW5kaWYKKwl0ZXN0CSVlYXgsICVlYXgKKwlqbnoJTChDb3B5RnJvbTFUbzE2Qnl0ZXMpCisKKwltb3ZhcHMJMTYoJWVjeCwgJWVzaSksICV4bW00CisJbW92YXBzCSV4bW0zLCAoJWVkeCwgJWVzaSkKKwlwY21wZXFiCSV4bW00LCAleG1tMAorCXBtb3Ztc2tiICV4bW0wLCAlZWF4CisJbGVhCTE2KCVlc2kpLCAlZXNpCisjaWZkZWYgVVNFX0FTX1NUUk5DUFkKKwlzdWIJJDE2LCAlZWJ4CisJamJlCUwoQ29weUZyb20xVG8xNkJ5dGVzQ2FzZTJPckNhc2UzKQorI2VuZGlmCisJdGVzdAklZWF4LCAlZWF4CisJam56CUwoQ29weUZyb20xVG8xNkJ5dGVzKQorCisJbW92YXBzCTE2KCVlY3gsICVlc2kpLCAleG1tMQorCW1vdmFwcwkleG1tNCwgKCVlZHgsICVlc2kpCisJcGNtcGVxYgkleG1tMSwgJXhtbTAKKwlwbW92bXNrYiAleG1tMCwgJWVheAorCWxlYQkxNiglZXNpKSwgJWVzaQorI2lmZGVmIFVTRV9BU19TVFJOQ1BZCisJc3ViCSQxNiwgJWVieAorCWpiZQlMKENvcHlGcm9tMVRvMTZCeXRlc0Nhc2UyT3JDYXNlMykKKyNlbmRpZgorCXRlc3QJJWVheCwgJWVheAorCWpueglMKENvcHlGcm9tMVRvMTZCeXRlcykKKworCW1vdmFwcwkxNiglZWN4LCAlZXNpKSwgJXhtbTIKKwltb3ZhcHMJJXhtbTEsICglZWR4LCAlZXNpKQorCXBjbXBlcWIJJXhtbTIsICV4bW0wCisJcG1vdm1za2IgJXhtbTAsICVlYXgKKwlsZWEJMTYoJWVzaSksICVlc2kKKyNpZmRlZiBVU0VfQVNfU1RSTkNQWQorCXN1YgkkMTYsICVlYngKKwlqYmUJTChDb3B5RnJvbTFUbzE2Qnl0ZXNDYXNlMk9yQ2FzZTMpCisjZW5kaWYKKwl0ZXN0CSVlYXgsICVlYXgKKwlqbnoJTChDb3B5RnJvbTFUbzE2Qnl0ZXMpCisKKwltb3ZhcHMJMTYoJWVjeCwgJWVzaSksICV4bW0zCisJbW92YXBzCSV4bW0yLCAoJWVkeCwgJWVzaSkKKwlwY21wZXFiCSV4bW0zLCAleG1tMAorCXBtb3Ztc2tiICV4bW0wLCAlZWF4CisJbGVhCTE2KCVlc2kpLCAlZXNpCisjaWZkZWYgVVNFX0FTX1NUUk5DUFkKKwlzdWIJJDE2LCAlZWJ4CisJamJlCUwoQ29weUZyb20xVG8xNkJ5dGVzQ2FzZTJPckNhc2UzKQorI2VuZGlmCisJdGVzdAklZWF4LCAlZWF4CisJam56CUwoQ29weUZyb20xVG8xNkJ5dGVzKQorCisJbW92YXBzCSV4bW0zLCAoJWVkeCwgJWVzaSkKKwltb3YJJWVjeCwgJWVheAorCWxlYQkxNiglZWN4LCAlZXNpKSwgJWVjeAorCWFuZAkkLTB4NDAsICVlY3gKKwlzdWIJJWVjeCwgJWVheAorCXN1YgklZWF4LCAlZWR4CisjaWZkZWYgVVNFX0FTX1NUUk5DUFkKKwlsZWEJMTEyKCVlYngsICVlYXgpLCAlZWJ4CisjZW5kaWYKKwltb3YJJC0weDQwLCAlZXNpCisKK0woQWxpZ25lZDY0TG9vcCk6CisJbW92YXBzCSglZWN4KSwgJXhtbTIKKwltb3ZhcHMJMzIoJWVjeCksICV4bW0zCisJbW92YXBzCSV4bW0yLCAleG1tNAorCW1vdmFwcwkxNiglZWN4KSwgJXhtbTUKKwltb3ZhcHMJJXhtbTMsICV4bW02CisJbW92YXBzCTQ4KCVlY3gpLCAleG1tNworCXBtaW51YgkleG1tNSwgJXhtbTIKKwlwbWludWIJJXhtbTcsICV4bW0zCisJcG1pbnViCSV4bW0yLCAleG1tMworCWxlYQk2NCglZWR4KSwgJWVkeAorCXBjbXBlcWIJJXhtbTAsICV4bW0zCisJbGVhCTY0KCVlY3gpLCAlZWN4CisJcG1vdm1za2IgJXhtbTMsICVlYXgKKyNpZmRlZiBVU0VfQVNfU1RSTkNQWQorCXN1YgkkNjQsICVlYngKKwlqYmUJTChTdHJuY3B5TGVhdmVDYXNlMk9yQ2FzZTMpCisjZW5kaWYKKwl0ZXN0CSVlYXgsICVlYXgKKwlqbnoJTChBbGlnbmVkNjRMZWF2ZSkKKwltb3ZhcHMJJXhtbTQsIC02NCglZWR4KQorCW1vdmFwcwkleG1tNSwgLTQ4KCVlZHgpCisJbW92YXBzCSV4bW02LCAtMzIoJWVkeCkKKwltb3ZhcHMJJXhtbTcsIC0xNiglZWR4KQorCWptcAlMKEFsaWduZWQ2NExvb3ApCisKK0woQWxpZ25lZDY0TGVhdmUpOgorI2lmZGVmIFVTRV9BU19TVFJOQ1BZCisJbGVhCTQ4KCVlYngpLCAlZWJ4CisjZW5kaWYKKwlwY21wZXFiCSV4bW00LCAleG1tMAorCXBtb3Ztc2tiICV4bW0wLCAlZWF4CisJdGVzdAklZWF4LCAlZWF4CisJam56CUwoQ29weUZyb20xVG8xNkJ5dGVzKQorCisJcGNtcGVxYgkleG1tNSwgJXhtbTAKKyNpZmRlZiBVU0VfQVNfU1RSTkNQWQorCWxlYQktMTYoJWVieCksICVlYngKKyNlbmRpZgorCXBtb3Ztc2tiICV4bW0wLCAlZWF4CisJbW92YXBzCSV4bW00LCAtNjQoJWVkeCkKKwlsZWEJMTYoJWVzaSksICVlc2kKKwl0ZXN0CSVlYXgsICVlYXgKKwlqbnoJTChDb3B5RnJvbTFUbzE2Qnl0ZXMpCisKKwlwY21wZXFiCSV4bW02LCAleG1tMAorI2lmZGVmIFVTRV9BU19TVFJOQ1BZCisJbGVhCS0xNiglZWJ4KSwgJWVieAorI2VuZGlmCisJcG1vdm1za2IgJXhtbTAsICVlYXgKKwltb3ZhcHMJJXhtbTUsIC00OCglZWR4KQorCWxlYQkxNiglZXNpKSwgJWVzaQorCXRlc3QJJWVheCwgJWVheAorCWpueglMKENvcHlGcm9tMVRvMTZCeXRlcykKKworCW1vdmFwcwkleG1tNiwgLTMyKCVlZHgpCisJcGNtcGVxYgkleG1tNywgJXhtbTAKKyNpZmRlZiBVU0VfQVNfU1RSTkNQWQorCWxlYQktMTYoJWVieCksICVlYngKKyNlbmRpZgorCXBtb3Ztc2tiICV4bW0wLCAlZWF4CisJbGVhCTE2KCVlc2kpLCAlZXNpCisJam1wCUwoQ29weUZyb20xVG8xNkJ5dGVzKQorCisJLnAyYWxpZ24gNAorTChTaGwxKToKKwltb3ZhcHMJLTEoJWVjeCksICV4bW0xCisJbW92YXBzCTE1KCVlY3gpLCAleG1tMgorTChTaGwxU3RhcnQpOgorCXBjbXBlcWIJJXhtbTIsICV4bW0wCisJcG1vdm1za2IgJXhtbTAsICVlYXgKKwltb3ZhcHMJJXhtbTIsICV4bW0zCisjaWZkZWYgVVNFX0FTX1NUUk5DUFkKKwlzdWIJJDE2LCAlZWJ4CisJamJlCUwoU3RybmNweUV4aXQxQ2FzZTJPckNhc2UzKQorI2VuZGlmCisJdGVzdAklZWF4LCAlZWF4CisJam56CUwoU2hsMUxvb3BFeGl0KQorCisJcGFsaWducgkkMSwgJXhtbTEsICV4bW0yCisJbW92YXBzCSV4bW0zLCAleG1tMQorCW1vdmFwcwkleG1tMiwgKCVlZHgpCisJbW92YXBzCTMxKCVlY3gpLCAleG1tMgorCisJcGNtcGVxYgkleG1tMiwgJXhtbTAKKwlsZWEJMTYoJWVkeCksICVlZHgKKwlwbW92bXNrYiAleG1tMCwgJWVheAorCWxlYQkxNiglZWN4KSwgJWVjeAorCW1vdmFwcwkleG1tMiwgJXhtbTMKKyNpZmRlZiBVU0VfQVNfU1RSTkNQWQorCXN1YgkkMTYsICVlYngKKwlqYmUJTChTdHJuY3B5RXhpdDFDYXNlMk9yQ2FzZTMpCisjZW5kaWYKKwl0ZXN0CSVlYXgsICVlYXgKKwlqbnoJTChTaGwxTG9vcEV4aXQpCisKKwlwYWxpZ25yCSQxLCAleG1tMSwgJXhtbTIKKwltb3ZhcHMJJXhtbTIsICglZWR4KQorCW1vdmFwcwkzMSglZWN4KSwgJXhtbTIKKwltb3ZhcHMJJXhtbTMsICV4bW0xCisKKwlwY21wZXFiCSV4bW0yLCAleG1tMAorCWxlYQkxNiglZWR4KSwgJWVkeAorCXBtb3Ztc2tiICV4bW0wLCAlZWF4CisJbGVhCTE2KCVlY3gpLCAlZWN4CisJbW92YXBzCSV4bW0yLCAleG1tMworI2lmZGVmIFVTRV9BU19TVFJOQ1BZCisJc3ViCSQxNiwgJWVieAorCWpiZQlMKFN0cm5jcHlFeGl0MUNhc2UyT3JDYXNlMykKKyNlbmRpZgorCXRlc3QJJWVheCwgJWVheAorCWpueglMKFNobDFMb29wRXhpdCkKKworCXBhbGlnbnIJJDEsICV4bW0xLCAleG1tMgorCW1vdmFwcwkleG1tMiwgKCVlZHgpCisJbW92YXBzCTMxKCVlY3gpLCAleG1tMgorCisJcGNtcGVxYgkleG1tMiwgJXhtbTAKKwlsZWEJMTYoJWVkeCksICVlZHgKKwlwbW92bXNrYiAleG1tMCwgJWVheAorCWxlYQkxNiglZWN4KSwgJWVjeAorI2lmZGVmIFVTRV9BU19TVFJOQ1BZCisJc3ViCSQxNiwgJWVieAorCWpiZQlMKFN0cm5jcHlFeGl0MUNhc2UyT3JDYXNlMykKKyNlbmRpZgorCXRlc3QJJWVheCwgJWVheAorCWpueglMKFNobDFMb29wRXhpdCkKKworCXBhbGlnbnIJJDEsICV4bW0zLCAleG1tMgorCW1vdmFwcwkleG1tMiwgKCVlZHgpCisJbGVhCTMxKCVlY3gpLCAlZWN4CisJbGVhCTE2KCVlZHgpLCAlZWR4CisKKwltb3YJJWVjeCwgJWVheAorCWFuZAkkLTB4NDAsICVlY3gKKwlzdWIJJWVjeCwgJWVheAorCWxlYQktMTUoJWVjeCksICVlY3gKKwlzdWIJJWVheCwgJWVkeAorI2lmZGVmIFVTRV9BU19TVFJOQ1BZCisJYWRkCSVlYXgsICVlYngKKyNlbmRpZgorCW1vdmFwcwktMSglZWN4KSwgJXhtbTEKKworTChTaGwxTG9vcFN0YXJ0KToKKwltb3ZhcHMJMTUoJWVjeCksICV4bW0yCisJbW92YXBzCTMxKCVlY3gpLCAleG1tMworCW1vdmFwcwkleG1tMywgJXhtbTYKKwltb3ZhcHMJNDcoJWVjeCksICV4bW00CisJbW92YXBzCSV4bW00LCAleG1tNworCW1vdmFwcwk2MyglZWN4KSwgJXhtbTUKKwlwbWludWIJJXhtbTIsICV4bW02CisJcG1pbnViCSV4bW01LCAleG1tNworCXBtaW51YgkleG1tNiwgJXhtbTcKKwlwY21wZXFiCSV4bW0wLCAleG1tNworCXBtb3Ztc2tiICV4bW03LCAlZWF4CisJbW92YXBzCSV4bW01LCAleG1tNworCXBhbGlnbnIJJDEsICV4bW00LCAleG1tNQorCXBhbGlnbnIJJDEsICV4bW0zLCAleG1tNAorCXRlc3QJJWVheCwgJWVheAorCWpueglMKFNobDFTdGFydCkKKyNpZmRlZiBVU0VfQVNfU1RSTkNQWQorCXN1YgkkNjQsICVlYngKKwlqYmUJTChTdHJuY3B5TGVhdmUxKQorI2VuZGlmCisJcGFsaWducgkkMSwgJXhtbTIsICV4bW0zCisJbGVhCTY0KCVlY3gpLCAlZWN4CisJcGFsaWducgkkMSwgJXhtbTEsICV4bW0yCisJbW92YXBzCSV4bW03LCAleG1tMQorCW1vdmFwcwkleG1tNSwgNDgoJWVkeCkKKwltb3ZhcHMJJXhtbTQsIDMyKCVlZHgpCisJbW92YXBzCSV4bW0zLCAxNiglZWR4KQorCW1vdmFwcwkleG1tMiwgKCVlZHgpCisJbGVhCTY0KCVlZHgpLCAlZWR4CisJam1wCUwoU2hsMUxvb3BTdGFydCkKKworTChTaGwxTG9vcEV4aXQpOgorCW1vdmxwZAkoJWVjeCksICV4bW0wCisJbW92bHBkCSV4bW0wLCAoJWVkeCkKKwltb3ZscGQJNyglZWN4KSwgJXhtbTAKKwltb3ZscGQJJXhtbTAsIDcoJWVkeCkKKwltb3YJJDE1LCAlZXNpCisJam1wCUwoQ29weUZyb20xVG8xNkJ5dGVzKQorCisJLnAyYWxpZ24gNAorTChTaGwyKToKKwltb3ZhcHMJLTIoJWVjeCksICV4bW0xCisJbW92YXBzCTE0KCVlY3gpLCAleG1tMgorTChTaGwyU3RhcnQpOgorCXBjbXBlcWIJJXhtbTIsICV4bW0wCisJcG1vdm1za2IgJXhtbTAsICVlYXgKKwltb3ZhcHMJJXhtbTIsICV4bW0zCisjaWZkZWYgVVNFX0FTX1NUUk5DUFkKKwlzdWIJJDE2LCAlZWJ4CisJamJlCUwoU3RybmNweUV4aXQyQ2FzZTJPckNhc2UzKQorI2VuZGlmCisJdGVzdAklZWF4LCAlZWF4CisJam56CUwoU2hsMkxvb3BFeGl0KQorCisJcGFsaWducgkkMiwgJXhtbTEsICV4bW0yCisJbW92YXBzCSV4bW0zLCAleG1tMQorCW1vdmFwcwkleG1tMiwgKCVlZHgpCisJbW92YXBzCTMwKCVlY3gpLCAleG1tMgorCisJcGNtcGVxYgkleG1tMiwgJXhtbTAKKwlsZWEJMTYoJWVkeCksICVlZHgKKwlwbW92bXNrYiAleG1tMCwgJWVheAorCWxlYQkxNiglZWN4KSwgJWVjeAorCW1vdmFwcwkleG1tMiwgJXhtbTMKKyNpZmRlZiBVU0VfQVNfU1RSTkNQWQorCXN1YgkkMTYsICVlYngKKwlqYmUJTChTdHJuY3B5RXhpdDJDYXNlMk9yQ2FzZTMpCisjZW5kaWYKKwl0ZXN0CSVlYXgsICVlYXgKKwlqbnoJTChTaGwyTG9vcEV4aXQpCisKKwlwYWxpZ25yCSQyLCAleG1tMSwgJXhtbTIKKwltb3ZhcHMJJXhtbTIsICglZWR4KQorCW1vdmFwcwkzMCglZWN4KSwgJXhtbTIKKwltb3ZhcHMJJXhtbTMsICV4bW0xCisKKwlwY21wZXFiCSV4bW0yLCAleG1tMAorCWxlYQkxNiglZWR4KSwgJWVkeAorCXBtb3Ztc2tiICV4bW0wLCAlZWF4CisJbGVhCTE2KCVlY3gpLCAlZWN4CisJbW92YXBzCSV4bW0yLCAleG1tMworI2lmZGVmIFVTRV9BU19TVFJOQ1BZCisJc3ViCSQxNiwgJWVieAorCWpiZQlMKFN0cm5jcHlFeGl0MkNhc2UyT3JDYXNlMykKKyNlbmRpZgorCXRlc3QJJWVheCwgJWVheAorCWpueglMKFNobDJMb29wRXhpdCkKKworCXBhbGlnbnIJJDIsICV4bW0xLCAleG1tMgorCW1vdmFwcwkleG1tMiwgKCVlZHgpCisJbW92YXBzCTMwKCVlY3gpLCAleG1tMgorCisJcGNtcGVxYgkleG1tMiwgJXhtbTAKKwlsZWEJMTYoJWVkeCksICVlZHgKKwlwbW92bXNrYiAleG1tMCwgJWVheAorCWxlYQkxNiglZWN4KSwgJWVjeAorI2lmZGVmIFVTRV9BU19TVFJOQ1BZCisJc3ViCSQxNiwgJWVieAorCWpiZQlMKFN0cm5jcHlFeGl0MkNhc2UyT3JDYXNlMykKKyNlbmRpZgorCXRlc3QJJWVheCwgJWVheAorCWpueglMKFNobDJMb29wRXhpdCkKKworCXBhbGlnbnIJJDIsICV4bW0zLCAleG1tMgorCW1vdmFwcwkleG1tMiwgKCVlZHgpCisJbGVhCTMwKCVlY3gpLCAlZWN4CisJbGVhCTE2KCVlZHgpLCAlZWR4CisKKwltb3YJJWVjeCwgJWVheAorCWFuZAkkLTB4NDAsICVlY3gKKwlzdWIJJWVjeCwgJWVheAorCWxlYQktMTQoJWVjeCksICVlY3gKKwlzdWIJJWVheCwgJWVkeAorI2lmZGVmIFVTRV9BU19TVFJOQ1BZCisJYWRkCSVlYXgsICVlYngKKyNlbmRpZgorCW1vdmFwcwktMiglZWN4KSwgJXhtbTEKKworTChTaGwyTG9vcFN0YXJ0KToKKwltb3ZhcHMJMTQoJWVjeCksICV4bW0yCisJbW92YXBzCTMwKCVlY3gpLCAleG1tMworCW1vdmFwcwkleG1tMywgJXhtbTYKKwltb3ZhcHMJNDYoJWVjeCksICV4bW00CisJbW92YXBzCSV4bW00LCAleG1tNworCW1vdmFwcwk2MiglZWN4KSwgJXhtbTUKKwlwbWludWIJJXhtbTIsICV4bW02CisJcG1pbnViCSV4bW01LCAleG1tNworCXBtaW51YgkleG1tNiwgJXhtbTcKKwlwY21wZXFiCSV4bW0wLCAleG1tNworCXBtb3Ztc2tiICV4bW03LCAlZWF4CisJbW92YXBzCSV4bW01LCAleG1tNworCXBhbGlnbnIJJDIsICV4bW00LCAleG1tNQorCXBhbGlnbnIJJDIsICV4bW0zLCAleG1tNAorCXRlc3QJJWVheCwgJWVheAorCWpueglMKFNobDJTdGFydCkKKyNpZmRlZiBVU0VfQVNfU1RSTkNQWQorCXN1YgkkNjQsICVlYngKKwlqYmUJTChTdHJuY3B5TGVhdmUyKQorI2VuZGlmCisJcGFsaWducgkkMiwgJXhtbTIsICV4bW0zCisJbGVhCTY0KCVlY3gpLCAlZWN4CisJcGFsaWducgkkMiwgJXhtbTEsICV4bW0yCisJbW92YXBzCSV4bW03LCAleG1tMQorCW1vdmFwcwkleG1tNSwgNDgoJWVkeCkKKwltb3ZhcHMJJXhtbTQsIDMyKCVlZHgpCisJbW92YXBzCSV4bW0zLCAxNiglZWR4KQorCW1vdmFwcwkleG1tMiwgKCVlZHgpCisJbGVhCTY0KCVlZHgpLCAlZWR4CisJam1wCUwoU2hsMkxvb3BTdGFydCkKKworTChTaGwyTG9vcEV4aXQpOgorCW1vdmxwZAkoJWVjeCksICV4bW0wCisJbW92bHBkCTYoJWVjeCksICV4bW0xCisJbW92bHBkCSV4bW0wLCAoJWVkeCkKKwltb3ZscGQJJXhtbTEsIDYoJWVkeCkKKwltb3YJJDE0LCAlZXNpCisJam1wCUwoQ29weUZyb20xVG8xNkJ5dGVzKQorCisJLnAyYWxpZ24gNAorTChTaGwzKToKKwltb3ZhcHMJLTMoJWVjeCksICV4bW0xCisJbW92YXBzCTEzKCVlY3gpLCAleG1tMgorTChTaGwzU3RhcnQpOgorCXBjbXBlcWIJJXhtbTIsICV4bW0wCisJcG1vdm1za2IgJXhtbTAsICVlYXgKKwltb3ZhcHMJJXhtbTIsICV4bW0zCisjaWZkZWYgVVNFX0FTX1NUUk5DUFkKKwlzdWIJJDE2LCAlZWJ4CisJamJlCUwoU3RybmNweUV4aXQzQ2FzZTJPckNhc2UzKQorI2VuZGlmCisJdGVzdAklZWF4LCAlZWF4CisJam56CUwoU2hsM0xvb3BFeGl0KQorCisJcGFsaWducgkkMywgJXhtbTEsICV4bW0yCisJbW92YXBzCSV4bW0zLCAleG1tMQorCW1vdmFwcwkleG1tMiwgKCVlZHgpCisJbW92YXBzCTI5KCVlY3gpLCAleG1tMgorCisJcGNtcGVxYgkleG1tMiwgJXhtbTAKKwlsZWEJMTYoJWVkeCksICVlZHgKKwlwbW92bXNrYiAleG1tMCwgJWVheAorCWxlYQkxNiglZWN4KSwgJWVjeAorCW1vdmFwcwkleG1tMiwgJXhtbTMKKyNpZmRlZiBVU0VfQVNfU1RSTkNQWQorCXN1YgkkMTYsICVlYngKKwlqYmUJTChTdHJuY3B5RXhpdDNDYXNlMk9yQ2FzZTMpCisjZW5kaWYKKwl0ZXN0CSVlYXgsICVlYXgKKwlqbnoJTChTaGwzTG9vcEV4aXQpCisKKwlwYWxpZ25yCSQzLCAleG1tMSwgJXhtbTIKKwltb3ZhcHMJJXhtbTIsICglZWR4KQorCW1vdmFwcwkyOSglZWN4KSwgJXhtbTIKKwltb3ZhcHMJJXhtbTMsICV4bW0xCisKKwlwY21wZXFiCSV4bW0yLCAleG1tMAorCWxlYQkxNiglZWR4KSwgJWVkeAorCXBtb3Ztc2tiICV4bW0wLCAlZWF4CisJbGVhCTE2KCVlY3gpLCAlZWN4CisJbW92YXBzCSV4bW0yLCAleG1tMworI2lmZGVmIFVTRV9BU19TVFJOQ1BZCisJc3ViCSQxNiwgJWVieAorCWpiZQlMKFN0cm5jcHlFeGl0M0Nhc2UyT3JDYXNlMykKKyNlbmRpZgorCXRlc3QJJWVheCwgJWVheAorCWpueglMKFNobDNMb29wRXhpdCkKKworCXBhbGlnbnIJJDMsICV4bW0xLCAleG1tMgorCW1vdmFwcwkleG1tMiwgKCVlZHgpCisJbW92YXBzCTI5KCVlY3gpLCAleG1tMgorCisJcGNtcGVxYgkleG1tMiwgJXhtbTAKKwlsZWEJMTYoJWVkeCksICVlZHgKKwlwbW92bXNrYiAleG1tMCwgJWVheAorCWxlYQkxNiglZWN4KSwgJWVjeAorI2lmZGVmIFVTRV9BU19TVFJOQ1BZCisJc3ViCSQxNiwgJWVieAorCWpiZQlMKFN0cm5jcHlFeGl0M0Nhc2UyT3JDYXNlMykKKyNlbmRpZgorCXRlc3QJJWVheCwgJWVheAorCWpueglMKFNobDNMb29wRXhpdCkKKworCXBhbGlnbnIJJDMsICV4bW0zLCAleG1tMgorCW1vdmFwcwkleG1tMiwgKCVlZHgpCisJbGVhCTI5KCVlY3gpLCAlZWN4CisJbGVhCTE2KCVlZHgpLCAlZWR4CisKKwltb3YJJWVjeCwgJWVheAorCWFuZAkkLTB4NDAsICVlY3gKKwlzdWIJJWVjeCwgJWVheAorCWxlYQktMTMoJWVjeCksICVlY3gKKwlzdWIJJWVheCwgJWVkeAorI2lmZGVmIFVTRV9BU19TVFJOQ1BZCisJYWRkCSVlYXgsICVlYngKKyNlbmRpZgorCW1vdmFwcwktMyglZWN4KSwgJXhtbTEKKworTChTaGwzTG9vcFN0YXJ0KToKKwltb3ZhcHMJMTMoJWVjeCksICV4bW0yCisJbW92YXBzCTI5KCVlY3gpLCAleG1tMworCW1vdmFwcwkleG1tMywgJXhtbTYKKwltb3ZhcHMJNDUoJWVjeCksICV4bW00CisJbW92YXBzCSV4bW00LCAleG1tNworCW1vdmFwcwk2MSglZWN4KSwgJXhtbTUKKwlwbWludWIJJXhtbTIsICV4bW02CisJcG1pbnViCSV4bW01LCAleG1tNworCXBtaW51YgkleG1tNiwgJXhtbTcKKwlwY21wZXFiCSV4bW0wLCAleG1tNworCXBtb3Ztc2tiICV4bW03LCAlZWF4CisJbW92YXBzCSV4bW01LCAleG1tNworCXBhbGlnbnIJJDMsICV4bW00LCAleG1tNQorCXBhbGlnbnIJJDMsICV4bW0zLCAleG1tNAorCXRlc3QJJWVheCwgJWVheAorCWpueglMKFNobDNTdGFydCkKKyNpZmRlZiBVU0VfQVNfU1RSTkNQWQorCXN1YgkkNjQsICVlYngKKwlqYmUJTChTdHJuY3B5TGVhdmUzKQorI2VuZGlmCisJcGFsaWducgkkMywgJXhtbTIsICV4bW0zCisJbGVhCTY0KCVlY3gpLCAlZWN4CisJcGFsaWducgkkMywgJXhtbTEsICV4bW0yCisJbW92YXBzCSV4bW03LCAleG1tMQorCW1vdmFwcwkleG1tNSwgNDgoJWVkeCkKKwltb3ZhcHMJJXhtbTQsIDMyKCVlZHgpCisJbW92YXBzCSV4bW0zLCAxNiglZWR4KQorCW1vdmFwcwkleG1tMiwgKCVlZHgpCisJbGVhCTY0KCVlZHgpLCAlZWR4CisJam1wCUwoU2hsM0xvb3BTdGFydCkKKworTChTaGwzTG9vcEV4aXQpOgorCW1vdmxwZAkoJWVjeCksICV4bW0wCisJbW92bHBkCTUoJWVjeCksICV4bW0xCisJbW92bHBkCSV4bW0wLCAoJWVkeCkKKwltb3ZscGQJJXhtbTEsIDUoJWVkeCkKKwltb3YJJDEzLCAlZXNpCisJam1wCUwoQ29weUZyb20xVG8xNkJ5dGVzKQorCisJLnAyYWxpZ24gNAorTChTaGw0KToKKwltb3ZhcHMJLTQoJWVjeCksICV4bW0xCisJbW92YXBzCTEyKCVlY3gpLCAleG1tMgorTChTaGw0U3RhcnQpOgorCXBjbXBlcWIJJXhtbTIsICV4bW0wCisJcG1vdm1za2IgJXhtbTAsICVlYXgKKwltb3ZhcHMJJXhtbTIsICV4bW0zCisjaWZkZWYgVVNFX0FTX1NUUk5DUFkKKwlzdWIJJDE2LCAlZWJ4CisJamJlCUwoU3RybmNweUV4aXQ0Q2FzZTJPckNhc2UzKQorI2VuZGlmCisJdGVzdAklZWF4LCAlZWF4CisJam56CUwoU2hsNExvb3BFeGl0KQorCisJcGFsaWducgkkNCwgJXhtbTEsICV4bW0yCisJbW92YXBzCSV4bW0zLCAleG1tMQorCW1vdmFwcwkleG1tMiwgKCVlZHgpCisJbW92YXBzCTI4KCVlY3gpLCAleG1tMgorCisJcGNtcGVxYgkleG1tMiwgJXhtbTAKKwlsZWEJMTYoJWVkeCksICVlZHgKKwlwbW92bXNrYiAleG1tMCwgJWVheAorCWxlYQkxNiglZWN4KSwgJWVjeAorCW1vdmFwcwkleG1tMiwgJXhtbTMKKyNpZmRlZiBVU0VfQVNfU1RSTkNQWQorCXN1YgkkMTYsICVlYngKKwlqYmUJTChTdHJuY3B5RXhpdDRDYXNlMk9yQ2FzZTMpCisjZW5kaWYKKwl0ZXN0CSVlYXgsICVlYXgKKwlqbnoJTChTaGw0TG9vcEV4aXQpCisKKwlwYWxpZ25yCSQ0LCAleG1tMSwgJXhtbTIKKwltb3ZhcHMJJXhtbTIsICglZWR4KQorCW1vdmFwcwkyOCglZWN4KSwgJXhtbTIKKwltb3ZhcHMJJXhtbTMsICV4bW0xCisKKwlwY21wZXFiCSV4bW0yLCAleG1tMAorCWxlYQkxNiglZWR4KSwgJWVkeAorCXBtb3Ztc2tiICV4bW0wLCAlZWF4CisJbGVhCTE2KCVlY3gpLCAlZWN4CisJbW92YXBzCSV4bW0yLCAleG1tMworI2lmZGVmIFVTRV9BU19TVFJOQ1BZCisJc3ViCSQxNiwgJWVieAorCWpiZQlMKFN0cm5jcHlFeGl0NENhc2UyT3JDYXNlMykKKyNlbmRpZgorCXRlc3QJJWVheCwgJWVheAorCWpueglMKFNobDRMb29wRXhpdCkKKworCXBhbGlnbnIJJDQsICV4bW0xLCAleG1tMgorCW1vdmFwcwkleG1tMiwgKCVlZHgpCisJbW92YXBzCTI4KCVlY3gpLCAleG1tMgorCisJcGNtcGVxYgkleG1tMiwgJXhtbTAKKwlsZWEJMTYoJWVkeCksICVlZHgKKwlwbW92bXNrYiAleG1tMCwgJWVheAorCWxlYQkxNiglZWN4KSwgJWVjeAorI2lmZGVmIFVTRV9BU19TVFJOQ1BZCisJc3ViCSQxNiwgJWVieAorCWpiZQlMKFN0cm5jcHlFeGl0NENhc2UyT3JDYXNlMykKKyNlbmRpZgorCXRlc3QJJWVheCwgJWVheAorCWpueglMKFNobDRMb29wRXhpdCkKKworCXBhbGlnbnIJJDQsICV4bW0zLCAleG1tMgorCW1vdmFwcwkleG1tMiwgKCVlZHgpCisJbGVhCTI4KCVlY3gpLCAlZWN4CisJbGVhCTE2KCVlZHgpLCAlZWR4CisKKwltb3YJJWVjeCwgJWVheAorCWFuZAkkLTB4NDAsICVlY3gKKwlzdWIJJWVjeCwgJWVheAorCWxlYQktMTIoJWVjeCksICVlY3gKKwlzdWIJJWVheCwgJWVkeAorI2lmZGVmIFVTRV9BU19TVFJOQ1BZCisJYWRkCSVlYXgsICVlYngKKyNlbmRpZgorCW1vdmFwcwktNCglZWN4KSwgJXhtbTEKKworTChTaGw0TG9vcFN0YXJ0KToKKwltb3ZhcHMJMTIoJWVjeCksICV4bW0yCisJbW92YXBzCTI4KCVlY3gpLCAleG1tMworCW1vdmFwcwkleG1tMywgJXhtbTYKKwltb3ZhcHMJNDQoJWVjeCksICV4bW00CisJbW92YXBzCSV4bW00LCAleG1tNworCW1vdmFwcwk2MCglZWN4KSwgJXhtbTUKKwlwbWludWIJJXhtbTIsICV4bW02CisJcG1pbnViCSV4bW01LCAleG1tNworCXBtaW51YgkleG1tNiwgJXhtbTcKKwlwY21wZXFiCSV4bW0wLCAleG1tNworCXBtb3Ztc2tiICV4bW03LCAlZWF4CisJbW92YXBzCSV4bW01LCAleG1tNworCXBhbGlnbnIJJDQsICV4bW00LCAleG1tNQorCXBhbGlnbnIJJDQsICV4bW0zLCAleG1tNAorCXRlc3QJJWVheCwgJWVheAorCWpueglMKFNobDRTdGFydCkKKyNpZmRlZiBVU0VfQVNfU1RSTkNQWQorCXN1YgkkNjQsICVlYngKKwlqYmUJTChTdHJuY3B5TGVhdmU0KQorI2VuZGlmCisJcGFsaWducgkkNCwgJXhtbTIsICV4bW0zCisJbGVhCTY0KCVlY3gpLCAlZWN4CisJcGFsaWducgkkNCwgJXhtbTEsICV4bW0yCisJbW92YXBzCSV4bW03LCAleG1tMQorCW1vdmFwcwkleG1tNSwgNDgoJWVkeCkKKwltb3ZhcHMJJXhtbTQsIDMyKCVlZHgpCisJbW92YXBzCSV4bW0zLCAxNiglZWR4KQorCW1vdmFwcwkleG1tMiwgKCVlZHgpCisJbGVhCTY0KCVlZHgpLCAlZWR4CisJam1wCUwoU2hsNExvb3BTdGFydCkKKworTChTaGw0TG9vcEV4aXQpOgorCW1vdmxwZAkoJWVjeCksICV4bW0wCisJbW92bAk4KCVlY3gpLCAlZXNpCisJbW92bHBkCSV4bW0wLCAoJWVkeCkKKwltb3ZsCSVlc2ksIDgoJWVkeCkKKwltb3YJJDEyLCAlZXNpCisJam1wCUwoQ29weUZyb20xVG8xNkJ5dGVzKQorCisJLnAyYWxpZ24gNAorTChTaGw1KToKKwltb3ZhcHMJLTUoJWVjeCksICV4bW0xCisJbW92YXBzCTExKCVlY3gpLCAleG1tMgorTChTaGw1U3RhcnQpOgorCXBjbXBlcWIJJXhtbTIsICV4bW0wCisJcG1vdm1za2IgJXhtbTAsICVlYXgKKwltb3ZhcHMJJXhtbTIsICV4bW0zCisjaWZkZWYgVVNFX0FTX1NUUk5DUFkKKwlzdWIJJDE2LCAlZWJ4CisJamJlCUwoU3RybmNweUV4aXQ1Q2FzZTJPckNhc2UzKQorI2VuZGlmCisJdGVzdAklZWF4LCAlZWF4CisJam56CUwoU2hsNUxvb3BFeGl0KQorCisJcGFsaWducgkkNSwgJXhtbTEsICV4bW0yCisJbW92YXBzCSV4bW0zLCAleG1tMQorCW1vdmFwcwkleG1tMiwgKCVlZHgpCisJbW92YXBzCTI3KCVlY3gpLCAleG1tMgorCisJcGNtcGVxYgkleG1tMiwgJXhtbTAKKwlsZWEJMTYoJWVkeCksICVlZHgKKwlwbW92bXNrYiAleG1tMCwgJWVheAorCWxlYQkxNiglZWN4KSwgJWVjeAorCW1vdmFwcwkleG1tMiwgJXhtbTMKKyNpZmRlZiBVU0VfQVNfU1RSTkNQWQorCXN1YgkkMTYsICVlYngKKwlqYmUJTChTdHJuY3B5RXhpdDVDYXNlMk9yQ2FzZTMpCisjZW5kaWYKKwl0ZXN0CSVlYXgsICVlYXgKKwlqbnoJTChTaGw1TG9vcEV4aXQpCisKKwlwYWxpZ25yCSQ1LCAleG1tMSwgJXhtbTIKKwltb3ZhcHMJJXhtbTIsICglZWR4KQorCW1vdmFwcwkyNyglZWN4KSwgJXhtbTIKKwltb3ZhcHMJJXhtbTMsICV4bW0xCisKKwlwY21wZXFiCSV4bW0yLCAleG1tMAorCWxlYQkxNiglZWR4KSwgJWVkeAorCXBtb3Ztc2tiICV4bW0wLCAlZWF4CisJbGVhCTE2KCVlY3gpLCAlZWN4CisJbW92YXBzCSV4bW0yLCAleG1tMworI2lmZGVmIFVTRV9BU19TVFJOQ1BZCisJc3ViCSQxNiwgJWVieAorCWpiZQlMKFN0cm5jcHlFeGl0NUNhc2UyT3JDYXNlMykKKyNlbmRpZgorCXRlc3QJJWVheCwgJWVheAorCWpueglMKFNobDVMb29wRXhpdCkKKworCXBhbGlnbnIJJDUsICV4bW0xLCAleG1tMgorCW1vdmFwcwkleG1tMiwgKCVlZHgpCisJbW92YXBzCTI3KCVlY3gpLCAleG1tMgorCisJcGNtcGVxYgkleG1tMiwgJXhtbTAKKwlsZWEJMTYoJWVkeCksICVlZHgKKwlwbW92bXNrYiAleG1tMCwgJWVheAorCWxlYQkxNiglZWN4KSwgJWVjeAorI2lmZGVmIFVTRV9BU19TVFJOQ1BZCisJc3ViCSQxNiwgJWVieAorCWpiZQlMKFN0cm5jcHlFeGl0NUNhc2UyT3JDYXNlMykKKyNlbmRpZgorCXRlc3QJJWVheCwgJWVheAorCWpueglMKFNobDVMb29wRXhpdCkKKworCXBhbGlnbnIJJDUsICV4bW0zLCAleG1tMgorCW1vdmFwcwkleG1tMiwgKCVlZHgpCisJbGVhCTI3KCVlY3gpLCAlZWN4CisJbGVhCTE2KCVlZHgpLCAlZWR4CisKKwltb3YJJWVjeCwgJWVheAorCWFuZAkkLTB4NDAsICVlY3gKKwlzdWIJJWVjeCwgJWVheAorCWxlYQktMTEoJWVjeCksICVlY3gKKwlzdWIJJWVheCwgJWVkeAorI2lmZGVmIFVTRV9BU19TVFJOQ1BZCisJYWRkCSVlYXgsICVlYngKKyNlbmRpZgorCW1vdmFwcwktNSglZWN4KSwgJXhtbTEKKworTChTaGw1TG9vcFN0YXJ0KToKKwltb3ZhcHMJMTEoJWVjeCksICV4bW0yCisJbW92YXBzCTI3KCVlY3gpLCAleG1tMworCW1vdmFwcwkleG1tMywgJXhtbTYKKwltb3ZhcHMJNDMoJWVjeCksICV4bW00CisJbW92YXBzCSV4bW00LCAleG1tNworCW1vdmFwcwk1OSglZWN4KSwgJXhtbTUKKwlwbWludWIJJXhtbTIsICV4bW02CisJcG1pbnViCSV4bW01LCAleG1tNworCXBtaW51YgkleG1tNiwgJXhtbTcKKwlwY21wZXFiCSV4bW0wLCAleG1tNworCXBtb3Ztc2tiICV4bW03LCAlZWF4CisJbW92YXBzCSV4bW01LCAleG1tNworCXBhbGlnbnIJJDUsICV4bW00LCAleG1tNQorCXBhbGlnbnIJJDUsICV4bW0zLCAleG1tNAorCXRlc3QJJWVheCwgJWVheAorCWpueglMKFNobDVTdGFydCkKKyNpZmRlZiBVU0VfQVNfU1RSTkNQWQorCXN1YgkkNjQsICVlYngKKwlqYmUJTChTdHJuY3B5TGVhdmU1KQorI2VuZGlmCisJcGFsaWducgkkNSwgJXhtbTIsICV4bW0zCisJbGVhCTY0KCVlY3gpLCAlZWN4CisJcGFsaWducgkkNSwgJXhtbTEsICV4bW0yCisJbW92YXBzCSV4bW03LCAleG1tMQorCW1vdmFwcwkleG1tNSwgNDgoJWVkeCkKKwltb3ZhcHMJJXhtbTQsIDMyKCVlZHgpCisJbW92YXBzCSV4bW0zLCAxNiglZWR4KQorCW1vdmFwcwkleG1tMiwgKCVlZHgpCisJbGVhCTY0KCVlZHgpLCAlZWR4CisJam1wCUwoU2hsNUxvb3BTdGFydCkKKworTChTaGw1TG9vcEV4aXQpOgorCW1vdmxwZAkoJWVjeCksICV4bW0wCisJbW92bAk3KCVlY3gpLCAlZXNpCisJbW92bHBkCSV4bW0wLCAoJWVkeCkKKwltb3ZsCSVlc2ksIDcoJWVkeCkKKwltb3YJJDExLCAlZXNpCisJam1wCUwoQ29weUZyb20xVG8xNkJ5dGVzKQorCisJLnAyYWxpZ24gNAorTChTaGw2KToKKwltb3ZhcHMJLTYoJWVjeCksICV4bW0xCisJbW92YXBzCTEwKCVlY3gpLCAleG1tMgorTChTaGw2U3RhcnQpOgorCXBjbXBlcWIJJXhtbTIsICV4bW0wCisJcG1vdm1za2IgJXhtbTAsICVlYXgKKwltb3ZhcHMJJXhtbTIsICV4bW0zCisjaWZkZWYgVVNFX0FTX1NUUk5DUFkKKwlzdWIJJDE2LCAlZWJ4CisJamJlCUwoU3RybmNweUV4aXQ2Q2FzZTJPckNhc2UzKQorI2VuZGlmCisJdGVzdAklZWF4LCAlZWF4CisJam56CUwoU2hsNkxvb3BFeGl0KQorCisJcGFsaWducgkkNiwgJXhtbTEsICV4bW0yCisJbW92YXBzCSV4bW0zLCAleG1tMQorCW1vdmFwcwkleG1tMiwgKCVlZHgpCisJbW92YXBzCTI2KCVlY3gpLCAleG1tMgorCisJcGNtcGVxYgkleG1tMiwgJXhtbTAKKwlsZWEJMTYoJWVkeCksICVlZHgKKwlwbW92bXNrYiAleG1tMCwgJWVheAorCWxlYQkxNiglZWN4KSwgJWVjeAorCW1vdmFwcwkleG1tMiwgJXhtbTMKKyNpZmRlZiBVU0VfQVNfU1RSTkNQWQorCXN1YgkkMTYsICVlYngKKwlqYmUJTChTdHJuY3B5RXhpdDZDYXNlMk9yQ2FzZTMpCisjZW5kaWYKKwl0ZXN0CSVlYXgsICVlYXgKKwlqbnoJTChTaGw2TG9vcEV4aXQpCisKKwlwYWxpZ25yCSQ2LCAleG1tMSwgJXhtbTIKKwltb3ZhcHMJJXhtbTIsICglZWR4KQorCW1vdmFwcwkyNiglZWN4KSwgJXhtbTIKKwltb3ZhcHMJJXhtbTMsICV4bW0xCisKKwlwY21wZXFiCSV4bW0yLCAleG1tMAorCWxlYQkxNiglZWR4KSwgJWVkeAorCXBtb3Ztc2tiICV4bW0wLCAlZWF4CisJbGVhCTE2KCVlY3gpLCAlZWN4CisJbW92YXBzCSV4bW0yLCAleG1tMworI2lmZGVmIFVTRV9BU19TVFJOQ1BZCisJc3ViCSQxNiwgJWVieAorCWpiZQlMKFN0cm5jcHlFeGl0NkNhc2UyT3JDYXNlMykKKyNlbmRpZgorCXRlc3QJJWVheCwgJWVheAorCWpueglMKFNobDZMb29wRXhpdCkKKworCXBhbGlnbnIJJDYsICV4bW0xLCAleG1tMgorCW1vdmFwcwkleG1tMiwgKCVlZHgpCisJbW92YXBzCTI2KCVlY3gpLCAleG1tMgorCisJcGNtcGVxYgkleG1tMiwgJXhtbTAKKwlsZWEJMTYoJWVkeCksICVlZHgKKwlwbW92bXNrYiAleG1tMCwgJWVheAorCWxlYQkxNiglZWN4KSwgJWVjeAorI2lmZGVmIFVTRV9BU19TVFJOQ1BZCisJc3ViCSQxNiwgJWVieAorCWpiZQlMKFN0cm5jcHlFeGl0NkNhc2UyT3JDYXNlMykKKyNlbmRpZgorCXRlc3QJJWVheCwgJWVheAorCWpueglMKFNobDZMb29wRXhpdCkKKworCXBhbGlnbnIJJDYsICV4bW0zLCAleG1tMgorCW1vdmFwcwkleG1tMiwgKCVlZHgpCisJbGVhCTI2KCVlY3gpLCAlZWN4CisJbGVhCTE2KCVlZHgpLCAlZWR4CisKKwltb3YJJWVjeCwgJWVheAorCWFuZAkkLTB4NDAsICVlY3gKKwlzdWIJJWVjeCwgJWVheAorCWxlYQktMTAoJWVjeCksICVlY3gKKwlzdWIJJWVheCwgJWVkeAorI2lmZGVmIFVTRV9BU19TVFJOQ1BZCisJYWRkCSVlYXgsICVlYngKKyNlbmRpZgorCW1vdmFwcwktNiglZWN4KSwgJXhtbTEKKworTChTaGw2TG9vcFN0YXJ0KToKKwltb3ZhcHMJMTAoJWVjeCksICV4bW0yCisJbW92YXBzCTI2KCVlY3gpLCAleG1tMworCW1vdmFwcwkleG1tMywgJXhtbTYKKwltb3ZhcHMJNDIoJWVjeCksICV4bW00CisJbW92YXBzCSV4bW00LCAleG1tNworCW1vdmFwcwk1OCglZWN4KSwgJXhtbTUKKwlwbWludWIJJXhtbTIsICV4bW02CisJcG1pbnViCSV4bW01LCAleG1tNworCXBtaW51YgkleG1tNiwgJXhtbTcKKwlwY21wZXFiCSV4bW0wLCAleG1tNworCXBtb3Ztc2tiICV4bW03LCAlZWF4CisJbW92YXBzCSV4bW01LCAleG1tNworCXBhbGlnbnIJJDYsICV4bW00LCAleG1tNQorCXBhbGlnbnIJJDYsICV4bW0zLCAleG1tNAorCXRlc3QJJWVheCwgJWVheAorCWpueglMKFNobDZTdGFydCkKKyNpZmRlZiBVU0VfQVNfU1RSTkNQWQorCXN1YgkkNjQsICVlYngKKwlqYmUJTChTdHJuY3B5TGVhdmU2KQorI2VuZGlmCisJcGFsaWducgkkNiwgJXhtbTIsICV4bW0zCisJbGVhCTY0KCVlY3gpLCAlZWN4CisJcGFsaWducgkkNiwgJXhtbTEsICV4bW0yCisJbW92YXBzCSV4bW03LCAleG1tMQorCW1vdmFwcwkleG1tNSwgNDgoJWVkeCkKKwltb3ZhcHMJJXhtbTQsIDMyKCVlZHgpCisJbW92YXBzCSV4bW0zLCAxNiglZWR4KQorCW1vdmFwcwkleG1tMiwgKCVlZHgpCisJbGVhCTY0KCVlZHgpLCAlZWR4CisJam1wCUwoU2hsNkxvb3BTdGFydCkKKworTChTaGw2TG9vcEV4aXQpOgorCW1vdmxwZAkoJWVjeCksICV4bW0wCisJbW92bAk2KCVlY3gpLCAlZXNpCisJbW92bHBkCSV4bW0wLCAoJWVkeCkKKwltb3ZsCSVlc2ksIDYoJWVkeCkKKwltb3YJJDEwLCAlZXNpCisJam1wCUwoQ29weUZyb20xVG8xNkJ5dGVzKQorCisJLnAyYWxpZ24gNAorTChTaGw3KToKKwltb3ZhcHMJLTcoJWVjeCksICV4bW0xCisJbW92YXBzCTkoJWVjeCksICV4bW0yCitMKFNobDdTdGFydCk6CisJcGNtcGVxYgkleG1tMiwgJXhtbTAKKwlwbW92bXNrYiAleG1tMCwgJWVheAorCW1vdmFwcwkleG1tMiwgJXhtbTMKKyNpZmRlZiBVU0VfQVNfU1RSTkNQWQorCXN1YgkkMTYsICVlYngKKwlqYmUJTChTdHJuY3B5RXhpdDdDYXNlMk9yQ2FzZTMpCisjZW5kaWYKKwl0ZXN0CSVlYXgsICVlYXgKKwlqbnoJTChTaGw3TG9vcEV4aXQpCisKKwlwYWxpZ25yCSQ3LCAleG1tMSwgJXhtbTIKKwltb3ZhcHMJJXhtbTMsICV4bW0xCisJbW92YXBzCSV4bW0yLCAoJWVkeCkKKwltb3ZhcHMJMjUoJWVjeCksICV4bW0yCisKKwlwY21wZXFiCSV4bW0yLCAleG1tMAorCWxlYQkxNiglZWR4KSwgJWVkeAorCXBtb3Ztc2tiICV4bW0wLCAlZWF4CisJbGVhCTE2KCVlY3gpLCAlZWN4CisJbW92YXBzCSV4bW0yLCAleG1tMworI2lmZGVmIFVTRV9BU19TVFJOQ1BZCisJc3ViCSQxNiwgJWVieAorCWpiZQlMKFN0cm5jcHlFeGl0N0Nhc2UyT3JDYXNlMykKKyNlbmRpZgorCXRlc3QJJWVheCwgJWVheAorCWpueglMKFNobDdMb29wRXhpdCkKKworCXBhbGlnbnIJJDcsICV4bW0xLCAleG1tMgorCW1vdmFwcwkleG1tMiwgKCVlZHgpCisJbW92YXBzCTI1KCVlY3gpLCAleG1tMgorCW1vdmFwcwkleG1tMywgJXhtbTEKKworCXBjbXBlcWIJJXhtbTIsICV4bW0wCisJbGVhCTE2KCVlZHgpLCAlZWR4CisJcG1vdm1za2IgJXhtbTAsICVlYXgKKwlsZWEJMTYoJWVjeCksICVlY3gKKwltb3ZhcHMJJXhtbTIsICV4bW0zCisjaWZkZWYgVVNFX0FTX1NUUk5DUFkKKwlzdWIJJDE2LCAlZWJ4CisJamJlCUwoU3RybmNweUV4aXQ3Q2FzZTJPckNhc2UzKQorI2VuZGlmCisJdGVzdAklZWF4LCAlZWF4CisJam56CUwoU2hsN0xvb3BFeGl0KQorCisJcGFsaWducgkkNywgJXhtbTEsICV4bW0yCisJbW92YXBzCSV4bW0yLCAoJWVkeCkKKwltb3ZhcHMJMjUoJWVjeCksICV4bW0yCisKKwlwY21wZXFiCSV4bW0yLCAleG1tMAorCWxlYQkxNiglZWR4KSwgJWVkeAorCXBtb3Ztc2tiICV4bW0wLCAlZWF4CisJbGVhCTE2KCVlY3gpLCAlZWN4CisjaWZkZWYgVVNFX0FTX1NUUk5DUFkKKwlzdWIJJDE2LCAlZWJ4CisJamJlCUwoU3RybmNweUV4aXQ3Q2FzZTJPckNhc2UzKQorI2VuZGlmCisJdGVzdAklZWF4LCAlZWF4CisJam56CUwoU2hsN0xvb3BFeGl0KQorCisJcGFsaWducgkkNywgJXhtbTMsICV4bW0yCisJbW92YXBzCSV4bW0yLCAoJWVkeCkKKwlsZWEJMjUoJWVjeCksICVlY3gKKwlsZWEJMTYoJWVkeCksICVlZHgKKworCW1vdgklZWN4LCAlZWF4CisJYW5kCSQtMHg0MCwgJWVjeAorCXN1YgklZWN4LCAlZWF4CisJbGVhCS05KCVlY3gpLCAlZWN4CisJc3ViCSVlYXgsICVlZHgKKyNpZmRlZiBVU0VfQVNfU1RSTkNQWQorCWFkZAklZWF4LCAlZWJ4CisjZW5kaWYKKwltb3ZhcHMJLTcoJWVjeCksICV4bW0xCisKK0woU2hsN0xvb3BTdGFydCk6CisJbW92YXBzCTkoJWVjeCksICV4bW0yCisJbW92YXBzCTI1KCVlY3gpLCAleG1tMworCW1vdmFwcwkleG1tMywgJXhtbTYKKwltb3ZhcHMJNDEoJWVjeCksICV4bW00CisJbW92YXBzCSV4bW00LCAleG1tNworCW1vdmFwcwk1NyglZWN4KSwgJXhtbTUKKwlwbWludWIJJXhtbTIsICV4bW02CisJcG1pbnViCSV4bW01LCAleG1tNworCXBtaW51YgkleG1tNiwgJXhtbTcKKwlwY21wZXFiCSV4bW0wLCAleG1tNworCXBtb3Ztc2tiICV4bW03LCAlZWF4CisJbW92YXBzCSV4bW01LCAleG1tNworCXBhbGlnbnIJJDcsICV4bW00LCAleG1tNQorCXBhbGlnbnIJJDcsICV4bW0zLCAleG1tNAorCXRlc3QJJWVheCwgJWVheAorCWpueglMKFNobDdTdGFydCkKKyNpZmRlZiBVU0VfQVNfU1RSTkNQWQorCXN1YgkkNjQsICVlYngKKwlqYmUJTChTdHJuY3B5TGVhdmU3KQorI2VuZGlmCisJcGFsaWducgkkNywgJXhtbTIsICV4bW0zCisJbGVhCTY0KCVlY3gpLCAlZWN4CisJcGFsaWducgkkNywgJXhtbTEsICV4bW0yCisJbW92YXBzCSV4bW03LCAleG1tMQorCW1vdmFwcwkleG1tNSwgNDgoJWVkeCkKKwltb3ZhcHMJJXhtbTQsIDMyKCVlZHgpCisJbW92YXBzCSV4bW0zLCAxNiglZWR4KQorCW1vdmFwcwkleG1tMiwgKCVlZHgpCisJbGVhCTY0KCVlZHgpLCAlZWR4CisJam1wCUwoU2hsN0xvb3BTdGFydCkKKworTChTaGw3TG9vcEV4aXQpOgorCW1vdmxwZAkoJWVjeCksICV4bW0wCisJbW92bAk1KCVlY3gpLCAlZXNpCisJbW92bHBkCSV4bW0wLCAoJWVkeCkKKwltb3ZsCSVlc2ksIDUoJWVkeCkKKwltb3YJJDksICVlc2kKKwlqbXAJTChDb3B5RnJvbTFUbzE2Qnl0ZXMpCisKKwkucDJhbGlnbiA0CitMKFNobDgpOgorCW1vdmFwcwktOCglZWN4KSwgJXhtbTEKKwltb3ZhcHMJOCglZWN4KSwgJXhtbTIKK0woU2hsOFN0YXJ0KToKKwlwY21wZXFiCSV4bW0yLCAleG1tMAorCXBtb3Ztc2tiICV4bW0wLCAlZWF4CisJbW92YXBzCSV4bW0yLCAleG1tMworI2lmZGVmIFVTRV9BU19TVFJOQ1BZCisJc3ViCSQxNiwgJWVieAorCWpiZQlMKFN0cm5jcHlFeGl0OENhc2UyT3JDYXNlMykKKyNlbmRpZgorCXRlc3QJJWVheCwgJWVheAorCWpueglMKFNobDhMb29wRXhpdCkKKworCXBhbGlnbnIJJDgsICV4bW0xLCAleG1tMgorCW1vdmFwcwkleG1tMywgJXhtbTEKKwltb3ZhcHMJJXhtbTIsICglZWR4KQorCW1vdmFwcwkyNCglZWN4KSwgJXhtbTIKKworCXBjbXBlcWIJJXhtbTIsICV4bW0wCisJbGVhCTE2KCVlZHgpLCAlZWR4CisJcG1vdm1za2IgJXhtbTAsICVlYXgKKwlsZWEJMTYoJWVjeCksICVlY3gKKwltb3ZhcHMJJXhtbTIsICV4bW0zCisjaWZkZWYgVVNFX0FTX1NUUk5DUFkKKwlzdWIJJDE2LCAlZWJ4CisJamJlCUwoU3RybmNweUV4aXQ4Q2FzZTJPckNhc2UzKQorI2VuZGlmCisJdGVzdAklZWF4LCAlZWF4CisJam56CUwoU2hsOExvb3BFeGl0KQorCisJcGFsaWducgkkOCwgJXhtbTEsICV4bW0yCisJbW92YXBzCSV4bW0yLCAoJWVkeCkKKwltb3ZhcHMJMjQoJWVjeCksICV4bW0yCisJbW92YXBzCSV4bW0zLCAleG1tMQorCisJcGNtcGVxYgkleG1tMiwgJXhtbTAKKwlsZWEJMTYoJWVkeCksICVlZHgKKwlwbW92bXNrYiAleG1tMCwgJWVheAorCWxlYQkxNiglZWN4KSwgJWVjeAorCW1vdmFwcwkleG1tMiwgJXhtbTMKKyNpZmRlZiBVU0VfQVNfU1RSTkNQWQorCXN1YgkkMTYsICVlYngKKwlqYmUJTChTdHJuY3B5RXhpdDhDYXNlMk9yQ2FzZTMpCisjZW5kaWYKKwl0ZXN0CSVlYXgsICVlYXgKKwlqbnoJTChTaGw4TG9vcEV4aXQpCisKKwlwYWxpZ25yCSQ4LCAleG1tMSwgJXhtbTIKKwltb3ZhcHMJJXhtbTIsICglZWR4KQorCW1vdmFwcwkyNCglZWN4KSwgJXhtbTIKKworCXBjbXBlcWIJJXhtbTIsICV4bW0wCisJbGVhCTE2KCVlZHgpLCAlZWR4CisJcG1vdm1za2IgJXhtbTAsICVlYXgKKwlsZWEJMTYoJWVjeCksICVlY3gKKyNpZmRlZiBVU0VfQVNfU1RSTkNQWQorCXN1YgkkMTYsICVlYngKKwlqYmUJTChTdHJuY3B5RXhpdDhDYXNlMk9yQ2FzZTMpCisjZW5kaWYKKwl0ZXN0CSVlYXgsICVlYXgKKwlqbnoJTChTaGw4TG9vcEV4aXQpCisKKwlwYWxpZ25yCSQ4LCAleG1tMywgJXhtbTIKKwltb3ZhcHMJJXhtbTIsICglZWR4KQorCWxlYQkyNCglZWN4KSwgJWVjeAorCWxlYQkxNiglZWR4KSwgJWVkeAorCisJbW92CSVlY3gsICVlYXgKKwlhbmQJJC0weDQwLCAlZWN4CisJc3ViCSVlY3gsICVlYXgKKwlsZWEJLTgoJWVjeCksICVlY3gKKwlzdWIJJWVheCwgJWVkeAorI2lmZGVmIFVTRV9BU19TVFJOQ1BZCisJYWRkCSVlYXgsICVlYngKKyNlbmRpZgorCW1vdmFwcwktOCglZWN4KSwgJXhtbTEKKworTChTaGw4TG9vcFN0YXJ0KToKKwltb3ZhcHMJOCglZWN4KSwgJXhtbTIKKwltb3ZhcHMJMjQoJWVjeCksICV4bW0zCisJbW92YXBzCSV4bW0zLCAleG1tNgorCW1vdmFwcwk0MCglZWN4KSwgJXhtbTQKKwltb3ZhcHMJJXhtbTQsICV4bW03CisJbW92YXBzCTU2KCVlY3gpLCAleG1tNQorCXBtaW51YgkleG1tMiwgJXhtbTYKKwlwbWludWIJJXhtbTUsICV4bW03CisJcG1pbnViCSV4bW02LCAleG1tNworCXBjbXBlcWIJJXhtbTAsICV4bW03CisJcG1vdm1za2IgJXhtbTcsICVlYXgKKwltb3ZhcHMJJXhtbTUsICV4bW03CisJcGFsaWducgkkOCwgJXhtbTQsICV4bW01CisJcGFsaWducgkkOCwgJXhtbTMsICV4bW00CisJdGVzdAklZWF4LCAlZWF4CisJam56CUwoU2hsOFN0YXJ0KQorI2lmZGVmIFVTRV9BU19TVFJOQ1BZCisJc3ViCSQ2NCwgJWVieAorCWpiZQlMKFN0cm5jcHlMZWF2ZTgpCisjZW5kaWYKKwlwYWxpZ25yCSQ4LCAleG1tMiwgJXhtbTMKKwlsZWEJNjQoJWVjeCksICVlY3gKKwlwYWxpZ25yCSQ4LCAleG1tMSwgJXhtbTIKKwltb3ZhcHMJJXhtbTcsICV4bW0xCisJbW92YXBzCSV4bW01LCA0OCglZWR4KQorCW1vdmFwcwkleG1tNCwgMzIoJWVkeCkKKwltb3ZhcHMJJXhtbTMsIDE2KCVlZHgpCisJbW92YXBzCSV4bW0yLCAoJWVkeCkKKwlsZWEJNjQoJWVkeCksICVlZHgKKwlqbXAJTChTaGw4TG9vcFN0YXJ0KQorCitMKFNobDhMb29wRXhpdCk6CisJbW92bHBkCSglZWN4KSwgJXhtbTAKKwltb3ZscGQJJXhtbTAsICglZWR4KQorCW1vdgkkOCwgJWVzaQorCWptcAlMKENvcHlGcm9tMVRvMTZCeXRlcykKKworCS5wMmFsaWduIDQKK0woU2hsOSk6CisJbW92YXBzCS05KCVlY3gpLCAleG1tMQorCW1vdmFwcwk3KCVlY3gpLCAleG1tMgorTChTaGw5U3RhcnQpOgorCXBjbXBlcWIJJXhtbTIsICV4bW0wCisJcG1vdm1za2IgJXhtbTAsICVlYXgKKwltb3ZhcHMJJXhtbTIsICV4bW0zCisjaWZkZWYgVVNFX0FTX1NUUk5DUFkKKwlzdWIJJDE2LCAlZWJ4CisJamJlCUwoU3RybmNweUV4aXQ5Q2FzZTJPckNhc2UzKQorI2VuZGlmCisJdGVzdAklZWF4LCAlZWF4CisJam56CUwoU2hsOUxvb3BFeGl0KQorCisJcGFsaWducgkkOSwgJXhtbTEsICV4bW0yCisJbW92YXBzCSV4bW0zLCAleG1tMQorCW1vdmFwcwkleG1tMiwgKCVlZHgpCisJbW92YXBzCTIzKCVlY3gpLCAleG1tMgorCisJcGNtcGVxYgkleG1tMiwgJXhtbTAKKwlsZWEJMTYoJWVkeCksICVlZHgKKwlwbW92bXNrYiAleG1tMCwgJWVheAorCWxlYQkxNiglZWN4KSwgJWVjeAorCW1vdmFwcwkleG1tMiwgJXhtbTMKKyNpZmRlZiBVU0VfQVNfU1RSTkNQWQorCXN1YgkkMTYsICVlYngKKwlqYmUJTChTdHJuY3B5RXhpdDlDYXNlMk9yQ2FzZTMpCisjZW5kaWYKKwl0ZXN0CSVlYXgsICVlYXgKKwlqbnoJTChTaGw5TG9vcEV4aXQpCisKKwlwYWxpZ25yCSQ5LCAleG1tMSwgJXhtbTIKKwltb3ZhcHMJJXhtbTIsICglZWR4KQorCW1vdmFwcwkyMyglZWN4KSwgJXhtbTIKKwltb3ZhcHMJJXhtbTMsICV4bW0xCisKKwlwY21wZXFiCSV4bW0yLCAleG1tMAorCWxlYQkxNiglZWR4KSwgJWVkeAorCXBtb3Ztc2tiICV4bW0wLCAlZWF4CisJbGVhCTE2KCVlY3gpLCAlZWN4CisJbW92YXBzCSV4bW0yLCAleG1tMworI2lmZGVmIFVTRV9BU19TVFJOQ1BZCisJc3ViCSQxNiwgJWVieAorCWpiZQlMKFN0cm5jcHlFeGl0OUNhc2UyT3JDYXNlMykKKyNlbmRpZgorCXRlc3QJJWVheCwgJWVheAorCWpueglMKFNobDlMb29wRXhpdCkKKworCXBhbGlnbnIJJDksICV4bW0xLCAleG1tMgorCW1vdmFwcwkleG1tMiwgKCVlZHgpCisJbW92YXBzCTIzKCVlY3gpLCAleG1tMgorCisJcGNtcGVxYgkleG1tMiwgJXhtbTAKKwlsZWEJMTYoJWVkeCksICVlZHgKKwlwbW92bXNrYiAleG1tMCwgJWVheAorCWxlYQkxNiglZWN4KSwgJWVjeAorI2lmZGVmIFVTRV9BU19TVFJOQ1BZCisJc3ViCSQxNiwgJWVieAorCWpiZQlMKFN0cm5jcHlFeGl0OUNhc2UyT3JDYXNlMykKKyNlbmRpZgorCXRlc3QJJWVheCwgJWVheAorCWpueglMKFNobDlMb29wRXhpdCkKKworCXBhbGlnbnIJJDksICV4bW0zLCAleG1tMgorCW1vdmFwcwkleG1tMiwgKCVlZHgpCisJbGVhCTIzKCVlY3gpLCAlZWN4CisJbGVhCTE2KCVlZHgpLCAlZWR4CisKKwltb3YJJWVjeCwgJWVheAorCWFuZAkkLTB4NDAsICVlY3gKKwlzdWIJJWVjeCwgJWVheAorCWxlYQktNyglZWN4KSwgJWVjeAorCXN1YgklZWF4LCAlZWR4CisjaWZkZWYgVVNFX0FTX1NUUk5DUFkKKwlhZGQJJWVheCwgJWVieAorI2VuZGlmCisJbW92YXBzCS05KCVlY3gpLCAleG1tMQorCitMKFNobDlMb29wU3RhcnQpOgorCW1vdmFwcwk3KCVlY3gpLCAleG1tMgorCW1vdmFwcwkyMyglZWN4KSwgJXhtbTMKKwltb3ZhcHMJJXhtbTMsICV4bW02CisJbW92YXBzCTM5KCVlY3gpLCAleG1tNAorCW1vdmFwcwkleG1tNCwgJXhtbTcKKwltb3ZhcHMJNTUoJWVjeCksICV4bW01CisJcG1pbnViCSV4bW0yLCAleG1tNgorCXBtaW51YgkleG1tNSwgJXhtbTcKKwlwbWludWIJJXhtbTYsICV4bW03CisJcGNtcGVxYgkleG1tMCwgJXhtbTcKKwlwbW92bXNrYiAleG1tNywgJWVheAorCW1vdmFwcwkleG1tNSwgJXhtbTcKKwlwYWxpZ25yCSQ5LCAleG1tNCwgJXhtbTUKKwlwYWxpZ25yCSQ5LCAleG1tMywgJXhtbTQKKwl0ZXN0CSVlYXgsICVlYXgKKwlqbnoJTChTaGw5U3RhcnQpCisjaWZkZWYgVVNFX0FTX1NUUk5DUFkKKwlzdWIJJDY0LCAlZWJ4CisJamJlCUwoU3RybmNweUxlYXZlOSkKKyNlbmRpZgorCXBhbGlnbnIJJDksICV4bW0yLCAleG1tMworCWxlYQk2NCglZWN4KSwgJWVjeAorCXBhbGlnbnIJJDksICV4bW0xLCAleG1tMgorCW1vdmFwcwkleG1tNywgJXhtbTEKKwltb3ZhcHMJJXhtbTUsIDQ4KCVlZHgpCisJbW92YXBzCSV4bW00LCAzMiglZWR4KQorCW1vdmFwcwkleG1tMywgMTYoJWVkeCkKKwltb3ZhcHMJJXhtbTIsICglZWR4KQorCWxlYQk2NCglZWR4KSwgJWVkeAorCWptcAlMKFNobDlMb29wU3RhcnQpCisKK0woU2hsOUxvb3BFeGl0KToKKwltb3ZscGQJLTEoJWVjeCksICV4bW0wCisJbW92bHBkCSV4bW0wLCAtMSglZWR4KQorCW1vdgkkNywgJWVzaQorCWptcAlMKENvcHlGcm9tMVRvMTZCeXRlcykKKworCS5wMmFsaWduIDQKK0woU2hsMTApOgorCW1vdmFwcwktMTAoJWVjeCksICV4bW0xCisJbW92YXBzCTYoJWVjeCksICV4bW0yCitMKFNobDEwU3RhcnQpOgorCXBjbXBlcWIJJXhtbTIsICV4bW0wCisJcG1vdm1za2IgJXhtbTAsICVlYXgKKwltb3ZhcHMJJXhtbTIsICV4bW0zCisjaWZkZWYgVVNFX0FTX1NUUk5DUFkKKwlzdWIJJDE2LCAlZWJ4CisJamJlCUwoU3RybmNweUV4aXQxMENhc2UyT3JDYXNlMykKKyNlbmRpZgorCXRlc3QJJWVheCwgJWVheAorCWpueglMKFNobDEwTG9vcEV4aXQpCisKKwlwYWxpZ25yCSQxMCwgJXhtbTEsICV4bW0yCisJbW92YXBzCSV4bW0zLCAleG1tMQorCW1vdmFwcwkleG1tMiwgKCVlZHgpCisJbW92YXBzCTIyKCVlY3gpLCAleG1tMgorCisJcGNtcGVxYgkleG1tMiwgJXhtbTAKKwlsZWEJMTYoJWVkeCksICVlZHgKKwlwbW92bXNrYiAleG1tMCwgJWVheAorCWxlYQkxNiglZWN4KSwgJWVjeAorCW1vdmFwcwkleG1tMiwgJXhtbTMKKyNpZmRlZiBVU0VfQVNfU1RSTkNQWQorCXN1YgkkMTYsICVlYngKKwlqYmUJTChTdHJuY3B5RXhpdDEwQ2FzZTJPckNhc2UzKQorI2VuZGlmCisJdGVzdAklZWF4LCAlZWF4CisJam56CUwoU2hsMTBMb29wRXhpdCkKKworCXBhbGlnbnIJJDEwLCAleG1tMSwgJXhtbTIKKwltb3ZhcHMJJXhtbTIsICglZWR4KQorCW1vdmFwcwkyMiglZWN4KSwgJXhtbTIKKwltb3ZhcHMJJXhtbTMsICV4bW0xCisKKwlwY21wZXFiCSV4bW0yLCAleG1tMAorCWxlYQkxNiglZWR4KSwgJWVkeAorCXBtb3Ztc2tiICV4bW0wLCAlZWF4CisJbGVhCTE2KCVlY3gpLCAlZWN4CisJbW92YXBzCSV4bW0yLCAleG1tMworI2lmZGVmIFVTRV9BU19TVFJOQ1BZCisJc3ViCSQxNiwgJWVieAorCWpiZQlMKFN0cm5jcHlFeGl0MTBDYXNlMk9yQ2FzZTMpCisjZW5kaWYKKwl0ZXN0CSVlYXgsICVlYXgKKwlqbnoJTChTaGwxMExvb3BFeGl0KQorCisJcGFsaWducgkkMTAsICV4bW0xLCAleG1tMgorCW1vdmFwcwkleG1tMiwgKCVlZHgpCisJbW92YXBzCTIyKCVlY3gpLCAleG1tMgorCisJcGNtcGVxYgkleG1tMiwgJXhtbTAKKwlsZWEJMTYoJWVkeCksICVlZHgKKwlwbW92bXNrYiAleG1tMCwgJWVheAorCWxlYQkxNiglZWN4KSwgJWVjeAorI2lmZGVmIFVTRV9BU19TVFJOQ1BZCisJc3ViCSQxNiwgJWVieAorCWpiZQlMKFN0cm5jcHlFeGl0MTBDYXNlMk9yQ2FzZTMpCisjZW5kaWYKKwl0ZXN0CSVlYXgsICVlYXgKKwlqbnoJTChTaGwxMExvb3BFeGl0KQorCisJcGFsaWducgkkMTAsICV4bW0zLCAleG1tMgorCW1vdmFwcwkleG1tMiwgKCVlZHgpCisJbGVhCTIyKCVlY3gpLCAlZWN4CisJbGVhCTE2KCVlZHgpLCAlZWR4CisKKwltb3YJJWVjeCwgJWVheAorCWFuZAkkLTB4NDAsICVlY3gKKwlzdWIJJWVjeCwgJWVheAorCWxlYQktNiglZWN4KSwgJWVjeAorCXN1YgklZWF4LCAlZWR4CisjaWZkZWYgVVNFX0FTX1NUUk5DUFkKKwlhZGQJJWVheCwgJWVieAorI2VuZGlmCisJbW92YXBzCS0xMCglZWN4KSwgJXhtbTEKKworTChTaGwxMExvb3BTdGFydCk6CisJbW92YXBzCTYoJWVjeCksICV4bW0yCisJbW92YXBzCTIyKCVlY3gpLCAleG1tMworCW1vdmFwcwkleG1tMywgJXhtbTYKKwltb3ZhcHMJMzgoJWVjeCksICV4bW00CisJbW92YXBzCSV4bW00LCAleG1tNworCW1vdmFwcwk1NCglZWN4KSwgJXhtbTUKKwlwbWludWIJJXhtbTIsICV4bW02CisJcG1pbnViCSV4bW01LCAleG1tNworCXBtaW51YgkleG1tNiwgJXhtbTcKKwlwY21wZXFiCSV4bW0wLCAleG1tNworCXBtb3Ztc2tiICV4bW03LCAlZWF4CisJbW92YXBzCSV4bW01LCAleG1tNworCXBhbGlnbnIJJDEwLCAleG1tNCwgJXhtbTUKKwlwYWxpZ25yCSQxMCwgJXhtbTMsICV4bW00CisJdGVzdAklZWF4LCAlZWF4CisJam56CUwoU2hsMTBTdGFydCkKKyNpZmRlZiBVU0VfQVNfU1RSTkNQWQorCXN1YgkkNjQsICVlYngKKwlqYmUJTChTdHJuY3B5TGVhdmUxMCkKKyNlbmRpZgorCXBhbGlnbnIJJDEwLCAleG1tMiwgJXhtbTMKKwlsZWEJNjQoJWVjeCksICVlY3gKKwlwYWxpZ25yCSQxMCwgJXhtbTEsICV4bW0yCisJbW92YXBzCSV4bW03LCAleG1tMQorCW1vdmFwcwkleG1tNSwgNDgoJWVkeCkKKwltb3ZhcHMJJXhtbTQsIDMyKCVlZHgpCisJbW92YXBzCSV4bW0zLCAxNiglZWR4KQorCW1vdmFwcwkleG1tMiwgKCVlZHgpCisJbGVhCTY0KCVlZHgpLCAlZWR4CisJam1wCUwoU2hsMTBMb29wU3RhcnQpCisKK0woU2hsMTBMb29wRXhpdCk6CisJbW92bHBkCS0yKCVlY3gpLCAleG1tMAorCW1vdmxwZAkleG1tMCwgLTIoJWVkeCkKKwltb3YJJDYsICVlc2kKKwlqbXAJTChDb3B5RnJvbTFUbzE2Qnl0ZXMpCisKKwkucDJhbGlnbiA0CitMKFNobDExKToKKwltb3ZhcHMJLTExKCVlY3gpLCAleG1tMQorCW1vdmFwcwk1KCVlY3gpLCAleG1tMgorTChTaGwxMVN0YXJ0KToKKwlwY21wZXFiCSV4bW0yLCAleG1tMAorCXBtb3Ztc2tiICV4bW0wLCAlZWF4CisJbW92YXBzCSV4bW0yLCAleG1tMworI2lmZGVmIFVTRV9BU19TVFJOQ1BZCisJc3ViCSQxNiwgJWVieAorCWpiZQlMKFN0cm5jcHlFeGl0MTFDYXNlMk9yQ2FzZTMpCisjZW5kaWYKKwl0ZXN0CSVlYXgsICVlYXgKKwlqbnoJTChTaGwxMUxvb3BFeGl0KQorCisJcGFsaWducgkkMTEsICV4bW0xLCAleG1tMgorCW1vdmFwcwkleG1tMywgJXhtbTEKKwltb3ZhcHMJJXhtbTIsICglZWR4KQorCW1vdmFwcwkyMSglZWN4KSwgJXhtbTIKKworCXBjbXBlcWIJJXhtbTIsICV4bW0wCisJbGVhCTE2KCVlZHgpLCAlZWR4CisJcG1vdm1za2IgJXhtbTAsICVlYXgKKwlsZWEJMTYoJWVjeCksICVlY3gKKwltb3ZhcHMJJXhtbTIsICV4bW0zCisjaWZkZWYgVVNFX0FTX1NUUk5DUFkKKwlzdWIJJDE2LCAlZWJ4CisJamJlCUwoU3RybmNweUV4aXQxMUNhc2UyT3JDYXNlMykKKyNlbmRpZgorCXRlc3QJJWVheCwgJWVheAorCWpueglMKFNobDExTG9vcEV4aXQpCisKKwlwYWxpZ25yCSQxMSwgJXhtbTEsICV4bW0yCisJbW92YXBzCSV4bW0yLCAoJWVkeCkKKwltb3ZhcHMJMjEoJWVjeCksICV4bW0yCisJbW92YXBzCSV4bW0zLCAleG1tMQorCisJcGNtcGVxYgkleG1tMiwgJXhtbTAKKwlsZWEJMTYoJWVkeCksICVlZHgKKwlwbW92bXNrYiAleG1tMCwgJWVheAorCWxlYQkxNiglZWN4KSwgJWVjeAorCW1vdmFwcwkleG1tMiwgJXhtbTMKKyNpZmRlZiBVU0VfQVNfU1RSTkNQWQorCXN1YgkkMTYsICVlYngKKwlqYmUJTChTdHJuY3B5RXhpdDExQ2FzZTJPckNhc2UzKQorI2VuZGlmCisJdGVzdAklZWF4LCAlZWF4CisJam56CUwoU2hsMTFMb29wRXhpdCkKKworCXBhbGlnbnIJJDExLCAleG1tMSwgJXhtbTIKKwltb3ZhcHMJJXhtbTIsICglZWR4KQorCW1vdmFwcwkyMSglZWN4KSwgJXhtbTIKKworCXBjbXBlcWIJJXhtbTIsICV4bW0wCisJbGVhCTE2KCVlZHgpLCAlZWR4CisJcG1vdm1za2IgJXhtbTAsICVlYXgKKwlsZWEJMTYoJWVjeCksICVlY3gKKyNpZmRlZiBVU0VfQVNfU1RSTkNQWQorCXN1YgkkMTYsICVlYngKKwlqYmUJTChTdHJuY3B5RXhpdDExQ2FzZTJPckNhc2UzKQorI2VuZGlmCisJdGVzdAklZWF4LCAlZWF4CisJam56CUwoU2hsMTFMb29wRXhpdCkKKworCXBhbGlnbnIJJDExLCAleG1tMywgJXhtbTIKKwltb3ZhcHMJJXhtbTIsICglZWR4KQorCWxlYQkyMSglZWN4KSwgJWVjeAorCWxlYQkxNiglZWR4KSwgJWVkeAorCisJbW92CSVlY3gsICVlYXgKKwlhbmQJJC0weDQwLCAlZWN4CisJc3ViCSVlY3gsICVlYXgKKwlsZWEJLTUoJWVjeCksICVlY3gKKwlzdWIJJWVheCwgJWVkeAorI2lmZGVmIFVTRV9BU19TVFJOQ1BZCisJYWRkCSVlYXgsICVlYngKKyNlbmRpZgorCW1vdmFwcwktMTEoJWVjeCksICV4bW0xCisKK0woU2hsMTFMb29wU3RhcnQpOgorCW1vdmFwcwk1KCVlY3gpLCAleG1tMgorCW1vdmFwcwkyMSglZWN4KSwgJXhtbTMKKwltb3ZhcHMJJXhtbTMsICV4bW02CisJbW92YXBzCTM3KCVlY3gpLCAleG1tNAorCW1vdmFwcwkleG1tNCwgJXhtbTcKKwltb3ZhcHMJNTMoJWVjeCksICV4bW01CisJcG1pbnViCSV4bW0yLCAleG1tNgorCXBtaW51YgkleG1tNSwgJXhtbTcKKwlwbWludWIJJXhtbTYsICV4bW03CisJcGNtcGVxYgkleG1tMCwgJXhtbTcKKwlwbW92bXNrYiAleG1tNywgJWVheAorCW1vdmFwcwkleG1tNSwgJXhtbTcKKwlwYWxpZ25yCSQxMSwgJXhtbTQsICV4bW01CisJcGFsaWducgkkMTEsICV4bW0zLCAleG1tNAorCXRlc3QJJWVheCwgJWVheAorCWpueglMKFNobDExU3RhcnQpCisjaWZkZWYgVVNFX0FTX1NUUk5DUFkKKwlzdWIJJDY0LCAlZWJ4CisJamJlCUwoU3RybmNweUxlYXZlMTEpCisjZW5kaWYKKwlwYWxpZ25yCSQxMSwgJXhtbTIsICV4bW0zCisJbGVhCTY0KCVlY3gpLCAlZWN4CisJcGFsaWducgkkMTEsICV4bW0xLCAleG1tMgorCW1vdmFwcwkleG1tNywgJXhtbTEKKwltb3ZhcHMJJXhtbTUsIDQ4KCVlZHgpCisJbW92YXBzCSV4bW00LCAzMiglZWR4KQorCW1vdmFwcwkleG1tMywgMTYoJWVkeCkKKwltb3ZhcHMJJXhtbTIsICglZWR4KQorCWxlYQk2NCglZWR4KSwgJWVkeAorCWptcAlMKFNobDExTG9vcFN0YXJ0KQorCitMKFNobDExTG9vcEV4aXQpOgorCW1vdmxwZAktMyglZWN4KSwgJXhtbTAKKwltb3ZscGQJJXhtbTAsIC0zKCVlZHgpCisJbW92CSQ1LCAlZXNpCisJam1wCUwoQ29weUZyb20xVG8xNkJ5dGVzKQorCisJLnAyYWxpZ24gNAorTChTaGwxMik6CisJbW92YXBzCS0xMiglZWN4KSwgJXhtbTEKKwltb3ZhcHMJNCglZWN4KSwgJXhtbTIKK0woU2hsMTJTdGFydCk6CisJcGNtcGVxYgkleG1tMiwgJXhtbTAKKwlwbW92bXNrYiAleG1tMCwgJWVheAorCW1vdmFwcwkleG1tMiwgJXhtbTMKKyNpZmRlZiBVU0VfQVNfU1RSTkNQWQorCXN1YgkkMTYsICVlYngKKwlqYmUJTChTdHJuY3B5RXhpdDEyQ2FzZTJPckNhc2UzKQorI2VuZGlmCisJdGVzdAklZWF4LCAlZWF4CisJam56CUwoU2hsMTJMb29wRXhpdCkKKworCXBhbGlnbnIJJDEyLCAleG1tMSwgJXhtbTIKKwltb3ZhcHMJJXhtbTMsICV4bW0xCisJbW92YXBzCSV4bW0yLCAoJWVkeCkKKwltb3ZhcHMJMjAoJWVjeCksICV4bW0yCisKKwlwY21wZXFiCSV4bW0yLCAleG1tMAorCWxlYQkxNiglZWR4KSwgJWVkeAorCXBtb3Ztc2tiICV4bW0wLCAlZWF4CisJbGVhCTE2KCVlY3gpLCAlZWN4CisJbW92YXBzCSV4bW0yLCAleG1tMworI2lmZGVmIFVTRV9BU19TVFJOQ1BZCisJc3ViCSQxNiwgJWVieAorCWpiZQlMKFN0cm5jcHlFeGl0MTJDYXNlMk9yQ2FzZTMpCisjZW5kaWYKKwl0ZXN0CSVlYXgsICVlYXgKKwlqbnoJTChTaGwxMkxvb3BFeGl0KQorCisJcGFsaWducgkkMTIsICV4bW0xLCAleG1tMgorCW1vdmFwcwkleG1tMiwgKCVlZHgpCisJbW92YXBzCTIwKCVlY3gpLCAleG1tMgorCW1vdmFwcwkleG1tMywgJXhtbTEKKworCXBjbXBlcWIJJXhtbTIsICV4bW0wCisJbGVhCTE2KCVlZHgpLCAlZWR4CisJcG1vdm1za2IgJXhtbTAsICVlYXgKKwlsZWEJMTYoJWVjeCksICVlY3gKKwltb3ZhcHMJJXhtbTIsICV4bW0zCisjaWZkZWYgVVNFX0FTX1NUUk5DUFkKKwlzdWIJJDE2LCAlZWJ4CisJamJlCUwoU3RybmNweUV4aXQxMkNhc2UyT3JDYXNlMykKKyNlbmRpZgorCXRlc3QJJWVheCwgJWVheAorCWpueglMKFNobDEyTG9vcEV4aXQpCisKKwlwYWxpZ25yCSQxMiwgJXhtbTEsICV4bW0yCisJbW92YXBzCSV4bW0yLCAoJWVkeCkKKwltb3ZhcHMJMjAoJWVjeCksICV4bW0yCisKKwlwY21wZXFiCSV4bW0yLCAleG1tMAorCWxlYQkxNiglZWR4KSwgJWVkeAorCXBtb3Ztc2tiICV4bW0wLCAlZWF4CisJbGVhCTE2KCVlY3gpLCAlZWN4CisjaWZkZWYgVVNFX0FTX1NUUk5DUFkKKwlzdWIJJDE2LCAlZWJ4CisJamJlCUwoU3RybmNweUV4aXQxMkNhc2UyT3JDYXNlMykKKyNlbmRpZgorCXRlc3QJJWVheCwgJWVheAorCWpueglMKFNobDEyTG9vcEV4aXQpCisKKwlwYWxpZ25yCSQxMiwgJXhtbTMsICV4bW0yCisJbW92YXBzCSV4bW0yLCAoJWVkeCkKKwlsZWEJMjAoJWVjeCksICVlY3gKKwlsZWEJMTYoJWVkeCksICVlZHgKKworCW1vdgklZWN4LCAlZWF4CisJYW5kCSQtMHg0MCwgJWVjeAorCXN1YgklZWN4LCAlZWF4CisJbGVhCS00KCVlY3gpLCAlZWN4CisJc3ViCSVlYXgsICVlZHgKKyNpZmRlZiBVU0VfQVNfU1RSTkNQWQorCWFkZAklZWF4LCAlZWJ4CisjZW5kaWYKKwltb3ZhcHMJLTEyKCVlY3gpLCAleG1tMQorCitMKFNobDEyTG9vcFN0YXJ0KToKKwltb3ZhcHMJNCglZWN4KSwgJXhtbTIKKwltb3ZhcHMJMjAoJWVjeCksICV4bW0zCisJbW92YXBzCSV4bW0zLCAleG1tNgorCW1vdmFwcwkzNiglZWN4KSwgJXhtbTQKKwltb3ZhcHMJJXhtbTQsICV4bW03CisJbW92YXBzCTUyKCVlY3gpLCAleG1tNQorCXBtaW51YgkleG1tMiwgJXhtbTYKKwlwbWludWIJJXhtbTUsICV4bW03CisJcG1pbnViCSV4bW02LCAleG1tNworCXBjbXBlcWIJJXhtbTAsICV4bW03CisJcG1vdm1za2IgJXhtbTcsICVlYXgKKwltb3ZhcHMJJXhtbTUsICV4bW03CisJcGFsaWducgkkMTIsICV4bW00LCAleG1tNQorCXBhbGlnbnIJJDEyLCAleG1tMywgJXhtbTQKKwl0ZXN0CSVlYXgsICVlYXgKKwlqbnoJTChTaGwxMlN0YXJ0KQorI2lmZGVmIFVTRV9BU19TVFJOQ1BZCisJc3ViCSQ2NCwgJWVieAorCWpiZQlMKFN0cm5jcHlMZWF2ZTEyKQorI2VuZGlmCisJcGFsaWducgkkMTIsICV4bW0yLCAleG1tMworCWxlYQk2NCglZWN4KSwgJWVjeAorCXBhbGlnbnIJJDEyLCAleG1tMSwgJXhtbTIKKwltb3ZhcHMJJXhtbTcsICV4bW0xCisJbW92YXBzCSV4bW01LCA0OCglZWR4KQorCW1vdmFwcwkleG1tNCwgMzIoJWVkeCkKKwltb3ZhcHMJJXhtbTMsIDE2KCVlZHgpCisJbW92YXBzCSV4bW0yLCAoJWVkeCkKKwlsZWEJNjQoJWVkeCksICVlZHgKKwlqbXAJTChTaGwxMkxvb3BTdGFydCkKKworTChTaGwxMkxvb3BFeGl0KToKKwltb3ZsCSglZWN4KSwgJWVzaQorCW1vdmwJJWVzaSwgKCVlZHgpCisJbW92CSQ0LCAlZXNpCisJam1wCUwoQ29weUZyb20xVG8xNkJ5dGVzKQorCisJLnAyYWxpZ24gNAorTChTaGwxMyk6CisJbW92YXBzCS0xMyglZWN4KSwgJXhtbTEKKwltb3ZhcHMJMyglZWN4KSwgJXhtbTIKK0woU2hsMTNTdGFydCk6CisJcGNtcGVxYgkleG1tMiwgJXhtbTAKKwlwbW92bXNrYiAleG1tMCwgJWVheAorCW1vdmFwcwkleG1tMiwgJXhtbTMKKyNpZmRlZiBVU0VfQVNfU1RSTkNQWQorCXN1YgkkMTYsICVlYngKKwlqYmUJTChTdHJuY3B5RXhpdDEzQ2FzZTJPckNhc2UzKQorI2VuZGlmCisJdGVzdAklZWF4LCAlZWF4CisJam56CUwoU2hsMTNMb29wRXhpdCkKKworCXBhbGlnbnIJJDEzLCAleG1tMSwgJXhtbTIKKwltb3ZhcHMJJXhtbTMsICV4bW0xCisJbW92YXBzCSV4bW0yLCAoJWVkeCkKKwltb3ZhcHMJMTkoJWVjeCksICV4bW0yCisKKwlwY21wZXFiCSV4bW0yLCAleG1tMAorCWxlYQkxNiglZWR4KSwgJWVkeAorCXBtb3Ztc2tiICV4bW0wLCAlZWF4CisJbGVhCTE2KCVlY3gpLCAlZWN4CisJbW92YXBzCSV4bW0yLCAleG1tMworI2lmZGVmIFVTRV9BU19TVFJOQ1BZCisJc3ViCSQxNiwgJWVieAorCWpiZQlMKFN0cm5jcHlFeGl0MTNDYXNlMk9yQ2FzZTMpCisjZW5kaWYKKwl0ZXN0CSVlYXgsICVlYXgKKwlqbnoJTChTaGwxM0xvb3BFeGl0KQorCisJcGFsaWducgkkMTMsICV4bW0xLCAleG1tMgorCW1vdmFwcwkleG1tMiwgKCVlZHgpCisJbW92YXBzCTE5KCVlY3gpLCAleG1tMgorCW1vdmFwcwkleG1tMywgJXhtbTEKKworCXBjbXBlcWIJJXhtbTIsICV4bW0wCisJbGVhCTE2KCVlZHgpLCAlZWR4CisJcG1vdm1za2IgJXhtbTAsICVlYXgKKwlsZWEJMTYoJWVjeCksICVlY3gKKwltb3ZhcHMJJXhtbTIsICV4bW0zCisjaWZkZWYgVVNFX0FTX1NUUk5DUFkKKwlzdWIJJDE2LCAlZWJ4CisJamJlCUwoU3RybmNweUV4aXQxM0Nhc2UyT3JDYXNlMykKKyNlbmRpZgorCXRlc3QJJWVheCwgJWVheAorCWpueglMKFNobDEzTG9vcEV4aXQpCisKKwlwYWxpZ25yCSQxMywgJXhtbTEsICV4bW0yCisJbW92YXBzCSV4bW0yLCAoJWVkeCkKKwltb3ZhcHMJMTkoJWVjeCksICV4bW0yCisKKwlwY21wZXFiCSV4bW0yLCAleG1tMAorCWxlYQkxNiglZWR4KSwgJWVkeAorCXBtb3Ztc2tiICV4bW0wLCAlZWF4CisJbGVhCTE2KCVlY3gpLCAlZWN4CisjaWZkZWYgVVNFX0FTX1NUUk5DUFkKKwlzdWIJJDE2LCAlZWJ4CisJamJlCUwoU3RybmNweUV4aXQxM0Nhc2UyT3JDYXNlMykKKyNlbmRpZgorCXRlc3QJJWVheCwgJWVheAorCWpueglMKFNobDEzTG9vcEV4aXQpCisKKwlwYWxpZ25yCSQxMywgJXhtbTMsICV4bW0yCisJbW92YXBzCSV4bW0yLCAoJWVkeCkKKwlsZWEJMTkoJWVjeCksICVlY3gKKwlsZWEJMTYoJWVkeCksICVlZHgKKworCW1vdgklZWN4LCAlZWF4CisJYW5kCSQtMHg0MCwgJWVjeAorCXN1YgklZWN4LCAlZWF4CisJbGVhCS0zKCVlY3gpLCAlZWN4CisJc3ViCSVlYXgsICVlZHgKKyNpZmRlZiBVU0VfQVNfU1RSTkNQWQorCWFkZAklZWF4LCAlZWJ4CisjZW5kaWYKKwltb3ZhcHMJLTEzKCVlY3gpLCAleG1tMQorCitMKFNobDEzTG9vcFN0YXJ0KToKKwltb3ZhcHMJMyglZWN4KSwgJXhtbTIKKwltb3ZhcHMJMTkoJWVjeCksICV4bW0zCisJbW92YXBzCSV4bW0zLCAleG1tNgorCW1vdmFwcwkzNSglZWN4KSwgJXhtbTQKKwltb3ZhcHMJJXhtbTQsICV4bW03CisJbW92YXBzCTUxKCVlY3gpLCAleG1tNQorCXBtaW51YgkleG1tMiwgJXhtbTYKKwlwbWludWIJJXhtbTUsICV4bW03CisJcG1pbnViCSV4bW02LCAleG1tNworCXBjbXBlcWIJJXhtbTAsICV4bW03CisJcG1vdm1za2IgJXhtbTcsICVlYXgKKwltb3ZhcHMJJXhtbTUsICV4bW03CisJcGFsaWducgkkMTMsICV4bW00LCAleG1tNQorCXBhbGlnbnIJJDEzLCAleG1tMywgJXhtbTQKKwl0ZXN0CSVlYXgsICVlYXgKKwlqbnoJTChTaGwxM1N0YXJ0KQorI2lmZGVmIFVTRV9BU19TVFJOQ1BZCisJc3ViCSQ2NCwgJWVieAorCWpiZQlMKFN0cm5jcHlMZWF2ZTEzKQorI2VuZGlmCisJcGFsaWducgkkMTMsICV4bW0yLCAleG1tMworCWxlYQk2NCglZWN4KSwgJWVjeAorCXBhbGlnbnIJJDEzLCAleG1tMSwgJXhtbTIKKwltb3ZhcHMJJXhtbTcsICV4bW0xCisJbW92YXBzCSV4bW01LCA0OCglZWR4KQorCW1vdmFwcwkleG1tNCwgMzIoJWVkeCkKKwltb3ZhcHMJJXhtbTMsIDE2KCVlZHgpCisJbW92YXBzCSV4bW0yLCAoJWVkeCkKKwlsZWEJNjQoJWVkeCksICVlZHgKKwlqbXAJTChTaGwxM0xvb3BTdGFydCkKKworTChTaGwxM0xvb3BFeGl0KToKKwltb3ZsCS0xKCVlY3gpLCAlZXNpCisJbW92bAklZXNpLCAtMSglZWR4KQorCW1vdgkkMywgJWVzaQorCWptcAlMKENvcHlGcm9tMVRvMTZCeXRlcykKKworCS5wMmFsaWduIDQKK0woU2hsMTQpOgorCW1vdmFwcwktMTQoJWVjeCksICV4bW0xCisJbW92YXBzCTIoJWVjeCksICV4bW0yCitMKFNobDE0U3RhcnQpOgorCXBjbXBlcWIJJXhtbTIsICV4bW0wCisJcG1vdm1za2IgJXhtbTAsICVlYXgKKwltb3ZhcHMJJXhtbTIsICV4bW0zCisjaWZkZWYgVVNFX0FTX1NUUk5DUFkKKwlzdWIJJDE2LCAlZWJ4CisJamJlCUwoU3RybmNweUV4aXQxNENhc2UyT3JDYXNlMykKKyNlbmRpZgorCXRlc3QJJWVheCwgJWVheAorCWpueglMKFNobDE0TG9vcEV4aXQpCisKKwlwYWxpZ25yCSQxNCwgJXhtbTEsICV4bW0yCisJbW92YXBzCSV4bW0zLCAleG1tMQorCW1vdmFwcwkleG1tMiwgKCVlZHgpCisJbW92YXBzCTE4KCVlY3gpLCAleG1tMgorCisJcGNtcGVxYgkleG1tMiwgJXhtbTAKKwlsZWEJMTYoJWVkeCksICVlZHgKKwlwbW92bXNrYiAleG1tMCwgJWVheAorCWxlYQkxNiglZWN4KSwgJWVjeAorCW1vdmFwcwkleG1tMiwgJXhtbTMKKyNpZmRlZiBVU0VfQVNfU1RSTkNQWQorCXN1YgkkMTYsICVlYngKKwlqYmUJTChTdHJuY3B5RXhpdDE0Q2FzZTJPckNhc2UzKQorI2VuZGlmCisJdGVzdAklZWF4LCAlZWF4CisJam56CUwoU2hsMTRMb29wRXhpdCkKKworCXBhbGlnbnIJJDE0LCAleG1tMSwgJXhtbTIKKwltb3ZhcHMJJXhtbTIsICglZWR4KQorCW1vdmFwcwkxOCglZWN4KSwgJXhtbTIKKwltb3ZhcHMJJXhtbTMsICV4bW0xCisKKwlwY21wZXFiCSV4bW0yLCAleG1tMAorCWxlYQkxNiglZWR4KSwgJWVkeAorCXBtb3Ztc2tiICV4bW0wLCAlZWF4CisJbGVhCTE2KCVlY3gpLCAlZWN4CisJbW92YXBzCSV4bW0yLCAleG1tMworI2lmZGVmIFVTRV9BU19TVFJOQ1BZCisJc3ViCSQxNiwgJWVieAorCWpiZQlMKFN0cm5jcHlFeGl0MTRDYXNlMk9yQ2FzZTMpCisjZW5kaWYKKwl0ZXN0CSVlYXgsICVlYXgKKwlqbnoJTChTaGwxNExvb3BFeGl0KQorCisJcGFsaWducgkkMTQsICV4bW0xLCAleG1tMgorCW1vdmFwcwkleG1tMiwgKCVlZHgpCisJbW92YXBzCTE4KCVlY3gpLCAleG1tMgorCisJcGNtcGVxYgkleG1tMiwgJXhtbTAKKwlsZWEJMTYoJWVkeCksICVlZHgKKwlwbW92bXNrYiAleG1tMCwgJWVheAorCWxlYQkxNiglZWN4KSwgJWVjeAorI2lmZGVmIFVTRV9BU19TVFJOQ1BZCisJc3ViCSQxNiwgJWVieAorCWpiZQlMKFN0cm5jcHlFeGl0MTRDYXNlMk9yQ2FzZTMpCisjZW5kaWYKKwl0ZXN0CSVlYXgsICVlYXgKKwlqbnoJTChTaGwxNExvb3BFeGl0KQorCisJcGFsaWducgkkMTQsICV4bW0zLCAleG1tMgorCW1vdmFwcwkleG1tMiwgKCVlZHgpCisJbGVhCTE4KCVlY3gpLCAlZWN4CisJbGVhCTE2KCVlZHgpLCAlZWR4CisKKwltb3YJJWVjeCwgJWVheAorCWFuZAkkLTB4NDAsICVlY3gKKwlzdWIJJWVjeCwgJWVheAorCWxlYQktMiglZWN4KSwgJWVjeAorCXN1YgklZWF4LCAlZWR4CisjaWZkZWYgVVNFX0FTX1NUUk5DUFkKKwlhZGQJJWVheCwgJWVieAorI2VuZGlmCisJbW92YXBzCS0xNCglZWN4KSwgJXhtbTEKKworTChTaGwxNExvb3BTdGFydCk6CisJbW92YXBzCTIoJWVjeCksICV4bW0yCisJbW92YXBzCTE4KCVlY3gpLCAleG1tMworCW1vdmFwcwkleG1tMywgJXhtbTYKKwltb3ZhcHMJMzQoJWVjeCksICV4bW00CisJbW92YXBzCSV4bW00LCAleG1tNworCW1vdmFwcwk1MCglZWN4KSwgJXhtbTUKKwlwbWludWIJJXhtbTIsICV4bW02CisJcG1pbnViCSV4bW01LCAleG1tNworCXBtaW51YgkleG1tNiwgJXhtbTcKKwlwY21wZXFiCSV4bW0wLCAleG1tNworCXBtb3Ztc2tiICV4bW03LCAlZWF4CisJbW92YXBzCSV4bW01LCAleG1tNworCXBhbGlnbnIJJDE0LCAleG1tNCwgJXhtbTUKKwlwYWxpZ25yCSQxNCwgJXhtbTMsICV4bW00CisJdGVzdAklZWF4LCAlZWF4CisJam56CUwoU2hsMTRTdGFydCkKKyNpZmRlZiBVU0VfQVNfU1RSTkNQWQorCXN1YgkkNjQsICVlYngKKwlqYmUJTChTdHJuY3B5TGVhdmUxNCkKKyNlbmRpZgorCXBhbGlnbnIJJDE0LCAleG1tMiwgJXhtbTMKKwlsZWEJNjQoJWVjeCksICVlY3gKKwlwYWxpZ25yCSQxNCwgJXhtbTEsICV4bW0yCisJbW92YXBzCSV4bW03LCAleG1tMQorCW1vdmFwcwkleG1tNSwgNDgoJWVkeCkKKwltb3ZhcHMJJXhtbTQsIDMyKCVlZHgpCisJbW92YXBzCSV4bW0zLCAxNiglZWR4KQorCW1vdmFwcwkleG1tMiwgKCVlZHgpCisJbGVhCTY0KCVlZHgpLCAlZWR4CisJam1wCUwoU2hsMTRMb29wU3RhcnQpCisKK0woU2hsMTRMb29wRXhpdCk6CisJbW92bAktMiglZWN4KSwgJWVzaQorCW1vdmwJJWVzaSwgLTIoJWVkeCkKKwltb3YJJDIsICVlc2kKKwlqbXAJTChDb3B5RnJvbTFUbzE2Qnl0ZXMpCisKKwkucDJhbGlnbiA0CitMKFNobDE1KToKKwltb3ZhcHMJLTE1KCVlY3gpLCAleG1tMQorCW1vdmFwcwkxKCVlY3gpLCAleG1tMgorTChTaGwxNVN0YXJ0KToKKwlwY21wZXFiCSV4bW0yLCAleG1tMAorCXBtb3Ztc2tiICV4bW0wLCAlZWF4CisJbW92YXBzCSV4bW0yLCAleG1tMworI2lmZGVmIFVTRV9BU19TVFJOQ1BZCisJc3ViCSQxNiwgJWVieAorCWpiZQlMKFN0cm5jcHlFeGl0MTVDYXNlMk9yQ2FzZTMpCisjZW5kaWYKKwl0ZXN0CSVlYXgsICVlYXgKKwlqbnoJTChTaGwxNUxvb3BFeGl0KQorCisJcGFsaWducgkkMTUsICV4bW0xLCAleG1tMgorCW1vdmFwcwkleG1tMywgJXhtbTEKKwltb3ZhcHMJJXhtbTIsICglZWR4KQorCW1vdmFwcwkxNyglZWN4KSwgJXhtbTIKKworCXBjbXBlcWIJJXhtbTIsICV4bW0wCisJbGVhCTE2KCVlZHgpLCAlZWR4CisJcG1vdm1za2IgJXhtbTAsICVlYXgKKwlsZWEJMTYoJWVjeCksICVlY3gKKwltb3ZhcHMJJXhtbTIsICV4bW0zCisjaWZkZWYgVVNFX0FTX1NUUk5DUFkKKwlzdWIJJDE2LCAlZWJ4CisJamJlCUwoU3RybmNweUV4aXQxNUNhc2UyT3JDYXNlMykKKyNlbmRpZgorCXRlc3QJJWVheCwgJWVheAorCWpueglMKFNobDE1TG9vcEV4aXQpCisKKwlwYWxpZ25yCSQxNSwgJXhtbTEsICV4bW0yCisJbW92YXBzCSV4bW0yLCAoJWVkeCkKKwltb3ZhcHMJMTcoJWVjeCksICV4bW0yCisJbW92YXBzCSV4bW0zLCAleG1tMQorCisJcGNtcGVxYgkleG1tMiwgJXhtbTAKKwlsZWEJMTYoJWVkeCksICVlZHgKKwlwbW92bXNrYiAleG1tMCwgJWVheAorCWxlYQkxNiglZWN4KSwgJWVjeAorCW1vdmFwcwkleG1tMiwgJXhtbTMKKyNpZmRlZiBVU0VfQVNfU1RSTkNQWQorCXN1YgkkMTYsICVlYngKKwlqYmUJTChTdHJuY3B5RXhpdDE1Q2FzZTJPckNhc2UzKQorI2VuZGlmCisJdGVzdAklZWF4LCAlZWF4CisJam56CUwoU2hsMTVMb29wRXhpdCkKKworCXBhbGlnbnIJJDE1LCAleG1tMSwgJXhtbTIKKwltb3ZhcHMJJXhtbTIsICglZWR4KQorCW1vdmFwcwkxNyglZWN4KSwgJXhtbTIKKworCXBjbXBlcWIJJXhtbTIsICV4bW0wCisJbGVhCTE2KCVlZHgpLCAlZWR4CisJcG1vdm1za2IgJXhtbTAsICVlYXgKKwlsZWEJMTYoJWVjeCksICVlY3gKKyNpZmRlZiBVU0VfQVNfU1RSTkNQWQorCXN1YgkkMTYsICVlYngKKwlqYmUJTChTdHJuY3B5RXhpdDE1Q2FzZTJPckNhc2UzKQorI2VuZGlmCisJdGVzdAklZWF4LCAlZWF4CisJam56CUwoU2hsMTVMb29wRXhpdCkKKworCXBhbGlnbnIJJDE1LCAleG1tMywgJXhtbTIKKwltb3ZhcHMJJXhtbTIsICglZWR4KQorCWxlYQkxNyglZWN4KSwgJWVjeAorCWxlYQkxNiglZWR4KSwgJWVkeAorCisJbW92CSVlY3gsICVlYXgKKwlhbmQJJC0weDQwLCAlZWN4CisJc3ViCSVlY3gsICVlYXgKKwlsZWEJLTEoJWVjeCksICVlY3gKKwlzdWIJJWVheCwgJWVkeAorI2lmZGVmIFVTRV9BU19TVFJOQ1BZCisJYWRkCSVlYXgsICVlYngKKyNlbmRpZgorCW1vdmFwcwktMTUoJWVjeCksICV4bW0xCisKK0woU2hsMTVMb29wU3RhcnQpOgorCW1vdmFwcwkxKCVlY3gpLCAleG1tMgorCW1vdmFwcwkxNyglZWN4KSwgJXhtbTMKKwltb3ZhcHMJJXhtbTMsICV4bW02CisJbW92YXBzCTMzKCVlY3gpLCAleG1tNAorCW1vdmFwcwkleG1tNCwgJXhtbTcKKwltb3ZhcHMJNDkoJWVjeCksICV4bW01CisJcG1pbnViCSV4bW0yLCAleG1tNgorCXBtaW51YgkleG1tNSwgJXhtbTcKKwlwbWludWIJJXhtbTYsICV4bW03CisJcGNtcGVxYgkleG1tMCwgJXhtbTcKKwlwbW92bXNrYiAleG1tNywgJWVheAorCW1vdmFwcwkleG1tNSwgJXhtbTcKKwlwYWxpZ25yCSQxNSwgJXhtbTQsICV4bW01CisJcGFsaWducgkkMTUsICV4bW0zLCAleG1tNAorCXRlc3QJJWVheCwgJWVheAorCWpueglMKFNobDE1U3RhcnQpCisjaWZkZWYgVVNFX0FTX1NUUk5DUFkKKwlzdWIJJDY0LCAlZWJ4CisJamJlCUwoU3RybmNweUxlYXZlMTUpCisjZW5kaWYKKwlwYWxpZ25yCSQxNSwgJXhtbTIsICV4bW0zCisJbGVhCTY0KCVlY3gpLCAlZWN4CisJcGFsaWducgkkMTUsICV4bW0xLCAleG1tMgorCW1vdmFwcwkleG1tNywgJXhtbTEKKwltb3ZhcHMJJXhtbTUsIDQ4KCVlZHgpCisJbW92YXBzCSV4bW00LCAzMiglZWR4KQorCW1vdmFwcwkleG1tMywgMTYoJWVkeCkKKwltb3ZhcHMJJXhtbTIsICglZWR4KQorCWxlYQk2NCglZWR4KSwgJWVkeAorCWptcAlMKFNobDE1TG9vcFN0YXJ0KQorCitMKFNobDE1TG9vcEV4aXQpOgorCW1vdmwJLTMoJWVjeCksICVlc2kKKwltb3ZsCSVlc2ksIC0zKCVlZHgpCisJbW92CSQxLCAlZXNpCisjaWYgZGVmaW5lZCBVU0VfQVNfU1RSQ0FUIHx8IGRlZmluZWQgVVNFX0FTX1NUUkxDUFkKKwlqbXAJTChDb3B5RnJvbTFUbzE2Qnl0ZXMpCisjZW5kaWYKKworCisjaWYgIWRlZmluZWQgVVNFX0FTX1NUUkNBVCAmJiAhZGVmaW5lZCBVU0VfQVNfU1RSTENQWQorCisJLnAyYWxpZ24gNAorTChDb3B5RnJvbTFUbzE2Qnl0ZXMpOgorIyBpZmRlZiBVU0VfQVNfU1RSTkNQWQorCWFkZAkkMTYsICVlYngKKyMgZW5kaWYKKwlhZGQJJWVzaSwgJWVkeAorCWFkZAklZXNpLCAlZWN4CisKKwlQT1AJKCVlc2kpCisJdGVzdAklYWwsICVhbAorCWp6CUwoRXhpdEhpZ2g4KQorCitMKENvcHlGcm9tMVRvMTZCeXRlc0xlc3M4KToKKwltb3YJJWFsLCAlYWgKKwlhbmQJJDE1LCAlYWgKKwlqeglMKEV4aXRIaWdoNCkKKworCXRlc3QJJDB4MDEsICVhbAorCWpueglMKEV4aXQxKQorCXRlc3QJJDB4MDIsICVhbAorCWpueglMKEV4aXQyKQorCXRlc3QJJDB4MDQsICVhbAorCWpueglMKEV4aXQzKQorCisJLnAyYWxpZ24gNAorTChFeGl0NCk6CisJbW92bAkoJWVjeCksICVlYXgKKwltb3ZsCSVlYXgsICglZWR4KQorCVNBVkVfUkVTVUxUCSgzKQorIyBpZmRlZiBVU0VfQVNfU1RSTkNQWQorCXN1YgkkNCwgJWVieAorCWxlYQk0KCVlZHgpLCAlZWN4CisJam56CUwoU3RybmNweUZpbGxUYWlsV2l0aFplcm8xKQorIyAgaWZkZWYgVVNFX0FTX1NUUENQWQorCWNtcGIJJDEsICglZWF4KQorCXNiYgkkLTEsICVlYXgKKyMgIGVuZGlmCisjIGVuZGlmCisJUkVUVVJOMQorCisJLnAyYWxpZ24gNAorTChFeGl0SGlnaDQpOgorCXRlc3QJJDB4MTAsICVhbAorCWpueglMKEV4aXQ1KQorCXRlc3QJJDB4MjAsICVhbAorCWpueglMKEV4aXQ2KQorCXRlc3QJJDB4NDAsICVhbAorCWpueglMKEV4aXQ3KQorCisJLnAyYWxpZ24gNAorTChFeGl0OCk6CisJbW92bHBkCSglZWN4KSwgJXhtbTAKKwltb3ZscGQJJXhtbTAsICglZWR4KQorCVNBVkVfUkVTVUxUCSg3KQorIyBpZmRlZiBVU0VfQVNfU1RSTkNQWQorCXN1YgkkOCwgJWVieAorCWxlYQk4KCVlZHgpLCAlZWN4CisJam56CUwoU3RybmNweUZpbGxUYWlsV2l0aFplcm8xKQorIyAgaWZkZWYgVVNFX0FTX1NUUENQWQorCWNtcGIJJDEsICglZWF4KQorCXNiYgkkLTEsICVlYXgKKyMgIGVuZGlmCisjIGVuZGlmCisJUkVUVVJOMQorCisJLnAyYWxpZ24gNAorTChFeGl0SGlnaDgpOgorCW1vdgklYWgsICVhbAorCWFuZAkkMTUsICVhbAorCWp6CUwoRXhpdEhpZ2gxMikKKworCXRlc3QJJDB4MDEsICVhaAorCWpueglMKEV4aXQ5KQorCXRlc3QJJDB4MDIsICVhaAorCWpueglMKEV4aXQxMCkKKwl0ZXN0CSQweDA0LCAlYWgKKwlqbnoJTChFeGl0MTEpCisKKwkucDJhbGlnbiA0CitMKEV4aXQxMik6CisJbW92bHBkCSglZWN4KSwgJXhtbTAKKwltb3ZsCTgoJWVjeCksICVlYXgKKwltb3ZscGQJJXhtbTAsICglZWR4KQorCW1vdmwJJWVheCwgOCglZWR4KQorCVNBVkVfUkVTVUxUCSgxMSkKKyMgaWZkZWYgVVNFX0FTX1NUUk5DUFkKKwlzdWIJJDEyLCAlZWJ4CisJbGVhCTEyKCVlZHgpLCAlZWN4CisJam56CUwoU3RybmNweUZpbGxUYWlsV2l0aFplcm8xKQorIyAgaWZkZWYgVVNFX0FTX1NUUENQWQorCWNtcGIJJDEsICglZWF4KQorCXNiYgkkLTEsICVlYXgKKyMgIGVuZGlmCisjIGVuZGlmCisJUkVUVVJOMQorCisJLnAyYWxpZ24gNAorTChFeGl0SGlnaDEyKToKKwl0ZXN0CSQweDEwLCAlYWgKKwlqbnoJTChFeGl0MTMpCisJdGVzdAkkMHgyMCwgJWFoCisJam56CUwoRXhpdDE0KQorCXRlc3QJJDB4NDAsICVhaAorCWpueglMKEV4aXQxNSkKKworCS5wMmFsaWduIDQKK0woRXhpdDE2KToKKwltb3ZkcXUJKCVlY3gpLCAleG1tMAorCW1vdmRxdQkleG1tMCwgKCVlZHgpCisJU0FWRV9SRVNVTFQJKDE1KQorIyBpZmRlZiBVU0VfQVNfU1RSTkNQWQorCXN1YgkkMTYsICVlYngKKwlsZWEJMTYoJWVkeCksICVlY3gKKwlqbnoJTChTdHJuY3B5RmlsbFRhaWxXaXRoWmVybzEpCisjICBpZmRlZiBVU0VfQVNfU1RQQ1BZCisJY21wYgkkMSwgKCVlYXgpCisJc2JiCSQtMSwgJWVheAorIyAgZW5kaWYKKyMgZW5kaWYKKwlSRVRVUk4xCisKKyMgIGlmZGVmIFVTRV9BU19TVFJOQ1BZCisKKwlDRklfUFVTSCglZXNpKQorCisJLnAyYWxpZ24gNAorTChDb3B5RnJvbTFUbzE2Qnl0ZXNDYXNlMik6CisJYWRkCSQxNiwgJWVieAorCWFkZAklZXNpLCAlZWN4CisJYWRkCSVlc2ksICVlZHgKKworCVBPUAkoJWVzaSkKKworCXRlc3QJJWFsLCAlYWwKKwlqeglMKEV4aXRIaWdoQ2FzZTIpCisKKwljbXAJJDgsICVlYngKKwlqYQlMKENvcHlGcm9tMVRvMTZCeXRlc0xlc3M4KQorCisJdGVzdAkkMHgwMSwgJWFsCisJam56CUwoRXhpdDEpCisJY21wCSQxLCAlZWJ4CisJamUJTChFeGl0MSkKKwl0ZXN0CSQweDAyLCAlYWwKKwlqbnoJTChFeGl0MikKKwljbXAJJDIsICVlYngKKwlqZQlMKEV4aXQyKQorCXRlc3QJJDB4MDQsICVhbAorCWpueglMKEV4aXQzKQorCWNtcAkkMywgJWVieAorCWplCUwoRXhpdDMpCisJdGVzdAkkMHgwOCwgJWFsCisJam56CUwoRXhpdDQpCisJY21wCSQ0LCAlZWJ4CisJamUJTChFeGl0NCkKKwl0ZXN0CSQweDEwLCAlYWwKKwlqbnoJTChFeGl0NSkKKwljbXAJJDUsICVlYngKKwlqZQlMKEV4aXQ1KQorCXRlc3QJJDB4MjAsICVhbAorCWpueglMKEV4aXQ2KQorCWNtcAkkNiwgJWVieAorCWplCUwoRXhpdDYpCisJdGVzdAkkMHg0MCwgJWFsCisJam56CUwoRXhpdDcpCisJY21wCSQ3LCAlZWJ4CisJamUJTChFeGl0NykKKwlqbXAJTChFeGl0OCkKKworCS5wMmFsaWduIDQKK0woRXhpdEhpZ2hDYXNlMik6CisJY21wCSQ4LCAlZWJ4CisJamJlCUwoQ29weUZyb20xVG8xNkJ5dGVzTGVzczhDYXNlMykKKworCXRlc3QJJDB4MDEsICVhaAorCWpueglMKEV4aXQ5KQorCWNtcAkkOSwgJWVieAorCWplCUwoRXhpdDkpCisJdGVzdAkkMHgwMiwgJWFoCisJam56CUwoRXhpdDEwKQorCWNtcAkkMTAsICVlYngKKwlqZQlMKEV4aXQxMCkKKwl0ZXN0CSQweDA0LCAlYWgKKwlqbnoJTChFeGl0MTEpCisJY21wCSQxMSwgJWVieAorCWplCUwoRXhpdDExKQorCXRlc3QJJDB4OCwgJWFoCisJam56CUwoRXhpdDEyKQorCWNtcAkkMTIsICVlYngKKwlqZQlMKEV4aXQxMikKKwl0ZXN0CSQweDEwLCAlYWgKKwlqbnoJTChFeGl0MTMpCisJY21wCSQxMywgJWVieAorCWplCUwoRXhpdDEzKQorCXRlc3QJJDB4MjAsICVhaAorCWpueglMKEV4aXQxNCkKKwljbXAJJDE0LCAlZWJ4CisJamUJTChFeGl0MTQpCisJdGVzdAkkMHg0MCwgJWFoCisJam56CUwoRXhpdDE1KQorCWNtcAkkMTUsICVlYngKKwlqZQlMKEV4aXQxNSkKKwlqbXAJTChFeGl0MTYpCisKKwlDRklfUFVTSCglZXNpKQorCisJLnAyYWxpZ24gNAorTChDb3B5RnJvbTFUbzE2Qnl0ZXNDYXNlMk9yQ2FzZTMpOgorCXRlc3QJJWVheCwgJWVheAorCWpueglMKENvcHlGcm9tMVRvMTZCeXRlc0Nhc2UyKQorCisJLnAyYWxpZ24gNAorTChDb3B5RnJvbTFUbzE2Qnl0ZXNDYXNlMyk6CisJYWRkCSQxNiwgJWVieAorCWFkZAklZXNpLCAlZWR4CisJYWRkCSVlc2ksICVlY3gKKworCVBPUAkoJWVzaSkKKworCWNtcAkkOCwgJWVieAorCWphCUwoRXhpdEhpZ2g4Q2FzZTMpCisKK0woQ29weUZyb20xVG8xNkJ5dGVzTGVzczhDYXNlMyk6CisJY21wCSQ0LCAlZWJ4CisJamEJTChFeGl0SGlnaDRDYXNlMykKKworCWNtcAkkMSwgJWVieAorCWplCUwoRXhpdDEpCisJY21wCSQyLCAlZWJ4CisJamUJTChFeGl0MikKKwljbXAJJDMsICVlYngKKwlqZQlMKEV4aXQzKQorCW1vdmwJKCVlY3gpLCAlZWF4CisJbW92bAklZWF4LCAoJWVkeCkKKwlTQVZFX1JFU1VMVAkoNCkKKwlSRVRVUk4xCisKKwkucDJhbGlnbiA0CitMKEV4aXRIaWdoNENhc2UzKToKKwljbXAJJDUsICVlYngKKwlqZQlMKEV4aXQ1KQorCWNtcAkkNiwgJWVieAorCWplCUwoRXhpdDYpCisJY21wCSQ3LCAlZWJ4CisJamUJTChFeGl0NykKKwltb3ZscGQJKCVlY3gpLCAleG1tMAorCW1vdmxwZAkleG1tMCwgKCVlZHgpCisJU0FWRV9SRVNVTFQJKDgpCisJUkVUVVJOMQorCisJLnAyYWxpZ24gNAorTChFeGl0SGlnaDhDYXNlMyk6CisJY21wCSQxMiwgJWVieAorCWphCUwoRXhpdEhpZ2gxMkNhc2UzKQorCisJY21wCSQ5LCAlZWJ4CisJamUJTChFeGl0OSkKKwljbXAJJDEwLCAlZWJ4CisJamUJTChFeGl0MTApCisJY21wCSQxMSwgJWVieAorCWplCUwoRXhpdDExKQorCW1vdmxwZAkoJWVjeCksICV4bW0wCisJbW92bAk4KCVlY3gpLCAlZWF4CisJbW92bHBkCSV4bW0wLCAoJWVkeCkKKwltb3ZsCSVlYXgsIDgoJWVkeCkKKwlTQVZFX1JFU1VMVAkoMTIpCisJUkVUVVJOMQorCisJLnAyYWxpZ24gNAorTChFeGl0SGlnaDEyQ2FzZTMpOgorCWNtcAkkMTMsICVlYngKKwlqZQlMKEV4aXQxMykKKwljbXAJJDE0LCAlZWJ4CisJamUJTChFeGl0MTQpCisJY21wCSQxNSwgJWVieAorCWplCUwoRXhpdDE1KQorCW1vdmxwZAkoJWVjeCksICV4bW0wCisJbW92bHBkCTgoJWVjeCksICV4bW0xCisJbW92bHBkCSV4bW0wLCAoJWVkeCkKKwltb3ZscGQJJXhtbTEsIDgoJWVkeCkKKwlTQVZFX1JFU1VMVAkoMTYpCisJUkVUVVJOMQorCisjIGVuZGlmCisKKwkucDJhbGlnbiA0CitMKEV4aXQxKToKKwltb3ZiCSglZWN4KSwgJWFsCisJbW92YgklYWwsICglZWR4KQorCVNBVkVfUkVTVUxUCSgwKQorIyBpZmRlZiBVU0VfQVNfU1RSTkNQWQorCXN1YgkkMSwgJWVieAorCWxlYQkxKCVlZHgpLCAlZWN4CisJam56CUwoU3RybmNweUZpbGxUYWlsV2l0aFplcm8xKQorIyAgaWZkZWYgVVNFX0FTX1NUUENQWQorCWNtcGIJJDEsICglZWF4KQorCXNiYgkkLTEsICVlYXgKKyMgIGVuZGlmCisjIGVuZGlmCisJUkVUVVJOMQorCisJLnAyYWxpZ24gNAorTChFeGl0Mik6CisJbW92dwkoJWVjeCksICVheAorCW1vdncJJWF4LCAoJWVkeCkKKwlTQVZFX1JFU1VMVAkoMSkKKyMgaWZkZWYgVVNFX0FTX1NUUk5DUFkKKwlzdWIJJDIsICVlYngKKwlsZWEJMiglZWR4KSwgJWVjeAorCWpueglMKFN0cm5jcHlGaWxsVGFpbFdpdGhaZXJvMSkKKyMgIGlmZGVmIFVTRV9BU19TVFBDUFkKKwljbXBiCSQxLCAoJWVheCkKKwlzYmIJJC0xLCAlZWF4CisjICBlbmRpZgorIyBlbmRpZgorCVJFVFVSTjEKKworCS5wMmFsaWduIDQKK0woRXhpdDMpOgorCW1vdncJKCVlY3gpLCAlYXgKKwltb3Z3CSVheCwgKCVlZHgpCisJbW92YgkyKCVlY3gpLCAlYWwKKwltb3ZiCSVhbCwgMiglZWR4KQorCVNBVkVfUkVTVUxUCSgyKQorIyBpZmRlZiBVU0VfQVNfU1RSTkNQWQorCXN1YgkkMywgJWVieAorCWxlYQkzKCVlZHgpLCAlZWN4CisJam56CUwoU3RybmNweUZpbGxUYWlsV2l0aFplcm8xKQorIyAgaWZkZWYgVVNFX0FTX1NUUENQWQorCWNtcGIJJDEsICglZWF4KQorCXNiYgkkLTEsICVlYXgKKyMgIGVuZGlmCisjIGVuZGlmCisJUkVUVVJOMQorCisJLnAyYWxpZ24gNAorTChFeGl0NSk6CisJbW92bAkoJWVjeCksICVlYXgKKwltb3ZsCSVlYXgsICglZWR4KQorCW1vdmIJNCglZWN4KSwgJWFsCisJbW92YgklYWwsIDQoJWVkeCkKKwlTQVZFX1JFU1VMVAkoNCkKKyMgaWZkZWYgVVNFX0FTX1NUUk5DUFkKKwlzdWIJJDUsICVlYngKKwlsZWEJNSglZWR4KSwgJWVjeAorCWpueglMKFN0cm5jcHlGaWxsVGFpbFdpdGhaZXJvMSkKKyMgIGlmZGVmIFVTRV9BU19TVFBDUFkKKwljbXBiCSQxLCAoJWVheCkKKwlzYmIJJC0xLCAlZWF4CisjICBlbmRpZgorIyBlbmRpZgorCVJFVFVSTjEKKworCS5wMmFsaWduIDQKK0woRXhpdDYpOgorCW1vdmwJKCVlY3gpLCAlZWF4CisJbW92bAklZWF4LCAoJWVkeCkKKwltb3Z3CTQoJWVjeCksICVheAorCW1vdncJJWF4LCA0KCVlZHgpCisJU0FWRV9SRVNVTFQJKDUpCisjIGlmZGVmIFVTRV9BU19TVFJOQ1BZCisJc3ViCSQ2LCAlZWJ4CisJbGVhCTYoJWVkeCksICVlY3gKKwlqbnoJTChTdHJuY3B5RmlsbFRhaWxXaXRoWmVybzEpCisjICBpZmRlZiBVU0VfQVNfU1RQQ1BZCisJY21wYgkkMSwgKCVlYXgpCisJc2JiCSQtMSwgJWVheAorIyAgZW5kaWYKKyMgZW5kaWYKKwlSRVRVUk4xCisKKwkucDJhbGlnbiA0CitMKEV4aXQ3KToKKwltb3ZsCSglZWN4KSwgJWVheAorCW1vdmwJJWVheCwgKCVlZHgpCisJbW92bAkzKCVlY3gpLCAlZWF4CisJbW92bAklZWF4LCAzKCVlZHgpCisJU0FWRV9SRVNVTFQJKDYpCisjIGlmZGVmIFVTRV9BU19TVFJOQ1BZCisJc3ViCSQ3LCAlZWJ4CisJbGVhCTcoJWVkeCksICVlY3gKKwlqbnoJTChTdHJuY3B5RmlsbFRhaWxXaXRoWmVybzEpCisjICBpZmRlZiBVU0VfQVNfU1RQQ1BZCisJY21wYgkkMSwgKCVlYXgpCisJc2JiCSQtMSwgJWVheAorIyAgZW5kaWYKKyMgZW5kaWYKKwlSRVRVUk4xCisKKwkucDJhbGlnbiA0CitMKEV4aXQ5KToKKwltb3ZscGQJKCVlY3gpLCAleG1tMAorCW1vdmIJOCglZWN4KSwgJWFsCisJbW92bHBkCSV4bW0wLCAoJWVkeCkKKwltb3ZiCSVhbCwgOCglZWR4KQorCVNBVkVfUkVTVUxUCSg4KQorIyBpZmRlZiBVU0VfQVNfU1RSTkNQWQorCXN1YgkkOSwgJWVieAorCWxlYQk5KCVlZHgpLCAlZWN4CisJam56CUwoU3RybmNweUZpbGxUYWlsV2l0aFplcm8xKQorIyAgaWZkZWYgVVNFX0FTX1NUUENQWQorCWNtcGIJJDEsICglZWF4KQorCXNiYgkkLTEsICVlYXgKKyMgIGVuZGlmCisjIGVuZGlmCisJUkVUVVJOMQorCisJLnAyYWxpZ24gNAorTChFeGl0MTApOgorCW1vdmxwZAkoJWVjeCksICV4bW0wCisJbW92dwk4KCVlY3gpLCAlYXgKKwltb3ZscGQJJXhtbTAsICglZWR4KQorCW1vdncJJWF4LCA4KCVlZHgpCisJU0FWRV9SRVNVTFQJKDkpCisjIGlmZGVmIFVTRV9BU19TVFJOQ1BZCisJc3ViCSQxMCwgJWVieAorCWxlYQkxMCglZWR4KSwgJWVjeAorCWpueglMKFN0cm5jcHlGaWxsVGFpbFdpdGhaZXJvMSkKKyMgIGlmZGVmIFVTRV9BU19TVFBDUFkKKwljbXBiCSQxLCAoJWVheCkKKwlzYmIJJC0xLCAlZWF4CisjICBlbmRpZgorIyBlbmRpZgorCVJFVFVSTjEKKworCS5wMmFsaWduIDQKK0woRXhpdDExKToKKwltb3ZscGQJKCVlY3gpLCAleG1tMAorCW1vdmwJNyglZWN4KSwgJWVheAorCW1vdmxwZAkleG1tMCwgKCVlZHgpCisJbW92bAklZWF4LCA3KCVlZHgpCisJU0FWRV9SRVNVTFQJKDEwKQorIyBpZmRlZiBVU0VfQVNfU1RSTkNQWQorCXN1YgkkMTEsICVlYngKKwlsZWEJMTEoJWVkeCksICVlY3gKKwlqbnoJTChTdHJuY3B5RmlsbFRhaWxXaXRoWmVybzEpCisjICBpZmRlZiBVU0VfQVNfU1RQQ1BZCisJY21wYgkkMSwgKCVlYXgpCisJc2JiCSQtMSwgJWVheAorIyAgZW5kaWYKKyMgZW5kaWYKKwlSRVRVUk4xCisKKwkucDJhbGlnbiA0CitMKEV4aXQxMyk6CisJbW92bHBkCSglZWN4KSwgJXhtbTAKKwltb3ZscGQJNSglZWN4KSwgJXhtbTEKKwltb3ZscGQJJXhtbTAsICglZWR4KQorCW1vdmxwZAkleG1tMSwgNSglZWR4KQorCVNBVkVfUkVTVUxUCSgxMikKKyMgaWZkZWYgVVNFX0FTX1NUUk5DUFkKKwlzdWIJJDEzLCAlZWJ4CisJbGVhCTEzKCVlZHgpLCAlZWN4CisJam56CUwoU3RybmNweUZpbGxUYWlsV2l0aFplcm8xKQorIyAgaWZkZWYgVVNFX0FTX1NUUENQWQorCWNtcGIJJDEsICglZWF4KQorCXNiYgkkLTEsICVlYXgKKyMgIGVuZGlmCisjIGVuZGlmCisJUkVUVVJOMQorCisJLnAyYWxpZ24gNAorTChFeGl0MTQpOgorCW1vdmxwZAkoJWVjeCksICV4bW0wCisJbW92bHBkCTYoJWVjeCksICV4bW0xCisJbW92bHBkCSV4bW0wLCAoJWVkeCkKKwltb3ZscGQJJXhtbTEsIDYoJWVkeCkKKwlTQVZFX1JFU1VMVAkoMTMpCisjIGlmZGVmIFVTRV9BU19TVFJOQ1BZCisJc3ViCSQxNCwgJWVieAorCWxlYQkxNCglZWR4KSwgJWVjeAorCWpueglMKFN0cm5jcHlGaWxsVGFpbFdpdGhaZXJvMSkKKyMgIGlmZGVmIFVTRV9BU19TVFBDUFkKKwljbXBiCSQxLCAoJWVheCkKKwlzYmIJJC0xLCAlZWF4CisjICBlbmRpZgorIyBlbmRpZgorCVJFVFVSTjEKKworCS5wMmFsaWduIDQKK0woRXhpdDE1KToKKwltb3ZscGQJKCVlY3gpLCAleG1tMAorCW1vdmxwZAk3KCVlY3gpLCAleG1tMQorCW1vdmxwZAkleG1tMCwgKCVlZHgpCisJbW92bHBkCSV4bW0xLCA3KCVlZHgpCisJU0FWRV9SRVNVTFQJKDE0KQorIyBpZmRlZiBVU0VfQVNfU1RSTkNQWQorCXN1YgkkMTUsICVlYngKKwlsZWEJMTUoJWVkeCksICVlY3gKKwlqbnoJTChTdHJuY3B5RmlsbFRhaWxXaXRoWmVybzEpCisjICBpZmRlZiBVU0VfQVNfU1RQQ1BZCisJY21wYgkkMSwgKCVlYXgpCisJc2JiCSQtMSwgJWVheAorIyAgZW5kaWYKKyMgZW5kaWYKKwlSRVRVUk4xCisKK0NGSV9QT1AJKCVlZGkpCisKKyMgaWZkZWYgVVNFX0FTX1NUUk5DUFkKKwkucDJhbGlnbiA0CitMKEZpbGwwKToKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woRmlsbDEpOgorCW1vdmIJJWRsLCAoJWVjeCkKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woRmlsbDIpOgorCW1vdncJJWR4LCAoJWVjeCkKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woRmlsbDMpOgorCW1vdncJJWR4LCAoJWVjeCkKKwltb3ZiCSVkbCwgMiglZWN4KQorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChGaWxsNCk6CisJbW92bAklZWR4LCAoJWVjeCkKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woRmlsbDUpOgorCW1vdmwJJWVkeCwgKCVlY3gpCisJbW92YgklZGwsIDQoJWVjeCkKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woRmlsbDYpOgorCW1vdmwJJWVkeCwgKCVlY3gpCisJbW92dwklZHgsIDQoJWVjeCkKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woRmlsbDcpOgorCW1vdmwJJWVkeCwgKCVlY3gpCisJbW92bAklZWR4LCAzKCVlY3gpCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKEZpbGw4KToKKwltb3ZscGQJJXhtbTAsICglZWN4KQorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChGaWxsOSk6CisJbW92bHBkCSV4bW0wLCAoJWVjeCkKKwltb3ZiCSVkbCwgOCglZWN4KQorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChGaWxsMTApOgorCW1vdmxwZAkleG1tMCwgKCVlY3gpCisJbW92dwklZHgsIDgoJWVjeCkKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woRmlsbDExKToKKwltb3ZscGQJJXhtbTAsICglZWN4KQorCW1vdmwJJWVkeCwgNyglZWN4KQorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChGaWxsMTIpOgorCW1vdmxwZAkleG1tMCwgKCVlY3gpCisJbW92bAklZWR4LCA4KCVlY3gpCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKEZpbGwxMyk6CisJbW92bHBkCSV4bW0wLCAoJWVjeCkKKwltb3ZscGQJJXhtbTAsIDUoJWVjeCkKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woRmlsbDE0KToKKwltb3ZscGQJJXhtbTAsICglZWN4KQorCW1vdmxwZAkleG1tMCwgNiglZWN4KQorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChGaWxsMTUpOgorCW1vdmxwZAkleG1tMCwgKCVlY3gpCisJbW92bHBkCSV4bW0wLCA3KCVlY3gpCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKEZpbGwxNik6CisJbW92bHBkCSV4bW0wLCAoJWVjeCkKKwltb3ZscGQJJXhtbTAsIDgoJWVjeCkKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woU3RybmNweUZpbGxFeGl0MSk6CisJbGVhCTE2KCVlYngpLCAlZWJ4CitMKEZpbGxGcm9tMVRvMTZCeXRlcyk6CisJdGVzdAklZWJ4LCAlZWJ4CisJanoJTChGaWxsMCkKKwljbXAJJDE2LCAlZWJ4CisJamUJTChGaWxsMTYpCisJY21wCSQ4LCAlZWJ4CisJamUJTChGaWxsOCkKKwlqZwlMKEZpbGxNb3JlOCkKKwljbXAJJDQsICVlYngKKwlqZQlMKEZpbGw0KQorCWpnCUwoRmlsbE1vcmU0KQorCWNtcAkkMiwgJWVieAorCWpsCUwoRmlsbDEpCisJamUJTChGaWxsMikKKwlqZwlMKEZpbGwzKQorTChGaWxsTW9yZTgpOgkvKiBidXQgbGVzcyB0aGFuIDE2ICovCisJY21wCSQxMiwgJWVieAorCWplCUwoRmlsbDEyKQorCWpsCUwoRmlsbExlc3MxMikKKwljbXAJJDE0LCAlZWJ4CisJamwJTChGaWxsMTMpCisJamUJTChGaWxsMTQpCisJamcJTChGaWxsMTUpCitMKEZpbGxNb3JlNCk6CS8qIGJ1dCBsZXNzIHRoYW4gOCAqLworCWNtcAkkNiwgJWVieAorCWpsCUwoRmlsbDUpCisJamUJTChGaWxsNikKKwlqZwlMKEZpbGw3KQorTChGaWxsTGVzczEyKToJLyogYnV0IG1vcmUgdGhhbiA4ICovCisJY21wCSQxMCwgJWVieAorCWpsCUwoRmlsbDkpCisJamUJTChGaWxsMTApCisJam1wCUwoRmlsbDExKQorCisJQ0ZJX1BVU0goJWVkaSkKKworCS5wMmFsaWduIDQKK0woU3RybmNweUZpbGxUYWlsV2l0aFplcm8xKToKKwlQT1AJKCVlZGkpCitMKFN0cm5jcHlGaWxsVGFpbFdpdGhaZXJvKToKKwlweG9yCSV4bW0wLCAleG1tMAorCXhvcgklZWR4LCAlZWR4CisJc3ViCSQxNiwgJWVieAorCWpiZQlMKFN0cm5jcHlGaWxsRXhpdDEpCisKKwltb3ZscGQJJXhtbTAsICglZWN4KQorCW1vdmxwZAkleG1tMCwgOCglZWN4KQorCisJbGVhCTE2KCVlY3gpLCAlZWN4CisKKwltb3YJJWVjeCwgJWVkeAorCWFuZAkkMHhmLCAlZWR4CisJc3ViCSVlZHgsICVlY3gKKwlhZGQJJWVkeCwgJWVieAorCXhvcgklZWR4LCAlZWR4CisJc3ViCSQ2NCwgJWVieAorCWpiCUwoU3RybmNweUZpbGxMZXNzNjQpCisKK0woU3RybmNweUZpbGxMb29wTW92ZHFhKToKKwltb3ZkcWEJJXhtbTAsICglZWN4KQorCW1vdmRxYQkleG1tMCwgMTYoJWVjeCkKKwltb3ZkcWEJJXhtbTAsIDMyKCVlY3gpCisJbW92ZHFhCSV4bW0wLCA0OCglZWN4KQorCWxlYQk2NCglZWN4KSwgJWVjeAorCXN1YgkkNjQsICVlYngKKwlqYWUJTChTdHJuY3B5RmlsbExvb3BNb3ZkcWEpCisKK0woU3RybmNweUZpbGxMZXNzNjQpOgorCWFkZAkkMzIsICVlYngKKwlqbAlMKFN0cm5jcHlGaWxsTGVzczMyKQorCW1vdmRxYQkleG1tMCwgKCVlY3gpCisJbW92ZHFhCSV4bW0wLCAxNiglZWN4KQorCWxlYQkzMiglZWN4KSwgJWVjeAorCXN1YgkkMTYsICVlYngKKwlqbAlMKFN0cm5jcHlGaWxsRXhpdDEpCisJbW92ZHFhCSV4bW0wLCAoJWVjeCkKKwlsZWEJMTYoJWVjeCksICVlY3gKKwlqbXAJTChGaWxsRnJvbTFUbzE2Qnl0ZXMpCisKK0woU3RybmNweUZpbGxMZXNzMzIpOgorCWFkZAkkMTYsICVlYngKKwlqbAlMKFN0cm5jcHlGaWxsRXhpdDEpCisJbW92ZHFhCSV4bW0wLCAoJWVjeCkKKwlsZWEJMTYoJWVjeCksICVlY3gKKwlqbXAJTChGaWxsRnJvbTFUbzE2Qnl0ZXMpCisjIGVuZGlmCisKKwkucDJhbGlnbiA0CitMKEV4aXRUYWlsMSk6CisJbW92YgkoJWVjeCksICVhbAorCW1vdmIJJWFsLCAoJWVkeCkKKwlTQVZFX1JFU1VMVF9UQUlMICgwKQorIyBpZmRlZiBVU0VfQVNfU1RSTkNQWQorCXN1YgkkMSwgJWVieAorCWxlYQkxKCVlZHgpLCAlZWN4CisJam56CUwoU3RybmNweUZpbGxUYWlsV2l0aFplcm8pCisjICBpZmRlZiBVU0VfQVNfU1RQQ1BZCisJY21wYgkkMSwgKCVlYXgpCisJc2JiCSQtMSwgJWVheAorIyAgZW5kaWYKKyMgZW5kaWYKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woRXhpdFRhaWwyKToKKwltb3Z3CSglZWN4KSwgJWF4CisJbW92dwklYXgsICglZWR4KQorCVNBVkVfUkVTVUxUX1RBSUwgKDEpCisjIGlmZGVmIFVTRV9BU19TVFJOQ1BZCisJc3ViCSQyLCAlZWJ4CisJbGVhCTIoJWVkeCksICVlY3gKKwlqbnoJTChTdHJuY3B5RmlsbFRhaWxXaXRoWmVybykKKyMgIGlmZGVmIFVTRV9BU19TVFBDUFkKKwljbXBiCSQxLCAoJWVheCkKKwlzYmIJJC0xLCAlZWF4CisjICBlbmRpZgorIyBlbmRpZgorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChFeGl0VGFpbDMpOgorCW1vdncJKCVlY3gpLCAlYXgKKwltb3Z3CSVheCwgKCVlZHgpCisJbW92YgkyKCVlY3gpLCAlYWwKKwltb3ZiCSVhbCwgMiglZWR4KQorCVNBVkVfUkVTVUxUX1RBSUwgKDIpCisjIGlmZGVmIFVTRV9BU19TVFJOQ1BZCisJc3ViCSQzLCAlZWJ4CisJbGVhCTMoJWVkeCksICVlY3gKKwlqbnoJTChTdHJuY3B5RmlsbFRhaWxXaXRoWmVybykKKyMgIGlmZGVmIFVTRV9BU19TVFBDUFkKKwljbXBiCSQxLCAoJWVheCkKKwlzYmIJJC0xLCAlZWF4CisjICBlbmRpZgorIyBlbmRpZgorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChFeGl0VGFpbDQpOgorCW1vdmwJKCVlY3gpLCAlZWF4CisJbW92bAklZWF4LCAoJWVkeCkKKwlTQVZFX1JFU1VMVF9UQUlMICgzKQorIyBpZmRlZiBVU0VfQVNfU1RSTkNQWQorCXN1YgkkNCwgJWVieAorCWxlYQk0KCVlZHgpLCAlZWN4CisJam56CUwoU3RybmNweUZpbGxUYWlsV2l0aFplcm8pCisjICBpZmRlZiBVU0VfQVNfU1RQQ1BZCisJY21wYgkkMSwgKCVlYXgpCisJc2JiCSQtMSwgJWVheAorIyAgZW5kaWYKKyMgZW5kaWYKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woRXhpdFRhaWw1KToKKwltb3ZsCSglZWN4KSwgJWVheAorCW1vdmwJJWVheCwgKCVlZHgpCisJbW92Ygk0KCVlY3gpLCAlYWwKKwltb3ZiCSVhbCwgNCglZWR4KQorCVNBVkVfUkVTVUxUX1RBSUwgKDQpCisjIGlmZGVmIFVTRV9BU19TVFJOQ1BZCisJc3ViCSQ1LCAlZWJ4CisJbGVhCTUoJWVkeCksICVlY3gKKwlqbnoJTChTdHJuY3B5RmlsbFRhaWxXaXRoWmVybykKKyMgIGlmZGVmIFVTRV9BU19TVFBDUFkKKwljbXBiCSQxLCAoJWVheCkKKwlzYmIJJC0xLCAlZWF4CisjICBlbmRpZgorIyBlbmRpZgorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChFeGl0VGFpbDYpOgorCW1vdmwJKCVlY3gpLCAlZWF4CisJbW92bAklZWF4LCAoJWVkeCkKKwltb3Z3CTQoJWVjeCksICVheAorCW1vdncJJWF4LCA0KCVlZHgpCisJU0FWRV9SRVNVTFRfVEFJTCAoNSkKKyMgaWZkZWYgVVNFX0FTX1NUUk5DUFkKKwlzdWIJJDYsICVlYngKKwlsZWEJNiglZWR4KSwgJWVjeAorCWpueglMKFN0cm5jcHlGaWxsVGFpbFdpdGhaZXJvKQorIyAgaWZkZWYgVVNFX0FTX1NUUENQWQorCWNtcGIJJDEsICglZWF4KQorCXNiYgkkLTEsICVlYXgKKyMgIGVuZGlmCisjIGVuZGlmCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKEV4aXRUYWlsNyk6CisJbW92bAkoJWVjeCksICVlYXgKKwltb3ZsCSVlYXgsICglZWR4KQorCW1vdmwJMyglZWN4KSwgJWVheAorCW1vdmwJJWVheCwgMyglZWR4KQorCVNBVkVfUkVTVUxUX1RBSUwgKDYpCisjIGlmZGVmIFVTRV9BU19TVFJOQ1BZCisJc3ViCSQ3LCAlZWJ4CisJbGVhCTcoJWVkeCksICVlY3gKKwlqbnoJTChTdHJuY3B5RmlsbFRhaWxXaXRoWmVybykKKyMgIGlmZGVmIFVTRV9BU19TVFBDUFkKKwljbXBiCSQxLCAoJWVheCkKKwlzYmIJJC0xLCAlZWF4CisjICBlbmRpZgorIyBlbmRpZgorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChFeGl0VGFpbDgpOgorCW1vdmxwZAkoJWVjeCksICV4bW0wCisJbW92bHBkCSV4bW0wLCAoJWVkeCkKKwlTQVZFX1JFU1VMVF9UQUlMICg3KQorIyBpZmRlZiBVU0VfQVNfU1RSTkNQWQorCXN1YgkkOCwgJWVieAorCWxlYQk4KCVlZHgpLCAlZWN4CisJam56CUwoU3RybmNweUZpbGxUYWlsV2l0aFplcm8pCisjIGVuZGlmCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKEV4aXRUYWlsOSk6CisJbW92bHBkCSglZWN4KSwgJXhtbTAKKwltb3ZiCTgoJWVjeCksICVhbAorCW1vdmxwZAkleG1tMCwgKCVlZHgpCisJbW92YgklYWwsIDgoJWVkeCkKKwlTQVZFX1JFU1VMVF9UQUlMICg4KQorIyBpZmRlZiBVU0VfQVNfU1RSTkNQWQorCXN1YgkkOSwgJWVieAorCWxlYQk5KCVlZHgpLCAlZWN4CisJam56CUwoU3RybmNweUZpbGxUYWlsV2l0aFplcm8pCisjICBpZmRlZiBVU0VfQVNfU1RQQ1BZCisJY21wYgkkMSwgKCVlYXgpCisJc2JiCSQtMSwgJWVheAorIyAgZW5kaWYKKyMgZW5kaWYKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woRXhpdFRhaWwxMCk6CisJbW92bHBkCSglZWN4KSwgJXhtbTAKKwltb3Z3CTgoJWVjeCksICVheAorCW1vdmxwZAkleG1tMCwgKCVlZHgpCisJbW92dwklYXgsIDgoJWVkeCkKKwlTQVZFX1JFU1VMVF9UQUlMICg5KQorIyBpZmRlZiBVU0VfQVNfU1RSTkNQWQorCXN1YgkkMTAsICVlYngKKwlsZWEJMTAoJWVkeCksICVlY3gKKwlqbnoJTChTdHJuY3B5RmlsbFRhaWxXaXRoWmVybykKKyMgIGlmZGVmIFVTRV9BU19TVFBDUFkKKwljbXBiCSQxLCAoJWVheCkKKwlzYmIJJC0xLCAlZWF4CisjICBlbmRpZgorIyBlbmRpZgorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChFeGl0VGFpbDExKToKKwltb3ZscGQJKCVlY3gpLCAleG1tMAorCW1vdmwJNyglZWN4KSwgJWVheAorCW1vdmxwZAkleG1tMCwgKCVlZHgpCisJbW92bAklZWF4LCA3KCVlZHgpCisJU0FWRV9SRVNVTFRfVEFJTCAoMTApCisjIGlmZGVmIFVTRV9BU19TVFJOQ1BZCisJc3ViCSQxMSwgJWVieAorCWxlYQkxMSglZWR4KSwgJWVjeAorCWpueglMKFN0cm5jcHlGaWxsVGFpbFdpdGhaZXJvKQorIyAgaWZkZWYgVVNFX0FTX1NUUENQWQorCWNtcGIJJDEsICglZWF4KQorCXNiYgkkLTEsICVlYXgKKyMgIGVuZGlmCisjIGVuZGlmCisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKEV4aXRUYWlsMTIpOgorCW1vdmxwZAkoJWVjeCksICV4bW0wCisJbW92bAk4KCVlY3gpLCAlZWF4CisJbW92bHBkCSV4bW0wLCAoJWVkeCkKKwltb3ZsCSVlYXgsIDgoJWVkeCkKKwlTQVZFX1JFU1VMVF9UQUlMICgxMSkKKyMgaWZkZWYgVVNFX0FTX1NUUk5DUFkKKwlzdWIJJDEyLCAlZWJ4CisJbGVhCTEyKCVlZHgpLCAlZWN4CisJam56CUwoU3RybmNweUZpbGxUYWlsV2l0aFplcm8pCisjICBpZmRlZiBVU0VfQVNfU1RQQ1BZCisJY21wYgkkMSwgKCVlYXgpCisJc2JiCSQtMSwgJWVheAorIyAgZW5kaWYKKyMgZW5kaWYKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woRXhpdFRhaWwxMyk6CisJbW92bHBkCSglZWN4KSwgJXhtbTAKKwltb3ZscGQJNSglZWN4KSwgJXhtbTEKKwltb3ZscGQJJXhtbTAsICglZWR4KQorCW1vdmxwZAkleG1tMSwgNSglZWR4KQorCVNBVkVfUkVTVUxUX1RBSUwgKDEyKQorIyBpZmRlZiBVU0VfQVNfU1RSTkNQWQorCXN1YgkkMTMsICVlYngKKwlsZWEJMTMoJWVkeCksICVlY3gKKwlqbnoJTChTdHJuY3B5RmlsbFRhaWxXaXRoWmVybykKKyMgIGlmZGVmIFVTRV9BU19TVFBDUFkKKwljbXBiCSQxLCAoJWVheCkKKwlzYmIJJC0xLCAlZWF4CisjICBlbmRpZgorIyBlbmRpZgorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChFeGl0VGFpbDE0KToKKwltb3ZscGQJKCVlY3gpLCAleG1tMAorCW1vdmxwZAk2KCVlY3gpLCAleG1tMQorCW1vdmxwZAkleG1tMCwgKCVlZHgpCisJbW92bHBkCSV4bW0xLCA2KCVlZHgpCisJU0FWRV9SRVNVTFRfVEFJTCAoMTMpCisjIGlmZGVmIFVTRV9BU19TVFJOQ1BZCisJc3ViCSQxNCwgJWVieAorCWxlYQkxNCglZWR4KSwgJWVjeAorCWpueglMKFN0cm5jcHlGaWxsVGFpbFdpdGhaZXJvKQorIyBpZmRlZiBVU0VfQVNfU1RQQ1BZCisJY21wYgkkMSwgKCVlYXgpCisJc2JiCSQtMSwgJWVheAorIyAgZW5kaWYKKyMgZW5kaWYKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woRXhpdFRhaWwxNSk6CisJbW92bHBkCSglZWN4KSwgJXhtbTAKKwltb3ZscGQJNyglZWN4KSwgJXhtbTEKKwltb3ZscGQJJXhtbTAsICglZWR4KQorCW1vdmxwZAkleG1tMSwgNyglZWR4KQorCVNBVkVfUkVTVUxUX1RBSUwgKDE0KQorIyBpZmRlZiBVU0VfQVNfU1RSTkNQWQorCXN1YgkkMTUsICVlYngKKwlsZWEJMTUoJWVkeCksICVlY3gKKwlqbnoJTChTdHJuY3B5RmlsbFRhaWxXaXRoWmVybykKKyMgZW5kaWYKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woRXhpdFRhaWwxNik6CisJbW92ZHF1CSglZWN4KSwgJXhtbTAKKwltb3ZkcXUJJXhtbTAsICglZWR4KQorCVNBVkVfUkVTVUxUX1RBSUwgKDE1KQorIyBpZmRlZiBVU0VfQVNfU1RSTkNQWQorCXN1YgkkMTYsICVlYngKKwlsZWEJMTYoJWVkeCksICVlY3gKKwlqbnoJTChTdHJuY3B5RmlsbFRhaWxXaXRoWmVybykKKyMgIGlmZGVmIFVTRV9BU19TVFBDUFkKKwljbXBiCSQxLCAoJWVheCkKKwlzYmIJJC0xLCAlZWF4CisjICBlbmRpZgorIyBlbmRpZgorCVJFVFVSTgorI2VuZGlmCisKKyNpZmRlZiBVU0VfQVNfU1RSTkNQWQorIyBpZm5kZWYgVVNFX0FTX1NUUkNBVAorCUNGSV9QVVNIICglZXNpKQorCUNGSV9QVVNIICglZWRpKQorIyBlbmRpZgorCS5wMmFsaWduIDQKK0woU3RybmNweUxlYXZlQ2FzZTJPckNhc2UzKToKKwl0ZXN0CSVlYXgsICVlYXgKKwlqbnoJTChBbGlnbmVkNjRMZWF2ZUNhc2UyKQorCitMKEFsaWduZWQ2NExlYXZlQ2FzZTMpOgorCWFkZAkkNDgsICVlYngKKwlqbGUJTChDb3B5RnJvbTFUbzE2Qnl0ZXNDYXNlMykKKwltb3ZhcHMJJXhtbTQsIC02NCglZWR4KQorCWxlYQkxNiglZXNpKSwgJWVzaQorCXN1YgkkMTYsICVlYngKKwlqYmUJTChDb3B5RnJvbTFUbzE2Qnl0ZXNDYXNlMykKKwltb3ZhcHMJJXhtbTUsIC00OCglZWR4KQorCWxlYQkxNiglZXNpKSwgJWVzaQorCXN1YgkkMTYsICVlYngKKwlqYmUJTChDb3B5RnJvbTFUbzE2Qnl0ZXNDYXNlMykKKwltb3ZhcHMJJXhtbTYsIC0zMiglZWR4KQorCWxlYQkxNiglZXNpKSwgJWVzaQorCWxlYQktMTYoJWVieCksICVlYngKKwlqbXAJTChDb3B5RnJvbTFUbzE2Qnl0ZXNDYXNlMykKKworTChBbGlnbmVkNjRMZWF2ZUNhc2UyKToKKwlwY21wZXFiCSV4bW00LCAleG1tMAorCXBtb3Ztc2tiICV4bW0wLCAlZWF4CisJYWRkCSQ0OCwgJWVieAorCWpsZQlMKENvcHlGcm9tMVRvMTZCeXRlc0Nhc2UyT3JDYXNlMykKKwl0ZXN0CSVlYXgsICVlYXgKKwlqbnoJTChDb3B5RnJvbTFUbzE2Qnl0ZXMpCisKKwlwY21wZXFiCSV4bW01LCAleG1tMAorCXBtb3Ztc2tiICV4bW0wLCAlZWF4CisJbW92YXBzCSV4bW00LCAtNjQoJWVkeCkKKwlsZWEJMTYoJWVzaSksICVlc2kKKwlzdWIJJDE2LCAlZWJ4CisJamJlCUwoQ29weUZyb20xVG8xNkJ5dGVzQ2FzZTJPckNhc2UzKQorCXRlc3QJJWVheCwgJWVheAorCWpueglMKENvcHlGcm9tMVRvMTZCeXRlcykKKworCXBjbXBlcWIJJXhtbTYsICV4bW0wCisJcG1vdm1za2IgJXhtbTAsICVlYXgKKwltb3ZhcHMJJXhtbTUsIC00OCglZWR4KQorCWxlYQkxNiglZXNpKSwgJWVzaQorCXN1YgkkMTYsICVlYngKKwlqYmUJTChDb3B5RnJvbTFUbzE2Qnl0ZXNDYXNlMk9yQ2FzZTMpCisJdGVzdAklZWF4LCAlZWF4CisJam56CUwoQ29weUZyb20xVG8xNkJ5dGVzKQorCisJcGNtcGVxYgkleG1tNywgJXhtbTAKKwlwbW92bXNrYiAleG1tMCwgJWVheAorCW1vdmFwcwkleG1tNiwgLTMyKCVlZHgpCisJbGVhCTE2KCVlc2kpLCAlZXNpCisJbGVhCS0xNiglZWJ4KSwgJWVieAorCWptcAlMKENvcHlGcm9tMVRvMTZCeXRlc0Nhc2UyKQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwkucDJhbGlnbiA0CitMKFN0cm5jcHlFeGl0MUNhc2UyT3JDYXNlMyk6CisJbW92bHBkCSglZWN4KSwgJXhtbTAKKwltb3ZscGQJNyglZWN4KSwgJXhtbTEKKwltb3ZscGQJJXhtbTAsICglZWR4KQorCW1vdmxwZAkleG1tMSwgNyglZWR4KQorCW1vdgkkMTUsICVlc2kKKwl0ZXN0CSVlYXgsICVlYXgKKwlqbnoJTChDb3B5RnJvbTFUbzE2Qnl0ZXNDYXNlMikKKwlqbXAJTChDb3B5RnJvbTFUbzE2Qnl0ZXNDYXNlMykKKworCS5wMmFsaWduIDQKK0woU3RybmNweUV4aXQyQ2FzZTJPckNhc2UzKToKKwltb3ZscGQJKCVlY3gpLCAleG1tMAorCW1vdmxwZAk2KCVlY3gpLCAleG1tMQorCW1vdmxwZAkleG1tMCwgKCVlZHgpCisJbW92bHBkCSV4bW0xLCA2KCVlZHgpCisJbW92CSQxNCwgJWVzaQorCXRlc3QJJWVheCwgJWVheAorCWpueglMKENvcHlGcm9tMVRvMTZCeXRlc0Nhc2UyKQorCWptcAlMKENvcHlGcm9tMVRvMTZCeXRlc0Nhc2UzKQorCisJLnAyYWxpZ24gNAorTChTdHJuY3B5RXhpdDNDYXNlMk9yQ2FzZTMpOgorCW1vdmxwZAkoJWVjeCksICV4bW0wCisJbW92bHBkCTUoJWVjeCksICV4bW0xCisJbW92bHBkCSV4bW0wLCAoJWVkeCkKKwltb3ZscGQJJXhtbTEsIDUoJWVkeCkKKwltb3YJJDEzLCAlZXNpCisJdGVzdAklZWF4LCAlZWF4CisJam56CUwoQ29weUZyb20xVG8xNkJ5dGVzQ2FzZTIpCisJam1wCUwoQ29weUZyb20xVG8xNkJ5dGVzQ2FzZTMpCisKKwkucDJhbGlnbiA0CitMKFN0cm5jcHlFeGl0NENhc2UyT3JDYXNlMyk6CisJbW92bHBkCSglZWN4KSwgJXhtbTAKKwltb3ZsCTgoJWVjeCksICVlc2kKKwltb3ZscGQJJXhtbTAsICglZWR4KQorCW1vdmwJJWVzaSwgOCglZWR4KQorCW1vdgkkMTIsICVlc2kKKwl0ZXN0CSVlYXgsICVlYXgKKwlqbnoJTChDb3B5RnJvbTFUbzE2Qnl0ZXNDYXNlMikKKwlqbXAJTChDb3B5RnJvbTFUbzE2Qnl0ZXNDYXNlMykKKworCS5wMmFsaWduIDQKK0woU3RybmNweUV4aXQ1Q2FzZTJPckNhc2UzKToKKwltb3ZscGQJKCVlY3gpLCAleG1tMAorCW1vdmwJNyglZWN4KSwgJWVzaQorCW1vdmxwZAkleG1tMCwgKCVlZHgpCisJbW92bAklZXNpLCA3KCVlZHgpCisJbW92CSQxMSwgJWVzaQorCXRlc3QJJWVheCwgJWVheAorCWpueglMKENvcHlGcm9tMVRvMTZCeXRlc0Nhc2UyKQorCWptcAlMKENvcHlGcm9tMVRvMTZCeXRlc0Nhc2UzKQorCisJLnAyYWxpZ24gNAorTChTdHJuY3B5RXhpdDZDYXNlMk9yQ2FzZTMpOgorCW1vdmxwZAkoJWVjeCksICV4bW0wCisJbW92bAk2KCVlY3gpLCAlZXNpCisJbW92bHBkCSV4bW0wLCAoJWVkeCkKKwltb3ZsCSVlc2ksIDYoJWVkeCkKKwltb3YJJDEwLCAlZXNpCisJdGVzdAklZWF4LCAlZWF4CisJam56CUwoQ29weUZyb20xVG8xNkJ5dGVzQ2FzZTIpCisJam1wCUwoQ29weUZyb20xVG8xNkJ5dGVzQ2FzZTMpCisKKwkucDJhbGlnbiA0CitMKFN0cm5jcHlFeGl0N0Nhc2UyT3JDYXNlMyk6CisJbW92bHBkCSglZWN4KSwgJXhtbTAKKwltb3ZsCTUoJWVjeCksICVlc2kKKwltb3ZscGQJJXhtbTAsICglZWR4KQorCW1vdmwJJWVzaSwgNSglZWR4KQorCW1vdgkkOSwgJWVzaQorCXRlc3QJJWVheCwgJWVheAorCWpueglMKENvcHlGcm9tMVRvMTZCeXRlc0Nhc2UyKQorCWptcAlMKENvcHlGcm9tMVRvMTZCeXRlc0Nhc2UzKQorCisJLnAyYWxpZ24gNAorTChTdHJuY3B5RXhpdDhDYXNlMk9yQ2FzZTMpOgorCW1vdmxwZAkoJWVjeCksICV4bW0wCisJbW92bHBkCSV4bW0wLCAoJWVkeCkKKwltb3YJJDgsICVlc2kKKwl0ZXN0CSVlYXgsICVlYXgKKwlqbnoJTChDb3B5RnJvbTFUbzE2Qnl0ZXNDYXNlMikKKwlqbXAJTChDb3B5RnJvbTFUbzE2Qnl0ZXNDYXNlMykKKworCS5wMmFsaWduIDQKK0woU3RybmNweUV4aXQ5Q2FzZTJPckNhc2UzKToKKwltb3ZscGQJKCVlY3gpLCAleG1tMAorCW1vdmxwZAkleG1tMCwgKCVlZHgpCisJbW92CSQ3LCAlZXNpCisJdGVzdAklZWF4LCAlZWF4CisJam56CUwoQ29weUZyb20xVG8xNkJ5dGVzQ2FzZTIpCisJam1wCUwoQ29weUZyb20xVG8xNkJ5dGVzQ2FzZTMpCisKKwkucDJhbGlnbiA0CitMKFN0cm5jcHlFeGl0MTBDYXNlMk9yQ2FzZTMpOgorCW1vdmxwZAktMSglZWN4KSwgJXhtbTAKKwltb3ZscGQJJXhtbTAsIC0xKCVlZHgpCisJbW92CSQ2LCAlZXNpCisJdGVzdAklZWF4LCAlZWF4CisJam56CUwoQ29weUZyb20xVG8xNkJ5dGVzQ2FzZTIpCisJam1wCUwoQ29weUZyb20xVG8xNkJ5dGVzQ2FzZTMpCisKKwkucDJhbGlnbiA0CitMKFN0cm5jcHlFeGl0MTFDYXNlMk9yQ2FzZTMpOgorCW1vdmxwZAktMiglZWN4KSwgJXhtbTAKKwltb3ZscGQJJXhtbTAsIC0yKCVlZHgpCisJbW92CSQ1LCAlZXNpCisJdGVzdAklZWF4LCAlZWF4CisJam56CUwoQ29weUZyb20xVG8xNkJ5dGVzQ2FzZTIpCisJam1wCUwoQ29weUZyb20xVG8xNkJ5dGVzQ2FzZTMpCisKKwkucDJhbGlnbiA0CitMKFN0cm5jcHlFeGl0MTJDYXNlMk9yQ2FzZTMpOgorCW1vdmwJKCVlY3gpLCAlZXNpCisJbW92bAklZXNpLCAoJWVkeCkKKwltb3YJJDQsICVlc2kKKwl0ZXN0CSVlYXgsICVlYXgKKwlqbnoJTChDb3B5RnJvbTFUbzE2Qnl0ZXNDYXNlMikKKwlqbXAJTChDb3B5RnJvbTFUbzE2Qnl0ZXNDYXNlMykKKworCS5wMmFsaWduIDQKK0woU3RybmNweUV4aXQxM0Nhc2UyT3JDYXNlMyk6CisJbW92bAktMSglZWN4KSwgJWVzaQorCW1vdmwJJWVzaSwgLTEoJWVkeCkKKwltb3YJJDMsICVlc2kKKwl0ZXN0CSVlYXgsICVlYXgKKwlqbnoJTChDb3B5RnJvbTFUbzE2Qnl0ZXNDYXNlMikKKwlqbXAJTChDb3B5RnJvbTFUbzE2Qnl0ZXNDYXNlMykKKworCS5wMmFsaWduIDQKK0woU3RybmNweUV4aXQxNENhc2UyT3JDYXNlMyk6CisJbW92bAktMiglZWN4KSwgJWVzaQorCW1vdmwJJWVzaSwgLTIoJWVkeCkKKwltb3YJJDIsICVlc2kKKwl0ZXN0CSVlYXgsICVlYXgKKwlqbnoJTChDb3B5RnJvbTFUbzE2Qnl0ZXNDYXNlMikKKwlqbXAJTChDb3B5RnJvbTFUbzE2Qnl0ZXNDYXNlMykKKworCS5wMmFsaWduIDQKK0woU3RybmNweUV4aXQxNUNhc2UyT3JDYXNlMyk6CisJbW92bAktMyglZWN4KSwgJWVzaQorCW1vdmwJJWVzaSwgLTMoJWVkeCkKKwltb3YJJDEsICVlc2kKKwl0ZXN0CSVlYXgsICVlYXgKKwlqbnoJTChDb3B5RnJvbTFUbzE2Qnl0ZXNDYXNlMikKKwlqbXAJTChDb3B5RnJvbTFUbzE2Qnl0ZXNDYXNlMykKKworTChTdHJuY3B5TGVhdmUxKToKKwltb3ZhcHMJJXhtbTIsICV4bW0zCisJYWRkCSQ0OCwgJWVieAorCWpsZQlMKFN0cm5jcHlFeGl0MSkKKwlwYWxpZ25yCSQxLCAleG1tMSwgJXhtbTIKKwltb3ZhcHMJJXhtbTIsICglZWR4KQorCW1vdmFwcwkzMSglZWN4KSwgJXhtbTIKKwlsZWEJMTYoJWVzaSksICVlc2kKKwlzdWIJJDE2LCAlZWJ4CisJamJlCUwoU3RybmNweUV4aXQxKQorCXBhbGlnbnIJJDEsICV4bW0zLCAleG1tMgorCW1vdmFwcwkleG1tMiwgMTYoJWVkeCkKKwlsZWEJMTYoJWVzaSksICVlc2kKKwlzdWIJJDE2LCAlZWJ4CisJamJlCUwoU3RybmNweUV4aXQxKQorCW1vdmFwcwkleG1tNCwgMzIoJWVkeCkKKwlsZWEJMTYoJWVzaSksICVlc2kKKwlzdWIJJDE2LCAlZWJ4CisJamJlCUwoU3RybmNweUV4aXQxKQorCW1vdmFwcwkleG1tNSwgNDgoJWVkeCkKKwlsZWEJMTYoJWVzaSksICVlc2kKKwlsZWEJLTE2KCVlYngpLCAlZWJ4CitMKFN0cm5jcHlFeGl0MSk6CisJbGVhCTE1KCVlZHgsICVlc2kpLCAlZWR4CisJbGVhCTE1KCVlY3gsICVlc2kpLCAlZWN4CisJbW92ZHF1CS0xNiglZWN4KSwgJXhtbTAKKwl4b3IJJWVzaSwgJWVzaQorCW1vdmRxdQkleG1tMCwgLTE2KCVlZHgpCisJam1wCUwoQ29weUZyb20xVG8xNkJ5dGVzQ2FzZTMpCisKK0woU3RybmNweUxlYXZlMik6CisJbW92YXBzCSV4bW0yLCAleG1tMworCWFkZAkkNDgsICVlYngKKwlqbGUJTChTdHJuY3B5RXhpdDIpCisJcGFsaWducgkkMiwgJXhtbTEsICV4bW0yCisJbW92YXBzCSV4bW0yLCAoJWVkeCkKKwltb3ZhcHMJMzAoJWVjeCksICV4bW0yCisJbGVhCTE2KCVlc2kpLCAlZXNpCisJc3ViCSQxNiwgJWVieAorCWpiZQlMKFN0cm5jcHlFeGl0MikKKwlwYWxpZ25yCSQyLCAleG1tMywgJXhtbTIKKwltb3ZhcHMJJXhtbTIsIDE2KCVlZHgpCisJbGVhCTE2KCVlc2kpLCAlZXNpCisJc3ViCSQxNiwgJWVieAorCWpiZQlMKFN0cm5jcHlFeGl0MikKKwltb3ZhcHMJJXhtbTQsIDMyKCVlZHgpCisJbGVhCTE2KCVlc2kpLCAlZXNpCisJc3ViCSQxNiwgJWVieAorCWpiZQlMKFN0cm5jcHlFeGl0MikKKwltb3ZhcHMJJXhtbTUsIDQ4KCVlZHgpCisJbGVhCTE2KCVlc2kpLCAlZXNpCisJbGVhCS0xNiglZWJ4KSwgJWVieAorTChTdHJuY3B5RXhpdDIpOgorCWxlYQkxNCglZWR4LCAlZXNpKSwgJWVkeAorCWxlYQkxNCglZWN4LCAlZXNpKSwgJWVjeAorCW1vdmRxdQktMTYoJWVjeCksICV4bW0wCisJeG9yCSVlc2ksICVlc2kKKwltb3ZkcXUJJXhtbTAsIC0xNiglZWR4KQorCWptcAlMKENvcHlGcm9tMVRvMTZCeXRlc0Nhc2UzKQorCitMKFN0cm5jcHlMZWF2ZTMpOgorCW1vdmFwcwkleG1tMiwgJXhtbTMKKwlhZGQJJDQ4LCAlZWJ4CisJamxlCUwoU3RybmNweUV4aXQzKQorCXBhbGlnbnIJJDMsICV4bW0xLCAleG1tMgorCW1vdmFwcwkleG1tMiwgKCVlZHgpCisJbW92YXBzCTI5KCVlY3gpLCAleG1tMgorCWxlYQkxNiglZXNpKSwgJWVzaQorCXN1YgkkMTYsICVlYngKKwlqYmUJTChTdHJuY3B5RXhpdDMpCisJcGFsaWducgkkMywgJXhtbTMsICV4bW0yCisJbW92YXBzCSV4bW0yLCAxNiglZWR4KQorCWxlYQkxNiglZXNpKSwgJWVzaQorCXN1YgkkMTYsICVlYngKKwlqYmUJTChTdHJuY3B5RXhpdDMpCisJbW92YXBzCSV4bW00LCAzMiglZWR4KQorCWxlYQkxNiglZXNpKSwgJWVzaQorCXN1YgkkMTYsICVlYngKKwlqYmUJTChTdHJuY3B5RXhpdDMpCisJbW92YXBzCSV4bW01LCA0OCglZWR4KQorCWxlYQkxNiglZXNpKSwgJWVzaQorCWxlYQktMTYoJWVieCksICVlYngKK0woU3RybmNweUV4aXQzKToKKwlsZWEJMTMoJWVkeCwgJWVzaSksICVlZHgKKwlsZWEJMTMoJWVjeCwgJWVzaSksICVlY3gKKwltb3ZkcXUJLTE2KCVlY3gpLCAleG1tMAorCXhvcgklZXNpLCAlZXNpCisJbW92ZHF1CSV4bW0wLCAtMTYoJWVkeCkKKwlqbXAJTChDb3B5RnJvbTFUbzE2Qnl0ZXNDYXNlMykKKworTChTdHJuY3B5TGVhdmU0KToKKwltb3ZhcHMJJXhtbTIsICV4bW0zCisJYWRkCSQ0OCwgJWVieAorCWpsZQlMKFN0cm5jcHlFeGl0NCkKKwlwYWxpZ25yCSQ0LCAleG1tMSwgJXhtbTIKKwltb3ZhcHMJJXhtbTIsICglZWR4KQorCW1vdmFwcwkyOCglZWN4KSwgJXhtbTIKKwlsZWEJMTYoJWVzaSksICVlc2kKKwlzdWIJJDE2LCAlZWJ4CisJamJlCUwoU3RybmNweUV4aXQ0KQorCXBhbGlnbnIJJDQsICV4bW0zLCAleG1tMgorCW1vdmFwcwkleG1tMiwgMTYoJWVkeCkKKwlsZWEJMTYoJWVzaSksICVlc2kKKwlzdWIJJDE2LCAlZWJ4CisJamJlCUwoU3RybmNweUV4aXQ0KQorCW1vdmFwcwkleG1tNCwgMzIoJWVkeCkKKwlsZWEJMTYoJWVzaSksICVlc2kKKwlzdWIJJDE2LCAlZWJ4CisJamJlCUwoU3RybmNweUV4aXQ0KQorCW1vdmFwcwkleG1tNSwgNDgoJWVkeCkKKwlsZWEJMTYoJWVzaSksICVlc2kKKwlsZWEJLTE2KCVlYngpLCAlZWJ4CitMKFN0cm5jcHlFeGl0NCk6CisJbGVhCTEyKCVlZHgsICVlc2kpLCAlZWR4CisJbGVhCTEyKCVlY3gsICVlc2kpLCAlZWN4CisJbW92bHBkCS0xMiglZWN4KSwgJXhtbTAKKwltb3ZsCS00KCVlY3gpLCAlZWF4CisJbW92bHBkCSV4bW0wLCAtMTIoJWVkeCkKKwltb3ZsCSVlYXgsIC00KCVlZHgpCisJeG9yCSVlc2ksICVlc2kKKwlqbXAJTChDb3B5RnJvbTFUbzE2Qnl0ZXNDYXNlMykKKworTChTdHJuY3B5TGVhdmU1KToKKwltb3ZhcHMJJXhtbTIsICV4bW0zCisJYWRkCSQ0OCwgJWVieAorCWpsZQlMKFN0cm5jcHlFeGl0NSkKKwlwYWxpZ25yCSQ1LCAleG1tMSwgJXhtbTIKKwltb3ZhcHMJJXhtbTIsICglZWR4KQorCW1vdmFwcwkyNyglZWN4KSwgJXhtbTIKKwlsZWEJMTYoJWVzaSksICVlc2kKKwlzdWIJJDE2LCAlZWJ4CisJamJlCUwoU3RybmNweUV4aXQ1KQorCXBhbGlnbnIJJDUsICV4bW0zLCAleG1tMgorCW1vdmFwcwkleG1tMiwgMTYoJWVkeCkKKwlsZWEJMTYoJWVzaSksICVlc2kKKwlzdWIJJDE2LCAlZWJ4CisJamJlCUwoU3RybmNweUV4aXQ1KQorCW1vdmFwcwkleG1tNCwgMzIoJWVkeCkKKwlsZWEJMTYoJWVzaSksICVlc2kKKwlzdWIJJDE2LCAlZWJ4CisJamJlCUwoU3RybmNweUV4aXQ1KQorCW1vdmFwcwkleG1tNSwgNDgoJWVkeCkKKwlsZWEJMTYoJWVzaSksICVlc2kKKwlsZWEJLTE2KCVlYngpLCAlZWJ4CitMKFN0cm5jcHlFeGl0NSk6CisJbGVhCTExKCVlZHgsICVlc2kpLCAlZWR4CisJbGVhCTExKCVlY3gsICVlc2kpLCAlZWN4CisJbW92bHBkCS0xMSglZWN4KSwgJXhtbTAKKwltb3ZsCS00KCVlY3gpLCAlZWF4CisJbW92bHBkCSV4bW0wLCAtMTEoJWVkeCkKKwltb3ZsCSVlYXgsIC00KCVlZHgpCisJeG9yCSVlc2ksICVlc2kKKwlqbXAJTChDb3B5RnJvbTFUbzE2Qnl0ZXNDYXNlMykKKworTChTdHJuY3B5TGVhdmU2KToKKwltb3ZhcHMJJXhtbTIsICV4bW0zCisJYWRkCSQ0OCwgJWVieAorCWpsZQlMKFN0cm5jcHlFeGl0NikKKwlwYWxpZ25yCSQ2LCAleG1tMSwgJXhtbTIKKwltb3ZhcHMJJXhtbTIsICglZWR4KQorCW1vdmFwcwkyNiglZWN4KSwgJXhtbTIKKwlsZWEJMTYoJWVzaSksICVlc2kKKwlzdWIJJDE2LCAlZWJ4CisJamJlCUwoU3RybmNweUV4aXQ2KQorCXBhbGlnbnIJJDYsICV4bW0zLCAleG1tMgorCW1vdmFwcwkleG1tMiwgMTYoJWVkeCkKKwlsZWEJMTYoJWVzaSksICVlc2kKKwlzdWIJJDE2LCAlZWJ4CisJamJlCUwoU3RybmNweUV4aXQ2KQorCW1vdmFwcwkleG1tNCwgMzIoJWVkeCkKKwlsZWEJMTYoJWVzaSksICVlc2kKKwlzdWIJJDE2LCAlZWJ4CisJamJlCUwoU3RybmNweUV4aXQ2KQorCW1vdmFwcwkleG1tNSwgNDgoJWVkeCkKKwlsZWEJMTYoJWVzaSksICVlc2kKKwlsZWEJLTE2KCVlYngpLCAlZWJ4CitMKFN0cm5jcHlFeGl0Nik6CisJbGVhCTEwKCVlZHgsICVlc2kpLCAlZWR4CisJbGVhCTEwKCVlY3gsICVlc2kpLCAlZWN4CisKKwltb3ZscGQJLTEwKCVlY3gpLCAleG1tMAorCW1vdncJLTIoJWVjeCksICVheAorCW1vdmxwZAkleG1tMCwgLTEwKCVlZHgpCisJbW92dwklYXgsIC0yKCVlZHgpCisJeG9yCSVlc2ksICVlc2kKKwlqbXAJTChDb3B5RnJvbTFUbzE2Qnl0ZXNDYXNlMykKKworTChTdHJuY3B5TGVhdmU3KToKKwltb3ZhcHMJJXhtbTIsICV4bW0zCisJYWRkCSQ0OCwgJWVieAorCWpsZQlMKFN0cm5jcHlFeGl0NykKKwlwYWxpZ25yCSQ3LCAleG1tMSwgJXhtbTIKKwltb3ZhcHMJJXhtbTIsICglZWR4KQorCW1vdmFwcwkyNSglZWN4KSwgJXhtbTIKKwlsZWEJMTYoJWVzaSksICVlc2kKKwlzdWIJJDE2LCAlZWJ4CisJamJlCUwoU3RybmNweUV4aXQ3KQorCXBhbGlnbnIJJDcsICV4bW0zLCAleG1tMgorCW1vdmFwcwkleG1tMiwgMTYoJWVkeCkKKwlsZWEJMTYoJWVzaSksICVlc2kKKwlzdWIJJDE2LCAlZWJ4CisJamJlCUwoU3RybmNweUV4aXQ3KQorCW1vdmFwcwkleG1tNCwgMzIoJWVkeCkKKwlsZWEJMTYoJWVzaSksICVlc2kKKwlzdWIJJDE2LCAlZWJ4CisJamJlCUwoU3RybmNweUV4aXQ3KQorCW1vdmFwcwkleG1tNSwgNDgoJWVkeCkKKwlsZWEJMTYoJWVzaSksICVlc2kKKwlsZWEJLTE2KCVlYngpLCAlZWJ4CitMKFN0cm5jcHlFeGl0Nyk6CisJbGVhCTkoJWVkeCwgJWVzaSksICVlZHgKKwlsZWEJOSglZWN4LCAlZXNpKSwgJWVjeAorCisJbW92bHBkCS05KCVlY3gpLCAleG1tMAorCW1vdmIJLTEoJWVjeCksICVhaAorCW1vdmxwZAkleG1tMCwgLTkoJWVkeCkKKwltb3ZiCSVhaCwgLTEoJWVkeCkKKwl4b3IJJWVzaSwgJWVzaQorCWptcAlMKENvcHlGcm9tMVRvMTZCeXRlc0Nhc2UzKQorCitMKFN0cm5jcHlMZWF2ZTgpOgorCW1vdmFwcwkleG1tMiwgJXhtbTMKKwlhZGQJJDQ4LCAlZWJ4CisJamxlCUwoU3RybmNweUV4aXQ4KQorCXBhbGlnbnIJJDgsICV4bW0xLCAleG1tMgorCW1vdmFwcwkleG1tMiwgKCVlZHgpCisJbW92YXBzCTI0KCVlY3gpLCAleG1tMgorCWxlYQkxNiglZXNpKSwgJWVzaQorCXN1YgkkMTYsICVlYngKKwlqYmUJTChTdHJuY3B5RXhpdDgpCisJcGFsaWducgkkOCwgJXhtbTMsICV4bW0yCisJbW92YXBzCSV4bW0yLCAxNiglZWR4KQorCWxlYQkxNiglZXNpKSwgJWVzaQorCXN1YgkkMTYsICVlYngKKwlqYmUJTChTdHJuY3B5RXhpdDgpCisJbW92YXBzCSV4bW00LCAzMiglZWR4KQorCWxlYQkxNiglZXNpKSwgJWVzaQorCXN1YgkkMTYsICVlYngKKwlqYmUJTChTdHJuY3B5RXhpdDgpCisJbW92YXBzCSV4bW01LCA0OCglZWR4KQorCWxlYQkxNiglZXNpKSwgJWVzaQorCWxlYQktMTYoJWVieCksICVlYngKK0woU3RybmNweUV4aXQ4KToKKwlsZWEJOCglZWR4LCAlZXNpKSwgJWVkeAorCWxlYQk4KCVlY3gsICVlc2kpLCAlZWN4CisJbW92bHBkCS04KCVlY3gpLCAleG1tMAorCW1vdmxwZAkleG1tMCwgLTgoJWVkeCkKKwl4b3IJJWVzaSwgJWVzaQorCWptcAlMKENvcHlGcm9tMVRvMTZCeXRlc0Nhc2UzKQorCitMKFN0cm5jcHlMZWF2ZTkpOgorCW1vdmFwcwkleG1tMiwgJXhtbTMKKwlhZGQJJDQ4LCAlZWJ4CisJamxlCUwoU3RybmNweUV4aXQ5KQorCXBhbGlnbnIJJDksICV4bW0xLCAleG1tMgorCW1vdmFwcwkleG1tMiwgKCVlZHgpCisJbW92YXBzCTIzKCVlY3gpLCAleG1tMgorCWxlYQkxNiglZXNpKSwgJWVzaQorCXN1YgkkMTYsICVlYngKKwlqYmUJTChTdHJuY3B5RXhpdDkpCisJcGFsaWducgkkOSwgJXhtbTMsICV4bW0yCisJbW92YXBzCSV4bW0yLCAxNiglZWR4KQorCWxlYQkxNiglZXNpKSwgJWVzaQorCXN1YgkkMTYsICVlYngKKwlqYmUJTChTdHJuY3B5RXhpdDkpCisJbW92YXBzCSV4bW00LCAzMiglZWR4KQorCWxlYQkxNiglZXNpKSwgJWVzaQorCXN1YgkkMTYsICVlYngKKwlqYmUJTChTdHJuY3B5RXhpdDkpCisJbW92YXBzCSV4bW01LCA0OCglZWR4KQorCWxlYQkxNiglZXNpKSwgJWVzaQorCWxlYQktMTYoJWVieCksICVlYngKK0woU3RybmNweUV4aXQ5KToKKwlsZWEJNyglZWR4LCAlZXNpKSwgJWVkeAorCWxlYQk3KCVlY3gsICVlc2kpLCAlZWN4CisKKwltb3ZscGQJLTgoJWVjeCksICV4bW0wCisJbW92bHBkCSV4bW0wLCAtOCglZWR4KQorCXhvcgklZXNpLCAlZXNpCisJam1wCUwoQ29weUZyb20xVG8xNkJ5dGVzQ2FzZTMpCisKK0woU3RybmNweUxlYXZlMTApOgorCW1vdmFwcwkleG1tMiwgJXhtbTMKKwlhZGQJJDQ4LCAlZWJ4CisJamxlCUwoU3RybmNweUV4aXQxMCkKKwlwYWxpZ25yCSQxMCwgJXhtbTEsICV4bW0yCisJbW92YXBzCSV4bW0yLCAoJWVkeCkKKwltb3ZhcHMJMjIoJWVjeCksICV4bW0yCisJbGVhCTE2KCVlc2kpLCAlZXNpCisJc3ViCSQxNiwgJWVieAorCWpiZQlMKFN0cm5jcHlFeGl0MTApCisJcGFsaWducgkkMTAsICV4bW0zLCAleG1tMgorCW1vdmFwcwkleG1tMiwgMTYoJWVkeCkKKwlsZWEJMTYoJWVzaSksICVlc2kKKwlzdWIJJDE2LCAlZWJ4CisJamJlCUwoU3RybmNweUV4aXQxMCkKKwltb3ZhcHMJJXhtbTQsIDMyKCVlZHgpCisJbGVhCTE2KCVlc2kpLCAlZXNpCisJc3ViCSQxNiwgJWVieAorCWpiZQlMKFN0cm5jcHlFeGl0MTApCisJbW92YXBzCSV4bW01LCA0OCglZWR4KQorCWxlYQkxNiglZXNpKSwgJWVzaQorCWxlYQktMTYoJWVieCksICVlYngKK0woU3RybmNweUV4aXQxMCk6CisJbGVhCTYoJWVkeCwgJWVzaSksICVlZHgKKwlsZWEJNiglZWN4LCAlZXNpKSwgJWVjeAorCisJbW92bHBkCS04KCVlY3gpLCAleG1tMAorCW1vdmxwZAkleG1tMCwgLTgoJWVkeCkKKwl4b3IJJWVzaSwgJWVzaQorCWptcAlMKENvcHlGcm9tMVRvMTZCeXRlc0Nhc2UzKQorCitMKFN0cm5jcHlMZWF2ZTExKToKKwltb3ZhcHMJJXhtbTIsICV4bW0zCisJYWRkCSQ0OCwgJWVieAorCWpsZQlMKFN0cm5jcHlFeGl0MTEpCisJcGFsaWducgkkMTEsICV4bW0xLCAleG1tMgorCW1vdmFwcwkleG1tMiwgKCVlZHgpCisJbW92YXBzCTIxKCVlY3gpLCAleG1tMgorCWxlYQkxNiglZXNpKSwgJWVzaQorCXN1YgkkMTYsICVlYngKKwlqYmUJTChTdHJuY3B5RXhpdDExKQorCXBhbGlnbnIJJDExLCAleG1tMywgJXhtbTIKKwltb3ZhcHMJJXhtbTIsIDE2KCVlZHgpCisJbGVhCTE2KCVlc2kpLCAlZXNpCisJc3ViCSQxNiwgJWVieAorCWpiZQlMKFN0cm5jcHlFeGl0MTEpCisJbW92YXBzCSV4bW00LCAzMiglZWR4KQorCWxlYQkxNiglZXNpKSwgJWVzaQorCXN1YgkkMTYsICVlYngKKwlqYmUJTChTdHJuY3B5RXhpdDExKQorCW1vdmFwcwkleG1tNSwgNDgoJWVkeCkKKwlsZWEJMTYoJWVzaSksICVlc2kKKwlsZWEJLTE2KCVlYngpLCAlZWJ4CitMKFN0cm5jcHlFeGl0MTEpOgorCWxlYQk1KCVlZHgsICVlc2kpLCAlZWR4CisJbGVhCTUoJWVjeCwgJWVzaSksICVlY3gKKwltb3ZsCS01KCVlY3gpLCAlZXNpCisJbW92YgktMSglZWN4KSwgJWFoCisJbW92bAklZXNpLCAtNSglZWR4KQorCW1vdmIJJWFoLCAtMSglZWR4KQorCXhvcgklZXNpLCAlZXNpCisJam1wCUwoQ29weUZyb20xVG8xNkJ5dGVzQ2FzZTMpCisKK0woU3RybmNweUxlYXZlMTIpOgorCW1vdmFwcwkleG1tMiwgJXhtbTMKKwlhZGQJJDQ4LCAlZWJ4CisJamxlCUwoU3RybmNweUV4aXQxMikKKwlwYWxpZ25yCSQxMiwgJXhtbTEsICV4bW0yCisJbW92YXBzCSV4bW0yLCAoJWVkeCkKKwltb3ZhcHMJMjAoJWVjeCksICV4bW0yCisJbGVhCTE2KCVlc2kpLCAlZXNpCisJc3ViCSQxNiwgJWVieAorCWpiZQlMKFN0cm5jcHlFeGl0MTIpCisJcGFsaWducgkkMTIsICV4bW0zLCAleG1tMgorCW1vdmFwcwkleG1tMiwgMTYoJWVkeCkKKwlsZWEJMTYoJWVzaSksICVlc2kKKwlzdWIJJDE2LCAlZWJ4CisJamJlCUwoU3RybmNweUV4aXQxMikKKwltb3ZhcHMJJXhtbTQsIDMyKCVlZHgpCisJbGVhCTE2KCVlc2kpLCAlZXNpCisJc3ViCSQxNiwgJWVieAorCWpiZQlMKFN0cm5jcHlFeGl0MTIpCisJbW92YXBzCSV4bW01LCA0OCglZWR4KQorCWxlYQkxNiglZXNpKSwgJWVzaQorCWxlYQktMTYoJWVieCksICVlYngKK0woU3RybmNweUV4aXQxMik6CisJbGVhCTQoJWVkeCwgJWVzaSksICVlZHgKKwlsZWEJNCglZWN4LCAlZXNpKSwgJWVjeAorCW1vdmwJLTQoJWVjeCksICVlYXgKKwltb3ZsCSVlYXgsIC00KCVlZHgpCisJeG9yCSVlc2ksICVlc2kKKwlqbXAJTChDb3B5RnJvbTFUbzE2Qnl0ZXNDYXNlMykKKworTChTdHJuY3B5TGVhdmUxMyk6CisJbW92YXBzCSV4bW0yLCAleG1tMworCWFkZAkkNDgsICVlYngKKwlqbGUJTChTdHJuY3B5RXhpdDEzKQorCXBhbGlnbnIJJDEzLCAleG1tMSwgJXhtbTIKKwltb3ZhcHMJJXhtbTIsICglZWR4KQorCW1vdmFwcwkxOSglZWN4KSwgJXhtbTIKKwlsZWEJMTYoJWVzaSksICVlc2kKKwlzdWIJJDE2LCAlZWJ4CisJamJlCUwoU3RybmNweUV4aXQxMykKKwlwYWxpZ25yCSQxMywgJXhtbTMsICV4bW0yCisJbW92YXBzCSV4bW0yLCAxNiglZWR4KQorCWxlYQkxNiglZXNpKSwgJWVzaQorCXN1YgkkMTYsICVlYngKKwlqYmUJTChTdHJuY3B5RXhpdDEzKQorCW1vdmFwcwkleG1tNCwgMzIoJWVkeCkKKwlsZWEJMTYoJWVzaSksICVlc2kKKwlzdWIJJDE2LCAlZWJ4CisJamJlCUwoU3RybmNweUV4aXQxMykKKwltb3ZhcHMJJXhtbTUsIDQ4KCVlZHgpCisJbGVhCTE2KCVlc2kpLCAlZXNpCisJbGVhCS0xNiglZWJ4KSwgJWVieAorTChTdHJuY3B5RXhpdDEzKToKKwlsZWEJMyglZWR4LCAlZXNpKSwgJWVkeAorCWxlYQkzKCVlY3gsICVlc2kpLCAlZWN4CisKKwltb3ZsCS00KCVlY3gpLCAlZWF4CisJbW92bAklZWF4LCAtNCglZWR4KQorCXhvcgklZXNpLCAlZXNpCisJam1wCUwoQ29weUZyb20xVG8xNkJ5dGVzQ2FzZTMpCisKK0woU3RybmNweUxlYXZlMTQpOgorCW1vdmFwcwkleG1tMiwgJXhtbTMKKwlhZGQJJDQ4LCAlZWJ4CisJamxlCUwoU3RybmNweUV4aXQxNCkKKwlwYWxpZ25yCSQxNCwgJXhtbTEsICV4bW0yCisJbW92YXBzCSV4bW0yLCAoJWVkeCkKKwltb3ZhcHMJMTgoJWVjeCksICV4bW0yCisJbGVhCTE2KCVlc2kpLCAlZXNpCisJc3ViCSQxNiwgJWVieAorCWpiZQlMKFN0cm5jcHlFeGl0MTQpCisJcGFsaWducgkkMTQsICV4bW0zLCAleG1tMgorCW1vdmFwcwkleG1tMiwgMTYoJWVkeCkKKwlsZWEJMTYoJWVzaSksICVlc2kKKwlzdWIJJDE2LCAlZWJ4CisJamJlCUwoU3RybmNweUV4aXQxNCkKKwltb3ZhcHMJJXhtbTQsIDMyKCVlZHgpCisJbGVhCTE2KCVlc2kpLCAlZXNpCisJc3ViCSQxNiwgJWVieAorCWpiZQlMKFN0cm5jcHlFeGl0MTQpCisJbW92YXBzCSV4bW01LCA0OCglZWR4KQorCWxlYQkxNiglZXNpKSwgJWVzaQorCWxlYQktMTYoJWVieCksICVlYngKK0woU3RybmNweUV4aXQxNCk6CisJbGVhCTIoJWVkeCwgJWVzaSksICVlZHgKKwlsZWEJMiglZWN4LCAlZXNpKSwgJWVjeAorCW1vdncJLTIoJWVjeCksICVheAorCW1vdncJJWF4LCAtMiglZWR4KQorCXhvcgklZXNpLCAlZXNpCisJam1wCUwoQ29weUZyb20xVG8xNkJ5dGVzQ2FzZTMpCisKK0woU3RybmNweUxlYXZlMTUpOgorCW1vdmFwcwkleG1tMiwgJXhtbTMKKwlhZGQJJDQ4LCAlZWJ4CisJamxlCUwoU3RybmNweUV4aXQxNSkKKwlwYWxpZ25yCSQxNSwgJXhtbTEsICV4bW0yCisJbW92YXBzCSV4bW0yLCAoJWVkeCkKKwltb3ZhcHMJMTcoJWVjeCksICV4bW0yCisJbGVhCTE2KCVlc2kpLCAlZXNpCisJc3ViCSQxNiwgJWVieAorCWpiZQlMKFN0cm5jcHlFeGl0MTUpCisJcGFsaWducgkkMTUsICV4bW0zLCAleG1tMgorCW1vdmFwcwkleG1tMiwgMTYoJWVkeCkKKwlsZWEJMTYoJWVzaSksICVlc2kKKwlzdWIJJDE2LCAlZWJ4CisJamJlCUwoU3RybmNweUV4aXQxNSkKKwltb3ZhcHMJJXhtbTQsIDMyKCVlZHgpCisJbGVhCTE2KCVlc2kpLCAlZXNpCisJc3ViCSQxNiwgJWVieAorCWpiZQlMKFN0cm5jcHlFeGl0MTUpCisJbW92YXBzCSV4bW01LCA0OCglZWR4KQorCWxlYQkxNiglZXNpKSwgJWVzaQorCWxlYQktMTYoJWVieCksICVlYngKK0woU3RybmNweUV4aXQxNSk6CisJbGVhCTEoJWVkeCwgJWVzaSksICVlZHgKKwlsZWEJMSglZWN4LCAlZXNpKSwgJWVjeAorCW1vdmIJLTEoJWVjeCksICVhaAorCW1vdmIJJWFoLCAtMSglZWR4KQorCXhvcgklZXNpLCAlZXNpCisJam1wCUwoQ29weUZyb20xVG8xNkJ5dGVzQ2FzZTMpCisjZW5kaWYKKworI2lmICFkZWZpbmVkIFVTRV9BU19TVFJDQVQgJiYgISBkZWZpbmVkIFVTRV9BU19TVFJMQ1BZCisjIGlmZGVmIFVTRV9BU19TVFJOQ1BZCisJQ0ZJX1BPUCAoJWVzaSkKKwlDRklfUE9QICglZWRpKQorCisJLnAyYWxpZ24gNAorTChFeGl0VGFpbDApOgorCW1vdmwJJWVkeCwgJWVheAorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChTdHJuY3B5RXhpdDE1Qnl0ZXMpOgorCWNtcAkkMTIsICVlYngKKwlqYmUJTChTdHJuY3B5RXhpdDEyQnl0ZXMpCisJY21wYgkkMCwgOCglZWN4KQorCWp6CUwoRXhpdFRhaWw5KQorCWNtcGIJJDAsIDkoJWVjeCkKKwlqeglMKEV4aXRUYWlsMTApCisJY21wYgkkMCwgMTAoJWVjeCkKKwlqeglMKEV4aXRUYWlsMTEpCisJY21wYgkkMCwgMTEoJWVjeCkKKwlqeglMKEV4aXRUYWlsMTIpCisJY21wCSQxMywgJWVieAorCWplCUwoRXhpdFRhaWwxMykKKwljbXBiCSQwLCAxMiglZWN4KQorCWp6CUwoRXhpdFRhaWwxMykKKwljbXAJJDE0LCAlZWJ4CisJamUJTChFeGl0VGFpbDE0KQorCWNtcGIJJDAsIDEzKCVlY3gpCisJanoJTChFeGl0VGFpbDE0KQorCW1vdmxwZAkoJWVjeCksICV4bW0wCisJbW92bHBkCTcoJWVjeCksICV4bW0xCisJbW92bHBkCSV4bW0wLCAoJWVkeCkKKwltb3ZscGQJJXhtbTEsIDcoJWVkeCkKKyMgIGlmZGVmIFVTRV9BU19TVFBDUFkKKwlsZWEJMTQoJWVkeCksICVlYXgKKwljbXBiCSQxLCAoJWVheCkKKwlzYmIJJC0xLCAlZWF4CisjICBlbHNlCisJbW92bAklZWR4LCAlZWF4CisjICBlbmRpZgorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChTdHJuY3B5RXhpdDEyQnl0ZXMpOgorCWNtcAkkOSwgJWVieAorCWplCUwoRXhpdFRhaWw5KQorCWNtcGIJJDAsIDgoJWVjeCkKKwlqeglMKEV4aXRUYWlsOSkKKwljbXAJJDEwLCAlZWJ4CisJamUJTChFeGl0VGFpbDEwKQorCWNtcGIJJDAsIDkoJWVjeCkKKwlqeglMKEV4aXRUYWlsMTApCisJY21wCSQxMSwgJWVieAorCWplCUwoRXhpdFRhaWwxMSkKKwljbXBiCSQwLCAxMCglZWN4KQorCWp6CUwoRXhpdFRhaWwxMSkKKwltb3ZscGQJKCVlY3gpLCAleG1tMAorCW1vdmwJOCglZWN4KSwgJWVheAorCW1vdmxwZAkleG1tMCwgKCVlZHgpCisJbW92bAklZWF4LCA4KCVlZHgpCisJU0FWRV9SRVNVTFRfVEFJTCAoMTEpCisjICBpZmRlZiBVU0VfQVNfU1RQQ1BZCisJY21wYgkkMSwgKCVlYXgpCisJc2JiCSQtMSwgJWVheAorIyAgZW5kaWYKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woU3RybmNweUV4aXQ4Qnl0ZXMpOgorCWNtcAkkNCwgJWVieAorCWpiZQlMKFN0cm5jcHlFeGl0NEJ5dGVzKQorCWNtcGIJJDAsICglZWN4KQorCWp6CUwoRXhpdFRhaWwxKQorCWNtcGIJJDAsIDEoJWVjeCkKKwlqeglMKEV4aXRUYWlsMikKKwljbXBiCSQwLCAyKCVlY3gpCisJanoJTChFeGl0VGFpbDMpCisJY21wYgkkMCwgMyglZWN4KQorCWp6CUwoRXhpdFRhaWw0KQorCisJY21wCSQ1LCAlZWJ4CisJamUJTChFeGl0VGFpbDUpCisJY21wYgkkMCwgNCglZWN4KQorCWp6CUwoRXhpdFRhaWw1KQorCWNtcAkkNiwgJWVieAorCWplCUwoRXhpdFRhaWw2KQorCWNtcGIJJDAsIDUoJWVjeCkKKwlqeglMKEV4aXRUYWlsNikKKwljbXAJJDcsICVlYngKKwlqZQlMKEV4aXRUYWlsNykKKwljbXBiCSQwLCA2KCVlY3gpCisJanoJTChFeGl0VGFpbDcpCisJbW92bHBkCSglZWN4KSwgJXhtbTAKKwltb3ZscGQJJXhtbTAsICglZWR4KQorIyAgaWZkZWYgVVNFX0FTX1NUUENQWQorCWxlYQk3KCVlZHgpLCAlZWF4CisJY21wYgkkMSwgKCVlYXgpCisJc2JiCSQtMSwgJWVheAorIyAgZWxzZQorCW1vdmwJJWVkeCwgJWVheAorIyAgZW5kaWYKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woU3RybmNweUV4aXQ0Qnl0ZXMpOgorCXRlc3QJJWVieCwgJWVieAorCWp6CUwoRXhpdFRhaWwwKQorCWNtcAkkMSwgJWVieAorCWplCUwoRXhpdFRhaWwxKQorCWNtcGIJJDAsICglZWN4KQorCWp6CUwoRXhpdFRhaWwxKQorCWNtcAkkMiwgJWVieAorCWplCUwoRXhpdFRhaWwyKQorCWNtcGIJJDAsIDEoJWVjeCkKKwlqeglMKEV4aXRUYWlsMikKKwljbXAJJDMsICVlYngKKwlqZQlMKEV4aXRUYWlsMykKKwljbXBiCSQwLCAyKCVlY3gpCisJanoJTChFeGl0VGFpbDMpCisJbW92bAkoJWVjeCksICVlYXgKKwltb3ZsCSVlYXgsICglZWR4KQorCVNBVkVfUkVTVUxUX1RBSUwgKDMpCisjICBpZmRlZiBVU0VfQVNfU1RQQ1BZCisJY21wYgkkMSwgKCVlYXgpCisJc2JiCSQtMSwgJWVheAorIyAgZW5kaWYKKwlSRVRVUk4KKyMgZW5kaWYKKworRU5EIChTVFJDUFkpCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3RyaW5nL3Nzc2UzLXN0cmxjYXQtYXRvbS5TIGIvbGliYy9hcmNoLXg4Ni9zdHJpbmcvc3NzZTMtc3RybGNhdC1hdG9tLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGFhZjI1NAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc3RyaW5nL3Nzc2UzLXN0cmxjYXQtYXRvbS5TCkBAIC0wLDAgKzEsMTIyNSBAQAorLyoKK0NvcHlyaWdodCAoYykgMjAxMSwgSW50ZWwgQ29ycG9yYXRpb24KK0FsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisKKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAgICAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisKKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAgICAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAgICAqIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCisgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEludGVsIENvcnBvcmF0aW9uIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICAgICogbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgICAgKiB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKK1dBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKK0RJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKK0FOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCitBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKK1NPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKi8KKworLyogT3B0aW1pemVkIHN0cmxjYXQgd2l0aCBTU1NFMyAqLworCisjaWZuZGVmIGNmaV9zdGFydHByb2MKKyMgZGVmaW5lIGNmaV9zdGFydHByb2MJLmNmaV9zdGFydHByb2MKKyNlbmRpZgorCisjaWZuZGVmIGNmaV9lbmRwcm9jCisjIGRlZmluZSBjZmlfZW5kcHJvYwkuY2ZpX2VuZHByb2MKKyNlbmRpZgorCisjaWZuZGVmIGNmaV9yZWxfb2Zmc2V0CisjIGRlZmluZSBjZmlfcmVsX29mZnNldChyZWcsIG9mZikJLmNmaV9yZWxfb2Zmc2V0IHJlZywgb2ZmCisjZW5kaWYKKworI2lmbmRlZiBjZmlfcmVzdG9yZQorIyBkZWZpbmUgY2ZpX3Jlc3RvcmUocmVnKQkuY2ZpX3Jlc3RvcmUgcmVnCisjZW5kaWYKKworI2lmbmRlZiBjZmlfYWRqdXN0X2NmYV9vZmZzZXQKKyMgZGVmaW5lIGNmaV9hZGp1c3RfY2ZhX29mZnNldChvZmYpCS5jZmlfYWRqdXN0X2NmYV9vZmZzZXQgb2ZmCisjZW5kaWYKKworI2lmbmRlZiBFTlRSWQorIyBkZWZpbmUgRU5UUlkobmFtZSkJXAorCS50eXBlIG5hbWUsICBAZnVuY3Rpb247CVwKKwkuZ2xvYmwgbmFtZTsJXAorCS5wMmFsaWduIDQ7CVwKK25hbWU6CVwKKwljZmlfc3RhcnRwcm9jCisjZW5kaWYKKworI2lmbmRlZiBFTkQKKyMgZGVmaW5lIEVORChuYW1lKQlcCisJY2ZpX2VuZHByb2M7CVwKKwkuc2l6ZSBuYW1lLCAuLW5hbWUKKyNlbmRpZgorCisjZGVmaW5lIENGSV9QVVNIKFJFRykJXAorCWNmaV9hZGp1c3RfY2ZhX29mZnNldCAoNCk7CVwKKwljZmlfcmVsX29mZnNldCAoUkVHLCAwKQorCisjZGVmaW5lIENGSV9QT1AoUkVHKQlcCisJY2ZpX2FkanVzdF9jZmFfb2Zmc2V0ICgtNCk7CVwKKwljZmlfcmVzdG9yZSAoUkVHKQorCisjZGVmaW5lIFBVU0goUkVHKQlwdXNobAlSRUc7CUNGSV9QVVNIIChSRUcpCisjZGVmaW5lIFBPUChSRUcpCXBvcGwJUkVHOwlDRklfUE9QIChSRUcpCisjZGVmaW5lIEwobGFiZWwpCS5MIyNQcm9sb2dfIyNsYWJlbAorCisjZGVmaW5lIERTVAk0CisjZGVmaW5lIFNSQwlEU1QrOAorI2RlZmluZSBMRU4JU1JDKzQKKworCS50ZXh0CitFTlRSWSAoc3RybGNhdCkKKwltb3YJRFNUKCVlc3ApLCAlZWR4CisJUFVTSAkoJWVieCkKKwltb3YJTEVOKCVlc3ApLCAlZWJ4CisJc3ViCSQ0LCAlZWJ4CisJamJlCUwobGVuX2xlc3M0X3Byb2xvZykKKworI2RlZmluZSBSRVRVUk4Jam1wCUwoU3RyY3B5U3RlcCkKKyNkZWZpbmUgZWRpCWVieAorCisjZGVmaW5lIFVTRV9BU19TVFJOTEVOCisjZGVmaW5lIFVTRV9BU19TVFJDQVQKKyNkZWZpbmUgVVNFX0FTX1NUUkxDQVQKKworI2luY2x1ZGUgInNzZTItc3RybGVuLWF0b20uUyIKKworCS5wMmFsaWduIDQKK0woU3RyY3B5U3RlcCk6CisKKyN1bmRlZiBlZGkKKyN1bmRlZiBMCisjZGVmaW5lIEwobGFiZWwpIC5MIyNsYWJlbAorI3VuZGVmIFJFVFVSTgorI2RlZmluZSBSRVRVUk4JUE9QICglZWJ4KTsgcmV0OyBDRklfUFVTSCAoJWVieCk7CisjZGVmaW5lIFJFVFVSTjEJUE9QICglZWRpKTsgUE9QICglZWJ4KTsgcmV0OyBDRklfUFVTSCAoJWVieCk7IENGSV9QVVNIICglZWRpKQorCisgICAgICAgIG1vdmwJU1JDKCVlc3ApLCAlZWN4CisJbW92bAlMRU4oJWVzcCksICVlYngKKworCWNtcAklZWF4LCAlZWJ4CisJamUJTChDYWxjdWxhdGVMZW5ndGhPZlNyY1Byb2xvZykKKwlzdWIJJWVheCwgJWVieAorCisJdGVzdAklZWJ4LCAlZWJ4CisJanoJTChDYWxjdWxhdGVMZW5ndGhPZlNyY1Byb2xvZykKKworCW1vdglEU1QgKyA0KCVlc3ApLCAlZWR4CisKKwlQVVNICSglZWRpKQorCWFkZAklZWF4LCAlZWR4CisJbW92CSVlY3gsICVlZGkKKwlzdWIJJWVheCwgJWVkaQorCisJY21wCSQ4LCAlZWJ4CisJamJlCUwoU3RybmNweUV4aXQ4Qnl0ZXMpCisKKwljbXBiCSQwLCAoJWVjeCkKKwlqeglMKEV4aXQxKQorCWNtcGIJJDAsIDEoJWVjeCkKKwlqeglMKEV4aXQyKQorCWNtcGIJJDAsIDIoJWVjeCkKKwlqeglMKEV4aXQzKQorCWNtcGIJJDAsIDMoJWVjeCkKKwlqeglMKEV4aXQ0KQorCWNtcGIJJDAsIDQoJWVjeCkKKwlqeglMKEV4aXQ1KQorCWNtcGIJJDAsIDUoJWVjeCkKKwlqeglMKEV4aXQ2KQorCWNtcGIJJDAsIDYoJWVjeCkKKwlqeglMKEV4aXQ3KQorCWNtcGIJJDAsIDcoJWVjeCkKKwlqeglMKEV4aXQ4KQorCWNtcAkkMTYsICVlYngKKwlqYglMKFN0cm5jcHlFeGl0MTVCeXRlcykKKwljbXBiCSQwLCA4KCVlY3gpCisJanoJTChFeGl0OSkKKwljbXBiCSQwLCA5KCVlY3gpCisJanoJTChFeGl0MTApCisJY21wYgkkMCwgMTAoJWVjeCkKKwlqeglMKEV4aXQxMSkKKwljbXBiCSQwLCAxMSglZWN4KQorCWp6CUwoRXhpdDEyKQorCWNtcGIJJDAsIDEyKCVlY3gpCisJanoJTChFeGl0MTMpCisJY21wYgkkMCwgMTMoJWVjeCkKKwlqeglMKEV4aXQxNCkKKwljbXBiCSQwLCAxNCglZWN4KQorCWp6CUwoRXhpdDE1KQorCWNtcGIJJDAsIDE1KCVlY3gpCisJanoJTChFeGl0MTYpCisJY21wCSQxNiwgJWVieAorCWplCUwoU3RybGNweUV4aXQxNikKKworI2RlZmluZSBVU0VfQVNfU1RSTkNQWQorI2luY2x1ZGUgInNzc2UzLXN0cmNweS1hdG9tLlMiCisKKwkucDJhbGlnbiA0CitMKENvcHlGcm9tMVRvMTZCeXRlcyk6CisJYWRkCSVlc2ksICVlZHgKKwlhZGQJJWVzaSwgJWVjeAorCisJUE9QCSglZXNpKQorCXRlc3QJJWFsLCAlYWwKKwlqeglMKEV4aXRIaWdoOCkKKworTChDb3B5RnJvbTFUbzE2Qnl0ZXNMZXNzOCk6CisJbW92CSVhbCwgJWFoCisJYW5kCSQxNSwgJWFoCisJanoJTChFeGl0SGlnaDQpCisKKwl0ZXN0CSQweDAxLCAlYWwKKwlqbnoJTChFeGl0MSkKKwl0ZXN0CSQweDAyLCAlYWwKKwlqbnoJTChFeGl0MikKKwl0ZXN0CSQweDA0LCAlYWwKKwlqbnoJTChFeGl0MykKK0woRXhpdDQpOgorCW1vdmwJKCVlY3gpLCAlZWF4CisJbW92bAklZWF4LCAoJWVkeCkKKworCWxlYQkzKCVlY3gpLCAlZWF4CisJc3ViCSVlZGksICVlYXgKKwlSRVRVUk4xCisKKwkucDJhbGlnbiA0CitMKEV4aXRIaWdoNCk6CisJdGVzdAkkMHgxMCwgJWFsCisJam56CUwoRXhpdDUpCisJdGVzdAkkMHgyMCwgJWFsCisJam56CUwoRXhpdDYpCisJdGVzdAkkMHg0MCwgJWFsCisJam56CUwoRXhpdDcpCitMKEV4aXQ4KToKKwltb3ZscGQJKCVlY3gpLCAleG1tMAorCW1vdmxwZAkleG1tMCwgKCVlZHgpCisKKwlsZWEJNyglZWN4KSwgJWVheAorCXN1YgklZWRpLCAlZWF4CisJUkVUVVJOMQorCisJLnAyYWxpZ24gNAorTChFeGl0SGlnaDgpOgorCW1vdgklYWgsICVhbAorCWFuZAkkMTUsICVhbAorCWp6CUwoRXhpdEhpZ2gxMikKKworCXRlc3QJJDB4MDEsICVhaAorCWpueglMKEV4aXQ5KQorCXRlc3QJJDB4MDIsICVhaAorCWpueglMKEV4aXQxMCkKKwl0ZXN0CSQweDA0LCAlYWgKKwlqbnoJTChFeGl0MTEpCitMKEV4aXQxMik6CisJbW92bHBkCSglZWN4KSwgJXhtbTAKKwltb3ZscGQJJXhtbTAsICglZWR4KQorCW1vdmwJOCglZWN4KSwgJWVheAorCW1vdmwJJWVheCwgOCglZWR4KQorCisJbGVhCTExKCVlY3gpLCAlZWF4CisJc3ViCSVlZGksICVlYXgKKwlSRVRVUk4xCisKKwkucDJhbGlnbiA0CitMKEV4aXRIaWdoMTIpOgorCXRlc3QJJDB4MTAsICVhaAorCWpueglMKEV4aXQxMykKKwl0ZXN0CSQweDIwLCAlYWgKKwlqbnoJTChFeGl0MTQpCisJdGVzdAkkMHg0MCwgJWFoCisJam56CUwoRXhpdDE1KQorTChFeGl0MTYpOgorCW1vdmxwZAkoJWVjeCksICV4bW0wCisJbW92bHBkCTgoJWVjeCksICV4bW0xCisJbW92bHBkCSV4bW0wLCAoJWVkeCkKKwltb3ZscGQJJXhtbTEsIDgoJWVkeCkKKworCWxlYQkxNSglZWN4KSwgJWVheAorCXN1YgklZWRpLCAlZWF4CisJUkVUVVJOMQorCisJQ0ZJX1BVU0goJWVzaSkKKworCS5wMmFsaWduIDQKK0woQ29weUZyb20xVG8xNkJ5dGVzQ2FzZTIpOgorCWFkZAkkMTYsICVlYngKKwlhZGQJJWVzaSwgJWVjeAorCWFkZAklZXNpLCAlZWR4CisKKwlQT1AJKCVlc2kpCisKKwl0ZXN0CSVhbCwgJWFsCisJanoJTChFeGl0SGlnaENhc2UyKQorCisJY21wCSQ4LCAlZWJ4CisJamEJTChDb3B5RnJvbTFUbzE2Qnl0ZXNMZXNzOCkKKworCXRlc3QJJDB4MDEsICVhbAorCWpueglMKEV4aXQxKQorCWNtcAkkMSwgJWVieAorCWplCUwoU3RybGNweUV4aXQxKQorCXRlc3QJJDB4MDIsICVhbAorCWpueglMKEV4aXQyKQorCWNtcAkkMiwgJWVieAorCWplCUwoU3RybGNweUV4aXQyKQorCXRlc3QJJDB4MDQsICVhbAorCWpueglMKEV4aXQzKQorCWNtcAkkMywgJWVieAorCWplCUwoU3RybGNweUV4aXQzKQorCXRlc3QJJDB4MDgsICVhbAorCWpueglMKEV4aXQ0KQorCWNtcAkkNCwgJWVieAorCWplCUwoU3RybGNweUV4aXQ0KQorCXRlc3QJJDB4MTAsICVhbAorCWpueglMKEV4aXQ1KQorCWNtcAkkNSwgJWVieAorCWplCUwoU3RybGNweUV4aXQ1KQorCXRlc3QJJDB4MjAsICVhbAorCWpueglMKEV4aXQ2KQorCWNtcAkkNiwgJWVieAorCWplCUwoU3RybGNweUV4aXQ2KQorCXRlc3QJJDB4NDAsICVhbAorCWpueglMKEV4aXQ3KQorCWNtcAkkNywgJWVieAorCWplCUwoU3RybGNweUV4aXQ3KQorCXRlc3QJJDB4ODAsICVhbAorCWpueglMKEV4aXQ4KQorCWptcAlMKFN0cmxjcHlFeGl0OCkKKworCS5wMmFsaWduIDQKK0woRXhpdEhpZ2hDYXNlMik6CisJY21wCSQ4LCAlZWJ4CisJamJlCUwoQ29weUZyb20xVG8xNkJ5dGVzTGVzczhDYXNlMykKKworCXRlc3QJJDB4MDEsICVhaAorCWpueglMKEV4aXQ5KQorCWNtcAkkOSwgJWVieAorCWplCUwoU3RybGNweUV4aXQ5KQorCXRlc3QJJDB4MDIsICVhaAorCWpueglMKEV4aXQxMCkKKwljbXAJJDEwLCAlZWJ4CisJamUJTChTdHJsY3B5RXhpdDEwKQorCXRlc3QJJDB4MDQsICVhaAorCWpueglMKEV4aXQxMSkKKwljbXAJJDExLCAlZWJ4CisJamUJTChTdHJsY3B5RXhpdDExKQorCXRlc3QJJDB4OCwgJWFoCisJam56CUwoRXhpdDEyKQorCWNtcAkkMTIsICVlYngKKwlqZQlMKFN0cmxjcHlFeGl0MTIpCisJdGVzdAkkMHgxMCwgJWFoCisJam56CUwoRXhpdDEzKQorCWNtcAkkMTMsICVlYngKKwlqZQlMKFN0cmxjcHlFeGl0MTMpCisJdGVzdAkkMHgyMCwgJWFoCisJam56CUwoRXhpdDE0KQorCWNtcAkkMTQsICVlYngKKwlqZQlMKFN0cmxjcHlFeGl0MTQpCisJdGVzdAkkMHg0MCwgJWFoCisJam56CUwoRXhpdDE1KQorCWNtcAkkMTUsICVlYngKKwlqZQlMKFN0cmxjcHlFeGl0MTUpCisJdGVzdAkkMHg4MCwgJWFoCisJam56CUwoRXhpdDE2KQorCWptcAlMKFN0cmxjcHlFeGl0MTYpCisKKwlDRklfUFVTSCglZXNpKQorCisJLnAyYWxpZ24gNAorTChDb3B5RnJvbTFUbzE2Qnl0ZXNDYXNlMk9yQ2FzZTMpOgorCXRlc3QJJWVheCwgJWVheAorCWpueglMKENvcHlGcm9tMVRvMTZCeXRlc0Nhc2UyKQorCisJLnAyYWxpZ24gNAorTChDb3B5RnJvbTFUbzE2Qnl0ZXNDYXNlMyk6CisJYWRkCSQxNiwgJWVieAorCWFkZAklZXNpLCAlZWR4CisJYWRkCSVlc2ksICVlY3gKKworCVBPUAkoJWVzaSkKKworCWNtcAkkOCwgJWVieAorCWphCUwoRXhpdEhpZ2g4Q2FzZTMpCisKK0woQ29weUZyb20xVG8xNkJ5dGVzTGVzczhDYXNlMyk6CisJY21wCSQ0LCAlZWJ4CisJamEJTChFeGl0SGlnaDRDYXNlMykKKworCWNtcAkkMSwgJWVieAorCWplCUwoU3RybGNweUV4aXQxKQorCWNtcAkkMiwgJWVieAorCWplCUwoU3RybGNweUV4aXQyKQorCWNtcAkkMywgJWVieAorCWplCUwoU3RybGNweUV4aXQzKQorTChTdHJsY3B5RXhpdDQpOgorCW1vdmIJJWJoLCAzKCVlZHgpCisJbW92dwkoJWVjeCksICVheAorCW1vdncJJWF4LCAoJWVkeCkKKwltb3ZiCTIoJWVjeCksICVhbAorCW1vdmIJJWFsLCAyKCVlZHgpCisKKwlsZWEJNCglZWN4KSwgJWVkeAorCW1vdgklZWRpLCAlZWN4CisJUE9QCSglZWRpKQorCWptcAlMKENhbGN1bGF0ZUxlbmd0aE9mU3JjKQorICAgICAgICBDRklfUFVTSCAgICAgKCVlZGkpCisKKwkucDJhbGlnbiA0CitMKEV4aXRIaWdoNENhc2UzKToKKwljbXAJJDUsICVlYngKKwlqZQlMKFN0cmxjcHlFeGl0NSkKKwljbXAJJDYsICVlYngKKwlqZQlMKFN0cmxjcHlFeGl0NikKKwljbXAJJDcsICVlYngKKwlqZQlMKFN0cmxjcHlFeGl0NykKK0woU3RybGNweUV4aXQ4KToKKwltb3ZiCSViaCwgNyglZWR4KQorCW1vdmwJKCVlY3gpLCAlZWF4CisJbW92bAklZWF4LCAoJWVkeCkKKwltb3ZsCTMoJWVjeCksICVlYXgKKwltb3ZsCSVlYXgsIDMoJWVkeCkKKworCWxlYQk4KCVlY3gpLCAlZWR4CisJbW92CSVlZGksICVlY3gKKwlQT1AJKCVlZGkpCisJam1wCUwoQ2FsY3VsYXRlTGVuZ3RoT2ZTcmMpCisgICAgICAgIENGSV9QVVNIICAgICAoJWVkaSkKKworCS5wMmFsaWduIDQKK0woRXhpdEhpZ2g4Q2FzZTMpOgorCWNtcAkkMTIsICVlYngKKwlqYQlMKEV4aXRIaWdoMTJDYXNlMykKKworCWNtcAkkOSwgJWVieAorCWplCUwoU3RybGNweUV4aXQ5KQorCWNtcAkkMTAsICVlYngKKwlqZQlMKFN0cmxjcHlFeGl0MTApCisJY21wCSQxMSwgJWVieAorCWplCUwoU3RybGNweUV4aXQxMSkKK0woU3RybGNweUV4aXQxMik6CisJbW92YgklYmgsIDExKCVlZHgpCisJbW92bHBkCSglZWN4KSwgJXhtbTAKKwltb3ZscGQJJXhtbTAsICglZWR4KQorCW1vdmwJNyglZWN4KSwgJWVheAorCW1vdmwJJWVheCwgNyglZWR4KQorCisJbGVhCTEyKCVlY3gpLCAlZWR4CisJbW92CSVlZGksICVlY3gKKwlQT1AJKCVlZGkpCisJam1wCUwoQ2FsY3VsYXRlTGVuZ3RoT2ZTcmMpCisgICAgICAgIENGSV9QVVNIICAgICAoJWVkaSkKKworCS5wMmFsaWduIDQKK0woRXhpdEhpZ2gxMkNhc2UzKToKKwljbXAJJDEzLCAlZWJ4CisJamUJTChTdHJsY3B5RXhpdDEzKQorCWNtcAkkMTQsICVlYngKKwlqZQlMKFN0cmxjcHlFeGl0MTQpCisJY21wCSQxNSwgJWVieAorCWplCUwoU3RybGNweUV4aXQxNSkKK0woU3RybGNweUV4aXQxNik6CisJbW92YgklYmgsIDE1KCVlZHgpCisJbW92bHBkCSglZWN4KSwgJXhtbTAKKwltb3ZscGQJJXhtbTAsICglZWR4KQorCW1vdmxwZAk3KCVlY3gpLCAleG1tMAorCW1vdmxwZAkleG1tMCwgNyglZWR4KQorCisJbGVhCTE2KCVlY3gpLCAlZWR4CisJbW92CSVlZGksICVlY3gKKwlQT1AJKCVlZGkpCisJam1wCUwoQ2FsY3VsYXRlTGVuZ3RoT2ZTcmMpCisgICAgICAgIENGSV9QVVNIICAgICAoJWVkaSkKKworCS5wMmFsaWduIDQKK0woU3RybGNweUV4aXQxKToKKwltb3ZiCSViaCwgKCVlZHgpCisKKwlsZWEJMSglZWN4KSwgJWVkeAorCW1vdgklZWRpLCAlZWN4CisJUE9QCSglZWRpKQorCWptcAlMKENhbGN1bGF0ZUxlbmd0aE9mU3JjKQorICAgICAgICBDRklfUFVTSCAgICAgKCVlZGkpCisKKwkucDJhbGlnbiA0CitMKEV4aXQxKToKKwltb3ZiCSglZWN4KSwgJWFsCisJbW92YgklYWwsICglZWR4KQorCisJbW92CSVlY3gsICVlYXgKKwlzdWIJJWVkaSwgJWVheAorCVJFVFVSTjEKKworCS5wMmFsaWduIDQKK0woU3RybGNweUV4aXQyKToKKwltb3ZiCSViaCwgMSglZWR4KQorCW1vdmIJKCVlY3gpLCAlYWwKKwltb3ZiCSVhbCwgKCVlZHgpCisKKwlsZWEJMiglZWN4KSwgJWVkeAorCW1vdgklZWRpLCAlZWN4CisJUE9QCSglZWRpKQorCWptcAlMKENhbGN1bGF0ZUxlbmd0aE9mU3JjKQorICAgICAgICBDRklfUFVTSCAgICAgKCVlZGkpCisKKwkucDJhbGlnbiA0CitMKEV4aXQyKToKKwltb3Z3CSglZWN4KSwgJWF4CisJbW92dwklYXgsICglZWR4KQorCW1vdmwJJWVkaSwgJWVheAorCisJbGVhCTEoJWVjeCksICVlYXgKKwlzdWIJJWVkaSwgJWVheAorCVJFVFVSTjEKKworCS5wMmFsaWduIDQKK0woU3RybGNweUV4aXQzKToKKwltb3ZiCSViaCwgMiglZWR4KQorCW1vdncJKCVlY3gpLCAlYXgKKwltb3Z3CSVheCwgKCVlZHgpCisKKwlsZWEJMyglZWN4KSwgJWVkeAorCW1vdgklZWRpLCAlZWN4CisJUE9QCSglZWRpKQorCWptcAlMKENhbGN1bGF0ZUxlbmd0aE9mU3JjKQorICAgICAgICBDRklfUFVTSCAgICAgKCVlZGkpCisKKwkucDJhbGlnbiA0CitMKEV4aXQzKToKKwltb3Z3CSglZWN4KSwgJWF4CisJbW92dwklYXgsICglZWR4KQorCW1vdmIJMiglZWN4KSwgJWFsCisJbW92YgklYWwsIDIoJWVkeCkKKworCWxlYQkyKCVlY3gpLCAlZWF4CisJc3ViCSVlZGksICVlYXgKKwlSRVRVUk4xCisKKwkucDJhbGlnbiA0CitMKFN0cmxjcHlFeGl0NSk6CisJbW92YgklYmgsIDQoJWVkeCkKKwltb3ZsCSglZWN4KSwgJWVheAorCW1vdmwJJWVheCwgKCVlZHgpCisJbW92bAklZWRpLCAlZWF4CisKKwlsZWEJNSglZWN4KSwgJWVkeAorCW1vdgklZWRpLCAlZWN4CisJUE9QCSglZWRpKQorCWptcAlMKENhbGN1bGF0ZUxlbmd0aE9mU3JjKQorICAgICAgICBDRklfUFVTSCAgICAgKCVlZGkpCisKKwkucDJhbGlnbiA0CitMKEV4aXQ1KToKKwltb3ZsCSglZWN4KSwgJWVheAorCW1vdmwJJWVheCwgKCVlZHgpCisJbW92Ygk0KCVlY3gpLCAlYWwKKwltb3ZiCSVhbCwgNCglZWR4KQorCisJbGVhCTQoJWVjeCksICVlYXgKKwlzdWIJJWVkaSwgJWVheAorCVJFVFVSTjEKKworCS5wMmFsaWduIDQKK0woU3RybGNweUV4aXQ2KToKKwltb3ZiCSViaCwgNSglZWR4KQorCW1vdmwJKCVlY3gpLCAlZWF4CisJbW92bAklZWF4LCAoJWVkeCkKKwltb3ZiCTQoJWVjeCksICVhbAorCW1vdmIJJWFsLCA0KCVlZHgpCisKKwlsZWEJNiglZWN4KSwgJWVkeAorCW1vdgklZWRpLCAlZWN4CisJUE9QCSglZWRpKQorCWptcAlMKENhbGN1bGF0ZUxlbmd0aE9mU3JjKQorICAgICAgICBDRklfUFVTSCAgICAgKCVlZGkpCisKKwkucDJhbGlnbiA0CitMKEV4aXQ2KToKKwltb3ZsCSglZWN4KSwgJWVheAorCW1vdmwJJWVheCwgKCVlZHgpCisJbW92dwk0KCVlY3gpLCAlYXgKKwltb3Z3CSVheCwgNCglZWR4KQorCisJbGVhCTUoJWVjeCksICVlYXgKKwlzdWIJJWVkaSwgJWVheAorCVJFVFVSTjEKKworCS5wMmFsaWduIDQKK0woU3RybGNweUV4aXQ3KToKKwltb3ZiCSViaCwgNiglZWR4KQorCW1vdmwJKCVlY3gpLCAlZWF4CisJbW92bAklZWF4LCAoJWVkeCkKKwltb3Z3CTQoJWVjeCksICVheAorCW1vdncJJWF4LCA0KCVlZHgpCisKKwlsZWEJNyglZWN4KSwgJWVkeAorCW1vdgklZWRpLCAlZWN4CisJUE9QCSglZWRpKQorCWptcAlMKENhbGN1bGF0ZUxlbmd0aE9mU3JjKQorICAgICAgICBDRklfUFVTSCAgICAgKCVlZGkpCisKKwkucDJhbGlnbiA0CitMKEV4aXQ3KToKKwltb3ZsCSglZWN4KSwgJWVheAorCW1vdmwJJWVheCwgKCVlZHgpCisJbW92bAkzKCVlY3gpLCAlZWF4CisJbW92bAklZWF4LCAzKCVlZHgpCisKKwlsZWEJNiglZWN4KSwgJWVheAorCXN1YgklZWRpLCAlZWF4CisJUkVUVVJOMQorCisJLnAyYWxpZ24gNAorTChTdHJsY3B5RXhpdDkpOgorCW1vdmIJJWJoLCA4KCVlZHgpCisJbW92bHBkCSglZWN4KSwgJXhtbTAKKwltb3ZscGQJJXhtbTAsICglZWR4KQorCisJbGVhCTkoJWVjeCksICVlZHgKKwltb3YJJWVkaSwgJWVjeAorCVBPUAkoJWVkaSkKKwlqbXAJTChDYWxjdWxhdGVMZW5ndGhPZlNyYykKKyAgICAgICAgQ0ZJX1BVU0ggICAgICglZWRpKQorCisJLnAyYWxpZ24gNAorTChFeGl0OSk6CisJbW92bHBkCSglZWN4KSwgJXhtbTAKKwltb3ZscGQJJXhtbTAsICglZWR4KQorCW1vdmIJOCglZWN4KSwgJWFsCisJbW92YgklYWwsIDgoJWVkeCkKKworCWxlYQk4KCVlY3gpLCAlZWF4CisJc3ViCSVlZGksICVlYXgKKwlSRVRVUk4xCisKKwkucDJhbGlnbiA0CitMKFN0cmxjcHlFeGl0MTApOgorCW1vdmIJJWJoLCA5KCVlZHgpCisJbW92bHBkCSglZWN4KSwgJXhtbTAKKwltb3ZscGQJJXhtbTAsICglZWR4KQorCW1vdmIJOCglZWN4KSwgJWFsCisJbW92YgklYWwsIDgoJWVkeCkKKworCWxlYQkxMCglZWN4KSwgJWVkeAorCW1vdgklZWRpLCAlZWN4CisJUE9QCSglZWRpKQorCWptcAlMKENhbGN1bGF0ZUxlbmd0aE9mU3JjKQorICAgICAgICBDRklfUFVTSCAgICAgKCVlZGkpCisKKwkucDJhbGlnbiA0CitMKEV4aXQxMCk6CisJbW92bHBkCSglZWN4KSwgJXhtbTAKKwltb3ZscGQJJXhtbTAsICglZWR4KQorCW1vdncJOCglZWN4KSwgJWF4CisJbW92dwklYXgsIDgoJWVkeCkKKworCWxlYQk5KCVlY3gpLCAlZWF4CisJc3ViCSVlZGksICVlYXgKKwlSRVRVUk4xCisKKwkucDJhbGlnbiA0CitMKFN0cmxjcHlFeGl0MTEpOgorCW1vdmIJJWJoLCAxMCglZWR4KQorCW1vdmxwZAkoJWVjeCksICV4bW0wCisJbW92bHBkCSV4bW0wLCAoJWVkeCkKKwltb3Z3CTgoJWVjeCksICVheAorCW1vdncJJWF4LCA4KCVlZHgpCisKKwlsZWEJMTEoJWVjeCksICVlZHgKKwltb3YJJWVkaSwgJWVjeAorCVBPUAkoJWVkaSkKKwlqbXAJTChDYWxjdWxhdGVMZW5ndGhPZlNyYykKKyAgICAgICAgQ0ZJX1BVU0ggICAgICglZWRpKQorCisJLnAyYWxpZ24gNAorTChFeGl0MTEpOgorCW1vdmxwZAkoJWVjeCksICV4bW0wCisJbW92bHBkCSV4bW0wLCAoJWVkeCkKKwltb3ZsCTcoJWVjeCksICVlYXgKKwltb3ZsCSVlYXgsIDcoJWVkeCkKKworCWxlYQkxMCglZWN4KSwgJWVheAorCXN1YgklZWRpLCAlZWF4CisJUkVUVVJOMQorCisJLnAyYWxpZ24gNAorTChTdHJsY3B5RXhpdDEzKToKKwltb3ZiCSViaCwgMTIoJWVkeCkKKwltb3ZscGQJKCVlY3gpLCAleG1tMAorCW1vdmxwZAkleG1tMCwgKCVlZHgpCisJbW92bAk4KCVlY3gpLCAlZWF4CisJbW92bAklZWF4LCA4KCVlZHgpCisKKwlsZWEJMTMoJWVjeCksICVlZHgKKwltb3YJJWVkaSwgJWVjeAorCVBPUAkoJWVkaSkKKwlqbXAJTChDYWxjdWxhdGVMZW5ndGhPZlNyYykKKyAgICAgICAgQ0ZJX1BVU0ggICAgICglZWRpKQorCisJLnAyYWxpZ24gNAorTChFeGl0MTMpOgorCW1vdmxwZAkoJWVjeCksICV4bW0wCisJbW92bHBkCSV4bW0wLCAoJWVkeCkKKwltb3ZscGQJNSglZWN4KSwgJXhtbTAKKwltb3ZscGQJJXhtbTAsIDUoJWVkeCkKKworCWxlYQkxMiglZWN4KSwgJWVheAorCXN1YgklZWRpLCAlZWF4CisJUkVUVVJOMQorCisJLnAyYWxpZ24gNAorTChTdHJsY3B5RXhpdDE0KToKKwltb3ZiCSViaCwgMTMoJWVkeCkKKwltb3ZscGQJKCVlY3gpLCAleG1tMAorCW1vdmxwZAkleG1tMCwgKCVlZHgpCisJbW92bHBkCTUoJWVjeCksICV4bW0wCisJbW92bHBkCSV4bW0wLCA1KCVlZHgpCisKKwlsZWEJMTQoJWVjeCksICVlZHgKKwltb3YJJWVkaSwgJWVjeAorCVBPUAkoJWVkaSkKKwlqbXAJTChDYWxjdWxhdGVMZW5ndGhPZlNyYykKKyAgICAgICAgQ0ZJX1BVU0ggICAgICglZWRpKQorCisJLnAyYWxpZ24gNAorTChFeGl0MTQpOgorCW1vdmxwZAkoJWVjeCksICV4bW0wCisJbW92bHBkCSV4bW0wLCAoJWVkeCkKKwltb3ZscGQJNiglZWN4KSwgJXhtbTAKKwltb3ZscGQJJXhtbTAsIDYoJWVkeCkKKworCWxlYQkxMyglZWN4KSwgJWVheAorCXN1YgklZWRpLCAlZWF4CisJUkVUVVJOMQorCisJLnAyYWxpZ24gNAorTChTdHJsY3B5RXhpdDE1KToKKwltb3ZiCSViaCwgMTQoJWVkeCkKKwltb3ZscGQJKCVlY3gpLCAleG1tMAorCW1vdmxwZAkleG1tMCwgKCVlZHgpCisJbW92bHBkCTYoJWVjeCksICV4bW0wCisJbW92bHBkCSV4bW0wLCA2KCVlZHgpCisKKwlsZWEJMTUoJWVjeCksICVlZHgKKwltb3YJJWVkaSwgJWVjeAorCVBPUAkoJWVkaSkKKwlqbXAJTChDYWxjdWxhdGVMZW5ndGhPZlNyYykKKyAgICAgICAgQ0ZJX1BVU0ggICAgICglZWRpKQorCisJLnAyYWxpZ24gNAorTChFeGl0MTUpOgorCW1vdmxwZAkoJWVjeCksICV4bW0wCisJbW92bHBkCSV4bW0wLCAoJWVkeCkKKwltb3ZscGQJNyglZWN4KSwgJXhtbTAKKwltb3ZscGQJJXhtbTAsIDcoJWVkeCkKKworCWxlYQkxNCglZWN4KSwgJWVheAorCXN1YgklZWRpLCAlZWF4CisJUkVUVVJOMQorCisJLnAyYWxpZ24gNAorTChTdHJuY3B5RXhpdDE1Qnl0ZXMpOgorCWNtcAkkMTIsICVlYngKKwlqYQlMKFN0cm5jcHlFeGl0MTVCeXRlczEpCisKKwljbXBiCSQwLCA4KCVlY3gpCisJanoJTChFeGl0OSkKKwljbXAJJDksICVlYngKKwlqZQlMKFN0cmxjcHlFeGl0OSkKKworCWNtcGIJJDAsIDkoJWVjeCkKKwlqeglMKEV4aXQxMCkKKwljbXAJJDEwLCAlZWJ4CisJamUJTChTdHJsY3B5RXhpdDEwKQorCisJY21wYgkkMCwgMTAoJWVjeCkKKwlqeglMKEV4aXQxMSkKKwljbXAJJDExLCAlZWJ4CisJamUJTChTdHJsY3B5RXhpdDExKQorCisJY21wYgkkMCwgMTEoJWVjeCkKKwlqeglMKEV4aXQxMikKKwlqbXAJTChTdHJsY3B5RXhpdDEyKQorCisJLnAyYWxpZ24gNAorTChTdHJuY3B5RXhpdDE1Qnl0ZXMxKToKKwljbXBiCSQwLCA4KCVlY3gpCisJanoJTChFeGl0OSkKKwljbXBiCSQwLCA5KCVlY3gpCisJanoJTChFeGl0MTApCisJY21wYgkkMCwgMTAoJWVjeCkKKwlqeglMKEV4aXQxMSkKKwljbXBiCSQwLCAxMSglZWN4KQorCWp6CUwoRXhpdDEyKQorCisJY21wYgkkMCwgMTIoJWVjeCkKKwlqeglMKEV4aXQxMykKKwljbXAJJDEzLCAlZWJ4CisJamUJTChTdHJsY3B5RXhpdDEzKQorCisJY21wYgkkMCwgMTMoJWVjeCkKKwlqeglMKEV4aXQxNCkKKwljbXAJJDE0LCAlZWJ4CisJamUJTChTdHJsY3B5RXhpdDE0KQorCisJY21wYgkkMCwgMTQoJWVjeCkKKwlqeglMKEV4aXQxNSkKKwlqbXAJTChTdHJsY3B5RXhpdDE1KQorCisJLnAyYWxpZ24gNAorTChTdHJuY3B5RXhpdDhCeXRlcyk6CisJY21wCSQ0LCAlZWJ4CisJamEJTChTdHJuY3B5RXhpdDhCeXRlczEpCisKKwljbXBiCSQwLCAoJWVjeCkKKwlqeglMKEV4aXQxKQorCWNtcAkkMSwgJWVieAorCWplCUwoU3RybGNweUV4aXQxKQorCisJY21wYgkkMCwgMSglZWN4KQorCWp6CUwoRXhpdDIpCisJY21wCSQyLCAlZWJ4CisJamUJTChTdHJsY3B5RXhpdDIpCisKKwljbXBiCSQwLCAyKCVlY3gpCisJanoJTChFeGl0MykKKwljbXAJJDMsICVlYngKKwlqZQlMKFN0cmxjcHlFeGl0MykKKworCWNtcGIJJDAsIDMoJWVjeCkKKwlqeglMKEV4aXQ0KQorCWptcAlMKFN0cmxjcHlFeGl0NCkKKworCS5wMmFsaWduIDQKK0woU3RybmNweUV4aXQ4Qnl0ZXMxKToKKwljbXBiCSQwLCAoJWVjeCkKKwlqeglMKEV4aXQxKQorCWNtcGIJJDAsIDEoJWVjeCkKKwlqeglMKEV4aXQyKQorCWNtcGIJJDAsIDIoJWVjeCkKKwlqeglMKEV4aXQzKQorCWNtcGIJJDAsIDMoJWVjeCkKKwlqeglMKEV4aXQ0KQorCisJY21wYgkkMCwgNCglZWN4KQorCWp6CUwoRXhpdDUpCisJY21wCSQ1LCAlZWJ4CisJamUJTChTdHJsY3B5RXhpdDUpCisKKwljbXBiCSQwLCA1KCVlY3gpCisJanoJTChFeGl0NikKKwljbXAJJDYsICVlYngKKwlqZQlMKFN0cmxjcHlFeGl0NikKKworCWNtcGIJJDAsIDYoJWVjeCkKKwlqeglMKEV4aXQ3KQorCWNtcAkkNywgJWVieAorCWplCUwoU3RybGNweUV4aXQ3KQorCisJY21wYgkkMCwgNyglZWN4KQorCWp6CUwoRXhpdDgpCisJam1wCUwoU3RybGNweUV4aXQ4KQorCisJQ0ZJX1BPUAkoJWVkaSkKKworCisJLnAyYWxpZ24gNAorTChQcm9sb2dfcmV0dXJuX3N0YXJ0X2xlbik6CisJbW92bAlMRU4oJWVzcCksICVlYngKKyAgICAgICAgbW92bAlTUkMoJWVzcCksICVlY3gKK0woQ2FsY3VsYXRlTGVuZ3RoT2ZTcmNQcm9sb2cpOgorCW1vdgklZWN4LCAlZWR4CisJc3ViCSVlYngsICVlY3gKKworCS5wMmFsaWduIDQKK0woQ2FsY3VsYXRlTGVuZ3RoT2ZTcmMpOgorCWNtcGIJJDAsICglZWR4KQorCWp6CUwoZXhpdF90YWlsMCkKKwljbXBiCSQwLCAxKCVlZHgpCisJanoJTChleGl0X3RhaWwxKQorCWNtcGIJJDAsIDIoJWVkeCkKKwlqeglMKGV4aXRfdGFpbDIpCisJY21wYgkkMCwgMyglZWR4KQorCWp6CUwoZXhpdF90YWlsMykKKworCWNtcGIJJDAsIDQoJWVkeCkKKwlqeglMKGV4aXRfdGFpbDQpCisJY21wYgkkMCwgNSglZWR4KQorCWp6CUwoZXhpdF90YWlsNSkKKwljbXBiCSQwLCA2KCVlZHgpCisJanoJTChleGl0X3RhaWw2KQorCWNtcGIJJDAsIDcoJWVkeCkKKwlqeglMKGV4aXRfdGFpbDcpCisKKwljbXBiCSQwLCA4KCVlZHgpCisJanoJTChleGl0X3RhaWw4KQorCWNtcGIJJDAsIDkoJWVkeCkKKwlqeglMKGV4aXRfdGFpbDkpCisJY21wYgkkMCwgMTAoJWVkeCkKKwlqeglMKGV4aXRfdGFpbDEwKQorCWNtcGIJJDAsIDExKCVlZHgpCisJanoJTChleGl0X3RhaWwxMSkKKworCWNtcGIJJDAsIDEyKCVlZHgpCisJanoJTChleGl0X3RhaWwxMikKKwljbXBiCSQwLCAxMyglZWR4KQorCWp6CUwoZXhpdF90YWlsMTMpCisJY21wYgkkMCwgMTQoJWVkeCkKKwlqeglMKGV4aXRfdGFpbDE0KQorCWNtcGIJJDAsIDE1KCVlZHgpCisJanoJTChleGl0X3RhaWwxNSkKKworCXB4b3IJJXhtbTAsICV4bW0wCisJbGVhCTE2KCVlZHgpLCAlZWF4CisJYWRkCSQxNiwgJWVjeAorCWFuZAkkLTE2LCAlZWF4CisKKwlwY21wZXFiCSglZWF4KSwgJXhtbTAKKwlwbW92bXNrYiAleG1tMCwgJWVkeAorCXB4b3IJJXhtbTEsICV4bW0xCisJbGVhCTE2KCVlYXgpLCAlZWF4CisJdGVzdAklZWR4LCAlZWR4CisJam56CUwoZXhpdCkKKworCXBjbXBlcWIJKCVlYXgpLCAleG1tMQorCXBtb3Ztc2tiICV4bW0xLCAlZWR4CisJcHhvcgkleG1tMiwgJXhtbTIKKwlsZWEJMTYoJWVheCksICVlYXgKKwl0ZXN0CSVlZHgsICVlZHgKKwlqbnoJTChleGl0KQorCisJcGNtcGVxYgkoJWVheCksICV4bW0yCisJcG1vdm1za2IgJXhtbTIsICVlZHgKKwlweG9yCSV4bW0zLCAleG1tMworCWxlYQkxNiglZWF4KSwgJWVheAorCXRlc3QJJWVkeCwgJWVkeAorCWpueglMKGV4aXQpCisKKwlwY21wZXFiCSglZWF4KSwgJXhtbTMKKwlwbW92bXNrYiAleG1tMywgJWVkeAorCWxlYQkxNiglZWF4KSwgJWVheAorCXRlc3QJJWVkeCwgJWVkeAorCWpueglMKGV4aXQpCisKKwlwY21wZXFiCSglZWF4KSwgJXhtbTAKKwlwbW92bXNrYiAleG1tMCwgJWVkeAorCWxlYQkxNiglZWF4KSwgJWVheAorCXRlc3QJJWVkeCwgJWVkeAorCWpueglMKGV4aXQpCisKKwlwY21wZXFiCSglZWF4KSwgJXhtbTEKKwlwbW92bXNrYiAleG1tMSwgJWVkeAorCWxlYQkxNiglZWF4KSwgJWVheAorCXRlc3QJJWVkeCwgJWVkeAorCWpueglMKGV4aXQpCisKKwlwY21wZXFiCSglZWF4KSwgJXhtbTIKKwlwbW92bXNrYiAleG1tMiwgJWVkeAorCWxlYQkxNiglZWF4KSwgJWVheAorCXRlc3QJJWVkeCwgJWVkeAorCWpueglMKGV4aXQpCisKKwlwY21wZXFiCSglZWF4KSwgJXhtbTMKKwlwbW92bXNrYiAleG1tMywgJWVkeAorCWxlYQkxNiglZWF4KSwgJWVheAorCXRlc3QJJWVkeCwgJWVkeAorCWpueglMKGV4aXQpCisKKwlwY21wZXFiCSglZWF4KSwgJXhtbTAKKwlwbW92bXNrYiAleG1tMCwgJWVkeAorCWxlYQkxNiglZWF4KSwgJWVheAorCXRlc3QJJWVkeCwgJWVkeAorCWpueglMKGV4aXQpCisKKwlwY21wZXFiCSglZWF4KSwgJXhtbTEKKwlwbW92bXNrYiAleG1tMSwgJWVkeAorCWxlYQkxNiglZWF4KSwgJWVheAorCXRlc3QJJWVkeCwgJWVkeAorCWpueglMKGV4aXQpCisKKwlwY21wZXFiCSglZWF4KSwgJXhtbTIKKwlwbW92bXNrYiAleG1tMiwgJWVkeAorCWxlYQkxNiglZWF4KSwgJWVheAorCXRlc3QJJWVkeCwgJWVkeAorCWpueglMKGV4aXQpCisKKwlwY21wZXFiCSglZWF4KSwgJXhtbTMKKwlwbW92bXNrYiAleG1tMywgJWVkeAorCWxlYQkxNiglZWF4KSwgJWVheAorCXRlc3QJJWVkeCwgJWVkeAorCWpueglMKGV4aXQpCisKKwlwY21wZXFiCSglZWF4KSwgJXhtbTAKKwlwbW92bXNrYiAleG1tMCwgJWVkeAorCWxlYQkxNiglZWF4KSwgJWVheAorCXRlc3QJJWVkeCwgJWVkeAorCWpueglMKGV4aXQpCisKKwlwY21wZXFiCSglZWF4KSwgJXhtbTEKKwlwbW92bXNrYiAleG1tMSwgJWVkeAorCWxlYQkxNiglZWF4KSwgJWVheAorCXRlc3QJJWVkeCwgJWVkeAorCWpueglMKGV4aXQpCisKKwlwY21wZXFiCSglZWF4KSwgJXhtbTIKKwlwbW92bXNrYiAleG1tMiwgJWVkeAorCWxlYQkxNiglZWF4KSwgJWVheAorCXRlc3QJJWVkeCwgJWVkeAorCWpueglMKGV4aXQpCisKKwlwY21wZXFiCSglZWF4KSwgJXhtbTMKKwlwbW92bXNrYiAleG1tMywgJWVkeAorCWxlYQkxNiglZWF4KSwgJWVheAorCXRlc3QJJWVkeCwgJWVkeAorCWpueglMKGV4aXQpCisKKwlhbmQJJC0weDQwLCAlZWF4CisKKwkucDJhbGlnbiA0CitMKGFsaWduZWRfNjRfbG9vcCk6CisJbW92YXBzCSglZWF4KSwgJXhtbTAKKwltb3ZhcHMJMTYoJWVheCksICV4bW0xCisJbW92YXBzCTMyKCVlYXgpLCAleG1tMgorCW1vdmFwcwk0OCglZWF4KSwgJXhtbTYKKwlwbWludWIJJXhtbTEsICV4bW0wCisJcG1pbnViCSV4bW02LCAleG1tMgorCXBtaW51YgkleG1tMCwgJXhtbTIKKwlwY21wZXFiCSV4bW0zLCAleG1tMgorCXBtb3Ztc2tiICV4bW0yLCAlZWR4CisJbGVhCTY0KCVlYXgpLCAlZWF4CisJdGVzdAklZWR4LCAlZWR4CisJanoJTChhbGlnbmVkXzY0X2xvb3ApCisKKwlwY21wZXFiCS02NCglZWF4KSwgJXhtbTMKKwlwbW92bXNrYiAleG1tMywgJWVkeAorCWxlYQk0OCglZWN4KSwgJWVjeAorCXRlc3QJJWVkeCwgJWVkeAorCWpueglMKGV4aXQpCisKKwlwY21wZXFiCSV4bW0xLCAleG1tMworCXBtb3Ztc2tiICV4bW0zLCAlZWR4CisJbGVhCS0xNiglZWN4KSwgJWVjeAorCXRlc3QJJWVkeCwgJWVkeAorCWpueglMKGV4aXQpCisKKwlwY21wZXFiCS0zMiglZWF4KSwgJXhtbTMKKwlwbW92bXNrYiAleG1tMywgJWVkeAorCWxlYQktMTYoJWVjeCksICVlY3gKKwl0ZXN0CSVlZHgsICVlZHgKKwlqbnoJTChleGl0KQorCisJcGNtcGVxYgkleG1tNiwgJXhtbTMKKwlwbW92bXNrYiAleG1tMywgJWVkeAorCWxlYQktMTYoJWVjeCksICVlY3gKKworCS5wMmFsaWduIDQKK0woZXhpdCk6CisJc3ViCSVlY3gsICVlYXgKKwl0ZXN0CSVkbCwgJWRsCisJanoJTChleGl0X21vcmVfOCkKKworCW1vdgklZGwsICVjbAorCWFuZAkkMTUsICVjbAorCWp6CUwoZXhpdF9tb3JlXzQpCisJdGVzdAkkMHgwMSwgJWRsCisJam56CUwoZXhpdF8wKQorCXRlc3QJJDB4MDIsICVkbAorCWpueglMKGV4aXRfMSkKKwl0ZXN0CSQweDA0LCAlZGwKKwlqbnoJTChleGl0XzIpCisJYWRkCSQzLCAlZWF4CisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKGV4aXRfbW9yZV80KToKKwl0ZXN0CSQweDEwLCAlZGwKKwlqbnoJTChleGl0XzQpCisJdGVzdAkkMHgyMCwgJWRsCisJam56CUwoZXhpdF81KQorCXRlc3QJJDB4NDAsICVkbAorCWpueglMKGV4aXRfNikKKwlhZGQJJDcsICVlYXgKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woZXhpdF9tb3JlXzgpOgorCW1vdgklZGgsICVjaAorCWFuZAkkMTUsICVjaAorCWp6CUwoZXhpdF9tb3JlXzEyKQorCXRlc3QJJDB4MDEsICVkaAorCWpueglMKGV4aXRfOCkKKwl0ZXN0CSQweDAyLCAlZGgKKwlqbnoJTChleGl0XzkpCisJdGVzdAkkMHgwNCwgJWRoCisJam56CUwoZXhpdF8xMCkKKwlhZGQJJDExLCAlZWF4CisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKGV4aXRfbW9yZV8xMik6CisJdGVzdAkkMHgxMCwgJWRoCisJam56CUwoZXhpdF8xMikKKwl0ZXN0CSQweDIwLCAlZGgKKwlqbnoJTChleGl0XzEzKQorCXRlc3QJJDB4NDAsICVkaAorCWpueglMKGV4aXRfMTQpCisJYWRkCSQxNSwgJWVheAorTChleGl0XzApOgorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChleGl0XzEpOgorCWFkZAkkMSwgJWVheAorCVJFVFVSTgorCitMKGV4aXRfMik6CisJYWRkCSQyLCAlZWF4CisJUkVUVVJOCisKK0woZXhpdF8zKToKKwlhZGQJJDMsICVlYXgKKwlSRVRVUk4KKworTChleGl0XzQpOgorCWFkZAkkNCwgJWVheAorCVJFVFVSTgorCitMKGV4aXRfNSk6CisJYWRkCSQ1LCAlZWF4CisJUkVUVVJOCisKK0woZXhpdF82KToKKwlhZGQJJDYsICVlYXgKKwlSRVRVUk4KKworTChleGl0XzcpOgorCWFkZAkkNywgJWVheAorCVJFVFVSTgorCitMKGV4aXRfOCk6CisJYWRkCSQ4LCAlZWF4CisJUkVUVVJOCisKK0woZXhpdF85KToKKwlhZGQJJDksICVlYXgKKwlSRVRVUk4KKworTChleGl0XzEwKToKKwlhZGQJJDEwLCAlZWF4CisJUkVUVVJOCisKK0woZXhpdF8xMSk6CisJYWRkCSQxMSwgJWVheAorCVJFVFVSTgorCitMKGV4aXRfMTIpOgorCWFkZAkkMTIsICVlYXgKKwlSRVRVUk4KKworTChleGl0XzEzKToKKwlhZGQJJDEzLCAlZWF4CisJUkVUVVJOCisKK0woZXhpdF8xNCk6CisJYWRkCSQxNCwgJWVheAorCVJFVFVSTgorCitMKGV4aXRfMTUpOgorCWFkZAkkMTUsICVlYXgKKwlSRVRVUk4KKworTChleGl0X3RhaWwwKToKKwltb3YJJWVkeCwgJWVheAorCXN1YgklZWN4LCAlZWF4CisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKGV4aXRfdGFpbDEpOgorCWxlYQkxKCVlZHgpLCAlZWF4CisJc3ViCSVlY3gsICVlYXgKKwlSRVRVUk4KKworTChleGl0X3RhaWwyKToKKwlsZWEJMiglZWR4KSwgJWVheAorCXN1YgklZWN4LCAlZWF4CisJUkVUVVJOCisKK0woZXhpdF90YWlsMyk6CisJbGVhCTMoJWVkeCksICVlYXgKKwlzdWIJJWVjeCwgJWVheAorCVJFVFVSTgorCitMKGV4aXRfdGFpbDQpOgorCWxlYQk0KCVlZHgpLCAlZWF4CisJc3ViCSVlY3gsICVlYXgKKwlSRVRVUk4KKworTChleGl0X3RhaWw1KToKKwlsZWEJNSglZWR4KSwgJWVheAorCXN1YgklZWN4LCAlZWF4CisJUkVUVVJOCisKK0woZXhpdF90YWlsNik6CisJbGVhCTYoJWVkeCksICVlYXgKKwlzdWIJJWVjeCwgJWVheAorCVJFVFVSTgorCitMKGV4aXRfdGFpbDcpOgorCWxlYQk3KCVlZHgpLCAlZWF4CisJc3ViCSVlY3gsICVlYXgKKwlSRVRVUk4KKworTChleGl0X3RhaWw4KToKKwlsZWEJOCglZWR4KSwgJWVheAorCXN1YgklZWN4LCAlZWF4CisJUkVUVVJOCisKK0woZXhpdF90YWlsOSk6CisJbGVhCTkoJWVkeCksICVlYXgKKwlzdWIJJWVjeCwgJWVheAorCVJFVFVSTgorCitMKGV4aXRfdGFpbDEwKToKKwlsZWEJMTAoJWVkeCksICVlYXgKKwlzdWIJJWVjeCwgJWVheAorCVJFVFVSTgorCitMKGV4aXRfdGFpbDExKToKKwlsZWEJMTEoJWVkeCksICVlYXgKKwlzdWIJJWVjeCwgJWVheAorCVJFVFVSTgorCitMKGV4aXRfdGFpbDEyKToKKwlsZWEJMTIoJWVkeCksICVlYXgKKwlzdWIJJWVjeCwgJWVheAorCVJFVFVSTgorCitMKGV4aXRfdGFpbDEzKToKKwlsZWEJMTMoJWVkeCksICVlYXgKKwlzdWIJJWVjeCwgJWVheAorCVJFVFVSTgorCitMKGV4aXRfdGFpbDE0KToKKwlsZWEJMTQoJWVkeCksICVlYXgKKwlzdWIJJWVjeCwgJWVheAorCVJFVFVSTgorCitMKGV4aXRfdGFpbDE1KToKKwlsZWEJMTUoJWVkeCksICVlYXgKKwlzdWIJJWVjeCwgJWVheAorCVJFVFVSTgorCitFTkQgKHN0cmxjYXQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N0cmluZy9zc3NlMy1zdHJsY3B5LWF0b20uUyBiL2xpYmMvYXJjaC14ODYvc3RyaW5nL3Nzc2UzLXN0cmxjcHktYXRvbS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkYjE3Y2MKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N0cmluZy9zc3NlMy1zdHJsY3B5LWF0b20uUwpAQCAtMCwwICsxLDE0MDMgQEAKKy8qCitDb3B5cmlnaHQgKGMpIDIwMTEsIEludGVsIENvcnBvcmF0aW9uCitBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgICAgKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgICAgKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgICAgKiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKworICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBJbnRlbCBDb3Jwb3JhdGlvbiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAgICAqIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICAgICogd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKK0FOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECitXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCitESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCitBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyhJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKK0xPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyhJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCitTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisKKyNkZWZpbmUgVVNFX0FTX1NUUk5DUFkKKyNkZWZpbmUgU1RSQ1BZIHN0cmxjcHkKKyNkZWZpbmUgU1RSTEVOIHN0cmxjcHkKKyNkZWZpbmUgVVNFX0FTX1NUUkxDUFkKKyNpbmNsdWRlICJzc3NlMy1zdHJjcHktYXRvbS5TIgorCisJLnAyYWxpZ24gNAorTChDb3B5RnJvbTFUbzE2Qnl0ZXMpOgorCWFkZAklZXNpLCAlZWR4CisJYWRkCSVlc2ksICVlY3gKKworCVBPUAkoJWVzaSkKKwl0ZXN0CSVhbCwgJWFsCisJanoJTChFeGl0SGlnaDgpCisKK0woQ29weUZyb20xVG8xNkJ5dGVzTGVzczgpOgorCW1vdgklYWwsICVhaAorCWFuZAkkMTUsICVhaAorCWp6CUwoRXhpdEhpZ2g0KQorCisJdGVzdAkkMHgwMSwgJWFsCisJam56CUwoRXhpdDEpCisJdGVzdAkkMHgwMiwgJWFsCisJam56CUwoRXhpdDIpCisJdGVzdAkkMHgwNCwgJWFsCisJam56CUwoRXhpdDMpCitMKEV4aXQ0KToKKwltb3ZsCSglZWN4KSwgJWVheAorCW1vdmwJJWVheCwgKCVlZHgpCisKKwlsZWEJMyglZWN4KSwgJWVheAorCXN1YgklZWRpLCAlZWF4CisJUkVUVVJOMQorCisJLnAyYWxpZ24gNAorTChFeGl0SGlnaDQpOgorCXRlc3QJJDB4MTAsICVhbAorCWpueglMKEV4aXQ1KQorCXRlc3QJJDB4MjAsICVhbAorCWpueglMKEV4aXQ2KQorCXRlc3QJJDB4NDAsICVhbAorCWpueglMKEV4aXQ3KQorTChFeGl0OCk6CisJbW92bHBkCSglZWN4KSwgJXhtbTAKKwltb3ZscGQJJXhtbTAsICglZWR4KQorCisJbGVhCTcoJWVjeCksICVlYXgKKwlzdWIJJWVkaSwgJWVheAorCVJFVFVSTjEKKworCS5wMmFsaWduIDQKK0woRXhpdEhpZ2g4KToKKwltb3YJJWFoLCAlYWwKKwlhbmQJJDE1LCAlYWwKKwlqeglMKEV4aXRIaWdoMTIpCisKKwl0ZXN0CSQweDAxLCAlYWgKKwlqbnoJTChFeGl0OSkKKwl0ZXN0CSQweDAyLCAlYWgKKwlqbnoJTChFeGl0MTApCisJdGVzdAkkMHgwNCwgJWFoCisJam56CUwoRXhpdDExKQorTChFeGl0MTIpOgorCW1vdmxwZAkoJWVjeCksICV4bW0wCisJbW92bHBkCSV4bW0wLCAoJWVkeCkKKwltb3ZsCTgoJWVjeCksICVlYXgKKwltb3ZsCSVlYXgsIDgoJWVkeCkKKworCWxlYQkxMSglZWN4KSwgJWVheAorCXN1YgklZWRpLCAlZWF4CisJUkVUVVJOMQorCisJLnAyYWxpZ24gNAorTChFeGl0SGlnaDEyKToKKwl0ZXN0CSQweDEwLCAlYWgKKwlqbnoJTChFeGl0MTMpCisJdGVzdAkkMHgyMCwgJWFoCisJam56CUwoRXhpdDE0KQorCXRlc3QJJDB4NDAsICVhaAorCWpueglMKEV4aXQxNSkKK0woRXhpdDE2KToKKwltb3ZscGQJKCVlY3gpLCAleG1tMAorCW1vdmxwZAk4KCVlY3gpLCAleG1tMQorCW1vdmxwZAkleG1tMCwgKCVlZHgpCisJbW92bHBkCSV4bW0xLCA4KCVlZHgpCisKKwlsZWEJMTUoJWVjeCksICVlYXgKKwlzdWIJJWVkaSwgJWVheAorCVJFVFVSTjEKKworCUNGSV9QVVNIKCVlc2kpCisKKwkucDJhbGlnbiA0CitMKENvcHlGcm9tMVRvMTZCeXRlc0Nhc2UyKToKKwlhZGQJJDE2LCAlZWJ4CisJYWRkCSVlc2ksICVlY3gKKyAgICAgICAgYWRkICAgICAlZXNpLCAlZWR4CisKKwlQT1AJKCVlc2kpCisKKyAgICAgICAgdGVzdCAgICAlYWwsICVhbAorICAgICAgICBqeiAgICAgIEwoRXhpdEhpZ2hDYXNlMikKKworICAgICAgICBjbXAgICAgICQ4LCAlZWJ4CisgICAgICAgIGphICAgICAgTChDb3B5RnJvbTFUbzE2Qnl0ZXNMZXNzOCkKKworCXRlc3QJJDB4MDEsICVhbAorCWpueglMKEV4aXQxKQorCWNtcAkkMSwgJWVieAorCWplCUwoU3RybGNweUV4aXQxKQorCXRlc3QJJDB4MDIsICVhbAorCWpueglMKEV4aXQyKQorCWNtcAkkMiwgJWVieAorCWplCUwoU3RybGNweUV4aXQyKQorCXRlc3QJJDB4MDQsICVhbAorCWpueglMKEV4aXQzKQorCWNtcAkkMywgJWVieAorCWplCUwoU3RybGNweUV4aXQzKQorCXRlc3QJJDB4MDgsICVhbAorCWpueglMKEV4aXQ0KQorCWNtcAkkNCwgJWVieAorCWplCUwoU3RybGNweUV4aXQ0KQorCXRlc3QJJDB4MTAsICVhbAorCWpueglMKEV4aXQ1KQorCWNtcAkkNSwgJWVieAorCWplCUwoU3RybGNweUV4aXQ1KQorCXRlc3QJJDB4MjAsICVhbAorCWpueglMKEV4aXQ2KQorCWNtcAkkNiwgJWVieAorCWplCUwoU3RybGNweUV4aXQ2KQorCXRlc3QJJDB4NDAsICVhbAorCWpueglMKEV4aXQ3KQorCWNtcAkkNywgJWVieAorCWplCUwoU3RybGNweUV4aXQ3KQorCXRlc3QJJDB4ODAsICVhbAorCWpueglMKEV4aXQ4KQorCWptcAlMKFN0cmxjcHlFeGl0OCkKKworCS5wMmFsaWduIDQKK0woRXhpdEhpZ2hDYXNlMik6CisgICAgICAgIGNtcCAgICAgJDgsICVlYngKKyAgICAgICAgamJlICAgICAgTChDb3B5RnJvbTFUbzE2Qnl0ZXNMZXNzOENhc2UzKQorCisJdGVzdAkkMHgwMSwgJWFoCisJam56CUwoRXhpdDkpCisJY21wCSQ5LCAlZWJ4CisJamUJTChTdHJsY3B5RXhpdDkpCisJdGVzdAkkMHgwMiwgJWFoCisJam56CUwoRXhpdDEwKQorCWNtcAkkMTAsICVlYngKKwlqZQlMKFN0cmxjcHlFeGl0MTApCisJdGVzdAkkMHgwNCwgJWFoCisJam56CUwoRXhpdDExKQorCWNtcAkkMTEsICVlYngKKwlqZQlMKFN0cmxjcHlFeGl0MTEpCisJdGVzdAkkMHg4LCAlYWgKKwlqbnoJTChFeGl0MTIpCisJY21wCSQxMiwgJWVieAorCWplCUwoU3RybGNweUV4aXQxMikKKwl0ZXN0CSQweDEwLCAlYWgKKwlqbnoJTChFeGl0MTMpCisJY21wCSQxMywgJWVieAorCWplCUwoU3RybGNweUV4aXQxMykKKwl0ZXN0CSQweDIwLCAlYWgKKwlqbnoJTChFeGl0MTQpCisJY21wCSQxNCwgJWVieAorCWplCUwoU3RybGNweUV4aXQxNCkKKwl0ZXN0CSQweDQwLCAlYWgKKwlqbnoJTChFeGl0MTUpCisJY21wCSQxNSwgJWVieAorCWplCUwoU3RybGNweUV4aXQxNSkKKwl0ZXN0CSQweDgwLCAlYWgKKwlqbnoJTChFeGl0MTYpCisJam1wCUwoU3RybGNweUV4aXQxNikKKworCUNGSV9QVVNIKCVlc2kpCisKKwkucDJhbGlnbiA0CitMKENvcHlGcm9tMVRvMTZCeXRlc0Nhc2UyT3JDYXNlMyk6CisJdGVzdAklZWF4LCAlZWF4CisJam56CUwoQ29weUZyb20xVG8xNkJ5dGVzQ2FzZTIpCisKKwkucDJhbGlnbiA0CitMKENvcHlGcm9tMVRvMTZCeXRlc0Nhc2UzKToKKwlhZGQJJDE2LCAlZWJ4CisJYWRkCSVlc2ksICVlZHgKKwlhZGQJJWVzaSwgJWVjeAorCisJUE9QCSglZXNpKQorCisJY21wCSQ4LCAlZWJ4CisJamEJTChFeGl0SGlnaDhDYXNlMykKKworTChDb3B5RnJvbTFUbzE2Qnl0ZXNMZXNzOENhc2UzKToKKwljbXAJJDQsICVlYngKKwlqYQlMKEV4aXRIaWdoNENhc2UzKQorCisJY21wCSQxLCAlZWJ4CisJamUJTChTdHJsY3B5RXhpdDEpCisJY21wCSQyLCAlZWJ4CisJamUJTChTdHJsY3B5RXhpdDIpCisJY21wCSQzLCAlZWJ4CisJamUJTChTdHJsY3B5RXhpdDMpCitMKFN0cmxjcHlFeGl0NCk6CisJbW92YgklYmgsIDMoJWVkeCkKKwltb3Z3CSglZWN4KSwgJWF4CisJbW92dwklYXgsICglZWR4KQorCW1vdmIJMiglZWN4KSwgJWFsCisJbW92YgklYWwsIDIoJWVkeCkKKworCWxlYQk0KCVlY3gpLCAlZWR4CisJbW92CSVlZGksICVlY3gKKyAgICAgICAgUE9QICAgICAoJWVkaSkKKwlqbXAJTChDYWxjdWxhdGVMZW5ndGhPZlNyYykKKyAgICAgICAgQ0ZJX1BVU0ggICAgICglZWRpKQorCisJLnAyYWxpZ24gNAorTChFeGl0SGlnaDRDYXNlMyk6CisJY21wCSQ1LCAlZWJ4CisJamUJTChTdHJsY3B5RXhpdDUpCisJY21wCSQ2LCAlZWJ4CisJamUJTChTdHJsY3B5RXhpdDYpCisJY21wCSQ3LCAlZWJ4CisJamUJTChTdHJsY3B5RXhpdDcpCitMKFN0cmxjcHlFeGl0OCk6CisJbW92YgklYmgsIDcoJWVkeCkKKwltb3ZsCSglZWN4KSwgJWVheAorCW1vdmwJJWVheCwgKCVlZHgpCisJbW92bAkzKCVlY3gpLCAlZWF4CisJbW92bAklZWF4LCAzKCVlZHgpCisKKwlsZWEJOCglZWN4KSwgJWVkeAorCW1vdgklZWRpLCAlZWN4CisgICAgICAgIFBPUCAgICAgKCVlZGkpCisJam1wCUwoQ2FsY3VsYXRlTGVuZ3RoT2ZTcmMpCisgICAgICAgIENGSV9QVVNIICAgICAoJWVkaSkKKworCS5wMmFsaWduIDQKK0woRXhpdEhpZ2g4Q2FzZTMpOgorCWNtcAkkMTIsICVlYngKKwlqYQlMKEV4aXRIaWdoMTJDYXNlMykKKworCWNtcAkkOSwgJWVieAorCWplCUwoU3RybGNweUV4aXQ5KQorCWNtcAkkMTAsICVlYngKKwlqZQlMKFN0cmxjcHlFeGl0MTApCisJY21wCSQxMSwgJWVieAorCWplCUwoU3RybGNweUV4aXQxMSkKK0woU3RybGNweUV4aXQxMik6CisJbW92YgklYmgsIDExKCVlZHgpCisJbW92bHBkCSglZWN4KSwgJXhtbTAKKwltb3ZscGQJJXhtbTAsICglZWR4KQorCW1vdmwJNyglZWN4KSwgJWVheAorCW1vdmwJJWVheCwgNyglZWR4KQorCisJbGVhCTEyKCVlY3gpLCAlZWR4CisJbW92CSVlZGksICVlY3gKKyAgICAgICAgUE9QICAgICAoJWVkaSkKKwlqbXAJTChDYWxjdWxhdGVMZW5ndGhPZlNyYykKKyAgICAgICAgQ0ZJX1BVU0ggICAgICglZWRpKQorCisJLnAyYWxpZ24gNAorTChFeGl0SGlnaDEyQ2FzZTMpOgorCWNtcAkkMTMsICVlYngKKwlqZQlMKFN0cmxjcHlFeGl0MTMpCisJY21wCSQxNCwgJWVieAorCWplCUwoU3RybGNweUV4aXQxNCkKKwljbXAJJDE1LCAlZWJ4CisJamUJTChTdHJsY3B5RXhpdDE1KQorTChTdHJsY3B5RXhpdDE2KToKKwltb3ZiCSViaCwgMTUoJWVkeCkKKwltb3ZscGQJKCVlY3gpLCAleG1tMAorCW1vdmxwZAkleG1tMCwgKCVlZHgpCisJbW92bHBkCTcoJWVjeCksICV4bW0wCisJbW92bHBkCSV4bW0wLCA3KCVlZHgpCisKKwlsZWEJMTYoJWVjeCksICVlZHgKKwltb3YJJWVkaSwgJWVjeAorICAgICAgICBQT1AgICAgICglZWRpKQorCWptcAlMKENhbGN1bGF0ZUxlbmd0aE9mU3JjKQorICAgICAgICBDRklfUFVTSCAgICAgKCVlZGkpCisKKwkucDJhbGlnbiA0CitMKFN0cmxjcHlFeGl0MSk6CisJbW92YgklYmgsICglZWR4KQorCisJbGVhCTEoJWVjeCksICVlZHgKKwltb3YJJWVkaSwgJWVjeAorICAgICAgICBQT1AgICAgICglZWRpKQorCWptcAlMKENhbGN1bGF0ZUxlbmd0aE9mU3JjKQorICAgICAgICBDRklfUFVTSCAgICAgKCVlZGkpCisKKwkucDJhbGlnbiA0CitMKEV4aXQxKToKKwltb3ZiCSglZWN4KSwgJWFsCisJbW92YgklYWwsICglZWR4KQorCisJbW92CSVlY3gsICVlYXgKKwlzdWIJJWVkaSwgJWVheAorCVJFVFVSTjEKKworCS5wMmFsaWduIDQKK0woU3RybGNweUV4aXQyKToKKwltb3ZiCSViaCwgMSglZWR4KQorCW1vdmIJKCVlY3gpLCAlYWwKKwltb3ZiCSVhbCwgKCVlZHgpCisKKwlsZWEJMiglZWN4KSwgJWVkeAorCW1vdgklZWRpLCAlZWN4CisgICAgICAgIFBPUCAgICAgKCVlZGkpCisJam1wCUwoQ2FsY3VsYXRlTGVuZ3RoT2ZTcmMpCisgICAgICAgIENGSV9QVVNIICAgICAoJWVkaSkKKworCS5wMmFsaWduIDQKK0woRXhpdDIpOgorCW1vdncJKCVlY3gpLCAlYXgKKwltb3Z3CSVheCwgKCVlZHgpCisJbW92bAklZWRpLCAlZWF4CisKKwlsZWEJMSglZWN4KSwgJWVheAorCXN1YgklZWRpLCAlZWF4CisJUkVUVVJOMQorCisJLnAyYWxpZ24gNAorTChTdHJsY3B5RXhpdDMpOgorCW1vdmIJJWJoLCAyKCVlZHgpCisJbW92dwkoJWVjeCksICVheAorCW1vdncJJWF4LCAoJWVkeCkKKworCWxlYQkzKCVlY3gpLCAlZWR4CisJbW92CSVlZGksICVlY3gKKyAgICAgICAgUE9QICAgICAoJWVkaSkKKwlqbXAJTChDYWxjdWxhdGVMZW5ndGhPZlNyYykKKyAgICAgICAgQ0ZJX1BVU0ggICAgICglZWRpKQorCisJLnAyYWxpZ24gNAorTChFeGl0Myk6CisJbW92dwkoJWVjeCksICVheAorCW1vdncJJWF4LCAoJWVkeCkKKwltb3ZiCTIoJWVjeCksICVhbAorCW1vdmIJJWFsLCAyKCVlZHgpCisKKwlsZWEJMiglZWN4KSwgJWVheAorCXN1YgklZWRpLCAlZWF4CisJUkVUVVJOMQorCisJLnAyYWxpZ24gNAorTChTdHJsY3B5RXhpdDUpOgorCW1vdmIJJWJoLCA0KCVlZHgpCisJbW92bAkoJWVjeCksICVlYXgKKwltb3ZsCSVlYXgsICglZWR4KQorCW1vdmwJJWVkaSwgJWVheAorCisJbGVhCTUoJWVjeCksICVlZHgKKwltb3YJJWVkaSwgJWVjeAorICAgICAgICBQT1AgICAgICglZWRpKQorCWptcAlMKENhbGN1bGF0ZUxlbmd0aE9mU3JjKQorICAgICAgICBDRklfUFVTSCAgICAgKCVlZGkpCisKKwkucDJhbGlnbiA0CitMKEV4aXQ1KToKKwltb3ZsCSglZWN4KSwgJWVheAorCW1vdmwJJWVheCwgKCVlZHgpCisJbW92Ygk0KCVlY3gpLCAlYWwKKwltb3ZiCSVhbCwgNCglZWR4KQorCisJbGVhCTQoJWVjeCksICVlYXgKKwlzdWIJJWVkaSwgJWVheAorCVJFVFVSTjEKKworCS5wMmFsaWduIDQKK0woU3RybGNweUV4aXQ2KToKKwltb3ZiCSViaCwgNSglZWR4KQorCW1vdmwJKCVlY3gpLCAlZWF4CisJbW92bAklZWF4LCAoJWVkeCkKKwltb3ZiCTQoJWVjeCksICVhbAorCW1vdmIJJWFsLCA0KCVlZHgpCisKKwlsZWEJNiglZWN4KSwgJWVkeAorCW1vdgklZWRpLCAlZWN4CisgICAgICAgIFBPUCAgICAgKCVlZGkpCisJam1wCUwoQ2FsY3VsYXRlTGVuZ3RoT2ZTcmMpCisgICAgICAgIENGSV9QVVNIICAgICAoJWVkaSkKKworCS5wMmFsaWduIDQKK0woRXhpdDYpOgorCW1vdmwJKCVlY3gpLCAlZWF4CisJbW92bAklZWF4LCAoJWVkeCkKKwltb3Z3CTQoJWVjeCksICVheAorCW1vdncJJWF4LCA0KCVlZHgpCisKKwlsZWEJNSglZWN4KSwgJWVheAorCXN1YgklZWRpLCAlZWF4CisJUkVUVVJOMQorCisJLnAyYWxpZ24gNAorTChTdHJsY3B5RXhpdDcpOgorCW1vdmIJJWJoLCA2KCVlZHgpCisJbW92bAkoJWVjeCksICVlYXgKKwltb3ZsCSVlYXgsICglZWR4KQorCW1vdncJNCglZWN4KSwgJWF4CisJbW92dwklYXgsIDQoJWVkeCkKKworCWxlYQk3KCVlY3gpLCAlZWR4CisJbW92CSVlZGksICVlY3gKKyAgICAgICAgUE9QICAgICAoJWVkaSkKKwlqbXAJTChDYWxjdWxhdGVMZW5ndGhPZlNyYykKKyAgICAgICAgQ0ZJX1BVU0ggICAgICglZWRpKQorCisJLnAyYWxpZ24gNAorTChFeGl0Nyk6CisJbW92bAkoJWVjeCksICVlYXgKKwltb3ZsCSVlYXgsICglZWR4KQorCW1vdmwJMyglZWN4KSwgJWVheAorCW1vdmwJJWVheCwgMyglZWR4KQorCisJbGVhCTYoJWVjeCksICVlYXgKKwlzdWIJJWVkaSwgJWVheAorCVJFVFVSTjEKKworCS5wMmFsaWduIDQKK0woU3RybGNweUV4aXQ5KToKKwltb3ZiCSViaCwgOCglZWR4KQorCW1vdmxwZAkoJWVjeCksICV4bW0wCisJbW92bHBkCSV4bW0wLCAoJWVkeCkKKworCWxlYQk5KCVlY3gpLCAlZWR4CisJbW92CSVlZGksICVlY3gKKyAgICAgICAgUE9QICAgICAoJWVkaSkKKwlqbXAJTChDYWxjdWxhdGVMZW5ndGhPZlNyYykKKyAgICAgICAgQ0ZJX1BVU0ggICAgICglZWRpKQorCisJLnAyYWxpZ24gNAorTChFeGl0OSk6CisJbW92bHBkCSglZWN4KSwgJXhtbTAKKwltb3ZscGQJJXhtbTAsICglZWR4KQorCW1vdmIJOCglZWN4KSwgJWFsCisJbW92YgklYWwsIDgoJWVkeCkKKworCWxlYQk4KCVlY3gpLCAlZWF4CisJc3ViCSVlZGksICVlYXgKKwlSRVRVUk4xCisKKwkucDJhbGlnbiA0CitMKFN0cmxjcHlFeGl0MTApOgorCW1vdmIJJWJoLCA5KCVlZHgpCisJbW92bHBkCSglZWN4KSwgJXhtbTAKKwltb3ZscGQJJXhtbTAsICglZWR4KQorCW1vdmIJOCglZWN4KSwgJWFsCisJbW92YgklYWwsIDgoJWVkeCkKKworCWxlYQkxMCglZWN4KSwgJWVkeAorCW1vdgklZWRpLCAlZWN4CisgICAgICAgIFBPUCAgICAgKCVlZGkpCisJam1wCUwoQ2FsY3VsYXRlTGVuZ3RoT2ZTcmMpCisgICAgICAgIENGSV9QVVNIICAgICAoJWVkaSkKKworCS5wMmFsaWduIDQKK0woRXhpdDEwKToKKwltb3ZscGQJKCVlY3gpLCAleG1tMAorCW1vdmxwZAkleG1tMCwgKCVlZHgpCisJbW92dwk4KCVlY3gpLCAlYXgKKwltb3Z3CSVheCwgOCglZWR4KQorCisJbGVhCTkoJWVjeCksICVlYXgKKwlzdWIJJWVkaSwgJWVheAorCVJFVFVSTjEKKworCS5wMmFsaWduIDQKK0woU3RybGNweUV4aXQxMSk6CisJbW92YgklYmgsIDEwKCVlZHgpCisJbW92bHBkCSglZWN4KSwgJXhtbTAKKwltb3ZscGQJJXhtbTAsICglZWR4KQorCW1vdncJOCglZWN4KSwgJWF4CisJbW92dwklYXgsIDgoJWVkeCkKKworCWxlYQkxMSglZWN4KSwgJWVkeAorCW1vdgklZWRpLCAlZWN4CisgICAgICAgIFBPUCAgICAgKCVlZGkpCisJam1wCUwoQ2FsY3VsYXRlTGVuZ3RoT2ZTcmMpCisgICAgICAgIENGSV9QVVNIICAgICAoJWVkaSkKKworCS5wMmFsaWduIDQKK0woRXhpdDExKToKKwltb3ZscGQJKCVlY3gpLCAleG1tMAorCW1vdmxwZAkleG1tMCwgKCVlZHgpCisJbW92bAk3KCVlY3gpLCAlZWF4CisJbW92bAklZWF4LCA3KCVlZHgpCisKKwlsZWEJMTAoJWVjeCksICVlYXgKKwlzdWIJJWVkaSwgJWVheAorCVJFVFVSTjEKKworCS5wMmFsaWduIDQKK0woU3RybGNweUV4aXQxMyk6CisJbW92YgklYmgsIDEyKCVlZHgpCisJbW92bHBkCSglZWN4KSwgJXhtbTAKKwltb3ZscGQJJXhtbTAsICglZWR4KQorCW1vdmwJOCglZWN4KSwgJWVheAorCW1vdmwJJWVheCwgOCglZWR4KQorCisJbGVhCTEzKCVlY3gpLCAlZWR4CisJbW92CSVlZGksICVlY3gKKyAgICAgICAgUE9QICAgICAoJWVkaSkKKwlqbXAJTChDYWxjdWxhdGVMZW5ndGhPZlNyYykKKyAgICAgICAgQ0ZJX1BVU0ggICAgICglZWRpKQorCisJLnAyYWxpZ24gNAorTChFeGl0MTMpOgorCW1vdmxwZAkoJWVjeCksICV4bW0wCisJbW92bHBkCSV4bW0wLCAoJWVkeCkKKwltb3ZscGQJNSglZWN4KSwgJXhtbTAKKwltb3ZscGQJJXhtbTAsIDUoJWVkeCkKKworCWxlYQkxMiglZWN4KSwgJWVheAorCXN1YgklZWRpLCAlZWF4CisJUkVUVVJOMQorCisJLnAyYWxpZ24gNAorTChTdHJsY3B5RXhpdDE0KToKKwltb3ZiCSViaCwgMTMoJWVkeCkKKwltb3ZscGQJKCVlY3gpLCAleG1tMAorCW1vdmxwZAkleG1tMCwgKCVlZHgpCisJbW92bHBkCTUoJWVjeCksICV4bW0wCisJbW92bHBkCSV4bW0wLCA1KCVlZHgpCisKKwlsZWEJMTQoJWVjeCksICVlZHgKKwltb3YJJWVkaSwgJWVjeAorICAgICAgICBQT1AgICAgICglZWRpKQorCWptcAlMKENhbGN1bGF0ZUxlbmd0aE9mU3JjKQorICAgICAgICBDRklfUFVTSCAgICAgKCVlZGkpCisKKwkucDJhbGlnbiA0CitMKEV4aXQxNCk6CisJbW92bHBkCSglZWN4KSwgJXhtbTAKKwltb3ZscGQJJXhtbTAsICglZWR4KQorCW1vdmxwZAk2KCVlY3gpLCAleG1tMAorCW1vdmxwZAkleG1tMCwgNiglZWR4KQorCisJbGVhCTEzKCVlY3gpLCAlZWF4CisJc3ViCSVlZGksICVlYXgKKwlSRVRVUk4xCisKKwkucDJhbGlnbiA0CitMKFN0cmxjcHlFeGl0MTUpOgorCW1vdmIJJWJoLCAxNCglZWR4KQorCW1vdmxwZAkoJWVjeCksICV4bW0wCisJbW92bHBkCSV4bW0wLCAoJWVkeCkKKwltb3ZscGQJNiglZWN4KSwgJXhtbTAKKwltb3ZscGQJJXhtbTAsIDYoJWVkeCkKKworCWxlYQkxNSglZWN4KSwgJWVkeAorCW1vdgklZWRpLCAlZWN4CisgICAgICAgIFBPUCAgICAgKCVlZGkpCisJam1wCUwoQ2FsY3VsYXRlTGVuZ3RoT2ZTcmMpCisgICAgICAgIENGSV9QVVNIICAgICAoJWVkaSkKKworCS5wMmFsaWduIDQKK0woRXhpdDE1KToKKwltb3ZscGQJKCVlY3gpLCAleG1tMAorCW1vdmxwZAkleG1tMCwgKCVlZHgpCisJbW92bHBkCTcoJWVjeCksICV4bW0wCisJbW92bHBkCSV4bW0wLCA3KCVlZHgpCisKKwlsZWEJMTQoJWVjeCksICVlYXgKKwlzdWIJJWVkaSwgJWVheAorCVJFVFVSTjEKKworICAgICAgICBDRklfUE9QICglZWRpKQorCisJLnAyYWxpZ24gNAorTChTdHJsY3B5RXhpdDApOgorCW1vdmwJJDAsICVlYXgKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woU3RybmNweUV4aXQxNUJ5dGVzKToKKwljbXAJJDEyLCAlZWJ4CisJamEJTChTdHJuY3B5RXhpdDE1Qnl0ZXMxKQorCisJY21wYgkkMCwgOCglZWN4KQorCWp6CUwoRXhpdFRhaWw5KQorCWNtcAkkOSwgJWVieAorCWplCUwoU3RybGNweUV4aXRUYWlsOSkKKworCWNtcGIJJDAsIDkoJWVjeCkKKwlqeglMKEV4aXRUYWlsMTApCisJY21wCSQxMCwgJWVieAorCWplCUwoU3RybGNweUV4aXRUYWlsMTApCisKKwljbXBiCSQwLCAxMCglZWN4KQorCWp6CUwoRXhpdFRhaWwxMSkKKwljbXAJJDExLCAlZWJ4CisJamUJTChTdHJsY3B5RXhpdFRhaWwxMSkKKworCWNtcGIJJDAsIDExKCVlY3gpCisJanoJTChFeGl0VGFpbDEyKQorCisJbW92YgklYmgsIDExKCVlZHgpCisJbW92bHBkCSglZWN4KSwgJXhtbTAKKwltb3ZscGQJJXhtbTAsICglZWR4KQorCW1vdmwJNyglZWN4KSwgJWVheAorCW1vdmwJJWVheCwgNyglZWR4KQorCisJbGVhCTEyKCVlY3gpLCAlZWR4CisJam1wCUwoQ2FsY3VsYXRlTGVuZ3RoT2ZTcmMpCisKKwkucDJhbGlnbiA0CitMKFN0cm5jcHlFeGl0MTVCeXRlczEpOgorCWNtcGIJJDAsIDgoJWVjeCkKKwlqeglMKEV4aXRUYWlsOSkKKwljbXBiCSQwLCA5KCVlY3gpCisJanoJTChFeGl0VGFpbDEwKQorCWNtcGIJJDAsIDEwKCVlY3gpCisJanoJTChFeGl0VGFpbDExKQorCWNtcGIJJDAsIDExKCVlY3gpCisJanoJTChFeGl0VGFpbDEyKQorCisJY21wYgkkMCwgMTIoJWVjeCkKKwlqeglMKEV4aXRUYWlsMTMpCisJY21wCSQxMywgJWVieAorCWplCUwoU3RybGNweUV4aXRUYWlsMTMpCisKKwljbXBiCSQwLCAxMyglZWN4KQorCWp6CUwoRXhpdFRhaWwxNCkKKwljbXAJJDE0LCAlZWJ4CisJamUJTChTdHJsY3B5RXhpdFRhaWwxNCkKKworCWNtcGIJJDAsIDE0KCVlY3gpCisJanoJTChFeGl0VGFpbDE1KQorCisJbW92YgklYmgsIDE0KCVlZHgpCisJbW92bHBkCSglZWN4KSwgJXhtbTAKKwltb3ZscGQJJXhtbTAsICglZWR4KQorCW1vdmxwZAk2KCVlY3gpLCAleG1tMAorCW1vdmxwZAkleG1tMCwgNiglZWR4KQorCisJbGVhCTE1KCVlY3gpLCAlZWR4CisJam1wCUwoQ2FsY3VsYXRlTGVuZ3RoT2ZTcmMpCisKKwkucDJhbGlnbiA0CitMKFN0cm5jcHlFeGl0OEJ5dGVzKToKKwljbXAJJDQsICVlYngKKwlqYQlMKFN0cm5jcHlFeGl0OEJ5dGVzMSkKKworCXRlc3QJJWVieCwgJWVieAorCWp6CUwoU3RybGNweUV4aXRUYWlsMCkKKworCWNtcGIJJDAsICglZWN4KQorCWp6CUwoRXhpdFRhaWwxKQorCWNtcAkkMSwgJWVieAorCWplCUwoU3RybGNweUV4aXRUYWlsMSkKKworCWNtcGIJJDAsIDEoJWVjeCkKKwlqeglMKEV4aXRUYWlsMikKKwljbXAJJDIsICVlYngKKwlqZQlMKFN0cmxjcHlFeGl0VGFpbDIpCisKKwljbXBiCSQwLCAyKCVlY3gpCisJanoJTChFeGl0VGFpbDMpCisJY21wCSQzLCAlZWJ4CisJamUJTChTdHJsY3B5RXhpdFRhaWwzKQorCisJY21wYgkkMCwgMyglZWN4KQorCWp6CUwoRXhpdFRhaWw0KQorCisJbW92YgklYmgsIDMoJWVkeCkKKwltb3Z3CSglZWN4KSwgJWF4CisJbW92dwklYXgsICglZWR4KQorCW1vdmIJMiglZWN4KSwgJWFsCisJbW92YgklYWwsIDIoJWVkeCkKKworCWxlYQk0KCVlY3gpLCAlZWR4CisJam1wCUwoQ2FsY3VsYXRlTGVuZ3RoT2ZTcmMpCisKKwkucDJhbGlnbiA0CitMKFN0cm5jcHlFeGl0OEJ5dGVzMSk6CisJY21wYgkkMCwgKCVlY3gpCisJanoJTChFeGl0VGFpbDEpCisJY21wYgkkMCwgMSglZWN4KQorCWp6CUwoRXhpdFRhaWwyKQorCWNtcGIJJDAsIDIoJWVjeCkKKwlqeglMKEV4aXRUYWlsMykKKwljbXBiCSQwLCAzKCVlY3gpCisJanoJTChFeGl0VGFpbDQpCisKKwljbXBiCSQwLCA0KCVlY3gpCisJanoJTChFeGl0VGFpbDUpCisJY21wCSQ1LCAlZWJ4CisJamUJTChTdHJsY3B5RXhpdFRhaWw1KQorCisJY21wYgkkMCwgNSglZWN4KQorCWp6CUwoRXhpdFRhaWw2KQorCWNtcAkkNiwgJWVieAorCWplCUwoU3RybGNweUV4aXRUYWlsNikKKworCWNtcGIJJDAsIDYoJWVjeCkKKwlqeglMKEV4aXRUYWlsNykKKwljbXAJJDcsICVlYngKKwlqZQlMKFN0cmxjcHlFeGl0VGFpbDcpCisKKwljbXBiCSQwLCA3KCVlY3gpCisJanoJTChFeGl0VGFpbDgpCisKKwltb3ZiCSViaCwgNyglZWR4KQorCW1vdmwJKCVlY3gpLCAlZWF4CisJbW92bAklZWF4LCAoJWVkeCkKKwltb3ZsCTMoJWVjeCksICVlYXgKKwltb3ZsCSVlYXgsIDMoJWVkeCkKKworCWxlYQk4KCVlY3gpLCAlZWR4CisJam1wCUwoQ2FsY3VsYXRlTGVuZ3RoT2ZTcmMpCisKKwkucDJhbGlnbiA0CitMKFN0cmxjcHlFeGl0VGFpbDApOgorCW1vdgklZWN4LCAlZWR4CisJam1wCUwoQ2FsY3VsYXRlTGVuZ3RoT2ZTcmMpCisKKwkucDJhbGlnbiA0CitMKFN0cmxjcHlFeGl0VGFpbDEpOgorCW1vdmIJJWJoLCAoJWVkeCkKKworCWxlYQkxKCVlY3gpLCAlZWR4CisJam1wCUwoQ2FsY3VsYXRlTGVuZ3RoT2ZTcmMpCisKKwkucDJhbGlnbiA0CitMKEV4aXRUYWlsMSk6CisJbW92YgkoJWVjeCksICVhbAorCW1vdmIJJWFsLCAoJWVkeCkKKworCW1vdgkkMCwgJWVheAorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChTdHJsY3B5RXhpdFRhaWwyKToKKwltb3ZiCSViaCwgMSglZWR4KQorCW1vdmIJKCVlY3gpLCAlYWwKKwltb3ZiCSVhbCwgKCVlZHgpCisKKwlsZWEJMiglZWN4KSwgJWVkeAorCWptcAlMKENhbGN1bGF0ZUxlbmd0aE9mU3JjKQorCisJLnAyYWxpZ24gNAorTChFeGl0VGFpbDIpOgorCW1vdncJKCVlY3gpLCAlYXgKKwltb3Z3CSVheCwgKCVlZHgpCisJbW92bAklZWR4LCAlZWF4CisKKwltb3YJJDEsICVlYXgKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woU3RybGNweUV4aXRUYWlsMyk6CisJbW92YgklYmgsIDIoJWVkeCkKKwltb3Z3CSglZWN4KSwgJWF4CisJbW92dwklYXgsICglZWR4KQorCisJbGVhCTMoJWVjeCksICVlZHgKKwlqbXAJTChDYWxjdWxhdGVMZW5ndGhPZlNyYykKKworCS5wMmFsaWduIDQKK0woRXhpdFRhaWwzKToKKwltb3Z3CSglZWN4KSwgJWF4CisJbW92dwklYXgsICglZWR4KQorCW1vdmIJMiglZWN4KSwgJWFsCisJbW92YgklYWwsIDIoJWVkeCkKKworCW1vdgkkMiwgJWVheAorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChFeGl0VGFpbDQpOgorCW1vdmwJKCVlY3gpLCAlZWF4CisJbW92bAklZWF4LCAoJWVkeCkKKworCW1vdgkkMywgJWVheAorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChTdHJsY3B5RXhpdFRhaWw1KToKKwltb3ZiCSViaCwgNCglZWR4KQorCW1vdmwJKCVlY3gpLCAlZWF4CisJbW92bAklZWF4LCAoJWVkeCkKKwltb3ZsCSVlZHgsICVlYXgKKworCWxlYQk1KCVlY3gpLCAlZWR4CisJam1wCUwoQ2FsY3VsYXRlTGVuZ3RoT2ZTcmMpCisKKwkucDJhbGlnbiA0CitMKEV4aXRUYWlsNSk6CisJbW92bAkoJWVjeCksICVlYXgKKwltb3ZsCSVlYXgsICglZWR4KQorCW1vdmIJNCglZWN4KSwgJWFsCisJbW92YgklYWwsIDQoJWVkeCkKKworCW1vdgkkNCwgJWVheAorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChTdHJsY3B5RXhpdFRhaWw2KToKKwltb3ZiCSViaCwgNSglZWR4KQorCW1vdmwJKCVlY3gpLCAlZWF4CisJbW92bAklZWF4LCAoJWVkeCkKKwltb3ZiCTQoJWVjeCksICVhbAorCW1vdmIJJWFsLCA0KCVlZHgpCisKKwlsZWEJNiglZWN4KSwgJWVkeAorCWptcAlMKENhbGN1bGF0ZUxlbmd0aE9mU3JjKQorCisJLnAyYWxpZ24gNAorTChFeGl0VGFpbDYpOgorCW1vdmwJKCVlY3gpLCAlZWF4CisJbW92bAklZWF4LCAoJWVkeCkKKwltb3Z3CTQoJWVjeCksICVheAorCW1vdncJJWF4LCA0KCVlZHgpCisKKwltb3YJJDUsICVlYXgKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woU3RybGNweUV4aXRUYWlsNyk6CisJbW92YgklYmgsIDYoJWVkeCkKKwltb3ZsCSglZWN4KSwgJWVheAorCW1vdmwJJWVheCwgKCVlZHgpCisJbW92dwk0KCVlY3gpLCAlYXgKKwltb3Z3CSVheCwgNCglZWR4KQorCisJbGVhCTcoJWVjeCksICVlZHgKKwlqbXAJTChDYWxjdWxhdGVMZW5ndGhPZlNyYykKKworCS5wMmFsaWduIDQKK0woRXhpdFRhaWw3KToKKwltb3ZsCSglZWN4KSwgJWVheAorCW1vdmwJJWVheCwgKCVlZHgpCisJbW92bAkzKCVlY3gpLCAlZWF4CisJbW92bAklZWF4LCAzKCVlZHgpCisKKwltb3YJJDYsICVlYXgKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woRXhpdFRhaWw4KToKKwltb3ZscGQJKCVlY3gpLCAleG1tMAorCW1vdmxwZAkleG1tMCwgKCVlZHgpCisKKwltb3YJJDcsICVlYXgKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woU3RybGNweUV4aXRUYWlsOSk6CisJbW92YgklYmgsIDgoJWVkeCkKKwltb3ZscGQJKCVlY3gpLCAleG1tMAorCW1vdmxwZAkleG1tMCwgKCVlZHgpCisKKwlsZWEJOSglZWN4KSwgJWVkeAorCWptcAlMKENhbGN1bGF0ZUxlbmd0aE9mU3JjKQorCisJLnAyYWxpZ24gNAorTChFeGl0VGFpbDkpOgorCW1vdmxwZAkoJWVjeCksICV4bW0wCisJbW92bHBkCSV4bW0wLCAoJWVkeCkKKwltb3ZiCTgoJWVjeCksICVhbAorCW1vdmIJJWFsLCA4KCVlZHgpCisKKwltb3YJJDgsICVlYXgKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woU3RybGNweUV4aXRUYWlsMTApOgorCW1vdmIJJWJoLCA5KCVlZHgpCisJbW92bHBkCSglZWN4KSwgJXhtbTAKKwltb3ZscGQJJXhtbTAsICglZWR4KQorCW1vdmIJOCglZWN4KSwgJWFsCisJbW92YgklYWwsIDgoJWVkeCkKKworCWxlYQkxMCglZWN4KSwgJWVkeAorCWptcAlMKENhbGN1bGF0ZUxlbmd0aE9mU3JjKQorCisJLnAyYWxpZ24gNAorTChFeGl0VGFpbDEwKToKKwltb3ZscGQJKCVlY3gpLCAleG1tMAorCW1vdmxwZAkleG1tMCwgKCVlZHgpCisJbW92dwk4KCVlY3gpLCAlYXgKKwltb3Z3CSVheCwgOCglZWR4KQorCisJbW92CSQ5LCAlZWF4CisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKFN0cmxjcHlFeGl0VGFpbDExKToKKwltb3ZiCSViaCwgMTAoJWVkeCkKKwltb3ZscGQJKCVlY3gpLCAleG1tMAorCW1vdmxwZAkleG1tMCwgKCVlZHgpCisJbW92dwk4KCVlY3gpLCAlYXgKKwltb3Z3CSVheCwgOCglZWR4KQorCisJbGVhCTExKCVlY3gpLCAlZWR4CisJam1wCUwoQ2FsY3VsYXRlTGVuZ3RoT2ZTcmMpCisKKwkucDJhbGlnbiA0CitMKEV4aXRUYWlsMTEpOgorCW1vdmxwZAkoJWVjeCksICV4bW0wCisJbW92bHBkCSV4bW0wLCAoJWVkeCkKKwltb3ZsCTcoJWVjeCksICVlYXgKKwltb3ZsCSVlYXgsIDcoJWVkeCkKKworCW1vdgkkMTAsICVlYXgKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woRXhpdFRhaWwxMik6CisJbW92bHBkCSglZWN4KSwgJXhtbTAKKwltb3ZscGQJJXhtbTAsICglZWR4KQorCW1vdmwJOCglZWN4KSwgJWVheAorCW1vdmwJJWVheCwgOCglZWR4KQorCisJbW92CSQxMSwgJWVheAorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChTdHJsY3B5RXhpdFRhaWwxMyk6CisJbW92YgklYmgsIDEyKCVlZHgpCisJbW92bHBkCSglZWN4KSwgJXhtbTAKKwltb3ZscGQJJXhtbTAsICglZWR4KQorCW1vdmwJOCglZWN4KSwgJWVheAorCW1vdmwJJWVheCwgOCglZWR4KQorCisJbGVhCTEzKCVlY3gpLCAlZWR4CisJam1wCUwoQ2FsY3VsYXRlTGVuZ3RoT2ZTcmMpCisKKwkucDJhbGlnbiA0CitMKEV4aXRUYWlsMTMpOgorCW1vdmxwZAkoJWVjeCksICV4bW0wCisJbW92bHBkCSV4bW0wLCAoJWVkeCkKKwltb3ZscGQJNSglZWN4KSwgJXhtbTAKKwltb3ZscGQJJXhtbTAsIDUoJWVkeCkKKworCW1vdgkkMTIsICVlYXgKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woU3RybGNweUV4aXRUYWlsMTQpOgorCW1vdmIJJWJoLCAxMyglZWR4KQorCW1vdmxwZAkoJWVjeCksICV4bW0wCisJbW92bHBkCSV4bW0wLCAoJWVkeCkKKwltb3ZscGQJNSglZWN4KSwgJXhtbTAKKwltb3ZscGQJJXhtbTAsIDUoJWVkeCkKKworCWxlYQkxNCglZWN4KSwgJWVkeAorCWptcAlMKENhbGN1bGF0ZUxlbmd0aE9mU3JjKQorCisJLnAyYWxpZ24gNAorTChFeGl0VGFpbDE0KToKKwltb3ZscGQJKCVlY3gpLCAleG1tMAorCW1vdmxwZAkleG1tMCwgKCVlZHgpCisJbW92bHBkCTYoJWVjeCksICV4bW0wCisJbW92bHBkCSV4bW0wLCA2KCVlZHgpCisKKwltb3YJJDEzLCAlZWF4CisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKEV4aXRUYWlsMTUpOgorCW1vdmxwZAkoJWVjeCksICV4bW0wCisJbW92bHBkCSV4bW0wLCAoJWVkeCkKKwltb3ZscGQJNyglZWN4KSwgJXhtbTAKKwltb3ZscGQJJXhtbTAsIDcoJWVkeCkKKworCW1vdgkkMTQsICVlYXgKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woU3RybGNweUV4aXRUYWlsMTYpOgorCW1vdmIJJWJoLCAxNSglZWR4KQorCW1vdmxwZAkoJWVjeCksICV4bW0wCisJbW92bHBkCSV4bW0wLCAoJWVkeCkKKwltb3ZscGQJNyglZWN4KSwgJXhtbTAKKwltb3ZscGQJJXhtbTAsIDcoJWVkeCkKKworCWxlYQkxNiglZWN4KSwgJWVkeAorCWptcAlMKENhbGN1bGF0ZUxlbmd0aE9mU3JjKQorCisJLnAyYWxpZ24gNAorTChFeGl0VGFpbDE2KToKKwltb3ZscGQJKCVlY3gpLCAleG1tMAorCW1vdmxwZAk4KCVlY3gpLCAleG1tMQorCW1vdmxwZAkleG1tMCwgKCVlZHgpCisJbW92bHBkCSV4bW0xLCA4KCVlZHgpCisKKwltb3YJJDE1LCAlZWF4CisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKENhbGN1bGF0ZUxlbmd0aE9mU3JjKToKKwl4b3IJJWVheCwgJWVheAorCWNtcGIJJDAsICglZWR4KQorCWp6CUwoZXhpdF90YWlsMCkKKwljbXBiCSQwLCAxKCVlZHgpCisJanoJTChleGl0X3RhaWwxKQorCWNtcGIJJDAsIDIoJWVkeCkKKwlqeglMKGV4aXRfdGFpbDIpCisJY21wYgkkMCwgMyglZWR4KQorCWp6CUwoZXhpdF90YWlsMykKKworCWNtcGIJJDAsIDQoJWVkeCkKKwlqeglMKGV4aXRfdGFpbDQpCisJY21wYgkkMCwgNSglZWR4KQorCWp6CUwoZXhpdF90YWlsNSkKKwljbXBiCSQwLCA2KCVlZHgpCisJanoJTChleGl0X3RhaWw2KQorCWNtcGIJJDAsIDcoJWVkeCkKKwlqeglMKGV4aXRfdGFpbDcpCisKKwljbXBiCSQwLCA4KCVlZHgpCisJanoJTChleGl0X3RhaWw4KQorCWNtcGIJJDAsIDkoJWVkeCkKKwlqeglMKGV4aXRfdGFpbDkpCisJY21wYgkkMCwgMTAoJWVkeCkKKwlqeglMKGV4aXRfdGFpbDEwKQorCWNtcGIJJDAsIDExKCVlZHgpCisJanoJTChleGl0X3RhaWwxMSkKKworCWNtcGIJJDAsIDEyKCVlZHgpCisJanoJTChleGl0X3RhaWwxMikKKwljbXBiCSQwLCAxMyglZWR4KQorCWp6CUwoZXhpdF90YWlsMTMpCisJY21wYgkkMCwgMTQoJWVkeCkKKwlqeglMKGV4aXRfdGFpbDE0KQorCWNtcGIJJDAsIDE1KCVlZHgpCisJanoJTChleGl0X3RhaWwxNSkKKworCXB4b3IJJXhtbTAsICV4bW0wCisJbGVhCTE2KCVlZHgpLCAlZWF4CisJYWRkCSQxNiwgJWVjeAorCWFuZAkkLTE2LCAlZWF4CisKKwlwY21wZXFiCSglZWF4KSwgJXhtbTAKKwlwbW92bXNrYiAleG1tMCwgJWVkeAorCXB4b3IJJXhtbTEsICV4bW0xCisJbGVhCTE2KCVlYXgpLCAlZWF4CisJdGVzdAklZWR4LCAlZWR4CisJam56CUwoZXhpdCkKKworCXBjbXBlcWIJKCVlYXgpLCAleG1tMQorCXBtb3Ztc2tiICV4bW0xLCAlZWR4CisJcHhvcgkleG1tMiwgJXhtbTIKKwlsZWEJMTYoJWVheCksICVlYXgKKwl0ZXN0CSVlZHgsICVlZHgKKwlqbnoJTChleGl0KQorCisJcGNtcGVxYgkoJWVheCksICV4bW0yCisJcG1vdm1za2IgJXhtbTIsICVlZHgKKwlweG9yCSV4bW0zLCAleG1tMworCWxlYQkxNiglZWF4KSwgJWVheAorCXRlc3QJJWVkeCwgJWVkeAorCWpueglMKGV4aXQpCisKKwlwY21wZXFiCSglZWF4KSwgJXhtbTMKKwlwbW92bXNrYiAleG1tMywgJWVkeAorCWxlYQkxNiglZWF4KSwgJWVheAorCXRlc3QJJWVkeCwgJWVkeAorCWpueglMKGV4aXQpCisKKwlwY21wZXFiCSglZWF4KSwgJXhtbTAKKwlwbW92bXNrYiAleG1tMCwgJWVkeAorCWxlYQkxNiglZWF4KSwgJWVheAorCXRlc3QJJWVkeCwgJWVkeAorCWpueglMKGV4aXQpCisKKwlwY21wZXFiCSglZWF4KSwgJXhtbTEKKwlwbW92bXNrYiAleG1tMSwgJWVkeAorCWxlYQkxNiglZWF4KSwgJWVheAorCXRlc3QJJWVkeCwgJWVkeAorCWpueglMKGV4aXQpCisKKwlwY21wZXFiCSglZWF4KSwgJXhtbTIKKwlwbW92bXNrYiAleG1tMiwgJWVkeAorCWxlYQkxNiglZWF4KSwgJWVheAorCXRlc3QJJWVkeCwgJWVkeAorCWpueglMKGV4aXQpCisKKwlwY21wZXFiCSglZWF4KSwgJXhtbTMKKwlwbW92bXNrYiAleG1tMywgJWVkeAorCWxlYQkxNiglZWF4KSwgJWVheAorCXRlc3QJJWVkeCwgJWVkeAorCWpueglMKGV4aXQpCisKKwlwY21wZXFiCSglZWF4KSwgJXhtbTAKKwlwbW92bXNrYiAleG1tMCwgJWVkeAorCWxlYQkxNiglZWF4KSwgJWVheAorCXRlc3QJJWVkeCwgJWVkeAorCWpueglMKGV4aXQpCisKKwlwY21wZXFiCSglZWF4KSwgJXhtbTEKKwlwbW92bXNrYiAleG1tMSwgJWVkeAorCWxlYQkxNiglZWF4KSwgJWVheAorCXRlc3QJJWVkeCwgJWVkeAorCWpueglMKGV4aXQpCisKKwlwY21wZXFiCSglZWF4KSwgJXhtbTIKKwlwbW92bXNrYiAleG1tMiwgJWVkeAorCWxlYQkxNiglZWF4KSwgJWVheAorCXRlc3QJJWVkeCwgJWVkeAorCWpueglMKGV4aXQpCisKKwlwY21wZXFiCSglZWF4KSwgJXhtbTMKKwlwbW92bXNrYiAleG1tMywgJWVkeAorCWxlYQkxNiglZWF4KSwgJWVheAorCXRlc3QJJWVkeCwgJWVkeAorCWpueglMKGV4aXQpCisKKwlwY21wZXFiCSglZWF4KSwgJXhtbTAKKwlwbW92bXNrYiAleG1tMCwgJWVkeAorCWxlYQkxNiglZWF4KSwgJWVheAorCXRlc3QJJWVkeCwgJWVkeAorCWpueglMKGV4aXQpCisKKwlwY21wZXFiCSglZWF4KSwgJXhtbTEKKwlwbW92bXNrYiAleG1tMSwgJWVkeAorCWxlYQkxNiglZWF4KSwgJWVheAorCXRlc3QJJWVkeCwgJWVkeAorCWpueglMKGV4aXQpCisKKwlwY21wZXFiCSglZWF4KSwgJXhtbTIKKwlwbW92bXNrYiAleG1tMiwgJWVkeAorCWxlYQkxNiglZWF4KSwgJWVheAorCXRlc3QJJWVkeCwgJWVkeAorCWpueglMKGV4aXQpCisKKwlwY21wZXFiCSglZWF4KSwgJXhtbTMKKwlwbW92bXNrYiAleG1tMywgJWVkeAorCWxlYQkxNiglZWF4KSwgJWVheAorCXRlc3QJJWVkeCwgJWVkeAorCWpueglMKGV4aXQpCisKKwlhbmQJJC0weDQwLCAlZWF4CisKKwkucDJhbGlnbiA0CitMKGFsaWduZWRfNjRfbG9vcCk6CisJbW92YXBzCSglZWF4KSwgJXhtbTAKKwltb3ZhcHMJMTYoJWVheCksICV4bW0xCisJbW92YXBzCTMyKCVlYXgpLCAleG1tMgorCW1vdmFwcwk0OCglZWF4KSwgJXhtbTYKKwlwbWludWIJJXhtbTEsICV4bW0wCisJcG1pbnViCSV4bW02LCAleG1tMgorCXBtaW51YgkleG1tMCwgJXhtbTIKKwlwY21wZXFiCSV4bW0zLCAleG1tMgorCXBtb3Ztc2tiICV4bW0yLCAlZWR4CisJbGVhCTY0KCVlYXgpLCAlZWF4CisJdGVzdAklZWR4LCAlZWR4CisJanoJTChhbGlnbmVkXzY0X2xvb3ApCisKKwlwY21wZXFiCS02NCglZWF4KSwgJXhtbTMKKwlwbW92bXNrYiAleG1tMywgJWVkeAorCWxlYQk0OCglZWN4KSwgJWVjeAorCXRlc3QJJWVkeCwgJWVkeAorCWpueglMKGV4aXQpCisKKwlwY21wZXFiCSV4bW0xLCAleG1tMworCXBtb3Ztc2tiICV4bW0zLCAlZWR4CisJbGVhCS0xNiglZWN4KSwgJWVjeAorCXRlc3QJJWVkeCwgJWVkeAorCWpueglMKGV4aXQpCisKKwlwY21wZXFiCS0zMiglZWF4KSwgJXhtbTMKKwlwbW92bXNrYiAleG1tMywgJWVkeAorCWxlYQktMTYoJWVjeCksICVlY3gKKwl0ZXN0CSVlZHgsICVlZHgKKwlqbnoJTChleGl0KQorCisJcGNtcGVxYgkleG1tNiwgJXhtbTMKKwlwbW92bXNrYiAleG1tMywgJWVkeAorCWxlYQktMTYoJWVjeCksICVlY3gKKworCS5wMmFsaWduIDQKK0woZXhpdCk6CisJc3ViCSVlY3gsICVlYXgKKwl0ZXN0CSVkbCwgJWRsCisJanoJTChleGl0X21vcmVfOCkKKworCW1vdgklZGwsICVjbAorCWFuZAkkMTUsICVjbAorCWp6CUwoZXhpdF9tb3JlXzQpCisJdGVzdAkkMHgwMSwgJWRsCisJam56CUwoZXhpdF8wKQorCXRlc3QJJDB4MDIsICVkbAorCWpueglMKGV4aXRfMSkKKwl0ZXN0CSQweDA0LCAlZGwKKwlqbnoJTChleGl0XzIpCisJYWRkCSQzLCAlZWF4CisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKGV4aXRfbW9yZV80KToKKwl0ZXN0CSQweDEwLCAlZGwKKwlqbnoJTChleGl0XzQpCisJdGVzdAkkMHgyMCwgJWRsCisJam56CUwoZXhpdF81KQorCXRlc3QJJDB4NDAsICVkbAorCWpueglMKGV4aXRfNikKKwlhZGQJJDcsICVlYXgKKwlSRVRVUk4KKworCS5wMmFsaWduIDQKK0woZXhpdF9tb3JlXzgpOgorCW1vdgklZGgsICVjaAorCWFuZAkkMTUsICVjaAorCWp6CUwoZXhpdF9tb3JlXzEyKQorCXRlc3QJJDB4MDEsICVkaAorCWpueglMKGV4aXRfOCkKKwl0ZXN0CSQweDAyLCAlZGgKKwlqbnoJTChleGl0XzkpCisJdGVzdAkkMHgwNCwgJWRoCisJam56CUwoZXhpdF8xMCkKKwlhZGQJJDExLCAlZWF4CisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKGV4aXRfbW9yZV8xMik6CisJdGVzdAkkMHgxMCwgJWRoCisJam56CUwoZXhpdF8xMikKKwl0ZXN0CSQweDIwLCAlZGgKKwlqbnoJTChleGl0XzEzKQorCXRlc3QJJDB4NDAsICVkaAorCWpueglMKGV4aXRfMTQpCisJYWRkCSQxNSwgJWVheAorTChleGl0XzApOgorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChleGl0XzEpOgorCWFkZAkkMSwgJWVheAorCVJFVFVSTgorCitMKGV4aXRfMik6CisJYWRkCSQyLCAlZWF4CisJUkVUVVJOCisKK0woZXhpdF8zKToKKwlhZGQJJDMsICVlYXgKKwlSRVRVUk4KKworTChleGl0XzQpOgorCWFkZAkkNCwgJWVheAorCVJFVFVSTgorCitMKGV4aXRfNSk6CisJYWRkCSQ1LCAlZWF4CisJUkVUVVJOCisKK0woZXhpdF82KToKKwlhZGQJJDYsICVlYXgKKwlSRVRVUk4KKworTChleGl0XzcpOgorCWFkZAkkNywgJWVheAorCVJFVFVSTgorCitMKGV4aXRfOCk6CisJYWRkCSQ4LCAlZWF4CisJUkVUVVJOCisKK0woZXhpdF85KToKKwlhZGQJJDksICVlYXgKKwlSRVRVUk4KKworTChleGl0XzEwKToKKwlhZGQJJDEwLCAlZWF4CisJUkVUVVJOCisKK0woZXhpdF8xMSk6CisJYWRkCSQxMSwgJWVheAorCVJFVFVSTgorCitMKGV4aXRfMTIpOgorCWFkZAkkMTIsICVlYXgKKwlSRVRVUk4KKworTChleGl0XzEzKToKKwlhZGQJJDEzLCAlZWF4CisJUkVUVVJOCisKK0woZXhpdF8xNCk6CisJYWRkCSQxNCwgJWVheAorCVJFVFVSTgorCitMKGV4aXRfMTUpOgorCWFkZAkkMTUsICVlYXgKKwlSRVRVUk4KKworTChleGl0X3RhaWwwKToKKwltb3YJJWVkeCwgJWVheAorCXN1YgklZWN4LCAlZWF4CisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKGV4aXRfdGFpbDEpOgorCWxlYQkxKCVlZHgpLCAlZWF4CisJc3ViCSVlY3gsICVlYXgKKwlSRVRVUk4KKworTChleGl0X3RhaWwyKToKKwlsZWEJMiglZWR4KSwgJWVheAorCXN1YgklZWN4LCAlZWF4CisJUkVUVVJOCisKK0woZXhpdF90YWlsMyk6CisJbGVhCTMoJWVkeCksICVlYXgKKwlzdWIJJWVjeCwgJWVheAorCVJFVFVSTgorCitMKGV4aXRfdGFpbDQpOgorCWxlYQk0KCVlZHgpLCAlZWF4CisJc3ViCSVlY3gsICVlYXgKKwlSRVRVUk4KKworTChleGl0X3RhaWw1KToKKwlsZWEJNSglZWR4KSwgJWVheAorCXN1YgklZWN4LCAlZWF4CisJUkVUVVJOCisKK0woZXhpdF90YWlsNik6CisJbGVhCTYoJWVkeCksICVlYXgKKwlzdWIJJWVjeCwgJWVheAorCVJFVFVSTgorCitMKGV4aXRfdGFpbDcpOgorCWxlYQk3KCVlZHgpLCAlZWF4CisJc3ViCSVlY3gsICVlYXgKKwlSRVRVUk4KKworTChleGl0X3RhaWw4KToKKwlsZWEJOCglZWR4KSwgJWVheAorCXN1YgklZWN4LCAlZWF4CisJUkVUVVJOCisKK0woZXhpdF90YWlsOSk6CisJbGVhCTkoJWVkeCksICVlYXgKKwlzdWIJJWVjeCwgJWVheAorCVJFVFVSTgorCitMKGV4aXRfdGFpbDEwKToKKwlsZWEJMTAoJWVkeCksICVlYXgKKwlzdWIJJWVjeCwgJWVheAorCVJFVFVSTgorCitMKGV4aXRfdGFpbDExKToKKwlsZWEJMTEoJWVkeCksICVlYXgKKwlzdWIJJWVjeCwgJWVheAorCVJFVFVSTgorCitMKGV4aXRfdGFpbDEyKToKKwlsZWEJMTIoJWVkeCksICVlYXgKKwlzdWIJJWVjeCwgJWVheAorCVJFVFVSTgorCitMKGV4aXRfdGFpbDEzKToKKwlsZWEJMTMoJWVkeCksICVlYXgKKwlzdWIJJWVjeCwgJWVheAorCVJFVFVSTgorCitMKGV4aXRfdGFpbDE0KToKKwlsZWEJMTQoJWVkeCksICVlYXgKKwlzdWIJJWVjeCwgJWVheAorCVJFVFVSTgorCitMKGV4aXRfdGFpbDE1KToKKwlsZWEJMTUoJWVkeCksICVlYXgKKwlzdWIJJWVjeCwgJWVheAorCVJFVFVSTgorCitFTkQgKFNUUkNQWSkKKwpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zdHJpbmcvc3NzZTMtc3RybmNhdC1hdG9tLlMgYi9saWJjL2FyY2gteDg2L3N0cmluZy9zc3NlMy1zdHJuY2F0LWF0b20uUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NjE4NzcxCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9zdHJpbmcvc3NzZTMtc3RybmNhdC1hdG9tLlMKQEAgLTAsMCArMSwzNCBAQAorLyoKK0NvcHlyaWdodCAoYykgMjAxMSwgSW50ZWwgQ29ycG9yYXRpb24KK0FsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisKKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAgICAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisKKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAgICAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAgICAqIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCisgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEludGVsIENvcnBvcmF0aW9uIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICAgICogbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgICAgKiB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKK1dBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKK0RJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKK0FOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCitBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKK1NPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKi8KKworI2RlZmluZSBTVFJDQVQgIHN0cm5jYXQKKyNkZWZpbmUgVVNFX0FTX1NUUk5DQVQKKworI2luY2x1ZGUgInNzc2UzLXN0cmNhdC1hdG9tLlMiCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N0cmluZy9zc3NlMy1zdHJuY21wLWF0b20uUyBiL2xpYmMvYXJjaC14ODYvc3RyaW5nL3Nzc2UzLXN0cm5jbXAtYXRvbS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3NjJkN2UKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N0cmluZy9zc3NlMy1zdHJuY21wLWF0b20uUwpAQCAtMCwwICsxLDM1IEBACisvKgorQ29weXJpZ2h0IChjKSAyMDEwLCBJbnRlbCBDb3Jwb3JhdGlvbgorQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKworICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICAgICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKworICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICAgICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorICAgICogYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisKKyAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgSW50ZWwgQ29ycG9yYXRpb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgICAgKiBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAgICAqIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECitBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CitMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KK0FOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqLworCisKKyNkZWZpbmUgVVNFX0FTX1NUUk5DTVAKKyNkZWZpbmUgU1RSQ01QICBzdHJuY21wCisjaW5jbHVkZSAic3NzZTMtc3RyY21wLWF0b20uUyIKKwpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zdHJpbmcvc3NzZTMtc3RybmNweS1hdG9tLlMgYi9saWJjL2FyY2gteDg2L3N0cmluZy9zc3NlMy1zdHJuY3B5LWF0b20uUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOTQ4YjZkCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9zdHJpbmcvc3NzZTMtc3RybmNweS1hdG9tLlMKQEAgLTAsMCArMSwzMyBAQAorLyoKK0NvcHlyaWdodCAoYykgMjAxMSwgSW50ZWwgQ29ycG9yYXRpb24KK0FsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisKKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAgICAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisKKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAgICAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAgICAqIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCisgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEludGVsIENvcnBvcmF0aW9uIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICAgICogbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgICAgKiB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKK1dBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKK0RJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKK0FOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCitBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKK1NPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKi8KKworI2RlZmluZSBVU0VfQVNfU1RSTkNQWQorI2RlZmluZSBTVFJDUFkgc3RybmNweQorI2luY2x1ZGUgInNzc2UzLXN0cmNweS1hdG9tLlMiCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N0cmluZy9zc3NlMy13Y3NjYXQtYXRvbS5TIGIvbGliYy9hcmNoLXg4Ni9zdHJpbmcvc3NzZTMtd2NzY2F0LWF0b20uUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xN2IwODQzCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9zdHJpbmcvc3NzZTMtd2NzY2F0LWF0b20uUwpAQCAtMCwwICsxLDExNCBAQAorLyoKK0NvcHlyaWdodCAoYykgMjAxMSBJbnRlbCBDb3Jwb3JhdGlvbgorQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKworICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICAgICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKworICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICAgICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorICAgICogYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisKKyAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgSW50ZWwgQ29ycG9yYXRpb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgICAgKiBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAgICAqIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECitBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CitMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KK0FOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqLworCisjaWZuZGVmIEwKKyMgZGVmaW5lIEwobGFiZWwpCS5MIyNsYWJlbAorI2VuZGlmCisKKyNpZm5kZWYgY2ZpX3N0YXJ0cHJvYworIyBkZWZpbmUgY2ZpX3N0YXJ0cHJvYyAgICAgICAgICAgICAgICAgIC5jZmlfc3RhcnRwcm9jCisjZW5kaWYKKworI2lmbmRlZiBjZmlfZW5kcHJvYworIyBkZWZpbmUgY2ZpX2VuZHByb2MgICAgICAgICAgICAgICAgICAgIC5jZmlfZW5kcHJvYworI2VuZGlmCisKKyNpZm5kZWYgY2ZpX3JlbF9vZmZzZXQKKyMgZGVmaW5lIGNmaV9yZWxfb2Zmc2V0KHJlZywgb2ZmKQkuY2ZpX3JlbF9vZmZzZXQgcmVnLCBvZmYKKyNlbmRpZgorCisjaWZuZGVmIGNmaV9yZXN0b3JlCisjIGRlZmluZSBjZmlfcmVzdG9yZShyZWcpCS5jZmlfcmVzdG9yZSByZWcKKyNlbmRpZgorCisjaWZuZGVmIGNmaV9hZGp1c3RfY2ZhX29mZnNldAorIyBkZWZpbmUgY2ZpX2FkanVzdF9jZmFfb2Zmc2V0KG9mZikJLmNmaV9hZGp1c3RfY2ZhX29mZnNldCBvZmYKKyNlbmRpZgorCisjaWZuZGVmIEVOVFJZCisjIGRlZmluZSBFTlRSWShuYW1lKQlcCisJLnR5cGUgbmFtZSwgIEBmdW5jdGlvbjsJXAorCS5nbG9ibCBuYW1lOwlcCisJLnAyYWxpZ24gNDsJXAorbmFtZToJXAorCWNmaV9zdGFydHByb2MKKyNlbmRpZgorCisjaWZuZGVmIEVORAorIyBkZWZpbmUgRU5EKG5hbWUpCVwKKwljZmlfZW5kcHJvYzsJXAorCS5zaXplIG5hbWUsIC4tbmFtZQorI2VuZGlmCisKKyNkZWZpbmUgQ0ZJX1BVU0goUkVHKQlcCisJY2ZpX2FkanVzdF9jZmFfb2Zmc2V0ICg0KTsJXAorCWNmaV9yZWxfb2Zmc2V0IChSRUcsIDApCisKKyNkZWZpbmUgQ0ZJX1BPUChSRUcpCVwKKwljZmlfYWRqdXN0X2NmYV9vZmZzZXQgKC00KTsJXAorCWNmaV9yZXN0b3JlIChSRUcpCisKKyNkZWZpbmUgUFVTSChSRUcpCXB1c2hsIFJFRzsJQ0ZJX1BVU0ggKFJFRykKKyNkZWZpbmUgUE9QKFJFRykJcG9wbCBSRUc7CUNGSV9QT1AgKFJFRykKKworI2RlZmluZSBQQVJNUyAgNAorI2RlZmluZSBTVFIxICBQQVJNUys0CisjZGVmaW5lIFNUUjIgIFNUUjErNAorCisjZGVmaW5lIFVTRV9BU19XQ1NDQVQKKworLnRleHQKK0VOVFJZICh3Y3NjYXQpCisJUFVTSCAgICAoJWVkaSkKKwltb3YJU1RSMSglZXNwKSwgJWVkaQorCW1vdgklZWRpLCAlZWR4CisKKyNkZWZpbmUgUkVUVVJOICBqbXAgTChXY3NjcHlBdG9tKQorI2luY2x1ZGUgInNzZTItd2NzbGVuLWF0b20uUyIKKworTChXY3NjcHlBdG9tKToKKwlzaGwJJDIsICVlYXgKKwltb3YJU1RSMiglZXNwKSwgJWVjeAorCWxlYQkoJWVkaSwgJWVheCksICVlZHgKKworCWNtcAkkMCwgKCVlY3gpCisJanoJTChFeGl0NCkKKwljbXAJJDAsIDQoJWVjeCkKKwlqeglMKEV4aXQ4KQorCWNtcAkkMCwgOCglZWN4KQorCWp6CUwoRXhpdDEyKQorCWNtcAkkMCwgMTIoJWVjeCkKKwlqeglMKEV4aXQxNikKKworI3VuZGVmIFJFVFVSTgorI2RlZmluZSBSRVRVUk4gIFBPUCglZWRpKTsJcmV0OwlDRklfUFVTSCglZWRpKQorI2luY2x1ZGUgInNzc2UzLXdjc2NweS1hdG9tLlMiCisKK0VORCAod2NzY2F0KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zdHJpbmcvc3NzZTMtd2NzY3B5LWF0b20uUyBiL2xpYmMvYXJjaC14ODYvc3RyaW5nL3Nzc2UzLXdjc2NweS1hdG9tLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGJhODRiYwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc3RyaW5nL3Nzc2UzLXdjc2NweS1hdG9tLlMKQEAgLTAsMCArMSw2NTIgQEAKKy8qCitDb3B5cmlnaHQgKGMpIDIwMTEsIEludGVsIENvcnBvcmF0aW9uCitBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgICAgKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgICAgKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgICAgKiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKworICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBJbnRlbCBDb3Jwb3JhdGlvbiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAgICAqIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICAgICogd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKK0FOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECitXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCitESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCitBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyhJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKK0xPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyhJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCitTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisKKyNpZm5kZWYgVVNFX0FTX1dDU0NBVAorCisjIGlmbmRlZiBMCisjICBkZWZpbmUgTChsYWJlbCkJLkwjI2xhYmVsCisjIGVuZGlmCisKKyMgaWZuZGVmIGNmaV9zdGFydHByb2MKKyMgIGRlZmluZSBjZmlfc3RhcnRwcm9jCS5jZmlfc3RhcnRwcm9jCisjIGVuZGlmCisKKyMgaWZuZGVmIGNmaV9lbmRwcm9jCisjICBkZWZpbmUgY2ZpX2VuZHByb2MJLmNmaV9lbmRwcm9jCisjIGVuZGlmCisKKyMgaWZuZGVmIGNmaV9yZWxfb2Zmc2V0CisjICBkZWZpbmUgY2ZpX3JlbF9vZmZzZXQocmVnLCBvZmYpCS5jZmlfcmVsX29mZnNldCByZWcsIG9mZgorIyBlbmRpZgorCisjIGlmbmRlZiBjZmlfcmVzdG9yZQorIyAgZGVmaW5lIGNmaV9yZXN0b3JlKHJlZykJLmNmaV9yZXN0b3JlIHJlZworIyBlbmRpZgorCisjIGlmbmRlZiBjZmlfYWRqdXN0X2NmYV9vZmZzZXQKKyMgIGRlZmluZSBjZmlfYWRqdXN0X2NmYV9vZmZzZXQob2ZmKQkuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IG9mZgorIyBlbmRpZgorCisjIGlmbmRlZiBFTlRSWQorIyAgZGVmaW5lIEVOVFJZKG5hbWUpCVwKKwkudHlwZSBuYW1lLCBAZnVuY3Rpb247CVwKKwkuZ2xvYmwgbmFtZTsJXAorCS5wMmFsaWduIDQ7CVwKK25hbWU6CVwKKwljZmlfc3RhcnRwcm9jCisjIGVuZGlmCisKKyMgaWZuZGVmIEVORAorIyAgZGVmaW5lIEVORChuYW1lKQlcCisJY2ZpX2VuZHByb2M7CVwKKwkuc2l6ZSBuYW1lLCAuLW5hbWUKKyMgZW5kaWYKKworIyBkZWZpbmUgQ0ZJX1BVU0goUkVHKQlcCisJY2ZpX2FkanVzdF9jZmFfb2Zmc2V0ICg0KTsJXAorCWNmaV9yZWxfb2Zmc2V0IChSRUcsIDApCisKKyMgZGVmaW5lIENGSV9QT1AoUkVHKQlcCisJY2ZpX2FkanVzdF9jZmFfb2Zmc2V0ICgtNCk7CVwKKwljZmlfcmVzdG9yZSAoUkVHKQorCisjIGRlZmluZSBQVVNIKFJFRykJcHVzaGwgUkVHOyBDRklfUFVTSCAoUkVHKQorIyBkZWZpbmUgUE9QKFJFRykJcG9wbCBSRUc7IENGSV9QT1AgKFJFRykKKworIyBkZWZpbmUgUEFSTVMJNAorIyBkZWZpbmUgUkVUVVJOCVBPUCAoJWVkaSk7IHJldDsgQ0ZJX1BVU0ggKCVlZGkpCisKKyMgZGVmaW5lIFNUUjEJUEFSTVMKKyMgZGVmaW5lIFNUUjIJU1RSMSs0CisjIGRlZmluZSBMRU4JU1RSMis0CisKKy50ZXh0CitFTlRSWSAod2NzY3B5KQorCW1vdglTVFIxKCVlc3ApLCAlZWR4CisJbW92CVNUUjIoJWVzcCksICVlY3gKKworCWNtcAkkMCwgKCVlY3gpCisJanoJTChFeGl0VGFpbDQpCisJY21wCSQwLCA0KCVlY3gpCisJanoJTChFeGl0VGFpbDgpCisJY21wCSQwLCA4KCVlY3gpCisJanoJTChFeGl0VGFpbDEyKQorCWNtcAkkMCwgMTIoJWVjeCkKKwlqeglMKEV4aXRUYWlsMTYpCisKKwlQVVNICSglZWRpKQorCW1vdgklZWR4LCAlZWRpCisjZW5kaWYKKwlQVVNICSglZXNpKQorCWxlYQkxNiglZWN4KSwgJWVzaQorCisJYW5kCSQtMTYsICVlc2kKKworCXB4b3IJJXhtbTAsICV4bW0wCisJcGNtcGVxZAkoJWVzaSksICV4bW0wCisJbW92ZHF1CSglZWN4KSwgJXhtbTEKKwltb3ZkcXUJJXhtbTEsICglZWR4KQorCisJcG1vdm1za2IgJXhtbTAsICVlYXgKKwlzdWIJJWVjeCwgJWVzaQorCisJdGVzdAklZWF4LCAlZWF4CisJam56CUwoQ29weUZyb20xVG8xNkJ5dGVzKQorCisJbW92CSVlZHgsICVlYXgKKwlsZWEJMTYoJWVkeCksICVlZHgKKwlhbmQJJC0xNiwgJWVkeAorCXN1YgklZWR4LCAlZWF4CisKKwlzdWIJJWVheCwgJWVjeAorCW1vdgklZWN4LCAlZWF4CisJYW5kCSQweGYsICVlYXgKKwltb3YJJDAsICVlc2kKKworCWp6CUwoQWxpZ24xNkJvdGgpCisJY21wCSQ0LCAlZWF4CisJamUJTChTaGw0KQorCWNtcAkkOCwgJWVheAorCWplCUwoU2hsOCkKKwlqbXAJTChTaGwxMikKKworTChBbGlnbjE2Qm90aCk6CisJbW92YXBzCSglZWN4KSwgJXhtbTEKKwltb3ZhcHMJMTYoJWVjeCksICV4bW0yCisJbW92YXBzCSV4bW0xLCAoJWVkeCkKKwlwY21wZXFkCSV4bW0yLCAleG1tMAorCXBtb3Ztc2tiICV4bW0wLCAlZWF4CisJbGVhCTE2KCVlc2kpLCAlZXNpCisKKwl0ZXN0CSVlYXgsICVlYXgKKwlqbnoJTChDb3B5RnJvbTFUbzE2Qnl0ZXMpCisKKwltb3ZhcHMJMTYoJWVjeCwgJWVzaSksICV4bW0zCisJbW92YXBzCSV4bW0yLCAoJWVkeCwgJWVzaSkKKwlwY21wZXFkCSV4bW0zLCAleG1tMAorCXBtb3Ztc2tiICV4bW0wLCAlZWF4CisJbGVhCTE2KCVlc2kpLCAlZXNpCisKKwl0ZXN0CSVlYXgsICVlYXgKKwlqbnoJTChDb3B5RnJvbTFUbzE2Qnl0ZXMpCisKKwltb3ZhcHMJMTYoJWVjeCwgJWVzaSksICV4bW00CisJbW92YXBzCSV4bW0zLCAoJWVkeCwgJWVzaSkKKwlwY21wZXFkCSV4bW00LCAleG1tMAorCXBtb3Ztc2tiICV4bW0wLCAlZWF4CisJbGVhCTE2KCVlc2kpLCAlZXNpCisKKwl0ZXN0CSVlYXgsICVlYXgKKwlqbnoJTChDb3B5RnJvbTFUbzE2Qnl0ZXMpCisKKwltb3ZhcHMJMTYoJWVjeCwgJWVzaSksICV4bW0xCisJbW92YXBzCSV4bW00LCAoJWVkeCwgJWVzaSkKKwlwY21wZXFkCSV4bW0xLCAleG1tMAorCXBtb3Ztc2tiICV4bW0wLCAlZWF4CisJbGVhCTE2KCVlc2kpLCAlZXNpCisKKwl0ZXN0CSVlYXgsICVlYXgKKwlqbnoJTChDb3B5RnJvbTFUbzE2Qnl0ZXMpCisKKwltb3ZhcHMJMTYoJWVjeCwgJWVzaSksICV4bW0yCisJbW92YXBzCSV4bW0xLCAoJWVkeCwgJWVzaSkKKwlwY21wZXFkCSV4bW0yLCAleG1tMAorCXBtb3Ztc2tiICV4bW0wLCAlZWF4CisJbGVhCTE2KCVlc2kpLCAlZXNpCisKKwl0ZXN0CSVlYXgsICVlYXgKKwlqbnoJTChDb3B5RnJvbTFUbzE2Qnl0ZXMpCisKKwltb3ZhcHMJMTYoJWVjeCwgJWVzaSksICV4bW0zCisJbW92YXBzCSV4bW0yLCAoJWVkeCwgJWVzaSkKKwlwY21wZXFkCSV4bW0zLCAleG1tMAorCXBtb3Ztc2tiICV4bW0wLCAlZWF4CisJbGVhCTE2KCVlc2kpLCAlZXNpCisKKwl0ZXN0CSVlYXgsICVlYXgKKwlqbnoJTChDb3B5RnJvbTFUbzE2Qnl0ZXMpCisKKwltb3ZhcHMJJXhtbTMsICglZWR4LCAlZXNpKQorCW1vdgklZWN4LCAlZWF4CisJbGVhCTE2KCVlY3gsICVlc2kpLCAlZWN4CisJYW5kCSQtMHg0MCwgJWVjeAorCXN1YgklZWN4LCAlZWF4CisJc3ViCSVlYXgsICVlZHgKKworCW1vdgkkLTB4NDAsICVlc2kKKworTChBbGlnbmVkNjRMb29wKToKKwltb3ZhcHMJKCVlY3gpLCAleG1tMgorCW1vdmFwcwkzMiglZWN4KSwgJXhtbTMKKwltb3ZhcHMJJXhtbTIsICV4bW00CisJbW92YXBzCTE2KCVlY3gpLCAleG1tNQorCW1vdmFwcwkleG1tMywgJXhtbTYKKwltb3ZhcHMJNDgoJWVjeCksICV4bW03CisJcG1pbnViCSV4bW01LCAleG1tMgorCXBtaW51YgkleG1tNywgJXhtbTMKKwlwbWludWIJJXhtbTIsICV4bW0zCisJbGVhCTY0KCVlZHgpLCAlZWR4CisJcGNtcGVxZAkleG1tMCwgJXhtbTMKKwlsZWEJNjQoJWVjeCksICVlY3gKKwlwbW92bXNrYiAleG1tMywgJWVheAorCisJdGVzdAklZWF4LCAlZWF4CisJam56CUwoQWxpZ25lZDY0TGVhdmUpCisJbW92YXBzCSV4bW00LCAtNjQoJWVkeCkKKwltb3ZhcHMJJXhtbTUsIC00OCglZWR4KQorCW1vdmFwcwkleG1tNiwgLTMyKCVlZHgpCisJbW92YXBzCSV4bW03LCAtMTYoJWVkeCkKKwlqbXAJTChBbGlnbmVkNjRMb29wKQorCitMKEFsaWduZWQ2NExlYXZlKToKKwlwY21wZXFkCSV4bW00LCAleG1tMAorCXBtb3Ztc2tiICV4bW0wLCAlZWF4CisJdGVzdAklZWF4LCAlZWF4CisJam56CUwoQ29weUZyb20xVG8xNkJ5dGVzKQorCisJcGNtcGVxZAkleG1tNSwgJXhtbTAKKwlwbW92bXNrYiAleG1tMCwgJWVheAorCW1vdmFwcwkleG1tNCwgLTY0KCVlZHgpCisJbGVhCTE2KCVlc2kpLCAlZXNpCisJdGVzdAklZWF4LCAlZWF4CisJam56CUwoQ29weUZyb20xVG8xNkJ5dGVzKQorCisJcGNtcGVxZAkleG1tNiwgJXhtbTAKKwlwbW92bXNrYiAleG1tMCwgJWVheAorCW1vdmFwcwkleG1tNSwgLTQ4KCVlZHgpCisJbGVhCTE2KCVlc2kpLCAlZXNpCisJdGVzdAklZWF4LCAlZWF4CisJam56CUwoQ29weUZyb20xVG8xNkJ5dGVzKQorCisJbW92YXBzCSV4bW02LCAtMzIoJWVkeCkKKwlwY21wZXFkCSV4bW03LCAleG1tMAorCXBtb3Ztc2tiICV4bW0wLCAlZWF4CisJbGVhCTE2KCVlc2kpLCAlZXNpCisJdGVzdAklZWF4LCAlZWF4CisJam56CUwoQ29weUZyb20xVG8xNkJ5dGVzKQorCisJbW92CSQtMHg0MCwgJWVzaQorCW1vdmFwcwkleG1tNywgLTE2KCVlZHgpCisJam1wCUwoQWxpZ25lZDY0TG9vcCkKKworCS5wMmFsaWduIDQKK0woU2hsNCk6CisJbW92YXBzCS00KCVlY3gpLCAleG1tMQorCW1vdmFwcwkxMiglZWN4KSwgJXhtbTIKK0woU2hsNFN0YXJ0KToKKwlwY21wZXFkCSV4bW0yLCAleG1tMAorCXBtb3Ztc2tiICV4bW0wLCAlZWF4CisJbW92YXBzCSV4bW0yLCAleG1tMworCisJdGVzdAklZWF4LCAlZWF4CisJam56CUwoU2hsNExvb3BFeGl0KQorCisJcGFsaWducgkkNCwgJXhtbTEsICV4bW0yCisJbW92YXBzCSV4bW0yLCAoJWVkeCkKKwltb3ZhcHMJMjgoJWVjeCksICV4bW0yCisKKwlwY21wZXFkCSV4bW0yLCAleG1tMAorCWxlYQkxNiglZWR4KSwgJWVkeAorCXBtb3Ztc2tiICV4bW0wLCAlZWF4CisJbGVhCTE2KCVlY3gpLCAlZWN4CisJbW92YXBzCSV4bW0yLCAleG1tMQorCisJdGVzdAklZWF4LCAlZWF4CisJam56CUwoU2hsNExvb3BFeGl0KQorCisJcGFsaWducgkkNCwgJXhtbTMsICV4bW0yCisJbW92YXBzCSV4bW0yLCAoJWVkeCkKKwltb3ZhcHMJMjgoJWVjeCksICV4bW0yCisKKwlwY21wZXFkCSV4bW0yLCAleG1tMAorCWxlYQkxNiglZWR4KSwgJWVkeAorCXBtb3Ztc2tiICV4bW0wLCAlZWF4CisJbGVhCTE2KCVlY3gpLCAlZWN4CisJbW92YXBzCSV4bW0yLCAleG1tMworCisJdGVzdAklZWF4LCAlZWF4CisJam56CUwoU2hsNExvb3BFeGl0KQorCisJcGFsaWducgkkNCwgJXhtbTEsICV4bW0yCisJbW92YXBzCSV4bW0yLCAoJWVkeCkKKwltb3ZhcHMJMjgoJWVjeCksICV4bW0yCisKKwlwY21wZXFkCSV4bW0yLCAleG1tMAorCWxlYQkxNiglZWR4KSwgJWVkeAorCXBtb3Ztc2tiICV4bW0wLCAlZWF4CisJbGVhCTE2KCVlY3gpLCAlZWN4CisKKwl0ZXN0CSVlYXgsICVlYXgKKwlqbnoJTChTaGw0TG9vcEV4aXQpCisKKwlwYWxpZ25yCSQ0LCAleG1tMywgJXhtbTIKKwltb3ZhcHMJJXhtbTIsICglZWR4KQorCWxlYQkyOCglZWN4KSwgJWVjeAorCWxlYQkxNiglZWR4KSwgJWVkeAorCisJbW92CSVlY3gsICVlYXgKKwlhbmQJJC0weDQwLCAlZWN4CisJc3ViCSVlY3gsICVlYXgKKwlsZWEJLTEyKCVlY3gpLCAlZWN4CisJc3ViCSVlYXgsICVlZHgKKworCW1vdmFwcwktNCglZWN4KSwgJXhtbTEKKworTChTaGw0TG9vcFN0YXJ0KToKKwltb3ZhcHMJMTIoJWVjeCksICV4bW0yCisJbW92YXBzCTI4KCVlY3gpLCAleG1tMworCW1vdmFwcwkleG1tMywgJXhtbTYKKwltb3ZhcHMJNDQoJWVjeCksICV4bW00CisJbW92YXBzCSV4bW00LCAleG1tNworCW1vdmFwcwk2MCglZWN4KSwgJXhtbTUKKwlwbWludWIJJXhtbTIsICV4bW02CisJcG1pbnViCSV4bW01LCAleG1tNworCXBtaW51YgkleG1tNiwgJXhtbTcKKwlwY21wZXFkCSV4bW0wLCAleG1tNworCXBtb3Ztc2tiICV4bW03LCAlZWF4CisJbW92YXBzCSV4bW01LCAleG1tNworCXBhbGlnbnIJJDQsICV4bW00LCAleG1tNQorCXBhbGlnbnIJJDQsICV4bW0zLCAleG1tNAorCXRlc3QJJWVheCwgJWVheAorCWpueglMKFNobDRTdGFydCkKKworCXBhbGlnbnIJJDQsICV4bW0yLCAleG1tMworCWxlYQk2NCglZWN4KSwgJWVjeAorCXBhbGlnbnIJJDQsICV4bW0xLCAleG1tMgorCW1vdmFwcwkleG1tNywgJXhtbTEKKwltb3ZhcHMJJXhtbTUsIDQ4KCVlZHgpCisJbW92YXBzCSV4bW00LCAzMiglZWR4KQorCW1vdmFwcwkleG1tMywgMTYoJWVkeCkKKwltb3ZhcHMJJXhtbTIsICglZWR4KQorCWxlYQk2NCglZWR4KSwgJWVkeAorCWptcAlMKFNobDRMb29wU3RhcnQpCisKK0woU2hsNExvb3BFeGl0KToKKwltb3ZscGQJKCVlY3gpLCAleG1tMAorCW1vdmwJOCglZWN4KSwgJWVzaQorCW1vdmxwZAkleG1tMCwgKCVlZHgpCisJbW92bAklZXNpLCA4KCVlZHgpCisJUE9QCSglZXNpKQorCWFkZAkkMTIsICVlZHgKKwlhZGQJJDEyLCAlZWN4CisJdGVzdAklYWwsICVhbAorCWp6CUwoRXhpdEhpZ2gpCisJdGVzdAkkMHgwMSwgJWFsCisJam56CUwoRXhpdDQpCisJbW92bHBkCSglZWN4KSwgJXhtbTAKKwltb3ZscGQJJXhtbTAsICglZWR4KQorCW1vdmwJJWVkaSwgJWVheAorCVJFVFVSTgorCisJQ0ZJX1BVU0gJKCVlc2kpCisKKwkucDJhbGlnbiA0CitMKFNobDgpOgorCW1vdmFwcwktOCglZWN4KSwgJXhtbTEKKwltb3ZhcHMJOCglZWN4KSwgJXhtbTIKK0woU2hsOFN0YXJ0KToKKwlwY21wZXFkCSV4bW0yLCAleG1tMAorCXBtb3Ztc2tiICV4bW0wLCAlZWF4CisJbW92YXBzCSV4bW0yLCAleG1tMworCisJdGVzdAklZWF4LCAlZWF4CisJam56CUwoU2hsOExvb3BFeGl0KQorCisJcGFsaWducgkkOCwgJXhtbTEsICV4bW0yCisJbW92YXBzCSV4bW0yLCAoJWVkeCkKKwltb3ZhcHMJMjQoJWVjeCksICV4bW0yCisKKwlwY21wZXFkCSV4bW0yLCAleG1tMAorCWxlYQkxNiglZWR4KSwgJWVkeAorCXBtb3Ztc2tiICV4bW0wLCAlZWF4CisJbGVhCTE2KCVlY3gpLCAlZWN4CisJbW92YXBzCSV4bW0yLCAleG1tMQorCisJdGVzdAklZWF4LCAlZWF4CisJam56CUwoU2hsOExvb3BFeGl0KQorCisJcGFsaWducgkkOCwgJXhtbTMsICV4bW0yCisJbW92YXBzCSV4bW0yLCAoJWVkeCkKKwltb3ZhcHMJMjQoJWVjeCksICV4bW0yCisKKwlwY21wZXFkCSV4bW0yLCAleG1tMAorCWxlYQkxNiglZWR4KSwgJWVkeAorCXBtb3Ztc2tiICV4bW0wLCAlZWF4CisJbGVhCTE2KCVlY3gpLCAlZWN4CisJbW92YXBzCSV4bW0yLCAleG1tMworCisJdGVzdAklZWF4LCAlZWF4CisJam56CUwoU2hsOExvb3BFeGl0KQorCisJcGFsaWducgkkOCwgJXhtbTEsICV4bW0yCisJbW92YXBzCSV4bW0yLCAoJWVkeCkKKwltb3ZhcHMJMjQoJWVjeCksICV4bW0yCisKKwlwY21wZXFkCSV4bW0yLCAleG1tMAorCWxlYQkxNiglZWR4KSwgJWVkeAorCXBtb3Ztc2tiICV4bW0wLCAlZWF4CisJbGVhCTE2KCVlY3gpLCAlZWN4CisKKwl0ZXN0CSVlYXgsICVlYXgKKwlqbnoJTChTaGw4TG9vcEV4aXQpCisKKwlwYWxpZ25yCSQ4LCAleG1tMywgJXhtbTIKKwltb3ZhcHMJJXhtbTIsICglZWR4KQorCWxlYQkyNCglZWN4KSwgJWVjeAorCWxlYQkxNiglZWR4KSwgJWVkeAorCisJbW92CSVlY3gsICVlYXgKKwlhbmQJJC0weDQwLCAlZWN4CisJc3ViCSVlY3gsICVlYXgKKwlsZWEJLTgoJWVjeCksICVlY3gKKwlzdWIJJWVheCwgJWVkeAorCisJbW92YXBzCS04KCVlY3gpLCAleG1tMQorCitMKFNobDhMb29wU3RhcnQpOgorCW1vdmFwcwk4KCVlY3gpLCAleG1tMgorCW1vdmFwcwkyNCglZWN4KSwgJXhtbTMKKwltb3ZhcHMJJXhtbTMsICV4bW02CisJbW92YXBzCTQwKCVlY3gpLCAleG1tNAorCW1vdmFwcwkleG1tNCwgJXhtbTcKKwltb3ZhcHMJNTYoJWVjeCksICV4bW01CisJcG1pbnViCSV4bW0yLCAleG1tNgorCXBtaW51YgkleG1tNSwgJXhtbTcKKwlwbWludWIJJXhtbTYsICV4bW03CisJcGNtcGVxZAkleG1tMCwgJXhtbTcKKwlwbW92bXNrYiAleG1tNywgJWVheAorCW1vdmFwcwkleG1tNSwgJXhtbTcKKwlwYWxpZ25yCSQ4LCAleG1tNCwgJXhtbTUKKwlwYWxpZ25yCSQ4LCAleG1tMywgJXhtbTQKKwl0ZXN0CSVlYXgsICVlYXgKKwlqbnoJTChTaGw4U3RhcnQpCisKKwlwYWxpZ25yCSQ4LCAleG1tMiwgJXhtbTMKKwlsZWEJNjQoJWVjeCksICVlY3gKKwlwYWxpZ25yCSQ4LCAleG1tMSwgJXhtbTIKKwltb3ZhcHMJJXhtbTcsICV4bW0xCisJbW92YXBzCSV4bW01LCA0OCglZWR4KQorCW1vdmFwcwkleG1tNCwgMzIoJWVkeCkKKwltb3ZhcHMJJXhtbTMsIDE2KCVlZHgpCisJbW92YXBzCSV4bW0yLCAoJWVkeCkKKwlsZWEJNjQoJWVkeCksICVlZHgKKwlqbXAJTChTaGw4TG9vcFN0YXJ0KQorCitMKFNobDhMb29wRXhpdCk6CisJbW92bHBkCSglZWN4KSwgJXhtbTAKKwltb3ZscGQJJXhtbTAsICglZWR4KQorCVBPUAkoJWVzaSkKKwlhZGQJJDgsICVlZHgKKwlhZGQJJDgsICVlY3gKKwl0ZXN0CSVhbCwgJWFsCisJanoJTChFeGl0SGlnaCkKKwl0ZXN0CSQweDAxLCAlYWwKKwlqbnoJTChFeGl0NCkKKwltb3ZscGQJKCVlY3gpLCAleG1tMAorCW1vdmxwZAkleG1tMCwgKCVlZHgpCisJbW92bAklZWRpLCAlZWF4CisJUkVUVVJOCisKKwlDRklfUFVTSAkoJWVzaSkKKworCS5wMmFsaWduIDQKK0woU2hsMTIpOgorCW1vdmFwcwktMTIoJWVjeCksICV4bW0xCisJbW92YXBzCTQoJWVjeCksICV4bW0yCitMKFNobDEyU3RhcnQpOgorCXBjbXBlcWQJJXhtbTIsICV4bW0wCisJcG1vdm1za2IgJXhtbTAsICVlYXgKKwltb3ZhcHMJJXhtbTIsICV4bW0zCisKKwl0ZXN0CSVlYXgsICVlYXgKKwlqbnoJTChTaGwxMkxvb3BFeGl0KQorCisJcGFsaWducgkkMTIsICV4bW0xLCAleG1tMgorCW1vdmFwcwkleG1tMiwgKCVlZHgpCisJbW92YXBzCTIwKCVlY3gpLCAleG1tMgorCisJcGNtcGVxZAkleG1tMiwgJXhtbTAKKwlsZWEJMTYoJWVkeCksICVlZHgKKwlwbW92bXNrYiAleG1tMCwgJWVheAorCWxlYQkxNiglZWN4KSwgJWVjeAorCW1vdmFwcwkleG1tMiwgJXhtbTEKKworCXRlc3QJJWVheCwgJWVheAorCWpueglMKFNobDEyTG9vcEV4aXQpCisKKwlwYWxpZ25yCSQxMiwgJXhtbTMsICV4bW0yCisJbW92YXBzCSV4bW0yLCAoJWVkeCkKKwltb3ZhcHMJMjAoJWVjeCksICV4bW0yCisKKwlwY21wZXFkCSV4bW0yLCAleG1tMAorCWxlYQkxNiglZWR4KSwgJWVkeAorCXBtb3Ztc2tiICV4bW0wLCAlZWF4CisJbGVhCTE2KCVlY3gpLCAlZWN4CisJbW92YXBzCSV4bW0yLCAleG1tMworCisJdGVzdAklZWF4LCAlZWF4CisJam56CUwoU2hsMTJMb29wRXhpdCkKKworCXBhbGlnbnIJJDEyLCAleG1tMSwgJXhtbTIKKwltb3ZhcHMJJXhtbTIsICglZWR4KQorCW1vdmFwcwkyMCglZWN4KSwgJXhtbTIKKworCXBjbXBlcWQJJXhtbTIsICV4bW0wCisJbGVhCTE2KCVlZHgpLCAlZWR4CisJcG1vdm1za2IgJXhtbTAsICVlYXgKKwlsZWEJMTYoJWVjeCksICVlY3gKKworCXRlc3QJJWVheCwgJWVheAorCWpueglMKFNobDEyTG9vcEV4aXQpCisKKwlwYWxpZ25yCSQxMiwgJXhtbTMsICV4bW0yCisJbW92YXBzCSV4bW0yLCAoJWVkeCkKKwlsZWEJMjAoJWVjeCksICVlY3gKKwlsZWEJMTYoJWVkeCksICVlZHgKKworCW1vdgklZWN4LCAlZWF4CisJYW5kCSQtMHg0MCwgJWVjeAorCXN1YgklZWN4LCAlZWF4CisJbGVhCS00KCVlY3gpLCAlZWN4CisJc3ViCSVlYXgsICVlZHgKKworCW1vdmFwcwktMTIoJWVjeCksICV4bW0xCisKK0woU2hsMTJMb29wU3RhcnQpOgorCW1vdmFwcwk0KCVlY3gpLCAleG1tMgorCW1vdmFwcwkyMCglZWN4KSwgJXhtbTMKKwltb3ZhcHMJJXhtbTMsICV4bW02CisJbW92YXBzCTM2KCVlY3gpLCAleG1tNAorCW1vdmFwcwkleG1tNCwgJXhtbTcKKwltb3ZhcHMJNTIoJWVjeCksICV4bW01CisJcG1pbnViCSV4bW0yLCAleG1tNgorCXBtaW51YgkleG1tNSwgJXhtbTcKKwlwbWludWIJJXhtbTYsICV4bW03CisJcGNtcGVxZAkleG1tMCwgJXhtbTcKKwlwbW92bXNrYiAleG1tNywgJWVheAorCW1vdmFwcwkleG1tNSwgJXhtbTcKKwlwYWxpZ25yCSQxMiwgJXhtbTQsICV4bW01CisJcGFsaWducgkkMTIsICV4bW0zLCAleG1tNAorCXRlc3QJJWVheCwgJWVheAorCWpueglMKFNobDEyU3RhcnQpCisKKwlwYWxpZ25yCSQxMiwgJXhtbTIsICV4bW0zCisJbGVhCTY0KCVlY3gpLCAlZWN4CisJcGFsaWducgkkMTIsICV4bW0xLCAleG1tMgorCW1vdmFwcwkleG1tNywgJXhtbTEKKwltb3ZhcHMJJXhtbTUsIDQ4KCVlZHgpCisJbW92YXBzCSV4bW00LCAzMiglZWR4KQorCW1vdmFwcwkleG1tMywgMTYoJWVkeCkKKwltb3ZhcHMJJXhtbTIsICglZWR4KQorCWxlYQk2NCglZWR4KSwgJWVkeAorCWptcAlMKFNobDEyTG9vcFN0YXJ0KQorCitMKFNobDEyTG9vcEV4aXQpOgorCW1vdmwJKCVlY3gpLCAlZXNpCisJbW92bAklZXNpLCAoJWVkeCkKKwltb3YJJDQsICVlc2kKKworCS5wMmFsaWduIDQKK0woQ29weUZyb20xVG8xNkJ5dGVzKToKKwlhZGQJJWVzaSwgJWVkeAorCWFkZAklZXNpLCAlZWN4CisKKwlQT1AJKCVlc2kpCisJdGVzdAklYWwsICVhbAorCWp6CUwoRXhpdEhpZ2gpCisJdGVzdAkkMHgwMSwgJWFsCisJam56CUwoRXhpdDQpCitMKEV4aXQ4KToKKwltb3ZscGQJKCVlY3gpLCAleG1tMAorCW1vdmxwZAkleG1tMCwgKCVlZHgpCisJbW92bAklZWRpLCAlZWF4CisJUkVUVVJOCisKKwkucDJhbGlnbiA0CitMKEV4aXRIaWdoKToKKwl0ZXN0CSQweDAxLCAlYWgKKwlqbnoJTChFeGl0MTIpCitMKEV4aXQxNik6CisJbW92ZHF1CSglZWN4KSwgJXhtbTAKKwltb3ZkcXUJJXhtbTAsICglZWR4KQorCW1vdmwJJWVkaSwgJWVheAorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChFeGl0NCk6CisJbW92bAkoJWVjeCksICVlYXgKKwltb3ZsCSVlYXgsICglZWR4KQorCW1vdmwJJWVkaSwgJWVheAorCVJFVFVSTgorCisJLnAyYWxpZ24gNAorTChFeGl0MTIpOgorCW1vdmxwZAkoJWVjeCksICV4bW0wCisJbW92bHBkCSV4bW0wLCAoJWVkeCkKKwltb3ZsCTgoJWVjeCksICVlYXgKKwltb3ZsCSVlYXgsIDgoJWVkeCkKKwltb3ZsCSVlZGksICVlYXgKKwlSRVRVUk4KKworQ0ZJX1BPUAkoJWVkaSkKKworCS5wMmFsaWduIDQKK0woRXhpdFRhaWw0KToKKwltb3ZsCSglZWN4KSwgJWVheAorCW1vdmwJJWVheCwgKCVlZHgpCisJbW92bAklZWR4LCAlZWF4CisJcmV0CisKKwkucDJhbGlnbiA0CitMKEV4aXRUYWlsOCk6CisJbW92bHBkCSglZWN4KSwgJXhtbTAKKwltb3ZscGQJJXhtbTAsICglZWR4KQorCW1vdmwJJWVkeCwgJWVheAorCXJldAorCisJLnAyYWxpZ24gNAorTChFeGl0VGFpbDEyKToKKwltb3ZscGQJKCVlY3gpLCAleG1tMAorCW1vdmxwZAkleG1tMCwgKCVlZHgpCisJbW92bAk4KCVlY3gpLCAlZWF4CisJbW92bAklZWF4LCA4KCVlZHgpCisJbW92bAklZWR4LCAlZWF4CisJcmV0CisKKwkucDJhbGlnbiA0CitMKEV4aXRUYWlsMTYpOgorCW1vdmRxdQkoJWVjeCksICV4bW0wCisJbW92ZHF1CSV4bW0wLCAoJWVkeCkKKwltb3ZsCSVlZHgsICVlYXgKKwlyZXQKKworI2lmbmRlZiBVU0VfQVNfV0NTQ0FUCitFTkQgKHdjc2NweSkKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zdHJpbmcvc3NzZTMtd21lbWNtcC1hdG9tLlMgYi9saWJjL2FyY2gteDg2L3N0cmluZy9zc3NlMy13bWVtY21wLWF0b20uUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzNmYTAyCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9zdHJpbmcvc3NzZTMtd21lbWNtcC1hdG9tLlMKQEAgLTAsMCArMSwzNSBAQAorLyoKK0NvcHlyaWdodCAoYykgMjAxMSwgMjAxMiwgMjAxMyBJbnRlbCBDb3Jwb3JhdGlvbgorQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKworICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICAgICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKworICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICAgICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorICAgICogYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisKKyAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgSW50ZWwgQ29ycG9yYXRpb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgICAgKiBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAgICAqIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECitBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CitMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KK0FOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqLworCisjZGVmaW5lIE1FTUNNUCAgd21lbWNtcAorCisjZGVmaW5lIFVTRV9XQ0hBUgorI2RlZmluZSBVU0VfQVNfV01FTUNNUCAxCisjaW5jbHVkZSAic3NzZTMtbWVtY21wLWF0b20uUyIKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3RyaW5nL3N0cmNhdC5TIGIvbGliYy9hcmNoLXg4Ni9zdHJpbmcvc3RyY2F0LlMKaW5kZXggNjBmZGQ1NS4uYzc1ZjM4YSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zdHJpbmcvc3RyY2F0LlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zdHJpbmcvc3RyY2F0LlMKQEAgLTcxLDMgKzcxLDQgQEAKIEwyOglwb3BsCSVlYXgJCQkvKiBwb3AgZGVzdGluYXRpb24gYWRkcmVzcyAqLwogCXBvcGwJJWVkaQkJCS8qIHJlc3RvcmUgZWRpICovCiAJcmV0CitFTkQoc3RyY2F0KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zdHJpbmcvc3RyY2hyLlMgYi9saWJjL2FyY2gteDg2L3N0cmluZy9zdHJjaHIuUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjc2ZTU5My4uMDAwMDAwMAotLS0gYS9saWJjL2FyY2gteDg2L3N0cmluZy9zdHJjaHIuUworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotLyoJJE9wZW5CU0Q6IHN0cmNoci5TLHYgMS4zIDIwMDUvMDgvMDcgMTE6MzA6MzggZXNwaWUgRXhwICQgKi8KLSNkZWZpbmUgU1RSQ0hSCi0jaW5jbHVkZSAiaW5kZXguUyIKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3RyaW5nL3N0cmNtcC5TIGIvbGliYy9hcmNoLXg4Ni9zdHJpbmcvc3RyY21wLlMKaW5kZXggMjJiYTU0Ni4uNWQzZjRmYyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zdHJpbmcvc3RyY21wLlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zdHJpbmcvc3RyY21wLlMKQEAgLTc5LDMgKzc5LDQgQEAKIAltb3Z6YmwJKCVlZHgpLCVlZHgKIAlzdWJsCSVlZHgsJWVheAogCXJldAorRU5EKHN0cmNtcCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3RyaW5nL3N0cmNtcF93cmFwcGVyLlMgYi9saWJjL2FyY2gteDg2L3N0cmluZy9zdHJjbXBfd3JhcHBlci5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMGYzMDY0Li4wMDAwMDAwCi0tLSBhL2xpYmMvYXJjaC14ODYvc3RyaW5nL3N0cmNtcF93cmFwcGVyLlMKKysrIC9kZXYvbnVsbApAQCAtMSw0MCArMCwwIEBACi0vKgotQ29weXJpZ2h0IChjKSAyMDEwLCBJbnRlbCBDb3Jwb3JhdGlvbgotQWxsIHJpZ2h0cyByZXNlcnZlZC4KLQotUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci1tb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKLQotICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAotICAgICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLQotICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAotICAgICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgotICAgICogYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0KLSAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgSW50ZWwgQ29ycG9yYXRpb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0gICAgKiBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKLSAgICAqIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotCi1USElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECi1BTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgotQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0oSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci1MT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLUFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0oSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwotU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0qLwotCi0jaWYgZGVmaW5lZChVU0VfU1NTRTMpCi0KLSMgZGVmaW5lIHNzc2UzX3N0cmNtcF9sYXRlc3Qgc3RyY21wCi0jIGluY2x1ZGUgInNzc2UzLXN0cmNtcC1sYXRlc3QuUyIKLQotI2Vsc2UKLQotIyBpbmNsdWRlICJzdHJjbXAuUyIKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N0cmluZy9zdHJjcHkuUyBiL2xpYmMvYXJjaC14ODYvc3RyaW5nL3N0cmNweS5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNDFlYjZjLi4wMDAwMDAwCi0tLSBhL2xpYmMvYXJjaC14ODYvc3RyaW5nL3N0cmNweS5TCisrKyAvZGV2L251bGwKQEAgLTEsNjMgKzAsMCBAQAotLyoJJE9wZW5CU0Q6IHN0cmNweS5TLHYgMS44IDIwMDUvMDgvMDcgMTE6MzA6MzggZXNwaWUgRXhwICQgKi8KLS8qCi0gKiBXcml0dGVuIGJ5IEouVC4gQ29ua2xpbiA8anRjQG5ldGJzZC5vcmc+LgotICogUHVibGljIGRvbWFpbi4KLSAqLwotCi0jaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KLQotI2lmIGRlZmluZWQoQVBJV0FSTikKLSNBUFAKLQkuc2VjdGlvbiAuZ251Lndhcm5pbmcuc3RyY3B5Ci0JLmFzY2lpICJ3YXJuaW5nOiBzdHJjcHkoKSBpcyBhbG1vc3QgYWx3YXlzIG1pc3VzZWQsIHBsZWFzZSB1c2Ugc3RybGNweSgpIgotI05PX0FQUAotI2VuZGlmCi0KLS8qCi0gKiBOT1RFOiBJJ3ZlIHVucm9sbGVkIHRoZSBsb29wIGVpZ2h0IHRpbWVzOiBsYXJnZSBlbm91Z2ggdG8gbWFrZSBhCi0gKiBzaWduaWZpY2FudCBkaWZmZXJlbmNlLCBhbmQgc21hbGwgZW5vdWdoIG5vdCB0byB0b3RhbGx5IHRyYXNoIHRoZQotICogY2FjaGUuCi0gKi8KLQotRU5UUlkoc3RyY3B5KQotCW1vdmwJNCglZXNwKSwlZWN4CQkvKiBkc3QgYWRkcmVzcyAqLwotCW1vdmwJOCglZXNwKSwlZWR4CQkvKiBzcmMgYWRkcmVzcyAqLwotCXB1c2hsCSVlY3gJCQkvKiBwdXNoIGRzdCBhZGRyZXNzICovCi0KLQkuYWxpZ24gMiwweDkwCi1MMToJbW92YgkoJWVkeCksJWFsCQkvKiB1bnJvbGwgbG9vcCwgYnV0IG5vdCB0b28gbXVjaCAqLwotCW1vdmIJJWFsLCglZWN4KQotCXRlc3RiCSVhbCwlYWwKLQlqeglMMgotCW1vdmIJMSglZWR4KSwlYWwKLQltb3ZiCSVhbCwxKCVlY3gpCi0JdGVzdGIJJWFsLCVhbAotCWp6CUwyCi0JbW92YgkyKCVlZHgpLCVhbAotCW1vdmIJJWFsLDIoJWVjeCkKLQl0ZXN0YgklYWwsJWFsCi0JanoJTDIKLQltb3ZiCTMoJWVkeCksJWFsCi0JbW92YgklYWwsMyglZWN4KQotCXRlc3RiCSVhbCwlYWwKLQlqeglMMgotCW1vdmIJNCglZWR4KSwlYWwKLQltb3ZiCSVhbCw0KCVlY3gpCi0JdGVzdGIJJWFsLCVhbAotCWp6CUwyCi0JbW92Ygk1KCVlZHgpLCVhbAotCW1vdmIJJWFsLDUoJWVjeCkKLQl0ZXN0YgklYWwsJWFsCi0JanoJTDIKLQltb3ZiCTYoJWVkeCksJWFsCi0JbW92YgklYWwsNiglZWN4KQotCXRlc3RiCSVhbCwlYWwKLQlqeglMMgotCW1vdmIJNyglZWR4KSwlYWwKLQltb3ZiCSVhbCw3KCVlY3gpCi0JYWRkbAkkOCwlZWR4Ci0JYWRkbAkkOCwlZWN4Ci0JdGVzdGIJJWFsLCVhbAotCWpueglMMQotTDI6CXBvcGwJJWVheAkJCS8qIHBvcCBkc3QgYWRkcmVzcyAqLwotCXJldApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zdHJpbmcvc3RybGVuLlMgYi9saWJjL2FyY2gteDg2L3N0cmluZy9zdHJsZW4uUwppbmRleCA0ZjA0ZmZjLi41MjdlMzZhIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N0cmluZy9zdHJsZW4uUworKysgYi9saWJjL2FyY2gteDg2L3N0cmluZy9zdHJsZW4uUwpAQCAtMTgsMyArMTgsNCBAQAogCWxlYWwJLTEoJWVjeCksJWVheAkJLyogYW5kIHN1YnRyYWN0aW5nIG9uZSAqLwogCXBvcGwJJWVkaQogCXJldAorRU5EKHN0cmxlbikKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3RyaW5nL3N0cmxlbl93cmFwcGVyLlMgYi9saWJjL2FyY2gteDg2L3N0cmluZy9zdHJsZW5fd3JhcHBlci5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjI3ODZiLi4wMDAwMDAwCi0tLSBhL2xpYmMvYXJjaC14ODYvc3RyaW5nL3N0cmxlbl93cmFwcGVyLlMKKysrIC9kZXYvbnVsbApAQCAtMSw0MCArMCwwIEBACi0vKgotQ29weXJpZ2h0IChjKSAyMDEwLCBJbnRlbCBDb3Jwb3JhdGlvbgotQWxsIHJpZ2h0cyByZXNlcnZlZC4KLQotUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci1tb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKLQotICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAotICAgICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLQotICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAotICAgICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgotICAgICogYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0KLSAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgSW50ZWwgQ29ycG9yYXRpb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0gICAgKiBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKLSAgICAqIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotCi1USElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECi1BTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgotQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0oSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci1MT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLUFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0oSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwotU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0qLwotCi0jaWYgZGVmaW5lZChVU0VfU1NFMikKLQotIyBkZWZpbmUgc3NlMl9zdHJsZW5fYXRvbSBzdHJsZW4KLSMgaW5jbHVkZSAic3NlMi1zdHJsZW4tYXRvbS5TIgotCi0jZWxzZQotCi0jIGluY2x1ZGUgInN0cmxlbi5TIgotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3RyaW5nL3N0cm5jbXAuUyBiL2xpYmMvYXJjaC14ODYvc3RyaW5nL3N0cm5jbXAuUwppbmRleCA1YWE4OGQ3Li42NjQ5NDczIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N0cmluZy9zdHJuY21wLlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zdHJpbmcvc3RybmNtcC5TCkBAIC0xMTEsMyArMTExLDQgQEAKIEw0Ogl4b3JsCSVlYXgsJWVheAogCXBvcGwJJWVieAogCXJldAorRU5EKHN0cm5jbXApCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N0cmluZy9zdHJuY21wX3dyYXBwZXIuUyBiL2xpYmMvYXJjaC14ODYvc3RyaW5nL3N0cm5jbXBfd3JhcHBlci5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOTFkNzU1Li4wMDAwMDAwCi0tLSBhL2xpYmMvYXJjaC14ODYvc3RyaW5nL3N0cm5jbXBfd3JhcHBlci5TCisrKyAvZGV2L251bGwKQEAgLTEsNDIgKzAsMCBAQAotLyoKLUNvcHlyaWdodCAoYykgMjAxMCwgSW50ZWwgQ29ycG9yYXRpb24KLUFsbCByaWdodHMgcmVzZXJ2ZWQuCi0KLVJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6Ci0KLSAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKLSAgICAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0KLSAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKLSAgICAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KLSAgICAqIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotCi0gICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEludGVsIENvcnBvcmF0aW9uIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICAgICogbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0gICAgKiB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLQotVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAotQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLVdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLURJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKLUFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCi1BTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKLVNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKi8KLQotI2lmIGRlZmluZWQoVVNFX1NTU0UzKQotCi0jIGRlZmluZSBVU0VfQVNfU1RSTkNNUAotIyBkZWZpbmUgc3NzZTNfc3RyY21wX2xhdGVzdCBzdHJuY21wCi0jIGluY2x1ZGUgInNzc2UzLXN0cmNtcC1sYXRlc3QuUyIKLQotI2Vsc2UKLQotIyBpbmNsdWRlICJzdHJuY21wLlMiCi0KLSNlbmRpZgotCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N0cmluZy9zdHJyY2hyLlMgYi9saWJjL2FyY2gteDg2L3N0cmluZy9zdHJyY2hyLlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRlZTE1M2YuLjAwMDAwMDAKLS0tIGEvbGliYy9hcmNoLXg4Ni9zdHJpbmcvc3RycmNoci5TCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0vKgkkT3BlbkJTRDogc3RycmNoci5TLHYgMS4zIDIwMDUvMDgvMDcgMTE6MzA6MzggZXNwaWUgRXhwICQgKi8KLSNkZWZpbmUgU1RSUkNIUgotI2luY2x1ZGUgInJpbmRleC5TIgpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zdHJpbmcvc3dhYi5TIGIvbGliYy9hcmNoLXg4Ni9zdHJpbmcvc3dhYi5TCmluZGV4IDMwNTU4NjAuLjJmNmNmYjIgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3RyaW5nL3N3YWIuUworKysgYi9saWJjL2FyY2gteDg2L3N0cmluZy9zd2FiLlMKQEAgLTY1LDMgKzY1LDQgQEAKIEw0Oglwb3BsCSVlZGkKIAlwb3BsCSVlc2kKIAlyZXQKK0VORChzd2FiKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy5tayBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMubWsKaW5kZXggN2QzZDkzNy4uMTE1NzNkZSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy5taworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzLm1rCkBAIC01LDYgKzUsNyBAQAogc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvX19mb3JrLlMKIHN5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL193YWl0cGlkLlMKIHN5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL19fd2FpdGlkLlMKK3N5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL3dhaXQ0LlMKIHN5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL19fc3lzX2Nsb25lLlMKIHN5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL2V4ZWN2ZS5TCiBzeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9fX3NldHVpZC5TCkBAIC0xOSw2ICsyMCw3IEBACiBzeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9nZXRncm91cHMuUwogc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvZ2V0cGdpZC5TCiBzeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9nZXRwcGlkLlMKK3N5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL2dldHNpZC5TCiBzeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9zZXRzaWQuUwogc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvc2V0Z2lkLlMKIHN5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL19fc2V0cmV1aWQuUwpAQCAtMjcsNiArMjksNyBAQAogc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvX19icmsuUwogc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMva2lsbC5TCiBzeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy90a2lsbC5TCitzeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy90Z2tpbGwuUwogc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvX19wdHJhY2UuUwogc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvX19zZXRfdGhyZWFkX2FyZWEuUwogc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvX19nZXRwcmlvcml0eS5TCkBAIC02MSw2ICs2NCw4IEBACiBzeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9tYWR2aXNlLlMKIHN5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL21sb2NrLlMKIHN5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL211bmxvY2suUworc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvbWxvY2thbGwuUworc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvbXVubG9ja2FsbC5TCiBzeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9taW5jb3JlLlMKIHN5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL19faW9jdGwuUwogc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvcmVhZHYuUwpAQCAtMTExLDYgKzExNiw3IEBACiBzeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9yZW5hbWUuUwogc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvX19nZXRjd2QuUwogc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvYWNjZXNzLlMKK3N5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL2ZhY2Nlc3NhdC5TCiBzeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9zeW1saW5rLlMKIHN5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL2ZjaGRpci5TCiBzeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy90cnVuY2F0ZS5TCkBAIC0xMjMsNiArMTI5LDkgQEAKIHN5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL3JlbW92ZXhhdHRyLlMKIHN5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL2xyZW1vdmV4YXR0ci5TCiBzeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9fX3N0YXRmczY0LlMKK3N5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL3Vuc2hhcmUuUworc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvc3dhcG9uLlMKK3N5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL3N3YXBvZmYuUwogc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvcGF1c2UuUwogc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvZ2V0dGltZW9mZGF5LlMKIHN5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL3NldHRpbWVvZmRheS5TCkBAIC0xNDEsNiArMTUwLDkgQEAKIHN5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL19fdGltZXJfZGVsZXRlLlMKIHN5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL3V0aW1lcy5TCiBzeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy91dGltZW5zYXQuUworc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvdGltZXJmZF9jcmVhdGUuUworc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvdGltZXJmZF9zZXR0aW1lLlMKK3N5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL3RpbWVyZmRfZ2V0dGltZS5TCiBzeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9zaWdhY3Rpb24uUwogc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvc2lncHJvY21hc2suUwogc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvX19zaWdzdXNwZW5kLlMKQEAgLTE0OCw2ICsxNjAsNyBAQAogc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvX19ydF9zaWdwcm9jbWFzay5TCiBzeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9fX3J0X3NpZ3RpbWVkd2FpdC5TCiBzeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9zaWdwZW5kaW5nLlMKK3N5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL3NpZ25hbGZkNC5TCiBzeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9zb2NrZXQuUwogc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvYmluZC5TCiBzeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9jb25uZWN0LlMKQEAgLTE3Nyw3ICsxOTAsNiBAQAogc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvaW9wcmlvX3NldC5TCiBzeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9pb3ByaW9fZ2V0LlMKIHN5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL3VuYW1lLlMKLXN5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL19fd2FpdDQuUwogc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvdW1hc2suUwogc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvX19yZWJvb3QuUwogc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvX19zeXNsb2cuUwpAQCAtMTg2LDYgKzE5OCw3IEBACiBzeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9rbG9nY3RsLlMKIHN5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL3N5c2luZm8uUwogc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvcGVyc29uYWxpdHkuUworc3lzY2FsbF9zcmMgKz0gYXJjaC14ODYvc3lzY2FsbHMvcGVyZl9ldmVudF9vcGVuLlMKIHN5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL2Z1dGV4LlMKIHN5c2NhbGxfc3JjICs9IGFyY2gteDg2L3N5c2NhbGxzL2Vwb2xsX2NyZWF0ZS5TCiBzeXNjYWxsX3NyYyArPSBhcmNoLXg4Ni9zeXNjYWxscy9lcG9sbF9jdGwuUwpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX2Jyay5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX2Jyay5TCmluZGV4IDIzNWNjNGYuLmIyNmUxODcgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19icmsuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fYnJrLlMKQEAgLTEsMTcgKzEsMTQgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KIAotICAgIC50ZXh0Ci0gICAgLnR5cGUgX19icmssIEBmdW5jdGlvbgotICAgIC5nbG9ibCBfX2JyawotICAgIC5hbGlnbiA0Ci0KLV9fYnJrOgorRU5UUlkoX19icmspCiAgICAgcHVzaGwgICAlZWJ4CiAgICAgbW92ICAgICA4KCVlc3ApLCAlZWJ4CiAgICAgbW92bCAgICAkX19OUl9icmssICVlYXgKICAgICBpbnQgICAgICQweDgwCi0gICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGNtcGwgICAgJC1NQVhfRVJSTk8sICVlYXgKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4CkBAIC0yMSwzICsxOCw0IEBACiAxOgogICAgIHBvcGwgICAgJWVieAogICAgIHJldAorRU5EKF9fYnJrKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX2ZjbnRsLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fZmNudGwuUwppbmRleCAzNzdmMDhlLi4zMjhkZjI0IDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fZmNudGwuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fZmNudGwuUwpAQCAtMSwxMiArMSw5IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCi0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAKLSAgICAudGV4dAotICAgIC50eXBlIF9fZmNudGwsIEBmdW5jdGlvbgotICAgIC5nbG9ibCBfX2ZjbnRsCi0gICAgLmFsaWduIDQKLQotX19mY250bDoKK0VOVFJZKF9fZmNudGwpCiAgICAgcHVzaGwgICAlZWJ4CiAgICAgcHVzaGwgICAlZWN4CiAgICAgcHVzaGwgICAlZWR4CkBAIC0xNSw3ICsxMiw3IEBACiAgICAgbW92ICAgICAyNCglZXNwKSwgJWVkeAogICAgIG1vdmwgICAgJF9fTlJfZmNudGwsICVlYXgKICAgICBpbnQgICAgICQweDgwCi0gICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGNtcGwgICAgJC1NQVhfRVJSTk8sICVlYXgKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4CkBAIC0yNywzICsyNCw0IEBACiAgICAgcG9wbCAgICAlZWN4CiAgICAgcG9wbCAgICAlZWJ4CiAgICAgcmV0CitFTkQoX19mY250bCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19mY250bDY0LlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fZmNudGw2NC5TCmluZGV4IDJlZDQ3ZmUuLmIwZmI5ODEgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19mY250bDY0LlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX2ZjbnRsNjQuUwpAQCAtMSwxMiArMSw5IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCi0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAKLSAgICAudGV4dAotICAgIC50eXBlIF9fZmNudGw2NCwgQGZ1bmN0aW9uCi0gICAgLmdsb2JsIF9fZmNudGw2NAotICAgIC5hbGlnbiA0Ci0KLV9fZmNudGw2NDoKK0VOVFJZKF9fZmNudGw2NCkKICAgICBwdXNobCAgICVlYngKICAgICBwdXNobCAgICVlY3gKICAgICBwdXNobCAgICVlZHgKQEAgLTE1LDcgKzEyLDcgQEAKICAgICBtb3YgICAgIDI0KCVlc3ApLCAlZWR4CiAgICAgbW92bCAgICAkX19OUl9mY250bDY0LCAlZWF4CiAgICAgaW50ICAgICAkMHg4MAotICAgIGNtcGwgICAgJC0xMjksICVlYXgKKyAgICBjbXBsICAgICQtTUFYX0VSUk5PLCAlZWF4CiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheApAQCAtMjcsMyArMjQsNCBAQAogICAgIHBvcGwgICAgJWVjeAogICAgIHBvcGwgICAgJWVieAogICAgIHJldAorRU5EKF9fZmNudGw2NCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19mb3JrLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fZm9yay5TCmluZGV4IDRiNWQxYzYuLjk4ZTAwYzggMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19mb3JrLlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX2ZvcmsuUwpAQCAtMSwxNyArMSwxNCBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLwotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogCi0gICAgLnRleHQKLSAgICAudHlwZSBfX2ZvcmssIEBmdW5jdGlvbgotICAgIC5nbG9ibCBfX2ZvcmsKLSAgICAuYWxpZ24gNAotCi1fX2Zvcms6CitFTlRSWShfX2ZvcmspCiAgICAgcHVzaGwgICAlZWJ4CiAgICAgbW92ICAgICA4KCVlc3ApLCAlZWJ4CiAgICAgbW92bCAgICAkX19OUl9mb3JrLCAlZWF4CiAgICAgaW50ICAgICAkMHg4MAotICAgIGNtcGwgICAgJC0xMjksICVlYXgKKyAgICBjbXBsICAgICQtTUFYX0VSUk5PLCAlZWF4CiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheApAQCAtMjEsMyArMTgsNCBAQAogMToKICAgICBwb3BsICAgICVlYngKICAgICByZXQKK0VORChfX2ZvcmspCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fZnN0YXRmczY0LlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fZnN0YXRmczY0LlMKaW5kZXggZjc1NTI0NC4uYWViNjg2MyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX2ZzdGF0ZnM2NC5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19mc3RhdGZzNjQuUwpAQCAtMSwxMiArMSw5IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCi0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAKLSAgICAudGV4dAotICAgIC50eXBlIF9fZnN0YXRmczY0LCBAZnVuY3Rpb24KLSAgICAuZ2xvYmwgX19mc3RhdGZzNjQKLSAgICAuYWxpZ24gNAotCi1fX2ZzdGF0ZnM2NDoKK0VOVFJZKF9fZnN0YXRmczY0KQogICAgIHB1c2hsICAgJWVieAogICAgIHB1c2hsICAgJWVjeAogICAgIHB1c2hsICAgJWVkeApAQCAtMTUsNyArMTIsNyBAQAogICAgIG1vdiAgICAgMjQoJWVzcCksICVlZHgKICAgICBtb3ZsICAgICRfX05SX2ZzdGF0ZnM2NCwgJWVheAogICAgIGludCAgICAgJDB4ODAKLSAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgY21wbCAgICAkLU1BWF9FUlJOTywgJWVheAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKQEAgLTI3LDMgKzI0LDQgQEAKICAgICBwb3BsICAgICVlY3gKICAgICBwb3BsICAgICVlYngKICAgICByZXQKK0VORChfX2ZzdGF0ZnM2NCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19nZXRjcHUuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19nZXRjcHUuUwppbmRleCAwMzgxNzk5Li5mNTA3ODJjIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fZ2V0Y3B1LlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX2dldGNwdS5TCkBAIC0xLDEyICsxLDkgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KIAotICAgIC50ZXh0Ci0gICAgLnR5cGUgX19nZXRjcHUsIEBmdW5jdGlvbgotICAgIC5nbG9ibCBfX2dldGNwdQotICAgIC5hbGlnbiA0Ci0KLV9fZ2V0Y3B1OgorRU5UUlkoX19nZXRjcHUpCiAgICAgcHVzaGwgICAlZWJ4CiAgICAgcHVzaGwgICAlZWN4CiAgICAgcHVzaGwgICAlZWR4CkBAIC0xNSw3ICsxMiw3IEBACiAgICAgbW92ICAgICAyNCglZXNwKSwgJWVkeAogICAgIG1vdmwgICAgJF9fTlJfZ2V0Y3B1LCAlZWF4CiAgICAgaW50ICAgICAkMHg4MAotICAgIGNtcGwgICAgJC0xMjksICVlYXgKKyAgICBjbXBsICAgICQtTUFYX0VSUk5PLCAlZWF4CiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheApAQCAtMjcsMyArMjQsNCBAQAogICAgIHBvcGwgICAgJWVjeAogICAgIHBvcGwgICAgJWVieAogICAgIHJldAorRU5EKF9fZ2V0Y3B1KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX2dldGN3ZC5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX2dldGN3ZC5TCmluZGV4IGYyYmQ1MjAuLjkzMzczNDIgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19nZXRjd2QuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fZ2V0Y3dkLlMKQEAgLTEsMTkgKzEsMTYgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KIAotICAgIC50ZXh0Ci0gICAgLnR5cGUgX19nZXRjd2QsIEBmdW5jdGlvbgotICAgIC5nbG9ibCBfX2dldGN3ZAotICAgIC5hbGlnbiA0Ci0KLV9fZ2V0Y3dkOgorRU5UUlkoX19nZXRjd2QpCiAgICAgcHVzaGwgICAlZWJ4CiAgICAgcHVzaGwgICAlZWN4CiAgICAgbW92ICAgICAxMiglZXNwKSwgJWVieAogICAgIG1vdiAgICAgMTYoJWVzcCksICVlY3gKICAgICBtb3ZsICAgICRfX05SX2dldGN3ZCwgJWVheAogICAgIGludCAgICAgJDB4ODAKLSAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgY21wbCAgICAkLU1BWF9FUlJOTywgJWVheAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKQEAgLTI0LDMgKzIxLDQgQEAKICAgICBwb3BsICAgICVlY3gKICAgICBwb3BsICAgICVlYngKICAgICByZXQKK0VORChfX2dldGN3ZCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19nZXRwcmlvcml0eS5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX2dldHByaW9yaXR5LlMKaW5kZXggMDg1MDNkOC4uNjBmYTNiYiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX2dldHByaW9yaXR5LlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX2dldHByaW9yaXR5LlMKQEAgLTEsMTkgKzEsMTYgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KIAotICAgIC50ZXh0Ci0gICAgLnR5cGUgX19nZXRwcmlvcml0eSwgQGZ1bmN0aW9uCi0gICAgLmdsb2JsIF9fZ2V0cHJpb3JpdHkKLSAgICAuYWxpZ24gNAotCi1fX2dldHByaW9yaXR5OgorRU5UUlkoX19nZXRwcmlvcml0eSkKICAgICBwdXNobCAgICVlYngKICAgICBwdXNobCAgICVlY3gKICAgICBtb3YgICAgIDEyKCVlc3ApLCAlZWJ4CiAgICAgbW92ICAgICAxNiglZXNwKSwgJWVjeAogICAgIG1vdmwgICAgJF9fTlJfZ2V0cHJpb3JpdHksICVlYXgKICAgICBpbnQgICAgICQweDgwCi0gICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGNtcGwgICAgJC1NQVhfRVJSTk8sICVlYXgKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4CkBAIC0yNCwzICsyMSw0IEBACiAgICAgcG9wbCAgICAlZWN4CiAgICAgcG9wbCAgICAlZWJ4CiAgICAgcmV0CitFTkQoX19nZXRwcmlvcml0eSkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19pb2N0bC5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX2lvY3RsLlMKaW5kZXggY2RkZTlhYi4uMGU4ZDE4OSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX2lvY3RsLlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX2lvY3RsLlMKQEAgLTEsMTIgKzEsOSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLwotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogCi0gICAgLnRleHQKLSAgICAudHlwZSBfX2lvY3RsLCBAZnVuY3Rpb24KLSAgICAuZ2xvYmwgX19pb2N0bAotICAgIC5hbGlnbiA0Ci0KLV9faW9jdGw6CitFTlRSWShfX2lvY3RsKQogICAgIHB1c2hsICAgJWVieAogICAgIHB1c2hsICAgJWVjeAogICAgIHB1c2hsICAgJWVkeApAQCAtMTUsNyArMTIsNyBAQAogICAgIG1vdiAgICAgMjQoJWVzcCksICVlZHgKICAgICBtb3ZsICAgICRfX05SX2lvY3RsLCAlZWF4CiAgICAgaW50ICAgICAkMHg4MAotICAgIGNtcGwgICAgJC0xMjksICVlYXgKKyAgICBjbXBsICAgICQtTUFYX0VSUk5PLCAlZWF4CiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheApAQCAtMjcsMyArMjQsNCBAQAogICAgIHBvcGwgICAgJWVjeAogICAgIHBvcGwgICAgJWVieAogICAgIHJldAorRU5EKF9faW9jdGwpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fbGxzZWVrLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fbGxzZWVrLlMKaW5kZXggZGY0OWE5NC4uYjM0Nzg4NiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX2xsc2Vlay5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19sbHNlZWsuUwpAQCAtMSwxMiArMSw5IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCi0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAKLSAgICAudGV4dAotICAgIC50eXBlIF9fbGxzZWVrLCBAZnVuY3Rpb24KLSAgICAuZ2xvYmwgX19sbHNlZWsKLSAgICAuYWxpZ24gNAotCi1fX2xsc2VlazoKK0VOVFJZKF9fbGxzZWVrKQogICAgIHB1c2hsICAgJWVieAogICAgIHB1c2hsICAgJWVjeAogICAgIHB1c2hsICAgJWVkeApAQCAtMTksNyArMTYsNyBAQAogICAgIG1vdiAgICAgNDAoJWVzcCksICVlZGkKICAgICBtb3ZsICAgICRfX05SX19sbHNlZWssICVlYXgKICAgICBpbnQgICAgICQweDgwCi0gICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGNtcGwgICAgJC1NQVhfRVJSTk8sICVlYXgKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4CkBAIC0zMywzICszMCw0IEBACiAgICAgcG9wbCAgICAlZWN4CiAgICAgcG9wbCAgICAlZWJ4CiAgICAgcmV0CitFTkQoX19sbHNlZWspCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fbW1hcDIuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19tbWFwMi5TCmluZGV4IGZlYTU3MWYuLjAxMGE5ODkgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19tbWFwMi5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19tbWFwMi5TCkBAIC0xLDEyICsxLDkgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KIAotICAgIC50ZXh0Ci0gICAgLnR5cGUgX19tbWFwMiwgQGZ1bmN0aW9uCi0gICAgLmdsb2JsIF9fbW1hcDIKLSAgICAuYWxpZ24gNAotCi1fX21tYXAyOgorRU5UUlkoX19tbWFwMikKICAgICBwdXNobCAgICVlYngKICAgICBwdXNobCAgICVlY3gKICAgICBwdXNobCAgICVlZHgKQEAgLTIxLDcgKzE4LDcgQEAKICAgICBtb3YgICAgIDQ4KCVlc3ApLCAlZWJwCiAgICAgbW92bCAgICAkX19OUl9tbWFwMiwgJWVheAogICAgIGludCAgICAgJDB4ODAKLSAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgY21wbCAgICAkLU1BWF9FUlJOTywgJWVheAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKQEAgLTM2LDMgKzMzLDQgQEAKICAgICBwb3BsICAgICVlY3gKICAgICBwb3BsICAgICVlYngKICAgICByZXQKK0VORChfX21tYXAyKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX29wZW4uUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19vcGVuLlMKaW5kZXggZGY2ZmQ5My4uODdjZGE0NSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX29wZW4uUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fb3Blbi5TCkBAIC0xLDEyICsxLDkgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KIAotICAgIC50ZXh0Ci0gICAgLnR5cGUgX19vcGVuLCBAZnVuY3Rpb24KLSAgICAuZ2xvYmwgX19vcGVuCi0gICAgLmFsaWduIDQKLQotX19vcGVuOgorRU5UUlkoX19vcGVuKQogICAgIHB1c2hsICAgJWVieAogICAgIHB1c2hsICAgJWVjeAogICAgIHB1c2hsICAgJWVkeApAQCAtMTUsNyArMTIsNyBAQAogICAgIG1vdiAgICAgMjQoJWVzcCksICVlZHgKICAgICBtb3ZsICAgICRfX05SX29wZW4sICVlYXgKICAgICBpbnQgICAgICQweDgwCi0gICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGNtcGwgICAgJC1NQVhfRVJSTk8sICVlYXgKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4CkBAIC0yNywzICsyNCw0IEBACiAgICAgcG9wbCAgICAlZWN4CiAgICAgcG9wbCAgICAlZWJ4CiAgICAgcmV0CitFTkQoX19vcGVuKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX29wZW5hdC5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX29wZW5hdC5TCmluZGV4IGFhMTQ5MjcuLjMxZGIxZGMgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19vcGVuYXQuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fb3BlbmF0LlMKQEAgLTEsMTIgKzEsOSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLwotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogCi0gICAgLnRleHQKLSAgICAudHlwZSBfX29wZW5hdCwgQGZ1bmN0aW9uCi0gICAgLmdsb2JsIF9fb3BlbmF0Ci0gICAgLmFsaWduIDQKLQotX19vcGVuYXQ6CitFTlRSWShfX29wZW5hdCkKICAgICBwdXNobCAgICVlYngKICAgICBwdXNobCAgICVlY3gKICAgICBwdXNobCAgICVlZHgKQEAgLTE3LDcgKzE0LDcgQEAKICAgICBtb3YgICAgIDMyKCVlc3ApLCAlZXNpCiAgICAgbW92bCAgICAkX19OUl9vcGVuYXQsICVlYXgKICAgICBpbnQgICAgICQweDgwCi0gICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGNtcGwgICAgJC1NQVhfRVJSTk8sICVlYXgKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4CkBAIC0zMCwzICsyNyw0IEBACiAgICAgcG9wbCAgICAlZWN4CiAgICAgcG9wbCAgICAlZWJ4CiAgICAgcmV0CitFTkQoX19vcGVuYXQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fcHRyYWNlLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fcHRyYWNlLlMKaW5kZXggYmVjOTUyYi4uMWYxNDNjYyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX3B0cmFjZS5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19wdHJhY2UuUwpAQCAtMSwxMiArMSw5IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCi0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAKLSAgICAudGV4dAotICAgIC50eXBlIF9fcHRyYWNlLCBAZnVuY3Rpb24KLSAgICAuZ2xvYmwgX19wdHJhY2UKLSAgICAuYWxpZ24gNAotCi1fX3B0cmFjZToKK0VOVFJZKF9fcHRyYWNlKQogICAgIHB1c2hsICAgJWVieAogICAgIHB1c2hsICAgJWVjeAogICAgIHB1c2hsICAgJWVkeApAQCAtMTcsNyArMTQsNyBAQAogICAgIG1vdiAgICAgMzIoJWVzcCksICVlc2kKICAgICBtb3ZsICAgICRfX05SX3B0cmFjZSwgJWVheAogICAgIGludCAgICAgJDB4ODAKLSAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgY21wbCAgICAkLU1BWF9FUlJOTywgJWVheAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKQEAgLTMwLDMgKzI3LDQgQEAKICAgICBwb3BsICAgICVlY3gKICAgICBwb3BsICAgICVlYngKICAgICByZXQKK0VORChfX3B0cmFjZSkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19yZWJvb3QuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19yZWJvb3QuUwppbmRleCA2Y2I3NGUyLi5hMzJlOGE4IDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fcmVib290LlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX3JlYm9vdC5TCkBAIC0xLDEyICsxLDkgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KIAotICAgIC50ZXh0Ci0gICAgLnR5cGUgX19yZWJvb3QsIEBmdW5jdGlvbgotICAgIC5nbG9ibCBfX3JlYm9vdAotICAgIC5hbGlnbiA0Ci0KLV9fcmVib290OgorRU5UUlkoX19yZWJvb3QpCiAgICAgcHVzaGwgICAlZWJ4CiAgICAgcHVzaGwgICAlZWN4CiAgICAgcHVzaGwgICAlZWR4CkBAIC0xNyw3ICsxNCw3IEBACiAgICAgbW92ICAgICAzMiglZXNwKSwgJWVzaQogICAgIG1vdmwgICAgJF9fTlJfcmVib290LCAlZWF4CiAgICAgaW50ICAgICAkMHg4MAotICAgIGNtcGwgICAgJC0xMjksICVlYXgKKyAgICBjbXBsICAgICQtTUFYX0VSUk5PLCAlZWF4CiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheApAQCAtMzAsMyArMjcsNCBAQAogICAgIHBvcGwgICAgJWVjeAogICAgIHBvcGwgICAgJWVieAogICAgIHJldAorRU5EKF9fcmVib290KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX3J0X3NpZ2FjdGlvbi5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX3J0X3NpZ2FjdGlvbi5TCmluZGV4IGM1N2Y1ODAuLjk1N2JjYTEgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19ydF9zaWdhY3Rpb24uUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fcnRfc2lnYWN0aW9uLlMKQEAgLTEsMTIgKzEsOSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLwotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogCi0gICAgLnRleHQKLSAgICAudHlwZSBfX3J0X3NpZ2FjdGlvbiwgQGZ1bmN0aW9uCi0gICAgLmdsb2JsIF9fcnRfc2lnYWN0aW9uCi0gICAgLmFsaWduIDQKLQotX19ydF9zaWdhY3Rpb246CitFTlRSWShfX3J0X3NpZ2FjdGlvbikKICAgICBwdXNobCAgICVlYngKICAgICBwdXNobCAgICVlY3gKICAgICBwdXNobCAgICVlZHgKQEAgLTE3LDcgKzE0LDcgQEAKICAgICBtb3YgICAgIDMyKCVlc3ApLCAlZXNpCiAgICAgbW92bCAgICAkX19OUl9ydF9zaWdhY3Rpb24sICVlYXgKICAgICBpbnQgICAgICQweDgwCi0gICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGNtcGwgICAgJC1NQVhfRVJSTk8sICVlYXgKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4CkBAIC0zMCwzICsyNyw0IEBACiAgICAgcG9wbCAgICAlZWN4CiAgICAgcG9wbCAgICAlZWJ4CiAgICAgcmV0CitFTkQoX19ydF9zaWdhY3Rpb24pCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fcnRfc2lncHJvY21hc2suUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19ydF9zaWdwcm9jbWFzay5TCmluZGV4IDYyMzMzMWIuLmEyM2UwNzkgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19ydF9zaWdwcm9jbWFzay5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19ydF9zaWdwcm9jbWFzay5TCkBAIC0xLDEyICsxLDkgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KIAotICAgIC50ZXh0Ci0gICAgLnR5cGUgX19ydF9zaWdwcm9jbWFzaywgQGZ1bmN0aW9uCi0gICAgLmdsb2JsIF9fcnRfc2lncHJvY21hc2sKLSAgICAuYWxpZ24gNAotCi1fX3J0X3NpZ3Byb2NtYXNrOgorRU5UUlkoX19ydF9zaWdwcm9jbWFzaykKICAgICBwdXNobCAgICVlYngKICAgICBwdXNobCAgICVlY3gKICAgICBwdXNobCAgICVlZHgKQEAgLTE3LDcgKzE0LDcgQEAKICAgICBtb3YgICAgIDMyKCVlc3ApLCAlZXNpCiAgICAgbW92bCAgICAkX19OUl9ydF9zaWdwcm9jbWFzaywgJWVheAogICAgIGludCAgICAgJDB4ODAKLSAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgY21wbCAgICAkLU1BWF9FUlJOTywgJWVheAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKQEAgLTMwLDMgKzI3LDQgQEAKICAgICBwb3BsICAgICVlY3gKICAgICBwb3BsICAgICVlYngKICAgICByZXQKK0VORChfX3J0X3NpZ3Byb2NtYXNrKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX3J0X3NpZ3RpbWVkd2FpdC5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX3J0X3NpZ3RpbWVkd2FpdC5TCmluZGV4IDhlMTRhODkuLmNmMmIyYTIgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19ydF9zaWd0aW1lZHdhaXQuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fcnRfc2lndGltZWR3YWl0LlMKQEAgLTEsMTIgKzEsOSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLwotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogCi0gICAgLnRleHQKLSAgICAudHlwZSBfX3J0X3NpZ3RpbWVkd2FpdCwgQGZ1bmN0aW9uCi0gICAgLmdsb2JsIF9fcnRfc2lndGltZWR3YWl0Ci0gICAgLmFsaWduIDQKLQotX19ydF9zaWd0aW1lZHdhaXQ6CitFTlRSWShfX3J0X3NpZ3RpbWVkd2FpdCkKICAgICBwdXNobCAgICVlYngKICAgICBwdXNobCAgICVlY3gKICAgICBwdXNobCAgICVlZHgKQEAgLTE3LDcgKzE0LDcgQEAKICAgICBtb3YgICAgIDMyKCVlc3ApLCAlZXNpCiAgICAgbW92bCAgICAkX19OUl9ydF9zaWd0aW1lZHdhaXQsICVlYXgKICAgICBpbnQgICAgICQweDgwCi0gICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGNtcGwgICAgJC1NQVhfRVJSTk8sICVlYXgKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4CkBAIC0zMCwzICsyNyw0IEBACiAgICAgcG9wbCAgICAlZWN4CiAgICAgcG9wbCAgICAlZWJ4CiAgICAgcmV0CitFTkQoX19ydF9zaWd0aW1lZHdhaXQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fc2NoZWRfZ2V0YWZmaW5pdHkuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19zY2hlZF9nZXRhZmZpbml0eS5TCmluZGV4IDQzYmZhNTAuLmRhOWYwOGEgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19zY2hlZF9nZXRhZmZpbml0eS5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19zY2hlZF9nZXRhZmZpbml0eS5TCkBAIC0xLDEyICsxLDkgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KIAotICAgIC50ZXh0Ci0gICAgLnR5cGUgX19zY2hlZF9nZXRhZmZpbml0eSwgQGZ1bmN0aW9uCi0gICAgLmdsb2JsIF9fc2NoZWRfZ2V0YWZmaW5pdHkKLSAgICAuYWxpZ24gNAotCi1fX3NjaGVkX2dldGFmZmluaXR5OgorRU5UUlkoX19zY2hlZF9nZXRhZmZpbml0eSkKICAgICBwdXNobCAgICVlYngKICAgICBwdXNobCAgICVlY3gKICAgICBwdXNobCAgICVlZHgKQEAgLTE1LDcgKzEyLDcgQEAKICAgICBtb3YgICAgIDI0KCVlc3ApLCAlZWR4CiAgICAgbW92bCAgICAkX19OUl9zY2hlZF9nZXRhZmZpbml0eSwgJWVheAogICAgIGludCAgICAgJDB4ODAKLSAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgY21wbCAgICAkLU1BWF9FUlJOTywgJWVheAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKQEAgLTI3LDMgKzI0LDQgQEAKICAgICBwb3BsICAgICVlY3gKICAgICBwb3BsICAgICVlYngKICAgICByZXQKK0VORChfX3NjaGVkX2dldGFmZmluaXR5KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX3NldF90aHJlYWRfYXJlYS5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX3NldF90aHJlYWRfYXJlYS5TCmluZGV4IGNkMjIwNDAuLjM3ZjQxZDAgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19zZXRfdGhyZWFkX2FyZWEuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fc2V0X3RocmVhZF9hcmVhLlMKQEAgLTEsMTcgKzEsMTQgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KIAotICAgIC50ZXh0Ci0gICAgLnR5cGUgX19zZXRfdGhyZWFkX2FyZWEsIEBmdW5jdGlvbgotICAgIC5nbG9ibCBfX3NldF90aHJlYWRfYXJlYQotICAgIC5hbGlnbiA0Ci0KLV9fc2V0X3RocmVhZF9hcmVhOgorRU5UUlkoX19zZXRfdGhyZWFkX2FyZWEpCiAgICAgcHVzaGwgICAlZWJ4CiAgICAgbW92ICAgICA4KCVlc3ApLCAlZWJ4CiAgICAgbW92bCAgICAkX19OUl9zZXRfdGhyZWFkX2FyZWEsICVlYXgKICAgICBpbnQgICAgICQweDgwCi0gICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGNtcGwgICAgJC1NQVhfRVJSTk8sICVlYXgKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4CkBAIC0yMSwzICsxOCw0IEBACiAxOgogICAgIHBvcGwgICAgJWVieAogICAgIHJldAorRU5EKF9fc2V0X3RocmVhZF9hcmVhKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX3NldHJlc3VpZC5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX3NldHJlc3VpZC5TCmluZGV4IGM0OTJkZmIuLmMxNmQyZmIgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19zZXRyZXN1aWQuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fc2V0cmVzdWlkLlMKQEAgLTEsMTIgKzEsOSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLwotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogCi0gICAgLnRleHQKLSAgICAudHlwZSBfX3NldHJlc3VpZCwgQGZ1bmN0aW9uCi0gICAgLmdsb2JsIF9fc2V0cmVzdWlkCi0gICAgLmFsaWduIDQKLQotX19zZXRyZXN1aWQ6CitFTlRSWShfX3NldHJlc3VpZCkKICAgICBwdXNobCAgICVlYngKICAgICBwdXNobCAgICVlY3gKICAgICBwdXNobCAgICVlZHgKQEAgLTE1LDcgKzEyLDcgQEAKICAgICBtb3YgICAgIDI0KCVlc3ApLCAlZWR4CiAgICAgbW92bCAgICAkX19OUl9zZXRyZXN1aWQzMiwgJWVheAogICAgIGludCAgICAgJDB4ODAKLSAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgY21wbCAgICAkLU1BWF9FUlJOTywgJWVheAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKQEAgLTI3LDMgKzI0LDQgQEAKICAgICBwb3BsICAgICVlY3gKICAgICBwb3BsICAgICVlYngKICAgICByZXQKK0VORChfX3NldHJlc3VpZCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19zZXRyZXVpZC5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX3NldHJldWlkLlMKaW5kZXggMTExZTk5OS4uMmJhNTIxZCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX3NldHJldWlkLlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX3NldHJldWlkLlMKQEAgLTEsMTkgKzEsMTYgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KIAotICAgIC50ZXh0Ci0gICAgLnR5cGUgX19zZXRyZXVpZCwgQGZ1bmN0aW9uCi0gICAgLmdsb2JsIF9fc2V0cmV1aWQKLSAgICAuYWxpZ24gNAotCi1fX3NldHJldWlkOgorRU5UUlkoX19zZXRyZXVpZCkKICAgICBwdXNobCAgICVlYngKICAgICBwdXNobCAgICVlY3gKICAgICBtb3YgICAgIDEyKCVlc3ApLCAlZWJ4CiAgICAgbW92ICAgICAxNiglZXNwKSwgJWVjeAogICAgIG1vdmwgICAgJF9fTlJfc2V0cmV1aWQzMiwgJWVheAogICAgIGludCAgICAgJDB4ODAKLSAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgY21wbCAgICAkLU1BWF9FUlJOTywgJWVheAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKQEAgLTI0LDMgKzIxLDQgQEAKICAgICBwb3BsICAgICVlY3gKICAgICBwb3BsICAgICVlYngKICAgICByZXQKK0VORChfX3NldHJldWlkKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX3NldHVpZC5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX3NldHVpZC5TCmluZGV4IDFlNWYyODUuLjA5MmNlYjAgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19zZXR1aWQuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fc2V0dWlkLlMKQEAgLTEsMTcgKzEsMTQgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KIAotICAgIC50ZXh0Ci0gICAgLnR5cGUgX19zZXR1aWQsIEBmdW5jdGlvbgotICAgIC5nbG9ibCBfX3NldHVpZAotICAgIC5hbGlnbiA0Ci0KLV9fc2V0dWlkOgorRU5UUlkoX19zZXR1aWQpCiAgICAgcHVzaGwgICAlZWJ4CiAgICAgbW92ICAgICA4KCVlc3ApLCAlZWJ4CiAgICAgbW92bCAgICAkX19OUl9zZXR1aWQzMiwgJWVheAogICAgIGludCAgICAgJDB4ODAKLSAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgY21wbCAgICAkLU1BWF9FUlJOTywgJWVheAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKQEAgLTIxLDMgKzE4LDQgQEAKIDE6CiAgICAgcG9wbCAgICAlZWJ4CiAgICAgcmV0CitFTkQoX19zZXR1aWQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fc2lnc3VzcGVuZC5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX3NpZ3N1c3BlbmQuUwppbmRleCA2NGRlNzU2Li5jNjk2NjVmIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fc2lnc3VzcGVuZC5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19zaWdzdXNwZW5kLlMKQEAgLTEsMTIgKzEsOSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLwotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogCi0gICAgLnRleHQKLSAgICAudHlwZSBfX3NpZ3N1c3BlbmQsIEBmdW5jdGlvbgotICAgIC5nbG9ibCBfX3NpZ3N1c3BlbmQKLSAgICAuYWxpZ24gNAotCi1fX3NpZ3N1c3BlbmQ6CitFTlRSWShfX3NpZ3N1c3BlbmQpCiAgICAgcHVzaGwgICAlZWJ4CiAgICAgcHVzaGwgICAlZWN4CiAgICAgcHVzaGwgICAlZWR4CkBAIC0xNSw3ICsxMiw3IEBACiAgICAgbW92ICAgICAyNCglZXNwKSwgJWVkeAogICAgIG1vdmwgICAgJF9fTlJfc2lnc3VzcGVuZCwgJWVheAogICAgIGludCAgICAgJDB4ODAKLSAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgY21wbCAgICAkLU1BWF9FUlJOTywgJWVheAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKQEAgLTI3LDMgKzI0LDQgQEAKICAgICBwb3BsICAgICVlY3gKICAgICBwb3BsICAgICVlYngKICAgICByZXQKK0VORChfX3NpZ3N1c3BlbmQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fc3RhdGZzNjQuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19zdGF0ZnM2NC5TCmluZGV4IGEwNjg1YjcuLjU4Nzg1YWQgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19zdGF0ZnM2NC5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19zdGF0ZnM2NC5TCkBAIC0xLDEyICsxLDkgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KIAotICAgIC50ZXh0Ci0gICAgLnR5cGUgX19zdGF0ZnM2NCwgQGZ1bmN0aW9uCi0gICAgLmdsb2JsIF9fc3RhdGZzNjQKLSAgICAuYWxpZ24gNAotCi1fX3N0YXRmczY0OgorRU5UUlkoX19zdGF0ZnM2NCkKICAgICBwdXNobCAgICVlYngKICAgICBwdXNobCAgICVlY3gKICAgICBwdXNobCAgICVlZHgKQEAgLTE1LDcgKzEyLDcgQEAKICAgICBtb3YgICAgIDI0KCVlc3ApLCAlZWR4CiAgICAgbW92bCAgICAkX19OUl9zdGF0ZnM2NCwgJWVheAogICAgIGludCAgICAgJDB4ODAKLSAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgY21wbCAgICAkLU1BWF9FUlJOTywgJWVheAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKQEAgLTI3LDMgKzI0LDQgQEAKICAgICBwb3BsICAgICVlY3gKICAgICBwb3BsICAgICVlYngKICAgICByZXQKK0VORChfX3N0YXRmczY0KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX3N5c19jbG9uZS5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX3N5c19jbG9uZS5TCmluZGV4IDE3MmQ2YWYuLjE3ZTdjM2IgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19zeXNfY2xvbmUuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fc3lzX2Nsb25lLlMKQEAgLTEsMTIgKzEsOSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLwotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogCi0gICAgLnRleHQKLSAgICAudHlwZSBfX3N5c19jbG9uZSwgQGZ1bmN0aW9uCi0gICAgLmdsb2JsIF9fc3lzX2Nsb25lCi0gICAgLmFsaWduIDQKLQotX19zeXNfY2xvbmU6CitFTlRSWShfX3N5c19jbG9uZSkKICAgICBwdXNobCAgICVlYngKICAgICBwdXNobCAgICVlY3gKICAgICBwdXNobCAgICVlZHgKQEAgLTE5LDcgKzE2LDcgQEAKICAgICBtb3YgICAgIDQwKCVlc3ApLCAlZWRpCiAgICAgbW92bCAgICAkX19OUl9jbG9uZSwgJWVheAogICAgIGludCAgICAgJDB4ODAKLSAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgY21wbCAgICAkLU1BWF9FUlJOTywgJWVheAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKQEAgLTMzLDMgKzMwLDQgQEAKICAgICBwb3BsICAgICVlY3gKICAgICBwb3BsICAgICVlYngKICAgICByZXQKK0VORChfX3N5c19jbG9uZSkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19zeXNsb2cuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19zeXNsb2cuUwppbmRleCAzOTgyZGI0Li4xMjE2ZDc1IDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fc3lzbG9nLlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX3N5c2xvZy5TCkBAIC0xLDEyICsxLDkgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KIAotICAgIC50ZXh0Ci0gICAgLnR5cGUgX19zeXNsb2csIEBmdW5jdGlvbgotICAgIC5nbG9ibCBfX3N5c2xvZwotICAgIC5hbGlnbiA0Ci0KLV9fc3lzbG9nOgorRU5UUlkoX19zeXNsb2cpCiAgICAgcHVzaGwgICAlZWJ4CiAgICAgcHVzaGwgICAlZWN4CiAgICAgcHVzaGwgICAlZWR4CkBAIC0xNSw3ICsxMiw3IEBACiAgICAgbW92ICAgICAyNCglZXNwKSwgJWVkeAogICAgIG1vdmwgICAgJF9fTlJfc3lzbG9nLCAlZWF4CiAgICAgaW50ICAgICAkMHg4MAotICAgIGNtcGwgICAgJC0xMjksICVlYXgKKyAgICBjbXBsICAgICQtTUFYX0VSUk5PLCAlZWF4CiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheApAQCAtMjcsMyArMjQsNCBAQAogICAgIHBvcGwgICAgJWVjeAogICAgIHBvcGwgICAgJWVieAogICAgIHJldAorRU5EKF9fc3lzbG9nKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX3RpbWVyX2NyZWF0ZS5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX3RpbWVyX2NyZWF0ZS5TCmluZGV4IDY2YjBjZWEuLjE4MTdhZmMgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX190aW1lcl9jcmVhdGUuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fdGltZXJfY3JlYXRlLlMKQEAgLTEsMTIgKzEsOSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLwotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogCi0gICAgLnRleHQKLSAgICAudHlwZSBfX3RpbWVyX2NyZWF0ZSwgQGZ1bmN0aW9uCi0gICAgLmdsb2JsIF9fdGltZXJfY3JlYXRlCi0gICAgLmFsaWduIDQKLQotX190aW1lcl9jcmVhdGU6CitFTlRSWShfX3RpbWVyX2NyZWF0ZSkKICAgICBwdXNobCAgICVlYngKICAgICBwdXNobCAgICVlY3gKICAgICBwdXNobCAgICVlZHgKQEAgLTE1LDcgKzEyLDcgQEAKICAgICBtb3YgICAgIDI0KCVlc3ApLCAlZWR4CiAgICAgbW92bCAgICAkX19OUl90aW1lcl9jcmVhdGUsICVlYXgKICAgICBpbnQgICAgICQweDgwCi0gICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGNtcGwgICAgJC1NQVhfRVJSTk8sICVlYXgKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4CkBAIC0yNywzICsyNCw0IEBACiAgICAgcG9wbCAgICAlZWN4CiAgICAgcG9wbCAgICAlZWJ4CiAgICAgcmV0CitFTkQoX190aW1lcl9jcmVhdGUpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fdGltZXJfZGVsZXRlLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fdGltZXJfZGVsZXRlLlMKaW5kZXggNDM0NGQwOC4uMTQ3MmE5OSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX3RpbWVyX2RlbGV0ZS5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX190aW1lcl9kZWxldGUuUwpAQCAtMSwxNyArMSwxNCBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLwotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogCi0gICAgLnRleHQKLSAgICAudHlwZSBfX3RpbWVyX2RlbGV0ZSwgQGZ1bmN0aW9uCi0gICAgLmdsb2JsIF9fdGltZXJfZGVsZXRlCi0gICAgLmFsaWduIDQKLQotX190aW1lcl9kZWxldGU6CitFTlRSWShfX3RpbWVyX2RlbGV0ZSkKICAgICBwdXNobCAgICVlYngKICAgICBtb3YgICAgIDgoJWVzcCksICVlYngKICAgICBtb3ZsICAgICRfX05SX3RpbWVyX2RlbGV0ZSwgJWVheAogICAgIGludCAgICAgJDB4ODAKLSAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgY21wbCAgICAkLU1BWF9FUlJOTywgJWVheAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKQEAgLTIxLDMgKzE4LDQgQEAKIDE6CiAgICAgcG9wbCAgICAlZWJ4CiAgICAgcmV0CitFTkQoX190aW1lcl9kZWxldGUpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fdGltZXJfZ2V0b3ZlcnJ1bi5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX3RpbWVyX2dldG92ZXJydW4uUwppbmRleCA0MzcxNDE1Li4yMjA0NjgyIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fdGltZXJfZ2V0b3ZlcnJ1bi5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX190aW1lcl9nZXRvdmVycnVuLlMKQEAgLTEsMTcgKzEsMTQgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KIAotICAgIC50ZXh0Ci0gICAgLnR5cGUgX190aW1lcl9nZXRvdmVycnVuLCBAZnVuY3Rpb24KLSAgICAuZ2xvYmwgX190aW1lcl9nZXRvdmVycnVuCi0gICAgLmFsaWduIDQKLQotX190aW1lcl9nZXRvdmVycnVuOgorRU5UUlkoX190aW1lcl9nZXRvdmVycnVuKQogICAgIHB1c2hsICAgJWVieAogICAgIG1vdiAgICAgOCglZXNwKSwgJWVieAogICAgIG1vdmwgICAgJF9fTlJfdGltZXJfZ2V0b3ZlcnJ1biwgJWVheAogICAgIGludCAgICAgJDB4ODAKLSAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgY21wbCAgICAkLU1BWF9FUlJOTywgJWVheAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKQEAgLTIxLDMgKzE4LDQgQEAKIDE6CiAgICAgcG9wbCAgICAlZWJ4CiAgICAgcmV0CitFTkQoX190aW1lcl9nZXRvdmVycnVuKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX3RpbWVyX2dldHRpbWUuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX190aW1lcl9nZXR0aW1lLlMKaW5kZXggMzkyM2IwYS4uZTQ1ZTRlZiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX3RpbWVyX2dldHRpbWUuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fdGltZXJfZ2V0dGltZS5TCkBAIC0xLDE5ICsxLDE2IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCi0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAKLSAgICAudGV4dAotICAgIC50eXBlIF9fdGltZXJfZ2V0dGltZSwgQGZ1bmN0aW9uCi0gICAgLmdsb2JsIF9fdGltZXJfZ2V0dGltZQotICAgIC5hbGlnbiA0Ci0KLV9fdGltZXJfZ2V0dGltZToKK0VOVFJZKF9fdGltZXJfZ2V0dGltZSkKICAgICBwdXNobCAgICVlYngKICAgICBwdXNobCAgICVlY3gKICAgICBtb3YgICAgIDEyKCVlc3ApLCAlZWJ4CiAgICAgbW92ICAgICAxNiglZXNwKSwgJWVjeAogICAgIG1vdmwgICAgJF9fTlJfdGltZXJfZ2V0dGltZSwgJWVheAogICAgIGludCAgICAgJDB4ODAKLSAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgY21wbCAgICAkLU1BWF9FUlJOTywgJWVheAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKQEAgLTI0LDMgKzIxLDQgQEAKICAgICBwb3BsICAgICVlY3gKICAgICBwb3BsICAgICVlYngKICAgICByZXQKK0VORChfX3RpbWVyX2dldHRpbWUpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fdGltZXJfc2V0dGltZS5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX3RpbWVyX3NldHRpbWUuUwppbmRleCBjYWJiN2RmLi43MWE5MTgyIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fdGltZXJfc2V0dGltZS5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX190aW1lcl9zZXR0aW1lLlMKQEAgLTEsMTIgKzEsOSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLwotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogCi0gICAgLnRleHQKLSAgICAudHlwZSBfX3RpbWVyX3NldHRpbWUsIEBmdW5jdGlvbgotICAgIC5nbG9ibCBfX3RpbWVyX3NldHRpbWUKLSAgICAuYWxpZ24gNAotCi1fX3RpbWVyX3NldHRpbWU6CitFTlRSWShfX3RpbWVyX3NldHRpbWUpCiAgICAgcHVzaGwgICAlZWJ4CiAgICAgcHVzaGwgICAlZWN4CiAgICAgcHVzaGwgICAlZWR4CkBAIC0xNyw3ICsxNCw3IEBACiAgICAgbW92ICAgICAzMiglZXNwKSwgJWVzaQogICAgIG1vdmwgICAgJF9fTlJfdGltZXJfc2V0dGltZSwgJWVheAogICAgIGludCAgICAgJDB4ODAKLSAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgY21wbCAgICAkLU1BWF9FUlJOTywgJWVheAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKQEAgLTMwLDMgKzI3LDQgQEAKICAgICBwb3BsICAgICVlY3gKICAgICBwb3BsICAgICVlYngKICAgICByZXQKK0VORChfX3RpbWVyX3NldHRpbWUpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fd2FpdDQuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX193YWl0NC5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NWZmYjk1Li4wMDAwMDAwCi0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX193YWl0NC5TCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLwotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgotCi0gICAgLnRleHQKLSAgICAudHlwZSBfX3dhaXQ0LCBAZnVuY3Rpb24KLSAgICAuZ2xvYmwgX193YWl0NAotICAgIC5hbGlnbiA0Ci0KLV9fd2FpdDQ6Ci0gICAgcHVzaGwgICAlZWJ4Ci0gICAgcHVzaGwgICAlZWN4Ci0gICAgcHVzaGwgICAlZWR4Ci0gICAgcHVzaGwgICAlZXNpCi0gICAgbW92ICAgICAyMCglZXNwKSwgJWVieAotICAgIG1vdiAgICAgMjQoJWVzcCksICVlY3gKLSAgICBtb3YgICAgIDI4KCVlc3ApLCAlZWR4Ci0gICAgbW92ICAgICAzMiglZXNwKSwgJWVzaQotICAgIG1vdmwgICAgJF9fTlJfd2FpdDQsICVlYXgKLSAgICBpbnQgICAgICQweDgwCi0gICAgY21wbCAgICAkLTEyOSwgJWVheAotICAgIGpiICAgICAgMWYKLSAgICBuZWdsICAgICVlYXgKLSAgICBwdXNobCAgICVlYXgKLSAgICBjYWxsICAgIF9fc2V0X2Vycm5vCi0gICAgYWRkbCAgICAkNCwgJWVzcAotICAgIG9ybCAgICAgJC0xLCAlZWF4Ci0xOgotICAgIHBvcGwgICAgJWVzaQotICAgIHBvcGwgICAgJWVkeAotICAgIHBvcGwgICAgJWVjeAotICAgIHBvcGwgICAgJWVieAotICAgIHJldApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX3dhaXRpZC5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX3dhaXRpZC5TCmluZGV4IDRkZDhjMTEuLjI1ODhiMjYgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX193YWl0aWQuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fd2FpdGlkLlMKQEAgLTEsMTIgKzEsOSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLwotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogCi0gICAgLnRleHQKLSAgICAudHlwZSBfX3dhaXRpZCwgQGZ1bmN0aW9uCi0gICAgLmdsb2JsIF9fd2FpdGlkCi0gICAgLmFsaWduIDQKLQotX193YWl0aWQ6CitFTlRSWShfX3dhaXRpZCkKICAgICBwdXNobCAgICVlYngKICAgICBwdXNobCAgICVlY3gKICAgICBwdXNobCAgICVlZHgKQEAgLTE5LDcgKzE2LDcgQEAKICAgICBtb3YgICAgIDQwKCVlc3ApLCAlZWRpCiAgICAgbW92bCAgICAkX19OUl93YWl0aWQsICVlYXgKICAgICBpbnQgICAgICQweDgwCi0gICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGNtcGwgICAgJC1NQVhfRVJSTk8sICVlYXgKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4CkBAIC0zMywzICszMCw0IEBACiAgICAgcG9wbCAgICAlZWN4CiAgICAgcG9wbCAgICAlZWJ4CiAgICAgcmV0CitFTkQoX193YWl0aWQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19leGl0LlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19leGl0LlMKaW5kZXggMjFhYTQ5Zi4uOWNlM2U3MSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fZXhpdC5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX2V4aXQuUwpAQCAtMSwxNyArMSwxNCBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLwotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogCi0gICAgLnRleHQKLSAgICAudHlwZSBfZXhpdCwgQGZ1bmN0aW9uCi0gICAgLmdsb2JsIF9leGl0Ci0gICAgLmFsaWduIDQKLQotX2V4aXQ6CitFTlRSWShfZXhpdCkKICAgICBwdXNobCAgICVlYngKICAgICBtb3YgICAgIDgoJWVzcCksICVlYngKICAgICBtb3ZsICAgICRfX05SX2V4aXRfZ3JvdXAsICVlYXgKICAgICBpbnQgICAgICQweDgwCi0gICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGNtcGwgICAgJC1NQVhfRVJSTk8sICVlYXgKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4CkBAIC0yMSwzICsxOCw0IEBACiAxOgogICAgIHBvcGwgICAgJWVieAogICAgIHJldAorRU5EKF9leGl0KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fZXhpdF90aHJlYWQuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX2V4aXRfdGhyZWFkLlMKaW5kZXggMTZhYWE1Yi4uY2MxMjkxNiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fZXhpdF90aHJlYWQuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19leGl0X3RocmVhZC5TCkBAIC0xLDE3ICsxLDE0IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCi0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAKLSAgICAudGV4dAotICAgIC50eXBlIF9leGl0X3RocmVhZCwgQGZ1bmN0aW9uCi0gICAgLmdsb2JsIF9leGl0X3RocmVhZAotICAgIC5hbGlnbiA0Ci0KLV9leGl0X3RocmVhZDoKK0VOVFJZKF9leGl0X3RocmVhZCkKICAgICBwdXNobCAgICVlYngKICAgICBtb3YgICAgIDgoJWVzcCksICVlYngKICAgICBtb3ZsICAgICRfX05SX2V4aXQsICVlYXgKICAgICBpbnQgICAgICQweDgwCi0gICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGNtcGwgICAgJC1NQVhfRVJSTk8sICVlYXgKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4CkBAIC0yMSwzICsxOCw0IEBACiAxOgogICAgIHBvcGwgICAgJWVieAogICAgIHJldAorRU5EKF9leGl0X3RocmVhZCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX3dhaXRwaWQuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX3dhaXRwaWQuUwppbmRleCA3ZTc2NDk2Li44ZWQ3ODk4IDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL193YWl0cGlkLlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fd2FpdHBpZC5TCkBAIC0xLDEyICsxLDkgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KIAotICAgIC50ZXh0Ci0gICAgLnR5cGUgX3dhaXRwaWQsIEBmdW5jdGlvbgotICAgIC5nbG9ibCBfd2FpdHBpZAotICAgIC5hbGlnbiA0Ci0KLV93YWl0cGlkOgorRU5UUlkoX3dhaXRwaWQpCiAgICAgcHVzaGwgICAlZWJ4CiAgICAgcHVzaGwgICAlZWN4CiAgICAgcHVzaGwgICAlZWR4CkBAIC0xNyw3ICsxNCw3IEBACiAgICAgbW92ICAgICAzMiglZXNwKSwgJWVzaQogICAgIG1vdmwgICAgJF9fTlJfd2FpdHBpZCwgJWVheAogICAgIGludCAgICAgJDB4ODAKLSAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgY21wbCAgICAkLU1BWF9FUlJOTywgJWVheAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKQEAgLTMwLDMgKzI3LDQgQEAKICAgICBwb3BsICAgICVlY3gKICAgICBwb3BsICAgICVlYngKICAgICByZXQKK0VORChfd2FpdHBpZCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvYWNjZXB0LlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2FjY2VwdC5TCmluZGV4IGNjZDU2ZTcuLjU2NzgyMDUgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvYWNjZXB0LlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9hY2NlcHQuUwpAQCAtMSwxMiArMSw5IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCi0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAKLSAgICAudGV4dAotICAgIC50eXBlIGFjY2VwdCwgQGZ1bmN0aW9uCi0gICAgLmdsb2JsIGFjY2VwdAotICAgIC5hbGlnbiA0Ci0KLWFjY2VwdDoKK0VOVFJZKGFjY2VwdCkKICAgICBwdXNobCAgICVlYngKICAgICBwdXNobCAgICVlY3gKICAgICBtb3YgICAgICQ1LCAlZWJ4CkBAIC0xNCw3ICsxMSw3IEBACiAgICAgYWRkbCAgICAkMTIsICVlY3gKICAgICBtb3ZsICAgICRfX05SX3NvY2tldGNhbGwsICVlYXgKICAgICBpbnQgICAgICQweDgwCi0gICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGNtcGwgICAgJC1NQVhfRVJSTk8sICVlYXgKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4CkBAIC0yNSwzICsyMiw0IEBACiAgICAgcG9wbCAgICAlZWN4CiAgICAgcG9wbCAgICAlZWJ4CiAgICAgcmV0CitFTkQoYWNjZXB0KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9hY2Nlc3MuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvYWNjZXNzLlMKaW5kZXggZmZmMjZhOS4uYTIxZWM0MyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9hY2Nlc3MuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2FjY2Vzcy5TCkBAIC0xLDE5ICsxLDE2IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCi0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAKLSAgICAudGV4dAotICAgIC50eXBlIGFjY2VzcywgQGZ1bmN0aW9uCi0gICAgLmdsb2JsIGFjY2VzcwotICAgIC5hbGlnbiA0Ci0KLWFjY2VzczoKK0VOVFJZKGFjY2VzcykKICAgICBwdXNobCAgICVlYngKICAgICBwdXNobCAgICVlY3gKICAgICBtb3YgICAgIDEyKCVlc3ApLCAlZWJ4CiAgICAgbW92ICAgICAxNiglZXNwKSwgJWVjeAogICAgIG1vdmwgICAgJF9fTlJfYWNjZXNzLCAlZWF4CiAgICAgaW50ICAgICAkMHg4MAotICAgIGNtcGwgICAgJC0xMjksICVlYXgKKyAgICBjbXBsICAgICQtTUFYX0VSUk5PLCAlZWF4CiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheApAQCAtMjQsMyArMjEsNCBAQAogICAgIHBvcGwgICAgJWVjeAogICAgIHBvcGwgICAgJWVieAogICAgIHJldAorRU5EKGFjY2VzcykKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvYWNjdC5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9hY2N0LlMKaW5kZXggNzExYjZmYy4uZDVkMmExYSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9hY2N0LlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9hY2N0LlMKQEAgLTEsMTcgKzEsMTQgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KIAotICAgIC50ZXh0Ci0gICAgLnR5cGUgYWNjdCwgQGZ1bmN0aW9uCi0gICAgLmdsb2JsIGFjY3QKLSAgICAuYWxpZ24gNAotCi1hY2N0OgorRU5UUlkoYWNjdCkKICAgICBwdXNobCAgICVlYngKICAgICBtb3YgICAgIDgoJWVzcCksICVlYngKICAgICBtb3ZsICAgICRfX05SX2FjY3QsICVlYXgKICAgICBpbnQgICAgICQweDgwCi0gICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGNtcGwgICAgJC1NQVhfRVJSTk8sICVlYXgKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4CkBAIC0yMSwzICsxOCw0IEBACiAxOgogICAgIHBvcGwgICAgJWVieAogICAgIHJldAorRU5EKGFjY3QpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2JpbmQuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvYmluZC5TCmluZGV4IDIxNzJjZmIuLjc3YTRmMTIgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvYmluZC5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvYmluZC5TCkBAIC0xLDEyICsxLDkgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KIAotICAgIC50ZXh0Ci0gICAgLnR5cGUgYmluZCwgQGZ1bmN0aW9uCi0gICAgLmdsb2JsIGJpbmQKLSAgICAuYWxpZ24gNAotCi1iaW5kOgorRU5UUlkoYmluZCkKICAgICBwdXNobCAgICVlYngKICAgICBwdXNobCAgICVlY3gKICAgICBtb3YgICAgICQyLCAlZWJ4CkBAIC0xNCw3ICsxMSw3IEBACiAgICAgYWRkbCAgICAkMTIsICVlY3gKICAgICBtb3ZsICAgICRfX05SX3NvY2tldGNhbGwsICVlYXgKICAgICBpbnQgICAgICQweDgwCi0gICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGNtcGwgICAgJC1NQVhfRVJSTk8sICVlYXgKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4CkBAIC0yNSwzICsyMiw0IEBACiAgICAgcG9wbCAgICAlZWN4CiAgICAgcG9wbCAgICAlZWJ4CiAgICAgcmV0CitFTkQoYmluZCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvY2FwZ2V0LlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2NhcGdldC5TCmluZGV4IGUyODdjYjIuLmY1NjNjZTYgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvY2FwZ2V0LlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9jYXBnZXQuUwpAQCAtMSwxOSArMSwxNiBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLwotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogCi0gICAgLnRleHQKLSAgICAudHlwZSBjYXBnZXQsIEBmdW5jdGlvbgotICAgIC5nbG9ibCBjYXBnZXQKLSAgICAuYWxpZ24gNAotCi1jYXBnZXQ6CitFTlRSWShjYXBnZXQpCiAgICAgcHVzaGwgICAlZWJ4CiAgICAgcHVzaGwgICAlZWN4CiAgICAgbW92ICAgICAxMiglZXNwKSwgJWVieAogICAgIG1vdiAgICAgMTYoJWVzcCksICVlY3gKICAgICBtb3ZsICAgICRfX05SX2NhcGdldCwgJWVheAogICAgIGludCAgICAgJDB4ODAKLSAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgY21wbCAgICAkLU1BWF9FUlJOTywgJWVheAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKQEAgLTI0LDMgKzIxLDQgQEAKICAgICBwb3BsICAgICVlY3gKICAgICBwb3BsICAgICVlYngKICAgICByZXQKK0VORChjYXBnZXQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2NhcHNldC5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9jYXBzZXQuUwppbmRleCBjZTcxZjZlLi43YWI0MjZiIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2NhcHNldC5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvY2Fwc2V0LlMKQEAgLTEsMTkgKzEsMTYgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KIAotICAgIC50ZXh0Ci0gICAgLnR5cGUgY2Fwc2V0LCBAZnVuY3Rpb24KLSAgICAuZ2xvYmwgY2Fwc2V0Ci0gICAgLmFsaWduIDQKLQotY2Fwc2V0OgorRU5UUlkoY2Fwc2V0KQogICAgIHB1c2hsICAgJWVieAogICAgIHB1c2hsICAgJWVjeAogICAgIG1vdiAgICAgMTIoJWVzcCksICVlYngKICAgICBtb3YgICAgIDE2KCVlc3ApLCAlZWN4CiAgICAgbW92bCAgICAkX19OUl9jYXBzZXQsICVlYXgKICAgICBpbnQgICAgICQweDgwCi0gICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGNtcGwgICAgJC1NQVhfRVJSTk8sICVlYXgKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4CkBAIC0yNCwzICsyMSw0IEBACiAgICAgcG9wbCAgICAlZWN4CiAgICAgcG9wbCAgICAlZWJ4CiAgICAgcmV0CitFTkQoY2Fwc2V0KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9jaGRpci5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9jaGRpci5TCmluZGV4IGJlODg4NDcuLmJhYjk2MTQgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvY2hkaXIuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2NoZGlyLlMKQEAgLTEsMTcgKzEsMTQgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KIAotICAgIC50ZXh0Ci0gICAgLnR5cGUgY2hkaXIsIEBmdW5jdGlvbgotICAgIC5nbG9ibCBjaGRpcgotICAgIC5hbGlnbiA0Ci0KLWNoZGlyOgorRU5UUlkoY2hkaXIpCiAgICAgcHVzaGwgICAlZWJ4CiAgICAgbW92ICAgICA4KCVlc3ApLCAlZWJ4CiAgICAgbW92bCAgICAkX19OUl9jaGRpciwgJWVheAogICAgIGludCAgICAgJDB4ODAKLSAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgY21wbCAgICAkLU1BWF9FUlJOTywgJWVheAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKQEAgLTIxLDMgKzE4LDQgQEAKIDE6CiAgICAgcG9wbCAgICAlZWJ4CiAgICAgcmV0CitFTkQoY2hkaXIpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2NobW9kLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2NobW9kLlMKaW5kZXggZDAyM2E3ZC4uYTNkMjJjNyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9jaG1vZC5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvY2htb2QuUwpAQCAtMSwxOSArMSwxNiBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLwotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogCi0gICAgLnRleHQKLSAgICAudHlwZSBjaG1vZCwgQGZ1bmN0aW9uCi0gICAgLmdsb2JsIGNobW9kCi0gICAgLmFsaWduIDQKLQotY2htb2Q6CitFTlRSWShjaG1vZCkKICAgICBwdXNobCAgICVlYngKICAgICBwdXNobCAgICVlY3gKICAgICBtb3YgICAgIDEyKCVlc3ApLCAlZWJ4CiAgICAgbW92ICAgICAxNiglZXNwKSwgJWVjeAogICAgIG1vdmwgICAgJF9fTlJfY2htb2QsICVlYXgKICAgICBpbnQgICAgICQweDgwCi0gICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGNtcGwgICAgJC1NQVhfRVJSTk8sICVlYXgKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4CkBAIC0yNCwzICsyMSw0IEBACiAgICAgcG9wbCAgICAlZWN4CiAgICAgcG9wbCAgICAlZWJ4CiAgICAgcmV0CitFTkQoY2htb2QpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2Nob3duLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2Nob3duLlMKaW5kZXggNTY0NjA4OC4uNDhjMmIyMyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9jaG93bi5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvY2hvd24uUwpAQCAtMSwxMiArMSw5IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCi0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAKLSAgICAudGV4dAotICAgIC50eXBlIGNob3duLCBAZnVuY3Rpb24KLSAgICAuZ2xvYmwgY2hvd24KLSAgICAuYWxpZ24gNAotCi1jaG93bjoKK0VOVFJZKGNob3duKQogICAgIHB1c2hsICAgJWVieAogICAgIHB1c2hsICAgJWVjeAogICAgIHB1c2hsICAgJWVkeApAQCAtMTUsNyArMTIsNyBAQAogICAgIG1vdiAgICAgMjQoJWVzcCksICVlZHgKICAgICBtb3ZsICAgICRfX05SX2Nob3duMzIsICVlYXgKICAgICBpbnQgICAgICQweDgwCi0gICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGNtcGwgICAgJC1NQVhfRVJSTk8sICVlYXgKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4CkBAIC0yNywzICsyNCw0IEBACiAgICAgcG9wbCAgICAlZWN4CiAgICAgcG9wbCAgICAlZWJ4CiAgICAgcmV0CitFTkQoY2hvd24pCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2Nocm9vdC5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9jaHJvb3QuUwppbmRleCA0NjEwODdjLi5lYTY0MGU2IDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2Nocm9vdC5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvY2hyb290LlMKQEAgLTEsMTcgKzEsMTQgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KIAotICAgIC50ZXh0Ci0gICAgLnR5cGUgY2hyb290LCBAZnVuY3Rpb24KLSAgICAuZ2xvYmwgY2hyb290Ci0gICAgLmFsaWduIDQKLQotY2hyb290OgorRU5UUlkoY2hyb290KQogICAgIHB1c2hsICAgJWVieAogICAgIG1vdiAgICAgOCglZXNwKSwgJWVieAogICAgIG1vdmwgICAgJF9fTlJfY2hyb290LCAlZWF4CiAgICAgaW50ICAgICAkMHg4MAotICAgIGNtcGwgICAgJC0xMjksICVlYXgKKyAgICBjbXBsICAgICQtTUFYX0VSUk5PLCAlZWF4CiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheApAQCAtMjEsMyArMTgsNCBAQAogMToKICAgICBwb3BsICAgICVlYngKICAgICByZXQKK0VORChjaHJvb3QpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2Nsb2NrX2dldHJlcy5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9jbG9ja19nZXRyZXMuUwppbmRleCAwNzc0MmFlLi44MDZiN2U0IDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2Nsb2NrX2dldHJlcy5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvY2xvY2tfZ2V0cmVzLlMKQEAgLTEsMTkgKzEsMTYgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KIAotICAgIC50ZXh0Ci0gICAgLnR5cGUgY2xvY2tfZ2V0cmVzLCBAZnVuY3Rpb24KLSAgICAuZ2xvYmwgY2xvY2tfZ2V0cmVzCi0gICAgLmFsaWduIDQKLQotY2xvY2tfZ2V0cmVzOgorRU5UUlkoY2xvY2tfZ2V0cmVzKQogICAgIHB1c2hsICAgJWVieAogICAgIHB1c2hsICAgJWVjeAogICAgIG1vdiAgICAgMTIoJWVzcCksICVlYngKICAgICBtb3YgICAgIDE2KCVlc3ApLCAlZWN4CiAgICAgbW92bCAgICAkX19OUl9jbG9ja19nZXRyZXMsICVlYXgKICAgICBpbnQgICAgICQweDgwCi0gICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGNtcGwgICAgJC1NQVhfRVJSTk8sICVlYXgKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4CkBAIC0yNCwzICsyMSw0IEBACiAgICAgcG9wbCAgICAlZWN4CiAgICAgcG9wbCAgICAlZWJ4CiAgICAgcmV0CitFTkQoY2xvY2tfZ2V0cmVzKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9jbG9ja19nZXR0aW1lLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2Nsb2NrX2dldHRpbWUuUwppbmRleCBiZmUxNGE0Li4yZjg3ZDEyIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2Nsb2NrX2dldHRpbWUuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2Nsb2NrX2dldHRpbWUuUwpAQCAtMSwxOSArMSwxNiBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLwotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogCi0gICAgLnRleHQKLSAgICAudHlwZSBjbG9ja19nZXR0aW1lLCBAZnVuY3Rpb24KLSAgICAuZ2xvYmwgY2xvY2tfZ2V0dGltZQotICAgIC5hbGlnbiA0Ci0KLWNsb2NrX2dldHRpbWU6CitFTlRSWShjbG9ja19nZXR0aW1lKQogICAgIHB1c2hsICAgJWVieAogICAgIHB1c2hsICAgJWVjeAogICAgIG1vdiAgICAgMTIoJWVzcCksICVlYngKICAgICBtb3YgICAgIDE2KCVlc3ApLCAlZWN4CiAgICAgbW92bCAgICAkX19OUl9jbG9ja19nZXR0aW1lLCAlZWF4CiAgICAgaW50ICAgICAkMHg4MAotICAgIGNtcGwgICAgJC0xMjksICVlYXgKKyAgICBjbXBsICAgICQtTUFYX0VSUk5PLCAlZWF4CiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheApAQCAtMjQsMyArMjEsNCBAQAogICAgIHBvcGwgICAgJWVjeAogICAgIHBvcGwgICAgJWVieAogICAgIHJldAorRU5EKGNsb2NrX2dldHRpbWUpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2Nsb2NrX25hbm9zbGVlcC5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9jbG9ja19uYW5vc2xlZXAuUwppbmRleCAyM2UxZTZmLi5kNjkxMzAxIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2Nsb2NrX25hbm9zbGVlcC5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvY2xvY2tfbmFub3NsZWVwLlMKQEAgLTEsMTIgKzEsOSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLwotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogCi0gICAgLnRleHQKLSAgICAudHlwZSBjbG9ja19uYW5vc2xlZXAsIEBmdW5jdGlvbgotICAgIC5nbG9ibCBjbG9ja19uYW5vc2xlZXAKLSAgICAuYWxpZ24gNAotCi1jbG9ja19uYW5vc2xlZXA6CitFTlRSWShjbG9ja19uYW5vc2xlZXApCiAgICAgcHVzaGwgICAlZWJ4CiAgICAgcHVzaGwgICAlZWN4CiAgICAgcHVzaGwgICAlZWR4CkBAIC0xNyw3ICsxNCw3IEBACiAgICAgbW92ICAgICAzMiglZXNwKSwgJWVzaQogICAgIG1vdmwgICAgJF9fTlJfY2xvY2tfbmFub3NsZWVwLCAlZWF4CiAgICAgaW50ICAgICAkMHg4MAotICAgIGNtcGwgICAgJC0xMjksICVlYXgKKyAgICBjbXBsICAgICQtTUFYX0VSUk5PLCAlZWF4CiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheApAQCAtMzAsMyArMjcsNCBAQAogICAgIHBvcGwgICAgJWVjeAogICAgIHBvcGwgICAgJWVieAogICAgIHJldAorRU5EKGNsb2NrX25hbm9zbGVlcCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvY2xvY2tfc2V0dGltZS5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9jbG9ja19zZXR0aW1lLlMKaW5kZXggNTg0OTViYS4uYTEzYjIwYSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9jbG9ja19zZXR0aW1lLlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9jbG9ja19zZXR0aW1lLlMKQEAgLTEsMTkgKzEsMTYgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KIAotICAgIC50ZXh0Ci0gICAgLnR5cGUgY2xvY2tfc2V0dGltZSwgQGZ1bmN0aW9uCi0gICAgLmdsb2JsIGNsb2NrX3NldHRpbWUKLSAgICAuYWxpZ24gNAotCi1jbG9ja19zZXR0aW1lOgorRU5UUlkoY2xvY2tfc2V0dGltZSkKICAgICBwdXNobCAgICVlYngKICAgICBwdXNobCAgICVlY3gKICAgICBtb3YgICAgIDEyKCVlc3ApLCAlZWJ4CiAgICAgbW92ICAgICAxNiglZXNwKSwgJWVjeAogICAgIG1vdmwgICAgJF9fTlJfY2xvY2tfc2V0dGltZSwgJWVheAogICAgIGludCAgICAgJDB4ODAKLSAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgY21wbCAgICAkLU1BWF9FUlJOTywgJWVheAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKQEAgLTI0LDMgKzIxLDQgQEAKICAgICBwb3BsICAgICVlY3gKICAgICBwb3BsICAgICVlYngKICAgICByZXQKK0VORChjbG9ja19zZXR0aW1lKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9jbG9zZS5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9jbG9zZS5TCmluZGV4IDE5NDRhODMuLjBlODA0MDMgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvY2xvc2UuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2Nsb3NlLlMKQEAgLTEsMTcgKzEsMTQgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KIAotICAgIC50ZXh0Ci0gICAgLnR5cGUgY2xvc2UsIEBmdW5jdGlvbgotICAgIC5nbG9ibCBjbG9zZQotICAgIC5hbGlnbiA0Ci0KLWNsb3NlOgorRU5UUlkoY2xvc2UpCiAgICAgcHVzaGwgICAlZWJ4CiAgICAgbW92ICAgICA4KCVlc3ApLCAlZWJ4CiAgICAgbW92bCAgICAkX19OUl9jbG9zZSwgJWVheAogICAgIGludCAgICAgJDB4ODAKLSAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgY21wbCAgICAkLU1BWF9FUlJOTywgJWVheAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKQEAgLTIxLDMgKzE4LDQgQEAKIDE6CiAgICAgcG9wbCAgICAlZWJ4CiAgICAgcmV0CitFTkQoY2xvc2UpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2Nvbm5lY3QuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvY29ubmVjdC5TCmluZGV4IDhiOGNlNGUuLmY1NWQzMWMgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvY29ubmVjdC5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvY29ubmVjdC5TCkBAIC0xLDEyICsxLDkgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KIAotICAgIC50ZXh0Ci0gICAgLnR5cGUgY29ubmVjdCwgQGZ1bmN0aW9uCi0gICAgLmdsb2JsIGNvbm5lY3QKLSAgICAuYWxpZ24gNAotCi1jb25uZWN0OgorRU5UUlkoY29ubmVjdCkKICAgICBwdXNobCAgICVlYngKICAgICBwdXNobCAgICVlY3gKICAgICBtb3YgICAgICQzLCAlZWJ4CkBAIC0xNCw3ICsxMSw3IEBACiAgICAgYWRkbCAgICAkMTIsICVlY3gKICAgICBtb3ZsICAgICRfX05SX3NvY2tldGNhbGwsICVlYXgKICAgICBpbnQgICAgICQweDgwCi0gICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGNtcGwgICAgJC1NQVhfRVJSTk8sICVlYXgKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4CkBAIC0yNSwzICsyMiw0IEBACiAgICAgcG9wbCAgICAlZWN4CiAgICAgcG9wbCAgICAlZWJ4CiAgICAgcmV0CitFTkQoY29ubmVjdCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZGVsZXRlX21vZHVsZS5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9kZWxldGVfbW9kdWxlLlMKaW5kZXggNjg2NWQ2YS4uYTMxOTMxMCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9kZWxldGVfbW9kdWxlLlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9kZWxldGVfbW9kdWxlLlMKQEAgLTEsMTkgKzEsMTYgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KIAotICAgIC50ZXh0Ci0gICAgLnR5cGUgZGVsZXRlX21vZHVsZSwgQGZ1bmN0aW9uCi0gICAgLmdsb2JsIGRlbGV0ZV9tb2R1bGUKLSAgICAuYWxpZ24gNAotCi1kZWxldGVfbW9kdWxlOgorRU5UUlkoZGVsZXRlX21vZHVsZSkKICAgICBwdXNobCAgICVlYngKICAgICBwdXNobCAgICVlY3gKICAgICBtb3YgICAgIDEyKCVlc3ApLCAlZWJ4CiAgICAgbW92ICAgICAxNiglZXNwKSwgJWVjeAogICAgIG1vdmwgICAgJF9fTlJfZGVsZXRlX21vZHVsZSwgJWVheAogICAgIGludCAgICAgJDB4ODAKLSAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgY21wbCAgICAkLU1BWF9FUlJOTywgJWVheAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKQEAgLTI0LDMgKzIxLDQgQEAKICAgICBwb3BsICAgICVlY3gKICAgICBwb3BsICAgICVlYngKICAgICByZXQKK0VORChkZWxldGVfbW9kdWxlKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9kdXAuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZHVwLlMKaW5kZXggMTU1ZGU3OS4uNzMwNDY4MSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9kdXAuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2R1cC5TCkBAIC0xLDE3ICsxLDE0IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCi0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAKLSAgICAudGV4dAotICAgIC50eXBlIGR1cCwgQGZ1bmN0aW9uCi0gICAgLmdsb2JsIGR1cAotICAgIC5hbGlnbiA0Ci0KLWR1cDoKK0VOVFJZKGR1cCkKICAgICBwdXNobCAgICVlYngKICAgICBtb3YgICAgIDgoJWVzcCksICVlYngKICAgICBtb3ZsICAgICRfX05SX2R1cCwgJWVheAogICAgIGludCAgICAgJDB4ODAKLSAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgY21wbCAgICAkLU1BWF9FUlJOTywgJWVheAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKQEAgLTIxLDMgKzE4LDQgQEAKIDE6CiAgICAgcG9wbCAgICAlZWJ4CiAgICAgcmV0CitFTkQoZHVwKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9kdXAyLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2R1cDIuUwppbmRleCA1OWY4MzI5Li5kNmNlZTgxIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2R1cDIuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2R1cDIuUwpAQCAtMSwxOSArMSwxNiBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLwotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogCi0gICAgLnRleHQKLSAgICAudHlwZSBkdXAyLCBAZnVuY3Rpb24KLSAgICAuZ2xvYmwgZHVwMgotICAgIC5hbGlnbiA0Ci0KLWR1cDI6CitFTlRSWShkdXAyKQogICAgIHB1c2hsICAgJWVieAogICAgIHB1c2hsICAgJWVjeAogICAgIG1vdiAgICAgMTIoJWVzcCksICVlYngKICAgICBtb3YgICAgIDE2KCVlc3ApLCAlZWN4CiAgICAgbW92bCAgICAkX19OUl9kdXAyLCAlZWF4CiAgICAgaW50ICAgICAkMHg4MAotICAgIGNtcGwgICAgJC0xMjksICVlYXgKKyAgICBjbXBsICAgICQtTUFYX0VSUk5PLCAlZWF4CiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheApAQCAtMjQsMyArMjEsNCBAQAogICAgIHBvcGwgICAgJWVjeAogICAgIHBvcGwgICAgJWVieAogICAgIHJldAorRU5EKGR1cDIpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2Vwb2xsX2NyZWF0ZS5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9lcG9sbF9jcmVhdGUuUwppbmRleCA4MTA2YzU4Li4wNjFmMTczIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2Vwb2xsX2NyZWF0ZS5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZXBvbGxfY3JlYXRlLlMKQEAgLTEsMTcgKzEsMTQgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KIAotICAgIC50ZXh0Ci0gICAgLnR5cGUgZXBvbGxfY3JlYXRlLCBAZnVuY3Rpb24KLSAgICAuZ2xvYmwgZXBvbGxfY3JlYXRlCi0gICAgLmFsaWduIDQKLQotZXBvbGxfY3JlYXRlOgorRU5UUlkoZXBvbGxfY3JlYXRlKQogICAgIHB1c2hsICAgJWVieAogICAgIG1vdiAgICAgOCglZXNwKSwgJWVieAogICAgIG1vdmwgICAgJF9fTlJfZXBvbGxfY3JlYXRlLCAlZWF4CiAgICAgaW50ICAgICAkMHg4MAotICAgIGNtcGwgICAgJC0xMjksICVlYXgKKyAgICBjbXBsICAgICQtTUFYX0VSUk5PLCAlZWF4CiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheApAQCAtMjEsMyArMTgsNCBAQAogMToKICAgICBwb3BsICAgICVlYngKICAgICByZXQKK0VORChlcG9sbF9jcmVhdGUpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2Vwb2xsX2N0bC5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9lcG9sbF9jdGwuUwppbmRleCBmZjJjMTEyLi41MjI4ZGEzIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2Vwb2xsX2N0bC5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZXBvbGxfY3RsLlMKQEAgLTEsMTIgKzEsOSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLwotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogCi0gICAgLnRleHQKLSAgICAudHlwZSBlcG9sbF9jdGwsIEBmdW5jdGlvbgotICAgIC5nbG9ibCBlcG9sbF9jdGwKLSAgICAuYWxpZ24gNAotCi1lcG9sbF9jdGw6CitFTlRSWShlcG9sbF9jdGwpCiAgICAgcHVzaGwgICAlZWJ4CiAgICAgcHVzaGwgICAlZWN4CiAgICAgcHVzaGwgICAlZWR4CkBAIC0xNyw3ICsxNCw3IEBACiAgICAgbW92ICAgICAzMiglZXNwKSwgJWVzaQogICAgIG1vdmwgICAgJF9fTlJfZXBvbGxfY3RsLCAlZWF4CiAgICAgaW50ICAgICAkMHg4MAotICAgIGNtcGwgICAgJC0xMjksICVlYXgKKyAgICBjbXBsICAgICQtTUFYX0VSUk5PLCAlZWF4CiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheApAQCAtMzAsMyArMjcsNCBAQAogICAgIHBvcGwgICAgJWVjeAogICAgIHBvcGwgICAgJWVieAogICAgIHJldAorRU5EKGVwb2xsX2N0bCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZXBvbGxfd2FpdC5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9lcG9sbF93YWl0LlMKaW5kZXggM2Q4MWExNC4uZTM5NWE1ZSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9lcG9sbF93YWl0LlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9lcG9sbF93YWl0LlMKQEAgLTEsMTIgKzEsOSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLwotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogCi0gICAgLnRleHQKLSAgICAudHlwZSBlcG9sbF93YWl0LCBAZnVuY3Rpb24KLSAgICAuZ2xvYmwgZXBvbGxfd2FpdAotICAgIC5hbGlnbiA0Ci0KLWVwb2xsX3dhaXQ6CitFTlRSWShlcG9sbF93YWl0KQogICAgIHB1c2hsICAgJWVieAogICAgIHB1c2hsICAgJWVjeAogICAgIHB1c2hsICAgJWVkeApAQCAtMTcsNyArMTQsNyBAQAogICAgIG1vdiAgICAgMzIoJWVzcCksICVlc2kKICAgICBtb3ZsICAgICRfX05SX2Vwb2xsX3dhaXQsICVlYXgKICAgICBpbnQgICAgICQweDgwCi0gICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGNtcGwgICAgJC1NQVhfRVJSTk8sICVlYXgKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4CkBAIC0zMCwzICsyNyw0IEBACiAgICAgcG9wbCAgICAlZWN4CiAgICAgcG9wbCAgICAlZWJ4CiAgICAgcmV0CitFTkQoZXBvbGxfd2FpdCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZXZlbnRmZC5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9ldmVudGZkLlMKaW5kZXggMTA0Yzg0Mi4uNGU5NmE3YiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9ldmVudGZkLlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9ldmVudGZkLlMKQEAgLTEsMTkgKzEsMTYgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KIAotICAgIC50ZXh0Ci0gICAgLnR5cGUgZXZlbnRmZCwgQGZ1bmN0aW9uCi0gICAgLmdsb2JsIGV2ZW50ZmQKLSAgICAuYWxpZ24gNAotCi1ldmVudGZkOgorRU5UUlkoZXZlbnRmZCkKICAgICBwdXNobCAgICVlYngKICAgICBwdXNobCAgICVlY3gKICAgICBtb3YgICAgIDEyKCVlc3ApLCAlZWJ4CiAgICAgbW92ICAgICAxNiglZXNwKSwgJWVjeAogICAgIG1vdmwgICAgJF9fTlJfZXZlbnRmZDIsICVlYXgKICAgICBpbnQgICAgICQweDgwCi0gICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGNtcGwgICAgJC1NQVhfRVJSTk8sICVlYXgKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4CkBAIC0yNCwzICsyMSw0IEBACiAgICAgcG9wbCAgICAlZWN4CiAgICAgcG9wbCAgICAlZWJ4CiAgICAgcmV0CitFTkQoZXZlbnRmZCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZXhlY3ZlLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2V4ZWN2ZS5TCmluZGV4IDBhYjFkNzUuLjMwMjhlOGYgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZXhlY3ZlLlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9leGVjdmUuUwpAQCAtMSwxMiArMSw5IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCi0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAKLSAgICAudGV4dAotICAgIC50eXBlIGV4ZWN2ZSwgQGZ1bmN0aW9uCi0gICAgLmdsb2JsIGV4ZWN2ZQotICAgIC5hbGlnbiA0Ci0KLWV4ZWN2ZToKK0VOVFJZKGV4ZWN2ZSkKICAgICBwdXNobCAgICVlYngKICAgICBwdXNobCAgICVlY3gKICAgICBwdXNobCAgICVlZHgKQEAgLTE1LDcgKzEyLDcgQEAKICAgICBtb3YgICAgIDI0KCVlc3ApLCAlZWR4CiAgICAgbW92bCAgICAkX19OUl9leGVjdmUsICVlYXgKICAgICBpbnQgICAgICQweDgwCi0gICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGNtcGwgICAgJC1NQVhfRVJSTk8sICVlYXgKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4CkBAIC0yNywzICsyNCw0IEBACiAgICAgcG9wbCAgICAlZWN4CiAgICAgcG9wbCAgICAlZWJ4CiAgICAgcmV0CitFTkQoZXhlY3ZlKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9mYWNjZXNzYXQuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZmFjY2Vzc2F0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzdjM2IyMAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZmFjY2Vzc2F0LlMKQEAgLTAsMCArMSwzMCBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgorCitFTlRSWShmYWNjZXNzYXQpCisgICAgcHVzaGwgICAlZWJ4CisgICAgcHVzaGwgICAlZWN4CisgICAgcHVzaGwgICAlZWR4CisgICAgcHVzaGwgICAlZXNpCisgICAgbW92ICAgICAyMCglZXNwKSwgJWVieAorICAgIG1vdiAgICAgMjQoJWVzcCksICVlY3gKKyAgICBtb3YgICAgIDI4KCVlc3ApLCAlZWR4CisgICAgbW92ICAgICAzMiglZXNwKSwgJWVzaQorICAgIG1vdmwgICAgJF9fTlJfZmFjY2Vzc2F0LCAlZWF4CisgICAgaW50ICAgICAkMHg4MAorICAgIGNtcGwgICAgJC1NQVhfRVJSTk8sICVlYXgKKyAgICBqYiAgICAgIDFmCisgICAgbmVnbCAgICAlZWF4CisgICAgcHVzaGwgICAlZWF4CisgICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGFkZGwgICAgJDQsICVlc3AKKyAgICBvcmwgICAgICQtMSwgJWVheAorMToKKyAgICBwb3BsICAgICVlc2kKKyAgICBwb3BsICAgICVlZHgKKyAgICBwb3BsICAgICVlY3gKKyAgICBwb3BsICAgICVlYngKKyAgICByZXQKK0VORChmYWNjZXNzYXQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2ZjaGRpci5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9mY2hkaXIuUwppbmRleCA0ZTY4MWJlLi4yZDZhNGZkIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2ZjaGRpci5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZmNoZGlyLlMKQEAgLTEsMTcgKzEsMTQgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KIAotICAgIC50ZXh0Ci0gICAgLnR5cGUgZmNoZGlyLCBAZnVuY3Rpb24KLSAgICAuZ2xvYmwgZmNoZGlyCi0gICAgLmFsaWduIDQKLQotZmNoZGlyOgorRU5UUlkoZmNoZGlyKQogICAgIHB1c2hsICAgJWVieAogICAgIG1vdiAgICAgOCglZXNwKSwgJWVieAogICAgIG1vdmwgICAgJF9fTlJfZmNoZGlyLCAlZWF4CiAgICAgaW50ICAgICAkMHg4MAotICAgIGNtcGwgICAgJC0xMjksICVlYXgKKyAgICBjbXBsICAgICQtTUFYX0VSUk5PLCAlZWF4CiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheApAQCAtMjEsMyArMTgsNCBAQAogMToKICAgICBwb3BsICAgICVlYngKICAgICByZXQKK0VORChmY2hkaXIpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2ZjaG1vZC5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9mY2htb2QuUwppbmRleCA1OGY4YTk0Li5kMWUyYjFiIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2ZjaG1vZC5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZmNobW9kLlMKQEAgLTEsMTkgKzEsMTYgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KIAotICAgIC50ZXh0Ci0gICAgLnR5cGUgZmNobW9kLCBAZnVuY3Rpb24KLSAgICAuZ2xvYmwgZmNobW9kCi0gICAgLmFsaWduIDQKLQotZmNobW9kOgorRU5UUlkoZmNobW9kKQogICAgIHB1c2hsICAgJWVieAogICAgIHB1c2hsICAgJWVjeAogICAgIG1vdiAgICAgMTIoJWVzcCksICVlYngKICAgICBtb3YgICAgIDE2KCVlc3ApLCAlZWN4CiAgICAgbW92bCAgICAkX19OUl9mY2htb2QsICVlYXgKICAgICBpbnQgICAgICQweDgwCi0gICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGNtcGwgICAgJC1NQVhfRVJSTk8sICVlYXgKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4CkBAIC0yNCwzICsyMSw0IEBACiAgICAgcG9wbCAgICAlZWN4CiAgICAgcG9wbCAgICAlZWJ4CiAgICAgcmV0CitFTkQoZmNobW9kKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9mY2htb2RhdC5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9mY2htb2RhdC5TCmluZGV4IGI1YjljNmQuLmI0NjUyMmIgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZmNobW9kYXQuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2ZjaG1vZGF0LlMKQEAgLTEsMTIgKzEsOSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLwotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogCi0gICAgLnRleHQKLSAgICAudHlwZSBmY2htb2RhdCwgQGZ1bmN0aW9uCi0gICAgLmdsb2JsIGZjaG1vZGF0Ci0gICAgLmFsaWduIDQKLQotZmNobW9kYXQ6CitFTlRSWShmY2htb2RhdCkKICAgICBwdXNobCAgICVlYngKICAgICBwdXNobCAgICVlY3gKICAgICBwdXNobCAgICVlZHgKQEAgLTE3LDcgKzE0LDcgQEAKICAgICBtb3YgICAgIDMyKCVlc3ApLCAlZXNpCiAgICAgbW92bCAgICAkX19OUl9mY2htb2RhdCwgJWVheAogICAgIGludCAgICAgJDB4ODAKLSAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgY21wbCAgICAkLU1BWF9FUlJOTywgJWVheAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKQEAgLTMwLDMgKzI3LDQgQEAKICAgICBwb3BsICAgICVlY3gKICAgICBwb3BsICAgICVlYngKICAgICByZXQKK0VORChmY2htb2RhdCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZmNob3duLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2ZjaG93bi5TCmluZGV4IGM2NDhkN2YuLmQwOWY5NjUgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZmNob3duLlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9mY2hvd24uUwpAQCAtMSwxMiArMSw5IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCi0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAKLSAgICAudGV4dAotICAgIC50eXBlIGZjaG93biwgQGZ1bmN0aW9uCi0gICAgLmdsb2JsIGZjaG93bgotICAgIC5hbGlnbiA0Ci0KLWZjaG93bjoKK0VOVFJZKGZjaG93bikKICAgICBwdXNobCAgICVlYngKICAgICBwdXNobCAgICVlY3gKICAgICBwdXNobCAgICVlZHgKQEAgLTE1LDcgKzEyLDcgQEAKICAgICBtb3YgICAgIDI0KCVlc3ApLCAlZWR4CiAgICAgbW92bCAgICAkX19OUl9mY2hvd24zMiwgJWVheAogICAgIGludCAgICAgJDB4ODAKLSAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgY21wbCAgICAkLU1BWF9FUlJOTywgJWVheAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKQEAgLTI3LDMgKzI0LDQgQEAKICAgICBwb3BsICAgICVlY3gKICAgICBwb3BsICAgICVlYngKICAgICByZXQKK0VORChmY2hvd24pCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2ZjaG93bmF0LlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2ZjaG93bmF0LlMKaW5kZXggM2JlYzg0My4uYWQ5NThkYiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9mY2hvd25hdC5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZmNob3duYXQuUwpAQCAtMSwxMiArMSw5IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCi0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAKLSAgICAudGV4dAotICAgIC50eXBlIGZjaG93bmF0LCBAZnVuY3Rpb24KLSAgICAuZ2xvYmwgZmNob3duYXQKLSAgICAuYWxpZ24gNAotCi1mY2hvd25hdDoKK0VOVFJZKGZjaG93bmF0KQogICAgIHB1c2hsICAgJWVieAogICAgIHB1c2hsICAgJWVjeAogICAgIHB1c2hsICAgJWVkeApAQCAtMTksNyArMTYsNyBAQAogICAgIG1vdiAgICAgNDAoJWVzcCksICVlZGkKICAgICBtb3ZsICAgICRfX05SX2ZjaG93bmF0LCAlZWF4CiAgICAgaW50ICAgICAkMHg4MAotICAgIGNtcGwgICAgJC0xMjksICVlYXgKKyAgICBjbXBsICAgICQtTUFYX0VSUk5PLCAlZWF4CiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheApAQCAtMzMsMyArMzAsNCBAQAogICAgIHBvcGwgICAgJWVjeAogICAgIHBvcGwgICAgJWVieAogICAgIHJldAorRU5EKGZjaG93bmF0KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9mZGF0YXN5bmMuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZmRhdGFzeW5jLlMKaW5kZXggYjg2YzBmOC4uN2I5MTJhYSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9mZGF0YXN5bmMuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2ZkYXRhc3luYy5TCkBAIC0xLDE3ICsxLDE0IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCi0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAKLSAgICAudGV4dAotICAgIC50eXBlIGZkYXRhc3luYywgQGZ1bmN0aW9uCi0gICAgLmdsb2JsIGZkYXRhc3luYwotICAgIC5hbGlnbiA0Ci0KLWZkYXRhc3luYzoKK0VOVFJZKGZkYXRhc3luYykKICAgICBwdXNobCAgICVlYngKICAgICBtb3YgICAgIDgoJWVzcCksICVlYngKICAgICBtb3ZsICAgICRfX05SX2ZkYXRhc3luYywgJWVheAogICAgIGludCAgICAgJDB4ODAKLSAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgY21wbCAgICAkLU1BWF9FUlJOTywgJWVheAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKQEAgLTIxLDMgKzE4LDQgQEAKIDE6CiAgICAgcG9wbCAgICAlZWJ4CiAgICAgcmV0CitFTkQoZmRhdGFzeW5jKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9mZ2V0eGF0dHIuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZmdldHhhdHRyLlMKaW5kZXggZDlmNTgyZi4uZTgxYzI1NyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9mZ2V0eGF0dHIuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2ZnZXR4YXR0ci5TCkBAIC0xLDEyICsxLDkgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KIAotICAgIC50ZXh0Ci0gICAgLnR5cGUgZmdldHhhdHRyLCBAZnVuY3Rpb24KLSAgICAuZ2xvYmwgZmdldHhhdHRyCi0gICAgLmFsaWduIDQKLQotZmdldHhhdHRyOgorRU5UUlkoZmdldHhhdHRyKQogICAgIHB1c2hsICAgJWVieAogICAgIHB1c2hsICAgJWVjeAogICAgIHB1c2hsICAgJWVkeApAQCAtMTcsNyArMTQsNyBAQAogICAgIG1vdiAgICAgMzIoJWVzcCksICVlc2kKICAgICBtb3ZsICAgICRfX05SX2ZnZXR4YXR0ciwgJWVheAogICAgIGludCAgICAgJDB4ODAKLSAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgY21wbCAgICAkLU1BWF9FUlJOTywgJWVheAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKQEAgLTMwLDMgKzI3LDQgQEAKICAgICBwb3BsICAgICVlY3gKICAgICBwb3BsICAgICVlYngKICAgICByZXQKK0VORChmZ2V0eGF0dHIpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2ZsaXN0eGF0dHIuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZmxpc3R4YXR0ci5TCmluZGV4IDQzZmY3M2QuLjJkMzk4ZDEgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZmxpc3R4YXR0ci5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZmxpc3R4YXR0ci5TCkBAIC0xLDEyICsxLDkgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KIAotICAgIC50ZXh0Ci0gICAgLnR5cGUgZmxpc3R4YXR0ciwgQGZ1bmN0aW9uCi0gICAgLmdsb2JsIGZsaXN0eGF0dHIKLSAgICAuYWxpZ24gNAotCi1mbGlzdHhhdHRyOgorRU5UUlkoZmxpc3R4YXR0cikKICAgICBwdXNobCAgICVlYngKICAgICBwdXNobCAgICVlY3gKICAgICBwdXNobCAgICVlZHgKQEAgLTE1LDcgKzEyLDcgQEAKICAgICBtb3YgICAgIDI0KCVlc3ApLCAlZWR4CiAgICAgbW92bCAgICAkX19OUl9mbGlzdHhhdHRyLCAlZWF4CiAgICAgaW50ICAgICAkMHg4MAotICAgIGNtcGwgICAgJC0xMjksICVlYXgKKyAgICBjbXBsICAgICQtTUFYX0VSUk5PLCAlZWF4CiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheApAQCAtMjcsMyArMjQsNCBAQAogICAgIHBvcGwgICAgJWVjeAogICAgIHBvcGwgICAgJWVieAogICAgIHJldAorRU5EKGZsaXN0eGF0dHIpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2Zsb2NrLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2Zsb2NrLlMKaW5kZXggMWNhMDlhNS4uY2FkMTQyMCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9mbG9jay5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZmxvY2suUwpAQCAtMSwxOSArMSwxNiBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLwotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogCi0gICAgLnRleHQKLSAgICAudHlwZSBmbG9jaywgQGZ1bmN0aW9uCi0gICAgLmdsb2JsIGZsb2NrCi0gICAgLmFsaWduIDQKLQotZmxvY2s6CitFTlRSWShmbG9jaykKICAgICBwdXNobCAgICVlYngKICAgICBwdXNobCAgICVlY3gKICAgICBtb3YgICAgIDEyKCVlc3ApLCAlZWJ4CiAgICAgbW92ICAgICAxNiglZXNwKSwgJWVjeAogICAgIG1vdmwgICAgJF9fTlJfZmxvY2ssICVlYXgKICAgICBpbnQgICAgICQweDgwCi0gICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGNtcGwgICAgJC1NQVhfRVJSTk8sICVlYXgKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4CkBAIC0yNCwzICsyMSw0IEBACiAgICAgcG9wbCAgICAlZWN4CiAgICAgcG9wbCAgICAlZWJ4CiAgICAgcmV0CitFTkQoZmxvY2spCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2ZyZW1vdmV4YXR0ci5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9mcmVtb3ZleGF0dHIuUwppbmRleCBlZWVkNTdmLi44MzdlZmI4IDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2ZyZW1vdmV4YXR0ci5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZnJlbW92ZXhhdHRyLlMKQEAgLTEsMTkgKzEsMTYgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KIAotICAgIC50ZXh0Ci0gICAgLnR5cGUgZnJlbW92ZXhhdHRyLCBAZnVuY3Rpb24KLSAgICAuZ2xvYmwgZnJlbW92ZXhhdHRyCi0gICAgLmFsaWduIDQKLQotZnJlbW92ZXhhdHRyOgorRU5UUlkoZnJlbW92ZXhhdHRyKQogICAgIHB1c2hsICAgJWVieAogICAgIHB1c2hsICAgJWVjeAogICAgIG1vdiAgICAgMTIoJWVzcCksICVlYngKICAgICBtb3YgICAgIDE2KCVlc3ApLCAlZWN4CiAgICAgbW92bCAgICAkX19OUl9mcmVtb3ZleGF0dHIsICVlYXgKICAgICBpbnQgICAgICQweDgwCi0gICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGNtcGwgICAgJC1NQVhfRVJSTk8sICVlYXgKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4CkBAIC0yNCwzICsyMSw0IEBACiAgICAgcG9wbCAgICAlZWN4CiAgICAgcG9wbCAgICAlZWJ4CiAgICAgcmV0CitFTkQoZnJlbW92ZXhhdHRyKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9mc2V0eGF0dHIuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZnNldHhhdHRyLlMKaW5kZXggYTcwY2E0Zi4uYWUwZTBmOCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9mc2V0eGF0dHIuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2ZzZXR4YXR0ci5TCkBAIC0xLDEyICsxLDkgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KIAotICAgIC50ZXh0Ci0gICAgLnR5cGUgZnNldHhhdHRyLCBAZnVuY3Rpb24KLSAgICAuZ2xvYmwgZnNldHhhdHRyCi0gICAgLmFsaWduIDQKLQotZnNldHhhdHRyOgorRU5UUlkoZnNldHhhdHRyKQogICAgIHB1c2hsICAgJWVieAogICAgIHB1c2hsICAgJWVjeAogICAgIHB1c2hsICAgJWVkeApAQCAtMTksNyArMTYsNyBAQAogICAgIG1vdiAgICAgNDAoJWVzcCksICVlZGkKICAgICBtb3ZsICAgICRfX05SX2ZzZXR4YXR0ciwgJWVheAogICAgIGludCAgICAgJDB4ODAKLSAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgY21wbCAgICAkLU1BWF9FUlJOTywgJWVheAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKQEAgLTMzLDMgKzMwLDQgQEAKICAgICBwb3BsICAgICVlY3gKICAgICBwb3BsICAgICVlYngKICAgICByZXQKK0VORChmc2V0eGF0dHIpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2ZzdGF0LlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2ZzdGF0LlMKaW5kZXggOGY1ODMxNi4uNGZkMWQ1YSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9mc3RhdC5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZnN0YXQuUwpAQCAtMSwxOSArMSwxNiBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLwotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogCi0gICAgLnRleHQKLSAgICAudHlwZSBmc3RhdCwgQGZ1bmN0aW9uCi0gICAgLmdsb2JsIGZzdGF0Ci0gICAgLmFsaWduIDQKLQotZnN0YXQ6CitFTlRSWShmc3RhdCkKICAgICBwdXNobCAgICVlYngKICAgICBwdXNobCAgICVlY3gKICAgICBtb3YgICAgIDEyKCVlc3ApLCAlZWJ4CiAgICAgbW92ICAgICAxNiglZXNwKSwgJWVjeAogICAgIG1vdmwgICAgJF9fTlJfZnN0YXQ2NCwgJWVheAogICAgIGludCAgICAgJDB4ODAKLSAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgY21wbCAgICAkLU1BWF9FUlJOTywgJWVheAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKQEAgLTI0LDMgKzIxLDQgQEAKICAgICBwb3BsICAgICVlY3gKICAgICBwb3BsICAgICVlYngKICAgICByZXQKK0VORChmc3RhdCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZnN0YXRhdC5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9mc3RhdGF0LlMKaW5kZXggNDkyNmU5OS4uZjA3YjQwNSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9mc3RhdGF0LlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9mc3RhdGF0LlMKQEAgLTEsMTIgKzEsOSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLwotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogCi0gICAgLnRleHQKLSAgICAudHlwZSBmc3RhdGF0LCBAZnVuY3Rpb24KLSAgICAuZ2xvYmwgZnN0YXRhdAotICAgIC5hbGlnbiA0Ci0KLWZzdGF0YXQ6CitFTlRSWShmc3RhdGF0KQogICAgIHB1c2hsICAgJWVieAogICAgIHB1c2hsICAgJWVjeAogICAgIHB1c2hsICAgJWVkeApAQCAtMTcsNyArMTQsNyBAQAogICAgIG1vdiAgICAgMzIoJWVzcCksICVlc2kKICAgICBtb3ZsICAgICRfX05SX2ZzdGF0YXQ2NCwgJWVheAogICAgIGludCAgICAgJDB4ODAKLSAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgY21wbCAgICAkLU1BWF9FUlJOTywgJWVheAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKQEAgLTMwLDMgKzI3LDQgQEAKICAgICBwb3BsICAgICVlY3gKICAgICBwb3BsICAgICVlYngKICAgICByZXQKK0VORChmc3RhdGF0KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9mc3luYy5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9mc3luYy5TCmluZGV4IGQ5ZmQyMjUuLmY5ZTRiYzMgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZnN5bmMuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2ZzeW5jLlMKQEAgLTEsMTcgKzEsMTQgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KIAotICAgIC50ZXh0Ci0gICAgLnR5cGUgZnN5bmMsIEBmdW5jdGlvbgotICAgIC5nbG9ibCBmc3luYwotICAgIC5hbGlnbiA0Ci0KLWZzeW5jOgorRU5UUlkoZnN5bmMpCiAgICAgcHVzaGwgICAlZWJ4CiAgICAgbW92ICAgICA4KCVlc3ApLCAlZWJ4CiAgICAgbW92bCAgICAkX19OUl9mc3luYywgJWVheAogICAgIGludCAgICAgJDB4ODAKLSAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgY21wbCAgICAkLU1BWF9FUlJOTywgJWVheAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKQEAgLTIxLDMgKzE4LDQgQEAKIDE6CiAgICAgcG9wbCAgICAlZWJ4CiAgICAgcmV0CitFTkQoZnN5bmMpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2Z0cnVuY2F0ZS5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9mdHJ1bmNhdGUuUwppbmRleCAyNWI3ZGY1Li45ZDI3YzE0IDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2Z0cnVuY2F0ZS5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZnRydW5jYXRlLlMKQEAgLTEsMTkgKzEsMTYgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KIAotICAgIC50ZXh0Ci0gICAgLnR5cGUgZnRydW5jYXRlLCBAZnVuY3Rpb24KLSAgICAuZ2xvYmwgZnRydW5jYXRlCi0gICAgLmFsaWduIDQKLQotZnRydW5jYXRlOgorRU5UUlkoZnRydW5jYXRlKQogICAgIHB1c2hsICAgJWVieAogICAgIHB1c2hsICAgJWVjeAogICAgIG1vdiAgICAgMTIoJWVzcCksICVlYngKICAgICBtb3YgICAgIDE2KCVlc3ApLCAlZWN4CiAgICAgbW92bCAgICAkX19OUl9mdHJ1bmNhdGUsICVlYXgKICAgICBpbnQgICAgICQweDgwCi0gICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGNtcGwgICAgJC1NQVhfRVJSTk8sICVlYXgKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4CkBAIC0yNCwzICsyMSw0IEBACiAgICAgcG9wbCAgICAlZWN4CiAgICAgcG9wbCAgICAlZWJ4CiAgICAgcmV0CitFTkQoZnRydW5jYXRlKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9mdHJ1bmNhdGU2NC5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9mdHJ1bmNhdGU2NC5TCmluZGV4IDY2ODM1YWIuLmExMjFhZGQgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZnRydW5jYXRlNjQuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2Z0cnVuY2F0ZTY0LlMKQEAgLTEsMTIgKzEsOSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLwotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogCi0gICAgLnRleHQKLSAgICAudHlwZSBmdHJ1bmNhdGU2NCwgQGZ1bmN0aW9uCi0gICAgLmdsb2JsIGZ0cnVuY2F0ZTY0Ci0gICAgLmFsaWduIDQKLQotZnRydW5jYXRlNjQ6CitFTlRSWShmdHJ1bmNhdGU2NCkKICAgICBwdXNobCAgICVlYngKICAgICBwdXNobCAgICVlY3gKICAgICBwdXNobCAgICVlZHgKQEAgLTE1LDcgKzEyLDcgQEAKICAgICBtb3YgICAgIDI0KCVlc3ApLCAlZWR4CiAgICAgbW92bCAgICAkX19OUl9mdHJ1bmNhdGU2NCwgJWVheAogICAgIGludCAgICAgJDB4ODAKLSAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgY21wbCAgICAkLU1BWF9FUlJOTywgJWVheAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKQEAgLTI3LDMgKzI0LDQgQEAKICAgICBwb3BsICAgICVlY3gKICAgICBwb3BsICAgICVlYngKICAgICByZXQKK0VORChmdHJ1bmNhdGU2NCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZnV0ZXguUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZnV0ZXguUwppbmRleCBhYzUxMzE2Li43ZjA2ODRmIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2Z1dGV4LlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9mdXRleC5TCkBAIC0xLDEyICsxLDkgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KIAotICAgIC50ZXh0Ci0gICAgLnR5cGUgZnV0ZXgsIEBmdW5jdGlvbgotICAgIC5nbG9ibCBmdXRleAotICAgIC5hbGlnbiA0Ci0KLWZ1dGV4OgorRU5UUlkoZnV0ZXgpCiAgICAgcHVzaGwgICAlZWJ4CiAgICAgcHVzaGwgICAlZWN4CiAgICAgcHVzaGwgICAlZWR4CkBAIC0yMSw3ICsxOCw3IEBACiAgICAgbW92ICAgICA0OCglZXNwKSwgJWVicAogICAgIG1vdmwgICAgJF9fTlJfZnV0ZXgsICVlYXgKICAgICBpbnQgICAgICQweDgwCi0gICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGNtcGwgICAgJC1NQVhfRVJSTk8sICVlYXgKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4CkBAIC0zNiwzICszMyw0IEBACiAgICAgcG9wbCAgICAlZWN4CiAgICAgcG9wbCAgICAlZWJ4CiAgICAgcmV0CitFTkQoZnV0ZXgpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2dldGRlbnRzLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2dldGRlbnRzLlMKaW5kZXggYjhjNTI3Zi4uYzE3YTVhNyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9nZXRkZW50cy5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZ2V0ZGVudHMuUwpAQCAtMSwxMiArMSw5IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCi0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAKLSAgICAudGV4dAotICAgIC50eXBlIGdldGRlbnRzLCBAZnVuY3Rpb24KLSAgICAuZ2xvYmwgZ2V0ZGVudHMKLSAgICAuYWxpZ24gNAotCi1nZXRkZW50czoKK0VOVFJZKGdldGRlbnRzKQogICAgIHB1c2hsICAgJWVieAogICAgIHB1c2hsICAgJWVjeAogICAgIHB1c2hsICAgJWVkeApAQCAtMTUsNyArMTIsNyBAQAogICAgIG1vdiAgICAgMjQoJWVzcCksICVlZHgKICAgICBtb3ZsICAgICRfX05SX2dldGRlbnRzNjQsICVlYXgKICAgICBpbnQgICAgICQweDgwCi0gICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGNtcGwgICAgJC1NQVhfRVJSTk8sICVlYXgKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4CkBAIC0yNywzICsyNCw0IEBACiAgICAgcG9wbCAgICAlZWN4CiAgICAgcG9wbCAgICAlZWJ4CiAgICAgcmV0CitFTkQoZ2V0ZGVudHMpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2dldGVnaWQuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZ2V0ZWdpZC5TCmluZGV4IGUzNGExNDcuLjBmMDU1ZTEgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZ2V0ZWdpZC5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZ2V0ZWdpZC5TCkBAIC0xLDE1ICsxLDEyIEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCi0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAKLSAgICAudGV4dAotICAgIC50eXBlIGdldGVnaWQsIEBmdW5jdGlvbgotICAgIC5nbG9ibCBnZXRlZ2lkCi0gICAgLmFsaWduIDQKLQotZ2V0ZWdpZDoKK0VOVFJZKGdldGVnaWQpCiAgICAgbW92bCAgICAkX19OUl9nZXRlZ2lkMzIsICVlYXgKICAgICBpbnQgICAgICQweDgwCi0gICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGNtcGwgICAgJC1NQVhfRVJSTk8sICVlYXgKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4CkBAIC0xOCwzICsxNSw0IEBACiAgICAgb3JsICAgICAkLTEsICVlYXgKIDE6CiAgICAgcmV0CitFTkQoZ2V0ZWdpZCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZ2V0ZXVpZC5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9nZXRldWlkLlMKaW5kZXggOGVjNzI5Ny4uYTMwODEzNyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9nZXRldWlkLlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9nZXRldWlkLlMKQEAgLTEsMTUgKzEsMTIgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KIAotICAgIC50ZXh0Ci0gICAgLnR5cGUgZ2V0ZXVpZCwgQGZ1bmN0aW9uCi0gICAgLmdsb2JsIGdldGV1aWQKLSAgICAuYWxpZ24gNAotCi1nZXRldWlkOgorRU5UUlkoZ2V0ZXVpZCkKICAgICBtb3ZsICAgICRfX05SX2dldGV1aWQzMiwgJWVheAogICAgIGludCAgICAgJDB4ODAKLSAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgY21wbCAgICAkLU1BWF9FUlJOTywgJWVheAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKQEAgLTE4LDMgKzE1LDQgQEAKICAgICBvcmwgICAgICQtMSwgJWVheAogMToKICAgICByZXQKK0VORChnZXRldWlkKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9nZXRnaWQuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZ2V0Z2lkLlMKaW5kZXggZDY5ZDcyMi4uMGI0Mzk5MSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9nZXRnaWQuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2dldGdpZC5TCkBAIC0xLDE1ICsxLDEyIEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCi0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAKLSAgICAudGV4dAotICAgIC50eXBlIGdldGdpZCwgQGZ1bmN0aW9uCi0gICAgLmdsb2JsIGdldGdpZAotICAgIC5hbGlnbiA0Ci0KLWdldGdpZDoKK0VOVFJZKGdldGdpZCkKICAgICBtb3ZsICAgICRfX05SX2dldGdpZDMyLCAlZWF4CiAgICAgaW50ICAgICAkMHg4MAotICAgIGNtcGwgICAgJC0xMjksICVlYXgKKyAgICBjbXBsICAgICQtTUFYX0VSUk5PLCAlZWF4CiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheApAQCAtMTgsMyArMTUsNCBAQAogICAgIG9ybCAgICAgJC0xLCAlZWF4CiAxOgogICAgIHJldAorRU5EKGdldGdpZCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZ2V0Z3JvdXBzLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2dldGdyb3Vwcy5TCmluZGV4IGY2YTk5MTIuLmM5MmE2OTIgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZ2V0Z3JvdXBzLlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9nZXRncm91cHMuUwpAQCAtMSwxOSArMSwxNiBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLwotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogCi0gICAgLnRleHQKLSAgICAudHlwZSBnZXRncm91cHMsIEBmdW5jdGlvbgotICAgIC5nbG9ibCBnZXRncm91cHMKLSAgICAuYWxpZ24gNAotCi1nZXRncm91cHM6CitFTlRSWShnZXRncm91cHMpCiAgICAgcHVzaGwgICAlZWJ4CiAgICAgcHVzaGwgICAlZWN4CiAgICAgbW92ICAgICAxMiglZXNwKSwgJWVieAogICAgIG1vdiAgICAgMTYoJWVzcCksICVlY3gKICAgICBtb3ZsICAgICRfX05SX2dldGdyb3VwczMyLCAlZWF4CiAgICAgaW50ICAgICAkMHg4MAotICAgIGNtcGwgICAgJC0xMjksICVlYXgKKyAgICBjbXBsICAgICQtTUFYX0VSUk5PLCAlZWF4CiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheApAQCAtMjQsMyArMjEsNCBAQAogICAgIHBvcGwgICAgJWVjeAogICAgIHBvcGwgICAgJWVieAogICAgIHJldAorRU5EKGdldGdyb3VwcykKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZ2V0aXRpbWVyLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2dldGl0aW1lci5TCmluZGV4IGYxNzBlYmYuLjA0ZjAxYzAgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZ2V0aXRpbWVyLlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9nZXRpdGltZXIuUwpAQCAtMSwxOSArMSwxNiBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLwotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogCi0gICAgLnRleHQKLSAgICAudHlwZSBnZXRpdGltZXIsIEBmdW5jdGlvbgotICAgIC5nbG9ibCBnZXRpdGltZXIKLSAgICAuYWxpZ24gNAotCi1nZXRpdGltZXI6CitFTlRSWShnZXRpdGltZXIpCiAgICAgcHVzaGwgICAlZWJ4CiAgICAgcHVzaGwgICAlZWN4CiAgICAgbW92ICAgICAxMiglZXNwKSwgJWVieAogICAgIG1vdiAgICAgMTYoJWVzcCksICVlY3gKICAgICBtb3ZsICAgICRfX05SX2dldGl0aW1lciwgJWVheAogICAgIGludCAgICAgJDB4ODAKLSAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgY21wbCAgICAkLU1BWF9FUlJOTywgJWVheAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKQEAgLTI0LDMgKzIxLDQgQEAKICAgICBwb3BsICAgICVlY3gKICAgICBwb3BsICAgICVlYngKICAgICByZXQKK0VORChnZXRpdGltZXIpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2dldHBlZXJuYW1lLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2dldHBlZXJuYW1lLlMKaW5kZXggYjZmOGViOC4uMWEzODVhZCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9nZXRwZWVybmFtZS5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZ2V0cGVlcm5hbWUuUwpAQCAtMSwxMiArMSw5IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCi0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAKLSAgICAudGV4dAotICAgIC50eXBlIGdldHBlZXJuYW1lLCBAZnVuY3Rpb24KLSAgICAuZ2xvYmwgZ2V0cGVlcm5hbWUKLSAgICAuYWxpZ24gNAotCi1nZXRwZWVybmFtZToKK0VOVFJZKGdldHBlZXJuYW1lKQogICAgIHB1c2hsICAgJWVieAogICAgIHB1c2hsICAgJWVjeAogICAgIG1vdiAgICAgJDcsICVlYngKQEAgLTE0LDcgKzExLDcgQEAKICAgICBhZGRsICAgICQxMiwgJWVjeAogICAgIG1vdmwgICAgJF9fTlJfc29ja2V0Y2FsbCwgJWVheAogICAgIGludCAgICAgJDB4ODAKLSAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgY21wbCAgICAkLU1BWF9FUlJOTywgJWVheAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKQEAgLTI1LDMgKzIyLDQgQEAKICAgICBwb3BsICAgICVlY3gKICAgICBwb3BsICAgICVlYngKICAgICByZXQKK0VORChnZXRwZWVybmFtZSkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZ2V0cGdpZC5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9nZXRwZ2lkLlMKaW5kZXggY2ExZTY1OS4uZDFhOGQyNiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9nZXRwZ2lkLlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9nZXRwZ2lkLlMKQEAgLTEsMTcgKzEsMTQgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KIAotICAgIC50ZXh0Ci0gICAgLnR5cGUgZ2V0cGdpZCwgQGZ1bmN0aW9uCi0gICAgLmdsb2JsIGdldHBnaWQKLSAgICAuYWxpZ24gNAotCi1nZXRwZ2lkOgorRU5UUlkoZ2V0cGdpZCkKICAgICBwdXNobCAgICVlYngKICAgICBtb3YgICAgIDgoJWVzcCksICVlYngKICAgICBtb3ZsICAgICRfX05SX2dldHBnaWQsICVlYXgKICAgICBpbnQgICAgICQweDgwCi0gICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGNtcGwgICAgJC1NQVhfRVJSTk8sICVlYXgKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4CkBAIC0yMSwzICsxOCw0IEBACiAxOgogICAgIHBvcGwgICAgJWVieAogICAgIHJldAorRU5EKGdldHBnaWQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2dldHBpZC5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9nZXRwaWQuUwppbmRleCBkZjQzYjg4Li5mOWUzNjEzIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2dldHBpZC5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZ2V0cGlkLlMKQEAgLTEsMTUgKzEsMTIgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KIAotICAgIC50ZXh0Ci0gICAgLnR5cGUgZ2V0cGlkLCBAZnVuY3Rpb24KLSAgICAuZ2xvYmwgZ2V0cGlkCi0gICAgLmFsaWduIDQKLQotZ2V0cGlkOgorRU5UUlkoZ2V0cGlkKQogICAgIG1vdmwgICAgJF9fTlJfZ2V0cGlkLCAlZWF4CiAgICAgaW50ICAgICAkMHg4MAotICAgIGNtcGwgICAgJC0xMjksICVlYXgKKyAgICBjbXBsICAgICQtTUFYX0VSUk5PLCAlZWF4CiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheApAQCAtMTgsMyArMTUsNCBAQAogICAgIG9ybCAgICAgJC0xLCAlZWF4CiAxOgogICAgIHJldAorRU5EKGdldHBpZCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZ2V0cHBpZC5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9nZXRwcGlkLlMKaW5kZXggOWE4ODJiZC4uYWZiYzgxYSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9nZXRwcGlkLlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9nZXRwcGlkLlMKQEAgLTEsMTUgKzEsMTIgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KIAotICAgIC50ZXh0Ci0gICAgLnR5cGUgZ2V0cHBpZCwgQGZ1bmN0aW9uCi0gICAgLmdsb2JsIGdldHBwaWQKLSAgICAuYWxpZ24gNAotCi1nZXRwcGlkOgorRU5UUlkoZ2V0cHBpZCkKICAgICBtb3ZsICAgICRfX05SX2dldHBwaWQsICVlYXgKICAgICBpbnQgICAgICQweDgwCi0gICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGNtcGwgICAgJC1NQVhfRVJSTk8sICVlYXgKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4CkBAIC0xOCwzICsxNSw0IEBACiAgICAgb3JsICAgICAkLTEsICVlYXgKIDE6CiAgICAgcmV0CitFTkQoZ2V0cHBpZCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZ2V0cmVzZ2lkLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2dldHJlc2dpZC5TCmluZGV4IGQ0M2FlYzQuLmMxYWRiNWMgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZ2V0cmVzZ2lkLlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9nZXRyZXNnaWQuUwpAQCAtMSwxMiArMSw5IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCi0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAKLSAgICAudGV4dAotICAgIC50eXBlIGdldHJlc2dpZCwgQGZ1bmN0aW9uCi0gICAgLmdsb2JsIGdldHJlc2dpZAotICAgIC5hbGlnbiA0Ci0KLWdldHJlc2dpZDoKK0VOVFJZKGdldHJlc2dpZCkKICAgICBwdXNobCAgICVlYngKICAgICBwdXNobCAgICVlY3gKICAgICBwdXNobCAgICVlZHgKQEAgLTE1LDcgKzEyLDcgQEAKICAgICBtb3YgICAgIDI0KCVlc3ApLCAlZWR4CiAgICAgbW92bCAgICAkX19OUl9nZXRyZXNnaWQzMiwgJWVheAogICAgIGludCAgICAgJDB4ODAKLSAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgY21wbCAgICAkLU1BWF9FUlJOTywgJWVheAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKQEAgLTI3LDMgKzI0LDQgQEAKICAgICBwb3BsICAgICVlY3gKICAgICBwb3BsICAgICVlYngKICAgICByZXQKK0VORChnZXRyZXNnaWQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2dldHJlc3VpZC5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9nZXRyZXN1aWQuUwppbmRleCBmNDg5ZDQwLi40YmJmNjM3IDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2dldHJlc3VpZC5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZ2V0cmVzdWlkLlMKQEAgLTEsMTIgKzEsOSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLwotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogCi0gICAgLnRleHQKLSAgICAudHlwZSBnZXRyZXN1aWQsIEBmdW5jdGlvbgotICAgIC5nbG9ibCBnZXRyZXN1aWQKLSAgICAuYWxpZ24gNAotCi1nZXRyZXN1aWQ6CitFTlRSWShnZXRyZXN1aWQpCiAgICAgcHVzaGwgICAlZWJ4CiAgICAgcHVzaGwgICAlZWN4CiAgICAgcHVzaGwgICAlZWR4CkBAIC0xNSw3ICsxMiw3IEBACiAgICAgbW92ICAgICAyNCglZXNwKSwgJWVkeAogICAgIG1vdmwgICAgJF9fTlJfZ2V0cmVzdWlkMzIsICVlYXgKICAgICBpbnQgICAgICQweDgwCi0gICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGNtcGwgICAgJC1NQVhfRVJSTk8sICVlYXgKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4CkBAIC0yNywzICsyNCw0IEBACiAgICAgcG9wbCAgICAlZWN4CiAgICAgcG9wbCAgICAlZWJ4CiAgICAgcmV0CitFTkQoZ2V0cmVzdWlkKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9nZXRybGltaXQuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZ2V0cmxpbWl0LlMKaW5kZXggZjRjMzM0Zi4uMDliMmZkNSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9nZXRybGltaXQuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2dldHJsaW1pdC5TCkBAIC0xLDE5ICsxLDE2IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCi0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAKLSAgICAudGV4dAotICAgIC50eXBlIGdldHJsaW1pdCwgQGZ1bmN0aW9uCi0gICAgLmdsb2JsIGdldHJsaW1pdAotICAgIC5hbGlnbiA0Ci0KLWdldHJsaW1pdDoKK0VOVFJZKGdldHJsaW1pdCkKICAgICBwdXNobCAgICVlYngKICAgICBwdXNobCAgICVlY3gKICAgICBtb3YgICAgIDEyKCVlc3ApLCAlZWJ4CiAgICAgbW92ICAgICAxNiglZXNwKSwgJWVjeAogICAgIG1vdmwgICAgJF9fTlJfdWdldHJsaW1pdCwgJWVheAogICAgIGludCAgICAgJDB4ODAKLSAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgY21wbCAgICAkLU1BWF9FUlJOTywgJWVheAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKQEAgLTI0LDMgKzIxLDQgQEAKICAgICBwb3BsICAgICVlY3gKICAgICBwb3BsICAgICVlYngKICAgICByZXQKK0VORChnZXRybGltaXQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2dldHJ1c2FnZS5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9nZXRydXNhZ2UuUwppbmRleCA3NTBhYjViLi5mMTgwMjEzIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2dldHJ1c2FnZS5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZ2V0cnVzYWdlLlMKQEAgLTEsMTkgKzEsMTYgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KIAotICAgIC50ZXh0Ci0gICAgLnR5cGUgZ2V0cnVzYWdlLCBAZnVuY3Rpb24KLSAgICAuZ2xvYmwgZ2V0cnVzYWdlCi0gICAgLmFsaWduIDQKLQotZ2V0cnVzYWdlOgorRU5UUlkoZ2V0cnVzYWdlKQogICAgIHB1c2hsICAgJWVieAogICAgIHB1c2hsICAgJWVjeAogICAgIG1vdiAgICAgMTIoJWVzcCksICVlYngKICAgICBtb3YgICAgIDE2KCVlc3ApLCAlZWN4CiAgICAgbW92bCAgICAkX19OUl9nZXRydXNhZ2UsICVlYXgKICAgICBpbnQgICAgICQweDgwCi0gICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGNtcGwgICAgJC1NQVhfRVJSTk8sICVlYXgKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4CkBAIC0yNCwzICsyMSw0IEBACiAgICAgcG9wbCAgICAlZWN4CiAgICAgcG9wbCAgICAlZWJ4CiAgICAgcmV0CitFTkQoZ2V0cnVzYWdlKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9nZXRzaWQuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZ2V0c2lkLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWIxYTMyZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZ2V0c2lkLlMKQEAgLTAsMCArMSwyMSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgorCitFTlRSWShnZXRzaWQpCisgICAgcHVzaGwgICAlZWJ4CisgICAgbW92ICAgICA4KCVlc3ApLCAlZWJ4CisgICAgbW92bCAgICAkX19OUl9nZXRzaWQsICVlYXgKKyAgICBpbnQgICAgICQweDgwCisgICAgY21wbCAgICAkLU1BWF9FUlJOTywgJWVheAorICAgIGpiICAgICAgMWYKKyAgICBuZWdsICAgICVlYXgKKyAgICBwdXNobCAgICVlYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgYWRkbCAgICAkNCwgJWVzcAorICAgIG9ybCAgICAgJC0xLCAlZWF4CisxOgorICAgIHBvcGwgICAgJWVieAorICAgIHJldAorRU5EKGdldHNpZCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZ2V0c29ja25hbWUuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZ2V0c29ja25hbWUuUwppbmRleCA4ODRhY2Q5Li45ZTdjZWMxIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2dldHNvY2tuYW1lLlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9nZXRzb2NrbmFtZS5TCkBAIC0xLDEyICsxLDkgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KIAotICAgIC50ZXh0Ci0gICAgLnR5cGUgZ2V0c29ja25hbWUsIEBmdW5jdGlvbgotICAgIC5nbG9ibCBnZXRzb2NrbmFtZQotICAgIC5hbGlnbiA0Ci0KLWdldHNvY2tuYW1lOgorRU5UUlkoZ2V0c29ja25hbWUpCiAgICAgcHVzaGwgICAlZWJ4CiAgICAgcHVzaGwgICAlZWN4CiAgICAgbW92ICAgICAkNiwgJWVieApAQCAtMTQsNyArMTEsNyBAQAogICAgIGFkZGwgICAgJDEyLCAlZWN4CiAgICAgbW92bCAgICAkX19OUl9zb2NrZXRjYWxsLCAlZWF4CiAgICAgaW50ICAgICAkMHg4MAotICAgIGNtcGwgICAgJC0xMjksICVlYXgKKyAgICBjbXBsICAgICQtTUFYX0VSUk5PLCAlZWF4CiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheApAQCAtMjUsMyArMjIsNCBAQAogICAgIHBvcGwgICAgJWVjeAogICAgIHBvcGwgICAgJWVieAogICAgIHJldAorRU5EKGdldHNvY2tuYW1lKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9nZXRzb2Nrb3B0LlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2dldHNvY2tvcHQuUwppbmRleCBhNjA2NTMyLi5jMjEwNzQ5IDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2dldHNvY2tvcHQuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2dldHNvY2tvcHQuUwpAQCAtMSwxMiArMSw5IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCi0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAKLSAgICAudGV4dAotICAgIC50eXBlIGdldHNvY2tvcHQsIEBmdW5jdGlvbgotICAgIC5nbG9ibCBnZXRzb2Nrb3B0Ci0gICAgLmFsaWduIDQKLQotZ2V0c29ja29wdDoKK0VOVFJZKGdldHNvY2tvcHQpCiAgICAgcHVzaGwgICAlZWJ4CiAgICAgcHVzaGwgICAlZWN4CiAgICAgbW92ICAgICAkMTUsICVlYngKQEAgLTE0LDcgKzExLDcgQEAKICAgICBhZGRsICAgICQxMiwgJWVjeAogICAgIG1vdmwgICAgJF9fTlJfc29ja2V0Y2FsbCwgJWVheAogICAgIGludCAgICAgJDB4ODAKLSAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgY21wbCAgICAkLU1BWF9FUlJOTywgJWVheAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKQEAgLTI1LDMgKzIyLDQgQEAKICAgICBwb3BsICAgICVlY3gKICAgICBwb3BsICAgICVlYngKICAgICByZXQKK0VORChnZXRzb2Nrb3B0KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9nZXR0aWQuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZ2V0dGlkLlMKaW5kZXggMmU4Y2I1OS4uZDE0ZjMyMCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9nZXR0aWQuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2dldHRpZC5TCkBAIC0xLDE1ICsxLDEyIEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCi0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAKLSAgICAudGV4dAotICAgIC50eXBlIGdldHRpZCwgQGZ1bmN0aW9uCi0gICAgLmdsb2JsIGdldHRpZAotICAgIC5hbGlnbiA0Ci0KLWdldHRpZDoKK0VOVFJZKGdldHRpZCkKICAgICBtb3ZsICAgICRfX05SX2dldHRpZCwgJWVheAogICAgIGludCAgICAgJDB4ODAKLSAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgY21wbCAgICAkLU1BWF9FUlJOTywgJWVheAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKQEAgLTE4LDMgKzE1LDQgQEAKICAgICBvcmwgICAgICQtMSwgJWVheAogMToKICAgICByZXQKK0VORChnZXR0aWQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2dldHRpbWVvZmRheS5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9nZXR0aW1lb2ZkYXkuUwppbmRleCBmZWZmZTkyLi4yZmExMThkIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2dldHRpbWVvZmRheS5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZ2V0dGltZW9mZGF5LlMKQEAgLTEsMTkgKzEsMTYgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KIAotICAgIC50ZXh0Ci0gICAgLnR5cGUgZ2V0dGltZW9mZGF5LCBAZnVuY3Rpb24KLSAgICAuZ2xvYmwgZ2V0dGltZW9mZGF5Ci0gICAgLmFsaWduIDQKLQotZ2V0dGltZW9mZGF5OgorRU5UUlkoZ2V0dGltZW9mZGF5KQogICAgIHB1c2hsICAgJWVieAogICAgIHB1c2hsICAgJWVjeAogICAgIG1vdiAgICAgMTIoJWVzcCksICVlYngKICAgICBtb3YgICAgIDE2KCVlc3ApLCAlZWN4CiAgICAgbW92bCAgICAkX19OUl9nZXR0aW1lb2ZkYXksICVlYXgKICAgICBpbnQgICAgICQweDgwCi0gICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGNtcGwgICAgJC1NQVhfRVJSTk8sICVlYXgKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4CkBAIC0yNCwzICsyMSw0IEBACiAgICAgcG9wbCAgICAlZWN4CiAgICAgcG9wbCAgICAlZWJ4CiAgICAgcmV0CitFTkQoZ2V0dGltZW9mZGF5KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9nZXR1aWQuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZ2V0dWlkLlMKaW5kZXggNjM1MTA1ZS4uMDhiOWNjZSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9nZXR1aWQuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2dldHVpZC5TCkBAIC0xLDE1ICsxLDEyIEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCi0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAKLSAgICAudGV4dAotICAgIC50eXBlIGdldHVpZCwgQGZ1bmN0aW9uCi0gICAgLmdsb2JsIGdldHVpZAotICAgIC5hbGlnbiA0Ci0KLWdldHVpZDoKK0VOVFJZKGdldHVpZCkKICAgICBtb3ZsICAgICRfX05SX2dldHVpZDMyLCAlZWF4CiAgICAgaW50ICAgICAkMHg4MAotICAgIGNtcGwgICAgJC0xMjksICVlYXgKKyAgICBjbXBsICAgICQtTUFYX0VSUk5PLCAlZWF4CiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheApAQCAtMTgsMyArMTUsNCBAQAogICAgIG9ybCAgICAgJC0xLCAlZWF4CiAxOgogICAgIHJldAorRU5EKGdldHVpZCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZ2V0eGF0dHIuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZ2V0eGF0dHIuUwppbmRleCA4MGQyZmM0Li42NDk5MGVmIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2dldHhhdHRyLlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9nZXR4YXR0ci5TCkBAIC0xLDEyICsxLDkgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KIAotICAgIC50ZXh0Ci0gICAgLnR5cGUgZ2V0eGF0dHIsIEBmdW5jdGlvbgotICAgIC5nbG9ibCBnZXR4YXR0cgotICAgIC5hbGlnbiA0Ci0KLWdldHhhdHRyOgorRU5UUlkoZ2V0eGF0dHIpCiAgICAgcHVzaGwgICAlZWJ4CiAgICAgcHVzaGwgICAlZWN4CiAgICAgcHVzaGwgICAlZWR4CkBAIC0xNyw3ICsxNCw3IEBACiAgICAgbW92ICAgICAzMiglZXNwKSwgJWVzaQogICAgIG1vdmwgICAgJF9fTlJfZ2V0eGF0dHIsICVlYXgKICAgICBpbnQgICAgICQweDgwCi0gICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGNtcGwgICAgJC1NQVhfRVJSTk8sICVlYXgKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4CkBAIC0zMCwzICsyNyw0IEBACiAgICAgcG9wbCAgICAlZWN4CiAgICAgcG9wbCAgICAlZWJ4CiAgICAgcmV0CitFTkQoZ2V0eGF0dHIpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2luaXRfbW9kdWxlLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2luaXRfbW9kdWxlLlMKaW5kZXggMmUyYjA4OC4uOWQxZGFhZCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9pbml0X21vZHVsZS5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvaW5pdF9tb2R1bGUuUwpAQCAtMSwxMiArMSw5IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCi0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAKLSAgICAudGV4dAotICAgIC50eXBlIGluaXRfbW9kdWxlLCBAZnVuY3Rpb24KLSAgICAuZ2xvYmwgaW5pdF9tb2R1bGUKLSAgICAuYWxpZ24gNAotCi1pbml0X21vZHVsZToKK0VOVFJZKGluaXRfbW9kdWxlKQogICAgIHB1c2hsICAgJWVieAogICAgIHB1c2hsICAgJWVjeAogICAgIHB1c2hsICAgJWVkeApAQCAtMTUsNyArMTIsNyBAQAogICAgIG1vdiAgICAgMjQoJWVzcCksICVlZHgKICAgICBtb3ZsICAgICRfX05SX2luaXRfbW9kdWxlLCAlZWF4CiAgICAgaW50ICAgICAkMHg4MAotICAgIGNtcGwgICAgJC0xMjksICVlYXgKKyAgICBjbXBsICAgICQtTUFYX0VSUk5PLCAlZWF4CiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheApAQCAtMjcsMyArMjQsNCBAQAogICAgIHBvcGwgICAgJWVjeAogICAgIHBvcGwgICAgJWVieAogICAgIHJldAorRU5EKGluaXRfbW9kdWxlKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9pbm90aWZ5X2FkZF93YXRjaC5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9pbm90aWZ5X2FkZF93YXRjaC5TCmluZGV4IDEyYTEyZTQuLmZjOWMwODcgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvaW5vdGlmeV9hZGRfd2F0Y2guUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2lub3RpZnlfYWRkX3dhdGNoLlMKQEAgLTEsMTIgKzEsOSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLwotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogCi0gICAgLnRleHQKLSAgICAudHlwZSBpbm90aWZ5X2FkZF93YXRjaCwgQGZ1bmN0aW9uCi0gICAgLmdsb2JsIGlub3RpZnlfYWRkX3dhdGNoCi0gICAgLmFsaWduIDQKLQotaW5vdGlmeV9hZGRfd2F0Y2g6CitFTlRSWShpbm90aWZ5X2FkZF93YXRjaCkKICAgICBwdXNobCAgICVlYngKICAgICBwdXNobCAgICVlY3gKICAgICBwdXNobCAgICVlZHgKQEAgLTE1LDcgKzEyLDcgQEAKICAgICBtb3YgICAgIDI0KCVlc3ApLCAlZWR4CiAgICAgbW92bCAgICAkX19OUl9pbm90aWZ5X2FkZF93YXRjaCwgJWVheAogICAgIGludCAgICAgJDB4ODAKLSAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgY21wbCAgICAkLU1BWF9FUlJOTywgJWVheAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKQEAgLTI3LDMgKzI0LDQgQEAKICAgICBwb3BsICAgICVlY3gKICAgICBwb3BsICAgICVlYngKICAgICByZXQKK0VORChpbm90aWZ5X2FkZF93YXRjaCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvaW5vdGlmeV9pbml0LlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2lub3RpZnlfaW5pdC5TCmluZGV4IDJkMTg2YzQuLmZmYzRhMmEgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvaW5vdGlmeV9pbml0LlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9pbm90aWZ5X2luaXQuUwpAQCAtMSwxNyArMSwxNCBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLwotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogCi0gICAgLnRleHQKLSAgICAudHlwZSBpbm90aWZ5X2luaXQsIEBmdW5jdGlvbgotICAgIC5nbG9ibCBpbm90aWZ5X2luaXQKLSAgICAuYWxpZ24gNAotCi1pbm90aWZ5X2luaXQ6CitFTlRSWShpbm90aWZ5X2luaXQpCiAgICAgcHVzaGwgICAlZWJ4CiAgICAgbW92ICAgICA4KCVlc3ApLCAlZWJ4CiAgICAgbW92bCAgICAkX19OUl9pbm90aWZ5X2luaXQsICVlYXgKICAgICBpbnQgICAgICQweDgwCi0gICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGNtcGwgICAgJC1NQVhfRVJSTk8sICVlYXgKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4CkBAIC0yMSwzICsxOCw0IEBACiAxOgogICAgIHBvcGwgICAgJWVieAogICAgIHJldAorRU5EKGlub3RpZnlfaW5pdCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvaW5vdGlmeV9ybV93YXRjaC5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9pbm90aWZ5X3JtX3dhdGNoLlMKaW5kZXggZjkzMTgzMy4uMDhkMjA4YyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9pbm90aWZ5X3JtX3dhdGNoLlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9pbm90aWZ5X3JtX3dhdGNoLlMKQEAgLTEsMTkgKzEsMTYgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KIAotICAgIC50ZXh0Ci0gICAgLnR5cGUgaW5vdGlmeV9ybV93YXRjaCwgQGZ1bmN0aW9uCi0gICAgLmdsb2JsIGlub3RpZnlfcm1fd2F0Y2gKLSAgICAuYWxpZ24gNAotCi1pbm90aWZ5X3JtX3dhdGNoOgorRU5UUlkoaW5vdGlmeV9ybV93YXRjaCkKICAgICBwdXNobCAgICVlYngKICAgICBwdXNobCAgICVlY3gKICAgICBtb3YgICAgIDEyKCVlc3ApLCAlZWJ4CiAgICAgbW92ICAgICAxNiglZXNwKSwgJWVjeAogICAgIG1vdmwgICAgJF9fTlJfaW5vdGlmeV9ybV93YXRjaCwgJWVheAogICAgIGludCAgICAgJDB4ODAKLSAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgY21wbCAgICAkLU1BWF9FUlJOTywgJWVheAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKQEAgLTI0LDMgKzIxLDQgQEAKICAgICBwb3BsICAgICVlY3gKICAgICBwb3BsICAgICVlYngKICAgICByZXQKK0VORChpbm90aWZ5X3JtX3dhdGNoKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9pb3ByaW9fZ2V0LlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2lvcHJpb19nZXQuUwppbmRleCAzNjIwMjcxLi42M2YxMTExIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2lvcHJpb19nZXQuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2lvcHJpb19nZXQuUwpAQCAtMSwxOSArMSwxNiBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLwotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogCi0gICAgLnRleHQKLSAgICAudHlwZSBpb3ByaW9fZ2V0LCBAZnVuY3Rpb24KLSAgICAuZ2xvYmwgaW9wcmlvX2dldAotICAgIC5hbGlnbiA0Ci0KLWlvcHJpb19nZXQ6CitFTlRSWShpb3ByaW9fZ2V0KQogICAgIHB1c2hsICAgJWVieAogICAgIHB1c2hsICAgJWVjeAogICAgIG1vdiAgICAgMTIoJWVzcCksICVlYngKICAgICBtb3YgICAgIDE2KCVlc3ApLCAlZWN4CiAgICAgbW92bCAgICAkX19OUl9pb3ByaW9fZ2V0LCAlZWF4CiAgICAgaW50ICAgICAkMHg4MAotICAgIGNtcGwgICAgJC0xMjksICVlYXgKKyAgICBjbXBsICAgICQtTUFYX0VSUk5PLCAlZWF4CiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheApAQCAtMjQsMyArMjEsNCBAQAogICAgIHBvcGwgICAgJWVjeAogICAgIHBvcGwgICAgJWVieAogICAgIHJldAorRU5EKGlvcHJpb19nZXQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2lvcHJpb19zZXQuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvaW9wcmlvX3NldC5TCmluZGV4IDE3NGQ5MjMuLjJiNGQ4N2UgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvaW9wcmlvX3NldC5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvaW9wcmlvX3NldC5TCkBAIC0xLDEyICsxLDkgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KIAotICAgIC50ZXh0Ci0gICAgLnR5cGUgaW9wcmlvX3NldCwgQGZ1bmN0aW9uCi0gICAgLmdsb2JsIGlvcHJpb19zZXQKLSAgICAuYWxpZ24gNAotCi1pb3ByaW9fc2V0OgorRU5UUlkoaW9wcmlvX3NldCkKICAgICBwdXNobCAgICVlYngKICAgICBwdXNobCAgICVlY3gKICAgICBwdXNobCAgICVlZHgKQEAgLTE1LDcgKzEyLDcgQEAKICAgICBtb3YgICAgIDI0KCVlc3ApLCAlZWR4CiAgICAgbW92bCAgICAkX19OUl9pb3ByaW9fc2V0LCAlZWF4CiAgICAgaW50ICAgICAkMHg4MAotICAgIGNtcGwgICAgJC0xMjksICVlYXgKKyAgICBjbXBsICAgICQtTUFYX0VSUk5PLCAlZWF4CiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheApAQCAtMjcsMyArMjQsNCBAQAogICAgIHBvcGwgICAgJWVjeAogICAgIHBvcGwgICAgJWVieAogICAgIHJldAorRU5EKGlvcHJpb19zZXQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2tpbGwuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMva2lsbC5TCmluZGV4IGU0OTVjNTQuLjI2MGZlNzMgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMva2lsbC5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMva2lsbC5TCkBAIC0xLDE5ICsxLDE2IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCi0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAKLSAgICAudGV4dAotICAgIC50eXBlIGtpbGwsIEBmdW5jdGlvbgotICAgIC5nbG9ibCBraWxsCi0gICAgLmFsaWduIDQKLQota2lsbDoKK0VOVFJZKGtpbGwpCiAgICAgcHVzaGwgICAlZWJ4CiAgICAgcHVzaGwgICAlZWN4CiAgICAgbW92ICAgICAxMiglZXNwKSwgJWVieAogICAgIG1vdiAgICAgMTYoJWVzcCksICVlY3gKICAgICBtb3ZsICAgICRfX05SX2tpbGwsICVlYXgKICAgICBpbnQgICAgICQweDgwCi0gICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGNtcGwgICAgJC1NQVhfRVJSTk8sICVlYXgKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4CkBAIC0yNCwzICsyMSw0IEBACiAgICAgcG9wbCAgICAlZWN4CiAgICAgcG9wbCAgICAlZWJ4CiAgICAgcmV0CitFTkQoa2lsbCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMva2xvZ2N0bC5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9rbG9nY3RsLlMKaW5kZXggZTQ2YzhhZS4uMzJkYjFhZiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9rbG9nY3RsLlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9rbG9nY3RsLlMKQEAgLTEsMTIgKzEsOSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLwotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogCi0gICAgLnRleHQKLSAgICAudHlwZSBrbG9nY3RsLCBAZnVuY3Rpb24KLSAgICAuZ2xvYmwga2xvZ2N0bAotICAgIC5hbGlnbiA0Ci0KLWtsb2djdGw6CitFTlRSWShrbG9nY3RsKQogICAgIHB1c2hsICAgJWVieAogICAgIHB1c2hsICAgJWVjeAogICAgIHB1c2hsICAgJWVkeApAQCAtMTUsNyArMTIsNyBAQAogICAgIG1vdiAgICAgMjQoJWVzcCksICVlZHgKICAgICBtb3ZsICAgICRfX05SX3N5c2xvZywgJWVheAogICAgIGludCAgICAgJDB4ODAKLSAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgY21wbCAgICAkLU1BWF9FUlJOTywgJWVheAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKQEAgLTI3LDMgKzI0LDQgQEAKICAgICBwb3BsICAgICVlY3gKICAgICBwb3BsICAgICVlYngKICAgICByZXQKK0VORChrbG9nY3RsKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9sY2hvd24uUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvbGNob3duLlMKaW5kZXggZjU4NGEzMi4uOWJkMWM5YSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9sY2hvd24uUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2xjaG93bi5TCkBAIC0xLDEyICsxLDkgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KIAotICAgIC50ZXh0Ci0gICAgLnR5cGUgbGNob3duLCBAZnVuY3Rpb24KLSAgICAuZ2xvYmwgbGNob3duCi0gICAgLmFsaWduIDQKLQotbGNob3duOgorRU5UUlkobGNob3duKQogICAgIHB1c2hsICAgJWVieAogICAgIHB1c2hsICAgJWVjeAogICAgIHB1c2hsICAgJWVkeApAQCAtMTUsNyArMTIsNyBAQAogICAgIG1vdiAgICAgMjQoJWVzcCksICVlZHgKICAgICBtb3ZsICAgICRfX05SX2xjaG93bjMyLCAlZWF4CiAgICAgaW50ICAgICAkMHg4MAotICAgIGNtcGwgICAgJC0xMjksICVlYXgKKyAgICBjbXBsICAgICQtTUFYX0VSUk5PLCAlZWF4CiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheApAQCAtMjcsMyArMjQsNCBAQAogICAgIHBvcGwgICAgJWVjeAogICAgIHBvcGwgICAgJWVieAogICAgIHJldAorRU5EKGxjaG93bikKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvbGdldHhhdHRyLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2xnZXR4YXR0ci5TCmluZGV4IDNmNWI2M2UuLmJiNWE3YmEgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvbGdldHhhdHRyLlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9sZ2V0eGF0dHIuUwpAQCAtMSwxMiArMSw5IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCi0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAKLSAgICAudGV4dAotICAgIC50eXBlIGxnZXR4YXR0ciwgQGZ1bmN0aW9uCi0gICAgLmdsb2JsIGxnZXR4YXR0cgotICAgIC5hbGlnbiA0Ci0KLWxnZXR4YXR0cjoKK0VOVFJZKGxnZXR4YXR0cikKICAgICBwdXNobCAgICVlYngKICAgICBwdXNobCAgICVlY3gKICAgICBwdXNobCAgICVlZHgKQEAgLTE3LDcgKzE0LDcgQEAKICAgICBtb3YgICAgIDMyKCVlc3ApLCAlZXNpCiAgICAgbW92bCAgICAkX19OUl9sZ2V0eGF0dHIsICVlYXgKICAgICBpbnQgICAgICQweDgwCi0gICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGNtcGwgICAgJC1NQVhfRVJSTk8sICVlYXgKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4CkBAIC0zMCwzICsyNyw0IEBACiAgICAgcG9wbCAgICAlZWN4CiAgICAgcG9wbCAgICAlZWJ4CiAgICAgcmV0CitFTkQobGdldHhhdHRyKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9saW5rLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2xpbmsuUwppbmRleCAzOTQ2ZGJmLi40NDE5MTQ5IDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2xpbmsuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2xpbmsuUwpAQCAtMSwxOSArMSwxNiBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLwotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogCi0gICAgLnRleHQKLSAgICAudHlwZSBsaW5rLCBAZnVuY3Rpb24KLSAgICAuZ2xvYmwgbGluawotICAgIC5hbGlnbiA0Ci0KLWxpbms6CitFTlRSWShsaW5rKQogICAgIHB1c2hsICAgJWVieAogICAgIHB1c2hsICAgJWVjeAogICAgIG1vdiAgICAgMTIoJWVzcCksICVlYngKICAgICBtb3YgICAgIDE2KCVlc3ApLCAlZWN4CiAgICAgbW92bCAgICAkX19OUl9saW5rLCAlZWF4CiAgICAgaW50ICAgICAkMHg4MAotICAgIGNtcGwgICAgJC0xMjksICVlYXgKKyAgICBjbXBsICAgICQtTUFYX0VSUk5PLCAlZWF4CiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheApAQCAtMjQsMyArMjEsNCBAQAogICAgIHBvcGwgICAgJWVjeAogICAgIHBvcGwgICAgJWVieAogICAgIHJldAorRU5EKGxpbmspCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2xpc3Rlbi5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9saXN0ZW4uUwppbmRleCBkZTMxMGNmLi4wYzRkNmIwIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2xpc3Rlbi5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvbGlzdGVuLlMKQEAgLTEsMTIgKzEsOSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLwotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogCi0gICAgLnRleHQKLSAgICAudHlwZSBsaXN0ZW4sIEBmdW5jdGlvbgotICAgIC5nbG9ibCBsaXN0ZW4KLSAgICAuYWxpZ24gNAotCi1saXN0ZW46CitFTlRSWShsaXN0ZW4pCiAgICAgcHVzaGwgICAlZWJ4CiAgICAgcHVzaGwgICAlZWN4CiAgICAgbW92ICAgICAkNCwgJWVieApAQCAtMTQsNyArMTEsNyBAQAogICAgIGFkZGwgICAgJDEyLCAlZWN4CiAgICAgbW92bCAgICAkX19OUl9zb2NrZXRjYWxsLCAlZWF4CiAgICAgaW50ICAgICAkMHg4MAotICAgIGNtcGwgICAgJC0xMjksICVlYXgKKyAgICBjbXBsICAgICQtTUFYX0VSUk5PLCAlZWF4CiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheApAQCAtMjUsMyArMjIsNCBAQAogICAgIHBvcGwgICAgJWVjeAogICAgIHBvcGwgICAgJWVieAogICAgIHJldAorRU5EKGxpc3RlbikKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvbGlzdHhhdHRyLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2xpc3R4YXR0ci5TCmluZGV4IDg4MTA5YmIuLjA1OWMyYWEgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvbGlzdHhhdHRyLlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9saXN0eGF0dHIuUwpAQCAtMSwxMiArMSw5IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCi0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAKLSAgICAudGV4dAotICAgIC50eXBlIGxpc3R4YXR0ciwgQGZ1bmN0aW9uCi0gICAgLmdsb2JsIGxpc3R4YXR0cgotICAgIC5hbGlnbiA0Ci0KLWxpc3R4YXR0cjoKK0VOVFJZKGxpc3R4YXR0cikKICAgICBwdXNobCAgICVlYngKICAgICBwdXNobCAgICVlY3gKICAgICBwdXNobCAgICVlZHgKQEAgLTE1LDcgKzEyLDcgQEAKICAgICBtb3YgICAgIDI0KCVlc3ApLCAlZWR4CiAgICAgbW92bCAgICAkX19OUl9saXN0eGF0dHIsICVlYXgKICAgICBpbnQgICAgICQweDgwCi0gICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGNtcGwgICAgJC1NQVhfRVJSTk8sICVlYXgKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4CkBAIC0yNywzICsyNCw0IEBACiAgICAgcG9wbCAgICAlZWN4CiAgICAgcG9wbCAgICAlZWJ4CiAgICAgcmV0CitFTkQobGlzdHhhdHRyKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9sbGlzdHhhdHRyLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2xsaXN0eGF0dHIuUwppbmRleCBmYTg1MDVjLi5hNjAyM2ViIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2xsaXN0eGF0dHIuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2xsaXN0eGF0dHIuUwpAQCAtMSwxMiArMSw5IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCi0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAKLSAgICAudGV4dAotICAgIC50eXBlIGxsaXN0eGF0dHIsIEBmdW5jdGlvbgotICAgIC5nbG9ibCBsbGlzdHhhdHRyCi0gICAgLmFsaWduIDQKLQotbGxpc3R4YXR0cjoKK0VOVFJZKGxsaXN0eGF0dHIpCiAgICAgcHVzaGwgICAlZWJ4CiAgICAgcHVzaGwgICAlZWN4CiAgICAgcHVzaGwgICAlZWR4CkBAIC0xNSw3ICsxMiw3IEBACiAgICAgbW92ICAgICAyNCglZXNwKSwgJWVkeAogICAgIG1vdmwgICAgJF9fTlJfbGxpc3R4YXR0ciwgJWVheAogICAgIGludCAgICAgJDB4ODAKLSAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgY21wbCAgICAkLU1BWF9FUlJOTywgJWVheAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKQEAgLTI3LDMgKzI0LDQgQEAKICAgICBwb3BsICAgICVlY3gKICAgICBwb3BsICAgICVlYngKICAgICByZXQKK0VORChsbGlzdHhhdHRyKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9scmVtb3ZleGF0dHIuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvbHJlbW92ZXhhdHRyLlMKaW5kZXggZjZjN2FmZS4uMmJmZDkxYiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9scmVtb3ZleGF0dHIuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2xyZW1vdmV4YXR0ci5TCkBAIC0xLDE5ICsxLDE2IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCi0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAKLSAgICAudGV4dAotICAgIC50eXBlIGxyZW1vdmV4YXR0ciwgQGZ1bmN0aW9uCi0gICAgLmdsb2JsIGxyZW1vdmV4YXR0cgotICAgIC5hbGlnbiA0Ci0KLWxyZW1vdmV4YXR0cjoKK0VOVFJZKGxyZW1vdmV4YXR0cikKICAgICBwdXNobCAgICVlYngKICAgICBwdXNobCAgICVlY3gKICAgICBtb3YgICAgIDEyKCVlc3ApLCAlZWJ4CiAgICAgbW92ICAgICAxNiglZXNwKSwgJWVjeAogICAgIG1vdmwgICAgJF9fTlJfbHJlbW92ZXhhdHRyLCAlZWF4CiAgICAgaW50ICAgICAkMHg4MAotICAgIGNtcGwgICAgJC0xMjksICVlYXgKKyAgICBjbXBsICAgICQtTUFYX0VSUk5PLCAlZWF4CiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheApAQCAtMjQsMyArMjEsNCBAQAogICAgIHBvcGwgICAgJWVjeAogICAgIHBvcGwgICAgJWVieAogICAgIHJldAorRU5EKGxyZW1vdmV4YXR0cikKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvbHNlZWsuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvbHNlZWsuUwppbmRleCAwYjJjNTdjLi5kN2IzYjE5IDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2xzZWVrLlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9sc2Vlay5TCkBAIC0xLDEyICsxLDkgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KIAotICAgIC50ZXh0Ci0gICAgLnR5cGUgbHNlZWssIEBmdW5jdGlvbgotICAgIC5nbG9ibCBsc2VlawotICAgIC5hbGlnbiA0Ci0KLWxzZWVrOgorRU5UUlkobHNlZWspCiAgICAgcHVzaGwgICAlZWJ4CiAgICAgcHVzaGwgICAlZWN4CiAgICAgcHVzaGwgICAlZWR4CkBAIC0xNSw3ICsxMiw3IEBACiAgICAgbW92ICAgICAyNCglZXNwKSwgJWVkeAogICAgIG1vdmwgICAgJF9fTlJfbHNlZWssICVlYXgKICAgICBpbnQgICAgICQweDgwCi0gICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGNtcGwgICAgJC1NQVhfRVJSTk8sICVlYXgKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4CkBAIC0yNywzICsyNCw0IEBACiAgICAgcG9wbCAgICAlZWN4CiAgICAgcG9wbCAgICAlZWJ4CiAgICAgcmV0CitFTkQobHNlZWspCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2xzZXR4YXR0ci5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9sc2V0eGF0dHIuUwppbmRleCA1NmM4Y2Y4Li4wNTc5MGU3IDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2xzZXR4YXR0ci5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvbHNldHhhdHRyLlMKQEAgLTEsMTIgKzEsOSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLwotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogCi0gICAgLnRleHQKLSAgICAudHlwZSBsc2V0eGF0dHIsIEBmdW5jdGlvbgotICAgIC5nbG9ibCBsc2V0eGF0dHIKLSAgICAuYWxpZ24gNAotCi1sc2V0eGF0dHI6CitFTlRSWShsc2V0eGF0dHIpCiAgICAgcHVzaGwgICAlZWJ4CiAgICAgcHVzaGwgICAlZWN4CiAgICAgcHVzaGwgICAlZWR4CkBAIC0xOSw3ICsxNiw3IEBACiAgICAgbW92ICAgICA0MCglZXNwKSwgJWVkaQogICAgIG1vdmwgICAgJF9fTlJfbHNldHhhdHRyLCAlZWF4CiAgICAgaW50ICAgICAkMHg4MAotICAgIGNtcGwgICAgJC0xMjksICVlYXgKKyAgICBjbXBsICAgICQtTUFYX0VSUk5PLCAlZWF4CiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheApAQCAtMzMsMyArMzAsNCBAQAogICAgIHBvcGwgICAgJWVjeAogICAgIHBvcGwgICAgJWVieAogICAgIHJldAorRU5EKGxzZXR4YXR0cikKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvbHN0YXQuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvbHN0YXQuUwppbmRleCA0NzM5ZjMyLi43YjgxODdlIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2xzdGF0LlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9sc3RhdC5TCkBAIC0xLDE5ICsxLDE2IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCi0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAKLSAgICAudGV4dAotICAgIC50eXBlIGxzdGF0LCBAZnVuY3Rpb24KLSAgICAuZ2xvYmwgbHN0YXQKLSAgICAuYWxpZ24gNAotCi1sc3RhdDoKK0VOVFJZKGxzdGF0KQogICAgIHB1c2hsICAgJWVieAogICAgIHB1c2hsICAgJWVjeAogICAgIG1vdiAgICAgMTIoJWVzcCksICVlYngKICAgICBtb3YgICAgIDE2KCVlc3ApLCAlZWN4CiAgICAgbW92bCAgICAkX19OUl9sc3RhdDY0LCAlZWF4CiAgICAgaW50ICAgICAkMHg4MAotICAgIGNtcGwgICAgJC0xMjksICVlYXgKKyAgICBjbXBsICAgICQtTUFYX0VSUk5PLCAlZWF4CiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheApAQCAtMjQsMyArMjEsNCBAQAogICAgIHBvcGwgICAgJWVjeAogICAgIHBvcGwgICAgJWVieAogICAgIHJldAorRU5EKGxzdGF0KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9tYWR2aXNlLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL21hZHZpc2UuUwppbmRleCAyNDIzY2MyLi5iZjhiNTE4IDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL21hZHZpc2UuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL21hZHZpc2UuUwpAQCAtMSwxMiArMSw5IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCi0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAKLSAgICAudGV4dAotICAgIC50eXBlIG1hZHZpc2UsIEBmdW5jdGlvbgotICAgIC5nbG9ibCBtYWR2aXNlCi0gICAgLmFsaWduIDQKLQotbWFkdmlzZToKK0VOVFJZKG1hZHZpc2UpCiAgICAgcHVzaGwgICAlZWJ4CiAgICAgcHVzaGwgICAlZWN4CiAgICAgcHVzaGwgICAlZWR4CkBAIC0xNSw3ICsxMiw3IEBACiAgICAgbW92ICAgICAyNCglZXNwKSwgJWVkeAogICAgIG1vdmwgICAgJF9fTlJfbWFkdmlzZSwgJWVheAogICAgIGludCAgICAgJDB4ODAKLSAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgY21wbCAgICAkLU1BWF9FUlJOTywgJWVheAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKQEAgLTI3LDMgKzI0LDQgQEAKICAgICBwb3BsICAgICVlY3gKICAgICBwb3BsICAgICVlYngKICAgICByZXQKK0VORChtYWR2aXNlKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9taW5jb3JlLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL21pbmNvcmUuUwppbmRleCAxZTAyYWMyLi40MmE2MTJhIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL21pbmNvcmUuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL21pbmNvcmUuUwpAQCAtMSwxMiArMSw5IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCi0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAKLSAgICAudGV4dAotICAgIC50eXBlIG1pbmNvcmUsIEBmdW5jdGlvbgotICAgIC5nbG9ibCBtaW5jb3JlCi0gICAgLmFsaWduIDQKLQotbWluY29yZToKK0VOVFJZKG1pbmNvcmUpCiAgICAgcHVzaGwgICAlZWJ4CiAgICAgcHVzaGwgICAlZWN4CiAgICAgcHVzaGwgICAlZWR4CkBAIC0xNSw3ICsxMiw3IEBACiAgICAgbW92ICAgICAyNCglZXNwKSwgJWVkeAogICAgIG1vdmwgICAgJF9fTlJfbWluY29yZSwgJWVheAogICAgIGludCAgICAgJDB4ODAKLSAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgY21wbCAgICAkLU1BWF9FUlJOTywgJWVheAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKQEAgLTI3LDMgKzI0LDQgQEAKICAgICBwb3BsICAgICVlY3gKICAgICBwb3BsICAgICVlYngKICAgICByZXQKK0VORChtaW5jb3JlKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9ta2Rpci5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9ta2Rpci5TCmluZGV4IDRmMWQxNTcuLmQ4Y2RiZDQgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvbWtkaXIuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL21rZGlyLlMKQEAgLTEsMTkgKzEsMTYgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KIAotICAgIC50ZXh0Ci0gICAgLnR5cGUgbWtkaXIsIEBmdW5jdGlvbgotICAgIC5nbG9ibCBta2RpcgotICAgIC5hbGlnbiA0Ci0KLW1rZGlyOgorRU5UUlkobWtkaXIpCiAgICAgcHVzaGwgICAlZWJ4CiAgICAgcHVzaGwgICAlZWN4CiAgICAgbW92ICAgICAxMiglZXNwKSwgJWVieAogICAgIG1vdiAgICAgMTYoJWVzcCksICVlY3gKICAgICBtb3ZsICAgICRfX05SX21rZGlyLCAlZWF4CiAgICAgaW50ICAgICAkMHg4MAotICAgIGNtcGwgICAgJC0xMjksICVlYXgKKyAgICBjbXBsICAgICQtTUFYX0VSUk5PLCAlZWF4CiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheApAQCAtMjQsMyArMjEsNCBAQAogICAgIHBvcGwgICAgJWVjeAogICAgIHBvcGwgICAgJWVieAogICAgIHJldAorRU5EKG1rZGlyKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9ta2RpcmF0LlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL21rZGlyYXQuUwppbmRleCAxMDQwNmQzLi44NDRhMmI5IDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL21rZGlyYXQuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL21rZGlyYXQuUwpAQCAtMSwxMiArMSw5IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCi0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAKLSAgICAudGV4dAotICAgIC50eXBlIG1rZGlyYXQsIEBmdW5jdGlvbgotICAgIC5nbG9ibCBta2RpcmF0Ci0gICAgLmFsaWduIDQKLQotbWtkaXJhdDoKK0VOVFJZKG1rZGlyYXQpCiAgICAgcHVzaGwgICAlZWJ4CiAgICAgcHVzaGwgICAlZWN4CiAgICAgcHVzaGwgICAlZWR4CkBAIC0xNSw3ICsxMiw3IEBACiAgICAgbW92ICAgICAyNCglZXNwKSwgJWVkeAogICAgIG1vdmwgICAgJF9fTlJfbWtkaXJhdCwgJWVheAogICAgIGludCAgICAgJDB4ODAKLSAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgY21wbCAgICAkLU1BWF9FUlJOTywgJWVheAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKQEAgLTI3LDMgKzI0LDQgQEAKICAgICBwb3BsICAgICVlY3gKICAgICBwb3BsICAgICVlYngKICAgICByZXQKK0VORChta2RpcmF0KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9ta25vZC5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9ta25vZC5TCmluZGV4IDhkZjEwMTMuLmVlYmVmMjEgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvbWtub2QuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL21rbm9kLlMKQEAgLTEsMTIgKzEsOSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLwotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogCi0gICAgLnRleHQKLSAgICAudHlwZSBta25vZCwgQGZ1bmN0aW9uCi0gICAgLmdsb2JsIG1rbm9kCi0gICAgLmFsaWduIDQKLQotbWtub2Q6CitFTlRSWShta25vZCkKICAgICBwdXNobCAgICVlYngKICAgICBwdXNobCAgICVlY3gKICAgICBwdXNobCAgICVlZHgKQEAgLTE1LDcgKzEyLDcgQEAKICAgICBtb3YgICAgIDI0KCVlc3ApLCAlZWR4CiAgICAgbW92bCAgICAkX19OUl9ta25vZCwgJWVheAogICAgIGludCAgICAgJDB4ODAKLSAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgY21wbCAgICAkLU1BWF9FUlJOTywgJWVheAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKQEAgLTI3LDMgKzI0LDQgQEAKICAgICBwb3BsICAgICVlY3gKICAgICBwb3BsICAgICVlYngKICAgICByZXQKK0VORChta25vZCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvbWxvY2suUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvbWxvY2suUwppbmRleCA4NTMyM2QyLi45YzkxNjgyIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL21sb2NrLlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9tbG9jay5TCkBAIC0xLDE5ICsxLDE2IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCi0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAKLSAgICAudGV4dAotICAgIC50eXBlIG1sb2NrLCBAZnVuY3Rpb24KLSAgICAuZ2xvYmwgbWxvY2sKLSAgICAuYWxpZ24gNAotCi1tbG9jazoKK0VOVFJZKG1sb2NrKQogICAgIHB1c2hsICAgJWVieAogICAgIHB1c2hsICAgJWVjeAogICAgIG1vdiAgICAgMTIoJWVzcCksICVlYngKICAgICBtb3YgICAgIDE2KCVlc3ApLCAlZWN4CiAgICAgbW92bCAgICAkX19OUl9tbG9jaywgJWVheAogICAgIGludCAgICAgJDB4ODAKLSAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgY21wbCAgICAkLU1BWF9FUlJOTywgJWVheAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKQEAgLTI0LDMgKzIxLDQgQEAKICAgICBwb3BsICAgICVlY3gKICAgICBwb3BsICAgICVlYngKICAgICByZXQKK0VORChtbG9jaykKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvbWxvY2thbGwuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvbWxvY2thbGwuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YmY1NzFiCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9tbG9ja2FsbC5TCkBAIC0wLDAgKzEsMjEgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KKworRU5UUlkobWxvY2thbGwpCisgICAgcHVzaGwgICAlZWJ4CisgICAgbW92ICAgICA4KCVlc3ApLCAlZWJ4CisgICAgbW92bCAgICAkX19OUl9tbG9ja2FsbCwgJWVheAorICAgIGludCAgICAgJDB4ODAKKyAgICBjbXBsICAgICQtTUFYX0VSUk5PLCAlZWF4CisgICAgamIgICAgICAxZgorICAgIG5lZ2wgICAgJWVheAorICAgIHB1c2hsICAgJWVheAorICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBhZGRsICAgICQ0LCAlZXNwCisgICAgb3JsICAgICAkLTEsICVlYXgKKzE6CisgICAgcG9wbCAgICAlZWJ4CisgICAgcmV0CitFTkQobWxvY2thbGwpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL21vdW50LlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL21vdW50LlMKaW5kZXggNDYyMzdkMy4uMjU1ZjIyMyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9tb3VudC5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvbW91bnQuUwpAQCAtMSwxMiArMSw5IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCi0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAKLSAgICAudGV4dAotICAgIC50eXBlIG1vdW50LCBAZnVuY3Rpb24KLSAgICAuZ2xvYmwgbW91bnQKLSAgICAuYWxpZ24gNAotCi1tb3VudDoKK0VOVFJZKG1vdW50KQogICAgIHB1c2hsICAgJWVieAogICAgIHB1c2hsICAgJWVjeAogICAgIHB1c2hsICAgJWVkeApAQCAtMTksNyArMTYsNyBAQAogICAgIG1vdiAgICAgNDAoJWVzcCksICVlZGkKICAgICBtb3ZsICAgICRfX05SX21vdW50LCAlZWF4CiAgICAgaW50ICAgICAkMHg4MAotICAgIGNtcGwgICAgJC0xMjksICVlYXgKKyAgICBjbXBsICAgICQtTUFYX0VSUk5PLCAlZWF4CiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheApAQCAtMzMsMyArMzAsNCBAQAogICAgIHBvcGwgICAgJWVjeAogICAgIHBvcGwgICAgJWVieAogICAgIHJldAorRU5EKG1vdW50KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9tcHJvdGVjdC5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9tcHJvdGVjdC5TCmluZGV4IGY0NGQ1NjQuLmMyYjZhMGYgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvbXByb3RlY3QuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL21wcm90ZWN0LlMKQEAgLTEsMTIgKzEsOSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLwotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogCi0gICAgLnRleHQKLSAgICAudHlwZSBtcHJvdGVjdCwgQGZ1bmN0aW9uCi0gICAgLmdsb2JsIG1wcm90ZWN0Ci0gICAgLmFsaWduIDQKLQotbXByb3RlY3Q6CitFTlRSWShtcHJvdGVjdCkKICAgICBwdXNobCAgICVlYngKICAgICBwdXNobCAgICVlY3gKICAgICBwdXNobCAgICVlZHgKQEAgLTE1LDcgKzEyLDcgQEAKICAgICBtb3YgICAgIDI0KCVlc3ApLCAlZWR4CiAgICAgbW92bCAgICAkX19OUl9tcHJvdGVjdCwgJWVheAogICAgIGludCAgICAgJDB4ODAKLSAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgY21wbCAgICAkLU1BWF9FUlJOTywgJWVheAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKQEAgLTI3LDMgKzI0LDQgQEAKICAgICBwb3BsICAgICVlY3gKICAgICBwb3BsICAgICVlYngKICAgICByZXQKK0VORChtcHJvdGVjdCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvbXJlbWFwLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL21yZW1hcC5TCmluZGV4IDg5MTI2MWMuLjZjMzY2ZGMgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvbXJlbWFwLlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9tcmVtYXAuUwpAQCAtMSwxMiArMSw5IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCi0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAKLSAgICAudGV4dAotICAgIC50eXBlIG1yZW1hcCwgQGZ1bmN0aW9uCi0gICAgLmdsb2JsIG1yZW1hcAotICAgIC5hbGlnbiA0Ci0KLW1yZW1hcDoKK0VOVFJZKG1yZW1hcCkKICAgICBwdXNobCAgICVlYngKICAgICBwdXNobCAgICVlY3gKICAgICBwdXNobCAgICVlZHgKQEAgLTE3LDcgKzE0LDcgQEAKICAgICBtb3YgICAgIDMyKCVlc3ApLCAlZXNpCiAgICAgbW92bCAgICAkX19OUl9tcmVtYXAsICVlYXgKICAgICBpbnQgICAgICQweDgwCi0gICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGNtcGwgICAgJC1NQVhfRVJSTk8sICVlYXgKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4CkBAIC0zMCwzICsyNyw0IEBACiAgICAgcG9wbCAgICAlZWN4CiAgICAgcG9wbCAgICAlZWJ4CiAgICAgcmV0CitFTkQobXJlbWFwKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9tc3luYy5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9tc3luYy5TCmluZGV4IGI4M2NlMDEuLjE1YjA1MmQgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvbXN5bmMuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL21zeW5jLlMKQEAgLTEsMTIgKzEsOSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLwotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogCi0gICAgLnRleHQKLSAgICAudHlwZSBtc3luYywgQGZ1bmN0aW9uCi0gICAgLmdsb2JsIG1zeW5jCi0gICAgLmFsaWduIDQKLQotbXN5bmM6CitFTlRSWShtc3luYykKICAgICBwdXNobCAgICVlYngKICAgICBwdXNobCAgICVlY3gKICAgICBwdXNobCAgICVlZHgKQEAgLTE1LDcgKzEyLDcgQEAKICAgICBtb3YgICAgIDI0KCVlc3ApLCAlZWR4CiAgICAgbW92bCAgICAkX19OUl9tc3luYywgJWVheAogICAgIGludCAgICAgJDB4ODAKLSAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgY21wbCAgICAkLU1BWF9FUlJOTywgJWVheAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKQEAgLTI3LDMgKzI0LDQgQEAKICAgICBwb3BsICAgICVlY3gKICAgICBwb3BsICAgICVlYngKICAgICByZXQKK0VORChtc3luYykKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvbXVubG9jay5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9tdW5sb2NrLlMKaW5kZXggNzVlZTc1ZS4uMWM3ZGI1OCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9tdW5sb2NrLlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9tdW5sb2NrLlMKQEAgLTEsMTkgKzEsMTYgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KIAotICAgIC50ZXh0Ci0gICAgLnR5cGUgbXVubG9jaywgQGZ1bmN0aW9uCi0gICAgLmdsb2JsIG11bmxvY2sKLSAgICAuYWxpZ24gNAotCi1tdW5sb2NrOgorRU5UUlkobXVubG9jaykKICAgICBwdXNobCAgICVlYngKICAgICBwdXNobCAgICVlY3gKICAgICBtb3YgICAgIDEyKCVlc3ApLCAlZWJ4CiAgICAgbW92ICAgICAxNiglZXNwKSwgJWVjeAogICAgIG1vdmwgICAgJF9fTlJfbXVubG9jaywgJWVheAogICAgIGludCAgICAgJDB4ODAKLSAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgY21wbCAgICAkLU1BWF9FUlJOTywgJWVheAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKQEAgLTI0LDMgKzIxLDQgQEAKICAgICBwb3BsICAgICVlY3gKICAgICBwb3BsICAgICVlYngKICAgICByZXQKK0VORChtdW5sb2NrKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9tdW5sb2NrYWxsLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL211bmxvY2thbGwuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZTM4YTkxCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9tdW5sb2NrYWxsLlMKQEAgLTAsMCArMSwxOCBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgorCitFTlRSWShtdW5sb2NrYWxsKQorICAgIG1vdmwgICAgJF9fTlJfbXVubG9ja2FsbCwgJWVheAorICAgIGludCAgICAgJDB4ODAKKyAgICBjbXBsICAgICQtTUFYX0VSUk5PLCAlZWF4CisgICAgamIgICAgICAxZgorICAgIG5lZ2wgICAgJWVheAorICAgIHB1c2hsICAgJWVheAorICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBhZGRsICAgICQ0LCAlZXNwCisgICAgb3JsICAgICAkLTEsICVlYXgKKzE6CisgICAgcmV0CitFTkQobXVubG9ja2FsbCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvbXVubWFwLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL211bm1hcC5TCmluZGV4IGIyNTE4NDQuLmE2MmViOTIgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvbXVubWFwLlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9tdW5tYXAuUwpAQCAtMSwxOSArMSwxNiBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLwotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogCi0gICAgLnRleHQKLSAgICAudHlwZSBtdW5tYXAsIEBmdW5jdGlvbgotICAgIC5nbG9ibCBtdW5tYXAKLSAgICAuYWxpZ24gNAotCi1tdW5tYXA6CitFTlRSWShtdW5tYXApCiAgICAgcHVzaGwgICAlZWJ4CiAgICAgcHVzaGwgICAlZWN4CiAgICAgbW92ICAgICAxMiglZXNwKSwgJWVieAogICAgIG1vdiAgICAgMTYoJWVzcCksICVlY3gKICAgICBtb3ZsICAgICRfX05SX211bm1hcCwgJWVheAogICAgIGludCAgICAgJDB4ODAKLSAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgY21wbCAgICAkLU1BWF9FUlJOTywgJWVheAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKQEAgLTI0LDMgKzIxLDQgQEAKICAgICBwb3BsICAgICVlY3gKICAgICBwb3BsICAgICVlYngKICAgICByZXQKK0VORChtdW5tYXApCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL25hbm9zbGVlcC5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9uYW5vc2xlZXAuUwppbmRleCBjMjc0ZDRmLi44Y2YwZDhmIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL25hbm9zbGVlcC5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvbmFub3NsZWVwLlMKQEAgLTEsMTkgKzEsMTYgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KIAotICAgIC50ZXh0Ci0gICAgLnR5cGUgbmFub3NsZWVwLCBAZnVuY3Rpb24KLSAgICAuZ2xvYmwgbmFub3NsZWVwCi0gICAgLmFsaWduIDQKLQotbmFub3NsZWVwOgorRU5UUlkobmFub3NsZWVwKQogICAgIHB1c2hsICAgJWVieAogICAgIHB1c2hsICAgJWVjeAogICAgIG1vdiAgICAgMTIoJWVzcCksICVlYngKICAgICBtb3YgICAgIDE2KCVlc3ApLCAlZWN4CiAgICAgbW92bCAgICAkX19OUl9uYW5vc2xlZXAsICVlYXgKICAgICBpbnQgICAgICQweDgwCi0gICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGNtcGwgICAgJC1NQVhfRVJSTk8sICVlYXgKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4CkBAIC0yNCwzICsyMSw0IEBACiAgICAgcG9wbCAgICAlZWN4CiAgICAgcG9wbCAgICAlZWJ4CiAgICAgcmV0CitFTkQobmFub3NsZWVwKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9wYXVzZS5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9wYXVzZS5TCmluZGV4IDNmZTE1NDYuLmZmOWQ3NmMgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvcGF1c2UuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3BhdXNlLlMKQEAgLTEsMTUgKzEsMTIgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KIAotICAgIC50ZXh0Ci0gICAgLnR5cGUgcGF1c2UsIEBmdW5jdGlvbgotICAgIC5nbG9ibCBwYXVzZQotICAgIC5hbGlnbiA0Ci0KLXBhdXNlOgorRU5UUlkocGF1c2UpCiAgICAgbW92bCAgICAkX19OUl9wYXVzZSwgJWVheAogICAgIGludCAgICAgJDB4ODAKLSAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgY21wbCAgICAkLU1BWF9FUlJOTywgJWVheAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKQEAgLTE4LDMgKzE1LDQgQEAKICAgICBvcmwgICAgICQtMSwgJWVheAogMToKICAgICByZXQKK0VORChwYXVzZSkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvcGVyZl9ldmVudF9vcGVuLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3BlcmZfZXZlbnRfb3Blbi5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhMzlhMmEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3BlcmZfZXZlbnRfb3Blbi5TCkBAIC0wLDAgKzEsMzMgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KKworRU5UUlkocGVyZl9ldmVudF9vcGVuKQorICAgIHB1c2hsICAgJWVieAorICAgIHB1c2hsICAgJWVjeAorICAgIHB1c2hsICAgJWVkeAorICAgIHB1c2hsICAgJWVzaQorICAgIHB1c2hsICAgJWVkaQorICAgIG1vdiAgICAgMjQoJWVzcCksICVlYngKKyAgICBtb3YgICAgIDI4KCVlc3ApLCAlZWN4CisgICAgbW92ICAgICAzMiglZXNwKSwgJWVkeAorICAgIG1vdiAgICAgMzYoJWVzcCksICVlc2kKKyAgICBtb3YgICAgIDQwKCVlc3ApLCAlZWRpCisgICAgbW92bCAgICAkX19OUl9wZXJmX2V2ZW50X29wZW4sICVlYXgKKyAgICBpbnQgICAgICQweDgwCisgICAgY21wbCAgICAkLU1BWF9FUlJOTywgJWVheAorICAgIGpiICAgICAgMWYKKyAgICBuZWdsICAgICVlYXgKKyAgICBwdXNobCAgICVlYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgYWRkbCAgICAkNCwgJWVzcAorICAgIG9ybCAgICAgJC0xLCAlZWF4CisxOgorICAgIHBvcGwgICAgJWVkaQorICAgIHBvcGwgICAgJWVzaQorICAgIHBvcGwgICAgJWVkeAorICAgIHBvcGwgICAgJWVjeAorICAgIHBvcGwgICAgJWVieAorICAgIHJldAorRU5EKHBlcmZfZXZlbnRfb3BlbikKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvcGVyc29uYWxpdHkuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvcGVyc29uYWxpdHkuUwppbmRleCBhZjRmOTEyLi4wNDVmM2RlIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3BlcnNvbmFsaXR5LlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9wZXJzb25hbGl0eS5TCkBAIC0xLDE3ICsxLDE0IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCi0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAKLSAgICAudGV4dAotICAgIC50eXBlIHBlcnNvbmFsaXR5LCBAZnVuY3Rpb24KLSAgICAuZ2xvYmwgcGVyc29uYWxpdHkKLSAgICAuYWxpZ24gNAotCi1wZXJzb25hbGl0eToKK0VOVFJZKHBlcnNvbmFsaXR5KQogICAgIHB1c2hsICAgJWVieAogICAgIG1vdiAgICAgOCglZXNwKSwgJWVieAogICAgIG1vdmwgICAgJF9fTlJfcGVyc29uYWxpdHksICVlYXgKICAgICBpbnQgICAgICQweDgwCi0gICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGNtcGwgICAgJC1NQVhfRVJSTk8sICVlYXgKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4CkBAIC0yMSwzICsxOCw0IEBACiAxOgogICAgIHBvcGwgICAgJWVieAogICAgIHJldAorRU5EKHBlcnNvbmFsaXR5KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9waXBlLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3BpcGUuUwppbmRleCBkMTMwOTA5Li5iOTA2ZTZkIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3BpcGUuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3BpcGUuUwpAQCAtMSwxNyArMSwxNCBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLwotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogCi0gICAgLnRleHQKLSAgICAudHlwZSBwaXBlLCBAZnVuY3Rpb24KLSAgICAuZ2xvYmwgcGlwZQotICAgIC5hbGlnbiA0Ci0KLXBpcGU6CitFTlRSWShwaXBlKQogICAgIHB1c2hsICAgJWVieAogICAgIG1vdiAgICAgOCglZXNwKSwgJWVieAogICAgIG1vdmwgICAgJF9fTlJfcGlwZSwgJWVheAogICAgIGludCAgICAgJDB4ODAKLSAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgY21wbCAgICAkLU1BWF9FUlJOTywgJWVheAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKQEAgLTIxLDMgKzE4LDQgQEAKIDE6CiAgICAgcG9wbCAgICAlZWJ4CiAgICAgcmV0CitFTkQocGlwZSkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvcGlwZTIuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvcGlwZTIuUwppbmRleCBjMzM1NGE3Li5iZjNjY2Y2IDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3BpcGUyLlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9waXBlMi5TCkBAIC0xLDE5ICsxLDE2IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCi0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAKLSAgICAudGV4dAotICAgIC50eXBlIHBpcGUyLCBAZnVuY3Rpb24KLSAgICAuZ2xvYmwgcGlwZTIKLSAgICAuYWxpZ24gNAotCi1waXBlMjoKK0VOVFJZKHBpcGUyKQogICAgIHB1c2hsICAgJWVieAogICAgIHB1c2hsICAgJWVjeAogICAgIG1vdiAgICAgMTIoJWVzcCksICVlYngKICAgICBtb3YgICAgIDE2KCVlc3ApLCAlZWN4CiAgICAgbW92bCAgICAkX19OUl9waXBlMiwgJWVheAogICAgIGludCAgICAgJDB4ODAKLSAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgY21wbCAgICAkLU1BWF9FUlJOTywgJWVheAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKQEAgLTI0LDMgKzIxLDQgQEAKICAgICBwb3BsICAgICVlY3gKICAgICBwb3BsICAgICVlYngKICAgICByZXQKK0VORChwaXBlMikKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvcG9sbC5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9wb2xsLlMKaW5kZXggYjczMmFmNi4uMzI2MTg1NyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9wb2xsLlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9wb2xsLlMKQEAgLTEsMTIgKzEsOSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLwotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogCi0gICAgLnRleHQKLSAgICAudHlwZSBwb2xsLCBAZnVuY3Rpb24KLSAgICAuZ2xvYmwgcG9sbAotICAgIC5hbGlnbiA0Ci0KLXBvbGw6CitFTlRSWShwb2xsKQogICAgIHB1c2hsICAgJWVieAogICAgIHB1c2hsICAgJWVjeAogICAgIHB1c2hsICAgJWVkeApAQCAtMTUsNyArMTIsNyBAQAogICAgIG1vdiAgICAgMjQoJWVzcCksICVlZHgKICAgICBtb3ZsICAgICRfX05SX3BvbGwsICVlYXgKICAgICBpbnQgICAgICQweDgwCi0gICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGNtcGwgICAgJC1NQVhfRVJSTk8sICVlYXgKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4CkBAIC0yNywzICsyNCw0IEBACiAgICAgcG9wbCAgICAlZWN4CiAgICAgcG9wbCAgICAlZWJ4CiAgICAgcmV0CitFTkQocG9sbCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvcHJjdGwuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvcHJjdGwuUwppbmRleCA0Y2U1ZDg5Li5iY2FmMmQ4IDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3ByY3RsLlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9wcmN0bC5TCkBAIC0xLDEyICsxLDkgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KIAotICAgIC50ZXh0Ci0gICAgLnR5cGUgcHJjdGwsIEBmdW5jdGlvbgotICAgIC5nbG9ibCBwcmN0bAotICAgIC5hbGlnbiA0Ci0KLXByY3RsOgorRU5UUlkocHJjdGwpCiAgICAgcHVzaGwgICAlZWJ4CiAgICAgcHVzaGwgICAlZWN4CiAgICAgcHVzaGwgICAlZWR4CkBAIC0xOSw3ICsxNiw3IEBACiAgICAgbW92ICAgICA0MCglZXNwKSwgJWVkaQogICAgIG1vdmwgICAgJF9fTlJfcHJjdGwsICVlYXgKICAgICBpbnQgICAgICQweDgwCi0gICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGNtcGwgICAgJC1NQVhfRVJSTk8sICVlYXgKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4CkBAIC0zMywzICszMCw0IEBACiAgICAgcG9wbCAgICAlZWN4CiAgICAgcG9wbCAgICAlZWJ4CiAgICAgcmV0CitFTkQocHJjdGwpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3ByZWFkNjQuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvcHJlYWQ2NC5TCmluZGV4IGViMDA0YTkuLmI5ZmNiNTQgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvcHJlYWQ2NC5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvcHJlYWQ2NC5TCkBAIC0xLDEyICsxLDkgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KIAotICAgIC50ZXh0Ci0gICAgLnR5cGUgcHJlYWQ2NCwgQGZ1bmN0aW9uCi0gICAgLmdsb2JsIHByZWFkNjQKLSAgICAuYWxpZ24gNAotCi1wcmVhZDY0OgorRU5UUlkocHJlYWQ2NCkKICAgICBwdXNobCAgICVlYngKICAgICBwdXNobCAgICVlY3gKICAgICBwdXNobCAgICVlZHgKQEAgLTE5LDcgKzE2LDcgQEAKICAgICBtb3YgICAgIDQwKCVlc3ApLCAlZWRpCiAgICAgbW92bCAgICAkX19OUl9wcmVhZDY0LCAlZWF4CiAgICAgaW50ICAgICAkMHg4MAotICAgIGNtcGwgICAgJC0xMjksICVlYXgKKyAgICBjbXBsICAgICQtTUFYX0VSUk5PLCAlZWF4CiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheApAQCAtMzMsMyArMzAsNCBAQAogICAgIHBvcGwgICAgJWVjeAogICAgIHBvcGwgICAgJWVieAogICAgIHJldAorRU5EKHByZWFkNjQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3B3cml0ZTY0LlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3B3cml0ZTY0LlMKaW5kZXggMDEzODlmOC4uZjY4OWNjNiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9wd3JpdGU2NC5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvcHdyaXRlNjQuUwpAQCAtMSwxMiArMSw5IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCi0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAKLSAgICAudGV4dAotICAgIC50eXBlIHB3cml0ZTY0LCBAZnVuY3Rpb24KLSAgICAuZ2xvYmwgcHdyaXRlNjQKLSAgICAuYWxpZ24gNAotCi1wd3JpdGU2NDoKK0VOVFJZKHB3cml0ZTY0KQogICAgIHB1c2hsICAgJWVieAogICAgIHB1c2hsICAgJWVjeAogICAgIHB1c2hsICAgJWVkeApAQCAtMTksNyArMTYsNyBAQAogICAgIG1vdiAgICAgNDAoJWVzcCksICVlZGkKICAgICBtb3ZsICAgICRfX05SX3B3cml0ZTY0LCAlZWF4CiAgICAgaW50ICAgICAkMHg4MAotICAgIGNtcGwgICAgJC0xMjksICVlYXgKKyAgICBjbXBsICAgICQtTUFYX0VSUk5PLCAlZWF4CiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheApAQCAtMzMsMyArMzAsNCBAQAogICAgIHBvcGwgICAgJWVjeAogICAgIHBvcGwgICAgJWVieAogICAgIHJldAorRU5EKHB3cml0ZTY0KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9yZWFkLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3JlYWQuUwppbmRleCA2MzU0OWRjLi5iY2NjMWJiIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3JlYWQuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3JlYWQuUwpAQCAtMSwxMiArMSw5IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCi0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAKLSAgICAudGV4dAotICAgIC50eXBlIHJlYWQsIEBmdW5jdGlvbgotICAgIC5nbG9ibCByZWFkCi0gICAgLmFsaWduIDQKLQotcmVhZDoKK0VOVFJZKHJlYWQpCiAgICAgcHVzaGwgICAlZWJ4CiAgICAgcHVzaGwgICAlZWN4CiAgICAgcHVzaGwgICAlZWR4CkBAIC0xNSw3ICsxMiw3IEBACiAgICAgbW92ICAgICAyNCglZXNwKSwgJWVkeAogICAgIG1vdmwgICAgJF9fTlJfcmVhZCwgJWVheAogICAgIGludCAgICAgJDB4ODAKLSAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgY21wbCAgICAkLU1BWF9FUlJOTywgJWVheAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKQEAgLTI3LDMgKzI0LDQgQEAKICAgICBwb3BsICAgICVlY3gKICAgICBwb3BsICAgICVlYngKICAgICByZXQKK0VORChyZWFkKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9yZWFkYWhlYWQuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvcmVhZGFoZWFkLlMKaW5kZXggYjg5MzE0Zi4uZTcyY2M3YSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9yZWFkYWhlYWQuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3JlYWRhaGVhZC5TCkBAIC0xLDEyICsxLDkgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KIAotICAgIC50ZXh0Ci0gICAgLnR5cGUgcmVhZGFoZWFkLCBAZnVuY3Rpb24KLSAgICAuZ2xvYmwgcmVhZGFoZWFkCi0gICAgLmFsaWduIDQKLQotcmVhZGFoZWFkOgorRU5UUlkocmVhZGFoZWFkKQogICAgIHB1c2hsICAgJWVieAogICAgIHB1c2hsICAgJWVjeAogICAgIHB1c2hsICAgJWVkeApAQCAtMTcsNyArMTQsNyBAQAogICAgIG1vdiAgICAgMzIoJWVzcCksICVlc2kKICAgICBtb3ZsICAgICRfX05SX3JlYWRhaGVhZCwgJWVheAogICAgIGludCAgICAgJDB4ODAKLSAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgY21wbCAgICAkLU1BWF9FUlJOTywgJWVheAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKQEAgLTMwLDMgKzI3LDQgQEAKICAgICBwb3BsICAgICVlY3gKICAgICBwb3BsICAgICVlYngKICAgICByZXQKK0VORChyZWFkYWhlYWQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3JlYWRsaW5rLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3JlYWRsaW5rLlMKaW5kZXggNTNjNzYzMi4uNzQ0NDcyOCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9yZWFkbGluay5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvcmVhZGxpbmsuUwpAQCAtMSwxMiArMSw5IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCi0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAKLSAgICAudGV4dAotICAgIC50eXBlIHJlYWRsaW5rLCBAZnVuY3Rpb24KLSAgICAuZ2xvYmwgcmVhZGxpbmsKLSAgICAuYWxpZ24gNAotCi1yZWFkbGluazoKK0VOVFJZKHJlYWRsaW5rKQogICAgIHB1c2hsICAgJWVieAogICAgIHB1c2hsICAgJWVjeAogICAgIHB1c2hsICAgJWVkeApAQCAtMTUsNyArMTIsNyBAQAogICAgIG1vdiAgICAgMjQoJWVzcCksICVlZHgKICAgICBtb3ZsICAgICRfX05SX3JlYWRsaW5rLCAlZWF4CiAgICAgaW50ICAgICAkMHg4MAotICAgIGNtcGwgICAgJC0xMjksICVlYXgKKyAgICBjbXBsICAgICQtTUFYX0VSUk5PLCAlZWF4CiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheApAQCAtMjcsMyArMjQsNCBAQAogICAgIHBvcGwgICAgJWVjeAogICAgIHBvcGwgICAgJWVieAogICAgIHJldAorRU5EKHJlYWRsaW5rKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9yZWFkdi5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9yZWFkdi5TCmluZGV4IGVkMzUyZDIuLjZmZjMwMDIgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvcmVhZHYuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3JlYWR2LlMKQEAgLTEsMTIgKzEsOSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLwotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogCi0gICAgLnRleHQKLSAgICAudHlwZSByZWFkdiwgQGZ1bmN0aW9uCi0gICAgLmdsb2JsIHJlYWR2Ci0gICAgLmFsaWduIDQKLQotcmVhZHY6CitFTlRSWShyZWFkdikKICAgICBwdXNobCAgICVlYngKICAgICBwdXNobCAgICVlY3gKICAgICBwdXNobCAgICVlZHgKQEAgLTE1LDcgKzEyLDcgQEAKICAgICBtb3YgICAgIDI0KCVlc3ApLCAlZWR4CiAgICAgbW92bCAgICAkX19OUl9yZWFkdiwgJWVheAogICAgIGludCAgICAgJDB4ODAKLSAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgY21wbCAgICAkLU1BWF9FUlJOTywgJWVheAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKQEAgLTI3LDMgKzI0LDQgQEAKICAgICBwb3BsICAgICVlY3gKICAgICBwb3BsICAgICVlYngKICAgICByZXQKK0VORChyZWFkdikKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvcmVjdmZyb20uUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvcmVjdmZyb20uUwppbmRleCAzYTM4NTE4Li5mM2Q5ZDZhIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3JlY3Zmcm9tLlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9yZWN2ZnJvbS5TCkBAIC0xLDEyICsxLDkgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KIAotICAgIC50ZXh0Ci0gICAgLnR5cGUgcmVjdmZyb20sIEBmdW5jdGlvbgotICAgIC5nbG9ibCByZWN2ZnJvbQotICAgIC5hbGlnbiA0Ci0KLXJlY3Zmcm9tOgorRU5UUlkocmVjdmZyb20pCiAgICAgcHVzaGwgICAlZWJ4CiAgICAgcHVzaGwgICAlZWN4CiAgICAgbW92ICAgICAkMTIsICVlYngKQEAgLTE0LDcgKzExLDcgQEAKICAgICBhZGRsICAgICQxMiwgJWVjeAogICAgIG1vdmwgICAgJF9fTlJfc29ja2V0Y2FsbCwgJWVheAogICAgIGludCAgICAgJDB4ODAKLSAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgY21wbCAgICAkLU1BWF9FUlJOTywgJWVheAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKQEAgLTI1LDMgKzIyLDQgQEAKICAgICBwb3BsICAgICVlY3gKICAgICBwb3BsICAgICVlYngKICAgICByZXQKK0VORChyZWN2ZnJvbSkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvcmVjdm1zZy5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9yZWN2bXNnLlMKaW5kZXggYWVlNjlkNi4uOWM0ZjllMiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9yZWN2bXNnLlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9yZWN2bXNnLlMKQEAgLTEsMTIgKzEsOSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLwotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogCi0gICAgLnRleHQKLSAgICAudHlwZSByZWN2bXNnLCBAZnVuY3Rpb24KLSAgICAuZ2xvYmwgcmVjdm1zZwotICAgIC5hbGlnbiA0Ci0KLXJlY3Ztc2c6CitFTlRSWShyZWN2bXNnKQogICAgIHB1c2hsICAgJWVieAogICAgIHB1c2hsICAgJWVjeAogICAgIG1vdiAgICAgJDE3LCAlZWJ4CkBAIC0xNCw3ICsxMSw3IEBACiAgICAgYWRkbCAgICAkMTIsICVlY3gKICAgICBtb3ZsICAgICRfX05SX3NvY2tldGNhbGwsICVlYXgKICAgICBpbnQgICAgICQweDgwCi0gICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGNtcGwgICAgJC1NQVhfRVJSTk8sICVlYXgKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4CkBAIC0yNSwzICsyMiw0IEBACiAgICAgcG9wbCAgICAlZWN4CiAgICAgcG9wbCAgICAlZWJ4CiAgICAgcmV0CitFTkQocmVjdm1zZykKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvcmVtb3ZleGF0dHIuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvcmVtb3ZleGF0dHIuUwppbmRleCAyMzUwODY1Li5hMDg2ZWI3IDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3JlbW92ZXhhdHRyLlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9yZW1vdmV4YXR0ci5TCkBAIC0xLDE5ICsxLDE2IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCi0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAKLSAgICAudGV4dAotICAgIC50eXBlIHJlbW92ZXhhdHRyLCBAZnVuY3Rpb24KLSAgICAuZ2xvYmwgcmVtb3ZleGF0dHIKLSAgICAuYWxpZ24gNAotCi1yZW1vdmV4YXR0cjoKK0VOVFJZKHJlbW92ZXhhdHRyKQogICAgIHB1c2hsICAgJWVieAogICAgIHB1c2hsICAgJWVjeAogICAgIG1vdiAgICAgMTIoJWVzcCksICVlYngKICAgICBtb3YgICAgIDE2KCVlc3ApLCAlZWN4CiAgICAgbW92bCAgICAkX19OUl9yZW1vdmV4YXR0ciwgJWVheAogICAgIGludCAgICAgJDB4ODAKLSAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgY21wbCAgICAkLU1BWF9FUlJOTywgJWVheAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKQEAgLTI0LDMgKzIxLDQgQEAKICAgICBwb3BsICAgICVlY3gKICAgICBwb3BsICAgICVlYngKICAgICByZXQKK0VORChyZW1vdmV4YXR0cikKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvcmVuYW1lLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3JlbmFtZS5TCmluZGV4IDc5YWUxMTkuLjlmNDA4MTggMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvcmVuYW1lLlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9yZW5hbWUuUwpAQCAtMSwxOSArMSwxNiBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLwotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogCi0gICAgLnRleHQKLSAgICAudHlwZSByZW5hbWUsIEBmdW5jdGlvbgotICAgIC5nbG9ibCByZW5hbWUKLSAgICAuYWxpZ24gNAotCi1yZW5hbWU6CitFTlRSWShyZW5hbWUpCiAgICAgcHVzaGwgICAlZWJ4CiAgICAgcHVzaGwgICAlZWN4CiAgICAgbW92ICAgICAxMiglZXNwKSwgJWVieAogICAgIG1vdiAgICAgMTYoJWVzcCksICVlY3gKICAgICBtb3ZsICAgICRfX05SX3JlbmFtZSwgJWVheAogICAgIGludCAgICAgJDB4ODAKLSAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgY21wbCAgICAkLU1BWF9FUlJOTywgJWVheAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKQEAgLTI0LDMgKzIxLDQgQEAKICAgICBwb3BsICAgICVlY3gKICAgICBwb3BsICAgICVlYngKICAgICByZXQKK0VORChyZW5hbWUpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3JlbmFtZWF0LlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3JlbmFtZWF0LlMKaW5kZXggMzBiYTIxMC4uZTNmZmU3YiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9yZW5hbWVhdC5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvcmVuYW1lYXQuUwpAQCAtMSwxMiArMSw5IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCi0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAKLSAgICAudGV4dAotICAgIC50eXBlIHJlbmFtZWF0LCBAZnVuY3Rpb24KLSAgICAuZ2xvYmwgcmVuYW1lYXQKLSAgICAuYWxpZ24gNAotCi1yZW5hbWVhdDoKK0VOVFJZKHJlbmFtZWF0KQogICAgIHB1c2hsICAgJWVieAogICAgIHB1c2hsICAgJWVjeAogICAgIHB1c2hsICAgJWVkeApAQCAtMTcsNyArMTQsNyBAQAogICAgIG1vdiAgICAgMzIoJWVzcCksICVlc2kKICAgICBtb3ZsICAgICRfX05SX3JlbmFtZWF0LCAlZWF4CiAgICAgaW50ICAgICAkMHg4MAotICAgIGNtcGwgICAgJC0xMjksICVlYXgKKyAgICBjbXBsICAgICQtTUFYX0VSUk5PLCAlZWF4CiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheApAQCAtMzAsMyArMjcsNCBAQAogICAgIHBvcGwgICAgJWVjeAogICAgIHBvcGwgICAgJWVieAogICAgIHJldAorRU5EKHJlbmFtZWF0KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9ybWRpci5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9ybWRpci5TCmluZGV4IDEyNGMxMGQuLjYyN2M0MWEgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvcm1kaXIuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3JtZGlyLlMKQEAgLTEsMTcgKzEsMTQgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KIAotICAgIC50ZXh0Ci0gICAgLnR5cGUgcm1kaXIsIEBmdW5jdGlvbgotICAgIC5nbG9ibCBybWRpcgotICAgIC5hbGlnbiA0Ci0KLXJtZGlyOgorRU5UUlkocm1kaXIpCiAgICAgcHVzaGwgICAlZWJ4CiAgICAgbW92ICAgICA4KCVlc3ApLCAlZWJ4CiAgICAgbW92bCAgICAkX19OUl9ybWRpciwgJWVheAogICAgIGludCAgICAgJDB4ODAKLSAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgY21wbCAgICAkLU1BWF9FUlJOTywgJWVheAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKQEAgLTIxLDMgKzE4LDQgQEAKIDE6CiAgICAgcG9wbCAgICAlZWJ4CiAgICAgcmV0CitFTkQocm1kaXIpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NjaGVkX2dldF9wcmlvcml0eV9tYXguUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2NoZWRfZ2V0X3ByaW9yaXR5X21heC5TCmluZGV4IGUyZDA5YTYuLmZiNjk2Y2MgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2NoZWRfZ2V0X3ByaW9yaXR5X21heC5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2NoZWRfZ2V0X3ByaW9yaXR5X21heC5TCkBAIC0xLDE3ICsxLDE0IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCi0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAKLSAgICAudGV4dAotICAgIC50eXBlIHNjaGVkX2dldF9wcmlvcml0eV9tYXgsIEBmdW5jdGlvbgotICAgIC5nbG9ibCBzY2hlZF9nZXRfcHJpb3JpdHlfbWF4Ci0gICAgLmFsaWduIDQKLQotc2NoZWRfZ2V0X3ByaW9yaXR5X21heDoKK0VOVFJZKHNjaGVkX2dldF9wcmlvcml0eV9tYXgpCiAgICAgcHVzaGwgICAlZWJ4CiAgICAgbW92ICAgICA4KCVlc3ApLCAlZWJ4CiAgICAgbW92bCAgICAkX19OUl9zY2hlZF9nZXRfcHJpb3JpdHlfbWF4LCAlZWF4CiAgICAgaW50ICAgICAkMHg4MAotICAgIGNtcGwgICAgJC0xMjksICVlYXgKKyAgICBjbXBsICAgICQtTUFYX0VSUk5PLCAlZWF4CiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheApAQCAtMjEsMyArMTgsNCBAQAogMToKICAgICBwb3BsICAgICVlYngKICAgICByZXQKK0VORChzY2hlZF9nZXRfcHJpb3JpdHlfbWF4KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zY2hlZF9nZXRfcHJpb3JpdHlfbWluLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NjaGVkX2dldF9wcmlvcml0eV9taW4uUwppbmRleCAwZjY2ZWVlLi5mMTg4NGYxIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NjaGVkX2dldF9wcmlvcml0eV9taW4uUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NjaGVkX2dldF9wcmlvcml0eV9taW4uUwpAQCAtMSwxNyArMSwxNCBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLwotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogCi0gICAgLnRleHQKLSAgICAudHlwZSBzY2hlZF9nZXRfcHJpb3JpdHlfbWluLCBAZnVuY3Rpb24KLSAgICAuZ2xvYmwgc2NoZWRfZ2V0X3ByaW9yaXR5X21pbgotICAgIC5hbGlnbiA0Ci0KLXNjaGVkX2dldF9wcmlvcml0eV9taW46CitFTlRSWShzY2hlZF9nZXRfcHJpb3JpdHlfbWluKQogICAgIHB1c2hsICAgJWVieAogICAgIG1vdiAgICAgOCglZXNwKSwgJWVieAogICAgIG1vdmwgICAgJF9fTlJfc2NoZWRfZ2V0X3ByaW9yaXR5X21pbiwgJWVheAogICAgIGludCAgICAgJDB4ODAKLSAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgY21wbCAgICAkLU1BWF9FUlJOTywgJWVheAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKQEAgLTIxLDMgKzE4LDQgQEAKIDE6CiAgICAgcG9wbCAgICAlZWJ4CiAgICAgcmV0CitFTkQoc2NoZWRfZ2V0X3ByaW9yaXR5X21pbikKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2NoZWRfZ2V0cGFyYW0uUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2NoZWRfZ2V0cGFyYW0uUwppbmRleCAyYThiZDBlLi4wMjE0YzZjIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NjaGVkX2dldHBhcmFtLlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zY2hlZF9nZXRwYXJhbS5TCkBAIC0xLDE5ICsxLDE2IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCi0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAKLSAgICAudGV4dAotICAgIC50eXBlIHNjaGVkX2dldHBhcmFtLCBAZnVuY3Rpb24KLSAgICAuZ2xvYmwgc2NoZWRfZ2V0cGFyYW0KLSAgICAuYWxpZ24gNAotCi1zY2hlZF9nZXRwYXJhbToKK0VOVFJZKHNjaGVkX2dldHBhcmFtKQogICAgIHB1c2hsICAgJWVieAogICAgIHB1c2hsICAgJWVjeAogICAgIG1vdiAgICAgMTIoJWVzcCksICVlYngKICAgICBtb3YgICAgIDE2KCVlc3ApLCAlZWN4CiAgICAgbW92bCAgICAkX19OUl9zY2hlZF9nZXRwYXJhbSwgJWVheAogICAgIGludCAgICAgJDB4ODAKLSAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgY21wbCAgICAkLU1BWF9FUlJOTywgJWVheAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKQEAgLTI0LDMgKzIxLDQgQEAKICAgICBwb3BsICAgICVlY3gKICAgICBwb3BsICAgICVlYngKICAgICByZXQKK0VORChzY2hlZF9nZXRwYXJhbSkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2NoZWRfZ2V0c2NoZWR1bGVyLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NjaGVkX2dldHNjaGVkdWxlci5TCmluZGV4IGFhYTVmOGMuLmFhYmE5NTMgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2NoZWRfZ2V0c2NoZWR1bGVyLlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zY2hlZF9nZXRzY2hlZHVsZXIuUwpAQCAtMSwxNyArMSwxNCBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLwotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogCi0gICAgLnRleHQKLSAgICAudHlwZSBzY2hlZF9nZXRzY2hlZHVsZXIsIEBmdW5jdGlvbgotICAgIC5nbG9ibCBzY2hlZF9nZXRzY2hlZHVsZXIKLSAgICAuYWxpZ24gNAotCi1zY2hlZF9nZXRzY2hlZHVsZXI6CitFTlRSWShzY2hlZF9nZXRzY2hlZHVsZXIpCiAgICAgcHVzaGwgICAlZWJ4CiAgICAgbW92ICAgICA4KCVlc3ApLCAlZWJ4CiAgICAgbW92bCAgICAkX19OUl9zY2hlZF9nZXRzY2hlZHVsZXIsICVlYXgKICAgICBpbnQgICAgICQweDgwCi0gICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGNtcGwgICAgJC1NQVhfRVJSTk8sICVlYXgKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4CkBAIC0yMSwzICsxOCw0IEBACiAxOgogICAgIHBvcGwgICAgJWVieAogICAgIHJldAorRU5EKHNjaGVkX2dldHNjaGVkdWxlcikKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2NoZWRfcnJfZ2V0X2ludGVydmFsLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NjaGVkX3JyX2dldF9pbnRlcnZhbC5TCmluZGV4IDU4Y2NkZGQuLmMyNzQ1YzcgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2NoZWRfcnJfZ2V0X2ludGVydmFsLlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zY2hlZF9ycl9nZXRfaW50ZXJ2YWwuUwpAQCAtMSwxOSArMSwxNiBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLwotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogCi0gICAgLnRleHQKLSAgICAudHlwZSBzY2hlZF9ycl9nZXRfaW50ZXJ2YWwsIEBmdW5jdGlvbgotICAgIC5nbG9ibCBzY2hlZF9ycl9nZXRfaW50ZXJ2YWwKLSAgICAuYWxpZ24gNAotCi1zY2hlZF9ycl9nZXRfaW50ZXJ2YWw6CitFTlRSWShzY2hlZF9ycl9nZXRfaW50ZXJ2YWwpCiAgICAgcHVzaGwgICAlZWJ4CiAgICAgcHVzaGwgICAlZWN4CiAgICAgbW92ICAgICAxMiglZXNwKSwgJWVieAogICAgIG1vdiAgICAgMTYoJWVzcCksICVlY3gKICAgICBtb3ZsICAgICRfX05SX3NjaGVkX3JyX2dldF9pbnRlcnZhbCwgJWVheAogICAgIGludCAgICAgJDB4ODAKLSAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgY21wbCAgICAkLU1BWF9FUlJOTywgJWVheAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKQEAgLTI0LDMgKzIxLDQgQEAKICAgICBwb3BsICAgICVlY3gKICAgICBwb3BsICAgICVlYngKICAgICByZXQKK0VORChzY2hlZF9ycl9nZXRfaW50ZXJ2YWwpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NjaGVkX3NldGFmZmluaXR5LlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NjaGVkX3NldGFmZmluaXR5LlMKaW5kZXggNWZhNTFlZi4uNDBmMDlmMiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zY2hlZF9zZXRhZmZpbml0eS5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2NoZWRfc2V0YWZmaW5pdHkuUwpAQCAtMSwxMiArMSw5IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCi0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAKLSAgICAudGV4dAotICAgIC50eXBlIHNjaGVkX3NldGFmZmluaXR5LCBAZnVuY3Rpb24KLSAgICAuZ2xvYmwgc2NoZWRfc2V0YWZmaW5pdHkKLSAgICAuYWxpZ24gNAotCi1zY2hlZF9zZXRhZmZpbml0eToKK0VOVFJZKHNjaGVkX3NldGFmZmluaXR5KQogICAgIHB1c2hsICAgJWVieAogICAgIHB1c2hsICAgJWVjeAogICAgIHB1c2hsICAgJWVkeApAQCAtMTUsNyArMTIsNyBAQAogICAgIG1vdiAgICAgMjQoJWVzcCksICVlZHgKICAgICBtb3ZsICAgICRfX05SX3NjaGVkX3NldGFmZmluaXR5LCAlZWF4CiAgICAgaW50ICAgICAkMHg4MAotICAgIGNtcGwgICAgJC0xMjksICVlYXgKKyAgICBjbXBsICAgICQtTUFYX0VSUk5PLCAlZWF4CiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheApAQCAtMjcsMyArMjQsNCBAQAogICAgIHBvcGwgICAgJWVjeAogICAgIHBvcGwgICAgJWVieAogICAgIHJldAorRU5EKHNjaGVkX3NldGFmZmluaXR5KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zY2hlZF9zZXRwYXJhbS5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zY2hlZF9zZXRwYXJhbS5TCmluZGV4IDRiODY5YmYuLmIzYzJjMWYgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2NoZWRfc2V0cGFyYW0uUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NjaGVkX3NldHBhcmFtLlMKQEAgLTEsMTkgKzEsMTYgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KIAotICAgIC50ZXh0Ci0gICAgLnR5cGUgc2NoZWRfc2V0cGFyYW0sIEBmdW5jdGlvbgotICAgIC5nbG9ibCBzY2hlZF9zZXRwYXJhbQotICAgIC5hbGlnbiA0Ci0KLXNjaGVkX3NldHBhcmFtOgorRU5UUlkoc2NoZWRfc2V0cGFyYW0pCiAgICAgcHVzaGwgICAlZWJ4CiAgICAgcHVzaGwgICAlZWN4CiAgICAgbW92ICAgICAxMiglZXNwKSwgJWVieAogICAgIG1vdiAgICAgMTYoJWVzcCksICVlY3gKICAgICBtb3ZsICAgICRfX05SX3NjaGVkX3NldHBhcmFtLCAlZWF4CiAgICAgaW50ICAgICAkMHg4MAotICAgIGNtcGwgICAgJC0xMjksICVlYXgKKyAgICBjbXBsICAgICQtTUFYX0VSUk5PLCAlZWF4CiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheApAQCAtMjQsMyArMjEsNCBAQAogICAgIHBvcGwgICAgJWVjeAogICAgIHBvcGwgICAgJWVieAogICAgIHJldAorRU5EKHNjaGVkX3NldHBhcmFtKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zY2hlZF9zZXRzY2hlZHVsZXIuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2NoZWRfc2V0c2NoZWR1bGVyLlMKaW5kZXggMDk5YTZkMS4uYzU3ZWQ3YiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zY2hlZF9zZXRzY2hlZHVsZXIuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NjaGVkX3NldHNjaGVkdWxlci5TCkBAIC0xLDEyICsxLDkgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KIAotICAgIC50ZXh0Ci0gICAgLnR5cGUgc2NoZWRfc2V0c2NoZWR1bGVyLCBAZnVuY3Rpb24KLSAgICAuZ2xvYmwgc2NoZWRfc2V0c2NoZWR1bGVyCi0gICAgLmFsaWduIDQKLQotc2NoZWRfc2V0c2NoZWR1bGVyOgorRU5UUlkoc2NoZWRfc2V0c2NoZWR1bGVyKQogICAgIHB1c2hsICAgJWVieAogICAgIHB1c2hsICAgJWVjeAogICAgIHB1c2hsICAgJWVkeApAQCAtMTUsNyArMTIsNyBAQAogICAgIG1vdiAgICAgMjQoJWVzcCksICVlZHgKICAgICBtb3ZsICAgICRfX05SX3NjaGVkX3NldHNjaGVkdWxlciwgJWVheAogICAgIGludCAgICAgJDB4ODAKLSAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgY21wbCAgICAkLU1BWF9FUlJOTywgJWVheAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKQEAgLTI3LDMgKzI0LDQgQEAKICAgICBwb3BsICAgICVlY3gKICAgICBwb3BsICAgICVlYngKICAgICByZXQKK0VORChzY2hlZF9zZXRzY2hlZHVsZXIpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NjaGVkX3lpZWxkLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NjaGVkX3lpZWxkLlMKaW5kZXggZmNkNzI4MS4uZTQwZTJkYSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zY2hlZF95aWVsZC5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2NoZWRfeWllbGQuUwpAQCAtMSwxNyArMSwxNCBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLwotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogCi0gICAgLnRleHQKLSAgICAudHlwZSBzY2hlZF95aWVsZCwgQGZ1bmN0aW9uCi0gICAgLmdsb2JsIHNjaGVkX3lpZWxkCi0gICAgLmFsaWduIDQKLQotc2NoZWRfeWllbGQ6CitFTlRSWShzY2hlZF95aWVsZCkKICAgICBwdXNobCAgICVlYngKICAgICBtb3YgICAgIDgoJWVzcCksICVlYngKICAgICBtb3ZsICAgICRfX05SX3NjaGVkX3lpZWxkLCAlZWF4CiAgICAgaW50ICAgICAkMHg4MAotICAgIGNtcGwgICAgJC0xMjksICVlYXgKKyAgICBjbXBsICAgICQtTUFYX0VSUk5PLCAlZWF4CiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheApAQCAtMjEsMyArMTgsNCBAQAogMToKICAgICBwb3BsICAgICVlYngKICAgICByZXQKK0VORChzY2hlZF95aWVsZCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2VsZWN0LlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NlbGVjdC5TCmluZGV4IDI3MzU5YTkuLjFmMTk5MTggMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2VsZWN0LlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zZWxlY3QuUwpAQCAtMSwxMiArMSw5IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCi0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAKLSAgICAudGV4dAotICAgIC50eXBlIHNlbGVjdCwgQGZ1bmN0aW9uCi0gICAgLmdsb2JsIHNlbGVjdAotICAgIC5hbGlnbiA0Ci0KLXNlbGVjdDoKK0VOVFJZKHNlbGVjdCkKICAgICBwdXNobCAgICVlYngKICAgICBwdXNobCAgICVlY3gKICAgICBwdXNobCAgICVlZHgKQEAgLTE5LDcgKzE2LDcgQEAKICAgICBtb3YgICAgIDQwKCVlc3ApLCAlZWRpCiAgICAgbW92bCAgICAkX19OUl9fbmV3c2VsZWN0LCAlZWF4CiAgICAgaW50ICAgICAkMHg4MAotICAgIGNtcGwgICAgJC0xMjksICVlYXgKKyAgICBjbXBsICAgICQtTUFYX0VSUk5PLCAlZWF4CiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheApAQCAtMzMsMyArMzAsNCBAQAogICAgIHBvcGwgICAgJWVjeAogICAgIHBvcGwgICAgJWVieAogICAgIHJldAorRU5EKHNlbGVjdCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2VuZGZpbGUuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2VuZGZpbGUuUwppbmRleCAyNzUyZWVjLi5mZWQwNDU2IDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NlbmRmaWxlLlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zZW5kZmlsZS5TCkBAIC0xLDEyICsxLDkgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KIAotICAgIC50ZXh0Ci0gICAgLnR5cGUgc2VuZGZpbGUsIEBmdW5jdGlvbgotICAgIC5nbG9ibCBzZW5kZmlsZQotICAgIC5hbGlnbiA0Ci0KLXNlbmRmaWxlOgorRU5UUlkoc2VuZGZpbGUpCiAgICAgcHVzaGwgICAlZWJ4CiAgICAgcHVzaGwgICAlZWN4CiAgICAgcHVzaGwgICAlZWR4CkBAIC0xNyw3ICsxNCw3IEBACiAgICAgbW92ICAgICAzMiglZXNwKSwgJWVzaQogICAgIG1vdmwgICAgJF9fTlJfc2VuZGZpbGUsICVlYXgKICAgICBpbnQgICAgICQweDgwCi0gICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGNtcGwgICAgJC1NQVhfRVJSTk8sICVlYXgKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4CkBAIC0zMCwzICsyNyw0IEBACiAgICAgcG9wbCAgICAlZWN4CiAgICAgcG9wbCAgICAlZWJ4CiAgICAgcmV0CitFTkQoc2VuZGZpbGUpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NlbmRtc2cuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2VuZG1zZy5TCmluZGV4IDVmMjY2MjMuLjliOWRlZTEgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2VuZG1zZy5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2VuZG1zZy5TCkBAIC0xLDEyICsxLDkgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KIAotICAgIC50ZXh0Ci0gICAgLnR5cGUgc2VuZG1zZywgQGZ1bmN0aW9uCi0gICAgLmdsb2JsIHNlbmRtc2cKLSAgICAuYWxpZ24gNAotCi1zZW5kbXNnOgorRU5UUlkoc2VuZG1zZykKICAgICBwdXNobCAgICVlYngKICAgICBwdXNobCAgICVlY3gKICAgICBtb3YgICAgICQxNiwgJWVieApAQCAtMTQsNyArMTEsNyBAQAogICAgIGFkZGwgICAgJDEyLCAlZWN4CiAgICAgbW92bCAgICAkX19OUl9zb2NrZXRjYWxsLCAlZWF4CiAgICAgaW50ICAgICAkMHg4MAotICAgIGNtcGwgICAgJC0xMjksICVlYXgKKyAgICBjbXBsICAgICQtTUFYX0VSUk5PLCAlZWF4CiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheApAQCAtMjUsMyArMjIsNCBAQAogICAgIHBvcGwgICAgJWVjeAogICAgIHBvcGwgICAgJWVieAogICAgIHJldAorRU5EKHNlbmRtc2cpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NlbmR0by5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zZW5kdG8uUwppbmRleCBkNzlhMmJhLi4zMTVlZDRjIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NlbmR0by5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2VuZHRvLlMKQEAgLTEsMTIgKzEsOSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLwotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogCi0gICAgLnRleHQKLSAgICAudHlwZSBzZW5kdG8sIEBmdW5jdGlvbgotICAgIC5nbG9ibCBzZW5kdG8KLSAgICAuYWxpZ24gNAotCi1zZW5kdG86CitFTlRSWShzZW5kdG8pCiAgICAgcHVzaGwgICAlZWJ4CiAgICAgcHVzaGwgICAlZWN4CiAgICAgbW92ICAgICAkMTEsICVlYngKQEAgLTE0LDcgKzExLDcgQEAKICAgICBhZGRsICAgICQxMiwgJWVjeAogICAgIG1vdmwgICAgJF9fTlJfc29ja2V0Y2FsbCwgJWVheAogICAgIGludCAgICAgJDB4ODAKLSAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgY21wbCAgICAkLU1BWF9FUlJOTywgJWVheAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKQEAgLTI1LDMgKzIyLDQgQEAKICAgICBwb3BsICAgICVlY3gKICAgICBwb3BsICAgICVlYngKICAgICByZXQKK0VORChzZW5kdG8pCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NldGdpZC5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zZXRnaWQuUwppbmRleCA2N2ZkMDJlLi40NzA0MDQ3IDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NldGdpZC5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2V0Z2lkLlMKQEAgLTEsMTcgKzEsMTQgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KIAotICAgIC50ZXh0Ci0gICAgLnR5cGUgc2V0Z2lkLCBAZnVuY3Rpb24KLSAgICAuZ2xvYmwgc2V0Z2lkCi0gICAgLmFsaWduIDQKLQotc2V0Z2lkOgorRU5UUlkoc2V0Z2lkKQogICAgIHB1c2hsICAgJWVieAogICAgIG1vdiAgICAgOCglZXNwKSwgJWVieAogICAgIG1vdmwgICAgJF9fTlJfc2V0Z2lkMzIsICVlYXgKICAgICBpbnQgICAgICQweDgwCi0gICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGNtcGwgICAgJC1NQVhfRVJSTk8sICVlYXgKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4CkBAIC0yMSwzICsxOCw0IEBACiAxOgogICAgIHBvcGwgICAgJWVieAogICAgIHJldAorRU5EKHNldGdpZCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2V0Z3JvdXBzLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NldGdyb3Vwcy5TCmluZGV4IGI2YmFiMTEuLmY1NWQ4NGYgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2V0Z3JvdXBzLlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zZXRncm91cHMuUwpAQCAtMSwxOSArMSwxNiBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLwotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogCi0gICAgLnRleHQKLSAgICAudHlwZSBzZXRncm91cHMsIEBmdW5jdGlvbgotICAgIC5nbG9ibCBzZXRncm91cHMKLSAgICAuYWxpZ24gNAotCi1zZXRncm91cHM6CitFTlRSWShzZXRncm91cHMpCiAgICAgcHVzaGwgICAlZWJ4CiAgICAgcHVzaGwgICAlZWN4CiAgICAgbW92ICAgICAxMiglZXNwKSwgJWVieAogICAgIG1vdiAgICAgMTYoJWVzcCksICVlY3gKICAgICBtb3ZsICAgICRfX05SX3NldGdyb3VwczMyLCAlZWF4CiAgICAgaW50ICAgICAkMHg4MAotICAgIGNtcGwgICAgJC0xMjksICVlYXgKKyAgICBjbXBsICAgICQtTUFYX0VSUk5PLCAlZWF4CiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheApAQCAtMjQsMyArMjEsNCBAQAogICAgIHBvcGwgICAgJWVjeAogICAgIHBvcGwgICAgJWVieAogICAgIHJldAorRU5EKHNldGdyb3VwcykKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2V0aXRpbWVyLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NldGl0aW1lci5TCmluZGV4IDI5ZDRiYzYuLjcxM2M1YzYgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2V0aXRpbWVyLlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zZXRpdGltZXIuUwpAQCAtMSwxMiArMSw5IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCi0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAKLSAgICAudGV4dAotICAgIC50eXBlIHNldGl0aW1lciwgQGZ1bmN0aW9uCi0gICAgLmdsb2JsIHNldGl0aW1lcgotICAgIC5hbGlnbiA0Ci0KLXNldGl0aW1lcjoKK0VOVFJZKHNldGl0aW1lcikKICAgICBwdXNobCAgICVlYngKICAgICBwdXNobCAgICVlY3gKICAgICBwdXNobCAgICVlZHgKQEAgLTE1LDcgKzEyLDcgQEAKICAgICBtb3YgICAgIDI0KCVlc3ApLCAlZWR4CiAgICAgbW92bCAgICAkX19OUl9zZXRpdGltZXIsICVlYXgKICAgICBpbnQgICAgICQweDgwCi0gICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGNtcGwgICAgJC1NQVhfRVJSTk8sICVlYXgKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4CkBAIC0yNywzICsyNCw0IEBACiAgICAgcG9wbCAgICAlZWN4CiAgICAgcG9wbCAgICAlZWJ4CiAgICAgcmV0CitFTkQoc2V0aXRpbWVyKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zZXRwZ2lkLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NldHBnaWQuUwppbmRleCBkZjcyMzgyLi5mOTAwMDFhIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NldHBnaWQuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NldHBnaWQuUwpAQCAtMSwxOSArMSwxNiBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLwotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogCi0gICAgLnRleHQKLSAgICAudHlwZSBzZXRwZ2lkLCBAZnVuY3Rpb24KLSAgICAuZ2xvYmwgc2V0cGdpZAotICAgIC5hbGlnbiA0Ci0KLXNldHBnaWQ6CitFTlRSWShzZXRwZ2lkKQogICAgIHB1c2hsICAgJWVieAogICAgIHB1c2hsICAgJWVjeAogICAgIG1vdiAgICAgMTIoJWVzcCksICVlYngKICAgICBtb3YgICAgIDE2KCVlc3ApLCAlZWN4CiAgICAgbW92bCAgICAkX19OUl9zZXRwZ2lkLCAlZWF4CiAgICAgaW50ICAgICAkMHg4MAotICAgIGNtcGwgICAgJC0xMjksICVlYXgKKyAgICBjbXBsICAgICQtTUFYX0VSUk5PLCAlZWF4CiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheApAQCAtMjQsMyArMjEsNCBAQAogICAgIHBvcGwgICAgJWVjeAogICAgIHBvcGwgICAgJWVieAogICAgIHJldAorRU5EKHNldHBnaWQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NldHByaW9yaXR5LlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NldHByaW9yaXR5LlMKaW5kZXggMzlkN2ExOC4uOTczMzAyZSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zZXRwcmlvcml0eS5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2V0cHJpb3JpdHkuUwpAQCAtMSwxMiArMSw5IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCi0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAKLSAgICAudGV4dAotICAgIC50eXBlIHNldHByaW9yaXR5LCBAZnVuY3Rpb24KLSAgICAuZ2xvYmwgc2V0cHJpb3JpdHkKLSAgICAuYWxpZ24gNAotCi1zZXRwcmlvcml0eToKK0VOVFJZKHNldHByaW9yaXR5KQogICAgIHB1c2hsICAgJWVieAogICAgIHB1c2hsICAgJWVjeAogICAgIHB1c2hsICAgJWVkeApAQCAtMTUsNyArMTIsNyBAQAogICAgIG1vdiAgICAgMjQoJWVzcCksICVlZHgKICAgICBtb3ZsICAgICRfX05SX3NldHByaW9yaXR5LCAlZWF4CiAgICAgaW50ICAgICAkMHg4MAotICAgIGNtcGwgICAgJC0xMjksICVlYXgKKyAgICBjbXBsICAgICQtTUFYX0VSUk5PLCAlZWF4CiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheApAQCAtMjcsMyArMjQsNCBAQAogICAgIHBvcGwgICAgJWVjeAogICAgIHBvcGwgICAgJWVieAogICAgIHJldAorRU5EKHNldHByaW9yaXR5KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zZXRyZWdpZC5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zZXRyZWdpZC5TCmluZGV4IGMzMTEyZGUuLjY4NDI1NDAgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2V0cmVnaWQuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NldHJlZ2lkLlMKQEAgLTEsMTkgKzEsMTYgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KIAotICAgIC50ZXh0Ci0gICAgLnR5cGUgc2V0cmVnaWQsIEBmdW5jdGlvbgotICAgIC5nbG9ibCBzZXRyZWdpZAotICAgIC5hbGlnbiA0Ci0KLXNldHJlZ2lkOgorRU5UUlkoc2V0cmVnaWQpCiAgICAgcHVzaGwgICAlZWJ4CiAgICAgcHVzaGwgICAlZWN4CiAgICAgbW92ICAgICAxMiglZXNwKSwgJWVieAogICAgIG1vdiAgICAgMTYoJWVzcCksICVlY3gKICAgICBtb3ZsICAgICRfX05SX3NldHJlZ2lkMzIsICVlYXgKICAgICBpbnQgICAgICQweDgwCi0gICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGNtcGwgICAgJC1NQVhfRVJSTk8sICVlYXgKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4CkBAIC0yNCwzICsyMSw0IEBACiAgICAgcG9wbCAgICAlZWN4CiAgICAgcG9wbCAgICAlZWJ4CiAgICAgcmV0CitFTkQoc2V0cmVnaWQpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NldHJlc2dpZC5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zZXRyZXNnaWQuUwppbmRleCA4ZTZjOGM5Li5jZTU5OGMxIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NldHJlc2dpZC5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2V0cmVzZ2lkLlMKQEAgLTEsMTIgKzEsOSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLwotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogCi0gICAgLnRleHQKLSAgICAudHlwZSBzZXRyZXNnaWQsIEBmdW5jdGlvbgotICAgIC5nbG9ibCBzZXRyZXNnaWQKLSAgICAuYWxpZ24gNAotCi1zZXRyZXNnaWQ6CitFTlRSWShzZXRyZXNnaWQpCiAgICAgcHVzaGwgICAlZWJ4CiAgICAgcHVzaGwgICAlZWN4CiAgICAgcHVzaGwgICAlZWR4CkBAIC0xNSw3ICsxMiw3IEBACiAgICAgbW92ICAgICAyNCglZXNwKSwgJWVkeAogICAgIG1vdmwgICAgJF9fTlJfc2V0cmVzZ2lkMzIsICVlYXgKICAgICBpbnQgICAgICQweDgwCi0gICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGNtcGwgICAgJC1NQVhfRVJSTk8sICVlYXgKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4CkBAIC0yNywzICsyNCw0IEBACiAgICAgcG9wbCAgICAlZWN4CiAgICAgcG9wbCAgICAlZWJ4CiAgICAgcmV0CitFTkQoc2V0cmVzZ2lkKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zZXRybGltaXQuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2V0cmxpbWl0LlMKaW5kZXggMzE2MTNjNS4uMGMxMWI3NSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zZXRybGltaXQuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NldHJsaW1pdC5TCkBAIC0xLDE5ICsxLDE2IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCi0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAKLSAgICAudGV4dAotICAgIC50eXBlIHNldHJsaW1pdCwgQGZ1bmN0aW9uCi0gICAgLmdsb2JsIHNldHJsaW1pdAotICAgIC5hbGlnbiA0Ci0KLXNldHJsaW1pdDoKK0VOVFJZKHNldHJsaW1pdCkKICAgICBwdXNobCAgICVlYngKICAgICBwdXNobCAgICVlY3gKICAgICBtb3YgICAgIDEyKCVlc3ApLCAlZWJ4CiAgICAgbW92ICAgICAxNiglZXNwKSwgJWVjeAogICAgIG1vdmwgICAgJF9fTlJfc2V0cmxpbWl0LCAlZWF4CiAgICAgaW50ICAgICAkMHg4MAotICAgIGNtcGwgICAgJC0xMjksICVlYXgKKyAgICBjbXBsICAgICQtTUFYX0VSUk5PLCAlZWF4CiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheApAQCAtMjQsMyArMjEsNCBAQAogICAgIHBvcGwgICAgJWVjeAogICAgIHBvcGwgICAgJWVieAogICAgIHJldAorRU5EKHNldHJsaW1pdCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2V0c2lkLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NldHNpZC5TCmluZGV4IGRiMzEzODAuLjIzNWI0ZmIgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2V0c2lkLlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zZXRzaWQuUwpAQCAtMSwxNSArMSwxMiBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLwotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogCi0gICAgLnRleHQKLSAgICAudHlwZSBzZXRzaWQsIEBmdW5jdGlvbgotICAgIC5nbG9ibCBzZXRzaWQKLSAgICAuYWxpZ24gNAotCi1zZXRzaWQ6CitFTlRSWShzZXRzaWQpCiAgICAgbW92bCAgICAkX19OUl9zZXRzaWQsICVlYXgKICAgICBpbnQgICAgICQweDgwCi0gICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGNtcGwgICAgJC1NQVhfRVJSTk8sICVlYXgKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4CkBAIC0xOCwzICsxNSw0IEBACiAgICAgb3JsICAgICAkLTEsICVlYXgKIDE6CiAgICAgcmV0CitFTkQoc2V0c2lkKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zZXRzb2Nrb3B0LlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NldHNvY2tvcHQuUwppbmRleCBkMWM5ODZhLi42MjE5ODU5IDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NldHNvY2tvcHQuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NldHNvY2tvcHQuUwpAQCAtMSwxMiArMSw5IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCi0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAKLSAgICAudGV4dAotICAgIC50eXBlIHNldHNvY2tvcHQsIEBmdW5jdGlvbgotICAgIC5nbG9ibCBzZXRzb2Nrb3B0Ci0gICAgLmFsaWduIDQKLQotc2V0c29ja29wdDoKK0VOVFJZKHNldHNvY2tvcHQpCiAgICAgcHVzaGwgICAlZWJ4CiAgICAgcHVzaGwgICAlZWN4CiAgICAgbW92ICAgICAkMTQsICVlYngKQEAgLTE0LDcgKzExLDcgQEAKICAgICBhZGRsICAgICQxMiwgJWVjeAogICAgIG1vdmwgICAgJF9fTlJfc29ja2V0Y2FsbCwgJWVheAogICAgIGludCAgICAgJDB4ODAKLSAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgY21wbCAgICAkLU1BWF9FUlJOTywgJWVheAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKQEAgLTI1LDMgKzIyLDQgQEAKICAgICBwb3BsICAgICVlY3gKICAgICBwb3BsICAgICVlYngKICAgICByZXQKK0VORChzZXRzb2Nrb3B0KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zZXR0aW1lb2ZkYXkuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2V0dGltZW9mZGF5LlMKaW5kZXggZTc3ZmExZS4uZjA2YWVlNyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zZXR0aW1lb2ZkYXkuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NldHRpbWVvZmRheS5TCkBAIC0xLDE5ICsxLDE2IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCi0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAKLSAgICAudGV4dAotICAgIC50eXBlIHNldHRpbWVvZmRheSwgQGZ1bmN0aW9uCi0gICAgLmdsb2JsIHNldHRpbWVvZmRheQotICAgIC5hbGlnbiA0Ci0KLXNldHRpbWVvZmRheToKK0VOVFJZKHNldHRpbWVvZmRheSkKICAgICBwdXNobCAgICVlYngKICAgICBwdXNobCAgICVlY3gKICAgICBtb3YgICAgIDEyKCVlc3ApLCAlZWJ4CiAgICAgbW92ICAgICAxNiglZXNwKSwgJWVjeAogICAgIG1vdmwgICAgJF9fTlJfc2V0dGltZW9mZGF5LCAlZWF4CiAgICAgaW50ICAgICAkMHg4MAotICAgIGNtcGwgICAgJC0xMjksICVlYXgKKyAgICBjbXBsICAgICQtTUFYX0VSUk5PLCAlZWF4CiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheApAQCAtMjQsMyArMjEsNCBAQAogICAgIHBvcGwgICAgJWVjeAogICAgIHBvcGwgICAgJWVieAogICAgIHJldAorRU5EKHNldHRpbWVvZmRheSkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2V0eGF0dHIuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2V0eGF0dHIuUwppbmRleCAzOGJlNzM2Li5mNjExMGNjIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NldHhhdHRyLlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zZXR4YXR0ci5TCkBAIC0xLDEyICsxLDkgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KIAotICAgIC50ZXh0Ci0gICAgLnR5cGUgc2V0eGF0dHIsIEBmdW5jdGlvbgotICAgIC5nbG9ibCBzZXR4YXR0cgotICAgIC5hbGlnbiA0Ci0KLXNldHhhdHRyOgorRU5UUlkoc2V0eGF0dHIpCiAgICAgcHVzaGwgICAlZWJ4CiAgICAgcHVzaGwgICAlZWN4CiAgICAgcHVzaGwgICAlZWR4CkBAIC0xOSw3ICsxNiw3IEBACiAgICAgbW92ICAgICA0MCglZXNwKSwgJWVkaQogICAgIG1vdmwgICAgJF9fTlJfc2V0eGF0dHIsICVlYXgKICAgICBpbnQgICAgICQweDgwCi0gICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGNtcGwgICAgJC1NQVhfRVJSTk8sICVlYXgKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4CkBAIC0zMywzICszMCw0IEBACiAgICAgcG9wbCAgICAlZWN4CiAgICAgcG9wbCAgICAlZWJ4CiAgICAgcmV0CitFTkQoc2V0eGF0dHIpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NodXRkb3duLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NodXRkb3duLlMKaW5kZXggNDVmMDY2NC4uOTk3MTM4YyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zaHV0ZG93bi5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2h1dGRvd24uUwpAQCAtMSwxMiArMSw5IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCi0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAKLSAgICAudGV4dAotICAgIC50eXBlIHNodXRkb3duLCBAZnVuY3Rpb24KLSAgICAuZ2xvYmwgc2h1dGRvd24KLSAgICAuYWxpZ24gNAotCi1zaHV0ZG93bjoKK0VOVFJZKHNodXRkb3duKQogICAgIHB1c2hsICAgJWVieAogICAgIHB1c2hsICAgJWVjeAogICAgIG1vdiAgICAgJDEzLCAlZWJ4CkBAIC0xNCw3ICsxMSw3IEBACiAgICAgYWRkbCAgICAkMTIsICVlY3gKICAgICBtb3ZsICAgICRfX05SX3NvY2tldGNhbGwsICVlYXgKICAgICBpbnQgICAgICQweDgwCi0gICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGNtcGwgICAgJC1NQVhfRVJSTk8sICVlYXgKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4CkBAIC0yNSwzICsyMiw0IEBACiAgICAgcG9wbCAgICAlZWN4CiAgICAgcG9wbCAgICAlZWJ4CiAgICAgcmV0CitFTkQoc2h1dGRvd24pCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NpZ2FjdGlvbi5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zaWdhY3Rpb24uUwppbmRleCBiMTZlM2FhLi40OTljODIxIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NpZ2FjdGlvbi5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2lnYWN0aW9uLlMKQEAgLTEsMTIgKzEsOSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLwotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogCi0gICAgLnRleHQKLSAgICAudHlwZSBzaWdhY3Rpb24sIEBmdW5jdGlvbgotICAgIC5nbG9ibCBzaWdhY3Rpb24KLSAgICAuYWxpZ24gNAotCi1zaWdhY3Rpb246CitFTlRSWShzaWdhY3Rpb24pCiAgICAgcHVzaGwgICAlZWJ4CiAgICAgcHVzaGwgICAlZWN4CiAgICAgcHVzaGwgICAlZWR4CkBAIC0xNSw3ICsxMiw3IEBACiAgICAgbW92ICAgICAyNCglZXNwKSwgJWVkeAogICAgIG1vdmwgICAgJF9fTlJfc2lnYWN0aW9uLCAlZWF4CiAgICAgaW50ICAgICAkMHg4MAotICAgIGNtcGwgICAgJC0xMjksICVlYXgKKyAgICBjbXBsICAgICQtTUFYX0VSUk5PLCAlZWF4CiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheApAQCAtMjcsMyArMjQsNCBAQAogICAgIHBvcGwgICAgJWVjeAogICAgIHBvcGwgICAgJWVieAogICAgIHJldAorRU5EKHNpZ2FjdGlvbikKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2lnYWx0c3RhY2suUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2lnYWx0c3RhY2suUwppbmRleCBkMzk0MTlkLi43Y2RkMWViIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NpZ2FsdHN0YWNrLlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zaWdhbHRzdGFjay5TCkBAIC0xLDE5ICsxLDE2IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCi0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAKLSAgICAudGV4dAotICAgIC50eXBlIHNpZ2FsdHN0YWNrLCBAZnVuY3Rpb24KLSAgICAuZ2xvYmwgc2lnYWx0c3RhY2sKLSAgICAuYWxpZ24gNAotCi1zaWdhbHRzdGFjazoKK0VOVFJZKHNpZ2FsdHN0YWNrKQogICAgIHB1c2hsICAgJWVieAogICAgIHB1c2hsICAgJWVjeAogICAgIG1vdiAgICAgMTIoJWVzcCksICVlYngKICAgICBtb3YgICAgIDE2KCVlc3ApLCAlZWN4CiAgICAgbW92bCAgICAkX19OUl9zaWdhbHRzdGFjaywgJWVheAogICAgIGludCAgICAgJDB4ODAKLSAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgY21wbCAgICAkLU1BWF9FUlJOTywgJWVheAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKQEAgLTI0LDMgKzIxLDQgQEAKICAgICBwb3BsICAgICVlY3gKICAgICBwb3BsICAgICVlYngKICAgICByZXQKK0VORChzaWdhbHRzdGFjaykKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2lnbmFsZmQ0LlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NpZ25hbGZkNC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5OWFkMzUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NpZ25hbGZkNC5TCkBAIC0wLDAgKzEsMzAgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KKworRU5UUlkoc2lnbmFsZmQ0KQorICAgIHB1c2hsICAgJWVieAorICAgIHB1c2hsICAgJWVjeAorICAgIHB1c2hsICAgJWVkeAorICAgIHB1c2hsICAgJWVzaQorICAgIG1vdiAgICAgMjAoJWVzcCksICVlYngKKyAgICBtb3YgICAgIDI0KCVlc3ApLCAlZWN4CisgICAgbW92ICAgICAyOCglZXNwKSwgJWVkeAorICAgIG1vdiAgICAgMzIoJWVzcCksICVlc2kKKyAgICBtb3ZsICAgICRfX05SX3NpZ25hbGZkNCwgJWVheAorICAgIGludCAgICAgJDB4ODAKKyAgICBjbXBsICAgICQtTUFYX0VSUk5PLCAlZWF4CisgICAgamIgICAgICAxZgorICAgIG5lZ2wgICAgJWVheAorICAgIHB1c2hsICAgJWVheAorICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBhZGRsICAgICQ0LCAlZXNwCisgICAgb3JsICAgICAkLTEsICVlYXgKKzE6CisgICAgcG9wbCAgICAlZXNpCisgICAgcG9wbCAgICAlZWR4CisgICAgcG9wbCAgICAlZWN4CisgICAgcG9wbCAgICAlZWJ4CisgICAgcmV0CitFTkQoc2lnbmFsZmQ0KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zaWdwZW5kaW5nLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NpZ3BlbmRpbmcuUwppbmRleCAyMjgwODg2Li5lMjZmMTg5IDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NpZ3BlbmRpbmcuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NpZ3BlbmRpbmcuUwpAQCAtMSwxNyArMSwxNCBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLwotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogCi0gICAgLnRleHQKLSAgICAudHlwZSBzaWdwZW5kaW5nLCBAZnVuY3Rpb24KLSAgICAuZ2xvYmwgc2lncGVuZGluZwotICAgIC5hbGlnbiA0Ci0KLXNpZ3BlbmRpbmc6CitFTlRSWShzaWdwZW5kaW5nKQogICAgIHB1c2hsICAgJWVieAogICAgIG1vdiAgICAgOCglZXNwKSwgJWVieAogICAgIG1vdmwgICAgJF9fTlJfc2lncGVuZGluZywgJWVheAogICAgIGludCAgICAgJDB4ODAKLSAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgY21wbCAgICAkLU1BWF9FUlJOTywgJWVheAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKQEAgLTIxLDMgKzE4LDQgQEAKIDE6CiAgICAgcG9wbCAgICAlZWJ4CiAgICAgcmV0CitFTkQoc2lncGVuZGluZykKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2lncHJvY21hc2suUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2lncHJvY21hc2suUwppbmRleCA0MmZjZjkyLi5mYjEyZWEyIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NpZ3Byb2NtYXNrLlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zaWdwcm9jbWFzay5TCkBAIC0xLDEyICsxLDkgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KIAotICAgIC50ZXh0Ci0gICAgLnR5cGUgc2lncHJvY21hc2ssIEBmdW5jdGlvbgotICAgIC5nbG9ibCBzaWdwcm9jbWFzawotICAgIC5hbGlnbiA0Ci0KLXNpZ3Byb2NtYXNrOgorRU5UUlkoc2lncHJvY21hc2spCiAgICAgcHVzaGwgICAlZWJ4CiAgICAgcHVzaGwgICAlZWN4CiAgICAgcHVzaGwgICAlZWR4CkBAIC0xNSw3ICsxMiw3IEBACiAgICAgbW92ICAgICAyNCglZXNwKSwgJWVkeAogICAgIG1vdmwgICAgJF9fTlJfc2lncHJvY21hc2ssICVlYXgKICAgICBpbnQgICAgICQweDgwCi0gICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGNtcGwgICAgJC1NQVhfRVJSTk8sICVlYXgKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4CkBAIC0yNywzICsyNCw0IEBACiAgICAgcG9wbCAgICAlZWN4CiAgICAgcG9wbCAgICAlZWJ4CiAgICAgcmV0CitFTkQoc2lncHJvY21hc2spCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NvY2tldC5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zb2NrZXQuUwppbmRleCA4OWE4MzU4Li5iN2EyMGRlIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NvY2tldC5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc29ja2V0LlMKQEAgLTEsMTIgKzEsOSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLwotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogCi0gICAgLnRleHQKLSAgICAudHlwZSBzb2NrZXQsIEBmdW5jdGlvbgotICAgIC5nbG9ibCBzb2NrZXQKLSAgICAuYWxpZ24gNAotCi1zb2NrZXQ6CitFTlRSWShzb2NrZXQpCiAgICAgcHVzaGwgICAlZWJ4CiAgICAgcHVzaGwgICAlZWN4CiAgICAgbW92ICAgICAkMSwgJWVieApAQCAtMTQsNyArMTEsNyBAQAogICAgIGFkZGwgICAgJDEyLCAlZWN4CiAgICAgbW92bCAgICAkX19OUl9zb2NrZXRjYWxsLCAlZWF4CiAgICAgaW50ICAgICAkMHg4MAotICAgIGNtcGwgICAgJC0xMjksICVlYXgKKyAgICBjbXBsICAgICQtTUFYX0VSUk5PLCAlZWF4CiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheApAQCAtMjUsMyArMjIsNCBAQAogICAgIHBvcGwgICAgJWVjeAogICAgIHBvcGwgICAgJWVieAogICAgIHJldAorRU5EKHNvY2tldCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc29ja2V0cGFpci5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zb2NrZXRwYWlyLlMKaW5kZXggMDIyMjk4OS4uMDJjMDJhYyAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zb2NrZXRwYWlyLlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zb2NrZXRwYWlyLlMKQEAgLTEsMTIgKzEsOSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLwotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogCi0gICAgLnRleHQKLSAgICAudHlwZSBzb2NrZXRwYWlyLCBAZnVuY3Rpb24KLSAgICAuZ2xvYmwgc29ja2V0cGFpcgotICAgIC5hbGlnbiA0Ci0KLXNvY2tldHBhaXI6CitFTlRSWShzb2NrZXRwYWlyKQogICAgIHB1c2hsICAgJWVieAogICAgIHB1c2hsICAgJWVjeAogICAgIG1vdiAgICAgJDgsICVlYngKQEAgLTE0LDcgKzExLDcgQEAKICAgICBhZGRsICAgICQxMiwgJWVjeAogICAgIG1vdmwgICAgJF9fTlJfc29ja2V0Y2FsbCwgJWVheAogICAgIGludCAgICAgJDB4ODAKLSAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgY21wbCAgICAkLU1BWF9FUlJOTywgJWVheAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKQEAgLTI1LDMgKzIyLDQgQEAKICAgICBwb3BsICAgICVlY3gKICAgICBwb3BsICAgICVlYngKICAgICByZXQKK0VORChzb2NrZXRwYWlyKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zdGF0LlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3N0YXQuUwppbmRleCBjOTk4NGYxLi4yY2RmMWEwIDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3N0YXQuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3N0YXQuUwpAQCAtMSwxOSArMSwxNiBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLwotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogCi0gICAgLnRleHQKLSAgICAudHlwZSBzdGF0LCBAZnVuY3Rpb24KLSAgICAuZ2xvYmwgc3RhdAotICAgIC5hbGlnbiA0Ci0KLXN0YXQ6CitFTlRSWShzdGF0KQogICAgIHB1c2hsICAgJWVieAogICAgIHB1c2hsICAgJWVjeAogICAgIG1vdiAgICAgMTIoJWVzcCksICVlYngKICAgICBtb3YgICAgIDE2KCVlc3ApLCAlZWN4CiAgICAgbW92bCAgICAkX19OUl9zdGF0NjQsICVlYXgKICAgICBpbnQgICAgICQweDgwCi0gICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGNtcGwgICAgJC1NQVhfRVJSTk8sICVlYXgKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4CkBAIC0yNCwzICsyMSw0IEBACiAgICAgcG9wbCAgICAlZWN4CiAgICAgcG9wbCAgICAlZWJ4CiAgICAgcmV0CitFTkQoc3RhdCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc3dhcG9mZi5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zd2Fwb2ZmLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjJkNmRkYgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc3dhcG9mZi5TCkBAIC0wLDAgKzEsMjEgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KKworRU5UUlkoc3dhcG9mZikKKyAgICBwdXNobCAgICVlYngKKyAgICBtb3YgICAgIDgoJWVzcCksICVlYngKKyAgICBtb3ZsICAgICRfX05SX3N3YXBvZmYsICVlYXgKKyAgICBpbnQgICAgICQweDgwCisgICAgY21wbCAgICAkLU1BWF9FUlJOTywgJWVheAorICAgIGpiICAgICAgMWYKKyAgICBuZWdsICAgICVlYXgKKyAgICBwdXNobCAgICVlYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgYWRkbCAgICAkNCwgJWVzcAorICAgIG9ybCAgICAgJC0xLCAlZWF4CisxOgorICAgIHBvcGwgICAgJWVieAorICAgIHJldAorRU5EKHN3YXBvZmYpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3N3YXBvbi5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zd2Fwb24uUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wODYwMmZiCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zd2Fwb24uUwpAQCAtMCwwICsxLDI0IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CisKK0VOVFJZKHN3YXBvbikKKyAgICBwdXNobCAgICVlYngKKyAgICBwdXNobCAgICVlY3gKKyAgICBtb3YgICAgIDEyKCVlc3ApLCAlZWJ4CisgICAgbW92ICAgICAxNiglZXNwKSwgJWVjeAorICAgIG1vdmwgICAgJF9fTlJfc3dhcG9uLCAlZWF4CisgICAgaW50ICAgICAkMHg4MAorICAgIGNtcGwgICAgJC1NQVhfRVJSTk8sICVlYXgKKyAgICBqYiAgICAgIDFmCisgICAgbmVnbCAgICAlZWF4CisgICAgcHVzaGwgICAlZWF4CisgICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGFkZGwgICAgJDQsICVlc3AKKyAgICBvcmwgICAgICQtMSwgJWVheAorMToKKyAgICBwb3BsICAgICVlY3gKKyAgICBwb3BsICAgICVlYngKKyAgICByZXQKK0VORChzd2Fwb24pCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3N5bWxpbmsuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc3ltbGluay5TCmluZGV4IDA0YzQyOTguLjZjMjdkYzEgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc3ltbGluay5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc3ltbGluay5TCkBAIC0xLDE5ICsxLDE2IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCi0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAKLSAgICAudGV4dAotICAgIC50eXBlIHN5bWxpbmssIEBmdW5jdGlvbgotICAgIC5nbG9ibCBzeW1saW5rCi0gICAgLmFsaWduIDQKLQotc3ltbGluazoKK0VOVFJZKHN5bWxpbmspCiAgICAgcHVzaGwgICAlZWJ4CiAgICAgcHVzaGwgICAlZWN4CiAgICAgbW92ICAgICAxMiglZXNwKSwgJWVieAogICAgIG1vdiAgICAgMTYoJWVzcCksICVlY3gKICAgICBtb3ZsICAgICRfX05SX3N5bWxpbmssICVlYXgKICAgICBpbnQgICAgICQweDgwCi0gICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGNtcGwgICAgJC1NQVhfRVJSTk8sICVlYXgKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4CkBAIC0yNCwzICsyMSw0IEBACiAgICAgcG9wbCAgICAlZWN4CiAgICAgcG9wbCAgICAlZWJ4CiAgICAgcmV0CitFTkQoc3ltbGluaykKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc3luYy5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zeW5jLlMKaW5kZXggNWE2YTcyNy4uZDJhNDY5MSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zeW5jLlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zeW5jLlMKQEAgLTEsMTcgKzEsMTQgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KIAotICAgIC50ZXh0Ci0gICAgLnR5cGUgc3luYywgQGZ1bmN0aW9uCi0gICAgLmdsb2JsIHN5bmMKLSAgICAuYWxpZ24gNAotCi1zeW5jOgorRU5UUlkoc3luYykKICAgICBwdXNobCAgICVlYngKICAgICBtb3YgICAgIDgoJWVzcCksICVlYngKICAgICBtb3ZsICAgICRfX05SX3N5bmMsICVlYXgKICAgICBpbnQgICAgICQweDgwCi0gICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGNtcGwgICAgJC1NQVhfRVJSTk8sICVlYXgKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4CkBAIC0yMSwzICsxOCw0IEBACiAxOgogICAgIHBvcGwgICAgJWVieAogICAgIHJldAorRU5EKHN5bmMpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3N5c2luZm8uUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc3lzaW5mby5TCmluZGV4IGM2MGMzN2IuLmIwZmNkMWQgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc3lzaW5mby5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc3lzaW5mby5TCkBAIC0xLDE3ICsxLDE0IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCi0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAKLSAgICAudGV4dAotICAgIC50eXBlIHN5c2luZm8sIEBmdW5jdGlvbgotICAgIC5nbG9ibCBzeXNpbmZvCi0gICAgLmFsaWduIDQKLQotc3lzaW5mbzoKK0VOVFJZKHN5c2luZm8pCiAgICAgcHVzaGwgICAlZWJ4CiAgICAgbW92ICAgICA4KCVlc3ApLCAlZWJ4CiAgICAgbW92bCAgICAkX19OUl9zeXNpbmZvLCAlZWF4CiAgICAgaW50ICAgICAkMHg4MAotICAgIGNtcGwgICAgJC0xMjksICVlYXgKKyAgICBjbXBsICAgICQtTUFYX0VSUk5PLCAlZWF4CiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheApAQCAtMjEsMyArMTgsNCBAQAogMToKICAgICBwb3BsICAgICVlYngKICAgICByZXQKK0VORChzeXNpbmZvKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy90Z2tpbGwuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvdGdraWxsLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWM4ZTdmNgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvdGdraWxsLlMKQEAgLTAsMCArMSwyNyBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgorCitFTlRSWSh0Z2tpbGwpCisgICAgcHVzaGwgICAlZWJ4CisgICAgcHVzaGwgICAlZWN4CisgICAgcHVzaGwgICAlZWR4CisgICAgbW92ICAgICAxNiglZXNwKSwgJWVieAorICAgIG1vdiAgICAgMjAoJWVzcCksICVlY3gKKyAgICBtb3YgICAgIDI0KCVlc3ApLCAlZWR4CisgICAgbW92bCAgICAkX19OUl90Z2tpbGwsICVlYXgKKyAgICBpbnQgICAgICQweDgwCisgICAgY21wbCAgICAkLU1BWF9FUlJOTywgJWVheAorICAgIGpiICAgICAgMWYKKyAgICBuZWdsICAgICVlYXgKKyAgICBwdXNobCAgICVlYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgYWRkbCAgICAkNCwgJWVzcAorICAgIG9ybCAgICAgJC0xLCAlZWF4CisxOgorICAgIHBvcGwgICAgJWVkeAorICAgIHBvcGwgICAgJWVjeAorICAgIHBvcGwgICAgJWVieAorICAgIHJldAorRU5EKHRna2lsbCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvdGltZXJmZF9jcmVhdGUuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvdGltZXJmZF9jcmVhdGUuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MDFmOGE3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy90aW1lcmZkX2NyZWF0ZS5TCkBAIC0wLDAgKzEsMjQgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KKworRU5UUlkodGltZXJmZF9jcmVhdGUpCisgICAgcHVzaGwgICAlZWJ4CisgICAgcHVzaGwgICAlZWN4CisgICAgbW92ICAgICAxMiglZXNwKSwgJWVieAorICAgIG1vdiAgICAgMTYoJWVzcCksICVlY3gKKyAgICBtb3ZsICAgICRfX05SX3RpbWVyZmRfY3JlYXRlLCAlZWF4CisgICAgaW50ICAgICAkMHg4MAorICAgIGNtcGwgICAgJC1NQVhfRVJSTk8sICVlYXgKKyAgICBqYiAgICAgIDFmCisgICAgbmVnbCAgICAlZWF4CisgICAgcHVzaGwgICAlZWF4CisgICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGFkZGwgICAgJDQsICVlc3AKKyAgICBvcmwgICAgICQtMSwgJWVheAorMToKKyAgICBwb3BsICAgICVlY3gKKyAgICBwb3BsICAgICVlYngKKyAgICByZXQKK0VORCh0aW1lcmZkX2NyZWF0ZSkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvdGltZXJmZF9nZXR0aW1lLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3RpbWVyZmRfZ2V0dGltZS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkZTE3YmUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3RpbWVyZmRfZ2V0dGltZS5TCkBAIC0wLDAgKzEsMjQgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KKworRU5UUlkodGltZXJmZF9nZXR0aW1lKQorICAgIHB1c2hsICAgJWVieAorICAgIHB1c2hsICAgJWVjeAorICAgIG1vdiAgICAgMTIoJWVzcCksICVlYngKKyAgICBtb3YgICAgIDE2KCVlc3ApLCAlZWN4CisgICAgbW92bCAgICAkX19OUl90aW1lcmZkX2dldHRpbWUsICVlYXgKKyAgICBpbnQgICAgICQweDgwCisgICAgY21wbCAgICAkLU1BWF9FUlJOTywgJWVheAorICAgIGpiICAgICAgMWYKKyAgICBuZWdsICAgICVlYXgKKyAgICBwdXNobCAgICVlYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgYWRkbCAgICAkNCwgJWVzcAorICAgIG9ybCAgICAgJC0xLCAlZWF4CisxOgorICAgIHBvcGwgICAgJWVjeAorICAgIHBvcGwgICAgJWVieAorICAgIHJldAorRU5EKHRpbWVyZmRfZ2V0dGltZSkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvdGltZXJmZF9zZXR0aW1lLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3RpbWVyZmRfc2V0dGltZS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhNWYzZTQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3RpbWVyZmRfc2V0dGltZS5TCkBAIC0wLDAgKzEsMzAgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KKworRU5UUlkodGltZXJmZF9zZXR0aW1lKQorICAgIHB1c2hsICAgJWVieAorICAgIHB1c2hsICAgJWVjeAorICAgIHB1c2hsICAgJWVkeAorICAgIHB1c2hsICAgJWVzaQorICAgIG1vdiAgICAgMjAoJWVzcCksICVlYngKKyAgICBtb3YgICAgIDI0KCVlc3ApLCAlZWN4CisgICAgbW92ICAgICAyOCglZXNwKSwgJWVkeAorICAgIG1vdiAgICAgMzIoJWVzcCksICVlc2kKKyAgICBtb3ZsICAgICRfX05SX3RpbWVyZmRfc2V0dGltZSwgJWVheAorICAgIGludCAgICAgJDB4ODAKKyAgICBjbXBsICAgICQtTUFYX0VSUk5PLCAlZWF4CisgICAgamIgICAgICAxZgorICAgIG5lZ2wgICAgJWVheAorICAgIHB1c2hsICAgJWVheAorICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBhZGRsICAgICQ0LCAlZXNwCisgICAgb3JsICAgICAkLTEsICVlYXgKKzE6CisgICAgcG9wbCAgICAlZXNpCisgICAgcG9wbCAgICAlZWR4CisgICAgcG9wbCAgICAlZWN4CisgICAgcG9wbCAgICAlZWJ4CisgICAgcmV0CitFTkQodGltZXJmZF9zZXR0aW1lKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy90aW1lcy5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy90aW1lcy5TCmluZGV4IDU0M2YyYmUuLjYyZjMwMzkgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvdGltZXMuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3RpbWVzLlMKQEAgLTEsMTcgKzEsMTQgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KIAotICAgIC50ZXh0Ci0gICAgLnR5cGUgdGltZXMsIEBmdW5jdGlvbgotICAgIC5nbG9ibCB0aW1lcwotICAgIC5hbGlnbiA0Ci0KLXRpbWVzOgorRU5UUlkodGltZXMpCiAgICAgcHVzaGwgICAlZWJ4CiAgICAgbW92ICAgICA4KCVlc3ApLCAlZWJ4CiAgICAgbW92bCAgICAkX19OUl90aW1lcywgJWVheAogICAgIGludCAgICAgJDB4ODAKLSAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgY21wbCAgICAkLU1BWF9FUlJOTywgJWVheAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKQEAgLTIxLDMgKzE4LDQgQEAKIDE6CiAgICAgcG9wbCAgICAlZWJ4CiAgICAgcmV0CitFTkQodGltZXMpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3RraWxsLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3RraWxsLlMKaW5kZXggZjFmMTc0Yi4uMzhhN2E4MCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy90a2lsbC5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvdGtpbGwuUwpAQCAtMSwxOSArMSwxNiBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLwotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogCi0gICAgLnRleHQKLSAgICAudHlwZSB0a2lsbCwgQGZ1bmN0aW9uCi0gICAgLmdsb2JsIHRraWxsCi0gICAgLmFsaWduIDQKLQotdGtpbGw6CitFTlRSWSh0a2lsbCkKICAgICBwdXNobCAgICVlYngKICAgICBwdXNobCAgICVlY3gKICAgICBtb3YgICAgIDEyKCVlc3ApLCAlZWJ4CiAgICAgbW92ICAgICAxNiglZXNwKSwgJWVjeAogICAgIG1vdmwgICAgJF9fTlJfdGtpbGwsICVlYXgKICAgICBpbnQgICAgICQweDgwCi0gICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGNtcGwgICAgJC1NQVhfRVJSTk8sICVlYXgKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4CkBAIC0yNCwzICsyMSw0IEBACiAgICAgcG9wbCAgICAlZWN4CiAgICAgcG9wbCAgICAlZWJ4CiAgICAgcmV0CitFTkQodGtpbGwpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3RydW5jYXRlLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3RydW5jYXRlLlMKaW5kZXggOGM2NjQ2ZC4uYWNlNzEyOCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy90cnVuY2F0ZS5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvdHJ1bmNhdGUuUwpAQCAtMSwxOSArMSwxNiBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLwotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogCi0gICAgLnRleHQKLSAgICAudHlwZSB0cnVuY2F0ZSwgQGZ1bmN0aW9uCi0gICAgLmdsb2JsIHRydW5jYXRlCi0gICAgLmFsaWduIDQKLQotdHJ1bmNhdGU6CitFTlRSWSh0cnVuY2F0ZSkKICAgICBwdXNobCAgICVlYngKICAgICBwdXNobCAgICVlY3gKICAgICBtb3YgICAgIDEyKCVlc3ApLCAlZWJ4CiAgICAgbW92ICAgICAxNiglZXNwKSwgJWVjeAogICAgIG1vdmwgICAgJF9fTlJfdHJ1bmNhdGUsICVlYXgKICAgICBpbnQgICAgICQweDgwCi0gICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGNtcGwgICAgJC1NQVhfRVJSTk8sICVlYXgKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4CkBAIC0yNCwzICsyMSw0IEBACiAgICAgcG9wbCAgICAlZWN4CiAgICAgcG9wbCAgICAlZWJ4CiAgICAgcmV0CitFTkQodHJ1bmNhdGUpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3VtYXNrLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3VtYXNrLlMKaW5kZXggZmUzZDhjZC4uZjIzODk3NSAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy91bWFzay5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvdW1hc2suUwpAQCAtMSwxNyArMSwxNCBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLwotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogCi0gICAgLnRleHQKLSAgICAudHlwZSB1bWFzaywgQGZ1bmN0aW9uCi0gICAgLmdsb2JsIHVtYXNrCi0gICAgLmFsaWduIDQKLQotdW1hc2s6CitFTlRSWSh1bWFzaykKICAgICBwdXNobCAgICVlYngKICAgICBtb3YgICAgIDgoJWVzcCksICVlYngKICAgICBtb3ZsICAgICRfX05SX3VtYXNrLCAlZWF4CiAgICAgaW50ICAgICAkMHg4MAotICAgIGNtcGwgICAgJC0xMjksICVlYXgKKyAgICBjbXBsICAgICQtTUFYX0VSUk5PLCAlZWF4CiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheApAQCAtMjEsMyArMTgsNCBAQAogMToKICAgICBwb3BsICAgICVlYngKICAgICByZXQKK0VORCh1bWFzaykKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvdW1vdW50Mi5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy91bW91bnQyLlMKaW5kZXggZmRiNTM1NC4uM2JjMDRjOCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy91bW91bnQyLlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy91bW91bnQyLlMKQEAgLTEsMTkgKzEsMTYgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KIAotICAgIC50ZXh0Ci0gICAgLnR5cGUgdW1vdW50MiwgQGZ1bmN0aW9uCi0gICAgLmdsb2JsIHVtb3VudDIKLSAgICAuYWxpZ24gNAotCi11bW91bnQyOgorRU5UUlkodW1vdW50MikKICAgICBwdXNobCAgICVlYngKICAgICBwdXNobCAgICVlY3gKICAgICBtb3YgICAgIDEyKCVlc3ApLCAlZWJ4CiAgICAgbW92ICAgICAxNiglZXNwKSwgJWVjeAogICAgIG1vdmwgICAgJF9fTlJfdW1vdW50MiwgJWVheAogICAgIGludCAgICAgJDB4ODAKLSAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgY21wbCAgICAkLU1BWF9FUlJOTywgJWVheAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKQEAgLTI0LDMgKzIxLDQgQEAKICAgICBwb3BsICAgICVlY3gKICAgICBwb3BsICAgICVlYngKICAgICByZXQKK0VORCh1bW91bnQyKQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy91bmFtZS5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy91bmFtZS5TCmluZGV4IGI1ZThiZmEuLjAwYzFhMGMgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvdW5hbWUuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3VuYW1lLlMKQEAgLTEsMTcgKzEsMTQgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KIAotICAgIC50ZXh0Ci0gICAgLnR5cGUgdW5hbWUsIEBmdW5jdGlvbgotICAgIC5nbG9ibCB1bmFtZQotICAgIC5hbGlnbiA0Ci0KLXVuYW1lOgorRU5UUlkodW5hbWUpCiAgICAgcHVzaGwgICAlZWJ4CiAgICAgbW92ICAgICA4KCVlc3ApLCAlZWJ4CiAgICAgbW92bCAgICAkX19OUl91bmFtZSwgJWVheAogICAgIGludCAgICAgJDB4ODAKLSAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgY21wbCAgICAkLU1BWF9FUlJOTywgJWVheAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKQEAgLTIxLDMgKzE4LDQgQEAKIDE6CiAgICAgcG9wbCAgICAlZWJ4CiAgICAgcmV0CitFTkQodW5hbWUpCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3VubGluay5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy91bmxpbmsuUwppbmRleCAwZmU1MmJmLi42MGU3YjQ3IDEwMDY0NAotLS0gYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3VubGluay5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvdW5saW5rLlMKQEAgLTEsMTcgKzEsMTQgQEAKIC8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KIAotICAgIC50ZXh0Ci0gICAgLnR5cGUgdW5saW5rLCBAZnVuY3Rpb24KLSAgICAuZ2xvYmwgdW5saW5rCi0gICAgLmFsaWduIDQKLQotdW5saW5rOgorRU5UUlkodW5saW5rKQogICAgIHB1c2hsICAgJWVieAogICAgIG1vdiAgICAgOCglZXNwKSwgJWVieAogICAgIG1vdmwgICAgJF9fTlJfdW5saW5rLCAlZWF4CiAgICAgaW50ICAgICAkMHg4MAotICAgIGNtcGwgICAgJC0xMjksICVlYXgKKyAgICBjbXBsICAgICQtTUFYX0VSUk5PLCAlZWF4CiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheApAQCAtMjEsMyArMTgsNCBAQAogMToKICAgICBwb3BsICAgICVlYngKICAgICByZXQKK0VORCh1bmxpbmspCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3VubGlua2F0LlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3VubGlua2F0LlMKaW5kZXggZjZmOGMxNy4uMmUxYTA0ZiAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy91bmxpbmthdC5TCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvdW5saW5rYXQuUwpAQCAtMSwxMiArMSw5IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCi0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAKLSAgICAudGV4dAotICAgIC50eXBlIHVubGlua2F0LCBAZnVuY3Rpb24KLSAgICAuZ2xvYmwgdW5saW5rYXQKLSAgICAuYWxpZ24gNAotCi11bmxpbmthdDoKK0VOVFJZKHVubGlua2F0KQogICAgIHB1c2hsICAgJWVieAogICAgIHB1c2hsICAgJWVjeAogICAgIHB1c2hsICAgJWVkeApAQCAtMTUsNyArMTIsNyBAQAogICAgIG1vdiAgICAgMjQoJWVzcCksICVlZHgKICAgICBtb3ZsICAgICRfX05SX3VubGlua2F0LCAlZWF4CiAgICAgaW50ICAgICAkMHg4MAotICAgIGNtcGwgICAgJC0xMjksICVlYXgKKyAgICBjbXBsICAgICQtTUFYX0VSUk5PLCAlZWF4CiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheApAQCAtMjcsMyArMjQsNCBAQAogICAgIHBvcGwgICAgJWVjeAogICAgIHBvcGwgICAgJWVieAogICAgIHJldAorRU5EKHVubGlua2F0KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy91bnNoYXJlLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3Vuc2hhcmUuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNWI5YTQ0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy91bnNoYXJlLlMKQEAgLTAsMCArMSwyMSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgorCitFTlRSWSh1bnNoYXJlKQorICAgIHB1c2hsICAgJWVieAorICAgIG1vdiAgICAgOCglZXNwKSwgJWVieAorICAgIG1vdmwgICAgJF9fTlJfdW5zaGFyZSwgJWVheAorICAgIGludCAgICAgJDB4ODAKKyAgICBjbXBsICAgICQtTUFYX0VSUk5PLCAlZWF4CisgICAgamIgICAgICAxZgorICAgIG5lZ2wgICAgJWVheAorICAgIHB1c2hsICAgJWVheAorICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBhZGRsICAgICQ0LCAlZXNwCisgICAgb3JsICAgICAkLTEsICVlYXgKKzE6CisgICAgcG9wbCAgICAlZWJ4CisgICAgcmV0CitFTkQodW5zaGFyZSkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvdXRpbWVuc2F0LlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3V0aW1lbnNhdC5TCmluZGV4IGUyMDMyYjUuLmFiMzE5MjIgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvdXRpbWVuc2F0LlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy91dGltZW5zYXQuUwpAQCAtMSwxMiArMSw5IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCi0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAKLSAgICAudGV4dAotICAgIC50eXBlIHV0aW1lbnNhdCwgQGZ1bmN0aW9uCi0gICAgLmdsb2JsIHV0aW1lbnNhdAotICAgIC5hbGlnbiA0Ci0KLXV0aW1lbnNhdDoKK0VOVFJZKHV0aW1lbnNhdCkKICAgICBwdXNobCAgICVlYngKICAgICBwdXNobCAgICVlY3gKICAgICBwdXNobCAgICVlZHgKQEAgLTE3LDcgKzE0LDcgQEAKICAgICBtb3YgICAgIDMyKCVlc3ApLCAlZXNpCiAgICAgbW92bCAgICAkX19OUl91dGltZW5zYXQsICVlYXgKICAgICBpbnQgICAgICQweDgwCi0gICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGNtcGwgICAgJC1NQVhfRVJSTk8sICVlYXgKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4CkBAIC0zMCwzICsyNyw0IEBACiAgICAgcG9wbCAgICAlZWN4CiAgICAgcG9wbCAgICAlZWJ4CiAgICAgcmV0CitFTkQodXRpbWVuc2F0KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy91dGltZXMuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvdXRpbWVzLlMKaW5kZXggMWExYjUxZC4uNGNhNGE4ZCAxMDA2NDQKLS0tIGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy91dGltZXMuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3V0aW1lcy5TCkBAIC0xLDE5ICsxLDE2IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCi0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAKLSAgICAudGV4dAotICAgIC50eXBlIHV0aW1lcywgQGZ1bmN0aW9uCi0gICAgLmdsb2JsIHV0aW1lcwotICAgIC5hbGlnbiA0Ci0KLXV0aW1lczoKK0VOVFJZKHV0aW1lcykKICAgICBwdXNobCAgICVlYngKICAgICBwdXNobCAgICVlY3gKICAgICBtb3YgICAgIDEyKCVlc3ApLCAlZWJ4CiAgICAgbW92ICAgICAxNiglZXNwKSwgJWVjeAogICAgIG1vdmwgICAgJF9fTlJfdXRpbWVzLCAlZWF4CiAgICAgaW50ICAgICAkMHg4MAotICAgIGNtcGwgICAgJC0xMjksICVlYXgKKyAgICBjbXBsICAgICQtTUFYX0VSUk5PLCAlZWF4CiAgICAgamIgICAgICAxZgogICAgIG5lZ2wgICAgJWVheAogICAgIHB1c2hsICAgJWVheApAQCAtMjQsMyArMjEsNCBAQAogICAgIHBvcGwgICAgJWVjeAogICAgIHBvcGwgICAgJWVieAogICAgIHJldAorRU5EKHV0aW1lcykKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvd2FpdDQuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvd2FpdDQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZGU3MDRhCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy93YWl0NC5TCkBAIC0wLDAgKzEsMzAgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KKworRU5UUlkod2FpdDQpCisgICAgcHVzaGwgICAlZWJ4CisgICAgcHVzaGwgICAlZWN4CisgICAgcHVzaGwgICAlZWR4CisgICAgcHVzaGwgICAlZXNpCisgICAgbW92ICAgICAyMCglZXNwKSwgJWVieAorICAgIG1vdiAgICAgMjQoJWVzcCksICVlY3gKKyAgICBtb3YgICAgIDI4KCVlc3ApLCAlZWR4CisgICAgbW92ICAgICAzMiglZXNwKSwgJWVzaQorICAgIG1vdmwgICAgJF9fTlJfd2FpdDQsICVlYXgKKyAgICBpbnQgICAgICQweDgwCisgICAgY21wbCAgICAkLU1BWF9FUlJOTywgJWVheAorICAgIGpiICAgICAgMWYKKyAgICBuZWdsICAgICVlYXgKKyAgICBwdXNobCAgICVlYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgYWRkbCAgICAkNCwgJWVzcAorICAgIG9ybCAgICAgJC0xLCAlZWF4CisxOgorICAgIHBvcGwgICAgJWVzaQorICAgIHBvcGwgICAgJWVkeAorICAgIHBvcGwgICAgJWVjeAorICAgIHBvcGwgICAgJWVieAorICAgIHJldAorRU5EKHdhaXQ0KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy93cml0ZS5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy93cml0ZS5TCmluZGV4IGNhYTQ1MGYuLjExZDBjNzIgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvd3JpdGUuUworKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3dyaXRlLlMKQEAgLTEsMTIgKzEsOSBAQAogLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLwotI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+CisjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogCi0gICAgLnRleHQKLSAgICAudHlwZSB3cml0ZSwgQGZ1bmN0aW9uCi0gICAgLmdsb2JsIHdyaXRlCi0gICAgLmFsaWduIDQKLQotd3JpdGU6CitFTlRSWSh3cml0ZSkKICAgICBwdXNobCAgICVlYngKICAgICBwdXNobCAgICVlY3gKICAgICBwdXNobCAgICVlZHgKQEAgLTE1LDcgKzEyLDcgQEAKICAgICBtb3YgICAgIDI0KCVlc3ApLCAlZWR4CiAgICAgbW92bCAgICAkX19OUl93cml0ZSwgJWVheAogICAgIGludCAgICAgJDB4ODAKLSAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgY21wbCAgICAkLU1BWF9FUlJOTywgJWVheAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICVlYXgKICAgICBwdXNobCAgICVlYXgKQEAgLTI3LDMgKzI0LDQgQEAKICAgICBwb3BsICAgICVlY3gKICAgICBwb3BsICAgICVlYngKICAgICByZXQKK0VORCh3cml0ZSkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvd3JpdGV2LlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3dyaXRldi5TCmluZGV4IDUzZDM3MzEuLmExNThhMTQgMTAwNjQ0Ci0tLSBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvd3JpdGV2LlMKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy93cml0ZXYuUwpAQCAtMSwxMiArMSw5IEBACiAvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCi0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAKLSAgICAudGV4dAotICAgIC50eXBlIHdyaXRldiwgQGZ1bmN0aW9uCi0gICAgLmdsb2JsIHdyaXRldgotICAgIC5hbGlnbiA0Ci0KLXdyaXRldjoKK0VOVFJZKHdyaXRldikKICAgICBwdXNobCAgICVlYngKICAgICBwdXNobCAgICVlY3gKICAgICBwdXNobCAgICVlZHgKQEAgLTE1LDcgKzEyLDcgQEAKICAgICBtb3YgICAgIDI0KCVlc3ApLCAlZWR4CiAgICAgbW92bCAgICAkX19OUl93cml0ZXYsICVlYXgKICAgICBpbnQgICAgICQweDgwCi0gICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGNtcGwgICAgJC1NQVhfRVJSTk8sICVlYXgKICAgICBqYiAgICAgIDFmCiAgICAgbmVnbCAgICAlZWF4CiAgICAgcHVzaGwgICAlZWF4CkBAIC0yNywzICsyNCw0IEBACiAgICAgcG9wbCAgICAlZWN4CiAgICAgcG9wbCAgICAlZWJ4CiAgICAgcmV0CitFTkQod3JpdGV2KQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni94ODYubWsgYi9saWJjL2FyY2gteDg2L3g4Ni5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOWMxNDAyCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni94ODYubWsKQEAgLTAsMCArMSw4OCBAQAorX0xJQkNfQVJDSF9DT01NT05fU1JDX0ZJTEVTIDo9IFwKKyAgICBhcmNoLXg4Ni9iaW9uaWMvY2xvbmUuUyBcCisgICAgYXJjaC14ODYvYmlvbmljL19leGl0X3dpdGhfc3RhY2tfdGVhcmRvd24uUyBcCisgICAgYXJjaC14ODYvYmlvbmljL2Z1dGV4X3g4Ni5TIFwKKyAgICBhcmNoLXg4Ni9iaW9uaWMvX19nZXRfc3AuUyBcCisgICAgYXJjaC14ODYvYmlvbmljL19fZ2V0X3Rscy5jIFwKKyAgICBhcmNoLXg4Ni9iaW9uaWMvX3NldGptcC5TIFwKKyAgICBhcmNoLXg4Ni9iaW9uaWMvc2V0am1wLlMgXAorICAgIGFyY2gteDg2L2Jpb25pYy9fX3NldF90bHMuYyBcCisgICAgYXJjaC14ODYvYmlvbmljL3NpZ3NldGptcC5TIFwKKyAgICBhcmNoLXg4Ni9iaW9uaWMvc3lzY2FsbC5TIFwKKyAgICBhcmNoLXg4Ni9iaW9uaWMvdmZvcmsuUyBcCisgICAgYXJjaC14ODYvc3RyaW5nL2Zmcy5TCisKK2lmZXEgKCQoQVJDSF9YODZfSEFWRV9TU1NFMyksdHJ1ZSkKK19MSUJDX0FSQ0hfQ09NTU9OX1NSQ19GSUxFUyArPSBcCisJYXJjaC14ODYvc3RyaW5nL3Nzc2UzLW1lbWNweS1hdG9tLlMgXAorCWFyY2gteDg2L3N0cmluZy9zc3NlMy1tZW1tb3ZlLWF0b20uUyBcCisJYXJjaC14ODYvc3RyaW5nL3Nzc2UzLWJjb3B5LWF0b20uUyBcCisJYXJjaC14ODYvc3RyaW5nL3Nzc2UzLXN0cm5jYXQtYXRvbS5TIFwKKwlhcmNoLXg4Ni9zdHJpbmcvc3NzZTMtc3RybmNweS1hdG9tLlMgXAorCWFyY2gteDg2L3N0cmluZy9zc3NlMy1zdHJsY2F0LWF0b20uUyBcCisJYXJjaC14ODYvc3RyaW5nL3Nzc2UzLXN0cmxjcHktYXRvbS5TIFwKKwlhcmNoLXg4Ni9zdHJpbmcvc3NzZTMtc3RyY21wLWF0b20uUyBcCisJYXJjaC14ODYvc3RyaW5nL3Nzc2UzLXN0cm5jbXAtYXRvbS5TIFwKKwlhcmNoLXg4Ni9zdHJpbmcvc3NzZTMtc3RyY2F0LWF0b20uUyBcCisJYXJjaC14ODYvc3RyaW5nL3Nzc2UzLXN0cmNweS1hdG9tLlMgXAorCWFyY2gteDg2L3N0cmluZy9zc3NlMy1tZW1jbXAtYXRvbS5TIFwKKwlhcmNoLXg4Ni9zdHJpbmcvc3NzZTMtd21lbWNtcC1hdG9tLlMgXAorCWFyY2gteDg2L3N0cmluZy9zc3NlMy1tZW1jbXAxNi1hdG9tLlMgXAorCWFyY2gteDg2L3N0cmluZy9zc3NlMy13Y3NjYXQtYXRvbS5TIFwKKwlhcmNoLXg4Ni9zdHJpbmcvc3NzZTMtd2NzY3B5LWF0b20uUworZWxzZQorX0xJQkNfQVJDSF9DT01NT05fU1JDX0ZJTEVTICs9IFwKKwlhcmNoLXg4Ni9zdHJpbmcvbWVtY3B5LlMgXAorCWFyY2gteDg2L3N0cmluZy9tZW1tb3ZlLlMgXAorCWFyY2gteDg2L3N0cmluZy9iY29weS5TIFwKKwlhcmNoLXg4Ni9zdHJpbmcvc3RyY21wLlMgXAorCWFyY2gteDg2L3N0cmluZy9zdHJuY21wLlMgXAorCWFyY2gteDg2L3N0cmluZy9zdHJjYXQuUyBcCisJYXJjaC14ODYvc3RyaW5nL21lbWNtcC5TIFwKKwlzdHJpbmcvbWVtY21wMTYuYyBcCisJc3RyaW5nL3N0cmNweS5jIFwKKwlzdHJpbmcvc3RybmNhdC5jIFwKKwlzdHJpbmcvc3RybmNweS5jIFwKKwlzdHJpbmcvc3RybGNhdC5jIFwKKwlzdHJpbmcvc3RybGNweS5jIFwKKwl1cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0cmluZy93Y3NjcHkuYyBcCisJdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdHJpbmcvd2NzY2F0LmMgXAorCXVwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RyaW5nL3dtZW1jbXAuYworZW5kaWYKKworaWZlcSAoJChBUkNIX1g4Nl9IQVZFX1NTRTIpLHRydWUpCitfTElCQ19BUkNIX0NPTU1PTl9TUkNfRklMRVMgKz0gXAorCWFyY2gteDg2L3N0cmluZy9zc2UyLW1lbXNldC1hdG9tLlMgXAorCWFyY2gteDg2L3N0cmluZy9zc2UyLWJ6ZXJvLWF0b20uUyBcCisJYXJjaC14ODYvc3RyaW5nL3NzZTItbWVtY2hyLWF0b20uUyBcCisJYXJjaC14ODYvc3RyaW5nL3NzZTItbWVtcmNoci1hdG9tLlMgXAorCWFyY2gteDg2L3N0cmluZy9zc2UyLXN0cmNoci1hdG9tLlMgXAorCWFyY2gteDg2L3N0cmluZy9zc2UyLXN0cnJjaHItYXRvbS5TIFwKKwlhcmNoLXg4Ni9zdHJpbmcvc3NlMi1pbmRleC1hdG9tLlMgXAorCWFyY2gteDg2L3N0cmluZy9zc2UyLXN0cmxlbi1hdG9tLlMgXAorCWFyY2gteDg2L3N0cmluZy9zc2UyLXN0cm5sZW4tYXRvbS5TIFwKKwlhcmNoLXg4Ni9zdHJpbmcvc3NlMi13Y3NjaHItYXRvbS5TIFwKKwlhcmNoLXg4Ni9zdHJpbmcvc3NlMi13Y3NyY2hyLWF0b20uUyBcCisJYXJjaC14ODYvc3RyaW5nL3NzZTItd2NzbGVuLWF0b20uUyBcCisJYXJjaC14ODYvc3RyaW5nL3NzZTItd2NzY21wLWF0b20uUworZWxzZQorX0xJQkNfQVJDSF9DT01NT05fU1JDX0ZJTEVTICs9IFwKKwlhcmNoLXg4Ni9zdHJpbmcvbWVtc2V0LlMgXAorCWFyY2gteDg2L3N0cmluZy9zdHJsZW4uUyBcCisJYXJjaC14ODYvc3RyaW5nL2J6ZXJvLlMgXAorCWJpb25pYy9tZW1yY2hyLmMgXAorCWJpb25pYy9tZW1jaHIuYyBcCisJc3RyaW5nL3N0cmNoci5jcHAgXAorCXN0cmluZy9zdHJyY2hyLmMgXAorCXN0cmluZy9pbmRleC5jIFwKKwliaW9uaWMvc3Rybmxlbi5jIFwKKwl1cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0cmluZy93Y3NjaHIuYyBcCisJdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdHJpbmcvd2NzcmNoci5jIFwKKwl1cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0cmluZy93Y3NsZW4uYyBcCisJdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdHJpbmcvd2NzY21wLmMKK2VuZGlmCisKK19MSUJDX0FSQ0hfU1RBVElDX1NSQ19GSUxFUyA6PSBcCisgICAgYmlvbmljL2RsX2l0ZXJhdGVfcGhkcl9zdGF0aWMuYyBcCisKK19MSUJDX0FSQ0hfRFlOQU1JQ19TUkNfRklMRVMgOj0KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL19fZmdldHNfY2hrLmNwcCBiL2xpYmMvYmlvbmljL19fZmdldHNfY2hrLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MjllZGE1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9iaW9uaWMvX19mZ2V0c19jaGsuY3BwCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSAibGliY19sb2dnaW5nLmgiCisKKy8qCisgKiBfX2ZnZXRzX2Noay4gQ2FsbGVkIGluIHBsYWNlIG9mIGZnZXRzKCkgd2hlbiB3ZSBrbm93IHRoZQorICogc2l6ZSBvZiB0aGUgYnVmZmVyIHdlJ3JlIHdyaXRpbmcgaW50by4KKyAqCisgKiBTZWUKKyAqICAgaHR0cDovL2djYy5nbnUub3JnL29ubGluZWRvY3MvZ2NjL09iamVjdC1TaXplLUNoZWNraW5nLmh0bWwKKyAqIGZvciBkZXRhaWxzLgorICoKKyAqIFRoaXMgZmdldHMgY2hlY2sgaXMgY2FsbGVkIGlmIF9GT1JUSUZZX1NPVVJDRSBpcyBkZWZpbmVkIGFuZAorICogZ3JlYXRlciB0aGFuIDAuCisgKi8KK2V4dGVybiAiQyIgY2hhciAqX19mZ2V0c19jaGsoY2hhciAqZGVzdCwgaW50IHN1cHBsaWVkX3NpemUsCisgICAgICAgICAgICAgICAgICBGSUxFICpzdHJlYW0sIHNpemVfdCBkZXN0X2xlbl9mcm9tX2NvbXBpbGVyKQoreworICAgIGlmIChzdXBwbGllZF9zaXplIDwgMCkgeworICAgICAgICBfX2ZvcnRpZnlfY2hrX2ZhaWwoImZnZXRzIGJ1ZmZlciBzaXplIGxlc3MgdGhhbiAwIiwgMCk7CisgICAgfQorCisgICAgaWYgKCgoc2l6ZV90KSBzdXBwbGllZF9zaXplKSA+IGRlc3RfbGVuX2Zyb21fY29tcGlsZXIpIHsKKyAgICAgICAgX19mb3J0aWZ5X2Noa19mYWlsKCJmZ2V0cyBidWZmZXIgb3ZlcmZsb3ciLCAwKTsKKyAgICB9CisKKyAgICByZXR1cm4gZmdldHMoZGVzdCwgc3VwcGxpZWRfc2l6ZSwgc3RyZWFtKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL19fbWVtY3B5X2Noay5jcHAgYi9saWJjL2Jpb25pYy9fX21lbWNweV9jaGsuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzZDc0NGMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2Jpb25pYy9fX21lbWNweV9jaGsuY3BwCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI3VuZGVmIF9GT1JUSUZZX1NPVVJDRQorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgImxpYmNfbG9nZ2luZy5oIgorCisvKgorICogUnVudGltZSBpbXBsZW1lbnRhdGlvbiBvZiBfX21lbWNweV9jaGsuCisgKgorICogU2VlCisgKiAgIGh0dHA6Ly9nY2MuZ251Lm9yZy9vbmxpbmVkb2NzL2djYy9PYmplY3QtU2l6ZS1DaGVja2luZy5odG1sCisgKiAgIGh0dHA6Ly9nY2MuZ251Lm9yZy9tbC9nY2MtcGF0Y2hlcy8yMDA0LTA5L21zZzAyMDU1Lmh0bWwKKyAqIGZvciBkZXRhaWxzLgorICoKKyAqIFRoaXMgbWVtY3B5IGNoZWNrIGlzIGNhbGxlZCBpZiBfRk9SVElGWV9TT1VSQ0UgaXMgZGVmaW5lZCBhbmQKKyAqIGdyZWF0ZXIgdGhhbiAwLgorICovCitleHRlcm4gIkMiIHZvaWQgKl9fbWVtY3B5X2Noayh2b2lkICpkZXN0LCBjb25zdCB2b2lkICpzcmMsCisgICAgICAgICAgICAgIHNpemVfdCBjb3B5X2Ftb3VudCwgc2l6ZV90IGRlc3RfbGVuKQoreworICAgIGlmIChfX3ByZWRpY3RfZmFsc2UoY29weV9hbW91bnQgPiBkZXN0X2xlbikpIHsKKyAgICAgICAgX19mb3J0aWZ5X2Noa19mYWlsKCJtZW1jcHkgYnVmZmVyIG92ZXJmbG93IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQklPTklDX0VWRU5UX01FTUNQWV9CVUZGRVJfT1ZFUkZMT1cpOworICAgIH0KKworICAgIHJldHVybiBtZW1jcHkoZGVzdCwgc3JjLCBjb3B5X2Ftb3VudCk7Cit9CmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9fX21lbW1vdmVfY2hrLmNwcCBiL2xpYmMvYmlvbmljL19fbWVtbW92ZV9jaGsuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5YTA1OTcKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2Jpb25pYy9fX21lbW1vdmVfY2hrLmNwcApAQCAtMCwwICsxLDUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlICJsaWJjX2xvZ2dpbmcuaCIKKworLyoKKyAqIFJ1bnRpbWUgaW1wbGVtZW50YXRpb24gb2YgX19idWlsdGluX19fX21lbW1vdmVfY2hrLgorICoKKyAqIFNlZQorICogICBodHRwOi8vZ2NjLmdudS5vcmcvb25saW5lZG9jcy9nY2MvT2JqZWN0LVNpemUtQ2hlY2tpbmcuaHRtbAorICogICBodHRwOi8vZ2NjLmdudS5vcmcvbWwvZ2NjLXBhdGNoZXMvMjAwNC0wOS9tc2cwMjA1NS5odG1sCisgKiBmb3IgZGV0YWlscy4KKyAqCisgKiBUaGlzIG1lbW1vdmUgY2hlY2sgaXMgY2FsbGVkIGlmIF9GT1JUSUZZX1NPVVJDRSBpcyBkZWZpbmVkIGFuZAorICogZ3JlYXRlciB0aGFuIDAuCisgKi8KK2V4dGVybiAiQyIgdm9pZCAqX19tZW1tb3ZlX2NoayAodm9pZCAqZGVzdCwgY29uc3Qgdm9pZCAqc3JjLAorICAgICAgICAgICAgICBzaXplX3QgbGVuLCBzaXplX3QgZGVzdF9sZW4pCit7CisgICAgaWYgKF9fcHJlZGljdF9mYWxzZShsZW4gPiBkZXN0X2xlbikpIHsKKyAgICAgICAgX19mb3J0aWZ5X2Noa19mYWlsKCJtZW1tb3ZlIGJ1ZmZlciBvdmVyZmxvdyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJJT05JQ19FVkVOVF9NRU1NT1ZFX0JVRkZFUl9PVkVSRkxPVyk7CisgICAgfQorCisgICAgcmV0dXJuIG1lbW1vdmUoZGVzdCwgc3JjLCBsZW4pOworfQpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvX19tZW1zZXRfY2hrLmNwcCBiL2xpYmMvYmlvbmljL19fbWVtc2V0X2Noay5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjdhNWYyNAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYmlvbmljL19fbWVtc2V0X2Noay5jcHAKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSAibGliY19sb2dnaW5nLmgiCisKKy8qCisgKiBSdW50aW1lIGltcGxlbWVudGF0aW9uIG9mIF9fYnVpbHRpbl9fX19tZW1zZXRfY2hrLgorICoKKyAqIFNlZQorICogICBodHRwOi8vZ2NjLmdudS5vcmcvb25saW5lZG9jcy9nY2MvT2JqZWN0LVNpemUtQ2hlY2tpbmcuaHRtbAorICogICBodHRwOi8vZ2NjLmdudS5vcmcvbWwvZ2NjLXBhdGNoZXMvMjAwNC0wOS9tc2cwMjA1NS5odG1sCisgKiBmb3IgZGV0YWlscy4KKyAqCisgKiBUaGlzIG1lbXNldCBjaGVjayBpcyBjYWxsZWQgaWYgX0ZPUlRJRllfU09VUkNFIGlzIGRlZmluZWQgYW5kCisgKiBncmVhdGVyIHRoYW4gMC4KKyAqLworZXh0ZXJuICJDIiB2b2lkICpfX21lbXNldF9jaGsgKHZvaWQgKmRlc3QsIGludCBjLCBzaXplX3Qgbiwgc2l6ZV90IGRlc3RfbGVuKSB7CisgICAgaWYgKF9fcHJlZGljdF9mYWxzZShuID4gZGVzdF9sZW4pKSB7CisgICAgICAgIF9fZm9ydGlmeV9jaGtfZmFpbCgibWVtc2V0IGJ1ZmZlciBvdmVyZmxvdyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJJT05JQ19FVkVOVF9NRU1TRVRfQlVGRkVSX09WRVJGTE9XKTsKKyAgICB9CisKKyAgICByZXR1cm4gbWVtc2V0KGRlc3QsIGMsIG4pOworfQpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvX19zZXRfZXJybm8uYyBiL2xpYmMvYmlvbmljL19fc2V0X2Vycm5vLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE2M2Q0MDQuLjAwMDAwMDAKLS0tIGEvbGliYy9iaW9uaWMvX19zZXRfZXJybm8uYworKysgL2Rldi9udWxsCkBAIC0xLDU2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0gKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiAgICBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCi0gKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQotICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAotICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKLSAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUwotICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECi0gKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0gKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgPGVycm5vLmg+Ci0KLQotaW50IF9fc2V0X2Vycm5vKGludCBuKQotewotICAgIGVycm5vID0gbjsKLSAgICByZXR1cm4gLTE7Ci19Ci0KLS8qCi0gKiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIHN5c2NhbGwgc3R1YnMsCi0gKiAodGFpbC1jYWxsZWQgaW4gdGhlIGNhc2Ugb2YgMC00IGFyZyB2ZXJzaW9ucykKLSAqLwotCi1fX0xJQkNfSElEREVOX18KLWludCBfX3NldF9zeXNjYWxsX2Vycm5vKGludCBuKQotewotICAgICAgICAvKiBzb21lIHN5c2NhbGxzLCBtbWFwKCkgZm9yIGV4YW1wbGUsIGhhdmUgdmFsaWQgcmV0dXJuCi0gICAgICAgICoqIHZhbHVlcyB0aGF0IGFyZSAibmVnYXRpdmUiLiAgU2luY2UgZXJybm8gdmFsdWVzIGFyZSBub3QKLSAgICAgICAgKiogZ3JlYXRlciB0aGFuIDEzMSBvbiBMaW51eCwgd2Ugd2lsbCBqdXN0IGNvbnNpZGVyIAotICAgICAgICAqKiBhbnl0aGluZyBzaWduaWZpY2FudGx5IG91dCBvZiByYW5nZSBhcyBub3QtYW4tZXJyb3IKLSAgICAgICAgKi8KLSAgICBpZihuID4gLTI1NikgewotICAgICAgICByZXR1cm4gX19zZXRfZXJybm8oLW4pOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHJldHVybiBuOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL19fc2V0X2Vycm5vLmNwcCBiL2xpYmMvYmlvbmljL19fc2V0X2Vycm5vLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZjZhNjhlCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9iaW9uaWMvX19zZXRfZXJybm8uY3BwCkBAIC0wLDAgKzEsMzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPGVycm5vLmg+CisKKy8vIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gb3VyIGFzc2VtYmxlciBzeXNjYWxsIHN0dWJzLgorLy8gQy9DKysgY29kZSBzaG91bGQganVzdCBhc3NpZ24gJ2Vycm5vJyBpbnN0ZWFkLgorCisvLyBUT0RPOiB0aGlzIHNob3VsZCBiZSBfX0xJQkNfSElEREVOX18gYnV0IHdhcyBleHBvc2VkIGluIDxlcnJuby5oPiBpbiB0aGUgTkRLLgorZXh0ZXJuICJDIiBpbnQgX19zZXRfZXJybm8oaW50IG4pIHsKKyAgZXJybm8gPSBuOworICByZXR1cm4gLTE7Cit9CmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9fX3N0YWNrX2Noa19mYWlsLmNwcCBiL2xpYmMvYmlvbmljL19fc3RhY2tfY2hrX2ZhaWwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiOWVkNWUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2Jpb25pYy9fX3N0YWNrX2Noa19mYWlsLmNwcApAQCAtMCwwICsxLDM2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworI2luY2x1ZGUgImJpb25pY19zc3AuaCIKKyNpbmNsdWRlICJsaWJjX2xvZ2dpbmcuaCIKKwordm9pZCBfX3N0YWNrX2Noa19mYWlsKCkgeworICBfX2xpYmNfZmF0YWwoInN0YWNrIGNvcnJ1cHRpb24gZGV0ZWN0ZWQiKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL19fc3RyY2F0X2Noay5jcHAgYi9saWJjL2Jpb25pYy9fX3N0cmNhdF9jaGsuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwYjMyNTkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2Jpb25pYy9fX3N0cmNhdF9jaGsuY3BwCkBAIC0wLDAgKzEsNjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgImxpYmNfbG9nZ2luZy5oIgorCisvKgorICogUnVudGltZSBpbXBsZW1lbnRhdGlvbiBvZiBfX2J1aWx0aW5fX19fc3RyY2F0X2Noay4KKyAqCisgKiBTZWUKKyAqICAgaHR0cDovL2djYy5nbnUub3JnL29ubGluZWRvY3MvZ2NjL09iamVjdC1TaXplLUNoZWNraW5nLmh0bWwKKyAqICAgaHR0cDovL2djYy5nbnUub3JnL21sL2djYy1wYXRjaGVzLzIwMDQtMDkvbXNnMDIwNTUuaHRtbAorICogZm9yIGRldGFpbHMuCisgKgorICogVGhpcyBzdHJjYXQgY2hlY2sgaXMgY2FsbGVkIGlmIF9GT1JUSUZZX1NPVVJDRSBpcyBkZWZpbmVkIGFuZAorICogZ3JlYXRlciB0aGFuIDAuCisgKi8KK2V4dGVybiAiQyIgY2hhciogX19zdHJjYXRfY2hrKAorICAgICAgICBjaGFyKiBfX3Jlc3RyaWN0IGRlc3QsCisgICAgICAgIGNvbnN0IGNoYXIqIF9fcmVzdHJpY3Qgc3JjLAorICAgICAgICBzaXplX3QgZGVzdF9idWZfc2l6ZSkKK3sKKyAgICBjaGFyKiBzYXZlID0gZGVzdDsKKyAgICBzaXplX3QgZGVzdF9sZW4gPSBfX3N0cmxlbl9jaGsoZGVzdCwgZGVzdF9idWZfc2l6ZSk7CisKKyAgICBkZXN0ICs9IGRlc3RfbGVuOworICAgIGRlc3RfYnVmX3NpemUgLT0gZGVzdF9sZW47CisKKyAgICB3aGlsZSAoKCpkZXN0KysgPSAqc3JjKyspICE9ICdcMCcpIHsKKyAgICAgICAgZGVzdF9idWZfc2l6ZS0tOworICAgICAgICBpZiAoX19wcmVkaWN0X2ZhbHNlKGRlc3RfYnVmX3NpemUgPT0gMCkpIHsKKyAgICAgICAgICAgIF9fZm9ydGlmeV9jaGtfZmFpbCgic3RyY2F0IGJ1ZmZlciBvdmVyZmxvdyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQklPTklDX0VWRU5UX1NUUkNBVF9CVUZGRVJfT1ZFUkZMT1cpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHNhdmU7Cit9CmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9fX3N0cmNocl9jaGsuY3BwIGIvbGliYy9iaW9uaWMvX19zdHJjaHJfY2hrLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MjU1OWJjCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9iaW9uaWMvX19zdHJjaHJfY2hrLmNwcApAQCAtMCwwICsxLDQ2IEBACisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5MCBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgImxpYmNfbG9nZ2luZy5oIgorCitleHRlcm4gIkMiIGNoYXIqIF9fc3RyY2hyX2Noayhjb25zdCBjaGFyKiBwLCBpbnQgY2gsIHNpemVfdCBzX2xlbikgeworICBmb3IgKDs7ICsrcCwgc19sZW4tLSkgeworICAgIGlmIChfX3ByZWRpY3RfZmFsc2Uoc19sZW4gPT0gMCkpIHsKKyAgICAgIF9fZm9ydGlmeV9jaGtfZmFpbCgicmVhZCBiZXlvbmQgYnVmZmVyIiwgMCk7CisgICAgfQorICAgIGlmICgqcCA9PSBzdGF0aWNfY2FzdDxjaGFyPihjaCkpIHsKKyAgICAgIHJldHVybiBjb25zdF9jYXN0PGNoYXIqPihwKTsKKyAgICB9CisgICAgaWYgKCpwID09ICdcMCcpIHsKKyAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgfQorICAvKiBOT1RSRUFDSEVEICovCit9CmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9fX3N0cmNweV9jaGsuY3BwIGIvbGliYy9iaW9uaWMvX19zdHJjcHlfY2hrLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YWEwZTkzCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9iaW9uaWMvX19zdHJjcHlfY2hrLmNwcApAQCAtMCwwICsxLDUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlICJsaWJjX2xvZ2dpbmcuaCIKKworLyoKKyAqIFJ1bnRpbWUgaW1wbGVtZW50YXRpb24gb2YgX19idWlsdGluX19fX3N0cmNweV9jaGsuCisgKgorICogU2VlCisgKiAgIGh0dHA6Ly9nY2MuZ251Lm9yZy9vbmxpbmVkb2NzL2djYy9PYmplY3QtU2l6ZS1DaGVja2luZy5odG1sCisgKiAgIGh0dHA6Ly9nY2MuZ251Lm9yZy9tbC9nY2MtcGF0Y2hlcy8yMDA0LTA5L21zZzAyMDU1Lmh0bWwKKyAqIGZvciBkZXRhaWxzLgorICoKKyAqIFRoaXMgc3RyY3B5IGNoZWNrIGlzIGNhbGxlZCBpZiBfRk9SVElGWV9TT1VSQ0UgaXMgZGVmaW5lZCBhbmQKKyAqIGdyZWF0ZXIgdGhhbiAwLgorICovCitleHRlcm4gIkMiIGNoYXIgKl9fc3RyY3B5X2NoayAoY2hhciAqZGVzdCwgY29uc3QgY2hhciAqc3JjLCBzaXplX3QgZGVzdF9sZW4pIHsKKyAgICAvLyBUT0RPOiBvcHRpbWl6ZSBzbyB3ZSBkb24ndCBzY2FuIHNyYyB0d2ljZS4KKyAgICBzaXplX3Qgc3JjX2xlbiA9IHN0cmxlbihzcmMpICsgMTsKKyAgICBpZiAoX19wcmVkaWN0X2ZhbHNlKHNyY19sZW4gPiBkZXN0X2xlbikpIHsKKyAgICAgICAgX19mb3J0aWZ5X2Noa19mYWlsKCJzdHJjcHkgYnVmZmVyIG92ZXJmbG93IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQklPTklDX0VWRU5UX1NUUkNQWV9CVUZGRVJfT1ZFUkZMT1cpOworICAgIH0KKworICAgIHJldHVybiBzdHJjcHkoZGVzdCwgc3JjKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL19fc3RybGNhdF9jaGsuY3BwIGIvbGliYy9iaW9uaWMvX19zdHJsY2F0X2Noay5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjVjNjdhZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYmlvbmljL19fc3RybGNhdF9jaGsuY3BwCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgImxpYmNfbG9nZ2luZy5oIgorCisvKgorICogX19zdHJsY2F0X2Noay4gQ2FsbGVkIGluIHBsYWNlIG9mIHN0cmxjYXQoKSB3aGVuIHdlIGtub3cgdGhlCisgKiBzaXplIG9mIHRoZSBidWZmZXIgd2UncmUgd3JpdGluZyBpbnRvLgorICoKKyAqIFNlZQorICogICBodHRwOi8vZ2NjLmdudS5vcmcvb25saW5lZG9jcy9nY2MvT2JqZWN0LVNpemUtQ2hlY2tpbmcuaHRtbAorICogICBodHRwOi8vZ2NjLmdudS5vcmcvbWwvZ2NjLXBhdGNoZXMvMjAwNC0wOS9tc2cwMjA1NS5odG1sCisgKiBmb3IgZGV0YWlscy4KKyAqCisgKiBUaGlzIHN0cmxjYXQgY2hlY2sgaXMgY2FsbGVkIGlmIF9GT1JUSUZZX1NPVVJDRSBpcyBkZWZpbmVkIGFuZAorICogZ3JlYXRlciB0aGFuIDAuCisgKi8KK2V4dGVybiAiQyIgc2l6ZV90IF9fc3RybGNhdF9jaGsoY2hhciAqZGVzdCwgY29uc3QgY2hhciAqc3JjLAorICAgICAgICAgICAgICBzaXplX3Qgc3VwcGxpZWRfc2l6ZSwgc2l6ZV90IGRlc3RfbGVuX2Zyb21fY29tcGlsZXIpCit7CisgICAgaWYgKF9fcHJlZGljdF9mYWxzZShzdXBwbGllZF9zaXplID4gZGVzdF9sZW5fZnJvbV9jb21waWxlcikpIHsKKyAgICAgICAgX19mb3J0aWZ5X2Noa19mYWlsKCJzdHJsY2F0IGJ1ZmZlciBvdmVyZmxvdyIsIDApOworICAgIH0KKworICAgIHJldHVybiBzdHJsY2F0KGRlc3QsIHNyYywgc3VwcGxpZWRfc2l6ZSk7Cit9CmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9fX3N0cmxjcHlfY2hrLmNwcCBiL2xpYmMvYmlvbmljL19fc3RybGNweV9jaGsuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2YjExZmMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2Jpb25pYy9fX3N0cmxjcHlfY2hrLmNwcApAQCAtMCwwICsxLDUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlICJsaWJjX2xvZ2dpbmcuaCIKKworLyoKKyAqIF9fc3RybGNweV9jaGsuIENhbGxlZCBpbiBwbGFjZSBvZiBzdHJsY3B5KCkgd2hlbiB3ZSBrbm93IHRoZQorICogc2l6ZSBvZiB0aGUgYnVmZmVyIHdlJ3JlIHdyaXRpbmcgaW50by4KKyAqCisgKiBTZWUKKyAqICAgaHR0cDovL2djYy5nbnUub3JnL29ubGluZWRvY3MvZ2NjL09iamVjdC1TaXplLUNoZWNraW5nLmh0bWwKKyAqICAgaHR0cDovL2djYy5nbnUub3JnL21sL2djYy1wYXRjaGVzLzIwMDQtMDkvbXNnMDIwNTUuaHRtbAorICogZm9yIGRldGFpbHMuCisgKgorICogVGhpcyBzdHJsY3B5IGNoZWNrIGlzIGNhbGxlZCBpZiBfRk9SVElGWV9TT1VSQ0UgaXMgZGVmaW5lZCBhbmQKKyAqIGdyZWF0ZXIgdGhhbiAwLgorICovCitleHRlcm4gIkMiIHNpemVfdCBfX3N0cmxjcHlfY2hrKGNoYXIgKmRlc3QsIGNvbnN0IGNoYXIgKnNyYywKKyAgICAgICAgICAgICAgc2l6ZV90IHN1cHBsaWVkX3NpemUsIHNpemVfdCBkZXN0X2xlbl9mcm9tX2NvbXBpbGVyKQoreworICAgIGlmIChfX3ByZWRpY3RfZmFsc2Uoc3VwcGxpZWRfc2l6ZSA+IGRlc3RfbGVuX2Zyb21fY29tcGlsZXIpKSB7CisgICAgICAgIF9fZm9ydGlmeV9jaGtfZmFpbCgic3RybGNweSBidWZmZXIgb3ZlcmZsb3ciLCAwKTsKKyAgICB9CisKKyAgICByZXR1cm4gc3RybGNweShkZXN0LCBzcmMsIHN1cHBsaWVkX3NpemUpOworfQpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvX19zdHJsZW5fY2hrLmNwcCBiL2xpYmMvYmlvbmljL19fc3RybGVuX2Noay5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTUxYTQ5NwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYmlvbmljL19fc3RybGVuX2Noay5jcHAKQEAgLTAsMCArMSw2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSAibGliY19sb2dnaW5nLmgiCisKKy8qCisgKiBSdW50aW1lIGltcGxlbWVudGF0aW9uIG9mIF9fc3RybGVuX2Noay4KKyAqCisgKiBTZWUKKyAqICAgaHR0cDovL2djYy5nbnUub3JnL29ubGluZWRvY3MvZ2NjL09iamVjdC1TaXplLUNoZWNraW5nLmh0bWwKKyAqICAgaHR0cDovL2djYy5nbnUub3JnL21sL2djYy1wYXRjaGVzLzIwMDQtMDkvbXNnMDIwNTUuaHRtbAorICogZm9yIGRldGFpbHMuCisgKgorICogVGhpcyBzdHJsZW4gY2hlY2sgaXMgY2FsbGVkIGlmIF9GT1JUSUZZX1NPVVJDRSBpcyBkZWZpbmVkIGFuZAorICogZ3JlYXRlciB0aGFuIDAuCisgKgorICogVGhpcyB0ZXN0IGlzIGRlc2lnbmVkIHRvIGRldGVjdCBjb2RlIHN1Y2ggYXM6CisgKgorICogaW50IG1haW4oKSB7CisgKiAgIGNoYXIgYnVmWzEwXTsKKyAqICAgbWVtY3B5KGJ1ZiwgIjEyMzQ1Njc4OTAiLCBzaXplb2YoYnVmKSk7CisgKiAgIHNpemVfdCBsZW4gPSBzdHJsZW4oYnVmKTsgLy8gc2VnZmF1bHQgaGVyZSB3aXRoIF9GT1JUSUZZX1NPVVJDRQorICogICBwcmludGYoIiVkXG4iLCBsZW4pOworICogICByZXR1cm4gMDsKKyAqIH0KKyAqCisgKiBvciBhbnl0aW1lIHN0cmxlbiByZWFkcyBiZXlvbmQgYW4gb2JqZWN0IGJvdW5kYXJ5LgorICovCitleHRlcm4gIkMiIHNpemVfdCBfX3N0cmxlbl9jaGsoY29uc3QgY2hhciAqcywgc2l6ZV90IHNfbGVuKSB7CisgICAgc2l6ZV90IHJldCA9IHN0cmxlbihzKTsKKworICAgIGlmIChfX3ByZWRpY3RfZmFsc2UocmV0ID49IHNfbGVuKSkgeworICAgICAgICBfX2ZvcnRpZnlfY2hrX2ZhaWwoInN0cmxlbiByZWFkIG92ZXJmbG93IiwgMCk7CisgICAgfQorCisgICAgcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL19fc3RybmNhdF9jaGsuY3BwIGIvbGliYy9iaW9uaWMvX19zdHJuY2F0X2Noay5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjU0ZDgzOAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYmlvbmljL19fc3RybmNhdF9jaGsuY3BwCkBAIC0wLDAgKzEsNzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgImxpYmNfbG9nZ2luZy5oIgorCisvKgorICogUnVudGltZSBpbXBsZW1lbnRhdGlvbiBvZiBfX2J1aWx0aW5fX19fc3RybmNhdF9jaGsuCisgKgorICogU2VlCisgKiAgIGh0dHA6Ly9nY2MuZ251Lm9yZy9vbmxpbmVkb2NzL2djYy9PYmplY3QtU2l6ZS1DaGVja2luZy5odG1sCisgKiAgIGh0dHA6Ly9nY2MuZ251Lm9yZy9tbC9nY2MtcGF0Y2hlcy8yMDA0LTA5L21zZzAyMDU1Lmh0bWwKKyAqIGZvciBkZXRhaWxzLgorICoKKyAqIFRoaXMgc3RybmNhdCBjaGVjayBpcyBjYWxsZWQgaWYgX0ZPUlRJRllfU09VUkNFIGlzIGRlZmluZWQgYW5kCisgKiBncmVhdGVyIHRoYW4gMC4KKyAqLworZXh0ZXJuICJDIiBjaGFyICpfX3N0cm5jYXRfY2hrKAorICAgICAgICBjaGFyKiBfX3Jlc3RyaWN0IGRlc3QsCisgICAgICAgIGNvbnN0IGNoYXIqIF9fcmVzdHJpY3Qgc3JjLAorICAgICAgICBzaXplX3QgbGVuLCBzaXplX3QgZGVzdF9idWZfc2l6ZSkKK3sKKyAgICBpZiAobGVuID09IDApIHsKKyAgICAgICAgcmV0dXJuIGRlc3Q7CisgICAgfQorCisgICAgc2l6ZV90IGRlc3RfbGVuID0gX19zdHJsZW5fY2hrKGRlc3QsIGRlc3RfYnVmX3NpemUpOworICAgIGNoYXIgKmQgPSBkZXN0ICsgZGVzdF9sZW47CisgICAgZGVzdF9idWZfc2l6ZSAtPSBkZXN0X2xlbjsKKworICAgIHdoaWxlICgqc3JjICE9ICdcMCcpIHsKKyAgICAgICAgKmQrKyA9ICpzcmMrKzsKKyAgICAgICAgbGVuLS07IGRlc3RfYnVmX3NpemUtLTsKKworICAgICAgICBpZiAoX19wcmVkaWN0X2ZhbHNlKGRlc3RfYnVmX3NpemUgPT0gMCkpIHsKKyAgICAgICAgICAgIF9fZm9ydGlmeV9jaGtfZmFpbCgic3RybmNhdCBidWZmZXIgb3ZlcmZsb3ciLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJJT05JQ19FVkVOVF9TVFJOQ0FUX0JVRkZFUl9PVkVSRkxPVyk7CisgICAgICAgIH0KKworICAgICAgICBpZiAobGVuID09IDApIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgKmQgPSAnXDAnOworICAgIHJldHVybiBkZXN0OworfQpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvX19zdHJuY3B5X2Noay5jcHAgYi9saWJjL2Jpb25pYy9fX3N0cm5jcHlfY2hrLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMDE4NzljCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9iaW9uaWMvX19zdHJuY3B5X2Noay5jcHAKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSAibGliY19sb2dnaW5nLmgiCisKKy8qCisgKiBSdW50aW1lIGltcGxlbWVudGF0aW9uIG9mIF9fYnVpbHRpbl9fX19zdHJuY3B5X2Noay4KKyAqCisgKiBTZWUKKyAqICAgaHR0cDovL2djYy5nbnUub3JnL29ubGluZWRvY3MvZ2NjL09iamVjdC1TaXplLUNoZWNraW5nLmh0bWwKKyAqICAgaHR0cDovL2djYy5nbnUub3JnL21sL2djYy1wYXRjaGVzLzIwMDQtMDkvbXNnMDIwNTUuaHRtbAorICogZm9yIGRldGFpbHMuCisgKgorICogVGhpcyBzdHJuY3B5IGNoZWNrIGlzIGNhbGxlZCBpZiBfRk9SVElGWV9TT1VSQ0UgaXMgZGVmaW5lZCBhbmQKKyAqIGdyZWF0ZXIgdGhhbiAwLgorICovCitleHRlcm4gIkMiIGNoYXIgKl9fc3RybmNweV9jaGsgKGNoYXIgKmRlc3QsIGNvbnN0IGNoYXIgKnNyYywKKyAgICAgICAgICAgICAgc2l6ZV90IGxlbiwgc2l6ZV90IGRlc3RfbGVuKQoreworICAgIGlmIChfX3ByZWRpY3RfZmFsc2UobGVuID4gZGVzdF9sZW4pKSB7CisgICAgICAgIF9fZm9ydGlmeV9jaGtfZmFpbCgic3RybmNweSBidWZmZXIgb3ZlcmZsb3ciLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCSU9OSUNfRVZFTlRfU1RSTkNQWV9CVUZGRVJfT1ZFUkZMT1cpOworICAgIH0KKworICAgIHJldHVybiBzdHJuY3B5KGRlc3QsIHNyYywgbGVuKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL19fdW1hc2tfY2hrLmNwcCBiL2xpYmMvYmlvbmljL19fdW1hc2tfY2hrLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZmU5NWEyCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9iaW9uaWMvX191bWFza19jaGsuY3BwCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI3VuZGVmIF9GT1JUSUZZX1NPVVJDRQorCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlICJsaWJjX2xvZ2dpbmcuaCIKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworLyoKKyAqIFJ1bnRpbWUgaW1wbGVtZW50YXRpb24gb2YgX191bWFza19jaGsuCisgKgorICogVmFsaWRhdGUgdGhhdCB1bWFzayBpcyBjYWxsZWQgd2l0aCBzYW5lIG1vZGUuCisgKgorICogVGhpcyB1bWFzayBjaGVjayBpcyBjYWxsZWQgaWYgX0ZPUlRJRllfU09VUkNFIGlzIGRlZmluZWQgYW5kCisgKiBncmVhdGVyIHRoYW4gMC4KKyAqLworZXh0ZXJuICJDIiBtb2RlX3QgX191bWFza19jaGsobW9kZV90IG1vZGUpIHsKKyAgICBpZiAoX19wcmVkaWN0X2ZhbHNlKChtb2RlICYgMDc3NykgIT0gbW9kZSkpIHsKKyAgICAgICAgX19mb3J0aWZ5X2Noa19mYWlsKCJ1bWFzayBjYWxsZWQgd2l0aCBpbnZhbGlkIG1hc2siLCAwKTsKKyAgICB9CisKKyAgICByZXR1cm4gdW1hc2sobW9kZSk7Cit9CmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9fX3ZzbnByaW50Zl9jaGsuY3BwIGIvbGliYy9iaW9uaWMvX192c25wcmludGZfY2hrLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDNhODFlCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9iaW9uaWMvX192c25wcmludGZfY2hrLmNwcApAQCAtMCwwICsxLDg3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgImxpYmNfbG9nZ2luZy5oIgorCisvKgorICogUnVudGltZSBpbXBsZW1lbnRhdGlvbiBvZiBfX2J1aWx0aW5fX19fdnNucHJpbnRmX2Noay4KKyAqCisgKiBTZWUKKyAqICAgaHR0cDovL2djYy5nbnUub3JnL29ubGluZWRvY3MvZ2NjL09iamVjdC1TaXplLUNoZWNraW5nLmh0bWwKKyAqICAgaHR0cDovL2djYy5nbnUub3JnL21sL2djYy1wYXRjaGVzLzIwMDQtMDkvbXNnMDIwNTUuaHRtbAorICogZm9yIGRldGFpbHMuCisgKgorICogVGhpcyB2c25wcmludGYgY2hlY2sgaXMgY2FsbGVkIGlmIF9GT1JUSUZZX1NPVVJDRSBpcyBkZWZpbmVkIGFuZAorICogZ3JlYXRlciB0aGFuIDAuCisgKi8KK2V4dGVybiAiQyIgaW50IF9fdnNucHJpbnRmX2NoaygKKyAgICAgICAgY2hhciAqZGVzdCwKKyAgICAgICAgc2l6ZV90IHN1cHBsaWVkX3NpemUsCisgICAgICAgIGludCAvKmZsYWdzKi8sCisgICAgICAgIHNpemVfdCBkZXN0X2xlbl9mcm9tX2NvbXBpbGVyLAorICAgICAgICBjb25zdCBjaGFyICpmb3JtYXQsCisgICAgICAgIHZhX2xpc3QgdmEpCit7CisgICAgaWYgKF9fcHJlZGljdF9mYWxzZShzdXBwbGllZF9zaXplID4gZGVzdF9sZW5fZnJvbV9jb21waWxlcikpIHsKKyAgICAgICAgX19mb3J0aWZ5X2Noa19mYWlsKCJ2c25wcmludGYgYnVmZmVyIG92ZXJmbG93IiwgMCk7CisgICAgfQorCisgICAgcmV0dXJuIHZzbnByaW50ZihkZXN0LCBzdXBwbGllZF9zaXplLCBmb3JtYXQsIHZhKTsKK30KKworLyoKKyAqIFJ1bnRpbWUgaW1wbGVtZW50YXRpb24gb2YgX19idWlsdGluX19fX3NucHJpbnRmX2Noay4KKyAqCisgKiBTZWUKKyAqICAgaHR0cDovL2djYy5nbnUub3JnL29ubGluZWRvY3MvZ2NjL09iamVjdC1TaXplLUNoZWNraW5nLmh0bWwKKyAqICAgaHR0cDovL2djYy5nbnUub3JnL21sL2djYy1wYXRjaGVzLzIwMDQtMDkvbXNnMDIwNTUuaHRtbAorICogZm9yIGRldGFpbHMuCisgKgorICogVGhpcyBzbnByaW50ZiBjaGVjayBpcyBjYWxsZWQgaWYgX0ZPUlRJRllfU09VUkNFIGlzIGRlZmluZWQgYW5kCisgKiBncmVhdGVyIHRoYW4gMC4KKyAqLworZXh0ZXJuICJDIiBpbnQgX19zbnByaW50Zl9jaGsoCisgICAgICAgIGNoYXIgKmRlc3QsCisgICAgICAgIHNpemVfdCBzdXBwbGllZF9zaXplLAorICAgICAgICBpbnQgZmxhZ3MsCisgICAgICAgIHNpemVfdCBkZXN0X2xlbl9mcm9tX2NvbXBpbGVyLAorICAgICAgICBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKK3sKKyAgICB2YV9saXN0IHZhOworICAgIGludCByZXR2YWw7CisKKyAgICB2YV9zdGFydCh2YSwgZm9ybWF0KTsKKyAgICByZXR2YWwgPSBfX3ZzbnByaW50Zl9jaGsoZGVzdCwgc3VwcGxpZWRfc2l6ZSwgZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RfbGVuX2Zyb21fY29tcGlsZXIsIGZvcm1hdCwgdmEpOworICAgIHZhX2VuZCh2YSk7CisKKyAgICByZXR1cm4gcmV0dmFsOworfQpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvX192c3ByaW50Zl9jaGsuY3BwIGIvbGliYy9iaW9uaWMvX192c3ByaW50Zl9jaGsuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyYjBjYTYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2Jpb25pYy9fX3ZzcHJpbnRmX2Noay5jcHAKQEAgLTAsMCArMSw4NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlICJsaWJjX2xvZ2dpbmcuaCIKKworLyoKKyAqIFJ1bnRpbWUgaW1wbGVtZW50YXRpb24gb2YgX19idWlsdGluX19fX3ZzcHJpbnRmX2Noay4KKyAqCisgKiBTZWUKKyAqICAgaHR0cDovL2djYy5nbnUub3JnL29ubGluZWRvY3MvZ2NjL09iamVjdC1TaXplLUNoZWNraW5nLmh0bWwKKyAqICAgaHR0cDovL2djYy5nbnUub3JnL21sL2djYy1wYXRjaGVzLzIwMDQtMDkvbXNnMDIwNTUuaHRtbAorICogZm9yIGRldGFpbHMuCisgKgorICogVGhpcyB2c3ByaW50ZiBjaGVjayBpcyBjYWxsZWQgaWYgX0ZPUlRJRllfU09VUkNFIGlzIGRlZmluZWQgYW5kCisgKiBncmVhdGVyIHRoYW4gMC4KKyAqLworZXh0ZXJuICJDIiBpbnQgX192c3ByaW50Zl9jaGsoCisgICAgICAgIGNoYXIgKmRlc3QsCisgICAgICAgIGludCAvKmZsYWdzKi8sCisgICAgICAgIHNpemVfdCBkZXN0X2xlbl9mcm9tX2NvbXBpbGVyLAorICAgICAgICBjb25zdCBjaGFyICpmb3JtYXQsCisgICAgICAgIHZhX2xpc3QgdmEpCit7CisgICAgaW50IHJldCA9IHZzbnByaW50ZihkZXN0LCBkZXN0X2xlbl9mcm9tX2NvbXBpbGVyLCBmb3JtYXQsIHZhKTsKKworICAgIGlmICgoc2l6ZV90KSByZXQgPj0gZGVzdF9sZW5fZnJvbV9jb21waWxlcikgeworICAgICAgICBfX2ZvcnRpZnlfY2hrX2ZhaWwoInZzcHJpbnRmIGJ1ZmZlciBvdmVyZmxvdyIsIDApOworICAgIH0KKworICAgIHJldHVybiByZXQ7Cit9CisKKy8qCisgKiBSdW50aW1lIGltcGxlbWVudGF0aW9uIG9mIF9fYnVpbHRpbl9fX19zcHJpbnRmX2Noay4KKyAqCisgKiBTZWUKKyAqICAgaHR0cDovL2djYy5nbnUub3JnL29ubGluZWRvY3MvZ2NjL09iamVjdC1TaXplLUNoZWNraW5nLmh0bWwKKyAqICAgaHR0cDovL2djYy5nbnUub3JnL21sL2djYy1wYXRjaGVzLzIwMDQtMDkvbXNnMDIwNTUuaHRtbAorICogZm9yIGRldGFpbHMuCisgKgorICogVGhpcyBzcHJpbnRmIGNoZWNrIGlzIGNhbGxlZCBpZiBfRk9SVElGWV9TT1VSQ0UgaXMgZGVmaW5lZCBhbmQKKyAqIGdyZWF0ZXIgdGhhbiAwLgorICovCitleHRlcm4gIkMiIGludCBfX3NwcmludGZfY2hrKAorICAgICAgICBjaGFyICpkZXN0LAorICAgICAgICBpbnQgZmxhZ3MsCisgICAgICAgIHNpemVfdCBkZXN0X2xlbl9mcm9tX2NvbXBpbGVyLAorICAgICAgICBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKK3sKKyAgICB2YV9saXN0IHZhOworICAgIGludCByZXR2YWw7CisKKyAgICB2YV9zdGFydCh2YSwgZm9ybWF0KTsKKyAgICByZXR2YWwgPSBfX3ZzcHJpbnRmX2NoayhkZXN0LCBmbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9sZW5fZnJvbV9jb21waWxlciwgZm9ybWF0LCB2YSk7CisgICAgdmFfZW5kKHZhKTsKKworICAgIHJldHVybiByZXR2YWw7Cit9CmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9hYm9ydC5jcHAgYi9saWJjL2Jpb25pYy9hYm9ydC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmZjZGZkYQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYmlvbmljL2Fib3J0LmNwcApAQCAtMCwwICsxLDY3IEBACisvKgorICogQ29weXJpZ2h0IChjKSAxOTg1IFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzaWduYWwuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlICJhdGV4aXQuaCIKKworX19MSUJDX0hJRERFTl9fIHZvaWQgKCpfX2NsZWFudXApKCk7CisKKyNpZmRlZiBfX2FybV9fCitleHRlcm4gIkMiIF9fTElCQ19ISURERU5fXyB2b2lkIF9fbGliY19hbmRyb2lkX2Fib3J0KCkKKyNlbHNlCit2b2lkIGFib3J0KCkKKyNlbmRpZgoreworICAvLyBEb24ndCBibG9jayBTSUdBQlJUIHRvIGdpdmUgYW55IHNpZ25hbCBoYW5kbGVyIGEgY2hhbmNlOyB3ZSBpZ25vcmUKKyAgLy8gYW55IGVycm9ycyAtLSBYMzExSiBkb2Vzbid0IGFsbG93IGFib3J0IHRvIHJldHVybiBhbnl3YXkuCisgIHNpZ3NldF90IG1hc2s7CisgIHNpZ2ZpbGxzZXQoJm1hc2spOworICBzaWdkZWxzZXQoJm1hc2ssIFNJR0FCUlQpOworICBzaWdwcm9jbWFzayhTSUdfU0VUTUFTSywgJm1hc2ssIE5VTEwpOworCisgIC8vIFBPU0lYIHJlcXVpcmVzIHdlIGZsdXNoIHN0ZGlvIGJ1ZmZlcnMgb24gYWJvcnQuCisgIGlmIChfX2NsZWFudXApIHsKKyAgICAoKl9fY2xlYW51cCkoKTsKKyAgfQorCisgIHJhaXNlKFNJR0FCUlQpOworCisgIC8vIElmIFNJR0FCUlQgaWdub3JlZCwgb3IgY2F1Z2h0IGFuZCB0aGUgaGFuZGxlciByZXR1cm5zLAorICAvLyByZW1vdmUgdGhlIFNJR0FCUlQgc2lnbmFsIGhhbmRsZXIgYW5kIHJhaXNlIFNJR0FCUlQgYWdhaW4uCisgIHN0cnVjdCBzaWdhY3Rpb24gc2E7CisgIHNhLnNhX2hhbmRsZXIgPSBTSUdfREZMOworICBzYS5zYV9mbGFncyAgID0gU0FfUkVTVEFSVDsKKyAgc2lnZW1wdHlzZXQoJnNhLnNhX21hc2spOworICBzaWdhY3Rpb24oU0lHQUJSVCwgJnNhLCAmc2EpOworICBzaWdwcm9jbWFzayhTSUdfU0VUTUFTSywgJm1hc2ssIE5VTEwpOworICByYWlzZShTSUdBQlJUKTsKKyAgX2V4aXQoMSk7Cit9CmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9hc3NlcnQuY3BwIGIvbGliYy9iaW9uaWMvYXNzZXJ0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDAyNGM3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9iaW9uaWMvYXNzZXJ0LmNwcApAQCAtMCwwICsxLDQzIEBACisvKgkkT3BlbkJTRDogYXNzZXJ0LmMsdiAxLjggMjAwNS8wOC8wOCAwODowNTozMyBlc3BpZSBFeHAgJCAqLworLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTIsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisKKyNpbmNsdWRlICJsaWJjX2xvZ2dpbmcuaCIKKwordm9pZCBfX2Fzc2VydChjb25zdCBjaGFyKiBmaWxlLCBpbnQgbGluZSwgY29uc3QgY2hhciogZmFpbGVkX2V4cHJlc3Npb24pIHsKKyAgX19saWJjX2ZhdGFsKCIlczolZDogYXNzZXJ0aW9uIFwiJXNcIiBmYWlsZWQiLCBmaWxlLCBsaW5lLCBmYWlsZWRfZXhwcmVzc2lvbik7CisgIC8qIE5PVFJFQUNIRUQgKi8KK30KKwordm9pZCBfX2Fzc2VydDIoY29uc3QgY2hhciogZmlsZSwgaW50IGxpbmUsIGNvbnN0IGNoYXIqIGZ1bmN0aW9uLCBjb25zdCBjaGFyKiBmYWlsZWRfZXhwcmVzc2lvbikgeworICBfX2xpYmNfZmF0YWwoIiVzOiVkOiAlczogYXNzZXJ0aW9uIFwiJXNcIiBmYWlsZWQiLCBmaWxlLCBsaW5lLCBmdW5jdGlvbiwgZmFpbGVkX2V4cHJlc3Npb24pOworICAvKiBOT1RSRUFDSEVEICovCit9CmRpZmYgLS1naXQgYS9saWJjL3N0ZGxpYi9hdG9pLmMgYi9saWJjL2Jpb25pYy9hdG9pLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGxpYmMvc3RkbGliL2F0b2kuYwpyZW5hbWUgdG8gbGliYy9iaW9uaWMvYXRvaS5jCmRpZmYgLS1naXQgYS9saWJjL3N0ZGxpYi9hdG9sLmMgYi9saWJjL2Jpb25pYy9hdG9sLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGxpYmMvc3RkbGliL2F0b2wuYwpyZW5hbWUgdG8gbGliYy9iaW9uaWMvYXRvbC5jCmRpZmYgLS1naXQgYS9saWJjL3N0ZGxpYi9hdG9sbC5jIGIvbGliYy9iaW9uaWMvYXRvbGwuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbGliYy9zdGRsaWIvYXRvbGwuYwpyZW5hbWUgdG8gbGliYy9iaW9uaWMvYXRvbGwuYwpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvYXRvbWljc194ODYuYyBiL2xpYmMvYmlvbmljL2F0b21pY3NfeDg2LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZkNjBmNGYuLjAwMDAwMDAKLS0tIGEvbGliYy9iaW9uaWMvYXRvbWljc194ODYuYworKysgL2Rldi9udWxsCkBAIC0xLDk1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0gKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiAgICBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCi0gKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQotICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAotICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKLSAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUwotICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECi0gKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0gKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLSNpbmNsdWRlIDxzeXMvYXRvbWljcy5oPgotCi0jZGVmaW5lIEZVVEVYX1NZU0NBTEwgMjQwCi0jZGVmaW5lIEZVVEVYX1dBSVQgMAotI2RlZmluZSBGVVRFWF9XQUtFIDEKLQotaW50IF9fZnV0ZXhfd2FpdCh2b2xhdGlsZSB2b2lkICpmdHgsIGludCB2YWwpCi17Ci0gICAgaW50IHJldDsKLSAgICBhc20gdm9sYXRpbGUgKAotICAgICAgICAiaW50ICQweDgwOyIKLSAgICAgICAgOiAiPWEiIChyZXQpCi0gICAgICAgIDogIjAiIChGVVRFWF9TWVNDQUxMKSwKLSAgICAgICAgICAiYiIgKGZ0eCksCi0gICAgICAgICAgImMiIChGVVRFWF9XQUlUKSwKLSAgICAgICAgICAiZCIgKHZhbCksCi0gICAgICAgICAgIlMiICgwKQotICAgICk7Ci0gICAgcmV0dXJuIHJldDsKLX0KLQotaW50IF9fZnV0ZXhfd2FrZSh2b2xhdGlsZSB2b2lkICpmdHgsIGludCBjb3VudCkKLXsKLSAgICBpbnQgcmV0OwotICAgIGFzbSB2b2xhdGlsZSAoCi0gICAgICAgICJpbnQgJDB4ODA7IgotICAgICAgICA6ICI9YSIgKHJldCkKLSAgICAgICAgOiAiMCIgKEZVVEVYX1NZU0NBTEwpLAotICAgICAgICAgICJiIiAoZnR4KSwKLSAgICAgICAgICAiYyIgKEZVVEVYX1dBS0UpLAotICAgICAgICAgICJkIiAoY291bnQpCi0gICAgKTsKLSAgICByZXR1cm4gcmV0OwotfQotCi1pbnQgX19hdG9taWNfY21weGNoZyhpbnQgb2xkLCBpbnQgbmV3LCB2b2xhdGlsZSBpbnQqIGFkZHIpIHsKLSAgICBpbnQgeGNoZzsKLSAgICBhc20gdm9sYXRpbGUgKAotICAgICAgICAibG9jazsiCi0gICAgICAgICJjbXB4Y2hnICUlZWN4LCAoJSVlZHgpOyIKLSAgICAgICAgInNldG5lICUlYWw7IgotICAgICAgICA6ICI9YSIgKHhjaGcpCi0gICAgICAgIDogImEiIChvbGQpLAotICAgICAgICAgICJjIiAobmV3KSwKLSAgICAgICAgICAiZCIgKGFkZHIpCi0gICAgKTsKLSAgICByZXR1cm4geGNoZzsKLX0KLQotaW50IF9fYXRvbWljX3N3YXAoaW50IG5ldywgdm9sYXRpbGUgaW50KiBhZGRyKSB7Ci0gICAgaW50IG9sZDsKLSAgICBhc20gdm9sYXRpbGUgKAotICAgICAgICAibG9jazsiCi0gICAgICAgICJ4Y2hnICUlZWN4LCAoJSVlZHgpOyIKLSAgICAgICAgOiAiPWMiIChvbGQpCi0gICAgICAgIDogImMiIChuZXcpLAotICAgICAgICAgICJkIiAoYWRkcikKLSAgICApOwotICAgIHJldHVybiBvbGQ7Ci19Ci0KLWludCBfX2F0b21pY19kZWModm9sYXRpbGUgaW50KiBhZGRyKSB7Ci0gICAgaW50IG9sZDsKLSAgICBkbyB7Ci0gICAgICAgIG9sZCA9ICphZGRyOwotICAgIH0gd2hpbGUgKGF0b21pY19jbXB4Y2hnKG9sZCwgb2xkLTEsIGFkZHIpKTsKLSAgICByZXR1cm4gb2xkOwotfQpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvYmFzZW5hbWUuYyBiL2xpYmMvYmlvbmljL2Jhc2VuYW1lLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhhYWFlNTMuLjAwMDAwMDAKLS0tIGEvbGliYy9iaW9uaWMvYmFzZW5hbWUuYworKysgL2Rldi9udWxsCkBAIC0xLDQ5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0gKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiAgICBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCi0gKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQotICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAotICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKLSAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUwotICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECi0gKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0gKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLSNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KLQotI2luY2x1ZGUgPGVycm5vLmg+Ci0jaW5jbHVkZSA8bGliZ2VuLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8c3lzL3BhcmFtLmg+Ci0KLWNoYXIqCi1iYXNlbmFtZShjb25zdCBjaGFyKiAgcGF0aCkKLXsKLSAgICBzdGF0aWMgY2hhciogIGJuYW1lID0gTlVMTDsKLSAgICBpbnQgICAgICAgICAgIHJldDsKLQotICAgIGlmIChibmFtZSA9PSBOVUxMKSB7Ci0gICAgICAgIGJuYW1lID0gKGNoYXIgKiltYWxsb2MoTUFYUEFUSExFTik7Ci0gICAgICAgIGlmIChibmFtZSA9PSBOVUxMKQotICAgICAgICAgICAgcmV0dXJuKE5VTEwpOwotICAgIH0KLSAgICByZXQgPSBiYXNlbmFtZV9yKHBhdGgsIGJuYW1lLCBNQVhQQVRITEVOKTsKLSAgICByZXR1cm4gKHJldCA8IDApID8gTlVMTCA6IGJuYW1lOwotfQpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvYmFzZW5hbWVfci5jIGIvbGliYy9iaW9uaWMvYmFzZW5hbWVfci5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOTA4MGYwLi4wMDAwMDAwCi0tLSBhL2xpYmMvYmlvbmljL2Jhc2VuYW1lX3IuYworKysgL2Rldi9udWxsCkBAIC0xLDgyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0gKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiAgICBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCi0gKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQotICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAotICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKLSAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUwotICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECi0gKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0gKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLSNpbmNsdWRlIDxsaWJnZW4uaD4KLSNpbmNsdWRlIDxlcnJuby5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgotCi1pbnQKLWJhc2VuYW1lX3IoY29uc3QgY2hhciogcGF0aCwgY2hhciogIGJ1ZmZlciwgc2l6ZV90ICBidWZmbGVuKQotewotICAgIGNvbnN0IGNoYXIgKmVuZHAsICpzdGFydHA7Ci0gICAgaW50ICAgICAgICAgbGVuLCByZXN1bHQ7Ci0gICAgY2hhciAgICAgICAgdGVtcFsyXTsKLQotICAgIC8qIEVtcHR5IG9yIE5VTEwgc3RyaW5nIGdldHMgdHJlYXRlZCBhcyAiLiIgKi8KLSAgICBpZiAocGF0aCA9PSBOVUxMIHx8ICpwYXRoID09ICdcMCcpIHsKLSAgICAgICAgc3RhcnRwICA9ICIuIjsKLSAgICAgICAgbGVuICAgICA9IDE7Ci0gICAgICAgIGdvdG8gRXhpdDsKLSAgICB9Ci0KLSAgICAvKiBTdHJpcCB0cmFpbGluZyBzbGFzaGVzICovCi0gICAgZW5kcCA9IHBhdGggKyBzdHJsZW4ocGF0aCkgLSAxOwotICAgIHdoaWxlIChlbmRwID4gcGF0aCAmJiAqZW5kcCA9PSAnLycpCi0gICAgICAgIGVuZHAtLTsKLQotICAgIC8qIEFsbCBzbGFzaGVzIGJlY29tZXMgIi8iICovCi0gICAgaWYgKGVuZHAgPT0gcGF0aCAmJiAqZW5kcCA9PSAnLycpIHsKLSAgICAgICAgc3RhcnRwID0gIi8iOwotICAgICAgICBsZW4gICAgPSAxOwotICAgICAgICBnb3RvIEV4aXQ7Ci0gICAgfQotCi0gICAgLyogRmluZCB0aGUgc3RhcnQgb2YgdGhlIGJhc2UgKi8KLSAgICBzdGFydHAgPSBlbmRwOwotICAgIHdoaWxlIChzdGFydHAgPiBwYXRoICYmICooc3RhcnRwIC0gMSkgIT0gJy8nKQotICAgICAgICBzdGFydHAtLTsKLQotICAgIGxlbiA9IGVuZHAgLSBzdGFydHAgKzE7Ci0KLUV4aXQ6Ci0gICAgcmVzdWx0ID0gbGVuOwotICAgIGlmIChidWZmZXIgPT0gTlVMTCkgewotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLSAgICBpZiAobGVuID4gKGludClidWZmbGVuLTEpIHsKLSAgICAgICAgbGVuICAgID0gKGludClidWZmbGVuLTE7Ci0gICAgICAgIHJlc3VsdCA9IC0xOwotICAgICAgICBlcnJubyAgPSBFUkFOR0U7Ci0gICAgfQotCi0gICAgaWYgKGxlbiA+PSAwKSB7Ci0gICAgICAgIG1lbWNweSggYnVmZmVyLCBzdGFydHAsIGxlbiApOwotICAgICAgICBidWZmZXJbbGVuXSA9IDA7Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci19CmRpZmYgLS1naXQgYS9saWJjL2luZXQvYmluZHJlc3Zwb3J0LmMgYi9saWJjL2Jpb25pYy9iaW5kcmVzdnBvcnQuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbGliYy9pbmV0L2JpbmRyZXN2cG9ydC5jCnJlbmFtZSB0byBsaWJjL2Jpb25pYy9iaW5kcmVzdnBvcnQuYwpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvYmlvbmljX2Nsb25lLmMgYi9saWJjL2Jpb25pYy9iaW9uaWNfY2xvbmUuYwppbmRleCA2YjJmYTU4Li44NDEyMDU3IDEwMDY0NAotLS0gYS9saWJjL2Jpb25pYy9iaW9uaWNfY2xvbmUuYworKysgYi9saWJjL2Jpb25pYy9iaW9uaWNfY2xvbmUuYwpAQCAtMzEsOSArMzEsNiBAQAogI2luY2x1ZGUgPHN0ZGFyZy5oPgogI2luY2x1ZGUgPHN0ZGlvLmg+CiAKLS8qIFdBUk5JTkc6IEFUIFRIRSBNT01FTlQsIFRISVMgSVMgT05MWSBTVVBQT1JURUQgT04gQVJNCi0gKi8KLQogZXh0ZXJuIGludCAgX19iaW9uaWNfY2xvbmUodW5zaWduZWQgbG9uZyAgIGNsb25lX2ZsYWdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCogICAgICAgICAgIG5ld3NwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICAgICAgICAgICAgKnBhcmVudF90aWRwdHIsCkBAIC02MSw5ICs1OCw4IEBACiAgICAgaW50ICAgICAqcGFyZW50X3RpZHB0ciA9IE5VTEw7CiAgICAgdm9pZCAgICAqbmV3X3RscyA9IE5VTEw7CiAgICAgaW50ICAgICAqY2hpbGRfdGlkcHRyID0gTlVMTDsKLSAgICBpbnQgICAgIHJldDsKIAotICAgIC8qIGV4dHJhY3Qgb3B0aW9uYWwgcGFyYW1ldGVycyAtIHRoZXkgYXJlIGN1bW11bGF0aXZlICovCisgICAgLyogZXh0cmFjdCBvcHRpb25hbCBwYXJhbWV0ZXJzIC0gdGhleSBhcmUgY3VtdWxhdGl2ZS4gKi8KICAgICB2YV9zdGFydChhcmdzLCBhcmcpOwogICAgIGlmIChmbGFncyAmIChDTE9ORV9QQVJFTlRfU0VUVElEfENMT05FX1NFVFRMU3xDTE9ORV9DSElMRF9TRVRUSUQpKSB7CiAgICAgICAgIHBhcmVudF90aWRwdHIgPSB2YV9hcmcoYXJncywgaW50Kik7CkBAIC03Niw2ICs3Miw1IEBACiAgICAgfQogICAgIHZhX2VuZChhcmdzKTsKIAotICAgIHJldCA9IF9fYmlvbmljX2Nsb25lKGZsYWdzLCBjaGlsZF9zdGFjaywgcGFyZW50X3RpZHB0ciwgbmV3X3RscywgY2hpbGRfdGlkcHRyLCBmbiwgYXJnKTsKLSAgICByZXR1cm4gcmV0OworICAgIHJldHVybiBfX2Jpb25pY19jbG9uZShmbGFncywgY2hpbGRfc3RhY2ssIHBhcmVudF90aWRwdHIsIG5ld190bHMsIGNoaWxkX3RpZHB0ciwgZm4sIGFyZyk7CiB9CmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9icmsuY3BwIGIvbGliYy9iaW9uaWMvYnJrLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MzNiOTE0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9iaW9uaWMvYnJrLmNwcApAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworLyogU2hhcmVkIHdpdGggc2Jyay5jLiAqLworZXh0ZXJuICJDIiB2b2lkKiBfX2Jpb25pY19icms7IC8vIFRPRE86IHNob3VsZCBiZSBfX0xJQkNfSElEREVOX18gYnV0IGFjY2lkZW50YWxseSBleHBvcnRlZCBieSBOREsgOi0oCisKK2ludCBicmsodm9pZCogZW5kX2RhdGEpIHsKKyAgdm9pZCogbmV3X2JyayA9IF9fYnJrKGVuZF9kYXRhKTsKKyAgaWYgKG5ld19icmsgIT0gZW5kX2RhdGEpIHsKKyAgICByZXR1cm4gLTE7CisgIH0KKyAgX19iaW9uaWNfYnJrID0gbmV3X2JyazsKKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9jcnRicmFuZC5jIGIvbGliYy9iaW9uaWMvY3J0YnJhbmQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMWZjYmM3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9iaW9uaWMvY3J0YnJhbmQuYwpAQCAtMCwwICsxLDYzIEBACisvKi0KKyAqIENvcHlyaWdodCAyMDAwIERhdmlkIEUuIE8nQnJpZW4sIEpvaG4gRC4gUG9sc3RyYS4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKworI2RlZmluZSBBQklfVkVORE9SCSJBbmRyb2lkIgorI2RlZmluZSBBQklfU0VDVElPTgkiLm5vdGUuYW5kcm9pZC5pZGVudCIKKyNkZWZpbmUgQUJJX05PVEVUWVBFCTEKKyNkZWZpbmUgQUJJX0FORFJPSURfQVBJCVBMQVRGT1JNX1NES19WRVJTSU9OCisKKy8qCisgKiBTcGVjaWFsICIubm90ZSIgZW50cnkgdG8gdGFnIGFuIEFuZHJvaWQgYmluYXJ5IGFuZCBzcGVjaWZ5IHRoZSBBQkkgdmVyc2lvbi4KKyAqCisgKiBGb3IgYWxsIGFyY2hlcyBleGNlcHQgc3BhcmMsIGdjYyBlbWl0cyB0aGUgc2VjdGlvbiBkaXJlY3RpdmUgZm9yIHRoZQorICogZm9sbG93aW5nIHN0cnVjdCB3aXRoIGEgUFJPR0JJVFMgdHlwZS4gIEhvd2V2ZXIsIHRoZSBzZWN0aW9uIHNob3VsZCBiZQorICogb2YgTk9URSB0eXBlLCBhY2NvcmRpbmcgdG8gdGhlIEdlbmVyaWMgU3lzViBBQkkgc3BlYy4KKyAqCisgKiBVbmZvcnR1bmF0ZWx5LCB0aGVyZSBpcyBubyBjbGVhbiB3YXkgdG8gdGVsbCBnY2MgdG8gdXNlIGFub3RoZXIgc2VjdGlvbiB0eXBlLAorICogc28gdGhpcyBDIGZpbGUgKG9yIHRoZSBDIGZpbGUgdGhhdCBpbmNsdWRlcyBpdCkgbXVzdCBiZSBjb21waWxlZCBpbiBtdWx0aXBsZQorICogc3RlcHM6CisgKgorICogLSBDb21waWxlIHRoZSAuYyBmaWxlIHRvIGEgLnMgZmlsZS4KKyAqIC0gRWRpdCB0aGUgLnMgZmlsZSB0byBjaGFuZ2UgdGhlICdwcm9nYml0cycgdHlwZSB0byAnbm90ZScsIGZvciB0aGUgc2VjdGlvbgorICogICBkaXJlY3RpdmUgdGhhdCBkZWZpbmVzIHRoZSAubm90ZS5BQkktdGFnIHNlY3Rpb24uCisgKiAtIENvbXBpbGUgdGhlIC5zIGZpbGUgdG8gYW4gb2JqZWN0IGZpbGUuCisgKgorICogVGhlc2Ugc3RlcHMgYXJlIGRvbmUgaW4gdGhlIGludmlkaWR1YWwgTWFrZWZpbGVzIGZvciBlYWNoIGFwcGxpY2FibGUgYXJjaC4KKyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCB7CisgICAgaW50MzJfdAluYW1lc3o7CisgICAgaW50MzJfdAlkZXNjc3o7CisgICAgaW50MzJfdAl0eXBlOworICAgIGNoYXIJbmFtZVtzaXplb2YgQUJJX1ZFTkRPUl07CisgICAgaW50MzJfdAlhbmRyb2lkX2FwaTsKK30gYWJpdGFnIF9fYXR0cmlidXRlX18gKChzZWN0aW9uIChBQklfU0VDVElPTiksIGFsaWduZWQoNCksIHVzZWQpKSA9IHsKKyAgICBzaXplb2YgQUJJX1ZFTkRPUiwKKyAgICBzaXplb2YoaW50MzJfdCksCisgICAgQUJJX05PVEVUWVBFLAorICAgIEFCSV9WRU5ET1IsCisgICAgQUJJX0FORFJPSURfQVBJLAorfTsKZGlmZiAtLWdpdCBhL2xpYmMvdW5pc3RkL2RhZW1vbi5jIGIvbGliYy9iaW9uaWMvZGFlbW9uLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGxpYmMvdW5pc3RkL2RhZW1vbi5jCnJlbmFtZSB0byBsaWJjL2Jpb25pYy9kYWVtb24uYwpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvZGVidWdfbWFwaW5mby5jcHAgYi9saWJjL2Jpb25pYy9kZWJ1Z19tYXBpbmZvLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNWI5YWE3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9iaW9uaWMvZGVidWdfbWFwaW5mby5jcHAKQEAgLTAsMCArMSw5NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworI2luY2x1ZGUgImRsbWFsbG9jLmgiCisjaW5jbHVkZSAiZGVidWdfbWFwaW5mby5oIgorCisvLyA2ZjAwMDAwMC02ZjAxZTAwMCByd3hwIDAwMDAwMDAwIDAwOjBjIDE2Mzg5NDE5ICAgL3N5c3RlbS9saWIvbGliY29tcG9zZXIuc28KKy8vIDAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OQorLy8gMCAgICAgICAgIDEgICAgICAgICAyICAgICAgICAgMyAgICAgICAgIDQgICAgICAgICA1CisKK3N0YXRpYyBtYXBpbmZvX3QqIHBhcnNlX21hcHNfbGluZShjaGFyKiBsaW5lKSB7CisgIGludCBsZW4gPSBzdHJsZW4obGluZSk7CisKKyAgaWYgKGxlbiA8IDEpIHJldHVybiAwOworICBsaW5lWy0tbGVuXSA9IDA7CisKKyAgaWYgKGxlbiA8IDUwKSByZXR1cm4gMDsKKyAgaWYgKGxpbmVbMjBdICE9ICd4JykgcmV0dXJuIDA7CisKKyAgbWFwaW5mb190KiBtaSA9IHN0YXRpY19jYXN0PG1hcGluZm9fdCo+KGRsbWFsbG9jKHNpemVvZihtYXBpbmZvX3QpICsgKGxlbiAtIDQ3KSkpOworICBpZiAobWkgPT0gMCkgcmV0dXJuIDA7CisKKyAgbWktPnN0YXJ0ID0gc3RydG91bChsaW5lLCAwLCAxNik7CisgIG1pLT5lbmQgPSBzdHJ0b3VsKGxpbmUgKyA5LCAwLCAxNik7CisgIG1pLT5uZXh0ID0gMDsKKyAgc3RyY3B5KG1pLT5uYW1lLCBsaW5lICsgNDkpOworCisgIHJldHVybiBtaTsKK30KKworX19MSUJDX0hJRERFTl9fIG1hcGluZm9fdCogbWFwaW5mb19jcmVhdGUocGlkX3QgcGlkKSB7CisgIHN0cnVjdCBtYXBpbmZvX3QqIG1pbGlzdCA9IE5VTEw7CisgIGNoYXIgZGF0YVsxMDI0XTsgLy8gVXNlZCB0byByZWFkIGxpbmVzIGFzIHdlbGwgYXMgdG8gY29uc3RydWN0IHRoZSBmaWxlbmFtZS4KKyAgc25wcmludGYoZGF0YSwgc2l6ZW9mKGRhdGEpLCAiL3Byb2MvJWQvbWFwcyIsIHBpZCk7CisgIEZJTEUqIGZwID0gZm9wZW4oZGF0YSwgInIiKTsKKyAgaWYgKGZwICE9IE5VTEwpIHsKKyAgICB3aGlsZSAoZmdldHMoZGF0YSwgc2l6ZW9mKGRhdGEpLCBmcCkgIT0gTlVMTCkgeworICAgICAgbWFwaW5mb190KiBtaSA9IHBhcnNlX21hcHNfbGluZShkYXRhKTsKKyAgICAgIGlmIChtaSkgeworICAgICAgICBtaS0+bmV4dCA9IG1pbGlzdDsKKyAgICAgICAgbWlsaXN0ID0gbWk7CisgICAgICB9CisgICAgfQorICAgIGZjbG9zZShmcCk7CisgIH0KKyAgcmV0dXJuIG1pbGlzdDsKK30KKworX19MSUJDX0hJRERFTl9fIHZvaWQgbWFwaW5mb19kZXN0cm95KG1hcGluZm9fdCogbWkpIHsKKyAgd2hpbGUgKG1pICE9IE5VTEwpIHsKKyAgICBtYXBpbmZvX3QqIGRlbCA9IG1pOworICAgIG1pID0gbWktPm5leHQ7CisgICAgZGxmcmVlKGRlbCk7CisgIH0KK30KKworLy8gRmluZCB0aGUgY29udGFpbmluZyBtYXAgaW5mbyBmb3IgdGhlIFBDLgorX19MSUJDX0hJRERFTl9fIGNvbnN0IG1hcGluZm9fdCogbWFwaW5mb19maW5kKG1hcGluZm9fdCogbWksIHVpbnRwdHJfdCBwYywgdWludHB0cl90KiByZWxfcGMpIHsKKyAgZm9yICg7IG1pICE9IE5VTEw7IG1pID0gbWktPm5leHQpIHsKKyAgICBpZiAoKHBjID49IG1pLT5zdGFydCkgJiYgKHBjIDwgbWktPmVuZCkpIHsKKyAgICAgICpyZWxfcGMgPSBwYyAtIG1pLT5zdGFydDsKKyAgICAgIHJldHVybiBtaTsKKyAgICB9CisgIH0KKyAgKnJlbF9wYyA9IHBjOworICByZXR1cm4gTlVMTDsKK30KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL2RlYnVnX21hcGluZm8uaCBiL2xpYmMvYmlvbmljL2RlYnVnX21hcGluZm8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jY2NkMmUzCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9iaW9uaWMvZGVidWdfbWFwaW5mby5oCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBERUJVR19NQVBJTkZPX0gKKyNkZWZpbmUgREVCVUdfTUFQSU5GT19ICisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKworc3RydWN0IG1hcGluZm9fdCB7CisgIHN0cnVjdCBtYXBpbmZvX3QqIG5leHQ7CisgIHVuc2lnbmVkIHN0YXJ0OworICB1bnNpZ25lZCBlbmQ7CisgIGNoYXIgbmFtZVtdOworfTsKKworX19MSUJDX0hJRERFTl9fIG1hcGluZm9fdCogbWFwaW5mb19jcmVhdGUocGlkX3QgcGlkKTsKK19fTElCQ19ISURERU5fXyB2b2lkIG1hcGluZm9fZGVzdHJveShtYXBpbmZvX3QqIG1pKTsKK19fTElCQ19ISURERU5fXyBjb25zdCBtYXBpbmZvX3QqIG1hcGluZm9fZmluZChtYXBpbmZvX3QqIG1pLCB1aW50cHRyX3QgcGMsIHVpbnRwdHJfdCogcmVsX3BjKTsKKworI2VuZGlmIC8qIERFQlVHX01BUElORk9fSCAqLwpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvZGVidWdfc3RhY2t0cmFjZS5jcHAgYi9saWJjL2Jpb25pYy9kZWJ1Z19zdGFja3RyYWNlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYjkzM2U2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9iaW9uaWMvZGVidWdfc3RhY2t0cmFjZS5jcHAKQEAgLTAsMCArMSwxNjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImRlYnVnX3N0YWNrdHJhY2UuaCIKKworI2luY2x1ZGUgPGRsZmNuLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8dW53aW5kLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisKKyNpbmNsdWRlICJkZWJ1Z19tYXBpbmZvLmgiCisjaW5jbHVkZSAibGliY19sb2dnaW5nLmgiCisKKy8qIGRlcGVuZHMgaG93IHRoZSBzeXN0ZW0gaW5jbHVkZXMgZGVmaW5lIHRoaXMgKi8KKyNpZmRlZiBIQVZFX1VOV0lORF9DT05URVhUX1NUUlVDVAordHlwZWRlZiBzdHJ1Y3QgX1Vud2luZF9Db250ZXh0IF9fdW53aW5kX2NvbnRleHQ7CisjZWxzZQordHlwZWRlZiBfVW53aW5kX0NvbnRleHQgX191bndpbmRfY29udGV4dDsKKyNlbmRpZgorCitzdGF0aWMgbWFwaW5mb190KiBnTWFwSW5mbyA9IE5VTEw7CitzdGF0aWMgdm9pZCogZ0RlbWFuZ2xlcjsKK3R5cGVkZWYgY2hhciogKCpEZW1hbmdsZXJGbikoY29uc3QgY2hhciosIGNoYXIqLCBzaXplX3QqLCBpbnQqKTsKK3N0YXRpYyBEZW1hbmdsZXJGbiBnRGVtYW5nbGVyRm4gPSBOVUxMOworCitfX0xJQkNfSElEREVOX18gdm9pZCBiYWNrdHJhY2Vfc3RhcnR1cCgpIHsKKyAgZ01hcEluZm8gPSBtYXBpbmZvX2NyZWF0ZShnZXRwaWQoKSk7CisgIGdEZW1hbmdsZXIgPSBkbG9wZW4oImxpYmdjY2RlbWFuZ2xlLnNvIiwgUlRMRF9OT1cpOworICBpZiAoZ0RlbWFuZ2xlciAhPSBOVUxMKSB7CisgICAgdm9pZCogc3ltID0gZGxzeW0oZ0RlbWFuZ2xlciwgIl9fY3hhX2RlbWFuZ2xlIik7CisgICAgZ0RlbWFuZ2xlckZuID0gcmVpbnRlcnByZXRfY2FzdDxEZW1hbmdsZXJGbj4oc3ltKTsKKyAgfQorfQorCitfX0xJQkNfSElEREVOX18gdm9pZCBiYWNrdHJhY2Vfc2h1dGRvd24oKSB7CisgIG1hcGluZm9fZGVzdHJveShnTWFwSW5mbyk7CisgIGRsY2xvc2UoZ0RlbWFuZ2xlcik7Cit9CisKK3N0YXRpYyBjaGFyKiBkZW1hbmdsZShjb25zdCBjaGFyKiBzeW1ib2wpIHsKKyAgaWYgKGdEZW1hbmdsZXJGbiA9PSBOVUxMKSB7CisgICAgcmV0dXJuIE5VTEw7CisgIH0KKyAgcmV0dXJuICgqZ0RlbWFuZ2xlckZuKShzeW1ib2wsIE5VTEwsIE5VTEwsIE5VTEwpOworfQorCitzdHJ1Y3Qgc3RhY2tfY3Jhd2xfc3RhdGVfdCB7CisgIHVpbnRwdHJfdCogZnJhbWVzOworICBzaXplX3QgZnJhbWVfY291bnQ7CisgIHNpemVfdCBtYXhfZGVwdGg7CisgIGJvb2wgaGF2ZV9za2lwcGVkX3NlbGY7CisKKyAgc3RhY2tfY3Jhd2xfc3RhdGVfdCh1aW50cHRyX3QqIGZyYW1lcywgc2l6ZV90IG1heF9kZXB0aCkKKyAgICAgIDogZnJhbWVzKGZyYW1lcyksIGZyYW1lX2NvdW50KDApLCBtYXhfZGVwdGgobWF4X2RlcHRoKSwgaGF2ZV9za2lwcGVkX3NlbGYoZmFsc2UpIHsKKyAgfQorfTsKKworc3RhdGljIF9VbndpbmRfUmVhc29uX0NvZGUgdHJhY2VfZnVuY3Rpb24oX191bndpbmRfY29udGV4dCogY29udGV4dCwgdm9pZCogYXJnKSB7CisgIHN0YWNrX2NyYXdsX3N0YXRlX3QqIHN0YXRlID0gc3RhdGljX2Nhc3Q8c3RhY2tfY3Jhd2xfc3RhdGVfdCo+KGFyZyk7CisKKyAgdWludHB0cl90IGlwID0gX1Vud2luZF9HZXRJUChjb250ZXh0KTsKKworICAvLyBUaGUgZmlyc3Qgc3RhY2sgZnJhbWUgaXMgZ2V0X2JhY2t0cmFjZSBpdHNlbGYuIFNraXAgaXQuCisgIGlmIChpcCAhPSAwICYmICFzdGF0ZS0+aGF2ZV9za2lwcGVkX3NlbGYpIHsKKyAgICBzdGF0ZS0+aGF2ZV9za2lwcGVkX3NlbGYgPSB0cnVlOworICAgIHJldHVybiBfVVJDX05PX1JFQVNPTjsKKyAgfQorCisjaWZkZWYgX19hcm1fXworICAvKgorICAgKiBUaGUgaW5zdHJ1Y3Rpb24gcG9pbnRlciBpcyBwb2ludGluZyBhdCB0aGUgaW5zdHJ1Y3Rpb24gYWZ0ZXIgdGhlIGJsKHgpLCBhbmQKKyAgICogdGhlIF9VbndpbmRfQmFja3RyYWNlIHJvdXRpbmUgYWxyZWFkeSBtYXNrcyB0aGUgVGh1bWIgbW9kZSBpbmRpY2F0b3IgKExTQgorICAgKiBpbiBQQykuIFNvIHdlIG5lZWQgdG8gZG8gYSBxdWljayBjaGVjayBoZXJlIHRvIGZpbmQgb3V0IGlmIHRoZSBwcmV2aW91cworICAgKiBpbnN0cnVjdGlvbiBpcyBhIFRodW1iLW1vZGUgQkxYKDIpLiBJZiBzbyBzdWJ0cmFjdCAyIG90aGVyd2lzZSA0IGZyb20gUEMuCisgICAqLworICBpZiAoaXAgIT0gMCkgeworICAgIHNob3J0KiBwdHIgPSByZWludGVycHJldF9jYXN0PHNob3J0Kj4oaXApOworICAgIC8vIFRodW1iIEJMWCgyKQorICAgIGlmICgoKihwdHItMSkgJiAweGZmODApID09IDB4NDc4MCkgeworICAgICAgaXAgLT0gMjsKKyAgICB9IGVsc2UgeworICAgICAgaXAgLT0gNDsKKyAgICB9CisgIH0KKyNlbmRpZgorCisgIHN0YXRlLT5mcmFtZXNbc3RhdGUtPmZyYW1lX2NvdW50KytdID0gaXA7CisgIHJldHVybiAoc3RhdGUtPmZyYW1lX2NvdW50ID49IHN0YXRlLT5tYXhfZGVwdGgpID8gX1VSQ19FTkRfT0ZfU1RBQ0sgOiBfVVJDX05PX1JFQVNPTjsKK30KKworX19MSUJDX0hJRERFTl9fIGludCBnZXRfYmFja3RyYWNlKHVpbnRwdHJfdCogZnJhbWVzLCBzaXplX3QgbWF4X2RlcHRoKSB7CisgIHN0YWNrX2NyYXdsX3N0YXRlX3Qgc3RhdGUoZnJhbWVzLCBtYXhfZGVwdGgpOworICBfVW53aW5kX0JhY2t0cmFjZSh0cmFjZV9mdW5jdGlvbiwgJnN0YXRlKTsKKyAgcmV0dXJuIHN0YXRlLmZyYW1lX2NvdW50OworfQorCitfX0xJQkNfSElEREVOX18gdm9pZCBsb2dfYmFja3RyYWNlKHVpbnRwdHJfdCogZnJhbWVzLCBzaXplX3QgZnJhbWVfY291bnQpIHsKKyAgdWludHB0cl90IHNlbGZfYnRbMTZdOworICBpZiAoZnJhbWVzID09IE5VTEwpIHsKKyAgICBmcmFtZV9jb3VudCA9IGdldF9iYWNrdHJhY2Uoc2VsZl9idCwgMTYpOworICAgIGZyYW1lcyA9IHNlbGZfYnQ7CisgIH0KKworICBfX2xpYmNfZm9ybWF0X2xvZyhBTkRST0lEX0xPR19FUlJPUiwgImxpYmMiLAorICAgICAgICAgICAgICAgICAgICAiKioqICoqKiAqKiogKioqICoqKiAqKiogKioqICoqKiAqKiogKioqICoqKiAqKiogKioqICoqKiAqKiogKioqXG4iKTsKKworICBmb3IgKHNpemVfdCBpID0gMCA7IGkgPCBmcmFtZV9jb3VudDsgKytpKSB7CisgICAgdm9pZCogb2Zmc2V0ID0gMDsKKyAgICBjb25zdCBjaGFyKiBzeW1ib2wgPSBOVUxMOworCisgICAgRGxfaW5mbyBpbmZvOworICAgIGlmIChkbGFkZHIoKHZvaWQqKSBmcmFtZXNbaV0sICZpbmZvKSAhPSAwKSB7CisgICAgICBvZmZzZXQgPSBpbmZvLmRsaV9zYWRkcjsKKyAgICAgIHN5bWJvbCA9IGluZm8uZGxpX3NuYW1lOworICAgIH0KKworICAgIHVpbnRwdHJfdCByZWxfcGM7CisgICAgY29uc3QgbWFwaW5mb190KiBtaSA9IChnTWFwSW5mbyAhPSBOVUxMKSA/IG1hcGluZm9fZmluZChnTWFwSW5mbywgZnJhbWVzW2ldLCAmcmVsX3BjKSA6IE5VTEw7CisgICAgY29uc3QgY2hhciogc29uYW1lID0gKG1pICE9IE5VTEwpID8gbWktPm5hbWUgOiBpbmZvLmRsaV9mbmFtZTsKKyAgICBpZiAoc29uYW1lID09IE5VTEwpIHsKKyAgICAgIHNvbmFtZSA9ICI8dW5rbm93bj4iOworICAgIH0KKyAgICBpZiAoc3ltYm9sICE9IE5VTEwpIHsKKyAgICAgIC8vIFRPRE86IHdlIG1pZ2h0IG5lZWQgYSBmbGFnIHRvIHNheSB3aGV0aGVyIGl0J3Mgc2FmZSB0byBhbGxvY2F0ZSAoZGVtYW5nbGluZyBhbGxvY2F0ZXMpLgorICAgICAgY2hhciogZGVtYW5nbGVkX3N5bWJvbCA9IGRlbWFuZ2xlKHN5bWJvbCk7CisgICAgICBjb25zdCBjaGFyKiBiZXN0X25hbWUgPSAoZGVtYW5nbGVkX3N5bWJvbCAhPSBOVUxMKSA/IGRlbWFuZ2xlZF9zeW1ib2wgOiBzeW1ib2w7CisKKyAgICAgIF9fbGliY19mb3JtYXRfbG9nKEFORFJPSURfTE9HX0VSUk9SLCAibGliYyIsICIgICAgICAgICAgIyUwMmQgIHBjICUwOHggICVzICglcysweCV4KSIsCisgICAgICAgICAgICAgICAgICAgICAgICBpLCByZWxfcGMsIHNvbmFtZSwgYmVzdF9uYW1lLCBmcmFtZXNbaV0gLSAodWludHB0cl90KSBvZmZzZXQpOworCisgICAgICBmcmVlKGRlbWFuZ2xlZF9zeW1ib2wpOworICAgIH0gZWxzZSB7CisgICAgICBfX2xpYmNfZm9ybWF0X2xvZyhBTkRST0lEX0xPR19FUlJPUiwgImxpYmMiLCAiICAgICAgICAgICMlMDJkICBwYyAlMDh4ICAlcyIsCisgICAgICAgICAgICAgICAgICAgICAgICBpLCByZWxfcGMsIHNvbmFtZSk7CisgICAgfQorICB9Cit9CmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9kZWJ1Z19zdGFja3RyYWNlLmggYi9saWJjL2Jpb25pYy9kZWJ1Z19zdGFja3RyYWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmNmODYzNgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYmlvbmljL2RlYnVnX3N0YWNrdHJhY2UuaApAQCAtMCwwICsxLDQwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgREVCVUdfU1RBQ0tUUkFDRV9ICisjZGVmaW5lIERFQlVHX1NUQUNLVFJBQ0VfSAorCisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisKK19fTElCQ19ISURERU5fXyB2b2lkIGJhY2t0cmFjZV9zdGFydHVwKCk7CitfX0xJQkNfSElEREVOX18gdm9pZCBiYWNrdHJhY2Vfc2h1dGRvd24oKTsKK19fTElCQ19ISURERU5fXyBpbnQgZ2V0X2JhY2t0cmFjZSh1aW50cHRyX3QqIHN0YWNrX2ZyYW1lcywgc2l6ZV90IG1heF9kZXB0aCk7CitfX0xJQkNfSElEREVOX18gdm9pZCBsb2dfYmFja3RyYWNlKHVpbnRwdHJfdCogc3RhY2tfZnJhbWVzLCBzaXplX3QgZnJhbWVfY291bnQpOworCisjZW5kaWYgLyogREVCVUdfU1RBQ0tUUkFDRV9IICovCmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9kaXJlbnQuY3BwIGIvbGliYy9iaW9uaWMvZGlyZW50LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNTY1Njk4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9iaW9uaWMvZGlyZW50LmNwcApAQCAtMCwwICsxLDE0OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8ZGlyZW50Lmg+CisKKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworI2luY2x1ZGUgInByaXZhdGUvRXJybm9SZXN0b3Jlci5oIgorI2luY2x1ZGUgInByaXZhdGUvU2NvcGVkUHRocmVhZE11dGV4TG9ja2VyLmgiCisKK3N0cnVjdCBESVIgeworICBpbnQgZmRfOworICBzaXplX3QgYXZhaWxhYmxlX2J5dGVzXzsKKyAgZGlyZW50KiBuZXh0XzsKKyAgcHRocmVhZF9tdXRleF90IG11dGV4XzsKKyAgZGlyZW50IGJ1ZmZfWzE1XTsKK307CisKK3N0YXRpYyBESVIqIF9fYWxsb2NhdGVfRElSKGludCBmZCkgeworICBESVIqIGQgPSByZWludGVycHJldF9jYXN0PERJUio+KG1hbGxvYyhzaXplb2YoRElSKSkpOworICBpZiAoZCA9PSBOVUxMKSB7CisgICAgcmV0dXJuIE5VTEw7CisgIH0KKyAgZC0+ZmRfID0gZmQ7CisgIGQtPmF2YWlsYWJsZV9ieXRlc18gPSAwOworICBkLT5uZXh0XyA9IE5VTEw7CisgIHB0aHJlYWRfbXV0ZXhfaW5pdCgmZC0+bXV0ZXhfLCBOVUxMKTsKKyAgcmV0dXJuIGQ7Cit9CisKK2ludCBkaXJmZChESVIqIGRpcnApIHsKKyAgcmV0dXJuIGRpcnAtPmZkXzsKK30KKworRElSKiBmZG9wZW5kaXIoaW50IGZkKSB7CisgIC8vIElzICdmZCcgYWN0dWFsbHkgYSBkaXJlY3Rvcnk/CisgIHN0cnVjdCBzdGF0IHNiOworICBpZiAoZnN0YXQoZmQsICZzYikgPT0gLTEpIHsKKyAgICByZXR1cm4gTlVMTDsKKyAgfQorICBpZiAoIVNfSVNESVIoc2Iuc3RfbW9kZSkpIHsKKyAgICBlcnJubyA9IEVOT1RESVI7CisgICAgcmV0dXJuIE5VTEw7CisgIH0KKworICByZXR1cm4gX19hbGxvY2F0ZV9ESVIoZmQpOworfQorCitESVIqIG9wZW5kaXIoY29uc3QgY2hhciogcGF0aCkgeworICBpbnQgZmQgPSBvcGVuKHBhdGgsIE9fUkRPTkxZIHwgT19ESVJFQ1RPUlkpOworICByZXR1cm4gKGZkICE9IC0xKSA/IF9fYWxsb2NhdGVfRElSKGZkKSA6IE5VTEw7Cit9CisKK3N0YXRpYyBib29sIF9fZmlsbF9ESVIoRElSKiBkKSB7CisgIGludCByYyA9IFRFTVBfRkFJTFVSRV9SRVRSWShnZXRkZW50cyhkLT5mZF8sIGQtPmJ1ZmZfLCBzaXplb2YoZC0+YnVmZl8pKSk7CisgIGlmIChyYyA8PSAwKSB7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisgIGQtPmF2YWlsYWJsZV9ieXRlc18gPSByYzsKKyAgZC0+bmV4dF8gPSBkLT5idWZmXzsKKyAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBkaXJlbnQqIF9fcmVhZGRpcl9sb2NrZWQoRElSKiBkKSB7CisgIGlmIChkLT5hdmFpbGFibGVfYnl0ZXNfID09IDAgJiYgIV9fZmlsbF9ESVIoZCkpIHsKKyAgICByZXR1cm4gTlVMTDsKKyAgfQorCisgIGRpcmVudCogZW50cnkgPSBkLT5uZXh0XzsKKyAgZC0+bmV4dF8gPSByZWludGVycHJldF9jYXN0PGRpcmVudCo+KHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGVudHJ5KSArIGVudHJ5LT5kX3JlY2xlbik7CisgIGQtPmF2YWlsYWJsZV9ieXRlc18gLT0gZW50cnktPmRfcmVjbGVuOworICByZXR1cm4gZW50cnk7Cit9CisKK2RpcmVudCogcmVhZGRpcihESVIqIGQpIHsKKyAgU2NvcGVkUHRocmVhZE11dGV4TG9ja2VyIGxvY2tlcigmZC0+bXV0ZXhfKTsKKyAgcmV0dXJuIF9fcmVhZGRpcl9sb2NrZWQoZCk7Cit9CisKK2ludCByZWFkZGlyX3IoRElSKiBkLCBkaXJlbnQqIGVudHJ5LCBkaXJlbnQqKiByZXN1bHQpIHsKKyAgRXJybm9SZXN0b3JlciBlcnJub19yZXN0b3JlcjsKKworICAqcmVzdWx0ID0gTlVMTDsKKyAgZXJybm8gPSAwOworCisgIFNjb3BlZFB0aHJlYWRNdXRleExvY2tlciBsb2NrZXIoJmQtPm11dGV4Xyk7CisKKyAgZGlyZW50KiBuZXh0ID0gX19yZWFkZGlyX2xvY2tlZChkKTsKKyAgaWYgKGVycm5vICE9IDAgJiYgbmV4dCA9PSBOVUxMKSB7CisgICAgcmV0dXJuIGVycm5vOworICB9CisKKyAgaWYgKG5leHQgIT0gTlVMTCkgeworICAgIG1lbWNweShlbnRyeSwgbmV4dCwgbmV4dC0+ZF9yZWNsZW4pOworICAgICpyZXN1bHQgPSBlbnRyeTsKKyAgfQorICByZXR1cm4gMDsKK30KKworaW50IGNsb3NlZGlyKERJUiogZCkgeworICBpZiAoZCA9PSBOVUxMKSB7CisgICAgZXJybm8gPSBFSU5WQUw7CisgICAgcmV0dXJuIC0xOworICB9CisKKyAgaW50IGZkID0gZC0+ZmRfOworICBwdGhyZWFkX211dGV4X2Rlc3Ryb3koJmQtPm11dGV4Xyk7CisgIGZyZWUoZCk7CisgIHJldHVybiBjbG9zZShmZCk7Cit9CisKK3ZvaWQgcmV3aW5kZGlyKERJUiogZCkgeworICBTY29wZWRQdGhyZWFkTXV0ZXhMb2NrZXIgbG9ja2VyKCZkLT5tdXRleF8pOworICBsc2VlayhkLT5mZF8sIDAsIFNFRUtfU0VUKTsKKyAgZC0+YXZhaWxhYmxlX2J5dGVzXyA9IDA7Cit9CisKK2ludCBhbHBoYXNvcnQoY29uc3QgZGlyZW50KiogYSwgY29uc3QgZGlyZW50KiogYikgeworICByZXR1cm4gc3RyY29sbCgoKmEpLT5kX25hbWUsICgqYiktPmRfbmFtZSk7Cit9CmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9kaXJuYW1lLmMgYi9saWJjL2Jpb25pYy9kaXJuYW1lLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhhMWRiOTAuLjAwMDAwMDAKLS0tIGEvbGliYy9iaW9uaWMvZGlybmFtZS5jCisrKyAvZGV2L251bGwKQEAgLTEsNTAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqICAgIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKLSAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi0gKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCi0gKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAotICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCi0gKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKLSAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgotCi0jaW5jbHVkZSA8ZXJybm8uaD4KLSNpbmNsdWRlIDxsaWJnZW4uaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KLQotY2hhcioKLWRpcm5hbWUoY29uc3QgY2hhciogIHBhdGgpCi17Ci0gICAgc3RhdGljIGNoYXIqICBibmFtZSA9IE5VTEw7Ci0gICAgaW50ICAgICAgICAgICByZXQ7Ci0KLSAgICBpZiAoYm5hbWUgPT0gTlVMTCkgewotICAgICAgICBibmFtZSA9IChjaGFyICopbWFsbG9jKE1BWFBBVEhMRU4pOwotICAgICAgICBpZiAoYm5hbWUgPT0gTlVMTCkKLSAgICAgICAgICAgIHJldHVybihOVUxMKTsKLSAgICB9Ci0KLSAgICByZXQgPSBkaXJuYW1lX3IocGF0aCwgYm5hbWUsIE1BWFBBVEhMRU4pOwotICAgIHJldHVybiAocmV0IDwgMCkgPyBOVUxMIDogYm5hbWU7Ci19CmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9kaXJuYW1lX3IuYyBiL2xpYmMvYmlvbmljL2Rpcm5hbWVfci5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZjJlOWJmLi4wMDAwMDAwCi0tLSBhL2xpYmMvYmlvbmljL2Rpcm5hbWVfci5jCisrKyAvZGV2L251bGwKQEAgLTEsODggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqICAgIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKLSAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi0gKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCi0gKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAotICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCi0gKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKLSAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotI2luY2x1ZGUgPGxpYmdlbi5oPgotI2luY2x1ZGUgPGVycm5vLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8c3lzL3BhcmFtLmg+Ci0KLWludAotZGlybmFtZV9yKGNvbnN0IGNoYXIqICBwYXRoLCBjaGFyKiAgYnVmZmVyLCBzaXplX3QgIGJ1ZmZsZW4pCi17Ci0gICAgY29uc3QgY2hhciAqZW5kcDsKLSAgICBpbnQgICAgICAgICByZXN1bHQsIGxlbjsKLQotICAgIC8qIEVtcHR5IG9yIE5VTEwgc3RyaW5nIGdldHMgdHJlYXRlZCBhcyAiLiIgKi8KLSAgICBpZiAocGF0aCA9PSBOVUxMIHx8ICpwYXRoID09ICdcMCcpIHsKLSAgICAgICAgcGF0aCA9ICIuIjsKLSAgICAgICAgbGVuICA9IDE7Ci0gICAgICAgIGdvdG8gRXhpdDsKLSAgICB9Ci0KLSAgICAvKiBTdHJpcCB0cmFpbGluZyBzbGFzaGVzICovCi0gICAgZW5kcCA9IHBhdGggKyBzdHJsZW4ocGF0aCkgLSAxOwotICAgIHdoaWxlIChlbmRwID4gcGF0aCAmJiAqZW5kcCA9PSAnLycpCi0gICAgICAgIGVuZHAtLTsKLQotICAgIC8qIEZpbmQgdGhlIHN0YXJ0IG9mIHRoZSBkaXIgKi8KLSAgICB3aGlsZSAoZW5kcCA+IHBhdGggJiYgKmVuZHAgIT0gJy8nKQotICAgICAgICBlbmRwLS07Ci0KLSAgICAvKiBFaXRoZXIgdGhlIGRpciBpcyAiLyIgb3IgdGhlcmUgYXJlIG5vIHNsYXNoZXMgKi8KLSAgICBpZiAoZW5kcCA9PSBwYXRoKSB7Ci0gICAgICAgIHBhdGggPSAoKmVuZHAgPT0gJy8nKSA/ICIvIiA6ICIuIjsKLSAgICAgICAgbGVuICA9IDE7Ci0gICAgICAgIGdvdG8gRXhpdDsKLSAgICB9Ci0KLSAgICBkbyB7Ci0gICAgICAgIGVuZHAtLTsKLSAgICB9IHdoaWxlIChlbmRwID4gcGF0aCAmJiAqZW5kcCA9PSAnLycpOwotCi0gICAgbGVuID0gZW5kcCAtIHBhdGggKzE7Ci0KLUV4aXQ6Ci0gICAgcmVzdWx0ID0gbGVuOwotICAgIGlmIChsZW4rMSA+IE1BWFBBVEhMRU4pIHsKLSAgICAgICAgZXJybm8gPSBFTkFNRVRPT0xPTkc7Ci0gICAgICAgIHJldHVybiAtMTsKLSAgICB9Ci0gICAgaWYgKGJ1ZmZlciA9PSBOVUxMKQotICAgICAgICByZXR1cm4gcmVzdWx0OwotCi0gICAgaWYgKGxlbiA+IChpbnQpYnVmZmxlbi0xKSB7Ci0gICAgICAgIGxlbiAgICA9IChpbnQpYnVmZmxlbi0xOwotICAgICAgICByZXN1bHQgPSAtMTsKLSAgICAgICAgZXJybm8gID0gRVJBTkdFOwotICAgIH0KLQotICAgIGlmIChsZW4gPj0gMCkgewotICAgICAgICBtZW1jcHkoIGJ1ZmZlciwgcGF0aCwgbGVuICk7Ci0gICAgICAgIGJ1ZmZlcltsZW5dID0gMDsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL2RsX2l0ZXJhdGVfcGhkcl9zdGF0aWMuYyBiL2xpYmMvYmlvbmljL2RsX2l0ZXJhdGVfcGhkcl9zdGF0aWMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYzc5Y2U1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9iaW9uaWMvZGxfaXRlcmF0ZV9waGRyX3N0YXRpYy5jCkBAIC0wLDAgKzEsODIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPGVsZi5oPgorI2luY2x1ZGUgPHN5cy9hdXh2Lmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8bGluay5oPgorCisvKiBsZCBwcm92aWRlcyB0aGlzIHRvIHVzIGluIHRoZSBkZWZhdWx0IGxpbmsgc2NyaXB0ICovCitleHRlcm4gdm9pZCogX19leGVjdXRhYmxlX3N0YXJ0OworCitpbnQgZGxfaXRlcmF0ZV9waGRyKGludCAoKmNiKShzdHJ1Y3QgZGxfcGhkcl9pbmZvKiBpbmZvLCBzaXplX3Qgc2l6ZSwgdm9pZCogZGF0YSksIHZvaWQqIGRhdGEpIHsKKyAgICBFbGYzMl9FaGRyKiBlaGRyID0gKEVsZjMyX0VoZHIqKSAmX19leGVjdXRhYmxlX3N0YXJ0OworCisgICAgLy8gVE9ETzogYWdhaW4sIGNvcGllZCBmcm9tIGxpbmtlci5jLiBGaW5kIGEgYmV0dGVyIGhvbWUgZm9yIHRoaXMgbGF0ZXIuCisgICAgaWYgKGVoZHItPmVfaWRlbnRbRUlfTUFHMF0gIT0gRUxGTUFHMCkgcmV0dXJuIC0xOworICAgIGlmIChlaGRyLT5lX2lkZW50W0VJX01BRzFdICE9IEVMRk1BRzEpIHJldHVybiAtMTsKKyAgICBpZiAoZWhkci0+ZV9pZGVudFtFSV9NQUcyXSAhPSBFTEZNQUcyKSByZXR1cm4gLTE7CisgICAgaWYgKGVoZHItPmVfaWRlbnRbRUlfTUFHM10gIT0gRUxGTUFHMykgcmV0dXJuIC0xOworCisgICAgLy8gRHluYW1pYyBiaW5hcmllcyBnZXQgdGhlaXIgZGxfaXRlcmF0ZV9waGRyIGZyb20gdGhlIGR5bmFtaWMgbGlua2VyLCBidXQKKyAgICAvLyBzdGF0aWMgYmluYXJpZXMgZ2V0IHRoaXMuIFdlIGRvbid0IGhhdmUgYSBsaXN0IG9mIHNoYXJlZCBvYmplY3RzIHRvCisgICAgLy8gaXRlcmF0ZSBvdmVyLCBzaW5jZSB0aGVyZSdzIHJlYWxseSBvbmx5IGEgc2luZ2xlIG1vbm9saXRoaWMgYmxvYiBvZgorICAgIC8vIGNvZGUvZGF0YSwgcGx1cyBvcHRpb25hbGx5IGEgVkRTTy4KKworICAgIHN0cnVjdCBkbF9waGRyX2luZm8gZXhlX2luZm87CisgICAgZXhlX2luZm8uZGxwaV9hZGRyID0gMDsKKyAgICBleGVfaW5mby5kbHBpX25hbWUgPSBOVUxMOworICAgIGV4ZV9pbmZvLmRscGlfcGhkciA9IChFbGYzMl9QaGRyKikgKCh1bnNpZ25lZCBsb25nKSBlaGRyICsgZWhkci0+ZV9waG9mZik7CisgICAgZXhlX2luZm8uZGxwaV9waG51bSA9IGVoZHItPmVfcGhudW07CisKKyNpZmRlZiBBVF9TWVNJTkZPX0VIRFIKKyAgICAvLyBUcnkgdGhlIGV4ZWN1dGFibGUgZmlyc3QuCisgICAgaW50IHJjID0gY2IoJmV4ZV9pbmZvLCBzaXplb2YoZXhlX2luZm8pLCBkYXRhKTsKKyAgICBpZiAocmMgIT0gMCkgeworICAgICAgICByZXR1cm4gcmM7CisgICAgfQorCisgICAgLy8gVHJ5IHRoZSBWRFNPIGlmIHRoYXQgZGlkbid0IHdvcmsuCisgICAgRWxmMzJfRWhkciogZWhkcl92ZHNvID0gKEVsZjMyX0VoZHIqKSBnZXRhdXh2YWwoQVRfU1lTSU5GT19FSERSKTsKKyAgICBzdHJ1Y3QgZGxfcGhkcl9pbmZvIHZkc29faW5mbzsKKyAgICB2ZHNvX2luZm8uZGxwaV9hZGRyID0gMDsKKyAgICB2ZHNvX2luZm8uZGxwaV9uYW1lID0gTlVMTDsKKyAgICB2ZHNvX2luZm8uZGxwaV9waGRyID0gKEVsZjMyX1BoZHIqKSAoKGNoYXIqKSBlaGRyX3Zkc28gKyBlaGRyX3Zkc28tPmVfcGhvZmYpOworICAgIHZkc29faW5mby5kbHBpX3BobnVtID0gZWhkcl92ZHNvLT5lX3BobnVtOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdmRzb19pbmZvLmRscGlfcGhudW07ICsraSkgeworICAgICAgICBpZiAodmRzb19pbmZvLmRscGlfcGhkcltpXS5wX3R5cGUgPT0gUFRfTE9BRCkgeworICAgICAgICAgICAgdmRzb19pbmZvLmRscGlfYWRkciA9IChFbGYzMl9BZGRyKSBlaGRyX3Zkc28gLSB2ZHNvX2luZm8uZGxwaV9waGRyW2ldLnBfdmFkZHI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gY2IoJnZkc29faW5mbywgc2l6ZW9mKHZkc29faW5mbyksIGRhdGEpOworI2Vsc2UKKyAgICAvLyBUaGVyZSdzIG9ubHkgdGhlIGV4ZWN1dGFibGUgdG8gdHJ5LgorICAgIHJldHVybiBjYigmZXhlX2luZm8sIHNpemVvZihleGVfaW5mbyksIGRhdGEpOworI2VuZGlmCit9CmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9kbG1hbGxvYy5jIGIvbGliYy9iaW9uaWMvZGxtYWxsb2MuYwppbmRleCA0OTZjZDFjLi43OGYyZTFkIDEwMDY0NAotLS0gYS9saWJjL2Jpb25pYy9kbG1hbGxvYy5jCisrKyBiL2xpYmMvYmlvbmljL2RsbWFsbG9jLmMKQEAgLTEsNTUxOCArMSw0NCBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKICAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0gKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiAgICBkaXN0cmlidXRpb24uCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAogICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUwotICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKLSAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCi0gKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKLSAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAotICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0gKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KICAqLwotLyoKLSAgVGhpcyBpcyBhIHZlcnNpb24gKGFrYSBkbG1hbGxvYykgb2YgbWFsbG9jL2ZyZWUvcmVhbGxvYyB3cml0dGVuIGJ5Ci0gIERvdWcgTGVhIGFuZCByZWxlYXNlZCB0byB0aGUgcHVibGljIGRvbWFpbiwgYXMgZXhwbGFpbmVkIGF0Ci0gIGh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL2xpY2Vuc2VzL3B1YmxpY2RvbWFpbi4gIFNlbmQgcXVlc3Rpb25zLAotICBjb21tZW50cywgY29tcGxhaW50cywgcGVyZm9ybWFuY2UgZGF0YSwgZXRjIHRvIGRsQGNzLm9zd2Vnby5lZHUKIAotKiBWZXJzaW9uIDIuOC4zIFRodSBTZXAgMjIgMTE6MTY6MTUgMjAwNSAgRG91ZyBMZWEgIChkbCBhdCBnZWUpCisjaW5jbHVkZSAiZGxtYWxsb2MuaCIKIAotICAgTm90ZTogVGhlcmUgbWF5IGJlIGFuIHVwZGF0ZWQgdmVyc2lvbiBvZiB0aGlzIG1hbGxvYyBvYnRhaW5hYmxlIGF0Ci0gICAgICAgICAgIGZ0cDovL2dlZS5jcy5vc3dlZ28uZWR1L3B1Yi9taXNjL21hbGxvYy5jCi0gICAgICAgICBDaGVjayBiZWZvcmUgaW5zdGFsbGluZyEKKyNpbmNsdWRlICJwcml2YXRlL2xpYmNfbG9nZ2luZy5oIgogCi0qIFF1aWNrc3RhcnQKLQotICBUaGlzIGxpYnJhcnkgaXMgYWxsIGluIG9uZSBmaWxlIHRvIHNpbXBsaWZ5IHRoZSBtb3N0IGNvbW1vbiB1c2FnZToKLSAgZnRwIGl0LCBjb21waWxlIGl0ICgtTzMpLCBhbmQgbGluayBpdCBpbnRvIGFub3RoZXIgcHJvZ3JhbS4gQWxsIG9mCi0gIHRoZSBjb21waWxlLXRpbWUgb3B0aW9ucyBkZWZhdWx0IHRvIHJlYXNvbmFibGUgdmFsdWVzIGZvciB1c2Ugb24KLSAgbW9zdCBwbGF0Zm9ybXMuICBZb3UgbWlnaHQgbGF0ZXIgd2FudCB0byBzdGVwIHRocm91Z2ggdmFyaW91cwotICBjb21waWxlLXRpbWUgYW5kIGR5bmFtaWMgdHVuaW5nIG9wdGlvbnMuCi0KLSAgRm9yIGNvbnZlbmllbmNlLCBhbiBpbmNsdWRlIGZpbGUgZm9yIGNvZGUgdXNpbmcgdGhpcyBtYWxsb2MgaXMgYXQ6Ci0gICAgIGZ0cDovL2dlZS5jcy5vc3dlZ28uZWR1L3B1Yi9taXNjL21hbGxvYy0yLjguMy5oCi0gIFlvdSBkb24ndCByZWFsbHkgbmVlZCB0aGlzIC5oIGZpbGUgdW5sZXNzIHlvdSBjYWxsIGZ1bmN0aW9ucyBub3QKLSAgZGVmaW5lZCBpbiB5b3VyIHN5c3RlbSBpbmNsdWRlIGZpbGVzLiAgVGhlIC5oIGZpbGUgY29udGFpbnMgb25seSB0aGUKLSAgZXhjZXJwdHMgZnJvbSB0aGlzIGZpbGUgbmVlZGVkIGZvciB1c2luZyB0aGlzIG1hbGxvYyBvbiBBTlNJIEMvQysrCi0gIHN5c3RlbXMsIHNvIGxvbmcgYXMgeW91IGhhdmVuJ3QgY2hhbmdlZCBjb21waWxlLXRpbWUgb3B0aW9ucyBhYm91dAotICBuYW1pbmcgYW5kIHR1bmluZyBwYXJhbWV0ZXJzLiAgSWYgeW91IGRvLCB0aGVuIHlvdSBjYW4gY3JlYXRlIHlvdXIKLSAgb3duIG1hbGxvYy5oIHRoYXQgZG9lcyBpbmNsdWRlIGFsbCBzZXR0aW5ncyBieSBjdXR0aW5nIGF0IHRoZSBwb2ludAotICBpbmRpY2F0ZWQgYmVsb3cuIE5vdGUgdGhhdCB5b3UgbWF5IGFscmVhZHkgYnkgZGVmYXVsdCBiZSB1c2luZyBhIEMKLSAgbGlicmFyeSBjb250YWluaW5nIGEgbWFsbG9jIHRoYXQgaXMgYmFzZWQgb24gc29tZSB2ZXJzaW9uIG9mIHRoaXMKLSAgbWFsbG9jIChmb3IgZXhhbXBsZSBpbiBsaW51eCkuIFlvdSBtaWdodCBzdGlsbCB3YW50IHRvIHVzZSB0aGUgb25lCi0gIGluIHRoaXMgZmlsZSB0byBjdXN0b21pemUgc2V0dGluZ3Mgb3IgdG8gYXZvaWQgb3ZlcmhlYWRzIGFzc29jaWF0ZWQKLSAgd2l0aCBsaWJyYXJ5IHZlcnNpb25zLgotCi0qIFZpdGFsIHN0YXRpc3RpY3M6Ci0KLSAgU3VwcG9ydGVkIHBvaW50ZXIvc2l6ZV90IHJlcHJlc2VudGF0aW9uOiAgICAgICA0IG9yIDggYnl0ZXMKLSAgICAgICBzaXplX3QgTVVTVCBiZSBhbiB1bnNpZ25lZCB0eXBlIG9mIHRoZSBzYW1lIHdpZHRoIGFzCi0gICAgICAgcG9pbnRlcnMuIChJZiB5b3UgYXJlIHVzaW5nIGFuIGFuY2llbnQgc3lzdGVtIHRoYXQgZGVjbGFyZXMKLSAgICAgICBzaXplX3QgYXMgYSBzaWduZWQgdHlwZSwgb3IgbmVlZCBpdCB0byBiZSBhIGRpZmZlcmVudCB3aWR0aAotICAgICAgIHRoYW4gcG9pbnRlcnMsIHlvdSBjYW4gdXNlIGEgcHJldmlvdXMgcmVsZWFzZSBvZiB0aGlzIG1hbGxvYwotICAgICAgIChlLmcuIDIuNy4yKSBzdXBwb3J0aW5nIHRoZXNlLikKLQotICBBbGlnbm1lbnQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDggYnl0ZXMgKGRlZmF1bHQpCi0gICAgICAgVGhpcyBzdWZmaWNlcyBmb3IgbmVhcmx5IGFsbCBjdXJyZW50IG1hY2hpbmVzIGFuZCBDIGNvbXBpbGVycy4KLSAgICAgICBIb3dldmVyLCB5b3UgY2FuIGRlZmluZSBNQUxMT0NfQUxJR05NRU5UIHRvIGJlIHdpZGVyIHRoYW4gdGhpcwotICAgICAgIGlmIG5lY2Vzc2FyeSAodXAgdG8gMTI4Ynl0ZXMpLCBhdCB0aGUgZXhwZW5zZSBvZiB1c2luZyBtb3JlIHNwYWNlLgotCi0gIE1pbmltdW0gb3ZlcmhlYWQgcGVyIGFsbG9jYXRlZCBjaHVuazogICA0IG9yICA4IGJ5dGVzIChpZiA0Ynl0ZSBzaXplcykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDggb3IgMTYgYnl0ZXMgKGlmIDhieXRlIHNpemVzKQotICAgICAgIEVhY2ggbWFsbG9jZWQgY2h1bmsgaGFzIGEgaGlkZGVuIHdvcmQgb2Ygb3ZlcmhlYWQgaG9sZGluZyBzaXplCi0gICAgICAgYW5kIHN0YXR1cyBpbmZvcm1hdGlvbiwgYW5kIGFkZGl0aW9uYWwgY3Jvc3MtY2hlY2sgd29yZAotICAgICAgIGlmIEZPT1RFUlMgaXMgZGVmaW5lZC4KLQotICBNaW5pbXVtIGFsbG9jYXRlZCBzaXplOiA0LWJ5dGUgcHRyczogIDE2IGJ5dGVzICAgIChpbmNsdWRpbmcgb3ZlcmhlYWQpCi0gICAgICAgICAgICAgICAgICAgICAgICAgIDgtYnl0ZSBwdHJzOiAgMzIgYnl0ZXMgICAgKGluY2x1ZGluZyBvdmVyaGVhZCkKLQotICAgICAgIEV2ZW4gYSByZXF1ZXN0IGZvciB6ZXJvIGJ5dGVzIChpLmUuLCBtYWxsb2MoMCkpIHJldHVybnMgYQotICAgICAgIHBvaW50ZXIgdG8gc29tZXRoaW5nIG9mIHRoZSBtaW5pbXVtIGFsbG9jYXRhYmxlIHNpemUuCi0gICAgICAgVGhlIG1heGltdW0gb3ZlcmhlYWQgd2FzdGFnZSAoaS5lLiwgbnVtYmVyIG9mIGV4dHJhIGJ5dGVzCi0gICAgICAgYWxsb2NhdGVkIHRoYW4gd2VyZSByZXF1ZXN0ZWQgaW4gbWFsbG9jKSBpcyBsZXNzIHRoYW4gb3IgZXF1YWwKLSAgICAgICB0byB0aGUgbWluaW11bSBzaXplLCBleGNlcHQgZm9yIHJlcXVlc3RzID49IG1tYXBfdGhyZXNob2xkIHRoYXQKLSAgICAgICBhcmUgc2VydmljZWQgdmlhIG1tYXAoKSwgd2hlcmUgdGhlIHdvcnN0IGNhc2Ugd2FzdGFnZSBpcyBhYm91dAotICAgICAgIDMyIGJ5dGVzIHBsdXMgdGhlIHJlbWFpbmRlciBmcm9tIGEgc3lzdGVtIHBhZ2UgKHRoZSBtaW5pbWFsCi0gICAgICAgbW1hcCB1bml0KTsgdHlwaWNhbGx5IDQwOTYgb3IgODE5MiBieXRlcy4KLQotICBTZWN1cml0eTogc3RhdGljLXNhZmU7IG9wdGlvbmFsbHkgbW9yZSBvciBsZXNzCi0gICAgICAgVGhlICJzZWN1cml0eSIgb2YgbWFsbG9jIHJlZmVycyB0byB0aGUgYWJpbGl0eSBvZiBtYWxpY2lvdXMKLSAgICAgICBjb2RlIHRvIGFjY2VudHVhdGUgdGhlIGVmZmVjdHMgb2YgZXJyb3JzIChmb3IgZXhhbXBsZSwgZnJlZWluZwotICAgICAgIHNwYWNlIHRoYXQgaXMgbm90IGN1cnJlbnRseSBtYWxsb2MnZWQgb3Igb3ZlcndyaXRpbmcgcGFzdCB0aGUKLSAgICAgICBlbmRzIG9mIGNodW5rcykgaW4gY29kZSB0aGF0IGNhbGxzIG1hbGxvYy4gIFRoaXMgbWFsbG9jCi0gICAgICAgZ3VhcmFudGVlcyBub3QgdG8gbW9kaWZ5IGFueSBtZW1vcnkgbG9jYXRpb25zIGJlbG93IHRoZSBiYXNlIG9mCi0gICAgICAgaGVhcCwgaS5lLiwgc3RhdGljIHZhcmlhYmxlcywgZXZlbiBpbiB0aGUgcHJlc2VuY2Ugb2YgdXNhZ2UKLSAgICAgICBlcnJvcnMuICBUaGUgcm91dGluZXMgYWRkaXRpb25hbGx5IGRldGVjdCBtb3N0IGltcHJvcGVyIGZyZWVzCi0gICAgICAgYW5kIHJlYWxsb2NzLiAgQWxsIHRoaXMgaG9sZHMgYXMgbG9uZyBhcyB0aGUgc3RhdGljIGJvb2trZWVwaW5nCi0gICAgICAgZm9yIG1hbGxvYyBpdHNlbGYgaXMgbm90IGNvcnJ1cHRlZCBieSBzb21lIG90aGVyIG1lYW5zLiAgVGhpcwotICAgICAgIGlzIG9ubHkgb25lIGFzcGVjdCBvZiBzZWN1cml0eSAtLSB0aGVzZSBjaGVja3MgZG8gbm90LCBhbmQKLSAgICAgICBjYW5ub3QsIGRldGVjdCBhbGwgcG9zc2libGUgcHJvZ3JhbW1pbmcgZXJyb3JzLgotCi0gICAgICAgSWYgRk9PVEVSUyBpcyBkZWZpbmVkIG5vbnplcm8sIHRoZW4gZWFjaCBhbGxvY2F0ZWQgY2h1bmsKLSAgICAgICBjYXJyaWVzIGFuIGFkZGl0aW9uYWwgY2hlY2sgd29yZCB0byB2ZXJpZnkgdGhhdCBpdCB3YXMgbWFsbG9jZWQKLSAgICAgICBmcm9tIGl0cyBzcGFjZS4gIFRoZXNlIGNoZWNrIHdvcmRzIGFyZSB0aGUgc2FtZSB3aXRoaW4gZWFjaAotICAgICAgIGV4ZWN1dGlvbiBvZiBhIHByb2dyYW0gdXNpbmcgbWFsbG9jLCBidXQgZGlmZmVyIGFjcm9zcwotICAgICAgIGV4ZWN1dGlvbnMsIHNvIGV4dGVybmFsbHkgY3JhZnRlZCBmYWtlIGNodW5rcyBjYW5ub3QgYmUKLSAgICAgICBmcmVlZC4gVGhpcyBpbXByb3ZlcyBzZWN1cml0eSBieSByZWplY3RpbmcgZnJlZXMvcmVhbGxvY3MgdGhhdAotICAgICAgIGNvdWxkIGNvcnJ1cHQgaGVhcCBtZW1vcnksIGluIGFkZGl0aW9uIHRvIHRoZSBjaGVja3MgcHJldmVudGluZwotICAgICAgIHdyaXRlcyB0byBzdGF0aWNzIHRoYXQgYXJlIGFsd2F5cyBvbi4gIFRoaXMgbWF5IGZ1cnRoZXIgaW1wcm92ZQotICAgICAgIHNlY3VyaXR5IGF0IHRoZSBleHBlbnNlIG9mIHRpbWUgYW5kIHNwYWNlIG92ZXJoZWFkLiAgKE5vdGUgdGhhdAotICAgICAgIEZPT1RFUlMgbWF5IGFsc28gYmUgd29ydGggdXNpbmcgd2l0aCBNU1BBQ0VTLikKLQotICAgICAgIEJ5IGRlZmF1bHQgZGV0ZWN0ZWQgZXJyb3JzIGNhdXNlIHRoZSBwcm9ncmFtIHRvIGFib3J0IChjYWxsaW5nCi0gICAgICAgImFib3J0KCkiKS4gWW91IGNhbiBvdmVycmlkZSB0aGlzIHRvIGluc3RlYWQgcHJvY2VlZCBwYXN0Ci0gICAgICAgZXJyb3JzIGJ5IGRlZmluaW5nIFBST0NFRURfT05fRVJST1IuICBJbiB0aGlzIGNhc2UsIGEgYmFkIGZyZWUKLSAgICAgICBoYXMgbm8gZWZmZWN0LCBhbmQgYSBtYWxsb2MgdGhhdCBlbmNvdW50ZXJzIGEgYmFkIGFkZHJlc3MKLSAgICAgICBjYXVzZWQgYnkgdXNlciBvdmVyd3JpdGVzIHdpbGwgaWdub3JlIHRoZSBiYWQgYWRkcmVzcyBieQotICAgICAgIGRyb3BwaW5nIHBvaW50ZXJzIGFuZCBpbmRpY2VzIHRvIGFsbCBrbm93biBtZW1vcnkuIFRoaXMgbWF5Ci0gICAgICAgYmUgYXBwcm9wcmlhdGUgZm9yIHByb2dyYW1zIHRoYXQgc2hvdWxkIGNvbnRpbnVlIGlmIGF0IGFsbAotICAgICAgIHBvc3NpYmxlIGluIHRoZSBmYWNlIG9mIHByb2dyYW1taW5nIGVycm9ycywgYWx0aG91Z2ggdGhleSBtYXkKLSAgICAgICBydW4gb3V0IG9mIG1lbW9yeSBiZWNhdXNlIGRyb3BwZWQgbWVtb3J5IGlzIG5ldmVyIHJlY2xhaW1lZC4KLQotICAgICAgIElmIHlvdSBkb24ndCBsaWtlIGVpdGhlciBvZiB0aGVzZSBvcHRpb25zLCB5b3UgY2FuIGRlZmluZQotICAgICAgIENPUlJVUFRJT05fRVJST1JfQUNUSU9OIGFuZCBVU0FHRV9FUlJPUl9BQ1RJT04gdG8gZG8gYW55dGhpbmcKLSAgICAgICBlbHNlLiBBbmQgaWYgaWYgeW91IGFyZSBzdXJlIHRoYXQgeW91ciBwcm9ncmFtIHVzaW5nIG1hbGxvYyBoYXMKLSAgICAgICBubyBlcnJvcnMgb3IgdnVsbmVyYWJpbGl0aWVzLCB5b3UgY2FuIGRlZmluZSBJTlNFQ1VSRSB0byAxLAotICAgICAgIHdoaWNoIG1pZ2h0IChvciBtaWdodCBub3QpIHByb3ZpZGUgYSBzbWFsbCBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudC4KLQotICBUaHJlYWQtc2FmZXR5OiBOT1QgdGhyZWFkLXNhZmUgdW5sZXNzIFVTRV9MT0NLUyBkZWZpbmVkCi0gICAgICAgV2hlbiBVU0VfTE9DS1MgaXMgZGVmaW5lZCwgZWFjaCBwdWJsaWMgY2FsbCB0byBtYWxsb2MsIGZyZWUsCi0gICAgICAgZXRjIGlzIHN1cnJvdW5kZWQgd2l0aCBlaXRoZXIgYSBwdGhyZWFkIG11dGV4IG9yIGEgd2luMzIKLSAgICAgICBzcGlubG9jayAoZGVwZW5kaW5nIG9uIFdJTjMyKS4gVGhpcyBpcyBub3QgZXNwZWNpYWxseSBmYXN0LCBhbmQKLSAgICAgICBjYW4gYmUgYSBtYWpvciBib3R0bGVuZWNrLiAgSXQgaXMgZGVzaWduZWQgb25seSB0byBwcm92aWRlCi0gICAgICAgbWluaW1hbCBwcm90ZWN0aW9uIGluIGNvbmN1cnJlbnQgZW52aXJvbm1lbnRzLCBhbmQgdG8gcHJvdmlkZSBhCi0gICAgICAgYmFzaXMgZm9yIGV4dGVuc2lvbnMuICBJZiB5b3UgYXJlIHVzaW5nIG1hbGxvYyBpbiBhIGNvbmN1cnJlbnQKLSAgICAgICBwcm9ncmFtLCBjb25zaWRlciBpbnN0ZWFkIHVzaW5nIHB0bWFsbG9jLCB3aGljaCBpcyBkZXJpdmVkIGZyb20KLSAgICAgICBhIHZlcnNpb24gb2YgdGhpcyBtYWxsb2MuIChTZWUgaHR0cDovL3d3dy5tYWxsb2MuZGUpLgotCi0gIFN5c3RlbSByZXF1aXJlbWVudHM6IEFueSBjb21iaW5hdGlvbiBvZiBNT1JFQ09SRSBhbmQvb3IgTU1BUC9NVU5NQVAKLSAgICAgICBUaGlzIG1hbGxvYyBjYW4gdXNlIHVuaXggc2JyayBvciBhbnkgZW11bGF0aW9uIChpbnZva2VkIHVzaW5nCi0gICAgICAgdGhlIENBTExfTU9SRUNPUkUgbWFjcm8pIGFuZC9vciBtbWFwL211bm1hcCBvciBhbnkgZW11bGF0aW9uCi0gICAgICAgKGludm9rZWQgdXNpbmcgQ0FMTF9NTUFQL0NBTExfTVVOTUFQKSB0byBnZXQgYW5kIHJlbGVhc2Ugc3lzdGVtCi0gICAgICAgbWVtb3J5LiAgT24gbW9zdCB1bml4IHN5c3RlbXMsIGl0IHRlbmRzIHRvIHdvcmsgYmVzdCBpZiBib3RoCi0gICAgICAgTU9SRUNPUkUgYW5kIE1NQVAgYXJlIGVuYWJsZWQuICBPbiBXaW4zMiwgaXQgdXNlcyBlbXVsYXRpb25zCi0gICAgICAgYmFzZWQgb24gVmlydHVhbEFsbG9jLiBJdCBhbHNvIHVzZXMgY29tbW9uIEMgbGlicmFyeSBmdW5jdGlvbnMKLSAgICAgICBsaWtlIG1lbXNldC4KLQotICBDb21wbGlhbmNlOiBJIGJlbGlldmUgaXQgaXMgY29tcGxpYW50IHdpdGggdGhlIFNpbmdsZSBVbml4IFNwZWNpZmljYXRpb24KLSAgICAgICAoU2VlIGh0dHA6Ly93d3cudW5peC5vcmcpLiBBbHNvIFNWSUQvWFBHLCBBTlNJIEMsIGFuZCBwcm9iYWJseQotICAgICAgIG90aGVycyBhcyB3ZWxsLgotCi0qIE92ZXJ2aWV3IG9mIGFsZ29yaXRobXMKLQotICBUaGlzIGlzIG5vdCB0aGUgZmFzdGVzdCwgbW9zdCBzcGFjZS1jb25zZXJ2aW5nLCBtb3N0IHBvcnRhYmxlLCBvcgotICBtb3N0IHR1bmFibGUgbWFsbG9jIGV2ZXIgd3JpdHRlbi4gSG93ZXZlciBpdCBpcyBhbW9uZyB0aGUgZmFzdGVzdAotICB3aGlsZSBhbHNvIGJlaW5nIGFtb25nIHRoZSBtb3N0IHNwYWNlLWNvbnNlcnZpbmcsIHBvcnRhYmxlIGFuZAotICB0dW5hYmxlLiAgQ29uc2lzdGVudCBiYWxhbmNlIGFjcm9zcyB0aGVzZSBmYWN0b3JzIHJlc3VsdHMgaW4gYSBnb29kCi0gIGdlbmVyYWwtcHVycG9zZSBhbGxvY2F0b3IgZm9yIG1hbGxvYy1pbnRlbnNpdmUgcHJvZ3JhbXMuCi0KLSAgSW4gbW9zdCB3YXlzLCB0aGlzIG1hbGxvYyBpcyBhIGJlc3QtZml0IGFsbG9jYXRvci4gR2VuZXJhbGx5LCBpdAotICBjaG9vc2VzIHRoZSBiZXN0LWZpdHRpbmcgZXhpc3RpbmcgY2h1bmsgZm9yIGEgcmVxdWVzdCwgd2l0aCB0aWVzCi0gIGJyb2tlbiBpbiBhcHByb3hpbWF0ZWx5IGxlYXN0LXJlY2VudGx5LXVzZWQgb3JkZXIuIChUaGlzIHN0cmF0ZWd5Ci0gIG5vcm1hbGx5IG1haW50YWlucyBsb3cgZnJhZ21lbnRhdGlvbi4pIEhvd2V2ZXIsIGZvciByZXF1ZXN0cyBsZXNzCi0gIHRoYW4gMjU2Ynl0ZXMsIGl0IGRldmlhdGVzIGZyb20gYmVzdC1maXQgd2hlbiB0aGVyZSBpcyBub3QgYW4KLSAgZXhhY3RseSBmaXR0aW5nIGF2YWlsYWJsZSBjaHVuayBieSBwcmVmZXJyaW5nIHRvIHVzZSBzcGFjZSBhZGphY2VudAotICB0byB0aGF0IHVzZWQgZm9yIHRoZSBwcmV2aW91cyBzbWFsbCByZXF1ZXN0LCBhcyB3ZWxsIGFzIGJ5IGJyZWFraW5nCi0gIHRpZXMgaW4gYXBwcm94aW1hdGVseSBtb3N0LXJlY2VudGx5LXVzZWQgb3JkZXIuIChUaGVzZSBlbmhhbmNlCi0gIGxvY2FsaXR5IG9mIHNlcmllcyBvZiBzbWFsbCBhbGxvY2F0aW9ucy4pICBBbmQgZm9yIHZlcnkgbGFyZ2UgcmVxdWVzdHMKLSAgKD49IDI1NktiIGJ5IGRlZmF1bHQpLCBpdCByZWxpZXMgb24gc3lzdGVtIG1lbW9yeSBtYXBwaW5nCi0gIGZhY2lsaXRpZXMsIGlmIHN1cHBvcnRlZC4gIChUaGlzIGhlbHBzIGF2b2lkIGNhcnJ5aW5nIGFyb3VuZCBhbmQKLSAgcG9zc2libHkgZnJhZ21lbnRpbmcgbWVtb3J5IHVzZWQgb25seSBmb3IgbGFyZ2UgY2h1bmtzLikKLQotICBBbGwgb3BlcmF0aW9ucyAoZXhjZXB0IG1hbGxvY19zdGF0cyBhbmQgbWFsbGluZm8pIGhhdmUgZXhlY3V0aW9uCi0gIHRpbWVzIHRoYXQgYXJlIGJvdW5kZWQgYnkgYSBjb25zdGFudCBmYWN0b3Igb2YgdGhlIG51bWJlciBvZiBiaXRzIGluCi0gIGEgc2l6ZV90LCBub3QgY291bnRpbmcgYW55IGNsZWFyaW5nIGluIGNhbGxvYyBvciBjb3B5aW5nIGluIHJlYWxsb2MsCi0gIG9yIGFjdGlvbnMgc3Vycm91bmRpbmcgTU9SRUNPUkUgYW5kIE1NQVAgdGhhdCBoYXZlIHRpbWVzCi0gIHByb3BvcnRpb25hbCB0byB0aGUgbnVtYmVyIG9mIG5vbi1jb250aWd1b3VzIHJlZ2lvbnMgcmV0dXJuZWQgYnkKLSAgc3lzdGVtIGFsbG9jYXRpb24gcm91dGluZXMsIHdoaWNoIGlzIG9mdGVuIGp1c3QgMS4KLQotICBUaGUgaW1wbGVtZW50YXRpb24gaXMgbm90IHZlcnkgbW9kdWxhciBhbmQgc2VyaW91c2x5IG92ZXJ1c2VzCi0gIG1hY3Jvcy4gUGVyaGFwcyBzb21lZGF5IGFsbCBDIGNvbXBpbGVycyB3aWxsIGRvIGFzIGdvb2QgYSBqb2IKLSAgaW5saW5pbmcgbW9kdWxhciBjb2RlIGFzIGNhbiBub3cgYmUgZG9uZSBieSBicnV0ZS1mb3JjZSBleHBhbnNpb24sCi0gIGJ1dCBub3csIGVub3VnaCBvZiB0aGVtIHNlZW0gbm90IHRvLgotCi0gIFNvbWUgY29tcGlsZXJzIGlzc3VlIGEgbG90IG9mIHdhcm5pbmdzIGFib3V0IGNvZGUgdGhhdCBpcwotICBkZWFkL3VucmVhY2hhYmxlIG9ubHkgb24gc29tZSBwbGF0Zm9ybXMsIGFuZCBhbHNvIGFib3V0IGludGVudGlvbmFsCi0gIHVzZXMgb2YgbmVnYXRpb24gb24gdW5zaWduZWQgdHlwZXMuIEFsbCBrbm93biBjYXNlcyBvZiBlYWNoIGNhbiBiZQotICBpZ25vcmVkLgotCi0gIEZvciBhIGxvbmdlciBidXQgb3V0IG9mIGRhdGUgaGlnaC1sZXZlbCBkZXNjcmlwdGlvbiwgc2VlCi0gICAgIGh0dHA6Ly9nZWUuY3Mub3N3ZWdvLmVkdS9kbC9odG1sL21hbGxvYy5odG1sCi0KLSogTVNQQUNFUwotICBJZiBNU1BBQ0VTIGlzIGRlZmluZWQsIHRoZW4gaW4gYWRkaXRpb24gdG8gbWFsbG9jLCBmcmVlLCBldGMuLAotICB0aGlzIGZpbGUgYWxzbyBkZWZpbmVzIG1zcGFjZV9tYWxsb2MsIG1zcGFjZV9mcmVlLCBldGMuIFRoZXNlCi0gIGFyZSB2ZXJzaW9ucyBvZiBtYWxsb2Mgcm91dGluZXMgdGhhdCB0YWtlIGFuICJtc3BhY2UiIGFyZ3VtZW50Ci0gIG9idGFpbmVkIHVzaW5nIGNyZWF0ZV9tc3BhY2UsIHRvIGNvbnRyb2wgYWxsIGludGVybmFsIGJvb2trZWVwaW5nLgotICBJZiBPTkxZX01TUEFDRVMgaXMgZGVmaW5lZCwgb25seSB0aGVzZSB2ZXJzaW9ucyBhcmUgY29tcGlsZWQuCi0gIFNvIGlmIHlvdSB3b3VsZCBsaWtlIHRvIHVzZSB0aGlzIGFsbG9jYXRvciBmb3Igb25seSBzb21lIGFsbG9jYXRpb25zLAotICBhbmQgeW91ciBzeXN0ZW0gbWFsbG9jIGZvciBvdGhlcnMsIHlvdSBjYW4gY29tcGlsZSB3aXRoCi0gIE9OTFlfTVNQQUNFUyBhbmQgdGhlbiBkbyBzb21ldGhpbmcgbGlrZS4uLgotICAgIHN0YXRpYyBtc3BhY2UgbXltc3BhY2UgPSBjcmVhdGVfbXNwYWNlKDAsMCk7IC8vIGZvciBleGFtcGxlCi0gICAgI2RlZmluZSBteW1hbGxvYyhieXRlcykgIG1zcGFjZV9tYWxsb2MobXltc3BhY2UsIGJ5dGVzKQotCi0gIChOb3RlOiBJZiB5b3Ugb25seSBuZWVkIG9uZSBpbnN0YW5jZSBvZiBhbiBtc3BhY2UsIHlvdSBjYW4gaW5zdGVhZAotICB1c2UgIlVTRV9ETF9QUkVGSVgiIHRvIHJlbGFiZWwgdGhlIGdsb2JhbCBtYWxsb2MuKQotCi0gIFlvdSBjYW4gc2ltaWxhcmx5IGNyZWF0ZSB0aHJlYWQtbG9jYWwgYWxsb2NhdG9ycyBieSBzdG9yaW5nCi0gIG1zcGFjZXMgYXMgdGhyZWFkLWxvY2Fscy4gRm9yIGV4YW1wbGU6Ci0gICAgc3RhdGljIF9fdGhyZWFkIG1zcGFjZSB0bG1zID0gMDsKLSAgICB2b2lkKiAgdGxtYWxsb2Moc2l6ZV90IGJ5dGVzKSB7Ci0gICAgICBpZiAodGxtcyA9PSAwKSB0bG1zID0gY3JlYXRlX21zcGFjZSgwLCAwKTsKLSAgICAgIHJldHVybiBtc3BhY2VfbWFsbG9jKHRsbXMsIGJ5dGVzKTsKLSAgICB9Ci0gICAgdm9pZCAgdGxmcmVlKHZvaWQqIG1lbSkgeyBtc3BhY2VfZnJlZSh0bG1zLCBtZW0pOyB9Ci0KLSAgVW5sZXNzIEZPT1RFUlMgaXMgZGVmaW5lZCwgZWFjaCBtc3BhY2UgaXMgY29tcGxldGVseSBpbmRlcGVuZGVudC4KLSAgWW91IGNhbm5vdCBhbGxvY2F0ZSBmcm9tIG9uZSBhbmQgZnJlZSB0byBhbm90aGVyIChhbHRob3VnaAotICBjb25mb3JtYW5jZSBpcyBvbmx5IHdlYWtseSBjaGVja2VkLCBzbyB1c2FnZSBlcnJvcnMgYXJlIG5vdCBhbHdheXMKLSAgY2F1Z2h0KS4gSWYgRk9PVEVSUyBpcyBkZWZpbmVkLCB0aGVuIGVhY2ggY2h1bmsgY2FycmllcyBhcm91bmQgYSB0YWcKLSAgaW5kaWNhdGluZyBpdHMgb3JpZ2luYXRpbmcgbXNwYWNlLCBhbmQgZnJlZXMgYXJlIGRpcmVjdGVkIHRvIHRoZWlyCi0gIG9yaWdpbmF0aW5nIHNwYWNlcy4KLQotIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIENvbXBpbGUtdGltZSBvcHRpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1CZSBjYXJlZnVsIGluIHNldHRpbmcgI2RlZmluZSB2YWx1ZXMgZm9yIG51bWVyaWNhbCBjb25zdGFudHMgb2YgdHlwZQotc2l6ZV90LiBPbiBzb21lIHN5c3RlbXMsIGxpdGVyYWwgdmFsdWVzIGFyZSBub3QgYXV0b21hdGljYWxseSBleHRlbmRlZAotdG8gc2l6ZV90IHByZWNpc2lvbiB1bmxlc3MgdGhleSBhcmUgZXhwbGljaXRseSBjYXN0ZWQuCi0KLVdJTjMyICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiBkZWZpbmVkIGlmIF9XSU4zMiBkZWZpbmVkCi0gIERlZmluaW5nIFdJTjMyIHNldHMgdXAgZGVmYXVsdHMgZm9yIE1TIGVudmlyb25tZW50IGFuZCBjb21waWxlcnMuCi0gIE90aGVyd2lzZSBkZWZhdWx0cyBhcmUgZm9yIHVuaXguCi0KLU1BTExPQ19BTElHTk1FTlQgICAgICAgICBkZWZhdWx0OiAoc2l6ZV90KTgKLSAgQ29udHJvbHMgdGhlIG1pbmltdW0gYWxpZ25tZW50IGZvciBtYWxsb2MnZWQgY2h1bmtzLiAgSXQgbXVzdCBiZSBhCi0gIHBvd2VyIG9mIHR3byBhbmQgYXQgbGVhc3QgOCwgZXZlbiBvbiBtYWNoaW5lcyBmb3Igd2hpY2ggc21hbGxlcgotICBhbGlnbm1lbnRzIHdvdWxkIHN1ZmZpY2UuIEl0IG1heSBiZSBkZWZpbmVkIGFzIGxhcmdlciB0aGFuIHRoaXMKLSAgdGhvdWdoLiBOb3RlIGhvd2V2ZXIgdGhhdCBjb2RlIGFuZCBkYXRhIHN0cnVjdHVyZXMgYXJlIG9wdGltaXplZCBmb3IKLSAgdGhlIGNhc2Ugb2YgOC1ieXRlIGFsaWdubWVudC4KLQotTVNQQUNFUyAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IDAgKGZhbHNlKQotICBJZiB0cnVlLCBjb21waWxlIGluIHN1cHBvcnQgZm9yIGluZGVwZW5kZW50IGFsbG9jYXRpb24gc3BhY2VzLgotICBUaGlzIGlzIG9ubHkgc3VwcG9ydGVkIGlmIEhBVkVfTU1BUCBpcyB0cnVlLgotCi1PTkxZX01TUEFDRVMgICAgICAgICAgICAgZGVmYXVsdDogMCAoZmFsc2UpCi0gIElmIHRydWUsIG9ubHkgY29tcGlsZSBpbiBtc3BhY2UgdmVyc2lvbnMsIG5vdCByZWd1bGFyIHZlcnNpb25zLgotCi1VU0VfTE9DS1MgICAgICAgICAgICAgICAgZGVmYXVsdDogMCAoZmFsc2UpCi0gIENhdXNlcyBlYWNoIGNhbGwgdG8gZWFjaCBwdWJsaWMgcm91dGluZSB0byBiZSBzdXJyb3VuZGVkIHdpdGgKLSAgcHRocmVhZCBvciBXSU4zMiBtdXRleCBsb2NrL3VubG9jay4gKElmIHNldCB0cnVlLCB0aGlzIGNhbiBiZQotICBvdmVycmlkZGVuIG9uIGEgcGVyLW1zcGFjZSBiYXNpcyBmb3IgbXNwYWNlIHZlcnNpb25zLikKLQotRk9PVEVSUyAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IDAKLSAgSWYgdHJ1ZSwgcHJvdmlkZSBleHRyYSBjaGVja2luZyBhbmQgZGlzcGF0Y2hpbmcgYnkgcGxhY2luZwotICBpbmZvcm1hdGlvbiBpbiB0aGUgZm9vdGVycyBvZiBhbGxvY2F0ZWQgY2h1bmtzLiBUaGlzIGFkZHMKLSAgc3BhY2UgYW5kIHRpbWUgb3ZlcmhlYWQuCi0KLUlOU0VDVVJFICAgICAgICAgICAgICAgICBkZWZhdWx0OiAwCi0gIElmIHRydWUsIG9taXQgY2hlY2tzIGZvciB1c2FnZSBlcnJvcnMgYW5kIGhlYXAgc3BhY2Ugb3ZlcndyaXRlcy4KLQotVVNFX0RMX1BSRUZJWCAgICAgICAgICAgIGRlZmF1bHQ6IE5PVCBkZWZpbmVkCi0gIENhdXNlcyBjb21waWxlciB0byBwcmVmaXggYWxsIHB1YmxpYyByb3V0aW5lcyB3aXRoIHRoZSBzdHJpbmcgJ2RsJy4KLSAgVGhpcyBjYW4gYmUgdXNlZnVsIHdoZW4geW91IG9ubHkgd2FudCB0byB1c2UgdGhpcyBtYWxsb2MgaW4gb25lIHBhcnQKLSAgb2YgYSBwcm9ncmFtLCB1c2luZyB5b3VyIHJlZ3VsYXIgc3lzdGVtIG1hbGxvYyBlbHNld2hlcmUuCi0KLUFCT1JUICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiBkZWZpbmVkIGFzIGFib3J0KCkKLSAgRGVmaW5lcyBob3cgdG8gYWJvcnQgb24gZmFpbGVkIGNoZWNrcy4gIE9uIG1vc3Qgc3lzdGVtcywgYSBmYWlsZWQKLSAgY2hlY2sgY2Fubm90IGRpZSB3aXRoIGFuICJhc3NlcnQiIG9yIGV2ZW4gcHJpbnQgYW4gaW5mb3JtYXRpdmUKLSAgbWVzc2FnZSwgYmVjYXVzZSB0aGUgdW5kZXJseWluZyBwcmludCByb3V0aW5lcyBpbiB0dXJuIGNhbGwgbWFsbG9jLAotICB3aGljaCB3aWxsIGZhaWwgYWdhaW4uICBHZW5lcmFsbHksIHRoZSBiZXN0IHBvbGljeSBpcyB0byBzaW1wbHkgY2FsbAotICBhYm9ydCgpLiBJdCdzIG5vdCB2ZXJ5IHVzZWZ1bCB0byBkbyBtb3JlIHRoYW4gdGhpcyBiZWNhdXNlIG1hbnkKLSAgZXJyb3JzIGR1ZSB0byBvdmVyd3JpdGluZyB3aWxsIHNob3cgdXAgYXMgYWRkcmVzcyBmYXVsdHMgKG51bGwsIG9kZAotICBhZGRyZXNzZXMgZXRjKSByYXRoZXIgdGhhbiBtYWxsb2MtdHJpZ2dlcmVkIGNoZWNrcywgc28gd2lsbCBhbHNvCi0gIGFib3J0LiAgQWxzbywgbW9zdCBjb21waWxlcnMga25vdyB0aGF0IGFib3J0KCkgZG9lcyBub3QgcmV0dXJuLCBzbwotICBjYW4gYmV0dGVyIG9wdGltaXplIGNvZGUgY29uZGl0aW9uYWxseSBjYWxsaW5nIGl0LgotCi1QUk9DRUVEX09OX0VSUk9SICAgICAgICAgICBkZWZhdWx0OiBkZWZpbmVkIGFzIDAgKGZhbHNlKQotICBDb250cm9scyB3aGV0aGVyIGRldGVjdGVkIGJhZCBhZGRyZXNzZXMgY2F1c2UgdGhlbSB0byBieXBhc3NlZAotICByYXRoZXIgdGhhbiBhYm9ydGluZy4gSWYgc2V0LCBkZXRlY3RlZCBiYWQgYXJndW1lbnRzIHRvIGZyZWUgYW5kCi0gIHJlYWxsb2MgYXJlIGlnbm9yZWQuIEFuZCBhbGwgYm9va2tlZXBpbmcgaW5mb3JtYXRpb24gaXMgemVyb2VkIG91dAotICB1cG9uIGEgZGV0ZWN0ZWQgb3ZlcndyaXRlIG9mIGZyZWVkIGhlYXAgc3BhY2UsIHRodXMgbG9zaW5nIHRoZQotICBhYmlsaXR5IHRvIGV2ZXIgcmV0dXJuIGl0IGZyb20gbWFsbG9jIGFnYWluLCBidXQgZW5hYmxpbmcgdGhlCi0gIGFwcGxpY2F0aW9uIHRvIHByb2NlZWQuIElmIFBST0NFRURfT05fRVJST1IgaXMgZGVmaW5lZCwgdGhlCi0gIHN0YXRpYyB2YXJpYWJsZSBtYWxsb2NfY29ycnVwdGlvbl9lcnJvcl9jb3VudCBpcyBjb21waWxlZCBpbgotICBhbmQgY2FuIGJlIGV4YW1pbmVkIHRvIHNlZSBpZiBlcnJvcnMgaGF2ZSBvY2N1cnJlZC4gVGhpcyBvcHRpb24KLSAgZ2VuZXJhdGVzIHNsb3dlciBjb2RlIHRoYW4gdGhlIGRlZmF1bHQgYWJvcnQgcG9saWN5LgotCi1ERUJVRyAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogTk9UIGRlZmluZWQKLSAgVGhlIERFQlVHIHNldHRpbmcgaXMgbWFpbmx5IGludGVuZGVkIGZvciBwZW9wbGUgdHJ5aW5nIHRvIG1vZGlmeQotICB0aGlzIGNvZGUgb3IgZGlhZ25vc2UgcHJvYmxlbXMgd2hlbiBwb3J0aW5nIHRvIG5ldyBwbGF0Zm9ybXMuCi0gIEhvd2V2ZXIsIGl0IG1heSBhbHNvIGJlIGFibGUgdG8gYmV0dGVyIGlzb2xhdGUgdXNlciBlcnJvcnMgdGhhbiBqdXN0Ci0gIHVzaW5nIHJ1bnRpbWUgY2hlY2tzLiAgVGhlIGFzc2VydGlvbnMgaW4gdGhlIGNoZWNrIHJvdXRpbmVzIHNwZWxsCi0gIG91dCBpbiBtb3JlIGRldGFpbCB0aGUgYXNzdW1wdGlvbnMgYW5kIGludmFyaWFudHMgdW5kZXJseWluZyB0aGUKLSAgYWxnb3JpdGhtcy4gIFRoZSBjaGVja2luZyBpcyBmYWlybHkgZXh0ZW5zaXZlLCBhbmQgd2lsbCBzbG93IGRvd24KLSAgZXhlY3V0aW9uIG5vdGljZWFibHkuIENhbGxpbmcgbWFsbG9jX3N0YXRzIG9yIG1hbGxpbmZvIHdpdGggREVCVUcKLSAgc2V0IHdpbGwgYXR0ZW1wdCB0byBjaGVjayBldmVyeSBub24tbW1hcHBlZCBhbGxvY2F0ZWQgYW5kIGZyZWUgY2h1bmsKLSAgaW4gdGhlIGNvdXJzZSBvZiBjb21wdXRpbmcgdGhlIHN1bW1hcmllcy4KLQotQUJPUlRfT05fQVNTRVJUX0ZBSUxVUkUgICBkZWZhdWx0OiBkZWZpbmVkIGFzIDEgKHRydWUpCi0gIERlYnVnZ2luZyBhc3NlcnRpb24gZmFpbHVyZXMgY2FuIGJlIG5lYXJseSBpbXBvc3NpYmxlIGlmIHlvdXIKLSAgdmVyc2lvbiBvZiB0aGUgYXNzZXJ0IG1hY3JvIGNhdXNlcyBtYWxsb2MgdG8gYmUgY2FsbGVkLCB3aGljaCB3aWxsCi0gIGxlYWQgdG8gYSBjYXNjYWRlIG9mIGZ1cnRoZXIgZmFpbHVyZXMsIGJsb3dpbmcgdGhlIHJ1bnRpbWUgc3RhY2suCi0gIEFCT1JUX09OX0FTU0VSVF9GQUlMVVJFIGNhdXNlIGFzc2VydGlvbnMgZmFpbHVyZXMgdG8gY2FsbCBhYm9ydCgpLAotICB3aGljaCB3aWxsIHVzdWFsbHkgbWFrZSBkZWJ1Z2dpbmcgZWFzaWVyLgotCi1NQUxMT0NfRkFJTFVSRV9BQ1RJT04gICAgIGRlZmF1bHQ6IHNldHMgZXJybm8gdG8gRU5PTUVNLCBvciBuby1vcCBvbiB3aW4zMgotICBUaGUgYWN0aW9uIHRvIHRha2UgYmVmb3JlICJyZXR1cm4gMCIgd2hlbiBtYWxsb2MgZmFpbHMgdG8gYmUgYWJsZSB0bwotICByZXR1cm4gbWVtb3J5IGJlY2F1c2UgdGhlcmUgaXMgbm9uZSBhdmFpbGFibGUuCi0KLUhBVkVfTU9SRUNPUkUgICAgICAgICAgICAgZGVmYXVsdDogMSAodHJ1ZSkgdW5sZXNzIHdpbjMyIG9yIE9OTFlfTVNQQUNFUwotICBUcnVlIGlmIHRoaXMgc3lzdGVtIHN1cHBvcnRzIHNicmsgb3IgYW4gZW11bGF0aW9uIG9mIGl0LgotCi1NT1JFQ09SRSAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHNicmsKLSAgVGhlIG5hbWUgb2YgdGhlIHNicmstc3R5bGUgc3lzdGVtIHJvdXRpbmUgdG8gY2FsbCB0byBvYnRhaW4gbW9yZQotICBtZW1vcnkuICBTZWUgYmVsb3cgZm9yIGd1aWRhbmNlIG9uIHdyaXRpbmcgY3VzdG9tIE1PUkVDT1JFCi0gIGZ1bmN0aW9ucy4gVGhlIHR5cGUgb2YgdGhlIGFyZ3VtZW50IHRvIHNicmsvTU9SRUNPUkUgdmFyaWVzIGFjcm9zcwotICBzeXN0ZW1zLiAgSXQgY2Fubm90IGJlIHNpemVfdCwgYmVjYXVzZSBpdCBzdXBwb3J0cyBuZWdhdGl2ZQotICBhcmd1bWVudHMsIHNvIGl0IGlzIG5vcm1hbGx5IHRoZSBzaWduZWQgdHlwZSBvZiB0aGUgc2FtZSB3aWR0aCBhcwotICBzaXplX3QgKHNvbWV0aW1lcyBkZWNsYXJlZCBhcyAiaW50cHRyX3QiKS4gIEl0IGRvZXNuJ3QgbXVjaCBtYXR0ZXIKLSAgdGhvdWdoLiBJbnRlcm5hbGx5LCB3ZSBvbmx5IGNhbGwgaXQgd2l0aCBhcmd1bWVudHMgbGVzcyB0aGFuIGhhbGYKLSAgdGhlIG1heCB2YWx1ZSBvZiBhIHNpemVfdCwgd2hpY2ggc2hvdWxkIHdvcmsgYWNyb3NzIGFsbCByZWFzb25hYmxlCi0gIHBvc3NpYmlsaXRpZXMsIGFsdGhvdWdoIHNvbWV0aW1lcyBnZW5lcmF0aW5nIGNvbXBpbGVyIHdhcm5pbmdzLiAgU2VlCi0gIG5lYXIgdGhlIGVuZCBvZiB0aGlzIGZpbGUgZm9yIGd1aWRlbGluZXMgZm9yIGNyZWF0aW5nIGEgY3VzdG9tCi0gIHZlcnNpb24gb2YgTU9SRUNPUkUuCi0KLU1PUkVDT1JFX0NPTlRJR1VPVVMgICAgICAgZGVmYXVsdDogMSAodHJ1ZSkKLSAgSWYgdHJ1ZSwgdGFrZSBhZHZhbnRhZ2Ugb2YgZmFjdCB0aGF0IGNvbnNlY3V0aXZlIGNhbGxzIHRvIE1PUkVDT1JFCi0gIHdpdGggcG9zaXRpdmUgYXJndW1lbnRzIGFsd2F5cyByZXR1cm4gY29udGlndW91cyBpbmNyZWFzaW5nCi0gIGFkZHJlc3Nlcy4gIFRoaXMgaXMgdHJ1ZSBvZiB1bml4IHNicmsuIEl0IGRvZXMgbm90IGh1cnQgdG9vIG11Y2ggdG8KLSAgc2V0IGl0IHRydWUgYW55d2F5LCBzaW5jZSBtYWxsb2MgY29wZXMgd2l0aCBub24tY29udGlndWl0aWVzLgotICBTZXR0aW5nIGl0IGZhbHNlIHdoZW4gZGVmaW5pdGVseSBub24tY29udGlndW91cyBzYXZlcyB0aW1lCi0gIGFuZCBwb3NzaWJseSB3YXN0ZWQgc3BhY2UgaXQgd291bGQgdGFrZSB0byBkaXNjb3ZlciB0aGlzIHRob3VnaC4KLQotTU9SRUNPUkVfQ0FOTk9UX1RSSU0gICAgICBkZWZhdWx0OiBOT1QgZGVmaW5lZAotICBUcnVlIGlmIE1PUkVDT1JFIGNhbm5vdCByZWxlYXNlIHNwYWNlIGJhY2sgdG8gdGhlIHN5c3RlbSB3aGVuIGdpdmVuCi0gIG5lZ2F0aXZlIGFyZ3VtZW50cy4gVGhpcyBpcyBnZW5lcmFsbHkgbmVjZXNzYXJ5IG9ubHkgaWYgeW91IGFyZQotICB1c2luZyBhIGhhbmQtY3JhZnRlZCBNT1JFQ09SRSBmdW5jdGlvbiB0aGF0IGNhbm5vdCBoYW5kbGUgbmVnYXRpdmUKLSAgYXJndW1lbnRzLgotCi1IQVZFX01NQVAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IDEgKHRydWUpCi0gIFRydWUgaWYgdGhpcyBzeXN0ZW0gc3VwcG9ydHMgbW1hcCBvciBhbiBlbXVsYXRpb24gb2YgaXQuICBJZiBzbywgYW5kCi0gIEhBVkVfTU9SRUNPUkUgaXMgbm90IHRydWUsIE1NQVAgaXMgdXNlZCBmb3IgYWxsIHN5c3RlbQotICBhbGxvY2F0aW9uLiBJZiBzZXQgYW5kIEhBVkVfTU9SRUNPUkUgaXMgdHJ1ZSBhcyB3ZWxsLCBNTUFQIGlzCi0gIHByaW1hcmlseSB1c2VkIHRvIGRpcmVjdGx5IGFsbG9jYXRlIHZlcnkgbGFyZ2UgYmxvY2tzLiBJdCBpcyBhbHNvCi0gIHVzZWQgYXMgYSBiYWNrdXAgc3RyYXRlZ3kgaW4gY2FzZXMgd2hlcmUgTU9SRUNPUkUgZmFpbHMgdG8gcHJvdmlkZQotICBzcGFjZSBmcm9tIHN5c3RlbS4gTm90ZTogQSBzaW5nbGUgY2FsbCB0byBNVU5NQVAgaXMgYXNzdW1lZCB0byBiZQotICBhYmxlIHRvIHVubWFwIG1lbW9yeSB0aGF0IG1heSBoYXZlIGJlIGFsbG9jYXRlZCB1c2luZyBtdWx0aXBsZSBjYWxscwotICB0byBNTUFQLCBzbyBsb25nIGFzIHRoZXkgYXJlIGFkamFjZW50LgotCi1IQVZFX01SRU1BUCAgICAgICAgICAgICAgIGRlZmF1bHQ6IDEgb24gbGludXgsIGVsc2UgMAotICBJZiB0cnVlIHJlYWxsb2MoKSB1c2VzIG1yZW1hcCgpIHRvIHJlLWFsbG9jYXRlIGxhcmdlIGJsb2NrcyBhbmQKLSAgZXh0ZW5kIG9yIHNocmluayBhbGxvY2F0aW9uIHNwYWNlcy4KLQotTU1BUF9DTEVBUlMgICAgICAgICAgICAgICBkZWZhdWx0OiAxIG9uIHVuaXgKLSAgVHJ1ZSBpZiBtbWFwIGNsZWFycyBtZW1vcnkgc28gY2FsbG9jIGRvZXNuJ3QgbmVlZCB0by4gVGhpcyBpcyB0cnVlCi0gIGZvciBzdGFuZGFyZCB1bml4IG1tYXAgdXNpbmcgL2Rldi96ZXJvLgotCi1VU0VfQlVJTFRJTl9GRlMgICAgICAgICAgICBkZWZhdWx0OiAwIChpLmUuLCBub3QgdXNlZCkKLSAgQ2F1c2VzIG1hbGxvYyB0byB1c2UgdGhlIGJ1aWx0aW4gZmZzKCkgZnVuY3Rpb24gdG8gY29tcHV0ZSBpbmRpY2VzLgotICBTb21lIGNvbXBpbGVycyBtYXkgcmVjb2duaXplIGFuZCBpbnRyaW5zaWZ5IGZmcyB0byBiZSBmYXN0ZXIgdGhhbiB0aGUKLSAgc3VwcGxpZWQgQyB2ZXJzaW9uLiBBbHNvLCB0aGUgY2FzZSBvZiB4ODYgdXNpbmcgZ2NjIGlzIHNwZWNpYWwtY2FzZWQKLSAgdG8gYW4gYXNtIGluc3RydWN0aW9uLCBzbyBpcyBhbHJlYWR5IGFzIGZhc3QgYXMgaXQgY2FuIGJlLCBhbmQgc28KLSAgdGhpcyBzZXR0aW5nIGhhcyBubyBlZmZlY3QuIChPbiBtb3N0IHg4NnMsIHRoZSBhc20gdmVyc2lvbiBpcyBvbmx5Ci0gIHNsaWdodGx5IGZhc3RlciB0aGFuIHRoZSBDIHZlcnNpb24uKQotCi1tYWxsb2NfZ2V0cGFnZXNpemUgICAgICAgICBkZWZhdWx0OiBkZXJpdmUgZnJvbSBzeXN0ZW0gaW5jbHVkZXMsIG9yIDQwOTYuCi0gIFRoZSBzeXN0ZW0gcGFnZSBzaXplLiBUbyB0aGUgZXh0ZW50IHBvc3NpYmxlLCB0aGlzIG1hbGxvYyBtYW5hZ2VzCi0gIG1lbW9yeSBmcm9tIHRoZSBzeXN0ZW0gaW4gcGFnZS1zaXplIHVuaXRzLiAgVGhpcyBtYXkgYmUgKGFuZAotICB1c3VhbGx5IGlzKSBhIGZ1bmN0aW9uIHJhdGhlciB0aGFuIGEgY29uc3RhbnQuIFRoaXMgaXMgaWdub3JlZAotICBpZiBXSU4zMiwgd2hlcmUgcGFnZSBzaXplIGlzIGRldGVybWluZWQgdXNpbmcgZ2V0U3lzdGVtSW5mbyBkdXJpbmcKLSAgaW5pdGlhbGl6YXRpb24uCi0KLVVTRV9ERVZfUkFORE9NICAgICAgICAgICAgIGRlZmF1bHQ6IDAgKGkuZS4sIG5vdCB1c2VkKQotICBDYXVzZXMgbWFsbG9jIHRvIHVzZSAvZGV2L3JhbmRvbSB0byBpbml0aWFsaXplIHNlY3VyZSBtYWdpYyBzZWVkIGZvcgotICBzdGFtcGluZyBmb290ZXJzLiBPdGhlcndpc2UsIHRoZSBjdXJyZW50IHRpbWUgaXMgdXNlZC4KLQotTk9fTUFMTElORk8gICAgICAgICAgICAgICAgZGVmYXVsdDogMAotICBJZiBkZWZpbmVkLCBkb24ndCBjb21waWxlICJtYWxsaW5mbyIuIFRoaXMgY2FuIGJlIGEgc2ltcGxlIHdheQotICBvZiBkZWFsaW5nIHdpdGggbWlzbWF0Y2hlcyBiZXR3ZWVuIHN5c3RlbSBkZWNsYXJhdGlvbnMgYW5kCi0gIHRob3NlIGluIHRoaXMgZmlsZS4KLQotTUFMTElORk9fRklFTERfVFlQRSAgICAgICAgZGVmYXVsdDogc2l6ZV90Ci0gIFRoZSB0eXBlIG9mIHRoZSBmaWVsZHMgaW4gdGhlIG1hbGxpbmZvIHN0cnVjdC4gVGhpcyB3YXMgb3JpZ2luYWxseQotICBkZWZpbmVkIGFzICJpbnQiIGluIFNWSUQgZXRjLCBidXQgaXMgbW9yZSB1c2VmdWxseSBkZWZpbmVkIGFzCi0gIHNpemVfdC4gVGhlIHZhbHVlIGlzIHVzZWQgb25seSBpZiAgSEFWRV9VU1JfSU5DTFVERV9NQUxMT0NfSCBpcyBub3Qgc2V0Ci0KLVJFQUxMT0NfWkVST19CWVRFU19GUkVFUyAgICBkZWZhdWx0OiBub3QgZGVmaW5lZAotICBUaGlzIHNob3VsZCBiZSBzZXQgaWYgYSBjYWxsIHRvIHJlYWxsb2Mgd2l0aCB6ZXJvIGJ5dGVzIHNob3VsZAotICBiZSB0aGUgc2FtZSBhcyBhIGNhbGwgdG8gZnJlZS4gU29tZSBwZW9wbGUgdGhpbmsgaXQgc2hvdWxkLiBPdGhlcndpc2UsCi0gIHNpbmNlIHRoaXMgbWFsbG9jIHJldHVybnMgYSB1bmlxdWUgcG9pbnRlciBmb3IgbWFsbG9jKDApLCBzbyBkb2VzCi0gIHJlYWxsb2MocCwgMCkuCi0KLUxBQ0tTX1VOSVNURF9ILCBMQUNLU19GQ05UTF9ILCBMQUNLU19TWVNfUEFSQU1fSCwgTEFDS1NfU1lTX01NQU5fSAotTEFDS1NfU1RSSU5HU19ILCBMQUNLU19TVFJJTkdfSCwgTEFDS1NfU1lTX1RZUEVTX0gsICBMQUNLU19FUlJOT19ICi1MQUNLU19TVERMSUJfSCAgICAgICAgICAgICAgICBkZWZhdWx0OiBOT1QgZGVmaW5lZCB1bmxlc3Mgb24gV0lOMzIKLSAgRGVmaW5lIHRoZXNlIGlmIHlvdXIgc3lzdGVtIGRvZXMgbm90IGhhdmUgdGhlc2UgaGVhZGVyIGZpbGVzLgotICBZb3UgbWlnaHQgbmVlZCB0byBtYW51YWxseSBpbnNlcnQgc29tZSBvZiB0aGUgZGVjbGFyYXRpb25zIHRoZXkgcHJvdmlkZS4KLQotREVGQVVMVF9HUkFOVUxBUklUWSAgICAgICAgZGVmYXVsdDogcGFnZSBzaXplIGlmIE1PUkVDT1JFX0NPTlRJR1VPVVMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5c3RlbV9pbmZvLmR3QWxsb2NhdGlvbkdyYW51bGFyaXR5IGluIFdJTjMyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdGhlcndpc2UgNjRLLgotICAgICAgQWxzbyBzZXR0YWJsZSB1c2luZyBtYWxsb3B0KE1fR1JBTlVMQVJJVFksIHgpCi0gIFRoZSB1bml0IGZvciBhbGxvY2F0aW5nIGFuZCBkZWFsbG9jYXRpbmcgbWVtb3J5IGZyb20gdGhlIHN5c3RlbS4gIE9uCi0gIG1vc3Qgc3lzdGVtcyB3aXRoIGNvbnRpZ3VvdXMgTU9SRUNPUkUsIHRoZXJlIGlzIG5vIHJlYXNvbiB0bwotICBtYWtlIHRoaXMgbW9yZSB0aGFuIGEgcGFnZS4gSG93ZXZlciwgc3lzdGVtcyB3aXRoIE1NQVAgdGVuZCB0bwotICBlaXRoZXIgcmVxdWlyZSBvciBlbmNvdXJhZ2UgbGFyZ2VyIGdyYW51bGFyaXRpZXMuICBZb3UgY2FuIGluY3JlYXNlCi0gIHRoaXMgdmFsdWUgdG8gcHJldmVudCBzeXN0ZW0gYWxsb2NhdGlvbiBmdW5jdGlvbnMgdG8gYmUgY2FsbGVkIHNvCi0gIG9mdGVuLCBlc3BlY2lhbGx5IGlmIHRoZXkgYXJlIHNsb3cuICBUaGUgdmFsdWUgbXVzdCBiZSBhdCBsZWFzdCBvbmUKLSAgcGFnZSBhbmQgbXVzdCBiZSBhIHBvd2VyIG9mIHR3by4gIFNldHRpbmcgdG8gMCBjYXVzZXMgaW5pdGlhbGl6YXRpb24KLSAgdG8gZWl0aGVyIHBhZ2Ugc2l6ZSBvciB3aW4zMiByZWdpb24gc2l6ZS4gIChOb3RlOiBJbiBwcmV2aW91cwotICB2ZXJzaW9ucyBvZiBtYWxsb2MsIHRoZSBlcXVpdmFsZW50IG9mIHRoaXMgb3B0aW9uIHdhcyBjYWxsZWQKLSAgIlRPUF9QQUQiKQotCi1ERUZBVUxUX1RSSU1fVEhSRVNIT0xEICAgIGRlZmF1bHQ6IDJNQgotICAgICAgQWxzbyBzZXR0YWJsZSB1c2luZyBtYWxsb3B0KE1fVFJJTV9USFJFU0hPTEQsIHgpCi0gIFRoZSBtYXhpbXVtIGFtb3VudCBvZiB1bnVzZWQgdG9wLW1vc3QgbWVtb3J5IHRvIGtlZXAgYmVmb3JlCi0gIHJlbGVhc2luZyB2aWEgbWFsbG9jX3RyaW0gaW4gZnJlZSgpLiAgQXV0b21hdGljIHRyaW1taW5nIGlzIG1haW5seQotICB1c2VmdWwgaW4gbG9uZy1saXZlZCBwcm9ncmFtcyB1c2luZyBjb250aWd1b3VzIE1PUkVDT1JFLiAgQmVjYXVzZQotICB0cmltbWluZyB2aWEgc2JyayBjYW4gYmUgc2xvdyBvbiBzb21lIHN5c3RlbXMsIGFuZCBjYW4gc29tZXRpbWVzIGJlCi0gIHdhc3RlZnVsIChpbiBjYXNlcyB3aGVyZSBwcm9ncmFtcyBpbW1lZGlhdGVseSBhZnRlcndhcmQgYWxsb2NhdGUKLSAgbW9yZSBsYXJnZSBjaHVua3MpIHRoZSB2YWx1ZSBzaG91bGQgYmUgaGlnaCBlbm91Z2ggc28gdGhhdCB5b3VyCi0gIG92ZXJhbGwgc3lzdGVtIHBlcmZvcm1hbmNlIHdvdWxkIGltcHJvdmUgYnkgcmVsZWFzaW5nIHRoaXMgbXVjaAotICBtZW1vcnkuICBBcyBhIHJvdWdoIGd1aWRlLCB5b3UgbWlnaHQgc2V0IHRvIGEgdmFsdWUgY2xvc2UgdG8gdGhlCi0gIGF2ZXJhZ2Ugc2l6ZSBvZiBhIHByb2Nlc3MgKHByb2dyYW0pIHJ1bm5pbmcgb24geW91ciBzeXN0ZW0uCi0gIFJlbGVhc2luZyB0aGlzIG11Y2ggbWVtb3J5IHdvdWxkIGFsbG93IHN1Y2ggYSBwcm9jZXNzIHRvIHJ1biBpbgotICBtZW1vcnkuICBHZW5lcmFsbHksIGl0IGlzIHdvcnRoIHR1bmluZyB0cmltIHRocmVzaG9sZHMgd2hlbiBhCi0gIHByb2dyYW0gdW5kZXJnb2VzIHBoYXNlcyB3aGVyZSBzZXZlcmFsIGxhcmdlIGNodW5rcyBhcmUgYWxsb2NhdGVkCi0gIGFuZCByZWxlYXNlZCBpbiB3YXlzIHRoYXQgY2FuIHJldXNlIGVhY2ggb3RoZXIncyBzdG9yYWdlLCBwZXJoYXBzCi0gIG1peGVkIHdpdGggcGhhc2VzIHdoZXJlIHRoZXJlIGFyZSBubyBzdWNoIGNodW5rcyBhdCBhbGwuIFRoZSB0cmltCi0gIHZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIHBhZ2Ugc2l6ZSB0byBoYXZlIGFueSB1c2VmdWwgZWZmZWN0LiAgVG8KLSAgZGlzYWJsZSB0cmltbWluZyBjb21wbGV0ZWx5LCB5b3UgY2FuIHNldCB0byBNQVhfU0laRV9ULiBOb3RlIHRoYXQgdGhlIHRyaWNrCi0gIHNvbWUgcGVvcGxlIHVzZSBvZiBtYWxsb2NpbmcgYSBodWdlIHNwYWNlIGFuZCB0aGVuIGZyZWVpbmcgaXQgYXQKLSAgcHJvZ3JhbSBzdGFydHVwLCBpbiBhbiBhdHRlbXB0IHRvIHJlc2VydmUgc3lzdGVtIG1lbW9yeSwgZG9lc24ndAotICBoYXZlIHRoZSBpbnRlbmRlZCBlZmZlY3QgdW5kZXIgYXV0b21hdGljIHRyaW1taW5nLCBzaW5jZSB0aGF0IG1lbW9yeQotICB3aWxsIGltbWVkaWF0ZWx5IGJlIHJldHVybmVkIHRvIHRoZSBzeXN0ZW0uCi0KLURFRkFVTFRfTU1BUF9USFJFU0hPTEQgICAgICAgZGVmYXVsdDogMjU2SwotICAgICAgQWxzbyBzZXR0YWJsZSB1c2luZyBtYWxsb3B0KE1fTU1BUF9USFJFU0hPTEQsIHgpCi0gIFRoZSByZXF1ZXN0IHNpemUgdGhyZXNob2xkIGZvciB1c2luZyBNTUFQIHRvIGRpcmVjdGx5IHNlcnZpY2UgYQotICByZXF1ZXN0LiBSZXF1ZXN0cyBvZiBhdCBsZWFzdCB0aGlzIHNpemUgdGhhdCBjYW5ub3QgYmUgYWxsb2NhdGVkCi0gIHVzaW5nIGFscmVhZHktZXhpc3Rpbmcgc3BhY2Ugd2lsbCBiZSBzZXJ2aWNlZCB2aWEgbW1hcC4gIChJZiBlbm91Z2gKLSAgbm9ybWFsIGZyZWVkIHNwYWNlIGFscmVhZHkgZXhpc3RzIGl0IGlzIHVzZWQgaW5zdGVhZC4pICBVc2luZyBtbWFwCi0gIHNlZ3JlZ2F0ZXMgcmVsYXRpdmVseSBsYXJnZSBjaHVua3Mgb2YgbWVtb3J5IHNvIHRoYXQgdGhleSBjYW4gYmUKLSAgaW5kaXZpZHVhbGx5IG9idGFpbmVkIGFuZCByZWxlYXNlZCBmcm9tIHRoZSBob3N0IHN5c3RlbS4gQSByZXF1ZXN0Ci0gIHNlcnZpY2VkIHRocm91Z2ggbW1hcCBpcyBuZXZlciByZXVzZWQgYnkgYW55IG90aGVyIHJlcXVlc3QgKGF0IGxlYXN0Ci0gIG5vdCBkaXJlY3RseTsgdGhlIHN5c3RlbSBtYXkganVzdCBzbyBoYXBwZW4gdG8gcmVtYXAgc3VjY2Vzc2l2ZQotICByZXF1ZXN0cyB0byB0aGUgc2FtZSBsb2NhdGlvbnMpLiAgU2VncmVnYXRpbmcgc3BhY2UgaW4gdGhpcyB3YXkgaGFzCi0gIHRoZSBiZW5lZml0cyB0aGF0OiBNbWFwcGVkIHNwYWNlIGNhbiBhbHdheXMgYmUgaW5kaXZpZHVhbGx5IHJlbGVhc2VkCi0gIGJhY2sgdG8gdGhlIHN5c3RlbSwgd2hpY2ggaGVscHMga2VlcCB0aGUgc3lzdGVtIGxldmVsIG1lbW9yeSBkZW1hbmRzCi0gIG9mIGEgbG9uZy1saXZlZCBwcm9ncmFtIGxvdy4gIEFsc28sIG1hcHBlZCBtZW1vcnkgZG9lc24ndCBiZWNvbWUKLSAgYGxvY2tlZCcgYmV0d2VlbiBvdGhlciBjaHVua3MsIGFzIGNhbiBoYXBwZW4gd2l0aCBub3JtYWxseSBhbGxvY2F0ZWQKLSAgY2h1bmtzLCB3aGljaCBtZWFucyB0aGF0IGV2ZW4gdHJpbW1pbmcgdmlhIG1hbGxvY190cmltIHdvdWxkIG5vdAotICByZWxlYXNlIHRoZW0uICBIb3dldmVyLCBpdCBoYXMgdGhlIGRpc2FkdmFudGFnZSB0aGF0IHRoZSBzcGFjZQotICBjYW5ub3QgYmUgcmVjbGFpbWVkLCBjb25zb2xpZGF0ZWQsIGFuZCB0aGVuIHVzZWQgdG8gc2VydmljZSBsYXRlcgotICByZXF1ZXN0cywgYXMgaGFwcGVucyB3aXRoIG5vcm1hbCBjaHVua3MuICBUaGUgYWR2YW50YWdlcyBvZiBtbWFwCi0gIG5lYXJseSBhbHdheXMgb3V0d2VpZ2ggZGlzYWR2YW50YWdlcyBmb3IgImxhcmdlIiBjaHVua3MsIGJ1dCB0aGUKLSAgdmFsdWUgb2YgImxhcmdlIiBtYXkgdmFyeSBhY3Jvc3Mgc3lzdGVtcy4gIFRoZSBkZWZhdWx0IGlzIGFuCi0gIGVtcGlyaWNhbGx5IGRlcml2ZWQgdmFsdWUgdGhhdCB3b3JrcyB3ZWxsIGluIG1vc3Qgc3lzdGVtcy4gWW91IGNhbgotICBkaXNhYmxlIG1tYXAgYnkgc2V0dGluZyB0byBNQVhfU0laRV9ULgotCi0qLwotCi0jaWZuZGVmIFdJTjMyCi0jaWZkZWYgX1dJTjMyCi0jZGVmaW5lIFdJTjMyIDEKLSNlbmRpZiAgLyogX1dJTjMyICovCi0jZW5kaWYgIC8qIFdJTjMyICovCi0jaWZkZWYgV0lOMzIKLSNkZWZpbmUgV0lOMzJfTEVBTl9BTkRfTUVBTgotI2luY2x1ZGUgPHdpbmRvd3MuaD4KLSNkZWZpbmUgSEFWRV9NTUFQIDEKLSNkZWZpbmUgSEFWRV9NT1JFQ09SRSAwCi0jZGVmaW5lIExBQ0tTX1VOSVNURF9ICi0jZGVmaW5lIExBQ0tTX1NZU19QQVJBTV9ICi0jZGVmaW5lIExBQ0tTX1NZU19NTUFOX0gKLSNkZWZpbmUgTEFDS1NfU1RSSU5HX0gKLSNkZWZpbmUgTEFDS1NfU1RSSU5HU19ICi0jZGVmaW5lIExBQ0tTX1NZU19UWVBFU19ICi0jZGVmaW5lIExBQ0tTX0VSUk5PX0gKLSNkZWZpbmUgTUFMTE9DX0ZBSUxVUkVfQUNUSU9OCi0jZGVmaW5lIE1NQVBfQ0xFQVJTIDAgLyogV0lOQ0UgYW5kIHNvbWUgb3RoZXJzIGFwcGFyZW50bHkgZG9uJ3QgY2xlYXIgKi8KLSNlbmRpZiAgLyogV0lOMzIgKi8KLQotI2lmIGRlZmluZWQoREFSV0lOKSB8fCBkZWZpbmVkKF9EQVJXSU4pCi0vKiBNYWMgT1NYIGRvY3MgYWR2aXNlIG5vdCB0byB1c2Ugc2JyazsgaXQgc2VlbXMgYmV0dGVyIHRvIHVzZSBtbWFwICovCi0jaWZuZGVmIEhBVkVfTU9SRUNPUkUKLSNkZWZpbmUgSEFWRV9NT1JFQ09SRSAwCi0jZGVmaW5lIEhBVkVfTU1BUCAxCi0jZW5kaWYgIC8qIEhBVkVfTU9SRUNPUkUgKi8KLSNlbmRpZiAgLyogREFSV0lOICovCi0KLSNpZm5kZWYgTEFDS1NfU1lTX1RZUEVTX0gKLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4gIC8qIEZvciBzaXplX3QgKi8KLSNlbmRpZiAgLyogTEFDS1NfU1lTX1RZUEVTX0ggKi8KLQotLyogVGhlIG1heGltdW0gcG9zc2libGUgc2l6ZV90IHZhbHVlIGhhcyBhbGwgYml0cyBzZXQgKi8KLSNkZWZpbmUgTUFYX1NJWkVfVCAgICAgICAgICAgKH4oc2l6ZV90KTApCi0KLSNpZm5kZWYgT05MWV9NU1BBQ0VTCi0jZGVmaW5lIE9OTFlfTVNQQUNFUyAwCi0jZW5kaWYgIC8qIE9OTFlfTVNQQUNFUyAqLwotI2lmbmRlZiBNU1BBQ0VTCi0jaWYgT05MWV9NU1BBQ0VTCi0jZGVmaW5lIE1TUEFDRVMgMQotI2Vsc2UgICAvKiBPTkxZX01TUEFDRVMgKi8KLSNkZWZpbmUgTVNQQUNFUyAwCi0jZW5kaWYgIC8qIE9OTFlfTVNQQUNFUyAqLwotI2VuZGlmICAvKiBNU1BBQ0VTICovCi0jaWZuZGVmIE1BTExPQ19BTElHTk1FTlQKLSNkZWZpbmUgTUFMTE9DX0FMSUdOTUVOVCAoKHNpemVfdCk4VSkKLSNlbmRpZiAgLyogTUFMTE9DX0FMSUdOTUVOVCAqLwotI2lmbmRlZiBGT09URVJTCi0jZGVmaW5lIEZPT1RFUlMgMAotI2VuZGlmICAvKiBGT09URVJTICovCi0jaWZuZGVmIFVTRV9NQVhfQUxMT1dFRF9GT09UUFJJTlQKLSNkZWZpbmUgVVNFX01BWF9BTExPV0VEX0ZPT1RQUklOVCAwCi0jZW5kaWYKLSNpZm5kZWYgQUJPUlQKLSNkZWZpbmUgQUJPUlQgIGFib3J0KCkKLSNlbmRpZiAgLyogQUJPUlQgKi8KLSNpZm5kZWYgQUJPUlRfT05fQVNTRVJUX0ZBSUxVUkUKLSNkZWZpbmUgQUJPUlRfT05fQVNTRVJUX0ZBSUxVUkUgMQotI2VuZGlmICAvKiBBQk9SVF9PTl9BU1NFUlRfRkFJTFVSRSAqLwotI2lmbmRlZiBQUk9DRUVEX09OX0VSUk9SCisvLyBTZW5kIGRsbWFsbG9jIGVycm9ycyB0byB0aGUgbG9nLgorc3RhdGljIHZvaWQgX19iaW9uaWNfaGVhcF9jb3JydXB0aW9uX2Vycm9yKGNvbnN0IGNoYXIqIGZ1bmN0aW9uKTsKK3N0YXRpYyB2b2lkIF9fYmlvbmljX2hlYXBfdXNhZ2VfZXJyb3IoY29uc3QgY2hhciogZnVuY3Rpb24sIHZvaWQqIGFkZHJlc3MpOwogI2RlZmluZSBQUk9DRUVEX09OX0VSUk9SIDAKLSNlbmRpZiAgLyogUFJPQ0VFRF9PTl9FUlJPUiAqLwotI2lmbmRlZiBVU0VfTE9DS1MKLSNkZWZpbmUgVVNFX0xPQ0tTIDAKLSNlbmRpZiAgLyogVVNFX0xPQ0tTICovCi0jaWZuZGVmIElOU0VDVVJFCi0jZGVmaW5lIElOU0VDVVJFIDAKLSNlbmRpZiAgLyogSU5TRUNVUkUgKi8KLSNpZm5kZWYgSEFWRV9NTUFQCi0jZGVmaW5lIEhBVkVfTU1BUCAxCi0jZW5kaWYgIC8qIEhBVkVfTU1BUCAqLwotI2lmbmRlZiBNTUFQX0NMRUFSUwotI2RlZmluZSBNTUFQX0NMRUFSUyAxCi0jZW5kaWYgIC8qIE1NQVBfQ0xFQVJTICovCi0jaWZuZGVmIEhBVkVfTVJFTUFQCi0jaWZkZWYgbGludXgKLSNkZWZpbmUgSEFWRV9NUkVNQVAgMQotI2Vsc2UgICAvKiBsaW51eCAqLwotI2RlZmluZSBIQVZFX01SRU1BUCAwCi0jZW5kaWYgIC8qIGxpbnV4ICovCi0jZW5kaWYgIC8qIEhBVkVfTVJFTUFQICovCi0jaWZuZGVmIE1BTExPQ19GQUlMVVJFX0FDVElPTgotI2RlZmluZSBNQUxMT0NfRkFJTFVSRV9BQ1RJT04gIGVycm5vID0gRU5PTUVNOwotI2VuZGlmICAvKiBNQUxMT0NfRkFJTFVSRV9BQ1RJT04gKi8KLSNpZm5kZWYgSEFWRV9NT1JFQ09SRQotI2lmIE9OTFlfTVNQQUNFUwotI2RlZmluZSBIQVZFX01PUkVDT1JFIDAKLSNlbHNlICAgLyogT05MWV9NU1BBQ0VTICovCi0jZGVmaW5lIEhBVkVfTU9SRUNPUkUgMQotI2VuZGlmICAvKiBPTkxZX01TUEFDRVMgKi8KLSNlbmRpZiAgLyogSEFWRV9NT1JFQ09SRSAqLwotI2lmICFIQVZFX01PUkVDT1JFCi0jZGVmaW5lIE1PUkVDT1JFX0NPTlRJR1VPVVMgMAotI2Vsc2UgICAvKiAhSEFWRV9NT1JFQ09SRSAqLwotI2lmbmRlZiBNT1JFQ09SRQotI2RlZmluZSBNT1JFQ09SRSBzYnJrCi0jZW5kaWYgIC8qIE1PUkVDT1JFICovCi0jaWZuZGVmIE1PUkVDT1JFX0NPTlRJR1VPVVMKLSNkZWZpbmUgTU9SRUNPUkVfQ09OVElHVU9VUyAxCi0jZW5kaWYgIC8qIE1PUkVDT1JFX0NPTlRJR1VPVVMgKi8KLSNlbmRpZiAgLyogSEFWRV9NT1JFQ09SRSAqLwotI2lmbmRlZiBERUZBVUxUX0dSQU5VTEFSSVRZCi0jaWYgTU9SRUNPUkVfQ09OVElHVU9VUwotI2RlZmluZSBERUZBVUxUX0dSQU5VTEFSSVRZICgwKSAgLyogMCBtZWFucyB0byBjb21wdXRlIGluIGluaXRfbXBhcmFtcyAqLwotI2Vsc2UgICAvKiBNT1JFQ09SRV9DT05USUdVT1VTICovCi0jZGVmaW5lIERFRkFVTFRfR1JBTlVMQVJJVFkgKChzaXplX3QpNjRVICogKHNpemVfdCkxMDI0VSkKLSNlbmRpZiAgLyogTU9SRUNPUkVfQ09OVElHVU9VUyAqLwotI2VuZGlmICAvKiBERUZBVUxUX0dSQU5VTEFSSVRZICovCi0jaWZuZGVmIERFRkFVTFRfVFJJTV9USFJFU0hPTEQKLSNpZm5kZWYgTU9SRUNPUkVfQ0FOTk9UX1RSSU0KLSNkZWZpbmUgREVGQVVMVF9UUklNX1RIUkVTSE9MRCAoKHNpemVfdCkyVSAqIChzaXplX3QpMTAyNFUgKiAoc2l6ZV90KTEwMjRVKQotI2Vsc2UgICAvKiBNT1JFQ09SRV9DQU5OT1RfVFJJTSAqLwotI2RlZmluZSBERUZBVUxUX1RSSU1fVEhSRVNIT0xEIE1BWF9TSVpFX1QKLSNlbmRpZiAgLyogTU9SRUNPUkVfQ0FOTk9UX1RSSU0gKi8KLSNlbmRpZiAgLyogREVGQVVMVF9UUklNX1RIUkVTSE9MRCAqLwotI2lmbmRlZiBERUZBVUxUX01NQVBfVEhSRVNIT0xECi0jaWYgSEFWRV9NTUFQCi0jZGVmaW5lIERFRkFVTFRfTU1BUF9USFJFU0hPTEQgKChzaXplX3QpNjRVICogKHNpemVfdCkxMDI0VSkKLSNlbHNlICAgLyogSEFWRV9NTUFQICovCi0jZGVmaW5lIERFRkFVTFRfTU1BUF9USFJFU0hPTEQgTUFYX1NJWkVfVAotI2VuZGlmICAvKiBIQVZFX01NQVAgKi8KLSNlbmRpZiAgLyogREVGQVVMVF9NTUFQX1RIUkVTSE9MRCAqLwotI2lmbmRlZiBVU0VfQlVJTFRJTl9GRlMKLSNkZWZpbmUgVVNFX0JVSUxUSU5fRkZTIDAKLSNlbmRpZiAgLyogVVNFX0JVSUxUSU5fRkZTICovCi0jaWZuZGVmIFVTRV9ERVZfUkFORE9NCi0jZGVmaW5lIFVTRV9ERVZfUkFORE9NIDAKLSNlbmRpZiAgLyogVVNFX0RFVl9SQU5ET00gKi8KLSNpZm5kZWYgTk9fTUFMTElORk8KLSNkZWZpbmUgTk9fTUFMTElORk8gMAotI2VuZGlmICAvKiBOT19NQUxMSU5GTyAqLwotI2lmbmRlZiBNQUxMSU5GT19GSUVMRF9UWVBFCi0jZGVmaW5lIE1BTExJTkZPX0ZJRUxEX1RZUEUgc2l6ZV90Ci0jZW5kaWYgIC8qIE1BTExJTkZPX0ZJRUxEX1RZUEUgKi8KKyNkZWZpbmUgQ09SUlVQVElPTl9FUlJPUl9BQ1RJT04obSkgX19iaW9uaWNfaGVhcF9jb3JydXB0aW9uX2Vycm9yKF9fRlVOQ1RJT05fXykKKyNkZWZpbmUgVVNBR0VfRVJST1JfQUNUSU9OKG0scCkgX19iaW9uaWNfaGVhcF91c2FnZV9lcnJvcihfX0ZVTkNUSU9OX18sIHApCiAKLS8qCi0gIG1hbGxvcHQgdHVuaW5nIG9wdGlvbnMuICBTVklEL1hQRyBkZWZpbmVzIGZvdXIgc3RhbmRhcmQgcGFyYW1ldGVyCi0gIG51bWJlcnMgZm9yIG1hbGxvcHQsIG5vcm1hbGx5IGRlZmluZWQgaW4gbWFsbG9jLmguICBOb25lIG9mIHRoZXNlCi0gIGFyZSB1c2VkIGluIHRoaXMgbWFsbG9jLCBzbyBzZXR0aW5nIHRoZW0gaGFzIG5vIGVmZmVjdC4gQnV0IHRoaXMKLSAgbWFsbG9jIGRvZXMgc3VwcG9ydCB0aGUgZm9sbG93aW5nIG9wdGlvbnMuCi0qLworLy8gVWdseSBpbmNsdXNpb24gb2YgQyBmaWxlIHNvIHRoYXQgYmlvbmljIHNwZWNpZmljICNkZWZpbmVzIGNvbmZpZ3VyZSBkbG1hbGxvYy4KKyNpbmNsdWRlICIuLi91cHN0cmVhbS1kbG1hbGxvYy9tYWxsb2MuYyIKIAotI2RlZmluZSBNX1RSSU1fVEhSRVNIT0xEICAgICAoLTEpCi0jZGVmaW5lIE1fR1JBTlVMQVJJVFkgICAgICAgICgtMikKLSNkZWZpbmUgTV9NTUFQX1RIUkVTSE9MRCAgICAgKC0zKQorZXh0ZXJuIHZvaWQgKCpfX2NsZWFudXApKCk7CiAKLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBNYWxsaW5mbyBkZWNsYXJhdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLSNpZiAhTk9fTUFMTElORk8KLS8qCi0gIFRoaXMgdmVyc2lvbiBvZiBtYWxsb2Mgc3VwcG9ydHMgdGhlIHN0YW5kYXJkIFNWSUQvWFBHIG1hbGxpbmZvCi0gIHJvdXRpbmUgdGhhdCByZXR1cm5zIGEgc3RydWN0IGNvbnRhaW5pbmcgdXNhZ2UgcHJvcGVydGllcyBhbmQKLSAgc3RhdGlzdGljcy4gSXQgc2hvdWxkIHdvcmsgb24gYW55IHN5c3RlbSB0aGF0IGhhcyBhCi0gIC91c3IvaW5jbHVkZS9tYWxsb2MuaCBkZWZpbmluZyBzdHJ1Y3QgbWFsbGluZm8uICBUaGUgbWFpbgotICBkZWNsYXJhdGlvbiBuZWVkZWQgaXMgdGhlIG1hbGxpbmZvIHN0cnVjdCB0aGF0IGlzIHJldHVybmVkIChieS1jb3B5KQotICBieSBtYWxsaW5mbygpLiAgVGhlIG1hbGxvaW5mbyBzdHJ1Y3QgY29udGFpbnMgYSBidW5jaCBvZiBmaWVsZHMgdGhhdAotICBhcmUgbm90IGV2ZW4gbWVhbmluZ2Z1bCBpbiB0aGlzIHZlcnNpb24gb2YgbWFsbG9jLiAgVGhlc2UgZmllbGRzIGFyZQotICBhcmUgaW5zdGVhZCBmaWxsZWQgYnkgbWFsbGluZm8oKSB3aXRoIG90aGVyIG51bWJlcnMgdGhhdCBtaWdodCBiZSBvZgotICBpbnRlcmVzdC4KLQotICBIQVZFX1VTUl9JTkNMVURFX01BTExPQ19IIHNob3VsZCBiZSBzZXQgaWYgeW91IGhhdmUgYQotICAvdXNyL2luY2x1ZGUvbWFsbG9jLmggZmlsZSB0aGF0IGluY2x1ZGVzIGEgZGVjbGFyYXRpb24gb2Ygc3RydWN0Ci0gIG1hbGxpbmZvLiAgSWYgc28sIGl0IGlzIGluY2x1ZGVkOyBlbHNlIGEgY29tcGxpYW50IHZlcnNpb24gaXMKLSAgZGVjbGFyZWQgYmVsb3cuICBUaGVzZSBtdXN0IGJlIHByZWNpc2VseSB0aGUgc2FtZSBmb3IgbWFsbGluZm8oKSB0bwotICB3b3JrLiAgVGhlIG9yaWdpbmFsIFNWSUQgdmVyc2lvbiBvZiB0aGlzIHN0cnVjdCwgZGVmaW5lZCBvbiBtb3N0Ci0gIHN5c3RlbXMgd2l0aCBtYWxsaW5mbywgZGVjbGFyZXMgYWxsIGZpZWxkcyBhcyBpbnRzLiBCdXQgc29tZSBvdGhlcnMKLSAgZGVmaW5lIGFzIHVuc2lnbmVkIGxvbmcuIElmIHlvdXIgc3lzdGVtIGRlZmluZXMgdGhlIGZpZWxkcyB1c2luZyBhCi0gIHR5cGUgb2YgZGlmZmVyZW50IHdpZHRoIHRoYW4gbGlzdGVkIGhlcmUsIHlvdSBNVVNUICNpbmNsdWRlIHlvdXIKLSAgc3lzdGVtIHZlcnNpb24gYW5kICNkZWZpbmUgSEFWRV9VU1JfSU5DTFVERV9NQUxMT0NfSC4KLSovCi0KLS8qICNkZWZpbmUgSEFWRV9VU1JfSU5DTFVERV9NQUxMT0NfSCAqLwotCi0jaWYgIUFORFJPSUQKLSNpZmRlZiBIQVZFX1VTUl9JTkNMVURFX01BTExPQ19ICi0jaW5jbHVkZSAiL3Vzci9pbmNsdWRlL21hbGxvYy5oIgotI2Vsc2UgLyogSEFWRV9VU1JfSU5DTFVERV9NQUxMT0NfSCAqLwotCi1zdHJ1Y3QgbWFsbGluZm8gewotICBNQUxMSU5GT19GSUVMRF9UWVBFIGFyZW5hOyAgICAvKiBub24tbW1hcHBlZCBzcGFjZSBhbGxvY2F0ZWQgZnJvbSBzeXN0ZW0gKi8KLSAgTUFMTElORk9fRklFTERfVFlQRSBvcmRibGtzOyAgLyogbnVtYmVyIG9mIGZyZWUgY2h1bmtzICovCi0gIE1BTExJTkZPX0ZJRUxEX1RZUEUgc21ibGtzOyAgIC8qIGFsd2F5cyAwICovCi0gIE1BTExJTkZPX0ZJRUxEX1RZUEUgaGJsa3M7ICAgIC8qIGFsd2F5cyAwICovCi0gIE1BTExJTkZPX0ZJRUxEX1RZUEUgaGJsa2hkOyAgIC8qIHNwYWNlIGluIG1tYXBwZWQgcmVnaW9ucyAqLwotICBNQUxMSU5GT19GSUVMRF9UWVBFIHVzbWJsa3M7ICAvKiBtYXhpbXVtIHRvdGFsIGFsbG9jYXRlZCBzcGFjZSAqLwotICBNQUxMSU5GT19GSUVMRF9UWVBFIGZzbWJsa3M7ICAvKiBhbHdheXMgMCAqLwotICBNQUxMSU5GT19GSUVMRF9UWVBFIHVvcmRibGtzOyAvKiB0b3RhbCBhbGxvY2F0ZWQgc3BhY2UgKi8KLSAgTUFMTElORk9fRklFTERfVFlQRSBmb3JkYmxrczsgLyogdG90YWwgZnJlZSBzcGFjZSAqLwotICBNQUxMSU5GT19GSUVMRF9UWVBFIGtlZXBjb3N0OyAvKiByZWxlYXNhYmxlICh2aWEgbWFsbG9jX3RyaW0pIHNwYWNlICovCi19OwotCi0jZW5kaWYgLyogSEFWRV9VU1JfSU5DTFVERV9NQUxMT0NfSCAqLwotI2VuZGlmIC8qIE5PX01BTExJTkZPICovCi0jZW5kaWYgLyogQU5EUk9JRCAqLwotCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIgewotI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCi0KLSNpZiAhT05MWV9NU1BBQ0VTCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0gRGVjbGFyYXRpb25zIG9mIHB1YmxpYyByb3V0aW5lcyAtLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLS8qIENoZWNrIGFuIGFkZGl0aW9uYWwgbWFjcm8gZm9yIHRoZSBmaXZlIHByaW1hcnkgZnVuY3Rpb25zICovCi0jaWZuZGVmIFVTRV9ETF9QUkVGSVgKLSNkZWZpbmUgZGxjYWxsb2MgICAgICAgICAgICAgICBjYWxsb2MKLSNkZWZpbmUgZGxmcmVlICAgICAgICAgICAgICAgICBmcmVlCi0jZGVmaW5lIGRsbWFsbG9jICAgICAgICAgICAgICAgbWFsbG9jCi0jZGVmaW5lIGRsbWVtYWxpZ24gICAgICAgICAgICAgbWVtYWxpZ24KLSNkZWZpbmUgZGxyZWFsbG9jICAgICAgICAgICAgICByZWFsbG9jCi0jZW5kaWYKLQotI2lmbmRlZiBVU0VfRExfUFJFRklYCi0jZGVmaW5lIGRsdmFsbG9jICAgICAgICAgICAgICAgdmFsbG9jCi0jZGVmaW5lIGRscHZhbGxvYyAgICAgICAgICAgICAgcHZhbGxvYwotI2RlZmluZSBkbG1hbGxpbmZvICAgICAgICAgICAgIG1hbGxpbmZvCi0jZGVmaW5lIGRsbWFsbG9wdCAgICAgICAgICAgICAgbWFsbG9wdAotI2RlZmluZSBkbG1hbGxvY190cmltICAgICAgICAgIG1hbGxvY190cmltCi0jZGVmaW5lIGRsbWFsbG9jX3dhbGtfZnJlZV9wYWdlcyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFsbG9jX3dhbGtfZnJlZV9wYWdlcwotI2RlZmluZSBkbG1hbGxvY193YWxrX2hlYXAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hbGxvY193YWxrX2hlYXAKLSNkZWZpbmUgZGxtYWxsb2Nfc3RhdHMgICAgICAgICBtYWxsb2Nfc3RhdHMKLSNkZWZpbmUgZGxtYWxsb2NfdXNhYmxlX3NpemUgICBtYWxsb2NfdXNhYmxlX3NpemUKLSNkZWZpbmUgZGxtYWxsb2NfZm9vdHByaW50ICAgICBtYWxsb2NfZm9vdHByaW50Ci0jZGVmaW5lIGRsbWFsbG9jX21heF9hbGxvd2VkX2Zvb3RwcmludCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFsbG9jX21heF9hbGxvd2VkX2Zvb3RwcmludAotI2RlZmluZSBkbG1hbGxvY19zZXRfbWF4X2FsbG93ZWRfZm9vdHByaW50IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWxsb2Nfc2V0X21heF9hbGxvd2VkX2Zvb3RwcmludAotI2RlZmluZSBkbG1hbGxvY19tYXhfZm9vdHByaW50IG1hbGxvY19tYXhfZm9vdHByaW50Ci0jZGVmaW5lIGRsaW5kZXBlbmRlbnRfY2FsbG9jICAgaW5kZXBlbmRlbnRfY2FsbG9jCi0jZGVmaW5lIGRsaW5kZXBlbmRlbnRfY29tYWxsb2MgaW5kZXBlbmRlbnRfY29tYWxsb2MKLSNlbmRpZiAvKiBVU0VfRExfUFJFRklYICovCi0KLQotLyoKLSAgbWFsbG9jKHNpemVfdCBuKQotICBSZXR1cm5zIGEgcG9pbnRlciB0byBhIG5ld2x5IGFsbG9jYXRlZCBjaHVuayBvZiBhdCBsZWFzdCBuIGJ5dGVzLCBvcgotICBudWxsIGlmIG5vIHNwYWNlIGlzIGF2YWlsYWJsZSwgaW4gd2hpY2ggY2FzZSBlcnJubyBpcyBzZXQgdG8gRU5PTUVNCi0gIG9uIEFOU0kgQyBzeXN0ZW1zLgotCi0gIElmIG4gaXMgemVybywgbWFsbG9jIHJldHVybnMgYSBtaW5pbXVtLXNpemVkIGNodW5rLiAoVGhlIG1pbmltdW0KLSAgc2l6ZSBpcyAxNiBieXRlcyBvbiBtb3N0IDMyYml0IHN5c3RlbXMsIGFuZCAzMiBieXRlcyBvbiA2NGJpdAotICBzeXN0ZW1zLikgIE5vdGUgdGhhdCBzaXplX3QgaXMgYW4gdW5zaWduZWQgdHlwZSwgc28gY2FsbHMgd2l0aAotICBhcmd1bWVudHMgdGhhdCB3b3VsZCBiZSBuZWdhdGl2ZSBpZiBzaWduZWQgYXJlIGludGVycHJldGVkIGFzCi0gIHJlcXVlc3RzIGZvciBodWdlIGFtb3VudHMgb2Ygc3BhY2UsIHdoaWNoIHdpbGwgb2Z0ZW4gZmFpbC4gVGhlCi0gIG1heGltdW0gc3VwcG9ydGVkIHZhbHVlIG9mIG4gZGlmZmVycyBhY3Jvc3Mgc3lzdGVtcywgYnV0IGlzIGluIGFsbAotICBjYXNlcyBsZXNzIHRoYW4gdGhlIG1heGltdW0gcmVwcmVzZW50YWJsZSB2YWx1ZSBvZiBhIHNpemVfdC4KLSovCi12b2lkKiBkbG1hbGxvYyhzaXplX3QpOwotCi0vKgotICBmcmVlKHZvaWQqIHApCi0gIFJlbGVhc2VzIHRoZSBjaHVuayBvZiBtZW1vcnkgcG9pbnRlZCB0byBieSBwLCB0aGF0IGhhZCBiZWVuIHByZXZpb3VzbHkKLSAgYWxsb2NhdGVkIHVzaW5nIG1hbGxvYyBvciBhIHJlbGF0ZWQgcm91dGluZSBzdWNoIGFzIHJlYWxsb2MuCi0gIEl0IGhhcyBubyBlZmZlY3QgaWYgcCBpcyBudWxsLiBJZiBwIHdhcyBub3QgbWFsbG9jZWQgb3IgYWxyZWFkeQotICBmcmVlZCwgZnJlZShwKSB3aWxsIGJ5IGRlZmF1bHQgY2F1c2UgdGhlIGN1cnJlbnQgcHJvZ3JhbSB0byBhYm9ydC4KLSovCi12b2lkICBkbGZyZWUodm9pZCopOwotCi0vKgotICBjYWxsb2Moc2l6ZV90IG5fZWxlbWVudHMsIHNpemVfdCBlbGVtZW50X3NpemUpOwotICBSZXR1cm5zIGEgcG9pbnRlciB0byBuX2VsZW1lbnRzICogZWxlbWVudF9zaXplIGJ5dGVzLCB3aXRoIGFsbCBsb2NhdGlvbnMKLSAgc2V0IHRvIHplcm8uCi0qLwotdm9pZCogZGxjYWxsb2Moc2l6ZV90LCBzaXplX3QpOwotCi0vKgotICByZWFsbG9jKHZvaWQqIHAsIHNpemVfdCBuKQotICBSZXR1cm5zIGEgcG9pbnRlciB0byBhIGNodW5rIG9mIHNpemUgbiB0aGF0IGNvbnRhaW5zIHRoZSBzYW1lIGRhdGEKLSAgYXMgZG9lcyBjaHVuayBwIHVwIHRvIHRoZSBtaW5pbXVtIG9mIChuLCBwJ3Mgc2l6ZSkgYnl0ZXMsIG9yIG51bGwKLSAgaWYgbm8gc3BhY2UgaXMgYXZhaWxhYmxlLgotCi0gIFRoZSByZXR1cm5lZCBwb2ludGVyIG1heSBvciBtYXkgbm90IGJlIHRoZSBzYW1lIGFzIHAuIFRoZSBhbGdvcml0aG0KLSAgcHJlZmVycyBleHRlbmRpbmcgcCBpbiBtb3N0IGNhc2VzIHdoZW4gcG9zc2libGUsIG90aGVyd2lzZSBpdAotICBlbXBsb3lzIHRoZSBlcXVpdmFsZW50IG9mIGEgbWFsbG9jLWNvcHktZnJlZSBzZXF1ZW5jZS4KLQotICBJZiBwIGlzIG51bGwsIHJlYWxsb2MgaXMgZXF1aXZhbGVudCB0byBtYWxsb2MuCi0KLSAgSWYgc3BhY2UgaXMgbm90IGF2YWlsYWJsZSwgcmVhbGxvYyByZXR1cm5zIG51bGwsIGVycm5vIGlzIHNldCAoaWYgb24KLSAgQU5TSSkgYW5kIHAgaXMgTk9UIGZyZWVkLgotCi0gIGlmIG4gaXMgZm9yIGZld2VyIGJ5dGVzIHRoYW4gYWxyZWFkeSBoZWxkIGJ5IHAsIHRoZSBuZXdseSB1bnVzZWQKLSAgc3BhY2UgaXMgbG9wcGVkIG9mZiBhbmQgZnJlZWQgaWYgcG9zc2libGUuICByZWFsbG9jIHdpdGggYSBzaXplCi0gIGFyZ3VtZW50IG9mIHplcm8gKHJlKWFsbG9jYXRlcyBhIG1pbmltdW0tc2l6ZWQgY2h1bmsuCi0KLSAgVGhlIG9sZCB1bml4IHJlYWxsb2MgY29udmVudGlvbiBvZiBhbGxvd2luZyB0aGUgbGFzdC1mcmVlJ2QgY2h1bmsKLSAgdG8gYmUgdXNlZCBhcyBhbiBhcmd1bWVudCB0byByZWFsbG9jIGlzIG5vdCBzdXBwb3J0ZWQuCi0qLwotCi12b2lkKiBkbHJlYWxsb2Modm9pZCosIHNpemVfdCk7Ci0KLS8qCi0gIG1lbWFsaWduKHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBuKTsKLSAgUmV0dXJucyBhIHBvaW50ZXIgdG8gYSBuZXdseSBhbGxvY2F0ZWQgY2h1bmsgb2YgbiBieXRlcywgYWxpZ25lZAotICBpbiBhY2NvcmQgd2l0aCB0aGUgYWxpZ25tZW50IGFyZ3VtZW50LgotCi0gIFRoZSBhbGlnbm1lbnQgYXJndW1lbnQgc2hvdWxkIGJlIGEgcG93ZXIgb2YgdHdvLiBJZiB0aGUgYXJndW1lbnQgaXMKLSAgbm90IGEgcG93ZXIgb2YgdHdvLCB0aGUgbmVhcmVzdCBncmVhdGVyIHBvd2VyIGlzIHVzZWQuCi0gIDgtYnl0ZSBhbGlnbm1lbnQgaXMgZ3VhcmFudGVlZCBieSBub3JtYWwgbWFsbG9jIGNhbGxzLCBzbyBkb24ndAotICBib3RoZXIgY2FsbGluZyBtZW1hbGlnbiB3aXRoIGFuIGFyZ3VtZW50IG9mIDggb3IgbGVzcy4KLQotICBPdmVycmVsaWFuY2Ugb24gbWVtYWxpZ24gaXMgYSBzdXJlIHdheSB0byBmcmFnbWVudCBzcGFjZS4KLSovCi12b2lkKiBkbG1lbWFsaWduKHNpemVfdCwgc2l6ZV90KTsKLQotLyoKLSAgaW50IHBvc2l4X21lbWFsaWduKHZvaWQgKiptZW1wdHIsIHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBzaXplKTsKLSAgUGxhY2VzIGEgcG9pbnRlciB0byBhIG5ld2x5IGFsbG9jYXRlZCBjaHVuayBvZiBzaXplIGJ5dGVzLCBhbGlnbmVkCi0gIGluIGFjY29yZCB3aXRoIHRoZSBhbGlnbm1lbnQgYXJndW1lbnQsIGluICptZW1wdHIuCi0KLSAgVGhlIHJldHVybiB2YWx1ZSBpcyAwIG9uIHN1Y2Nlc3MsIGFuZCBFTk9NRU0gb24gZmFpbHVyZS4KLQotICBUaGUgYWxpZ25tZW50IGFyZ3VtZW50IHNob3VsZCBiZSBhIHBvd2VyIG9mIHR3by4gSWYgdGhlIGFyZ3VtZW50IGlzCi0gIG5vdCBhIHBvd2VyIG9mIHR3bywgdGhlIG5lYXJlc3QgZ3JlYXRlciBwb3dlciBpcyB1c2VkLgotICA4LWJ5dGUgYWxpZ25tZW50IGlzIGd1YXJhbnRlZWQgYnkgbm9ybWFsIG1hbGxvYyBjYWxscywgc28gZG9uJ3QKLSAgYm90aGVyIGNhbGxpbmcgbWVtYWxpZ24gd2l0aCBhbiBhcmd1bWVudCBvZiA4IG9yIGxlc3MuCi0KLSAgT3ZlcnJlbGlhbmNlIG9uIHBvc2l4X21lbWFsaWduIGlzIGEgc3VyZSB3YXkgdG8gZnJhZ21lbnQgc3BhY2UuCi0qLwotaW50IHBvc2l4X21lbWFsaWduKHZvaWQgKiptZW1wdHIsIHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBzaXplKTsKLQotLyoKLSAgdmFsbG9jKHNpemVfdCBuKTsKLSAgRXF1aXZhbGVudCB0byBtZW1hbGlnbihwYWdlc2l6ZSwgbiksIHdoZXJlIHBhZ2VzaXplIGlzIHRoZSBwYWdlCi0gIHNpemUgb2YgdGhlIHN5c3RlbS4gSWYgdGhlIHBhZ2VzaXplIGlzIHVua25vd24sIDQwOTYgaXMgdXNlZC4KLSovCi12b2lkKiBkbHZhbGxvYyhzaXplX3QpOwotCi0vKgotICBtYWxsb3B0KGludCBwYXJhbWV0ZXJfbnVtYmVyLCBpbnQgcGFyYW1ldGVyX3ZhbHVlKQotICBTZXRzIHR1bmFibGUgcGFyYW1ldGVycyBUaGUgZm9ybWF0IGlzIHRvIHByb3ZpZGUgYQotICAocGFyYW1ldGVyLW51bWJlciwgcGFyYW1ldGVyLXZhbHVlKSBwYWlyLiAgbWFsbG9wdCB0aGVuIHNldHMgdGhlCi0gIGNvcnJlc3BvbmRpbmcgcGFyYW1ldGVyIHRvIHRoZSBhcmd1bWVudCB2YWx1ZSBpZiBpdCBjYW4gKGkuZS4sIHNvCi0gIGxvbmcgYXMgdGhlIHZhbHVlIGlzIG1lYW5pbmdmdWwpLCBhbmQgcmV0dXJucyAxIGlmIHN1Y2Nlc3NmdWwgZWxzZQotICAwLiAgU1ZJRC9YUEcvQU5TSSBkZWZpbmVzIGZvdXIgc3RhbmRhcmQgcGFyYW0gbnVtYmVycyBmb3IgbWFsbG9wdCwKLSAgbm9ybWFsbHkgZGVmaW5lZCBpbiBtYWxsb2MuaC4gIE5vbmUgb2YgdGhlc2UgYXJlIHVzZSBpbiB0aGlzIG1hbGxvYywKLSAgc28gc2V0dGluZyB0aGVtIGhhcyBubyBlZmZlY3QuIEJ1dCB0aGlzIG1hbGxvYyBhbHNvIHN1cHBvcnRzIG90aGVyCi0gIG9wdGlvbnMgaW4gbWFsbG9wdC4gU2VlIGJlbG93IGZvciBkZXRhaWxzLiAgQnJpZWZseSwgc3VwcG9ydGVkCi0gIHBhcmFtZXRlcnMgYXJlIGFzIGZvbGxvd3MgKGxpc3RlZCBkZWZhdWx0cyBhcmUgZm9yICJ0eXBpY2FsIgotICBjb25maWd1cmF0aW9ucykuCi0KLSAgU3ltYm9sICAgICAgICAgICAgcGFyYW0gIyAgZGVmYXVsdCAgICBhbGxvd2VkIHBhcmFtIHZhbHVlcwotICBNX1RSSU1fVEhSRVNIT0xEICAgICAtMSAgIDIqMTAyNCoxMDI0ICAgYW55ICAgKE1BWF9TSVpFX1QgZGlzYWJsZXMpCi0gIE1fR1JBTlVMQVJJVFkgICAgICAgIC0yICAgICBwYWdlIHNpemUgICBhbnkgcG93ZXIgb2YgMiA+PSBwYWdlIHNpemUKLSAgTV9NTUFQX1RIUkVTSE9MRCAgICAgLTMgICAgICAyNTYqMTAyNCAgIGFueSAgIChvciAwIGlmIG5vIE1NQVAgc3VwcG9ydCkKLSovCi1pbnQgZGxtYWxsb3B0KGludCwgaW50KTsKLQotLyoKLSAgbWFsbG9jX2Zvb3RwcmludCgpOwotICBSZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgb2J0YWluZWQgZnJvbSB0aGUgc3lzdGVtLiAgVGhlIHRvdGFsCi0gIG51bWJlciBvZiBieXRlcyBhbGxvY2F0ZWQgYnkgbWFsbG9jLCByZWFsbG9jIGV0Yy4sIGlzIGxlc3MgdGhhbiB0aGlzCi0gIHZhbHVlLiBVbmxpa2UgbWFsbGluZm8sIHRoaXMgZnVuY3Rpb24gcmV0dXJucyBvbmx5IGEgcHJlY29tcHV0ZWQKLSAgcmVzdWx0LCBzbyBjYW4gYmUgY2FsbGVkIGZyZXF1ZW50bHkgdG8gbW9uaXRvciBtZW1vcnkgY29uc3VtcHRpb24uCi0gIEV2ZW4gaWYgbG9ja3MgYXJlIG90aGVyd2lzZSBkZWZpbmVkLCB0aGlzIGZ1bmN0aW9uIGRvZXMgbm90IHVzZSB0aGVtLAotICBzbyByZXN1bHRzIG1pZ2h0IG5vdCBiZSB1cCB0byBkYXRlLgotKi8KLXNpemVfdCBkbG1hbGxvY19mb290cHJpbnQodm9pZCk7Ci0KLSNpZiBVU0VfTUFYX0FMTE9XRURfRk9PVFBSSU5UCi0vKgotICBtYWxsb2NfbWF4X2FsbG93ZWRfZm9vdHByaW50KCk7Ci0gIFJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyB0aGF0IHRoZSBoZWFwIGlzIGFsbG93ZWQgdG8gb2J0YWluCi0gIGZyb20gdGhlIHN5c3RlbS4gIG1hbGxvY19mb290cHJpbnQoKSBzaG91bGQgYWx3YXlzIHJldHVybiBhCi0gIHNpemUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIG1heF9hbGxvd2VkX2Zvb3RwcmludCwgdW5sZXNzIHRoZQotICBtYXhfYWxsb3dlZF9mb290cHJpbnQgd2FzIHNldCB0byBhIHZhbHVlIHNtYWxsZXIgdGhhbiB0aGUKLSAgZm9vdHByaW50IGF0IHRoZSB0aW1lLgotKi8KLXNpemVfdCBkbG1hbGxvY19tYXhfYWxsb3dlZF9mb290cHJpbnQoKTsKLQotLyoKLSAgbWFsbG9jX3NldF9tYXhfYWxsb3dlZF9mb290cHJpbnQoKTsKLSAgU2V0IHRoZSBtYXhpbXVtIG51bWJlciBvZiBieXRlcyB0aGF0IHRoZSBoZWFwIGlzIGFsbG93ZWQgdG8KLSAgb2J0YWluIGZyb20gdGhlIHN5c3RlbS4gIFRoZSBzaXplIHdpbGwgYmUgcm91bmRlZCB1cCB0byBhIHdob2xlCi0gIHBhZ2UsIGFuZCB0aGUgcm91bmRlZCBudW1iZXIgd2lsbCBiZSByZXR1cm5lZCBmcm9tIGZ1dHVyZSBjYWxscwotICB0byBtYWxsb2NfbWF4X2FsbG93ZWRfZm9vdHByaW50KCkuICBJZiB0aGUgbmV3IG1heF9hbGxvd2VkX2Zvb3RwcmludAotICBpcyBsYXJnZXIgdGhhbiB0aGUgY3VycmVudCBmb290cHJpbnQsIHRoZSBoZWFwIHdpbGwgbmV2ZXIgZ3JvdwotICBsYXJnZXIgdGhhbiBtYXhfYWxsb3dlZF9mb290cHJpbnQuICBJZiB0aGUgbmV3IG1heF9hbGxvd2VkX2Zvb3RwcmludAotICBpcyBzbWFsbGVyIHRoYW4gdGhlIGN1cnJlbnQgZm9vdHByaW50LCB0aGUgaGVhcCB3aWxsIG5vdCBncm93Ci0gIGZ1cnRoZXIuCi0KLSAgVE9ETzogdHJ5IHRvIGZvcmNlIHRoZSBoZWFwIHRvIGdpdmUgdXAgbWVtb3J5IGluIHRoZSBzaHJpbmsgY2FzZSwKLSAgICAgICAgYW5kIHVwZGF0ZSB0aGlzIGNvbW1lbnQgb25jZSB0aGF0IGhhcHBlbnMuCi0qLwotdm9pZCBkbG1hbGxvY19zZXRfbWF4X2FsbG93ZWRfZm9vdHByaW50KHNpemVfdCBieXRlcyk7Ci0jZW5kaWYgLyogVVNFX01BWF9BTExPV0VEX0ZPT1RQUklOVCAqLwotCi0vKgotICBtYWxsb2NfbWF4X2Zvb3RwcmludCgpOwotICBSZXR1cm5zIHRoZSBtYXhpbXVtIG51bWJlciBvZiBieXRlcyBvYnRhaW5lZCBmcm9tIHRoZSBzeXN0ZW0uIFRoaXMKLSAgdmFsdWUgd2lsbCBiZSBncmVhdGVyIHRoYW4gY3VycmVudCBmb290cHJpbnQgaWYgZGVhbGxvY2F0ZWQgc3BhY2UKLSAgaGFzIGJlZW4gcmVjbGFpbWVkIGJ5IHRoZSBzeXN0ZW0uIFRoZSBwZWFrIG51bWJlciBvZiBieXRlcyBhbGxvY2F0ZWQKLSAgYnkgbWFsbG9jLCByZWFsbG9jIGV0Yy4sIGlzIGxlc3MgdGhhbiB0aGlzIHZhbHVlLiBVbmxpa2UgbWFsbGluZm8sCi0gIHRoaXMgZnVuY3Rpb24gcmV0dXJucyBvbmx5IGEgcHJlY29tcHV0ZWQgcmVzdWx0LCBzbyBjYW4gYmUgY2FsbGVkCi0gIGZyZXF1ZW50bHkgdG8gbW9uaXRvciBtZW1vcnkgY29uc3VtcHRpb24uICBFdmVuIGlmIGxvY2tzIGFyZQotICBvdGhlcndpc2UgZGVmaW5lZCwgdGhpcyBmdW5jdGlvbiBkb2VzIG5vdCB1c2UgdGhlbSwgc28gcmVzdWx0cyBtaWdodAotICBub3QgYmUgdXAgdG8gZGF0ZS4KLSovCi1zaXplX3QgZGxtYWxsb2NfbWF4X2Zvb3RwcmludCh2b2lkKTsKLQotI2lmICFOT19NQUxMSU5GTwotLyoKLSAgbWFsbGluZm8oKQotICBSZXR1cm5zIChieSBjb3B5KSBhIHN0cnVjdCBjb250YWluaW5nIHZhcmlvdXMgc3VtbWFyeSBzdGF0aXN0aWNzOgotCi0gIGFyZW5hOiAgICAgY3VycmVudCB0b3RhbCBub24tbW1hcHBlZCBieXRlcyBhbGxvY2F0ZWQgZnJvbSBzeXN0ZW0KLSAgb3JkYmxrczogICB0aGUgbnVtYmVyIG9mIGZyZWUgY2h1bmtzCi0gIHNtYmxrczogICAgYWx3YXlzIHplcm8uCi0gIGhibGtzOiAgICAgY3VycmVudCBudW1iZXIgb2YgbW1hcHBlZCByZWdpb25zCi0gIGhibGtoZDogICAgdG90YWwgYnl0ZXMgaGVsZCBpbiBtbWFwcGVkIHJlZ2lvbnMKLSAgdXNtYmxrczogICB0aGUgbWF4aW11bSB0b3RhbCBhbGxvY2F0ZWQgc3BhY2UuIFRoaXMgd2lsbCBiZSBncmVhdGVyCi0gICAgICAgICAgICAgICAgdGhhbiBjdXJyZW50IHRvdGFsIGlmIHRyaW1taW5nIGhhcyBvY2N1cnJlZC4KLSAgZnNtYmxrczogICBhbHdheXMgemVybwotICB1b3JkYmxrczogIGN1cnJlbnQgdG90YWwgYWxsb2NhdGVkIHNwYWNlIChub3JtYWwgb3IgbW1hcHBlZCkKLSAgZm9yZGJsa3M6ICB0b3RhbCBmcmVlIHNwYWNlCi0gIGtlZXBjb3N0OiAgdGhlIG1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIHRoYXQgY291bGQgaWRlYWxseSBiZSByZWxlYXNlZAotICAgICAgICAgICAgICAgYmFjayB0byBzeXN0ZW0gdmlhIG1hbGxvY190cmltLiAoImlkZWFsbHkiIG1lYW5zIHRoYXQKLSAgICAgICAgICAgICAgIGl0IGlnbm9yZXMgcGFnZSByZXN0cmljdGlvbnMgZXRjLikKLQotICBCZWNhdXNlIHRoZXNlIGZpZWxkcyBhcmUgaW50cywgYnV0IGludGVybmFsIGJvb2trZWVwaW5nIG1heQotICBiZSBrZXB0IGFzIGxvbmdzLCB0aGUgcmVwb3J0ZWQgdmFsdWVzIG1heSB3cmFwIGFyb3VuZCB6ZXJvIGFuZAotICB0aHVzIGJlIGluYWNjdXJhdGUuCi0qLwotc3RydWN0IG1hbGxpbmZvIGRsbWFsbGluZm8odm9pZCk7Ci0jZW5kaWYgLyogTk9fTUFMTElORk8gKi8KLQotLyoKLSAgaW5kZXBlbmRlbnRfY2FsbG9jKHNpemVfdCBuX2VsZW1lbnRzLCBzaXplX3QgZWxlbWVudF9zaXplLCB2b2lkKiBjaHVua3NbXSk7Ci0KLSAgaW5kZXBlbmRlbnRfY2FsbG9jIGlzIHNpbWlsYXIgdG8gY2FsbG9jLCBidXQgaW5zdGVhZCBvZiByZXR1cm5pbmcgYQotICBzaW5nbGUgY2xlYXJlZCBzcGFjZSwgaXQgcmV0dXJucyBhbiBhcnJheSBvZiBwb2ludGVycyB0byBuX2VsZW1lbnRzCi0gIGluZGVwZW5kZW50IGVsZW1lbnRzIHRoYXQgY2FuIGhvbGQgY29udGVudHMgb2Ygc2l6ZSBlbGVtX3NpemUsIGVhY2gKLSAgb2Ygd2hpY2ggc3RhcnRzIG91dCBjbGVhcmVkLCBhbmQgY2FuIGJlIGluZGVwZW5kZW50bHkgZnJlZWQsCi0gIHJlYWxsb2MnZWQgZXRjLiBUaGUgZWxlbWVudHMgYXJlIGd1YXJhbnRlZWQgdG8gYmUgYWRqYWNlbnRseQotICBhbGxvY2F0ZWQgKHRoaXMgaXMgbm90IGd1YXJhbnRlZWQgdG8gb2NjdXIgd2l0aCBtdWx0aXBsZSBjYWxsb2NzIG9yCi0gIG1hbGxvY3MpLCB3aGljaCBtYXkgYWxzbyBpbXByb3ZlIGNhY2hlIGxvY2FsaXR5IGluIHNvbWUKLSAgYXBwbGljYXRpb25zLgotCi0gIFRoZSAiY2h1bmtzIiBhcmd1bWVudCBpcyBvcHRpb25hbCAoaS5lLiwgbWF5IGJlIG51bGwsIHdoaWNoIGlzCi0gIHByb2JhYmx5IHRoZSBtb3N0IHR5cGljYWwgdXNhZ2UpLiBJZiBpdCBpcyBudWxsLCB0aGUgcmV0dXJuZWQgYXJyYXkKLSAgaXMgaXRzZWxmIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBhbmQgc2hvdWxkIGFsc28gYmUgZnJlZWQgd2hlbiBpdCBpcwotICBubyBsb25nZXIgbmVlZGVkLiBPdGhlcndpc2UsIHRoZSBjaHVua3MgYXJyYXkgbXVzdCBiZSBvZiBhdCBsZWFzdAotICBuX2VsZW1lbnRzIGluIGxlbmd0aC4gSXQgaXMgZmlsbGVkIGluIHdpdGggdGhlIHBvaW50ZXJzIHRvIHRoZQotICBjaHVua3MuCi0KLSAgSW4gZWl0aGVyIGNhc2UsIGluZGVwZW5kZW50X2NhbGxvYyByZXR1cm5zIHRoaXMgcG9pbnRlciBhcnJheSwgb3IKLSAgbnVsbCBpZiB0aGUgYWxsb2NhdGlvbiBmYWlsZWQuICBJZiBuX2VsZW1lbnRzIGlzIHplcm8gYW5kICJjaHVua3MiCi0gIGlzIG51bGwsIGl0IHJldHVybnMgYSBjaHVuayByZXByZXNlbnRpbmcgYW4gYXJyYXkgd2l0aCB6ZXJvIGVsZW1lbnRzCi0gICh3aGljaCBzaG91bGQgYmUgZnJlZWQgaWYgbm90IHdhbnRlZCkuCi0KLSAgRWFjaCBlbGVtZW50IG11c3QgYmUgaW5kaXZpZHVhbGx5IGZyZWVkIHdoZW4gaXQgaXMgbm8gbG9uZ2VyCi0gIG5lZWRlZC4gSWYgeW91J2QgbGlrZSB0byBpbnN0ZWFkIGJlIGFibGUgdG8gZnJlZSBhbGwgYXQgb25jZSwgeW91Ci0gIHNob3VsZCBpbnN0ZWFkIHVzZSByZWd1bGFyIGNhbGxvYyBhbmQgYXNzaWduIHBvaW50ZXJzIGludG8gdGhpcwotICBzcGFjZSB0byByZXByZXNlbnQgZWxlbWVudHMuICAoSW4gdGhpcyBjYXNlIHRob3VnaCwgeW91IGNhbm5vdAotICBpbmRlcGVuZGVudGx5IGZyZWUgZWxlbWVudHMuKQotCi0gIGluZGVwZW5kZW50X2NhbGxvYyBzaW1wbGlmaWVzIGFuZCBzcGVlZHMgdXAgaW1wbGVtZW50YXRpb25zIG9mIG1hbnkKLSAga2luZHMgb2YgcG9vbHMuICBJdCBtYXkgYWxzbyBiZSB1c2VmdWwgd2hlbiBjb25zdHJ1Y3RpbmcgbGFyZ2UgZGF0YQotICBzdHJ1Y3R1cmVzIHRoYXQgaW5pdGlhbGx5IGhhdmUgYSBmaXhlZCBudW1iZXIgb2YgZml4ZWQtc2l6ZWQgbm9kZXMsCi0gIGJ1dCB0aGUgbnVtYmVyIGlzIG5vdCBrbm93biBhdCBjb21waWxlIHRpbWUsIGFuZCBzb21lIG9mIHRoZSBub2RlcwotICBtYXkgbGF0ZXIgbmVlZCB0byBiZSBmcmVlZC4gRm9yIGV4YW1wbGU6Ci0KLSAgc3RydWN0IE5vZGUgeyBpbnQgaXRlbTsgc3RydWN0IE5vZGUqIG5leHQ7IH07Ci0KLSAgc3RydWN0IE5vZGUqIGJ1aWxkX2xpc3QoKSB7Ci0gICAgc3RydWN0IE5vZGUqKiBwb29sOwotICAgIGludCBuID0gcmVhZF9udW1iZXJfb2Zfbm9kZXNfbmVlZGVkKCk7Ci0gICAgaWYgKG4gPD0gMCkgcmV0dXJuIDA7Ci0gICAgcG9vbCA9IChzdHJ1Y3QgTm9kZSoqKShpbmRlcGVuZGVudF9jYWxsb2Mobiwgc2l6ZW9mKHN0cnVjdCBOb2RlKSwgMCk7Ci0gICAgaWYgKHBvb2wgPT0gMCkgZGllKCk7Ci0gICAgLy8gb3JnYW5pemUgaW50byBhIGxpbmtlZCBsaXN0Li4uCi0gICAgc3RydWN0IE5vZGUqIGZpcnN0ID0gcG9vbFswXTsKLSAgICBmb3IgKGkgPSAwOyBpIDwgbi0xOyArK2kpCi0gICAgICBwb29sW2ldLT5uZXh0ID0gcG9vbFtpKzFdOwotICAgIGZyZWUocG9vbCk7ICAgICAvLyBDYW4gbm93IGZyZWUgdGhlIGFycmF5IChvciBub3QsIGlmIGl0IGlzIG5lZWRlZCBsYXRlcikKLSAgICByZXR1cm4gZmlyc3Q7Ci0gIH0KLSovCi12b2lkKiogZGxpbmRlcGVuZGVudF9jYWxsb2Moc2l6ZV90LCBzaXplX3QsIHZvaWQqKik7Ci0KLS8qCi0gIGluZGVwZW5kZW50X2NvbWFsbG9jKHNpemVfdCBuX2VsZW1lbnRzLCBzaXplX3Qgc2l6ZXNbXSwgdm9pZCogY2h1bmtzW10pOwotCi0gIGluZGVwZW5kZW50X2NvbWFsbG9jIGFsbG9jYXRlcywgYWxsIGF0IG9uY2UsIGEgc2V0IG9mIG5fZWxlbWVudHMKLSAgY2h1bmtzIHdpdGggc2l6ZXMgaW5kaWNhdGVkIGluIHRoZSAic2l6ZXMiIGFycmF5LiAgICBJdCByZXR1cm5zCi0gIGFuIGFycmF5IG9mIHBvaW50ZXJzIHRvIHRoZXNlIGVsZW1lbnRzLCBlYWNoIG9mIHdoaWNoIGNhbiBiZQotICBpbmRlcGVuZGVudGx5IGZyZWVkLCByZWFsbG9jJ2VkIGV0Yy4gVGhlIGVsZW1lbnRzIGFyZSBndWFyYW50ZWVkIHRvCi0gIGJlIGFkamFjZW50bHkgYWxsb2NhdGVkICh0aGlzIGlzIG5vdCBndWFyYW50ZWVkIHRvIG9jY3VyIHdpdGgKLSAgbXVsdGlwbGUgY2FsbG9jcyBvciBtYWxsb2NzKSwgd2hpY2ggbWF5IGFsc28gaW1wcm92ZSBjYWNoZSBsb2NhbGl0eQotICBpbiBzb21lIGFwcGxpY2F0aW9ucy4KLQotICBUaGUgImNodW5rcyIgYXJndW1lbnQgaXMgb3B0aW9uYWwgKGkuZS4sIG1heSBiZSBudWxsKS4gSWYgaXQgaXMgbnVsbAotICB0aGUgcmV0dXJuZWQgYXJyYXkgaXMgaXRzZWxmIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBhbmQgc2hvdWxkIGFsc28KLSAgYmUgZnJlZWQgd2hlbiBpdCBpcyBubyBsb25nZXIgbmVlZGVkLiBPdGhlcndpc2UsIHRoZSBjaHVua3MgYXJyYXkKLSAgbXVzdCBiZSBvZiBhdCBsZWFzdCBuX2VsZW1lbnRzIGluIGxlbmd0aC4gSXQgaXMgZmlsbGVkIGluIHdpdGggdGhlCi0gIHBvaW50ZXJzIHRvIHRoZSBjaHVua3MuCi0KLSAgSW4gZWl0aGVyIGNhc2UsIGluZGVwZW5kZW50X2NvbWFsbG9jIHJldHVybnMgdGhpcyBwb2ludGVyIGFycmF5LCBvcgotICBudWxsIGlmIHRoZSBhbGxvY2F0aW9uIGZhaWxlZC4gIElmIG5fZWxlbWVudHMgaXMgemVybyBhbmQgY2h1bmtzIGlzCi0gIG51bGwsIGl0IHJldHVybnMgYSBjaHVuayByZXByZXNlbnRpbmcgYW4gYXJyYXkgd2l0aCB6ZXJvIGVsZW1lbnRzCi0gICh3aGljaCBzaG91bGQgYmUgZnJlZWQgaWYgbm90IHdhbnRlZCkuCi0KLSAgRWFjaCBlbGVtZW50IG11c3QgYmUgaW5kaXZpZHVhbGx5IGZyZWVkIHdoZW4gaXQgaXMgbm8gbG9uZ2VyCi0gIG5lZWRlZC4gSWYgeW91J2QgbGlrZSB0byBpbnN0ZWFkIGJlIGFibGUgdG8gZnJlZSBhbGwgYXQgb25jZSwgeW91Ci0gIHNob3VsZCBpbnN0ZWFkIHVzZSBhIHNpbmdsZSByZWd1bGFyIG1hbGxvYywgYW5kIGFzc2lnbiBwb2ludGVycyBhdAotICBwYXJ0aWN1bGFyIG9mZnNldHMgaW4gdGhlIGFnZ3JlZ2F0ZSBzcGFjZS4gKEluIHRoaXMgY2FzZSB0aG91Z2gsIHlvdQotICBjYW5ub3QgaW5kZXBlbmRlbnRseSBmcmVlIGVsZW1lbnRzLikKLQotICBpbmRlcGVuZGVudF9jb21hbGxhYyBkaWZmZXJzIGZyb20gaW5kZXBlbmRlbnRfY2FsbG9jIGluIHRoYXQgZWFjaAotICBlbGVtZW50IG1heSBoYXZlIGEgZGlmZmVyZW50IHNpemUsIGFuZCBhbHNvIHRoYXQgaXQgZG9lcyBub3QKLSAgYXV0b21hdGljYWxseSBjbGVhciBlbGVtZW50cy4KLQotICBpbmRlcGVuZGVudF9jb21hbGxvYyBjYW4gYmUgdXNlZCB0byBzcGVlZCB1cCBhbGxvY2F0aW9uIGluIGNhc2VzCi0gIHdoZXJlIHNldmVyYWwgc3RydWN0cyBvciBvYmplY3RzIG11c3QgYWx3YXlzIGJlIGFsbG9jYXRlZCBhdCB0aGUKLSAgc2FtZSB0aW1lLiAgRm9yIGV4YW1wbGU6Ci0KLSAgc3RydWN0IEhlYWQgeyAuLi4gfQotICBzdHJ1Y3QgRm9vdCB7IC4uLiB9Ci0KLSAgdm9pZCBzZW5kX21lc3NhZ2UoY2hhciogbXNnKSB7Ci0gICAgaW50IG1zZ2xlbiA9IHN0cmxlbihtc2cpOwotICAgIHNpemVfdCBzaXplc1szXSA9IHsgc2l6ZW9mKHN0cnVjdCBIZWFkKSwgbXNnbGVuLCBzaXplb2Yoc3RydWN0IEZvb3QpIH07Ci0gICAgdm9pZCogY2h1bmtzWzNdOwotICAgIGlmIChpbmRlcGVuZGVudF9jb21hbGxvYygzLCBzaXplcywgY2h1bmtzKSA9PSAwKQotICAgICAgZGllKCk7Ci0gICAgc3RydWN0IEhlYWQqIGhlYWQgPSAoc3RydWN0IEhlYWQqKShjaHVua3NbMF0pOwotICAgIGNoYXIqICAgICAgICBib2R5ID0gKGNoYXIqKShjaHVua3NbMV0pOwotICAgIHN0cnVjdCBGb290KiBmb290ID0gKHN0cnVjdCBGb290KikoY2h1bmtzWzJdKTsKLSAgICAvLyAuLi4KLSAgfQotCi0gIEluIGdlbmVyYWwgdGhvdWdoLCBpbmRlcGVuZGVudF9jb21hbGxvYyBpcyB3b3J0aCB1c2luZyBvbmx5IGZvcgotICBsYXJnZXIgdmFsdWVzIG9mIG5fZWxlbWVudHMuIEZvciBzbWFsbCB2YWx1ZXMsIHlvdSBwcm9iYWJseSB3b24ndAotICBkZXRlY3QgZW5vdWdoIGRpZmZlcmVuY2UgZnJvbSBzZXJpZXMgb2YgbWFsbG9jIGNhbGxzIHRvIGJvdGhlci4KLQotICBPdmVydXNlIG9mIGluZGVwZW5kZW50X2NvbWFsbG9jIGNhbiBpbmNyZWFzZSBvdmVyYWxsIG1lbW9yeSB1c2FnZSwKLSAgc2luY2UgaXQgY2Fubm90IHJldXNlIGV4aXN0aW5nIG5vbmNvbnRpZ3VvdXMgc21hbGwgY2h1bmtzIHRoYXQKLSAgbWlnaHQgYmUgYXZhaWxhYmxlIGZvciBzb21lIG9mIHRoZSBlbGVtZW50cy4KLSovCi12b2lkKiogZGxpbmRlcGVuZGVudF9jb21hbGxvYyhzaXplX3QsIHNpemVfdCosIHZvaWQqKik7Ci0KLQotLyoKLSAgcHZhbGxvYyhzaXplX3Qgbik7Ci0gIEVxdWl2YWxlbnQgdG8gdmFsbG9jKG1pbmltdW0tcGFnZS10aGF0LWhvbGRzKG4pKSwgdGhhdCBpcywKLSAgcm91bmQgdXAgbiB0byBuZWFyZXN0IHBhZ2VzaXplLgotICovCi12b2lkKiAgZGxwdmFsbG9jKHNpemVfdCk7Ci0KLS8qCi0gIG1hbGxvY190cmltKHNpemVfdCBwYWQpOwotCi0gIElmIHBvc3NpYmxlLCBnaXZlcyBtZW1vcnkgYmFjayB0byB0aGUgc3lzdGVtICh2aWEgbmVnYXRpdmUgYXJndW1lbnRzCi0gIHRvIHNicmspIGlmIHRoZXJlIGlzIHVudXNlZCBtZW1vcnkgYXQgdGhlIGBoaWdoJyBlbmQgb2YgdGhlIG1hbGxvYwotICBwb29sIG9yIGluIHVudXNlZCBNTUFQIHNlZ21lbnRzLiBZb3UgY2FuIGNhbGwgdGhpcyBhZnRlciBmcmVlaW5nCi0gIGxhcmdlIGJsb2NrcyBvZiBtZW1vcnkgdG8gcG90ZW50aWFsbHkgcmVkdWNlIHRoZSBzeXN0ZW0tbGV2ZWwgbWVtb3J5Ci0gIHJlcXVpcmVtZW50cyBvZiBhIHByb2dyYW0uIEhvd2V2ZXIsIGl0IGNhbm5vdCBndWFyYW50ZWUgdG8gcmVkdWNlCi0gIG1lbW9yeS4gVW5kZXIgc29tZSBhbGxvY2F0aW9uIHBhdHRlcm5zLCBzb21lIGxhcmdlIGZyZWUgYmxvY2tzIG9mCi0gIG1lbW9yeSB3aWxsIGJlIGxvY2tlZCBiZXR3ZWVuIHR3byB1c2VkIGNodW5rcywgc28gdGhleSBjYW5ub3QgYmUKLSAgZ2l2ZW4gYmFjayB0byB0aGUgc3lzdGVtLgotCi0gIFRoZSBgcGFkJyBhcmd1bWVudCB0byBtYWxsb2NfdHJpbSByZXByZXNlbnRzIHRoZSBhbW91bnQgb2YgZnJlZQotICB0cmFpbGluZyBzcGFjZSB0byBsZWF2ZSB1bnRyaW1tZWQuIElmIHRoaXMgYXJndW1lbnQgaXMgemVybywgb25seQotICB0aGUgbWluaW11bSBhbW91bnQgb2YgbWVtb3J5IHRvIG1haW50YWluIGludGVybmFsIGRhdGEgc3RydWN0dXJlcwotICB3aWxsIGJlIGxlZnQuIE5vbi16ZXJvIGFyZ3VtZW50cyBjYW4gYmUgc3VwcGxpZWQgdG8gbWFpbnRhaW4gZW5vdWdoCi0gIHRyYWlsaW5nIHNwYWNlIHRvIHNlcnZpY2UgZnV0dXJlIGV4cGVjdGVkIGFsbG9jYXRpb25zIHdpdGhvdXQgaGF2aW5nCi0gIHRvIHJlLW9idGFpbiBtZW1vcnkgZnJvbSB0aGUgc3lzdGVtLgotCi0gIE1hbGxvY190cmltIHJldHVybnMgMSBpZiBpdCBhY3R1YWxseSByZWxlYXNlZCBhbnkgbWVtb3J5LCBlbHNlIDAuCi0qLwotaW50ICBkbG1hbGxvY190cmltKHNpemVfdCk7Ci0KLS8qCi0gIG1hbGxvY193YWxrX2ZyZWVfcGFnZXMoaGFuZGxlciwgaGFyZykKLQotICBDYWxscyB0aGUgcHJvdmlkZWQgaGFuZGxlciBvbiBlYWNoIGZyZWUgcmVnaW9uIGluIHRoZSBoZWFwLiAgVGhlCi0gIG1lbW9yeSBiZXR3ZWVuIHN0YXJ0IGFuZCBlbmQgYXJlIGd1YXJhbnRlZWQgbm90IHRvIGNvbnRhaW4gYW55Ci0gIGltcG9ydGFudCBkYXRhLCBzbyB0aGUgaGFuZGxlciBpcyBmcmVlIHRvIGFsdGVyIHRoZSBjb250ZW50cwotICBpbiBhbnkgd2F5LiAgVGhpcyBjYW4gYmUgdXNlZCB0byBhZHZpc2UgdGhlIE9TIHRoYXQgbGFyZ2UgZnJlZQotICByZWdpb25zIG1heSBiZSBzd2FwcGVkIG91dC4KLQotICBUaGUgdmFsdWUgaW4gaGFyZyB3aWxsIGJlIHBhc3NlZCB0byBlYWNoIGNhbGwgb2YgdGhlIGhhbmRsZXIuCi0gKi8KLXZvaWQgZGxtYWxsb2Nfd2Fsa19mcmVlX3BhZ2VzKHZvaWQoKikodm9pZCosIHZvaWQqLCB2b2lkKiksIHZvaWQqKTsKLQotLyoKLSAgbWFsbG9jX3dhbGtfaGVhcChoYW5kbGVyLCBoYXJnKQotCi0gIENhbGxzIHRoZSBwcm92aWRlZCBoYW5kbGVyIG9uIGVhY2ggb2JqZWN0IG9yIGZyZWUgcmVnaW9uIGluIHRoZQotICBoZWFwLiAgVGhlIGhhbmRsZXIgd2lsbCByZWNlaXZlIHRoZSBjaHVuayBwb2ludGVyIGFuZCBsZW5ndGgsIHRoZQotICBvYmplY3QgcG9pbnRlciBhbmQgbGVuZ3RoLCBhbmQgdGhlIHZhbHVlIGluIGhhcmcgb24gZWFjaCBjYWxsLgotICovCi12b2lkIGRsbWFsbG9jX3dhbGtfaGVhcCh2b2lkKCopKGNvbnN0IHZvaWQqLCBzaXplX3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQqLCBzaXplX3QsIHZvaWQqKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqKTsKLQotLyoKLSAgbWFsbG9jX3VzYWJsZV9zaXplKHZvaWQqIHApOwotCi0gIFJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyB5b3UgY2FuIGFjdHVhbGx5IHVzZSBpbgotICBhbiBhbGxvY2F0ZWQgY2h1bmssIHdoaWNoIG1heSBiZSBtb3JlIHRoYW4geW91IHJlcXVlc3RlZCAoYWx0aG91Z2gKLSAgb2Z0ZW4gbm90KSBkdWUgdG8gYWxpZ25tZW50IGFuZCBtaW5pbXVtIHNpemUgY29uc3RyYWludHMuCi0gIFlvdSBjYW4gdXNlIHRoaXMgbWFueSBieXRlcyB3aXRob3V0IHdvcnJ5aW5nIGFib3V0Ci0gIG92ZXJ3cml0aW5nIG90aGVyIGFsbG9jYXRlZCBvYmplY3RzLiBUaGlzIGlzIG5vdCBhIHBhcnRpY3VsYXJseSBncmVhdAotICBwcm9ncmFtbWluZyBwcmFjdGljZS4gbWFsbG9jX3VzYWJsZV9zaXplIGNhbiBiZSBtb3JlIHVzZWZ1bCBpbgotICBkZWJ1Z2dpbmcgYW5kIGFzc2VydGlvbnMsIGZvciBleGFtcGxlOgotCi0gIHAgPSBtYWxsb2Mobik7Ci0gIGFzc2VydChtYWxsb2NfdXNhYmxlX3NpemUocCkgPj0gMjU2KTsKLSovCi1zaXplX3QgZGxtYWxsb2NfdXNhYmxlX3NpemUodm9pZCopOwotCi0vKgotICBtYWxsb2Nfc3RhdHMoKTsKLSAgUHJpbnRzIG9uIHN0ZGVyciB0aGUgYW1vdW50IG9mIHNwYWNlIG9idGFpbmVkIGZyb20gdGhlIHN5c3RlbSAoYm90aAotICB2aWEgc2JyayBhbmQgbW1hcCksIHRoZSBtYXhpbXVtIGFtb3VudCAod2hpY2ggbWF5IGJlIG1vcmUgdGhhbgotICBjdXJyZW50IGlmIG1hbGxvY190cmltIGFuZC9vciBtdW5tYXAgZ290IGNhbGxlZCksIGFuZCB0aGUgY3VycmVudAotICBudW1iZXIgb2YgYnl0ZXMgYWxsb2NhdGVkIHZpYSBtYWxsb2MgKG9yIHJlYWxsb2MsIGV0YykgYnV0IG5vdCB5ZXQKLSAgZnJlZWQuIE5vdGUgdGhhdCB0aGlzIGlzIHRoZSBudW1iZXIgb2YgYnl0ZXMgYWxsb2NhdGVkLCBub3QgdGhlCi0gIG51bWJlciByZXF1ZXN0ZWQuIEl0IHdpbGwgYmUgbGFyZ2VyIHRoYW4gdGhlIG51bWJlciByZXF1ZXN0ZWQKLSAgYmVjYXVzZSBvZiBhbGlnbm1lbnQgYW5kIGJvb2trZWVwaW5nIG92ZXJoZWFkLiBCZWNhdXNlIGl0IGluY2x1ZGVzCi0gIGFsaWdubWVudCB3YXN0YWdlIGFzIGJlaW5nIGluIHVzZSwgdGhpcyBmaWd1cmUgbWF5IGJlIGdyZWF0ZXIgdGhhbgotICB6ZXJvIGV2ZW4gd2hlbiBubyB1c2VyLWxldmVsIGNodW5rcyBhcmUgYWxsb2NhdGVkLgotCi0gIFRoZSByZXBvcnRlZCBjdXJyZW50IGFuZCBtYXhpbXVtIHN5c3RlbSBtZW1vcnkgY2FuIGJlIGluYWNjdXJhdGUgaWYKLSAgYSBwcm9ncmFtIG1ha2VzIG90aGVyIGNhbGxzIHRvIHN5c3RlbSBtZW1vcnkgYWxsb2NhdGlvbiBmdW5jdGlvbnMKLSAgKG5vcm1hbGx5IHNicmspIG91dHNpZGUgb2YgbWFsbG9jLgotCi0gIG1hbGxvY19zdGF0cyBwcmludHMgb25seSB0aGUgbW9zdCBjb21tb25seSBpbnRlcmVzdGluZyBzdGF0aXN0aWNzLgotICBNb3JlIGluZm9ybWF0aW9uIGNhbiBiZSBvYnRhaW5lZCBieSBjYWxsaW5nIG1hbGxpbmZvLgotKi8KLXZvaWQgIGRsbWFsbG9jX3N0YXRzKHZvaWQpOwotCi0jZW5kaWYgLyogT05MWV9NU1BBQ0VTICovCi0KLSNpZiBNU1BBQ0VTCi0KLS8qCi0gIG1zcGFjZSBpcyBhbiBvcGFxdWUgdHlwZSByZXByZXNlbnRpbmcgYW4gaW5kZXBlbmRlbnQKLSAgcmVnaW9uIG9mIHNwYWNlIHRoYXQgc3VwcG9ydHMgbXNwYWNlX21hbGxvYywgZXRjLgotKi8KLXR5cGVkZWYgdm9pZCogbXNwYWNlOwotCi0vKgotICBjcmVhdGVfbXNwYWNlIGNyZWF0ZXMgYW5kIHJldHVybnMgYSBuZXcgaW5kZXBlbmRlbnQgc3BhY2Ugd2l0aCB0aGUKLSAgZ2l2ZW4gaW5pdGlhbCBjYXBhY2l0eSwgb3IsIGlmIDAsIHRoZSBkZWZhdWx0IGdyYW51bGFyaXR5IHNpemUuICBJdAotICByZXR1cm5zIG51bGwgaWYgdGhlcmUgaXMgbm8gc3lzdGVtIG1lbW9yeSBhdmFpbGFibGUgdG8gY3JlYXRlIHRoZQotICBzcGFjZS4gIElmIGFyZ3VtZW50IGxvY2tlZCBpcyBub24temVybywgdGhlIHNwYWNlIHVzZXMgYSBzZXBhcmF0ZQotICBsb2NrIHRvIGNvbnRyb2wgYWNjZXNzLiBUaGUgY2FwYWNpdHkgb2YgdGhlIHNwYWNlIHdpbGwgZ3JvdwotICBkeW5hbWljYWxseSBhcyBuZWVkZWQgdG8gc2VydmljZSBtc3BhY2VfbWFsbG9jIHJlcXVlc3RzLiAgWW91IGNhbgotICBjb250cm9sIHRoZSBzaXplcyBvZiBpbmNyZW1lbnRhbCBpbmNyZWFzZXMgb2YgdGhpcyBzcGFjZSBieQotICBjb21waWxpbmcgd2l0aCBhIGRpZmZlcmVudCBERUZBVUxUX0dSQU5VTEFSSVRZIG9yIGR5bmFtaWNhbGx5Ci0gIHNldHRpbmcgd2l0aCBtYWxsb3B0KE1fR1JBTlVMQVJJVFksIHZhbHVlKS4KLSovCi1tc3BhY2UgY3JlYXRlX21zcGFjZShzaXplX3QgY2FwYWNpdHksIGludCBsb2NrZWQpOwotCi0vKgotICBkZXN0cm95X21zcGFjZSBkZXN0cm95cyB0aGUgZ2l2ZW4gc3BhY2UsIGFuZCBhdHRlbXB0cyB0byByZXR1cm4gYWxsCi0gIG9mIGl0cyBtZW1vcnkgYmFjayB0byB0aGUgc3lzdGVtLCByZXR1cm5pbmcgdGhlIHRvdGFsIG51bWJlciBvZgotICBieXRlcyBmcmVlZC4gQWZ0ZXIgZGVzdHJ1Y3Rpb24sIHRoZSByZXN1bHRzIG9mIGFjY2VzcyB0byBhbGwgbWVtb3J5Ci0gIHVzZWQgYnkgdGhlIHNwYWNlIGJlY29tZSB1bmRlZmluZWQuCi0qLwotc2l6ZV90IGRlc3Ryb3lfbXNwYWNlKG1zcGFjZSBtc3ApOwotCi0vKgotICBjcmVhdGVfbXNwYWNlX3dpdGhfYmFzZSB1c2VzIHRoZSBtZW1vcnkgc3VwcGxpZWQgYXMgdGhlIGluaXRpYWwgYmFzZQotICBvZiBhIG5ldyBtc3BhY2UuIFBhcnQgKGxlc3MgdGhhbiAxMjgqc2l6ZW9mKHNpemVfdCkgYnl0ZXMpIG9mIHRoaXMKLSAgc3BhY2UgaXMgdXNlZCBmb3IgYm9va2tlZXBpbmcsIHNvIHRoZSBjYXBhY2l0eSBtdXN0IGJlIGF0IGxlYXN0IHRoaXMKLSAgbGFyZ2UuIChPdGhlcndpc2UgMCBpcyByZXR1cm5lZC4pIFdoZW4gdGhpcyBpbml0aWFsIHNwYWNlIGlzCi0gIGV4aGF1c3RlZCwgYWRkaXRpb25hbCBtZW1vcnkgd2lsbCBiZSBvYnRhaW5lZCBmcm9tIHRoZSBzeXN0ZW0uCi0gIERlc3Ryb3lpbmcgdGhpcyBzcGFjZSB3aWxsIGRlYWxsb2NhdGUgYWxsIGFkZGl0aW9uYWxseSBhbGxvY2F0ZWQKLSAgc3BhY2UgKGlmIHBvc3NpYmxlKSBidXQgbm90IHRoZSBpbml0aWFsIGJhc2UuCi0qLwotbXNwYWNlIGNyZWF0ZV9tc3BhY2Vfd2l0aF9iYXNlKHZvaWQqIGJhc2UsIHNpemVfdCBjYXBhY2l0eSwgaW50IGxvY2tlZCk7Ci0KLS8qCi0gIG1zcGFjZV9tYWxsb2MgYmVoYXZlcyBhcyBtYWxsb2MsIGJ1dCBvcGVyYXRlcyB3aXRoaW4KLSAgdGhlIGdpdmVuIHNwYWNlLgotKi8KLXZvaWQqIG1zcGFjZV9tYWxsb2MobXNwYWNlIG1zcCwgc2l6ZV90IGJ5dGVzKTsKLQotLyoKLSAgbXNwYWNlX2ZyZWUgYmVoYXZlcyBhcyBmcmVlLCBidXQgb3BlcmF0ZXMgd2l0aGluCi0gIHRoZSBnaXZlbiBzcGFjZS4KLQotICBJZiBjb21waWxlZCB3aXRoIEZPT1RFUlM9PTEsIG1zcGFjZV9mcmVlIGlzIG5vdCBhY3R1YWxseSBuZWVkZWQuCi0gIGZyZWUgbWF5IGJlIGNhbGxlZCBpbnN0ZWFkIG9mIG1zcGFjZV9mcmVlIGJlY2F1c2UgZnJlZWQgY2h1bmtzIGZyb20KLSAgYW55IHNwYWNlIGFyZSBoYW5kbGVkIGJ5IHRoZWlyIG9yaWdpbmF0aW5nIHNwYWNlcy4KLSovCi12b2lkIG1zcGFjZV9mcmVlKG1zcGFjZSBtc3AsIHZvaWQqIG1lbSk7Ci0KLS8qCi0gIG1zcGFjZV9yZWFsbG9jIGJlaGF2ZXMgYXMgcmVhbGxvYywgYnV0IG9wZXJhdGVzIHdpdGhpbgotICB0aGUgZ2l2ZW4gc3BhY2UuCi0KLSAgSWYgY29tcGlsZWQgd2l0aCBGT09URVJTPT0xLCBtc3BhY2VfcmVhbGxvYyBpcyBub3QgYWN0dWFsbHkKLSAgbmVlZGVkLiAgcmVhbGxvYyBtYXkgYmUgY2FsbGVkIGluc3RlYWQgb2YgbXNwYWNlX3JlYWxsb2MgYmVjYXVzZQotICByZWFsbG9jZWQgY2h1bmtzIGZyb20gYW55IHNwYWNlIGFyZSBoYW5kbGVkIGJ5IHRoZWlyIG9yaWdpbmF0aW5nCi0gIHNwYWNlcy4KLSovCi12b2lkKiBtc3BhY2VfcmVhbGxvYyhtc3BhY2UgbXNwLCB2b2lkKiBtZW0sIHNpemVfdCBuZXdzaXplKTsKLQotI2lmIEFORFJPSUQgLyogQWRkZWQgZm9yIEFuZHJvaWQsIG5vdCBwYXJ0IG9mIGRsbWFsbG9jIGFzIHJlbGVhc2VkICovCi0vKgotICBtc3BhY2VfbWVyZ2Vfb2JqZWN0cyB3aWxsIG1lcmdlIGFsbG9jYXRlZCBtZW1vcnkgbWVtYSBhbmQgbWVtYgotICB0b2dldGhlciwgcHJvdmlkZWQgbWVtYiBpbW1lZGlhdGVseSBmb2xsb3dzIG1lbWEuICBJdCBpcyByb3VnaGx5IGFzCi0gIGlmIG1lbWIgaGFzIGJlZW4gZnJlZWQgYW5kIG1lbWEgaGFzIGJlZW4gcmVhbGxvY2VkIHRvIGEgbGFyZ2VyIHNpemUuCi0gIE9uIHN1Y2Nlc3NmdWxseSBtZXJnaW5nLCBtZW1hIHdpbGwgYmUgcmV0dXJuZWQuIElmIGVpdGhlciBhcmd1bWVudAotICBpcyBudWxsIG9yIG1lbWIgZG9lcyBub3QgaW1tZWRpYXRlbHkgZm9sbG93IG1lbWEsIG51bGwgd2lsbCBiZQotICByZXR1cm5lZC4KLQotICBCb3RoIG1lbWEgYW5kIG1lbWIgc2hvdWxkIGhhdmUgYmVlbiBwcmV2aW91c2x5IGFsbG9jYXRlZCB1c2luZwotICBtYWxsb2Mgb3IgYSByZWxhdGVkIHJvdXRpbmUgc3VjaCBhcyByZWFsbG9jLiBJZiBlaXRoZXIgbWVtYSBvciBtZW1iCi0gIHdhcyBub3QgbWFsbG9jZWQgb3Igd2FzIHByZXZpb3VzbHkgZnJlZWQsIHRoZSByZXN1bHQgaXMgdW5kZWZpbmVkLAotICBidXQgbGlrZSBtc3BhY2VfZnJlZSwgdGhlIGRlZmF1bHQgaXMgdG8gYWJvcnQgdGhlIHByb2dyYW0uCi0qLwotdm9pZCogbXNwYWNlX21lcmdlX29iamVjdHMobXNwYWNlIG1zcCwgdm9pZCogbWVtYSwgdm9pZCogbWVtYik7Ci0jZW5kaWYKLQotLyoKLSAgbXNwYWNlX2NhbGxvYyBiZWhhdmVzIGFzIGNhbGxvYywgYnV0IG9wZXJhdGVzIHdpdGhpbgotICB0aGUgZ2l2ZW4gc3BhY2UuCi0qLwotdm9pZCogbXNwYWNlX2NhbGxvYyhtc3BhY2UgbXNwLCBzaXplX3Qgbl9lbGVtZW50cywgc2l6ZV90IGVsZW1fc2l6ZSk7Ci0KLS8qCi0gIG1zcGFjZV9tZW1hbGlnbiBiZWhhdmVzIGFzIG1lbWFsaWduLCBidXQgb3BlcmF0ZXMgd2l0aGluCi0gIHRoZSBnaXZlbiBzcGFjZS4KLSovCi12b2lkKiBtc3BhY2VfbWVtYWxpZ24obXNwYWNlIG1zcCwgc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IGJ5dGVzKTsKLQotLyoKLSAgbXNwYWNlX2luZGVwZW5kZW50X2NhbGxvYyBiZWhhdmVzIGFzIGluZGVwZW5kZW50X2NhbGxvYywgYnV0Ci0gIG9wZXJhdGVzIHdpdGhpbiB0aGUgZ2l2ZW4gc3BhY2UuCi0qLwotdm9pZCoqIG1zcGFjZV9pbmRlcGVuZGVudF9jYWxsb2MobXNwYWNlIG1zcCwgc2l6ZV90IG5fZWxlbWVudHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgZWxlbV9zaXplLCB2b2lkKiBjaHVua3NbXSk7Ci0KLS8qCi0gIG1zcGFjZV9pbmRlcGVuZGVudF9jb21hbGxvYyBiZWhhdmVzIGFzIGluZGVwZW5kZW50X2NvbWFsbG9jLCBidXQKLSAgb3BlcmF0ZXMgd2l0aGluIHRoZSBnaXZlbiBzcGFjZS4KLSovCi12b2lkKiogbXNwYWNlX2luZGVwZW5kZW50X2NvbWFsbG9jKG1zcGFjZSBtc3AsIHNpemVfdCBuX2VsZW1lbnRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgc2l6ZXNbXSwgdm9pZCogY2h1bmtzW10pOwotCi0vKgotICBtc3BhY2VfZm9vdHByaW50KCkgcmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIG9idGFpbmVkIGZyb20gdGhlCi0gIHN5c3RlbSBmb3IgdGhpcyBzcGFjZS4KLSovCi1zaXplX3QgbXNwYWNlX2Zvb3RwcmludChtc3BhY2UgbXNwKTsKLQotLyoKLSAgbXNwYWNlX21heF9mb290cHJpbnQoKSByZXR1cm5zIHRoZSBwZWFrIG51bWJlciBvZiBieXRlcyBvYnRhaW5lZCBmcm9tIHRoZQotICBzeXN0ZW0gZm9yIHRoaXMgc3BhY2UuCi0qLwotc2l6ZV90IG1zcGFjZV9tYXhfZm9vdHByaW50KG1zcGFjZSBtc3ApOwotCi0KLSNpZiAhTk9fTUFMTElORk8KLS8qCi0gIG1zcGFjZV9tYWxsaW5mbyBiZWhhdmVzIGFzIG1hbGxpbmZvLCBidXQgcmVwb3J0cyBwcm9wZXJ0aWVzIG9mCi0gIHRoZSBnaXZlbiBzcGFjZS4KLSovCi1zdHJ1Y3QgbWFsbGluZm8gbXNwYWNlX21hbGxpbmZvKG1zcGFjZSBtc3ApOwotI2VuZGlmIC8qIE5PX01BTExJTkZPICovCi0KLS8qCi0gIG1zcGFjZV9tYWxsb2Nfc3RhdHMgYmVoYXZlcyBhcyBtYWxsb2Nfc3RhdHMsIGJ1dCByZXBvcnRzCi0gIHByb3BlcnRpZXMgb2YgdGhlIGdpdmVuIHNwYWNlLgotKi8KLXZvaWQgbXNwYWNlX21hbGxvY19zdGF0cyhtc3BhY2UgbXNwKTsKLQotLyoKLSAgbXNwYWNlX3RyaW0gYmVoYXZlcyBhcyBtYWxsb2NfdHJpbSwgYnV0Ci0gIG9wZXJhdGVzIHdpdGhpbiB0aGUgZ2l2ZW4gc3BhY2UuCi0qLwotaW50IG1zcGFjZV90cmltKG1zcGFjZSBtc3AsIHNpemVfdCBwYWQpOwotCi0vKgotICBBbiBhbGlhcyBmb3IgbWFsbG9wdC4KLSovCi1pbnQgbXNwYWNlX21hbGxvcHQoaW50LCBpbnQpOwotCi0jZW5kaWYgLyogTVNQQUNFUyAqLwotCi0jaWZkZWYgX19jcGx1c3BsdXMKLX07ICAvKiBlbmQgb2YgZXh0ZXJuICJDIiAqLwotI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCi0KLS8qCi0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICBUbyBtYWtlIGEgZnVsbHkgY3VzdG9taXphYmxlIG1hbGxvYy5oIGhlYWRlciBmaWxlLCBjdXQgZXZlcnl0aGluZwotICBhYm92ZSB0aGlzIGxpbmUsIHB1dCBpbnRvIGZpbGUgbWFsbG9jLmgsIGVkaXQgdG8gc3VpdCwgYW5kICNpbmNsdWRlIGl0Ci0gIG9uIHRoZSBuZXh0IGxpbmUsIGFzIHdlbGwgYXMgaW4gcHJvZ3JhbXMgdGhhdCB1c2UgdGhpcyBtYWxsb2MuCi0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotKi8KLQotLyogI2luY2x1ZGUgIm1hbGxvYy5oIiAqLwotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBpbnRlcm5hbCAjaW5jbHVkZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0jaWZkZWYgV0lOMzIKLSNwcmFnbWEgd2FybmluZyggZGlzYWJsZSA6IDQxNDYgKSAvKiBubyAidW5zaWduZWQiIHdhcm5pbmdzICovCi0jZW5kaWYgLyogV0lOMzIgKi8KLQotI2luY2x1ZGUgPHN0ZGlvLmg+ICAgICAgIC8qIGZvciBwcmludGluZyBpbiBtYWxsb2Nfc3RhdHMgKi8KLQotI2lmbmRlZiBMQUNLU19FUlJOT19ICi0jaW5jbHVkZSA8ZXJybm8uaD4gICAgICAgLyogZm9yIE1BTExPQ19GQUlMVVJFX0FDVElPTiAqLwotI2VuZGlmIC8qIExBQ0tTX0VSUk5PX0ggKi8KLSNpZiBGT09URVJTCi0jaW5jbHVkZSA8dGltZS5oPiAgICAgICAgLyogZm9yIG1hZ2ljIGluaXRpYWxpemF0aW9uICovCi0jZW5kaWYgLyogRk9PVEVSUyAqLwotI2lmbmRlZiBMQUNLU19TVERMSUJfSAotI2luY2x1ZGUgPHN0ZGxpYi5oPiAgICAgIC8qIGZvciBhYm9ydCgpICovCi0jZW5kaWYgLyogTEFDS1NfU1RETElCX0ggKi8KLSNpZmRlZiBERUJVRwotI2lmIEFCT1JUX09OX0FTU0VSVF9GQUlMVVJFCi0jZGVmaW5lIGFzc2VydCh4KSBpZighKHgpKSBBQk9SVAotI2Vsc2UgLyogQUJPUlRfT05fQVNTRVJUX0ZBSUxVUkUgKi8KLSNpbmNsdWRlIDxhc3NlcnQuaD4KLSNlbmRpZiAvKiBBQk9SVF9PTl9BU1NFUlRfRkFJTFVSRSAqLwotI2Vsc2UgIC8qIERFQlVHICovCi0jZGVmaW5lIGFzc2VydCh4KQotI2VuZGlmIC8qIERFQlVHICovCi0jaWZuZGVmIExBQ0tTX1NUUklOR19ICi0jaW5jbHVkZSA8c3RyaW5nLmg+ICAgICAgLyogZm9yIG1lbXNldCBldGMgKi8KLSNlbmRpZiAgLyogTEFDS1NfU1RSSU5HX0ggKi8KLSNpZiBVU0VfQlVJTFRJTl9GRlMKLSNpZm5kZWYgTEFDS1NfU1RSSU5HU19ICi0jaW5jbHVkZSA8c3RyaW5ncy5oPiAgICAgLyogZm9yIGZmcyAqLwotI2VuZGlmIC8qIExBQ0tTX1NUUklOR1NfSCAqLwotI2VuZGlmIC8qIFVTRV9CVUlMVElOX0ZGUyAqLwotI2lmIEhBVkVfTU1BUAotI2lmbmRlZiBMQUNLU19TWVNfTU1BTl9ICi0jaW5jbHVkZSA8c3lzL21tYW4uaD4gICAgLyogZm9yIG1tYXAgKi8KLSNlbmRpZiAvKiBMQUNLU19TWVNfTU1BTl9IICovCi0jaWZuZGVmIExBQ0tTX0ZDTlRMX0gKLSNpbmNsdWRlIDxmY250bC5oPgotI2VuZGlmIC8qIExBQ0tTX0ZDTlRMX0ggKi8KLSNlbmRpZiAvKiBIQVZFX01NQVAgKi8KLSNpZiBIQVZFX01PUkVDT1JFCi0jaWZuZGVmIExBQ0tTX1VOSVNURF9ICi0jaW5jbHVkZSA8dW5pc3RkLmg+ICAgICAvKiBmb3Igc2JyayAqLwotI2Vsc2UgLyogTEFDS1NfVU5JU1REX0ggKi8KLSNpZiAhZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgIWRlZmluZWQoX19PcGVuQlNEX18pICYmICFkZWZpbmVkKF9fTmV0QlNEX18pCi1leHRlcm4gdm9pZCogICAgIHNicmsocHRyZGlmZl90KTsKLSNlbmRpZiAvKiBGcmVlQlNEIGV0YyAqLwotI2VuZGlmIC8qIExBQ0tTX1VOSVNURF9IICovCi0jZW5kaWYgLyogSEFWRV9NTUFQICovCi0KLSNpZm5kZWYgV0lOMzIKLSNpZm5kZWYgbWFsbG9jX2dldHBhZ2VzaXplCi0jICBpZmRlZiBfU0NfUEFHRVNJWkUgICAgICAgICAvKiBzb21lIFNWUjQgc3lzdGVtcyBvbWl0IGFuIHVuZGVyc2NvcmUgKi8KLSMgICAgaWZuZGVmIF9TQ19QQUdFX1NJWkUKLSMgICAgICBkZWZpbmUgX1NDX1BBR0VfU0laRSBfU0NfUEFHRVNJWkUKLSMgICAgZW5kaWYKLSMgIGVuZGlmCi0jICBpZmRlZiBfU0NfUEFHRV9TSVpFCi0jICAgIGRlZmluZSBtYWxsb2NfZ2V0cGFnZXNpemUgc3lzY29uZihfU0NfUEFHRV9TSVpFKQotIyAgZWxzZQotIyAgICBpZiBkZWZpbmVkKEJTRCkgfHwgZGVmaW5lZChER1VYKSB8fCBkZWZpbmVkKEhBVkVfR0VUUEFHRVNJWkUpCi0gICAgICAgZXh0ZXJuIHNpemVfdCBnZXRwYWdlc2l6ZSgpOwotIyAgICAgIGRlZmluZSBtYWxsb2NfZ2V0cGFnZXNpemUgZ2V0cGFnZXNpemUoKQotIyAgICBlbHNlCi0jICAgICAgaWZkZWYgV0lOMzIgLyogdXNlIHN1cHBsaWVkIGVtdWxhdGlvbiBvZiBnZXRwYWdlc2l6ZSAqLwotIyAgICAgICAgZGVmaW5lIG1hbGxvY19nZXRwYWdlc2l6ZSBnZXRwYWdlc2l6ZSgpCi0jICAgICAgZWxzZQotIyAgICAgICAgaWZuZGVmIExBQ0tTX1NZU19QQVJBTV9ICi0jICAgICAgICAgIGluY2x1ZGUgPHN5cy9wYXJhbS5oPgotIyAgICAgICAgZW5kaWYKLSMgICAgICAgIGlmZGVmIEVYRUNfUEFHRVNJWkUKLSMgICAgICAgICAgZGVmaW5lIG1hbGxvY19nZXRwYWdlc2l6ZSBFWEVDX1BBR0VTSVpFCi0jICAgICAgICBlbHNlCi0jICAgICAgICAgIGlmZGVmIE5CUEcKLSMgICAgICAgICAgICBpZm5kZWYgQ0xTSVpFCi0jICAgICAgICAgICAgICBkZWZpbmUgbWFsbG9jX2dldHBhZ2VzaXplIE5CUEcKLSMgICAgICAgICAgICBlbHNlCi0jICAgICAgICAgICAgICBkZWZpbmUgbWFsbG9jX2dldHBhZ2VzaXplIChOQlBHICogQ0xTSVpFKQotIyAgICAgICAgICAgIGVuZGlmCi0jICAgICAgICAgIGVsc2UKLSMgICAgICAgICAgICBpZmRlZiBOQlBDCi0jICAgICAgICAgICAgICBkZWZpbmUgbWFsbG9jX2dldHBhZ2VzaXplIE5CUEMKLSMgICAgICAgICAgICBlbHNlCi0jICAgICAgICAgICAgICBpZmRlZiBQQUdFU0laRQotIyAgICAgICAgICAgICAgICBkZWZpbmUgbWFsbG9jX2dldHBhZ2VzaXplIFBBR0VTSVpFCi0jICAgICAgICAgICAgICBlbHNlIC8qIGp1c3QgZ3Vlc3MgKi8KLSMgICAgICAgICAgICAgICAgZGVmaW5lIG1hbGxvY19nZXRwYWdlc2l6ZSAoKHNpemVfdCk0MDk2VSkKLSMgICAgICAgICAgICAgIGVuZGlmCi0jICAgICAgICAgICAgZW5kaWYKLSMgICAgICAgICAgZW5kaWYKLSMgICAgICAgIGVuZGlmCi0jICAgICAgZW5kaWYKLSMgICAgZW5kaWYKLSMgIGVuZGlmCi0jZW5kaWYKLSNlbmRpZgotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tIHNpemVfdCBhbmQgYWxpZ25tZW50IHByb3BlcnRpZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotLyogVGhlIGJ5dGUgYW5kIGJpdCBzaXplIG9mIGEgc2l6ZV90ICovCi0jZGVmaW5lIFNJWkVfVF9TSVpFICAgICAgICAgKHNpemVvZihzaXplX3QpKQotI2RlZmluZSBTSVpFX1RfQklUU0laRSAgICAgIChzaXplb2Yoc2l6ZV90KSA8PCAzKQotCi0vKiBTb21lIGNvbnN0YW50cyBjb2VyY2VkIHRvIHNpemVfdCAqLwotLyogQW5ub3lpbmcgYnV0IG5lY2Vzc2FyeSB0byBhdm9pZCBlcnJvcnMgb24gc29tZSBwbGFmdG9ybXMgKi8KLSNkZWZpbmUgU0laRV9UX1pFUk8gICAgICAgICAoKHNpemVfdCkwKQotI2RlZmluZSBTSVpFX1RfT05FICAgICAgICAgICgoc2l6ZV90KTEpCi0jZGVmaW5lIFNJWkVfVF9UV08gICAgICAgICAgKChzaXplX3QpMikKLSNkZWZpbmUgVFdPX1NJWkVfVF9TSVpFUyAgICAoU0laRV9UX1NJWkU8PDEpCi0jZGVmaW5lIEZPVVJfU0laRV9UX1NJWkVTICAgKFNJWkVfVF9TSVpFPDwyKQotI2RlZmluZSBTSVhfU0laRV9UX1NJWkVTICAgIChGT1VSX1NJWkVfVF9TSVpFUytUV09fU0laRV9UX1NJWkVTKQotI2RlZmluZSBIQUxGX01BWF9TSVpFX1QgICAgIChNQVhfU0laRV9UIC8gMlUpCi0KLS8qIFRoZSBiaXQgbWFzayB2YWx1ZSBjb3JyZXNwb25kaW5nIHRvIE1BTExPQ19BTElHTk1FTlQgKi8KLSNkZWZpbmUgQ0hVTktfQUxJR05fTUFTSyAgICAoTUFMTE9DX0FMSUdOTUVOVCAtIFNJWkVfVF9PTkUpCi0KLS8qIFRydWUgaWYgYWRkcmVzcyBhIGhhcyBhY2NlcHRhYmxlIGFsaWdubWVudCAqLwotI2RlZmluZSBpc19hbGlnbmVkKEEpICAgICAgICgoKHNpemVfdCkoKEEpKSAmIChDSFVOS19BTElHTl9NQVNLKSkgPT0gMCkKLQotLyogdGhlIG51bWJlciBvZiBieXRlcyB0byBvZmZzZXQgYW4gYWRkcmVzcyB0byBhbGlnbiBpdCAqLwotI2RlZmluZSBhbGlnbl9vZmZzZXQoQSlcCi0gKCgoKHNpemVfdCkoQSkgJiBDSFVOS19BTElHTl9NQVNLKSA9PSAwKT8gMCA6XAotICAoKE1BTExPQ19BTElHTk1FTlQgLSAoKHNpemVfdCkoQSkgJiBDSFVOS19BTElHTl9NQVNLKSkgJiBDSFVOS19BTElHTl9NQVNLKSkKLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gTU1BUCBwcmVsaW1pbmFyaWVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotLyoKLSAgIElmIEhBVkVfTU9SRUNPUkUgb3IgSEFWRV9NTUFQIGFyZSBmYWxzZSwgd2UganVzdCBkZWZpbmUgY2FsbHMgYW5kCi0gICBjaGVja3MgdG8gZmFpbCBzbyBjb21waWxlciBvcHRpbWl6ZXIgY2FuIGRlbGV0ZSBjb2RlIHJhdGhlciB0aGFuCi0gICB1c2luZyBzbyBtYW55ICIjaWYicy4KLSovCi0KLQotLyogTU9SRUNPUkUgYW5kIE1NQVAgbXVzdCByZXR1cm4gTUZBSUwgb24gZmFpbHVyZSAqLwotI2RlZmluZSBNRkFJTCAgICAgICAgICAgICAgICAoKHZvaWQqKShNQVhfU0laRV9UKSkKLSNkZWZpbmUgQ01GQUlMICAgICAgICAgICAgICAgKChjaGFyKikoTUZBSUwpKSAvKiBkZWZpbmVkIGZvciBjb252ZW5pZW5jZSAqLwotCi0jaWYgIUhBVkVfTU1BUAotI2RlZmluZSBJU19NTUFQUEVEX0JJVCAgICAgICAoU0laRV9UX1pFUk8pCi0jZGVmaW5lIFVTRV9NTUFQX0JJVCAgICAgICAgIChTSVpFX1RfWkVSTykKLSNkZWZpbmUgQ0FMTF9NTUFQKHMpICAgICAgICAgTUZBSUwKLSNkZWZpbmUgQ0FMTF9NVU5NQVAoYSwgcykgICAgKC0xKQotI2RlZmluZSBESVJFQ1RfTU1BUChzKSAgICAgICBNRkFJTAotCi0jZWxzZSAvKiBIQVZFX01NQVAgKi8KLSNkZWZpbmUgSVNfTU1BUFBFRF9CSVQgICAgICAgKFNJWkVfVF9PTkUpCi0jZGVmaW5lIFVTRV9NTUFQX0JJVCAgICAgICAgIChTSVpFX1RfT05FKQotCi0jaWZuZGVmIFdJTjMyCi0jZGVmaW5lIENBTExfTVVOTUFQKGEsIHMpICAgIG11bm1hcCgoYSksIChzKSkKLSNkZWZpbmUgTU1BUF9QUk9UICAgICAgICAgICAgKFBST1RfUkVBRHxQUk9UX1dSSVRFKQotI2lmICFkZWZpbmVkKE1BUF9BTk9OWU1PVVMpICYmIGRlZmluZWQoTUFQX0FOT04pCi0jZGVmaW5lIE1BUF9BTk9OWU1PVVMgICAgICAgIE1BUF9BTk9OCi0jZW5kaWYgLyogTUFQX0FOT04gKi8KLSNpZmRlZiBNQVBfQU5PTllNT1VTCi0jZGVmaW5lIE1NQVBfRkxBR1MgICAgICAgICAgIChNQVBfUFJJVkFURXxNQVBfQU5PTllNT1VTKQotI2RlZmluZSBDQUxMX01NQVAocykgICAgICAgICBtbWFwKDAsIChzKSwgTU1BUF9QUk9ULCBNTUFQX0ZMQUdTLCAtMSwgMCkKLSNlbHNlIC8qIE1BUF9BTk9OWU1PVVMgKi8KLS8qCi0gICBOZWFybHkgYWxsIHZlcnNpb25zIG9mIG1tYXAgc3VwcG9ydCBNQVBfQU5PTllNT1VTLCBzbyB0aGUgZm9sbG93aW5nCi0gICBpcyB1bmxpa2VseSB0byBiZSBuZWVkZWQsIGJ1dCBpcyBzdXBwbGllZCBqdXN0IGluIGNhc2UuCi0qLwotI2RlZmluZSBNTUFQX0ZMQUdTICAgICAgICAgICAoTUFQX1BSSVZBVEUpCi1zdGF0aWMgaW50IGRldl96ZXJvX2ZkID0gLTE7IC8qIENhY2hlZCBmaWxlIGRlc2NyaXB0b3IgZm9yIC9kZXYvemVyby4gKi8KLSNkZWZpbmUgQ0FMTF9NTUFQKHMpICgoZGV2X3plcm9fZmQgPCAwKSA/IFwKLSAgICAgICAgICAgKGRldl96ZXJvX2ZkID0gb3BlbigiL2Rldi96ZXJvIiwgT19SRFdSKSwgXAotICAgICAgICAgICAgbW1hcCgwLCAocyksIE1NQVBfUFJPVCwgTU1BUF9GTEFHUywgZGV2X3plcm9fZmQsIDApKSA6IFwKLSAgICAgICAgICAgIG1tYXAoMCwgKHMpLCBNTUFQX1BST1QsIE1NQVBfRkxBR1MsIGRldl96ZXJvX2ZkLCAwKSkKLSNlbmRpZiAvKiBNQVBfQU5PTllNT1VTICovCi0KLSNkZWZpbmUgRElSRUNUX01NQVAocykgICAgICAgQ0FMTF9NTUFQKHMpCi0jZWxzZSAvKiBXSU4zMiAqLwotCi0vKiBXaW4zMiBNTUFQIHZpYSBWaXJ0dWFsQWxsb2MgKi8KLXN0YXRpYyB2b2lkKiB3aW4zMm1tYXAoc2l6ZV90IHNpemUpIHsKLSAgdm9pZCogcHRyID0gVmlydHVhbEFsbG9jKDAsIHNpemUsIE1FTV9SRVNFUlZFfE1FTV9DT01NSVQsIFBBR0VfUkVBRFdSSVRFKTsKLSAgcmV0dXJuIChwdHIgIT0gMCk/IHB0cjogTUZBSUw7CitzdGF0aWMgdm9pZCBfX2Jpb25pY19oZWFwX2NvcnJ1cHRpb25fZXJyb3IoY29uc3QgY2hhciogZnVuY3Rpb24pIHsKKyAgX19jbGVhbnVwID0gTlVMTDsgLy8gVGhlIGhlYXAgaXMgY29ycnVwdC4gV2UgY2FuIGZvcmdldCB0cnlpbmcgdG8gc2h1dCBkb3duIHN0ZGlvLgorICBfX2xpYmNfZmF0YWwoImhlYXAgY29ycnVwdGlvbiBkZXRlY3RlZCBieSAlcyIsIGZ1bmN0aW9uKTsKIH0KIAotLyogRm9yIGRpcmVjdCBNTUFQLCB1c2UgTUVNX1RPUF9ET1dOIHRvIG1pbmltaXplIGludGVyZmVyZW5jZSAqLwotc3RhdGljIHZvaWQqIHdpbjMyZGlyZWN0X21tYXAoc2l6ZV90IHNpemUpIHsKLSAgdm9pZCogcHRyID0gVmlydHVhbEFsbG9jKDAsIHNpemUsIE1FTV9SRVNFUlZFfE1FTV9DT01NSVR8TUVNX1RPUF9ET1dOLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgUEFHRV9SRUFEV1JJVEUpOwotICByZXR1cm4gKHB0ciAhPSAwKT8gcHRyOiBNRkFJTDsKLX0KLQotLyogVGhpcyBmdW5jdGlvbiBzdXBwb3J0cyByZWxlYXNpbmcgY29hbGVzZWQgc2VnbWVudHMgKi8KLXN0YXRpYyBpbnQgd2luMzJtdW5tYXAodm9pZCogcHRyLCBzaXplX3Qgc2l6ZSkgewotICBNRU1PUllfQkFTSUNfSU5GT1JNQVRJT04gbWluZm87Ci0gIGNoYXIqIGNwdHIgPSBwdHI7Ci0gIHdoaWxlIChzaXplKSB7Ci0gICAgaWYgKFZpcnR1YWxRdWVyeShjcHRyLCAmbWluZm8sIHNpemVvZihtaW5mbykpID09IDApCi0gICAgICByZXR1cm4gLTE7Ci0gICAgaWYgKG1pbmZvLkJhc2VBZGRyZXNzICE9IGNwdHIgfHwgbWluZm8uQWxsb2NhdGlvbkJhc2UgIT0gY3B0ciB8fAotICAgICAgICBtaW5mby5TdGF0ZSAhPSBNRU1fQ09NTUlUIHx8IG1pbmZvLlJlZ2lvblNpemUgPiBzaXplKQotICAgICAgcmV0dXJuIC0xOwotICAgIGlmIChWaXJ0dWFsRnJlZShjcHRyLCAwLCBNRU1fUkVMRUFTRSkgPT0gMCkKLSAgICAgIHJldHVybiAtMTsKLSAgICBjcHRyICs9IG1pbmZvLlJlZ2lvblNpemU7Ci0gICAgc2l6ZSAtPSBtaW5mby5SZWdpb25TaXplOwotICB9Ci0gIHJldHVybiAwOwotfQotCi0jZGVmaW5lIENBTExfTU1BUChzKSAgICAgICAgIHdpbjMybW1hcChzKQotI2RlZmluZSBDQUxMX01VTk1BUChhLCBzKSAgICB3aW4zMm11bm1hcCgoYSksIChzKSkKLSNkZWZpbmUgRElSRUNUX01NQVAocykgICAgICAgd2luMzJkaXJlY3RfbW1hcChzKQotI2VuZGlmIC8qIFdJTjMyICovCi0jZW5kaWYgLyogSEFWRV9NTUFQICovCi0KLSNpZiBIQVZFX01NQVAgJiYgSEFWRV9NUkVNQVAKLSNkZWZpbmUgQ0FMTF9NUkVNQVAoYWRkciwgb3N6LCBuc3osIG12KSBtcmVtYXAoKGFkZHIpLCAob3N6KSwgKG5zeiksIChtdikpCi0jZWxzZSAgLyogSEFWRV9NTUFQICYmIEhBVkVfTVJFTUFQICovCi0jZGVmaW5lIENBTExfTVJFTUFQKGFkZHIsIG9zeiwgbnN6LCBtdikgTUZBSUwKLSNlbmRpZiAvKiBIQVZFX01NQVAgJiYgSEFWRV9NUkVNQVAgKi8KLQotI2lmIEhBVkVfTU9SRUNPUkUKLSNkZWZpbmUgQ0FMTF9NT1JFQ09SRShTKSAgICAgTU9SRUNPUkUoUykKLSNlbHNlICAvKiBIQVZFX01PUkVDT1JFICovCi0jZGVmaW5lIENBTExfTU9SRUNPUkUoUykgICAgIE1GQUlMCi0jZW5kaWYgLyogSEFWRV9NT1JFQ09SRSAqLwotCi0vKiBtc3RhdGUgYml0IHNldCBpZiBjb250aW5ndW91cyBtb3JlY29yZSBkaXNhYmxlZCBvciBmYWlsZWQgKi8KLSNkZWZpbmUgVVNFX05PTkNPTlRJR1VPVVNfQklUICg0VSkKLQotLyogc2VnbWVudCBiaXQgc2V0IGluIGNyZWF0ZV9tc3BhY2Vfd2l0aF9iYXNlICovCi0jZGVmaW5lIEVYVEVSTl9CSVQgICAgICAgICAgICAoOFUpCi0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIExvY2sgcHJlbGltaW5hcmllcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotI2lmIFVTRV9MT0NLUwotCi0vKgotICBXaGVuIGxvY2tzIGFyZSBkZWZpbmVkLCB0aGVyZSBhcmUgdXAgdG8gdHdvIGdsb2JhbCBsb2NrczoKLQotICAqIElmIEhBVkVfTU9SRUNPUkUsIG1vcmVjb3JlX211dGV4IHByb3RlY3RzIHNlcXVlbmNlcyBvZiBjYWxscyB0bwotICAgIE1PUkVDT1JFLiAgSW4gbWFueSBjYXNlcyBzeXNfYWxsb2MgcmVxdWlyZXMgdHdvIGNhbGxzLCB0aGF0IHNob3VsZAotICAgIG5vdCBiZSBpbnRlcmxlYXZlZCB3aXRoIGNhbGxzIGJ5IG90aGVyIHRocmVhZHMuICBUaGlzIGRvZXMgbm90Ci0gICAgcHJvdGVjdCBhZ2FpbnN0IGRpcmVjdCBjYWxscyB0byBNT1JFQ09SRSBieSBvdGhlciB0aHJlYWRzIG5vdAotICAgIHVzaW5nIHRoaXMgbG9jaywgc28gdGhlcmUgaXMgc3RpbGwgY29kZSB0byBjb3BlIHRoZSBiZXN0IHdlIGNhbiBvbgotICAgIGludGVyZmVyZW5jZS4KLQotICAqIG1hZ2ljX2luaXRfbXV0ZXggZW5zdXJlcyB0aGF0IG1wYXJhbXMubWFnaWMgYW5kIG90aGVyCi0gICAgdW5pcXVlIG1wYXJhbXMgdmFsdWVzIGFyZSBpbml0aWFsaXplZCBvbmx5IG9uY2UuCi0qLwotCi0jaWZuZGVmIFdJTjMyCi0vKiBCeSBkZWZhdWx0IHVzZSBwb3NpeCBsb2NrcyAqLwotI2luY2x1ZGUgPHB0aHJlYWQuaD4KLSNkZWZpbmUgTUxPQ0tfVCBwdGhyZWFkX211dGV4X3QKLSNkZWZpbmUgSU5JVElBTF9MT0NLKGwpICAgICAgcHRocmVhZF9tdXRleF9pbml0KGwsIE5VTEwpCi0jZGVmaW5lIEFDUVVJUkVfTE9DSyhsKSAgICAgIHB0aHJlYWRfbXV0ZXhfbG9jayhsKQotI2RlZmluZSBSRUxFQVNFX0xPQ0sobCkgICAgICBwdGhyZWFkX211dGV4X3VubG9jayhsKQotCi0jaWYgSEFWRV9NT1JFQ09SRQotc3RhdGljIE1MT0NLX1QgbW9yZWNvcmVfbXV0ZXggPSBQVEhSRUFEX01VVEVYX0lOSVRJQUxJWkVSOwotI2VuZGlmIC8qIEhBVkVfTU9SRUNPUkUgKi8KLQotc3RhdGljIE1MT0NLX1QgbWFnaWNfaW5pdF9tdXRleCA9IFBUSFJFQURfTVVURVhfSU5JVElBTElaRVI7Ci0KLSNlbHNlIC8qIFdJTjMyICovCi0vKgotICAgQmVjYXVzZSBsb2NrLXByb3RlY3RlZCByZWdpb25zIGhhdmUgYm91bmRlZCB0aW1lcywgYW5kIHRoZXJlCi0gICBhcmUgbm8gcmVjdXJzaXZlIGxvY2sgY2FsbHMsIHdlIGNhbiB1c2Ugc2ltcGxlIHNwaW5sb2Nrcy4KLSovCi0KLSNkZWZpbmUgTUxPQ0tfVCBsb25nCi1zdGF0aWMgaW50IHdpbjMyX2FjcXVpcmVfbG9jayAoTUxPQ0tfVCAqc2wpIHsKLSAgZm9yICg7OykgewotI2lmZGVmIEludGVybG9ja2VkQ29tcGFyZUV4Y2hhbmdlUG9pbnRlcgotICAgIGlmICghSW50ZXJsb2NrZWRDb21wYXJlRXhjaGFuZ2Uoc2wsIDEsIDApKQotICAgICAgcmV0dXJuIDA7Ci0jZWxzZSAgLyogVXNlIG9sZGVyIHZvaWQqIHZlcnNpb24gKi8KLSAgICBpZiAoIUludGVybG9ja2VkQ29tcGFyZUV4Y2hhbmdlKCh2b2lkKiopc2wsICh2b2lkKikxLCAodm9pZCopMCkpCi0gICAgICByZXR1cm4gMDsKLSNlbmRpZiAvKiBJbnRlcmxvY2tlZENvbXBhcmVFeGNoYW5nZVBvaW50ZXIgKi8KLSAgICBTbGVlcCAoMCk7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQgd2luMzJfcmVsZWFzZV9sb2NrIChNTE9DS19UICpzbCkgewotICBJbnRlcmxvY2tlZEV4Y2hhbmdlIChzbCwgMCk7Ci19Ci0KLSNkZWZpbmUgSU5JVElBTF9MT0NLKGwpICAgICAgKihsKT0wCi0jZGVmaW5lIEFDUVVJUkVfTE9DSyhsKSAgICAgIHdpbjMyX2FjcXVpcmVfbG9jayhsKQotI2RlZmluZSBSRUxFQVNFX0xPQ0sobCkgICAgICB3aW4zMl9yZWxlYXNlX2xvY2sobCkKLSNpZiBIQVZFX01PUkVDT1JFCi1zdGF0aWMgTUxPQ0tfVCBtb3JlY29yZV9tdXRleDsKLSNlbmRpZiAvKiBIQVZFX01PUkVDT1JFICovCi1zdGF0aWMgTUxPQ0tfVCBtYWdpY19pbml0X211dGV4OwotI2VuZGlmIC8qIFdJTjMyICovCi0KLSNkZWZpbmUgVVNFX0xPQ0tfQklUICAgICAgICAgICAgICAgKDJVKQotI2Vsc2UgIC8qIFVTRV9MT0NLUyAqLwotI2RlZmluZSBVU0VfTE9DS19CSVQgICAgICAgICAgICAgICAoMFUpCi0jZGVmaW5lIElOSVRJQUxfTE9DSyhsKQotI2VuZGlmIC8qIFVTRV9MT0NLUyAqLwotCi0jaWYgVVNFX0xPQ0tTICYmIEhBVkVfTU9SRUNPUkUKLSNkZWZpbmUgQUNRVUlSRV9NT1JFQ09SRV9MT0NLKCkgICAgQUNRVUlSRV9MT0NLKCZtb3JlY29yZV9tdXRleCk7Ci0jZGVmaW5lIFJFTEVBU0VfTU9SRUNPUkVfTE9DSygpICAgIFJFTEVBU0VfTE9DSygmbW9yZWNvcmVfbXV0ZXgpOwotI2Vsc2UgLyogVVNFX0xPQ0tTICYmIEhBVkVfTU9SRUNPUkUgKi8KLSNkZWZpbmUgQUNRVUlSRV9NT1JFQ09SRV9MT0NLKCkKLSNkZWZpbmUgUkVMRUFTRV9NT1JFQ09SRV9MT0NLKCkKLSNlbmRpZiAvKiBVU0VfTE9DS1MgJiYgSEFWRV9NT1JFQ09SRSAqLwotCi0jaWYgVVNFX0xPQ0tTCi0jZGVmaW5lIEFDUVVJUkVfTUFHSUNfSU5JVF9MT0NLKCkgIEFDUVVJUkVfTE9DSygmbWFnaWNfaW5pdF9tdXRleCk7Ci0jZGVmaW5lIFJFTEVBU0VfTUFHSUNfSU5JVF9MT0NLKCkgIFJFTEVBU0VfTE9DSygmbWFnaWNfaW5pdF9tdXRleCk7Ci0jZWxzZSAgLyogVVNFX0xPQ0tTICovCi0jZGVmaW5lIEFDUVVJUkVfTUFHSUNfSU5JVF9MT0NLKCkKLSNkZWZpbmUgUkVMRUFTRV9NQUdJQ19JTklUX0xPQ0soKQotI2VuZGlmIC8qIFVTRV9MT0NLUyAqLwotCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBDaHVuayByZXByZXNlbnRhdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLS8qCi0gIChUaGUgZm9sbG93aW5nIGluY2x1ZGVzIGxpZ2h0bHkgZWRpdGVkIGV4cGxhbmF0aW9ucyBieSBDb2xpbiBQbHVtYi4pCi0KLSAgVGhlIG1hbGxvY19jaHVuayBkZWNsYXJhdGlvbiBiZWxvdyBpcyBtaXNsZWFkaW5nIChidXQgYWNjdXJhdGUgYW5kCi0gIG5lY2Vzc2FyeSkuICBJdCBkZWNsYXJlcyBhICJ2aWV3IiBpbnRvIG1lbW9yeSBhbGxvd2luZyBhY2Nlc3MgdG8KLSAgbmVjZXNzYXJ5IGZpZWxkcyBhdCBrbm93biBvZmZzZXRzIGZyb20gYSBnaXZlbiBiYXNlLgotCi0gIENodW5rcyBvZiBtZW1vcnkgYXJlIG1haW50YWluZWQgdXNpbmcgYSBgYm91bmRhcnkgdGFnJyBtZXRob2QgYXMKLSAgb3JpZ2luYWxseSBkZXNjcmliZWQgYnkgS251dGguICAoU2VlIHRoZSBwYXBlciBieSBQYXVsIFdpbHNvbgotICBmdHA6Ly9mdHAuY3MudXRleGFzLmVkdS9wdWIvZ2FyYmFnZS9hbGxvY3Nydi5wcyBmb3IgYSBzdXJ2ZXkgb2Ygc3VjaAotICB0ZWNobmlxdWVzLikgIFNpemVzIG9mIGZyZWUgY2h1bmtzIGFyZSBzdG9yZWQgYm90aCBpbiB0aGUgZnJvbnQgb2YKLSAgZWFjaCBjaHVuayBhbmQgYXQgdGhlIGVuZC4gIFRoaXMgbWFrZXMgY29uc29saWRhdGluZyBmcmFnbWVudGVkCi0gIGNodW5rcyBpbnRvIGJpZ2dlciBjaHVua3MgZmFzdC4gIFRoZSBoZWFkIGZpZWxkcyBhbHNvIGhvbGQgYml0cwotICByZXByZXNlbnRpbmcgd2hldGhlciBjaHVua3MgYXJlIGZyZWUgb3IgaW4gdXNlLgotCi0gIEhlcmUgYXJlIHNvbWUgcGljdHVyZXMgdG8gbWFrZSBpdCBjbGVhcmVyLiAgVGhleSBhcmUgImV4cGxvZGVkIiB0bwotICBzaG93IHRoYXQgdGhlIHN0YXRlIG9mIGEgY2h1bmsgY2FuIGJlIHRob3VnaHQgb2YgYXMgZXh0ZW5kaW5nIGZyb20KLSAgdGhlIGhpZ2ggMzEgYml0cyBvZiB0aGUgaGVhZCBmaWVsZCBvZiBpdHMgaGVhZGVyIHRocm91Z2ggdGhlCi0gIHByZXZfZm9vdCBhbmQgUElOVVNFX0JJVCBiaXQgb2YgdGhlIGZvbGxvd2luZyBjaHVuayBoZWFkZXIuCi0KLSAgQSBjaHVuayB0aGF0J3MgaW4gdXNlIGxvb2tzIGxpa2U6Ci0KLSAgIGNodW5rLT4gKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKLSAgICAgICAgICAgfCBTaXplIG9mIHByZXZpb3VzIGNodW5rIChpZiBQID0gMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgICAgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKLSAgICAgICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKyB8UHwKLSAgICAgICAgIHwgU2l6ZSBvZiB0aGlzIGNodW5rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxfCArLSsKLSAgIG1lbS0+ICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCi0gICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICAgICAgKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSsKLSAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgICAgICArLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKwotICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDoKLSAgICAgICAgICstICAgICAgc2l6ZSAtIHNpemVvZihzaXplX3QpIGF2YWlsYWJsZSBwYXlsb2FkIGJ5dGVzICAgICAgICAgIC0rCi0gICAgICAgICA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotIGNodW5rLT4gKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSsKLSAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgICAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKwotICAgICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKyB8MXwKLSAgICAgICB8IFNpemUgb2YgbmV4dCBjaHVuayAobWF5IG9yIG1heSBub3QgYmUgaW4gdXNlKSAgICAgICAgICAgICAgIHwgKy0rCi0gbWVtLT4gKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKLQotICAgIEFuZCBpZiBpdCdzIGZyZWUsIGl0IGxvb2tzIGxpa2UgdGhpczoKLQotICAgY2h1bmstPiArLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKwotICAgICAgICAgICB8IFVzZXIgcGF5bG9hZCAobXVzdCBiZSBpbiB1c2UsIG9yIHdlIHdvdWxkIGhhdmUgbWVyZ2VkISkgICAgICAgfAotICAgICAgICAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKwotICAgICAgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rIHxQfAotICAgICAgICAgfCBTaXplIG9mIHRoaXMgY2h1bmsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB8ICstKwotICAgbWVtLT4gKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKLSAgICAgICAgIHwgTmV4dCBwb2ludGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgICAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKwotICAgICAgICAgfCBQcmV2IHBvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCi0gICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOgotICAgICAgICAgKy0gICAgICBzaXplIC0gc2l6ZW9mKHN0cnVjdCBjaHVuaykgdW51c2VkIGJ5dGVzICAgICAgICAgICAgICAgLSsKLSAgICAgICAgIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gY2h1bmstPiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKwotICAgICAgICAgfCBTaXplIG9mIHRoaXMgY2h1bmsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCi0gICAgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rIHwwfAotICAgICAgIHwgU2l6ZSBvZiBuZXh0IGNodW5rIChtdXN0IGJlIGluIHVzZSwgb3Igd2Ugd291bGQgaGF2ZSBtZXJnZWQpfCArLSsKLSBtZW0tPiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKwotICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6Ci0gICAgICAgKy0gVXNlciBwYXlsb2FkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSsKLSAgICAgICA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8MHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICstKwotICBOb3RlIHRoYXQgc2luY2Ugd2UgYWx3YXlzIG1lcmdlIGFkamFjZW50IGZyZWUgY2h1bmtzLCB0aGUgY2h1bmtzCi0gIGFkamFjZW50IHRvIGEgZnJlZSBjaHVuayBtdXN0IGJlIGluIHVzZS4KLQotICBHaXZlbiBhIHBvaW50ZXIgdG8gYSBjaHVuayAod2hpY2ggY2FuIGJlIGRlcml2ZWQgdHJpdmlhbGx5IGZyb20gdGhlCi0gIHBheWxvYWQgcG9pbnRlcikgd2UgY2FuLCBpbiBPKDEpIHRpbWUsIGZpbmQgb3V0IHdoZXRoZXIgdGhlIGFkamFjZW50Ci0gIGNodW5rcyBhcmUgZnJlZSwgYW5kIGlmIHNvLCB1bmxpbmsgdGhlbSBmcm9tIHRoZSBsaXN0cyB0aGF0IHRoZXkKLSAgYXJlIG9uIGFuZCBtZXJnZSB0aGVtIHdpdGggdGhlIGN1cnJlbnQgY2h1bmsuCi0KLSAgQ2h1bmtzIGFsd2F5cyBiZWdpbiBvbiBldmVuIHdvcmQgYm91bmRhcmllcywgc28gdGhlIG1lbSBwb3J0aW9uCi0gICh3aGljaCBpcyByZXR1cm5lZCB0byB0aGUgdXNlcikgaXMgYWxzbyBvbiBhbiBldmVuIHdvcmQgYm91bmRhcnksIGFuZAotICB0aHVzIGF0IGxlYXN0IGRvdWJsZS13b3JkIGFsaWduZWQuCi0KLSAgVGhlIFAgKFBJTlVTRV9CSVQpIGJpdCwgc3RvcmVkIGluIHRoZSB1bnVzZWQgbG93LW9yZGVyIGJpdCBvZiB0aGUKLSAgY2h1bmsgc2l6ZSAod2hpY2ggaXMgYWx3YXlzIGEgbXVsdGlwbGUgb2YgdHdvIHdvcmRzKSwgaXMgYW4gaW4tdXNlCi0gIGJpdCBmb3IgdGhlICpwcmV2aW91cyogY2h1bmsuICBJZiB0aGF0IGJpdCBpcyAqY2xlYXIqLCB0aGVuIHRoZQotICB3b3JkIGJlZm9yZSB0aGUgY3VycmVudCBjaHVuayBzaXplIGNvbnRhaW5zIHRoZSBwcmV2aW91cyBjaHVuawotICBzaXplLCBhbmQgY2FuIGJlIHVzZWQgdG8gZmluZCB0aGUgZnJvbnQgb2YgdGhlIHByZXZpb3VzIGNodW5rLgotICBUaGUgdmVyeSBmaXJzdCBjaHVuayBhbGxvY2F0ZWQgYWx3YXlzIGhhcyB0aGlzIGJpdCBzZXQsIHByZXZlbnRpbmcKLSAgYWNjZXNzIHRvIG5vbi1leGlzdGVudCAob3Igbm9uLW93bmVkKSBtZW1vcnkuIElmIHBpbnVzZSBpcyBzZXQgZm9yCi0gIGFueSBnaXZlbiBjaHVuaywgdGhlbiB5b3UgQ0FOTk9UIGRldGVybWluZSB0aGUgc2l6ZSBvZiB0aGUKLSAgcHJldmlvdXMgY2h1bmssIGFuZCBtaWdodCBldmVuIGdldCBhIG1lbW9yeSBhZGRyZXNzaW5nIGZhdWx0IHdoZW4KLSAgdHJ5aW5nIHRvIGRvIHNvLgotCi0gIFRoZSBDIChDSU5VU0VfQklUKSBiaXQsIHN0b3JlZCBpbiB0aGUgdW51c2VkIHNlY29uZC1sb3dlc3QgYml0IG9mCi0gIHRoZSBjaHVuayBzaXplIHJlZHVuZGFudGx5IHJlY29yZHMgd2hldGhlciB0aGUgY3VycmVudCBjaHVuayBpcwotICBpbnVzZS4gVGhpcyByZWR1bmRhbmN5IGVuYWJsZXMgdXNhZ2UgY2hlY2tzIHdpdGhpbiBmcmVlIGFuZCByZWFsbG9jLAotICBhbmQgcmVkdWNlcyBpbmRpcmVjdGlvbiB3aGVuIGZyZWVpbmcgYW5kIGNvbnNvbGlkYXRpbmcgY2h1bmtzLgotCi0gIEVhY2ggZnJlc2hseSBhbGxvY2F0ZWQgY2h1bmsgbXVzdCBoYXZlIGJvdGggY2ludXNlIGFuZCBwaW51c2Ugc2V0LgotICBUaGF0IGlzLCBlYWNoIGFsbG9jYXRlZCBjaHVuayBib3JkZXJzIGVpdGhlciBhIHByZXZpb3VzbHkgYWxsb2NhdGVkCi0gIGFuZCBzdGlsbCBpbi11c2UgY2h1bmssIG9yIHRoZSBiYXNlIG9mIGl0cyBtZW1vcnkgYXJlbmEuIFRoaXMgaXMKLSAgZW5zdXJlZCBieSBtYWtpbmcgYWxsIGFsbG9jYXRpb25zIGZyb20gdGhlIHRoZSBgbG93ZXN0JyBwYXJ0IG9mIGFueQotICBmb3VuZCBjaHVuay4gIEZ1cnRoZXIsIG5vIGZyZWUgY2h1bmsgcGh5c2ljYWxseSBib3JkZXJzIGFub3RoZXIgb25lLAotICBzbyBlYWNoIGZyZWUgY2h1bmsgaXMga25vd24gdG8gYmUgcHJlY2VkZWQgYW5kIGZvbGxvd2VkIGJ5IGVpdGhlcgotICBpbnVzZSBjaHVua3Mgb3IgdGhlIGVuZHMgb2YgbWVtb3J5LgotCi0gIE5vdGUgdGhhdCB0aGUgYGZvb3QnIG9mIHRoZSBjdXJyZW50IGNodW5rIGlzIGFjdHVhbGx5IHJlcHJlc2VudGVkCi0gIGFzIHRoZSBwcmV2X2Zvb3Qgb2YgdGhlIE5FWFQgY2h1bmsuIFRoaXMgbWFrZXMgaXQgZWFzaWVyIHRvCi0gIGRlYWwgd2l0aCBhbGlnbm1lbnRzIGV0YyBidXQgY2FuIGJlIHZlcnkgY29uZnVzaW5nIHdoZW4gdHJ5aW5nCi0gIHRvIGV4dGVuZCBvciBhZGFwdCB0aGlzIGNvZGUuCi0KLSAgVGhlIGV4Y2VwdGlvbnMgdG8gYWxsIHRoaXMgYXJlCi0KLSAgICAgMS4gVGhlIHNwZWNpYWwgY2h1bmsgYHRvcCcgaXMgdGhlIHRvcC1tb3N0IGF2YWlsYWJsZSBjaHVuayAoaS5lLiwKLSAgICAgICAgdGhlIG9uZSBib3JkZXJpbmcgdGhlIGVuZCBvZiBhdmFpbGFibGUgbWVtb3J5KS4gSXQgaXMgdHJlYXRlZAotICAgICAgICBzcGVjaWFsbHkuICBUb3AgaXMgbmV2ZXIgaW5jbHVkZWQgaW4gYW55IGJpbiwgaXMgdXNlZCBvbmx5IGlmCi0gICAgICAgIG5vIG90aGVyIGNodW5rIGlzIGF2YWlsYWJsZSwgYW5kIGlzIHJlbGVhc2VkIGJhY2sgdG8gdGhlCi0gICAgICAgIHN5c3RlbSBpZiBpdCBpcyB2ZXJ5IGxhcmdlIChzZWUgTV9UUklNX1RIUkVTSE9MRCkuICBJbiBlZmZlY3QsCi0gICAgICAgIHRoZSB0b3AgY2h1bmsgaXMgdHJlYXRlZCBhcyBsYXJnZXIgKGFuZCB0aHVzIGxlc3Mgd2VsbAotICAgICAgICBmaXR0aW5nKSB0aGFuIGFueSBvdGhlciBhdmFpbGFibGUgY2h1bmsuICBUaGUgdG9wIGNodW5rCi0gICAgICAgIGRvZXNuJ3QgdXBkYXRlIGl0cyB0cmFpbGluZyBzaXplIGZpZWxkIHNpbmNlIHRoZXJlIGlzIG5vIG5leHQKLSAgICAgICAgY29udGlndW91cyBjaHVuayB0aGF0IHdvdWxkIGhhdmUgdG8gaW5kZXggb2ZmIGl0LiBIb3dldmVyLAotICAgICAgICBzcGFjZSBpcyBzdGlsbCBhbGxvY2F0ZWQgZm9yIGl0IChUT1BfRk9PVF9TSVpFKSB0byBlbmFibGUKLSAgICAgICAgc2VwYXJhdGlvbiBvciBtZXJnaW5nIHdoZW4gc3BhY2UgaXMgZXh0ZW5kZWQuCi0KLSAgICAgMy4gQ2h1bmtzIGFsbG9jYXRlZCB2aWEgbW1hcCwgd2hpY2ggaGF2ZSB0aGUgbG93ZXN0LW9yZGVyIGJpdAotICAgICAgICAoSVNfTU1BUFBFRF9CSVQpIHNldCBpbiB0aGVpciBwcmV2X2Zvb3QgZmllbGRzLCBhbmQgZG8gbm90IHNldAotICAgICAgICBQSU5VU0VfQklUIGluIHRoZWlyIGhlYWQgZmllbGRzLiAgQmVjYXVzZSB0aGV5IGFyZSBhbGxvY2F0ZWQKLSAgICAgICAgb25lLWJ5LW9uZSwgZWFjaCBtdXN0IGNhcnJ5IGl0cyBvd24gcHJldl9mb290IGZpZWxkLCB3aGljaCBpcwotICAgICAgICBhbHNvIHVzZWQgdG8gaG9sZCB0aGUgb2Zmc2V0IHRoaXMgY2h1bmsgaGFzIHdpdGhpbiBpdHMgbW1hcHBlZAotICAgICAgICByZWdpb24sIHdoaWNoIGlzIG5lZWRlZCB0byBwcmVzZXJ2ZSBhbGlnbm1lbnQuIEVhY2ggbW1hcHBlZAotICAgICAgICBjaHVuayBpcyB0cmFpbGVkIGJ5IHRoZSBmaXJzdCB0d28gZmllbGRzIG9mIGEgZmFrZSBuZXh0LWNodW5rCi0gICAgICAgIGZvciBzYWtlIG9mIHVzYWdlIGNoZWNrcy4KLQotKi8KLQotc3RydWN0IG1hbGxvY19jaHVuayB7Ci0gIHNpemVfdCAgICAgICAgICAgICAgIHByZXZfZm9vdDsgIC8qIFNpemUgb2YgcHJldmlvdXMgY2h1bmsgKGlmIGZyZWUpLiAgKi8KLSAgc2l6ZV90ICAgICAgICAgICAgICAgaGVhZDsgICAgICAgLyogU2l6ZSBhbmQgaW51c2UgYml0cy4gKi8KLSAgc3RydWN0IG1hbGxvY19jaHVuayogZmQ7ICAgICAgICAgLyogZG91YmxlIGxpbmtzIC0tIHVzZWQgb25seSBpZiBmcmVlLiAqLwotICBzdHJ1Y3QgbWFsbG9jX2NodW5rKiBiazsKLX07Ci0KLXR5cGVkZWYgc3RydWN0IG1hbGxvY19jaHVuayAgbWNodW5rOwotdHlwZWRlZiBzdHJ1Y3QgbWFsbG9jX2NodW5rKiBtY2h1bmtwdHI7Ci10eXBlZGVmIHN0cnVjdCBtYWxsb2NfY2h1bmsqIHNiaW5wdHI7ICAvKiBUaGUgdHlwZSBvZiBiaW5zIG9mIGNodW5rcyAqLwotdHlwZWRlZiB1bnNpZ25lZCBpbnQgYmluZGV4X3Q7ICAgICAgICAgLyogRGVzY3JpYmVkIGJlbG93ICovCi10eXBlZGVmIHVuc2lnbmVkIGludCBiaW5tYXBfdDsgICAgICAgICAvKiBEZXNjcmliZWQgYmVsb3cgKi8KLXR5cGVkZWYgdW5zaWduZWQgaW50IGZsYWdfdDsgICAgICAgICAgIC8qIFRoZSB0eXBlIG9mIHZhcmlvdXMgYml0IGZsYWcgc2V0cyAqLwotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tIENodW5rcyBzaXplcyBhbmQgYWxpZ25tZW50cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0jZGVmaW5lIE1DSFVOS19TSVpFICAgICAgICAgKHNpemVvZihtY2h1bmspKQotCi0jaWYgRk9PVEVSUwotI2RlZmluZSBDSFVOS19PVkVSSEVBRCAgICAgIChUV09fU0laRV9UX1NJWkVTKQotI2Vsc2UgLyogRk9PVEVSUyAqLwotI2RlZmluZSBDSFVOS19PVkVSSEVBRCAgICAgIChTSVpFX1RfU0laRSkKLSNlbmRpZiAvKiBGT09URVJTICovCi0KLS8qIE1NYXBwZWQgY2h1bmtzIG5lZWQgYSBzZWNvbmQgd29yZCBvZiBvdmVyaGVhZCAuLi4gKi8KLSNkZWZpbmUgTU1BUF9DSFVOS19PVkVSSEVBRCAoVFdPX1NJWkVfVF9TSVpFUykKLS8qIC4uLiBhbmQgYWRkaXRpb25hbCBwYWRkaW5nIGZvciBmYWtlIG5leHQtY2h1bmsgYXQgZm9vdCAqLwotI2RlZmluZSBNTUFQX0ZPT1RfUEFEICAgICAgIChGT1VSX1NJWkVfVF9TSVpFUykKLQotLyogVGhlIHNtYWxsZXN0IHNpemUgd2UgY2FuIG1hbGxvYyBpcyBhbiBhbGlnbmVkIG1pbmltYWwgY2h1bmsgKi8KLSNkZWZpbmUgTUlOX0NIVU5LX1NJWkVcCi0gICgoTUNIVU5LX1NJWkUgKyBDSFVOS19BTElHTl9NQVNLKSAmIH5DSFVOS19BTElHTl9NQVNLKQotCi0vKiBjb252ZXJzaW9uIGZyb20gbWFsbG9jIGhlYWRlcnMgdG8gdXNlciBwb2ludGVycywgYW5kIGJhY2sgKi8KLSNkZWZpbmUgY2h1bmsybWVtKHApICAgICAgICAoKHZvaWQqKSgoY2hhciopKHApICAgICAgICsgVFdPX1NJWkVfVF9TSVpFUykpCi0jZGVmaW5lIG1lbTJjaHVuayhtZW0pICAgICAgKChtY2h1bmtwdHIpKChjaGFyKikobWVtKSAtIFRXT19TSVpFX1RfU0laRVMpKQotLyogY2h1bmsgYXNzb2NpYXRlZCB3aXRoIGFsaWduZWQgYWRkcmVzcyBBICovCi0jZGVmaW5lIGFsaWduX2FzX2NodW5rKEEpICAgKG1jaHVua3B0cikoKEEpICsgYWxpZ25fb2Zmc2V0KGNodW5rMm1lbShBKSkpCi0KLS8qIEJvdW5kcyBvbiByZXF1ZXN0IChub3QgY2h1bmspIHNpemVzLiAqLwotI2RlZmluZSBNQVhfUkVRVUVTVCAgICAgICAgICgoLU1JTl9DSFVOS19TSVpFKSA8PCAyKQotI2RlZmluZSBNSU5fUkVRVUVTVCAgICAgICAgIChNSU5fQ0hVTktfU0laRSAtIENIVU5LX09WRVJIRUFEIC0gU0laRV9UX09ORSkKLQotLyogcGFkIHJlcXVlc3QgYnl0ZXMgaW50byBhIHVzYWJsZSBzaXplICovCi0jZGVmaW5lIHBhZF9yZXF1ZXN0KHJlcSkgXAotICAgKCgocmVxKSArIENIVU5LX09WRVJIRUFEICsgQ0hVTktfQUxJR05fTUFTSykgJiB+Q0hVTktfQUxJR05fTUFTSykKLQotLyogcGFkIHJlcXVlc3QsIGNoZWNraW5nIGZvciBtaW5pbXVtIChidXQgbm90IG1heGltdW0pICovCi0jZGVmaW5lIHJlcXVlc3Qyc2l6ZShyZXEpIFwKLSAgKCgocmVxKSA8IE1JTl9SRVFVRVNUKT8gTUlOX0NIVU5LX1NJWkUgOiBwYWRfcmVxdWVzdChyZXEpKQotCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLSBPcGVyYXRpb25zIG9uIGhlYWQgYW5kIGZvb3QgZmllbGRzIC0tLS0tLS0tLS0tLS0tLS0tICovCi0KLS8qCi0gIFRoZSBoZWFkIGZpZWxkIG9mIGEgY2h1bmsgaXMgb3InZWQgd2l0aCBQSU5VU0VfQklUIHdoZW4gcHJldmlvdXMKLSAgYWRqYWNlbnQgY2h1bmsgaW4gdXNlLCBhbmQgb3InZWQgd2l0aCBDSU5VU0VfQklUIGlmIHRoaXMgY2h1bmsgaXMgaW4KLSAgdXNlLiBJZiB0aGUgY2h1bmsgd2FzIG9idGFpbmVkIHdpdGggbW1hcCwgdGhlIHByZXZfZm9vdCBmaWVsZCBoYXMKLSAgSVNfTU1BUFBFRF9CSVQgc2V0LCBvdGhlcndpc2UgaG9sZGluZyB0aGUgb2Zmc2V0IG9mIHRoZSBiYXNlIG9mIHRoZQotICBtbWFwcGVkIHJlZ2lvbiB0byB0aGUgYmFzZSBvZiB0aGUgY2h1bmsuCi0qLwotCi0jZGVmaW5lIFBJTlVTRV9CSVQgICAgICAgICAgKFNJWkVfVF9PTkUpCi0jZGVmaW5lIENJTlVTRV9CSVQgICAgICAgICAgKFNJWkVfVF9UV08pCi0jZGVmaW5lIElOVVNFX0JJVFMgICAgICAgICAgKFBJTlVTRV9CSVR8Q0lOVVNFX0JJVCkKLQotLyogSGVhZCB2YWx1ZSBmb3IgZmVuY2Vwb3N0cyAqLwotI2RlZmluZSBGRU5DRVBPU1RfSEVBRCAgICAgIChJTlVTRV9CSVRTfFNJWkVfVF9TSVpFKQotCi0vKiBleHRyYWN0aW9uIG9mIGZpZWxkcyBmcm9tIGhlYWQgd29yZHMgKi8KLSNkZWZpbmUgY2ludXNlKHApICAgICAgICAgICAoKHApLT5oZWFkICYgQ0lOVVNFX0JJVCkKLSNkZWZpbmUgcGludXNlKHApICAgICAgICAgICAoKHApLT5oZWFkICYgUElOVVNFX0JJVCkKLSNkZWZpbmUgY2h1bmtzaXplKHApICAgICAgICAoKHApLT5oZWFkICYgfihJTlVTRV9CSVRTKSkKLQotI2RlZmluZSBjbGVhcl9waW51c2UocCkgICAgICgocCktPmhlYWQgJj0gflBJTlVTRV9CSVQpCi0jZGVmaW5lIGNsZWFyX2NpbnVzZShwKSAgICAgKChwKS0+aGVhZCAmPSB+Q0lOVVNFX0JJVCkKLQotLyogVHJlYXQgc3BhY2UgYXQgcHRyICsvLSBvZmZzZXQgYXMgYSBjaHVuayAqLwotI2RlZmluZSBjaHVua19wbHVzX29mZnNldChwLCBzKSAgKChtY2h1bmtwdHIpKCgoY2hhciopKHApKSArIChzKSkpCi0jZGVmaW5lIGNodW5rX21pbnVzX29mZnNldChwLCBzKSAoKG1jaHVua3B0cikoKChjaGFyKikocCkpIC0gKHMpKSkKLQotLyogUHRyIHRvIG5leHQgb3IgcHJldmlvdXMgcGh5c2ljYWwgbWFsbG9jX2NodW5rLiAqLwotI2RlZmluZSBuZXh0X2NodW5rKHApICgobWNodW5rcHRyKSggKChjaGFyKikocCkpICsgKChwKS0+aGVhZCAmIH5JTlVTRV9CSVRTKSkpCi0jZGVmaW5lIHByZXZfY2h1bmsocCkgKChtY2h1bmtwdHIpKCAoKGNoYXIqKShwKSkgLSAoKHApLT5wcmV2X2Zvb3QpICkpCi0KLS8qIGV4dHJhY3QgbmV4dCBjaHVuaydzIHBpbnVzZSBiaXQgKi8KLSNkZWZpbmUgbmV4dF9waW51c2UocCkgICgobmV4dF9jaHVuayhwKS0+aGVhZCkgJiBQSU5VU0VfQklUKQotCi0vKiBHZXQvc2V0IHNpemUgYXQgZm9vdGVyICovCi0jZGVmaW5lIGdldF9mb290KHAsIHMpICAoKChtY2h1bmtwdHIpKChjaGFyKikocCkgKyAocykpKS0+cHJldl9mb290KQotI2RlZmluZSBzZXRfZm9vdChwLCBzKSAgKCgobWNodW5rcHRyKSgoY2hhciopKHApICsgKHMpKSktPnByZXZfZm9vdCA9IChzKSkKLQotLyogU2V0IHNpemUsIHBpbnVzZSBiaXQsIGFuZCBmb290ICovCi0jZGVmaW5lIHNldF9zaXplX2FuZF9waW51c2Vfb2ZfZnJlZV9jaHVuayhwLCBzKVwKLSAgKChwKS0+aGVhZCA9IChzfFBJTlVTRV9CSVQpLCBzZXRfZm9vdChwLCBzKSkKLQotLyogU2V0IHNpemUsIHBpbnVzZSBiaXQsIGZvb3QsIGFuZCBjbGVhciBuZXh0IHBpbnVzZSAqLwotI2RlZmluZSBzZXRfZnJlZV93aXRoX3BpbnVzZShwLCBzLCBuKVwKLSAgKGNsZWFyX3BpbnVzZShuKSwgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9mcmVlX2NodW5rKHAsIHMpKQotCi0jZGVmaW5lIGlzX21tYXBwZWQocClcCi0gICghKChwKS0+aGVhZCAmIFBJTlVTRV9CSVQpICYmICgocCktPnByZXZfZm9vdCAmIElTX01NQVBQRURfQklUKSkKLQotLyogR2V0IHRoZSBpbnRlcm5hbCBvdmVyaGVhZCBhc3NvY2lhdGVkIHdpdGggY2h1bmsgcCAqLwotI2RlZmluZSBvdmVyaGVhZF9mb3IocClcCi0gKGlzX21tYXBwZWQocCk/IE1NQVBfQ0hVTktfT1ZFUkhFQUQgOiBDSFVOS19PVkVSSEVBRCkKLQotLyogUmV0dXJuIHRydWUgaWYgbWFsbG9jZWQgc3BhY2UgaXMgbm90IG5lY2Vzc2FyaWx5IGNsZWFyZWQgKi8KLSNpZiBNTUFQX0NMRUFSUwotI2RlZmluZSBjYWxsb2NfbXVzdF9jbGVhcihwKSAoIWlzX21tYXBwZWQocCkpCi0jZWxzZSAvKiBNTUFQX0NMRUFSUyAqLwotI2RlZmluZSBjYWxsb2NfbXVzdF9jbGVhcihwKSAoMSkKLSNlbmRpZiAvKiBNTUFQX0NMRUFSUyAqLwotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tIE92ZXJsYWlkIGRhdGEgc3RydWN0dXJlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0vKgotICBXaGVuIGNodW5rcyBhcmUgbm90IGluIHVzZSwgdGhleSBhcmUgdHJlYXRlZCBhcyBub2RlcyBvZiBlaXRoZXIKLSAgbGlzdHMgb3IgdHJlZXMuCi0KLSAgIlNtYWxsIiAgY2h1bmtzIGFyZSBzdG9yZWQgaW4gY2lyY3VsYXIgZG91Ymx5LWxpbmtlZCBsaXN0cywgYW5kIGxvb2sKLSAgbGlrZSB0aGlzOgotCi0gICAgY2h1bmstPiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKwotICAgICAgICAgICAgfCAgICAgICAgICAgICBTaXplIG9mIHByZXZpb3VzIGNodW5rICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgICAgICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCi0gICAgYGhlYWQ6JyB8ICAgICAgICAgICAgIFNpemUgb2YgY2h1bmssIGluIGJ5dGVzICAgICAgICAgICAgICAgICAgICAgICAgIHxQfAotICAgICAgbWVtLT4gKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKLSAgICAgICAgICAgIHwgICAgICAgICAgICAgRm9yd2FyZCBwb2ludGVyIHRvIG5leHQgY2h1bmsgaW4gbGlzdCAgICAgICAgICAgICB8Ci0gICAgICAgICAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKwotICAgICAgICAgICAgfCAgICAgICAgICAgICBCYWNrIHBvaW50ZXIgdG8gcHJldmlvdXMgY2h1bmsgaW4gbGlzdCAgICAgICAgICAgIHwKLSAgICAgICAgICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCi0gICAgICAgICAgICB8ICAgICAgICAgICAgIFVudXNlZCBzcGFjZSAobWF5IGJlIDAgYnl0ZXMgbG9uZykgICAgICAgICAgICAgICAgLgotICAgICAgICAgICAgLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4KLSAgICAgICAgICAgIC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci1uZXh0Y2h1bmstPiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKwotICAgIGBmb290OicgfCAgICAgICAgICAgICBTaXplIG9mIGNodW5rLCBpbiBieXRlcyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgICAgICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCi0KLSAgTGFyZ2VyIGNodW5rcyBhcmUga2VwdCBpbiBhIGZvcm0gb2YgYml0d2lzZSBkaWdpdGFsIHRyZWVzIChha2EKLSAgdHJpZXMpIGtleWVkIG9uIGNodW5rc2l6ZXMuICBCZWNhdXNlIG1hbGxvY190cmVlX2NodW5rcyBhcmUgb25seSBmb3IKLSAgZnJlZSBjaHVua3MgZ3JlYXRlciB0aGFuIDI1NiBieXRlcywgdGhlaXIgc2l6ZSBkb2Vzbid0IGltcG9zZSBhbnkKLSAgY29uc3RyYWludHMgb24gdXNlciBjaHVuayBzaXplcy4gIEVhY2ggbm9kZSBsb29rcyBsaWtlOgotCi0gICAgY2h1bmstPiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKwotICAgICAgICAgICAgfCAgICAgICAgICAgICBTaXplIG9mIHByZXZpb3VzIGNodW5rICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgICAgICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCi0gICAgYGhlYWQ6JyB8ICAgICAgICAgICAgIFNpemUgb2YgY2h1bmssIGluIGJ5dGVzICAgICAgICAgICAgICAgICAgICAgICAgIHxQfAotICAgICAgbWVtLT4gKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKLSAgICAgICAgICAgIHwgICAgICAgICAgICAgRm9yd2FyZCBwb2ludGVyIHRvIG5leHQgY2h1bmsgb2Ygc2FtZSBzaXplICAgICAgICB8Ci0gICAgICAgICAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKwotICAgICAgICAgICAgfCAgICAgICAgICAgICBCYWNrIHBvaW50ZXIgdG8gcHJldmlvdXMgY2h1bmsgb2Ygc2FtZSBzaXplICAgICAgIHwKLSAgICAgICAgICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCi0gICAgICAgICAgICB8ICAgICAgICAgICAgIFBvaW50ZXIgdG8gbGVmdCBjaGlsZCAoY2hpbGRbMF0pICAgICAgICAgICAgICAgICAgfAotICAgICAgICAgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKLSAgICAgICAgICAgIHwgICAgICAgICAgICAgUG9pbnRlciB0byByaWdodCBjaGlsZCAoY2hpbGRbMV0pICAgICAgICAgICAgICAgICB8Ci0gICAgICAgICAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKwotICAgICAgICAgICAgfCAgICAgICAgICAgICBQb2ludGVyIHRvIHBhcmVudCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgICAgICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCi0gICAgICAgICAgICB8ICAgICAgICAgICAgIGJpbiBpbmRleCBvZiB0aGlzIGNodW5rICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgICAgICAgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKLSAgICAgICAgICAgIHwgICAgICAgICAgICAgVW51c2VkIHNwYWNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuCi0gICAgICAgICAgICAuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotbmV4dGNodW5rLT4gKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKLSAgICBgZm9vdDonIHwgICAgICAgICAgICAgU2l6ZSBvZiBjaHVuaywgaW4gYnl0ZXMgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gICAgICAgICAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKwotCi0gIEVhY2ggdHJlZSBob2xkaW5nIHRyZWVub2RlcyBpcyBhIHRyZWUgb2YgdW5pcXVlIGNodW5rIHNpemVzLiAgQ2h1bmtzCi0gIG9mIHRoZSBzYW1lIHNpemUgYXJlIGFycmFuZ2VkIGluIGEgY2lyY3VsYXJseS1saW5rZWQgbGlzdCwgd2l0aCBvbmx5Ci0gIHRoZSBvbGRlc3QgY2h1bmsgKHRoZSBuZXh0IHRvIGJlIHVzZWQsIGluIG91ciBGSUZPIG9yZGVyaW5nKQotICBhY3R1YWxseSBpbiB0aGUgdHJlZS4gIChUcmVlIG1lbWJlcnMgYXJlIGRpc3Rpbmd1aXNoZWQgYnkgYSBub24tbnVsbAotICBwYXJlbnQgcG9pbnRlci4pICBJZiBhIGNodW5rIHdpdGggdGhlIHNhbWUgc2l6ZSBhbiBhbiBleGlzdGluZyBub2RlCi0gIGlzIGluc2VydGVkLCBpdCBpcyBsaW5rZWQgb2ZmIHRoZSBleGlzdGluZyBub2RlIHVzaW5nIHBvaW50ZXJzIHRoYXQKLSAgd29yayBpbiB0aGUgc2FtZSB3YXkgYXMgZmQvYmsgcG9pbnRlcnMgb2Ygc21hbGwgY2h1bmtzLgotCi0gIEVhY2ggdHJlZSBjb250YWlucyBhIHBvd2VyIG9mIDIgc2l6ZWQgcmFuZ2Ugb2YgY2h1bmsgc2l6ZXMgKHRoZQotICBzbWFsbGVzdCBpcyAweDEwMCA8PSB4IDwgMHgxODApLCB3aGljaCBpcyBpcyBkaXZpZGVkIGluIGhhbGYgYXQgZWFjaAotICB0cmVlIGxldmVsLCB3aXRoIHRoZSBjaHVua3MgaW4gdGhlIHNtYWxsZXIgaGFsZiBvZiB0aGUgcmFuZ2UgKDB4MTAwCi0gIDw9IHggPCAweDE0MCBmb3IgdGhlIHRvcCBub3NlKSBpbiB0aGUgbGVmdCBzdWJ0cmVlIGFuZCB0aGUgbGFyZ2VyCi0gIGhhbGYgKDB4MTQwIDw9IHggPCAweDE4MCkgaW4gdGhlIHJpZ2h0IHN1YnRyZWUuICBUaGlzIGlzLCBvZiBjb3Vyc2UsCi0gIGRvbmUgYnkgaW5zcGVjdGluZyBpbmRpdmlkdWFsIGJpdHMuCi0KLSAgVXNpbmcgdGhlc2UgcnVsZXMsIGVhY2ggbm9kZSdzIGxlZnQgc3VidHJlZSBjb250YWlucyBhbGwgc21hbGxlcgotICBzaXplcyB0aGFuIGl0cyByaWdodCBzdWJ0cmVlLiAgSG93ZXZlciwgdGhlIG5vZGUgYXQgdGhlIHJvb3Qgb2YgZWFjaAotICBzdWJ0cmVlIGhhcyBubyBwYXJ0aWN1bGFyIG9yZGVyaW5nIHJlbGF0aW9uc2hpcCB0byBlaXRoZXIuICAoVGhlCi0gIGRpdmlkaW5nIGxpbmUgYmV0d2VlbiB0aGUgc3VidHJlZSBzaXplcyBpcyBiYXNlZCBvbiB0cmllIHJlbGF0aW9uLikKLSAgSWYgd2UgcmVtb3ZlIHRoZSBsYXN0IGNodW5rIG9mIGEgZ2l2ZW4gc2l6ZSBmcm9tIHRoZSBpbnRlcmlvciBvZiB0aGUKLSAgdHJlZSwgd2UgbmVlZCB0byByZXBsYWNlIGl0IHdpdGggYSBsZWFmIG5vZGUuICBUaGUgdHJlZSBvcmRlcmluZwotICBydWxlcyBwZXJtaXQgYSBub2RlIHRvIGJlIHJlcGxhY2VkIGJ5IGFueSBsZWFmIGJlbG93IGl0LgotCi0gIFRoZSBzbWFsbGVzdCBjaHVuayBpbiBhIHRyZWUgKGEgY29tbW9uIG9wZXJhdGlvbiBpbiBhIGJlc3QtZml0Ci0gIGFsbG9jYXRvcikgY2FuIGJlIGZvdW5kIGJ5IHdhbGtpbmcgYSBwYXRoIHRvIHRoZSBsZWZ0bW9zdCBsZWFmIGluCi0gIHRoZSB0cmVlLiAgVW5saWtlIGEgdXN1YWwgYmluYXJ5IHRyZWUsIHdoZXJlIHdlIGZvbGxvdyBsZWZ0IGNoaWxkCi0gIHBvaW50ZXJzIHVudGlsIHdlIHJlYWNoIGEgbnVsbCwgaGVyZSB3ZSBmb2xsb3cgdGhlIHJpZ2h0IGNoaWxkCi0gIHBvaW50ZXIgYW55IHRpbWUgdGhlIGxlZnQgb25lIGlzIG51bGwsIHVudGlsIHdlIHJlYWNoIGEgbGVhZiB3aXRoCi0gIGJvdGggY2hpbGQgcG9pbnRlcnMgbnVsbC4gVGhlIHNtYWxsZXN0IGNodW5rIGluIHRoZSB0cmVlIHdpbGwgYmUKLSAgc29tZXdoZXJlIGFsb25nIHRoYXQgcGF0aC4KLQotICBUaGUgd29yc3QgY2FzZSBudW1iZXIgb2Ygc3RlcHMgdG8gYWRkLCBmaW5kLCBvciByZW1vdmUgYSBub2RlIGlzCi0gIGJvdW5kZWQgYnkgdGhlIG51bWJlciBvZiBiaXRzIGRpZmZlcmVudGlhdGluZyBjaHVua3Mgd2l0aGluCi0gIGJpbnMuIFVuZGVyIGN1cnJlbnQgYmluIGNhbGN1bGF0aW9ucywgdGhpcyByYW5nZXMgZnJvbSA2IHVwIHRvIDIxCi0gIChmb3IgMzIgYml0IHNpemVzKSBvciB1cCB0byA1MyAoZm9yIDY0IGJpdCBzaXplcykuIFRoZSB0eXBpY2FsIGNhc2UKLSAgaXMgb2YgY291cnNlIG11Y2ggYmV0dGVyLgotKi8KLQotc3RydWN0IG1hbGxvY190cmVlX2NodW5rIHsKLSAgLyogVGhlIGZpcnN0IGZvdXIgZmllbGRzIG11c3QgYmUgY29tcGF0aWJsZSB3aXRoIG1hbGxvY19jaHVuayAqLwotICBzaXplX3QgICAgICAgICAgICAgICAgICAgIHByZXZfZm9vdDsKLSAgc2l6ZV90ICAgICAgICAgICAgICAgICAgICBoZWFkOwotICBzdHJ1Y3QgbWFsbG9jX3RyZWVfY2h1bmsqIGZkOwotICBzdHJ1Y3QgbWFsbG9jX3RyZWVfY2h1bmsqIGJrOwotCi0gIHN0cnVjdCBtYWxsb2NfdHJlZV9jaHVuayogY2hpbGRbMl07Ci0gIHN0cnVjdCBtYWxsb2NfdHJlZV9jaHVuayogcGFyZW50OwotICBiaW5kZXhfdCAgICAgICAgICAgICAgICAgIGluZGV4OwotfTsKLQotdHlwZWRlZiBzdHJ1Y3QgbWFsbG9jX3RyZWVfY2h1bmsgIHRjaHVuazsKLXR5cGVkZWYgc3RydWN0IG1hbGxvY190cmVlX2NodW5rKiB0Y2h1bmtwdHI7Ci10eXBlZGVmIHN0cnVjdCBtYWxsb2NfdHJlZV9jaHVuayogdGJpbnB0cjsgLyogVGhlIHR5cGUgb2YgYmlucyBvZiB0cmVlcyAqLwotCi0vKiBBIGxpdHRsZSBoZWxwZXIgbWFjcm8gZm9yIHRyZWVzICovCi0jZGVmaW5lIGxlZnRtb3N0X2NoaWxkKHQpICgodCktPmNoaWxkWzBdICE9IDA/ICh0KS0+Y2hpbGRbMF0gOiAodCktPmNoaWxkWzFdKQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBTZWdtZW50cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0vKgotICBFYWNoIG1hbGxvYyBzcGFjZSBtYXkgaW5jbHVkZSBub24tY29udGlndW91cyBzZWdtZW50cywgaGVsZCBpbiBhCi0gIGxpc3QgaGVhZGVkIGJ5IGFuIGVtYmVkZGVkIG1hbGxvY19zZWdtZW50IHJlY29yZCByZXByZXNlbnRpbmcgdGhlCi0gIHRvcC1tb3N0IHNwYWNlLiBTZWdtZW50cyBhbHNvIGluY2x1ZGUgZmxhZ3MgaG9sZGluZyBwcm9wZXJ0aWVzIG9mCi0gIHRoZSBzcGFjZS4gTGFyZ2UgY2h1bmtzIHRoYXQgYXJlIGRpcmVjdGx5IGFsbG9jYXRlZCBieSBtbWFwIGFyZSBub3QKLSAgaW5jbHVkZWQgaW4gdGhpcyBsaXN0LiBUaGV5IGFyZSBpbnN0ZWFkIGluZGVwZW5kZW50bHkgY3JlYXRlZCBhbmQKLSAgZGVzdHJveWVkIHdpdGhvdXQgb3RoZXJ3aXNlIGtlZXBpbmcgdHJhY2sgb2YgdGhlbS4KLQotICBTZWdtZW50IG1hbmFnZW1lbnQgbWFpbmx5IGNvbWVzIGludG8gcGxheSBmb3Igc3BhY2VzIGFsbG9jYXRlZCBieQotICBNTUFQLiAgQW55IGNhbGwgdG8gTU1BUCBtaWdodCBvciBtaWdodCBub3QgcmV0dXJuIG1lbW9yeSB0aGF0IGlzCi0gIGFkamFjZW50IHRvIGFuIGV4aXN0aW5nIHNlZ21lbnQuICBNT1JFQ09SRSBub3JtYWxseSBjb250aWd1b3VzbHkKLSAgZXh0ZW5kcyB0aGUgY3VycmVudCBzcGFjZSwgc28gdGhpcyBzcGFjZSBpcyBhbG1vc3QgYWx3YXlzIGFkamFjZW50LAotICB3aGljaCBpcyBzaW1wbGVyIGFuZCBmYXN0ZXIgdG8gZGVhbCB3aXRoLiAoVGhpcyBpcyB3aHkgTU9SRUNPUkUgaXMKLSAgdXNlZCBwcmVmZXJlbnRpYWxseSB0byBNTUFQIHdoZW4gYm90aCBhcmUgYXZhaWxhYmxlIC0tIHNlZQotICBzeXNfYWxsb2MuKSAgV2hlbiBhbGxvY2F0aW5nIHVzaW5nIE1NQVAsIHdlIGRvbid0IHVzZSBhbnkgb2YgdGhlCi0gIGhpbnRpbmcgbWVjaGFuaXNtcyAoaW5jb25zaXN0ZW50bHkpIHN1cHBvcnRlZCBpbiB2YXJpb3VzCi0gIGltcGxlbWVudGF0aW9ucyBvZiB1bml4IG1tYXAsIG9yIGRpc3Rpbmd1aXNoIHJlc2VydmluZyBmcm9tCi0gIGNvbW1pdHRpbmcgbWVtb3J5LiBJbnN0ZWFkLCB3ZSBqdXN0IGFzayBmb3Igc3BhY2UsIGFuZCBleHBsb2l0Ci0gIGNvbnRpZ3VpdHkgd2hlbiB3ZSBnZXQgaXQuICBJdCBpcyBwcm9iYWJseSBwb3NzaWJsZSB0byBkbwotICBiZXR0ZXIgdGhhbiB0aGlzIG9uIHNvbWUgc3lzdGVtcywgYnV0IG5vIGdlbmVyYWwgc2NoZW1lIHNlZW1zCi0gIHRvIGJlIHNpZ25pZmljYW50bHkgYmV0dGVyLgotCi0gIE1hbmFnZW1lbnQgZW50YWlscyBhIHNpbXBsZXIgdmFyaWFudCBvZiB0aGUgY29uc29saWRhdGlvbiBzY2hlbWUKLSAgdXNlZCBmb3IgY2h1bmtzIHRvIHJlZHVjZSBmcmFnbWVudGF0aW9uIC0tIG5ldyBhZGphY2VudCBtZW1vcnkgaXMKLSAgbm9ybWFsbHkgcHJlcGVuZGVkIG9yIGFwcGVuZGVkIHRvIGFuIGV4aXN0aW5nIHNlZ21lbnQuIEhvd2V2ZXIsCi0gIHRoZXJlIGFyZSBsaW1pdGF0aW9ucyBjb21wYXJlZCB0byBjaHVuayBjb25zb2xpZGF0aW9uIHRoYXQgbW9zdGx5Ci0gIHJlZmxlY3QgdGhlIGZhY3QgdGhhdCBzZWdtZW50IHByb2Nlc3NpbmcgaXMgcmVsYXRpdmVseSBpbmZyZXF1ZW50Ci0gIChvY2N1cnJpbmcgb25seSB3aGVuIGdldHRpbmcgbWVtb3J5IGZyb20gc3lzdGVtKSBhbmQgdGhhdCB3ZQotICBkb24ndCBleHBlY3QgdG8gaGF2ZSBodWdlIG51bWJlcnMgb2Ygc2VnbWVudHM6Ci0KLSAgKiBTZWdtZW50cyBhcmUgbm90IGluZGV4ZWQsIHNvIHRyYXZlcnNhbCByZXF1aXJlcyBsaW5lYXIgc2NhbnMuICAoSXQKLSAgICB3b3VsZCBiZSBwb3NzaWJsZSB0byBpbmRleCB0aGVzZSwgYnV0IGlzIG5vdCB3b3J0aCB0aGUgZXh0cmEKLSAgICBvdmVyaGVhZCBhbmQgY29tcGxleGl0eSBmb3IgbW9zdCBwcm9ncmFtcyBvbiBtb3N0IHBsYXRmb3Jtcy4pCi0gICogTmV3IHNlZ21lbnRzIGFyZSBvbmx5IGFwcGVuZGVkIHRvIG9sZCBvbmVzIHdoZW4gaG9sZGluZyB0b3AtbW9zdAotICAgIG1lbW9yeTsgaWYgdGhleSBjYW5ub3QgYmUgcHJlcGVuZGVkIHRvIG90aGVycywgdGhleSBhcmUgaGVsZCBpbgotICAgIGRpZmZlcmVudCBzZWdtZW50cy4KLQotICBFeGNlcHQgZm9yIHRoZSB0b3AtbW9zdCBzZWdtZW50IG9mIGFuIG1zdGF0ZSwgZWFjaCBzZWdtZW50IHJlY29yZAotICBpcyBrZXB0IGF0IHRoZSB0YWlsIG9mIGl0cyBzZWdtZW50LiBTZWdtZW50cyBhcmUgYWRkZWQgYnkgcHVzaGluZwotICBzZWdtZW50IHJlY29yZHMgb250byB0aGUgbGlzdCBoZWFkZWQgYnkgJm1zdGF0ZS5zZWcgZm9yIHRoZQotICBjb250YWluaW5nIG1zdGF0ZS4KLQotICBTZWdtZW50IGZsYWdzIGNvbnRyb2wgYWxsb2NhdGlvbi9tZXJnZS9kZWFsbG9jYXRpb24gcG9saWNpZXM6Ci0gICogSWYgRVhURVJOX0JJVCBzZXQsIHRoZW4gd2UgZGlkIG5vdCBhbGxvY2F0ZSB0aGlzIHNlZ21lbnQsCi0gICAgYW5kIHNvIHNob3VsZCBub3QgdHJ5IHRvIGRlYWxsb2NhdGUgb3IgbWVyZ2Ugd2l0aCBvdGhlcnMuCi0gICAgKFRoaXMgY3VycmVudGx5IGhvbGRzIG9ubHkgZm9yIHRoZSBpbml0aWFsIHNlZ21lbnQgcGFzc2VkCi0gICAgaW50byBjcmVhdGVfbXNwYWNlX3dpdGhfYmFzZS4pCi0gICogSWYgSVNfTU1BUFBFRF9CSVQgc2V0LCB0aGUgc2VnbWVudCBtYXkgYmUgbWVyZ2VkIHdpdGgKLSAgICBvdGhlciBzdXJyb3VuZGluZyBtbWFwcGVkIHNlZ21lbnRzIGFuZCB0cmltbWVkL2RlLWFsbG9jYXRlZAotICAgIHVzaW5nIG11bm1hcC4KLSAgKiBJZiBuZWl0aGVyIGJpdCBpcyBzZXQsIHRoZW4gdGhlIHNlZ21lbnQgd2FzIG9idGFpbmVkIHVzaW5nCi0gICAgTU9SRUNPUkUgc28gY2FuIGJlIG1lcmdlZCB3aXRoIHN1cnJvdW5kaW5nIE1PUkVDT1JFJ2Qgc2VnbWVudHMKLSAgICBhbmQgZGVhbGxvY2F0ZWQvdHJpbW1lZCB1c2luZyBNT1JFQ09SRSB3aXRoIG5lZ2F0aXZlIGFyZ3VtZW50cy4KLSovCi0KLXN0cnVjdCBtYWxsb2Nfc2VnbWVudCB7Ci0gIGNoYXIqICAgICAgICBiYXNlOyAgICAgICAgICAgICAvKiBiYXNlIGFkZHJlc3MgKi8KLSAgc2l6ZV90ICAgICAgIHNpemU7ICAgICAgICAgICAgIC8qIGFsbG9jYXRlZCBzaXplICovCi0gIHN0cnVjdCBtYWxsb2Nfc2VnbWVudCogbmV4dDsgICAvKiBwdHIgdG8gbmV4dCBzZWdtZW50ICovCi0gIGZsYWdfdCAgICAgICBzZmxhZ3M7ICAgICAgICAgICAvKiBtbWFwIGFuZCBleHRlcm4gZmxhZyAqLwotfTsKLQotI2RlZmluZSBpc19tbWFwcGVkX3NlZ21lbnQoUykgICgoUyktPnNmbGFncyAmIElTX01NQVBQRURfQklUKQotI2RlZmluZSBpc19leHRlcm5fc2VnbWVudChTKSAgICgoUyktPnNmbGFncyAmIEVYVEVSTl9CSVQpCi0KLXR5cGVkZWYgc3RydWN0IG1hbGxvY19zZWdtZW50ICBtc2VnbWVudDsKLXR5cGVkZWYgc3RydWN0IG1hbGxvY19zZWdtZW50KiBtc2VnbWVudHB0cjsKLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBtYWxsb2Nfc3RhdGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotLyoKLSAgIEEgbWFsbG9jX3N0YXRlIGhvbGRzIGFsbCBvZiB0aGUgYm9va2tlZXBpbmcgZm9yIGEgc3BhY2UuCi0gICBUaGUgbWFpbiBmaWVsZHMgYXJlOgotCi0gIFRvcAotICAgIFRoZSB0b3Btb3N0IGNodW5rIG9mIHRoZSBjdXJyZW50bHkgYWN0aXZlIHNlZ21lbnQuIEl0cyBzaXplIGlzCi0gICAgY2FjaGVkIGluIHRvcHNpemUuICBUaGUgYWN0dWFsIHNpemUgb2YgdG9wbW9zdCBzcGFjZSBpcwotICAgIHRvcHNpemUrVE9QX0ZPT1RfU0laRSwgd2hpY2ggaW5jbHVkZXMgc3BhY2UgcmVzZXJ2ZWQgZm9yIGFkZGluZwotICAgIGZlbmNlcG9zdHMgYW5kIHNlZ21lbnQgcmVjb3JkcyBpZiBuZWNlc3Nhcnkgd2hlbiBnZXR0aW5nIG1vcmUKLSAgICBzcGFjZSBmcm9tIHRoZSBzeXN0ZW0uICBUaGUgc2l6ZSBhdCB3aGljaCB0byBhdXRvdHJpbSB0b3AgaXMKLSAgICBjYWNoZWQgZnJvbSBtcGFyYW1zIGluIHRyaW1fY2hlY2ssIGV4Y2VwdCB0aGF0IGl0IGlzIGRpc2FibGVkIGlmCi0gICAgYW4gYXV0b3RyaW0gZmFpbHMuCi0KLSAgRGVzaWduYXRlZCB2aWN0aW0gKGR2KQotICAgIFRoaXMgaXMgdGhlIHByZWZlcnJlZCBjaHVuayBmb3Igc2VydmljaW5nIHNtYWxsIHJlcXVlc3RzIHRoYXQKLSAgICBkb24ndCBoYXZlIGV4YWN0IGZpdHMuICBJdCBpcyBub3JtYWxseSB0aGUgY2h1bmsgc3BsaXQgb2ZmIG1vc3QKLSAgICByZWNlbnRseSB0byBzZXJ2aWNlIGFub3RoZXIgc21hbGwgcmVxdWVzdC4gIEl0cyBzaXplIGlzIGNhY2hlZCBpbgotICAgIGR2c2l6ZS4gVGhlIGxpbmsgZmllbGRzIG9mIHRoaXMgY2h1bmsgYXJlIG5vdCBtYWludGFpbmVkIHNpbmNlIGl0Ci0gICAgaXMgbm90IGtlcHQgaW4gYSBiaW4uCi0KLSAgU21hbGxCaW5zCi0gICAgQW4gYXJyYXkgb2YgYmluIGhlYWRlcnMgZm9yIGZyZWUgY2h1bmtzLiAgVGhlc2UgYmlucyBob2xkIGNodW5rcwotICAgIHdpdGggc2l6ZXMgbGVzcyB0aGFuIE1JTl9MQVJHRV9TSVpFIGJ5dGVzLiBFYWNoIGJpbiBjb250YWlucwotICAgIGNodW5rcyBvZiBhbGwgdGhlIHNhbWUgc2l6ZSwgc3BhY2VkIDggYnl0ZXMgYXBhcnQuICBUbyBzaW1wbGlmeQotICAgIHVzZSBpbiBkb3VibGUtbGlua2VkIGxpc3RzLCBlYWNoIGJpbiBoZWFkZXIgYWN0cyBhcyBhIG1hbGxvY19jaHVuawotICAgIHBvaW50aW5nIHRvIHRoZSByZWFsIGZpcnN0IG5vZGUsIGlmIGl0IGV4aXN0cyAoZWxzZSBwb2ludGluZyB0bwotICAgIGl0c2VsZikuICBUaGlzIGF2b2lkcyBzcGVjaWFsLWNhc2luZyBmb3IgaGVhZGVycy4gIEJ1dCB0byBhdm9pZAotICAgIHdhc3RlLCB3ZSBhbGxvY2F0ZSBvbmx5IHRoZSBmZC9iayBwb2ludGVycyBvZiBiaW5zLCBhbmQgdGhlbiB1c2UKLSAgICByZXBvc2l0aW9uaW5nIHRyaWNrcyB0byB0cmVhdCB0aGVzZSBhcyB0aGUgZmllbGRzIG9mIGEgY2h1bmsuCi0KLSAgVHJlZUJpbnMKLSAgICBUcmVlYmlucyBhcmUgcG9pbnRlcnMgdG8gdGhlIHJvb3RzIG9mIHRyZWVzIGhvbGRpbmcgYSByYW5nZSBvZgotICAgIHNpemVzLiBUaGVyZSBhcmUgMiBlcXVhbGx5IHNwYWNlZCB0cmVlYmlucyBmb3IgZWFjaCBwb3dlciBvZiB0d28KLSAgICBmcm9tIFRSRUVfU0hJRlQgdG8gVFJFRV9TSElGVCsxNi4gVGhlIGxhc3QgYmluIGhvbGRzIGFueXRoaW5nCi0gICAgbGFyZ2VyLgotCi0gIEJpbiBtYXBzCi0gICAgVGhlcmUgaXMgb25lIGJpdCBtYXAgZm9yIHNtYWxsIGJpbnMgKCJzbWFsbG1hcCIpIGFuZCBvbmUgZm9yCi0gICAgdHJlZWJpbnMgKCJ0cmVlbWFwKS4gIEVhY2ggYmluIHNldHMgaXRzIGJpdCB3aGVuIG5vbi1lbXB0eSwgYW5kCi0gICAgY2xlYXJzIHRoZSBiaXQgd2hlbiBlbXB0eS4gIEJpdCBvcGVyYXRpb25zIGFyZSB0aGVuIHVzZWQgdG8gYXZvaWQKLSAgICBiaW4tYnktYmluIHNlYXJjaGluZyAtLSBuZWFybHkgYWxsICJzZWFyY2giIGlzIGRvbmUgd2l0aG91dCBldmVyCi0gICAgbG9va2luZyBhdCBiaW5zIHRoYXQgd29uJ3QgYmUgc2VsZWN0ZWQuICBUaGUgYml0IG1hcHMKLSAgICBjb25zZXJ2YXRpdmVseSB1c2UgMzIgYml0cyBwZXIgbWFwIHdvcmQsIGV2ZW4gaWYgb24gNjRiaXQgc3lzdGVtLgotICAgIEZvciBhIGdvb2QgZGVzY3JpcHRpb24gb2Ygc29tZSBvZiB0aGUgYml0LWJhc2VkIHRlY2huaXF1ZXMgdXNlZAotICAgIGhlcmUsIHNlZSBIZW5yeSBTLiBXYXJyZW4gSnIncyBib29rICJIYWNrZXIncyBEZWxpZ2h0IiAoYW5kCi0gICAgc3VwcGxlbWVudCBhdCBodHRwOi8vaGFja2Vyc2RlbGlnaHQub3JnLykuIE1hbnkgb2YgdGhlc2UgYXJlCi0gICAgaW50ZW5kZWQgdG8gcmVkdWNlIHRoZSBicmFuY2hpbmVzcyBvZiBwYXRocyB0aHJvdWdoIG1hbGxvYyBldGMsIGFzCi0gICAgd2VsbCBhcyB0byByZWR1Y2UgdGhlIG51bWJlciBvZiBtZW1vcnkgbG9jYXRpb25zIHJlYWQgb3Igd3JpdHRlbi4KLQotICBTZWdtZW50cwotICAgIEEgbGlzdCBvZiBzZWdtZW50cyBoZWFkZWQgYnkgYW4gZW1iZWRkZWQgbWFsbG9jX3NlZ21lbnQgcmVjb3JkCi0gICAgcmVwcmVzZW50aW5nIHRoZSBpbml0aWFsIHNwYWNlLgotCi0gIEFkZHJlc3MgY2hlY2sgc3VwcG9ydAotICAgIFRoZSBsZWFzdF9hZGRyIGZpZWxkIGlzIHRoZSBsZWFzdCBhZGRyZXNzIGV2ZXIgb2J0YWluZWQgZnJvbQotICAgIE1PUkVDT1JFIG9yIE1NQVAuIEF0dGVtcHRlZCBmcmVlcyBhbmQgcmVhbGxvY3Mgb2YgYW55IGFkZHJlc3MgbGVzcwotICAgIHRoYW4gdGhpcyBhcmUgdHJhcHBlZCAodW5sZXNzIElOU0VDVVJFIGlzIGRlZmluZWQpLgotCi0gIE1hZ2ljIHRhZwotICAgIEEgY3Jvc3MtY2hlY2sgZmllbGQgdGhhdCBzaG91bGQgYWx3YXlzIGhvbGQgc2FtZSB2YWx1ZSBhcyBtcGFyYW1zLm1hZ2ljLgotCi0gIEZsYWdzCi0gICAgQml0cyByZWNvcmRpbmcgd2hldGhlciB0byB1c2UgTU1BUCwgbG9ja3MsIG9yIGNvbnRpZ3VvdXMgTU9SRUNPUkUKLQotICBTdGF0aXN0aWNzCi0gICAgRWFjaCBzcGFjZSBrZWVwcyB0cmFjayBvZiBjdXJyZW50IGFuZCBtYXhpbXVtIHN5c3RlbSBtZW1vcnkKLSAgICBvYnRhaW5lZCB2aWEgTU9SRUNPUkUgb3IgTU1BUC4KLQotICBMb2NraW5nCi0gICAgSWYgVVNFX0xPQ0tTIGlzIGRlZmluZWQsIHRoZSAibXV0ZXgiIGxvY2sgaXMgYWNxdWlyZWQgYW5kIHJlbGVhc2VkCi0gICAgYXJvdW5kIGV2ZXJ5IHB1YmxpYyBjYWxsIHVzaW5nIHRoaXMgbXNwYWNlLgotKi8KLQotLyogQmluIHR5cGVzLCB3aWR0aHMgYW5kIHNpemVzICovCi0jZGVmaW5lIE5TTUFMTEJJTlMgICAgICAgICgzMlUpCi0jZGVmaW5lIE5UUkVFQklOUyAgICAgICAgICgzMlUpCi0jZGVmaW5lIFNNQUxMQklOX1NISUZUICAgICgzVSkKLSNkZWZpbmUgU01BTExCSU5fV0lEVEggICAgKFNJWkVfVF9PTkUgPDwgU01BTExCSU5fU0hJRlQpCi0jZGVmaW5lIFRSRUVCSU5fU0hJRlQgICAgICg4VSkKLSNkZWZpbmUgTUlOX0xBUkdFX1NJWkUgICAgKFNJWkVfVF9PTkUgPDwgVFJFRUJJTl9TSElGVCkKLSNkZWZpbmUgTUFYX1NNQUxMX1NJWkUgICAgKE1JTl9MQVJHRV9TSVpFIC0gU0laRV9UX09ORSkKLSNkZWZpbmUgTUFYX1NNQUxMX1JFUVVFU1QgKE1BWF9TTUFMTF9TSVpFIC0gQ0hVTktfQUxJR05fTUFTSyAtIENIVU5LX09WRVJIRUFEKQotCi1zdHJ1Y3QgbWFsbG9jX3N0YXRlIHsKLSAgYmlubWFwX3QgICBzbWFsbG1hcDsKLSAgYmlubWFwX3QgICB0cmVlbWFwOwotICBzaXplX3QgICAgIGR2c2l6ZTsKLSAgc2l6ZV90ICAgICB0b3BzaXplOwotICBjaGFyKiAgICAgIGxlYXN0X2FkZHI7Ci0gIG1jaHVua3B0ciAgZHY7Ci0gIG1jaHVua3B0ciAgdG9wOwotICBzaXplX3QgICAgIHRyaW1fY2hlY2s7Ci0gIHNpemVfdCAgICAgbWFnaWM7Ci0gIG1jaHVua3B0ciAgc21hbGxiaW5zWyhOU01BTExCSU5TKzEpKjJdOwotICB0YmlucHRyICAgIHRyZWViaW5zW05UUkVFQklOU107Ci0gIHNpemVfdCAgICAgZm9vdHByaW50OwotI2lmIFVTRV9NQVhfQUxMT1dFRF9GT09UUFJJTlQKLSAgc2l6ZV90ICAgICBtYXhfYWxsb3dlZF9mb290cHJpbnQ7Ci0jZW5kaWYKLSAgc2l6ZV90ICAgICBtYXhfZm9vdHByaW50OwotICBmbGFnX3QgICAgIG1mbGFnczsKLSNpZiBVU0VfTE9DS1MKLSAgTUxPQ0tfVCAgICBtdXRleDsgICAgIC8qIGxvY2F0ZSBsb2NrIGFtb25nIGZpZWxkcyB0aGF0IHJhcmVseSBjaGFuZ2UgKi8KLSNlbmRpZiAvKiBVU0VfTE9DS1MgKi8KLSAgbXNlZ21lbnQgICBzZWc7Ci19OwotCi10eXBlZGVmIHN0cnVjdCBtYWxsb2Nfc3RhdGUqICAgIG1zdGF0ZTsKLQotLyogLS0tLS0tLS0tLS0tLSBHbG9iYWwgbWFsbG9jX3N0YXRlIGFuZCBtYWxsb2NfcGFyYW1zIC0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotLyoKLSAgbWFsbG9jX3BhcmFtcyBob2xkcyBnbG9iYWwgcHJvcGVydGllcywgaW5jbHVkaW5nIHRob3NlIHRoYXQgY2FuIGJlCi0gIGR5bmFtaWNhbGx5IHNldCB1c2luZyBtYWxsb3B0LiBUaGVyZSBpcyBhIHNpbmdsZSBpbnN0YW5jZSwgbXBhcmFtcywKLSAgaW5pdGlhbGl6ZWQgaW4gaW5pdF9tcGFyYW1zLgotKi8KLQotc3RydWN0IG1hbGxvY19wYXJhbXMgewotICBzaXplX3QgbWFnaWM7Ci0gIHNpemVfdCBwYWdlX3NpemU7Ci0gIHNpemVfdCBncmFudWxhcml0eTsKLSAgc2l6ZV90IG1tYXBfdGhyZXNob2xkOwotICBzaXplX3QgdHJpbV90aHJlc2hvbGQ7Ci0gIGZsYWdfdCBkZWZhdWx0X21mbGFnczsKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgbWFsbG9jX3BhcmFtcyBtcGFyYW1zOwotCi0vKiBUaGUgZ2xvYmFsIG1hbGxvY19zdGF0ZSB1c2VkIGZvciBhbGwgbm9uLSJtc3BhY2UiIGNhbGxzICovCi1zdGF0aWMgc3RydWN0IG1hbGxvY19zdGF0ZSBfZ21fCi0jaWYgVVNFX01BWF9BTExPV0VEX0ZPT1RQUklOVAotICAgICAgICA9IHsgLm1heF9hbGxvd2VkX2Zvb3RwcmludCA9IE1BWF9TSVpFX1QgfTsKLSNlbHNlCi0gICAgICAgIDsKLSNlbmRpZgotCi0jZGVmaW5lIGdtICAgICAgICAgICAgICAgICAoJl9nbV8pCi0jZGVmaW5lIGlzX2dsb2JhbChNKSAgICAgICAoKE0pID09ICZfZ21fKQotI2RlZmluZSBpc19pbml0aWFsaXplZChNKSAgKChNKS0+dG9wICE9IDApCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHN5c3RlbSBhbGxvYyBzZXR1cCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLS8qIE9wZXJhdGlvbnMgb24gbWZsYWdzICovCi0KLSNkZWZpbmUgdXNlX2xvY2soTSkgICAgICAgICAgICgoTSktPm1mbGFncyAmICAgVVNFX0xPQ0tfQklUKQotI2RlZmluZSBlbmFibGVfbG9jayhNKSAgICAgICAgKChNKS0+bWZsYWdzIHw9ICBVU0VfTE9DS19CSVQpCi0jZGVmaW5lIGRpc2FibGVfbG9jayhNKSAgICAgICAoKE0pLT5tZmxhZ3MgJj0gflVTRV9MT0NLX0JJVCkKLQotI2RlZmluZSB1c2VfbW1hcChNKSAgICAgICAgICAgKChNKS0+bWZsYWdzICYgICBVU0VfTU1BUF9CSVQpCi0jZGVmaW5lIGVuYWJsZV9tbWFwKE0pICAgICAgICAoKE0pLT5tZmxhZ3MgfD0gIFVTRV9NTUFQX0JJVCkKLSNkZWZpbmUgZGlzYWJsZV9tbWFwKE0pICAgICAgICgoTSktPm1mbGFncyAmPSB+VVNFX01NQVBfQklUKQotCi0jZGVmaW5lIHVzZV9ub25jb250aWd1b3VzKE0pICAoKE0pLT5tZmxhZ3MgJiAgIFVTRV9OT05DT05USUdVT1VTX0JJVCkKLSNkZWZpbmUgZGlzYWJsZV9jb250aWd1b3VzKE0pICgoTSktPm1mbGFncyB8PSAgVVNFX05PTkNPTlRJR1VPVVNfQklUKQotCi0jZGVmaW5lIHNldF9sb2NrKE0sTClcCi0gKChNKS0+bWZsYWdzID0gKEwpP1wKLSAgKChNKS0+bWZsYWdzIHwgVVNFX0xPQ0tfQklUKSA6XAotICAoKE0pLT5tZmxhZ3MgJiB+VVNFX0xPQ0tfQklUKSkKLQotLyogcGFnZS1hbGlnbiBhIHNpemUgKi8KLSNkZWZpbmUgcGFnZV9hbGlnbihTKVwKLSAoKChTKSArIChtcGFyYW1zLnBhZ2Vfc2l6ZSkpICYgfihtcGFyYW1zLnBhZ2Vfc2l6ZSAtIFNJWkVfVF9PTkUpKQotCi0vKiBncmFudWxhcml0eS1hbGlnbiBhIHNpemUgKi8KLSNkZWZpbmUgZ3JhbnVsYXJpdHlfYWxpZ24oUylcCi0gICgoKFMpICsgKG1wYXJhbXMuZ3JhbnVsYXJpdHkpKSAmIH4obXBhcmFtcy5ncmFudWxhcml0eSAtIFNJWkVfVF9PTkUpKQotCi0jZGVmaW5lIGlzX3BhZ2VfYWxpZ25lZChTKVwKLSAgICgoKHNpemVfdCkoUykgJiAobXBhcmFtcy5wYWdlX3NpemUgLSBTSVpFX1RfT05FKSkgPT0gMCkKLSNkZWZpbmUgaXNfZ3JhbnVsYXJpdHlfYWxpZ25lZChTKVwKLSAgICgoKHNpemVfdCkoUykgJiAobXBhcmFtcy5ncmFudWxhcml0eSAtIFNJWkVfVF9PTkUpKSA9PSAwKQotCi0vKiAgVHJ1ZSBpZiBzZWdtZW50IFMgaG9sZHMgYWRkcmVzcyBBICovCi0jZGVmaW5lIHNlZ21lbnRfaG9sZHMoUywgQSlcCi0gICgoY2hhciopKEEpID49IFMtPmJhc2UgJiYgKGNoYXIqKShBKSA8IFMtPmJhc2UgKyBTLT5zaXplKQotCi0vKiBSZXR1cm4gc2VnbWVudCBob2xkaW5nIGdpdmVuIGFkZHJlc3MgKi8KLXN0YXRpYyBtc2VnbWVudHB0ciBzZWdtZW50X2hvbGRpbmcobXN0YXRlIG0sIGNoYXIqIGFkZHIpIHsKLSAgbXNlZ21lbnRwdHIgc3AgPSAmbS0+c2VnOwotICBmb3IgKDs7KSB7Ci0gICAgaWYgKGFkZHIgPj0gc3AtPmJhc2UgJiYgYWRkciA8IHNwLT5iYXNlICsgc3AtPnNpemUpCi0gICAgICByZXR1cm4gc3A7Ci0gICAgaWYgKChzcCA9IHNwLT5uZXh0KSA9PSAwKQotICAgICAgcmV0dXJuIDA7Ci0gIH0KLX0KLQotLyogUmV0dXJuIHRydWUgaWYgc2VnbWVudCBjb250YWlucyBhIHNlZ21lbnQgbGluayAqLwotc3RhdGljIGludCBoYXNfc2VnbWVudF9saW5rKG1zdGF0ZSBtLCBtc2VnbWVudHB0ciBzcykgewotICBtc2VnbWVudHB0ciBzcCA9ICZtLT5zZWc7Ci0gIGZvciAoOzspIHsKLSAgICBpZiAoKGNoYXIqKXNwID49IHNzLT5iYXNlICYmIChjaGFyKilzcCA8IHNzLT5iYXNlICsgc3MtPnNpemUpCi0gICAgICByZXR1cm4gMTsKLSAgICBpZiAoKHNwID0gc3AtPm5leHQpID09IDApCi0gICAgICByZXR1cm4gMDsKLSAgfQotfQotCi0jaWZuZGVmIE1PUkVDT1JFX0NBTk5PVF9UUklNCi0jZGVmaW5lIHNob3VsZF90cmltKE0scykgICgocykgPiAoTSktPnRyaW1fY2hlY2spCi0jZWxzZSAgLyogTU9SRUNPUkVfQ0FOTk9UX1RSSU0gKi8KLSNkZWZpbmUgc2hvdWxkX3RyaW0oTSxzKSAgKDApCi0jZW5kaWYgLyogTU9SRUNPUkVfQ0FOTk9UX1RSSU0gKi8KLQotLyoKLSAgVE9QX0ZPT1RfU0laRSBpcyBwYWRkaW5nIGF0IHRoZSBlbmQgb2YgYSBzZWdtZW50LCBpbmNsdWRpbmcgc3BhY2UKLSAgdGhhdCBtYXkgYmUgbmVlZGVkIHRvIHBsYWNlIHNlZ21lbnQgcmVjb3JkcyBhbmQgZmVuY2Vwb3N0cyB3aGVuIG5ldwotICBub25jb250aWd1b3VzIHNlZ21lbnRzIGFyZSBhZGRlZC4KLSovCi0jZGVmaW5lIFRPUF9GT09UX1NJWkVcCi0gIChhbGlnbl9vZmZzZXQoY2h1bmsybWVtKDApKStwYWRfcmVxdWVzdChzaXplb2Yoc3RydWN0IG1hbGxvY19zZWdtZW50KSkrTUlOX0NIVU5LX1NJWkUpCi0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgSG9va3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotLyoKLSAgUFJFQUNUSU9OIHNob3VsZCBiZSBkZWZpbmVkIHRvIHJldHVybiAwIG9uIHN1Y2Nlc3MsIGFuZCBub256ZXJvIG9uCi0gIGZhaWx1cmUuIElmIHlvdSBhcmUgbm90IHVzaW5nIGxvY2tpbmcsIHlvdSBjYW4gcmVkZWZpbmUgdGhlc2UgdG8gZG8KLSAgYW55dGhpbmcgeW91IGxpa2UuCi0qLwotCi0jaWYgVVNFX0xPQ0tTCi0KLS8qIEVuc3VyZSBsb2NrcyBhcmUgaW5pdGlhbGl6ZWQgKi8KLSNkZWZpbmUgR0xPQkFMTFlfSU5JVElBTElaRSgpIChtcGFyYW1zLnBhZ2Vfc2l6ZSA9PSAwICYmIGluaXRfbXBhcmFtcygpKQotCi0jZGVmaW5lIFBSRUFDVElPTihNKSAgKChHTE9CQUxMWV9JTklUSUFMSVpFKCkgfHwgdXNlX2xvY2soTSkpPyBBQ1FVSVJFX0xPQ0soJihNKS0+bXV0ZXgpIDogMCkKLSNkZWZpbmUgUE9TVEFDVElPTihNKSB7IGlmICh1c2VfbG9jayhNKSkgUkVMRUFTRV9MT0NLKCYoTSktPm11dGV4KTsgfQotI2Vsc2UgLyogVVNFX0xPQ0tTICovCi0KLSNpZm5kZWYgUFJFQUNUSU9OCi0jZGVmaW5lIFBSRUFDVElPTihNKSAoMCkKLSNlbmRpZiAgLyogUFJFQUNUSU9OICovCi0KLSNpZm5kZWYgUE9TVEFDVElPTgotI2RlZmluZSBQT1NUQUNUSU9OKE0pCi0jZW5kaWYgIC8qIFBPU1RBQ1RJT04gKi8KLQotI2VuZGlmIC8qIFVTRV9MT0NLUyAqLwotCi0vKgotICBDT1JSVVBUSU9OX0VSUk9SX0FDVElPTiBpcyB0cmlnZ2VyZWQgdXBvbiBkZXRlY3RlZCBiYWQgYWRkcmVzc2VzLgotICBVU0FHRV9FUlJPUl9BQ1RJT04gaXMgdHJpZ2dlcmVkIG9uIGRldGVjdGVkIGJhZCBmcmVlcyBhbmQKLSAgcmVhbGxvY3MuIFRoZSBhcmd1bWVudCBwIGlzIGFuIGFkZHJlc3MgdGhhdCBtaWdodCBoYXZlIHRyaWdnZXJlZCB0aGUKLSAgZmF1bHQuIEl0IGlzIGlnbm9yZWQgYnkgdGhlIHR3byBwcmVkZWZpbmVkIGFjdGlvbnMsIGJ1dCBtaWdodCBiZQotICB1c2VmdWwgaW4gY3VzdG9tIGFjdGlvbnMgdGhhdCB0cnkgdG8gaGVscCBkaWFnbm9zZSBlcnJvcnMuCi0qLwotCi0jaWYgUFJPQ0VFRF9PTl9FUlJPUgotCi0vKiBBIGNvdW50IG9mIHRoZSBudW1iZXIgb2YgY29ycnVwdGlvbiBlcnJvcnMgY2F1c2luZyByZXNldHMgKi8KLWludCBtYWxsb2NfY29ycnVwdGlvbl9lcnJvcl9jb3VudDsKLQotLyogZGVmYXVsdCBjb3JydXB0aW9uIGFjdGlvbiAqLwotc3RhdGljIHZvaWQgcmVzZXRfb25fZXJyb3IobXN0YXRlIG0pOwotCi0jZGVmaW5lIENPUlJVUFRJT05fRVJST1JfQUNUSU9OKG0pICByZXNldF9vbl9lcnJvcihtKQotI2RlZmluZSBVU0FHRV9FUlJPUl9BQ1RJT04obSwgcCkKLQotI2Vsc2UgLyogUFJPQ0VFRF9PTl9FUlJPUiAqLwotCi0vKiBUaGUgZm9sbG93aW5nIEFuZHJvaWQtc3BlY2lmaWMgY29kZSBpcyB1c2VkIHRvIHByaW50IGFuIGluZm9ybWF0aXZlCi0gKiBmYXRhbCBlcnJvciBtZXNzYWdlIHRvIHRoZSBsb2cgd2hlbiB3ZSBkZXRlY3QgdGhhdCBhIGhlYXAgY29ycnVwdGlvbgotICogd2FzIGRldGVjdGVkLiBXZSBuZWVkIHRvIGJlIGNhcmVmdWwgYWJvdXQgbm90IHVzaW5nIGEgbG9nIGZ1bmN0aW9uCi0gKiB0aGF0IG1heSByZXF1aXJlIGFuIGFsbG9jYXRpb24gaGVyZSEKLSAqLwotI2lmZGVmIExPR19PTl9IRUFQX0VSUk9SCi0KLSMgIGluY2x1ZGUgPHByaXZhdGUvbG9nZC5oPgotCi1zdGF0aWMgdm9pZCBfX2Jpb25pY19oZWFwX2Vycm9yKGNvbnN0IGNoYXIqIG1zZywgY29uc3QgY2hhciogZnVuY3Rpb24pCi17Ci0gICAgLyogV2UgZm9ybWF0IHRoZSBidWZmZXIgZXhwbGljaXRlbHksIGkuZS4gd2l0aG91dCB1c2luZyBzbnByaW50ZigpCi0gICAgICogd2hpY2ggbWF5IHVzZSBtYWxsb2MoKSBpbnRlcm5hbGx5LiBOb3Qgc29tZXRoaW5nIHdlIGNhbiB0cnVzdAotICAgICAqIGlmIHdlIGp1c3QgZGV0ZWN0ZWQgYSBjb3JydXB0ZWQgaGVhcC4KLSAgICAgKi8KLSAgICBjaGFyIGJ1ZmZlclsyNTZdOwotICAgIHN0cmxjcHkoYnVmZmVyLCAiQEBAIEFCT1JUSU5HOiAiLCBzaXplb2YoYnVmZmVyKSk7Ci0gICAgc3RybGNhdChidWZmZXIsIG1zZywgc2l6ZW9mKGJ1ZmZlcikpOwotICAgIGlmIChmdW5jdGlvbiAhPSBOVUxMKSB7Ci0gICAgICAgIHN0cmxjYXQoYnVmZmVyLCAiIElOICIsIHNpemVvZihidWZmZXIpKTsKLSAgICAgICAgc3RybGNhdChidWZmZXIsIGZ1bmN0aW9uLCBzaXplb2YoYnVmZmVyKSk7Ci0gICAgfQotICAgIF9fbGliY19hbmRyb2lkX2xvZ193cml0ZShBTkRST0lEX0xPR19GQVRBTCwibGliYyIsYnVmZmVyKTsKLSAgICBhYm9ydCgpOwotfQotCi0jICBpZm5kZWYgQ09SUlVQVElPTl9FUlJPUl9BQ1RJT04KLSMgICAgZGVmaW5lIENPUlJVUFRJT05fRVJST1JfQUNUSU9OKG0pICBcCi0gICAgX19iaW9uaWNfaGVhcF9lcnJvcigiSEVBUCBNRU1PUlkgQ09SUlVQVElPTiIsIF9fRlVOQ1RJT05fXykKLSMgIGVuZGlmCi0jICBpZm5kZWYgVVNBR0VfRVJST1JfQUNUSU9OCi0jICAgIGRlZmluZSBVU0FHRV9FUlJPUl9BQ1RJT04obSxwKSAgIFwKLSAgICBfX2Jpb25pY19oZWFwX2Vycm9yKCJJTlZBTElEIEhFQVAgQUREUkVTUyIsIF9fRlVOQ1RJT05fXykKLSMgIGVuZGlmCi0KLSNlbHNlIC8qICFMT0dfT05fSEVBUF9FUlJPUiAqLwotCi0jICBpZm5kZWYgQ09SUlVQVElPTl9FUlJPUl9BQ1RJT04KLSMgICAgZGVmaW5lIENPUlJVUFRJT05fRVJST1JfQUNUSU9OKG0pIEFCT1JUCi0jICBlbmRpZiAvKiBDT1JSVVBUSU9OX0VSUk9SX0FDVElPTiAqLwotCi0jICBpZm5kZWYgVVNBR0VfRVJST1JfQUNUSU9OCi0jICAgIGRlZmluZSBVU0FHRV9FUlJPUl9BQ1RJT04obSxwKSBBQk9SVAotIyAgZW5kaWYgLyogVVNBR0VfRVJST1JfQUNUSU9OICovCi0KLSNlbmRpZiAvKiAhTE9HX09OX0hFQVBfRVJST1IgKi8KLQotCi0jZW5kaWYgLyogUFJPQ0VFRF9PTl9FUlJPUiAqLwotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBEZWJ1Z2dpbmcgc2V0dXAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0jaWYgISBERUJVRwotCi0jZGVmaW5lIGNoZWNrX2ZyZWVfY2h1bmsoTSxQKQotI2RlZmluZSBjaGVja19pbnVzZV9jaHVuayhNLFApCi0jZGVmaW5lIGNoZWNrX21hbGxvY2VkX2NodW5rKE0sUCxOKQotI2RlZmluZSBjaGVja19tbWFwcGVkX2NodW5rKE0sUCkKLSNkZWZpbmUgY2hlY2tfbWFsbG9jX3N0YXRlKE0pCi0jZGVmaW5lIGNoZWNrX3RvcF9jaHVuayhNLFApCi0KLSNlbHNlIC8qIERFQlVHICovCi0jZGVmaW5lIGNoZWNrX2ZyZWVfY2h1bmsoTSxQKSAgICAgICBkb19jaGVja19mcmVlX2NodW5rKE0sUCkKLSNkZWZpbmUgY2hlY2tfaW51c2VfY2h1bmsoTSxQKSAgICAgIGRvX2NoZWNrX2ludXNlX2NodW5rKE0sUCkKLSNkZWZpbmUgY2hlY2tfdG9wX2NodW5rKE0sUCkgICAgICAgIGRvX2NoZWNrX3RvcF9jaHVuayhNLFApCi0jZGVmaW5lIGNoZWNrX21hbGxvY2VkX2NodW5rKE0sUCxOKSBkb19jaGVja19tYWxsb2NlZF9jaHVuayhNLFAsTikKLSNkZWZpbmUgY2hlY2tfbW1hcHBlZF9jaHVuayhNLFApICAgIGRvX2NoZWNrX21tYXBwZWRfY2h1bmsoTSxQKQotI2RlZmluZSBjaGVja19tYWxsb2Nfc3RhdGUoTSkgICAgICAgZG9fY2hlY2tfbWFsbG9jX3N0YXRlKE0pCi0KLXN0YXRpYyB2b2lkICAgZG9fY2hlY2tfYW55X2NodW5rKG1zdGF0ZSBtLCBtY2h1bmtwdHIgcCk7Ci1zdGF0aWMgdm9pZCAgIGRvX2NoZWNrX3RvcF9jaHVuayhtc3RhdGUgbSwgbWNodW5rcHRyIHApOwotc3RhdGljIHZvaWQgICBkb19jaGVja19tbWFwcGVkX2NodW5rKG1zdGF0ZSBtLCBtY2h1bmtwdHIgcCk7Ci1zdGF0aWMgdm9pZCAgIGRvX2NoZWNrX2ludXNlX2NodW5rKG1zdGF0ZSBtLCBtY2h1bmtwdHIgcCk7Ci1zdGF0aWMgdm9pZCAgIGRvX2NoZWNrX2ZyZWVfY2h1bmsobXN0YXRlIG0sIG1jaHVua3B0ciBwKTsKLXN0YXRpYyB2b2lkICAgZG9fY2hlY2tfbWFsbG9jZWRfY2h1bmsobXN0YXRlIG0sIHZvaWQqIG1lbSwgc2l6ZV90IHMpOwotc3RhdGljIHZvaWQgICBkb19jaGVja190cmVlKG1zdGF0ZSBtLCB0Y2h1bmtwdHIgdCk7Ci1zdGF0aWMgdm9pZCAgIGRvX2NoZWNrX3RyZWViaW4obXN0YXRlIG0sIGJpbmRleF90IGkpOwotc3RhdGljIHZvaWQgICBkb19jaGVja19zbWFsbGJpbihtc3RhdGUgbSwgYmluZGV4X3QgaSk7Ci1zdGF0aWMgdm9pZCAgIGRvX2NoZWNrX21hbGxvY19zdGF0ZShtc3RhdGUgbSk7Ci1zdGF0aWMgaW50ICAgIGJpbl9maW5kKG1zdGF0ZSBtLCBtY2h1bmtwdHIgeCk7Ci1zdGF0aWMgc2l6ZV90IHRyYXZlcnNlX2FuZF9jaGVjayhtc3RhdGUgbSk7Ci0jZW5kaWYgLyogREVCVUcgKi8KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBJbmRleGluZyBCaW5zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotI2RlZmluZSBpc19zbWFsbChzKSAgICAgICAgICgoKHMpID4+IFNNQUxMQklOX1NISUZUKSA8IE5TTUFMTEJJTlMpCi0jZGVmaW5lIHNtYWxsX2luZGV4KHMpICAgICAgKChzKSAgPj4gU01BTExCSU5fU0hJRlQpCi0jZGVmaW5lIHNtYWxsX2luZGV4MnNpemUoaSkgKChpKSAgPDwgU01BTExCSU5fU0hJRlQpCi0jZGVmaW5lIE1JTl9TTUFMTF9JTkRFWCAgICAgKHNtYWxsX2luZGV4KE1JTl9DSFVOS19TSVpFKSkKLQotLyogYWRkcmVzc2luZyBieSBpbmRleC4gU2VlIGFib3ZlIGFib3V0IHNtYWxsYmluIHJlcG9zaXRpb25pbmcgKi8KLSNkZWZpbmUgc21hbGxiaW5fYXQoTSwgaSkgICAoKHNiaW5wdHIpKChjaGFyKikmKChNKS0+c21hbGxiaW5zWyhpKTw8MV0pKSkKLSNkZWZpbmUgdHJlZWJpbl9hdChNLGkpICAgICAoJigoTSktPnRyZWViaW5zW2ldKSkKLQotLyogYXNzaWduIHRyZWUgaW5kZXggZm9yIHNpemUgUyB0byB2YXJpYWJsZSBJICovCi0jaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgZGVmaW5lZChpMzg2KQotI2RlZmluZSBjb21wdXRlX3RyZWVfaW5kZXgoUywgSSlcCi17XAotICBzaXplX3QgWCA9IFMgPj4gVFJFRUJJTl9TSElGVDtcCi0gIGlmIChYID09IDApXAotICAgIEkgPSAwO1wKLSAgZWxzZSBpZiAoWCA+IDB4RkZGRilcCi0gICAgSSA9IE5UUkVFQklOUy0xO1wKLSAgZWxzZSB7XAotICAgIHVuc2lnbmVkIGludCBLO1wKLSAgICBfX2FzbV9fKCJic3JsICUxLCUwXG5cdCIgOiAiPXIiIChLKSA6ICJybSIgIChYKSk7XAotICAgIEkgPSAgKGJpbmRleF90KSgoSyA8PCAxKSArICgoUyA+PiAoSyArIChUUkVFQklOX1NISUZULTEpKSAmIDEpKSk7XAotICB9XAotfQotI2Vsc2UgLyogR05VQyAqLwotI2RlZmluZSBjb21wdXRlX3RyZWVfaW5kZXgoUywgSSlcCi17XAotICBzaXplX3QgWCA9IFMgPj4gVFJFRUJJTl9TSElGVDtcCi0gIGlmIChYID09IDApXAotICAgIEkgPSAwO1wKLSAgZWxzZSBpZiAoWCA+IDB4RkZGRilcCi0gICAgSSA9IE5UUkVFQklOUy0xO1wKLSAgZWxzZSB7XAotICAgIHVuc2lnbmVkIGludCBZID0gKHVuc2lnbmVkIGludClYO1wKLSAgICB1bnNpZ25lZCBpbnQgTiA9ICgoWSAtIDB4MTAwKSA+PiAxNikgJiA4O1wKLSAgICB1bnNpZ25lZCBpbnQgSyA9ICgoKFkgPDw9IE4pIC0gMHgxMDAwKSA+PiAxNikgJiA0O1wKLSAgICBOICs9IEs7XAotICAgIE4gKz0gSyA9ICgoKFkgPDw9IEspIC0gMHg0MDAwKSA+PiAxNikgJiAyO1wKLSAgICBLID0gMTQgLSBOICsgKChZIDw8PSBLKSA+PiAxNSk7XAotICAgIEkgPSAoSyA8PCAxKSArICgoUyA+PiAoSyArIChUUkVFQklOX1NISUZULTEpKSAmIDEpKTtcCi0gIH1cCi19Ci0jZW5kaWYgLyogR05VQyAqLwotCi0vKiBCaXQgcmVwcmVzZW50aW5nIG1heGltdW0gcmVzb2x2ZWQgc2l6ZSBpbiBhIHRyZWViaW4gYXQgaSAqLwotI2RlZmluZSBiaXRfZm9yX3RyZWVfaW5kZXgoaSkgXAotICAgKGkgPT0gTlRSRUVCSU5TLTEpPyAoU0laRV9UX0JJVFNJWkUtMSkgOiAoKChpKSA+PiAxKSArIFRSRUVCSU5fU0hJRlQgLSAyKQotCi0vKiBTaGlmdCBwbGFjaW5nIG1heGltdW0gcmVzb2x2ZWQgYml0IGluIGEgdHJlZWJpbiBhdCBpIGFzIHNpZ24gYml0ICovCi0jZGVmaW5lIGxlZnRzaGlmdF9mb3JfdHJlZV9pbmRleChpKSBcCi0gICAoKGkgPT0gTlRSRUVCSU5TLTEpPyAwIDogXAotICAgICgoU0laRV9UX0JJVFNJWkUtU0laRV9UX09ORSkgLSAoKChpKSA+PiAxKSArIFRSRUVCSU5fU0hJRlQgLSAyKSkpCi0KLS8qIFRoZSBzaXplIG9mIHRoZSBzbWFsbGVzdCBjaHVuayBoZWxkIGluIGJpbiB3aXRoIGluZGV4IGkgKi8KLSNkZWZpbmUgbWluc2l6ZV9mb3JfdHJlZV9pbmRleChpKSBcCi0gICAoKFNJWkVfVF9PTkUgPDwgKCgoaSkgPj4gMSkgKyBUUkVFQklOX1NISUZUKSkgfCAgXAotICAgKCgoc2l6ZV90KSgoaSkgJiBTSVpFX1RfT05FKSkgPDwgKCgoaSkgPj4gMSkgKyBUUkVFQklOX1NISUZUIC0gMSkpKQotCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBPcGVyYXRpb25zIG9uIGJpbiBtYXBzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLS8qIGJpdCBjb3JyZXNwb25kaW5nIHRvIGdpdmVuIGluZGV4ICovCi0jZGVmaW5lIGlkeDJiaXQoaSkgICAgICAgICAgICAgICgoYmlubWFwX3QpKDEpIDw8IChpKSkKLQotLyogTWFyay9DbGVhciBiaXRzIHdpdGggZ2l2ZW4gaW5kZXggKi8KLSNkZWZpbmUgbWFya19zbWFsbG1hcChNLGkpICAgICAgKChNKS0+c21hbGxtYXAgfD0gIGlkeDJiaXQoaSkpCi0jZGVmaW5lIGNsZWFyX3NtYWxsbWFwKE0saSkgICAgICgoTSktPnNtYWxsbWFwICY9IH5pZHgyYml0KGkpKQotI2RlZmluZSBzbWFsbG1hcF9pc19tYXJrZWQoTSxpKSAoKE0pLT5zbWFsbG1hcCAmICAgaWR4MmJpdChpKSkKLQotI2RlZmluZSBtYXJrX3RyZWVtYXAoTSxpKSAgICAgICAoKE0pLT50cmVlbWFwICB8PSAgaWR4MmJpdChpKSkKLSNkZWZpbmUgY2xlYXJfdHJlZW1hcChNLGkpICAgICAgKChNKS0+dHJlZW1hcCAgJj0gfmlkeDJiaXQoaSkpCi0jZGVmaW5lIHRyZWVtYXBfaXNfbWFya2VkKE0saSkgICgoTSktPnRyZWVtYXAgICYgICBpZHgyYml0KGkpKQotCi0vKiBpbmRleCBjb3JyZXNwb25kaW5nIHRvIGdpdmVuIGJpdCAqLwotCi0jaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgZGVmaW5lZChpMzg2KQotI2RlZmluZSBjb21wdXRlX2JpdDJpZHgoWCwgSSlcCi17XAotICB1bnNpZ25lZCBpbnQgSjtcCi0gIF9fYXNtX18oImJzZmwgJTEsJTBcblx0IiA6ICI9ciIgKEopIDogInJtIiAoWCkpO1wKLSAgSSA9IChiaW5kZXhfdClKO1wKLX0KLQotI2Vsc2UgLyogR05VQyAqLwotI2lmICBVU0VfQlVJTFRJTl9GRlMKLSNkZWZpbmUgY29tcHV0ZV9iaXQyaWR4KFgsIEkpIEkgPSBmZnMoWCktMQotCi0jZWxzZSAvKiBVU0VfQlVJTFRJTl9GRlMgKi8KLSNkZWZpbmUgY29tcHV0ZV9iaXQyaWR4KFgsIEkpXAote1wKLSAgdW5zaWduZWQgaW50IFkgPSBYIC0gMTtcCi0gIHVuc2lnbmVkIGludCBLID0gWSA+PiAoMTYtNCkgJiAxNjtcCi0gIHVuc2lnbmVkIGludCBOID0gSzsgICAgICAgIFkgPj49IEs7XAotICBOICs9IEsgPSBZID4+ICg4LTMpICYgIDg7ICBZID4+PSBLO1wKLSAgTiArPSBLID0gWSA+PiAoNC0yKSAmICA0OyAgWSA+Pj0gSztcCi0gIE4gKz0gSyA9IFkgPj4gKDItMSkgJiAgMjsgIFkgPj49IEs7XAotICBOICs9IEsgPSBZID4+ICgxLTApICYgIDE7ICBZID4+PSBLO1wKLSAgSSA9IChiaW5kZXhfdCkoTiArIFkpO1wKLX0KLSNlbmRpZiAvKiBVU0VfQlVJTFRJTl9GRlMgKi8KLSNlbmRpZiAvKiBHTlVDICovCi0KLS8qIGlzb2xhdGUgdGhlIGxlYXN0IHNldCBiaXQgb2YgYSBiaXRtYXAgKi8KLSNkZWZpbmUgbGVhc3RfYml0KHgpICAgICAgICAgKCh4KSAmIC0oeCkpCi0KLS8qIG1hc2sgd2l0aCBhbGwgYml0cyB0byBsZWZ0IG9mIGxlYXN0IGJpdCBvZiB4IG9uICovCi0jZGVmaW5lIGxlZnRfYml0cyh4KSAgICAgICAgICgoeDw8MSkgfCAtKHg8PDEpKQotCi0vKiBtYXNrIHdpdGggYWxsIGJpdHMgdG8gbGVmdCBvZiBvciBlcXVhbCB0byBsZWFzdCBiaXQgb2YgeCBvbiAqLwotI2RlZmluZSBzYW1lX29yX2xlZnRfYml0cyh4KSAoKHgpIHwgLSh4KSkKLQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBSdW50aW1lIENoZWNrIFN1cHBvcnQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0vKgotICBGb3Igc2VjdXJpdHksIHRoZSBtYWluIGludmFyaWFudCBpcyB0aGF0IG1hbGxvYy9mcmVlL2V0YyBuZXZlcgotICB3cml0ZXMgdG8gYSBzdGF0aWMgYWRkcmVzcyBvdGhlciB0aGFuIG1hbGxvY19zdGF0ZSwgdW5sZXNzIHN0YXRpYwotICBtYWxsb2Nfc3RhdGUgaXRzZWxmIGhhcyBiZWVuIGNvcnJ1cHRlZCwgd2hpY2ggY2Fubm90IG9jY3VyIHZpYQotICBtYWxsb2MgKGJlY2F1c2Ugb2YgdGhlc2UgY2hlY2tzKS4gSW4gZXNzZW5jZSB0aGlzIG1lYW5zIHRoYXQgd2UKLSAgYmVsaWV2ZSBhbGwgcG9pbnRlcnMsIHNpemVzLCBtYXBzIGV0YyBoZWxkIGluIG1hbGxvY19zdGF0ZSwgYnV0Ci0gIGNoZWNrIGFsbCBvZiB0aG9zZSBsaW5rZWQgb3Igb2Zmc2V0dGVkIGZyb20gb3RoZXIgZW1iZWRkZWQgZGF0YQotICBzdHJ1Y3R1cmVzLiAgVGhlc2UgY2hlY2tzIGFyZSBpbnRlcnNwZXJzZWQgd2l0aCBtYWluIGNvZGUgaW4gYSB3YXkKLSAgdGhhdCB0ZW5kcyB0byBtaW5pbWl6ZSB0aGVpciBydW4tdGltZSBjb3N0LgotCi0gIFdoZW4gRk9PVEVSUyBpcyBkZWZpbmVkLCBpbiBhZGRpdGlvbiB0byByYW5nZSBjaGVja2luZywgd2UgYWxzbwotICB2ZXJpZnkgZm9vdGVyIGZpZWxkcyBvZiBpbnVzZSBjaHVua3MsIHdoaWNoIGNhbiBiZSB1c2VkIGd1YXJhbnRlZQotICB0aGF0IHRoZSBtc3RhdGUgY29udHJvbGxpbmcgbWFsbG9jL2ZyZWUgaXMgaW50YWN0LiAgVGhpcyBpcyBhCi0gIHN0cmVhbWxpbmVkIHZlcnNpb24gb2YgdGhlIGFwcHJvYWNoIGRlc2NyaWJlZCBieSBXaWxsaWFtIFJvYmVydHNvbgotICBldCBhbCBpbiAiUnVuLXRpbWUgRGV0ZWN0aW9uIG9mIEhlYXAtYmFzZWQgT3ZlcmZsb3dzIiBMSVNBJzAzCi0gIGh0dHA6Ly93d3cudXNlbml4Lm9yZy9ldmVudHMvbGlzYTAzL3RlY2gvcm9iZXJ0c29uLmh0bWwgVGhlIGZvb3RlcgotICBvZiBhbiBpbnVzZSBjaHVuayBob2xkcyB0aGUgeG9yIG9mIGl0cyBtc3RhdGUgYW5kIGEgcmFuZG9tIHNlZWQsCi0gIHRoYXQgaXMgY2hlY2tlZCB1cG9uIGNhbGxzIHRvIGZyZWUoKSBhbmQgcmVhbGxvYygpLiAgVGhpcyBpcwotICAocHJvYmFibGlzdGljYWxseSkgdW5ndWVzc2FibGUgZnJvbSBvdXRzaWRlIHRoZSBwcm9ncmFtLCBidXQgY2FuIGJlCi0gIGNvbXB1dGVkIGJ5IGFueSBjb2RlIHN1Y2Nlc3NmdWxseSBtYWxsb2MnaW5nIGFueSBjaHVuaywgc28gZG9lcyBub3QKLSAgaXRzZWxmIHByb3ZpZGUgcHJvdGVjdGlvbiBhZ2FpbnN0IGNvZGUgdGhhdCBoYXMgYWxyZWFkeSBicm9rZW4KLSAgc2VjdXJpdHkgdGhyb3VnaCBzb21lIG90aGVyIG1lYW5zLiAgVW5saWtlIFJvYmVydHNvbiBldCBhbCwgd2UKLSAgYWx3YXlzIGR5bmFtaWNhbGx5IGNoZWNrIGFkZHJlc3NlcyBvZiBhbGwgb2Zmc2V0IGNodW5rcyAocHJldmlvdXMsCi0gIG5leHQsIGV0YykuIFRoaXMgdHVybnMgb3V0IHRvIGJlIGNoZWFwZXIgdGhhbiByZWx5aW5nIG9uIGhhc2hlcy4KLSovCi0KLSNpZiAhSU5TRUNVUkUKLS8qIENoZWNrIGlmIGFkZHJlc3MgYSBpcyBhdCBsZWFzdCBhcyBoaWdoIGFzIGFueSBmcm9tIE1PUkVDT1JFIG9yIE1NQVAgKi8KLSNkZWZpbmUgb2tfYWRkcmVzcyhNLCBhKSAoKGNoYXIqKShhKSA+PSAoTSktPmxlYXN0X2FkZHIpCi0vKiBDaGVjayBpZiBhZGRyZXNzIG9mIG5leHQgY2h1bmsgbiBpcyBoaWdoZXIgdGhhbiBiYXNlIGNodW5rIHAgKi8KLSNkZWZpbmUgb2tfbmV4dChwLCBuKSAgICAoKGNoYXIqKShwKSA8IChjaGFyKikobikpCi0vKiBDaGVjayBpZiBwIGhhcyBpdHMgY2ludXNlIGJpdCBvbiAqLwotI2RlZmluZSBva19jaW51c2UocCkgICAgIGNpbnVzZShwKQotLyogQ2hlY2sgaWYgcCBoYXMgaXRzIHBpbnVzZSBiaXQgb24gKi8KLSNkZWZpbmUgb2tfcGludXNlKHApICAgICBwaW51c2UocCkKLQotI2Vsc2UgLyogIUlOU0VDVVJFICovCi0jZGVmaW5lIG9rX2FkZHJlc3MoTSwgYSkgKDEpCi0jZGVmaW5lIG9rX25leHQoYiwgbikgICAgKDEpCi0jZGVmaW5lIG9rX2NpbnVzZShwKSAgICAgKDEpCi0jZGVmaW5lIG9rX3BpbnVzZShwKSAgICAgKDEpCi0jZW5kaWYgLyogIUlOU0VDVVJFICovCi0KLSNpZiAoRk9PVEVSUyAmJiAhSU5TRUNVUkUpCi0vKiBDaGVjayBpZiAoYWxsZWdlZCkgbXN0YXRlIG0gaGFzIGV4cGVjdGVkIG1hZ2ljIGZpZWxkICovCi0jZGVmaW5lIG9rX21hZ2ljKE0pICAgICAgKChNKS0+bWFnaWMgPT0gbXBhcmFtcy5tYWdpYykKLSNlbHNlICAvKiAoRk9PVEVSUyAmJiAhSU5TRUNVUkUpICovCi0jZGVmaW5lIG9rX21hZ2ljKE0pICAgICAgKDEpCi0jZW5kaWYgLyogKEZPT1RFUlMgJiYgIUlOU0VDVVJFKSAqLwotCi0KLS8qIEluIGdjYywgdXNlIF9fYnVpbHRpbl9leHBlY3QgdG8gbWluaW1pemUgaW1wYWN0IG9mIGNoZWNrcyAqLwotI2lmICFJTlNFQ1VSRQotI2lmIGRlZmluZWQoX19HTlVDX18pICYmIF9fR05VQ19fID49IDMKLSNkZWZpbmUgUlRDSEVDSyhlKSAgX19idWlsdGluX2V4cGVjdChlLCAxKQotI2Vsc2UgLyogR05VQyAqLwotI2RlZmluZSBSVENIRUNLKGUpICAoZSkKLSNlbmRpZiAvKiBHTlVDICovCi0jZWxzZSAvKiAhSU5TRUNVUkUgKi8KLSNkZWZpbmUgUlRDSEVDSyhlKSAgKDEpCi0jZW5kaWYgLyogIUlOU0VDVVJFICovCi0KLS8qIG1hY3JvcyB0byBzZXQgdXAgaW51c2UgY2h1bmtzIHdpdGggb3Igd2l0aG91dCBmb290ZXJzICovCi0KLSNpZiAhRk9PVEVSUwotCi0jZGVmaW5lIG1hcmtfaW51c2VfZm9vdChNLHAscykKLQotLyogU2V0IGNpbnVzZSBiaXQgYW5kIHBpbnVzZSBiaXQgb2YgbmV4dCBjaHVuayAqLwotI2RlZmluZSBzZXRfaW51c2UoTSxwLHMpXAotICAoKHApLT5oZWFkID0gKCgocCktPmhlYWQgJiBQSU5VU0VfQklUKXxzfENJTlVTRV9CSVQpLFwKLSAgKChtY2h1bmtwdHIpKCgoY2hhciopKHApKSArIChzKSkpLT5oZWFkIHw9IFBJTlVTRV9CSVQpCi0KLS8qIFNldCBjaW51c2UgYW5kIHBpbnVzZSBvZiB0aGlzIGNodW5rIGFuZCBwaW51c2Ugb2YgbmV4dCBjaHVuayAqLwotI2RlZmluZSBzZXRfaW51c2VfYW5kX3BpbnVzZShNLHAscylcCi0gICgocCktPmhlYWQgPSAoc3xQSU5VU0VfQklUfENJTlVTRV9CSVQpLFwKLSAgKChtY2h1bmtwdHIpKCgoY2hhciopKHApKSArIChzKSkpLT5oZWFkIHw9IFBJTlVTRV9CSVQpCi0KLS8qIFNldCBzaXplLCBjaW51c2UgYW5kIHBpbnVzZSBiaXQgb2YgdGhpcyBjaHVuayAqLwotI2RlZmluZSBzZXRfc2l6ZV9hbmRfcGludXNlX29mX2ludXNlX2NodW5rKE0sIHAsIHMpXAotICAoKHApLT5oZWFkID0gKHN8UElOVVNFX0JJVHxDSU5VU0VfQklUKSkKLQotI2Vsc2UgLyogRk9PVEVSUyAqLwotCi0vKiBTZXQgZm9vdCBvZiBpbnVzZSBjaHVuayB0byBiZSB4b3Igb2YgbXN0YXRlIGFuZCBzZWVkICovCi0jZGVmaW5lIG1hcmtfaW51c2VfZm9vdChNLHAscylcCi0gICgoKG1jaHVua3B0cikoKGNoYXIqKShwKSArIChzKSkpLT5wcmV2X2Zvb3QgPSAoKHNpemVfdCkoTSkgXiBtcGFyYW1zLm1hZ2ljKSkKLQotI2RlZmluZSBnZXRfbXN0YXRlX2ZvcihwKVwKLSAgKChtc3RhdGUpKCgobWNodW5rcHRyKSgoY2hhciopKHApICtcCi0gICAgKGNodW5rc2l6ZShwKSkpKS0+cHJldl9mb290IF4gbXBhcmFtcy5tYWdpYykpCi0KLSNkZWZpbmUgc2V0X2ludXNlKE0scCxzKVwKLSAgKChwKS0+aGVhZCA9ICgoKHApLT5oZWFkICYgUElOVVNFX0JJVCl8c3xDSU5VU0VfQklUKSxcCi0gICgoKG1jaHVua3B0cikoKChjaGFyKikocCkpICsgKHMpKSktPmhlYWQgfD0gUElOVVNFX0JJVCksIFwKLSAgbWFya19pbnVzZV9mb290KE0scCxzKSkKLQotI2RlZmluZSBzZXRfaW51c2VfYW5kX3BpbnVzZShNLHAscylcCi0gICgocCktPmhlYWQgPSAoc3xQSU5VU0VfQklUfENJTlVTRV9CSVQpLFwKLSAgKCgobWNodW5rcHRyKSgoKGNoYXIqKShwKSkgKyAocykpKS0+aGVhZCB8PSBQSU5VU0VfQklUKSxcCi0gbWFya19pbnVzZV9mb290KE0scCxzKSkKLQotI2RlZmluZSBzZXRfc2l6ZV9hbmRfcGludXNlX29mX2ludXNlX2NodW5rKE0sIHAsIHMpXAotICAoKHApLT5oZWFkID0gKHN8UElOVVNFX0JJVHxDSU5VU0VfQklUKSxcCi0gIG1hcmtfaW51c2VfZm9vdChNLCBwLCBzKSkKLQotI2VuZGlmIC8qICFGT09URVJTICovCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gc2V0dGluZyBtcGFyYW1zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLS8qIEluaXRpYWxpemUgbXBhcmFtcyAqLwotc3RhdGljIGludCBpbml0X21wYXJhbXModm9pZCkgewotICBpZiAobXBhcmFtcy5wYWdlX3NpemUgPT0gMCkgewotICAgIHNpemVfdCBzOwotCi0gICAgbXBhcmFtcy5tbWFwX3RocmVzaG9sZCA9IERFRkFVTFRfTU1BUF9USFJFU0hPTEQ7Ci0gICAgbXBhcmFtcy50cmltX3RocmVzaG9sZCA9IERFRkFVTFRfVFJJTV9USFJFU0hPTEQ7Ci0jaWYgTU9SRUNPUkVfQ09OVElHVU9VUwotICAgIG1wYXJhbXMuZGVmYXVsdF9tZmxhZ3MgPSBVU0VfTE9DS19CSVR8VVNFX01NQVBfQklUOwotI2Vsc2UgIC8qIE1PUkVDT1JFX0NPTlRJR1VPVVMgKi8KLSAgICBtcGFyYW1zLmRlZmF1bHRfbWZsYWdzID0gVVNFX0xPQ0tfQklUfFVTRV9NTUFQX0JJVHxVU0VfTk9OQ09OVElHVU9VU19CSVQ7Ci0jZW5kaWYgLyogTU9SRUNPUkVfQ09OVElHVU9VUyAqLwotCi0jaWYgKEZPT1RFUlMgJiYgIUlOU0VDVVJFKQotICAgIHsKLSNpZiBVU0VfREVWX1JBTkRPTQotICAgICAgaW50IGZkOwotICAgICAgdW5zaWduZWQgY2hhciBidWZbc2l6ZW9mKHNpemVfdCldOwotICAgICAgLyogVHJ5IHRvIHVzZSAvZGV2L3VyYW5kb20sIGVsc2UgZmFsbCBiYWNrIG9uIHVzaW5nIHRpbWUgKi8KLSAgICAgIGlmICgoZmQgPSBvcGVuKCIvZGV2L3VyYW5kb20iLCBPX1JET05MWSkpID49IDAgJiYKLSAgICAgICAgICByZWFkKGZkLCBidWYsIHNpemVvZihidWYpKSA9PSBzaXplb2YoYnVmKSkgewotICAgICAgICBzID0gKigoc2l6ZV90ICopIGJ1Zik7Ci0gICAgICAgIGNsb3NlKGZkKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSNlbmRpZiAvKiBVU0VfREVWX1JBTkRPTSAqLwotICAgICAgICBzID0gKHNpemVfdCkodGltZSgwKSBeIChzaXplX3QpMHg1NTU1NTU1NVUpOwotCi0gICAgICBzIHw9IChzaXplX3QpOFU7ICAgIC8qIGVuc3VyZSBub256ZXJvICovCi0gICAgICBzICY9IH4oc2l6ZV90KTdVOyAgIC8qIGltcHJvdmUgY2hhbmNlcyBvZiBmYXVsdCBmb3IgYmFkIHZhbHVlcyAqLwotCi0gICAgfQotI2Vsc2UgLyogKEZPT1RFUlMgJiYgIUlOU0VDVVJFKSAqLwotICAgIHMgPSAoc2l6ZV90KTB4NTg1ODU4NThVOwotI2VuZGlmIC8qIChGT09URVJTICYmICFJTlNFQ1VSRSkgKi8KLSAgICBBQ1FVSVJFX01BR0lDX0lOSVRfTE9DSygpOwotICAgIGlmIChtcGFyYW1zLm1hZ2ljID09IDApIHsKLSAgICAgIG1wYXJhbXMubWFnaWMgPSBzOwotICAgICAgLyogU2V0IHVwIGxvY2sgZm9yIG1haW4gbWFsbG9jIGFyZWEgKi8KLSAgICAgIElOSVRJQUxfTE9DSygmZ20tPm11dGV4KTsKLSAgICAgIGdtLT5tZmxhZ3MgPSBtcGFyYW1zLmRlZmF1bHRfbWZsYWdzOwotICAgIH0KLSAgICBSRUxFQVNFX01BR0lDX0lOSVRfTE9DSygpOwotCi0jaWZuZGVmIFdJTjMyCi0gICAgbXBhcmFtcy5wYWdlX3NpemUgPSBtYWxsb2NfZ2V0cGFnZXNpemU7Ci0gICAgbXBhcmFtcy5ncmFudWxhcml0eSA9ICgoREVGQVVMVF9HUkFOVUxBUklUWSAhPSAwKT8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIERFRkFVTFRfR1JBTlVMQVJJVFkgOiBtcGFyYW1zLnBhZ2Vfc2l6ZSk7Ci0jZWxzZSAvKiBXSU4zMiAqLwotICAgIHsKLSAgICAgIFNZU1RFTV9JTkZPIHN5c3RlbV9pbmZvOwotICAgICAgR2V0U3lzdGVtSW5mbygmc3lzdGVtX2luZm8pOwotICAgICAgbXBhcmFtcy5wYWdlX3NpemUgPSBzeXN0ZW1faW5mby5kd1BhZ2VTaXplOwotICAgICAgbXBhcmFtcy5ncmFudWxhcml0eSA9IHN5c3RlbV9pbmZvLmR3QWxsb2NhdGlvbkdyYW51bGFyaXR5OwotICAgIH0KLSNlbmRpZiAvKiBXSU4zMiAqLwotCi0gICAgLyogU2FuaXR5LWNoZWNrIGNvbmZpZ3VyYXRpb246Ci0gICAgICAgc2l6ZV90IG11c3QgYmUgdW5zaWduZWQgYW5kIGFzIHdpZGUgYXMgcG9pbnRlciB0eXBlLgotICAgICAgIGludHMgbXVzdCBiZSBhdCBsZWFzdCA0IGJ5dGVzLgotICAgICAgIGFsaWdubWVudCBtdXN0IGJlIGF0IGxlYXN0IDguCi0gICAgICAgQWxpZ25tZW50LCBtaW4gY2h1bmsgc2l6ZSwgYW5kIHBhZ2Ugc2l6ZSBtdXN0IGFsbCBiZSBwb3dlcnMgb2YgMi4KLSAgICAqLwotICAgIGlmICgoc2l6ZW9mKHNpemVfdCkgIT0gc2l6ZW9mKGNoYXIqKSkgfHwKLSAgICAgICAgKE1BWF9TSVpFX1QgPCBNSU5fQ0hVTktfU0laRSkgIHx8Ci0gICAgICAgIChzaXplb2YoaW50KSA8IDQpICB8fAotICAgICAgICAoTUFMTE9DX0FMSUdOTUVOVCA8IChzaXplX3QpOFUpIHx8Ci0gICAgICAgICgoTUFMTE9DX0FMSUdOTUVOVCAgICAmIChNQUxMT0NfQUxJR05NRU5ULVNJWkVfVF9PTkUpKSAgICAhPSAwKSB8fAotICAgICAgICAoKE1DSFVOS19TSVpFICAgICAgICAgJiAoTUNIVU5LX1NJWkUtU0laRV9UX09ORSkpICAgICAgICAgIT0gMCkgfHwKLSAgICAgICAgKChtcGFyYW1zLmdyYW51bGFyaXR5ICYgKG1wYXJhbXMuZ3JhbnVsYXJpdHktU0laRV9UX09ORSkpICE9IDApIHx8Ci0gICAgICAgICgobXBhcmFtcy5wYWdlX3NpemUgICAmIChtcGFyYW1zLnBhZ2Vfc2l6ZS1TSVpFX1RfT05FKSkgICAhPSAwKSkKLSAgICAgIEFCT1JUOwotICB9Ci0gIHJldHVybiAwOwotfQotCi0vKiBzdXBwb3J0IGZvciBtYWxsb3B0ICovCi1zdGF0aWMgaW50IGNoYW5nZV9tcGFyYW0oaW50IHBhcmFtX251bWJlciwgaW50IHZhbHVlKSB7Ci0gIHNpemVfdCB2YWwgPSAoc2l6ZV90KXZhbHVlOwotICBpbml0X21wYXJhbXMoKTsKLSAgc3dpdGNoKHBhcmFtX251bWJlcikgewotICBjYXNlIE1fVFJJTV9USFJFU0hPTEQ6Ci0gICAgbXBhcmFtcy50cmltX3RocmVzaG9sZCA9IHZhbDsKLSAgICByZXR1cm4gMTsKLSAgY2FzZSBNX0dSQU5VTEFSSVRZOgotICAgIGlmICh2YWwgPj0gbXBhcmFtcy5wYWdlX3NpemUgJiYgKCh2YWwgJiAodmFsLTEpKSA9PSAwKSkgewotICAgICAgbXBhcmFtcy5ncmFudWxhcml0eSA9IHZhbDsKLSAgICAgIHJldHVybiAxOwotICAgIH0KLSAgICBlbHNlCi0gICAgICByZXR1cm4gMDsKLSAgY2FzZSBNX01NQVBfVEhSRVNIT0xEOgotICAgIG1wYXJhbXMubW1hcF90aHJlc2hvbGQgPSB2YWw7Ci0gICAgcmV0dXJuIDE7Ci0gIGRlZmF1bHQ6Ci0gICAgcmV0dXJuIDA7Ci0gIH0KLX0KLQotI2lmIERFQlVHCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIERlYnVnZ2luZyBTdXBwb3J0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0vKiBDaGVjayBwcm9wZXJ0aWVzIG9mIGFueSBjaHVuaywgd2hldGhlciBmcmVlLCBpbnVzZSwgbW1hcHBlZCBldGMgICovCi1zdGF0aWMgdm9pZCBkb19jaGVja19hbnlfY2h1bmsobXN0YXRlIG0sIG1jaHVua3B0ciBwKSB7Ci0gIGFzc2VydCgoaXNfYWxpZ25lZChjaHVuazJtZW0ocCkpKSB8fCAocC0+aGVhZCA9PSBGRU5DRVBPU1RfSEVBRCkpOwotICBhc3NlcnQob2tfYWRkcmVzcyhtLCBwKSk7Ci19Ci0KLS8qIENoZWNrIHByb3BlcnRpZXMgb2YgdG9wIGNodW5rICovCi1zdGF0aWMgdm9pZCBkb19jaGVja190b3BfY2h1bmsobXN0YXRlIG0sIG1jaHVua3B0ciBwKSB7Ci0gIG1zZWdtZW50cHRyIHNwID0gc2VnbWVudF9ob2xkaW5nKG0sIChjaGFyKilwKTsKLSAgc2l6ZV90ICBzeiA9IGNodW5rc2l6ZShwKTsKLSAgYXNzZXJ0KHNwICE9IDApOwotICBhc3NlcnQoKGlzX2FsaWduZWQoY2h1bmsybWVtKHApKSkgfHwgKHAtPmhlYWQgPT0gRkVOQ0VQT1NUX0hFQUQpKTsKLSAgYXNzZXJ0KG9rX2FkZHJlc3MobSwgcCkpOwotICBhc3NlcnQoc3ogPT0gbS0+dG9wc2l6ZSk7Ci0gIGFzc2VydChzeiA+IDApOwotICBhc3NlcnQoc3ogPT0gKChzcC0+YmFzZSArIHNwLT5zaXplKSAtIChjaGFyKilwKSAtIFRPUF9GT09UX1NJWkUpOwotICBhc3NlcnQocGludXNlKHApKTsKLSAgYXNzZXJ0KCFuZXh0X3BpbnVzZShwKSk7Ci19Ci0KLS8qIENoZWNrIHByb3BlcnRpZXMgb2YgKGludXNlKSBtbWFwcGVkIGNodW5rcyAqLwotc3RhdGljIHZvaWQgZG9fY2hlY2tfbW1hcHBlZF9jaHVuayhtc3RhdGUgbSwgbWNodW5rcHRyIHApIHsKLSAgc2l6ZV90ICBzeiA9IGNodW5rc2l6ZShwKTsKLSAgc2l6ZV90IGxlbiA9IChzeiArIChwLT5wcmV2X2Zvb3QgJiB+SVNfTU1BUFBFRF9CSVQpICsgTU1BUF9GT09UX1BBRCk7Ci0gIGFzc2VydChpc19tbWFwcGVkKHApKTsKLSAgYXNzZXJ0KHVzZV9tbWFwKG0pKTsKLSAgYXNzZXJ0KChpc19hbGlnbmVkKGNodW5rMm1lbShwKSkpIHx8IChwLT5oZWFkID09IEZFTkNFUE9TVF9IRUFEKSk7Ci0gIGFzc2VydChva19hZGRyZXNzKG0sIHApKTsKLSAgYXNzZXJ0KCFpc19zbWFsbChzeikpOwotICBhc3NlcnQoKGxlbiAmIChtcGFyYW1zLnBhZ2Vfc2l6ZS1TSVpFX1RfT05FKSkgPT0gMCk7Ci0gIGFzc2VydChjaHVua19wbHVzX29mZnNldChwLCBzeiktPmhlYWQgPT0gRkVOQ0VQT1NUX0hFQUQpOwotICBhc3NlcnQoY2h1bmtfcGx1c19vZmZzZXQocCwgc3orU0laRV9UX1NJWkUpLT5oZWFkID09IDApOwotfQotCi0vKiBDaGVjayBwcm9wZXJ0aWVzIG9mIGludXNlIGNodW5rcyAqLwotc3RhdGljIHZvaWQgZG9fY2hlY2tfaW51c2VfY2h1bmsobXN0YXRlIG0sIG1jaHVua3B0ciBwKSB7Ci0gIGRvX2NoZWNrX2FueV9jaHVuayhtLCBwKTsKLSAgYXNzZXJ0KGNpbnVzZShwKSk7Ci0gIGFzc2VydChuZXh0X3BpbnVzZShwKSk7Ci0gIC8qIElmIG5vdCBwaW51c2UgYW5kIG5vdCBtbWFwcGVkLCBwcmV2aW91cyBjaHVuayBoYXMgT0sgb2Zmc2V0ICovCi0gIGFzc2VydChpc19tbWFwcGVkKHApIHx8IHBpbnVzZShwKSB8fCBuZXh0X2NodW5rKHByZXZfY2h1bmsocCkpID09IHApOwotICBpZiAoaXNfbW1hcHBlZChwKSkKLSAgICBkb19jaGVja19tbWFwcGVkX2NodW5rKG0sIHApOwotfQotCi0vKiBDaGVjayBwcm9wZXJ0aWVzIG9mIGZyZWUgY2h1bmtzICovCi1zdGF0aWMgdm9pZCBkb19jaGVja19mcmVlX2NodW5rKG1zdGF0ZSBtLCBtY2h1bmtwdHIgcCkgewotICBzaXplX3Qgc3ogPSBwLT5oZWFkICYgfihQSU5VU0VfQklUfENJTlVTRV9CSVQpOwotICBtY2h1bmtwdHIgbmV4dCA9IGNodW5rX3BsdXNfb2Zmc2V0KHAsIHN6KTsKLSAgZG9fY2hlY2tfYW55X2NodW5rKG0sIHApOwotICBhc3NlcnQoIWNpbnVzZShwKSk7Ci0gIGFzc2VydCghbmV4dF9waW51c2UocCkpOwotICBhc3NlcnQgKCFpc19tbWFwcGVkKHApKTsKLSAgaWYgKHAgIT0gbS0+ZHYgJiYgcCAhPSBtLT50b3ApIHsKLSAgICBpZiAoc3ogPj0gTUlOX0NIVU5LX1NJWkUpIHsKLSAgICAgIGFzc2VydCgoc3ogJiBDSFVOS19BTElHTl9NQVNLKSA9PSAwKTsKLSAgICAgIGFzc2VydChpc19hbGlnbmVkKGNodW5rMm1lbShwKSkpOwotICAgICAgYXNzZXJ0KG5leHQtPnByZXZfZm9vdCA9PSBzeik7Ci0gICAgICBhc3NlcnQocGludXNlKHApKTsKLSAgICAgIGFzc2VydCAobmV4dCA9PSBtLT50b3AgfHwgY2ludXNlKG5leHQpKTsKLSAgICAgIGFzc2VydChwLT5mZC0+YmsgPT0gcCk7Ci0gICAgICBhc3NlcnQocC0+YmstPmZkID09IHApOwotICAgIH0KLSAgICBlbHNlICAvKiBtYXJrZXJzIGFyZSBhbHdheXMgb2Ygc2l6ZSBTSVpFX1RfU0laRSAqLwotICAgICAgYXNzZXJ0KHN6ID09IFNJWkVfVF9TSVpFKTsKLSAgfQotfQotCi0vKiBDaGVjayBwcm9wZXJ0aWVzIG9mIG1hbGxvY2VkIGNodW5rcyBhdCB0aGUgcG9pbnQgdGhleSBhcmUgbWFsbG9jZWQgKi8KLXN0YXRpYyB2b2lkIGRvX2NoZWNrX21hbGxvY2VkX2NodW5rKG1zdGF0ZSBtLCB2b2lkKiBtZW0sIHNpemVfdCBzKSB7Ci0gIGlmIChtZW0gIT0gMCkgewotICAgIG1jaHVua3B0ciBwID0gbWVtMmNodW5rKG1lbSk7Ci0gICAgc2l6ZV90IHN6ID0gcC0+aGVhZCAmIH4oUElOVVNFX0JJVHxDSU5VU0VfQklUKTsKLSAgICBkb19jaGVja19pbnVzZV9jaHVuayhtLCBwKTsKLSAgICBhc3NlcnQoKHN6ICYgQ0hVTktfQUxJR05fTUFTSykgPT0gMCk7Ci0gICAgYXNzZXJ0KHN6ID49IE1JTl9DSFVOS19TSVpFKTsKLSAgICBhc3NlcnQoc3ogPj0gcyk7Ci0gICAgLyogdW5sZXNzIG1tYXBwZWQsIHNpemUgaXMgbGVzcyB0aGFuIE1JTl9DSFVOS19TSVpFIG1vcmUgdGhhbiByZXF1ZXN0ICovCi0gICAgYXNzZXJ0KGlzX21tYXBwZWQocCkgfHwgc3ogPCAocyArIE1JTl9DSFVOS19TSVpFKSk7Ci0gIH0KLX0KLQotLyogQ2hlY2sgYSB0cmVlIGFuZCBpdHMgc3VidHJlZXMuICAqLwotc3RhdGljIHZvaWQgZG9fY2hlY2tfdHJlZShtc3RhdGUgbSwgdGNodW5rcHRyIHQpIHsKLSAgdGNodW5rcHRyIGhlYWQgPSAwOwotICB0Y2h1bmtwdHIgdSA9IHQ7Ci0gIGJpbmRleF90IHRpbmRleCA9IHQtPmluZGV4OwotICBzaXplX3QgdHNpemUgPSBjaHVua3NpemUodCk7Ci0gIGJpbmRleF90IGlkeDsKLSAgY29tcHV0ZV90cmVlX2luZGV4KHRzaXplLCBpZHgpOwotICBhc3NlcnQodGluZGV4ID09IGlkeCk7Ci0gIGFzc2VydCh0c2l6ZSA+PSBNSU5fTEFSR0VfU0laRSk7Ci0gIGFzc2VydCh0c2l6ZSA+PSBtaW5zaXplX2Zvcl90cmVlX2luZGV4KGlkeCkpOwotICBhc3NlcnQoKGlkeCA9PSBOVFJFRUJJTlMtMSkgfHwgKHRzaXplIDwgbWluc2l6ZV9mb3JfdHJlZV9pbmRleCgoaWR4KzEpKSkpOwotCi0gIGRvIHsgLyogdHJhdmVyc2UgdGhyb3VnaCBjaGFpbiBvZiBzYW1lLXNpemVkIG5vZGVzICovCi0gICAgZG9fY2hlY2tfYW55X2NodW5rKG0sICgobWNodW5rcHRyKXUpKTsKLSAgICBhc3NlcnQodS0+aW5kZXggPT0gdGluZGV4KTsKLSAgICBhc3NlcnQoY2h1bmtzaXplKHUpID09IHRzaXplKTsKLSAgICBhc3NlcnQoIWNpbnVzZSh1KSk7Ci0gICAgYXNzZXJ0KCFuZXh0X3BpbnVzZSh1KSk7Ci0gICAgYXNzZXJ0KHUtPmZkLT5iayA9PSB1KTsKLSAgICBhc3NlcnQodS0+YmstPmZkID09IHUpOwotICAgIGlmICh1LT5wYXJlbnQgPT0gMCkgewotICAgICAgYXNzZXJ0KHUtPmNoaWxkWzBdID09IDApOwotICAgICAgYXNzZXJ0KHUtPmNoaWxkWzFdID09IDApOwotICAgIH0KLSAgICBlbHNlIHsKLSAgICAgIGFzc2VydChoZWFkID09IDApOyAvKiBvbmx5IG9uZSBub2RlIG9uIGNoYWluIGhhcyBwYXJlbnQgKi8KLSAgICAgIGhlYWQgPSB1OwotICAgICAgYXNzZXJ0KHUtPnBhcmVudCAhPSB1KTsKLSAgICAgIGFzc2VydCAodS0+cGFyZW50LT5jaGlsZFswXSA9PSB1IHx8Ci0gICAgICAgICAgICAgIHUtPnBhcmVudC0+Y2hpbGRbMV0gPT0gdSB8fAotICAgICAgICAgICAgICAqKCh0YmlucHRyKikodS0+cGFyZW50KSkgPT0gdSk7Ci0gICAgICBpZiAodS0+Y2hpbGRbMF0gIT0gMCkgewotICAgICAgICBhc3NlcnQodS0+Y2hpbGRbMF0tPnBhcmVudCA9PSB1KTsKLSAgICAgICAgYXNzZXJ0KHUtPmNoaWxkWzBdICE9IHUpOwotICAgICAgICBkb19jaGVja190cmVlKG0sIHUtPmNoaWxkWzBdKTsKLSAgICAgIH0KLSAgICAgIGlmICh1LT5jaGlsZFsxXSAhPSAwKSB7Ci0gICAgICAgIGFzc2VydCh1LT5jaGlsZFsxXS0+cGFyZW50ID09IHUpOwotICAgICAgICBhc3NlcnQodS0+Y2hpbGRbMV0gIT0gdSk7Ci0gICAgICAgIGRvX2NoZWNrX3RyZWUobSwgdS0+Y2hpbGRbMV0pOwotICAgICAgfQotICAgICAgaWYgKHUtPmNoaWxkWzBdICE9IDAgJiYgdS0+Y2hpbGRbMV0gIT0gMCkgewotICAgICAgICBhc3NlcnQoY2h1bmtzaXplKHUtPmNoaWxkWzBdKSA8IGNodW5rc2l6ZSh1LT5jaGlsZFsxXSkpOwotICAgICAgfQotICAgIH0KLSAgICB1ID0gdS0+ZmQ7Ci0gIH0gd2hpbGUgKHUgIT0gdCk7Ci0gIGFzc2VydChoZWFkICE9IDApOwotfQotCi0vKiAgQ2hlY2sgYWxsIHRoZSBjaHVua3MgaW4gYSB0cmVlYmluLiAgKi8KLXN0YXRpYyB2b2lkIGRvX2NoZWNrX3RyZWViaW4obXN0YXRlIG0sIGJpbmRleF90IGkpIHsKLSAgdGJpbnB0ciogdGIgPSB0cmVlYmluX2F0KG0sIGkpOwotICB0Y2h1bmtwdHIgdCA9ICp0YjsKLSAgaW50IGVtcHR5ID0gKG0tPnRyZWVtYXAgJiAoMVUgPDwgaSkpID09IDA7Ci0gIGlmICh0ID09IDApCi0gICAgYXNzZXJ0KGVtcHR5KTsKLSAgaWYgKCFlbXB0eSkKLSAgICBkb19jaGVja190cmVlKG0sIHQpOwotfQotCi0vKiAgQ2hlY2sgYWxsIHRoZSBjaHVua3MgaW4gYSBzbWFsbGJpbi4gICovCi1zdGF0aWMgdm9pZCBkb19jaGVja19zbWFsbGJpbihtc3RhdGUgbSwgYmluZGV4X3QgaSkgewotICBzYmlucHRyIGIgPSBzbWFsbGJpbl9hdChtLCBpKTsKLSAgbWNodW5rcHRyIHAgPSBiLT5iazsKLSAgdW5zaWduZWQgaW50IGVtcHR5ID0gKG0tPnNtYWxsbWFwICYgKDFVIDw8IGkpKSA9PSAwOwotICBpZiAocCA9PSBiKQotICAgIGFzc2VydChlbXB0eSk7Ci0gIGlmICghZW1wdHkpIHsKLSAgICBmb3IgKDsgcCAhPSBiOyBwID0gcC0+YmspIHsKLSAgICAgIHNpemVfdCBzaXplID0gY2h1bmtzaXplKHApOwotICAgICAgbWNodW5rcHRyIHE7Ci0gICAgICAvKiBlYWNoIGNodW5rIGNsYWltcyB0byBiZSBmcmVlICovCi0gICAgICBkb19jaGVja19mcmVlX2NodW5rKG0sIHApOwotICAgICAgLyogY2h1bmsgYmVsb25ncyBpbiBiaW4gKi8KLSAgICAgIGFzc2VydChzbWFsbF9pbmRleChzaXplKSA9PSBpKTsKLSAgICAgIGFzc2VydChwLT5iayA9PSBiIHx8IGNodW5rc2l6ZShwLT5iaykgPT0gY2h1bmtzaXplKHApKTsKLSAgICAgIC8qIGNodW5rIGlzIGZvbGxvd2VkIGJ5IGFuIGludXNlIGNodW5rICovCi0gICAgICBxID0gbmV4dF9jaHVuayhwKTsKLSAgICAgIGlmIChxLT5oZWFkICE9IEZFTkNFUE9TVF9IRUFEKQotICAgICAgICBkb19jaGVja19pbnVzZV9jaHVuayhtLCBxKTsKLSAgICB9Ci0gIH0KLX0KLQotLyogRmluZCB4IGluIGEgYmluLiBVc2VkIGluIG90aGVyIGNoZWNrIGZ1bmN0aW9ucy4gKi8KLXN0YXRpYyBpbnQgYmluX2ZpbmQobXN0YXRlIG0sIG1jaHVua3B0ciB4KSB7Ci0gIHNpemVfdCBzaXplID0gY2h1bmtzaXplKHgpOwotICBpZiAoaXNfc21hbGwoc2l6ZSkpIHsKLSAgICBiaW5kZXhfdCBzaWR4ID0gc21hbGxfaW5kZXgoc2l6ZSk7Ci0gICAgc2JpbnB0ciBiID0gc21hbGxiaW5fYXQobSwgc2lkeCk7Ci0gICAgaWYgKHNtYWxsbWFwX2lzX21hcmtlZChtLCBzaWR4KSkgewotICAgICAgbWNodW5rcHRyIHAgPSBiOwotICAgICAgZG8gewotICAgICAgICBpZiAocCA9PSB4KQotICAgICAgICAgIHJldHVybiAxOwotICAgICAgfSB3aGlsZSAoKHAgPSBwLT5mZCkgIT0gYik7Ci0gICAgfQotICB9Ci0gIGVsc2UgewotICAgIGJpbmRleF90IHRpZHg7Ci0gICAgY29tcHV0ZV90cmVlX2luZGV4KHNpemUsIHRpZHgpOwotICAgIGlmICh0cmVlbWFwX2lzX21hcmtlZChtLCB0aWR4KSkgewotICAgICAgdGNodW5rcHRyIHQgPSAqdHJlZWJpbl9hdChtLCB0aWR4KTsKLSAgICAgIHNpemVfdCBzaXplYml0cyA9IHNpemUgPDwgbGVmdHNoaWZ0X2Zvcl90cmVlX2luZGV4KHRpZHgpOwotICAgICAgd2hpbGUgKHQgIT0gMCAmJiBjaHVua3NpemUodCkgIT0gc2l6ZSkgewotICAgICAgICB0ID0gdC0+Y2hpbGRbKHNpemViaXRzID4+IChTSVpFX1RfQklUU0laRS1TSVpFX1RfT05FKSkgJiAxXTsKLSAgICAgICAgc2l6ZWJpdHMgPDw9IDE7Ci0gICAgICB9Ci0gICAgICBpZiAodCAhPSAwKSB7Ci0gICAgICAgIHRjaHVua3B0ciB1ID0gdDsKLSAgICAgICAgZG8gewotICAgICAgICAgIGlmICh1ID09ICh0Y2h1bmtwdHIpeCkKLSAgICAgICAgICAgIHJldHVybiAxOwotICAgICAgICB9IHdoaWxlICgodSA9IHUtPmZkKSAhPSB0KTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLSAgcmV0dXJuIDA7Ci19Ci0KLS8qIFRyYXZlcnNlIGVhY2ggY2h1bmsgYW5kIGNoZWNrIGl0OyByZXR1cm4gdG90YWwgKi8KLXN0YXRpYyBzaXplX3QgdHJhdmVyc2VfYW5kX2NoZWNrKG1zdGF0ZSBtKSB7Ci0gIHNpemVfdCBzdW0gPSAwOwotICBpZiAoaXNfaW5pdGlhbGl6ZWQobSkpIHsKLSAgICBtc2VnbWVudHB0ciBzID0gJm0tPnNlZzsKLSAgICBzdW0gKz0gbS0+dG9wc2l6ZSArIFRPUF9GT09UX1NJWkU7Ci0gICAgd2hpbGUgKHMgIT0gMCkgewotICAgICAgbWNodW5rcHRyIHEgPSBhbGlnbl9hc19jaHVuayhzLT5iYXNlKTsKLSAgICAgIG1jaHVua3B0ciBsYXN0cSA9IDA7Ci0gICAgICBhc3NlcnQocGludXNlKHEpKTsKLSAgICAgIHdoaWxlIChzZWdtZW50X2hvbGRzKHMsIHEpICYmCi0gICAgICAgICAgICAgcSAhPSBtLT50b3AgJiYgcS0+aGVhZCAhPSBGRU5DRVBPU1RfSEVBRCkgewotICAgICAgICBzdW0gKz0gY2h1bmtzaXplKHEpOwotICAgICAgICBpZiAoY2ludXNlKHEpKSB7Ci0gICAgICAgICAgYXNzZXJ0KCFiaW5fZmluZChtLCBxKSk7Ci0gICAgICAgICAgZG9fY2hlY2tfaW51c2VfY2h1bmsobSwgcSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgYXNzZXJ0KHEgPT0gbS0+ZHYgfHwgYmluX2ZpbmQobSwgcSkpOwotICAgICAgICAgIGFzc2VydChsYXN0cSA9PSAwIHx8IGNpbnVzZShsYXN0cSkpOyAvKiBOb3QgMiBjb25zZWN1dGl2ZSBmcmVlICovCi0gICAgICAgICAgZG9fY2hlY2tfZnJlZV9jaHVuayhtLCBxKTsKLSAgICAgICAgfQotICAgICAgICBsYXN0cSA9IHE7Ci0gICAgICAgIHEgPSBuZXh0X2NodW5rKHEpOwotICAgICAgfQotICAgICAgcyA9IHMtPm5leHQ7Ci0gICAgfQotICB9Ci0gIHJldHVybiBzdW07Ci19Ci0KLS8qIENoZWNrIGFsbCBwcm9wZXJ0aWVzIG9mIG1hbGxvY19zdGF0ZS4gKi8KLXN0YXRpYyB2b2lkIGRvX2NoZWNrX21hbGxvY19zdGF0ZShtc3RhdGUgbSkgewotICBiaW5kZXhfdCBpOwotICBzaXplX3QgdG90YWw7Ci0gIC8qIGNoZWNrIGJpbnMgKi8KLSAgZm9yIChpID0gMDsgaSA8IE5TTUFMTEJJTlM7ICsraSkKLSAgICBkb19jaGVja19zbWFsbGJpbihtLCBpKTsKLSAgZm9yIChpID0gMDsgaSA8IE5UUkVFQklOUzsgKytpKQotICAgIGRvX2NoZWNrX3RyZWViaW4obSwgaSk7Ci0KLSAgaWYgKG0tPmR2c2l6ZSAhPSAwKSB7IC8qIGNoZWNrIGR2IGNodW5rICovCi0gICAgZG9fY2hlY2tfYW55X2NodW5rKG0sIG0tPmR2KTsKLSAgICBhc3NlcnQobS0+ZHZzaXplID09IGNodW5rc2l6ZShtLT5kdikpOwotICAgIGFzc2VydChtLT5kdnNpemUgPj0gTUlOX0NIVU5LX1NJWkUpOwotICAgIGFzc2VydChiaW5fZmluZChtLCBtLT5kdikgPT0gMCk7Ci0gIH0KLQotICBpZiAobS0+dG9wICE9IDApIHsgICAvKiBjaGVjayB0b3AgY2h1bmsgKi8KLSAgICBkb19jaGVja190b3BfY2h1bmsobSwgbS0+dG9wKTsKLSAgICBhc3NlcnQobS0+dG9wc2l6ZSA9PSBjaHVua3NpemUobS0+dG9wKSk7Ci0gICAgYXNzZXJ0KG0tPnRvcHNpemUgPiAwKTsKLSAgICBhc3NlcnQoYmluX2ZpbmQobSwgbS0+dG9wKSA9PSAwKTsKLSAgfQotCi0gIHRvdGFsID0gdHJhdmVyc2VfYW5kX2NoZWNrKG0pOwotICBhc3NlcnQodG90YWwgPD0gbS0+Zm9vdHByaW50KTsKLSAgYXNzZXJ0KG0tPmZvb3RwcmludCA8PSBtLT5tYXhfZm9vdHByaW50KTsKLSNpZiBVU0VfTUFYX0FMTE9XRURfRk9PVFBSSU5UCi0gIC8vVE9ETzogY2hhbmdlIHRoZXNlIGFzc2VydGlvbnMgaWYgd2UgYWxsb3cgZm9yIHNocmlua2luZy4KLSAgYXNzZXJ0KG0tPmZvb3RwcmludCA8PSBtLT5tYXhfYWxsb3dlZF9mb290cHJpbnQpOwotICBhc3NlcnQobS0+bWF4X2Zvb3RwcmludCA8PSBtLT5tYXhfYWxsb3dlZF9mb290cHJpbnQpOwotI2VuZGlmCi19Ci0jZW5kaWYgLyogREVCVUcgKi8KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gc3RhdGlzdGljcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotI2lmICFOT19NQUxMSU5GTwotc3RhdGljIHN0cnVjdCBtYWxsaW5mbyBpbnRlcm5hbF9tYWxsaW5mbyhtc3RhdGUgbSkgewotICBzdHJ1Y3QgbWFsbGluZm8gbm0gPSB7IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAgfTsKLSAgaWYgKCFQUkVBQ1RJT04obSkpIHsKLSAgICBjaGVja19tYWxsb2Nfc3RhdGUobSk7Ci0gICAgaWYgKGlzX2luaXRpYWxpemVkKG0pKSB7Ci0gICAgICBzaXplX3QgbmZyZWUgPSBTSVpFX1RfT05FOyAvKiB0b3AgYWx3YXlzIGZyZWUgKi8KLSAgICAgIHNpemVfdCBtZnJlZSA9IG0tPnRvcHNpemUgKyBUT1BfRk9PVF9TSVpFOwotICAgICAgc2l6ZV90IHN1bSA9IG1mcmVlOwotICAgICAgbXNlZ21lbnRwdHIgcyA9ICZtLT5zZWc7Ci0gICAgICB3aGlsZSAocyAhPSAwKSB7Ci0gICAgICAgIG1jaHVua3B0ciBxID0gYWxpZ25fYXNfY2h1bmsocy0+YmFzZSk7Ci0gICAgICAgIHdoaWxlIChzZWdtZW50X2hvbGRzKHMsIHEpICYmCi0gICAgICAgICAgICAgICBxICE9IG0tPnRvcCAmJiBxLT5oZWFkICE9IEZFTkNFUE9TVF9IRUFEKSB7Ci0gICAgICAgICAgc2l6ZV90IHN6ID0gY2h1bmtzaXplKHEpOwotICAgICAgICAgIHN1bSArPSBzejsKLSAgICAgICAgICBpZiAoIWNpbnVzZShxKSkgewotICAgICAgICAgICAgbWZyZWUgKz0gc3o7Ci0gICAgICAgICAgICArK25mcmVlOwotICAgICAgICAgIH0KLSAgICAgICAgICBxID0gbmV4dF9jaHVuayhxKTsKLSAgICAgICAgfQotICAgICAgICBzID0gcy0+bmV4dDsKLSAgICAgIH0KLQotICAgICAgbm0uYXJlbmEgICAgPSBzdW07Ci0gICAgICBubS5vcmRibGtzICA9IG5mcmVlOwotICAgICAgbm0uaGJsa2hkICAgPSBtLT5mb290cHJpbnQgLSBzdW07Ci0gICAgICBubS51c21ibGtzICA9IG0tPm1heF9mb290cHJpbnQ7Ci0gICAgICBubS51b3JkYmxrcyA9IG0tPmZvb3RwcmludCAtIG1mcmVlOwotICAgICAgbm0uZm9yZGJsa3MgPSBtZnJlZTsKLSAgICAgIG5tLmtlZXBjb3N0ID0gbS0+dG9wc2l6ZTsKLSAgICB9Ci0KLSAgICBQT1NUQUNUSU9OKG0pOwotICB9Ci0gIHJldHVybiBubTsKLX0KLSNlbmRpZiAvKiAhTk9fTUFMTElORk8gKi8KLQotc3RhdGljIHZvaWQgaW50ZXJuYWxfbWFsbG9jX3N0YXRzKG1zdGF0ZSBtKSB7Ci0gIGlmICghUFJFQUNUSU9OKG0pKSB7Ci0gICAgc2l6ZV90IG1heGZwID0gMDsKLSAgICBzaXplX3QgZnAgPSAwOwotICAgIHNpemVfdCB1c2VkID0gMDsKLSAgICBjaGVja19tYWxsb2Nfc3RhdGUobSk7Ci0gICAgaWYgKGlzX2luaXRpYWxpemVkKG0pKSB7Ci0gICAgICBtc2VnbWVudHB0ciBzID0gJm0tPnNlZzsKLSAgICAgIG1heGZwID0gbS0+bWF4X2Zvb3RwcmludDsKLSAgICAgIGZwID0gbS0+Zm9vdHByaW50OwotICAgICAgdXNlZCA9IGZwIC0gKG0tPnRvcHNpemUgKyBUT1BfRk9PVF9TSVpFKTsKLQotICAgICAgd2hpbGUgKHMgIT0gMCkgewotICAgICAgICBtY2h1bmtwdHIgcSA9IGFsaWduX2FzX2NodW5rKHMtPmJhc2UpOwotICAgICAgICB3aGlsZSAoc2VnbWVudF9ob2xkcyhzLCBxKSAmJgotICAgICAgICAgICAgICAgcSAhPSBtLT50b3AgJiYgcS0+aGVhZCAhPSBGRU5DRVBPU1RfSEVBRCkgewotICAgICAgICAgIGlmICghY2ludXNlKHEpKQotICAgICAgICAgICAgdXNlZCAtPSBjaHVua3NpemUocSk7Ci0gICAgICAgICAgcSA9IG5leHRfY2h1bmsocSk7Ci0gICAgICAgIH0KLSAgICAgICAgcyA9IHMtPm5leHQ7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgZnByaW50ZihzdGRlcnIsICJtYXggc3lzdGVtIGJ5dGVzID0gJTEwbHVcbiIsICh1bnNpZ25lZCBsb25nKShtYXhmcCkpOwotICAgIGZwcmludGYoc3RkZXJyLCAic3lzdGVtIGJ5dGVzICAgICA9ICUxMGx1XG4iLCAodW5zaWduZWQgbG9uZykoZnApKTsKLSAgICBmcHJpbnRmKHN0ZGVyciwgImluIHVzZSBieXRlcyAgICAgPSAlMTBsdVxuIiwgKHVuc2lnbmVkIGxvbmcpKHVzZWQpKTsKLQotICAgIFBPU1RBQ1RJT04obSk7Ci0gIH0KLX0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gT3BlcmF0aW9ucyBvbiBzbWFsbGJpbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotLyoKLSAgVmFyaW91cyBmb3JtcyBvZiBsaW5raW5nIGFuZCB1bmxpbmtpbmcgYXJlIGRlZmluZWQgYXMgbWFjcm9zLiAgRXZlbgotICB0aGUgb25lcyBmb3IgdHJlZXMsIHdoaWNoIGFyZSB2ZXJ5IGxvbmcgYnV0IGhhdmUgdmVyeSBzaG9ydCB0eXBpY2FsCi0gIHBhdGhzLiAgVGhpcyBpcyB1Z2x5IGJ1dCByZWR1Y2VzIHJlbGlhbmNlIG9uIGlubGluaW5nIHN1cHBvcnQgb2YKLSAgY29tcGlsZXJzLgotKi8KLQotLyogTGluayBhIGZyZWUgY2h1bmsgaW50byBhIHNtYWxsYmluICAqLwotI2RlZmluZSBpbnNlcnRfc21hbGxfY2h1bmsoTSwgUCwgUykge1wKLSAgYmluZGV4X3QgSSAgPSBzbWFsbF9pbmRleChTKTtcCi0gIG1jaHVua3B0ciBCID0gc21hbGxiaW5fYXQoTSwgSSk7XAotICBtY2h1bmtwdHIgRiA9IEI7XAotICBhc3NlcnQoUyA+PSBNSU5fQ0hVTktfU0laRSk7XAotICBpZiAoIXNtYWxsbWFwX2lzX21hcmtlZChNLCBJKSlcCi0gICAgbWFya19zbWFsbG1hcChNLCBJKTtcCi0gIGVsc2UgaWYgKFJUQ0hFQ0sob2tfYWRkcmVzcyhNLCBCLT5mZCkpKVwKLSAgICBGID0gQi0+ZmQ7XAotICBlbHNlIHtcCi0gICAgQ09SUlVQVElPTl9FUlJPUl9BQ1RJT04oTSk7XAotICB9XAotICBCLT5mZCA9IFA7XAotICBGLT5iayA9IFA7XAotICBQLT5mZCA9IEY7XAotICBQLT5iayA9IEI7XAotfQotCi0vKiBVbmxpbmsgYSBjaHVuayBmcm9tIGEgc21hbGxiaW4KLSAqIEFkZGVkIGNoZWNrOiBpZiBGLT5iayAhPSBQIG9yIEItPmZkICE9IFAsIHdlIGhhdmUgZG91YmxlIGxpbmtlZCBsaXN0Ci0gKiBjb3JydXB0aW9uLCBhbmQgYWJvcnQuCi0gKi8KLSNkZWZpbmUgdW5saW5rX3NtYWxsX2NodW5rKE0sIFAsIFMpIHtcCi0gIG1jaHVua3B0ciBGID0gUC0+ZmQ7XAotICBtY2h1bmtwdHIgQiA9IFAtPmJrO1wKLSAgYmluZGV4X3QgSSA9IHNtYWxsX2luZGV4KFMpO1wKLSAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKEYtPmJrICE9IFAgfHwgQi0+ZmQgIT0gUCwgMCkpXAotICAgIENPUlJVUFRJT05fRVJST1JfQUNUSU9OKE0pO1wKLSAgYXNzZXJ0KFAgIT0gQik7XAotICBhc3NlcnQoUCAhPSBGKTtcCi0gIGFzc2VydChjaHVua3NpemUoUCkgPT0gc21hbGxfaW5kZXgyc2l6ZShJKSk7XAotICBpZiAoRiA9PSBCKVwKLSAgICBjbGVhcl9zbWFsbG1hcChNLCBJKTtcCi0gIGVsc2UgaWYgKFJUQ0hFQ0soKEYgPT0gc21hbGxiaW5fYXQoTSxJKSB8fCBva19hZGRyZXNzKE0sIEYpKSAmJlwKLSAgICAgICAgICAgICAgICAgICAoQiA9PSBzbWFsbGJpbl9hdChNLEkpIHx8IG9rX2FkZHJlc3MoTSwgQikpKSkge1wKLSAgICBGLT5iayA9IEI7XAotICAgIEItPmZkID0gRjtcCi0gIH1cCi0gIGVsc2Uge1wKLSAgICBDT1JSVVBUSU9OX0VSUk9SX0FDVElPTihNKTtcCi0gIH1cCi19Ci0KLS8qIFVubGluayB0aGUgZmlyc3QgY2h1bmsgZnJvbSBhIHNtYWxsYmluCi0gKiBBZGRlZCBjaGVjazogaWYgRi0+YmsgIT0gUCBvciBCLT5mZCAhPSBQLCB3ZSBoYXZlIGRvdWJsZSBsaW5rZWQgbGlzdAotICogY29ycnVwdGlvbiwgYW5kIGFib3J0LgotICovCi0jZGVmaW5lIHVubGlua19maXJzdF9zbWFsbF9jaHVuayhNLCBCLCBQLCBJKSB7XAotICBtY2h1bmtwdHIgRiA9IFAtPmZkO1wKLSAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKEYtPmJrICE9IFAgfHwgQi0+ZmQgIT0gUCwgMCkpXAotICAgIENPUlJVUFRJT05fRVJST1JfQUNUSU9OKE0pO1wKLSAgYXNzZXJ0KFAgIT0gQik7XAotICBhc3NlcnQoUCAhPSBGKTtcCi0gIGFzc2VydChjaHVua3NpemUoUCkgPT0gc21hbGxfaW5kZXgyc2l6ZShJKSk7XAotICBpZiAoQiA9PSBGKVwKLSAgICBjbGVhcl9zbWFsbG1hcChNLCBJKTtcCi0gIGVsc2UgaWYgKFJUQ0hFQ0sob2tfYWRkcmVzcyhNLCBGKSkpIHtcCi0gICAgQi0+ZmQgPSBGO1wKLSAgICBGLT5iayA9IEI7XAotICB9XAotICBlbHNlIHtcCi0gICAgQ09SUlVQVElPTl9FUlJPUl9BQ1RJT04oTSk7XAotICB9XAotfQotCi0vKiBSZXBsYWNlIGR2IG5vZGUsIGJpbm5pbmcgdGhlIG9sZCBvbmUgKi8KLS8qIFVzZWQgb25seSB3aGVuIGR2c2l6ZSBrbm93biB0byBiZSBzbWFsbCAqLwotI2RlZmluZSByZXBsYWNlX2R2KE0sIFAsIFMpIHtcCi0gIHNpemVfdCBEVlMgPSBNLT5kdnNpemU7XAotICBpZiAoRFZTICE9IDApIHtcCi0gICAgbWNodW5rcHRyIERWID0gTS0+ZHY7XAotICAgIGFzc2VydChpc19zbWFsbChEVlMpKTtcCi0gICAgaW5zZXJ0X3NtYWxsX2NodW5rKE0sIERWLCBEVlMpO1wKLSAgfVwKLSAgTS0+ZHZzaXplID0gUztcCi0gIE0tPmR2ID0gUDtcCi19Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gT3BlcmF0aW9ucyBvbiB0cmVlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLS8qIEluc2VydCBjaHVuayBpbnRvIHRyZWUgKi8KLSNkZWZpbmUgaW5zZXJ0X2xhcmdlX2NodW5rKE0sIFgsIFMpIHtcCi0gIHRiaW5wdHIqIEg7XAotICBiaW5kZXhfdCBJO1wKLSAgY29tcHV0ZV90cmVlX2luZGV4KFMsIEkpO1wKLSAgSCA9IHRyZWViaW5fYXQoTSwgSSk7XAotICBYLT5pbmRleCA9IEk7XAotICBYLT5jaGlsZFswXSA9IFgtPmNoaWxkWzFdID0gMDtcCi0gIGlmICghdHJlZW1hcF9pc19tYXJrZWQoTSwgSSkpIHtcCi0gICAgbWFya190cmVlbWFwKE0sIEkpO1wKLSAgICAqSCA9IFg7XAotICAgIFgtPnBhcmVudCA9ICh0Y2h1bmtwdHIpSDtcCi0gICAgWC0+ZmQgPSBYLT5iayA9IFg7XAotICB9XAotICBlbHNlIHtcCi0gICAgdGNodW5rcHRyIFQgPSAqSDtcCi0gICAgc2l6ZV90IEsgPSBTIDw8IGxlZnRzaGlmdF9mb3JfdHJlZV9pbmRleChJKTtcCi0gICAgZm9yICg7Oykge1wKLSAgICAgIGlmIChjaHVua3NpemUoVCkgIT0gUykge1wKLSAgICAgICAgdGNodW5rcHRyKiBDID0gJihULT5jaGlsZFsoSyA+PiAoU0laRV9UX0JJVFNJWkUtU0laRV9UX09ORSkpICYgMV0pO1wKLSAgICAgICAgSyA8PD0gMTtcCi0gICAgICAgIGlmICgqQyAhPSAwKVwKLSAgICAgICAgICBUID0gKkM7XAotICAgICAgICBlbHNlIGlmIChSVENIRUNLKG9rX2FkZHJlc3MoTSwgQykpKSB7XAotICAgICAgICAgICpDID0gWDtcCi0gICAgICAgICAgWC0+cGFyZW50ID0gVDtcCi0gICAgICAgICAgWC0+ZmQgPSBYLT5iayA9IFg7XAotICAgICAgICAgIGJyZWFrO1wKLSAgICAgICAgfVwKLSAgICAgICAgZWxzZSB7XAotICAgICAgICAgIENPUlJVUFRJT05fRVJST1JfQUNUSU9OKE0pO1wKLSAgICAgICAgICBicmVhaztcCi0gICAgICAgIH1cCi0gICAgICB9XAotICAgICAgZWxzZSB7XAotICAgICAgICB0Y2h1bmtwdHIgRiA9IFQtPmZkO1wKLSAgICAgICAgaWYgKFJUQ0hFQ0sob2tfYWRkcmVzcyhNLCBUKSAmJiBva19hZGRyZXNzKE0sIEYpKSkge1wKLSAgICAgICAgICBULT5mZCA9IEYtPmJrID0gWDtcCi0gICAgICAgICAgWC0+ZmQgPSBGO1wKLSAgICAgICAgICBYLT5iayA9IFQ7XAotICAgICAgICAgIFgtPnBhcmVudCA9IDA7XAotICAgICAgICAgIGJyZWFrO1wKLSAgICAgICAgfVwKLSAgICAgICAgZWxzZSB7XAotICAgICAgICAgIENPUlJVUFRJT05fRVJST1JfQUNUSU9OKE0pO1wKLSAgICAgICAgICBicmVhaztcCi0gICAgICAgIH1cCi0gICAgICB9XAotICAgIH1cCi0gIH1cCi19Ci0KLS8qCi0gIFVubGluayBzdGVwczoKLQotICAxLiBJZiB4IGlzIGEgY2hhaW5lZCBub2RlLCB1bmxpbmsgaXQgZnJvbSBpdHMgc2FtZS1zaXplZCBmZC9iayBsaW5rcwotICAgICBhbmQgY2hvb3NlIGl0cyBiayBub2RlIGFzIGl0cyByZXBsYWNlbWVudC4KLSAgMi4gSWYgeCB3YXMgdGhlIGxhc3Qgbm9kZSBvZiBpdHMgc2l6ZSwgYnV0IG5vdCBhIGxlYWYgbm9kZSwgaXQgbXVzdAotICAgICBiZSByZXBsYWNlZCB3aXRoIGEgbGVhZiBub2RlIChub3QgbWVyZWx5IG9uZSB3aXRoIGFuIG9wZW4gbGVmdCBvcgotICAgICByaWdodCksIHRvIG1ha2Ugc3VyZSB0aGF0IGxlZnRzIGFuZCByaWdodHMgb2YgZGVzY2VuZGVudHMKLSAgICAgY29ycmVzcG9uZCBwcm9wZXJseSB0byBiaXQgbWFza3MuICBXZSB1c2UgdGhlIHJpZ2h0bW9zdCBkZXNjZW5kZW50Ci0gICAgIG9mIHguICBXZSBjb3VsZCB1c2UgYW55IG90aGVyIGxlYWYsIGJ1dCB0aGlzIGlzIGVhc3kgdG8gbG9jYXRlIGFuZAotICAgICB0ZW5kcyB0byBjb3VudGVyYWN0IHJlbW92YWwgb2YgbGVmdG1vc3RzIGVsc2V3aGVyZSwgYW5kIHNvIGtlZXBzCi0gICAgIHBhdGhzIHNob3J0ZXIgdGhhbiBtaW5pbWFsbHkgZ3VhcmFudGVlZC4gIFRoaXMgZG9lc24ndCBsb29wIG11Y2gKLSAgICAgYmVjYXVzZSBvbiBhdmVyYWdlIGEgbm9kZSBpbiBhIHRyZWUgaXMgbmVhciB0aGUgYm90dG9tLgotICAzLiBJZiB4IGlzIHRoZSBiYXNlIG9mIGEgY2hhaW4gKGkuZS4sIGhhcyBwYXJlbnQgbGlua3MpIHJlbGluawotICAgICB4J3MgcGFyZW50IGFuZCBjaGlsZHJlbiB0byB4J3MgcmVwbGFjZW1lbnQgKG9yIG51bGwgaWYgbm9uZSkuCi0KLSAgQWRkZWQgY2hlY2s6IGlmIEYtPmJrICE9IFggb3IgUi0+ZmQgIT0gWCwgd2UgaGF2ZSBkb3VibGUgbGlua2VkIGxpc3QKLSAgY29ycnVwdGlvbiwgYW5kIGFib3J0LgotKi8KLQotI2RlZmluZSB1bmxpbmtfbGFyZ2VfY2h1bmsoTSwgWCkge1wKLSAgdGNodW5rcHRyIFhQID0gWC0+cGFyZW50O1wKLSAgdGNodW5rcHRyIFI7XAotICBpZiAoWC0+YmsgIT0gWCkge1wKLSAgICB0Y2h1bmtwdHIgRiA9IFgtPmZkO1wKLSAgICBSID0gWC0+Yms7XAotICAgIGlmIChfX2J1aWx0aW5fZXhwZWN0IChGLT5iayAhPSBYIHx8IFItPmZkICE9IFgsIDApKVwKLSAgICAgIENPUlJVUFRJT05fRVJST1JfQUNUSU9OKE0pO1wKLSAgICBpZiAoUlRDSEVDSyhva19hZGRyZXNzKE0sIEYpKSkge1wKLSAgICAgIEYtPmJrID0gUjtcCi0gICAgICBSLT5mZCA9IEY7XAotICAgIH1cCi0gICAgZWxzZSB7XAotICAgICAgQ09SUlVQVElPTl9FUlJPUl9BQ1RJT04oTSk7XAotICAgIH1cCi0gIH1cCi0gIGVsc2Uge1wKLSAgICB0Y2h1bmtwdHIqIFJQO1wKLSAgICBpZiAoKChSID0gKihSUCA9ICYoWC0+Y2hpbGRbMV0pKSkgIT0gMCkgfHxcCi0gICAgICAgICgoUiA9ICooUlAgPSAmKFgtPmNoaWxkWzBdKSkpICE9IDApKSB7XAotICAgICAgdGNodW5rcHRyKiBDUDtcCi0gICAgICB3aGlsZSAoKCooQ1AgPSAmKFItPmNoaWxkWzFdKSkgIT0gMCkgfHxcCi0gICAgICAgICAgICAgKCooQ1AgPSAmKFItPmNoaWxkWzBdKSkgIT0gMCkpIHtcCi0gICAgICAgIFIgPSAqKFJQID0gQ1ApO1wKLSAgICAgIH1cCi0gICAgICBpZiAoUlRDSEVDSyhva19hZGRyZXNzKE0sIFJQKSkpXAotICAgICAgICAqUlAgPSAwO1wKLSAgICAgIGVsc2Uge1wKLSAgICAgICAgQ09SUlVQVElPTl9FUlJPUl9BQ1RJT04oTSk7XAotICAgICAgfVwKLSAgICB9XAotICB9XAotICBpZiAoWFAgIT0gMCkge1wKLSAgICB0YmlucHRyKiBIID0gdHJlZWJpbl9hdChNLCBYLT5pbmRleCk7XAotICAgIGlmIChYID09ICpIKSB7XAotICAgICAgaWYgKCgqSCA9IFIpID09IDApIFwKLSAgICAgICAgY2xlYXJfdHJlZW1hcChNLCBYLT5pbmRleCk7XAotICAgIH1cCi0gICAgZWxzZSBpZiAoUlRDSEVDSyhva19hZGRyZXNzKE0sIFhQKSkpIHtcCi0gICAgICBpZiAoWFAtPmNoaWxkWzBdID09IFgpIFwKLSAgICAgICAgWFAtPmNoaWxkWzBdID0gUjtcCi0gICAgICBlbHNlIFwKLSAgICAgICAgWFAtPmNoaWxkWzFdID0gUjtcCi0gICAgfVwKLSAgICBlbHNlXAotICAgICAgQ09SUlVQVElPTl9FUlJPUl9BQ1RJT04oTSk7XAotICAgIGlmIChSICE9IDApIHtcCi0gICAgICBpZiAoUlRDSEVDSyhva19hZGRyZXNzKE0sIFIpKSkge1wKLSAgICAgICAgdGNodW5rcHRyIEMwLCBDMTtcCi0gICAgICAgIFItPnBhcmVudCA9IFhQO1wKLSAgICAgICAgaWYgKChDMCA9IFgtPmNoaWxkWzBdKSAhPSAwKSB7XAotICAgICAgICAgIGlmIChSVENIRUNLKG9rX2FkZHJlc3MoTSwgQzApKSkge1wKLSAgICAgICAgICAgIFItPmNoaWxkWzBdID0gQzA7XAotICAgICAgICAgICAgQzAtPnBhcmVudCA9IFI7XAotICAgICAgICAgIH1cCi0gICAgICAgICAgZWxzZVwKLSAgICAgICAgICAgIENPUlJVUFRJT05fRVJST1JfQUNUSU9OKE0pO1wKLSAgICAgICAgfVwKLSAgICAgICAgaWYgKChDMSA9IFgtPmNoaWxkWzFdKSAhPSAwKSB7XAotICAgICAgICAgIGlmIChSVENIRUNLKG9rX2FkZHJlc3MoTSwgQzEpKSkge1wKLSAgICAgICAgICAgIFItPmNoaWxkWzFdID0gQzE7XAotICAgICAgICAgICAgQzEtPnBhcmVudCA9IFI7XAotICAgICAgICAgIH1cCi0gICAgICAgICAgZWxzZVwKLSAgICAgICAgICAgIENPUlJVUFRJT05fRVJST1JfQUNUSU9OKE0pO1wKLSAgICAgICAgfVwKLSAgICAgIH1cCi0gICAgICBlbHNlXAotICAgICAgICBDT1JSVVBUSU9OX0VSUk9SX0FDVElPTihNKTtcCi0gICAgfVwKLSAgfVwKLX0KLQotLyogUmVsYXlzIHRvIGxhcmdlIHZzIHNtYWxsIGJpbiBvcGVyYXRpb25zICovCi0KLSNkZWZpbmUgaW5zZXJ0X2NodW5rKE0sIFAsIFMpXAotICBpZiAoaXNfc21hbGwoUykpIGluc2VydF9zbWFsbF9jaHVuayhNLCBQLCBTKVwKLSAgZWxzZSB7IHRjaHVua3B0ciBUUCA9ICh0Y2h1bmtwdHIpKFApOyBpbnNlcnRfbGFyZ2VfY2h1bmsoTSwgVFAsIFMpOyB9Ci0KLSNkZWZpbmUgdW5saW5rX2NodW5rKE0sIFAsIFMpXAotICBpZiAoaXNfc21hbGwoUykpIHVubGlua19zbWFsbF9jaHVuayhNLCBQLCBTKVwKLSAgZWxzZSB7IHRjaHVua3B0ciBUUCA9ICh0Y2h1bmtwdHIpKFApOyB1bmxpbmtfbGFyZ2VfY2h1bmsoTSwgVFApOyB9Ci0KLQotLyogUmVsYXlzIHRvIGludGVybmFsIGNhbGxzIHRvIG1hbGxvYy9mcmVlIGZyb20gcmVhbGxvYywgbWVtYWxpZ24gZXRjICovCi0KLSNpZiBPTkxZX01TUEFDRVMKLSNkZWZpbmUgaW50ZXJuYWxfbWFsbG9jKG0sIGIpIG1zcGFjZV9tYWxsb2MobSwgYikKLSNkZWZpbmUgaW50ZXJuYWxfZnJlZShtLCBtZW0pIG1zcGFjZV9mcmVlKG0sbWVtKTsKLSNlbHNlIC8qIE9OTFlfTVNQQUNFUyAqLwotI2lmIE1TUEFDRVMKLSNkZWZpbmUgaW50ZXJuYWxfbWFsbG9jKG0sIGIpXAotICAgKG0gPT0gZ20pPyBkbG1hbGxvYyhiKSA6IG1zcGFjZV9tYWxsb2MobSwgYikKLSNkZWZpbmUgaW50ZXJuYWxfZnJlZShtLCBtZW0pXAotICAgaWYgKG0gPT0gZ20pIGRsZnJlZShtZW0pOyBlbHNlIG1zcGFjZV9mcmVlKG0sbWVtKTsKLSNlbHNlIC8qIE1TUEFDRVMgKi8KLSNkZWZpbmUgaW50ZXJuYWxfbWFsbG9jKG0sIGIpIGRsbWFsbG9jKGIpCi0jZGVmaW5lIGludGVybmFsX2ZyZWUobSwgbWVtKSBkbGZyZWUobWVtKQotI2VuZGlmIC8qIE1TUEFDRVMgKi8KLSNlbmRpZiAvKiBPTkxZX01TUEFDRVMgKi8KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIERpcmVjdC1tbWFwcGluZyBjaHVua3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotLyoKLSAgRGlyZWN0bHkgbW1hcHBlZCBjaHVua3MgYXJlIHNldCB1cCB3aXRoIGFuIG9mZnNldCB0byB0aGUgc3RhcnQgb2YKLSAgdGhlIG1tYXBwZWQgcmVnaW9uIHN0b3JlZCBpbiB0aGUgcHJldl9mb290IGZpZWxkIG9mIHRoZSBjaHVuay4gVGhpcwotICBhbGxvd3MgcmVjb25zdHJ1Y3Rpb24gb2YgdGhlIHJlcXVpcmVkIGFyZ3VtZW50IHRvIE1VTk1BUCB3aGVuIGZyZWVkLAotICBhbmQgYWxzbyBhbGxvd3MgYWRqdXN0bWVudCBvZiB0aGUgcmV0dXJuZWQgY2h1bmsgdG8gbWVldCBhbGlnbm1lbnQKLSAgcmVxdWlyZW1lbnRzIChlc3BlY2lhbGx5IGluIG1lbWFsaWduKS4gIFRoZXJlIGlzIGFsc28gZW5vdWdoIHNwYWNlCi0gIGFsbG9jYXRlZCB0byBob2xkIGEgZmFrZSBuZXh0IGNodW5rIG9mIHNpemUgU0laRV9UX1NJWkUgdG8gbWFpbnRhaW4KLSAgdGhlIFBJTlVTRSBiaXQgc28gZnJlZXMgY2FuIGJlIGNoZWNrZWQuCi0qLwotCi0vKiBNYWxsb2MgdXNpbmcgbW1hcCAqLwotc3RhdGljIHZvaWQqIG1tYXBfYWxsb2MobXN0YXRlIG0sIHNpemVfdCBuYikgewotICBzaXplX3QgbW1zaXplID0gZ3JhbnVsYXJpdHlfYWxpZ24obmIgKyBTSVhfU0laRV9UX1NJWkVTICsgQ0hVTktfQUxJR05fTUFTSyk7Ci0jaWYgVVNFX01BWF9BTExPV0VEX0ZPT1RQUklOVAotICBzaXplX3QgbmV3X2Zvb3RwcmludCA9IG0tPmZvb3RwcmludCArIG1tc2l6ZTsKLSAgaWYgKG5ld19mb290cHJpbnQgPD0gbS0+Zm9vdHByaW50IHx8ICAvKiBDaGVjayBmb3Igd3JhcCBhcm91bmQgMCAqLwotICAgICAgbmV3X2Zvb3RwcmludCA+IG0tPm1heF9hbGxvd2VkX2Zvb3RwcmludCkKLSAgICByZXR1cm4gMDsKLSNlbmRpZgotICBpZiAobW1zaXplID4gbmIpIHsgICAgIC8qIENoZWNrIGZvciB3cmFwIGFyb3VuZCAwICovCi0gICAgY2hhciogbW0gPSAoY2hhciopKERJUkVDVF9NTUFQKG1tc2l6ZSkpOwotICAgIGlmIChtbSAhPSBDTUZBSUwpIHsKLSAgICAgIHNpemVfdCBvZmZzZXQgPSBhbGlnbl9vZmZzZXQoY2h1bmsybWVtKG1tKSk7Ci0gICAgICBzaXplX3QgcHNpemUgPSBtbXNpemUgLSBvZmZzZXQgLSBNTUFQX0ZPT1RfUEFEOwotICAgICAgbWNodW5rcHRyIHAgPSAobWNodW5rcHRyKShtbSArIG9mZnNldCk7Ci0gICAgICBwLT5wcmV2X2Zvb3QgPSBvZmZzZXQgfCBJU19NTUFQUEVEX0JJVDsKLSAgICAgIChwKS0+aGVhZCA9IChwc2l6ZXxDSU5VU0VfQklUKTsKLSAgICAgIG1hcmtfaW51c2VfZm9vdChtLCBwLCBwc2l6ZSk7Ci0gICAgICBjaHVua19wbHVzX29mZnNldChwLCBwc2l6ZSktPmhlYWQgPSBGRU5DRVBPU1RfSEVBRDsKLSAgICAgIGNodW5rX3BsdXNfb2Zmc2V0KHAsIHBzaXplK1NJWkVfVF9TSVpFKS0+aGVhZCA9IDA7Ci0KLSAgICAgIGlmIChtbSA8IG0tPmxlYXN0X2FkZHIpCi0gICAgICAgIG0tPmxlYXN0X2FkZHIgPSBtbTsKLSAgICAgIGlmICgobS0+Zm9vdHByaW50ICs9IG1tc2l6ZSkgPiBtLT5tYXhfZm9vdHByaW50KQotICAgICAgICBtLT5tYXhfZm9vdHByaW50ID0gbS0+Zm9vdHByaW50OwotICAgICAgYXNzZXJ0KGlzX2FsaWduZWQoY2h1bmsybWVtKHApKSk7Ci0gICAgICBjaGVja19tbWFwcGVkX2NodW5rKG0sIHApOwotICAgICAgcmV0dXJuIGNodW5rMm1lbShwKTsKLSAgICB9Ci0gIH0KLSAgcmV0dXJuIDA7Ci19Ci0KLS8qIFJlYWxsb2MgdXNpbmcgbW1hcCAqLwotc3RhdGljIG1jaHVua3B0ciBtbWFwX3Jlc2l6ZShtc3RhdGUgbSwgbWNodW5rcHRyIG9sZHAsIHNpemVfdCBuYikgewotICBzaXplX3Qgb2xkc2l6ZSA9IGNodW5rc2l6ZShvbGRwKTsKLSAgaWYgKGlzX3NtYWxsKG5iKSkgLyogQ2FuJ3Qgc2hyaW5rIG1tYXAgcmVnaW9ucyBiZWxvdyBzbWFsbCBzaXplICovCi0gICAgcmV0dXJuIDA7Ci0gIC8qIEtlZXAgb2xkIGNodW5rIGlmIGJpZyBlbm91Z2ggYnV0IG5vdCB0b28gYmlnICovCi0gIGlmIChvbGRzaXplID49IG5iICsgU0laRV9UX1NJWkUgJiYKLSAgICAgIChvbGRzaXplIC0gbmIpIDw9IChtcGFyYW1zLmdyYW51bGFyaXR5IDw8IDEpKQotICAgIHJldHVybiBvbGRwOwotICBlbHNlIHsKLSAgICBzaXplX3Qgb2Zmc2V0ID0gb2xkcC0+cHJldl9mb290ICYgfklTX01NQVBQRURfQklUOwotICAgIHNpemVfdCBvbGRtbXNpemUgPSBvbGRzaXplICsgb2Zmc2V0ICsgTU1BUF9GT09UX1BBRDsKLSAgICBzaXplX3QgbmV3bW1zaXplID0gZ3JhbnVsYXJpdHlfYWxpZ24obmIgKyBTSVhfU0laRV9UX1NJWkVTICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0hVTktfQUxJR05fTUFTSyk7Ci0gICAgY2hhciogY3AgPSAoY2hhciopQ0FMTF9NUkVNQVAoKGNoYXIqKW9sZHAgLSBvZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2xkbW1zaXplLCBuZXdtbXNpemUsIDEpOwotICAgIGlmIChjcCAhPSBDTUZBSUwpIHsKLSAgICAgIG1jaHVua3B0ciBuZXdwID0gKG1jaHVua3B0cikoY3AgKyBvZmZzZXQpOwotICAgICAgc2l6ZV90IHBzaXplID0gbmV3bW1zaXplIC0gb2Zmc2V0IC0gTU1BUF9GT09UX1BBRDsKLSAgICAgIG5ld3AtPmhlYWQgPSAocHNpemV8Q0lOVVNFX0JJVCk7Ci0gICAgICBtYXJrX2ludXNlX2Zvb3QobSwgbmV3cCwgcHNpemUpOwotICAgICAgY2h1bmtfcGx1c19vZmZzZXQobmV3cCwgcHNpemUpLT5oZWFkID0gRkVOQ0VQT1NUX0hFQUQ7Ci0gICAgICBjaHVua19wbHVzX29mZnNldChuZXdwLCBwc2l6ZStTSVpFX1RfU0laRSktPmhlYWQgPSAwOwotCi0gICAgICBpZiAoY3AgPCBtLT5sZWFzdF9hZGRyKQotICAgICAgICBtLT5sZWFzdF9hZGRyID0gY3A7Ci0gICAgICBpZiAoKG0tPmZvb3RwcmludCArPSBuZXdtbXNpemUgLSBvbGRtbXNpemUpID4gbS0+bWF4X2Zvb3RwcmludCkKLSAgICAgICAgbS0+bWF4X2Zvb3RwcmludCA9IG0tPmZvb3RwcmludDsKLSAgICAgIGNoZWNrX21tYXBwZWRfY2h1bmsobSwgbmV3cCk7Ci0gICAgICByZXR1cm4gbmV3cDsKLSAgICB9Ci0gIH0KLSAgcmV0dXJuIDA7Ci19Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIG1zcGFjZSBtYW5hZ2VtZW50IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLS8qIEluaXRpYWxpemUgdG9wIGNodW5rIGFuZCBpdHMgc2l6ZSAqLwotc3RhdGljIHZvaWQgaW5pdF90b3AobXN0YXRlIG0sIG1jaHVua3B0ciBwLCBzaXplX3QgcHNpemUpIHsKLSAgLyogRW5zdXJlIGFsaWdubWVudCAqLwotICBzaXplX3Qgb2Zmc2V0ID0gYWxpZ25fb2Zmc2V0KGNodW5rMm1lbShwKSk7Ci0gIHAgPSAobWNodW5rcHRyKSgoY2hhciopcCArIG9mZnNldCk7Ci0gIHBzaXplIC09IG9mZnNldDsKLQotICBtLT50b3AgPSBwOwotICBtLT50b3BzaXplID0gcHNpemU7Ci0gIHAtPmhlYWQgPSBwc2l6ZSB8IFBJTlVTRV9CSVQ7Ci0gIC8qIHNldCBzaXplIG9mIGZha2UgdHJhaWxpbmcgY2h1bmsgaG9sZGluZyBvdmVyaGVhZCBzcGFjZSBvbmx5IG9uY2UgKi8KLSAgY2h1bmtfcGx1c19vZmZzZXQocCwgcHNpemUpLT5oZWFkID0gVE9QX0ZPT1RfU0laRTsKLSAgbS0+dHJpbV9jaGVjayA9IG1wYXJhbXMudHJpbV90aHJlc2hvbGQ7IC8qIHJlc2V0IG9uIGVhY2ggdXBkYXRlICovCi19Ci0KLS8qIEluaXRpYWxpemUgYmlucyBmb3IgYSBuZXcgbXN0YXRlIHRoYXQgaXMgb3RoZXJ3aXNlIHplcm9lZCBvdXQgKi8KLXN0YXRpYyB2b2lkIGluaXRfYmlucyhtc3RhdGUgbSkgewotICAvKiBFc3RhYmxpc2ggY2lyY3VsYXIgbGlua3MgZm9yIHNtYWxsYmlucyAqLwotICBiaW5kZXhfdCBpOwotICBmb3IgKGkgPSAwOyBpIDwgTlNNQUxMQklOUzsgKytpKSB7Ci0gICAgc2JpbnB0ciBiaW4gPSBzbWFsbGJpbl9hdChtLGkpOwotICAgIGJpbi0+ZmQgPSBiaW4tPmJrID0gYmluOwotICB9Ci19Ci0KLSNpZiBQUk9DRUVEX09OX0VSUk9SCi0KLS8qIGRlZmF1bHQgY29ycnVwdGlvbiBhY3Rpb24gKi8KLXN0YXRpYyB2b2lkIHJlc2V0X29uX2Vycm9yKG1zdGF0ZSBtKSB7Ci0gIGludCBpOwotICArK21hbGxvY19jb3JydXB0aW9uX2Vycm9yX2NvdW50OwotICAvKiBSZWluaXRpYWxpemUgZmllbGRzIHRvIGZvcmdldCBhYm91dCBhbGwgbWVtb3J5ICovCi0gIG0tPnNtYWxsYmlucyA9IG0tPnRyZWViaW5zID0gMDsKLSAgbS0+ZHZzaXplID0gbS0+dG9wc2l6ZSA9IDA7Ci0gIG0tPnNlZy5iYXNlID0gMDsKLSAgbS0+c2VnLnNpemUgPSAwOwotICBtLT5zZWcubmV4dCA9IDA7Ci0gIG0tPnRvcCA9IG0tPmR2ID0gMDsKLSAgZm9yIChpID0gMDsgaSA8IE5UUkVFQklOUzsgKytpKQotICAgICp0cmVlYmluX2F0KG0sIGkpID0gMDsKLSAgaW5pdF9iaW5zKG0pOwotfQotI2VuZGlmIC8qIFBST0NFRURfT05fRVJST1IgKi8KLQotLyogQWxsb2NhdGUgY2h1bmsgYW5kIHByZXBlbmQgcmVtYWluZGVyIHdpdGggY2h1bmsgaW4gc3VjY2Vzc29yIGJhc2UuICovCi1zdGF0aWMgdm9pZCogcHJlcGVuZF9hbGxvYyhtc3RhdGUgbSwgY2hhciogbmV3YmFzZSwgY2hhciogb2xkYmFzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBuYikgewotICBtY2h1bmtwdHIgcCA9IGFsaWduX2FzX2NodW5rKG5ld2Jhc2UpOwotICBtY2h1bmtwdHIgb2xkZmlyc3QgPSBhbGlnbl9hc19jaHVuayhvbGRiYXNlKTsKLSAgc2l6ZV90IHBzaXplID0gKGNoYXIqKW9sZGZpcnN0IC0gKGNoYXIqKXA7Ci0gIG1jaHVua3B0ciBxID0gY2h1bmtfcGx1c19vZmZzZXQocCwgbmIpOwotICBzaXplX3QgcXNpemUgPSBwc2l6ZSAtIG5iOwotICBzZXRfc2l6ZV9hbmRfcGludXNlX29mX2ludXNlX2NodW5rKG0sIHAsIG5iKTsKLQotICBhc3NlcnQoKGNoYXIqKW9sZGZpcnN0ID4gKGNoYXIqKXEpOwotICBhc3NlcnQocGludXNlKG9sZGZpcnN0KSk7Ci0gIGFzc2VydChxc2l6ZSA+PSBNSU5fQ0hVTktfU0laRSk7Ci0KLSAgLyogY29uc29saWRhdGUgcmVtYWluZGVyIHdpdGggZmlyc3QgY2h1bmsgb2Ygb2xkIGJhc2UgKi8KLSAgaWYgKG9sZGZpcnN0ID09IG0tPnRvcCkgewotICAgIHNpemVfdCB0c2l6ZSA9IG0tPnRvcHNpemUgKz0gcXNpemU7Ci0gICAgbS0+dG9wID0gcTsKLSAgICBxLT5oZWFkID0gdHNpemUgfCBQSU5VU0VfQklUOwotICAgIGNoZWNrX3RvcF9jaHVuayhtLCBxKTsKLSAgfQotICBlbHNlIGlmIChvbGRmaXJzdCA9PSBtLT5kdikgewotICAgIHNpemVfdCBkc2l6ZSA9IG0tPmR2c2l6ZSArPSBxc2l6ZTsKLSAgICBtLT5kdiA9IHE7Ci0gICAgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9mcmVlX2NodW5rKHEsIGRzaXplKTsKLSAgfQotICBlbHNlIHsKLSAgICBpZiAoIWNpbnVzZShvbGRmaXJzdCkpIHsKLSAgICAgIHNpemVfdCBuc2l6ZSA9IGNodW5rc2l6ZShvbGRmaXJzdCk7Ci0gICAgICB1bmxpbmtfY2h1bmsobSwgb2xkZmlyc3QsIG5zaXplKTsKLSAgICAgIG9sZGZpcnN0ID0gY2h1bmtfcGx1c19vZmZzZXQob2xkZmlyc3QsIG5zaXplKTsKLSAgICAgIHFzaXplICs9IG5zaXplOwotICAgIH0KLSAgICBzZXRfZnJlZV93aXRoX3BpbnVzZShxLCBxc2l6ZSwgb2xkZmlyc3QpOwotICAgIGluc2VydF9jaHVuayhtLCBxLCBxc2l6ZSk7Ci0gICAgY2hlY2tfZnJlZV9jaHVuayhtLCBxKTsKLSAgfQotCi0gIGNoZWNrX21hbGxvY2VkX2NodW5rKG0sIGNodW5rMm1lbShwKSwgbmIpOwotICByZXR1cm4gY2h1bmsybWVtKHApOwotfQotCi0KLS8qIEFkZCBhIHNlZ21lbnQgdG8gaG9sZCBhIG5ldyBub25jb250aWd1b3VzIHJlZ2lvbiAqLwotc3RhdGljIHZvaWQgYWRkX3NlZ21lbnQobXN0YXRlIG0sIGNoYXIqIHRiYXNlLCBzaXplX3QgdHNpemUsIGZsYWdfdCBtbWFwcGVkKSB7Ci0gIC8qIERldGVybWluZSBsb2NhdGlvbnMgYW5kIHNpemVzIG9mIHNlZ21lbnQsIGZlbmNlcG9zdHMsIG9sZCB0b3AgKi8KLSAgY2hhciogb2xkX3RvcCA9IChjaGFyKiltLT50b3A7Ci0gIG1zZWdtZW50cHRyIG9sZHNwID0gc2VnbWVudF9ob2xkaW5nKG0sIG9sZF90b3ApOwotICBjaGFyKiBvbGRfZW5kID0gb2xkc3AtPmJhc2UgKyBvbGRzcC0+c2l6ZTsKLSAgc2l6ZV90IHNzaXplID0gcGFkX3JlcXVlc3Qoc2l6ZW9mKHN0cnVjdCBtYWxsb2Nfc2VnbWVudCkpOwotICBjaGFyKiByYXdzcCA9IG9sZF9lbmQgLSAoc3NpemUgKyBGT1VSX1NJWkVfVF9TSVpFUyArIENIVU5LX0FMSUdOX01BU0spOwotICBzaXplX3Qgb2Zmc2V0ID0gYWxpZ25fb2Zmc2V0KGNodW5rMm1lbShyYXdzcCkpOwotICBjaGFyKiBhc3AgPSByYXdzcCArIG9mZnNldDsKLSAgY2hhciogY3NwID0gKGFzcCA8IChvbGRfdG9wICsgTUlOX0NIVU5LX1NJWkUpKT8gb2xkX3RvcCA6IGFzcDsKLSAgbWNodW5rcHRyIHNwID0gKG1jaHVua3B0ciljc3A7Ci0gIG1zZWdtZW50cHRyIHNzID0gKG1zZWdtZW50cHRyKShjaHVuazJtZW0oc3ApKTsKLSAgbWNodW5rcHRyIHRuZXh0ID0gY2h1bmtfcGx1c19vZmZzZXQoc3AsIHNzaXplKTsKLSAgbWNodW5rcHRyIHAgPSB0bmV4dDsKLSAgaW50IG5mZW5jZXMgPSAwOwotCi0gIC8qIHJlc2V0IHRvcCB0byBuZXcgc3BhY2UgKi8KLSAgaW5pdF90b3AobSwgKG1jaHVua3B0cil0YmFzZSwgdHNpemUgLSBUT1BfRk9PVF9TSVpFKTsKLQotICAvKiBTZXQgdXAgc2VnbWVudCByZWNvcmQgKi8KLSAgYXNzZXJ0KGlzX2FsaWduZWQoc3MpKTsKLSAgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9pbnVzZV9jaHVuayhtLCBzcCwgc3NpemUpOwotICAqc3MgPSBtLT5zZWc7IC8qIFB1c2ggY3VycmVudCByZWNvcmQgKi8KLSAgbS0+c2VnLmJhc2UgPSB0YmFzZTsKLSAgbS0+c2VnLnNpemUgPSB0c2l6ZTsKLSAgbS0+c2VnLnNmbGFncyA9IG1tYXBwZWQ7Ci0gIG0tPnNlZy5uZXh0ID0gc3M7Ci0KLSAgLyogSW5zZXJ0IHRyYWlsaW5nIGZlbmNlcG9zdHMgKi8KLSAgZm9yICg7OykgewotICAgIG1jaHVua3B0ciBuZXh0cCA9IGNodW5rX3BsdXNfb2Zmc2V0KHAsIFNJWkVfVF9TSVpFKTsKLSAgICBwLT5oZWFkID0gRkVOQ0VQT1NUX0hFQUQ7Ci0gICAgKytuZmVuY2VzOwotICAgIGlmICgoY2hhciopKCYobmV4dHAtPmhlYWQpKSA8IG9sZF9lbmQpCi0gICAgICBwID0gbmV4dHA7Ci0gICAgZWxzZQotICAgICAgYnJlYWs7Ci0gIH0KLSAgYXNzZXJ0KG5mZW5jZXMgPj0gMik7Ci0KLSAgLyogSW5zZXJ0IHRoZSByZXN0IG9mIG9sZCB0b3AgaW50byBhIGJpbiBhcyBhbiBvcmRpbmFyeSBmcmVlIGNodW5rICovCi0gIGlmIChjc3AgIT0gb2xkX3RvcCkgewotICAgIG1jaHVua3B0ciBxID0gKG1jaHVua3B0cilvbGRfdG9wOwotICAgIHNpemVfdCBwc2l6ZSA9IGNzcCAtIG9sZF90b3A7Ci0gICAgbWNodW5rcHRyIHRuID0gY2h1bmtfcGx1c19vZmZzZXQocSwgcHNpemUpOwotICAgIHNldF9mcmVlX3dpdGhfcGludXNlKHEsIHBzaXplLCB0bik7Ci0gICAgaW5zZXJ0X2NodW5rKG0sIHEsIHBzaXplKTsKLSAgfQotCi0gIGNoZWNrX3RvcF9jaHVuayhtLCBtLT50b3ApOwotfQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBTeXN0ZW0gYWxsb2NhdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0vKiBHZXQgbWVtb3J5IGZyb20gc3lzdGVtIHVzaW5nIE1PUkVDT1JFIG9yIE1NQVAgKi8KLXN0YXRpYyB2b2lkKiBzeXNfYWxsb2MobXN0YXRlIG0sIHNpemVfdCBuYikgewotICBjaGFyKiB0YmFzZSA9IENNRkFJTDsKLSAgc2l6ZV90IHRzaXplID0gMDsKLSAgZmxhZ190IG1tYXBfZmxhZyA9IDA7Ci0KLSAgaW5pdF9tcGFyYW1zKCk7Ci0KLSAgLyogRGlyZWN0bHkgbWFwIGxhcmdlIGNodW5rcyAqLwotICBpZiAodXNlX21tYXAobSkgJiYgbmIgPj0gbXBhcmFtcy5tbWFwX3RocmVzaG9sZCkgewotICAgIHZvaWQqIG1lbSA9IG1tYXBfYWxsb2MobSwgbmIpOwotICAgIGlmIChtZW0gIT0gMCkKLSAgICAgIHJldHVybiBtZW07Ci0gIH0KLQotI2lmIFVTRV9NQVhfQUxMT1dFRF9GT09UUFJJTlQKLSAgLyogTWFrZSBzdXJlIHRoZSBmb290cHJpbnQgZG9lc24ndCBncm93IHBhc3QgbWF4X2FsbG93ZWRfZm9vdHByaW50LgotICAgKiBUaGlzIGNvdmVycyBhbGwgY2FzZXMgZXhjZXB0IGZvciB3aGVyZSB3ZSBuZWVkIHRvIHBhZ2UgYWxpZ24sIGJlbG93LgotICAgKi8KLSAgewotICAgIHNpemVfdCBuZXdfZm9vdHByaW50ID0gbS0+Zm9vdHByaW50ICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyYW51bGFyaXR5X2FsaWduKG5iICsgVE9QX0ZPT1RfU0laRSArIFNJWkVfVF9PTkUpOwotICAgIGlmIChuZXdfZm9vdHByaW50IDw9IG0tPmZvb3RwcmludCB8fCAgLyogQ2hlY2sgZm9yIHdyYXAgYXJvdW5kIDAgKi8KLSAgICAgICAgbmV3X2Zvb3RwcmludCA+IG0tPm1heF9hbGxvd2VkX2Zvb3RwcmludCkKLSAgICAgIHJldHVybiAwOwotICB9Ci0jZW5kaWYKLQotICAvKgotICAgIFRyeSBnZXR0aW5nIG1lbW9yeSBpbiBhbnkgb2YgdGhyZWUgd2F5cyAoaW4gbW9zdC1wcmVmZXJyZWQgdG8KLSAgICBsZWFzdC1wcmVmZXJyZWQgb3JkZXIpOgotICAgIDEuIEEgY2FsbCB0byBNT1JFQ09SRSB0aGF0IGNhbiBub3JtYWxseSBjb250aWd1b3VzbHkgZXh0ZW5kIG1lbW9yeS4KLSAgICAgICAoZGlzYWJsZWQgaWYgbm90IE1PUkVDT1JFX0NPTlRJR1VPVVMgb3Igbm90IEhBVkVfTU9SRUNPUkUgb3IKLSAgICAgICBvciBtYWluIHNwYWNlIGlzIG1tYXBwZWQgb3IgYSBwcmV2aW91cyBjb250aWd1b3VzIGNhbGwgZmFpbGVkKQotICAgIDIuIEEgY2FsbCB0byBNTUFQIG5ldyBzcGFjZSAoZGlzYWJsZWQgaWYgbm90IEhBVkVfTU1BUCkuCi0gICAgICAgTm90ZSB0aGF0IHVuZGVyIHRoZSBkZWZhdWx0IHNldHRpbmdzLCBpZiBNT1JFQ09SRSBpcyB1bmFibGUgdG8KLSAgICAgICBmdWxmaWxsIGEgcmVxdWVzdCwgYW5kIEhBVkVfTU1BUCBpcyB0cnVlLCB0aGVuIG1tYXAgaXMKLSAgICAgICB1c2VkIGFzIGEgbm9uY29udGlndW91cyBzeXN0ZW0gYWxsb2NhdG9yLiBUaGlzIGlzIGEgdXNlZnVsIGJhY2t1cAotICAgICAgIHN0cmF0ZWd5IGZvciBzeXN0ZW1zIHdpdGggaG9sZXMgaW4gYWRkcmVzcyBzcGFjZXMgLS0gaW4gdGhpcyBjYXNlCi0gICAgICAgc2JyayBjYW5ub3QgY29udGlndW91c2x5IGV4cGFuZCB0aGUgaGVhcCwgYnV0IG1tYXAgbWF5IGJlIGFibGUgdG8KLSAgICAgICBmaW5kIHNwYWNlLgotICAgIDMuIEEgY2FsbCB0byBNT1JFQ09SRSB0aGF0IGNhbm5vdCB1c3VhbGx5IGNvbnRpZ3VvdXNseSBleHRlbmQgbWVtb3J5LgotICAgICAgIChkaXNhYmxlZCBpZiBub3QgSEFWRV9NT1JFQ09SRSkKLSAgKi8KLQotICBpZiAoTU9SRUNPUkVfQ09OVElHVU9VUyAmJiAhdXNlX25vbmNvbnRpZ3VvdXMobSkpIHsKLSAgICBjaGFyKiBiciA9IENNRkFJTDsKLSAgICBtc2VnbWVudHB0ciBzcyA9IChtLT50b3AgPT0gMCk/IDAgOiBzZWdtZW50X2hvbGRpbmcobSwgKGNoYXIqKW0tPnRvcCk7Ci0gICAgc2l6ZV90IGFzaXplID0gMDsKLSAgICBBQ1FVSVJFX01PUkVDT1JFX0xPQ0soKTsKLQotICAgIGlmIChzcyA9PSAwKSB7ICAvKiBGaXJzdCB0aW1lIHRocm91Z2ggb3IgcmVjb3ZlcnkgKi8KLSAgICAgIGNoYXIqIGJhc2UgPSAoY2hhciopQ0FMTF9NT1JFQ09SRSgwKTsKLSAgICAgIGlmIChiYXNlICE9IENNRkFJTCkgewotICAgICAgICBhc2l6ZSA9IGdyYW51bGFyaXR5X2FsaWduKG5iICsgVE9QX0ZPT1RfU0laRSArIFNJWkVfVF9PTkUpOwotICAgICAgICAvKiBBZGp1c3QgdG8gZW5kIG9uIGEgcGFnZSBib3VuZGFyeSAqLwotICAgICAgICBpZiAoIWlzX3BhZ2VfYWxpZ25lZChiYXNlKSkgewotICAgICAgICAgIGFzaXplICs9IChwYWdlX2FsaWduKChzaXplX3QpYmFzZSkgLSAoc2l6ZV90KWJhc2UpOwotI2lmIFVTRV9NQVhfQUxMT1dFRF9GT09UUFJJTlQKLSAgICAgICAgICAvKiBJZiB0aGUgYWxpZ25tZW50IHB1c2hlcyB1cyBvdmVyIG1heF9hbGxvd2VkX2Zvb3RwcmludCwKLSAgICAgICAgICAgKiBwb2lzb24gdGhlIHVwY29taW5nIGNhbGwgdG8gTU9SRUNPUkUgYW5kIGNvbnRpbnVlLgotICAgICAgICAgICAqLwotICAgICAgICAgIHsKLSAgICAgICAgICAgIHNpemVfdCBuZXdfZm9vdHByaW50ID0gbS0+Zm9vdHByaW50ICsgYXNpemU7Ci0gICAgICAgICAgICBpZiAobmV3X2Zvb3RwcmludCA8PSBtLT5mb290cHJpbnQgfHwgIC8qIENoZWNrIGZvciB3cmFwIGFyb3VuZCAwICovCi0gICAgICAgICAgICAgICAgbmV3X2Zvb3RwcmludCA+IG0tPm1heF9hbGxvd2VkX2Zvb3RwcmludCkgewotICAgICAgICAgICAgICBhc2l6ZSA9IEhBTEZfTUFYX1NJWkVfVDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0jZW5kaWYKLSAgICAgICAgfQotICAgICAgICAvKiBDYW4ndCBjYWxsIE1PUkVDT1JFIGlmIHNpemUgaXMgbmVnYXRpdmUgd2hlbiB0cmVhdGVkIGFzIHNpZ25lZCAqLwotICAgICAgICBpZiAoYXNpemUgPCBIQUxGX01BWF9TSVpFX1QgJiYKLSAgICAgICAgICAgIChiciA9IChjaGFyKikoQ0FMTF9NT1JFQ09SRShhc2l6ZSkpKSA9PSBiYXNlKSB7Ci0gICAgICAgICAgdGJhc2UgPSBiYXNlOwotICAgICAgICAgIHRzaXplID0gYXNpemU7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICAvKiBTdWJ0cmFjdCBvdXQgZXhpc3RpbmcgYXZhaWxhYmxlIHRvcCBzcGFjZSBmcm9tIE1PUkVDT1JFIHJlcXVlc3QuICovCi0gICAgICBhc2l6ZSA9IGdyYW51bGFyaXR5X2FsaWduKG5iIC0gbS0+dG9wc2l6ZSArIFRPUF9GT09UX1NJWkUgKyBTSVpFX1RfT05FKTsKLSAgICAgIC8qIFVzZSBtZW0gaGVyZSBvbmx5IGlmIGl0IGRpZCBjb250aW51b3VzbHkgZXh0ZW5kIG9sZCBzcGFjZSAqLwotICAgICAgaWYgKGFzaXplIDwgSEFMRl9NQVhfU0laRV9UICYmCi0gICAgICAgICAgKGJyID0gKGNoYXIqKShDQUxMX01PUkVDT1JFKGFzaXplKSkpID09IHNzLT5iYXNlK3NzLT5zaXplKSB7Ci0gICAgICAgIHRiYXNlID0gYnI7Ci0gICAgICAgIHRzaXplID0gYXNpemU7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgaWYgKHRiYXNlID09IENNRkFJTCkgeyAgICAvKiBDb3BlIHdpdGggcGFydGlhbCBmYWlsdXJlICovCi0gICAgICBpZiAoYnIgIT0gQ01GQUlMKSB7ICAgIC8qIFRyeSB0byB1c2UvZXh0ZW5kIHRoZSBzcGFjZSB3ZSBkaWQgZ2V0ICovCi0gICAgICAgIGlmIChhc2l6ZSA8IEhBTEZfTUFYX1NJWkVfVCAmJgotICAgICAgICAgICAgYXNpemUgPCBuYiArIFRPUF9GT09UX1NJWkUgKyBTSVpFX1RfT05FKSB7Ci0gICAgICAgICAgc2l6ZV90IGVzaXplID0gZ3JhbnVsYXJpdHlfYWxpZ24obmIgKyBUT1BfRk9PVF9TSVpFICsgU0laRV9UX09ORSAtIGFzaXplKTsKLSAgICAgICAgICBpZiAoZXNpemUgPCBIQUxGX01BWF9TSVpFX1QpIHsKLSAgICAgICAgICAgIGNoYXIqIGVuZCA9IChjaGFyKilDQUxMX01PUkVDT1JFKGVzaXplKTsKLSAgICAgICAgICAgIGlmIChlbmQgIT0gQ01GQUlMKQotICAgICAgICAgICAgICBhc2l6ZSArPSBlc2l6ZTsKLSAgICAgICAgICAgIGVsc2UgeyAgICAgICAgICAgIC8qIENhbid0IHVzZTsgdHJ5IHRvIHJlbGVhc2UgKi8KLSAgICAgICAgICAgICAgQ0FMTF9NT1JFQ09SRSgtYXNpemUpOwotICAgICAgICAgICAgICBiciA9IENNRkFJTDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGlmIChiciAhPSBDTUZBSUwpIHsgICAgLyogVXNlIHRoZSBzcGFjZSB3ZSBkaWQgZ2V0ICovCi0gICAgICAgIHRiYXNlID0gYnI7Ci0gICAgICAgIHRzaXplID0gYXNpemU7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICAgIGRpc2FibGVfY29udGlndW91cyhtKTsgLyogRG9uJ3QgdHJ5IGNvbnRpZ3VvdXMgcGF0aCBpbiB0aGUgZnV0dXJlICovCi0gICAgfQotCi0gICAgUkVMRUFTRV9NT1JFQ09SRV9MT0NLKCk7Ci0gIH0KLQotICBpZiAoSEFWRV9NTUFQICYmIHRiYXNlID09IENNRkFJTCkgeyAgLyogVHJ5IE1NQVAgKi8KLSAgICBzaXplX3QgcmVxID0gbmIgKyBUT1BfRk9PVF9TSVpFICsgU0laRV9UX09ORTsKLSAgICBzaXplX3QgcnNpemUgPSBncmFudWxhcml0eV9hbGlnbihyZXEpOwotICAgIGlmIChyc2l6ZSA+IG5iKSB7IC8qIEZhaWwgaWYgd3JhcHMgYXJvdW5kIHplcm8gKi8KLSAgICAgIGNoYXIqIG1wID0gKGNoYXIqKShDQUxMX01NQVAocnNpemUpKTsKLSAgICAgIGlmIChtcCAhPSBDTUZBSUwpIHsKLSAgICAgICAgdGJhc2UgPSBtcDsKLSAgICAgICAgdHNpemUgPSByc2l6ZTsKLSAgICAgICAgbW1hcF9mbGFnID0gSVNfTU1BUFBFRF9CSVQ7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgaWYgKEhBVkVfTU9SRUNPUkUgJiYgdGJhc2UgPT0gQ01GQUlMKSB7IC8qIFRyeSBub25jb250aWd1b3VzIE1PUkVDT1JFICovCi0gICAgc2l6ZV90IGFzaXplID0gZ3JhbnVsYXJpdHlfYWxpZ24obmIgKyBUT1BfRk9PVF9TSVpFICsgU0laRV9UX09ORSk7Ci0gICAgaWYgKGFzaXplIDwgSEFMRl9NQVhfU0laRV9UKSB7Ci0gICAgICBjaGFyKiBiciA9IENNRkFJTDsKLSAgICAgIGNoYXIqIGVuZCA9IENNRkFJTDsKLSAgICAgIEFDUVVJUkVfTU9SRUNPUkVfTE9DSygpOwotICAgICAgYnIgPSAoY2hhciopKENBTExfTU9SRUNPUkUoYXNpemUpKTsKLSAgICAgIGVuZCA9IChjaGFyKikoQ0FMTF9NT1JFQ09SRSgwKSk7Ci0gICAgICBSRUxFQVNFX01PUkVDT1JFX0xPQ0soKTsKLSAgICAgIGlmIChiciAhPSBDTUZBSUwgJiYgZW5kICE9IENNRkFJTCAmJiBiciA8IGVuZCkgewotICAgICAgICBzaXplX3Qgc3NpemUgPSBlbmQgLSBicjsKLSAgICAgICAgaWYgKHNzaXplID4gbmIgKyBUT1BfRk9PVF9TSVpFKSB7Ci0gICAgICAgICAgdGJhc2UgPSBicjsKLSAgICAgICAgICB0c2l6ZSA9IHNzaXplOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgaWYgKHRiYXNlICE9IENNRkFJTCkgewotCi0gICAgaWYgKChtLT5mb290cHJpbnQgKz0gdHNpemUpID4gbS0+bWF4X2Zvb3RwcmludCkKLSAgICAgIG0tPm1heF9mb290cHJpbnQgPSBtLT5mb290cHJpbnQ7Ci0KLSAgICBpZiAoIWlzX2luaXRpYWxpemVkKG0pKSB7IC8qIGZpcnN0LXRpbWUgaW5pdGlhbGl6YXRpb24gKi8KLSAgICAgIG0tPnNlZy5iYXNlID0gbS0+bGVhc3RfYWRkciA9IHRiYXNlOwotICAgICAgbS0+c2VnLnNpemUgPSB0c2l6ZTsKLSAgICAgIG0tPnNlZy5zZmxhZ3MgPSBtbWFwX2ZsYWc7Ci0gICAgICBtLT5tYWdpYyA9IG1wYXJhbXMubWFnaWM7Ci0gICAgICBpbml0X2JpbnMobSk7Ci0gICAgICBpZiAoaXNfZ2xvYmFsKG0pKQotICAgICAgICBpbml0X3RvcChtLCAobWNodW5rcHRyKXRiYXNlLCB0c2l6ZSAtIFRPUF9GT09UX1NJWkUpOwotICAgICAgZWxzZSB7Ci0gICAgICAgIC8qIE9mZnNldCB0b3AgYnkgZW1iZWRkZWQgbWFsbG9jX3N0YXRlICovCi0gICAgICAgIG1jaHVua3B0ciBtbiA9IG5leHRfY2h1bmsobWVtMmNodW5rKG0pKTsKLSAgICAgICAgaW5pdF90b3AobSwgbW4sIChzaXplX3QpKCh0YmFzZSArIHRzaXplKSAtIChjaGFyKiltbikgLVRPUF9GT09UX1NJWkUpOwotICAgICAgfQotICAgIH0KLQotICAgIGVsc2UgewotICAgICAgLyogVHJ5IHRvIG1lcmdlIHdpdGggYW4gZXhpc3Rpbmcgc2VnbWVudCAqLwotICAgICAgbXNlZ21lbnRwdHIgc3AgPSAmbS0+c2VnOwotICAgICAgd2hpbGUgKHNwICE9IDAgJiYgdGJhc2UgIT0gc3AtPmJhc2UgKyBzcC0+c2l6ZSkKLSAgICAgICAgc3AgPSBzcC0+bmV4dDsKLSAgICAgIGlmIChzcCAhPSAwICYmCi0gICAgICAgICAgIWlzX2V4dGVybl9zZWdtZW50KHNwKSAmJgotICAgICAgICAgIChzcC0+c2ZsYWdzICYgSVNfTU1BUFBFRF9CSVQpID09IG1tYXBfZmxhZyAmJgotICAgICAgICAgIHNlZ21lbnRfaG9sZHMoc3AsIG0tPnRvcCkpIHsgLyogYXBwZW5kICovCi0gICAgICAgIHNwLT5zaXplICs9IHRzaXplOwotICAgICAgICBpbml0X3RvcChtLCBtLT50b3AsIG0tPnRvcHNpemUgKyB0c2l6ZSk7Ci0gICAgICB9Ci0gICAgICBlbHNlIHsKLSAgICAgICAgaWYgKHRiYXNlIDwgbS0+bGVhc3RfYWRkcikKLSAgICAgICAgICBtLT5sZWFzdF9hZGRyID0gdGJhc2U7Ci0gICAgICAgIHNwID0gJm0tPnNlZzsKLSAgICAgICAgd2hpbGUgKHNwICE9IDAgJiYgc3AtPmJhc2UgIT0gdGJhc2UgKyB0c2l6ZSkKLSAgICAgICAgICBzcCA9IHNwLT5uZXh0OwotICAgICAgICBpZiAoc3AgIT0gMCAmJgotICAgICAgICAgICAgIWlzX2V4dGVybl9zZWdtZW50KHNwKSAmJgotICAgICAgICAgICAgKHNwLT5zZmxhZ3MgJiBJU19NTUFQUEVEX0JJVCkgPT0gbW1hcF9mbGFnKSB7Ci0gICAgICAgICAgY2hhciogb2xkYmFzZSA9IHNwLT5iYXNlOwotICAgICAgICAgIHNwLT5iYXNlID0gdGJhc2U7Ci0gICAgICAgICAgc3AtPnNpemUgKz0gdHNpemU7Ci0gICAgICAgICAgcmV0dXJuIHByZXBlbmRfYWxsb2MobSwgdGJhc2UsIG9sZGJhc2UsIG5iKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgICAgYWRkX3NlZ21lbnQobSwgdGJhc2UsIHRzaXplLCBtbWFwX2ZsYWcpOwotICAgICAgfQotICAgIH0KLQotICAgIGlmIChuYiA8IG0tPnRvcHNpemUpIHsgLyogQWxsb2NhdGUgZnJvbSBuZXcgb3IgZXh0ZW5kZWQgdG9wIHNwYWNlICovCi0gICAgICBzaXplX3QgcnNpemUgPSBtLT50b3BzaXplIC09IG5iOwotICAgICAgbWNodW5rcHRyIHAgPSBtLT50b3A7Ci0gICAgICBtY2h1bmtwdHIgciA9IG0tPnRvcCA9IGNodW5rX3BsdXNfb2Zmc2V0KHAsIG5iKTsKLSAgICAgIHItPmhlYWQgPSByc2l6ZSB8IFBJTlVTRV9CSVQ7Ci0gICAgICBzZXRfc2l6ZV9hbmRfcGludXNlX29mX2ludXNlX2NodW5rKG0sIHAsIG5iKTsKLSAgICAgIGNoZWNrX3RvcF9jaHVuayhtLCBtLT50b3ApOwotICAgICAgY2hlY2tfbWFsbG9jZWRfY2h1bmsobSwgY2h1bmsybWVtKHApLCBuYik7Ci0gICAgICByZXR1cm4gY2h1bmsybWVtKHApOwotICAgIH0KLSAgfQotCi0gIE1BTExPQ19GQUlMVVJFX0FDVElPTjsKLSAgcmV0dXJuIDA7Ci19Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBzeXN0ZW0gZGVhbGxvY2F0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLS8qIFVubWFwIGFuZCB1bmxpbmsgYW55IG1tYXBwZWQgc2VnbWVudHMgdGhhdCBkb24ndCBjb250YWluIHVzZWQgY2h1bmtzICovCi1zdGF0aWMgc2l6ZV90IHJlbGVhc2VfdW51c2VkX3NlZ21lbnRzKG1zdGF0ZSBtKSB7Ci0gIHNpemVfdCByZWxlYXNlZCA9IDA7Ci0gIG1zZWdtZW50cHRyIHByZWQgPSAmbS0+c2VnOwotICBtc2VnbWVudHB0ciBzcCA9IHByZWQtPm5leHQ7Ci0gIHdoaWxlIChzcCAhPSAwKSB7Ci0gICAgY2hhciogYmFzZSA9IHNwLT5iYXNlOwotICAgIHNpemVfdCBzaXplID0gc3AtPnNpemU7Ci0gICAgbXNlZ21lbnRwdHIgbmV4dCA9IHNwLT5uZXh0OwotICAgIGlmIChpc19tbWFwcGVkX3NlZ21lbnQoc3ApICYmICFpc19leHRlcm5fc2VnbWVudChzcCkpIHsKLSAgICAgIG1jaHVua3B0ciBwID0gYWxpZ25fYXNfY2h1bmsoYmFzZSk7Ci0gICAgICBzaXplX3QgcHNpemUgPSBjaHVua3NpemUocCk7Ci0gICAgICAvKiBDYW4gdW5tYXAgaWYgZmlyc3QgY2h1bmsgaG9sZHMgZW50aXJlIHNlZ21lbnQgYW5kIG5vdCBwaW5uZWQgKi8KLSAgICAgIGlmICghY2ludXNlKHApICYmIChjaGFyKilwICsgcHNpemUgPj0gYmFzZSArIHNpemUgLSBUT1BfRk9PVF9TSVpFKSB7Ci0gICAgICAgIHRjaHVua3B0ciB0cCA9ICh0Y2h1bmtwdHIpcDsKLSAgICAgICAgYXNzZXJ0KHNlZ21lbnRfaG9sZHMoc3AsIChjaGFyKilzcCkpOwotICAgICAgICBpZiAocCA9PSBtLT5kdikgewotICAgICAgICAgIG0tPmR2ID0gMDsKLSAgICAgICAgICBtLT5kdnNpemUgPSAwOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgIHVubGlua19sYXJnZV9jaHVuayhtLCB0cCk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKENBTExfTVVOTUFQKGJhc2UsIHNpemUpID09IDApIHsKLSAgICAgICAgICByZWxlYXNlZCArPSBzaXplOwotICAgICAgICAgIG0tPmZvb3RwcmludCAtPSBzaXplOwotICAgICAgICAgIC8qIHVubGluayBvYnNvbGV0ZWQgcmVjb3JkICovCi0gICAgICAgICAgc3AgPSBwcmVkOwotICAgICAgICAgIHNwLT5uZXh0ID0gbmV4dDsKLSAgICAgICAgfQotICAgICAgICBlbHNlIHsgLyogYmFjayBvdXQgaWYgY2Fubm90IHVubWFwICovCi0gICAgICAgICAgaW5zZXJ0X2xhcmdlX2NodW5rKG0sIHRwLCBwc2l6ZSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcHJlZCA9IHNwOwotICAgIHNwID0gbmV4dDsKLSAgfQotICByZXR1cm4gcmVsZWFzZWQ7Ci19Ci0KLXN0YXRpYyBpbnQgc3lzX3RyaW0obXN0YXRlIG0sIHNpemVfdCBwYWQpIHsKLSAgc2l6ZV90IHJlbGVhc2VkID0gMDsKLSAgaWYgKHBhZCA8IE1BWF9SRVFVRVNUICYmIGlzX2luaXRpYWxpemVkKG0pKSB7Ci0gICAgcGFkICs9IFRPUF9GT09UX1NJWkU7IC8qIGVuc3VyZSBlbm91Z2ggcm9vbSBmb3Igc2VnbWVudCBvdmVyaGVhZCAqLwotCi0gICAgaWYgKG0tPnRvcHNpemUgPiBwYWQpIHsKLSAgICAgIC8qIFNocmluayB0b3Agc3BhY2UgaW4gZ3JhbnVsYXJpdHktc2l6ZSB1bml0cywga2VlcGluZyBhdCBsZWFzdCBvbmUgKi8KLSAgICAgIHNpemVfdCB1bml0ID0gbXBhcmFtcy5ncmFudWxhcml0eTsKLSAgICAgIHNpemVfdCBleHRyYSA9ICgobS0+dG9wc2l6ZSAtIHBhZCArICh1bml0IC0gU0laRV9UX09ORSkpIC8gdW5pdCAtCi0gICAgICAgICAgICAgICAgICAgICAgU0laRV9UX09ORSkgKiB1bml0OwotICAgICAgbXNlZ21lbnRwdHIgc3AgPSBzZWdtZW50X2hvbGRpbmcobSwgKGNoYXIqKW0tPnRvcCk7Ci0KLSAgICAgIGlmICghaXNfZXh0ZXJuX3NlZ21lbnQoc3ApKSB7Ci0gICAgICAgIGlmIChpc19tbWFwcGVkX3NlZ21lbnQoc3ApKSB7Ci0gICAgICAgICAgaWYgKEhBVkVfTU1BUCAmJgotICAgICAgICAgICAgICBzcC0+c2l6ZSA+PSBleHRyYSAmJgotICAgICAgICAgICAgICAhaGFzX3NlZ21lbnRfbGluayhtLCBzcCkpIHsgLyogY2FuJ3Qgc2hyaW5rIGlmIHBpbm5lZCAqLwotICAgICAgICAgICAgc2l6ZV90IG5ld3NpemUgPSBzcC0+c2l6ZSAtIGV4dHJhOwotICAgICAgICAgICAgLyogUHJlZmVyIG1yZW1hcCwgZmFsbCBiYWNrIHRvIG11bm1hcCAqLwotICAgICAgICAgICAgaWYgKChDQUxMX01SRU1BUChzcC0+YmFzZSwgc3AtPnNpemUsIG5ld3NpemUsIDApICE9IE1GQUlMKSB8fAotICAgICAgICAgICAgICAgIChDQUxMX01VTk1BUChzcC0+YmFzZSArIG5ld3NpemUsIGV4dHJhKSA9PSAwKSkgewotICAgICAgICAgICAgICByZWxlYXNlZCA9IGV4dHJhOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChIQVZFX01PUkVDT1JFKSB7Ci0gICAgICAgICAgaWYgKGV4dHJhID49IEhBTEZfTUFYX1NJWkVfVCkgLyogQXZvaWQgd3JhcHBpbmcgbmVnYXRpdmUgKi8KLSAgICAgICAgICAgIGV4dHJhID0gKEhBTEZfTUFYX1NJWkVfVCkgKyBTSVpFX1RfT05FIC0gdW5pdDsKLSAgICAgICAgICBBQ1FVSVJFX01PUkVDT1JFX0xPQ0soKTsKLSAgICAgICAgICB7Ci0gICAgICAgICAgICAvKiBNYWtlIHN1cmUgZW5kIG9mIG1lbW9yeSBpcyB3aGVyZSB3ZSBsYXN0IHNldCBpdC4gKi8KLSAgICAgICAgICAgIGNoYXIqIG9sZF9iciA9IChjaGFyKikoQ0FMTF9NT1JFQ09SRSgwKSk7Ci0gICAgICAgICAgICBpZiAob2xkX2JyID09IHNwLT5iYXNlICsgc3AtPnNpemUpIHsKLSAgICAgICAgICAgICAgY2hhciogcmVsX2JyID0gKGNoYXIqKShDQUxMX01PUkVDT1JFKC1leHRyYSkpOwotICAgICAgICAgICAgICBjaGFyKiBuZXdfYnIgPSAoY2hhciopKENBTExfTU9SRUNPUkUoMCkpOwotICAgICAgICAgICAgICBpZiAocmVsX2JyICE9IENNRkFJTCAmJiBuZXdfYnIgPCBvbGRfYnIpCi0gICAgICAgICAgICAgICAgcmVsZWFzZWQgPSBvbGRfYnIgLSBuZXdfYnI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICAgIFJFTEVBU0VfTU9SRUNPUkVfTE9DSygpOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIGlmIChyZWxlYXNlZCAhPSAwKSB7Ci0gICAgICAgIHNwLT5zaXplIC09IHJlbGVhc2VkOwotICAgICAgICBtLT5mb290cHJpbnQgLT0gcmVsZWFzZWQ7Ci0gICAgICAgIGluaXRfdG9wKG0sIG0tPnRvcCwgbS0+dG9wc2l6ZSAtIHJlbGVhc2VkKTsKLSAgICAgICAgY2hlY2tfdG9wX2NodW5rKG0sIG0tPnRvcCk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLyogVW5tYXAgYW55IHVudXNlZCBtbWFwcGVkIHNlZ21lbnRzICovCi0gICAgaWYgKEhBVkVfTU1BUCkKLSAgICAgIHJlbGVhc2VkICs9IHJlbGVhc2VfdW51c2VkX3NlZ21lbnRzKG0pOwotCi0gICAgLyogT24gZmFpbHVyZSwgZGlzYWJsZSBhdXRvdHJpbSB0byBhdm9pZCByZXBlYXRlZCBmYWlsZWQgZnV0dXJlIGNhbGxzICovCi0gICAgaWYgKHJlbGVhc2VkID09IDApCi0gICAgICBtLT50cmltX2NoZWNrID0gTUFYX1NJWkVfVDsKLSAgfQotCi0gIHJldHVybiAocmVsZWFzZWQgIT0gMCk/IDEgOiAwOwotfQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIG1hbGxvYyBzdXBwb3J0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0vKiBhbGxvY2F0ZSBhIGxhcmdlIHJlcXVlc3QgZnJvbSB0aGUgYmVzdCBmaXR0aW5nIGNodW5rIGluIGEgdHJlZWJpbiAqLwotc3RhdGljIHZvaWQqIHRtYWxsb2NfbGFyZ2UobXN0YXRlIG0sIHNpemVfdCBuYikgewotICB0Y2h1bmtwdHIgdiA9IDA7Ci0gIHNpemVfdCByc2l6ZSA9IC1uYjsgLyogVW5zaWduZWQgbmVnYXRpb24gKi8KLSAgdGNodW5rcHRyIHQ7Ci0gIGJpbmRleF90IGlkeDsKLSAgY29tcHV0ZV90cmVlX2luZGV4KG5iLCBpZHgpOwotCi0gIGlmICgodCA9ICp0cmVlYmluX2F0KG0sIGlkeCkpICE9IDApIHsKLSAgICAvKiBUcmF2ZXJzZSB0cmVlIGZvciB0aGlzIGJpbiBsb29raW5nIGZvciBub2RlIHdpdGggc2l6ZSA9PSBuYiAqLwotICAgIHNpemVfdCBzaXplYml0cyA9IG5iIDw8IGxlZnRzaGlmdF9mb3JfdHJlZV9pbmRleChpZHgpOwotICAgIHRjaHVua3B0ciByc3QgPSAwOyAgLyogVGhlIGRlZXBlc3QgdW50YWtlbiByaWdodCBzdWJ0cmVlICovCi0gICAgZm9yICg7OykgewotICAgICAgdGNodW5rcHRyIHJ0OwotICAgICAgc2l6ZV90IHRyZW0gPSBjaHVua3NpemUodCkgLSBuYjsKLSAgICAgIGlmICh0cmVtIDwgcnNpemUpIHsKLSAgICAgICAgdiA9IHQ7Ci0gICAgICAgIGlmICgocnNpemUgPSB0cmVtKSA9PSAwKQotICAgICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgcnQgPSB0LT5jaGlsZFsxXTsKLSAgICAgIHQgPSB0LT5jaGlsZFsoc2l6ZWJpdHMgPj4gKFNJWkVfVF9CSVRTSVpFLVNJWkVfVF9PTkUpKSAmIDFdOwotICAgICAgaWYgKHJ0ICE9IDAgJiYgcnQgIT0gdCkKLSAgICAgICAgcnN0ID0gcnQ7Ci0gICAgICBpZiAodCA9PSAwKSB7Ci0gICAgICAgIHQgPSByc3Q7IC8qIHNldCB0IHRvIGxlYXN0IHN1YnRyZWUgaG9sZGluZyBzaXplcyA+IG5iICovCi0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgICAgc2l6ZWJpdHMgPDw9IDE7Ci0gICAgfQotICB9Ci0KLSAgaWYgKHQgPT0gMCAmJiB2ID09IDApIHsgLyogc2V0IHQgdG8gcm9vdCBvZiBuZXh0IG5vbi1lbXB0eSB0cmVlYmluICovCi0gICAgYmlubWFwX3QgbGVmdGJpdHMgPSBsZWZ0X2JpdHMoaWR4MmJpdChpZHgpKSAmIG0tPnRyZWVtYXA7Ci0gICAgaWYgKGxlZnRiaXRzICE9IDApIHsKLSAgICAgIGJpbmRleF90IGk7Ci0gICAgICBiaW5tYXBfdCBsZWFzdGJpdCA9IGxlYXN0X2JpdChsZWZ0Yml0cyk7Ci0gICAgICBjb21wdXRlX2JpdDJpZHgobGVhc3RiaXQsIGkpOwotICAgICAgdCA9ICp0cmVlYmluX2F0KG0sIGkpOwotICAgIH0KLSAgfQotCi0gIHdoaWxlICh0ICE9IDApIHsgLyogZmluZCBzbWFsbGVzdCBvZiB0cmVlIG9yIHN1YnRyZWUgKi8KLSAgICBzaXplX3QgdHJlbSA9IGNodW5rc2l6ZSh0KSAtIG5iOwotICAgIGlmICh0cmVtIDwgcnNpemUpIHsKLSAgICAgIHJzaXplID0gdHJlbTsKLSAgICAgIHYgPSB0OwotICAgIH0KLSAgICB0ID0gbGVmdG1vc3RfY2hpbGQodCk7Ci0gIH0KLQotICAvKiAgSWYgZHYgaXMgYSBiZXR0ZXIgZml0LCByZXR1cm4gMCBzbyBtYWxsb2Mgd2lsbCB1c2UgaXQgKi8KLSAgaWYgKHYgIT0gMCAmJiByc2l6ZSA8IChzaXplX3QpKG0tPmR2c2l6ZSAtIG5iKSkgewotICAgIGlmIChSVENIRUNLKG9rX2FkZHJlc3MobSwgdikpKSB7IC8qIHNwbGl0ICovCi0gICAgICBtY2h1bmtwdHIgciA9IGNodW5rX3BsdXNfb2Zmc2V0KHYsIG5iKTsKLSAgICAgIGFzc2VydChjaHVua3NpemUodikgPT0gcnNpemUgKyBuYik7Ci0gICAgICBpZiAoUlRDSEVDSyhva19uZXh0KHYsIHIpKSkgewotICAgICAgICB1bmxpbmtfbGFyZ2VfY2h1bmsobSwgdik7Ci0gICAgICAgIGlmIChyc2l6ZSA8IE1JTl9DSFVOS19TSVpFKQotICAgICAgICAgIHNldF9pbnVzZV9hbmRfcGludXNlKG0sIHYsIChyc2l6ZSArIG5iKSk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgIHNldF9zaXplX2FuZF9waW51c2Vfb2ZfaW51c2VfY2h1bmsobSwgdiwgbmIpOwotICAgICAgICAgIHNldF9zaXplX2FuZF9waW51c2Vfb2ZfZnJlZV9jaHVuayhyLCByc2l6ZSk7Ci0gICAgICAgICAgaW5zZXJ0X2NodW5rKG0sIHIsIHJzaXplKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gY2h1bmsybWVtKHYpOwotICAgICAgfQotICAgIH0KLSAgICBDT1JSVVBUSU9OX0VSUk9SX0FDVElPTihtKTsKLSAgfQotICByZXR1cm4gMDsKLX0KLQotLyogYWxsb2NhdGUgYSBzbWFsbCByZXF1ZXN0IGZyb20gdGhlIGJlc3QgZml0dGluZyBjaHVuayBpbiBhIHRyZWViaW4gKi8KLXN0YXRpYyB2b2lkKiB0bWFsbG9jX3NtYWxsKG1zdGF0ZSBtLCBzaXplX3QgbmIpIHsKLSAgdGNodW5rcHRyIHQsIHY7Ci0gIHNpemVfdCByc2l6ZTsKLSAgYmluZGV4X3QgaTsKLSAgYmlubWFwX3QgbGVhc3RiaXQgPSBsZWFzdF9iaXQobS0+dHJlZW1hcCk7Ci0gIGNvbXB1dGVfYml0MmlkeChsZWFzdGJpdCwgaSk7Ci0KLSAgdiA9IHQgPSAqdHJlZWJpbl9hdChtLCBpKTsKLSAgcnNpemUgPSBjaHVua3NpemUodCkgLSBuYjsKLQotICB3aGlsZSAoKHQgPSBsZWZ0bW9zdF9jaGlsZCh0KSkgIT0gMCkgewotICAgIHNpemVfdCB0cmVtID0gY2h1bmtzaXplKHQpIC0gbmI7Ci0gICAgaWYgKHRyZW0gPCByc2l6ZSkgewotICAgICAgcnNpemUgPSB0cmVtOwotICAgICAgdiA9IHQ7Ci0gICAgfQotICB9Ci0KLSAgaWYgKFJUQ0hFQ0sob2tfYWRkcmVzcyhtLCB2KSkpIHsKLSAgICBtY2h1bmtwdHIgciA9IGNodW5rX3BsdXNfb2Zmc2V0KHYsIG5iKTsKLSAgICBhc3NlcnQoY2h1bmtzaXplKHYpID09IHJzaXplICsgbmIpOwotICAgIGlmIChSVENIRUNLKG9rX25leHQodiwgcikpKSB7Ci0gICAgICB1bmxpbmtfbGFyZ2VfY2h1bmsobSwgdik7Ci0gICAgICBpZiAocnNpemUgPCBNSU5fQ0hVTktfU0laRSkKLSAgICAgICAgc2V0X2ludXNlX2FuZF9waW51c2UobSwgdiwgKHJzaXplICsgbmIpKTsKLSAgICAgIGVsc2UgewotICAgICAgICBzZXRfc2l6ZV9hbmRfcGludXNlX29mX2ludXNlX2NodW5rKG0sIHYsIG5iKTsKLSAgICAgICAgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9mcmVlX2NodW5rKHIsIHJzaXplKTsKLSAgICAgICAgcmVwbGFjZV9kdihtLCByLCByc2l6ZSk7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gY2h1bmsybWVtKHYpOwotICAgIH0KLSAgfQotCi0gIENPUlJVUFRJT05fRVJST1JfQUNUSU9OKG0pOwotICByZXR1cm4gMDsKLX0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHJlYWxsb2Mgc3VwcG9ydCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotc3RhdGljIHZvaWQqIGludGVybmFsX3JlYWxsb2MobXN0YXRlIG0sIHZvaWQqIG9sZG1lbSwgc2l6ZV90IGJ5dGVzKSB7Ci0gIGlmIChieXRlcyA+PSBNQVhfUkVRVUVTVCkgewotICAgIE1BTExPQ19GQUlMVVJFX0FDVElPTjsKLSAgICByZXR1cm4gMDsKLSAgfQotICBpZiAoIVBSRUFDVElPTihtKSkgewotICAgIG1jaHVua3B0ciBvbGRwID0gbWVtMmNodW5rKG9sZG1lbSk7Ci0gICAgc2l6ZV90IG9sZHNpemUgPSBjaHVua3NpemUob2xkcCk7Ci0gICAgbWNodW5rcHRyIG5leHQgPSBjaHVua19wbHVzX29mZnNldChvbGRwLCBvbGRzaXplKTsKLSAgICBtY2h1bmtwdHIgbmV3cCA9IDA7Ci0gICAgdm9pZCogZXh0cmEgPSAwOwotCi0gICAgLyogVHJ5IHRvIGVpdGhlciBzaHJpbmsgb3IgZXh0ZW5kIGludG8gdG9wLiBFbHNlIG1hbGxvYy1jb3B5LWZyZWUgKi8KLQotICAgIGlmIChSVENIRUNLKG9rX2FkZHJlc3MobSwgb2xkcCkgJiYgb2tfY2ludXNlKG9sZHApICYmCi0gICAgICAgICAgICAgICAgb2tfbmV4dChvbGRwLCBuZXh0KSAmJiBva19waW51c2UobmV4dCkpKSB7Ci0gICAgICBzaXplX3QgbmIgPSByZXF1ZXN0MnNpemUoYnl0ZXMpOwotICAgICAgaWYgKGlzX21tYXBwZWQob2xkcCkpCi0gICAgICAgIG5ld3AgPSBtbWFwX3Jlc2l6ZShtLCBvbGRwLCBuYik7Ci0gICAgICBlbHNlIGlmIChvbGRzaXplID49IG5iKSB7IC8qIGFscmVhZHkgYmlnIGVub3VnaCAqLwotICAgICAgICBzaXplX3QgcnNpemUgPSBvbGRzaXplIC0gbmI7Ci0gICAgICAgIG5ld3AgPSBvbGRwOwotICAgICAgICBpZiAocnNpemUgPj0gTUlOX0NIVU5LX1NJWkUpIHsKLSAgICAgICAgICBtY2h1bmtwdHIgcmVtYWluZGVyID0gY2h1bmtfcGx1c19vZmZzZXQobmV3cCwgbmIpOwotICAgICAgICAgIHNldF9pbnVzZShtLCBuZXdwLCBuYik7Ci0gICAgICAgICAgc2V0X2ludXNlKG0sIHJlbWFpbmRlciwgcnNpemUpOwotICAgICAgICAgIGV4dHJhID0gY2h1bmsybWVtKHJlbWFpbmRlcik7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGVsc2UgaWYgKG5leHQgPT0gbS0+dG9wICYmIG9sZHNpemUgKyBtLT50b3BzaXplID4gbmIpIHsKLSAgICAgICAgLyogRXhwYW5kIGludG8gdG9wICovCi0gICAgICAgIHNpemVfdCBuZXdzaXplID0gb2xkc2l6ZSArIG0tPnRvcHNpemU7Ci0gICAgICAgIHNpemVfdCBuZXd0b3BzaXplID0gbmV3c2l6ZSAtIG5iOwotICAgICAgICBtY2h1bmtwdHIgbmV3dG9wID0gY2h1bmtfcGx1c19vZmZzZXQob2xkcCwgbmIpOwotICAgICAgICBzZXRfaW51c2UobSwgb2xkcCwgbmIpOwotICAgICAgICBuZXd0b3AtPmhlYWQgPSBuZXd0b3BzaXplIHxQSU5VU0VfQklUOwotICAgICAgICBtLT50b3AgPSBuZXd0b3A7Ci0gICAgICAgIG0tPnRvcHNpemUgPSBuZXd0b3BzaXplOwotICAgICAgICBuZXdwID0gb2xkcDsKLSAgICAgIH0KLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICBVU0FHRV9FUlJPUl9BQ1RJT04obSwgb2xkbWVtKTsKLSAgICAgIFBPU1RBQ1RJT04obSk7Ci0gICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBQT1NUQUNUSU9OKG0pOwotCi0gICAgaWYgKG5ld3AgIT0gMCkgewotICAgICAgaWYgKGV4dHJhICE9IDApIHsKLSAgICAgICAgaW50ZXJuYWxfZnJlZShtLCBleHRyYSk7Ci0gICAgICB9Ci0gICAgICBjaGVja19pbnVzZV9jaHVuayhtLCBuZXdwKTsKLSAgICAgIHJldHVybiBjaHVuazJtZW0obmV3cCk7Ci0gICAgfQotICAgIGVsc2UgewotICAgICAgdm9pZCogbmV3bWVtID0gaW50ZXJuYWxfbWFsbG9jKG0sIGJ5dGVzKTsKLSAgICAgIGlmIChuZXdtZW0gIT0gMCkgewotICAgICAgICBzaXplX3Qgb2MgPSBvbGRzaXplIC0gb3ZlcmhlYWRfZm9yKG9sZHApOwotICAgICAgICBtZW1jcHkobmV3bWVtLCBvbGRtZW0sIChvYyA8IGJ5dGVzKT8gb2MgOiBieXRlcyk7Ci0gICAgICAgIGludGVybmFsX2ZyZWUobSwgb2xkbWVtKTsKLSAgICAgIH0KLSAgICAgIHJldHVybiBuZXdtZW07Ci0gICAgfQotICB9Ci0gIHJldHVybiAwOwotfQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gbWVtYWxpZ24gc3VwcG9ydCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi1zdGF0aWMgdm9pZCogaW50ZXJuYWxfbWVtYWxpZ24obXN0YXRlIG0sIHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBieXRlcykgewotICBpZiAoYWxpZ25tZW50IDw9IE1BTExPQ19BTElHTk1FTlQpICAgIC8qIENhbiBqdXN0IHVzZSBtYWxsb2MgKi8KLSAgICByZXR1cm4gaW50ZXJuYWxfbWFsbG9jKG0sIGJ5dGVzKTsKLSAgaWYgKGFsaWdubWVudCA8ICBNSU5fQ0hVTktfU0laRSkgLyogbXVzdCBiZSBhdCBsZWFzdCBhIG1pbmltdW0gY2h1bmsgc2l6ZSAqLwotICAgIGFsaWdubWVudCA9IE1JTl9DSFVOS19TSVpFOwotICBpZiAoKGFsaWdubWVudCAmIChhbGlnbm1lbnQtU0laRV9UX09ORSkpICE9IDApIHsvKiBFbnN1cmUgYSBwb3dlciBvZiAyICovCi0gICAgc2l6ZV90IGEgPSBNQUxMT0NfQUxJR05NRU5UIDw8IDE7Ci0gICAgd2hpbGUgKGEgPCBhbGlnbm1lbnQpIGEgPDw9IDE7Ci0gICAgYWxpZ25tZW50ID0gYTsKLSAgfQotCi0gIGlmIChieXRlcyA+PSBNQVhfUkVRVUVTVCAtIGFsaWdubWVudCkgewotICAgIGlmIChtICE9IDApICB7IC8qIFRlc3QgaXNuJ3QgbmVlZGVkIGJ1dCBhdm9pZHMgY29tcGlsZXIgd2FybmluZyAqLwotICAgICAgTUFMTE9DX0ZBSUxVUkVfQUNUSU9OOwotICAgIH0KLSAgfQotICBlbHNlIHsKLSAgICBzaXplX3QgbmIgPSByZXF1ZXN0MnNpemUoYnl0ZXMpOwotICAgIHNpemVfdCByZXEgPSBuYiArIGFsaWdubWVudCArIE1JTl9DSFVOS19TSVpFIC0gQ0hVTktfT1ZFUkhFQUQ7Ci0gICAgY2hhciogbWVtID0gKGNoYXIqKWludGVybmFsX21hbGxvYyhtLCByZXEpOwotICAgIGlmIChtZW0gIT0gMCkgewotICAgICAgdm9pZCogbGVhZGVyID0gMDsKLSAgICAgIHZvaWQqIHRyYWlsZXIgPSAwOwotICAgICAgbWNodW5rcHRyIHAgPSBtZW0yY2h1bmsobWVtKTsKLQotICAgICAgaWYgKFBSRUFDVElPTihtKSkgcmV0dXJuIDA7Ci0gICAgICBpZiAoKCgoc2l6ZV90KShtZW0pKSAlIGFsaWdubWVudCkgIT0gMCkgeyAvKiBtaXNhbGlnbmVkICovCi0gICAgICAgIC8qCi0gICAgICAgICAgRmluZCBhbiBhbGlnbmVkIHNwb3QgaW5zaWRlIGNodW5rLiAgU2luY2Ugd2UgbmVlZCB0byBnaXZlCi0gICAgICAgICAgYmFjayBsZWFkaW5nIHNwYWNlIGluIGEgY2h1bmsgb2YgYXQgbGVhc3QgTUlOX0NIVU5LX1NJWkUsIGlmCi0gICAgICAgICAgdGhlIGZpcnN0IGNhbGN1bGF0aW9uIHBsYWNlcyB1cyBhdCBhIHNwb3Qgd2l0aCBsZXNzIHRoYW4KLSAgICAgICAgICBNSU5fQ0hVTktfU0laRSBsZWFkZXIsIHdlIGNhbiBtb3ZlIHRvIHRoZSBuZXh0IGFsaWduZWQgc3BvdC4KLSAgICAgICAgICBXZSd2ZSBhbGxvY2F0ZWQgZW5vdWdoIHRvdGFsIHJvb20gc28gdGhhdCB0aGlzIGlzIGFsd2F5cwotICAgICAgICAgIHBvc3NpYmxlLgotICAgICAgICAqLwotICAgICAgICBjaGFyKiBiciA9IChjaGFyKiltZW0yY2h1bmsoKHNpemVfdCkoKChzaXplX3QpKG1lbSArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxpZ25tZW50IC0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTSVpFX1RfT05FKSkgJgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLWFsaWdubWVudCkpOwotICAgICAgICBjaGFyKiBwb3MgPSAoKHNpemVfdCkoYnIgLSAoY2hhciopKHApKSA+PSBNSU5fQ0hVTktfU0laRSk/Ci0gICAgICAgICAgYnIgOiBicithbGlnbm1lbnQ7Ci0gICAgICAgIG1jaHVua3B0ciBuZXdwID0gKG1jaHVua3B0cilwb3M7Ci0gICAgICAgIHNpemVfdCBsZWFkc2l6ZSA9IHBvcyAtIChjaGFyKikocCk7Ci0gICAgICAgIHNpemVfdCBuZXdzaXplID0gY2h1bmtzaXplKHApIC0gbGVhZHNpemU7Ci0KLSAgICAgICAgaWYgKGlzX21tYXBwZWQocCkpIHsgLyogRm9yIG1tYXBwZWQgY2h1bmtzLCBqdXN0IGFkanVzdCBvZmZzZXQgKi8KLSAgICAgICAgICBuZXdwLT5wcmV2X2Zvb3QgPSBwLT5wcmV2X2Zvb3QgKyBsZWFkc2l6ZTsKLSAgICAgICAgICBuZXdwLT5oZWFkID0gKG5ld3NpemV8Q0lOVVNFX0JJVCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7IC8qIE90aGVyd2lzZSwgZ2l2ZSBiYWNrIGxlYWRlciwgdXNlIHRoZSByZXN0ICovCi0gICAgICAgICAgc2V0X2ludXNlKG0sIG5ld3AsIG5ld3NpemUpOwotICAgICAgICAgIHNldF9pbnVzZShtLCBwLCBsZWFkc2l6ZSk7Ci0gICAgICAgICAgbGVhZGVyID0gY2h1bmsybWVtKHApOwotICAgICAgICB9Ci0gICAgICAgIHAgPSBuZXdwOwotICAgICAgfQotCi0gICAgICAvKiBHaXZlIGJhY2sgc3BhcmUgcm9vbSBhdCB0aGUgZW5kICovCi0gICAgICBpZiAoIWlzX21tYXBwZWQocCkpIHsKLSAgICAgICAgc2l6ZV90IHNpemUgPSBjaHVua3NpemUocCk7Ci0gICAgICAgIGlmIChzaXplID4gbmIgKyBNSU5fQ0hVTktfU0laRSkgewotICAgICAgICAgIHNpemVfdCByZW1haW5kZXJfc2l6ZSA9IHNpemUgLSBuYjsKLSAgICAgICAgICBtY2h1bmtwdHIgcmVtYWluZGVyID0gY2h1bmtfcGx1c19vZmZzZXQocCwgbmIpOwotICAgICAgICAgIHNldF9pbnVzZShtLCBwLCBuYik7Ci0gICAgICAgICAgc2V0X2ludXNlKG0sIHJlbWFpbmRlciwgcmVtYWluZGVyX3NpemUpOwotICAgICAgICAgIHRyYWlsZXIgPSBjaHVuazJtZW0ocmVtYWluZGVyKTsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICBhc3NlcnQgKGNodW5rc2l6ZShwKSA+PSBuYik7Ci0gICAgICBhc3NlcnQoKCgoc2l6ZV90KShjaHVuazJtZW0ocCkpKSAlIGFsaWdubWVudCkgPT0gMCk7Ci0gICAgICBjaGVja19pbnVzZV9jaHVuayhtLCBwKTsKLSAgICAgIFBPU1RBQ1RJT04obSk7Ci0gICAgICBpZiAobGVhZGVyICE9IDApIHsKLSAgICAgICAgaW50ZXJuYWxfZnJlZShtLCBsZWFkZXIpOwotICAgICAgfQotICAgICAgaWYgKHRyYWlsZXIgIT0gMCkgewotICAgICAgICBpbnRlcm5hbF9mcmVlKG0sIHRyYWlsZXIpOwotICAgICAgfQotICAgICAgcmV0dXJuIGNodW5rMm1lbShwKTsKLSAgICB9Ci0gIH0KLSAgcmV0dXJuIDA7Ci19Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBjb21hbGxvYy9jb2FsbG9jIHN1cHBvcnQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLXN0YXRpYyB2b2lkKiogaWFsbG9jKG1zdGF0ZSBtLAotICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG5fZWxlbWVudHMsCi0gICAgICAgICAgICAgICAgICAgICBzaXplX3QqIHNpemVzLAotICAgICAgICAgICAgICAgICAgICAgaW50IG9wdHMsCi0gICAgICAgICAgICAgICAgICAgICB2b2lkKiBjaHVua3NbXSkgewotICAvKgotICAgIFRoaXMgcHJvdmlkZXMgY29tbW9uIHN1cHBvcnQgZm9yIGluZGVwZW5kZW50X1ggcm91dGluZXMsIGhhbmRsaW5nCi0gICAgYWxsIG9mIHRoZSBjb21iaW5hdGlvbnMgdGhhdCBjYW4gcmVzdWx0LgotCi0gICAgVGhlIG9wdHMgYXJnIGhhczoKLSAgICBiaXQgMCBzZXQgaWYgYWxsIGVsZW1lbnRzIGFyZSBzYW1lIHNpemUgKHVzaW5nIHNpemVzWzBdKQotICAgIGJpdCAxIHNldCBpZiBlbGVtZW50cyBzaG91bGQgYmUgemVyb2VkCi0gICovCi0KLSAgc2l6ZV90ICAgIGVsZW1lbnRfc2l6ZTsgICAvKiBjaHVua3NpemUgb2YgZWFjaCBlbGVtZW50LCBpZiBhbGwgc2FtZSAqLwotICBzaXplX3QgICAgY29udGVudHNfc2l6ZTsgIC8qIHRvdGFsIHNpemUgb2YgZWxlbWVudHMgKi8KLSAgc2l6ZV90ICAgIGFycmF5X3NpemU7ICAgICAvKiByZXF1ZXN0IHNpemUgb2YgcG9pbnRlciBhcnJheSAqLwotICB2b2lkKiAgICAgbWVtOyAgICAgICAgICAgIC8qIG1hbGxvY2VkIGFnZ3JlZ2F0ZSBzcGFjZSAqLwotICBtY2h1bmtwdHIgcDsgICAgICAgICAgICAgIC8qIGNvcnJlc3BvbmRpbmcgY2h1bmsgKi8KLSAgc2l6ZV90ICAgIHJlbWFpbmRlcl9zaXplOyAvKiByZW1haW5pbmcgYnl0ZXMgd2hpbGUgc3BsaXR0aW5nICovCi0gIHZvaWQqKiAgICBtYXJyYXk7ICAgICAgICAgLyogZWl0aGVyICJjaHVua3MiIG9yIG1hbGxvY2VkIHB0ciBhcnJheSAqLwotICBtY2h1bmtwdHIgYXJyYXlfY2h1bms7ICAgIC8qIGNodW5rIGZvciBtYWxsb2NlZCBwdHIgYXJyYXkgKi8KLSAgZmxhZ190ICAgIHdhc19lbmFibGVkOyAgICAvKiB0byBkaXNhYmxlIG1tYXAgKi8KLSAgc2l6ZV90ICAgIHNpemU7Ci0gIHNpemVfdCAgICBpOwotCi0gIC8qIGNvbXB1dGUgYXJyYXkgbGVuZ3RoLCBpZiBuZWVkZWQgKi8KLSAgaWYgKGNodW5rcyAhPSAwKSB7Ci0gICAgaWYgKG5fZWxlbWVudHMgPT0gMCkKLSAgICAgIHJldHVybiBjaHVua3M7IC8qIG5vdGhpbmcgdG8gZG8gKi8KLSAgICBtYXJyYXkgPSBjaHVua3M7Ci0gICAgYXJyYXlfc2l6ZSA9IDA7Ci0gIH0KLSAgZWxzZSB7Ci0gICAgLyogaWYgZW1wdHkgcmVxLCBtdXN0IHN0aWxsIHJldHVybiBjaHVuayByZXByZXNlbnRpbmcgZW1wdHkgYXJyYXkgKi8KLSAgICBpZiAobl9lbGVtZW50cyA9PSAwKQotICAgICAgcmV0dXJuICh2b2lkKiopaW50ZXJuYWxfbWFsbG9jKG0sIDApOwotICAgIG1hcnJheSA9IDA7Ci0gICAgYXJyYXlfc2l6ZSA9IHJlcXVlc3Qyc2l6ZShuX2VsZW1lbnRzICogKHNpemVvZih2b2lkKikpKTsKLSAgfQotCi0gIC8qIGNvbXB1dGUgdG90YWwgZWxlbWVudCBzaXplICovCi0gIGlmIChvcHRzICYgMHgxKSB7IC8qIGFsbC1zYW1lLXNpemUgKi8KLSAgICBlbGVtZW50X3NpemUgPSByZXF1ZXN0MnNpemUoKnNpemVzKTsKLSAgICBjb250ZW50c19zaXplID0gbl9lbGVtZW50cyAqIGVsZW1lbnRfc2l6ZTsKLSAgfQotICBlbHNlIHsgLyogYWRkIHVwIGFsbCB0aGUgc2l6ZXMgKi8KLSAgICBlbGVtZW50X3NpemUgPSAwOwotICAgIGNvbnRlbnRzX3NpemUgPSAwOwotICAgIGZvciAoaSA9IDA7IGkgIT0gbl9lbGVtZW50czsgKytpKQotICAgICAgY29udGVudHNfc2l6ZSArPSByZXF1ZXN0MnNpemUoc2l6ZXNbaV0pOwotICB9Ci0KLSAgc2l6ZSA9IGNvbnRlbnRzX3NpemUgKyBhcnJheV9zaXplOwotCi0gIC8qCi0gICAgIEFsbG9jYXRlIHRoZSBhZ2dyZWdhdGUgY2h1bmsuICBGaXJzdCBkaXNhYmxlIGRpcmVjdC1tbWFwcGluZyBzbwotICAgICBtYWxsb2Mgd29uJ3QgdXNlIGl0LCBzaW5jZSB3ZSB3b3VsZCBub3QgYmUgYWJsZSB0byBsYXRlcgotICAgICBmcmVlL3JlYWxsb2Mgc3BhY2UgaW50ZXJuYWwgdG8gYSBzZWdyZWdhdGVkIG1tYXAgcmVnaW9uLgotICAqLwotICB3YXNfZW5hYmxlZCA9IHVzZV9tbWFwKG0pOwotICBkaXNhYmxlX21tYXAobSk7Ci0gIG1lbSA9IGludGVybmFsX21hbGxvYyhtLCBzaXplIC0gQ0hVTktfT1ZFUkhFQUQpOwotICBpZiAod2FzX2VuYWJsZWQpCi0gICAgZW5hYmxlX21tYXAobSk7Ci0gIGlmIChtZW0gPT0gMCkKLSAgICByZXR1cm4gMDsKLQotICBpZiAoUFJFQUNUSU9OKG0pKSByZXR1cm4gMDsKLSAgcCA9IG1lbTJjaHVuayhtZW0pOwotICByZW1haW5kZXJfc2l6ZSA9IGNodW5rc2l6ZShwKTsKLQotICBhc3NlcnQoIWlzX21tYXBwZWQocCkpOwotCi0gIGlmIChvcHRzICYgMHgyKSB7ICAgICAgIC8qIG9wdGlvbmFsbHkgY2xlYXIgdGhlIGVsZW1lbnRzICovCi0gICAgbWVtc2V0KChzaXplX3QqKW1lbSwgMCwgcmVtYWluZGVyX3NpemUgLSBTSVpFX1RfU0laRSAtIGFycmF5X3NpemUpOwotICB9Ci0KLSAgLyogSWYgbm90IHByb3ZpZGVkLCBhbGxvY2F0ZSB0aGUgcG9pbnRlciBhcnJheSBhcyBmaW5hbCBwYXJ0IG9mIGNodW5rICovCi0gIGlmIChtYXJyYXkgPT0gMCkgewotICAgIHNpemVfdCAgYXJyYXlfY2h1bmtfc2l6ZTsKLSAgICBhcnJheV9jaHVuayA9IGNodW5rX3BsdXNfb2Zmc2V0KHAsIGNvbnRlbnRzX3NpemUpOwotICAgIGFycmF5X2NodW5rX3NpemUgPSByZW1haW5kZXJfc2l6ZSAtIGNvbnRlbnRzX3NpemU7Ci0gICAgbWFycmF5ID0gKHZvaWQqKikgKGNodW5rMm1lbShhcnJheV9jaHVuaykpOwotICAgIHNldF9zaXplX2FuZF9waW51c2Vfb2ZfaW51c2VfY2h1bmsobSwgYXJyYXlfY2h1bmssIGFycmF5X2NodW5rX3NpemUpOwotICAgIHJlbWFpbmRlcl9zaXplID0gY29udGVudHNfc2l6ZTsKLSAgfQotCi0gIC8qIHNwbGl0IG91dCBlbGVtZW50cyAqLwotICBmb3IgKGkgPSAwOyA7ICsraSkgewotICAgIG1hcnJheVtpXSA9IGNodW5rMm1lbShwKTsKLSAgICBpZiAoaSAhPSBuX2VsZW1lbnRzLTEpIHsKLSAgICAgIGlmIChlbGVtZW50X3NpemUgIT0gMCkKLSAgICAgICAgc2l6ZSA9IGVsZW1lbnRfc2l6ZTsKLSAgICAgIGVsc2UKLSAgICAgICAgc2l6ZSA9IHJlcXVlc3Qyc2l6ZShzaXplc1tpXSk7Ci0gICAgICByZW1haW5kZXJfc2l6ZSAtPSBzaXplOwotICAgICAgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9pbnVzZV9jaHVuayhtLCBwLCBzaXplKTsKLSAgICAgIHAgPSBjaHVua19wbHVzX29mZnNldChwLCBzaXplKTsKLSAgICB9Ci0gICAgZWxzZSB7IC8qIHRoZSBmaW5hbCBlbGVtZW50IGFic29yYnMgYW55IG92ZXJhbGxvY2F0aW9uIHNsb3AgKi8KLSAgICAgIHNldF9zaXplX2FuZF9waW51c2Vfb2ZfaW51c2VfY2h1bmsobSwgcCwgcmVtYWluZGVyX3NpemUpOwotICAgICAgYnJlYWs7Ci0gICAgfQotICB9Ci0KLSNpZiBERUJVRwotICBpZiAobWFycmF5ICE9IGNodW5rcykgewotICAgIC8qIGZpbmFsIGVsZW1lbnQgbXVzdCBoYXZlIGV4YWN0bHkgZXhoYXVzdGVkIGNodW5rICovCi0gICAgaWYgKGVsZW1lbnRfc2l6ZSAhPSAwKSB7Ci0gICAgICBhc3NlcnQocmVtYWluZGVyX3NpemUgPT0gZWxlbWVudF9zaXplKTsKLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICBhc3NlcnQocmVtYWluZGVyX3NpemUgPT0gcmVxdWVzdDJzaXplKHNpemVzW2ldKSk7Ci0gICAgfQotICAgIGNoZWNrX2ludXNlX2NodW5rKG0sIG1lbTJjaHVuayhtYXJyYXkpKTsKLSAgfQotICBmb3IgKGkgPSAwOyBpICE9IG5fZWxlbWVudHM7ICsraSkKLSAgICBjaGVja19pbnVzZV9jaHVuayhtLCBtZW0yY2h1bmsobWFycmF5W2ldKSk7Ci0KLSNlbmRpZiAvKiBERUJVRyAqLwotCi0gIFBPU1RBQ1RJT04obSk7Ci0gIHJldHVybiBtYXJyYXk7Ci19Ci0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gcHVibGljIHJvdXRpbmVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotI2lmICFPTkxZX01TUEFDRVMKLQotdm9pZCogZGxtYWxsb2Moc2l6ZV90IGJ5dGVzKSB7Ci0gIC8qCi0gICAgIEJhc2ljIGFsZ29yaXRobToKLSAgICAgSWYgYSBzbWFsbCByZXF1ZXN0ICg8IDI1NiBieXRlcyBtaW51cyBwZXItY2h1bmsgb3ZlcmhlYWQpOgotICAgICAgIDEuIElmIG9uZSBleGlzdHMsIHVzZSBhIHJlbWFpbmRlcmxlc3MgY2h1bmsgaW4gYXNzb2NpYXRlZCBzbWFsbGJpbi4KLSAgICAgICAgICAoUmVtYWluZGVybGVzcyBtZWFucyB0aGF0IHRoZXJlIGFyZSB0b28gZmV3IGV4Y2VzcyBieXRlcyB0bwotICAgICAgICAgIHJlcHJlc2VudCBhcyBhIGNodW5rLikKLSAgICAgICAyLiBJZiBpdCBpcyBiaWcgZW5vdWdoLCB1c2UgdGhlIGR2IGNodW5rLCB3aGljaCBpcyBub3JtYWxseSB0aGUKLSAgICAgICAgICBjaHVuayBhZGphY2VudCB0byB0aGUgb25lIHVzZWQgZm9yIHRoZSBtb3N0IHJlY2VudCBzbWFsbCByZXF1ZXN0LgotICAgICAgIDMuIElmIG9uZSBleGlzdHMsIHNwbGl0IHRoZSBzbWFsbGVzdCBhdmFpbGFibGUgY2h1bmsgaW4gYSBiaW4sCi0gICAgICAgICAgc2F2aW5nIHJlbWFpbmRlciBpbiBkdi4KLSAgICAgICA0LiBJZiBpdCBpcyBiaWcgZW5vdWdoLCB1c2UgdGhlIHRvcCBjaHVuay4KLSAgICAgICA1LiBJZiBhdmFpbGFibGUsIGdldCBtZW1vcnkgZnJvbSBzeXN0ZW0gYW5kIHVzZSBpdAotICAgICBPdGhlcndpc2UsIGZvciBhIGxhcmdlIHJlcXVlc3Q6Ci0gICAgICAgMS4gRmluZCB0aGUgc21hbGxlc3QgYXZhaWxhYmxlIGJpbm5lZCBjaHVuayB0aGF0IGZpdHMsIGFuZCB1c2UgaXQKLSAgICAgICAgICBpZiBpdCBpcyBiZXR0ZXIgZml0dGluZyB0aGFuIGR2IGNodW5rLCBzcGxpdHRpbmcgaWYgbmVjZXNzYXJ5LgotICAgICAgIDIuIElmIGJldHRlciBmaXR0aW5nIHRoYW4gYW55IGJpbm5lZCBjaHVuaywgdXNlIHRoZSBkdiBjaHVuay4KLSAgICAgICAzLiBJZiBpdCBpcyBiaWcgZW5vdWdoLCB1c2UgdGhlIHRvcCBjaHVuay4KLSAgICAgICA0LiBJZiByZXF1ZXN0IHNpemUgPj0gbW1hcCB0aHJlc2hvbGQsIHRyeSB0byBkaXJlY3RseSBtbWFwIHRoaXMgY2h1bmsuCi0gICAgICAgNS4gSWYgYXZhaWxhYmxlLCBnZXQgbWVtb3J5IGZyb20gc3lzdGVtIGFuZCB1c2UgaXQKLQotICAgICBUaGUgdWdseSBnb3RvJ3MgaGVyZSBlbnN1cmUgdGhhdCBwb3N0YWN0aW9uIG9jY3VycyBhbG9uZyBhbGwgcGF0aHMuCi0gICovCi0KLSAgaWYgKCFQUkVBQ1RJT04oZ20pKSB7Ci0gICAgdm9pZCogbWVtOwotICAgIHNpemVfdCBuYjsKLSAgICBpZiAoYnl0ZXMgPD0gTUFYX1NNQUxMX1JFUVVFU1QpIHsKLSAgICAgIGJpbmRleF90IGlkeDsKLSAgICAgIGJpbm1hcF90IHNtYWxsYml0czsKLSAgICAgIG5iID0gKGJ5dGVzIDwgTUlOX1JFUVVFU1QpPyBNSU5fQ0hVTktfU0laRSA6IHBhZF9yZXF1ZXN0KGJ5dGVzKTsKLSAgICAgIGlkeCA9IHNtYWxsX2luZGV4KG5iKTsKLSAgICAgIHNtYWxsYml0cyA9IGdtLT5zbWFsbG1hcCA+PiBpZHg7Ci0KLSAgICAgIGlmICgoc21hbGxiaXRzICYgMHgzVSkgIT0gMCkgeyAvKiBSZW1haW5kZXJsZXNzIGZpdCB0byBhIHNtYWxsYmluLiAqLwotICAgICAgICBtY2h1bmtwdHIgYiwgcDsKLSAgICAgICAgaWR4ICs9IH5zbWFsbGJpdHMgJiAxOyAgICAgICAvKiBVc2VzIG5leHQgYmluIGlmIGlkeCBlbXB0eSAqLwotICAgICAgICBiID0gc21hbGxiaW5fYXQoZ20sIGlkeCk7Ci0gICAgICAgIHAgPSBiLT5mZDsKLSAgICAgICAgYXNzZXJ0KGNodW5rc2l6ZShwKSA9PSBzbWFsbF9pbmRleDJzaXplKGlkeCkpOwotICAgICAgICB1bmxpbmtfZmlyc3Rfc21hbGxfY2h1bmsoZ20sIGIsIHAsIGlkeCk7Ci0gICAgICAgIHNldF9pbnVzZV9hbmRfcGludXNlKGdtLCBwLCBzbWFsbF9pbmRleDJzaXplKGlkeCkpOwotICAgICAgICBtZW0gPSBjaHVuazJtZW0ocCk7Ci0gICAgICAgIGNoZWNrX21hbGxvY2VkX2NodW5rKGdtLCBtZW0sIG5iKTsKLSAgICAgICAgZ290byBwb3N0YWN0aW9uOwotICAgICAgfQotCi0gICAgICBlbHNlIGlmIChuYiA+IGdtLT5kdnNpemUpIHsKLSAgICAgICAgaWYgKHNtYWxsYml0cyAhPSAwKSB7IC8qIFVzZSBjaHVuayBpbiBuZXh0IG5vbmVtcHR5IHNtYWxsYmluICovCi0gICAgICAgICAgbWNodW5rcHRyIGIsIHAsIHI7Ci0gICAgICAgICAgc2l6ZV90IHJzaXplOwotICAgICAgICAgIGJpbmRleF90IGk7Ci0gICAgICAgICAgYmlubWFwX3QgbGVmdGJpdHMgPSAoc21hbGxiaXRzIDw8IGlkeCkgJiBsZWZ0X2JpdHMoaWR4MmJpdChpZHgpKTsKLSAgICAgICAgICBiaW5tYXBfdCBsZWFzdGJpdCA9IGxlYXN0X2JpdChsZWZ0Yml0cyk7Ci0gICAgICAgICAgY29tcHV0ZV9iaXQyaWR4KGxlYXN0Yml0LCBpKTsKLSAgICAgICAgICBiID0gc21hbGxiaW5fYXQoZ20sIGkpOwotICAgICAgICAgIHAgPSBiLT5mZDsKLSAgICAgICAgICBhc3NlcnQoY2h1bmtzaXplKHApID09IHNtYWxsX2luZGV4MnNpemUoaSkpOwotICAgICAgICAgIHVubGlua19maXJzdF9zbWFsbF9jaHVuayhnbSwgYiwgcCwgaSk7Ci0gICAgICAgICAgcnNpemUgPSBzbWFsbF9pbmRleDJzaXplKGkpIC0gbmI7Ci0gICAgICAgICAgLyogRml0IGhlcmUgY2Fubm90IGJlIHJlbWFpbmRlcmxlc3MgaWYgNGJ5dGUgc2l6ZXMgKi8KLSAgICAgICAgICBpZiAoU0laRV9UX1NJWkUgIT0gNCAmJiByc2l6ZSA8IE1JTl9DSFVOS19TSVpFKQotICAgICAgICAgICAgc2V0X2ludXNlX2FuZF9waW51c2UoZ20sIHAsIHNtYWxsX2luZGV4MnNpemUoaSkpOwotICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9pbnVzZV9jaHVuayhnbSwgcCwgbmIpOwotICAgICAgICAgICAgciA9IGNodW5rX3BsdXNfb2Zmc2V0KHAsIG5iKTsKLSAgICAgICAgICAgIHNldF9zaXplX2FuZF9waW51c2Vfb2ZfZnJlZV9jaHVuayhyLCByc2l6ZSk7Ci0gICAgICAgICAgICByZXBsYWNlX2R2KGdtLCByLCByc2l6ZSk7Ci0gICAgICAgICAgfQotICAgICAgICAgIG1lbSA9IGNodW5rMm1lbShwKTsKLSAgICAgICAgICBjaGVja19tYWxsb2NlZF9jaHVuayhnbSwgbWVtLCBuYik7Ci0gICAgICAgICAgZ290byBwb3N0YWN0aW9uOwotICAgICAgICB9Ci0KLSAgICAgICAgZWxzZSBpZiAoZ20tPnRyZWVtYXAgIT0gMCAmJiAobWVtID0gdG1hbGxvY19zbWFsbChnbSwgbmIpKSAhPSAwKSB7Ci0gICAgICAgICAgY2hlY2tfbWFsbG9jZWRfY2h1bmsoZ20sIG1lbSwgbmIpOwotICAgICAgICAgIGdvdG8gcG9zdGFjdGlvbjsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICBlbHNlIGlmIChieXRlcyA+PSBNQVhfUkVRVUVTVCkKLSAgICAgIG5iID0gTUFYX1NJWkVfVDsgLyogVG9vIGJpZyB0byBhbGxvY2F0ZS4gRm9yY2UgZmFpbHVyZSAoaW4gc3lzIGFsbG9jKSAqLwotICAgIGVsc2UgewotICAgICAgbmIgPSBwYWRfcmVxdWVzdChieXRlcyk7Ci0gICAgICBpZiAoZ20tPnRyZWVtYXAgIT0gMCAmJiAobWVtID0gdG1hbGxvY19sYXJnZShnbSwgbmIpKSAhPSAwKSB7Ci0gICAgICAgIGNoZWNrX21hbGxvY2VkX2NodW5rKGdtLCBtZW0sIG5iKTsKLSAgICAgICAgZ290byBwb3N0YWN0aW9uOwotICAgICAgfQotICAgIH0KLQotICAgIGlmIChuYiA8PSBnbS0+ZHZzaXplKSB7Ci0gICAgICBzaXplX3QgcnNpemUgPSBnbS0+ZHZzaXplIC0gbmI7Ci0gICAgICBtY2h1bmtwdHIgcCA9IGdtLT5kdjsKLSAgICAgIGlmIChyc2l6ZSA+PSBNSU5fQ0hVTktfU0laRSkgeyAvKiBzcGxpdCBkdiAqLwotICAgICAgICBtY2h1bmtwdHIgciA9IGdtLT5kdiA9IGNodW5rX3BsdXNfb2Zmc2V0KHAsIG5iKTsKLSAgICAgICAgZ20tPmR2c2l6ZSA9IHJzaXplOwotICAgICAgICBzZXRfc2l6ZV9hbmRfcGludXNlX29mX2ZyZWVfY2h1bmsociwgcnNpemUpOwotICAgICAgICBzZXRfc2l6ZV9hbmRfcGludXNlX29mX2ludXNlX2NodW5rKGdtLCBwLCBuYik7Ci0gICAgICB9Ci0gICAgICBlbHNlIHsgLyogZXhoYXVzdCBkdiAqLwotICAgICAgICBzaXplX3QgZHZzID0gZ20tPmR2c2l6ZTsKLSAgICAgICAgZ20tPmR2c2l6ZSA9IDA7Ci0gICAgICAgIGdtLT5kdiA9IDA7Ci0gICAgICAgIHNldF9pbnVzZV9hbmRfcGludXNlKGdtLCBwLCBkdnMpOwotICAgICAgfQotICAgICAgbWVtID0gY2h1bmsybWVtKHApOwotICAgICAgY2hlY2tfbWFsbG9jZWRfY2h1bmsoZ20sIG1lbSwgbmIpOwotICAgICAgZ290byBwb3N0YWN0aW9uOwotICAgIH0KLQotICAgIGVsc2UgaWYgKG5iIDwgZ20tPnRvcHNpemUpIHsgLyogU3BsaXQgdG9wICovCi0gICAgICBzaXplX3QgcnNpemUgPSBnbS0+dG9wc2l6ZSAtPSBuYjsKLSAgICAgIG1jaHVua3B0ciBwID0gZ20tPnRvcDsKLSAgICAgIG1jaHVua3B0ciByID0gZ20tPnRvcCA9IGNodW5rX3BsdXNfb2Zmc2V0KHAsIG5iKTsKLSAgICAgIHItPmhlYWQgPSByc2l6ZSB8IFBJTlVTRV9CSVQ7Ci0gICAgICBzZXRfc2l6ZV9hbmRfcGludXNlX29mX2ludXNlX2NodW5rKGdtLCBwLCBuYik7Ci0gICAgICBtZW0gPSBjaHVuazJtZW0ocCk7Ci0gICAgICBjaGVja190b3BfY2h1bmsoZ20sIGdtLT50b3ApOwotICAgICAgY2hlY2tfbWFsbG9jZWRfY2h1bmsoZ20sIG1lbSwgbmIpOwotICAgICAgZ290byBwb3N0YWN0aW9uOwotICAgIH0KLQotICAgIG1lbSA9IHN5c19hbGxvYyhnbSwgbmIpOwotCi0gIHBvc3RhY3Rpb246Ci0gICAgUE9TVEFDVElPTihnbSk7Ci0gICAgcmV0dXJuIG1lbTsKLSAgfQotCi0gIHJldHVybiAwOwotfQotCi12b2lkIGRsZnJlZSh2b2lkKiBtZW0pIHsKLSAgLyoKLSAgICAgQ29uc29saWRhdGUgZnJlZWQgY2h1bmtzIHdpdGggcHJlY2VlZGluZyBvciBzdWNjZWVkaW5nIGJvcmRlcmluZwotICAgICBmcmVlIGNodW5rcywgaWYgdGhleSBleGlzdCwgYW5kIHRoZW4gcGxhY2UgaW4gYSBiaW4uICBJbnRlcm1peGVkCi0gICAgIHdpdGggc3BlY2lhbCBjYXNlcyBmb3IgdG9wLCBkdiwgbW1hcHBlZCBjaHVua3MsIGFuZCB1c2FnZSBlcnJvcnMuCi0gICovCi0KLSAgaWYgKG1lbSAhPSAwKSB7Ci0gICAgbWNodW5rcHRyIHAgID0gbWVtMmNodW5rKG1lbSk7Ci0jaWYgRk9PVEVSUwotICAgIG1zdGF0ZSBmbSA9IGdldF9tc3RhdGVfZm9yKHApOwotICAgIGlmICghb2tfbWFnaWMoZm0pKSB7Ci0gICAgICBVU0FHRV9FUlJPUl9BQ1RJT04oZm0sIHApOwotICAgICAgcmV0dXJuOwotICAgIH0KLSNlbHNlIC8qIEZPT1RFUlMgKi8KLSNkZWZpbmUgZm0gZ20KLSNlbmRpZiAvKiBGT09URVJTICovCi0gICAgaWYgKCFQUkVBQ1RJT04oZm0pKSB7Ci0gICAgICBjaGVja19pbnVzZV9jaHVuayhmbSwgcCk7Ci0gICAgICBpZiAoUlRDSEVDSyhva19hZGRyZXNzKGZtLCBwKSAmJiBva19jaW51c2UocCkpKSB7Ci0gICAgICAgIHNpemVfdCBwc2l6ZSA9IGNodW5rc2l6ZShwKTsKLSAgICAgICAgbWNodW5rcHRyIG5leHQgPSBjaHVua19wbHVzX29mZnNldChwLCBwc2l6ZSk7Ci0gICAgICAgIGlmICghcGludXNlKHApKSB7Ci0gICAgICAgICAgc2l6ZV90IHByZXZzaXplID0gcC0+cHJldl9mb290OwotICAgICAgICAgIGlmICgocHJldnNpemUgJiBJU19NTUFQUEVEX0JJVCkgIT0gMCkgewotICAgICAgICAgICAgcHJldnNpemUgJj0gfklTX01NQVBQRURfQklUOwotICAgICAgICAgICAgcHNpemUgKz0gcHJldnNpemUgKyBNTUFQX0ZPT1RfUEFEOwotICAgICAgICAgICAgaWYgKENBTExfTVVOTUFQKChjaGFyKilwIC0gcHJldnNpemUsIHBzaXplKSA9PSAwKQotICAgICAgICAgICAgICBmbS0+Zm9vdHByaW50IC09IHBzaXplOwotICAgICAgICAgICAgZ290byBwb3N0YWN0aW9uOwotICAgICAgICAgIH0KLSAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIG1jaHVua3B0ciBwcmV2ID0gY2h1bmtfbWludXNfb2Zmc2V0KHAsIHByZXZzaXplKTsKLSAgICAgICAgICAgIHBzaXplICs9IHByZXZzaXplOwotICAgICAgICAgICAgcCA9IHByZXY7Ci0gICAgICAgICAgICBpZiAoUlRDSEVDSyhva19hZGRyZXNzKGZtLCBwcmV2KSkpIHsgLyogY29uc29saWRhdGUgYmFja3dhcmQgKi8KLSAgICAgICAgICAgICAgaWYgKHAgIT0gZm0tPmR2KSB7Ci0gICAgICAgICAgICAgICAgdW5saW5rX2NodW5rKGZtLCBwLCBwcmV2c2l6ZSk7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgZWxzZSBpZiAoKG5leHQtPmhlYWQgJiBJTlVTRV9CSVRTKSA9PSBJTlVTRV9CSVRTKSB7Ci0gICAgICAgICAgICAgICAgZm0tPmR2c2l6ZSA9IHBzaXplOwotICAgICAgICAgICAgICAgIHNldF9mcmVlX3dpdGhfcGludXNlKHAsIHBzaXplLCBuZXh0KTsKLSAgICAgICAgICAgICAgICBnb3RvIHBvc3RhY3Rpb247Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgZ290byBlcnJvcmFjdGlvbjsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoUlRDSEVDSyhva19uZXh0KHAsIG5leHQpICYmIG9rX3BpbnVzZShuZXh0KSkpIHsKLSAgICAgICAgICBpZiAoIWNpbnVzZShuZXh0KSkgeyAgLyogY29uc29saWRhdGUgZm9yd2FyZCAqLwotICAgICAgICAgICAgaWYgKG5leHQgPT0gZm0tPnRvcCkgewotICAgICAgICAgICAgICBzaXplX3QgdHNpemUgPSBmbS0+dG9wc2l6ZSArPSBwc2l6ZTsKLSAgICAgICAgICAgICAgZm0tPnRvcCA9IHA7Ci0gICAgICAgICAgICAgIHAtPmhlYWQgPSB0c2l6ZSB8IFBJTlVTRV9CSVQ7Ci0gICAgICAgICAgICAgIGlmIChwID09IGZtLT5kdikgewotICAgICAgICAgICAgICAgIGZtLT5kdiA9IDA7Ci0gICAgICAgICAgICAgICAgZm0tPmR2c2l6ZSA9IDA7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgaWYgKHNob3VsZF90cmltKGZtLCB0c2l6ZSkpCi0gICAgICAgICAgICAgICAgc3lzX3RyaW0oZm0sIDApOwotICAgICAgICAgICAgICBnb3RvIHBvc3RhY3Rpb247Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChuZXh0ID09IGZtLT5kdikgewotICAgICAgICAgICAgICBzaXplX3QgZHNpemUgPSBmbS0+ZHZzaXplICs9IHBzaXplOwotICAgICAgICAgICAgICBmbS0+ZHYgPSBwOwotICAgICAgICAgICAgICBzZXRfc2l6ZV9hbmRfcGludXNlX29mX2ZyZWVfY2h1bmsocCwgZHNpemUpOwotICAgICAgICAgICAgICBnb3RvIHBvc3RhY3Rpb247Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgc2l6ZV90IG5zaXplID0gY2h1bmtzaXplKG5leHQpOwotICAgICAgICAgICAgICBwc2l6ZSArPSBuc2l6ZTsKLSAgICAgICAgICAgICAgdW5saW5rX2NodW5rKGZtLCBuZXh0LCBuc2l6ZSk7Ci0gICAgICAgICAgICAgIHNldF9zaXplX2FuZF9waW51c2Vfb2ZfZnJlZV9jaHVuayhwLCBwc2l6ZSk7Ci0gICAgICAgICAgICAgIGlmIChwID09IGZtLT5kdikgewotICAgICAgICAgICAgICAgIGZtLT5kdnNpemUgPSBwc2l6ZTsKLSAgICAgICAgICAgICAgICBnb3RvIHBvc3RhY3Rpb247Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgc2V0X2ZyZWVfd2l0aF9waW51c2UocCwgcHNpemUsIG5leHQpOwotICAgICAgICAgIGluc2VydF9jaHVuayhmbSwgcCwgcHNpemUpOwotICAgICAgICAgIGNoZWNrX2ZyZWVfY2h1bmsoZm0sIHApOwotICAgICAgICAgIGdvdG8gcG9zdGFjdGlvbjsKLSAgICAgICAgfQotICAgICAgfQotICAgIGVycm9yYWN0aW9uOgotICAgICAgVVNBR0VfRVJST1JfQUNUSU9OKGZtLCBwKTsKLSAgICBwb3N0YWN0aW9uOgotICAgICAgUE9TVEFDVElPTihmbSk7Ci0gICAgfQotICB9Ci0jaWYgIUZPT1RFUlMKLSN1bmRlZiBmbQotI2VuZGlmIC8qIEZPT1RFUlMgKi8KLX0KLQotdm9pZCogZGxjYWxsb2Moc2l6ZV90IG5fZWxlbWVudHMsIHNpemVfdCBlbGVtX3NpemUpIHsKLSAgdm9pZCAqbWVtOwotICBpZiAobl9lbGVtZW50cyAmJiBNQVhfU0laRV9UIC8gbl9lbGVtZW50cyA8IGVsZW1fc2l6ZSkgewotICAgIC8qIEZhaWwgb24gb3ZlcmZsb3cgKi8KLSAgICBNQUxMT0NfRkFJTFVSRV9BQ1RJT047Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLSAgZWxlbV9zaXplICo9IG5fZWxlbWVudHM7Ci0gIG1lbSA9IGRsbWFsbG9jKGVsZW1fc2l6ZSk7Ci0gIGlmIChtZW0gJiYgY2FsbG9jX211c3RfY2xlYXIobWVtMmNodW5rKG1lbSkpKQotICAgIG1lbXNldChtZW0sIDAsIGVsZW1fc2l6ZSk7Ci0gIHJldHVybiBtZW07Ci19Ci0KLXZvaWQqIGRscmVhbGxvYyh2b2lkKiBvbGRtZW0sIHNpemVfdCBieXRlcykgewotICBpZiAob2xkbWVtID09IDApCi0gICAgcmV0dXJuIGRsbWFsbG9jKGJ5dGVzKTsKLSNpZmRlZiBSRUFMTE9DX1pFUk9fQllURVNfRlJFRVMKLSAgaWYgKGJ5dGVzID09IDApIHsKLSAgICBkbGZyZWUob2xkbWVtKTsKLSAgICByZXR1cm4gMDsKLSAgfQotI2VuZGlmIC8qIFJFQUxMT0NfWkVST19CWVRFU19GUkVFUyAqLwotICBlbHNlIHsKLSNpZiAhIEZPT1RFUlMKLSAgICBtc3RhdGUgbSA9IGdtOwotI2Vsc2UgLyogRk9PVEVSUyAqLwotICAgIG1zdGF0ZSBtID0gZ2V0X21zdGF0ZV9mb3IobWVtMmNodW5rKG9sZG1lbSkpOwotICAgIGlmICghb2tfbWFnaWMobSkpIHsKLSAgICAgIFVTQUdFX0VSUk9SX0FDVElPTihtLCBvbGRtZW0pOwotICAgICAgcmV0dXJuIDA7Ci0gICAgfQotI2VuZGlmIC8qIEZPT1RFUlMgKi8KLSAgICByZXR1cm4gaW50ZXJuYWxfcmVhbGxvYyhtLCBvbGRtZW0sIGJ5dGVzKTsKLSAgfQotfQotCi12b2lkKiBkbG1lbWFsaWduKHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBieXRlcykgewotICByZXR1cm4gaW50ZXJuYWxfbWVtYWxpZ24oZ20sIGFsaWdubWVudCwgYnl0ZXMpOwotfQotCi1pbnQgcG9zaXhfbWVtYWxpZ24odm9pZCAqKm1lbXB0ciwgc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IHNpemUpIHsKLSAgaW50IHJldCA9IDA7Ci0KLSAgKm1lbXB0ciA9IGRsbWVtYWxpZ24oYWxpZ25tZW50LCBzaXplKTsKLQotICBpZiAoKm1lbXB0ciA9PSAwKSB7Ci0gICAgcmV0ID0gRU5PTUVNOwotICB9Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotdm9pZCoqIGRsaW5kZXBlbmRlbnRfY2FsbG9jKHNpemVfdCBuX2VsZW1lbnRzLCBzaXplX3QgZWxlbV9zaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCogY2h1bmtzW10pIHsKLSAgc2l6ZV90IHN6ID0gZWxlbV9zaXplOyAvKiBzZXJ2ZXMgYXMgMS1lbGVtZW50IGFycmF5ICovCi0gIHJldHVybiBpYWxsb2MoZ20sIG5fZWxlbWVudHMsICZzeiwgMywgY2h1bmtzKTsKLX0KLQotdm9pZCoqIGRsaW5kZXBlbmRlbnRfY29tYWxsb2Moc2l6ZV90IG5fZWxlbWVudHMsIHNpemVfdCBzaXplc1tdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiBjaHVua3NbXSkgewotICByZXR1cm4gaWFsbG9jKGdtLCBuX2VsZW1lbnRzLCBzaXplcywgMCwgY2h1bmtzKTsKLX0KLQotdm9pZCogZGx2YWxsb2Moc2l6ZV90IGJ5dGVzKSB7Ci0gIHNpemVfdCBwYWdlc3o7Ci0gIGluaXRfbXBhcmFtcygpOwotICBwYWdlc3ogPSBtcGFyYW1zLnBhZ2Vfc2l6ZTsKLSAgcmV0dXJuIGRsbWVtYWxpZ24ocGFnZXN6LCBieXRlcyk7Ci19Ci0KLXZvaWQqIGRscHZhbGxvYyhzaXplX3QgYnl0ZXMpIHsKLSAgc2l6ZV90IHBhZ2VzejsKLSAgaW5pdF9tcGFyYW1zKCk7Ci0gIHBhZ2VzeiA9IG1wYXJhbXMucGFnZV9zaXplOwotICByZXR1cm4gZGxtZW1hbGlnbihwYWdlc3osIChieXRlcyArIHBhZ2VzeiAtIFNJWkVfVF9PTkUpICYgfihwYWdlc3ogLSBTSVpFX1RfT05FKSk7Ci19Ci0KLWludCBkbG1hbGxvY190cmltKHNpemVfdCBwYWQpIHsKLSAgaW50IHJlc3VsdCA9IDA7Ci0gIGlmICghUFJFQUNUSU9OKGdtKSkgewotICAgIHJlc3VsdCA9IHN5c190cmltKGdtLCBwYWQpOwotICAgIFBPU1RBQ1RJT04oZ20pOwotICB9Ci0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLXNpemVfdCBkbG1hbGxvY19mb290cHJpbnQodm9pZCkgewotICByZXR1cm4gZ20tPmZvb3RwcmludDsKLX0KLQotI2lmIFVTRV9NQVhfQUxMT1dFRF9GT09UUFJJTlQKLXNpemVfdCBkbG1hbGxvY19tYXhfYWxsb3dlZF9mb290cHJpbnQodm9pZCkgewotICByZXR1cm4gZ20tPm1heF9hbGxvd2VkX2Zvb3RwcmludDsKLX0KLQotdm9pZCBkbG1hbGxvY19zZXRfbWF4X2FsbG93ZWRfZm9vdHByaW50KHNpemVfdCBieXRlcykgewotICBpZiAoYnl0ZXMgPiBnbS0+Zm9vdHByaW50KSB7Ci0gICAgLyogSW5jcmVhc2UgdGhlIHNpemUgaW4gbXVsdGlwbGVzIG9mIHRoZSBncmFudWxhcml0eSwKLSAgICAgKiB3aGljaCBpcyB0aGUgc21hbGxlc3QgdW5pdCB3ZSByZXF1ZXN0IGZyb20gdGhlIHN5c3RlbS4KLSAgICAgKi8KLSAgICBnbS0+bWF4X2FsbG93ZWRfZm9vdHByaW50ID0gZ20tPmZvb3RwcmludCArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyYW51bGFyaXR5X2FsaWduKGJ5dGVzIC0gZ20tPmZvb3RwcmludCk7Ci0gIH0KLSAgZWxzZSB7Ci0gICAgLy9UT0RPOiBhbGxvdyBmb3IgcmVkdWNpbmcgdGhlIG1heCBmb290cHJpbnQKLSAgICBnbS0+bWF4X2FsbG93ZWRfZm9vdHByaW50ID0gZ20tPmZvb3RwcmludDsKLSAgfQotfQotI2VuZGlmCi0KLXNpemVfdCBkbG1hbGxvY19tYXhfZm9vdHByaW50KHZvaWQpIHsKLSAgcmV0dXJuIGdtLT5tYXhfZm9vdHByaW50OwotfQotCi0jaWYgIU5PX01BTExJTkZPCi1zdHJ1Y3QgbWFsbGluZm8gZGxtYWxsaW5mbyh2b2lkKSB7Ci0gIHJldHVybiBpbnRlcm5hbF9tYWxsaW5mbyhnbSk7Ci19Ci0jZW5kaWYgLyogTk9fTUFMTElORk8gKi8KLQotdm9pZCBkbG1hbGxvY19zdGF0cygpIHsKLSAgaW50ZXJuYWxfbWFsbG9jX3N0YXRzKGdtKTsKLX0KLQotc2l6ZV90IGRsbWFsbG9jX3VzYWJsZV9zaXplKHZvaWQqIG1lbSkgewotICBpZiAobWVtICE9IDApIHsKLSAgICBtY2h1bmtwdHIgcCA9IG1lbTJjaHVuayhtZW0pOwotICAgIGlmIChjaW51c2UocCkpCi0gICAgICByZXR1cm4gY2h1bmtzaXplKHApIC0gb3ZlcmhlYWRfZm9yKHApOwotICB9Ci0gIHJldHVybiAwOwotfQotCi1pbnQgZGxtYWxsb3B0KGludCBwYXJhbV9udW1iZXIsIGludCB2YWx1ZSkgewotICByZXR1cm4gY2hhbmdlX21wYXJhbShwYXJhbV9udW1iZXIsIHZhbHVlKTsKLX0KLQotI2VuZGlmIC8qICFPTkxZX01TUEFDRVMgKi8KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gdXNlciBtc3BhY2VzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotI2lmIE1TUEFDRVMKLQotc3RhdGljIG1zdGF0ZSBpbml0X3VzZXJfbXN0YXRlKGNoYXIqIHRiYXNlLCBzaXplX3QgdHNpemUpIHsKLSAgc2l6ZV90IG1zaXplID0gcGFkX3JlcXVlc3Qoc2l6ZW9mKHN0cnVjdCBtYWxsb2Nfc3RhdGUpKTsKLSAgbWNodW5rcHRyIG1uOwotICBtY2h1bmtwdHIgbXNwID0gYWxpZ25fYXNfY2h1bmsodGJhc2UpOwotICBtc3RhdGUgbSA9IChtc3RhdGUpKGNodW5rMm1lbShtc3ApKTsKLSAgbWVtc2V0KG0sIDAsIG1zaXplKTsKLSAgSU5JVElBTF9MT0NLKCZtLT5tdXRleCk7Ci0gIG1zcC0+aGVhZCA9IChtc2l6ZXxQSU5VU0VfQklUfENJTlVTRV9CSVQpOwotICBtLT5zZWcuYmFzZSA9IG0tPmxlYXN0X2FkZHIgPSB0YmFzZTsKLSAgbS0+c2VnLnNpemUgPSBtLT5mb290cHJpbnQgPSBtLT5tYXhfZm9vdHByaW50ID0gdHNpemU7Ci0jaWYgVVNFX01BWF9BTExPV0VEX0ZPT1RQUklOVAotICBtLT5tYXhfYWxsb3dlZF9mb290cHJpbnQgPSBNQVhfU0laRV9UOwotI2VuZGlmCi0gIG0tPm1hZ2ljID0gbXBhcmFtcy5tYWdpYzsKLSAgbS0+bWZsYWdzID0gbXBhcmFtcy5kZWZhdWx0X21mbGFnczsKLSAgZGlzYWJsZV9jb250aWd1b3VzKG0pOwotICBpbml0X2JpbnMobSk7Ci0gIG1uID0gbmV4dF9jaHVuayhtZW0yY2h1bmsobSkpOwotICBpbml0X3RvcChtLCBtbiwgKHNpemVfdCkoKHRiYXNlICsgdHNpemUpIC0gKGNoYXIqKW1uKSAtIFRPUF9GT09UX1NJWkUpOwotICBjaGVja190b3BfY2h1bmsobSwgbS0+dG9wKTsKLSAgcmV0dXJuIG07Ci19Ci0KLW1zcGFjZSBjcmVhdGVfbXNwYWNlKHNpemVfdCBjYXBhY2l0eSwgaW50IGxvY2tlZCkgewotICBtc3RhdGUgbSA9IDA7Ci0gIHNpemVfdCBtc2l6ZSA9IHBhZF9yZXF1ZXN0KHNpemVvZihzdHJ1Y3QgbWFsbG9jX3N0YXRlKSk7Ci0gIGluaXRfbXBhcmFtcygpOyAvKiBFbnN1cmUgcGFnZXNpemUgZXRjIGluaXRpYWxpemVkICovCi0KLSAgaWYgKGNhcGFjaXR5IDwgKHNpemVfdCkgLShtc2l6ZSArIFRPUF9GT09UX1NJWkUgKyBtcGFyYW1zLnBhZ2Vfc2l6ZSkpIHsKLSAgICBzaXplX3QgcnMgPSAoKGNhcGFjaXR5ID09IDApPyBtcGFyYW1zLmdyYW51bGFyaXR5IDoKLSAgICAgICAgICAgICAgICAgKGNhcGFjaXR5ICsgVE9QX0ZPT1RfU0laRSArIG1zaXplKSk7Ci0gICAgc2l6ZV90IHRzaXplID0gZ3JhbnVsYXJpdHlfYWxpZ24ocnMpOwotICAgIGNoYXIqIHRiYXNlID0gKGNoYXIqKShDQUxMX01NQVAodHNpemUpKTsKLSAgICBpZiAodGJhc2UgIT0gQ01GQUlMKSB7Ci0gICAgICBtID0gaW5pdF91c2VyX21zdGF0ZSh0YmFzZSwgdHNpemUpOwotICAgICAgbS0+c2VnLnNmbGFncyA9IElTX01NQVBQRURfQklUOwotICAgICAgc2V0X2xvY2sobSwgbG9ja2VkKTsKLSAgICB9Ci0gIH0KLSAgcmV0dXJuIChtc3BhY2UpbTsKLX0KLQotbXNwYWNlIGNyZWF0ZV9tc3BhY2Vfd2l0aF9iYXNlKHZvaWQqIGJhc2UsIHNpemVfdCBjYXBhY2l0eSwgaW50IGxvY2tlZCkgewotICBtc3RhdGUgbSA9IDA7Ci0gIHNpemVfdCBtc2l6ZSA9IHBhZF9yZXF1ZXN0KHNpemVvZihzdHJ1Y3QgbWFsbG9jX3N0YXRlKSk7Ci0gIGluaXRfbXBhcmFtcygpOyAvKiBFbnN1cmUgcGFnZXNpemUgZXRjIGluaXRpYWxpemVkICovCi0KLSAgaWYgKGNhcGFjaXR5ID4gbXNpemUgKyBUT1BfRk9PVF9TSVpFICYmCi0gICAgICBjYXBhY2l0eSA8IChzaXplX3QpIC0obXNpemUgKyBUT1BfRk9PVF9TSVpFICsgbXBhcmFtcy5wYWdlX3NpemUpKSB7Ci0gICAgbSA9IGluaXRfdXNlcl9tc3RhdGUoKGNoYXIqKWJhc2UsIGNhcGFjaXR5KTsKLSAgICBtLT5zZWcuc2ZsYWdzID0gRVhURVJOX0JJVDsKLSAgICBzZXRfbG9jayhtLCBsb2NrZWQpOwotICB9Ci0gIHJldHVybiAobXNwYWNlKW07Ci19Ci0KLXNpemVfdCBkZXN0cm95X21zcGFjZShtc3BhY2UgbXNwKSB7Ci0gIHNpemVfdCBmcmVlZCA9IDA7Ci0gIG1zdGF0ZSBtcyA9IChtc3RhdGUpbXNwOwotICBpZiAob2tfbWFnaWMobXMpKSB7Ci0gICAgbXNlZ21lbnRwdHIgc3AgPSAmbXMtPnNlZzsKLSAgICB3aGlsZSAoc3AgIT0gMCkgewotICAgICAgY2hhciogYmFzZSA9IHNwLT5iYXNlOwotICAgICAgc2l6ZV90IHNpemUgPSBzcC0+c2l6ZTsKLSAgICAgIGZsYWdfdCBmbGFnID0gc3AtPnNmbGFnczsKLSAgICAgIHNwID0gc3AtPm5leHQ7Ci0gICAgICBpZiAoKGZsYWcgJiBJU19NTUFQUEVEX0JJVCkgJiYgIShmbGFnICYgRVhURVJOX0JJVCkgJiYKLSAgICAgICAgICBDQUxMX01VTk1BUChiYXNlLCBzaXplKSA9PSAwKQotICAgICAgICBmcmVlZCArPSBzaXplOwotICAgIH0KLSAgfQotICBlbHNlIHsKLSAgICBVU0FHRV9FUlJPUl9BQ1RJT04obXMsbXMpOwotICB9Ci0gIHJldHVybiBmcmVlZDsKLX0KLQotLyoKLSAgbXNwYWNlIHZlcnNpb25zIG9mIHJvdXRpbmVzIGFyZSBuZWFyLWNsb25lcyBvZiB0aGUgZ2xvYmFsCi0gIHZlcnNpb25zLiBUaGlzIGlzIG5vdCBzbyBuaWNlIGJ1dCBiZXR0ZXIgdGhhbiB0aGUgYWx0ZXJuYXRpdmVzLgotKi8KLQotCi12b2lkKiBtc3BhY2VfbWFsbG9jKG1zcGFjZSBtc3AsIHNpemVfdCBieXRlcykgewotICBtc3RhdGUgbXMgPSAobXN0YXRlKW1zcDsKLSAgaWYgKCFva19tYWdpYyhtcykpIHsKLSAgICBVU0FHRV9FUlJPUl9BQ1RJT04obXMsbXMpOwotICAgIHJldHVybiAwOwotICB9Ci0gIGlmICghUFJFQUNUSU9OKG1zKSkgewotICAgIHZvaWQqIG1lbTsKLSAgICBzaXplX3QgbmI7Ci0gICAgaWYgKGJ5dGVzIDw9IE1BWF9TTUFMTF9SRVFVRVNUKSB7Ci0gICAgICBiaW5kZXhfdCBpZHg7Ci0gICAgICBiaW5tYXBfdCBzbWFsbGJpdHM7Ci0gICAgICBuYiA9IChieXRlcyA8IE1JTl9SRVFVRVNUKT8gTUlOX0NIVU5LX1NJWkUgOiBwYWRfcmVxdWVzdChieXRlcyk7Ci0gICAgICBpZHggPSBzbWFsbF9pbmRleChuYik7Ci0gICAgICBzbWFsbGJpdHMgPSBtcy0+c21hbGxtYXAgPj4gaWR4OwotCi0gICAgICBpZiAoKHNtYWxsYml0cyAmIDB4M1UpICE9IDApIHsgLyogUmVtYWluZGVybGVzcyBmaXQgdG8gYSBzbWFsbGJpbi4gKi8KLSAgICAgICAgbWNodW5rcHRyIGIsIHA7Ci0gICAgICAgIGlkeCArPSB+c21hbGxiaXRzICYgMTsgICAgICAgLyogVXNlcyBuZXh0IGJpbiBpZiBpZHggZW1wdHkgKi8KLSAgICAgICAgYiA9IHNtYWxsYmluX2F0KG1zLCBpZHgpOwotICAgICAgICBwID0gYi0+ZmQ7Ci0gICAgICAgIGFzc2VydChjaHVua3NpemUocCkgPT0gc21hbGxfaW5kZXgyc2l6ZShpZHgpKTsKLSAgICAgICAgdW5saW5rX2ZpcnN0X3NtYWxsX2NodW5rKG1zLCBiLCBwLCBpZHgpOwotICAgICAgICBzZXRfaW51c2VfYW5kX3BpbnVzZShtcywgcCwgc21hbGxfaW5kZXgyc2l6ZShpZHgpKTsKLSAgICAgICAgbWVtID0gY2h1bmsybWVtKHApOwotICAgICAgICBjaGVja19tYWxsb2NlZF9jaHVuayhtcywgbWVtLCBuYik7Ci0gICAgICAgIGdvdG8gcG9zdGFjdGlvbjsKLSAgICAgIH0KLQotICAgICAgZWxzZSBpZiAobmIgPiBtcy0+ZHZzaXplKSB7Ci0gICAgICAgIGlmIChzbWFsbGJpdHMgIT0gMCkgeyAvKiBVc2UgY2h1bmsgaW4gbmV4dCBub25lbXB0eSBzbWFsbGJpbiAqLwotICAgICAgICAgIG1jaHVua3B0ciBiLCBwLCByOwotICAgICAgICAgIHNpemVfdCByc2l6ZTsKLSAgICAgICAgICBiaW5kZXhfdCBpOwotICAgICAgICAgIGJpbm1hcF90IGxlZnRiaXRzID0gKHNtYWxsYml0cyA8PCBpZHgpICYgbGVmdF9iaXRzKGlkeDJiaXQoaWR4KSk7Ci0gICAgICAgICAgYmlubWFwX3QgbGVhc3RiaXQgPSBsZWFzdF9iaXQobGVmdGJpdHMpOwotICAgICAgICAgIGNvbXB1dGVfYml0MmlkeChsZWFzdGJpdCwgaSk7Ci0gICAgICAgICAgYiA9IHNtYWxsYmluX2F0KG1zLCBpKTsKLSAgICAgICAgICBwID0gYi0+ZmQ7Ci0gICAgICAgICAgYXNzZXJ0KGNodW5rc2l6ZShwKSA9PSBzbWFsbF9pbmRleDJzaXplKGkpKTsKLSAgICAgICAgICB1bmxpbmtfZmlyc3Rfc21hbGxfY2h1bmsobXMsIGIsIHAsIGkpOwotICAgICAgICAgIHJzaXplID0gc21hbGxfaW5kZXgyc2l6ZShpKSAtIG5iOwotICAgICAgICAgIC8qIEZpdCBoZXJlIGNhbm5vdCBiZSByZW1haW5kZXJsZXNzIGlmIDRieXRlIHNpemVzICovCi0gICAgICAgICAgaWYgKFNJWkVfVF9TSVpFICE9IDQgJiYgcnNpemUgPCBNSU5fQ0hVTktfU0laRSkKLSAgICAgICAgICAgIHNldF9pbnVzZV9hbmRfcGludXNlKG1zLCBwLCBzbWFsbF9pbmRleDJzaXplKGkpKTsKLSAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIHNldF9zaXplX2FuZF9waW51c2Vfb2ZfaW51c2VfY2h1bmsobXMsIHAsIG5iKTsKLSAgICAgICAgICAgIHIgPSBjaHVua19wbHVzX29mZnNldChwLCBuYik7Ci0gICAgICAgICAgICBzZXRfc2l6ZV9hbmRfcGludXNlX29mX2ZyZWVfY2h1bmsociwgcnNpemUpOwotICAgICAgICAgICAgcmVwbGFjZV9kdihtcywgciwgcnNpemUpOwotICAgICAgICAgIH0KLSAgICAgICAgICBtZW0gPSBjaHVuazJtZW0ocCk7Ci0gICAgICAgICAgY2hlY2tfbWFsbG9jZWRfY2h1bmsobXMsIG1lbSwgbmIpOwotICAgICAgICAgIGdvdG8gcG9zdGFjdGlvbjsKLSAgICAgICAgfQotCi0gICAgICAgIGVsc2UgaWYgKG1zLT50cmVlbWFwICE9IDAgJiYgKG1lbSA9IHRtYWxsb2Nfc21hbGwobXMsIG5iKSkgIT0gMCkgewotICAgICAgICAgIGNoZWNrX21hbGxvY2VkX2NodW5rKG1zLCBtZW0sIG5iKTsKLSAgICAgICAgICBnb3RvIHBvc3RhY3Rpb247Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgZWxzZSBpZiAoYnl0ZXMgPj0gTUFYX1JFUVVFU1QpCi0gICAgICBuYiA9IE1BWF9TSVpFX1Q7IC8qIFRvbyBiaWcgdG8gYWxsb2NhdGUuIEZvcmNlIGZhaWx1cmUgKGluIHN5cyBhbGxvYykgKi8KLSAgICBlbHNlIHsKLSAgICAgIG5iID0gcGFkX3JlcXVlc3QoYnl0ZXMpOwotICAgICAgaWYgKG1zLT50cmVlbWFwICE9IDAgJiYgKG1lbSA9IHRtYWxsb2NfbGFyZ2UobXMsIG5iKSkgIT0gMCkgewotICAgICAgICBjaGVja19tYWxsb2NlZF9jaHVuayhtcywgbWVtLCBuYik7Ci0gICAgICAgIGdvdG8gcG9zdGFjdGlvbjsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAobmIgPD0gbXMtPmR2c2l6ZSkgewotICAgICAgc2l6ZV90IHJzaXplID0gbXMtPmR2c2l6ZSAtIG5iOwotICAgICAgbWNodW5rcHRyIHAgPSBtcy0+ZHY7Ci0gICAgICBpZiAocnNpemUgPj0gTUlOX0NIVU5LX1NJWkUpIHsgLyogc3BsaXQgZHYgKi8KLSAgICAgICAgbWNodW5rcHRyIHIgPSBtcy0+ZHYgPSBjaHVua19wbHVzX29mZnNldChwLCBuYik7Ci0gICAgICAgIG1zLT5kdnNpemUgPSByc2l6ZTsKLSAgICAgICAgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9mcmVlX2NodW5rKHIsIHJzaXplKTsKLSAgICAgICAgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9pbnVzZV9jaHVuayhtcywgcCwgbmIpOwotICAgICAgfQotICAgICAgZWxzZSB7IC8qIGV4aGF1c3QgZHYgKi8KLSAgICAgICAgc2l6ZV90IGR2cyA9IG1zLT5kdnNpemU7Ci0gICAgICAgIG1zLT5kdnNpemUgPSAwOwotICAgICAgICBtcy0+ZHYgPSAwOwotICAgICAgICBzZXRfaW51c2VfYW5kX3BpbnVzZShtcywgcCwgZHZzKTsKLSAgICAgIH0KLSAgICAgIG1lbSA9IGNodW5rMm1lbShwKTsKLSAgICAgIGNoZWNrX21hbGxvY2VkX2NodW5rKG1zLCBtZW0sIG5iKTsKLSAgICAgIGdvdG8gcG9zdGFjdGlvbjsKLSAgICB9Ci0KLSAgICBlbHNlIGlmIChuYiA8IG1zLT50b3BzaXplKSB7IC8qIFNwbGl0IHRvcCAqLwotICAgICAgc2l6ZV90IHJzaXplID0gbXMtPnRvcHNpemUgLT0gbmI7Ci0gICAgICBtY2h1bmtwdHIgcCA9IG1zLT50b3A7Ci0gICAgICBtY2h1bmtwdHIgciA9IG1zLT50b3AgPSBjaHVua19wbHVzX29mZnNldChwLCBuYik7Ci0gICAgICByLT5oZWFkID0gcnNpemUgfCBQSU5VU0VfQklUOwotICAgICAgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9pbnVzZV9jaHVuayhtcywgcCwgbmIpOwotICAgICAgbWVtID0gY2h1bmsybWVtKHApOwotICAgICAgY2hlY2tfdG9wX2NodW5rKG1zLCBtcy0+dG9wKTsKLSAgICAgIGNoZWNrX21hbGxvY2VkX2NodW5rKG1zLCBtZW0sIG5iKTsKLSAgICAgIGdvdG8gcG9zdGFjdGlvbjsKLSAgICB9Ci0KLSAgICBtZW0gPSBzeXNfYWxsb2MobXMsIG5iKTsKLQotICBwb3N0YWN0aW9uOgotICAgIFBPU1RBQ1RJT04obXMpOwotICAgIHJldHVybiBtZW07Ci0gIH0KLQotICByZXR1cm4gMDsKLX0KLQotdm9pZCBtc3BhY2VfZnJlZShtc3BhY2UgbXNwLCB2b2lkKiBtZW0pIHsKLSAgaWYgKG1lbSAhPSAwKSB7Ci0gICAgbWNodW5rcHRyIHAgID0gbWVtMmNodW5rKG1lbSk7Ci0jaWYgRk9PVEVSUwotICAgIG1zdGF0ZSBmbSA9IGdldF9tc3RhdGVfZm9yKHApOwotI2Vsc2UgLyogRk9PVEVSUyAqLwotICAgIG1zdGF0ZSBmbSA9IChtc3RhdGUpbXNwOwotI2VuZGlmIC8qIEZPT1RFUlMgKi8KLSAgICBpZiAoIW9rX21hZ2ljKGZtKSkgewotICAgICAgVVNBR0VfRVJST1JfQUNUSU9OKGZtLCBwKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKCFQUkVBQ1RJT04oZm0pKSB7Ci0gICAgICBjaGVja19pbnVzZV9jaHVuayhmbSwgcCk7Ci0gICAgICBpZiAoUlRDSEVDSyhva19hZGRyZXNzKGZtLCBwKSAmJiBva19jaW51c2UocCkpKSB7Ci0gICAgICAgIHNpemVfdCBwc2l6ZSA9IGNodW5rc2l6ZShwKTsKLSAgICAgICAgbWNodW5rcHRyIG5leHQgPSBjaHVua19wbHVzX29mZnNldChwLCBwc2l6ZSk7Ci0gICAgICAgIGlmICghcGludXNlKHApKSB7Ci0gICAgICAgICAgc2l6ZV90IHByZXZzaXplID0gcC0+cHJldl9mb290OwotICAgICAgICAgIGlmICgocHJldnNpemUgJiBJU19NTUFQUEVEX0JJVCkgIT0gMCkgewotICAgICAgICAgICAgcHJldnNpemUgJj0gfklTX01NQVBQRURfQklUOwotICAgICAgICAgICAgcHNpemUgKz0gcHJldnNpemUgKyBNTUFQX0ZPT1RfUEFEOwotICAgICAgICAgICAgaWYgKENBTExfTVVOTUFQKChjaGFyKilwIC0gcHJldnNpemUsIHBzaXplKSA9PSAwKQotICAgICAgICAgICAgICBmbS0+Zm9vdHByaW50IC09IHBzaXplOwotICAgICAgICAgICAgZ290byBwb3N0YWN0aW9uOwotICAgICAgICAgIH0KLSAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIG1jaHVua3B0ciBwcmV2ID0gY2h1bmtfbWludXNfb2Zmc2V0KHAsIHByZXZzaXplKTsKLSAgICAgICAgICAgIHBzaXplICs9IHByZXZzaXplOwotICAgICAgICAgICAgcCA9IHByZXY7Ci0gICAgICAgICAgICBpZiAoUlRDSEVDSyhva19hZGRyZXNzKGZtLCBwcmV2KSkpIHsgLyogY29uc29saWRhdGUgYmFja3dhcmQgKi8KLSAgICAgICAgICAgICAgaWYgKHAgIT0gZm0tPmR2KSB7Ci0gICAgICAgICAgICAgICAgdW5saW5rX2NodW5rKGZtLCBwLCBwcmV2c2l6ZSk7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgZWxzZSBpZiAoKG5leHQtPmhlYWQgJiBJTlVTRV9CSVRTKSA9PSBJTlVTRV9CSVRTKSB7Ci0gICAgICAgICAgICAgICAgZm0tPmR2c2l6ZSA9IHBzaXplOwotICAgICAgICAgICAgICAgIHNldF9mcmVlX3dpdGhfcGludXNlKHAsIHBzaXplLCBuZXh0KTsKLSAgICAgICAgICAgICAgICBnb3RvIHBvc3RhY3Rpb247Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgZ290byBlcnJvcmFjdGlvbjsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoUlRDSEVDSyhva19uZXh0KHAsIG5leHQpICYmIG9rX3BpbnVzZShuZXh0KSkpIHsKLSAgICAgICAgICBpZiAoIWNpbnVzZShuZXh0KSkgeyAgLyogY29uc29saWRhdGUgZm9yd2FyZCAqLwotICAgICAgICAgICAgaWYgKG5leHQgPT0gZm0tPnRvcCkgewotICAgICAgICAgICAgICBzaXplX3QgdHNpemUgPSBmbS0+dG9wc2l6ZSArPSBwc2l6ZTsKLSAgICAgICAgICAgICAgZm0tPnRvcCA9IHA7Ci0gICAgICAgICAgICAgIHAtPmhlYWQgPSB0c2l6ZSB8IFBJTlVTRV9CSVQ7Ci0gICAgICAgICAgICAgIGlmIChwID09IGZtLT5kdikgewotICAgICAgICAgICAgICAgIGZtLT5kdiA9IDA7Ci0gICAgICAgICAgICAgICAgZm0tPmR2c2l6ZSA9IDA7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgaWYgKHNob3VsZF90cmltKGZtLCB0c2l6ZSkpCi0gICAgICAgICAgICAgICAgc3lzX3RyaW0oZm0sIDApOwotICAgICAgICAgICAgICBnb3RvIHBvc3RhY3Rpb247Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChuZXh0ID09IGZtLT5kdikgewotICAgICAgICAgICAgICBzaXplX3QgZHNpemUgPSBmbS0+ZHZzaXplICs9IHBzaXplOwotICAgICAgICAgICAgICBmbS0+ZHYgPSBwOwotICAgICAgICAgICAgICBzZXRfc2l6ZV9hbmRfcGludXNlX29mX2ZyZWVfY2h1bmsocCwgZHNpemUpOwotICAgICAgICAgICAgICBnb3RvIHBvc3RhY3Rpb247Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgc2l6ZV90IG5zaXplID0gY2h1bmtzaXplKG5leHQpOwotICAgICAgICAgICAgICBwc2l6ZSArPSBuc2l6ZTsKLSAgICAgICAgICAgICAgdW5saW5rX2NodW5rKGZtLCBuZXh0LCBuc2l6ZSk7Ci0gICAgICAgICAgICAgIHNldF9zaXplX2FuZF9waW51c2Vfb2ZfZnJlZV9jaHVuayhwLCBwc2l6ZSk7Ci0gICAgICAgICAgICAgIGlmIChwID09IGZtLT5kdikgewotICAgICAgICAgICAgICAgIGZtLT5kdnNpemUgPSBwc2l6ZTsKLSAgICAgICAgICAgICAgICBnb3RvIHBvc3RhY3Rpb247Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgc2V0X2ZyZWVfd2l0aF9waW51c2UocCwgcHNpemUsIG5leHQpOwotICAgICAgICAgIGluc2VydF9jaHVuayhmbSwgcCwgcHNpemUpOwotICAgICAgICAgIGNoZWNrX2ZyZWVfY2h1bmsoZm0sIHApOwotICAgICAgICAgIGdvdG8gcG9zdGFjdGlvbjsKLSAgICAgICAgfQotICAgICAgfQotICAgIGVycm9yYWN0aW9uOgotICAgICAgVVNBR0VfRVJST1JfQUNUSU9OKGZtLCBwKTsKLSAgICBwb3N0YWN0aW9uOgotICAgICAgUE9TVEFDVElPTihmbSk7Ci0gICAgfQotICB9Ci19Ci0KLXZvaWQqIG1zcGFjZV9jYWxsb2MobXNwYWNlIG1zcCwgc2l6ZV90IG5fZWxlbWVudHMsIHNpemVfdCBlbGVtX3NpemUpIHsKLSAgdm9pZCAqbWVtOwotICBtc3RhdGUgbXMgPSAobXN0YXRlKW1zcDsKLSAgaWYgKCFva19tYWdpYyhtcykpIHsKLSAgICBVU0FHRV9FUlJPUl9BQ1RJT04obXMsbXMpOwotICAgIHJldHVybiAwOwotICB9Ci0gIGlmIChuX2VsZW1lbnRzICYmIE1BWF9TSVpFX1QgLyBuX2VsZW1lbnRzIDwgZWxlbV9zaXplKSB7Ci0gICAgLyogRmFpbCBvbiBvdmVyZmxvdyAqLwotICAgIE1BTExPQ19GQUlMVVJFX0FDVElPTjsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQotICBlbGVtX3NpemUgKj0gbl9lbGVtZW50czsKLSAgbWVtID0gaW50ZXJuYWxfbWFsbG9jKG1zLCBlbGVtX3NpemUpOwotICBpZiAobWVtICYmIGNhbGxvY19tdXN0X2NsZWFyKG1lbTJjaHVuayhtZW0pKSkKLSAgICBtZW1zZXQobWVtLCAwLCBlbGVtX3NpemUpOwotICByZXR1cm4gbWVtOwotfQotCi12b2lkKiBtc3BhY2VfcmVhbGxvYyhtc3BhY2UgbXNwLCB2b2lkKiBvbGRtZW0sIHNpemVfdCBieXRlcykgewotICBpZiAob2xkbWVtID09IDApCi0gICAgcmV0dXJuIG1zcGFjZV9tYWxsb2MobXNwLCBieXRlcyk7Ci0jaWZkZWYgUkVBTExPQ19aRVJPX0JZVEVTX0ZSRUVTCi0gIGlmIChieXRlcyA9PSAwKSB7Ci0gICAgbXNwYWNlX2ZyZWUobXNwLCBvbGRtZW0pOwotICAgIHJldHVybiAwOwotICB9Ci0jZW5kaWYgLyogUkVBTExPQ19aRVJPX0JZVEVTX0ZSRUVTICovCi0gIGVsc2UgewotI2lmIEZPT1RFUlMKLSAgICBtY2h1bmtwdHIgcCAgPSBtZW0yY2h1bmsob2xkbWVtKTsKLSAgICBtc3RhdGUgbXMgPSBnZXRfbXN0YXRlX2ZvcihwKTsKLSNlbHNlIC8qIEZPT1RFUlMgKi8KLSAgICBtc3RhdGUgbXMgPSAobXN0YXRlKW1zcDsKLSNlbmRpZiAvKiBGT09URVJTICovCi0gICAgaWYgKCFva19tYWdpYyhtcykpIHsKLSAgICAgIFVTQUdFX0VSUk9SX0FDVElPTihtcyxtcyk7Ci0gICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgcmV0dXJuIGludGVybmFsX3JlYWxsb2MobXMsIG9sZG1lbSwgYnl0ZXMpOwotICB9Ci19Ci0KLSNpZiBBTkRST0lECi12b2lkKiBtc3BhY2VfbWVyZ2Vfb2JqZWN0cyhtc3BhY2UgbXNwLCB2b2lkKiBtZW1hLCB2b2lkKiBtZW1iKQotewotICAvKiBQUkVBQ1RJT04vUE9TVEFDVElPTiBhcmVuJ3QgbmVjZXNzYXJ5IGJlY2F1c2Ugd2UgYXJlIG9ubHkKLSAgICAgbW9kaWZ5aW5nIGZpZWxkcyBvZiBpbnVzZSBjaHVua3Mgb3duZWQgYnkgdGhlIGN1cnJlbnQgdGhyZWFkLCBpbgotICAgICB3aGljaCBjYXNlIG5vIG90aGVyIG1hbGxvYyBvcGVyYXRpb25zIGNhbiB0b3VjaCB0aGVtLgotICAgKi8KLSAgaWYgKG1lbWEgPT0gTlVMTCB8fCBtZW1iID09IE5VTEwpIHsKLSAgICByZXR1cm4gTlVMTDsKLSAgfQotICBtY2h1bmtwdHIgcGEgPSBtZW0yY2h1bmsobWVtYSk7Ci0gIG1jaHVua3B0ciBwYiA9IG1lbTJjaHVuayhtZW1iKTsKLQotI2lmIEZPT1RFUlMKLSAgbXN0YXRlIGZtID0gZ2V0X21zdGF0ZV9mb3IocGEpOwotI2Vsc2UgLyogRk9PVEVSUyAqLwotICBtc3RhdGUgZm0gPSAobXN0YXRlKW1zcDsKLSNlbmRpZiAvKiBGT09URVJTICovCi0gIGlmICghb2tfbWFnaWMoZm0pKSB7Ci0gICAgVVNBR0VfRVJST1JfQUNUSU9OKGZtLCBwYSk7Ci0gICAgcmV0dXJuIE5VTEw7Ci0gIH0KLSAgY2hlY2tfaW51c2VfY2h1bmsoZm0sIHBhKTsKLSAgaWYgKFJUQ0hFQ0sob2tfYWRkcmVzcyhmbSwgcGEpICYmIG9rX2NpbnVzZShwYSkpKSB7Ci0gICAgaWYgKG5leHRfY2h1bmsocGEpICE9IHBiKSB7Ci0gICAgICAvKiBTaW5jZSBwYiBtYXkgbm90IGJlIGluIGZtLCB3ZSBjYW4ndCBjaGVjayBva19hZGRyZXNzKGZtLCBwYik7Ci0gICAgICAgICBzaW5jZSBva19jaW51c2UocGIpIHdvdWxkIGJlIHVuc2FmZSBiZWZvcmUgYW4gYWRkcmVzcyBjaGVjaywKLSAgICAgICAgIHJldHVybiBOVUxMIHJhdGhlciB0aGFuIGludm9rZSBVU0FHRV9FUlJPUl9BQ1RJT04gaWYgcGIgaXMgbm90Ci0gICAgICAgICBpbiB1c2Ugb3IgaXMgYSBib2d1cyBhZGRyZXNzLgotICAgICAgICovCi0gICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAgLyogU2luY2UgYiBmb2xsb3dzIGEsIHRoZXkgc2hhcmUgdGhlIG1zcGFjZS4gKi8KLSNpZiBGT09URVJTCi0gICAgYXNzZXJ0KGZtID09IGdldF9tc3RhdGVfZm9yKHBiKSk7Ci0jZW5kaWYgLyogRk9PVEVSUyAqLwotICAgIGNoZWNrX2ludXNlX2NodW5rKGZtLCBwYik7Ci0gICAgaWYgKFJUQ0hFQ0sob2tfYWRkcmVzcyhmbSwgcGIpICYmIG9rX2NpbnVzZShwYikpKSB7Ci0gICAgICBzaXplX3Qgc3ogPSBjaHVua3NpemUocGIpOwotICAgICAgcGEtPmhlYWQgKz0gc3o7Ci0gICAgICAvKiBNYWtlIHN1cmUgcGEgc3RpbGwgcGFzc2VzLiAqLwotICAgICAgY2hlY2tfaW51c2VfY2h1bmsoZm0sIHBhKTsKLSAgICAgIHJldHVybiBtZW1hOwotICAgIH0KLSAgICBlbHNlIHsKLSAgICAgIFVTQUdFX0VSUk9SX0FDVElPTihmbSwgcGIpOwotICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotICB9Ci0gIGVsc2UgewotICAgIFVTQUdFX0VSUk9SX0FDVElPTihmbSwgcGEpOwotICAgIHJldHVybiBOVUxMOwotICB9Ci19Ci0jZW5kaWYgLyogQU5EUk9JRCAqLwotCi12b2lkKiBtc3BhY2VfbWVtYWxpZ24obXNwYWNlIG1zcCwgc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IGJ5dGVzKSB7Ci0gIG1zdGF0ZSBtcyA9IChtc3RhdGUpbXNwOwotICBpZiAoIW9rX21hZ2ljKG1zKSkgewotICAgIFVTQUdFX0VSUk9SX0FDVElPTihtcyxtcyk7Ci0gICAgcmV0dXJuIDA7Ci0gIH0KLSAgcmV0dXJuIGludGVybmFsX21lbWFsaWduKG1zLCBhbGlnbm1lbnQsIGJ5dGVzKTsKLX0KLQotdm9pZCoqIG1zcGFjZV9pbmRlcGVuZGVudF9jYWxsb2MobXNwYWNlIG1zcCwgc2l6ZV90IG5fZWxlbWVudHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgZWxlbV9zaXplLCB2b2lkKiBjaHVua3NbXSkgewotICBzaXplX3Qgc3ogPSBlbGVtX3NpemU7IC8qIHNlcnZlcyBhcyAxLWVsZW1lbnQgYXJyYXkgKi8KLSAgbXN0YXRlIG1zID0gKG1zdGF0ZSltc3A7Ci0gIGlmICghb2tfbWFnaWMobXMpKSB7Ci0gICAgVVNBR0VfRVJST1JfQUNUSU9OKG1zLG1zKTsKLSAgICByZXR1cm4gMDsKLSAgfQotICByZXR1cm4gaWFsbG9jKG1zLCBuX2VsZW1lbnRzLCAmc3osIDMsIGNodW5rcyk7Ci19Ci0KLXZvaWQqKiBtc3BhY2VfaW5kZXBlbmRlbnRfY29tYWxsb2MobXNwYWNlIG1zcCwgc2l6ZV90IG5fZWxlbWVudHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBzaXplc1tdLCB2b2lkKiBjaHVua3NbXSkgewotICBtc3RhdGUgbXMgPSAobXN0YXRlKW1zcDsKLSAgaWYgKCFva19tYWdpYyhtcykpIHsKLSAgICBVU0FHRV9FUlJPUl9BQ1RJT04obXMsbXMpOwotICAgIHJldHVybiAwOwotICB9Ci0gIHJldHVybiBpYWxsb2MobXMsIG5fZWxlbWVudHMsIHNpemVzLCAwLCBjaHVua3MpOwotfQotCi1pbnQgbXNwYWNlX3RyaW0obXNwYWNlIG1zcCwgc2l6ZV90IHBhZCkgewotICBpbnQgcmVzdWx0ID0gMDsKLSAgbXN0YXRlIG1zID0gKG1zdGF0ZSltc3A7Ci0gIGlmIChva19tYWdpYyhtcykpIHsKLSAgICBpZiAoIVBSRUFDVElPTihtcykpIHsKLSAgICAgIHJlc3VsdCA9IHN5c190cmltKG1zLCBwYWQpOwotICAgICAgUE9TVEFDVElPTihtcyk7Ci0gICAgfQotICB9Ci0gIGVsc2UgewotICAgIFVTQUdFX0VSUk9SX0FDVElPTihtcyxtcyk7Ci0gIH0KLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdm9pZCBtc3BhY2VfbWFsbG9jX3N0YXRzKG1zcGFjZSBtc3ApIHsKLSAgbXN0YXRlIG1zID0gKG1zdGF0ZSltc3A7Ci0gIGlmIChva19tYWdpYyhtcykpIHsKLSAgICBpbnRlcm5hbF9tYWxsb2Nfc3RhdHMobXMpOwotICB9Ci0gIGVsc2UgewotICAgIFVTQUdFX0VSUk9SX0FDVElPTihtcyxtcyk7Ci0gIH0KLX0KLQotc2l6ZV90IG1zcGFjZV9mb290cHJpbnQobXNwYWNlIG1zcCkgewotICBzaXplX3QgcmVzdWx0OwotICBtc3RhdGUgbXMgPSAobXN0YXRlKW1zcDsKLSAgaWYgKG9rX21hZ2ljKG1zKSkgewotICAgIHJlc3VsdCA9IG1zLT5mb290cHJpbnQ7Ci0gIH0KLSAgZWxzZSB7Ci0gICAgVVNBR0VfRVJST1JfQUNUSU9OKG1zLG1zKTsKLSAgfQotICByZXR1cm4gcmVzdWx0OwotfQotCi0jaWYgVVNFX01BWF9BTExPV0VEX0ZPT1RQUklOVAotc2l6ZV90IG1zcGFjZV9tYXhfYWxsb3dlZF9mb290cHJpbnQobXNwYWNlIG1zcCkgewotICBzaXplX3QgcmVzdWx0OwotICBtc3RhdGUgbXMgPSAobXN0YXRlKW1zcDsKLSAgaWYgKG9rX21hZ2ljKG1zKSkgewotICAgIHJlc3VsdCA9IG1zLT5tYXhfYWxsb3dlZF9mb290cHJpbnQ7Ci0gIH0KLSAgZWxzZSB7Ci0gICAgVVNBR0VfRVJST1JfQUNUSU9OKG1zLG1zKTsKLSAgfQotICByZXR1cm4gcmVzdWx0OwotfQotCi12b2lkIG1zcGFjZV9zZXRfbWF4X2FsbG93ZWRfZm9vdHByaW50KG1zcGFjZSBtc3AsIHNpemVfdCBieXRlcykgewotICBtc3RhdGUgbXMgPSAobXN0YXRlKW1zcDsKLSAgaWYgKG9rX21hZ2ljKG1zKSkgewotICAgIGlmIChieXRlcyA+IG1zLT5mb290cHJpbnQpIHsKLSAgICAgIC8qIEluY3JlYXNlIHRoZSBzaXplIGluIG11bHRpcGxlcyBvZiB0aGUgZ3JhbnVsYXJpdHksCi0gICAgICAgKiB3aGljaCBpcyB0aGUgc21hbGxlc3QgdW5pdCB3ZSByZXF1ZXN0IGZyb20gdGhlIHN5c3RlbS4KLSAgICAgICAqLwotICAgICAgbXMtPm1heF9hbGxvd2VkX2Zvb3RwcmludCA9IG1zLT5mb290cHJpbnQgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyYW51bGFyaXR5X2FsaWduKGJ5dGVzIC0gbXMtPmZvb3RwcmludCk7Ci0gICAgfQotICAgIGVsc2UgewotICAgICAgLy9UT0RPOiBhbGxvdyBmb3IgcmVkdWNpbmcgdGhlIG1heCBmb290cHJpbnQKLSAgICAgIG1zLT5tYXhfYWxsb3dlZF9mb290cHJpbnQgPSBtcy0+Zm9vdHByaW50OwotICAgIH0KLSAgfQotICBlbHNlIHsKLSAgICBVU0FHRV9FUlJPUl9BQ1RJT04obXMsbXMpOwotICB9Ci19Ci0jZW5kaWYKLQotc2l6ZV90IG1zcGFjZV9tYXhfZm9vdHByaW50KG1zcGFjZSBtc3ApIHsKLSAgc2l6ZV90IHJlc3VsdDsKLSAgbXN0YXRlIG1zID0gKG1zdGF0ZSltc3A7Ci0gIGlmIChva19tYWdpYyhtcykpIHsKLSAgICByZXN1bHQgPSBtcy0+bWF4X2Zvb3RwcmludDsKLSAgfQotICBlbHNlIHsKLSAgICBVU0FHRV9FUlJPUl9BQ1RJT04obXMsbXMpOwotICB9Ci0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLQotI2lmICFOT19NQUxMSU5GTwotc3RydWN0IG1hbGxpbmZvIG1zcGFjZV9tYWxsaW5mbyhtc3BhY2UgbXNwKSB7Ci0gIG1zdGF0ZSBtcyA9IChtc3RhdGUpbXNwOwotICBpZiAoIW9rX21hZ2ljKG1zKSkgewotICAgIFVTQUdFX0VSUk9SX0FDVElPTihtcyxtcyk7Ci0gIH0KLSAgcmV0dXJuIGludGVybmFsX21hbGxpbmZvKG1zKTsKLX0KLSNlbmRpZiAvKiBOT19NQUxMSU5GTyAqLwotCi1pbnQgbXNwYWNlX21hbGxvcHQoaW50IHBhcmFtX251bWJlciwgaW50IHZhbHVlKSB7Ci0gIHJldHVybiBjaGFuZ2VfbXBhcmFtKHBhcmFtX251bWJlciwgdmFsdWUpOwotfQotCi0jZW5kaWYgLyogTVNQQUNFUyAqLwotCi0jaWYgTVNQQUNFUyAmJiBPTkxZX01TUEFDRVMKLXZvaWQgbXNwYWNlX3dhbGtfZnJlZV9wYWdlcyhtc3BhY2UgbXNwLAotICAgIHZvaWQoKmhhbmRsZXIpKHZvaWQgKnN0YXJ0LCB2b2lkICplbmQsIHZvaWQgKmFyZyksIHZvaWQgKmhhcmcpCi17Ci0gIG1zdGF0ZSBtID0gKG1zdGF0ZSltc3A7Ci0gIGlmICghb2tfbWFnaWMobSkpIHsKLSAgICBVU0FHRV9FUlJPUl9BQ1RJT04obSxtKTsKLSAgICByZXR1cm47Ci0gIH0KLSNlbHNlCi12b2lkIGRsbWFsbG9jX3dhbGtfZnJlZV9wYWdlcyh2b2lkKCpoYW5kbGVyKSh2b2lkICpzdGFydCwgdm9pZCAqZW5kLCB2b2lkICphcmcpLAotICAgIHZvaWQgKmhhcmcpCi17Ci0gIG1zdGF0ZSBtID0gKG1zdGF0ZSlnbTsKLSNlbmRpZgotICBpZiAoIVBSRUFDVElPTihtKSkgewotICAgIGlmIChpc19pbml0aWFsaXplZChtKSkgewotICAgICAgbXNlZ21lbnRwdHIgcyA9ICZtLT5zZWc7Ci0gICAgICB3aGlsZSAocyAhPSAwKSB7Ci0gICAgICAgIG1jaHVua3B0ciBwID0gYWxpZ25fYXNfY2h1bmsocy0+YmFzZSk7Ci0gICAgICAgIHdoaWxlIChzZWdtZW50X2hvbGRzKHMsIHApICYmCi0gICAgICAgICAgICAgICBwICE9IG0tPnRvcCAmJiBwLT5oZWFkICE9IEZFTkNFUE9TVF9IRUFEKSB7Ci0gICAgICAgICAgdm9pZCAqY2h1bmtwdHIsICp1c2VycHRyOwotICAgICAgICAgIHNpemVfdCBjaHVua2xlbiwgdXNlcmxlbjsKLSAgICAgICAgICBjaHVua3B0ciA9IHA7Ci0gICAgICAgICAgY2h1bmtsZW4gPSBjaHVua3NpemUocCk7Ci0gICAgICAgICAgaWYgKCFjaW51c2UocCkpIHsKLSAgICAgICAgICAgIHZvaWQgKnN0YXJ0OwotICAgICAgICAgICAgaWYgKGlzX3NtYWxsKGNodW5rbGVuKSkgewotICAgICAgICAgICAgICBzdGFydCA9ICh2b2lkICopKHAgKyAxKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICBzdGFydCA9ICh2b2lkICopKCh0Y2h1bmtwdHIpcCArIDEpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaGFuZGxlcihzdGFydCwgbmV4dF9jaHVuayhwKSwgaGFyZyk7Ci0gICAgICAgICAgfQotICAgICAgICAgIHAgPSBuZXh0X2NodW5rKHApOwotICAgICAgICB9Ci0gICAgICAgIGlmIChwID09IG0tPnRvcCkgewotICAgICAgICAgIGhhbmRsZXIoKHZvaWQgKikocCArIDEpLCBuZXh0X2NodW5rKHApLCBoYXJnKTsKLSAgICAgICAgfQotICAgICAgICBzID0gcy0+bmV4dDsKLSAgICAgIH0KLSAgICB9Ci0gICAgUE9TVEFDVElPTihtKTsKLSAgfQotfQotCi0KLSNpZiBNU1BBQ0VTICYmIE9OTFlfTVNQQUNFUwotdm9pZCBtc3BhY2Vfd2Fsa19oZWFwKG1zcGFjZSBtc3AsCi0gICAgICAgICAgICAgICAgICAgICAgdm9pZCgqaGFuZGxlcikoY29uc3Qgdm9pZCAqY2h1bmtwdHIsIHNpemVfdCBjaHVua2xlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICp1c2VycHRyLCBzaXplX3QgdXNlcmxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICphcmcpLAotICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmhhcmcpCi17Ci0gIG1zZWdtZW50cHRyIHM7Ci0gIG1zdGF0ZSBtID0gKG1zdGF0ZSltc3A7Ci0gIGlmICghb2tfbWFnaWMobSkpIHsKLSAgICBVU0FHRV9FUlJPUl9BQ1RJT04obSxtKTsKLSAgICByZXR1cm47Ci0gIH0KLSNlbHNlCi12b2lkIGRsbWFsbG9jX3dhbGtfaGVhcCh2b2lkKCpoYW5kbGVyKShjb25zdCB2b2lkICpjaHVua3B0ciwgc2l6ZV90IGNodW5rbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqdXNlcnB0ciwgc2l6ZV90IHVzZXJsZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICphcmcpLAotICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqaGFyZykKLXsKLSAgbXNlZ21lbnRwdHIgczsKLSAgbXN0YXRlIG0gPSAobXN0YXRlKWdtOwotI2VuZGlmCi0KLSAgcyA9ICZtLT5zZWc7Ci0gIHdoaWxlIChzICE9IDApIHsKLSAgICBtY2h1bmtwdHIgcCA9IGFsaWduX2FzX2NodW5rKHMtPmJhc2UpOwotICAgIHdoaWxlIChzZWdtZW50X2hvbGRzKHMsIHApICYmCi0gICAgICAgICAgIHAgIT0gbS0+dG9wICYmIHAtPmhlYWQgIT0gRkVOQ0VQT1NUX0hFQUQpIHsKLSAgICAgIHZvaWQgKmNodW5rcHRyLCAqdXNlcnB0cjsKLSAgICAgIHNpemVfdCBjaHVua2xlbiwgdXNlcmxlbjsKLSAgICAgIGNodW5rcHRyID0gcDsKLSAgICAgIGNodW5rbGVuID0gY2h1bmtzaXplKHApOwotICAgICAgaWYgKGNpbnVzZShwKSkgewotICAgICAgICB1c2VycHRyID0gY2h1bmsybWVtKHApOwotICAgICAgICB1c2VybGVuID0gY2h1bmtsZW4gLSBvdmVyaGVhZF9mb3IocCk7Ci0gICAgICB9Ci0gICAgICBlbHNlIHsKLSAgICAgICAgdXNlcnB0ciA9IE5VTEw7Ci0gICAgICAgIHVzZXJsZW4gPSAwOwotICAgICAgfQotICAgICAgaGFuZGxlcihjaHVua3B0ciwgY2h1bmtsZW4sIHVzZXJwdHIsIHVzZXJsZW4sIGhhcmcpOwotICAgICAgcCA9IG5leHRfY2h1bmsocCk7Ci0gICAgfQotICAgIGlmIChwID09IG0tPnRvcCkgewotICAgICAgLyogVGhlIHRvcCBjaHVuayBpcyBqdXN0IGEgYmlnIGZyZWUgY2h1bmsgZm9yIG91ciBwdXJwb3Nlcy4KLSAgICAgICAqLwotICAgICAgaGFuZGxlcihtLT50b3AsIG0tPnRvcHNpemUsIE5VTEwsIDAsIGhhcmcpOwotICAgIH0KLSAgICBzID0gcy0+bmV4dDsKLSAgfQorc3RhdGljIHZvaWQgX19iaW9uaWNfaGVhcF91c2FnZV9lcnJvcihjb25zdCBjaGFyKiBmdW5jdGlvbiwgdm9pZCogYWRkcmVzcykgeworICBfX2xpYmNfZmF0YWxfbm9fYWJvcnQoImludmFsaWQgYWRkcmVzcyBvciBhZGRyZXNzIG9mIGNvcnJ1cHQgYmxvY2sgJXAgcGFzc2VkIHRvICVzIiwKKyAgICAgICAgICAgICAgIGFkZHJlc3MsIGZ1bmN0aW9uKTsKKyAgLy8gU28gdGhhdCBkZWJ1Z2dlcmQgZ2l2ZXMgdXMgYSBtZW1vcnkgZHVtcCBhcm91bmQgdGhlIHNwZWNpZmljIGFkZHJlc3MuCisgIC8vIFRPRE86IGltcHJvdmUgdGhlIGRlYnVnZ2VyZCBwcm90b2NvbCBzbyB3ZSBjYW4gdGVsbCBpdCB0byBkdW1wIGFuIGFkZHJlc3Mgd2hlbiB3ZSBhYm9ydC4KKyAgKigoaW50KiopIDB4ZGVhZGJhYWQpID0gKGludCopIGFkZHJlc3M7CiB9Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tIEFsdGVybmF0aXZlIE1PUkVDT1JFIGZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLS8qCi0gIEd1aWRlbGluZXMgZm9yIGNyZWF0aW5nIGEgY3VzdG9tIHZlcnNpb24gb2YgTU9SRUNPUkU6Ci0KLSAgKiBGb3IgYmVzdCBwZXJmb3JtYW5jZSwgTU9SRUNPUkUgc2hvdWxkIGFsbG9jYXRlIGluIG11bHRpcGxlcyBvZiBwYWdlc2l6ZS4KLSAgKiBNT1JFQ09SRSBtYXkgYWxsb2NhdGUgbW9yZSBtZW1vcnkgdGhhbiByZXF1ZXN0ZWQuIChPciBldmVuIGxlc3MsCi0gICAgICBidXQgdGhpcyB3aWxsIHVzdWFsbHkgcmVzdWx0IGluIGEgbWFsbG9jIGZhaWx1cmUuKQotICAqIE1PUkVDT1JFIG11c3Qgbm90IGFsbG9jYXRlIG1lbW9yeSB3aGVuIGdpdmVuIGFyZ3VtZW50IHplcm8sIGJ1dAotICAgICAgaW5zdGVhZCByZXR1cm4gb25lIHBhc3QgdGhlIGVuZCBhZGRyZXNzIG9mIG1lbW9yeSBmcm9tIHByZXZpb3VzCi0gICAgICBub256ZXJvIGNhbGwuCi0gICogRm9yIGJlc3QgcGVyZm9ybWFuY2UsIGNvbnNlY3V0aXZlIGNhbGxzIHRvIE1PUkVDT1JFIHdpdGggcG9zaXRpdmUKLSAgICAgIGFyZ3VtZW50cyBzaG91bGQgcmV0dXJuIGluY3JlYXNpbmcgYWRkcmVzc2VzLCBpbmRpY2F0aW5nIHRoYXQKLSAgICAgIHNwYWNlIGhhcyBiZWVuIGNvbnRpZ3VvdXNseSBleHRlbmRlZC4KLSAgKiBFdmVuIHRob3VnaCBjb25zZWN1dGl2ZSBjYWxscyB0byBNT1JFQ09SRSBuZWVkIG5vdCByZXR1cm4gY29udGlndW91cwotICAgICAgYWRkcmVzc2VzLCBpdCBtdXN0IGJlIE9LIGZvciBtYWxsb2MnZWQgY2h1bmtzIHRvIHNwYW4gbXVsdGlwbGUKLSAgICAgIHJlZ2lvbnMgaW4gdGhvc2UgY2FzZXMgd2hlcmUgdGhleSBkbyBoYXBwZW4gdG8gYmUgY29udGlndW91cy4KLSAgKiBNT1JFQ09SRSBuZWVkIG5vdCBoYW5kbGUgbmVnYXRpdmUgYXJndW1lbnRzIC0tIGl0IG1heSBpbnN0ZWFkCi0gICAgICBqdXN0IHJldHVybiBNRkFJTCB3aGVuIGdpdmVuIG5lZ2F0aXZlIGFyZ3VtZW50cy4KLSAgICAgIE5lZ2F0aXZlIGFyZ3VtZW50cyBhcmUgYWx3YXlzIG11bHRpcGxlcyBvZiBwYWdlc2l6ZS4gTU9SRUNPUkUKLSAgICAgIG11c3Qgbm90IG1pc2ludGVycHJldCBuZWdhdGl2ZSBhcmdzIGFzIGxhcmdlIHBvc2l0aXZlIHVuc2lnbmVkCi0gICAgICBhcmdzLiBZb3UgY2FuIHN1cHByZXNzIGFsbCBzdWNoIGNhbGxzIGZyb20gZXZlbiBvY2N1cnJpbmcgYnkgZGVmaW5pbmcKLSAgICAgIE1PUkVDT1JFX0NBTk5PVF9UUklNLAotCi0gIEFzIGFuIGV4YW1wbGUgYWx0ZXJuYXRpdmUgTU9SRUNPUkUsIGhlcmUgaXMgYSBjdXN0b20gYWxsb2NhdG9yCi0gIGtpbmRseSBjb250cmlidXRlZCBmb3IgcHJlLU9TWCBtYWNPUy4gIEl0IHVzZXMgdmlydHVhbGx5IGJ1dCBub3QKLSAgbmVjZXNzYXJpbHkgcGh5c2ljYWxseSBjb250aWd1b3VzIG5vbi1wYWdlZCBtZW1vcnkgKGxvY2tlZCBpbiwKLSAgcHJlc2VudCBhbmQgd29uJ3QgZ2V0IHN3YXBwZWQgb3V0KS4gIFlvdSBjYW4gdXNlIGl0IGJ5IHVuY29tbWVudGluZwotICB0aGlzIHNlY3Rpb24sIGFkZGluZyBzb21lICNpbmNsdWRlcywgYW5kIHNldHRpbmcgdXAgdGhlIGFwcHJvcHJpYXRlCi0gIGRlZmluZXMgYWJvdmU6Ci0KLSAgICAgICNkZWZpbmUgTU9SRUNPUkUgb3NNb3JlQ29yZQotCi0gIFRoZXJlIGlzIGFsc28gYSBzaHV0ZG93biByb3V0aW5lIHRoYXQgc2hvdWxkIHNvbWVob3cgYmUgY2FsbGVkIGZvcgotICBjbGVhbnVwIHVwb24gcHJvZ3JhbSBleGl0LgotCi0gICNkZWZpbmUgTUFYX1BPT0xfRU5UUklFUyAxMDAKLSAgI2RlZmluZSBNSU5JTVVNX01PUkVDT1JFX1NJWkUgICg2NCAqIDEwMjRVKQotICBzdGF0aWMgaW50IG5leHRfb3NfcG9vbDsKLSAgdm9pZCAqb3VyX29zX3Bvb2xzW01BWF9QT09MX0VOVFJJRVNdOwotCi0gIHZvaWQgKm9zTW9yZUNvcmUoaW50IHNpemUpCi0gIHsKLSAgICB2b2lkICpwdHIgPSAwOwotICAgIHN0YXRpYyB2b2lkICpzYnJrX3RvcCA9IDA7Ci0KLSAgICBpZiAoc2l6ZSA+IDApCi0gICAgewotICAgICAgaWYgKHNpemUgPCBNSU5JTVVNX01PUkVDT1JFX1NJWkUpCi0gICAgICAgICBzaXplID0gTUlOSU1VTV9NT1JFQ09SRV9TSVpFOwotICAgICAgaWYgKEN1cnJlbnRFeGVjdXRpb25MZXZlbCgpID09IGtUYXNrTGV2ZWwpCi0gICAgICAgICBwdHIgPSBQb29sQWxsb2NhdGVSZXNpZGVudChzaXplICsgUk1fUEFHRV9TSVpFLCAwKTsKLSAgICAgIGlmIChwdHIgPT0gMCkKLSAgICAgIHsKLSAgICAgICAgcmV0dXJuICh2b2lkICopIE1GQUlMOwotICAgICAgfQotICAgICAgLy8gc2F2ZSBwdHJzIHNvIHRoZXkgY2FuIGJlIGZyZWVkIGR1cmluZyBjbGVhbnVwCi0gICAgICBvdXJfb3NfcG9vbHNbbmV4dF9vc19wb29sXSA9IHB0cjsKLSAgICAgIG5leHRfb3NfcG9vbCsrOwotICAgICAgcHRyID0gKHZvaWQgKikgKCgoKHNpemVfdCkgcHRyKSArIFJNX1BBR0VfTUFTSykgJiB+Uk1fUEFHRV9NQVNLKTsKLSAgICAgIHNicmtfdG9wID0gKGNoYXIgKikgcHRyICsgc2l6ZTsKLSAgICAgIHJldHVybiBwdHI7Ci0gICAgfQotICAgIGVsc2UgaWYgKHNpemUgPCAwKQotICAgIHsKLSAgICAgIC8vIHdlIGRvbid0IGN1cnJlbnRseSBzdXBwb3J0IHNocmluayBiZWhhdmlvcgotICAgICAgcmV0dXJuICh2b2lkICopIE1GQUlMOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgcmV0dXJuIHNicmtfdG9wOwotICAgIH0KLSAgfQotCi0gIC8vIGNsZWFudXAgYW55IGFsbG9jYXRlZCBtZW1vcnkgcG9vbHMKLSAgLy8gY2FsbGVkIGFzIGxhc3QgdGhpbmcgYmVmb3JlIHNodXR0aW5nIGRvd24gZHJpdmVyCi0KLSAgdm9pZCBvc0NsZWFudXBNZW0odm9pZCkKLSAgewotICAgIHZvaWQgKipwdHI7Ci0KLSAgICBmb3IgKHB0ciA9IG91cl9vc19wb29sczsgcHRyIDwgJm91cl9vc19wb29sc1tNQVhfUE9PTF9FTlRSSUVTXTsgcHRyKyspCi0gICAgICBpZiAoKnB0cikKLSAgICAgIHsKLSAgICAgICAgIFBvb2xEZWFsbG9jYXRlKCpwdHIpOwotICAgICAgICAgKnB0ciA9IDA7Ci0gICAgICB9Ci0gIH0KLQotKi8KLQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotSGlzdG9yeToKLSAgICBWMi44LjMgVGh1IFNlcCAyMiAxMToxNjozMiAyMDA1ICBEb3VnIExlYSAgKGRsIGF0IGdlZSkKLSAgICAgICogQWRkIG1heF9mb290cHJpbnQgZnVuY3Rpb25zCi0gICAgICAqIEVuc3VyZSBhbGwgYXBwcm9wcmlhdGUgbGl0ZXJhbHMgYXJlIHNpemVfdAotICAgICAgKiBGaXggY29uZGl0aW9uYWwgY29tcGlsYXRpb24gcHJvYmxlbSBmb3Igc29tZSAjZGVmaW5lIHNldHRpbmdzCi0gICAgICAqIEF2b2lkIGNvbmNhdGVuYXRpbmcgc2VnbWVudHMgd2l0aCB0aGUgb25lIHByb3ZpZGVkCi0gICAgICAgIGluIGNyZWF0ZV9tc3BhY2Vfd2l0aF9iYXNlCi0gICAgICAqIFJlbmFtZSBzb21lIHZhcmlhYmxlcyB0byBhdm9pZCBjb21waWxlciBzaGFkb3dpbmcgd2FybmluZ3MKLSAgICAgICogVXNlIGV4cGxpY2l0IGxvY2sgaW5pdGlhbGl6YXRpb24uCi0gICAgICAqIEJldHRlciBoYW5kbGluZyBvZiBzYnJrIGludGVyZmVyZW5jZS4KLSAgICAgICogU2ltcGxpZnkgYW5kIGZpeCBzZWdtZW50IGluc2VydGlvbiwgdHJpbW1pbmcgYW5kIG1zcGFjZV9kZXN0cm95Ci0gICAgICAqIFJlaW5zdGF0ZSBSRUFMTE9DX1pFUk9fQllURVNfRlJFRVMgb3B0aW9uIGZyb20gMi43LngKLSAgICAgICogVGhhbmtzIGVzcGVjaWFsbHkgdG8gRGVubmlzIEZsYW5hZ2FuIGZvciBoZWxwIG9uIHRoZXNlLgotCi0gICAgVjIuOC4yIFN1biBKdW4gMTIgMTY6MDE6MTAgMjAwNSAgRG91ZyBMZWEgIChkbCBhdCBnZWUpCi0gICAgICAqIEZpeCBtZW1hbGlnbiBicmFjZSBlcnJvci4KLQotICAgIFYyLjguMSBXZWQgSnVuICA4IDE2OjExOjQ2IDIwMDUgIERvdWcgTGVhICAoZGwgYXQgZ2VlKQotICAgICAgKiBGaXggaW1wcm9wZXIgI2VuZGlmIG5lc3RpbmcgaW4gQysrCi0gICAgICAqIEFkZCBleHBsaWNpdCBjYXN0cyBuZWVkZWQgZm9yIEMrKwotCi0gICAgVjIuOC4wIE1vbiBNYXkgMzAgMTQ6MDk6MDIgMjAwNSAgRG91ZyBMZWEgIChkbCBhdCBnZWUpCi0gICAgICAqIFVzZSB0cmVlcyBmb3IgbGFyZ2UgYmlucwotICAgICAgKiBTdXBwb3J0IG1zcGFjZXMKLSAgICAgICogVXNlIHNlZ21lbnRzIHRvIHVuaWZ5IHNicmstYmFzZWQgYW5kIG1tYXAtYmFzZWQgc3lzdGVtIGFsbG9jYXRpb24sCi0gICAgICAgIHJlbW92aW5nIG5lZWQgZm9yIGVtdWxhdGlvbiBvbiBtb3N0IHBsYXRmb3JtcyB3aXRob3V0IHNicmsuCi0gICAgICAqIERlZmF1bHQgc2FmZXR5IGNoZWNrcwotICAgICAgKiBPcHRpb25hbCBmb290ZXIgY2hlY2tzLiBUaGFua3MgdG8gV2lsbGlhbSBSb2JlcnRzb24gZm9yIHRoZSBpZGVhLgotICAgICAgKiBJbnRlcm5hbCBjb2RlIHJlZmFjdG9yaW5nCi0gICAgICAqIEluY29ycG9yYXRlIHN1Z2dlc3Rpb25zIGFuZCBwbGF0Zm9ybS1zcGVjaWZpYyBjaGFuZ2VzLgotICAgICAgICBUaGFua3MgdG8gRGVubmlzIEZsYW5hZ2FuLCBDb2xpbiBQbHVtYiwgTmlhbGwgRG91Z2xhcywKLSAgICAgICAgQWFyb24gQmFjaG1hbm4sICBFbWVyeSBCZXJnZXIsIGFuZCBvdGhlcnMuCi0gICAgICAqIFNwZWVkIHVwIG5vbi1mYXN0YmluIHByb2Nlc3NpbmcgZW5vdWdoIHRvIHJlbW92ZSBmYXN0Ymlucy4KLSAgICAgICogUmVtb3ZlIHVzZWxlc3MgY2ZyZWUoKSB0byBhdm9pZCBjb25mbGljdHMgd2l0aCBvdGhlciBhcHBzLgotICAgICAgKiBSZW1vdmUgaW50ZXJuYWwgbWVtY3B5LCBtZW1zZXQuIENvbXBpbGVycyBoYW5kbGUgYnVpbHRpbnMgYmV0dGVyLgotICAgICAgKiBSZW1vdmUgc29tZSBvcHRpb25zIHRoYXQgbm8gb25lIGV2ZXIgdXNlZCBhbmQgcmVuYW1lIG90aGVycy4KLQotICAgIFYyLjcuMiBTYXQgQXVnIDE3IDA5OjA3OjMwIDIwMDIgIERvdWcgTGVhICAoZGwgYXQgZ2VlKQotICAgICAgKiBGaXggbWFsbG9jX3N0YXRlIGJpdG1hcCBhcnJheSBtaXNkZWNsYXJhdGlvbgotCi0gICAgVjIuNy4xIFRodSBKdWwgMjUgMTA6NTg6MDMgMjAwMiAgRG91ZyBMZWEgIChkbCBhdCBnZWUpCi0gICAgICAqIEFsbG93IHR1bmluZyBvZiBGSVJTVF9TT1JURURfQklOX1NJWkUKLSAgICAgICogVXNlIFBUUl9VSU5UIGFzIHR5cGUgZm9yIGFsbCBwdHItPmludCBjYXN0cy4gVGhhbmtzIHRvIEpvaG4gQmVsbW9udGUuCi0gICAgICAqIEJldHRlciBkZXRlY3Rpb24gYW5kIHN1cHBvcnQgZm9yIG5vbi1jb250aWd1b3VzbmVzcyBvZiBNT1JFQ09SRS4KLSAgICAgICAgVGhhbmtzIHRvIEFuZHJlYXMgTXVlbGxlciwgQ29uYWwgV2Fsc2gsIGFuZCBXb2xmcmFtIEdsb2dlcgotICAgICAgKiBCeXBhc3MgbW9zdCBvZiBtYWxsb2MgaWYgbm8gZnJlZXMuIFRoYW5rcyBUbyBFbWVyeSBCZXJnZXIuCi0gICAgICAqIEZpeCBmcmVlaW5nIG9mIG9sZCB0b3Agbm9uLWNvbnRpZ3VvdXMgY2h1bmsgaW0gc3lzbWFsbG9jLgotICAgICAgKiBSYWlzZWQgZGVmYXVsdCB0cmltIGFuZCBtYXAgdGhyZXNob2xkcyB0byAyNTZLLgotICAgICAgKiBGaXggbW1hcC1yZWxhdGVkICNkZWZpbmVzLiBUaGFua3MgdG8gTHVib3MgTHVuYWsuCi0gICAgICAqIEZpeCBjb3B5IG1hY3JvczsgYWRkZWQgTEFDS1NfRkNOVExfSC4gVGhhbmtzIHRvIE5lYWwgV2FsZmllbGQuCi0gICAgICAqIEJyYW5jaC1mcmVlIGJpbiBjYWxjdWxhdGlvbgotICAgICAgKiBEZWZhdWx0IHRyaW0gYW5kIG1tYXAgdGhyZXNob2xkcyBub3cgMjU2Sy4KLQotICAgIFYyLjcuMCBTdW4gTWFyIDExIDE0OjE0OjA2IDIwMDEgIERvdWcgTGVhICAoZGwgYXQgZ2VlKQotICAgICAgKiBJbnRyb2R1Y2UgaW5kZXBlbmRlbnRfY29tYWxsb2MgYW5kIGluZGVwZW5kZW50X2NhbGxvYy4KLSAgICAgICAgVGhhbmtzIHRvIE1pY2hhZWwgUGFjaG9zIGZvciBtb3RpdmF0aW9uIGFuZCBoZWxwLgotICAgICAgKiBNYWtlIG9wdGlvbmFsIC5oIGZpbGUgYXZhaWxhYmxlCi0gICAgICAqIEFsbG93ID4gMkdCIHJlcXVlc3RzIG9uIDMyYml0IHN5c3RlbXMuCi0gICAgICAqIG5ldyBXSU4zMiBzYnJrLCBtbWFwLCBtdW5tYXAsIGxvY2sgY29kZSBmcm9tIDxXYWx0ZXJAR2VOZVN5cy1lLmRlPi4KLSAgICAgICAgVGhhbmtzIGFsc28gdG8gQW5kcmVhcyBNdWVsbGVyIDxhLm11ZWxsZXIgYXQgcGFyYWRhdGVjLmRlPiwKLSAgICAgICAgYW5kIEFub255bW91cy4KLSAgICAgICogQWxsb3cgb3ZlcnJpZGUgb2YgTUFMTE9DX0FMSUdOTUVOVCAoVGhhbmtzIHRvIFJ1dWQgV2FpaiBmb3IKLSAgICAgICAgaGVscGluZyB0ZXN0IHRoaXMuKQotICAgICAgKiBtZW1hbGlnbjogY2hlY2sgYWxpZ25tZW50IGFyZwotICAgICAgKiByZWFsbG9jOiBkb24ndCB0cnkgdG8gc2hpZnQgY2h1bmtzIGJhY2t3YXJkcywgc2luY2UgdGhpcwotICAgICAgICBsZWFkcyB0byAgbW9yZSBmcmFnbWVudGF0aW9uIGluIHNvbWUgcHJvZ3JhbXMgYW5kIGRvZXNuJ3QKLSAgICAgICAgc2VlbSB0byBoZWxwIGluIGFueSBvdGhlcnMuCi0gICAgICAqIENvbGxlY3QgYWxsIGNhc2VzIGluIG1hbGxvYyByZXF1aXJpbmcgc3lzdGVtIG1lbW9yeSBpbnRvIHN5c21hbGxvYwotICAgICAgKiBVc2UgbW1hcCBhcyBiYWNrdXAgdG8gc2JyawotICAgICAgKiBQbGFjZSBhbGwgaW50ZXJuYWwgc3RhdGUgaW4gbWFsbG9jX3N0YXRlCi0gICAgICAqIEludHJvZHVjZSBmYXN0YmlucyAoYWx0aG91Z2ggc2ltaWxhciB0byAyLjUuMSkKLSAgICAgICogTWFueSBtaW5vciB0dW5pbmdzIGFuZCBjb3NtZXRpYyBpbXByb3ZlbWVudHMKLSAgICAgICogSW50cm9kdWNlIFVTRV9QVUJMSUNfTUFMTE9DX1dSQVBQRVJTLCBVU0VfTUFMTE9DX0xPQ0sKLSAgICAgICogSW50cm9kdWNlIE1BTExPQ19GQUlMVVJFX0FDVElPTiwgTU9SRUNPUkVfQ09OVElHVU9VUwotICAgICAgICBUaGFua3MgdG8gVG9ueSBFLiBCZW5uZXR0IDx0YmVubmV0dEBudmlkaWEuY29tPiBhbmQgb3RoZXJzLgotICAgICAgKiBJbmNsdWRlIGVycm5vLmggdG8gc3VwcG9ydCBkZWZhdWx0IGZhaWx1cmUgYWN0aW9uLgotCi0gICAgVjIuNi42IFN1biBEZWMgIDUgMDc6NDI6MTkgMTk5OSAgRG91ZyBMZWEgIChkbCBhdCBnZWUpCi0gICAgICAqIHJldHVybiBudWxsIGZvciBuZWdhdGl2ZSBhcmd1bWVudHMKLSAgICAgICogQWRkZWQgU2V2ZXJhbCBXSU4zMiBjbGVhbnVwcyBmcm9tIE1hcnRpbiBDLiBGb25nIDxtY2ZvbmcgYXQgeWFob28uY29tPgotICAgICAgICAgKiBBZGQgJ0xBQ0tTX1NZU19QQVJBTV9IJyBmb3IgdGhvc2Ugc3lzdGVtcyB3aXRob3V0ICdzeXMvcGFyYW0uaCcKLSAgICAgICAgICAoZS5nLiBXSU4zMiBwbGF0Zm9ybXMpCi0gICAgICAgICAqIENsZWFudXAgaGVhZGVyIGZpbGUgaW5jbHVzaW9uIGZvciBXSU4zMiBwbGF0Zm9ybXMKLSAgICAgICAgICogQ2xlYW51cCBjb2RlIHRvIGF2b2lkIE1pY3Jvc29mdCBWaXN1YWwgQysrIGNvbXBpbGVyIGNvbXBsYWludHMKLSAgICAgICAgICogQWRkICdVU0VfRExfUFJFRklYJyB0byBxdWlja2x5IGFsbG93IGNvLWV4aXN0ZW5jZSB3aXRoIGV4aXN0aW5nCi0gICAgICAgICAgIG1lbW9yeSBhbGxvY2F0aW9uIHJvdXRpbmVzCi0gICAgICAgICAqIFNldCAnbWFsbG9jX2dldHBhZ2VzaXplJyBmb3IgV0lOMzIgcGxhdGZvcm1zIChuZWVkcyBtb3JlIHdvcmspCi0gICAgICAgICAqIFVzZSAnYXNzZXJ0JyByYXRoZXIgdGhhbiAnQVNTRVJUJyBpbiBXSU4zMiBjb2RlIHRvIGNvbmZvcm0gdG8KLSAgICAgICAgICAgdXNhZ2Ugb2YgJ2Fzc2VydCcgaW4gbm9uLVdJTjMyIGNvZGUKLSAgICAgICAgICogSW1wcm92ZSBXSU4zMiAnc2JyaygpJyBlbXVsYXRpb24ncyAnZmluZFJlZ2lvbigpJyByb3V0aW5lIHRvCi0gICAgICAgICAgIGF2b2lkIGluZmluaXRlIGxvb3AKLSAgICAgICogQWx3YXlzIGNhbGwgJ2ZSRWUoKScgcmF0aGVyIHRoYW4gJ2ZyZWUoKScKLQotICAgIFYyLjYuNSBXZWQgSnVuIDE3IDE1OjU3OjMxIDE5OTggIERvdWcgTGVhICAoZGwgYXQgZ2VlKQotICAgICAgKiBGaXhlZCBvcmRlcmluZyBwcm9ibGVtIHdpdGggYm91bmRhcnktc3RhbXBpbmcKLQotICAgIFYyLjYuMyBTdW4gTWF5IDE5IDA4OjE3OjU4IDE5OTYgIERvdWcgTGVhICAoZGwgYXQgZ2VlKQotICAgICAgKiBBZGRlZCBwdmFsbG9jLCBhcyByZWNvbW1lbmRlZCBieSBILkouIExpdQotICAgICAgKiBBZGRlZCA2NGJpdCBwb2ludGVyIHN1cHBvcnQgbWFpbmx5IGZyb20gV29sZnJhbSBHbG9nZXIKLSAgICAgICogQWRkZWQgYW5vbnltb3VzbHkgZG9uYXRlZCBXSU4zMiBzYnJrIGVtdWxhdGlvbgotICAgICAgKiBNYWxsb2MsIGNhbGxvYywgZ2V0cGFnZXNpemU6IGFkZCBvcHRpbWl6YXRpb25zIGZyb20gUmF5bW9uZCBOaWpzc2VuCi0gICAgICAqIG1hbGxvY19leHRlbmRfdG9wOiBmaXggbWFzayBlcnJvciB0aGF0IGNhdXNlZCB3YXN0YWdlIGFmdGVyCi0gICAgICAgIGZvcmVpZ24gc2Jya3MKLSAgICAgICogQWRkIGxpbnV4IG1yZW1hcCBzdXBwb3J0IGNvZGUgZnJvbSBISiBMaXUKLQotICAgIFYyLjYuMiBUdWUgRGVjICA1IDA2OjUyOjU1IDE5OTUgIERvdWcgTGVhICAoZGwgYXQgZ2VlKQotICAgICAgKiBJbnRlZ3JhdGVkIG1vc3QgZG9jdW1lbnRhdGlvbiB3aXRoIHRoZSBjb2RlLgotICAgICAgKiBBZGQgc3VwcG9ydCBmb3IgbW1hcCwgd2l0aCBoZWxwIGZyb20KLSAgICAgICAgV29sZnJhbSBHbG9nZXIgKEdsb2dlckBscnoudW5pLW11ZW5jaGVuLmRlKS4KLSAgICAgICogVXNlIGxhc3RfcmVtYWluZGVyIGluIG1vcmUgY2FzZXMuCi0gICAgICAqIFBhY2sgYmlucyB1c2luZyBpZGVhIGZyb20gIGNvbGluQG55eDEwLmNzLmR1LmVkdQotICAgICAgKiBVc2Ugb3JkZXJlZCBiaW5zIGluc3RlYWQgb2YgYmVzdC1maXQgdGhyZXNoaG9sZAotICAgICAgKiBFbGltaW5hdGUgYmxvY2stbG9jYWwgZGVjbHMgdG8gc2ltcGxpZnkgdHJhY2luZyBhbmQgZGVidWdnaW5nLgotICAgICAgKiBTdXBwb3J0IGFub3RoZXIgY2FzZSBvZiByZWFsbG9jIHZpYSBtb3ZlIGludG8gdG9wCi0gICAgICAqIEZpeCBlcnJvciBvY2N1cmluZyB3aGVuIGluaXRpYWwgc2Jya19iYXNlIG5vdCB3b3JkLWFsaWduZWQuCi0gICAgICAqIFJlbHkgb24gcGFnZSBzaXplIGZvciB1bml0cyBpbnN0ZWFkIG9mIFNCUktfVU5JVCB0bwotICAgICAgICBhdm9pZCBzdXJwcmlzZXMgYWJvdXQgc2JyayBhbGlnbm1lbnQgY29udmVudGlvbnMuCi0gICAgICAqIEFkZCBtYWxsaW5mbywgbWFsbG9wdC4gVGhhbmtzIHRvIFJheW1vbmQgTmlqc3NlbgotICAgICAgICAocmF5bW9uZEBlcy5lbGUudHVlLm5sKSBmb3IgdGhlIHN1Z2dlc3Rpb24uCi0gICAgICAqIEFkZCBgcGFkJyBhcmd1bWVudCB0byBtYWxsb2NfdHJpbSBhbmQgdG9wX3BhZCBtYWxsb3B0IHBhcmFtZXRlci4KLSAgICAgICogTW9yZSBwcmVjYXV0aW9ucyBmb3IgY2FzZXMgd2hlcmUgb3RoZXIgcm91dGluZXMgY2FsbCBzYnJrLAotICAgICAgICBjb3VydGVzeSBvZiBXb2xmcmFtIEdsb2dlciAoR2xvZ2VyQGxyei51bmktbXVlbmNoZW4uZGUpLgotICAgICAgKiBBZGRlZCBtYWNyb3MgZXRjLiwgYWxsb3dpbmcgdXNlIGluIGxpbnV4IGxpYmMgZnJvbQotICAgICAgICBILkouIEx1IChoamxAZ251LmFpLm1pdC5lZHUpCi0gICAgICAqIEludmVydGVkIHRoaXMgaGlzdG9yeSBsaXN0Ci0KLSAgICBWMi42LjEgU2F0IERlYyAgMiAxNDoxMDo1NyAxOTk1ICBEb3VnIExlYSAgKGRsIGF0IGdlZSkKLSAgICAgICogUmUtdHVuZWQgYW5kIGZpeGVkIHRvIGJlaGF2ZSBtb3JlIG5pY2VseSB3aXRoIFYyLjYuMCBjaGFuZ2VzLgotICAgICAgKiBSZW1vdmVkIGFsbCBwcmVhbGxvY2F0aW9uIGNvZGUgc2luY2UgdW5kZXIgY3VycmVudCBzY2hlbWUKLSAgICAgICAgdGhlIHdvcmsgcmVxdWlyZWQgdG8gdW5kbyBiYWQgcHJlYWxsb2NhdGlvbnMgZXhjZWVkcwotICAgICAgICB0aGUgd29yayBzYXZlZCBpbiBnb29kIGNhc2VzIGZvciBtb3N0IHRlc3QgcHJvZ3JhbXMuCi0gICAgICAqIE5vIGxvbmdlciB1c2UgcmV0dXJuIGxpc3Qgb3IgdW5jb25zb2xpZGF0ZWQgYmlucyBzaW5jZQotICAgICAgICBubyBzY2hlbWUgdXNpbmcgdGhlbSBjb25zaXN0ZW50bHkgb3V0cGVyZm9ybXMgdGhvc2UgdGhhdCBkb24ndAotICAgICAgICBnaXZlbiBhYm92ZSBjaGFuZ2VzLgotICAgICAgKiBVc2UgYmVzdCBmaXQgZm9yIHZlcnkgbGFyZ2UgY2h1bmtzIHRvIHByZXZlbnQgc29tZSB3b3JzdC1jYXNlcy4KLSAgICAgICogQWRkZWQgc29tZSBzdXBwb3J0IGZvciBkZWJ1Z2dpbmcKLQotICAgIFYyLjYuMCBTYXQgTm92ICA0IDA3OjA1OjIzIDE5OTUgIERvdWcgTGVhICAoZGwgYXQgZ2VlKQotICAgICAgKiBSZW1vdmVkIGZvb3RlcnMgd2hlbiBjaHVua3MgYXJlIGluIHVzZS4gVGhhbmtzIHRvCi0gICAgICAgIFBhdWwgV2lsc29uICh3aWxzb25AY3MudGV4YXMuZWR1KSBmb3IgdGhlIHN1Z2dlc3Rpb24uCi0KLSAgICBWMi41LjQgV2VkIE5vdiAgMSAwNzo1NDo1MSAxOTk1ICBEb3VnIExlYSAgKGRsIGF0IGdlZSkKLSAgICAgICogQWRkZWQgbWFsbG9jX3RyaW0sIHdpdGggaGVscCBmcm9tIFdvbGZyYW0gR2xvZ2VyCi0gICAgICAgICh3bWdsb0BEZW50Lk1FRC5VbmktTXVlbmNoZW4uREUpLgotCi0gICAgVjIuNS4zIFR1ZSBBcHIgMjYgMTA6MTY6MDEgMTk5NCAgRG91ZyBMZWEgIChkbCBhdCBnKQotCi0gICAgVjIuNS4yIFR1ZSBBcHIgIDUgMTY6MjA6NDAgMTk5NCAgRG91ZyBMZWEgIChkbCBhdCBnKQotICAgICAgKiByZWFsbG9jOiB0cnkgdG8gZXhwYW5kIGluIGJvdGggZGlyZWN0aW9ucwotICAgICAgKiBtYWxsb2M6IHN3YXAgb3JkZXIgb2YgY2xlYW4tYmluIHN0cmF0ZWd5OwotICAgICAgKiByZWFsbG9jOiBvbmx5IGNvbmRpdGlvbmFsbHkgZXhwYW5kIGJhY2t3YXJkcwotICAgICAgKiBUcnkgbm90IHRvIHNjYXZlbmdlIHVzZWQgYmlucwotICAgICAgKiBVc2UgYmluIGNvdW50cyBhcyBhIGd1aWRlIHRvIHByZWFsbG9jYXRpb24KLSAgICAgICogT2NjYXNpb25hbGx5IGJpbiByZXR1cm4gbGlzdCBjaHVua3MgaW4gZmlyc3Qgc2NhbgotICAgICAgKiBBZGQgYSBmZXcgb3B0aW1pemF0aW9ucyBmcm9tIGNvbGluQG55eDEwLmNzLmR1LmVkdQotCi0gICAgVjIuNS4xIFNhdCBBdWcgMTQgMTU6NDA6NDMgMTk5MyAgRG91ZyBMZWEgIChkbCBhdCBnKQotICAgICAgKiBmYXN0ZXIgYmluIGNvbXB1dGF0aW9uICYgc2xpZ2h0bHkgZGlmZmVyZW50IGJpbm5pbmcKLSAgICAgICogbWVyZ2VkIGFsbCBjb25zb2xpZGF0aW9ucyB0byBvbmUgcGFydCBvZiBtYWxsb2MgcHJvcGVyCi0gICAgICAgICAoZWxpbWluYXRpbmcgb2xkIG1hbGxvY19maW5kX3NwYWNlICYgbWFsbG9jX2NsZWFuX2JpbikKLSAgICAgICogU2NhbiAyIHJldHVybnMgY2h1bmtzIChub3QganVzdCAxKQotICAgICAgKiBQcm9wYWdhdGUgZmFpbHVyZSBpbiByZWFsbG9jIGlmIG1hbGxvYyByZXR1cm5zIDAKLSAgICAgICogQWRkIHN0dWZmIHRvIGFsbG93IGNvbXBpbGF0aW9uIG9uIG5vbi1BTlNJIGNvbXBpbGVycwotICAgICAgICAgIGZyb20ga3B2QHJlc2VhcmNoLmF0dC5jb20KLQotICAgIFYyLjUgU2F0IEF1ZyAgNyAwNzo0MTo1OSAxOTkzICBEb3VnIExlYSAgKGRsIGF0IGcub3N3ZWdvLmVkdSkKLSAgICAgICogcmVtb3ZlZCBwb3RlbnRpYWwgZm9yIG9kZCBhZGRyZXNzIGFjY2VzcyBpbiBwcmV2X2NodW5rCi0gICAgICAqIHJlbW92ZWQgZGVwZW5kZW5jeSBvbiBnZXRwYWdlc2l6ZS5oCi0gICAgICAqIG1pc2MgY29zbWV0aWNzIGFuZCBhIGJpdCBtb3JlIGludGVybmFsIGRvY3VtZW50YXRpb24KLSAgICAgICogYW50aWNvc21ldGljczogbWFuZ2xlZCBuYW1lcyBpbiBtYWNyb3MgdG8gZXZhZGUgZGVidWdnZXIgc3RyYW5nZW5lc3MKLSAgICAgICogdGVzdGVkIG9uIHNwYXJjLCBocC03MDAsIGRlYy1taXBzLCByczYwMDAKLSAgICAgICAgICB3aXRoIGdjYyAmIG5hdGl2ZSBjYyAoaHAsIGRlYyBvbmx5KSBhbGxvd2luZwotICAgICAgICAgIERldGxlZnMgJiBab3JuIGNvbXBhcmlzb24gc3R1ZHkgKGluIFNJR1BMQU4gTm90aWNlcy4pCi0KLSAgICBUcmlhbCB2ZXJzaW9uIEZyaSBBdWcgMjggMTM6MTQ6MjkgMTk5MiAgRG91ZyBMZWEgIChkbCBhdCBnLm9zd2Vnby5lZHUpCi0gICAgICAqIEJhc2VkIGxvb3NlbHkgb24gbGliZysrLTEuMlggbWFsbG9jLiAoSXQgcmV0YWlucyBzb21lIG9mIHRoZSBvdmVyYWxsCi0gICAgICAgICBzdHJ1Y3R1cmUgb2Ygb2xkIHZlcnNpb24sICBidXQgbW9zdCBkZXRhaWxzIGRpZmZlci4pCi0KLSovCmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9kbG1hbGxvYy5oIGIvbGliYy9iaW9uaWMvZGxtYWxsb2MuaAppbmRleCAxYjY0MmQyLi43MWIzYmU4IDEwMDY0NAotLS0gYS9saWJjL2Jpb25pYy9kbG1hbGxvYy5oCisrKyBiL2xpYmMvYmlvbmljL2RsbWFsbG9jLmgKQEAgLTEsNjU1ICsxLDM1IEBACiAvKgotICBEZWZhdWx0IGhlYWRlciBmaWxlIGZvciBtYWxsb2MtMi44LngsIHdyaXR0ZW4gYnkgRG91ZyBMZWEKLSAgYW5kIHJlbGVhc2VkIHRvIHRoZSBwdWJsaWMgZG9tYWluLCBhcyBleHBsYWluZWQgYXQKLSAgaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbGljZW5zZXMvcHVibGljZG9tYWluLgotCi0gIGxhc3QgdXBkYXRlOiBNb24gQXVnIDE1IDA4OjU1OjUyIDIwMDUgIERvdWcgTGVhICAoZGwgYXQgZ2VlKQotCi0gIFRoaXMgaGVhZGVyIGlzIGZvciBBTlNJIEMvQysrIG9ubHkuICBZb3UgY2FuIHNldCBhbnkgb2YKLSAgdGhlIGZvbGxvd2luZyAjZGVmaW5lcyBiZWZvcmUgaW5jbHVkaW5nOgotCi0gICogSWYgVVNFX0RMX1BSRUZJWCBpcyBkZWZpbmVkLCBpdCBpcyBhc3N1bWVkIHRoYXQgbWFsbG9jLmMKLSAgICB3YXMgYWxzbyBjb21waWxlZCB3aXRoIHRoaXMgb3B0aW9uLCBzbyBhbGwgcm91dGluZXMKLSAgICBoYXZlIG5hbWVzIHN0YXJ0aW5nIHdpdGggImRsIi4KLQotICAqIElmIEhBVkVfVVNSX0lOQ0xVREVfTUFMTE9DX0ggaXMgZGVmaW5lZCwgaXQgaXMgYXNzdW1lZCB0aGF0IHRoaXMKLSAgICBmaWxlIHdpbGwgYmUgI2luY2x1ZGVkIEFGVEVSIDxtYWxsb2MuaD4uIFRoaXMgaXMgbmVlZGVkIG9ubHkgaWYKLSAgICB5b3VyIHN5c3RlbSBkZWZpbmVzIGEgc3RydWN0IG1hbGxpbmZvIHRoYXQgaXMgaW5jb21wYXRpYmxlIHdpdGggdGhlCi0gICAgc3RhbmRhcmQgb25lIGRlY2xhcmVkIGhlcmUuICBPdGhlcndpc2UsIHlvdSBjYW4gaW5jbHVkZSB0aGlzIGZpbGUKLSAgICBJTlNURUFEIG9mIHlvdXIgc3lzdGVtIHN5c3RlbSA8bWFsbG9jLmg+LiAgQXQgbGVhc3Qgb24gQU5TSSwgYWxsCi0gICAgZGVjbGFyYXRpb25zIHNob3VsZCBiZSBjb21wYXRpYmxlIHdpdGggc3lzdGVtIHZlcnNpb25zCi0KLSAgKiBJZiBNU1BBQ0VTIGlzIGRlZmluZWQsIGRlY2xhcmF0aW9ucyBmb3IgbXNwYWNlIHZlcnNpb25zIGFyZSBpbmNsdWRlZC4KLSovCi0KLSNpZm5kZWYgTUFMTE9DXzI4MF9ICi0jZGVmaW5lIE1BTExPQ18yODBfSAotCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIgewotI2VuZGlmCi0KLSNpbmNsdWRlIDxzdGRkZWYuaD4gICAvKiBmb3Igc2l6ZV90ICovCi0KLSNpZiAhT05MWV9NU1BBQ0VTCi0KLS8qIENoZWNrIGFuIGFkZGl0aW9uYWwgbWFjcm8gZm9yIHRoZSBmaXZlIHByaW1hcnkgZnVuY3Rpb25zICovCi0jaWYgIWRlZmluZWQoVVNFX0RMX1BSRUZJWCkKLSNkZWZpbmUgZGxjYWxsb2MgICAgICAgICAgICAgICBjYWxsb2MKLSNkZWZpbmUgZGxmcmVlICAgICAgICAgICAgICAgICBmcmVlCi0jZGVmaW5lIGRsbWFsbG9jICAgICAgICAgICAgICAgbWFsbG9jCi0jZGVmaW5lIGRsbWVtYWxpZ24gICAgICAgICAgICAgbWVtYWxpZ24KLSNkZWZpbmUgZGxyZWFsbG9jICAgICAgICAgICAgICByZWFsbG9jCi0jZW5kaWYKLQotI2lmbmRlZiBVU0VfRExfUFJFRklYCi0jZGVmaW5lIGRsdmFsbG9jICAgICAgICAgICAgICAgdmFsbG9jCi0jZGVmaW5lIGRscHZhbGxvYyAgICAgICAgICAgICAgcHZhbGxvYwotI2RlZmluZSBkbG1hbGxpbmZvICAgICAgICAgICAgIG1hbGxpbmZvCi0jZGVmaW5lIGRsbWFsbG9wdCAgICAgICAgICAgICAgbWFsbG9wdAotI2RlZmluZSBkbG1hbGxvY190cmltICAgICAgICAgIG1hbGxvY190cmltCi0jZGVmaW5lIGRsbWFsbG9jX3dhbGtfZnJlZV9wYWdlcyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFsbG9jX3dhbGtfZnJlZV9wYWdlcwotI2RlZmluZSBkbG1hbGxvY193YWxrX2hlYXAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hbGxvY193YWxrX2hlYXAKLSNkZWZpbmUgZGxtYWxsb2Nfc3RhdHMgICAgICAgICBtYWxsb2Nfc3RhdHMKLSNkZWZpbmUgZGxtYWxsb2NfdXNhYmxlX3NpemUgICBtYWxsb2NfdXNhYmxlX3NpemUKLSNkZWZpbmUgZGxtYWxsb2NfZm9vdHByaW50ICAgICBtYWxsb2NfZm9vdHByaW50Ci0jZGVmaW5lIGRsbWFsbG9jX21heF9hbGxvd2VkX2Zvb3RwcmludCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFsbG9jX21heF9hbGxvd2VkX2Zvb3RwcmludAotI2RlZmluZSBkbG1hbGxvY19zZXRfbWF4X2FsbG93ZWRfZm9vdHByaW50IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWxsb2Nfc2V0X21heF9hbGxvd2VkX2Zvb3RwcmludAotI2RlZmluZSBkbG1hbGxvY19tYXhfZm9vdHByaW50IG1hbGxvY19tYXhfZm9vdHByaW50Ci0jZGVmaW5lIGRsaW5kZXBlbmRlbnRfY2FsbG9jICAgaW5kZXBlbmRlbnRfY2FsbG9jCi0jZGVmaW5lIGRsaW5kZXBlbmRlbnRfY29tYWxsb2MgaW5kZXBlbmRlbnRfY29tYWxsb2MKLSNlbmRpZiAvKiBVU0VfRExfUFJFRklYICovCi0KLQotLyoKLSAgbWFsbG9jKHNpemVfdCBuKQotICBSZXR1cm5zIGEgcG9pbnRlciB0byBhIG5ld2x5IGFsbG9jYXRlZCBjaHVuayBvZiBhdCBsZWFzdCBuIGJ5dGVzLCBvcgotICBudWxsIGlmIG5vIHNwYWNlIGlzIGF2YWlsYWJsZSwgaW4gd2hpY2ggY2FzZSBlcnJubyBpcyBzZXQgdG8gRU5PTUVNCi0gIG9uIEFOU0kgQyBzeXN0ZW1zLgotCi0gIElmIG4gaXMgemVybywgbWFsbG9jIHJldHVybnMgYSBtaW5pbXVtLXNpemVkIGNodW5rLiAoVGhlIG1pbmltdW0KLSAgc2l6ZSBpcyAxNiBieXRlcyBvbiBtb3N0IDMyYml0IHN5c3RlbXMsIGFuZCAzMiBieXRlcyBvbiA2NGJpdAotICBzeXN0ZW1zLikgIE5vdGUgdGhhdCBzaXplX3QgaXMgYW4gdW5zaWduZWQgdHlwZSwgc28gY2FsbHMgd2l0aAotICBhcmd1bWVudHMgdGhhdCB3b3VsZCBiZSBuZWdhdGl2ZSBpZiBzaWduZWQgYXJlIGludGVycHJldGVkIGFzCi0gIHJlcXVlc3RzIGZvciBodWdlIGFtb3VudHMgb2Ygc3BhY2UsIHdoaWNoIHdpbGwgb2Z0ZW4gZmFpbC4gVGhlCi0gIG1heGltdW0gc3VwcG9ydGVkIHZhbHVlIG9mIG4gZGlmZmVycyBhY3Jvc3Mgc3lzdGVtcywgYnV0IGlzIGluIGFsbAotICBjYXNlcyBsZXNzIHRoYW4gdGhlIG1heGltdW0gcmVwcmVzZW50YWJsZSB2YWx1ZSBvZiBhIHNpemVfdC4KLSovCi12b2lkKiBkbG1hbGxvYyhzaXplX3QpOwotCi0vKgotICBmcmVlKHZvaWQqIHApCi0gIFJlbGVhc2VzIHRoZSBjaHVuayBvZiBtZW1vcnkgcG9pbnRlZCB0byBieSBwLCB0aGF0IGhhZCBiZWVuIHByZXZpb3VzbHkKLSAgYWxsb2NhdGVkIHVzaW5nIG1hbGxvYyBvciBhIHJlbGF0ZWQgcm91dGluZSBzdWNoIGFzIHJlYWxsb2MuCi0gIEl0IGhhcyBubyBlZmZlY3QgaWYgcCBpcyBudWxsLiBJZiBwIHdhcyBub3QgbWFsbG9jZWQgb3IgYWxyZWFkeQotICBmcmVlZCwgZnJlZShwKSB3aWxsIGJ5IGRlZmF1bHQgY3Vhc2UgdGhlIGN1cnJlbnQgcHJvZ3JhbSB0byBhYm9ydC4KLSovCi12b2lkICBkbGZyZWUodm9pZCopOwotCi0vKgotICBjYWxsb2Moc2l6ZV90IG5fZWxlbWVudHMsIHNpemVfdCBlbGVtZW50X3NpemUpOwotICBSZXR1cm5zIGEgcG9pbnRlciB0byBuX2VsZW1lbnRzICogZWxlbWVudF9zaXplIGJ5dGVzLCB3aXRoIGFsbCBsb2NhdGlvbnMKLSAgc2V0IHRvIHplcm8uCi0qLwotdm9pZCogZGxjYWxsb2Moc2l6ZV90LCBzaXplX3QpOwotCi0vKgotICByZWFsbG9jKHZvaWQqIHAsIHNpemVfdCBuKQotICBSZXR1cm5zIGEgcG9pbnRlciB0byBhIGNodW5rIG9mIHNpemUgbiB0aGF0IGNvbnRhaW5zIHRoZSBzYW1lIGRhdGEKLSAgYXMgZG9lcyBjaHVuayBwIHVwIHRvIHRoZSBtaW5pbXVtIG9mIChuLCBwJ3Mgc2l6ZSkgYnl0ZXMsIG9yIG51bGwKLSAgaWYgbm8gc3BhY2UgaXMgYXZhaWxhYmxlLgotCi0gIFRoZSByZXR1cm5lZCBwb2ludGVyIG1heSBvciBtYXkgbm90IGJlIHRoZSBzYW1lIGFzIHAuIFRoZSBhbGdvcml0aG0KLSAgcHJlZmVycyBleHRlbmRpbmcgcCBpbiBtb3N0IGNhc2VzIHdoZW4gcG9zc2libGUsIG90aGVyd2lzZSBpdAotICBlbXBsb3lzIHRoZSBlcXVpdmFsZW50IG9mIGEgbWFsbG9jLWNvcHktZnJlZSBzZXF1ZW5jZS4KLQotICBJZiBwIGlzIG51bGwsIHJlYWxsb2MgaXMgZXF1aXZhbGVudCB0byBtYWxsb2MuCi0KLSAgSWYgc3BhY2UgaXMgbm90IGF2YWlsYWJsZSwgcmVhbGxvYyByZXR1cm5zIG51bGwsIGVycm5vIGlzIHNldCAoaWYgb24KLSAgQU5TSSkgYW5kIHAgaXMgTk9UIGZyZWVkLgotCi0gIGlmIG4gaXMgZm9yIGZld2VyIGJ5dGVzIHRoYW4gYWxyZWFkeSBoZWxkIGJ5IHAsIHRoZSBuZXdseSB1bnVzZWQKLSAgc3BhY2UgaXMgbG9wcGVkIG9mZiBhbmQgZnJlZWQgaWYgcG9zc2libGUuICByZWFsbG9jIHdpdGggYSBzaXplCi0gIGFyZ3VtZW50IG9mIHplcm8gKHJlKWFsbG9jYXRlcyBhIG1pbmltdW0tc2l6ZWQgY2h1bmsuCi0KLSAgVGhlIG9sZCB1bml4IHJlYWxsb2MgY29udmVudGlvbiBvZiBhbGxvd2luZyB0aGUgbGFzdC1mcmVlJ2QgY2h1bmsKLSAgdG8gYmUgdXNlZCBhcyBhbiBhcmd1bWVudCB0byByZWFsbG9jIGlzIG5vdCBzdXBwb3J0ZWQuCi0qLwotCi12b2lkKiBkbHJlYWxsb2Modm9pZCosIHNpemVfdCk7Ci0KLS8qCi0gIG1lbWFsaWduKHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBuKTsKLSAgUmV0dXJucyBhIHBvaW50ZXIgdG8gYSBuZXdseSBhbGxvY2F0ZWQgY2h1bmsgb2YgbiBieXRlcywgYWxpZ25lZAotICBpbiBhY2NvcmQgd2l0aCB0aGUgYWxpZ25tZW50IGFyZ3VtZW50LgotCi0gIFRoZSBhbGlnbm1lbnQgYXJndW1lbnQgc2hvdWxkIGJlIGEgcG93ZXIgb2YgdHdvLiBJZiB0aGUgYXJndW1lbnQgaXMKLSAgbm90IGEgcG93ZXIgb2YgdHdvLCB0aGUgbmVhcmVzdCBncmVhdGVyIHBvd2VyIGlzIHVzZWQuCi0gIDgtYnl0ZSBhbGlnbm1lbnQgaXMgZ3VhcmFudGVlZCBieSBub3JtYWwgbWFsbG9jIGNhbGxzLCBzbyBkb24ndAotICBib3RoZXIgY2FsbGluZyBtZW1hbGlnbiB3aXRoIGFuIGFyZ3VtZW50IG9mIDggb3IgbGVzcy4KLQotICBPdmVycmVsaWFuY2Ugb24gbWVtYWxpZ24gaXMgYSBzdXJlIHdheSB0byBmcmFnbWVudCBzcGFjZS4KLSovCi12b2lkKiBkbG1lbWFsaWduKHNpemVfdCwgc2l6ZV90KTsKLQotLyoKLSAgdmFsbG9jKHNpemVfdCBuKTsKLSAgRXF1aXZhbGVudCB0byBtZW1hbGlnbihwYWdlc2l6ZSwgbiksIHdoZXJlIHBhZ2VzaXplIGlzIHRoZSBwYWdlCi0gIHNpemUgb2YgdGhlIHN5c3RlbS4gSWYgdGhlIHBhZ2VzaXplIGlzIHVua25vd24sIDQwOTYgaXMgdXNlZC4KLSovCi12b2lkKiBkbHZhbGxvYyhzaXplX3QpOwotCi0vKgotICBtYWxsb3B0KGludCBwYXJhbWV0ZXJfbnVtYmVyLCBpbnQgcGFyYW1ldGVyX3ZhbHVlKQotICBTZXRzIHR1bmFibGUgcGFyYW1ldGVycyBUaGUgZm9ybWF0IGlzIHRvIHByb3ZpZGUgYQotICAocGFyYW1ldGVyLW51bWJlciwgcGFyYW1ldGVyLXZhbHVlKSBwYWlyLiAgbWFsbG9wdCB0aGVuIHNldHMgdGhlCi0gIGNvcnJlc3BvbmRpbmcgcGFyYW1ldGVyIHRvIHRoZSBhcmd1bWVudCB2YWx1ZSBpZiBpdCBjYW4gKGkuZS4sIHNvCi0gIGxvbmcgYXMgdGhlIHZhbHVlIGlzIG1lYW5pbmdmdWwpLCBhbmQgcmV0dXJucyAxIGlmIHN1Y2Nlc3NmdWwgZWxzZQotICAwLiAgU1ZJRC9YUEcvQU5TSSBkZWZpbmVzIGZvdXIgc3RhbmRhcmQgcGFyYW0gbnVtYmVycyBmb3IgbWFsbG9wdCwKLSAgbm9ybWFsbHkgZGVmaW5lZCBpbiBtYWxsb2MuaC4gIE5vbmUgb2YgdGhlc2UgYXJlIHVzZSBpbiB0aGlzIG1hbGxvYywKLSAgc28gc2V0dGluZyB0aGVtIGhhcyBubyBlZmZlY3QuIEJ1dCB0aGlzIG1hbGxvYyBhbHNvIHN1cHBvcnRzIG90aGVyCi0gIG9wdGlvbnMgaW4gbWFsbG9wdDoKLQotICBTeW1ib2wgICAgICAgICAgICBwYXJhbSAjICBkZWZhdWx0ICAgIGFsbG93ZWQgcGFyYW0gdmFsdWVzCi0gIE1fVFJJTV9USFJFU0hPTEQgICAgIC0xICAgMioxMDI0KjEwMjQgICBhbnkgICAoLTFVIGRpc2FibGVzIHRyaW1taW5nKQotICBNX0dSQU5VTEFSSVRZICAgICAgICAtMiAgICAgcGFnZSBzaXplICAgYW55IHBvd2VyIG9mIDIgPj0gcGFnZSBzaXplCi0gIE1fTU1BUF9USFJFU0hPTEQgICAgIC0zICAgICAgMjU2KjEwMjQgICBhbnkgICAob3IgMCBpZiBubyBNTUFQIHN1cHBvcnQpCi0qLwotaW50IGRsbWFsbG9wdChpbnQsIGludCk7Ci0KLSNkZWZpbmUgTV9UUklNX1RIUkVTSE9MRCAgICAgKC0xKQotI2RlZmluZSBNX0dSQU5VTEFSSVRZICAgICAgICAoLTIpCi0jZGVmaW5lIE1fTU1BUF9USFJFU0hPTEQgICAgICgtMykKLQotCi0vKgotICBtYWxsb2NfZm9vdHByaW50KCk7Ci0gIFJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyBvYnRhaW5lZCBmcm9tIHRoZSBzeXN0ZW0uICBUaGUgdG90YWwKLSAgbnVtYmVyIG9mIGJ5dGVzIGFsbG9jYXRlZCBieSBtYWxsb2MsIHJlYWxsb2MgZXRjLiwgaXMgbGVzcyB0aGFuIHRoaXMKLSAgdmFsdWUuIFVubGlrZSBtYWxsaW5mbywgdGhpcyBmdW5jdGlvbiByZXR1cm5zIG9ubHkgYSBwcmVjb21wdXRlZAotICByZXN1bHQsIHNvIGNhbiBiZSBjYWxsZWQgZnJlcXVlbnRseSB0byBtb25pdG9yIG1lbW9yeSBjb25zdW1wdGlvbi4KLSAgRXZlbiBpZiBsb2NrcyBhcmUgb3RoZXJ3aXNlIGRlZmluZWQsIHRoaXMgZnVuY3Rpb24gZG9lcyBub3QgdXNlIHRoZW0sCi0gIHNvIHJlc3VsdHMgbWlnaHQgbm90IGJlIHVwIHRvIGRhdGUuCi0qLwotc2l6ZV90IGRsbWFsbG9jX2Zvb3RwcmludCgpOwotCi0vKgotICBtYWxsb2NfbWF4X2FsbG93ZWRfZm9vdHByaW50KCk7Ci0gIFJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyB0aGF0IHRoZSBoZWFwIGlzIGFsbG93ZWQgdG8gb2J0YWluCi0gIGZyb20gdGhlIHN5c3RlbS4gIG1hbGxvY19mb290cHJpbnQoKSBzaG91bGQgYWx3YXlzIHJldHVybiBhCi0gIHNpemUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIG1heF9hbGxvd2VkX2Zvb3RwcmludCwgdW5sZXNzIHRoZQotICBtYXhfYWxsb3dlZF9mb290cHJpbnQgd2FzIHNldCB0byBhIHZhbHVlIHNtYWxsZXIgdGhhbiB0aGUKLSAgZm9vdHByaW50IGF0IHRoZSB0aW1lLgotCi0gIFRoaXMgZnVuY3Rpb24gaXMgb25seSBhdmFpbGFibGUgaWYgZGxtYWxsb2MuYyB3YXMgY29tcGlsZWQKLSAgd2l0aCBVU0VfTUFYX0FMTE9XRURfRk9PVFBSSU5UIHNldC4KLSovCi1zaXplX3QgZGxtYWxsb2NfbWF4X2FsbG93ZWRfZm9vdHByaW50KCk7Ci0KLS8qCi0gIG1hbGxvY19zZXRfbWF4X2FsbG93ZWRfZm9vdHByaW50KCk7Ci0gIFNldCB0aGUgbWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgdGhhdCB0aGUgaGVhcCBpcyBhbGxvd2VkIHRvCi0gIG9idGFpbiBmcm9tIHRoZSBzeXN0ZW0uICBUaGUgc2l6ZSB3aWxsIGJlIHJvdW5kZWQgdXAgdG8gYSB3aG9sZQotICBwYWdlLCBhbmQgdGhlIHJvdW5kZWQgbnVtYmVyIHdpbGwgYmUgcmV0dXJuZWQgZnJvbSBmdXR1cmUgY2FsbHMKLSAgdG8gbWFsbG9jX21heF9hbGxvd2VkX2Zvb3RwcmludCgpLiAgSWYgdGhlIG5ldyBtYXhfYWxsb3dlZF9mb290cHJpbnQKLSAgaXMgbGFyZ2VyIHRoYW4gdGhlIGN1cnJlbnQgZm9vdHByaW50LCB0aGUgaGVhcCB3aWxsIG5ldmVyIGdyb3cKLSAgbGFyZ2VyIHRoYW4gbWF4X2FsbG93ZWRfZm9vdHByaW50LiAgSWYgdGhlIG5ldyBtYXhfYWxsb3dlZF9mb290cHJpbnQKLSAgaXMgc21hbGxlciB0aGFuIHRoZSBjdXJyZW50IGZvb3RwcmludCwgdGhlIGhlYXAgd2lsbCBub3QgZ3JvdwotICBmdXJ0aGVyLgotCi0gIFRoaXMgZnVuY3Rpb24gaXMgb25seSBhdmFpbGFibGUgaWYgZGxtYWxsb2MuYyB3YXMgY29tcGlsZWQKLSAgd2l0aCBVU0VfTUFYX0FMTE9XRURfRk9PVFBSSU5UIHNldC4KLQotICBUT0RPOiB0cnkgdG8gZm9yY2UgdGhlIGhlYXAgdG8gZ2l2ZSB1cCBtZW1vcnkgaW4gdGhlIHNocmluayBjYXNlLAotICAgICAgICBhbmQgdXBkYXRlIHRoaXMgY29tbWVudCBvbmNlIHRoYXQgaGFwcGVucy4KLSovCi12b2lkIGRsbWFsbG9jX3NldF9tYXhfYWxsb3dlZF9mb290cHJpbnQoc2l6ZV90IGJ5dGVzKTsKLQotLyoKLSAgbWFsbG9jX21heF9mb290cHJpbnQoKTsKLSAgUmV0dXJucyB0aGUgbWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgb2J0YWluZWQgZnJvbSB0aGUgc3lzdGVtLiBUaGlzCi0gIHZhbHVlIHdpbGwgYmUgZ3JlYXRlciB0aGFuIGN1cnJlbnQgZm9vdHByaW50IGlmIGRlYWxsb2NhdGVkIHNwYWNlCi0gIGhhcyBiZWVuIHJlY2xhaW1lZCBieSB0aGUgc3lzdGVtLiBUaGUgcGVhayBudW1iZXIgb2YgYnl0ZXMgYWxsb2NhdGVkCi0gIGJ5IG1hbGxvYywgcmVhbGxvYyBldGMuLCBpcyBsZXNzIHRoYW4gdGhpcyB2YWx1ZS4gVW5saWtlIG1hbGxpbmZvLAotICB0aGlzIGZ1bmN0aW9uIHJldHVybnMgb25seSBhIHByZWNvbXB1dGVkIHJlc3VsdCwgc28gY2FuIGJlIGNhbGxlZAotICBmcmVxdWVudGx5IHRvIG1vbml0b3IgbWVtb3J5IGNvbnN1bXB0aW9uLiAgRXZlbiBpZiBsb2NrcyBhcmUKLSAgb3RoZXJ3aXNlIGRlZmluZWQsIHRoaXMgZnVuY3Rpb24gZG9lcyBub3QgdXNlIHRoZW0sIHNvIHJlc3VsdHMgbWlnaHQKLSAgbm90IGJlIHVwIHRvIGRhdGUuCi0qLwotc2l6ZV90IGRsbWFsbG9jX21heF9mb290cHJpbnQodm9pZCk7Ci0KLSNpZiAhTk9fTUFMTElORk8KLS8qCi0gIG1hbGxpbmZvKCkKLSAgUmV0dXJucyAoYnkgY29weSkgYSBzdHJ1Y3QgY29udGFpbmluZyB2YXJpb3VzIHN1bW1hcnkgc3RhdGlzdGljczoKLQotICBhcmVuYTogICAgIGN1cnJlbnQgdG90YWwgbm9uLW1tYXBwZWQgYnl0ZXMgYWxsb2NhdGVkIGZyb20gc3lzdGVtCi0gIG9yZGJsa3M6ICAgdGhlIG51bWJlciBvZiBmcmVlIGNodW5rcwotICBzbWJsa3M6ICAgIGFsd2F5cyB6ZXJvLgotICBoYmxrczogICAgIGN1cnJlbnQgbnVtYmVyIG9mIG1tYXBwZWQgcmVnaW9ucwotICBoYmxraGQ6ICAgIHRvdGFsIGJ5dGVzIGhlbGQgaW4gbW1hcHBlZCByZWdpb25zCi0gIHVzbWJsa3M6ICAgdGhlIG1heGltdW0gdG90YWwgYWxsb2NhdGVkIHNwYWNlLiBUaGlzIHdpbGwgYmUgZ3JlYXRlcgotICAgICAgICAgICAgICAgIHRoYW4gY3VycmVudCB0b3RhbCBpZiB0cmltbWluZyBoYXMgb2NjdXJyZWQuCi0gIGZzbWJsa3M6ICAgYWx3YXlzIHplcm8KLSAgdW9yZGJsa3M6ICBjdXJyZW50IHRvdGFsIGFsbG9jYXRlZCBzcGFjZSAobm9ybWFsIG9yIG1tYXBwZWQpCi0gIGZvcmRibGtzOiAgdG90YWwgZnJlZSBzcGFjZQotICBrZWVwY29zdDogIHRoZSBtYXhpbXVtIG51bWJlciBvZiBieXRlcyB0aGF0IGNvdWxkIGlkZWFsbHkgYmUgcmVsZWFzZWQKLSAgICAgICAgICAgICAgIGJhY2sgdG8gc3lzdGVtIHZpYSBtYWxsb2NfdHJpbS4gKCJpZGVhbGx5IiBtZWFucyB0aGF0Ci0gICAgICAgICAgICAgICBpdCBpZ25vcmVzIHBhZ2UgcmVzdHJpY3Rpb25zIGV0Yy4pCi0KLSAgQmVjYXVzZSB0aGVzZSBmaWVsZHMgYXJlIGludHMsIGJ1dCBpbnRlcm5hbCBib29ra2VlcGluZyBtYXkKLSAgYmUga2VwdCBhcyBsb25ncywgdGhlIHJlcG9ydGVkIHZhbHVlcyBtYXkgd3JhcCBhcm91bmQgemVybyBhbmQKLSAgdGh1cyBiZSBpbmFjY3VyYXRlLgotKi8KLSNpZm5kZWYgSEFWRV9VU1JfSU5DTFVERV9NQUxMT0NfSAotI2lmbmRlZiBfTUFMTE9DX0hfCi0jaWZuZGVmIE1BTExJTkZPX0ZJRUxEX1RZUEUKLSNkZWZpbmUgTUFMTElORk9fRklFTERfVFlQRSBzaXplX3QKLSNlbmRpZiAvKiBNQUxMSU5GT19GSUVMRF9UWVBFICovCi1zdHJ1Y3QgbWFsbGluZm8gewotICBNQUxMSU5GT19GSUVMRF9UWVBFIGFyZW5hOyAgICAvKiBub24tbW1hcHBlZCBzcGFjZSBhbGxvY2F0ZWQgZnJvbSBzeXN0ZW0gKi8KLSAgTUFMTElORk9fRklFTERfVFlQRSBvcmRibGtzOyAgLyogbnVtYmVyIG9mIGZyZWUgY2h1bmtzICovCi0gIE1BTExJTkZPX0ZJRUxEX1RZUEUgc21ibGtzOyAgIC8qIGFsd2F5cyAwICovCi0gIE1BTExJTkZPX0ZJRUxEX1RZUEUgaGJsa3M7ICAgIC8qIGFsd2F5cyAwICovCi0gIE1BTExJTkZPX0ZJRUxEX1RZUEUgaGJsa2hkOyAgIC8qIHNwYWNlIGluIG1tYXBwZWQgcmVnaW9ucyAqLwotICBNQUxMSU5GT19GSUVMRF9UWVBFIHVzbWJsa3M7ICAvKiBtYXhpbXVtIHRvdGFsIGFsbG9jYXRlZCBzcGFjZSAqLwotICBNQUxMSU5GT19GSUVMRF9UWVBFIGZzbWJsa3M7ICAvKiBhbHdheXMgMCAqLwotICBNQUxMSU5GT19GSUVMRF9UWVBFIHVvcmRibGtzOyAvKiB0b3RhbCBhbGxvY2F0ZWQgc3BhY2UgKi8KLSAgTUFMTElORk9fRklFTERfVFlQRSBmb3JkYmxrczsgLyogdG90YWwgZnJlZSBzcGFjZSAqLwotICBNQUxMSU5GT19GSUVMRF9UWVBFIGtlZXBjb3N0OyAvKiByZWxlYXNhYmxlICh2aWEgbWFsbG9jX3RyaW0pIHNwYWNlICovCi19OwotI2VuZGlmICAvKiBfTUFMTE9DX0hfICovCi0jZW5kaWYgIC8qIEhBVkVfVVNSX0lOQ0xVREVfTUFMTE9DX0ggKi8KLQotc3RydWN0IG1hbGxpbmZvIGRsbWFsbGluZm8odm9pZCk7Ci0jZW5kaWYgIC8qIE5PX01BTExJTkZPICovCi0KLS8qCi0gIGluZGVwZW5kZW50X2NhbGxvYyhzaXplX3Qgbl9lbGVtZW50cywgc2l6ZV90IGVsZW1lbnRfc2l6ZSwgdm9pZCogY2h1bmtzW10pOwotCi0gIGluZGVwZW5kZW50X2NhbGxvYyBpcyBzaW1pbGFyIHRvIGNhbGxvYywgYnV0IGluc3RlYWQgb2YgcmV0dXJuaW5nIGEKLSAgc2luZ2xlIGNsZWFyZWQgc3BhY2UsIGl0IHJldHVybnMgYW4gYXJyYXkgb2YgcG9pbnRlcnMgdG8gbl9lbGVtZW50cwotICBpbmRlcGVuZGVudCBlbGVtZW50cyB0aGF0IGNhbiBob2xkIGNvbnRlbnRzIG9mIHNpemUgZWxlbV9zaXplLCBlYWNoCi0gIG9mIHdoaWNoIHN0YXJ0cyBvdXQgY2xlYXJlZCwgYW5kIGNhbiBiZSBpbmRlcGVuZGVudGx5IGZyZWVkLAotICByZWFsbG9jJ2VkIGV0Yy4gVGhlIGVsZW1lbnRzIGFyZSBndWFyYW50ZWVkIHRvIGJlIGFkamFjZW50bHkKLSAgYWxsb2NhdGVkICh0aGlzIGlzIG5vdCBndWFyYW50ZWVkIHRvIG9jY3VyIHdpdGggbXVsdGlwbGUgY2FsbG9jcyBvcgotICBtYWxsb2NzKSwgd2hpY2ggbWF5IGFsc28gaW1wcm92ZSBjYWNoZSBsb2NhbGl0eSBpbiBzb21lCi0gIGFwcGxpY2F0aW9ucy4KLQotICBUaGUgImNodW5rcyIgYXJndW1lbnQgaXMgb3B0aW9uYWwgKGkuZS4sIG1heSBiZSBudWxsLCB3aGljaCBpcwotICBwcm9iYWJseSB0aGUgbW9zdCB0eXBpY2FsIHVzYWdlKS4gSWYgaXQgaXMgbnVsbCwgdGhlIHJldHVybmVkIGFycmF5Ci0gIGlzIGl0c2VsZiBkeW5hbWljYWxseSBhbGxvY2F0ZWQgYW5kIHNob3VsZCBhbHNvIGJlIGZyZWVkIHdoZW4gaXQgaXMKLSAgbm8gbG9uZ2VyIG5lZWRlZC4gT3RoZXJ3aXNlLCB0aGUgY2h1bmtzIGFycmF5IG11c3QgYmUgb2YgYXQgbGVhc3QKLSAgbl9lbGVtZW50cyBpbiBsZW5ndGguIEl0IGlzIGZpbGxlZCBpbiB3aXRoIHRoZSBwb2ludGVycyB0byB0aGUKLSAgY2h1bmtzLgotCi0gIEluIGVpdGhlciBjYXNlLCBpbmRlcGVuZGVudF9jYWxsb2MgcmV0dXJucyB0aGlzIHBvaW50ZXIgYXJyYXksIG9yCi0gIG51bGwgaWYgdGhlIGFsbG9jYXRpb24gZmFpbGVkLiAgSWYgbl9lbGVtZW50cyBpcyB6ZXJvIGFuZCAiY2h1bmtzIgotICBpcyBudWxsLCBpdCByZXR1cm5zIGEgY2h1bmsgcmVwcmVzZW50aW5nIGFuIGFycmF5IHdpdGggemVybyBlbGVtZW50cwotICAod2hpY2ggc2hvdWxkIGJlIGZyZWVkIGlmIG5vdCB3YW50ZWQpLgotCi0gIEVhY2ggZWxlbWVudCBtdXN0IGJlIGluZGl2aWR1YWxseSBmcmVlZCB3aGVuIGl0IGlzIG5vIGxvbmdlcgotICBuZWVkZWQuIElmIHlvdSdkIGxpa2UgdG8gaW5zdGVhZCBiZSBhYmxlIHRvIGZyZWUgYWxsIGF0IG9uY2UsIHlvdQotICBzaG91bGQgaW5zdGVhZCB1c2UgcmVndWxhciBjYWxsb2MgYW5kIGFzc2lnbiBwb2ludGVycyBpbnRvIHRoaXMKLSAgc3BhY2UgdG8gcmVwcmVzZW50IGVsZW1lbnRzLiAgKEluIHRoaXMgY2FzZSB0aG91Z2gsIHlvdSBjYW5ub3QKLSAgaW5kZXBlbmRlbnRseSBmcmVlIGVsZW1lbnRzLikKLQotICBpbmRlcGVuZGVudF9jYWxsb2Mgc2ltcGxpZmllcyBhbmQgc3BlZWRzIHVwIGltcGxlbWVudGF0aW9ucyBvZiBtYW55Ci0gIGtpbmRzIG9mIHBvb2xzLiAgSXQgbWF5IGFsc28gYmUgdXNlZnVsIHdoZW4gY29uc3RydWN0aW5nIGxhcmdlIGRhdGEKLSAgc3RydWN0dXJlcyB0aGF0IGluaXRpYWxseSBoYXZlIGEgZml4ZWQgbnVtYmVyIG9mIGZpeGVkLXNpemVkIG5vZGVzLAotICBidXQgdGhlIG51bWJlciBpcyBub3Qga25vd24gYXQgY29tcGlsZSB0aW1lLCBhbmQgc29tZSBvZiB0aGUgbm9kZXMKLSAgbWF5IGxhdGVyIG5lZWQgdG8gYmUgZnJlZWQuIEZvciBleGFtcGxlOgotCi0gIHN0cnVjdCBOb2RlIHsgaW50IGl0ZW07IHN0cnVjdCBOb2RlKiBuZXh0OyB9OwotCi0gIHN0cnVjdCBOb2RlKiBidWlsZF9saXN0KCkgewotICAgIHN0cnVjdCBOb2RlKiogcG9vbDsKLSAgICBpbnQgbiA9IHJlYWRfbnVtYmVyX29mX25vZGVzX25lZWRlZCgpOwotICAgIGlmIChuIDw9IDApIHJldHVybiAwOwotICAgIHBvb2wgPSAoc3RydWN0IE5vZGUqKikoaW5kZXBlbmRlbnRfY2FsbG9jKG4sIHNpemVvZihzdHJ1Y3QgTm9kZSksIDApOwotICAgIGlmIChwb29sID09IDApIGRpZSgpOwotICAgIC8vIG9yZ2FuaXplIGludG8gYSBsaW5rZWQgbGlzdC4uLgotICAgIHN0cnVjdCBOb2RlKiBmaXJzdCA9IHBvb2xbMF07Ci0gICAgZm9yIChpID0gMDsgaSA8IG4tMTsgKytpKQotICAgICAgcG9vbFtpXS0+bmV4dCA9IHBvb2xbaSsxXTsKLSAgICBmcmVlKHBvb2wpOyAgICAgLy8gQ2FuIG5vdyBmcmVlIHRoZSBhcnJheSAob3Igbm90LCBpZiBpdCBpcyBuZWVkZWQgbGF0ZXIpCi0gICAgcmV0dXJuIGZpcnN0OwotICB9Ci0qLwotdm9pZCoqIGRsaW5kZXBlbmRlbnRfY2FsbG9jKHNpemVfdCwgc2l6ZV90LCB2b2lkKiopOwotCi0vKgotICBpbmRlcGVuZGVudF9jb21hbGxvYyhzaXplX3Qgbl9lbGVtZW50cywgc2l6ZV90IHNpemVzW10sIHZvaWQqIGNodW5rc1tdKTsKLQotICBpbmRlcGVuZGVudF9jb21hbGxvYyBhbGxvY2F0ZXMsIGFsbCBhdCBvbmNlLCBhIHNldCBvZiBuX2VsZW1lbnRzCi0gIGNodW5rcyB3aXRoIHNpemVzIGluZGljYXRlZCBpbiB0aGUgInNpemVzIiBhcnJheS4gICAgSXQgcmV0dXJucwotICBhbiBhcnJheSBvZiBwb2ludGVycyB0byB0aGVzZSBlbGVtZW50cywgZWFjaCBvZiB3aGljaCBjYW4gYmUKLSAgaW5kZXBlbmRlbnRseSBmcmVlZCwgcmVhbGxvYydlZCBldGMuIFRoZSBlbGVtZW50cyBhcmUgZ3VhcmFudGVlZCB0bwotICBiZSBhZGphY2VudGx5IGFsbG9jYXRlZCAodGhpcyBpcyBub3QgZ3VhcmFudGVlZCB0byBvY2N1ciB3aXRoCi0gIG11bHRpcGxlIGNhbGxvY3Mgb3IgbWFsbG9jcyksIHdoaWNoIG1heSBhbHNvIGltcHJvdmUgY2FjaGUgbG9jYWxpdHkKLSAgaW4gc29tZSBhcHBsaWNhdGlvbnMuCi0KLSAgVGhlICJjaHVua3MiIGFyZ3VtZW50IGlzIG9wdGlvbmFsIChpLmUuLCBtYXkgYmUgbnVsbCkuIElmIGl0IGlzIG51bGwKLSAgdGhlIHJldHVybmVkIGFycmF5IGlzIGl0c2VsZiBkeW5hbWljYWxseSBhbGxvY2F0ZWQgYW5kIHNob3VsZCBhbHNvCi0gIGJlIGZyZWVkIHdoZW4gaXQgaXMgbm8gbG9uZ2VyIG5lZWRlZC4gT3RoZXJ3aXNlLCB0aGUgY2h1bmtzIGFycmF5Ci0gIG11c3QgYmUgb2YgYXQgbGVhc3Qgbl9lbGVtZW50cyBpbiBsZW5ndGguIEl0IGlzIGZpbGxlZCBpbiB3aXRoIHRoZQotICBwb2ludGVycyB0byB0aGUgY2h1bmtzLgotCi0gIEluIGVpdGhlciBjYXNlLCBpbmRlcGVuZGVudF9jb21hbGxvYyByZXR1cm5zIHRoaXMgcG9pbnRlciBhcnJheSwgb3IKLSAgbnVsbCBpZiB0aGUgYWxsb2NhdGlvbiBmYWlsZWQuICBJZiBuX2VsZW1lbnRzIGlzIHplcm8gYW5kIGNodW5rcyBpcwotICBudWxsLCBpdCByZXR1cm5zIGEgY2h1bmsgcmVwcmVzZW50aW5nIGFuIGFycmF5IHdpdGggemVybyBlbGVtZW50cwotICAod2hpY2ggc2hvdWxkIGJlIGZyZWVkIGlmIG5vdCB3YW50ZWQpLgotCi0gIEVhY2ggZWxlbWVudCBtdXN0IGJlIGluZGl2aWR1YWxseSBmcmVlZCB3aGVuIGl0IGlzIG5vIGxvbmdlcgotICBuZWVkZWQuIElmIHlvdSdkIGxpa2UgdG8gaW5zdGVhZCBiZSBhYmxlIHRvIGZyZWUgYWxsIGF0IG9uY2UsIHlvdQotICBzaG91bGQgaW5zdGVhZCB1c2UgYSBzaW5nbGUgcmVndWxhciBtYWxsb2MsIGFuZCBhc3NpZ24gcG9pbnRlcnMgYXQKLSAgcGFydGljdWxhciBvZmZzZXRzIGluIHRoZSBhZ2dyZWdhdGUgc3BhY2UuIChJbiB0aGlzIGNhc2UgdGhvdWdoLCB5b3UKLSAgY2Fubm90IGluZGVwZW5kZW50bHkgZnJlZSBlbGVtZW50cy4pCi0KLSAgaW5kZXBlbmRlbnRfY29tYWxsYWMgZGlmZmVycyBmcm9tIGluZGVwZW5kZW50X2NhbGxvYyBpbiB0aGF0IGVhY2gKLSAgZWxlbWVudCBtYXkgaGF2ZSBhIGRpZmZlcmVudCBzaXplLCBhbmQgYWxzbyB0aGF0IGl0IGRvZXMgbm90Ci0gIGF1dG9tYXRpY2FsbHkgY2xlYXIgZWxlbWVudHMuCi0KLSAgaW5kZXBlbmRlbnRfY29tYWxsb2MgY2FuIGJlIHVzZWQgdG8gc3BlZWQgdXAgYWxsb2NhdGlvbiBpbiBjYXNlcwotICB3aGVyZSBzZXZlcmFsIHN0cnVjdHMgb3Igb2JqZWN0cyBtdXN0IGFsd2F5cyBiZSBhbGxvY2F0ZWQgYXQgdGhlCi0gIHNhbWUgdGltZS4gIEZvciBleGFtcGxlOgotCi0gIHN0cnVjdCBIZWFkIHsgLi4uIH0KLSAgc3RydWN0IEZvb3QgeyAuLi4gfQotCi0gIHZvaWQgc2VuZF9tZXNzYWdlKGNoYXIqIG1zZykgewotICAgIGludCBtc2dsZW4gPSBzdHJsZW4obXNnKTsKLSAgICBzaXplX3Qgc2l6ZXNbM10gPSB7IHNpemVvZihzdHJ1Y3QgSGVhZCksIG1zZ2xlbiwgc2l6ZW9mKHN0cnVjdCBGb290KSB9OwotICAgIHZvaWQqIGNodW5rc1szXTsKLSAgICBpZiAoaW5kZXBlbmRlbnRfY29tYWxsb2MoMywgc2l6ZXMsIGNodW5rcykgPT0gMCkKLSAgICAgIGRpZSgpOwotICAgIHN0cnVjdCBIZWFkKiBoZWFkID0gKHN0cnVjdCBIZWFkKikoY2h1bmtzWzBdKTsKLSAgICBjaGFyKiAgICAgICAgYm9keSA9IChjaGFyKikoY2h1bmtzWzFdKTsKLSAgICBzdHJ1Y3QgRm9vdCogZm9vdCA9IChzdHJ1Y3QgRm9vdCopKGNodW5rc1syXSk7Ci0gICAgLy8gLi4uCi0gIH0KLQotICBJbiBnZW5lcmFsIHRob3VnaCwgaW5kZXBlbmRlbnRfY29tYWxsb2MgaXMgd29ydGggdXNpbmcgb25seSBmb3IKLSAgbGFyZ2VyIHZhbHVlcyBvZiBuX2VsZW1lbnRzLiBGb3Igc21hbGwgdmFsdWVzLCB5b3UgcHJvYmFibHkgd29uJ3QKLSAgZGV0ZWN0IGVub3VnaCBkaWZmZXJlbmNlIGZyb20gc2VyaWVzIG9mIG1hbGxvYyBjYWxscyB0byBib3RoZXIuCi0KLSAgT3ZlcnVzZSBvZiBpbmRlcGVuZGVudF9jb21hbGxvYyBjYW4gaW5jcmVhc2Ugb3ZlcmFsbCBtZW1vcnkgdXNhZ2UsCi0gIHNpbmNlIGl0IGNhbm5vdCByZXVzZSBleGlzdGluZyBub25jb250aWd1b3VzIHNtYWxsIGNodW5rcyB0aGF0Ci0gIG1pZ2h0IGJlIGF2YWlsYWJsZSBmb3Igc29tZSBvZiB0aGUgZWxlbWVudHMuCi0qLwotdm9pZCoqIGRsaW5kZXBlbmRlbnRfY29tYWxsb2Moc2l6ZV90LCBzaXplX3QqLCB2b2lkKiopOwotCi0KLS8qCi0gIHB2YWxsb2Moc2l6ZV90IG4pOwotICBFcXVpdmFsZW50IHRvIHZhbGxvYyhtaW5pbXVtLXBhZ2UtdGhhdC1ob2xkcyhuKSksIHRoYXQgaXMsCi0gIHJvdW5kIHVwIG4gdG8gbmVhcmVzdCBwYWdlc2l6ZS4KKyAqIENvcHlyaWdodCAoQykgMjAxMiBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogICovCi12b2lkKiAgZGxwdmFsbG9jKHNpemVfdCk7CiAKLS8qCi0gIG1hbGxvY190cmltKHNpemVfdCBwYWQpOworI2lmbmRlZiBMSUJDX0JJT05JQ19ETE1BTExPQ19IXworI2RlZmluZSBMSUJDX0JJT05JQ19ETE1BTExPQ19IXwogCi0gIElmIHBvc3NpYmxlLCBnaXZlcyBtZW1vcnkgYmFjayB0byB0aGUgc3lzdGVtICh2aWEgbmVnYXRpdmUgYXJndW1lbnRzCi0gIHRvIHNicmspIGlmIHRoZXJlIGlzIHVudXNlZCBtZW1vcnkgYXQgdGhlIGBoaWdoJyBlbmQgb2YgdGhlIG1hbGxvYwotICBwb29sIG9yIGluIHVudXNlZCBNTUFQIHNlZ21lbnRzLiBZb3UgY2FuIGNhbGwgdGhpcyBhZnRlciBmcmVlaW5nCi0gIGxhcmdlIGJsb2NrcyBvZiBtZW1vcnkgdG8gcG90ZW50aWFsbHkgcmVkdWNlIHRoZSBzeXN0ZW0tbGV2ZWwgbWVtb3J5Ci0gIHJlcXVpcmVtZW50cyBvZiBhIHByb2dyYW0uIEhvd2V2ZXIsIGl0IGNhbm5vdCBndWFyYW50ZWUgdG8gcmVkdWNlCi0gIG1lbW9yeS4gVW5kZXIgc29tZSBhbGxvY2F0aW9uIHBhdHRlcm5zLCBzb21lIGxhcmdlIGZyZWUgYmxvY2tzIG9mCi0gIG1lbW9yeSB3aWxsIGJlIGxvY2tlZCBiZXR3ZWVuIHR3byB1c2VkIGNodW5rcywgc28gdGhleSBjYW5ub3QgYmUKLSAgZ2l2ZW4gYmFjayB0byB0aGUgc3lzdGVtLgorLyogQ29uZmlndXJlIGRsbWFsbG9jLiAqLworI2RlZmluZSBIQVZFX0dFVFBBR0VTSVpFIDEKKyNkZWZpbmUgTUFMTE9DX0lOU1BFQ1RfQUxMIDEKKyNkZWZpbmUgTVNQQUNFUyAwCisjZGVmaW5lIFJFQUxMT0NfWkVST19CWVRFU19GUkVFUyAxCisjZGVmaW5lIFVTRV9ETF9QUkVGSVggMQorI2RlZmluZSBVU0VfTE9DS1MgMQorI2RlZmluZSBMT0NLX0FUX0ZPUksgMQorI2RlZmluZSBVU0VfUkVDVVJTSVZFX0xPQ0sgMAorI2RlZmluZSBVU0VfU1BJTl9MT0NLUyAwCisjZGVmaW5lIERFRkFVTFRfTU1BUF9USFJFU0hPTEQgKDY0VSAqIDEwMjRVKQogCi0gIFRoZSBgcGFkJyBhcmd1bWVudCB0byBtYWxsb2NfdHJpbSByZXByZXNlbnRzIHRoZSBhbW91bnQgb2YgZnJlZQotICB0cmFpbGluZyBzcGFjZSB0byBsZWF2ZSB1bnRyaW1tZWQuIElmIHRoaXMgYXJndW1lbnQgaXMgemVybywgb25seQotICB0aGUgbWluaW11bSBhbW91bnQgb2YgbWVtb3J5IHRvIG1haW50YWluIGludGVybmFsIGRhdGEgc3RydWN0dXJlcwotICB3aWxsIGJlIGxlZnQuIE5vbi16ZXJvIGFyZ3VtZW50cyBjYW4gYmUgc3VwcGxpZWQgdG8gbWFpbnRhaW4gZW5vdWdoCi0gIHRyYWlsaW5nIHNwYWNlIHRvIHNlcnZpY2UgZnV0dXJlIGV4cGVjdGVkIGFsbG9jYXRpb25zIHdpdGhvdXQgaGF2aW5nCi0gIHRvIHJlLW9idGFpbiBtZW1vcnkgZnJvbSB0aGUgc3lzdGVtLgorLyogSW5jbHVkZSB0aGUgcHJvcGVyIGRlZmluaXRpb25zLiAqLworI2luY2x1ZGUgIi4uL3Vwc3RyZWFtLWRsbWFsbG9jL21hbGxvYy5oIgogCi0gIE1hbGxvY190cmltIHJldHVybnMgMSBpZiBpdCBhY3R1YWxseSByZWxlYXNlZCBhbnkgbWVtb3J5LCBlbHNlIDAuCi0qLwotaW50ICBkbG1hbGxvY190cmltKHNpemVfdCk7Ci0KLS8qCi0gIG1hbGxvY193YWxrX2ZyZWVfcGFnZXMoaGFuZGxlciwgaGFyZykKLQotICBDYWxscyB0aGUgcHJvdmlkZWQgaGFuZGxlciBvbiBlYWNoIGZyZWUgcmVnaW9uIGluIHRoZSBoZWFwLiAgVGhlCi0gIG1lbW9yeSBiZXR3ZWVuIHN0YXJ0IGFuZCBlbmQgYXJlIGd1YXJhbnRlZWQgbm90IHRvIGNvbnRhaW4gYW55Ci0gIGltcG9ydGFudCBkYXRhLCBzbyB0aGUgaGFuZGxlciBpcyBmcmVlIHRvIGFsdGVyIHRoZSBjb250ZW50cwotICBpbiBhbnkgd2F5LiAgVGhpcyBjYW4gYmUgdXNlZCB0byBhZHZpc2UgdGhlIE9TIHRoYXQgbGFyZ2UgZnJlZQotICByZWdpb25zIG1heSBiZSBzd2FwcGVkIG91dC4KLQotICBUaGUgdmFsdWUgaW4gaGFyZyB3aWxsIGJlIHBhc3NlZCB0byBlYWNoIGNhbGwgb2YgdGhlIGhhbmRsZXIuCi0gKi8KLXZvaWQgZGxtYWxsb2Nfd2Fsa19mcmVlX3BhZ2VzKHZvaWQoKmhhbmRsZXIpKHZvaWQgKnN0YXJ0LCB2b2lkICplbmQsIHZvaWQgKmFyZyksCi0gICAgdm9pZCAqaGFyZyk7Ci0KLS8qCi0gIG1hbGxvY193YWxrX2hlYXAoaGFuZGxlciwgaGFyZykKLQotICBDYWxscyB0aGUgcHJvdmlkZWQgaGFuZGxlciBvbiBlYWNoIG9iamVjdCBvciBmcmVlIHJlZ2lvbiBpbiB0aGUKLSAgaGVhcC4gIFRoZSBoYW5kbGVyIHdpbGwgcmVjZWl2ZSB0aGUgY2h1bmsgcG9pbnRlciBhbmQgbGVuZ3RoLCB0aGUKLSAgb2JqZWN0IHBvaW50ZXIgYW5kIGxlbmd0aCwgYW5kIHRoZSB2YWx1ZSBpbiBoYXJnIG9uIGVhY2ggY2FsbC4KLSAqLwotdm9pZCBkbG1hbGxvY193YWxrX2hlYXAodm9pZCgqaGFuZGxlcikoY29uc3Qgdm9pZCAqY2h1bmtwdHIsIHNpemVfdCBjaHVua2xlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKnVzZXJwdHIsIHNpemVfdCB1c2VybGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqYXJnKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmhhcmcpOwotCi0vKgotICBtYWxsb2NfdXNhYmxlX3NpemUodm9pZCogcCk7Ci0KLSAgUmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHlvdSBjYW4gYWN0dWFsbHkgdXNlIGluCi0gIGFuIGFsbG9jYXRlZCBjaHVuaywgd2hpY2ggbWF5IGJlIG1vcmUgdGhhbiB5b3UgcmVxdWVzdGVkIChhbHRob3VnaAotICBvZnRlbiBub3QpIGR1ZSB0byBhbGlnbm1lbnQgYW5kIG1pbmltdW0gc2l6ZSBjb25zdHJhaW50cy4KLSAgWW91IGNhbiB1c2UgdGhpcyBtYW55IGJ5dGVzIHdpdGhvdXQgd29ycnlpbmcgYWJvdXQKLSAgb3ZlcndyaXRpbmcgb3RoZXIgYWxsb2NhdGVkIG9iamVjdHMuIFRoaXMgaXMgbm90IGEgcGFydGljdWxhcmx5IGdyZWF0Ci0gIHByb2dyYW1taW5nIHByYWN0aWNlLiBtYWxsb2NfdXNhYmxlX3NpemUgY2FuIGJlIG1vcmUgdXNlZnVsIGluCi0gIGRlYnVnZ2luZyBhbmQgYXNzZXJ0aW9ucywgZm9yIGV4YW1wbGU6Ci0KLSAgcCA9IG1hbGxvYyhuKTsKLSAgYXNzZXJ0KG1hbGxvY191c2FibGVfc2l6ZShwKSA+PSAyNTYpOwotKi8KLXNpemVfdCBkbG1hbGxvY191c2FibGVfc2l6ZSh2b2lkKik7Ci0KLS8qCi0gIG1hbGxvY19zdGF0cygpOwotICBQcmludHMgb24gc3RkZXJyIHRoZSBhbW91bnQgb2Ygc3BhY2Ugb2J0YWluZWQgZnJvbSB0aGUgc3lzdGVtIChib3RoCi0gIHZpYSBzYnJrIGFuZCBtbWFwKSwgdGhlIG1heGltdW0gYW1vdW50ICh3aGljaCBtYXkgYmUgbW9yZSB0aGFuCi0gIGN1cnJlbnQgaWYgbWFsbG9jX3RyaW0gYW5kL29yIG11bm1hcCBnb3QgY2FsbGVkKSwgYW5kIHRoZSBjdXJyZW50Ci0gIG51bWJlciBvZiBieXRlcyBhbGxvY2F0ZWQgdmlhIG1hbGxvYyAob3IgcmVhbGxvYywgZXRjKSBidXQgbm90IHlldAotICBmcmVlZC4gTm90ZSB0aGF0IHRoaXMgaXMgdGhlIG51bWJlciBvZiBieXRlcyBhbGxvY2F0ZWQsIG5vdCB0aGUKLSAgbnVtYmVyIHJlcXVlc3RlZC4gSXQgd2lsbCBiZSBsYXJnZXIgdGhhbiB0aGUgbnVtYmVyIHJlcXVlc3RlZAotICBiZWNhdXNlIG9mIGFsaWdubWVudCBhbmQgYm9va2tlZXBpbmcgb3ZlcmhlYWQuIEJlY2F1c2UgaXQgaW5jbHVkZXMKLSAgYWxpZ25tZW50IHdhc3RhZ2UgYXMgYmVpbmcgaW4gdXNlLCB0aGlzIGZpZ3VyZSBtYXkgYmUgZ3JlYXRlciB0aGFuCi0gIHplcm8gZXZlbiB3aGVuIG5vIHVzZXItbGV2ZWwgY2h1bmtzIGFyZSBhbGxvY2F0ZWQuCi0KLSAgVGhlIHJlcG9ydGVkIGN1cnJlbnQgYW5kIG1heGltdW0gc3lzdGVtIG1lbW9yeSBjYW4gYmUgaW5hY2N1cmF0ZSBpZgotICBhIHByb2dyYW0gbWFrZXMgb3RoZXIgY2FsbHMgdG8gc3lzdGVtIG1lbW9yeSBhbGxvY2F0aW9uIGZ1bmN0aW9ucwotICAobm9ybWFsbHkgc2Jyaykgb3V0c2lkZSBvZiBtYWxsb2MuCi0KLSAgbWFsbG9jX3N0YXRzIHByaW50cyBvbmx5IHRoZSBtb3N0IGNvbW1vbmx5IGludGVyZXN0aW5nIHN0YXRpc3RpY3MuCi0gIE1vcmUgaW5mb3JtYXRpb24gY2FuIGJlIG9idGFpbmVkIGJ5IGNhbGxpbmcgbWFsbGluZm8uCi0qLwotdm9pZCAgZGxtYWxsb2Nfc3RhdHMoKTsKLQotI2VuZGlmIC8qICFPTkxZX01TUEFDRVMgKi8KLQotI2lmIE1TUEFDRVMKLQotLyoKLSAgbXNwYWNlIGlzIGFuIG9wYXF1ZSB0eXBlIHJlcHJlc2VudGluZyBhbiBpbmRlcGVuZGVudAotICByZWdpb24gb2Ygc3BhY2UgdGhhdCBzdXBwb3J0cyBtc3BhY2VfbWFsbG9jLCBldGMuCi0qLwotdHlwZWRlZiB2b2lkKiBtc3BhY2U7Ci0KLS8qCi0gIGNyZWF0ZV9tc3BhY2UgY3JlYXRlcyBhbmQgcmV0dXJucyBhIG5ldyBpbmRlcGVuZGVudCBzcGFjZSB3aXRoIHRoZQotICBnaXZlbiBpbml0aWFsIGNhcGFjaXR5LCBvciwgaWYgMCwgdGhlIGRlZmF1bHQgZ3JhbnVsYXJpdHkgc2l6ZS4gIEl0Ci0gIHJldHVybnMgbnVsbCBpZiB0aGVyZSBpcyBubyBzeXN0ZW0gbWVtb3J5IGF2YWlsYWJsZSB0byBjcmVhdGUgdGhlCi0gIHNwYWNlLiAgSWYgYXJndW1lbnQgbG9ja2VkIGlzIG5vbi16ZXJvLCB0aGUgc3BhY2UgdXNlcyBhIHNlcGFyYXRlCi0gIGxvY2sgdG8gY29udHJvbCBhY2Nlc3MuIFRoZSBjYXBhY2l0eSBvZiB0aGUgc3BhY2Ugd2lsbCBncm93Ci0gIGR5bmFtaWNhbGx5IGFzIG5lZWRlZCB0byBzZXJ2aWNlIG1zcGFjZV9tYWxsb2MgcmVxdWVzdHMuICBZb3UgY2FuCi0gIGNvbnRyb2wgdGhlIHNpemVzIG9mIGluY3JlbWVudGFsIGluY3JlYXNlcyBvZiB0aGlzIHNwYWNlIGJ5Ci0gIGNvbXBpbGluZyB3aXRoIGEgZGlmZmVyZW50IERFRkFVTFRfR1JBTlVMQVJJVFkgb3IgZHluYW1pY2FsbHkKLSAgc2V0dGluZyB3aXRoIG1hbGxvcHQoTV9HUkFOVUxBUklUWSwgdmFsdWUpLgotKi8KLW1zcGFjZSBjcmVhdGVfbXNwYWNlKHNpemVfdCBjYXBhY2l0eSwgaW50IGxvY2tlZCk7Ci0KLS8qCi0gIGRlc3Ryb3lfbXNwYWNlIGRlc3Ryb3lzIHRoZSBnaXZlbiBzcGFjZSwgYW5kIGF0dGVtcHRzIHRvIHJldHVybiBhbGwKLSAgb2YgaXRzIG1lbW9yeSBiYWNrIHRvIHRoZSBzeXN0ZW0sIHJldHVybmluZyB0aGUgdG90YWwgbnVtYmVyIG9mCi0gIGJ5dGVzIGZyZWVkLiBBZnRlciBkZXN0cnVjdGlvbiwgdGhlIHJlc3VsdHMgb2YgYWNjZXNzIHRvIGFsbCBtZW1vcnkKLSAgdXNlZCBieSB0aGUgc3BhY2UgYmVjb21lIHVuZGVmaW5lZC4KLSovCi1zaXplX3QgZGVzdHJveV9tc3BhY2UobXNwYWNlIG1zcCk7Ci0KLS8qCi0gIGNyZWF0ZV9tc3BhY2Vfd2l0aF9iYXNlIHVzZXMgdGhlIG1lbW9yeSBzdXBwbGllZCBhcyB0aGUgaW5pdGlhbCBiYXNlCi0gIG9mIGEgbmV3IG1zcGFjZS4gUGFydCAobGVzcyB0aGFuIDEyOCpzaXplb2Yoc2l6ZV90KSBieXRlcykgb2YgdGhpcwotICBzcGFjZSBpcyB1c2VkIGZvciBib29ra2VlcGluZywgc28gdGhlIGNhcGFjaXR5IG11c3QgYmUgYXQgbGVhc3QgdGhpcwotICBsYXJnZS4gKE90aGVyd2lzZSAwIGlzIHJldHVybmVkLikgV2hlbiB0aGlzIGluaXRpYWwgc3BhY2UgaXMKLSAgZXhoYXVzdGVkLCBhZGRpdGlvbmFsIG1lbW9yeSB3aWxsIGJlIG9idGFpbmVkIGZyb20gdGhlIHN5c3RlbS4KLSAgRGVzdHJveWluZyB0aGlzIHNwYWNlIHdpbGwgZGVhbGxvY2F0ZSBhbGwgYWRkaXRpb25hbGx5IGFsbG9jYXRlZAotICBzcGFjZSAoaWYgcG9zc2libGUpIGJ1dCBub3QgdGhlIGluaXRpYWwgYmFzZS4KLSovCi1tc3BhY2UgY3JlYXRlX21zcGFjZV93aXRoX2Jhc2Uodm9pZCogYmFzZSwgc2l6ZV90IGNhcGFjaXR5LCBpbnQgbG9ja2VkKTsKLQotLyoKLSAgbXNwYWNlX21hbGxvYyBiZWhhdmVzIGFzIG1hbGxvYywgYnV0IG9wZXJhdGVzIHdpdGhpbgotICB0aGUgZ2l2ZW4gc3BhY2UuCi0qLwotdm9pZCogbXNwYWNlX21hbGxvYyhtc3BhY2UgbXNwLCBzaXplX3QgYnl0ZXMpOwotCi0vKgotICBtc3BhY2VfZnJlZSBiZWhhdmVzIGFzIGZyZWUsIGJ1dCBvcGVyYXRlcyB3aXRoaW4KLSAgdGhlIGdpdmVuIHNwYWNlLgotCi0gIElmIGNvbXBpbGVkIHdpdGggRk9PVEVSUz09MSwgbXNwYWNlX2ZyZWUgaXMgbm90IGFjdHVhbGx5IG5lZWRlZC4KLSAgZnJlZSBtYXkgYmUgY2FsbGVkIGluc3RlYWQgb2YgbXNwYWNlX2ZyZWUgYmVjYXVzZSBmcmVlZCBjaHVua3MgZnJvbQotICBhbnkgc3BhY2UgYXJlIGhhbmRsZWQgYnkgdGhlaXIgb3JpZ2luYXRpbmcgc3BhY2VzLgotKi8KLXZvaWQgbXNwYWNlX2ZyZWUobXNwYWNlIG1zcCwgdm9pZCogbWVtKTsKLQotLyoKLSAgbXNwYWNlX3JlYWxsb2MgYmVoYXZlcyBhcyByZWFsbG9jLCBidXQgb3BlcmF0ZXMgd2l0aGluCi0gIHRoZSBnaXZlbiBzcGFjZS4KLQotICBJZiBjb21waWxlZCB3aXRoIEZPT1RFUlM9PTEsIG1zcGFjZV9yZWFsbG9jIGlzIG5vdCBhY3R1YWxseQotICBuZWVkZWQuICByZWFsbG9jIG1heSBiZSBjYWxsZWQgaW5zdGVhZCBvZiBtc3BhY2VfcmVhbGxvYyBiZWNhdXNlCi0gIHJlYWxsb2NlZCBjaHVua3MgZnJvbSBhbnkgc3BhY2UgYXJlIGhhbmRsZWQgYnkgdGhlaXIgb3JpZ2luYXRpbmcKLSAgc3BhY2VzLgotKi8KLXZvaWQqIG1zcGFjZV9yZWFsbG9jKG1zcGFjZSBtc3AsIHZvaWQqIG1lbSwgc2l6ZV90IG5ld3NpemUpOwotCi0vKgotICBtc3BhY2VfbWVyZ2Vfb2JqZWN0cyB3aWxsIG1lcmdlIGFsbG9jYXRlZCBtZW1vcnkgbWVtYSBhbmQgbWVtYgotICB0b2dldGhlciwgcHJvdmlkZWQgbWVtYiBpbW1lZGlhdGVseSBmb2xsb3dzIG1lbWEuICBJdCBpcyByb3VnaGx5IGFzCi0gIGlmIG1lbWIgaGFzIGJlZW4gZnJlZWQgYW5kIG1lbWEgaGFzIGJlZW4gcmVhbGxvY2VkIHRvIGEgbGFyZ2VyIHNpemUuCi0gIE9uIHN1Y2Nlc3NmdWxseSBtZXJnaW5nLCBtZW1hIHdpbGwgYmUgcmV0dXJuZWQuIElmIGVpdGhlciBhcmd1bWVudAotICBpcyBudWxsIG9yIG1lbWIgZG9lcyBub3QgaW1tZWRpYXRlbHkgZm9sbG93IG1lbWEsIG51bGwgd2lsbCBiZQotICByZXR1cm5lZC4KLQotICBCb3RoIG1lbWEgYW5kIG1lbWIgc2hvdWxkIGhhdmUgYmVlbiBwcmV2aW91c2x5IGFsbG9jYXRlZCB1c2luZwotICBtYWxsb2Mgb3IgYSByZWxhdGVkIHJvdXRpbmUgc3VjaCBhcyByZWFsbG9jLiBJZiBlaXRoZXIgbWVtYSBvciBtZW1iCi0gIHdhcyBub3QgbWFsbG9jZWQgb3Igd2FzIHByZXZpb3VzbHkgZnJlZWQsIHRoZSByZXN1bHQgaXMgdW5kZWZpbmVkLAotICBidXQgbGlrZSBtc3BhY2VfZnJlZSwgdGhlIGRlZmF1bHQgaXMgdG8gYWJvcnQgdGhlIHByb2dyYW0uCi0qLwotdm9pZCogbXNwYWNlX21lcmdlX29iamVjdHMobXNwYWNlIG1zcCwgdm9pZCogbWVtYSwgdm9pZCogbWVtYik7Ci0KLS8qCi0gIG1zcGFjZV9jYWxsb2MgYmVoYXZlcyBhcyBjYWxsb2MsIGJ1dCBvcGVyYXRlcyB3aXRoaW4KLSAgdGhlIGdpdmVuIHNwYWNlLgotKi8KLXZvaWQqIG1zcGFjZV9jYWxsb2MobXNwYWNlIG1zcCwgc2l6ZV90IG5fZWxlbWVudHMsIHNpemVfdCBlbGVtX3NpemUpOwotCi0vKgotICBtc3BhY2VfbWVtYWxpZ24gYmVoYXZlcyBhcyBtZW1hbGlnbiwgYnV0IG9wZXJhdGVzIHdpdGhpbgotICB0aGUgZ2l2ZW4gc3BhY2UuCi0qLwotdm9pZCogbXNwYWNlX21lbWFsaWduKG1zcGFjZSBtc3AsIHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBieXRlcyk7Ci0KLS8qCi0gIG1zcGFjZV9pbmRlcGVuZGVudF9jYWxsb2MgYmVoYXZlcyBhcyBpbmRlcGVuZGVudF9jYWxsb2MsIGJ1dAotICBvcGVyYXRlcyB3aXRoaW4gdGhlIGdpdmVuIHNwYWNlLgotKi8KLXZvaWQqKiBtc3BhY2VfaW5kZXBlbmRlbnRfY2FsbG9jKG1zcGFjZSBtc3AsIHNpemVfdCBuX2VsZW1lbnRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGVsZW1fc2l6ZSwgdm9pZCogY2h1bmtzW10pOwotCi0vKgotICBtc3BhY2VfaW5kZXBlbmRlbnRfY29tYWxsb2MgYmVoYXZlcyBhcyBpbmRlcGVuZGVudF9jb21hbGxvYywgYnV0Ci0gIG9wZXJhdGVzIHdpdGhpbiB0aGUgZ2l2ZW4gc3BhY2UuCi0qLwotdm9pZCoqIG1zcGFjZV9pbmRlcGVuZGVudF9jb21hbGxvYyhtc3BhY2UgbXNwLCBzaXplX3Qgbl9lbGVtZW50cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHNpemVzW10sIHZvaWQqIGNodW5rc1tdKTsKLQotLyoKLSAgbXNwYWNlX2Zvb3RwcmludCgpIHJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyBvYnRhaW5lZCBmcm9tIHRoZQotICBzeXN0ZW0gZm9yIHRoaXMgc3BhY2UuCi0qLwotc2l6ZV90IG1zcGFjZV9mb290cHJpbnQobXNwYWNlIG1zcCk7Ci0KLS8qCi0gIG1zcGFjZV9tYXhfYWxsb3dlZF9mb290cHJpbnQoKSByZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgdGhhdAotICB0aGlzIHNwYWNlIGlzIGFsbG93ZWQgdG8gb2J0YWluIGZyb20gdGhlIHN5c3RlbS4gU2VlCi0gIG1hbGxvY19tYXhfYWxsb3dlZF9mb290cHJpbnQoKSBmb3IgYSBtb3JlIGluLWRlcHRoIGRlc2NyaXB0aW9uLgotCi0gIFRoaXMgZnVuY3Rpb24gaXMgb25seSBhdmFpbGFibGUgaWYgZGxtYWxsb2MuYyB3YXMgY29tcGlsZWQKLSAgd2l0aCBVU0VfTUFYX0FMTE9XRURfRk9PVFBSSU5UIHNldC4KLSovCi1zaXplX3QgbXNwYWNlX21heF9hbGxvd2VkX2Zvb3RwcmludChtc3BhY2UgbXNwKTsKLQotLyoKLSAgbXNwYWNlX3NldF9tYXhfYWxsb3dlZF9mb290cHJpbnQoKSBzZXRzIHRoZSBtYXhpbXVtIG51bWJlciBvZgotICBieXRlcyAocm91bmRlZCB1cCB0byBhIHBhZ2UpIHRoYXQgdGhpcyBzcGFjZSBpcyBhbGxvd2VkIHRvCi0gIG9idGFpbiBmcm9tIHRoZSBzeXN0ZW0uICBTZWUgbWFsbG9jX3NldF9tYXhfYWxsb3dlZF9mb290cHJpbnQoKQotICBmb3IgYSBtb3JlIGluLWRlcHRoIGRlc2NyaXB0aW9uLgotCi0gIFRoaXMgZnVuY3Rpb24gaXMgb25seSBhdmFpbGFibGUgaWYgZGxtYWxsb2MuYyB3YXMgY29tcGlsZWQKLSAgd2l0aCBVU0VfTUFYX0FMTE9XRURfRk9PVFBSSU5UIHNldC4KLSovCi12b2lkIG1zcGFjZV9zZXRfbWF4X2FsbG93ZWRfZm9vdHByaW50KG1zcGFjZSBtc3AsIHNpemVfdCBieXRlcyk7Ci0KLS8qCi0gIG1zcGFjZV9tYXhfZm9vdHByaW50KCkgcmV0dXJucyB0aGUgbWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgb2J0YWluZWQKLSAgZnJvbSB0aGUgc3lzdGVtIG92ZXIgdGhlIGxpZmV0aW1lIG9mIHRoaXMgc3BhY2UuCi0qLwotc2l6ZV90IG1zcGFjZV9tYXhfZm9vdHByaW50KG1zcGFjZSBtc3ApOwotCi0KLSNpZiAhTk9fTUFMTElORk8KLS8qCi0gIG1zcGFjZV9tYWxsaW5mbyBiZWhhdmVzIGFzIG1hbGxpbmZvLCBidXQgcmVwb3J0cyBwcm9wZXJ0aWVzIG9mCi0gIHRoZSBnaXZlbiBzcGFjZS4KLSovCi1zdHJ1Y3QgbWFsbGluZm8gbXNwYWNlX21hbGxpbmZvKG1zcGFjZSBtc3ApOwotI2VuZGlmIC8qIE5PX01BTExJTkZPICovCi0KLS8qCi0gIG1zcGFjZV9tYWxsb2Nfc3RhdHMgYmVoYXZlcyBhcyBtYWxsb2Nfc3RhdHMsIGJ1dCByZXBvcnRzCi0gIHByb3BlcnRpZXMgb2YgdGhlIGdpdmVuIHNwYWNlLgotKi8KLXZvaWQgbXNwYWNlX21hbGxvY19zdGF0cyhtc3BhY2UgbXNwKTsKLQotLyoKLSAgbXNwYWNlX3RyaW0gYmVoYXZlcyBhcyBtYWxsb2NfdHJpbSwgYnV0Ci0gIG9wZXJhdGVzIHdpdGhpbiB0aGUgZ2l2ZW4gc3BhY2UuCi0qLwotaW50IG1zcGFjZV90cmltKG1zcGFjZSBtc3AsIHNpemVfdCBwYWQpOwotCi0vKgotICBBbiBhbGlhcyBmb3IgbWFsbG9wdC4KLSovCi1pbnQgbXNwYWNlX21hbGxvcHQoaW50LCBpbnQpOwotCi0jZW5kaWYgIC8qIE1TUEFDRVMgKi8KLQotI2lmZGVmIF9fY3BsdXNwbHVzCi19OyAgLyogZW5kIG9mIGV4dGVybiAiQyIgKi8KLSNlbmRpZgotCi0jZW5kaWYgLyogTUFMTE9DXzI4MF9IICovCisjZW5kaWYgIC8vIExJQkNfQklPTklDX0RMTUFMTE9DX0hfCmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9kcmFuZDQ4LmMgYi9saWJjL2Jpb25pYy9kcmFuZDQ4LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkzMjcyY2YuLjAwMDAwMDAKLS0tIGEvbGliYy9iaW9uaWMvZHJhbmQ0OC5jCisrKyAvZGV2L251bGwKQEAgLTEsMjQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykgMTk5MyBNYXJ0aW4gQmlyZ21laWVyCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFlvdSBtYXkgcmVkaXN0cmlidXRlIHVubW9kaWZpZWQgb3IgbW9kaWZpZWQgdmVyc2lvbnMgb2YgdGhpcyBzb3VyY2UKLSAqIGNvZGUgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBhbmQgdGhlCi0gKiBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgcmV0YWluZWQuCi0gKgotICogVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCBgYGFzIGlzJycsIGFuZCBjb21lcyB3aXRoIG5vIHdhcnJhbnRpZXMKLSAqIG9mIGFueSBraW5kLiBJIHNoYWxsIGluIG5vIGV2ZW50IGJlIGxpYWJsZSBmb3IgYW55dGhpbmcgdGhhdCBoYXBwZW5zCi0gKiB0byBhbnlvbmUvYW55dGhpbmcgd2hlbiB1c2luZyB0aGlzIHNvZnR3YXJlLgotICovCi0KLSNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KLQotI2luY2x1ZGUgInJhbmQ0OC5oIgotCi1leHRlcm4gdW5zaWduZWQgc2hvcnQgX19yYW5kNDhfc2VlZFszXTsKLQotZG91YmxlCi1kcmFuZDQ4KHZvaWQpCi17Ci0JcmV0dXJuIGVyYW5kNDgoX19yYW5kNDhfc2VlZCk7Ci19CmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9lcmFuZDQ4LmMgYi9saWJjL2Jpb25pYy9lcmFuZDQ4LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRlY2JlYWQuLjAwMDAwMDAKLS0tIGEvbGliYy9iaW9uaWMvZXJhbmQ0OC5jCisrKyAvZGV2L251bGwKQEAgLTEsMjUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykgMTk5MyBNYXJ0aW4gQmlyZ21laWVyCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFlvdSBtYXkgcmVkaXN0cmlidXRlIHVubW9kaWZpZWQgb3IgbW9kaWZpZWQgdmVyc2lvbnMgb2YgdGhpcyBzb3VyY2UKLSAqIGNvZGUgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBhbmQgdGhlCi0gKiBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgcmV0YWluZWQuCi0gKgotICogVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCBgYGFzIGlzJycsIGFuZCBjb21lcyB3aXRoIG5vIHdhcnJhbnRpZXMKLSAqIG9mIGFueSBraW5kLiBJIHNoYWxsIGluIG5vIGV2ZW50IGJlIGxpYWJsZSBmb3IgYW55dGhpbmcgdGhhdCBoYXBwZW5zCi0gKiB0byBhbnlvbmUvYW55dGhpbmcgd2hlbiB1c2luZyB0aGlzIHNvZnR3YXJlLgotICovCi0KLSNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KLQotI2luY2x1ZGUgInJhbmQ0OC5oIgotCi1kb3VibGUKLWVyYW5kNDgodW5zaWduZWQgc2hvcnQgeHNlZWRbM10pCi17Ci0JX19kb3JhbmQ0OCh4c2VlZCk7Ci0JcmV0dXJuIGxkZXhwKChkb3VibGUpIHhzZWVkWzBdLCAtNDgpICsKLQkgICAgICAgbGRleHAoKGRvdWJsZSkgeHNlZWRbMV0sIC0zMikgKwotCSAgICAgICBsZGV4cCgoZG91YmxlKSB4c2VlZFsyXSwgLTE2KTsKLX0KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL2Vyci5jIGIvbGliYy9iaW9uaWMvZXJyLmMKaW5kZXggNTM1YjdlMS4uODRhM2Q4NSAxMDA2NDQKLS0tIGEvbGliYy9iaW9uaWMvZXJyLmMKKysrIGIvbGliYy9iaW9uaWMvZXJyLmMKQEAgLTM0LDcgKzM0LDcgQEAKICNpbmNsdWRlIDxzdGRhcmcuaD4KICNpbmNsdWRlIDxlcnJuby5oPgogCi1leHRlcm4gY2hhciAqX19wcm9nbmFtZTsKK2V4dGVybiBjb25zdCBjaGFyKiBfX3Byb2duYW1lOwogCiBfX25vcmV0dXJuIHZvaWQKIGVycihpbnQgZXZhbCwgY29uc3QgY2hhciAqZm10LCAuLi4pCmRpZmYgLS1naXQgYS9saWJjL2luZXQvZXRoZXJfYXRvbi5jIGIvbGliYy9iaW9uaWMvZXRoZXJfYXRvbi5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBsaWJjL2luZXQvZXRoZXJfYXRvbi5jCnJlbmFtZSB0byBsaWJjL2Jpb25pYy9ldGhlcl9hdG9uLmMKZGlmZiAtLWdpdCBhL2xpYmMvaW5ldC9ldGhlcl9udG9hLmMgYi9saWJjL2Jpb25pYy9ldGhlcl9udG9hLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGxpYmMvaW5ldC9ldGhlcl9udG9hLmMKcmVuYW1lIHRvIGxpYmMvYmlvbmljL2V0aGVyX250b2EuYwpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvZXZlbnRmZF9yZWFkLmNwcCBiL2xpYmMvYmlvbmljL2V2ZW50ZmRfcmVhZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTBlNzNmZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYmlvbmljL2V2ZW50ZmRfcmVhZC5jcHAKQEAgLTAsMCArMSwzNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3lzL2V2ZW50ZmQuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworaW50IGV2ZW50ZmRfcmVhZChpbnQgZmQsIGV2ZW50ZmRfdCogdmFsdWUpIHsKKyAgcmV0dXJuIChyZWFkKGZkLCB2YWx1ZSwgc2l6ZW9mKCp2YWx1ZSkpID09IHNpemVvZigqdmFsdWUpKSA/IDAgOiAtMTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL2V2ZW50ZmRfd3JpdGUuY3BwIGIvbGliYy9iaW9uaWMvZXZlbnRmZF93cml0ZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2MzZDNmMQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYmlvbmljL2V2ZW50ZmRfd3JpdGUuY3BwCkBAIC0wLDAgKzEsMzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN5cy9ldmVudGZkLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKK2ludCBldmVudGZkX3dyaXRlKGludCBmZCwgZXZlbnRmZF90IHZhbHVlKSB7CisgIHJldHVybiAod3JpdGUoZmQsICZ2YWx1ZSwgc2l6ZW9mKHZhbHVlKSkgPT0gc2l6ZW9mKHZhbHVlKSkgPyAwIDogLTE7Cit9CmRpZmYgLS1naXQgYS9saWJjL3VuaXN0ZC9mY250bC5jIGIvbGliYy9iaW9uaWMvZmNudGwuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbGliYy91bmlzdGQvZmNudGwuYwpyZW5hbWUgdG8gbGliYy9iaW9uaWMvZmNudGwuYwpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvZmxvY2tmaWxlLmMgYi9saWJjL2Jpb25pYy9mbG9ja2ZpbGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNjhmYjE1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9iaW9uaWMvZmxvY2tmaWxlLmMKQEAgLTAsMCArMSw3NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisvKiBpbXBsZW1lbnQgZmxvY2tmaWxlKCksIGZ0cnlsb2NrZmlsZSgpIGFuZCBmdW5sb2NrZmlsZSgpCisgKgorICogd2UgY2FuJ3QgdXNlIHRoZSBPcGVuQlNEIGltcGxlbWVudGF0aW9uIHdoaWNoIHVzZXMga2VybmVsLXNwZWNpZmljCisgKiBBUElzIG5vdCBhdmFpbGFibGUgb24gTGludXguCisgKgorICogSW5zdGVhZCwgd2UgdXNlIGEgcHRocmVhZF9tdXRleF90IHdpdGhpbiB0aGUgRklMRSogaW50ZXJuYWwgc3RhdGUuCisgKiBTZWUgZmlsZWV4dC5oIGZvciBkZXRhaWxzLgorICoKKyAqIHRoZSBiZWhhdmlvdXIsIGlmIGZjbG9zZSgpIGlzIGNhbGxlZCB3aGlsZSB0aGUgY29ycmVzcG9uZGluZworICogZmlsZSBpcyBsb2NrZWQgaXMgdG90YWxseSB1bmRlZmluZWQuCisgKi8KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSAiZmlsZWV4dC5oIgorCisKK3ZvaWQKK2Zsb2NrZmlsZShGSUxFICogZnApCit7CisgICAgaWYgKGZwICE9IE5VTEwpIHsKKyAgICAgICAgX0ZMT0NLX0xPQ0soZnApOworICAgIH0KK30KKworCitpbnQKK2Z0cnlsb2NrZmlsZShGSUxFICpmcCkKK3sKKyAgICAvKiBUaGUgc3BlY2lmaWNhdGlvbiBmb3IgZnRyeWxvY2tmaWxlKCkgc2F5cyBpdCByZXR1cm5zIDAgb24gc3VjY2VzcywKKyAgICAgKiBvciBub24temVybyBvbiBlcnJvci4gU28gcmV0dXJuIGFuIGVycm5vIGNvZGUgZGlyZWN0bHkgb24gZXJyb3IuCisgICAgICovCisgICAgaW50ICByZXQgPSBFSU5WQUw7CisKKyAgICBpZiAoZnAgIT0gTlVMTCkgeworICAgICAgICByZXQgPSBfRkxPQ0tfVFJZTE9DSyhmcCk7CisgICAgfQorICAgIHJldHVybiByZXQ7Cit9CisKK3ZvaWQKK2Z1bmxvY2tmaWxlKEZJTEUgKiBmcCkKK3sKKyAgICBpZiAoZnAgIT0gTlVMTCkgeworICAgICAgICBfRkxPQ0tfVU5MT0NLKGZwKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9mb3JrLmMgYi9saWJjL2Jpb25pYy9mb3JrLmMKaW5kZXggMmQ1YTEwYS4uZDgzYzUzNSAxMDA2NDQKLS0tIGEvbGliYy9iaW9uaWMvZm9yay5jCisrKyBiL2xpYmMvYmlvbmljL2ZvcmsuYwpAQCAtOSw3ICs5LDcgQEAKICAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KICAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CiAgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCiAgKiAgICBkaXN0cmlidXRpb24uCiAgKgogICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwpAQCAtMTksNyArMTksNyBAQAogICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAogICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKICAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUwotICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIAorICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECiAgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCiAgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKICAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgpAQCAtNDksOCArNDksOCBAQAogICAgICAgICBfX3RpbWVyX3RhYmxlX3N0YXJ0X3N0b3AoMCk7CiAgICAgICAgIF9fYmlvbmljX2F0Zm9ya19ydW5fcGFyZW50KCk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgLyogQWRqdXN0aW5nIHRoZSBrZXJuZWwgaWQgYWZ0ZXIgYSBmb3JrICovCi0gICAgICAgICh2b2lkKV9fcHRocmVhZF9zZXR0aWQocHRocmVhZF9zZWxmKCksIGdldHRpZCgpKTsKKyAgICAgICAgLy8gRml4IHRoZSB0aWQgaW4gdGhlIHB0aHJlYWRfaW50ZXJuYWxfdCBzdHJ1Y3QgYWZ0ZXIgYSBmb3JrLgorICAgICAgICBfX3B0aHJlYWRfc2V0dGlkKHB0aHJlYWRfc2VsZigpLCBnZXR0aWQoKSk7CiAKICAgICAgICAgLyoKICAgICAgICAgICogTmV3bHkgY3JlYXRlZCBwcm9jZXNzIG11c3QgdXBkYXRlIGNwdSBhY2NvdW50aW5nLgpkaWZmIC0tZ2l0IGEvbGliYy91bmlzdGQvZnN0YXRmcy5jIGIvbGliYy9iaW9uaWMvZnN0YXRmcy5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBsaWJjL3VuaXN0ZC9mc3RhdGZzLmMKcmVuYW1lIHRvIGxpYmMvYmlvbmljL2ZzdGF0ZnMuYwpkaWZmIC0tZ2l0IGEvbGliYy91bmlzdGQvZnRpbWUuYyBiL2xpYmMvYmlvbmljL2Z0aW1lLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGxpYmMvdW5pc3RkL2Z0aW1lLmMKcmVuYW1lIHRvIGxpYmMvYmlvbmljL2Z0aW1lLmMKZGlmZiAtLWdpdCBhL2xpYmMvdW5pc3RkL2Z0b2suYyBiL2xpYmMvYmlvbmljL2Z0b2suYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbGliYy91bmlzdGQvZnRvay5jCnJlbmFtZSB0byBsaWJjL2Jpb25pYy9mdG9rLmMKZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL2dldGF1eHZhbC5jcHAgYi9saWJjL2Jpb25pYy9nZXRhdXh2YWwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkMjI1ZTAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2Jpb25pYy9nZXRhdXh2YWwuY3BwCkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorI2luY2x1ZGUgPHN5cy9hdXh2Lmg+CisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfYXV4di5oPgorI2luY2x1ZGUgPGVsZi5oPgorCitfX0xJQkNfSElEREVOX18gRWxmMzJfYXV4dl90KiBfX2xpYmNfYXV4diA9IE5VTEw7CisKK2V4dGVybiAiQyIgdW5zaWduZWQgbG9uZyBpbnQgZ2V0YXV4dmFsKHVuc2lnbmVkIGxvbmcgaW50IHR5cGUpIHsKKyAgZm9yIChFbGYzMl9hdXh2X3QqIHYgPSBfX2xpYmNfYXV4djsgdi0+YV90eXBlICE9IEFUX05VTEw7ICsrdikgeworICAgIGlmICh2LT5hX3R5cGUgPT0gdHlwZSkgeworICAgICAgcmV0dXJuIHYtPmFfdW4uYV92YWw7CisgICAgfQorICB9CisgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvZ2V0Y3dkLmNwcCBiL2xpYmMvYmlvbmljL2dldGN3ZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDdjODA3ZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYmlvbmljL2dldGN3ZC5jcHAKQEAgLTAsMCArMSw3NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKworZXh0ZXJuICJDIiBpbnQgX19nZXRjd2QoY2hhciogYnVmLCBzaXplX3Qgc2l6ZSk7CisKK2NoYXIqIGdldGN3ZChjaGFyKiBidWYsIHNpemVfdCBzaXplKSB7CisgIC8vIFlvdSBjYW4ndCBzcGVjaWZ5IHNpemUgMCB1bmxlc3MgeW91J3JlIGFza2luZyB1cyB0byBhbGxvY2F0ZSBmb3IgeW91LgorICBpZiAoYnVmICE9IE5VTEwgJiYgc2l6ZSA9PSAwKSB7CisgICAgZXJybm8gPSBFSU5WQUw7CisgICAgcmV0dXJuIE5VTEw7CisgIH0KKworICAvLyBBbGxvY2F0ZSBhIGJ1ZmZlciBpZiBuZWNlc3NhcnkuCisgIGNoYXIqIGFsbG9jYXRlZF9idWYgPSBOVUxMOworICBzaXplX3QgYWxsb2NhdGVkX3NpemUgPSBzaXplOworICBpZiAoYnVmID09IE5VTEwpIHsKKyAgICBpZiAoc2l6ZSA9PSAwKSB7CisgICAgICAvLyBUaGUgTGludXgga2VybmVsIHdvbid0IHJldHVybiBtb3JlIHRoYW4gYSBwYWdlLCBzbyB0cmFuc2xhdGUgc2l6ZSAwIHRvIDRLaUIuCisgICAgICAvLyBUT0RPOiBpZiB3ZSBuZWVkIHRvIHN1cHBvcnQgcGF0aHMgbG9uZ2VyIHRoYW4gdGhhdCwgd2UnbGwgaGF2ZSB0byB3YWxrIHRoZSB0cmVlIG91cnNlbHZlcy4KKyAgICAgIGFsbG9jYXRlZF9zaXplID0gZ2V0cGFnZXNpemUoKTsKKyAgICB9CisgICAgYnVmID0gYWxsb2NhdGVkX2J1ZiA9IHN0YXRpY19jYXN0PGNoYXIqPihtYWxsb2MoYWxsb2NhdGVkX3NpemUpKTsKKyAgICBpZiAoYnVmID09IE5VTEwpIHsKKyAgICAgIC8vIG1hbGxvYyBzaG91bGQgc2V0IGVycm5vLCBidXQgdmFsZ3JpbmQncyBtYWxsb2Mgd3JhcHBlciBkb2Vzbid0LgorICAgICAgZXJybm8gPSBFTk9NRU07CisgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgIH0KKworICAvLyBBc2sgdGhlIGtlcm5lbCB0byBmaWxsIG91ciBidWZmZXIuCisgIGludCByYyA9IF9fZ2V0Y3dkKGJ1ZiwgYWxsb2NhdGVkX3NpemUpOworICBpZiAocmMgPT0gLTEpIHsKKyAgICBmcmVlKGFsbG9jYXRlZF9idWYpOworICAgIC8vIF9fZ2V0Y3dkIHNldCBlcnJuby4KKyAgICByZXR1cm4gTlVMTDsKKyAgfQorCisgIC8vIElmIHdlIGFsbG9jYXRlZCBhIHdob2xlIHBhZ2UsIG9ubHkgcmV0dXJuIGFzIGxhcmdlIGFuIGFsbG9jYXRpb24gYXMgbmVjZXNzYXJ5LgorICBpZiAoYWxsb2NhdGVkX2J1ZiAhPSBOVUxMKSB7CisgICAgaWYgKHNpemUgPT0gMCkgeworICAgICAgYnVmID0gc3RyZHVwKGFsbG9jYXRlZF9idWYpOworICAgICAgZnJlZShhbGxvY2F0ZWRfYnVmKTsKKyAgICB9IGVsc2UgeworICAgICAgYnVmID0gYWxsb2NhdGVkX2J1ZjsKKyAgICB9CisgIH0KKworICByZXR1cm4gYnVmOworfQpkaWZmIC0tZ2l0IGEvbGliYy91bmlzdGQvZ2V0ZHRhYmxlc2l6ZS5jIGIvbGliYy9iaW9uaWMvZ2V0ZHRhYmxlc2l6ZS5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBsaWJjL3VuaXN0ZC9nZXRkdGFibGVzaXplLmMKcmVuYW1lIHRvIGxpYmMvYmlvbmljL2dldGR0YWJsZXNpemUuYwpkaWZmIC0tZ2l0IGEvbGliYy91bmlzdGQvZ2V0aG9zdG5hbWUuYyBiL2xpYmMvYmlvbmljL2dldGhvc3RuYW1lLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGxpYmMvdW5pc3RkL2dldGhvc3RuYW1lLmMKcmVuYW1lIHRvIGxpYmMvYmlvbmljL2dldGhvc3RuYW1lLmMKZGlmZiAtLWdpdCBhL2xpYmMvdW5pc3RkL2dldHBncnAuYyBiL2xpYmMvYmlvbmljL2dldHBncnAuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbGliYy91bmlzdGQvZ2V0cGdycC5jCnJlbmFtZSB0byBsaWJjL2Jpb25pYy9nZXRwZ3JwLmMKZGlmZiAtLWdpdCBhL2xpYmMvdW5pc3RkL2dldHByaW9yaXR5LmMgYi9saWJjL2Jpb25pYy9nZXRwcmlvcml0eS5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBsaWJjL3VuaXN0ZC9nZXRwcmlvcml0eS5jCnJlbmFtZSB0byBsaWJjL2Jpb25pYy9nZXRwcmlvcml0eS5jCmRpZmYgLS1naXQgYS9saWJjL3VuaXN0ZC9nZXRwdC5jIGIvbGliYy9iaW9uaWMvZ2V0cHQuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbGliYy91bmlzdGQvZ2V0cHQuYwpyZW5hbWUgdG8gbGliYy9iaW9uaWMvZ2V0cHQuYwpkaWZmIC0tZ2l0IGEvbGliYy91bmlzdGQvaW5pdGdyb3Vwcy5jIGIvbGliYy9iaW9uaWMvaW5pdGdyb3Vwcy5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBsaWJjL3VuaXN0ZC9pbml0Z3JvdXBzLmMKcmVuYW1lIHRvIGxpYmMvYmlvbmljL2luaXRncm91cHMuYwpkaWZmIC0tZ2l0IGEvbGliYy91bmlzdGQvaXNhdHR5LmMgYi9saWJjL2Jpb25pYy9pc2F0dHkuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbGliYy91bmlzdGQvaXNhdHR5LmMKcmVuYW1lIHRvIGxpYmMvYmlvbmljL2lzYXR0eS5jCmRpZmYgLS1naXQgYS9saWJjL3VuaXN0ZC9pc3NldHVnaWQuYyBiL2xpYmMvYmlvbmljL2lzc2V0dWdpZC5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBsaWJjL3VuaXN0ZC9pc3NldHVnaWQuYwpyZW5hbWUgdG8gbGliYy9iaW9uaWMvaXNzZXR1Z2lkLmMKZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL2xpYmNfaW5pdF9jb21tb24uYyBiL2xpYmMvYmlvbmljL2xpYmNfaW5pdF9jb21tb24uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjZhNjM3OS4uMDAwMDAwMAotLS0gYS9saWJjL2Jpb25pYy9saWJjX2luaXRfY29tbW9uLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMjIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqICAgIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKLSAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi0gKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCi0gKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAotICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCi0gKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKLSAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSA8c3RkZGVmLmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdGRpbnQuaD4KLSNpbmNsdWRlIDxlbGYuaD4KLSNpbmNsdWRlIDxhc20vcGFnZS5oPgotI2luY2x1ZGUgInB0aHJlYWRfaW50ZXJuYWwuaCIKLSNpbmNsdWRlICJhdGV4aXQuaCIKLSNpbmNsdWRlICJsaWJjX2luaXRfY29tbW9uLmgiCi0KLSNpbmNsdWRlIDxiaW9uaWNfdGxzLmg+Ci0jaW5jbHVkZSA8ZXJybm8uaD4KLQotZXh0ZXJuIHVuc2lnbmVkIF9fZ2V0X3NwKHZvaWQpOwotZXh0ZXJuIHBpZF90ICAgIGdldHRpZCh2b2lkKTsKLQotY2hhciogIF9fcHJvZ25hbWU7Ci1jaGFyICoqZW52aXJvbjsKLQotLyogZnJvbSBhc20vcGFnZS5oICovCi11bnNpZ25lZCBpbnQgX19wYWdlX3NpemUgPSBQQUdFX1NJWkU7Ci11bnNpZ25lZCBpbnQgX19wYWdlX3NoaWZ0ID0gUEFHRV9TSElGVDsKLQotCi1pbnQgX19zeXN0ZW1fcHJvcGVydGllc19pbml0KHZvaWQpOwotCi12b2lkIF9fbGliY19pbml0X2NvbW1vbih1aW50cHRyX3QgKmVsZmRhdGEpCi17Ci0gICAgaW50ICAgICBhcmdjID0gKmVsZmRhdGE7Ci0gICAgY2hhcioqICBhcmd2ID0gKGNoYXIqKikoZWxmZGF0YSArIDEpOwotICAgIGNoYXIqKiAgZW52cCA9IGFyZ3YgKyBhcmdjICsgMTsKLQotICAgIHB0aHJlYWRfYXR0cl90ICAgICAgICAgICAgIHRocmVhZF9hdHRyOwotICAgIHN0YXRpYyBwdGhyZWFkX2ludGVybmFsX3QgIHRocmVhZDsKLSAgICBzdGF0aWMgdm9pZCogICAgICAgICAgICAgICB0bHNfYXJlYVtCSU9OSUNfVExTX1NMT1RTXTsKLQotICAgIC8qIHNldHVwIHB0aHJlYWQgcnVudGltZSBhbmQgbWFpbiB0aHJlYWQgZGVzY3JpcHRvciAqLwotICAgIHVuc2lnbmVkIHN0YWNrdG9wID0gKF9fZ2V0X3NwKCkgJiB+KFBBR0VfU0laRSAtIDEpKSArIFBBR0VfU0laRTsKLSAgICB1bnNpZ25lZCBzdGFja3NpemUgPSAxMjggKiAxMDI0OwotICAgIHVuc2lnbmVkIHN0YWNrYm90dG9tID0gc3RhY2t0b3AgLSBzdGFja3NpemU7Ci0KLSAgICBwdGhyZWFkX2F0dHJfaW5pdCgmdGhyZWFkX2F0dHIpOwotICAgIHB0aHJlYWRfYXR0cl9zZXRzdGFjaygmdGhyZWFkX2F0dHIsICh2b2lkKilzdGFja2JvdHRvbSwgc3RhY2tzaXplKTsKLSAgICBfaW5pdF90aHJlYWQoJnRocmVhZCwgZ2V0dGlkKCksICZ0aHJlYWRfYXR0ciwgKHZvaWQqKXN0YWNrYm90dG9tKTsKLSAgICBfX2luaXRfdGxzKHRsc19hcmVhLCAmdGhyZWFkKTsKLQotICAgIC8qIGNsZWFyIGVycm5vIC0gcmVxdWlyZXMgVExTIGFyZWEgKi8KLSAgICBlcnJubyA9IDA7Ci0KLSAgICAvKiBzZXQgcHJvZ3JhbSBuYW1lICovCi0gICAgX19wcm9nbmFtZSA9IGFyZ3ZbMF0gPyBhcmd2WzBdIDogIjx1bmtub3duPiI7Ci0KLSAgICAvKiBzZXR1cCBlbnZpcm9ubWVudCBwb2ludGVyICovCi0gICAgZW52aXJvbiA9IGVudnA7Ci0KLSAgICAvKiBzZXR1cCBzeXN0ZW0gcHJvcGVydGllcyAtIHJlcXVpcmVzIGVudmlyb25tZW50ICovCi0gICAgX19zeXN0ZW1fcHJvcGVydGllc19pbml0KCk7Ci19Ci0KLS8qIFRoaXMgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgZHVyaW5nIG5vcm1hbCBwcm9ncmFtIHRlcm1pbmF0aW9uCi0gKiB0byBydW4gdGhlIGRlc3RydWN0b3JzIHRoYXQgYXJlIGxpc3RlZCBpbiB0aGUgLmZpbmlfYXJyYXkgc2VjdGlvbgotICogb2YgdGhlIGV4ZWN1dGFibGUsIGlmIGFueS4KLSAqCi0gKiAnZmluaV9hcnJheScgcG9pbnRzIHRvIGEgbGlzdCBvZiBmdW5jdGlvbiBhZGRyZXNzZXMuIFRoZSBmaXJzdAotICogZW50cnkgaW4gdGhlIGxpc3QgaGFzIHZhbHVlIC0xLCB0aGUgbGFzdCBvbmUgaGFzIHZhbHVlIDAuCi0gKi8KLXZvaWQgX19saWJjX2Zpbmkodm9pZCogYXJyYXkpCi17Ci0gICAgaW50IGNvdW50OwotICAgIHZvaWQqKiBmaW5pX2FycmF5ID0gYXJyYXk7Ci0gICAgY29uc3Qgc2l6ZV90ICBtaW51czEgPSB+KHNpemVfdCkwOyAvKiBlbnN1cmUgcHJvcGVyIHNpZ24gZXh0ZW5zaW9uICovCi0KLSAgICAvKiBTYW5pdHkgY2hlY2sgLSBmaXJzdCBlbnRyeSBtdXN0IGJlIC0xICovCi0gICAgaWYgKGFycmF5ID09IE5VTEwgfHwgKHNpemVfdClmaW5pX2FycmF5WzBdICE9IG1pbnVzMSkgewotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLyogc2tpcCBvdmVyIGl0ICovCi0gICAgZmluaV9hcnJheSArPSAxOwotCi0gICAgLyogQ291bnQgdGhlIG51bWJlciBvZiBkZXN0cnVjdG9ycy4gKi8KLSAgICBmb3IgKGNvdW50ID0gMDsgZmluaV9hcnJheVtjb3VudF0gIT0gTlVMTDsgY291bnQrKyk7Ci0KLSAgICAvKiBOb3cgY2FsbCBlYWNoIGRlc3RydWN0b3IgaW4gcmV2ZXJzZSBvcmRlci4gKi8KLSAgICB3aGlsZSAoY291bnQgPiAwKSB7Ci0gICAgICAgIHZvaWQgKCpmdW5jKSgpID0gKHZvaWQgKCopKSBmaW5pX2FycmF5Wy0tY291bnRdOwotCi0gICAgICAgIC8qIFNhbml0eSBjaGVjaywgYW55IC0xIGluIHRoZSBsaXN0IGlzIGlnbm9yZWQgKi8KLSAgICAgICAgaWYgKChzaXplX3QpZnVuYyA9PSBtaW51czEpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBmdW5jKCk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvbGliY19pbml0X2NvbW1vbi5jcHAgYi9saWJjL2Jpb25pYy9saWJjX2luaXRfY29tbW9uLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZmM0OTBlCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9iaW9uaWMvbGliY19pbml0X2NvbW1vbi5jcHAKQEAgLTAsMCArMSwxNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImxpYmNfaW5pdF9jb21tb24uaCIKKworI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8YmlvbmljX3Rscy5oPgorI2luY2x1ZGUgPGVsZi5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3RkZGVmLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzeXMvYXV4di5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorCisjaW5jbHVkZSAiYXRleGl0LmgiCisjaW5jbHVkZSAicHJpdmF0ZS9iaW9uaWNfYXV4di5oIgorI2luY2x1ZGUgInByaXZhdGUvYmlvbmljX3NzcC5oIgorI2luY2x1ZGUgInByaXZhdGUvS2VybmVsQXJndW1lbnRCbG9jay5oIgorI2luY2x1ZGUgInB0aHJlYWRfaW50ZXJuYWwuaCIKKworZXh0ZXJuICJDIiBhYm9ydF9tc2dfdCoqIF9fYWJvcnRfbWVzc2FnZV9wdHI7CitleHRlcm4gIkMiIHVuc2lnbmVkIF9fZ2V0X3NwKHZvaWQpOworZXh0ZXJuICJDIiBpbnQgX19zeXN0ZW1fcHJvcGVydGllc19pbml0KHZvaWQpOworCisvLyBOb3QgcHVibGljLCBidXQgd2VsbC1rbm93biBpbiB0aGUgQlNEcy4KK2NvbnN0IGNoYXIqIF9fcHJvZ25hbWU7CisKKy8vIERlY2xhcmVkIGluIDx1bmlzdGQuaD4uCitjaGFyKiogZW52aXJvbjsKKworLy8gRGVjbGFyZWQgaW4gPHByaXZhdGUvYmlvbmljX3NzcC5oPi4KK3VpbnRwdHJfdCBfX3N0YWNrX2Noa19ndWFyZCA9IDA7CisKKy8vIERlY2xhcmVkIGluIDxhc20vcGFnZS5oPi4KK3Vuc2lnbmVkIGludCBfX3BhZ2Vfc2l6ZSA9IFBBR0VfU0laRTsKK3Vuc2lnbmVkIGludCBfX3BhZ2Vfc2hpZnQgPSBQQUdFX1NISUZUOworCisvKiBJbml0IFRMUyBmb3IgdGhlIGluaXRpYWwgdGhyZWFkLiBDYWxsZWQgYnkgdGhlIGxpbmtlciBfYmVmb3JlXyBsaWJjIGlzIG1hcHBlZAorICogaW4gbWVtb3J5LiBCZXdhcmU6IGFsbCB3cml0ZXMgdG8gbGliYyBnbG9iYWxzIGZyb20gdGhpcyBmdW5jdGlvbiB3aWxsCisgKiBhcHBseSB0byBsaW5rZXItcHJpdmF0ZSBjb3BpZXMgYW5kIHdpbGwgbm90IGJlIHZpc2libGUgZnJvbSBsaWJjIGxhdGVyIG9uLgorICoKKyAqIE5vdGU6IHRoaXMgZnVuY3Rpb24gY3JlYXRlcyBhIHB0aHJlYWRfaW50ZXJuYWxfdCBmb3IgdGhlIGluaXRpYWwgdGhyZWFkIGFuZAorICogc3RvcmVzIHRoZSBwb2ludGVyIGluIFRMUywgYnV0IGRvZXMgbm90IGFkZCBpdCB0byBwdGhyZWFkJ3MgZ1RocmVhZExpc3QuIFRoaXMKKyAqIGhhcyB0byBiZSBkb25lIGxhdGVyIGZyb20gbGliYyBpdHNlbGYgKHNlZSBfX2xpYmNfaW5pdF9jb21tb24pLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gYWxzbyBzdG9yZXMgYSBwb2ludGVyIHRvIHRoZSBrZXJuZWwgYXJndW1lbnQgYmxvY2sgaW4gYSBUTFMgc2xvdCB0byBiZQorICogcGlja2VkIHVwIGJ5IHRoZSBsaWJjIGNvbnN0cnVjdG9yLgorICovCit2b2lkIF9fbGliY19pbml0X3RscyhLZXJuZWxBcmd1bWVudEJsb2NrJiBhcmdzKSB7CisgIF9fbGliY19hdXh2ID0gYXJncy5hdXh2OworCisgIHVuc2lnbmVkIHN0YWNrX3RvcCA9IChfX2dldF9zcCgpICYgfihQQUdFX1NJWkUgLSAxKSkgKyBQQUdFX1NJWkU7CisgIHVuc2lnbmVkIHN0YWNrX3NpemUgPSAxMjggKiAxMDI0OworICB1bnNpZ25lZCBzdGFja19ib3R0b20gPSBzdGFja190b3AgLSBzdGFja19zaXplOworCisgIHN0YXRpYyB2b2lkKiB0bHNbQklPTklDX1RMU19TTE9UU107CisgIHN0YXRpYyBwdGhyZWFkX2ludGVybmFsX3QgdGhyZWFkOworICB0aHJlYWQudGlkID0gZ2V0dGlkKCk7CisgIHRocmVhZC50bHMgPSB0bHM7CisgIHB0aHJlYWRfYXR0cl9pbml0KCZ0aHJlYWQuYXR0cik7CisgIHB0aHJlYWRfYXR0cl9zZXRzdGFjaygmdGhyZWFkLmF0dHIsICh2b2lkKikgc3RhY2tfYm90dG9tLCBzdGFja19zaXplKTsKKyAgX2luaXRfdGhyZWFkKCZ0aHJlYWQsIGZhbHNlKTsKKyAgX19pbml0X3RscygmdGhyZWFkKTsKKyAgdGxzW1RMU19TTE9UX0JJT05JQ19QUkVJTklUXSA9ICZhcmdzOworfQorCit2b2lkIF9fbGliY19pbml0X2NvbW1vbihLZXJuZWxBcmd1bWVudEJsb2NrJiBhcmdzKSB7CisgIC8vIEluaXRpYWxpemUgdmFyaW91cyBnbG9iYWxzLgorICBlbnZpcm9uID0gYXJncy5lbnZwOworICBlcnJubyA9IDA7CisgIF9fbGliY19hdXh2ID0gYXJncy5hdXh2OworICBfX3Byb2duYW1lID0gYXJncy5hcmd2WzBdID8gYXJncy5hcmd2WzBdIDogIjx1bmtub3duPiI7CisgIF9fYWJvcnRfbWVzc2FnZV9wdHIgPSBhcmdzLmFib3J0X21lc3NhZ2VfcHRyOworCisgIC8vIEFUX1JBTkRPTSBpcyBhIHBvaW50ZXIgdG8gMTYgYnl0ZXMgb2YgcmFuZG9tbmVzcyBvbiB0aGUgc3RhY2suCisgIF9fc3RhY2tfY2hrX2d1YXJkID0gKnJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Kj4oZ2V0YXV4dmFsKEFUX1JBTkRPTSkpOworCisgIC8vIEdldCB0aGUgbWFpbiB0aHJlYWQgZnJvbSBUTFMgYW5kIGFkZCBpdCB0byB0aGUgdGhyZWFkIGxpc3QuCisgIHB0aHJlYWRfaW50ZXJuYWxfdCogbWFpbl90aHJlYWQgPSBfX2dldF90aHJlYWQoKTsKKyAgbWFpbl90aHJlYWQtPmFsbG9jYXRlZF9vbl9oZWFwID0gZmFsc2U7CisgIF9wdGhyZWFkX2ludGVybmFsX2FkZChtYWluX3RocmVhZCk7CisKKyAgX19zeXN0ZW1fcHJvcGVydGllc19pbml0KCk7IC8vIFJlcXVpcmVzICdlbnZpcm9uJy4KK30KKworLyogVGhpcyBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBkdXJpbmcgbm9ybWFsIHByb2dyYW0gdGVybWluYXRpb24KKyAqIHRvIHJ1biB0aGUgZGVzdHJ1Y3RvcnMgdGhhdCBhcmUgbGlzdGVkIGluIHRoZSAuZmluaV9hcnJheSBzZWN0aW9uCisgKiBvZiB0aGUgZXhlY3V0YWJsZSwgaWYgYW55LgorICoKKyAqICdmaW5pX2FycmF5JyBwb2ludHMgdG8gYSBsaXN0IG9mIGZ1bmN0aW9uIGFkZHJlc3Nlcy4gVGhlIGZpcnN0CisgKiBlbnRyeSBpbiB0aGUgbGlzdCBoYXMgdmFsdWUgLTEsIHRoZSBsYXN0IG9uZSBoYXMgdmFsdWUgMC4KKyAqLwordm9pZCBfX2xpYmNfZmluaSh2b2lkKiBhcnJheSkgeworICB2b2lkKiogZmluaV9hcnJheSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPihhcnJheSk7CisgIGNvbnN0IHNpemVfdCBtaW51czEgPSB+KHNpemVfdCkwOyAvKiBlbnN1cmUgcHJvcGVyIHNpZ24gZXh0ZW5zaW9uICovCisKKyAgLyogU2FuaXR5IGNoZWNrIC0gZmlyc3QgZW50cnkgbXVzdCBiZSAtMSAqLworICBpZiAoYXJyYXkgPT0gTlVMTCB8fCAoc2l6ZV90KWZpbmlfYXJyYXlbMF0gIT0gbWludXMxKSB7CisgICAgcmV0dXJuOworICB9CisKKyAgLyogc2tpcCBvdmVyIGl0ICovCisgIGZpbmlfYXJyYXkgKz0gMTsKKworICAvKiBDb3VudCB0aGUgbnVtYmVyIG9mIGRlc3RydWN0b3JzLiAqLworICBpbnQgY291bnQgPSAwOworICB3aGlsZSAoZmluaV9hcnJheVtjb3VudF0gIT0gTlVMTCkgeworICAgICsrY291bnQ7CisgIH0KKworICAvKiBOb3cgY2FsbCBlYWNoIGRlc3RydWN0b3IgaW4gcmV2ZXJzZSBvcmRlci4gKi8KKyAgd2hpbGUgKGNvdW50ID4gMCkgeworICAgIHZvaWQgKCpmdW5jKSgpID0gKHZvaWQgKCopKCkpIGZpbmlfYXJyYXlbLS1jb3VudF07CisKKyAgICAvKiBTYW5pdHkgY2hlY2ssIGFueSAtMSBpbiB0aGUgbGlzdCBpcyBpZ25vcmVkICovCisgICAgaWYgKChzaXplX3QpZnVuYyA9PSBtaW51czEpIHsKKyAgICAgIGNvbnRpbnVlOworICAgIH0KKworICAgIGZ1bmMoKTsKKyAgfQorCisjaWZuZGVmIExJQkNfU1RBVElDCisgIHsKKyAgICBleHRlcm4gdm9pZCBfX2xpYmNfcG9zdGZpbmkodm9pZCkgX19hdHRyaWJ1dGVfXygod2VhaykpOworICAgIGlmIChfX2xpYmNfcG9zdGZpbmkpIHsKKyAgICAgIF9fbGliY19wb3N0ZmluaSgpOworICAgIH0KKyAgfQorI2VuZGlmCit9CmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9saWJjX2luaXRfY29tbW9uLmggYi9saWJjL2Jpb25pYy9saWJjX2luaXRfY29tbW9uLmgKaW5kZXggMzUwNTBhMS4uMTQxMDVmOCAxMDA2NDQKLS0tIGEvbGliYy9iaW9uaWMvbGliY19pbml0X2NvbW1vbi5oCisrKyBiL2xpYmMvYmlvbmljL2xpYmNfaW5pdF9jb21tb24uaApAQCAtMjgsMTkgKzI4LDI5IEBACiAjaWZuZGVmIExJQkNfSU5JVF9DT01NT05fSAogI2RlZmluZSBMSUJDX0lOSVRfQ09NTU9OX0gKIAotI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgogCi10eXBlZGVmIHN0cnVjdAotewotICAgIHZvaWQgKCoqcHJlaW5pdF9hcnJheSkodm9pZCk7Ci0gICAgdm9pZCAoKippbml0X2FycmF5KSh2b2lkKTsKLSAgICB2b2lkICgqKmZpbmlfYXJyYXkpKHZvaWQpOwotI2lmbmRlZiBfX2kzODZfXwotICAgIHZvaWQgKCoqY3RvcnNfYXJyYXkpKHZvaWQpOwotI2VuZGlmCit0eXBlZGVmIHN0cnVjdCB7CisgIHZvaWQgKCoqcHJlaW5pdF9hcnJheSkodm9pZCk7CisgIHZvaWQgKCoqaW5pdF9hcnJheSkodm9pZCk7CisgIHZvaWQgKCoqZmluaV9hcnJheSkodm9pZCk7CiB9IHN0cnVjdG9yc19hcnJheV90OwogCi1leHRlcm4gdm9pZCBfX2xpYmNfaW5pdF9jb21tb24odWludHB0cl90ICplbGZkYXRhKTsKLWV4dGVybiB2b2lkIF9fbGliY19maW5pKHZvaWQqIGZpbml0X2FycmF5KTsKK19fQkVHSU5fREVDTFMKKworZXh0ZXJuIGludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndiwgY2hhcioqIGVudik7CisKK19fbm9yZXR1cm4gdm9pZCBfX2xpYmNfaW5pdCh2b2lkKiByYXdfYXJncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICgqb25leGl0KSh2b2lkKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKCpzbGluZ3Nob3QpKGludCwgY2hhcioqLCBjaGFyKiopLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdG9yc19hcnJheV90IGNvbnN0ICogY29uc3Qgc3RydWN0b3JzKTsKK3ZvaWQgX19saWJjX2Zpbmkodm9pZCogZmluaXRfYXJyYXkpOworCitfX0VORF9ERUNMUworCisjaWYgZGVmaW5lZChfX2NwbHVzcGx1cykKK3N0cnVjdCBLZXJuZWxBcmd1bWVudEJsb2NrOwordm9pZCBfX0xJQkNfSElEREVOX18gX19saWJjX2luaXRfY29tbW9uKEtlcm5lbEFyZ3VtZW50QmxvY2smIGFyZ3MpOworI2VuZGlmCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvbGliY19pbml0X2R5bmFtaWMuYyBiL2xpYmMvYmlvbmljL2xpYmNfaW5pdF9keW5hbWljLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRiYjJhODEuLjAwMDAwMDAKLS0tIGEvbGliYy9iaW9uaWMvbGliY19pbml0X2R5bmFtaWMuYworKysgL2Rldi9udWxsCkBAIC0xLDExNSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogICAgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUwotICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKLSAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCi0gKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKLSAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAotICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0gKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0vKgotICogbGliY19pbml0X2R5bmFtaWMuYwotICoKLSAqIFRoaXMgc291cmNlIGZpbGVzIHByb3ZpZGVzIHR3byBpbXBvcnRhbnQgZnVuY3Rpb25zIGZvciBkeW5hbWljCi0gKiBleGVjdXRhYmxlczoKLSAqCi0gKiAtIGEgQyBydW50aW1lIGluaXRpYWxpemVyIChfX2xpYmNfcHJlaW5pdCksIHdoaWNoIGlzIGNhbGxlZCBieQotICogICB0aGUgZHluYW1pYyBsaW5rZXIgd2hlbiBsaWJjLnNvIGlzIGxvYWRlZC4gVGhpcyBoYXBwZW5zIGJlZm9yZQotICogICBhbnkgb3RoZXIgaW5pdGlhbGl6ZXIgKGUuZy4gc3RhdGljIEMrKyBjb25zdHJ1Y3RvcnMgaW4gb3RoZXIKLSAqICAgc2hhcmVkIGxpYnJhcmllcyB0aGUgcHJvZ3JhbSBkZXBlbmRzIG9uKS4KLSAqCi0gKiAtIGEgcHJvZ3JhbSBsYXVuY2ggZnVuY3Rpb24gKF9fbGliY19pbml0KSwgd2hpY2ggaXMgY2FsbGVkIGFmdGVyCi0gKiAgIGFsbCBkeW5hbWljIGxpbmtpbmcgaGFzIGJlZW4gcGVyZm9ybWVkLiBUZWNobmljYWxseSwgaXQgaXMgY2FsbGVkCi0gKiAgIGZyb20gYXJjaC0kQVJDSC9iaW9uaWMvY3J0YmVnaW5fZHluYW1pYy5TIHdoaWNoIGlzIGl0c2VsZiBjYWxsZWQKLSAqICAgYnkgdGhlIGR5bmFtaWMgbGlua2VyIGFmdGVyIGFsbCBsaWJyYXJpZXMgaGF2ZSBiZWVuIGxvYWRlZCBhbmQKLSAqICAgaW5pdGlhbGl6ZWQuCi0gKi8KLQotI2luY2x1ZGUgPHN0ZGRlZi5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3RkaW50Lmg+Ci0jaW5jbHVkZSA8ZWxmLmg+Ci0jaW5jbHVkZSAiYXRleGl0LmgiCi0jaW5jbHVkZSAibGliY19pbml0X2NvbW1vbi5oIgotI2luY2x1ZGUgPGJpb25pY190bHMuaD4KLQotLyogV2UgZmxhZyB0aGUgX19saWJjX3ByZWluaXQgZnVuY3Rpb24gYXMgYSBjb25zdHJ1Y3RvciB0byBlbnN1cmUKLSAqIHRoYXQgaXRzIGFkZHJlc3MgaXMgbGlzdGVkIGluIGxpYmMuc28ncyAuaW5pdF9hcnJheSBzZWN0aW9uLgotICogVGhpcyBlbnN1cmVzIHRoYXQgdGhlIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSB0aGUgZHluYW1pYyBsaW5rZXIKLSAqIGFzIHNvb24gYXMgdGhlIHNoYXJlZCBsaWJyYXJ5IGlzIGxvYWRlZC4KLSAqLwotdm9pZCBfX2F0dHJpYnV0ZV9fKChjb25zdHJ1Y3RvcikpIF9fbGliY19wcmVpbml0KHZvaWQpOwotCi12b2lkIF9fbGliY19wcmVpbml0KHZvaWQpCi17Ci0gICAgLyogUmVhZCB0aGUgRUxGIGRhdGEgcG9pbnRlciBmcm9tIGEgc3BlY2lhbCBzbG90IG9mIHRoZQotICAgICAqIFRMUyBhcmVhLCB0aGVuIGNhbGwgX19saWJjX2luaXRfY29tbW9uIHdpdGggaXQuCi0gICAgICoKLSAgICAgKiBOb3RlIHRoYXQ6Ci0gICAgICogLSB3ZSBjbGVhciB0aGUgc2xvdCBzbyBubyBvdGhlciBpbml0aWFsaXplciBzZWVzIGl0cyB2YWx1ZS4KLSAgICAgKiAtIF9fbGliY19pbml0X2NvbW1vbigpIHdpbGwgY2hhbmdlIHRoZSBUTFMgYXJlYSBzbyB0aGUgb2xkIG9uZQotICAgICAqICAgd29uJ3QgYmUgYWNjZXNzaWJsZSBhbnl3YXkuCi0gICAgICovCi0gICAgdm9pZCoqICAgICAgdGxzX2FyZWEgPSAodm9pZCoqKV9fZ2V0X3RscygpOwotICAgIHVuc2lnbmVkKiAgIGVsZmRhdGEgICA9IHRsc19hcmVhW1RMU19TTE9UX0JJT05JQ19QUkVJTklUXTsKLQotICAgIHRsc19hcmVhW1RMU19TTE9UX0JJT05JQ19QUkVJTklUXSA9IE5VTEw7Ci0KLSAgICBfX2xpYmNfaW5pdF9jb21tb24oZWxmZGF0YSk7Ci0KLSAgICAvKiBTZXR1cCBtYWxsb2Mgcm91dGluZXMgYWNjb3JkaW5nbHkgdG8gdGhlIGVudmlyb25tZW50LgotICAgICAqIFJlcXVpcmVzIHN5c3RlbSBwcm9wZXJ0aWVzCi0gICAgICovCi0gICAgZXh0ZXJuIHZvaWQgbWFsbG9jX2RlYnVnX2luaXQodm9pZCk7Ci0gICAgbWFsbG9jX2RlYnVnX2luaXQoKTsKLX0KLQotLyogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSB0aGUgZXhlY3V0YWJsZSdzIF9zdGFydCBlbnRyeSBwb2ludAotICogKHNlZSBhcmNoLSRBUkNIL2Jpb25pYy9jcnRiZWdpbl9keW5hbWljLlMpLCB3aGljaCBpcyBpdHNlbGYKLSAqIGNhbGxlZCBieSB0aGUgZHluYW1pYyBsaW5rZXIgYWZ0ZXIgaXQgaGFzIGxvYWRlZCBhbGwgc2hhcmVkCi0gKiBsaWJyYXJpZXMgdGhlIGV4ZWN1dGFibGUgZGVwZW5kcyBvbi4KLSAqCi0gKiBOb3RlIHRoYXQgdGhlIGR5bmFtaWMgbGlua2VyIGhhcyBhbHNvIHJ1biBhbGwgY29uc3RydWN0b3JzIGluIHRoZQotICogZXhlY3V0YWJsZSBhdCB0aGlzIHBvaW50LgotICovCi1fX25vcmV0dXJuIHZvaWQgX19saWJjX2luaXQodWludHB0cl90ICplbGZkYXRhLAotICAgICAgICAgICAgICAgICAgICAgICB2b2lkICgqb25leGl0KSh2b2lkKSwKLSAgICAgICAgICAgICAgICAgICAgICAgaW50ICgqc2xpbmdzaG90KShpbnQsIGNoYXIqKiwgY2hhcioqKSwKLSAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0b3JzX2FycmF5X3QgY29uc3QgKiBjb25zdCBzdHJ1Y3RvcnMpCi17Ci0gICAgaW50ICAgICBhcmdjID0gKGludCkqZWxmZGF0YTsKLSAgICBjaGFyKiogIGFyZ3YgPSAoY2hhcioqKShlbGZkYXRhICsgMSk7Ci0gICAgY2hhcioqICBlbnZwID0gYXJndiArIGFyZ2MgKyAxOwotCi0gICAgLyogU2V2ZXJhbCBMaW51eCBBQklzIGRvbid0IHBhc3MgdGhlIG9uZXhpdCBwb2ludGVyLCBhbmQgdGhlIG9uZXMgdGhhdAotICAgICAqIGRvIG5ldmVyIHVzZSBpdC4gIFRoZXJlZm9yZSwgd2UgaWdub3JlIGl0LgotICAgICAqLwotCi0gICAgLyogVGhlIGV4ZWN1dGFibGUgbWF5IGhhdmUgaXRzIG93biBkZXN0cnVjdG9ycyBsaXN0ZWQgaW4gaXRzIC5maW5pX2FycmF5Ci0gICAgICogc28gd2UgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGVzZSBhcmUgY2FsbGVkIHdoZW4gdGhlIHByb2dyYW0gZXhpdHMKLSAgICAgKiBub3JtYWxseS4KLSAgICAgKi8KLSAgICBpZiAoc3RydWN0b3JzLT5maW5pX2FycmF5KQotICAgICAgICBfX2N4YV9hdGV4aXQoX19saWJjX2Zpbmksc3RydWN0b3JzLT5maW5pX2FycmF5LE5VTEwpOwotCi0gICAgZXhpdChzbGluZ3Nob3QoYXJnYywgYXJndiwgZW52cCkpOwotfQpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvbGliY19pbml0X2R5bmFtaWMuY3BwIGIvbGliYy9iaW9uaWMvbGliY19pbml0X2R5bmFtaWMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4ZTg3YTcKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2Jpb25pYy9saWJjX2luaXRfZHluYW1pYy5jcHAKQEAgLTAsMCArMSwxMTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKy8qCisgKiBsaWJjX2luaXRfZHluYW1pYy5jCisgKgorICogVGhpcyBzb3VyY2UgZmlsZXMgcHJvdmlkZXMgdHdvIGltcG9ydGFudCBmdW5jdGlvbnMgZm9yIGR5bmFtaWMKKyAqIGV4ZWN1dGFibGVzOgorICoKKyAqIC0gYSBDIHJ1bnRpbWUgaW5pdGlhbGl6ZXIgKF9fbGliY19wcmVpbml0KSwgd2hpY2ggaXMgY2FsbGVkIGJ5CisgKiAgIHRoZSBkeW5hbWljIGxpbmtlciB3aGVuIGxpYmMuc28gaXMgbG9hZGVkLiBUaGlzIGhhcHBlbnMgYmVmb3JlCisgKiAgIGFueSBvdGhlciBpbml0aWFsaXplciAoZS5nLiBzdGF0aWMgQysrIGNvbnN0cnVjdG9ycyBpbiBvdGhlcgorICogICBzaGFyZWQgbGlicmFyaWVzIHRoZSBwcm9ncmFtIGRlcGVuZHMgb24pLgorICoKKyAqIC0gYSBwcm9ncmFtIGxhdW5jaCBmdW5jdGlvbiAoX19saWJjX2luaXQpLCB3aGljaCBpcyBjYWxsZWQgYWZ0ZXIKKyAqICAgYWxsIGR5bmFtaWMgbGlua2luZyBoYXMgYmVlbiBwZXJmb3JtZWQuIFRlY2huaWNhbGx5LCBpdCBpcyBjYWxsZWQKKyAqICAgZnJvbSBhcmNoLSRBUkNIL2Jpb25pYy9jcnRiZWdpbl9keW5hbWljLlMgd2hpY2ggaXMgaXRzZWxmIGNhbGxlZAorICogICBieSB0aGUgZHluYW1pYyBsaW5rZXIgYWZ0ZXIgYWxsIGxpYnJhcmllcyBoYXZlIGJlZW4gbG9hZGVkIGFuZAorICogICBpbml0aWFsaXplZC4KKyAqLworCisjaW5jbHVkZSA8c3RkZGVmLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxlbGYuaD4KKyNpbmNsdWRlICJhdGV4aXQuaCIKKyNpbmNsdWRlICJLZXJuZWxBcmd1bWVudEJsb2NrLmgiCisjaW5jbHVkZSAibGliY19pbml0X2NvbW1vbi5oIgorI2luY2x1ZGUgPGJpb25pY190bHMuaD4KKworZXh0ZXJuICJDIiB7CisgIGV4dGVybiB2b2lkIHB0aHJlYWRfZGVidWdfaW5pdCh2b2lkKTsKKyAgZXh0ZXJuIHZvaWQgbWFsbG9jX2RlYnVnX2luaXQodm9pZCk7CisgIGV4dGVybiB2b2lkIG1hbGxvY19kZWJ1Z19maW5pKHZvaWQpOworfTsKKworLy8gV2UgZmxhZyB0aGUgX19saWJjX3ByZWluaXQgZnVuY3Rpb24gYXMgYSBjb25zdHJ1Y3RvciB0byBlbnN1cmUKKy8vIHRoYXQgaXRzIGFkZHJlc3MgaXMgbGlzdGVkIGluIGxpYmMuc28ncyAuaW5pdF9hcnJheSBzZWN0aW9uLgorLy8gVGhpcyBlbnN1cmVzIHRoYXQgdGhlIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSB0aGUgZHluYW1pYyBsaW5rZXIKKy8vIGFzIHNvb24gYXMgdGhlIHNoYXJlZCBsaWJyYXJ5IGlzIGxvYWRlZC4KK19fYXR0cmlidXRlX18oKGNvbnN0cnVjdG9yKSkgc3RhdGljIHZvaWQgX19saWJjX3ByZWluaXQoKSB7CisgIC8vIFJlYWQgdGhlIGtlcm5lbCBhcmd1bWVudCBibG9jayBwb2ludGVyIGZyb20gVExTLgorICB2b2lkKiB0bHMgPSBjb25zdF9jYXN0PHZvaWQqPihfX2dldF90bHMoKSk7CisgIEtlcm5lbEFyZ3VtZW50QmxvY2sqKiBhcmdzX3Nsb3QgPSAmcmVpbnRlcnByZXRfY2FzdDxLZXJuZWxBcmd1bWVudEJsb2NrKio+KHRscylbVExTX1NMT1RfQklPTklDX1BSRUlOSVRdOworICBLZXJuZWxBcmd1bWVudEJsb2NrKiBhcmdzID0gKmFyZ3Nfc2xvdDsKKworICAvLyBDbGVhciB0aGUgc2xvdCBzbyBubyBvdGhlciBpbml0aWFsaXplciBzZWVzIGl0cyB2YWx1ZS4KKyAgLy8gX19saWJjX2luaXRfY29tbW9uKCkgd2lsbCBjaGFuZ2UgdGhlIFRMUyBhcmVhIHNvIHRoZSBvbGQgb25lIHdvbid0IGJlIGFjY2Vzc2libGUgYW55d2F5LgorICAqYXJnc19zbG90ID0gTlVMTDsKKworICBfX2xpYmNfaW5pdF9jb21tb24oKmFyZ3MpOworCisgIC8vIEhvb2tzIGZvciB0aGUgZGVidWcgbWFsbG9jIGFuZCBwdGhyZWFkIGxpYnJhcmllcyB0byBsZXQgdGhlbSBrbm93IHRoYXQgd2UncmUgc3RhcnRpbmcgdXAuCisgIHB0aHJlYWRfZGVidWdfaW5pdCgpOworICBtYWxsb2NfZGVidWdfaW5pdCgpOworfQorCitfX0xJQkNfSElEREVOX18gdm9pZCBfX2xpYmNfcG9zdGZpbmkoKSB7CisgIC8vIEEgaG9vayBmb3IgdGhlIGRlYnVnIG1hbGxvYyBsaWJyYXJ5IHRvIGxldCBpdCBrbm93IHRoYXQgd2UncmUgc2h1dHRpbmcgZG93bi4KKyAgbWFsbG9jX2RlYnVnX2ZpbmkoKTsKK30KKworLy8gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSB0aGUgZXhlY3V0YWJsZSdzIF9zdGFydCBlbnRyeSBwb2ludAorLy8gKHNlZSBhcmNoLSRBUkNIL2Jpb25pYy9jcnRiZWdpbl9keW5hbWljLlMpLCB3aGljaCBpcyBpdHNlbGYKKy8vIGNhbGxlZCBieSB0aGUgZHluYW1pYyBsaW5rZXIgYWZ0ZXIgaXQgaGFzIGxvYWRlZCBhbGwgc2hhcmVkCisvLyBsaWJyYXJpZXMgdGhlIGV4ZWN1dGFibGUgZGVwZW5kcyBvbi4KKy8vCisvLyBOb3RlIHRoYXQgdGhlIGR5bmFtaWMgbGlua2VyIGhhcyBhbHNvIHJ1biBhbGwgY29uc3RydWN0b3JzIGluIHRoZQorLy8gZXhlY3V0YWJsZSBhdCB0aGlzIHBvaW50LgorX19ub3JldHVybiB2b2lkIF9fbGliY19pbml0KHZvaWQqIHJhd19hcmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCpvbmV4aXQpKHZvaWQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAoKnNsaW5nc2hvdCkoaW50LCBjaGFyKiosIGNoYXIqKiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0b3JzX2FycmF5X3QgY29uc3QgKiBjb25zdCBzdHJ1Y3RvcnMpIHsKKworICBLZXJuZWxBcmd1bWVudEJsb2NrIGFyZ3MocmF3X2FyZ3MpOworCisgIC8vIFNldmVyYWwgTGludXggQUJJcyBkb24ndCBwYXNzIHRoZSBvbmV4aXQgcG9pbnRlciwgYW5kIHRoZSBvbmVzIHRoYXQKKyAgLy8gZG8gbmV2ZXIgdXNlIGl0LiAgVGhlcmVmb3JlLCB3ZSBpZ25vcmUgaXQuCisKKyAgLy8gVGhlIGV4ZWN1dGFibGUgbWF5IGhhdmUgaXRzIG93biBkZXN0cnVjdG9ycyBsaXN0ZWQgaW4gaXRzIC5maW5pX2FycmF5CisgIC8vIHNvIHdlIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlc2UgYXJlIGNhbGxlZCB3aGVuIHRoZSBwcm9ncmFtIGV4aXRzCisgIC8vIG5vcm1hbGx5LgorICBpZiAoc3RydWN0b3JzLT5maW5pX2FycmF5KSB7CisgICAgX19jeGFfYXRleGl0KF9fbGliY19maW5pLHN0cnVjdG9ycy0+ZmluaV9hcnJheSxOVUxMKTsKKyAgfQorCisgIGV4aXQoc2xpbmdzaG90KGFyZ3MuYXJnYywgYXJncy5hcmd2LCBhcmdzLmVudnApKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL2xpYmNfaW5pdF9zdGF0aWMuYyBiL2xpYmMvYmlvbmljL2xpYmNfaW5pdF9zdGF0aWMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTJjMTFhOS4uMDAwMDAwMAotLS0gYS9saWJjL2Jpb25pYy9saWJjX2luaXRfc3RhdGljLmMKKysrIC9kZXYvbnVsbApAQCAtMSw5OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogICAgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUwotICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKLSAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCi0gKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKLSAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAotICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0gKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0vKgotICogbGliY19pbml0X3N0YXRpYy5jCi0gKgotICogVGhlIHByb2dyYW0gc3RhcnR1cCBmdW5jdGlvbiBfX2xpYmNfaW5pdCgpIGRlZmluZWQgaGVyZSBpcwotICogdXNlZCBmb3Igc3RhdGljIGV4ZWN1dGFibGVzIG9ubHkgKGkuZS4gdGhvc2UgdGhhdCBkb24ndCBkZXBlbmQKLSAqIG9uIHNoYXJlZCBsaWJyYXJpZXMpLiBJdCBpcyBjYWxsZWQgZnJvbSBhcmNoLSRBUkNIL2Jpb25pYy9jcnRiZWdpbl9zdGF0aWMuUwotICogd2hpY2ggaXMgZGlyZWN0bHkgaW52b2tlZCBieSB0aGUga2VybmVsIHdoZW4gdGhlIHByb2dyYW0gaXMgbGF1bmNoZWQuCi0gKgotICogVGhlICdzdHJ1Y3RvcnMnIHBhcmFtZXRlciBjb250YWlucyBwb2ludGVycyB0byB2YXJpb3VzIGluaXRpYWxpemVyCi0gKiBhcnJheXMgdGhhdCBtdXN0IGJlIHJ1biBiZWZvcmUgdGhlIHByb2dyYW0ncyAnbWFpbicgcm91dGluZSBpcyBsYXVuY2hlZC4KLSAqLwotCi0jaW5jbHVkZSA8c3RkZGVmLmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdGRpbnQuaD4KLSNpbmNsdWRlIDxlbGYuaD4KLSNpbmNsdWRlICJwdGhyZWFkX2ludGVybmFsLmgiCi0jaW5jbHVkZSAiYXRleGl0LmgiCi0jaW5jbHVkZSAibGliY19pbml0X2NvbW1vbi5oIgotCi0jaW5jbHVkZSA8YmlvbmljX3Rscy5oPgotI2luY2x1ZGUgPGVycm5vLmg+Ci0KLXN0YXRpYyB2b2lkIGNhbGxfYXJyYXkodm9pZCgqKmxpc3QpKCkpCi17Ci0gICAgLy8gRmlyc3QgZWxlbWVudCBpcyAtMSwgbGlzdCBpcyBudWxsLXRlcm1pbmF0ZWQKLSAgICB3aGlsZSAoKisrbGlzdCkgewotICAgICAgICAoKmxpc3QpKCk7Ci0gICAgfQotfQotCi1fX25vcmV0dXJuIHZvaWQgX19saWJjX2luaXQodWludHB0cl90ICplbGZkYXRhLAotICAgICAgICAgICAgICAgICAgICAgICB2b2lkICgqb25leGl0KSh2b2lkKSwKLSAgICAgICAgICAgICAgICAgICAgICAgaW50ICgqc2xpbmdzaG90KShpbnQsIGNoYXIqKiwgY2hhcioqKSwKLSAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0b3JzX2FycmF5X3QgY29uc3QgKiBjb25zdCBzdHJ1Y3RvcnMpCi17Ci0gICAgaW50ICBhcmdjOwotICAgIGNoYXIgKiphcmd2LCAqKmVudnA7Ci0KLSAgICAvKiBJbml0aWFsaXplIHRoZSBDIHJ1bnRpbWUgZW52aXJvbm1lbnQgKi8KLSAgICBfX2xpYmNfaW5pdF9jb21tb24oZWxmZGF0YSk7Ci0KLSAgICAvKiBTZXZlcmFsIExpbnV4IEFCSXMgZG9uJ3QgcGFzcyB0aGUgb25leGl0IHBvaW50ZXIsIGFuZCB0aGUgb25lcyB0aGF0Ci0gICAgICogZG8gbmV2ZXIgdXNlIGl0LiAgVGhlcmVmb3JlLCB3ZSBpZ25vcmUgaXQuCi0gICAgICovCi0KLSAgICAvKiBwcmUtaW5pdCBhcnJheS4gKi8KLSAgICBjYWxsX2FycmF5KHN0cnVjdG9ycy0+cHJlaW5pdF9hcnJheSk7Ci0KLSNpZm5kZWYgX19pMzg2X18KLSAgICAvKiAuY3RvcnMgc2VjdGlvbiBpbml0aWFsaXplcnMsIGZvciBub24tYXJtLWVhYmkgQUJJcyAqLwotICAgIGNhbGxfYXJyYXkoc3RydWN0b3JzLT5jdG9yc19hcnJheSk7Ci0jZW5kaWYKLQotICAgIC8vIGNhbGwgc3RhdGljIGNvbnN0cnVjdG9ycwotICAgIGNhbGxfYXJyYXkoc3RydWN0b3JzLT5pbml0X2FycmF5KTsKLQotICAgIGFyZ2MgPSAoaW50KSAqZWxmZGF0YTsKLSAgICBhcmd2ID0gKGNoYXIqKikoZWxmZGF0YSArIDEpOwotICAgIGVudnAgPSBhcmd2ICsgYXJnYyArIDE7Ci0KLSAgICAvKiBUaGUgZXhlY3V0YWJsZSBtYXkgaGF2ZSBpdHMgb3duIGRlc3RydWN0b3JzIGxpc3RlZCBpbiBpdHMgLmZpbmlfYXJyYXkKLSAgICAgKiBzbyB3ZSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZXNlIGFyZSBjYWxsZWQgd2hlbiB0aGUgcHJvZ3JhbSBleGl0cwotICAgICAqIG5vcm1hbGx5LgotICAgICAqLwotICAgIGlmIChzdHJ1Y3RvcnMtPmZpbmlfYXJyYXkpCi0gICAgICAgIF9fY3hhX2F0ZXhpdChfX2xpYmNfZmluaSxzdHJ1Y3RvcnMtPmZpbmlfYXJyYXksTlVMTCk7Ci0KLSAgICBleGl0KHNsaW5nc2hvdChhcmdjLCBhcmd2LCBlbnZwKSk7Ci19CmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9saWJjX2luaXRfc3RhdGljLmNwcCBiL2xpYmMvYmlvbmljL2xpYmNfaW5pdF9zdGF0aWMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2YjIwZWIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2Jpb25pYy9saWJjX2luaXRfc3RhdGljLmNwcApAQCAtMCwwICsxLDExMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworLyoKKyAqIGxpYmNfaW5pdF9zdGF0aWMuYworICoKKyAqIFRoZSBwcm9ncmFtIHN0YXJ0dXAgZnVuY3Rpb24gX19saWJjX2luaXQoKSBkZWZpbmVkIGhlcmUgaXMKKyAqIHVzZWQgZm9yIHN0YXRpYyBleGVjdXRhYmxlcyBvbmx5IChpLmUuIHRob3NlIHRoYXQgZG9uJ3QgZGVwZW5kCisgKiBvbiBzaGFyZWQgbGlicmFyaWVzKS4gSXQgaXMgY2FsbGVkIGZyb20gYXJjaC0kQVJDSC9iaW9uaWMvY3J0YmVnaW5fc3RhdGljLlMKKyAqIHdoaWNoIGlzIGRpcmVjdGx5IGludm9rZWQgYnkgdGhlIGtlcm5lbCB3aGVuIHRoZSBwcm9ncmFtIGlzIGxhdW5jaGVkLgorICoKKyAqIFRoZSAnc3RydWN0b3JzJyBwYXJhbWV0ZXIgY29udGFpbnMgcG9pbnRlcnMgdG8gdmFyaW91cyBpbml0aWFsaXplcgorICogYXJyYXlzIHRoYXQgbXVzdCBiZSBydW4gYmVmb3JlIHRoZSBwcm9ncmFtJ3MgJ21haW4nIHJvdXRpbmUgaXMgbGF1bmNoZWQuCisgKi8KKworI2luY2x1ZGUgPGVsZi5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3RkZGVmLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzeXMvYXV4di5oPgorI2luY2x1ZGUgPHN5cy9tbWFuLmg+CisKKyNpbmNsdWRlICJhdGV4aXQuaCIKKyNpbmNsdWRlICJiaW9uaWNfdGxzLmgiCisjaW5jbHVkZSAiS2VybmVsQXJndW1lbnRCbG9jay5oIgorI2luY2x1ZGUgImxpYmNfaW5pdF9jb21tb24uaCIKKyNpbmNsdWRlICJwdGhyZWFkX2ludGVybmFsLmgiCisKKy8vIFJldHVybnMgdGhlIGFkZHJlc3Mgb2YgdGhlIHBhZ2UgY29udGFpbmluZyBhZGRyZXNzICd4Jy4KKyNkZWZpbmUgUEFHRV9TVEFSVCh4KSAgKCh4KSAmIFBBR0VfTUFTSykKKworLy8gUmV0dXJucyB0aGUgYWRkcmVzcyBvZiB0aGUgbmV4dCBwYWdlIGFmdGVyIGFkZHJlc3MgJ3gnLCB1bmxlc3MgJ3gnIGlzCisvLyBpdHNlbGYgYXQgdGhlIHN0YXJ0IG9mIGEgcGFnZS4KKyNkZWZpbmUgUEFHRV9FTkQoeCkgICAgUEFHRV9TVEFSVCgoeCkgKyAoUEFHRV9TSVpFLTEpKQorCitzdGF0aWMgdm9pZCBjYWxsX2FycmF5KHZvaWQoKipsaXN0KSgpKSB7CisgIC8vIEZpcnN0IGVsZW1lbnQgaXMgLTEsIGxpc3QgaXMgbnVsbC10ZXJtaW5hdGVkCisgIHdoaWxlICgqKytsaXN0KSB7CisgICAgKCpsaXN0KSgpOworICB9Cit9CisKK3N0YXRpYyB2b2lkIGFwcGx5X2dudV9yZWxybygpIHsKKyAgRWxmMzJfUGhkciogcGhkcl9zdGFydCA9IHJlaW50ZXJwcmV0X2Nhc3Q8RWxmMzJfUGhkcio+KGdldGF1eHZhbChBVF9QSERSKSk7CisgIHVuc2lnbmVkIGxvbmcgaW50IHBoZHJfY3QgPSBnZXRhdXh2YWwoQVRfUEhOVU0pOworCisgIGZvciAoRWxmMzJfUGhkciogcGhkciA9IHBoZHJfc3RhcnQ7IHBoZHIgPCAocGhkcl9zdGFydCArIHBoZHJfY3QpOyBwaGRyKyspIHsKKyAgICBpZiAocGhkci0+cF90eXBlICE9IFBUX0dOVV9SRUxSTykgeworICAgICAgY29udGludWU7CisgICAgfQorCisgICAgRWxmMzJfQWRkciBzZWdfcGFnZV9zdGFydCA9IFBBR0VfU1RBUlQocGhkci0+cF92YWRkcik7CisgICAgRWxmMzJfQWRkciBzZWdfcGFnZV9lbmQgPSBQQUdFX0VORChwaGRyLT5wX3ZhZGRyICsgcGhkci0+cF9tZW1zeik7CisKKyAgICAvLyBDaGVjayByZXR1cm4gdmFsdWUgaGVyZT8gV2hhdCBkbyB3ZSBkbyBpZiB3ZSBmYWlsPworICAgIG1wcm90ZWN0KHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHNlZ19wYWdlX3N0YXJ0KSwgc2VnX3BhZ2VfZW5kIC0gc2VnX3BhZ2Vfc3RhcnQsIFBST1RfUkVBRCk7CisgIH0KK30KKworX19ub3JldHVybiB2b2lkIF9fbGliY19pbml0KHZvaWQqIHJhd19hcmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCpvbmV4aXQpKHZvaWQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAoKnNsaW5nc2hvdCkoaW50LCBjaGFyKiosIGNoYXIqKiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0b3JzX2FycmF5X3QgY29uc3QgKiBjb25zdCBzdHJ1Y3RvcnMpIHsKKyAgS2VybmVsQXJndW1lbnRCbG9jayBhcmdzKHJhd19hcmdzKTsKKyAgX19saWJjX2luaXRfdGxzKGFyZ3MpOworICBfX2xpYmNfaW5pdF9jb21tb24oYXJncyk7CisKKyAgYXBwbHlfZ251X3JlbHJvKCk7CisKKyAgLy8gU2V2ZXJhbCBMaW51eCBBQklzIGRvbid0IHBhc3MgdGhlIG9uZXhpdCBwb2ludGVyLCBhbmQgdGhlIG9uZXMgdGhhdAorICAvLyBkbyBuZXZlciB1c2UgaXQuICBUaGVyZWZvcmUsIHdlIGlnbm9yZSBpdC4KKworICBjYWxsX2FycmF5KHN0cnVjdG9ycy0+cHJlaW5pdF9hcnJheSk7CisgIGNhbGxfYXJyYXkoc3RydWN0b3JzLT5pbml0X2FycmF5KTsKKworICAvLyBUaGUgZXhlY3V0YWJsZSBtYXkgaGF2ZSBpdHMgb3duIGRlc3RydWN0b3JzIGxpc3RlZCBpbiBpdHMgLmZpbmlfYXJyYXkKKyAgLy8gc28gd2UgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGVzZSBhcmUgY2FsbGVkIHdoZW4gdGhlIHByb2dyYW0gZXhpdHMKKyAgLy8gbm9ybWFsbHkuCisgIGlmIChzdHJ1Y3RvcnMtPmZpbmlfYXJyYXkgIT0gTlVMTCkgeworICAgIF9fY3hhX2F0ZXhpdChfX2xpYmNfZmluaSxzdHJ1Y3RvcnMtPmZpbmlfYXJyYXksTlVMTCk7CisgIH0KKworICBleGl0KHNsaW5nc2hvdChhcmdzLmFyZ2MsIGFyZ3MuYXJndiwgYXJncy5lbnZwKSk7Cit9CmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9saWJjX2xvZ2dpbmcuY3BwIGIvbGliYy9iaW9uaWMvbGliY19sb2dnaW5nLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YmY3NDE1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9iaW9uaWMvbGliY19sb2dnaW5nLmNwcApAQCAtMCwwICsxLDUzNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8Li4vcHJpdmF0ZS9saWJjX2xvZ2dpbmcuaD4gLy8gUmVsYXRpdmUgcGF0aCBzbyB3ZSBjYW4gI2luY2x1ZGUgdGhpcyAuY3BwIGZpbGUgZm9yIHRlc3RpbmcuCisjaW5jbHVkZSA8Li4vcHJpdmF0ZS9TY29wZWRQdGhyZWFkTXV0ZXhMb2NrZXIuaD4KKworI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxwdGhyZWFkLmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8c3RkZGVmLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3lzL21tYW4uaD4KKyNpbmNsdWRlIDxzeXMvdWlvLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKK3N0YXRpYyBwdGhyZWFkX211dGV4X3QgZ0Fib3J0TXNnTG9jayA9IFBUSFJFQURfTVVURVhfSU5JVElBTElaRVI7CisKK19fTElCQ19ISURERU5fXyBhYm9ydF9tc2dfdCoqIF9fYWJvcnRfbWVzc2FnZV9wdHI7IC8vIEFjY2Vzc2libGUgdG8gX19saWJjX2luaXRfY29tbW9uLgorCisvLyBNdXN0IGJlIGtlcHQgaW4gc3luYyB3aXRoIGZyYW1ld29ya3MvYmFzZS9jb3JlL2phdmEvYW5kcm9pZC91dGlsL0V2ZW50TG9nLmphdmEuCitlbnVtIEFuZHJvaWRFdmVudExvZ1R5cGUgeworICBFVkVOVF9UWVBFX0lOVCAgICAgID0gMCwKKyAgRVZFTlRfVFlQRV9MT05HICAgICA9IDEsCisgIEVWRU5UX1RZUEVfU1RSSU5HICAgPSAyLAorICBFVkVOVF9UWVBFX0xJU1QgICAgID0gMywKK307CisKK3N0cnVjdCBCdWZmZXJPdXRwdXRTdHJlYW0geworIHB1YmxpYzoKKyAgQnVmZmVyT3V0cHV0U3RyZWFtKGNoYXIqIGJ1ZmZlciwgc2l6ZV90IHNpemUpIDogdG90YWwoMCkgeworICAgIGJ1ZmZlcl8gPSBidWZmZXI7CisgICAgZW5kXyA9IGJ1ZmZlciArIHNpemUgLSAxOworICAgIHBvc18gPSBidWZmZXJfOworICAgIHBvc19bMF0gPSAnXDAnOworICB9CisKKyAgfkJ1ZmZlck91dHB1dFN0cmVhbSgpIHsKKyAgfQorCisgIHZvaWQgU2VuZChjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuKSB7CisgICAgaWYgKGxlbiA8IDApIHsKKyAgICAgIGxlbiA9IHN0cmxlbihkYXRhKTsKKyAgICB9CisKKyAgICB3aGlsZSAobGVuID4gMCkgeworICAgICAgaW50IGF2YWlsID0gZW5kXyAtIHBvc187CisgICAgICBpZiAoYXZhaWwgPT0gMCkgeworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIGlmIChhdmFpbCA+IGxlbikgeworICAgICAgICBhdmFpbCA9IGxlbjsKKyAgICAgIH0KKyAgICAgIG1lbWNweShwb3NfLCBkYXRhLCBhdmFpbCk7CisgICAgICBwb3NfICs9IGF2YWlsOworICAgICAgcG9zX1swXSA9ICdcMCc7CisgICAgICBsZW4gLT0gYXZhaWw7CisgICAgICB0b3RhbCArPSBhdmFpbDsKKyAgICB9CisgIH0KKworICBpbnQgdG90YWw7CisKKyBwcml2YXRlOgorICBjaGFyKiBidWZmZXJfOworICBjaGFyKiBwb3NfOworICBjaGFyKiBlbmRfOworfTsKKworc3RydWN0IEZkT3V0cHV0U3RyZWFtIHsKKyBwdWJsaWM6CisgIEZkT3V0cHV0U3RyZWFtKGludCBmZCkgOiB0b3RhbCgwKSwgZmRfKGZkKSB7CisgIH0KKworICB2b2lkIFNlbmQoY29uc3QgY2hhciogZGF0YSwgaW50IGxlbikgeworICAgIGlmIChsZW4gPCAwKSB7CisgICAgICBsZW4gPSBzdHJsZW4oZGF0YSk7CisgICAgfQorCisgICAgd2hpbGUgKGxlbiA+IDApIHsKKyAgICAgIGludCByYyA9IFRFTVBfRkFJTFVSRV9SRVRSWSh3cml0ZShmZF8sIGRhdGEsIGxlbikpOworICAgICAgaWYgKHJjID09IC0xKSB7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgZGF0YSArPSByYzsKKyAgICAgIGxlbiAtPSByYzsKKyAgICAgIHRvdGFsICs9IHJjOworICAgIH0KKyAgfQorCisgIGludCB0b3RhbDsKKworIHByaXZhdGU6CisgIGludCBmZF87Cit9OworCisvKioqIGZvcm1hdHRlZCBvdXRwdXQgaW1wbGVtZW50YXRpb24KKyAqKiovCisKKy8qIFBhcnNlIGEgZGVjaW1hbCBzdHJpbmcgZnJvbSAnZm9ybWF0ICsgKnBwb3MnLAorICogcmV0dXJuIHRoZSB2YWx1ZSwgYW5kIHdyaXRlcyB0aGUgbmV3IHBvc2l0aW9uIHBhc3QKKyAqIHRoZSBkZWNpbWFsIHN0cmluZyBpbiAnKnBwb3MnIG9uIGV4aXQuCisgKgorICogTk9URTogRG9lcyAqbm90KiBoYW5kbGUgYSBzaWduIHByZWZpeC4KKyAqLworc3RhdGljIHVuc2lnbmVkIHBhcnNlX2RlY2ltYWwoY29uc3QgY2hhciAqZm9ybWF0LCBpbnQgKnBwb3MpIHsKKyAgICBjb25zdCBjaGFyKiBwID0gZm9ybWF0ICsgKnBwb3M7CisgICAgdW5zaWduZWQgcmVzdWx0ID0gMDsKKworICAgIGZvciAoOzspIHsKKyAgICAgICAgaW50IGNoID0gKnA7CisgICAgICAgIHVuc2lnbmVkIGQgPSAodW5zaWduZWQpKGNoIC0gJzAnKTsKKworICAgICAgICBpZiAoZCA+PSAxMFUpIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgcmVzdWx0ID0gcmVzdWx0KjEwICsgZDsKKyAgICAgICAgcCsrOworICAgIH0KKyAgICAqcHBvcyA9IHAgLSBmb3JtYXQ7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworLy8gV3JpdGVzIG51bWJlciAndmFsdWUnIGluIGJhc2UgJ2Jhc2UnIGludG8gYnVmZmVyICdidWYnIG9mIHNpemUgJ2J1Zl9zaXplJyBieXRlcy4KKy8vIEFzc3VtZXMgdGhhdCBidWZfc2l6ZSA+IDAuCitzdGF0aWMgdm9pZCBmb3JtYXRfdW5zaWduZWQoY2hhciogYnVmLCBzaXplX3QgYnVmX3NpemUsIHVpbnQ2NF90IHZhbHVlLCBpbnQgYmFzZSwgYm9vbCBjYXBzKSB7CisgIGNoYXIqIHAgPSBidWY7CisgIGNoYXIqIGVuZCA9IGJ1ZiArIGJ1Zl9zaXplIC0gMTsKKworICAvLyBHZW5lcmF0ZSBkaWdpdCBzdHJpbmcgaW4gcmV2ZXJzZSBvcmRlci4KKyAgd2hpbGUgKHZhbHVlKSB7CisgICAgdW5zaWduZWQgZCA9IHZhbHVlICUgYmFzZTsKKyAgICB2YWx1ZSAvPSBiYXNlOworICAgIGlmIChwICE9IGVuZCkgeworICAgICAgY2hhciBjaDsKKyAgICAgIGlmIChkIDwgMTApIHsKKyAgICAgICAgY2ggPSAnMCcgKyBkOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgY2ggPSAoY2FwcyA/ICdBJyA6ICdhJykgKyAoZCAtIDEwKTsKKyAgICAgIH0KKyAgICAgICpwKysgPSBjaDsKKyAgICB9CisgIH0KKworICAvLyBTcGVjaWFsIGNhc2UgZm9yIDAuCisgIGlmIChwID09IGJ1ZikgeworICAgIGlmIChwICE9IGVuZCkgeworICAgICAgKnArKyA9ICcwJzsKKyAgICB9CisgIH0KKyAgKnAgPSAnXDAnOworCisgIC8vIFJldmVyc2UgZGlnaXQgc3RyaW5nIGluLXBsYWNlLgorICBzaXplX3QgbGVuZ3RoID0gcCAtIGJ1ZjsKKyAgZm9yIChzaXplX3QgaSA9IDAsIGogPSBsZW5ndGggLSAxOyBpIDwgajsgKytpLCAtLWopIHsKKyAgICBjaGFyIGNoID0gYnVmW2ldOworICAgIGJ1ZltpXSA9IGJ1ZltqXTsKKyAgICBidWZbal0gPSBjaDsKKyAgfQorfQorCitzdGF0aWMgdm9pZCBmb3JtYXRfaW50ZWdlcihjaGFyKiBidWYsIHNpemVfdCBidWZfc2l6ZSwgdWludDY0X3QgdmFsdWUsIGNoYXIgY29udmVyc2lvbikgeworICAvLyBEZWNvZGUgdGhlIGNvbnZlcnNpb24gc3BlY2lmaWVyLgorICBpbnQgaXNfc2lnbmVkID0gKGNvbnZlcnNpb24gPT0gJ2QnIHx8IGNvbnZlcnNpb24gPT0gJ2knIHx8IGNvbnZlcnNpb24gPT0gJ28nKTsKKyAgaW50IGJhc2UgPSAxMDsKKyAgaWYgKGNvbnZlcnNpb24gPT0gJ3gnIHx8IGNvbnZlcnNpb24gPT0gJ1gnKSB7CisgICAgYmFzZSA9IDE2OworICB9IGVsc2UgaWYgKGNvbnZlcnNpb24gPT0gJ28nKSB7CisgICAgYmFzZSA9IDg7CisgIH0KKyAgYm9vbCBjYXBzID0gKGNvbnZlcnNpb24gPT0gJ1gnKTsKKworICBpZiAoaXNfc2lnbmVkICYmIHN0YXRpY19jYXN0PGludDY0X3Q+KHZhbHVlKSA8IDApIHsKKyAgICBidWZbMF0gPSAnLSc7CisgICAgYnVmICs9IDE7CisgICAgYnVmX3NpemUgLT0gMTsKKyAgICB2YWx1ZSA9IHN0YXRpY19jYXN0PHVpbnQ2NF90Pigtc3RhdGljX2Nhc3Q8aW50NjRfdD4odmFsdWUpKTsKKyAgfQorICBmb3JtYXRfdW5zaWduZWQoYnVmLCBidWZfc2l6ZSwgdmFsdWUsIGJhc2UsIGNhcHMpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgT3V0Pgorc3RhdGljIHZvaWQgU2VuZFJlcGVhdChPdXQmIG8sIGNoYXIgY2gsIGludCBjb3VudCkgeworICBjaGFyIHBhZFs4XTsKKyAgbWVtc2V0KHBhZCwgY2gsIHNpemVvZihwYWQpKTsKKworICBjb25zdCBpbnQgcGFkX3NpemUgPSBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihwYWQpKTsKKyAgd2hpbGUgKGNvdW50ID4gMCkgeworICAgIGludCBhdmFpbCA9IGNvdW50OworICAgIGlmIChhdmFpbCA+IHBhZF9zaXplKSB7CisgICAgICBhdmFpbCA9IHBhZF9zaXplOworICAgIH0KKyAgICBvLlNlbmQocGFkLCBhdmFpbCk7CisgICAgY291bnQgLT0gYXZhaWw7CisgIH0KK30KKworLyogUGVyZm9ybSBmb3JtYXR0ZWQgb3V0cHV0IHRvIGFuIG91dHB1dCB0YXJnZXQgJ28nICovCit0ZW1wbGF0ZSA8dHlwZW5hbWUgT3V0Pgorc3RhdGljIHZvaWQgb3V0X3Zmb3JtYXQoT3V0JiBvLCBjb25zdCBjaGFyKiBmb3JtYXQsIHZhX2xpc3QgYXJncykgeworICAgIGludCBubiA9IDA7CisKKyAgICBmb3IgKDs7KSB7CisgICAgICAgIGludCBtbTsKKyAgICAgICAgaW50IHBhZFplcm8gPSAwOworICAgICAgICBpbnQgcGFkTGVmdCA9IDA7CisgICAgICAgIGNoYXIgc2lnbiA9ICdcMCc7CisgICAgICAgIGludCB3aWR0aCA9IC0xOworICAgICAgICBpbnQgcHJlYyAgPSAtMTsKKyAgICAgICAgc2l6ZV90IGJ5dGVsZW4gPSBzaXplb2YoaW50KTsKKyAgICAgICAgaW50IHNsZW47CisgICAgICAgIGNoYXIgYnVmZmVyWzMyXTsgIC8qIHRlbXBvcmFyeSBidWZmZXIgdXNlZCB0byBmb3JtYXQgbnVtYmVycyAqLworCisgICAgICAgIGNoYXIgIGM7CisKKyAgICAgICAgLyogZmlyc3QsIGZpbmQgYWxsIGNoYXJhY3RlcnMgdGhhdCBhcmUgbm90IDAgb3IgJyUnICovCisgICAgICAgIC8qIHRoZW4gc2VuZCB0aGVtIHRvIHRoZSBvdXRwdXQgZGlyZWN0bHkgKi8KKyAgICAgICAgbW0gPSBubjsKKyAgICAgICAgZG8geworICAgICAgICAgICAgYyA9IGZvcm1hdFttbV07CisgICAgICAgICAgICBpZiAoYyA9PSAnXDAnIHx8IGMgPT0gJyUnKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgbW0rKzsKKyAgICAgICAgfSB3aGlsZSAoMSk7CisKKyAgICAgICAgaWYgKG1tID4gbm4pIHsKKyAgICAgICAgICAgIG8uU2VuZChmb3JtYXQrbm4sIG1tLW5uKTsKKyAgICAgICAgICAgIG5uID0gbW07CisgICAgICAgIH0KKworICAgICAgICAvKiBpcyB0aGlzIGl0ID8gdGhlbiBleGl0ICovCisgICAgICAgIGlmIChjID09ICdcMCcpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAvKiBub3BlLCB3ZSBhcmUgYXQgYSAnJScgbW9kaWZpZXIgKi8KKyAgICAgICAgbm4rKzsgIC8vIHNraXAgaXQKKworICAgICAgICAvKiBwYXJzZSBmbGFncyAqLworICAgICAgICBmb3IgKDs7KSB7CisgICAgICAgICAgICBjID0gZm9ybWF0W25uKytdOworICAgICAgICAgICAgaWYgKGMgPT0gJ1wwJykgeyAgLyogc2luZ2xlIHRyYWlsaW5nICclJyA/ICovCisgICAgICAgICAgICAgICAgYyA9ICclJzsKKyAgICAgICAgICAgICAgICBvLlNlbmQoJmMsIDEpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKGMgPT0gJzAnKSB7CisgICAgICAgICAgICAgICAgcGFkWmVybyA9IDE7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChjID09ICctJykgeworICAgICAgICAgICAgICAgIHBhZExlZnQgPSAxOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoYyA9PSAnICcgfHwgYyA9PSAnKycpIHsKKyAgICAgICAgICAgICAgICBzaWduID0gYzsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgLyogcGFyc2UgZmllbGQgd2lkdGggKi8KKyAgICAgICAgaWYgKChjID49ICcwJyAmJiBjIDw9ICc5JykpIHsKKyAgICAgICAgICAgIG5uIC0tOworICAgICAgICAgICAgd2lkdGggPSAoaW50KXBhcnNlX2RlY2ltYWwoZm9ybWF0LCAmbm4pOworICAgICAgICAgICAgYyA9IGZvcm1hdFtubisrXTsKKyAgICAgICAgfQorCisgICAgICAgIC8qIHBhcnNlIHByZWNpc2lvbiAqLworICAgICAgICBpZiAoYyA9PSAnLicpIHsKKyAgICAgICAgICAgIHByZWMgPSAoaW50KXBhcnNlX2RlY2ltYWwoZm9ybWF0LCAmbm4pOworICAgICAgICAgICAgYyA9IGZvcm1hdFtubisrXTsKKyAgICAgICAgfQorCisgICAgICAgIC8qIGxlbmd0aCBtb2RpZmllciAqLworICAgICAgICBzd2l0Y2ggKGMpIHsKKyAgICAgICAgY2FzZSAnaCc6CisgICAgICAgICAgICBieXRlbGVuID0gc2l6ZW9mKHNob3J0KTsKKyAgICAgICAgICAgIGlmIChmb3JtYXRbbm5dID09ICdoJykgeworICAgICAgICAgICAgICAgIGJ5dGVsZW4gPSBzaXplb2YoY2hhcik7CisgICAgICAgICAgICAgICAgbm4gKz0gMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGMgPSBmb3JtYXRbbm4rK107CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAnbCc6CisgICAgICAgICAgICBieXRlbGVuID0gc2l6ZW9mKGxvbmcpOworICAgICAgICAgICAgaWYgKGZvcm1hdFtubl0gPT0gJ2wnKSB7CisgICAgICAgICAgICAgICAgYnl0ZWxlbiA9IHNpemVvZihsb25nIGxvbmcpOworICAgICAgICAgICAgICAgIG5uICs9IDE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjID0gZm9ybWF0W25uKytdOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ3onOgorICAgICAgICAgICAgYnl0ZWxlbiA9IHNpemVvZihzaXplX3QpOworICAgICAgICAgICAgYyA9IGZvcm1hdFtubisrXTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICd0JzoKKyAgICAgICAgICAgIGJ5dGVsZW4gPSBzaXplb2YocHRyZGlmZl90KTsKKyAgICAgICAgICAgIGMgPSBmb3JtYXRbbm4rK107CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIDsKKyAgICAgICAgfQorCisgICAgICAgIC8qIGNvbnZlcnNpb24gc3BlY2lmaWVyICovCisgICAgICAgIGNvbnN0IGNoYXIqIHN0ciA9IGJ1ZmZlcjsKKyAgICAgICAgaWYgKGMgPT0gJ3MnKSB7CisgICAgICAgICAgICAvKiBzdHJpbmcgKi8KKyAgICAgICAgICAgIHN0ciA9IHZhX2FyZyhhcmdzLCBjb25zdCBjaGFyKik7CisgICAgICAgICAgICBpZiAoc3RyID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBzdHIgPSAiKG51bGwpIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChjID09ICdjJykgeworICAgICAgICAgICAgLyogY2hhcmFjdGVyICovCisgICAgICAgICAgICAvKiBOT1RFOiBjaGFyIGlzIHByb21vdGVkIHRvIGludCB3aGVuIHBhc3NlZCB0aHJvdWdoIHRoZSBzdGFjayAqLworICAgICAgICAgICAgYnVmZmVyWzBdID0gKGNoYXIpIHZhX2FyZyhhcmdzLCBpbnQpOworICAgICAgICAgICAgYnVmZmVyWzFdID0gJ1wwJzsKKyAgICAgICAgfSBlbHNlIGlmIChjID09ICdwJykgeworICAgICAgICAgICAgdWludDY0X3QgIHZhbHVlID0gKHVpbnRwdHJfdCkgdmFfYXJnKGFyZ3MsIHZvaWQqKTsKKyAgICAgICAgICAgIGJ1ZmZlclswXSA9ICcwJzsKKyAgICAgICAgICAgIGJ1ZmZlclsxXSA9ICd4JzsKKyAgICAgICAgICAgIGZvcm1hdF9pbnRlZ2VyKGJ1ZmZlciArIDIsIHNpemVvZihidWZmZXIpIC0gMiwgdmFsdWUsICd4Jyk7CisgICAgICAgIH0gZWxzZSBpZiAoYyA9PSAnZCcgfHwgYyA9PSAnaScgfHwgYyA9PSAnbycgfHwgYyA9PSAndScgfHwgYyA9PSAneCcgfHwgYyA9PSAnWCcpIHsKKyAgICAgICAgICAgIC8qIGludGVnZXJzIC0gZmlyc3QgcmVhZCB2YWx1ZSBmcm9tIHN0YWNrICovCisgICAgICAgICAgICB1aW50NjRfdCB2YWx1ZTsKKyAgICAgICAgICAgIGludCBpc19zaWduZWQgPSAoYyA9PSAnZCcgfHwgYyA9PSAnaScgfHwgYyA9PSAnbycpOworCisgICAgICAgICAgICAvKiBOT1RFOiBpbnQ4X3QgYW5kIGludDE2X3QgYXJlIHByb21vdGVkIHRvIGludCB3aGVuIHBhc3NlZAorICAgICAgICAgICAgICogICAgICAgdGhyb3VnaCB0aGUgc3RhY2sKKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgc3dpdGNoIChieXRlbGVuKSB7CisgICAgICAgICAgICBjYXNlIDE6IHZhbHVlID0gKHVpbnQ4X3QpICB2YV9hcmcoYXJncywgaW50KTsgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDI6IHZhbHVlID0gKHVpbnQxNl90KSB2YV9hcmcoYXJncywgaW50KTsgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDQ6IHZhbHVlID0gdmFfYXJnKGFyZ3MsIHVpbnQzMl90KTsgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDg6IHZhbHVlID0gdmFfYXJnKGFyZ3MsIHVpbnQ2NF90KTsgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OiByZXR1cm47ICAvKiBzaG91bGQgbm90IGhhcHBlbiAqLworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvKiBzaWduIGV4dGVuc2lvbiwgaWYgbmVlZGVkICovCisgICAgICAgICAgICBpZiAoaXNfc2lnbmVkKSB7CisgICAgICAgICAgICAgICAgaW50IHNoaWZ0ID0gNjQgLSA4KmJ5dGVsZW47CisgICAgICAgICAgICAgICAgdmFsdWUgPSAodWludDY0X3QpKCgoaW50NjRfdCkodmFsdWUgPDwgc2hpZnQpKSA+PiBzaGlmdCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8qIGZvcm1hdCB0aGUgbnVtYmVyIHByb3Blcmx5IGludG8gb3VyIGJ1ZmZlciAqLworICAgICAgICAgICAgZm9ybWF0X2ludGVnZXIoYnVmZmVyLCBzaXplb2YoYnVmZmVyKSwgdmFsdWUsIGMpOworICAgICAgICB9IGVsc2UgaWYgKGMgPT0gJyUnKSB7CisgICAgICAgICAgICBidWZmZXJbMF0gPSAnJSc7CisgICAgICAgICAgICBidWZmZXJbMV0gPSAnXDAnOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgX19hc3NlcnQoX19GSUxFX18sIF9fTElORV9fLCAiY29udmVyc2lvbiBzcGVjaWZpZXIgdW5zdXBwb3J0ZWQiKTsKKyAgICAgICAgfQorCisgICAgICAgIC8qIGlmIHdlIGFyZSBoZXJlLCAnc3RyJyBwb2ludHMgdG8gdGhlIGNvbnRlbnQgdGhhdCBtdXN0IGJlCisgICAgICAgICAqIG91dHB1dHRlZC4gaGFuZGxlIHBhZGRpbmcgYW5kIGFsaWdubWVudCBub3cgKi8KKworICAgICAgICBzbGVuID0gc3RybGVuKHN0cik7CisKKyAgICAgICAgaWYgKHNpZ24gIT0gJ1wwJyB8fCBwcmVjICE9IC0xKSB7CisgICAgICAgICAgICBfX2Fzc2VydChfX0ZJTEVfXywgX19MSU5FX18sICJzaWduL3ByZWNpc2lvbiB1bnN1cHBvcnRlZCIpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHNsZW4gPCB3aWR0aCAmJiAhcGFkTGVmdCkgeworICAgICAgICAgICAgY2hhciBwYWRDaGFyID0gcGFkWmVybyA/ICcwJyA6ICcgJzsKKyAgICAgICAgICAgIFNlbmRSZXBlYXQobywgcGFkQ2hhciwgd2lkdGggLSBzbGVuKTsKKyAgICAgICAgfQorCisgICAgICAgIG8uU2VuZChzdHIsIHNsZW4pOworCisgICAgICAgIGlmIChzbGVuIDwgd2lkdGggJiYgcGFkTGVmdCkgeworICAgICAgICAgICAgY2hhciBwYWRDaGFyID0gcGFkWmVybyA/ICcwJyA6ICcgJzsKKyAgICAgICAgICAgIFNlbmRSZXBlYXQobywgcGFkQ2hhciwgd2lkdGggLSBzbGVuKTsKKyAgICAgICAgfQorICAgIH0KK30KKworaW50IF9fbGliY19mb3JtYXRfYnVmZmVyKGNoYXIqIGJ1ZmZlciwgc2l6ZV90IGJ1ZmZlcl9zaXplLCBjb25zdCBjaGFyKiBmb3JtYXQsIC4uLikgeworICBCdWZmZXJPdXRwdXRTdHJlYW0gb3MoYnVmZmVyLCBidWZmZXJfc2l6ZSk7CisgIHZhX2xpc3QgYXJnczsKKyAgdmFfc3RhcnQoYXJncywgZm9ybWF0KTsKKyAgb3V0X3Zmb3JtYXQob3MsIGZvcm1hdCwgYXJncyk7CisgIHZhX2VuZChhcmdzKTsKKyAgcmV0dXJuIG9zLnRvdGFsOworfQorCitpbnQgX19saWJjX2Zvcm1hdF9mZChpbnQgZmQsIGNvbnN0IGNoYXIqIGZvcm1hdCwgLi4uKSB7CisgIEZkT3V0cHV0U3RyZWFtIG9zKGZkKTsKKyAgdmFfbGlzdCBhcmdzOworICB2YV9zdGFydChhcmdzLCBmb3JtYXQpOworICBvdXRfdmZvcm1hdChvcywgZm9ybWF0LCBhcmdzKTsKKyAgdmFfZW5kKGFyZ3MpOworICByZXR1cm4gb3MudG90YWw7Cit9CisKK3N0YXRpYyBpbnQgX19saWJjX3dyaXRlX2xvZyhpbnQgcHJpb3JpdHksIGNvbnN0IGNoYXIqIHRhZywgY29uc3QgY2hhciogbXNnKSB7CisgIGludCBtYWluX2xvZ19mZCA9IFRFTVBfRkFJTFVSRV9SRVRSWShvcGVuKCIvZGV2L2xvZy9tYWluIiwgT19DTE9FWEVDIHwgT19XUk9OTFkpKTsKKyAgaWYgKG1haW5fbG9nX2ZkID09IC0xKSB7CisgICAgcmV0dXJuIC0xOworICB9CisKKyAgaW92ZWMgdmVjWzNdOworICB2ZWNbMF0uaW92X2Jhc2UgPSAmcHJpb3JpdHk7CisgIHZlY1swXS5pb3ZfbGVuID0gMTsKKyAgdmVjWzFdLmlvdl9iYXNlID0gY29uc3RfY2FzdDxjaGFyKj4odGFnKTsKKyAgdmVjWzFdLmlvdl9sZW4gPSBzdHJsZW4odGFnKSArIDE7CisgIHZlY1syXS5pb3ZfYmFzZSA9IGNvbnN0X2Nhc3Q8Y2hhcio+KG1zZyk7CisgIHZlY1syXS5pb3ZfbGVuID0gc3RybGVuKG1zZykgKyAxOworCisgIGludCByZXN1bHQgPSBURU1QX0ZBSUxVUkVfUkVUUlkod3JpdGV2KG1haW5fbG9nX2ZkLCB2ZWMsIDMpKTsKKyAgY2xvc2UobWFpbl9sb2dfZmQpOworICByZXR1cm4gcmVzdWx0OworfQorCitpbnQgX19saWJjX2Zvcm1hdF9sb2dfdmFfbGlzdChpbnQgcHJpb3JpdHksIGNvbnN0IGNoYXIqIHRhZywgY29uc3QgY2hhciogZm9ybWF0LCB2YV9saXN0IGFyZ3MpIHsKKyAgY2hhciBidWZmZXJbMTAyNF07CisgIEJ1ZmZlck91dHB1dFN0cmVhbSBvcyhidWZmZXIsIHNpemVvZihidWZmZXIpKTsKKyAgb3V0X3Zmb3JtYXQob3MsIGZvcm1hdCwgYXJncyk7CisgIHJldHVybiBfX2xpYmNfd3JpdGVfbG9nKHByaW9yaXR5LCB0YWcsIGJ1ZmZlcik7Cit9CisKK2ludCBfX2xpYmNfZm9ybWF0X2xvZyhpbnQgcHJpb3JpdHksIGNvbnN0IGNoYXIqIHRhZywgY29uc3QgY2hhciogZm9ybWF0LCAuLi4pIHsKKyAgdmFfbGlzdCBhcmdzOworICB2YV9zdGFydChhcmdzLCBmb3JtYXQpOworICBpbnQgcmVzdWx0ID0gX19saWJjX2Zvcm1hdF9sb2dfdmFfbGlzdChwcmlvcml0eSwgdGFnLCBmb3JtYXQsIGFyZ3MpOworICB2YV9lbmQoYXJncyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBpbnQgX19saWJjX2FuZHJvaWRfbG9nX2V2ZW50KGludDMyX3QgdGFnLCBjaGFyIHR5cGUsIGNvbnN0IHZvaWQqIHBheWxvYWQsIHNpemVfdCBsZW4pIHsKKyAgaW92ZWMgdmVjWzNdOworICB2ZWNbMF0uaW92X2Jhc2UgPSAmdGFnOworICB2ZWNbMF0uaW92X2xlbiA9IHNpemVvZih0YWcpOworICB2ZWNbMV0uaW92X2Jhc2UgPSAmdHlwZTsKKyAgdmVjWzFdLmlvdl9sZW4gPSBzaXplb2YodHlwZSk7CisgIHZlY1syXS5pb3ZfYmFzZSA9IGNvbnN0X2Nhc3Q8dm9pZCo+KHBheWxvYWQpOworICB2ZWNbMl0uaW92X2xlbiA9IGxlbjsKKworICBpbnQgZXZlbnRfbG9nX2ZkID0gVEVNUF9GQUlMVVJFX1JFVFJZKG9wZW4oIi9kZXYvbG9nL2V2ZW50cyIsIE9fQ0xPRVhFQyB8IE9fV1JPTkxZKSk7CisgIGlmIChldmVudF9sb2dfZmQgPT0gLTEpIHsKKyAgICByZXR1cm4gLTE7CisgIH0KKyAgaW50IHJlc3VsdCA9IFRFTVBfRkFJTFVSRV9SRVRSWSh3cml0ZXYoZXZlbnRfbG9nX2ZkLCB2ZWMsIDMpKTsKKyAgY2xvc2UoZXZlbnRfbG9nX2ZkKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBfX2xpYmNfYW5kcm9pZF9sb2dfZXZlbnRfaW50KGludDMyX3QgdGFnLCBpbnQgdmFsdWUpIHsKKyAgX19saWJjX2FuZHJvaWRfbG9nX2V2ZW50KHRhZywgRVZFTlRfVFlQRV9JTlQsICZ2YWx1ZSwgc2l6ZW9mKHZhbHVlKSk7Cit9CisKK3ZvaWQgX19saWJjX2FuZHJvaWRfbG9nX2V2ZW50X3VpZChpbnQzMl90IHRhZykgeworICBfX2xpYmNfYW5kcm9pZF9sb2dfZXZlbnRfaW50KHRhZywgZ2V0dWlkKCkpOworfQorCit2b2lkIF9fZm9ydGlmeV9jaGtfZmFpbChjb25zdCBjaGFyICptc2csIHVpbnQzMl90IHRhZykgeworICBpZiAodGFnICE9IDApIHsKKyAgICBfX2xpYmNfYW5kcm9pZF9sb2dfZXZlbnRfdWlkKHRhZyk7CisgIH0KKyAgX19saWJjX2ZhdGFsKCJGT1JUSUZZX1NPVVJDRTogJXMuIENhbGxpbmcgYWJvcnQoKS4iLCBtc2cpOworfQorCitzdGF0aWMgdm9pZCBfX2xpYmNfZmF0YWwoY29uc3QgY2hhciogZm9ybWF0LCB2YV9saXN0IGFyZ3MpIHsKKyAgY2hhciBtc2dbMTAyNF07CisgIEJ1ZmZlck91dHB1dFN0cmVhbSBvcyhtc2csIHNpemVvZihtc2cpKTsKKyAgb3V0X3Zmb3JtYXQob3MsIGZvcm1hdCwgYXJncyk7CisKKyAgLy8gVE9ETzogbG9nIHRvIHN0ZGVyciBmb3IgdGhlIGJlbmVmaXQgb2YgImFkYiBzaGVsbCIgdXNlcnMuCisKKyAgLy8gTG9nIHRvIHRoZSBsb2cgZm9yIHRoZSBiZW5lZml0IG9mIHJlZ3VsYXIgYXBwIGRldmVsb3BlcnMgKHdob3NlIHN0ZG91dCBhbmQgc3RkZXJyIGFyZSBjbG9zZWQpLgorICBfX2xpYmNfd3JpdGVfbG9nKEFORFJPSURfTE9HX0ZBVEFMLCAibGliYyIsIG1zZyk7CisKKyAgX19saWJjX3NldF9hYm9ydF9tZXNzYWdlKG1zZyk7Cit9CisKK3ZvaWQgX19saWJjX2ZhdGFsX25vX2Fib3J0KGNvbnN0IGNoYXIqIGZvcm1hdCwgLi4uKSB7CisgIHZhX2xpc3QgYXJnczsKKyAgdmFfc3RhcnQoYXJncywgZm9ybWF0KTsKKyAgX19saWJjX2ZhdGFsKGZvcm1hdCwgYXJncyk7CisgIHZhX2VuZChhcmdzKTsKK30KKwordm9pZCBfX2xpYmNfZmF0YWwoY29uc3QgY2hhciogZm9ybWF0LCAuLi4pIHsKKyAgdmFfbGlzdCBhcmdzOworICB2YV9zdGFydChhcmdzLCBmb3JtYXQpOworICBfX2xpYmNfZmF0YWwoZm9ybWF0LCBhcmdzKTsKKyAgdmFfZW5kKGFyZ3MpOworICBhYm9ydCgpOworfQorCit2b2lkIF9fbGliY19zZXRfYWJvcnRfbWVzc2FnZShjb25zdCBjaGFyKiBtc2cpIHsKKyAgc2l6ZV90IHNpemUgPSBzaXplb2YoYWJvcnRfbXNnX3QpICsgc3RybGVuKG1zZykgKyAxOworICB2b2lkKiBtYXAgPSBtbWFwKE5VTEwsIHNpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsIE1BUF9BTk9OIHwgTUFQX1BSSVZBVEUsIC0xLCAwKTsKKyAgaWYgKG1hcCA9PSBNQVBfRkFJTEVEKSB7CisgICAgcmV0dXJuOworICB9CisKKyAgaWYgKF9fYWJvcnRfbWVzc2FnZV9wdHIgIT0gTlVMTCkgeworICAgIFNjb3BlZFB0aHJlYWRNdXRleExvY2tlciBsb2NrZXIoJmdBYm9ydE1zZ0xvY2spOworICAgIGlmICgqX19hYm9ydF9tZXNzYWdlX3B0ciAhPSBOVUxMKSB7CisgICAgICBtdW5tYXAoKl9fYWJvcnRfbWVzc2FnZV9wdHIsICgqX19hYm9ydF9tZXNzYWdlX3B0ciktPnNpemUpOworICAgIH0KKyAgICBhYm9ydF9tc2dfdCogbmV3X2Fib3J0X21lc3NhZ2UgPSByZWludGVycHJldF9jYXN0PGFib3J0X21zZ190Kj4obWFwKTsKKyAgICBuZXdfYWJvcnRfbWVzc2FnZS0+c2l6ZSA9IHNpemU7CisgICAgc3RyY3B5KG5ld19hYm9ydF9tZXNzYWdlLT5tc2csIG1zZyk7CisgICAgKl9fYWJvcnRfbWVzc2FnZV9wdHIgPSBuZXdfYWJvcnRfbWVzc2FnZTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvbGliZ2VuLmNwcCBiL2xpYmMvYmlvbmljL2xpYmdlbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjcxODFlNwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYmlvbmljL2xpYmdlbi5jcHAKQEAgLTAsMCArMSwxNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPGxpYmdlbi5oPgorCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKworI2luY2x1ZGUgIlRocmVhZExvY2FsQnVmZmVyLmgiCisKK0dMT0JBTF9JTklUX1RIUkVBRF9MT0NBTF9CVUZGRVIoYmFzZW5hbWUpOworR0xPQkFMX0lOSVRfVEhSRUFEX0xPQ0FMX0JVRkZFUihkaXJuYW1lKTsKKworY2hhciogYmFzZW5hbWUoY29uc3QgY2hhciogcGF0aCkgeworICBMT0NBTF9JTklUX1RIUkVBRF9MT0NBTF9CVUZGRVIoY2hhciosIGJhc2VuYW1lLCBNQVhQQVRITEVOKTsKKyAgaW50IHJjID0gYmFzZW5hbWVfcihwYXRoLCBiYXNlbmFtZV90bHNfYnVmZmVyLCBiYXNlbmFtZV90bHNfYnVmZmVyX3NpemUpOworICByZXR1cm4gKHJjIDwgMCkgPyBOVUxMIDogYmFzZW5hbWVfdGxzX2J1ZmZlcjsKK30KKworY2hhciogZGlybmFtZShjb25zdCBjaGFyKiBwYXRoKSB7CisgIExPQ0FMX0lOSVRfVEhSRUFEX0xPQ0FMX0JVRkZFUihjaGFyKiwgZGlybmFtZSwgTUFYUEFUSExFTik7CisgIGludCByYyA9IGRpcm5hbWVfcihwYXRoLCBkaXJuYW1lX3Rsc19idWZmZXIsIGRpcm5hbWVfdGxzX2J1ZmZlcl9zaXplKTsKKyAgcmV0dXJuIChyYyA8IDApID8gTlVMTCA6IGRpcm5hbWVfdGxzX2J1ZmZlcjsKK30KKworaW50IGJhc2VuYW1lX3IoY29uc3QgY2hhciogcGF0aCwgY2hhciogYnVmZmVyLCBzaXplX3QgYnVmZmVyX3NpemUpIHsKKyAgY29uc3QgY2hhciogc3RhcnRwID0gTlVMTDsKKyAgY29uc3QgY2hhciogZW5kcCA9IE5VTEw7CisgIGludCBsZW47CisgIGludCByZXN1bHQ7CisKKyAgLy8gRW1wdHkgb3IgTlVMTCBzdHJpbmcgZ2V0cyB0cmVhdGVkIGFzICIuIi4KKyAgaWYgKHBhdGggPT0gTlVMTCB8fCAqcGF0aCA9PSAnXDAnKSB7CisgICAgc3RhcnRwID0gIi4iOworICAgIGxlbiA9IDE7CisgICAgZ290byBFeGl0OworICB9CisKKyAgLy8gU3RyaXAgdHJhaWxpbmcgc2xhc2hlcy4KKyAgZW5kcCA9IHBhdGggKyBzdHJsZW4ocGF0aCkgLSAxOworICB3aGlsZSAoZW5kcCA+IHBhdGggJiYgKmVuZHAgPT0gJy8nKSB7CisgICAgZW5kcC0tOworICB9CisKKyAgLy8gQWxsIHNsYXNoZXMgYmVjb21lcyAiLyIuCisgIGlmIChlbmRwID09IHBhdGggJiYgKmVuZHAgPT0gJy8nKSB7CisgICAgc3RhcnRwID0gIi8iOworICAgIGxlbiA9IDE7CisgICAgZ290byBFeGl0OworICB9CisKKyAgLy8gRmluZCB0aGUgc3RhcnQgb2YgdGhlIGJhc2UuCisgIHN0YXJ0cCA9IGVuZHA7CisgIHdoaWxlIChzdGFydHAgPiBwYXRoICYmICooc3RhcnRwIC0gMSkgIT0gJy8nKSB7CisgICAgc3RhcnRwLS07CisgIH0KKworICBsZW4gPSBlbmRwIC0gc3RhcnRwICsxOworCisgRXhpdDoKKyAgcmVzdWx0ID0gbGVuOworICBpZiAoYnVmZmVyID09IE5VTEwpIHsKKyAgICByZXR1cm4gcmVzdWx0OworICB9CisgIGlmIChsZW4gPiBzdGF0aWNfY2FzdDxpbnQ+KGJ1ZmZlcl9zaXplKSAtIDEpIHsKKyAgICBsZW4gPSBidWZmZXJfc2l6ZSAtIDE7CisgICAgcmVzdWx0ID0gLTE7CisgICAgZXJybm8gPSBFUkFOR0U7CisgIH0KKworICBpZiAobGVuID49IDApIHsKKyAgICBtZW1jcHkoYnVmZmVyLCBzdGFydHAsIGxlbik7CisgICAgYnVmZmVyW2xlbl0gPSAwOworICB9CisgIHJldHVybiByZXN1bHQ7Cit9CisKK2ludCBkaXJuYW1lX3IoY29uc3QgY2hhciogcGF0aCwgY2hhciogYnVmZmVyLCBzaXplX3QgYnVmZmVyX3NpemUpIHsKKyAgY29uc3QgY2hhciogZW5kcCA9IE5VTEw7CisgIGludCBsZW47CisgIGludCByZXN1bHQ7CisKKyAgLy8gRW1wdHkgb3IgTlVMTCBzdHJpbmcgZ2V0cyB0cmVhdGVkIGFzICIuIi4KKyAgaWYgKHBhdGggPT0gTlVMTCB8fCAqcGF0aCA9PSAnXDAnKSB7CisgICAgcGF0aCA9ICIuIjsKKyAgICBsZW4gPSAxOworICAgIGdvdG8gRXhpdDsKKyAgfQorCisgIC8vIFN0cmlwIHRyYWlsaW5nIHNsYXNoZXMuCisgIGVuZHAgPSBwYXRoICsgc3RybGVuKHBhdGgpIC0gMTsKKyAgd2hpbGUgKGVuZHAgPiBwYXRoICYmICplbmRwID09ICcvJykgeworICAgIGVuZHAtLTsKKyAgfQorCisgIC8vIEZpbmQgdGhlIHN0YXJ0IG9mIHRoZSBkaXIuCisgIHdoaWxlIChlbmRwID4gcGF0aCAmJiAqZW5kcCAhPSAnLycpIHsKKyAgICBlbmRwLS07CisgIH0KKworICAvLyBFaXRoZXIgdGhlIGRpciBpcyAiLyIgb3IgdGhlcmUgYXJlIG5vIHNsYXNoZXMuCisgIGlmIChlbmRwID09IHBhdGgpIHsKKyAgICBwYXRoID0gKCplbmRwID09ICcvJykgPyAiLyIgOiAiLiI7CisgICAgbGVuID0gMTsKKyAgICBnb3RvIEV4aXQ7CisgIH0KKworICBkbyB7CisgICAgZW5kcC0tOworICB9IHdoaWxlIChlbmRwID4gcGF0aCAmJiAqZW5kcCA9PSAnLycpOworCisgIGxlbiA9IGVuZHAgLSBwYXRoICsgMTsKKworIEV4aXQ6CisgIHJlc3VsdCA9IGxlbjsKKyAgaWYgKGxlbiArIDEgPiBNQVhQQVRITEVOKSB7CisgICAgZXJybm8gPSBFTkFNRVRPT0xPTkc7CisgICAgcmV0dXJuIC0xOworICB9CisgIGlmIChidWZmZXIgPT0gTlVMTCkgeworICAgIHJldHVybiByZXN1bHQ7CisgIH0KKworICBpZiAobGVuID4gc3RhdGljX2Nhc3Q8aW50PihidWZmZXJfc2l6ZSkgLSAxKSB7CisgICAgbGVuID0gYnVmZmVyX3NpemUgLSAxOworICAgIHJlc3VsdCA9IC0xOworICAgIGVycm5vID0gRVJBTkdFOworICB9CisKKyAgaWYgKGxlbiA+PSAwKSB7CisgICAgbWVtY3B5KGJ1ZmZlciwgcGF0aCwgbGVuKTsKKyAgICBidWZmZXJbbGVuXSA9IDA7CisgIH0KKyAgcmV0dXJuIHJlc3VsdDsKK30KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL2xvZ2Rfd3JpdGUuYyBiL2xpYmMvYmlvbmljL2xvZ2Rfd3JpdGUuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmJjMzlmYS4uMDAwMDAwMAotLS0gYS9saWJjL2Jpb25pYy9sb2dkX3dyaXRlLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyMDkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqICAgIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKLSAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi0gKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCi0gKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAotICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCi0gKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKLSAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotI2luY2x1ZGUgPHRpbWUuaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHB0aHJlYWQuaD4KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpbmNsdWRlIDxzeXMvdWlvLmg+Ci0jaW5jbHVkZSA8YXJwYS9pbmV0Lmg+Ci0jaW5jbHVkZSA8ZXJybm8uaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdGRhcmcuaD4KLSNpbmNsdWRlIDxmY250bC5oPgotCi0jaW5jbHVkZSAibG9nZC5oIgotCi0vKiBzaG91bGQgbWF0Y2ggc3lzdGVtL2NvcmUvaW5jbHVkZS9jdXRpbHMvbG9nZ2VyLmggKi8KLSNkZWZpbmUgTE9HR0VSX0xPR19NQUlOICAgICAibG9nL21haW4iCi0jZGVmaW5lIExPR0dFUl9MT0dfUkFESU8gICAgImxvZy9yYWRpbyIKLSNkZWZpbmUgTE9HR0VSX0xPR19FVkVOVFMgICAibG9nL2V2ZW50cyIKLSNkZWZpbmUgTE9HR0VSX0xPR19TWVNURU0gICAibG9nL3N5c3RlbSIKLQotI2luY2x1ZGUgPHB0aHJlYWQuaD4KLQotLyogSU1QT1JUQU5UIElNUE9SVEFOVCBJTVBPUlRBTlQ6IFRFQ0hOSUNBTCBOT1RFCi0gKgotICogU29tZSBvZiB0aGUgZnVuY3Rpb25zIGJlbG93IGNhbiBiZSBjYWxsZWQgd2hlbiBvdXIgbWFsbG9jKCkgaW1wbGVtZW50YXRpb24KLSAqIGhhcyBkZXRlY3RlZCB0aGF0IHRoZSBoZWFwIGlzIGNvcnJ1cHRlZCwgb3IgZXZlbiBmcm9tIGEgc2lnbmFsIGhhbmRsZXIuCi0gKgotICogVGhlc2UgZnVuY3Rpb25zIHNob3VsZCAqbm90KiB1c2UgYSBmdW5jdGlvbiB0aGF0IGFsbG9jYXRlcyBoZWFwIG1lbW9yeQotICogb3IgaXMgbm90IHNpZ25hbC1zYWZlLiBVc2luZyBkaXJlY3Qgc3lzdGVtIGNhbGxzIGlzIGFjY2VwdGFibGUsIGFuZCB3ZQotICogYWxzbyBhc3N1bWUgdGhhdCBwdGhyZWFkX211dGV4X2xvY2svdW5sb2NrIGNhbiBiZSB1c2VkIHRvby4KLSAqLwotCi0jZGVmaW5lIExPR19CVUZfU0laRSAgICAxMDI0Ci0KLXR5cGVkZWYgZW51bSB7Ci0gICAgTE9HX0lEX05PTkUgPSAwLAotICAgIExPR19JRF9NQUlOLAotICAgIExPR19JRF9SQURJTywKLSAgICBMT0dfSURfTUFYCi19IGxvZ19pZF90OwotCi0vKiBsb2dnZXIgaGFuZGxlcyB3cml0aW5nIHRvIG9iamVjdCwgcG9pbnRlZCBieSBsb2cgY2hhbm5lbCBpZCAqLwotdHlwZWRlZiBpbnQgKCpsb2dnZXJfZnVuY3Rpb25fdCkobG9nX2lkX3QgbG9nX2lkLCBzdHJ1Y3QgaW92ZWMgKnZlYyk7Ci0KLXR5cGVkZWYgc3RydWN0IHsKLSAgICBsb2dnZXJfZnVuY3Rpb25fdCBsb2dnZXI7Ci0gICAgaW50ICAgICAgICAgICAgICAgZmQ7Ci0gICAgY29uc3QgY2hhciAgICAgICAgKnBhdGg7Ci19IGxvZ19jaGFubmVsX3Q7Ci0KLXN0YXRpYyBpbnQgX193cml0ZV90b19sb2dfaW5pdChsb2dfaWRfdCBsb2dfaWQsIHN0cnVjdCBpb3ZlYyAqdmVjKTsKLXN0YXRpYyBpbnQgX193cml0ZV90b19sb2dfbnVsbChsb2dfaWRfdCBsb2dfaWQsIHN0cnVjdCBpb3ZlYyAqdmVjKTsKLQotc3RhdGljIHB0aHJlYWRfbXV0ZXhfdCBsb2dfaW5pdF9sb2NrID0gUFRIUkVBRF9NVVRFWF9JTklUSUFMSVpFUjsKLQotc3RhdGljIGxvZ19jaGFubmVsX3QgbG9nX2NoYW5uZWxzW0xPR19JRF9NQVhdID0gewotICAgIHsgX193cml0ZV90b19sb2dfbnVsbCwgLTEsIE5VTEwgfSwKLSAgICB7IF9fd3JpdGVfdG9fbG9nX2luaXQsIC0xLCAiL2Rldi8iTE9HR0VSX0xPR19NQUlOIH0sCi0gICAgeyBfX3dyaXRlX3RvX2xvZ19pbml0LCAtMSwgIi9kZXYvIkxPR0dFUl9MT0dfUkFESU8gfQotfTsKLQotLyogSW1wb3J0YW50OiBzZWUgdGVjaG5pY2FsIG5vdGUgYXQgc3RhcnQgb2Ygc291cmNlIGZpbGUgKi8KLXN0YXRpYyBpbnQgX193cml0ZV90b19sb2dfbnVsbChsb2dfaWRfdCBsb2dfaWQsIHN0cnVjdCBpb3ZlYyAqdmVjKQotewotICAgIC8qCi0gICAgICogQUxURVJFRCBiZWhhdmlvdXIgZnJvbSBwcmV2aW91cyB2ZXJzaW9uCi0gICAgICogYWx3YXlzIHJldHVybnMgc3VjY2Vzc2Z1bCByZXN1bHQKLSAgICAgKi8KLSAgICBpbnQgICAgaSA9IDA7Ci0gICAgc2l6ZV90IHJlcyA9IDA7Ci0KLSAgICBmb3IgKCA7IGkgPCAzOyArK2kpIHsKLSAgICAgICAgcmVzICs9IHZlY1tpXS5pb3ZfbGVuOwotICAgIH0KLQotICAgIHJldHVybiAoaW50KXJlczsKLX0KLQotLyoKLSAqICBpdCdzIHN1cHBvc2VkLCB0aGF0IGxvZ19pZCBjb250YWlucyB2YWxpZCBpZCBhbHdheXMuCi0gKiAgdGhpcyBjaGVjayBtdXN0IGJlIHBlcmZvcm1lZCBpbiBoaWdoZXIgbGV2ZWwgZnVuY3Rpb25zCi0gKi8KLS8qIEltcG9ydGFudDogc2VlIHRlY2huaWNhbCBub3RlIGF0IHN0YXJ0IG9mIHNvdXJjZSBmaWxlICovCi1zdGF0aWMgaW50IF9fd3JpdGVfdG9fbG9nX2tlcm5lbChsb2dfaWRfdCBsb2dfaWQsIHN0cnVjdCBpb3ZlYyAqdmVjKQotewotICAgIHJldHVybiBURU1QX0ZBSUxVUkVfUkVUUlkoIHdyaXRldihsb2dfY2hhbm5lbHNbbG9nX2lkXS5mZCwgdmVjLCAzKSApOwotfQotCi0vKiBJbXBvcnRhbnQ6IHNlZSB0ZWNobmljYWwgbm90ZSBhdCBzdGFydCBvZiBzb3VyY2UgZmlsZSAqLwotc3RhdGljIGludCBfX3dyaXRlX3RvX2xvZ19pbml0KGxvZ19pZF90IGxvZ19pZCwgc3RydWN0IGlvdmVjICp2ZWMpCi17Ci0gICAgaWYgKChMT0dfSURfTk9ORSA8IGxvZ19pZCkgJiYgKGxvZ19pZCA8IExPR19JRF9NQVgpKSB7Ci0gICAgICAgIGludCBmZDsKLQotICAgICAgICBwdGhyZWFkX211dGV4X2xvY2soJmxvZ19pbml0X2xvY2spOwotCi0gICAgICAgIGZkID0gVEVNUF9GQUlMVVJFX1JFVFJZKG9wZW4obG9nX2NoYW5uZWxzW2xvZ19pZF0ucGF0aCwgT19XUk9OTFkpKTsKLQotICAgICAgICBsb2dfY2hhbm5lbHNbbG9nX2lkXS5sb2dnZXIgPQotICAgICAgICAgICAgKGZkIDwgMCkgPyBfX3dyaXRlX3RvX2xvZ19udWxsIDogX193cml0ZV90b19sb2dfa2VybmVsOwotICAgICAgICBsb2dfY2hhbm5lbHNbbG9nX2lkXS5mZCA9IGZkOwotCi0gICAgICAgIGxvZ19jaGFubmVsc1tsb2dfaWRdLmZkID0gZmQ7Ci0KLSAgICAgICAgcHRocmVhZF9tdXRleF91bmxvY2soJmxvZ19pbml0X2xvY2spOwotCi0gICAgICAgIHJldHVybiBsb2dfY2hhbm5lbHNbbG9nX2lkXS5sb2dnZXIobG9nX2lkLCB2ZWMpOwotICAgIH0KLQotICAgIC8qIGxvZ19pZCBpcyBpbnZhbGlkICovCi0gICAgcmV0dXJuIC0xOwotfQotCi0vKiBJbXBvcnRhbnQ6IHNlZSB0ZWNobmljYWwgbm90ZSBhdCBzdGFydCBvZiBzb3VyY2UgZmlsZSAqLwotX19MSUJDX0hJRERFTl9fCi1pbnQgX19saWJjX2FuZHJvaWRfbG9nX3dyaXRlKGludCBwcmlvLCBjb25zdCBjaGFyICp0YWcsIGNvbnN0IGNoYXIgKm1zZykKLXsKLSAgICBzdHJ1Y3QgaW92ZWMgdmVjWzNdOwotICAgIGxvZ19pZF90IGxvZ19pZCA9IExPR19JRF9NQUlOOwotCi0gICAgaWYgKHRhZyA9PSBOVUxMKQotICAgICAgICB0YWcgPSAiIjsKLQotICAgIGlmICghc3RyY21wKHRhZywgIkhUQ19SSUwiKSkKLSAgICAgICAgbG9nX2lkID0gTE9HX0lEX1JBRElPOwotCi0gICAgdmVjWzBdLmlvdl9iYXNlICAgPSAodW5zaWduZWQgY2hhciAqKSAmcHJpbzsKLSAgICB2ZWNbMF0uaW92X2xlbiAgICA9IDE7Ci0gICAgdmVjWzFdLmlvdl9iYXNlICAgPSAodm9pZCAqKSB0YWc7Ci0gICAgdmVjWzFdLmlvdl9sZW4gICAgPSBzdHJsZW4odGFnKSArIDE7Ci0gICAgdmVjWzJdLmlvdl9iYXNlICAgPSAodm9pZCAqKSBtc2c7Ci0gICAgdmVjWzJdLmlvdl9sZW4gICAgPSBzdHJsZW4obXNnKSArIDE7Ci0KLSAgICByZXR1cm4gbG9nX2NoYW5uZWxzW2xvZ19pZF0ubG9nZ2VyKGxvZ19pZCwgdmVjKTsKLX0KLQotLyogVGhlIGZ1bmN0aW9ucyBiZWxvdyBhcmUgbm90IGRlc2lnbmVkIHRvIGJlIGNhbGxlZCBmcm9tIGEgaGVhcCBwYW5pYwotICogZnVuY3Rpb24gb3IgZnJvbSBhIHNpZ25hbCBoYW5kbGVyLiBBcyBzdWNoLCB0aGV5IGFyZSBmcmVlIHRvIHVzZSBjb21wbGV4Ci0gKiBDIGxpYnJhcnkgZnVuY3Rpb25zIGxpa2UgdnNucHJpbnRmKCkKLSAqLwotX19MSUJDX0hJRERFTl9fCi1pbnQgX19saWJjX2FuZHJvaWRfbG9nX3ZwcmludChpbnQgcHJpbywgY29uc3QgY2hhciAqdGFnLCBjb25zdCBjaGFyICpmbXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YV9saXN0IGFwKQotewotICAgIGNoYXIgYnVmW0xPR19CVUZfU0laRV07Ci0KLSAgICB2c25wcmludGYoYnVmLCBMT0dfQlVGX1NJWkUsIGZtdCwgYXApOwotCi0gICAgcmV0dXJuIF9fbGliY19hbmRyb2lkX2xvZ193cml0ZShwcmlvLCB0YWcsIGJ1Zik7Ci19Ci0KLV9fTElCQ19ISURERU5fXwotaW50IF9fbGliY19hbmRyb2lkX2xvZ19wcmludChpbnQgcHJpbywgY29uc3QgY2hhciAqdGFnLCBjb25zdCBjaGFyICpmbXQsIC4uLikKLXsKLSAgICB2YV9saXN0IGFwOwotICAgIGNoYXIgYnVmW0xPR19CVUZfU0laRV07Ci0KLSAgICB2YV9zdGFydChhcCwgZm10KTsKLSAgICB2c25wcmludGYoYnVmLCBMT0dfQlVGX1NJWkUsIGZtdCwgYXApOwotICAgIHZhX2VuZChhcCk7Ci0KLSAgICByZXR1cm4gX19saWJjX2FuZHJvaWRfbG9nX3dyaXRlKHByaW8sIHRhZywgYnVmKTsKLX0KLQotX19MSUJDX0hJRERFTl9fCi1pbnQgX19saWJjX2FuZHJvaWRfbG9nX2Fzc2VydChjb25zdCBjaGFyICpjb25kLCBjb25zdCBjaGFyICp0YWcsCi0JCQkgICAgICBjb25zdCBjaGFyICpmbXQsIC4uLikKLXsKLSAgICB2YV9saXN0IGFwOwotICAgIGNoYXIgYnVmW0xPR19CVUZfU0laRV07Ci0KLSAgICB2YV9zdGFydChhcCwgZm10KTsKLSAgICB2c25wcmludGYoYnVmLCBMT0dfQlVGX1NJWkUsIGZtdCwgYXApOwotICAgIHZhX2VuZChhcCk7Ci0KLSAgICBfX2xpYmNfYW5kcm9pZF9sb2dfd3JpdGUoQU5EUk9JRF9MT0dfRkFUQUwsIHRhZywgYnVmKTsKLQotICAgIGV4aXQoMSk7Ci0KLSAgICByZXR1cm4gLTE7Ci19CmRpZmYgLS1naXQgYS9saWJjL3VuaXN0ZC9sc2VlazY0LmMgYi9saWJjL2Jpb25pYy9sc2VlazY0LmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGxpYmMvdW5pc3RkL2xzZWVrNjQuYwpyZW5hbWUgdG8gbGliYy9iaW9uaWMvbHNlZWs2NC5jCmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9tYWxsb2NfZGVidWdfY2hlY2suY3BwIGIvbGliYy9iaW9uaWMvbWFsbG9jX2RlYnVnX2NoZWNrLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMWE2ZWMxCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9iaW9uaWMvbWFsbG9jX2RlYnVnX2NoZWNrLmNwcApAQCAtMCwwICsxLDU1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CisjaW5jbHVkZSA8ZGxmY24uaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxwdGhyZWFkLmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8c3RkYm9vbC5oPgorI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2luY2x1ZGUgPHN5cy9zeXN0ZW1fcHJvcGVydGllcy5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDx1bndpbmQuaD4KKworI2luY2x1ZGUgImRlYnVnX21hcGluZm8uaCIKKyNpbmNsdWRlICJkZWJ1Z19zdGFja3RyYWNlLmgiCisjaW5jbHVkZSAiZGxtYWxsb2MuaCIKKyNpbmNsdWRlICJsaWJjX2xvZ2dpbmcuaCIKKyNpbmNsdWRlICJtYWxsb2NfZGVidWdfY29tbW9uLmgiCisjaW5jbHVkZSAiU2NvcGVkUHRocmVhZE11dGV4TG9ja2VyLmgiCisKKy8qIGxpYmMuZGVidWcubWFsbG9jLmJhY2tsb2cgKi8KK2V4dGVybiB1bnNpZ25lZCBpbnQgZ01hbGxvY0RlYnVnQmFja2xvZzsKK2V4dGVybiBpbnQgZ01hbGxvY0RlYnVnTGV2ZWw7CisKKyNkZWZpbmUgTUFYX0JBQ0tUUkFDRV9ERVBUSCAxNgorI2RlZmluZSBBTExPQ0FUSU9OX1RBRyAgICAgIDB4MWVlN2QwMGQKKyNkZWZpbmUgQkFDS0xPR19UQUcgICAgICAgICAweGJhYmVjYWZlCisjZGVmaW5lIEZSRUVfUE9JU09OICAgICAgICAgMHhhNQorI2RlZmluZSBGUk9OVF9HVUFSRCAgICAgICAgIDB4YWEKKyNkZWZpbmUgRlJPTlRfR1VBUkRfTEVOICAgICAoMTw8NSkKKyNkZWZpbmUgUkVBUl9HVUFSRCAgICAgICAgICAweGJiCisjZGVmaW5lIFJFQVJfR1VBUkRfTEVOICAgICAgKDE8PDUpCisKK3N0YXRpYyB2b2lkIGxvZ19tZXNzYWdlKGNvbnN0IGNoYXIqIGZvcm1hdCwgLi4uKSB7CisgIHZhX2xpc3QgYXJnczsKKyAgdmFfc3RhcnQoYXJncywgZm9ybWF0KTsKKyAgX19saWJjX2Zvcm1hdF9sb2dfdmFfbGlzdChBTkRST0lEX0xPR19FUlJPUiwgImxpYmMiLCBmb3JtYXQsIGFyZ3MpOworICB2YV9lbmQoYXJncyk7Cit9CisKK3N0cnVjdCBoZHJfdCB7CisgICAgdWludDMyX3QgdGFnOworICAgIHZvaWQqIGJhc2U7ICAvLyBBbHdheXMgcG9pbnRzIHRvIHRoZSBtZW1vcnkgYWxsb2NhdGVkIHVzaW5nIGRsbWFsbG9jLgorICAgICAgICAgICAgICAgICAvLyBGb3IgbWVtb3J5IGFsbG9jYXRlZCBpbiBjaGtfbWVtYWxpZ24sIHRoaXMgdmFsdWUgd2lsbAorICAgICAgICAgICAgICAgICAvLyBub3QgYmUgdGhlIHNhbWUgYXMgdGhlIGxvY2F0aW9uIG9mIHRoZSBzdGFydCBvZiB0aGlzCisgICAgICAgICAgICAgICAgIC8vIHN0cnVjdHVyZS4KKyAgICBoZHJfdCogcHJldjsKKyAgICBoZHJfdCogbmV4dDsKKyAgICB1aW50cHRyX3QgYnRbTUFYX0JBQ0tUUkFDRV9ERVBUSF07CisgICAgaW50IGJ0X2RlcHRoOworICAgIHVpbnRwdHJfdCBmcmVlZF9idFtNQVhfQkFDS1RSQUNFX0RFUFRIXTsKKyAgICBpbnQgZnJlZWRfYnRfZGVwdGg7CisgICAgc2l6ZV90IHNpemU7CisgICAgY2hhciBmcm9udF9ndWFyZFtGUk9OVF9HVUFSRF9MRU5dOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQsIGFsaWduZWQoTUFMTE9DX0FMSUdOTUVOVCkpKTsKKworc3RydWN0IGZ0cl90IHsKKyAgICBjaGFyIHJlYXJfZ3VhcmRbUkVBUl9HVUFSRF9MRU5dOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RhdGljIGlubGluZSBmdHJfdCogdG9fZnRyKGhkcl90KiBoZHIpIHsKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxmdHJfdCo+KHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGhkciArIDEpICsgaGRyLT5zaXplKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkKiB1c2VyKGhkcl90KiBoZHIpIHsKKyAgICByZXR1cm4gaGRyICsgMTsKK30KKworc3RhdGljIGlubGluZSBoZHJfdCogbWV0YSh2b2lkKiB1c2VyKSB7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8aGRyX3QqPih1c2VyKSAtIDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgY29uc3QgaGRyX3QqIGNvbnN0X21ldGEoY29uc3Qgdm9pZCogdXNlcikgeworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNvbnN0IGhkcl90Kj4odXNlcikgLSAxOworfQorCisKK3N0YXRpYyB1bnNpZ25lZCBnQWxsb2NhdGVkQmxvY2tDb3VudDsKK3N0YXRpYyBoZHJfdCogdGFpbDsKK3N0YXRpYyBoZHJfdCogaGVhZDsKK3N0YXRpYyBwdGhyZWFkX211dGV4X3QgbG9jayA9IFBUSFJFQURfTVVURVhfSU5JVElBTElaRVI7CisKK3N0YXRpYyB1bnNpZ25lZCBiYWNrbG9nX251bTsKK3N0YXRpYyBoZHJfdCogYmFja2xvZ190YWlsOworc3RhdGljIGhkcl90KiBiYWNrbG9nX2hlYWQ7CitzdGF0aWMgcHRocmVhZF9tdXRleF90IGJhY2tsb2dfbG9jayA9IFBUSFJFQURfTVVURVhfSU5JVElBTElaRVI7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpbml0X2Zyb250X2d1YXJkKGhkcl90KiBoZHIpIHsKKyAgICBtZW1zZXQoaGRyLT5mcm9udF9ndWFyZCwgRlJPTlRfR1VBUkQsIEZST05UX0dVQVJEX0xFTik7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc19mcm9udF9ndWFyZF92YWxpZChoZHJfdCogaGRyKSB7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBGUk9OVF9HVUFSRF9MRU47IGkrKykgeworICAgICAgICBpZiAoaGRyLT5mcm9udF9ndWFyZFtpXSAhPSBGUk9OVF9HVUFSRCkgeworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpbml0X3JlYXJfZ3VhcmQoaGRyX3QqIGhkcikgeworICAgIGZ0cl90KiBmdHIgPSB0b19mdHIoaGRyKTsKKyAgICBtZW1zZXQoZnRyLT5yZWFyX2d1YXJkLCBSRUFSX0dVQVJELCBSRUFSX0dVQVJEX0xFTik7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc19yZWFyX2d1YXJkX3ZhbGlkKGhkcl90KiBoZHIpIHsKKyAgICB1bnNpZ25lZCBpOworICAgIGludCB2YWxpZCA9IDE7CisgICAgaW50IGZpcnN0X21pc21hdGNoID0gLTE7CisgICAgZnRyX3QqIGZ0ciA9IHRvX2Z0cihoZHIpOworICAgIGZvciAoaSA9IDA7IGkgPCBSRUFSX0dVQVJEX0xFTjsgaSsrKSB7CisgICAgICAgIGlmIChmdHItPnJlYXJfZ3VhcmRbaV0gIT0gUkVBUl9HVUFSRCkgeworICAgICAgICAgICAgaWYgKGZpcnN0X21pc21hdGNoIDwgMCkKKyAgICAgICAgICAgICAgICBmaXJzdF9taXNtYXRjaCA9IGk7CisgICAgICAgICAgICB2YWxpZCA9IDA7CisgICAgICAgIH0gZWxzZSBpZiAoZmlyc3RfbWlzbWF0Y2ggPj0gMCkgeworICAgICAgICAgICAgbG9nX21lc3NhZ2UoIisrKyBSRUFSIEdVQVJEIE1JU01BVENIIFslZCwgJWQpXG4iLCBmaXJzdF9taXNtYXRjaCwgaSk7CisgICAgICAgICAgICBmaXJzdF9taXNtYXRjaCA9IC0xOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGZpcnN0X21pc21hdGNoID49IDApCisgICAgICAgIGxvZ19tZXNzYWdlKCIrKysgUkVBUiBHVUFSRCBNSVNNQVRDSCBbJWQsICVkKVxuIiwgZmlyc3RfbWlzbWF0Y2gsIGkpOworICAgIHJldHVybiB2YWxpZDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGFkZF9sb2NrZWQoaGRyX3QqIGhkciwgaGRyX3QqKiB0YWlsLCBoZHJfdCoqIGhlYWQpIHsKKyAgICBoZHItPnByZXYgPSBOVUxMOworICAgIGhkci0+bmV4dCA9ICpoZWFkOworICAgIGlmICgqaGVhZCkKKyAgICAgICAgKCpoZWFkKS0+cHJldiA9IGhkcjsKKyAgICBlbHNlCisgICAgICAgICp0YWlsID0gaGRyOworICAgICpoZWFkID0gaGRyOworfQorCitzdGF0aWMgaW5saW5lIGludCBkZWxfbG9ja2VkKGhkcl90KiBoZHIsIGhkcl90KiogdGFpbCwgaGRyX3QqKiBoZWFkKSB7CisgICAgaWYgKGhkci0+cHJldikgeworICAgICAgICBoZHItPnByZXYtPm5leHQgPSBoZHItPm5leHQ7CisgICAgfSBlbHNlIHsKKyAgICAgICAgKmhlYWQgPSBoZHItPm5leHQ7CisgICAgfQorICAgIGlmIChoZHItPm5leHQpIHsKKyAgICAgICAgaGRyLT5uZXh0LT5wcmV2ID0gaGRyLT5wcmV2OworICAgIH0gZWxzZSB7CisgICAgICAgICp0YWlsID0gaGRyLT5wcmV2OworICAgIH0KKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGFkZChoZHJfdCogaGRyLCBzaXplX3Qgc2l6ZSkgeworICAgIFNjb3BlZFB0aHJlYWRNdXRleExvY2tlciBsb2NrZXIoJmxvY2spOworICAgIGhkci0+dGFnID0gQUxMT0NBVElPTl9UQUc7CisgICAgaGRyLT5zaXplID0gc2l6ZTsKKyAgICBpbml0X2Zyb250X2d1YXJkKGhkcik7CisgICAgaW5pdF9yZWFyX2d1YXJkKGhkcik7CisgICAgKytnQWxsb2NhdGVkQmxvY2tDb3VudDsKKyAgICBhZGRfbG9ja2VkKGhkciwgJnRhaWwsICZoZWFkKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgZGVsKGhkcl90KiBoZHIpIHsKKyAgICBpZiAoaGRyLT50YWcgIT0gQUxMT0NBVElPTl9UQUcpIHsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIFNjb3BlZFB0aHJlYWRNdXRleExvY2tlciBsb2NrZXIoJmxvY2spOworICAgIGRlbF9sb2NrZWQoaGRyLCAmdGFpbCwgJmhlYWQpOworICAgIC0tZ0FsbG9jYXRlZEJsb2NrQ291bnQ7CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwb2lzb24oaGRyX3QqIGhkcikgeworICAgIG1lbXNldCh1c2VyKGhkciksIEZSRUVfUE9JU09OLCBoZHItPnNpemUpOworfQorCitzdGF0aWMgaW50IHdhc191c2VkX2FmdGVyX2ZyZWUoaGRyX3QqIGhkcikgeworICAgIHVuc2lnbmVkIGk7CisgICAgY29uc3QgY2hhciogZGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhciAqPih1c2VyKGhkcikpOworICAgIGZvciAoaSA9IDA7IGkgPCBoZHItPnNpemU7IGkrKykKKyAgICAgICAgaWYgKGRhdGFbaV0gIT0gRlJFRV9QT0lTT04pCisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICByZXR1cm4gMDsKK30KKworLyogcmV0dXJucyAxIGlmIHZhbGlkLCAqc2FmZSA9PSAxIGlmIHNhZmUgdG8gZHVtcCBzdGFjayAqLworc3RhdGljIGlubGluZSBpbnQgY2hlY2tfZ3VhcmRzKGhkcl90KiBoZHIsIGludCogc2FmZSkgeworICAgICpzYWZlID0gMTsKKyAgICBpZiAoIWlzX2Zyb250X2d1YXJkX3ZhbGlkKGhkcikpIHsKKyAgICAgICAgaWYgKGhkci0+ZnJvbnRfZ3VhcmRbMF0gPT0gRlJPTlRfR1VBUkQpIHsKKyAgICAgICAgICAgIGxvZ19tZXNzYWdlKCIrKysgQUxMT0NBVElPTiAlcCBTSVpFICVkIEhBUyBBIENPUlJVUFRFRCBGUk9OVCBHVUFSRFxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgdXNlcihoZHIpLCBoZHItPnNpemUpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbG9nX21lc3NhZ2UoIisrKyBBTExPQ0FUSU9OICVwIEhBUyBBIENPUlJVUFRFRCBGUk9OVCBHVUFSRCAiXAorICAgICAgICAgICAgICAgICAgICAgICIoTk9UIERVTVBJTkcgU1RBQ0tUUkFDRSlcbiIsIHVzZXIoaGRyKSk7CisgICAgICAgICAgICAvKiBBbGxvY2F0aW9uIGhlYWRlciBpcyBwcm9iYWJseSBjb3JydXB0LCBkbyBub3QgcHJpbnQgc3RhY2sgdHJhY2UgKi8KKyAgICAgICAgICAgICpzYWZlID0gMDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBpZiAoIWlzX3JlYXJfZ3VhcmRfdmFsaWQoaGRyKSkgeworICAgICAgICBsb2dfbWVzc2FnZSgiKysrIEFMTE9DQVRJT04gJXAgU0laRSAlZCBIQVMgQSBDT1JSVVBURUQgUkVBUiBHVUFSRFxuIiwKKyAgICAgICAgICAgICAgICAgICB1c2VyKGhkciksIGhkci0+c2l6ZSk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIHJldHVybiAxOworfQorCisvKiByZXR1cm5zIDEgaWYgdmFsaWQsICpzYWZlID09IDEgaWYgc2FmZSB0byBkdW1wIHN0YWNrICovCitzdGF0aWMgaW5saW5lIGludCBjaGVja19hbGxvY2F0aW9uX2xvY2tlZChoZHJfdCogaGRyLCBpbnQqIHNhZmUpIHsKKyAgICBpbnQgdmFsaWQgPSAxOworICAgICpzYWZlID0gMTsKKworICAgIGlmIChoZHItPnRhZyAhPSBBTExPQ0FUSU9OX1RBRyAmJiBoZHItPnRhZyAhPSBCQUNLTE9HX1RBRykgeworICAgICAgICBsb2dfbWVzc2FnZSgiKysrIEFMTE9DQVRJT04gJXAgSEFTIElOVkFMSUQgVEFHICUwOHggKE5PVCBEVU1QSU5HIFNUQUNLVFJBQ0UpXG4iLAorICAgICAgICAgICAgICAgICAgIHVzZXIoaGRyKSwgaGRyLT50YWcpOworICAgICAgICAvLyBBbGxvY2F0aW9uIGhlYWRlciBpcyBwcm9iYWJseSBjb3JydXB0LCBkbyBub3QgZGVxdWV1ZSBvciBkdW1wIHN0YWNrCisgICAgICAgIC8vIHRyYWNlLgorICAgICAgICAqc2FmZSA9IDA7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIGlmIChoZHItPnRhZyA9PSBCQUNLTE9HX1RBRyAmJiB3YXNfdXNlZF9hZnRlcl9mcmVlKGhkcikpIHsKKyAgICAgICAgbG9nX21lc3NhZ2UoIisrKyBBTExPQ0FUSU9OICVwIFNJWkUgJWQgV0FTIFVTRUQgQUZURVIgQkVJTkcgRlJFRURcbiIsCisgICAgICAgICAgICAgICAgICAgdXNlcihoZHIpLCBoZHItPnNpemUpOworICAgICAgICB2YWxpZCA9IDA7CisgICAgICAgIC8qIGNoZWNrIHRoZSBndWFyZHMgdG8gc2VlIGlmIGl0J3Mgc2FmZSB0byBkdW1wIGEgc3RhY2sgdHJhY2UgKi8KKyAgICAgICAgY2hlY2tfZ3VhcmRzKGhkciwgc2FmZSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgdmFsaWQgPSBjaGVja19ndWFyZHMoaGRyLCBzYWZlKTsKKyAgICB9CisKKyAgICBpZiAoIXZhbGlkICYmICpzYWZlKSB7CisgICAgICAgIGxvZ19tZXNzYWdlKCIrKysgQUxMT0NBVElPTiAlcCBTSVpFICVkIEFMTE9DQVRFRCBIRVJFOlxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIoaGRyKSwgaGRyLT5zaXplKTsKKyAgICAgICAgbG9nX2JhY2t0cmFjZShoZHItPmJ0LCBoZHItPmJ0X2RlcHRoKTsKKyAgICAgICAgaWYgKGhkci0+dGFnID09IEJBQ0tMT0dfVEFHKSB7CisgICAgICAgICAgICBsb2dfbWVzc2FnZSgiKysrIEFMTE9DQVRJT04gJXAgU0laRSAlZCBGUkVFRCBIRVJFOlxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgdXNlcihoZHIpLCBoZHItPnNpemUpOworICAgICAgICAgICAgbG9nX2JhY2t0cmFjZShoZHItPmZyZWVkX2J0LCBoZHItPmZyZWVkX2J0X2RlcHRoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB2YWxpZDsKK30KKworc3RhdGljIGlubGluZSBpbnQgZGVsX2FuZF9jaGVja19sb2NrZWQoaGRyX3QqIGhkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhkcl90KiogdGFpbCwgaGRyX3QqKiBoZWFkLCB1bnNpZ25lZCogY250LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50KiBzYWZlKSB7CisgICAgaW50IHZhbGlkID0gY2hlY2tfYWxsb2NhdGlvbl9sb2NrZWQoaGRyLCBzYWZlKTsKKyAgICBpZiAoc2FmZSkgeworICAgICAgICAoKmNudCktLTsKKyAgICAgICAgZGVsX2xvY2tlZChoZHIsIHRhaWwsIGhlYWQpOworICAgIH0KKyAgICByZXR1cm4gdmFsaWQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkZWxfZnJvbV9iYWNrbG9nX2xvY2tlZChoZHJfdCogaGRyKSB7CisgICAgaW50IHNhZmU7CisgICAgZGVsX2FuZF9jaGVja19sb2NrZWQoaGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICZiYWNrbG9nX3RhaWwsICZiYWNrbG9nX2hlYWQsICZiYWNrbG9nX251bSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAmc2FmZSk7CisgICAgaGRyLT50YWcgPSAwOyAvKiBjbGVhciB0aGUgdGFnICovCit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkZWxfZnJvbV9iYWNrbG9nKGhkcl90KiBoZHIpIHsKKyAgICBTY29wZWRQdGhyZWFkTXV0ZXhMb2NrZXIgbG9ja2VyKCZiYWNrbG9nX2xvY2spOworICAgIGRlbF9mcm9tX2JhY2tsb2dfbG9ja2VkKGhkcik7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGRlbF9sZWFrKGhkcl90KiBoZHIsIGludCogc2FmZSkgeworICAgIFNjb3BlZFB0aHJlYWRNdXRleExvY2tlciBsb2NrZXIoJmxvY2spOworICAgIHJldHVybiBkZWxfYW5kX2NoZWNrX2xvY2tlZChoZHIsICZ0YWlsLCAmaGVhZCwgJmdBbGxvY2F0ZWRCbG9ja0NvdW50LCBzYWZlKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGFkZF90b19iYWNrbG9nKGhkcl90KiBoZHIpIHsKKyAgICBTY29wZWRQdGhyZWFkTXV0ZXhMb2NrZXIgbG9ja2VyKCZiYWNrbG9nX2xvY2spOworICAgIGhkci0+dGFnID0gQkFDS0xPR19UQUc7CisgICAgYmFja2xvZ19udW0rKzsKKyAgICBhZGRfbG9ja2VkKGhkciwgJmJhY2tsb2dfdGFpbCwgJmJhY2tsb2dfaGVhZCk7CisgICAgcG9pc29uKGhkcik7CisgICAgLyogSWYgd2UndmUgZXhjZWVkZWQgdGhlIG1heGltdW0gYmFja2xvZywgY2xlYXIgaXQgdXAgKi8KKyAgICB3aGlsZSAoYmFja2xvZ19udW0gPiBnTWFsbG9jRGVidWdCYWNrbG9nKSB7CisgICAgICAgIGhkcl90KiBnb25lID0gYmFja2xvZ190YWlsOworICAgICAgICBkZWxfZnJvbV9iYWNrbG9nX2xvY2tlZChnb25lKTsKKyAgICAgICAgZGxmcmVlKGdvbmUtPmJhc2UpOworICAgIH0KK30KKworZXh0ZXJuICJDIiB2b2lkKiBjaGtfbWFsbG9jKHNpemVfdCBzaXplKSB7CisvLyAgbG9nX21lc3NhZ2UoIiVzOiAlc1xuIiwgX19GSUxFX18sIF9fRlVOQ1RJT05fXyk7CisKKyAgICBoZHJfdCogaGRyID0gc3RhdGljX2Nhc3Q8aGRyX3QqPihkbG1hbGxvYyhzaXplb2YoaGRyX3QpICsgc2l6ZSArIHNpemVvZihmdHJfdCkpKTsKKyAgICBpZiAoaGRyKSB7CisgICAgICAgIGhkci0+YmFzZSA9IGhkcjsKKyAgICAgICAgaGRyLT5idF9kZXB0aCA9IGdldF9iYWNrdHJhY2UoaGRyLT5idCwgTUFYX0JBQ0tUUkFDRV9ERVBUSCk7CisgICAgICAgIGFkZChoZHIsIHNpemUpOworICAgICAgICByZXR1cm4gdXNlcihoZHIpOworICAgIH0KKyAgICByZXR1cm4gTlVMTDsKK30KKworZXh0ZXJuICJDIiB2b2lkKiBjaGtfbWVtYWxpZ24oc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IGJ5dGVzKSB7CisgICAgaWYgKGFsaWdubWVudCA8PSBNQUxMT0NfQUxJR05NRU5UKSB7CisgICAgICAgIHJldHVybiBjaGtfbWFsbG9jKGJ5dGVzKTsKKyAgICB9CisKKyAgICAvLyBNYWtlIHRoZSBhbGlnbm1lbnQgYSBwb3dlciBvZiB0d28uCisgICAgaWYgKGFsaWdubWVudCAmIChhbGlnbm1lbnQtMSkpIHsKKyAgICAgICAgYWxpZ25tZW50ID0gMUwgPDwgKDMxIC0gX19idWlsdGluX2NseihhbGlnbm1lbnQpKTsKKyAgICB9CisKKyAgICAvLyBoZXJlLCBhbGlnbm1lbnQgaXMgYXQgbGVhc3QgTUFMTE9DX0FMSUdOTUVOVDw8MSBieXRlcworICAgIC8vIHdlIHdpbGwgYWxpZ24gYnkgYXQgbGVhc3QgTUFMTE9DX0FMSUdOTUVOVCBieXRlcworICAgIC8vIGFuZCBhdCBtb3N0IGFsaWdubWVudC1NQUxMT0NfQUxJR05NRU5UIGJ5dGVzCisgICAgc2l6ZV90IHNpemUgPSAoYWxpZ25tZW50LU1BTExPQ19BTElHTk1FTlQpICsgYnl0ZXM7CisgICAgaWYgKHNpemUgPCBieXRlcykgeyAvLyBPdmVyZmxvdy4KKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgdm9pZCogYmFzZSA9IGRsbWFsbG9jKHNpemVvZihoZHJfdCkgKyBzaXplICsgc2l6ZW9mKGZ0cl90KSk7CisgICAgaWYgKGJhc2UgIT0gTlVMTCkgeworICAgICAgICAvLyBDaGVjayB0aGF0IHRoZSBhY3R1YWwgcG9pbnRlciB0aGF0IHdpbGwgYmUgcmV0dXJuZWQgaXMgYWxpZ25lZAorICAgICAgICAvLyBwcm9wZXJseS4KKyAgICAgICAgdWludHB0cl90IHB0ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pih1c2VyKHJlaW50ZXJwcmV0X2Nhc3Q8aGRyX3QqPihiYXNlKSkpOworICAgICAgICBpZiAoKHB0ciAlIGFsaWdubWVudCkgIT0gMCkgeworICAgICAgICAgICAgLy8gQWxpZ24gdGhlIHBvaW50ZXIuCisgICAgICAgICAgICBwdHIgKz0gKCgtcHRyKSAlIGFsaWdubWVudCk7CisgICAgICAgIH0KKworICAgICAgICBoZHJfdCogaGRyID0gbWV0YShyZWludGVycHJldF9jYXN0PHZvaWQqPihwdHIpKTsKKyAgICAgICAgaGRyLT5iYXNlID0gYmFzZTsKKyAgICAgICAgaGRyLT5idF9kZXB0aCA9IGdldF9iYWNrdHJhY2UoaGRyLT5idCwgTUFYX0JBQ0tUUkFDRV9ERVBUSCk7CisgICAgICAgIGFkZChoZHIsIGJ5dGVzKTsKKyAgICAgICAgcmV0dXJuIHVzZXIoaGRyKTsKKyAgICB9CisgICAgcmV0dXJuIGJhc2U7Cit9CisKK2V4dGVybiAiQyIgdm9pZCBjaGtfZnJlZSh2b2lkKiBwdHIpIHsKKy8vICBsb2dfbWVzc2FnZSgiJXM6ICVzXG4iLCBfX0ZJTEVfXywgX19GVU5DVElPTl9fKTsKKworICAgIGlmICghcHRyKSAvKiBpZ25vcmUgZnJlZShOVUxMKSAqLworICAgICAgICByZXR1cm47CisKKyAgICBoZHJfdCogaGRyID0gbWV0YShwdHIpOworCisgICAgaWYgKGRlbChoZHIpIDwgMCkgeworICAgICAgICB1aW50cHRyX3QgYnRbTUFYX0JBQ0tUUkFDRV9ERVBUSF07CisgICAgICAgIGludCBkZXB0aCA9IGdldF9iYWNrdHJhY2UoYnQsIE1BWF9CQUNLVFJBQ0VfREVQVEgpOworICAgICAgICBpZiAoaGRyLT50YWcgPT0gQkFDS0xPR19UQUcpIHsKKyAgICAgICAgICAgIGxvZ19tZXNzYWdlKCIrKysgQUxMT0NBVElPTiAlcCBTSVpFICVkIEJZVEVTIE1VTFRJUExZIEZSRUVEIVxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgdXNlcihoZHIpLCBoZHItPnNpemUpOworICAgICAgICAgICAgbG9nX21lc3NhZ2UoIisrKyBBTExPQ0FUSU9OICVwIFNJWkUgJWQgQUxMT0NBVEVEIEhFUkU6XG4iLAorICAgICAgICAgICAgICAgICAgICAgICB1c2VyKGhkciksIGhkci0+c2l6ZSk7CisgICAgICAgICAgICBsb2dfYmFja3RyYWNlKGhkci0+YnQsIGhkci0+YnRfZGVwdGgpOworICAgICAgICAgICAgLyogaGRyLT5mcmVlZF9idF9kZXB0aCBzaG91bGQgYmUgbm9uemVybyBoZXJlICovCisgICAgICAgICAgICBsb2dfbWVzc2FnZSgiKysrIEFMTE9DQVRJT04gJXAgU0laRSAlZCBGSVJTVCBGUkVFRCBIRVJFOlxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgdXNlcihoZHIpLCBoZHItPnNpemUpOworICAgICAgICAgICAgbG9nX2JhY2t0cmFjZShoZHItPmZyZWVkX2J0LCBoZHItPmZyZWVkX2J0X2RlcHRoKTsKKyAgICAgICAgICAgIGxvZ19tZXNzYWdlKCIrKysgQUxMT0NBVElPTiAlcCBTSVpFICVkIE5PVyBCRUlORyBGUkVFRCBIRVJFOlxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgdXNlcihoZHIpLCBoZHItPnNpemUpOworICAgICAgICAgICAgbG9nX2JhY2t0cmFjZShidCwgZGVwdGgpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbG9nX21lc3NhZ2UoIisrKyBBTExPQ0FUSU9OICVwIElTIENPUlJVUFRFRCBPUiBOT1QgQUxMT0NBVEVEIFZJQSBUUkFDS0VSIVxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgdXNlcihoZHIpKTsKKyAgICAgICAgICAgIGxvZ19iYWNrdHJhY2UoYnQsIGRlcHRoKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGhkci0+ZnJlZWRfYnRfZGVwdGggPSBnZXRfYmFja3RyYWNlKGhkci0+ZnJlZWRfYnQsIE1BWF9CQUNLVFJBQ0VfREVQVEgpOworICAgICAgICBhZGRfdG9fYmFja2xvZyhoZHIpOworICAgIH0KK30KKworZXh0ZXJuICJDIiB2b2lkKiBjaGtfcmVhbGxvYyh2b2lkKiBwdHIsIHNpemVfdCBzaXplKSB7CisvLyAgbG9nX21lc3NhZ2UoIiVzOiAlc1xuIiwgX19GSUxFX18sIF9fRlVOQ1RJT05fXyk7CisKKyAgICBpZiAoIXB0cikgeworICAgICAgICByZXR1cm4gY2hrX21hbGxvYyhzaXplKTsKKyAgICB9CisKKyNpZmRlZiBSRUFMTE9DX1pFUk9fQllURVNfRlJFRQorICAgIGlmICghc2l6ZSkgeworICAgICAgICBjaGtfZnJlZShwdHIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisjZW5kaWYKKworICAgIGhkcl90KiBoZHIgPSBtZXRhKHB0cik7CisKKyAgICBpZiAoZGVsKGhkcikgPCAwKSB7CisgICAgICAgIHVpbnRwdHJfdCBidFtNQVhfQkFDS1RSQUNFX0RFUFRIXTsKKyAgICAgICAgaW50IGRlcHRoID0gZ2V0X2JhY2t0cmFjZShidCwgTUFYX0JBQ0tUUkFDRV9ERVBUSCk7CisgICAgICAgIGlmIChoZHItPnRhZyA9PSBCQUNLTE9HX1RBRykgeworICAgICAgICAgICAgbG9nX21lc3NhZ2UoIisrKyBSRUFMTE9DQVRJT04gJXAgU0laRSAlZCBPRiBGUkVFRCBNRU1PUlkhXG4iLAorICAgICAgICAgICAgICAgICAgICAgICB1c2VyKGhkciksIHNpemUsIGhkci0+c2l6ZSk7CisgICAgICAgICAgICBsb2dfbWVzc2FnZSgiKysrIEFMTE9DQVRJT04gJXAgU0laRSAlZCBBTExPQ0FURUQgSEVSRTpcbiIsCisgICAgICAgICAgICAgICAgICAgICAgIHVzZXIoaGRyKSwgaGRyLT5zaXplKTsKKyAgICAgICAgICAgIGxvZ19iYWNrdHJhY2UoaGRyLT5idCwgaGRyLT5idF9kZXB0aCk7CisgICAgICAgICAgICAvKiBoZHItPmZyZWVkX2J0X2RlcHRoIHNob3VsZCBiZSBub256ZXJvIGhlcmUgKi8KKyAgICAgICAgICAgIGxvZ19tZXNzYWdlKCIrKysgQUxMT0NBVElPTiAlcCBTSVpFICVkIEZJUlNUIEZSRUVEIEhFUkU6XG4iLAorICAgICAgICAgICAgICAgICAgICAgICB1c2VyKGhkciksIGhkci0+c2l6ZSk7CisgICAgICAgICAgICBsb2dfYmFja3RyYWNlKGhkci0+ZnJlZWRfYnQsIGhkci0+ZnJlZWRfYnRfZGVwdGgpOworICAgICAgICAgICAgbG9nX21lc3NhZ2UoIisrKyBBTExPQ0FUSU9OICVwIFNJWkUgJWQgTk9XIEJFSU5HIFJFQUxMT0NBVEVEIEhFUkU6XG4iLAorICAgICAgICAgICAgICAgICAgICAgICB1c2VyKGhkciksIGhkci0+c2l6ZSk7CisgICAgICAgICAgICBsb2dfYmFja3RyYWNlKGJ0LCBkZXB0aCk7CisKKyAgICAgICAgICAgICAvKiBXZSB0YWtlIHRoZSBtZW1vcnkgb3V0IG9mIHRoZSBiYWNrbG9nIGFuZCBmYWxsIHRocm91Z2ggc28gdGhlCisgICAgICAgICAgICAgKiByZWFsbG9jYXRpb24gYmVsb3cgc3VjY2VlZHMuICBTaW5jZSB3ZSBkaWRuJ3QgcmVhbGx5IGZyZWUgaXQsIHdlCisgICAgICAgICAgICAgKiBjYW4gZGVmYXVsdCB0byB0aGlzIGJlaGF2aW9yLgorICAgICAgICAgICAgICovCisgICAgICAgICAgICBkZWxfZnJvbV9iYWNrbG9nKGhkcik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBsb2dfbWVzc2FnZSgiKysrIFJFQUxMT0NBVElPTiAlcCBTSVpFICVkIElTIENPUlJVUFRFRCBPUiBOT1QgQUxMT0NBVEVEIFZJQSBUUkFDS0VSIVxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgdXNlcihoZHIpLCBzaXplKTsKKyAgICAgICAgICAgIGxvZ19iYWNrdHJhY2UoYnQsIGRlcHRoKTsKKyAgICAgICAgICAgIC8vIGp1c3QgZ2V0IGEgd2hvbGUgbmV3IGFsbG9jYXRpb24gYW5kIGxlYWsgdGhlIG9sZCBvbmUKKyAgICAgICAgICAgIHJldHVybiBkbHJlYWxsb2MoMCwgc2l6ZSk7CisgICAgICAgICAgICAvLyByZXR1cm4gZGxyZWFsbG9jKHVzZXIoaGRyKSwgc2l6ZSk7IC8vIGFzc3VtaW5nIGl0IHdhcyBhbGxvY2F0ZWQgZXh0ZXJuYWxseQorICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGhkci0+YmFzZSAhPSBoZHIpIHsKKyAgICAgICAgLy8gQW4gYWxsb2NhdGlvbiBmcm9tIG1lbWFsaWduLCBzbyBjcmVhdGUgYW5vdGhlciBhbGxvY2F0aW9uIGFuZAorICAgICAgICAvLyBjb3B5IHRoZSBkYXRhIG91dC4KKyAgICAgICAgdm9pZCogbmV3TWVtID0gZGxtYWxsb2Moc2l6ZW9mKGhkcl90KSArIHNpemUgKyBzaXplb2YoZnRyX3QpKTsKKyAgICAgICAgaWYgKG5ld01lbSkgeworICAgICAgICAgICAgbWVtY3B5KG5ld01lbSwgaGRyLCBzaXplb2YoaGRyX3QpICsgaGRyLT5zaXplKTsKKyAgICAgICAgICAgIGRsZnJlZShoZHItPmJhc2UpOworICAgICAgICAgICAgaGRyID0gc3RhdGljX2Nhc3Q8aGRyX3QqPihuZXdNZW0pOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZGxmcmVlKGhkci0+YmFzZSk7CisgICAgICAgICAgICBoZHIgPSBOVUxMOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgaGRyID0gc3RhdGljX2Nhc3Q8aGRyX3QqPihkbHJlYWxsb2MoaGRyLCBzaXplb2YoaGRyX3QpICsgc2l6ZSArIHNpemVvZihmdHJfdCkpKTsKKyAgICB9CisgICAgaWYgKGhkcikgeworICAgICAgICBoZHItPmJhc2UgPSBoZHI7CisgICAgICAgIGhkci0+YnRfZGVwdGggPSBnZXRfYmFja3RyYWNlKGhkci0+YnQsIE1BWF9CQUNLVFJBQ0VfREVQVEgpOworICAgICAgICBhZGQoaGRyLCBzaXplKTsKKyAgICAgICAgcmV0dXJuIHVzZXIoaGRyKTsKKyAgICB9CisKKyAgICByZXR1cm4gTlVMTDsKK30KKworZXh0ZXJuICJDIiB2b2lkKiBjaGtfY2FsbG9jKGludCBubWVtYiwgc2l6ZV90IHNpemUpIHsKKy8vICBsb2dfbWVzc2FnZSgiJXM6ICVzXG4iLCBfX0ZJTEVfXywgX19GVU5DVElPTl9fKTsKKyAgICBzaXplX3QgdG90YWxfc2l6ZSA9IG5tZW1iICogc2l6ZTsKKyAgICBoZHJfdCogaGRyID0gc3RhdGljX2Nhc3Q8aGRyX3QqPihkbGNhbGxvYygxLCBzaXplb2YoaGRyX3QpICsgdG90YWxfc2l6ZSArIHNpemVvZihmdHJfdCkpKTsKKyAgICBpZiAoaGRyKSB7CisgICAgICAgIGhkci0+YmFzZSA9IGhkcjsKKyAgICAgICAgaGRyLT5idF9kZXB0aCA9IGdldF9iYWNrdHJhY2UoaGRyLT5idCwgTUFYX0JBQ0tUUkFDRV9ERVBUSCk7CisgICAgICAgIGFkZChoZHIsIHRvdGFsX3NpemUpOworICAgICAgICByZXR1cm4gdXNlcihoZHIpOworICAgIH0KKyAgICByZXR1cm4gTlVMTDsKK30KKworZXh0ZXJuICJDIiBzaXplX3QgY2hrX21hbGxvY191c2FibGVfc2l6ZShjb25zdCB2b2lkKiBwdHIpIHsKKyAgICAvLyBkbG1hbGxvY191c2FibGVfc2l6ZSByZXR1cm5zIDAgZm9yIE5VTEwgYW5kIHVua25vd24gYmxvY2tzLgorICAgIGlmIChwdHIgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBjb25zdCBoZHJfdCogaGRyID0gY29uc3RfbWV0YShwdHIpOworCisgICAgLy8gVGhlIHNlbnRpbmVsIHRhaWwgaXMgd3JpdHRlbiBqdXN0IGFmdGVyIHRoZSByZXF1ZXN0IGJsb2NrIGJ5dGVzCisgICAgLy8gc28gdGhlcmUgaXMgbm8gZXh0cmEgcm9vbSB3ZSBjYW4gcmVwb3J0IGhlcmUuCisgICAgcmV0dXJuIGhkci0+c2l6ZTsKK30KKworc3RhdGljIHZvaWQgUmVwb3J0TWVtb3J5TGVha3MoKSB7CisgIC8vIFdlIG9ubHkgdHJhY2sgbGVha3MgYXQgbGV2ZWwgMTAuCisgIGlmIChnTWFsbG9jRGVidWdMZXZlbCAhPSAxMCkgeworICAgIHJldHVybjsKKyAgfQorCisgIC8vIFVzZSAvcHJvYy9zZWxmL2V4ZSBsaW5rIHRvIG9idGFpbiB0aGUgcHJvZ3JhbSBuYW1lIGZvciBsb2dnaW5nCisgIC8vIHB1cnBvc2VzLiBJZiBpdCdzIG5vdCBhdmFpbGFibGUsIHdlIHNldCBpdCB0byAiPHVua25vd24+Ii4KKyAgY2hhciBleGVbUEFUSF9NQVhdOworICBpbnQgY291bnQ7CisgIGlmICgoY291bnQgPSByZWFkbGluaygiL3Byb2Mvc2VsZi9leGUiLCBleGUsIHNpemVvZihleGUpIC0gMSkpID09IC0xKSB7CisgICAgc3RybGNweShleGUsICI8dW5rbm93bj4iLCBzaXplb2YoZXhlKSk7CisgIH0gZWxzZSB7CisgICAgZXhlW2NvdW50XSA9ICdcMCc7CisgIH0KKworICBpZiAoZ0FsbG9jYXRlZEJsb2NrQ291bnQgPT0gMCkgeworICAgIGxvZ19tZXNzYWdlKCIrKysgJXMgZGlkIG5vdCBsZWFrIiwgZXhlKTsKKyAgICByZXR1cm47CisgIH0KKworICBzaXplX3QgaW5kZXggPSAxOworICBjb25zdCBzaXplX3QgdG90YWwgPSBnQWxsb2NhdGVkQmxvY2tDb3VudDsKKyAgd2hpbGUgKGhlYWQgIT0gTlVMTCkgeworICAgIGludCBzYWZlOworICAgIGhkcl90KiBibG9jayA9IGhlYWQ7CisgICAgbG9nX21lc3NhZ2UoIisrKyAlcyBsZWFrZWQgYmxvY2sgb2Ygc2l6ZSAlZCBhdCAlcCAobGVhayAlZCBvZiAlZCkiLAorICAgICAgICAgICAgICAgIGV4ZSwgYmxvY2stPnNpemUsIHVzZXIoYmxvY2spLCBpbmRleCsrLCB0b3RhbCk7CisgICAgaWYgKGRlbF9sZWFrKGJsb2NrLCAmc2FmZSkpIHsKKyAgICAgIC8qIHNhZmUgPT0gMSwgYmVjYXVzZSB0aGUgYWxsb2NhdGlvbiBpcyB2YWxpZCAqLworICAgICAgbG9nX2JhY2t0cmFjZShibG9jay0+YnQsIGJsb2NrLT5idF9kZXB0aCk7CisgICAgfQorICB9CisKKyAgd2hpbGUgKGJhY2tsb2dfaGVhZCAhPSBOVUxMKSB7CisgICAgZGVsX2Zyb21fYmFja2xvZyhiYWNrbG9nX3RhaWwpOworICB9Cit9CisKK2V4dGVybiAiQyIgaW50IG1hbGxvY19kZWJ1Z19pbml0aWFsaXplKCkgeworICBiYWNrdHJhY2Vfc3RhcnR1cCgpOworICByZXR1cm4gMDsKK30KKworZXh0ZXJuICJDIiB2b2lkIG1hbGxvY19kZWJ1Z19maW5hbGl6ZSgpIHsKKyAgUmVwb3J0TWVtb3J5TGVha3MoKTsKKyAgYmFja3RyYWNlX3NodXRkb3duKCk7Cit9CmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9tYWxsb2NfZGVidWdfY29tbW9uLmMgYi9saWJjL2Jpb25pYy9tYWxsb2NfZGVidWdfY29tbW9uLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI5ZmNiYzQuLjAwMDAwMDAKLS0tIGEvbGliYy9iaW9uaWMvbWFsbG9jX2RlYnVnX2NvbW1vbi5jCisrKyAvZGV2L251bGwKQEAgLTEsNDk2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0gKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiAgICBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCi0gKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQotICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAotICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKLSAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUwotICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECi0gKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0gKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotLyoKLSAqIENvbnRhaW5zIGRlZmluaXRpb24gb2Ygc3RydWN0dXJlcywgZ2xvYmFsIHZhcmlhYmxlcywgYW5kIGltcGxlbWVudGF0aW9uIG9mCi0gKiByb3V0aW5lcyB0aGF0IGFyZSB1c2VkIGJ5IG1hbGxvYyBsZWFrIGRldGVjdGlvbiBjb2RlIGFuZCBvdGhlciBjb21wb25lbnRzIGluCi0gKiB0aGUgc3lzdGVtLiBUaGUgdHJpY2sgaXMgdGhhdCBzb21lIGNvbXBvbmVudHMgZXhwZWN0IHRoZXNlIGRhdGEgYW5kCi0gKiByb3V0aW5lcyB0byBiZSBkZWZpbmVkIC8gaW1wbGVtZW50ZWQgaW4gbGliYy5zbyBsaWJyYXJ5LCByZWdhcmRsZXNzCi0gKiB3aGV0aGVyIG9yIG5vdCBNQUxMT0NfTEVBS19DSEVDSyBtYWNybyBpcyBkZWZpbmVkLiBUbyBtYWtlIHRoaW5ncyBldmVuCi0gKiBtb3JlIHRyaWNreSwgbWFsbG9jIGxlYWsgZGV0ZWN0aW9uIGNvZGUsIGltcGxlbWVudGVkIGluCi0gKiBsaWJjX21hbGxvY19kZWJ1Zy5zbyBhbHNvIHJlcXVpcmVzIGFjY2VzcyB0byB0aGVzZSB2YXJpYWJsZXMgYW5kIHJvdXRpbmVzCi0gKiAodG8gZmlsbCBhbGxvY2F0aW9uIGVudHJ5IGhhc2ggdGFibGUsIGZvciBleGFtcGxlKS4gU28sIGFsbCByZWxldmFudAotICogdmFyaWFibGVzIGFuZCByb3V0aW5lcyBhcmUgZGVmaW5lZCAvIGltcGxlbWVudGVkIGhlcmUgYW5kIGV4cG9ydGVkCi0gKiB0byBhbGwsIGxlYWsgZGV0ZWN0aW9uIGNvZGUgYW5kIG90aGVyIGNvbXBvbmVudHMgdmlhIGR5bmFtaWMgKGxpYmMuc28pLAotICogb3Igc3RhdGljIChsaWJjLmEpIGxpbmtpbmcuCi0gKi8KLQotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHB0aHJlYWQuaD4KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLSNpbmNsdWRlICJkbG1hbGxvYy5oIgotI2luY2x1ZGUgIm1hbGxvY19kZWJ1Z19jb21tb24uaCIKLQotLyoKLSAqIEluIGEgVk0gcHJvY2VzcywgdGhpcyBpcyBzZXQgdG8gMSBhZnRlciBmb3JrKClpbmcgb3V0IG9mIHp5Z290ZS4KLSAqLwotaW50IGdNYWxsb2NMZWFrWnlnb3RlQ2hpbGQgPSAwOwotCi1wdGhyZWFkX211dGV4X3QgZ0FsbG9jYXRpb25zTXV0ZXggPSBQVEhSRUFEX01VVEVYX0lOSVRJQUxJWkVSOwotSGFzaFRhYmxlIGdIYXNoVGFibGU7Ci0KLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0vLyBvdXRwdXQgZnVuY3Rpb25zCi0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1zdGF0aWMgaW50IGhhc2hfZW50cnlfY29tcGFyZShjb25zdCB2b2lkKiBhcmcxLCBjb25zdCB2b2lkKiBhcmcyKQotewotICAgIGludCByZXN1bHQ7Ci0KLSAgICBIYXNoRW50cnkqIGUxID0gKihIYXNoRW50cnkqKilhcmcxOwotICAgIEhhc2hFbnRyeSogZTIgPSAqKEhhc2hFbnRyeSoqKWFyZzI7Ci0KLSAgICAvLyBpZiBvbmUgb3IgYm90aCBhcmcgcG9pbnRlcnMgYXJlIG51bGwsIGRlYWwgZ3JhY2VmdWxseQotICAgIGlmIChlMSA9PSBOVUxMKSB7Ci0gICAgICAgIHJlc3VsdCA9IChlMiA9PSBOVUxMKSA/IDAgOiAxOwotICAgIH0gZWxzZSBpZiAoZTIgPT0gTlVMTCkgewotICAgICAgICByZXN1bHQgPSAtMTsKLSAgICB9IGVsc2UgewotICAgICAgICBzaXplX3QgbmJBbGxvYzEgPSBlMS0+YWxsb2NhdGlvbnM7Ci0gICAgICAgIHNpemVfdCBuYkFsbG9jMiA9IGUyLT5hbGxvY2F0aW9uczsKLSAgICAgICAgc2l6ZV90IHNpemUxID0gZTEtPnNpemUgJiB+U0laRV9GTEFHX01BU0s7Ci0gICAgICAgIHNpemVfdCBzaXplMiA9IGUyLT5zaXplICYgflNJWkVfRkxBR19NQVNLOwotICAgICAgICBzaXplX3QgYWxsb2MxID0gbmJBbGxvYzEgKiBzaXplMTsKLSAgICAgICAgc2l6ZV90IGFsbG9jMiA9IG5iQWxsb2MyICogc2l6ZTI7Ci0KLSAgICAgICAgLy8gc29ydCBpbiBkZXNjZW5kaW5nIG9yZGVyIGJ5OgotICAgICAgICAvLyAxKSB0b3RhbCBzaXplCi0gICAgICAgIC8vIDIpIG51bWJlciBvZiBhbGxvY2F0aW9ucwotICAgICAgICAvLwotICAgICAgICAvLyBUaGlzIGlzIHVzZWQgZm9yIHNvcnRpbmcsIG5vdCBkZXRlcm1pbmF0aW9uIG9mIGVxdWFsaXR5LCBzbyB3ZSBkb24ndAotICAgICAgICAvLyBuZWVkIHRvIGNvbXBhcmUgdGhlIGJpdCBmbGFncy4KLSAgICAgICAgaWYgKGFsbG9jMSA+IGFsbG9jMikgewotICAgICAgICAgICAgcmVzdWx0ID0gLTE7Ci0gICAgICAgIH0gZWxzZSBpZiAoYWxsb2MxIDwgYWxsb2MyKSB7Ci0gICAgICAgICAgICByZXN1bHQgPSAxOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKG5iQWxsb2MxID4gbmJBbGxvYzIpIHsKLSAgICAgICAgICAgICAgICByZXN1bHQgPSAtMTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAobmJBbGxvYzEgPCBuYkFsbG9jMikgewotICAgICAgICAgICAgICAgIHJlc3VsdCA9IDE7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHJlc3VsdCA9IDA7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotLyoKLSAqIFJldHJpZXZlIG5hdGl2ZSBoZWFwIGluZm9ybWF0aW9uLgotICoKLSAqICIqaW5mbyIgaXMgc2V0IHRvIGEgYnVmZmVyIHdlIGFsbG9jYXRlCi0gKiAiKm92ZXJhbGxTaXplIiBpcyBzZXQgdG8gdGhlIHNpemUgb2YgdGhlICJpbmZvIiBidWZmZXIKLSAqICIqaW5mb1NpemUiIGlzIHNldCB0byB0aGUgc2l6ZSBvZiBhIHNpbmdsZSBlbnRyeQotICogIip0b3RhbE1lbW9yeSIgaXMgc2V0IHRvIHRoZSBzdW0gb2YgYWxsIGFsbG9jYXRpb25zIHdlJ3JlIHRyYWNraW5nOyBkb2VzCi0gKiAgIG5vdCBpbmNsdWRlIGhlYXAgb3ZlcmhlYWQKLSAqICIqYmFja3RyYWNlU2l6ZSIgaXMgc2V0IHRvIHRoZSBtYXhpbXVtIG51bWJlciBvZiBlbnRyaWVzIGluIHRoZSBiYWNrIHRyYWNlCi0gKi8KLXZvaWQgZ2V0X21hbGxvY19sZWFrX2luZm8odWludDhfdCoqIGluZm8sIHNpemVfdCogb3ZlcmFsbFNpemUsCi0gICAgICAgIHNpemVfdCogaW5mb1NpemUsIHNpemVfdCogdG90YWxNZW1vcnksIHNpemVfdCogYmFja3RyYWNlU2l6ZSkKLXsKLSAgICAvLyBkb24ndCBkbyBhbnl0aGluZyBpZiB3ZSBoYXZlIGludmFsaWQgYXJndW1lbnRzCi0gICAgaWYgKGluZm8gPT0gTlVMTCB8fCBvdmVyYWxsU2l6ZSA9PSBOVUxMIHx8IGluZm9TaXplID09IE5VTEwgfHwKLSAgICAgICAgICAgIHRvdGFsTWVtb3J5ID09IE5VTEwgfHwgYmFja3RyYWNlU2l6ZSA9PSBOVUxMKSB7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgKnRvdGFsTWVtb3J5ID0gMDsKLQotICAgIHB0aHJlYWRfbXV0ZXhfbG9jaygmZ0FsbG9jYXRpb25zTXV0ZXgpOwotCi0gICAgaWYgKGdIYXNoVGFibGUuY291bnQgPT0gMCkgewotICAgICAgICAqaW5mbyA9IE5VTEw7Ci0gICAgICAgICpvdmVyYWxsU2l6ZSA9IDA7Ci0gICAgICAgICppbmZvU2l6ZSA9IDA7Ci0gICAgICAgICpiYWNrdHJhY2VTaXplID0gMDsKLSAgICAgICAgZ290byBkb25lOwotICAgIH0KLQotICAgIHZvaWQqKiBsaXN0ID0gKHZvaWQqKilkbG1hbGxvYyhzaXplb2Yodm9pZCopICogZ0hhc2hUYWJsZS5jb3VudCk7Ci0KLSAgICAvLyBnZXQgdGhlIGVudHJpZXMgaW50byBhbiBhcnJheSB0byBiZSBzb3J0ZWQKLSAgICBpbnQgaW5kZXggPSAwOwotICAgIGludCBpOwotICAgIGZvciAoaSA9IDAgOyBpIDwgSEFTSFRBQkxFX1NJWkUgOyBpKyspIHsKLSAgICAgICAgSGFzaEVudHJ5KiBlbnRyeSA9IGdIYXNoVGFibGUuc2xvdHNbaV07Ci0gICAgICAgIHdoaWxlIChlbnRyeSAhPSBOVUxMKSB7Ci0gICAgICAgICAgICBsaXN0W2luZGV4XSA9IGVudHJ5OwotICAgICAgICAgICAgKnRvdGFsTWVtb3J5ID0gKnRvdGFsTWVtb3J5ICsKLSAgICAgICAgICAgICAgICAoKGVudHJ5LT5zaXplICYgflNJWkVfRkxBR19NQVNLKSAqIGVudHJ5LT5hbGxvY2F0aW9ucyk7Ci0gICAgICAgICAgICBpbmRleCsrOwotICAgICAgICAgICAgZW50cnkgPSBlbnRyeS0+bmV4dDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIFhYWDogdGhlIHByb3RvY29sIGRvZXNuJ3QgYWxsb3cgdmFyaWFibGUgc2l6ZSBmb3IgdGhlIHN0YWNrIHRyYWNlICh5ZXQpCi0gICAgKmluZm9TaXplID0gKHNpemVvZihzaXplX3QpICogMikgKyAoc2l6ZW9mKGludHB0cl90KSAqIEJBQ0tUUkFDRV9TSVpFKTsKLSAgICAqb3ZlcmFsbFNpemUgPSAqaW5mb1NpemUgKiBnSGFzaFRhYmxlLmNvdW50OwotICAgICpiYWNrdHJhY2VTaXplID0gQkFDS1RSQUNFX1NJWkU7Ci0KLSAgICAvLyBub3cgZ2V0IEEgYnl0ZSBhcnJheSBiaWcgZW5vdWdoIGZvciB0aGlzCi0gICAgKmluZm8gPSAodWludDhfdCopZGxtYWxsb2MoKm92ZXJhbGxTaXplKTsKLQotICAgIGlmICgqaW5mbyA9PSBOVUxMKSB7Ci0gICAgICAgICpvdmVyYWxsU2l6ZSA9IDA7Ci0gICAgICAgIGdvdG8gb3V0X25vbWVtX2luZm87Ci0gICAgfQotCi0gICAgcXNvcnQoKHZvaWQqKWxpc3QsIGdIYXNoVGFibGUuY291bnQsIHNpemVvZih2b2lkKiksIGhhc2hfZW50cnlfY29tcGFyZSk7Ci0KLSAgICB1aW50OF90KiBoZWFkID0gKmluZm87Ci0gICAgY29uc3QgaW50IGNvdW50ID0gZ0hhc2hUYWJsZS5jb3VudDsKLSAgICBmb3IgKGkgPSAwIDsgaSA8IGNvdW50IDsgaSsrKSB7Ci0gICAgICAgIEhhc2hFbnRyeSogZW50cnkgPSBsaXN0W2ldOwotICAgICAgICBzaXplX3QgZW50cnlTaXplID0gKHNpemVvZihzaXplX3QpICogMikgKyAoc2l6ZW9mKGludHB0cl90KSAqIGVudHJ5LT5udW1FbnRyaWVzKTsKLSAgICAgICAgaWYgKGVudHJ5U2l6ZSA8ICppbmZvU2l6ZSkgewotICAgICAgICAgICAgLyogd2UncmUgd3JpdGluZyBsZXNzIHRoYW4gYSBmdWxsIGVudHJ5LCBjbGVhciBvdXQgdGhlIHJlc3QgKi8KLSAgICAgICAgICAgIG1lbXNldChoZWFkICsgZW50cnlTaXplLCAwLCAqaW5mb1NpemUgLSBlbnRyeVNpemUpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLyogbWFrZSBzdXJlIHRoZSBhbW91bnQgd2UncmUgY29weWluZyBkb2Vzbid0IGV4Y2VlZCB0aGUgbGltaXQgKi8KLSAgICAgICAgICAgIGVudHJ5U2l6ZSA9ICppbmZvU2l6ZTsKLSAgICAgICAgfQotICAgICAgICBtZW1jcHkoaGVhZCwgJihlbnRyeS0+c2l6ZSksIGVudHJ5U2l6ZSk7Ci0gICAgICAgIGhlYWQgKz0gKmluZm9TaXplOwotICAgIH0KLQotb3V0X25vbWVtX2luZm86Ci0gICAgZGxmcmVlKGxpc3QpOwotCi1kb25lOgotICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZnQWxsb2NhdGlvbnNNdXRleCk7Ci19Ci0KLXZvaWQgZnJlZV9tYWxsb2NfbGVha19pbmZvKHVpbnQ4X3QqIGluZm8pCi17Ci0gICAgZGxmcmVlKGluZm8pOwotfQotCi1zdHJ1Y3QgbWFsbGluZm8gbWFsbGluZm8oKQotewotICAgIHJldHVybiBkbG1hbGxpbmZvKCk7Ci19Ci0KLXZvaWQqIHZhbGxvYyhzaXplX3QgYnl0ZXMpIHsKLSAgICAvKiBhc3N1bWUgcGFnZSBzaXplIG9mIDQwOTYgYnl0ZXMgKi8KLSAgICByZXR1cm4gbWVtYWxpZ24oIGdldHBhZ2VzaXplKCksIGJ5dGVzICk7Ci19Ci0KLS8qIFN1cHBvcnQgZm9yIG1hbGxvYyBkZWJ1Z2dpbmcuCi0gKiBOb3RlIHRoYXQgaWYgVVNFX0RMX1BSRUZJWCBpcyBub3QgZGVmaW5lZCwgaXQncyBhc3N1bWVkIHRoYXQgbWVtb3J5Ci0gKiBhbGxvY2F0aW9uIHJvdXRpbmVzIGFyZSBpbXBsZW1lbnRlZCBzb21ld2hlcmUgZWxzZSwgc28gYWxsIG91ciBjdXN0b20KLSAqIG1hbGxvYyByb3V0aW5lcyBzaG91bGQgbm90IGJlIGNvbXBpbGVkIGF0IGFsbC4KLSAqLwotI2lmZGVmIFVTRV9ETF9QUkVGSVgKLQotLyogVGFibGUgZm9yIGRpc3BhdGNoaW5nIG1hbGxvYyBjYWxscywgaW5pdGlhbGl6ZWQgd2l0aCBkZWZhdWx0IGRpc3BhdGNoZXJzLiAqLwotY29uc3QgTWFsbG9jRGVidWcgX19saWJjX21hbGxvY19kZWZhdWx0X2Rpc3BhdGNoIF9fYXR0cmlidXRlX18oKGFsaWduZWQoMzIpKSkgPQotewotICAgIGRsbWFsbG9jLCBkbGZyZWUsIGRsY2FsbG9jLCBkbHJlYWxsb2MsIGRsbWVtYWxpZ24KLX07Ci0KLS8qIFNlbGVjdG9yIG9mIGRpc3BhdGNoIHRhYmxlIHRvIHVzZSBmb3IgZGlzcGF0Y2hpbmcgbWFsbG9jIGNhbGxzLiAqLwotY29uc3QgTWFsbG9jRGVidWcqIF9fbGliY19tYWxsb2NfZGlzcGF0Y2ggPSAmX19saWJjX21hbGxvY19kZWZhdWx0X2Rpc3BhdGNoOwotCi12b2lkKiBtYWxsb2Moc2l6ZV90IGJ5dGVzKSB7Ci0gICAgcmV0dXJuIF9fbGliY19tYWxsb2NfZGlzcGF0Y2gtPm1hbGxvYyhieXRlcyk7Ci19Ci12b2lkIGZyZWUodm9pZCogbWVtKSB7Ci0gICAgX19saWJjX21hbGxvY19kaXNwYXRjaC0+ZnJlZShtZW0pOwotfQotdm9pZCogY2FsbG9jKHNpemVfdCBuX2VsZW1lbnRzLCBzaXplX3QgZWxlbV9zaXplKSB7Ci0gICAgcmV0dXJuIF9fbGliY19tYWxsb2NfZGlzcGF0Y2gtPmNhbGxvYyhuX2VsZW1lbnRzLCBlbGVtX3NpemUpOwotfQotdm9pZCogcmVhbGxvYyh2b2lkKiBvbGRNZW0sIHNpemVfdCBieXRlcykgewotICAgIHJldHVybiBfX2xpYmNfbWFsbG9jX2Rpc3BhdGNoLT5yZWFsbG9jKG9sZE1lbSwgYnl0ZXMpOwotfQotdm9pZCogbWVtYWxpZ24oc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IGJ5dGVzKSB7Ci0gICAgcmV0dXJuIF9fbGliY19tYWxsb2NfZGlzcGF0Y2gtPm1lbWFsaWduKGFsaWdubWVudCwgYnl0ZXMpOwotfQotCi0vKiBXZSBpbXBsZW1lbnQgbWFsbG9jIGRlYnVnZ2luZyBvbmx5IGluIGxpYmMuc28sIHNvIGNvZGUgYmVsbG93Ci0gKiBtdXN0IGJlIGV4Y2x1ZGVkIGlmIHdlIGNvbXBpbGUgdGhpcyBmaWxlIGZvciBzdGF0aWMgbGliYy5hCi0gKi8KLSNpZm5kZWYgTElCQ19TVEFUSUMKLSNpbmNsdWRlIDxzeXMvc3lzdGVtX3Byb3BlcnRpZXMuaD4KLSNpbmNsdWRlIDxkbGZjbi5oPgotI2luY2x1ZGUgImxvZ2QuaCIKLQotLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS8vIGxvZyBmdW5jdGlvbnMKLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLSNkZWZpbmUgZGVidWdfbG9nKGZvcm1hdCwgLi4uKSAgXAotICAgX19saWJjX2FuZHJvaWRfbG9nX3ByaW50KEFORFJPSURfTE9HX0RFQlVHLCAibGliYyIsIChmb3JtYXQpLCAjI19fVkFfQVJHU19fICkKLSNkZWZpbmUgZXJyb3JfbG9nKGZvcm1hdCwgLi4uKSAgXAotICAgX19saWJjX2FuZHJvaWRfbG9nX3ByaW50KEFORFJPSURfTE9HX0VSUk9SLCAibGliYyIsIChmb3JtYXQpLCAjI19fVkFfQVJHU19fICkKLSNkZWZpbmUgaW5mb19sb2coZm9ybWF0LCAuLi4pICBcCi0gICBfX2xpYmNfYW5kcm9pZF9sb2dfcHJpbnQoQU5EUk9JRF9MT0dfSU5GTywgImxpYmMiLCAoZm9ybWF0KSwgIyNfX1ZBX0FSR1NfXyApCi0KLS8qIFRhYmxlIGZvciBkaXNwYXRjaGluZyBtYWxsb2MgY2FsbHMsIGRlcGVuZGluZyBvbiBlbnZpcm9ubWVudC4gKi8KLXN0YXRpYyBNYWxsb2NEZWJ1ZyBnTWFsbG9jVXNlIF9fYXR0cmlidXRlX18oKGFsaWduZWQoMzIpKSkgPSB7Ci0gICAgZGxtYWxsb2MsIGRsZnJlZSwgZGxjYWxsb2MsIGRscmVhbGxvYywgZGxtZW1hbGlnbgotfTsKLQotZXh0ZXJuIGNoYXIqICBfX3Byb2duYW1lOwotCi0vKiBIYW5kbGUgdG8gc2hhcmVkIGxpYnJhcnkgd2hlcmUgYWN0dWFsIG1lbW9yeSBhbGxvY2F0aW9uIGlzIGltcGxlbWVudGVkLgotICogVGhpcyBsaWJyYXJ5IGlzIGxvYWRlZCBhbmQgbWVtb3J5IGFsbG9jYXRpb24gY2FsbHMgYXJlIHJlZGlyZWN0ZWQgdGhlcmUKLSAqIHdoZW4gbGliYy5kZWJ1Zy5tYWxsb2MgZW52aXJvbm1lbnQgdmFyaWFibGUgY29udGFpbnMgdmFsdWUgb3RoZXIgdGhhbgotICogemVybzoKLSAqIDEgIC0gRm9yIG1lbW9yeSBsZWFrIGRldGVjdGlvbnMuCi0gKiA1ICAtIEZvciBmaWxsaW5nIGFsbG9jYXRlZCAvIGZyZWVkIG1lbW9yeSB3aXRoIHBhdHRlcm5zIGRlZmluZWQgYnkKLSAqICAgICAgQ0hLX1NFTlRJTkVMX1ZBTFVFLCBhbmQgQ0hLX0ZJTExfRlJFRSBtYWNyb3MuCi0gKiAxMCAtIEZvciBhZGRpbmcgcHJlLSwgYW5kIHBvc3QtIGFsbG9jYXRpb24gc3R1YnMgaW4gb3JkZXIgdG8gZGV0ZWN0Ci0gKiAgICAgIGJ1ZmZlciBvdmVycnVucy4KLSAqIE5vdGUgdGhhdCBlbXVsYXRvcidzIG1lbW9yeSBhbGxvY2F0aW9uIGluc3RydW1lbnRhdGlvbiBpcyBub3QgY29udHJvbGxlZCBieQotICogbGliYy5kZWJ1Zy5tYWxsb2MgdmFsdWUsIGJ1dCByYXRoZXIgYnkgZW11bGF0b3IsIHN0YXJ0ZWQgd2l0aCAtbWVtY2hlY2sKLSAqIG9wdGlvbi4gTm90ZSBhbHNvLCB0aGF0IGlmIGVtdWxhdG9yIGhhcyBzdGFydGVkIHdpdGggLW1lbWNoZWNrIG9wdGlvbiwKLSAqIGVtdWxhdG9yJ3MgaW5zdHJ1bWVudGVkIG1lbW9yeSBhbGxvY2F0aW9uIHdpbGwgdGFrZSBvdmVyIHZhbHVlIHNhdmVkIGluCi0gKiBsaWJjLmRlYnVnLm1hbGxvYy4gSW4gb3RoZXIgd29yZHMsIGlmIGVtdWxhdG9yIGhhcyBzdGFydGVkIHdpdGggLW1lbWNoZWNrCi0gKiBvcHRpb24sIGxpYmMuZGVidWcubWFsbG9jIHZhbHVlIGlzIGlnbm9yZWQuCi0gKiBBY3R1YWwgZnVuY3Rpb25hbGl0eSBmb3IgZGVidWcgbGV2ZWxzIDEtMTAgaXMgaW1wbGVtZW50ZWQgaW4KLSAqIGxpYmNfbWFsbG9jX2RlYnVnX2xlYWsuc28sIHdoaWxlIGZ1bmN0aW9uYWxpdHkgZm9yIGVtdWx0b3IncyBpbnN0cnVtZW50ZWQKLSAqIGFsbG9jYXRpb25zIGlzIGltcGxlbWVudGVkIGluIGxpYmNfbWFsbG9jX2RlYnVnX3FlbXUuc28gYW5kIGNhbiBiZSBydW4gaW5zaWRlCi0gICogdGhlIGVtdWxhdG9yIG9ubHkuCi0gKi8KLXN0YXRpYyB2b2lkKiBsaWJjX21hbGxvY19pbXBsX2hhbmRsZSA9IE5VTEw7Ci0KLS8qIE1ha2Ugc3VyZSB3ZSBoYXZlIE1BTExPQ19BTElHTk1FTlQgdGhhdCBtYXRjaGVzIHRoZSBvbmUgdGhhdCBpcwotICogdXNlZCBpbiBkbG1hbGxvYy4gRW11bGF0b3IncyBtZW1jaGVja2VyIG5lZWRzIHRoaXMgdmFsdWUgdG8gcHJvcGVybHkKLSAqIGFsaWduIGl0cyBndWFyZGluZyB6b25lcy4KLSAqLwotI2lmbmRlZiBNQUxMT0NfQUxJR05NRU5UCi0jZGVmaW5lIE1BTExPQ19BTElHTk1FTlQgKChzaXplX3QpOFUpCi0jZW5kaWYgIC8qIE1BTExPQ19BTElHTk1FTlQgKi8KLQotLyogSW5pdGlhbGl6ZXMgbWVtb3J5IGFsbG9jYXRpb24gZnJhbWV3b3JrIG9uY2UgcGVyIHByb2Nlc3MuICovCi1zdGF0aWMgdm9pZCBtYWxsb2NfaW5pdF9pbXBsKHZvaWQpCi17Ci0gICAgY29uc3QgY2hhciogc29fbmFtZSA9IE5VTEw7Ci0gICAgTWFsbG9jRGVidWdJbml0IG1hbGxvY19kZWJ1Z19pbml0aWFsaXplID0gTlVMTDsKLSAgICB1bnNpZ25lZCBpbnQgcWVtdV9ydW5uaW5nID0gMDsKLSAgICB1bnNpZ25lZCBpbnQgZGVidWdfbGV2ZWwgPSAwOwotICAgIHVuc2lnbmVkIGludCBtZW1jaGVja19lbmFibGVkID0gMDsKLSAgICBjaGFyIGVudltQUk9QX1ZBTFVFX01BWF07Ci0gICAgY2hhciBtZW1jaGVja190cmFjaW5nW1BST1BfVkFMVUVfTUFYXTsKLQotICAgIC8qIEdldCBjdXN0b20gbWFsbG9jIGRlYnVnIGxldmVsLiBOb3RlIHRoYXQgZW11bGF0b3Igc3RhcnRlZCB3aXRoCi0gICAgICogbWVtb3J5IGNoZWNraW5nIG9wdGlvbiB3aWxsIGhhdmUgcHJpb3JpdHkgb3ZlciBkZWJ1ZyBsZXZlbCBzZXQgaW4KLSAgICAgKiBsaWJjLmRlYnVnLm1hbGxvYyBzeXN0ZW0gcHJvcGVydHkuICovCi0gICAgaWYgKF9fc3lzdGVtX3Byb3BlcnR5X2dldCgicm8ua2VybmVsLnFlbXUiLCBlbnYpICYmIGF0b2koZW52KSkgewotICAgICAgICBxZW11X3J1bm5pbmcgPSAxOwotICAgICAgICBpZiAoX19zeXN0ZW1fcHJvcGVydHlfZ2V0KCJyby5rZXJuZWwubWVtY2hlY2siLCBtZW1jaGVja190cmFjaW5nKSkgewotICAgICAgICAgICAgaWYgKG1lbWNoZWNrX3RyYWNpbmdbMF0gIT0gJzAnKSB7Ci0gICAgICAgICAgICAgICAgLy8gRW11bGF0b3IgaGFzIHN0YXJ0ZWQgd2l0aCBtZW1vcnkgdHJhY2luZyBlbmFibGVkLiBFbmZvcmNlIGl0LgotICAgICAgICAgICAgICAgIGRlYnVnX2xldmVsID0gMjA7Ci0gICAgICAgICAgICAgICAgbWVtY2hlY2tfZW5hYmxlZCA9IDE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKiBJZiBkZWJ1ZyBsZXZlbCBoYXMgbm90IGJlZW4gc2V0IGJ5IG1lbWNoZWNrIG9wdGlvbiBpbiB0aGUgZW11bGF0b3IsCi0gICAgICogbGV0cyBncmFiIGl0IGZyb20gbGliYy5kZWJ1Zy5tYWxsb2Mgc3lzdGVtIHByb3BlcnR5LiAqLwotICAgIGlmICghZGVidWdfbGV2ZWwgJiYgX19zeXN0ZW1fcHJvcGVydHlfZ2V0KCJsaWJjLmRlYnVnLm1hbGxvYyIsIGVudikpIHsKLSAgICAgICAgZGVidWdfbGV2ZWwgPSBhdG9pKGVudik7Ci0gICAgfQotCi0gICAgLyogRGVidWcgbGV2ZWwgMCBtZWFucyB0aGF0IHdlIHNob3VsZCB1c2UgZGx4eHggYWxsb2NhdGlvbgotICAgICAqIHJvdXRpbmVzIChkZWZhdWx0KS4gKi8KLSAgICBpZiAoIWRlYnVnX2xldmVsKSB7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBMZXRzIHNlZSB3aGljaCAuc28gbXVzdCBiZSBsb2FkZWQgZm9yIHRoZSByZXF1ZXN0ZWQgZGVidWcgbGV2ZWwKLSAgICBzd2l0Y2ggKGRlYnVnX2xldmVsKSB7Ci0gICAgICAgIGNhc2UgMToKLSAgICAgICAgY2FzZSA1OgotICAgICAgICBjYXNlIDEwOgotICAgICAgICAgICAgc29fbmFtZSA9ICIvc3lzdGVtL2xpYi9saWJjX21hbGxvY19kZWJ1Z19sZWFrLnNvIjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIDIwOgotICAgICAgICAgICAgLy8gUXVpY2sgY2hlY2s6IGRlYnVnIGxldmVsIDIwIGNhbiBvbmx5IGJlIGhhbmRsZWQgaW4gZW11bGF0b3IuCi0gICAgICAgICAgICBpZiAoIXFlbXVfcnVubmluZykgewotICAgICAgICAgICAgICAgIGVycm9yX2xvZygiJXM6IERlYnVnIGxldmVsICVkIGNhbiBvbmx5IGJlIHNldCBpbiBlbXVsYXRvclxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgX19wcm9nbmFtZSwgZGVidWdfbGV2ZWwpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IG1lbW9yeSBjaGVja2luZyBoYXMgYmVlbiBlbmFibGVkIGluIGVtdWxhdG9yLgotICAgICAgICAgICAgaWYgKCFtZW1jaGVja19lbmFibGVkKSB7Ci0gICAgICAgICAgICAgICAgZXJyb3JfbG9nKCIlczogTWVtb3J5IGNoZWNraW5nIGlzIG5vdCBlbmFibGVkIGluIHRoZSBlbXVsYXRvclxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgX19wcm9nbmFtZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgc29fbmFtZSA9ICIvc3lzdGVtL2xpYi9saWJjX21hbGxvY19kZWJ1Z19xZW11LnNvIjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgZXJyb3JfbG9nKCIlczogRGVidWcgbGV2ZWwgJWQgaXMgdW5rbm93blxuIiwKLSAgICAgICAgICAgICAgICAgICAgICBfX3Byb2duYW1lLCBkZWJ1Z19sZXZlbCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gTG9hZCAuc28gdGhhdCBpbXBsZW1lbnRzIHRoZSByZXF1aXJlZCBtYWxsb2MgZGVidWdnaW5nIGZ1bmN0aW9uYWxpdHkuCi0gICAgbGliY19tYWxsb2NfaW1wbF9oYW5kbGUgPSBkbG9wZW4oc29fbmFtZSwgUlRMRF9MQVpZKTsKLSAgICBpZiAobGliY19tYWxsb2NfaW1wbF9oYW5kbGUgPT0gTlVMTCkgewotICAgICAgICBlcnJvcl9sb2coIiVzOiBNaXNzaW5nIG1vZHVsZSAlcyByZXF1aXJlZCBmb3IgbWFsbG9jIGRlYnVnIGxldmVsICVkXG4iLAotICAgICAgICAgICAgICAgICBfX3Byb2duYW1lLCBzb19uYW1lLCBkZWJ1Z19sZXZlbCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBJbml0aWFsaXplIG1hbGxvYyBkZWJ1Z2dpbmcgaW4gdGhlIGxvYWRlZCBtb2R1bGUuCi0gICAgbWFsbG9jX2RlYnVnX2luaXRpYWxpemUgPQotICAgICAgICAgICAgZGxzeW0obGliY19tYWxsb2NfaW1wbF9oYW5kbGUsICJtYWxsb2NfZGVidWdfaW5pdGlhbGl6ZSIpOwotICAgIGlmIChtYWxsb2NfZGVidWdfaW5pdGlhbGl6ZSA9PSBOVUxMKSB7Ci0gICAgICAgIGVycm9yX2xvZygiJXM6IEluaXRpYWxpemF0aW9uIHJvdXRpbmUgaXMgbm90IGZvdW5kIGluICVzXG4iLAotICAgICAgICAgICAgICAgICAgX19wcm9nbmFtZSwgc29fbmFtZSk7Ci0gICAgICAgIGRsY2xvc2UobGliY19tYWxsb2NfaW1wbF9oYW5kbGUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChtYWxsb2NfZGVidWdfaW5pdGlhbGl6ZSgpKSB7Ci0gICAgICAgIGRsY2xvc2UobGliY19tYWxsb2NfaW1wbF9oYW5kbGUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKGRlYnVnX2xldmVsID09IDIwKSB7Ci0gICAgICAgIC8vIEZvciBtZW1vcnkgY2hlY2tlciB3ZSBuZWVkIHRvIGRvIGV4dHJhIGluaXRpYWxpemF0aW9uLgotICAgICAgICBpbnQgKCptZW1jaGVja19pbml0aWFsaXplKShpbnQsIGNvbnN0IGNoYXIqKSA9Ci0gICAgICAgICAgICAgICAgZGxzeW0obGliY19tYWxsb2NfaW1wbF9oYW5kbGUsICJtZW1jaGVja19pbml0aWFsaXplIik7Ci0gICAgICAgIGlmIChtZW1jaGVja19pbml0aWFsaXplID09IE5VTEwpIHsKLSAgICAgICAgICAgIGVycm9yX2xvZygiJXM6IG1lbWNoZWNrX2luaXRpYWxpemUgcm91dGluZSBpcyBub3QgZm91bmQgaW4gJXNcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgX19wcm9nbmFtZSwgc29fbmFtZSk7Ci0gICAgICAgICAgICBkbGNsb3NlKGxpYmNfbWFsbG9jX2ltcGxfaGFuZGxlKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBpZiAobWVtY2hlY2tfaW5pdGlhbGl6ZShNQUxMT0NfQUxJR05NRU5ULCBtZW1jaGVja190cmFjaW5nKSkgewotICAgICAgICAgICAgZGxjbG9zZShsaWJjX21hbGxvY19pbXBsX2hhbmRsZSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBJbml0aWFsaXplIG1hbGxvYyBkaXNwYXRjaCB0YWJsZSB3aXRoIGFwcHJvcHJpYXRlIHJvdXRpbmVzLgotICAgIHN3aXRjaCAoZGVidWdfbGV2ZWwpIHsKLSAgICAgICAgY2FzZSAxOgotICAgICAgICAgICAgX19saWJjX2FuZHJvaWRfbG9nX3ByaW50KEFORFJPSURfTE9HX0lORk8sICJsaWJjIiwKLSAgICAgICAgICAgICAgICAgICAgIiVzIHVzaW5nIE1BTExPQ19ERUJVRyA9ICVkIChsZWFrIGNoZWNrZXIpXG4iLAotICAgICAgICAgICAgICAgICAgICBfX3Byb2duYW1lLCBkZWJ1Z19sZXZlbCk7Ci0gICAgICAgICAgICBnTWFsbG9jVXNlLm1hbGxvYyA9Ci0gICAgICAgICAgICAgICAgZGxzeW0obGliY19tYWxsb2NfaW1wbF9oYW5kbGUsICJsZWFrX21hbGxvYyIpOwotICAgICAgICAgICAgZ01hbGxvY1VzZS5mcmVlID0KLSAgICAgICAgICAgICAgICBkbHN5bShsaWJjX21hbGxvY19pbXBsX2hhbmRsZSwgImxlYWtfZnJlZSIpOwotICAgICAgICAgICAgZ01hbGxvY1VzZS5jYWxsb2MgPQotICAgICAgICAgICAgICAgIGRsc3ltKGxpYmNfbWFsbG9jX2ltcGxfaGFuZGxlLCAibGVha19jYWxsb2MiKTsKLSAgICAgICAgICAgIGdNYWxsb2NVc2UucmVhbGxvYyA9Ci0gICAgICAgICAgICAgICAgZGxzeW0obGliY19tYWxsb2NfaW1wbF9oYW5kbGUsICJsZWFrX3JlYWxsb2MiKTsKLSAgICAgICAgICAgIGdNYWxsb2NVc2UubWVtYWxpZ24gPQotICAgICAgICAgICAgICAgIGRsc3ltKGxpYmNfbWFsbG9jX2ltcGxfaGFuZGxlLCAibGVha19tZW1hbGlnbiIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgNToKLSAgICAgICAgICAgIF9fbGliY19hbmRyb2lkX2xvZ19wcmludChBTkRST0lEX0xPR19JTkZPLCAibGliYyIsCi0gICAgICAgICAgICAgICAgICAgICIlcyB1c2luZyBNQUxMT0NfREVCVUcgPSAlZCAoZmlsbClcbiIsCi0gICAgICAgICAgICAgICAgICAgIF9fcHJvZ25hbWUsIGRlYnVnX2xldmVsKTsKLSAgICAgICAgICAgIGdNYWxsb2NVc2UubWFsbG9jID0KLSAgICAgICAgICAgICAgICBkbHN5bShsaWJjX21hbGxvY19pbXBsX2hhbmRsZSwgImZpbGxfbWFsbG9jIik7Ci0gICAgICAgICAgICBnTWFsbG9jVXNlLmZyZWUgPQotICAgICAgICAgICAgICAgIGRsc3ltKGxpYmNfbWFsbG9jX2ltcGxfaGFuZGxlLCAiZmlsbF9mcmVlIik7Ci0gICAgICAgICAgICBnTWFsbG9jVXNlLmNhbGxvYyA9IGRsY2FsbG9jOwotICAgICAgICAgICAgZ01hbGxvY1VzZS5yZWFsbG9jID0KLSAgICAgICAgICAgICAgICBkbHN5bShsaWJjX21hbGxvY19pbXBsX2hhbmRsZSwgImZpbGxfcmVhbGxvYyIpOwotICAgICAgICAgICAgZ01hbGxvY1VzZS5tZW1hbGlnbiA9Ci0gICAgICAgICAgICAgICAgZGxzeW0obGliY19tYWxsb2NfaW1wbF9oYW5kbGUsICJmaWxsX21lbWFsaWduIik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAxMDoKLSAgICAgICAgICAgIF9fbGliY19hbmRyb2lkX2xvZ19wcmludChBTkRST0lEX0xPR19JTkZPLCAibGliYyIsCi0gICAgICAgICAgICAgICAgICAgICIlcyB1c2luZyBNQUxMT0NfREVCVUcgPSAlZCAoc2VudGluZWxzLCBmaWxsKVxuIiwKLSAgICAgICAgICAgICAgICAgICAgX19wcm9nbmFtZSwgZGVidWdfbGV2ZWwpOwotICAgICAgICAgICAgZ01hbGxvY1VzZS5tYWxsb2MgPQotICAgICAgICAgICAgICAgIGRsc3ltKGxpYmNfbWFsbG9jX2ltcGxfaGFuZGxlLCAiY2hrX21hbGxvYyIpOwotICAgICAgICAgICAgZ01hbGxvY1VzZS5mcmVlID0KLSAgICAgICAgICAgICAgICBkbHN5bShsaWJjX21hbGxvY19pbXBsX2hhbmRsZSwgImNoa19mcmVlIik7Ci0gICAgICAgICAgICBnTWFsbG9jVXNlLmNhbGxvYyA9Ci0gICAgICAgICAgICAgICAgZGxzeW0obGliY19tYWxsb2NfaW1wbF9oYW5kbGUsICJjaGtfY2FsbG9jIik7Ci0gICAgICAgICAgICBnTWFsbG9jVXNlLnJlYWxsb2MgPQotICAgICAgICAgICAgICAgIGRsc3ltKGxpYmNfbWFsbG9jX2ltcGxfaGFuZGxlLCAiY2hrX3JlYWxsb2MiKTsKLSAgICAgICAgICAgIGdNYWxsb2NVc2UubWVtYWxpZ24gPQotICAgICAgICAgICAgICAgIGRsc3ltKGxpYmNfbWFsbG9jX2ltcGxfaGFuZGxlLCAiY2hrX21lbWFsaWduIik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAyMDoKLSAgICAgICAgICAgIF9fbGliY19hbmRyb2lkX2xvZ19wcmludChBTkRST0lEX0xPR19JTkZPLCAibGliYyIsCi0gICAgICAgICAgICAgICAgIiVzWyV1XSB1c2luZyBNQUxMT0NfREVCVUcgPSAlZCAoaW5zdHJ1bWVudGVkIGZvciBlbXVsYXRvcilcbiIsCi0gICAgICAgICAgICAgICAgX19wcm9nbmFtZSwgZ2V0cGlkKCksIGRlYnVnX2xldmVsKTsKLSAgICAgICAgICAgIGdNYWxsb2NVc2UubWFsbG9jID0KLSAgICAgICAgICAgICAgICBkbHN5bShsaWJjX21hbGxvY19pbXBsX2hhbmRsZSwgInFlbXVfaW5zdHJ1bWVudGVkX21hbGxvYyIpOwotICAgICAgICAgICAgZ01hbGxvY1VzZS5mcmVlID0KLSAgICAgICAgICAgICAgICBkbHN5bShsaWJjX21hbGxvY19pbXBsX2hhbmRsZSwgInFlbXVfaW5zdHJ1bWVudGVkX2ZyZWUiKTsKLSAgICAgICAgICAgIGdNYWxsb2NVc2UuY2FsbG9jID0KLSAgICAgICAgICAgICAgICBkbHN5bShsaWJjX21hbGxvY19pbXBsX2hhbmRsZSwgInFlbXVfaW5zdHJ1bWVudGVkX2NhbGxvYyIpOwotICAgICAgICAgICAgZ01hbGxvY1VzZS5yZWFsbG9jID0KLSAgICAgICAgICAgICAgICBkbHN5bShsaWJjX21hbGxvY19pbXBsX2hhbmRsZSwgInFlbXVfaW5zdHJ1bWVudGVkX3JlYWxsb2MiKTsKLSAgICAgICAgICAgIGdNYWxsb2NVc2UubWVtYWxpZ24gPQotICAgICAgICAgICAgICAgIGRsc3ltKGxpYmNfbWFsbG9jX2ltcGxfaGFuZGxlLCAicWVtdV9pbnN0cnVtZW50ZWRfbWVtYWxpZ24iKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgLy8gTWFrZSBzdXJlIGRpc3BhdGNoIHRhYmxlIGlzIGluaXRpYWxpemVkCi0gICAgaWYgKChnTWFsbG9jVXNlLm1hbGxvYyA9PSBOVUxMKSB8fAotICAgICAgICAoZ01hbGxvY1VzZS5mcmVlID09IE5VTEwpIHx8Ci0gICAgICAgIChnTWFsbG9jVXNlLmNhbGxvYyA9PSBOVUxMKSB8fAotICAgICAgICAoZ01hbGxvY1VzZS5yZWFsbG9jID09IE5VTEwpIHx8Ci0gICAgICAgIChnTWFsbG9jVXNlLm1lbWFsaWduID09IE5VTEwpKSB7Ci0gICAgICAgIGVycm9yX2xvZygiJXM6IENhbm5vdCBpbml0aWFsaXplIG1hbGxvYyBkaXNwYXRjaCB0YWJsZSBmb3IgZGVidWcgbGV2ZWwiCi0gICAgICAgICAgICAgICAgICAiICVkOiAlcCwgJXAsICVwLCAlcCwgJXBcbiIsCi0gICAgICAgICAgICAgICAgICBfX3Byb2duYW1lLCBkZWJ1Z19sZXZlbCwKLSAgICAgICAgICAgICAgICAgIGdNYWxsb2NVc2UubWFsbG9jLCBnTWFsbG9jVXNlLmZyZWUsCi0gICAgICAgICAgICAgICAgICBnTWFsbG9jVXNlLmNhbGxvYywgZ01hbGxvY1VzZS5yZWFsbG9jLAotICAgICAgICAgICAgICAgICAgZ01hbGxvY1VzZS5tZW1hbGlnbik7Ci0gICAgICAgIGRsY2xvc2UobGliY19tYWxsb2NfaW1wbF9oYW5kbGUpOwotICAgICAgICBsaWJjX21hbGxvY19pbXBsX2hhbmRsZSA9IE5VTEw7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgX19saWJjX21hbGxvY19kaXNwYXRjaCA9ICZnTWFsbG9jVXNlOwotICAgIH0KLX0KLQotc3RhdGljIHB0aHJlYWRfb25jZV90ICBtYWxsb2NfaW5pdF9vbmNlX2N0bCA9IFBUSFJFQURfT05DRV9JTklUOwotCi0jZW5kaWYgIC8vICFMSUJDX1NUQVRJQwotI2VuZGlmICAvLyBVU0VfRExfUFJFRklYCi0KLS8qIEluaXRpYWxpemVzIG1lbW9yeSBhbGxvY2F0aW9uIGZyYW1ld29yay4KLSAqIFRoaXMgcm91dGluZSBpcyBjYWxsZWQgZnJvbSBfX2xpYmNfaW5pdCByb3V0aW5lcyBpbXBsZW1lbnRlZAotICogaW4gbGliY19pbml0X3N0YXRpYy5jIGFuZCBsaWJjX2luaXRfZHluYW1pYy5jIGZpbGVzLgotICovCi12b2lkIG1hbGxvY19kZWJ1Z19pbml0KHZvaWQpCi17Ci0gICAgLyogV2UgbmVlZCB0byBpbml0aWFsaXplIG1hbGxvYyBpZmYgd2UgaW1wbGVtZW50IGhlcmUgY3VzdG9tCi0gICAgICogbWFsbG9jIHJvdXRpbmVzIChpLmUuIFVTRV9ETF9QUkVGSVggaXMgZGVmaW5lZCkgZm9yIGxpYmMuc28gKi8KLSNpZiBkZWZpbmVkKFVTRV9ETF9QUkVGSVgpICYmICFkZWZpbmVkKExJQkNfU1RBVElDKQotICAgIGlmIChwdGhyZWFkX29uY2UoJm1hbGxvY19pbml0X29uY2VfY3RsLCBtYWxsb2NfaW5pdF9pbXBsKSkgewotICAgICAgICBlcnJvcl9sb2coIlVuYWJsZSB0byBpbml0aWFsaXplIG1hbGxvY19kZWJ1ZyBjb21wb25lbnQuIik7Ci0gICAgfQotI2VuZGlmICAvLyBVU0VfRExfUFJFRklYICYmICFMSUJDX1NUQVRJQwotfQpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvbWFsbG9jX2RlYnVnX2NvbW1vbi5jcHAgYi9saWJjL2Jpb25pYy9tYWxsb2NfZGVidWdfY29tbW9uLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jY2NlYjE0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9iaW9uaWMvbWFsbG9jX2RlYnVnX2NvbW1vbi5jcHAKQEAgLTAsMCArMSw1MjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworLyoKKyAqIENvbnRhaW5zIGRlZmluaXRpb24gb2Ygc3RydWN0dXJlcywgZ2xvYmFsIHZhcmlhYmxlcywgYW5kIGltcGxlbWVudGF0aW9uIG9mCisgKiByb3V0aW5lcyB0aGF0IGFyZSB1c2VkIGJ5IG1hbGxvYyBsZWFrIGRldGVjdGlvbiBjb2RlIGFuZCBvdGhlciBjb21wb25lbnRzIGluCisgKiB0aGUgc3lzdGVtLiBUaGUgdHJpY2sgaXMgdGhhdCBzb21lIGNvbXBvbmVudHMgZXhwZWN0IHRoZXNlIGRhdGEgYW5kCisgKiByb3V0aW5lcyB0byBiZSBkZWZpbmVkIC8gaW1wbGVtZW50ZWQgaW4gbGliYy5zbyBsaWJyYXJ5LCByZWdhcmRsZXNzCisgKiB3aGV0aGVyIG9yIG5vdCBNQUxMT0NfTEVBS19DSEVDSyBtYWNybyBpcyBkZWZpbmVkLiBUbyBtYWtlIHRoaW5ncyBldmVuCisgKiBtb3JlIHRyaWNreSwgbWFsbG9jIGxlYWsgZGV0ZWN0aW9uIGNvZGUsIGltcGxlbWVudGVkIGluCisgKiBsaWJjX21hbGxvY19kZWJ1Zy5zbyBhbHNvIHJlcXVpcmVzIGFjY2VzcyB0byB0aGVzZSB2YXJpYWJsZXMgYW5kIHJvdXRpbmVzCisgKiAodG8gZmlsbCBhbGxvY2F0aW9uIGVudHJ5IGhhc2ggdGFibGUsIGZvciBleGFtcGxlKS4gU28sIGFsbCByZWxldmFudAorICogdmFyaWFibGVzIGFuZCByb3V0aW5lcyBhcmUgZGVmaW5lZCAvIGltcGxlbWVudGVkIGhlcmUgYW5kIGV4cG9ydGVkCisgKiB0byBhbGwsIGxlYWsgZGV0ZWN0aW9uIGNvZGUgYW5kIG90aGVyIGNvbXBvbmVudHMgdmlhIGR5bmFtaWMgKGxpYmMuc28pLAorICogb3Igc3RhdGljIChsaWJjLmEpIGxpbmtpbmcuCisgKi8KKworI2luY2x1ZGUgIm1hbGxvY19kZWJ1Z19jb21tb24uaCIKKworI2luY2x1ZGUgPHB0aHJlYWQuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworI2luY2x1ZGUgImRsbWFsbG9jLmgiCisjaW5jbHVkZSAiU2NvcGVkUHRocmVhZE11dGV4TG9ja2VyLmgiCisKKy8qCisgKiBJbiBhIFZNIHByb2Nlc3MsIHRoaXMgaXMgc2V0IHRvIDEgYWZ0ZXIgZm9yaygpaW5nIG91dCBvZiB6eWdvdGUuCisgKi8KK2ludCBnTWFsbG9jTGVha1p5Z290ZUNoaWxkID0gMDsKKworcHRocmVhZF9tdXRleF90IGdBbGxvY2F0aW9uc011dGV4ID0gUFRIUkVBRF9NVVRFWF9JTklUSUFMSVpFUjsKK0hhc2hUYWJsZSBnSGFzaFRhYmxlOworCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gb3V0cHV0IGZ1bmN0aW9ucworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworc3RhdGljIGludCBoYXNoX2VudHJ5X2NvbXBhcmUoY29uc3Qgdm9pZCogYXJnMSwgY29uc3Qgdm9pZCogYXJnMikgeworICAgIGludCByZXN1bHQ7CisKKyAgICBjb25zdCBIYXNoRW50cnkqIGUxID0gKnN0YXRpY19jYXN0PEhhc2hFbnRyeSogY29uc3QqPihhcmcxKTsKKyAgICBjb25zdCBIYXNoRW50cnkqIGUyID0gKnN0YXRpY19jYXN0PEhhc2hFbnRyeSogY29uc3QqPihhcmcyKTsKKworICAgIC8vIGlmIG9uZSBvciBib3RoIGFyZyBwb2ludGVycyBhcmUgbnVsbCwgZGVhbCBncmFjZWZ1bGx5CisgICAgaWYgKGUxID09IE5VTEwpIHsKKyAgICAgICAgcmVzdWx0ID0gKGUyID09IE5VTEwpID8gMCA6IDE7CisgICAgfSBlbHNlIGlmIChlMiA9PSBOVUxMKSB7CisgICAgICAgIHJlc3VsdCA9IC0xOworICAgIH0gZWxzZSB7CisgICAgICAgIHNpemVfdCBuYkFsbG9jMSA9IGUxLT5hbGxvY2F0aW9uczsKKyAgICAgICAgc2l6ZV90IG5iQWxsb2MyID0gZTItPmFsbG9jYXRpb25zOworICAgICAgICBzaXplX3Qgc2l6ZTEgPSBlMS0+c2l6ZSAmIH5TSVpFX0ZMQUdfTUFTSzsKKyAgICAgICAgc2l6ZV90IHNpemUyID0gZTItPnNpemUgJiB+U0laRV9GTEFHX01BU0s7CisgICAgICAgIHNpemVfdCBhbGxvYzEgPSBuYkFsbG9jMSAqIHNpemUxOworICAgICAgICBzaXplX3QgYWxsb2MyID0gbmJBbGxvYzIgKiBzaXplMjsKKworICAgICAgICAvLyBzb3J0IGluIGRlc2NlbmRpbmcgb3JkZXIgYnk6CisgICAgICAgIC8vIDEpIHRvdGFsIHNpemUKKyAgICAgICAgLy8gMikgbnVtYmVyIG9mIGFsbG9jYXRpb25zCisgICAgICAgIC8vCisgICAgICAgIC8vIFRoaXMgaXMgdXNlZCBmb3Igc29ydGluZywgbm90IGRldGVybWluYXRpb24gb2YgZXF1YWxpdHksIHNvIHdlIGRvbid0CisgICAgICAgIC8vIG5lZWQgdG8gY29tcGFyZSB0aGUgYml0IGZsYWdzLgorICAgICAgICBpZiAoYWxsb2MxID4gYWxsb2MyKSB7CisgICAgICAgICAgICByZXN1bHQgPSAtMTsKKyAgICAgICAgfSBlbHNlIGlmIChhbGxvYzEgPCBhbGxvYzIpIHsKKyAgICAgICAgICAgIHJlc3VsdCA9IDE7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAobmJBbGxvYzEgPiBuYkFsbG9jMikgeworICAgICAgICAgICAgICAgIHJlc3VsdCA9IC0xOworICAgICAgICAgICAgfSBlbHNlIGlmIChuYkFsbG9jMSA8IG5iQWxsb2MyKSB7CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gMTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCisvKgorICogUmV0cmlldmUgbmF0aXZlIGhlYXAgaW5mb3JtYXRpb24uCisgKgorICogIippbmZvIiBpcyBzZXQgdG8gYSBidWZmZXIgd2UgYWxsb2NhdGUKKyAqICIqb3ZlcmFsbFNpemUiIGlzIHNldCB0byB0aGUgc2l6ZSBvZiB0aGUgImluZm8iIGJ1ZmZlcgorICogIippbmZvU2l6ZSIgaXMgc2V0IHRvIHRoZSBzaXplIG9mIGEgc2luZ2xlIGVudHJ5CisgKiAiKnRvdGFsTWVtb3J5IiBpcyBzZXQgdG8gdGhlIHN1bSBvZiBhbGwgYWxsb2NhdGlvbnMgd2UncmUgdHJhY2tpbmc7IGRvZXMKKyAqICAgbm90IGluY2x1ZGUgaGVhcCBvdmVyaGVhZAorICogIipiYWNrdHJhY2VTaXplIiBpcyBzZXQgdG8gdGhlIG1heGltdW0gbnVtYmVyIG9mIGVudHJpZXMgaW4gdGhlIGJhY2sgdHJhY2UKKyAqLworZXh0ZXJuICJDIiB2b2lkIGdldF9tYWxsb2NfbGVha19pbmZvKHVpbnQ4X3QqKiBpbmZvLCBzaXplX3QqIG92ZXJhbGxTaXplLAorICAgICAgICBzaXplX3QqIGluZm9TaXplLCBzaXplX3QqIHRvdGFsTWVtb3J5LCBzaXplX3QqIGJhY2t0cmFjZVNpemUpIHsKKyAgICAvLyBkb24ndCBkbyBhbnl0aGluZyBpZiB3ZSBoYXZlIGludmFsaWQgYXJndW1lbnRzCisgICAgaWYgKGluZm8gPT0gTlVMTCB8fCBvdmVyYWxsU2l6ZSA9PSBOVUxMIHx8IGluZm9TaXplID09IE5VTEwgfHwKKyAgICAgICAgICAgIHRvdGFsTWVtb3J5ID09IE5VTEwgfHwgYmFja3RyYWNlU2l6ZSA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgKnRvdGFsTWVtb3J5ID0gMDsKKworICAgIFNjb3BlZFB0aHJlYWRNdXRleExvY2tlciBsb2NrZXIoJmdBbGxvY2F0aW9uc011dGV4KTsKKworICAgIGlmIChnSGFzaFRhYmxlLmNvdW50ID09IDApIHsKKyAgICAgICAgKmluZm8gPSBOVUxMOworICAgICAgICAqb3ZlcmFsbFNpemUgPSAwOworICAgICAgICAqaW5mb1NpemUgPSAwOworICAgICAgICAqYmFja3RyYWNlU2l6ZSA9IDA7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBIYXNoRW50cnkqKiBsaXN0ID0gc3RhdGljX2Nhc3Q8SGFzaEVudHJ5Kio+KGRsbWFsbG9jKHNpemVvZih2b2lkKikgKiBnSGFzaFRhYmxlLmNvdW50KSk7CisKKyAgICAvLyBnZXQgdGhlIGVudHJpZXMgaW50byBhbiBhcnJheSB0byBiZSBzb3J0ZWQKKyAgICBpbnQgaW5kZXggPSAwOworICAgIGZvciAoc2l6ZV90IGkgPSAwIDsgaSA8IEhBU0hUQUJMRV9TSVpFIDsgKytpKSB7CisgICAgICAgIEhhc2hFbnRyeSogZW50cnkgPSBnSGFzaFRhYmxlLnNsb3RzW2ldOworICAgICAgICB3aGlsZSAoZW50cnkgIT0gTlVMTCkgeworICAgICAgICAgICAgbGlzdFtpbmRleF0gPSBlbnRyeTsKKyAgICAgICAgICAgICp0b3RhbE1lbW9yeSA9ICp0b3RhbE1lbW9yeSArCisgICAgICAgICAgICAgICAgKChlbnRyeS0+c2l6ZSAmIH5TSVpFX0ZMQUdfTUFTSykgKiBlbnRyeS0+YWxsb2NhdGlvbnMpOworICAgICAgICAgICAgaW5kZXgrKzsKKyAgICAgICAgICAgIGVudHJ5ID0gZW50cnktPm5leHQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBYWFg6IHRoZSBwcm90b2NvbCBkb2Vzbid0IGFsbG93IHZhcmlhYmxlIHNpemUgZm9yIHRoZSBzdGFjayB0cmFjZSAoeWV0KQorICAgICppbmZvU2l6ZSA9IChzaXplb2Yoc2l6ZV90KSAqIDIpICsgKHNpemVvZih1aW50cHRyX3QpICogQkFDS1RSQUNFX1NJWkUpOworICAgICpvdmVyYWxsU2l6ZSA9ICppbmZvU2l6ZSAqIGdIYXNoVGFibGUuY291bnQ7CisgICAgKmJhY2t0cmFjZVNpemUgPSBCQUNLVFJBQ0VfU0laRTsKKworICAgIC8vIG5vdyBnZXQgYSBieXRlIGFycmF5IGJpZyBlbm91Z2ggZm9yIHRoaXMKKyAgICAqaW5mbyA9IHN0YXRpY19jYXN0PHVpbnQ4X3QqPihkbG1hbGxvYygqb3ZlcmFsbFNpemUpKTsKKworICAgIGlmICgqaW5mbyA9PSBOVUxMKSB7CisgICAgICAgICpvdmVyYWxsU2l6ZSA9IDA7CisgICAgICAgIGRsZnJlZShsaXN0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHFzb3J0KGxpc3QsIGdIYXNoVGFibGUuY291bnQsIHNpemVvZih2b2lkKiksIGhhc2hfZW50cnlfY29tcGFyZSk7CisKKyAgICB1aW50OF90KiBoZWFkID0gKmluZm87CisgICAgY29uc3QgaW50IGNvdW50ID0gZ0hhc2hUYWJsZS5jb3VudDsKKyAgICBmb3IgKGludCBpID0gMCA7IGkgPCBjb3VudCA7ICsraSkgeworICAgICAgICBIYXNoRW50cnkqIGVudHJ5ID0gbGlzdFtpXTsKKyAgICAgICAgc2l6ZV90IGVudHJ5U2l6ZSA9IChzaXplb2Yoc2l6ZV90KSAqIDIpICsgKHNpemVvZih1aW50cHRyX3QpICogZW50cnktPm51bUVudHJpZXMpOworICAgICAgICBpZiAoZW50cnlTaXplIDwgKmluZm9TaXplKSB7CisgICAgICAgICAgICAvKiB3ZSdyZSB3cml0aW5nIGxlc3MgdGhhbiBhIGZ1bGwgZW50cnksIGNsZWFyIG91dCB0aGUgcmVzdCAqLworICAgICAgICAgICAgbWVtc2V0KGhlYWQgKyBlbnRyeVNpemUsIDAsICppbmZvU2l6ZSAtIGVudHJ5U2l6ZSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvKiBtYWtlIHN1cmUgdGhlIGFtb3VudCB3ZSdyZSBjb3B5aW5nIGRvZXNuJ3QgZXhjZWVkIHRoZSBsaW1pdCAqLworICAgICAgICAgICAgZW50cnlTaXplID0gKmluZm9TaXplOworICAgICAgICB9CisgICAgICAgIG1lbWNweShoZWFkLCAmKGVudHJ5LT5zaXplKSwgZW50cnlTaXplKTsKKyAgICAgICAgaGVhZCArPSAqaW5mb1NpemU7CisgICAgfQorCisgICAgZGxmcmVlKGxpc3QpOworfQorCitleHRlcm4gIkMiIHZvaWQgZnJlZV9tYWxsb2NfbGVha19pbmZvKHVpbnQ4X3QqIGluZm8pIHsKKyAgICBkbGZyZWUoaW5mbyk7Cit9CisKK2V4dGVybiAiQyIgc3RydWN0IG1hbGxpbmZvIG1hbGxpbmZvKCkgeworICAgIHJldHVybiBkbG1hbGxpbmZvKCk7Cit9CisKK2V4dGVybiAiQyIgdm9pZCogdmFsbG9jKHNpemVfdCBieXRlcykgeworICAgIHJldHVybiBkbHZhbGxvYyhieXRlcyk7Cit9CisKK2V4dGVybiAiQyIgdm9pZCogcHZhbGxvYyhzaXplX3QgYnl0ZXMpIHsKKyAgICByZXR1cm4gZGxwdmFsbG9jKGJ5dGVzKTsKK30KKworZXh0ZXJuICJDIiBpbnQgcG9zaXhfbWVtYWxpZ24odm9pZCoqIG1lbXB0ciwgc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IHNpemUpIHsKKyAgICByZXR1cm4gZGxwb3NpeF9tZW1hbGlnbihtZW1wdHIsIGFsaWdubWVudCwgc2l6ZSk7Cit9CisKKy8qIFN1cHBvcnQgZm9yIG1hbGxvYyBkZWJ1Z2dpbmcuCisgKiBOb3RlIHRoYXQgaWYgVVNFX0RMX1BSRUZJWCBpcyBub3QgZGVmaW5lZCwgaXQncyBhc3N1bWVkIHRoYXQgbWVtb3J5CisgKiBhbGxvY2F0aW9uIHJvdXRpbmVzIGFyZSBpbXBsZW1lbnRlZCBzb21ld2hlcmUgZWxzZSwgc28gYWxsIG91ciBjdXN0b20KKyAqIG1hbGxvYyByb3V0aW5lcyBzaG91bGQgbm90IGJlIGNvbXBpbGVkIGF0IGFsbC4KKyAqLworI2lmZGVmIFVTRV9ETF9QUkVGSVgKKworLyogVGFibGUgZm9yIGRpc3BhdGNoaW5nIG1hbGxvYyBjYWxscywgaW5pdGlhbGl6ZWQgd2l0aCBkZWZhdWx0IGRpc3BhdGNoZXJzLiAqLworZXh0ZXJuIGNvbnN0IE1hbGxvY0RlYnVnIF9fbGliY19tYWxsb2NfZGVmYXVsdF9kaXNwYXRjaDsKK2NvbnN0IE1hbGxvY0RlYnVnIF9fbGliY19tYWxsb2NfZGVmYXVsdF9kaXNwYXRjaCBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDMyKSkpID0KK3sKKyAgICBkbG1hbGxvYywgZGxmcmVlLCBkbGNhbGxvYywgZGxyZWFsbG9jLCBkbG1lbWFsaWduLCBkbG1hbGxvY191c2FibGVfc2l6ZSwKK307CisKKy8qIFNlbGVjdG9yIG9mIGRpc3BhdGNoIHRhYmxlIHRvIHVzZSBmb3IgZGlzcGF0Y2hpbmcgbWFsbG9jIGNhbGxzLiAqLworY29uc3QgTWFsbG9jRGVidWcqIF9fbGliY19tYWxsb2NfZGlzcGF0Y2ggPSAmX19saWJjX21hbGxvY19kZWZhdWx0X2Rpc3BhdGNoOworCitleHRlcm4gIkMiIHZvaWQqIG1hbGxvYyhzaXplX3QgYnl0ZXMpIHsKKyAgICByZXR1cm4gX19saWJjX21hbGxvY19kaXNwYXRjaC0+bWFsbG9jKGJ5dGVzKTsKK30KKworZXh0ZXJuICJDIiB2b2lkIGZyZWUodm9pZCogbWVtKSB7CisgICAgX19saWJjX21hbGxvY19kaXNwYXRjaC0+ZnJlZShtZW0pOworfQorCitleHRlcm4gIkMiIHZvaWQqIGNhbGxvYyhzaXplX3Qgbl9lbGVtZW50cywgc2l6ZV90IGVsZW1fc2l6ZSkgeworICAgIHJldHVybiBfX2xpYmNfbWFsbG9jX2Rpc3BhdGNoLT5jYWxsb2Mobl9lbGVtZW50cywgZWxlbV9zaXplKTsKK30KKworZXh0ZXJuICJDIiB2b2lkKiByZWFsbG9jKHZvaWQqIG9sZE1lbSwgc2l6ZV90IGJ5dGVzKSB7CisgICAgcmV0dXJuIF9fbGliY19tYWxsb2NfZGlzcGF0Y2gtPnJlYWxsb2Mob2xkTWVtLCBieXRlcyk7Cit9CisKK2V4dGVybiAiQyIgdm9pZCogbWVtYWxpZ24oc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IGJ5dGVzKSB7CisgICAgcmV0dXJuIF9fbGliY19tYWxsb2NfZGlzcGF0Y2gtPm1lbWFsaWduKGFsaWdubWVudCwgYnl0ZXMpOworfQorCitleHRlcm4gIkMiIHNpemVfdCBtYWxsb2NfdXNhYmxlX3NpemUoY29uc3Qgdm9pZCogbWVtKSB7CisgICAgcmV0dXJuIF9fbGliY19tYWxsb2NfZGlzcGF0Y2gtPm1hbGxvY191c2FibGVfc2l6ZShtZW0pOworfQorCisvKiBXZSBpbXBsZW1lbnQgbWFsbG9jIGRlYnVnZ2luZyBvbmx5IGluIGxpYmMuc28sIHNvIGNvZGUgYmVsb3cKKyAqIG11c3QgYmUgZXhjbHVkZWQgaWYgd2UgY29tcGlsZSB0aGlzIGZpbGUgZm9yIHN0YXRpYyBsaWJjLmEKKyAqLworI2lmbmRlZiBMSUJDX1NUQVRJQworI2luY2x1ZGUgPHN5cy9zeXN0ZW1fcHJvcGVydGllcy5oPgorI2luY2x1ZGUgPGRsZmNuLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlICJsaWJjX2xvZ2dpbmcuaCIKKworLyogVGFibGUgZm9yIGRpc3BhdGNoaW5nIG1hbGxvYyBjYWxscywgZGVwZW5kaW5nIG9uIGVudmlyb25tZW50LiAqLworc3RhdGljIE1hbGxvY0RlYnVnIGdNYWxsb2NVc2UgX19hdHRyaWJ1dGVfXygoYWxpZ25lZCgzMikpKSA9IHsKKyAgICBkbG1hbGxvYywgZGxmcmVlLCBkbGNhbGxvYywgZGxyZWFsbG9jLCBkbG1lbWFsaWduLCBkbG1hbGxvY191c2FibGVfc2l6ZQorfTsKKworZXh0ZXJuIGNvbnN0IGNoYXIqIF9fcHJvZ25hbWU7CisKKy8qIEhhbmRsZSB0byBzaGFyZWQgbGlicmFyeSB3aGVyZSBhY3R1YWwgbWVtb3J5IGFsbG9jYXRpb24gaXMgaW1wbGVtZW50ZWQuCisgKiBUaGlzIGxpYnJhcnkgaXMgbG9hZGVkIGFuZCBtZW1vcnkgYWxsb2NhdGlvbiBjYWxscyBhcmUgcmVkaXJlY3RlZCB0aGVyZQorICogd2hlbiBsaWJjLmRlYnVnLm1hbGxvYyBlbnZpcm9ubWVudCB2YXJpYWJsZSBjb250YWlucyB2YWx1ZSBvdGhlciB0aGFuCisgKiB6ZXJvOgorICogMSAgLSBGb3IgbWVtb3J5IGxlYWsgZGV0ZWN0aW9ucy4KKyAqIDUgIC0gRm9yIGZpbGxpbmcgYWxsb2NhdGVkIC8gZnJlZWQgbWVtb3J5IHdpdGggcGF0dGVybnMgZGVmaW5lZCBieQorICogICAgICBDSEtfU0VOVElORUxfVkFMVUUsIGFuZCBDSEtfRklMTF9GUkVFIG1hY3Jvcy4KKyAqIDEwIC0gRm9yIGFkZGluZyBwcmUtLCBhbmQgcG9zdC0gYWxsb2NhdGlvbiBzdHVicyBpbiBvcmRlciB0byBkZXRlY3QKKyAqICAgICAgYnVmZmVyIG92ZXJydW5zLgorICogTm90ZSB0aGF0IGVtdWxhdG9yJ3MgbWVtb3J5IGFsbG9jYXRpb24gaW5zdHJ1bWVudGF0aW9uIGlzIG5vdCBjb250cm9sbGVkIGJ5CisgKiBsaWJjLmRlYnVnLm1hbGxvYyB2YWx1ZSwgYnV0IHJhdGhlciBieSBlbXVsYXRvciwgc3RhcnRlZCB3aXRoIC1tZW1jaGVjaworICogb3B0aW9uLiBOb3RlIGFsc28sIHRoYXQgaWYgZW11bGF0b3IgaGFzIHN0YXJ0ZWQgd2l0aCAtbWVtY2hlY2sgb3B0aW9uLAorICogZW11bGF0b3IncyBpbnN0cnVtZW50ZWQgbWVtb3J5IGFsbG9jYXRpb24gd2lsbCB0YWtlIG92ZXIgdmFsdWUgc2F2ZWQgaW4KKyAqIGxpYmMuZGVidWcubWFsbG9jLiBJbiBvdGhlciB3b3JkcywgaWYgZW11bGF0b3IgaGFzIHN0YXJ0ZWQgd2l0aCAtbWVtY2hlY2sKKyAqIG9wdGlvbiwgbGliYy5kZWJ1Zy5tYWxsb2MgdmFsdWUgaXMgaWdub3JlZC4KKyAqIEFjdHVhbCBmdW5jdGlvbmFsaXR5IGZvciBkZWJ1ZyBsZXZlbHMgMS0xMCBpcyBpbXBsZW1lbnRlZCBpbgorICogbGliY19tYWxsb2NfZGVidWdfbGVhay5zbywgd2hpbGUgZnVuY3Rpb25hbGl0eSBmb3IgZW11bHRvcidzIGluc3RydW1lbnRlZAorICogYWxsb2NhdGlvbnMgaXMgaW1wbGVtZW50ZWQgaW4gbGliY19tYWxsb2NfZGVidWdfcWVtdS5zbyBhbmQgY2FuIGJlIHJ1biBpbnNpZGUKKyAqIHRoZSBlbXVsYXRvciBvbmx5LgorICovCitzdGF0aWMgdm9pZCogbGliY19tYWxsb2NfaW1wbF9oYW5kbGUgPSBOVUxMOworCisvKiBUaGlzIHZhcmlhYmxlIGlzIHNldCB0byB0aGUgdmFsdWUgb2YgcHJvcGVydHkgbGliYy5kZWJ1Zy5tYWxsb2MuYmFja2xvZywKKyAqIHdoZW4gdGhlIHZhbHVlIG9mIGxpYmMuZGVidWcubWFsbG9jID0gMTAuICBJdCBkZXRlcm1pbmVzIHRoZSBzaXplIG9mIHRoZQorICogYmFja2xvZyB3ZSB1c2UgdG8gZGV0ZWN0IG11bHRpcGxlIGZyZWVzLiAgSWYgdGhlIHByb3BlcnR5IGlzIG5vdCBzZXQsIHRoZQorICogYmFja2xvZyBsZW5ndGggZGVmYXVsdHMgdG8gQkFDS0xPR19ERUZBVUxUX0xFTi4KKyAqLwordW5zaWduZWQgaW50IGdNYWxsb2NEZWJ1Z0JhY2tsb2c7CisjZGVmaW5lIEJBQ0tMT0dfREVGQVVMVF9MRU4gMTAwCisKKy8qIFRoZSB2YWx1ZSBvZiBsaWJjLmRlYnVnLm1hbGxvYy4gKi8KK2ludCBnTWFsbG9jRGVidWdMZXZlbDsKKwordGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rpb25UeXBlPgordm9pZCBJbml0TWFsbG9jRnVuY3Rpb24odm9pZCogbWFsbG9jX2ltcGxfaGFuZGxlciwgRnVuY3Rpb25UeXBlKiBmdW5jLCBjb25zdCBjaGFyKiBwcmVmaXgsIGNvbnN0IGNoYXIqIHN1ZmZpeCkgeworICAgIGNoYXIgc3ltYm9sWzEyOF07CisgICAgc25wcmludGYoc3ltYm9sLCBzaXplb2Yoc3ltYm9sKSwgIiVzXyVzIiwgcHJlZml4LCBzdWZmaXgpOworICAgICpmdW5jID0gcmVpbnRlcnByZXRfY2FzdDxGdW5jdGlvblR5cGU+KGRsc3ltKG1hbGxvY19pbXBsX2hhbmRsZXIsIHN5bWJvbCkpOworICAgIGlmICgqZnVuYyA9PSBOVUxMKSB7CisgICAgICAgIGVycm9yX2xvZygiJXM6IGRsc3ltKFwiJXNcIikgZmFpbGVkIiwgX19wcm9nbmFtZSwgc3ltYm9sKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIEluaXRNYWxsb2Modm9pZCogbWFsbG9jX2ltcGxfaGFuZGxlciwgTWFsbG9jRGVidWcqIHRhYmxlLCBjb25zdCBjaGFyKiBwcmVmaXgpIHsKKyAgICBfX2xpYmNfZm9ybWF0X2xvZyhBTkRST0lEX0xPR19JTkZPLCAibGliYyIsICIlczogdXNpbmcgbGliYy5kZWJ1Zy5tYWxsb2MgJWQgKCVzKVxuIiwKKyAgICAgICAgICAgICAgICAgICAgICBfX3Byb2duYW1lLCBnTWFsbG9jRGVidWdMZXZlbCwgcHJlZml4KTsKKworICAgIEluaXRNYWxsb2NGdW5jdGlvbjxNYWxsb2NEZWJ1Z01hbGxvYz4obWFsbG9jX2ltcGxfaGFuZGxlciwgJnRhYmxlLT5tYWxsb2MsIHByZWZpeCwgIm1hbGxvYyIpOworICAgIEluaXRNYWxsb2NGdW5jdGlvbjxNYWxsb2NEZWJ1Z0ZyZWU+KG1hbGxvY19pbXBsX2hhbmRsZXIsICZ0YWJsZS0+ZnJlZSwgcHJlZml4LCAiZnJlZSIpOworICAgIEluaXRNYWxsb2NGdW5jdGlvbjxNYWxsb2NEZWJ1Z0NhbGxvYz4obWFsbG9jX2ltcGxfaGFuZGxlciwgJnRhYmxlLT5jYWxsb2MsIHByZWZpeCwgImNhbGxvYyIpOworICAgIEluaXRNYWxsb2NGdW5jdGlvbjxNYWxsb2NEZWJ1Z1JlYWxsb2M+KG1hbGxvY19pbXBsX2hhbmRsZXIsICZ0YWJsZS0+cmVhbGxvYywgcHJlZml4LCAicmVhbGxvYyIpOworICAgIEluaXRNYWxsb2NGdW5jdGlvbjxNYWxsb2NEZWJ1Z01lbWFsaWduPihtYWxsb2NfaW1wbF9oYW5kbGVyLCAmdGFibGUtPm1lbWFsaWduLCBwcmVmaXgsICJtZW1hbGlnbiIpOworICAgIEluaXRNYWxsb2NGdW5jdGlvbjxNYWxsb2NEZWJ1Z01hbGxvY1VzYWJsZVNpemU+KG1hbGxvY19pbXBsX2hhbmRsZXIsICZ0YWJsZS0+bWFsbG9jX3VzYWJsZV9zaXplLCBwcmVmaXgsICJtYWxsb2NfdXNhYmxlX3NpemUiKTsKK30KKworLyogSW5pdGlhbGl6ZXMgbWVtb3J5IGFsbG9jYXRpb24gZnJhbWV3b3JrIG9uY2UgcGVyIHByb2Nlc3MuICovCitzdGF0aWMgdm9pZCBtYWxsb2NfaW5pdF9pbXBsKCkgeworICAgIGNvbnN0IGNoYXIqIHNvX25hbWUgPSBOVUxMOworICAgIE1hbGxvY0RlYnVnSW5pdCBtYWxsb2NfZGVidWdfaW5pdGlhbGl6ZSA9IE5VTEw7CisgICAgdW5zaWduZWQgaW50IHFlbXVfcnVubmluZyA9IDA7CisgICAgdW5zaWduZWQgaW50IG1lbWNoZWNrX2VuYWJsZWQgPSAwOworICAgIGNoYXIgZW52W1BST1BfVkFMVUVfTUFYXTsKKyAgICBjaGFyIG1lbWNoZWNrX3RyYWNpbmdbUFJPUF9WQUxVRV9NQVhdOworICAgIGNoYXIgZGVidWdfcHJvZ3JhbVtQUk9QX1ZBTFVFX01BWF07CisKKyAgICAvKiBHZXQgY3VzdG9tIG1hbGxvYyBkZWJ1ZyBsZXZlbC4gTm90ZSB0aGF0IGVtdWxhdG9yIHN0YXJ0ZWQgd2l0aAorICAgICAqIG1lbW9yeSBjaGVja2luZyBvcHRpb24gd2lsbCBoYXZlIHByaW9yaXR5IG92ZXIgZGVidWcgbGV2ZWwgc2V0IGluCisgICAgICogbGliYy5kZWJ1Zy5tYWxsb2Mgc3lzdGVtIHByb3BlcnR5LiAqLworICAgIGlmIChfX3N5c3RlbV9wcm9wZXJ0eV9nZXQoInJvLmtlcm5lbC5xZW11IiwgZW52KSAmJiBhdG9pKGVudikpIHsKKyAgICAgICAgcWVtdV9ydW5uaW5nID0gMTsKKyAgICAgICAgaWYgKF9fc3lzdGVtX3Byb3BlcnR5X2dldCgicm8ua2VybmVsLm1lbWNoZWNrIiwgbWVtY2hlY2tfdHJhY2luZykpIHsKKyAgICAgICAgICAgIGlmIChtZW1jaGVja190cmFjaW5nWzBdICE9ICcwJykgeworICAgICAgICAgICAgICAgIC8vIEVtdWxhdG9yIGhhcyBzdGFydGVkIHdpdGggbWVtb3J5IHRyYWNpbmcgZW5hYmxlZC4gRW5mb3JjZSBpdC4KKyAgICAgICAgICAgICAgICBnTWFsbG9jRGVidWdMZXZlbCA9IDIwOworICAgICAgICAgICAgICAgIG1lbWNoZWNrX2VuYWJsZWQgPSAxOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLyogSWYgZGVidWcgbGV2ZWwgaGFzIG5vdCBiZWVuIHNldCBieSBtZW1jaGVjayBvcHRpb24gaW4gdGhlIGVtdWxhdG9yLAorICAgICAqIGxldHMgZ3JhYiBpdCBmcm9tIGxpYmMuZGVidWcubWFsbG9jIHN5c3RlbSBwcm9wZXJ0eS4gKi8KKyAgICBpZiAoZ01hbGxvY0RlYnVnTGV2ZWwgPT0gMCAmJiBfX3N5c3RlbV9wcm9wZXJ0eV9nZXQoImxpYmMuZGVidWcubWFsbG9jIiwgZW52KSkgeworICAgICAgICBnTWFsbG9jRGVidWdMZXZlbCA9IGF0b2koZW52KTsKKyAgICB9CisKKyAgICAvKiBEZWJ1ZyBsZXZlbCAwIG1lYW5zIHRoYXQgd2Ugc2hvdWxkIHVzZSBkbHh4eCBhbGxvY2F0aW9uCisgICAgICogcm91dGluZXMgKGRlZmF1bHQpLiAqLworICAgIGlmIChnTWFsbG9jRGVidWdMZXZlbCA9PSAwKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvKiBJZiBsaWJjLmRlYnVnLm1hbGxvYy5wcm9ncmFtIGlzIHNldCBhbmQgaXMgbm90IGEgc3Vic3RyaW5nIG9mIHByb2duYW1lLAorICAgICAqIHRoZW4gZXhpdC4KKyAgICAgKi8KKyAgICBpZiAoX19zeXN0ZW1fcHJvcGVydHlfZ2V0KCJsaWJjLmRlYnVnLm1hbGxvYy5wcm9ncmFtIiwgZGVidWdfcHJvZ3JhbSkpIHsKKyAgICAgICAgaWYgKCFzdHJzdHIoX19wcm9nbmFtZSwgZGVidWdfcHJvZ3JhbSkpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIG1rc2ggaXMgd2F5IHRvbyBsZWFreS4gaHR0cDovL2IvNzI5MTI4Ny4KKyAgICBpZiAoZ01hbGxvY0RlYnVnTGV2ZWwgPj0gMTApIHsKKyAgICAgICAgaWYgKHN0cmNtcChfX3Byb2duYW1lLCAic2giKSA9PSAwIHx8IHN0cmNtcChfX3Byb2duYW1lLCAiL3N5c3RlbS9iaW4vc2giKSA9PSAwKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBDaG9vc2UgdGhlIGFwcHJvcHJpYXRlIC5zbyBmb3IgdGhlIHJlcXVlc3RlZCBkZWJ1ZyBsZXZlbC4KKyAgICBzd2l0Y2ggKGdNYWxsb2NEZWJ1Z0xldmVsKSB7CisgICAgICAgIGNhc2UgMToKKyAgICAgICAgY2FzZSA1OgorICAgICAgICBjYXNlIDEwOiB7CisgICAgICAgICAgICBjaGFyIGRlYnVnX2JhY2tsb2dbUFJPUF9WQUxVRV9NQVhdOworICAgICAgICAgICAgaWYgKF9fc3lzdGVtX3Byb3BlcnR5X2dldCgibGliYy5kZWJ1Zy5tYWxsb2MuYmFja2xvZyIsIGRlYnVnX2JhY2tsb2cpKSB7CisgICAgICAgICAgICAgICAgZ01hbGxvY0RlYnVnQmFja2xvZyA9IGF0b2koZGVidWdfYmFja2xvZyk7CisgICAgICAgICAgICAgICAgaW5mb19sb2coIiVzOiBzZXR0aW5nIGJhY2tsb2cgbGVuZ3RoIHRvICVkXG4iLCBfX3Byb2duYW1lLCBnTWFsbG9jRGVidWdCYWNrbG9nKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChnTWFsbG9jRGVidWdCYWNrbG9nID09IDApIHsKKyAgICAgICAgICAgICAgICBnTWFsbG9jRGVidWdCYWNrbG9nID0gQkFDS0xPR19ERUZBVUxUX0xFTjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHNvX25hbWUgPSAiL3N5c3RlbS9saWIvbGliY19tYWxsb2NfZGVidWdfbGVhay5zbyI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIDIwOgorICAgICAgICAgICAgLy8gUXVpY2sgY2hlY2s6IGRlYnVnIGxldmVsIDIwIGNhbiBvbmx5IGJlIGhhbmRsZWQgaW4gZW11bGF0b3IuCisgICAgICAgICAgICBpZiAoIXFlbXVfcnVubmluZykgeworICAgICAgICAgICAgICAgIGVycm9yX2xvZygiJXM6IERlYnVnIGxldmVsICVkIGNhbiBvbmx5IGJlIHNldCBpbiBlbXVsYXRvclxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgX19wcm9nbmFtZSwgZ01hbGxvY0RlYnVnTGV2ZWwpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IG1lbW9yeSBjaGVja2luZyBoYXMgYmVlbiBlbmFibGVkIGluIGVtdWxhdG9yLgorICAgICAgICAgICAgaWYgKCFtZW1jaGVja19lbmFibGVkKSB7CisgICAgICAgICAgICAgICAgZXJyb3JfbG9nKCIlczogTWVtb3J5IGNoZWNraW5nIGlzIG5vdCBlbmFibGVkIGluIHRoZSBlbXVsYXRvclxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgX19wcm9nbmFtZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgc29fbmFtZSA9ICIvc3lzdGVtL2xpYi9saWJjX21hbGxvY19kZWJ1Z19xZW11LnNvIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgZXJyb3JfbG9nKCIlczogRGVidWcgbGV2ZWwgJWQgaXMgdW5rbm93blxuIiwgX19wcm9nbmFtZSwgZ01hbGxvY0RlYnVnTGV2ZWwpOworICAgICAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIExvYWQgLnNvIHRoYXQgaW1wbGVtZW50cyB0aGUgcmVxdWlyZWQgbWFsbG9jIGRlYnVnZ2luZyBmdW5jdGlvbmFsaXR5LgorICAgIHZvaWQqIG1hbGxvY19pbXBsX2hhbmRsZSA9IGRsb3Blbihzb19uYW1lLCBSVExEX0xBWlkpOworICAgIGlmIChtYWxsb2NfaW1wbF9oYW5kbGUgPT0gTlVMTCkgeworICAgICAgICBlcnJvcl9sb2coIiVzOiBNaXNzaW5nIG1vZHVsZSAlcyByZXF1aXJlZCBmb3IgbWFsbG9jIGRlYnVnIGxldmVsICVkOiAlcyIsCisgICAgICAgICAgICAgICAgICBfX3Byb2duYW1lLCBzb19uYW1lLCBnTWFsbG9jRGVidWdMZXZlbCwgZGxlcnJvcigpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIEluaXRpYWxpemUgbWFsbG9jIGRlYnVnZ2luZyBpbiB0aGUgbG9hZGVkIG1vZHVsZS4KKyAgICBtYWxsb2NfZGVidWdfaW5pdGlhbGl6ZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8TWFsbG9jRGVidWdJbml0PihkbHN5bShtYWxsb2NfaW1wbF9oYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1hbGxvY19kZWJ1Z19pbml0aWFsaXplIikpOworICAgIGlmIChtYWxsb2NfZGVidWdfaW5pdGlhbGl6ZSA9PSBOVUxMKSB7CisgICAgICAgIGVycm9yX2xvZygiJXM6IEluaXRpYWxpemF0aW9uIHJvdXRpbmUgaXMgbm90IGZvdW5kIGluICVzXG4iLAorICAgICAgICAgICAgICAgICAgX19wcm9nbmFtZSwgc29fbmFtZSk7CisgICAgICAgIGRsY2xvc2UobWFsbG9jX2ltcGxfaGFuZGxlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAobWFsbG9jX2RlYnVnX2luaXRpYWxpemUoKSA9PSAtMSkgeworICAgICAgICBkbGNsb3NlKG1hbGxvY19pbXBsX2hhbmRsZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoZ01hbGxvY0RlYnVnTGV2ZWwgPT0gMjApIHsKKyAgICAgICAgLy8gRm9yIG1lbW9yeSBjaGVja2VyIHdlIG5lZWQgdG8gZG8gZXh0cmEgaW5pdGlhbGl6YXRpb24uCisgICAgICAgIHR5cGVkZWYgaW50ICgqTWVtQ2hlY2tJbml0KShpbnQsIGNvbnN0IGNoYXIqKTsKKyAgICAgICAgTWVtQ2hlY2tJbml0IG1lbWNoZWNrX2luaXRpYWxpemUgPQorICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxNZW1DaGVja0luaXQ+KGRsc3ltKG1hbGxvY19pbXBsX2hhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWVtY2hlY2tfaW5pdGlhbGl6ZSIpKTsKKyAgICAgICAgaWYgKG1lbWNoZWNrX2luaXRpYWxpemUgPT0gTlVMTCkgeworICAgICAgICAgICAgZXJyb3JfbG9nKCIlczogbWVtY2hlY2tfaW5pdGlhbGl6ZSByb3V0aW5lIGlzIG5vdCBmb3VuZCBpbiAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICBfX3Byb2duYW1lLCBzb19uYW1lKTsKKyAgICAgICAgICAgIGRsY2xvc2UobWFsbG9jX2ltcGxfaGFuZGxlKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtZW1jaGVja19pbml0aWFsaXplKE1BTExPQ19BTElHTk1FTlQsIG1lbWNoZWNrX3RyYWNpbmcpKSB7CisgICAgICAgICAgICBkbGNsb3NlKG1hbGxvY19pbXBsX2hhbmRsZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKKworICAgIC8vIEluaXRpYWxpemUgbWFsbG9jIGRpc3BhdGNoIHRhYmxlIHdpdGggYXBwcm9wcmlhdGUgcm91dGluZXMuCisgICAgc3dpdGNoIChnTWFsbG9jRGVidWdMZXZlbCkgeworICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICBJbml0TWFsbG9jKG1hbGxvY19pbXBsX2hhbmRsZSwgJmdNYWxsb2NVc2UsICJsZWFrIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSA1OgorICAgICAgICAgICAgSW5pdE1hbGxvYyhtYWxsb2NfaW1wbF9oYW5kbGUsICZnTWFsbG9jVXNlLCAiZmlsbCIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMTA6CisgICAgICAgICAgICBJbml0TWFsbG9jKG1hbGxvY19pbXBsX2hhbmRsZSwgJmdNYWxsb2NVc2UsICJjaGsiKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDIwOgorICAgICAgICAgICAgSW5pdE1hbGxvYyhtYWxsb2NfaW1wbF9oYW5kbGUsICZnTWFsbG9jVXNlLCAicWVtdV9pbnN0cnVtZW50ZWQiKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgLy8gTWFrZSBzdXJlIGRpc3BhdGNoIHRhYmxlIGlzIGluaXRpYWxpemVkCisgICAgaWYgKChnTWFsbG9jVXNlLm1hbGxvYyA9PSBOVUxMKSB8fAorICAgICAgICAoZ01hbGxvY1VzZS5mcmVlID09IE5VTEwpIHx8CisgICAgICAgIChnTWFsbG9jVXNlLmNhbGxvYyA9PSBOVUxMKSB8fAorICAgICAgICAoZ01hbGxvY1VzZS5yZWFsbG9jID09IE5VTEwpIHx8CisgICAgICAgIChnTWFsbG9jVXNlLm1lbWFsaWduID09IE5VTEwpIHx8CisgICAgICAgIChnTWFsbG9jVXNlLm1hbGxvY191c2FibGVfc2l6ZSA9PSBOVUxMKSkgeworICAgICAgICBlcnJvcl9sb2coIiVzOiBzb21lIHN5bWJvbHMgZm9yIGxpYmMuZGVidWcubWFsbG9jIGxldmVsICVkIHdlcmUgbm90IGZvdW5kIChzZWUgYWJvdmUpIiwKKyAgICAgICAgICAgICAgICAgIF9fcHJvZ25hbWUsIGdNYWxsb2NEZWJ1Z0xldmVsKTsKKyAgICAgICAgZGxjbG9zZShtYWxsb2NfaW1wbF9oYW5kbGUpOworICAgIH0gZWxzZSB7CisgICAgICAgIF9fbGliY19tYWxsb2NfZGlzcGF0Y2ggPSAmZ01hbGxvY1VzZTsKKyAgICAgICAgbGliY19tYWxsb2NfaW1wbF9oYW5kbGUgPSBtYWxsb2NfaW1wbF9oYW5kbGU7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBtYWxsb2NfZmluaV9pbXBsKCkgeworICAgIC8vIE91ciBCU0Qgc3RkaW8gaW1wbGVtZW50YXRpb24gZG9lc24ndCBjbG9zZSB0aGUgc3RhbmRhcmQgc3RyZWFtcywgaXQgb25seSBmbHVzaGVzIHRoZW0uCisgICAgLy8gQW5kIGl0IGRvZXNuJ3QgZG8gdGhhdCB1bnRpbCBpdHMgYXRleGl0IGhhbmRsZXIgKF9jbGVhbnVwKSBpcyBydW4sIGFuZCB3ZSBydW4gZmlyc3QhCisgICAgLy8gSXQncyBncmVhdCB0aGF0IG90aGVyIHVuY2xvc2VkIEZJTEUqcyBzaG93IHVwIGFzIG1hbGxvYyBsZWFrcywgYnV0IHdlIG5lZWQgdG8gbWFudWFsbHkKKyAgICAvLyBjbGVhbiB1cCB0aGUgc3RhbmRhcmQgc3RyZWFtcyBvdXJzZWx2ZXMuCisgICAgZmNsb3NlKHN0ZGluKTsKKyAgICBmY2xvc2Uoc3Rkb3V0KTsKKyAgICBmY2xvc2Uoc3RkZXJyKTsKKworICAgIGlmIChsaWJjX21hbGxvY19pbXBsX2hhbmRsZSAhPSBOVUxMKSB7CisgICAgICAgIE1hbGxvY0RlYnVnRmluaSBtYWxsb2NfZGVidWdfZmluYWxpemUgPQorICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxNYWxsb2NEZWJ1Z0Zpbmk+KGRsc3ltKGxpYmNfbWFsbG9jX2ltcGxfaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtYWxsb2NfZGVidWdfZmluYWxpemUiKSk7CisgICAgICAgIGlmIChtYWxsb2NfZGVidWdfZmluYWxpemUgIT0gTlVMTCkgeworICAgICAgICAgICAgbWFsbG9jX2RlYnVnX2ZpbmFsaXplKCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3N0YXRpYyBwdGhyZWFkX29uY2VfdCAgbWFsbG9jX2luaXRfb25jZV9jdGwgPSBQVEhSRUFEX09OQ0VfSU5JVDsKK3N0YXRpYyBwdGhyZWFkX29uY2VfdCAgbWFsbG9jX2Zpbmlfb25jZV9jdGwgPSBQVEhSRUFEX09OQ0VfSU5JVDsKKworI2VuZGlmICAvLyAhTElCQ19TVEFUSUMKKyNlbmRpZiAgLy8gVVNFX0RMX1BSRUZJWAorCisvKiBJbml0aWFsaXplcyBtZW1vcnkgYWxsb2NhdGlvbiBmcmFtZXdvcmsuCisgKiBUaGlzIHJvdXRpbmUgaXMgY2FsbGVkIGZyb20gX19saWJjX2luaXQgcm91dGluZXMgaW1wbGVtZW50ZWQKKyAqIGluIGxpYmNfaW5pdF9zdGF0aWMuYyBhbmQgbGliY19pbml0X2R5bmFtaWMuYyBmaWxlcy4KKyAqLworZXh0ZXJuICJDIiBfX0xJQkNfSElEREVOX18gdm9pZCBtYWxsb2NfZGVidWdfaW5pdCgpIHsKKyAgICAvKiBXZSBuZWVkIHRvIGluaXRpYWxpemUgbWFsbG9jIGlmZiB3ZSBpbXBsZW1lbnQgaGVyZSBjdXN0b20KKyAgICAgKiBtYWxsb2Mgcm91dGluZXMgKGkuZS4gVVNFX0RMX1BSRUZJWCBpcyBkZWZpbmVkKSBmb3IgbGliYy5zbyAqLworI2lmIGRlZmluZWQoVVNFX0RMX1BSRUZJWCkgJiYgIWRlZmluZWQoTElCQ19TVEFUSUMpCisgICAgaWYgKHB0aHJlYWRfb25jZSgmbWFsbG9jX2luaXRfb25jZV9jdGwsIG1hbGxvY19pbml0X2ltcGwpKSB7CisgICAgICAgIGVycm9yX2xvZygiVW5hYmxlIHRvIGluaXRpYWxpemUgbWFsbG9jX2RlYnVnIGNvbXBvbmVudC4iKTsKKyAgICB9CisjZW5kaWYgIC8vIFVTRV9ETF9QUkVGSVggJiYgIUxJQkNfU1RBVElDCit9CisKK2V4dGVybiAiQyIgX19MSUJDX0hJRERFTl9fIHZvaWQgbWFsbG9jX2RlYnVnX2ZpbmkoKSB7CisgICAgLyogV2UgbmVlZCB0byBmaW5hbGl6ZSBtYWxsb2MgaWZmIHdlIGltcGxlbWVudCBoZXJlIGN1c3RvbQorICAgICAqIG1hbGxvYyByb3V0aW5lcyAoaS5lLiBVU0VfRExfUFJFRklYIGlzIGRlZmluZWQpIGZvciBsaWJjLnNvICovCisjaWYgZGVmaW5lZChVU0VfRExfUFJFRklYKSAmJiAhZGVmaW5lZChMSUJDX1NUQVRJQykKKyAgICBpZiAocHRocmVhZF9vbmNlKCZtYWxsb2NfZmluaV9vbmNlX2N0bCwgbWFsbG9jX2ZpbmlfaW1wbCkpIHsKKyAgICAgICAgZXJyb3JfbG9nKCJVbmFibGUgdG8gZmluYWxpemUgbWFsbG9jX2RlYnVnIGNvbXBvbmVudC4iKTsKKyAgICB9CisjZW5kaWYgIC8vIFVTRV9ETF9QUkVGSVggJiYgIUxJQkNfU1RBVElDCit9CmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9tYWxsb2NfZGVidWdfY29tbW9uLmggYi9saWJjL2Jpb25pYy9tYWxsb2NfZGVidWdfY29tbW9uLmgKaW5kZXggODc2MDBkNi4uYTNmOTkwOSAxMDA2NDQKLS0tIGEvbGliYy9iaW9uaWMvbWFsbG9jX2RlYnVnX2NvbW1vbi5oCisrKyBiL2xpYmMvYmlvbmljL21hbGxvY19kZWJ1Z19jb21tb24uaApAQCAtMzMsOSArMzMsOSBAQAogI2lmbmRlZiBNQUxMT0NfREVCVUdfQ09NTU9OX0gKICNkZWZpbmUgTUFMTE9DX0RFQlVHX0NPTU1PTl9ICiAKLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIiB7Ci0jZW5kaWYKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworI2luY2x1ZGUgImxpYmNfbG9nZ2luZy5oIgogCiAjZGVmaW5lIEhBU0hUQUJMRV9TSVpFICAgICAgMTU0MwogI2RlZmluZSBCQUNLVFJBQ0VfU0laRSAgICAgIDMyCkBAIC00NSwxMSArNDUsMTUgQEAKIAogI2RlZmluZSBNQVhfU0laRV9UICAgICAgICAgICAofihzaXplX3QpMCkKIAorLy8gVGhpcyBtdXN0IG1hdGNoIHRoZSBhbGlnbm1lbnQgdXNlZCBieSBkbG1hbGxvYy4KKyNpZm5kZWYgTUFMTE9DX0FMSUdOTUVOVAorI2RlZmluZSBNQUxMT0NfQUxJR05NRU5UICgoc2l6ZV90KSgyICogc2l6ZW9mKHZvaWQgKikpKQorI2VuZGlmCisKIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAvLyBTdHJ1Y3R1cmVzCiAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCi10eXBlZGVmIHN0cnVjdCBIYXNoRW50cnkgSGFzaEVudHJ5Owogc3RydWN0IEhhc2hFbnRyeSB7CiAgICAgc2l6ZV90IHNsb3Q7CiAgICAgSGFzaEVudHJ5KiBwcmV2OwpAQCAtNTgsNDIgKzYyLDU0IEBACiAgICAgLy8gZmllbGRzIGFib3ZlICJzaXplIiBhcmUgTk9UIHNlbnQgdG8gdGhlIGhvc3QKICAgICBzaXplX3Qgc2l6ZTsKICAgICBzaXplX3QgYWxsb2NhdGlvbnM7Ci0gICAgaW50cHRyX3QgYmFja3RyYWNlWzBdOworICAgIHVpbnRwdHJfdCBiYWNrdHJhY2VbMF07CiB9OwogCi10eXBlZGVmIHN0cnVjdCBIYXNoVGFibGUgSGFzaFRhYmxlOwogc3RydWN0IEhhc2hUYWJsZSB7CiAgICAgc2l6ZV90IGNvdW50OwogICAgIEhhc2hFbnRyeSogc2xvdHNbSEFTSFRBQkxFX1NJWkVdOwogfTsKIAogLyogRW50cnkgaW4gbWFsbG9jIGRpc3BhdGNoIHRhYmxlLiAqLwotdHlwZWRlZiBzdHJ1Y3QgTWFsbG9jRGVidWcgTWFsbG9jRGVidWc7Cit0eXBlZGVmIHZvaWQqICgqTWFsbG9jRGVidWdNYWxsb2MpKHNpemVfdCk7Cit0eXBlZGVmIHZvaWQgKCpNYWxsb2NEZWJ1Z0ZyZWUpKHZvaWQqKTsKK3R5cGVkZWYgdm9pZCogKCpNYWxsb2NEZWJ1Z0NhbGxvYykoc2l6ZV90LCBzaXplX3QpOwordHlwZWRlZiB2b2lkKiAoKk1hbGxvY0RlYnVnUmVhbGxvYykodm9pZCosIHNpemVfdCk7Cit0eXBlZGVmIHZvaWQqICgqTWFsbG9jRGVidWdNZW1hbGlnbikoc2l6ZV90LCBzaXplX3QpOwordHlwZWRlZiBzaXplX3QgKCpNYWxsb2NEZWJ1Z01hbGxvY1VzYWJsZVNpemUpKGNvbnN0IHZvaWQqKTsKIHN0cnVjdCBNYWxsb2NEZWJ1ZyB7Ci0gICAgLyogQWRkcmVzcyBvZiB0aGUgYWN0dWFsIG1hbGxvYyByb3V0aW5lLiAqLwotICAgIHZvaWQqICgqbWFsbG9jKShzaXplX3QgYnl0ZXMpOwotICAgIC8qIEFkZHJlc3Mgb2YgdGhlIGFjdHVhbCBmcmVlIHJvdXRpbmUuICovCi0gICAgdm9pZCAgKCpmcmVlKSh2b2lkKiBtZW0pOwotICAgIC8qIEFkZHJlc3Mgb2YgdGhlIGFjdHVhbCBjYWxsb2Mgcm91dGluZS4gKi8KLSAgICB2b2lkKiAoKmNhbGxvYykoc2l6ZV90IG5fZWxlbWVudHMsIHNpemVfdCBlbGVtX3NpemUpOwotICAgIC8qIEFkZHJlc3Mgb2YgdGhlIGFjdHVhbCByZWFsbG9jIHJvdXRpbmUuICovCi0gICAgdm9pZCogKCpyZWFsbG9jKSh2b2lkKiBvbGRNZW0sIHNpemVfdCBieXRlcyk7Ci0gICAgLyogQWRkcmVzcyBvZiB0aGUgYWN0dWFsIG1lbWFsaWduIHJvdXRpbmUuICovCi0gICAgdm9pZCogKCptZW1hbGlnbikoc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IGJ5dGVzKTsKKyAgTWFsbG9jRGVidWdNYWxsb2MgbWFsbG9jOworICBNYWxsb2NEZWJ1Z0ZyZWUgZnJlZTsKKyAgTWFsbG9jRGVidWdDYWxsb2MgY2FsbG9jOworICBNYWxsb2NEZWJ1Z1JlYWxsb2MgcmVhbGxvYzsKKyAgTWFsbG9jRGVidWdNZW1hbGlnbiBtZW1hbGlnbjsKKyAgTWFsbG9jRGVidWdNYWxsb2NVc2FibGVTaXplIG1hbGxvY191c2FibGVfc2l6ZTsKIH07CiAKLS8qIE1hbGxvYyBkZWJ1Z2dpbmcgaW5pdGlhbGl6YXRpb24gcm91dGluZS4KLSAqIFRoaXMgcm91dGluZSBtdXN0IGJlIGltcGxlbWVudGVkIGluIC5zbyBtb2R1bGVzIHRoYXQgaW1wbGVtZW50IG1hbGxvYwotICogZGVidWdnaW5nLiBUaGlzIHJvdXRpbmUgaXMgY2FsbGVkIG9uY2UgcGVyIHByb2Nlc3MgZnJvbSBtYWxsb2NfaW5pdF9pbXBsCi0gKiByb3V0aW5lIGltcGxlbWVudGVkIGluIGJpb25pYy9saWJjL2Jpb25pYy9tYWxsb2NfZGVidWdfY29tbW9uLmMgd2hlbiBtYWxsb2MKKy8qIE1hbGxvYyBkZWJ1Z2dpbmcgaW5pdGlhbGl6YXRpb24gYW5kIGZpbmFsaXphdGlvbiByb3V0aW5lcy4KKyAqCisgKiBUaGVzZSByb3V0aW5lcyBtdXN0IGJlIGltcGxlbWVudGVkIGluIC5zbyBtb2R1bGVzIHRoYXQgaW1wbGVtZW50IG1hbGxvYworICogZGVidWdnaW5nLiBUaGUgYXJlIGlzIGNhbGxlZCBvbmNlIHBlciBwcm9jZXNzIGZyb20gbWFsbG9jX2luaXRfaW1wbCBhbmQKKyAqIG1hbGxvY19maW5pX2ltcGwgcmVzcGVjdGl2ZWx5LgorICoKKyAqIFRoZXkgYXJlIGltcGxlbWVudGVkIGluIGJpb25pYy9saWJjL2Jpb25pYy9tYWxsb2NfZGVidWdfY29tbW9uLmMgd2hlbiBtYWxsb2MKICAqIGRlYnVnZ2luZyBnZXRzIGluaXRpYWxpemVkIGZvciB0aGUgcHJvY2Vzcy4KLSAqIFJldHVybjoKLSAqICAwIG9uIHN1Y2Nlc3MsIC0xIG9uIGZhaWx1cmUuCisgKgorICogTWFsbG9jRGVidWdJbml0IHJldHVybnM6CisgKiAgICAwIG9uIHN1Y2Nlc3MsIC0xIG9uIGZhaWx1cmUuCiAgKi8KLXR5cGVkZWYgaW50ICgqTWFsbG9jRGVidWdJbml0KSh2b2lkKTsKK3R5cGVkZWYgaW50ICgqTWFsbG9jRGVidWdJbml0KSgpOwordHlwZWRlZiB2b2lkICgqTWFsbG9jRGVidWdGaW5pKSgpOwogCi0jaWZkZWYgX19jcGx1c3BsdXMKLX07ICAvKiBlbmQgb2YgZXh0ZXJuICJDIiAqLwotI2VuZGlmCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gbG9nIGZ1bmN0aW9ucworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworI2RlZmluZSBkZWJ1Z19sb2coZm9ybWF0LCAuLi4pICBcCisgICAgX19saWJjX2Zvcm1hdF9sb2coQU5EUk9JRF9MT0dfREVCVUcsICJtYWxsb2NfbGVha19jaGVjayIsIChmb3JtYXQpLCAjI19fVkFfQVJHU19fICkKKyNkZWZpbmUgZXJyb3JfbG9nKGZvcm1hdCwgLi4uKSAgXAorICAgIF9fbGliY19mb3JtYXRfbG9nKEFORFJPSURfTE9HX0VSUk9SLCAibWFsbG9jX2xlYWtfY2hlY2siLCAoZm9ybWF0KSwgIyNfX1ZBX0FSR1NfXyApCisjZGVmaW5lIGluZm9fbG9nKGZvcm1hdCwgLi4uKSAgXAorICAgIF9fbGliY19mb3JtYXRfbG9nKEFORFJPSURfTE9HX0lORk8sICJtYWxsb2NfbGVha19jaGVjayIsIChmb3JtYXQpLCAjI19fVkFfQVJHU19fICkKIAogI2VuZGlmICAvLyBNQUxMT0NfREVCVUdfQ09NTU9OX0gKZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL21hbGxvY19kZWJ1Z19sZWFrLmMgYi9saWJjL2Jpb25pYy9tYWxsb2NfZGVidWdfbGVhay5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNTg0NTAyLi4wMDAwMDAwCi0tLSBhL2xpYmMvYmlvbmljL21hbGxvY19kZWJ1Z19sZWFrLmMKKysrIC9kZXYvbnVsbApAQCAtMSw2NTYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqICAgIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKLSAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi0gKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCi0gKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAotICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCi0gKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKLSAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSA8ZGxmY24uaD4KLSNpbmNsdWRlIDxlcnJuby5oPgotI2luY2x1ZGUgPGZjbnRsLmg+Ci0jaW5jbHVkZSA8cHRocmVhZC5oPgotI2luY2x1ZGUgPHN0ZGFyZy5oPgotI2luY2x1ZGUgPHN0ZGRlZi5oPgotI2luY2x1ZGUgPHN0ZGludC5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0jaW5jbHVkZSA8dW53aW5kLmg+Ci0KLSNpbmNsdWRlIDxhcnBhL2luZXQuaD4KLSNpbmNsdWRlIDxzeXMvc2VsZWN0Lmg+Ci0jaW5jbHVkZSA8c3lzL3NvY2tldC5oPgotI2luY2x1ZGUgPHN5cy9zeXN0ZW1fcHJvcGVydGllcy5oPgotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPHN5cy91bi5oPgotCi0jaW5jbHVkZSAiZGxtYWxsb2MuaCIKLSNpbmNsdWRlICJsb2dkLmgiCi0jaW5jbHVkZSAibWFsbG9jX2RlYnVnX2NvbW1vbi5oIgotCi0vLyBUaGlzIGZpbGUgc2hvdWxkIGJlIGluY2x1ZGVkIGludG8gdGhlIGJ1aWxkIG9ubHkgd2hlbgotLy8gTUFMTE9DX0xFQUtfQ0hFQ0ssIG9yIE1BTExPQ19RRU1VX0lOU1RSVU1FTlQsIG9yIGJvdGgKLS8vIG1hY3JvcyBhcmUgZGVmaW5lZC4KLSNpZm5kZWYgTUFMTE9DX0xFQUtfQ0hFQ0sKLSNlcnJvciBNQUxMT0NfTEVBS19DSEVDSyBpcyBub3QgZGVmaW5lZC4KLSNlbmRpZiAgLy8gIU1BTExPQ19MRUFLX0NIRUNLCi0KLS8vIEdsb2JhbCB2YXJpYWJsZXMgZGVmaW5lZCBpbiBtYWxsb2NfZGVidWdfY29tbW9uLmMKLWV4dGVybiBpbnQgZ01hbGxvY0xlYWtaeWdvdGVDaGlsZDsKLWV4dGVybiBwdGhyZWFkX211dGV4X3QgZ0FsbG9jYXRpb25zTXV0ZXg7Ci1leHRlcm4gSGFzaFRhYmxlIGdIYXNoVGFibGU7Ci1leHRlcm4gY29uc3QgTWFsbG9jRGVidWcgX19saWJjX21hbGxvY19kZWZhdWx0X2Rpc3BhdGNoOwotZXh0ZXJuIGNvbnN0IE1hbGxvY0RlYnVnKiBfX2xpYmNfbWFsbG9jX2Rpc3BhdGNoOwotCi0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLy8gbG9nIGZ1bmN0aW9ucwotLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotI2RlZmluZSBkZWJ1Z19sb2coZm9ybWF0LCAuLi4pICBcCi0gICAgX19saWJjX2FuZHJvaWRfbG9nX3ByaW50KEFORFJPSURfTE9HX0RFQlVHLCAibWFsbG9jX2xlYWtfY2hlY2siLCAoZm9ybWF0KSwgIyNfX1ZBX0FSR1NfXyApCi0jZGVmaW5lIGVycm9yX2xvZyhmb3JtYXQsIC4uLikgIFwKLSAgICBfX2xpYmNfYW5kcm9pZF9sb2dfcHJpbnQoQU5EUk9JRF9MT0dfRVJST1IsICJtYWxsb2NfbGVha19jaGVjayIsIChmb3JtYXQpLCAjI19fVkFfQVJHU19fICkKLSNkZWZpbmUgaW5mb19sb2coZm9ybWF0LCAuLi4pICBcCi0gICAgX19saWJjX2FuZHJvaWRfbG9nX3ByaW50KEFORFJPSURfTE9HX0lORk8sICJtYWxsb2NfbGVha19jaGVjayIsIChmb3JtYXQpLCAjI19fVkFfQVJHU19fICkKLQotc3RhdGljIGludCBnVHJhcE9uRXJyb3IgPSAxOwotCi0jZGVmaW5lIE1BTExPQ19BTElHTk1FTlQgICAgOAotI2RlZmluZSBHVUFSRCAgICAgICAgICAgICAgIDB4NDgxNTE2NDIKLSNkZWZpbmUgREVCVUcgICAgICAgICAgICAgICAwCi0KLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0vLyBTdHJ1Y3R1cmVzCi0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotdHlwZWRlZiBzdHJ1Y3QgQWxsb2NhdGlvbkVudHJ5IEFsbG9jYXRpb25FbnRyeTsKLXN0cnVjdCBBbGxvY2F0aW9uRW50cnkgewotICAgIEhhc2hFbnRyeSogZW50cnk7Ci0gICAgdWludDMyX3QgZ3VhcmQ7Ci19OwotCi0KLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0vLyBIYXNoIFRhYmxlIGZ1bmN0aW9ucwotLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLXN0YXRpYyB1aW50MzJfdCBnZXRfaGFzaChpbnRwdHJfdCogYmFja3RyYWNlLCBzaXplX3QgbnVtRW50cmllcykKLXsKLSAgICBpZiAoYmFja3RyYWNlID09IE5VTEwpIHJldHVybiAwOwotCi0gICAgaW50IGhhc2ggPSAwOwotICAgIHNpemVfdCBpOwotICAgIGZvciAoaSA9IDAgOyBpIDwgbnVtRW50cmllcyA7IGkrKykgewotICAgICAgICBoYXNoID0gKGhhc2ggKiAzMykgKyAoYmFja3RyYWNlW2ldID4+IDIpOwotICAgIH0KLQotICAgIHJldHVybiBoYXNoOwotfQotCi1zdGF0aWMgSGFzaEVudHJ5KiBmaW5kX2VudHJ5KEhhc2hUYWJsZSogdGFibGUsIGludCBzbG90LAotICAgICAgICBpbnRwdHJfdCogYmFja3RyYWNlLCBzaXplX3QgbnVtRW50cmllcywgc2l6ZV90IHNpemUpCi17Ci0gICAgSGFzaEVudHJ5KiBlbnRyeSA9IHRhYmxlLT5zbG90c1tzbG90XTsKLSAgICB3aGlsZSAoZW50cnkgIT0gTlVMTCkgewotICAgICAgICAvL2RlYnVnX2xvZygiYmFja3RyYWNlOiAlcCwgZW50cnk6ICVwIGVudHJ5LT5iYWNrdHJhY2U6ICVwXG4iLAotICAgICAgICAvLyAgICAgICAgYmFja3RyYWNlLCBlbnRyeSwgKGVudHJ5ICE9IE5VTEwpID8gZW50cnktPmJhY2t0cmFjZSA6IE5VTEwpOwotICAgICAgICAvKgotICAgICAgICAgKiBTZWUgaWYgdGhlIGVudHJ5IG1hdGNoZXMgZXhhY3RseS4gIFdlIGNvbXBhcmUgdGhlICJzaXplIiBmaWVsZCwKLSAgICAgICAgICogaW5jbHVkaW5nIHRoZSBmbGFnIGJpdHMuCi0gICAgICAgICAqLwotICAgICAgICBpZiAoZW50cnktPnNpemUgPT0gc2l6ZSAmJiBlbnRyeS0+bnVtRW50cmllcyA9PSBudW1FbnRyaWVzICYmCi0gICAgICAgICAgICAgICAgIW1lbWNtcChiYWNrdHJhY2UsIGVudHJ5LT5iYWNrdHJhY2UsIG51bUVudHJpZXMgKiBzaXplb2YoaW50cHRyX3QpKSkgewotICAgICAgICAgICAgcmV0dXJuIGVudHJ5OwotICAgICAgICB9Ci0KLSAgICAgICAgZW50cnkgPSBlbnRyeS0+bmV4dDsKLSAgICB9Ci0KLSAgICByZXR1cm4gTlVMTDsKLX0KLQotc3RhdGljIEhhc2hFbnRyeSogcmVjb3JkX2JhY2t0cmFjZShpbnRwdHJfdCogYmFja3RyYWNlLCBzaXplX3QgbnVtRW50cmllcywgc2l6ZV90IHNpemUpCi17Ci0gICAgc2l6ZV90IGhhc2ggPSBnZXRfaGFzaChiYWNrdHJhY2UsIG51bUVudHJpZXMpOwotICAgIHNpemVfdCBzbG90ID0gaGFzaCAlIEhBU0hUQUJMRV9TSVpFOwotCi0gICAgaWYgKHNpemUgJiBTSVpFX0ZMQUdfTUFTSykgewotICAgICAgICBkZWJ1Z19sb2coIm1hbGxvY19kZWJ1ZzogYWxsb2NhdGlvbiAlenggZXhjZWVkcyBiaXQgd2lkdGhcbiIsIHNpemUpOwotICAgICAgICBhYm9ydCgpOwotICAgIH0KLQotICAgIGlmIChnTWFsbG9jTGVha1p5Z290ZUNoaWxkKQotICAgICAgICBzaXplIHw9IFNJWkVfRkxBR19aWUdPVEVfQ0hJTEQ7Ci0KLSAgICBIYXNoRW50cnkqIGVudHJ5ID0gZmluZF9lbnRyeSgmZ0hhc2hUYWJsZSwgc2xvdCwgYmFja3RyYWNlLCBudW1FbnRyaWVzLCBzaXplKTsKLQotICAgIGlmIChlbnRyeSAhPSBOVUxMKSB7Ci0gICAgICAgIGVudHJ5LT5hbGxvY2F0aW9ucysrOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIGNyZWF0ZSBhIG5ldyBlbnRyeQotICAgICAgICBlbnRyeSA9IChIYXNoRW50cnkqKWRsbWFsbG9jKHNpemVvZihIYXNoRW50cnkpICsgbnVtRW50cmllcypzaXplb2YoaW50cHRyX3QpKTsKLSAgICAgICAgaWYgKCFlbnRyeSkKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICBlbnRyeS0+YWxsb2NhdGlvbnMgPSAxOwotICAgICAgICBlbnRyeS0+c2xvdCA9IHNsb3Q7Ci0gICAgICAgIGVudHJ5LT5wcmV2ID0gTlVMTDsKLSAgICAgICAgZW50cnktPm5leHQgPSBnSGFzaFRhYmxlLnNsb3RzW3Nsb3RdOwotICAgICAgICBlbnRyeS0+bnVtRW50cmllcyA9IG51bUVudHJpZXM7Ci0gICAgICAgIGVudHJ5LT5zaXplID0gc2l6ZTsKLQotICAgICAgICBtZW1jcHkoZW50cnktPmJhY2t0cmFjZSwgYmFja3RyYWNlLCBudW1FbnRyaWVzICogc2l6ZW9mKGludHB0cl90KSk7Ci0KLSAgICAgICAgZ0hhc2hUYWJsZS5zbG90c1tzbG90XSA9IGVudHJ5OwotCi0gICAgICAgIGlmIChlbnRyeS0+bmV4dCAhPSBOVUxMKSB7Ci0gICAgICAgICAgICBlbnRyeS0+bmV4dC0+cHJldiA9IGVudHJ5OwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gd2UganVzdCBhZGRlZCBhbiBlbnRyeSwgaW5jcmVhc2UgdGhlIHNpemUgb2YgdGhlIGhhc2h0YWJsZQotICAgICAgICBnSGFzaFRhYmxlLmNvdW50Kys7Ci0gICAgfQotCi0gICAgcmV0dXJuIGVudHJ5OwotfQotCi1zdGF0aWMgaW50IGlzX3ZhbGlkX2VudHJ5KEhhc2hFbnRyeSogZW50cnkpCi17Ci0gICAgaWYgKGVudHJ5ICE9IE5VTEwpIHsKLSAgICAgICAgaW50IGk7Ci0gICAgICAgIGZvciAoaSA9IDAgOyBpIDwgSEFTSFRBQkxFX1NJWkUgOyBpKyspIHsKLSAgICAgICAgICAgIEhhc2hFbnRyeSogZTEgPSBnSGFzaFRhYmxlLnNsb3RzW2ldOwotCi0gICAgICAgICAgICB3aGlsZSAoZTEgIT0gTlVMTCkgewotICAgICAgICAgICAgICAgIGlmIChlMSA9PSBlbnRyeSkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBlMSA9IGUxLT5uZXh0OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIHJlbW92ZV9lbnRyeShIYXNoRW50cnkqIGVudHJ5KQotewotICAgIEhhc2hFbnRyeSogcHJldiA9IGVudHJ5LT5wcmV2OwotICAgIEhhc2hFbnRyeSogbmV4dCA9IGVudHJ5LT5uZXh0OwotCi0gICAgaWYgKHByZXYgIT0gTlVMTCkgZW50cnktPnByZXYtPm5leHQgPSBuZXh0OwotICAgIGlmIChuZXh0ICE9IE5VTEwpIGVudHJ5LT5uZXh0LT5wcmV2ID0gcHJldjsKLQotICAgIGlmIChwcmV2ID09IE5VTEwpIHsKLSAgICAgICAgLy8gd2UgYXJlIHRoZSBoZWFkIG9mIHRoZSBsaXN0LiBzZXQgdGhlIGhlYWQgdG8gYmUgbmV4dAotICAgICAgICBnSGFzaFRhYmxlLnNsb3RzW2VudHJ5LT5zbG90XSA9IGVudHJ5LT5uZXh0OwotICAgIH0KLQotICAgIC8vIHdlIGp1c3QgcmVtb3ZlZCBhbmQgZW50cnksIGRlY3JlYXNlIHRoZSBzaXplIG9mIHRoZSBoYXNodGFibGUKLSAgICBnSGFzaFRhYmxlLmNvdW50LS07Ci19Ci0KLQotLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS8vIHN0YWNrIHRyYWNlIGZ1bmN0aW9ucwotLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotdHlwZWRlZiBzdHJ1Y3QKLXsKLSAgICBzaXplX3QgY291bnQ7Ci0gICAgaW50cHRyX3QqIGFkZHJzOwotfSBzdGFja19jcmF3bF9zdGF0ZV90OwotCi0KLS8qIGRlcGVuZHMgaG93IHRoZSBzeXN0ZW0gaW5jbHVkZXMgZGVmaW5lIHRoaXMgKi8KLSNpZmRlZiBIQVZFX1VOV0lORF9DT05URVhUX1NUUlVDVAotdHlwZWRlZiBzdHJ1Y3QgX1Vud2luZF9Db250ZXh0IF9fdW53aW5kX2NvbnRleHQ7Ci0jZWxzZQotdHlwZWRlZiBfVW53aW5kX0NvbnRleHQgX191bndpbmRfY29udGV4dDsKLSNlbmRpZgotCi1zdGF0aWMgX1Vud2luZF9SZWFzb25fQ29kZSB0cmFjZV9mdW5jdGlvbihfX3Vud2luZF9jb250ZXh0ICpjb250ZXh0LCB2b2lkICphcmcpCi17Ci0gICAgc3RhY2tfY3Jhd2xfc3RhdGVfdCogc3RhdGUgPSAoc3RhY2tfY3Jhd2xfc3RhdGVfdCopYXJnOwotICAgIGlmIChzdGF0ZS0+Y291bnQpIHsKLSAgICAgICAgaW50cHRyX3QgaXAgPSAoaW50cHRyX3QpX1Vud2luZF9HZXRJUChjb250ZXh0KTsKLSAgICAgICAgaWYgKGlwKSB7Ci0gICAgICAgICAgICBzdGF0ZS0+YWRkcnNbMF0gPSBpcDsKLSAgICAgICAgICAgIHN0YXRlLT5hZGRycysrOwotICAgICAgICAgICAgc3RhdGUtPmNvdW50LS07Ci0gICAgICAgICAgICByZXR1cm4gX1VSQ19OT19SRUFTT047Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgLyoKLSAgICAgKiBJZiB3ZSBydW4gb3V0IG9mIHNwYWNlIHRvIHJlY29yZCB0aGUgYWRkcmVzcyBvciAwIGhhcyBiZWVuIHNlZW4sIHN0b3AKLSAgICAgKiB1bndpbmRpbmcgdGhlIHN0YWNrLgotICAgICAqLwotICAgIHJldHVybiBfVVJDX0VORF9PRl9TVEFDSzsKLX0KLQotc3RhdGljIGlubGluZQotaW50IGdldF9iYWNrdHJhY2UoaW50cHRyX3QqIGFkZHJzLCBzaXplX3QgbWF4X2VudHJpZXMpCi17Ci0gICAgc3RhY2tfY3Jhd2xfc3RhdGVfdCBzdGF0ZTsKLSAgICBzdGF0ZS5jb3VudCA9IG1heF9lbnRyaWVzOwotICAgIHN0YXRlLmFkZHJzID0gKGludHB0cl90KilhZGRyczsKLSAgICBfVW53aW5kX0JhY2t0cmFjZSh0cmFjZV9mdW5jdGlvbiwgKHZvaWQqKSZzdGF0ZSk7Ci0gICAgcmV0dXJuIG1heF9lbnRyaWVzIC0gc3RhdGUuY291bnQ7Ci19Ci0KLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0vLyBtYWxsb2MgY2hlY2sgZnVuY3Rpb25zCi0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0jZGVmaW5lIENIS19GSUxMX0ZSRUUgICAgICAgICAgIDB4ZWYKLSNkZWZpbmUgQ0hLX1NFTlRJTkVMX1ZBTFVFICAgICAgKGNoYXIpMHhlYgotI2RlZmluZSBDSEtfU0VOVElORUxfSEVBRF9TSVpFICAxNgotI2RlZmluZSBDSEtfU0VOVElORUxfVEFJTF9TSVpFICAxNgotI2RlZmluZSBDSEtfT1ZFUkhFQURfU0laRSAgICAgICAoICAgQ0hLX1NFTlRJTkVMX0hFQURfU0laRSArICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENIS19TRU5USU5FTF9UQUlMX1NJWkUgKyAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoc2l6ZV90KSApCi0KLXN0YXRpYyB2b2lkIGR1bXBfc3RhY2tfdHJhY2UoKQotewotICAgIGludHB0cl90IGFkZHJzWzIwXTsKLSAgICBpbnQgYyA9IGdldF9iYWNrdHJhY2UoYWRkcnMsIDIwKTsKLSAgICBjaGFyIGJ1ZlsxNl07Ci0gICAgY2hhciB0bXBbMTYqMjBdOwotICAgIGludCBpOwotCi0gICAgdG1wWzBdID0gMDsgLy8gTmVlZCB0byBpbml0aWFsaXplIHRtcFswXSBmb3IgdGhlIGZpcnN0IHN0cmNhdAotICAgIGZvciAoaT0wIDsgaTxjOyBpKyspIHsKLSAgICAgICAgc25wcmludGYoYnVmLCBzaXplb2YgYnVmLCAiJTJkOiAlMDh4XG4iLCBpLCBhZGRyc1tpXSk7Ci0gICAgICAgIHN0cmxjYXQodG1wLCBidWYsIHNpemVvZiB0bXApOwotICAgIH0KLSAgICBfX2xpYmNfYW5kcm9pZF9sb2dfcHJpbnQoQU5EUk9JRF9MT0dfRVJST1IsICJsaWJjIiwgImNhbGwgc3RhY2s6XG4lcyIsIHRtcCk7Ci19Ci0KLXN0YXRpYyBpbnQgaXNfdmFsaWRfbWFsbG9jX3BvaW50ZXIodm9pZCogYWRkcikKLXsKLSAgICByZXR1cm4gMTsKLX0KLQotc3RhdGljIHZvaWQgYXNzZXJ0X2xvZ19tZXNzYWdlKGNvbnN0IGNoYXIqIGZvcm1hdCwgLi4uKQotewotICAgIHZhX2xpc3QgIGFyZ3M7Ci0KLSAgICBwdGhyZWFkX211dGV4X2xvY2soJmdBbGxvY2F0aW9uc011dGV4KTsKLSAgICB7Ci0gICAgICAgIGNvbnN0IE1hbGxvY0RlYnVnKiBjdXJyZW50X2Rpc3BhdGNoID0gX19saWJjX21hbGxvY19kaXNwYXRjaDsKLSAgICAgICAgX19saWJjX21hbGxvY19kaXNwYXRjaCA9ICZfX2xpYmNfbWFsbG9jX2RlZmF1bHRfZGlzcGF0Y2g7Ci0gICAgICAgIHZhX3N0YXJ0KGFyZ3MsIGZvcm1hdCk7Ci0gICAgICAgIF9fbGliY19hbmRyb2lkX2xvZ192cHJpbnQoQU5EUk9JRF9MT0dfRVJST1IsICJsaWJjIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0LCBhcmdzKTsKLSAgICAgICAgdmFfZW5kKGFyZ3MpOwotICAgICAgICBkdW1wX3N0YWNrX3RyYWNlKCk7Ci0gICAgICAgIGlmIChnVHJhcE9uRXJyb3IpIHsKLSAgICAgICAgICAgIF9fYnVpbHRpbl90cmFwKCk7Ci0gICAgICAgIH0KLSAgICAgICAgX19saWJjX21hbGxvY19kaXNwYXRjaCA9IGN1cnJlbnRfZGlzcGF0Y2g7Ci0gICAgfQotICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZnQWxsb2NhdGlvbnNNdXRleCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGFzc2VydF92YWxpZF9tYWxsb2NfcG9pbnRlcih2b2lkKiBtZW0pCi17Ci0gICAgaWYgKG1lbSAmJiAhaXNfdmFsaWRfbWFsbG9jX3BvaW50ZXIobWVtKSkgewotICAgICAgICBhc3NlcnRfbG9nX21lc3NhZ2UoCi0gICAgICAgICAgICAiKioqIE1BTExPQyBDSEVDSzogYnVmZmVyICVwLCBpcyBub3QgYSB2YWxpZCAiCi0gICAgICAgICAgICAibWFsbG9jIHBvaW50ZXIgKGFyZSB5b3UgbWl4aW5nIHVwIG5ldy9kZWxldGUgIgotICAgICAgICAgICAgImFuZCBtYWxsb2MvZnJlZT8pIiwgbWVtKTsKLSAgICB9Ci19Ci0KLS8qIENoZWNrIHRoYXQgYSBnaXZlbiBhZGRyZXNzIGNvcnJlc3BvbmRzIHRvIGEgZ3VhcmRlZCBibG9jaywKLSAqIGFuZCByZXR1cm5zIGl0cyBvcmlnaW5hbCBhbGxvY2F0aW9uIHNpemUgaW4gJyphbGxvY2F0ZWQnLgotICogJ2Z1bmMnIGlzIHRoZSBjYXBpdGFsaXplZCBuYW1lIG9mIHRoZSBjYWxsZXIgZnVuY3Rpb24uCi0gKiBSZXR1cm5zIDAgb24gc3VjY2Vzcywgb3IgLTEgb24gZmFpbHVyZS4KLSAqIE5PVEU6IERvZXMgbm90IHJldHVybiBpZiBnVHJhcE9uRXJyb3IgaXMgc2V0LgotICovCi1zdGF0aWMgaW50IGNoa19tZW1fY2hlY2sodm9pZCogICAgICAgbWVtLAotICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCogICAgIGFsbG9jYXRlZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBmdW5jKQotewotICAgIGNoYXIqICBidWZmZXI7Ci0gICAgc2l6ZV90IG9mZnNldCwgYnl0ZXM7Ci0gICAgaW50ICAgIGk7Ci0gICAgY2hhciogIGJ1ZjsKLQotICAgIC8qIGZpcnN0IGNoZWNrIHRoZSBieXRlcyBpbiB0aGUgc2VudGluZWwgaGVhZGVyICovCi0gICAgYnVmID0gKGNoYXIqKW1lbSAtIENIS19TRU5USU5FTF9IRUFEX1NJWkU7Ci0gICAgZm9yIChpPTAgOyBpPENIS19TRU5USU5FTF9IRUFEX1NJWkUgOyBpKyspIHsKLSAgICAgICAgaWYgKGJ1ZltpXSAhPSBDSEtfU0VOVElORUxfVkFMVUUpIHsKLSAgICAgICAgICAgIGFzc2VydF9sb2dfbWVzc2FnZSgKLSAgICAgICAgICAgICAgICAiKioqICVzIENIRUNLOiBidWZmZXIgJXAgIgotICAgICAgICAgICAgICAgICJjb3JydXB0ZWQgJWQgYnl0ZXMgYmVmb3JlIGFsbG9jYXRpb24iLAotICAgICAgICAgICAgICAgIGZ1bmMsIG1lbSwgQ0hLX1NFTlRJTkVMX0hFQURfU0laRS1pKTsKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qIHRoZW4gdGhlIG9uZXMgaW4gdGhlIHNlbnRpbmVsIHRyYWlsZXIgKi8KLSAgICBidWZmZXIgPSAoY2hhciopbWVtIC0gQ0hLX1NFTlRJTkVMX0hFQURfU0laRTsKLSAgICBvZmZzZXQgPSBkbG1hbGxvY191c2FibGVfc2l6ZShidWZmZXIpIC0gc2l6ZW9mKHNpemVfdCk7Ci0gICAgYnl0ZXMgID0gKihzaXplX3QgKikoYnVmZmVyICsgb2Zmc2V0KTsKLQotICAgIGJ1ZiA9IChjaGFyKiltZW0gKyBieXRlczsKLSAgICBmb3IgKGk9Q0hLX1NFTlRJTkVMX1RBSUxfU0laRS0xIDsgaT49MCA7IGktLSkgewotICAgICAgICBpZiAoYnVmW2ldICE9IENIS19TRU5USU5FTF9WQUxVRSkgewotICAgICAgICAgICAgYXNzZXJ0X2xvZ19tZXNzYWdlKAotICAgICAgICAgICAgICAgICIqKiogJXMgQ0hFQ0s6IGJ1ZmZlciAlcCwgc2l6ZT0lbHUsICIKLSAgICAgICAgICAgICAgICAiY29ycnVwdGVkICVkIGJ5dGVzIGFmdGVyIGFsbG9jYXRpb24iLAotICAgICAgICAgICAgICAgIGZ1bmMsIGJ1ZmZlciwgYnl0ZXMsIGkrMSk7Ci0gICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAqYWxsb2NhdGVkID0gYnl0ZXM7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLQotdm9pZCogY2hrX21hbGxvYyhzaXplX3QgYnl0ZXMpCi17Ci0gICAgc2l6ZV90IHNpemUgPSBieXRlcyArIENIS19PVkVSSEVBRF9TSVpFOwotICAgIGlmIChzaXplIDwgYnl0ZXMpIHsgLy8gT3ZlcmZsb3cuCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLSAgICB1aW50OF90KiBidWZmZXIgPSAodWludDhfdCopIGRsbWFsbG9jKHNpemUpOwotICAgIGlmIChidWZmZXIpIHsKLSAgICAgICAgbWVtc2V0KGJ1ZmZlciwgQ0hLX1NFTlRJTkVMX1ZBTFVFLCBieXRlcyArIENIS19PVkVSSEVBRF9TSVpFKTsKLSAgICAgICAgc2l6ZV90IG9mZnNldCA9IGRsbWFsbG9jX3VzYWJsZV9zaXplKGJ1ZmZlcikgLSBzaXplb2Yoc2l6ZV90KTsKLSAgICAgICAgKihzaXplX3QgKikoYnVmZmVyICsgb2Zmc2V0KSA9IGJ5dGVzOwotICAgICAgICBidWZmZXIgKz0gQ0hLX1NFTlRJTkVMX0hFQURfU0laRTsKLSAgICB9Ci0gICAgcmV0dXJuIGJ1ZmZlcjsKLX0KLQotdm9pZCAgY2hrX2ZyZWUodm9pZCogbWVtKQotewotICAgIGFzc2VydF92YWxpZF9tYWxsb2NfcG9pbnRlcihtZW0pOwotICAgIGlmIChtZW0pIHsKLSAgICAgICAgc2l6ZV90ICBzaXplOwotICAgICAgICBjaGFyKiAgIGJ1ZmZlcjsKLQotICAgICAgICBpZiAoY2hrX21lbV9jaGVjayhtZW0sICZzaXplLCAiRlJFRSIpID09IDApIHsKLSAgICAgICAgICAgIGJ1ZmZlciA9IChjaGFyKiltZW0gLSBDSEtfU0VOVElORUxfSEVBRF9TSVpFOwotICAgICAgICAgICAgbWVtc2V0KGJ1ZmZlciwgQ0hLX0ZJTExfRlJFRSwgc2l6ZSArIENIS19PVkVSSEVBRF9TSVpFKTsKLSAgICAgICAgICAgIGRsZnJlZShidWZmZXIpOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkKiBjaGtfY2FsbG9jKHNpemVfdCBuX2VsZW1lbnRzLCBzaXplX3QgZWxlbV9zaXplKQotewotICAgIHNpemVfdCAgc2l6ZTsKLSAgICB2b2lkKiAgIHB0cjsKLQotICAgIC8qIEZhaWwgb24gb3ZlcmZsb3cgLSBqdXN0IHRvIGJlIHNhZmUgZXZlbiB0aG91Z2ggdGhpcyBjb2RlIHJ1bnMgb25seQotICAgICAqIHdpdGhpbiB0aGUgZGVidWdnaW5nIEMgbGlicmFyeSwgbm90IHRoZSBwcm9kdWN0aW9uIG9uZSAqLwotICAgIGlmIChuX2VsZW1lbnRzICYmIE1BWF9TSVpFX1QgLyBuX2VsZW1lbnRzIDwgZWxlbV9zaXplKSB7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLSAgICBzaXplID0gbl9lbGVtZW50cyAqIGVsZW1fc2l6ZTsKLSAgICBwdHIgID0gY2hrX21hbGxvYyhzaXplKTsKLSAgICBpZiAocHRyICE9IE5VTEwpIHsKLSAgICAgICAgbWVtc2V0KHB0ciwgMCwgc2l6ZSk7Ci0gICAgfQotICAgIHJldHVybiBwdHI7Ci19Ci0KLXZvaWQqIGNoa19yZWFsbG9jKHZvaWQqIG1lbSwgc2l6ZV90IGJ5dGVzKQotewotICAgIGNoYXIqICAgYnVmZmVyOwotICAgIGludCAgICAgcmV0OwotICAgIHNpemVfdCAgb2xkX2J5dGVzID0gMDsKLQotICAgIGFzc2VydF92YWxpZF9tYWxsb2NfcG9pbnRlcihtZW0pOwotCi0gICAgaWYgKG1lbSAhPSBOVUxMICYmIGNoa19tZW1fY2hlY2sobWVtLCAmb2xkX2J5dGVzLCAiUkVBTExPQyIpIDwgMCkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICBjaGFyKiBuZXdfYnVmZmVyID0gY2hrX21hbGxvYyhieXRlcyk7Ci0gICAgaWYgKG1lbSA9PSBOVUxMKSB7Ci0gICAgICAgIHJldHVybiBuZXdfYnVmZmVyOwotICAgIH0KLQotICAgIGlmIChuZXdfYnVmZmVyKSB7Ci0gICAgICAgIGlmIChieXRlcyA+IG9sZF9ieXRlcykKLSAgICAgICAgICAgIGJ5dGVzID0gb2xkX2J5dGVzOwotICAgICAgICBtZW1jcHkobmV3X2J1ZmZlciwgbWVtLCBieXRlcyk7Ci0gICAgICAgIGNoa19mcmVlKG1lbSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIG5ld19idWZmZXI7Ci19Ci0KLXZvaWQqIGNoa19tZW1hbGlnbihzaXplX3QgYWxpZ25tZW50LCBzaXplX3QgYnl0ZXMpCi17Ci0gICAgLy8gWFhYOiBpdCdzIGJldHRlciB0byB1c2UgbWFsbG9jLCB0aGFuIGJlaW5nIHdyb25nCi0gICAgcmV0dXJuIGNoa19tYWxsb2MoYnl0ZXMpOwotfQotCi0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLy8gbWFsbG9jIGZpbGwgZnVuY3Rpb25zCi0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi12b2lkKiBmaWxsX21hbGxvYyhzaXplX3QgYnl0ZXMpCi17Ci0gICAgdm9pZCogYnVmZmVyID0gZGxtYWxsb2MoYnl0ZXMpOwotICAgIGlmIChidWZmZXIpIHsKLSAgICAgICAgbWVtc2V0KGJ1ZmZlciwgQ0hLX1NFTlRJTkVMX1ZBTFVFLCBieXRlcyk7Ci0gICAgfQotICAgIHJldHVybiBidWZmZXI7Ci19Ci0KLXZvaWQgIGZpbGxfZnJlZSh2b2lkKiBtZW0pCi17Ci0gICAgc2l6ZV90IGJ5dGVzID0gZGxtYWxsb2NfdXNhYmxlX3NpemUobWVtKTsKLSAgICBtZW1zZXQobWVtLCBDSEtfRklMTF9GUkVFLCBieXRlcyk7Ci0gICAgZGxmcmVlKG1lbSk7Ci19Ci0KLXZvaWQqIGZpbGxfcmVhbGxvYyh2b2lkKiBtZW0sIHNpemVfdCBieXRlcykKLXsKLSAgICB2b2lkKiBidWZmZXIgPSBmaWxsX21hbGxvYyhieXRlcyk7Ci0gICAgaWYgKG1lbSA9PSBOVUxMKSB7Ci0gICAgICAgIHJldHVybiBidWZmZXI7Ci0gICAgfQotICAgIGlmIChidWZmZXIpIHsKLSAgICAgICAgc2l6ZV90IG9sZF9zaXplID0gZGxtYWxsb2NfdXNhYmxlX3NpemUobWVtKTsKLSAgICAgICAgc2l6ZV90IHNpemUgPSAoYnl0ZXMgPCBvbGRfc2l6ZSk/KGJ5dGVzKToob2xkX3NpemUpOwotICAgICAgICBtZW1jcHkoYnVmZmVyLCBtZW0sIHNpemUpOwotICAgICAgICBmaWxsX2ZyZWUobWVtKTsKLSAgICB9Ci0gICAgcmV0dXJuIGJ1ZmZlcjsKLX0KLQotdm9pZCogZmlsbF9tZW1hbGlnbihzaXplX3QgYWxpZ25tZW50LCBzaXplX3QgYnl0ZXMpCi17Ci0gICAgdm9pZCogYnVmZmVyID0gZGxtZW1hbGlnbihhbGlnbm1lbnQsIGJ5dGVzKTsKLSAgICBpZiAoYnVmZmVyKSB7Ci0gICAgICAgIG1lbXNldChidWZmZXIsIENIS19TRU5USU5FTF9WQUxVRSwgYnl0ZXMpOwotICAgIH0KLSAgICByZXR1cm4gYnVmZmVyOwotfQotCi0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLy8gbWFsbG9jIGxlYWsgZnVuY3Rpb25zCi0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0jZGVmaW5lIE1FTUFMSUdOX0dVQVJEICAoKHZvaWQqKTB4QTFBNDE1MjApCi0KLXZvaWQqIGxlYWtfbWFsbG9jKHNpemVfdCBieXRlcykKLXsKLSAgICAvLyBhbGxvY2F0ZSBlbm91Z2ggc3BhY2UgaW5mcm9udCBvZiB0aGUgYWxsb2NhdGlvbiB0byBzdG9yZSB0aGUgcG9pbnRlciBmb3IKLSAgICAvLyB0aGUgYWxsb2Mgc3RydWN0dXJlLiBUaGlzIHdpbGwgbWFraW5nIGZyZWUnaW5nIHRoZSBzdHJ1Y3RlciByZWFsbHkgZmFzdCEKLQotICAgIC8vIDEuIGFsbG9jYXRlIGVub3VnaCBtZW1vcnkgYW5kIGluY2x1ZGUgb3VyIGhlYWRlcgotICAgIC8vIDIuIHNldCB0aGUgYmFzZSBwb2ludGVyIHRvIGJlIHJpZ2h0IGFmdGVyIG91ciBoZWFkZXIKLQotICAgIHNpemVfdCBzaXplID0gYnl0ZXMgKyBzaXplb2YoQWxsb2NhdGlvbkVudHJ5KTsKLSAgICBpZiAoc2l6ZSA8IGJ5dGVzKSB7IC8vIE92ZXJmbG93LgotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICB2b2lkKiBiYXNlID0gZGxtYWxsb2Moc2l6ZSk7Ci0gICAgaWYgKGJhc2UgIT0gTlVMTCkgewotICAgICAgICBwdGhyZWFkX211dGV4X2xvY2soJmdBbGxvY2F0aW9uc011dGV4KTsKLQotICAgICAgICAgICAgaW50cHRyX3QgYmFja3RyYWNlW0JBQ0tUUkFDRV9TSVpFXTsKLSAgICAgICAgICAgIHNpemVfdCBudW1FbnRyaWVzID0gZ2V0X2JhY2t0cmFjZShiYWNrdHJhY2UsIEJBQ0tUUkFDRV9TSVpFKTsKLQotICAgICAgICAgICAgQWxsb2NhdGlvbkVudHJ5KiBoZWFkZXIgPSAoQWxsb2NhdGlvbkVudHJ5KiliYXNlOwotICAgICAgICAgICAgaGVhZGVyLT5lbnRyeSA9IHJlY29yZF9iYWNrdHJhY2UoYmFja3RyYWNlLCBudW1FbnRyaWVzLCBieXRlcyk7Ci0gICAgICAgICAgICBoZWFkZXItPmd1YXJkID0gR1VBUkQ7Ci0KLSAgICAgICAgICAgIC8vIG5vdyBpbmNyZW1lbnQgYmFzZSB0byBwb2ludCB0byBhZnRlciBvdXIgaGVhZGVyLgotICAgICAgICAgICAgLy8gdGhpcyBzaG91bGQganVzdCB3b3JrIHNpbmNlIG91ciBoZWFkZXIgaXMgOCBieXRlcy4KLSAgICAgICAgICAgIGJhc2UgPSAoQWxsb2NhdGlvbkVudHJ5KiliYXNlICsgMTsKLQotICAgICAgICBwdGhyZWFkX211dGV4X3VubG9jaygmZ0FsbG9jYXRpb25zTXV0ZXgpOwotICAgIH0KLQotICAgIHJldHVybiBiYXNlOwotfQotCi12b2lkIGxlYWtfZnJlZSh2b2lkKiBtZW0pCi17Ci0gICAgaWYgKG1lbSAhPSBOVUxMKSB7Ci0gICAgICAgIHB0aHJlYWRfbXV0ZXhfbG9jaygmZ0FsbG9jYXRpb25zTXV0ZXgpOwotCi0gICAgICAgIC8vIGNoZWNrIHRoZSBndWFyZCB0byBtYWtlIHN1cmUgaXQgaXMgdmFsaWQKLSAgICAgICAgQWxsb2NhdGlvbkVudHJ5KiBoZWFkZXIgPSAoQWxsb2NhdGlvbkVudHJ5KiltZW0gLSAxOwotCi0gICAgICAgIGlmIChoZWFkZXItPmd1YXJkICE9IEdVQVJEKSB7Ci0gICAgICAgICAgICAvLyBjb3VsZCBiZSBhIG1lbWFsaWduZWQgYmxvY2sKLSAgICAgICAgICAgIGlmICgoKHZvaWQqKiltZW0pWy0xXSA9PSBNRU1BTElHTl9HVUFSRCkgewotICAgICAgICAgICAgICAgIG1lbSA9ICgodm9pZCoqKW1lbSlbLTJdOwotICAgICAgICAgICAgICAgIGhlYWRlciA9IChBbGxvY2F0aW9uRW50cnkqKW1lbSAtIDE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoaGVhZGVyLT5ndWFyZCA9PSBHVUFSRCB8fCBpc192YWxpZF9lbnRyeShoZWFkZXItPmVudHJ5KSkgewotICAgICAgICAgICAgLy8gZGVjcmVtZW50IHRoZSBhbGxvY2F0aW9ucwotICAgICAgICAgICAgSGFzaEVudHJ5KiBlbnRyeSA9IGhlYWRlci0+ZW50cnk7Ci0gICAgICAgICAgICBlbnRyeS0+YWxsb2NhdGlvbnMtLTsKLSAgICAgICAgICAgIGlmIChlbnRyeS0+YWxsb2NhdGlvbnMgPD0gMCkgewotICAgICAgICAgICAgICAgIHJlbW92ZV9lbnRyeShlbnRyeSk7Ci0gICAgICAgICAgICAgICAgZGxmcmVlKGVudHJ5KTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gbm93IGZyZWUgdGhlIG1lbW9yeSEKLSAgICAgICAgICAgIGRsZnJlZShoZWFkZXIpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZGVidWdfbG9nKCJXQVJOSU5HIGJhZCBoZWFkZXIgZ3VhcmQ6ICcweCV4JyEgYW5kIGludmFsaWQgZW50cnk6ICVwXG4iLAotICAgICAgICAgICAgICAgICAgICBoZWFkZXItPmd1YXJkLCBoZWFkZXItPmVudHJ5KTsKLSAgICAgICAgfQotCi0gICAgICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZnQWxsb2NhdGlvbnNNdXRleCk7Ci0gICAgfQotfQotCi12b2lkKiBsZWFrX2NhbGxvYyhzaXplX3Qgbl9lbGVtZW50cywgc2l6ZV90IGVsZW1fc2l6ZSkKLXsKLSAgICBzaXplX3QgIHNpemU7Ci0gICAgdm9pZCogICBwdHI7Ci0KLSAgICAvKiBGYWlsIG9uIG92ZXJmbG93IC0ganVzdCB0byBiZSBzYWZlIGV2ZW4gdGhvdWdoIHRoaXMgY29kZSBydW5zIG9ubHkKLSAgICAgKiB3aXRoaW4gdGhlIGRlYnVnZ2luZyBDIGxpYnJhcnksIG5vdCB0aGUgcHJvZHVjdGlvbiBvbmUgKi8KLSAgICBpZiAobl9lbGVtZW50cyAmJiBNQVhfU0laRV9UIC8gbl9lbGVtZW50cyA8IGVsZW1fc2l6ZSkgewotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAgc2l6ZSA9IG5fZWxlbWVudHMgKiBlbGVtX3NpemU7Ci0gICAgcHRyICA9IGxlYWtfbWFsbG9jKHNpemUpOwotICAgIGlmIChwdHIgIT0gTlVMTCkgewotICAgICAgICBtZW1zZXQocHRyLCAwLCBzaXplKTsKLSAgICB9Ci0gICAgcmV0dXJuIHB0cjsKLX0KLQotdm9pZCogbGVha19yZWFsbG9jKHZvaWQqIG9sZE1lbSwgc2l6ZV90IGJ5dGVzKQotewotICAgIGlmIChvbGRNZW0gPT0gTlVMTCkgewotICAgICAgICByZXR1cm4gbGVha19tYWxsb2MoYnl0ZXMpOwotICAgIH0KLSAgICB2b2lkKiBuZXdNZW0gPSBOVUxMOwotICAgIEFsbG9jYXRpb25FbnRyeSogaGVhZGVyID0gKEFsbG9jYXRpb25FbnRyeSopb2xkTWVtIC0gMTsKLSAgICBpZiAoaGVhZGVyICYmIGhlYWRlci0+Z3VhcmQgPT0gR1VBUkQpIHsKLSAgICAgICAgc2l6ZV90IG9sZFNpemUgPSBoZWFkZXItPmVudHJ5LT5zaXplICYgflNJWkVfRkxBR19NQVNLOwotICAgICAgICBuZXdNZW0gPSBsZWFrX21hbGxvYyhieXRlcyk7Ci0gICAgICAgIGlmIChuZXdNZW0gIT0gTlVMTCkgewotICAgICAgICAgICAgc2l6ZV90IGNvcHlTaXplID0gKG9sZFNpemUgPD0gYnl0ZXMpID8gb2xkU2l6ZSA6IGJ5dGVzOwotICAgICAgICAgICAgbWVtY3B5KG5ld01lbSwgb2xkTWVtLCBjb3B5U2l6ZSk7Ci0gICAgICAgICAgICBsZWFrX2ZyZWUob2xkTWVtKTsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIG5ld01lbSA9IGRscmVhbGxvYyhvbGRNZW0sIGJ5dGVzKTsKLSAgICB9Ci0gICAgcmV0dXJuIG5ld01lbTsKLX0KLQotdm9pZCogbGVha19tZW1hbGlnbihzaXplX3QgYWxpZ25tZW50LCBzaXplX3QgYnl0ZXMpCi17Ci0gICAgLy8gd2UgY2FuIGp1c3QgdXNlIG1hbGxvYwotICAgIGlmIChhbGlnbm1lbnQgPD0gTUFMTE9DX0FMSUdOTUVOVCkKLSAgICAgICAgcmV0dXJuIGxlYWtfbWFsbG9jKGJ5dGVzKTsKLQotICAgIC8vIG5lZWQgdG8gbWFrZSBzdXJlIGl0J3MgYSBwb3dlciBvZiB0d28KLSAgICBpZiAoYWxpZ25tZW50ICYgKGFsaWdubWVudC0xKSkKLSAgICAgICAgYWxpZ25tZW50ID0gMUwgPDwgKDMxIC0gX19idWlsdGluX2NseihhbGlnbm1lbnQpKTsKLQotICAgIC8vIGhlcmUsIGFsaWdtZW50IGlzIGF0IGxlYXN0IE1BTExPQ19BTElHTk1FTlQ8PDEgYnl0ZXMKLSAgICAvLyB3ZSB3aWxsIGFsaWduIGJ5IGF0IGxlYXN0IE1BTExPQ19BTElHTk1FTlQgYnl0ZXMKLSAgICAvLyBhbmQgYXQgbW9zdCBhbGlnbm1lbnQtTUFMTE9DX0FMSUdOTUVOVCBieXRlcwotICAgIHNpemVfdCBzaXplID0gKGFsaWdubWVudC1NQUxMT0NfQUxJR05NRU5UKSArIGJ5dGVzOwotICAgIGlmIChzaXplIDwgYnl0ZXMpIHsgLy8gT3ZlcmZsb3cuCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQotICAgIHZvaWQqIGJhc2UgPSBsZWFrX21hbGxvYyhzaXplKTsKLSAgICBpZiAoYmFzZSAhPSBOVUxMKSB7Ci0gICAgICAgIGludHB0cl90IHB0ciA9IChpbnRwdHJfdCliYXNlOwotICAgICAgICBpZiAoKHB0ciAlIGFsaWdubWVudCkgPT0gMCkKLSAgICAgICAgICAgIHJldHVybiBiYXNlOwotCi0gICAgICAgIC8vIGFsaWduIHRoZSBwb2ludGVyCi0gICAgICAgIHB0ciArPSAoKC1wdHIpICUgYWxpZ25tZW50KTsKLQotICAgICAgICAvLyB0aGVyZSBpcyBhbHdheXMgZW5vdWdoIHNwYWNlIGZvciB0aGUgYmFzZSBwb2ludGVyIGFuZCB0aGUgZ3VhcmQKLSAgICAgICAgKCh2b2lkKiopcHRyKVstMV0gPSBNRU1BTElHTl9HVUFSRDsKLSAgICAgICAgKCh2b2lkKiopcHRyKVstMl0gPSBiYXNlOwotCi0gICAgICAgIHJldHVybiAodm9pZCopcHRyOwotICAgIH0KLSAgICByZXR1cm4gYmFzZTsKLX0KLQotLyogSW5pdGlhbGl6ZXMgbWFsbG9jIGRlYnVnZ2luZyBmcmFtZXdvcmsuCi0gKiBTZWUgY29tbWVudHMgb24gTWFsbG9jRGVidWdJbml0IGluIG1hbGxvY19kZWJ1Z19jb21tb24uaAotICovCi1pbnQgbWFsbG9jX2RlYnVnX2luaXRpYWxpemUodm9pZCkKLXsKLSAgICAvLyBXZSBkb24ndCByZWFsbHkgaGF2ZSBhbnl0aGluZyB0aGF0IHJlcXVpcmVzIGluaXRpYWxpemF0aW9uIGhlcmUuCi0gICAgcmV0dXJuIDA7Ci19CmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9tYWxsb2NfZGVidWdfbGVhay5jcHAgYi9saWJjL2Jpb25pYy9tYWxsb2NfZGVidWdfbGVhay5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDViNDVjMgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYmlvbmljL21hbGxvY19kZWJ1Z19sZWFrLmNwcApAQCAtMCwwICsxLDQzNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CisjaW5jbHVkZSA8ZGxmY24uaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8cHRocmVhZC5oPgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3lzL3NlbGVjdC5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNpbmNsdWRlIDxzeXMvc3lzdGVtX3Byb3BlcnRpZXMuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvdW4uaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDx1bndpbmQuaD4KKworI2luY2x1ZGUgImRlYnVnX3N0YWNrdHJhY2UuaCIKKyNpbmNsdWRlICJkbG1hbGxvYy5oIgorI2luY2x1ZGUgImxpYmNfbG9nZ2luZy5oIgorI2luY2x1ZGUgIm1hbGxvY19kZWJ1Z19jb21tb24uaCIKKyNpbmNsdWRlICJTY29wZWRQdGhyZWFkTXV0ZXhMb2NrZXIuaCIKKworLy8gVGhpcyBmaWxlIHNob3VsZCBiZSBpbmNsdWRlZCBpbnRvIHRoZSBidWlsZCBvbmx5IHdoZW4KKy8vIE1BTExPQ19MRUFLX0NIRUNLLCBvciBNQUxMT0NfUUVNVV9JTlNUUlVNRU5ULCBvciBib3RoCisvLyBtYWNyb3MgYXJlIGRlZmluZWQuCisjaWZuZGVmIE1BTExPQ19MRUFLX0NIRUNLCisjZXJyb3IgTUFMTE9DX0xFQUtfQ0hFQ0sgaXMgbm90IGRlZmluZWQuCisjZW5kaWYgIC8vICFNQUxMT0NfTEVBS19DSEVDSworCisvLyBHbG9iYWwgdmFyaWFibGVzIGRlZmluZWQgaW4gbWFsbG9jX2RlYnVnX2NvbW1vbi5jCitleHRlcm4gaW50IGdNYWxsb2NMZWFrWnlnb3RlQ2hpbGQ7CitleHRlcm4gcHRocmVhZF9tdXRleF90IGdBbGxvY2F0aW9uc011dGV4OworZXh0ZXJuIEhhc2hUYWJsZSBnSGFzaFRhYmxlOworCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gc3RhY2sgdHJhY2UgZnVuY3Rpb25zCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisjZGVmaW5lIEdVQVJEICAgICAgICAgICAgICAgMHg0ODE1MTY0MgorI2RlZmluZSBERUJVRyAgICAgICAgICAgICAgIDAKKworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vIFN0cnVjdHVyZXMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK3N0cnVjdCBBbGxvY2F0aW9uRW50cnkgeworICAgIEhhc2hFbnRyeSogZW50cnk7CisgICAgdWludDMyX3QgZ3VhcmQ7Cit9IF9fYXR0cmlidXRlX18oKGFsaWduZWQoTUFMTE9DX0FMSUdOTUVOVCkpKTsKKworc3RhdGljIGlubGluZSBBbGxvY2F0aW9uRW50cnkqIHRvX2hlYWRlcih2b2lkKiBtZW0pIHsKKyAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8QWxsb2NhdGlvbkVudHJ5Kj4obWVtKSAtIDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgY29uc3QgQWxsb2NhdGlvbkVudHJ5KiBjb25zdF90b19oZWFkZXIoY29uc3Qgdm9pZCogbWVtKSB7CisgIHJldHVybiByZWludGVycHJldF9jYXN0PGNvbnN0IEFsbG9jYXRpb25FbnRyeSo+KG1lbSkgLSAxOworfQorCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gSGFzaCBUYWJsZSBmdW5jdGlvbnMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK3N0YXRpYyB1aW50MzJfdCBnZXRfaGFzaCh1aW50cHRyX3QqIGJhY2t0cmFjZSwgc2l6ZV90IG51bUVudHJpZXMpIHsKKyAgICBpZiAoYmFja3RyYWNlID09IE5VTEwpIHJldHVybiAwOworCisgICAgaW50IGhhc2ggPSAwOworICAgIHNpemVfdCBpOworICAgIGZvciAoaSA9IDAgOyBpIDwgbnVtRW50cmllcyA7IGkrKykgeworICAgICAgICBoYXNoID0gKGhhc2ggKiAzMykgKyAoYmFja3RyYWNlW2ldID4+IDIpOworICAgIH0KKworICAgIHJldHVybiBoYXNoOworfQorCitzdGF0aWMgSGFzaEVudHJ5KiBmaW5kX2VudHJ5KEhhc2hUYWJsZSogdGFibGUsIGludCBzbG90LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50cHRyX3QqIGJhY2t0cmFjZSwgc2l6ZV90IG51bUVudHJpZXMsIHNpemVfdCBzaXplKSB7CisgICAgSGFzaEVudHJ5KiBlbnRyeSA9IHRhYmxlLT5zbG90c1tzbG90XTsKKyAgICB3aGlsZSAoZW50cnkgIT0gTlVMTCkgeworICAgICAgICAvL2RlYnVnX2xvZygiYmFja3RyYWNlOiAlcCwgZW50cnk6ICVwIGVudHJ5LT5iYWNrdHJhY2U6ICVwXG4iLAorICAgICAgICAvLyAgICAgICAgYmFja3RyYWNlLCBlbnRyeSwgKGVudHJ5ICE9IE5VTEwpID8gZW50cnktPmJhY2t0cmFjZSA6IE5VTEwpOworICAgICAgICAvKgorICAgICAgICAgKiBTZWUgaWYgdGhlIGVudHJ5IG1hdGNoZXMgZXhhY3RseS4gIFdlIGNvbXBhcmUgdGhlICJzaXplIiBmaWVsZCwKKyAgICAgICAgICogaW5jbHVkaW5nIHRoZSBmbGFnIGJpdHMuCisgICAgICAgICAqLworICAgICAgICBpZiAoZW50cnktPnNpemUgPT0gc2l6ZSAmJiBlbnRyeS0+bnVtRW50cmllcyA9PSBudW1FbnRyaWVzICYmCisgICAgICAgICAgICAgICAgIW1lbWNtcChiYWNrdHJhY2UsIGVudHJ5LT5iYWNrdHJhY2UsIG51bUVudHJpZXMgKiBzaXplb2YodWludHB0cl90KSkpIHsKKyAgICAgICAgICAgIHJldHVybiBlbnRyeTsKKyAgICAgICAgfQorCisgICAgICAgIGVudHJ5ID0gZW50cnktPm5leHQ7CisgICAgfQorCisgICAgcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBIYXNoRW50cnkqIHJlY29yZF9iYWNrdHJhY2UodWludHB0cl90KiBiYWNrdHJhY2UsIHNpemVfdCBudW1FbnRyaWVzLCBzaXplX3Qgc2l6ZSkgeworICAgIHNpemVfdCBoYXNoID0gZ2V0X2hhc2goYmFja3RyYWNlLCBudW1FbnRyaWVzKTsKKyAgICBzaXplX3Qgc2xvdCA9IGhhc2ggJSBIQVNIVEFCTEVfU0laRTsKKworICAgIGlmIChzaXplICYgU0laRV9GTEFHX01BU0spIHsKKyAgICAgICAgZGVidWdfbG9nKCJtYWxsb2NfZGVidWc6IGFsbG9jYXRpb24gJXp4IGV4Y2VlZHMgYml0IHdpZHRoXG4iLCBzaXplKTsKKyAgICAgICAgYWJvcnQoKTsKKyAgICB9CisKKyAgICBpZiAoZ01hbGxvY0xlYWtaeWdvdGVDaGlsZCkgeworICAgICAgICBzaXplIHw9IFNJWkVfRkxBR19aWUdPVEVfQ0hJTEQ7CisgICAgfQorCisgICAgSGFzaEVudHJ5KiBlbnRyeSA9IGZpbmRfZW50cnkoJmdIYXNoVGFibGUsIHNsb3QsIGJhY2t0cmFjZSwgbnVtRW50cmllcywgc2l6ZSk7CisKKyAgICBpZiAoZW50cnkgIT0gTlVMTCkgeworICAgICAgICBlbnRyeS0+YWxsb2NhdGlvbnMrKzsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBjcmVhdGUgYSBuZXcgZW50cnkKKyAgICAgICAgZW50cnkgPSBzdGF0aWNfY2FzdDxIYXNoRW50cnkqPihkbG1hbGxvYyhzaXplb2YoSGFzaEVudHJ5KSArIG51bUVudHJpZXMqc2l6ZW9mKHVpbnRwdHJfdCkpKTsKKyAgICAgICAgaWYgKCFlbnRyeSkgeworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgZW50cnktPmFsbG9jYXRpb25zID0gMTsKKyAgICAgICAgZW50cnktPnNsb3QgPSBzbG90OworICAgICAgICBlbnRyeS0+cHJldiA9IE5VTEw7CisgICAgICAgIGVudHJ5LT5uZXh0ID0gZ0hhc2hUYWJsZS5zbG90c1tzbG90XTsKKyAgICAgICAgZW50cnktPm51bUVudHJpZXMgPSBudW1FbnRyaWVzOworICAgICAgICBlbnRyeS0+c2l6ZSA9IHNpemU7CisKKyAgICAgICAgbWVtY3B5KGVudHJ5LT5iYWNrdHJhY2UsIGJhY2t0cmFjZSwgbnVtRW50cmllcyAqIHNpemVvZih1aW50cHRyX3QpKTsKKworICAgICAgICBnSGFzaFRhYmxlLnNsb3RzW3Nsb3RdID0gZW50cnk7CisKKyAgICAgICAgaWYgKGVudHJ5LT5uZXh0ICE9IE5VTEwpIHsKKyAgICAgICAgICAgIGVudHJ5LT5uZXh0LT5wcmV2ID0gZW50cnk7CisgICAgICAgIH0KKworICAgICAgICAvLyB3ZSBqdXN0IGFkZGVkIGFuIGVudHJ5LCBpbmNyZWFzZSB0aGUgc2l6ZSBvZiB0aGUgaGFzaHRhYmxlCisgICAgICAgIGdIYXNoVGFibGUuY291bnQrKzsKKyAgICB9CisKKyAgICByZXR1cm4gZW50cnk7Cit9CisKK3N0YXRpYyBpbnQgaXNfdmFsaWRfZW50cnkoSGFzaEVudHJ5KiBlbnRyeSkgeworICAgIGlmIChlbnRyeSAhPSBOVUxMKSB7CisgICAgICAgIGludCBpOworICAgICAgICBmb3IgKGkgPSAwIDsgaSA8IEhBU0hUQUJMRV9TSVpFIDsgaSsrKSB7CisgICAgICAgICAgICBIYXNoRW50cnkqIGUxID0gZ0hhc2hUYWJsZS5zbG90c1tpXTsKKworICAgICAgICAgICAgd2hpbGUgKGUxICE9IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBpZiAoZTEgPT0gZW50cnkpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgZTEgPSBlMS0+bmV4dDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCByZW1vdmVfZW50cnkoSGFzaEVudHJ5KiBlbnRyeSkgeworICAgIEhhc2hFbnRyeSogcHJldiA9IGVudHJ5LT5wcmV2OworICAgIEhhc2hFbnRyeSogbmV4dCA9IGVudHJ5LT5uZXh0OworCisgICAgaWYgKHByZXYgIT0gTlVMTCkgZW50cnktPnByZXYtPm5leHQgPSBuZXh0OworICAgIGlmIChuZXh0ICE9IE5VTEwpIGVudHJ5LT5uZXh0LT5wcmV2ID0gcHJldjsKKworICAgIGlmIChwcmV2ID09IE5VTEwpIHsKKyAgICAgICAgLy8gd2UgYXJlIHRoZSBoZWFkIG9mIHRoZSBsaXN0LiBzZXQgdGhlIGhlYWQgdG8gYmUgbmV4dAorICAgICAgICBnSGFzaFRhYmxlLnNsb3RzW2VudHJ5LT5zbG90XSA9IGVudHJ5LT5uZXh0OworICAgIH0KKworICAgIC8vIHdlIGp1c3QgcmVtb3ZlZCBhbmQgZW50cnksIGRlY3JlYXNlIHRoZSBzaXplIG9mIHRoZSBoYXNodGFibGUKKyAgICBnSGFzaFRhYmxlLmNvdW50LS07Cit9CisKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyBtYWxsb2MgZmlsbCBmdW5jdGlvbnMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyNkZWZpbmUgQ0hLX0ZJTExfRlJFRSAgICAgICAgICAgMHhlZgorI2RlZmluZSBDSEtfU0VOVElORUxfVkFMVUUgICAgICAweGViCisKK2V4dGVybiAiQyIgdm9pZCogZmlsbF9jYWxsb2Moc2l6ZV90IG5fZWxlbWVudHMsIHNpemVfdCBlbGVtX3NpemUpIHsKKyAgICByZXR1cm4gZGxjYWxsb2Mobl9lbGVtZW50cywgZWxlbV9zaXplKTsKK30KKworZXh0ZXJuICJDIiB2b2lkKiBmaWxsX21hbGxvYyhzaXplX3QgYnl0ZXMpIHsKKyAgICB2b2lkKiBidWZmZXIgPSBkbG1hbGxvYyhieXRlcyk7CisgICAgaWYgKGJ1ZmZlcikgeworICAgICAgICBtZW1zZXQoYnVmZmVyLCBDSEtfU0VOVElORUxfVkFMVUUsIGJ5dGVzKTsKKyAgICB9CisgICAgcmV0dXJuIGJ1ZmZlcjsKK30KKworZXh0ZXJuICJDIiB2b2lkIGZpbGxfZnJlZSh2b2lkKiBtZW0pIHsKKyAgICBzaXplX3QgYnl0ZXMgPSBkbG1hbGxvY191c2FibGVfc2l6ZShtZW0pOworICAgIG1lbXNldChtZW0sIENIS19GSUxMX0ZSRUUsIGJ5dGVzKTsKKyAgICBkbGZyZWUobWVtKTsKK30KKworZXh0ZXJuICJDIiB2b2lkKiBmaWxsX3JlYWxsb2Modm9pZCogbWVtLCBzaXplX3QgYnl0ZXMpIHsKKyAgICBzaXplX3Qgb2xkU2l6ZSA9IGRsbWFsbG9jX3VzYWJsZV9zaXplKG1lbSk7CisgICAgdm9pZCogbmV3TWVtID0gZGxyZWFsbG9jKG1lbSwgYnl0ZXMpOworICAgIGlmIChuZXdNZW0pIHsKKyAgICAgICAgLy8gSWYgdGhpcyBpcyBsYXJnZXIgdGhhbiBiZWZvcmUsIGZpbGwgdGhlIGV4dHJhIHdpdGggb3VyIHBhdHRlcm4uCisgICAgICAgIHNpemVfdCBuZXdTaXplID0gZGxtYWxsb2NfdXNhYmxlX3NpemUobmV3TWVtKTsKKyAgICAgICAgaWYgKG5ld1NpemUgPiBvbGRTaXplKSB7CisgICAgICAgICAgICBtZW1zZXQocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KG5ld01lbSkrb2xkU2l6ZSksIENIS19GSUxMX0ZSRUUsIG5ld1NpemUtb2xkU2l6ZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIG5ld01lbTsKK30KKworZXh0ZXJuICJDIiB2b2lkKiBmaWxsX21lbWFsaWduKHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBieXRlcykgeworICAgIHZvaWQqIGJ1ZmZlciA9IGRsbWVtYWxpZ24oYWxpZ25tZW50LCBieXRlcyk7CisgICAgaWYgKGJ1ZmZlcikgeworICAgICAgICBtZW1zZXQoYnVmZmVyLCBDSEtfU0VOVElORUxfVkFMVUUsIGJ5dGVzKTsKKyAgICB9CisgICAgcmV0dXJuIGJ1ZmZlcjsKK30KKworZXh0ZXJuICJDIiBzaXplX3QgZmlsbF9tYWxsb2NfdXNhYmxlX3NpemUoY29uc3Qgdm9pZCogbWVtKSB7CisgICAgLy8gU2luY2Ugd2UgZGlkbid0IGFsbG9jYXRlIGV4dHJhIGJ5dGVzIGJlZm9yZSBvciBhZnRlciwgd2UgY2FuCisgICAgLy8gcmVwb3J0IHRoZSBub3JtYWwgdXNhYmxlIHNpemUgaGVyZS4KKyAgICByZXR1cm4gZGxtYWxsb2NfdXNhYmxlX3NpemUobWVtKTsKK30KKworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vIG1hbGxvYyBsZWFrIGZ1bmN0aW9ucworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworc3RhdGljIHVpbnQzMl90IE1FTUFMSUdOX0dVQVJEICAgICAgPSAweEExQTQxNTIwOworCitleHRlcm4gIkMiIHZvaWQqIGxlYWtfbWFsbG9jKHNpemVfdCBieXRlcykgeworICAgIC8vIGFsbG9jYXRlIGVub3VnaCBzcGFjZSBpbmZyb250IG9mIHRoZSBhbGxvY2F0aW9uIHRvIHN0b3JlIHRoZSBwb2ludGVyIGZvcgorICAgIC8vIHRoZSBhbGxvYyBzdHJ1Y3R1cmUuIFRoaXMgd2lsbCBtYWtpbmcgZnJlZSdpbmcgdGhlIHN0cnVjdGVyIHJlYWxseSBmYXN0IQorCisgICAgLy8gMS4gYWxsb2NhdGUgZW5vdWdoIG1lbW9yeSBhbmQgaW5jbHVkZSBvdXIgaGVhZGVyCisgICAgLy8gMi4gc2V0IHRoZSBiYXNlIHBvaW50ZXIgdG8gYmUgcmlnaHQgYWZ0ZXIgb3VyIGhlYWRlcgorCisgICAgc2l6ZV90IHNpemUgPSBieXRlcyArIHNpemVvZihBbGxvY2F0aW9uRW50cnkpOworICAgIGlmIChzaXplIDwgYnl0ZXMpIHsgLy8gT3ZlcmZsb3cuCisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHZvaWQqIGJhc2UgPSBkbG1hbGxvYyhzaXplKTsKKyAgICBpZiAoYmFzZSAhPSBOVUxMKSB7CisgICAgICAgIFNjb3BlZFB0aHJlYWRNdXRleExvY2tlciBsb2NrZXIoJmdBbGxvY2F0aW9uc011dGV4KTsKKworICAgICAgICB1aW50cHRyX3QgYmFja3RyYWNlW0JBQ0tUUkFDRV9TSVpFXTsKKyAgICAgICAgc2l6ZV90IG51bUVudHJpZXMgPSBnZXRfYmFja3RyYWNlKGJhY2t0cmFjZSwgQkFDS1RSQUNFX1NJWkUpOworCisgICAgICAgIEFsbG9jYXRpb25FbnRyeSogaGVhZGVyID0gcmVpbnRlcnByZXRfY2FzdDxBbGxvY2F0aW9uRW50cnkqPihiYXNlKTsKKyAgICAgICAgaGVhZGVyLT5lbnRyeSA9IHJlY29yZF9iYWNrdHJhY2UoYmFja3RyYWNlLCBudW1FbnRyaWVzLCBieXRlcyk7CisgICAgICAgIGhlYWRlci0+Z3VhcmQgPSBHVUFSRDsKKworICAgICAgICAvLyBub3cgaW5jcmVtZW50IGJhc2UgdG8gcG9pbnQgdG8gYWZ0ZXIgb3VyIGhlYWRlci4KKyAgICAgICAgLy8gdGhpcyBzaG91bGQganVzdCB3b3JrIHNpbmNlIG91ciBoZWFkZXIgaXMgOCBieXRlcy4KKyAgICAgICAgYmFzZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8QWxsb2NhdGlvbkVudHJ5Kj4oYmFzZSkgKyAxOworICAgIH0KKworICAgIHJldHVybiBiYXNlOworfQorCitleHRlcm4gIkMiIHZvaWQgbGVha19mcmVlKHZvaWQqIG1lbSkgeworICAgIGlmIChtZW0gIT0gTlVMTCkgeworICAgICAgICBTY29wZWRQdGhyZWFkTXV0ZXhMb2NrZXIgbG9ja2VyKCZnQWxsb2NhdGlvbnNNdXRleCk7CisKKyAgICAgICAgLy8gY2hlY2sgdGhlIGd1YXJkIHRvIG1ha2Ugc3VyZSBpdCBpcyB2YWxpZAorICAgICAgICBBbGxvY2F0aW9uRW50cnkqIGhlYWRlciA9IHRvX2hlYWRlcihtZW0pOworCisgICAgICAgIGlmIChoZWFkZXItPmd1YXJkICE9IEdVQVJEKSB7CisgICAgICAgICAgICAvLyBjb3VsZCBiZSBhIG1lbWFsaWduZWQgYmxvY2sKKyAgICAgICAgICAgIGlmIChoZWFkZXItPmd1YXJkID09IE1FTUFMSUdOX0dVQVJEKSB7CisgICAgICAgICAgICAgICAgLy8gRm9yIG1lbWFsaWduZWQgYmxvY2tzLCBoZWFkZXItPmVudHJ5IHBvaW50cyB0byB0aGUgbWVtb3J5CisgICAgICAgICAgICAgICAgLy8gYWxsb2NhdGVkIHRocm91Z2ggbGVha19tYWxsb2MuCisgICAgICAgICAgICAgICAgaGVhZGVyID0gdG9faGVhZGVyKGhlYWRlci0+ZW50cnkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKGhlYWRlci0+Z3VhcmQgPT0gR1VBUkQgfHwgaXNfdmFsaWRfZW50cnkoaGVhZGVyLT5lbnRyeSkpIHsKKyAgICAgICAgICAgIC8vIGRlY3JlbWVudCB0aGUgYWxsb2NhdGlvbnMKKyAgICAgICAgICAgIEhhc2hFbnRyeSogZW50cnkgPSBoZWFkZXItPmVudHJ5OworICAgICAgICAgICAgZW50cnktPmFsbG9jYXRpb25zLS07CisgICAgICAgICAgICBpZiAoZW50cnktPmFsbG9jYXRpb25zIDw9IDApIHsKKyAgICAgICAgICAgICAgICByZW1vdmVfZW50cnkoZW50cnkpOworICAgICAgICAgICAgICAgIGRsZnJlZShlbnRyeSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIG5vdyBmcmVlIHRoZSBtZW1vcnkhCisgICAgICAgICAgICBkbGZyZWUoaGVhZGVyKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGRlYnVnX2xvZygiV0FSTklORyBiYWQgaGVhZGVyIGd1YXJkOiAnMHgleCchIGFuZCBpbnZhbGlkIGVudHJ5OiAlcFxuIiwKKyAgICAgICAgICAgICAgICAgICAgaGVhZGVyLT5ndWFyZCwgaGVhZGVyLT5lbnRyeSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK2V4dGVybiAiQyIgdm9pZCogbGVha19jYWxsb2Moc2l6ZV90IG5fZWxlbWVudHMsIHNpemVfdCBlbGVtX3NpemUpIHsKKyAgICAvKiBGYWlsIG9uIG92ZXJmbG93IC0ganVzdCB0byBiZSBzYWZlIGV2ZW4gdGhvdWdoIHRoaXMgY29kZSBydW5zIG9ubHkKKyAgICAgKiB3aXRoaW4gdGhlIGRlYnVnZ2luZyBDIGxpYnJhcnksIG5vdCB0aGUgcHJvZHVjdGlvbiBvbmUgKi8KKyAgICBpZiAobl9lbGVtZW50cyAmJiBNQVhfU0laRV9UIC8gbl9lbGVtZW50cyA8IGVsZW1fc2l6ZSkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgc2l6ZV90IHNpemUgPSBuX2VsZW1lbnRzICogZWxlbV9zaXplOworICAgIHZvaWQqIHB0ciAgPSBsZWFrX21hbGxvYyhzaXplKTsKKyAgICBpZiAocHRyICE9IE5VTEwpIHsKKyAgICAgICAgbWVtc2V0KHB0ciwgMCwgc2l6ZSk7CisgICAgfQorICAgIHJldHVybiBwdHI7Cit9CisKK2V4dGVybiAiQyIgdm9pZCogbGVha19yZWFsbG9jKHZvaWQqIG9sZE1lbSwgc2l6ZV90IGJ5dGVzKSB7CisgICAgaWYgKG9sZE1lbSA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBsZWFrX21hbGxvYyhieXRlcyk7CisgICAgfQorCisgICAgdm9pZCogbmV3TWVtID0gTlVMTDsKKyAgICBBbGxvY2F0aW9uRW50cnkqIGhlYWRlciA9IHRvX2hlYWRlcihvbGRNZW0pOworICAgIGlmIChoZWFkZXItPmd1YXJkID09IE1FTUFMSUdOX0dVQVJEKSB7CisgICAgICAgIC8vIEdldCB0aGUgcmVhbCBoZWFkZXIuCisgICAgICAgIGhlYWRlciA9IHRvX2hlYWRlcihoZWFkZXItPmVudHJ5KTsKKyAgICB9IGVsc2UgaWYgKGhlYWRlci0+Z3VhcmQgIT0gR1VBUkQpIHsKKyAgICAgICAgZGVidWdfbG9nKCJXQVJOSU5HIGJhZCBoZWFkZXIgZ3VhcmQ6ICcweCV4JyEgYW5kIGludmFsaWQgZW50cnk6ICVwXG4iLAorICAgICAgICAgICAgICAgICAgIGhlYWRlci0+Z3VhcmQsIGhlYWRlci0+ZW50cnkpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBuZXdNZW0gPSBsZWFrX21hbGxvYyhieXRlcyk7CisgICAgaWYgKG5ld01lbSAhPSBOVUxMKSB7CisgICAgICAgIHNpemVfdCBvbGRTaXplID0gaGVhZGVyLT5lbnRyeS0+c2l6ZSAmIH5TSVpFX0ZMQUdfTUFTSzsKKyAgICAgICAgc2l6ZV90IGNvcHlTaXplID0gKG9sZFNpemUgPD0gYnl0ZXMpID8gb2xkU2l6ZSA6IGJ5dGVzOworICAgICAgICBtZW1jcHkobmV3TWVtLCBvbGRNZW0sIGNvcHlTaXplKTsKKyAgICB9CisgICAgbGVha19mcmVlKG9sZE1lbSk7CisKKyAgICByZXR1cm4gbmV3TWVtOworfQorCitleHRlcm4gIkMiIHZvaWQqIGxlYWtfbWVtYWxpZ24oc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IGJ5dGVzKSB7CisgICAgLy8gd2UgY2FuIGp1c3QgdXNlIG1hbGxvYworICAgIGlmIChhbGlnbm1lbnQgPD0gTUFMTE9DX0FMSUdOTUVOVCkgeworICAgICAgICByZXR1cm4gbGVha19tYWxsb2MoYnl0ZXMpOworICAgIH0KKworICAgIC8vIG5lZWQgdG8gbWFrZSBzdXJlIGl0J3MgYSBwb3dlciBvZiB0d28KKyAgICBpZiAoYWxpZ25tZW50ICYgKGFsaWdubWVudC0xKSkgeworICAgICAgICBhbGlnbm1lbnQgPSAxTCA8PCAoMzEgLSBfX2J1aWx0aW5fY2x6KGFsaWdubWVudCkpOworICAgIH0KKworICAgIC8vIGhlcmUsIGFsaWdubWVudCBpcyBhdCBsZWFzdCBNQUxMT0NfQUxJR05NRU5UPDwxIGJ5dGVzCisgICAgLy8gd2Ugd2lsbCBhbGlnbiBieSBhdCBsZWFzdCBNQUxMT0NfQUxJR05NRU5UIGJ5dGVzCisgICAgLy8gYW5kIGF0IG1vc3QgYWxpZ25tZW50LU1BTExPQ19BTElHTk1FTlQgYnl0ZXMKKyAgICBzaXplX3Qgc2l6ZSA9IChhbGlnbm1lbnQtTUFMTE9DX0FMSUdOTUVOVCkgKyBieXRlczsKKyAgICBpZiAoc2l6ZSA8IGJ5dGVzKSB7IC8vIE92ZXJmbG93LgorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICB2b2lkKiBiYXNlID0gbGVha19tYWxsb2Moc2l6ZSk7CisgICAgaWYgKGJhc2UgIT0gTlVMTCkgeworICAgICAgICB1aW50cHRyX3QgcHRyID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGJhc2UpOworICAgICAgICBpZiAoKHB0ciAlIGFsaWdubWVudCkgPT0gMCkgeworICAgICAgICAgICAgcmV0dXJuIGJhc2U7CisgICAgICAgIH0KKworICAgICAgICAvLyBhbGlnbiB0aGUgcG9pbnRlcgorICAgICAgICBwdHIgKz0gKCgtcHRyKSAlIGFsaWdubWVudCk7CisKKyAgICAgICAgLy8gQWxyZWFkeSBhbGxvY2F0ZWQgZW5vdWdoIHNwYWNlIGZvciB0aGUgaGVhZGVyLiBUaGlzIGFzc3VtZXMKKyAgICAgICAgLy8gdGhhdCB0aGUgbWFsbG9jIGFsaWdubWVudCBpcyBhdCBsZWFzdCA4LCBvdGhlcndpc2UsIHRoaXMgaXMKKyAgICAgICAgLy8gbm90IGd1YXJhbnRlZWQgdG8gaGF2ZSB0aGUgc3BhY2UgZm9yIHRoZSBoZWFkZXIuCisgICAgICAgIEFsbG9jYXRpb25FbnRyeSogaGVhZGVyID0gdG9faGVhZGVyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHB0cikpOworICAgICAgICBoZWFkZXItPmd1YXJkID0gTUVNQUxJR05fR1VBUkQ7CisgICAgICAgIGhlYWRlci0+ZW50cnkgPSByZWludGVycHJldF9jYXN0PEhhc2hFbnRyeSo+KGJhc2UpOworCisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PHZvaWQqPihwdHIpOworICAgIH0KKyAgICByZXR1cm4gYmFzZTsKK30KKworZXh0ZXJuICJDIiBzaXplX3QgbGVha19tYWxsb2NfdXNhYmxlX3NpemUoY29uc3Qgdm9pZCogbWVtKSB7CisgICAgaWYgKG1lbSAhPSBOVUxMKSB7CisgICAgICAgIC8vIENoZWNrIHRoZSBndWFyZCB0byBtYWtlIHN1cmUgaXQgaXMgdmFsaWQuCisgICAgICAgIGNvbnN0IEFsbG9jYXRpb25FbnRyeSogaGVhZGVyID0gY29uc3RfdG9faGVhZGVyKCh2b2lkKiltZW0pOworCisgICAgICAgIGlmIChoZWFkZXItPmd1YXJkID09IE1FTUFMSUdOX0dVQVJEKSB7CisgICAgICAgICAgICAvLyBJZiB0aGlzIGlzIGEgbWVtYWxpZ24nZCBwb2ludGVyLCB0aGVuIGdyYWIgdGhlIGhlYWRlciBmcm9tCisgICAgICAgICAgICAvLyBlbnRyeS4KKyAgICAgICAgICAgIGhlYWRlciA9IGNvbnN0X3RvX2hlYWRlcihoZWFkZXItPmVudHJ5KTsKKyAgICAgICAgfSBlbHNlIGlmIChoZWFkZXItPmd1YXJkICE9IEdVQVJEKSB7CisgICAgICAgICAgICBkZWJ1Z19sb2coIldBUk5JTkcgYmFkIGhlYWRlciBndWFyZDogJzB4JXgnISBhbmQgaW52YWxpZCBlbnRyeTogJXBcbiIsCisgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyLT5ndWFyZCwgaGVhZGVyLT5lbnRyeSk7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorCisgICAgICAgIHNpemVfdCByZXQgPSBkbG1hbGxvY191c2FibGVfc2l6ZShoZWFkZXIpOworICAgICAgICBpZiAocmV0ICE9IDApIHsKKyAgICAgICAgICAgIC8vIFRoZSB1c2FibGUgYXJlYSBzdGFydHMgYXQgJ21lbScgYW5kIHN0b3BzIGF0ICdoZWFkZXIrcmV0Jy4KKyAgICAgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oaGVhZGVyKSArIHJldCAtIHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihtZW0pOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvbWFsbG9jX2RlYnVnX3FlbXUuYyBiL2xpYmMvYmlvbmljL21hbGxvY19kZWJ1Z19xZW11LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRiNjk0ZTkuLjAwMDAwMDAKLS0tIGEvbGliYy9iaW9uaWMvbWFsbG9jX2RlYnVnX3FlbXUuYworKysgL2Rldi9udWxsCkBAIC0xLDEwMTQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqICAgIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKLSAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi0gKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCi0gKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAotICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCi0gKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKLSAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0vKgotICogQ29udGFpbnMgaW1wbGVtZW50YXRpb24gb2YgbWVtb3J5IGFsbG9jYXRpb24gcm91dGluZXMgaW5zdHJ1bWVudGVkIGZvcgotICogdXNhZ2UgaW4gdGhlIGVtdWxhdG9yIHRvIGRldGVjdCBtZW1vcnkgYWxsb2NhdGlvbiB2aW9sYXRpb25zLCBzdWNoIGFzCi0gKiBtZW1vcnkgbGVha3MsIGJ1ZmZlciBvdmVycnVucywgZXRjLgotICogQ29kZSwgaW1wbGVtZW50ZWQgaGVyZSBpcyBpbnRlbmRlZCB0byBydW4gaW4gdGhlIGVtdWxhdGVkIGVudmlyb25tZW50IG9ubHksCi0gKiBhbmQgc2VydmVzIHNpbXBseSBhcyBob29rcyBpbnRvIG1lbW9yeSBhbGxvY2F0aW9uIHJvdXRpbmVzLiBNYWluIGpvYiBvZiB0aGlzCi0gKiBjb2RlIGlzIHRvIG5vdGlmeSB0aGUgZW11bGF0b3IgYWJvdXQgbWVtb3J5IGJlaW5nIGFsbG9jYXRlZC9kZWFsbG9jYXRlZCwKLSAqIHByb3ZpZGluZyBpbmZvcm1hdGlvbiBhYm91dCBlYWNoIGFsbG9jYXRpb24uIFRoZSBpZGVhIGlzIHRoYXQgZW11bGF0b3Igd2lsbAotICoga2VlcCBsaXN0IG9mIGN1cnJlbnRseSBhbGxvY2F0ZWQgYmxvY2tzLCBhbmQsIGtub3dpbmcgYm91bmRhcmllcyBvZiBlYWNoCi0gKiBibG9jayBpdCB3aWxsIGJlIGFibGUgdG8gdmVyaWZ5IHRoYXQgbGQvc3QgYWNjZXNzIHRvIHRoZXNlIGJsb2NrcyBkb24ndCBzdGVwCi0gKiBvdmVyIGJvdW5kYXJpZXMgc2V0IGZvciB0aGUgdXNlci4gVG8gZW5mb3JjZSB0aGF0LCBlYWNoIG1lbW9yeSBibG9jawotICogYWxsb2NhdGVkIGJ5IHRoaXMgY29kZSBpcyBndWFyZGVkIHdpdGggInByZWZpeCIgYW5kICJzdWZmaXgiIGFyZWFzLCBzbwotICogZXZlcnkgdGltZSBlbXVsYXRvciBkZXRlY3RzIGFjY2VzcyB0byBhbnkgb2YgdGhlc2UgZ3VhcmRpbmcgYXJlYXMsIGl0IGNhbiBiZQotICogY29uc2lkZXJlZCBhcyBhY2Nlc3MgdmlvbGF0aW9uLgotICovCi0KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdGRkZWYuaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPGZjbnRsLmg+Ci0jaW5jbHVkZSA8c3lzL21tYW4uaD4KLSNpbmNsdWRlIDxwdGhyZWFkLmg+Ci0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0jaW5jbHVkZSA8ZXJybm8uaD4KLSNpbmNsdWRlICJkbG1hbGxvYy5oIgotI2luY2x1ZGUgImxvZ2QuaCIKLSNpbmNsdWRlICJtYWxsb2NfZGVidWdfY29tbW9uLmgiCi0KLS8qIFRoaXMgZmlsZSBzaG91bGQgYmUgaW5jbHVkZWQgaW50byB0aGUgYnVpbGQgb25seSB3aGVuCi0gKiBNQUxMT0NfUUVNVV9JTlNUUlVNRU5UIG1hY3JvIGlzIGRlZmluZWQuICovCi0jaWZuZGVmIE1BTExPQ19RRU1VX0lOU1RSVU1FTlQKLSNlcnJvciBNQUxMT0NfUUVNVV9JTlNUUlVNRU5UIGlzIG5vdCBkZWZpbmVkLgotI2VuZGlmICAvLyAhTUFMTE9DX1FFTVVfSU5TVFJVTUVOVAotCi0vKiBDb250cm9scyBhY2Nlc3MgdmlvbGF0aW9uIHRlc3QgcGVyZm9ybWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHdlIGNhdGNoIEFWcwotICogYWxsIHRoZSB0aW1lIHRoZXkgb2NjdXIuIFNlZSB0ZXN0X2FjY2Vzc192aW9sYXRpb24gZm9yIG1vcmUgaW5mby4gVGhpcyBtYWNybwotICogaXMgdXNlZCBmb3IgaW50ZXJuYWwgdGVzdGluZyBwdXJwb3NlcyBhbmQgc2hvdWxkIGFsd2F5cyBiZSBzZXQgdG8gemVybyBmb3IKLSAqIHRoZSBwcm9kdWN0aW9uIGJ1aWxkcy4gKi8KLSNkZWZpbmUgVEVTVF9BQ0NFU1NfVklPTEFUSU9OUyAgMAotCi0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLy8gQ29tbXVuaWNhdGlvbiBzdHJ1Y3R1cmVzCi0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0vKiBEZXNjcmliZXMgbWVtb3J5IGJsb2NrIGFsbG9jYXRlZCBmcm9tIHRoZSBoZWFwLiBUaGlzIHN0cnVjdHVyZSBpcyBwYXNzZWQKLSAqIGFsb25nIHdpdGggVFJBQ0VfREVWX1JFR19NQUxMT0MgZXZlbnQuIFRoaXMgZGVzY3JpcHRvciBpcyB1c2VkIHRvIGluZm9ybQotICogdGhlIGVtdWxhdG9yIGFib3V0IG5ldyBtZW1vcnkgYmxvY2sgYmVpbmcgYWxsb2NhdGVkIGZyb20gdGhlIGhlYXAuIFRoZSBlbnRpcmUKLSAqIHN0cnVjdHVyZSBpcyBpbml0aWFsaXplZCBieSB0aGUgZ3Vlc3Qgc3lzdGVtIGJlZm9yZSBldmVudCBpcyBmaXJlZCB1cC4gSXQgaXMKLSAqIGltcG9ydGFudCB0byByZW1lbWJlciB0aGF0IHNhbWUgc3RydWN0dXJlIChhbiBleGFjdCBjb3B5LCBleGNlcHQgZm9yCi0gKiByZXBsYWNpbmcgcG9pbnRlcnMgd2l0aCB0YXJnZXRfdWxvbmcpIGlzIGFsc28gZGVjbGFyZWQgaW4gdGhlIGVtdWxhdG9yJ3MKLSAqIHNvdXJjZXMgKGZpbGUgbWVtY2hlY2svbWVtY2hlY2tfY29tbW9uLmgpLiBTbywgZXZlcnkgdGltZSBhIGNoYW5nZSBpcyBtYWRlIHRvCi0gKiBhbnkgb2YgdGhlc2UgdHdvIGRlY2xhcmF0aW9uLCBhbm90aGVyIG9uZSBtdXN0IGJlIGFsc28gdXBkYXRlZCBhY2NvcmRpbmdseS4KLSAqLwotdHlwZWRlZiBzdHJ1Y3QgTWFsbG9jRGVzYyB7Ci0gICAgLyogUG9pbnRlciB0byB0aGUgbWVtb3J5IGJsb2NrIGFjdHVhbGx5IGFsbG9jYXRlZCBmcm9tIHRoZSBoZWFwLiBOb3RlIHRoYXQKLSAgICAgKiB0aGlzIGlzIG5vdCB0aGUgcG9pbnRlciB0aGF0IGlzIHJldHVybmVkIHRvIHRoZSBtYWxsb2MncyBjYWxsZXIuIFBvaW50ZXIKLSAgICAgKiByZXR1cm5lZCB0byB0aGUgY2FsbGVyIGlzIGNhbGN1bGF0ZWQgYnkgYWRkaW5nIHZhbHVlIHN0b3JlZCBpbiB0aGlzIGZpZWxkCi0gICAgICogdG8gdGhlIHZhbHVlIHN0b3JlZCBpbiBwcmVmaXhfc2l6ZSBmaWVsZCBvZiB0aGlzIHN0cnVjdHVyZS4KLSAgICAgKi8KLSAgICB2b2lkKiAgICAgICBwdHI7Ci0KLSAgICAvKiBOdW1iZXIgb2YgYnl0ZXMgcmVxdWVzdGVkIGJ5IHRoZSBtYWxsb2MncyBjYWxsZXIuICovCi0gICAgdWludDMyX3QgICAgcmVxdWVzdGVkX2J5dGVzOwotCi0gICAgLyogQnl0ZSBzaXplIG9mIHRoZSBwcmVmaXggZGF0YS4gQWN0dWFsIHBvaW50ZXIgcmV0dXJuZWQgdG8gdGhlIG1hbGxvYydzCi0gICAgICogY2FsbGVyIGlzIGNhbGN1bGF0ZWQgYnkgYWRkaW5nIHZhbHVlIHN0b3JlZCBpbiB0aGlzIGZpZWxkIHRvIHRoZSB2YWx1ZQotICAgICAqIHN0b3JlZCBpbiBpbiB0aGUgcHRyIGZpZWxkIG9mIHRoaXMgc3RydWN0dXJlLgotICAgICAqLwotICAgIHVpbnQzMl90ICAgIHByZWZpeF9zaXplOwotCi0gICAgLyogQnl0ZSBzaXplIG9mIHRoZSBzdWZmaXggZGF0YS4gKi8KLSAgICB1aW50MzJfdCAgICBzdWZmaXhfc2l6ZTsKLQotICAgIC8qIElkIG9mIHRoZSBwcm9jZXNzIHRoYXQgaW5pdGlhbGl6ZWQgbGliYyBpbnN0YW5jZSwgaW4gd2hpY2ggYWxsb2NhdGlvbgotICAgICAqIGhhcyBvY2N1cnJlZC4gVGhpcyBmaWVsZCBpcyB1c2VkIGJ5IHRoZSBlbXVsYXRvciB0byByZXBvcnQgZXJyb3JzIGluCi0gICAgICogdGhlIGNvdXJzZSBvZiBUUkFDRV9ERVZfUkVHX01BTExPQyBldmVudCBoYW5kbGluZy4gSW4gY2FzZSBvZiBhbiBlcnJvciwKLSAgICAgKiBlbXVsYXRvciBzZXRzIHRoaXMgZmllbGQgdG8gemVybyAoaW52YWxpZCB2YWx1ZSBmb3IgYSBwcm9jZXNzIElEKS4KLSAgICAgKi8KLSAgICB1aW50MzJfdCAgICBsaWJjX3BpZDsKLQotICAgIC8qIElkIG9mIHRoZSBwcm9jZXNzIGluIGNvbnRleHQgb2Ygd2hpY2ggYWxsb2NhdGlvbiBoYXMgb2NjdXJyZWQuCi0gICAgICogVmFsdWUgaW4gdGhpcyBmaWVsZCBtYXkgZGlmZmVyIGZyb20gbGliY19waWQgdmFsdWUsIGlmIHByb2Nlc3MgdGhhdAotICAgICAqIGlzIGRvaW5nIGFsbG9jYXRpb24gaGFzIGJlZW4gZm9ya2VkIGZyb20gdGhlIHByb2Nlc3MgdGhhdCBpbml0aWFsaXplZAotICAgICAqIGxpYmMgaW5zdGFuY2UuCi0gICAgICovCi0gICAgdWludDMyX3QgICAgYWxsb2NhdG9yX3BpZDsKLQotICAgIC8qIE51bWJlciBvZiBhY2Nlc3MgdmlvbGF0aW9ucyBkZXRlY3RlZCBvbiB0aGlzIGFsbG9jYXRpb24uICovCi0gICAgdWludDMyX3QgICAgYXZfY291bnQ7Ci19IE1hbGxvY0Rlc2M7Ci0KLS8qIERlc2NyaWJlcyBtZW1vcnkgYmxvY2sgaW5mbyBxdWVyaWVkIGZyb20gZW11bGF0b3IuIFRoaXMgc3RydWN0dXJlIGlzIHBhc3NlZAotICogYWxvbmcgd2l0aCBUUkFDRV9ERVZfUkVHX1FVRVJZX01BTExPQyBldmVudC4gV2hlbiBoYW5kbGluZyBmcmVlIGFuZCByZWFsbG9jCi0gKiBjYWxscywgaXQgaXMgcmVxdWlyZWQgdGhhdCB3ZSBoYXZlIGluZm9ybWF0aW9uIGFib3V0IG1lbW9yeSBibG9ja3MgdGhhdCB3ZXJlCi0gKiBhY3R1YWxseSBhbGxvY2F0ZWQgaW4gcHJldmlvdXMgY2FsbHMgdG8gbWFsbG9jLCBjYWxsb2MsIG1lbWFsaWduLCBvciByZWFsbG9jLgotICogU2luY2Ugd2UgZG9uJ3Qga2VlcCB0aGlzIGluZm9ybWF0aW9uIGRpcmVjdGx5IGluIHRoZSBhbGxvY2F0ZWQgYmxvY2ssIGJ1dAotICogcmF0aGVyIHdlIGtlZXAgaXQgaW4gdGhlIGVtdWxhdG9yLCB3ZSBuZWVkIHRvIHF1ZXJ5IGVtdWxhdG9yIGZvciB0aGF0Ci0gKiBpbmZvcm1hdGlvbiB3aXRoIFRSQUNFX0RFVl9SRUdfUVVFUllfTUFMTE9DIHF1ZXJ5LiBUaGUgZW50aXJlIHN0cnVjdHVyZSBpcwotICogaW5pdGlhbGl6ZWQgYnkgdGhlIGd1ZXN0IHN5c3RlbSBiZWZvcmUgZXZlbnQgaXMgZmlyZWQgdXAuIEl0IGlzIGltcG9ydGFudCB0bwotICogcmVtZW1iZXIgdGhhdCBzYW1lIHN0cnVjdHVyZSAoYW4gZXhhY3QgY29weSwgZXhjZXB0IGZvciByZXBsYWNpbmcgcG9pbnRlcnMKLSAqIHdpdGggdGFyZ2V0X3Vsb25nKSBpcyBhbHNvIGRlY2xhcmVkIGluIHRoZSBlbXVsYXRvcidzIHNvdXJjZXMgKGZpbGUKLSAqIG1lbWNoZWNrL21lbWVjaGVja19jb21tb24uaCkuIFNvLCBldmVyeSB0aW1lIGEgY2hhbmdlIGlzIG1hZGUgdG8gYW55IG9mIHRoZXNlCi0gKiB0d28gZGVjbGFyYXRpb24sIGFub3RoZXIgb25lIG11c3QgYmUgYWxzbyB1cGRhdGVkIGFjY29yZGluZ2x5LgotICovCi10eXBlZGVmIHN0cnVjdCBNYWxsb2NEZXNjUXVlcnkgewotICAgIC8qIFBvaW50ZXIsIGZvciB3aGljaCBpbmZvcm1hdGlvbiBpcyBxdWVyaWVkLiBOb3RlIHRoYXQgdGhpcyBwb2ludGVyIGRvZXNuJ3QKLSAgICAgKiBoYXZlIHRvIGJlIGV4YWN0IHBvaW50ZXIgcmV0dXJuZWQgdG8gbWFsbG9jJ3MgY2FsbGVyLCBidXQgY2FuIHBvaW50Ci0gICAgICogYW55d2hlcmUgaW5zaWRlIGFuIGFsbG9jYXRlZCBibG9jaywgaW5jbHVkaW5nIGd1YXJkaW5nIGFyZWFzLiBFbXVsYXRvcgotICAgICAqIHdpbGwgcmVzcG9uZCB3aXRoIGluZm9ybWF0aW9uIGFib3V0IGFsbG9jYXRlZCBibG9jayB0aGF0IGNvbnRhaW5zIHRoaXMKLSAgICAgKiBwb2ludGVyLgotICAgICAqLwotICAgIHZvaWQqICAgICAgIHB0cjsKLQotICAgIC8qIElkIG9mIHRoZSBwcm9jZXNzIHRoYXQgaW5pdGlhbGl6ZWQgbGliYyBpbnN0YW5jZSwgaW4gd2hpY2ggdGhpcyBxdWVyeQotICAgICAqIGlzIGNhbGxlZC4gVGhpcyBmaWVsZCBpcyB1c2VkIGJ5IHRoZSBlbXVsYXRvciB0byByZXBvcnQgZXJyb3JzIGluCi0gICAgICogdGhlIGNvdXJzZSBvZiBUUkFDRV9ERVZfUkVHX1FVRVJZX01BTExPQyBldmVudCBoYW5kbGluZy4gSW4gY2FzZSBvZiBhbgotICAgICAqIGVycm9yLCBlbXVsYXRvciBzZXRzIHRoaXMgZmllbGQgdG8gemVybyAoaW52YWxpZCB2YWx1ZSBmb3IgYSBwcm9jZXNzIElEKS4KLSAgICAgKi8KLSAgICB1aW50MzJfdCAgICBsaWJjX3BpZDsKLQotICAgIC8qIFByb2Nlc3MgSUQgaW4gY29udGV4dCBvZiB3aGljaCBxdWVyeSBpcyBtYWRlLiAqLwotICAgIHVpbnQzMl90ICAgIHF1ZXJ5X3BpZDsKLQotICAgIC8qIENvZGUgb2YgdGhlIGFsbG9jYXRpb24gcm91dGluZSwgaW4gY29udGV4dCBvZiB3aGljaCBxdWVyeSBoYXMgYmVlbiBtYWRlOgotICAgICAqICAxIC0gZnJlZQotICAgICAqICAyIC0gcmVhbGxvYwotICAgICAqLwotICAgIHVpbnQzMl90ICAgIHJvdXRpbmU7Ci0KLSAgICAvKiBBZGRyZXNzIG9mIG1lbW9yeSBhbGxvY2F0aW9uIGRlc2NyaXB0b3IgZm9yIHRoZSBxdWVyaWVkIHBvaW50ZXIuCi0gICAgICogRGVzY3JpcHRvciwgYWRkcmVzc2VkIGJ5IHRoaXMgZmllbGQgaXMgaW5pdGlhbGl6ZWQgYnkgdGhlIGVtdWxhdG9yIGluCi0gICAgICogcmVzcG9uc2UgdG8gdGhlIHF1ZXJ5LgotICAgICAqLwotICAgIE1hbGxvY0Rlc2MqICBkZXNjOwotfSBNYWxsb2NEZXNjUXVlcnk7Ci0KLS8qIERlc2NyaWJlcyBtZW1vcnkgYmxvY2sgdGhhdCBpcyBiZWluZyBmcmVlZCBiYWNrIHRvIHRoZSBoZWFwLiBUaGlzIHN0cnVjdHVyZQotICogaXMgcGFzc2VkIGFsb25nIHdpdGggVFJBQ0VfREVWX1JFR19GUkVFX1BUUiBldmVudC4gVGhlIGVudGlyZSBzdHJ1Y3R1cmUgaXMKLSAqIGluaXRpYWxpemVkIGJ5IHRoZSBndWVzdCBzeXN0ZW0gYmVmb3JlIGV2ZW50IGlzIGZpcmVkIHVwLiBJdCBpcyBpbXBvcnRhbnQgdG8KLSAqIHJlbWVtYmVyIHRoYXQgc2FtZSBzdHJ1Y3R1cmUgKGFuIGV4YWN0IGNvcHksIGV4Y2VwdCBmb3IgcmVwbGFjaW5nIHBvaW50ZXJzCi0gKiB3aXRoIHRhcmdldF91bG9uZykgaXMgYWxzbyBkZWNsYXJlZCBpbiB0aGUgZW11bGF0b3IncyBzb3VyY2VzIChmaWxlCi0gKiBtZW1jaGVjay9tZW1lY2hlY2tfY29tbW9uLmgpLiBTbywgZXZlcnkgdGltZSBhIGNoYW5nZSBpcyBtYWRlIHRvIGFueSBvZiB0aGVzZQotICogdHdvIGRlY2xhcmF0aW9uLCBhbm90aGVyIG9uZSBtdXN0IGJlIGFsc28gdXBkYXRlZCBhY2NvcmRpbmdseS4KLSAqLwotdHlwZWRlZiBzdHJ1Y3QgTWFsbG9jRnJlZSB7Ci0gICAgLyogUG9pbnRlciB0byBiZSBmcmVlZC4gKi8KLSAgICB2b2lkKiAgICAgICBwdHI7Ci0KLSAgICAvKiBJZCBvZiB0aGUgcHJvY2VzcyB0aGF0IGluaXRpYWxpemVkIGxpYmMgaW5zdGFuY2UsIGluIHdoaWNoIHRoaXMgZnJlZQotICAgICAqIGlzIGNhbGxlZC4gVGhpcyBmaWVsZCBpcyB1c2VkIGJ5IHRoZSBlbXVsYXRvciB0byByZXBvcnQgZXJyb3JzIGluCi0gICAgICogdGhlIGNvdXJzZSBvZiBUUkFDRV9ERVZfUkVHX0ZSRUVfUFRSIGV2ZW50IGhhbmRsaW5nLiBJbiBjYXNlIG9mIGFuCi0gICAgICogZXJyb3IsIGVtdWxhdG9yIHNldHMgdGhpcyBmaWVsZCB0byB6ZXJvIChpbnZhbGlkIHZhbHVlIGZvciBhIHByb2Nlc3MgSUQpLgotICAgICAqLwotICAgIHVpbnQzMl90ICAgIGxpYmNfcGlkOwotCi0gICAgLyogUHJvY2VzcyBJRCBpbiBjb250ZXh0IG9mIHdoaWNoIG1lbW9yeSBpcyBiZWluZyBmcmVlZC4gKi8KLSAgICB1aW50MzJfdCAgICBmcmVlX3BpZDsKLX0gTWFsbG9jRnJlZTsKLQotLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS8vIENvbW11bmljYXRpb24gZXZlbnRzCi0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0vKiBOb3RpZmllcyB0aGUgZW11bGF0b3IgdGhhdCBsaWJjIGhhcyBiZWVuIGluaXRpYWxpemVkIGZvciBhIHByb2Nlc3MuCi0gKiBFdmVudCdzIHZhbHVlIHBhcmFtZXRlciBpcyBQSUQgZm9yIHRoZSBwcm9jZXNzIGluIGNvbnRleHQgb2Ygd2hpY2ggbGliYyBoYXMKLSAqIGJlZW4gaW5pdGlhbGl6ZWQuCi0gKi8KLSNkZWZpbmUgVFJBQ0VfREVWX1JFR19MSUJDX0lOSVQgICAgICAgICAgICAgMTUzNgotCi0vKiBOb3RpZmllcyB0aGUgZW11bGF0b3IgYWJvdXQgbmV3IG1lbW9yeSBibG9jayBiZWVuIGFsbG9jYXRlZC4KLSAqIEV2ZW50J3MgdmFsdWUgcGFyYW1ldGVyIHBvaW50cyB0byBNYWxsb2NEZXNjIGluc3RhbmNlIHRoYXQgY29udGFpbnMKLSAqIGFsbG9jYXRlZCBibG9jayBpbmZvcm1hdGlvbi4gTm90ZSB0aGF0ICdsaWJjX3BpZCcgZmllbGQgb2YgdGhlIGRlc2NyaXB0b3IKLSAqIGlzIHVzZWQgYnkgZW11bGF0b3IgdG8gcmVwb3J0IGZhaWx1cmUgaW4gaGFuZGxpbmcgdGhpcyBldmVudC4gSW4gY2FzZQotICogb2YgYSBmYWlsdXJlIGVtdWxhdG9yIHdpbGwgemVybyB0aGF0IGZpZWxkIGJlZm9yZSBjb21wbGV0aW5nIHRoaXMgZXZlbnQuCi0gKi8KLSNkZWZpbmUgVFJBQ0VfREVWX1JFR19NQUxMT0MgICAgICAgICAgICAgICAgMTUzNwotCi0vKiBOb3RpZmllcyB0aGUgZW11bGF0b3IgYWJvdXQgbWVtb3J5IGJsb2NrIGJlaW5nIGZyZWVkLgotICogRXZlbnQncyB2YWx1ZSBwYXJhbWV0ZXIgcG9pbnRzIHRvIE1hbGxvY0ZyZWUgZGVzY3JpcHRvciB0aGF0IGNvbnRhaW5zCi0gKiBpbmZvcm1hdGlvbiBhYm91dCBibG9jayB0aGF0J3MgYmVpbmcgZnJlZWQuIE5vdGUgdGhhdCAnbGliY19waWQnIGZpZWxkCi0gKiBvZiB0aGUgZGVzY3JpcHRvciBpcyB1c2VkIGJ5IGVtdWxhdG9yIHRvIHJlcG9ydCBmYWlsdXJlIGluIGhhbmRsaW5nIHRoaXMKLSAqIGV2ZW50LiBJbiBjYXNlIG9mIGEgZmFpbHVyZSBlbXVsYXRvciB3aWxsIHplcm8gdGhhdCBmaWVsZCBiZWZvcmUgY29tcGxldGluZwotICogdGhpcyBldmVudC4KLSAqLwotI2RlZmluZSBUUkFDRV9ERVZfUkVHX0ZSRUVfUFRSICAgICAgICAgICAgICAxNTM4Ci0KLS8qIFF1ZXJpZXMgdGhlIGVtdWxhdG9yIGFib3V0IGFsbG9jYXRlZCBtZW1vcnkgYmxvY2sgaW5mb3JtYXRpb24uCi0gKiBFdmVudCdzIHZhbHVlIHBhcmFtZXRlciBwb2ludHMgdG8gTWFsbG9jRGVzY1F1ZXJ5IGRlc2NyaXB0b3IgdGhhdCBjb250YWlucwotICogcXVlcnkgcGFyYW1ldGVycy4gTm90ZSB0aGF0ICdsaWJjX3BpZCcgZmllbGQgb2YgdGhlIGRlc2NyaXB0b3IgaXMgdXNlZCBieQotICogZW11bGF0b3IgdG8gcmVwb3J0IGZhaWx1cmUgaW4gaGFuZGxpbmcgdGhpcyBldmVudC4gSW4gY2FzZSBvZiBhIGZhaWx1cmUKLSAqIGVtdWxhdG9yIHdpbGwgemVybyB0aGF0IGZpZWxkIGJlZm9yZSBjb21wbGV0aW5nIHRoaXMgZXZlbnQuCi0gKi8KLSNkZWZpbmUgVFJBQ0VfREVWX1JFR19RVUVSWV9NQUxMT0MgICAgICAgICAgMTUzOQotCi0vKiBRdWVyaWVzIHRoZSBlbXVsYXRvciB0byBwcmludCBhIHN0cmluZyB0byBpdHMgc3Rkb3V0LgotICogRXZlbnQncyB2YWx1ZSBwYXJhbWV0ZXIgcG9pbnRzIHRvIGEgemVyby10ZXJtaW5hdGVkIHN0cmluZyB0byBiZSBwcmludGVkLgotICovCi0jZGVmaW5lIFRSQUNFX0RFVl9SRUdfUFJJTlRfVVNFUl9TVFIgICAgICAgIDE1NDAKLQotc3RhdGljIHZvaWQgbm90aWZ5X3FlbXVfc3RyaW5nKGNvbnN0IGNoYXIqIHN0cik7Ci1zdGF0aWMgdm9pZCBxZW11X2xvZyhpbnQgcHJpbywgY29uc3QgY2hhciogZm10LCAuLi4pOwotc3RhdGljIHZvaWQgZHVtcF9tYWxsb2NfZGVzY3JpcHRvcihjaGFyKiBzdHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBzdHJfYnVmX3NpemUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IE1hbGxvY0Rlc2MqIGRlc2MpOwotCi0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLy8gTWFjcm9zCi0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0vKiBEZWZpbmVzIGRlZmF1bHQgc2l6ZSBvZiBhbGxvY2F0aW9uIHByZWZpeC4KLSAqIE5vdGUgdGhhdCB3ZSBtYWtlIHByZWZpeCBhcmVhIHF1aXRlIGxhcmdlIGluIG9yZGVyIHRvIGluY3JlYXNlIGNoYW5jZXMgb2YKLSAqIGNhdGNoaW5nIGJ1ZmZlciBvdmVyZmxvdy4gKi8KLSNkZWZpbmUgREVGQVVMVF9QUkVGSVhfU0laRSAgICAgKG1hbGxvY19hbGlnbm1lbnQgKiA0KQotCi0vKiBEZWZpbmVzIGRlZmF1bHQgc2l6ZSBvZiBhbGxvY2F0aW9uIHN1ZmZpeC4KLSAqIE5vdGUgdGhhdCB3ZSBtYWtlIHN1ZmZpeCBhcmVhIHF1aXRlIGxhcmdlIGluIG9yZGVyIHRvIGluY3JlYXNlIGNoYW5jZXMgb2YKLSAqIGNhdGNoaW5nIGJ1ZmZlciBvdmVyZmxvdy4gKi8KLSNkZWZpbmUgREVGQVVMVF9TVUZGSVhfU0laRSAgICAgKG1hbGxvY19hbGlnbm1lbnQgKiA0KQotCi0vKiBEZWJ1ZyB0cmFjaW5nIGhhcyBiZWVuIGVuYWJsZWQgYnkgdGhlIGVtdWxhdG9yLiAqLwotI2RlZmluZSBERUJVR19UUkFDSU5HX0VOQUJMRUQgICAweDAwMDAwMDAxCi0vKiBFcnJvciB0cmFjaW5nIGhhcyBiZWVuIGVuYWJsZWQgYnkgdGhlIGVtdWxhdG9yLiAqLwotI2RlZmluZSBFUlJPUl9UUkFDSU5HX0VOQUJMRUQgICAweDAwMDAwMDAyCi0vKiBJbmZvIHRyYWNpbmcgaGFzIGJlZW4gZW5hYmxlZCBieSB0aGUgZW11bGF0b3IuICovCi0jZGVmaW5lIElORk9fVFJBQ0lOR19FTkFCTEVEICAgIDB4MDAwMDAwMDQKLS8qIEFsbCB0cmFjaW5nIGZsYWdzIGNvbWJpbmVkLiAqLwotI2RlZmluZSBBTExfVFJBQ0lOR19FTkFCTEVEIChERUJVR19UUkFDSU5HX0VOQUJMRUQgfCAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVSUk9SX1RSQUNJTkdfRU5BQkxFRCB8ICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5GT19UUkFDSU5HX0VOQUJMRUQpCi0KLS8qIFByaW50cyBhIHN0cmluZyB0byB0aGUgZW11bGF0b3IncyBzdGRvdXQuCi0gKiBJbiBlYXJseSBzdGFnZXMgb2Ygc3lzdGVtIGxvYWRpbmcsIGxvZ2dpbmcgbWVzYWdlcyB2aWEKLSAqIF9fbGliY19hbmRyb2lkX2xvZ19wcmludCBBUEkgaXMgbm90IGF2YWlsYWJsZSwgYmVjYXVzZSBBREIgQVBJIGhhcyBub3QgYmVlbgotICogaG9va2VkIHVwIHlldC4gU28sIGluIG9yZGVyIHRvIHNlZSBzdWNoIG1lc3NhZ2VzIHdlIG5lZWQgdG8gcHJpbnQgdGhlbSB0bwotICogdGhlIGVtdWxhdG9yJ3Mgc3Rkb3V0LgotICogUGFyYW1ldGVycyBwYXNzZWQgdG8gdGhpcyBtYWNybyBhcmUgdGhlIHNhbWUgYXMgcGFyYW1ldGVycyBmb3IgcHJpbnRmCi0gKiByb3V0aW5lLgotICovCi0jZGVmaW5lIFRSKC4uLikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBjaGFyIHRyX3N0cls0MDk2XTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIHNucHJpbnRmKHRyX3N0ciwgc2l6ZW9mKHRyX3N0ciksIF9fVkFfQVJHU19fICk7IFwKLSAgICAgICAgdHJfc3RyW3NpemVvZih0cl9zdHIpIC0gMV0gPSAnXDAnOyAgICAgICAgICAgICAgXAotICAgICAgICBub3RpZnlfcWVtdV9zdHJpbmcoJnRyX3N0clswXSk7ICAgICAgICAgICAgICAgICBcCi0gICAgfSB3aGlsZSAoMCkKLQotLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS8vIExvZ2dpbmcgbWFjcm9zLiBOb3RlIHRoYXQgd2Ugc2ltdWx0YW5lb3VzbHkgbG9nIG1lc3NhZ2VzIHRvIEFEQiBhbmQgZW11bGF0b3IuCi0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0vKgotICogSGVscGVyIG1hY3JvcyBmb3IgY2hlY2tpbmcgaWYgcGFydGljdWxhciB0cmFjZSBsZXZlbCBpcyBlbmFibGVkLgotICovCi0jZGVmaW5lIGRlYnVnX0xPR19FTkFCTEVEICAgICAgICgodHJhY2luZ19mbGFncyAmIERFQlVHX1RSQUNJTkdfRU5BQkxFRCkgIT0gMCkKLSNkZWZpbmUgZXJyb3JfTE9HX0VOQUJMRUQgICAgICAgKCh0cmFjaW5nX2ZsYWdzICYgRVJST1JfVFJBQ0lOR19FTkFCTEVEKSAhPSAwKQotI2RlZmluZSBpbmZvX0xPR19FTkFCTEVEICAgICAgICAoKHRyYWNpbmdfZmxhZ3MgJiBJTkZPX1RSQUNJTkdfRU5BQkxFRCkgICE9IDApCi0jZGVmaW5lIHRyYWNpbmdfZW5hYmxlZCh0eXBlKSAgICh0eXBlIyNfTE9HX0VOQUJMRUQpCi0KLS8qCi0gKiBMb2dnaW5nIGhlbHBlciBtYWNyb3MuCi0gKi8KLSNkZWZpbmUgZGVidWdfbG9nKGZvcm1hdCwgLi4uKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBfX2xpYmNfYW5kcm9pZF9sb2dfcHJpbnQoQU5EUk9JRF9MT0dfREVCVUcsICJtZW1jaGVjayIsICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmb3JtYXQpLCAjI19fVkFfQVJHU19fICk7ICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGlmICh0cmFjaW5nX2ZsYWdzICYgREVCVUdfVFJBQ0lOR19FTkFCTEVEKSB7ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgcWVtdV9sb2coQU5EUk9JRF9MT0dfREVCVUcsIChmb3JtYXQpLCAjI19fVkFfQVJHU19fICk7ICAgICAgICAgIFwKLSAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgfSB3aGlsZSAoMCkKLQotI2RlZmluZSBlcnJvcl9sb2coZm9ybWF0LCAuLi4pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIF9fbGliY19hbmRyb2lkX2xvZ19wcmludChBTkRST0lEX0xPR19FUlJPUiwgIm1lbWNoZWNrIiwgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZvcm1hdCksICMjX19WQV9BUkdTX18gKTsgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgaWYgKHRyYWNpbmdfZmxhZ3MgJiBFUlJPUl9UUkFDSU5HX0VOQUJMRUQpIHsgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBxZW11X2xvZyhBTkRST0lEX0xPR19FUlJPUiwgKGZvcm1hdCksICMjX19WQV9BUkdTX18gKTsgICAgICAgICAgXAotICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB9IHdoaWxlICgwKQotCi0jZGVmaW5lIGluZm9fbG9nKGZvcm1hdCwgLi4uKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgX19saWJjX2FuZHJvaWRfbG9nX3ByaW50KEFORFJPSURfTE9HX0lORk8sICJtZW1jaGVjayIsICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZm9ybWF0KSwgIyNfX1ZBX0FSR1NfXyApOyAgICAgICAgICAgICAgICAgXAotICAgICAgICBpZiAodHJhY2luZ19mbGFncyAmIElORk9fVFJBQ0lOR19FTkFCTEVEKSB7ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIHFlbXVfbG9nKEFORFJPSURfTE9HX0lORk8sIChmb3JtYXQpLCAjI19fVkFfQVJHU19fICk7ICAgICAgICAgICBcCi0gICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIH0gd2hpbGUgKDApCi0KLS8qIExvZ3MgbWVzc2FnZSBkdW1waW5nIE1hbGxvY0Rlc2MgaW5zdGFuY2UgYXQgdGhlIGVuZCBvZiB0aGUgbWVzc2FnZS4KLSAqIFBhcmFtOgotICogIHR5cGUgLSBNZXNzYWdlIHR5cGU6IGRlYnVnLCBlcnJvciwgb3IgaW5mbwotICogIGRlc2MgLSBNYWxsb2NEZXNjIGluc3RhbmNlIHRvIGR1bXAuCi0gKiAgZnJtdCArIHJlc3QgLSBGb3JtYXRzIG1lc3NhZ2UgcHJlY2VkaW5nIGR1bXBlZCBkZXNjcmlwdG9yLgotKi8KLSNkZWZpbmUgbG9nX21kZXNjKHR5cGUsIGRlc2MsIGZybXQsIC4uLikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBpZiAodHJhY2luZ19lbmFibGVkKHR5cGUpKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIGNoYXIgbG9nX3N0cls0MDk2XTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBzaXplX3Qgc3RyX2xlbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgc25wcmludGYobG9nX3N0ciwgc2l6ZW9mKGxvZ19zdHIpLCBmcm10LCAjI19fVkFfQVJHU19fKTsgICAgICAgIFwKLSAgICAgICAgICAgIGxvZ19zdHJbc2l6ZW9mKGxvZ19zdHIpIC0gMV0gPSAnXDAnOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBzdHJfbGVuID0gc3RybGVuKGxvZ19zdHIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgZHVtcF9tYWxsb2NfZGVzY3JpcHRvcihsb2dfc3RyICsgc3RyX2xlbiwgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGxvZ19zdHIpIC0gc3RyX2xlbiwgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkZXNjKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgdHlwZSMjX2xvZyhsb2dfc3RyKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgfSB3aGlsZSAoMCkKLQotLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS8vIFN0YXRpYyBkYXRhCi0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0vKiBFbXVsYXRvcidzIG1hZ2ljIHBhZ2UgYWRkcmVzcy4KLSAqIFRoaXMgcGFnZSAobWFwcGVkIG9uIC9kZXYvcWVtdV90cmFjZSBkZXZpY2UpIGlzIHVzZWQgdG8gZmlyZSB1cCBldmVudHMKLSAqIGluIHRoZSBlbXVsYXRvci4gKi8KLXN0YXRpYyB2b2xhdGlsZSB2b2lkKiBxdHJhY2UgPSBOVUxMOwotCi0vKiBDYWNoZWQgUElEIG9mIHRoZSBwcm9jZXNzIGluIGNvbnRleHQgb2Ygd2hpY2ggdGhpcyBsaWJjIGluc3RhbmNlCi0gKiBoYXMgYmVlbiBpbml0aWFsaXplZC4gKi8KLXN0YXRpYyB1aW50MzJfdCBtYWxsb2NfcGlkID0gMDsKLQotLyogTWVtb3J5IGFsbG9jYXRpb24gYWxpZ25tZW50IHRoYXQgaXMgdXNlZCBpbiBkbG1hbGxvYy4KLSAqIFRoaXMgdmFyaWFibGUgaXMgdXBkYXRlZCBieSBtZW1jaGVja19pbml0aWFsaXplIHJvdXRpbmUuICovCi1zdGF0aWMgdWludDMyX3QgbWFsbG9jX2FsaWdubWVudCA9IDg7Ci0KLS8qIFRyYWNpbmcgZmxhZ3MuIFRoZXNlIGZsYWdzIGNvbnRyb2wgd2hpY2ggdHlwZXMgb2YgbG9nZ2luZyBtZXNzYWdlcyBhcmUKLSAqIGVuYWJsZWQgYnkgdGhlIGVtdWxhdG9yLiBTZWUgWFhYX1RSQUNJTkdfRU5BQkxFRCBmb3IgdGhlIHZhbHVlcyBvZiBmbGFncwotICogc3RvcmVkIGluIHRoaXMgdmFyaWFibGUuIFRoaXMgdmFyaWFibGUgaXMgdXBkYXRlZCBieSBtZW1jaGVja19pbml0aWFsaXplCi0gKiByb3V0aW5lLiAqLwotc3RhdGljIHVpbnQzMl90IHRyYWNpbmdfZmxhZ3MgPSAwOwotCi0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLy8gU3RhdGljIHJvdXRpbmVzCi0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0vKiBHZXRzIHBvaW50ZXIsIHJldHVybmVkIHRvIG1hbGxvYyBjYWxsZXIgZm9yIHRoZSBnaXZlbiBhbGxvY2F0aW9uIGRlY3JpcHRvci4KLSAqIFBhcmFtOgotICogIGRlc2MgLSBBbGxvY2F0aW9uIGRlc2NyaXB0b3IuCi0gKiBSZXR1cm46Ci0gKiAgUG9pbnRlciB0byB0aGUgYWxsb2NhdGVkIG1lbW9yeSByZXR1cm5lZCB0byB0aGUgbWFsbG9jIGNhbGxlci4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkKgotbWFsbG9jZGVzY191c2VyX3B0cihjb25zdCBNYWxsb2NEZXNjKiBkZXNjKQotewotICAgIHJldHVybiAoY2hhciopZGVzYy0+cHRyICsgZGVzYy0+cHJlZml4X3NpemU7Ci19Ci0KLS8qIEdldHMgc2l6ZSBvZiBtZW1vcnkgYmxvY2sgYWN0dWFsbHkgYWxsb2NhdGVkIGZyb20gdGhlIGhlYXAgZm9yIHRoZSBnaXZlbgotICogYWxsb2NhdGlvbiBkZWNyaXB0b3IuCi0gKiBQYXJhbToKLSAqICBkZXNjIC0gQWxsb2NhdGlvbiBkZXNjcmlwdG9yLgotICogUmV0dXJuOgotICogIFNpemUgb2YgbWVtb3J5IGJsb2NrIGFjdHVhbGx5IGFsbG9jYXRlZCBmcm9tIHRoZSBoZWFwLgotICovCi1zdGF0aWMgaW5saW5lIHVpbnQzMl90Ci1tYWxsb2NkZXNjX2FsbG9jX3NpemUoY29uc3QgTWFsbG9jRGVzYyogZGVzYykKLXsKLSAgICByZXR1cm4gZGVzYy0+cHJlZml4X3NpemUgKyBkZXNjLT5yZXF1ZXN0ZWRfYnl0ZXMgKyBkZXNjLT5zdWZmaXhfc2l6ZTsKLX0KLQotLyogR2V0cyBwb2ludGVyIHRvIHRoZSBlbmQgb2YgdGhlIGFsbG9jYXRlZCBibG9jayBmb3IgdGhlIGdpdmVuIGRlc2NyaXB0b3IuCi0gKiBQYXJhbToKLSAqICBkZXNjIC0gRGVzY3JpcHRvciBmb3IgdGhlIG1lbW9yeSBibG9jaywgYWxsb2NhdGVkIGluIG1hbGxvYyBoYW5kbGVyLgotICogUmV0dXJuOgotICogIFBvaW50ZXIgdG8gdGhlIGVuZCBvZiAob25lIGJ5dGUgcGFzdCkgdGhlIGFsbG9jYXRlZCBibG9jay4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkKgotbWFsbG9jZGVzY19hbGxvY19lbmQoY29uc3QgTWFsbG9jRGVzYyogZGVzYykKLXsKLSAgICByZXR1cm4gKGNoYXIqKWRlc2MtPnB0ciArIG1hbGxvY2Rlc2NfYWxsb2Nfc2l6ZShkZXNjKTsKLX0KLQotLyogRmlyZXMgdXAgYW4gZXZlbnQgaW4gdGhlIGVtdWxhdG9yLgotICogUGFyYW06Ci0gKiAgY29kZSAtIEV2ZW50IGNvZGUgKG9uZSBvZiB0aGUgVFJBQ0VfREVWX1hYWCkuCi0gKiAgdmFsICAtIEV2ZW50J3MgdmFsdWUgcGFyYW1ldGVyLgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQKLW5vdGlmeV9xZW11KHVpbnQzMl90IGNvZGUsIHVpbnQzMl90IHZhbCkKLXsKLSAgICBpZiAoTlVMTCAhPSBxdHJhY2UpIHsKLSAgICAgICAgKih2b2xhdGlsZSB1aW50MzJfdCopKCh1aW50MzJfdClxdHJhY2UgKyAoKGNvZGUgLSAxMDI0KSA8PCAyKSkgPSB2YWw7Ci0gICAgfQotfQotCi0vKiBQcmludHMgYSB6ZXJvLXRlcm1pbmF0ZWQgc3RyaW5nIHRvIHRoZSBlbXVsYXRvcidzIHN0ZG91dCAoZmlyZXMgdXAKLSAqIFRSQUNFX0RFVl9SRUdfUFJJTlRfVVNFUl9TVFIgZXZlbnQgaW4gdGhlIGVtdWxhdG9yKS4KLSAqIFBhcmFtOgotICogIHN0ciAtIFplcm8tdGVybWluYXRlZCBzdHJpbmcgdG8gcHJpbnQuCi0gKi8KLXN0YXRpYyB2b2lkCi1ub3RpZnlfcWVtdV9zdHJpbmcoY29uc3QgY2hhciogc3RyKQotewotICAgIGlmIChzdHIgIT0gTlVMTCkgewotICAgICAgICBub3RpZnlfcWVtdShUUkFDRV9ERVZfUkVHX1BSSU5UX1VTRVJfU1RSLCAodWludDMyX3Qpc3RyKTsKLSAgICB9Ci19Ci0KLS8qIEZpcmVzIHVwIFRSQUNFX0RFVl9SRUdfTElCQ19JTklUIGV2ZW50IGluIHRoZSBlbXVsYXRvci4KLSAqIFBhcmFtOgotICogIHBpZCAtIElEIG9mIHRoZSBwcm9jZXNzIHRoYXQgaW5pdGlhbGl6ZWQgbGliYy4KLSAqLwotc3RhdGljIHZvaWQKLW5vdGlmeV9xZW11X2xpYmNfaW5pdGlhbGl6ZWQodWludDMyX3QgcGlkKQotewotICAgIG5vdGlmeV9xZW11KFRSQUNFX0RFVl9SRUdfTElCQ19JTklULCBwaWQpOwotfQotCi0vKiBGaXJlcyB1cCBUUkFDRV9ERVZfUkVHX01BTExPQyBldmVudCBpbiB0aGUgZW11bGF0b3IuCi0gKiBQYXJhbToKLSAqICBkZXNjIC0gUG9pbnRlciB0byBNYWxsb2NEZXNjIGluc3RhbmNlIGNvbnRhaW5pbmcgYWxsb2NhdGVkIGJsb2NrCi0gKiAgICAgIGluZm9ybWF0aW9uLgotICogUmV0dXJuOgotICogIFplcm8gb24gc3VjY2Vzcywgb3IgLTEgb24gZmFpbHVyZS4gTm90ZSB0aGF0IG9uIGZhaWx1cmUgbGliY19waWQgZmllbGQgb2YKLSAqICB0aGUgZGVzYyBwYXJhbWV0ZXIgcGFzc2VkIHRvIHRoaXMgcm91dGluZSBoYXMgYmVlbiB6ZXJvZWQgb3V0IGJ5IHRoZQotICogIGVtdWxhdG9yLgotICovCi1zdGF0aWMgaW5saW5lIGludAotbm90aWZ5X3FlbXVfbWFsbG9jKHZvbGF0aWxlIE1hbGxvY0Rlc2MqIGRlc2MpCi17Ci0gICAgZGVzYy0+bGliY19waWQgPSBtYWxsb2NfcGlkOwotICAgIGRlc2MtPmFsbG9jYXRvcl9waWQgPSBnZXRwaWQoKTsKLSAgICBkZXNjLT5hdl9jb3VudCA9IDA7Ci0gICAgbm90aWZ5X3FlbXUoVFJBQ0VfREVWX1JFR19NQUxMT0MsICh1aW50MzJfdClkZXNjKTsKLQotICAgIC8qIEVtdWxhdG9yIHJlcG9ydHMgZmFpbHVyZSBieSB6ZXJvaW5nIGxpYmNfcGlkIGZpZWxkIG9mIHRoZQotICAgICAqIGRlc2NyaXB0b3IuICovCi0gICAgcmV0dXJuIGRlc2MtPmxpYmNfcGlkICE9IDAgPyAwIDogLTE7Ci19Ci0KLS8qIEZpcmVzIHVwIFRSQUNFX0RFVl9SRUdfRlJFRV9QVFIgZXZlbnQgaW4gdGhlIGVtdWxhdG9yLgotICogUGFyYW06Ci0gKiAgcHRyIC0gUG9pbnRlciB0byB0aGUgbWVtb3J5IGJsb2NrIHRoYXQncyBiZWluZyBmcmVlZC4KLSAqIFJldHVybjoKLSAqICBaZXJvIG9uIHN1Y2Nlc3MsIG9yIC0xIG9uIGZhaWx1cmUuCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50Ci1ub3RpZnlfcWVtdV9mcmVlKHZvaWQqIHB0cl90b19mcmVlKQotewotICAgIHZvbGF0aWxlIE1hbGxvY0ZyZWUgZnJlZV9kZXNjOwotCi0gICAgZnJlZV9kZXNjLnB0ciA9IHB0cl90b19mcmVlOwotICAgIGZyZWVfZGVzYy5saWJjX3BpZCA9IG1hbGxvY19waWQ7Ci0gICAgZnJlZV9kZXNjLmZyZWVfcGlkID0gZ2V0cGlkKCk7Ci0gICAgbm90aWZ5X3FlbXUoVFJBQ0VfREVWX1JFR19GUkVFX1BUUiwgKHVpbnQzMl90KSZmcmVlX2Rlc2MpOwotCi0gICAgLyogRW11bGF0b3IgcmVwb3J0cyBmYWlsdXJlIGJ5IHplcm9pbmcgbGliY19waWQgZmllbGQgb2YgdGhlCi0gICAgICogZGVzY3JpcHRvci4gKi8KLSAgICByZXR1cm4gZnJlZV9kZXNjLmxpYmNfcGlkICE9IDAgPyAwIDogLTE7Ci19Ci0KLS8qIEZpcmVzIHVwIFRSQUNFX0RFVl9SRUdfUVVFUllfTUFMTE9DIGV2ZW50IGluIHRoZSBlbXVsYXRvci4KLSAqIFBhcmFtOgotICogIHB0ciAtIFBvaW50ZXIgdG8gcmVxdWVzdCBhbGxvY2F0aW9uIGluZm9ybWF0aW9uIGZvci4KLSAqICBkZXNjIC0gUG9pbnRlciB0byBNYWxsb2NEZXNjIGluc3RhbmNlIHRoYXQgd2lsbCByZWNlaXZlIGFsbG9jYXRpb24KLSAqICAgICAgaW5mb3JtYXRpb24uCi0gKiAgcm91dGluZSAtIENvZGUgb2YgdGhlIGFsbG9jYXRpb24gcm91dGluZSwgaW4gY29udGV4dCBvZiB3aGljaCBxdWVyeSBpcyBtYWRlOgotICogICAgICAxIC0gZnJlZQotICogICAgICAyIC0gcmVhbGxvYwotICogUmV0dXJuOgotICogIFplcm8gb24gc3VjY2Vzcywgb3IgLTEgb24gZmFpbHVyZS4KLSAqLwotc3RhdGljIGlubGluZSBpbnQKLXF1ZXJ5X3FlbXVfbWFsbG9jX2luZm8odm9pZCogcHRyLCBNYWxsb2NEZXNjKiBkZXNjLCB1aW50MzJfdCByb3V0aW5lKQotewotICAgIHZvbGF0aWxlIE1hbGxvY0Rlc2NRdWVyeSBxdWVyeTsKLQotICAgIHF1ZXJ5LnB0ciA9IHB0cjsKLSAgICBxdWVyeS5saWJjX3BpZCA9IG1hbGxvY19waWQ7Ci0gICAgcXVlcnkucXVlcnlfcGlkID0gZ2V0cGlkKCk7Ci0gICAgcXVlcnkucm91dGluZSA9IHJvdXRpbmU7Ci0gICAgcXVlcnkuZGVzYyA9IGRlc2M7Ci0gICAgbm90aWZ5X3FlbXUoVFJBQ0VfREVWX1JFR19RVUVSWV9NQUxMT0MsICh1aW50MzJfdCkmcXVlcnkpOwotCi0gICAgLyogRW11bGF0b3IgcmVwb3J0cyBmYWlsdXJlIGJ5IHplcm9pbmcgbGliY19waWQgZmllbGQgb2YgdGhlCi0gICAgICogZGVzY3JpcHRvci4gKi8KLSAgICByZXR1cm4gcXVlcnkubGliY19waWQgIT0gMCA/IDAgOiAtMTsKLX0KLQotLyogTG9ncyBhIG1lc3NhZ2UgdG8gZW11bGF0b3IncyBzdGRvdXQuCi0gKiBQYXJhbToKLSAqICBwcmlvIC0gTWVzc2FnZSBwcmlvcml0eSAoZGVidWcsIGluZm8sIG9yIGVycm9yKQotICogIGZtdCArIHJlc3QgLSBNZXNzYWdlIGZvcm1hdCBhbmQgcGFyYW1ldGVycy4KLSAqLwotc3RhdGljIHZvaWQKLXFlbXVfbG9nKGludCBwcmlvLCBjb25zdCBjaGFyKiBmbXQsIC4uLikKLXsKLSAgICB2YV9saXN0IGFwOwotICAgIGNoYXIgYnVmWzQwOTZdOwotICAgIGNvbnN0IGNoYXIqIHByZWZpeDsKLQotICAgIC8qIENob29zZSBtZXNzYWdlIHByZWZpeCBkZXBlbmRpbmcgb24gdGhlIHByaW9yaXR5IHZhbHVlLiAqLwotICAgIHN3aXRjaCAocHJpbykgewotICAgICAgICBjYXNlIEFORFJPSURfTE9HX0VSUk9SOgotICAgICAgICAgICAgaWYgKCF0cmFjaW5nX2VuYWJsZWQoZXJyb3IpKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcHJlZml4ID0gIkUiOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQU5EUk9JRF9MT0dfSU5GTzoKLSAgICAgICAgICAgIGlmICghdHJhY2luZ19lbmFibGVkKGluZm8pKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcHJlZml4ID0gIkkiOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQU5EUk9JRF9MT0dfREVCVUc6Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBpZiAoIXRyYWNpbmdfZW5hYmxlZChkZWJ1ZykpIHsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBwcmVmaXggPSAiRCI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICB2YV9zdGFydChhcCwgZm10KTsKLSAgICB2c25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgZm10LCBhcCk7Ci0gICAgdmFfZW5kKGFwKTsKLSAgICBidWZbc2l6ZW9mKGJ1ZikgLSAxXSA9ICdcMCc7Ci0KLSAgICBUUigiJXMvbWVtY2hlY2s6ICVzXG4iLCBwcmVmaXgsIGJ1Zik7Ci19Ci0KLS8qIER1bXBzIGNvbnRlbnQgb2YgbWVtb3J5IGFsbG9jYXRpb24gZGVzY3JpcHRvciB0byBhIHN0cmluZy4KLSAqIFBhcmFtOgotICogIHN0ciAtIFN0cmluZyB0byBkdW1wIGRlc2NyaXB0b3IgdG8uCi0gKiAgc3RyX2J1Zl9zaXplIC0gU2l6ZSBvZiBzdHJpbmcncyBidWZmZXIuCi0gKiAgZGVzYyAtIERlc2NyaXB0b3IgdG8gZHVtcC4KLSAqLwotc3RhdGljIHZvaWQKLWR1bXBfbWFsbG9jX2Rlc2NyaXB0b3IoY2hhciogc3RyLCBzaXplX3Qgc3RyX2J1Zl9zaXplLCBjb25zdCBNYWxsb2NEZXNjKiBkZXNjKQotewotICAgIGlmIChzdHJfYnVmX3NpemUpIHsKLSAgICAgICAgc25wcmludGYoc3RyLCBzdHJfYnVmX3NpemUsCi0gICAgICAgICAgICAiTURlc2M6ICVwOiAlWCA8LT4gJVggWyV1ICsgJXUgKyAldV0gYnkgcGlkPSUwM3UgaW4gbGliY19waWQ9JTAzdSIsCi0gICAgICAgICAgICBtYWxsb2NkZXNjX3VzZXJfcHRyKGRlc2MpLCAodWludDMyX3QpZGVzYy0+cHRyLAotICAgICAgICAgICAgKHVpbnQzMl90KW1hbGxvY2Rlc2NfYWxsb2NfZW5kKGRlc2MpLCBkZXNjLT5wcmVmaXhfc2l6ZSwKLSAgICAgICAgICAgIGRlc2MtPnJlcXVlc3RlZF9ieXRlcywgZGVzYy0+c3VmZml4X3NpemUsIGRlc2MtPmFsbG9jYXRvcl9waWQsCi0gICAgICAgICAgICBkZXNjLT5saWJjX3BpZCk7Ci0gICAgICAgIHN0cltzdHJfYnVmX3NpemUgLSAxXSA9ICdcMCc7Ci0gICAgfQotfQotCi0jaWYgVEVTVF9BQ0NFU1NfVklPTEFUSU9OUwotLyogQ2F1c2VzIGFuIGFjY2VzcyB2aW9sYXRpb24gb24gYWxsb2NhdGlvbiBkZXNjcmlwdG9yLCBhbmQgdmVyaWZpZXMgdGhhdAotICogdmlvbGF0aW9uIGhhcyBiZWVuIGRldGVjdGVkIGJ5IG1lbW9yeSBjaGVja2VyIGluIHRoZSBlbXVsYXRvci4KLSAqLwotc3RhdGljIHZvaWQKLXRlc3RfYWNjZXNzX3Zpb2xhdGlvbihjb25zdCBNYWxsb2NEZXNjKiBkZXNjKQotewotICAgIE1hbGxvY0Rlc2MgZGVzY19jaGs7Ci0gICAgY2hhciBjaDsKLSAgICB2b2xhdGlsZSBjaGFyKiBwcmVmaXggPSAodm9sYXRpbGUgY2hhciopZGVzYy0+cHRyOwotICAgIHZvbGF0aWxlIGNoYXIqIHN1ZmZpeCA9ICh2b2xhdGlsZSBjaGFyKiltYWxsb2NkZXNjX3VzZXJfcHRyKGRlc2MpICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzYy0+cmVxdWVzdGVkX2J5dGVzOwotICAgIC8qIFdlJ3JlIGNhdXNpbmcgQVYgYnkgcmVhZGluZyBmcm9tIHRoZSBwcmVmaXggYW5kIHN1ZmZpeCBhcmVhcyBvZiB0aGUKLSAgICAgKiBhbGxvY2F0ZWQgYmxvY2suIFRoaXMgc2hvdWxkIHByb2R1Y2UgdHdvIGFjY2VzcyB2aW9sYXRpb25zLCBzbyB3aGVuIHdlCi0gICAgICogZ2V0IGFsbG9jYXRpb24gZGVzY3JpcHRvciBmcm9tIFFFTVUsIGF2X2NvdW50ZXIgc2hvdWxkIGJlIGJpZ2dlciB0aGFuCi0gICAgICogYXZfY291bnRlciBvZiB0aGUgb3JpZ2luYWwgZGVzY3JpcHRvciBieSAyLiAqLwotICAgIGNoID0gKnByZWZpeDsKLSAgICBjaCA9ICpzdWZmaXg7Ci0gICAgaWYgKCFxdWVyeV9xZW11X21hbGxvY19pbmZvKG1hbGxvY2Rlc2NfdXNlcl9wdHIoZGVzYyksICZkZXNjX2NoaywgMikgJiYKLSAgICAgICAgZGVzY19jaGsuYXZfY291bnQgIT0gKGRlc2MtPmF2X2NvdW50ICsgMikpIHsKLSAgICAgICAgbG9nX21kZXNjKGVycm9yLCAmZGVzY19jaGssCi0gICAgICAgICAgICAgICAgICAiPGxpYmNfcGlkPSUwM3UsIHBpZD0lMDN1PjogbWFsbG9jOiBBY2Nlc3MgdmlvbGF0aW9uIHRlc3QgZmFpbGVkOlxuIgotICAgICAgICAgICAgICAgICAgIkV4cGVjdGVkIHZpb2xhdGlvbnMgY291bnQgJXUgaXMgbm90IGVxdWFsIHRvIHRoZSBhY3R1YWxseSByZXBvcnRlZCAldSIsCi0gICAgICAgICAgICAgICAgICBtYWxsb2NfcGlkLCBnZXRwaWQoKSwgZGVzYy0+YXZfY291bnQgKyAyLAotICAgICAgICAgICAgICAgICAgZGVzY19jaGsuYXZfY291bnQpOwotICAgIH0KLX0KLSNlbmRpZiAgLy8gVEVTVF9BQ0NFU1NfVklPTEFUSU9OUwotCi0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLy8gQVBJIHJvdXRpbmVzCi0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi12b2lkKiBxZW11X2luc3RydW1lbnRlZF9tYWxsb2Moc2l6ZV90IGJ5dGVzKTsKLXZvaWQgIHFlbXVfaW5zdHJ1bWVudGVkX2ZyZWUodm9pZCogbWVtKTsKLXZvaWQqIHFlbXVfaW5zdHJ1bWVudGVkX2NhbGxvYyhzaXplX3Qgbl9lbGVtZW50cywgc2l6ZV90IGVsZW1fc2l6ZSk7Ci12b2lkKiBxZW11X2luc3RydW1lbnRlZF9yZWFsbG9jKHZvaWQqIG1lbSwgc2l6ZV90IGJ5dGVzKTsKLXZvaWQqIHFlbXVfaW5zdHJ1bWVudGVkX21lbWFsaWduKHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBieXRlcyk7Ci0KLS8qIEluaXRpYWxpemVzIG1hbGxvYyBkZWJ1Z2dpbmcgaW5zdHJ1bWVudGF0aW9uIGZvciB0aGUgZW11bGF0b3IuCi0gKiBUaGlzIHJvdXRpbmUgaXMgY2FsbGVkIGZyb20gbWFsbG9jX2luaXRfaW1wbCByb3V0aW5lIGltcGxlbWVudGVkIGluCi0gKiBiaW9uaWMvbGliYy9iaW9uaWMvbWFsbG9jX2RlYnVnX2NvbW1vbi5jIHdoZW4gbWFsbG9jIGRlYnVnZ2luZyBnZXRzCi0gKiBpbml0aWFsaXplZCBmb3IgYSBwcm9jZXNzLiBUaGUgd2F5IG1hbGxvYyBkZWJ1Z2dpbmcgaW1wbGVtZW50YXRpb24gaXMKLSAqIGRvbmUsIGl0IGlzIGd1YXJhbnRlZWQgdGhhdCB0aGlzIHJvdXRpbmUgd2lsbCBiZSBjYWxsZWQganVzdCBvbmNlIHBlcgotICogcHJvY2Vzcy4KLSAqIFJldHVybjoKLSAqICAwIG9uIHN1Y2Nlc3MsIG9yIC0xIG9uIGZhaWx1cmUuCi0qLwotaW50Ci1tYWxsb2NfZGVidWdfaW5pdGlhbGl6ZSh2b2lkKQotewotICAgIC8qIFdlIHdpbGwgYmUgdXNpbmcgZW11bGF0b3IncyBtYWdpYyBwYWdlIHRvIHJlcG9ydCBtZW1vcnkgYWxsb2NhdGlvbgotICAgICAqIGFjdGl2aXRpZXMuIEluIGVzc2VuY2UsIHdoYXQgbWFnaWMgcGFnZSBkb2VzLCBpdCB0cmFuc2xhdGVzIHdyaXRlcyB0bwotICAgICAqIHRoZSBtZW1vcnkgbWFwcGVkIHNwYWNlcyBpbnRvIHdyaXRlcyB0byBhbiBJL08gcG9ydCB0aGF0IGVtdWxhdG9yCi0gICAgICogImxpc3RlbnMgdG8iIG9uIHRoZSBvdGhlciBlbmQuIE5vdGUgdGhhdCB1bnRpbCB3ZSBvcGVuIGFuZCBtYXAgdGhhdAotICAgICAqIGRldmljZSwgbG9nZ2luZyB0byBlbXVsYXRvcidzIHN0ZG91dCB3aWxsIG5vdCBiZSBhdmFpbGFibGUuICovCi0gICAgaW50IGZkID0gb3BlbigiL2Rldi9xZW11X3RyYWNlIiwgT19SRFdSKTsKLSAgICBpZiAoZmQgPCAwKSB7Ci0gICAgICAgIGVycm9yX2xvZygiVW5hYmxlIHRvIG9wZW4gL2Rldi9xZW11X3RyYWNlIik7Ci0gICAgICAgIHJldHVybiAtMTsKLSAgICB9IGVsc2UgewotICAgICAgICBxdHJhY2UgPSBtbWFwKDAsIFBBR0VTSVpFLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLCBNQVBfU0hBUkVELCBmZCwgMCk7Ci0gICAgICAgIGNsb3NlKGZkKTsKLQotICAgICAgICBpZiAocXRyYWNlID09IE1BUF9GQUlMRUQpIHsKLSAgICAgICAgICAgIHF0cmFjZSA9IE5VTEw7Ci0gICAgICAgICAgICBlcnJvcl9sb2coIlVuYWJsZSB0byBtbWFwIC9kZXYvcWVtdV90cmFjZSIpOwotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyogQ2FjaGUgcGlkIG9mIHRoZSBwcm9jZXNzIHRoaXMgbGlicmFyeSBoYXMgYmVlbiBpbml0aWFsaXplZCBmb3IuICovCi0gICAgbWFsbG9jX3BpZCA9IGdldHBpZCgpOwotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLS8qIENvbXBsZXRlcyBtYWxsb2MgZGVidWdnaW5nIGluc3RydW1lbnRhdGlvbiBmb3IgdGhlIGVtdWxhdG9yLgotICogTm90ZSB0aGF0IHRoaXMgcm91dGluZSBpcyBjYWxsZWQgYWZ0ZXIgc3VjY2Vzc2Z1bCByZXR1cm4gZnJvbQotICogbWFsbG9jX2RlYnVnX2luaXRpYWxpemUsIHdoaWNoIG1lYW5zIHRoYXQgY29ubmVjdGlvbiB0byB0aGUgZW11bGF0b3IgdmlhCi0gKiAibWFnaWMgcGFnZSIgaGFzIGJlZW4gZXN0YWJsaXNoZWQuCi0gKiBQYXJhbToKLSAqICBhbGlnbm1lbnQgLSBBbGlnbm1lbnQgcmVxdWlyZW1lbnQgc2V0IGZvciBtZW1pcnkgYWxsb2NhdGlvbnMuCi0gKiAgbWVtY2hlY2tfcGFyYW0gLSBFbXVsYXRvcidzIC1tZW1jaGVjayBvcHRpb24gcGFyYW1ldGVycy4gVGhpcyBzdHJpbmcKLSAqICAgICAgY29udGFpbnMgYWJicmV2aWF0aW9uIGZvciBndWVzdCBldmVudHMgdGhhdCBhcmUgZW5hYmxlZCBmb3IgdHJhY2luZy4KLSAqIFJldHVybjoKLSAqICAwIG9uIHN1Y2Nlc3MsIG9yIC0xIG9uIGZhaWx1cmUuCi0qLwotaW50Ci1tZW1jaGVja19pbml0aWFsaXplKGludCBhbGlnbm1lbnQsIGNvbnN0IGNoYXIqIG1lbWNoZWNrX3BhcmFtKQotewotICAgIG1hbGxvY19hbGlnbm1lbnQgPSBhbGlnbm1lbnQ7Ci0KLSAgICAvKiBQYXJzZSAtbWVtY2hlY2sgcGFyYW1ldGVyIGZvciB0aGUgZ3Vlc3QgdHJhY2luZyBmbGFncy4gKi8KLSAgICB3aGlsZSAoKm1lbWNoZWNrX3BhcmFtICE9ICdcMCcpIHsKLSAgICAgICAgc3dpdGNoICgqbWVtY2hlY2tfcGFyYW0pIHsKLSAgICAgICAgICAgIGNhc2UgJ2EnOgotICAgICAgICAgICAgICAgIC8vIEVuYWJsZSBhbGwgbWVzc2FnZXMgZnJvbSB0aGUgZ3Vlc3QuCi0gICAgICAgICAgICAgICAgdHJhY2luZ19mbGFncyB8PSBBTExfVFJBQ0lOR19FTkFCTEVEOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAnZCc6Ci0gICAgICAgICAgICAgICAgLy8gRW5hYmxlIGRlYnVnIG1lc3NhZ2VzIGZyb20gdGhlIGd1ZXN0LgotICAgICAgICAgICAgICAgIHRyYWNpbmdfZmxhZ3MgfD0gREVCVUdfVFJBQ0lOR19FTkFCTEVEOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAnZSc6Ci0gICAgICAgICAgICAgICAgLy8gRW5hYmxlIGVycm9yIG1lc3NhZ2VzIGZyb20gdGhlIGd1ZXN0LgotICAgICAgICAgICAgICAgIHRyYWNpbmdfZmxhZ3MgfD0gRVJST1JfVFJBQ0lOR19FTkFCTEVEOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAnaSc6Ci0gICAgICAgICAgICAgICAgLy8gRW5hYmxlIGluZm8gbWVzc2FnZXMgZnJvbSB0aGUgZ3Vlc3QuCi0gICAgICAgICAgICAgICAgdHJhY2luZ19mbGFncyB8PSBJTkZPX1RSQUNJTkdfRU5BQkxFRDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHRyYWNpbmdfZmxhZ3MgPT0gQUxMX1RSQUNJTkdfRU5BQkxFRCkgewotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgbWVtY2hlY2tfcGFyYW0rKzsKLSAgICB9Ci0KLSAgICBub3RpZnlfcWVtdV9saWJjX2luaXRpYWxpemVkKG1hbGxvY19waWQpOwotCi0gICAgZGVidWdfbG9nKCJJbnN0cnVtZW50ZWQgZm9yIHBpZD0lMDN1OiBtYWxsb2M9JXAsIGZyZWU9JXAsIGNhbGxvYz0lcCwgcmVhbGxvYz0lcCwgbWVtYWxpZ249JXAiLAotICAgICAgICAgICAgICBtYWxsb2NfcGlkLCBxZW11X2luc3RydW1lbnRlZF9tYWxsb2MsIHFlbXVfaW5zdHJ1bWVudGVkX2ZyZWUsCi0gICAgICAgICAgICAgIHFlbXVfaW5zdHJ1bWVudGVkX2NhbGxvYywgcWVtdV9pbnN0cnVtZW50ZWRfcmVhbGxvYywKLSAgICAgICAgICAgICAgcWVtdV9pbnN0cnVtZW50ZWRfbWVtYWxpZ24pOwotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLS8qIFRoaXMgcm91dGluZSBzZXJ2ZXMgYXMgZW50cnkgcG9pbnQgZm9yICdtYWxsb2MnLgotICogUHJpbWFyeSByZXNwb25zaWJpbGl0eSBvZiB0aGlzIHJvdXRpbmUgaXMgdG8gYWxsb2NhdGUgcmVxdWVzdGVkIG51bWJlciBvZgotICogYnl0ZXMgKHBsdXMgcHJlZml4LCBhbmQgc3VmZml4IGd1YXJkcyksIGFuZCByZXBvcnQgYWxsb2NhdGlvbiB0byB0aGUKLSAqIGVtdWxhdG9yLgotICovCi12b2lkKgotcWVtdV9pbnN0cnVtZW50ZWRfbWFsbG9jKHNpemVfdCBieXRlcykKLXsKLSAgICBNYWxsb2NEZXNjIGRlc2M7Ci0KLSAgICAvKiBJbml0aWFsaXplIGJsb2NrIGRlc2NyaXB0b3IgYW5kIGFsbG9jYXRlIG1lbW9yeS4gTm90ZSB0aGF0IGRsbWFsbG9jCi0gICAgICogcmV0dXJucyBhIHZhbGlkIHBvaW50ZXIgb24gemVybyBhbGxvY2F0aW9uLiBMZXRzIG1pbWljIHRoaXMgYmVoYXZpb3IuICovCi0gICAgZGVzYy5wcmVmaXhfc2l6ZSA9IERFRkFVTFRfUFJFRklYX1NJWkU7Ci0gICAgZGVzYy5yZXF1ZXN0ZWRfYnl0ZXMgPSBieXRlczsKLSAgICBkZXNjLnN1ZmZpeF9zaXplID0gREVGQVVMVF9TVUZGSVhfU0laRTsKLSAgICBkZXNjLnB0ciA9IGRsbWFsbG9jKG1hbGxvY2Rlc2NfYWxsb2Nfc2l6ZSgmZGVzYykpOwotICAgIGlmIChkZXNjLnB0ciA9PSBOVUxMKSB7Ci0gICAgICAgIGVycm9yX2xvZygiPGxpYmNfcGlkPSUwM3UsIHBpZD0lMDN1PiBtYWxsb2MoJXUpOiBkbG1hbGxvYygldSkgZmFpbGVkLiIsCi0gICAgICAgICAgICAgICAgICBtYWxsb2NfcGlkLCBnZXRwaWQoKSwgYnl0ZXMsIG1hbGxvY2Rlc2NfYWxsb2Nfc2l6ZSgmZGVzYykpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICAvLyBGaXJlIHVwIGV2ZW50IGluIHRoZSBlbXVsYXRvci4KLSAgICBpZiAobm90aWZ5X3FlbXVfbWFsbG9jKCZkZXNjKSkgewotICAgICAgICBsb2dfbWRlc2MoZXJyb3IsICZkZXNjLCAiPGxpYmNfcGlkPSUwM3UsIHBpZD0lMDN1PjogbWFsbG9jOiBub3RpZnlfbWFsbG9jIGZhaWxlZCBmb3IgIiwKLSAgICAgICAgICAgICAgICAgIG1hbGxvY19waWQsIGdldHBpZCgpKTsKLSAgICAgICAgZGxmcmVlKGRlc2MucHRyKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfSBlbHNlIHsKLSNpZiBURVNUX0FDQ0VTU19WSU9MQVRJT05TCi0gICAgICAgIHRlc3RfYWNjZXNzX3Zpb2xhdGlvbigmZGVzYyk7Ci0jZW5kaWYgIC8vIFRFU1RfQUNDRVNTX1ZJT0xBVElPTlMKLSAgICAgICAgbG9nX21kZXNjKGluZm8sICZkZXNjLCAiKysrIDxsaWJjX3BpZD0lMDN1LCBwaWQ9JTAzdT4gbWFsbG9jKCV1KSAtPiAiLAotICAgICAgICAgICAgICAgICAgbWFsbG9jX3BpZCwgZ2V0cGlkKCksIGJ5dGVzKTsKLSAgICAgICAgcmV0dXJuIG1hbGxvY2Rlc2NfdXNlcl9wdHIoJmRlc2MpOwotICAgIH0KLX0KLQotLyogVGhpcyByb3V0aW5lIHNlcnZlcyBhcyBlbnRyeSBwb2ludCBmb3IgJ21hbGxvYycuCi0gKiBQcmltYXJ5IHJlc3BvbnNpYmlsaXR5IG9mIHRoaXMgcm91dGluZSBpcyB0byBmcmVlIHJlcXVlc3RlZCBtZW1vcnksIGFuZAotICogcmVwb3J0IGZyZWUgYmxvY2sgdG8gdGhlIGVtdWxhdG9yLgotICovCi12b2lkCi1xZW11X2luc3RydW1lbnRlZF9mcmVlKHZvaWQqIG1lbSkKLXsKLSAgICBNYWxsb2NEZXNjIGRlc2M7Ci0KLSAgICBpZiAobWVtID09IE5VTEwpIHsKLSAgICAgICAgLy8gSnVzdCBsZXQgZ28gTlVMTCBmcmVlCi0gICAgICAgIGRsZnJlZShtZW0pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gUXVlcnkgZW11bGF0b3IgZm9yIHRoZSBmcmVlaW5nIGJsb2NrIGluZm9ybWF0aW9uLgotICAgIGlmIChxdWVyeV9xZW11X21hbGxvY19pbmZvKG1lbSwgJmRlc2MsIDEpKSB7Ci0gICAgICAgIGVycm9yX2xvZygiPGxpYmNfcGlkPSUwM3UsIHBpZD0lMDN1PjogZnJlZSglcCkgcXVlcnlfaW5mbyBmYWlsZWQuIiwKLSAgICAgICAgICAgICAgICAgIG1hbGxvY19waWQsIGdldHBpZCgpLCBtZW0pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0jaWYgVEVTVF9BQ0NFU1NfVklPTEFUSU9OUwotICAgIHRlc3RfYWNjZXNzX3Zpb2xhdGlvbigmZGVzYyk7Ci0jZW5kaWYgIC8vIFRFU1RfQUNDRVNTX1ZJT0xBVElPTlMKLQotICAgIC8qIE1ha2Ugc3VyZSB0aGF0IHBvaW50ZXIgdGhhdCdzIGJlaW5nIGZyZWVkIG1hdGNoZXMgd2hhdCB3ZSBleHBlY3QKLSAgICAgKiBmb3IgdGhpcyBtZW1vcnkgYmxvY2suIE5vdGUgdGhhdCB0aGlzIHZpb2xhdGlvbiBzaG91bGQgYmUgYWxyZWFkeQotICAgICAqIGNhdWdodCBpbiB0aGUgZW11bGF0b3IuICovCi0gICAgaWYgKG1lbSAhPSBtYWxsb2NkZXNjX3VzZXJfcHRyKCZkZXNjKSkgewotICAgICAgICBsb2dfbWRlc2MoZXJyb3IsICZkZXNjLCAiPGxpYmNfcGlkPSUwM3UsIHBpZD0lMDN1PjogZnJlZSglcCkgaXMgaW52YWxpZCBmb3IgIiwKLSAgICAgICAgICAgICAgICAgIG1hbGxvY19waWQsIGdldHBpZCgpLCBtZW0pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gRmlyZSB1cCBldmVudCBpbiB0aGUgZW11bGF0b3IgYW5kIGZyZWUgYmxvY2sgdGhhdCB3YXMgYWN0dWFsbHkgYWxsb2NhdGVkLgotICAgIGlmIChub3RpZnlfcWVtdV9mcmVlKG1lbSkpIHsKLSAgICAgICAgbG9nX21kZXNjKGVycm9yLCAmZGVzYywgIjxsaWJjX3BpZD0lMDN1LCBwaWQ9JTAzdT46IGZyZWUoJXApIG5vdGlmeV9mcmVlIGZhaWxlZCBmb3IgIiwKLSAgICAgICAgICAgICAgICAgIG1hbGxvY19waWQsIGdldHBpZCgpLCBtZW0pOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGxvZ19tZGVzYyhpbmZvLCAmZGVzYywgIi0tLSA8bGliY19waWQ9JTAzdSwgcGlkPSUwM3U+IGZyZWUoJXApIC0+ICIsCi0gICAgICAgICAgICAgICAgICBtYWxsb2NfcGlkLCBnZXRwaWQoKSwgbWVtKTsKLSAgICAgICAgZGxmcmVlKGRlc2MucHRyKTsKLSAgICB9Ci19Ci0KLS8qIFRoaXMgcm91dGluZSBzZXJ2ZXMgYXMgZW50cnkgcG9pbnQgZm9yICdjYWxsb2MnLgotICogVGhpcyByb3V0aW5lIGJlaGF2ZXMgc2ltaWxhcmx5IHRvIHFlbXVfaW5zdHJ1bWVudGVkX21hbGxvYy4KLSAqLwotdm9pZCoKLXFlbXVfaW5zdHJ1bWVudGVkX2NhbGxvYyhzaXplX3Qgbl9lbGVtZW50cywgc2l6ZV90IGVsZW1fc2l6ZSkKLXsKLSAgICBNYWxsb2NEZXNjIGRlc2M7Ci0gICAgdm9pZCogcmV0OwotICAgIHNpemVfdCB0b3RhbF9zaXplOwotICAgIHNpemVfdCB0b3RhbF9lbGVtZW50czsKLQotICAgIGlmIChuX2VsZW1lbnRzID09IDAgfHwgZWxlbV9zaXplID09IDApIHsKLSAgICAgICAgLy8gSnVzdCBsZXQgZ28gemVybyBieXRlcyBhbGxvY2F0aW9uLgotICAgICAgICBpbmZvX2xvZygiOjo6IDxsaWJjX3BpZD0lMDN1LCBwaWQ9JTAzdT46IFplcm8gY2FsbG9jIHJlZGlyIHRvIG1hbGxvYyIsCi0gICAgICAgICAgICAgICAgIG1hbGxvY19waWQsIGdldHBpZCgpKTsKLSAgICAgICAgcmV0dXJuIHFlbXVfaW5zdHJ1bWVudGVkX21hbGxvYygwKTsKLSAgICB9Ci0KLSAgICAvKiBGYWlsIG9uIG92ZXJmbG93IC0ganVzdCB0byBiZSBzYWZlIGV2ZW4gdGhvdWdoIHRoaXMgY29kZSBydW5zIG9ubHkKLSAgICAgKiB3aXRoaW4gdGhlIGRlYnVnZ2luZyBDIGxpYnJhcnksIG5vdCB0aGUgcHJvZHVjdGlvbiBvbmUgKi8KLSAgICBpZiAobl9lbGVtZW50cyAmJiBNQVhfU0laRV9UIC8gbl9lbGVtZW50cyA8IGVsZW1fc2l6ZSkgewotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICAvKiBDYWxjdWxhdGluZyBwcmVmaXggc2l6ZS4gVGhlIHRyaWNrIGhlcmUgaXMgdG8gbWFrZSBzdXJlIHRoYXQKLSAgICAgKiBmaXJzdCBlbGVtZW50IChyZXR1cm5lZCB0byB0aGUgY2FsbGVyKSBpcyBwcm9wZXJseSBhbGlnbmVkLiAqLwotICAgIGlmIChERUZBVUxUX1BSRUZJWF9TSVpFID49IGVsZW1fc2l6ZSkgewotICAgICAgICAvKiBJZiBkZWZhdWx0IGFsaWdubWVudCBpcyBiaWdnZXIgdGhhbiBlbGVtZW50IHNpemUsIHdlIHdpbGwKLSAgICAgICAgICogc2V0IG91ciBwcmVmaXggc2l6ZSB0byB0aGUgZGVmYXVsdCBhbGlnbm1lbnQgc2l6ZS4gKi8KLSAgICAgICAgZGVzYy5wcmVmaXhfc2l6ZSA9IERFRkFVTFRfUFJFRklYX1NJWkU7Ci0gICAgICAgIC8qIEZvciB0aGUgc3VmZml4IHdlIHdpbGwgdXNlIHdoYXRldmVyIGJ5dGVzIHJlbWFpbiBmcm9tIHRoZSBwcmVmaXgKLSAgICAgICAgICogYWxsb2NhdGlvbiBzaXplLCBhbGlnbmVkIHRvIHRoZSBzaXplIG9mIGFuIGVsZW1lbnQsIHBsdXMgdGhlIHVzdWFsCi0gICAgICAgICAqIGRlZmF1bHQgc3VmZml4IHNpemUuICovCi0gICAgICAgIGRlc2Muc3VmZml4X3NpemUgPSAoREVGQVVMVF9QUkVGSVhfU0laRSAlIGVsZW1fc2l6ZSkgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgREVGQVVMVF9TVUZGSVhfU0laRTsKLSAgICB9IGVsc2UgewotICAgICAgICAvKiBNYWtlIHN1cmUgdGhhdCBwcmVmaXgsIGFuZCBzdWZmaXggc2l6ZXMgaXMgYXQgbGVhc3QgZWxlbV9zaXplLAotICAgICAgICAgKiBhbmQgZmlyc3QgZWxlbWVudCByZXR1cm5lZCB0byB0aGUgY2FsbGVyIGlzIHByb3Blcmx5IGFsaWduZWQuICovCi0gICAgICAgIGRlc2MucHJlZml4X3NpemUgPSBlbGVtX3NpemUgKyBERUZBVUxUX1BSRUZJWF9TSVpFIC0gMTsKLSAgICAgICAgZGVzYy5wcmVmaXhfc2l6ZSAmPSB+KG1hbGxvY19hbGlnbm1lbnQgLSAxKTsKLSAgICAgICAgZGVzYy5zdWZmaXhfc2l6ZSA9IERFRkFVTFRfU1VGRklYX1NJWkU7Ci0gICAgfQotICAgIGRlc2MucmVxdWVzdGVkX2J5dGVzID0gbl9lbGVtZW50cyAqIGVsZW1fc2l6ZTsKLSAgICB0b3RhbF9zaXplID0gZGVzYy5yZXF1ZXN0ZWRfYnl0ZXMgKyBkZXNjLnByZWZpeF9zaXplICsgZGVzYy5zdWZmaXhfc2l6ZTsKLSAgICB0b3RhbF9lbGVtZW50cyA9IHRvdGFsX3NpemUgLyBlbGVtX3NpemU7Ci0gICAgdG90YWxfc2l6ZSAlPSBlbGVtX3NpemU7Ci0gICAgaWYgKHRvdGFsX3NpemUgIT0gMCkgewotICAgICAgICAvLyBBZGQgZXh0cmEgdG8gdGhlIHN1ZmZpeCBhcmVhLgotICAgICAgICB0b3RhbF9lbGVtZW50cysrOwotICAgICAgICBkZXNjLnN1ZmZpeF9zaXplICs9IChlbGVtX3NpemUgLSB0b3RhbF9zaXplKTsKLSAgICB9Ci0gICAgZGVzYy5wdHIgPSBkbGNhbGxvYyh0b3RhbF9lbGVtZW50cywgZWxlbV9zaXplKTsKLSAgICBpZiAoZGVzYy5wdHIgPT0gTlVMTCkgewotICAgICAgICBlcnJvcl9sb2coIjxsaWJjX3BpZD0lMDN1LCBwaWQ9JTAzdT4gY2FsbG9jOiBkbGNhbGxvYygldSgldSksICV1KSAocHJ4PSV1LCBzZng9JXUpIGZhaWxlZC4iLAotICAgICAgICAgICAgICAgICAgIG1hbGxvY19waWQsIGdldHBpZCgpLCBuX2VsZW1lbnRzLCB0b3RhbF9lbGVtZW50cywgZWxlbV9zaXplLAotICAgICAgICAgICAgICAgICAgIGRlc2MucHJlZml4X3NpemUsIGRlc2Muc3VmZml4X3NpemUpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICBpZiAobm90aWZ5X3FlbXVfbWFsbG9jKCZkZXNjKSkgewotICAgICAgICBsb2dfbWRlc2MoZXJyb3IsICZkZXNjLCAiPGxpYmNfcGlkPSUwM3UsIHBpZD0lMDN1PjogY2FsbG9jKCV1KCV1KSwgJXUpOiBub3RpZnlfbWFsbG9jIGZhaWxlZCBmb3IgIiwKLSAgICAgICAgICAgICAgICAgIG1hbGxvY19waWQsIGdldHBpZCgpLCBuX2VsZW1lbnRzLCB0b3RhbF9lbGVtZW50cywgZWxlbV9zaXplKTsKLSAgICAgICAgZGxmcmVlKGRlc2MucHRyKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfSBlbHNlIHsKLSNpZiBURVNUX0FDQ0VTU19WSU9MQVRJT05TCi0gICAgICAgIHRlc3RfYWNjZXNzX3Zpb2xhdGlvbigmZGVzYyk7Ci0jZW5kaWYgIC8vIFRFU1RfQUNDRVNTX1ZJT0xBVElPTlMKLSAgICAgICAgbG9nX21kZXNjKGluZm8sICZkZXNjLCAiIyMjIDxsaWJjX3BpZD0lMDN1LCBwaWQ9JTAzdT4gY2FsbG9jKCV1KCV1KSwgJXUpIC0+ICIsCi0gICAgICAgICAgICAgICAgICBtYWxsb2NfcGlkLCBnZXRwaWQoKSwgbl9lbGVtZW50cywgdG90YWxfZWxlbWVudHMsIGVsZW1fc2l6ZSk7Ci0gICAgICAgIHJldHVybiBtYWxsb2NkZXNjX3VzZXJfcHRyKCZkZXNjKTsKLSAgICB9Ci19Ci0KLS8qIFRoaXMgcm91dGluZSBzZXJ2ZXMgYXMgZW50cnkgcG9pbnQgZm9yICdyZWFsbG9jJy4KLSAqIFRoaXMgcm91dGluZSBiZWhhdmVzIHNpbWlsYXJseSB0byBxZW11X2luc3RydW1lbnRlZF9mcmVlICsKLSAqIHFlbXVfaW5zdHJ1bWVudGVkX21hbGxvYy4gTm90ZSB0aGF0IHRoaXMgbW9kaWZpZXMgYmVoYXZpb3Igb2YgInNocmlua2luZyIgYW4KLSAqIGFsbG9jYXRpb24sIGJ1dCBvdmVyYWxsIGl0IGRvZXNuJ3Qgc2VlbSB0byBtYXR0ZXIsIGFzIGNhbGxlciBvZiByZWFsbG9jCi0gKiBzaG91bGQgbm90IGV4cGVjdCB0aGF0IHBvaW50ZXIgcmV0dXJuZWQgYWZ0ZXIgc2hyaW5raW5nIHdpbGwgcmVtYWluIHRoZSBzYW1lLgotICovCi12b2lkKgotcWVtdV9pbnN0cnVtZW50ZWRfcmVhbGxvYyh2b2lkKiBtZW0sIHNpemVfdCBieXRlcykKLXsKLSAgICBNYWxsb2NEZXNjIG5ld19kZXNjOwotICAgIE1hbGxvY0Rlc2MgY3VyX2Rlc2M7Ci0gICAgc2l6ZV90IHRvX2NvcHk7Ci0gICAgdm9pZCogcmV0OwotCi0gICAgaWYgKG1lbSA9PSBOVUxMKSB7Ci0gICAgICAgIC8vIE5vdGhpbmcgdG8gcmVhbGxvYy4ganVzdCBkbyByZWd1bGFyIG1hbGxvYy4KLSAgICAgICAgaW5mb19sb2coIjo6OiA8bGliY19waWQ9JTAzdSwgcGlkPSUwM3U+OiByZWFsbG9jKCVwLCAldSkgcmVkaXIgdG8gbWFsbG9jIiwKLSAgICAgICAgICAgICAgICAgbWFsbG9jX3BpZCwgZ2V0cGlkKCksIG1lbSwgYnl0ZXMpOwotICAgICAgICByZXR1cm4gcWVtdV9pbnN0cnVtZW50ZWRfbWFsbG9jKGJ5dGVzKTsKLSAgICB9Ci0KLSAgICBpZiAoYnl0ZXMgPT0gMCkgewotICAgICAgICAvLyBUaGlzIGlzIGEgImZyZWUiIGNvbmRpdGlvbi4KLSAgICAgICAgaW5mb19sb2coIjo6OiA8bGliY19waWQ9JTAzdSwgcGlkPSUwM3U+OiByZWFsbG9jKCVwLCAldSkgcmVkaXIgdG8gZnJlZSBhbmQgbWFsbG9jIiwKLSAgICAgICAgICAgICAgICAgbWFsbG9jX3BpZCwgZ2V0cGlkKCksIG1lbSwgYnl0ZXMpOwotICAgICAgICBxZW11X2luc3RydW1lbnRlZF9mcmVlKG1lbSk7Ci0KLSAgICAgICAgLy8gVGhpcyBpcyB3aGF0IGRscmVhbGxvYyBkb2VzIGZvciBhICJmcmVlIiByZWFsbG9jLgotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICAvLyBRdWVyeSBlbXVsYXRvciBmb3IgdGhlIHJlYWxsb2NhdGluZyBibG9jayBpbmZvcm1hdGlvbi4KLSAgICBpZiAocXVlcnlfcWVtdV9tYWxsb2NfaW5mbyhtZW0sICZjdXJfZGVzYywgMikpIHsKLSAgICAgICAgLy8gTm90ZSB0aGF0IHRoaXMgdmlvbGF0aW9uIHNob3VsZCBiZSBhbHJlYWR5IGNhdWdodCBpbiB0aGUgZW11bGF0b3IuCi0gICAgICAgIGVycm9yX2xvZygiPGxpYmNfcGlkPSUwM3UsIHBpZD0lMDN1PjogcmVhbGxvYyglcCwgJXUpIHF1ZXJ5X2luZm8gZmFpbGVkLiIsCi0gICAgICAgICAgICAgICAgICBtYWxsb2NfcGlkLCBnZXRwaWQoKSwgbWVtLCBieXRlcyk7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQotI2lmIFRFU1RfQUNDRVNTX1ZJT0xBVElPTlMKLSAgICB0ZXN0X2FjY2Vzc192aW9sYXRpb24oJmN1cl9kZXNjKTsKLSNlbmRpZiAgLy8gVEVTVF9BQ0NFU1NfVklPTEFUSU9OUwotCi0gICAgLyogTWFrZSBzdXJlIHRoYXQgcmVhbGxvY2F0aW5nIHBvaW50ZXIgdmFsdWUgaXMgd2hhdCB3ZSB3b3VsZCBleHBlY3QKLSAgICAgKiBmb3IgdGhpcyBtZW1vcnkgYmxvY2suIE5vdGUgdGhhdCB0aGlzIHZpb2xhdGlvbiBzaG91bGQgYmUgYWxyZWFkeSBjYXVnaHQKLSAgICAgKiBpbiB0aGUgZW11bGF0b3IuKi8KLSAgICBpZiAobWVtICE9IG1hbGxvY2Rlc2NfdXNlcl9wdHIoJmN1cl9kZXNjKSkgewotICAgICAgICBsb2dfbWRlc2MoZXJyb3IsICZjdXJfZGVzYywgIjxsaWJjX3BpZD0lMDN1LCBwaWQ9JTAzdT46IHJlYWxsb2MoJXAsICV1KSBpcyBpbnZhbGlkIGZvciAiLAotICAgICAgICAgICAgICAgICAgbWFsbG9jX3BpZCwgZ2V0cGlkKCksIG1lbSwgYnl0ZXMpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICAvKiBUT0RPOiBXZSdyZSBhIGJpdCBpbmVmZmljaWVudCBoZXJlLCBhbHdheXMgYWxsb2NhdGluZyBuZXcgYmxvY2sgZnJvbQotICAgICAqIHRoZSBoZWFwLiBJZiB0aGlzIHJlYWxsb2Mgc2hyaW5rcyBjdXJyZW50IGJ1ZmZlciwgd2UgY2FuIGp1c3QgZG8gdGhlCi0gICAgICogc2hyaW5raW5nICJpbiBwbGFjZSIsIGFkanVzdGluZyBzdWZmaXhfc2l6ZSBpbiB0aGUgYWxsb2NhdGlvbiBkZXNjcmlwdG9yCi0gICAgICogZm9yIHRoaXMgYmxvY2sgdGhhdCBpcyBzdG9yZWQgaW4gdGhlIGVtdWxhdG9yLiAqLwotCi0gICAgLy8gSW5pdGlhbGl6ZSBkZXNjcmlwdG9yIGZvciB0aGUgbmV3IGJsb2NrLgotICAgIG5ld19kZXNjLnByZWZpeF9zaXplID0gREVGQVVMVF9QUkVGSVhfU0laRTsKLSAgICBuZXdfZGVzYy5yZXF1ZXN0ZWRfYnl0ZXMgPSBieXRlczsKLSAgICBuZXdfZGVzYy5zdWZmaXhfc2l6ZSA9IERFRkFVTFRfU1VGRklYX1NJWkU7Ci0gICAgbmV3X2Rlc2MucHRyID0gZGxtYWxsb2MobWFsbG9jZGVzY19hbGxvY19zaXplKCZuZXdfZGVzYykpOwotICAgIGlmIChuZXdfZGVzYy5wdHIgPT0gTlVMTCkgewotICAgICAgICBsb2dfbWRlc2MoZXJyb3IsICZjdXJfZGVzYywgIjxsaWJjX3BpZD0lMDN1LCBwaWQ9JTAzdT46IHJlYWxsb2MoJXAsICV1KTogZGxtYWxsb2MoJXUpIGZhaWxlZCBvbiAiLAotICAgICAgICAgICAgICAgICAgbWFsbG9jX3BpZCwgZ2V0cGlkKCksIG1lbSwgYnl0ZXMsCi0gICAgICAgICAgICAgICAgICBtYWxsb2NkZXNjX2FsbG9jX3NpemUoJm5ld19kZXNjKSk7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLSAgICByZXQgPSBtYWxsb2NkZXNjX3VzZXJfcHRyKCZuZXdfZGVzYyk7Ci0KLSAgICAvLyBDb3B5IHVzZXIgZGF0YSBmcm9tIG9sZCBibG9jayB0byB0aGUgbmV3IG9uZS4KLSAgICB0b19jb3B5ID0gYnl0ZXMgPCBjdXJfZGVzYy5yZXF1ZXN0ZWRfYnl0ZXMgPyBieXRlcyA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VyX2Rlc2MucmVxdWVzdGVkX2J5dGVzOwotICAgIGlmICh0b19jb3B5ICE9IDApIHsKLSAgICAgICAgbWVtY3B5KHJldCwgbWFsbG9jZGVzY191c2VyX3B0cigmY3VyX2Rlc2MpLCB0b19jb3B5KTsKLSAgICB9Ci0KLSAgICAvLyBSZWdpc3RlciBuZXcgYmxvY2sgd2l0aCBlbXVsYXRvci4KLSAgICBpZihub3RpZnlfcWVtdV9tYWxsb2MoJm5ld19kZXNjKSkgewotICAgICAgICBsb2dfbWRlc2MoZXJyb3IsICZuZXdfZGVzYywgIjxsaWJjX3BpZD0lMDN1LCBwaWQ9JTAzdT46IHJlYWxsb2MoJXAsICV1KSBub3RpZnlfbWFsbG9jIGZhaWxlZCAtPiAiLAotICAgICAgICAgICAgICAgICAgbWFsbG9jX3BpZCwgZ2V0cGlkKCksIG1lbSwgYnl0ZXMpOwotICAgICAgICBsb2dfbWRlc2MoZXJyb3IsICZjdXJfZGVzYywgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8LSAiKTsKLSAgICAgICAgZGxmcmVlKG5ld19kZXNjLnB0cik7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQotI2lmIFRFU1RfQUNDRVNTX1ZJT0xBVElPTlMKLSAgICB0ZXN0X2FjY2Vzc192aW9sYXRpb24oJm5ld19kZXNjKTsKLSNlbmRpZiAgLy8gVEVTVF9BQ0NFU1NfVklPTEFUSU9OUwotCi0gICAgLy8gRnJlZSBvbGQgYmxvY2suCi0gICAgaWYgKG5vdGlmeV9xZW11X2ZyZWUobWVtKSkgewotICAgICAgICBsb2dfbWRlc2MoZXJyb3IsICZjdXJfZGVzYywgIjxsaWJjX3BpZD0lMDN1LCBwaWQ9JTAzdT46IHJlYWxsb2MoJXAsICV1KTogbm90aWZ5X2ZyZWUgZmFpbGVkIGZvciAiLAotICAgICAgICAgICAgICAgICAgbWFsbG9jX3BpZCwgZ2V0cGlkKCksIG1lbSwgYnl0ZXMpOwotICAgICAgICAvKiBTaW5jZSB3ZSByZWdpc3RlcmVkIG5ldyBkZWNyaXB0b3Igd2l0aCB0aGUgZW11bGF0b3IsIHdlIG5lZWQKLSAgICAgICAgICogdG8gdW5yZWdpc3RlciBpdCBiZWZvcmUgZnJlZWluZyBuZXdseSBhbGxvY2F0ZWQgYmxvY2suICovCi0gICAgICAgIG5vdGlmeV9xZW11X2ZyZWUobWFsbG9jZGVzY191c2VyX3B0cigmbmV3X2Rlc2MpKTsKLSAgICAgICAgZGxmcmVlKG5ld19kZXNjLnB0cik7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLSAgICBkbGZyZWUoY3VyX2Rlc2MucHRyKTsKLQotICAgIGxvZ19tZGVzYyhpbmZvLCAmbmV3X2Rlc2MsICI9PT0gPGxpYmNfcGlkPSUwM3UsIHBpZD0lMDN1PjogcmVhbGxvYyglcCwgJXUpIC0+ICIsCi0gICAgICAgICAgICAgIG1hbGxvY19waWQsIGdldHBpZCgpLCBtZW0sIGJ5dGVzKTsKLSAgICBsb2dfbWRlc2MoaW5mbywgJmN1cl9kZXNjLCAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8LSAiKTsKLQotICAgIHJldHVybiByZXQ7Ci19Ci0KLS8qIFRoaXMgcm91dGluZSBzZXJ2ZXMgYXMgZW50cnkgcG9pbnQgZm9yICdtZW1hbGlnbicuCi0gKiBUaGlzIHJvdXRpbmUgYmVoYXZlcyBzaW1pbGFybHkgdG8gcWVtdV9pbnN0cnVtZW50ZWRfbWFsbG9jLgotICovCi12b2lkKgotcWVtdV9pbnN0cnVtZW50ZWRfbWVtYWxpZ24oc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IGJ5dGVzKQotewotICAgIE1hbGxvY0Rlc2MgZGVzYzsKLQotICAgIGlmIChieXRlcyA9PSAwKSB7Ci0gICAgICAgIC8vIEp1c3QgbGV0IGdvIHplcm8gYnl0ZXMgYWxsb2NhdGlvbi4KLSAgICAgICAgaW5mb19sb2coIjo6OiA8bGliY19waWQ9JTAzdSwgcGlkPSUwM3U+OiBtZW1hbGlnbiglWCwgJXUpIHJlZGlyIHRvIG1hbGxvYyIsCi0gICAgICAgICAgICAgICAgIG1hbGxvY19waWQsIGdldHBpZCgpLCBhbGlnbm1lbnQsIGJ5dGVzKTsKLSAgICAgICAgcmV0dXJuIHFlbXVfaW5zdHJ1bWVudGVkX21hbGxvYygwKTsKLSAgICB9Ci0KLSAgICAvKiBQcmVmaXggc2l6ZSBmb3IgYWxpZ25lZCBhbGxvY2F0aW9uIG11c3QgYmUgZXF1YWwgdG8gdGhlIGFsaWdubWVudCB1c2VkCi0gICAgICogZm9yIGFsbG9jYXRpb24gaW4gb3JkZXIgdG8gZW5zdXJlIHByb3BlciBhbGlnbm1lbnQgb2YgdGhlIHJldHVybmVkCi0gICAgICogcG9pbnRlciwgaW4gY2FzZSB0aGF0IGFsaWdubWVudCByZXF1aXJlbWVudCBpcyBncmVhdGVyIHRoYW4gcHJlZml4Ci0gICAgICogc2l6ZS4gKi8KLSAgICBkZXNjLnByZWZpeF9zaXplID0gYWxpZ25tZW50ID4gREVGQVVMVF9QUkVGSVhfU0laRSA/IGFsaWdubWVudCA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBERUZBVUxUX1BSRUZJWF9TSVpFOwotICAgIGRlc2MucmVxdWVzdGVkX2J5dGVzID0gYnl0ZXM7Ci0gICAgZGVzYy5zdWZmaXhfc2l6ZSA9IERFRkFVTFRfU1VGRklYX1NJWkU7Ci0gICAgZGVzYy5wdHIgPSBkbG1lbWFsaWduKGRlc2MucHJlZml4X3NpemUsIG1hbGxvY2Rlc2NfYWxsb2Nfc2l6ZSgmZGVzYykpOwotICAgIGlmIChkZXNjLnB0ciA9PSBOVUxMKSB7Ci0gICAgICAgIGVycm9yX2xvZygiPGxpYmNfcGlkPSUwM3UsIHBpZD0lMDN1PiBtZW1hbGlnbiglWCwgJXUpOiBkbG1hbGxvYygldSkgZmFpbGVkLiIsCi0gICAgICAgICAgICAgICAgICBtYWxsb2NfcGlkLCBnZXRwaWQoKSwgYWxpZ25tZW50LCBieXRlcywKLSAgICAgICAgICAgICAgICAgIG1hbGxvY2Rlc2NfYWxsb2Nfc2l6ZSgmZGVzYykpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAgaWYgKG5vdGlmeV9xZW11X21hbGxvYygmZGVzYykpIHsKLSAgICAgICAgbG9nX21kZXNjKGVycm9yLCAmZGVzYywgIjxsaWJjX3BpZD0lMDN1LCBwaWQ9JTAzdT46IG1lbWFsaWduKCVYLCAldSk6IG5vdGlmeV9tYWxsb2MgZmFpbGVkIGZvciAiLAotICAgICAgICAgICAgICAgICAgbWFsbG9jX3BpZCwgZ2V0cGlkKCksIGFsaWdubWVudCwgYnl0ZXMpOwotICAgICAgICBkbGZyZWUoZGVzYy5wdHIpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSNpZiBURVNUX0FDQ0VTU19WSU9MQVRJT05TCi0gICAgdGVzdF9hY2Nlc3NfdmlvbGF0aW9uKCZkZXNjKTsKLSNlbmRpZiAgLy8gVEVTVF9BQ0NFU1NfVklPTEFUSU9OUwotCi0gICAgbG9nX21kZXNjKGluZm8sICZkZXNjLCAiQEBAIDxsaWJjX3BpZD0lMDN1LCBwaWQ9JTAzdT4gbWVtYWxpZ24oJVgsICV1KSAtPiAiLAotICAgICAgICAgICAgICBtYWxsb2NfcGlkLCBnZXRwaWQoKSwgYWxpZ25tZW50LCBieXRlcyk7Ci0gICAgcmV0dXJuIG1hbGxvY2Rlc2NfdXNlcl9wdHIoJmRlc2MpOwotfQpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvbWFsbG9jX2RlYnVnX3FlbXUuY3BwIGIvbGliYy9iaW9uaWMvbWFsbG9jX2RlYnVnX3FlbXUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjNjY2YTkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2Jpb25pYy9tYWxsb2NfZGVidWdfcWVtdS5jcHAKQEAgLTAsMCArMSw5OTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworLyoKKyAqIENvbnRhaW5zIGltcGxlbWVudGF0aW9uIG9mIG1lbW9yeSBhbGxvY2F0aW9uIHJvdXRpbmVzIGluc3RydW1lbnRlZCBmb3IKKyAqIHVzYWdlIGluIHRoZSBlbXVsYXRvciB0byBkZXRlY3QgbWVtb3J5IGFsbG9jYXRpb24gdmlvbGF0aW9ucywgc3VjaCBhcworICogbWVtb3J5IGxlYWtzLCBidWZmZXIgb3ZlcnJ1bnMsIGV0Yy4KKyAqIENvZGUsIGltcGxlbWVudGVkIGhlcmUgaXMgaW50ZW5kZWQgdG8gcnVuIGluIHRoZSBlbXVsYXRlZCBlbnZpcm9ubWVudCBvbmx5LAorICogYW5kIHNlcnZlcyBzaW1wbHkgYXMgaG9va3MgaW50byBtZW1vcnkgYWxsb2NhdGlvbiByb3V0aW5lcy4gTWFpbiBqb2Igb2YgdGhpcworICogY29kZSBpcyB0byBub3RpZnkgdGhlIGVtdWxhdG9yIGFib3V0IG1lbW9yeSBiZWluZyBhbGxvY2F0ZWQvZGVhbGxvY2F0ZWQsCisgKiBwcm92aWRpbmcgaW5mb3JtYXRpb24gYWJvdXQgZWFjaCBhbGxvY2F0aW9uLiBUaGUgaWRlYSBpcyB0aGF0IGVtdWxhdG9yIHdpbGwKKyAqIGtlZXAgbGlzdCBvZiBjdXJyZW50bHkgYWxsb2NhdGVkIGJsb2NrcywgYW5kLCBrbm93aW5nIGJvdW5kYXJpZXMgb2YgZWFjaAorICogYmxvY2sgaXQgd2lsbCBiZSBhYmxlIHRvIHZlcmlmeSB0aGF0IGxkL3N0IGFjY2VzcyB0byB0aGVzZSBibG9ja3MgZG9uJ3Qgc3RlcAorICogb3ZlciBib3VuZGFyaWVzIHNldCBmb3IgdGhlIHVzZXIuIFRvIGVuZm9yY2UgdGhhdCwgZWFjaCBtZW1vcnkgYmxvY2sKKyAqIGFsbG9jYXRlZCBieSB0aGlzIGNvZGUgaXMgZ3VhcmRlZCB3aXRoICJwcmVmaXgiIGFuZCAic3VmZml4IiBhcmVhcywgc28KKyAqIGV2ZXJ5IHRpbWUgZW11bGF0b3IgZGV0ZWN0cyBhY2Nlc3MgdG8gYW55IG9mIHRoZXNlIGd1YXJkaW5nIGFyZWFzLCBpdCBjYW4gYmUKKyAqIGNvbnNpZGVyZWQgYXMgYWNjZXNzIHZpb2xhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RkZGVmLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHN5cy9tbWFuLmg+CisjaW5jbHVkZSA8cHRocmVhZC5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSAiZGxtYWxsb2MuaCIKKyNpbmNsdWRlICJsaWJjX2xvZ2dpbmcuaCIKKyNpbmNsdWRlICJtYWxsb2NfZGVidWdfY29tbW9uLmgiCisKKy8qIFRoaXMgZmlsZSBzaG91bGQgYmUgaW5jbHVkZWQgaW50byB0aGUgYnVpbGQgb25seSB3aGVuCisgKiBNQUxMT0NfUUVNVV9JTlNUUlVNRU5UIG1hY3JvIGlzIGRlZmluZWQuICovCisjaWZuZGVmIE1BTExPQ19RRU1VX0lOU1RSVU1FTlQKKyNlcnJvciBNQUxMT0NfUUVNVV9JTlNUUlVNRU5UIGlzIG5vdCBkZWZpbmVkLgorI2VuZGlmICAvLyAhTUFMTE9DX1FFTVVfSU5TVFJVTUVOVAorCisvKiBDb250cm9scyBhY2Nlc3MgdmlvbGF0aW9uIHRlc3QgcGVyZm9ybWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHdlIGNhdGNoIEFWcworICogYWxsIHRoZSB0aW1lIHRoZXkgb2NjdXIuIFNlZSB0ZXN0X2FjY2Vzc192aW9sYXRpb24gZm9yIG1vcmUgaW5mby4gVGhpcyBtYWNybworICogaXMgdXNlZCBmb3IgaW50ZXJuYWwgdGVzdGluZyBwdXJwb3NlcyBhbmQgc2hvdWxkIGFsd2F5cyBiZSBzZXQgdG8gemVybyBmb3IKKyAqIHRoZSBwcm9kdWN0aW9uIGJ1aWxkcy4gKi8KKyNkZWZpbmUgVEVTVF9BQ0NFU1NfVklPTEFUSU9OUyAgMAorCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gQ29tbXVuaWNhdGlvbiBzdHJ1Y3R1cmVzCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisvKiBEZXNjcmliZXMgbWVtb3J5IGJsb2NrIGFsbG9jYXRlZCBmcm9tIHRoZSBoZWFwLiBUaGlzIHN0cnVjdHVyZSBpcyBwYXNzZWQKKyAqIGFsb25nIHdpdGggVFJBQ0VfREVWX1JFR19NQUxMT0MgZXZlbnQuIFRoaXMgZGVzY3JpcHRvciBpcyB1c2VkIHRvIGluZm9ybQorICogdGhlIGVtdWxhdG9yIGFib3V0IG5ldyBtZW1vcnkgYmxvY2sgYmVpbmcgYWxsb2NhdGVkIGZyb20gdGhlIGhlYXAuIFRoZSBlbnRpcmUKKyAqIHN0cnVjdHVyZSBpcyBpbml0aWFsaXplZCBieSB0aGUgZ3Vlc3Qgc3lzdGVtIGJlZm9yZSBldmVudCBpcyBmaXJlZCB1cC4gSXQgaXMKKyAqIGltcG9ydGFudCB0byByZW1lbWJlciB0aGF0IHNhbWUgc3RydWN0dXJlIChhbiBleGFjdCBjb3B5LCBleGNlcHQgZm9yCisgKiByZXBsYWNpbmcgcG9pbnRlcnMgd2l0aCB0YXJnZXRfdWxvbmcpIGlzIGFsc28gZGVjbGFyZWQgaW4gdGhlIGVtdWxhdG9yJ3MKKyAqIHNvdXJjZXMgKGZpbGUgbWVtY2hlY2svbWVtY2hlY2tfY29tbW9uLmgpLiBTbywgZXZlcnkgdGltZSBhIGNoYW5nZSBpcyBtYWRlIHRvCisgKiBhbnkgb2YgdGhlc2UgdHdvIGRlY2xhcmF0aW9uLCBhbm90aGVyIG9uZSBtdXN0IGJlIGFsc28gdXBkYXRlZCBhY2NvcmRpbmdseS4KKyAqLworc3RydWN0IE1hbGxvY0Rlc2MgeworICAgIC8qIFBvaW50ZXIgdG8gdGhlIG1lbW9yeSBibG9jayBhY3R1YWxseSBhbGxvY2F0ZWQgZnJvbSB0aGUgaGVhcC4gTm90ZSB0aGF0CisgICAgICogdGhpcyBpcyBub3QgdGhlIHBvaW50ZXIgdGhhdCBpcyByZXR1cm5lZCB0byB0aGUgbWFsbG9jJ3MgY2FsbGVyLiBQb2ludGVyCisgICAgICogcmV0dXJuZWQgdG8gdGhlIGNhbGxlciBpcyBjYWxjdWxhdGVkIGJ5IGFkZGluZyB2YWx1ZSBzdG9yZWQgaW4gdGhpcyBmaWVsZAorICAgICAqIHRvIHRoZSB2YWx1ZSBzdG9yZWQgaW4gcHJlZml4X3NpemUgZmllbGQgb2YgdGhpcyBzdHJ1Y3R1cmUuCisgICAgICovCisgICAgdm9pZCogICAgICAgcHRyOworCisgICAgLyogTnVtYmVyIG9mIGJ5dGVzIHJlcXVlc3RlZCBieSB0aGUgbWFsbG9jJ3MgY2FsbGVyLiAqLworICAgIHVpbnQzMl90ICAgIHJlcXVlc3RlZF9ieXRlczsKKworICAgIC8qIEJ5dGUgc2l6ZSBvZiB0aGUgcHJlZml4IGRhdGEuIEFjdHVhbCBwb2ludGVyIHJldHVybmVkIHRvIHRoZSBtYWxsb2MncworICAgICAqIGNhbGxlciBpcyBjYWxjdWxhdGVkIGJ5IGFkZGluZyB2YWx1ZSBzdG9yZWQgaW4gdGhpcyBmaWVsZCB0byB0aGUgdmFsdWUKKyAgICAgKiBzdG9yZWQgaW4gaW4gdGhlIHB0ciBmaWVsZCBvZiB0aGlzIHN0cnVjdHVyZS4KKyAgICAgKi8KKyAgICB1aW50MzJfdCAgICBwcmVmaXhfc2l6ZTsKKworICAgIC8qIEJ5dGUgc2l6ZSBvZiB0aGUgc3VmZml4IGRhdGEuICovCisgICAgdWludDMyX3QgICAgc3VmZml4X3NpemU7CisKKyAgICAvKiBJZCBvZiB0aGUgcHJvY2VzcyB0aGF0IGluaXRpYWxpemVkIGxpYmMgaW5zdGFuY2UsIGluIHdoaWNoIGFsbG9jYXRpb24KKyAgICAgKiBoYXMgb2NjdXJyZWQuIFRoaXMgZmllbGQgaXMgdXNlZCBieSB0aGUgZW11bGF0b3IgdG8gcmVwb3J0IGVycm9ycyBpbgorICAgICAqIHRoZSBjb3Vyc2Ugb2YgVFJBQ0VfREVWX1JFR19NQUxMT0MgZXZlbnQgaGFuZGxpbmcuIEluIGNhc2Ugb2YgYW4gZXJyb3IsCisgICAgICogZW11bGF0b3Igc2V0cyB0aGlzIGZpZWxkIHRvIHplcm8gKGludmFsaWQgdmFsdWUgZm9yIGEgcHJvY2VzcyBJRCkuCisgICAgICovCisgICAgdWludDMyX3QgICAgbGliY19waWQ7CisKKyAgICAvKiBJZCBvZiB0aGUgcHJvY2VzcyBpbiBjb250ZXh0IG9mIHdoaWNoIGFsbG9jYXRpb24gaGFzIG9jY3VycmVkLgorICAgICAqIFZhbHVlIGluIHRoaXMgZmllbGQgbWF5IGRpZmZlciBmcm9tIGxpYmNfcGlkIHZhbHVlLCBpZiBwcm9jZXNzIHRoYXQKKyAgICAgKiBpcyBkb2luZyBhbGxvY2F0aW9uIGhhcyBiZWVuIGZvcmtlZCBmcm9tIHRoZSBwcm9jZXNzIHRoYXQgaW5pdGlhbGl6ZWQKKyAgICAgKiBsaWJjIGluc3RhbmNlLgorICAgICAqLworICAgIHVpbnQzMl90ICAgIGFsbG9jYXRvcl9waWQ7CisKKyAgICAvKiBOdW1iZXIgb2YgYWNjZXNzIHZpb2xhdGlvbnMgZGV0ZWN0ZWQgb24gdGhpcyBhbGxvY2F0aW9uLiAqLworICAgIHVpbnQzMl90ICAgIGF2X2NvdW50OworfTsKKworLyogRGVzY3JpYmVzIG1lbW9yeSBibG9jayBpbmZvIHF1ZXJpZWQgZnJvbSBlbXVsYXRvci4gVGhpcyBzdHJ1Y3R1cmUgaXMgcGFzc2VkCisgKiBhbG9uZyB3aXRoIFRSQUNFX0RFVl9SRUdfUVVFUllfTUFMTE9DIGV2ZW50LiBXaGVuIGhhbmRsaW5nIGZyZWUgYW5kIHJlYWxsb2MKKyAqIGNhbGxzLCBpdCBpcyByZXF1aXJlZCB0aGF0IHdlIGhhdmUgaW5mb3JtYXRpb24gYWJvdXQgbWVtb3J5IGJsb2NrcyB0aGF0IHdlcmUKKyAqIGFjdHVhbGx5IGFsbG9jYXRlZCBpbiBwcmV2aW91cyBjYWxscyB0byBtYWxsb2MsIGNhbGxvYywgbWVtYWxpZ24sIG9yIHJlYWxsb2MuCisgKiBTaW5jZSB3ZSBkb24ndCBrZWVwIHRoaXMgaW5mb3JtYXRpb24gZGlyZWN0bHkgaW4gdGhlIGFsbG9jYXRlZCBibG9jaywgYnV0CisgKiByYXRoZXIgd2Uga2VlcCBpdCBpbiB0aGUgZW11bGF0b3IsIHdlIG5lZWQgdG8gcXVlcnkgZW11bGF0b3IgZm9yIHRoYXQKKyAqIGluZm9ybWF0aW9uIHdpdGggVFJBQ0VfREVWX1JFR19RVUVSWV9NQUxMT0MgcXVlcnkuIFRoZSBlbnRpcmUgc3RydWN0dXJlIGlzCisgKiBpbml0aWFsaXplZCBieSB0aGUgZ3Vlc3Qgc3lzdGVtIGJlZm9yZSBldmVudCBpcyBmaXJlZCB1cC4gSXQgaXMgaW1wb3J0YW50IHRvCisgKiByZW1lbWJlciB0aGF0IHNhbWUgc3RydWN0dXJlIChhbiBleGFjdCBjb3B5LCBleGNlcHQgZm9yIHJlcGxhY2luZyBwb2ludGVycworICogd2l0aCB0YXJnZXRfdWxvbmcpIGlzIGFsc28gZGVjbGFyZWQgaW4gdGhlIGVtdWxhdG9yJ3Mgc291cmNlcyAoZmlsZQorICogbWVtY2hlY2svbWVtZWNoZWNrX2NvbW1vbi5oKS4gU28sIGV2ZXJ5IHRpbWUgYSBjaGFuZ2UgaXMgbWFkZSB0byBhbnkgb2YgdGhlc2UKKyAqIHR3byBkZWNsYXJhdGlvbiwgYW5vdGhlciBvbmUgbXVzdCBiZSBhbHNvIHVwZGF0ZWQgYWNjb3JkaW5nbHkuCisgKi8KK3N0cnVjdCBNYWxsb2NEZXNjUXVlcnkgeworICAgIC8qIFBvaW50ZXIsIGZvciB3aGljaCBpbmZvcm1hdGlvbiBpcyBxdWVyaWVkLiBOb3RlIHRoYXQgdGhpcyBwb2ludGVyIGRvZXNuJ3QKKyAgICAgKiBoYXZlIHRvIGJlIGV4YWN0IHBvaW50ZXIgcmV0dXJuZWQgdG8gbWFsbG9jJ3MgY2FsbGVyLCBidXQgY2FuIHBvaW50CisgICAgICogYW55d2hlcmUgaW5zaWRlIGFuIGFsbG9jYXRlZCBibG9jaywgaW5jbHVkaW5nIGd1YXJkaW5nIGFyZWFzLiBFbXVsYXRvcgorICAgICAqIHdpbGwgcmVzcG9uZCB3aXRoIGluZm9ybWF0aW9uIGFib3V0IGFsbG9jYXRlZCBibG9jayB0aGF0IGNvbnRhaW5zIHRoaXMKKyAgICAgKiBwb2ludGVyLgorICAgICAqLworICAgIGNvbnN0IHZvaWQqICAgICAgIHB0cjsKKworICAgIC8qIElkIG9mIHRoZSBwcm9jZXNzIHRoYXQgaW5pdGlhbGl6ZWQgbGliYyBpbnN0YW5jZSwgaW4gd2hpY2ggdGhpcyBxdWVyeQorICAgICAqIGlzIGNhbGxlZC4gVGhpcyBmaWVsZCBpcyB1c2VkIGJ5IHRoZSBlbXVsYXRvciB0byByZXBvcnQgZXJyb3JzIGluCisgICAgICogdGhlIGNvdXJzZSBvZiBUUkFDRV9ERVZfUkVHX1FVRVJZX01BTExPQyBldmVudCBoYW5kbGluZy4gSW4gY2FzZSBvZiBhbgorICAgICAqIGVycm9yLCBlbXVsYXRvciBzZXRzIHRoaXMgZmllbGQgdG8gemVybyAoaW52YWxpZCB2YWx1ZSBmb3IgYSBwcm9jZXNzIElEKS4KKyAgICAgKi8KKyAgICB1aW50MzJfdCAgICBsaWJjX3BpZDsKKworICAgIC8qIFByb2Nlc3MgSUQgaW4gY29udGV4dCBvZiB3aGljaCBxdWVyeSBpcyBtYWRlLiAqLworICAgIHVpbnQzMl90ICAgIHF1ZXJ5X3BpZDsKKworICAgIC8qIENvZGUgb2YgdGhlIGFsbG9jYXRpb24gcm91dGluZSwgaW4gY29udGV4dCBvZiB3aGljaCBxdWVyeSBoYXMgYmVlbiBtYWRlOgorICAgICAqICAxIC0gZnJlZQorICAgICAqICAyIC0gcmVhbGxvYworICAgICAqLworICAgIHVpbnQzMl90ICAgIHJvdXRpbmU7CisKKyAgICAvKiBBZGRyZXNzIG9mIG1lbW9yeSBhbGxvY2F0aW9uIGRlc2NyaXB0b3IgZm9yIHRoZSBxdWVyaWVkIHBvaW50ZXIuCisgICAgICogRGVzY3JpcHRvciwgYWRkcmVzc2VkIGJ5IHRoaXMgZmllbGQgaXMgaW5pdGlhbGl6ZWQgYnkgdGhlIGVtdWxhdG9yIGluCisgICAgICogcmVzcG9uc2UgdG8gdGhlIHF1ZXJ5LgorICAgICAqLworICAgIE1hbGxvY0Rlc2MqICBkZXNjOworfTsKKworLyogRGVzY3JpYmVzIG1lbW9yeSBibG9jayB0aGF0IGlzIGJlaW5nIGZyZWVkIGJhY2sgdG8gdGhlIGhlYXAuIFRoaXMgc3RydWN0dXJlCisgKiBpcyBwYXNzZWQgYWxvbmcgd2l0aCBUUkFDRV9ERVZfUkVHX0ZSRUVfUFRSIGV2ZW50LiBUaGUgZW50aXJlIHN0cnVjdHVyZSBpcworICogaW5pdGlhbGl6ZWQgYnkgdGhlIGd1ZXN0IHN5c3RlbSBiZWZvcmUgZXZlbnQgaXMgZmlyZWQgdXAuIEl0IGlzIGltcG9ydGFudCB0bworICogcmVtZW1iZXIgdGhhdCBzYW1lIHN0cnVjdHVyZSAoYW4gZXhhY3QgY29weSwgZXhjZXB0IGZvciByZXBsYWNpbmcgcG9pbnRlcnMKKyAqIHdpdGggdGFyZ2V0X3Vsb25nKSBpcyBhbHNvIGRlY2xhcmVkIGluIHRoZSBlbXVsYXRvcidzIHNvdXJjZXMgKGZpbGUKKyAqIG1lbWNoZWNrL21lbWVjaGVja19jb21tb24uaCkuIFNvLCBldmVyeSB0aW1lIGEgY2hhbmdlIGlzIG1hZGUgdG8gYW55IG9mIHRoZXNlCisgKiB0d28gZGVjbGFyYXRpb24sIGFub3RoZXIgb25lIG11c3QgYmUgYWxzbyB1cGRhdGVkIGFjY29yZGluZ2x5LgorICovCitzdHJ1Y3QgTWFsbG9jRnJlZSB7CisgICAgLyogUG9pbnRlciB0byBiZSBmcmVlZC4gKi8KKyAgICB2b2lkKiAgICAgICBwdHI7CisKKyAgICAvKiBJZCBvZiB0aGUgcHJvY2VzcyB0aGF0IGluaXRpYWxpemVkIGxpYmMgaW5zdGFuY2UsIGluIHdoaWNoIHRoaXMgZnJlZQorICAgICAqIGlzIGNhbGxlZC4gVGhpcyBmaWVsZCBpcyB1c2VkIGJ5IHRoZSBlbXVsYXRvciB0byByZXBvcnQgZXJyb3JzIGluCisgICAgICogdGhlIGNvdXJzZSBvZiBUUkFDRV9ERVZfUkVHX0ZSRUVfUFRSIGV2ZW50IGhhbmRsaW5nLiBJbiBjYXNlIG9mIGFuCisgICAgICogZXJyb3IsIGVtdWxhdG9yIHNldHMgdGhpcyBmaWVsZCB0byB6ZXJvIChpbnZhbGlkIHZhbHVlIGZvciBhIHByb2Nlc3MgSUQpLgorICAgICAqLworICAgIHVpbnQzMl90ICAgIGxpYmNfcGlkOworCisgICAgLyogUHJvY2VzcyBJRCBpbiBjb250ZXh0IG9mIHdoaWNoIG1lbW9yeSBpcyBiZWluZyBmcmVlZC4gKi8KKyAgICB1aW50MzJfdCAgICBmcmVlX3BpZDsKK307CisKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyBDb21tdW5pY2F0aW9uIGV2ZW50cworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworLyogTm90aWZpZXMgdGhlIGVtdWxhdG9yIHRoYXQgbGliYyBoYXMgYmVlbiBpbml0aWFsaXplZCBmb3IgYSBwcm9jZXNzLgorICogRXZlbnQncyB2YWx1ZSBwYXJhbWV0ZXIgaXMgUElEIGZvciB0aGUgcHJvY2VzcyBpbiBjb250ZXh0IG9mIHdoaWNoIGxpYmMgaGFzCisgKiBiZWVuIGluaXRpYWxpemVkLgorICovCisjZGVmaW5lIFRSQUNFX0RFVl9SRUdfTElCQ19JTklUICAgICAgICAgICAgIDE1MzYKKworLyogTm90aWZpZXMgdGhlIGVtdWxhdG9yIGFib3V0IG5ldyBtZW1vcnkgYmxvY2sgYmVlbiBhbGxvY2F0ZWQuCisgKiBFdmVudCdzIHZhbHVlIHBhcmFtZXRlciBwb2ludHMgdG8gTWFsbG9jRGVzYyBpbnN0YW5jZSB0aGF0IGNvbnRhaW5zCisgKiBhbGxvY2F0ZWQgYmxvY2sgaW5mb3JtYXRpb24uIE5vdGUgdGhhdCAnbGliY19waWQnIGZpZWxkIG9mIHRoZSBkZXNjcmlwdG9yCisgKiBpcyB1c2VkIGJ5IGVtdWxhdG9yIHRvIHJlcG9ydCBmYWlsdXJlIGluIGhhbmRsaW5nIHRoaXMgZXZlbnQuIEluIGNhc2UKKyAqIG9mIGEgZmFpbHVyZSBlbXVsYXRvciB3aWxsIHplcm8gdGhhdCBmaWVsZCBiZWZvcmUgY29tcGxldGluZyB0aGlzIGV2ZW50LgorICovCisjZGVmaW5lIFRSQUNFX0RFVl9SRUdfTUFMTE9DICAgICAgICAgICAgICAgIDE1MzcKKworLyogTm90aWZpZXMgdGhlIGVtdWxhdG9yIGFib3V0IG1lbW9yeSBibG9jayBiZWluZyBmcmVlZC4KKyAqIEV2ZW50J3MgdmFsdWUgcGFyYW1ldGVyIHBvaW50cyB0byBNYWxsb2NGcmVlIGRlc2NyaXB0b3IgdGhhdCBjb250YWlucworICogaW5mb3JtYXRpb24gYWJvdXQgYmxvY2sgdGhhdCdzIGJlaW5nIGZyZWVkLiBOb3RlIHRoYXQgJ2xpYmNfcGlkJyBmaWVsZAorICogb2YgdGhlIGRlc2NyaXB0b3IgaXMgdXNlZCBieSBlbXVsYXRvciB0byByZXBvcnQgZmFpbHVyZSBpbiBoYW5kbGluZyB0aGlzCisgKiBldmVudC4gSW4gY2FzZSBvZiBhIGZhaWx1cmUgZW11bGF0b3Igd2lsbCB6ZXJvIHRoYXQgZmllbGQgYmVmb3JlIGNvbXBsZXRpbmcKKyAqIHRoaXMgZXZlbnQuCisgKi8KKyNkZWZpbmUgVFJBQ0VfREVWX1JFR19GUkVFX1BUUiAgICAgICAgICAgICAgMTUzOAorCisvKiBRdWVyaWVzIHRoZSBlbXVsYXRvciBhYm91dCBhbGxvY2F0ZWQgbWVtb3J5IGJsb2NrIGluZm9ybWF0aW9uLgorICogRXZlbnQncyB2YWx1ZSBwYXJhbWV0ZXIgcG9pbnRzIHRvIE1hbGxvY0Rlc2NRdWVyeSBkZXNjcmlwdG9yIHRoYXQgY29udGFpbnMKKyAqIHF1ZXJ5IHBhcmFtZXRlcnMuIE5vdGUgdGhhdCAnbGliY19waWQnIGZpZWxkIG9mIHRoZSBkZXNjcmlwdG9yIGlzIHVzZWQgYnkKKyAqIGVtdWxhdG9yIHRvIHJlcG9ydCBmYWlsdXJlIGluIGhhbmRsaW5nIHRoaXMgZXZlbnQuIEluIGNhc2Ugb2YgYSBmYWlsdXJlCisgKiBlbXVsYXRvciB3aWxsIHplcm8gdGhhdCBmaWVsZCBiZWZvcmUgY29tcGxldGluZyB0aGlzIGV2ZW50LgorICovCisjZGVmaW5lIFRSQUNFX0RFVl9SRUdfUVVFUllfTUFMTE9DICAgICAgICAgIDE1MzkKKworLyogUXVlcmllcyB0aGUgZW11bGF0b3IgdG8gcHJpbnQgYSBzdHJpbmcgdG8gaXRzIHN0ZG91dC4KKyAqIEV2ZW50J3MgdmFsdWUgcGFyYW1ldGVyIHBvaW50cyB0byBhIHplcm8tdGVybWluYXRlZCBzdHJpbmcgdG8gYmUgcHJpbnRlZC4KKyAqLworI2RlZmluZSBUUkFDRV9ERVZfUkVHX1BSSU5UX1VTRVJfU1RSICAgICAgICAxNTQwCisKK3N0YXRpYyB2b2lkIG5vdGlmeV9xZW11X3N0cmluZyhjb25zdCBjaGFyKiBzdHIpOworc3RhdGljIHZvaWQgcWVtdV9sb2coaW50IHByaW8sIGNvbnN0IGNoYXIqIGZtdCwgLi4uKTsKK3N0YXRpYyB2b2lkIGR1bXBfbWFsbG9jX2Rlc2NyaXB0b3IoY2hhciogc3RyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgc3RyX2J1Zl9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBNYWxsb2NEZXNjKiBkZXNjKTsKKworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vIE1hY3JvcworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworLyogRGVmaW5lcyBkZWZhdWx0IHNpemUgb2YgYWxsb2NhdGlvbiBwcmVmaXguCisgKiBOb3RlIHRoYXQgd2UgbWFrZSBwcmVmaXggYXJlYSBxdWl0ZSBsYXJnZSBpbiBvcmRlciB0byBpbmNyZWFzZSBjaGFuY2VzIG9mCisgKiBjYXRjaGluZyBidWZmZXIgb3ZlcmZsb3cuICovCisjZGVmaW5lIERFRkFVTFRfUFJFRklYX1NJWkUgICAgIChtYWxsb2NfYWxpZ25tZW50ICogNCkKKworLyogRGVmaW5lcyBkZWZhdWx0IHNpemUgb2YgYWxsb2NhdGlvbiBzdWZmaXguCisgKiBOb3RlIHRoYXQgd2UgbWFrZSBzdWZmaXggYXJlYSBxdWl0ZSBsYXJnZSBpbiBvcmRlciB0byBpbmNyZWFzZSBjaGFuY2VzIG9mCisgKiBjYXRjaGluZyBidWZmZXIgb3ZlcmZsb3cuICovCisjZGVmaW5lIERFRkFVTFRfU1VGRklYX1NJWkUgICAgIChtYWxsb2NfYWxpZ25tZW50ICogNCkKKworLyogRGVidWcgdHJhY2luZyBoYXMgYmVlbiBlbmFibGVkIGJ5IHRoZSBlbXVsYXRvci4gKi8KKyNkZWZpbmUgREVCVUdfVFJBQ0lOR19FTkFCTEVEICAgMHgwMDAwMDAwMQorLyogRXJyb3IgdHJhY2luZyBoYXMgYmVlbiBlbmFibGVkIGJ5IHRoZSBlbXVsYXRvci4gKi8KKyNkZWZpbmUgRVJST1JfVFJBQ0lOR19FTkFCTEVEICAgMHgwMDAwMDAwMgorLyogSW5mbyB0cmFjaW5nIGhhcyBiZWVuIGVuYWJsZWQgYnkgdGhlIGVtdWxhdG9yLiAqLworI2RlZmluZSBJTkZPX1RSQUNJTkdfRU5BQkxFRCAgICAweDAwMDAwMDA0CisvKiBBbGwgdHJhY2luZyBmbGFncyBjb21iaW5lZC4gKi8KKyNkZWZpbmUgQUxMX1RSQUNJTkdfRU5BQkxFRCAoREVCVUdfVFJBQ0lOR19FTkFCTEVEIHwgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFUlJPUl9UUkFDSU5HX0VOQUJMRUQgfCAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElORk9fVFJBQ0lOR19FTkFCTEVEKQorCisvKiBQcmludHMgYSBzdHJpbmcgdG8gdGhlIGVtdWxhdG9yJ3Mgc3Rkb3V0LgorICogSW4gZWFybHkgc3RhZ2VzIG9mIHN5c3RlbSBsb2FkaW5nLCBsb2dnaW5nIG1lc3NhZ2VzIHRvIGxvZ2NhdAorICogaXMgbm90IGF2YWlsYWJsZSwgYmVjYXVzZSBBREIgQVBJIGhhcyBub3QgYmVlbgorICogaG9va2VkIHVwIHlldC4gU28sIGluIG9yZGVyIHRvIHNlZSBzdWNoIG1lc3NhZ2VzIHdlIG5lZWQgdG8gcHJpbnQgdGhlbSB0bworICogdGhlIGVtdWxhdG9yJ3Mgc3Rkb3V0LgorICogUGFyYW1ldGVycyBwYXNzZWQgdG8gdGhpcyBtYWNybyBhcmUgdGhlIHNhbWUgYXMgcGFyYW1ldGVycyBmb3IgcHJpbnRmCisgKiByb3V0aW5lLgorICovCisjZGVmaW5lIFRSKC4uLikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBjaGFyIHRyX3N0cls0MDk2XTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHNucHJpbnRmKHRyX3N0ciwgc2l6ZW9mKHRyX3N0ciksIF9fVkFfQVJHU19fKTsgIFwKKyAgICAgICAgdHJfc3RyW3NpemVvZih0cl9zdHIpIC0gMV0gPSAnXDAnOyAgICAgICAgICAgICAgXAorICAgICAgICBub3RpZnlfcWVtdV9zdHJpbmcoJnRyX3N0clswXSk7ICAgICAgICAgICAgICAgICBcCisgICAgfSB3aGlsZSAoMCkKKworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vIExvZ2dpbmcgbWFjcm9zLiBOb3RlIHRoYXQgd2Ugc2ltdWx0YW5lb3VzbHkgbG9nIG1lc3NhZ2VzIHRvIEFEQiBhbmQgZW11bGF0b3IuCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisvKgorICogSGVscGVyIG1hY3JvcyBmb3IgY2hlY2tpbmcgaWYgcGFydGljdWxhciB0cmFjZSBsZXZlbCBpcyBlbmFibGVkLgorICovCisjZGVmaW5lIGRlYnVnX0xPR19FTkFCTEVEICAgICAgICgodHJhY2luZ19mbGFncyAmIERFQlVHX1RSQUNJTkdfRU5BQkxFRCkgIT0gMCkKKyNkZWZpbmUgZXJyb3JfTE9HX0VOQUJMRUQgICAgICAgKCh0cmFjaW5nX2ZsYWdzICYgRVJST1JfVFJBQ0lOR19FTkFCTEVEKSAhPSAwKQorI2RlZmluZSBpbmZvX0xPR19FTkFCTEVEICAgICAgICAoKHRyYWNpbmdfZmxhZ3MgJiBJTkZPX1RSQUNJTkdfRU5BQkxFRCkgICE9IDApCisjZGVmaW5lIHRyYWNpbmdfZW5hYmxlZCh0eXBlKSAgICh0eXBlIyNfTE9HX0VOQUJMRUQpCisKKy8qCisgKiBMb2dnaW5nIGhlbHBlciBtYWNyb3MuCisgKi8KKyNkZWZpbmUgcWVtdV9kZWJ1Z19sb2coZm9ybWF0LCAuLi4pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBfX2xpYmNfZm9ybWF0X2xvZyhBTkRST0lEX0xPR19ERUJVRywgIm1lbWNoZWNrIiwgKGZvcm1hdCksICMjX19WQV9BUkdTX18pOyBcCisgICAgICAgIGlmICh0cmFjaW5nX2ZsYWdzICYgREVCVUdfVFJBQ0lOR19FTkFCTEVEKSB7ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgcWVtdV9sb2coQU5EUk9JRF9MT0dfREVCVUcsIChmb3JtYXQpLCAjI19fVkFfQVJHU19fKTsgICAgICAgICAgIFwKKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSB3aGlsZSAoMCkKKworI2RlZmluZSBxZW11X2Vycm9yX2xvZyhmb3JtYXQsIC4uLikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIF9fbGliY19mb3JtYXRfbG9nKEFORFJPSURfTE9HX0VSUk9SLCAibWVtY2hlY2siLCAoZm9ybWF0KSwgIyNfX1ZBX0FSR1NfXyk7IFwKKyAgICAgICAgaWYgKHRyYWNpbmdfZmxhZ3MgJiBFUlJPUl9UUkFDSU5HX0VOQUJMRUQpIHsgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBxZW11X2xvZyhBTkRST0lEX0xPR19FUlJPUiwgKGZvcm1hdCksICMjX19WQV9BUkdTX18pOyAgICAgICAgICAgXAorICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9IHdoaWxlICgwKQorCisjZGVmaW5lIHFlbXVfaW5mb19sb2coZm9ybWF0LCAuLi4pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgX19saWJjX2Zvcm1hdF9sb2coQU5EUk9JRF9MT0dfSU5GTywgIm1lbWNoZWNrIiwgKGZvcm1hdCksICMjX19WQV9BUkdTX18pOyBcCisgICAgICAgIGlmICh0cmFjaW5nX2ZsYWdzICYgSU5GT19UUkFDSU5HX0VOQUJMRUQpIHsgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgcWVtdV9sb2coQU5EUk9JRF9MT0dfSU5GTywgKGZvcm1hdCksICMjX19WQV9BUkdTX18pOyAgICAgICAgICAgIFwKKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSB3aGlsZSAoMCkKKworLyogTG9ncyBtZXNzYWdlIGR1bXBpbmcgTWFsbG9jRGVzYyBpbnN0YW5jZSBhdCB0aGUgZW5kIG9mIHRoZSBtZXNzYWdlLgorICogUGFyYW06CisgKiAgdHlwZSAtIE1lc3NhZ2UgdHlwZTogZGVidWcsIGVycm9yLCBvciBpbmZvCisgKiAgZGVzYyAtIE1hbGxvY0Rlc2MgaW5zdGFuY2UgdG8gZHVtcC4KKyAqICBmbXQgKyByZXN0IC0gRm9ybWF0cyBtZXNzYWdlIHByZWNlZGluZyBkdW1wZWQgZGVzY3JpcHRvci4KKyovCisjZGVmaW5lIGxvZ19tZGVzYyh0eXBlLCBkZXNjLCBmbXQsIC4uLikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZiAodHJhY2luZ19lbmFibGVkKHR5cGUpKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGNoYXIgbG9nX3N0cls0MDk2XTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBfX2xpYmNfZm9ybWF0X2J1ZmZlcihsb2dfc3RyLCBzaXplb2YobG9nX3N0ciksIGZtdCwgIyNfX1ZBX0FSR1NfXyk7IFwKKyAgICAgICAgICAgIGxvZ19zdHJbc2l6ZW9mKGxvZ19zdHIpIC0gMV0gPSAnXDAnOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBzaXplX3Qgc3RyX2xlbiA9IHN0cmxlbihsb2dfc3RyKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgZHVtcF9tYWxsb2NfZGVzY3JpcHRvcihsb2dfc3RyICsgc3RyX2xlbiwgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGxvZ19zdHIpIC0gc3RyX2xlbiwgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkZXNjKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgdHlwZSMjX2xvZygiJXMiLCBsb2dfc3RyKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSB3aGlsZSAoMCkKKworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vIFN0YXRpYyBkYXRhCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisvKiBFbXVsYXRvcidzIG1hZ2ljIHBhZ2UgYWRkcmVzcy4KKyAqIFRoaXMgcGFnZSAobWFwcGVkIG9uIC9kZXYvcWVtdV90cmFjZSBkZXZpY2UpIGlzIHVzZWQgdG8gZmlyZSB1cCBldmVudHMKKyAqIGluIHRoZSBlbXVsYXRvci4gKi8KK3N0YXRpYyB2b2xhdGlsZSB2b2lkKiBxdHJhY2UgPSBOVUxMOworCisvKiBDYWNoZWQgUElEIG9mIHRoZSBwcm9jZXNzIGluIGNvbnRleHQgb2Ygd2hpY2ggdGhpcyBsaWJjIGluc3RhbmNlCisgKiBoYXMgYmVlbiBpbml0aWFsaXplZC4gKi8KK3N0YXRpYyB1aW50MzJfdCBtYWxsb2NfcGlkID0gMDsKKworLyogTWVtb3J5IGFsbG9jYXRpb24gYWxpZ25tZW50IHRoYXQgaXMgdXNlZCBpbiBkbG1hbGxvYy4KKyAqIFRoaXMgdmFyaWFibGUgaXMgdXBkYXRlZCBieSBtZW1jaGVja19pbml0aWFsaXplIHJvdXRpbmUuICovCitzdGF0aWMgdWludDMyX3QgbWFsbG9jX2FsaWdubWVudCA9IDg7CisKKy8qIFRyYWNpbmcgZmxhZ3MuIFRoZXNlIGZsYWdzIGNvbnRyb2wgd2hpY2ggdHlwZXMgb2YgbG9nZ2luZyBtZXNzYWdlcyBhcmUKKyAqIGVuYWJsZWQgYnkgdGhlIGVtdWxhdG9yLiBTZWUgWFhYX1RSQUNJTkdfRU5BQkxFRCBmb3IgdGhlIHZhbHVlcyBvZiBmbGFncworICogc3RvcmVkIGluIHRoaXMgdmFyaWFibGUuIFRoaXMgdmFyaWFibGUgaXMgdXBkYXRlZCBieSBtZW1jaGVja19pbml0aWFsaXplCisgKiByb3V0aW5lLiAqLworc3RhdGljIHVpbnQzMl90IHRyYWNpbmdfZmxhZ3MgPSAwOworCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gU3RhdGljIHJvdXRpbmVzCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisvKiBHZXRzIHBvaW50ZXIsIHJldHVybmVkIHRvIG1hbGxvYyBjYWxsZXIgZm9yIHRoZSBnaXZlbiBhbGxvY2F0aW9uIGRlY3JpcHRvci4KKyAqIFBhcmFtOgorICogIGRlc2MgLSBBbGxvY2F0aW9uIGRlc2NyaXB0b3IuCisgKiBSZXR1cm46CisgKiAgUG9pbnRlciB0byB0aGUgYWxsb2NhdGVkIG1lbW9yeSByZXR1cm5lZCB0byB0aGUgbWFsbG9jIGNhbGxlci4KKyAqLworc3RhdGljIGlubGluZSB2b2lkKiBtYWxsb2NkZXNjX3VzZXJfcHRyKGNvbnN0IE1hbGxvY0Rlc2MqIGRlc2MpIHsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y2hhcio+KGRlc2MtPnB0cikgKyBkZXNjLT5wcmVmaXhfc2l6ZTsKK30KKworLyogR2V0cyBzaXplIG9mIG1lbW9yeSBibG9jayBhY3R1YWxseSBhbGxvY2F0ZWQgZnJvbSB0aGUgaGVhcCBmb3IgdGhlIGdpdmVuCisgKiBhbGxvY2F0aW9uIGRlY3JpcHRvci4KKyAqIFBhcmFtOgorICogIGRlc2MgLSBBbGxvY2F0aW9uIGRlc2NyaXB0b3IuCisgKiBSZXR1cm46CisgKiAgU2l6ZSBvZiBtZW1vcnkgYmxvY2sgYWN0dWFsbHkgYWxsb2NhdGVkIGZyb20gdGhlIGhlYXAuCisgKi8KK3N0YXRpYyBpbmxpbmUgdWludDMyX3QgbWFsbG9jZGVzY19hbGxvY19zaXplKGNvbnN0IE1hbGxvY0Rlc2MqIGRlc2MpIHsKKyAgICByZXR1cm4gZGVzYy0+cHJlZml4X3NpemUgKyBkZXNjLT5yZXF1ZXN0ZWRfYnl0ZXMgKyBkZXNjLT5zdWZmaXhfc2l6ZTsKK30KKworLyogR2V0cyBwb2ludGVyIHRvIHRoZSBlbmQgb2YgdGhlIGFsbG9jYXRlZCBibG9jayBmb3IgdGhlIGdpdmVuIGRlc2NyaXB0b3IuCisgKiBQYXJhbToKKyAqICBkZXNjIC0gRGVzY3JpcHRvciBmb3IgdGhlIG1lbW9yeSBibG9jaywgYWxsb2NhdGVkIGluIG1hbGxvYyBoYW5kbGVyLgorICogUmV0dXJuOgorICogIFBvaW50ZXIgdG8gdGhlIGVuZCBvZiAob25lIGJ5dGUgcGFzdCkgdGhlIGFsbG9jYXRlZCBibG9jay4KKyAqLworc3RhdGljIGlubGluZSB2b2lkKiBtYWxsb2NkZXNjX2FsbG9jX2VuZChjb25zdCBNYWxsb2NEZXNjKiBkZXNjKSB7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNoYXIqPihkZXNjLT5wdHIpICsgbWFsbG9jZGVzY19hbGxvY19zaXplKGRlc2MpOworfQorCisvKiBGaXJlcyB1cCBhbiBldmVudCBpbiB0aGUgZW11bGF0b3IuCisgKiBQYXJhbToKKyAqICBjb2RlIC0gRXZlbnQgY29kZSAob25lIG9mIHRoZSBUUkFDRV9ERVZfWFhYKS4KKyAqICB2YWwgIC0gRXZlbnQncyB2YWx1ZSBwYXJhbWV0ZXIuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBub3RpZnlfcWVtdSh1aW50MzJfdCBjb2RlLCB1aW50MzJfdCB2YWwpIHsKKyAgICBpZiAoTlVMTCAhPSBxdHJhY2UpIHsKKyAgICAgICAgKih2b2xhdGlsZSB1aW50MzJfdCopKCh1aW50MzJfdClxdHJhY2UgKyAoKGNvZGUgLSAxMDI0KSA8PCAyKSkgPSB2YWw7CisgICAgfQorfQorCisvKiBQcmludHMgYSB6ZXJvLXRlcm1pbmF0ZWQgc3RyaW5nIHRvIHRoZSBlbXVsYXRvcidzIHN0ZG91dCAoZmlyZXMgdXAKKyAqIFRSQUNFX0RFVl9SRUdfUFJJTlRfVVNFUl9TVFIgZXZlbnQgaW4gdGhlIGVtdWxhdG9yKS4KKyAqIFBhcmFtOgorICogIHN0ciAtIFplcm8tdGVybWluYXRlZCBzdHJpbmcgdG8gcHJpbnQuCisgKi8KK3N0YXRpYyB2b2lkIG5vdGlmeV9xZW11X3N0cmluZyhjb25zdCBjaGFyKiBzdHIpIHsKKyAgICBpZiAoc3RyICE9IE5VTEwpIHsKKyAgICAgICAgbm90aWZ5X3FlbXUoVFJBQ0VfREVWX1JFR19QUklOVF9VU0VSX1NUUiwgKHVpbnQzMl90KXN0cik7CisgICAgfQorfQorCisvKiBGaXJlcyB1cCBUUkFDRV9ERVZfUkVHX0xJQkNfSU5JVCBldmVudCBpbiB0aGUgZW11bGF0b3IuCisgKiBQYXJhbToKKyAqICBwaWQgLSBJRCBvZiB0aGUgcHJvY2VzcyB0aGF0IGluaXRpYWxpemVkIGxpYmMuCisgKi8KK3N0YXRpYyB2b2lkIG5vdGlmeV9xZW11X2xpYmNfaW5pdGlhbGl6ZWQodWludDMyX3QgcGlkKSB7CisgICAgbm90aWZ5X3FlbXUoVFJBQ0VfREVWX1JFR19MSUJDX0lOSVQsIHBpZCk7Cit9CisKKy8qIEZpcmVzIHVwIFRSQUNFX0RFVl9SRUdfTUFMTE9DIGV2ZW50IGluIHRoZSBlbXVsYXRvci4KKyAqIFBhcmFtOgorICogIGRlc2MgLSBQb2ludGVyIHRvIE1hbGxvY0Rlc2MgaW5zdGFuY2UgY29udGFpbmluZyBhbGxvY2F0ZWQgYmxvY2sKKyAqICAgICAgaW5mb3JtYXRpb24uCisgKiBSZXR1cm46CisgKiAgWmVybyBvbiBzdWNjZXNzLCBvciAtMSBvbiBmYWlsdXJlLiBOb3RlIHRoYXQgb24gZmFpbHVyZSBsaWJjX3BpZCBmaWVsZCBvZgorICogIHRoZSBkZXNjIHBhcmFtZXRlciBwYXNzZWQgdG8gdGhpcyByb3V0aW5lIGhhcyBiZWVuIHplcm9lZCBvdXQgYnkgdGhlCisgKiAgZW11bGF0b3IuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IG5vdGlmeV9xZW11X21hbGxvYyh2b2xhdGlsZSBNYWxsb2NEZXNjKiBkZXNjKSB7CisgICAgZGVzYy0+bGliY19waWQgPSBtYWxsb2NfcGlkOworICAgIGRlc2MtPmFsbG9jYXRvcl9waWQgPSBnZXRwaWQoKTsKKyAgICBkZXNjLT5hdl9jb3VudCA9IDA7CisgICAgbm90aWZ5X3FlbXUoVFJBQ0VfREVWX1JFR19NQUxMT0MsICh1aW50MzJfdClkZXNjKTsKKworICAgIC8qIEVtdWxhdG9yIHJlcG9ydHMgZmFpbHVyZSBieSB6ZXJvaW5nIGxpYmNfcGlkIGZpZWxkIG9mIHRoZQorICAgICAqIGRlc2NyaXB0b3IuICovCisgICAgcmV0dXJuIGRlc2MtPmxpYmNfcGlkICE9IDAgPyAwIDogLTE7Cit9CisKKy8qIEZpcmVzIHVwIFRSQUNFX0RFVl9SRUdfRlJFRV9QVFIgZXZlbnQgaW4gdGhlIGVtdWxhdG9yLgorICogUGFyYW06CisgKiAgcHRyIC0gUG9pbnRlciB0byB0aGUgbWVtb3J5IGJsb2NrIHRoYXQncyBiZWluZyBmcmVlZC4KKyAqIFJldHVybjoKKyAqICBaZXJvIG9uIHN1Y2Nlc3MsIG9yIC0xIG9uIGZhaWx1cmUuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IG5vdGlmeV9xZW11X2ZyZWUodm9pZCogcHRyX3RvX2ZyZWUpIHsKKyAgICB2b2xhdGlsZSBNYWxsb2NGcmVlIGZyZWVfZGVzYzsKKworICAgIGZyZWVfZGVzYy5wdHIgPSBwdHJfdG9fZnJlZTsKKyAgICBmcmVlX2Rlc2MubGliY19waWQgPSBtYWxsb2NfcGlkOworICAgIGZyZWVfZGVzYy5mcmVlX3BpZCA9IGdldHBpZCgpOworICAgIG5vdGlmeV9xZW11KFRSQUNFX0RFVl9SRUdfRlJFRV9QVFIsICh1aW50MzJfdCkmZnJlZV9kZXNjKTsKKworICAgIC8qIEVtdWxhdG9yIHJlcG9ydHMgZmFpbHVyZSBieSB6ZXJvaW5nIGxpYmNfcGlkIGZpZWxkIG9mIHRoZQorICAgICAqIGRlc2NyaXB0b3IuICovCisgICAgcmV0dXJuIGZyZWVfZGVzYy5saWJjX3BpZCAhPSAwID8gMCA6IC0xOworfQorCisvKiBGaXJlcyB1cCBUUkFDRV9ERVZfUkVHX1FVRVJZX01BTExPQyBldmVudCBpbiB0aGUgZW11bGF0b3IuCisgKiBQYXJhbToKKyAqICBwdHIgLSBQb2ludGVyIHRvIHJlcXVlc3QgYWxsb2NhdGlvbiBpbmZvcm1hdGlvbiBmb3IuCisgKiAgZGVzYyAtIFBvaW50ZXIgdG8gTWFsbG9jRGVzYyBpbnN0YW5jZSB0aGF0IHdpbGwgcmVjZWl2ZSBhbGxvY2F0aW9uCisgKiAgICAgIGluZm9ybWF0aW9uLgorICogIHJvdXRpbmUgLSBDb2RlIG9mIHRoZSBhbGxvY2F0aW9uIHJvdXRpbmUsIGluIGNvbnRleHQgb2Ygd2hpY2ggcXVlcnkgaXMgbWFkZToKKyAqICAgICAgMSAtIGZyZWUKKyAqICAgICAgMiAtIHJlYWxsb2MKKyAqIFJldHVybjoKKyAqICBaZXJvIG9uIHN1Y2Nlc3MsIG9yIC0xIG9uIGZhaWx1cmUuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHF1ZXJ5X3FlbXVfbWFsbG9jX2luZm8oY29uc3Qgdm9pZCogcHRyLCBNYWxsb2NEZXNjKiBkZXNjLCB1aW50MzJfdCByb3V0aW5lKSB7CisgICAgdm9sYXRpbGUgTWFsbG9jRGVzY1F1ZXJ5IHF1ZXJ5OworCisgICAgcXVlcnkucHRyID0gcHRyOworICAgIHF1ZXJ5LmxpYmNfcGlkID0gbWFsbG9jX3BpZDsKKyAgICBxdWVyeS5xdWVyeV9waWQgPSBnZXRwaWQoKTsKKyAgICBxdWVyeS5yb3V0aW5lID0gcm91dGluZTsKKyAgICBxdWVyeS5kZXNjID0gZGVzYzsKKyAgICBub3RpZnlfcWVtdShUUkFDRV9ERVZfUkVHX1FVRVJZX01BTExPQywgKHVpbnQzMl90KSZxdWVyeSk7CisKKyAgICAvKiBFbXVsYXRvciByZXBvcnRzIGZhaWx1cmUgYnkgemVyb2luZyBsaWJjX3BpZCBmaWVsZCBvZiB0aGUKKyAgICAgKiBkZXNjcmlwdG9yLiAqLworICAgIHJldHVybiBxdWVyeS5saWJjX3BpZCAhPSAwID8gMCA6IC0xOworfQorCisvKiBMb2dzIGEgbWVzc2FnZSB0byBlbXVsYXRvcidzIHN0ZG91dC4KKyAqIFBhcmFtOgorICogIHByaW8gLSBNZXNzYWdlIHByaW9yaXR5IChkZWJ1ZywgaW5mbywgb3IgZXJyb3IpCisgKiAgZm10ICsgcmVzdCAtIE1lc3NhZ2UgZm9ybWF0IGFuZCBwYXJhbWV0ZXJzLgorICovCitzdGF0aWMgdm9pZCBxZW11X2xvZyhpbnQgcHJpbywgY29uc3QgY2hhciogZm10LCAuLi4pIHsKKyAgICB2YV9saXN0IGFwOworICAgIGNoYXIgYnVmWzQwOTZdOworICAgIGNvbnN0IGNoYXIqIHByZWZpeDsKKworICAgIC8qIENob29zZSBtZXNzYWdlIHByZWZpeCBkZXBlbmRpbmcgb24gdGhlIHByaW9yaXR5IHZhbHVlLiAqLworICAgIHN3aXRjaCAocHJpbykgeworICAgICAgICBjYXNlIEFORFJPSURfTE9HX0VSUk9SOgorICAgICAgICAgICAgaWYgKCF0cmFjaW5nX2VuYWJsZWQoZXJyb3IpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcHJlZml4ID0gIkUiOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQU5EUk9JRF9MT0dfSU5GTzoKKyAgICAgICAgICAgIGlmICghdHJhY2luZ19lbmFibGVkKGluZm8pKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcHJlZml4ID0gIkkiOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQU5EUk9JRF9MT0dfREVCVUc6CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBpZiAoIXRyYWNpbmdfZW5hYmxlZChkZWJ1ZykpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBwcmVmaXggPSAiRCI7CisgICAgICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICB2YV9zdGFydChhcCwgZm10KTsKKyAgICB2c25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgZm10LCBhcCk7CisgICAgdmFfZW5kKGFwKTsKKyAgICBidWZbc2l6ZW9mKGJ1ZikgLSAxXSA9ICdcMCc7CisKKyAgICBUUigiJXMvbWVtY2hlY2s6ICVzXG4iLCBwcmVmaXgsIGJ1Zik7Cit9CisKKy8qIER1bXBzIGNvbnRlbnQgb2YgbWVtb3J5IGFsbG9jYXRpb24gZGVzY3JpcHRvciB0byBhIHN0cmluZy4KKyAqIFBhcmFtOgorICogIHN0ciAtIFN0cmluZyB0byBkdW1wIGRlc2NyaXB0b3IgdG8uCisgKiAgc3RyX2J1Zl9zaXplIC0gU2l6ZSBvZiBzdHJpbmcncyBidWZmZXIuCisgKiAgZGVzYyAtIERlc2NyaXB0b3IgdG8gZHVtcC4KKyAqLworc3RhdGljIHZvaWQgZHVtcF9tYWxsb2NfZGVzY3JpcHRvcihjaGFyKiBzdHIsIHNpemVfdCBzdHJfYnVmX3NpemUsIGNvbnN0IE1hbGxvY0Rlc2MqIGRlc2MpIHsKKyAgICBpZiAoc3RyX2J1Zl9zaXplKSB7CisgICAgICAgIHNucHJpbnRmKHN0ciwgc3RyX2J1Zl9zaXplLAorICAgICAgICAgICAgIk1EZXNjOiAlcDogJVggPC0+ICVYIFsldSArICV1ICsgJXVdIGJ5IHBpZD0lMDN1IGluIGxpYmNfcGlkPSUwM3UiLAorICAgICAgICAgICAgbWFsbG9jZGVzY191c2VyX3B0cihkZXNjKSwgKHVpbnQzMl90KWRlc2MtPnB0ciwKKyAgICAgICAgICAgICh1aW50MzJfdCltYWxsb2NkZXNjX2FsbG9jX2VuZChkZXNjKSwgZGVzYy0+cHJlZml4X3NpemUsCisgICAgICAgICAgICBkZXNjLT5yZXF1ZXN0ZWRfYnl0ZXMsIGRlc2MtPnN1ZmZpeF9zaXplLCBkZXNjLT5hbGxvY2F0b3JfcGlkLAorICAgICAgICAgICAgZGVzYy0+bGliY19waWQpOworICAgICAgICBzdHJbc3RyX2J1Zl9zaXplIC0gMV0gPSAnXDAnOworICAgIH0KK30KKworI2lmIFRFU1RfQUNDRVNTX1ZJT0xBVElPTlMKKy8qIENhdXNlcyBhbiBhY2Nlc3MgdmlvbGF0aW9uIG9uIGFsbG9jYXRpb24gZGVzY3JpcHRvciwgYW5kIHZlcmlmaWVzIHRoYXQKKyAqIHZpb2xhdGlvbiBoYXMgYmVlbiBkZXRlY3RlZCBieSBtZW1vcnkgY2hlY2tlciBpbiB0aGUgZW11bGF0b3IuCisgKi8KK3N0YXRpYyB2b2lkIHRlc3RfYWNjZXNzX3Zpb2xhdGlvbihjb25zdCBNYWxsb2NEZXNjKiBkZXNjKSB7CisgICAgTWFsbG9jRGVzYyBkZXNjX2NoazsKKyAgICBjaGFyIGNoOworICAgIHZvbGF0aWxlIGNoYXIqIHByZWZpeCA9ICh2b2xhdGlsZSBjaGFyKilkZXNjLT5wdHI7CisgICAgdm9sYXRpbGUgY2hhciogc3VmZml4ID0gKHZvbGF0aWxlIGNoYXIqKW1hbGxvY2Rlc2NfdXNlcl9wdHIoZGVzYykgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjLT5yZXF1ZXN0ZWRfYnl0ZXM7CisgICAgLyogV2UncmUgY2F1c2luZyBBViBieSByZWFkaW5nIGZyb20gdGhlIHByZWZpeCBhbmQgc3VmZml4IGFyZWFzIG9mIHRoZQorICAgICAqIGFsbG9jYXRlZCBibG9jay4gVGhpcyBzaG91bGQgcHJvZHVjZSB0d28gYWNjZXNzIHZpb2xhdGlvbnMsIHNvIHdoZW4gd2UKKyAgICAgKiBnZXQgYWxsb2NhdGlvbiBkZXNjcmlwdG9yIGZyb20gUUVNVSwgYXZfY291bnRlciBzaG91bGQgYmUgYmlnZ2VyIHRoYW4KKyAgICAgKiBhdl9jb3VudGVyIG9mIHRoZSBvcmlnaW5hbCBkZXNjcmlwdG9yIGJ5IDIuICovCisgICAgY2ggPSAqcHJlZml4OworICAgIGNoID0gKnN1ZmZpeDsKKyAgICBpZiAoIXF1ZXJ5X3FlbXVfbWFsbG9jX2luZm8obWFsbG9jZGVzY191c2VyX3B0cihkZXNjKSwgJmRlc2NfY2hrLCAyKSAmJgorICAgICAgICBkZXNjX2Noay5hdl9jb3VudCAhPSAoZGVzYy0+YXZfY291bnQgKyAyKSkgeworICAgICAgICBsb2dfbWRlc2MoZXJyb3IsICZkZXNjX2NoaywKKyAgICAgICAgICAgICAgICAgICI8bGliY19waWQ9JTAzdSwgcGlkPSUwM3U+OiBtYWxsb2M6IEFjY2VzcyB2aW9sYXRpb24gdGVzdCBmYWlsZWQ6XG4iCisgICAgICAgICAgICAgICAgICAiRXhwZWN0ZWQgdmlvbGF0aW9ucyBjb3VudCAldSBpcyBub3QgZXF1YWwgdG8gdGhlIGFjdHVhbGx5IHJlcG9ydGVkICV1IiwKKyAgICAgICAgICAgICAgICAgIG1hbGxvY19waWQsIGdldHBpZCgpLCBkZXNjLT5hdl9jb3VudCArIDIsCisgICAgICAgICAgICAgICAgICBkZXNjX2Noay5hdl9jb3VudCk7CisgICAgfQorfQorI2VuZGlmICAvLyBURVNUX0FDQ0VTU19WSU9MQVRJT05TCisKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyBBUEkgcm91dGluZXMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK2V4dGVybiAiQyIgdm9pZCogcWVtdV9pbnN0cnVtZW50ZWRfbWFsbG9jKHNpemVfdCBieXRlcyk7CitleHRlcm4gIkMiIHZvaWQgIHFlbXVfaW5zdHJ1bWVudGVkX2ZyZWUodm9pZCogbWVtKTsKK2V4dGVybiAiQyIgdm9pZCogcWVtdV9pbnN0cnVtZW50ZWRfY2FsbG9jKHNpemVfdCBuX2VsZW1lbnRzLCBzaXplX3QgZWxlbV9zaXplKTsKK2V4dGVybiAiQyIgdm9pZCogcWVtdV9pbnN0cnVtZW50ZWRfcmVhbGxvYyh2b2lkKiBtZW0sIHNpemVfdCBieXRlcyk7CitleHRlcm4gIkMiIHZvaWQqIHFlbXVfaW5zdHJ1bWVudGVkX21lbWFsaWduKHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBieXRlcyk7CitleHRlcm4gIkMiIHNpemVfdCBxZW11X2luc3RydW1lbnRlZF9tYWxsb2NfdXNhYmxlX3NpemUoY29uc3Qgdm9pZCogbWVtKTsKKworLyogSW5pdGlhbGl6ZXMgbWFsbG9jIGRlYnVnZ2luZyBpbnN0cnVtZW50YXRpb24gZm9yIHRoZSBlbXVsYXRvci4KKyAqIFRoaXMgcm91dGluZSBpcyBjYWxsZWQgZnJvbSBtYWxsb2NfaW5pdF9pbXBsIHJvdXRpbmUgaW1wbGVtZW50ZWQgaW4KKyAqIGJpb25pYy9saWJjL2Jpb25pYy9tYWxsb2NfZGVidWdfY29tbW9uLmMgd2hlbiBtYWxsb2MgZGVidWdnaW5nIGdldHMKKyAqIGluaXRpYWxpemVkIGZvciBhIHByb2Nlc3MuIFRoZSB3YXkgbWFsbG9jIGRlYnVnZ2luZyBpbXBsZW1lbnRhdGlvbiBpcworICogZG9uZSwgaXQgaXMgZ3VhcmFudGVlZCB0aGF0IHRoaXMgcm91dGluZSB3aWxsIGJlIGNhbGxlZCBqdXN0IG9uY2UgcGVyCisgKiBwcm9jZXNzLgorICogUmV0dXJuOgorICogIDAgb24gc3VjY2Vzcywgb3IgLTEgb24gZmFpbHVyZS4KKyovCitleHRlcm4gIkMiIGludCBtYWxsb2NfZGVidWdfaW5pdGlhbGl6ZSgpIHsKKyAgICAvKiBXZSB3aWxsIGJlIHVzaW5nIGVtdWxhdG9yJ3MgbWFnaWMgcGFnZSB0byByZXBvcnQgbWVtb3J5IGFsbG9jYXRpb24KKyAgICAgKiBhY3Rpdml0aWVzLiBJbiBlc3NlbmNlLCB3aGF0IG1hZ2ljIHBhZ2UgZG9lcywgaXQgdHJhbnNsYXRlcyB3cml0ZXMgdG8KKyAgICAgKiB0aGUgbWVtb3J5IG1hcHBlZCBzcGFjZXMgaW50byB3cml0ZXMgdG8gYW4gSS9PIHBvcnQgdGhhdCBlbXVsYXRvcgorICAgICAqICJsaXN0ZW5zIHRvIiBvbiB0aGUgb3RoZXIgZW5kLiBOb3RlIHRoYXQgdW50aWwgd2Ugb3BlbiBhbmQgbWFwIHRoYXQKKyAgICAgKiBkZXZpY2UsIGxvZ2dpbmcgdG8gZW11bGF0b3IncyBzdGRvdXQgd2lsbCBub3QgYmUgYXZhaWxhYmxlLiAqLworICAgIGludCBmZCA9IG9wZW4oIi9kZXYvcWVtdV90cmFjZSIsIE9fUkRXUik7CisgICAgaWYgKGZkIDwgMCkgeworICAgICAgICBlcnJvcl9sb2coIlVuYWJsZSB0byBvcGVuIC9kZXYvcWVtdV90cmFjZSIpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcXRyYWNlID0gbW1hcChOVUxMLCBQQUdFU0laRSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwgTUFQX1NIQVJFRCwgZmQsIDApOworICAgICAgICBjbG9zZShmZCk7CisKKyAgICAgICAgaWYgKHF0cmFjZSA9PSBNQVBfRkFJTEVEKSB7CisgICAgICAgICAgICBxdHJhY2UgPSBOVUxMOworICAgICAgICAgICAgZXJyb3JfbG9nKCJVbmFibGUgdG8gbW1hcCAvZGV2L3FlbXVfdHJhY2UiKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qIENhY2hlIHBpZCBvZiB0aGUgcHJvY2VzcyB0aGlzIGxpYnJhcnkgaGFzIGJlZW4gaW5pdGlhbGl6ZWQgZm9yLiAqLworICAgIG1hbGxvY19waWQgPSBnZXRwaWQoKTsKKworICAgIHJldHVybiAwOworfQorCisvKiBDb21wbGV0ZXMgbWFsbG9jIGRlYnVnZ2luZyBpbnN0cnVtZW50YXRpb24gZm9yIHRoZSBlbXVsYXRvci4KKyAqIE5vdGUgdGhhdCB0aGlzIHJvdXRpbmUgaXMgY2FsbGVkIGFmdGVyIHN1Y2Nlc3NmdWwgcmV0dXJuIGZyb20KKyAqIG1hbGxvY19kZWJ1Z19pbml0aWFsaXplLCB3aGljaCBtZWFucyB0aGF0IGNvbm5lY3Rpb24gdG8gdGhlIGVtdWxhdG9yIHZpYQorICogIm1hZ2ljIHBhZ2UiIGhhcyBiZWVuIGVzdGFibGlzaGVkLgorICogUGFyYW06CisgKiAgYWxpZ25tZW50IC0gQWxpZ25tZW50IHJlcXVpcmVtZW50IHNldCBmb3IgbWVtaXJ5IGFsbG9jYXRpb25zLgorICogIG1lbWNoZWNrX3BhcmFtIC0gRW11bGF0b3IncyAtbWVtY2hlY2sgb3B0aW9uIHBhcmFtZXRlcnMuIFRoaXMgc3RyaW5nCisgKiAgICAgIGNvbnRhaW5zIGFiYnJldmlhdGlvbiBmb3IgZ3Vlc3QgZXZlbnRzIHRoYXQgYXJlIGVuYWJsZWQgZm9yIHRyYWNpbmcuCisgKiBSZXR1cm46CisgKiAgMCBvbiBzdWNjZXNzLCBvciAtMSBvbiBmYWlsdXJlLgorKi8KK2V4dGVybiAiQyIgaW50IG1lbWNoZWNrX2luaXRpYWxpemUoaW50IGFsaWdubWVudCwgY29uc3QgY2hhciogbWVtY2hlY2tfcGFyYW0pIHsKKyAgICBtYWxsb2NfYWxpZ25tZW50ID0gYWxpZ25tZW50OworCisgICAgLyogUGFyc2UgLW1lbWNoZWNrIHBhcmFtZXRlciBmb3IgdGhlIGd1ZXN0IHRyYWNpbmcgZmxhZ3MuICovCisgICAgd2hpbGUgKCptZW1jaGVja19wYXJhbSAhPSAnXDAnKSB7CisgICAgICAgIHN3aXRjaCAoKm1lbWNoZWNrX3BhcmFtKSB7CisgICAgICAgICAgICBjYXNlICdhJzoKKyAgICAgICAgICAgICAgICAvLyBFbmFibGUgYWxsIG1lc3NhZ2VzIGZyb20gdGhlIGd1ZXN0LgorICAgICAgICAgICAgICAgIHRyYWNpbmdfZmxhZ3MgfD0gQUxMX1RSQUNJTkdfRU5BQkxFRDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgJ2QnOgorICAgICAgICAgICAgICAgIC8vIEVuYWJsZSBkZWJ1ZyBtZXNzYWdlcyBmcm9tIHRoZSBndWVzdC4KKyAgICAgICAgICAgICAgICB0cmFjaW5nX2ZsYWdzIHw9IERFQlVHX1RSQUNJTkdfRU5BQkxFRDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgJ2UnOgorICAgICAgICAgICAgICAgIC8vIEVuYWJsZSBlcnJvciBtZXNzYWdlcyBmcm9tIHRoZSBndWVzdC4KKyAgICAgICAgICAgICAgICB0cmFjaW5nX2ZsYWdzIHw9IEVSUk9SX1RSQUNJTkdfRU5BQkxFRDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgJ2knOgorICAgICAgICAgICAgICAgIC8vIEVuYWJsZSBpbmZvIG1lc3NhZ2VzIGZyb20gdGhlIGd1ZXN0LgorICAgICAgICAgICAgICAgIHRyYWNpbmdfZmxhZ3MgfD0gSU5GT19UUkFDSU5HX0VOQUJMRUQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlmICh0cmFjaW5nX2ZsYWdzID09IEFMTF9UUkFDSU5HX0VOQUJMRUQpIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIG1lbWNoZWNrX3BhcmFtKys7CisgICAgfQorCisgICAgbm90aWZ5X3FlbXVfbGliY19pbml0aWFsaXplZChtYWxsb2NfcGlkKTsKKworICAgIHFlbXVfZGVidWdfbG9nKCJJbnN0cnVtZW50ZWQgZm9yIHBpZD0lMDN1OiBtYWxsb2M9JXAsIGZyZWU9JXAsIGNhbGxvYz0lcCwgcmVhbGxvYz0lcCwgbWVtYWxpZ249JXAiLAorICAgICAgICAgICAgICBtYWxsb2NfcGlkLCBxZW11X2luc3RydW1lbnRlZF9tYWxsb2MsIHFlbXVfaW5zdHJ1bWVudGVkX2ZyZWUsCisgICAgICAgICAgICAgIHFlbXVfaW5zdHJ1bWVudGVkX2NhbGxvYywgcWVtdV9pbnN0cnVtZW50ZWRfcmVhbGxvYywKKyAgICAgICAgICAgICAgcWVtdV9pbnN0cnVtZW50ZWRfbWVtYWxpZ24pOworCisgICAgcmV0dXJuIDA7Cit9CisKKy8qIFRoaXMgcm91dGluZSBzZXJ2ZXMgYXMgZW50cnkgcG9pbnQgZm9yICdtYWxsb2MnLgorICogUHJpbWFyeSByZXNwb25zaWJpbGl0eSBvZiB0aGlzIHJvdXRpbmUgaXMgdG8gYWxsb2NhdGUgcmVxdWVzdGVkIG51bWJlciBvZgorICogYnl0ZXMgKHBsdXMgcHJlZml4LCBhbmQgc3VmZml4IGd1YXJkcyksIGFuZCByZXBvcnQgYWxsb2NhdGlvbiB0byB0aGUKKyAqIGVtdWxhdG9yLgorICovCitleHRlcm4gIkMiIHZvaWQqIHFlbXVfaW5zdHJ1bWVudGVkX21hbGxvYyhzaXplX3QgYnl0ZXMpIHsKKyAgICBNYWxsb2NEZXNjIGRlc2M7CisKKyAgICAvKiBJbml0aWFsaXplIGJsb2NrIGRlc2NyaXB0b3IgYW5kIGFsbG9jYXRlIG1lbW9yeS4gTm90ZSB0aGF0IGRsbWFsbG9jCisgICAgICogcmV0dXJucyBhIHZhbGlkIHBvaW50ZXIgb24gemVybyBhbGxvY2F0aW9uLiBMZXRzIG1pbWljIHRoaXMgYmVoYXZpb3IuICovCisgICAgZGVzYy5wcmVmaXhfc2l6ZSA9IERFRkFVTFRfUFJFRklYX1NJWkU7CisgICAgZGVzYy5yZXF1ZXN0ZWRfYnl0ZXMgPSBieXRlczsKKyAgICBkZXNjLnN1ZmZpeF9zaXplID0gREVGQVVMVF9TVUZGSVhfU0laRTsKKyAgICBkZXNjLnB0ciA9IGRsbWFsbG9jKG1hbGxvY2Rlc2NfYWxsb2Nfc2l6ZSgmZGVzYykpOworICAgIGlmIChkZXNjLnB0ciA9PSBOVUxMKSB7CisgICAgICAgIHFlbXVfZXJyb3JfbG9nKCI8bGliY19waWQ9JTAzdSwgcGlkPSUwM3U+IG1hbGxvYygldSk6IGRsbWFsbG9jKCV1KSBmYWlsZWQuIiwKKyAgICAgICAgICAgICAgICAgIG1hbGxvY19waWQsIGdldHBpZCgpLCBieXRlcywgbWFsbG9jZGVzY19hbGxvY19zaXplKCZkZXNjKSk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIC8vIEZpcmUgdXAgZXZlbnQgaW4gdGhlIGVtdWxhdG9yLgorICAgIGlmIChub3RpZnlfcWVtdV9tYWxsb2MoJmRlc2MpKSB7CisgICAgICAgIGxvZ19tZGVzYyhlcnJvciwgJmRlc2MsICI8bGliY19waWQ9JTAzdSwgcGlkPSUwM3U+OiBtYWxsb2M6IG5vdGlmeV9tYWxsb2MgZmFpbGVkIGZvciAiLAorICAgICAgICAgICAgICAgICAgbWFsbG9jX3BpZCwgZ2V0cGlkKCkpOworICAgICAgICBkbGZyZWUoZGVzYy5wdHIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9IGVsc2UgeworI2lmIFRFU1RfQUNDRVNTX1ZJT0xBVElPTlMKKyAgICAgICAgdGVzdF9hY2Nlc3NfdmlvbGF0aW9uKCZkZXNjKTsKKyNlbmRpZiAgLy8gVEVTVF9BQ0NFU1NfVklPTEFUSU9OUworICAgICAgICBsb2dfbWRlc2MoaW5mbywgJmRlc2MsICIrKysgPGxpYmNfcGlkPSUwM3UsIHBpZD0lMDN1PiBtYWxsb2MoJXUpIC0+ICIsCisgICAgICAgICAgICAgICAgICBtYWxsb2NfcGlkLCBnZXRwaWQoKSwgYnl0ZXMpOworICAgICAgICByZXR1cm4gbWFsbG9jZGVzY191c2VyX3B0cigmZGVzYyk7CisgICAgfQorfQorCisvKiBUaGlzIHJvdXRpbmUgc2VydmVzIGFzIGVudHJ5IHBvaW50IGZvciAnbWFsbG9jJy4KKyAqIFByaW1hcnkgcmVzcG9uc2liaWxpdHkgb2YgdGhpcyByb3V0aW5lIGlzIHRvIGZyZWUgcmVxdWVzdGVkIG1lbW9yeSwgYW5kCisgKiByZXBvcnQgZnJlZSBibG9jayB0byB0aGUgZW11bGF0b3IuCisgKi8KK2V4dGVybiAiQyIgdm9pZCBxZW11X2luc3RydW1lbnRlZF9mcmVlKHZvaWQqIG1lbSkgeworICAgIE1hbGxvY0Rlc2MgZGVzYzsKKworICAgIGlmIChtZW0gPT0gTlVMTCkgeworICAgICAgICAvLyBKdXN0IGxldCBnbyBOVUxMIGZyZWUKKyAgICAgICAgZGxmcmVlKG1lbSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBRdWVyeSBlbXVsYXRvciBmb3IgdGhlIGZyZWVpbmcgYmxvY2sgaW5mb3JtYXRpb24uCisgICAgaWYgKHF1ZXJ5X3FlbXVfbWFsbG9jX2luZm8obWVtLCAmZGVzYywgMSkpIHsKKyAgICAgICAgZXJyb3JfbG9nKCI8bGliY19waWQ9JTAzdSwgcGlkPSUwM3U+OiBmcmVlKCVwKSBxdWVyeV9pbmZvIGZhaWxlZC4iLAorICAgICAgICAgICAgICAgICAgbWFsbG9jX3BpZCwgZ2V0cGlkKCksIG1lbSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyNpZiBURVNUX0FDQ0VTU19WSU9MQVRJT05TCisgICAgdGVzdF9hY2Nlc3NfdmlvbGF0aW9uKCZkZXNjKTsKKyNlbmRpZiAgLy8gVEVTVF9BQ0NFU1NfVklPTEFUSU9OUworCisgICAgLyogTWFrZSBzdXJlIHRoYXQgcG9pbnRlciB0aGF0J3MgYmVpbmcgZnJlZWQgbWF0Y2hlcyB3aGF0IHdlIGV4cGVjdAorICAgICAqIGZvciB0aGlzIG1lbW9yeSBibG9jay4gTm90ZSB0aGF0IHRoaXMgdmlvbGF0aW9uIHNob3VsZCBiZSBhbHJlYWR5CisgICAgICogY2F1Z2h0IGluIHRoZSBlbXVsYXRvci4gKi8KKyAgICBpZiAobWVtICE9IG1hbGxvY2Rlc2NfdXNlcl9wdHIoJmRlc2MpKSB7CisgICAgICAgIGxvZ19tZGVzYyhlcnJvciwgJmRlc2MsICI8bGliY19waWQ9JTAzdSwgcGlkPSUwM3U+OiBmcmVlKCVwKSBpcyBpbnZhbGlkIGZvciAiLAorICAgICAgICAgICAgICAgICAgbWFsbG9jX3BpZCwgZ2V0cGlkKCksIG1lbSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBGaXJlIHVwIGV2ZW50IGluIHRoZSBlbXVsYXRvciBhbmQgZnJlZSBibG9jayB0aGF0IHdhcyBhY3R1YWxseSBhbGxvY2F0ZWQuCisgICAgaWYgKG5vdGlmeV9xZW11X2ZyZWUobWVtKSkgeworICAgICAgICBsb2dfbWRlc2MoZXJyb3IsICZkZXNjLCAiPGxpYmNfcGlkPSUwM3UsIHBpZD0lMDN1PjogZnJlZSglcCkgbm90aWZ5X2ZyZWUgZmFpbGVkIGZvciAiLAorICAgICAgICAgICAgICAgICAgbWFsbG9jX3BpZCwgZ2V0cGlkKCksIG1lbSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbG9nX21kZXNjKGluZm8sICZkZXNjLCAiLS0tIDxsaWJjX3BpZD0lMDN1LCBwaWQ9JTAzdT4gZnJlZSglcCkgLT4gIiwKKyAgICAgICAgICAgICAgICAgIG1hbGxvY19waWQsIGdldHBpZCgpLCBtZW0pOworICAgICAgICBkbGZyZWUoZGVzYy5wdHIpOworICAgIH0KK30KKworLyogVGhpcyByb3V0aW5lIHNlcnZlcyBhcyBlbnRyeSBwb2ludCBmb3IgJ2NhbGxvYycuCisgKiBUaGlzIHJvdXRpbmUgYmVoYXZlcyBzaW1pbGFybHkgdG8gcWVtdV9pbnN0cnVtZW50ZWRfbWFsbG9jLgorICovCitleHRlcm4gIkMiIHZvaWQqIHFlbXVfaW5zdHJ1bWVudGVkX2NhbGxvYyhzaXplX3Qgbl9lbGVtZW50cywgc2l6ZV90IGVsZW1fc2l6ZSkgeworICAgIGlmIChuX2VsZW1lbnRzID09IDAgfHwgZWxlbV9zaXplID09IDApIHsKKyAgICAgICAgLy8gSnVzdCBsZXQgZ28gemVybyBieXRlcyBhbGxvY2F0aW9uLgorICAgICAgICBxZW11X2luZm9fbG9nKCI6OjogPGxpYmNfcGlkPSUwM3UsIHBpZD0lMDN1PjogWmVybyBjYWxsb2MgcmVkaXIgdG8gbWFsbG9jIiwKKyAgICAgICAgICAgICAgICAgbWFsbG9jX3BpZCwgZ2V0cGlkKCkpOworICAgICAgICByZXR1cm4gcWVtdV9pbnN0cnVtZW50ZWRfbWFsbG9jKDApOworICAgIH0KKworICAgIC8qIEZhaWwgb24gb3ZlcmZsb3cgLSBqdXN0IHRvIGJlIHNhZmUgZXZlbiB0aG91Z2ggdGhpcyBjb2RlIHJ1bnMgb25seQorICAgICAqIHdpdGhpbiB0aGUgZGVidWdnaW5nIEMgbGlicmFyeSwgbm90IHRoZSBwcm9kdWN0aW9uIG9uZSAqLworICAgIGlmIChuX2VsZW1lbnRzICYmIE1BWF9TSVpFX1QgLyBuX2VsZW1lbnRzIDwgZWxlbV9zaXplKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIE1hbGxvY0Rlc2MgZGVzYzsKKworICAgIC8qIENhbGN1bGF0aW5nIHByZWZpeCBzaXplLiBUaGUgdHJpY2sgaGVyZSBpcyB0byBtYWtlIHN1cmUgdGhhdAorICAgICAqIGZpcnN0IGVsZW1lbnQgKHJldHVybmVkIHRvIHRoZSBjYWxsZXIpIGlzIHByb3Blcmx5IGFsaWduZWQuICovCisgICAgaWYgKERFRkFVTFRfUFJFRklYX1NJWkUgPj0gZWxlbV9zaXplKSB7CisgICAgICAgIC8qIElmIGRlZmF1bHQgYWxpZ25tZW50IGlzIGJpZ2dlciB0aGFuIGVsZW1lbnQgc2l6ZSwgd2Ugd2lsbAorICAgICAgICAgKiBzZXQgb3VyIHByZWZpeCBzaXplIHRvIHRoZSBkZWZhdWx0IGFsaWdubWVudCBzaXplLiAqLworICAgICAgICBkZXNjLnByZWZpeF9zaXplID0gREVGQVVMVF9QUkVGSVhfU0laRTsKKyAgICAgICAgLyogRm9yIHRoZSBzdWZmaXggd2Ugd2lsbCB1c2Ugd2hhdGV2ZXIgYnl0ZXMgcmVtYWluIGZyb20gdGhlIHByZWZpeAorICAgICAgICAgKiBhbGxvY2F0aW9uIHNpemUsIGFsaWduZWQgdG8gdGhlIHNpemUgb2YgYW4gZWxlbWVudCwgcGx1cyB0aGUgdXN1YWwKKyAgICAgICAgICogZGVmYXVsdCBzdWZmaXggc2l6ZS4gKi8KKyAgICAgICAgZGVzYy5zdWZmaXhfc2l6ZSA9IChERUZBVUxUX1BSRUZJWF9TSVpFICUgZWxlbV9zaXplKSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICBERUZBVUxUX1NVRkZJWF9TSVpFOworICAgIH0gZWxzZSB7CisgICAgICAgIC8qIE1ha2Ugc3VyZSB0aGF0IHByZWZpeCwgYW5kIHN1ZmZpeCBzaXplcyBpcyBhdCBsZWFzdCBlbGVtX3NpemUsCisgICAgICAgICAqIGFuZCBmaXJzdCBlbGVtZW50IHJldHVybmVkIHRvIHRoZSBjYWxsZXIgaXMgcHJvcGVybHkgYWxpZ25lZC4gKi8KKyAgICAgICAgZGVzYy5wcmVmaXhfc2l6ZSA9IGVsZW1fc2l6ZSArIERFRkFVTFRfUFJFRklYX1NJWkUgLSAxOworICAgICAgICBkZXNjLnByZWZpeF9zaXplICY9IH4obWFsbG9jX2FsaWdubWVudCAtIDEpOworICAgICAgICBkZXNjLnN1ZmZpeF9zaXplID0gREVGQVVMVF9TVUZGSVhfU0laRTsKKyAgICB9CisgICAgZGVzYy5yZXF1ZXN0ZWRfYnl0ZXMgPSBuX2VsZW1lbnRzICogZWxlbV9zaXplOworICAgIHNpemVfdCB0b3RhbF9zaXplID0gZGVzYy5yZXF1ZXN0ZWRfYnl0ZXMgKyBkZXNjLnByZWZpeF9zaXplICsgZGVzYy5zdWZmaXhfc2l6ZTsKKyAgICBzaXplX3QgdG90YWxfZWxlbWVudHMgPSB0b3RhbF9zaXplIC8gZWxlbV9zaXplOworICAgIHRvdGFsX3NpemUgJT0gZWxlbV9zaXplOworICAgIGlmICh0b3RhbF9zaXplICE9IDApIHsKKyAgICAgICAgLy8gQWRkIGV4dHJhIHRvIHRoZSBzdWZmaXggYXJlYS4KKyAgICAgICAgdG90YWxfZWxlbWVudHMrKzsKKyAgICAgICAgZGVzYy5zdWZmaXhfc2l6ZSArPSAoZWxlbV9zaXplIC0gdG90YWxfc2l6ZSk7CisgICAgfQorICAgIGRlc2MucHRyID0gZGxjYWxsb2ModG90YWxfZWxlbWVudHMsIGVsZW1fc2l6ZSk7CisgICAgaWYgKGRlc2MucHRyID09IE5VTEwpIHsKKyAgICAgICAgZXJyb3JfbG9nKCI8bGliY19waWQ9JTAzdSwgcGlkPSUwM3U+IGNhbGxvYzogZGxjYWxsb2MoJXUoJXUpLCAldSkgKHByeD0ldSwgc2Z4PSV1KSBmYWlsZWQuIiwKKyAgICAgICAgICAgICAgICAgICBtYWxsb2NfcGlkLCBnZXRwaWQoKSwgbl9lbGVtZW50cywgdG90YWxfZWxlbWVudHMsIGVsZW1fc2l6ZSwKKyAgICAgICAgICAgICAgICAgICBkZXNjLnByZWZpeF9zaXplLCBkZXNjLnN1ZmZpeF9zaXplKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgaWYgKG5vdGlmeV9xZW11X21hbGxvYygmZGVzYykpIHsKKyAgICAgICAgbG9nX21kZXNjKGVycm9yLCAmZGVzYywgIjxsaWJjX3BpZD0lMDN1LCBwaWQ9JTAzdT46IGNhbGxvYygldSgldSksICV1KTogbm90aWZ5X21hbGxvYyBmYWlsZWQgZm9yICIsCisgICAgICAgICAgICAgICAgICBtYWxsb2NfcGlkLCBnZXRwaWQoKSwgbl9lbGVtZW50cywgdG90YWxfZWxlbWVudHMsIGVsZW1fc2l6ZSk7CisgICAgICAgIGRsZnJlZShkZXNjLnB0cik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0gZWxzZSB7CisjaWYgVEVTVF9BQ0NFU1NfVklPTEFUSU9OUworICAgICAgICB0ZXN0X2FjY2Vzc192aW9sYXRpb24oJmRlc2MpOworI2VuZGlmICAvLyBURVNUX0FDQ0VTU19WSU9MQVRJT05TCisgICAgICAgIGxvZ19tZGVzYyhpbmZvLCAmZGVzYywgIiMjIyA8bGliY19waWQ9JTAzdSwgcGlkPSUwM3U+IGNhbGxvYygldSgldSksICV1KSAtPiAiLAorICAgICAgICAgICAgICAgICAgbWFsbG9jX3BpZCwgZ2V0cGlkKCksIG5fZWxlbWVudHMsIHRvdGFsX2VsZW1lbnRzLCBlbGVtX3NpemUpOworICAgICAgICByZXR1cm4gbWFsbG9jZGVzY191c2VyX3B0cigmZGVzYyk7CisgICAgfQorfQorCisvKiBUaGlzIHJvdXRpbmUgc2VydmVzIGFzIGVudHJ5IHBvaW50IGZvciAncmVhbGxvYycuCisgKiBUaGlzIHJvdXRpbmUgYmVoYXZlcyBzaW1pbGFybHkgdG8gcWVtdV9pbnN0cnVtZW50ZWRfZnJlZSArCisgKiBxZW11X2luc3RydW1lbnRlZF9tYWxsb2MuIE5vdGUgdGhhdCB0aGlzIG1vZGlmaWVzIGJlaGF2aW9yIG9mICJzaHJpbmtpbmciIGFuCisgKiBhbGxvY2F0aW9uLCBidXQgb3ZlcmFsbCBpdCBkb2Vzbid0IHNlZW0gdG8gbWF0dGVyLCBhcyBjYWxsZXIgb2YgcmVhbGxvYworICogc2hvdWxkIG5vdCBleHBlY3QgdGhhdCBwb2ludGVyIHJldHVybmVkIGFmdGVyIHNocmlua2luZyB3aWxsIHJlbWFpbiB0aGUgc2FtZS4KKyAqLworZXh0ZXJuICJDIiB2b2lkKiBxZW11X2luc3RydW1lbnRlZF9yZWFsbG9jKHZvaWQqIG1lbSwgc2l6ZV90IGJ5dGVzKSB7CisgICAgTWFsbG9jRGVzYyBuZXdfZGVzYzsKKyAgICBNYWxsb2NEZXNjIGN1cl9kZXNjOworICAgIHNpemVfdCB0b19jb3B5OworICAgIHZvaWQqIHJldDsKKworICAgIGlmIChtZW0gPT0gTlVMTCkgeworICAgICAgICAvLyBOb3RoaW5nIHRvIHJlYWxsb2MuIGp1c3QgZG8gcmVndWxhciBtYWxsb2MuCisgICAgICAgIHFlbXVfaW5mb19sb2coIjo6OiA8bGliY19waWQ9JTAzdSwgcGlkPSUwM3U+OiByZWFsbG9jKCVwLCAldSkgcmVkaXIgdG8gbWFsbG9jIiwKKyAgICAgICAgICAgICAgICAgbWFsbG9jX3BpZCwgZ2V0cGlkKCksIG1lbSwgYnl0ZXMpOworICAgICAgICByZXR1cm4gcWVtdV9pbnN0cnVtZW50ZWRfbWFsbG9jKGJ5dGVzKTsKKyAgICB9CisKKyAgICBpZiAoYnl0ZXMgPT0gMCkgeworICAgICAgICAvLyBUaGlzIGlzIGEgImZyZWUiIGNvbmRpdGlvbi4KKyAgICAgICAgcWVtdV9pbmZvX2xvZygiOjo6IDxsaWJjX3BpZD0lMDN1LCBwaWQ9JTAzdT46IHJlYWxsb2MoJXAsICV1KSByZWRpciB0byBmcmVlIGFuZCBtYWxsb2MiLAorICAgICAgICAgICAgICAgICBtYWxsb2NfcGlkLCBnZXRwaWQoKSwgbWVtLCBieXRlcyk7CisgICAgICAgIHFlbXVfaW5zdHJ1bWVudGVkX2ZyZWUobWVtKTsKKworICAgICAgICAvLyBUaGlzIGlzIHdoYXQgZGxyZWFsbG9jIGRvZXMgZm9yIGEgImZyZWUiIHJlYWxsb2MuCisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIC8vIFF1ZXJ5IGVtdWxhdG9yIGZvciB0aGUgcmVhbGxvY2F0aW5nIGJsb2NrIGluZm9ybWF0aW9uLgorICAgIGlmIChxdWVyeV9xZW11X21hbGxvY19pbmZvKG1lbSwgJmN1cl9kZXNjLCAyKSkgeworICAgICAgICAvLyBOb3RlIHRoYXQgdGhpcyB2aW9sYXRpb24gc2hvdWxkIGJlIGFscmVhZHkgY2F1Z2h0IGluIHRoZSBlbXVsYXRvci4KKyAgICAgICAgZXJyb3JfbG9nKCI8bGliY19waWQ9JTAzdSwgcGlkPSUwM3U+OiByZWFsbG9jKCVwLCAldSkgcXVlcnlfaW5mbyBmYWlsZWQuIiwKKyAgICAgICAgICAgICAgICAgIG1hbGxvY19waWQsIGdldHBpZCgpLCBtZW0sIGJ5dGVzKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisjaWYgVEVTVF9BQ0NFU1NfVklPTEFUSU9OUworICAgIHRlc3RfYWNjZXNzX3Zpb2xhdGlvbigmY3VyX2Rlc2MpOworI2VuZGlmICAvLyBURVNUX0FDQ0VTU19WSU9MQVRJT05TCisKKyAgICAvKiBNYWtlIHN1cmUgdGhhdCByZWFsbG9jYXRpbmcgcG9pbnRlciB2YWx1ZSBpcyB3aGF0IHdlIHdvdWxkIGV4cGVjdAorICAgICAqIGZvciB0aGlzIG1lbW9yeSBibG9jay4gTm90ZSB0aGF0IHRoaXMgdmlvbGF0aW9uIHNob3VsZCBiZSBhbHJlYWR5IGNhdWdodAorICAgICAqIGluIHRoZSBlbXVsYXRvci4qLworICAgIGlmIChtZW0gIT0gbWFsbG9jZGVzY191c2VyX3B0cigmY3VyX2Rlc2MpKSB7CisgICAgICAgIGxvZ19tZGVzYyhlcnJvciwgJmN1cl9kZXNjLCAiPGxpYmNfcGlkPSUwM3UsIHBpZD0lMDN1PjogcmVhbGxvYyglcCwgJXUpIGlzIGludmFsaWQgZm9yICIsCisgICAgICAgICAgICAgICAgICBtYWxsb2NfcGlkLCBnZXRwaWQoKSwgbWVtLCBieXRlcyk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIC8qIFRPRE86IFdlJ3JlIGEgYml0IGluZWZmaWNpZW50IGhlcmUsIGFsd2F5cyBhbGxvY2F0aW5nIG5ldyBibG9jayBmcm9tCisgICAgICogdGhlIGhlYXAuIElmIHRoaXMgcmVhbGxvYyBzaHJpbmtzIGN1cnJlbnQgYnVmZmVyLCB3ZSBjYW4ganVzdCBkbyB0aGUKKyAgICAgKiBzaHJpbmtpbmcgImluIHBsYWNlIiwgYWRqdXN0aW5nIHN1ZmZpeF9zaXplIGluIHRoZSBhbGxvY2F0aW9uIGRlc2NyaXB0b3IKKyAgICAgKiBmb3IgdGhpcyBibG9jayB0aGF0IGlzIHN0b3JlZCBpbiB0aGUgZW11bGF0b3IuICovCisKKyAgICAvLyBJbml0aWFsaXplIGRlc2NyaXB0b3IgZm9yIHRoZSBuZXcgYmxvY2suCisgICAgbmV3X2Rlc2MucHJlZml4X3NpemUgPSBERUZBVUxUX1BSRUZJWF9TSVpFOworICAgIG5ld19kZXNjLnJlcXVlc3RlZF9ieXRlcyA9IGJ5dGVzOworICAgIG5ld19kZXNjLnN1ZmZpeF9zaXplID0gREVGQVVMVF9TVUZGSVhfU0laRTsKKyAgICBuZXdfZGVzYy5wdHIgPSBkbG1hbGxvYyhtYWxsb2NkZXNjX2FsbG9jX3NpemUoJm5ld19kZXNjKSk7CisgICAgaWYgKG5ld19kZXNjLnB0ciA9PSBOVUxMKSB7CisgICAgICAgIGxvZ19tZGVzYyhlcnJvciwgJmN1cl9kZXNjLCAiPGxpYmNfcGlkPSUwM3UsIHBpZD0lMDN1PjogcmVhbGxvYyglcCwgJXUpOiBkbG1hbGxvYygldSkgZmFpbGVkIG9uICIsCisgICAgICAgICAgICAgICAgICBtYWxsb2NfcGlkLCBnZXRwaWQoKSwgbWVtLCBieXRlcywKKyAgICAgICAgICAgICAgICAgIG1hbGxvY2Rlc2NfYWxsb2Nfc2l6ZSgmbmV3X2Rlc2MpKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHJldCA9IG1hbGxvY2Rlc2NfdXNlcl9wdHIoJm5ld19kZXNjKTsKKworICAgIC8vIENvcHkgdXNlciBkYXRhIGZyb20gb2xkIGJsb2NrIHRvIHRoZSBuZXcgb25lLgorICAgIHRvX2NvcHkgPSBieXRlcyA8IGN1cl9kZXNjLnJlcXVlc3RlZF9ieXRlcyA/IGJ5dGVzIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJfZGVzYy5yZXF1ZXN0ZWRfYnl0ZXM7CisgICAgaWYgKHRvX2NvcHkgIT0gMCkgeworICAgICAgICBtZW1jcHkocmV0LCBtYWxsb2NkZXNjX3VzZXJfcHRyKCZjdXJfZGVzYyksIHRvX2NvcHkpOworICAgIH0KKworICAgIC8vIFJlZ2lzdGVyIG5ldyBibG9jayB3aXRoIGVtdWxhdG9yLgorICAgIGlmIChub3RpZnlfcWVtdV9tYWxsb2MoJm5ld19kZXNjKSkgeworICAgICAgICBsb2dfbWRlc2MoZXJyb3IsICZuZXdfZGVzYywgIjxsaWJjX3BpZD0lMDN1LCBwaWQ9JTAzdT46IHJlYWxsb2MoJXAsICV1KSBub3RpZnlfbWFsbG9jIGZhaWxlZCAtPiAiLAorICAgICAgICAgICAgICAgICAgbWFsbG9jX3BpZCwgZ2V0cGlkKCksIG1lbSwgYnl0ZXMpOworICAgICAgICBsb2dfbWRlc2MoZXJyb3IsICZjdXJfZGVzYywgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8LSAiKTsKKyAgICAgICAgZGxmcmVlKG5ld19kZXNjLnB0cik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworI2lmIFRFU1RfQUNDRVNTX1ZJT0xBVElPTlMKKyAgICB0ZXN0X2FjY2Vzc192aW9sYXRpb24oJm5ld19kZXNjKTsKKyNlbmRpZiAgLy8gVEVTVF9BQ0NFU1NfVklPTEFUSU9OUworCisgICAgLy8gRnJlZSBvbGQgYmxvY2suCisgICAgaWYgKG5vdGlmeV9xZW11X2ZyZWUobWVtKSkgeworICAgICAgICBsb2dfbWRlc2MoZXJyb3IsICZjdXJfZGVzYywgIjxsaWJjX3BpZD0lMDN1LCBwaWQ9JTAzdT46IHJlYWxsb2MoJXAsICV1KTogbm90aWZ5X2ZyZWUgZmFpbGVkIGZvciAiLAorICAgICAgICAgICAgICAgICAgbWFsbG9jX3BpZCwgZ2V0cGlkKCksIG1lbSwgYnl0ZXMpOworICAgICAgICAvKiBTaW5jZSB3ZSByZWdpc3RlcmVkIG5ldyBkZWNyaXB0b3Igd2l0aCB0aGUgZW11bGF0b3IsIHdlIG5lZWQKKyAgICAgICAgICogdG8gdW5yZWdpc3RlciBpdCBiZWZvcmUgZnJlZWluZyBuZXdseSBhbGxvY2F0ZWQgYmxvY2suICovCisgICAgICAgIG5vdGlmeV9xZW11X2ZyZWUobWFsbG9jZGVzY191c2VyX3B0cigmbmV3X2Rlc2MpKTsKKyAgICAgICAgZGxmcmVlKG5ld19kZXNjLnB0cik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBkbGZyZWUoY3VyX2Rlc2MucHRyKTsKKworICAgIGxvZ19tZGVzYyhpbmZvLCAmbmV3X2Rlc2MsICI9PT0gPGxpYmNfcGlkPSUwM3UsIHBpZD0lMDN1PjogcmVhbGxvYyglcCwgJXUpIC0+ICIsCisgICAgICAgICAgICAgIG1hbGxvY19waWQsIGdldHBpZCgpLCBtZW0sIGJ5dGVzKTsKKyAgICBsb2dfbWRlc2MoaW5mbywgJmN1cl9kZXNjLCAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8LSAiKTsKKworICAgIHJldHVybiByZXQ7Cit9CisKKy8qIFRoaXMgcm91dGluZSBzZXJ2ZXMgYXMgZW50cnkgcG9pbnQgZm9yICdtZW1hbGlnbicuCisgKiBUaGlzIHJvdXRpbmUgYmVoYXZlcyBzaW1pbGFybHkgdG8gcWVtdV9pbnN0cnVtZW50ZWRfbWFsbG9jLgorICovCitleHRlcm4gIkMiIHZvaWQqIHFlbXVfaW5zdHJ1bWVudGVkX21lbWFsaWduKHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBieXRlcykgeworICAgIE1hbGxvY0Rlc2MgZGVzYzsKKworICAgIGlmIChieXRlcyA9PSAwKSB7CisgICAgICAgIC8vIEp1c3QgbGV0IGdvIHplcm8gYnl0ZXMgYWxsb2NhdGlvbi4KKyAgICAgICAgcWVtdV9pbmZvX2xvZygiOjo6IDxsaWJjX3BpZD0lMDN1LCBwaWQ9JTAzdT46IG1lbWFsaWduKCVYLCAldSkgcmVkaXIgdG8gbWFsbG9jIiwKKyAgICAgICAgICAgICAgICAgbWFsbG9jX3BpZCwgZ2V0cGlkKCksIGFsaWdubWVudCwgYnl0ZXMpOworICAgICAgICByZXR1cm4gcWVtdV9pbnN0cnVtZW50ZWRfbWFsbG9jKDApOworICAgIH0KKworICAgIC8qIFByZWZpeCBzaXplIGZvciBhbGlnbmVkIGFsbG9jYXRpb24gbXVzdCBiZSBlcXVhbCB0byB0aGUgYWxpZ25tZW50IHVzZWQKKyAgICAgKiBmb3IgYWxsb2NhdGlvbiBpbiBvcmRlciB0byBlbnN1cmUgcHJvcGVyIGFsaWdubWVudCBvZiB0aGUgcmV0dXJuZWQKKyAgICAgKiBwb2ludGVyLCBpbiBjYXNlIHRoYXQgYWxpZ25tZW50IHJlcXVpcmVtZW50IGlzIGdyZWF0ZXIgdGhhbiBwcmVmaXgKKyAgICAgKiBzaXplLiAqLworICAgIGRlc2MucHJlZml4X3NpemUgPSBhbGlnbm1lbnQgPiBERUZBVUxUX1BSRUZJWF9TSVpFID8gYWxpZ25tZW50IDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERFRkFVTFRfUFJFRklYX1NJWkU7CisgICAgZGVzYy5yZXF1ZXN0ZWRfYnl0ZXMgPSBieXRlczsKKyAgICBkZXNjLnN1ZmZpeF9zaXplID0gREVGQVVMVF9TVUZGSVhfU0laRTsKKyAgICBkZXNjLnB0ciA9IGRsbWVtYWxpZ24oZGVzYy5wcmVmaXhfc2l6ZSwgbWFsbG9jZGVzY19hbGxvY19zaXplKCZkZXNjKSk7CisgICAgaWYgKGRlc2MucHRyID09IE5VTEwpIHsKKyAgICAgICAgZXJyb3JfbG9nKCI8bGliY19waWQ9JTAzdSwgcGlkPSUwM3U+IG1lbWFsaWduKCVYLCAldSk6IGRsbWFsbG9jKCV1KSBmYWlsZWQuIiwKKyAgICAgICAgICAgICAgICAgIG1hbGxvY19waWQsIGdldHBpZCgpLCBhbGlnbm1lbnQsIGJ5dGVzLAorICAgICAgICAgICAgICAgICAgbWFsbG9jZGVzY19hbGxvY19zaXplKCZkZXNjKSk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBpZiAobm90aWZ5X3FlbXVfbWFsbG9jKCZkZXNjKSkgeworICAgICAgICBsb2dfbWRlc2MoZXJyb3IsICZkZXNjLCAiPGxpYmNfcGlkPSUwM3UsIHBpZD0lMDN1PjogbWVtYWxpZ24oJVgsICV1KTogbm90aWZ5X21hbGxvYyBmYWlsZWQgZm9yICIsCisgICAgICAgICAgICAgICAgICBtYWxsb2NfcGlkLCBnZXRwaWQoKSwgYWxpZ25tZW50LCBieXRlcyk7CisgICAgICAgIGRsZnJlZShkZXNjLnB0cik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworI2lmIFRFU1RfQUNDRVNTX1ZJT0xBVElPTlMKKyAgICB0ZXN0X2FjY2Vzc192aW9sYXRpb24oJmRlc2MpOworI2VuZGlmICAvLyBURVNUX0FDQ0VTU19WSU9MQVRJT05TCisKKyAgICBsb2dfbWRlc2MoaW5mbywgJmRlc2MsICJAQEAgPGxpYmNfcGlkPSUwM3UsIHBpZD0lMDN1PiBtZW1hbGlnbiglWCwgJXUpIC0+ICIsCisgICAgICAgICAgICAgIG1hbGxvY19waWQsIGdldHBpZCgpLCBhbGlnbm1lbnQsIGJ5dGVzKTsKKyAgICByZXR1cm4gbWFsbG9jZGVzY191c2VyX3B0cigmZGVzYyk7Cit9CisKK2V4dGVybiAiQyIgc2l6ZV90IHFlbXVfaW5zdHJ1bWVudGVkX21hbGxvY191c2FibGVfc2l6ZShjb25zdCB2b2lkKiBtZW0pIHsKKyAgICBNYWxsb2NEZXNjIGN1cl9kZXNjOworCisgICAgLy8gUXVlcnkgZW11bGF0b3IgZm9yIHRoZSByZWFsbG9jYXRpbmcgYmxvY2sgaW5mb3JtYXRpb24uCisgICAgaWYgKHF1ZXJ5X3FlbXVfbWFsbG9jX2luZm8obWVtLCAmY3VyX2Rlc2MsIDIpKSB7CisgICAgICAgIC8vIE5vdGUgdGhhdCB0aGlzIHZpb2xhdGlvbiBzaG91bGQgYmUgYWxyZWFkeSBjYXVnaHQgaW4gdGhlIGVtdWxhdG9yLgorICAgICAgICBlcnJvcl9sb2coIjxsaWJjX3BpZD0lMDN1LCBwaWQ9JTAzdT46IG1hbGxvY191c2FibGVfc2l6ZSglcCkgcXVlcnlfaW5mbyBmYWlsZWQuIiwKKyAgICAgICAgICAgICAgICAgIG1hbGxvY19waWQsIGdldHBpZCgpLCBtZW0pOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICAvKiBNYWtlIHN1cmUgdGhhdCByZWFsbG9jYXRpbmcgcG9pbnRlciB2YWx1ZSBpcyB3aGF0IHdlIHdvdWxkIGV4cGVjdAorICAgICAqIGZvciB0aGlzIG1lbW9yeSBibG9jay4gTm90ZSB0aGF0IHRoaXMgdmlvbGF0aW9uIHNob3VsZCBiZSBhbHJlYWR5IGNhdWdodAorICAgICAqIGluIHRoZSBlbXVsYXRvci4qLworICAgIGlmIChtZW0gIT0gbWFsbG9jZGVzY191c2VyX3B0cigmY3VyX2Rlc2MpKSB7CisgICAgICAgIGxvZ19tZGVzYyhlcnJvciwgJmN1cl9kZXNjLCAiPGxpYmNfcGlkPSUwM3UsIHBpZD0lMDN1PjogbWFsbG9jX3VzYWJsZV9zaXplKCVwKSBpcyBpbnZhbGlkIGZvciAiLAorICAgICAgICAgICAgICAgICAgbWFsbG9jX3BpZCwgZ2V0cGlkKCksIG1lbSk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIC8qIGR1cmluZyBpbnN0cnVtZW50YXRpb24sIHdlIGNhbid0IHJlYWxseSByZXBvcnQgYW55dGhpbmcgbW9yZSB0aGFuIHJlcXVlc3RlZF9ieXRlcyAqLworICAgIHJldHVybiBjdXJfZGVzYy5yZXF1ZXN0ZWRfYnl0ZXM7Cit9CmRpZmYgLS1naXQgYS9saWJjL3N0cmluZy9tZW1jaHIuYyBiL2xpYmMvYmlvbmljL21lbWNoci5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBsaWJjL3N0cmluZy9tZW1jaHIuYwpyZW5hbWUgdG8gbGliYy9iaW9uaWMvbWVtY2hyLmMKZGlmZiAtLWdpdCBhL2xpYmMvc3RyaW5nL21lbWNtcC5jIGIvbGliYy9iaW9uaWMvbWVtY21wLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGxpYmMvc3RyaW5nL21lbWNtcC5jCnJlbmFtZSB0byBsaWJjL2Jpb25pYy9tZW1jbXAuYwpkaWZmIC0tZ2l0IGEvbGliYy9zdHJpbmcvbWVtY3B5LmMgYi9saWJjL2Jpb25pYy9tZW1jcHkuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbGliYy9zdHJpbmcvbWVtY3B5LmMKcmVuYW1lIHRvIGxpYmMvYmlvbmljL21lbWNweS5jCmRpZmYgLS1naXQgYS9saWJjL3N0cmluZy9tZW1tZW0uYyBiL2xpYmMvYmlvbmljL21lbW1lbS5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBsaWJjL3N0cmluZy9tZW1tZW0uYwpyZW5hbWUgdG8gbGliYy9iaW9uaWMvbWVtbWVtLmMKZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL21lbW1vdmUuYyBiL2xpYmMvYmlvbmljL21lbW1vdmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOWZjMWI1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9iaW9uaWMvbWVtbW92ZS5jCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKyN1bmRlZiBfRk9SVElGWV9TT1VSQ0UKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzdHJpbmdzLmg+CisKK3ZvaWQgKm1lbW1vdmUodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBuKQoreworICBjb25zdCBjaGFyICpwID0gc3JjOworICBjaGFyICpxID0gZHN0OworICAvKiBXZSBjYW4gdXNlIHRoZSBvcHRpbWl6ZWQgbWVtY3B5IGlmIHRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uCisgICAqIGRvbid0IG92ZXJsYXAuCisgICAqLworICBpZiAoX19idWlsdGluX2V4cGVjdCgoKHEgPCBwKSAmJiAoKHNpemVfdCkocCAtIHEpID49IG4pKQorICAgICAgICAgICAgICAgICAgICB8fCAoKHAgPCBxKSAmJiAoKHNpemVfdCkocSAtIHApID49IG4pKSwgMSkpIHsKKyAgICByZXR1cm4gbWVtY3B5KGRzdCwgc3JjLCBuKTsKKyAgfSBlbHNlIHsKKyAgICBiY29weShzcmMsIGRzdCwgbik7CisgICAgcmV0dXJuIGRzdDsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvbWVtbW92ZV93b3Jkcy5jIGIvbGliYy9iaW9uaWMvbWVtbW92ZV93b3Jkcy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNmRmN2ZhLi4wMDAwMDAwCi0tLSBhL2xpYmMvYmlvbmljL21lbW1vdmVfd29yZHMuYworKysgL2Rldi9udWxsCkBAIC0xLDE0OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0ZGludC5oPgotI2luY2x1ZGUgPGFzc2VydC5oPgotCi0vKgotICogV29ya3MgbGlrZSBtZW1tb3ZlKCksIGV4Y2VwdDoKLSAqIC0gaWYgYWxsIGFyZ3VtZW50cyBhcmUgYXQgbGVhc3QgMzItYml0IGFsaWduZWQsIHdlIGd1YXJhbnRlZSB0aGF0IHdlCi0gKiAgIHdpbGwgdXNlIG9wZXJhdGlvbnMgdGhhdCBwcmVzZXJ2ZSBhdG9taWNpdHkgb2YgMzItYml0IHZhbHVlcwotICogLSBpZiBub3QsIHdlIGd1YXJhbnRlZSBhdG9taWNpdHkgb2YgMTYtYml0IHZhbHVlcwotICoKLSAqIElmIGFsbCB0aHJlZSBhcmd1bWVudHMgYXJlIG5vdCBhdCBsZWFzdCAxNi1iaXQgYWxpZ25lZCwgdGhlIGJlaGF2aW9yCi0gKiBvZiB0aGlzIGZ1bmN0aW9uIGlzIHVuZGVmaW5lZC4gIChXZSBjb3VsZCByZW1vdmUgdGhpcyByZXN0cmljdGlvbiBieQotICogdGVzdGluZyBmb3IgdW5hbGlnbmVkIHZhbHVlcyBhbmQgcHVudGluZyB0byBtZW1tb3ZlKCksIGJ1dCB0aGF0J3MKLSAqIG5vdCBjdXJyZW50bHkgdXNlZnVsLikKLSAqCi0gKiBUT0RPOiBhZGQgbG9vcCBmb3IgNjQtYml0IGFsaWdubWVudAotICogVE9ETzogdXNlIF9fYnVpbHRpbl9wcmVmZXRjaAotICogVE9ETzogd3JpdGUgYW4gQVJNLW9wdGltaXplZCB2ZXJzaW9uCi0gKi8KLXZvaWQgX21lbW1vdmVfd29yZHModm9pZCogZGVzdCwgY29uc3Qgdm9pZCogc3JjLCBzaXplX3QgbikKLXsKLSAgICBhc3NlcnQoKCgodWludHB0cl90KSBkZXN0IHwgKHVpbnRwdHJfdCkgc3JjIHwgbikgJiAweDAxKSA9PSAwKTsKLQotICAgIGNoYXIqIGQgPSAoY2hhciopIGRlc3Q7Ci0gICAgY29uc3QgY2hhciogcyA9IChjb25zdCBjaGFyKikgc3JjOwotICAgIHNpemVfdCBjb3B5Q291bnQ7Ci0KLSAgICAvKgotICAgICAqIElmIHRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIHBvaW50ZXJzIGFyZSB0aGUgc2FtZSwgdGhpcyBpcwotICAgICAqIGFuIGV4cGVuc2l2ZSBuby1vcC4gIFRlc3RpbmcgZm9yIGFuIGVtcHR5IG1vdmUgbm93IGFsbG93cyB1cwotICAgICAqIHRvIHNraXAgYSBjaGVjayBsYXRlci4KLSAgICAgKi8KLSAgICBpZiAobiA9PSAwIHx8IGQgPT0gcykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLyoKLSAgICAgKiBEZXRlcm1pbmUgaWYgdGhlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gYnVmZmVycyB3aWxsIG92ZXJsYXAgaWYKLSAgICAgKiB3ZSBjb3B5IGRhdGEgZm9yd2FyZCAoaS5lLiAqZGVzdCsrID0gKnNyYysrKS4KLSAgICAgKgotICAgICAqIEl0J3Mgb2theSBpZiB0aGUgZGVzdGluYXRpb24gYnVmZmVyIHN0YXJ0cyBiZWZvcmUgdGhlIHNvdXJjZSBhbmQKLSAgICAgKiB0aGVyZSBpcyBzb21lIG92ZXJsYXAsIGJlY2F1c2UgdGhlIHJlYWRlciBpcyBhbHdheXMgYWhlYWQgb2YgdGhlCi0gICAgICogd3JpdGVyLgotICAgICAqLwotICAgIGlmIChfX2J1aWx0aW5fZXhwZWN0KChkIDwgcykgfHwgKChzaXplX3QpKGQgLSBzKSA+PSBuKSwgMSkpIHsKLSAgICAgICAgLyoKLSAgICAgICAgICogQ29weSBmb3J3YXJkLiAgV2UgcHJlZmVyIDMyLWJpdCBsb2FkcyBhbmQgc3RvcmVzIGV2ZW4gZm9yIDE2LWJpdAotICAgICAgICAgKiBkYXRhLCBzbyBzb3J0IHRoYXQgb3V0LgotICAgICAgICAgKi8KLSAgICAgICAgaWYgKCgoKHVpbnRwdHJfdCkgZCB8ICh1aW50cHRyX3QpIHMpICYgMHgwMykgIT0gMCkgewotICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAqIE5vdCAzMi1iaXQgYWxpZ25lZC4gIFR3byBwb3NzaWJpbGl0aWVzOgotICAgICAgICAgICAgICogKDEpIENvbmdydWVudCwgd2UgY2FuIGFsaWduIHRvIDMyLWJpdCBieSBjb3B5aW5nIG9uZSAxNi1iaXQgdmFsCi0gICAgICAgICAgICAgKiAoMikgTm9uLWNvbmdydWVudCwgd2UgY2FuIGRvIG9uZSBvZjoKLSAgICAgICAgICAgICAqICAgYS4gY29weSB3aG9sZSBidWZmZXIgYXMgYSBzZXJpZXMgb2YgMTYtYml0IHZhbHVlcwotICAgICAgICAgICAgICogICBiLiBsb2FkL3N0b3JlIDMyIGJpdHMsIHVzaW5nIHNoaWZ0cyB0byBlbnN1cmUgYWxpZ25tZW50Ci0gICAgICAgICAgICAgKiAgIGMuIGp1c3QgY29weSB0aGUgYXMgMzItYml0IHZhbHVlcyBhbmQgYXNzdW1lIHRoZSBDUFUKLSAgICAgICAgICAgICAqICAgICAgd2lsbCBkbyBhIHJlYXNvbmFibGUgam9iCi0gICAgICAgICAgICAgKgotICAgICAgICAgICAgICogV2UncmUgY3VycmVudGx5IHVzaW5nIChhKSwgd2hpY2ggaXMgc3Vib3B0aW1hbC4KLSAgICAgICAgICAgICAqLwotICAgICAgICAgICAgaWYgKCgoKHVpbnRwdHJfdCkgZCBeICh1aW50cHRyX3QpIHMpICYgMHgwMykgIT0gMCkgewotICAgICAgICAgICAgICAgIGNvcHlDb3VudCA9IG47Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGNvcHlDb3VudCA9IDI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBuIC09IGNvcHlDb3VudDsKLSAgICAgICAgICAgIGNvcHlDb3VudCAvPSBzaXplb2YodWludDE2X3QpOwotCi0gICAgICAgICAgICB3aGlsZSAoY29weUNvdW50LS0pIHsKLSAgICAgICAgICAgICAgICAqKHVpbnQxNl90KilkID0gKih1aW50MTZfdCopczsKLSAgICAgICAgICAgICAgICBkICs9IHNpemVvZih1aW50MTZfdCk7Ci0gICAgICAgICAgICAgICAgcyArPSBzaXplb2YodWludDE2X3QpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLyoKLSAgICAgICAgICogQ29weSAzMi1iaXQgYWxpZ25lZCB3b3Jkcy4KLSAgICAgICAgICovCi0gICAgICAgIGNvcHlDb3VudCA9IG4gLyBzaXplb2YodWludDMyX3QpOwotICAgICAgICB3aGlsZSAoY29weUNvdW50LS0pIHsKLSAgICAgICAgICAgICoodWludDMyX3QqKWQgPSAqKHVpbnQzMl90KilzOwotICAgICAgICAgICAgZCArPSBzaXplb2YodWludDMyX3QpOwotICAgICAgICAgICAgcyArPSBzaXplb2YodWludDMyX3QpOwotICAgICAgICB9Ci0KLSAgICAgICAgLyoKLSAgICAgICAgICogQ2hlY2sgZm9yIGxlZnRvdmVycy4gIEVpdGhlciB3ZSBmaW5pc2hlZCBleGFjdGx5LCBvciB3ZSBoYXZlCi0gICAgICAgICAqIG9uZSByZW1haW5pbmcgMTYtYml0IGNodW5rLgotICAgICAgICAgKi8KLSAgICAgICAgaWYgKChuICYgMHgwMikgIT0gMCkgewotICAgICAgICAgICAgKih1aW50MTZfdCopZCA9ICoodWludDE2X3QqKXM7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICAvKgotICAgICAgICAgKiBDb3B5IGJhY2t3YXJkLCBzdGFydGluZyBhdCB0aGUgZW5kLgotICAgICAgICAgKi8KLSAgICAgICAgZCArPSBuOwotICAgICAgICBzICs9IG47Ci0KLSAgICAgICAgaWYgKCgoKHVpbnRwdHJfdCkgZCB8ICh1aW50cHRyX3QpIHMpICYgMHgwMykgIT0gMCkgewotICAgICAgICAgICAgLyogdHJ5IGZvciAzMi1iaXQgYWxpZ25tZW50ICovCi0gICAgICAgICAgICBpZiAoKCgodWludHB0cl90KSBkIF4gKHVpbnRwdHJfdCkgcykgJiAweDAzKSAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgY29weUNvdW50ID0gbjsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgY29weUNvdW50ID0gMjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG4gLT0gY29weUNvdW50OwotICAgICAgICAgICAgY29weUNvdW50IC89IHNpemVvZih1aW50MTZfdCk7Ci0KLSAgICAgICAgICAgIHdoaWxlIChjb3B5Q291bnQtLSkgewotICAgICAgICAgICAgICAgIGQgLT0gc2l6ZW9mKHVpbnQxNl90KTsKLSAgICAgICAgICAgICAgICBzIC09IHNpemVvZih1aW50MTZfdCk7Ci0gICAgICAgICAgICAgICAgKih1aW50MTZfdCopZCA9ICoodWludDE2X3QqKXM7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvKiBjb3B5IDMyLWJpdCBhbGlnbmVkIHdvcmRzICovCi0gICAgICAgIGNvcHlDb3VudCA9IG4gLyBzaXplb2YodWludDMyX3QpOwotICAgICAgICB3aGlsZSAoY29weUNvdW50LS0pIHsKLSAgICAgICAgICAgIGQgLT0gc2l6ZW9mKHVpbnQzMl90KTsKLSAgICAgICAgICAgIHMgLT0gc2l6ZW9mKHVpbnQzMl90KTsKLSAgICAgICAgICAgICoodWludDMyX3QqKWQgPSAqKHVpbnQzMl90KilzOwotICAgICAgICB9Ci0KLSAgICAgICAgLyogY29weSBsZWZ0b3ZlcnMgKi8KLSAgICAgICAgaWYgKChuICYgMHgwMikgIT0gMCkgewotICAgICAgICAgICAgZCAtPSBzaXplb2YodWludDE2X3QpOwotICAgICAgICAgICAgcyAtPSBzaXplb2YodWludDE2X3QpOwotICAgICAgICAgICAgKih1aW50MTZfdCopZCA9ICoodWludDE2X3QqKXM7Ci0gICAgICAgIH0KLSAgICB9Ci19CmRpZmYgLS1naXQgYS9saWJjL3N0cmluZy9tZW1yY2hyLmMgYi9saWJjL2Jpb25pYy9tZW1yY2hyLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGxpYmMvc3RyaW5nL21lbXJjaHIuYwpyZW5hbWUgdG8gbGliYy9iaW9uaWMvbWVtcmNoci5jCmRpZmYgLS1naXQgYS9saWJjL3N0cmluZy9tZW1zZXQuYyBiL2xpYmMvYmlvbmljL21lbXNldC5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBsaWJjL3N0cmluZy9tZW1zZXQuYwpyZW5hbWUgdG8gbGliYy9iaW9uaWMvbWVtc2V0LmMKZGlmZiAtLWdpdCBhL2xpYmMvc3RyaW5nL21lbXN3YXAuYyBiL2xpYmMvYmlvbmljL21lbXN3YXAuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbGliYy9zdHJpbmcvbWVtc3dhcC5jCnJlbmFtZSB0byBsaWJjL2Jpb25pYy9tZW1zd2FwLmMKZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL21tYXAuY3BwIGIvbGliYy9iaW9uaWMvbW1hcC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmViYzQ1OQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYmlvbmljL21tYXAuY3BwCkBAIC0wLDAgKzEsNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3lzL21tYW4uaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworI2luY2x1ZGUgInByaXZhdGUvRXJybm9SZXN0b3Jlci5oIgorCisvLyBtbWFwMigyKSBpcyBsaWtlIG1tYXAoMiksIGJ1dCB0aGUgb2Zmc2V0IGlzIGluIDQwOTYtYnl0ZSBibG9ja3MsIG5vdCBieXRlcy4KK2V4dGVybiAiQyIgdm9pZCogIF9fbW1hcDIodm9pZCosIHNpemVfdCwgaW50LCBpbnQsIGludCwgc2l6ZV90KTsKKworI2RlZmluZSBNTUFQMl9TSElGVCAxMiAvLyAyKioxMiA9PSA0MDk2CisKK3ZvaWQqIG1tYXAodm9pZCogYWRkciwgc2l6ZV90IHNpemUsIGludCBwcm90LCBpbnQgZmxhZ3MsIGludCBmZCwgb2ZmX3Qgb2Zmc2V0KSB7CisgIGlmIChvZmZzZXQgJiAoKDFVTCA8PCBNTUFQMl9TSElGVCktMSkpIHsKKyAgICBlcnJubyA9IEVJTlZBTDsKKyAgICByZXR1cm4gTUFQX0ZBSUxFRDsKKyAgfQorCisgIHNpemVfdCB1bnNpZ25lZF9vZmZzZXQgPSBzdGF0aWNfY2FzdDxzaXplX3Q+KG9mZnNldCk7IC8vIFRvIGF2b2lkIHNpZ24gZXh0ZW5zaW9uLgorICB2b2lkKiByZXN1bHQgPSBfX21tYXAyKGFkZHIsIHNpemUsIHByb3QsIGZsYWdzLCBmZCwgdW5zaWduZWRfb2Zmc2V0ID4+IE1NQVAyX1NISUZUKTsKKworICBpZiAocmVzdWx0ICE9IE1BUF9GQUlMRUQgJiYgKGZsYWdzICYgKE1BUF9QUklWQVRFIHwgTUFQX0FOT05ZTU9VUykpICE9IDApIHsKKyAgICBFcnJub1Jlc3RvcmVyIGVycm5vX3Jlc3RvcmVyOworICAgIG1hZHZpc2UocmVzdWx0LCBzaXplLCBNQURWX01FUkdFQUJMRSk7CisgIH0KKworICByZXR1cm4gcmVzdWx0OworfQpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvb3Blbi5jIGIvbGliYy9iaW9uaWMvb3Blbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyNDU3M2YKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2Jpb25pYy9vcGVuLmMKQEAgLTAsMCArMSw2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSAibGliY19sb2dnaW5nLmgiCisKK2V4dGVybiBpbnQgIF9fb3Blbihjb25zdCBjaGFyKiwgaW50LCBpbnQpOworCitpbnQgb3Blbihjb25zdCBjaGFyICpwYXRobmFtZSwgaW50IGZsYWdzLCAuLi4pCit7CisgICAgbW9kZV90ICBtb2RlID0gMDsKKworICAgIGZsYWdzIHw9IE9fTEFSR0VGSUxFOworCisgICAgaWYgKGZsYWdzICYgT19DUkVBVCkKKyAgICB7CisgICAgICAgIHZhX2xpc3QgIGFyZ3M7CisKKyAgICAgICAgdmFfc3RhcnQoYXJncywgZmxhZ3MpOworICAgICAgICBtb2RlID0gKG1vZGVfdCkgdmFfYXJnKGFyZ3MsIGludCk7CisgICAgICAgIHZhX2VuZChhcmdzKTsKKyAgICB9CisKKyAgICByZXR1cm4gX19vcGVuKHBhdGhuYW1lLCBmbGFncywgbW9kZSk7Cit9CisKK2ludCBfX29wZW5fMihjb25zdCBjaGFyICpwYXRobmFtZSwgaW50IGZsYWdzKSB7CisgICAgaWYgKF9fcHJlZGljdF9mYWxzZShmbGFncyAmIE9fQ1JFQVQpKSB7CisgICAgICAgIF9fZm9ydGlmeV9jaGtfZmFpbCgib3BlbihPX0NSRUFUKSBjYWxsZWQgd2l0aG91dCBzcGVjaWZ5aW5nIGEgbW9kZSIsIDApOworICAgIH0KKworICAgIGZsYWdzIHw9IE9fTEFSR0VGSUxFOworCisgICAgcmV0dXJuIF9fb3BlbihwYXRobmFtZSwgZmxhZ3MsIDApOworfQpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvb3BlbmF0LmMgYi9saWJjL2Jpb25pYy9vcGVuYXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDA5ZDE3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9iaW9uaWMvb3BlbmF0LmMKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSAibGliY19sb2dnaW5nLmgiCisKK2V4dGVybiBpbnQgIF9fb3BlbmF0KGludCwgY29uc3QgY2hhciosIGludCwgaW50KTsKKworaW50IG9wZW5hdChpbnQgZmQsIGNvbnN0IGNoYXIgKnBhdGhuYW1lLCBpbnQgZmxhZ3MsIC4uLikKK3sKKyAgICBtb2RlX3QgIG1vZGUgPSAwOworCisgICAgZmxhZ3MgfD0gT19MQVJHRUZJTEU7CisKKyAgICBpZiAoZmxhZ3MgJiBPX0NSRUFUKQorICAgIHsKKyAgICAgICAgdmFfbGlzdCAgYXJnczsKKworICAgICAgICB2YV9zdGFydChhcmdzLCBmbGFncyk7CisgICAgICAgIG1vZGUgPSAobW9kZV90KSB2YV9hcmcoYXJncywgaW50KTsKKyAgICAgICAgdmFfZW5kKGFyZ3MpOworICAgIH0KKworICAgIHJldHVybiBfX29wZW5hdChmZCwgcGF0aG5hbWUsIGZsYWdzLCBtb2RlKTsKK30KKworaW50IF9fb3BlbmF0XzIoaW50IGZkLCBjb25zdCBjaGFyICpwYXRobmFtZSwgaW50IGZsYWdzKQoreworICAgIGlmIChmbGFncyAmIE9fQ1JFQVQpIHsKKyAgICAgICAgX19mb3J0aWZ5X2Noa19mYWlsKCJvcGVuYXQoT19DUkVBVCkgY2FsbGVkIHdpdGhvdXQgc3BlY2lmeWluZyBhIG1vZGUiLCAwKTsKKyAgICB9CisKKyAgICBmbGFncyB8PSBPX0xBUkdFRklMRTsKKworICAgIHJldHVybiBfX29wZW5hdChmZCwgcGF0aG5hbWUsIGZsYWdzLCAwKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdW5pc3RkL3BhdGhjb25mLmMgYi9saWJjL2Jpb25pYy9wYXRoY29uZi5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBsaWJjL3VuaXN0ZC9wYXRoY29uZi5jCnJlbmFtZSB0byBsaWJjL2Jpb25pYy9wYXRoY29uZi5jCmRpZmYgLS1naXQgYS9saWJjL3VuaXN0ZC9wZXJyb3IuYyBiL2xpYmMvYmlvbmljL3BlcnJvci5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBsaWJjL3VuaXN0ZC9wZXJyb3IuYwpyZW5hbWUgdG8gbGliYy9iaW9uaWMvcGVycm9yLmMKZGlmZiAtLWdpdCBhL2xpYmMvdW5pc3RkL3ByZWFkLmMgYi9saWJjL2Jpb25pYy9wcmVhZC5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBsaWJjL3VuaXN0ZC9wcmVhZC5jCnJlbmFtZSB0byBsaWJjL2Jpb25pYy9wcmVhZC5jCmRpZmYgLS1naXQgYS9saWJjL3VuaXN0ZC9wc2VsZWN0LmMgYi9saWJjL2Jpb25pYy9wc2VsZWN0LmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGxpYmMvdW5pc3RkL3BzZWxlY3QuYwpyZW5hbWUgdG8gbGliYy9iaW9uaWMvcHNlbGVjdC5jCmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9wdGhyZWFkLXJ3bG9ja3MuYyBiL2xpYmMvYmlvbmljL3B0aHJlYWQtcndsb2Nrcy5jCmluZGV4IGNhM2U5NWMuLjU5ZTIyNDggMTAwNjQ0Ci0tLSBhL2xpYmMvYmlvbmljL3B0aHJlYWQtcndsb2Nrcy5jCisrKyBiL2xpYmMvYmlvbmljL3B0aHJlYWQtcndsb2Nrcy5jCkBAIC00Miw3ICs0Miw3IEBACiAgKiAgLSB0cnlpbmcgdG8gZ2V0IHRoZSByZWFkLWxvY2sgd2hpbGUgdGhlcmUgaXMgYSB3cml0ZXIgYmxvY2tzCiAgKiAgLSBhIHNpbmdsZSB0aHJlYWQgY2FuIGFjcXVpcmUgdGhlIGxvY2sgbXVsdGlwbGUgdGltZXMgaW4gdGhlIHNhbWUgbW9kZQogICoKLSAqICAtIFBvc2l4IHN0YXRlcyB0aGF0IGJlaGF2aW91ciBpcyB1bmRlZmluZWQgaXQgYSB0aHJlYWQgdHJpZXMgdG8gYWNxdWlyZQorICogIC0gUG9zaXggc3RhdGVzIHRoYXQgYmVoYXZpb3IgaXMgdW5kZWZpbmVkIGl0IGEgdGhyZWFkIHRyaWVzIHRvIGFjcXVpcmUKICAqICAgIHRoZSBsb2NrIGluIHR3byBkaXN0aW5jdCBtb2RlcyAoZS5nLiB3cml0ZSBhZnRlciByZWFkLCBvciByZWFkIGFmdGVyIHdyaXRlKS4KICAqCiAgKiAgLSBUaGlzIGltcGxlbWVudGF0aW9uIHRyaWVzIHRvIGF2b2lkIHdyaXRlciBzdGFydmF0aW9uIGJ5IG1ha2luZyB0aGUgcmVhZGVycwpAQCAtNTMsMjAgKzUzLDExIEBACiAgKgogICovCiAKLSNkZWZpbmUgIF9fbGlrZWx5KGNvbmQpICAgIF9fYnVpbHRpbl9leHBlY3QoISEoY29uZCksIDEpCi0jZGVmaW5lICBfX3VubGlrZWx5KGNvbmQpICBfX2J1aWx0aW5fZXhwZWN0KCEhKGNvbmQpLCAwKQotCiAjZGVmaW5lICBSV0xPQ0tBVFRSX0RFRkFVTFQgICAgIDAKICNkZWZpbmUgIFJXTE9DS0FUVFJfU0hBUkVEX01BU0sgMHgwMDEwCiAKIGV4dGVybiBwdGhyZWFkX2ludGVybmFsX3QqIF9fZ2V0X3RocmVhZCh2b2lkKTsKIAotLyogUmV0dXJuIGEgZ2xvYmFsIGtlcm5lbCBJRCBmb3IgdGhlIGN1cnJlbnQgdGhyZWFkICovCi1zdGF0aWMgaW50IF9fZ2V0X3RocmVhZF9pZCh2b2lkKQotewotICAgIHJldHVybiBfX2dldF90aHJlYWQoKS0+a2VybmVsX2lkOwotfQotCiBpbnQgcHRocmVhZF9yd2xvY2thdHRyX2luaXQocHRocmVhZF9yd2xvY2thdHRyX3QgKmF0dHIpCiB7CiAgICAgaWYgKCFhdHRyKQpAQCAtMTUwLDggKzE0MSw2IEBACiAKIGludCBwdGhyZWFkX3J3bG9ja19kZXN0cm95KHB0aHJlYWRfcndsb2NrX3QgKnJ3bG9jaykKIHsKLSAgICBpbnQgIHJldDsKLQogICAgIGlmIChyd2xvY2sgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIEVJTlZBTDsKIApAQCAtMTY0LDcgKzE1Myw3IEBACiB9CiAKIC8qIFJldHVybnMgVFJVRSBpZmYgd2UgY2FuIGFjcXVpcmUgYSByZWFkIGxvY2suICovCi1zdGF0aWMgX19pbmxpbmVfXyBpbnQgcmVhZF9wcmVjb25kaXRpb24ocHRocmVhZF9yd2xvY2tfdCAqcndsb2NrLCBpbnQgIHRocmVhZF9pZCkKK3N0YXRpYyBfX2lubGluZV9fIGludCByZWFkX3ByZWNvbmRpdGlvbihwdGhyZWFkX3J3bG9ja190KiByd2xvY2ssIGludCB0aWQpCiB7CiAgICAgLyogV2UgY2FuJ3QgaGF2ZSB0aGUgbG9jayBpZiBhbnkgd3JpdGVyIGlzIHdhaXRpbmcgZm9yIGl0ICh3cml0ZXIgYmlhcykuCiAgICAgICogVGhpcyB0cmllcyB0byBhdm9pZCBzdGFydmF0aW9uIHdoZW4gdGhlcmUgYXJlIG11bHRpcGxlIHJlYWRlcnMgcmFjaW5nLgpAQCAtMTc0LDcgKzE2Myw3IEBACiAKICAgICAvKiBXZSBjYW4gaGF2ZSB0aGUgbG9jayBpZiB0aGVyZSBpcyBubyB3cml0ZXIsIG9yIGlmIHdlIHdyaXRlLW93biBpdCAqLwogICAgIC8qIFRoZSBzZWNvbmQgdGVzdCBhdm9pZHMgYSBzZWxmLWRlYWQgbG9jayBpbiBjYXNlIG9mIGJ1Z2d5IGNvZGUuICovCi0gICAgaWYgKHJ3bG9jay0+d3JpdGVyVGhyZWFkSWQgPT0gMCB8fCByd2xvY2stPndyaXRlclRocmVhZElkID09IHRocmVhZF9pZCkKKyAgICBpZiAocndsb2NrLT53cml0ZXJUaHJlYWRJZCA9PSAwIHx8IHJ3bG9jay0+d3JpdGVyVGhyZWFkSWQgPT0gdGlkKQogICAgICAgICByZXR1cm4gMTsKIAogICAgIC8qIE90aGVyd2lzZSwgd2UgY2FuJ3QgaGF2ZSBpdCAqLwpAQCAtMTgyLDE0ICsxNzEsMTQgQEAKIH0KIAogLyogcmV0dXJucyBUUlVFIGlmZiB3ZSBjYW4gYWNxdWlyZSBhIHdyaXRlIGxvY2suICovCi1zdGF0aWMgX19pbmxpbmVfXyBpbnQgd3JpdGVfcHJlY29uZGl0aW9uKHB0aHJlYWRfcndsb2NrX3QgKnJ3bG9jaywgaW50ICB0aHJlYWRfaWQpCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgd3JpdGVfcHJlY29uZGl0aW9uKHB0aHJlYWRfcndsb2NrX3QqIHJ3bG9jaywgaW50IHRpZCkKIHsKICAgICAvKiBXZSBjYW4gZ2V0IHRoZSBsb2NrIGlmIG5vYm9keSBoYXMgaXQgKi8KICAgICBpZiAocndsb2NrLT5udW1Mb2NrcyA9PSAwKQogICAgICAgICByZXR1cm4gMTsKIAogICAgIC8qIE9yIGlmIHdlIGFscmVhZHkgb3duIGl0ICovCi0gICAgaWYgKHJ3bG9jay0+d3JpdGVyVGhyZWFkSWQgPT0gdGhyZWFkX2lkKQorICAgIGlmIChyd2xvY2stPndyaXRlclRocmVhZElkID09IHRpZCkKICAgICAgICAgcmV0dXJuIDE7CiAKICAgICAvKiBPdGhlcndpc2UsIG5vdCAqLwpAQCAtMjIwLDcgKzIwOSw3IEBACiAgICAgICAgIHJldHVybiBFSU5WQUw7CiAKICAgICBwdGhyZWFkX211dGV4X2xvY2soJnJ3bG9jay0+bG9jayk7Ci0gICAgaWYgKF9fdW5saWtlbHkoIXJlYWRfcHJlY29uZGl0aW9uKHJ3bG9jaywgX19nZXRfdGhyZWFkX2lkKCkpKSkKKyAgICBpZiAoX19wcmVkaWN0X2ZhbHNlKCFyZWFkX3ByZWNvbmRpdGlvbihyd2xvY2ssIF9fZ2V0X3RocmVhZCgpLT50aWQpKSkKICAgICAgICAgcmV0ID0gRUJVU1k7CiAgICAgZWxzZQogICAgICAgICByd2xvY2stPm51bUxvY2tzICsrOwpAQCAtMjMxLDE4ICsyMjAsMTggQEAKIAogaW50IHB0aHJlYWRfcndsb2NrX3RpbWVkcmRsb2NrKHB0aHJlYWRfcndsb2NrX3QgKnJ3bG9jaywgY29uc3Qgc3RydWN0IHRpbWVzcGVjICphYnNfdGltZW91dCkKIHsKLSAgICBpbnQgdGhyZWFkX2lkLCByZXQgPSAwOworICAgIGludCByZXQgPSAwOwogCiAgICAgaWYgKHJ3bG9jayA9PSBOVUxMKQogICAgICAgICByZXR1cm4gRUlOVkFMOwogCiAgICAgcHRocmVhZF9tdXRleF9sb2NrKCZyd2xvY2stPmxvY2spOwotICAgIHRocmVhZF9pZCA9IF9fZ2V0X3RocmVhZF9pZCgpOwotICAgIGlmIChfX3VubGlrZWx5KCFyZWFkX3ByZWNvbmRpdGlvbihyd2xvY2ssIHRocmVhZF9pZCkpKSB7CisgICAgaW50IHRpZCA9IF9fZ2V0X3RocmVhZCgpLT50aWQ7CisgICAgaWYgKF9fcHJlZGljdF9mYWxzZSghcmVhZF9wcmVjb25kaXRpb24ocndsb2NrLCB0aWQpKSkgewogICAgICAgICByd2xvY2stPnBlbmRpbmdSZWFkZXJzICs9IDE7CiAgICAgICAgIGRvIHsKICAgICAgICAgICAgIHJldCA9IHB0aHJlYWRfY29uZF90aW1lZHdhaXQoJnJ3bG9jay0+Y29uZCwgJnJ3bG9jay0+bG9jaywgYWJzX3RpbWVvdXQpOwotICAgICAgICB9IHdoaWxlIChyZXQgPT0gMCAmJiAhcmVhZF9wcmVjb25kaXRpb24ocndsb2NrLCB0aHJlYWRfaWQpKTsKKyAgICAgICAgfSB3aGlsZSAocmV0ID09IDAgJiYgIXJlYWRfcHJlY29uZGl0aW9uKHJ3bG9jaywgdGlkKSk7CiAgICAgICAgIHJ3bG9jay0+cGVuZGluZ1JlYWRlcnMgLT0gMTsKICAgICAgICAgaWYgKHJldCAhPSAwKQogICAgICAgICAgICAgZ290byBFWElUOwpAQCAtMjYxLDE4ICsyNTAsMTggQEAKIAogaW50IHB0aHJlYWRfcndsb2NrX3RyeXdybG9jayhwdGhyZWFkX3J3bG9ja190ICpyd2xvY2spCiB7Ci0gICAgaW50IHRocmVhZF9pZCwgcmV0ID0gMDsKKyAgICBpbnQgcmV0ID0gMDsKIAogICAgIGlmIChyd2xvY2sgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIEVJTlZBTDsKIAogICAgIHB0aHJlYWRfbXV0ZXhfbG9jaygmcndsb2NrLT5sb2NrKTsKLSAgICB0aHJlYWRfaWQgPSBfX2dldF90aHJlYWRfaWQoKTsKLSAgICBpZiAoX191bmxpa2VseSghd3JpdGVfcHJlY29uZGl0aW9uKHJ3bG9jaywgdGhyZWFkX2lkKSkpIHsKKyAgICBpbnQgdGlkID0gX19nZXRfdGhyZWFkKCktPnRpZDsKKyAgICBpZiAoX19wcmVkaWN0X2ZhbHNlKCF3cml0ZV9wcmVjb25kaXRpb24ocndsb2NrLCB0aWQpKSkgewogICAgICAgICByZXQgPSBFQlVTWTsKICAgICB9IGVsc2UgewogICAgICAgICByd2xvY2stPm51bUxvY2tzICsrOwotICAgICAgICByd2xvY2stPndyaXRlclRocmVhZElkID0gdGhyZWFkX2lkOworICAgICAgICByd2xvY2stPndyaXRlclRocmVhZElkID0gdGlkOwogICAgIH0KICAgICBwdGhyZWFkX211dGV4X3VubG9jaygmcndsb2NrLT5sb2NrKTsKICAgICByZXR1cm4gcmV0OwpAQCAtMjgwLDE0ICsyNjksMTQgQEAKIAogaW50IHB0aHJlYWRfcndsb2NrX3RpbWVkd3Jsb2NrKHB0aHJlYWRfcndsb2NrX3QgKnJ3bG9jaywgY29uc3Qgc3RydWN0IHRpbWVzcGVjICphYnNfdGltZW91dCkKIHsKLSAgICBpbnQgdGhyZWFkX2lkLCByZXQgPSAwOworICAgIGludCByZXQgPSAwOwogCiAgICAgaWYgKHJ3bG9jayA9PSBOVUxMKQogICAgICAgICByZXR1cm4gRUlOVkFMOwogCiAgICAgcHRocmVhZF9tdXRleF9sb2NrKCZyd2xvY2stPmxvY2spOwotICAgIHRocmVhZF9pZCA9IF9fZ2V0X3RocmVhZF9pZCgpOwotICAgIGlmIChfX3VubGlrZWx5KCF3cml0ZV9wcmVjb25kaXRpb24ocndsb2NrLCB0aHJlYWRfaWQpKSkgeworICAgIGludCB0aWQgPSBfX2dldF90aHJlYWQoKS0+dGlkOworICAgIGlmIChfX3ByZWRpY3RfZmFsc2UoIXdyaXRlX3ByZWNvbmRpdGlvbihyd2xvY2ssIHRpZCkpKSB7CiAgICAgICAgIC8qIElmIHdlIGNhbid0IHJlYWQgeWV0LCB3YWl0IHVudGlsIHRoZSByd2xvY2sgaXMgdW5sb2NrZWQKICAgICAgICAgICogYW5kIHRyeSBhZ2Fpbi4gSW5jcmVtZW50IHBlbmRpbmdSZWFkZXJzIHRvIGdldCB0aGUKICAgICAgICAgICogY29uZCBicm9hZGNhc3Qgd2hlbiB0aGF0IGhhcHBlbnMuCkBAIC0yOTUsMTMgKzI4NCwxMyBAQAogICAgICAgICByd2xvY2stPnBlbmRpbmdXcml0ZXJzICs9IDE7CiAgICAgICAgIGRvIHsKICAgICAgICAgICAgIHJldCA9IHB0aHJlYWRfY29uZF90aW1lZHdhaXQoJnJ3bG9jay0+Y29uZCwgJnJ3bG9jay0+bG9jaywgYWJzX3RpbWVvdXQpOwotICAgICAgICB9IHdoaWxlIChyZXQgPT0gMCAmJiAhd3JpdGVfcHJlY29uZGl0aW9uKHJ3bG9jaywgdGhyZWFkX2lkKSk7CisgICAgICAgIH0gd2hpbGUgKHJldCA9PSAwICYmICF3cml0ZV9wcmVjb25kaXRpb24ocndsb2NrLCB0aWQpKTsKICAgICAgICAgcndsb2NrLT5wZW5kaW5nV3JpdGVycyAtPSAxOwogICAgICAgICBpZiAocmV0ICE9IDApCiAgICAgICAgICAgICBnb3RvIEVYSVQ7CiAgICAgfQogICAgIHJ3bG9jay0+bnVtTG9ja3MgKys7Ci0gICAgcndsb2NrLT53cml0ZXJUaHJlYWRJZCA9IHRocmVhZF9pZDsKKyAgICByd2xvY2stPndyaXRlclRocmVhZElkID0gdGlkOwogRVhJVDoKICAgICBwdGhyZWFkX211dGV4X3VubG9jaygmcndsb2NrLT5sb2NrKTsKICAgICByZXR1cm4gcmV0OwpAQCAtMzMyLDcgKzMyMSw3IEBACiAgICAgICogbXVzdCBiZSBvdXJzZWx2ZXMuCiAgICAgICovCiAgICAgZWxzZSB7Ci0gICAgICAgIGlmIChyd2xvY2stPndyaXRlclRocmVhZElkICE9IF9fZ2V0X3RocmVhZF9pZCgpKSB7CisgICAgICAgIGlmIChyd2xvY2stPndyaXRlclRocmVhZElkICE9IF9fZ2V0X3RocmVhZCgpLT50aWQpIHsKICAgICAgICAgICAgIHJldCA9IEVQRVJNOwogICAgICAgICAgICAgZ290byBFWElUOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9wdGhyZWFkLXRpbWVycy5jIGIvbGliYy9iaW9uaWMvcHRocmVhZC10aW1lcnMuYwppbmRleCBhZTA0MDI5Li5kODFiZmVmIDEwMDY0NAotLS0gYS9saWJjL2Jpb25pYy9wdGhyZWFkLXRpbWVycy5jCisrKyBiL2xpYmMvYmlvbmljL3B0aHJlYWQtdGltZXJzLmMKQEAgLTksNyArOSw3IEBACiAgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCiAgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAogICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0gKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIAorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQogICogICAgZGlzdHJpYnV0aW9uLgogICoKICAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKQEAgLTE5LDU1ICsxOSw2MiBAQAogICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAogICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKICAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUwotICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIAorICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECiAgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCiAgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKICAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgogICogU1VDSCBEQU1BR0UuCiAgKi8KKwogI2luY2x1ZGUgInB0aHJlYWRfaW50ZXJuYWwuaCIKLSNpbmNsdWRlIDxsaW51eC90aW1lLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+CisKICNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgogCi0vKiBUaGlzIGZpbGUgaW1wbGVtZW50cyB0aGUgc3VwcG9ydCByZXF1aXJlZCB0byBpbXBsZW1lbnQgU0lHRVZfVEhSRUFEIHBvc2l4IAotICogdGltZXJzLiBTZWUgdGhlIGZvbGxvd2luZyBwYWdlcyBmb3IgYWRkaXRpb25uYWwgZGV0YWlsczoKLSAqCi0gKiB3d3cub3Blbmdyb3VwLm9yZy9vbmxpbmVwdWJzLzAwMDA5NTM5OS9mdW5jdGlvbnMvdGltZXJfY3JlYXRlLmh0bWwKLSAqIHd3dy5vcGVuZ3JvdXAub3JnL29ubGluZXB1YnMvMDAwMDk1Mzk5L2Z1bmN0aW9ucy90aW1lcl9zZXR0aW1lLmh0bWwKLSAqIHd3dy5vcGVuZ3JvdXAub3JnL29ubGluZXB1YnMvMDAwMDk1Mzk5L2Z1bmN0aW9ucy94c2hfY2hhcDAyXzA0Lmh0bWwjdGFnXzAyXzA0XzAxCi0gKgotICogVGhlIExpbnV4IGtlcm5lbCBkb2Vzbid0IHN1cHBvcnQgdGhlc2UsIHNvIHdlIG5lZWQgdG8gaW1wbGVtZW50IHRoZW0gaW4gdGhlCi0gKiBDIGxpYnJhcnkuIFdlIHVzZSBhIHZlcnkgYmFzaWMgc2NoZW1lIHdoZXJlIGVhY2ggdGltZXIgaXMgYXNzb2NpYXRlZCB0byBhCi0gKiB0aHJlYWQgdGhhdCB3aWxsIGxvb3AsIHdhaXRpbmcgZm9yIHRpbWVvdXRzIG9yIG1lc3NhZ2VzIGZyb20gdGhlIHByb2dyYW0KLSAqIGNvcnJlc3BvbmRpbmcgdG8gY2FsbHMgdG8gdGltZXJfc2V0dGltZSgpIGFuZCB0aW1lcl9kZWxldGUoKS4KLSAqCi0gKiBOb3RlIGFsc28gYW4gaW1wb3J0YW50IHRoaW5nOiBQb3NpeCBtYW5kYXRlcyB0aGF0IGluIHRoZSBjYXNlIG9mIGZvcmsoKSwKLSAqIHRoZSB0aW1lcnMgb2YgdGhlIGNoaWxkIHByb2Nlc3Mgc2hvdWxkIGJlIGRpc2FybWVkLCBidXQgbm90IGRlbGV0ZWQuCi0gKiB0aGlzIGlzIGltcGxlbWVudGVkIGJ5IHByb3ZpZGluZyBhIGZvcmsoKSB3cmFwcGVyIChzZWUgYmlvbmljL2ZvcmsuYykgd2hpY2gKLSAqIHN0b3BzIGFsbCB0aW1lcnMgYmVmb3JlIHRoZSBmb3JrLCBhbmQgb25seSByZS1zdGFydCB0aGVtIGluIGNhc2Ugb2YgZXJyb3IKLSAqIG9yIGluIHRoZSBwYXJlbnQgcHJvY2Vzcy4KLSAqCi0gKiB0aGUgc3RvcC9zdGFydCBpcyBpbXBsZW1lbnRlZCBieSB0aGUgX190aW1lcl90YWJsZV9zdGFydF9zdG9wKCkgZnVuY3Rpb24KLSAqIGJlbG93LgotICovCitleHRlcm4gaW50IF9fcHRocmVhZF9jb25kX3RpbWVkd2FpdChwdGhyZWFkX2NvbmRfdCosIHB0aHJlYWRfbXV0ZXhfdCosIGNvbnN0IHN0cnVjdCB0aW1lc3BlYyosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9ja2lkX3QpOwogCi0vKiBub3JtYWwgKGkuZS4gbm9uLVNJR0VWX1RIUkVBRCkgdGltZXIgaWRzIGFyZSBjcmVhdGVkIGRpcmVjdGx5IGJ5IHRoZSBrZXJuZWwKLSAqIGFuZCBhcmUgcGFzc2VkIGFzIGlzIHRvL2Zyb20gdGhlIGNhbGxlci4KLSAqCi0gKiBvbiB0aGUgb3RoZXIgaGFuZCwgYSBTSUdFVl9USFJFQUQgdGltZXIgSUQgd2lsbCBoYXZlIGl0cyBUSU1FUl9JRF9XUkFQX0JJVAotICogYWx3YXlzIHNldCB0byAxLiBJbiB0aGlzIGltcGxlbWVudGF0aW9uLCB0aGlzIGlzIGFsd2F5cyBiaXQgMzEsIHdoaWNoIGlzCi0gKiBndWFyYW50ZWVkIHRvIG5ldmVyIGJlIHVzZWQgYnkga2VybmVsLXByb3ZpZGVkIHRpbWVyIGlkcwotICoKLSAqIChzZWUgY29kZSBpbiA8a2VybmVsPi9saWIvaWRyLmMsIHVzZWQgdG8gbWFuYWdlIElEcywgdG8gc2VlIHdoeSkKLSAqLworZXh0ZXJuIGludCBfX3B0aHJlYWRfY29uZF90aW1lZHdhaXRfcmVsYXRpdmUocHRocmVhZF9jb25kX3QqLCBwdGhyZWFkX211dGV4X3QqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHRpbWVzcGVjKik7CisKKy8vIE5vcm1hbCAoaS5lLiBub24tU0lHRVZfVEhSRUFEKSB0aW1lcnMgYXJlIGNyZWF0ZWQgZGlyZWN0bHkgYnkgdGhlIGtlcm5lbAorLy8gYW5kIGFyZSBwYXNzZWQgYXMgaXMgdG8vZnJvbSB0aGUgY2FsbGVyLgorLy8KKy8vIFRoaXMgZmlsZSBhbHNvIGltcGxlbWVudHMgdGhlIHN1cHBvcnQgcmVxdWlyZWQgZm9yIFNJR0VWX1RIUkVBRCAoIlBPU0lYIGludGVydmFsIikKKy8vIHRpbWVycy4gU2VlIHRoZSBmb2xsb3dpbmcgcGFnZXMgZm9yIGFkZGl0aW9uYWwgZGV0YWlsczoKKy8vCisvLyB3d3cub3Blbmdyb3VwLm9yZy9vbmxpbmVwdWJzLzAwMDA5NTM5OS9mdW5jdGlvbnMvdGltZXJfY3JlYXRlLmh0bWwKKy8vIHd3dy5vcGVuZ3JvdXAub3JnL29ubGluZXB1YnMvMDAwMDk1Mzk5L2Z1bmN0aW9ucy90aW1lcl9zZXR0aW1lLmh0bWwKKy8vIHd3dy5vcGVuZ3JvdXAub3JnL29ubGluZXB1YnMvMDAwMDk1Mzk5L2Z1bmN0aW9ucy94c2hfY2hhcDAyXzA0Lmh0bWwjdGFnXzAyXzA0XzAxCisvLworLy8gVGhlIExpbnV4IGtlcm5lbCBkb2Vzbid0IHN1cHBvcnQgdGhlc2UsIHNvIHdlIG5lZWQgdG8gaW1wbGVtZW50IHRoZW0gaW4gdGhlCisvLyBDIGxpYnJhcnkuIFdlIHVzZSBhIHZlcnkgYmFzaWMgc2NoZW1lIHdoZXJlIGVhY2ggdGltZXIgaXMgYXNzb2NpYXRlZCB0byBhCisvLyB0aHJlYWQgdGhhdCB3aWxsIGxvb3AsIHdhaXRpbmcgZm9yIHRpbWVvdXRzIG9yIG1lc3NhZ2VzIGZyb20gdGhlIHByb2dyYW0KKy8vIGNvcnJlc3BvbmRpbmcgdG8gY2FsbHMgdG8gdGltZXJfc2V0dGltZSgpIGFuZCB0aW1lcl9kZWxldGUoKS4KKy8vCisvLyBOb3RlIGFsc28gYW4gaW1wb3J0YW50IHRoaW5nOiBQb3NpeCBtYW5kYXRlcyB0aGF0IGluIHRoZSBjYXNlIG9mIGZvcmsoKSwKKy8vIHRoZSB0aW1lcnMgb2YgdGhlIGNoaWxkIHByb2Nlc3Mgc2hvdWxkIGJlIGRpc2FybWVkLCBidXQgbm90IGRlbGV0ZWQuCisvLyB0aGlzIGlzIGltcGxlbWVudGVkIGJ5IHByb3ZpZGluZyBhIGZvcmsoKSB3cmFwcGVyIChzZWUgYmlvbmljL2ZvcmsuYykgd2hpY2gKKy8vIHN0b3BzIGFsbCB0aW1lcnMgYmVmb3JlIHRoZSBmb3JrLCBhbmQgb25seSByZS1zdGFydCB0aGVtIGluIGNhc2Ugb2YgZXJyb3IKKy8vIG9yIGluIHRoZSBwYXJlbnQgcHJvY2Vzcy4KKy8vCisvLyBUaGlzIHN0b3Avc3RhcnQgaXMgaW1wbGVtZW50ZWQgYnkgdGhlIF9fdGltZXJfdGFibGVfc3RhcnRfc3RvcCgpIGZ1bmN0aW9uCisvLyBiZWxvdy4KKy8vCisvLyBBIFNJR0VWX1RIUkVBRCB0aW1lciBJRCB3aWxsIGFsd2F5cyBoYXZlIGl0cyBUSU1FUl9JRF9XUkFQX0JJVAorLy8gc2V0IHRvIDEuIEluIHRoaXMgaW1wbGVtZW50YXRpb24sIHRoaXMgaXMgYWx3YXlzIGJpdCAzMSwgd2hpY2ggaXMKKy8vIGd1YXJhbnRlZWQgdG8gbmV2ZXIgYmUgdXNlZCBieSBrZXJuZWwtcHJvdmlkZWQgdGltZXIgaWRzCisvLworLy8gKFNlZSBjb2RlIGluIDxrZXJuZWw+L2xpYi9pZHIuYywgdXNlZCB0byBtYW5hZ2UgSURzLCB0byBzZWUgd2h5LikKIAogI2RlZmluZSAgVElNRVJfSURfV1JBUF9CSVQgICAgICAgIDB4ODAwMDAwMDAKICNkZWZpbmUgIFRJTUVSX0lEX1dSQVAoaWQpICAgICAgICAoKHRpbWVyX3QpKChpZCkgfCAgVElNRVJfSURfV1JBUF9CSVQpKQogI2RlZmluZSAgVElNRVJfSURfVU5XUkFQKGlkKSAgICAgICgodGltZXJfdCkoKGlkKSAmIH5USU1FUl9JRF9XUkFQX0JJVCkpCiAjZGVmaW5lICBUSU1FUl9JRF9JU19XUkFQUEVEKGlkKSAgKCgoaWQpICYgVElNRVJfSURfV1JBUF9CSVQpICE9IDApCiAKLS8qIHRoaXMgdmFsdWUgaXMgdXNlZCBpbnRlcm5hbGx5IHRvIGluZGljYXRlIGEgJ2ZyZWUnIG9yICd6b21iaWUnIAorLyogdGhpcyB2YWx1ZSBpcyB1c2VkIGludGVybmFsbHkgdG8gaW5kaWNhdGUgYSAnZnJlZScgb3IgJ3pvbWJpZScKICAqIHRocl90aW1lciBzdHJ1Y3R1cmUuIEhlcmUsICd6b21iaWUnIG1lYW5zIHRoYXQgdGltZXJfZGVsZXRlKCkKICAqIGhhcyBiZWVuIGNhbGxlZCwgYnV0IHRoYXQgdGhlIGNvcnJlc3BvbmRpbmcgdGhyZWFkIGhhc24ndAogICogZXhpdGVkIHlldC4KQEAgLTgwLDkgKzg3LDYgQEAKIC8qIHRoZSBtYXhpbXVtIHZhbHVlIG9mIG92ZXJydW4gY291bnRlcnMgKi8KICNkZWZpbmUgIERFTEFZVElNRVJfTUFYICAgIDB4N2ZmZmZmZmYKIAotI2RlZmluZSAgX19saWtlbHkoeCkgICBfX2J1aWx0aW5fZXhwZWN0KCEhKHgpLDEpCi0jZGVmaW5lICBfX3VubGlrZWx5KHgpIF9fYnVpbHRpbl9leHBlY3QoISEoeCksMCkKLQogdHlwZWRlZiBzdHJ1Y3QgdGhyX3RpbWVyICAgICAgICAgIHRocl90aW1lcl90OwogdHlwZWRlZiBzdHJ1Y3QgdGhyX3RpbWVyX3RhYmxlICAgIHRocl90aW1lcl90YWJsZV90OwogCkBAIC0xNzEsMjUgKzE3NSwyMyBAQAogfQogCiAKLXN0YXRpYyB2b2lkCi10aHJfdGltZXJfdGFibGVfc3RhcnRfc3RvcCggdGhyX3RpbWVyX3RhYmxlX3QqICB0LCBpbnQgIHN0b3AgKQotewotICAgIGludCAgbm47CitzdGF0aWMgdm9pZCB0aHJfdGltZXJfdGFibGVfc3RhcnRfc3RvcCh0aHJfdGltZXJfdGFibGVfdCogdCwgaW50IHN0b3ApIHsKKyAgaWYgKHQgPT0gTlVMTCkgeworICAgIHJldHVybjsKKyAgfQogCi0gICAgcHRocmVhZF9tdXRleF9sb2NrKCZ0LT5sb2NrKTsKLQotICAgIGZvciAobm4gPSAwOyBubiA8IE1BWF9USFJFQURfVElNRVJTOyBubisrKSB7Ci0gICAgICAgIHRocl90aW1lcl90KiAgdGltZXIgID0gJnQtPnRpbWVyc1tubl07Ci0KLSAgICAgICAgaWYgKFRJTUVSX0lEX0lTX1ZBTElEKHRpbWVyLT5pZCkpIHsKLSAgICAgICAgICAgIC8qIHRlbGwgdGhlIHRocmVhZCB0byBzdGFydC9zdG9wICovCi0gICAgICAgICAgICBwdGhyZWFkX211dGV4X2xvY2soJnRpbWVyLT5tdXRleCk7Ci0gICAgICAgICAgICB0aW1lci0+c3RvcHBlZCA9IHN0b3A7Ci0gICAgICAgICAgICBwdGhyZWFkX2NvbmRfc2lnbmFsKCAmdGltZXItPmNvbmQgKTsKLSAgICAgICAgICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZ0aW1lci0+bXV0ZXgpOwotICAgICAgICB9CisgIHB0aHJlYWRfbXV0ZXhfbG9jaygmdC0+bG9jayk7CisgIGZvciAoaW50IG5uID0gMDsgbm4gPCBNQVhfVEhSRUFEX1RJTUVSUzsgKytubikgeworICAgIHRocl90aW1lcl90KiAgdGltZXIgID0gJnQtPnRpbWVyc1tubl07CisgICAgaWYgKFRJTUVSX0lEX0lTX1ZBTElEKHRpbWVyLT5pZCkpIHsKKyAgICAgIC8vIFRlbGwgdGhlIHRocmVhZCB0byBzdGFydC9zdG9wLgorICAgICAgcHRocmVhZF9tdXRleF9sb2NrKCZ0aW1lci0+bXV0ZXgpOworICAgICAgdGltZXItPnN0b3BwZWQgPSBzdG9wOworICAgICAgcHRocmVhZF9jb25kX3NpZ25hbCggJnRpbWVyLT5jb25kICk7CisgICAgICBwdGhyZWFkX211dGV4X3VubG9jaygmdGltZXItPm11dGV4KTsKICAgICB9Ci0gICAgcHRocmVhZF9tdXRleF91bmxvY2soJnQtPmxvY2spOworICB9CisgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZ0LT5sb2NrKTsKIH0KIAogCkBAIC0yMzQsMjMgKzIzNiwxOSBAQAogICogcHJldHR5IGluZnJlcXVlbnQKICAqLwogCi1zdGF0aWMgcHRocmVhZF9vbmNlX3QgICAgICBfX3RpbWVyX3RhYmxlX29uY2UgPSBQVEhSRUFEX09OQ0VfSU5JVDsKLXN0YXRpYyB0aHJfdGltZXJfdGFibGVfdCogIF9fdGltZXJfdGFibGU7CitzdGF0aWMgcHRocmVhZF9vbmNlX3QgX190aW1lcl90YWJsZV9vbmNlID0gUFRIUkVBRF9PTkNFX0lOSVQ7CitzdGF0aWMgdGhyX3RpbWVyX3RhYmxlX3QqIF9fdGltZXJfdGFibGU7CiAKLXN0YXRpYyB2b2lkCi1fX3RpbWVyX3RhYmxlX2luaXQoIHZvaWQgKQotewotICAgIF9fdGltZXJfdGFibGUgPSBjYWxsb2MoMSxzaXplb2YoKl9fdGltZXJfdGFibGUpKTsKLQotICAgIGlmIChfX3RpbWVyX3RhYmxlICE9IE5VTEwpCi0gICAgICAgIHRocl90aW1lcl90YWJsZV9pbml0KCBfX3RpbWVyX3RhYmxlICk7CitzdGF0aWMgdm9pZCBfX3RpbWVyX3RhYmxlX2luaXQodm9pZCkgeworICBfX3RpbWVyX3RhYmxlID0gY2FsbG9jKDEsIHNpemVvZigqX190aW1lcl90YWJsZSkpOworICBpZiAoX190aW1lcl90YWJsZSAhPSBOVUxMKSB7CisgICAgdGhyX3RpbWVyX3RhYmxlX2luaXQoX190aW1lcl90YWJsZSk7CisgIH0KIH0KIAotc3RhdGljIHRocl90aW1lcl90YWJsZV90KgotX190aW1lcl90YWJsZV9nZXQodm9pZCkKLXsKLSAgICBwdGhyZWFkX29uY2UoICZfX3RpbWVyX3RhYmxlX29uY2UsIF9fdGltZXJfdGFibGVfaW5pdCApOwotICAgIHJldHVybiBfX3RpbWVyX3RhYmxlOworc3RhdGljIHRocl90aW1lcl90YWJsZV90KiBfX3RpbWVyX3RhYmxlX2dldCh2b2lkKSB7CisgIHB0aHJlYWRfb25jZSgmX190aW1lcl90YWJsZV9vbmNlLCBfX3RpbWVyX3RhYmxlX2luaXQpOworICByZXR1cm4gX190aW1lcl90YWJsZTsKIH0KIAogLyoqIFBPU0lYIFRIUkVBRCBUSU1FUlMgQ0xFQU5VUCBPTiBGT1JLCkBAIC0yNjAsMTMgKzI1OCw5IEBACiAgKiogcmVxdWlyZW1lbnRzOiB0aGUgdGltZXJzIG9mIGZvcmsgY2hpbGQgcHJvY2Vzc2VzIG11c3QgYmUKICAqKiBkaXNhcm1lZCBidXQgbm90IGRlbGV0ZWQuCiAgKiovCi1fX0xJQkNfSElEREVOX18gdm9pZAotX190aW1lcl90YWJsZV9zdGFydF9zdG9wKCBpbnQgIHN0b3AgKQotewotICAgIGlmIChfX3RpbWVyX3RhYmxlICE9IE5VTEwpIHsKLSAgICAgICAgdGhyX3RpbWVyX3RhYmxlX3QqICB0YWJsZSA9IF9fdGltZXJfdGFibGVfZ2V0KCk7Ci0gICAgICAgIHRocl90aW1lcl90YWJsZV9zdGFydF9zdG9wKHRhYmxlLCBzdG9wKTsKLSAgICB9CitfX0xJQkNfSElEREVOX18gdm9pZCBfX3RpbWVyX3RhYmxlX3N0YXJ0X3N0b3AoaW50IHN0b3ApIHsKKyAgLy8gV2UgYWNjZXNzIF9fdGltZXJfdGFibGUgZGlyZWN0bHkgc28gd2UgZG9uJ3QgY3JlYXRlIGl0IGlmIGl0IGRvZXNuJ3QgeWV0IGV4aXN0LgorICB0aHJfdGltZXJfdGFibGVfc3RhcnRfc3RvcChfX3RpbWVyX3RhYmxlLCBzdG9wKTsKIH0KIAogc3RhdGljIHRocl90aW1lcl90KgpAQCAtMjkxLDk0ICsyODUsMTI4IEBACiAgICAgcHRocmVhZF9tdXRleF91bmxvY2soJnQtPm11dGV4KTsKIH0KIAorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIHRpbWVzcGVjX2FkZChzdHJ1Y3QgdGltZXNwZWMqIGEsIGNvbnN0IHN0cnVjdCB0aW1lc3BlYyogYikgeworICBhLT50dl9zZWMgICs9IGItPnR2X3NlYzsKKyAgYS0+dHZfbnNlYyArPSBiLT50dl9uc2VjOworICBpZiAoYS0+dHZfbnNlYyA+PSAxMDAwMDAwMDAwKSB7CisgICAgYS0+dHZfbnNlYyAtPSAxMDAwMDAwMDAwOworICAgIGEtPnR2X3NlYyAgKz0gMTsKKyAgfQorfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIHRpbWVzcGVjX3N1YihzdHJ1Y3QgdGltZXNwZWMqIGEsIGNvbnN0IHN0cnVjdCB0aW1lc3BlYyogYikgeworICBhLT50dl9zZWMgIC09IGItPnR2X3NlYzsKKyAgYS0+dHZfbnNlYyAtPSBiLT50dl9uc2VjOworICBpZiAoYS0+dHZfbnNlYyA8IDApIHsKKyAgICBhLT50dl9uc2VjICs9IDEwMDAwMDAwMDA7CisgICAgYS0+dHZfc2VjICAtPSAxOworICB9Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgdGltZXNwZWNfemVybyhzdHJ1Y3QgdGltZXNwZWMqIGEpIHsKKyAgYS0+dHZfc2VjID0gYS0+dHZfbnNlYyA9IDA7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCB0aW1lc3BlY19pc196ZXJvKGNvbnN0IHN0cnVjdCB0aW1lc3BlYyogYSkgeworICByZXR1cm4gKGEtPnR2X3NlYyA9PSAwICYmIGEtPnR2X25zZWMgPT0gMCk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCB0aW1lc3BlY19jbXAoY29uc3Qgc3RydWN0IHRpbWVzcGVjKiBhLCBjb25zdCBzdHJ1Y3QgdGltZXNwZWMqIGIpIHsKKyAgaWYgKGEtPnR2X3NlYyAgPCBiLT50dl9zZWMpICByZXR1cm4gLTE7CisgIGlmIChhLT50dl9zZWMgID4gYi0+dHZfc2VjKSAgcmV0dXJuICsxOworICBpZiAoYS0+dHZfbnNlYyA8IGItPnR2X25zZWMpIHJldHVybiAtMTsKKyAgaWYgKGEtPnR2X25zZWMgPiBiLT50dl9uc2VjKSByZXR1cm4gKzE7CisgIHJldHVybiAwOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgdGltZXNwZWNfY21wMChjb25zdCBzdHJ1Y3QgdGltZXNwZWMqIGEpIHsKKyAgaWYgKGEtPnR2X3NlYyA8IDApIHJldHVybiAtMTsKKyAgaWYgKGEtPnR2X3NlYyA+IDApIHJldHVybiArMTsKKyAgaWYgKGEtPnR2X25zZWMgPCAwKSByZXR1cm4gLTE7CisgIGlmIChhLT50dl9uc2VjID4gMCkgcmV0dXJuICsxOworICByZXR1cm4gMDsKK30KKwogLyoqIFBPU0lYIFRJTUVSUyBBUElzICovCiAKLS8qIGZpcnN0LCBkZWNsYXJlIHRoZSBzeXNjYWxsIHN0dWJzICovCi1leHRlcm4gaW50IF9fdGltZXJfY3JlYXRlKCBjbG9ja2lkX3QsIHN0cnVjdCBzaWdldmVudCosIHRpbWVyX3QqICk7Ci1leHRlcm4gaW50IF9fdGltZXJfZGVsZXRlKCB0aW1lcl90ICk7Ci1leHRlcm4gaW50IF9fdGltZXJfZ2V0dGltZSggdGltZXJfdCwgc3RydWN0IGl0aW1lcnNwZWMqICk7Ci1leHRlcm4gaW50IF9fdGltZXJfc2V0dGltZSggdGltZXJfdCwgaW50LCBjb25zdCBzdHJ1Y3QgaXRpbWVyc3BlYyosIHN0cnVjdCBpdGltZXJzcGVjKiApOworZXh0ZXJuIGludCBfX3RpbWVyX2NyZWF0ZShjbG9ja2lkX3QsIHN0cnVjdCBzaWdldmVudCosIHRpbWVyX3QqKTsKK2V4dGVybiBpbnQgX190aW1lcl9kZWxldGUodGltZXJfdCk7CitleHRlcm4gaW50IF9fdGltZXJfZ2V0dGltZSh0aW1lcl90LCBzdHJ1Y3QgaXRpbWVyc3BlYyopOworZXh0ZXJuIGludCBfX3RpbWVyX3NldHRpbWUodGltZXJfdCwgaW50LCBjb25zdCBzdHJ1Y3QgaXRpbWVyc3BlYyosIHN0cnVjdCBpdGltZXJzcGVjKik7CiBleHRlcm4gaW50IF9fdGltZXJfZ2V0b3ZlcnJ1bih0aW1lcl90KTsKIAotc3RhdGljIHZvaWQqICB0aW1lcl90aHJlYWRfc3RhcnQoIHZvaWQqICk7CitzdGF0aWMgdm9pZCogdGltZXJfdGhyZWFkX3N0YXJ0KHZvaWQqKTsKIAotLyogdGhlbiB0aGUgd3JhcHBlcnMgdGhlbXNlbHZlcyAqLwotaW50Ci10aW1lcl9jcmVhdGUoIGNsb2NraWRfdCAgY2xvY2tpZCwgc3RydWN0IHNpZ2V2ZW50KiAgZXZwLCB0aW1lcl90ICAqcHRpbWVyaWQpCi17Ci0gICAgLyogaWYgbm90IGEgU0lHRVZfVEhSRUFEIHRpbWVyLCBkaXJlY3QgY3JlYXRpb24gYnkgdGhlIGtlcm5lbCAqLwotICAgIGlmIChfX2xpa2VseShldnAgPT0gTlVMTCB8fCBldnAtPnNpZ2V2X25vdGlmeSAhPSBTSUdFVl9USFJFQUQpKQotICAgICAgICByZXR1cm4gX190aW1lcl9jcmVhdGUoIGNsb2NraWQsIGV2cCwgcHRpbWVyaWQgKTsKK2ludCB0aW1lcl9jcmVhdGUoY2xvY2tpZF90IGNsb2NrX2lkLCBzdHJ1Y3Qgc2lnZXZlbnQqIGV2cCwgdGltZXJfdCogdGltZXJfaWQpIHsKKyAgLy8gSWYgbm90IGEgU0lHRVZfVEhSRUFEIHRpbWVyLCB0aGUga2VybmVsIGNhbiBoYW5kbGUgaXQgd2l0aG91dCBvdXIgaGVscC4KKyAgaWYgKF9fcHJlZGljdF90cnVlKGV2cCA9PSBOVUxMIHx8IGV2cC0+c2lnZXZfbm90aWZ5ICE9IFNJR0VWX1RIUkVBRCkpIHsKKyAgICByZXR1cm4gX190aW1lcl9jcmVhdGUoY2xvY2tfaWQsIGV2cCwgdGltZXJfaWQpOworICB9CiAKLSAgICAvLyBjaGVjayBhcmd1bWVudHMKLSAgICBpZiAoZXZwLT5zaWdldl9ub3RpZnlfZnVuY3Rpb24gPT0gTlVMTCkgewotICAgICAgICBlcnJubyA9IEVJTlZBTDsKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KKyAgLy8gQ2hlY2sgYXJndW1lbnRzLgorICBpZiAoZXZwLT5zaWdldl9ub3RpZnlfZnVuY3Rpb24gPT0gTlVMTCkgeworICAgIGVycm5vID0gRUlOVkFMOworICAgIHJldHVybiAtMTsKKyAgfQogCi0gICAgewotICAgICAgICBzdHJ1Y3QgdGltZXNwZWMgIGR1bW15OworICAvLyBDaGVjayB0aGF0IHRoZSBjbG9jayBpZCBpcyBzdXBwb3J0ZWQgYnkgdGhlIGtlcm5lbC4KKyAgc3RydWN0IHRpbWVzcGVjIGR1bW15OworICBpZiAoY2xvY2tfZ2V0dGltZShjbG9ja19pZCwgJmR1bW15KSA8IDAgJiYgZXJybm8gPT0gRUlOVkFMKSB7CisgICAgcmV0dXJuIC0xOworICB9CiAKLSAgICAgICAgLyogY2hlY2sgdGhhdCB0aGUgY2xvY2sgaWQgaXMgc3VwcG9ydGVkIGJ5IHRoZSBrZXJuZWwgKi8KLSAgICAgICAgaWYgKGNsb2NrX2dldHRpbWUoIGNsb2NraWQsICZkdW1teSApIDwgMCAmJiBlcnJubyA9PSBFSU5WQUwgKQotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KKyAgLy8gQ3JlYXRlIGEgbmV3IHRpbWVyIGFuZCBpdHMgdGhyZWFkLgorICAvLyBUT0RPOiB1c2UgYSBzaW5nbGUgZ2xvYmFsIHRocmVhZCBmb3IgYWxsIHRpbWVycy4KKyAgdGhyX3RpbWVyX3RhYmxlX3QqIHRhYmxlID0gX190aW1lcl90YWJsZV9nZXQoKTsKKyAgdGhyX3RpbWVyX3QqIHRpbWVyID0gdGhyX3RpbWVyX3RhYmxlX2FsbG9jKHRhYmxlKTsKKyAgaWYgKHRpbWVyID09IE5VTEwpIHsKKyAgICBlcnJubyA9IEVOT01FTTsKKyAgICByZXR1cm4gLTE7CisgIH0KIAotICAgIC8qIGNyZWF0ZSBhIG5ldyB0aW1lciBhbmQgaXRzIHRocmVhZCAqLwotICAgIHsKLSAgICAgICAgdGhyX3RpbWVyX3RhYmxlX3QqICB0YWJsZSA9IF9fdGltZXJfdGFibGVfZ2V0KCk7Ci0gICAgICAgIHRocl90aW1lcl90KiAgICAgICAgdGltZXIgPSB0aHJfdGltZXJfdGFibGVfYWxsb2MoIHRhYmxlICk7Ci0gICAgICAgIHN0cnVjdCBzaWdldmVudCAgICAgZXZwMDsKKyAgLy8gQ29weSB0aGUgdGhyZWFkIGF0dHJpYnV0ZXMuCisgIGlmIChldnAtPnNpZ2V2X25vdGlmeV9hdHRyaWJ1dGVzID09IE5VTEwpIHsKKyAgICBwdGhyZWFkX2F0dHJfaW5pdCgmdGltZXItPmF0dHJpYnV0ZXMpOworICB9IGVsc2UgeworICAgIHRpbWVyLT5hdHRyaWJ1dGVzID0gKChwdGhyZWFkX2F0dHJfdCopIGV2cC0+c2lnZXZfbm90aWZ5X2F0dHJpYnV0ZXMpWzBdOworICB9CiAKLSAgICAgICAgaWYgKHRpbWVyID09IE5VTEwpIHsKLSAgICAgICAgICAgIGVycm5vID0gRU5PTUVNOwotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICB9CisgIC8vIFBvc2l4IHNheXMgdGhhdCB0aGUgZGVmYXVsdCBpcyBQVEhSRUFEX0NSRUFURV9ERVRBQ0hFRCBhbmQKKyAgLy8gdGhhdCBQVEhSRUFEX0NSRUFURV9KT0lOQUJMRSBoYXMgdW5kZWZpbmVkIGJlaGF2aW9yLgorICAvLyBTbyBzaW1wbHkgYWx3YXlzIHVzZSBERVRBQ0hFRCA6LSkKKyAgcHRocmVhZF9hdHRyX3NldGRldGFjaHN0YXRlKCZ0aW1lci0+YXR0cmlidXRlcywgUFRIUkVBRF9DUkVBVEVfREVUQUNIRUQpOwogCi0gICAgICAgIC8qIGNvcHkgdGhlIHRocmVhZCBhdHRyaWJ1dGVzICovCi0gICAgICAgIGlmIChldnAtPnNpZ2V2X25vdGlmeV9hdHRyaWJ1dGVzID09IE5VTEwpIHsKLSAgICAgICAgICAgIHB0aHJlYWRfYXR0cl9pbml0KCZ0aW1lci0+YXR0cmlidXRlcyk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICB0aW1lci0+YXR0cmlidXRlcyA9ICgocHRocmVhZF9hdHRyX3QqKWV2cC0+c2lnZXZfbm90aWZ5X2F0dHJpYnV0ZXMpWzBdOwotICAgICAgICB9CisgIHRpbWVyLT5jYWxsYmFjayA9IGV2cC0+c2lnZXZfbm90aWZ5X2Z1bmN0aW9uOworICB0aW1lci0+dmFsdWUgPSBldnAtPnNpZ2V2X3ZhbHVlOworICB0aW1lci0+Y2xvY2sgPSBjbG9ja19pZDsKIAotICAgICAgICAvKiBQb3NpeCBzYXlzIHRoYXQgdGhlIGRlZmF1bHQgaXMgUFRIUkVBRF9DUkVBVEVfREVUQUNIRUQgYW5kCi0gICAgICAgICAqIHRoYXQgUFRIUkVBRF9DUkVBVEVfSk9JTkFCTEUgaGFzIHVuZGVmaW5lZCBiZWhhdmlvdXIuCi0gICAgICAgICAqIFNvIHNpbXBseSBhbHdheXMgdXNlIERFVEFDSEVEIDotKQotICAgICAgICAgKi8KLSAgICAgICAgcHRocmVhZF9hdHRyX3NldGRldGFjaHN0YXRlKCZ0aW1lci0+YXR0cmlidXRlcywgUFRIUkVBRF9DUkVBVEVfREVUQUNIRUQpOworICBwdGhyZWFkX211dGV4X2luaXQoJnRpbWVyLT5tdXRleCwgTlVMTCk7CisgIHB0aHJlYWRfY29uZF9pbml0KCZ0aW1lci0+Y29uZCwgTlVMTCk7CiAKLSAgICAgICAgdGltZXItPmNhbGxiYWNrID0gZXZwLT5zaWdldl9ub3RpZnlfZnVuY3Rpb247Ci0gICAgICAgIHRpbWVyLT52YWx1ZSAgICA9IGV2cC0+c2lnZXZfdmFsdWU7Ci0gICAgICAgIHRpbWVyLT5jbG9jayAgICA9IGNsb2NraWQ7CisgIHRpbWVyLT5kb25lID0gMDsKKyAgdGltZXItPnN0b3BwZWQgPSAwOworICB0aW1lci0+ZXhwaXJlcy50dl9zZWMgPSB0aW1lci0+ZXhwaXJlcy50dl9uc2VjID0gMDsKKyAgdGltZXItPnBlcmlvZC50dl9zZWMgPSB0aW1lci0+cGVyaW9kLnR2X25zZWMgID0gMDsKKyAgdGltZXItPm92ZXJydW5zID0gMDsKIAotICAgICAgICBwdGhyZWFkX211dGV4X2luaXQoICZ0aW1lci0+bXV0ZXgsIE5VTEwgKTsKLSAgICAgICAgcHRocmVhZF9jb25kX2luaXQoICZ0aW1lci0+Y29uZCwgTlVMTCApOworICAvLyBDcmVhdGUgdGhlIHRocmVhZC4KKyAgaW50IHJjID0gcHRocmVhZF9jcmVhdGUoJnRpbWVyLT50aHJlYWQsICZ0aW1lci0+YXR0cmlidXRlcywgdGltZXJfdGhyZWFkX3N0YXJ0LCB0aW1lcik7CisgIGlmIChyYyAhPSAwKSB7CisgICAgdGhyX3RpbWVyX3RhYmxlX2ZyZWUodGFibGUsIHRpbWVyKTsKKyAgICBlcnJubyA9IHJjOworICAgIHJldHVybiAtMTsKKyAgfQogCi0gICAgICAgIHRpbWVyLT5kb25lICAgICAgICAgICA9IDA7Ci0gICAgICAgIHRpbWVyLT5zdG9wcGVkICAgICAgICA9IDA7Ci0gICAgICAgIHRpbWVyLT5leHBpcmVzLnR2X3NlYyA9IHRpbWVyLT5leHBpcmVzLnR2X25zZWMgPSAwOwotICAgICAgICB0aW1lci0+cGVyaW9kLnR2X3NlYyAgPSB0aW1lci0+cGVyaW9kLnR2X25zZWMgID0gMDsKLSAgICAgICAgdGltZXItPm92ZXJydW5zICAgICAgID0gMDsKLQotICAgICAgICAvKiBjcmVhdGUgdGhlIHRocmVhZCAqLwotICAgICAgICBpZiAocHRocmVhZF9jcmVhdGUoICZ0aW1lci0+dGhyZWFkLCAmdGltZXItPmF0dHJpYnV0ZXMsIHRpbWVyX3RocmVhZF9zdGFydCwgdGltZXIgKSA8IDApIHsKLSAgICAgICAgICAgIHRocl90aW1lcl90YWJsZV9mcmVlKCBfX3RpbWVyX3RhYmxlLCB0aW1lciApOwotICAgICAgICAgICAgZXJybm8gPSBFTk9NRU07Ci0gICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIH0KLQotICAgICAgICAqcHRpbWVyaWQgPSB0aW1lci0+aWQ7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KKyAgKnRpbWVyX2lkID0gdGltZXItPmlkOworICByZXR1cm4gMDsKIH0KIAogCiBpbnQKIHRpbWVyX2RlbGV0ZSggdGltZXJfdCAgaWQgKQogewotICAgIGlmICggX19saWtlbHkoIVRJTUVSX0lEX0lTX1dSQVBQRUQoaWQpKSApCisgICAgaWYgKCBfX3ByZWRpY3RfdHJ1ZSghVElNRVJfSURfSVNfV1JBUFBFRChpZCkpICkKICAgICAgICAgcmV0dXJuIF9fdGltZXJfZGVsZXRlKCBpZCApOwogICAgIGVsc2UKICAgICB7CkBAIC00MTQsNyArNDQyLDcgQEAKICAgICBzdHJ1Y3QgdGltZXNwZWMgIGRpZmY7CiAKICAgICBkaWZmID0gdGltZXItPmV4cGlyZXM7Ci0gICAgaWYgKCF0aW1lc3BlY19pc196ZXJvKCZkaWZmKSkgCisgICAgaWYgKCF0aW1lc3BlY19pc196ZXJvKCZkaWZmKSkKICAgICB7CiAgICAgICAgIHN0cnVjdCB0aW1lc3BlYyAgbm93OwogCkBAIC00NDAsNyArNDY4LDcgQEAKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KIAotICAgIGlmICggX19saWtlbHkoIVRJTUVSX0lEX0lTX1dSQVBQRUQoaWQpKSApIHsKKyAgICBpZiAoIF9fcHJlZGljdF90cnVlKCFUSU1FUl9JRF9JU19XUkFQUEVEKGlkKSkgKSB7CiAgICAgICAgIHJldHVybiBfX3RpbWVyX2dldHRpbWUoIGlkLCBvc3BlYyApOwogICAgIH0gZWxzZSB7CiAgICAgICAgIHRocl90aW1lcl90KiAgdGltZXIgPSB0aHJfdGltZXJfZnJvbV9pZChpZCk7CkBAIC00NjgsNyArNDk2LDcgQEAKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KIAotICAgIGlmICggX19saWtlbHkoIVRJTUVSX0lEX0lTX1dSQVBQRUQoaWQpKSApIHsKKyAgICBpZiAoIF9fcHJlZGljdF90cnVlKCFUSU1FUl9JRF9JU19XUkFQUEVEKGlkKSkgKSB7CiAgICAgICAgIHJldHVybiBfX3RpbWVyX3NldHRpbWUoIGlkLCBmbGFncywgc3BlYywgb3NwZWMgKTsKICAgICB9IGVsc2UgewogICAgICAgICB0aHJfdGltZXJfdCogICAgICAgIHRpbWVyID0gdGhyX3RpbWVyX2Zyb21faWQoaWQpOwpAQCAtNTEyLDcgKzU0MCw3IEBACiBpbnQKIHRpbWVyX2dldG92ZXJydW4odGltZXJfdCAgaWQpCiB7Ci0gICAgaWYgKCBfX2xpa2VseSghVElNRVJfSURfSVNfV1JBUFBFRChpZCkpICkgeworICAgIGlmICggX19wcmVkaWN0X3RydWUoIVRJTUVSX0lEX0lTX1dSQVBQRUQoaWQpKSApIHsKICAgICAgICAgcmV0dXJuIF9fdGltZXJfZ2V0b3ZlcnJ1biggaWQgKTsKICAgICB9IGVsc2UgewogICAgICAgICB0aHJfdGltZXJfdCogIHRpbWVyID0gdGhyX3RpbWVyX2Zyb21faWQoaWQpOwpAQCAtNTMyLDEwOCArNTYwLDkzIEBACiB9CiAKIAotc3RhdGljIHZvaWQqCi10aW1lcl90aHJlYWRfc3RhcnQoIHZvaWQqICBfYXJnICkKLXsKLSAgICB0aHJfdGltZXJfdCogIHRpbWVyID0gX2FyZzsKK3N0YXRpYyB2b2lkKiB0aW1lcl90aHJlYWRfc3RhcnQodm9pZCogYXJnKSB7CisgIHRocl90aW1lcl90KiB0aW1lciA9IGFyZzsKIAotICAgIHRocl90aW1lcl9sb2NrKCB0aW1lciApOworICB0aHJfdGltZXJfbG9jayh0aW1lcik7CiAKLSAgICAvKiB3ZSBsb29wIHVudGlsIHRpbWVyLT5kb25lIGlzIHNldCBpbiB0aW1lcl9kZWxldGUoKSAqLwotICAgIHdoaWxlICghdGltZXItPmRvbmUpIAotICAgIHsKLSAgICAgICAgc3RydWN0IHRpbWVzcGVjICAgZXhwaXJlcyA9IHRpbWVyLT5leHBpcmVzOwotICAgICAgICBzdHJ1Y3QgdGltZXNwZWMgICBwZXJpb2QgID0gdGltZXItPnBlcmlvZDsKLSAgICAgICAgc3RydWN0IHRpbWVzcGVjICAgbm93OworICAvLyBHaXZlIHRoaXMgdGhyZWFkIGEgbWVhbmluZ2Z1bCBuYW1lLgorICBjaGFyIG5hbWVbMzJdOworICBzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksICJQT1NJWCBpbnRlcnZhbCB0aW1lciAweCUwOHgiLCB0aW1lci0+aWQpOworICBwdGhyZWFkX3NldG5hbWVfbnAocHRocmVhZF9zZWxmKCksIG5hbWUpOwogCi0gICAgICAgIC8qIGlmIHRoZSB0aW1lciBpcyBzdG9wcGVkIG9yIGRpc2FybWVkLCB3YWl0IGluZGVmaW5pdGVseQotICAgICAgICAgKiBmb3IgYSBzdGF0ZSBjaGFuZ2UgZnJvbSB0aW1lcl9zZXR0aW1lL19kZWxldGUvX3N0YXJ0X3N0b3AKLSAgICAgICAgICovCi0gICAgICAgIGlmICggdGltZXItPnN0b3BwZWQgfHwgdGltZXNwZWNfaXNfemVybygmZXhwaXJlcykgKQotICAgICAgICB7Ci0gICAgICAgICAgICBwdGhyZWFkX2NvbmRfd2FpdCggJnRpbWVyLT5jb25kLCAmdGltZXItPm11dGV4ICk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQorICAvLyBXZSBsb29wIHVudGlsIHRpbWVyLT5kb25lIGlzIHNldCBpbiB0aW1lcl9kZWxldGUoKS4KKyAgd2hpbGUgKCF0aW1lci0+ZG9uZSkgeworICAgIHN0cnVjdCB0aW1lc3BlYyBleHBpcmVzID0gdGltZXItPmV4cGlyZXM7CisgICAgc3RydWN0IHRpbWVzcGVjIHBlcmlvZCA9IHRpbWVyLT5wZXJpb2Q7CiAKLSAgICAgICAgLyogb3RoZXJ3aXNlLCB3ZSBuZWVkIHRvIGRvIGEgdGltZWQgd2FpdCB1bnRpbCBlaXRoZXIgYQotICAgICAgICAqIHN0YXRlIGNoYW5nZSBvZiB0aGUgdGltZXIgZXhwaXJhdGlvbiB0aW1lLgotICAgICAgICAqLwotICAgICAgICBjbG9ja19nZXR0aW1lKHRpbWVyLT5jbG9jaywgJm5vdyk7Ci0KLSAgICAgICAgaWYgKHRpbWVzcGVjX2NtcCggJmV4cGlyZXMsICZub3cgKSA+IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIC8qIGNvb2wsIHRoZXJlIHdhcyBubyBvdmVycnVuLCBzbyBjb21wdXRlIHRoZQotICAgICAgICAgICAgICogcmVsYXRpdmUgdGltZW91dCBhcyAnZXhwaXJlcyAtIG5vdycsIHRoZW4gd2FpdAotICAgICAgICAgICAgICovCi0gICAgICAgICAgICBpbnQgICAgICAgICAgICAgIHJldDsKLSAgICAgICAgICAgIHN0cnVjdCB0aW1lc3BlYyAgZGlmZiA9IGV4cGlyZXM7Ci0gICAgICAgICAgICB0aW1lc3BlY19zdWIoICZkaWZmLCAmbm93ICk7Ci0KLSAgICAgICAgICAgIHJldCA9IF9fcHRocmVhZF9jb25kX3RpbWVkd2FpdF9yZWxhdGl2ZSgKLSAgICAgICAgICAgICAgICAgICAgICAgICZ0aW1lci0+Y29uZCwgJnRpbWVyLT5tdXRleCwgJmRpZmYpOwotCi0gICAgICAgICAgICAvKiBpZiB3ZSBkaWRuJ3QgdGltZW91dCwgaXQgbWVhbnMgdGhhdCBhIHN0YXRlIGNoYW5nZQotICAgICAgICAgICAgICAgICogb2NjdXJlZCwgc28gcmVsb29wIHRvIHRha2UgY2FyZSBvZiBpdC4KLSAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgaWYgKHJldCAhPSBFVElNRURPVVQpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICAvKiBvdmVycnVuIHdhcyBkZXRlY3RlZCBiZWZvcmUgd2UgY291bGQgd2FpdCAhICovCi0gICAgICAgICAgICBpZiAoIXRpbWVzcGVjX2lzX3plcm8oICZwZXJpb2QgKSApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgLyogZm9yIHBlcmlvZGljIHRpbWVycywgY29tcHV0ZSB0b3RhbCBvdmVycnVuIGNvdW50ICovCi0gICAgICAgICAgICAgICAgZG8gewotICAgICAgICAgICAgICAgICAgICB0aW1lc3BlY19hZGQoICZleHBpcmVzLCAmcGVyaW9kICk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh0aW1lci0+b3ZlcnJ1bnMgPCBERUxBWVRJTUVSX01BWCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVyLT5vdmVycnVucyArPSAxOwotICAgICAgICAgICAgICAgIH0gd2hpbGUgKCB0aW1lc3BlY19jbXAoICZleHBpcmVzLCAmbm93ICkgPCAwICk7Ci0KLSAgICAgICAgICAgICAgICAvKiBiYWNrdHJhY2sgdGhlIGxhc3Qgb25lLCBiZWNhdXNlIHdlJ3JlIGdvaW5nIHRvCi0gICAgICAgICAgICAgICAgICogYWRkIHRoZSBzYW1lIHZhbHVlIGp1c3QgYSBiaXQgbGF0ZXIgKi8KLSAgICAgICAgICAgICAgICB0aW1lc3BlY19zdWIoICZleHBpcmVzLCAmcGVyaW9kICk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgLyogZm9yIG5vbi1wZXJpb2RpYyB0aW1lciwgdGhpbmdzIGFyZSBzaW1wbGUgKi8KLSAgICAgICAgICAgICAgICB0aW1lci0+b3ZlcnJ1bnMgPSAxOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLyogaWYgd2UgZ2V0IHRoZXJlLCBhIHRpbWVvdXQgd2FzIGRldGVjdGVkLgotICAgICAgICAgKiBmaXJzdCByZWxvYWQvZGlzYXJtIHRoZSB0aW1lciBoYXMgbmVlZGVkCi0gICAgICAgICAqLwotICAgICAgICBpZiAoICF0aW1lc3BlY19pc196ZXJvKCZwZXJpb2QpICkgewotICAgICAgICAgICAgdGltZXNwZWNfYWRkKCAmZXhwaXJlcywgJnBlcmlvZCApOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdGltZXNwZWNfemVybyggJmV4cGlyZXMgKTsKLSAgICAgICAgfQotICAgICAgICB0aW1lci0+ZXhwaXJlcyA9IGV4cGlyZXM7Ci0KLSAgICAgICAgLyogbm93IGNhbGwgdGhlIHRpbWVyIGNhbGxiYWNrIGZ1bmN0aW9uLiByZWxlYXNlIHRoZQotICAgICAgICAgKiBsb2NrIHRvIGFsbG93IHRoZSBmdW5jdGlvbiB0byBtb2RpZnkgdGhlIHRpbWVyIHNldHRpbmcKLSAgICAgICAgICogb3IgY2FsbCB0aW1lcl9nZXRvdmVycnVuKCkuCi0gICAgICAgICAqCi0gICAgICAgICAqIE5PVEU6IGF0IHRoaXMgcG9pbnQgd2UgdHJ1c3QgdGhlIGNhbGxiYWNrIG5vdCB0byBiZSBhCi0gICAgICAgICAqICAgICAgIHRvdGFsIG1vcm9uIGFuZCBwdGhyZWFkX2tpbGwoKSB0aGUgdGltZXIgdGhyZWFkCi0gICAgICAgICAqLwotICAgICAgICB0aHJfdGltZXJfdW5sb2NrKHRpbWVyKTsKLSAgICAgICAgdGltZXItPmNhbGxiYWNrKCB0aW1lci0+dmFsdWUgKTsKLSAgICAgICAgdGhyX3RpbWVyX2xvY2sodGltZXIpOwotCi0gICAgICAgIC8qIG5vdyBjbGVhciB0aGUgb3ZlcnJ1bnMgY291bnRlci4gaXQgb25seSBtYWtlcyBzZW5zZQotICAgICAgICAgKiB3aXRoaW4gdGhlIGNhbGxiYWNrICovCi0gICAgICAgIHRpbWVyLT5vdmVycnVucyA9IDA7CisgICAgLy8gSWYgdGhlIHRpbWVyIGlzIHN0b3BwZWQgb3IgZGlzYXJtZWQsIHdhaXQgaW5kZWZpbml0ZWx5CisgICAgLy8gZm9yIGEgc3RhdGUgY2hhbmdlIGZyb20gdGltZXJfc2V0dGltZS9fZGVsZXRlL19zdGFydF9zdG9wLgorICAgIGlmICh0aW1lci0+c3RvcHBlZCB8fCB0aW1lc3BlY19pc196ZXJvKCZleHBpcmVzKSkgeworICAgICAgcHRocmVhZF9jb25kX3dhaXQoJnRpbWVyLT5jb25kLCAmdGltZXItPm11dGV4KTsKKyAgICAgIGNvbnRpbnVlOwogICAgIH0KIAotICAgIHRocl90aW1lcl91bmxvY2soIHRpbWVyICk7CisgICAgLy8gT3RoZXJ3aXNlLCB3ZSBuZWVkIHRvIGRvIGEgdGltZWQgd2FpdCB1bnRpbCBlaXRoZXIgYQorICAgIC8vIHN0YXRlIGNoYW5nZSBvZiB0aGUgdGltZXIgZXhwaXJhdGlvbiB0aW1lLgorICAgIHN0cnVjdCB0aW1lc3BlYyBub3c7CisgICAgY2xvY2tfZ2V0dGltZSh0aW1lci0+Y2xvY2ssICZub3cpOwogCi0gICAgLyogZnJlZSB0aGUgdGltZXIgb2JqZWN0IG5vdy4gdGhlcmUgaXMgbm8gbmVlZCB0byBjYWxsCi0gICAgICogX190aW1lcl90YWJsZV9nZXQoKSBzaW5jZSB3ZSdyZSBndWFyYW50ZWVkIHRoYXQgX190aW1lcl90YWJsZQotICAgICAqIGlzIGluaXRpYWxpemVkIGluIHRoaXMgdGhyZWFkCi0gICAgICovCi0gICAgdGhyX3RpbWVyX3RhYmxlX2ZyZWUoX190aW1lcl90YWJsZSwgdGltZXIpOworICAgIGlmICh0aW1lc3BlY19jbXAoJmV4cGlyZXMsICZub3cpID4gMCkgeworICAgICAgLy8gQ29vbCwgdGhlcmUgd2FzIG5vIG92ZXJydW4sIHNvIGNvbXB1dGUgdGhlCisgICAgICAvLyByZWxhdGl2ZSB0aW1lb3V0IGFzICdleHBpcmVzIC0gbm93JywgdGhlbiB3YWl0LgorICAgICAgc3RydWN0IHRpbWVzcGVjIGRpZmYgPSBleHBpcmVzOworICAgICAgdGltZXNwZWNfc3ViKCZkaWZmLCAmbm93KTsKIAotICAgIHJldHVybiBOVUxMOworICAgICAgaW50IHJldCA9IF9fcHRocmVhZF9jb25kX3RpbWVkd2FpdF9yZWxhdGl2ZSgmdGltZXItPmNvbmQsICZ0aW1lci0+bXV0ZXgsICZkaWZmKTsKKworICAgICAgLy8gSWYgd2UgZGlkbid0IHRpbWUgb3V0LCBpdCBtZWFucyB0aGF0IGEgc3RhdGUgY2hhbmdlCisgICAgICAvLyBvY2N1cnJlZCwgc28gbG9vcCB0byB0YWtlIGNhcmUgb2YgaXQuCisgICAgICBpZiAocmV0ICE9IEVUSU1FRE9VVCkgeworICAgICAgICBjb250aW51ZTsKKyAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgLy8gT3ZlcnJ1biB3YXMgZGV0ZWN0ZWQgYmVmb3JlIHdlIGNvdWxkIHdhaXQhCisgICAgICBpZiAoIXRpbWVzcGVjX2lzX3plcm8oJnBlcmlvZCkpIHsKKyAgICAgICAgLy8gRm9yIHBlcmlvZGljIHRpbWVycywgY29tcHV0ZSB0b3RhbCBvdmVycnVuIGNvdW50LgorICAgICAgICBkbyB7CisgICAgICAgICAgdGltZXNwZWNfYWRkKCZleHBpcmVzLCAmcGVyaW9kKTsKKyAgICAgICAgICBpZiAodGltZXItPm92ZXJydW5zIDwgREVMQVlUSU1FUl9NQVgpIHsKKyAgICAgICAgICAgIHRpbWVyLT5vdmVycnVucyArPSAxOworICAgICAgICAgIH0KKyAgICAgICAgfSB3aGlsZSAodGltZXNwZWNfY21wKCZleHBpcmVzLCAmbm93KSA8IDApOworCisgICAgICAgIC8vIEJhY2t0cmFjayB0aGUgbGFzdCBvbmUsIGJlY2F1c2Ugd2UncmUgZ29pbmcgdG8KKyAgICAgICAgLy8gYWRkIHRoZSBzYW1lIHZhbHVlIGp1c3QgYSBiaXQgbGF0ZXIuCisgICAgICAgIHRpbWVzcGVjX3N1YigmZXhwaXJlcywgJnBlcmlvZCk7CisgICAgICB9IGVsc2UgeworICAgICAgICAvLyBGb3Igbm9uLXBlcmlvZGljIHRpbWVycywgdGhpbmdzIGFyZSBzaW1wbGUuCisgICAgICAgIHRpbWVyLT5vdmVycnVucyA9IDE7CisgICAgICB9CisgICAgfQorCisgICAgLy8gSWYgd2UgZ2V0IGhlcmUsIGEgdGltZW91dCB3YXMgZGV0ZWN0ZWQuCisgICAgLy8gRmlyc3QgcmVsb2FkL2Rpc2FybSB0aGUgdGltZXIgYXMgbmVlZGVkLgorICAgIGlmICghdGltZXNwZWNfaXNfemVybygmcGVyaW9kKSkgeworICAgICAgdGltZXNwZWNfYWRkKCZleHBpcmVzLCAmcGVyaW9kKTsKKyAgICB9IGVsc2UgeworICAgICAgdGltZXNwZWNfemVybygmZXhwaXJlcyk7CisgICAgfQorICAgIHRpbWVyLT5leHBpcmVzID0gZXhwaXJlczsKKworICAgIC8vIE5vdyBjYWxsIHRoZSB0aW1lciBjYWxsYmFjayBmdW5jdGlvbi4gUmVsZWFzZSB0aGUKKyAgICAvLyBsb2NrIHRvIGFsbG93IHRoZSBmdW5jdGlvbiB0byBtb2RpZnkgdGhlIHRpbWVyIHNldHRpbmcKKyAgICAvLyBvciBjYWxsIHRpbWVyX2dldG92ZXJydW4oKS4KKyAgICAvLyBOT1RFOiBhdCB0aGlzIHBvaW50IHdlIHRydXN0IHRoZSBjYWxsYmFjayBub3QgdG8gYmUgYQorICAgIC8vICAgICAgdG90YWwgbW9yb24gYW5kIHB0aHJlYWRfa2lsbCgpIHRoZSB0aW1lciB0aHJlYWQKKyAgICB0aHJfdGltZXJfdW5sb2NrKHRpbWVyKTsKKyAgICB0aW1lci0+Y2FsbGJhY2sodGltZXItPnZhbHVlKTsKKyAgICB0aHJfdGltZXJfbG9jayh0aW1lcik7CisKKyAgICAvLyBOb3cgY2xlYXIgdGhlIG92ZXJydW5zIGNvdW50ZXIuIGl0IG9ubHkgbWFrZXMgc2Vuc2UKKyAgICAvLyB3aXRoaW4gdGhlIGNhbGxiYWNrLgorICAgIHRpbWVyLT5vdmVycnVucyA9IDA7CisgIH0KKworICB0aHJfdGltZXJfdW5sb2NrKHRpbWVyKTsKKworICAvLyBGcmVlIHRoZSB0aW1lciBvYmplY3QuCisgIHRocl90aW1lcl90YWJsZV9mcmVlKF9fdGltZXJfdGFibGVfZ2V0KCksIHRpbWVyKTsKKworICByZXR1cm4gTlVMTDsKIH0KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL3B0aHJlYWQuYyBiL2xpYmMvYmlvbmljL3B0aHJlYWQuYwppbmRleCBjMDc1ZDUxLi45MmUyYzI3IDEwMDY0NAotLS0gYS9saWJjL2Jpb25pYy9wdGhyZWFkLmMKKysrIGIvbGliYy9iaW9uaWMvcHRocmVhZC5jCkBAIC0yNiwyMyArMjYsMTIgQEAKICAqIFNVQ0ggREFNQUdFLgogICovCiAKLSNpbmNsdWRlIDxhc3NlcnQuaD4KLSNpbmNsdWRlIDxlcnJuby5oPgotI2luY2x1ZGUgPGZjbnRsLmg+Ci0jaW5jbHVkZSA8bGltaXRzLmg+Ci0jaW5jbHVkZSA8bWFsbG9jLmg+Ci0jaW5jbHVkZSA8bWVtb3J5Lmg+CiAjaW5jbHVkZSA8cHRocmVhZC5oPgotI2luY2x1ZGUgPHNpZ25hbC5oPgotI2luY2x1ZGUgPHN0ZGludC5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+CisKKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGxpbWl0cy5oPgogI2luY2x1ZGUgPHN5cy9hdG9taWNzLmg+CiAjaW5jbHVkZSA8c3lzL21tYW4uaD4KLSNpbmNsdWRlIDxzeXMvcHJjdGwuaD4KLSNpbmNsdWRlIDxzeXMvc3RhdC5oPgotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPHRpbWUuaD4KICNpbmNsdWRlIDx1bmlzdGQuaD4KIAogI2luY2x1ZGUgImJpb25pY19hdG9taWNfaW5saW5lLmgiCkBAIC01MiwxMCArNDEsMTEgQEAKICNpbmNsdWRlICJwdGhyZWFkX2ludGVybmFsLmgiCiAjaW5jbHVkZSAidGhyZWFkX3ByaXZhdGUuaCIKIAotZXh0ZXJuIGludCAgX19wdGhyZWFkX2Nsb25lKGludCAoKmZuKSh2b2lkKiksIHZvaWQgKmNoaWxkX3N0YWNrLCBpbnQgZmxhZ3MsIHZvaWQgKmFyZyk7CitleHRlcm4gdm9pZCBwdGhyZWFkX2RlYnVnX211dGV4X2xvY2tfY2hlY2socHRocmVhZF9tdXRleF90ICptdXRleCk7CitleHRlcm4gdm9pZCBwdGhyZWFkX2RlYnVnX211dGV4X3VubG9ja19jaGVjayhwdGhyZWFkX211dGV4X3QgKm11dGV4KTsKKwogZXh0ZXJuIHZvaWQgX2V4aXRfd2l0aF9zdGFja190ZWFyZG93bih2b2lkICogc3RhY2tCYXNlLCBpbnQgc3RhY2tTaXplLCBpbnQgcmV0Q29kZSk7CiBleHRlcm4gdm9pZCBfZXhpdF90aHJlYWQoaW50ICByZXRDb2RlKTsKLWV4dGVybiBpbnQgIF9fc2V0X2Vycm5vKGludCk7CiAKIGludCAgX19mdXRleF93YWtlX2V4KHZvbGF0aWxlIHZvaWQgKmZ0eCwgaW50IHBzaGFyZWQsIGludCB2YWwpCiB7CkBAIC02Nyw0NjAgKzU3LDYgQEAKICAgICByZXR1cm4gX19mdXRleF9zeXNjYWxsNChmdHgsIHBzaGFyZWQgPyBGVVRFWF9XQUlUIDogRlVURVhfV0FJVF9QUklWQVRFLCB2YWwsIHRpbWVvdXQpOwogfQogCi0jZGVmaW5lICBfX2xpa2VseShjb25kKSAgICBfX2J1aWx0aW5fZXhwZWN0KCEhKGNvbmQpLCAxKQotI2RlZmluZSAgX191bmxpa2VseShjb25kKSAgX19idWlsdGluX2V4cGVjdCghIShjb25kKSwgMCkKLQotI2lmZGVmIF9faTM4Nl9fCi0jZGVmaW5lIEFUVFJJQlVURVMgX19hdHRyaWJ1dGVfXygobm9pbmxpbmUpKSBfX2F0dHJpYnV0ZV9fKChmYXN0Y2FsbCkpCi0jZWxzZQotI2RlZmluZSBBVFRSSUJVVEVTIF9fYXR0cmlidXRlX18oKG5vaW5saW5lKSkKLSNlbmRpZgotCi12b2lkIEFUVFJJQlVURVMgX3RocmVhZF9jcmVhdGVkX2hvb2socGlkX3QgdGhyZWFkX2lkKTsKLQotc3RhdGljIGNvbnN0IGludCBrUHRocmVhZEluaXRGYWlsZWQgPSAxOwotCi0jZGVmaW5lIFBUSFJFQURfQVRUUl9GTEFHX0RFVEFDSEVEICAgICAgMHgwMDAwMDAwMQotI2RlZmluZSBQVEhSRUFEX0FUVFJfRkxBR19VU0VSX1NUQUNLICAgIDB4MDAwMDAwMDIKLQotI2RlZmluZSBERUZBVUxUX1NUQUNLU0laRSAoMTAyNCAqIDEwMjQpCi0jZGVmaW5lIFNUQUNLQkFTRSAweDEwMDAwMDAwCi0KLXN0YXRpYyB1aW50OF90ICogZ1N0YWNrQmFzZSA9ICh1aW50OF90ICopU1RBQ0tCQVNFOwotCi1zdGF0aWMgcHRocmVhZF9tdXRleF90IG1tYXBfbG9jayA9IFBUSFJFQURfTVVURVhfSU5JVElBTElaRVI7Ci0KLQotc3RhdGljIGNvbnN0IHB0aHJlYWRfYXR0cl90IGdEZWZhdWx0UHRocmVhZEF0dHIgPSB7Ci0gICAgLmZsYWdzID0gMCwKLSAgICAuc3RhY2tfYmFzZSA9IE5VTEwsCi0gICAgLnN0YWNrX3NpemUgPSBERUZBVUxUX1NUQUNLU0laRSwKLSAgICAuZ3VhcmRfc2l6ZSA9IFBBR0VfU0laRSwKLSAgICAuc2NoZWRfcG9saWN5ID0gU0NIRURfTk9STUFMLAotICAgIC5zY2hlZF9wcmlvcml0eSA9IDAKLX07Ci0KLXN0YXRpYyBwdGhyZWFkX2ludGVybmFsX3QqIGdUaHJlYWRMaXN0ID0gTlVMTDsKLXN0YXRpYyBwdGhyZWFkX211dGV4X3QgZ1RocmVhZExpc3RMb2NrID0gUFRIUkVBRF9NVVRFWF9JTklUSUFMSVpFUjsKLXN0YXRpYyBwdGhyZWFkX211dGV4X3QgZ0RlYnVnZ2VyTm90aWZpY2F0aW9uTG9jayA9IFBUSFJFQURfTVVURVhfSU5JVElBTElaRVI7Ci0KLQotc3RhdGljIHZvaWQKLV9wdGhyZWFkX2ludGVybmFsX2ZyZWUocHRocmVhZF9pbnRlcm5hbF90KiB0aHJlYWQpCi17Ci0gICAgaWYgKHRocmVhZCAhPSBOVUxMKSB7Ci0gICAgICAgIGZyZWUodGhyZWFkKTsKLSAgICB9Ci19Ci0KLQotc3RhdGljIHZvaWQKLV9wdGhyZWFkX2ludGVybmFsX3JlbW92ZV9sb2NrZWQoIHB0aHJlYWRfaW50ZXJuYWxfdCogIHRocmVhZCApCi17Ci0gICAgdGhyZWFkLT5uZXh0LT5wcmVmID0gdGhyZWFkLT5wcmVmOwotICAgIHRocmVhZC0+cHJlZlswXSAgICA9IHRocmVhZC0+bmV4dDsKLX0KLQotc3RhdGljIHZvaWQKLV9wdGhyZWFkX2ludGVybmFsX3JlbW92ZSggcHRocmVhZF9pbnRlcm5hbF90KiAgdGhyZWFkICkKLXsKLSAgICBwdGhyZWFkX211dGV4X2xvY2soJmdUaHJlYWRMaXN0TG9jayk7Ci0gICAgX3B0aHJlYWRfaW50ZXJuYWxfcmVtb3ZlX2xvY2tlZCh0aHJlYWQpOwotICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZnVGhyZWFkTGlzdExvY2spOwotfQotCi1zdGF0aWMgdm9pZAotX3B0aHJlYWRfaW50ZXJuYWxfYWRkKCBwdGhyZWFkX2ludGVybmFsX3QqICB0aHJlYWQgKQotewotICAgIHB0aHJlYWRfbXV0ZXhfbG9jaygmZ1RocmVhZExpc3RMb2NrKTsKLSAgICB0aHJlYWQtPnByZWYgPSAmZ1RocmVhZExpc3Q7Ci0gICAgdGhyZWFkLT5uZXh0ID0gdGhyZWFkLT5wcmVmWzBdOwotICAgIGlmICh0aHJlYWQtPm5leHQpCi0gICAgICAgIHRocmVhZC0+bmV4dC0+cHJlZiA9ICZ0aHJlYWQtPm5leHQ7Ci0gICAgdGhyZWFkLT5wcmVmWzBdID0gdGhyZWFkOwotICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZnVGhyZWFkTGlzdExvY2spOwotfQotCi1wdGhyZWFkX2ludGVybmFsX3QqCi1fX2dldF90aHJlYWQodm9pZCkKLXsKLSAgICB2b2lkKiogIHRscyA9ICh2b2lkKiopX19nZXRfdGxzKCk7Ci0KLSAgICByZXR1cm4gIChwdGhyZWFkX2ludGVybmFsX3QqKSB0bHNbVExTX1NMT1RfVEhSRUFEX0lEXTsKLX0KLQotCi12b2lkKgotX19nZXRfc3RhY2tfYmFzZShpbnQgICpwX3N0YWNrX3NpemUpCi17Ci0gICAgcHRocmVhZF9pbnRlcm5hbF90KiAgdGhyZWFkID0gX19nZXRfdGhyZWFkKCk7Ci0KLSAgICAqcF9zdGFja19zaXplID0gdGhyZWFkLT5hdHRyLnN0YWNrX3NpemU7Ci0gICAgcmV0dXJuIHRocmVhZC0+YXR0ci5zdGFja19iYXNlOwotfQotCi0KLXZvaWQgIF9faW5pdF90bHModm9pZCoqICB0bHMsIHZvaWQqICB0aHJlYWQpCi17Ci0gICAgaW50ICBubjsKLQotICAgICgocHRocmVhZF9pbnRlcm5hbF90Kil0aHJlYWQpLT50bHMgPSB0bHM7Ci0KLSAgICAvLyBzbG90IDAgbXVzdCBwb2ludCB0byB0aGUgdGxzIGFyZWEsIHRoaXMgaXMgcmVxdWlyZWQgYnkgdGhlIGltcGxlbWVudGF0aW9uCi0gICAgLy8gb2YgdGhlIHg4NiBMaW51eCBrZXJuZWwgdGhyZWFkLWxvY2FsLXN0b3JhZ2UKLSAgICB0bHNbVExTX1NMT1RfU0VMRl0gICAgICA9ICh2b2lkKil0bHM7Ci0gICAgdGxzW1RMU19TTE9UX1RIUkVBRF9JRF0gPSB0aHJlYWQ7Ci0gICAgZm9yIChubiA9IFRMU19TTE9UX0VSUk5POyBubiA8IEJJT05JQ19UTFNfU0xPVFM7IG5uKyspCi0gICAgICAgdGxzW25uXSA9IDA7Ci0KLSAgICBfX3NldF90bHMoICh2b2lkKil0bHMgKTsKLX0KLQotCi0vKgotICogVGhpcyB0cmFtcG9saW5lIGlzIGNhbGxlZCBmcm9tIHRoZSBhc3NlbWJseSBfcHRocmVhZF9jbG9uZSgpIGZ1bmN0aW9uLgotICovCi12b2lkIF9fdGhyZWFkX2VudHJ5KGludCAoKmZ1bmMpKHZvaWQqKSwgdm9pZCAqYXJnLCB2b2lkICoqdGxzKQotewotICAgIC8vIFdhaXQgZm9yIG91ciBjcmVhdGluZyB0aHJlYWQgdG8gcmVsZWFzZSB1cy4gVGhpcyBsZXRzIGl0IGhhdmUgdGltZSB0bwotICAgIC8vIG5vdGlmeSBnZGIgYWJvdXQgdGhpcyB0aHJlYWQgYmVmb3JlIHdlIHN0YXJ0IGRvaW5nIGFueXRoaW5nLgotICAgIC8vCi0gICAgLy8gVGhpcyBhbHNvIHByb3ZpZGVzIHRoZSBtZW1vcnkgYmFycmllciBuZWVkZWQgdG8gZW5zdXJlIHRoYXQgYWxsIG1lbW9yeQotICAgIC8vIGFjY2Vzc2VzIHByZXZpb3VzbHkgbWFkZSBieSB0aGUgY3JlYXRpbmcgdGhyZWFkIGFyZSB2aXNpYmxlIHRvIHVzLgotICAgIHB0aHJlYWRfbXV0ZXhfdCogc3RhcnRfbXV0ZXggPSAocHRocmVhZF9tdXRleF90KikgJnRsc1tUTFNfU0xPVF9TRUxGXTsKLSAgICBwdGhyZWFkX211dGV4X2xvY2soc3RhcnRfbXV0ZXgpOwotICAgIHB0aHJlYWRfbXV0ZXhfZGVzdHJveShzdGFydF9tdXRleCk7Ci0KLSAgICBwdGhyZWFkX2ludGVybmFsX3QqIHRocmVhZCA9IChwdGhyZWFkX2ludGVybmFsX3QqKSB0bHNbVExTX1NMT1RfVEhSRUFEX0lEXTsKLSAgICBfX2luaXRfdGxzKHRscywgdGhyZWFkKTsKLQotICAgIGlmICgodGhyZWFkLT5pbnRlcm5hbF9mbGFncyAmIGtQdGhyZWFkSW5pdEZhaWxlZCkgIT0gMCkgewotICAgICAgICBwdGhyZWFkX2V4aXQoTlVMTCk7Ci0gICAgfQotCi0gICAgaW50IHJlc3VsdCA9IGZ1bmMoYXJnKTsKLSAgICBwdGhyZWFkX2V4aXQoKHZvaWQqKSByZXN1bHQpOwotfQotCi1pbnQgX2luaXRfdGhyZWFkKHB0aHJlYWRfaW50ZXJuYWxfdCAqIHRocmVhZCwgcGlkX3Qga2VybmVsX2lkLCBwdGhyZWFkX2F0dHJfdCAqIGF0dHIsIHZvaWQgKiBzdGFja19iYXNlKQotewotICAgIGludCBlcnJvciA9IDA7Ci0KLSAgICBpZiAoYXR0ciA9PSBOVUxMKSB7Ci0gICAgICAgIHRocmVhZC0+YXR0ciA9IGdEZWZhdWx0UHRocmVhZEF0dHI7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgdGhyZWFkLT5hdHRyID0gKmF0dHI7Ci0gICAgfQotICAgIHRocmVhZC0+YXR0ci5zdGFja19iYXNlID0gc3RhY2tfYmFzZTsKLSAgICB0aHJlYWQtPmtlcm5lbF9pZCAgICAgICA9IGtlcm5lbF9pZDsKLQotICAgIC8vIE1ha2UgYSBub3RlIG9mIHdoZXRoZXIgdGhlIHVzZXIgc3VwcGxpZWQgdGhpcyBzdGFjayAoc28gd2Uga25vdyB3aGV0aGVyIG9yIG5vdCB0byBmcmVlIGl0KS4KLSAgICBpZiAoYXR0ci0+c3RhY2tfYmFzZSA9PSBzdGFja19iYXNlKSB7Ci0gICAgICAgIHRocmVhZC0+YXR0ci5mbGFncyB8PSBQVEhSRUFEX0FUVFJfRkxBR19VU0VSX1NUQUNLOwotICAgIH0KLQotICAgIC8vIFNldCB0aGUgc2NoZWR1bGluZyBwb2xpY3kvcHJpb3JpdHkgb2YgdGhlIHRocmVhZC4KLSAgICBpZiAodGhyZWFkLT5hdHRyLnNjaGVkX3BvbGljeSAhPSBTQ0hFRF9OT1JNQUwpIHsKLSAgICAgICAgc3RydWN0IHNjaGVkX3BhcmFtIHBhcmFtOwotICAgICAgICBwYXJhbS5zY2hlZF9wcmlvcml0eSA9IHRocmVhZC0+YXR0ci5zY2hlZF9wcmlvcml0eTsKLSAgICAgICAgaWYgKHNjaGVkX3NldHNjaGVkdWxlcihrZXJuZWxfaWQsIHRocmVhZC0+YXR0ci5zY2hlZF9wb2xpY3ksICZwYXJhbSkgPT0gLTEpIHsKLSAgICAgICAgICAgIGVycm9yID0gZXJybm87Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwdGhyZWFkX2NvbmRfaW5pdCgmdGhyZWFkLT5qb2luX2NvbmQsIE5VTEwpOwotICAgIHRocmVhZC0+am9pbl9jb3VudCA9IDA7Ci0KLSAgICB0aHJlYWQtPmNsZWFudXBfc3RhY2sgPSBOVUxMOwotCi0gICAgX3B0aHJlYWRfaW50ZXJuYWxfYWRkKHRocmVhZCk7Ci0gICAgcmV0dXJuIGVycm9yOwotfQotCi1zdGF0aWMgdm9pZCAqbWtzdGFjayhzaXplX3Qgc2l6ZSwgc2l6ZV90IGd1YXJkX3NpemUpCi17Ci0gICAgcHRocmVhZF9tdXRleF9sb2NrKCZtbWFwX2xvY2spOwotCi0gICAgaW50IHByb3QgPSBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFOwotICAgIGludCBmbGFncyA9IE1BUF9QUklWQVRFIHwgTUFQX0FOT05ZTU9VUyB8IE1BUF9OT1JFU0VSVkU7Ci0gICAgdm9pZCogc3RhY2sgPSBtbWFwKCh2b2lkKikgZ1N0YWNrQmFzZSwgc2l6ZSwgcHJvdCwgZmxhZ3MsIC0xLCAwKTsKLSAgICBpZiAoc3RhY2sgPT0gTUFQX0ZBSUxFRCkgewotICAgICAgICBzdGFjayA9IE5VTEw7Ci0gICAgICAgIGdvdG8gZG9uZTsKLSAgICB9Ci0KLSAgICBpZiAobXByb3RlY3Qoc3RhY2ssIGd1YXJkX3NpemUsIFBST1RfTk9ORSkgPT0gLTEpIHsKLSAgICAgICAgbXVubWFwKHN0YWNrLCBzaXplKTsKLSAgICAgICAgc3RhY2sgPSBOVUxMOwotICAgICAgICBnb3RvIGRvbmU7Ci0gICAgfQotCi1kb25lOgotICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZtbWFwX2xvY2spOwotICAgIHJldHVybiBzdGFjazsKLX0KLQotLyoKLSAqIENyZWF0ZSBhIG5ldyB0aHJlYWQuIFRoZSB0aHJlYWQncyBzdGFjayBpcyBsYWlkIG91dCBsaWtlIHNvOgotICoKLSAqICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi0gKiB8ICAgICBwdGhyZWFkX2ludGVybmFsX3QgICAgfAotICogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLSAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gKiB8ICAgICAgICAgIFRMUyBhcmVhICAgICAgICAgfAotICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAqICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi0gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICogLiAgICAgICAgICAgICAgICAgICAgICAgICAgIC4KLSAqIC4gICAgICAgICBzdGFjayBhcmVhICAgICAgICAuCi0gKiAuICAgICAgICAgICAgICAgICAgICAgICAgICAgLgotICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAqICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi0gKiB8ICAgICAgICAgZ3VhcmQgcGFnZSAgICAgICAgfAotICogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLSAqCi0gKiAgbm90ZSB0aGF0IFRMU1swXSBtdXN0IGJlIGEgcG9pbnRlciB0byBpdHNlbGYsIHRoaXMgaXMgcmVxdWlyZWQKLSAqICBieSB0aGUgdGhyZWFkLWxvY2FsIHN0b3JhZ2UgaW1wbGVtZW50YXRpb24gb2YgdGhlIHg4NiBMaW51eAotICogIGtlcm5lbCwgd2hlcmUgdGhlIFRMUyBwb2ludGVyIGlzIHJlYWQgYnkgcmVhZGluZyBmczpbMF0KLSAqLwotaW50IHB0aHJlYWRfY3JlYXRlKHB0aHJlYWRfdCAqdGhyZWFkX291dCwgcHRocmVhZF9hdHRyX3QgY29uc3QgKiBhdHRyLAotICAgICAgICAgICAgICAgICAgIHZvaWQgKigqc3RhcnRfcm91dGluZSkodm9pZCAqKSwgdm9pZCAqIGFyZykKLXsKLSAgICBpbnQgb2xkX2Vycm5vID0gZXJybm87Ci0KLSAgICAvKiB0aGlzIHdpbGwgaW5mb3JtIHRoZSByZXN0IG9mIHRoZSBDIGxpYnJhcnkgdGhhdCBhdCBsZWFzdCBvbmUgdGhyZWFkCi0gICAgICogd2FzIGNyZWF0ZWQuIHRoaXMgd2lsbCBlbmZvcmNlIGNlcnRhaW4gZnVuY3Rpb25zIHRvIGFjcXVpcmUvcmVsZWFzZQotICAgICAqIGxvY2tzIChlLmcuIGF0ZXhpdCgpKSB0byBwcm90ZWN0IHNoYXJlZCBnbG9iYWwgc3RydWN0dXJlcy4KLSAgICAgKgotICAgICAqIHRoaXMgd29ya3MgYmVjYXVzZSBwdGhyZWFkX2NyZWF0ZSgpIGlzIG5vdCBjYWxsZWQgYnkgdGhlIEMgbGlicmFyeQotICAgICAqIGluaXRpYWxpemF0aW9uIHJvdXRpbmUgdGhhdCBzZXRzIHVwIHRoZSBtYWluIHRocmVhZCdzIGRhdGEgc3RydWN0dXJlcy4KLSAgICAgKi8KLSAgICBfX2lzdGhyZWFkZWQgPSAxOwotCi0gICAgcHRocmVhZF9pbnRlcm5hbF90KiB0aHJlYWQgPSBjYWxsb2Moc2l6ZW9mKCp0aHJlYWQpLCAxKTsKLSAgICBpZiAodGhyZWFkID09IE5VTEwpIHsKLSAgICAgICAgcmV0dXJuIEVOT01FTTsKLSAgICB9Ci0KLSAgICBpZiAoYXR0ciA9PSBOVUxMKSB7Ci0gICAgICAgIGF0dHIgPSAmZ0RlZmF1bHRQdGhyZWFkQXR0cjsKLSAgICB9Ci0KLSAgICAvLyBtYWtlIHN1cmUgdGhlIHN0YWNrIGlzIFBBR0VfU0laRSBhbGlnbmVkCi0gICAgc2l6ZV90IHN0YWNrX3NpemUgPSAoYXR0ci0+c3RhY2tfc2l6ZSArIChQQUdFX1NJWkUtMSkpICYgfihQQUdFX1NJWkUtMSk7Ci0gICAgdWludDhfdCogc3RhY2sgPSBhdHRyLT5zdGFja19iYXNlOwotICAgIGlmIChzdGFjayA9PSBOVUxMKSB7Ci0gICAgICAgIHN0YWNrID0gbWtzdGFjayhzdGFja19zaXplLCBhdHRyLT5ndWFyZF9zaXplKTsKLSAgICAgICAgaWYgKHN0YWNrID09IE5VTEwpIHsKLSAgICAgICAgICAgIF9wdGhyZWFkX2ludGVybmFsX2ZyZWUodGhyZWFkKTsKLSAgICAgICAgICAgIHJldHVybiBFTk9NRU07Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBNYWtlIHJvb20gZm9yIFRMUwotICAgIHZvaWQqKiB0bHMgPSAodm9pZCoqKShzdGFjayArIHN0YWNrX3NpemUgLSBCSU9OSUNfVExTX1NMT1RTKnNpemVvZih2b2lkKikpOwotCi0gICAgLy8gQ3JlYXRlIGEgbXV0ZXggZm9yIHRoZSB0aHJlYWQgaW4gVExTX1NMT1RfU0VMRiB0byB3YWl0IG9uIG9uY2UgaXQgc3RhcnRzIHNvIHdlIGNhbiBrZWVwCi0gICAgLy8gaXQgZnJvbSBkb2luZyBhbnl0aGluZyB1bnRpbCBhZnRlciB3ZSBub3RpZnkgdGhlIGRlYnVnZ2VyIGFib3V0IGl0Ci0gICAgLy8KLSAgICAvLyBUaGlzIGFsc28gcHJvdmlkZXMgdGhlIG1lbW9yeSBiYXJyaWVyIHdlIG5lZWQgdG8gZW5zdXJlIHRoYXQgYWxsCi0gICAgLy8gbWVtb3J5IGFjY2Vzc2VzIHByZXZpb3VzbHkgcGVyZm9ybWVkIGJ5IHRoaXMgdGhyZWFkIGFyZSB2aXNpYmxlIHRvCi0gICAgLy8gdGhlIG5ldyB0aHJlYWQuCi0gICAgcHRocmVhZF9tdXRleF90KiBzdGFydF9tdXRleCA9IChwdGhyZWFkX211dGV4X3QqKSAmdGxzW1RMU19TTE9UX1NFTEZdOwotICAgIHB0aHJlYWRfbXV0ZXhfaW5pdChzdGFydF9tdXRleCwgTlVMTCk7Ci0gICAgcHRocmVhZF9tdXRleF9sb2NrKHN0YXJ0X211dGV4KTsKLQotICAgIHRsc1tUTFNfU0xPVF9USFJFQURfSURdID0gdGhyZWFkOwotCi0gICAgaW50IGZsYWdzID0gQ0xPTkVfRklMRVMgfCBDTE9ORV9GUyB8IENMT05FX1ZNIHwgQ0xPTkVfU0lHSEFORCB8Ci0gICAgICAgICAgICAgICAgQ0xPTkVfVEhSRUFEIHwgQ0xPTkVfU1lTVlNFTSB8IENMT05FX0RFVEFDSEVEOwotICAgIGludCB0aWQgPSBfX3B0aHJlYWRfY2xvbmUoKGludCgqKSh2b2lkKikpc3RhcnRfcm91dGluZSwgdGxzLCBmbGFncywgYXJnKTsKLQotICAgIGlmICh0aWQgPCAwKSB7Ci0gICAgICAgIGludCBjbG9uZV9lcnJubyA9IGVycm5vOwotICAgICAgICBwdGhyZWFkX211dGV4X3VubG9jayhzdGFydF9tdXRleCk7Ci0gICAgICAgIGlmIChzdGFjayAhPSBhdHRyLT5zdGFja19iYXNlKSB7Ci0gICAgICAgICAgICBtdW5tYXAoc3RhY2ssIHN0YWNrX3NpemUpOwotICAgICAgICB9Ci0gICAgICAgIF9wdGhyZWFkX2ludGVybmFsX2ZyZWUodGhyZWFkKTsKLSAgICAgICAgZXJybm8gPSBvbGRfZXJybm87Ci0gICAgICAgIHJldHVybiBjbG9uZV9lcnJubzsKLSAgICB9Ci0KLSAgICBpbnQgaW5pdF9lcnJubyA9IF9pbml0X3RocmVhZCh0aHJlYWQsIHRpZCwgKHB0aHJlYWRfYXR0cl90KikgYXR0ciwgc3RhY2spOwotICAgIGlmIChpbml0X2Vycm5vICE9IDApIHsKLSAgICAgICAgLy8gTWFyayB0aGUgdGhyZWFkIGRldGFjaGVkIGFuZCBsZXQgaXRzIF9fdGhyZWFkX2VudHJ5IHJ1biB0bwotICAgICAgICAvLyBjb21wbGV0aW9uLiAoSXQnbGwganVzdCBleGl0IGltbWVkaWF0ZWx5LCBjbGVhbmluZyB1cCBpdHMgcmVzb3VyY2VzLikKLSAgICAgICAgdGhyZWFkLT5pbnRlcm5hbF9mbGFncyB8PSBrUHRocmVhZEluaXRGYWlsZWQ7Ci0gICAgICAgIHRocmVhZC0+YXR0ci5mbGFncyB8PSBQVEhSRUFEX0FUVFJfRkxBR19ERVRBQ0hFRDsKLSAgICAgICAgcHRocmVhZF9tdXRleF91bmxvY2soc3RhcnRfbXV0ZXgpOwotICAgICAgICBlcnJubyA9IG9sZF9lcnJubzsKLSAgICAgICAgcmV0dXJuIGluaXRfZXJybm87Ci0gICAgfQotCi0gICAgLy8gTm90aWZ5IGFueSBkZWJ1Z2dlcnMgYWJvdXQgdGhlIG5ldyB0aHJlYWQuCi0gICAgcHRocmVhZF9tdXRleF9sb2NrKCZnRGVidWdnZXJOb3RpZmljYXRpb25Mb2NrKTsKLSAgICBfdGhyZWFkX2NyZWF0ZWRfaG9vayh0aWQpOwotICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZnRGVidWdnZXJOb3RpZmljYXRpb25Mb2NrKTsKLQotICAgIC8vIExldCB0aGUgdGhyZWFkIHJ1bi4KLSAgICBwdGhyZWFkX211dGV4X3VubG9jayhzdGFydF9tdXRleCk7Ci0KLSAgICAqdGhyZWFkX291dCA9IChwdGhyZWFkX3QpIHRocmVhZDsKLSAgICByZXR1cm4gMDsKLX0KLQotCi1pbnQgcHRocmVhZF9hdHRyX2luaXQocHRocmVhZF9hdHRyX3QgKiBhdHRyKQotewotICAgICphdHRyID0gZ0RlZmF1bHRQdGhyZWFkQXR0cjsKLSAgICByZXR1cm4gMDsKLX0KLQotaW50IHB0aHJlYWRfYXR0cl9kZXN0cm95KHB0aHJlYWRfYXR0cl90ICogYXR0cikKLXsKLSAgICBtZW1zZXQoYXR0ciwgMHg0Miwgc2l6ZW9mKHB0aHJlYWRfYXR0cl90KSk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLWludCBwdGhyZWFkX2F0dHJfc2V0ZGV0YWNoc3RhdGUocHRocmVhZF9hdHRyX3QgKiBhdHRyLCBpbnQgc3RhdGUpCi17Ci0gICAgaWYgKHN0YXRlID09IFBUSFJFQURfQ1JFQVRFX0RFVEFDSEVEKSB7Ci0gICAgICAgIGF0dHItPmZsYWdzIHw9IFBUSFJFQURfQVRUUl9GTEFHX0RFVEFDSEVEOwotICAgIH0gZWxzZSBpZiAoc3RhdGUgPT0gUFRIUkVBRF9DUkVBVEVfSk9JTkFCTEUpIHsKLSAgICAgICAgYXR0ci0+ZmxhZ3MgJj0gflBUSFJFQURfQVRUUl9GTEFHX0RFVEFDSEVEOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHJldHVybiBFSU5WQUw7Ci0gICAgfQotICAgIHJldHVybiAwOwotfQotCi1pbnQgcHRocmVhZF9hdHRyX2dldGRldGFjaHN0YXRlKHB0aHJlYWRfYXR0cl90IGNvbnN0ICogYXR0ciwgaW50ICogc3RhdGUpCi17Ci0gICAgKnN0YXRlID0gKGF0dHItPmZsYWdzICYgUFRIUkVBRF9BVFRSX0ZMQUdfREVUQUNIRUQpCi0gICAgICAgICAgID8gUFRIUkVBRF9DUkVBVEVfREVUQUNIRUQKLSAgICAgICAgICAgOiBQVEhSRUFEX0NSRUFURV9KT0lOQUJMRTsKLSAgICByZXR1cm4gMDsKLX0KLQotaW50IHB0aHJlYWRfYXR0cl9zZXRzY2hlZHBvbGljeShwdGhyZWFkX2F0dHJfdCAqIGF0dHIsIGludCBwb2xpY3kpCi17Ci0gICAgYXR0ci0+c2NoZWRfcG9saWN5ID0gcG9saWN5OwotICAgIHJldHVybiAwOwotfQotCi1pbnQgcHRocmVhZF9hdHRyX2dldHNjaGVkcG9saWN5KHB0aHJlYWRfYXR0cl90IGNvbnN0ICogYXR0ciwgaW50ICogcG9saWN5KQotewotICAgICpwb2xpY3kgPSBhdHRyLT5zY2hlZF9wb2xpY3k7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLWludCBwdGhyZWFkX2F0dHJfc2V0c2NoZWRwYXJhbShwdGhyZWFkX2F0dHJfdCAqIGF0dHIsIHN0cnVjdCBzY2hlZF9wYXJhbSBjb25zdCAqIHBhcmFtKQotewotICAgIGF0dHItPnNjaGVkX3ByaW9yaXR5ID0gcGFyYW0tPnNjaGVkX3ByaW9yaXR5OwotICAgIHJldHVybiAwOwotfQotCi1pbnQgcHRocmVhZF9hdHRyX2dldHNjaGVkcGFyYW0ocHRocmVhZF9hdHRyX3QgY29uc3QgKiBhdHRyLCBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKiBwYXJhbSkKLXsKLSAgICBwYXJhbS0+c2NoZWRfcHJpb3JpdHkgPSBhdHRyLT5zY2hlZF9wcmlvcml0eTsKLSAgICByZXR1cm4gMDsKLX0KLQotaW50IHB0aHJlYWRfYXR0cl9zZXRzdGFja3NpemUocHRocmVhZF9hdHRyX3QgKiBhdHRyLCBzaXplX3Qgc3RhY2tfc2l6ZSkKLXsKLSAgICBpZiAoKHN0YWNrX3NpemUgJiAoUEFHRV9TSVpFIC0gMSkgfHwgc3RhY2tfc2l6ZSA8IFBUSFJFQURfU1RBQ0tfTUlOKSkgewotICAgICAgICByZXR1cm4gRUlOVkFMOwotICAgIH0KLSAgICBhdHRyLT5zdGFja19zaXplID0gc3RhY2tfc2l6ZTsKLSAgICByZXR1cm4gMDsKLX0KLQotaW50IHB0aHJlYWRfYXR0cl9nZXRzdGFja3NpemUocHRocmVhZF9hdHRyX3QgY29uc3QgKiBhdHRyLCBzaXplX3QgKiBzdGFja19zaXplKQotewotICAgICpzdGFja19zaXplID0gYXR0ci0+c3RhY2tfc2l6ZTsKLSAgICByZXR1cm4gMDsKLX0KLQotaW50IHB0aHJlYWRfYXR0cl9zZXRzdGFja2FkZHIocHRocmVhZF9hdHRyX3QgKiBhdHRyLCB2b2lkICogc3RhY2tfYWRkcikKLXsKLSNpZiAxCi0gICAgLy8gSXQncyBub3QgY2xlYXIgaWYgdGhpcyBpcyBzZXR0aW5nIHRoZSB0b3Agb3IgYm90dG9tIG9mIHRoZSBzdGFjaywgc28gZG9uJ3QgaGFuZGxlIGl0IGZvciBub3cuCi0gICAgcmV0dXJuIEVOT1NZUzsKLSNlbHNlCi0gICAgaWYgKCh1aW50MzJfdClzdGFja19hZGRyICYgKFBBR0VfU0laRSAtIDEpKSB7Ci0gICAgICAgIHJldHVybiBFSU5WQUw7Ci0gICAgfQotICAgIGF0dHItPnN0YWNrX2Jhc2UgPSBzdGFja19hZGRyOwotICAgIHJldHVybiAwOwotI2VuZGlmCi19Ci0KLWludCBwdGhyZWFkX2F0dHJfZ2V0c3RhY2thZGRyKHB0aHJlYWRfYXR0cl90IGNvbnN0ICogYXR0ciwgdm9pZCAqKiBzdGFja19hZGRyKQotewotICAgICpzdGFja19hZGRyID0gKGNoYXIqKWF0dHItPnN0YWNrX2Jhc2UgKyBhdHRyLT5zdGFja19zaXplOwotICAgIHJldHVybiAwOwotfQotCi1pbnQgcHRocmVhZF9hdHRyX3NldHN0YWNrKHB0aHJlYWRfYXR0cl90ICogYXR0ciwgdm9pZCAqIHN0YWNrX2Jhc2UsIHNpemVfdCBzdGFja19zaXplKQotewotICAgIGlmICgoc3RhY2tfc2l6ZSAmIChQQUdFX1NJWkUgLSAxKSB8fCBzdGFja19zaXplIDwgUFRIUkVBRF9TVEFDS19NSU4pKSB7Ci0gICAgICAgIHJldHVybiBFSU5WQUw7Ci0gICAgfQotICAgIGlmICgodWludDMyX3Qpc3RhY2tfYmFzZSAmIChQQUdFX1NJWkUgLSAxKSkgewotICAgICAgICByZXR1cm4gRUlOVkFMOwotICAgIH0KLSAgICBhdHRyLT5zdGFja19iYXNlID0gc3RhY2tfYmFzZTsKLSAgICBhdHRyLT5zdGFja19zaXplID0gc3RhY2tfc2l6ZTsKLSAgICByZXR1cm4gMDsKLX0KLQotaW50IHB0aHJlYWRfYXR0cl9nZXRzdGFjayhwdGhyZWFkX2F0dHJfdCBjb25zdCAqIGF0dHIsIHZvaWQgKiogc3RhY2tfYmFzZSwgc2l6ZV90ICogc3RhY2tfc2l6ZSkKLXsKLSAgICAqc3RhY2tfYmFzZSA9IGF0dHItPnN0YWNrX2Jhc2U7Ci0gICAgKnN0YWNrX3NpemUgPSBhdHRyLT5zdGFja19zaXplOwotICAgIHJldHVybiAwOwotfQotCi1pbnQgcHRocmVhZF9hdHRyX3NldGd1YXJkc2l6ZShwdGhyZWFkX2F0dHJfdCAqIGF0dHIsIHNpemVfdCBndWFyZF9zaXplKQotewotICAgIGlmIChndWFyZF9zaXplICYgKFBBR0VfU0laRSAtIDEpIHx8IGd1YXJkX3NpemUgPCBQQUdFX1NJWkUpIHsKLSAgICAgICAgcmV0dXJuIEVJTlZBTDsKLSAgICB9Ci0KLSAgICBhdHRyLT5ndWFyZF9zaXplID0gZ3VhcmRfc2l6ZTsKLSAgICByZXR1cm4gMDsKLX0KLQotaW50IHB0aHJlYWRfYXR0cl9nZXRndWFyZHNpemUocHRocmVhZF9hdHRyX3QgY29uc3QgKiBhdHRyLCBzaXplX3QgKiBndWFyZF9zaXplKQotewotICAgICpndWFyZF9zaXplID0gYXR0ci0+Z3VhcmRfc2l6ZTsKLSAgICByZXR1cm4gMDsKLX0KLQotaW50IHB0aHJlYWRfZ2V0YXR0cl9ucChwdGhyZWFkX3QgdGhpZCwgcHRocmVhZF9hdHRyX3QgKiBhdHRyKQotewotICAgIHB0aHJlYWRfaW50ZXJuYWxfdCAqIHRocmVhZCA9IChwdGhyZWFkX2ludGVybmFsX3QgKil0aGlkOwotICAgICphdHRyID0gdGhyZWFkLT5hdHRyOwotICAgIHJldHVybiAwOwotfQotCi1pbnQgcHRocmVhZF9hdHRyX3NldHNjb3BlKHB0aHJlYWRfYXR0cl90ICphdHRyLCBpbnQgIHNjb3BlKQotewotICAgIGlmIChzY29wZSA9PSBQVEhSRUFEX1NDT1BFX1NZU1RFTSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKHNjb3BlID09IFBUSFJFQURfU0NPUEVfUFJPQ0VTUykKLSAgICAgICAgcmV0dXJuIEVOT1RTVVA7Ci0KLSAgICByZXR1cm4gRUlOVkFMOwotfQotCi1pbnQgcHRocmVhZF9hdHRyX2dldHNjb3BlKHB0aHJlYWRfYXR0cl90IGNvbnN0ICphdHRyKQotewotICAgIHJldHVybiBQVEhSRUFEX1NDT1BFX1NZU1RFTTsKLX0KLQotCiAvKiBDQVZFQVQ6IG91ciBpbXBsZW1lbnRhdGlvbiBvZiBwdGhyZWFkX2NsZWFudXBfcHVzaC9wb3AgZG9lc24ndCBzdXBwb3J0IEMrKyBleGNlcHRpb25zCiAgKiAgICAgICAgIGFuZCB0aHJlYWQgY2FuY2VsYXRpb24KICAqLwpAQCAtNTQ2LDkgKzgyLDYgQEAKICAgICAgICAgYy0+X19jbGVhbnVwX3JvdXRpbmUoYy0+X19jbGVhbnVwX2FyZyk7CiB9CiAKLS8qIHVzZWQgYnkgcHRocmVhZF9leGl0KCkgdG8gY2xlYW4gYWxsIFRMUyBrZXlzIG9mIHRoZSBjdXJyZW50IHRocmVhZCAqLwotc3RhdGljIHZvaWQgcHRocmVhZF9rZXlfY2xlYW5fYWxsKHZvaWQpOwotCiB2b2lkIHB0aHJlYWRfZXhpdCh2b2lkICogcmV0dmFsKQogewogICAgIHB0aHJlYWRfaW50ZXJuYWxfdCogIHRocmVhZCAgICAgPSBfX2dldF90aHJlYWQoKTsKQEAgLTU3MCwxNCArMTAzLDI0IEBACiAgICAgLy8gc3BhY2UgKHNlZSBwdGhyZWFkX2tleV9kZWxldGUpCiAgICAgcHRocmVhZF9rZXlfY2xlYW5fYWxsKCk7CiAKLSAgICAvLyBpZiB0aGUgdGhyZWFkIGlzIGRldGFjaGVkLCBkZXN0cm95IHRoZSBwdGhyZWFkX2ludGVybmFsX3QKLSAgICAvLyBvdGhlcndpc2UsIGtlZXAgaXQgaW4gbWVtb3J5IGFuZCBzaWduYWwgYW55IGpvaW5lcnMKLSAgICBpZiAodGhyZWFkLT5hdHRyLmZsYWdzICYgUFRIUkVBRF9BVFRSX0ZMQUdfREVUQUNIRUQpIHsKLSAgICAgICAgX3B0aHJlYWRfaW50ZXJuYWxfcmVtb3ZlKHRocmVhZCk7Ci0gICAgICAgIF9wdGhyZWFkX2ludGVybmFsX2ZyZWUodGhyZWFkKTsKLSAgICB9IGVsc2UgewotICAgICAgICBwdGhyZWFkX211dGV4X2xvY2soJmdUaHJlYWRMaXN0TG9jayk7CisgICAgaWYgKHRocmVhZC0+YWx0ZXJuYXRlX3NpZ25hbF9zdGFjayAhPSBOVUxMKSB7CisgICAgICAvLyBUZWxsIHRoZSBrZXJuZWwgdG8gc3RvcCB1c2luZyB0aGUgYWx0ZXJuYXRlIHNpZ25hbCBzdGFjay4KKyAgICAgIHN0YWNrX3Qgc3M7CisgICAgICBzcy5zc19zcCA9IE5VTEw7CisgICAgICBzcy5zc19mbGFncyA9IFNTX0RJU0FCTEU7CisgICAgICBzaWdhbHRzdGFjaygmc3MsIE5VTEwpOwogCisgICAgICAvLyBGcmVlIGl0LgorICAgICAgbXVubWFwKHRocmVhZC0+YWx0ZXJuYXRlX3NpZ25hbF9zdGFjaywgU0lHU1RLU1opOworICAgICAgdGhyZWFkLT5hbHRlcm5hdGVfc2lnbmFsX3N0YWNrID0gTlVMTDsKKyAgICB9CisKKyAgICAvLyBpZiB0aGUgdGhyZWFkIGlzIGRldGFjaGVkLCBkZXN0cm95IHRoZSBwdGhyZWFkX2ludGVybmFsX3QKKyAgICAvLyBvdGhlcndpc2UsIGtlZXAgaXQgaW4gbWVtb3J5IGFuZCBzaWduYWwgYW55IGpvaW5lcnMuCisgICAgcHRocmVhZF9tdXRleF9sb2NrKCZnVGhyZWFkTGlzdExvY2spOworICAgIGlmICh0aHJlYWQtPmF0dHIuZmxhZ3MgJiBQVEhSRUFEX0FUVFJfRkxBR19ERVRBQ0hFRCkgeworICAgICAgICBfcHRocmVhZF9pbnRlcm5hbF9yZW1vdmVfbG9ja2VkKHRocmVhZCk7CisgICAgfSBlbHNlIHsKICAgICAgICAvKiBtYWtlIHN1cmUgdGhhdCB0aGUgdGhyZWFkIHN0cnVjdCBkb2Vzbid0IGhhdmUgc3RhbGUgcG9pbnRlcnMgdG8gYSBzdGFjayB0aGF0CiAgICAgICAgICogd2lsbCBiZSB1bm1hcHBlZCBhZnRlciB0aGUgZXhpdCBjYWxsIGJlbG93LgogICAgICAgICAqLwpAQCAtNTg3LDI2ICsxMzAsMTYgQEAKICAgICAgICAgICAgIHRocmVhZC0+dGxzID0gTlVMTDsKICAgICAgICAgfQogCi0gICAgICAgLyogdGhlIGpvaW5fY291bnQgZmllbGQgaXMgdXNlZCB0byBzdG9yZSB0aGUgbnVtYmVyIG9mIHRocmVhZHMgd2FpdGluZyBmb3IKLSAgICAgICAgKiB0aGUgdGVybWluYXRpb24gb2YgdGhpcyB0aHJlYWQgd2l0aCBwdGhyZWFkX2pvaW4oKSwKLSAgICAgICAgKgotICAgICAgICAqIGlmIGl0IGlzIHBvc2l0aXZlIHdlIG5lZWQgdG8gc2lnbmFsIHRoZSB3YWl0ZXJzLCBhbmQgd2UgZG8gbm90IHRvdWNoCi0gICAgICAgICogdGhlIGNvdW50IChpdCB3aWxsIGJlIGRlY3JlbWVudGVkIGJ5IHRoZSB3YWl0ZXJzLCB0aGUgbGFzdCBvbmUgd2lsbAotICAgICAgICAqIGFsc28gcmVtb3ZlL2ZyZWUgdGhlIHRocmVhZCBzdHJ1Y3R1cmUKLSAgICAgICAgKgotICAgICAgICAqIGlmIGl0IGlzIHplcm8sIHdlIHNldCB0aGUgY291bnQgdmFsdWUgdG8gLTEgdG8gaW5kaWNhdGUgdGhhdCB0aGUKLSAgICAgICAgKiB0aHJlYWQgaXMgaW4gJ3pvbWJpZScgc3RhdGU6IGl0IGhhcyBzdG9wcGVkIGV4ZWN1dGluZywgYW5kIGl0cyBzdGFjawotICAgICAgICAqIGlzIGdvbmUgKGFzIHdlbGwgYXMgaXRzIFRMUyBhcmVhKS4gd2hlbiBhbm90aGVyIHRocmVhZCBjYWxscyBwdGhyZWFkX2pvaW4oKQotICAgICAgICAqIG9uIGl0LCBpdCB3aWxsIGltbWVkaWF0ZWx5IGZyZWUgdGhlIHRocmVhZCBhbmQgcmV0dXJuLgotICAgICAgICAqLworICAgICAgIC8qIEluZGljYXRlIHRoYXQgdGhlIHRocmVhZCBoYXMgZXhpdGVkIGZvciBqb2luaW5nIHRocmVhZHMuICovCisgICAgICAgIHRocmVhZC0+YXR0ci5mbGFncyB8PSBQVEhSRUFEX0FUVFJfRkxBR19aT01CSUU7CiAgICAgICAgIHRocmVhZC0+cmV0dXJuX3ZhbHVlID0gcmV0dmFsOwotICAgICAgICBpZiAodGhyZWFkLT5qb2luX2NvdW50ID4gMCkgewotICAgICAgICAgICAgcHRocmVhZF9jb25kX2Jyb2FkY2FzdCgmdGhyZWFkLT5qb2luX2NvbmQpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdGhyZWFkLT5qb2luX2NvdW50ID0gLTE7ICAvKiB6b21iaWUgdGhyZWFkICovCisKKyAgICAgICAvKiBTaWduYWwgdGhlIGpvaW5pbmcgdGhyZWFkIGlmIHByZXNlbnQuICovCisgICAgICAgIGlmICh0aHJlYWQtPmF0dHIuZmxhZ3MgJiBQVEhSRUFEX0FUVFJfRkxBR19KT0lORUQpIHsKKyAgICAgICAgICAgIHB0aHJlYWRfY29uZF9zaWduYWwoJnRocmVhZC0+am9pbl9jb25kKTsKICAgICAgICAgfQotICAgICAgICBwdGhyZWFkX211dGV4X3VubG9jaygmZ1RocmVhZExpc3RMb2NrKTsKICAgICB9CisgICAgcHRocmVhZF9tdXRleF91bmxvY2soJmdUaHJlYWRMaXN0TG9jayk7CiAKICAgICBzaWdmaWxsc2V0KCZtYXNrKTsKICAgICBzaWdkZWxzZXQoJm1hc2ssIFNJR1NFR1YpOwpAQCAtNjE5LDE1NSArMTUyLDE1NiBAQAogICAgICAgICBfZXhpdF93aXRoX3N0YWNrX3RlYXJkb3duKHN0YWNrX2Jhc2UsIHN0YWNrX3NpemUsIChpbnQpcmV0dmFsKTsKIH0KIAotaW50IHB0aHJlYWRfam9pbihwdGhyZWFkX3QgdGhpZCwgdm9pZCAqKiByZXRfdmFsKQotewotICAgIHB0aHJlYWRfaW50ZXJuYWxfdCogIHRocmVhZCA9IChwdGhyZWFkX2ludGVybmFsX3QqKXRoaWQ7Ci0gICAgaW50ICAgICAgICAgICAgICAgICAgY291bnQ7Ci0KLSAgICAvLyBjaGVjayB0aGF0IHRoZSB0aHJlYWQgc3RpbGwgZXhpc3RzIGFuZCBpcyBub3QgZGV0YWNoZWQKLSAgICBwdGhyZWFkX211dGV4X2xvY2soJmdUaHJlYWRMaXN0TG9jayk7Ci0KLSAgICBmb3IgKHRocmVhZCA9IGdUaHJlYWRMaXN0OyB0aHJlYWQgIT0gTlVMTDsgdGhyZWFkID0gdGhyZWFkLT5uZXh0KQotICAgICAgICBpZiAodGhyZWFkID09IChwdGhyZWFkX2ludGVybmFsX3QqKXRoaWQpCi0gICAgICAgICAgICBnb3RvIEZvdW5kSXQ7Ci0KLSAgICBwdGhyZWFkX211dGV4X3VubG9jaygmZ1RocmVhZExpc3RMb2NrKTsKLSAgICByZXR1cm4gRVNSQ0g7Ci0KLUZvdW5kSXQ6Ci0gICAgaWYgKHRocmVhZC0+YXR0ci5mbGFncyAmIFBUSFJFQURfQVRUUl9GTEFHX0RFVEFDSEVEKSB7Ci0gICAgICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZnVGhyZWFkTGlzdExvY2spOwotICAgICAgICByZXR1cm4gRUlOVkFMOwotICAgIH0KLQotICAgLyogd2FpdCBmb3IgdGhyZWFkIGRlYXRoIHdoZW4gbmVlZGVkCi0gICAgKgotICAgICogaWYgdGhlICdqb2luX2NvdW50JyBpcyBuZWdhdGl2ZSwgdGhpcyBpcyBhICd6b21iaWUnIHRocmVhZCB0aGF0Ci0gICAgKiBpcyBhbHJlYWR5IGRlYWQgYW5kIHdpdGhvdXQgc3RhY2svVExTCi0gICAgKgotICAgICogb3RoZXJ3aXNlLCB3ZSBuZWVkIHRvIGluY3JlbWVudCAnam9pbi1jb3VudCcgYW5kIHdhaXQgdG8gYmUgc2lnbmFsZWQKLSAgICAqLwotICAgY291bnQgPSB0aHJlYWQtPmpvaW5fY291bnQ7Ci0gICAgaWYgKGNvdW50ID49IDApIHsKLSAgICAgICAgdGhyZWFkLT5qb2luX2NvdW50ICs9IDE7Ci0gICAgICAgIHB0aHJlYWRfY29uZF93YWl0KCAmdGhyZWFkLT5qb2luX2NvbmQsICZnVGhyZWFkTGlzdExvY2sgKTsKLSAgICAgICAgY291bnQgPSAtLXRocmVhZC0+am9pbl9jb3VudDsKLSAgICB9Ci0gICAgaWYgKHJldF92YWwpCi0gICAgICAgICpyZXRfdmFsID0gdGhyZWFkLT5yZXR1cm5fdmFsdWU7Ci0KLSAgICAvKiByZW1vdmUgdGhyZWFkIGRlc2NyaXB0b3Igd2hlbiB3ZSdyZSB0aGUgbGFzdCBqb2luZXIgb3Igd2hlbiB0aGUKLSAgICAgKiB0aHJlYWQgd2FzIGFscmVhZHkgYSB6b21iaWUuCi0gICAgICovCi0gICAgaWYgKGNvdW50IDw9IDApIHsKLSAgICAgICAgX3B0aHJlYWRfaW50ZXJuYWxfcmVtb3ZlX2xvY2tlZCh0aHJlYWQpOwotICAgICAgICBfcHRocmVhZF9pbnRlcm5hbF9mcmVlKHRocmVhZCk7Ci0gICAgfQotICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZnVGhyZWFkTGlzdExvY2spOwotICAgIHJldHVybiAwOwotfQotCi1pbnQgIHB0aHJlYWRfZGV0YWNoKCBwdGhyZWFkX3QgIHRoaWQgKQotewotICAgIHB0aHJlYWRfaW50ZXJuYWxfdCogIHRocmVhZDsKLSAgICBpbnQgICAgICAgICAgICAgICAgICByZXN1bHQgPSAwOwotICAgIGludCAgICAgICAgICAgICAgICAgIGZsYWdzOwotCi0gICAgcHRocmVhZF9tdXRleF9sb2NrKCZnVGhyZWFkTGlzdExvY2spOwotICAgIGZvciAodGhyZWFkID0gZ1RocmVhZExpc3Q7IHRocmVhZCAhPSBOVUxMOyB0aHJlYWQgPSB0aHJlYWQtPm5leHQpCi0gICAgICAgIGlmICh0aHJlYWQgPT0gKHB0aHJlYWRfaW50ZXJuYWxfdCopdGhpZCkKLSAgICAgICAgICAgIGdvdG8gRm91bmRJdDsKLQotICAgIHJlc3VsdCA9IEVTUkNIOwotICAgIGdvdG8gRXhpdDsKLQotRm91bmRJdDoKLSAgICBkbyB7Ci0gICAgICAgIGZsYWdzID0gdGhyZWFkLT5hdHRyLmZsYWdzOwotCi0gICAgICAgIGlmICggZmxhZ3MgJiBQVEhSRUFEX0FUVFJfRkxBR19ERVRBQ0hFRCApIHsKLSAgICAgICAgICAgIC8qIHRocmVhZCBpcyBub3Qgam9pbmFibGUgISAqLwotICAgICAgICAgICAgcmVzdWx0ID0gRUlOVkFMOwotICAgICAgICAgICAgZ290byBFeGl0OwotICAgICAgICB9Ci0gICAgfQotICAgIHdoaWxlICggX19hdG9taWNfY21weGNoZyggZmxhZ3MsIGZsYWdzIHwgUFRIUkVBRF9BVFRSX0ZMQUdfREVUQUNIRUQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9sYXRpbGUgaW50KikmdGhyZWFkLT5hdHRyLmZsYWdzICkgIT0gMCApOwotRXhpdDoKLSAgICBwdGhyZWFkX211dGV4X3VubG9jaygmZ1RocmVhZExpc3RMb2NrKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1wdGhyZWFkX3QgcHRocmVhZF9zZWxmKHZvaWQpCi17Ci0gICAgcmV0dXJuIChwdGhyZWFkX3QpX19nZXRfdGhyZWFkKCk7Ci19Ci0KLWludCBwdGhyZWFkX2VxdWFsKHB0aHJlYWRfdCBvbmUsIHB0aHJlYWRfdCB0d28pCi17Ci0gICAgcmV0dXJuIChvbmUgPT0gdHdvID8gMSA6IDApOwotfQotCi1pbnQgcHRocmVhZF9nZXRzY2hlZHBhcmFtKHB0aHJlYWRfdCB0aGlkLCBpbnQgKiBwb2xpY3ksCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzY2hlZF9wYXJhbSAqIHBhcmFtKQotewotICAgIGludCAgb2xkX2Vycm5vID0gZXJybm87Ci0KLSAgICBwdGhyZWFkX2ludGVybmFsX3QgKiB0aHJlYWQgPSAocHRocmVhZF9pbnRlcm5hbF90ICopdGhpZDsKLSAgICBpbnQgZXJyID0gc2NoZWRfZ2V0cGFyYW0odGhyZWFkLT5rZXJuZWxfaWQsIHBhcmFtKTsKLSAgICBpZiAoIWVycikgewotICAgICAgICAqcG9saWN5ID0gc2NoZWRfZ2V0c2NoZWR1bGVyKHRocmVhZC0+a2VybmVsX2lkKTsKLSAgICB9IGVsc2UgewotICAgICAgICBlcnIgPSBlcnJubzsKLSAgICAgICAgZXJybm8gPSBvbGRfZXJybm87Ci0gICAgfQotICAgIHJldHVybiBlcnI7Ci19Ci0KLWludCBwdGhyZWFkX3NldHNjaGVkcGFyYW0ocHRocmVhZF90IHRoaWQsIGludCBwb2xpY3ksCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzY2hlZF9wYXJhbSBjb25zdCAqIHBhcmFtKQotewotICAgIHB0aHJlYWRfaW50ZXJuYWxfdCAqIHRocmVhZCA9IChwdGhyZWFkX2ludGVybmFsX3QgKil0aGlkOwotICAgIGludCAgICAgICAgICAgICAgICAgIG9sZF9lcnJubyA9IGVycm5vOwotICAgIGludCAgICAgICAgICAgICAgICAgIHJldDsKLQotICAgIHJldCA9IHNjaGVkX3NldHNjaGVkdWxlcih0aHJlYWQtPmtlcm5lbF9pZCwgcG9saWN5LCBwYXJhbSk7Ci0gICAgaWYgKHJldCA8IDApIHsKLSAgICAgICAgcmV0ID0gZXJybm87Ci0gICAgICAgIGVycm5vID0gb2xkX2Vycm5vOwotICAgIH0KLSAgICByZXR1cm4gcmV0OwotfQotCi0KLS8vIG11dGV4IGxvY2sgc3RhdGVzCi0vLwotLy8gMDogdW5sb2NrZWQKLS8vIDE6IGxvY2tlZCwgbm8gd2FpdGVycwotLy8gMjogbG9ja2VkLCBtYXliZSB3YWl0ZXJzCi0KIC8qIGEgbXV0ZXggaXMgaW1wbGVtZW50ZWQgYXMgYSAzMi1iaXQgaW50ZWdlciBob2xkaW5nIHRoZSBmb2xsb3dpbmcgZmllbGRzCiAgKgogICogYml0czogICAgIG5hbWUgICAgIGRlc2NyaXB0aW9uCi0gKiAzMS0xNiAgICAgdGlkICAgICAgb3duZXIgdGhyZWFkJ3Mga2VybmVsIGlkIChyZWN1cnNpdmUgYW5kIGVycm9yY2hlY2sgb25seSkKKyAqIDMxLTE2ICAgICB0aWQgICAgICBvd25lciB0aHJlYWQncyB0aWQgKHJlY3Vyc2l2ZSBhbmQgZXJyb3JjaGVjayBvbmx5KQogICogMTUtMTQgICAgIHR5cGUgICAgIG11dGV4IHR5cGUKICAqIDEzICAgICAgICBzaGFyZWQgICBwcm9jZXNzLXNoYXJlZCBmbGFnCiAgKiAxMi0yICAgICAgY291bnRlciAgY291bnRlciBvZiByZWN1cnNpdmUgbXV0ZXhlcwogICogMS0wICAgICAgIHN0YXRlICAgIGxvY2sgc3RhdGUgKDAsIDEgb3IgMikKICAqLwogCisvKiBDb252ZW5pZW5jZSBtYWNybywgY3JlYXRlcyBhIG1hc2sgb2YgJ2JpdHMnIGJpdHMgdGhhdCBzdGFydHMgZnJvbQorICogdGhlICdzaGlmdCctdGggbGVhc3Qgc2lnbmlmaWNhbnQgYml0IGluIGEgMzItYml0IHdvcmQuCisgKgorICogRXhhbXBsZXM6IEZJRUxEX01BU0soMCw0KSAgLT4gMHhmCisgKiAgICAgICAgICAgRklFTERfTUFTSygxNiw5KSAtPiAweDFmZjAwMDAKKyAqLworI2RlZmluZSAgRklFTERfTUFTSyhzaGlmdCxiaXRzKSAgICAgICAgICAgKCgoMSA8PCAoYml0cykpLTEpIDw8IChzaGlmdCkpCiAKLSNkZWZpbmUgIE1VVEVYX09XTkVSKG0pICAoKChtKS0+dmFsdWUgPj4gMTYpICYgMHhmZmZmKQotI2RlZmluZSAgTVVURVhfQ09VTlRFUihtKSAoKChtKS0+dmFsdWUgPj4gMikgJiAweGZmZikKKy8qIFRoaXMgb25lIGlzIHVzZWQgdG8gY3JlYXRlIGEgYml0IHBhdHRlcm4gZnJvbSBhIGdpdmVuIGZpZWxkIHZhbHVlICovCisjZGVmaW5lICBGSUVMRF9UT19CSVRTKHZhbCxzaGlmdCxiaXRzKSAgICAoKCh2YWwpICYgKCgxIDw8IChiaXRzKSktMSkpIDw8IChzaGlmdCkpCiAKLSNkZWZpbmUgIE1VVEVYX1RZUEVfTUFTSyAgICAgICAweGMwMDAKLSNkZWZpbmUgIE1VVEVYX1RZUEVfTk9STUFMICAgICAweDAwMDAKLSNkZWZpbmUgIE1VVEVYX1RZUEVfUkVDVVJTSVZFICAweDQwMDAKLSNkZWZpbmUgIE1VVEVYX1RZUEVfRVJST1JDSEVDSyAweDgwMDAKKy8qIEFuZCB0aGlzIG9uZSBkb2VzIHRoZSBvcHBvc2l0ZSwgaS5lLiBleHRyYWN0IGEgZmllbGQncyB2YWx1ZSBmcm9tIGEgYml0IHBhdHRlcm4gKi8KKyNkZWZpbmUgIEZJRUxEX0ZST01fQklUUyh2YWwsc2hpZnQsYml0cykgICgoKHZhbCkgPj4gKHNoaWZ0KSkgJiAoKDEgPDwgKGJpdHMpKS0xKSkKIAotI2RlZmluZSAgTVVURVhfQ09VTlRFUl9TSElGVCAgMgotI2RlZmluZSAgTVVURVhfQ09VTlRFUl9NQVNLICAgMHgxZmZjCi0jZGVmaW5lICBNVVRFWF9TSEFSRURfTUFTSyAgICAweDIwMDAKKy8qIE11dGV4IHN0YXRlOgorICoKKyAqIDAgZm9yIHVubG9ja2VkCisgKiAxIGZvciBsb2NrZWQsIG5vIHdhaXRlcnMKKyAqIDIgZm9yIGxvY2tlZCwgbWF5YmUgd2FpdGVycworICovCisjZGVmaW5lICBNVVRFWF9TVEFURV9TSElGVCAgICAgIDAKKyNkZWZpbmUgIE1VVEVYX1NUQVRFX0xFTiAgICAgICAgMgorCisjZGVmaW5lICBNVVRFWF9TVEFURV9NQVNLICAgICAgICAgICBGSUVMRF9NQVNLKE1VVEVYX1NUQVRFX1NISUZULCBNVVRFWF9TVEFURV9MRU4pCisjZGVmaW5lICBNVVRFWF9TVEFURV9GUk9NX0JJVFModikgICBGSUVMRF9GUk9NX0JJVFModiwgTVVURVhfU1RBVEVfU0hJRlQsIE1VVEVYX1NUQVRFX0xFTikKKyNkZWZpbmUgIE1VVEVYX1NUQVRFX1RPX0JJVFModikgICAgIEZJRUxEX1RPX0JJVFModiwgTVVURVhfU1RBVEVfU0hJRlQsIE1VVEVYX1NUQVRFX0xFTikKKworI2RlZmluZSAgTVVURVhfU1RBVEVfVU5MT0NLRUQgICAgICAgICAgICAwICAgLyogbXVzdCBiZSAwIHRvIG1hdGNoIF9fUFRIUkVBRF9NVVRFWF9JTklUX1ZBTFVFICovCisjZGVmaW5lICBNVVRFWF9TVEFURV9MT0NLRURfVU5DT05URU5ERUQgIDEgICAvKiBtdXN0IGJlIDEgZHVlIHRvIGF0b21pYyBkZWMgaW4gdW5sb2NrIG9wZXJhdGlvbiAqLworI2RlZmluZSAgTVVURVhfU1RBVEVfTE9DS0VEX0NPTlRFTkRFRCAgICAyICAgLyogbXVzdCBiZSAxICsgTE9DS0VEX1VOQ09OVEVOREVEIGR1ZSB0byBhdG9taWMgZGVjICovCisKKyNkZWZpbmUgIE1VVEVYX1NUQVRFX0ZST01fQklUUyh2KSAgICBGSUVMRF9GUk9NX0JJVFModiwgTVVURVhfU1RBVEVfU0hJRlQsIE1VVEVYX1NUQVRFX0xFTikKKyNkZWZpbmUgIE1VVEVYX1NUQVRFX1RPX0JJVFModikgICAgICBGSUVMRF9UT19CSVRTKHYsIE1VVEVYX1NUQVRFX1NISUZULCBNVVRFWF9TVEFURV9MRU4pCisKKyNkZWZpbmUgIE1VVEVYX1NUQVRFX0JJVFNfVU5MT0NLRUQgICAgICAgICAgICBNVVRFWF9TVEFURV9UT19CSVRTKE1VVEVYX1NUQVRFX1VOTE9DS0VEKQorI2RlZmluZSAgTVVURVhfU1RBVEVfQklUU19MT0NLRURfVU5DT05URU5ERUQgIE1VVEVYX1NUQVRFX1RPX0JJVFMoTVVURVhfU1RBVEVfTE9DS0VEX1VOQ09OVEVOREVEKQorI2RlZmluZSAgTVVURVhfU1RBVEVfQklUU19MT0NLRURfQ09OVEVOREVEICAgIE1VVEVYX1NUQVRFX1RPX0JJVFMoTVVURVhfU1RBVEVfTE9DS0VEX0NPTlRFTkRFRCkKKworLyogcmV0dXJuIHRydWUgaWZmIHRoZSBtdXRleCBpZiBsb2NrZWQgd2l0aCBubyB3YWl0ZXJzICovCisjZGVmaW5lICBNVVRFWF9TVEFURV9CSVRTX0lTX0xPQ0tFRF9VTkNPTlRFTkRFRCh2KSAgKCgodikgJiBNVVRFWF9TVEFURV9NQVNLKSA9PSBNVVRFWF9TVEFURV9CSVRTX0xPQ0tFRF9VTkNPTlRFTkRFRCkKKworLyogcmV0dXJuIHRydWUgaWZmIHRoZSBtdXRleCBpZiBsb2NrZWQgd2l0aCBtYXliZSB3YWl0ZXJzICovCisjZGVmaW5lICBNVVRFWF9TVEFURV9CSVRTX0lTX0xPQ0tFRF9DT05URU5ERUQodikgICAoKCh2KSAmIE1VVEVYX1NUQVRFX01BU0spID09IE1VVEVYX1NUQVRFX0JJVFNfTE9DS0VEX0NPTlRFTkRFRCkKKworLyogdXNlZCB0byBmbGlwIGZyb20gTE9DS0VEX1VOQ09OVEVOREVEIHRvIExPQ0tFRF9DT05URU5ERUQgKi8KKyNkZWZpbmUgIE1VVEVYX1NUQVRFX0JJVFNfRkxJUF9DT05URU5USU9OKHYpICAgICAgKCh2KSBeIChNVVRFWF9TVEFURV9CSVRTX0xPQ0tFRF9DT05URU5ERUQgXiBNVVRFWF9TVEFURV9CSVRTX0xPQ0tFRF9VTkNPTlRFTkRFRCkpCisKKy8qIE11dGV4IGNvdW50ZXI6CisgKgorICogV2UgbmVlZCB0byBjaGVjayBmb3Igb3ZlcmZsb3cgYmVmb3JlIGluY3JlbWVudGluZywgYW5kIHdlIGFsc28gbmVlZCB0bworICogZGV0ZWN0IHdoZW4gdGhlIGNvdW50ZXIgaXMgMAorICovCisjZGVmaW5lICBNVVRFWF9DT1VOVEVSX1NISUZUICAgICAgICAgMgorI2RlZmluZSAgTVVURVhfQ09VTlRFUl9MRU4gICAgICAgICAgIDExCisjZGVmaW5lICBNVVRFWF9DT1VOVEVSX01BU0sgICAgICAgICAgRklFTERfTUFTSyhNVVRFWF9DT1VOVEVSX1NISUZULCBNVVRFWF9DT1VOVEVSX0xFTikKKworI2RlZmluZSAgTVVURVhfQ09VTlRFUl9CSVRTX1dJTExfT1ZFUkZMT1codikgICAgKCgodikgJiBNVVRFWF9DT1VOVEVSX01BU0spID09IE1VVEVYX0NPVU5URVJfTUFTSykKKyNkZWZpbmUgIE1VVEVYX0NPVU5URVJfQklUU19JU19aRVJPKHYpICAgICAgICAgICgoKHYpICYgTVVURVhfQ09VTlRFUl9NQVNLKSA9PSAwKQorCisvKiBVc2VkIHRvIGluY3JlbWVudCB0aGUgY291bnRlciBkaXJlY3RseSBhZnRlciBvdmVyZmxvdyBoYXMgYmVlbiBjaGVja2VkICovCisjZGVmaW5lICBNVVRFWF9DT1VOVEVSX0JJVFNfT05FICAgICAgRklFTERfVE9fQklUUygxLE1VVEVYX0NPVU5URVJfU0hJRlQsTVVURVhfQ09VTlRFUl9MRU4pCisKKy8qIFJldHVybnMgdHJ1ZSBpZmYgdGhlIGNvdW50ZXIgaXMgMCAqLworI2RlZmluZSAgTVVURVhfQ09VTlRFUl9CSVRTX0FSRV9aRVJPKHYpICAoKCh2KSAmIE1VVEVYX0NPVU5URVJfTUFTSykgPT0gMCkKKworLyogTXV0ZXggc2hhcmVkIGJpdCBmbGFnCisgKgorICogVGhpcyBmbGFnIGlzIHNldCB0byBpbmRpY2F0ZSB0aGF0IHRoZSBtdXRleCBpcyBzaGFyZWQgYW1vbmcgcHJvY2Vzc2VzLgorICogVGhpcyBjaGFuZ2VzIHRoZSBmdXRleCBvcGNvZGUgd2UgdXNlIGZvciBmdXRleCB3YWl0L3dha2Ugb3BlcmF0aW9ucworICogKG5vbi1zaGFyZWQgb3BlcmF0aW9ucyBhcmUgbXVjaCBmYXN0ZXIpLgorICovCisjZGVmaW5lICBNVVRFWF9TSEFSRURfU0hJRlQgICAgMTMKKyNkZWZpbmUgIE1VVEVYX1NIQVJFRF9NQVNLICAgICBGSUVMRF9NQVNLKE1VVEVYX1NIQVJFRF9TSElGVCwxKQorCisvKiBNdXRleCB0eXBlOgorICoKKyAqIFdlIHN1cHBvcnQgbm9ybWFsLCByZWN1cnNpdmUgYW5kIGVycm9yY2hlY2sgbXV0ZXhlcy4KKyAqCisgKiBUaGUgY29uc3RhbnRzIGRlZmluZWQgaGVyZSAqY2Fubm90KiBiZSBjaGFuZ2VkIGJlY2F1c2UgdGhleSBtdXN0IG1hdGNoCisgKiB0aGUgQyBsaWJyYXJ5IEFCSSB3aGljaCBkZWZpbmVzIHRoZSBmb2xsb3dpbmcgaW5pdGlhbGl6YXRpb24gdmFsdWVzIGluCisgKiA8cHRocmVhZC5oPjoKKyAqCisgKiAgIF9fUFRIUkVBRF9NVVRFWF9JTklUX1ZBTFVFCisgKiAgIF9fUFRIUkVBRF9SRUNVUlNJVkVfTVVURVhfVkFMVUUKKyAqICAgX19QVEhSRUFEX0VSUk9SQ0hFQ0tfTVVURVhfSU5JVF9WQUxVRQorICovCisjZGVmaW5lICBNVVRFWF9UWVBFX1NISUZUICAgICAgMTQKKyNkZWZpbmUgIE1VVEVYX1RZUEVfTEVOICAgICAgICAyCisjZGVmaW5lICBNVVRFWF9UWVBFX01BU0sgICAgICAgRklFTERfTUFTSyhNVVRFWF9UWVBFX1NISUZULE1VVEVYX1RZUEVfTEVOKQorCisjZGVmaW5lICBNVVRFWF9UWVBFX05PUk1BTCAgICAgICAgICAwICAvKiBNdXN0IGJlIDAgdG8gbWF0Y2ggX19QVEhSRUFEX01VVEVYX0lOSVRfVkFMVUUgKi8KKyNkZWZpbmUgIE1VVEVYX1RZUEVfUkVDVVJTSVZFICAgICAgIDEKKyNkZWZpbmUgIE1VVEVYX1RZUEVfRVJST1JDSEVDSyAgICAgIDIKKworI2RlZmluZSAgTVVURVhfVFlQRV9UT19CSVRTKHQpICAgICAgIEZJRUxEX1RPX0JJVFModCwgTVVURVhfVFlQRV9TSElGVCwgTVVURVhfVFlQRV9MRU4pCisKKyNkZWZpbmUgIE1VVEVYX1RZUEVfQklUU19OT1JNQUwgICAgICBNVVRFWF9UWVBFX1RPX0JJVFMoTVVURVhfVFlQRV9OT1JNQUwpCisjZGVmaW5lICBNVVRFWF9UWVBFX0JJVFNfUkVDVVJTSVZFICAgTVVURVhfVFlQRV9UT19CSVRTKE1VVEVYX1RZUEVfUkVDVVJTSVZFKQorI2RlZmluZSAgTVVURVhfVFlQRV9CSVRTX0VSUk9SQ0hFQ0sgIE1VVEVYX1RZUEVfVE9fQklUUyhNVVRFWF9UWVBFX0VSUk9SQ0hFQ0spCisKKy8qIE11dGV4IG93bmVyIGZpZWxkOgorICoKKyAqIFRoaXMgaXMgb25seSB1c2VkIGZvciByZWN1cnNpdmUgYW5kIGVycm9yY2hlY2sgbXV0ZXhlcy4gSXQgaG9sZHMgdGhlCisgKiB0aWQgb2YgdGhlIG93bmluZyB0aHJlYWQuIE5vdGUgdGhhdCB0aGlzIHdvcmtzIGJlY2F1c2UgdGhlIExpbnV4CisgKiBrZXJuZWwgX29ubHlfIHVzZXMgMTYtYml0IHZhbHVlcyBmb3IgdGlkcy4KKyAqCisgKiBNb3JlIHNwZWNpZmljYWxseSwgaXQgd2lsbCB3cmFwIHRvIDEwMDAwIHdoZW4gaXQgcmVhY2hlcyBvdmVyIDMyNzY4IGZvcgorICogYXBwbGljYXRpb24gcHJvY2Vzc2VzLiBZb3UgY2FuIGNoZWNrIHRoaXMgYnkgcnVubmluZyB0aGUgZm9sbG93aW5nIGluc2lkZQorICogYW4gYWRiIHNoZWxsIHNlc3Npb246CisgKgorICAgIE9MRFBJRD0kJDsKKyAgICB3aGlsZSB0cnVlOyBkbworICAgIE5FV1BJRD0kKHNoIC1jICdlY2hvICQkJykKKyAgICBpZiBbICIkTkVXUElEIiAtZ3QgMzI3NjggXTsgdGhlbgorICAgICAgICBlY2hvICJBQVJHSDogbmV3IFBJRCAkTkVXUElEIGlzIHRvbyBoaWdoISIKKyAgICAgICAgZXhpdCAxCisgICAgZmkKKyAgICBpZiBbICIkTkVXUElEIiAtbHQgIiRPTERQSUQiIF07IHRoZW4KKyAgICAgICAgZWNobyAiKioqKioqIFdyYXBwaW5nIGZyb20gUElEICRPTERQSUQgdG8gJE5FV1BJRC4gKioqKioqKiIKKyAgICBlbHNlCisgICAgICAgIGVjaG8gLW4gIiRORVdQSUQhIgorICAgIGZpCisgICAgT0xEUElEPSRORVdQSUQKKyAgICBkb25lCisKKyAqIE5vdGUgdGhhdCB5b3UgY2FuIHJ1biB0aGUgc2FtZSBleGFtcGxlIG9uIGEgZGVza3RvcCBMaW51eCBzeXN0ZW0sCisgKiB0aGUgd3JhcHBpbmcgd2lsbCBhbHNvIGhhcHBlbiBhdCAzMjc2OCwgYnV0IHdpbGwgZ28gYmFjayB0byAzMDAgaW5zdGVhZC4KKyAqLworI2RlZmluZSAgTVVURVhfT1dORVJfU0hJRlQgICAgIDE2CisjZGVmaW5lICBNVVRFWF9PV05FUl9MRU4gICAgICAgMTYKKworI2RlZmluZSAgTVVURVhfT1dORVJfRlJPTV9CSVRTKHYpICAgIEZJRUxEX0ZST01fQklUUyh2LE1VVEVYX09XTkVSX1NISUZULE1VVEVYX09XTkVSX0xFTikKKyNkZWZpbmUgIE1VVEVYX09XTkVSX1RPX0JJVFModikgICAgICBGSUVMRF9UT19CSVRTKHYsTVVURVhfT1dORVJfU0hJRlQsTVVURVhfT1dORVJfTEVOKQorCisvKiBDb252ZW5pZW5jZSBtYWNyb3MuCisgKgorICogVGhlc2UgYXJlIHVzZWQgdG8gZm9ybSBvciBtb2RpZnkgdGhlIGJpdCBwYXR0ZXJuIG9mIGEgZ2l2ZW4gbXV0ZXggdmFsdWUKKyAqLworCisKIAogLyogYSBtdXRleCBhdHRyaWJ1dGUgaG9sZHMgdGhlIGZvbGxvd2luZyBmaWVsZHMKICAqCkBAIC04NjUsOCArMzk5LDggQEAKICAgICBpZiAobXV0ZXggPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIEVJTlZBTDsKIAotICAgIGlmIChfX2xpa2VseShhdHRyID09IE5VTEwpKSB7Ci0gICAgICAgIG11dGV4LT52YWx1ZSA9IE1VVEVYX1RZUEVfTk9STUFMOworICAgIGlmIChfX3ByZWRpY3RfdHJ1ZShhdHRyID09IE5VTEwpKSB7CisgICAgICAgIG11dGV4LT52YWx1ZSA9IE1VVEVYX1RZUEVfQklUU19OT1JNQUw7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIApAQCAtODc1LDEzICs0MDksMTMgQEAKIAogICAgIHN3aXRjaCAoKmF0dHIgJiBNVVRFWEFUVFJfVFlQRV9NQVNLKSB7CiAgICAgY2FzZSBQVEhSRUFEX01VVEVYX05PUk1BTDoKLSAgICAgICAgdmFsdWUgfD0gTVVURVhfVFlQRV9OT1JNQUw7CisgICAgICAgIHZhbHVlIHw9IE1VVEVYX1RZUEVfQklUU19OT1JNQUw7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgUFRIUkVBRF9NVVRFWF9SRUNVUlNJVkU6Ci0gICAgICAgIHZhbHVlIHw9IE1VVEVYX1RZUEVfUkVDVVJTSVZFOworICAgICAgICB2YWx1ZSB8PSBNVVRFWF9UWVBFX0JJVFNfUkVDVVJTSVZFOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFBUSFJFQURfTVVURVhfRVJST1JDSEVDSzoKLSAgICAgICAgdmFsdWUgfD0gTVVURVhfVFlQRV9FUlJPUkNIRUNLOworICAgICAgICB2YWx1ZSB8PSBNVVRFWF9UWVBFX0JJVFNfRVJST1JDSEVDSzsKICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKICAgICAgICAgcmV0dXJuIEVJTlZBTDsKQEAgLTg5MSwyMCArNDI1LDYgQEAKICAgICByZXR1cm4gMDsKIH0KIAotaW50IHB0aHJlYWRfbXV0ZXhfZGVzdHJveShwdGhyZWFkX211dGV4X3QgKm11dGV4KQotewotICAgIGludCByZXQ7Ci0KLSAgICAvKiB1c2UgdHJ5bG9jayB0byBlbnN1cmUgdGhhdCB0aGUgbXV0ZXggdmFsdWUgaXMKLSAgICAgKiB2YWxpZCBhbmQgaXMgbm90IGFscmVhZHkgbG9ja2VkLiAqLwotICAgIHJldCA9IHB0aHJlYWRfbXV0ZXhfdHJ5bG9jayhtdXRleCk7Ci0gICAgaWYgKHJldCAhPSAwKQotICAgICAgICByZXR1cm4gcmV0OwotCi0gICAgbXV0ZXgtPnZhbHVlID0gMHhkZWFkMTBjYzsKLSAgICByZXR1cm4gMDsKLX0KLQogCiAvKgogICogTG9jayBhIG5vbi1yZWN1cnNpdmUgbXV0ZXguCkBAIC05MTksMjMgKzQzOSwyNSBAQAogICogdGhlIGxvY2sgc3RhdGUgZmllbGQuCiAgKi8KIHN0YXRpYyBfX2lubGluZV9fIHZvaWQKLV9ub3JtYWxfbG9jayhwdGhyZWFkX211dGV4X3QqICBtdXRleCkKK19ub3JtYWxfbG9jayhwdGhyZWFkX211dGV4X3QqICBtdXRleCwgaW50IHNoYXJlZCkKIHsKLSAgICAvKiBXZSBuZWVkIHRvIHByZXNlcnZlIHRoZSBzaGFyZWQgZmxhZyBkdXJpbmcgb3BlcmF0aW9ucyAqLwotICAgIGludCAgc2hhcmVkID0gbXV0ZXgtPnZhbHVlICYgTVVURVhfU0hBUkVEX01BU0s7CisgICAgLyogY29udmVuaWVuY2Ugc2hvcnRjdXRzICovCisgICAgY29uc3QgaW50IHVubG9ja2VkICAgICAgICAgICA9IHNoYXJlZCB8IE1VVEVYX1NUQVRFX0JJVFNfVU5MT0NLRUQ7CisgICAgY29uc3QgaW50IGxvY2tlZF91bmNvbnRlbmRlZCA9IHNoYXJlZCB8IE1VVEVYX1NUQVRFX0JJVFNfTE9DS0VEX1VOQ09OVEVOREVEOwogICAgIC8qCiAgICAgICogVGhlIGNvbW1vbiBjYXNlIGlzIGFuIHVubG9ja2VkIG11dGV4LCBzbyB3ZSBiZWdpbiBieSB0cnlpbmcgdG8KLSAgICAgKiBjaGFuZ2UgdGhlIGxvY2sncyBzdGF0ZSBmcm9tIDAgdG8gMS4gIF9fYXRvbWljX2NtcHhjaGcoKSByZXR1cm5zIDAKLSAgICAgKiBpZiBpdCBtYWRlIHRoZSBzd2FwIHN1Y2Nlc3NmdWxseS4gIElmIHRoZSByZXN1bHQgaXMgbm9uemVybywgdGhpcwotICAgICAqIGxvY2sgaXMgYWxyZWFkeSBoZWxkIGJ5IGFub3RoZXIgdGhyZWFkLgorICAgICAqIGNoYW5nZSB0aGUgbG9jaydzIHN0YXRlIGZyb20gMCAoVU5MT0NLRUQpIHRvIDEgKExPQ0tFRCkuCisgICAgICogX19iaW9uaWNfY21weGNoZygpIHJldHVybnMgMCBpZiBpdCBtYWRlIHRoZSBzd2FwIHN1Y2Nlc3NmdWxseS4KKyAgICAgKiBJZiB0aGUgcmVzdWx0IGlzIG5vbnplcm8sIHRoaXMgbG9jayBpcyBhbHJlYWR5IGhlbGQgYnkgYW5vdGhlciB0aHJlYWQuCiAgICAgICovCi0gICAgaWYgKF9fYXRvbWljX2NtcHhjaGcoc2hhcmVkfDAsIHNoYXJlZHwxLCAmbXV0ZXgtPnZhbHVlICkgIT0gMCkgeworICAgIGlmIChfX2Jpb25pY19jbXB4Y2hnKHVubG9ja2VkLCBsb2NrZWRfdW5jb250ZW5kZWQsICZtdXRleC0+dmFsdWUpICE9IDApIHsKKyAgICAgICAgY29uc3QgaW50IGxvY2tlZF9jb250ZW5kZWQgPSBzaGFyZWQgfCBNVVRFWF9TVEFURV9CSVRTX0xPQ0tFRF9DT05URU5ERUQ7CiAgICAgICAgIC8qCiAgICAgICAgICAqIFdlIHdhbnQgdG8gZ28gdG8gc2xlZXAgdW50aWwgdGhlIG11dGV4IGlzIGF2YWlsYWJsZSwgd2hpY2gKLSAgICAgICAgICogcmVxdWlyZXMgcHJvbW90aW5nIGl0IHRvIHN0YXRlIDIuICBXZSBuZWVkIHRvIHN3YXAgaW4gdGhlIG5ldwotICAgICAgICAgKiBzdGF0ZSB2YWx1ZSBhbmQgdGhlbiB3YWl0IHVudGlsIHNvbWVib2R5IHdha2VzIHVzIHVwLgorICAgICAgICAgKiByZXF1aXJlcyBwcm9tb3RpbmcgaXQgdG8gc3RhdGUgMiAoQ09OVEVOREVEKS4gV2UgbmVlZCB0bworICAgICAgICAgKiBzd2FwIGluIHRoZSBuZXcgc3RhdGUgdmFsdWUgYW5kIHRoZW4gd2FpdCB1bnRpbCBzb21lYm9keSB3YWtlcyB1cyB1cC4KICAgICAgICAgICoKLSAgICAgICAgICogX19hdG9taWNfc3dhcCgpIHJldHVybnMgdGhlIHByZXZpb3VzIHZhbHVlLiAgV2Ugc3dhcCAyIGluIGFuZAorICAgICAgICAgKiBfX2Jpb25pY19zd2FwKCkgcmV0dXJucyB0aGUgcHJldmlvdXMgdmFsdWUuICBXZSBzd2FwIDIgaW4gYW5kCiAgICAgICAgICAqIHNlZSBpZiB3ZSBnb3QgemVybyBiYWNrOyBpZiBzbywgd2UgaGF2ZSBhY3F1aXJlZCB0aGUgbG9jay4gIElmCiAgICAgICAgICAqIG5vdCwgYW5vdGhlciB0aHJlYWQgc3RpbGwgaG9sZHMgdGhlIGxvY2sgYW5kIHdlIHdhaXQgYWdhaW4uCiAgICAgICAgICAqCkBAIC05NDYsOCArNDY4LDggQEAKICAgICAgICAgICogdGhhdCB0aGUgbXV0ZXggaXMgaW4gc3RhdGUgMiB3aGVuIHdlIGdvIHRvIHNsZWVwIG9uIGl0LCB3aGljaAogICAgICAgICAgKiBndWFyYW50ZWVzIGEgd2FrZS11cCBjYWxsLgogICAgICAgICAgKi8KLSAgICAgICAgd2hpbGUgKF9fYXRvbWljX3N3YXAoc2hhcmVkfDIsICZtdXRleC0+dmFsdWUgKSAhPSAoc2hhcmVkfDApKQotICAgICAgICAgICAgX19mdXRleF93YWl0X2V4KCZtdXRleC0+dmFsdWUsIHNoYXJlZCwgc2hhcmVkfDIsIDApOworICAgICAgICB3aGlsZSAoX19iaW9uaWNfc3dhcChsb2NrZWRfY29udGVuZGVkLCAmbXV0ZXgtPnZhbHVlKSAhPSB1bmxvY2tlZCkKKyAgICAgICAgICAgIF9fZnV0ZXhfd2FpdF9leCgmbXV0ZXgtPnZhbHVlLCBzaGFyZWQsIGxvY2tlZF9jb250ZW5kZWQsIDApOwogICAgIH0KICAgICBBTkRST0lEX01FTUJBUl9GVUxMKCk7CiB9CkBAIC05NTcsMTkgKzQ3OSwxNiBAQAogICogdGhhdCB3ZSBhcmUgaW4gZmFjdCB0aGUgb3duZXIgb2YgdGhpcyBsb2NrLgogICovCiBzdGF0aWMgX19pbmxpbmVfXyB2b2lkCi1fbm9ybWFsX3VubG9jayhwdGhyZWFkX211dGV4X3QqICBtdXRleCkKK19ub3JtYWxfdW5sb2NrKHB0aHJlYWRfbXV0ZXhfdCogIG11dGV4LCBpbnQgc2hhcmVkKQogewogICAgIEFORFJPSURfTUVNQkFSX0ZVTEwoKTsKIAotICAgIC8qIFdlIG5lZWQgdG8gcHJlc2VydmUgdGhlIHNoYXJlZCBmbGFnIGR1cmluZyBvcGVyYXRpb25zICovCi0gICAgaW50ICBzaGFyZWQgPSBtdXRleC0+dmFsdWUgJiBNVVRFWF9TSEFSRURfTUFTSzsKLQogICAgIC8qCiAgICAgICogVGhlIG11dGV4IHN0YXRlIHdpbGwgYmUgMSBvciAocmFyZWx5KSAyLiAgV2UgdXNlIGFuIGF0b21pYyBkZWNyZW1lbnQKLSAgICAgKiB0byByZWxlYXNlIHRoZSBsb2NrLiAgX19hdG9taWNfZGVjKCkgcmV0dXJucyB0aGUgcHJldmlvdXMgdmFsdWU7CisgICAgICogdG8gcmVsZWFzZSB0aGUgbG9jay4gIF9fYmlvbmljX2F0b21pY19kZWMoKSByZXR1cm5zIHRoZSBwcmV2aW91cyB2YWx1ZTsKICAgICAgKiBpZiBpdCB3YXNuJ3QgMSB3ZSBoYXZlIHRvIGRvIHNvbWUgYWRkaXRpb25hbCB3b3JrLgogICAgICAqLwotICAgIGlmIChfX2F0b21pY19kZWMoJm11dGV4LT52YWx1ZSkgIT0gKHNoYXJlZHwxKSkgeworICAgIGlmIChfX2Jpb25pY19hdG9taWNfZGVjKCZtdXRleC0+dmFsdWUpICE9IChzaGFyZWR8TVVURVhfU1RBVEVfQklUU19MT0NLRURfVU5DT05URU5ERUQpKSB7CiAgICAgICAgIC8qCiAgICAgICAgICAqIFN0YXJ0IGJ5IHJlbGVhc2luZyB0aGUgbG9jay4gIFRoZSBkZWNyZW1lbnQgY2hhbmdlZCBpdCBmcm9tCiAgICAgICAgICAqICJjb250ZW5kZWQgbG9jayIgdG8gInVuY29udGVuZGVkIGxvY2siLCB3aGljaCBtZWFucyB3ZSBzdGlsbApAQCAtMTAxMSwxNTMgKzUzMCwyMzIgQEAKICAgICB9CiB9CiAKLXN0YXRpYyBwdGhyZWFkX211dGV4X3QgIF9fcmVjdXJzaXZlX2xvY2sgPSBQVEhSRUFEX01VVEVYX0lOSVRJQUxJWkVSOwotCi1zdGF0aWMgdm9pZAotX3JlY3Vyc2l2ZV9sb2NrKHZvaWQpCisvKiBUaGlzIGNvbW1vbiBpbmxpbmVkIGZ1bmN0aW9uIGlzIHVzZWQgdG8gaW5jcmVtZW50IHRoZSBjb3VudGVyIG9mIGFuCisgKiBlcnJvcmNoZWNrIG9yIHJlY3Vyc2l2ZSBtdXRleC4KKyAqCisgKiBGb3IgZXJyb3JjaGVjayBtdXRleGVzLCBpdCB3aWxsIHJldHVybiBFREVBRExLCisgKiBJZiB0aGUgY291bnRlciBvdmVyZmxvd3MsIGl0IHdpbGwgcmV0dXJuIEVBR0FJTgorICogT3RoZXJ3aXNlLCBpdCBhdG9taWNhbGx5IGluY3JlbWVudHMgdGhlIGNvdW50ZXIgYW5kIHJldHVybnMgMAorICogYWZ0ZXIgcHJvdmlkaW5nIGFuIGFjcXVpcmUgYmFycmllci4KKyAqCisgKiBtdHlwZSBpcyB0aGUgY3VycmVudCBtdXRleCB0eXBlCisgKiBtdmFsdWUgaXMgdGhlIGN1cnJlbnQgbXV0ZXggdmFsdWUgKGFscmVhZHkgbG9hZGVkKQorICogbXV0ZXggcG9pbnRlcnMgdG8gdGhlIG11dGV4LgorICovCitzdGF0aWMgX19pbmxpbmVfXyBfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkgaW50CitfcmVjdXJzaXZlX2luY3JlbWVudChwdGhyZWFkX211dGV4X3QqIG11dGV4LCBpbnQgbXZhbHVlLCBpbnQgbXR5cGUpCiB7Ci0gICAgX25vcm1hbF9sb2NrKCZfX3JlY3Vyc2l2ZV9sb2NrKTsKKyAgICBpZiAobXR5cGUgPT0gTVVURVhfVFlQRV9CSVRTX0VSUk9SQ0hFQ0spIHsKKyAgICAgICAgLyogdHJ5aW5nIHRvIHJlLWxvY2sgYSBtdXRleCB3ZSBhbHJlYWR5IGFjcXVpcmVkICovCisgICAgICAgIHJldHVybiBFREVBRExLOworICAgIH0KKworICAgIC8qIERldGVjdCByZWN1cnNpdmUgbG9jayBvdmVyZmxvdyBhbmQgcmV0dXJuIEVBR0FJTi4KKyAgICAgKiBUaGlzIGlzIHNhZmUgYmVjYXVzZSBvbmx5IHRoZSBvd25lciB0aHJlYWQgY2FuIG1vZGlmeSB0aGUKKyAgICAgKiBjb3VudGVyIGJpdHMgaW4gdGhlIG11dGV4IHZhbHVlLgorICAgICAqLworICAgIGlmIChNVVRFWF9DT1VOVEVSX0JJVFNfV0lMTF9PVkVSRkxPVyhtdmFsdWUpKSB7CisgICAgICAgIHJldHVybiBFQUdBSU47CisgICAgfQorCisgICAgLyogV2Ugb3duIHRoZSBtdXRleCwgYnV0IG90aGVyIHRocmVhZHMgYXJlIGFibGUgdG8gY2hhbmdlCisgICAgICogdGhlIGxvd2VyIGJpdHMgKGUuZy4gcHJvbW90aW5nIGl0IHRvICJjb250ZW5kZWQiKSwgc28gd2UKKyAgICAgKiBuZWVkIHRvIHVzZSBhbiBhdG9taWMgY21weGNoZyBsb29wIHRvIHVwZGF0ZSB0aGUgY291bnRlci4KKyAgICAgKi8KKyAgICBmb3IgKDs7KSB7CisgICAgICAgIC8qIGluY3JlbWVudCBjb3VudGVyLCBvdmVyZmxvdyB3YXMgYWxyZWFkeSBjaGVja2VkICovCisgICAgICAgIGludCBuZXd2YWwgPSBtdmFsdWUgKyBNVVRFWF9DT1VOVEVSX0JJVFNfT05FOworICAgICAgICBpZiAoX19wcmVkaWN0X3RydWUoX19iaW9uaWNfY21weGNoZyhtdmFsdWUsIG5ld3ZhbCwgJm11dGV4LT52YWx1ZSkgPT0gMCkpIHsKKyAgICAgICAgICAgIC8qIG11dGV4IGlzIHN0aWxsIGxvY2tlZCwgbm90IG5lZWQgZm9yIGEgbWVtb3J5IGJhcnJpZXIgKi8KKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIC8qIHRoZSB2YWx1ZSB3YXMgY2hhbmdlZCwgdGhpcyBoYXBwZW5zIHdoZW4gYW5vdGhlciB0aHJlYWQgY2hhbmdlcworICAgICAgICAgKiB0aGUgbG93ZXIgc3RhdGUgYml0cyBmcm9tIDEgdG8gMiB0byBpbmRpY2F0ZSBjb250ZW50aW9uLiBUaGlzCisgICAgICAgICAqIGNhbm5vdCBjaGFuZ2UgdGhlIGNvdW50ZXIsIHNvIHNpbXBseSByZWxvYWQgYW5kIHRyeSBhZ2Fpbi4KKyAgICAgICAgICovCisgICAgICAgIG12YWx1ZSA9IG11dGV4LT52YWx1ZTsKKyAgICB9CiB9CiAKLXN0YXRpYyB2b2lkCi1fcmVjdXJzaXZlX3VubG9jayh2b2lkKQorX19MSUJDX0hJRERFTl9fCitpbnQgcHRocmVhZF9tdXRleF9sb2NrX2ltcGwocHRocmVhZF9tdXRleF90ICptdXRleCkKIHsKLSAgICBfbm9ybWFsX3VubG9jaygmX19yZWN1cnNpdmVfbG9jayApOworICAgIGludCBtdmFsdWUsIG10eXBlLCB0aWQsIHNoYXJlZDsKKworICAgIGlmIChfX3ByZWRpY3RfZmFsc2UobXV0ZXggPT0gTlVMTCkpCisgICAgICAgIHJldHVybiBFSU5WQUw7CisKKyAgICBtdmFsdWUgPSBtdXRleC0+dmFsdWU7CisgICAgbXR5cGUgPSAobXZhbHVlICYgTVVURVhfVFlQRV9NQVNLKTsKKyAgICBzaGFyZWQgPSAobXZhbHVlICYgTVVURVhfU0hBUkVEX01BU0spOworCisgICAgLyogSGFuZGxlIG5vcm1hbCBjYXNlIGZpcnN0ICovCisgICAgaWYgKCBfX3ByZWRpY3RfdHJ1ZShtdHlwZSA9PSBNVVRFWF9UWVBFX0JJVFNfTk9STUFMKSApIHsKKyAgICAgICAgX25vcm1hbF9sb2NrKG11dGV4LCBzaGFyZWQpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICAvKiBEbyB3ZSBhbHJlYWR5IG93biB0aGlzIHJlY3Vyc2l2ZSBvciBlcnJvci1jaGVjayBtdXRleCA/ICovCisgICAgdGlkID0gX19nZXRfdGhyZWFkKCktPnRpZDsKKyAgICBpZiAoIHRpZCA9PSBNVVRFWF9PV05FUl9GUk9NX0JJVFMobXZhbHVlKSApCisgICAgICAgIHJldHVybiBfcmVjdXJzaXZlX2luY3JlbWVudChtdXRleCwgbXZhbHVlLCBtdHlwZSk7CisKKyAgICAvKiBBZGQgaW4gc2hhcmVkIHN0YXRlIHRvIGF2b2lkIGV4dHJhICdvcicgb3BlcmF0aW9ucyBiZWxvdyAqLworICAgIG10eXBlIHw9IHNoYXJlZDsKKworICAgIC8qIEZpcnN0LCBpZiB0aGUgbXV0ZXggaXMgdW5sb2NrZWQsIHRyeSB0byBxdWlja2x5IGFjcXVpcmUgaXQuCisgICAgICogSW4gdGhlIG9wdGltaXN0aWMgY2FzZSB3aGVyZSB0aGlzIHdvcmtzLCBzZXQgdGhlIHN0YXRlIHRvIDEgdG8KKyAgICAgKiBpbmRpY2F0ZSBsb2NrZWQgd2l0aCBubyBjb250ZW50aW9uICovCisgICAgaWYgKG12YWx1ZSA9PSBtdHlwZSkgeworICAgICAgICBpbnQgbmV3dmFsID0gTVVURVhfT1dORVJfVE9fQklUUyh0aWQpIHwgbXR5cGUgfCBNVVRFWF9TVEFURV9CSVRTX0xPQ0tFRF9VTkNPTlRFTkRFRDsKKyAgICAgICAgaWYgKF9fYmlvbmljX2NtcHhjaGcobXZhbHVlLCBuZXd2YWwsICZtdXRleC0+dmFsdWUpID09IDApIHsKKyAgICAgICAgICAgIEFORFJPSURfTUVNQkFSX0ZVTEwoKTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIC8qIGFyZ2gsIHRoZSB2YWx1ZSBjaGFuZ2VkLCByZWxvYWQgYmVmb3JlIGVudGVyaW5nIHRoZSBsb29wICovCisgICAgICAgIG12YWx1ZSA9IG11dGV4LT52YWx1ZTsKKyAgICB9CisKKyAgICBmb3IgKDs7KSB7CisgICAgICAgIGludCBuZXd2YWw7CisKKyAgICAgICAgLyogaWYgdGhlIG11dGV4IGlzIHVubG9ja2VkLCBpdHMgdmFsdWUgc2hvdWxkIGJlICdtdHlwZScgYW5kCisgICAgICAgICAqIHdlIHRyeSB0byBhY3F1aXJlIGl0IGJ5IHNldHRpbmcgaXRzIG93bmVyIGFuZCBzdGF0ZSBhdG9taWNhbGx5LgorICAgICAgICAgKiBOT1RFOiBXZSBwdXQgdGhlIHN0YXRlIHRvIDIgc2luY2Ugd2UgX2tub3dfIHRoZXJlIGlzIGNvbnRlbnRpb24KKyAgICAgICAgICogd2hlbiB3ZSBhcmUgaW4gdGhpcyBsb29wLiBUaGlzIGVuc3VyZXMgYWxsIHdhaXRlcnMgd2lsbCBiZQorICAgICAgICAgKiB1bmxvY2tlZC4KKyAgICAgICAgICovCisgICAgICAgIGlmIChtdmFsdWUgPT0gbXR5cGUpIHsKKyAgICAgICAgICAgIG5ld3ZhbCA9IE1VVEVYX09XTkVSX1RPX0JJVFModGlkKSB8IG10eXBlIHwgTVVURVhfU1RBVEVfQklUU19MT0NLRURfQ09OVEVOREVEOworICAgICAgICAgICAgLyogVE9ETzogQ2hhbmdlIHRoaXMgdG8gX19iaW9uaWNfY21weGNoZ19hY3F1aXJlIHdoZW4gd2UKKyAgICAgICAgICAgICAqICAgICAgICBpbXBsZW1lbnQgaXQgdG8gZ2V0IHJpZCBvZiB0aGUgZXhwbGljaXQgbWVtb3J5CisgICAgICAgICAgICAgKiAgICAgICAgYmFycmllciBiZWxvdy4KKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgaWYgKF9fcHJlZGljdF9mYWxzZShfX2Jpb25pY19jbXB4Y2hnKG12YWx1ZSwgbmV3dmFsLCAmbXV0ZXgtPnZhbHVlKSAhPSAwKSkgeworICAgICAgICAgICAgICAgIG12YWx1ZSA9IG11dGV4LT52YWx1ZTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEFORFJPSURfTUVNQkFSX0ZVTEwoKTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisKKyAgICAgICAgLyogdGhlIG11dGV4IGlzIGFscmVhZHkgbG9ja2VkIGJ5IGFub3RoZXIgdGhyZWFkLCBpZiBpdHMgc3RhdGUgaXMgMQorICAgICAgICAgKiB3ZSB3aWxsIGNoYW5nZSBpdCB0byAyIHRvIGluZGljYXRlIGNvbnRlbnRpb24uICovCisgICAgICAgIGlmIChNVVRFWF9TVEFURV9CSVRTX0lTX0xPQ0tFRF9VTkNPTlRFTkRFRChtdmFsdWUpKSB7CisgICAgICAgICAgICBuZXd2YWwgPSBNVVRFWF9TVEFURV9CSVRTX0ZMSVBfQ09OVEVOVElPTihtdmFsdWUpOyAvKiBsb2NrZWQgc3RhdGUgMSA9PiBzdGF0ZSAyICovCisgICAgICAgICAgICBpZiAoX19wcmVkaWN0X2ZhbHNlKF9fYmlvbmljX2NtcHhjaGcobXZhbHVlLCBuZXd2YWwsICZtdXRleC0+dmFsdWUpICE9IDApKSB7CisgICAgICAgICAgICAgICAgbXZhbHVlID0gbXV0ZXgtPnZhbHVlOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbXZhbHVlID0gbmV3dmFsOworICAgICAgICB9CisKKyAgICAgICAgLyogd2FpdCB1bnRpbCB0aGUgbXV0ZXggaXMgdW5sb2NrZWQgKi8KKyAgICAgICAgX19mdXRleF93YWl0X2V4KCZtdXRleC0+dmFsdWUsIHNoYXJlZCwgbXZhbHVlLCBOVUxMKTsKKworICAgICAgICBtdmFsdWUgPSBtdXRleC0+dmFsdWU7CisgICAgfQorICAgIC8qIE5PVFJFQUNIRUQgKi8KIH0KIAogaW50IHB0aHJlYWRfbXV0ZXhfbG9jayhwdGhyZWFkX211dGV4X3QgKm11dGV4KQogewotICAgIGludCBtdHlwZSwgdGlkLCBuZXdfbG9ja190eXBlLCBzaGFyZWQ7Ci0KLSAgICBpZiAoX191bmxpa2VseShtdXRleCA9PSBOVUxMKSkKLSAgICAgICAgcmV0dXJuIEVJTlZBTDsKLQotICAgIG10eXBlID0gKG11dGV4LT52YWx1ZSAmIE1VVEVYX1RZUEVfTUFTSyk7Ci0gICAgc2hhcmVkID0gKG11dGV4LT52YWx1ZSAmIE1VVEVYX1NIQVJFRF9NQVNLKTsKLQotICAgIC8qIEhhbmRsZSBub3JtYWwgY2FzZSBmaXJzdCAqLwotICAgIGlmICggX19saWtlbHkobXR5cGUgPT0gTVVURVhfVFlQRV9OT1JNQUwpICkgewotICAgICAgICBfbm9ybWFsX2xvY2sobXV0ZXgpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICAvKiBEbyB3ZSBhbHJlYWR5IG93biB0aGlzIHJlY3Vyc2l2ZSBvciBlcnJvci1jaGVjayBtdXRleCA/ICovCi0gICAgdGlkID0gX19nZXRfdGhyZWFkKCktPmtlcm5lbF9pZDsKLSAgICBpZiAoIHRpZCA9PSBNVVRFWF9PV05FUihtdXRleCkgKQotICAgIHsKLSAgICAgICAgaW50ICBvbGR2LCBjb3VudGVyOwotCi0gICAgICAgIGlmIChtdHlwZSA9PSBNVVRFWF9UWVBFX0VSUk9SQ0hFQ0spIHsKLSAgICAgICAgICAgIC8qIHRyeWluZyB0byByZS1sb2NrIGEgbXV0ZXggd2UgYWxyZWFkeSBhY3F1aXJlZCAqLwotICAgICAgICAgICAgcmV0dXJuIEVERUFETEs7CisgICAgaW50IGVyciA9IHB0aHJlYWRfbXV0ZXhfbG9ja19pbXBsKG11dGV4KTsKKyNpZmRlZiBQVEhSRUFEX0RFQlVHCisgICAgaWYgKFBUSFJFQURfREVCVUdfRU5BQkxFRCkgeworICAgICAgICBpZiAoIWVycikgeworICAgICAgICAgICAgcHRocmVhZF9kZWJ1Z19tdXRleF9sb2NrX2NoZWNrKG11dGV4KTsKICAgICAgICAgfQotICAgICAgICAvKgotICAgICAgICAgKiBXZSBvd24gdGhlIG11dGV4LCBidXQgb3RoZXIgdGhyZWFkcyBhcmUgYWJsZSB0byBjaGFuZ2UKLSAgICAgICAgICogdGhlIGNvbnRlbnRzIChlLmcuIHByb21vdGluZyBpdCB0byAiY29udGVuZGVkIiksIHNvIHdlCi0gICAgICAgICAqIG5lZWQgdG8gaG9sZCB0aGUgZ2xvYmFsIGxvY2suCi0gICAgICAgICAqLwotICAgICAgICBfcmVjdXJzaXZlX2xvY2soKTsKLSAgICAgICAgb2xkdiAgICAgICAgID0gbXV0ZXgtPnZhbHVlOwotICAgICAgICBjb3VudGVyICAgICAgPSAob2xkdiArICgxIDw8IE1VVEVYX0NPVU5URVJfU0hJRlQpKSAmIE1VVEVYX0NPVU5URVJfTUFTSzsKLSAgICAgICAgbXV0ZXgtPnZhbHVlID0gKG9sZHYgJiB+TVVURVhfQ09VTlRFUl9NQVNLKSB8IGNvdW50ZXI7Ci0gICAgICAgIF9yZWN1cnNpdmVfdW5sb2NrKCk7Ci0gICAgICAgIHJldHVybiAwOwogICAgIH0KLQotICAgIC8qIFdlIGRvbid0IG93biB0aGUgbXV0ZXgsIHNvIHRyeSB0byBnZXQgaXQuCi0gICAgICoKLSAgICAgKiBGaXJzdCwgd2UgdHJ5IHRvIGNoYW5nZSBpdHMgc3RhdGUgZnJvbSAwIHRvIDEsIGlmIHRoaXMKLSAgICAgKiBkb2Vzbid0IHdvcmssIHRyeSB0byBjaGFuZ2UgaXQgdG8gc3RhdGUgMi4KLSAgICAgKi8KLSAgICBuZXdfbG9ja190eXBlID0gMTsKLQotICAgIC8qIGNvbXB1dGUgZnV0ZXggd2FpdCBvcGNvZGUgYW5kIHJlc3RvcmUgc2hhcmVkIGZsYWcgaW4gbXR5cGUgKi8KLSAgICBtdHlwZSB8PSBzaGFyZWQ7Ci0KLSAgICBmb3IgKDs7KSB7Ci0gICAgICAgIGludCAgb2xkdjsKLQotICAgICAgICBfcmVjdXJzaXZlX2xvY2soKTsKLSAgICAgICAgb2xkdiA9IG11dGV4LT52YWx1ZTsKLSAgICAgICAgaWYgKG9sZHYgPT0gbXR5cGUpIHsgLyogdW5jb250ZW5kZWQgcmVsZWFzZWQgbG9jayA9PiAxIG9yIDIgKi8KLSAgICAgICAgICAgIG11dGV4LT52YWx1ZSA9ICgodGlkIDw8IDE2KSB8IG10eXBlIHwgbmV3X2xvY2tfdHlwZSk7Ci0gICAgICAgIH0gZWxzZSBpZiAoKG9sZHYgJiAzKSA9PSAxKSB7IC8qIGxvY2tlZCBzdGF0ZSAxID0+IHN0YXRlIDIgKi8KLSAgICAgICAgICAgIG9sZHYgXj0gMzsKLSAgICAgICAgICAgIG11dGV4LT52YWx1ZSA9IG9sZHY7Ci0gICAgICAgIH0KLSAgICAgICAgX3JlY3Vyc2l2ZV91bmxvY2soKTsKLQotICAgICAgICBpZiAob2xkdiA9PSBtdHlwZSkKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIC8qCi0gICAgICAgICAqIFRoZSBsb2NrIHdhcyBoZWxkLCBwb3NzaWJseSBjb250ZW5kZWQgYnkgb3RoZXJzLiAgRnJvbQotICAgICAgICAgKiBub3cgb24sIGlmIHdlIG1hbmFnZSB0byBhY3F1aXJlIHRoZSBsb2NrLCB3ZSBoYXZlIHRvCi0gICAgICAgICAqIGFzc3VtZSB0aGF0IG90aGVycyBhcmUgc3RpbGwgY29udGVuZGluZyBmb3IgaXQgc28gdGhhdAotICAgICAgICAgKiB3ZSdsbCB3YWtlIHRoZW0gd2hlbiB3ZSB1bmxvY2sgaXQuCi0gICAgICAgICAqLwotICAgICAgICBuZXdfbG9ja190eXBlID0gMjsKLQotICAgICAgICBfX2Z1dGV4X3dhaXRfZXgoJm11dGV4LT52YWx1ZSwgc2hhcmVkLCBvbGR2LCBOVUxMKTsKLSAgICB9Ci0gICAgcmV0dXJuIDA7CisjZW5kaWYKKyAgICByZXR1cm4gZXJyOwogfQogCi0KLWludCBwdGhyZWFkX211dGV4X3VubG9jayhwdGhyZWFkX211dGV4X3QgKm11dGV4KQorX19MSUJDX0hJRERFTl9fCitpbnQgcHRocmVhZF9tdXRleF91bmxvY2tfaW1wbChwdGhyZWFkX211dGV4X3QgKm11dGV4KQogewotICAgIGludCBtdHlwZSwgdGlkLCBvbGR2LCBzaGFyZWQ7CisgICAgaW50IG12YWx1ZSwgbXR5cGUsIHRpZCwgc2hhcmVkOwogCi0gICAgaWYgKF9fdW5saWtlbHkobXV0ZXggPT0gTlVMTCkpCisgICAgaWYgKF9fcHJlZGljdF9mYWxzZShtdXRleCA9PSBOVUxMKSkKICAgICAgICAgcmV0dXJuIEVJTlZBTDsKIAotICAgIG10eXBlICA9IChtdXRleC0+dmFsdWUgJiBNVVRFWF9UWVBFX01BU0spOwotICAgIHNoYXJlZCA9IChtdXRleC0+dmFsdWUgJiBNVVRFWF9TSEFSRURfTUFTSyk7CisgICAgbXZhbHVlID0gbXV0ZXgtPnZhbHVlOworICAgIG10eXBlICA9IChtdmFsdWUgJiBNVVRFWF9UWVBFX01BU0spOworICAgIHNoYXJlZCA9IChtdmFsdWUgJiBNVVRFWF9TSEFSRURfTUFTSyk7CiAKICAgICAvKiBIYW5kbGUgY29tbW9uIGNhc2UgZmlyc3QgKi8KLSAgICBpZiAoX19saWtlbHkobXR5cGUgPT0gTVVURVhfVFlQRV9OT1JNQUwpKSB7Ci0gICAgICAgIF9ub3JtYWxfdW5sb2NrKG11dGV4KTsKKyAgICBpZiAoX19wcmVkaWN0X3RydWUobXR5cGUgPT0gTVVURVhfVFlQRV9CSVRTX05PUk1BTCkpIHsKKyAgICAgICAgX25vcm1hbF91bmxvY2sobXV0ZXgsIHNoYXJlZCk7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIAogICAgIC8qIERvIHdlIGFscmVhZHkgb3duIHRoaXMgcmVjdXJzaXZlIG9yIGVycm9yLWNoZWNrIG11dGV4ID8gKi8KLSAgICB0aWQgPSBfX2dldF90aHJlYWQoKS0+a2VybmVsX2lkOwotICAgIGlmICggdGlkICE9IE1VVEVYX09XTkVSKG11dGV4KSApCisgICAgdGlkID0gX19nZXRfdGhyZWFkKCktPnRpZDsKKyAgICBpZiAoIHRpZCAhPSBNVVRFWF9PV05FUl9GUk9NX0JJVFMobXZhbHVlKSApCiAgICAgICAgIHJldHVybiBFUEVSTTsKIAotICAgIC8qIFdlIGRvLCBkZWNyZW1lbnQgY291bnRlciBvciByZWxlYXNlIHRoZSBtdXRleCBpZiBpdCBpcyAwICovCi0gICAgX3JlY3Vyc2l2ZV9sb2NrKCk7Ci0gICAgb2xkdiA9IG11dGV4LT52YWx1ZTsKLSAgICBpZiAob2xkdiAmIE1VVEVYX0NPVU5URVJfTUFTSykgewotICAgICAgICBtdXRleC0+dmFsdWUgPSBvbGR2IC0gKDEgPDwgTVVURVhfQ09VTlRFUl9TSElGVCk7Ci0gICAgICAgIG9sZHYgPSAwOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIG11dGV4LT52YWx1ZSA9IHNoYXJlZCB8IG10eXBlOworICAgIC8qIElmIHRoZSBjb3VudGVyIGlzID4gMCwgd2UgY2FuIHNpbXBseSBkZWNyZW1lbnQgaXQgYXRvbWljYWxseS4KKyAgICAgKiBTaW5jZSBvdGhlciB0aHJlYWRzIGNhbiBtdXRhdGUgdGhlIGxvd2VyIHN0YXRlIGJpdHMgKGFuZCBvbmx5IHRoZQorICAgICAqIGxvd2VyIHN0YXRlIGJpdHMpLCB1c2UgYSBjbXB4Y2hnIHRvIGRvIGl0LgorICAgICAqLworICAgIGlmICghTVVURVhfQ09VTlRFUl9CSVRTX0lTX1pFUk8obXZhbHVlKSkgeworICAgICAgICBmb3IgKDs7KSB7CisgICAgICAgICAgICBpbnQgbmV3dmFsID0gbXZhbHVlIC0gTVVURVhfQ09VTlRFUl9CSVRTX09ORTsKKyAgICAgICAgICAgIGlmIChfX3ByZWRpY3RfdHJ1ZShfX2Jpb25pY19jbXB4Y2hnKG12YWx1ZSwgbmV3dmFsLCAmbXV0ZXgtPnZhbHVlKSA9PSAwKSkgeworICAgICAgICAgICAgICAgIC8qIHN1Y2Nlc3M6IHdlIHN0aWxsIG93biB0aGUgbXV0ZXgsIHNvIG5vIG1lbW9yeSBiYXJyaWVyICovCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvKiB0aGUgdmFsdWUgY2hhbmdlZCwgc28gcmVsb2FkIGFuZCBsb29wICovCisgICAgICAgICAgICBtdmFsdWUgPSBtdXRleC0+dmFsdWU7CisgICAgICAgIH0KICAgICB9Ci0gICAgX3JlY3Vyc2l2ZV91bmxvY2soKTsKKworICAgIC8qIHRoZSBjb3VudGVyIGlzIDAsIHNvIHdlJ3JlIGdvaW5nIHRvIHVubG9jayB0aGUgbXV0ZXggYnkgcmVzZXR0aW5nCisgICAgICogaXRzIHZhbHVlIHRvICd1bmxvY2tlZCcuIFdlIG5lZWQgdG8gcGVyZm9ybSBhIHN3YXAgaW4gb3JkZXIKKyAgICAgKiB0byByZWFkIHRoZSBjdXJyZW50IHN0YXRlLCB3aGljaCB3aWxsIGJlIDIgaWYgdGhlcmUgYXJlIHdhaXRlcnMKKyAgICAgKiB0byBhd2FrZS4KKyAgICAgKgorICAgICAqIFRPRE86IENoYW5nZSB0aGlzIHRvIF9fYmlvbmljX3N3YXBfcmVsZWFzZSB3aGVuIHdlIGltcGxlbWVudCBpdAorICAgICAqICAgICAgICB0byBnZXQgcmlkIG9mIHRoZSBleHBsaWNpdCBtZW1vcnkgYmFycmllciBiZWxvdy4KKyAgICAgKi8KKyAgICBBTkRST0lEX01FTUJBUl9GVUxMKCk7ICAvKiBSRUxFQVNFIEJBUlJJRVIgKi8KKyAgICBtdmFsdWUgPSBfX2Jpb25pY19zd2FwKG10eXBlIHwgc2hhcmVkIHwgTVVURVhfU1RBVEVfQklUU19VTkxPQ0tFRCwgJm11dGV4LT52YWx1ZSk7CiAKICAgICAvKiBXYWtlIG9uZSB3YWl0aW5nIHRocmVhZCwgaWYgYW55ICovCi0gICAgaWYgKChvbGR2ICYgMykgPT0gMikgeworICAgIGlmIChNVVRFWF9TVEFURV9CSVRTX0lTX0xPQ0tFRF9DT05URU5ERUQobXZhbHVlKSkgewogICAgICAgICBfX2Z1dGV4X3dha2VfZXgoJm11dGV4LT52YWx1ZSwgc2hhcmVkLCAxKTsKICAgICB9CiAgICAgcmV0dXJuIDA7CiB9CiAKLQotaW50IHB0aHJlYWRfbXV0ZXhfdHJ5bG9jayhwdGhyZWFkX211dGV4X3QgKm11dGV4KQoraW50IHB0aHJlYWRfbXV0ZXhfdW5sb2NrKHB0aHJlYWRfbXV0ZXhfdCAqbXV0ZXgpCiB7Ci0gICAgaW50IG10eXBlLCB0aWQsIG9sZHYsIHNoYXJlZDsKKyNpZmRlZiBQVEhSRUFEX0RFQlVHCisgICAgaWYgKFBUSFJFQURfREVCVUdfRU5BQkxFRCkgeworICAgICAgICBwdGhyZWFkX2RlYnVnX211dGV4X3VubG9ja19jaGVjayhtdXRleCk7CisgICAgfQorI2VuZGlmCisgICAgcmV0dXJuIHB0aHJlYWRfbXV0ZXhfdW5sb2NrX2ltcGwobXV0ZXgpOworfQogCi0gICAgaWYgKF9fdW5saWtlbHkobXV0ZXggPT0gTlVMTCkpCitfX0xJQkNfSElEREVOX18KK2ludCBwdGhyZWFkX211dGV4X3RyeWxvY2tfaW1wbChwdGhyZWFkX211dGV4X3QgKm11dGV4KQoreworICAgIGludCBtdmFsdWUsIG10eXBlLCB0aWQsIHNoYXJlZDsKKworICAgIGlmIChfX3ByZWRpY3RfZmFsc2UobXV0ZXggPT0gTlVMTCkpCiAgICAgICAgIHJldHVybiBFSU5WQUw7CiAKLSAgICBtdHlwZSAgPSAobXV0ZXgtPnZhbHVlICYgTVVURVhfVFlQRV9NQVNLKTsKLSAgICBzaGFyZWQgPSAobXV0ZXgtPnZhbHVlICYgTVVURVhfU0hBUkVEX01BU0spOworICAgIG12YWx1ZSA9IG11dGV4LT52YWx1ZTsKKyAgICBtdHlwZSAgPSAobXZhbHVlICYgTVVURVhfVFlQRV9NQVNLKTsKKyAgICBzaGFyZWQgPSAobXZhbHVlICYgTVVURVhfU0hBUkVEX01BU0spOwogCiAgICAgLyogSGFuZGxlIGNvbW1vbiBjYXNlIGZpcnN0ICovCi0gICAgaWYgKCBfX2xpa2VseShtdHlwZSA9PSBNVVRFWF9UWVBFX05PUk1BTCkgKQorICAgIGlmICggX19wcmVkaWN0X3RydWUobXR5cGUgPT0gTVVURVhfVFlQRV9CSVRTX05PUk1BTCkgKQogICAgIHsKLSAgICAgICAgaWYgKF9fYXRvbWljX2NtcHhjaGcoc2hhcmVkfDAsIHNoYXJlZHwxLCAmbXV0ZXgtPnZhbHVlKSA9PSAwKSB7CisgICAgICAgIGlmIChfX2Jpb25pY19jbXB4Y2hnKHNoYXJlZHxNVVRFWF9TVEFURV9CSVRTX1VOTE9DS0VELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGFyZWR8TVVURVhfU1RBVEVfQklUU19MT0NLRURfVU5DT05URU5ERUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZtdXRleC0+dmFsdWUpID09IDApIHsKICAgICAgICAgICAgIEFORFJPSURfTUVNQkFSX0ZVTEwoKTsKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9CkBAIC0xMTY2LDQwICs3NjQsMzcgQEAKICAgICB9CiAKICAgICAvKiBEbyB3ZSBhbHJlYWR5IG93biB0aGlzIHJlY3Vyc2l2ZSBvciBlcnJvci1jaGVjayBtdXRleCA/ICovCi0gICAgdGlkID0gX19nZXRfdGhyZWFkKCktPmtlcm5lbF9pZDsKLSAgICBpZiAoIHRpZCA9PSBNVVRFWF9PV05FUihtdXRleCkgKQotICAgIHsKLSAgICAgICAgaW50IGNvdW50ZXI7CisgICAgdGlkID0gX19nZXRfdGhyZWFkKCktPnRpZDsKKyAgICBpZiAoIHRpZCA9PSBNVVRFWF9PV05FUl9GUk9NX0JJVFMobXZhbHVlKSApCisgICAgICAgIHJldHVybiBfcmVjdXJzaXZlX2luY3JlbWVudChtdXRleCwgbXZhbHVlLCBtdHlwZSk7CiAKLSAgICAgICAgaWYgKG10eXBlID09IE1VVEVYX1RZUEVfRVJST1JDSEVDSykgewotICAgICAgICAgICAgLyogYWxyZWFkeSBsb2NrZWQgYnkgb3Vyc2VsdmVzICovCi0gICAgICAgICAgICByZXR1cm4gRURFQURMSzsKLSAgICAgICAgfQorICAgIC8qIFNhbWUgYXMgcHRocmVhZF9tdXRleF9sb2NrLCBleGNlcHQgdGhhdCB3ZSBkb24ndCB3YW50IHRvIHdhaXQsIGFuZAorICAgICAqIHRoZSBvbmx5IG9wZXJhdGlvbiB0aGF0IGNhbiBzdWNjZWVkIGlzIGEgc2luZ2xlIGNtcHhjaGcgdG8gYWNxdWlyZSB0aGUKKyAgICAgKiBsb2NrIGlmIGl0IGlzIHJlbGVhc2VkIC8gbm90IG93bmVkIGJ5IGFueW9uZS4gTm8gbmVlZCBmb3IgYSBjb21wbGV4IGxvb3AuCisgICAgICovCisgICAgbXR5cGUgfD0gc2hhcmVkIHwgTVVURVhfU1RBVEVfQklUU19VTkxPQ0tFRDsKKyAgICBtdmFsdWUgPSBNVVRFWF9PV05FUl9UT19CSVRTKHRpZCkgfCBtdHlwZSB8IE1VVEVYX1NUQVRFX0JJVFNfTE9DS0VEX1VOQ09OVEVOREVEOwogCi0gICAgICAgIF9yZWN1cnNpdmVfbG9jaygpOwotICAgICAgICBvbGR2ID0gbXV0ZXgtPnZhbHVlOwotICAgICAgICBjb3VudGVyID0gKG9sZHYgKyAoMSA8PCBNVVRFWF9DT1VOVEVSX1NISUZUKSkgJiBNVVRFWF9DT1VOVEVSX01BU0s7Ci0gICAgICAgIG11dGV4LT52YWx1ZSA9IChvbGR2ICYgfk1VVEVYX0NPVU5URVJfTUFTSykgfCBjb3VudGVyOwotICAgICAgICBfcmVjdXJzaXZlX3VubG9jaygpOworICAgIGlmIChfX3ByZWRpY3RfdHJ1ZShfX2Jpb25pY19jbXB4Y2hnKG10eXBlLCBtdmFsdWUsICZtdXRleC0+dmFsdWUpID09IDApKSB7CisgICAgICAgIEFORFJPSURfTUVNQkFSX0ZVTEwoKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCi0gICAgLyogUmVzdG9yZSBzaGFyaW5nIGJpdCBpbiBtdHlwZSAqLwotICAgIG10eXBlIHw9IHNoYXJlZDsKLQotICAgIC8qIFRyeSB0byBsb2NrIGl0LCBqdXN0IG9uY2UuICovCi0gICAgX3JlY3Vyc2l2ZV9sb2NrKCk7Ci0gICAgb2xkdiA9IG11dGV4LT52YWx1ZTsKLSAgICBpZiAob2xkdiA9PSBtdHlwZSkgIC8qIHVuY29udGVuZGVkIHJlbGVhc2VkIGxvY2sgPT4gc3RhdGUgMSAqLwotICAgICAgICBtdXRleC0+dmFsdWUgPSAoKHRpZCA8PCAxNikgfCBtdHlwZSB8IDEpOwotICAgIF9yZWN1cnNpdmVfdW5sb2NrKCk7Ci0KLSAgICBpZiAob2xkdiAhPSBtdHlwZSkKLSAgICAgICAgcmV0dXJuIEVCVVNZOwotCi0gICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIEVCVVNZOwogfQogCitpbnQgcHRocmVhZF9tdXRleF90cnlsb2NrKHB0aHJlYWRfbXV0ZXhfdCAqbXV0ZXgpCit7CisgICAgaW50IGVyciA9IHB0aHJlYWRfbXV0ZXhfdHJ5bG9ja19pbXBsKG11dGV4KTsKKyNpZmRlZiBQVEhSRUFEX0RFQlVHCisgICAgaWYgKFBUSFJFQURfREVCVUdfRU5BQkxFRCkgeworICAgICAgICBpZiAoIWVycikgeworICAgICAgICAgICAgcHRocmVhZF9kZWJ1Z19tdXRleF9sb2NrX2NoZWNrKG11dGV4KTsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZgorICAgIHJldHVybiBlcnI7Cit9CiAKIC8qIGluaXRpYWxpemUgJ3RzJyB3aXRoIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gJ2Fic3RpbWUnIGFuZCB0aGUgY3VycmVudCB0aW1lCiAgKiBhY2NvcmRpbmcgdG8gJ2Nsb2NrJy4gUmV0dXJucyAtMSBpZiBhYnN0aW1lIGFscmVhZHkgZXhwaXJlZCwgb3IgMCBvdGhlcndpc2UuCkBAIC0xMjM1LDEwNCArODMwLDE1MCBAQAogICAgIH0KIH0KIAotaW50IHB0aHJlYWRfbXV0ZXhfbG9ja190aW1lb3V0X25wKHB0aHJlYWRfbXV0ZXhfdCAqbXV0ZXgsIHVuc2lnbmVkIG1zZWNzKQorX19MSUJDX0hJRERFTl9fCitpbnQgcHRocmVhZF9tdXRleF9sb2NrX3RpbWVvdXRfbnBfaW1wbChwdGhyZWFkX211dGV4X3QgKm11dGV4LCB1bnNpZ25lZCBtc2VjcykKIHsKICAgICBjbG9ja2lkX3QgICAgICAgIGNsb2NrID0gQ0xPQ0tfTU9OT1RPTklDOwogICAgIHN0cnVjdCB0aW1lc3BlYyAgYWJzdGltZTsKICAgICBzdHJ1Y3QgdGltZXNwZWMgIHRzOwotICAgIGludCAgICAgICAgICAgICAgbXR5cGUsIHRpZCwgb2xkdiwgbmV3X2xvY2tfdHlwZSwgc2hhcmVkOworICAgIGludCAgICAgICAgICAgICAgIG12YWx1ZSwgbXR5cGUsIHRpZCwgc2hhcmVkOwogCiAgICAgLyogY29tcHV0ZSBhYnNvbHV0ZSBleHBpcmF0aW9uIHRpbWUgKi8KICAgICBfX3RpbWVzcGVjX3RvX3JlbGF0aXZlX21zZWMoJmFic3RpbWUsIG1zZWNzLCBjbG9jayk7CiAKLSAgICBpZiAoX191bmxpa2VseShtdXRleCA9PSBOVUxMKSkKKyAgICBpZiAoX19wcmVkaWN0X2ZhbHNlKG11dGV4ID09IE5VTEwpKQogICAgICAgICByZXR1cm4gRUlOVkFMOwogCi0gICAgbXR5cGUgID0gKG11dGV4LT52YWx1ZSAmIE1VVEVYX1RZUEVfTUFTSyk7Ci0gICAgc2hhcmVkID0gKG11dGV4LT52YWx1ZSAmIE1VVEVYX1NIQVJFRF9NQVNLKTsKKyAgICBtdmFsdWUgPSBtdXRleC0+dmFsdWU7CisgICAgbXR5cGUgID0gKG12YWx1ZSAmIE1VVEVYX1RZUEVfTUFTSyk7CisgICAgc2hhcmVkID0gKG12YWx1ZSAmIE1VVEVYX1NIQVJFRF9NQVNLKTsKIAogICAgIC8qIEhhbmRsZSBjb21tb24gY2FzZSBmaXJzdCAqLwotICAgIGlmICggX19saWtlbHkobXR5cGUgPT0gTVVURVhfVFlQRV9OT1JNQUwpICkKKyAgICBpZiAoIF9fcHJlZGljdF90cnVlKG10eXBlID09IE1VVEVYX1RZUEVfQklUU19OT1JNQUwpICkKICAgICB7Ci0gICAgICAgIC8qIGZhc3QgcGF0aCBmb3IgdW5jb250ZW5kZWQgbG9jayAqLwotICAgICAgICBpZiAoX19hdG9taWNfY21weGNoZyhzaGFyZWR8MCwgc2hhcmVkfDEsICZtdXRleC0+dmFsdWUpID09IDApIHsKKyAgICAgICAgY29uc3QgaW50IHVubG9ja2VkICAgICAgICAgICA9IHNoYXJlZCB8IE1VVEVYX1NUQVRFX0JJVFNfVU5MT0NLRUQ7CisgICAgICAgIGNvbnN0IGludCBsb2NrZWRfdW5jb250ZW5kZWQgPSBzaGFyZWQgfCBNVVRFWF9TVEFURV9CSVRTX0xPQ0tFRF9VTkNPTlRFTkRFRDsKKyAgICAgICAgY29uc3QgaW50IGxvY2tlZF9jb250ZW5kZWQgICA9IHNoYXJlZCB8IE1VVEVYX1NUQVRFX0JJVFNfTE9DS0VEX0NPTlRFTkRFRDsKKworICAgICAgICAvKiBmYXN0IHBhdGggZm9yIHVuY29udGVuZGVkIGxvY2suIE5vdGU6IE1VVEVYX1RZUEVfQklUU19OT1JNQUwgaXMgMCAqLworICAgICAgICBpZiAoX19iaW9uaWNfY21weGNoZyh1bmxvY2tlZCwgbG9ja2VkX3VuY29udGVuZGVkLCAmbXV0ZXgtPnZhbHVlKSA9PSAwKSB7CiAgICAgICAgICAgICBBTkRST0lEX01FTUJBUl9GVUxMKCk7CiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgfQogCiAgICAgICAgIC8qIGxvb3Agd2hpbGUgbmVlZGVkICovCi0gICAgICAgIHdoaWxlIChfX2F0b21pY19zd2FwKHNoYXJlZHwyLCAmbXV0ZXgtPnZhbHVlKSAhPSAoc2hhcmVkfDApKSB7CisgICAgICAgIHdoaWxlIChfX2Jpb25pY19zd2FwKGxvY2tlZF9jb250ZW5kZWQsICZtdXRleC0+dmFsdWUpICE9IHVubG9ja2VkKSB7CiAgICAgICAgICAgICBpZiAoX190aW1lc3BlY190b19hYnNvbHV0ZSgmdHMsICZhYnN0aW1lLCBjbG9jaykgPCAwKQogICAgICAgICAgICAgICAgIHJldHVybiBFQlVTWTsKIAotICAgICAgICAgICAgX19mdXRleF93YWl0X2V4KCZtdXRleC0+dmFsdWUsIHNoYXJlZCwgc2hhcmVkfDIsICZ0cyk7CisgICAgICAgICAgICBfX2Z1dGV4X3dhaXRfZXgoJm11dGV4LT52YWx1ZSwgc2hhcmVkLCBsb2NrZWRfY29udGVuZGVkLCAmdHMpOwogICAgICAgICB9CiAgICAgICAgIEFORFJPSURfTUVNQkFSX0ZVTEwoKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCiAgICAgLyogRG8gd2UgYWxyZWFkeSBvd24gdGhpcyByZWN1cnNpdmUgb3IgZXJyb3ItY2hlY2sgbXV0ZXggPyAqLwotICAgIHRpZCA9IF9fZ2V0X3RocmVhZCgpLT5rZXJuZWxfaWQ7Ci0gICAgaWYgKCB0aWQgPT0gTVVURVhfT1dORVIobXV0ZXgpICkKLSAgICB7Ci0gICAgICAgIGludCAgb2xkdiwgY291bnRlcjsKKyAgICB0aWQgPSBfX2dldF90aHJlYWQoKS0+dGlkOworICAgIGlmICggdGlkID09IE1VVEVYX09XTkVSX0ZST01fQklUUyhtdmFsdWUpICkKKyAgICAgICAgcmV0dXJuIF9yZWN1cnNpdmVfaW5jcmVtZW50KG11dGV4LCBtdmFsdWUsIG10eXBlKTsKIAotICAgICAgICBpZiAobXR5cGUgPT0gTVVURVhfVFlQRV9FUlJPUkNIRUNLKSB7Ci0gICAgICAgICAgICAvKiBhbHJlYWR5IGxvY2tlZCBieSBvdXJzZWx2ZXMgKi8KLSAgICAgICAgICAgIHJldHVybiBFREVBRExLOworICAgIC8qIHRoZSBmb2xsb3dpbmcgaW1wbGVtZW50cyB0aGUgc2FtZSBsb29wIHRoYW4gcHRocmVhZF9tdXRleF9sb2NrX2ltcGwKKyAgICAgKiBidXQgYWRkcyBjaGVja3MgdG8gZW5zdXJlIHRoYXQgdGhlIG9wZXJhdGlvbiBuZXZlciBleGNlZWRzIHRoZQorICAgICAqIGFic29sdXRlIGV4cGlyYXRpb24gdGltZS4KKyAgICAgKi8KKyAgICBtdHlwZSB8PSBzaGFyZWQ7CisKKyAgICAvKiBmaXJzdCB0cnkgYSBxdWljayBsb2NrICovCisgICAgaWYgKG12YWx1ZSA9PSBtdHlwZSkgeworICAgICAgICBtdmFsdWUgPSBNVVRFWF9PV05FUl9UT19CSVRTKHRpZCkgfCBtdHlwZSB8IE1VVEVYX1NUQVRFX0JJVFNfTE9DS0VEX1VOQ09OVEVOREVEOworICAgICAgICBpZiAoX19wcmVkaWN0X3RydWUoX19iaW9uaWNfY21weGNoZyhtdHlwZSwgbXZhbHVlLCAmbXV0ZXgtPnZhbHVlKSA9PSAwKSkgeworICAgICAgICAgICAgQU5EUk9JRF9NRU1CQVJfRlVMTCgpOworICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0KLQotICAgICAgICBfcmVjdXJzaXZlX2xvY2soKTsKLSAgICAgICAgb2xkdiA9IG11dGV4LT52YWx1ZTsKLSAgICAgICAgY291bnRlciA9IChvbGR2ICsgKDEgPDwgTVVURVhfQ09VTlRFUl9TSElGVCkpICYgTVVURVhfQ09VTlRFUl9NQVNLOwotICAgICAgICBtdXRleC0+dmFsdWUgPSAob2xkdiAmIH5NVVRFWF9DT1VOVEVSX01BU0spIHwgY291bnRlcjsKLSAgICAgICAgX3JlY3Vyc2l2ZV91bmxvY2soKTsKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIG12YWx1ZSA9IG11dGV4LT52YWx1ZTsKICAgICB9CiAKLSAgICAvKiBXZSBkb24ndCBvd24gdGhlIG11dGV4LCBzbyB0cnkgdG8gZ2V0IGl0LgotICAgICAqCi0gICAgICogRmlyc3QsIHdlIHRyeSB0byBjaGFuZ2UgaXRzIHN0YXRlIGZyb20gMCB0byAxLCBpZiB0aGlzCi0gICAgICogZG9lc24ndCB3b3JrLCB0cnkgdG8gY2hhbmdlIGl0IHRvIHN0YXRlIDIuCi0gICAgICovCi0gICAgbmV3X2xvY2tfdHlwZSA9IDE7Ci0KLSAgICAvKiBDb21wdXRlIHdhaXQgb3AgYW5kIHJlc3RvcmUgc2hhcmluZyBiaXQgaW4gbXR5cGUgKi8KLSAgICBtdHlwZSAgfD0gc2hhcmVkOwotCiAgICAgZm9yICg7OykgewotICAgICAgICBpbnQgIG9sZHY7Ci0gICAgICAgIHN0cnVjdCB0aW1lc3BlYyAgdHM7CisgICAgICAgIHN0cnVjdCB0aW1lc3BlYyB0czsKIAotICAgICAgICBfcmVjdXJzaXZlX2xvY2soKTsKLSAgICAgICAgb2xkdiA9IG11dGV4LT52YWx1ZTsKLSAgICAgICAgaWYgKG9sZHYgPT0gbXR5cGUpIHsgLyogdW5jb250ZW5kZWQgcmVsZWFzZWQgbG9jayA9PiAxIG9yIDIgKi8KLSAgICAgICAgICAgIG11dGV4LT52YWx1ZSA9ICgodGlkIDw8IDE2KSB8IG10eXBlIHwgbmV3X2xvY2tfdHlwZSk7Ci0gICAgICAgIH0gZWxzZSBpZiAoKG9sZHYgJiAzKSA9PSAxKSB7IC8qIGxvY2tlZCBzdGF0ZSAxID0+IHN0YXRlIDIgKi8KLSAgICAgICAgICAgIG9sZHYgXj0gMzsKLSAgICAgICAgICAgIG11dGV4LT52YWx1ZSA9IG9sZHY7CisgICAgICAgIC8qIGlmIHRoZSB2YWx1ZSBpcyAndW5sb2NrZWQnLCB0cnkgdG8gYWNxdWlyZSBpdCBkaXJlY3RseSAqLworICAgICAgICAvKiBOT1RFOiBwdXQgc3RhdGUgdG8gMiBzaW5jZSB3ZSBrbm93IHRoZXJlIGlzIGNvbnRlbnRpb24gKi8KKyAgICAgICAgaWYgKG12YWx1ZSA9PSBtdHlwZSkgLyogdW5sb2NrZWQgKi8geworICAgICAgICAgICAgbXZhbHVlID0gTVVURVhfT1dORVJfVE9fQklUUyh0aWQpIHwgbXR5cGUgfCBNVVRFWF9TVEFURV9CSVRTX0xPQ0tFRF9DT05URU5ERUQ7CisgICAgICAgICAgICBpZiAoX19iaW9uaWNfY21weGNoZyhtdHlwZSwgbXZhbHVlLCAmbXV0ZXgtPnZhbHVlKSA9PSAwKSB7CisgICAgICAgICAgICAgICAgQU5EUk9JRF9NRU1CQVJfRlVMTCgpOworICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLyogdGhlIHZhbHVlIGNoYW5nZWQgYmVmb3JlIHdlIGNvdWxkIGxvY2sgaXQuIFdlIG5lZWQgdG8gY2hlY2sKKyAgICAgICAgICAgICAqIHRoZSB0aW1lIHRvIGF2b2lkIGxpdmVsb2NrcywgcmVsb2FkIHRoZSB2YWx1ZSwgdGhlbiBsb29wIGFnYWluLiAqLworICAgICAgICAgICAgaWYgKF9fdGltZXNwZWNfdG9fYWJzb2x1dGUoJnRzLCAmYWJzdGltZSwgY2xvY2spIDwgMCkKKyAgICAgICAgICAgICAgICByZXR1cm4gRUJVU1k7CisKKyAgICAgICAgICAgIG12YWx1ZSA9IG11dGV4LT52YWx1ZTsKKyAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9Ci0gICAgICAgIF9yZWN1cnNpdmVfdW5sb2NrKCk7CiAKLSAgICAgICAgaWYgKG9sZHYgPT0gbXR5cGUpCi0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgLyogVGhlIHZhbHVlIGlzIGxvY2tlZC4gSWYgJ3VuY29udGVuZGVkJywgdHJ5IHRvIHN3aXRjaCBpdHMgc3RhdGUKKyAgICAgICAgICogdG8gJ2NvbnRlbnRlZCcgdG8gZW5zdXJlIHdlIGdldCB3b2tlbiB1cCBsYXRlci4gKi8KKyAgICAgICAgaWYgKE1VVEVYX1NUQVRFX0JJVFNfSVNfTE9DS0VEX1VOQ09OVEVOREVEKG12YWx1ZSkpIHsKKyAgICAgICAgICAgIGludCBuZXd2YWwgPSBNVVRFWF9TVEFURV9CSVRTX0ZMSVBfQ09OVEVOVElPTihtdmFsdWUpOworICAgICAgICAgICAgaWYgKF9fYmlvbmljX2NtcHhjaGcobXZhbHVlLCBuZXd2YWwsICZtdXRleC0+dmFsdWUpICE9IDApIHsKKyAgICAgICAgICAgICAgICAvKiB0aGlzIGZhaWxlZCBiZWNhdXNlIHRoZSB2YWx1ZSBjaGFuZ2VkLCByZWxvYWQgaXQgKi8KKyAgICAgICAgICAgICAgICBtdmFsdWUgPSBtdXRleC0+dmFsdWU7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIC8qIHRoaXMgc3VjY2VlZGVkLCB1cGRhdGUgbXZhbHVlICovCisgICAgICAgICAgICAgICAgbXZhbHVlID0gbmV3dmFsOworICAgICAgICAgICAgfQorICAgICAgICB9CiAKLSAgICAgICAgLyoKLSAgICAgICAgICogVGhlIGxvY2sgd2FzIGhlbGQsIHBvc3NpYmx5IGNvbnRlbmRlZCBieSBvdGhlcnMuICBGcm9tCi0gICAgICAgICAqIG5vdyBvbiwgaWYgd2UgbWFuYWdlIHRvIGFjcXVpcmUgdGhlIGxvY2ssIHdlIGhhdmUgdG8KLSAgICAgICAgICogYXNzdW1lIHRoYXQgb3RoZXJzIGFyZSBzdGlsbCBjb250ZW5kaW5nIGZvciBpdCBzbyB0aGF0Ci0gICAgICAgICAqIHdlJ2xsIHdha2UgdGhlbSB3aGVuIHdlIHVubG9jayBpdC4KLSAgICAgICAgICovCi0gICAgICAgIG5ld19sb2NrX3R5cGUgPSAyOwotCisgICAgICAgIC8qIGNoZWNrIHRpbWUgYW5kIHVwZGF0ZSAndHMnICovCiAgICAgICAgIGlmIChfX3RpbWVzcGVjX3RvX2Fic29sdXRlKCZ0cywgJmFic3RpbWUsIGNsb2NrKSA8IDApCiAgICAgICAgICAgICByZXR1cm4gRUJVU1k7CiAKLSAgICAgICAgX19mdXRleF93YWl0X2V4KCZtdXRleC0+dmFsdWUsIHNoYXJlZCwgb2xkdiwgJnRzKTsKKyAgICAgICAgLyogT25seSB3YWl0IHRvIGJlIHdva2VuIHVwIGlmIHRoZSBzdGF0ZSBpcyAnMicsIG90aGVyd2lzZSB3ZSdsbAorICAgICAgICAgKiBzaW1wbHkgbG9vcCByaWdodCBub3cuIFRoaXMgY2FuIGhhcHBlbiB3aGVuIHRoZSBzZWNvbmQgY21weGNoZworICAgICAgICAgKiBpbiBvdXIgbG9vcCBmYWlsZWQgYmVjYXVzZSB0aGUgbXV0ZXggd2FzIHVubG9ja2VkIGJ5IGFub3RoZXIKKyAgICAgICAgICogdGhyZWFkLgorICAgICAgICAgKi8KKyAgICAgICAgaWYgKE1VVEVYX1NUQVRFX0JJVFNfSVNfTE9DS0VEX0NPTlRFTkRFRChtdmFsdWUpKSB7CisgICAgICAgICAgICBpZiAoX19mdXRleF93YWl0X2V4KCZtdXRleC0+dmFsdWUsIHNoYXJlZCwgbXZhbHVlLCAmdHMpID09IEVUSU1FRE9VVCkgeworICAgICAgICAgICAgICAgIHJldHVybiBFQlVTWTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG12YWx1ZSA9IG11dGV4LT52YWx1ZTsKKyAgICAgICAgfQogICAgIH0KKyAgICAvKiBOT1RSRUFDSEVEICovCit9CisKK2ludCBwdGhyZWFkX211dGV4X2xvY2tfdGltZW91dF9ucChwdGhyZWFkX211dGV4X3QgKm11dGV4LCB1bnNpZ25lZCBtc2VjcykKK3sKKyAgICBpbnQgZXJyID0gcHRocmVhZF9tdXRleF9sb2NrX3RpbWVvdXRfbnBfaW1wbChtdXRleCwgbXNlY3MpOworI2lmZGVmIFBUSFJFQURfREVCVUcKKyAgICBpZiAoUFRIUkVBRF9ERUJVR19FTkFCTEVEKSB7CisgICAgICAgIGlmICghZXJyKSB7CisgICAgICAgICAgICBwdGhyZWFkX2RlYnVnX211dGV4X2xvY2tfY2hlY2sobXV0ZXgpOworICAgICAgICB9CisgICAgfQorI2VuZGlmCisgICAgcmV0dXJuIGVycjsKK30KKworaW50IHB0aHJlYWRfbXV0ZXhfZGVzdHJveShwdGhyZWFkX211dGV4X3QgKm11dGV4KQoreworICAgIGludCByZXQ7CisKKyAgICAvKiB1c2UgdHJ5bG9jayB0byBlbnN1cmUgdGhhdCB0aGUgbXV0ZXggdmFsdWUgaXMKKyAgICAgKiB2YWxpZCBhbmQgaXMgbm90IGFscmVhZHkgbG9ja2VkLiAqLworICAgIHJldCA9IHB0aHJlYWRfbXV0ZXhfdHJ5bG9ja19pbXBsKG11dGV4KTsKKyAgICBpZiAocmV0ICE9IDApCisgICAgICAgIHJldHVybiByZXQ7CisKKyAgICBtdXRleC0+dmFsdWUgPSAweGRlYWQxMGNjOwogICAgIHJldHVybiAwOwogfQogCisKKwogaW50IHB0aHJlYWRfY29uZGF0dHJfaW5pdChwdGhyZWFkX2NvbmRhdHRyX3QgKmF0dHIpCiB7CiAgICAgaWYgKGF0dHIgPT0gTlVMTCkKQEAgLTE0MjIsNyArMTA2Myw3IEBACiB7CiAgICAgbG9uZyBmbGFnczsKIAotICAgIGlmIChfX3VubGlrZWx5KGNvbmQgPT0gTlVMTCkpCisgICAgaWYgKF9fcHJlZGljdF9mYWxzZShjb25kID09IE5VTEwpKQogICAgICAgICByZXR1cm4gRUlOVkFMOwogCiAgICAgZmxhZ3MgPSAoY29uZC0+dmFsdWUgJiB+Q09ORF9DT1VOVEVSX01BU0spOwpAQCAtMTQzMCw3ICsxMDcxLDcgQEAKICAgICAgICAgbG9uZyBvbGR2YWwgPSBjb25kLT52YWx1ZTsKICAgICAgICAgbG9uZyBuZXd2YWwgPSAoKG9sZHZhbCAtIENPTkRfQ09VTlRFUl9JTkNSRU1FTlQpICYgQ09ORF9DT1VOVEVSX01BU0spCiAgICAgICAgICAgICAgICAgICAgICAgfCBmbGFnczsKLSAgICAgICAgaWYgKF9fYXRvbWljX2NtcHhjaGcob2xkdmFsLCBuZXd2YWwsICZjb25kLT52YWx1ZSkgPT0gMCkKKyAgICAgICAgaWYgKF9fYmlvbmljX2NtcHhjaGcob2xkdmFsLCBuZXd2YWwsICZjb25kLT52YWx1ZSkgPT0gMCkKICAgICAgICAgICAgIGJyZWFrOwogICAgIH0KIApAQCAtMTU0Miw0NzkgKzExODMsOTAgQEAKIH0KIAogCi0KLS8qIEEgdGVjaG5pY2FsIG5vdGUgcmVnYXJkaW5nIG91ciB0aHJlYWQtbG9jYWwtc3RvcmFnZSAoVExTKSBpbXBsZW1lbnRhdGlvbjoKLSAqCi0gKiBUaGVyZSBjYW4gYmUgdXAgdG8gVExTTUFQX1NJWkUgaW5kZXBlbmRlbnQgVExTIGtleXMgaW4gYSBnaXZlbiBwcm9jZXNzLAotICogdGhvdWdoIHRoZSBmaXJzdCBUTFNNQVBfU1RBUlQga2V5cyBhcmUgcmVzZXJ2ZWQgZm9yIEJpb25pYyB0byBob2xkCi0gKiBzcGVjaWFsIHRocmVhZC1zcGVjaWZpYyB2YXJpYWJsZXMgbGlrZSBlcnJubyBvciBhIHBvaW50ZXIgdG8KLSAqIHRoZSBjdXJyZW50IHRocmVhZCdzIGRlc2NyaXB0b3IuCi0gKgotICogd2hpbGUgc3RvcmVkIGluIHRoZSBUTFMgYXJlYSwgdGhlc2UgZW50cmllcyBjYW5ub3QgYmUgYWNjZXNzZWQgdGhyb3VnaAotICogcHRocmVhZF9nZXRzcGVjaWZpYygpIC8gcHRocmVhZF9zZXRzcGVjaWZpYygpIGFuZCBwdGhyZWFkX2tleV9kZWxldGUoKQotICoKLSAqIGFsc28sIHNvbWUgZW50cmllcyBpbiB0aGUga2V5IHRhYmxlIGFyZSBwcmUtYWxsb2NhdGVkIChzZWUgdGxzbWFwX2xvY2spCi0gKiB0byBncmVhdGx5IHNpbXBsaWZ5IGFuZCBzcGVlZHVwIHNvbWUgT3BlbkdMLXJlbGF0ZWQgb3BlcmF0aW9ucy4gdGhvdWdoIHRoZQotICogaW5pdGlhbHkgdmFsdWUgd2lsbCBiZSBOVUxMIG9uIGFsbCB0aHJlYWRzLgotICoKLSAqIHlvdSBjYW4gdXNlIHB0aHJlYWRfZ2V0c3BlY2lmaWMoKS9zZXRzcGVjaWZpYygpIG9uIHRoZXNlLCBhbmQgaW4gdGhlb3J5Ci0gKiB5b3UgY291bGQgYWxzbyBjYWxsIHB0aHJlYWRfa2V5X2RlbGV0ZSgpIGFzIHdlbGwsIHRob3VnaCB0aGlzIHdvdWxkCi0gKiBwcm9iYWJseSBicmVhayBzb21lIGFwcHMuCi0gKgotICogVGhlICd0bHNtYXBfdCcgdHlwZSBkZWZpbmVkIGJlbG93IGltcGxlbWVudHMgYSBzaGFyZWQgZ2xvYmFsIG1hcCBvZgotICogY3VycmVudGx5IGNyZWF0ZWQvYWxsb2NhdGVkIFRMUyBrZXlzIGFuZCB0aGUgZGVzdHJ1Y3RvcnMgYXNzb2NpYXRlZAotICogd2l0aCB0aGVtLiBZb3Ugc2hvdWxkIHVzZSB0bHNtYXBfbG9jay91bmxvY2sgdG8gYWNjZXNzIGl0IHRvIGF2b2lkCi0gKiBhbnkgcmFjZSBjb25kaXRpb24uCi0gKgotICogdGhlIGdsb2JhbCBUTFMgbWFwIHNpbXBseSBjb250YWlucyBhIGJpdG1hcCBvZiBhbGxvY2F0ZWQga2V5cywgYW5kCi0gKiBhbiBhcnJheSBvZiBkZXN0cnVjdG9ycy4KLSAqCi0gKiBlYWNoIHRocmVhZCBoYXMgYSBUTFMgYXJlYSB0aGF0IGlzIGEgc2ltcGxlIGFycmF5IG9mIFRMU01BUF9TSVpFIHZvaWQqCi0gKiBwb2ludGVycy4gdGhlIFRMUyBhcmVhIG9mIHRoZSBtYWluIHRocmVhZCBpcyBzdGFjay1hbGxvY2F0ZWQgaW4KLSAqIF9fbGliY19pbml0X2NvbW1vbiwgd2hpbGUgdGhlIFRMUyBhcmVhIG9mIG90aGVyIHRocmVhZHMgaXMgcGxhY2VkIGF0Ci0gKiB0aGUgdG9wIG9mIHRoZWlyIHN0YWNrIGluIHB0aHJlYWRfY3JlYXRlLgotICoKLSAqIHdoZW4gcHRocmVhZF9rZXlfY3JlYXRlKCkgaXMgY2FsbGVkLCBpdCBmaW5kcyB0aGUgZmlyc3QgZnJlZSBrZXkgaW4gdGhlCi0gKiBiaXRtYXAsIHRoZW4gc2V0IGl0IHRvIDEsIHNhdmluZyB0aGUgZGVzdHJ1Y3RvciBhbHRvZ2V0aGVyCi0gKgotICogd2hlbiBwdGhyZWFkX2tleV9kZWxldGUoKSBpcyBjYWxsZWQuIGl0IHdpbGwgZXJhc2UgdGhlIGtleSdzIGJpdG1hcCBiaXQKLSAqIGFuZCBpdHMgZGVzdHJ1Y3RvciwgYW5kIHdpbGwgYWxzbyBjbGVhciB0aGUga2V5IGRhdGEgaW4gdGhlIFRMUyBhcmVhIG9mCi0gKiBhbGwgY3JlYXRlZCB0aHJlYWRzLiBBcyBtYW5kYXRlZCBieSBQb3NpeCwgaXQgaXMgdGhlIHJlc3BvbnNhYmlsaXR5IG9mCi0gKiB0aGUgY2FsbGVyIG9mIHB0aHJlYWRfa2V5X2RlbGV0ZSgpIHRvIHByb3Blcmx5IHJlY2xhaW0gdGhlIG9iamVjdHMgdGhhdAotICogd2VyZSBwb2ludGVkIHRvIGJ5IHRoZXNlIGRhdGEgZmllbGRzIChlaXRoZXIgYmVmb3JlIG9yIGFmdGVyIHRoZSBjYWxsKS4KLSAqCi0gKi8KLQotLyogVExTIE1hcCBpbXBsZW1lbnRhdGlvbgotICovCi0KLSNkZWZpbmUgVExTTUFQX1NUQVJUICAgICAgKFRMU19TTE9UX01BWF9XRUxMX0tOT1dOKzEpCi0jZGVmaW5lIFRMU01BUF9TSVpFICAgICAgIEJJT05JQ19UTFNfU0xPVFMKLSNkZWZpbmUgVExTTUFQX0JJVFMgICAgICAgMzIKLSNkZWZpbmUgVExTTUFQX1dPUkRTICAgICAgKChUTFNNQVBfU0laRStUTFNNQVBfQklUUy0xKS9UTFNNQVBfQklUUykKLSNkZWZpbmUgVExTTUFQX1dPUkQobSxrKSAgKG0pLT5tYXBbKGspL1RMU01BUF9CSVRTXQotI2RlZmluZSBUTFNNQVBfTUFTSyhrKSAgICAoMVUgPDwgKChrKSYoVExTTUFQX0JJVFMtMSkpKQotCi0vKiB0aGlzIG1hY3JvIGlzIHVzZWQgdG8gcXVpY2tseSBjaGVjayB0aGF0IGEga2V5IGJlbG9uZ3MgdG8gYSByZWFzb25hYmxlIHJhbmdlICovCi0jZGVmaW5lIFRMU01BUF9WQUxJREFURV9LRVkoa2V5KSAgXAotICAgICgoa2V5KSA+PSBUTFNNQVBfU1RBUlQgJiYgKGtleSkgPCBUTFNNQVBfU0laRSkKLQotLyogdGhlIHR5cGUgb2YgdGxzIGtleSBkZXN0cnVjdG9yIGZ1bmN0aW9ucyAqLwotdHlwZWRlZiB2b2lkICgqdGxzX2R0b3JfdCkodm9pZCopOwotCi10eXBlZGVmIHN0cnVjdCB7Ci0gICAgaW50ICAgICAgICAgaW5pdDsgICAgICAgICAgICAgICAgICAvKiBzZWUgY29tbWVudCBpbiB0bHNtYXBfbG9jaygpICovCi0gICAgdWludDMyX3QgICAgbWFwW1RMU01BUF9XT1JEU107ICAgICAvKiBiaXRtYXAgb2YgYWxsb2NhdGVkIGtleXMgKi8KLSAgICB0bHNfZHRvcl90ICBkdG9yc1tUTFNNQVBfU0laRV07ICAgIC8qIGtleSBkZXN0cnVjdG9ycyAqLwotfSB0bHNtYXBfdDsKLQotc3RhdGljIHB0aHJlYWRfbXV0ZXhfdCAgX3Rsc21hcF9sb2NrID0gUFRIUkVBRF9NVVRFWF9JTklUSUFMSVpFUjsKLXN0YXRpYyB0bHNtYXBfdCAgICAgICAgIF90bHNtYXA7Ci0KLS8qIGxvY2sgdGhlIGdsb2JhbCBUTFMgbWFwIGxvY2sgYW5kIHJldHVybiBhIGhhbmRsZSB0byBpdCAqLwotc3RhdGljIF9faW5saW5lX18gdGxzbWFwX3QqIHRsc21hcF9sb2NrKHZvaWQpCi17Ci0gICAgdGxzbWFwX3QqICAgbSA9ICZfdGxzbWFwOwotCi0gICAgcHRocmVhZF9tdXRleF9sb2NrKCZfdGxzbWFwX2xvY2spOwotICAgIC8qIHdlIG5lZWQgdG8gaW5pdGlhbGl6ZSB0aGUgZmlyc3QgZW50cnkgb2YgdGhlICdtYXAnIGFycmF5Ci0gICAgICogd2l0aCB0aGUgdmFsdWUgVExTX0RFRkFVTFRfQUxMT0NfTUFQLiBkb2luZyBpdCBzdGF0aWNhbGx5Ci0gICAgICogd2hlbiBkZWNsYXJpbmcgX3Rsc21hcCBpcyBhIGJpdCBhd2t3YXJkIGFuZCBpcyBnb2luZyB0bwotICAgICAqIHByb2R1Y2Ugd2FybmluZ3MsIHNvIGRvIGl0IHRoZSBmaXJzdCB0aW1lIHdlIHVzZSB0aGUgbWFwCi0gICAgICogaW5zdGVhZAotICAgICAqLwotICAgIGlmIChfX3VubGlrZWx5KCFtLT5pbml0KSkgewotICAgICAgICBUTFNNQVBfV09SRChtLDApID0gVExTX0RFRkFVTFRfQUxMT0NfTUFQOwotICAgICAgICBtLT5pbml0ICAgICAgICAgID0gMTsKLSAgICB9Ci0gICAgcmV0dXJuIG07Ci19Ci0KLS8qIHVubG9jayB0aGUgZ2xvYmFsIFRMUyBtYXAgKi8KLXN0YXRpYyBfX2lubGluZV9fIHZvaWQgdGxzbWFwX3VubG9jayh0bHNtYXBfdCogIG0pCi17Ci0gICAgcHRocmVhZF9tdXRleF91bmxvY2soJl90bHNtYXBfbG9jayk7Ci0gICAgKHZvaWQpbTsgIC8qIGEgZ29vZCBjb21waWxlciBpcyBhIGhhcHB5IGNvbXBpbGVyICovCi19Ci0KLS8qIHRlc3QgdG8gc2VlIHdldGhlciBhIGtleSBpcyBhbGxvY2F0ZWQgKi8KLXN0YXRpYyBfX2lubGluZV9fIGludCB0bHNtYXBfdGVzdCh0bHNtYXBfdCogIG0sIGludCAga2V5KQotewotICAgIHJldHVybiAoVExTTUFQX1dPUkQobSxrZXkpICYgVExTTUFQX01BU0soa2V5KSkgIT0gMDsKLX0KLQotLyogc2V0IHRoZSBkZXN0cnVjdG9yIGFuZCBiaXQgZmxhZyBvbiBhIG5ld2x5IGFsbG9jYXRlZCBrZXkgKi8KLXN0YXRpYyBfX2lubGluZV9fIHZvaWQgdGxzbWFwX3NldCh0bHNtYXBfdCogIG0sIGludCAga2V5LCB0bHNfZHRvcl90ICBkdG9yKQotewotICAgIFRMU01BUF9XT1JEKG0sa2V5KSB8PSBUTFNNQVBfTUFTSyhrZXkpOwotICAgIG0tPmR0b3JzW2tleV0gICAgICAgPSBkdG9yOwotfQotCi0vKiBjbGVhciB0aGUgZGVzdHJ1Y3RvciBhbmQgYml0IGZsYWcgb24gYW4gZXhpc3Rpbmcga2V5ICovCi1zdGF0aWMgX19pbmxpbmVfXyB2b2lkICB0bHNtYXBfY2xlYXIodGxzbWFwX3QqICBtLCBpbnQgIGtleSkKLXsKLSAgICBUTFNNQVBfV09SRChtLGtleSkgJj0gflRMU01BUF9NQVNLKGtleSk7Ci0gICAgbS0+ZHRvcnNba2V5XSAgICAgICA9IE5VTEw7Ci19Ci0KLS8qIGFsbG9jYXRlIGEgbmV3IFRMUyBrZXksIHJldHVybiAtMSBpZiBubyByb29tIGxlZnQgKi8KLXN0YXRpYyBpbnQgdGxzbWFwX2FsbG9jKHRsc21hcF90KiAgbSwgdGxzX2R0b3JfdCAgZHRvcikKLXsKLSAgICBpbnQgIGtleTsKLQotICAgIGZvciAoIGtleSA9IFRMU01BUF9TVEFSVDsga2V5IDwgVExTTUFQX1NJWkU7IGtleSsrICkgewotICAgICAgICBpZiAoICF0bHNtYXBfdGVzdChtLCBrZXkpICkgewotICAgICAgICAgICAgdGxzbWFwX3NldChtLCBrZXksIGR0b3IpOwotICAgICAgICAgICAgcmV0dXJuIGtleTsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gLTE7Ci19Ci0KLQotaW50IHB0aHJlYWRfa2V5X2NyZWF0ZShwdGhyZWFkX2tleV90ICprZXksIHZvaWQgKCpkZXN0cnVjdG9yX2Z1bmN0aW9uKSh2b2lkICopKQotewotICAgIHVpbnQzMl90ICAgZXJyID0gRU5PTUVNOwotICAgIHRsc21hcF90KiAgbWFwID0gdGxzbWFwX2xvY2soKTsKLSAgICBpbnQgICAgICAgIGsgICA9IHRsc21hcF9hbGxvYyhtYXAsIGRlc3RydWN0b3JfZnVuY3Rpb24pOwotCi0gICAgaWYgKGsgPj0gMCkgewotICAgICAgICAqa2V5ID0gazsKLSAgICAgICAgZXJyICA9IDA7Ci0gICAgfQotICAgIHRsc21hcF91bmxvY2sobWFwKTsKLSAgICByZXR1cm4gZXJyOwotfQotCi0KLS8qIFRoaXMgZGVsZXRlcyBhIHB0aHJlYWRfa2V5X3QuIG5vdGUgdGhhdCB0aGUgc3RhbmRhcmQgbWFuZGF0ZXMgdGhhdCB0aGlzIGRvZXMKLSAqIG5vdCBjYWxsIHRoZSBkZXN0cnVjdG9yIG9mIG5vbi1OVUxMIGtleSB2YWx1ZXMuIEluc3RlYWQsIGl0IGlzIHRoZQotICogcmVzcG9uc2FiaWxpdHkgb2YgdGhlIGNhbGxlciB0byBwcm9wZXJseSBkaXNwb3NlIG9mIHRoZSBjb3JyZXNwb25kaW5nIGRhdGEKLSAqIGFuZCByZXNvdXJjZXMsIHVzaW5nIGFueSBtZWFuIGl0IGZpbmRzIHN1aXRhYmxlLgotICoKLSAqIE9uIHRoZSBvdGhlciBoYW5kLCB0aGlzIGZ1bmN0aW9uIHdpbGwgY2xlYXIgdGhlIGNvcnJlc3BvbmRpbmcga2V5IGRhdGEKLSAqIHZhbHVlcyBpbiBhbGwga25vd24gdGhyZWFkcy4gdGhpcyBwcmV2ZW50cyBsYXRlciAoaW52YWxpZCkgY2FsbHMgdG8KLSAqIHB0aHJlYWRfZ2V0c3BlY2lmaWMoKSB0byByZWNlaXZlIGludmFsaWQvc3RhbGUgdmFsdWVzLgotICovCi1pbnQgcHRocmVhZF9rZXlfZGVsZXRlKHB0aHJlYWRfa2V5X3Qga2V5KQotewotICAgIHVpbnQzMl90ICAgICAgICAgICAgIGVycjsKLSAgICBwdGhyZWFkX2ludGVybmFsX3QqICB0aHI7Ci0gICAgdGxzbWFwX3QqICAgICAgICAgICAgbWFwOwotCi0gICAgaWYgKCFUTFNNQVBfVkFMSURBVEVfS0VZKGtleSkpIHsKLSAgICAgICAgcmV0dXJuIEVJTlZBTDsKLSAgICB9Ci0KLSAgICBtYXAgPSB0bHNtYXBfbG9jaygpOwotCi0gICAgaWYgKCF0bHNtYXBfdGVzdChtYXAsIGtleSkpIHsKLSAgICAgICAgZXJyID0gRUlOVkFMOwotICAgICAgICBnb3RvIGVycjE7Ci0gICAgfQotCi0gICAgLyogY2xlYXIgdmFsdWUgaW4gYWxsIHRocmVhZHMgKi8KLSAgICBwdGhyZWFkX211dGV4X2xvY2soJmdUaHJlYWRMaXN0TG9jayk7Ci0gICAgZm9yICggdGhyID0gZ1RocmVhZExpc3Q7IHRociAhPSBOVUxMOyB0aHIgPSB0aHItPm5leHQgKSB7Ci0gICAgICAgIC8qIGF2b2lkIHpvbWJpZSB0aHJlYWRzIHdpdGggYSBuZWdhdGl2ZSAnam9pbl9jb3VudCcuIHRoZXNlIGFyZSByZWFsbHkKLSAgICAgICAgICogYWxyZWFkeSBkZWFkIGFuZCBkb24ndCBoYXZlIGEgVExTIGFyZWEgYW55bW9yZS4KLSAgICAgICAgICoKLSAgICAgICAgICogc2ltaWxhcmx5LCBpdCBpcyBwb3NzaWJsZSB0byBoYXZlIHRoci0+dGxzID09IE5VTEwgZm9yIHRocmVhZHMgdGhhdAotICAgICAgICAgKiB3ZXJlIGp1c3QgcmVjZW50bHkgY3JlYXRlZCB0aHJvdWdoIHB0aHJlYWRfY3JlYXRlKCkgYnV0IHdob3NlCi0gICAgICAgICAqIHN0YXJ0dXAgdHJhbXBvbGluZSAoX190aHJlYWRfZW50cnkpIGhhc24ndCBiZWVuIHJ1biB5ZXQgYnkgdGhlCi0gICAgICAgICAqIHNjaGVkdWxlci4gdGhyLT50bHMgd2lsbCBhbHNvIGJlIE5VTEwgYWZ0ZXIgaXQncyBzdGFjayBoYXMgYmVlbgotICAgICAgICAgKiB1bm1hcHBlZCBidXQgYmVmb3JlIHRoZSBvbmdvaW5nIHB0aHJlYWRfam9pbigpIGlzIGZpbmlzaGVkLgotICAgICAgICAgKiBzbyBjaGVjayBmb3IgdGhpcyB0b28uCi0gICAgICAgICAqLwotICAgICAgICBpZiAodGhyLT5qb2luX2NvdW50IDwgMCB8fCAhdGhyLT50bHMpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICB0aHItPnRsc1trZXldID0gTlVMTDsKLSAgICB9Ci0gICAgdGxzbWFwX2NsZWFyKG1hcCwga2V5KTsKLQotICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZnVGhyZWFkTGlzdExvY2spOwotICAgIGVyciA9IDA7Ci0KLWVycjE6Ci0gICAgdGxzbWFwX3VubG9jayhtYXApOwotICAgIHJldHVybiBlcnI7Ci19Ci0KLQotaW50IHB0aHJlYWRfc2V0c3BlY2lmaWMocHRocmVhZF9rZXlfdCBrZXksIGNvbnN0IHZvaWQgKnB0cikKLXsKLSAgICBpbnQgICAgICAgIGVyciA9IEVJTlZBTDsKLSAgICB0bHNtYXBfdCogIG1hcDsKLQotICAgIGlmIChUTFNNQVBfVkFMSURBVEVfS0VZKGtleSkpIHsKLSAgICAgICAgLyogY2hlY2sgdGhhdCB3ZSdyZSB0cnlpbmcgdG8gc2V0IGRhdGEgZm9yIGFuIGFsbG9jYXRlZCBrZXkgKi8KLSAgICAgICAgbWFwID0gdGxzbWFwX2xvY2soKTsKLSAgICAgICAgaWYgKHRsc21hcF90ZXN0KG1hcCwga2V5KSkgewotICAgICAgICAgICAgKCh1aW50MzJfdCAqKV9fZ2V0X3RscygpKVtrZXldID0gKHVpbnQzMl90KXB0cjsKLSAgICAgICAgICAgIGVyciA9IDA7Ci0gICAgICAgIH0KLSAgICAgICAgdGxzbWFwX3VubG9jayhtYXApOwotICAgIH0KLSAgICByZXR1cm4gZXJyOwotfQotCi12b2lkICogcHRocmVhZF9nZXRzcGVjaWZpYyhwdGhyZWFkX2tleV90IGtleSkKLXsKLSAgICBpZiAoIVRMU01BUF9WQUxJREFURV9LRVkoa2V5KSkgewotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICAvKiBmb3IgcGVyZm9ybWFuY2UgcmVhc29uLCB3ZSBkbyBub3QgbG9jay91bmxvY2sgdGhlIGdsb2JhbCBUTFMgbWFwCi0gICAgICogdG8gY2hlY2sgdGhhdCB0aGUga2V5IGlzIHByb3Blcmx5IGFsbG9jYXRlZC4gaWYgdGhlIGtleSB3YXMgbm90Ci0gICAgICogYWxsb2NhdGVkLCB0aGUgdmFsdWUgcmVhZCBmcm9tIHRoZSBUTFMgc2hvdWxkIGFsd2F5cyBiZSBOVUxMCi0gICAgICogZHVlIHRvIHB0aHJlYWRfa2V5X2RlbGV0ZSgpIGNsZWFyaW5nIHRoZSB2YWx1ZXMgZm9yIGFsbCB0aHJlYWRzLgotICAgICAqLwotICAgIHJldHVybiAodm9pZCAqKSgoKHVuc2lnbmVkICopX19nZXRfdGxzKCkpW2tleV0pOwotfQotCi0vKiBQb3NpeCBtYW5kYXRlcyB0aGF0IHRoaXMgYmUgZGVmaW5lZCBpbiA8bGltaXRzLmg+IGJ1dCB3ZSBkb24ndCBoYXZlCi0gKiBpdCBqdXN0IHlldC4KLSAqLwotI2lmbmRlZiBQVEhSRUFEX0RFU1RSVUNUT1JfSVRFUkFUSU9OUwotIyAgZGVmaW5lIFBUSFJFQURfREVTVFJVQ1RPUl9JVEVSQVRJT05TICA0Ci0jZW5kaWYKLQotLyogdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSBwdGhyZWFkX2V4aXQoKSB0byByZW1vdmUgYWxsIFRMUyBrZXkgZGF0YQotICogZnJvbSB0aGlzIHRocmVhZCdzIFRMUyBhcmVhLiB0aGlzIG11c3QgY2FsbCB0aGUgZGVzdHJ1Y3RvciBvZiBhbGwga2V5cwotICogdGhhdCBoYXZlIGEgbm9uLU5VTEwgZGF0YSB2YWx1ZSAoYW5kIGEgbm9uLU5VTEwgZGVzdHJ1Y3RvcikuCi0gKgotICogYmVjYXVzZSBkZXN0cnVjdG9ycyBjYW4gZG8gZnVua3kgdGhpbmdzIGxpa2UgZGVsZXRpbmcvY3JlYXRpbmcgb3RoZXIKLSAqIGtleXMsIHdlIG5lZWQgdG8gaW1wbGVtZW50IHRoaXMgaW4gYSBsb29wCi0gKi8KLXN0YXRpYyB2b2lkIHB0aHJlYWRfa2V5X2NsZWFuX2FsbCh2b2lkKQotewotICAgIHRsc21hcF90KiAgICBtYXA7Ci0gICAgdm9pZCoqICAgICAgIHRscyA9ICh2b2lkKiopX19nZXRfdGxzKCk7Ci0gICAgaW50ICAgICAgICAgIHJvdW5kcyA9IFBUSFJFQURfREVTVFJVQ1RPUl9JVEVSQVRJT05TOwotCi0gICAgbWFwID0gdGxzbWFwX2xvY2soKTsKLQotICAgIGZvciAocm91bmRzID0gUFRIUkVBRF9ERVNUUlVDVE9SX0lURVJBVElPTlM7IHJvdW5kcyA+IDA7IHJvdW5kcy0tKQotICAgIHsKLSAgICAgICAgaW50ICBraywgY291bnQgPSAwOwotCi0gICAgICAgIGZvciAoa2sgPSBUTFNNQVBfU1RBUlQ7IGtrIDwgVExTTUFQX1NJWkU7IGtrKyspIHsKLSAgICAgICAgICAgIGlmICggdGxzbWFwX3Rlc3QobWFwLCBraykgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHZvaWQqICAgICAgIGRhdGEgPSB0bHNba2tdOwotICAgICAgICAgICAgICAgIHRsc19kdG9yX3QgIGR0b3IgPSBtYXAtPmR0b3JzW2trXTsKLQotICAgICAgICAgICAgICAgIGlmIChkYXRhICE9IE5VTEwgJiYgZHRvciAhPSBOVUxMKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAvKiB3ZSBuZWVkIHRvIGNsZWFyIHRoZSBrZXkgZGF0YSBub3csIHRoaXMgd2lsbCBwcmV2ZW50IHRoZQotICAgICAgICAgICAgICAgICAgICAqIGRlc3RydWN0b3IgKG9yIGEgbGF0ZXIgb25lKSBmcm9tIHNlZWluZyB0aGUgb2xkIHZhbHVlIGlmCi0gICAgICAgICAgICAgICAgICAgICogaXQgY2FsbHMgcHRocmVhZF9nZXRzcGVjaWZpYygpIGZvciBzb21lIG9kZCByZWFzb24KLSAgICAgICAgICAgICAgICAgICAgKgotICAgICAgICAgICAgICAgICAgICAqIHdlIGRvIG5vdCBkbyB0aGlzIGlmICdkdG9yID09IE5VTEwnIGp1c3QgaW4gY2FzZSBhbm90aGVyCi0gICAgICAgICAgICAgICAgICAgICogZGVzdHJ1Y3RvciBmdW5jdGlvbiBtaWdodCBiZSByZXNwb25zaWJsZSBmb3IgbWFudWFsbHkKLSAgICAgICAgICAgICAgICAgICAgKiByZWxlYXNpbmcgdGhlIGNvcnJlc3BvbmRpbmcgZGF0YS4KLSAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICAgICAgdGxzW2trXSA9IE5VTEw7Ci0KLSAgICAgICAgICAgICAgICAgICAvKiBiZWNhdXNlIHRoZSBkZXN0cnVjdG9yIGlzIGZyZWUgdG8gY2FsbCBwdGhyZWFkX2tleV9jcmVhdGUKLSAgICAgICAgICAgICAgICAgICAgKiBhbmQvb3IgcHRocmVhZF9rZXlfZGVsZXRlLCB3ZSBuZWVkIHRvIHRlbXBvcmFyaWx5IHVubG9jawotICAgICAgICAgICAgICAgICAgICAqIHRoZSBUTFMgbWFwCi0gICAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgICAgICAgIHRsc21hcF91bmxvY2sobWFwKTsKLSAgICAgICAgICAgICAgICAgICAgKCpkdG9yKShkYXRhKTsKLSAgICAgICAgICAgICAgICAgICAgbWFwID0gdGxzbWFwX2xvY2soKTsKLQotICAgICAgICAgICAgICAgICAgICBjb3VudCArPSAxOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8qIGlmIHdlIGRpZG4ndCBjYWxsIGFueSBkZXN0cnVjdG9yLCB0aGVyZSBpcyBubyBuZWVkIHRvIGNoZWNrIHRoZQotICAgICAgICAgKiBUTFMgZGF0YSBhZ2FpbgotICAgICAgICAgKi8KLSAgICAgICAgaWYgKGNvdW50ID09IDApCi0gICAgICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgdGxzbWFwX3VubG9jayhtYXApOwotfQotCi0vLyBtYW4gc2F5cyB0aGlzIHNob3VsZCBiZSBpbiA8bGludXgvdW5pc3RkLmg+LCBidXQgaXQgaXNuJ3QKLWV4dGVybiBpbnQgdGtpbGwoaW50IHRpZCwgaW50IHNpZyk7Ci0KLWludCBwdGhyZWFkX2tpbGwocHRocmVhZF90IHRpZCwgaW50IHNpZykKLXsKLSAgICBpbnQgIHJldDsKLSAgICBpbnQgIG9sZF9lcnJubyA9IGVycm5vOwotICAgIHB0aHJlYWRfaW50ZXJuYWxfdCAqIHRocmVhZCA9IChwdGhyZWFkX2ludGVybmFsX3QgKil0aWQ7Ci0KLSAgICByZXQgPSB0a2lsbCh0aHJlYWQtPmtlcm5lbF9pZCwgc2lnKTsKLSAgICBpZiAocmV0IDwgMCkgewotICAgICAgICByZXQgPSBlcnJubzsKLSAgICAgICAgZXJybm8gPSBvbGRfZXJybm87Ci0gICAgfQotCi0gICAgcmV0dXJuIHJldDsKLX0KLQotLyogRGVzcGl0ZSB0aGUgZmFjdCB0aGF0IG91ciBrZXJuZWwgaGVhZGVycyBkZWZpbmUgc2lnc2V0X3QgZXhwbGljaXRseQotICogYXMgYSAzMi1iaXQgaW50ZWdlciwgdGhlIGtlcm5lbCBzeXN0ZW0gY2FsbCByZWFsbHkgZXhwZWN0cyBhIDY0LWJpdAotICogYml0bWFwIGZvciB0aGUgc2lnbmFsIHNldCwgb3IgbW9yZSBleGFjdGx5IGFuIGFycmF5IG9mIHR3by0zMi1iaXQKLSAqIHZhbHVlcyAoc2VlICRLRVJORUwvYXJjaC8kQVJDSC9pbmNsdWRlL2FzbS9zaWduYWwuaCBmb3IgZGV0YWlscykuCi0gKgotICogVW5mb3J0dW5hdGVseSwgd2UgY2Fubm90IGZpeCB0aGUgc2lnc2V0X3QgZGVmaW5pdGlvbiB3aXRob3V0IGJyZWFraW5nCi0gKiB0aGUgQyBsaWJyYXJ5IEFCSSwgc28gcGVyZm9ybSBhIGxpdHRsZSBydW50aW1lIHRyYW5zbGF0aW9uIGhlcmUuCi0gKi8KLXR5cGVkZWYgdW5pb24gewotICAgIHNpZ3NldF90ICAgYmlvbmljOwotICAgIHVpbnQzMl90ICAga2VybmVsWzJdOwotfSBrZXJuZWxfc2lnc2V0X3Q7Ci0KLS8qIHRoaXMgaXMgYSBwcml2YXRlIHN5c2NhbGwgc3R1YiAqLwotZXh0ZXJuIGludCBfX3J0X3NpZ3Byb2NtYXNrKGludCwgY29uc3Qga2VybmVsX3NpZ3NldF90ICosIGtlcm5lbF9zaWdzZXRfdCAqLCBzaXplX3QpOwotCi1pbnQgcHRocmVhZF9zaWdtYXNrKGludCBob3csIGNvbnN0IHNpZ3NldF90ICpzZXQsIHNpZ3NldF90ICpvc2V0KQotewotICAgIC8qIHB0aHJlYWRfc2lnbWFzayBtdXN0IHJldHVybiB0aGUgZXJyb3IgY29kZSwgYnV0IHRoZSBzeXNjYWxsCi0gICAgICogd2lsbCBzZXQgZXJybm8gaW5zdGVhZCBhbmQgcmV0dXJuIDAvLTEKLSAgICAgKi8KLSAgICBpbnQgcmV0LCBvbGRfZXJybm8gPSBlcnJubzsKLQotICAgIC8qIFdlIG11c3QgY29udmVydCAqc2V0IGludG8gYSBrZXJuZWxfc2lnc2V0X3QgKi8KLSAgICBrZXJuZWxfc2lnc2V0X3QgIGluX3NldCwgKmluX3NldF9wdHI7Ci0gICAga2VybmVsX3NpZ3NldF90ICBvdXRfc2V0OwotCi0gICAgaW5fc2V0Lmtlcm5lbFswXSA9IGluX3NldC5rZXJuZWxbMV0gPSAwOwotICAgIG91dF9zZXQua2VybmVsWzBdID0gb3V0X3NldC5rZXJuZWxbMV0gPSAwOwotCi0gICAgLyogJ2luX3NldF9wdHInIGlzIHRoZSBzZWNvbmQgcGFyYW1ldGVyIHRvIF9fcnRfc2lncHJvY21hc2suIEl0IG11c3QgYmUgTlVMTAotICAgICAqIGlmICdzZXQnIGlzIE5VTEwgdG8gZW5zdXJlIGNvcnJlY3Qgc2VtYW50aWNzICh3aGljaCBpbiB0aGlzIGNhc2Ugd291bGQKLSAgICAgKiBiZSB0byBpZ25vcmUgJ2hvdycgYW5kIHJldHVybiB0aGUgY3VycmVudCBzaWduYWwgc2V0IGludG8gJ29zZXQnLgotICAgICAgKi8KLSAgICBpZiAoc2V0ID09IE5VTEwpIHsKLSAgICAgICAgaW5fc2V0X3B0ciA9IE5VTEw7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaW5fc2V0LmJpb25pYyA9ICpzZXQ7Ci0gICAgICAgIGluX3NldF9wdHIgPSAmaW5fc2V0OwotICAgIH0KLQotICAgIHJldCA9IF9fcnRfc2lncHJvY21hc2soaG93LCBpbl9zZXRfcHRyLCAmb3V0X3NldCwgc2l6ZW9mKGtlcm5lbF9zaWdzZXRfdCkpOwotICAgIGlmIChyZXQgPCAwKQotICAgICAgICByZXQgPSBlcnJubzsKLQotICAgIGlmIChvc2V0KQotICAgICAgICAqb3NldCA9IG91dF9zZXQuYmlvbmljOwotCi0gICAgZXJybm8gPSBvbGRfZXJybm87Ci0gICAgcmV0dXJuIHJldDsKLX0KLQotCi1pbnQgcHRocmVhZF9nZXRjcHVjbG9ja2lkKHB0aHJlYWRfdCAgdGlkLCBjbG9ja2lkX3QgICpjbG9ja2lkKQotewotICAgIGNvbnN0IGludCAgICAgICAgICAgIENMT0NLX0lEVFlQRV9CSVRTID0gMzsKLSAgICBwdGhyZWFkX2ludGVybmFsX3QqICB0aHJlYWQgPSAocHRocmVhZF9pbnRlcm5hbF90Kil0aWQ7Ci0KLSAgICBpZiAoIXRocmVhZCkKLSAgICAgICAgcmV0dXJuIEVTUkNIOwotCi0gICAgKmNsb2NraWQgPSBDTE9DS19USFJFQURfQ1BVVElNRV9JRCB8ICh0aHJlYWQtPmtlcm5lbF9pZCA8PCBDTE9DS19JRFRZUEVfQklUUyk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLQogLyogTk9URTogdGhpcyBpbXBsZW1lbnRhdGlvbiBkb2Vzbid0IHN1cHBvcnQgYSBpbml0IGZ1bmN0aW9uIHRoYXQgdGhyb3dzIGEgQysrIGV4Y2VwdGlvbgogICogICAgICAgb3IgY2FsbHMgZm9yaygpCiAgKi8KLWludCAgcHRocmVhZF9vbmNlKCBwdGhyZWFkX29uY2VfdCogIG9uY2VfY29udHJvbCwgIHZvaWQgKCppbml0X3JvdXRpbmUpKHZvaWQpICkKK2ludCBwdGhyZWFkX29uY2UoIHB0aHJlYWRfb25jZV90KiAgb25jZV9jb250cm9sLCAgdm9pZCAoKmluaXRfcm91dGluZSkodm9pZCkgKQogewotICAgIHN0YXRpYyBwdGhyZWFkX211dGV4X3QgICBvbmNlX2xvY2sgPSBQVEhSRUFEX1JFQ1VSU0lWRV9NVVRFWF9JTklUSUFMSVpFUjsKICAgICB2b2xhdGlsZSBwdGhyZWFkX29uY2VfdCogb2NwdHIgPSBvbmNlX2NvbnRyb2w7CiAKLSAgICBwdGhyZWFkX29uY2VfdCB0bXAgPSAqb2NwdHI7Ci0gICAgQU5EUk9JRF9NRU1CQVJfRlVMTCgpOwotICAgIGlmICh0bXAgPT0gUFRIUkVBRF9PTkNFX0lOSVQpIHsKLSAgICAgICAgcHRocmVhZF9tdXRleF9sb2NrKCAmb25jZV9sb2NrICk7Ci0gICAgICAgIGlmICgqb2NwdHIgPT0gUFRIUkVBRF9PTkNFX0lOSVQpIHsKLSAgICAgICAgICAgICgqaW5pdF9yb3V0aW5lKSgpOworICAgIC8qIFBUSFJFQURfT05DRV9JTklUIGlzIDAsIHdlIHVzZSB0aGUgZm9sbG93aW5nIGJpdCBmbGFncworICAgICAqCisgICAgICogICBiaXQgMCBzZXQgIC0+IGluaXRpYWxpemF0aW9uIGlzIHVuZGVyIHdheQorICAgICAqICAgYml0IDEgc2V0ICAtPiBpbml0aWFsaXphdGlvbiBpcyBjb21wbGV0ZQorICAgICAqLworI2RlZmluZSBPTkNFX0lOSVRJQUxJWklORyAgICAgICAgICAgKDEgPDwgMCkKKyNkZWZpbmUgT05DRV9DT01QTEVURUQgICAgICAgICAgICAgICgxIDw8IDEpCisKKyAgICAvKiBGaXJzdCBjaGVjayBpZiB0aGUgb25jZSBpcyBhbHJlYWR5IGluaXRpYWxpemVkLiBUaGlzIHdpbGwgYmUgdGhlIGNvbW1vbgorICAgICogY2FzZSBhbmQgd2Ugd2FudCB0byBtYWtlIHRoaXMgYXMgZmFzdCBhcyBwb3NzaWJsZS4gTm90ZSB0aGF0IHRoaXMgc3RpbGwKKyAgICAqIHJlcXVpcmVzIGEgbG9hZF9hY3F1aXJlIG9wZXJhdGlvbiBoZXJlIHRvIGVuc3VyZSB0aGF0IGFsbCB0aGUKKyAgICAqIHN0b3JlcyBwZXJmb3JtZWQgYnkgdGhlIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIGFyZSBvYnNlcnZhYmxlIG9uCisgICAgKiB0aGlzIENQVSBhZnRlciB3ZSBleGl0LgorICAgICovCisgICAgaWYgKF9fcHJlZGljdF90cnVlKCgqb2NwdHIgJiBPTkNFX0NPTVBMRVRFRCkgIT0gMCkpIHsKKyAgICAgICAgQU5EUk9JRF9NRU1CQVJfRlVMTCgpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBmb3IgKDs7KSB7CisgICAgICAgIC8qIFRyeSB0byBhdG9taWNhbGx5IHNldCB0aGUgSU5JVElBTElaSU5HIGZsYWcuCisgICAgICAgICAqIFRoaXMgcmVxdWlyZXMgYSBjbXB4Y2hnIGxvb3AsIGFuZCB3ZSBtYXkgbmVlZAorICAgICAgICAgKiB0byBleGl0IHByZW1hdHVyZWx5IGlmIHdlIGRldGVjdCB0aGF0CisgICAgICAgICAqIENPTVBMRVRFRCBpcyBub3cgc2V0LgorICAgICAgICAgKi8KKyAgICAgICAgaW50MzJfdCAgb2xkdmFsLCBuZXd2YWw7CisKKyAgICAgICAgZG8geworICAgICAgICAgICAgb2xkdmFsID0gKm9jcHRyOworICAgICAgICAgICAgaWYgKChvbGR2YWwgJiBPTkNFX0NPTVBMRVRFRCkgIT0gMCkKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgbmV3dmFsID0gb2xkdmFsIHwgT05DRV9JTklUSUFMSVpJTkc7CisgICAgICAgIH0gd2hpbGUgKF9fYmlvbmljX2NtcHhjaGcob2xkdmFsLCBuZXd2YWwsIG9jcHRyKSAhPSAwKTsKKworICAgICAgICBpZiAoKG9sZHZhbCAmIE9OQ0VfQ09NUExFVEVEKSAhPSAwKSB7CisgICAgICAgICAgICAvKiBXZSBkZXRlY3RlZCB0aGF0IENPTVBMRVRFRCB3YXMgc2V0IHdoaWxlIGluIG91ciBsb29wICovCiAgICAgICAgICAgICBBTkRST0lEX01FTUJBUl9GVUxMKCk7Ci0gICAgICAgICAgICAqb2NwdHIgPSB+UFRIUkVBRF9PTkNFX0lOSVQ7CisgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgfQotICAgICAgICBwdGhyZWFkX211dGV4X3VubG9jayggJm9uY2VfbG9jayApOworCisgICAgICAgIGlmICgob2xkdmFsICYgT05DRV9JTklUSUFMSVpJTkcpID09IDApIHsKKyAgICAgICAgICAgIC8qIFdlIGdvdCB0aGVyZSBmaXJzdCwgd2UgY2FuIGp1bXAgb3V0IG9mIHRoZSBsb29wIHRvCisgICAgICAgICAgICAgKiBoYW5kbGUgdGhlIGluaXRpYWxpemF0aW9uICovCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIC8qIEFub3RoZXIgdGhyZWFkIGlzIHJ1bm5pbmcgdGhlIGluaXRpYWxpemF0aW9uIGFuZCBoYXNuJ3QgY29tcGxldGVkCisgICAgICAgICAqIHlldCwgc28gd2FpdCBmb3IgaXQsIHRoZW4gdHJ5IGFnYWluLiAqLworICAgICAgICBfX2Z1dGV4X3dhaXRfZXgob2NwdHIsIDAsIG9sZHZhbCwgTlVMTCk7CiAgICAgfQorCisgICAgLyogY2FsbCB0aGUgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24uICovCisgICAgKCppbml0X3JvdXRpbmUpKCk7CisKKyAgICAvKiBEbyBhIHN0b3JlX3JlbGVhc2UgaW5kaWNhdGluZyB0aGF0IGluaXRpYWxpemF0aW9uIGlzIGNvbXBsZXRlICovCisgICAgQU5EUk9JRF9NRU1CQVJfRlVMTCgpOworICAgICpvY3B0ciA9IE9OQ0VfQ09NUExFVEVEOworCisgICAgLyogV2FrZSB1cCBhbnkgd2FpdGVycywgaWYgYW55ICovCisgICAgX19mdXRleF93YWtlX2V4KG9jcHRyLCAwLCBJTlRfTUFYKTsKKwogICAgIHJldHVybiAwOwogfQogCi0vKiBUaGlzIHZhbHVlIGlzIG5vdCBleHBvcnRlZCBieSBrZXJuZWwgaGVhZGVycywgc28gaGFyZGNvZGUgaXQgaGVyZSAqLwotI2RlZmluZSBNQVhfVEFTS19DT01NX0xFTgkxNgotI2RlZmluZSBUQVNLX0NPTU1fRk1UIAkJIi9wcm9jL3NlbGYvdGFzay8ldS9jb21tIgotCi1pbnQgcHRocmVhZF9zZXRuYW1lX25wKHB0aHJlYWRfdCB0aGlkLCBjb25zdCBjaGFyICp0aG5hbWUpCi17Ci0gICAgc2l6ZV90IHRobmFtZV9sZW47Ci0gICAgaW50IHNhdmVkX2Vycm5vLCByZXQ7Ci0KLSAgICBpZiAodGhpZCA9PSAwIHx8IHRobmFtZSA9PSBOVUxMKQotICAgICAgICByZXR1cm4gRUlOVkFMOwotCi0gICAgdGhuYW1lX2xlbiA9IHN0cmxlbih0aG5hbWUpOwotICAgIGlmICh0aG5hbWVfbGVuID49IE1BWF9UQVNLX0NPTU1fTEVOKQotICAgICAgICByZXR1cm4gRVJBTkdFOwotCi0gICAgc2F2ZWRfZXJybm8gPSBlcnJubzsKLSAgICBpZiAodGhpZCA9PSBwdGhyZWFkX3NlbGYoKSkKLSAgICB7Ci0gICAgICAgIHJldCA9IHByY3RsKFBSX1NFVF9OQU1FLCAodW5zaWduZWQgbG9uZyl0aG5hbWUsIDAsIDAsIDApID8gZXJybm8gOiAwOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICAvKiBIYXZlIHRvIGNoYW5nZSBhbm90aGVyIHRocmVhZCdzIG5hbWUgKi8KLSAgICAgICAgcHRocmVhZF9pbnRlcm5hbF90ICp0aHJlYWQgPSAocHRocmVhZF9pbnRlcm5hbF90ICopdGhpZDsKLSAgICAgICAgY2hhciBjb21tX25hbWVbc2l6ZW9mKFRBU0tfQ09NTV9GTVQpICsgOF07Ci0gICAgICAgIHNzaXplX3QgbjsKLSAgICAgICAgaW50IGZkOwotCi0gICAgICAgIHNucHJpbnRmKGNvbW1fbmFtZSwgc2l6ZW9mKGNvbW1fbmFtZSksIFRBU0tfQ09NTV9GTVQsICh1bnNpZ25lZCBpbnQpdGhyZWFkLT5rZXJuZWxfaWQpOwotICAgICAgICBmZCA9IG9wZW4oY29tbV9uYW1lLCBPX1JEV1IpOwotICAgICAgICBpZiAoZmQgPT0gLTEpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldCA9IGVycm5vOwotICAgICAgICAgICAgZ290byBleGl0OwotICAgICAgICB9Ci0gICAgICAgIG4gPSBURU1QX0ZBSUxVUkVfUkVUUlkod3JpdGUoZmQsIHRobmFtZSwgdGhuYW1lX2xlbikpOwotICAgICAgICBjbG9zZShmZCk7Ci0KLSAgICAgICAgaWYgKG4gPCAwKQotICAgICAgICAgICAgcmV0ID0gZXJybm87Ci0gICAgICAgIGVsc2UgaWYgKChzaXplX3QpbiAhPSB0aG5hbWVfbGVuKQotICAgICAgICAgICAgcmV0ID0gRUlPOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXQgPSAwOwotICAgIH0KLWV4aXQ6Ci0gICAgZXJybm8gPSBzYXZlZF9lcnJubzsKLSAgICByZXR1cm4gcmV0OworcGlkX3QgX19wdGhyZWFkX2dldHRpZChwdGhyZWFkX3QgdGhpZCkgeworICBwdGhyZWFkX2ludGVybmFsX3QqIHRocmVhZCA9IChwdGhyZWFkX2ludGVybmFsX3QqKSB0aGlkOworICByZXR1cm4gdGhyZWFkLT50aWQ7CiB9CiAKLS8qIFJldHVybiB0aGUga2VybmVsIHRocmVhZCBJRCBmb3IgYSBwdGhyZWFkLgotICogVGhpcyBpcyBvbmx5IGRlZmluZWQgZm9yIGltcGxlbWVudGF0aW9ucyB3aGVyZSBwdGhyZWFkIDwtPiBrZXJuZWwgaXMgMToxLCB3aGljaCB0aGlzIGlzLgotICogTm90IHRoZSBzYW1lIGFzIHB0aHJlYWRfZ2V0dGhyZWFkaWRfbnAsIHdoaWNoIGlzIGNvbW1vbmx5IGRlZmluZWQgdG8gYmUgb3BhcXVlLgotICogSW50ZXJuYWwsIG5vdCBhbiBOREsgQVBJLgotICovCitpbnQgX19wdGhyZWFkX3NldHRpZChwdGhyZWFkX3QgdGhpZCwgcGlkX3QgdGlkKSB7CisgIGlmICh0aGlkID09IDApIHsKKyAgICAgIHJldHVybiBFSU5WQUw7CisgIH0KIAotcGlkX3QgX19wdGhyZWFkX2dldHRpZChwdGhyZWFkX3QgdGhpZCkKLXsKLSAgICBwdGhyZWFkX2ludGVybmFsX3QqIHRocmVhZCA9IChwdGhyZWFkX2ludGVybmFsX3QqKXRoaWQ7Ci0gICAgcmV0dXJuIHRocmVhZC0+a2VybmVsX2lkOwotfQorICBwdGhyZWFkX2ludGVybmFsX3QqIHRocmVhZCA9IChwdGhyZWFkX2ludGVybmFsX3QqKSB0aGlkOworICB0aHJlYWQtPnRpZCA9IHRpZDsKIAotaW50IF9fcHRocmVhZF9zZXR0aWQocHRocmVhZF90IHRoaWQsIHBpZF90IHRpZCkKLXsKLSAgICBpZiAodGhpZCA9PSAwKQotICAgICAgICByZXR1cm4gRUlOVkFMOwotCi0gICAgcHRocmVhZF9pbnRlcm5hbF90KiB0aHJlYWQgPSAocHRocmVhZF9pbnRlcm5hbF90Kil0aGlkOwotICAgIHRocmVhZC0+a2VybmVsX2lkID0gdGlkOwotCi0gICAgcmV0dXJuIDA7CisgIHJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvcHRocmVhZF9hY2Nlc3Nvci5oIGIvbGliYy9iaW9uaWMvcHRocmVhZF9hY2Nlc3Nvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhMzIwZjYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2Jpb25pYy9wdGhyZWFkX2FjY2Vzc29yLmgKQEAgLTAsMCArMSw2NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpZm5kZWYgUFRIUkVBRF9BQ0NFU1NPUl9ICisjZGVmaW5lIFBUSFJFQURfQUNDRVNTT1JfSAorCisjaW5jbHVkZSA8cHRocmVhZC5oPgorCisjaW5jbHVkZSAicHRocmVhZF9pbnRlcm5hbC5oIgorCitjbGFzcyBwdGhyZWFkX2FjY2Vzc29yIHsKKyBwdWJsaWM6CisgIGV4cGxpY2l0IHB0aHJlYWRfYWNjZXNzb3IocHRocmVhZF90IGRlc2lyZWRfdGhyZWFkKSB7CisgICAgTG9jaygpOworICAgIGZvciAodGhyZWFkXyA9IGdUaHJlYWRMaXN0OyB0aHJlYWRfICE9IE5VTEw7IHRocmVhZF8gPSB0aHJlYWRfLT5uZXh0KSB7CisgICAgICBpZiAodGhyZWFkXyA9PSByZWludGVycHJldF9jYXN0PHB0aHJlYWRfaW50ZXJuYWxfdCo+KGRlc2lyZWRfdGhyZWFkKSkgeworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICB9CisgIH0KKworICB+cHRocmVhZF9hY2Nlc3NvcigpIHsKKyAgICBVbmxvY2soKTsKKyAgfQorCisgIHZvaWQgVW5sb2NrKCkgeworICAgIGlmIChpc19sb2NrZWRfKSB7CisgICAgICBpc19sb2NrZWRfID0gZmFsc2U7CisgICAgICB0aHJlYWRfID0gTlVMTDsKKyAgICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZnVGhyZWFkTGlzdExvY2spOworICAgIH0KKyAgfQorCisgIHB0aHJlYWRfaW50ZXJuYWxfdCYgb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gKnRocmVhZF87IH0KKyAgcHRocmVhZF9pbnRlcm5hbF90KiBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gdGhyZWFkXzsgfQorICBwdGhyZWFkX2ludGVybmFsX3QqIGdldCgpIGNvbnN0IHsgcmV0dXJuIHRocmVhZF87IH0KKworIHByaXZhdGU6CisgIHB0aHJlYWRfaW50ZXJuYWxfdCogdGhyZWFkXzsKKyAgYm9vbCBpc19sb2NrZWRfOworCisgIHZvaWQgTG9jaygpIHsKKyAgICBwdGhyZWFkX211dGV4X2xvY2soJmdUaHJlYWRMaXN0TG9jayk7CisgICAgaXNfbG9ja2VkXyA9IHRydWU7CisgIH0KKworICAvLyBEaXNhbGxvdyBjb3B5IGFuZCBhc3NpZ25tZW50LgorICBwdGhyZWFkX2FjY2Vzc29yKGNvbnN0IHB0aHJlYWRfYWNjZXNzb3ImKTsKKyAgdm9pZCBvcGVyYXRvcj0oY29uc3QgcHRocmVhZF9hY2Nlc3NvciYpOworfTsKKworI2VuZGlmIC8vIFBUSFJFQURfQUNDRVNTT1JfSApkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvcHRocmVhZF9hdHRyLmNwcCBiL2xpYmMvYmlvbmljL3B0aHJlYWRfYXR0ci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDdjNmMxMwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYmlvbmljL3B0aHJlYWRfYXR0ci5jcHAKQEAgLTAsMCArMSwxNjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHB0aHJlYWQuaD4KKworI2luY2x1ZGUgInB0aHJlYWRfaW50ZXJuYWwuaCIKKworLy8gVHJhZGl0aW9uYWxseSB3ZSBnaXZlIHRocmVhZHMgYSAxTWlCIHN0YWNrLiBXaGVuIHdlIHN0YXJ0ZWQgYWxsb2NhdGluZyBwZXItdGhyZWFkCisvLyBhbHRlcm5hdGUgc2lnbmFsIHN0YWNrcyB0byBlYXNlIGRlYnVnZ2luZyBvZiBzdGFjayBvdmVyZmxvd3MsIHdlIHN1YnRyYWN0ZWQgdGhlCisvLyBzYW1lIGFtb3VudCB3ZSB3ZXJlIHVzaW5nIHRoZXJlIGZyb20gdGhlIGRlZmF1bHQgdGhyZWFkIHN0YWNrIHNpemUuIFRoaXMgc2hvdWxkCisvLyBrZWVwIG1lbW9yeSB1c2FnZSByb3VnaGx5IGNvbnN0YW50LgorI2RlZmluZSBERUZBVUxUX1RIUkVBRF9TVEFDS19TSVpFICgoMSAqIDEwMjQgKiAxMDI0KSAtIFNJR1NUS1NaKQorCitpbnQgcHRocmVhZF9hdHRyX2luaXQocHRocmVhZF9hdHRyX3QqIGF0dHIpIHsKKyAgYXR0ci0+ZmxhZ3MgPSAwOworICBhdHRyLT5zdGFja19iYXNlID0gTlVMTDsKKyAgYXR0ci0+c3RhY2tfc2l6ZSA9IERFRkFVTFRfVEhSRUFEX1NUQUNLX1NJWkU7CisgIGF0dHItPmd1YXJkX3NpemUgPSBQQUdFX1NJWkU7CisgIGF0dHItPnNjaGVkX3BvbGljeSA9IFNDSEVEX05PUk1BTDsKKyAgYXR0ci0+c2NoZWRfcHJpb3JpdHkgPSAwOworICByZXR1cm4gMDsKK30KKworaW50IHB0aHJlYWRfYXR0cl9kZXN0cm95KHB0aHJlYWRfYXR0cl90KiBhdHRyKSB7CisgIG1lbXNldChhdHRyLCAweDQyLCBzaXplb2YocHRocmVhZF9hdHRyX3QpKTsKKyAgcmV0dXJuIDA7Cit9CisKK2ludCBwdGhyZWFkX2F0dHJfc2V0ZGV0YWNoc3RhdGUocHRocmVhZF9hdHRyX3QqIGF0dHIsIGludCBzdGF0ZSkgeworICBpZiAoc3RhdGUgPT0gUFRIUkVBRF9DUkVBVEVfREVUQUNIRUQpIHsKKyAgICBhdHRyLT5mbGFncyB8PSBQVEhSRUFEX0FUVFJfRkxBR19ERVRBQ0hFRDsKKyAgfSBlbHNlIGlmIChzdGF0ZSA9PSBQVEhSRUFEX0NSRUFURV9KT0lOQUJMRSkgeworICAgIGF0dHItPmZsYWdzICY9IH5QVEhSRUFEX0FUVFJfRkxBR19ERVRBQ0hFRDsKKyAgfSBlbHNlIHsKKyAgICByZXR1cm4gRUlOVkFMOworICB9CisgIHJldHVybiAwOworfQorCitpbnQgcHRocmVhZF9hdHRyX2dldGRldGFjaHN0YXRlKHB0aHJlYWRfYXR0cl90IGNvbnN0KiBhdHRyLCBpbnQqIHN0YXRlKSB7CisgICpzdGF0ZSA9IChhdHRyLT5mbGFncyAmIFBUSFJFQURfQVRUUl9GTEFHX0RFVEFDSEVEKSA/IFBUSFJFQURfQ1JFQVRFX0RFVEFDSEVEIDogUFRIUkVBRF9DUkVBVEVfSk9JTkFCTEU7CisgIHJldHVybiAwOworfQorCitpbnQgcHRocmVhZF9hdHRyX3NldHNjaGVkcG9saWN5KHB0aHJlYWRfYXR0cl90KiBhdHRyLCBpbnQgcG9saWN5KSB7CisgIGF0dHItPnNjaGVkX3BvbGljeSA9IHBvbGljeTsKKyAgcmV0dXJuIDA7Cit9CisKK2ludCBwdGhyZWFkX2F0dHJfZ2V0c2NoZWRwb2xpY3kocHRocmVhZF9hdHRyX3QgY29uc3QqIGF0dHIsIGludCogcG9saWN5KSB7CisgICpwb2xpY3kgPSBhdHRyLT5zY2hlZF9wb2xpY3k7CisgIHJldHVybiAwOworfQorCitpbnQgcHRocmVhZF9hdHRyX3NldHNjaGVkcGFyYW0ocHRocmVhZF9hdHRyX3QgKiBhdHRyLCBzdHJ1Y3Qgc2NoZWRfcGFyYW0gY29uc3QqIHBhcmFtKSB7CisgIGF0dHItPnNjaGVkX3ByaW9yaXR5ID0gcGFyYW0tPnNjaGVkX3ByaW9yaXR5OworICByZXR1cm4gMDsKK30KKworaW50IHB0aHJlYWRfYXR0cl9nZXRzY2hlZHBhcmFtKHB0aHJlYWRfYXR0cl90IGNvbnN0KiBhdHRyLCBzdHJ1Y3Qgc2NoZWRfcGFyYW0qIHBhcmFtKSB7CisgIHBhcmFtLT5zY2hlZF9wcmlvcml0eSA9IGF0dHItPnNjaGVkX3ByaW9yaXR5OworICByZXR1cm4gMDsKK30KKworaW50IHB0aHJlYWRfYXR0cl9zZXRzdGFja3NpemUocHRocmVhZF9hdHRyX3QqIGF0dHIsIHNpemVfdCBzdGFja19zaXplKSB7CisgIGlmIChzdGFja19zaXplIDwgUFRIUkVBRF9TVEFDS19NSU4pIHsKKyAgICByZXR1cm4gRUlOVkFMOworICB9CisgIGF0dHItPnN0YWNrX3NpemUgPSBzdGFja19zaXplOworICByZXR1cm4gMDsKK30KKworaW50IHB0aHJlYWRfYXR0cl9nZXRzdGFja3NpemUocHRocmVhZF9hdHRyX3QgY29uc3QqIGF0dHIsIHNpemVfdCogc3RhY2tfc2l6ZSkgeworICAqc3RhY2tfc2l6ZSA9IGF0dHItPnN0YWNrX3NpemU7CisgIHJldHVybiAwOworfQorCitpbnQgcHRocmVhZF9hdHRyX3NldHN0YWNrYWRkcihwdGhyZWFkX2F0dHJfdCosIHZvaWQqKSB7CisgIC8vIFRoaXMgd2FzIHJlbW92ZWQgZnJvbSBQT1NJWC4xLTIwMDgsIGFuZCBpcyBub3QgaW1wbGVtZW50ZWQgb24gYmlvbmljLgorICAvLyBOZWVkZWQgZm9yIEFCSSBjb21wYXRpYmlsaXR5IHdpdGggdGhlIE5ESy4KKyAgcmV0dXJuIEVOT1NZUzsKK30KKworaW50IHB0aHJlYWRfYXR0cl9nZXRzdGFja2FkZHIocHRocmVhZF9hdHRyX3QgY29uc3QqIGF0dHIsIHZvaWQqKiBzdGFja19hZGRyKSB7CisgIC8vIFRoaXMgd2FzIHJlbW92ZWQgZnJvbSBQT1NJWC4xLTIwMDguCisgIC8vIE5lZWRlZCBmb3IgQUJJIGNvbXBhdGliaWxpdHkgd2l0aCB0aGUgTkRLLgorICAqc3RhY2tfYWRkciA9IChjaGFyKilhdHRyLT5zdGFja19iYXNlICsgYXR0ci0+c3RhY2tfc2l6ZTsKKyAgcmV0dXJuIDA7Cit9CisKK2ludCBwdGhyZWFkX2F0dHJfc2V0c3RhY2socHRocmVhZF9hdHRyX3QqIGF0dHIsIHZvaWQqIHN0YWNrX2Jhc2UsIHNpemVfdCBzdGFja19zaXplKSB7CisgIGlmICgoc3RhY2tfc2l6ZSAmIChQQUdFX1NJWkUgLSAxKSB8fCBzdGFja19zaXplIDwgUFRIUkVBRF9TVEFDS19NSU4pKSB7CisgICAgcmV0dXJuIEVJTlZBTDsKKyAgfQorICBpZiAoKHVpbnQzMl90KXN0YWNrX2Jhc2UgJiAoUEFHRV9TSVpFIC0gMSkpIHsKKyAgICByZXR1cm4gRUlOVkFMOworICB9CisgIGF0dHItPnN0YWNrX2Jhc2UgPSBzdGFja19iYXNlOworICBhdHRyLT5zdGFja19zaXplID0gc3RhY2tfc2l6ZTsKKyAgcmV0dXJuIDA7Cit9CisKK2ludCBwdGhyZWFkX2F0dHJfZ2V0c3RhY2socHRocmVhZF9hdHRyX3QgY29uc3QqIGF0dHIsIHZvaWQqKiBzdGFja19iYXNlLCBzaXplX3QqIHN0YWNrX3NpemUpIHsKKyAgKnN0YWNrX2Jhc2UgPSBhdHRyLT5zdGFja19iYXNlOworICAqc3RhY2tfc2l6ZSA9IGF0dHItPnN0YWNrX3NpemU7CisgIHJldHVybiAwOworfQorCitpbnQgcHRocmVhZF9hdHRyX3NldGd1YXJkc2l6ZShwdGhyZWFkX2F0dHJfdCogYXR0ciwgc2l6ZV90IGd1YXJkX3NpemUpIHsKKyAgYXR0ci0+Z3VhcmRfc2l6ZSA9IGd1YXJkX3NpemU7CisgIHJldHVybiAwOworfQorCitpbnQgcHRocmVhZF9hdHRyX2dldGd1YXJkc2l6ZShwdGhyZWFkX2F0dHJfdCBjb25zdCogYXR0ciwgc2l6ZV90KiBndWFyZF9zaXplKSB7CisgICpndWFyZF9zaXplID0gYXR0ci0+Z3VhcmRfc2l6ZTsKKyAgcmV0dXJuIDA7Cit9CisKK2ludCBwdGhyZWFkX2dldGF0dHJfbnAocHRocmVhZF90IHRoaWQsIHB0aHJlYWRfYXR0cl90KiBhdHRyKSB7CisgIHB0aHJlYWRfaW50ZXJuYWxfdCogdGhyZWFkID0gKHB0aHJlYWRfaW50ZXJuYWxfdCopIHRoaWQ7CisgICphdHRyID0gdGhyZWFkLT5hdHRyOworICByZXR1cm4gMDsKK30KKworaW50IHB0aHJlYWRfYXR0cl9zZXRzY29wZShwdGhyZWFkX2F0dHJfdCogLCBpbnQgc2NvcGUpIHsKKyAgaWYgKHNjb3BlID09IFBUSFJFQURfU0NPUEVfU1lTVEVNKSB7CisgICAgcmV0dXJuIDA7CisgIH0KKyAgaWYgKHNjb3BlID09IFBUSFJFQURfU0NPUEVfUFJPQ0VTUykgeworICAgIHJldHVybiBFTk9UU1VQOworICB9CisgIHJldHVybiBFSU5WQUw7Cit9CisKK2ludCBwdGhyZWFkX2F0dHJfZ2V0c2NvcGUocHRocmVhZF9hdHRyX3QgY29uc3QqKSB7CisgIHJldHVybiBQVEhSRUFEX1NDT1BFX1NZU1RFTTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL3B0aHJlYWRfY3JlYXRlLmNwcCBiL2xpYmMvYmlvbmljL3B0aHJlYWRfY3JlYXRlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MzY5NWQzCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9iaW9uaWMvcHRocmVhZF9jcmVhdGUuY3BwCkBAIC0wLDAgKzEsMjU2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxwdGhyZWFkLmg+CisKKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN5cy9tbWFuLmg+CisKKyNpbmNsdWRlICJwdGhyZWFkX2ludGVybmFsLmgiCisKKyNpbmNsdWRlICJwcml2YXRlL2Jpb25pY19zc3AuaCIKKyNpbmNsdWRlICJwcml2YXRlL2Jpb25pY190bHMuaCIKKyNpbmNsdWRlICJwcml2YXRlL2xpYmNfbG9nZ2luZy5oIgorI2luY2x1ZGUgInByaXZhdGUvdGhyZWFkX3ByaXZhdGUuaCIKKyNpbmNsdWRlICJwcml2YXRlL0Vycm5vUmVzdG9yZXIuaCIKKyNpbmNsdWRlICJwcml2YXRlL1Njb3BlZFB0aHJlYWRNdXRleExvY2tlci5oIgorCitleHRlcm4gIkMiIGludCBfX3B0aHJlYWRfY2xvbmUodm9pZCogKCpmbikodm9pZCopLCB2b2lkKiBjaGlsZF9zdGFjaywgaW50IGZsYWdzLCB2b2lkKiBhcmcpOworCisjaWZkZWYgX19pMzg2X18KKyNkZWZpbmUgQVRUUklCVVRFUyBfX2F0dHJpYnV0ZV9fKChub2lubGluZSkpIF9fYXR0cmlidXRlX18oKGZhc3RjYWxsKSkKKyNlbHNlCisjZGVmaW5lIEFUVFJJQlVURVMgX19hdHRyaWJ1dGVfXygobm9pbmxpbmUpKQorI2VuZGlmCisKK2V4dGVybiAiQyIgdm9pZCBBVFRSSUJVVEVTIF90aHJlYWRfY3JlYXRlZF9ob29rKHBpZF90IHRocmVhZF9pZCk7CisKK3N0YXRpYyBjb25zdCBpbnQga1B0aHJlYWRJbml0RmFpbGVkID0gMTsKKworc3RhdGljIHB0aHJlYWRfbXV0ZXhfdCBnUHRocmVhZFN0YWNrQ3JlYXRpb25Mb2NrID0gUFRIUkVBRF9NVVRFWF9JTklUSUFMSVpFUjsKKworc3RhdGljIHB0aHJlYWRfbXV0ZXhfdCBnRGVidWdnZXJOb3RpZmljYXRpb25Mb2NrID0gUFRIUkVBRF9NVVRFWF9JTklUSUFMSVpFUjsKKwordm9pZCAgX19pbml0X3RscyhwdGhyZWFkX2ludGVybmFsX3QqIHRocmVhZCkgeworICAvLyBaZXJvLWluaXRpYWxpemUgYWxsIHRoZSBzbG90cy4KKyAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBCSU9OSUNfVExTX1NMT1RTOyArK2kpIHsKKyAgICB0aHJlYWQtPnRsc1tpXSA9IE5VTEw7CisgIH0KKworICAvLyBTbG90IDAgbXVzdCBwb2ludCB0byBpdHNlbGYuIFRoZSB4ODYgTGludXgga2VybmVsIHJlYWRzIHRoZSBUTFMgZnJvbSAlZnM6MC4KKyAgdGhyZWFkLT50bHNbVExTX1NMT1RfU0VMRl0gPSB0aHJlYWQtPnRsczsKKyAgdGhyZWFkLT50bHNbVExTX1NMT1RfVEhSRUFEX0lEXSA9IHRocmVhZDsKKyAgLy8gR0NDIGxvb2tzIGluIHRoZSBUTFMgZm9yIHRoZSBzdGFjayBndWFyZCBvbiB4ODYsIHNvIGNvcHkgaXQgdGhlcmUgZnJvbSBvdXIgZ2xvYmFsLgorICB0aHJlYWQtPnRsc1tUTFNfU0xPVF9TVEFDS19HVUFSRF0gPSAodm9pZCopIF9fc3RhY2tfY2hrX2d1YXJkOworCisgIF9fc2V0X3Rscyh0aHJlYWQtPnRscyk7CisKKyAgLy8gQ3JlYXRlIGFuZCBzZXQgYW4gYWx0ZXJuYXRlIHNpZ25hbCBzdGFjay4KKyAgLy8gVGhpcyBtdXN0IGhhcHBlbiBhZnRlciBfX3NldF90bHMsIGluIGNhc2UgYSBzeXN0ZW0gY2FsbCBmYWlscyBhbmQgdHJpZXMgdG8gc2V0IGVycm5vLgorICBzdGFja190IHNzOworICBzcy5zc19zcCA9IG1tYXAoTlVMTCwgU0lHU1RLU1osIFBST1RfUkVBRHxQUk9UX1dSSVRFLCBNQVBfUFJJVkFURXxNQVBfQU5PTllNT1VTLCAwLCAwKTsKKyAgaWYgKHNzLnNzX3NwICE9IE1BUF9GQUlMRUQpIHsKKyAgICBzcy5zc19zaXplID0gU0lHU1RLU1o7CisgICAgc3Muc3NfZmxhZ3MgPSAwOworICAgIHNpZ2FsdHN0YWNrKCZzcywgTlVMTCk7CisgICAgdGhyZWFkLT5hbHRlcm5hdGVfc2lnbmFsX3N0YWNrID0gc3Muc3Nfc3A7CisgIH0KK30KKworLy8gVGhpcyB0cmFtcG9saW5lIGlzIGNhbGxlZCBmcm9tIHRoZSBhc3NlbWJseSBfcHRocmVhZF9jbG9uZSBmdW5jdGlvbi4KKy8vIE91ciAndGxzJyBhbmQgX19wdGhyZWFkX2Nsb25lJ3MgJ2NoaWxkX3N0YWNrJyBhcmUgb25lIGFuZCB0aGUgc2FtZSwganVzdCBncm93aW5nIGluCisvLyBvcHBvc2l0ZSBkaXJlY3Rpb25zLgorZXh0ZXJuICJDIiB2b2lkIF9fdGhyZWFkX2VudHJ5KHZvaWQqICgqZnVuYykodm9pZCopLCB2b2lkKiBhcmcsIHZvaWQqKiB0bHMpIHsKKyAgLy8gV2FpdCBmb3Igb3VyIGNyZWF0aW5nIHRocmVhZCB0byByZWxlYXNlIHVzLiBUaGlzIGxldHMgaXQgaGF2ZSB0aW1lIHRvCisgIC8vIG5vdGlmeSBnZGIgYWJvdXQgdGhpcyB0aHJlYWQgYmVmb3JlIHdlIHN0YXJ0IGRvaW5nIGFueXRoaW5nLgorICAvLyBUaGlzIGFsc28gcHJvdmlkZXMgdGhlIG1lbW9yeSBiYXJyaWVyIG5lZWRlZCB0byBlbnN1cmUgdGhhdCBhbGwgbWVtb3J5CisgIC8vIGFjY2Vzc2VzIHByZXZpb3VzbHkgbWFkZSBieSB0aGUgY3JlYXRpbmcgdGhyZWFkIGFyZSB2aXNpYmxlIHRvIHVzLgorICBwdGhyZWFkX211dGV4X3QqIHN0YXJ0X211dGV4ID0gKHB0aHJlYWRfbXV0ZXhfdCopICZ0bHNbVExTX1NMT1RfU0VMRl07CisgIHB0aHJlYWRfbXV0ZXhfbG9jayhzdGFydF9tdXRleCk7CisgIHB0aHJlYWRfbXV0ZXhfZGVzdHJveShzdGFydF9tdXRleCk7CisKKyAgcHRocmVhZF9pbnRlcm5hbF90KiB0aHJlYWQgPSAocHRocmVhZF9pbnRlcm5hbF90KikgdGxzW1RMU19TTE9UX1RIUkVBRF9JRF07CisgIHRocmVhZC0+dGxzID0gdGxzOworICBfX2luaXRfdGxzKHRocmVhZCk7CisKKyAgaWYgKCh0aHJlYWQtPmludGVybmFsX2ZsYWdzICYga1B0aHJlYWRJbml0RmFpbGVkKSAhPSAwKSB7CisgICAgcHRocmVhZF9leGl0KE5VTEwpOworICB9CisKKyAgdm9pZCogcmVzdWx0ID0gZnVuYyhhcmcpOworICBwdGhyZWFkX2V4aXQocmVzdWx0KTsKK30KKworX19MSUJDX0FCSV9QUklWQVRFX18KK2ludCBfaW5pdF90aHJlYWQocHRocmVhZF9pbnRlcm5hbF90KiB0aHJlYWQsIGJvb2wgYWRkX3RvX3RocmVhZF9saXN0KSB7CisgIGludCBlcnJvciA9IDA7CisKKyAgLy8gU2V0IHRoZSBzY2hlZHVsaW5nIHBvbGljeS9wcmlvcml0eSBvZiB0aGUgdGhyZWFkLgorICBpZiAodGhyZWFkLT5hdHRyLnNjaGVkX3BvbGljeSAhPSBTQ0hFRF9OT1JNQUwpIHsKKyAgICBzdHJ1Y3Qgc2NoZWRfcGFyYW0gcGFyYW07CisgICAgcGFyYW0uc2NoZWRfcHJpb3JpdHkgPSB0aHJlYWQtPmF0dHIuc2NoZWRfcHJpb3JpdHk7CisgICAgaWYgKHNjaGVkX3NldHNjaGVkdWxlcih0aHJlYWQtPnRpZCwgdGhyZWFkLT5hdHRyLnNjaGVkX3BvbGljeSwgJnBhcmFtKSA9PSAtMSkgeworICAgICAgLy8gRm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHJlYXNvbnMsIHdlIGp1c3Qgd2FybiBhYm91dCBmYWlsdXJlcyBoZXJlLgorICAgICAgLy8gZXJyb3IgPSBlcnJubzsKKyAgICAgIF9fbGliY19mb3JtYXRfbG9nKEFORFJPSURfTE9HX1dBUk4sICJsaWJjIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJwdGhyZWFkX2NyZWF0ZSBzY2hlZF9zZXRzY2hlZHVsZXIgY2FsbCBmYWlsZWQ6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICB9CisgIH0KKworICBwdGhyZWFkX2NvbmRfaW5pdCgmdGhyZWFkLT5qb2luX2NvbmQsIE5VTEwpOworICB0aHJlYWQtPmNsZWFudXBfc3RhY2sgPSBOVUxMOworCisgIGlmIChhZGRfdG9fdGhyZWFkX2xpc3QpIHsKKyAgICBfcHRocmVhZF9pbnRlcm5hbF9hZGQodGhyZWFkKTsKKyAgfQorCisgIHJldHVybiBlcnJvcjsKK30KKworc3RhdGljIHZvaWQqIF9fY3JlYXRlX3RocmVhZF9zdGFjayhwdGhyZWFkX2ludGVybmFsX3QqIHRocmVhZCkgeworICBTY29wZWRQdGhyZWFkTXV0ZXhMb2NrZXIgbG9jaygmZ1B0aHJlYWRTdGFja0NyZWF0aW9uTG9jayk7CisKKyAgLy8gQ3JlYXRlIGEgbmV3IHByaXZhdGUgYW5vbnltb3VzIG1hcC4KKyAgaW50IHByb3QgPSBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFOworICBpbnQgZmxhZ3MgPSBNQVBfUFJJVkFURSB8IE1BUF9BTk9OWU1PVVMgfCBNQVBfTk9SRVNFUlZFOworICB2b2lkKiBzdGFjayA9IG1tYXAoTlVMTCwgdGhyZWFkLT5hdHRyLnN0YWNrX3NpemUsIHByb3QsIGZsYWdzLCAtMSwgMCk7CisgIGlmIChzdGFjayA9PSBNQVBfRkFJTEVEKSB7CisgICAgX19saWJjX2Zvcm1hdF9sb2coQU5EUk9JRF9MT0dfV0FSTiwKKyAgICAgICAgICAgICAgICAgICAgICAibGliYyIsCisgICAgICAgICAgICAgICAgICAgICAgInB0aHJlYWRfY3JlYXRlIGZhaWxlZDogY291bGRuJ3QgYWxsb2NhdGUgJXpkLWJ5dGUgc3RhY2s6ICVzIiwKKyAgICAgICAgICAgICAgICAgICAgICB0aHJlYWQtPmF0dHIuc3RhY2tfc2l6ZSwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICByZXR1cm4gTlVMTDsKKyAgfQorCisgIC8vIFNldCB0aGUgZ3VhcmQgcmVnaW9uIGF0IHRoZSBlbmQgb2YgdGhlIHN0YWNrIHRvIFBST1RfTk9ORS4KKyAgaWYgKG1wcm90ZWN0KHN0YWNrLCB0aHJlYWQtPmF0dHIuZ3VhcmRfc2l6ZSwgUFJPVF9OT05FKSA9PSAtMSkgeworICAgIF9fbGliY19mb3JtYXRfbG9nKEFORFJPSURfTE9HX1dBUk4sICJsaWJjIiwKKyAgICAgICAgICAgICAgICAgICAgICAicHRocmVhZF9jcmVhdGUgZmFpbGVkOiBjb3VsZG4ndCBtcHJvdGVjdCBQUk9UX05PTkUgJXpkLWJ5dGUgc3RhY2sgZ3VhcmQgcmVnaW9uOiAlcyIsCisgICAgICAgICAgICAgICAgICAgICAgdGhyZWFkLT5hdHRyLmd1YXJkX3NpemUsIHN0cmVycm9yKGVycm5vKSk7CisgICAgbXVubWFwKHN0YWNrLCB0aHJlYWQtPmF0dHIuc3RhY2tfc2l6ZSk7CisgICAgcmV0dXJuIE5VTEw7CisgIH0KKworICByZXR1cm4gc3RhY2s7Cit9CisKK2ludCBwdGhyZWFkX2NyZWF0ZShwdGhyZWFkX3QqIHRocmVhZF9vdXQsIHB0aHJlYWRfYXR0cl90IGNvbnN0KiBhdHRyLAorICAgICAgICAgICAgICAgICAgIHZvaWQqICgqc3RhcnRfcm91dGluZSkodm9pZCopLCB2b2lkKiBhcmcpIHsKKyAgRXJybm9SZXN0b3JlciBlcnJub19yZXN0b3JlcjsKKworICAvLyBJbmZvcm0gdGhlIHJlc3Qgb2YgdGhlIEMgbGlicmFyeSB0aGF0IGF0IGxlYXN0IG9uZSB0aHJlYWQKKyAgLy8gd2FzIGNyZWF0ZWQuIFRoaXMgd2lsbCBlbmZvcmNlIGNlcnRhaW4gZnVuY3Rpb25zIHRvIGFjcXVpcmUvcmVsZWFzZQorICAvLyBsb2NrcyAoZS5nLiBhdGV4aXQoKSkgdG8gcHJvdGVjdCBzaGFyZWQgZ2xvYmFsIHN0cnVjdHVyZXMuCisgIC8vIFRoaXMgd29ya3MgYmVjYXVzZSBwdGhyZWFkX2NyZWF0ZSgpIGlzIG5vdCBjYWxsZWQgYnkgdGhlIEMgbGlicmFyeQorICAvLyBpbml0aWFsaXphdGlvbiByb3V0aW5lIHRoYXQgc2V0cyB1cCB0aGUgbWFpbiB0aHJlYWQncyBkYXRhIHN0cnVjdHVyZXMuCisgIF9faXN0aHJlYWRlZCA9IDE7CisKKyAgcHRocmVhZF9pbnRlcm5hbF90KiB0aHJlYWQgPSByZWludGVycHJldF9jYXN0PHB0aHJlYWRfaW50ZXJuYWxfdCo+KGNhbGxvYyhzaXplb2YoKnRocmVhZCksIDEpKTsKKyAgaWYgKHRocmVhZCA9PSBOVUxMKSB7CisgICAgX19saWJjX2Zvcm1hdF9sb2coQU5EUk9JRF9MT0dfV0FSTiwgImxpYmMiLCAicHRocmVhZF9jcmVhdGUgZmFpbGVkOiBjb3VsZG4ndCBhbGxvY2F0ZSB0aHJlYWQiKTsKKyAgICByZXR1cm4gRUFHQUlOOworICB9CisgIHRocmVhZC0+YWxsb2NhdGVkX29uX2hlYXAgPSB0cnVlOworCisgIGlmIChhdHRyID09IE5VTEwpIHsKKyAgICBwdGhyZWFkX2F0dHJfaW5pdCgmdGhyZWFkLT5hdHRyKTsKKyAgfSBlbHNlIHsKKyAgICB0aHJlYWQtPmF0dHIgPSAqYXR0cjsKKyAgICBhdHRyID0gTlVMTDsgLy8gUHJldmVudCBtaXN1c2UgYmVsb3cuCisgIH0KKworICAvLyBNYWtlIHN1cmUgdGhlIHN0YWNrIHNpemUgYW5kIGd1YXJkIHNpemUgYXJlIG11bHRpcGxlcyBvZiBQQUdFX1NJWkUuCisgIHRocmVhZC0+YXR0ci5zdGFja19zaXplID0gKHRocmVhZC0+YXR0ci5zdGFja19zaXplICsgKFBBR0VfU0laRS0xKSkgJiB+KFBBR0VfU0laRS0xKTsKKyAgdGhyZWFkLT5hdHRyLmd1YXJkX3NpemUgPSAodGhyZWFkLT5hdHRyLmd1YXJkX3NpemUgKyAoUEFHRV9TSVpFLTEpKSAmIH4oUEFHRV9TSVpFLTEpOworCisgIGlmICh0aHJlYWQtPmF0dHIuc3RhY2tfYmFzZSA9PSBOVUxMKSB7CisgICAgLy8gVGhlIGNhbGxlciBkaWRuJ3QgcHJvdmlkZSBhIHN0YWNrLCBzbyBhbGxvY2F0ZSBvbmUuCisgICAgdGhyZWFkLT5hdHRyLnN0YWNrX2Jhc2UgPSBfX2NyZWF0ZV90aHJlYWRfc3RhY2sodGhyZWFkKTsKKyAgICBpZiAodGhyZWFkLT5hdHRyLnN0YWNrX2Jhc2UgPT0gTlVMTCkgeworICAgICAgZnJlZSh0aHJlYWQpOworICAgICAgcmV0dXJuIEVBR0FJTjsKKyAgICB9CisgIH0gZWxzZSB7CisgICAgLy8gVGhlIGNhbGxlciBkaWQgcHJvdmlkZSBhIHN0YWNrLCBzbyByZW1lbWJlciB3ZSdyZSBub3Qgc3VwcG9zZWQgdG8gZnJlZSBpdC4KKyAgICB0aHJlYWQtPmF0dHIuZmxhZ3MgfD0gUFRIUkVBRF9BVFRSX0ZMQUdfVVNFUl9TVEFDSzsKKyAgfQorCisgIC8vIE1ha2Ugcm9vbSBmb3IgdGhlIFRMUyBhcmVhLgorICAvLyBUaGUgY2hpbGQgc3RhY2sgaXMgdGhlIHNhbWUgYWRkcmVzcywganVzdCBncm93aW5nIGluIHRoZSBvcHBvc2l0ZSBkaXJlY3Rpb24uCisgIC8vIEF0IG9mZnNldHMgPj0gMCwgd2UgaGF2ZSB0aGUgVExTIHNsb3RzLgorICAvLyBBdCBvZmZzZXRzIDwgMCwgd2UgaGF2ZSB0aGUgY2hpbGQgc3RhY2suCisgIHZvaWQqKiB0bHMgPSAodm9pZCoqKSgodWludDhfdCopKHRocmVhZC0+YXR0ci5zdGFja19iYXNlKSArIHRocmVhZC0+YXR0ci5zdGFja19zaXplIC0gQklPTklDX1RMU19TTE9UUyAqIHNpemVvZih2b2lkKikpOworICB2b2lkKiBjaGlsZF9zdGFjayA9IHRsczsKKworICAvLyBDcmVhdGUgYSBtdXRleCBmb3IgdGhlIHRocmVhZCBpbiBUTFNfU0xPVF9TRUxGIHRvIHdhaXQgb24gb25jZSBpdCBzdGFydHMgc28gd2UgY2FuIGtlZXAKKyAgLy8gaXQgZnJvbSBkb2luZyBhbnl0aGluZyB1bnRpbCBhZnRlciB3ZSBub3RpZnkgdGhlIGRlYnVnZ2VyIGFib3V0IGl0CisgIC8vCisgIC8vIFRoaXMgYWxzbyBwcm92aWRlcyB0aGUgbWVtb3J5IGJhcnJpZXIgd2UgbmVlZCB0byBlbnN1cmUgdGhhdCBhbGwKKyAgLy8gbWVtb3J5IGFjY2Vzc2VzIHByZXZpb3VzbHkgcGVyZm9ybWVkIGJ5IHRoaXMgdGhyZWFkIGFyZSB2aXNpYmxlIHRvCisgIC8vIHRoZSBuZXcgdGhyZWFkLgorICBwdGhyZWFkX211dGV4X3QqIHN0YXJ0X211dGV4ID0gKHB0aHJlYWRfbXV0ZXhfdCopICZ0bHNbVExTX1NMT1RfU0VMRl07CisgIHB0aHJlYWRfbXV0ZXhfaW5pdChzdGFydF9tdXRleCwgTlVMTCk7CisgIFNjb3BlZFB0aHJlYWRNdXRleExvY2tlciBzdGFydF9sb2NrZXIoc3RhcnRfbXV0ZXgpOworCisgIHRsc1tUTFNfU0xPVF9USFJFQURfSURdID0gdGhyZWFkOworCisgIGludCBmbGFncyA9IENMT05FX0ZJTEVTIHwgQ0xPTkVfRlMgfCBDTE9ORV9WTSB8IENMT05FX1NJR0hBTkQgfCBDTE9ORV9USFJFQUQgfCBDTE9ORV9TWVNWU0VNOworCisgIGludCB0aWQgPSBfX3B0aHJlYWRfY2xvbmUoc3RhcnRfcm91dGluZSwgY2hpbGRfc3RhY2ssIGZsYWdzLCBhcmcpOworICBpZiAodGlkIDwgMCkgeworICAgIGludCBjbG9uZV9lcnJubyA9IGVycm5vOworICAgIGlmICgodGhyZWFkLT5hdHRyLmZsYWdzICYgUFRIUkVBRF9BVFRSX0ZMQUdfVVNFUl9TVEFDSykgPT0gMCkgeworICAgICAgbXVubWFwKHRocmVhZC0+YXR0ci5zdGFja19iYXNlLCB0aHJlYWQtPmF0dHIuc3RhY2tfc2l6ZSk7CisgICAgfQorICAgIGZyZWUodGhyZWFkKTsKKyAgICBfX2xpYmNfZm9ybWF0X2xvZyhBTkRST0lEX0xPR19XQVJOLCAibGliYyIsICJwdGhyZWFkX2NyZWF0ZSBmYWlsZWQ6IGNsb25lIGZhaWxlZDogJXMiLCBzdHJlcnJvcihlcnJubykpOworICAgIHJldHVybiBjbG9uZV9lcnJubzsKKyAgfQorCisgIHRocmVhZC0+dGlkID0gdGlkOworCisgIGludCBpbml0X2Vycm5vID0gX2luaXRfdGhyZWFkKHRocmVhZCwgdHJ1ZSk7CisgIGlmIChpbml0X2Vycm5vICE9IDApIHsKKyAgICAvLyBNYXJrIHRoZSB0aHJlYWQgZGV0YWNoZWQgYW5kIGxldCBpdHMgX190aHJlYWRfZW50cnkgcnVuIHRvCisgICAgLy8gY29tcGxldGlvbi4gKEl0J2xsIGp1c3QgZXhpdCBpbW1lZGlhdGVseSwgY2xlYW5pbmcgdXAgaXRzIHJlc291cmNlcy4pCisgICAgdGhyZWFkLT5pbnRlcm5hbF9mbGFncyB8PSBrUHRocmVhZEluaXRGYWlsZWQ7CisgICAgdGhyZWFkLT5hdHRyLmZsYWdzIHw9IFBUSFJFQURfQVRUUl9GTEFHX0RFVEFDSEVEOworICAgIHJldHVybiBpbml0X2Vycm5vOworICB9CisKKyAgLy8gTm90aWZ5IGFueSBkZWJ1Z2dlcnMgYWJvdXQgdGhlIG5ldyB0aHJlYWQuCisgIHsKKyAgICBTY29wZWRQdGhyZWFkTXV0ZXhMb2NrZXIgZGVidWdnZXJfbG9ja2VyKCZnRGVidWdnZXJOb3RpZmljYXRpb25Mb2NrKTsKKyAgICBfdGhyZWFkX2NyZWF0ZWRfaG9vayh0aHJlYWQtPnRpZCk7CisgIH0KKworICAvLyBQdWJsaXNoIHRoZSBwdGhyZWFkX3QgYW5kIGxldCB0aGUgdGhyZWFkIHJ1bi4KKyAgKnRocmVhZF9vdXQgPSAocHRocmVhZF90KSB0aHJlYWQ7CisKKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9wdGhyZWFkX2RlYnVnLmNwcCBiL2xpYmMvYmlvbmljL3B0aHJlYWRfZGVidWcuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0YzIzZGUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2Jpb25pYy9wdGhyZWFkX2RlYnVnLmNwcApAQCAtMCwwICsxLDcxNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL2F0b21pY3MuaD4KKyNpbmNsdWRlIDxzeXMvc3lzdGVtX3Byb3BlcnRpZXMuaD4KKyNpbmNsdWRlIDxzeXMvbW1hbi5oPgorCisvLyNpbmNsdWRlIDxkbGZjbi5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxwdGhyZWFkLmg+CisjaW5jbHVkZSA8dW53aW5kLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKKyNpbmNsdWRlICJiaW9uaWNfdGxzLmgiCisjaW5jbHVkZSAiZGVidWdfbWFwaW5mby5oIgorI2luY2x1ZGUgImRlYnVnX3N0YWNrdHJhY2UuaCIKKyNpbmNsdWRlICJsaWJjX2xvZ2dpbmcuaCIKKworLyoKKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogICAgICBEZWFkbG9jayBwcmVkaWN0aW9uCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworLyoKK1RoZSBpZGVhIGlzIHRvIHByZWRpY3QgdGhlIHBvc3NpYmlsaXR5IG9mIGRlYWRsb2NrIGJ5IHJlY29yZGluZyB0aGUgb3JkZXIKK2luIHdoaWNoIGxvY2tzIGFyZSBhY3F1aXJlZC4gIElmIHdlIHNlZSBhbiBhdHRlbXB0IHRvIGFjcXVpcmUgYSBsb2NrCitvdXQgb2Ygb3JkZXIsIHdlIGNhbiBpZGVudGlmeSB0aGUgbG9ja3MgYW5kIG9mZmVuZGluZyBjb2RlLgorCitUbyBtYWtlIHRoaXMgd29yaywgd2UgbmVlZCB0byBrZWVwIHRyYWNrIG9mIHRoZSBsb2NrcyBoZWxkIGJ5IGVhY2ggdGhyZWFkLAorYW5kIGNyZWF0ZSBoaXN0b3J5IHRyZWVzIGZvciBlYWNoIGxvY2suICBXaGVuIGEgdGhyZWFkIHRyaWVzIHRvIGFjcXVpcmUKK2EgbmV3IGxvY2ssIHdlIHdhbGsgdGhyb3VnaCB0aGUgImhpc3RvcnkgY2hpbGRyZW4iIG9mIHRoZSBsb2NrLCBsb29raW5nCitmb3IgYSBtYXRjaCB3aXRoIGxvY2tzIHRoZSB0aHJlYWQgYWxyZWFkeSBob2xkcy4gIElmIHdlIGZpbmQgYSBtYXRjaCwKK2l0IG1lYW5zIHRoZSB0aHJlYWQgaGFzIG1hZGUgYSByZXF1ZXN0IHRoYXQgY291bGQgcmVzdWx0IGluIGEgZGVhZGxvY2suCisKK1RvIHN1cHBvcnQgcmVjdXJzaXZlIGxvY2tzLCB3ZSBhbHdheXMgYWxsb3cgcmUtbG9ja2luZyBhIGN1cnJlbnRseS1oZWxkCitsb2NrLCBhbmQgbWFpbnRhaW4gYSByZWN1cnNpb24gZGVwdGggY291bnQuCisKK0FuIEFTQ0lJLWFydCBleGFtcGxlLCB3aGVyZSBsZXR0ZXJzIHJlcHJlc2VudCBsb2NrczoKKworICAgICAgICBBCisgICAgICAgL3xcCisgICAgICAvIHwgXAorICAgICBCICB8ICBECisgICAgICBcIHwKKyAgICAgICBcfAorICAgICAgICBDCisKK1RoZSBhYm92ZSBpcyB0aGUgdHJlZSB3ZSdkIGhhdmUgYWZ0ZXIgaGFuZGxpbmcgbG9jayBzeW5jaHJvbml6YXRpb24KK3NlcXVlbmNlcyAiQUJDIiwgIkFDIiwgIkFEIi4gIEEgaGFzIHRocmVlIGNoaWxkcmVuLCB7QiwgQywgRH0uICBDIGlzIGFsc28KK2EgY2hpbGQgb2YgQi4gIChUaGUgbGluZXMgcmVwcmVzZW50IHBvaW50ZXJzIGJldHdlZW4gcGFyZW50IGFuZCBjaGlsZC4KK0V2ZXJ5IG5vZGUgY2FuIGhhdmUgbXVsdGlwbGUgcGFyZW50cyBhbmQgbXVsdGlwbGUgY2hpbGRyZW4uKQorCitJZiB3ZSBob2xkIEFDLCBhbmQgd2FudCB0byBsb2NrIEIsIHdlIHJlY3Vyc2l2ZWx5IHNlYXJjaCB0aHJvdWdoIEIncworY2hpbGRyZW4gdG8gc2VlIGlmIEEgb3IgQyBhcHBlYXJzLiAgSXQgZG9lcywgc28gd2UgcmVqZWN0IHRoZSBhdHRlbXB0LgorKEEgc3RyYWlnaHRmb3J3YXJkIHdheSB0byBpbXBsZW1lbnQgaXQ6IGFkZCBhIGxpbmsgZnJvbSBDIHRvIEIsIHRoZW4KK2RldGVybWluZSB3aGV0aGVyIHRoZSBncmFwaCBzdGFydGluZyBhdCBCIGNvbnRhaW5zIGEgY3ljbGUuKQorCitJZiB3ZSBob2xkIEFDIGFuZCB3YW50IHRvIGxvY2sgRCwgd2Ugd291bGQgc3VjY2VlZCwgY3JlYXRpbmcgYSBuZXcgbGluaworZnJvbSBDIHRvIEQuCisKK1VwZGF0ZXMgdG8gTXV0ZXhJbmZvIHN0cnVjdHMgYXJlIG9ubHkgYWxsb3dlZCBmb3IgdGhlIHRocmVhZCB0aGF0IGhvbGRzCit0aGUgbG9jaywgc28gd2UgYWN0dWFsbHkgZG8gbW9zdCBvZiBvdXIgZGVhZGxvY2sgcHJlZGljdGlvbiB3b3JrIGFmdGVyCit0aGUgbG9jayBoYXMgYmVlbiBhY3F1aXJlZC4KKyovCisKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyBsb2cgZnVuY3Rpb25zCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisjZGVmaW5lIExPR0QoZm9ybWF0LCAuLi4pICBcCisgICAgX19saWJjX2Zvcm1hdF9sb2coQU5EUk9JRF9MT0dfREVCVUcsICJwdGhyZWFkX2RlYnVnIiwgKGZvcm1hdCksICMjX19WQV9BUkdTX18gKQorCisjZGVmaW5lIExPR1coZm9ybWF0LCAuLi4pICBcCisgICAgX19saWJjX2Zvcm1hdF9sb2coQU5EUk9JRF9MT0dfV0FSTiwgInB0aHJlYWRfZGVidWciLCAoZm9ybWF0KSwgIyNfX1ZBX0FSR1NfXyApCisKKyNkZWZpbmUgTE9HRShmb3JtYXQsIC4uLikgIFwKKyAgICBfX2xpYmNfZm9ybWF0X2xvZyhBTkRST0lEX0xPR19FUlJPUiwgInB0aHJlYWRfZGVidWciLCAoZm9ybWF0KSwgIyNfX1ZBX0FSR1NfXyApCisKKyNkZWZpbmUgTE9HSShmb3JtYXQsIC4uLikgIFwKKyAgICBfX2xpYmNfZm9ybWF0X2xvZyhBTkRST0lEX0xPR19JTkZPLCAicHRocmVhZF9kZWJ1ZyIsIChmb3JtYXQpLCAjI19fVkFfQVJHU19fICkKKworc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGtTdGFydEJhbm5lciA9CisgICAgICAgICI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0iOworCitzdGF0aWMgY29uc3QgY2hhciogY29uc3Qga0VuZEJhbm5lciA9CisgICAgICAgICI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0iOworCitleHRlcm4gY29uc3QgY2hhciogX19wcm9nbmFtZTsKKworI2RlZmluZSBTVEFDS19UUkFDRV9ERVBUSCAxNgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIGxldmVsIDw9IDAgOiBkZWFkbG9jayBwcmVkaWN0aW9uIGRpc2FibGVkCisgKiBsZXZlbCAgICAxIDogZGVhZGxvY2sgcHJlZGljdGlvbiBlbmFibGVkLCB3L28gY2FsbCBzdGFja3MKKyAqIGxldmVsICAgIDIgOiBkZWFkbG9jayBwcmVkaWN0aW9uIGVuYWJsZWQgdy8gY2FsbCBzdGFja3MKKyAqLworI2RlZmluZSBDQVBUVVJFX0NBTExTVEFDSyAyCitzdGF0aWMgaW50IHNQdGhyZWFkRGVidWdMZXZlbCA9IDA7CitzdGF0aWMgcGlkX3Qgc1B0aHJlYWREZWJ1Z0Rpc2FibGVkVGhyZWFkID0gLTE7CitzdGF0aWMgcHRocmVhZF9tdXRleF90IHNEYmdMb2NrID0gUFRIUkVBRF9NVVRFWF9JTklUSUFMSVpFUjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIHNvbWUgc2ltcGxlL2xhbWUgbWFsbG9jIHJlcGxhY2VtZW50CisgKiBOT1QgdGhyZWFkLXNhZmUgYW5kIGxlYWtzIGV2ZXJ5dGhpbmcKKyAqLworCisjZGVmaW5lIERCR19BTExPQ19CTE9DS19TSVpFIFBBR0VTSVpFCitzdGF0aWMgc2l6ZV90IHNEYmdBbGxvY09mZnNldCA9IERCR19BTExPQ19CTE9DS19TSVpFOworc3RhdGljIGNoYXIqIHNEYmdBbGxvY1B0ciA9IE5VTEw7CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorc3RhdGljIFQqIERiZ0FsbG9jTG9ja2VkKHNpemVfdCBjb3VudCA9IDEpIHsKKyAgICBzaXplX3Qgc2l6ZSA9IHNpemVvZihUKSAqIGNvdW50OworICAgIGlmICgoc0RiZ0FsbG9jT2Zmc2V0ICsgc2l6ZSkgPiBEQkdfQUxMT0NfQkxPQ0tfU0laRSkgeworICAgICAgICBzRGJnQWxsb2NPZmZzZXQgPSAwOworICAgICAgICBzRGJnQWxsb2NQdHIgPSByZWludGVycHJldF9jYXN0PGNoYXIqPihtbWFwKE5VTEwsIERCR19BTExPQ19CTE9DS19TSVpFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBST1RfUkVBRHxQUk9UX1dSSVRFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1BUF9BTk9OIHwgTUFQX1BSSVZBVEUsIDAsIDApKTsKKyAgICAgICAgaWYgKHNEYmdBbGxvY1B0ciA9PSBNQVBfRkFJTEVEKSB7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgIH0KKyAgICB2b2lkKiBhZGRyID0gc0RiZ0FsbG9jUHRyICsgc0RiZ0FsbG9jT2Zmc2V0OworICAgIHNEYmdBbGxvY09mZnNldCArPSBzaXplOworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PFQqPihhZGRyKTsKK30KKworc3RhdGljIHZvaWQqIGRlYnVnX3JlYWxsb2Modm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSwgc2l6ZV90IG9sZF9zaXplKSB7CisgICAgdm9pZCogYWRkciA9IG1tYXAoTlVMTCwgc2l6ZSwgUFJPVF9SRUFEfFBST1RfV1JJVEUsCisgICAgICAgICAgICBNQVBfQU5PTiB8IE1BUF9QUklWQVRFLCAwLCAwKTsKKyAgICBpZiAoYWRkciAhPSBNQVBfRkFJTEVEKSB7CisgICAgICAgIGlmIChwdHIpIHsKKyAgICAgICAgICAgIG1lbWNweShhZGRyLCBwdHIsIG9sZF9zaXplKTsKKyAgICAgICAgICAgIG11bm1hcChwdHIsIG9sZF9zaXplKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGFkZHIgPSBOVUxMOworICAgIH0KKyAgICByZXR1cm4gYWRkcjsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdHJ1Y3QgTXV0ZXhJbmZvOworCit0eXBlZGVmIHN0cnVjdCBDYWxsU3RhY2sgeworICAgIHVpbnRwdHJfdCAgICBkZXB0aDsKKyAgICB1aW50cHRyX3QqICAgYWRkcnM7Cit9IENhbGxTdGFjazsKKwordHlwZWRlZiBzdHJ1Y3QgTXV0ZXhJbmZvKiBNdXRleEluZm9MaXN0RW50cnk7Cit0eXBlZGVmIHN0cnVjdCBDYWxsU3RhY2sgIENhbGxTdGFja0xpc3RFbnRyeTsKKwordHlwZWRlZiBzdHJ1Y3QgR3Jvd2luZ0xpc3QgeworICAgIGludCBhbGxvYzsKKyAgICBpbnQgY291bnQ7CisgICAgdW5pb24geworICAgICAgICB2b2lkKiAgICAgICAgICAgICAgIGRhdGE7CisgICAgICAgIE11dGV4SW5mb0xpc3RFbnRyeSogbGlzdDsKKyAgICAgICAgQ2FsbFN0YWNrTGlzdEVudHJ5KiBzdGFjazsKKyAgICB9OworfSBHcm93aW5nTGlzdDsKKwordHlwZWRlZiBHcm93aW5nTGlzdCBNdXRleEluZm9MaXN0OwordHlwZWRlZiBHcm93aW5nTGlzdCBDYWxsU3RhY2tMaXN0OworCit0eXBlZGVmIHN0cnVjdCBNdXRleEluZm8geworICAgIC8vIHRocmVhZCBjdXJyZW50bHkgaG9sZGluZyB0aGUgbG9jayBvciAwCisgICAgcGlkX3QgICAgICAgICAgICAgICBvd25lcjsKKworICAgIC8vIG1vc3QtcmVjZW50bHktbG9ja2VkIGRvdWJseS1saW5rZWQgbGlzdAorICAgIHN0cnVjdCBNdXRleEluZm8qICAgcHJldjsKKyAgICBzdHJ1Y3QgTXV0ZXhJbmZvKiAgIG5leHQ7CisKKyAgICAvLyBmb3IgcmVlbnRyYW50IGxvY2tzCisgICAgaW50ICAgICAgICAgICAgICAgICBsb2NrQ291bnQ7CisgICAgLy8gd2hlbiBsb29raW5nIGZvciBsb29wcyBpbiB0aGUgZ3JhcGgsIG1hcmtzIHZpc2l0ZWQgbm9kZXMKKyAgICBpbnQgICAgICAgICAgICAgICAgIGhpc3RvcnlNYXJrOworICAgIC8vIHRoZSBhY3R1YWwgbXV0ZXgKKyAgICBwdGhyZWFkX211dGV4X3QqICAgIG11dGV4OworICAgIC8vIGxpc3Qgb2YgbG9ja3MgZGlyZWN0bHkgYWNxdWlyZWQgQUZURVIgdGhpcyBvbmUgaW4gdGhlIHNhbWUgdGhyZWFkCisgICAgTXV0ZXhJbmZvTGlzdCAgICAgICBjaGlsZHJlbjsKKyAgICAvLyBsaXN0IG9mIGxvY2tzIGRpcmVjdGx5IGFjcXVpcmVkIEJFRk9SRSB0aGlzIG9uZSBpbiB0aGUgc2FtZSB0aHJlYWQKKyAgICBNdXRleEluZm9MaXN0ICAgICAgIHBhcmVudHM7CisgICAgLy8gbGlzdCBvZiBjYWxsIHN0YWNrcyB3aGVuIGEgbmV3IGxpbmsgaXMgZXN0YWJsaXNoZWQgdG8gdGhpcyBsb2NrIGZvcm0gaXRzIHBhcmVudAorICAgIENhbGxTdGFja0xpc3QgICAgICAgc3RhY2tzOworICAgIC8vIGNhbGwgc3RhY2sgd2hlbiB0aGlzIGxvY2sgd2FzIGFjcXVpcmVkIGxhc3QKKyAgICBpbnQgICAgICAgICAgICAgICAgIHN0YWNrRGVwdGg7CisgICAgdWludHB0cl90ICAgICAgICAgICBzdGFja1RyYWNlW1NUQUNLX1RSQUNFX0RFUFRIXTsKK30gTXV0ZXhJbmZvOworCitzdGF0aWMgdm9pZCBncm93aW5nTGlzdEluaXQoR3Jvd2luZ0xpc3QqIGxpc3QpIHsKKyAgICBsaXN0LT5hbGxvYyA9IDA7CisgICAgbGlzdC0+Y291bnQgPSAwOworICAgIGxpc3QtPmRhdGEgPSBOVUxMOworfQorCitzdGF0aWMgdm9pZCBncm93aW5nTGlzdEFkZChHcm93aW5nTGlzdCogcExpc3QsIHNpemVfdCBvYmpTaXplKSB7CisgICAgaWYgKHBMaXN0LT5jb3VudCA9PSBwTGlzdC0+YWxsb2MpIHsKKyAgICAgICAgc2l6ZV90IG9sZHNpemUgPSBwTGlzdC0+YWxsb2MgKiBvYmpTaXplOworICAgICAgICBwTGlzdC0+YWxsb2MgKz0gUEFHRVNJWkUgLyBvYmpTaXplOworICAgICAgICBzaXplX3Qgc2l6ZSA9IHBMaXN0LT5hbGxvYyAqIG9ialNpemU7CisgICAgICAgIHBMaXN0LT5kYXRhID0gZGVidWdfcmVhbGxvYyhwTGlzdC0+ZGF0YSwgc2l6ZSwgb2xkc2l6ZSk7CisgICAgfQorICAgIHBMaXN0LT5jb3VudCsrOworfQorCitzdGF0aWMgdm9pZCBpbml0TXV0ZXhJbmZvKE11dGV4SW5mbyogb2JqZWN0LCBwdGhyZWFkX211dGV4X3QqIG11dGV4KSB7CisgICAgb2JqZWN0LT5vd25lciA9IDA7CisgICAgb2JqZWN0LT5wcmV2ID0gMDsKKyAgICBvYmplY3QtPm5leHQgPSAwOworICAgIG9iamVjdC0+bG9ja0NvdW50ID0gMDsKKyAgICBvYmplY3QtPmhpc3RvcnlNYXJrID0gMDsKKyAgICBvYmplY3QtPm11dGV4ID0gbXV0ZXg7CisgICAgZ3Jvd2luZ0xpc3RJbml0KCZvYmplY3QtPmNoaWxkcmVuKTsKKyAgICBncm93aW5nTGlzdEluaXQoJm9iamVjdC0+cGFyZW50cyk7CisgICAgZ3Jvd2luZ0xpc3RJbml0KCZvYmplY3QtPnN0YWNrcyk7CisgICAgb2JqZWN0LT5zdGFja0RlcHRoID0gMDsKK30KKwordHlwZWRlZiBzdHJ1Y3QgVGhyZWFkSW5mbyB7CisgICAgcGlkX3QgICAgICAgcGlkOworICAgIE11dGV4SW5mbyogIG1ybDsKK30gVGhyZWFkSW5mbzsKKworc3RhdGljIHZvaWQgaW5pdFRocmVhZEluZm8oVGhyZWFkSW5mbyogb2JqZWN0LCBwaWRfdCBwaWQpIHsKKyAgICBvYmplY3QtPnBpZCA9IHBpZDsKKyAgICBvYmplY3QtPm1ybCA9IE5VTEw7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgTXV0ZXhJbmZvKiBnZXRfbXV0ZXhfaW5mbyhwdGhyZWFkX211dGV4X3QgKm11dGV4KTsKK3N0YXRpYyB2b2lkIG11dGV4X2xvY2tfY2hlY2tlZChNdXRleEluZm8qIG1ybCwgTXV0ZXhJbmZvKiBvYmplY3QpOworc3RhdGljIHZvaWQgbXV0ZXhfdW5sb2NrX2NoZWNrZWQoTXV0ZXhJbmZvKiBvYmplY3QpOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworZXh0ZXJuICJDIiBpbnQgcHRocmVhZF9tdXRleF9sb2NrX2ltcGwocHRocmVhZF9tdXRleF90ICptdXRleCk7CitleHRlcm4gIkMiIGludCBwdGhyZWFkX211dGV4X3VubG9ja19pbXBsKHB0aHJlYWRfbXV0ZXhfdCAqbXV0ZXgpOworCitzdGF0aWMgaW50IHB0aHJlYWRfbXV0ZXhfbG9ja191bmNoZWNrZWQocHRocmVhZF9tdXRleF90ICptdXRleCkgeworICAgIHJldHVybiBwdGhyZWFkX211dGV4X2xvY2tfaW1wbChtdXRleCk7Cit9CisKK3N0YXRpYyBpbnQgcHRocmVhZF9tdXRleF91bmxvY2tfdW5jaGVja2VkKHB0aHJlYWRfbXV0ZXhfdCAqbXV0ZXgpIHsKKyAgICByZXR1cm4gcHRocmVhZF9tdXRleF91bmxvY2tfaW1wbChtdXRleCk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgdm9pZCBkdXBfYmFja3RyYWNlKENhbGxTdGFjayogc3RhY2ssIHNpemVfdCBjb3VudCwgdWludHB0cl90IGNvbnN0KiBhZGRycykgeworICAgIHN0YWNrLT5kZXB0aCA9IGNvdW50OworICAgIHN0YWNrLT5hZGRycyA9IERiZ0FsbG9jTG9ja2VkPHVpbnRwdHJfdD4oY291bnQpOworICAgIG1lbWNweShzdGFjay0+YWRkcnMsIGFkZHJzLCBjb3VudCAqIHNpemVvZih1aW50cHRyX3QpKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBpbnQgaGlzdG9yeUxpc3RIYXMoCisgICAgICAgIGNvbnN0IE11dGV4SW5mb0xpc3QqIGxpc3QsIE11dGV4SW5mbyBjb25zdCAqIG9iaikgeworICAgIGludCBpOworICAgIGZvciAoaT0wOyBpPGxpc3QtPmNvdW50OyBpKyspIHsKKyAgICAgICAgaWYgKGxpc3QtPmxpc3RbaV0gPT0gb2JqKSB7CisgICAgICAgICAgICByZXR1cm4gaTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gLTE7Cit9CisKK3N0YXRpYyB2b2lkIGhpc3RvcnlMaXN0QWRkKE11dGV4SW5mb0xpc3QqIHBMaXN0LCBNdXRleEluZm8qIG9iaikgeworICAgIGdyb3dpbmdMaXN0QWRkKHBMaXN0LCBzaXplb2YoTXV0ZXhJbmZvTGlzdEVudHJ5KSk7CisgICAgcExpc3QtPmxpc3RbcExpc3QtPmNvdW50IC0gMV0gPSBvYmo7Cit9CisKK3N0YXRpYyBpbnQgaGlzdG9yeUxpc3RSZW1vdmUoTXV0ZXhJbmZvTGlzdCogcExpc3QsIE11dGV4SW5mbyogb2JqKSB7CisgICAgaW50IGk7CisgICAgZm9yIChpID0gcExpc3QtPmNvdW50LTE7IGkgPj0gMDsgaS0tKSB7CisgICAgICAgIGlmIChwTGlzdC0+bGlzdFtpXSA9PSBvYmopIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIGlmIChpIDwgMCkgeworICAgICAgICAvLyBub3QgZm91bmQhCisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIGlmIChpICE9IHBMaXN0LT5jb3VudC0xKSB7CisgICAgICAgIC8vIGNvcHkgdGhlIGxhc3QgZW50cnkgdG8gdGhlIG5ldyBmcmVlIHNsb3QKKyAgICAgICAgcExpc3QtPmxpc3RbaV0gPSBwTGlzdC0+bGlzdFtwTGlzdC0+Y291bnQtMV07CisgICAgfQorICAgIHBMaXN0LT5jb3VudC0tOworICAgIG1lbXNldCgmcExpc3QtPmxpc3RbcExpc3QtPmNvdW50XSwgMCwgc2l6ZW9mKE11dGV4SW5mb0xpc3RFbnRyeSkpOworICAgIHJldHVybiAxOworfQorCitzdGF0aWMgdm9pZCBsaW5rUGFyZW50VG9DaGlsZChNdXRleEluZm8qIHBhcmVudCwgTXV0ZXhJbmZvKiBjaGlsZCkgeworICAgIGhpc3RvcnlMaXN0QWRkKCZwYXJlbnQtPmNoaWxkcmVuLCBjaGlsZCk7CisgICAgaGlzdG9yeUxpc3RBZGQoJmNoaWxkLT5wYXJlbnRzLCBwYXJlbnQpOworfQorCitzdGF0aWMgdm9pZCB1bmxpbmtQYXJlbnRGcm9tQ2hpbGQoTXV0ZXhJbmZvKiBwYXJlbnQsIE11dGV4SW5mbyogY2hpbGQpIHsKKyAgICBoaXN0b3J5TGlzdFJlbW92ZSgmcGFyZW50LT5jaGlsZHJlbiwgY2hpbGQpOworICAgIGhpc3RvcnlMaXN0UmVtb3ZlKCZjaGlsZC0+cGFyZW50cywgcGFyZW50KTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyB2b2lkIGNhbGxzdGFja0xpc3RBZGQoQ2FsbFN0YWNrTGlzdCogcExpc3QsCisgICAgICAgIGludCBjb3VudCwgdWludHB0cl90IGNvbnN0KiBhZGRycykgeworICAgIGdyb3dpbmdMaXN0QWRkKHBMaXN0LCBzaXplb2YoQ2FsbFN0YWNrTGlzdEVudHJ5KSk7CisgICAgZHVwX2JhY2t0cmFjZSgmcExpc3QtPnN0YWNrW3BMaXN0LT5jb3VudCAtIDFdLCBjb3VudCwgYWRkcnMpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIFJlY3Vyc2l2ZWx5IHRyYXZlcnNlIHRoZSBvYmplY3QgaGllcmFyY2h5IHN0YXJ0aW5nIGF0ICJvYmoiLiAgV2UgbWFyaworICogb3Vyc2VsdmVzIG9uIGVudHJ5IGFuZCBjbGVhciB0aGUgbWFyayBvbiBleGl0LiAgSWYgd2UgZXZlciBlbmNvdW50ZXIKKyAqIGEgbWFya2VkIG9iamVjdCwgd2UgaGF2ZSBhIGN5Y2xlLgorICoKKyAqIFJldHVybnMgInRydWUiIGlmIGFsbCBpcyB3ZWxsLCAiZmFsc2UiIGlmIHdlIGZvdW5kIGEgY3ljbGUuCisgKi8KKworc3RhdGljIGludCB0cmF2ZXJzZVRyZWUoTXV0ZXhJbmZvKiBvYmosIE11dGV4SW5mbyBjb25zdCogb2JqUGFyZW50KQoreworICAgIC8qCisgICAgICogSGF2ZSB3ZSBiZWVuIGhlcmUgYmVmb3JlPworICAgICAqLworICAgIGlmIChvYmotPmhpc3RvcnlNYXJrKSB7CisgICAgICAgIGludCBzdGFja0RlcHRoOworICAgICAgICB1aW50cHRyX3QgYWRkcnNbU1RBQ0tfVFJBQ0VfREVQVEhdOworCisgICAgICAgIC8qIFR1cm4gb2ZmIHByZWRpY3Rpb24gdGVtcG9yYXJpbHkgaW4gdGhpcyB0aHJlYWQgd2hpbGUgbG9nZ2luZyAqLworICAgICAgICBzUHRocmVhZERlYnVnRGlzYWJsZWRUaHJlYWQgPSBnZXR0aWQoKTsKKworICAgICAgICBiYWNrdHJhY2Vfc3RhcnR1cCgpOworCisgICAgICAgIExPR1coIiVzXG4iLCBrU3RhcnRCYW5uZXIpOworICAgICAgICBMT0dXKCJwaWQ6ICVkLCB0aWQ6ICVkID4+PiAlcyA8PDwiLCBnZXRwaWQoKSwgZ2V0dGlkKCksIF9fcHJvZ25hbWUpOworICAgICAgICBMT0dXKCJJbGxlZ2FsIGxvY2sgYXR0ZW1wdDpcbiIpOworICAgICAgICBMT0dXKCItLS0gcHRocmVhZF9tdXRleF90IGF0ICVwXG4iLCBvYmotPm11dGV4KTsKKyAgICAgICAgc3RhY2tEZXB0aCA9IGdldF9iYWNrdHJhY2UoYWRkcnMsIFNUQUNLX1RSQUNFX0RFUFRIKTsKKyAgICAgICAgbG9nX2JhY2t0cmFjZShhZGRycywgc3RhY2tEZXB0aCk7CisKKyAgICAgICAgTE9HVygiKysrIEN1cnJlbnRseSBoZWxkIGxvY2tzIGluIHRoaXMgdGhyZWFkIChpbiByZXZlcnNlIG9yZGVyKToiKTsKKyAgICAgICAgTXV0ZXhJbmZvKiBjdXIgPSBvYmo7CisgICAgICAgIHBpZF90IG91cnRpZCA9IGdldHRpZCgpOworICAgICAgICBpbnQgaTsKKyAgICAgICAgZm9yIChpPTAgOyBpPGN1ci0+cGFyZW50cy5jb3VudCA7IGkrKykgeworICAgICAgICAgICAgTXV0ZXhJbmZvKiBwYXJlbnQgPSBjdXItPnBhcmVudHMubGlzdFtpXTsKKyAgICAgICAgICAgIGlmIChwYXJlbnQtPm93bmVyID09IG91cnRpZCkgeworICAgICAgICAgICAgICAgIExPR1coIi0tLSBwdGhyZWFkX211dGV4X3QgYXQgJXBcbiIsIHBhcmVudC0+bXV0ZXgpOworICAgICAgICAgICAgICAgIGlmIChzUHRocmVhZERlYnVnTGV2ZWwgPj0gQ0FQVFVSRV9DQUxMU1RBQ0spIHsKKyAgICAgICAgICAgICAgICAgICAgbG9nX2JhY2t0cmFjZShwYXJlbnQtPnN0YWNrVHJhY2UsIHBhcmVudC0+c3RhY2tEZXB0aCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGN1ciA9IHBhcmVudDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIExPR1coIisrKyBFYXJsaWVyLCB0aGUgZm9sbG93aW5nIGxvY2sgb3JkZXIgKGZyb20gbGFzdCB0byBmaXJzdCkgd2FzIGVzdGFibGlzaGVkXG4iKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgb2JqLT5oaXN0b3J5TWFyayA9IDE7CisKKyAgICBNdXRleEluZm9MaXN0KiBwTGlzdCA9ICZvYmotPmNoaWxkcmVuOworICAgIGludCByZXN1bHQgPSAxOworICAgIGludCBpOworICAgIGZvciAoaSA9IHBMaXN0LT5jb3VudC0xOyBpID49IDA7IGktLSkgeworICAgICAgICBNdXRleEluZm8qIGNoaWxkID0gcExpc3QtPmxpc3RbaV07CisgICAgICAgIGlmICghdHJhdmVyc2VUcmVlKGNoaWxkLCAgb2JqKSkgeworICAgICAgICAgICAgTE9HVygiLS0tIHB0aHJlYWRfbXV0ZXhfdCBhdCAlcFxuIiwgb2JqLT5tdXRleCk7CisgICAgICAgICAgICBpZiAoc1B0aHJlYWREZWJ1Z0xldmVsID49IENBUFRVUkVfQ0FMTFNUQUNLKSB7CisgICAgICAgICAgICAgICAgaW50IGluZGV4ID0gaGlzdG9yeUxpc3RIYXMoJm9iai0+cGFyZW50cywgb2JqUGFyZW50KTsKKyAgICAgICAgICAgICAgICBpZiAoKHNpemVfdClpbmRleCA8IChzaXplX3Qpb2JqLT5zdGFja3MuY291bnQpIHsKKyAgICAgICAgICAgICAgICAgICAgbG9nX2JhY2t0cmFjZShvYmotPnN0YWNrcy5zdGFja1tpbmRleF0uYWRkcnMsIG9iai0+c3RhY2tzLnN0YWNrW2luZGV4XS5kZXB0aCk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgbG9nX2JhY2t0cmFjZShvYmotPnN0YWNrVHJhY2UsIG9iai0+c3RhY2tEZXB0aCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgcmVzdWx0ID0gMDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgb2JqLT5oaXN0b3J5TWFyayA9IDA7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyB2b2lkIG11dGV4X2xvY2tfY2hlY2tlZChNdXRleEluZm8qIG1ybCwgTXV0ZXhJbmZvKiBvYmplY3QpCit7CisgICAgcGlkX3QgdGlkID0gZ2V0dGlkKCk7CisgICAgaWYgKG9iamVjdC0+b3duZXIgPT0gdGlkKSB7CisgICAgICAgIG9iamVjdC0+bG9ja0NvdW50Kys7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBvYmplY3QtPm93bmVyID0gdGlkOworICAgIG9iamVjdC0+bG9ja0NvdW50ID0gMDsKKworICAgIGlmIChzUHRocmVhZERlYnVnTGV2ZWwgPj0gQ0FQVFVSRV9DQUxMU1RBQ0spIHsKKyAgICAgICAgLy8gYWx3YXlzIHJlY29yZCB0aGUgY2FsbCBzdGFjayB3aGVuIGFjcXVpcmluZyBhIGxvY2suCisgICAgICAgIC8vIGl0J3Mgbm90IGVmZmljaWVudCwgYnV0IGlzIHVzZWZ1bCBkdXJpbmcgZGlhZ25vc3RpY3MKKyAgICAgICAgb2JqZWN0LT5zdGFja0RlcHRoID0gZ2V0X2JhY2t0cmFjZShvYmplY3QtPnN0YWNrVHJhY2UsIFNUQUNLX1RSQUNFX0RFUFRIKTsKKyAgICB9CisKKyAgICAvLyBubyBvdGhlciBsb2NrcyBoZWxkIGluIHRoaXMgdGhyZWFkIC0tIG5vIGRlYWRsb2NrIHBvc3NpYmxlIQorICAgIGlmIChtcmwgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gY2hlY2sgaWYgdGhlIGxvY2sgd2UncmUgdHJ5aW5nIHRvIGFjcXVpcmUgaXMgYSBkaXJlY3QgZGVzY2VuZGFudCBvZgorICAgIC8vIHRoZSBtb3N0IHJlY2VudGx5IGxvY2tlZCBtdXRleCBpbiB0aGlzIHRocmVhZCwgaW4gd2hpY2ggY2FzZSB3ZSdyZQorICAgIC8vIGluIGEgZ29vZCBzaXR1YXRpb24gLS0gbm8gZGVhZGxvY2sgcG9zc2libGUKKyAgICBpZiAoaGlzdG9yeUxpc3RIYXMoJm1ybC0+Y2hpbGRyZW4sIG9iamVjdCkgPj0gMCkKKyAgICAgICAgcmV0dXJuOworCisgICAgcHRocmVhZF9tdXRleF9sb2NrX3VuY2hlY2tlZCgmc0RiZ0xvY2spOworCisgICAgbGlua1BhcmVudFRvQ2hpbGQobXJsLCBvYmplY3QpOworICAgIGlmICghdHJhdmVyc2VUcmVlKG9iamVjdCwgbXJsKSkgeworICAgICAgICBiYWNrdHJhY2Vfc2h1dGRvd24oKTsKKyAgICAgICAgTE9HVygiJXNcbiIsIGtFbmRCYW5uZXIpOworICAgICAgICB1bmxpbmtQYXJlbnRGcm9tQ2hpbGQobXJsLCBvYmplY3QpOworICAgICAgICAvLyByZWVuYWJsZSBwdGhyZWFkIGRlYnVnZ2luZyBmb3IgdGhpcyB0aHJlYWQKKyAgICAgICAgc1B0aHJlYWREZWJ1Z0Rpc2FibGVkVGhyZWFkID0gLTE7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gcmVjb3JkIHRoZSBjYWxsIHN0YWNrIGZvciB0aGlzIGxpbmsKKyAgICAgICAgLy8gTk9URTogdGhlIGNhbGwgc3RhY2sgaXMgYWRkZWQgYXQgdGhlIHNhbWUgaW5kZXgKKyAgICAgICAgLy8gYXMgbXJsIGluIG9iamVjdC0+cGFyZW50c1tdCisgICAgICAgIC8vIGllOiBvYmplY3QtPnBhcmVudHMuY291bnQgPT0gb2JqZWN0LT5zdGFja3MuY291bnQsIHdoaWNoIGlzCisgICAgICAgIC8vIGFsc28gdGhlIGluZGV4LgorICAgICAgICBpZiAoc1B0aHJlYWREZWJ1Z0xldmVsID49IENBUFRVUkVfQ0FMTFNUQUNLKSB7CisgICAgICAgICAgICBjYWxsc3RhY2tMaXN0QWRkKCZvYmplY3QtPnN0YWNrcywKKyAgICAgICAgICAgICAgICAgICAgb2JqZWN0LT5zdGFja0RlcHRoLCBvYmplY3QtPnN0YWNrVHJhY2UpOworICAgICAgICB9CisgICAgfQorCisgICAgcHRocmVhZF9tdXRleF91bmxvY2tfdW5jaGVja2VkKCZzRGJnTG9jayk7Cit9CisKK3N0YXRpYyB2b2lkIG11dGV4X3VubG9ja19jaGVja2VkKE11dGV4SW5mbyogb2JqZWN0KQoreworICAgIHBpZF90IHRpZCA9IGdldHRpZCgpOworICAgIGlmIChvYmplY3QtPm93bmVyID09IHRpZCkgeworICAgICAgICBpZiAob2JqZWN0LT5sb2NrQ291bnQgPT0gMCkgeworICAgICAgICAgICAgb2JqZWN0LT5vd25lciA9IDA7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBvYmplY3QtPmxvY2tDb3VudC0tOworICAgICAgICB9CisgICAgfQorfQorCisKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyBIYXNoIFRhYmxlIGZ1bmN0aW9ucworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgSEFTSFRBQkxFX1NJWkUgICAgICAyNTYKKwordHlwZWRlZiBzdHJ1Y3QgSGFzaEVudHJ5IEhhc2hFbnRyeTsKK3N0cnVjdCBIYXNoRW50cnkgeworICAgIHNpemVfdCBzbG90OworICAgIEhhc2hFbnRyeSogcHJldjsKKyAgICBIYXNoRW50cnkqIG5leHQ7CisgICAgdm9pZCogZGF0YTsKK307CisKK3R5cGVkZWYgc3RydWN0IEhhc2hUYWJsZSBIYXNoVGFibGU7CitzdHJ1Y3QgSGFzaFRhYmxlIHsKKyAgICBIYXNoRW50cnkqIHNsb3RzW0hBU0hUQUJMRV9TSVpFXTsKK307CisKK3N0YXRpYyBIYXNoVGFibGUgc011dGV4TWFwOworc3RhdGljIEhhc2hUYWJsZSBzVGhyZWFkTWFwOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIHVpbnQzMl90IGdldF9oYXNoY29kZSh2b2lkIGNvbnN0ICoga2V5LCBzaXplX3Qga2V5U2l6ZSkKK3sKKyAgICB1aW50MzJfdCBoID0ga2V5U2l6ZTsKKyAgICBjaGFyIGNvbnN0KiBkYXRhID0gKGNoYXIgY29uc3QqKWtleTsKKyAgICBzaXplX3QgaTsKKyAgICBmb3IgKGkgPSAwOyBpIDwga2V5U2l6ZTsgaSsrKSB7CisgICAgICAgIGggPSBoICogMzEgKyAqZGF0YTsKKyAgICAgICAgZGF0YSsrOworICAgIH0KKyAgICByZXR1cm4gKHVpbnQzMl90KWg7Cit9CisKK3N0YXRpYyBzaXplX3QgZ2V0X2luZGV4KHVpbnQzMl90IGgpCit7CisgICAgLy8gV2UgYXBwbHkgdGhpcyBzZWNvbmRhcnkgaGFzaGluZyBkaXNjb3ZlcmVkIGJ5IERvdWcgTGVhIHRvIGRlZmVuZAorICAgIC8vIGFnYWluc3QgYmFkIGhhc2hlcy4KKyAgICBoICs9IH4oaCA8PCA5KTsKKyAgICBoIF49ICgoKHVuc2lnbmVkIGludCkgaCkgPj4gMTQpOworICAgIGggKz0gKGggPDwgNCk7CisgICAgaCBePSAoKCh1bnNpZ25lZCBpbnQpIGgpID4+IDEwKTsKKyAgICByZXR1cm4gKHNpemVfdCloICYgKEhBU0hUQUJMRV9TSVpFIC0gMSk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgdm9pZCBoYXNobWFwX2luaXQoSGFzaFRhYmxlKiB0YWJsZSkgeworICAgIG1lbXNldCh0YWJsZSwgMCwgc2l6ZW9mKEhhc2hUYWJsZSkpOworfQorCitzdGF0aWMgdm9pZCBoYXNobWFwX3JlbW92ZUVudHJ5KEhhc2hUYWJsZSogdGFibGUsIEhhc2hFbnRyeSogZW50cnkpCit7CisgICAgSGFzaEVudHJ5KiBwcmV2ID0gZW50cnktPnByZXY7CisgICAgSGFzaEVudHJ5KiBuZXh0ID0gZW50cnktPm5leHQ7CisgICAgaWYgKHByZXYgIT0gTlVMTCkgZW50cnktPnByZXYtPm5leHQgPSBuZXh0OworICAgIGlmIChuZXh0ICE9IE5VTEwpIGVudHJ5LT5uZXh0LT5wcmV2ID0gcHJldjsKKyAgICBpZiAocHJldiA9PSBOVUxMKSB7CisgICAgICAgIC8vIHdlIGFyZSB0aGUgaGVhZCBvZiB0aGUgbGlzdC4gc2V0IHRoZSBoZWFkIHRvIGJlIG5leHQKKyAgICAgICAgdGFibGUtPnNsb3RzW2VudHJ5LT5zbG90XSA9IGVudHJ5LT5uZXh0OworICAgIH0KK30KKworc3RhdGljIEhhc2hFbnRyeSogaGFzaG1hcF9sb29rdXAoSGFzaFRhYmxlKiB0YWJsZSwKKyAgICAgICAgdm9pZCBjb25zdCoga2V5LCBzaXplX3Qga3NpemUsCisgICAgICAgIGludCAoKmVxdWFscykodm9pZCBjb25zdCogZGF0YSwgdm9pZCBjb25zdCoga2V5KSkKK3sKKyAgICBjb25zdCB1aW50MzJfdCBoYXNoID0gZ2V0X2hhc2hjb2RlKGtleSwga3NpemUpOworICAgIGNvbnN0IHNpemVfdCBzbG90ID0gZ2V0X2luZGV4KGhhc2gpOworCisgICAgSGFzaEVudHJ5KiBlbnRyeSA9IHRhYmxlLT5zbG90c1tzbG90XTsKKyAgICB3aGlsZSAoZW50cnkpIHsKKyAgICAgICAgaWYgKGVxdWFscyhlbnRyeS0+ZGF0YSwga2V5KSkgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgZW50cnkgPSBlbnRyeS0+bmV4dDsKKyAgICB9CisKKyAgICBpZiAoZW50cnkgPT0gTlVMTCkgeworICAgICAgICAvLyBjcmVhdGUgYSBuZXcgZW50cnkKKyAgICAgICAgZW50cnkgPSBEYmdBbGxvY0xvY2tlZDxIYXNoRW50cnk+KCk7CisgICAgICAgIGVudHJ5LT5kYXRhID0gTlVMTDsKKyAgICAgICAgZW50cnktPnNsb3QgPSBzbG90OworICAgICAgICBlbnRyeS0+cHJldiA9IE5VTEw7CisgICAgICAgIGVudHJ5LT5uZXh0ID0gdGFibGUtPnNsb3RzW3Nsb3RdOworICAgICAgICBpZiAoZW50cnktPm5leHQgIT0gTlVMTCkgeworICAgICAgICAgICAgZW50cnktPm5leHQtPnByZXYgPSBlbnRyeTsKKyAgICAgICAgfQorICAgICAgICB0YWJsZS0+c2xvdHNbc2xvdF0gPSBlbnRyeTsKKyAgICB9CisgICAgcmV0dXJuIGVudHJ5OworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIGludCBNdXRleEluZm9fZXF1YWxzKHZvaWQgY29uc3QqIGRhdGEsIHZvaWQgY29uc3QqIGtleSkgeworICAgIHJldHVybiAoKE11dGV4SW5mbyBjb25zdCAqKWRhdGEpLT5tdXRleCA9PSAqKHB0aHJlYWRfbXV0ZXhfdCAqKilrZXk7Cit9CisKK3N0YXRpYyBNdXRleEluZm8qIGdldF9tdXRleF9pbmZvKHB0aHJlYWRfbXV0ZXhfdCAqbXV0ZXgpCit7CisgICAgcHRocmVhZF9tdXRleF9sb2NrX3VuY2hlY2tlZCgmc0RiZ0xvY2spOworCisgICAgSGFzaEVudHJ5KiBlbnRyeSA9IGhhc2htYXBfbG9va3VwKCZzTXV0ZXhNYXAsCisgICAgICAgICAgICAmbXV0ZXgsIHNpemVvZihtdXRleCksCisgICAgICAgICAgICAmTXV0ZXhJbmZvX2VxdWFscyk7CisgICAgaWYgKGVudHJ5LT5kYXRhID09IE5VTEwpIHsKKyAgICAgICAgTXV0ZXhJbmZvKiBtdXRleF9pbmZvID0gRGJnQWxsb2NMb2NrZWQ8TXV0ZXhJbmZvPigpOworICAgICAgICBlbnRyeS0+ZGF0YSA9IG11dGV4X2luZm87CisgICAgICAgIGluaXRNdXRleEluZm8obXV0ZXhfaW5mbywgbXV0ZXgpOworICAgIH0KKworICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrX3VuY2hlY2tlZCgmc0RiZ0xvY2spOworCisgICAgcmV0dXJuIChNdXRleEluZm8gKillbnRyeS0+ZGF0YTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBpbnQgVGhyZWFkSW5mb19lcXVhbHModm9pZCBjb25zdCogZGF0YSwgdm9pZCBjb25zdCoga2V5KSB7CisgICAgcmV0dXJuICgoVGhyZWFkSW5mbyBjb25zdCAqKWRhdGEpLT5waWQgPT0gKihwaWRfdCAqKWtleTsKK30KKworc3RhdGljIFRocmVhZEluZm8qIGdldF90aHJlYWRfaW5mbyhwaWRfdCBwaWQpCit7CisgICAgcHRocmVhZF9tdXRleF9sb2NrX3VuY2hlY2tlZCgmc0RiZ0xvY2spOworCisgICAgSGFzaEVudHJ5KiBlbnRyeSA9IGhhc2htYXBfbG9va3VwKCZzVGhyZWFkTWFwLAorICAgICAgICAgICAgJnBpZCwgc2l6ZW9mKHBpZCksCisgICAgICAgICAgICAmVGhyZWFkSW5mb19lcXVhbHMpOworICAgIGlmIChlbnRyeS0+ZGF0YSA9PSBOVUxMKSB7CisgICAgICAgIFRocmVhZEluZm8qIHRocmVhZF9pbmZvID0gRGJnQWxsb2NMb2NrZWQ8VGhyZWFkSW5mbz4oKTsKKyAgICAgICAgZW50cnktPmRhdGEgPSB0aHJlYWRfaW5mbzsKKyAgICAgICAgaW5pdFRocmVhZEluZm8odGhyZWFkX2luZm8sIHBpZCk7CisgICAgfQorCisgICAgcHRocmVhZF9tdXRleF91bmxvY2tfdW5jaGVja2VkKCZzRGJnTG9jayk7CisKKyAgICByZXR1cm4gKFRocmVhZEluZm8gKillbnRyeS0+ZGF0YTsKK30KKworc3RhdGljIHZvaWQgcHVzaF9tb3N0X3JlY2VudGx5X2xvY2tlZChNdXRleEluZm8qIG1ybCkgeworICAgIFRocmVhZEluZm8qIHRpbmZvID0gZ2V0X3RocmVhZF9pbmZvKGdldHRpZCgpKTsKKyAgICBtcmwtPm5leHQgPSBOVUxMOworICAgIG1ybC0+cHJldiA9IHRpbmZvLT5tcmw7CisgICAgdGluZm8tPm1ybCA9IG1ybDsKK30KKworc3RhdGljIHZvaWQgcmVtb3ZlX21vc3RfcmVjZW50bHlfbG9ja2VkKE11dGV4SW5mbyogbXJsKSB7CisgICAgVGhyZWFkSW5mbyogdGluZm8gPSBnZXRfdGhyZWFkX2luZm8oZ2V0dGlkKCkpOworICAgIGlmIChtcmwtPm5leHQpIHsKKyAgICAgICAgKG1ybC0+bmV4dCktPnByZXYgPSBtcmwtPnByZXY7CisgICAgfQorICAgIGlmIChtcmwtPnByZXYpIHsKKyAgICAgICAgKG1ybC0+cHJldiktPm5leHQgPSBtcmwtPm5leHQ7CisgICAgfQorICAgIGlmICh0aW5mby0+bXJsID09IG1ybCkgeworICAgICAgICB0aW5mby0+bXJsID0gbXJsLT5uZXh0OworICAgIH0KK30KKworc3RhdGljIE11dGV4SW5mbyogZ2V0X21vc3RfcmVjZW50bHlfbG9ja2VkKCkgeworICAgIFRocmVhZEluZm8qIHRpbmZvID0gZ2V0X3RocmVhZF9pbmZvKGdldHRpZCgpKTsKKyAgICByZXR1cm4gdGluZm8tPm1ybDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIHB0aHJlYWRfZGVidWdfaW5pdCgpIGlzIGNhbGxlZCBmcm9tIGxpYmNfaW5pdF9keW5hbWljKCkganVzdAorICogYWZ0ZXIgc3lzdGVtIHByb3BlcnRpZXMgaGF2ZSBiZWVuIGluaXRpYWxpemVkCisgKi8KKworZXh0ZXJuICJDIiBfX0xJQkNfSElEREVOX18gdm9pZCBwdGhyZWFkX2RlYnVnX2luaXQoKSB7CisgICAgY2hhciBlbnZbUFJPUF9WQUxVRV9NQVhdOworICAgIGlmIChfX3N5c3RlbV9wcm9wZXJ0eV9nZXQoImRlYnVnLmxpYmMucHRocmVhZCIsIGVudikpIHsKKyAgICAgICAgaW50IGxldmVsID0gYXRvaShlbnYpOworICAgICAgICBpZiAobGV2ZWwpIHsKKyAgICAgICAgICAgIExPR0koInB0aHJlYWQgZGVhZGxvY2sgZGV0ZWN0aW9uIGxldmVsICVkIGVuYWJsZWQgZm9yIHBpZCAlZCAoJXMpIiwKKyAgICAgICAgICAgICAgICAgICAgbGV2ZWwsIGdldHBpZCgpLCBfX3Byb2duYW1lKTsKKyAgICAgICAgICAgIGhhc2htYXBfaW5pdCgmc011dGV4TWFwKTsKKyAgICAgICAgICAgIHNQdGhyZWFkRGVidWdMZXZlbCA9IGxldmVsOworICAgICAgICB9CisgICAgfQorfQorCisvKgorICogU2VlIGlmIHdlIHdlcmUgYWxsb3dlZCB0byBncmFiIHRoZSBsb2NrIGF0IHRoaXMgdGltZS4gIFdlIGRvIGl0CisgKiAqYWZ0ZXIqIGFjcXVpcmluZyB0aGUgbG9jaywgcmF0aGVyIHRoYW4gYmVmb3JlLCBzbyB0aGF0IHdlIGNhbgorICogZnJlZWx5IHVwZGF0ZSB0aGUgTXV0ZXhJbmZvIHN0cnVjdC4gIFRoaXMgc2VlbXMgY291bnRlci1pbnR1aXRpdmUsCisgKiBidXQgb3VyIGdvYWwgaXMgZGVhZGxvY2sgKnByZWRpY3Rpb24qIG5vdCBkZWFkbG9jayAqcHJldmVudGlvbiouCisgKiAoSWYgd2UgYWN0dWFsbHkgZGVhZGxvY2ssIHRoZSBzaXR1YXRpb24gaXMgZWFzeSB0byBkaWFnbm9zZSBmcm9tCisgKiBhIHRocmVhZCBkdW1wLCBzbyB0aGVyZSdzIG5vIHBvaW50IG1ha2luZyBhIHNwZWNpYWwgZWZmb3J0IHRvIGRvCisgKiB0aGUgY2hlY2tzIGJlZm9yZSB0aGUgbG9jayBpcyBoZWxkLikKKyAqLworCitleHRlcm4gIkMiIF9fTElCQ19ISURERU5fXyB2b2lkIHB0aHJlYWRfZGVidWdfbXV0ZXhfbG9ja19jaGVjayhwdGhyZWFkX211dGV4X3QgKm11dGV4KQoreworICAgIGlmIChzUHRocmVhZERlYnVnTGV2ZWwgPT0gMCkgcmV0dXJuOworICAgIC8vIHByZWRpY3Rpb24gZGlzYWJsZWQgZm9yIHRoaXMgdGhyZWFkCisgICAgaWYgKHNQdGhyZWFkRGVidWdEaXNhYmxlZFRocmVhZCA9PSBnZXR0aWQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIE11dGV4SW5mbyogb2JqZWN0ID0gZ2V0X211dGV4X2luZm8obXV0ZXgpOworICAgIE11dGV4SW5mbyogbXJsID0gZ2V0X21vc3RfcmVjZW50bHlfbG9ja2VkKCk7CisgICAgbXV0ZXhfbG9ja19jaGVja2VkKG1ybCwgb2JqZWN0KTsKKyAgICBwdXNoX21vc3RfcmVjZW50bHlfbG9ja2VkKG9iamVjdCk7Cit9CisKKy8qCisgKiBwdGhyZWFkX2RlYnVnX211dGV4X3VubG9ja19jaGVjaygpIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIG11dGV4CisgKiBzdGlsbCBoZWxkIChpZTogYmVmb3JlIGNhbGxpbmcgdGhlIHJlYWwgdW5sb2NrKQorICovCisKK2V4dGVybiAiQyIgX19MSUJDX0hJRERFTl9fIHZvaWQgcHRocmVhZF9kZWJ1Z19tdXRleF91bmxvY2tfY2hlY2socHRocmVhZF9tdXRleF90ICptdXRleCkKK3sKKyAgICBpZiAoc1B0aHJlYWREZWJ1Z0xldmVsID09IDApIHJldHVybjsKKyAgICAvLyBwcmVkaWN0aW9uIGRpc2FibGVkIGZvciB0aGlzIHRocmVhZAorICAgIGlmIChzUHRocmVhZERlYnVnRGlzYWJsZWRUaHJlYWQgPT0gZ2V0dGlkKCkpCisgICAgICAgIHJldHVybjsKKyAgICBNdXRleEluZm8qIG9iamVjdCA9IGdldF9tdXRleF9pbmZvKG11dGV4KTsKKyAgICByZW1vdmVfbW9zdF9yZWNlbnRseV9sb2NrZWQob2JqZWN0KTsKKyAgICBtdXRleF91bmxvY2tfY2hlY2tlZChvYmplY3QpOworfQpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvcHRocmVhZF9kZXRhY2guY3BwIGIvbGliYy9iaW9uaWMvcHRocmVhZF9kZXRhY2guY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1ZjExYWMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2Jpb25pYy9wdGhyZWFkX2RldGFjaC5jcHAKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8ZXJybm8uaD4KKworI2luY2x1ZGUgInB0aHJlYWRfYWNjZXNzb3IuaCIKKworaW50IHB0aHJlYWRfZGV0YWNoKHB0aHJlYWRfdCB0KSB7CisgIHB0aHJlYWRfYWNjZXNzb3IgdGhyZWFkKHQpOworICBpZiAodGhyZWFkLmdldCgpID09IE5VTEwpIHsKKyAgICAgIHJldHVybiBFU1JDSDsKKyAgfQorCisgIGlmICh0aHJlYWQtPmF0dHIuZmxhZ3MgJiBQVEhSRUFEX0FUVFJfRkxBR19ERVRBQ0hFRCkgeworICAgIHJldHVybiBFSU5WQUw7IC8vIEFscmVhZHkgZGV0YWNoZWQuCisgIH0KKworICBpZiAodGhyZWFkLT5hdHRyLmZsYWdzICYgUFRIUkVBRF9BVFRSX0ZMQUdfSk9JTkVEKSB7CisgICAgcmV0dXJuIDA7IC8vIEFscmVhZHkgYmVpbmcgam9pbmVkOyBzaWxlbnRseSBkbyBub3RoaW5nLCBsaWtlIGdsaWJjLgorICB9CisKKyAgdGhyZWFkLT5hdHRyLmZsYWdzIHw9IFBUSFJFQURfQVRUUl9GTEFHX0RFVEFDSEVEOworICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL3B0aHJlYWRfZXF1YWwuY3BwIGIvbGliYy9iaW9uaWMvcHRocmVhZF9lcXVhbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDkzYjJjMgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYmlvbmljL3B0aHJlYWRfZXF1YWwuY3BwCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHB0aHJlYWQuaD4KKworaW50IHB0aHJlYWRfZXF1YWwocHRocmVhZF90IGxocywgcHRocmVhZF90IHJocykgeworICByZXR1cm4gKGxocyA9PSByaHMgPyAxIDogMCk7Cit9CmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9wdGhyZWFkX2dldGNwdWNsb2NraWQuY3BwIGIvbGliYy9iaW9uaWMvcHRocmVhZF9nZXRjcHVjbG9ja2lkLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMDA0NmJhCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9iaW9uaWMvcHRocmVhZF9nZXRjcHVjbG9ja2lkLmNwcApAQCAtMCwwICsxLDQyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxlcnJuby5oPgorCisjaW5jbHVkZSAicHRocmVhZF9hY2Nlc3Nvci5oIgorCitpbnQgcHRocmVhZF9nZXRjcHVjbG9ja2lkKHB0aHJlYWRfdCB0LCBjbG9ja2lkX3QqIGNsb2NraWQpIHsKKyAgcHRocmVhZF9hY2Nlc3NvciB0aHJlYWQodCk7CisgIGlmICh0aHJlYWQuZ2V0KCkgPT0gTlVMTCkgeworICAgIHJldHVybiBFU1JDSDsKKyAgfQorCisgIGVudW0geyBDTE9DS19JRFRZUEVfQklUUyA9IDMgfTsKKyAgKmNsb2NraWQgPSBDTE9DS19USFJFQURfQ1BVVElNRV9JRCB8ICh0aHJlYWQtPnRpZCA8PCBDTE9DS19JRFRZUEVfQklUUyk7CisgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvcHRocmVhZF9nZXRzY2hlZHBhcmFtLmNwcCBiL2xpYmMvYmlvbmljL3B0aHJlYWRfZ2V0c2NoZWRwYXJhbS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDNmYTVmMgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYmlvbmljL3B0aHJlYWRfZ2V0c2NoZWRwYXJhbS5jcHAKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8ZXJybm8uaD4KKworI2luY2x1ZGUgIkVycm5vUmVzdG9yZXIuaCIKKyNpbmNsdWRlICJwdGhyZWFkX2FjY2Vzc29yLmgiCisKK2ludCBwdGhyZWFkX2dldHNjaGVkcGFyYW0ocHRocmVhZF90IHQsIGludCogcG9saWN5LCBzY2hlZF9wYXJhbSogcGFyYW0pIHsKKyAgRXJybm9SZXN0b3JlciBlcnJub19yZXN0b3JlcjsKKworICBwdGhyZWFkX2FjY2Vzc29yIHRocmVhZCh0KTsKKyAgaWYgKHRocmVhZC5nZXQoKSA9PSBOVUxMKSB7CisgICAgcmV0dXJuIEVTUkNIOworICB9CisKKyAgaW50IHJjID0gc2NoZWRfZ2V0cGFyYW0odGhyZWFkLT50aWQsIHBhcmFtKTsKKyAgaWYgKHJjID09IC0xKSB7CisgICAgcmV0dXJuIGVycm5vOworICB9CisgICpwb2xpY3kgPSBzY2hlZF9nZXRzY2hlZHVsZXIodGhyZWFkLT50aWQpOworICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL3B0aHJlYWRfaW50ZXJuYWwuaCBiL2xpYmMvYmlvbmljL3B0aHJlYWRfaW50ZXJuYWwuaAppbmRleCAxYzcwYjM1Li4zMWI4Y2E3IDEwMDY0NAotLS0gYS9saWJjL2Jpb25pYy9wdGhyZWFkX2ludGVybmFsLmgKKysrIGIvbGliYy9iaW9uaWMvcHRocmVhZF9pbnRlcm5hbC5oCkBAIC0yOSw4MyArMjksNTYgQEAKICNkZWZpbmUgX1BUSFJFQURfSU5URVJOQUxfSF8KIAogI2luY2x1ZGUgPHB0aHJlYWQuaD4KKyNpbmNsdWRlIDxzdGRib29sLmg+CisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CiAKIF9fQkVHSU5fREVDTFMKIAogdHlwZWRlZiBzdHJ1Y3QgcHRocmVhZF9pbnRlcm5hbF90CiB7CiAgICAgc3RydWN0IHB0aHJlYWRfaW50ZXJuYWxfdCogIG5leHQ7Ci0gICAgc3RydWN0IHB0aHJlYWRfaW50ZXJuYWxfdCoqIHByZWY7CisgICAgc3RydWN0IHB0aHJlYWRfaW50ZXJuYWxfdCogIHByZXY7CiAgICAgcHRocmVhZF9hdHRyX3QgICAgICAgICAgICAgIGF0dHI7Ci0gICAgcGlkX3QgICAgICAgICAgICAgICAgICAgICAgIGtlcm5lbF9pZDsKKyAgICBwaWRfdCAgICAgICAgICAgICAgICAgICAgICAgdGlkOworICAgIGJvb2wgICAgICAgICAgICAgICAgICAgICAgICBhbGxvY2F0ZWRfb25faGVhcDsKICAgICBwdGhyZWFkX2NvbmRfdCAgICAgICAgICAgICAgam9pbl9jb25kOwotICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgICBqb2luX2NvdW50OwogICAgIHZvaWQqICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsdWU7CiAgICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgIGludGVybmFsX2ZsYWdzOwogICAgIF9fcHRocmVhZF9jbGVhbnVwX3QqICAgICAgICBjbGVhbnVwX3N0YWNrOwogICAgIHZvaWQqKiAgICAgICAgICAgICAgICAgICAgICB0bHM7ICAgICAgICAgLyogdGhyZWFkLWxvY2FsIHN0b3JhZ2UgYXJlYSAqLworCisgICAgdm9pZCogYWx0ZXJuYXRlX3NpZ25hbF9zdGFjazsKKworICAgIC8qCisgICAgICogVGhlIGR5bmFtaWMgbGlua2VyIGltcGxlbWVudHMgZGxlcnJvcigzKSwgd2hpY2ggbWFrZXMgaXQgaGFyZCBmb3IgdXMgdG8gaW1wbGVtZW50IHRoaXMKKyAgICAgKiBwZXItdGhyZWFkIGJ1ZmZlciBieSBzaW1wbHkgdXNpbmcgbWFsbG9jKDMpIGFuZCBmcmVlKDMpLgorICAgICAqLworI2RlZmluZSBfX0JJT05JQ19ETEVSUk9SX0JVRkZFUl9TSVpFIDUxMgorICAgIGNoYXIgZGxlcnJvcl9idWZmZXJbX19CSU9OSUNfRExFUlJPUl9CVUZGRVJfU0laRV07CiB9IHB0aHJlYWRfaW50ZXJuYWxfdDsKIAotZXh0ZXJuIGludCBfaW5pdF90aHJlYWQocHRocmVhZF9pbnRlcm5hbF90ICogdGhyZWFkLCBwaWRfdCBrZXJuZWxfaWQsIHB0aHJlYWRfYXR0cl90ICogYXR0ciwgdm9pZCAqIHN0YWNrX2Jhc2UpOworaW50IF9pbml0X3RocmVhZChwdGhyZWFkX2ludGVybmFsX3QqIHRocmVhZCwgYm9vbCBhZGRfdG9fdGhyZWFkX2xpc3QpOwordm9pZCBfX2luaXRfdGxzKHB0aHJlYWRfaW50ZXJuYWxfdCogdGhyZWFkKTsKK3ZvaWQgX3B0aHJlYWRfaW50ZXJuYWxfYWRkKHB0aHJlYWRfaW50ZXJuYWxfdCogdGhyZWFkKTsKK3B0aHJlYWRfaW50ZXJuYWxfdCogX19nZXRfdGhyZWFkKHZvaWQpOwogCi0vKiBuZWVkZWQgYnkgcG9zaXgtdGltZXJzLmMgKi8KK19fTElCQ19ISURERU5fXyB2b2lkIHB0aHJlYWRfa2V5X2NsZWFuX2FsbCh2b2lkKTsKK19fTElCQ19ISURERU5fXyB2b2lkIF9wdGhyZWFkX2ludGVybmFsX3JlbW92ZV9sb2NrZWQocHRocmVhZF9pbnRlcm5hbF90KiB0aHJlYWQpOwogCi1zdGF0aWMgX19pbmxpbmVfXyB2b2lkIHRpbWVzcGVjX2FkZCggc3RydWN0IHRpbWVzcGVjKiAgYSwgY29uc3Qgc3RydWN0IHRpbWVzcGVjKiAgYiApCi17Ci0gICAgYS0+dHZfc2VjICArPSBiLT50dl9zZWM7Ci0gICAgYS0+dHZfbnNlYyArPSBiLT50dl9uc2VjOwotICAgIGlmIChhLT50dl9uc2VjID49IDEwMDAwMDAwMDApIHsKLSAgICAgICAgYS0+dHZfbnNlYyAtPSAxMDAwMDAwMDAwOwotICAgICAgICBhLT50dl9zZWMgICs9IDE7Ci0gICAgfQotfQorLyogSGFzIHRoZSB0aHJlYWQgYmVlbiBkZXRhY2hlZCBieSBhIHB0aHJlYWRfam9pbiBvciBwdGhyZWFkX2RldGFjaCBjYWxsPyAqLworI2RlZmluZSBQVEhSRUFEX0FUVFJfRkxBR19ERVRBQ0hFRCAgICAgIDB4MDAwMDAwMDEKIAotc3RhdGljICBfX2lubGluZV9fIHZvaWQgdGltZXNwZWNfc3ViKCBzdHJ1Y3QgdGltZXNwZWMqICBhLCBjb25zdCBzdHJ1Y3QgdGltZXNwZWMqICBiICkKLXsKLSAgICBhLT50dl9zZWMgIC09IGItPnR2X3NlYzsKLSAgICBhLT50dl9uc2VjIC09IGItPnR2X25zZWM7Ci0gICAgaWYgKGEtPnR2X25zZWMgPCAwKSB7Ci0gICAgICAgIGEtPnR2X25zZWMgKz0gMTAwMDAwMDAwMDsKLSAgICAgICAgYS0+dHZfc2VjICAtPSAxOwotICAgIH0KLX0KKy8qIFdhcyB0aGUgdGhyZWFkJ3Mgc3RhY2sgYWxsb2NhdGVkIGJ5IHRoZSB1c2VyIHJhdGhlciB0aGFuIGJ5IHVzPyAqLworI2RlZmluZSBQVEhSRUFEX0FUVFJfRkxBR19VU0VSX1NUQUNLICAgIDB4MDAwMDAwMDIKIAotc3RhdGljICBfX2lubGluZV9fIHZvaWQgdGltZXNwZWNfemVybyggc3RydWN0IHRpbWVzcGVjKiAgYSApCi17Ci0gICAgYS0+dHZfc2VjID0gYS0+dHZfbnNlYyA9IDA7Ci19CisvKiBIYXMgdGhlIHRocmVhZCBiZWVuIGpvaW5lZCBieSBhbm90aGVyIHRocmVhZD8gKi8KKyNkZWZpbmUgUFRIUkVBRF9BVFRSX0ZMQUdfSk9JTkVEICAgICAgICAweDAwMDAwMDA0CiAKLXN0YXRpYyAgX19pbmxpbmVfXyBpbnQgdGltZXNwZWNfaXNfemVybyggY29uc3Qgc3RydWN0IHRpbWVzcGVjKiAgYSApCi17Ci0gICAgcmV0dXJuIChhLT50dl9zZWMgPT0gMCAmJiBhLT50dl9uc2VjID09IDApOwotfQorLyogSGFzIHRoZSB0aHJlYWQgYWxyZWFkeSBleGl0ZWQgYnV0IG5vdCBiZWVuIGpvaW5lZD8gKi8KKyNkZWZpbmUgUFRIUkVBRF9BVFRSX0ZMQUdfWk9NQklFICAgICAgICAweDAwMDAwMDA4CiAKLXN0YXRpYyAgX19pbmxpbmVfXyBpbnQgdGltZXNwZWNfY21wKCBjb25zdCBzdHJ1Y3QgdGltZXNwZWMqICBhLCBjb25zdCBzdHJ1Y3QgdGltZXNwZWMqICBiICkKLXsKLSAgICBpZiAoYS0+dHZfc2VjICA8IGItPnR2X3NlYykgIHJldHVybiAtMTsKLSAgICBpZiAoYS0+dHZfc2VjICA+IGItPnR2X3NlYykgIHJldHVybiArMTsKLSAgICBpZiAoYS0+dHZfbnNlYyA8IGItPnR2X25zZWMpIHJldHVybiAtMTsKLSAgICBpZiAoYS0+dHZfbnNlYyA+IGItPnR2X25zZWMpIHJldHVybiArMTsKLSAgICByZXR1cm4gMDsKLX0KLQotc3RhdGljICBfX2lubGluZV9fIGludCB0aW1lc3BlY19jbXAwKCBjb25zdCBzdHJ1Y3QgdGltZXNwZWMqICBhICkKLXsKLSAgICBpZiAoYS0+dHZfc2VjIDwgMCkgcmV0dXJuIC0xOwotICAgIGlmIChhLT50dl9zZWMgPiAwKSByZXR1cm4gKzE7Ci0gICAgaWYgKGEtPnR2X25zZWMgPCAwKSByZXR1cm4gLTE7Ci0gICAgaWYgKGEtPnR2X25zZWMgPiAwKSByZXR1cm4gKzE7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLWV4dGVybiBpbnQgIF9fcHRocmVhZF9jb25kX3RpbWVkd2FpdChwdGhyZWFkX2NvbmRfdCosIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB0aHJlYWRfbXV0ZXhfdCosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHRpbWVzcGVjKiwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvY2tpZF90KTsKLQotZXh0ZXJuIGludCAgX19wdGhyZWFkX2NvbmRfdGltZWR3YWl0X3JlbGF0aXZlKHB0aHJlYWRfY29uZF90KiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdGhyZWFkX211dGV4X3QqLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCB0aW1lc3BlYyopOworX19MSUJDX0hJRERFTl9fIGV4dGVybiBwdGhyZWFkX2ludGVybmFsX3QqIGdUaHJlYWRMaXN0OworX19MSUJDX0hJRERFTl9fIGV4dGVybiBwdGhyZWFkX211dGV4X3QgZ1RocmVhZExpc3RMb2NrOwogCiAvKiBuZWVkZWQgYnkgZm9yay5jICovCiBleHRlcm4gdm9pZCBfX3RpbWVyX3RhYmxlX3N0YXJ0X3N0b3AoaW50ICBzdG9wKTsKZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL3B0aHJlYWRfaW50ZXJuYWxzLmNwcCBiL2xpYmMvYmlvbmljL3B0aHJlYWRfaW50ZXJuYWxzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NmJjNWI3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9iaW9uaWMvcHRocmVhZF9pbnRlcm5hbHMuY3BwCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgInB0aHJlYWRfaW50ZXJuYWwuaCIKKworI2luY2x1ZGUgImJpb25pY190bHMuaCIKKyNpbmNsdWRlICJTY29wZWRQdGhyZWFkTXV0ZXhMb2NrZXIuaCIKKworX19MSUJDX0hJRERFTl9fIHB0aHJlYWRfaW50ZXJuYWxfdCogZ1RocmVhZExpc3QgPSBOVUxMOworX19MSUJDX0hJRERFTl9fIHB0aHJlYWRfbXV0ZXhfdCBnVGhyZWFkTGlzdExvY2sgPSBQVEhSRUFEX01VVEVYX0lOSVRJQUxJWkVSOworCit2b2lkIF9wdGhyZWFkX2ludGVybmFsX3JlbW92ZV9sb2NrZWQocHRocmVhZF9pbnRlcm5hbF90KiB0aHJlYWQpIHsKKyAgaWYgKHRocmVhZC0+bmV4dCAhPSBOVUxMKSB7CisgICAgdGhyZWFkLT5uZXh0LT5wcmV2ID0gdGhyZWFkLT5wcmV2OworICB9CisgIGlmICh0aHJlYWQtPnByZXYgIT0gTlVMTCkgeworICAgIHRocmVhZC0+cHJldi0+bmV4dCA9IHRocmVhZC0+bmV4dDsKKyAgfSBlbHNlIHsKKyAgICBnVGhyZWFkTGlzdCA9IHRocmVhZC0+bmV4dDsKKyAgfQorCisgIC8vIFRoZSBtYWluIHRocmVhZCBpcyBub3QgaGVhcC1hbGxvY2F0ZWQuIFNlZSBfX2xpYmNfaW5pdF90bHMgZm9yIHRoZSBkZWNsYXJhdGlvbiwKKyAgLy8gYW5kIF9fbGliY19pbml0X2NvbW1vbiBmb3IgdGhlIHBvaW50IHdoZXJlIGl0J3MgYWRkZWQgdG8gdGhlIHRocmVhZCBsaXN0LgorICBpZiAodGhyZWFkLT5hbGxvY2F0ZWRfb25faGVhcCkgeworICAgIGZyZWUodGhyZWFkKTsKKyAgfQorfQorCitfX0xJQkNfQUJJX1BSSVZBVEVfXyB2b2lkIF9wdGhyZWFkX2ludGVybmFsX2FkZChwdGhyZWFkX2ludGVybmFsX3QqIHRocmVhZCkgeworICBTY29wZWRQdGhyZWFkTXV0ZXhMb2NrZXIgbG9ja2VyKCZnVGhyZWFkTGlzdExvY2spOworCisgIC8vIFdlIGluc2VydCBhdCB0aGUgaGVhZC4KKyAgdGhyZWFkLT5uZXh0ID0gZ1RocmVhZExpc3Q7CisgIHRocmVhZC0+cHJldiA9IE5VTEw7CisgIGlmICh0aHJlYWQtPm5leHQgIT0gTlVMTCkgeworICAgIHRocmVhZC0+bmV4dC0+cHJldiA9IHRocmVhZDsKKyAgfQorICBnVGhyZWFkTGlzdCA9IHRocmVhZDsKK30KKworX19MSUJDX0FCSV9QUklWQVRFX18gcHRocmVhZF9pbnRlcm5hbF90KiBfX2dldF90aHJlYWQodm9pZCkgeworICB2b2lkKiogdGxzID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KGNvbnN0X2Nhc3Q8dm9pZCo+KF9fZ2V0X3RscygpKSk7CisgIHJldHVybiByZWludGVycHJldF9jYXN0PHB0aHJlYWRfaW50ZXJuYWxfdCo+KHRsc1tUTFNfU0xPVF9USFJFQURfSURdKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL3B0aHJlYWRfam9pbi5jcHAgYi9saWJjL2Jpb25pYy9wdGhyZWFkX2pvaW4uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlMDIyYzIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2Jpb25pYy9wdGhyZWFkX2pvaW4uY3BwCkBAIC0wLDAgKzEsNjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPGVycm5vLmg+CisKKyNpbmNsdWRlICJwdGhyZWFkX2FjY2Vzc29yLmgiCisKK2ludCBwdGhyZWFkX2pvaW4ocHRocmVhZF90IHQsIHZvaWQqKiByZXRfdmFsKSB7CisgIGlmICh0ID09IHB0aHJlYWRfc2VsZigpKSB7CisgICAgcmV0dXJuIEVERUFETEs7CisgIH0KKworICBwdGhyZWFkX2FjY2Vzc29yIHRocmVhZCh0KTsKKyAgaWYgKHRocmVhZC5nZXQoKSA9PSBOVUxMKSB7CisgICAgICByZXR1cm4gRVNSQ0g7CisgIH0KKworICBpZiAodGhyZWFkLT5hdHRyLmZsYWdzICYgUFRIUkVBRF9BVFRSX0ZMQUdfREVUQUNIRUQpIHsKKyAgICByZXR1cm4gRUlOVkFMOworICB9CisKKyAgaWYgKHRocmVhZC0+YXR0ci5mbGFncyAmIFBUSFJFQURfQVRUUl9GTEFHX0pPSU5FRCkgeworICAgIHJldHVybiBFSU5WQUw7CisgIH0KKworICAvLyBTaWduYWwgb3VyIGludGVudGlvbiB0byBqb2luLCBhbmQgd2FpdCBmb3IgdGhlIHRocmVhZCB0byBleGl0LgorICB0aHJlYWQtPmF0dHIuZmxhZ3MgfD0gUFRIUkVBRF9BVFRSX0ZMQUdfSk9JTkVEOworICB3aGlsZSAoKHRocmVhZC0+YXR0ci5mbGFncyAmIFBUSFJFQURfQVRUUl9GTEFHX1pPTUJJRSkgPT0gMCkgeworICAgIHB0aHJlYWRfY29uZF93YWl0KCZ0aHJlYWQtPmpvaW5fY29uZCwgJmdUaHJlYWRMaXN0TG9jayk7CisgIH0KKyAgaWYgKHJldF92YWwpIHsKKyAgICAqcmV0X3ZhbCA9IHRocmVhZC0+cmV0dXJuX3ZhbHVlOworICB9CisKKyAgX3B0aHJlYWRfaW50ZXJuYWxfcmVtb3ZlX2xvY2tlZCh0aHJlYWQuZ2V0KCkpOworICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL3B0aHJlYWRfa2V5LmNwcCBiL2xpYmMvYmlvbmljL3B0aHJlYWRfa2V5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYWU2NTE5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9iaW9uaWMvcHRocmVhZF9rZXkuY3BwCkBAIC0wLDAgKzEsMjU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxwdGhyZWFkLmg+CisKKyNpbmNsdWRlICJiaW9uaWNfdGxzLmgiCisjaW5jbHVkZSAicHRocmVhZF9pbnRlcm5hbC5oIgorCisvKiBBIHRlY2huaWNhbCBub3RlIHJlZ2FyZGluZyBvdXIgdGhyZWFkLWxvY2FsLXN0b3JhZ2UgKFRMUykgaW1wbGVtZW50YXRpb246CisgKgorICogVGhlcmUgY2FuIGJlIHVwIHRvIEJJT05JQ19UTFNfU0xPVFMgaW5kZXBlbmRlbnQgVExTIGtleXMgaW4gYSBnaXZlbiBwcm9jZXNzLAorICogVGhlIGtleXMgYmVsb3cgVExTX1NMT1RfRklSU1RfVVNFUl9TTE9UIGFyZSByZXNlcnZlZCBmb3IgQmlvbmljIHRvIGhvbGQKKyAqIHNwZWNpYWwgdGhyZWFkLXNwZWNpZmljIHZhcmlhYmxlcyBsaWtlIGVycm5vIG9yIGEgcG9pbnRlciB0bworICogdGhlIGN1cnJlbnQgdGhyZWFkJ3MgZGVzY3JpcHRvci4gVGhlc2UgZW50cmllcyBjYW5ub3QgYmUgYWNjZXNzZWQgdGhyb3VnaAorICogcHRocmVhZF9nZXRzcGVjaWZpYygpIC8gcHRocmVhZF9zZXRzcGVjaWZpYygpIG9yIHB0aHJlYWRfa2V5X2RlbGV0ZSgpCisgKgorICogVGhlICd0bHNfbWFwX3QnIHR5cGUgZGVmaW5lZCBiZWxvdyBpbXBsZW1lbnRzIGEgc2hhcmVkIGdsb2JhbCBtYXAgb2YKKyAqIGN1cnJlbnRseSBjcmVhdGVkL2FsbG9jYXRlZCBUTFMga2V5cyBhbmQgdGhlIGRlc3RydWN0b3JzIGFzc29jaWF0ZWQKKyAqIHdpdGggdGhlbS4KKyAqCisgKiBUaGUgZ2xvYmFsIFRMUyBtYXAgc2ltcGx5IGNvbnRhaW5zIGEgYml0bWFwIG9mIGFsbG9jYXRlZCBrZXlzLCBhbmQKKyAqIGFuIGFycmF5IG9mIGRlc3RydWN0b3JzLgorICoKKyAqIEVhY2ggdGhyZWFkIGhhcyBhIFRMUyBhcmVhIHRoYXQgaXMgYSBzaW1wbGUgYXJyYXkgb2YgQklPTklDX1RMU19TTE9UUyB2b2lkKgorICogcG9pbnRlcnMuIHRoZSBUTFMgYXJlYSBvZiB0aGUgbWFpbiB0aHJlYWQgaXMgc3RhY2stYWxsb2NhdGVkIGluCisgKiBfX2xpYmNfaW5pdF9jb21tb24sIHdoaWxlIHRoZSBUTFMgYXJlYSBvZiBvdGhlciB0aHJlYWRzIGlzIHBsYWNlZCBhdAorICogdGhlIHRvcCBvZiB0aGVpciBzdGFjayBpbiBwdGhyZWFkX2NyZWF0ZS4KKyAqCisgKiBXaGVuIHB0aHJlYWRfa2V5X2RlbGV0ZSgpIGlzIGNhbGxlZCBpdCB3aWxsIGVyYXNlIHRoZSBrZXkncyBiaXRtYXAgYml0CisgKiBhbmQgaXRzIGRlc3RydWN0b3IsIGFuZCB3aWxsIGFsc28gY2xlYXIgdGhlIGtleSBkYXRhIGluIHRoZSBUTFMgYXJlYSBvZgorICogYWxsIGNyZWF0ZWQgdGhyZWFkcy4gQXMgbWFuZGF0ZWQgYnkgUG9zaXgsIGl0IGlzIHRoZSByZXNwb25zaWJpbGl0eSBvZgorICogdGhlIGNhbGxlciBvZiBwdGhyZWFkX2tleV9kZWxldGUoKSB0byBwcm9wZXJseSByZWNsYWltIHRoZSBvYmplY3RzIHRoYXQKKyAqIHdlcmUgcG9pbnRlZCB0byBieSB0aGVzZSBkYXRhIGZpZWxkcyAoZWl0aGVyIGJlZm9yZSBvciBhZnRlciB0aGUgY2FsbCkuCisgKi8KKworI2RlZmluZSBUTFNNQVBfQklUUyAgICAgICAzMgorI2RlZmluZSBUTFNNQVBfV09SRFMgICAgICAoKEJJT05JQ19UTFNfU0xPVFMrVExTTUFQX0JJVFMtMSkvVExTTUFQX0JJVFMpCisjZGVmaW5lIFRMU01BUF9XT1JEKG0saykgIChtKS5tYXBbKGspL1RMU01BUF9CSVRTXQorI2RlZmluZSBUTFNNQVBfTUFTSyhrKSAgICAoMVUgPDwgKChrKSYoVExTTUFQX0JJVFMtMSkpKQorCitzdGF0aWMgaW5saW5lIGJvb2wgSXNWYWxpZFVzZXJLZXkocHRocmVhZF9rZXlfdCBrZXkpIHsKKyAgcmV0dXJuIChrZXkgPj0gVExTX1NMT1RfRklSU1RfVVNFUl9TTE9UICYmIGtleSA8IEJJT05JQ19UTFNfU0xPVFMpOworfQorCit0eXBlZGVmIHZvaWQgKCprZXlfZGVzdHJ1Y3Rvcl90KSh2b2lkKik7CisKK3N0cnVjdCB0bHNfbWFwX3QgeworICBib29sIGlzX2luaXRpYWxpemVkOworCisgIC8qIGJpdG1hcCBvZiBhbGxvY2F0ZWQga2V5cyAqLworICB1aW50MzJfdCBtYXBbVExTTUFQX1dPUkRTXTsKKworICBrZXlfZGVzdHJ1Y3Rvcl90IGtleV9kZXN0cnVjdG9yc1tCSU9OSUNfVExTX1NMT1RTXTsKK307CisKK2NsYXNzIFNjb3BlZFRsc01hcEFjY2VzcyB7CisgcHVibGljOgorICBTY29wZWRUbHNNYXBBY2Nlc3MoKSB7CisgICAgTG9jaygpOworCisgICAgLy8gSWYgdGhpcyBpcyB0aGUgZmlyc3QgdGltZSB0aGUgVExTIG1hcCBoYXMgYmVlbiBhY2Nlc3NlZCwKKyAgICAvLyBtYXJrIHRoZSBzbG90cyBiZWxvbmdpbmcgdG8gd2VsbC1rbm93biBrZXlzIGFzIGJlaW5nIGluIHVzZS4KKyAgICAvLyBUaGlzIGlzbid0IGN1cnJlbnRseSBuZWNlc3NhcnkgYmVjYXVzZSB0aGUgd2VsbC1rbm93biBrZXlzCisgICAgLy8gY2FuIG9ubHkgYmUgYWNjZXNzZWQgZGlyZWN0bHkgYnkgYmlvbmljIGl0c2VsZiwgZG8gbm90IGhhdmUKKyAgICAvLyBkZXN0cnVjdG9ycywgYW5kIGFsbCB0aGUgZnVuY3Rpb25zIHRoYXQgdG91Y2ggdGhlIFRMUyBtYXAKKyAgICAvLyBzdGFydCBhZnRlciB0aGUgbWF4aW11bSB3ZWxsLWtub3duIHNsb3QuCisgICAgaWYgKCFzX3Rsc19tYXBfLmlzX2luaXRpYWxpemVkKSB7CisgICAgICBmb3IgKHB0aHJlYWRfa2V5X3Qga2V5ID0gMDsga2V5IDwgVExTX1NMT1RfRklSU1RfVVNFUl9TTE9UOyArK2tleSkgeworICAgICAgICBTZXRJblVzZShrZXksIE5VTEwpOworICAgICAgfQorICAgICAgc190bHNfbWFwXy5pc19pbml0aWFsaXplZCA9IHRydWU7CisgICAgfQorICB9CisKKyAgflNjb3BlZFRsc01hcEFjY2VzcygpIHsKKyAgICBVbmxvY2soKTsKKyAgfQorCisgIGludCBDcmVhdGVLZXkocHRocmVhZF9rZXlfdCogcmVzdWx0LCB2b2lkICgqa2V5X2Rlc3RydWN0b3IpKHZvaWQqKSkgeworICAgIC8vIFRha2UgdGhlIGZpcnN0IHVuYWxsb2NhdGVkIGtleS4KKyAgICBmb3IgKGludCBrZXkgPSAwOyBrZXkgPCBCSU9OSUNfVExTX1NMT1RTOyArK2tleSkgeworICAgICAgaWYgKCFJc0luVXNlKGtleSkpIHsKKyAgICAgICAgU2V0SW5Vc2Uoa2V5LCBrZXlfZGVzdHJ1Y3Rvcik7CisgICAgICAgICpyZXN1bHQgPSBrZXk7CisgICAgICAgIHJldHVybiAwOworICAgICAgfQorICAgIH0KKworICAgIC8vIFdlIGhpdCBQVEhSRUFEX0tFWVNfTUFYLiBQT1NJWCBzYXlzIEVBR0FJTiBmb3IgdGhpcyBjYXNlLgorICAgIHJldHVybiBFQUdBSU47CisgIH0KKworICB2b2lkIERlbGV0ZUtleShwdGhyZWFkX2tleV90IGtleSkgeworICAgIFRMU01BUF9XT1JEKHNfdGxzX21hcF8sIGtleSkgJj0gflRMU01BUF9NQVNLKGtleSk7CisgICAgc190bHNfbWFwXy5rZXlfZGVzdHJ1Y3RvcnNba2V5XSA9IE5VTEw7CisgIH0KKworICBib29sIElzSW5Vc2UocHRocmVhZF9rZXlfdCBrZXkpIHsKKyAgICByZXR1cm4gKFRMU01BUF9XT1JEKHNfdGxzX21hcF8sIGtleSkgJiBUTFNNQVBfTUFTSyhrZXkpKSAhPSAwOworICB9CisKKyAgdm9pZCBTZXRJblVzZShwdGhyZWFkX2tleV90IGtleSwgdm9pZCAoKmtleV9kZXN0cnVjdG9yKSh2b2lkKikpIHsKKyAgICBUTFNNQVBfV09SRChzX3Rsc19tYXBfLCBrZXkpIHw9IFRMU01BUF9NQVNLKGtleSk7CisgICAgc190bHNfbWFwXy5rZXlfZGVzdHJ1Y3RvcnNba2V5XSA9IGtleV9kZXN0cnVjdG9yOworICB9CisKKyAgLy8gQ2FsbGVkIGZyb20gcHRocmVhZF9leGl0KCkgdG8gcmVtb3ZlIGFsbCBUTFMga2V5IGRhdGEKKyAgLy8gZnJvbSB0aGlzIHRocmVhZCdzIFRMUyBhcmVhLiBUaGlzIG11c3QgY2FsbCB0aGUgZGVzdHJ1Y3RvciBvZiBhbGwga2V5cworICAvLyB0aGF0IGhhdmUgYSBub24tTlVMTCBkYXRhIHZhbHVlIGFuZCBhIG5vbi1OVUxMIGRlc3RydWN0b3IuCisgIHZvaWQgQ2xlYW5BbGwoKSB7CisgICAgdm9pZCoqIHRscyA9ICh2b2lkKiopX19nZXRfdGxzKCk7CisKKyAgICAvLyBCZWNhdXNlIGRlc3RydWN0b3JzIGNhbiBkbyBmdW5reSB0aGluZ3MgbGlrZSBkZWxldGluZy9jcmVhdGluZyBvdGhlcgorICAgIC8vIGtleXMsIHdlIG5lZWQgdG8gaW1wbGVtZW50IHRoaXMgaW4gYSBsb29wLgorICAgIGZvciAoaW50IHJvdW5kcyA9IFBUSFJFQURfREVTVFJVQ1RPUl9JVEVSQVRJT05TOyByb3VuZHMgPiAwOyAtLXJvdW5kcykgeworICAgICAgc2l6ZV90IGNhbGxlZF9kZXN0cnVjdG9yX2NvdW50ID0gMDsKKyAgICAgIGZvciAoaW50IGtleSA9IDA7IGtleSA8IEJJT05JQ19UTFNfU0xPVFM7ICsra2V5KSB7CisgICAgICAgIGlmIChJc0luVXNlKGtleSkpIHsKKyAgICAgICAgICB2b2lkKiBkYXRhID0gdGxzW2tleV07CisgICAgICAgICAgdm9pZCAoKmtleV9kZXN0cnVjdG9yKSh2b2lkKikgPSBzX3Rsc19tYXBfLmtleV9kZXN0cnVjdG9yc1trZXldOworCisgICAgICAgICAgaWYgKGRhdGEgIT0gTlVMTCAmJiBrZXlfZGVzdHJ1Y3RvciAhPSBOVUxMKSB7CisgICAgICAgICAgICAvLyB3ZSBuZWVkIHRvIGNsZWFyIHRoZSBrZXkgZGF0YSBub3csIHRoaXMgd2lsbCBwcmV2ZW50IHRoZQorICAgICAgICAgICAgLy8gZGVzdHJ1Y3RvciAob3IgYSBsYXRlciBvbmUpIGZyb20gc2VlaW5nIHRoZSBvbGQgdmFsdWUgaWYKKyAgICAgICAgICAgIC8vIGl0IGNhbGxzIHB0aHJlYWRfZ2V0c3BlY2lmaWMoKSBmb3Igc29tZSBvZGQgcmVhc29uCisKKyAgICAgICAgICAgIC8vIHdlIGRvIG5vdCBkbyB0aGlzIGlmICdrZXlfZGVzdHJ1Y3RvciA9PSBOVUxMJyBqdXN0IGluIGNhc2UgYW5vdGhlcgorICAgICAgICAgICAgLy8gZGVzdHJ1Y3RvciBmdW5jdGlvbiBtaWdodCBiZSByZXNwb25zaWJsZSBmb3IgbWFudWFsbHkKKyAgICAgICAgICAgIC8vIHJlbGVhc2luZyB0aGUgY29ycmVzcG9uZGluZyBkYXRhLgorICAgICAgICAgICAgdGxzW2tleV0gPSBOVUxMOworCisgICAgICAgICAgICAvLyBiZWNhdXNlIHRoZSBkZXN0cnVjdG9yIGlzIGZyZWUgdG8gY2FsbCBwdGhyZWFkX2tleV9jcmVhdGUKKyAgICAgICAgICAgIC8vIGFuZC9vciBwdGhyZWFkX2tleV9kZWxldGUsIHdlIG5lZWQgdG8gdGVtcG9yYXJpbHkgdW5sb2NrCisgICAgICAgICAgICAvLyB0aGUgVExTIG1hcAorICAgICAgICAgICAgVW5sb2NrKCk7CisgICAgICAgICAgICAoKmtleV9kZXN0cnVjdG9yKShkYXRhKTsKKyAgICAgICAgICAgIExvY2soKTsKKyAgICAgICAgICAgICsrY2FsbGVkX2Rlc3RydWN0b3JfY291bnQ7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9CisKKyAgICAgIC8vIElmIHdlIGRpZG4ndCBjYWxsIGFueSBkZXN0cnVjdG9ycywgdGhlcmUgaXMgbm8gbmVlZCB0byBjaGVjayB0aGUgVExTIGRhdGEgYWdhaW4uCisgICAgICBpZiAoY2FsbGVkX2Rlc3RydWN0b3JfY291bnQgPT0gMCkgeworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICB9CisgIH0KKworIHByaXZhdGU6CisgIHN0YXRpYyB0bHNfbWFwX3Qgc190bHNfbWFwXzsKKyAgc3RhdGljIHB0aHJlYWRfbXV0ZXhfdCBzX3Rsc19tYXBfbG9ja187CisKKyAgdm9pZCBMb2NrKCkgeworICAgIHB0aHJlYWRfbXV0ZXhfbG9jaygmc190bHNfbWFwX2xvY2tfKTsKKyAgfQorCisgIHZvaWQgVW5sb2NrKCkgeworICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZzX3Rsc19tYXBfbG9ja18pOworICB9Cit9OworCitfX0xJQkNfSElEREVOX18gdGxzX21hcF90IFNjb3BlZFRsc01hcEFjY2Vzczo6c190bHNfbWFwXzsKK19fTElCQ19ISURERU5fXyBwdGhyZWFkX211dGV4X3QgU2NvcGVkVGxzTWFwQWNjZXNzOjpzX3Rsc19tYXBfbG9ja187CisKK19fTElCQ19ISURERU5fXyB2b2lkIHB0aHJlYWRfa2V5X2NsZWFuX2FsbCgpIHsKKyAgU2NvcGVkVGxzTWFwQWNjZXNzIHRsc19tYXA7CisgIHRsc19tYXAuQ2xlYW5BbGwoKTsKK30KKworaW50IHB0aHJlYWRfa2V5X2NyZWF0ZShwdGhyZWFkX2tleV90KiBrZXksIHZvaWQgKCprZXlfZGVzdHJ1Y3Rvcikodm9pZCopKSB7CisgIFNjb3BlZFRsc01hcEFjY2VzcyB0bHNfbWFwOworICByZXR1cm4gdGxzX21hcC5DcmVhdGVLZXkoa2V5LCBrZXlfZGVzdHJ1Y3Rvcik7Cit9CisKKy8vIERlbGV0ZXMgYSBwdGhyZWFkX2tleV90LiBub3RlIHRoYXQgdGhlIHN0YW5kYXJkIG1hbmRhdGVzIHRoYXQgdGhpcyBkb2VzCisvLyBub3QgY2FsbCB0aGUgZGVzdHJ1Y3RvcnMgZm9yIG5vbi1OVUxMIGtleSB2YWx1ZXMuIEluc3RlYWQsIGl0IGlzIHRoZQorLy8gcmVzcG9uc2liaWxpdHkgb2YgdGhlIGNhbGxlciB0byBwcm9wZXJseSBkaXNwb3NlIG9mIHRoZSBjb3JyZXNwb25kaW5nIGRhdGEKKy8vIGFuZCByZXNvdXJjZXMsIHVzaW5nIGFueSBtZWFucyBpdCBmaW5kcyBzdWl0YWJsZS4KK2ludCBwdGhyZWFkX2tleV9kZWxldGUocHRocmVhZF9rZXlfdCBrZXkpIHsKKyAgU2NvcGVkVGxzTWFwQWNjZXNzIHRsc19tYXA7CisKKyAgaWYgKCFJc1ZhbGlkVXNlcktleShrZXkpIHx8ICF0bHNfbWFwLklzSW5Vc2Uoa2V5KSkgeworICAgIHJldHVybiBFSU5WQUw7CisgIH0KKworICAvLyBDbGVhciB2YWx1ZSBpbiBhbGwgdGhyZWFkcy4KKyAgcHRocmVhZF9tdXRleF9sb2NrKCZnVGhyZWFkTGlzdExvY2spOworICBmb3IgKHB0aHJlYWRfaW50ZXJuYWxfdCogIHQgPSBnVGhyZWFkTGlzdDsgdCAhPSBOVUxMOyB0ID0gdC0+bmV4dCkgeworICAgIC8vIFNraXAgem9tYmllIHRocmVhZHMuIFRoZXkgZG9uJ3QgaGF2ZSBhIHZhbGlkIFRMUyBhcmVhIGFueSBtb3JlLgorICAgIC8vIFNpbWlsYXJseSwgaXQgaXMgcG9zc2libGUgdG8gaGF2ZSB0LT50bHMgPT0gTlVMTCBmb3IgdGhyZWFkcyB0aGF0CisgICAgLy8gd2VyZSBqdXN0IHJlY2VudGx5IGNyZWF0ZWQgdGhyb3VnaCBwdGhyZWFkX2NyZWF0ZSgpIGJ1dCB3aG9zZQorICAgIC8vIHN0YXJ0dXAgdHJhbXBvbGluZSAoX190aHJlYWRfZW50cnkpIGhhc24ndCBiZWVuIHJ1biB5ZXQgYnkgdGhlCisgICAgLy8gc2NoZWR1bGVyLiB0LT50bHMgd2lsbCBhbHNvIGJlIE5VTEwgYWZ0ZXIgYSB0aHJlYWQncyBzdGFjayBoYXMgYmVlbgorICAgIC8vIHVubWFwcGVkIGJ1dCBiZWZvcmUgdGhlIG9uZ29pbmcgcHRocmVhZF9qb2luKCkgaXMgZmluaXNoZWQuCisgICAgaWYgKCh0LT5hdHRyLmZsYWdzICYgUFRIUkVBRF9BVFRSX0ZMQUdfWk9NQklFKSB8fCB0LT50bHMgPT0gTlVMTCkgeworICAgICAgY29udGludWU7CisgICAgfQorCisgICAgdC0+dGxzW2tleV0gPSBOVUxMOworICB9CisgIHRsc19tYXAuRGVsZXRlS2V5KGtleSk7CisKKyAgcHRocmVhZF9tdXRleF91bmxvY2soJmdUaHJlYWRMaXN0TG9jayk7CisgIHJldHVybiAwOworfQorCit2b2lkKiBwdGhyZWFkX2dldHNwZWNpZmljKHB0aHJlYWRfa2V5X3Qga2V5KSB7CisgIGlmICghSXNWYWxpZFVzZXJLZXkoa2V5KSkgeworICAgIHJldHVybiBOVUxMOworICB9CisKKyAgLy8gRm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMsIHdlIGRvIG5vdCBsb2NrL3VubG9jayB0aGUgZ2xvYmFsIFRMUyBtYXAKKyAgLy8gdG8gY2hlY2sgdGhhdCB0aGUga2V5IGlzIHByb3Blcmx5IGFsbG9jYXRlZC4gSWYgdGhlIGtleSB3YXMgbm90CisgIC8vIGFsbG9jYXRlZCwgdGhlIHZhbHVlIHJlYWQgZnJvbSB0aGUgVExTIHNob3VsZCBhbHdheXMgYmUgTlVMTAorICAvLyBkdWUgdG8gcHRocmVhZF9rZXlfZGVsZXRlKCkgY2xlYXJpbmcgdGhlIHZhbHVlcyBmb3IgYWxsIHRocmVhZHMuCisgIHJldHVybiAodm9pZCAqKSgoKHVuc2lnbmVkICopX19nZXRfdGxzKCkpW2tleV0pOworfQorCitpbnQgcHRocmVhZF9zZXRzcGVjaWZpYyhwdGhyZWFkX2tleV90IGtleSwgY29uc3Qgdm9pZCogcHRyKSB7CisgIFNjb3BlZFRsc01hcEFjY2VzcyB0bHNfbWFwOworCisgIGlmICghSXNWYWxpZFVzZXJLZXkoa2V5KSB8fCAhdGxzX21hcC5Jc0luVXNlKGtleSkpIHsKKyAgICByZXR1cm4gRUlOVkFMOworICB9CisKKyAgKCh1aW50MzJfdCAqKV9fZ2V0X3RscygpKVtrZXldID0gKHVpbnQzMl90KXB0cjsKKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9wdGhyZWFkX2tpbGwuY3BwIGIvbGliYy9iaW9uaWMvcHRocmVhZF9raWxsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NGY3MWVlCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9iaW9uaWMvcHRocmVhZF9raWxsLmNwcApAQCAtMCwwICsxLDU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorCisjaW5jbHVkZSAiRXJybm9SZXN0b3Jlci5oIgorI2luY2x1ZGUgInB0aHJlYWRfYWNjZXNzb3IuaCIKKworZXh0ZXJuICJDIiBpbnQgdGdraWxsKGludCB0Z2lkLCBpbnQgdGlkLCBpbnQgc2lnKTsKKworaW50IHB0aHJlYWRfa2lsbChwdGhyZWFkX3QgdCwgaW50IHNpZykgeworICBFcnJub1Jlc3RvcmVyIGVycm5vX3Jlc3RvcmVyOworCisgIHB0aHJlYWRfYWNjZXNzb3IgdGhyZWFkKHQpOworICBpZiAodGhyZWFkLmdldCgpID09IE5VTEwpIHsKKyAgICByZXR1cm4gRVNSQ0g7CisgIH0KKworICAvLyBUaGVyZSdzIGEgcmFjZSBoZXJlLCBidXQgaXQncyBvbmUgd2Ugc2hhcmUgd2l0aCBhbGwgb3RoZXIgQyBsaWJyYXJpZXMuCisgIHBpZF90IHRpZCA9IHRocmVhZC0+dGlkOworICB0aHJlYWQuVW5sb2NrKCk7CisKKyAgaW50IHJjID0gdGdraWxsKGdldHBpZCgpLCB0aWQsIHNpZyk7CisgIGlmIChyYyA9PSAtMSkgeworICAgIHJldHVybiBlcnJubzsKKyAgfQorCisgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvcHRocmVhZF9zZWxmLmNwcCBiL2xpYmMvYmlvbmljL3B0aHJlYWRfc2VsZi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGE4M2YwNwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYmlvbmljL3B0aHJlYWRfc2VsZi5jcHAKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAicHRocmVhZF9pbnRlcm5hbC5oIgorCitwdGhyZWFkX3QgcHRocmVhZF9zZWxmKCkgeworICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxwdGhyZWFkX3Q+KF9fZ2V0X3RocmVhZCgpKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL3B0aHJlYWRfc2V0bmFtZV9ucC5jcHAgYi9saWJjL2Jpb25pYy9wdGhyZWFkX3NldG5hbWVfbnAuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwZWNhY2UKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2Jpb25pYy9wdGhyZWFkX3NldG5hbWVfbnAuY3BwCkBAIC0wLDAgKzEsODcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHB0aHJlYWQuaD4KKworI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4gLy8gRm9yIHNucHJpbnRmLgorI2luY2x1ZGUgPHN5cy9wcmN0bC5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKKyNpbmNsdWRlICJwdGhyZWFkX2FjY2Vzc29yLmgiCisjaW5jbHVkZSAicHRocmVhZF9pbnRlcm5hbC5oIgorI2luY2x1ZGUgInByaXZhdGUvRXJybm9SZXN0b3Jlci5oIgorCisvLyBUaGlzIHZhbHVlIGlzIG5vdCBleHBvcnRlZCBieSBrZXJuZWwgaGVhZGVycy4KKyNkZWZpbmUgTUFYX1RBU0tfQ09NTV9MRU4gMTYKKyNkZWZpbmUgVEFTS19DT01NX0ZNVCAiL3Byb2Mvc2VsZi90YXNrLyVkL2NvbW0iCisKK2ludCBwdGhyZWFkX3NldG5hbWVfbnAocHRocmVhZF90IHQsIGNvbnN0IGNoYXIqIHRocmVhZF9uYW1lKSB7CisgIEVycm5vUmVzdG9yZXIgZXJybm9fcmVzdG9yZXI7CisKKyAgaWYgKHRocmVhZF9uYW1lID09IE5VTEwpIHsKKyAgICByZXR1cm4gRUlOVkFMOworICB9CisKKyAgc2l6ZV90IHRocmVhZF9uYW1lX2xlbiA9IHN0cmxlbih0aHJlYWRfbmFtZSk7CisgIGlmICh0aHJlYWRfbmFtZV9sZW4gPj0gTUFYX1RBU0tfQ09NTV9MRU4pIHsKKyAgICByZXR1cm4gRVJBTkdFOworICB9CisKKyAgLy8gQ2hhbmdpbmcgb3VyIG93biBuYW1lIGlzIGFuIGVhc3kgc3BlY2lhbCBjYXNlLgorICBpZiAodCA9PSBwdGhyZWFkX3NlbGYoKSkgeworICAgIHJldHVybiBwcmN0bChQUl9TRVRfTkFNRSwgdGhyZWFkX25hbWUpID8gZXJybm8gOiAwOworICB9CisKKyAgLy8gV2UgaGF2ZSB0byBjaGFuZ2UgYW5vdGhlciB0aHJlYWQncyBuYW1lLgorICBwaWRfdCB0aWQgPSAwOworICB7CisgICAgcHRocmVhZF9hY2Nlc3NvciB0aHJlYWQodCk7CisgICAgaWYgKHRocmVhZC5nZXQoKSA9PSBOVUxMKSB7CisgICAgICByZXR1cm4gRVNSQ0g7CisgICAgfQorICAgIHRpZCA9IHRocmVhZC0+dGlkOworICB9CisgIGNoYXIgY29tbV9uYW1lW3NpemVvZihUQVNLX0NPTU1fRk1UKSArIDhdOworICBzbnByaW50Zihjb21tX25hbWUsIHNpemVvZihjb21tX25hbWUpLCBUQVNLX0NPTU1fRk1ULCB0aWQpOworICBpbnQgZmQgPSBvcGVuKGNvbW1fbmFtZSwgT19XUk9OTFkpOworICBpZiAoZmQgPT0gLTEpIHsKKyAgICByZXR1cm4gZXJybm87CisgIH0KKyAgc3NpemVfdCBuID0gVEVNUF9GQUlMVVJFX1JFVFJZKHdyaXRlKGZkLCB0aHJlYWRfbmFtZSwgdGhyZWFkX25hbWVfbGVuKSk7CisgIGNsb3NlKGZkKTsKKworICBpZiAobiA8IDApIHsKKyAgICByZXR1cm4gZXJybm87CisgIH0gZWxzZSBpZiAobiAhPSBzdGF0aWNfY2FzdDxzc2l6ZV90Pih0aHJlYWRfbmFtZV9sZW4pKSB7CisgICAgcmV0dXJuIEVJTzsKKyAgfQorICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL3B0aHJlYWRfc2V0c2NoZWRwYXJhbS5jcHAgYi9saWJjL2Jpb25pYy9wdGhyZWFkX3NldHNjaGVkcGFyYW0uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzODNjY2EKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2Jpb25pYy9wdGhyZWFkX3NldHNjaGVkcGFyYW0uY3BwCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPGVycm5vLmg+CisKKyNpbmNsdWRlICJFcnJub1Jlc3RvcmVyLmgiCisjaW5jbHVkZSAicHRocmVhZF9hY2Nlc3Nvci5oIgorCitpbnQgcHRocmVhZF9zZXRzY2hlZHBhcmFtKHB0aHJlYWRfdCB0LCBpbnQgcG9saWN5LCBzdHJ1Y3Qgc2NoZWRfcGFyYW0gY29uc3QqIHBhcmFtKSB7CisgIEVycm5vUmVzdG9yZXIgZXJybm9fcmVzdG9yZXI7CisKKyAgcHRocmVhZF9hY2Nlc3NvciB0aHJlYWQodCk7CisgIGlmICh0aHJlYWQuZ2V0KCkgPT0gTlVMTCkgeworICAgIHJldHVybiBFU1JDSDsKKyAgfQorCisgIGludCByYyA9IHNjaGVkX3NldHNjaGVkdWxlcih0aHJlYWQtPnRpZCwgcG9saWN5LCBwYXJhbSk7CisgIGlmIChyYyA9PSAtMSkgeworICAgIHJldHVybiBlcnJubzsKKyAgfQorICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL3B0aHJlYWRfc2lnbWFzay5jcHAgYi9saWJjL2Jpb25pYy9wdGhyZWFkX3NpZ21hc2suY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0ZTFiMmIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2Jpb25pYy9wdGhyZWFkX3NpZ21hc2suY3BwCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8cHRocmVhZC5oPgorI2luY2x1ZGUgPHNpZ25hbC5oPgorCisjaW5jbHVkZSAicHJpdmF0ZS9FcnJub1Jlc3RvcmVyLmgiCisjaW5jbHVkZSAicHJpdmF0ZS9rZXJuZWxfc2lnc2V0X3QuaCIKKworZXh0ZXJuICJDIiBpbnQgX19ydF9zaWdwcm9jbWFzayhpbnQsIGNvbnN0IGtlcm5lbF9zaWdzZXRfdCosIGtlcm5lbF9zaWdzZXRfdCosIHNpemVfdCk7CisKK2ludCBwdGhyZWFkX3NpZ21hc2soaW50IGhvdywgY29uc3Qgc2lnc2V0X3QqIGlzZXQsIHNpZ3NldF90KiBvc2V0KSB7CisgIEVycm5vUmVzdG9yZXIgZXJybm9fcmVzdG9yZXI7CisKKyAgLy8gJ2luX3NldF9wdHInIGlzIHRoZSBzZWNvbmQgcGFyYW1ldGVyIHRvIF9fcnRfc2lncHJvY21hc2suIEl0IG11c3QgYmUgTlVMTAorICAvLyBpZiAnc2V0JyBpcyBOVUxMIHRvIGVuc3VyZSBjb3JyZWN0IHNlbWFudGljcyAod2hpY2ggaW4gdGhpcyBjYXNlIHdvdWxkCisgIC8vIGJlIHRvIGlnbm9yZSAnaG93JyBhbmQgcmV0dXJuIHRoZSBjdXJyZW50IHNpZ25hbCBzZXQgaW50byAnb3NldCcpLgorICBrZXJuZWxfc2lnc2V0X3QgaW5fc2V0OworICBrZXJuZWxfc2lnc2V0X3QqIGluX3NldF9wdHIgPSBOVUxMOworICBpZiAoaXNldCAhPSBOVUxMKSB7CisgICAgaW5fc2V0LnNldChpc2V0KTsKKyAgICBpbl9zZXRfcHRyID0gJmluX3NldDsKKyAgfQorCisgIGtlcm5lbF9zaWdzZXRfdCBvdXRfc2V0OworICBpZiAoX19ydF9zaWdwcm9jbWFzayhob3csIGluX3NldF9wdHIsICZvdXRfc2V0LCBzaXplb2Yob3V0X3NldCkpID09IC0xKSB7CisgICAgcmV0dXJuIGVycm5vOworICB9CisKKyAgaWYgKG9zZXQgIT0gTlVMTCkgeworICAgICpvc2V0ID0gb3V0X3NldC5iaW9uaWM7CisgIH0KKworICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdW5pc3RkL3B0c25hbWUuYyBiL2xpYmMvYmlvbmljL3B0c25hbWUuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbGliYy91bmlzdGQvcHRzbmFtZS5jCnJlbmFtZSB0byBsaWJjL2Jpb25pYy9wdHNuYW1lLmMKZGlmZiAtLWdpdCBhL2xpYmMvdW5pc3RkL3B0c25hbWVfci5jIGIvbGliYy9iaW9uaWMvcHRzbmFtZV9yLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGxpYmMvdW5pc3RkL3B0c25hbWVfci5jCnJlbmFtZSB0byBsaWJjL2Jpb25pYy9wdHNuYW1lX3IuYwpkaWZmIC0tZ2l0IGEvbGliYy91bmlzdGQvcHdyaXRlLmMgYi9saWJjL2Jpb25pYy9wd3JpdGUuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbGliYy91bmlzdGQvcHdyaXRlLmMKcmVuYW1lIHRvIGxpYmMvYmlvbmljL3B3cml0ZS5jCmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9yYWlzZS5jcHAgYi9saWJjL2Jpb25pYy9yYWlzZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjY5ZDkwYgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYmlvbmljL3JhaXNlLmNwcApAQCAtMCwwICsxLDM4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxwdGhyZWFkLmg+CisKK2ludCByYWlzZShpbnQgc2lnKSB7CisgIGludCByYyA9IHB0aHJlYWRfa2lsbChwdGhyZWFkX3NlbGYoKSwgc2lnKTsKKyAgaWYgKHJjICE9IDApIHsKKyAgICBlcnJubyA9IHJjOworICAgIHJldHVybiAtMTsKKyAgfQorICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL3JlYWxwYXRoLmMgYi9saWJjL2Jpb25pYy9yZWFscGF0aC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0Y2I4NDdiLi4wMDAwMDAwCi0tLSBhL2xpYmMvYmlvbmljL3JlYWxwYXRoLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxOTAgKzAsMCBAQAotLyoJJE9wZW5CU0Q6IHJlYWxwYXRoLmMsdiAxLjEzIDIwMDUvMDgvMDggMDg6MDU6MzcgZXNwaWUgRXhwICQgKi8KLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDMgQ29uc3RhbnRpbiBTLiBTdmludHNvZmYgPGtvc3Rpa0BpY2x1Yi5uc3UucnU+Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBUaGUgbmFtZXMgb2YgdGhlIGF1dGhvcnMgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZQotICogICAgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuCi0gKiAgICBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KLSNpbmNsdWRlIDxzeXMvc3RhdC5oPgotCi0jaW5jbHVkZSA8ZXJybm8uaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLQotLyoKLSAqIGNoYXIgKnJlYWxwYXRoKGNvbnN0IGNoYXIgKnBhdGgsIGNoYXIgcmVzb2x2ZWRbUEFUSF9NQVhdKTsKLSAqCi0gKiBGaW5kIHRoZSByZWFsIG5hbWUgb2YgcGF0aCwgYnkgcmVtb3ZpbmcgYWxsICIuIiwgIi4uIiBhbmQgc3ltbGluawotICogY29tcG9uZW50cy4gIFJldHVybnMgKHJlc29sdmVkKSBvbiBzdWNjZXNzLCBvciAoTlVMTCkgb24gZmFpbHVyZSwKLSAqIGluIHdoaWNoIGNhc2UgdGhlIHBhdGggd2hpY2ggY2F1c2VkIHRyb3VibGUgaXMgbGVmdCBpbiAocmVzb2x2ZWQpLgotICovCi1jaGFyICoKLXJlYWxwYXRoKGNvbnN0IGNoYXIgKnBhdGgsIGNoYXIgcmVzb2x2ZWRbUEFUSF9NQVhdKQotewotCXN0cnVjdCBzdGF0IHNiOwotCWNoYXIgKnAsICpxLCAqczsKLQlzaXplX3QgbGVmdF9sZW4sIHJlc29sdmVkX2xlbjsKLQl1bnNpZ25lZCBzeW1saW5rczsKLQlpbnQgc2Vycm5vLCBzbGVuOwotCWNoYXIgbGVmdFtQQVRIX01BWF0sIG5leHRfdG9rZW5bUEFUSF9NQVhdLCBzeW1saW5rW1BBVEhfTUFYXTsKLQotCXNlcnJubyA9IGVycm5vOwotCXN5bWxpbmtzID0gMDsKLQlpZiAocGF0aFswXSA9PSAnLycpIHsKLQkJcmVzb2x2ZWRbMF0gPSAnLyc7Ci0JCXJlc29sdmVkWzFdID0gJ1wwJzsKLQkJaWYgKHBhdGhbMV0gPT0gJ1wwJykKLQkJCXJldHVybiAocmVzb2x2ZWQpOwotCQlyZXNvbHZlZF9sZW4gPSAxOwotCQlsZWZ0X2xlbiA9IHN0cmxjcHkobGVmdCwgcGF0aCArIDEsIHNpemVvZihsZWZ0KSk7Ci0JfSBlbHNlIHsKLQkJaWYgKGdldGN3ZChyZXNvbHZlZCwgUEFUSF9NQVgpID09IE5VTEwpIHsKLQkJCXN0cmxjcHkocmVzb2x2ZWQsICIuIiwgUEFUSF9NQVgpOwotCQkJcmV0dXJuIChOVUxMKTsKLQkJfQotCQlyZXNvbHZlZF9sZW4gPSBzdHJsZW4ocmVzb2x2ZWQpOwotCQlsZWZ0X2xlbiA9IHN0cmxjcHkobGVmdCwgcGF0aCwgc2l6ZW9mKGxlZnQpKTsKLQl9Ci0JaWYgKGxlZnRfbGVuID49IHNpemVvZihsZWZ0KSB8fCByZXNvbHZlZF9sZW4gPj0gUEFUSF9NQVgpIHsKLQkJZXJybm8gPSBFTkFNRVRPT0xPTkc7Ci0JCXJldHVybiAoTlVMTCk7Ci0JfQotCi0JLyoKLQkgKiBJdGVyYXRlIG92ZXIgcGF0aCBjb21wb25lbnRzIGluIGBsZWZ0Jy4KLQkgKi8KLQl3aGlsZSAobGVmdF9sZW4gIT0gMCkgewotCQkvKgotCQkgKiBFeHRyYWN0IHRoZSBuZXh0IHBhdGggY29tcG9uZW50IGFuZCBhZGp1c3QgYGxlZnQnCi0JCSAqIGFuZCBpdHMgbGVuZ3RoLgotCQkgKi8KLQkJcCA9IHN0cmNocihsZWZ0LCAnLycpOwotCQlzID0gcCA/IHAgOiBsZWZ0ICsgbGVmdF9sZW47Ci0JCWlmIChzIC0gbGVmdCA+PSBzaXplb2YobmV4dF90b2tlbikpIHsKLQkJCWVycm5vID0gRU5BTUVUT09MT05HOwotCQkJcmV0dXJuIChOVUxMKTsKLQkJfQotCQltZW1jcHkobmV4dF90b2tlbiwgbGVmdCwgcyAtIGxlZnQpOwotCQluZXh0X3Rva2VuW3MgLSBsZWZ0XSA9ICdcMCc7Ci0JCWxlZnRfbGVuIC09IHMgLSBsZWZ0OwotCQlpZiAocCAhPSBOVUxMKQotCQkJbWVtbW92ZShsZWZ0LCBzICsgMSwgbGVmdF9sZW4gKyAxKTsKLQkJaWYgKHJlc29sdmVkW3Jlc29sdmVkX2xlbiAtIDFdICE9ICcvJykgewotCQkJaWYgKHJlc29sdmVkX2xlbiArIDEgPj0gUEFUSF9NQVgpIHsKLQkJCQllcnJubyA9IEVOQU1FVE9PTE9ORzsKLQkJCQlyZXR1cm4gKE5VTEwpOwotCQkJfQotCQkJcmVzb2x2ZWRbcmVzb2x2ZWRfbGVuKytdID0gJy8nOwotCQkJcmVzb2x2ZWRbcmVzb2x2ZWRfbGVuXSA9ICdcMCc7Ci0JCX0KLQkJaWYgKG5leHRfdG9rZW5bMF0gPT0gJ1wwJykKLQkJCWNvbnRpbnVlOwotCQllbHNlIGlmIChzdHJjbXAobmV4dF90b2tlbiwgIi4iKSA9PSAwKQotCQkJY29udGludWU7Ci0JCWVsc2UgaWYgKHN0cmNtcChuZXh0X3Rva2VuLCAiLi4iKSA9PSAwKSB7Ci0JCQkvKgotCQkJICogU3RyaXAgdGhlIGxhc3QgcGF0aCBjb21wb25lbnQgZXhjZXB0IHdoZW4gd2UgaGF2ZQotCQkJICogc2luZ2xlICIvIgotCQkJICovCi0JCQlpZiAocmVzb2x2ZWRfbGVuID4gMSkgewotCQkJCXJlc29sdmVkW3Jlc29sdmVkX2xlbiAtIDFdID0gJ1wwJzsKLQkJCQlxID0gc3RycmNocihyZXNvbHZlZCwgJy8nKSArIDE7Ci0JCQkJKnEgPSAnXDAnOwotCQkJCXJlc29sdmVkX2xlbiA9IHEgLSByZXNvbHZlZDsKLQkJCX0KLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJLyoKLQkJICogQXBwZW5kIHRoZSBuZXh0IHBhdGggY29tcG9uZW50IGFuZCBsc3RhdCgpIGl0LiBJZgotCQkgKiBsc3RhdCgpIGZhaWxzIHdlIHN0aWxsIGNhbiByZXR1cm4gc3VjY2Vzc2Z1bGx5IGlmCi0JCSAqIHRoZXJlIGFyZSBubyBtb3JlIHBhdGggY29tcG9uZW50cyBsZWZ0LgotCQkgKi8KLQkJcmVzb2x2ZWRfbGVuID0gc3RybGNhdChyZXNvbHZlZCwgbmV4dF90b2tlbiwgUEFUSF9NQVgpOwotCQlpZiAocmVzb2x2ZWRfbGVuID49IFBBVEhfTUFYKSB7Ci0JCQllcnJubyA9IEVOQU1FVE9PTE9ORzsKLQkJCXJldHVybiAoTlVMTCk7Ci0JCX0KLQkJaWYgKGxzdGF0KHJlc29sdmVkLCAmc2IpICE9IDApIHsKLQkJCWlmIChlcnJubyA9PSBFTk9FTlQgJiYgcCA9PSBOVUxMKSB7Ci0JCQkJZXJybm8gPSBzZXJybm87Ci0JCQkJcmV0dXJuIChyZXNvbHZlZCk7Ci0JCQl9Ci0JCQlyZXR1cm4gKE5VTEwpOwotCQl9Ci0JCWlmIChTX0lTTE5LKHNiLnN0X21vZGUpKSB7Ci0JCQlpZiAoc3ltbGlua3MrKyA+IE1BWFNZTUxJTktTKSB7Ci0JCQkJZXJybm8gPSBFTE9PUDsKLQkJCQlyZXR1cm4gKE5VTEwpOwotCQkJfQotCQkJc2xlbiA9IHJlYWRsaW5rKHJlc29sdmVkLCBzeW1saW5rLCBzaXplb2Yoc3ltbGluaykgLSAxKTsKLQkJCWlmIChzbGVuIDwgMCkKLQkJCQlyZXR1cm4gKE5VTEwpOwotCQkJc3ltbGlua1tzbGVuXSA9ICdcMCc7Ci0JCQlpZiAoc3ltbGlua1swXSA9PSAnLycpIHsKLQkJCQlyZXNvbHZlZFsxXSA9IDA7Ci0JCQkJcmVzb2x2ZWRfbGVuID0gMTsKLQkJCX0gZWxzZSBpZiAocmVzb2x2ZWRfbGVuID4gMSkgewotCQkJCS8qIFN0cmlwIHRoZSBsYXN0IHBhdGggY29tcG9uZW50LiAqLwotCQkJCXJlc29sdmVkW3Jlc29sdmVkX2xlbiAtIDFdID0gJ1wwJzsKLQkJCQlxID0gc3RycmNocihyZXNvbHZlZCwgJy8nKSArIDE7Ci0JCQkJKnEgPSAnXDAnOwotCQkJCXJlc29sdmVkX2xlbiA9IHEgLSByZXNvbHZlZDsKLQkJCX0KLQotCQkJLyoKLQkJCSAqIElmIHRoZXJlIGFyZSBhbnkgcGF0aCBjb21wb25lbnRzIGxlZnQsIHRoZW4KLQkJCSAqIGFwcGVuZCB0aGVtIHRvIHN5bWxpbmsuIFRoZSByZXN1bHQgaXMgcGxhY2VkCi0JCQkgKiBpbiBgbGVmdCcuCi0JCQkgKi8KLQkJCWlmIChwICE9IE5VTEwpIHsKLQkJCQlpZiAoc3ltbGlua1tzbGVuIC0gMV0gIT0gJy8nKSB7Ci0JCQkJCWlmIChzbGVuICsgMSA+PSBzaXplb2Yoc3ltbGluaykpIHsKLQkJCQkJCWVycm5vID0gRU5BTUVUT09MT05HOwotCQkJCQkJcmV0dXJuIChOVUxMKTsKLQkJCQkJfQotCQkJCQlzeW1saW5rW3NsZW5dID0gJy8nOwotCQkJCQlzeW1saW5rW3NsZW4gKyAxXSA9IDA7Ci0JCQkJfQotCQkJCWxlZnRfbGVuID0gc3RybGNhdChzeW1saW5rLCBsZWZ0LCBzaXplb2YobGVmdCkpOwotCQkJCWlmIChsZWZ0X2xlbiA+PSBzaXplb2YobGVmdCkpIHsKLQkJCQkJZXJybm8gPSBFTkFNRVRPT0xPTkc7Ci0JCQkJCXJldHVybiAoTlVMTCk7Ci0JCQkJfQotCQkJfQotCQkJbGVmdF9sZW4gPSBzdHJsY3B5KGxlZnQsIHN5bWxpbmssIHNpemVvZihsZWZ0KSk7Ci0JCX0KLQl9Ci0KLQkvKgotCSAqIFJlbW92ZSB0cmFpbGluZyBzbGFzaCBleGNlcHQgd2hlbiB0aGUgcmVzb2x2ZWQgcGF0aG5hbWUKLQkgKiBpcyBhIHNpbmdsZSAiLyIuCi0JICovCi0JaWYgKHJlc29sdmVkX2xlbiA+IDEgJiYgcmVzb2x2ZWRbcmVzb2x2ZWRfbGVuIC0gMV0gPT0gJy8nKQotCQlyZXNvbHZlZFtyZXNvbHZlZF9sZW4gLSAxXSA9ICdcMCc7Ci0JcmV0dXJuIChyZXNvbHZlZCk7Ci19CmRpZmYgLS1naXQgYS9saWJjL3VuaXN0ZC9yZWJvb3QuYyBiL2xpYmMvYmlvbmljL3JlYm9vdC5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBsaWJjL3VuaXN0ZC9yZWJvb3QuYwpyZW5hbWUgdG8gbGliYy9iaW9uaWMvcmVib290LmMKZGlmZiAtLWdpdCBhL2xpYmMvdW5pc3RkL3JlY3YuYyBiL2xpYmMvYmlvbmljL3JlY3YuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbGliYy91bmlzdGQvcmVjdi5jCnJlbmFtZSB0byBsaWJjL2Jpb25pYy9yZWN2LmMKZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL3J1bGVzLmphbSBiL2xpYmMvYmlvbmljL3J1bGVzLmphbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjE5NTI2Yi4uMDAwMDAwMAotLS0gYS9saWJjL2Jpb25pYy9ydWxlcy5qYW0KKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1OT19MT0NBTF9TUkMgPSBtYWxsb2NfbGVhay5jIDsKZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL3NicmsuY3BwIGIvbGliYy9iaW9uaWMvc2Jyay5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmM5YjUzNAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYmlvbmljL3NicmsuY3BwCkBAIC0wLDAgKzEsNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisKKy8qIFNoYXJlZCB3aXRoIGJyay5jLiAqLworZXh0ZXJuICJDIiB7CisgIHZvaWQqIF9fYmlvbmljX2JyazsgLy8gVE9ETzogc2hvdWxkIGJlIF9fTElCQ19ISURERU5fXyBidXQgYWNjaWRlbnRhbGx5IGV4cG9ydGVkIGJ5IE5ESyA6LSgKK30KKwordm9pZCogc2JyayhwdHJkaWZmX3QgaW5jcmVtZW50KSB7CisgIGlmIChfX2Jpb25pY19icmsgPT0gTlVMTCkgeworICAgIF9fYmlvbmljX2JyayA9IF9fYnJrKE5VTEwpOworICB9CisKKyAgdm9pZCogb3JpZ2luYWxfYnJrID0gX19iaW9uaWNfYnJrOworICB2b2lkKiBkZXNpcmVkX2JyayA9ICh2b2lkKikgKCh1aW50cHRyX3QpIG9yaWdpbmFsX2JyayArIGluY3JlbWVudCk7CisKKyAgdm9pZCogbmV3X2JyayA9IF9fYnJrKGRlc2lyZWRfYnJrKTsKKyAgaWYgKG5ld19icmsgPT0gKHZvaWQqKSAtMSkgeworICAgIHJldHVybiBuZXdfYnJrOworICB9IGVsc2UgaWYgKG5ld19icmsgPCBkZXNpcmVkX2JyaykgeworICAgIGVycm5vID0gRU5PTUVNOworICAgIHJldHVybiAodm9pZCopIC0xOworICB9CisKKyAgX19iaW9uaWNfYnJrID0gbmV3X2JyazsKKyAgcmV0dXJuIG9yaWdpbmFsX2JyazsKK30KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL3NjYW5kaXIuY3BwIGIvbGliYy9iaW9uaWMvc2NhbmRpci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGQyMmIyMgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYmlvbmljL3NjYW5kaXIuY3BwCkBAIC0wLDAgKzEsMTE1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2luY2x1ZGUgPGRpcmVudC5oPgorCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworI2luY2x1ZGUgInByaXZhdGUvU2NvcGVkUmVhZGRpci5oIgorCisvLyBBIHNtYXJ0IHBvaW50ZXIgdG8gdGhlIHNjYW5kaXIgZGlyZW50KiouCitjbGFzcyBTY2FuZGlyUmVzdWx0IHsKKyBwdWJsaWM6CisgIFNjYW5kaXJSZXN1bHQoKSA6IG5hbWVzXyhOVUxMKSwgc2l6ZV8oMCksIGNhcGFjaXR5XygwKSB7CisgIH0KKworICB+U2NhbmRpclJlc3VsdCgpIHsKKyAgICB3aGlsZSAoc2l6ZV8gPiAwKSB7CisgICAgICBmcmVlKG5hbWVzX1stLXNpemVfXSk7CisgICAgfQorICAgIGZyZWUobmFtZXNfKTsKKyAgfQorCisgIHNpemVfdCBzaXplKCkgeworICAgIHJldHVybiBzaXplXzsKKyAgfQorCisgIGRpcmVudCoqIHJlbGVhc2UoKSB7CisgICAgZGlyZW50KiogcmVzdWx0ID0gbmFtZXNfOworICAgIG5hbWVzXyA9IE5VTEw7CisgICAgc2l6ZV8gPSBjYXBhY2l0eV8gPSAwOworICAgIHJldHVybiByZXN1bHQ7CisgIH0KKworICBib29sIEFkZChkaXJlbnQqIGVudHJ5KSB7CisgICAgaWYgKHNpemVfID49IGNhcGFjaXR5XykgeworICAgICAgc2l6ZV90IG5ld19jYXBhY2l0eSA9IGNhcGFjaXR5XyArIDMyOworICAgICAgZGlyZW50KiogbmV3X25hbWVzID0gKGRpcmVudCoqKSByZWFsbG9jKG5hbWVzXywgbmV3X2NhcGFjaXR5ICogc2l6ZW9mKGRpcmVudCopKTsKKyAgICAgIGlmIChuZXdfbmFtZXMgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICB9CisgICAgICBuYW1lc18gPSBuZXdfbmFtZXM7CisgICAgICBjYXBhY2l0eV8gPSBuZXdfY2FwYWNpdHk7CisgICAgfQorCisgICAgZGlyZW50KiBjb3B5ID0gQ29weURpcmVudChlbnRyeSk7CisgICAgaWYgKGNvcHkgPT0gTlVMTCkgeworICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBuYW1lc19bc2l6ZV8rK10gPSBjb3B5OworICAgIHJldHVybiB0cnVlOworICB9CisKKyAgdm9pZCBTb3J0KGludCAoKmNvbXBhcmF0b3IpKGNvbnN0IGRpcmVudCoqLCBjb25zdCBkaXJlbnQqKikpIHsKKyAgICAvLyBJZiB3ZSBoYXZlIGVudHJpZXMgYW5kIGEgY29tcGFyYXRvciwgc29ydCB0aGVtLgorICAgIGlmIChzaXplXyA+IDAgJiYgY29tcGFyYXRvciAhPSBOVUxMKSB7CisgICAgICBxc29ydChuYW1lc18sIHNpemVfLCBzaXplb2YoZGlyZW50KiksIChpbnQgKCopKGNvbnN0IHZvaWQqLCBjb25zdCB2b2lkKikpIGNvbXBhcmF0b3IpOworICAgIH0KKyAgfQorCisgcHJpdmF0ZToKKyAgZGlyZW50KiogbmFtZXNfOworICBzaXplX3Qgc2l6ZV87CisgIHNpemVfdCBjYXBhY2l0eV87CisKKyAgc3RhdGljIGRpcmVudCogQ29weURpcmVudChkaXJlbnQqIG9yaWdpbmFsKSB7CisgICAgLy8gQWxsb2NhdGUgdGhlIG1pbmltdW0gbnVtYmVyIG9mIGJ5dGVzIG5lY2Vzc2FyeSwgcm91bmRlZCB1cCB0byBhIDQtYnl0ZSBib3VuZGFyeS4KKyAgICBzaXplX3Qgc2l6ZSA9ICgob3JpZ2luYWwtPmRfcmVjbGVuICsgMykgJiB+Myk7CisgICAgZGlyZW50KiBjb3B5ID0gKGRpcmVudCopIG1hbGxvYyhzaXplKTsKKyAgICBtZW1jcHkoY29weSwgb3JpZ2luYWwsIG9yaWdpbmFsLT5kX3JlY2xlbik7CisgICAgcmV0dXJuIGNvcHk7CisgIH0KKworICAvLyBEaXNhbGxvdyBjb3B5IGFuZCBhc3NpZ25tZW50LgorICBTY2FuZGlyUmVzdWx0KGNvbnN0IFNjYW5kaXJSZXN1bHQmKTsKKyAgdm9pZCBvcGVyYXRvcj0oY29uc3QgU2NhbmRpclJlc3VsdCYpOworfTsKKworaW50IHNjYW5kaXIoY29uc3QgY2hhciogZGlybmFtZSwgZGlyZW50KioqIG5hbWVfbGlzdCwKKyAgICAgICAgICAgIGludCAoKmZpbHRlcikoY29uc3QgZGlyZW50KiksCisgICAgICAgICAgICBpbnQgKCpjb21wYXJhdG9yKShjb25zdCBkaXJlbnQqKiwgY29uc3QgZGlyZW50KiopKSB7CisgIFNjb3BlZFJlYWRkaXIgcmVhZGVyKGRpcm5hbWUpOworICBpZiAocmVhZGVyLklzQmFkKCkpIHsKKyAgICByZXR1cm4gLTE7CisgIH0KKworICBTY2FuZGlyUmVzdWx0IG5hbWVzOworICBkaXJlbnQqIGVudHJ5OworICB3aGlsZSAoKGVudHJ5ID0gcmVhZGVyLlJlYWRFbnRyeSgpKSAhPSBOVUxMKSB7CisgICAgLy8gSWYgd2UgaGF2ZSBhIGZpbHRlciwgc2tpcCBuYW1lcyB0aGF0IGRvbid0IG1hdGNoLgorICAgIGlmIChmaWx0ZXIgIT0gTlVMTCAmJiAhKCpmaWx0ZXIpKGVudHJ5KSkgeworICAgICAgY29udGludWU7CisgICAgfQorICAgIG5hbWVzLkFkZChlbnRyeSk7CisgIH0KKworICBuYW1lcy5Tb3J0KGNvbXBhcmF0b3IpOworCisgIHNpemVfdCBzaXplID0gbmFtZXMuc2l6ZSgpOworICAqbmFtZV9saXN0ID0gbmFtZXMucmVsZWFzZSgpOworICByZXR1cm4gc2l6ZTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL3NjaGVkX2dldGFmZmluaXR5LmMgYi9saWJjL2Jpb25pYy9zY2hlZF9nZXRhZmZpbml0eS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MzEzODIyLi4wMDAwMDAwCi0tLSBhL2xpYmMvYmlvbmljL3NjaGVkX2dldGFmZmluaXR5LmMKKysrIC9kZXYvbnVsbApAQCAtMSw0MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogICAgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUwotICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKLSAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCi0gKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKLSAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAotICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0gKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0jZGVmaW5lIF9HTlVfU09VUkNFIDEKLSNpbmNsdWRlIDxzY2hlZC5oPgotCi1pbnQgIHNjaGVkX2dldGFmZmluaXR5KHBpZF90IHBpZCwgc2l6ZV90IHNldHNpemUsIGNwdV9zZXRfdCogc2V0KQotewotICAgIGludCByZXQgPSBfX3NjaGVkX2dldGFmZmluaXR5KHBpZCwgc2V0c2l6ZSwgc2V0KTsKLSAgICBpZiAocmV0ID49IDApIHsKLSAgICAgICAgaWYgKChzaXplX3QpcmV0IDwgc2V0c2l6ZSkgewotICAgICAgICAgICAgbWVtc2V0KChjaGFyKilzZXQgKyByZXQsICdcMCcsIHNldHNpemUgLSAoc2l6ZV90KXJldCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0ID0gMDsKLSAgICB9Ci0gICAgcmV0dXJuIHJldDsKLX0KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL3NjaGVkX2dldGFmZmluaXR5LmNwcCBiL2xpYmMvYmlvbmljL3NjaGVkX2dldGFmZmluaXR5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNmYyMmIxCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9iaW9uaWMvc2NoZWRfZ2V0YWZmaW5pdHkuY3BwCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2RlZmluZSBfR05VX1NPVVJDRSAxCisjaW5jbHVkZSA8c2NoZWQuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworZXh0ZXJuICJDIiBpbnQgX19zY2hlZF9nZXRhZmZpbml0eShwaWRfdCwgc2l6ZV90LCBjcHVfc2V0X3QqKTsKKworaW50IHNjaGVkX2dldGFmZmluaXR5KHBpZF90IHBpZCwgc2l6ZV90IHNldF9zaXplLCBjcHVfc2V0X3QqIHNldCkgeworICBpbnQgcmMgPSBfX3NjaGVkX2dldGFmZmluaXR5KHBpZCwgc2V0X3NpemUsIHNldCk7CisgIGlmIChyYyA9PSAtMSkgeworICAgICAgcmV0dXJuIC0xOworICB9CisKKyAgLy8gQ2xlYXIgYW55IGJ5dGVzIHRoZSBrZXJuZWwgZGlkbid0IHRvdWNoLgorICAvLyAoVGhlIGtlcm5lbCByZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgd3JpdHRlbiBvbiBzdWNjZXNzLikKKyAgbWVtc2V0KHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHNldCkgKyByYywgMCwgc2V0X3NpemUgLSByYyk7CisgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvc2VtYXBob3JlLmMgYi9saWJjL2Jpb25pYy9zZW1hcGhvcmUuYwppbmRleCA5NjgxOWFlLi45YmM4NDEyIDEwMDY0NAotLS0gYS9saWJjL2Jpb25pYy9zZW1hcGhvcmUuYworKysgYi9saWJjL2Jpb25pYy9zZW1hcGhvcmUuYwpAQCAtMTc0LDcgKzE3NCw3IEBACiAKICAgICAgICAgbmV3ID0gU0VNQ09VTlRfREVDUkVNRU5UKG9sZCk7CiAgICAgfQotICAgIHdoaWxlIChfX2F0b21pY19jbXB4Y2hnKChpbnQpKG9sZHxzaGFyZWQpLAorICAgIHdoaWxlIChfX2Jpb25pY19jbXB4Y2hnKChpbnQpKG9sZHxzaGFyZWQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpKG5ld3xzaGFyZWQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2xhdGlsZSBpbnQgKilwdmFsdWUpICE9IDApOwogICAgIHJldHVybiByZXQ7CkBAIC0xOTgsNyArMTk4LDcgQEAKIAogICAgICAgICBuZXcgPSBTRU1DT1VOVF9ERUNSRU1FTlQob2xkKTsKICAgICB9Ci0gICAgd2hpbGUgKF9fYXRvbWljX2NtcHhjaGcoKGludCkob2xkfHNoYXJlZCksCisgICAgd2hpbGUgKF9fYmlvbmljX2NtcHhjaGcoKGludCkob2xkfHNoYXJlZCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkobmV3fHNoYXJlZCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvbGF0aWxlIGludCAqKXB2YWx1ZSkgIT0gMCk7CiAKQEAgLTIzNSw3ICsyMzUsNyBAQAogICAgICAgICBlbHNlCiAgICAgICAgICAgICBuZXcgPSBTRU1DT1VOVF9JTkNSRU1FTlQob2xkKTsKICAgICB9Ci0gICAgd2hpbGUgKCBfX2F0b21pY19jbXB4Y2hnKChpbnQpKG9sZHxzaGFyZWQpLAorICAgIHdoaWxlICggX19iaW9uaWNfY21weGNoZygoaW50KShvbGR8c2hhcmVkKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkobmV3fHNoYXJlZCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2xhdGlsZSBpbnQqKXB2YWx1ZSkgIT0gMCk7CiAKZGlmZiAtLWdpdCBhL2xpYmMvdW5pc3RkL3NlbmQuYyBiL2xpYmMvYmlvbmljL3NlbmQuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbGliYy91bmlzdGQvc2VuZC5jCnJlbmFtZSB0byBsaWJjL2Jpb25pYy9zZW5kLmMKZGlmZiAtLWdpdCBhL2xpYmMvdW5pc3RkL3NldGVnaWQuYyBiL2xpYmMvYmlvbmljL3NldGVnaWQuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbGliYy91bmlzdGQvc2V0ZWdpZC5jCnJlbmFtZSB0byBsaWJjL2Jpb25pYy9zZXRlZ2lkLmMKZGlmZiAtLWdpdCBhL2xpYmMvdW5pc3RkL3NldGV1aWQuYyBiL2xpYmMvYmlvbmljL3NldGV1aWQuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbGliYy91bmlzdGQvc2V0ZXVpZC5jCnJlbmFtZSB0byBsaWJjL2Jpb25pYy9zZXRldWlkLmMKZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL3NldGxvY2FsZS5jcHAgYi9saWJjL2Jpb25pYy9zZXRsb2NhbGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4ZmRjOWUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2Jpb25pYy9zZXRsb2NhbGUuY3BwCkBAIC0wLDAgKzEsMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPGxvY2FsZS5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorCisvLyBzZXRsb2NhbGUoMykgYWx3YXlzIGZhaWxzIG9uIGJpb25pYy4KK2NoYXIqIHNldGxvY2FsZShpbnQgLypjYXRlZ29yeSovLCBjaGFyIGNvbnN0KiAvKmxvY2FsZSovKSB7CisgICAgcmV0dXJuIE5VTEw7Cit9CmRpZmYgLS1naXQgYS9saWJjL3VuaXN0ZC9zZXRwZ3JwLmMgYi9saWJjL2Jpb25pYy9zZXRwZ3JwLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGxpYmMvdW5pc3RkL3NldHBncnAuYwpyZW5hbWUgdG8gbGliYy9iaW9uaWMvc2V0cGdycC5jCmRpZmYgLS1naXQgYS9saWJjL3VuaXN0ZC9zZXRyZXN1aWQuYyBiL2xpYmMvYmlvbmljL3NldHJlc3VpZC5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBsaWJjL3VuaXN0ZC9zZXRyZXN1aWQuYwpyZW5hbWUgdG8gbGliYy9iaW9uaWMvc2V0cmVzdWlkLmMKZGlmZiAtLWdpdCBhL2xpYmMvdW5pc3RkL3NldHJldWlkLmMgYi9saWJjL2Jpb25pYy9zZXRyZXVpZC5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBsaWJjL3VuaXN0ZC9zZXRyZXVpZC5jCnJlbmFtZSB0byBsaWJjL2Jpb25pYy9zZXRyZXVpZC5jCmRpZmYgLS1naXQgYS9saWJjL3VuaXN0ZC9zZXR1aWQuYyBiL2xpYmMvYmlvbmljL3NldHVpZC5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBsaWJjL3VuaXN0ZC9zZXR1aWQuYwpyZW5hbWUgdG8gbGliYy9iaW9uaWMvc2V0dWlkLmMKZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL3NoYTEuYyBiL2xpYmMvYmlvbmljL3NoYTEuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWZhOTVhNS4uMDAwMDAwMAotLS0gYS9saWJjL2Jpb25pYy9zaGExLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyNzAgKzAsMCBAQAotLyoJJE5ldEJTRDogc2hhMS5jLHYgMS4xIDIwMDUvMTIvMjAgMjA6Mjk6NDAgY2hyaXN0b3MgRXhwICQJKi8KLS8qCSRPcGVuQlNEOiBzaGExLmMsdiAxLjkgMTk5Ny8wNy8yMyAyMToxMjozMiBrc3RhaWxleSBFeHAgJAkqLwotCi0vKgotICogU0hBLTEgaW4gQwotICogQnkgU3RldmUgUmVpZCA8c3RldmVAZWRtd2ViLmNvbT4KLSAqIDEwMCUgUHVibGljIERvbWFpbgotICoKLSAqIFRlc3QgVmVjdG9ycyAoZnJvbSBGSVBTIFBVQiAxODAtMSkKLSAqICJhYmMiCi0gKiAgIEE5OTkzRTM2IDQ3MDY4MTZBIEJBM0UyNTcxIDc4NTBDMjZDIDlDRDBEODlECi0gKiAiYWJjZGJjZGVjZGVmZGVmZ2VmZ2hmZ2hpZ2hpamhpamtpamtsamtsbWtsbW5sbW5vbW5vcG5vcHEiCi0gKiAgIDg0OTgzRTQ0IDFDM0JEMjZFIEJBQUU0QUExIEY5NTEyOUU1IEU1NDY3MEYxCi0gKiBBIG1pbGxpb24gcmVwZXRpdGlvbnMgb2YgImEiCi0gKiAgIDM0QUE5NzNDIEQ0QzREQUE0IEY2MUVFQjJCIERCQUQyNzMxIDY1MzQwMTZGCi0gKi8KLQotI2RlZmluZSBTSEExSEFORFNPRkYJCS8qIENvcGllcyBkYXRhIGJlZm9yZSBtZXNzaW5nIHdpdGggaXQuICovCi0KLSNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpbmNsdWRlIDxhc3NlcnQuaD4KLSNpbmNsdWRlIDxzaGExLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0KLSNpZiBIQVZFX05CVE9PTF9DT05GSUdfSAotI2luY2x1ZGUgIm5idG9vbF9jb25maWcuaCIKLSNlbmRpZgotCi0jaWYgIUhBVkVfU0hBMV9ICi0KLSNkZWZpbmUgcm9sKHZhbHVlLCBiaXRzKSAoKCh2YWx1ZSkgPDwgKGJpdHMpKSB8ICgodmFsdWUpID4+ICgzMiAtIChiaXRzKSkpKQotCi0vKgotICogYmxrMCgpIGFuZCBibGsoKSBwZXJmb3JtIHRoZSBpbml0aWFsIGV4cGFuZC4KLSAqIEkgZ290IHRoZSBpZGVhIG9mIGV4cGFuZGluZyBkdXJpbmcgdGhlIHJvdW5kIGZ1bmN0aW9uIGZyb20gU1NMZWF5Ci0gKi8KLSNpZiBCWVRFX09SREVSID09IExJVFRMRV9FTkRJQU4KLSMgZGVmaW5lIGJsazAoaSkgKGJsb2NrLT5sW2ldID0gKHJvbChibG9jay0+bFtpXSwyNCkmMHhGRjAwRkYwMCkgXAotICAgIHwocm9sKGJsb2NrLT5sW2ldLDgpJjB4MDBGRjAwRkYpKQotI2Vsc2UKLSMgZGVmaW5lIGJsazAoaSkgYmxvY2stPmxbaV0KLSNlbmRpZgotI2RlZmluZSBibGsoaSkgKGJsb2NrLT5sW2kmMTVdID0gcm9sKGJsb2NrLT5sWyhpKzEzKSYxNV1eYmxvY2stPmxbKGkrOCkmMTVdIFwKLSAgICBeYmxvY2stPmxbKGkrMikmMTVdXmJsb2NrLT5sW2kmMTVdLDEpKQotCi0vKgotICogKFIwK1IxKSwgUjIsIFIzLCBSNCBhcmUgdGhlIGRpZmZlcmVudCBvcGVyYXRpb25zIChyb3VuZHMpIHVzZWQgaW4gU0hBMQotICovCi0jZGVmaW5lIFIwKHYsdyx4LHkseixpKSB6Kz0oKHcmKHheeSkpXnkpK2JsazAoaSkrMHg1QTgyNzk5OStyb2wodiw1KTt3PXJvbCh3LDMwKTsKLSNkZWZpbmUgUjEodix3LHgseSx6LGkpIHorPSgodyYoeF55KSleeSkrYmxrKGkpKzB4NUE4Mjc5OTkrcm9sKHYsNSk7dz1yb2wodywzMCk7Ci0jZGVmaW5lIFIyKHYsdyx4LHkseixpKSB6Kz0od154XnkpK2JsayhpKSsweDZFRDlFQkExK3JvbCh2LDUpO3c9cm9sKHcsMzApOwotI2RlZmluZSBSMyh2LHcseCx5LHosaSkgeis9KCgod3x4KSZ5KXwodyZ4KSkrYmxrKGkpKzB4OEYxQkJDREMrcm9sKHYsNSk7dz1yb2wodywzMCk7Ci0jZGVmaW5lIFI0KHYsdyx4LHkseixpKSB6Kz0od154XnkpK2JsayhpKSsweENBNjJDMUQ2K3JvbCh2LDUpO3c9cm9sKHcsMzApOwotCi10eXBlZGVmIHVuaW9uIHsKLSAgICB1X2NoYXIgY1s2NF07Ci0gICAgdV9pbnQgbFsxNl07Ci19IENIQVI2NExPTkcxNjsKLQotLyogb2xkIHNwYXJjNjQgZ2NjIGNvdWxkIG5vdCBjb21waWxlIHRoaXMgKi8KLSN1bmRlZiBTUEFSQzY0X0dDQ19XT1JLQVJPVU5ECi0jaWYgZGVmaW5lZChfX3NwYXJjNjRfXykgJiYgZGVmaW5lZChfX0dOVUNfXykgJiYgX19HTlVDX18gPCAzCi0jZGVmaW5lIFNQQVJDNjRfR0NDX1dPUktBUk9VTkQKLSNlbmRpZgotCi0jaWZkZWYgU1BBUkM2NF9HQ0NfV09SS0FST1VORAotdm9pZCBkb19SMDEodV9pbnQzMl90ICphLCB1X2ludDMyX3QgKmIsIHVfaW50MzJfdCAqYywgdV9pbnQzMl90ICpkLCB1X2ludDMyX3QgKmUsIENIQVI2NExPTkcxNiAqKTsKLXZvaWQgZG9fUjIodV9pbnQzMl90ICphLCB1X2ludDMyX3QgKmIsIHVfaW50MzJfdCAqYywgdV9pbnQzMl90ICpkLCB1X2ludDMyX3QgKmUsIENIQVI2NExPTkcxNiAqKTsKLXZvaWQgZG9fUjModV9pbnQzMl90ICphLCB1X2ludDMyX3QgKmIsIHVfaW50MzJfdCAqYywgdV9pbnQzMl90ICpkLCB1X2ludDMyX3QgKmUsIENIQVI2NExPTkcxNiAqKTsKLXZvaWQgZG9fUjQodV9pbnQzMl90ICphLCB1X2ludDMyX3QgKmIsIHVfaW50MzJfdCAqYywgdV9pbnQzMl90ICpkLCB1X2ludDMyX3QgKmUsIENIQVI2NExPTkcxNiAqKTsKLQotI2RlZmluZSBuUjAodix3LHgseSx6LGkpIFIwKCp2LCp3LCp4LCp5LCp6LGkpCi0jZGVmaW5lIG5SMSh2LHcseCx5LHosaSkgUjEoKnYsKncsKngsKnksKnosaSkKLSNkZWZpbmUgblIyKHYsdyx4LHkseixpKSBSMigqdiwqdywqeCwqeSwqeixpKQotI2RlZmluZSBuUjModix3LHgseSx6LGkpIFIzKCp2LCp3LCp4LCp5LCp6LGkpCi0jZGVmaW5lIG5SNCh2LHcseCx5LHosaSkgUjQoKnYsKncsKngsKnksKnosaSkKLQotdm9pZAotZG9fUjAxKHVfaW50MzJfdCAqYSwgdV9pbnQzMl90ICpiLCB1X2ludDMyX3QgKmMsIHVfaW50MzJfdCAqZCwgdV9pbnQzMl90ICplLCBDSEFSNjRMT05HMTYgKmJsb2NrKQotewotICAgIG5SMChhLGIsYyxkLGUsIDApOyBuUjAoZSxhLGIsYyxkLCAxKTsgblIwKGQsZSxhLGIsYywgMik7IG5SMChjLGQsZSxhLGIsIDMpOwotICAgIG5SMChiLGMsZCxlLGEsIDQpOyBuUjAoYSxiLGMsZCxlLCA1KTsgblIwKGUsYSxiLGMsZCwgNik7IG5SMChkLGUsYSxiLGMsIDcpOwotICAgIG5SMChjLGQsZSxhLGIsIDgpOyBuUjAoYixjLGQsZSxhLCA5KTsgblIwKGEsYixjLGQsZSwxMCk7IG5SMChlLGEsYixjLGQsMTEpOwotICAgIG5SMChkLGUsYSxiLGMsMTIpOyBuUjAoYyxkLGUsYSxiLDEzKTsgblIwKGIsYyxkLGUsYSwxNCk7IG5SMChhLGIsYyxkLGUsMTUpOwotICAgIG5SMShlLGEsYixjLGQsMTYpOyBuUjEoZCxlLGEsYixjLDE3KTsgblIxKGMsZCxlLGEsYiwxOCk7IG5SMShiLGMsZCxlLGEsMTkpOwotfQotCi12b2lkCi1kb19SMih1X2ludDMyX3QgKmEsIHVfaW50MzJfdCAqYiwgdV9pbnQzMl90ICpjLCB1X2ludDMyX3QgKmQsIHVfaW50MzJfdCAqZSwgQ0hBUjY0TE9ORzE2ICpibG9jaykKLXsKLSAgICBuUjIoYSxiLGMsZCxlLDIwKTsgblIyKGUsYSxiLGMsZCwyMSk7IG5SMihkLGUsYSxiLGMsMjIpOyBuUjIoYyxkLGUsYSxiLDIzKTsKLSAgICBuUjIoYixjLGQsZSxhLDI0KTsgblIyKGEsYixjLGQsZSwyNSk7IG5SMihlLGEsYixjLGQsMjYpOyBuUjIoZCxlLGEsYixjLDI3KTsKLSAgICBuUjIoYyxkLGUsYSxiLDI4KTsgblIyKGIsYyxkLGUsYSwyOSk7IG5SMihhLGIsYyxkLGUsMzApOyBuUjIoZSxhLGIsYyxkLDMxKTsKLSAgICBuUjIoZCxlLGEsYixjLDMyKTsgblIyKGMsZCxlLGEsYiwzMyk7IG5SMihiLGMsZCxlLGEsMzQpOyBuUjIoYSxiLGMsZCxlLDM1KTsKLSAgICBuUjIoZSxhLGIsYyxkLDM2KTsgblIyKGQsZSxhLGIsYywzNyk7IG5SMihjLGQsZSxhLGIsMzgpOyBuUjIoYixjLGQsZSxhLDM5KTsKLX0KLQotdm9pZAotZG9fUjModV9pbnQzMl90ICphLCB1X2ludDMyX3QgKmIsIHVfaW50MzJfdCAqYywgdV9pbnQzMl90ICpkLCB1X2ludDMyX3QgKmUsIENIQVI2NExPTkcxNiAqYmxvY2spCi17Ci0gICAgblIzKGEsYixjLGQsZSw0MCk7IG5SMyhlLGEsYixjLGQsNDEpOyBuUjMoZCxlLGEsYixjLDQyKTsgblIzKGMsZCxlLGEsYiw0Myk7Ci0gICAgblIzKGIsYyxkLGUsYSw0NCk7IG5SMyhhLGIsYyxkLGUsNDUpOyBuUjMoZSxhLGIsYyxkLDQ2KTsgblIzKGQsZSxhLGIsYyw0Nyk7Ci0gICAgblIzKGMsZCxlLGEsYiw0OCk7IG5SMyhiLGMsZCxlLGEsNDkpOyBuUjMoYSxiLGMsZCxlLDUwKTsgblIzKGUsYSxiLGMsZCw1MSk7Ci0gICAgblIzKGQsZSxhLGIsYyw1Mik7IG5SMyhjLGQsZSxhLGIsNTMpOyBuUjMoYixjLGQsZSxhLDU0KTsgblIzKGEsYixjLGQsZSw1NSk7Ci0gICAgblIzKGUsYSxiLGMsZCw1Nik7IG5SMyhkLGUsYSxiLGMsNTcpOyBuUjMoYyxkLGUsYSxiLDU4KTsgblIzKGIsYyxkLGUsYSw1OSk7Ci19Ci0KLXZvaWQKLWRvX1I0KHVfaW50MzJfdCAqYSwgdV9pbnQzMl90ICpiLCB1X2ludDMyX3QgKmMsIHVfaW50MzJfdCAqZCwgdV9pbnQzMl90ICplLCBDSEFSNjRMT05HMTYgKmJsb2NrKQotewotICAgIG5SNChhLGIsYyxkLGUsNjApOyBuUjQoZSxhLGIsYyxkLDYxKTsgblI0KGQsZSxhLGIsYyw2Mik7IG5SNChjLGQsZSxhLGIsNjMpOwotICAgIG5SNChiLGMsZCxlLGEsNjQpOyBuUjQoYSxiLGMsZCxlLDY1KTsgblI0KGUsYSxiLGMsZCw2Nik7IG5SNChkLGUsYSxiLGMsNjcpOwotICAgIG5SNChjLGQsZSxhLGIsNjgpOyBuUjQoYixjLGQsZSxhLDY5KTsgblI0KGEsYixjLGQsZSw3MCk7IG5SNChlLGEsYixjLGQsNzEpOwotICAgIG5SNChkLGUsYSxiLGMsNzIpOyBuUjQoYyxkLGUsYSxiLDczKTsgblI0KGIsYyxkLGUsYSw3NCk7IG5SNChhLGIsYyxkLGUsNzUpOwotICAgIG5SNChlLGEsYixjLGQsNzYpOyBuUjQoZCxlLGEsYixjLDc3KTsgblI0KGMsZCxlLGEsYiw3OCk7IG5SNChiLGMsZCxlLGEsNzkpOwotfQotI2VuZGlmCi0KLS8qCi0gKiBIYXNoIGEgc2luZ2xlIDUxMi1iaXQgYmxvY2suIFRoaXMgaXMgdGhlIGNvcmUgb2YgdGhlIGFsZ29yaXRobS4KLSAqLwotdm9pZCBTSEExVHJhbnNmb3JtKHN0YXRlLCBidWZmZXIpCi0gICAgdV9pbnQzMl90IHN0YXRlWzVdOwotICAgIGNvbnN0IHVfY2hhciBidWZmZXJbNjRdOwotewotICAgIHVfaW50MzJfdCBhLCBiLCBjLCBkLCBlOwotICAgIENIQVI2NExPTkcxNiAqYmxvY2s7Ci0KLSNpZmRlZiBTSEExSEFORFNPRkYKLSAgICBDSEFSNjRMT05HMTYgd29ya3NwYWNlOwotI2VuZGlmCi0KLSAgICBhc3NlcnQoYnVmZmVyICE9IDApOwotICAgIGFzc2VydChzdGF0ZSAhPSAwKTsKLQotI2lmZGVmIFNIQTFIQU5EU09GRgotICAgIGJsb2NrID0gJndvcmtzcGFjZTsKLSAgICAodm9pZCltZW1jcHkoYmxvY2ssIGJ1ZmZlciwgNjQpOwotI2Vsc2UKLSAgICBibG9jayA9IChDSEFSNjRMT05HMTYgKikodm9pZCAqKWJ1ZmZlcjsKLSNlbmRpZgotCi0gICAgLyogQ29weSBjb250ZXh0LT5zdGF0ZVtdIHRvIHdvcmtpbmcgdmFycyAqLwotICAgIGEgPSBzdGF0ZVswXTsKLSAgICBiID0gc3RhdGVbMV07Ci0gICAgYyA9IHN0YXRlWzJdOwotICAgIGQgPSBzdGF0ZVszXTsKLSAgICBlID0gc3RhdGVbNF07Ci0KLSNpZmRlZiBTUEFSQzY0X0dDQ19XT1JLQVJPVU5ECi0gICAgZG9fUjAxKCZhLCAmYiwgJmMsICZkLCAmZSwgYmxvY2spOwotICAgIGRvX1IyKCZhLCAmYiwgJmMsICZkLCAmZSwgYmxvY2spOwotICAgIGRvX1IzKCZhLCAmYiwgJmMsICZkLCAmZSwgYmxvY2spOwotICAgIGRvX1I0KCZhLCAmYiwgJmMsICZkLCAmZSwgYmxvY2spOwotI2Vsc2UKLSAgICAvKiA0IHJvdW5kcyBvZiAyMCBvcGVyYXRpb25zIGVhY2guIExvb3AgdW5yb2xsZWQuICovCi0gICAgUjAoYSxiLGMsZCxlLCAwKTsgUjAoZSxhLGIsYyxkLCAxKTsgUjAoZCxlLGEsYixjLCAyKTsgUjAoYyxkLGUsYSxiLCAzKTsKLSAgICBSMChiLGMsZCxlLGEsIDQpOyBSMChhLGIsYyxkLGUsIDUpOyBSMChlLGEsYixjLGQsIDYpOyBSMChkLGUsYSxiLGMsIDcpOwotICAgIFIwKGMsZCxlLGEsYiwgOCk7IFIwKGIsYyxkLGUsYSwgOSk7IFIwKGEsYixjLGQsZSwxMCk7IFIwKGUsYSxiLGMsZCwxMSk7Ci0gICAgUjAoZCxlLGEsYixjLDEyKTsgUjAoYyxkLGUsYSxiLDEzKTsgUjAoYixjLGQsZSxhLDE0KTsgUjAoYSxiLGMsZCxlLDE1KTsKLSAgICBSMShlLGEsYixjLGQsMTYpOyBSMShkLGUsYSxiLGMsMTcpOyBSMShjLGQsZSxhLGIsMTgpOyBSMShiLGMsZCxlLGEsMTkpOwotICAgIFIyKGEsYixjLGQsZSwyMCk7IFIyKGUsYSxiLGMsZCwyMSk7IFIyKGQsZSxhLGIsYywyMik7IFIyKGMsZCxlLGEsYiwyMyk7Ci0gICAgUjIoYixjLGQsZSxhLDI0KTsgUjIoYSxiLGMsZCxlLDI1KTsgUjIoZSxhLGIsYyxkLDI2KTsgUjIoZCxlLGEsYixjLDI3KTsKLSAgICBSMihjLGQsZSxhLGIsMjgpOyBSMihiLGMsZCxlLGEsMjkpOyBSMihhLGIsYyxkLGUsMzApOyBSMihlLGEsYixjLGQsMzEpOwotICAgIFIyKGQsZSxhLGIsYywzMik7IFIyKGMsZCxlLGEsYiwzMyk7IFIyKGIsYyxkLGUsYSwzNCk7IFIyKGEsYixjLGQsZSwzNSk7Ci0gICAgUjIoZSxhLGIsYyxkLDM2KTsgUjIoZCxlLGEsYixjLDM3KTsgUjIoYyxkLGUsYSxiLDM4KTsgUjIoYixjLGQsZSxhLDM5KTsKLSAgICBSMyhhLGIsYyxkLGUsNDApOyBSMyhlLGEsYixjLGQsNDEpOyBSMyhkLGUsYSxiLGMsNDIpOyBSMyhjLGQsZSxhLGIsNDMpOwotICAgIFIzKGIsYyxkLGUsYSw0NCk7IFIzKGEsYixjLGQsZSw0NSk7IFIzKGUsYSxiLGMsZCw0Nik7IFIzKGQsZSxhLGIsYyw0Nyk7Ci0gICAgUjMoYyxkLGUsYSxiLDQ4KTsgUjMoYixjLGQsZSxhLDQ5KTsgUjMoYSxiLGMsZCxlLDUwKTsgUjMoZSxhLGIsYyxkLDUxKTsKLSAgICBSMyhkLGUsYSxiLGMsNTIpOyBSMyhjLGQsZSxhLGIsNTMpOyBSMyhiLGMsZCxlLGEsNTQpOyBSMyhhLGIsYyxkLGUsNTUpOwotICAgIFIzKGUsYSxiLGMsZCw1Nik7IFIzKGQsZSxhLGIsYyw1Nyk7IFIzKGMsZCxlLGEsYiw1OCk7IFIzKGIsYyxkLGUsYSw1OSk7Ci0gICAgUjQoYSxiLGMsZCxlLDYwKTsgUjQoZSxhLGIsYyxkLDYxKTsgUjQoZCxlLGEsYixjLDYyKTsgUjQoYyxkLGUsYSxiLDYzKTsKLSAgICBSNChiLGMsZCxlLGEsNjQpOyBSNChhLGIsYyxkLGUsNjUpOyBSNChlLGEsYixjLGQsNjYpOyBSNChkLGUsYSxiLGMsNjcpOwotICAgIFI0KGMsZCxlLGEsYiw2OCk7IFI0KGIsYyxkLGUsYSw2OSk7IFI0KGEsYixjLGQsZSw3MCk7IFI0KGUsYSxiLGMsZCw3MSk7Ci0gICAgUjQoZCxlLGEsYixjLDcyKTsgUjQoYyxkLGUsYSxiLDczKTsgUjQoYixjLGQsZSxhLDc0KTsgUjQoYSxiLGMsZCxlLDc1KTsKLSAgICBSNChlLGEsYixjLGQsNzYpOyBSNChkLGUsYSxiLGMsNzcpOyBSNChjLGQsZSxhLGIsNzgpOyBSNChiLGMsZCxlLGEsNzkpOwotI2VuZGlmCi0KLSAgICAvKiBBZGQgdGhlIHdvcmtpbmcgdmFycyBiYWNrIGludG8gY29udGV4dC5zdGF0ZVtdICovCi0gICAgc3RhdGVbMF0gKz0gYTsKLSAgICBzdGF0ZVsxXSArPSBiOwotICAgIHN0YXRlWzJdICs9IGM7Ci0gICAgc3RhdGVbM10gKz0gZDsKLSAgICBzdGF0ZVs0XSArPSBlOwotCi0gICAgLyogV2lwZSB2YXJpYWJsZXMgKi8KLSAgICBhID0gYiA9IGMgPSBkID0gZSA9IDA7Ci19Ci0KLQotLyoKLSAqIFNIQTFJbml0IC0gSW5pdGlhbGl6ZSBuZXcgY29udGV4dAotICovCi12b2lkIFNIQTFJbml0KGNvbnRleHQpCi0gICAgU0hBMV9DVFggKmNvbnRleHQ7Ci17Ci0KLSAgICBhc3NlcnQoY29udGV4dCAhPSAwKTsKLQotICAgIC8qIFNIQTEgaW5pdGlhbGl6YXRpb24gY29uc3RhbnRzICovCi0gICAgY29udGV4dC0+c3RhdGVbMF0gPSAweDY3NDUyMzAxOwotICAgIGNvbnRleHQtPnN0YXRlWzFdID0gMHhFRkNEQUI4OTsKLSAgICBjb250ZXh0LT5zdGF0ZVsyXSA9IDB4OThCQURDRkU7Ci0gICAgY29udGV4dC0+c3RhdGVbM10gPSAweDEwMzI1NDc2OwotICAgIGNvbnRleHQtPnN0YXRlWzRdID0gMHhDM0QyRTFGMDsKLSAgICBjb250ZXh0LT5jb3VudFswXSA9IGNvbnRleHQtPmNvdW50WzFdID0gMDsKLX0KLQotCi0vKgotICogUnVuIHlvdXIgZGF0YSB0aHJvdWdoIHRoaXMuCi0gKi8KLXZvaWQgU0hBMVVwZGF0ZShjb250ZXh0LCBkYXRhLCBsZW4pCi0gICAgU0hBMV9DVFggKmNvbnRleHQ7Ci0gICAgY29uc3QgdV9jaGFyICpkYXRhOwotICAgIHVfaW50IGxlbjsKLXsKLSAgICB1X2ludCBpLCBqOwotCi0gICAgYXNzZXJ0KGNvbnRleHQgIT0gMCk7Ci0gICAgYXNzZXJ0KGRhdGEgIT0gMCk7Ci0KLSAgICBqID0gY29udGV4dC0+Y291bnRbMF07Ci0gICAgaWYgKChjb250ZXh0LT5jb3VudFswXSArPSBsZW4gPDwgMykgPCBqKQotCWNvbnRleHQtPmNvdW50WzFdICs9IChsZW4+PjI5KSsxOwotICAgIGogPSAoaiA+PiAzKSAmIDYzOwotICAgIGlmICgoaiArIGxlbikgPiA2MykgewotCSh2b2lkKW1lbWNweSgmY29udGV4dC0+YnVmZmVyW2pdLCBkYXRhLCAoaSA9IDY0LWopKTsKLQlTSEExVHJhbnNmb3JtKGNvbnRleHQtPnN0YXRlLCBjb250ZXh0LT5idWZmZXIpOwotCWZvciAoIDsgaSArIDYzIDwgbGVuOyBpICs9IDY0KQotCSAgICBTSEExVHJhbnNmb3JtKGNvbnRleHQtPnN0YXRlLCAmZGF0YVtpXSk7Ci0JaiA9IDA7Ci0gICAgfSBlbHNlIHsKLQlpID0gMDsKLSAgICB9Ci0gICAgKHZvaWQpbWVtY3B5KCZjb250ZXh0LT5idWZmZXJbal0sICZkYXRhW2ldLCBsZW4gLSBpKTsKLX0KLQotCi0vKgotICogQWRkIHBhZGRpbmcgYW5kIHJldHVybiB0aGUgbWVzc2FnZSBkaWdlc3QuCi0gKi8KLXZvaWQgU0hBMUZpbmFsKGRpZ2VzdCwgY29udGV4dCkKLSAgICB1X2NoYXIgZGlnZXN0WzIwXTsKLSAgICBTSEExX0NUWCogY29udGV4dDsKLXsKLSAgICB1X2ludCBpOwotICAgIHVfY2hhciBmaW5hbGNvdW50WzhdOwotCi0gICAgYXNzZXJ0KGRpZ2VzdCAhPSAwKTsKLSAgICBhc3NlcnQoY29udGV4dCAhPSAwKTsKLQotICAgIGZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKLQlmaW5hbGNvdW50W2ldID0gKHVfY2hhcikoKGNvbnRleHQtPmNvdW50WyhpID49IDQgPyAwIDogMSldCi0JID4+ICgoMy0oaSAmIDMpKSAqIDgpICkgJiAyNTUpOwkgLyogRW5kaWFuIGluZGVwZW5kZW50ICovCi0gICAgfQotICAgIFNIQTFVcGRhdGUoY29udGV4dCwgKGNvbnN0IHVfY2hhciAqKSJcMjAwIiwgMSk7Ci0gICAgd2hpbGUgKChjb250ZXh0LT5jb3VudFswXSAmIDUwNCkgIT0gNDQ4KQotCVNIQTFVcGRhdGUoY29udGV4dCwgKGNvbnN0IHVfY2hhciAqKSJcMCIsIDEpOwotICAgIFNIQTFVcGRhdGUoY29udGV4dCwgZmluYWxjb3VudCwgOCk7ICAvKiBTaG91bGQgY2F1c2UgYSBTSEExVHJhbnNmb3JtKCkgKi8KLQotICAgIGlmIChkaWdlc3QpIHsKLQlmb3IgKGkgPSAwOyBpIDwgMjA7IGkrKykKLQkgICAgZGlnZXN0W2ldID0gKHVfY2hhcikKLQkJKChjb250ZXh0LT5zdGF0ZVtpPj4yXSA+PiAoKDMtKGkgJiAzKSkgKiA4KSApICYgMjU1KTsKLSAgICB9Ci19Ci0KLSNlbmRpZiAvKiBIQVZFX1NIQTFfSCAqLwpkaWZmIC0tZ2l0IGEvbGliYy91bmlzdGQvc2lnYmxvY2suYyBiL2xpYmMvYmlvbmljL3NpZ2Jsb2NrLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGxpYmMvdW5pc3RkL3NpZ2Jsb2NrLmMKcmVuYW1lIHRvIGxpYmMvYmlvbmljL3NpZ2Jsb2NrLmMKZGlmZiAtLWdpdCBhL2xpYmMvdW5pc3RkL3NpZ2ludGVycnVwdC5jIGIvbGliYy9iaW9uaWMvc2lnaW50ZXJydXB0LmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGxpYmMvdW5pc3RkL3NpZ2ludGVycnVwdC5jCnJlbmFtZSB0byBsaWJjL2Jpb25pYy9zaWdpbnRlcnJ1cHQuYwpkaWZmIC0tZ2l0IGEvbGliYy91bmlzdGQvc2lnbGlzdC5jIGIvbGliYy9iaW9uaWMvc2lnbGlzdC5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBsaWJjL3VuaXN0ZC9zaWdsaXN0LmMKcmVuYW1lIHRvIGxpYmMvYmlvbmljL3NpZ2xpc3QuYwpkaWZmIC0tZ2l0IGEvbGliYy91bmlzdGQvc2lnbmFsLmMgYi9saWJjL2Jpb25pYy9zaWduYWwuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbGliYy91bmlzdGQvc2lnbmFsLmMKcmVuYW1lIHRvIGxpYmMvYmlvbmljL3NpZ25hbC5jCmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9zaWduYWxmZC5jcHAgYi9saWJjL2Jpb25pYy9zaWduYWxmZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjdlNjQ3NAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYmlvbmljL3NpZ25hbGZkLmNwcApAQCAtMCwwICsxLDM4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzeXMvc2lnbmFsZmQuaD4KKworI2luY2x1ZGUgPHByaXZhdGUva2VybmVsX3NpZ3NldF90Lmg+CisKK2V4dGVybiAiQyIgaW50IHNpZ25hbGZkNChpbnQgZmQsIGtlcm5lbF9zaWdzZXRfdCogbWFzaywgc2l6ZV90IHNpemVtYXNrLCBpbnQgZmxhZ3MpOworCitpbnQgc2lnbmFsZmQoaW50IGZkLCBjb25zdCBzaWdzZXRfdCogbWFzaywgaW50IGZsYWdzKSB7CisgIGtlcm5lbF9zaWdzZXRfdCBpbl9zZXQobWFzayk7CisgIHJldHVybiBzaWduYWxmZDQoZmQsICZpbl9zZXQsIHNpemVvZihpbl9zZXQpLCBmbGFncyk7Cit9CmRpZmYgLS1naXQgYS9saWJjL3VuaXN0ZC9zaWduYW1lLmMgYi9saWJjL2Jpb25pYy9zaWduYW1lLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGxpYmMvdW5pc3RkL3NpZ25hbWUuYwpyZW5hbWUgdG8gbGliYy9iaW9uaWMvc2lnbmFtZS5jCmRpZmYgLS1naXQgYS9saWJjL3VuaXN0ZC9zaWdzZXRtYXNrLmMgYi9saWJjL2Jpb25pYy9zaWdzZXRtYXNrLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGxpYmMvdW5pc3RkL3NpZ3NldG1hc2suYwpyZW5hbWUgdG8gbGliYy9iaW9uaWMvc2lnc2V0bWFzay5jCmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9zaWdzdXNwZW5kLmMgYi9saWJjL2Jpb25pYy9zaWdzdXNwZW5kLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmQwODYzMQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYmlvbmljL3NpZ3N1c3BlbmQuYwpAQCAtMCwwICsxLDQzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisjaW5jbHVkZSA8c2lnbmFsLmg+CisjaWZkZWYgX19taXBzX18KK2V4dGVybiBpbnQgX19zaWdzdXNwZW5kKGNvbnN0IHNpZ3NldF90ICopOworI2Vsc2UKK2V4dGVybiBpbnQgX19zaWdzdXNwZW5kKGludCwgaW50LCB1bnNpZ25lZCBpbnQpOworI2VuZGlmCisKK2ludCBzaWdzdXNwZW5kKGNvbnN0IHNpZ3NldF90ICpfbWFzaykKK3sKKyNpZmRlZiBfX21pcHNfXworICAgICAgICByZXR1cm4gX19zaWdzdXNwZW5kKF9tYXNrKTsKKyNlbHNlCisgICAgICAgIHVuc2lnbmVkIGludCAgICBtYXNrID0gKHVuc2lnbmVkIGludCkqX21hc2s7CisgICAgICAgIHJldHVybiBfX3NpZ3N1c3BlbmQoMCwgMCwgbWFzayk7CisjZW5kaWYKK30KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL3NpZ3dhaXQuY3BwIGIvbGliYy9iaW9uaWMvc2lnd2FpdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTU0NmZkNgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYmlvbmljL3NpZ3dhaXQuY3BwCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c2lnbmFsLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8dGltZS5oPgorCisjaW5jbHVkZSA8cHJpdmF0ZS9rZXJuZWxfc2lnc2V0X3QuaD4KKworZXh0ZXJuICJDIiBpbnQgX19ydF9zaWd0aW1lZHdhaXQoY29uc3Qgc2lnc2V0X3QqIHV0aGVzZSwgc2lnaW5mb190KiB1aW5mbywgY29uc3Qgc3RydWN0IHRpbWVzcGVjKiB1dHMsIHNpemVfdCBzaWdzZXRzaXplKTsKKworaW50IHNpZ3dhaXQoY29uc3Qgc2lnc2V0X3QqIHNldCwgaW50KiBzaWcpIHsKKyAga2VybmVsX3NpZ3NldF90IHNpZ3NldChzZXQpOworICB3aGlsZSAodHJ1ZSkgeworICAgIC8vIF9fcnRfc2lndGltZWR3YWl0IGNhbiByZXR1cm4gRUFHQUlOIG9yIEVJTlRSLCB3ZSBuZWVkIHRvIGxvb3AKKyAgICAvLyBhcm91bmQgdGhlbSBzaW5jZSBzaWd3YWl0IGlzIG9ubHkgYWxsb3dlZCB0byByZXR1cm4gRUlOVkFMLgorICAgIGludCByZXN1bHQgPSBfX3J0X3NpZ3RpbWVkd2FpdChzaWdzZXQuZ2V0KCksIE5VTEwsIE5VTEwsIHNpemVvZihzaWdzZXQpKTsKKyAgICBpZiAocmVzdWx0ID49IDApIHsKKyAgICAgICpzaWcgPSByZXN1bHQ7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBpZiAoZXJybm8gIT0gRUFHQUlOICYmIGVycm5vICE9IEVJTlRSKSB7CisgICAgICByZXR1cm4gZXJybm87CisgICAgfQorICB9Cit9CmRpZmYgLS1naXQgYS9saWJjL3VuaXN0ZC9zbGVlcC5jIGIvbGliYy9iaW9uaWMvc2xlZXAuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbGliYy91bmlzdGQvc2xlZXAuYwpyZW5hbWUgdG8gbGliYy9iaW9uaWMvc2xlZXAuYwpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvc3NwLmMgYi9saWJjL2Jpb25pYy9zc3AuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjgzYjJhNC4uMDAwMDAwMAotLS0gYS9saWJjL2Jpb25pYy9zc3AuYworKysgL2Rldi9udWxsCkBAIC0xLDEwMCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogICAgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUwotICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKLSAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCi0gKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKLSAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAotICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0gKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzaWduYWwuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLSNpbmNsdWRlIDxmY250bC5oPgotI2luY2x1ZGUgPGN0eXBlLmg+Ci0jaW5jbHVkZSAibG9nZC5oIgotCi12b2lkICpfX3N0YWNrX2Noa19ndWFyZCA9IDA7Ci0KLS8qIEluaXRpYWxpemUgdGhlIGNhbmFyeSB3aXRoIGEgcmFuZG9tIHZhbHVlIGZyb20gL2Rldi91cmFuZG9tLgotICogSWYgdGhhdCBmYWlscywgdXNlIHRoZSAidGVybWluYXRvciBjYW5hcnkiLiAqLwotc3RhdGljIHZvaWQgX19hdHRyaWJ1dGVfXyAoKGNvbnN0cnVjdG9yKSkKLV9fZ3VhcmRfc2V0dXAodm9pZCkKLXsKLSAgICBpbnQgZmQ7Ci0KLSAgICBmZCA9IG9wZW4oIi9kZXYvdXJhbmRvbSIsIE9fUkRPTkxZKTsKLSAgICBpZiAoZmQgIT0gLTEpIHsKLSAgICAgICAgc3NpemVfdCBsZW4gPSByZWFkKGZkLCAmX19zdGFja19jaGtfZ3VhcmQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoX19zdGFja19jaGtfZ3VhcmQpKTsKLSAgICAgICAgY2xvc2UoZmQpOwotICAgICAgICBpZiAobGVuID09IHNpemVvZihfX3N0YWNrX2Noa19ndWFyZCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLyogSWYgdGhhdCBmYWlsZWQsIHN3aXRjaCB0byAndGVybWluYXRvciBjYW5hcnknICovCi0gICAgKCh1bnNpZ25lZCBjaGFyICopJl9fc3RhY2tfY2hrX2d1YXJkKVswXSA9IDA7Ci0gICAgKCh1bnNpZ25lZCBjaGFyICopJl9fc3RhY2tfY2hrX2d1YXJkKVsxXSA9IDA7Ci0gICAgKCh1bnNpZ25lZCBjaGFyICopJl9fc3RhY2tfY2hrX2d1YXJkKVsyXSA9ICdcbic7Ci0gICAgKCh1bnNpZ25lZCBjaGFyICopJl9fc3RhY2tfY2hrX2d1YXJkKVszXSA9IDI1NTsKLX0KLQotLyogVGhpcyBpcyB0aGUgY3Jhc2ggaGFuZGxlci4KLSAqIERvZXMgYSBiZXN0IGVmZm9ydCBhdCBsb2dnaW5nIGFuZCBjYWxscyBfZXhpdCB0byB0ZXJtaW5hdGUKLSAqIHRoZSBwcm9jZXNzIGltbWVkaWF0ZWx5ICh3aXRob3V0IGF0ZXhpdCBoYW5kbGVycywgZXRjLikgKi8KLXZvaWQgX19zdGFja19jaGtfZmFpbCh2b2lkKQotewotICAgIHN0cnVjdCBzaWdhY3Rpb24gc2E7Ci0gICAgc2lnc2V0X3Qgc2lnbWFzazsKLSAgICBzdGF0aWMgY29uc3QgY2hhciBtZXNzYWdlW10gPSAic3RhY2sgY29ycnVwdGlvbiBkZXRlY3RlZDogYWJvcnRlZCI7Ci0gICAgY2hhciBwYXRoW1BBVEhfTUFYXTsKLSAgICBpbnQgY291bnQ7Ci0KLSAgICAvKiBJbW1lZGlhdGVseSBibG9jayBhbGwgKGJ1dCBTSUdBQlJUKSBzaWduYWwgaGFuZGxlcnMgZnJvbSBydW5uaW5nIGNvZGUgKi8KLSAgICBzaWdmaWxsc2V0KCZzaWdtYXNrKTsKLSAgICBzaWdkZWxzZXQoJnNpZ21hc2ssIFNJR0FCUlQpOwotICAgIHNpZ3Byb2NtYXNrKFNJR19CTE9DSywgJnNpZ21hc2ssIE5VTEwpOwotCi0gICAgLyogVXNlIC9wcm9jL3NlbGYvZXhlIGxpbmsgdG8gb2J0YWluIHRoZSBwcm9ncmFtIG5hbWUgZm9yIGxvZ2dpbmcKLSAgICAgKiBwdXJwb3Nlcy4gSWYgaXQncyBub3QgYXZhaWxhYmxlLCB3ZSBzZXQgaXQgdG8gIjx1bmtub3duPiIgKi8KLSAgICBpZiAoKGNvdW50ID0gcmVhZGxpbmsoIi9wcm9jL3NlbGYvZXhlIiwgcGF0aCwgc2l6ZW9mKHBhdGgpIC0gMSkpID09IC0xKSB7Ci0gICAgICAgIHN0cmxjcHkocGF0aCwgIjx1bmtub3duPiIsIHNpemVvZihwYXRoKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcGF0aFtjb3VudF0gPSAnXDAnOwotICAgIH0KLQotICAgIC8qIERvIGEgYmVzdCBlZmZvcnQgYXQgbG9nZ2luZy4gVGhpcyBlbmRzIHVwIGNhbGxpbmcgd3JpdGV2KDIpICovCi0gICAgX19saWJjX2FuZHJvaWRfbG9nX3ByaW50KEFORFJPSURfTE9HX0ZBVEFMLCBwYXRoLCBtZXNzYWdlKTsKLQotICAgIC8qIE1ha2Ugc3VyZSB0aGVyZSBpcyBubyBkZWZhdWx0IGFjdGlvbiBmb3IgU0lHQUJSVCAqLwotICAgIGJ6ZXJvKCZzYSwgc2l6ZW9mKHN0cnVjdCBzaWdhY3Rpb24pKTsKLSAgICBzaWdlbXB0eXNldCgmc2Euc2FfbWFzayk7Ci0gICAgc2Euc2FfZmxhZ3MgPSAwOwotICAgIHNhLnNhX2hhbmRsZXIgPSBTSUdfREZMOwotICAgIHNpZ2FjdGlvbihTSUdBQlJULCAmc2EsIE5VTEwpOwotCi0gICAgLyogVGVybWluYXRlIHRoZSBwcm9jZXNzIGFuZCBleGl0IGltbWVkaWF0ZWx5ICovCi0gICAga2lsbChnZXRwaWQoKSwgU0lHQUJSVCk7Ci0KLSAgICBfZXhpdCgxMjcpOwotfQpkaWZmIC0tZ2l0IGEvbGliYy91bmlzdGQvc3RhdGZzLmMgYi9saWJjL2Jpb25pYy9zdGF0ZnMuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbGliYy91bmlzdGQvc3RhdGZzLmMKcmVuYW1lIHRvIGxpYmMvYmlvbmljL3N0YXRmcy5jCmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9zdGF0dmZzLmNwcCBiL2xpYmMvYmlvbmljL3N0YXR2ZnMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkNDJhYWEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2Jpb25pYy9zdGF0dmZzLmNwcApAQCAtMCwwICsxLDYyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2luY2x1ZGUgPHN5cy9zdGF0dmZzLmg+CisKKyNpbmNsdWRlIDxzeXMvc3RhdGZzLmg+CisKK2V4dGVybiAiQyIgaW50IF9fc3RhdGZzNjQoY29uc3QgY2hhciosIHNpemVfdCwgc3RydWN0IHN0YXRmcyopOworZXh0ZXJuICJDIiBpbnQgX19mc3RhdGZzNjQoaW50LCBzaXplX3QsIHN0cnVjdCBzdGF0ZnMqKTsKKworI2RlZmluZSBTVF9WQUxJRCAweDAwMjAKKworI2lmIGRlZmluZWQoX19taXBzX18pCisjZGVmaW5lIF9fdmFsIHZhbAorI2VuZGlmCisKK3N0YXRpYyB2b2lkIF9fc3RhdGZzX3RvX3N0YXR2ZnMoY29uc3Qgc3RydWN0IHN0YXRmcyYgaW4sIHN0cnVjdCBzdGF0dmZzKiBvdXQpIHsKKyAgb3V0LT5mX2JzaXplID0gaW4uZl9ic2l6ZTsKKyAgb3V0LT5mX2Zyc2l6ZSA9IGluLmZfZnJzaXplOworICBvdXQtPmZfYmxvY2tzID0gaW4uZl9ibG9ja3M7CisgIG91dC0+Zl9iZnJlZSA9IGluLmZfYmZyZWU7CisgIG91dC0+Zl9iYXZhaWwgPSBpbi5mX2JhdmFpbDsKKyAgb3V0LT5mX2ZpbGVzID0gaW4uZl9maWxlczsKKyAgb3V0LT5mX2ZmcmVlID0gaW4uZl9mZnJlZTsKKyAgb3V0LT5mX2ZhdmFpbCA9IGluLmZfZmZyZWU7CisgIG91dC0+Zl9mc2lkID0gaW4uZl9mc2lkLl9fdmFsWzBdIHwgKHN0YXRpY19jYXN0PHVpbnQ2NF90Pihpbi5mX2ZzaWQuX192YWxbMV0pIDw8IDMyKTsKKyAgb3V0LT5mX2ZsYWcgPSBpbi5mX2ZsYWdzICYgflNUX1ZBTElEOworICBvdXQtPmZfbmFtZW1heCA9IGluLmZfbmFtZWxlbjsKK30KKworaW50IHN0YXR2ZnMoY29uc3QgY2hhciogcGF0aCwgc3RydWN0IHN0YXR2ZnMqIHJlc3VsdCkgeworICBzdHJ1Y3Qgc3RhdGZzIHRtcDsKKyAgaW50IHJjID0gX19zdGF0ZnM2NChwYXRoLCBzaXplb2YodG1wKSwgJnRtcCk7CisgIGlmIChyYyAhPSAwKSB7CisgICAgcmV0dXJuIHJjOworICB9CisgIF9fc3RhdGZzX3RvX3N0YXR2ZnModG1wLCByZXN1bHQpOworICByZXR1cm4gMDsKK30KKworaW50IGZzdGF0dmZzKGludCBmZCwgc3RydWN0IHN0YXR2ZnMqIHJlc3VsdCkgeworICBzdHJ1Y3Qgc3RhdGZzIHRtcDsKKyAgaW50IHJjID0gX19mc3RhdGZzNjQoZmQsIHNpemVvZih0bXApLCAmdG1wKTsKKyAgaWYgKHJjICE9IDApIHsKKyAgICByZXR1cm4gcmM7CisgIH0KKyAgX19zdGF0ZnNfdG9fc3RhdHZmcyh0bXAsIHJlc3VsdCk7CisgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvc3RyY2hyLmNwcCBiL2xpYmMvYmlvbmljL3N0cmNoci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTJmNDQ3MQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYmlvbmljL3N0cmNoci5jcHAKQEAgLTAsMCArMSwzNCBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTAgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworZXh0ZXJuICJDIiBjaGFyKiBzdHJjaHIoY29uc3QgY2hhciogcCwgaW50IGNoKSB7CisgIHJldHVybiBfX3N0cmNocl9jaGsocCwgY2gsIF9fQklPTklDX0ZPUlRJRllfVU5LTk9XTl9TSVpFKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL3N0cmVycm9yLmNwcCBiL2xpYmMvYmlvbmljL3N0cmVycm9yLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTBjOTlmCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9iaW9uaWMvc3RyZXJyb3IuY3BwCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgIlRocmVhZExvY2FsQnVmZmVyLmgiCisKK2V4dGVybiAiQyIgY29uc3QgY2hhciogX19zdHJlcnJvcl9sb29rdXAoaW50KTsKKworR0xPQkFMX0lOSVRfVEhSRUFEX0xPQ0FMX0JVRkZFUihzdHJlcnJvcik7CisKK2NoYXIqIHN0cmVycm9yKGludCBlcnJvcl9udW1iZXIpIHsKKyAgLy8gSnVzdCByZXR1cm4gdGhlIG9yaWdpbmFsIGNvbnN0YW50IGluIHRoZSBlYXN5IGNhc2VzLgorICBjaGFyKiByZXN1bHQgPSBjb25zdF9jYXN0PGNoYXIqPihfX3N0cmVycm9yX2xvb2t1cChlcnJvcl9udW1iZXIpKTsKKyAgaWYgKHJlc3VsdCAhPSBOVUxMKSB7CisgICAgcmV0dXJuIHJlc3VsdDsKKyAgfQorCisgIExPQ0FMX0lOSVRfVEhSRUFEX0xPQ0FMX0JVRkZFUihjaGFyKiwgc3RyZXJyb3IsIE5MX1RFWFRNQVgpOworICBzdHJlcnJvcl9yKGVycm9yX251bWJlciwgc3RyZXJyb3JfdGxzX2J1ZmZlciwgc3RyZXJyb3JfdGxzX2J1ZmZlcl9zaXplKTsKKyAgcmV0dXJuIHN0cmVycm9yX3Rsc19idWZmZXI7Cit9CmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9zdHJlcnJvcl9yLmNwcCBiL2xpYmMvYmlvbmljL3N0cmVycm9yX3IuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxMTIwZWMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2Jpb25pYy9zdHJlcnJvcl9yLmNwcApAQCAtMCwwICsxLDgwIEBACisvKiAkT3BlbkJTRDogc3RyZXJyb3Jfci5jLHYgMS42IDIwMDUvMDgvMDggMDg6MDU6MzcgZXNwaWUgRXhwICQgKi8KKy8qIFB1YmxpYyBEb21haW4gPG1hcmNAc25hZnUub3JnPiAqLworCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxsaW1pdHMuaD4KKyNpbmNsdWRlIDxzaWduYWwuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaW5jbHVkZSAicHJpdmF0ZS9FcnJub1Jlc3RvcmVyLmgiCisKK3N0cnVjdCBQYWlyIHsKKyAgaW50IGNvZGU7CisgIGNvbnN0IGNoYXIqIG1zZzsKK307CisKK3N0YXRpYyBjb25zdCBjaGFyKiBfX2NvZGVfc3RyaW5nX2xvb2t1cChjb25zdCBQYWlyKiBzdHJpbmdzLCBpbnQgY29kZSkgeworICBmb3IgKHNpemVfdCBpID0gMDsgc3RyaW5nc1tpXS5tc2cgIT0gTlVMTDsgKytpKSB7CisgICAgaWYgKHN0cmluZ3NbaV0uY29kZSA9PSBjb2RlKSB7CisgICAgICByZXR1cm4gc3RyaW5nc1tpXS5tc2c7CisgICAgfQorICB9CisgIHJldHVybiBOVUxMOworfQorCitzdGF0aWMgY29uc3QgUGFpciBfc3lzX2Vycm9yX3N0cmluZ3NbXSA9IHsKKyNkZWZpbmUgIF9fQklPTklDX0VSUkRFRih4LHkseikgIHsgeCwgeiB9LAorI2luY2x1ZGUgPHN5cy9fZXJyZGVmcy5oPgorICB7IDAsIE5VTEwgfQorfTsKKworZXh0ZXJuICJDIiBfX0xJQkNfSElEREVOX18gY29uc3QgY2hhciogX19zdHJlcnJvcl9sb29rdXAoaW50IGVycm9yX251bWJlcikgeworICByZXR1cm4gX19jb2RlX3N0cmluZ19sb29rdXAoX3N5c19lcnJvcl9zdHJpbmdzLCBlcnJvcl9udW1iZXIpOworfQorCitzdGF0aWMgY29uc3QgUGFpciBfc3lzX3NpZ25hbF9zdHJpbmdzW10gPSB7CisjZGVmaW5lICBfX0JJT05JQ19TSUdERUYoeCx5LHopICB7IHksIHogfSwKKyNpbmNsdWRlIDxzeXMvX3NpZ2RlZnMuaD4KKyAgeyAwLCBOVUxMIH0KK307CisKK2V4dGVybiAiQyIgX19MSUJDX0hJRERFTl9fIGNvbnN0IGNoYXIqIF9fc3Ryc2lnbmFsX2xvb2t1cChpbnQgc2lnbmFsX251bWJlcikgeworICByZXR1cm4gX19jb2RlX3N0cmluZ19sb29rdXAoX3N5c19zaWduYWxfc3RyaW5ncywgc2lnbmFsX251bWJlcik7Cit9CisKK2ludCBzdHJlcnJvcl9yKGludCBlcnJvcl9udW1iZXIsIGNoYXIqIGJ1Ziwgc2l6ZV90IGJ1Zl9sZW4pIHsKKyAgRXJybm9SZXN0b3JlciBlcnJub19yZXN0b3JlcjsKKyAgc2l6ZV90IGxlbmd0aDsKKworICBjb25zdCBjaGFyKiBlcnJvcl9uYW1lID0gX19zdHJlcnJvcl9sb29rdXAoZXJyb3JfbnVtYmVyKTsKKyAgaWYgKGVycm9yX25hbWUgIT0gTlVMTCkgeworICAgIGxlbmd0aCA9IHNucHJpbnRmKGJ1ZiwgYnVmX2xlbiwgIiVzIiwgZXJyb3JfbmFtZSk7CisgIH0gZWxzZSB7CisgICAgbGVuZ3RoID0gc25wcmludGYoYnVmLCBidWZfbGVuLCAiVW5rbm93biBlcnJvciAlZCIsIGVycm9yX251bWJlcik7CisgIH0KKyAgaWYgKGxlbmd0aCA+PSBidWZfbGVuKSB7CisgICAgZXJybm9fcmVzdG9yZXIub3ZlcnJpZGUoRVJBTkdFKTsKKyAgICByZXR1cm4gLTE7CisgIH0KKworICByZXR1cm4gMDsKK30KKworZXh0ZXJuICJDIiBfX0xJQkNfSElEREVOX18gY29uc3QgY2hhciogX19zdHJzaWduYWwoaW50IHNpZ25hbF9udW1iZXIsIGNoYXIqIGJ1Ziwgc2l6ZV90IGJ1Zl9sZW4pIHsKKyAgY29uc3QgY2hhciogc2lnbmFsX25hbWUgPSBfX3N0cnNpZ25hbF9sb29rdXAoc2lnbmFsX251bWJlcik7CisgIGlmIChzaWduYWxfbmFtZSAhPSBOVUxMKSB7CisgICAgcmV0dXJuIHNpZ25hbF9uYW1lOworICB9CisKKyAgY29uc3QgY2hhciogcHJlZml4ID0gIlVua25vd24iOworICBpZiAoc2lnbmFsX251bWJlciA+PSBTSUdSVE1JTiAmJiBzaWduYWxfbnVtYmVyIDw9IFNJR1JUTUFYKSB7CisgICAgcHJlZml4ID0gIlJlYWwtdGltZSI7CisgICAgc2lnbmFsX251bWJlciAtPSBTSUdSVE1JTjsKKyAgfQorICBzaXplX3QgbGVuZ3RoID0gc25wcmludGYoYnVmLCBidWZfbGVuLCAiJXMgc2lnbmFsICVkIiwgcHJlZml4LCBzaWduYWxfbnVtYmVyKTsKKyAgaWYgKGxlbmd0aCA+PSBidWZfbGVuKSB7CisgICAgcmV0dXJuIE5VTEw7CisgIH0KKyAgcmV0dXJuIGJ1ZjsKK30KZGlmZiAtLWdpdCBhL2xpYmMvc3RyaW5nL3N0cm5kdXAuYyBiL2xpYmMvYmlvbmljL3N0cm5kdXAuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbGliYy9zdHJpbmcvc3RybmR1cC5jCnJlbmFtZSB0byBsaWJjL2Jpb25pYy9zdHJuZHVwLmMKZGlmZiAtLWdpdCBhL2xpYmMvc3RyaW5nL3N0cm5sZW4uYyBiL2xpYmMvYmlvbmljL3N0cm5sZW4uYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbGliYy9zdHJpbmcvc3Rybmxlbi5jCnJlbmFtZSB0byBsaWJjL2Jpb25pYy9zdHJubGVuLmMKZGlmZiAtLWdpdCBhL2xpYmMvc3RkbGliL3N0cm50b2ltYXguYyBiL2xpYmMvYmlvbmljL3N0cm50b2ltYXguYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbGliYy9zdGRsaWIvc3RybnRvaW1heC5jCnJlbmFtZSB0byBsaWJjL2Jpb25pYy9zdHJudG9pbWF4LmMKZGlmZiAtLWdpdCBhL2xpYmMvc3RkbGliL3N0cm50b3VtYXguYyBiL2xpYmMvYmlvbmljL3N0cm50b3VtYXguYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbGliYy9zdGRsaWIvc3RybnRvdW1heC5jCnJlbmFtZSB0byBsaWJjL2Jpb25pYy9zdHJudG91bWF4LmMKZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL3N0cnNpZ25hbC5jcHAgYi9saWJjL2Jpb25pYy9zdHJzaWduYWwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1NDllNzQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2Jpb25pYy9zdHJzaWduYWwuY3BwCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgIlRocmVhZExvY2FsQnVmZmVyLmgiCisKK2V4dGVybiAiQyIgY29uc3QgY2hhciogX19zdHJzaWduYWxfbG9va3VwKGludCk7CitleHRlcm4gIkMiIGNvbnN0IGNoYXIqIF9fc3Ryc2lnbmFsKGludCwgY2hhciosIHNpemVfdCk7CisKK0dMT0JBTF9JTklUX1RIUkVBRF9MT0NBTF9CVUZGRVIoc3Ryc2lnbmFsKTsKKworY2hhciogc3Ryc2lnbmFsKGludCBzaWduYWxfbnVtYmVyKSB7CisgIC8vIEp1c3QgcmV0dXJuIHRoZSBvcmlnaW5hbCBjb25zdGFudCBpbiB0aGUgZWFzeSBjYXNlcy4KKyAgY2hhciogcmVzdWx0ID0gY29uc3RfY2FzdDxjaGFyKj4oX19zdHJzaWduYWxfbG9va3VwKHNpZ25hbF9udW1iZXIpKTsKKyAgaWYgKHJlc3VsdCAhPSBOVUxMKSB7CisgICAgcmV0dXJuIHJlc3VsdDsKKyAgfQorCisgIExPQ0FMX0lOSVRfVEhSRUFEX0xPQ0FMX0JVRkZFUihjaGFyKiwgc3Ryc2lnbmFsLCBOTF9URVhUTUFYKTsKKyAgcmV0dXJuIGNvbnN0X2Nhc3Q8Y2hhcio+KF9fc3Ryc2lnbmFsKHNpZ25hbF9udW1iZXIsIHN0cnNpZ25hbF90bHNfYnVmZmVyLCBzdHJzaWduYWxfdGxzX2J1ZmZlcl9zaXplKSk7Cit9CmRpZmYgLS1naXQgYS9saWJjL3N0cmluZy9zdHJ0b3RpbWV2YWwuYyBiL2xpYmMvYmlvbmljL3N0cnRvdGltZXZhbC5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBsaWJjL3N0cmluZy9zdHJ0b3RpbWV2YWwuYwpyZW5hbWUgdG8gbGliYy9iaW9uaWMvc3RydG90aW1ldmFsLmMKZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL3N0dWJzLmMgYi9saWJjL2Jpb25pYy9zdHVicy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZjYzNDI3Li4wMDAwMDAwCi0tLSBhL2xpYmMvYmlvbmljL3N0dWJzLmMKKysrIC9kZXYvbnVsbApAQCAtMSw0NzQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqICAgIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKLSAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi0gKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCi0gKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAotICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCi0gKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKLSAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotI2luY2x1ZGUgPGdycC5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0jaW5jbHVkZSA8cHdkLmg+Ci0jaW5jbHVkZSA8bmV0ZGIuaD4KLSNpbmNsdWRlIDxtbnRlbnQuaD4KLSNpbmNsdWRlIDxwcml2YXRlL2FuZHJvaWRfZmlsZXN5c3RlbV9jb25maWcuaD4KLSNpbmNsdWRlIDxwdGhyZWFkLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8ZXJybm8uaD4KLSNpbmNsdWRlIDxjdHlwZS5oPgotCi1zdGF0aWMgaW50IGRvX2dldHB3X3IoaW50IGJ5X25hbWUsIGNvbnN0IGNoYXIqIG5hbWUsIHVpZF90IHVpZCwKLSAgICAgICAgc3RydWN0IHBhc3N3ZCogZHN0LCBjaGFyKiBidWYsIHNpemVfdCBieXRlX2NvdW50LCBzdHJ1Y3QgcGFzc3dkKiogcmVzdWx0KQotewotICAgIC8qCi0gICAgICogZ2V0cHduYW1fciBhbmQgZ2V0cHd1aWRfciBkb24ndCBtb2RpZnkgZXJybm8sIGJ1dCBsaWJyYXJ5IGNhbGxzIHdlCi0gICAgICogIG1ha2UgbWlnaHQuCi0gICAgICovCi0gICAgaW50IG9sZF9lcnJubyA9IGVycm5vOwotICAgIGludCByYyA9IDA7Ci0gICAgKnJlc3VsdCA9IE5VTEw7Ci0KLSAgICBjb25zdCBzdHJ1Y3QgcGFzc3dkKiBzcmMgPSBieV9uYW1lID8gZ2V0cHduYW0obmFtZSkgOiBnZXRwd3VpZCh1aWQpOwotCi0gICAgLyoKLSAgICAgKiBQT1NJWCBhbGxvd3MgZmFpbHVyZSB0byBmaW5kIGEgbWF0Y2ggdG8gYmUgY29uc2lkZXJlZCBhIG5vbi1lcnJvci4KLSAgICAgKiBSZXBvcnRpbmcgc3VjY2VzcyAoMCkgYnV0IHdpdGggKnJlc3VsdCBOVUxMIGlzIGdsaWJjJ3MgYmVoYXZpb3IuCi0gICAgICovCi0gICAgaWYgKHNyYyA9PSBOVUxMKSB7Ci0gICAgICAgIHJjID0gKGVycm5vID09IEVOT0VOVCkgPyAwIDogZXJybm87Ci0gICAgICAgIGdvdG8gZmFpbHVyZTsKLSAgICB9Ci0KLSAgICAvKgotICAgICAqIFdvcmsgb3V0IHdoZXJlIG91ciBzdHJpbmdzIHdpbGwgZ28gaW4gJ2J1ZicsIGFuZCB3aGV0aGVyIHdlJ3ZlIGdvdAotICAgICAqIGVub3VnaCBzcGFjZS4KLSAgICAgKi8KLSAgICBzaXplX3QgcmVxdWlyZWRfYnl0ZV9jb3VudCA9IDA7Ci0gICAgZHN0LT5wd19uYW1lID0gYnVmOwotICAgIHJlcXVpcmVkX2J5dGVfY291bnQgKz0gc3RybGVuKHNyYy0+cHdfbmFtZSkgKyAxOwotICAgIGRzdC0+cHdfZGlyID0gYnVmICsgcmVxdWlyZWRfYnl0ZV9jb3VudDsKLSAgICByZXF1aXJlZF9ieXRlX2NvdW50ICs9IHN0cmxlbihzcmMtPnB3X2RpcikgKyAxOwotICAgIGRzdC0+cHdfc2hlbGwgPSBidWYgKyByZXF1aXJlZF9ieXRlX2NvdW50OwotICAgIHJlcXVpcmVkX2J5dGVfY291bnQgKz0gc3RybGVuKHNyYy0+cHdfc2hlbGwpICsgMTsKLSAgICBpZiAoYnl0ZV9jb3VudCA8IHJlcXVpcmVkX2J5dGVfY291bnQpIHsKLSAgICAgICAgcmMgPSBFUkFOR0U7Ci0gICAgICAgIGdvdG8gZmFpbHVyZTsKLSAgICB9Ci0KLSAgICAvKiBDb3B5IHRoZSBzdHJpbmdzLiAqLwotICAgIHNucHJpbnRmKGJ1ZiwgYnl0ZV9jb3VudCwgIiVzJWMlcyVjJXMiLAotICAgICAgICAgICAgc3JjLT5wd19uYW1lLCAwLCBzcmMtPnB3X2RpciwgMCwgc3JjLT5wd19zaGVsbCk7Ci0KLSAgICAvKgotICAgICAqIHB3X3Bhc3N3ZCBpcyBub24tUE9TSVggYW5kIHVudXNlZCAoYWx3YXlzIE5VTEwpIGluIGJpb25pYy4KLSAgICAgKiBwd19nZWNvcyBpcyBub24tUE9TSVggYW5kIG1pc3NpbmcgaW4gYmlvbmljLgotICAgICAqLwotICAgIGRzdC0+cHdfcGFzc3dkID0gTlVMTDsKLQotICAgIC8qIENvcHkgdGhlIGludGVncmFsIGZpZWxkcy4gKi8KLSAgICBkc3QtPnB3X2dpZCA9IHNyYy0+cHdfZ2lkOwotICAgIGRzdC0+cHdfdWlkID0gc3JjLT5wd191aWQ7Ci0KLXN1Y2Nlc3M6Ci0gICAgcmMgPSAwOwotICAgICpyZXN1bHQgPSBkc3Q7Ci1mYWlsdXJlOgotICAgIGVycm5vID0gb2xkX2Vycm5vOwotICAgIHJldHVybiByYzsKLX0KLQotaW50IGdldHB3bmFtX3IoY29uc3QgY2hhciogbmFtZSwgc3RydWN0IHBhc3N3ZCogcHdkLAotICAgICAgICBjaGFyKiBidWYsIHNpemVfdCBieXRlX2NvdW50LCBzdHJ1Y3QgcGFzc3dkKiogcmVzdWx0KQotewotICAgIHJldHVybiBkb19nZXRwd19yKDEsIG5hbWUsIC0xLCBwd2QsIGJ1ZiwgYnl0ZV9jb3VudCwgcmVzdWx0KTsKLX0KLQotaW50IGdldHB3dWlkX3IodWlkX3QgdWlkLCBzdHJ1Y3QgcGFzc3dkKiBwd2QsCi0gICAgICAgIGNoYXIqIGJ1Ziwgc2l6ZV90IGJ5dGVfY291bnQsIHN0cnVjdCBwYXNzd2QqKiByZXN1bHQpCi17Ci0gICAgcmV0dXJuIGRvX2dldHB3X3IoMCwgTlVMTCwgdWlkLCBwd2QsIGJ1ZiwgYnl0ZV9jb3VudCwgcmVzdWx0KTsKLX0KLQotLyoqIFRocmVhZC1zcGVjaWZpYyBzdGF0ZSBmb3IgdGhlIHN0dWJzIGZ1bmN0aW9ucwotICoqLwotCi1zdGF0aWMgcHRocmVhZF9vbmNlX3QgICB0aGVfb25jZSA9IFBUSFJFQURfT05DRV9JTklUOwotc3RhdGljIHB0aHJlYWRfa2V5X3QgICAgdGhlX2tleTsKLQotdHlwZWRlZiBzdHJ1Y3QgewotICAgIHN0cnVjdCBwYXNzd2QgIHBhc3N3ZDsKLSAgICBzdHJ1Y3QgZ3JvdXAgICBncm91cDsKLSAgICBjaGFyKiAgICAgICAgICBncm91cF9tZW1iZXJzWzJdOwotICAgIGNoYXIgICAgICAgICAgIGFwcF9uYW1lX2J1ZmZlclszMl07Ci0gICAgY2hhciAgICAgICAgICAgZ3JvdXBfbmFtZV9idWZmZXJbMzJdOwotfSBzdHVic19zdGF0ZV90OwotCi1zdGF0aWMgdm9pZAotc3R1YnNfc3RhdGVfZnJlZSggdm9pZCogIF9zICkKLXsKLSAgICBzdHVic19zdGF0ZV90KiAgcyA9IF9zOwotICAgIGZyZWUocyk7Ci19Ci0KLXN0YXRpYyBzdHVic19zdGF0ZV90Kgotc3R1YnNfc3RhdGVfYWxsb2MoIHZvaWQgKQotewotICAgIHN0dWJzX3N0YXRlX3QqICBzID0gY2FsbG9jKDEsIHNpemVvZiAqcyk7Ci0KLSAgICBpZiAocyAhPSBOVUxMKSB7Ci0gICAgICAgIHMtPmdyb3VwLmdyX21lbSA9IHMtPmdyb3VwX21lbWJlcnM7Ci0gICAgfQotICAgIHJldHVybiBzOwotfQotCi1zdGF0aWMgdm9pZCBfX3N0dWJzX2tleV9pbml0KHZvaWQpCi17Ci0gICAgcHRocmVhZF9rZXlfY3JlYXRlKCAmdGhlX2tleSwgc3R1YnNfc3RhdGVfZnJlZSApOwotfQotCi1zdGF0aWMgc3R1YnNfc3RhdGVfdCoKLV9fc3R1YnNfc3RhdGUodm9pZCkKLXsKLSAgICBzdHVic19zdGF0ZV90KiAgczsKLQotICAgIHB0aHJlYWRfb25jZSgmdGhlX29uY2UsIF9fc3R1YnNfa2V5X2luaXQpOwotICAgIHMgPSBwdGhyZWFkX2dldHNwZWNpZmljKHRoZV9rZXkpOwotICAgIGlmIChzID09IE5VTEwpIHsKLSAgICAgICAgcyA9IHN0dWJzX3N0YXRlX2FsbG9jKCk7Ci0gICAgICAgIGlmIChzID09IE5VTEwpIHsKLSAgICAgICAgICAgIGVycm5vID0gRU5PTUVNOyAgLyoganVzdCBpbiBjYXNlICovCi0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoIHB0aHJlYWRfc2V0c3BlY2lmaWModGhlX2tleSwgcykgIT0gMCApIHsKLSAgICAgICAgICAgICAgICBzdHVic19zdGF0ZV9mcmVlKHMpOwotICAgICAgICAgICAgICAgIGVycm5vID0gRU5PTUVNOwotICAgICAgICAgICAgICAgIHMgICAgID0gTlVMTDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gczsKLX0KLQotc3RhdGljIHN0cnVjdCBwYXNzd2QqCi1hbmRyb2lkX2lpbmZvX3RvX3Bhc3N3ZCggc3RydWN0IHBhc3N3ZCAgICAgICAgICAqcHcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGFuZHJvaWRfaWRfaW5mbyAqaWluZm8gKQotewotICAgIHB3LT5wd19uYW1lICA9IChjaGFyKilpaW5mby0+bmFtZTsKLSAgICBwdy0+cHdfdWlkICAgPSBpaW5mby0+YWlkOwotICAgIHB3LT5wd19naWQgICA9IGlpbmZvLT5haWQ7Ci0gICAgcHctPnB3X2RpciAgID0gIi8iOwotICAgIHB3LT5wd19zaGVsbCA9ICIvc3lzdGVtL2Jpbi9zaCI7Ci0gICAgcmV0dXJuIHB3OwotfQotCi1zdGF0aWMgc3RydWN0IGdyb3VwKgotYW5kcm9pZF9paW5mb190b19ncm91cCggc3RydWN0IGdyb3VwICpnciwKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBhbmRyb2lkX2lkX2luZm8gKmlpbmZvICkKLXsKLSAgICBnci0+Z3JfbmFtZSAgID0gKGNoYXIqKSBpaW5mby0+bmFtZTsKLSAgICBnci0+Z3JfZ2lkICAgID0gaWluZm8tPmFpZDsKLSAgICBnci0+Z3JfbWVtWzBdID0gZ3ItPmdyX25hbWU7Ci0gICAgZ3ItPmdyX21lbVsxXSA9IE5VTEw7Ci0gICAgcmV0dXJuIGdyOwotfQotCi1zdGF0aWMgc3RydWN0IHBhc3N3ZCAqCi1hbmRyb2lkX2lkX3RvX3Bhc3N3ZCggc3RydWN0IHBhc3N3ZCAqcHcsIHVuc2lnbmVkIGlkKQotewotICAgIHN0cnVjdCBhbmRyb2lkX2lkX2luZm8gKmlpbmZvID0gYW5kcm9pZF9pZHM7Ci0gICAgdW5zaWduZWQgbjsKLSAgICBmb3IgKG4gPSAwOyBuIDwgYW5kcm9pZF9pZF9jb3VudDsgbisrKSB7Ci0gICAgICAgIGlmIChpaW5mb1tuXS5haWQgPT0gaWQpIHsKLSAgICAgICAgICAgIHJldHVybiBhbmRyb2lkX2lpbmZvX3RvX3Bhc3N3ZChwdywgaWluZm8gKyBuKTsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gTlVMTDsKLX0KLQotc3RhdGljIHN0cnVjdCBwYXNzd2QqCi1hbmRyb2lkX25hbWVfdG9fcGFzc3dkKHN0cnVjdCBwYXNzd2QgKnB3LCBjb25zdCBjaGFyICpuYW1lKQotewotICAgIHN0cnVjdCBhbmRyb2lkX2lkX2luZm8gKmlpbmZvID0gYW5kcm9pZF9pZHM7Ci0gICAgdW5zaWduZWQgbjsKLSAgICBmb3IgKG4gPSAwOyBuIDwgYW5kcm9pZF9pZF9jb3VudDsgbisrKSB7Ci0gICAgICAgIGlmICghc3RyY21wKGlpbmZvW25dLm5hbWUsIG5hbWUpKSB7Ci0gICAgICAgICAgICByZXR1cm4gYW5kcm9pZF9paW5mb190b19wYXNzd2QocHcsIGlpbmZvICsgbik7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIE5VTEw7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgZ3JvdXAqCi1hbmRyb2lkX2lkX3RvX2dyb3VwKCBzdHJ1Y3QgZ3JvdXAgKmdyLCB1bnNpZ25lZCBpZCApCi17Ci0gICAgc3RydWN0IGFuZHJvaWRfaWRfaW5mbyAqaWluZm8gPSBhbmRyb2lkX2lkczsKLSAgICB1bnNpZ25lZCBuOwotICAgIGZvciAobiA9IDA7IG4gPCBhbmRyb2lkX2lkX2NvdW50OyBuKyspIHsKLSAgICAgICAgaWYgKGlpbmZvW25dLmFpZCA9PSBpZCkgewotICAgICAgICAgICAgcmV0dXJuIGFuZHJvaWRfaWluZm9fdG9fZ3JvdXAoZ3IsIGlpbmZvICsgbik7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIE5VTEw7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgZ3JvdXAqCi1hbmRyb2lkX25hbWVfdG9fZ3JvdXAoIHN0cnVjdCBncm91cCAqZ3IsIGNvbnN0IGNoYXIgKm5hbWUgKQotewotICAgIHN0cnVjdCBhbmRyb2lkX2lkX2luZm8gKmlpbmZvID0gYW5kcm9pZF9pZHM7Ci0gICAgdW5zaWduZWQgbjsKLSAgICBmb3IgKG4gPSAwOyBuIDwgYW5kcm9pZF9pZF9jb3VudDsgbisrKSB7Ci0gICAgICAgIGlmICghc3RyY21wKGlpbmZvW25dLm5hbWUsIG5hbWUpKSB7Ci0gICAgICAgICAgICByZXR1cm4gYW5kcm9pZF9paW5mb190b19ncm91cChnciwgaWluZm8gKyBuKTsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gTlVMTDsKLX0KLQotLyogdHJhbnNsYXRlIGEgdXNlci9ncm91cCBuYW1lIGxpa2UgYXBwXzEyMzQgaW50byB0aGUKLSAqIGNvcnJlc3BvbmRpbmcgdXNlci9ncm91cCBpZCAoQUlEX0FQUCArIDEyMzQpCi0gKiByZXR1cm5zIDAgYW5kIHNldHMgZXJybm8gdG8gRU5PRU5UIGluIGNhc2Ugb2YgZXJyb3IKLSAqLwotc3RhdGljIHVuc2lnbmVkCi1hcHBfaWRfZnJvbV9uYW1lKCBjb25zdCBjaGFyKiAgbmFtZSApCi17Ci0gICAgdW5zaWduZWQgbG9uZyAgaWQ7Ci0gICAgY2hhciogICAgICAgICAgZW5kOwotCi0gICAgaWYgKG1lbWNtcChuYW1lLCAiYXBwXyIsIDQpICE9IDAgfHwgIWlzZGlnaXQobmFtZVs0XSkpCi0gICAgICAgIGdvdG8gRkFJTDsKLQotICAgIGlkID0gc3RydG91bChuYW1lKzQsICZlbmQsIDEwKTsKLSAgICBpZiAoKmVuZCAhPSAnXDAnKQotICAgICAgICBnb3RvIEZBSUw7Ci0KLSAgICBpZCArPSBBSURfQVBQOwotCi0gICAgLyogY2hlY2sgZm9yIG92ZXJmbG93IGFuZCB0aGF0IHRoZSB2YWx1ZSBjYW4gYmUKLSAgICAgKiBzdG9yZWQgaW4gb3VyIDMyLWJpdCB1aWRfdC9naWRfdCAqLwotICAgIGlmIChpZCA8IEFJRF9BUFAgfHwgKHVuc2lnbmVkKWlkICE9IGlkKQotICAgICAgICBnb3RvIEZBSUw7Ci0KLSAgICByZXR1cm4gKHVuc2lnbmVkKWlkOwotCi1GQUlMOgotICAgIGVycm5vID0gRU5PRU5UOwotICAgIHJldHVybiAwOwotfQotCi0vKiB0cmFuc2xhdGUgYSB1aWQgaW50byB0aGUgY29ycmVzcG9uZGluZyBhcHBfPHVpZD4KLSAqIHBhc3N3ZCBzdHJ1Y3R1cmUgKHNldHMgZXJybm8gdG8gRU5PRU5UIG9uIGZhaWx1cmUpCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgcGFzc3dkKgotYXBwX2lkX3RvX3Bhc3N3ZCh1aWRfdCAgdWlkLCBzdHVic19zdGF0ZV90KiAgc3RhdGUpCi17Ci0gICAgc3RydWN0IHBhc3N3ZCogIHB3ID0gJnN0YXRlLT5wYXNzd2Q7Ci0KLSAgICBpZiAodWlkIDwgQUlEX0FQUCkgewotICAgICAgICBlcnJubyA9IEVOT0VOVDsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgc25wcmludGYoIHN0YXRlLT5hcHBfbmFtZV9idWZmZXIsIHNpemVvZiBzdGF0ZS0+YXBwX25hbWVfYnVmZmVyLAotICAgICAgICAgICAgICAiYXBwXyV1IiwgdWlkIC0gQUlEX0FQUCApOwotCi0gICAgcHctPnB3X25hbWUgID0gc3RhdGUtPmFwcF9uYW1lX2J1ZmZlcjsKLSAgICBwdy0+cHdfZGlyICAgPSAiL2RhdGEiOwotICAgIHB3LT5wd19zaGVsbCA9ICIvc3lzdGVtL2Jpbi9zaCI7Ci0gICAgcHctPnB3X3VpZCAgID0gdWlkOwotICAgIHB3LT5wd19naWQgICA9IHVpZDsKLQotICAgIHJldHVybiBwdzsKLX0KLQotLyogdHJhbnNsYXRlIGEgZ2lkIGludG8gdGhlIGNvcnJlc3BvbmRpbmcgYXBwXzxnaWQ+Ci0gKiBncm91cCBzdHJ1Y3R1cmUgKHNldHMgZXJybm8gdG8gRU5PRU5UIG9uIGZhaWx1cmUpCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgZ3JvdXAqCi1hcHBfaWRfdG9fZ3JvdXAoZ2lkX3QgIGdpZCwgc3R1YnNfc3RhdGVfdCogIHN0YXRlKQotewotICAgIHN0cnVjdCBncm91cCogIGdyID0gJnN0YXRlLT5ncm91cDsKLQotICAgIGlmIChnaWQgPCBBSURfQVBQKSB7Ci0gICAgICAgIGVycm5vID0gRU5PRU5UOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICBzbnByaW50ZihzdGF0ZS0+Z3JvdXBfbmFtZV9idWZmZXIsIHNpemVvZiBzdGF0ZS0+Z3JvdXBfbmFtZV9idWZmZXIsCi0gICAgICAgICAgICAgImFwcF8ldSIsIGdpZCAtIEFJRF9BUFApOwotCi0gICAgZ3ItPmdyX25hbWUgICA9IHN0YXRlLT5ncm91cF9uYW1lX2J1ZmZlcjsKLSAgICBnci0+Z3JfZ2lkICAgID0gZ2lkOwotICAgIGdyLT5ncl9tZW1bMF0gPSBnci0+Z3JfbmFtZTsKLSAgICBnci0+Z3JfbWVtWzFdID0gTlVMTDsKLQotICAgIHJldHVybiBncjsKLX0KLQotCi1zdHJ1Y3QgcGFzc3dkKgotZ2V0cHd1aWQodWlkX3QgdWlkKQotewotICAgIHN0dWJzX3N0YXRlX3QqICBzdGF0ZSA9IF9fc3R1YnNfc3RhdGUoKTsKLSAgICBzdHJ1Y3QgcGFzc3dkKiAgcHc7Ci0KLSAgICBpZiAoc3RhdGUgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICBwdyA9ICZzdGF0ZS0+cGFzc3dkOwotCi0gICAgaWYgKCBhbmRyb2lkX2lkX3RvX3Bhc3N3ZChwdywgdWlkKSAhPSBOVUxMICkKLSAgICAgICAgcmV0dXJuIHB3OwotCi0gICAgcmV0dXJuIGFwcF9pZF90b19wYXNzd2QodWlkLCBzdGF0ZSk7Ci19Ci0KLXN0cnVjdCBwYXNzd2QqCi1nZXRwd25hbShjb25zdCBjaGFyICpsb2dpbikKLXsKLSAgICBzdHVic19zdGF0ZV90KiAgc3RhdGUgPSBfX3N0dWJzX3N0YXRlKCk7Ci0KLSAgICBpZiAoc3RhdGUgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICBpZiAoYW5kcm9pZF9uYW1lX3RvX3Bhc3N3ZCgmc3RhdGUtPnBhc3N3ZCwgbG9naW4pICE9IE5VTEwpCi0gICAgICAgIHJldHVybiAmc3RhdGUtPnBhc3N3ZDsKLQotICAgIHJldHVybiBhcHBfaWRfdG9fcGFzc3dkKCBhcHBfaWRfZnJvbV9uYW1lKGxvZ2luKSwgc3RhdGUgKTsKLX0KLQotaW50Ci1nZXRncm91cGxpc3QgKGNvbnN0IGNoYXIgKnVzZXIsIGdpZF90IGdyb3VwLAotICAgICAgICAgICAgICBnaWRfdCAqZ3JvdXBzLCBpbnQgKm5ncm91cHMpCi17Ci0gICAgaWYgKCpuZ3JvdXBzIDwgMSkgewotICAgICAgICAqbmdyb3VwcyA9IDE7Ci0gICAgICAgIHJldHVybiAtMTsKLSAgICB9Ci0gICAgZ3JvdXBzWzBdID0gZ3JvdXA7Ci0gICAgcmV0dXJuICgqbmdyb3VwcyA9IDEpOwotfQotCi1jaGFyKgotZ2V0bG9naW4odm9pZCkKLXsKLSAgICBzdHJ1Y3QgcGFzc3dkICpwdyA9IGdldHB3dWlkKGdldHVpZCgpKTsKLQotICAgIGlmKHB3KSB7Ci0gICAgICAgIHJldHVybiBwdy0+cHdfbmFtZTsKLSAgICB9IGVsc2UgewotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci19Ci0KLXN0cnVjdCBncm91cCoKLWdldGdyZ2lkKGdpZF90IGdpZCkKLXsKLSAgICBzdHVic19zdGF0ZV90KiAgc3RhdGUgPSBfX3N0dWJzX3N0YXRlKCk7Ci0gICAgc3RydWN0IGdyb3VwKiAgIGdyOwotCi0gICAgaWYgKHN0YXRlID09IE5VTEwpCi0gICAgICAgIHJldHVybiBOVUxMOwotCi0gICAgZ3IgPSBhbmRyb2lkX2lkX3RvX2dyb3VwKCZzdGF0ZS0+Z3JvdXAsIGdpZCk7Ci0gICAgaWYgKGdyICE9IE5VTEwpCi0gICAgICAgIHJldHVybiBncjsKLQotICAgIHJldHVybiBhcHBfaWRfdG9fZ3JvdXAoZ2lkLCBzdGF0ZSk7Ci19Ci0KLXN0cnVjdCBncm91cCoKLWdldGdybmFtKGNvbnN0IGNoYXIgKm5hbWUpCi17Ci0gICAgc3R1YnNfc3RhdGVfdCogIHN0YXRlID0gX19zdHVic19zdGF0ZSgpOwotICAgIHVuc2lnbmVkICAgICAgICBpZDsKLQotICAgIGlmIChzdGF0ZSA9PSBOVUxMKQotICAgICAgICByZXR1cm4gTlVMTDsKLQotICAgIGlmIChhbmRyb2lkX25hbWVfdG9fZ3JvdXAoJnN0YXRlLT5ncm91cCwgbmFtZSkgIT0gMCkKLSAgICAgICAgcmV0dXJuICZzdGF0ZS0+Z3JvdXA7Ci0KLSAgICByZXR1cm4gYXBwX2lkX3RvX2dyb3VwKCBhcHBfaWRfZnJvbV9uYW1lKG5hbWUpLCBzdGF0ZSApOwotfQotCi0KLXN0cnVjdCBuZXRlbnQqIGdldG5ldGJ5bmFtZShjb25zdCBjaGFyICpuYW1lKQotewotICAgIGZwcmludGYoc3RkZXJyLCAiRklYIE1FISBpbXBsZW1lbnQgZ2V0Z3JuYW0oKSAlczolZFxuIiwgX19GSUxFX18sIF9fTElORV9fKTsKLSAgICByZXR1cm4gTlVMTDsKLX0KLQotdm9pZCBlbmRwd2VudCh2b2lkKQotewotfQotCi1zdHJ1Y3QgbW50ZW50KiBnZXRtbnRlbnQoRklMRSogZikKLXsKLSAgICBmcHJpbnRmKHN0ZGVyciwgIkZJWCBNRSEgaW1wbGVtZW50IGdldG1udGVudCgpICVzOiVkXG4iLCBfX0ZJTEVfXywgX19MSU5FX18pOwotICAgIHJldHVybiBOVUxMOwotfQotCi1jaGFyKiB0dHluYW1lKGludCBmZCkKLXsKLSAgICBmcHJpbnRmKHN0ZGVyciwgIkZJWCBNRSEgaW1wbGVtZW50IHR0eW5hbWUoKSAlczolZFxuIiwgX19GSUxFX18sIF9fTElORV9fKTsKLSAgICByZXR1cm4gTlVMTDsKLX0KLQotaW50IHR0eW5hbWVfcihpbnQgZmQsIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1ZmxlbikKLXsKLSAgICBmcHJpbnRmKHN0ZGVyciwgIkZJWCBNRSEgaW1wbGVtZW50IHR0eW5hbWVfcigpICVzOiVkXG4iLCBfX0ZJTEVfXywgX19MSU5FX18pOwotICAgIHJldHVybiAtRVJBTkdFOwotfQotCi1zdHJ1Y3QgbmV0ZW50ICpnZXRuZXRieWFkZHIodWludDMyX3QgbmV0LCBpbnQgdHlwZSkKLXsKLSAgICBmcHJpbnRmKHN0ZGVyciwgIkZJWCBNRSEgaW1wbGVtZW50ICVzKCkgJXM6JWRcbiIsIF9fRlVOQ1RJT05fXywgX19GSUxFX18sIF9fTElORV9fKTsKLSAgICByZXR1cm4gTlVMTDsKLX0KLQotc3RydWN0IHByb3RvZW50ICpnZXRwcm90b2J5bmFtZShjb25zdCBjaGFyICpuYW1lKQotewotICAgIGZwcmludGYoc3RkZXJyLCAiRklYIE1FISBpbXBsZW1lbnQgJXMoKSAlczolZFxuIiwgX19GVU5DVElPTl9fLCBfX0ZJTEVfXywgX19MSU5FX18pOwotICAgIHJldHVybiBOVUxMOwotfQotCi1zdHJ1Y3QgcHJvdG9lbnQgKmdldHByb3RvYnludW1iZXIoaW50IHByb3RvKQotewotICAgIGZwcmludGYoc3RkZXJyLCAiRklYIE1FISBpbXBsZW1lbnQgJXMoKSAlczolZFxuIiwgX19GVU5DVElPTl9fLCBfX0ZJTEVfXywgX19MSU5FX18pOwotICAgIHJldHVybiBOVUxMOwotfQotCi1jaGFyKiBnZXR1c2Vyc2hlbGwodm9pZCkKLXsKLSAgICBmcHJpbnRmKHN0ZGVyciwgIkZJWCBNRSEgaW1wbGVtZW50ICVzKCkgJXM6JWRcbiIsIF9fRlVOQ1RJT05fXywgX19GSUxFX18sIF9fTElORV9fKTsKLSAgICByZXR1cm4gTlVMTDsKLX0KLQotdm9pZCBzZXR1c2Vyc2hlbGwodm9pZCkKLXsKLSAgICBmcHJpbnRmKHN0ZGVyciwgIkZJWCBNRSEgaW1wbGVtZW50ICVzKCkgJXM6JWRcbiIsIF9fRlVOQ1RJT05fXywgX19GSUxFX18sIF9fTElORV9fKTsKLX0KLQotdm9pZCBlbmR1c2Vyc2hlbGwodm9pZCkKLXsKLSAgICBmcHJpbnRmKHN0ZGVyciwgIkZJWCBNRSEgaW1wbGVtZW50ICVzKCkgJXM6JWRcbiIsIF9fRlVOQ1RJT05fXywgX19GSUxFX18sIF9fTElORV9fKTsKLX0KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL3N0dWJzLmNwcCBiL2xpYmMvYmlvbmljL3N0dWJzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODQxMWI3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9iaW9uaWMvc3R1YnMuY3BwCkBAIC0wLDAgKzEsNDcxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8Z3JwLmg+CisjaW5jbHVkZSA8bW50ZW50Lmg+CisjaW5jbHVkZSA8bmV0ZGIuaD4KKyNpbmNsdWRlIDxwdGhyZWFkLmg+CisjaW5jbHVkZSA8cHdkLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworI2luY2x1ZGUgInByaXZhdGUvYW5kcm9pZF9maWxlc3lzdGVtX2NvbmZpZy5oIgorI2luY2x1ZGUgInByaXZhdGUvRXJybm9SZXN0b3Jlci5oIgorI2luY2x1ZGUgInByaXZhdGUvbGliY19sb2dnaW5nLmgiCisKKy8vIFRocmVhZC1zcGVjaWZpYyBzdGF0ZSBmb3IgdGhlIG5vbi1yZWVudHJhbnQgZnVuY3Rpb25zLgorc3RhdGljIHB0aHJlYWRfb25jZV90IHN0dWJzX29uY2UgPSBQVEhSRUFEX09OQ0VfSU5JVDsKK3N0YXRpYyBwdGhyZWFkX2tleV90IHN0dWJzX2tleTsKK3N0cnVjdCBzdHVic19zdGF0ZV90IHsKKyAgcGFzc3dkIHBhc3N3ZF87CisgIGdyb3VwIGdyb3VwXzsKKyAgY2hhciogZ3JvdXBfbWVtYmVyc19bMl07CisgIGNoYXIgYXBwX25hbWVfYnVmZmVyX1szMl07CisgIGNoYXIgZ3JvdXBfbmFtZV9idWZmZXJfWzMyXTsKKyAgY2hhciBkaXJfYnVmZmVyX1szMl07CisgIGNoYXIgc2hfYnVmZmVyX1szMl07Cit9OworCitzdGF0aWMgaW50IGRvX2dldHB3X3IoaW50IGJ5X25hbWUsIGNvbnN0IGNoYXIqIG5hbWUsIHVpZF90IHVpZCwKKyAgICAgICAgICAgICAgICAgICAgICBwYXNzd2QqIGRzdCwgY2hhciogYnVmLCBzaXplX3QgYnl0ZV9jb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICBwYXNzd2QqKiByZXN1bHQpIHsKKyAgLy8gZ2V0cHduYW1fciBhbmQgZ2V0cHd1aWRfciBkb24ndCBtb2RpZnkgZXJybm8sIGJ1dCBsaWJyYXJ5IGNhbGxzIHdlCisgIC8vIG1ha2UgbWlnaHQuCisgIEVycm5vUmVzdG9yZXIgZXJybm9fcmVzdG9yZXI7CisgICpyZXN1bHQgPSBOVUxMOworCisgIC8vIE91ciBpbXBsZW1lbnRhdGlvbiBvZiBnZXRwd25hbSgzKSBhbmQgZ2V0cHd1aWQoMykgdXNlIHRocmVhZC1sb2NhbAorICAvLyBzdG9yYWdlLCBzbyB3ZSBjYW4gY2FsbCB0aGVtIGFzIGxvbmcgYXMgd2UgY29weSBldmVyeXRoaW5nIG91dAorICAvLyBiZWZvcmUgcmV0dXJuaW5nLgorICBjb25zdCBwYXNzd2QqIHNyYyA9IGJ5X25hbWUgPyBnZXRwd25hbShuYW1lKSA6IGdldHB3dWlkKHVpZCk7IC8vIE5PTElOVDogc2VlIGFib3ZlLgorCisgIC8vIFBPU0lYIGFsbG93cyBmYWlsdXJlIHRvIGZpbmQgYSBtYXRjaCB0byBiZSBjb25zaWRlcmVkIGEgbm9uLWVycm9yLgorICAvLyBSZXBvcnRpbmcgc3VjY2VzcyAoMCkgYnV0IHdpdGggKnJlc3VsdCBOVUxMIGlzIGdsaWJjJ3MgYmVoYXZpb3IuCisgIGlmIChzcmMgPT0gTlVMTCkgeworICAgIHJldHVybiAoZXJybm8gPT0gRU5PRU5UKSA/IDAgOiBlcnJubzsKKyAgfQorCisgIC8vIFdvcmsgb3V0IHdoZXJlIG91ciBzdHJpbmdzIHdpbGwgZ28gaW4gJ2J1ZicsIGFuZCB3aGV0aGVyIHdlJ3ZlIGdvdAorICAvLyBlbm91Z2ggc3BhY2UuCisgIHNpemVfdCByZXF1aXJlZF9ieXRlX2NvdW50ID0gMDsKKyAgZHN0LT5wd19uYW1lID0gYnVmOworICByZXF1aXJlZF9ieXRlX2NvdW50ICs9IHN0cmxlbihzcmMtPnB3X25hbWUpICsgMTsKKyAgZHN0LT5wd19kaXIgPSBidWYgKyByZXF1aXJlZF9ieXRlX2NvdW50OworICByZXF1aXJlZF9ieXRlX2NvdW50ICs9IHN0cmxlbihzcmMtPnB3X2RpcikgKyAxOworICBkc3QtPnB3X3NoZWxsID0gYnVmICsgcmVxdWlyZWRfYnl0ZV9jb3VudDsKKyAgcmVxdWlyZWRfYnl0ZV9jb3VudCArPSBzdHJsZW4oc3JjLT5wd19zaGVsbCkgKyAxOworICBpZiAoYnl0ZV9jb3VudCA8IHJlcXVpcmVkX2J5dGVfY291bnQpIHsKKyAgICByZXR1cm4gRVJBTkdFOworICB9CisKKyAgLy8gQ29weSB0aGUgc3RyaW5ncy4KKyAgc25wcmludGYoYnVmLCBieXRlX2NvdW50LCAiJXMlYyVzJWMlcyIsIHNyYy0+cHdfbmFtZSwgMCwgc3JjLT5wd19kaXIsIDAsIHNyYy0+cHdfc2hlbGwpOworCisgIC8vIHB3X3Bhc3N3ZCBpcyBub24tUE9TSVggYW5kIHVudXNlZCAoYWx3YXlzIE5VTEwpIGluIGJpb25pYy4KKyAgLy8gcHdfZ2Vjb3MgaXMgbm9uLVBPU0lYIGFuZCBtaXNzaW5nIGluIGJpb25pYy4KKyAgZHN0LT5wd19wYXNzd2QgPSBOVUxMOworCisgIC8vIENvcHkgdGhlIGludGVncmFsIGZpZWxkcy4KKyAgZHN0LT5wd19naWQgPSBzcmMtPnB3X2dpZDsKKyAgZHN0LT5wd191aWQgPSBzcmMtPnB3X3VpZDsKKworICAqcmVzdWx0ID0gZHN0OworICByZXR1cm4gMDsKK30KKworaW50IGdldHB3bmFtX3IoY29uc3QgY2hhciogbmFtZSwgcGFzc3dkKiBwd2QsCisgICAgICAgICAgICAgICBjaGFyKiBidWYsIHNpemVfdCBieXRlX2NvdW50LCBwYXNzd2QqKiByZXN1bHQpIHsKKyAgcmV0dXJuIGRvX2dldHB3X3IoMSwgbmFtZSwgLTEsIHB3ZCwgYnVmLCBieXRlX2NvdW50LCByZXN1bHQpOworfQorCitpbnQgZ2V0cHd1aWRfcih1aWRfdCB1aWQsIHBhc3N3ZCogcHdkLAorICAgICAgICAgICAgICAgY2hhciogYnVmLCBzaXplX3QgYnl0ZV9jb3VudCwgcGFzc3dkKiogcmVzdWx0KSB7CisgIHJldHVybiBkb19nZXRwd19yKDAsIE5VTEwsIHVpZCwgcHdkLCBidWYsIGJ5dGVfY291bnQsIHJlc3VsdCk7Cit9CisKK3N0YXRpYyBzdHVic19zdGF0ZV90KiBzdHVic19zdGF0ZV9hbGxvYygpIHsKKyAgc3R1YnNfc3RhdGVfdCogIHMgPSBzdGF0aWNfY2FzdDxzdHVic19zdGF0ZV90Kj4oY2FsbG9jKDEsIHNpemVvZigqcykpKTsKKyAgaWYgKHMgIT0gTlVMTCkgeworICAgIHMtPmdyb3VwXy5ncl9tZW0gPSBzLT5ncm91cF9tZW1iZXJzXzsKKyAgfQorICByZXR1cm4gczsKK30KKworc3RhdGljIHZvaWQgc3R1YnNfc3RhdGVfZnJlZSh2b2lkKiBwdHIpIHsKKyAgc3R1YnNfc3RhdGVfdCogc3RhdGUgPSBzdGF0aWNfY2FzdDxzdHVic19zdGF0ZV90Kj4ocHRyKTsKKyAgZnJlZShzdGF0ZSk7Cit9CisKK3N0YXRpYyB2b2lkIF9fc3R1YnNfa2V5X2luaXQoKSB7CisgIHB0aHJlYWRfa2V5X2NyZWF0ZSgmc3R1YnNfa2V5LCBzdHVic19zdGF0ZV9mcmVlKTsKK30KKworc3RhdGljIHN0dWJzX3N0YXRlX3QqIF9fc3R1YnNfc3RhdGUoKSB7CisgIHB0aHJlYWRfb25jZSgmc3R1YnNfb25jZSwgX19zdHVic19rZXlfaW5pdCk7CisgIHN0dWJzX3N0YXRlX3QqIHMgPSBzdGF0aWNfY2FzdDxzdHVic19zdGF0ZV90Kj4ocHRocmVhZF9nZXRzcGVjaWZpYyhzdHVic19rZXkpKTsKKyAgaWYgKHMgPT0gTlVMTCkgeworICAgIHMgPSBzdHVic19zdGF0ZV9hbGxvYygpOworICAgIGlmIChzID09IE5VTEwpIHsKKyAgICAgIGVycm5vID0gRU5PTUVNOyAgLy8gSnVzdCBpbiBjYXNlLgorICAgIH0gZWxzZSB7CisgICAgICBpZiAocHRocmVhZF9zZXRzcGVjaWZpYyhzdHVic19rZXksIHMpICE9IDApIHsKKyAgICAgICAgc3R1YnNfc3RhdGVfZnJlZShzKTsKKyAgICAgICAgZXJybm8gPSBFTk9NRU07CisgICAgICAgIHMgPSBOVUxMOworICAgICAgfQorICAgIH0KKyAgfQorICByZXR1cm4gczsKK30KKworc3RhdGljIHBhc3N3ZCogYW5kcm9pZF9paW5mb190b19wYXNzd2Qoc3R1YnNfc3RhdGVfdCogc3RhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhbmRyb2lkX2lkX2luZm8qIGlpbmZvKSB7CisgIHNucHJpbnRmKHN0YXRlLT5kaXJfYnVmZmVyXywgc2l6ZW9mKHN0YXRlLT5kaXJfYnVmZmVyXyksICIvIik7CisgIHNucHJpbnRmKHN0YXRlLT5zaF9idWZmZXJfLCBzaXplb2Yoc3RhdGUtPnNoX2J1ZmZlcl8pLCAiL3N5c3RlbS9iaW4vc2giKTsKKworICBwYXNzd2QqIHB3ID0gJnN0YXRlLT5wYXNzd2RfOworICBwdy0+cHdfbmFtZSAgPSAoY2hhciopIGlpbmZvLT5uYW1lOworICBwdy0+cHdfdWlkICAgPSBpaW5mby0+YWlkOworICBwdy0+cHdfZ2lkICAgPSBpaW5mby0+YWlkOworICBwdy0+cHdfZGlyICAgPSBzdGF0ZS0+ZGlyX2J1ZmZlcl87CisgIHB3LT5wd19zaGVsbCA9IHN0YXRlLT5zaF9idWZmZXJfOworICByZXR1cm4gcHc7Cit9CisKK3N0YXRpYyBncm91cCogYW5kcm9pZF9paW5mb190b19ncm91cChncm91cCogZ3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYW5kcm9pZF9pZF9pbmZvKiBpaW5mbykgeworICBnci0+Z3JfbmFtZSAgID0gKGNoYXIqKSBpaW5mby0+bmFtZTsKKyAgZ3ItPmdyX2dpZCAgICA9IGlpbmZvLT5haWQ7CisgIGdyLT5ncl9tZW1bMF0gPSBnci0+Z3JfbmFtZTsKKyAgZ3ItPmdyX21lbVsxXSA9IE5VTEw7CisgIHJldHVybiBncjsKK30KKworc3RhdGljIHBhc3N3ZCogYW5kcm9pZF9pZF90b19wYXNzd2Qoc3R1YnNfc3RhdGVfdCogc3RhdGUsIHVuc2lnbmVkIGlkKSB7CisgIGZvciAoc2l6ZV90IG4gPSAwOyBuIDwgYW5kcm9pZF9pZF9jb3VudDsgKytuKSB7CisgICAgaWYgKGFuZHJvaWRfaWRzW25dLmFpZCA9PSBpZCkgeworICAgICAgcmV0dXJuIGFuZHJvaWRfaWluZm9fdG9fcGFzc3dkKHN0YXRlLCBhbmRyb2lkX2lkcyArIG4pOworICAgIH0KKyAgfQorICByZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHBhc3N3ZCogYW5kcm9pZF9uYW1lX3RvX3Bhc3N3ZChzdHVic19zdGF0ZV90KiBzdGF0ZSwgY29uc3QgY2hhciogbmFtZSkgeworICBmb3IgKHNpemVfdCBuID0gMDsgbiA8IGFuZHJvaWRfaWRfY291bnQ7ICsrbikgeworICAgIGlmICghc3RyY21wKGFuZHJvaWRfaWRzW25dLm5hbWUsIG5hbWUpKSB7CisgICAgICByZXR1cm4gYW5kcm9pZF9paW5mb190b19wYXNzd2Qoc3RhdGUsIGFuZHJvaWRfaWRzICsgbik7CisgICAgfQorICB9CisgIHJldHVybiBOVUxMOworfQorCitzdGF0aWMgZ3JvdXAqIGFuZHJvaWRfaWRfdG9fZ3JvdXAoZ3JvdXAqIGdyLCB1bnNpZ25lZCBpZCkgeworICBmb3IgKHNpemVfdCBuID0gMDsgbiA8IGFuZHJvaWRfaWRfY291bnQ7ICsrbikgeworICAgIGlmIChhbmRyb2lkX2lkc1tuXS5haWQgPT0gaWQpIHsKKyAgICAgIHJldHVybiBhbmRyb2lkX2lpbmZvX3RvX2dyb3VwKGdyLCBhbmRyb2lkX2lkcyArIG4pOworICAgIH0KKyAgfQorICByZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGdyb3VwKiBhbmRyb2lkX25hbWVfdG9fZ3JvdXAoZ3JvdXAqIGdyLCBjb25zdCBjaGFyKiBuYW1lKSB7CisgIGZvciAoc2l6ZV90IG4gPSAwOyBuIDwgYW5kcm9pZF9pZF9jb3VudDsgKytuKSB7CisgICAgaWYgKCFzdHJjbXAoYW5kcm9pZF9pZHNbbl0ubmFtZSwgbmFtZSkpIHsKKyAgICAgIHJldHVybiBhbmRyb2lkX2lpbmZvX3RvX2dyb3VwKGdyLCBhbmRyb2lkX2lkcyArIG4pOworICAgIH0KKyAgfQorICByZXR1cm4gTlVMTDsKK30KKworLy8gVHJhbnNsYXRlIGEgdXNlci9ncm91cCBuYW1lIHRvIHRoZSBjb3JyZXNwb25kaW5nIHVzZXIvZ3JvdXAgaWQuCisvLyB1MF9hMTIzNCAtPiAwICogQUlEX1VTRVIgKyBBSURfQVBQICsgMTIzNAorLy8gdTJfaTEwMDAgLT4gMiAqIEFJRF9VU0VSICsgQUlEX0lTT0xBVEVEX1NUQVJUICsgMTAwMAorLy8gdTFfc3lzdGVtIC0+IDEgKiBBSURfVVNFUiArIGFuZHJvaWRfaWRzWydzeXN0ZW0nXQorLy8gcmV0dXJucyAwIGFuZCBzZXRzIGVycm5vIHRvIEVOT0VOVCBpbiBjYXNlIG9mIGVycm9yCitzdGF0aWMgdW5zaWduZWQgYXBwX2lkX2Zyb21fbmFtZShjb25zdCBjaGFyKiBuYW1lKSB7CisgIGlmIChuYW1lWzBdICE9ICd1JyB8fCAhaXNkaWdpdChuYW1lWzFdKSkgeworICAgIGVycm5vID0gRU5PRU5UOworICAgIHJldHVybiAwOworICB9CisKKyAgY2hhciogZW5kOworICB1bnNpZ25lZCBsb25nIHVzZXJpZCA9IHN0cnRvdWwobmFtZSsxLCAmZW5kLCAxMCk7CisgIGlmIChlbmRbMF0gIT0gJ18nIHx8IGVuZFsxXSA9PSAwKSB7CisgICAgZXJybm8gPSBFTk9FTlQ7CisgICAgcmV0dXJuIDA7CisgIH0KKworICB1bnNpZ25lZCBsb25nIGFwcGlkID0gMDsKKyAgaWYgKGVuZFsxXSA9PSAnYScgJiYgaXNkaWdpdChlbmRbMl0pKSB7CisgICAgLy8gZW5kIHdpbGwgcG9pbnQgdG8gXDAgaWYgdGhlIHN0cnRvdWwgYmVsb3cgc3VjY2VlZHMuCisgICAgYXBwaWQgPSBzdHJ0b3VsKGVuZCsyLCAmZW5kLCAxMCkgKyBBSURfQVBQOworICB9IGVsc2UgaWYgKGVuZFsxXSA9PSAnaScgJiYgaXNkaWdpdChlbmRbMl0pKSB7CisgICAgLy8gZW5kIHdpbGwgcG9pbnQgdG8gXDAgaWYgdGhlIHN0cnRvdWwgYmVsb3cgc3VjY2VlZHMuCisgICAgYXBwaWQgPSBzdHJ0b3VsKGVuZCsyLCAmZW5kLCAxMCkgKyBBSURfSVNPTEFURURfU1RBUlQ7CisgIH0gZWxzZSB7CisgICAgZm9yIChzaXplX3QgbiA9IDA7IG4gPCBhbmRyb2lkX2lkX2NvdW50OyBuKyspIHsKKyAgICAgIGlmICghc3RyY21wKGFuZHJvaWRfaWRzW25dLm5hbWUsIGVuZCArIDEpKSB7CisgICAgICAgIGFwcGlkID0gYW5kcm9pZF9pZHNbbl0uYWlkOworICAgICAgICAvLyBNb3ZlIHRoZSBlbmQgcG9pbnRlciB0byB0aGUgbnVsbCB0ZXJtaW5hdG9yLgorICAgICAgICBlbmQgKz0gc3RybGVuKGFuZHJvaWRfaWRzW25dLm5hbWUpICsgMTsKKyAgICAgIH0KKyAgICB9CisgIH0KKworICAvLyBDaGVjayB0aGF0IHRoZSBlbnRpcmUgc3RyaW5nIHdhcyBjb25zdW1lZCBieSBvbmUgb2YgdGhlIDMgY2FzZXMgYWJvdmUuCisgIGlmIChlbmRbMF0gIT0gMCkgeworICAgIGVycm5vID0gRU5PRU5UOworICAgIHJldHVybiAwOworICB9CisKKyAgLy8gQ2hlY2sgdGhhdCB1c2VyIGlkIHdvbid0IG92ZXJmbG93LgorICBpZiAodXNlcmlkID4gMTAwMCkgeworICAgIGVycm5vID0gRU5PRU5UOworICAgIHJldHVybiAwOworICB9CisKKyAgLy8gQ2hlY2sgdGhhdCBhcHAgaWQgaXMgd2l0aGluIHJhbmdlLgorICBpZiAoYXBwaWQgPj0gQUlEX1VTRVIpIHsKKyAgICBlcnJubyA9IEVOT0VOVDsKKyAgICByZXR1cm4gMDsKKyAgfQorCisgIHJldHVybiAodW5zaWduZWQpKGFwcGlkICsgdXNlcmlkKkFJRF9VU0VSKTsKK30KKworc3RhdGljIHZvaWQgcHJpbnRfYXBwX25hbWVfZnJvbV9hcHBpZF91c2VyaWQoY29uc3QgdWlkX3QgYXBwaWQsCisgICAgY29uc3QgdWlkX3QgdXNlcmlkLCBjaGFyKiBidWZmZXIsIGNvbnN0IGludCBidWZmZXJsZW4pIHsKKyAgaWYgKGFwcGlkID49IEFJRF9JU09MQVRFRF9TVEFSVCkgeworICAgIHNucHJpbnRmKGJ1ZmZlciwgYnVmZmVybGVuLCAidSV1X2kldSIsIHVzZXJpZCwgYXBwaWQgLSBBSURfSVNPTEFURURfU1RBUlQpOworICB9IGVsc2UgaWYgKHVzZXJpZCA9PSAwICYmIGFwcGlkID49IEFJRF9TSEFSRURfR0lEX1NUQVJUKSB7CisgICAgc25wcmludGYoYnVmZmVyLCBidWZmZXJsZW4sICJhbGxfYSV1IiwgYXBwaWQgLSBBSURfU0hBUkVEX0dJRF9TVEFSVCk7CisgIH0gZWxzZSBpZiAoYXBwaWQgPCBBSURfQVBQKSB7CisgICAgZm9yIChzaXplX3QgbiA9IDA7IG4gPCBhbmRyb2lkX2lkX2NvdW50OyBuKyspIHsKKyAgICAgIGlmIChhbmRyb2lkX2lkc1tuXS5haWQgPT0gYXBwaWQpIHsKKyAgICAgICAgc25wcmludGYoYnVmZmVyLCBidWZmZXJsZW4sICJ1JXVfJXMiLCB1c2VyaWQsIGFuZHJvaWRfaWRzW25dLm5hbWUpOworICAgICAgICByZXR1cm47CisgICAgICB9CisgICAgfQorICB9IGVsc2UgeworICAgIHNucHJpbnRmKGJ1ZmZlciwgYnVmZmVybGVuLCAidSV1X2EldSIsIHVzZXJpZCwgYXBwaWQgLSBBSURfQVBQKTsKKyAgfQorfQorCitzdGF0aWMgdm9pZCBwcmludF9hcHBfbmFtZV9mcm9tX3VpZChjb25zdCB1aWRfdCB1aWQsIGNoYXIqIGJ1ZmZlciwgY29uc3QgaW50IGJ1ZmZlcmxlbikgeworICBjb25zdCB1aWRfdCBhcHBpZCA9IHVpZCAlIEFJRF9VU0VSOworICBjb25zdCB1aWRfdCB1c2VyaWQgPSB1aWQgLyBBSURfVVNFUjsKKyAgcmV0dXJuIHByaW50X2FwcF9uYW1lX2Zyb21fYXBwaWRfdXNlcmlkKGFwcGlkLCB1c2VyaWQsIGJ1ZmZlciwgYnVmZmVybGVuKTsKK30KKworLy8gVHJhbnNsYXRlIGEgdWlkIGludG8gdGhlIGNvcnJlc3BvbmRpbmcgbmFtZS4KKy8vIDAgdG8gQUlEX0FQUC0xICAgICAgICAgICAgICAgICAgIC0+ICJzeXN0ZW0iLCAicmFkaW8iLCBldGMuCisvLyBBSURfQVBQIHRvIEFJRF9JU09MQVRFRF9TVEFSVC0xICAtPiB1MF9hMTIzNAorLy8gQUlEX0lTT0xBVEVEX1NUQVJUIHRvIEFJRF9VU0VSLTEgLT4gdTBfaTEyMzQKKy8vIEFJRF9VU0VSKyAgICAgICAgICAgICAgICAgICAgICAgIC0+IHUxX3JhZGlvLCB1MV9hMTIzNCwgdTJfaTEyMzQsIGV0Yy4KKy8vIHJldHVybnMgYSBwYXNzd2Qgc3RydWN0dXJlIChzZXRzIGVycm5vIHRvIEVOT0VOVCBvbiBmYWlsdXJlKS4KK3N0YXRpYyBwYXNzd2QqIGFwcF9pZF90b19wYXNzd2QodWlkX3QgdWlkLCBzdHVic19zdGF0ZV90KiBzdGF0ZSkgeworICBwYXNzd2QqIHB3ID0gJnN0YXRlLT5wYXNzd2RfOworCisgIGlmICh1aWQgPCBBSURfQVBQKSB7CisgICAgZXJybm8gPSBFTk9FTlQ7CisgICAgcmV0dXJuIE5VTEw7CisgIH0KKworICBjb25zdCB1aWRfdCBhcHBpZCA9IHVpZCAlIEFJRF9VU0VSOworICBjb25zdCB1aWRfdCB1c2VyaWQgPSB1aWQgLyBBSURfVVNFUjsKKworICBwcmludF9hcHBfbmFtZV9mcm9tX2FwcGlkX3VzZXJpZChhcHBpZCwgdXNlcmlkLCBzdGF0ZS0+YXBwX25hbWVfYnVmZmVyXywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHN0YXRlLT5hcHBfbmFtZV9idWZmZXJfKSk7CisKKyAgaWYgKGFwcGlkIDwgQUlEX0FQUCkgeworICAgICAgc25wcmludGYoc3RhdGUtPmRpcl9idWZmZXJfLCBzaXplb2Yoc3RhdGUtPmRpcl9idWZmZXJfKSwgIi8iKTsKKyAgfSBlbHNlIHsKKyAgICAgIHNucHJpbnRmKHN0YXRlLT5kaXJfYnVmZmVyXywgc2l6ZW9mKHN0YXRlLT5kaXJfYnVmZmVyXyksICIvZGF0YSIpOworICB9CisKKyAgc25wcmludGYoc3RhdGUtPnNoX2J1ZmZlcl8sIHNpemVvZihzdGF0ZS0+c2hfYnVmZmVyXyksICIvc3lzdGVtL2Jpbi9zaCIpOworCisgIHB3LT5wd19uYW1lICA9IHN0YXRlLT5hcHBfbmFtZV9idWZmZXJfOworICBwdy0+cHdfZGlyICAgPSBzdGF0ZS0+ZGlyX2J1ZmZlcl87CisgIHB3LT5wd19zaGVsbCA9IHN0YXRlLT5zaF9idWZmZXJfOworICBwdy0+cHdfdWlkICAgPSB1aWQ7CisgIHB3LT5wd19naWQgICA9IHVpZDsKKworICByZXR1cm4gcHc7Cit9CisKKy8vIFRyYW5zbGF0ZSBhIGdpZCBpbnRvIHRoZSBjb3JyZXNwb25kaW5nIGFwcF88Z2lkPgorLy8gZ3JvdXAgc3RydWN0dXJlIChzZXRzIGVycm5vIHRvIEVOT0VOVCBvbiBmYWlsdXJlKS4KK3N0YXRpYyBncm91cCogYXBwX2lkX3RvX2dyb3VwKGdpZF90IGdpZCwgc3R1YnNfc3RhdGVfdCogc3RhdGUpIHsKKyAgaWYgKGdpZCA8IEFJRF9BUFApIHsKKyAgICBlcnJubyA9IEVOT0VOVDsKKyAgICByZXR1cm4gTlVMTDsKKyAgfQorCisgIHByaW50X2FwcF9uYW1lX2Zyb21fdWlkKGdpZCwgc3RhdGUtPmdyb3VwX25hbWVfYnVmZmVyXywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHN0YXRlLT5ncm91cF9uYW1lX2J1ZmZlcl8pKTsKKworICBncm91cCogZ3IgPSAmc3RhdGUtPmdyb3VwXzsKKyAgZ3ItPmdyX25hbWUgICA9IHN0YXRlLT5ncm91cF9uYW1lX2J1ZmZlcl87CisgIGdyLT5ncl9naWQgICAgPSBnaWQ7CisgIGdyLT5ncl9tZW1bMF0gPSBnci0+Z3JfbmFtZTsKKyAgZ3ItPmdyX21lbVsxXSA9IE5VTEw7CisgIHJldHVybiBncjsKK30KKworCitwYXNzd2QqIGdldHB3dWlkKHVpZF90IHVpZCkgeyAvLyBOT0xJTlQ6IGltcGxlbWVudGluZyBiYWQgZnVuY3Rpb24uCisgIHN0dWJzX3N0YXRlX3QqIHN0YXRlID0gX19zdHVic19zdGF0ZSgpOworICBpZiAoc3RhdGUgPT0gTlVMTCkgeworICAgIHJldHVybiBOVUxMOworICB9CisKKyAgcGFzc3dkKiBwdyA9IGFuZHJvaWRfaWRfdG9fcGFzc3dkKHN0YXRlLCB1aWQpOworICBpZiAocHcgIT0gTlVMTCkgeworICAgIHJldHVybiBwdzsKKyAgfQorICByZXR1cm4gYXBwX2lkX3RvX3Bhc3N3ZCh1aWQsIHN0YXRlKTsKK30KKworcGFzc3dkKiBnZXRwd25hbShjb25zdCBjaGFyKiBsb2dpbikgeyAvLyBOT0xJTlQ6IGltcGxlbWVudGluZyBiYWQgZnVuY3Rpb24uCisgIHN0dWJzX3N0YXRlX3QqIHN0YXRlID0gX19zdHVic19zdGF0ZSgpOworICBpZiAoc3RhdGUgPT0gTlVMTCkgeworICAgIHJldHVybiBOVUxMOworICB9CisKKyAgcGFzc3dkKiBwdyA9IGFuZHJvaWRfbmFtZV90b19wYXNzd2Qoc3RhdGUsIGxvZ2luKTsKKyAgaWYgKHB3ICE9IE5VTEwpIHsKKyAgICByZXR1cm4gcHc7CisgIH0KKyAgcmV0dXJuIGFwcF9pZF90b19wYXNzd2QoYXBwX2lkX2Zyb21fbmFtZShsb2dpbiksIHN0YXRlKTsKK30KKworLy8gQWxsIHVzZXJzIGFyZSBpbiBqdXN0IG9uZSBncm91cCwgdGhlIG9uZSBwYXNzZWQgaW4uCitpbnQgZ2V0Z3JvdXBsaXN0KGNvbnN0IGNoYXIqIC8qdXNlciovLCBnaWRfdCBncm91cCwgZ2lkX3QqIGdyb3VwcywgaW50KiBuZ3JvdXBzKSB7CisgICAgaWYgKCpuZ3JvdXBzIDwgMSkgeworICAgICAgICAqbmdyb3VwcyA9IDE7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgZ3JvdXBzWzBdID0gZ3JvdXA7CisgICAgcmV0dXJuICgqbmdyb3VwcyA9IDEpOworfQorCitjaGFyKiBnZXRsb2dpbigpIHsgLy8gTk9MSU5UOiBpbXBsZW1lbnRpbmcgYmFkIGZ1bmN0aW9uLgorICBwYXNzd2QgKnB3ID0gZ2V0cHd1aWQoZ2V0dWlkKCkpOyAvLyBOT0xJTlQ6IGltcGxlbWVudGluZyBiYWQgZnVuY3Rpb24gaW4gdGVybXMgb2YgYmFkIGZ1bmN0aW9uLgorICByZXR1cm4gKHB3ICE9IE5VTEwpID8gcHctPnB3X25hbWUgOiBOVUxMOworfQorCitncm91cCogZ2V0Z3JnaWQoZ2lkX3QgZ2lkKSB7IC8vIE5PTElOVDogaW1wbGVtZW50aW5nIGJhZCBmdW5jdGlvbi4KKyAgc3R1YnNfc3RhdGVfdCogc3RhdGUgPSBfX3N0dWJzX3N0YXRlKCk7CisgIGlmIChzdGF0ZSA9PSBOVUxMKSB7CisgICAgcmV0dXJuIE5VTEw7CisgIH0KKworICBncm91cCogZ3IgPSBhbmRyb2lkX2lkX3RvX2dyb3VwKCZzdGF0ZS0+Z3JvdXBfLCBnaWQpOworICBpZiAoZ3IgIT0gTlVMTCkgeworICAgIHJldHVybiBncjsKKyAgfQorCisgIHJldHVybiBhcHBfaWRfdG9fZ3JvdXAoZ2lkLCBzdGF0ZSk7Cit9CisKK2dyb3VwKiBnZXRncm5hbShjb25zdCBjaGFyKiBuYW1lKSB7IC8vIE5PTElOVDogaW1wbGVtZW50aW5nIGJhZCBmdW5jdGlvbi4KKyAgc3R1YnNfc3RhdGVfdCogc3RhdGUgPSBfX3N0dWJzX3N0YXRlKCk7CisgIGlmIChzdGF0ZSA9PSBOVUxMKSB7CisgICAgcmV0dXJuIE5VTEw7CisgIH0KKworICBpZiAoYW5kcm9pZF9uYW1lX3RvX2dyb3VwKCZzdGF0ZS0+Z3JvdXBfLCBuYW1lKSAhPSAwKSB7CisgICAgcmV0dXJuICZzdGF0ZS0+Z3JvdXBfOworICB9CisKKyAgcmV0dXJuIGFwcF9pZF90b19ncm91cChhcHBfaWRfZnJvbV9uYW1lKG5hbWUpLCBzdGF0ZSk7Cit9CisKKy8vIFdlIGRvbid0IGhhdmUgYW4gL2V0Yy9uZXR3b3Jrcywgc28gYWxsIGlucHV0cyByZXR1cm4gTlVMTC4KK25ldGVudCogZ2V0bmV0YnluYW1lKGNvbnN0IGNoYXIqIC8qbmFtZSovKSB7CisgIHJldHVybiBOVUxMOworfQorCisvLyBXZSBkb24ndCBoYXZlIGFuIC9ldGMvbmV0d29ya3MsIHNvIGFsbCBpbnB1dHMgcmV0dXJuIE5VTEwuCituZXRlbnQqIGdldG5ldGJ5YWRkcih1aW50MzJfdCAvKm5ldCovLCBpbnQgLyp0eXBlKi8pIHsKKyAgcmV0dXJuIE5VTEw7Cit9CisKKy8vIFdlIGRvbid0IGhhdmUgYW4gL2V0Yy9wcm90b2NvbHMsIHNvIGFsbCBpbnB1dHMgcmV0dXJuIE5VTEwuCitwcm90b2VudCogZ2V0cHJvdG9ieW5hbWUoY29uc3QgY2hhciogLypuYW1lKi8pIHsKKyAgcmV0dXJuIE5VTEw7Cit9CisKKy8vIFdlIGRvbid0IGhhdmUgYW4gL2V0Yy9wcm90b2NvbHMsIHNvIGFsbCBpbnB1dHMgcmV0dXJuIE5VTEwuCitwcm90b2VudCogZ2V0cHJvdG9ieW51bWJlcihpbnQgLypwcm90byovKSB7CisgIHJldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZCB1bmltcGxlbWVudGVkX3N0dWIoY29uc3QgY2hhciogZnVuY3Rpb24pIHsKKyAgY29uc3QgY2hhciogZm10ID0gIiVzKDMpIGlzIG5vdCBpbXBsZW1lbnRlZCBvbiBBbmRyb2lkXG4iOworICBfX2xpYmNfZm9ybWF0X2xvZyhBTkRST0lEX0xPR19XQVJOLCAibGliYyIsIGZtdCwgZnVuY3Rpb24pOworICBmcHJpbnRmKHN0ZGVyciwgZm10LCBmdW5jdGlvbik7Cit9CisKKyNkZWZpbmUgVU5JTVBMRU1FTlRFRCB1bmltcGxlbWVudGVkX3N0dWIoX19QUkVUVFlfRlVOQ1RJT05fXykKKwordm9pZCBlbmRwd2VudCgpIHsKKyAgVU5JTVBMRU1FTlRFRDsKK30KKworbW50ZW50KiBnZXRtbnRlbnQoRklMRSogLypmKi8pIHsKKyAgVU5JTVBMRU1FTlRFRDsKKyAgcmV0dXJuIE5VTEw7Cit9CisKK2NoYXIqIHR0eW5hbWUoaW50IC8qZmQqLykgeyAvLyBOT0xJTlQ6IGltcGxlbWVudGluZyBiYWQgZnVuY3Rpb24uCisgIFVOSU1QTEVNRU5URUQ7CisgIHJldHVybiBOVUxMOworfQorCitpbnQgdHR5bmFtZV9yKGludCAvKmZkKi8sIGNoYXIqIC8qYnVmKi8sIHNpemVfdCAvKmJ1ZmxlbiovKSB7CisgIFVOSU1QTEVNRU5URUQ7CisgIHJldHVybiAtRVJBTkdFOworfQorCitjaGFyKiBnZXR1c2Vyc2hlbGwoKSB7CisgIFVOSU1QTEVNRU5URUQ7CisgIHJldHVybiBOVUxMOworfQorCit2b2lkIHNldHVzZXJzaGVsbCgpIHsKKyAgVU5JTVBMRU1FTlRFRDsKK30KKwordm9pZCBlbmR1c2Vyc2hlbGwoKSB7CisgIFVOSU1QTEVNRU5URUQ7Cit9CmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9zeXNjb25mLmNwcCBiL2xpYmMvYmlvbmljL3N5c2NvbmYuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5NDVmYmYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2Jpb25pYy9zeXNjb25mLmNwcApAQCAtMCwwICsxLDM0OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxiaW9uaWNfdGxzLmg+CisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxkaXJlbnQuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8bGltaXRzLmg+CisjaW5jbHVkZSA8cHRocmVhZC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+ICAvLyBGb3IgRk9QRU5fTUFYLgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN5cy9zeXNjb25mLmg+CisjaW5jbHVkZSA8dGltZS5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorCisjaW5jbHVkZSAicHJpdmF0ZS9TY29wZWRSZWFkZGlyLmgiCisKKy8qIHNlZW1zIHRvIGJlIHRoZSBkZWZhdWx0IG9uIExpbnV4LCBwZXIgdGhlIEdMaWJjIHNvdXJjZXMgYW5kIG15IG93biBkaWdnaW5nICovCisKKyNkZWZpbmUgIFNZU1RFTV9DTEtfVENLICAgICAgICAgMTAwCisjZGVmaW5lICBTWVNURU1fSU9WX01BWCAgICAgICAgIDEwMjQKKyNkZWZpbmUgIFNZU1RFTV9ERUxBWVRJTUVSX01BWCAgMjE0NzQ4MzY0NworI2RlZmluZSAgU1lTVEVNX01RX09QRU5fTUFYICAgICA4CisjZGVmaW5lICBTWVNURU1fTVFfUFJJT19NQVggICAgIDMyNzY4CisjZGVmaW5lICBTWVNURU1fU0VNX05TRU1TX01BWCAgIDI1NgorI2RlZmluZSAgU1lTVEVNX1NFTV9WQUxVRV9NQVggICAweDNmZmZmZmZmICAvKiBzZWUgYmlvbmljL3NlbWFwaG9yZS5jICovCisjZGVmaW5lICBTWVNURU1fU0lHUVVFVUVfTUFYICAgIDMyCisjZGVmaW5lICBTWVNURU1fVElNRVJfTUFYICAgICAgIDMyCisjZGVmaW5lICBTWVNURU1fTE9HSU5fTkFNRV9NQVggIDI1NgorI2RlZmluZSAgU1lTVEVNX1RUWV9OQU1FX01BWCAgICAzMgorCisvKiB0aGUgZm9sbG93aW5nIGRlcGVuZHMgb24gb3VyIGltcGxlbWVudGF0aW9uICovCisjZGVmaW5lICBTWVNURU1fQVRFWElUX01BWCAgICAgICAgICA2NTUzNiAgICAvKiBvdXIgaW1wbGVtZW50YXRpb24gaXMgdW5saW1pdGVkICovCisjZGVmaW5lICBTWVNURU1fVEhSRUFEX1RIUkVBRFNfTUFYICAyMDQ4ICAgICAvKiByZWFsbHkgdW5saW1pdGVkICovCisKKyNkZWZpbmUgIFNZU1RFTV8yX0NfQklORCAgICAgX1BPU0lYX1ZFUlNJT04gIC8qIFBvc2l4IEMgYmluZGluZyB2ZXJzaW9uICovCisjZGVmaW5lICBTWVNURU1fMl9DX1ZFUiAgICAgIF9QT1NJWDJfQ19WRVJTSU9OCisjZGVmaW5lICBTWVNURU1fMl9DX0RFViAgICAgIC0xICAgICAgIC8qIFBvc2l4IEMgZGV2ZWxvcG1lbnQgdG9vbHMgdW5zdXBwb3J0ZWQgb24gdGhlIGRldmljZSAqLworI2RlZmluZSAgU1lTVEVNXzJfRk9SVF9ERVYgICAtMSAgICAgICAvKiBGb3J0cmFuIGRldmVsb3BtZW50IHVuc3VwcG9ydGVkICovCisjZGVmaW5lICBTWVNURU1fMl9GT1JUX1JVTiAgIC0xICAgICAgIC8qIEZvcnRyYW4gcnVudGltZSB1bnN1cHBvcnRlZCAqLworI2RlZmluZSAgU1lTVEVNXzJfU1dfREVWICAgICAtMSAgICAgICAvKiBwb3NpeCBzb2Z0d2FyZSBkZXYgdXRpbGl0aWVzIHVuc3VwcG9ydGVkICovCisjZGVmaW5lICBTWVNURU1fMl9MT0NBTEVERUYgIC0xICAgICAgIC8qIGxvY2FsZWRlZigpIHVuaW1wbGVtZW50ZWQgKi8KKyNkZWZpbmUgIFNZU1RFTV8yX1VQRSAgICAgICAgLTEgICAgICAgLyogTm8gVVBFIGZvciB5b3UgISAoVXNlciBQb3J0YWJpbGl0eSBVdGlsaXRpZXMpICovCisjZGVmaW5lICBTWVNURU1fMl9WRVJTSU9OICAgIC0xICAgICAgIC8qIE5vIHBvc2l4IGNvbW1hbmQtbGluZSB0b29scyAqLworCitzdGF0aWMgYm9vbCBfX21hdGNoZXNfY3B1Tihjb25zdCBjaGFyKiBzKSB7CisgIC8vIFRoZSAlYyB0cmljayBpcyB0byBlbnN1cmUgdGhhdCB3ZSBoYXZlIHRoZSBhbmNob3JlZCBtYXRjaCAiXmNwdVswLTldKyQiLgorICB1bnNpZ25lZCBjcHU7CisgIGNoYXIgZHVtbXk7CisgIHJldHVybiAoc3NjYW5mKHMsICJjcHUldSVjIiwgJmNwdSwgJmR1bW15KSA9PSAxKTsKK30KKworc3RhdGljIGludCBfX3N5c2NvbmZfbnByb2Nlc3NvcnNfY29uZigpIHsKKyAgLy8gT24geDg2IGtlcm5lbHMgeW91IGNhbiB1c2UgL3Byb2MvY3B1aW5mbyBmb3IgdGhpcywgYnV0IG9uIEFSTSBrZXJuZWxzIG9mZmxpbmUgQ1BVcyBkaXNhcHBlYXIKKyAgLy8gZnJvbSB0aGVyZS4gVGhpcyBtZXRob2Qgd29ya3Mgb24gYm90aC4KKyAgU2NvcGVkUmVhZGRpciByZWFkZXIoIi9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1Iik7CisgIGlmIChyZWFkZXIuSXNCYWQoKSkgeworICAgIHJldHVybiAxOworICB9CisKKyAgaW50IHJlc3VsdCA9IDA7CisgIGRpcmVudCogZW50cnk7CisgIHdoaWxlICgoZW50cnkgPSByZWFkZXIuUmVhZEVudHJ5KCkpICE9IE5VTEwpIHsKKyAgICBpZiAoZW50cnktPmRfdHlwZSA9PSBEVF9ESVIgJiYgX19tYXRjaGVzX2NwdU4oZW50cnktPmRfbmFtZSkpIHsKKyAgICAgICsrcmVzdWx0OworICAgIH0KKyAgfQorICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgaW50IF9fc3lzY29uZl9ucHJvY2Vzc29yc19vbmxuKCkgeworICBGSUxFKiBmcCA9IGZvcGVuKCIvcHJvYy9zdGF0IiwgInIiKTsKKyAgaWYgKGZwID09IE5VTEwpIHsKKyAgICByZXR1cm4gMTsKKyAgfQorCisgIGludCByZXN1bHQgPSAwOworICBjaGFyIGJ1ZlsyNTZdOworICB3aGlsZSAoZmdldHMoYnVmLCBzaXplb2YoYnVmKSwgZnApICE9IE5VTEwpIHsKKyAgICAvLyBFeHRyYWN0IGp1c3QgdGhlIGZpcnN0IHdvcmQgZnJvbSB0aGUgbGluZS4KKyAgICAvLyAnY3B1MCA3OTc2NzUxIDEzNjQzODggMzExNjg0MiA0Njk3NzAzODggODYyOTQwNSAwIDQ5MDQ3IDAgMCAwJworICAgIGNoYXIqIHAgPSBzdHJjaHIoYnVmLCAnICcpOworICAgIGlmIChwICE9IE5VTEwpIHsKKyAgICAgICpwID0gMDsKKyAgICB9CisgICAgaWYgKF9fbWF0Y2hlc19jcHVOKGJ1ZikpIHsKKyAgICAgICsrcmVzdWx0OworICAgIH0KKyAgfQorICBmY2xvc2UoZnApOworICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgaW50IF9fZ2V0X21lbWluZm8oY29uc3QgY2hhciogcGF0dGVybikgeworICBGSUxFKiBmcCA9IGZvcGVuKCIvcHJvYy9tZW1pbmZvIiwgInIiKTsKKyAgaWYgKGZwID09IE5VTEwpIHsKKyAgICByZXR1cm4gLTE7CisgIH0KKworICBpbnQgcmVzdWx0ID0gLTE7CisgIGNoYXIgYnVmWzI1Nl07CisgIHdoaWxlIChmZ2V0cyhidWYsIHNpemVvZihidWYpLCBmcCkgIT0gTlVMTCkgeworICAgIGxvbmcgdG90YWw7CisgICAgaWYgKHNzY2FuZihidWYsIHBhdHRlcm4sICZ0b3RhbCkgPT0gMSkgeworICAgICAgcmVzdWx0ID0gKGludCkgKHRvdGFsIC8gKFBBR0VfU0laRS8xMDI0KSk7CisgICAgICBicmVhazsKKyAgICB9CisgIH0KKyAgZmNsb3NlKGZwKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGludCBfX3N5c2NvbmZfcGh5c19wYWdlcygpIHsKKyAgcmV0dXJuIF9fZ2V0X21lbWluZm8oIk1lbVRvdGFsOiAlbGQga0IiKTsKK30KKworc3RhdGljIGludCBfX3N5c2NvbmZfYXZwaHlzX3BhZ2VzKCkgeworICByZXR1cm4gX19nZXRfbWVtaW5mbygiTWVtRnJlZTogJWxkIGtCIik7Cit9CisKK3N0YXRpYyBpbnQgX19zeXNjb25mX21vbm90b25pY19jbG9jaygpIHsKKyAgdGltZXNwZWMgdDsKKyAgaW50IHJjID0gY2xvY2tfZ2V0cmVzKENMT0NLX01PTk9UT05JQywgJnQpOworICByZXR1cm4gKHJjID09IC0xKSA/IC0xIDogX1BPU0lYX1ZFUlNJT047Cit9CisKK2ludCBzeXNjb25mKGludCBuYW1lKSB7CisgICAgc3dpdGNoIChuYW1lKSB7CisjaWZkZWYgX1BPU0lYX0FSR19NQVgKKyAgICBjYXNlIF9TQ19BUkdfTUFYOiAgICAgICAgICAgcmV0dXJuIF9QT1NJWF9BUkdfTUFYOworI2VuZGlmCisjaWZkZWYgX1BPU0lYMl9CQ19CQVNFX01BWAorICAgIGNhc2UgX1NDX0JDX0JBU0VfTUFYOiAgICAgICByZXR1cm4gX1BPU0lYMl9CQ19CQVNFX01BWDsKKyNlbmRpZgorI2lmZGVmIF9QT1NJWDJfQkNfRElNX01BWAorICAgIGNhc2UgX1NDX0JDX0RJTV9NQVg6ICAgICAgICByZXR1cm4gX1BPU0lYMl9CQ19ESU1fTUFYOworI2VuZGlmCisjaWZkZWYgX1BPU0lYMl9CQ19TQ0FMRV9NQVgKKyAgICBjYXNlIF9TQ19CQ19TQ0FMRV9NQVg6ICAgICAgcmV0dXJuIF9QT1NJWDJfQkNfU0NBTEVfTUFYOworI2VuZGlmCisjaWZkZWYgX1BPU0lYMl9CQ19TVFJJTkdfTUFYCisgICAgY2FzZSBfU0NfQkNfU1RSSU5HX01BWDogICAgIHJldHVybiBfUE9TSVgyX0JDX1NUUklOR19NQVg7CisjZW5kaWYKKyAgICBjYXNlIF9TQ19DSElMRF9NQVg6ICAgICAgICAgcmV0dXJuIENISUxEX01BWDsKKyAgICBjYXNlIF9TQ19DTEtfVENLOiAgICAgICAgICAgcmV0dXJuIFNZU1RFTV9DTEtfVENLOworI2lmZGVmIF9QT1NJWDJfQ09MTF9XRUlHSFRTX01BU0sKKyAgICBjYXNlIF9TQ19DT0xMX1dFSUdIVFNfTUFYOiAgcmV0dXJuIF9QT1NJWDJfQ09MTF9XRUlHSFRTX01BU0s7CisjZW5kaWYKKyNpZmRlZiBfUE9TSVgyX0VYUFJfTkVTVF9NQVgKKyAgICBjYXNlIF9TQ19FWFBSX05FU1RfTUFYOiAgICByZXR1cm4gX1BPU0lYMl9FWFBSX05FU1RfTUFYOworI2VuZGlmCisjaWZkZWYgX1BPU0lYMl9MSU5FX01BWAorICAgIGNhc2UgX1NDX0xJTkVfTUFYOiAgICAgICAgICByZXR1cm4gX1BPU0lYMl9MSU5FX01BWDsKKyNlbmRpZgorICAgIGNhc2UgX1NDX05HUk9VUFNfTUFYOiAgICAgICByZXR1cm4gTkdST1VQU19NQVg7CisgICAgY2FzZSBfU0NfT1BFTl9NQVg6ICAgICAgICAgIHJldHVybiBPUEVOX01BWDsKKyAgICAvL2Nhc2UgX1NDX1BBU1NfTUFYOiAgICAgICAgICByZXR1cm4gUEFTU19NQVg7CisgICAgY2FzZSBfU0NfMl9DX0JJTkQ6ICAgICAgICAgIHJldHVybiBTWVNURU1fMl9DX0JJTkQ7CisgICAgY2FzZSBfU0NfMl9DX0RFVjogICAgICAgICAgIHJldHVybiBTWVNURU1fMl9DX0RFVjsKKyAgICBjYXNlIF9TQ18yX0NfVkVSU0lPTjogICAgICAgcmV0dXJuIFNZU1RFTV8yX0NfVkVSOworICAgIC8vY2FzZSBfU0NfMl9DSEFSX1RFUk06ICAgICAgICAgcmV0dXJuIDsKKyAgICBjYXNlIF9TQ18yX0ZPUlRfREVWOiAgICAgICAgcmV0dXJuIFNZU1RFTV8yX0ZPUlRfREVWOworICAgIGNhc2UgX1NDXzJfRk9SVF9SVU46ICAgICAgICByZXR1cm4gU1lTVEVNXzJfRk9SVF9SVU47CisgICAgY2FzZSBfU0NfMl9MT0NBTEVERUY6ICAgICAgIHJldHVybiBTWVNURU1fMl9MT0NBTEVERUY7CisgICAgY2FzZSBfU0NfMl9TV19ERVY6ICAgICAgICAgIHJldHVybiBTWVNURU1fMl9TV19ERVY7CisgICAgY2FzZSBfU0NfMl9VUEU6ICAgICAgICAgICAgIHJldHVybiBTWVNURU1fMl9VUEU7CisgICAgY2FzZSBfU0NfMl9WRVJTSU9OOiAgICAgICAgIHJldHVybiBTWVNURU1fMl9WRVJTSU9OOworI2lmZGVmIF9QT1NJWF9KT0JfQ09OVFJPTAorICAgIGNhc2UgX1NDX0pPQl9DT05UUk9MOiAgICAgICByZXR1cm4gX1BPU0lYX0pPQl9DT05UUk9MOworI2VuZGlmCisjaWZkZWYgX1BPU0lYX1NBVkVEX0lEUworICAgIGNhc2UgX1NDX1NBVkVEX0lEUzogICAgICAgICByZXR1cm4gX1BPU0lYX1NBVkVEX0lEUzsKKyNlbmRpZgorI2lmZGVmIF9QT1NJWF9WRVJTSU9OCisgICAgY2FzZSBfU0NfVkVSU0lPTjogICAgICAgICAgIHJldHVybiBfUE9TSVhfVkVSU0lPTjsKKyNlbmRpZgorICAgIC8vY2FzZSBfU0NfUkVfRFVQXzxBWDogICAgICAgIHJldHVybiA7CisgICAgY2FzZSBfU0NfU1RSRUFNX01BWDogICAgICAgIHJldHVybiBGT1BFTl9NQVg7CisgICAgLy9jYXNlIF9TQ19UWk5BTUVfTUFYOiAgICAgICAgcmV0dXJuIDsKKyNpZiBfWE9QRU5fQ1JZUFQKKyAgICBjYXNlIF9TQ19YT1BFTl9DUllQVDogICAgICAgcmV0dXJuIF9YT1BFTl9DUllQVDsKKyNlbmRpZgorI2lmZGVmIF9YT1BFTl9FTkhfSTE4TgorICAgIGNhc2UgX1NDX1hPUEVOX0VOSF9JMThOOiAgICByZXR1cm4gX1hPUEVOX0VOSF9JMThOOworI2VuZGlmCisjaWZkZWYgX1hPUEVOX1NITQorICAgIGNhc2UgX1NDX1hPUEVOX1NITTogICAgICAgICByZXR1cm4gX1hPUEVOX1NITTsKKyNlbmRpZgorI2lmZGVmIF9YT1BFTl9WRVJTSU9OCisgICAgY2FzZSBfU0NfWE9QRU5fVkVSU0lPTjogICAgIHJldHVybiBfWE9QRU5fVkVSU0lPTjsKKyNlbmRpZgorI2lmZGVmIF9YT1BFTl9YQ1VfVkVSU0lPTgorICAgIGNhc2UgX1NDX1hPUEVOX1hDVV9WRVJTSU9OOiByZXR1cm4gX1hPUEVOX1hDVV9WRVJTSU9OOworI2VuZGlmCisjaWZkZWYgX1hPUEVOX1JFQUxUSU1FCisgICAgY2FzZSBfU0NfWE9QRU5fUkVBTFRJTUU6ICAgIHJldHVybiBfWE9QRU5fUkVBTFRJTUU7CisjZW5kaWYKKyNpZmRlZiBfWE9QRU5fUkVBTFRJTUVfVEhSRUFEUworICAgIGNhc2UgX1NDX1hPUEVOX1JFQUxUSU1FX1RIUkVBRFM6IHJldHVybiBfWE9QRU5fUkVBTFRJTUVfVEhSRUFEUzsKKyNlbmRpZgorI2lmZGVmIF9YT1BFTl9MRUdBQ1kKKyAgICBjYXNlIF9TQ19YT1BFTl9MRUdBQ1k6ICAgICAgcmV0dXJuIF9YT1BFTl9MRUdBQ1k7CisjZW5kaWYKKyAgICBjYXNlIF9TQ19BVEVYSVRfTUFYOiAgICAgICAgcmV0dXJuIFNZU1RFTV9BVEVYSVRfTUFYOworICAgIGNhc2UgX1NDX0lPVl9NQVg6ICAgICAgICAgICByZXR1cm4gU1lTVEVNX0lPVl9NQVg7CisgICAgY2FzZSBfU0NfUEFHRVNJWkU6ICAgICAgICAgIHJldHVybiBQQUdFX1NJWkU7CisgICAgY2FzZSBfU0NfUEFHRV9TSVpFOiAgICAgICAgIHJldHVybiBQQUdFX1NJWkU7CisjaWZkZWYgX1hPUEVOX1VOSVgKKyAgICBjYXNlIF9TQ19YT1BFTl9VTklYOiAgICAgICAgcmV0dXJuIF9YT1BFTl9VTklYOworI2VuZGlmCisKKyAgICAvLyBYWFg6IFRPRE86IFhCUzUgbm9uc2Vuc2UKKworI2lmZGVmIEFJT19MSVNUSU9fTUFYCisgICAgY2FzZSBfU0NfQUlPX0xJU1RJT19NQVg6ICAgICAgIHJldHVybiBBSU9fTElTVElPX01BWDsKKyNlbmRpZgorI2lmZGVmIEFJT19NQVgKKyAgICBjYXNlIF9TQ19BSU9fTUFYOiAgICAgICAgICAgICAgcmV0dXJuIEFJT19NQVg7CisjZW5kaWYKKyNpZmRlZiBBSU9fUFJJT19ERUxUQV9NQVgKKyAgICBjYXNlIF9TQ19BSU9fUFJJT19ERUxUQV9NQVg6ICAgcmV0dXJuIEFJT19QUklPX0RFTFRBX01BWDsKKyNlbmRpZgorICAgIGNhc2UgX1NDX0RFTEFZVElNRVJfTUFYOiAgICByZXR1cm4gU1lTVEVNX0RFTEFZVElNRVJfTUFYOworICAgIGNhc2UgX1NDX01RX09QRU5fTUFYOiAgICAgICByZXR1cm4gU1lTVEVNX01RX09QRU5fTUFYOworICAgIGNhc2UgX1NDX01RX1BSSU9fTUFYOiAgICAgICByZXR1cm4gU1lTVEVNX01RX1BSSU9fTUFYOworICAgIGNhc2UgX1NDX1JUU0lHX01BWDogICAgICAgICByZXR1cm4gUlRTSUdfTUFYOworICAgIGNhc2UgX1NDX1NFTV9OU0VNU19NQVg6ICAgICByZXR1cm4gU1lTVEVNX1NFTV9OU0VNU19NQVg7CisgICAgY2FzZSBfU0NfU0VNX1ZBTFVFX01BWDogICAgIHJldHVybiBTWVNURU1fU0VNX1ZBTFVFX01BWDsKKyAgICBjYXNlIF9TQ19TSUdRVUVVRV9NQVg6ICAgICAgcmV0dXJuIFNZU1RFTV9TSUdRVUVVRV9NQVg7CisgICAgY2FzZSBfU0NfVElNRVJfTUFYOiAgICAgICAgIHJldHVybiBTWVNURU1fVElNRVJfTUFYOworI2lmZGVmIF9QT1NJWF9BU1lOQ0hST05PVVNfSU8KKyAgICBjYXNlIF9TQ19BU1lOQ0hST05PVVNfSU86ICAgcmV0dXJuIF9QT1NJWF9BU1lOQ0hST05PVVNfSU87CisjZW5kaWYKKyNpZmRlZiBfUE9TSVhfRlNZTkMKKyAgICBjYXNlIF9TQ19GU1lOQzogICAgICAgICAgICAgcmV0dXJuIF9QT1NJWF9GU1lOQzsKKyNlbmRpZgorI2lmZGVmIF9QT1NJWF9NQVBQRURfRklMRVMKKyAgICBjYXNlIF9TQ19NQVBQRURfRklMRVM6ICAgICAgcmV0dXJuIF9QT1NJWF9NQVBQRURfRklMRVM7CisjZW5kaWYKKyNpZmRlZiBfUE9TSVhfTUVNTE9DSworICAgIGNhc2UgX1NDX01FTUxPQ0s6ICAgICAgICAgICByZXR1cm4gX1BPU0lYX01FTUxPQ0s7CisjZW5kaWYKKyNpZmRlZiBfUE9TSVhfTUVNTE9DS19SQU5HRQorICAgIGNhc2UgX1NDX01FTUxPQ0tfUkFOR0U6ICAgICByZXR1cm4gX1BPU0lYX01FTUxPQ0tfUkFOR0UKKyNlbmRpZgorI2lmZGVmIF9QT1NJWF9NRU1PUllfUFJPVEVDVElPTgorICAgIGNhc2UgX1NDX01FTU9SWV9QUk9URUNUSU9OOiByZXR1cm4gX1BPU0lYX01FTU9SWV9QUk9URUNUSU9OOworI2VuZGlmCisjaWZkZWYgX1BPU0lYX01FU1NBR0VfUEFTU0lORworICAgIGNhc2UgX1NDX01FU1NBR0VfUEFTU0lORzogICByZXR1cm4gX1BPU0lYX01FU1NBR0VfUEFTU0lORzsKKyNlbmRpZgorI2lmZGVmIF9QT1NJWF9QUklPUklUSVpFRF9JTworICAgIGNhc2UgX1NDX1BSSU9SSVRJWkVEX0lPOiAgICByZXR1cm4gX1BPU0lYX1BSSU9SSVRJWkVEX0lPOworI2VuZGlmCisjaWZkZWYgX1BPU0lYX1BSSU9SSVRZX1NDSEVEVUxJTkcKKyAgICBjYXNlIF9TQ19QUklPUklUWV9TQ0hFRFVMSU5HOiAgcmV0dXJuIF9QT1NJWF9QUklPUklUWV9TQ0hFRFVMSU5HOworI2VuZGlmCisjaWZkZWYgX1BPU0lYX1JFQUxUSU1FX1NJR05BTFMKKyAgICBjYXNlIF9TQ19SRUFMVElNRV9TSUdOQUxTOiAgcmV0dXJuIF9QT1NJWF9SRUFMVElNRV9TSUdOQUxTOworI2VuZGlmCisjaWZkZWYgX1BPU0lYX1NFTUFQSE9SRVMKKyAgICBjYXNlIF9TQ19TRU1BUEhPUkVTOiAgICAgICAgcmV0dXJuIF9QT1NJWF9TRU1BUEhPUkVTOworI2VuZGlmCisjaWZkZWYgX1BPU0lYX1NIQVJFRF9NRU1PUllfT0JKRUNUUworICAgIGNhc2UgX1NDX1NIQVJFRF9NRU1PUllfT0JKRUNUUzogIHJldHVybiBfUE9TSVhfU0hBUkVEX01FTU9SWV9PQkpFQ1RTOworI2VuZGlmCisjaWZkZWYgX1BPU0lYX1NZTkNIUk9OSVpFRF9JTworICAgIGNhc2UgX1NDX1NZTkNIUk9OSVpFRF9JTzogICByZXR1cm4gX1BPU0lYX1NZTkNIUk9OSVpFRF9JTzsKKyNlbmRpZgorI2lmZGVmIF9QT1NJWF9USU1FUlMKKyAgICBjYXNlIF9TQ19USU1FUlM6ICAgICAgICAgICAgcmV0dXJuIF9QT1NJWF9USU1FUlM7CisjZW5kaWYKKworICAgIGNhc2UgX1NDX0dFVEdSX1JfU0laRV9NQVg6IHJldHVybiAxMDI0OworICAgIGNhc2UgX1NDX0dFVFBXX1JfU0laRV9NQVg6IHJldHVybiAxMDI0OworCisgICAgY2FzZSBfU0NfTE9HSU5fTkFNRV9NQVg6ICAgIHJldHVybiBTWVNURU1fTE9HSU5fTkFNRV9NQVg7CisKKyAgICBjYXNlIF9TQ19USFJFQURfREVTVFJVQ1RPUl9JVEVSQVRJT05TOgorICAgICAgcmV0dXJuIF9QT1NJWF9USFJFQURfREVTVFJVQ1RPUl9JVEVSQVRJT05TOworCisgICAgY2FzZSBfU0NfVEhSRUFEX0tFWVNfTUFYOgorICAgICAgcmV0dXJuIChCSU9OSUNfVExTX1NMT1RTIC0gVExTX1NMT1RfRklSU1RfVVNFUl9TTE9UIC0gR0xPQkFMX0lOSVRfVEhSRUFEX0xPQ0FMX0JVRkZFUl9DT1VOVCk7CisKKyAgICBjYXNlIF9TQ19USFJFQURfU1RBQ0tfTUlOOiAgICByZXR1cm4gUFRIUkVBRF9TVEFDS19NSU47CisgICAgY2FzZSBfU0NfVEhSRUFEX1RIUkVBRFNfTUFYOiAgcmV0dXJuIFNZU1RFTV9USFJFQURfVEhSRUFEU19NQVg7CisgICAgY2FzZSBfU0NfVFRZX05BTUVfTUFYOiAgICAgICAgcmV0dXJuIFNZU1RFTV9UVFlfTkFNRV9NQVg7CisjaWZkZWYgX1BPU0lYX1RIUkVBRFMKKyAgICBjYXNlIF9TQ19USFJFQURTOiAgICAgICAgICAgICByZXR1cm4gX1BPU0lYX1RIUkVBRFM7CisjZW5kaWYKKyNpZmRlZiBfUE9TSVhfVEhSRUFEX0FUVFJfU1RBQ0tBRERSCisgICAgY2FzZSBfU0NfVEhSRUFEX0FUVFJfU1RBQ0tBRERSOiAgIHJldHVybiBfUE9TSVhfVEhSRUFEX0FUVFJfU1RBQ0tBRERSOworI2VuZGlmCisjaWZkZWYgX1BPU0lYX1RIUkVBRF9BVFRSX1NUQUNLU0laRQorICAgIGNhc2UgX1NDX1RIUkVBRF9BVFRSX1NUQUNLU0laRTogICByZXR1cm4gX1BPU0lYX1RIUkVBRF9BVFRSX1NUQUNLU0laRTsKKyNlbmRpZgorI2lmZGVmIF9QT1NJWF9USFJFQURfUFJJT1JJVFlfU0NIRURVTElORworICAgIGNhc2UgX1NDX1RIUkVBRF9QUklPUklUWV9TQ0hFRFVMSU5HOiAgcmV0dXJuIF9QT1NJWF9USFJFQURfUFJJT1JJVFlfU0NIRURVTElORzsKKyNlbmRpZgorI2lmZGVmIF9QT1NJWF9USFJFQURfUFJJT19JTkhFUklUCisgICAgY2FzZSBfU0NfVEhSRUFEX1BSSU9fSU5IRVJJVDogICAgICAgICByZXR1cm4gX1BPU0lYX1RIUkVBRF9QUklPX0lOSEVSSVQ7CisjZW5kaWYKKyNpZmRlZiBfUE9TSVhfVEhSRUFEX1BSSU9fUFJPVEVDVAorICAgIGNhc2UgX1NDX1RIUkVBRF9QUklPX1BST1RFQ1Q6IHJldHVybiBfUE9TSVhfVEhSRUFEX1BSSU9fUFJPVEVDVDsKKyNlbmRpZgorI2lmZGVmIF9QT1NJWF9USFJFQURfU0FGRV9GVU5DVElPTlMKKyAgICBjYXNlIF9TQ19USFJFQURfU0FGRV9GVU5DVElPTlM6ICByZXR1cm4gX1BPU0lYX1RIUkVBRF9TQUZFX0ZVTkNUSU9OUworI2VuZGlmCisKKyAgICBjYXNlIF9TQ19NT05PVE9OSUNfQ0xPQ0s6ICAgcmV0dXJuIF9fc3lzY29uZl9tb25vdG9uaWNfY2xvY2soKTsKKyAgICBjYXNlIF9TQ19OUFJPQ0VTU09SU19DT05GOiAgcmV0dXJuIF9fc3lzY29uZl9ucHJvY2Vzc29yc19jb25mKCk7CisgICAgY2FzZSBfU0NfTlBST0NFU1NPUlNfT05MTjogIHJldHVybiBfX3N5c2NvbmZfbnByb2Nlc3NvcnNfb25sbigpOworICAgIGNhc2UgX1NDX1BIWVNfUEFHRVM6ICAgICAgICByZXR1cm4gX19zeXNjb25mX3BoeXNfcGFnZXMoKTsKKyAgICBjYXNlIF9TQ19BVlBIWVNfUEFHRVM6ICAgICAgcmV0dXJuIF9fc3lzY29uZl9hdnBoeXNfcGFnZXMoKTsKKworICAgIGRlZmF1bHQ6CisgICAgICAgLyogUG9zaXggc2F5cyBFSU5WQUwgaXMgdGhlIG9ubHkgZXJyb3IgdGhhdCBzaGFsbCBiZSByZXR1cm5lZCwKKyAgICAgICAgKiBidXQgR0xpYmMgdXNlcyBFTk9TWVMgKi8KKyAgICAgICAgZXJybm8gPSBFTk9TWVM7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9zeXN0ZW1fcHJvcGVydGllcy5jIGIvbGliYy9iaW9uaWMvc3lzdGVtX3Byb3BlcnRpZXMuYwppbmRleCAwZjRlNzBjLi40YzJlNWEyIDEwMDY0NAotLS0gYS9saWJjL2Jpb25pYy9zeXN0ZW1fcHJvcGVydGllcy5jCisrKyBiL2xpYmMvYmlvbmljL3N5c3RlbV9wcm9wZXJ0aWVzLmMKQEAgLTI2LDE3ICsyNiwyMiBAQAogICogU1VDSCBEQU1BR0UuCiAgKi8KICNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2luY2x1ZGUgPHVuaXN0ZC5oPgogI2luY2x1ZGUgPHN0ZGRlZi5oPgogI2luY2x1ZGUgPGVycm5vLmg+CiAjaW5jbHVkZSA8cG9sbC5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8c3RkYm9vbC5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgogCiAjaW5jbHVkZSA8c3lzL21tYW4uaD4KIAogI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KICNpbmNsdWRlIDxzeXMvdW4uaD4KICNpbmNsdWRlIDxzeXMvc2VsZWN0Lmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KICNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CiAjaW5jbHVkZSA8dW5pc3RkLmg+CkBAIC00NSw4NiArNTAsNDAyIEBACiAjaW5jbHVkZSA8c3lzL19zeXN0ZW1fcHJvcGVydGllcy5oPgogCiAjaW5jbHVkZSA8c3lzL2F0b21pY3MuaD4KKyNpbmNsdWRlIDxiaW9uaWNfYXRvbWljX2lubGluZS5oPgorCisjZGVmaW5lIEFMSUdOKHgsIGEpICgoKHgpICsgKGEgLSAxKSkgJiB+KGEgLSAxKSkKKworc3RydWN0IHByb3BfYXJlYSB7CisgICAgdW5zaWduZWQgYnl0ZXNfdXNlZDsKKyAgICB1bnNpZ25lZCB2b2xhdGlsZSBzZXJpYWw7CisgICAgdW5zaWduZWQgbWFnaWM7CisgICAgdW5zaWduZWQgdmVyc2lvbjsKKyAgICB1bnNpZ25lZCByZXNlcnZlZFsyOF07CisgICAgY2hhciBkYXRhWzBdOworfTsKKwordHlwZWRlZiBzdHJ1Y3QgcHJvcF9hcmVhIHByb3BfYXJlYTsKKworc3RydWN0IHByb3BfaW5mbyB7CisgICAgdW5zaWduZWQgdm9sYXRpbGUgc2VyaWFsOworICAgIGNoYXIgdmFsdWVbUFJPUF9WQUxVRV9NQVhdOworICAgIGNoYXIgbmFtZVswXTsKK307CisKK3R5cGVkZWYgc3RydWN0IHByb3BfaW5mbyBwcm9wX2luZm87CisKKy8qCisgKiBQcm9wZXJ0aWVzIGFyZSBzdG9yZWQgaW4gYSBoeWJyaWQgdHJpZS9iaW5hcnkgdHJlZSBzdHJ1Y3R1cmUuCisgKiBFYWNoIHByb3BlcnR5J3MgbmFtZSBpcyBkZWxpbWl0ZWQgYXQgJy4nIGNoYXJhY3RlcnMsIGFuZCB0aGUgdG9rZW5zIGFyZSBwdXQKKyAqIGludG8gYSB0cmllIHN0cnVjdHVyZS4gIFNpYmxpbmdzIGF0IGVhY2ggbGV2ZWwgb2YgdGhlIHRyaWUgYXJlIHN0b3JlZCBpbiBhCisgKiBiaW5hcnkgdHJlZS4gIEZvciBpbnN0YW5jZSwgInJvLnNlY3VyZSI9IjEiIGNvdWxkIGJlIHN0b3JlZCBhcyBmb2xsb3dzOgorICoKKyAqICstLS0tLSsgICBjaGlsZHJlbiAgICArLS0tLSsgICBjaGlsZHJlbiAgICArLS0tLS0tLS0rCisgKiB8ICAgICB8LS0tLS0tLS0tLS0tLS0+fCBybyB8LS0tLS0tLS0tLS0tLS0+fCBzZWN1cmUgfAorICogKy0tLS0tKyAgICAgICAgICAgICAgICstLS0tKyAgICAgICAgICAgICAgICstLS0tLS0tLSsKKyAqICAgICAgICAgICAgICAgICAgICAgICAvICAgIFwgICAgICAgICAgICAgICAgLyAgIHwKKyAqICAgICAgICAgICAgICAgICBsZWZ0IC8gICAgICBcIHJpZ2h0ICAgbGVmdCAvICAgIHwgIHByb3AgICArPT09PT09PT09PT0rCisgKiAgICAgICAgICAgICAgICAgICAgIHYgICAgICAgIHYgICAgICAgICAgICB2ICAgICArLS0tLS0tLS0+fCByby5zZWN1cmUgfAorICogICAgICAgICAgICAgICAgICArLS0tLS0rICAgKy0tLS0tKyAgICAgKy0tLS0tKyAgICAgICAgICAgICstLS0tLS0tLS0tLSsKKyAqICAgICAgICAgICAgICAgICAgfCBuZXQgfCAgIHwgc3lzIHwgICAgIHwgY29tIHwgICAgICAgICAgICB8ICAgICAxICAgICB8CisgKiAgICAgICAgICAgICAgICAgICstLS0tLSsgICArLS0tLS0rICAgICArLS0tLS0rICAgICAgICAgICAgKz09PT09PT09PT09KworICovCisKK3R5cGVkZWYgdm9sYXRpbGUgdWludDMyX3QgcHJvcF9vZmZfdDsKK3N0cnVjdCBwcm9wX2J0IHsKKyAgICB1aW50OF90IG5hbWVsZW47CisgICAgdWludDhfdCByZXNlcnZlZFszXTsKKworICAgIHByb3Bfb2ZmX3QgcHJvcDsKKworICAgIHByb3Bfb2ZmX3QgbGVmdDsKKyAgICBwcm9wX29mZl90IHJpZ2h0OworCisgICAgcHJvcF9vZmZfdCBjaGlsZHJlbjsKKworICAgIGNoYXIgbmFtZVswXTsKK307CisKK3R5cGVkZWYgc3RydWN0IHByb3BfYnQgcHJvcF9idDsKIAogc3RhdGljIGNvbnN0IGNoYXIgcHJvcGVydHlfc2VydmljZV9zb2NrZXRbXSA9ICIvZGV2L3NvY2tldC8iIFBST1BfU0VSVklDRV9OQU1FOworc3RhdGljIGNoYXIgcHJvcGVydHlfZmlsZW5hbWVbUEFUSF9NQVhdID0gUFJPUF9GSUxFTkFNRTsKK3N0YXRpYyBib29sIGNvbXBhdF9tb2RlID0gZmFsc2U7CiAKLXN0YXRpYyB1bnNpZ25lZCBkdW1teV9wcm9wcyA9IDA7Citwcm9wX2FyZWEgKl9fc3lzdGVtX3Byb3BlcnR5X2FyZWFfXyA9IE5VTEw7CiAKLXByb3BfYXJlYSAqX19zeXN0ZW1fcHJvcGVydHlfYXJlYV9fID0gKHZvaWQqKSAmZHVtbXlfcHJvcHM7CitzaXplX3QgcGFfZGF0YV9zaXplOworc2l6ZV90IHBhX3NpemU7CiAKLWludCBfX3N5c3RlbV9wcm9wZXJ0aWVzX2luaXQodm9pZCkKK3N0YXRpYyBpbnQgZ2V0X2ZkX2Zyb21fZW52KHZvaWQpCit7CisgICAgY2hhciAqZW52ID0gZ2V0ZW52KCJBTkRST0lEX1BST1BFUlRZX1dPUktTUEFDRSIpOworCisgICAgaWYgKCFlbnYpIHsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIHJldHVybiBhdG9pKGVudik7Cit9CisKK3N0YXRpYyBpbnQgbWFwX3Byb3BfYXJlYV9ydygpCiB7CiAgICAgcHJvcF9hcmVhICpwYTsKLSAgICBpbnQgcywgZmQ7Ci0gICAgdW5zaWduZWQgc3o7Ci0gICAgY2hhciAqZW52OworICAgIGludCBmZDsKKyAgICBpbnQgcmV0OwogCi0gICAgaWYoX19zeXN0ZW1fcHJvcGVydHlfYXJlYV9fICE9ICgodm9pZCopICZkdW1teV9wcm9wcykpIHsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgZW52ID0gZ2V0ZW52KCJBTkRST0lEX1BST1BFUlRZX1dPUktTUEFDRSIpOwotICAgIGlmICghZW52KSB7Ci0gICAgICAgIHJldHVybiAtMTsKLSAgICB9Ci0gICAgZmQgPSBhdG9pKGVudik7Ci0gICAgZW52ID0gc3RyY2hyKGVudiwgJywnKTsKLSAgICBpZiAoIWVudikgewotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotICAgIHN6ID0gYXRvaShlbnYgKyAxKTsKLSAgICAKLSAgICBwYSA9IG1tYXAoMCwgc3osIFBST1RfUkVBRCwgTUFQX1NIQVJFRCwgZmQsIDApOwotICAgIAotICAgIGlmKHBhID09IE1BUF9GQUlMRUQpIHsKKyAgICAvKiBkZXYgaXMgYSB0bXBmcyB0aGF0IHdlIGNhbiB1c2UgdG8gY2FydmUgYSBzaGFyZWQgd29ya3NwYWNlCisgICAgICogb3V0IG9mLCBzbyBsZXQncyBkbyB0aGF0Li4uCisgICAgICovCisgICAgZmQgPSBvcGVuKHByb3BlcnR5X2ZpbGVuYW1lLCBPX1JEV1IgfCBPX0NSRUFUIHwgT19OT0ZPTExPVyB8IE9fQ0xPRVhFQyB8CisgICAgICAgICAgICBPX0VYQ0wsIDA0NDQpOworICAgIGlmIChmZCA8IDApIHsKKyAgICAgICAgaWYgKGVycm5vID09IEVBQ0NFUykgeworICAgICAgICAgICAgLyogZm9yIGNvbnNpc3RlbmN5IHdpdGggdGhlIGNhc2Ugd2hlcmUgdGhlIHByb2Nlc3MgaGFzIGFscmVhZHkKKyAgICAgICAgICAgICAqIG1hcHBlZCB0aGUgcGFnZSBpbiBhbmQgc2VnZmF1bHRzIHdoZW4gdHJ5aW5nIHRvIHdyaXRlIHRvIGl0CisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIGFib3J0KCk7CisgICAgICAgIH0KICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KIAotICAgIGlmKChwYS0+bWFnaWMgIT0gUFJPUF9BUkVBX01BR0lDKSB8fCAocGEtPnZlcnNpb24gIT0gUFJPUF9BUkVBX1ZFUlNJT04pKSB7Ci0gICAgICAgIG11bm1hcChwYSwgc3opOwotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQorICAgIHJldCA9IGZjbnRsKGZkLCBGX1NFVEZELCBGRF9DTE9FWEVDKTsKKyAgICBpZiAocmV0IDwgMCkKKyAgICAgICAgZ290byBvdXQ7CiAKKyAgICBpZiAoZnRydW5jYXRlKGZkLCBQQV9TSVpFKSA8IDApCisgICAgICAgIGdvdG8gb3V0OworCisgICAgcGFfc2l6ZSA9IFBBX1NJWkU7CisgICAgcGFfZGF0YV9zaXplID0gcGFfc2l6ZSAtIHNpemVvZihwcm9wX2FyZWEpOworICAgIGNvbXBhdF9tb2RlID0gZmFsc2U7CisKKyAgICBwYSA9IG1tYXAoTlVMTCwgcGFfc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwgTUFQX1NIQVJFRCwgZmQsIDApOworICAgIGlmKHBhID09IE1BUF9GQUlMRUQpCisgICAgICAgIGdvdG8gb3V0OworCisgICAgbWVtc2V0KHBhLCAwLCBwYV9zaXplKTsKKyAgICBwYS0+bWFnaWMgPSBQUk9QX0FSRUFfTUFHSUM7CisgICAgcGEtPnZlcnNpb24gPSBQUk9QX0FSRUFfVkVSU0lPTjsKKyAgICAvKiByZXNlcnZlIHJvb3Qgbm9kZSAqLworICAgIHBhLT5ieXRlc191c2VkID0gc2l6ZW9mKHByb3BfYnQpOworCisgICAgLyogcGx1ZyBpbnRvIHRoZSBsaWIgcHJvcGVydHkgc2VydmljZXMgKi8KICAgICBfX3N5c3RlbV9wcm9wZXJ0eV9hcmVhX18gPSBwYTsKKworICAgIGNsb3NlKGZkKTsKKyAgICByZXR1cm4gMDsKKworb3V0OgorICAgIGNsb3NlKGZkKTsKKyAgICByZXR1cm4gLTE7Cit9CisKK2ludCBfX3N5c3RlbV9wcm9wZXJ0eV9zZXRfZmlsZW5hbWUoY29uc3QgY2hhciAqZmlsZW5hbWUpCit7CisgICAgc2l6ZV90IGxlbiA9IHN0cmxlbihmaWxlbmFtZSk7CisgICAgaWYgKGxlbiA+PSBzaXplb2YocHJvcGVydHlfZmlsZW5hbWUpKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICBzdHJjcHkocHJvcGVydHlfZmlsZW5hbWUsIGZpbGVuYW1lKTsKICAgICByZXR1cm4gMDsKIH0KIAotY29uc3QgcHJvcF9pbmZvICpfX3N5c3RlbV9wcm9wZXJ0eV9maW5kX250aCh1bnNpZ25lZCBuKQoraW50IF9fc3lzdGVtX3Byb3BlcnR5X2FyZWFfaW5pdCgpCit7CisgICAgcmV0dXJuIG1hcF9wcm9wX2FyZWFfcncoKTsKK30KKworc3RhdGljIGludCBtYXBfcHJvcF9hcmVhKCkKK3sKKyAgICBib29sIGZyb21GaWxlID0gdHJ1ZTsKKyAgICBpbnQgcmVzdWx0ID0gLTE7CisgICAgaW50IGZkOworICAgIGludCByZXQ7CisKKyAgICBmZCA9IG9wZW4ocHJvcGVydHlfZmlsZW5hbWUsIE9fUkRPTkxZIHwgT19OT0ZPTExPVyB8IE9fQ0xPRVhFQyk7CisgICAgaWYgKGZkID49IDApIHsKKyAgICAgICAgLyogRm9yIG9sZCBrZXJuZWxzIHRoYXQgZG9uJ3Qgc3VwcG9ydCBPX0NMT0VYRUMgKi8KKyAgICAgICAgcmV0ID0gZmNudGwoZmQsIEZfU0VURkQsIEZEX0NMT0VYRUMpOworICAgICAgICBpZiAocmV0IDwgMCkKKyAgICAgICAgICAgIGdvdG8gY2xlYW51cDsKKyAgICB9CisKKyAgICBpZiAoKGZkIDwgMCkgJiYgKGVycm5vID09IEVOT0VOVCkpIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogRm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LCBpZiB0aGUgZmlsZSBkb2Vzbid0CisgICAgICAgICAqIGV4aXN0LCB3ZSB1c2UgdGhlIGVudmlyb25tZW50IHRvIGdldCB0aGUgZmlsZSBkZXNjcmlwdG9yLgorICAgICAgICAgKiBGb3Igc2VjdXJpdHkgcmVhc29ucywgd2Ugb25seSB1c2UgdGhpcyBiYWNrdXAgaWYgdGhlIGtlcm5lbAorICAgICAgICAgKiByZXR1cm5zIEVOT0VOVC4gV2UgZG9uJ3Qgd2FudCB0byB1c2UgdGhlIGJhY2t1cCBpZiB0aGUga2VybmVsCisgICAgICAgICAqIHJldHVybnMgb3RoZXIgZXJyb3JzIHN1Y2ggYXMgRU5PTUVNIG9yIEVORklMRSwgc2luY2UgaXQKKyAgICAgICAgICogbWlnaHQgYmUgcG9zc2libGUgZm9yIGFuIGV4dGVybmFsIHByb2dyYW0gdG8gdHJpZ2dlciB0aGlzCisgICAgICAgICAqIGNvbmRpdGlvbi4KKyAgICAgICAgICovCisgICAgICAgIGZkID0gZ2V0X2ZkX2Zyb21fZW52KCk7CisgICAgICAgIGZyb21GaWxlID0gZmFsc2U7CisgICAgfQorCisgICAgaWYgKGZkIDwgMCkgeworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgc3RydWN0IHN0YXQgZmRfc3RhdDsKKyAgICBpZiAoZnN0YXQoZmQsICZmZF9zdGF0KSA8IDApIHsKKyAgICAgICAgZ290byBjbGVhbnVwOworICAgIH0KKworICAgIGlmICgoZmRfc3RhdC5zdF91aWQgIT0gMCkKKyAgICAgICAgICAgIHx8IChmZF9zdGF0LnN0X2dpZCAhPSAwKQorICAgICAgICAgICAgfHwgKChmZF9zdGF0LnN0X21vZGUgJiAoU19JV0dSUCB8IFNfSVdPVEgpKSAhPSAwKQorICAgICAgICAgICAgfHwgKGZkX3N0YXQuc3Rfc2l6ZSA8IHNpemVvZihwcm9wX2FyZWEpKSApIHsKKyAgICAgICAgZ290byBjbGVhbnVwOworICAgIH0KKworICAgIHBhX3NpemUgPSBmZF9zdGF0LnN0X3NpemU7CisgICAgcGFfZGF0YV9zaXplID0gcGFfc2l6ZSAtIHNpemVvZihwcm9wX2FyZWEpOworICAgIHByb3BfYXJlYSAqcGEgPSBtbWFwKE5VTEwsIHBhX3NpemUsIFBST1RfUkVBRCwgTUFQX1NIQVJFRCwgZmQsIDApOworCisgICAgaWYgKHBhID09IE1BUF9GQUlMRUQpIHsKKyAgICAgICAgZ290byBjbGVhbnVwOworICAgIH0KKworICAgIGlmKChwYS0+bWFnaWMgIT0gUFJPUF9BUkVBX01BR0lDKSB8fCAocGEtPnZlcnNpb24gIT0gUFJPUF9BUkVBX1ZFUlNJT04gJiYKKyAgICAgICAgICAgICAgICBwYS0+dmVyc2lvbiAhPSBQUk9QX0FSRUFfVkVSU0lPTl9DT01QQVQpKSB7CisgICAgICAgIG11bm1hcChwYSwgcGFfc2l6ZSk7CisgICAgICAgIGdvdG8gY2xlYW51cDsKKyAgICB9CisKKyAgICBpZiAocGEtPnZlcnNpb24gPT0gUFJPUF9BUkVBX1ZFUlNJT05fQ09NUEFUKSB7CisgICAgICAgIGNvbXBhdF9tb2RlID0gdHJ1ZTsKKyAgICB9CisKKyAgICByZXN1bHQgPSAwOworCisgICAgX19zeXN0ZW1fcHJvcGVydHlfYXJlYV9fID0gcGE7CisKK2NsZWFudXA6CisgICAgaWYgKGZyb21GaWxlKSB7CisgICAgICAgIGNsb3NlKGZkKTsKKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitpbnQgX19zeXN0ZW1fcHJvcGVydGllc19pbml0KCkKK3sKKyAgICByZXR1cm4gbWFwX3Byb3BfYXJlYSgpOworfQorCitzdGF0aWMgdm9pZCAqbmV3X3Byb3Bfb2JqKHNpemVfdCBzaXplLCBwcm9wX29mZl90ICpvZmYpCiB7CiAgICAgcHJvcF9hcmVhICpwYSA9IF9fc3lzdGVtX3Byb3BlcnR5X2FyZWFfXzsKKyAgICBzaXplID0gQUxJR04oc2l6ZSwgc2l6ZW9mKHVpbnQzMl90KSk7CiAKLSAgICBpZihuID49IHBhLT5jb3VudCkgewotICAgICAgICByZXR1cm4gMDsKKyAgICBpZiAocGEtPmJ5dGVzX3VzZWQgKyBzaXplID4gcGFfZGF0YV9zaXplKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgICpvZmYgPSBwYS0+Ynl0ZXNfdXNlZDsKKyAgICBfX3N5c3RlbV9wcm9wZXJ0eV9hcmVhX18tPmJ5dGVzX3VzZWQgKz0gc2l6ZTsKKyAgICByZXR1cm4gX19zeXN0ZW1fcHJvcGVydHlfYXJlYV9fLT5kYXRhICsgKm9mZjsKK30KKworc3RhdGljIHByb3BfYnQgKm5ld19wcm9wX2J0KGNvbnN0IGNoYXIgKm5hbWUsIHVpbnQ4X3QgbmFtZWxlbiwgcHJvcF9vZmZfdCAqb2ZmKQoreworICAgIHByb3Bfb2ZmX3Qgb2ZmX3RtcDsKKyAgICBwcm9wX2J0ICpidCA9IG5ld19wcm9wX29iaihzaXplb2YocHJvcF9idCkgKyBuYW1lbGVuICsgMSwgJm9mZl90bXApOworICAgIGlmIChidCkgeworICAgICAgICBtZW1jcHkoYnQtPm5hbWUsIG5hbWUsIG5hbWVsZW4pOworICAgICAgICBidC0+bmFtZVtuYW1lbGVuXSA9ICdcMCc7CisgICAgICAgIGJ0LT5uYW1lbGVuID0gbmFtZWxlbjsKKyAgICAgICAgQU5EUk9JRF9NRU1CQVJfRlVMTCgpOworICAgICAgICAqb2ZmID0gb2ZmX3RtcDsKKyAgICB9CisKKyAgICByZXR1cm4gYnQ7Cit9CisKK3N0YXRpYyBwcm9wX2luZm8gKm5ld19wcm9wX2luZm8oY29uc3QgY2hhciAqbmFtZSwgdWludDhfdCBuYW1lbGVuLAorICAgICAgICBjb25zdCBjaGFyICp2YWx1ZSwgdWludDhfdCB2YWx1ZWxlbiwgcHJvcF9vZmZfdCAqb2ZmKQoreworICAgIHByb3Bfb2ZmX3Qgb2ZmX3RtcDsKKyAgICBwcm9wX2luZm8gKmluZm8gPSBuZXdfcHJvcF9vYmooc2l6ZW9mKHByb3BfaW5mbykgKyBuYW1lbGVuICsgMSwgJm9mZl90bXApOworICAgIGlmIChpbmZvKSB7CisgICAgICAgIG1lbWNweShpbmZvLT5uYW1lLCBuYW1lLCBuYW1lbGVuKTsKKyAgICAgICAgaW5mby0+bmFtZVtuYW1lbGVuXSA9ICdcMCc7CisgICAgICAgIGluZm8tPnNlcmlhbCA9ICh2YWx1ZWxlbiA8PCAyNCk7CisgICAgICAgIG1lbWNweShpbmZvLT52YWx1ZSwgdmFsdWUsIHZhbHVlbGVuKTsKKyAgICAgICAgaW5mby0+dmFsdWVbdmFsdWVsZW5dID0gJ1wwJzsKKyAgICAgICAgQU5EUk9JRF9NRU1CQVJfRlVMTCgpOworICAgICAgICAqb2ZmID0gb2ZmX3RtcDsKKyAgICB9CisKKyAgICByZXR1cm4gaW5mbzsKK30KKworc3RhdGljIHZvaWQgKnRvX3Byb3Bfb2JqKHByb3Bfb2ZmX3Qgb2ZmKQoreworICAgIGlmIChvZmYgPiBwYV9kYXRhX3NpemUpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgcmV0dXJuIF9fc3lzdGVtX3Byb3BlcnR5X2FyZWFfXy0+ZGF0YSArIG9mZjsKK30KKworc3RhdGljIHByb3BfYnQgKnJvb3Rfbm9kZSgpCit7CisgICAgcmV0dXJuIHRvX3Byb3Bfb2JqKDApOworfQorCitzdGF0aWMgaW50IGNtcF9wcm9wX25hbWUoY29uc3QgY2hhciAqb25lLCB1aW50OF90IG9uZV9sZW4sIGNvbnN0IGNoYXIgKnR3bywKKyAgICAgICAgdWludDhfdCB0d29fbGVuKQoreworICAgIGlmIChvbmVfbGVuIDwgdHdvX2xlbikKKyAgICAgICAgcmV0dXJuIC0xOworICAgIGVsc2UgaWYgKG9uZV9sZW4gPiB0d29fbGVuKQorICAgICAgICByZXR1cm4gMTsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiBzdHJuY21wKG9uZSwgdHdvLCBvbmVfbGVuKTsKK30KKworc3RhdGljIHByb3BfYnQgKmZpbmRfcHJvcF9idChwcm9wX2J0ICpidCwgY29uc3QgY2hhciAqbmFtZSwgdWludDhfdCBuYW1lbGVuLAorICAgICAgICBib29sIGFsbG9jX2lmX25lZWRlZCkKK3sKKyAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICBpbnQgcmV0OworICAgICAgICBpZiAoIWJ0KQorICAgICAgICAgICAgcmV0dXJuIGJ0OworICAgICAgICByZXQgPSBjbXBfcHJvcF9uYW1lKG5hbWUsIG5hbWVsZW4sIGJ0LT5uYW1lLCBidC0+bmFtZWxlbik7CisKKyAgICAgICAgaWYgKHJldCA9PSAwKSB7CisgICAgICAgICAgICByZXR1cm4gYnQ7CisgICAgICAgIH0gZWxzZSBpZiAocmV0IDwgMCkgeworICAgICAgICAgICAgaWYgKGJ0LT5sZWZ0KSB7CisgICAgICAgICAgICAgICAgYnQgPSB0b19wcm9wX29iaihidC0+bGVmdCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlmICghYWxsb2NfaWZfbmVlZGVkKQorICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworCisgICAgICAgICAgICAgICAgYnQgPSBuZXdfcHJvcF9idChuYW1lLCBuYW1lbGVuLCAmYnQtPmxlZnQpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKGJ0LT5yaWdodCkgeworICAgICAgICAgICAgICAgIGJ0ID0gdG9fcHJvcF9vYmooYnQtPnJpZ2h0KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKCFhbGxvY19pZl9uZWVkZWQpCisgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICAgICAgICAgICAgICBidCA9IG5ld19wcm9wX2J0KG5hbWUsIG5hbWVsZW4sICZidC0+cmlnaHQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCitzdGF0aWMgY29uc3QgcHJvcF9pbmZvICpmaW5kX3Byb3BlcnR5KHByb3BfYnQgKnRyaWUsIGNvbnN0IGNoYXIgKm5hbWUsCisgICAgICAgIHVpbnQ4X3QgbmFtZWxlbiwgY29uc3QgY2hhciAqdmFsdWUsIHVpbnQ4X3QgdmFsdWVsZW4sCisgICAgICAgIGJvb2wgYWxsb2NfaWZfbmVlZGVkKQoreworICAgIGNvbnN0IGNoYXIgKnJlbWFpbmluZ19uYW1lID0gbmFtZTsKKworICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgIGNoYXIgKnNlcCA9IHN0cmNocihyZW1haW5pbmdfbmFtZSwgJy4nKTsKKyAgICAgICAgYm9vbCB3YW50X3N1YnRyZWUgPSAoc2VwICE9IE5VTEwpOworICAgICAgICB1aW50OF90IHN1YnN0cl9zaXplOworCisgICAgICAgIHByb3BfYnQgKnJvb3Q7CisKKyAgICAgICAgaWYgKHdhbnRfc3VidHJlZSkgeworICAgICAgICAgICAgc3Vic3RyX3NpemUgPSBzZXAgLSByZW1haW5pbmdfbmFtZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHN1YnN0cl9zaXplID0gc3RybGVuKHJlbWFpbmluZ19uYW1lKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghc3Vic3RyX3NpemUpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKworICAgICAgICBpZiAodHJpZS0+Y2hpbGRyZW4pIHsKKyAgICAgICAgICAgIHJvb3QgPSB0b19wcm9wX29iaih0cmllLT5jaGlsZHJlbik7CisgICAgICAgIH0gZWxzZSBpZiAoYWxsb2NfaWZfbmVlZGVkKSB7CisgICAgICAgICAgICByb290ID0gbmV3X3Byb3BfYnQocmVtYWluaW5nX25hbWUsIHN1YnN0cl9zaXplLCAmdHJpZS0+Y2hpbGRyZW4pOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcm9vdCA9IE5VTEw7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIXJvb3QpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKworICAgICAgICB0cmllID0gZmluZF9wcm9wX2J0KHJvb3QsIHJlbWFpbmluZ19uYW1lLCBzdWJzdHJfc2l6ZSwgYWxsb2NfaWZfbmVlZGVkKTsKKyAgICAgICAgaWYgKCF0cmllKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICAgICAgaWYgKCF3YW50X3N1YnRyZWUpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICByZW1haW5pbmdfbmFtZSA9IHNlcCArIDE7CisgICAgfQorCisgICAgaWYgKHRyaWUtPnByb3ApIHsKKyAgICAgICAgcmV0dXJuIHRvX3Byb3Bfb2JqKHRyaWUtPnByb3ApOworICAgIH0gZWxzZSBpZiAoYWxsb2NfaWZfbmVlZGVkKSB7CisgICAgICAgIHJldHVybiBuZXdfcHJvcF9pbmZvKG5hbWUsIG5hbWVsZW4sIHZhbHVlLCB2YWx1ZWxlbiwgJnRyaWUtPnByb3ApOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIHJldHVybiBUT0NfVE9fSU5GTyhwYSwgcGEtPnRvY1tuXSk7CisgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIH0KIAogY29uc3QgcHJvcF9pbmZvICpfX3N5c3RlbV9wcm9wZXJ0eV9maW5kKGNvbnN0IGNoYXIgKm5hbWUpCiB7Ci0gICAgcHJvcF9hcmVhICpwYSA9IF9fc3lzdGVtX3Byb3BlcnR5X2FyZWFfXzsKLSAgICB1bnNpZ25lZCBjb3VudCA9IHBhLT5jb3VudDsKLSAgICB1bnNpZ25lZCAqdG9jID0gcGEtPnRvYzsKLSAgICB1bnNpZ25lZCBsZW4gPSBzdHJsZW4obmFtZSk7Ci0gICAgcHJvcF9pbmZvICpwaTsKLQotICAgIHdoaWxlKGNvdW50LS0pIHsKLSAgICAgICAgdW5zaWduZWQgZW50cnkgPSAqdG9jKys7Ci0gICAgICAgIGlmKFRPQ19OQU1FX0xFTihlbnRyeSkgIT0gbGVuKSBjb250aW51ZTsKLSAgICAgICAgCi0gICAgICAgIHBpID0gVE9DX1RPX0lORk8ocGEsIGVudHJ5KTsKLSAgICAgICAgaWYobWVtY21wKG5hbWUsIHBpLT5uYW1lLCBsZW4pKSBjb250aW51ZTsKLQotICAgICAgICByZXR1cm4gcGk7CisgICAgaWYgKF9fcHJlZGljdF9mYWxzZShjb21wYXRfbW9kZSkpIHsKKyAgICAgICAgcmV0dXJuIF9fc3lzdGVtX3Byb3BlcnR5X2ZpbmRfY29tcGF0KG5hbWUpOwogICAgIH0KLQotICAgIHJldHVybiAwOworICAgIHJldHVybiBmaW5kX3Byb3BlcnR5KHJvb3Rfbm9kZSgpLCBuYW1lLCBzdHJsZW4obmFtZSksIE5VTEwsIDAsIGZhbHNlKTsKIH0KIAogaW50IF9fc3lzdGVtX3Byb3BlcnR5X3JlYWQoY29uc3QgcHJvcF9pbmZvICpwaSwgY2hhciAqbmFtZSwgY2hhciAqdmFsdWUpCiB7CiAgICAgdW5zaWduZWQgc2VyaWFsLCBsZW47Ci0gICAgCisKKyAgICBpZiAoX19wcmVkaWN0X2ZhbHNlKGNvbXBhdF9tb2RlKSkgeworICAgICAgICByZXR1cm4gX19zeXN0ZW1fcHJvcGVydHlfcmVhZF9jb21wYXQocGksIG5hbWUsIHZhbHVlKTsKKyAgICB9CisKICAgICBmb3IoOzspIHsKICAgICAgICAgc2VyaWFsID0gcGktPnNlcmlhbDsKICAgICAgICAgd2hpbGUoU0VSSUFMX0RJUlRZKHNlcmlhbCkpIHsKQEAgLTEzMyw2ICs0NTQsNyBAQAogICAgICAgICB9CiAgICAgICAgIGxlbiA9IFNFUklBTF9WQUxVRV9MRU4oc2VyaWFsKTsKICAgICAgICAgbWVtY3B5KHZhbHVlLCBwaS0+dmFsdWUsIGxlbiArIDEpOworICAgICAgICBBTkRST0lEX01FTUJBUl9GVUxMKCk7CiAgICAgICAgIGlmKHNlcmlhbCA9PSBwaS0+c2VyaWFsKSB7CiAgICAgICAgICAgICBpZihuYW1lICE9IDApIHsKICAgICAgICAgICAgICAgICBzdHJjcHkobmFtZSwgcGktPm5hbWUpOwpAQCAtMTc2LDcgKzQ5OCw3IEBACiAgICAgYWRkci5zdW5fZmFtaWx5ID0gQUZfTE9DQUw7CiAgICAgYWxlbiA9IG5hbWVsZW4gKyBvZmZzZXRvZihzdHJ1Y3Qgc29ja2FkZHJfdW4sIHN1bl9wYXRoKSArIDE7CiAKLSAgICBpZihURU1QX0ZBSUxVUkVfUkVUUlkoY29ubmVjdChzLCAoc3RydWN0IHNvY2thZGRyICopICZhZGRyLCBhbGVuKSA8IDApKSB7CisgICAgaWYoVEVNUF9GQUlMVVJFX1JFVFJZKGNvbm5lY3QocywgKHN0cnVjdCBzb2NrYWRkciAqKSAmYWRkciwgYWxlbikpIDwgMCkgewogICAgICAgICBjbG9zZShzKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CkBAIC0yMTgsOCArNTQwLDYgQEAKIGludCBfX3N5c3RlbV9wcm9wZXJ0eV9zZXQoY29uc3QgY2hhciAqa2V5LCBjb25zdCBjaGFyICp2YWx1ZSkKIHsKICAgICBpbnQgZXJyOwotICAgIGludCB0cmllcyA9IDA7Ci0gICAgaW50IHVwZGF0ZV9zZWVuID0gMDsKICAgICBwcm9wX21zZyBtc2c7CiAKICAgICBpZihrZXkgPT0gMCkgcmV0dXJuIC0xOwpAQCAtMjU3LDMgKzU3NywxMzMgQEAKICAgICB9CiAgICAgcmV0dXJuIDA7CiB9CisKK2ludCBfX3N5c3RlbV9wcm9wZXJ0eV91cGRhdGUocHJvcF9pbmZvICpwaSwgY29uc3QgY2hhciAqdmFsdWUsIHVuc2lnbmVkIGludCBsZW4pCit7CisgICAgcHJvcF9hcmVhICpwYSA9IF9fc3lzdGVtX3Byb3BlcnR5X2FyZWFfXzsKKworICAgIGlmIChsZW4gPj0gUFJPUF9WQUxVRV9NQVgpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIHBpLT5zZXJpYWwgPSBwaS0+c2VyaWFsIHwgMTsKKyAgICBBTkRST0lEX01FTUJBUl9GVUxMKCk7CisgICAgbWVtY3B5KHBpLT52YWx1ZSwgdmFsdWUsIGxlbiArIDEpOworICAgIEFORFJPSURfTUVNQkFSX0ZVTEwoKTsKKyAgICBwaS0+c2VyaWFsID0gKGxlbiA8PCAyNCkgfCAoKHBpLT5zZXJpYWwgKyAxKSAmIDB4ZmZmZmZmKTsKKyAgICBfX2Z1dGV4X3dha2UoJnBpLT5zZXJpYWwsIElOVDMyX01BWCk7CisKKyAgICBwYS0+c2VyaWFsKys7CisgICAgX19mdXRleF93YWtlKCZwYS0+c2VyaWFsLCBJTlQzMl9NQVgpOworCisgICAgcmV0dXJuIDA7Cit9CisKK2ludCBfX3N5c3RlbV9wcm9wZXJ0eV9hZGQoY29uc3QgY2hhciAqbmFtZSwgdW5zaWduZWQgaW50IG5hbWVsZW4sCisgICAgICAgICAgICBjb25zdCBjaGFyICp2YWx1ZSwgdW5zaWduZWQgaW50IHZhbHVlbGVuKQoreworICAgIHByb3BfYXJlYSAqcGEgPSBfX3N5c3RlbV9wcm9wZXJ0eV9hcmVhX187CisgICAgY29uc3QgcHJvcF9pbmZvICpwaTsKKworICAgIGlmIChuYW1lbGVuID49IFBST1BfTkFNRV9NQVgpCisgICAgICAgIHJldHVybiAtMTsKKyAgICBpZiAodmFsdWVsZW4gPj0gUFJPUF9WQUxVRV9NQVgpCisgICAgICAgIHJldHVybiAtMTsKKyAgICBpZiAobmFtZWxlbiA8IDEpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIHBpID0gZmluZF9wcm9wZXJ0eShyb290X25vZGUoKSwgbmFtZSwgbmFtZWxlbiwgdmFsdWUsIHZhbHVlbGVuLCB0cnVlKTsKKyAgICBpZiAoIXBpKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICBwYS0+c2VyaWFsKys7CisgICAgX19mdXRleF93YWtlKCZwYS0+c2VyaWFsLCBJTlQzMl9NQVgpOworICAgIHJldHVybiAwOworfQorCit1bnNpZ25lZCBpbnQgX19zeXN0ZW1fcHJvcGVydHlfc2VyaWFsKGNvbnN0IHByb3BfaW5mbyAqcGkpCit7CisgICAgcmV0dXJuIHBpLT5zZXJpYWw7Cit9CisKK3Vuc2lnbmVkIGludCBfX3N5c3RlbV9wcm9wZXJ0eV93YWl0X2FueSh1bnNpZ25lZCBpbnQgc2VyaWFsKQoreworICAgIHByb3BfYXJlYSAqcGEgPSBfX3N5c3RlbV9wcm9wZXJ0eV9hcmVhX187CisKKyAgICBkbyB7CisgICAgICAgIF9fZnV0ZXhfd2FpdCgmcGEtPnNlcmlhbCwgc2VyaWFsLCAwKTsKKyAgICB9IHdoaWxlKHBhLT5zZXJpYWwgPT0gc2VyaWFsKTsKKworICAgIHJldHVybiBwYS0+c2VyaWFsOworfQorCitzdHJ1Y3QgZmluZF9udGhfY29va2llIHsKKyAgICB1bnNpZ25lZCBjb3VudDsKKyAgICB1bnNpZ25lZCBuOworICAgIGNvbnN0IHByb3BfaW5mbyAqcGk7Cit9OworCitzdGF0aWMgdm9pZCBmaW5kX250aF9mbihjb25zdCBwcm9wX2luZm8gKnBpLCB2b2lkICpwdHIpCit7CisgICAgc3RydWN0IGZpbmRfbnRoX2Nvb2tpZSAqY29va2llID0gcHRyOworCisgICAgaWYgKGNvb2tpZS0+biA9PSBjb29raWUtPmNvdW50KQorICAgICAgICBjb29raWUtPnBpID0gcGk7CisKKyAgICBjb29raWUtPmNvdW50Kys7Cit9CisKK2NvbnN0IHByb3BfaW5mbyAqX19zeXN0ZW1fcHJvcGVydHlfZmluZF9udGgodW5zaWduZWQgbikKK3sKKyAgICBzdHJ1Y3QgZmluZF9udGhfY29va2llIGNvb2tpZTsKKyAgICBpbnQgZXJyOworCisgICAgbWVtc2V0KCZjb29raWUsIDAsIHNpemVvZihjb29raWUpKTsKKyAgICBjb29raWUubiA9IG47CisKKyAgICBlcnIgPSBfX3N5c3RlbV9wcm9wZXJ0eV9mb3JlYWNoKGZpbmRfbnRoX2ZuLCAmY29va2llKTsKKyAgICBpZiAoZXJyIDwgMCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICByZXR1cm4gY29va2llLnBpOworfQorCitzdGF0aWMgaW50IGZvcmVhY2hfcHJvcGVydHkocHJvcF9vZmZfdCBvZmYsCisgICAgICAgIHZvaWQgKCpwcm9wZm4pKGNvbnN0IHByb3BfaW5mbyAqcGksIHZvaWQgKmNvb2tpZSksIHZvaWQgKmNvb2tpZSkKK3sKKyAgICBwcm9wX2J0ICp0cmllID0gdG9fcHJvcF9vYmoob2ZmKTsKKyAgICBpZiAoIXRyaWUpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIGlmICh0cmllLT5sZWZ0KSB7CisgICAgICAgIGludCBlcnIgPSBmb3JlYWNoX3Byb3BlcnR5KHRyaWUtPmxlZnQsIHByb3BmbiwgY29va2llKTsKKyAgICAgICAgaWYgKGVyciA8IDApCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIGlmICh0cmllLT5wcm9wKSB7CisgICAgICAgIHByb3BfaW5mbyAqaW5mbyA9IHRvX3Byb3Bfb2JqKHRyaWUtPnByb3ApOworICAgICAgICBpZiAoIWluZm8pCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIHByb3BmbihpbmZvLCBjb29raWUpOworICAgIH0KKyAgICBpZiAodHJpZS0+Y2hpbGRyZW4pIHsKKyAgICAgICAgaW50IGVyciA9IGZvcmVhY2hfcHJvcGVydHkodHJpZS0+Y2hpbGRyZW4sIHByb3BmbiwgY29va2llKTsKKyAgICAgICAgaWYgKGVyciA8IDApCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIGlmICh0cmllLT5yaWdodCkgeworICAgICAgICBpbnQgZXJyID0gZm9yZWFjaF9wcm9wZXJ0eSh0cmllLT5yaWdodCwgcHJvcGZuLCBjb29raWUpOworICAgICAgICBpZiAoZXJyIDwgMCkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworaW50IF9fc3lzdGVtX3Byb3BlcnR5X2ZvcmVhY2godm9pZCAoKnByb3BmbikoY29uc3QgcHJvcF9pbmZvICpwaSwgdm9pZCAqY29va2llKSwKKyAgICAgICAgdm9pZCAqY29va2llKQoreworICAgIGlmIChfX3ByZWRpY3RfZmFsc2UoY29tcGF0X21vZGUpKSB7CisgICAgICAgIHJldHVybiBfX3N5c3RlbV9wcm9wZXJ0eV9mb3JlYWNoX2NvbXBhdChwcm9wZm4sIGNvb2tpZSk7CisJfQorICAgIHJldHVybiBmb3JlYWNoX3Byb3BlcnR5KDAsIHByb3BmbiwgY29va2llKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL3N5c3RlbV9wcm9wZXJ0aWVzX2NvbXBhdC5jIGIvbGliYy9iaW9uaWMvc3lzdGVtX3Byb3BlcnRpZXNfY29tcGF0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmRiYzRjYwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYmlvbmljL3N5c3RlbV9wcm9wZXJ0aWVzX2NvbXBhdC5jCkBAIC0wLDAgKzEsMTMxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKy8qCisgKiBUaGlzIGZpbGUgaXMgb25seSB1c2VkIHRvIHByb3ZpZGUgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgdG8gcHJvcGVydHkgYXJlYXMKKyAqIGNyZWF0ZWQgYnkgb2xkIHZlcnNpb25zIG9mIGluaXQsIHdoaWNoIG9jY3VycyB3aGVuIGFuIG90YSBydW5zLiAgVGhlIHVwZGF0ZXIKKyAqIGJpbmFyeSBpcyBjb21waWxlZCBzdGF0aWNhbGx5IGFnYWluc3QgdGhlIG5ld2VzdCBiaW9uaWMsIGJ1dCB0aGUgcmVjb3ZlcnkKKyAqIHJhbWRpc2sgbWF5IGJlIHVzaW5nIGFuIG9sZCB2ZXJzaW9uIG9mIGluaXQuICBUaGlzIGNhbiBhbGwgYmUgcmVtb3ZlZCBvbmNlCisgKiBPVEFzIGZyb20gcHJlLUsgdmVyc2lvbnMgYXJlIG5vIGxvbmdlciBzdXBwb3J0ZWQuCisgKi8KKworI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN5cy9hdG9taWNzLmg+CisKKyNkZWZpbmUgX1JFQUxMWV9JTkNMVURFX1NZU19fU1lTVEVNX1BST1BFUlRJRVNfSF8KKyNpbmNsdWRlIDxzeXMvX3N5c3RlbV9wcm9wZXJ0aWVzLmg+CisKKyNkZWZpbmUgVE9DX05BTUVfTEVOKHRvYykgICAgICAgKCh0b2MpID4+IDI0KQorI2RlZmluZSBUT0NfVE9fSU5GTyhhcmVhLCB0b2MpICAoKHByb3BfaW5mb19jb21wYXQqKSAoKChjaGFyKikgYXJlYSkgKyAoKHRvYykgJiAweEZGRkZGRikpKQorCitzdHJ1Y3QgcHJvcF9hcmVhX2NvbXBhdCB7CisgICAgdW5zaWduZWQgdm9sYXRpbGUgY291bnQ7CisgICAgdW5zaWduZWQgdm9sYXRpbGUgc2VyaWFsOworICAgIHVuc2lnbmVkIG1hZ2ljOworICAgIHVuc2lnbmVkIHZlcnNpb247CisgICAgdW5zaWduZWQgdG9jWzFdOworfTsKKwordHlwZWRlZiBzdHJ1Y3QgcHJvcF9hcmVhX2NvbXBhdCBwcm9wX2FyZWFfY29tcGF0OworCitzdHJ1Y3QgcHJvcF9hcmVhOwordHlwZWRlZiBzdHJ1Y3QgcHJvcF9hcmVhIHByb3BfYXJlYTsKKworc3RydWN0IHByb3BfaW5mb19jb21wYXQgeworICAgIGNoYXIgbmFtZVtQUk9QX05BTUVfTUFYXTsKKyAgICB1bnNpZ25lZCB2b2xhdGlsZSBzZXJpYWw7CisgICAgY2hhciB2YWx1ZVtQUk9QX1ZBTFVFX01BWF07Cit9OworCit0eXBlZGVmIHN0cnVjdCBwcm9wX2luZm9fY29tcGF0IHByb3BfaW5mb19jb21wYXQ7CisKK2V4dGVybiBwcm9wX2FyZWEgKl9fc3lzdGVtX3Byb3BlcnR5X2FyZWFfXzsKKworY29uc3QgcHJvcF9pbmZvICpfX3N5c3RlbV9wcm9wZXJ0eV9maW5kX2NvbXBhdChjb25zdCBjaGFyICpuYW1lKQoreworICAgIHByb3BfYXJlYV9jb21wYXQgKnBhID0gKHByb3BfYXJlYV9jb21wYXQgKilfX3N5c3RlbV9wcm9wZXJ0eV9hcmVhX187CisgICAgdW5zaWduZWQgY291bnQgPSBwYS0+Y291bnQ7CisgICAgdW5zaWduZWQgKnRvYyA9IHBhLT50b2M7CisgICAgdW5zaWduZWQgbGVuID0gc3RybGVuKG5hbWUpOworICAgIHByb3BfaW5mb19jb21wYXQgKnBpOworCisgICAgaWYgKGxlbiA+PSBQUk9QX05BTUVfTUFYKQorICAgICAgICByZXR1cm4gMDsKKyAgICBpZiAobGVuIDwgMSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICB3aGlsZShjb3VudC0tKSB7CisgICAgICAgIHVuc2lnbmVkIGVudHJ5ID0gKnRvYysrOworICAgICAgICBpZihUT0NfTkFNRV9MRU4oZW50cnkpICE9IGxlbikgY29udGludWU7CisKKyAgICAgICAgcGkgPSBUT0NfVE9fSU5GTyhwYSwgZW50cnkpOworICAgICAgICBpZihtZW1jbXAobmFtZSwgcGktPm5hbWUsIGxlbikpIGNvbnRpbnVlOworCisgICAgICAgIHJldHVybiAoY29uc3QgcHJvcF9pbmZvICopcGk7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK2ludCBfX3N5c3RlbV9wcm9wZXJ0eV9yZWFkX2NvbXBhdChjb25zdCBwcm9wX2luZm8gKl9waSwgY2hhciAqbmFtZSwgY2hhciAqdmFsdWUpCit7CisgICAgdW5zaWduZWQgc2VyaWFsLCBsZW47CisgICAgY29uc3QgcHJvcF9pbmZvX2NvbXBhdCAqcGkgPSAoY29uc3QgcHJvcF9pbmZvX2NvbXBhdCAqKV9waTsKKworICAgIGZvcig7OykgeworICAgICAgICBzZXJpYWwgPSBwaS0+c2VyaWFsOworICAgICAgICB3aGlsZShTRVJJQUxfRElSVFkoc2VyaWFsKSkgeworICAgICAgICAgICAgX19mdXRleF93YWl0KCh2b2xhdGlsZSB2b2lkICopJnBpLT5zZXJpYWwsIHNlcmlhbCwgMCk7CisgICAgICAgICAgICBzZXJpYWwgPSBwaS0+c2VyaWFsOworICAgICAgICB9CisgICAgICAgIGxlbiA9IFNFUklBTF9WQUxVRV9MRU4oc2VyaWFsKTsKKyAgICAgICAgbWVtY3B5KHZhbHVlLCBwaS0+dmFsdWUsIGxlbiArIDEpOworICAgICAgICBpZihzZXJpYWwgPT0gcGktPnNlcmlhbCkgeworICAgICAgICAgICAgaWYobmFtZSAhPSAwKSB7CisgICAgICAgICAgICAgICAgc3RyY3B5KG5hbWUsIHBpLT5uYW1lKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBsZW47CisgICAgICAgIH0KKyAgICB9Cit9CisKK2ludCBfX3N5c3RlbV9wcm9wZXJ0eV9mb3JlYWNoX2NvbXBhdCgKKyAgICAgICAgdm9pZCAoKnByb3BmbikoY29uc3QgcHJvcF9pbmZvICpwaSwgdm9pZCAqY29va2llKSwKKyAgICAgICAgdm9pZCAqY29va2llKQoreworICAgIHByb3BfYXJlYV9jb21wYXQgKnBhID0gKHByb3BfYXJlYV9jb21wYXQgKilfX3N5c3RlbV9wcm9wZXJ0eV9hcmVhX187CisgICAgdW5zaWduZWQgaTsKKworICAgIGZvciAoaSA9IDA7IGkgPCBwYS0+Y291bnQ7IGkrKykgeworICAgICAgICB1bnNpZ25lZCBlbnRyeSA9IHBhLT50b2NbaV07CisgICAgICAgIHByb3BfaW5mb19jb21wYXQgKnBpID0gVE9DX1RPX0lORk8ocGEsIGVudHJ5KTsKKyAgICAgICAgcHJvcGZuKChjb25zdCBwcm9wX2luZm8gKilwaSwgY29va2llKTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdW5pc3RkL3RjZ2V0cGdycC5jIGIvbGliYy9iaW9uaWMvdGNnZXRwZ3JwLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGxpYmMvdW5pc3RkL3RjZ2V0cGdycC5jCnJlbmFtZSB0byBsaWJjL2Jpb25pYy90Y2dldHBncnAuYwpkaWZmIC0tZ2l0IGEvbGliYy91bmlzdGQvdGNzZXRwZ3JwLmMgYi9saWJjL2Jpb25pYy90Y3NldHBncnAuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbGliYy91bmlzdGQvdGNzZXRwZ3JwLmMKcmVuYW1lIHRvIGxpYmMvYmlvbmljL3Rjc2V0cGdycC5jCmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy90ZGVzdHJveS5jcHAgYi9saWJjL2Jpb25pYy90ZGVzdHJveS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGVjZGU0ZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYmlvbmljL3RkZXN0cm95LmNwcApAQCAtMCwwICsxLDM2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2RlZmluZSBfU0VBUkNIX1BSSVZBVEUKKyNpbmNsdWRlIDxzZWFyY2guaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworLy8gRGVzdHJveSBhIHRyZWUgYW5kIGZyZWUgYWxsIGFsbG9jYXRlZCByZXNvdXJjZXMuCisvLyBUaGlzIGlzIGEgR05VIGV4dGVuc2lvbiwgbm90IGF2YWlsYWJsZSBmcm9tIE5ldEJTRC4KK3ZvaWQgdGRlc3Ryb3kodm9pZCogcm9vdCwgdm9pZCAoKmRlc3Ryb3lfZnVuYykodm9pZCopKSB7CisgIG5vZGVfdCogcm9vdF9ub2RlID0gKG5vZGVfdCopIHJvb3Q7CisgIGlmIChyb290X25vZGUgPT0gTlVMTCkgeworICAgIHJldHVybjsKKyAgfQorICBpZiAocm9vdF9ub2RlLT5sbGluaykgeworICAgIHRkZXN0cm95KHJvb3Rfbm9kZS0+bGxpbmssIGRlc3Ryb3lfZnVuYyk7CisgIH0KKyAgaWYgKHJvb3Rfbm9kZS0+cmxpbmspIHsKKyAgICB0ZGVzdHJveShyb290X25vZGUtPnJsaW5rLCBkZXN0cm95X2Z1bmMpOworICB9CisgICgqZGVzdHJveV9mdW5jKShyb290X25vZGUtPmtleSk7CisgIGZyZWUocm9vdCk7Cit9CmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy90bXBmaWxlLmNwcCBiL2xpYmMvYmlvbmljL3RtcGZpbGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0MTlmZjUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2Jpb25pYy90bXBmaWxlLmNwcApAQCAtMCwwICsxLDExMyBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKKyAqIENocmlzIFRvcmVrLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzaWduYWwuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKKyNpbmNsdWRlICJwcml2YXRlL0Vycm5vUmVzdG9yZXIuaCIKKworY2xhc3MgU2NvcGVkU2lnbmFsQmxvY2tlciB7CisgcHVibGljOgorICBTY29wZWRTaWduYWxCbG9ja2VyKCkgeworICAgIHNpZ3NldF90IHNldDsKKyAgICBzaWdmaWxsc2V0KCZzZXQpOworICAgIHNpZ3Byb2NtYXNrKFNJR19CTE9DSywgJnNldCwgJm9sZF9zZXRfKTsKKyAgfQorCisgIH5TY29wZWRTaWduYWxCbG9ja2VyKCkgeworICAgIHNpZ3Byb2NtYXNrKFNJR19TRVRNQVNLLCAmb2xkX3NldF8sIE5VTEwpOworICB9CisKKyBwcml2YXRlOgorICBzaWdzZXRfdCBvbGRfc2V0XzsKK307CisKK3N0YXRpYyBGSUxFKiBfX3RtcGZpbGVfZGlyKGNvbnN0IGNoYXIqIHRtcF9kaXIpIHsKKyAgY2hhciBidWZbUEFUSF9NQVhdOworICBpbnQgcGF0aF9sZW5ndGggPSBzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJXMvdG1wLlhYWFhYWFhYWFgiLCB0bXBfZGlyKTsKKyAgaWYgKHBhdGhfbGVuZ3RoID49IHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKGJ1ZikpKSB7CisgICAgcmV0dXJuIE5VTEw7CisgIH0KKworICBpbnQgZmQ7CisgIHsKKyAgICBTY29wZWRTaWduYWxCbG9ja2VyIHNzYjsKKyAgICBmZCA9IG1rc3RlbXAoYnVmKTsKKyAgICBpZiAoZmQgPT0gLTEpIHsKKyAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIC8vIFVubGluayB0aGUgZmlsZSBub3cgc28gdGhhdCBpdCdzIHJlbW92ZWQgd2hlbiBjbG9zZWQuCisgICAgdW5saW5rKGJ1Zik7CisKKyAgICAvLyBDYW4gd2Ugc3RpbGwgdXNlIHRoZSBmaWxlIG5vdyBpdCdzIHVubGlua2VkPworICAgIC8vIEZpbGUgc3lzdGVtcyB3aXRob3V0IGhhcmQgbGluayBzdXBwb3J0IHdvbid0IGhhdmUgdGhlIHVzdWFsIFVuaXggc2VtYW50aWNzLgorICAgIHN0cnVjdCBzdGF0IHNiOworICAgIGludCByYyA9IGZzdGF0KGZkLCAmc2IpOworICAgIGlmIChyYyA9PSAtMSkgeworICAgICAgRXJybm9SZXN0b3JlciBlcnJub19yZXN0b3JlcjsKKyAgICAgIGNsb3NlKGZkKTsKKyAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgfQorCisgIC8vIFR1cm4gdGhlIGZpbGUgZGVzY3JpcHRvciBpbnRvIGEgRklMRSouCisgIEZJTEUqIGZwID0gZmRvcGVuKGZkLCAidysiKTsKKyAgaWYgKGZwICE9IE5VTEwpIHsKKyAgICByZXR1cm4gZnA7CisgIH0KKworICAvLyBGYWlsdXJlLiBDbGVhbiB1cC4gV2UgYWxyZWFkeSB1bmxpbmtlZCwgc28gd2UganVzdCBuZWVkIHRvIGNsb3NlLgorICBFcnJub1Jlc3RvcmVyIGVycm5vX3Jlc3RvcmVyOworICBjbG9zZShmZCk7CisgIHJldHVybiBOVUxMOworfQorCitGSUxFKiB0bXBmaWxlKCkgeworICAvLyBUT0RPOiBnZXQgdGhpcyBhcHAncyB0ZW1wb3JhcnkgZGlyZWN0b3J5IGZyb20gdGhlIGZyYW1ld29yayAoIi9kYXRhL2RhdGEvYXBwL2NhY2hlIikuCisKKyAgLy8gJEVYVEVSTkFMX1NUT1JBR0UgdHVybnMgb3V0IG5vdCB0byBiZSB2ZXJ5IHVzZWZ1bCBiZWNhdXNlIGl0IGRvZXNuJ3Qgc3VwcG9ydCBoYXJkIGxpbmtzLgorICAvLyBUaGlzIG1lYW5zIHdlIGNhbid0IGRvIHRoZSB1c3VhbCB0cmljayBvZiBjYWxsaW5nIHVubGluayBiZWZvcmUgaGFuZGluZyB0aGUgZmlsZSBiYWNrLgorCisgIEZJTEUqIGZwID0gX190bXBmaWxlX2RpcigiL2RhdGEvbG9jYWwvdG1wIik7CisgIGlmIChmcCA9PSBOVUxMKSB7CisgICAgLy8gUF90bXBkaXIgaXMgIi90bXAvIiwgYnV0IFBPU0lYIGV4cGxpY2l0bHkgc2F5cyB0aGF0IHRtcGRpcigzKSBzaG91bGQgdHJ5IFBfdG1wZGlyIGJlZm9yZQorICAgIC8vIGdpdmluZyB1cC4gVGhpcyBpcyBwb3RlbnRpYWxseSB1c2VmdWwgZm9yIGJpb25pYyBvbiB0aGUgaG9zdCBhbnl3YXkuCisgICAgZnAgPSBfX3RtcGZpbGVfZGlyKFBfdG1wZGlyKTsKKyAgfQorICByZXR1cm4gZnA7Cit9CmRpZmYgLS1naXQgYS9saWJjL3VuaXN0ZC91bW91bnQuYyBiL2xpYmMvYmlvbmljL3Vtb3VudC5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBsaWJjL3VuaXN0ZC91bW91bnQuYwpyZW5hbWUgdG8gbGliYy9iaW9uaWMvdW1vdW50LmMKZGlmZiAtLWdpdCBhL2xpYmMvdW5pc3RkL3VubG9ja3B0LmMgYi9saWJjL2Jpb25pYy91bmxvY2twdC5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBsaWJjL3VuaXN0ZC91bmxvY2twdC5jCnJlbmFtZSB0byBsaWJjL2Jpb25pYy91bmxvY2twdC5jCmRpZmYgLS1naXQgYS9saWJjL3VuaXN0ZC91c2xlZXAuYyBiL2xpYmMvYmlvbmljL3VzbGVlcC5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBsaWJjL3VuaXN0ZC91c2xlZXAuYwpyZW5hbWUgdG8gbGliYy9iaW9uaWMvdXNsZWVwLmMKZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL3V0aW1lLmMgYi9saWJjL2Jpb25pYy91dGltZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MjM5ODQ3Li4wMDAwMDAwCi0tLSBhL2xpYmMvYmlvbmljL3V0aW1lLmMKKysrIC9kZXYvbnVsbApAQCAtMSw1NSArMCwwIEBACi0vKi0KLSAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MwotICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiA0LiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0gKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZiBkZWZpbmVkKExJQkNfU0NDUykgJiYgIWRlZmluZWQobGludCkKLXN0YXRpYyBjaGFyIHNjY3NpZFtdID0gIkAoIyl1dGltZS5jCTguMSAoQmVya2VsZXkpIDYvNC85MyI7Ci0jZW5kaWYgLyogTElCQ19TQ0NTIGFuZCBub3QgbGludCAqLwotI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgotLy9fX0ZCU0RJRCgiJEZyZWVCU0Q6IC9yZXBvbWFuL3IvbmN2cy9zcmMvbGliL2xpYmMvZ2VuL3V0aW1lLmMsdiAxLjMgMjAwNy8wMS8wOSAwMDoyNzo1NiBpbXAgRXhwICQiKTsKLQotI2luY2x1ZGUgPHN5cy90aW1lLmg+Ci0KLSNpbmNsdWRlIDx1dGltZS5oPgotCi1pbnQKLXV0aW1lKHBhdGgsIHRpbWVzKQotCWNvbnN0IGNoYXIgKnBhdGg7Ci0JY29uc3Qgc3RydWN0IHV0aW1idWYgKnRpbWVzOwotewotCXN0cnVjdCB0aW1ldmFsIHR2WzJdLCAqdHZwOwotCi0JaWYgKHRpbWVzKSB7Ci0JCXR2WzBdLnR2X3NlYyA9IHRpbWVzLT5hY3RpbWU7Ci0JCXR2WzFdLnR2X3NlYyA9IHRpbWVzLT5tb2R0aW1lOwotCQl0dlswXS50dl91c2VjID0gdHZbMV0udHZfdXNlYyA9IDA7Ci0JCXR2cCA9IHR2OwotCX0gZWxzZQotCQl0dnAgPSBOVUxMOwotCXJldHVybiAodXRpbWVzKHBhdGgsIHR2cCkpOwotfQpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvd2FpdC5jcHAgYi9saWJjL2Jpb25pYy93YWl0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZGJjZWMyCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9iaW9uaWMvd2FpdC5jcHAKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3lzL3dhaXQuaD4KKyNpbmNsdWRlIDxzdGRkZWYuaD4KKworZXh0ZXJuICJDIiBpbnQgX193YWl0aWQoaWR0eXBlX3Qgd2hpY2gsIGlkX3QgaWQsIHNpZ2luZm9fdCogaW5mbywgaW50IG9wdGlvbnMsIHN0cnVjdCBydXNhZ2UqIHJ1KTsKKworcGlkX3Qgd2FpdChpbnQqIHN0YXR1cykgeworICByZXR1cm4gd2FpdDQoLTEsIHN0YXR1cywgMCwgTlVMTCk7Cit9CisKK3BpZF90IHdhaXQzKGludCogc3RhdHVzLCBpbnQgb3B0aW9ucywgc3RydWN0IHJ1c2FnZSogcnVzYWdlKSB7CisgIHJldHVybiB3YWl0NCgtMSwgc3RhdHVzLCBvcHRpb25zLCBydXNhZ2UpOworfQorCitwaWRfdCB3YWl0cGlkKHBpZF90IHBpZCwgaW50KiBzdGF0dXMsIGludCBvcHRpb25zKSB7CisgIHJldHVybiB3YWl0NChwaWQsIHN0YXR1cywgb3B0aW9ucywgTlVMTCk7Cit9CisKK2ludCB3YWl0aWQoaWR0eXBlX3Qgd2hpY2gsIGlkX3QgaWQsIHNpZ2luZm9fdCogaW5mbywgaW50IG9wdGlvbnMpIHsKKyAgLyogdGhlIHN5c3RlbSBjYWxsIHRha2VzIGFuIG9wdGlvbiBzdHJ1Y3QgcnVzYWdlIHRoYXQgd2UgZG9uJ3QgbmVlZCAqLworICByZXR1cm4gX193YWl0aWQod2hpY2gsIGlkLCBpbmZvLCBvcHRpb25zLCBOVUxMKTsKK30KKworLy8gVE9ETzogcmVtb3ZlIHRoaXMgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBoYWNrIChmb3IgamItbXIxIHN0cmFjZSBiaW5hcmllcykuCitleHRlcm4gIkMiIHBpZF90IF9fd2FpdDQocGlkX3QgcGlkLCBpbnQqIHN0YXR1cywgaW50IG9wdGlvbnMsIHN0cnVjdCBydXNhZ2UqIHJ1c2FnZSkgeworICByZXR1cm4gd2FpdDQocGlkLCBzdGF0dXMsIG9wdGlvbnMsIHJ1c2FnZSk7Cit9CmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy93Y2hhci5jcHAgYi9saWJjL2Jpb25pYy93Y2hhci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTBhMzg3NQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYmlvbmljL3djaGFyLmNwcApAQCAtMCwwICsxLDI4NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHdjaGFyLmg+CisKKy8qIHN0dWJzIGZvciB3aWRlLWNoYXIgZnVuY3Rpb25zICovCisKK3dpbnRfdCBidG93YyhpbnQgYykgeworICByZXR1cm4gKGMgPT0gRU9GKSA/IFdFT0YgOiBjOworfQorCitpbnQgZndwcmludGYoRklMRSogc3RyZWFtLCBjb25zdCB3Y2hhcl90KiBmb3JtYXQsIC4uLikgeworICB2YV9saXN0IGFyZ3M7CisgIHZhX3N0YXJ0KGFyZ3MsIGZvcm1hdCk7CisgIGludCByZXN1bHQgPSB2ZndwcmludGYoc3RyZWFtLCBmb3JtYXQsIGFyZ3MpOworICB2YV9lbmQoYXJncyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK2ludCB3cHJpbnRmKGNvbnN0IHdjaGFyX3QqIGZvcm1hdCwgLi4uKSB7CisgIHZhX2xpc3QgYXJnczsKKyAgdmFfc3RhcnQoYXJncywgZm9ybWF0KTsKKyAgaW50IHJlc3VsdCA9IHZ3cHJpbnRmKGZvcm1hdCwgYXJncyk7CisgIHZhX2VuZChhcmdzKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworaW50IHN3cHJpbnRmKHdjaGFyX3QqIHMsIHNpemVfdCBuLCBjb25zdCB3Y2hhcl90KiBmb3JtYXQsIC4uLikgeworICB2YV9saXN0IGFyZ3M7CisgIHZhX3N0YXJ0KGFyZ3MsIGZvcm1hdCk7CisgIGludCByZXN1bHQgPSB2c3dwcmludGYocywgbiwgZm9ybWF0LCBhcmdzKTsKKyAgdmFfZW5kKGFyZ3MpOworICByZXR1cm4gcmVzdWx0OworfQorCitpbnQgdndwcmludGYoY29uc3Qgd2NoYXJfdCogZm9ybWF0LCB2YV9saXN0IGFyZykgeworICByZXR1cm4gdmZ3cHJpbnRmKHN0ZG91dCwgZm9ybWF0LCBhcmcpOworfQorCitpbnQgdmZ3cHJpbnRmKEZJTEUqIC8qc3RyZWFtKi8sIGNvbnN0IHdjaGFyX3QqIC8qZm9ybWF0Ki8sIHZhX2xpc3QgLyphcmcqLykgeworICBlcnJubyA9IEVOT1RTVVA7CisgIHJldHVybiAtMTsKK30KKworaW50IHZzd3ByaW50Zih3Y2hhcl90KiAvKnMqLywgc2l6ZV90IC8qbiovLCBjb25zdCB3Y2hhcl90KiAvKmZvcm1hdCovLCB2YV9saXN0IC8qYXJnKi8pIHsKKyAgZXJybm8gPSBFTk9UU1VQOworICByZXR1cm4gLTE7Cit9CisKK2ludCBmd3NjYW5mKEZJTEUqIC8qc3RyZWFtKi8sIGNvbnN0IHdjaGFyX3QqIC8qZm9ybWF0Ki8sIC4uLiApIHsKKyAgZXJybm8gPSBFTk9UU1VQOworICByZXR1cm4gLTE7Cit9CisKK2ludCB3c2NhbmYoY29uc3Qgd2NoYXJfdCogZm9ybWF0LCAuLi4gKSB7CisgIHZhX2xpc3QgYXJnczsKKyAgdmFfc3RhcnQgKGFyZ3MsIGZvcm1hdCk7CisgIGludCByZXN1bHQgPSBmd3NjYW5mKHN0ZG91dCwgZm9ybWF0LCBhcmdzICk7CisgIHZhX2VuZCAoYXJncyk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK2ludCBzd3NjYW5mKGNvbnN0IHdjaGFyX3QqIC8qcyovLCBjb25zdCB3Y2hhcl90KiAvKmZvcm1hdCovLCAuLi4gKSB7CisgIGVycm5vID0gRU5PVFNVUDsKKyAgcmV0dXJuIC0xOworfQorCitpbnQgaXN3YWxudW0od2ludF90IHdjKSB7IHJldHVybiBpc2FsbnVtKHdjKTsgfQoraW50IGlzd2FscGhhKHdpbnRfdCB3YykgeyByZXR1cm4gaXNhbHBoYSh3Yyk7IH0KK2ludCBpc3djbnRybCh3aW50X3Qgd2MpIHsgcmV0dXJuIGlzY250cmwod2MpOyB9CitpbnQgaXN3ZGlnaXQod2ludF90IHdjKSB7IHJldHVybiBpc2RpZ2l0KHdjKTsgfQoraW50IGlzd2dyYXBoKHdpbnRfdCB3YykgeyByZXR1cm4gaXNncmFwaCh3Yyk7IH0KK2ludCBpc3dsb3dlcih3aW50X3Qgd2MpIHsgcmV0dXJuIGlzbG93ZXIod2MpOyB9CitpbnQgaXN3cHJpbnQod2ludF90IHdjKSB7IHJldHVybiBpc3ByaW50KHdjKTsgfQoraW50IGlzd3B1bmN0KHdpbnRfdCB3YykgeyByZXR1cm4gaXNwdW5jdCh3Yyk7IH0KK2ludCBpc3dzcGFjZSh3aW50X3Qgd2MpIHsgcmV0dXJuIGlzc3BhY2Uod2MpOyB9CitpbnQgaXN3dXBwZXIod2ludF90IHdjKSB7IHJldHVybiBpc3VwcGVyKHdjKTsgfQoraW50IGlzd3hkaWdpdCh3aW50X3Qgd2MpIHsgcmV0dXJuIGlzeGRpZ2l0KHdjKTsgfQorCitpbnQgaXN3Y3R5cGUod2ludF90IHdjLCB3Y3R5cGVfdCBjaGFyX2NsYXNzKSB7CisgIHN3aXRjaCAoY2hhcl9jbGFzcykgeworICAgIGNhc2UgV0NfVFlQRV9BTE5VTTogcmV0dXJuIGlzYWxudW0od2MpOworICAgIGNhc2UgV0NfVFlQRV9BTFBIQTogcmV0dXJuIGlzYWxwaGEod2MpOworICAgIGNhc2UgV0NfVFlQRV9CTEFOSzogcmV0dXJuIGlzYmxhbmsod2MpOworICAgIGNhc2UgV0NfVFlQRV9DTlRSTDogcmV0dXJuIGlzY250cmwod2MpOworICAgIGNhc2UgV0NfVFlQRV9ESUdJVDogcmV0dXJuIGlzZGlnaXQod2MpOworICAgIGNhc2UgV0NfVFlQRV9HUkFQSDogcmV0dXJuIGlzZ3JhcGgod2MpOworICAgIGNhc2UgV0NfVFlQRV9MT1dFUjogcmV0dXJuIGlzbG93ZXIod2MpOworICAgIGNhc2UgV0NfVFlQRV9QUklOVDogcmV0dXJuIGlzcHJpbnQod2MpOworICAgIGNhc2UgV0NfVFlQRV9QVU5DVDogcmV0dXJuIGlzcHVuY3Qod2MpOworICAgIGNhc2UgV0NfVFlQRV9TUEFDRTogcmV0dXJuIGlzc3BhY2Uod2MpOworICAgIGNhc2UgV0NfVFlQRV9VUFBFUjogcmV0dXJuIGlzdXBwZXIod2MpOworICAgIGNhc2UgV0NfVFlQRV9YRElHSVQ6IHJldHVybiBpc3hkaWdpdCh3Yyk7CisgICAgZGVmYXVsdDogcmV0dXJuIDA7CisgIH0KK30KKword2ludF90IGZnZXR3YyhGSUxFKiBzdHJlYW0pIHsKKyAgcmV0dXJuIHN0YXRpY19jYXN0PHdpbnRfdD4oZmdldGMoc3RyZWFtKSk7Cit9CisKK3djaGFyX3QqIGZnZXR3cyh3Y2hhcl90KiB3cywgaW50IG4sIEZJTEUqIHN0cmVhbSkgeworICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx3Y2hhcl90Kj4oZmdldHMocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4od3MpLCBuLCBzdHJlYW0pKTsKK30KKword2ludF90IGZwdXR3Yyh3Y2hhcl90IHdjLCBGSUxFKiBzdHJlYW0pIHsKKyAgcmV0dXJuIHN0YXRpY19jYXN0PHdpbnRfdD4oZnB1dGMoc3RhdGljX2Nhc3Q8Y2hhcj4od2MpLCBzdHJlYW0pKTsKK30KKworaW50IGZwdXR3cyhjb25zdCB3Y2hhcl90KiBzdHIsIEZJTEUqIHN0cmVhbSkgeworICByZXR1cm4gZnB1dHMocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oc3RyKSwgc3RyZWFtICk7Cit9CisKK2ludCBmd2lkZShGSUxFKiAvKnN0cmVhbSovLCBpbnQgbW9kZSkgeworICByZXR1cm4gbW9kZTsKK30KKword2ludF90IGdldHdjKEZJTEUqIHN0cmVhbSkgeworICByZXR1cm4gZ2V0YyhzdHJlYW0pOworfQorCit3aW50X3QgZ2V0d2NoYXIoKSB7CisgIHJldHVybiBnZXRjaGFyKCk7Cit9CisKK2ludCBtYnNpbml0KGNvbnN0IG1ic3RhdGVfdCogLypwcyovKSB7CisgIHJldHVybiAxOworfQorCitzaXplX3QgbWJybGVuKGNvbnN0IGNoYXIqIC8qcyovLCBzaXplX3QgbiwgbWJzdGF0ZV90KiAvKnBzKi8pIHsKKyAgcmV0dXJuIChuICE9IDApOworfQorCitzaXplX3QgbWJydG93Yyh3Y2hhcl90KiBwd2MsIGNvbnN0IGNoYXIqIHMsIHNpemVfdCBuLCBtYnN0YXRlX3QqIC8qcHMqLykgeworICBpZiAocyA9PSBOVUxMKSB7CisgICAgcyAgID0gIiI7CisgICAgcHdjID0gTlVMTDsKKyAgfQorICBpZiAobiA9PSAwKSB7CisgICAgaWYgKHB3YykgeworICAgICAgKnB3YyA9IDA7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisgIH0KKyAgaWYgKHB3YykgeworICAgICpwd2MgPSAqczsKKyAgfQorICByZXR1cm4gKCpzICE9IDApOworfQorCitzaXplX3QgbWJzcnRvd2NzKHdjaGFyX3QqIGRzdCwgY29uc3QgY2hhcioqIHNyYywgc2l6ZV90IGxlbiwgbWJzdGF0ZV90KiAvKnBzKi8pIHsKKyAgY29uc3QgY2hhciogcyAgPSAqc3JjOworICBjb25zdCBjaGFyKiBzMiA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KG1lbWNocihzLCAwLCBsZW4pKTsKKworICBpZiAoczIgIT0gTlVMTCkgeworICAgIGxlbiA9IChzaXplX3QpKHMyIC0gcykgKyAxVTsKKyAgfQorCisgIGlmIChkc3QpIHsKKyAgICBtZW1jcHkocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oZHN0KSwgcywgbGVuICk7CisgIH0KKworICAqc3JjID0gcyArIGxlbjsKKyAgcmV0dXJuIGxlbjsKK30KKworc2l6ZV90IG1ic3Rvd2NzKHdjaGFyX3QqIGRzdCwgY29uc3QgY2hhciogc3JjLCBzaXplX3QgbGVuKSB7CisgIHJldHVybiBtYnNydG93Y3MoZHN0LCAmc3JjLCBsZW4sIE5VTEwpOworfQorCit3aW50X3QgcHV0d2Mod2NoYXJfdCB3YywgRklMRSogc3RyZWFtKSB7CisgIHJldHVybiBmcHV0YyhzdGF0aWNfY2FzdDxjaGFyPih3YyksIHN0cmVhbSk7Cit9CisKK3dpbnRfdCBwdXR3Y2hhcih3Y2hhcl90IHdjKSB7CisgIHJldHVybiBwdXRjaGFyKHN0YXRpY19jYXN0PGNoYXI+KHdjKSk7Cit9CisKK3dpbnRfdCB0b3dsb3dlcih3aW50X3Qgd2MpIHsKKyAgcmV0dXJuIHRvbG93ZXIod2MpOworfQorCit3aW50X3QgdG93dXBwZXIod2ludF90IHdjKSB7CisgIHJldHVybiB0b3VwcGVyKHdjKTsKK30KKword2ludF90IHVuZ2V0d2Mod2ludF90IHdjLCBGSUxFKiBzdHJlYW0pIHsKKyAgcmV0dXJuIHVuZ2V0YyhzdGF0aWNfY2FzdDxjaGFyPih3YyksIHN0cmVhbSk7Cit9CisKK3NpemVfdCB3Y3J0b21iKGNoYXIqIHMsIHdjaGFyX3QgLyp3YyovLCBtYnN0YXRlX3QqIC8qcHMqLykgeworICBpZiAocyAhPSBOVUxMKSB7CisgICAgKnMgPSAxOworICB9CisgIHJldHVybiAxOworfQorCitzaXplX3Qgd2NzZnRpbWUod2NoYXJfdCogd2NzLCBzaXplX3QgbWF4c2l6ZSwgY29uc3Qgd2NoYXJfdCogZm9ybWF0LCAgY29uc3Qgc3RydWN0IHRtKiB0aW1wdHIpIHsKKyAgcmV0dXJuIHN0cmZ0aW1lKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHdjcyksIG1heHNpemUsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KGZvcm1hdCksIHRpbXB0cik7Cit9CisKK3NpemVfdCB3Y3NydG9tYnMoY2hhciogZHN0LCBjb25zdCB3Y2hhcl90Kiogc3JjLCBzaXplX3QgbGVuLCBtYnN0YXRlX3QqIC8qcHMqLykgeworICBjb25zdCBjaGFyKiBzID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oKnNyYyk7CisgIGNvbnN0IGNoYXIqIHMyID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4obWVtY2hyKHMsIDAsIGxlbikpOworICBpZiAoczIgIT0gTlVMTCkgeworICAgIGxlbiA9IChzMiAtIHMpKzE7CisgIH0KKyAgaWYgKGRzdCAhPSBOVUxMKSB7CisgICAgbWVtY3B5KCBkc3QsIHMsIGxlbiApOworICB9CisgICpzcmMgPSAod2NoYXJfdCopKHMgKyBsZW4pOworICByZXR1cm4gbGVuOworfQorCitzaXplX3Qgd2NzdG9tYnMoY2hhciogZHN0LCBjb25zdCB3Y2hhcl90KiBzcmMsIHNpemVfdCBsZW4pIHsKKyAgcmV0dXJuIHdjc3J0b21icyhkc3QsICZzcmMsIGxlbiwgTlVMTCk7Cit9CisKK2RvdWJsZSB3Y3N0b2QoY29uc3Qgd2NoYXJfdCogbnB0ciwgd2NoYXJfdCoqIGVuZHB0cikgeworICByZXR1cm4gc3RydG9kKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KG5wdHIpLCByZWludGVycHJldF9jYXN0PGNoYXIqKj4oZW5kcHRyKSk7Cit9CisKK2xvbmcgaW50IHdjc3RvbChjb25zdCB3Y2hhcl90KiBucHRyLCB3Y2hhcl90KiogZW5kcHRyLCBpbnQgYmFzZSkgeworICByZXR1cm4gc3RydG9sKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KG5wdHIpLCByZWludGVycHJldF9jYXN0PGNoYXIqKj4oZW5kcHRyKSwgYmFzZSk7Cit9CisKK3Vuc2lnbmVkIGxvbmcgaW50IHdjc3RvdWwoY29uc3Qgd2NoYXJfdCogbnB0ciwgd2NoYXJfdCoqIGVuZHB0ciwgaW50IGJhc2UpIHsKKyAgcmV0dXJuIHN0cnRvdWwocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4obnB0ciksIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcioqPihlbmRwdHIpLCBiYXNlKTsKK30KKword2NoYXJfdCogd2Nzd2NzKGNvbnN0IHdjaGFyX3QqIHdzMSwgY29uc3Qgd2NoYXJfdCogd3MyKSB7CisgIGNvbnN0IGNoYXIqIHMxID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4od3MxKTsKKyAgY29uc3QgY2hhciogczIgPSByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPih3czIpOworICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx3Y2hhcl90Kj4oc3Ryc3RyKHMxLCBzMikpOworfQorCitpbnQgd2N0b2Iod2ludF90IGMpIHsKKyAgcmV0dXJuIGM7Cit9CisKK3djdHlwZV90IHdjdHlwZShjb25zdCBjaGFyKiBwcm9wZXJ0eSkgeworICBzdGF0aWMgY29uc3QgY2hhciogY29uc3QgIHByb3BlcnRpZXNbV0NfVFlQRV9NQVhdID0geworICAgICI8aW52YWxpZD4iLAorICAgICJhbG51bSIsICJhbHBoYSIsICJibGFuayIsICJjbnRybCIsICJkaWdpdCIsICJncmFwaCIsCisgICAgImxvd2VyIiwgInByaW50IiwgInB1bmN0IiwgInNwYWNlIiwgInVwcGVyIiwgInhkaWdpdCIKKyAgfTsKKyAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBXQ19UWVBFX01BWDsgKytpKSB7CisgICAgaWYgKCFzdHJjbXAocHJvcGVydGllc1tpXSwgcHJvcGVydHkpKSB7CisgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8d2N0eXBlX3Q+KGkpOworICAgIH0KKyAgfQorICByZXR1cm4gc3RhdGljX2Nhc3Q8d2N0eXBlX3Q+KDApOworfQorCitpbnQgd2N3aWR0aCh3Y2hhcl90IHdjKSB7CisgIHJldHVybiAod2MgPiAwKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvd2NoYXIvd2NzY29sbC5jIGIvbGliYy9iaW9uaWMvd2NzY29sbC5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBsaWJjL3djaGFyL3djc2NvbGwuYwpyZW5hbWUgdG8gbGliYy9iaW9uaWMvd2NzY29sbC5jCmRpZmYgLS1naXQgYS9saWJjL2RvY3MvQ0hBTkdFUy5UWFQgYi9saWJjL2RvY3MvQ0hBTkdFUy5UWFQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk4YjdmY2YuLjAwMDAwMDAKLS0tIGEvbGliYy9kb2NzL0NIQU5HRVMuVFhUCisrKyAvZGV2L251bGwKQEAgLTEsMjc3ICswLDAgQEAKLUJpb25pYyBDaGFuZ2VMb2c6Ci0tLS0tLS0tLS0tLS0tLS0tLQotCi1EaWZmZXJlbmNlcyBiZXR3ZWVuIGN1cnJlbnQgYW5kIEFuZHJvaWQgMi4zOgotCi0tIDxhbmRyb2lkL2FwaS1sZXZlbC5oPjogQWRkZWQgbmV3IGhlYWRlciB0byBkZWZpbmUgX19BTkRST0lEX0FQSV9fIHRvCi0gIGEgY29uc3RhbnQgaW50ZWdlciBjb3JyZXNwb25kaW5nIHRvIHRoZSBuYXRpdmUgQVBJIGxldmVsLiBUaGlzIGhlYWRlcgotICBhbHNvIGV4aXN0cyBpbiB0aGUgTkRLJ3MgcGxhdGZvcm0gaGVhZGVycy4KLQotLSA8c3lzL2NkZWZzLmg+OiBJbmNsdWRlIDxhbmRyb2lkL2FwaS1sZXZlbC5oPgotCi0tIDx0aW1lLmg+OiBBZGQgdGltZWdtKCksIHRpbWVsb2NhbCgpLCB0aW1lMnBvc2l4KCkgYW5kIHBvc2l4MnRpbWUoKQotCi0tIDxzY2hlZC5oPjogQWRkIHNjaGVkX2dldGNwdSgpLCBzY2hlZF9nZXRhZmZpbml0eSgpLCBzY2hlZF9zZXRhZmZpbml0eSgpLAotICBjcHVfc2V0X3QgYW5kIHJlbGF0ZWQgbWFjcm9zIChlLmcuIENQVV9TRVRTSVpFLCBDUFVfWkVSTywgQ1BVX1NFVCwgLi4uKQotCi0tIDx1bmlzdGQuaD46IEFkZCBmdHJ1bmNhdGU2NCgpLgotCi0tIDxzaWduYWwuaD46IENoYW5nZWQgdGhlIGRlZmluaXRpb24gb2YgU0lHUlRNQVggdG8gNjQuIEhvd2V2ZXIsIG5vdGUgdGhhdAotICBzaWdzZXRfdCBpcyBvbmx5IDMyLWJpdCBhbmQgY2Fubm90IGRlYWwgd2l0aCByZWFsLXRpbWUgc2lnbmFscy4KLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotRGlmZmVyZW5jZXMgYmV0d2VlbiBBbmRyb2lkIDIuMyBhbmQgQW5kcm9pZCAyLjI6Ci0KLS0gPHB0aHJlYWQuaD46IEFkZCByZWFkZXIvd3JpdGVyIGxvY2tzIGltcGxlbWVudGF0aW9uLiBBZGQgc2FuaXR5Ci0gIGNoZWNraW5nIHRvIHB0aHJlYWRfbXV0ZXhfZGVzdHJveSgpIChlLmcuIGEgbG9ja2VkIG11dGV4IHdpbGwgcmV0dXJuCi0gIEVCVVNZKS4KLQotLSA8c2VtYXBob3JlLmg+OiBVc2UgcHJpdmF0ZSBmdXRleGVzIGZvciBzZW1hcGhvcmUgaW1wbGVtZW50YXRpb24sCi0gIHVubGVzcyB5b3VyIHNldCAncHNoYXJlZCcgdG8gbm9uLTAgd2hlbiBjYWxsaW5nIHNlbV9pbml0KCkuCi0KLSAgQWxzbyBmaXhlZCBhIGJ1ZyBpbiBzZW1fcG9zdCgpIHRvIG1ha2UgaXQgd2FrZSB1cCBhbGwgd2FpdGluZwotICB0aHJlYWRzLCBpbnN0ZWFkIG9mIG9uZS4gQXMgYSBjb25zZXF1ZW5jZSwgdGhlIG1heGltdW0gc2VtYXBob3JlCi0gIHZhbHVlIGlzIG5vdyByZWR1Y2VkIHRvIDB4M2ZmZmZmZmYuCi0KLS0gPG1hdGguaD46IEFkZGVkIHNpbmNvcygpLCBzaW5jb3NmKCkgYW5kIHNpbmNvc2woKSAoR0xpYmMgY29tcGF0aWJpbGl0eSkuCi0KLS0gPHN5cy9zeXNpbmZvLmg+OiBBZGRlZCBtaXNzaW5nIHN5c2luZm8oKSBzeXN0ZW0gY2FsbCBpbXBsZW1lbnRhdGlvbgotICAodGhlIGZ1bmN0aW9uIHdhcyBhbHJlYWR5IGRlY2xhcmVkIGluIHRoZSBoZWFkZXIgdGhvdWdoKS4KLQotLSBzeXNjb25mKCkgZGlkbid0IHdvcmsgZm9yIHNvbWUgYXJndW1lbnRzIGR1ZSB0byBhIHNtYWxsIGJ1ZyBpbiB0aGUKLSAgL3Byb2MgbGluZSBwYXJzZXIuCi0KLS0gPHRlcm1pby5oPjogYWRkZWQgbWlzc2luZyBoZWFkZXIgKGp1c3QgaW5jbHVkZXMgPHRlcm1pb3MuaD4pCi0KLS0gPHVuaXN0ZC5oPjogYWRkIG1pc3NpbmcgZGVjbGFyYXRpb24gZm9yIHRydW5jYXRlKCkuIFRoZSBpbXBsZW1lbnRhdGlvbgotICB3YXMgYWxyZWFkeSBoZXJlIHNpbmNlIEFuZHJvaWQgMS41LgotCi0gIG1vZGlmeSBpbXBsZW1lbnRhdGlvbiBvZiBhbGFybSgpIHRvIHJldHVybiAwIGluIGNhc2Ugb2YgZXJyb3IgKGkuZS4KLSAgaWYgYSB2YWx1ZSBsYXJnZXIgdGhhbiAweDdmZmZmZmZmIHNlY29uZHMgaXMgcGFzc2VkIHRvIGl0KS4gVGhpcwotICBtYWtlcyB0aGUgaW1wbGVtZW50YXRpb24gY29tcGxpYW50IHdpdGggdGhlIEdMaWJjIGJlaGF2aW91ci4KLQotLSA8d2NoYXIuaD46IHNtYWxsIGZpeGVzIHRvIHJlYWxseSBzdXBwb3J0IHdjaGFyX3QgaW4gQmlvbmljIChub3QgdGhlcmUgeWV0KS4KLQotICAgICB0aGUgc2l6ZSBvZiB3Y2hhcl90IGlzIHN0aWxsIDMyLWJpdCAoZGVjaWRlZCBieSB0aGUgY29tcGlsZXIpCi0KLSAgICAgV0NIQVJfTUlOOiBjaGFuZ2VkIGZyb20gMCB0byBJTlRfTUlOCi0gICAgIFdDSEFSX01BWDogY2hhbmdlZCBmcm9tIDI1NSB0byBJTlRfTUFYCi0KLSAgICAgd2NwY3B5KCksIHdjcG5jcHkoKSwgd2NzY2F0KCksIHdjc2NocigpLCB3Y3NjbXAoKSwKLSAgICAgd2NzY3B5KCksIHdjc2NzcG4oKSwgd2NzZHVwKCksIHdjc2xjYXQoKSwgd2NzbGNweSgpLAotICAgICB3Y3NsZW4oKSwgd2NzbmNhdCgpLCB3Y3NuY21wKCksIHdjc25jcHkoKSwgd2NzbmxlbigpLAotICAgICB3Y3NwYnJrKCksIHdjc3JjaHIoKSwgd2NzcmNocigpLCB3Y3NzcG4oKSwgd2Nzc3RyKCksCi0gICAgIHdjc3RvaygpLCB3Y3N3aWR0aCgpLCB3bWVtY2hyKCksIHdtZW1jbXAoKSwgd21lbWNweSgpLAotICAgICB3bWVtbW92ZSgpLCB3bWVtc2V0KCk6IEFkZGVkIHByb3BlciBpbXBsZW1lbnRhdGlvbnMuCi0KLSAgICAgd2NzY2FzZWNtcCgpLCB3Y3NuY2FzZWNtcCgpOiBBZGRlZCBpbXBsZW1lbnRhdGlvbiBsaW1pdGVkCi0gICAgIHRvIEFTQ0lJIGNvZGVzIGZvciBsb3dlci91cHBlci4KLQotICAgICB3Y3Njb2xsKCk6IGFkZGVkIGR1bW15IGltcGxlbWVudGF0aW9uIHRoYXQgY2FsbHMgd2NzY21wKCkKLSAgICAgd2NzeGZybSgpOiBhZGRlZCBkdW1teSBpbXBsZW1lbnRhdGlvbiB0aGF0IGNhbGxzIHdjc25jcHkoKQotCi0gIE5PVEU6IFRlY2huaWNhbGx5LCB0aGlzIGJyZWFrcyB0aGUgQUJJLCBidXQgd2UgbmV2ZXIgY2xhaW1lZCB0byBzdXBwb3J0Ci0gICAgICAgIHdjaGFyX3QgYW55d2F5LiBUaGUgd2NoYXJfdCBzdXBwb3J0IGlzIHN0aWxsICpOT1QqIG9mZmljaWFsIGF0IHRoaXMKLSAgICAgICAgcG9pbnQuIFdlIG5lZWQgYmV0dGVyIG11bHRpLWJ5dGUgc3VwcG9ydCBjb2RlLCBhbmQgd3ByaW50Zi93c2NhbmYKLSAgICAgICAgc3R1ZmYgdG9vLgotCi0tIDxpbnR0eXBlcy5oPjogYWRkIG1pc3NpbmcgZGVjbGFyYXRpb25zIGZvciBzdHJudG9pbWF4IGFiZCBzdHJudG91bWF4LgotCi0tIDxzdGRsaWIuaD46IGFkZCBtaXNzaW5nIGRlY2xhcmF0aW9ucyBmb3IgZHJhbmQ0OCgpIGFuZCBlcmFuZDQ4KCkuCi0KLS0gY2xlYXJlcnIoKTogZml4IGJyb2tlbiBpbXBsZW1lbnRhdGlvbi4KLQotLSBGZWF0dXJlIHRlc3QgbWFjcm9zIGxpa2UgX1BPU0lYX0NfU09VUkNFIC8gX1hPUEVOX1NPVVJDRSAvIF9DOTlfU09VUkNFCi0gIGFyZSBub3cgaGFuZGxlZCBjb3JyZWN0bHkgYnkgb3VyIEMgbGlicmFyeSBoZWFkZXJzIChzZWUgPHN5cy9jZGVmcy5oPikKLQotLSA8c3lzL3NlbGVjdC5oPjogYWRkIG1pc3NpbmcgZGVjbGFyYXRpb24gZm9yIHBzZWxlY3QoKQotCi0tIDxzeXMvdmZzLmg+OiBmaXhlZCBpbXBsZW1lbnRhdGlvbiBvZiBmc3RhdGZzKCkgKGFsc28gZml4ZXMgZnBhdGhjb25mKCkKLSAgd2hpY2ggdXNlcyBpdCkuCi0KLS0gQWRkZWQgYW4gaW1wbGVtZW50YXRpb24gb2YgcHRocmVhZF9hdGZvcmsoKQotCi0tIDxkbGZjbi5oPjogZml4ZWQgZGxvcGVuKCkgaW1wbGVtZW50YXRpb24gdG8gc3VwcG9ydCBkbG9wZW4oTlVMTCwgLi4uKS4KLSAgVGhpcyBhbGxvd3Mgb25lIHRvIGxvb2sgYXQgdGhlIGR5bmFtaWMgc3ltYm9scyBleHBvcnRlZCBieSBhbiBleGVjdXRhYmxlLgotCi0tIDxwcml2YXRlL2Jpb25pY190bHMuaD46IHVzZSBrZXJuZWwgaGVscGVyIGZ1bmN0aW9ucyBmb3Igc3RhdGljIHZlcnNpb25zCi0gIG9mIHRoZSBDIGxpYnJhcnkuIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2Ugd2UgZG9uJ3Qga25vdyB3aGVyZSB0aGUgY29ycmVzcG9uZGluZwotICBtYWNoaW5lIGNvZGUgaXMgZ29pbmcgdG8gcnVuLCBhbmQgdGhlIG9wdGltaXphdGlvbiBmb3IgX19nZXRfdGxzKCkgbWlnaHQKLSAgbm90IG1hdGNoIHRoZSBmZWF0dXJlcyBvZiB0aGUgdGFyZ2V0IGRldmljZSB3aGVyZSB3ZSBydW4gYSBzdGF0aWMgZXhlY3V0YWJsZQotICBsaW5rZWQgdG8gdGhlIEMgbGlicmFyeS4gVGhpcyBmaXhlcyBvbmUgb2YgdGhlIGJ1ZyB0aGF0IGV4cGxhaW5zIHdoeSBnZGJzZXJ2ZXIKLSAgZGlkbid0IHdvcmsgd2VsbCB3aXRoIHRocmVhZHMuCi0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLURpZmZlcmVuY2VzIGJldHdlZW4gQW5kcm9pZCAyLjIuIGFuZCBBbmRyb2lkIDIuMToKLQotLSBTdXBwb3J0IEZQIHJlZ2lzdGVyIHNhdmUvbG9hZCBpbiBzZXRqbXAoKS9sb25nam1wKCkgb24gQVJNdjcgYnVpbGRzLgotCi0tIEFkZCBzdXBwb3J0IGZvciBTSC00IENQVSBhcmNoaXRlY3R1cmUgIQotCi0tIF9fYXRvbWljX3N3YXAoKTogdXNlIExEUkVYL1NUUkVYIENQVSBpbnN0cnVjdGlvbnMgb24gQVJNdjYgYW5kIGhpZ2hlci4KLQotLSA8YXJwYS90ZWxuZXQuaD46IE5ldyBoZWFkZXIgKGRlY2xhcmF0aW9ucyBvbmx5LCBubyBpbXBsZW1lbnRhdGlvbikuCi0KLS0gPGVyci5oPjogTmV3IGhlYWRlciArIGltcGxlbWVudGF0aW9uLiBHTGliYyBjb21wYXRpYmlsaXR5LgotCi0tIDx3YXJuLmg+OiBOZXcgaGVhZGVyICsgaW1wbGVtZW50YXRpb24uIEdMaWJjIGNvbXBhdGliaWxpdHkuCi0KLS0gPGZ0cy5oPjogTmV3IGhlYWRlciArIGltcGxlbWVudGF0aW9uLgotCi0tIDxtbnRlbnQuaD46IEFkZCBtaXNzaW5nIDxzdGRpby5oPiBpbmNsdWRlLgotCi0tIDxyZWdleC5oPjogTmV3IGhlYWRlciArIGltcGxlbWVudGF0aW9uLgotCi0tIDxzaWduYWwuaD46IEFkZGVkIGtpbGxwZygpCi0KLS0gPHN0ZGludC5oPjogQWxsb3cgNjQtYml0IHR5cGUgZGVjbGFyYXRpb25zIG9uIEM5OSBidWlsZHMuCi0KLS0gPHN0ZGlvLmg+OiBBZGQgZmRwcmludGYoKSBhbmQgdmZkcHJpbnRmKCkuIE5vdGUgdGhhdCBHTGliYyBwcm92aWRlcwotICB0aGUgY29uZnVzaW5nICdkcHJpbnRmJyBhbmQgJ3ZkcHJpbnRmKCknIGZ1bmN0aW9ucyBpbnN0ZWFkLgotCi0tIDxzdGRsaWIuaD46IEZpeCBwdHNuYW1lX3IoKTogdGhlIHJldHVybiB0eXBlIGlzIGludCBpbnN0ZWFkIG9mIGNoYXIqLgotICBUaGUgbWlzdGFrZSBjb21lcyBmcm9tIGEgR0xpYmMgbWFuIHBhZ2UgYnVnICh0aGUgbWFuIHBhZ2UgbGlzdGVkIGEgcmV0dXJuCi0gIHR5cGUgb2YgY2hhciosIHdoaWxlIHRoZSBpbXBsZW1lbnRhdGlvbiB1c2VkIGludC4gRml4ZWQgaW4gbGF0ZSAyMDA5IG9ubHkpLgotICBUaGUgQmlvbmljIGltcGxlbWVudGF0aW9uIHdhcyBpbmNvcnJlY3QuIFRlY2huaWNhbGx5LCB0aGlzIGlzIGFuIEFCSQotICBicmVha2FnZSwgYnV0IGNvZGUgdGhhdCB1c2VkIHRoaXMgZnVuY3Rpb24gcHJvYmFibHkgbmV2ZXIgd29ya2VkIG9yCi0gIGNvbXBpbGVkIHByb3Blcmx5IGFueXdheS4KLQotLSA8c3RyaW5ncy5oPjogQWRkIG1pc3NpbmcgPHN5cy90eXBlcy5oPiBpbmNsdWRlLgotCi0tIDxzeXMvcXVldWUuaD46IEFkZGVkIG5ldyBoZWFkZXIgKG5vIGltcGxlbWVudGF0aW9uIC0gbWFjcm8gdGVtcGxhdGVzKS4KLQotLSA8c3lzL3Jlc291cmNlLmg+OiBBZGQgcmxpbV90IHByb3BlciBkZWZpbml0aW9uLgotCi0tIDx0aW1lNjQuaD46IEFkZCBtaXNzaW5nIEMrKyBoZWFkZXIgaW5jbHVzaW9uIGd1YXJkcy4KLQotLSA8dW5pc3RkLmg+OiBBZGQgZ2V0dXNlcnNoZWxsKCksIHNldHVzZXJzaGVsbCgpIGFuZCBlbmR1c2Vyc2hlbGwoKSwgdGhvdWdoCi0gIGltcGxlbWVudGF0aW9uIGFyZSBib2d1cy4gR0xpYmMgY29tcGF0aWJpbGl0eS4KLQotLSA8d2NoYXIuaD46IEFkZCBtYnN0b3djcygpIGFuZCB3Y3N0b21icygpCi0KLS0gYWRkIGNsb25lKCkgaW1wbGVtZW50YXRpb24gZm9yIEFSTSAoeDg2IGFuZCBTSC00IG5vdCB3b3JraW5nIHlldCkuCi0KLS0gPHN5cy9lcG9sbC5oPjogPHN5cy9zeXN0ZW1fcHJvcGVydGllcy5oPjogQWRkIG1pc3NpbmcgQysrIGluY2x1c2lvbiBndWFyZHMKLQotLSBmaXggZ2V0cHduYW0oKSBhbmQgZ2V0cHdncnAoKSB0byBhY2NlcHQgImFwcF8wIiBhcyBhIHZhbGlkIHVzZXIgbmFtZS4KLQotLSBmaXggc2VtX3RyeXdhaXQoKSB0byByZXR1cm4gLTEgYW5kIHNldCBlcnJubyB0byBFQUdBSU4sIGluc3RlYWQgb2YKLSAgcmV0dXJuaW5nIEVBR0FJTiBkaXJlY3RseS4KLQotLSBmaXggc2VtX3Bvc3QoKSB0byB3YWtlIHVwIG11bHRpcGxlIHRocmVhZHMgd2hlbiBjYWxsZWQgcmFwaWRseSBpbgotICBzdWNjZXNzaW9uLgotCi0tIEROUzogcGFydGlhbCBpbXBsZW1lbnRhdGlvbiBvZiBSRkMzNDg0IChydWxlIDEsIDIsIDUsIDYsIDgsIDEwIGFuZAotICBtb2RpZmllZCBydWxlIDkpLCBmb3IgYmV0dGVyIGFkZHJlc3Mgc2VsZWN0aW9uL3NvcnRpbmcuCi0gIEluIHRoZSBwcm9jZXNzLCByZW1vdmVkIGNvZGUgdGhhdCB3YXMgcHJldmlvdXNseSB1c2VkIGZvciAic29ydGxpc3QiCi0gIGluIC9ldGMvcmVzb2x2LmNvbmYuIChyZXNvbHYuY29uZiBpcyBhbHJlYWR5IGlnbm9yZWQsIHNvIHRoZSBsYXR0ZXIKLSAgaXMgYSBuby1vcCBmb3IgYWN0dWFsIGZ1bmN0aW9uYWxpdHkuKQotCi0tIGZpeCBwdGhyZWFkX3NpZ21hc2soKSB0byBwcm9wZXJseSByZXR1cm4gYW4gZXJyb3IgY29kZSB3aXRob3V0IHRvdWNoaW5nCi0gIGVycm5vLiBQcmV2aW91cyBpbXBsZW1lbnRhdGlvbiByZXR1cm5lZCAtMSBvbiBlcnJvciwgc2V0dGluZyBlcnJubywgd2hpY2gKLSAgaXMgbm90IFBvc2l4IGNvbXBsaWFudC4KLQotLSBhZGQgc2lnYWx0c3RhY2soKSBpbXBsZW1lbnRhdGlvbiBmb3IgQVJNLgotCi0tIDx0aW1lLmg+OiBQcm9wZXJseSBpbXBsZW1lbnQgdGhlICd0aW1lem9uZScgYW5kICdkYXlsaWdodCcgZ2xvYmFsIHZhcmlhYmxlcwotICAodGhleSB3ZXJlIG5vdCBkZWZpbmVkIHByZXZpb3VzbHksIHRob3VnaCBkZWNsYXJlZCBpbiB0aGUgaGVhZGVyKS4KLQotLSA8dGltZS5oPjogRml4IHRpbWV6b25lIG1hbmFnZW1lbnQgaW1wbGVtZW50YXRpb24gdG8gcHJvcGVybHkgdXBkYXRlCi0gICd0bV9nbXRvZmYnIGZpZWxkIGluICdzdHJ1Y3QgdG0nIHN0cnVjdHVyZS4KLQotLSBETlM6IGdldCByaWQgb2Ygc3B1cmlvdXMgcmFuZG9tIEROUyBxdWVyaWVzIHdoZW4gdHJ5aW5nIHRvIHJlc29sdmUKLSAgYW4gdW5rbm93biBkb21haW4gbmFtZS4gRHVlIHRvIGFuIGluaXRpYWxpemF0aW9uIGJ1ZywgYSByYW5kb20gRE5TIHNlYXJjaAotICBsaXN0IHdhcyBnZW5lcmF0ZWQgZm9yIGVhY2ggdGhyZWFkIGlmIG5ldC5kbnMuc2VhcmNoIGlzIG5vdCBkZWZpbmVkLgotCi0tIDxwdGhyZWFkLmg+OiBBZGQgcHRocmVhZF9jb25kYXR0cl9pbml0L2Rlc3Ryb3kvc2V0cHNoYXJlZC9nZXRwc2hhcmVkIGZ1bmN0aW9ucwotICB0byBlbmFibGUgcHJvcGVyIHNoYXJlZCBjb25kaXRpb25hbCB2YXJpYWJsZSBpbml0aWFsaXphdGlvbi4KLQotICBNb2RpZnkgdGhlIHB0aHJlYWRfbXV0ZXhfdCBhbmQgcHRocmVhZF9jb25kX3QgaW1wbGVtZW50YXRpb24gdG8gdXNlIHByaXZhdGUKLSAgZnV0ZXhlcyBmb3IgcGVyZm9ybWFuY2UgcmVhc29ucy4gTXV0ZXhlcyBhbmQgQ29uZHZhcnMgYXJlIG5vIGxvbmdlciBzaGFyZWFibGUKLSAgYmV0d2VlbiBwcm9jZXNzZXMgYnkgZGVmYXVsdCBhbnltb3JlLCB1bmxlc3MgeW91IHVzZSBQVEhSRUFEX1BST0NFU1NfU0hBUkVECi0gIHdpdGggcHRocmVhZF9tdXRleGF0dHJfc2V0cHNoYXJlZCgpIGFuZC9vciBwdGhyZWFkX2NvbmRhdHRyX3NldHBzaGFyZWQoKS4KLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotRGlmZmVyZW5jZXMgYmV0d2VlbiBBbmRyb2lkIDIuMSBhbmQgMi4wLjE6Ci0KLS0gem9uZWluZm86IHVwZGF0ZWQgZGF0YSB0YWJsZXMgdG8gdmVyc2lvbiAyMDA5cwotCi0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLURpZmZlcmVuY2VzIGJldHdlZW4gQW5kcm9pZCAyLjAuMSBhbmQgMi4wOgotCi0tIGFib3J0KCk6IEFSTS1zcGVjaWZpYyBoYWNrIHRvIHByZXNlcnZlIHRoZSAnbHInIHJlZ2lzdGVyIHdoZW4gYWJvcnQoKQotICBpcyBjYWxsZWQgKEdDQyBkb2VzIG5vdCBwcmVzZXJ2ZSBpdCBieSBkZWZhdWx0IHNpbmNlIGl0IHRoaW5rcyB0aGF0Ci0gIGFib3J0KCkgbmV2ZXIgcmV0dXJucykuIFRoaXMgaW1wcm92ZXMgc3RhY2sgdHJhY2VzIGNvbnNpZGVyYWJseS4KLQotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1EaWZmZXJlbmNlcyBiZXR3ZWVuIEFuZHJvaWQgMi4wIGFuZCAxLjY6Ci0KLS0gbWVtY21wKCksIG1lbWNweSgpOiBBUk12NyBvcHRpbWl6ZWQgdmVyc2lvbnMuCi0KLS0gcHRocmVhZF9tdXRleGF0dHJfc2V0cHNoYXJlZCgpOiBpbXBsZW1lbnRhdGlvbiB3aWxsIG5vdCByZXR1cm4gRU5PVFNVUAotICBpZiBQVEhSRUFEX1BST0NFU1NfU0hBUkVEIGlzIHVzZWQsIGJlY2F1c2Ugb3VyIE11dGV4IGltcGxlbWVudGF0aW9uIGNhbgotICB3b3JrIGFjcm9zcyBtdWx0aXBsZSBwcm9jZXNzZXMuCi0KLSAgKkhPV0VWRVIqIGl0IGRvZXMgbm90IHVzZSAicm9idXN0IGZ1dGV4ZXMiIHdoaWNoIG1lYW5zIHRoYXQgaGVsZCBtdXRleGVzCi0gICphcmUgbm90KiBhdXRvbWF0aWNhbGx5IHJlbGVhc2VkIGJ5IHRoZSBrZXJuZWwgd2hlbiB0aGUgb3duZXIgcHJvY2VzcwotICBjcmFzaGVzIG9yIGV4aXRzLiBUaGlzIGlzIG9ubHkgZG9uZSB0byBzaW1wbGlmeSBjb21tdW5pY2F0aW9uIGJldHdlZW4KLSAgdHdvIGFsd2F5cy1saXZlIHN5c3RlbSBwcm9jZXNzZXMsIERPIE5PVCBVU0UgVEhJUyBJTiBBUFBMSUNBVElPTlMgIQotCi0tIHB0aHJlYWRfbXV0ZXhfbG9ja190aW1lb3V0X25wKCk6IE5ldyBBbmRyb2lkLXNwZWNpZmljIGZ1bmN0aW9uIHRvCi0gIHBlcmZvcm0gYSB0aW1lZCBsb2NrICgpLiBJbiBjYXNlIG9mIHRpbWVvdXQsIGl0IHJldHVybnMgRUJVU1kuCi0KLS0gcHRocmVhZF9jb25kX3RpbWVkd2FpdF9tb25vdG9uaWNfbnAoKTogU2FtZSBhcyBwdGhyZWFkX2NvbmRfdGltZWR3YWl0KCkKLSAgYnV0IHVzZXMgdGhlIG1vbm90b25pYyBjbG9jaygpLiBBbmRyb2lkLXNwZWNpZmljLgotCi0tIHB0aHJlYWRfY29uZF90aW1lZHdhaXRfcmVsYXRpdmVfbnAoKTogU2FtZSBhcyBwdGhyZWFkX2NvbmRfdGltZWR3YWl0KCkKLSAgYnV0IHVzZXMgYSByZWxhdGl2ZSB0aW1lb3V0IGluc3RlYWQuIEFuZHJvaWQtc3BlY2lmaWMuCi0KLS0gPG5ldGluZXQvaW4uaD46IE5vdyBpbmNsdWRlcyA8bmV0aW5ldC9pbjYuaD4uCi0KLS0gPG5ldGluZXQvaW42Lmg+OiBBZGRlZCBJUFY2X0pPSU5fR1JPVVAsIElQVjZfTEVBVkVfR1JPVVAsIElONkFERFJfQU5ZX0lOSVQKLSAgYW5kIGlwdjZtcl9pbnRlcmZhY2UgZGVmaW5pdGlvbnMuCi0KLS0gPHRpbWUuaD46Ci0gICAgKiBBZGQgbWlzc2luZyB0enNldCgpIGRlY2xhcmF0aW9uLgotICAgICogQWRkIEFuZHJvaWQtc3BlY2lmaWMgc3RyZnRpbWVfdHooKS4KLQotLSBnZXRhZGRyaW5mbygpOgotICAgIE9ubHkgcGVyZm9ybSBJUHY2IGxvb2t1cCBmb3IgQUZfVU5TUEVDIGlmIHdlIGhhdmUgSVB2NiBjb25uZWN0aXZpdHkuCi0gICAgVGhpcyBzYXZlcyBvbmUgRE5TIHF1ZXJ5IHBlciBsb29rdXAgb24gbm9uLUlQdjYgc3lzdGVtcy4KLQotLSBta3RpbWUoKTogRml4IGFuIGluZmluaXRlIGxvb3AgcHJvYmxlbiB0aGF0IGFwcGVhcmVkIHdoZW4gc3dpdGNoaW5nIHRvCi0gIEdDQyA0LjQuMC4KLQotLSBzdHJmdGltZSgpOiBmaXggaW5jb3JyZWN0IGhhbmRsaW5nIG9mIGRhdGVzID4gMjAzOCBkdWUgdG8gNjQtYml0IGlzc3VlCi0gIGluIG9yaWdpbmFsIGNvZGUuCi0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLURpZmZlcmVuY2VzIGJldHdlZW4gQW5kcm9pZCAxLjYgYW5kIDEuNToKLQotLSBDIHJ1bnRpbWU6IEZpeCBydW50aW1lIGluaXRpYWxpemF0aW9uIHRvIGJlIGNhbGxlZCBiZWZvcmUgYW55IHN0YXRpYyBDKysKLSAgY29uc3RydWN0b3JzLiBUaGlzIGFsbG93cyB0aGVzZSB0byB1c2UgcHRocmVhZCBmdW5jdGlvbnMgcHJvcGVybHkuCi0KLS0gX19hZWFiaV9hdGV4aXQoKTogRml4IGltcGxlbWVudGF0aW9uIHRvIHByb3Blcmx5IGNhbGwgQysrIHN0YXRpYyBkZXN0cnVjdG9ycwotICB3aGVuIHRoZSBwcm9ncmFtIGV4aXRzIChvciB3aGVuIGEgc2hhcmVkIGxpYnJhcnkgaXMgdW5sb2FkZWQpLgotCi0tIDxzeXMvc3RhdC5oPjogYWRkZWQgR0xpYmMgY29tcGF0aWJpbGl0eSBtYWNyb3MgZGVmaW5pdGlvbnM6Ci0KLSAgICAgICAgI2RlZmluZSAgc3RfYXRpbWVuc2VjICBzdF9hdGltZV9uc2VjCi0gICAgICAgICNkZWZpbmUgIHN0X210aW1lbnNlYyAgc3RfbXRpbWVfbnNlYwotICAgICAgICAjZGVmaW5lICBzdF9jdGltZW5zZWMgIHN0X2N0aW1lX25zZWMKLQotLSBnZXRhZGRyaW5mbygpOiBpbXBsZW1lbnRhdGlvbiB3aWxsIG5vdyBhbGxvdyBudW1lcmljIHBvcnRzIGlmIGFpX3NvY2t0eXBlIGlzCi0gIHNldCB0byBBTlkuIFRoaXMgaXMgdG8gbWF0Y2ggdGhlIEdMaWJjIGJlaGF2aW91ci4KLQotLSBnZXRzZXJ2ZW50KCk6IGFuZCBnZXRzZXJ2ZW50X3IoKSBpbmNvcnJlY3RseSByZXR1cm5lZCB0aGUgcG9ydCBpbiBob3N0LWVuZGlhbgotICBvcmRlciBpbiB0aGUgc19wb3J0IGZpZWxkLiBJdCBub3cgcmV0dXJucyBpdCBpbiBiaWctZW5kaWFuIG9yZGVyLgotCi0tIEROUzogQWxsb3cgdW5kZXJzY29yZSBpbiB0aGUgbWlkZGxlIG9mIEROUyBsYWJlbHMuIFdoaWxlIG5vdCByZWFsbHkKLSAgc3RhbmRhcmQsIHRoaXMgZXh0ZW5zaW9uIGlzIG5lZWRlZCBmb3Igc29tZSBWUE4gY29uZmlndXJhdGlvbnMgYW5kIGlzCi0gIHN1cHBvcnRlZCBieSBvdGhlciBvcGVyYXRpbmcgc3lzdGVtcy4KLQotLSBETlM6IFN1cHBvcnQgZm9yIEROUyBkb21haW4gc2VhcmNoIGxpc3RzIHRocm91Z2ggdGhlIG5ldyBuZXQuZG5zLnNlYXJjaAotICBzeXN0ZW0gcHJvcGVydHkuIFRoZSBjb3JyZXNwb25kaW5nIHZhbHVlIG11c3QgYmUgYSBzcGFjZS1zZXBhcmF0ZWQgbGlzdCBvZgotICBkb21haW4gc3VmZml4ZXMuCmRpZmYgLS1naXQgYS9saWJjL2RvY3MvSVNTVUVTLlRYVCBiL2xpYmMvZG9jcy9JU1NVRVMuVFhUCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNTNlYjE2Li4wMDAwMDAwCi0tLSBhL2xpYmMvZG9jcy9JU1NVRVMuVFhUCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotQmlvbmljIEMgTGlicmFyeSBJc3N1ZXM6Ci09PT09PT09PT09PT09PT09PT09PT09PT0KLQotVGhpcyBkb2N1bWVudCBsaXN0cyBpbXBvcnRhbnQga25vd24gaXNzdWVzIG9mIHZhcmlvdXMgcmVsZWFzZXMKLW9mIHRoZSBCaW9uaWMgQyBsaWJyYXJ5LiBOb3RlIHRoYXQgdGhlc2UgZGlmZmVyIGZyb20gc3BlY2lmaWMKLWltcGxlbWVudGF0aW9uIGNob2ljZXMgdGhhdCBhcmUgZG9jdW1lbnRlZCBpbiB0aGUgT1ZFUlZJRVcuVFhUCi1kb2N1bWVudC4KLQotQ3VycmVudGx5IGtub3duIGlzc3VlczoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS0gVGhlIEMgbGlicmFyeSBpbml0aWFsaXphdGlvbiB3aWxsIGltcHJvcGVybHkgcnVuIHN0YXRpYyBDKysKLSAgY29uc3RydWN0b3JzIGxvY2F0ZWQgaW4gc2hhcmVkIGxpYnJhcmllcyB0d2ljZS4KLQotQW5kcm9pZC0xLjUgaXNzdWVzOgotLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0tIGdldHNlcnZieW5hbWUoKSByZXR1cm5lZCB0aGUgcG9ydCBudW1iZXIgaW4gdGhlIHNfcG9ydCBmaWVsZCBvZgotICB0aGUgJ3N0cnVjdCBzZXJ2ZW50JyBzdHJ1Y3R1cmUgaW4gaG9zdC1ieXRlLW9yZGVyLCBpbnN0ZWFkIG9mCi0gIG5ldHdvcmstYnl0ZS1vcmRlci4KZGlmZiAtLWdpdCBhL2xpYmMvZG9jcy9PVkVSVklFVy5UWFQgYi9saWJjL2RvY3MvT1ZFUlZJRVcuVFhUCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NTNlNDhhLi4wMDAwMDAwCi0tLSBhL2xpYmMvZG9jcy9PVkVSVklFVy5UWFQKKysrIC9kZXYvbnVsbApAQCAtMSw0MDAgKzAsMCBAQAotQmlvbmljIEMgTGlicmFyeSBPdmVydmlldzoKLT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLUludHJvZHVjdGlvbjoKLQotQ29yZSBQaGlsb3NvcGh5OgotCi0gIFRoZSBjb3JlIGlkZWEgYmVoaW5kIEJpb25pYydzIGRlc2lnbiBpczogS0VFUCBJVCBSRUFMTFkgU0lNUExFLgotCi0gIFRoaXMgaW1wbGllcyB0aGF0IHRoZSBDIGxpYnJhcnkgc2hvdWxkIG9ubHkgcHJvdmlkZSBsaWdodHdlaWdodCB3cmFwcGVycwotICBhcm91bmQga2VybmVsIGZhY2lsaXRpZXMgYW5kIG5vdCB0cnkgdG8gYmUgdG9vIHNtYXJ0IHRvIGRlYWwgd2l0aCBlZGdlIGNhc2VzLgotCi0gIFRoZSBuYW1lICJCaW9uaWMiIGNvbWVzIGZyb20gdGhlIGZhY3QgdGhhdCBpdCBpcyBwYXJ0LUJTRCBhbmQgcGFydC1MaW51eDoKLSAgaXRzIHNvdXJjZSBjb2RlIGNvbnNpc3RzIGluIGEgbWl4IG9mIEJTRCBDIGxpYnJhcnkgcGllY2VzIHdpdGggY3VzdG9tCi0gIExpbnV4LXNwZWNpZmljIGJpdHMgdXNlZCB0byBkZWFsIHdpdGggdGhyZWFkcywgcHJvY2Vzc2VzLCBzaWduYWxzIGFuZCBhIGZldwotICBvdGhlcnMgdGhpbmdzLgotCi0gIEFsbCBvcmlnaW5hbCBCU0QgcGllY2VzIGNhcnJ5IHRoZSBCU0QgY29weXJpZ2h0IGRpc2NsYWltZXIuIEJpb25pYy1zcGVjaWZpYyAKLSAgYml0cyBjYXJyeSB0aGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0IGNvcHlyaWdodCBkaXNjbGFpbWVyLiBBbmQKLSAgZXZlcnl0aGluZyBpcyByZWxlYXNlZCB1bmRlciB0aGUgQlNEIGxpY2Vuc2UuCi0KLUFyY2hpdGVjdHVyZXM6Ci0KLSAgQmlvbmljIGN1cnJlbnRseSBzdXBwb3J0cyB0aGUgQVJNIGFuZCB4ODYgaW5zdHJ1Y3Rpb24gc2V0cy4gSW4gdGhlb3J5LCBpdAotICBzaG91bGQgYmUgcG9zc2libGUgdG8gc3VwcG9ydCBtb3JlLCBidXQgdGhpcyBtYXkgcmVxdWlyZSBhIGxpdHRsZSB3b3JrIChlLmcuCi0gIGFkZGluZyBzeXN0ZW0gY2FsbCBJRHMgdG8gU1lTQ0FMTFMuVFhULCBkZXNjcmliZWQgYmVsb3csIG9yIG1vZGlmeWluZyB0aGUKLSAgZHluYW1pYyBsaW5rZXIpLgotCi0gIFRoZSBBUk0tc3BlY2lmaWMgY29kZSBpcyB1bmRlciBhcmNoLWFybS8gYW5kIHRoZSB4ODYtc3BlY2lmaWMgb25lIGlzIHVuZGVyCi0gIGFyY2gteDg2LwotCi0gIE5vdGUgdGhhdCB0aGUgeDg2IHZlcnNpb24gaXMgb25seSBtZWFudCB0byBydW4gb24gYW4geDg2IEFuZHJvaWQgZGV2aWNlLiBXZQotICBtYWtlIGFic29sdXRlbHkgbm8gY2xhaW0gdGhhdCB5b3UgY291bGQgYnVpbGQgYW5kIHVzZSBCaW9uaWMgb24gYSBzdG9jayB4ODYKLSAgTGludXggZGlzdHJpYnV0aW9uICh0aG91Z2ggdGhhdCB3b3VsZCBiZSBjb29sLCBzbyBwYXRjaGVzIGFyZSB3ZWxjb21lZCA6LSkpCi0KLVN5c2NhbGwgc3R1YnM6Ci0KLSAgRWFjaCBzeXN0ZW0gY2FsbCBmdW5jdGlvbiBpcyBpbXBsZW1lbnRlZCBieSBhIHRpbnkgYXNzZW1ibGVyIHNvdXJjZSBmcmFnbWVudAotICAoY2FsbGVkIGEgInN5c2NhbGwgc3R1YiIpLCB3aGljaCBpcyBnZW5lcmF0ZWQgYXV0b21hdGljYWxseSBieQotICB0b29scy9nZW5zeXNjYWxscy5weSB3aGljaCByZWFkcyB0aGUgU1lTQ0FMTFMuVFhUIGZpbGUgZm9yIGlucHV0LgotCi0gIFNZU0NBTExTLlRYVCBjb250YWlucyB0aGUgbGlzdCBvZiBhbGwgc3lzY2FsbCBzdHVicyB0byBnZW5lcmF0ZSwgYWxvbmcgd2l0aAotICB0aGUgY29ycmVzcG9uZGluZyBzeXNjYWxsIG51bWVyaWMgaWRlbnRpZmllciAod2hpY2ggbWF5IGRpZmZlciBiZXR3ZWVuIEFSTQotICBhbmQgeDg2KSwgYW5kIGl0cyBzaWduYXR1cmUKLQotICBJZiB5b3UgbW9kaWZ5IHRoaXMgZmlsZSwgeW91IG1heSB3YW50IHRvIHVzZSB0b29scy9jaGVja3N5c2NhbGxzLnB5IHdoaWNoCi0gIGNoZWNrcyBpdHMgY29udGVudCBhZ2FpbnN0IG9mZmljaWFsIExpbnV4IGtlcm5lbCBoZWFkZXIgZmlsZXMsIGFuZCB3aWxsCi0gIHJlcG9ydCBlcnJvcnMgd2hlbiBpbnZhbGlkIHN5c2NhbGwgaWRzIGFyZSB1c2VkLgotCi0gIFNvbWV0aW1lcywgdGhlIEMgbGlicmFyeSBmdW5jdGlvbiBpcyByZWFsbHkgYSB3cmFwcGVyIHRoYXQgY2FsbHMgdGhlCi0gIGNvcnJlc3BvbmRpbmcgc3lzY2FsbCB3aXRoIGFub3RoZXIgbmFtZS4gRm9yIGV4YW1wbGUsIHRoZSBleGl0KCkgZnVuY3Rpb24KLSAgaXMgcHJvdmlkZWQgYnkgdGhlIEMgbGlicmFyeSBhbmQgY2FsbHMgdGhlIF9leGl0KCkgc3lzY2FsbCBzdHViLgotCi0gIFNlZSBTWVNDQUxMUy5UWFQgZm9yIGRvY3VtZW50YXRpb24gYW5kIGRldGFpbHMuCi0KLQotdGltZV90OgotCi0gIHRpbWVfdCBpcyAzMi1iaXQgYXMgZGVmaW5lZCBieSB0aGUga2VybmVsIG9uIDMyLWJpdCBDUFVzLiBBIDY0LWJpdCB2ZXJzaW9uCi0gIHdvdWxkIGJlIHByZWZlcnJhYmxlIHRvIGF2b2lkIHRoZSBZMjAzOCBidWcsIGJ1dCB0aGUga2VybmVsIG1haW50YWluZXJzCi0gIGNvbnNpZGVyIHRoYXQgdGhpcyBpcyBub3QgbmVlZGVkIGF0IHRoZSBtb21lbnQuCi0KLSAgSW5zdGVhZCwgQmlvbmljIHByb3ZpZGVzIGEgPHRpbWU2NC5oPiBoZWFkZXIgdGhhdCBkZWZpbmVzIGEgdGltZTY0X3QgdHlwZSwKLSAgYW5kIHJlbGF0ZWQgZnVuY3Rpb25zIGxpa2UgbWt0aW1lNjQoKSwgbG9jYWx0aW1lNjQoKSwgZXRjLi4uCi0KLSAgc3RyZnRpbWUoKSB1c2VzIHRpbWU2NF90IGludGVybmFsbHksIHNvIHRoZSAnJXMnIGZvcm1hdCAoc2Vjb25kcyBzaW5jZSB0aGUKLSAgZXBvY2gpIGlzIHN1cHBvcnRlZCBmb3IgZGF0ZXMgPj0gMjAzOC4KLQotCi1zdHJmdGltZV90eigpOgotCi0gIEJpb25pYyBhbHNvIHByb3ZpZGVzIHRoZSBub24tc3RhbmRhcmQgc3RyZnRpbWVfdHooKSBmdW5jdGlvbiwgYSB2YXJpYW50Ci0gIG9mIHN0cmZ0aW1lKCkgd2hpY2ggYWxzbyBhY2NlcHRzIGEgdGltZSBsb2NhbGUgZGVzY3JpcHRvciBhcyBkZWZpbmVkCi0gIGJ5ICJzdHJ1Y3Qgc3RyZnRpbWVfbG9jYWxlIiBpbiA8dGltZS5oPi4KLQotICBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgYnkgdGhlIGxvdy1sZXZlbCBmcmFtZXdvcmsgY29kZSBpbiBBbmRyb2lkLgotCi0KLVRpbWV6b25lIG1hbmFnZW1lbnQ6Ci0KLSAgVGhlIG5hbWUgb2YgdGhlIGN1cnJlbnQgdGltZXpvbmUgaXMgdGFrZW4gZnJvbSB0aGUgVFogZW52aXJvbm1lbnQgdmFyaWFibGUsCi0gIGlmIGRlZmluZWQuIE90aGVyd2lzZSwgdGhlIHN5c3RlbSBwcm9wZXJ0eSBuYW1lZCAncGVyc2lzdC5zeXMudGltZXpvbmUnIGlzCi0gIGNoZWNrZWQgaW5zdGVhZC4KLQotICBUaGUgem9uZWluZm8gdGltZXpvbmUgZGF0YWJhc2UgYW5kIGluZGV4IGZpbGVzIGFyZSBsb2NhdGVkIHVuZGVyIGRpcmVjdG9yeQotICAvc3lzdGVtL3Vzci9zaGFyZS96b25laW5mbywgaW5zdGVhZCBvZiB0aGUgbW9yZSBQb3NpeC1jb21wbGlhbnQgcGF0aCBvZgotICAvdXNyL3NoYXJlL3pvbmVpbmZvCi0KLQotb2ZmX3Q6Ci0KLSAgRm9yIHNpbWlsYXIgcmVhc29ucywgb2ZmX3QgaXMgMzItYml0LiBXZSBkZWZpbmUgbG9mZl90IGFzIHRoZSA2NC1iaXQgdmFyaWFudAotICBkdWUgdG8gQlNEIGluaGVyaXRhbmNlLCBidXQgb2ZmNjRfdCBzaG91bGQgYmUgYXZhaWxhYmxlIGFzIGEgdHlwZWRlZiB0byBlYXNlCi0gIHBvcnRpbmcgb2YgY3VycmVudCBMaW51eC1zcGVjaWZpYyBjb2RlLgotCi0KLUxpbnV4IGtlcm5lbCBoZWFkZXJzOgotCi0gIEJpb25pYyBjb21lcyB3aXRoIGl0cyBvd24gc2V0IG9mICJjbGVhbiIgTGludXgga2VybmVsIGhlYWRlcnMgdG8gYWxsb3cKLSAgdXNlci1zcGFjZSBjb2RlIHRvIHVzZSBrZXJuZWwtc3BlY2lmaWMgZGVjbGFyYXRpb25zIChlLmcuIElPQ1RMcywgc3RydWN0dXJlCi0gIGRlY2xhcmF0aW9ucywgY29uc3RhbnRzLCBldGMuLi4pLiBUaGV5IGFyZSBsb2NhdGVkIGluOgotCi0gICAgIC4va2VybmVsL2NvbW1vbiwKLSAgICAgLi9rZXJuZWwvYXJjaC1hcm0KLSAgICAgLi9rZXJuZWwvYXJjaC14ODYKLQotICBUaGVzZSBoZWFkZXJzIGhhdmUgYmVlbiBnZW5lcmF0ZWQgYnkgYSB0b29sIChrZXJuZWwvdG9vbHMvdXBkYXRlLWFsbC5weSkgdG8KLSAgb25seSBpbmNsdWRlIHRoZSBwdWJsaWMgZGVmaW5pdGlvbnMgZnJvbSB0aGUgb3JpZ2luYWwgTGludXgga2VybmVsIGhlYWRlcnMuCi0KLSAgSWYgeW91IHdhbnQgdG8ga25vdyB3aHkgYW5kIGhvdyB0aGlzIGlzIGRvbmUsIHJlYWQga2VybmVsL1JFQURNRS5UWFQgdG8gZ2V0Ci0gIGFsbCB0aGUgKGdvcnkpIGRldGFpbHMuCi0KLQotUFRocmVhZCBpbXBsZW1lbnRhdGlvbjoKLQotICAgQmlvbmljJ3MgQyBsaWJyYXJ5IGNvbWVzIHdpdGggaXRzIG93biBwdGhyZWFkIGltcGxlbWVudGF0aW9uIGJ1bmRsZWQgaW4uCi0gICBUaGlzIGlzIGRpZmZlcmVudCBmcm9tIG90aGVyIGhpc3RvcmljYWwgQyBsaWJyYXJpZXMgd2hpY2g6Ci0KLSAgICAtIHBsYWNlIGl0IGluIGFuIGV4dGVybmFsIGxpYnJhcnkgKC1scHRocmVhZCkKLSAgICAtIHBsYXkgbGlua2VyIHRyaWNrcyB3aXRoIHdlYWsgc3ltYm9scyBhdCBkeW5hbWljIGxpbmsgdGltZQotCi0gICBUaGUgc3VwcG9ydCBmb3IgcmVhbC10aW1lIGZlYXR1cmVzIChhLmsuYS4gLWxydCkgaXMgYWxzbyBidW5kbGVkIGluIHRoZQotICAgQyBsaWJyYXJ5LgotCi0gICBUaGUgaW1wbGVtZW50YXRpb24gaXMgYmFzZWQgb24gZnV0ZXhlcyBhbmQgc3RyaXZlcyB0byBwcm92aWRlICp2ZXJ5KiBzaG9ydAotICAgY29kZSBwYXRocyBmb3IgY29tbW9uIG9wZXJhdGlvbnMuIE5vdGFibGUgZmVhdHVyZXMgYXJlIHRoZSBmb2xsb3dpbmc6Ci0KLSAgICAgIC0gcHRocmVhZF9tdXRleF90LCBwdGhyZWFkX2NvbmRfdCBhcmUgb25seSA0IGJ5dGVzIGVhY2guCi0KLSAgICAgIC0gTm9ybWFsLCByZWN1cnNpdmUgYW5kIGVycm9yLWNoZWNrIG11dGV4ZXMgYXJlIHN1cHBvcnRlZCwgYW5kIHRoZSBjb2RlCi0gICAgICAgIHBhdGggaXMgaGVhdmlseSBvcHRpbWl6ZWQgZm9yIHRoZSBub3JtYWwgY2FzZSwgd2hpY2ggaXMgdXNlZCBtb3N0IG9mCi0gICAgICAgIHRoZSB0aW1lLgotCi0gICAgICAtIFByb2Nlc3Mtc2hhcmVkIG11dGV4ZXMgYW5kIGNvbmRpdGlvbiB2YXJpYWJsZXMgYXJlIG5vdCBzdXBwb3J0ZWQuCi0gICAgICAgIFRoZWlyIGltcGxlbWVudGF0aW9uIHJlcXVpcmVzIGZhciBtb3JlIGNvbXBsZXhpdHkgYW5kIHdhcyBhYnNvbHV0ZWx5Ci0gICAgICAgIG5vdCBuZWVkZWQgZm9yIEFuZHJvaWQgKHdoaWNoIHVzZXMgb3RoZXIgaW50ZXItcHJvY2VzcyBzeW5jaHJvbml6YXRpb24KLSAgICAgICAgY2FwYWJpbGl0aWVzKS4KLQotICAgICAgICBOb3RlIHRoYXQgdGhleSBjb3VsZCBiZSBhZGRlZCBpbiB0aGUgZnV0dXJlIHdpdGhvdXQgYnJlYWtpbmcgdGhlIEFCSQotICAgICAgICBieSBzcGVjaWZ5aW5nIG1vcmUgc29waGlzdGljYXRlZCBjb2RlIHBhdGhzICh3aGljaCBtYXkgbWFrZSB0aGUgY29tbW9uCi0gICAgICAgIHBhdGhzIHNsaWdodGx5IHNsb3dlciB0aG91Z2gpLgotCi0gICAgICAtIFRoZXJlIGlzIGN1cnJlbnRseSBubyBzdXBwb3J0IGZvciByZWFkL3dyaXRlIGxvY2tzLCBwcmlvcml0eS1jZWlsaW5nIGluCi0gICAgICAgIG11dGV4ZXMgYW5kIG90aGVyIG1vcmUgYWR2YW5jZWQgZmVhdHVyZXMuIEFnYWluLCB0aGUgbWFpbiBpZGVhIGJlaW5nCi0gICAgICAgIHRoYXQgdGhpcyB3YXMgbm90IG5lZWRlZCBmb3IgQW5kcm9pZCBhdCBhbGwgYnV0IGNvdWxkIGJlIGFkZGVkIGluIHRoZQotICAgICAgICBmdXR1cmUuCi0KLXB0aHJlYWRfY2FuY2VsKCk6Ci0KLSAgIHB0aHJlYWRfY2FuY2VsKCkgd2lsbCAqbm90KiBiZSBzdXBwb3J0ZWQgaW4gQmlvbmljLCBiZWNhdXNlIGRvaW5nIHRoaXMgd291bGQKLSAgIGludm9sdmUgbWFraW5nIHRoZSBDIGxpYnJhcnkgc2lnbmlmaWNhbnRseSBiaWdnZXIgZm9yIHZlcnkgbGl0dGxlIGJlbmVmaXQuCi0KLSAgIENvbnNpZGVyIHRoYXQ6Ci0KLSAgICAgLSBBIHByb3BlciBpbXBsZW1lbnRhdGlvbiBtdXN0IGluc2VydCBwdGhyZWFkIGNhbmNlbGxhdGlvbiBjaGVja3MgaW4gYSBsb3QKLSAgICAgICBvZiBkaWZmZXJlbnQgcGxhY2VzIG9mIHRoZSBDIGxpYnJhcnkuIEFuZCBjb25mb3JtYW5jZSBpcyB2ZXJ5IGRpZmZpY3VsdAotICAgICAgIHRvIHRlc3QgcHJvcGVybHkuCi0KLSAgICAgLSBBIHByb3BlciBpbXBsZW1lbnRhdGlvbiBtdXN0IGFsc28gY2xlYW4gdXAgcmVzb3VyY2VzLCBsaWtlIHJlbGVhc2luZwotICAgICAgIG1lbW9yeSwgb3IgdW5sb2NraW5nIG11dGV4ZXMsIHByb3Blcmx5IGlmIHRoZSBjYW5jZWxsYXRpb24gaGFwcGVucyBpbiBhCi0gICAgICAgY29tcGxleCBmdW5jdGlvbiAoZS5nLiBpbnNpZGUgZ2V0aG9zdGJ5bmFtZSgpIG9yIGZwcmludGYoKSArIGNvbXBsZXgKLSAgICAgICBmb3JtYXR0aW5nIHJ1bGVzKS4gVGhpcyB0ZW5kcyB0byBzbG93IGRvd24gdGhlIHBhdGggb2YgbWFueSBmdW5jdGlvbnMuCi0KLSAgICAgLSBwdGhyZWFkIGNhbmNlbGxhdGlvbiBjYW5ub3Qgc3RvcCBhbGwgdGhyZWFkczogZS5nLiBpdCBjYW4ndCBkbyBhbnl0aGluZwotICAgICAgIGFnYWluc3QgYW4gaW5maW5pdGUgbG9vcAotCi0gICAgIC0gcHRocmVhZCBjYW5jZWxsYXRpb24gaXRzZWxmIGhhcyBzaG9ydC1jb21pbmdzIGFuZCBpc24ndCB2ZXJ5IHBvcnRhYmxlCi0gICAgICAgKHNlZSBodHRwOi8vYWR2b2dhdG8ub3JnL3BlcnNvbi9zbGFtYi9kaWFyeS5odG1sP3N0YXJ0PTQ5IGZvciBleGFtcGxlKS4KLQotICAgQWxsIG9mIHRoaXMgaXMgY29udHJhcnkgdG8gdGhlIEJpb25pYyBkZXNpZ24gZ29hbHMuIElmIHlvdXIgY29kZSBkZXBlbmRzIG9uCi0gICB0aHJlYWQgY2FuY2VsbGF0aW9uLCBwbGVhc2UgY29uc2lkZXIgYWx0ZXJuYXRpdmVzLgotCi0gICBOb3RlIGhvd2V2ZXIgdGhhdCBCaW9uaWMgZG9lcyBpbXBsZW1lbnQgcHRocmVhZF9jbGVhbnVwX3B1c2goKSBhbmQKLSAgIHB0aHJlYWRfY2xlYW51cF9wb3AoKSwgd2hpY2ggY2FuIGJlIHVzZWQgdG8gaGFuZGxlIGNsZWFudXBzIHRoYXQgaGFwcGVuIHdoZW4KLSAgIGEgdGhyZWFkIHZvbHVudGFyaWx5IGV4aXRzIHRocm91Z2ggcHRocmVhZF9leGl0KCkgb3IgcmV0dXJuaW5nIGZyb20gaXRzCi0gICBtYWluIGZ1bmN0aW9uLgotCi0KLXB0aHJlYWRfb25jZSgpOgotCi0gIERvIG5vdCBjYWxsIGZvcmsoKSB3aXRoaW4gYSBjYWxsYmFjayBwcm92aWRlZCB0byBwdGhyZWFkX29uY2UoKS4gRG9pbmcgdGhpcwotICBtYXkgcmVzdWx0IGluIGEgZGVhZGxvY2sgaW4gdGhlIGNoaWxkIHByb2Nlc3MgdGhlIG5leHQgdGltZSBpdCBjYWxscwotICBwdGhyZWFkX29uY2UoKS4KLQotICBBbHNvLCB5b3UgY2FuJ3QgdGhyb3cgYSBDKysgRXhjZXB0aW9uIGZyb20gdGhlIGNhbGxiYWNrIChzZWUgQysrIEV4Y2VwdGlvbgotICBTdXBwb3J0IGJlbG93KS4KLQotICBUaGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBvZiBwdGhyZWFkX29uY2UoKSBsYWNrcyB0aGUgbmVjZXNzYXJ5IHN1cHBvcnQgb2YKLSAgbXVsdGktY29yZS1zYWZlIGRvdWJsZS1jaGVja2VkLWxvY2tpbmcgKHJlYWQgYW5kIHdyaXRlIGJhcnJpZXJzKS4KLQotCi1UaHJlYWQtc3BlY2lmaWMgZGF0YQotCi0gIFRoZSB0aHJlYWQtc3BlY2lmaWMgc3RvcmFnZSBvbmx5IHByb3ZpZGVzIGZvciBhIGJpdCBsZXNzIHRoYW4gNjQKLSAgcHRocmVhZF9rZXlfdCBvYmplY3RzIHRvIGVhY2ggcHJvY2Vzcy4gVGhlIGltcGxlbWVudGF0aW9uIHByb3ZpZGVzIDY0IHJlYWwKLSAgc2xvdHMgYnV0IGFsc28gdXNlcyBhYm91dCA1IG9mIHRoZW0gKGV4YWN0IG51bWJlciBtYXkgZGVwZW5kIG9uCi0gIGltcGxlbWVudGF0aW9uKSBmb3IgaXRzIG93biB1c2UgKGUuZy4gdHdvIHNsb3RzIGFyZSBwcmUtYWxsb2NhdGVkIGJ5IHRoZSBDCi0gIGxpYnJhcnkgdG8gc3BlZWQtdXAgdGhlIEFuZHJvaWQgT3BlbkdMIHN1Yi1zeXN0ZW0pLgotCi0gIE5vdGUgdGhhdCBQb3NpeCBtYW5kYXRlcyBhIG1pbmltdW0gb2YgMTI4IHNsb3RzLCBidXQgd2UgZG8gbm90IGNsYWltIHRvIGJlCi0gIFBvc2l4LWNvbXBsaWFudC4KLQotICBFeGNlcHQgZm9yIHRoZSBtYWluIHRocmVhZCwgdGhlIFRMUyBhcmVhIGlzIHN0b3JlZCBhdCB0aGUgdG9wIG9mIHRoZSBzdGFjay4KLSAgU2VlIGNvbW1lbnRzIGluIGJpb25pYy9saWJjL2Jpb25pYy9wdGhyZWFkLmMgZm9yIGRldGFpbHMuCi0KLSAgQXQgdGhlIG1vbWVudCwgdGhyZWFkLWxvY2FsIHN0b3JhZ2UgZGVmaW5lZCB0aHJvdWdoIHRoZSBfX3RocmVhZCBjb21waWxlcgotICBrZXl3b3JkIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIEJpb25pYyBDIGxpYnJhcnkgYW5kIGR5bmFtaWMgbGlua2VyLgotCi0KLU11bHRpLWNvcmUgc3VwcG9ydAotCi0gIEF0IHRoZSBtb21lbnQsIEJpb25pYyBkb2VzIG5vdCBwcm92aWRlIG9yIHVzZSByZWFkL3dyaXRlIG1lbW9yeSBiYXJyaWVycy4KLSAgVGhpcyBtZWFucyB0aGF0IHVzaW5nIGl0IG9uIGNlcnRhaW4gbXVsdGktY29yZSBzeXN0ZW1zIG1pZ2h0IG5vdCBiZQotICBzdXBwb3J0ZWQsIGRlcGVuZGluZyBvbiBpdHMgZXhhY3QgQ1BVIGFyY2hpdGVjdHVyZS4KLQotCi1BbmRyb2lkLXNwZWNpZmljIGZlYXR1cmVzOgotCi0gIEJpb25pYyBwcm92aWRlcyBhIHNtYWxsIG51bWJlciBvZiBBbmRyb2lkLXNwZWNpZmljIGZlYXR1cmVzIHRvIGl0cyBjbGllbnRzOgotCi0gIC0gYWNjZXNzIHRvIHN5c3RlbSBwcm9wZXJ0aWVzOgotCi0gICAgICAgQW5kcm9pZCBwcm92aWRlcyBhIHNpbXBsZSBzaGFyZWQgdmFsdWUva2V5IHNwYWNlIHRvIGFsbCBwcm9jZXNzZXMgb24gdGhlCi0gICAgICAgc3lzdGVtLiBJdCBzdG9yZXMgYSBsaWJlcmFsIG51bWJlciBvZiAncHJvcGVydGllcycsIGVhY2ggb2YgdGhlbSBiZWluZyBhCi0gICAgICAgc2ltcGxlIHNpemUtbGltaXRlZCBzdHJpbmcgdGhhdCBjYW4gYmUgYXNzb2NpYXRlZCB0byBhIHNpemUtbGltaXRlZAotICAgICAgIHN0cmluZyB2YWx1ZS4KLQotICAgICAgIFRoZSBoZWFkZXIgPHN5cy9zeXN0ZW1fcHJvcGVydGllcy5oPiBjYW4gYmUgdXNlZCB0byByZWFkIHN5c3RlbQotICAgICAgIHByb3BlcnRpZXMgYW5kIGFsc28gZGVmaW5lcyB0aGUgbWF4aW11bSBzaXplIG9mIGtleXMgYW5kIHZhbHVlcy4KLQotICAgLSBBbmRyb2lkLXNwZWNpZmljIHVzZXIvZ3JvdXAgbWFuYWdlbWVudDoKLQotICAgICAgIFRoZXJlIGlzIG5vIC9ldGMvcGFzc3dkIG9yIC9ldGMvZ3JvdXBzIGluIEFuZHJvaWQuIEJ5IGRlc2lnbiwgaXQgaXMKLSAgICAgICBtZWFudCB0byBiZSB1c2VkIGJ5IGEgc2luZ2xlIGhhbmRzZXQgdXNlci4gT24gdGhlIG90aGVyIGhhbmQsIEFuZHJvaWQKLSAgICAgICB1c2VzIHRoZSBMaW51eCB1c2VyL2dyb3VwIG1hbmFnZW1lbnQgZmVhdHVyZXMgZXh0ZW5zaXZlbHkgdG8gc2VjdXJlCi0gICAgICAgcHJvY2VzcyBwZXJtaXNzaW9ucywgbGlrZSBhY2Nlc3MgdG8gdmFyaW91cyBmaWxlc3lzdGVtIGRpcmVjdG9yaWVzLgotCi0gICAgICAgSW4gdGhlIEFuZHJvaWQgc2NoZW1lLCBlYWNoIGluc3RhbGxlZCBhcHBsaWNhdGlvbiBnZXRzIGl0cyBvd24KLSAgICAgICB1aWRfdC9naWRfdCBzdGFydGluZyBmcm9tIDEwMDAwOyBsb3dlciBudW1lcmljYWwgaWRzIGFyZSByZXNlcnZlZCBmb3IKLSAgICAgICBzeXN0ZW0gZGFlbW9ucy4KLQotICAgICAgIGdldHB3bmFtKCkgcmVjb2duaXplcyBzb21lIGhhcmQtY29kZWQgc3Vic3lzdGVtcyBuYW1lcyAoZS5nLiAicmFkaW8iKQotICAgICAgIGFuZCB3aWxsIHRyYW5zbGF0ZSB0aGVtIHRvIHRoZWlyIGxvdy11c2VyLWlkIHZhbHVlcy4gSXQgYWxzbyByZWNvZ25pemVzCi0gICAgICAgImFwcF8xMjM0IiBhcyB0aGUgc3ludGhldGljIG5hbWUgb2YgdGhlIGFwcGxpY2F0aW9uIHRoYXQgd2FzIGluc3RhbGxlZAotICAgICAgIHdpdGggdWlkIDEwMDAwICsgMTIzNCwgd2hpY2ggaXMgMTEyMzQuIGdldGdybmFtKCkgd29ya3Mgc2ltaWxhcmx5Ci0KLSAgICAgICBnZXRncm91cGxpc3QoKSB3aWxsIGFsd2F5cyByZXR1cm4gYSBzaW5nbGUgZ3JvdXAgZm9yIGFueSB1c2VyIG5hbWUsCi0gICAgICAgd2hpY2ggaXMgdGhlIG9uZSBwYXNzZWQgYXMgYW4gaW5wdXQgcGFyYW1ldGVyLgotCi0gICAgICAgZ2V0Z3JnaWQoKSB3aWxsIHNpbWlsYXJseSBvbmx5IHJldHVybiBhIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zIGEKLSAgICAgICBzaW5nbGUtZWxlbWVudCBtZW1iZXJzIGxpc3QsIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHVzZXIgd2l0aCB0aGUgc2FtZQotICAgICAgIG51bWVyaWNhbCB2YWx1ZSB0aGFuIHRoZSBncm91cC4KLQotICAgICAgIFNlZSBiaW9uaWMvbGliYy9iaW9uaWMvc3R1YnMuYyBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICAgLSBnZXRzZXJ2ZW50KCkKLQotICAgICAgIFRoZXJlIGlzIG5vIC9ldGMvc2VydmljZXMgb24gQW5kcm9pZC4gSW5zdGVhZCB0aGUgQyBsaWJyYXJ5IGVtYmVkcyBhCi0gICAgICAgY29uc3RhbnQgbGlzdCBvZiBzZXJ2aWNlcyBpbiBpdHMgZXhlY3V0YWJsZSwgd2hpY2ggaXMgcGFyc2VkIG9uIGRlbWFuZAotICAgICAgIGJ5IHRoZSB2YXJpb3VzIGZ1bmN0aW9ucyB0aGF0IGRlcGVuZCBvbiBpdC4gU2VlCi0gICAgICAgYmlvbmljL2xpYmMvbmV0YnNkL25ldC9nZXRzZXJ2ZW50LmMgYW5kCi0gICAgICAgYmlvbmljL2xpYmMvbmV0YnNkL25ldC9zZXJ2aWNlcy5oCi0KLSAgICAgICBUaGUgbGlzdCBvZiBzZXJ2aWNlcyBkZWZpbmVkIGludGVybmFsbHkgbWlnaHQgY2hhbmdlIGxpYmVyYWxseSBpbiB0aGUKLSAgICAgICBmdXR1cmUuIFRoaXMgZmVhdHVyZSBpcyBtb3N0bHkgaGlzdG9yaWNhbGx5IGFuZCBpcyB2ZXJ5IHJhcmVseSB1c2VkLgotCi0gICAgICAgVGhlIGdldHNlcnZlbnQoKSByZXR1cm5zIHRocmVhZC1sb2NhbCBkYXRhLiBnZXRzZXJ2Ynlwb3J0KCkgYW5kCi0gICAgICAgZ2V0c2VydmJ5bmFtZSgpIGFyZSBhbHNvIGltcGxlbWVudGVkIGluIGEgc2ltaWxhciBmYXNoaW9uLgotCi0gICAgIC0gZ2V0cHJvdG9lbnQoKQotCi0gICAgICAgVGhlcmUgaXMgbm8gL2V0Yy9wcm90b2NvbCBvbiBBbmRyb2lkLiBCaW9uaWMgZG9lcyBub3QgY3VycmVudGx5Ci0gICAgICAgaW1wbGVtZW50IGdldHByb3RvZW50KCkgYW5kIHJlbGF0ZWQgZnVuY3Rpb25zLiBJZiBhZGRlZCwgaXQgd2lsbAotICAgICAgIGxpa2VseSBiZSBkb25lIGluIGEgd2F5IHNpbWlsYXIgdG8gZ2V0c2VydmVudCgpCi0KLUROUyByZXNvbHZlcjoKLQotICBCaW9uaWMgdXNlcyBhIE5ldEJTRC1kZXJpdmVkIHJlc29sdmVyIGxpYnJhcnkgd2hpY2ggaGFzIGJlZW4gbW9kaWZpZWQgaW4KLSAgdGhlIGZvbGxvd2luZyB3YXlzOgotCi0gICAgIC0gZG9uJ3QgaW1wbGVtZW50IHRoZSBuYW1lLXNlcnZlci1zd2l0Y2ggZmVhdHVyZSAoYS5rLmEuIDxuc3N3aXRjaC5oPikKLQotICAgICAtIHJlYWQgL3N5c3RlbS9ldGMvcmVzb2x2LmNvbmYgaW5zdGVhZCBvZiAvZXRjL3Jlc29sdi5jb25mCi0KLSAgICAgLSByZWFkIHRoZSBsaXN0IG9mIHNlcnZlcnMgZnJvbSBzeXN0ZW0gcHJvcGVydGllcy4gdGhlIGNvZGUgbG9va3MgZm9yCi0gICAgICAgJ25ldC5kbnMxJywgJ25ldC5kbnMyJywgZXRjLi4gRWFjaCBwcm9wZXJ0eSBzaG91bGQgY29udGFpbiB0aGUgSVAKLSAgICAgICBhZGRyZXNzIG9mIGEgRE5TIHNlcnZlci4KLQotICAgICAgIHRoZXNlIHByb3BlcnRpZXMgYXJlIHNldC9tb2RpZmllZCBieSBvdGhlciBwYXJ0cyBvZiB0aGUgQW5kcm9pZCBzeXN0ZW0KLSAgICAgICAoZS5nLiB0aGUgZGhjcGQgZGFlbW9uKS4KLQotICAgICAgIHRoZSBpbXBsZW1lbnRhdGlvbiBhbHNvIHN1cHBvcnRzIHBlci1wcm9jZXNzIEROUyBzZXJ2ZXIgbGlzdCwgdXNpbmcgdGhlCi0gICAgICAgcHJvcGVydGllcyAnbmV0LmRuczEuPHBpZD4nLCAnbmV0LmRuczIuPHBpZD4nLCBldGMuLi4gV2hlcmUgPHBpZD4gc3RhbmRzCi0gICAgICAgZm9yIHRoZSBudW1lcmljYWwgSUQgb2YgdGhlIGN1cnJlbnQgcHJvY2Vzcy4KLQotICAgICAtIHdoZW4gcGVyZm9ybWluZyBhIHF1ZXJ5LCB1c2UgYSBwcm9wZXJseSByYW5kb21pemVkIFF1ZXJ5IElEIChpbnN0ZWFkIG9mCi0gICAgICAgYSBpbmNyZW1lbnRlZCBvbmUpLCBmb3IgaW5jcmVhc2VkIHNlY3VyaXR5LgotCi0gICAgIC0gd2hlbiBwZXJmb3JtaW5nIGEgcXVlcnksIGJpbmQgdGhlIGxvY2FsIGNsaWVudCBzb2NrZXQgdG8gYSByYW5kb20gcG9ydAotICAgICAgIGZvciBpbmNyZWFzZWQgc2VjdXJpdHkuCi0KLSAgICAgLSBnZXQgcmlkIG9mICptYW55KiB1bmZvcnR1bmF0ZSB0aHJlYWQtc2FmZXR5IGlzc3VlcyBpbiB0aGUgb3JpZ2luYWwgY29kZQotCi0gIEJpb25pYyBkb2VzICpub3QqIGV4cG9zZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIG9mIGl0cyBETlMgcmVzb2x2ZXI7IHRoZQotICBjb250ZW50IG9mIDxhcnBhL25hbWVzZXIuaD4gaXMgaW50ZW50aW9uYWxseSBibGFuay4gVGhlIHJlc29sdmVyCi0gIGltcGxlbWVudGF0aW9uIG1pZ2h0IGNoYW5nZSBjb21wbGV0ZWx5IGluIHRoZSBmdXR1cmUuCi0KLQotUFRocmVhZCBSZWFsLVRpbWUgVGltZXJzOgotCi0gIHRpbWVyX2NyZWF0ZSgpLCB0aW1lcl9nZXR0aW1lKCksIHRpbWVyX3NldHRpbWUoKSBhbmQgdGltZXJfZ2V0b3ZlcnJ1bigpIGFyZQotICBzdXBwb3J0ZWQuCi0KLSAgQmlvbmljIGFsc28gbm93IHN1cHBvcnRzIFNJR0VWX1RIUkVBRCByZWFsLXRpbWUgdGltZXJzIChzZWUgdGltZXJfY3JlYXRlKCkpLgotICBUaGUgaW1wbGVtZW50YXRpb24gc2ltcGx5IHVzZXMgYSBzaW5nbGUgdGhyZWFkIHBlciB0aW1lciwgdW5saWtlIEdMaWJjIHdoaWNoCi0gIHVzZXMgY29tcGxleCBoZXVyaXN0aWNzIHRvIHRyeSB0byB1c2UgdGhlIGxlc3MgdGhyZWFkcyBwb3NzaWJsZSB3aGVuIHNldmVyYWwKLSAgdGltZXJzIHdpdGggY29tcGF0aWJsZSBwcm9wZXJ0aWVzIGFyZSB1c2VkLgotCi0gIFRoaXMgbWVhbnMgdGhhdCBpZiB5b3VyIGNvZGUgdXNlcyBhIGxvdCBvZiBTSUdFVl9USFJFQUQgdGltZXJzLCB5b3VyIHByb2dyYW0KLSAgbWF5IGNvbnN1bWUgYSBsb3Qgb2YgbWVtb3J5LiBIb3dldmVyLCBpZiB5b3VyIHByb2dyYW0gbmVlZHMgbWFueSBvZiB0aGVzZQotICB0aW1lcnMsIGl0J2QgYmV0dGVyIGhhbmRsZSB0aW1lb3V0IGV2ZW50cyBkaXJlY3RseSBpbnN0ZWFkLgotCi0gIE90aGVyIHRpbWVycyAoZS5nLiBTSUdFVl9TSUdOQUwpIGFyZSBoYW5kbGVkIGJ5IHRoZSBrZXJuZWwgYW5kIHVzZSBtdWNoIGxlc3MKLSAgc3lzdGVtIHJlc291cmNlcy4KLQotCi1CaW5hcnkgQ29tcGF0aWJpbGl0eToKLQotICBCaW9uaWMgaXMgKm5vdCogaW4gYW55IHdheSBiaW5hcnktY29tcGF0aWJsZSB3aXRoIHRoZSBHTlUgQyBMaWJyYXJ5LCB1Y0xpYmMKLSAgb3IgYW55IGtub3duIExpbnV4IEMgbGlicmFyeS4gVGhpcyBtZWFucyBzZXZlcmFsIHRoaW5nczoKLQotICAtIFlvdSBjYW5ub3QgZXhwZWN0IHRvIGJ1aWxkIHNvbWV0aGluZyBhZ2FpbnN0IHRoZSBHTlUgQyBMaWJyYXJ5IGhlYWRlcnMgYW5kCi0gICAgaGF2ZSBpdCBkeW5hbWljYWxseSBsaW5rIHByb3Blcmx5IHRvIEJpb25pYyBsYXRlci4KLQotICAtIFlvdSBzaG91bGQgKnJlYWxseSogdXNlIHRoZSBBbmRyb2lkIHRvb2xjaGFpbiB0byBidWlsZCB5b3VyIHByb2dyYW0gYWdhaW5zdAotICAgIEJpb25pYy4gVGhlIHRvb2xjaGFpbiBkZWFscyB3aXRoIG1hbnkgaW1wb3J0YW50IGRldGFpbHMgdGhhdCBhcmUgY3J1Y2lhbAotICAgIHRvIGdldCBzb21ldGhpbmcgd29ya2luZyBwcm9wZXJseS4KLQotICBGYWlsdXJlIHRvIGRvIHNvIHdpbGwgdXN1YWxseSByZXN1bHQgaW4gdGhlIGluYWJpbGl0eSB0byBydW4gb3IgbGluayB5b3VyCi0gIHByb2dyYW0sIG9yIGV2ZW4gcnVudGltZSBjcmFzaGVzLiBTZXZlcmFsIHJhbmRvbSB3ZWIgcGFnZXMgb24gdGhlIEludGVybmV0Ci0gIGRlc2NyaWJlIGhvdyB5b3UgY2FuIHN1Y2Nlc2Z1bGx5IHdyaXRlIGEgImhlbGxvLXdvcmxkIiBwcm9ncmFtIHdpdGggdGhlCi0gIEFSTSBHTlUgdG9vbGNoYWluLiBUaGVzZSBleGFtcGxlcyB1c3VhbGx5IHdvcmsgYnkgY2hhbmNlLCBpZiBhbnl0aGluZyBlbHNlLAotICBhbmQgeW91IHNob3VsZCBub3QgZm9sbG93IHRoZXNlIGluc3RydWN0aW9ucyB1bmxlc3MgeW91IHdhbnQgdG8gd2FzdGUgYSBsb3QKLSAgb2YgeW91ciB0aW1lIGluIHRoZSBwcm9jZXNzLgotCi0gIE5vdGUgaG93ZXZlciB0aGF0IHlvdSAqY2FuKiBnZW5lcmF0ZSBhIGJpbmFyeSB0aGF0IGlzIGJ1aWx0IGFnYWluc3QgdGhlCi0gIEdOVSBDIExpYnJhcnkgaGVhZGVycyBhbmQgdGhlbiBzdGF0aWNhbGx5IGxpbmtlZCB0byBpdC4gVGhlIGNvcnJlc3BvbmRpbmcKLSAgZXhlY3V0YWJsZSBzaG91bGQgYmUgYWJsZSB0byBydW4gKGlmIGl0IGRvZXNuJ3QgdXNlIGRsb3BlbigpL2Rsc3ltKCkpCi0KLQotRHluYW1pYyBMaW5rZXI6Ci0KLSAgQmlvbmljIGNvbWVzIHdpdGggaXRzIG93biBkeW5hbWljIGxpbmtlciAoanVzdCBsaWtlIGxkLnNvIG9uIExpbnV4IHJlYWxseQotICBjb21lcyBmcm9tIEdMaWJjKS4gVGhpcyBsaW5rZXIgZG9lcyBub3Qgc3VwcG9ydCBhbGwgdGhlIHJlbG9jYXRpb25zCi0gIGdlbmVyYXRlZCBieSBvdGhlciBHQ0MgQVJNIHRvb2xjaGFpbnMuCi0KLQotQysrIEV4Y2VwdGlvbnMgU3VwcG9ydDoKLQotICBBdCB0aGUgbW9tZW50LCBCaW9uaWMgZG9lc24ndCBzdXBwb3J0IEMrKyBleGNlcHRpb25zLCB3aGF0IHRoaXMgcmVhbGx5IG1lYW5zCi0gIGlzIHRoZSBmb2xsb3dpbmc6Ci0KLSAgICAtIElmIHB0aHJlYWRfb25jZSgpIGlzIGNhbGxlZCB3aXRoIGEgQysrIGNhbGxiYWNrIHRoYXQgdGhyb3dzIGFuIGV4Y2VwdGlvbiwKLSAgICAgIHRoZW4gdGhlIEMgbGlicmFyeSB3aWxsIGtlZXAgdGhlIGNvcnJlc3BvbmRpbmcgcHRocmVhZF9vbmNlX3QgbXV0ZXgKLSAgICAgIGxvY2tlZC4gQW55IGZ1cnRoZXIgY2FsbCB0byBwdGhyZWFkX29uY2UoKSB3aWxsIHJlc3VsdCBpbiBhIGRlYWRsb2NrLgotCi0gICAgICBBIHByb3BlciBpbXBsZW1lbnRhdGlvbiBzaG91bGQgYmUgYWJsZSB0byByZWdpc3RlciBhIEMrKyBleGNlcHRpb24KLSAgICAgIGNsZWFudXAgaGFuZGxlciBiZWZvcmUgdGhlIGNhbGxiYWNrIHRvIHByb3Blcmx5IHVubG9jayB0aGUKLSAgICAgIHB0aHJlYWRfb25jZV90LiBVbmZvcnR1bmF0ZWx5IHRoaXMgcmVxdWlyZXMgdHJpY2t5IGFzc2VtYmx5IGNvZGUgdGhhdAotICAgICAgaXMgaGlnaGx5IGRlcGVuZGVudCBvbiB0aGUgY29tcGlsZXIuCi0KLSAgICAgIFRoaXMgZmVhdHVyZSBpcyBub3QgcGxhbm5lZCB0byBiZSBzdXBwb3J0ZWQgYW55dGltZSBzb29uLgotCi0gICAgLSBUaGUgc2FtZSBwcm9ibGVtIG1heSBhcmlzZSBpZiB5b3UgdGhyb3cgYW4gZXhjZXB0aW9uIHdpdGhpbiBhIGNhbGxiYWNrCi0gICAgICBjYWxsZWQgZnJvbSB0aGUgQyBsaWJyYXJ5LiBGb3J0dW5hdGVseSwgdGhlc2UgY2FzZXMgYXJlIHZlcnkgcmFyZSBpbiB0aGUKLSAgICAgIHJlYWwtd29ybGQsIGJ1dCBhbnkgY2FsbGJhY2sgeW91IHByb3ZpZGUgdG8gdGhlIEMgbGlicmFyeSBzaG91bGQgKm5vdCoKLSAgICAgIHRocm93IGFuIGV4Y2VwdGlvbi4KLQotICAgIC0gQmlvbmljIGxhY2tzIGEgZmV3IHN1cHBvcnQgZnVuY3Rpb25zIHRvIGhhdmUgZXhjZXB0aW9uIHN1cHBvcnQgd29yawotICAgICAgcHJvcGVybHkuCi0KLVN5c3RlbSBWIElQQ3M6Ci0KLSAgQmlvbmljIGludGVudGlvbmFsbHkgZG9lcyBub3QgcHJvdmlkZSBzdXBwb3J0IGZvciBTeXN0ZW0tViBJUENzIG1lY2hhbmlzbXMsCi0gIGxpa2UgdGhlIG9uZXMgcHJvdmlkZWQgYnkgc2VtZ2V0KCksIHNobWdldCgpLCBtc2dnZXQoKS4gVGhlIHJlYXNvbiBmb3IgdGhpcwotICBpcyB0byBhdm9pZCBkZW5pYWwtb2Ytc2VydmljZS4gRm9yIGEgZGV0YWlsZWQgcmF0aW9uYWxlIGFib3V0IHRoaXMsIHBsZWFzZQotICByZWFkIHRoZSBmaWxlIGRvY3MvU1lTVi1JUENTLlRYVC4KLQotSW5jbHVkZSBQYXRoczoKLQotICBUaGUgQW5kcm9pZCBidWlsZCBzeXN0ZW0gc2hvdWxkIGF1dG9tYXRpY2FsbHkgcHJvdmlkZSB0aGUgbmVjZXNzYXJ5IGluY2x1ZGUKLSAgcGF0aHMgcmVxdWlyZWQgdG8gYnVpbGQgYWdhaW5zdCB0aGUgQyBsaWJyYXJ5IGhlYWRlcnMuIEhvd2V2ZXIsIGlmIHlvdSB3YW50Ci0gIHRvIGRvIHRoYXQgeW91cnNlbGYsIHlvdSB3aWxsIG5lZWQgdG8gYWRkOgotCi0gICAgICBsaWJjL2FyY2gtJEFSQ0gvaW5jbHVkZQotICAgICAgbGliYy9pbmNsdWRlCi0gICAgICBsaWJjL2tlcm5lbC9jb21tb24KLSAgICAgIGxpYmMva2VybmVsL2FyY2gtJEFSQ0gKLQotICB0byB5b3VyIEMgaW5jbHVkZSBwYXRoLgpkaWZmIC0tZ2l0IGEvbGliYy9kb2NzL1NZU1YtSVBDLlRYVCBiL2xpYmMvZG9jcy9TWVNWLUlQQy5UWFQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVhM2VlZjAuLjAwMDAwMDAKLS0tIGEvbGliYy9kb2NzL1NZU1YtSVBDLlRYVAorKysgL2Rldi9udWxsCkBAIC0xLDEwMyArMCwwIEBACi1BbmRyb2lkIGRvZXMgbm90IHN1cHBvcnQgU3lzdGVtIFYgSVBDcywgaS5lLiB0aGUgZmFjaWxpdGllcyBwcm92aWRlZCBieSB0aGUKLWZvbGxvd2luZyBzdGFuZGFyZCBQb3NpeCBoZWFkZXJzOgotCi0gIDxzeXMvc2VtLmg+ICAgLyogU3lzViBzZW1hcGhvcmVzICovCi0gIDxzeXMvc2htLmg+ICAgLyogU3lzViBzaGFyZWQgbWVtb3J5IHNlZ21lbnRzICovCi0gIDxzeXMvbXNnLmg+ICAgLyogU3lzViBtZXNzYWdlIHF1ZXVlcyAqLwotICA8c3lzL2lwYy5oPiAgIC8qIEdlbmVyYWwgSVBDIGRlZmluaXRpb25zICovCi0KLVRoZSByZWFzb24gZm9yIHRoaXMgaXMgZHVlIHRvIHRoZSBmYWN0IHRoYXQsIGJ5IGRlc2lnbiwgdGhleSBsZWFkIHRvIGdsb2JhbAota2VybmVsIHJlc291cmNlIGxlYWthZ2UuCi0KLUZvciBleGFtcGxlLCB0aGVyZSBpcyBubyB3YXkgdG8gYXV0b21hdGljYWxseSByZWxlYXNlIGEgU3lzViBzZW1hcGhvcmUKLWFsbG9jYXRlZCBpbiB0aGUga2VybmVsIHdoZW46Ci0KLS0gYSBidWdneSBvciBtYWxpY2lvdXMgcHJvY2VzcyBleGl0cwotLSBhIG5vbi1idWdneSBhbmQgbm9uLW1hbGljaW91cyBwcm9jZXNzIGNyYXNoZXMgb3IgaXMgZXhwbGljaXRlbHkga2lsbGVkLgotCi1LaWxsaW5nIHByb2Nlc3NlcyBhdXRvbWF0aWNhbGx5IHRvIG1ha2Ugcm9vbSBmb3IgbmV3IG9uZXMgaXMgYW4KLWltcG9ydGFudCBwYXJ0IG9mIEFuZHJvaWQncyBhcHBsaWNhdGlvbiBsaWZlY3ljbGUgaW1wbGVtZW50YXRpb24uIFRoaXMgbWVhbnMKLXRoYXQsIGV2ZW4gYXNzdW1pbmcgb25seSBub24tYnVnZ3kgYW5kIG5vbi1tYWxpY2lvdXMgY29kZSwgaXQgaXMgdmVyeSBsaWtlbHkKLXRoYXQgb3ZlciB0aW1lLCB0aGUga2VybmVsIGdsb2JhbCB0YWJsZXMgdXNlZCB0byBpbXBsZW1lbnQgU3lzViBJUENzIHdpbGwgZmlsbAotdXAuCi0KLUF0IHRoYXQgcG9pbnQsIHN0cmFuZ2UgZmFpbHVyZXMgYXJlIGxpa2VseSB0byBvY2N1ciBhbmQgcHJldmVudCBwcm9ncmFtcyB0aGF0Ci11c2UgdGhlbSB0byBydW4gcHJvcGVybHkgdW50aWwgdGhlIG5leHQgcmVib290IG9mIHRoZSBzeXN0ZW0uCi0KLUFuZCB3ZSBjYW4ndCBpZ25vcmUgcG90ZW50aWFsIG1hbGljaW91cyBhcHBsaWNhdGlvbnMuIEFzIGEgcHJvb2Ygb2YgY29uY2VwdAotaGVyZSBpcyBhIHNpbXBsZSBleHBsb2l0IHRoYXQgeW91IGNhbiBydW4gb24gYSBzdGFuZGFyZCBMaW51eCBib3ggdG9kYXk6Ci0KLS0tLS0tLS0tLS0tLS0tLSBjdXQgaGVyZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSNpbmNsdWRlIDxzeXMvc2VtLmg+Ci0jaW5jbHVkZSA8c3lzL3dhaXQuaD4KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPGVycm5vLmg+Ci0KLSNkZWZpbmUgIE5VTV9TRU1BUEhPUkVTICAzMgotI2RlZmluZSAgTUFYX0ZBSUxTICAgICAgIDEwCi0KLWludCAgbWFpbih2b2lkKQotewotICAgIGludCAgIGNvdW50ZXIgPSAwOwotICAgIGludCAgIGZhaWxzICAgPSAwOwotCi0gICAgaWYgKGNvdW50ZXIgPT0gSVBDX1BSSVZBVEUpCi0gICAgICAgIGNvdW50ZXIrKzsKLQotICAgIHByaW50ZiggIiVkIChOVU1fU0VNQVBIT1JFUz0lZClcbiIsIGNvdW50ZXIsIE5VTV9TRU1BUEhPUkVTKTsKLQotICAgIGZvciAoOzspIHsKLSAgICAgICAgaW50ICByZXQgPSBmb3JrKCk7Ci0gICAgICAgIGludCAgc3RhdHVzOwotCi0gICAgICAgIGlmIChyZXQgPCAwKSB7Ci0gICAgICAgICAgICBwZXJyb3IoImZvcms6Iik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBpZiAocmV0ID09IDApIHsKLSAgICAgICAgICAgIC8qIGluIHRoZSBjaGlsZCAqLwotICAgICAgICAgICAgcmV0ID0gc2VtZ2V0KCAoa2V5X3QpY291bnRlciwgTlVNX1NFTUFQSE9SRVMsIElQQ19DUkVBVCApOwotICAgICAgICAgICAgaWYgKHJldCA8IDApIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJybm87Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIC8qIGluIHRoZSBwYXJlbnQgKi8KLSAgICAgICAgICAgIHJldCA9IHdhaXQoJnN0YXR1cyk7Ci0gICAgICAgICAgICBpZiAocmV0IDwgMCkgewotICAgICAgICAgICAgICAgIHBlcnJvcigid2FpdHBpZDoiKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChzdGF0dXMgIT0gMCkgewotICAgICAgICAgICAgICAgIHN0YXR1cyA9IFdFWElUU1RBVFVTKHN0YXR1cyk7Ci0gICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJjaGlsZCAlZCBGQUlMIGF0IGNvdW50ZXI9JWQ6ICVkXG4iLCByZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50ZXIsIHN0YXR1cyk7Ci0gICAgICAgICAgICAgICAgaWYgKCsrZmFpbHMgPj0gTUFYX0ZBSUxTKQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGNvdW50ZXIrKzsKLSAgICAgICAgaWYgKChjb3VudGVyICUgMTAwMCkgPT0gMCkgewotICAgICAgICAgICAgcHJpbnRmKCIlZFxuIiwgY291bnRlcik7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGNvdW50ZXIgPT0gSVBDX1BSSVZBVEUpCi0gICAgICAgICAgICBjb3VudGVyKys7Ci0gICAgfQotICAgIHJldHVybiAwOwotfQotLS0tLS0tLS0tLS0tLS0tIGN1dCBoZXJlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1JZiB5b3UgcnVuIGl0IG9uIGEgdHlwaWNhbCBMaW51eCBkaXN0cmlidXRpb24gdG9kYXksIHlvdSdsbCBkaXNjb3ZlciB0aGF0IGl0Ci13aWxsIHF1aWNrbHkgZmlsbCB1cCB0aGUga2VybmVsJ3MgdGFibGUgb2YgdW5pcXVlIGtleV90IHZhbHVlcywgYW5kIHRoYXQKLXN0cmFuZ2UgdGhpbmdzIHdpbGwgaGFwcGVuIGluIHNvbWUgcGFydHMgb2YgdGhlIHN5c3RlbSwgYnV0IG5vdCBhbGwuCi0KLShZb3UgY2FuIHVzZSB0aGUgImlwY3MgLXUiIGNvbW1hbmQgdG8gZ2V0IGEgc3VtbWFyeSBkZXNjcmliaW5nIHRoZSBrZXJuZWwKLSB0YWJsZXMgYW5kIHRoZWlyIGFsbG9jYXRpb25zKQotCi1Gb3IgZXhhbXBsZSwgaW4gb3VyIGV4cGVyaWVuY2UsIGFueXRoaW5nIHByb2dyYW0gbGF1bmNoZWQgYWZ0ZXIgdGhhdCB0aGF0Ci1jYWxscyBzdHJlcnJvcigpIHdpbGwgc2ltcGx5IGNyYXNoLiBUaGUgVVNCIHN1Yi1zeXN0ZW0gc3RhcnRzIHNwb3V0dGluZyB3ZWlyZAotZXJyb3JzIHRvIHRoZSBzeXN0ZW0gY29uc29sZSwgZXRjLi4uCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvYXIuaCBiL2xpYmMvaW5jbHVkZS9hci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzNTI5MGIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2luY2x1ZGUvYXIuaApAQCAtMCwwICsxLDY2IEBACisvKgkkT3BlbkJTRDogYXIuaCx2IDEuMyAyMDAzLzA2LzAyIDE5OjM0OjEyIG1pbGxlcnQgRXhwICQJKi8KKy8qCSROZXRCU0Q6IGFyLmgsdiAxLjQgMTk5NC8xMC8yNiAwMDo1NTo0MyBjZ2QgRXhwICQJKi8KKworLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTEsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogKGMpIFVOSVggU3lzdGVtIExhYm9yYXRvcmllcywgSW5jLgorICogQWxsIG9yIHNvbWUgcG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBkZXJpdmVkIGZyb20gbWF0ZXJpYWwgbGljZW5zZWQKKyAqIHRvIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEgYnkgQW1lcmljYW4gVGVsZXBob25lIGFuZCBUZWxlZ3JhcGgKKyAqIENvLiBvciBVbml4IFN5c3RlbSBMYWJvcmF0b3JpZXMsIEluYy4gYW5kIGFyZSByZXByb2R1Y2VkIGhlcmVpbiB3aXRoCisgKiB0aGUgcGVybWlzc2lvbiBvZiBVTklYIFN5c3RlbSBMYWJvcmF0b3JpZXMsIEluYy4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5CisgKiBIdWdoIFNtaXRoIGF0IFRoZSBVbml2ZXJzaXR5IG9mIEd1ZWxwaC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKgorICoJQCgjKWFyLmgJOC4yIChCZXJrZWxleSkgMS8yMS85NAorICovCisKKyNpZm5kZWYgX0FSX0hfCisjZGVmaW5lCV9BUl9IXworCisvKiBQcmUtNEJTRCBhcmNoaXZlcyBoYWQgdGhlc2UgbWFnaWMgbnVtYmVycyBpbiB0aGVtLiAqLworI2RlZmluZQlPQVJNQUcxCTAxNzc1NTUKKyNkZWZpbmUJT0FSTUFHMgkwMTc3NTQ1CisKKyNkZWZpbmUJQVJNQUcJCSIhPGFyY2g+XG4iCS8qIGFyICJtYWdpYyBudW1iZXIiICovCisjZGVmaW5lCVNBUk1BRwkJOAkJLyogc3RybGVuKEFSTUFHKTsgKi8KKworI2RlZmluZQlBUl9FRk1UMQkiIzEvIgkJLyogZXh0ZW5kZWQgZm9ybWF0ICMxICovCisKK3N0cnVjdCBhcl9oZHIgeworCWNoYXIgYXJfbmFtZVsxNl07CQkvKiBuYW1lICovCisJY2hhciBhcl9kYXRlWzEyXTsJCS8qIG1vZGlmaWNhdGlvbiB0aW1lICovCisJY2hhciBhcl91aWRbNl07CQkJLyogdXNlciBpZCAqLworCWNoYXIgYXJfZ2lkWzZdOwkJCS8qIGdyb3VwIGlkICovCisJY2hhciBhcl9tb2RlWzhdOwkJLyogb2N0YWwgZmlsZSBwZXJtaXNzaW9ucyAqLworCWNoYXIgYXJfc2l6ZVsxMF07CQkvKiBzaXplIGluIGJ5dGVzICovCisjZGVmaW5lCUFSRk1BRwkiYFxuIgorCWNoYXIgYXJfZm1hZ1syXTsJCS8qIGNvbnNpc3RlbmN5IGNoZWNrICovCit9OworCisjZW5kaWYgLyogIV9BUl9IXyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL2FycGEvaW5ldC5oIGIvbGliYy9pbmNsdWRlL2FycGEvaW5ldC5oCmluZGV4IGU3OGU3YzUuLmIwMDg4MTIgMTAwNjQ0Ci0tLSBhL2xpYmMvaW5jbHVkZS9hcnBhL2luZXQuaAorKysgYi9saWJjL2luY2x1ZGUvYXJwYS9pbmV0LmgKQEAgLTQyLDcgKzQyLDcgQEAKIGV4dGVybiBjaGFyKiAgICAgICAgIGluZXRfbnRvYShzdHJ1Y3QgaW5fYWRkcik7CiAKIGV4dGVybiBpbnQgICAgICAgICAgIGluZXRfcHRvbihpbnQsIGNvbnN0IGNoYXIgKiwgdm9pZCAqKTsKLWV4dGVybiBjb25zdCBjaGFyKiAgIGluZXRfbnRvcChpbnQsIGNvbnN0IHZvaWQgKiwgY2hhciAqLCBzaXplX3QpOworZXh0ZXJuIGNvbnN0IGNoYXIqICAgaW5ldF9udG9wKGludCwgY29uc3Qgdm9pZCAqLCBjaGFyICosIHNvY2tsZW5fdCk7CiAKIGV4dGVybiB1bnNpZ25lZCBpbnQgIGluZXRfbnNhcF9hZGRyKGNvbnN0IGNoYXIgKiwgdW5zaWduZWQgY2hhciAqLCBpbnQpOwogZXh0ZXJuIGNoYXIqICAgICAgICAgaW5ldF9uc2FwX250b2EoaW50LCBjb25zdCB1bnNpZ25lZCBjaGFyICosIGNoYXIgKik7CmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvZGlyZW50LmggYi9saWJjL2luY2x1ZGUvZGlyZW50LmgKaW5kZXggNTVlZWY3Yi4uM2JkN2EwZiAxMDA2NDQKLS0tIGEvbGliYy9pbmNsdWRlL2RpcmVudC5oCisrKyBiL2xpYmMvaW5jbHVkZS9kaXJlbnQuaApAQCAtNDUsMzQgKzQ1LDMwIEBACiAjZGVmaW5lICBEVF9XSFQgICAgICAgICAxNAogI2VuZGlmCiAKLS8qIHRoZSBmb2xsb3dpbmcgc3RydWN0dXJlIGlzIHJlYWxseSBjYWxsZWQgZGlyZW50NjQgYnkgdGhlIGtlcm5lbAotICogaGVhZGVycy4gVGhleSBhbHNvIGRlZmluZSBhIHN0cnVjdCBkaXJlbnQsIGJ1dCB0aGUgbGF0dGVyIGxhY2sKLSAqIHRoZSBkX3R5cGUgZmllbGQgd2hpY2ggaXMgcmVxdWlyZWQgYnkgc29tZSBsaWJyYXJpZXMgKGUuZy4gaG90cGx1ZykKLSAqIHdobyBhc3N1bWUgdG8gYmUgYWJsZSB0byBhY2Nlc3MgaXQgZGlyZWN0bHkuIHNhZC4uLgotICovCiBzdHJ1Y3QgZGlyZW50IHsKLSAgICB1aW50NjRfdCAgICAgICAgIGRfaW5vOwotICAgIGludDY0X3QgICAgICAgICAgZF9vZmY7Ci0gICAgdW5zaWduZWQgc2hvcnQgICBkX3JlY2xlbjsKLSAgICB1bnNpZ25lZCBjaGFyICAgIGRfdHlwZTsKLSAgICBjaGFyICAgICAgICAgICAgIGRfbmFtZVsyNTZdOworICB1aW50NjRfdCAgICAgICAgIGRfaW5vOworICBpbnQ2NF90ICAgICAgICAgIGRfb2ZmOworICB1bnNpZ25lZCBzaG9ydCAgIGRfcmVjbGVuOworICB1bnNpZ25lZCBjaGFyICAgIGRfdHlwZTsKKyAgY2hhciAgICAgICAgICAgICBkX25hbWVbMjU2XTsKIH07CiAKLXR5cGVkZWYgc3RydWN0IERJUiAgRElSOwordHlwZWRlZiBzdHJ1Y3QgRElSIERJUjsKKworZXh0ZXJuICBESVIqICAgICAgICAgICAgIG9wZW5kaXIoY29uc3QgY2hhciogZGlycGF0aCk7CitleHRlcm4gIERJUiogICAgICAgICAgICAgZmRvcGVuZGlyKGludCBmZCk7CitleHRlcm4gIHN0cnVjdCBkaXJlbnQqICAgcmVhZGRpcihESVIqIGRpcnApOworZXh0ZXJuICBpbnQgICAgICAgICAgICAgIHJlYWRkaXJfcihESVIqICBkaXJwLCBzdHJ1Y3QgZGlyZW50KiBlbnRyeSwgc3RydWN0IGRpcmVudCoqIHJlc3VsdCk7CitleHRlcm4gIGludCAgICAgICAgICAgICAgY2xvc2VkaXIoRElSKiBkaXJwKTsKK2V4dGVybiAgdm9pZCAgICAgICAgICAgICByZXdpbmRkaXIoRElSKiBkaXJwKTsKK2V4dGVybiAgaW50ICAgICAgICAgICAgICBkaXJmZChESVIqIGRpcnApOworZXh0ZXJuICBpbnQgICAgICAgICAgICAgIGFscGhhc29ydChjb25zdCBzdHJ1Y3QgZGlyZW50KiogYSwgY29uc3Qgc3RydWN0IGRpcmVudCoqIGIpOworZXh0ZXJuICBpbnQgICAgICAgICAgICAgIHNjYW5kaXIoY29uc3QgY2hhciogZGlyLCBzdHJ1Y3QgZGlyZW50KioqIG5hbWVsaXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50KCpmaWx0ZXIpKGNvbnN0IHN0cnVjdCBkaXJlbnQqKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCgqY29tcGFyKShjb25zdCBzdHJ1Y3QgZGlyZW50KiosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IGRpcmVudCoqKSk7CiAKIGV4dGVybiAgaW50ICAgICAgICAgICAgICBnZXRkZW50cyh1bnNpZ25lZCBpbnQsIHN0cnVjdCBkaXJlbnQqLCB1bnNpZ25lZCBpbnQpOwotZXh0ZXJuICBESVIqICAgICAgICAgICAgIG9wZW5kaXIoY29uc3QgY2hhciogIGRpcnBhdGgpOwotZXh0ZXJuICBESVIqICAgICAgICAgICAgIGZkb3BlbmRpcihpbnQgZmQpOwotZXh0ZXJuICBzdHJ1Y3QgZGlyZW50KiAgIHJlYWRkaXIoRElSKiAgZGlycCk7Ci1leHRlcm4gIGludCAgICAgICAgICAgICAgcmVhZGRpcl9yKERJUiogIGRpcnAsIHN0cnVjdCBkaXJlbnQgKmVudHJ5LCBzdHJ1Y3QgZGlyZW50ICoqcmVzdWx0KTsKLWV4dGVybiAgaW50ICAgICAgICAgICAgICBjbG9zZWRpcihESVIqICBkaXJwKTsKLWV4dGVybiAgdm9pZCAgICAgICAgICAgICByZXdpbmRkaXIoRElSICpkaXJwKTsKLWV4dGVybiAgaW50ICAgICAgICAgICAgICBkaXJmZChESVIqIGRpcnApOwotZXh0ZXJuICBpbnQgICAgICAgICAgICAgIGFscGhhc29ydChjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiKTsKLWV4dGVybiAgaW50ICAgICAgICAgICAgICBzY2FuZGlyKGNvbnN0IGNoYXIgKmRpciwgc3RydWN0IGRpcmVudCAqKipuYW1lbGlzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCgqZmlsdGVyKShjb25zdCBzdHJ1Y3QgZGlyZW50ICopLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50KCpjb21wYXIpKGNvbnN0IHN0cnVjdCBkaXJlbnQgKiosIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBkaXJlbnQgKiopKTsKIAogX19FTkRfREVDTFMKIApkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL2VsZi5oIGIvbGliYy9pbmNsdWRlL2VsZi5oCmluZGV4IGMzZTMyMjYuLmFjMGYxZDIgMTAwNjQ0Ci0tLSBhL2xpYmMvaW5jbHVkZS9lbGYuaAorKysgYi9saWJjL2luY2x1ZGUvZWxmLmgKQEAgLTI4LDggKzI4LDIzIEBACiAjaWZuZGVmIF9FTEZfSAogI2RlZmluZSBfRUxGX0gKIAorI2luY2x1ZGUgPHN0ZGludC5oPgogI2luY2x1ZGUgPGxpbnV4L2F1eHZlYy5oPgogI2luY2x1ZGUgPHN5cy9leGVjX2VsZi5oPgogCit0eXBlZGVmIHN0cnVjdCB7CisgIHVpbnQzMl90IGFfdHlwZTsKKyAgdW5pb24geworICAgIHVpbnQzMl90IGFfdmFsOworICB9IGFfdW47Cit9IEVsZjMyX2F1eHZfdDsKKwordHlwZWRlZiBzdHJ1Y3QgeworICB1aW50NjRfdCBhX3R5cGU7CisgIHVuaW9uIHsKKyAgICB1aW50NjRfdCBhX3ZhbDsKKyAgfSBhX3VuOworfSBFbGY2NF9hdXh2X3Q7CisKICNlbmRpZiAvKiBfRUxGX0ggKi8KIApkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL2Vyci5oIGIvbGliYy9pbmNsdWRlL2Vyci5oCmluZGV4IDE2MzZlZmUuLmYyNGRhNjEgMTAwNjQ0Ci0tLSBhL2xpYmMvaW5jbHVkZS9lcnIuaAorKysgYi9saWJjL2luY2x1ZGUvZXJyLmgKQEAgLTQ4LDQyICs0OCw0MiBAQAogX19CRUdJTl9ERUNMUwogCiBfX25vcmV0dXJuIHZvaWQJZXJyKGludCwgY29uc3QgY2hhciAqLCAuLi4pCi0JCQlfX2F0dHJpYnV0ZV9fKChfX2Zvcm1hdF9fIChwcmludGYsIDIsIDMpKSk7CisJCQlfX3ByaW50Zmxpa2UoMiwgMyk7CiBfX25vcmV0dXJuIHZvaWQJdmVycihpbnQsIGNvbnN0IGNoYXIgKiwgX192YV9saXN0KQotCQkJX19hdHRyaWJ1dGVfXygoX19mb3JtYXRfXyAocHJpbnRmLCAyLCAwKSkpOworCQkJX19wcmludGZsaWtlKDIsIDApOwogX19ub3JldHVybiB2b2lkCWVycngoaW50LCBjb25zdCBjaGFyICosIC4uLikKLQkJCV9fYXR0cmlidXRlX18oKF9fZm9ybWF0X18gKHByaW50ZiwgMiwgMykpKTsKKwkJCV9fcHJpbnRmbGlrZSgyLCAzKTsKIF9fbm9yZXR1cm4gdm9pZAl2ZXJyeChpbnQsIGNvbnN0IGNoYXIgKiwgX192YV9saXN0KQotCQkJX19hdHRyaWJ1dGVfXygoX19mb3JtYXRfXyAocHJpbnRmLCAyLCAwKSkpOworCQkJX19wcmludGZsaWtlKDIsIDApOwogdm9pZAkJd2Fybihjb25zdCBjaGFyICosIC4uLikKLQkJCV9fYXR0cmlidXRlX18oKF9fZm9ybWF0X18gKHByaW50ZiwgMSwgMikpKTsKKwkJCV9fcHJpbnRmbGlrZSgxLCAyKTsKIHZvaWQJCXZ3YXJuKGNvbnN0IGNoYXIgKiwgX192YV9saXN0KQotCQkJX19hdHRyaWJ1dGVfXygoX19mb3JtYXRfXyAocHJpbnRmLCAxLCAwKSkpOworCQkJX19wcmludGZsaWtlKDEsIDApOwogdm9pZAkJd2FybngoY29uc3QgY2hhciAqLCAuLi4pCi0JCQlfX2F0dHJpYnV0ZV9fKChfX2Zvcm1hdF9fIChwcmludGYsIDEsIDIpKSk7CisJCQlfX3ByaW50Zmxpa2UoMSwgMik7CiB2b2lkCQl2d2FybngoY29uc3QgY2hhciAqLCBfX3ZhX2xpc3QpCi0JCQlfX2F0dHJpYnV0ZV9fKChfX2Zvcm1hdF9fIChwcmludGYsIDEsIDApKSk7CisJCQlfX3ByaW50Zmxpa2UoMSwgMCk7CiAKIC8qCiAgKiBUaGUgXyogdmVyc2lvbnMgYXJlIGZvciB1c2UgaW4gbGlicmFyeSBmdW5jdGlvbnMgc28gdXNlci1kZWZpbmVkCiAgKiB2ZXJzaW9ucyBvZiBlcnIqLHdhcm4qIGRvIG5vdCBnZXQgdXNlZC4KICAqLwogX19ub3JldHVybiB2b2lkCV9lcnIoaW50LCBjb25zdCBjaGFyICosIC4uLikKLQkJCV9fYXR0cmlidXRlX18oKF9fZm9ybWF0X18gKHByaW50ZiwgMiwgMykpKTsKKwkJCV9fcHJpbnRmbGlrZSgyLCAzKTsKIF9fbm9yZXR1cm4gdm9pZAlfdmVycihpbnQsIGNvbnN0IGNoYXIgKiwgX192YV9saXN0KQotCQkJX19hdHRyaWJ1dGVfXygoX19mb3JtYXRfXyAocHJpbnRmLCAyLCAwKSkpOworCQkJX19wcmludGZsaWtlKDIsIDApOwogX19ub3JldHVybiB2b2lkCV9lcnJ4KGludCwgY29uc3QgY2hhciAqLCAuLi4pCi0JCQlfX2F0dHJpYnV0ZV9fKChfX2Zvcm1hdF9fIChwcmludGYsIDIsIDMpKSk7CisJCQlfX3ByaW50Zmxpa2UoMiwgMyk7CiBfX25vcmV0dXJuIHZvaWQJX3ZlcnJ4KGludCwgY29uc3QgY2hhciAqLCBfX3ZhX2xpc3QpCi0JCQlfX2F0dHJpYnV0ZV9fKChfX2Zvcm1hdF9fIChwcmludGYsIDIsIDApKSk7CisJCQlfX3ByaW50Zmxpa2UoMiwgMCk7CiB2b2lkCQlfd2Fybihjb25zdCBjaGFyICosIC4uLikKLQkJCV9fYXR0cmlidXRlX18oKF9fZm9ybWF0X18gKHByaW50ZiwgMSwgMikpKTsKKwkJCV9fcHJpbnRmbGlrZSgxLCAyKTsKIHZvaWQJCV92d2Fybihjb25zdCBjaGFyICosIF9fdmFfbGlzdCkKLQkJCV9fYXR0cmlidXRlX18oKF9fZm9ybWF0X18gKHByaW50ZiwgMSwgMCkpKTsKKwkJCV9fcHJpbnRmbGlrZSgxLCAwKTsKIHZvaWQJCV93YXJueChjb25zdCBjaGFyICosIC4uLikKLQkJCV9fYXR0cmlidXRlX18oKF9fZm9ybWF0X18gKHByaW50ZiwgMSwgMikpKTsKKwkJCV9fcHJpbnRmbGlrZSgxLCAyKTsKIHZvaWQJCV92d2FybngoY29uc3QgY2hhciAqLCBfX3ZhX2xpc3QpCi0JCQlfX2F0dHJpYnV0ZV9fKChfX2Zvcm1hdF9fIChwcmludGYsIDEsIDApKSk7CisJCQlfX3ByaW50Zmxpa2UoMSwgMCk7CiAKIF9fRU5EX0RFQ0xTCiAKZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9lcnJuby5oIGIvbGliYy9pbmNsdWRlL2Vycm5vLmgKaW5kZXggMmIyNjg1YS4uMmU1Y2U1ZiAxMDA2NDQKLS0tIGEvbGliYy9pbmNsdWRlL2Vycm5vLmgKKysrIGIvbGliYy9pbmNsdWRlL2Vycm5vLmgKQEAgLTM2LDE0ICszNiwxMCBAQAogLyogb24gTGludXgsIEVOT1RTVVAgYW5kIEVPUE5PVFNVUFAgYXJlIGRlZmluZWQgYXMgdGhlIHNhbWUgZXJyb3IgY29kZQogICogZXZlbiBpZiAxMDAwLjMgc3RhdGVzIHRoYXQgdGhleSBzaG91bGQgYmUgZGlmZmVyZW50CiAgKi8KLSNpZm5kZWYgIEVOT1RVUAorI2lmbmRlZiAgRU5PVFNVUAogI2RlZmluZSAgRU5PVFNVUCAgRU9QTk9UU1VQUAogI2VuZGlmCiAKLS8qIGludGVybmFsIGZ1bmN0aW9uIHRoYXQgc2hvdWxkICpvbmx5KiBiZSBjYWxsZWQgZnJvbSBzeXN0ZW0gY2FsbHMgKi8KLS8qIHVzZSBlcnJubyA9IHh4eHggaW5zdGVhZCBpbiBDIGNvZGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLWV4dGVybiBpbnQgICAgX19zZXRfZXJybm8oaW50ICBlcnJvcik7Ci0KIC8qIGludGVybmFsIGZ1bmN0aW9uIHJldHVybmluZyB0aGUgYWRkcmVzcyBvZiB0aGUgdGhyZWFkLXNwZWNpZmljIGVycm5vICovCiBleHRlcm4gdm9sYXRpbGUgaW50KiAgIF9fZXJybm8odm9pZCk7CiAKZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9mY250bC5oIGIvbGliYy9pbmNsdWRlL2ZjbnRsLmgKaW5kZXggNzIxOWRkNy4uM2NiM2Q4YSAxMDA2NDQKLS0tIGEvbGliYy9pbmNsdWRlL2ZjbnRsLmgKKysrIGIvbGliYy9pbmNsdWRlL2ZjbnRsLmgKQEAgLTQ5LDYgKzQ5LDU3IEBACiBleHRlcm4gaW50ICBmY250bChpbnQgICBmZCwgaW50ICAgY29tbWFuZCwgLi4uKTsKIGV4dGVybiBpbnQgIGNyZWF0KGNvbnN0IGNoYXIqICBwYXRoLCBtb2RlX3QgIG1vZGUpOwogCisjaWYgZGVmaW5lZChfX0JJT05JQ19GT1JUSUZZKSAmJiAhZGVmaW5lZChfX2NsYW5nX18pCitfX2Vycm9yZGVjbChfX2NyZWF0X21pc3NpbmdfbW9kZSwgImNhbGxlZCB3aXRoIE9fQ1JFQVQsIGJ1dCBtaXNzaW5nIG1vZGUiKTsKK19fZXJyb3JkZWNsKF9fY3JlYXRfdG9vX21hbnlfYXJncywgInRvbyBtYW55IGFyZ3VtZW50cyIpOworZXh0ZXJuIGludCBfX29wZW5fcmVhbChjb25zdCBjaGFyICpwYXRobmFtZSwgaW50IGZsYWdzLCAuLi4pCisgICAgX19hc21fXyhfX1VTRVJfTEFCRUxfUFJFRklYX18gIm9wZW4iKTsKK2V4dGVybiBpbnQgX19vcGVuXzIoY29uc3QgY2hhciAqLCBpbnQpOworCitfX0JJT05JQ19GT1JUSUZZX0lOTElORQoraW50IG9wZW4oY29uc3QgY2hhciAqcGF0aG5hbWUsIGludCBmbGFncywgLi4uKSB7CisgICAgaWYgKF9fYnVpbHRpbl9jb25zdGFudF9wKGZsYWdzKSkgeworICAgICAgICBpZiAoKGZsYWdzICYgT19DUkVBVCkgJiYgX19idWlsdGluX3ZhX2FyZ19wYWNrX2xlbigpID09IDApIHsKKyAgICAgICAgICAgIF9fY3JlYXRfbWlzc2luZ19tb2RlKCk7ICAvLyBjb21waWxlIHRpbWUgZXJyb3IKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChfX2J1aWx0aW5fdmFfYXJnX3BhY2tfbGVuKCkgPiAxKSB7CisgICAgICAgIF9fY3JlYXRfdG9vX21hbnlfYXJncygpOyAgLy8gY29tcGlsZSB0aW1lIGVycm9yCisgICAgfQorCisgICAgaWYgKChfX2J1aWx0aW5fdmFfYXJnX3BhY2tfbGVuKCkgPT0gMCkgJiYgIV9fYnVpbHRpbl9jb25zdGFudF9wKGZsYWdzKSkgeworICAgICAgICByZXR1cm4gX19vcGVuXzIocGF0aG5hbWUsIGZsYWdzKTsKKyAgICB9CisKKyAgICByZXR1cm4gX19vcGVuX3JlYWwocGF0aG5hbWUsIGZsYWdzLCBfX2J1aWx0aW5fdmFfYXJnX3BhY2soKSk7Cit9CisKK2V4dGVybiBpbnQgX19vcGVuYXRfMihpbnQsIGNvbnN0IGNoYXIgKiwgaW50KTsKK2V4dGVybiBpbnQgX19vcGVuYXRfcmVhbChpbnQgZGlyZmQsIGNvbnN0IGNoYXIgKnBhdGhuYW1lLCBpbnQgZmxhZ3MsIC4uLikKKyAgICBfX2FzbV9fKF9fVVNFUl9MQUJFTF9QUkVGSVhfXyAib3BlbmF0Iik7CisKK19fQklPTklDX0ZPUlRJRllfSU5MSU5FCitpbnQgb3BlbmF0KGludCBkaXJmZCwgY29uc3QgY2hhciAqcGF0aG5hbWUsIGludCBmbGFncywgLi4uKSB7CisgICAgaWYgKF9fYnVpbHRpbl9jb25zdGFudF9wKGZsYWdzKSkgeworICAgICAgICBpZiAoKGZsYWdzICYgT19DUkVBVCkgJiYgX19idWlsdGluX3ZhX2FyZ19wYWNrX2xlbigpID09IDApIHsKKyAgICAgICAgICAgIF9fY3JlYXRfbWlzc2luZ19tb2RlKCk7ICAvLyBjb21waWxlIHRpbWUgZXJyb3IKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChfX2J1aWx0aW5fdmFfYXJnX3BhY2tfbGVuKCkgPiAxKSB7CisgICAgICAgIF9fY3JlYXRfdG9vX21hbnlfYXJncygpOyAgLy8gY29tcGlsZSB0aW1lIGVycm9yCisgICAgfQorCisgICAgaWYgKChfX2J1aWx0aW5fdmFfYXJnX3BhY2tfbGVuKCkgPT0gMCkgJiYgIV9fYnVpbHRpbl9jb25zdGFudF9wKGZsYWdzKSkgeworICAgICAgICByZXR1cm4gX19vcGVuYXRfMihkaXJmZCwgcGF0aG5hbWUsIGZsYWdzKTsKKyAgICB9CisKKyAgICByZXR1cm4gX19vcGVuYXRfcmVhbChkaXJmZCwgcGF0aG5hbWUsIGZsYWdzLCBfX2J1aWx0aW5fdmFfYXJnX3BhY2soKSk7Cit9CisKKyNlbmRpZiAvKiBkZWZpbmVkKF9fQklPTklDX0ZPUlRJRlkpICYmICFkZWZpbmVkKF9fY2xhbmdfXykgKi8KKwogX19FTkRfREVDTFMKIAogI2VuZGlmIC8qIF9GQ05UTF9IICovCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvZnR3LmggYi9saWJjL2luY2x1ZGUvZnR3LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2JlYmVhMwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvaW5jbHVkZS9mdHcuaApAQCAtMCwwICsxLDYyIEBACisvKiAkTmV0QlNEOiBmdHcuaCx2IDEuMSAyMDA1LzEyLzMwIDIzOjA3OjMzIGFnYyBFeHAgJCAqLworCisvKglGcm9tIE9wZW5CU0Q6IGZ0dy5oLHYgMS4xIDIwMDMvMDcvMjEgMjE6MTM6MTggbWlsbGVydCBFeHAgCSovCisKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDMgVG9kZCBDLiBNaWxsZXIgPFRvZGQuTWlsbGVyQGNvdXJ0ZXNhbi5jb20+CisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworICogV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKKyAqIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKKyAqIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisgKgorICogU3BvbnNvcmVkIGluIHBhcnQgYnkgdGhlIERlZmVuc2UgQWR2YW5jZWQgUmVzZWFyY2ggUHJvamVjdHMKKyAqIEFnZW5jeSAoREFSUEEpIGFuZCBBaXIgRm9yY2UgUmVzZWFyY2ggTGFib3JhdG9yeSwgQWlyIEZvcmNlCisgKiBNYXRlcmllbCBDb21tYW5kLCBVU0FGLCB1bmRlciBhZ3JlZW1lbnQgbnVtYmVyIEYzOTUwMi05OS0xLTA1MTIuCisgKi8KKworI2lmbmRlZglfRlRXX0gKKyNkZWZpbmUJX0ZUV19ICisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorCisvKgorICogVmFsaWQgZmxhZ3MgZm9yIHRoZSAzcmQgYXJndW1lbnQgdG8gdGhlIGZ1bmN0aW9uIHRoYXQgaXMgcGFzc2VkIGFzIHRoZQorICogc2Vjb25kIGFyZ3VtZW50IHRvIGZ0dygzKSBhbmQgbmZ0dygzKS4gIFNheSBpdCB0aHJlZSB0aW1lcyBmYXN0IQorICovCisjZGVmaW5lCUZUV19GCQkwCS8qIEZpbGUuICAqLworI2RlZmluZQlGVFdfRAkJMQkvKiBEaXJlY3RvcnkuICAqLworI2RlZmluZQlGVFdfRE5SCQkyCS8qIERpcmVjdG9yeSB3aXRob3V0IHJlYWQgcGVybWlzc2lvbi4gICovCisjZGVmaW5lCUZUV19EUAkJMwkvKiBEaXJlY3Rvcnkgd2l0aCBzdWJkaXJlY3RvcmllcyB2aXNpdGVkLiAgKi8KKyNkZWZpbmUJRlRXX05TCQk0CS8qIFVua25vd24gdHlwZTsgc3RhdCgpIGZhaWxlZC4gICovCisjZGVmaW5lCUZUV19TTAkJNQkvKiBTeW1ib2xpYyBsaW5rLiAgKi8KKyNkZWZpbmUJRlRXX1NMTgkJNgkvKiBTeW0gbGluayB0aGF0IG5hbWVzIGEgbm9uZXhpc3RlbnQgZmlsZS4gICovCisKKy8qCisgKiBGbGFncyBmb3IgdXNlIGFzIHRoZSA0dGggYXJndW1lbnQgdG8gbmZ0dygzKS4gIFRoZXNlIG1heSBiZSBPUmVkIHRvZ2V0aGVyLgorICovCisjZGVmaW5lCUZUV19QSFlTCTB4MDEJLyogUGh5c2ljYWwgd2FsaywgZG9uJ3QgZm9sbG93IHN5bSBsaW5rcy4gICovCisjZGVmaW5lCUZUV19NT1VOVAkweDAyCS8qIFRoZSB3YWxrIGRvZXMgbm90IGNyb3NzIGEgbW91bnQgcG9pbnQuICAqLworI2RlZmluZQlGVFdfREVQVEgJMHgwNAkvKiBTdWJkaXJzIHZpc2l0ZWQgYmVmb3JlIHRoZSBkaXIgaXRzZWxmLiAqLworI2RlZmluZQlGVFdfQ0hESVIJMHgwOAkvKiBDaGFuZ2UgdG8gYSBkaXJlY3RvcnkgYmVmb3JlIHJlYWRpbmcgaXQuICovCisKK3N0cnVjdCBGVFcgeworCWludCBiYXNlOworCWludCBsZXZlbDsKK307CisKK19fQkVHSU5fREVDTFMKK2ludAlmdHcoY29uc3QgY2hhciAqLCBpbnQgKCopKGNvbnN0IGNoYXIgKiwgY29uc3Qgc3RydWN0IHN0YXQgKiwgaW50KSwgaW50KTsKK2ludAluZnR3KGNvbnN0IGNoYXIgKiwgaW50ICgqKShjb25zdCBjaGFyICosIGNvbnN0IHN0cnVjdCBzdGF0ICosIGludCwKKwkgICAgc3RydWN0IEZUVyAqKSwgaW50LCBpbnQpOworX19FTkRfREVDTFMKKworI2VuZGlmCS8qICFfRlRXX0ggKi8KZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9nZXRvcHQuaCBiL2xpYmMvaW5jbHVkZS9nZXRvcHQuaAppbmRleCA1NmYxOTgzLi40NDUxOTQxIDEwMDY0NAotLS0gYS9saWJjL2luY2x1ZGUvZ2V0b3B0LmgKKysrIGIvbGliYy9pbmNsdWRlL2dldG9wdC5oCkBAIC0xLDUgKzEsNSBAQAotLyoJJE9wZW5CU0Q6IGdldG9wdC5oLHYgMS4xIDIwMDIvMTIvMDMgMjA6MjQ6MjkgbWlsbGVydCBFeHAgJAkqLwogLyoJJE5ldEJTRDogZ2V0b3B0LmgsdiAxLjQgMjAwMC8wNy8wNyAxMDo0Mzo1NCBhZCBFeHAgJAkqLworLyoJJEZyZWVCU0QkICovCiAKIC8qLQogICogQ29weXJpZ2h0IChjKSAyMDAwIFRoZSBOZXRCU0QgRm91bmRhdGlvbiwgSW5jLgpAQCAtMTYsMTMgKzE2LDYgQEAKICAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CiAgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCiAgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCi0gKiAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6Ci0gKiAgICAgICAgVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgTmV0QlNECi0gKiAgICAgICAgRm91bmRhdGlvbiwgSW5jLiBhbmQgaXRzIGNvbnRyaWJ1dG9ycy4KLSAqIDQuIE5laXRoZXIgdGhlIG5hbWUgb2YgVGhlIE5ldEJTRCBGb3VuZGF0aW9uIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KICAqCiAgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBORVRCU0QgRk9VTkRBVElPTiwgSU5DLiBBTkQgQ09OVFJJQlVUT1JTCiAgKiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQKQEAgLTQzLDcgKzM2LDggQEAKICNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KIAogLyoKLSAqIEdOVS1saWtlIGdldG9wdF9sb25nKCkgYW5kIDQuNEJTRCBnZXRzdWJvcHQoKS9vcHRyZXNldCBleHRlbnNpb25zCisgKiBHTlUtbGlrZSBnZXRvcHRfbG9uZygpL2dldG9wdF9sb25nX29ubHkoKSB3aXRoIDQuNEJTRCBvcHRyZXNldCBleHRlbnNpb24uCisgKiBnZXRvcHQoKSBpcyBkZWNsYXJlZCBoZXJlIHRvbyBmb3IgR05VIHByb2dyYW1zLgogICovCiAjZGVmaW5lIG5vX2FyZ3VtZW50ICAgICAgICAwCiAjZGVmaW5lIHJlcXVpcmVkX2FyZ3VtZW50ICAxCkBAIC02NCwyNiArNTgsMjAgQEAKIH07CiAKIF9fQkVHSU5fREVDTFMKLWludAkgZ2V0b3B0X2xvbmcoaW50LCBjaGFyICogY29uc3QgKiwgY29uc3QgY2hhciAqLAotCSAgICBjb25zdCBzdHJ1Y3Qgb3B0aW9uICosIGludCAqKTsKLWludAkgZ2V0b3B0X2xvbmdfb25seShpbnQsIGNoYXIgKiBjb25zdCAqLCBjb25zdCBjaGFyICosCi0JICAgIGNvbnN0IHN0cnVjdCBvcHRpb24gKiwgaW50ICopOwotI2lmbmRlZiBfR0VUT1BUX0RFRklORURfCi0jZGVmaW5lIF9HRVRPUFRfREVGSU5FRF8KLWludAkgZ2V0b3B0KGludCwgY2hhciAqIGNvbnN0ICosIGNvbnN0IGNoYXIgKik7CitpbnQJZ2V0b3B0X2xvbmcoaW50LCBjaGFyICogY29uc3QgKiwgY29uc3QgY2hhciAqLAorCWNvbnN0IHN0cnVjdCBvcHRpb24gKiwgaW50ICopOworaW50CWdldG9wdF9sb25nX29ubHkoaW50LCBjaGFyICogY29uc3QgKiwgY29uc3QgY2hhciAqLAorCWNvbnN0IHN0cnVjdCBvcHRpb24gKiwgaW50ICopOworI2lmbmRlZiBfR0VUT1BUX0RFQ0xBUkVECisjZGVmaW5lCV9HRVRPUFRfREVDTEFSRUQKK2ludAkgZ2V0b3B0KGludCwgY2hhciAqIGNvbnN0IFtdLCBjb25zdCBjaGFyICopOwogCi0KLWV4dGVybiAgIGNoYXIgKm9wdGFyZzsgICAgICAgICAgICAgICAgICAvKiBnZXRvcHQoMykgZXh0ZXJuYWwgdmFyaWFibGVzICovCi1leHRlcm4gICBpbnQgb3B0ZXJyOwotZXh0ZXJuICAgaW50IG9wdGluZDsKLWV4dGVybiAgIGludCBvcHRvcHQ7Ci1leHRlcm4gICBpbnQgb3B0cmVzZXQ7Ci0KLSNpZiAwIC8qIE1JU1NJTkcgRlJPTSBCSU9OSUMgKi8KLWludCAgICAgICBnZXRzdWJvcHQoY2hhciAqKiwgY2hhciAqIGNvbnN0ICosIGNoYXIgKiopOwotZXh0ZXJuICAgY2hhciAqc3Vib3B0YXJnOyAgICAgICAgICAgICAgIC8qIGdldHN1Ym9wdCgzKSBleHRlcm5hbCB2YXJpYWJsZSAqLwotI2VuZGlmIC8qIE1JU1NJTkcgKi8KLQorZXh0ZXJuIGNoYXIgKm9wdGFyZzsJCQkvKiBnZXRvcHQoMykgZXh0ZXJuYWwgdmFyaWFibGVzICovCitleHRlcm4gaW50IG9wdGluZCwgb3B0ZXJyLCBvcHRvcHQ7CisjZW5kaWYKKyNpZm5kZWYgX09QVFJFU0VUX0RFQ0xBUkVECisjZGVmaW5lCV9PUFRSRVNFVF9ERUNMQVJFRAorZXh0ZXJuIGludCBvcHRyZXNldDsJCQkvKiBnZXRvcHQoMykgZXh0ZXJuYWwgdmFyaWFibGUgKi8KICNlbmRpZgogX19FTkRfREVDTFMKICAKZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9pbnR0eXBlcy5oIGIvbGliYy9pbmNsdWRlL2ludHR5cGVzLmgKaW5kZXggODFkMjMxNS4uNzNiMjJkYiAxMDA2NDQKLS0tIGEvbGliYy9pbmNsdWRlL2ludHR5cGVzLmgKKysrIGIvbGliYy9pbmNsdWRlL2ludHR5cGVzLmgKQEAgLTU2LDcgKzU2LDcgQEAKICNkZWZpbmUJUFJJZEZBU1Q2NAkJImxsZCIJCS8qIGludF9mYXN0NjRfdCAqLwogCiAjZGVmaW5lCVBSSWRNQVgJCQkiamQiCQkvKiBpbnRtYXhfdCAqLwotI2RlZmluZQlQUklkUFRSCQkJImxkIgkJLyogaW50cHRyX3QgKi8KKyNkZWZpbmUJUFJJZFBUUgkJCSJkIgkJLyogaW50cHRyX3QgKi8KIAogI2RlZmluZQlQUklpOAkJCSJpIgkJLyogaW50OF90ICovCiAjZGVmaW5lCVBSSWkxNgkJCSJpIgkJLyogaW50MTZfdCAqLwpAQCAtNzQsNyArNzQsNyBAQAogI2RlZmluZQlQUklpRkFTVDY0CQkibGxpIgkJLyogaW50X2Zhc3Q2NF90ICovCiAKICNkZWZpbmUJUFJJaU1BWAkJCSJqaSIJCS8qIGludG1heF90ICovCi0jZGVmaW5lCVBSSWlQVFIJCQkibGkiCQkvKiBpbnRwdHJfdCAqLworI2RlZmluZQlQUklpUFRSCQkJImkiCQkvKiBpbnRwdHJfdCAqLwogCiAvKiBmcHJpbnRmIG1hY3JvcyBmb3IgdW5zaWduZWQgaW50ZWdlcnMgKi8KICNkZWZpbmUJUFJJbzgJCQkibyIJCS8qIGludDhfdCAqLwpAQCAtOTMsNyArOTMsNyBAQAogI2RlZmluZQlQUklvRkFTVDY0CQkibGxvIgkJLyogaW50X2Zhc3Q2NF90ICovCiAKICNkZWZpbmUJUFJJb01BWAkJCSJqbyIJCS8qIGludG1heF90ICovCi0jZGVmaW5lCVBSSW9QVFIJCQkibG8iCQkvKiBpbnRwdHJfdCAqLworI2RlZmluZQlQUklvUFRSCQkJIm8iCQkvKiBpbnRwdHJfdCAqLwogCiAjZGVmaW5lCVBSSXU4CQkJInUiCQkvKiB1aW50OF90ICovCiAjZGVmaW5lCVBSSXUxNgkJCSJ1IgkJLyogdWludDE2X3QgKi8KQEAgLTExMSw3ICsxMTEsNyBAQAogI2RlZmluZQlQUkl1RkFTVDY0CQkibGx1IgkJLyogdWludF9mYXN0NjRfdCAqLwogCiAjZGVmaW5lCVBSSXVNQVgJCQkianUiCQkvKiB1aW50bWF4X3QgKi8KLSNkZWZpbmUJUFJJdVBUUgkJCSJsdSIJCS8qIHVpbnRwdHJfdCAqLworI2RlZmluZQlQUkl1UFRSCQkJInUiCQkvKiB1aW50cHRyX3QgKi8KIAogI2RlZmluZQlQUkl4OAkJCSJ4IgkJLyogdWludDhfdCAqLwogI2RlZmluZQlQUkl4MTYJCQkieCIJCS8qIHVpbnQxNl90ICovCkBAIC0xMjksNyArMTI5LDcgQEAKICNkZWZpbmUJUFJJeEZBU1Q2NAkJImxseCIJCS8qIHVpbnRfZmFzdDY0X3QgKi8KIAogI2RlZmluZQlQUkl4TUFYCQkJImp4IgkJLyogdWludG1heF90ICovCi0jZGVmaW5lCVBSSXhQVFIJCQkibHgiCQkvKiB1aW50cHRyX3QgKi8KKyNkZWZpbmUJUFJJeFBUUgkJCSJ4IgkJLyogdWludHB0cl90ICovCiAKICNkZWZpbmUJUFJJWDgJCQkiWCIJCS8qIHVpbnQ4X3QgKi8KICNkZWZpbmUJUFJJWDE2CQkJIlgiCQkvKiB1aW50MTZfdCAqLwpAQCAtMTQ3LDcgKzE0Nyw3IEBACiAjZGVmaW5lCVBSSVhGQVNUNjQJCSJsbFgiCQkvKiB1aW50X2Zhc3Q2NF90ICovCiAKICNkZWZpbmUJUFJJWE1BWAkJCSJqWCIJCS8qIHVpbnRtYXhfdCAqLwotI2RlZmluZQlQUklYUFRSCQkJImxYIgkJLyogdWludHB0cl90ICovCisjZGVmaW5lCVBSSVhQVFIJCQkiWCIJCS8qIHVpbnRwdHJfdCAqLwogCiAvKiBmc2NhbmYgbWFjcm9zIGZvciBzaWduZWQgaW50ZWdlcnMgKi8KICNkZWZpbmUJU0NOZDgJCQkiaGhkIgkJLyogaW50OF90ICovCkBAIC0xNjYsNyArMTY2LDcgQEAKICNkZWZpbmUJU0NOZEZBU1Q2NAkJImxsZCIJCS8qIGludF9mYXN0NjRfdCAqLwogCiAjZGVmaW5lCVNDTmRNQVgJCQkiamQiCQkvKiBpbnRtYXhfdCAqLwotI2RlZmluZQlTQ05kUFRSCQkJImxkIgkJLyogaW50cHRyX3QgKi8KKyNkZWZpbmUJU0NOZFBUUgkJCSJkIgkJLyogaW50cHRyX3QgKi8KIAogI2RlZmluZQlTQ05pOAkJCSJoaGkiCQkvKiBpbnQ4X3QgKi8KICNkZWZpbmUJU0NOaTE2CQkJImhpIgkJLyogaW50MTZfdCAqLwpAQCAtMTg0LDcgKzE4NCw3IEBACiAjZGVmaW5lCVNDTmlGQVNUNjQJCSJsbGkiCQkvKiBpbnRfZmFzdDY0X3QgKi8KIAogI2RlZmluZQlTQ05pTUFYCQkJImppIgkJLyogaW50bWF4X3QgKi8KLSNkZWZpbmUJU0NOaVBUUgkJCSJsaSIJCS8qIGludHB0cl90ICovCisjZGVmaW5lCVNDTmlQVFIJCQkiaSIJCS8qIGludHB0cl90ICovCiAKIC8qIGZzY2FuZiBtYWNyb3MgZm9yIHVuc2lnbmVkIGludGVnZXJzICovCiAjZGVmaW5lCVNDTm84CQkJImhobyIJCS8qIHVpbnQ4X3QgKi8KQEAgLTIwMyw3ICsyMDMsNyBAQAogI2RlZmluZQlTQ05vRkFTVDY0CQkibGxvIgkJLyogdWludF9mYXN0NjRfdCAqLwogCiAjZGVmaW5lCVNDTm9NQVgJCQkiam8iCQkvKiB1aW50bWF4X3QgKi8KLSNkZWZpbmUJU0NOb1BUUgkJCSJsbyIJCS8qIHVpbnRwdHJfdCAqLworI2RlZmluZQlTQ05vUFRSCQkJIm8iCQkvKiB1aW50cHRyX3QgKi8KIAogI2RlZmluZQlTQ051OAkJCSJoaHUiCQkvKiB1aW50OF90ICovCiAjZGVmaW5lCVNDTnUxNgkJCSJodSIJCS8qIHVpbnQxNl90ICovCkBAIC0yMjEsNyArMjIxLDcgQEAKICNkZWZpbmUJU0NOdUZBU1Q2NAkJImxsdSIJCS8qIHVpbnRfZmFzdDY0X3QgKi8KIAogI2RlZmluZQlTQ051TUFYCQkJImp1IgkJLyogdWludG1heF90ICovCi0jZGVmaW5lCVNDTnVQVFIJCQkibHUiCQkvKiB1aW50cHRyX3QgKi8KKyNkZWZpbmUJU0NOdVBUUgkJCSJ1IgkJLyogdWludHB0cl90ICovCiAKICNkZWZpbmUJU0NOeDgJCQkiaGh4IgkJLyogdWludDhfdCAqLwogI2RlZmluZQlTQ054MTYJCQkiaHgiCQkvKiB1aW50MTZfdCAqLwpAQCAtMjM5LDcgKzIzOSw3IEBACiAjZGVmaW5lCVNDTnhGQVNUNjQJCSJsbHgiCQkvKiB1aW50X2Zhc3Q2NF90ICovCiAKICNkZWZpbmUJU0NOeE1BWAkJCSJqeCIJCS8qIHVpbnRtYXhfdCAqLwotI2RlZmluZQlTQ054UFRSCQkJImx4IgkJLyogdWludHB0cl90ICovCisjZGVmaW5lCVNDTnhQVFIJCQkieCIJCS8qIHVpbnRwdHJfdCAqLwogCiAjZW5kaWYgLyogX19jcGx1c3BsdXMgfHwgX19TVERDX0ZPUk1BVF9NQUNST1MgKi8KIApkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL2xpbWl0cy5oIGIvbGliYy9pbmNsdWRlL2xpbWl0cy5oCmluZGV4IDFkZThlYTYuLmI5ZDQzNTQgMTAwNjQ0Ci0tLSBhL2xpYmMvaW5jbHVkZS9saW1pdHMuaAorKysgYi9saWJjL2luY2x1ZGUvbGltaXRzLmgKQEAgLTg5LDcgKzg5LDI0IEBACiAjaW5jbHVkZSA8c3lzL3N5c2xpbWl0cy5oPgogI2VuZGlmCiAKKy8qIEdMaWJjIGNvbXBhdGliaWxpdHkgZGVmaW5pdGlvbnMuCisgICBOb3RlIHRoYXQgdGhlc2UgYXJlIGRlZmluZWQgYnkgR0NDJ3MgPGxpbWl0cy5oPgorICAgb25seSB3aGVuIF9fR05VX0xJQlJBUllfXyBpcyBkZWZpbmVkLCBpLmUuIHdoZW4KKyAgIHRhcmdldHRpbmcgR0xpYmMuICovCisjaWZuZGVmIExPTkdfTE9OR19NSU4KKyNkZWZpbmUgTE9OR19MT05HX01JTiAgTExPTkdfTUlOCisjZW5kaWYKKworI2lmbmRlZiBMT05HX0xPTkdfTUFYCisjZGVmaW5lIExPTkdfTE9OR19NQVggIExMT05HX01BWAorI2VuZGlmCisKKyNpZm5kZWYgVUxPTkdfTE9OR19NQVgKKyNkZWZpbmUgVUxPTkdfTE9OR19NQVggIFVMTE9OR19NQVgKKyNlbmRpZgorCiAjaWZuZGVmIFBBR0VTSVpFCisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KICNkZWZpbmUgIFBBR0VTSVpFICBQQUdFX1NJWkUKICNlbmRpZgogCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvbGluay5oIGIvbGliYy9pbmNsdWRlL2xpbmsuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDJiNDQ4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9pbmNsdWRlL2xpbmsuaApAQCAtMCwwICsxLDU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisjaWZuZGVmIF9MSU5LX0hfCisjZGVmaW5lIF9MSU5LX0hfCisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxlbGYuaD4KKworX19CRUdJTl9ERUNMUworCisvKiBiaW9uaWMgaXMgY3VycmVudGx5IG9ubHkgMzItYml0LiAqLworI2RlZmluZSBFbGZXKHR5cGUpIEVsZjMyXyMjdHlwZQorCitzdHJ1Y3QgZGxfcGhkcl9pbmZvIHsKKyAgRWxmVyhBZGRyKSBkbHBpX2FkZHI7CisgIGNvbnN0IGNoYXIqIGRscGlfbmFtZTsKKyAgY29uc3QgRWxmVyhQaGRyKSogZGxwaV9waGRyOworICBFbGZXKEhhbGYpIGRscGlfcGhudW07Cit9OworCisjaWZkZWYgX19hcm1fXwordHlwZWRlZiBsb25nIHVuc2lnbmVkIGludCogX1Vud2luZF9QdHI7CitfVW53aW5kX1B0ciBkbF91bndpbmRfZmluZF9leGlkeChfVW53aW5kX1B0ciBwYywgaW50KiBwY291bnQpOworI2Vsc2UKK2ludCBkbF9pdGVyYXRlX3BoZHIoaW50ICgqY2IpKHN0cnVjdCBkbF9waGRyX2luZm8qLCBzaXplX3QsIHZvaWQqKSwgdm9pZCopOworI2VuZGlmCisKK19fRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBfTElOS19IXyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL21hbGxvYy5oIGIvbGliYy9pbmNsdWRlL21hbGxvYy5oCmluZGV4IGE4NjQyODYuLmVhZWRjNDkgMTAwNjQ0Ci0tLSBhL2xpYmMvaW5jbHVkZS9tYWxsb2MuaAorKysgYi9saWJjL2luY2x1ZGUvbWFsbG9jLmgKQEAgLTEsMTA0ICsxLDYxIEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAogICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiAgKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCi0gKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQotICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAotICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKLSAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUwotICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECi0gKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0gKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogICovCi0jaWZuZGVmIF9NQUxMT0NfSF8KLSNkZWZpbmUgX01BTExPQ19IXwogCisjaWZuZGVmIExJQkNfSU5DTFVERV9NQUxMT0NfSF8KKyNkZWZpbmUgTElCQ19JTkNMVURFX01BTExPQ19IXworCisvKgorICogRGVjbGFyYXRpb24gb2YgbWFsbG9jIHJvdXRpbmVzLiBCaW9uaWMgdXNlcyBkbG1hbGxvYyAoc2VlCisgKiB1cHN0cmVhbS1kbG1hbGxvYykgYnV0IGRvZXNuJ3QgZGlyZWN0bHkgaW5jbHVkZSBpdCBoZXJlIHRvIGtlZXAgdGhlCisgKiBkZWZpbmVkIG1hbGxvYy5oIGludGVyZmFjZSBzbWFsbC4KKyAqLwogI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgogI2luY2x1ZGUgPHN0ZGRlZi5oPgogCiBfX0JFR0lOX0RFQ0xTCiAKLWV4dGVybiBfX21hbGxvY2Z1bmMgdm9pZCogIG1hbGxvYyhzaXplX3QpOwotZXh0ZXJuIF9fbWFsbG9jZnVuYyB2b2lkKiAgY2FsbG9jKHNpemVfdCwgc2l6ZV90KTsKLWV4dGVybiBfX21hbGxvY2Z1bmMgdm9pZCogIHJlYWxsb2Modm9pZCAqLCBzaXplX3QpOwotZXh0ZXJuICAgICAgICAgICAgICAgIHZvaWQgICBmcmVlKHZvaWQgKik7CitleHRlcm4gdm9pZCogbWFsbG9jKHNpemVfdCBieXRlX2NvdW50KSBfX21hbGxvY2Z1bmMgX193dXI7CitleHRlcm4gdm9pZCogY2FsbG9jKHNpemVfdCBpdGVtX2NvdW50LCBzaXplX3QgaXRlbV9zaXplKSBfX21hbGxvY2Z1bmMgX193dXI7CitleHRlcm4gdm9pZCogcmVhbGxvYyh2b2lkKiBwLCBzaXplX3QgYnl0ZV9jb3VudCkgX193dXI7CitleHRlcm4gdm9pZCBmcmVlKHZvaWQqIHApOwogCi1leHRlcm4gdm9pZCogICBtZW1hbGlnbihzaXplX3QgIGFsaWdubWVudCwgc2l6ZV90ICBieXRlc2l6ZSk7Ci1leHRlcm4gdm9pZCogICB2YWxsb2Moc2l6ZV90ICBieXRlc2l6ZSk7Ci1leHRlcm4gdm9pZCogICBwdmFsbG9jKHNpemVfdCAgYnl0ZXNpemUpOwotZXh0ZXJuIGludCAgICAgbWFsbG9wdChpbnQgIHBhcmFtX251bWJlciwgaW50ICBwYXJhbV92YWx1ZSk7Ci1leHRlcm4gc2l6ZV90ICBtYWxsb2NfZm9vdHByaW50KHZvaWQpOwotZXh0ZXJuIHNpemVfdCAgbWFsbG9jX21heF9mb290cHJpbnQodm9pZCk7CitleHRlcm4gdm9pZCogbWVtYWxpZ24oc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IGJ5dGVfY291bnQpIF9fbWFsbG9jZnVuYyBfX3d1cjsKK2V4dGVybiBzaXplX3QgbWFsbG9jX3VzYWJsZV9zaXplKGNvbnN0IHZvaWQqIHApOwogCitleHRlcm4gdm9pZCogdmFsbG9jKHNpemVfdCBieXRlX2NvdW50KSBfX21hbGxvY2Z1bmMgX193dXI7CitleHRlcm4gdm9pZCogcHZhbGxvYyhzaXplX3QgYnl0ZV9jb3VudCkgX19tYWxsb2NmdW5jIF9fd3VyOworCisjaWZuZGVmIFNUUlVDVF9NQUxMSU5GT19ERUNMQVJFRAorI2RlZmluZSBTVFJVQ1RfTUFMTElORk9fREVDTEFSRUQgMQogc3RydWN0IG1hbGxpbmZvIHsKLSAgICBzaXplX3QgYXJlbmE7ICAgIC8qIG5vbi1tbWFwcGVkIHNwYWNlIGFsbG9jYXRlZCBmcm9tIHN5c3RlbSAqLwotICAgIHNpemVfdCBvcmRibGtzOyAgLyogbnVtYmVyIG9mIGZyZWUgY2h1bmtzICovCi0gICAgc2l6ZV90IHNtYmxrczsgICAvKiBhbHdheXMgMCAqLwotICAgIHNpemVfdCBoYmxrczsgICAgLyogYWx3YXlzIDAgKi8KLSAgICBzaXplX3QgaGJsa2hkOyAgIC8qIHNwYWNlIGluIG1tYXBwZWQgcmVnaW9ucyAqLwotICAgIHNpemVfdCB1c21ibGtzOyAgLyogbWF4aW11bSB0b3RhbCBhbGxvY2F0ZWQgc3BhY2UgKi8KLSAgICBzaXplX3QgZnNtYmxrczsgIC8qIGFsd2F5cyAwICovCi0gICAgc2l6ZV90IHVvcmRibGtzOyAvKiB0b3RhbCBhbGxvY2F0ZWQgc3BhY2UgKi8KLSAgICBzaXplX3QgZm9yZGJsa3M7IC8qIHRvdGFsIGZyZWUgc3BhY2UgKi8KLSAgICBzaXplX3Qga2VlcGNvc3Q7IC8qIHJlbGVhc2FibGUgKHZpYSBtYWxsb2NfdHJpbSkgc3BhY2UgKi8KKyAgc2l6ZV90IGFyZW5hOyAgICAvKiBUb3RhbCBudW1iZXIgb2Ygbm9uLW1tYXBwZWQgYnl0ZXMgY3VycmVudGx5IGFsbG9jYXRlZCBmcm9tIE9TLiAqLworICBzaXplX3Qgb3JkYmxrczsgIC8qIE51bWJlciBvZiBmcmVlIGNodW5rcy4gKi8KKyAgc2l6ZV90IHNtYmxrczsgICAvKiAoVW51c2VkLikgKi8KKyAgc2l6ZV90IGhibGtzOyAgICAvKiAoVW51c2VkLikgKi8KKyAgc2l6ZV90IGhibGtoZDsgICAvKiBUb3RhbCBudW1iZXIgb2YgYnl0ZXMgaW4gbW1hcHBlZCByZWdpb25zLiAqLworICBzaXplX3QgdXNtYmxrczsgIC8qIE1heGltdW0gdG90YWwgYWxsb2NhdGVkIHNwYWNlOyBncmVhdGVyIHRoYW4gdG90YWwgaWYgdHJpbW1pbmcgaGFzIG9jY3VycmVkLiAqLworICBzaXplX3QgZnNtYmxrczsgIC8qIChVbnVzZWQuKSAqLworICBzaXplX3QgdW9yZGJsa3M7IC8qIFRvdGFsIGFsbG9jYXRlZCBzcGFjZSAobm9ybWFsIG9yIG1tYXBwZWQuKSAqLworICBzaXplX3QgZm9yZGJsa3M7IC8qIFRvdGFsIGZyZWUgc3BhY2UuICovCisgIHNpemVfdCBrZWVwY29zdDsgLyogVXBwZXIgYm91bmQgb24gbnVtYmVyIG9mIGJ5dGVzIHJlbGVhc2FibGUgYnkgbWFsbG9jX3RyaW0uICovCiB9OworI2VuZGlmICAvKiBTVFJVQ1RfTUFMTElORk9fREVDTEFSRUQgKi8KIAotZXh0ZXJuIHN0cnVjdCBtYWxsaW5mbyAgbWFsbGluZm8odm9pZCk7Ci0KLQotLyoKLSAgbWFsbG9jX3VzYWJsZV9zaXplKHZvaWQqIHApOwotCi0gIFJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyB5b3UgY2FuIGFjdHVhbGx5IHVzZSBpbgotICBhbiBhbGxvY2F0ZWQgY2h1bmssIHdoaWNoIG1heSBiZSBtb3JlIHRoYW4geW91IHJlcXVlc3RlZCAoYWx0aG91Z2gKLSAgb2Z0ZW4gbm90KSBkdWUgdG8gYWxpZ25tZW50IGFuZCBtaW5pbXVtIHNpemUgY29uc3RyYWludHMuCi0gIFlvdSBjYW4gdXNlIHRoaXMgbWFueSBieXRlcyB3aXRob3V0IHdvcnJ5aW5nIGFib3V0Ci0gIG92ZXJ3cml0aW5nIG90aGVyIGFsbG9jYXRlZCBvYmplY3RzLiBUaGlzIGlzIG5vdCBhIHBhcnRpY3VsYXJseSBncmVhdAotICBwcm9ncmFtbWluZyBwcmFjdGljZS4gbWFsbG9jX3VzYWJsZV9zaXplIGNhbiBiZSBtb3JlIHVzZWZ1bCBpbgotICBkZWJ1Z2dpbmcgYW5kIGFzc2VydGlvbnMsIGZvciBleGFtcGxlOgotCi0gIHAgPSBtYWxsb2Mobik7Ci0gIGFzc2VydChtYWxsb2NfdXNhYmxlX3NpemUocCkgPj0gMjU2KTsKLSovCi1leHRlcm4gc2l6ZV90IG1hbGxvY191c2FibGVfc2l6ZSh2b2lkKiAgYmxvY2spOwotCi0vKgotICBtYWxsb2Nfc3RhdHMoKTsKLSAgUHJpbnRzIG9uIHN0ZGVyciB0aGUgYW1vdW50IG9mIHNwYWNlIG9idGFpbmVkIGZyb20gdGhlIHN5c3RlbSAoYm90aAotICB2aWEgc2JyayBhbmQgbW1hcCksIHRoZSBtYXhpbXVtIGFtb3VudCAod2hpY2ggbWF5IGJlIG1vcmUgdGhhbgotICBjdXJyZW50IGlmIG1hbGxvY190cmltIGFuZC9vciBtdW5tYXAgZ290IGNhbGxlZCksIGFuZCB0aGUgY3VycmVudAotICBudW1iZXIgb2YgYnl0ZXMgYWxsb2NhdGVkIHZpYSBtYWxsb2MgKG9yIHJlYWxsb2MsIGV0YykgYnV0IG5vdCB5ZXQKLSAgZnJlZWQuIE5vdGUgdGhhdCB0aGlzIGlzIHRoZSBudW1iZXIgb2YgYnl0ZXMgYWxsb2NhdGVkLCBub3QgdGhlCi0gIG51bWJlciByZXF1ZXN0ZWQuIEl0IHdpbGwgYmUgbGFyZ2VyIHRoYW4gdGhlIG51bWJlciByZXF1ZXN0ZWQKLSAgYmVjYXVzZSBvZiBhbGlnbm1lbnQgYW5kIGJvb2trZWVwaW5nIG92ZXJoZWFkLiBCZWNhdXNlIGl0IGluY2x1ZGVzCi0gIGFsaWdubWVudCB3YXN0YWdlIGFzIGJlaW5nIGluIHVzZSwgdGhpcyBmaWd1cmUgbWF5IGJlIGdyZWF0ZXIgdGhhbgotICB6ZXJvIGV2ZW4gd2hlbiBubyB1c2VyLWxldmVsIGNodW5rcyBhcmUgYWxsb2NhdGVkLgotCi0gIFRoZSByZXBvcnRlZCBjdXJyZW50IGFuZCBtYXhpbXVtIHN5c3RlbSBtZW1vcnkgY2FuIGJlIGluYWNjdXJhdGUgaWYKLSAgYSBwcm9ncmFtIG1ha2VzIG90aGVyIGNhbGxzIHRvIHN5c3RlbSBtZW1vcnkgYWxsb2NhdGlvbiBmdW5jdGlvbnMKLSAgKG5vcm1hbGx5IHNicmspIG91dHNpZGUgb2YgbWFsbG9jLgotCi0gIG1hbGxvY19zdGF0cyBwcmludHMgb25seSB0aGUgbW9zdCBjb21tb25seSBpbnRlcmVzdGluZyBzdGF0aXN0aWNzLgotICBNb3JlIGluZm9ybWF0aW9uIGNhbiBiZSBvYnRhaW5lZCBieSBjYWxsaW5nIG1hbGxpbmZvLgotKi8KLWV4dGVybiB2b2lkICBtYWxsb2Nfc3RhdHModm9pZCk7CitleHRlcm4gc3RydWN0IG1hbGxpbmZvIG1hbGxpbmZvKHZvaWQpOwogCiBfX0VORF9ERUNMUwogCi0jZW5kaWYgLyogX01BTExPQ19IXyAqLwotCisjZW5kaWYgIC8qIExJQkNfSU5DTFVERV9NQUxMT0NfSF8gKi8KZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9tZW1vcnkuaCBiL2xpYmMvaW5jbHVkZS9tZW1vcnkuaAppbmRleCBlNjlkZTI5Li4zYjJmNTkwIDEwMDY0NAotLS0gYS9saWJjL2luY2x1ZGUvbWVtb3J5LmgKKysrIGIvbGliYy9pbmNsdWRlL21lbW9yeS5oCkBAIC0wLDAgKzEgQEAKKyNpbmNsdWRlIDxzdHJpbmcuaD4KZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9tbnRlbnQuaCBiL2xpYmMvaW5jbHVkZS9tbnRlbnQuaAppbmRleCBiODNkYTFmLi44Yjg3ZjcxIDEwMDY0NAotLS0gYS9saWJjL2luY2x1ZGUvbW50ZW50LmgKKysrIGIvbGliYy9pbmNsdWRlL21udGVudC5oCkBAIC0yOSw2ICsyOSw3IEBACiAjZGVmaW5lIF9NTlRFTlRfSF8KIAogI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CiAKICNkZWZpbmUgTU5UVFlQRV9JR05PUkUgImlnbm9yZSIKIApkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL25ldC9pZi5oIGIvbGliYy9pbmNsdWRlL25ldC9pZi5oCmluZGV4IDkwNDRmYzUuLmYzNmYzN2UgMTAwNjQ0Ci0tLSBhL2xpYmMvaW5jbHVkZS9uZXQvaWYuaAorKysgYi9saWJjL2luY2x1ZGUvbmV0L2lmLmgKQEAgLTI1LDYgKzI1LDggQEAKICAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgogICogU1VDSCBEQU1BR0UuCiAgKi8KKworI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KICNpbmNsdWRlIDxsaW51eC9pZi5oPgogI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgogI2lmbmRlZiBJRl9OQU1FU0laRQpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL25ldC9pZl9hcnAuaCBiL2xpYmMvaW5jbHVkZS9uZXQvaWZfYXJwLmgKaW5kZXggYTI1ZjFiNC4uNWVhZTgyYyAxMDA2NDQKLS0tIGEvbGliYy9pbmNsdWRlL25ldC9pZl9hcnAuaAorKysgYi9saWJjL2luY2x1ZGUvbmV0L2lmX2FycC5oCkBAIC0xICsxLDIgQEAKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CiAjaW5jbHVkZSA8bGludXgvaWZfYXJwLmg+CmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvbmV0L2lmX2RsLmggYi9saWJjL2luY2x1ZGUvbmV0L2lmX2RsLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFmMGMwODAuLjAwMDAwMDAKLS0tIGEvbGliYy9pbmNsdWRlL25ldC9pZl9kbC5oCisrKyAvZGV2L251bGwKQEAgLTEsODcgKzAsMCBAQAotLyoJJE5ldEJTRDogaWZfZGwuaCx2IDEuMTggMjAwNS8xMi8xMSAyMzowNToyNCB0aG9ycGVqIEV4cCAkCSovCi0KLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKLSAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqCi0gKglAKCMpaWZfZGwuaAk4LjEgKEJlcmtlbGV5KSA2LzEwLzkzCi0gKi8KLQotLyoKLSAqIEEgTGluay1MZXZlbCBTb2NrYWRkciBtYXkgc3BlY2lmeSB0aGUgaW50ZXJmYWNlIGluIG9uZSBvZiB0d28KLSAqIHdheXM6IGVpdGhlciBieSBtZWFucyBvZiBhIHN5c3RlbS1wcm92aWRlZCBpbmRleCBudW1iZXIgKGNvbXB1dGVkCi0gKiBhbmV3IGFuZCBwb3NzaWJseSBkaWZmZXJlbnRseSBvbiBldmVyeSByZWJvb3QpLCBvciBieSBhIGh1bWFuLXJlYWRhYmxlCi0gKiBzdHJpbmcgc3VjaCBhcyAiaWwwIiAoZm9yIG1hbmFnZXJpYWwgY29udmVuaWVuY2UpLgotICoKLSAqIENlbnN1cyB0YWtpbmcgYWN0aW9ucywgc3VjaCBhcyBzb21ldGhpbmcgYWtpbiB0byBTSU9DR0NPTkYgd291bGQgcmV0dXJuCi0gKiBib3RoIHRoZSBpbmRleCBhbmQgdGhlIGh1bWFuIG5hbWUuCi0gKgotICogSGlnaCB2b2x1bWUgdHJhbnNhY3Rpb25zIChzdWNoIGFzIGdpdmluZyBhIGxpbmstbGV2ZWwgYGBmcm9tJycgYWRkcmVzcwotICogaW4gYSByZWN2ZnJvbSBvciByZWN2bXNnIGNhbGwpIG1heSBiZSBsaWtlbHkgb25seSB0byBwcm92aWRlIHRoZSBpbmRleGVkCi0gKiBmb3JtLCAod2hpY2ggcmVxdWlyZXMgZmV3ZXIgY29weSBvcGVyYXRpb25zIGFuZCBsZXNzIHNwYWNlKS4KLSAqCi0gKiBUaGUgZm9ybSBhbmQgaW50ZXJwcmV0YXRpb24gIG9mIHRoZSBsaW5rLWxldmVsIGFkZHJlc3MgaXMgcHVyZWx5IGEgbWF0dGVyCi0gKiBvZiBjb252ZW50aW9uIGJldHdlZW4gdGhlIGRldmljZSBkcml2ZXIgYW5kIGl0cyBjb25zdW1lcnM7IGhvd2V2ZXIsIGl0IGlzCi0gKiBleHBlY3RlZCB0aGF0IGFsbCBkcml2ZXJzIGZvciBhbiBpbnRlcmZhY2Ugb2YgYSBnaXZlbiBpZl90eXBlIHdpbGwgYWdyZWUuCi0gKi8KLQotI2lmbmRlZiBfTkVUX0lGX0RMX0hfCi0jZGVmaW5lIF9ORVRfSUZfRExfSF8KLQotI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KLQotLyoKLSAqIFN0cnVjdHVyZSBvZiBhIExpbmstTGV2ZWwgc29ja2FkZHI6Ci0gKi8KLXN0cnVjdCBzb2NrYWRkcl9kbCB7Ci0JdV9jaGFyCSAgICBzZGxfbGVuOwkvKiBUb3RhbCBsZW5ndGggb2Ygc29ja2FkZHIgKi8KLQlzYV9mYW1pbHlfdCBzZGxfZmFtaWx5OwkvKiBBRl9MSU5LICovCi0JdV9pbnQxNl90ICAgc2RsX2luZGV4OwkvKiBpZiAhPSAwLCBzeXN0ZW0gZ2l2ZW4gaW5kZXggZm9yIGludGVyZmFjZSAqLwotCXVfY2hhcgkgICAgc2RsX3R5cGU7CS8qIGludGVyZmFjZSB0eXBlICovCi0JdV9jaGFyCSAgICBzZGxfbmxlbjsJLyogaW50ZXJmYWNlIG5hbWUgbGVuZ3RoLCBubyB0cmFpbGluZyAwIHJlcWQuICovCi0JdV9jaGFyCSAgICBzZGxfYWxlbjsJLyogbGluayBsZXZlbCBhZGRyZXNzIGxlbmd0aCAqLwotCXVfY2hhcgkgICAgc2RsX3NsZW47CS8qIGxpbmsgbGF5ZXIgc2VsZWN0b3IgbGVuZ3RoICovCi0JY2hhcgkgICAgc2RsX2RhdGFbMTJdOyAvKiBtaW5pbXVtIHdvcmsgYXJlYSwgY2FuIGJlIGxhcmdlcjsKLQkJCQkgICAgIGNvbnRhaW5zIGJvdGggaWYgbmFtZSBhbmQgbGwgYWRkcmVzcyAqLwotfTsKLQotLyogV2UgZG8gYXJpdGhtZXRpYyBkaXJlY3RseSB3aXRoIHRoZXNlLCBzbyBrZWVwIHRoZW0gY2hhciBpbnN0ZWFkIG9mIHZvaWQgKi8KLSNkZWZpbmUgTExBRERSKHMpICgoY2hhciAqKSgocyktPnNkbF9kYXRhICsgKHMpLT5zZGxfbmxlbikpCi0jZGVmaW5lIENMTEFERFIocykgKChjb25zdCBjaGFyICopKChzKS0+c2RsX2RhdGEgKyAocyktPnNkbF9ubGVuKSkKLQotI2lmbmRlZiBfS0VSTkVMCi0KLSNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KLQotX19CRUdJTl9ERUNMUwotdm9pZAlsaW5rX2FkZHIoY29uc3QgY2hhciAqLCBzdHJ1Y3Qgc29ja2FkZHJfZGwgKik7Ci1jaGFyCSpsaW5rX250b2EoY29uc3Qgc3RydWN0IHNvY2thZGRyX2RsICopOwotX19FTkRfREVDTFMKLQotI2VuZGlmIC8qICFfS0VSTkVMICovCi0KLSNlbmRpZiAvKiAhX05FVF9JRl9ETF9IXyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL25ldGRiLmggYi9saWJjL2luY2x1ZGUvbmV0ZGIuaAppbmRleCA1YWQ3YjRhLi4zZWE1MTJjIDEwMDY0NAotLS0gYS9saWJjL2luY2x1ZGUvbmV0ZGIuaAorKysgYi9saWJjL2luY2x1ZGUvbmV0ZGIuaApAQCAtMjA2LDEyICsyMDYsMTQgQEAKIHZvaWQgZW5kcHJvdG9lbnQodm9pZCk7CiB2b2lkIGVuZHNlcnZlbnQodm9pZCk7CiB2b2lkIGZyZWVob3N0ZW50KHN0cnVjdCBob3N0ZW50ICopOwotc3RydWN0IGhvc3RlbnQJKmdldGhvc3RieWFkZHIoY29uc3Qgdm9pZCAqLCBpbnQsIGludCk7CitzdHJ1Y3QgaG9zdGVudAkqZ2V0aG9zdGJ5YWRkcihjb25zdCB2b2lkICosIHNvY2tsZW5fdCwgaW50KTsKK3N0cnVjdCBob3N0ZW50CSphbmRyb2lkX2dldGhvc3RieWFkZHJmb3JpZmFjZShjb25zdCB2b2lkICosIHNvY2tsZW5fdCwgaW50LCBjb25zdCBjaGFyKik7CiBpbnQgZ2V0aG9zdGJ5YWRkcl9yKGNvbnN0IHZvaWQgKiwgaW50LCBpbnQsIHN0cnVjdCBob3N0ZW50ICosIGNoYXIgKiwgc2l6ZV90LCBzdHJ1Y3QgaG9zdGVudCAqKiwgaW50ICopOwogc3RydWN0IGhvc3RlbnQJKmdldGhvc3RieW5hbWUoY29uc3QgY2hhciAqKTsKIGludCBnZXRob3N0YnluYW1lX3IoY29uc3QgY2hhciAqLCBzdHJ1Y3QgaG9zdGVudCAqLCBjaGFyICosIHNpemVfdCwgc3RydWN0IGhvc3RlbnQgKiosIGludCAqKTsKIHN0cnVjdCBob3N0ZW50CSpnZXRob3N0YnluYW1lMihjb25zdCBjaGFyICosIGludCk7CiBpbnQgZ2V0aG9zdGJ5bmFtZTJfcihjb25zdCBjaGFyICosIGludCwgc3RydWN0IGhvc3RlbnQgKiwgY2hhciAqLCBzaXplX3QsIHN0cnVjdCBob3N0ZW50ICoqLCBpbnQgKik7CitzdHJ1Y3QgaG9zdGVudAkqYW5kcm9pZF9nZXRob3N0YnluYW1lZm9yaWZhY2UoY29uc3QgY2hhciAqLCBpbnQsIGNvbnN0IGNoYXIgKik7CiBzdHJ1Y3QgaG9zdGVudAkqZ2V0aG9zdGVudCh2b2lkKTsKIGludCBnZXRob3N0ZW50X3Ioc3RydWN0IGhvc3RlbnQgKiwgY2hhciAqLCBzaXplX3QsIHN0cnVjdCBob3N0ZW50ICoqLCBpbnQgKik7CiBzdHJ1Y3QgaG9zdGVudAkqZ2V0aXBub2RlYnlhZGRyKGNvbnN0IHZvaWQgKiwgc2l6ZV90LCBpbnQsIGludCAqKTsKQEAgLTIzOSw3ICsyNDEsOSBAQAogdm9pZCBzZXRuZXRlbnQoaW50KTsKIHZvaWQgc2V0cHJvdG9lbnQoaW50KTsKIGludCBnZXRhZGRyaW5mbyhjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgY29uc3Qgc3RydWN0IGFkZHJpbmZvICosIHN0cnVjdCBhZGRyaW5mbyAqKik7CitpbnQgYW5kcm9pZF9nZXRhZGRyaW5mb2ZvcmlmYWNlKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBjb25zdCBzdHJ1Y3QgYWRkcmluZm8gKiwgY29uc3QgY2hhciAqLCBzdHJ1Y3QgYWRkcmluZm8gKiopOwogaW50IGdldG5hbWVpbmZvKGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqLCBzb2NrbGVuX3QsIGNoYXIgKiwgc2l6ZV90LCBjaGFyICosIHNpemVfdCwgaW50KTsKK2ludCBhbmRyb2lkX2dldG5hbWVpbmZvZm9yaWZhY2UoY29uc3Qgc3RydWN0IHNvY2thZGRyICosIHNvY2tsZW5fdCwgY2hhciAqLCBzaXplX3QsIGNoYXIgKiwgc2l6ZV90LCBpbnQsIGNvbnN0IGNoYXIgKik7CiB2b2lkIGZyZWVhZGRyaW5mbyhzdHJ1Y3QgYWRkcmluZm8gKik7CiBjb25zdCBjaGFyCSpnYWlfc3RyZXJyb3IoaW50KTsKIHZvaWQgc2V0bmV0Z3JlbnQoY29uc3QgY2hhciAqKTsKZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9uZXRpbmV0L2ljbXA2LmggYi9saWJjL2luY2x1ZGUvbmV0aW5ldC9pY21wNi5oCmluZGV4IGZiYzgyMzQuLjY2MjU3MTIgMTAwNjQ0Ci0tLSBhL2xpYmMvaW5jbHVkZS9uZXRpbmV0L2ljbXA2LmgKKysrIGIvbGliYy9pbmNsdWRlL25ldGluZXQvaWNtcDYuaApAQCAtMSw0ICsxLDQgQEAKLS8qCSROZXRCU0Q6IGljbXA2LmgsdiAxLjQwIDIwMDkvMTAvMzEgMjI6MzI6MTcgY2hyaXN0b3MgRXhwICQJKi8KKy8qCSROZXRCU0Q6IGljbXA2LmgsdiAxLjQ3IDIwMTMvMDcvMDEgMTI6NDM6MTUgY2hyaXN0b3MgRXhwICQJKi8KIC8qCSRLQU1FOiBpY21wNi5oLHYgMS44NCAyMDAzLzA0LzIzIDEwOjI2OjUxIGl0b2p1biBFeHAgJAkqLwogCiAKQEAgLTY1LDYgKzY1LDggQEAKICNpZm5kZWYgX05FVElORVRfSUNNUDZfSF8KICNkZWZpbmUgX05FVElORVRfSUNNUDZfSF8KIAorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4gLyogYW5kcm9pZC1hZGRlZDogZ2xpYmMgc291cmNlIGNvbXBhdGliaWxpdHkuICovCisKICNkZWZpbmUgSUNNUFY2X1BMRF9NQVhMRU4JMTIzMgkvKiBJUFY2X01NVFUgLSBzaXplb2Yoc3RydWN0IGlwNl9oZHIpCiAJCQkJCSAgIC0gc2l6ZW9mKHN0cnVjdCBpY21wNl9oZHIpICovCiAKQEAgLTk4LDYgKzEwMCw3IEBACiAjZGVmaW5lIE1MRF9MSVNURU5FUl9RVUVSWQkJMTMwIAkvKiBtdWx0aWNhc3QgbGlzdGVuZXIgcXVlcnkgKi8KICNkZWZpbmUgTUxEX0xJU1RFTkVSX1JFUE9SVAkJMTMxCS8qIG11bHRpY2FzdCBsaXN0ZW5lciByZXBvcnQgKi8KICNkZWZpbmUgTUxEX0xJU1RFTkVSX0RPTkUJCTEzMgkvKiBtdWx0aWNhc3QgbGlzdGVuZXIgZG9uZSAqLworI2RlZmluZSBNTERfTElTVEVORVJfUkVEVUNUSU9OIE1MRF9MSVNURU5FUl9ET05FIC8qIFJGQzM1NDIgZGVmaW5pdGlvbiAqLwogCiAvKiBSRkMyMjkyIGRlY2xzICovCiAjZGVmaW5lIElDTVA2X01FTUJFUlNISVBfUVVFUlkJCTEzMAkvKiBncm91cCBtZW1iZXJzaGlwIHF1ZXJ5ICovCkBAIC0xMjUsNiArMTI4LDcgQEAKICNkZWZpbmUgSUNNUDZfRlFETl9SRVBMWQkJMTQwCS8qIEZRRE4gcmVwbHkgKi8KICNkZWZpbmUgSUNNUDZfTklfUVVFUlkJCQkxMzkJLyogbm9kZSBpbmZvcm1hdGlvbiByZXF1ZXN0ICovCiAjZGVmaW5lIElDTVA2X05JX1JFUExZCQkJMTQwCS8qIG5vZGUgaW5mb3JtYXRpb24gcmVwbHkgKi8KKyNkZWZpbmUgTUxEVjJfTElTVEVORVJfUkVQT1JUCQkxNDMJLyogUkZDMzgxMCBsaXN0ZW5lciByZXBvcnQgKi8KIAogLyogVGhlIGRlZmluaXRpb25zIGJlbG93IGFyZSBleHBlcmltZW50YWwuIFRCQSAqLwogI2RlZmluZSBNTERfTVRSQUNFX1JFU1AJCQkyMDAJLyogbXRyYWNlIHJlc3BvbnNlKHRvIHNlbmRlcikgKi8KQEAgLTE0NCw2ICsxNDgsOSBAQAogI2RlZmluZSBJQ01QNl9EU1RfVU5SRUFDSF9CRVlPTkRTQ09QRQkyCS8qIGJleW9uZCBzY29wZSBvZiBzb3VyY2UgYWRkcmVzcyAqLwogI2RlZmluZSBJQ01QNl9EU1RfVU5SRUFDSF9BRERSCQkzCS8qIGFkZHJlc3MgdW5yZWFjaGFibGUgKi8KICNkZWZpbmUgSUNNUDZfRFNUX1VOUkVBQ0hfTk9QT1JUCTQJLyogcG9ydCB1bnJlYWNoYWJsZSAqLworI2RlZmluZSBJQ01QNl9EU1RfVU5SRUFDSF9QT0xJQ1kJNQkvKiBzb3VyY2UgYWRkcmVzcyBmYWlsZWQgaW5ncmVzcy9lZ3Jlc3MgcG9saWN5ICovCisjZGVmaW5lIElDTVA2X0RTVF9VTlJFQUNIX1JFSlJPVVRFCTYJLyogcmVqZWN0IHJvdXRlIHRvIGRlc3RpbmF0aW9uICovCisjZGVmaW5lIElDTVA2X0RTVF9VTlJFQUNIX1NPVVJDRVJUCTcJLyogZXJyb3IgaW4gc291cmNlIHJvdXRpbmcgaGVhZGVyICovCiAKICNkZWZpbmUgSUNNUDZfVElNRV9FWENFRURfVFJBTlNJVCAJMAkvKiB0dGw9PTAgaW4gdHJhbnNpdCAqLwogI2RlZmluZSBJQ01QNl9USU1FX0VYQ0VFRF9SRUFTU0VNQkxZCTEJLyogdHRsPT0wIGluIHJlYXNzICovCkBAIC0yMjksNyArMjM2LDcgQEAKICNkZWZpbmUgTkRfUkFfRkxBR19IT01FX0FHRU5UCTB4MjAKIAogLyoKLSAqIFJvdXRlciBwcmVmZXJlbmNlIHZhbHVlcyBiYXNlZCBvbiBSRkM0MTk5LgorICogUm91dGVyIHByZWZlcmVuY2UgdmFsdWVzIGJhc2VkIG9uIFJGQzQxOTEuCiAgKi8KICNkZWZpbmUgTkRfUkFfRkxBR19SVFBSRUZfTUFTSwkweDE4IC8qIDAwMDExMDAwICovCiAKQEAgLTMwMCwxMSArMzA3LDEwIEBACiAjZGVmaW5lIE5EX09QVF9IT01FQUdFTlRfSU5GTwkJOAogI2RlZmluZSBORF9PUFRfU09VUkNFX0FERFJMSVNUCQk5CiAjZGVmaW5lIE5EX09QVF9UQVJHRVRfQUREUkxJU1QJCTEwCi0jZGVmaW5lIE5EX09QVF9SRE5TUwkJCTI1Ci0vKiBkcmFmdC1pZXRmLWlwbmd3Zy1yb3V0ZXItcHJlZmVyZW5jZSwgbm90IG9mZmljaWFsbHkgYXNzaWduZWQgeWV0ICovCi0jZGVmaW5lIE5EX09QVF9ST1VURV9JTkZPCQkyMDAKLS8qIGRyYWZ0LWlldGYtbW9iaWxlaXAtaG1pcHY2LCBub3Qgb2ZmaWNpYWxseSBhc3NpZ25lZCB5ZXQgKi8KLSNkZWZpbmUgTkRfT1BUX01BUAkJCTIwMQorI2RlZmluZSBORF9PUFRfTUFQCQkJMjMJLyogUkZDIDUzODAgKi8KKyNkZWZpbmUgTkRfT1BUX1JPVVRFX0lORk8JCTI0CS8qIFJGQyA0MTkxICovCisjZGVmaW5lIE5EX09QVF9SRE5TUwkJCTI1CS8qIFJGQyA2MDE2ICovCisjZGVmaW5lIE5EX09QVF9ETlNTTAkJCTMxCS8qIFJGQyA2MDE2ICovCiAKIHN0cnVjdCBuZF9vcHRfcm91dGVfaW5mbyB7CS8qIHJvdXRlIGluZm8gKi8KIAl1X2ludDhfdAluZF9vcHRfcnRpX3R5cGU7CkBAIC0zNDQsNyArMzUwLDcgQEAKIAl1X2ludDMyX3QJbmRfb3B0X210dV9tdHU7CiB9IF9fcGFja2VkOwogCi1zdHJ1Y3QgbmRfb3B0X3JkbnNzIHsJCS8qIFJETlNTIG9wdGlvbiBSRkMgNTAwNiAqLworc3RydWN0IG5kX29wdF9yZG5zcyB7CQkvKiBSRE5TUyBvcHRpb24gUkZDIDYxMDYgKi8KIAl1X2ludDhfdAluZF9vcHRfcmRuc3NfdHlwZTsKIAl1X2ludDhfdAluZF9vcHRfcmRuc3NfbGVuOwogCXVfaW50MTZfdAluZF9vcHRfcmRuc3NfcmVzZXJ2ZWQ7CkBAIC0zNTIsNiArMzU4LDE0IEBACiAJLyogZm9sbG93ZWQgYnkgbGlzdCBvZiBJUCBwcmVmaXhlcyAqLwogfSBfX3BhY2tlZDsKIAorc3RydWN0IG5kX29wdF9kbnNzbCB7CQkvKiBETlNTTCBvcHRpb24gUkZDIDYxMDYgKi8KKwl1X2ludDhfdAluZF9vcHRfZG5zc2xfdHlwZTsKKwl1X2ludDhfdAluZF9vcHRfZG5zc2xfbGVuOworCXVfaW50MTZfdAluZF9vcHRfZG5zc2xfcmVzZXJ2ZWQ7CisJdV9pbnQzMl90CW5kX29wdF9kbnNzbF9saWZldGltZTsKKwkvKiBmb2xsb3dlZCBieSBsaXN0IG9mIElQIHByZWZpeGVzICovCit9IF9fcGFja2VkOworCiAvKgogICogaWNtcDYgbmFtZWxvb2t1cAogICovCkBAIC0zNzYsMTEgKzM5MCwxNSBAQAogCS8qIGNvdWxkIGJlIGZvbGxvd2VkIGJ5IHJlcGx5IGRhdGEgKi8KIH0gX19wYWNrZWQ7CiAKKy8qCisgKiBCRUdJTiBhbmRyb2lkLXJlbW92ZWQ6IGdsaWJjIGRvZXNuJ3QgaGF2ZSB0aGVzZSwgYW5kIGV4dGVybmFsL3BpbmcgZGVjbGFyZXMgdGhlbSBpdHNlbGYuCiAjZGVmaW5lIG5pX3R5cGUJCWljbXA2X25pX2hkci5pY21wNl90eXBlCiAjZGVmaW5lIG5pX2NvZGUJCWljbXA2X25pX2hkci5pY21wNl9jb2RlCiAjZGVmaW5lIG5pX2Nrc3VtCWljbXA2X25pX2hkci5pY21wNl9ja3N1bQogI2RlZmluZSBuaV9xdHlwZQlpY21wNl9uaV9oZHIuaWNtcDZfZGF0YTE2WzBdCiAjZGVmaW5lIG5pX2ZsYWdzCWljbXA2X25pX2hkci5pY21wNl9kYXRhMTZbMV0KKyAqIEVORCBhbmRyb2lkLXJlbW92ZWQKKyAqLwogCiAjZGVmaW5lIE5JX1FUWVBFX05PT1AJCTAgLyogTk9PUCAgKi8KICNkZWZpbmUgTklfUVRZUEVfU1VQVFlQRVMJMSAvKiBTdXBwb3J0ZWQgUXR5cGVzICovCkBAIC01MjEsMTggKzUzOSwyOCBAQAogCXVfaW50MzJfdCBpY21wNl9maWx0WzhdOwogfTsKIAorLyoKKyAqIEJFR0lOIGFuZHJvaWQtY2hhbmdlZAorICogTGludXggYW5kICpCU0Qga2VybmVscyB1c2Ugb3Bwb3NpdGUgdmFsdWVzIHRvIGluZGljYXRlIHBhc3MvYmxvY2sgaW4gSUNNUHY2CisgKiBmaWx0ZXJzLCBhbmQgYXNzaWduIGEgZGlmZmVyZW50IHZhbHVlIHRvIHRoZSBJQ01QNl9GSUxURVIgc29ja29wdC4KKyAqLworI2RlZmluZSBJQ01QNl9GSUxURVIgMQorCiAjZGVmaW5lCUlDTVA2X0ZJTFRFUl9TRVRQQVNTQUxMKGZpbHRlcnApIFwKLQkodm9pZCltZW1zZXQoZmlsdGVycCwgMHhmZiwgc2l6ZW9mKHN0cnVjdCBpY21wNl9maWx0ZXIpKQotI2RlZmluZQlJQ01QNl9GSUxURVJfU0VUQkxPQ0tBTEwoZmlsdGVycCkgXAogCSh2b2lkKW1lbXNldChmaWx0ZXJwLCAweDAwLCBzaXplb2Yoc3RydWN0IGljbXA2X2ZpbHRlcikpCisjZGVmaW5lCUlDTVA2X0ZJTFRFUl9TRVRCTE9DS0FMTChmaWx0ZXJwKSBcCisJKHZvaWQpbWVtc2V0KGZpbHRlcnAsIDB4ZmYsIHNpemVvZihzdHJ1Y3QgaWNtcDZfZmlsdGVyKSkKICNkZWZpbmUJSUNNUDZfRklMVEVSX1NFVFBBU1ModHlwZSwgZmlsdGVycCkgXAotCSgoKGZpbHRlcnApLT5pY21wNl9maWx0Wyh0eXBlKSA+PiA1XSkgfD0gKDEgPDwgKCh0eXBlKSAmIDMxKSkpCi0jZGVmaW5lCUlDTVA2X0ZJTFRFUl9TRVRCTE9DSyh0eXBlLCBmaWx0ZXJwKSBcCiAJKCgoZmlsdGVycCktPmljbXA2X2ZpbHRbKHR5cGUpID4+IDVdKSAmPSB+KDEgPDwgKCh0eXBlKSAmIDMxKSkpCisjZGVmaW5lCUlDTVA2X0ZJTFRFUl9TRVRCTE9DSyh0eXBlLCBmaWx0ZXJwKSBcCisJKCgoZmlsdGVycCktPmljbXA2X2ZpbHRbKHR5cGUpID4+IDVdKSB8PSAoMSA8PCAoKHR5cGUpICYgMzEpKSkKICNkZWZpbmUJSUNNUDZfRklMVEVSX1dJTExQQVNTKHR5cGUsIGZpbHRlcnApIFwKLQkoKCgoZmlsdGVycCktPmljbXA2X2ZpbHRbKHR5cGUpID4+IDVdKSAmICgxIDw8ICgodHlwZSkgJiAzMSkpKSAhPSAwKQotI2RlZmluZQlJQ01QNl9GSUxURVJfV0lMTEJMT0NLKHR5cGUsIGZpbHRlcnApIFwKIAkoKCgoZmlsdGVycCktPmljbXA2X2ZpbHRbKHR5cGUpID4+IDVdKSAmICgxIDw8ICgodHlwZSkgJiAzMSkpKSA9PSAwKQorI2RlZmluZQlJQ01QNl9GSUxURVJfV0lMTEJMT0NLKHR5cGUsIGZpbHRlcnApIFwKKwkoKCgoZmlsdGVycCktPmljbXA2X2ZpbHRbKHR5cGUpID4+IDVdKSAmICgxIDw8ICgodHlwZSkgJiAzMSkpKSAhPSAwKQorLyoKKyAqIEVORCBhbmRyb2lkLWNoYW5nZWQKKyAqLwogCiAvKgogICogVmFyaWFibGVzIHJlbGF0ZWQgdG8gdGhpcyBpbXBsZW1lbnRhdGlvbgpAQCAtNTY5LDggKzU5Nyw5IEBACiAjZGVmaW5lCUlDTVA2X1NUQVRfQkFEUlMJNTM4CS8qIGJhZCByb3V0ZXIgc29saWNpdGlhdGlvbiAqLwogI2RlZmluZQlJQ01QNl9TVEFUX0JBRFJBCTUzOQkvKiBiYWQgcm91dGVyIGFkdmVydGlzZW1lbnQgKi8KICNkZWZpbmUJSUNNUDZfU1RBVF9CQURSRURJUkVDVAk1NDAJLyogYmFkIHJlZGlyZWN0IG1lc3NhZ2UgKi8KKyNkZWZpbmUgSUNNUDZfU1RBVF9EUk9QUEVEX1JBUk9VVEUgNTQxCS8qIGRpc2NhcmRlZCByb3V0ZXMgZnJvbSByb3V0ZXIgYWR2ZXJ0aXNlbWVudCAqLwogCi0jZGVmaW5lCUlDTVA2X05TVEFUUwkJNTQxCisjZGVmaW5lCUlDTVA2X05TVEFUUwkJNTQyCiAKICNkZWZpbmUJSUNNUDZfRVJSU1RBVF9EU1RfVU5SRUFDSF9OT1JPVVRFCTAKICNkZWZpbmUJSUNNUDZfRVJSU1RBVF9EU1RfVU5SRUFDSF9BRE1JTgkJMQpAQCAtNjQwLDggKzY2OSw2IEBACiAJeyAibmQ2X21heHF1ZXVlbGVuIiwgQ1RMVFlQRV9JTlQgfSwgXAogfQogCi0jZGVmaW5lIFJURl9QUk9CRU1UVQlSVEZfUFJPVE8xCi0KICNpZmRlZiBfS0VSTkVMCiBzdHJ1Y3QJcnRlbnRyeTsKIHN0cnVjdAlydHRpbWVyOwpAQCAtNzI3LDQgKzc1NCw0MSBAQAogZXh0ZXJuIGludAlpY21wNl9yZWRpcnRpbWVvdXQ7CS8qIGNhY2hlIHRpbWUgZm9yIHJlZGlyZWN0IHJvdXRlcyAqLwogI2VuZGlmIC8qIF9LRVJORUwgKi8KIAorI2lmZGVmIElDTVA2X1NUUklOR1MKKy8qIEluZm86IGh0dHA6Ly93d3cuaWFuYS5vcmcvYXNzaWdubWVudHMvaWNtcHY2LXBhcmFtZXRlcnMgKi8KKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBpY21wNl90eXBlX2VycltdID0geworCSJyZXNlcnZlZDAiLCAidW5yZWFjaCIsICJwYWNrZXRfdG9vX2JpZyIsICJ0aW14Y2VlZCIsICJwYXJhbXByb2IiLAorCU5VTEwKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgaWNtcDZfdHlwZV9pbmZvW10gPSB7CisJImVjaG8iLCAiZWNob3JlcGx5IiwKKwkibWNhc3RsaXN0ZW5xIiwgIm1jYXN0bGlzdGVucmVwIiwgIm1jYXN0bGlzdGVuZG9uZSIsCisJInJ0c29sIiwgInJ0YWR2IiwgIm5laWdoc29sIiwgIm5laWdoYWR2IiwgInJlZGlyZWN0IiwKKwkicm91dGVycmVudW0iLCAibm9kZWluZm9xIiwgIm5vZGVpbmZvciIsICJpbnZuZWlnaHNvbCIsICJpbnZuZWlnaHJlcCIsCisJIm1jYXN0bGlzdGVucmVwMiIsICJoYWFkX3JlcSIsICJoYWFkX3JlcCIsCisJIm1vYmlsZV9wc29sIiwgIm1vYmlsZV9wYWR2IiwgImNnYV9zb2wiLCAiY2dhX2FkdiIsCisJImV4cGVyaW1lbnRhbDE1MCIsICJtY2FzdF9ydGFkdiIsICJtY2FzdF9ydHNvbCIsICJtY2FzdF9ydHRlcm0iLAorCSJmbWlwdjZfbXNnIiwgInJwbF9jb250cm9sIiwgTlVMTAorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBpY21wNl9jb2RlX25vbmVbXSA9IHsgIm5vbmUiLCBOVUxMIH07CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgaWNtcDZfY29kZV91bnJlYWNoW10gPSB7CisJIm5vcm91dGUiLCAiYWRtaW4iLCAiYmV5b25kc2NvcGUiLCAiYWRkciIsICJwb3J0IiwKKwkic3JjYWRkcl9wb2xpY3kiLCAicmVqZWN0X3JvdXRlIiwgInNvdXJjZV9yb3V0ZV9lcnIiLCBOVUxMCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGljbXA2X2NvZGVfdGlteGNlZWRbXSA9IHsKKwkiaW50cmFucyIsICJyZWFzcyIsIE5VTEwKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgaWNtcDZfY29kZV9wYXJhbXByb2JbXSA9IHsKKwkiaGRyX2ZpZWxkIiwgIm54dGhkcl90eXBlIiwgIm9wdGlvbiIsIE5VTEwKK307ICAgICAgCisKKy8qIG5vdCBhbGwgaW5mb3JtYXRpb25hbCBpY21wcyB0aGF0IGhhdmUgY29kZXMgaGF2ZSBhIG5hbWVzIGFycmF5ICovCisjZW5kaWYKKwogI2VuZGlmIC8qICFfTkVUSU5FVF9JQ01QNl9IXyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL25ldGluZXQvaWZfZXRoZXIuaCBiL2xpYmMvaW5jbHVkZS9uZXRpbmV0L2lmX2V0aGVyLmgKaW5kZXggNzAwYjlkYi4uZTQzMTdmYSAxMDA2NDQKLS0tIGEvbGliYy9pbmNsdWRlL25ldGluZXQvaWZfZXRoZXIuaAorKysgYi9saWJjL2luY2x1ZGUvbmV0aW5ldC9pZl9ldGhlci5oCkBAIC0yNSw2ICsyNSw4IEBACiAgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKICAqIFNVQ0ggREFNQUdFLgogICovCisKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CiAjaW5jbHVkZSA8bGludXgvaWZfZXRoZXIuaD4KICNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4KICNpZm5kZWYgRVRIRVJfQUREUl9MRU4KZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9uZXRpbmV0L2luLmggYi9saWJjL2luY2x1ZGUvbmV0aW5ldC9pbi5oCmluZGV4IDAxYmY1OGUuLmJmM2I0OTggMTAwNjQ0Ci0tLSBhL2xpYmMvaW5jbHVkZS9uZXRpbmV0L2luLmgKKysrIGIvbGliYy9pbmNsdWRlL25ldGluZXQvaW4uaApAQCAtMjksMTEgKzI5LDEzIEBACiAjZGVmaW5lIF9ORVRJTkVUX0lOX0hfCiAKICNpbmNsdWRlIDxlbmRpYW4uaD4KLSNpbmNsdWRlIDxsaW51eC9zb2NrZXQuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L2luNi5oPgorI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKwogI2luY2x1ZGUgPGxpbnV4L2luLmg+CiAjaW5jbHVkZSA8bGludXgvaW42Lmg+CiAjaW5jbHVkZSA8bGludXgvaXB2Ni5oPgotI2luY2x1ZGUgPG5ldGluZXQvaW42Lmg+CiAKIF9fQkVHSU5fREVDTFMKIApkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL25ldGluZXQvdGNwLmggYi9saWJjL2luY2x1ZGUvbmV0aW5ldC90Y3AuaAppbmRleCA5YWRmOTA0Li5iYzUyMjQ5IDEwMDY0NAotLS0gYS9saWJjL2luY2x1ZGUvbmV0aW5ldC90Y3AuaAorKysgYi9saWJjL2luY2x1ZGUvbmV0aW5ldC90Y3AuaApAQCAtMzEsNCArMzEsMjIgQEAKICNpbmNsdWRlIDxlbmRpYW4uaD4JCS8qIEluY2x1ZGUgKmJlZm9yZSogbGludXgvdGNwLmggKi8KICNpbmNsdWRlIDxsaW51eC90Y3AuaD4KIAorX19CRUdJTl9ERUNMUworCitlbnVtIHsKKyAgVENQX0VTVEFCTElTSEVEID0gMSwKKyAgVENQX1NZTl9TRU5ULAorICBUQ1BfU1lOX1JFQ1YsCisgIFRDUF9GSU5fV0FJVDEsCisgIFRDUF9GSU5fV0FJVDIsCisgIFRDUF9USU1FX1dBSVQsCisgIFRDUF9DTE9TRSwKKyAgVENQX0NMT1NFX1dBSVQsCisgIFRDUF9MQVNUX0FDSywKKyAgVENQX0xJU1RFTiwKKyAgVENQX0NMT1NJTkcKK307CisKK19fRU5EX0RFQ0xTCisKICNlbmRpZiAvKiBfTkVUSU5FVF9UQ1BfSCAqLwpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL3B0aHJlYWQuaCBiL2xpYmMvaW5jbHVkZS9wdGhyZWFkLmgKaW5kZXggOWQwNTc2OS4uZGJkZWU3MCAxMDA2NDQKLS0tIGEvbGliYy9pbmNsdWRlL3B0aHJlYWQuaAorKysgYi9saWJjL2luY2x1ZGUvcHRocmVhZC5oCkBAIC00Miw5ICs0MiwxMyBAQAogICAgIGludCB2b2xhdGlsZSB2YWx1ZTsKIH0gcHRocmVhZF9tdXRleF90OwogCi0jZGVmaW5lICBQVEhSRUFEX01VVEVYX0lOSVRJQUxJWkVSICAgICAgICAgICAgIHswfQotI2RlZmluZSAgUFRIUkVBRF9SRUNVUlNJVkVfTVVURVhfSU5JVElBTElaRVIgICB7MHg0MDAwfQotI2RlZmluZSAgUFRIUkVBRF9FUlJPUkNIRUNLX01VVEVYX0lOSVRJQUxJWkVSICB7MHg4MDAwfQorI2RlZmluZSAgX19QVEhSRUFEX01VVEVYX0lOSVRfVkFMVUUgICAgICAgICAgICAwCisjZGVmaW5lICBfX1BUSFJFQURfUkVDVVJTSVZFX01VVEVYX0lOSVRfVkFMVUUgIDB4NDAwMAorI2RlZmluZSAgX19QVEhSRUFEX0VSUk9SQ0hFQ0tfTVVURVhfSU5JVF9WQUxVRSAweDgwMDAKKworI2RlZmluZSAgUFRIUkVBRF9NVVRFWF9JTklUSUFMSVpFUiAgICAgICAgICAgICB7X19QVEhSRUFEX01VVEVYX0lOSVRfVkFMVUV9CisjZGVmaW5lICBQVEhSRUFEX1JFQ1VSU0lWRV9NVVRFWF9JTklUSUFMSVpFUiAgIHtfX1BUSFJFQURfUkVDVVJTSVZFX01VVEVYX0lOSVRfVkFMVUV9CisjZGVmaW5lICBQVEhSRUFEX0VSUk9SQ0hFQ0tfTVVURVhfSU5JVElBTElaRVIgIHtfX1BUSFJFQURfRVJST1JDSEVDS19NVVRFWF9JTklUX1ZBTFVFfQogCiBlbnVtIHsKICAgICBQVEhSRUFEX01VVEVYX05PUk1BTCA9IDAsCkBAIC0xNDcsNyArMTUxLDcgQEAKIAogaW50IHB0aHJlYWRfZ2V0c2NoZWRwYXJhbShwdGhyZWFkX3QgdGhpZCwgaW50ICogcG9saWN5LAogICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKiBwYXJhbSk7Ci1pbnQgcHRocmVhZF9zZXRzY2hlZHBhcmFtKHB0aHJlYWRfdCB0aGlkLCBpbnQgcG9pbGN5LAoraW50IHB0aHJlYWRfc2V0c2NoZWRwYXJhbShwdGhyZWFkX3QgdGhpZCwgaW50IHBvbGljeSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNjaGVkX3BhcmFtIGNvbnN0ICogcGFyYW0pOwogCiBpbnQgcHRocmVhZF9tdXRleGF0dHJfaW5pdChwdGhyZWFkX211dGV4YXR0cl90ICphdHRyKTsKQEAgLTMwNiw5ICszMTAsNCBAQAogfSAvKiBleHRlcm4gIkMiICovCiAjZW5kaWYKIAotLyoqKioqKioqKioqKiBUTyBGSVggKioqKioqKioqKioqLwotCi0jZGVmaW5lIExPTkdfTE9OR19NQVggX19MT05HX0xPTkdfTUFYX18KLSNkZWZpbmUgTE9OR19MT05HX01JTiAoLV9fTE9OR19MT05HX01BWF9fIC0gMSkKLQogI2VuZGlmIC8qIF9QVEhSRUFEX0hfICovCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvcmVzb2x2LmggYi9saWJjL2luY2x1ZGUvcmVzb2x2LmgKaW5kZXggYmIyMWMyMy4uMzZiOTNlZSAxMDA2NDQKLS0tIGEvbGliYy9pbmNsdWRlL3Jlc29sdi5oCisrKyBiL2xpYmMvaW5jbHVkZS9yZXNvbHYuaApAQCAtNDMsMjcgKzQzLDE0IEBACiBleHRlcm4gc3RydWN0IF9fcmVzX3N0YXRlICpfX3Jlc19zdGF0ZSh2b2lkKTsKICNkZWZpbmUgX3JlcyAoKl9fcmVzX3N0YXRlKCkpCiAKLS8qIEJhc2UtNjQgZnVuY3Rpb25zIC0gYmVjYXVzZSBzb21lIGNvZGUgZXhwZWN0cyBpdCB0aGVyZSAqLworI2RlZmluZSBiNjRfbnRvcCBfX2I2NF9udG9wCisjZGVmaW5lIGI2NF9wdG9uIF9fYjY0X3B0b24KK2V4dGVybiBpbnQgYjY0X250b3AodV9jaGFyIGNvbnN0Kiwgc2l6ZV90LCBjaGFyKiwgc2l6ZV90KTsKK2V4dGVybiBpbnQgYjY0X3B0b24oY2hhciBjb25zdCosIHVfY2hhciosIHNpemVfdCk7CiAKLSNkZWZpbmUgYjY0X250b3AgICAgICAgIF9fYjY0X250b3AKLSNkZWZpbmUgYjY0X3B0b24gICAgICAgIF9fYjY0X3B0b24KLWV4dGVybiBpbnQgICBiNjRfbnRvcCh1X2NoYXIgY29uc3QgKiwgc2l6ZV90LCBjaGFyICosIHNpemVfdCk7Ci1leHRlcm4gaW50ICAgYjY0X3B0b24oY2hhciBjb25zdCAqLCB1X2NoYXIgKiwgc2l6ZV90KTsKLQotLyogU2V0IG5hbWUgb2YgZGVmYXVsdCBpbnRlcmZhY2UgKi8KLWV4dGVybiB2b2lkIF9yZXNvbHZfc2V0X2RlZmF1bHRfaWZhY2UoY29uc3QgY2hhciogaWZuYW1lKTsKLQotLyogc2V0IG5hbWUgc2VydmVycyBmb3IgYW4gaW50ZXJmYWNlICovCi1leHRlcm4gdm9pZCBfcmVzb2x2X3NldF9uYW1lc2VydmVyc19mb3JfaWZhY2UoY29uc3QgY2hhciogaWZuYW1lLCBjaGFyKiogc2VydmVycywgaW50IG51bXNlcnZlcnMpOwotCi0vKiB0ZWxsIHJlc29sdmVyIG9mIHRoZSBhZGRyZXNzIG9mIGFuIGludGVyZmFjZSAqLwotZXh0ZXJuIHZvaWQgX3Jlc29sdl9zZXRfYWRkcl9vZl9pZmFjZShjb25zdCBjaGFyKiBpZm5hbWUsIHN0cnVjdCBpbl9hZGRyKiBhZGRyKTsKLQotLyogZmx1c2ggdGhlIGNhY2hlIGFzc29jaWF0ZWQgd2l0aCB0aGUgZGVmYXVsdCBpbnRlcmZhY2UgKi8KLWV4dGVybiB2b2lkIF9yZXNvbHZfZmx1c2hfY2FjaGVfZm9yX2RlZmF1bHRfaWZhY2UoKTsKLQotLyogZmx1c2ggdGhlIGNhY2hlIGFzc29jaWF0ZWQgd2l0aCBhIGNlcnRhaW4gaW50ZXJmYWNlICovCi1leHRlcm4gdm9pZCBfcmVzb2x2X2ZsdXNoX2NhY2hlX2Zvcl9pZmFjZShjb25zdCBjaGFyKiBpZm5hbWUpOworI2RlZmluZSBkbl9jb21wIF9fZG5fY29tcAorZXh0ZXJuIGludCBkbl9jb21wKGNvbnN0IGNoYXIqLCB1X2NoYXIqLCBpbnQsIHVfY2hhcioqLCB1X2NoYXIqKik7CitleHRlcm4gaW50IGRuX2V4cGFuZChjb25zdCB1X2NoYXIqLCBjb25zdCB1X2NoYXIqLCBjb25zdCB1X2NoYXIqLCBjaGFyKiwgaW50KTsKIAogX19FTkRfREVDTFMKIApkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL3NjaGVkLmggYi9saWJjL2luY2x1ZGUvc2NoZWQuaAppbmRleCBjYTcyZGE3Li40ZDdkOGM2IDEwMDY0NAotLS0gYS9saWJjL2luY2x1ZGUvc2NoZWQuaAorKysgYi9saWJjL2luY2x1ZGUvc2NoZWQuaApAQCAtNzEsNiArNzEsNyBAQAogCiAjaWZkZWYgX0dOVV9TT1VSQ0UKIGV4dGVybiBpbnQgY2xvbmUoaW50ICgqZm4pKHZvaWQgKiksIHZvaWQgKmNoaWxkX3N0YWNrLCBpbnQgZmxhZ3MsIHZvaWQqICBhcmcsIC4uLik7CitleHRlcm4gaW50IHVuc2hhcmUoaW50KTsKICNlbmRpZgogCiAvKiBTdXBwb3J0IGZvciBjcHUgdGhyZWFkIGFmZmluaXR5ICovCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvc2VhcmNoLmggYi9saWJjL2luY2x1ZGUvc2VhcmNoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTEyZTQ5ZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvaW5jbHVkZS9zZWFyY2guaApAQCAtMCwwICsxLDM5IEBACisvKi0KKyAqIFdyaXR0ZW4gYnkgSi5ULiBDb25rbGluIDxqdGNAbmV0YnNkLm9yZz4KKyAqIFB1YmxpYyBkb21haW4uCisgKgorICoJJE5ldEJTRDogc2VhcmNoLmgsdiAxLjEyIDE5OTkvMDIvMjIgMTA6MzQ6MjggY2hyaXN0b3MgRXhwICQKKyAqICRGcmVlQlNEOiByZWxlYXNlLzkuMC4wL2luY2x1ZGUvc2VhcmNoLmggMTA1MjUwIDIwMDItMTAtMTYgMTQ6Mjk6MjNaIHJvYmVydCAkCisgKi8KKworI2lmbmRlZiBfU0VBUkNIX0hfCisjZGVmaW5lIF9TRUFSQ0hfSF8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorI2luY2x1ZGUgPHN5cy9fdHlwZXMuaD4KKwordHlwZWRlZgllbnVtIHsKKwlwcmVvcmRlciwKKwlwb3N0b3JkZXIsCisJZW5kb3JkZXIsCisJbGVhZgorfSBWSVNJVDsKKworI2lmZGVmIF9TRUFSQ0hfUFJJVkFURQordHlwZWRlZglzdHJ1Y3Qgbm9kZSB7CisJY2hhciAgICAgICAgICprZXk7CisJc3RydWN0IG5vZGUgICpsbGluaywgKnJsaW5rOworfSBub2RlX3Q7CisjZW5kaWYKKworX19CRUdJTl9ERUNMUwordm9pZAkqdGRlbGV0ZShjb25zdCB2b2lkICogX19yZXN0cmljdCwgdm9pZCAqKiBfX3Jlc3RyaWN0LAorCSAgICBpbnQgKCopKGNvbnN0IHZvaWQgKiwgY29uc3Qgdm9pZCAqKSk7Cit2b2lkCSp0ZmluZChjb25zdCB2b2lkICosIHZvaWQgKiBjb25zdCAqLAorCSAgICBpbnQgKCopKGNvbnN0IHZvaWQgKiwgY29uc3Qgdm9pZCAqKSk7Cit2b2lkCSp0c2VhcmNoKGNvbnN0IHZvaWQgKiwgdm9pZCAqKiwgaW50ICgqKShjb25zdCB2b2lkICosIGNvbnN0IHZvaWQgKikpOwordm9pZAkgdHdhbGsoY29uc3Qgdm9pZCAqLCB2b2lkICgqKShjb25zdCB2b2lkICosIFZJU0lULCBpbnQpKTsKK3ZvaWQJIHRkZXN0cm95KHZvaWQgKiwgdm9pZCAoKikodm9pZCAqKSk7CitfX0VORF9ERUNMUworCisjZW5kaWYgLyogIV9TRUFSQ0hfSF8gKi8KZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9zaGExLmggYi9saWJjL2luY2x1ZGUvc2hhMS5oCmluZGV4IGY3YWRhNDYuLjdmNmNmNWQgMTAwNjQ0Ci0tLSBhL2xpYmMvaW5jbHVkZS9zaGExLmgKKysrIGIvbGliYy9pbmNsdWRlL3NoYTEuaApAQCAtMSwzMSArMSwyMyBAQAotLyoJJE5ldEJTRDogc2hhMS5oLHYgMS4xMyAyMDA1LzEyLzI2IDE4OjQxOjM2IHBlcnJ5IEV4cCAkCSovCi0KIC8qCi0gKiBTSEEtMSBpbiBDCi0gKiBCeSBTdGV2ZSBSZWlkIDxzdGV2ZUBlZG13ZWIuY29tPgotICogMTAwJSBQdWJsaWMgRG9tYWluCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KICAqLwogCi0jaWZuZGVmIF9TWVNfU0hBMV9IXwotI2RlZmluZQlfU1lTX1NIQTFfSF8KKyNpZm5kZWYgX1NIQTFfSF8KKyNkZWZpbmUgX1NIQTFfSF8KIAotI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI3dhcm5pbmcgImluY2x1ZGUgPHN5cy9zaGExLmg+IGluc3RlYWQgZm9yIGJldHRlciBwb3J0YWJpbGl0eSIKKyNpbmNsdWRlIDxzeXMvc2hhMS5oPgogCi0jZGVmaW5lIFNIQTFfRElHRVNUX0xFTkdUSAkJMjAKLSNkZWZpbmUgU0hBMV9ESUdFU1RfU1RSSU5HX0xFTkdUSAk0MQotCi10eXBlZGVmIHN0cnVjdCB7Ci0JdWludDMyX3Qgc3RhdGVbNV07Ci0JdWludDMyX3QgY291bnRbMl07Ci0JdV9jaGFyIGJ1ZmZlcls2NF07Ci19IFNIQTFfQ1RYOwotCi1fX0JFR0lOX0RFQ0xTCi12b2lkCVNIQTFUcmFuc2Zvcm0odWludDMyX3RbNV0sIGNvbnN0IHVfY2hhcls2NF0pOwotdm9pZAlTSEExSW5pdChTSEExX0NUWCAqKTsKLXZvaWQJU0hBMVVwZGF0ZShTSEExX0NUWCAqLCBjb25zdCB1X2NoYXIgKiwgdV9pbnQpOwotdm9pZAlTSEExRmluYWwodV9jaGFyW1NIQTFfRElHRVNUX0xFTkdUSF0sIFNIQTFfQ1RYICopOwotX19FTkRfREVDTFMKLQotI2VuZGlmIC8qIF9TWVNfU0hBMV9IXyAqLworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvc2lnbmFsLmggYi9saWJjL2luY2x1ZGUvc2lnbmFsLmgKaW5kZXggOTFjM2IwMC4uMTVkMmQzYSAxMDA2NDQKLS0tIGEvbGliYy9pbmNsdWRlL3NpZ25hbC5oCisrKyBiL2xpYmMvaW5jbHVkZS9zaWduYWwuaApAQCAtMjgsNiArMjgsNyBAQAogI2lmbmRlZiBfU0lHTkFMX0hfCiAjZGVmaW5lIF9TSUdOQUxfSF8KIAorI2luY2x1ZGUgPGVycm5vLmg+CiAjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CiAjaW5jbHVkZSA8bGltaXRzLmg+CQkvKiBGb3IgTE9OR19CSVQgKi8KICNpbmNsdWRlIDxzdHJpbmcuaD4JCS8qIEZvciBtZW1zZXQoKSAqLwpAQCAtNTMsNDUgKzU0LDU3IEBACiAjICBkZWZpbmUgX05TSUcgIDY0CiAjZW5kaWYKIAotZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBzeXNfc2lnbGlzdFtdOwotZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBzeXNfc2lnbmFtZVtdOworZXh0ZXJuIGNvbnN0IGNoYXIqIGNvbnN0IHN5c19zaWdsaXN0W107CitleHRlcm4gY29uc3QgY2hhciogY29uc3Qgc3lzX3NpZ25hbWVbXTsKIAotc3RhdGljIF9faW5saW5lX18gaW50IHNpZ2lzbWVtYmVyKHNpZ3NldF90ICpzZXQsIGludCBzaWdudW0pCi17Ci0gICAgdW5zaWduZWQgbG9uZyAqbG9jYWxfc2V0ID0gKHVuc2lnbmVkIGxvbmcgKilzZXQ7Ci0gICAgc2lnbnVtLS07Ci0gICAgcmV0dXJuIChpbnQpKChsb2NhbF9zZXRbc2lnbnVtL0xPTkdfQklUXSA+PiAoc2lnbnVtJUxPTkdfQklUKSkgJiAxKTsKK3N0YXRpYyBfX2lubGluZV9fIGludCBzaWdpc21lbWJlcihjb25zdCBzaWdzZXRfdCogc2V0LCBpbnQgc2lnbnVtKSB7CisgIGludCBiaXQgPSBzaWdudW0gLSAxOyAvLyBTaWduYWwgbnVtYmVycyBzdGFydCBhdCAxLCBidXQgYml0IHBvc2l0aW9ucyBzdGFydCBhdCAwLgorICBjb25zdCB1bnNpZ25lZCBsb25nKiBsb2NhbF9zZXQgPSAoY29uc3QgdW5zaWduZWQgbG9uZyopIHNldDsKKyAgaWYgKHNldCA9PSBOVUxMIHx8IGJpdCA8IDAgfHwgYml0ID49IChpbnQpICg4KnNpemVvZihzaWdzZXRfdCkpKSB7CisgICAgZXJybm8gPSBFSU5WQUw7CisgICAgcmV0dXJuIC0xOworICB9CisgIHJldHVybiAoaW50KSAoKGxvY2FsX3NldFtiaXQgLyBMT05HX0JJVF0gPj4gKGJpdCAlIExPTkdfQklUKSkgJiAxKTsKIH0KIAotCi1zdGF0aWMgX19pbmxpbmVfXyBpbnQgc2lnYWRkc2V0KHNpZ3NldF90ICpzZXQsIGludCBzaWdudW0pCi17Ci0gICAgdW5zaWduZWQgbG9uZyAqbG9jYWxfc2V0ID0gKHVuc2lnbmVkIGxvbmcgKilzZXQ7Ci0gICAgc2lnbnVtLS07Ci0gICAgbG9jYWxfc2V0W3NpZ251bS9MT05HX0JJVF0gfD0gMVVMIDw8IChzaWdudW0lTE9OR19CSVQpOwotICAgIHJldHVybiAwOworc3RhdGljIF9faW5saW5lX18gaW50IHNpZ2FkZHNldChzaWdzZXRfdCogc2V0LCBpbnQgc2lnbnVtKSB7CisgIGludCBiaXQgPSBzaWdudW0gLSAxOyAvLyBTaWduYWwgbnVtYmVycyBzdGFydCBhdCAxLCBidXQgYml0IHBvc2l0aW9ucyBzdGFydCBhdCAwLgorICB1bnNpZ25lZCBsb25nKiBsb2NhbF9zZXQgPSAodW5zaWduZWQgbG9uZyopIHNldDsKKyAgaWYgKHNldCA9PSBOVUxMIHx8IGJpdCA8IDAgfHwgYml0ID49IChpbnQpICg4KnNpemVvZihzaWdzZXRfdCkpKSB7CisgICAgZXJybm8gPSBFSU5WQUw7CisgICAgcmV0dXJuIC0xOworICB9CisgIGxvY2FsX3NldFtiaXQgLyBMT05HX0JJVF0gfD0gMVVMIDw8IChiaXQgJSBMT05HX0JJVCk7CisgIHJldHVybiAwOwogfQogCi0KLXN0YXRpYyBfX2lubGluZV9fIGludCBzaWdkZWxzZXQoc2lnc2V0X3QgKnNldCwgaW50IHNpZ251bSkKLXsKLSAgICB1bnNpZ25lZCBsb25nICpsb2NhbF9zZXQgPSAodW5zaWduZWQgbG9uZyAqKXNldDsKLSAgICBzaWdudW0tLTsKLSAgICBsb2NhbF9zZXRbc2lnbnVtL0xPTkdfQklUXSAmPSB+KDFVTCA8PCAoc2lnbnVtJUxPTkdfQklUKSk7Ci0gICAgcmV0dXJuIDA7CitzdGF0aWMgX19pbmxpbmVfXyBpbnQgc2lnZGVsc2V0KHNpZ3NldF90KiBzZXQsIGludCBzaWdudW0pIHsKKyAgaW50IGJpdCA9IHNpZ251bSAtIDE7IC8vIFNpZ25hbCBudW1iZXJzIHN0YXJ0IGF0IDEsIGJ1dCBiaXQgcG9zaXRpb25zIHN0YXJ0IGF0IDAuCisgIHVuc2lnbmVkIGxvbmcqIGxvY2FsX3NldCA9ICh1bnNpZ25lZCBsb25nKikgc2V0OworICBpZiAoc2V0ID09IE5VTEwgfHwgYml0IDwgMCB8fCBiaXQgPj0gKGludCkgKDgqc2l6ZW9mKHNpZ3NldF90KSkpIHsKKyAgICBlcnJubyA9IEVJTlZBTDsKKyAgICByZXR1cm4gLTE7CisgIH0KKyAgbG9jYWxfc2V0W2JpdCAvIExPTkdfQklUXSAmPSB+KDFVTCA8PCAoYml0ICUgTE9OR19CSVQpKTsKKyAgcmV0dXJuIDA7CiB9CiAKLQotc3RhdGljIF9faW5saW5lX18gaW50IHNpZ2VtcHR5c2V0KHNpZ3NldF90ICpzZXQpCi17Ci0gICAgbWVtc2V0KHNldCwgMCwgc2l6ZW9mICpzZXQpOwotICAgIHJldHVybiAwOworc3RhdGljIF9faW5saW5lX18gaW50IHNpZ2VtcHR5c2V0KHNpZ3NldF90KiBzZXQpIHsKKyAgaWYgKHNldCA9PSBOVUxMKSB7CisgICAgZXJybm8gPSBFSU5WQUw7CisgICAgcmV0dXJuIC0xOworICB9CisgIG1lbXNldChzZXQsIDAsIHNpemVvZiAqc2V0KTsKKyAgcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBfX2lubGluZV9fIGludCBzaWdmaWxsc2V0KHNpZ3NldF90ICpzZXQpCi17Ci0gICAgbWVtc2V0KHNldCwgfjAsIHNpemVvZiAqc2V0KTsKLSAgICByZXR1cm4gMDsKK3N0YXRpYyBfX2lubGluZV9fIGludCBzaWdmaWxsc2V0KHNpZ3NldF90KiBzZXQpIHsKKyAgaWYgKHNldCA9PSBOVUxMKSB7CisgICAgZXJybm8gPSBFSU5WQUw7CisgICAgcmV0dXJuIC0xOworICB9CisgIG1lbXNldChzZXQsIH4wLCBzaXplb2YgKnNldCk7CisgIHJldHVybiAwOwogfQogCiAKQEAgLTEyNSw2ICsxMzgsOCBAQAogZXh0ZXJuIGludCBraWxscGcoaW50IHBncnAsIGludCBzaWcpOwogZXh0ZXJuIGludCBzaWdhbHRzdGFjayhjb25zdCBzdGFja190ICpzcywgc3RhY2tfdCAqb3NzKTsKIAorZXh0ZXJuIHZvaWQgcHNpZ2luZm8oY29uc3Qgc2lnaW5mb190KiBzaSwgY29uc3QgY2hhciogbWVzc2FnZSk7CitleHRlcm4gdm9pZCBwc2lnbmFsKGludCBzaWduYWxfbnVtYmVyLCBjb25zdCBjaGFyKiBtZXNzYWdlKTsKIAogX19FTkRfREVDTFMKIApkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL3N0ZGludC5oIGIvbGliYy9pbmNsdWRlL3N0ZGludC5oCmluZGV4IGU3OTE0NzUuLjhlMmY5OWUgMTAwNjQ0Ci0tLSBhL2xpYmMvaW5jbHVkZS9zdGRpbnQuaAorKysgYi9saWJjL2luY2x1ZGUvc3RkaW50LmgKQEAgLTMxLDggKzMxLDYgQEAKICNpbmNsdWRlIDxzdGRkZWYuaD4KICNpbmNsdWRlIDxzeXMvX3R5cGVzLmg+CiAKLQotCiAjaWYgIWRlZmluZWQoX19jcGx1c3BsdXMpIHx8IGRlZmluZWQoX19TVERDX0xJTUlUX01BQ1JPUykKICMgIGRlZmluZSBfX1NURElOVF9MSU1JVFMKICNlbmRpZgpAQCAtNDEsMjAgKzM5LDE0IEBACiAjICBkZWZpbmUgIF9fU1RESU5UX01BQ1JPUwogI2VuZGlmCiAKLSNpZiAhZGVmaW5lZCBfX1NUUklDVF9BTlNJX18gfHwgX19TVERDX1ZFUlNJT05fXyA+PSAxOTk5MDFMCi0jICBkZWZpbmUgX19TVERDX0lOVDY0X18KLSNlbmRpZgotCiB0eXBlZGVmIF9faW50OF90ICAgICAgaW50OF90OwogdHlwZWRlZiBfX3VpbnQ4X3QgICAgIHVpbnQ4X3Q7CiB0eXBlZGVmIF9faW50MTZfdCAgICAgaW50MTZfdDsKIHR5cGVkZWYgX191aW50MTZfdCAgICB1aW50MTZfdDsKIHR5cGVkZWYgX19pbnQzMl90ICAgICBpbnQzMl90OwogdHlwZWRlZiBfX3VpbnQzMl90ICAgIHVpbnQzMl90OwotI2lmIGRlZmluZWQoX19TVERDX0lOVDY0X18pCiB0eXBlZGVmIF9faW50NjRfdCAgICAgaW50NjRfdDsKIHR5cGVkZWYgX191aW50NjRfdCAgICB1aW50NjRfdDsKLSNlbmRpZgogCiAvKgogICogaW50OF90ICYgdWludDhfdApAQCAtNzQsNyArNjYsNyBAQAogIyAgZGVmaW5lIElOVF9GQVNUOF9NSU4gICAgSU5UOF9NSU4KICMgIGRlZmluZSBJTlRfRkFTVDhfTUFYICAgIElOVDhfTUFYCiAKLSMgIGRlZmluZSBVSU5UOF9NQVggICAgICAgICAgICgyNTVVKQorIyAgZGVmaW5lIFVJTlQ4X01BWCAgICAgICAgICAgKDI1NSkKICMgIGRlZmluZSBVSU5UX0xFQVNUOF9NQVggICAgIFVJTlQ4X01BWAogIyAgZGVmaW5lIFVJTlRfRkFTVDhfTUFYICAgICAgVUlOVDhfTUFYCiAjZW5kaWYKQEAgLTg0LDcgKzc2LDcgQEAKICMgIGRlZmluZSBJTlRfTEVBU1Q4X0MoYykJIElOVDhfQyhjKQogIyAgZGVmaW5lIElOVF9GQVNUOF9DKGMpCUlOVDhfQyhjKQogCi0jICBkZWZpbmUgVUlOVDhfQyhjKQljICMjIFUKKyMgIGRlZmluZSBVSU5UOF9DKGMpCWMKICMgIGRlZmluZSBVSU5UX0xFQVNUOF9DKGMpICBVSU5UOF9DKGMpCiAjICBkZWZpbmUgVUlOVF9GQVNUOF9DKGMpICBVSU5UOF9DKGMpCiAjZW5kaWYKQEAgLTkzLDcgKzg1LDYgQEAKICAqIGludDE2X3QgJiB1aW50MTZfdAogICovCiAKLQogdHlwZWRlZiBpbnQxNl90ICAgICAgIGludF9sZWFzdDE2X3Q7CiB0eXBlZGVmIGludDMyX3QgICAgICAgaW50X2Zhc3QxNl90OwogCkBAIC0xMDgsNyArOTksNyBAQAogIyAgZGVmaW5lIElOVF9GQVNUMTZfTUlOCUlOVDMyX01JTgogIyAgZGVmaW5lIElOVF9GQVNUMTZfTUFYCUlOVDMyX01BWAogCi0jICBkZWZpbmUgVUlOVDE2X01BWAkoNjU1MzVVKQorIyAgZGVmaW5lIFVJTlQxNl9NQVgJKDY1NTM1KQogIyAgZGVmaW5lIFVJTlRfTEVBU1QxNl9NQVggVUlOVDE2X01BWAogIyAgZGVmaW5lIFVJTlRfRkFTVDE2X01BWCBVSU5UMzJfTUFYCiAjZW5kaWYKQEAgLTExOCw3ICsxMDksNyBAQAogIyAgZGVmaW5lIElOVF9MRUFTVDE2X0MoYykgSU5UMTZfQyhjKQogIyAgZGVmaW5lIElOVF9GQVNUMTZfQyhjKQkgSU5UMzJfQyhjKQogCi0jICBkZWZpbmUgVUlOVDE2X0MoYykJYyAjIyBVCisjICBkZWZpbmUgVUlOVDE2X0MoYykJYwogIyAgZGVmaW5lIFVJTlRfTEVBU1QxNl9DKGMpIFVJTlQxNl9DKGMpCiAjICBkZWZpbmUgVUlOVF9GQVNUMTZfQyhjKSBVSU5UMzJfQyhjKQogI2VuZGlmCkBAIC0xNTYsMTcgKzE0NywxNiBAQAogIyAgZGVmaW5lIFVJTlRfRkFTVDMyX0MoYykgVUlOVDMyX0MoYykKICNlbmRpZgogCi0jaWYgZGVmaW5lZChfX1NURENfSU5UNjRfXykKIC8qCiAgKiAgaW50NjRfdAogICovCisKIHR5cGVkZWYgaW50NjRfdCAgICAgICBpbnRfbGVhc3Q2NF90OwogdHlwZWRlZiBpbnQ2NF90ICAgICAgIGludF9mYXN0NjRfdDsKIAogdHlwZWRlZiB1aW50NjRfdCAgICAgIHVpbnRfbGVhc3Q2NF90OwogdHlwZWRlZiB1aW50NjRfdCAgICAgIHVpbnRfZmFzdDY0X3Q7CiAKLQogI2lmZGVmIF9fU1RESU5UX0xJTUlUUwogIyAgZGVmaW5lIElOVDY0X01JTiAgICAgICAgKF9fSU5UNjRfQygtOTIyMzM3MjAzNjg1NDc3NTgwNyktMSkKICMgIGRlZmluZSBJTlQ2NF9NQVggICAgICAgIChfX0lOVDY0X0MoOTIyMzM3MjAzNjg1NDc3NTgwNykpCkBAIC0xOTMsMTMgKzE4MywxMCBAQAogIyAgZGVmaW5lIFVJTlRfRkFTVDY0X0MoYykgIFVJTlQ2NF9DKGMpCiAjZW5kaWYKIAotCiAjICBkZWZpbmUgX19QUkk2NF9SQU5LICAgImxsIgogIyAgZGVmaW5lIF9fUFJJRkFTVF9SQU5LICIiCiAjICBkZWZpbmUgX19QUklQVFJfUkFOSyAgIiIKIAotI2VuZGlmIC8qIF9fU1REQ19JTlQ2NF9fICovCi0KIC8qCiAgKiBpbnRwdHJfdCAmIHVpbnRwdHJfdAogICovCkBAIC0yMjEsMTQgKzIwOCwxMCBAQAogIyAgZGVmaW5lIFBUUkRJRkZfQyhjKSAgSU5UMzJfQyhjKQogI2VuZGlmCiAKLQotCiAvKgogICogIGludG1heF90ICYgdWludG1heF90CiAgKi8KIAotI2lmIGRlZmluZWQoX19TVERDX0lOVDY0X18pCi0KIHR5cGVkZWYgdWludDY0X3QgdWludG1heF90OwogdHlwZWRlZiBpbnQ2NF90ICBpbnRtYXhfdDsKIApAQCAtMjQzLDI5ICsyMjYsMjMgQEAKICMgIGRlZmluZSBVSU5UTUFYX0MoYykJVUlOVDY0X0MoYykKICNlbmRpZgogCi0jZWxzZSAvKiAhX19TVERDX0lOVDY0X18gKi8KLQotdHlwZWRlZiB1aW50MzJfdCAgdWludG1heF90OwotdHlwZWRlZiBpbnQzMl90ICAgaW50bWF4X3Q7CisvKgorICogc2lnX2F0b21pY190LCBzaXplX3QsIHdjaGFyX3QsIGFuZCB3aW50X3QuCisgKi8KIAogI2lmZGVmIF9fU1RESU5UX0xJTUlUUwotIyAgZGVmaW5lICBJTlRNQVhfTUlOICAgIElOVDMyX01JTgotIyAgZGVmaW5lICBJTlRNQVhfTUFYICAgIElOVDMyX01BWAotIyAgZGVmaW5lICBVSU5UTUFYX01BWCAgIFVJTlQzMl9NQVgKLSNlbmRpZgorIyAgZGVmaW5lIFNJR19BVE9NSUNfTUFYIElOVDMyX01BWAorIyAgZGVmaW5lIFNJR19BVE9NSUNfTUlOIElOVDMyX01JTgogCi0jaWZkZWYgX19TVERJTlRfTUFDUk9TCi0jICBkZWZpbmUgSU5UTUFYX0MoYykJSU5UMzJfQyhjKQotIyAgZGVmaW5lIFVJTlRNQVhfQyhjKQlVSU5UMzJfQyhjKQotI2VuZGlmCisjICBkZWZpbmUgU0laRV9NQVggVUlOVDMyX01BWAogCi0jZW5kaWYgLyogIV9fU1REQ19JTlQ2NF9fICovCisjICBpZm5kZWYgV0NIQVJfTUFYIC8qIFRoZXNlIG1pZ2h0IGFsc28gaGF2ZSBiZWVuIGRlZmluZWQgYnkgPHdjaGFyLmg+LiAqLworIyAgICBkZWZpbmUgV0NIQVJfTUFYIElOVDMyX01BWAorIyAgICBkZWZpbmUgV0NIQVJfTUlOIElOVDMyX01JTgorIyAgZW5kaWYKIAotCi0vKiBzaXplX3QgaXMgZGVmaW5lZCBieSB0aGUgR0NDLXNwZWNpZmljIDxzdGRkZWYuaD4gKi8KLSNpZm5kZWYgX1NTSVpFX1RfREVGSU5FRF8KLSNkZWZpbmUgX1NTSVpFX1RfREVGSU5FRF8KLXR5cGVkZWYgbG9uZyBpbnQgIHNzaXplX3Q7CisjICBkZWZpbmUgV0lOVF9NQVggSU5UMzJfTUFYCisjICBkZWZpbmUgV0lOVF9NSU4gSU5UMzJfTUlOCiAjZW5kaWYKIAogI2RlZmluZSBfQklUU0laRSAzMgpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL3N0ZGlvLmggYi9saWJjL2luY2x1ZGUvc3RkaW8uaAppbmRleCA0MDA2ODgyLi4yM2ZjOTQ0IDEwMDY0NAotLS0gYS9saWJjL2luY2x1ZGUvc3RkaW8uaAorKysgYi9saWJjL2luY2x1ZGUvc3RkaW8uaApAQCAtMzksNDAgKzM5LDE0IEBACiAjZGVmaW5lCV9TVERJT19IXwogCiAjaW5jbHVkZSA8c3lzL2NkZWZzLmg+Ci0jaW5jbHVkZSA8c3lzL190eXBlcy5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgogCi0vKiB2YV9saXN0IGFuZCBzaXplX3QgbXVzdCBiZSBkZWZpbmVkIGJ5IHN0ZGlvLmggYWNjb3JkaW5nIHRvIFBvc2l4ICovCi0jZGVmaW5lIF9fbmVlZF9fX3ZhX2xpc3QKICNpbmNsdWRlIDxzdGRhcmcuaD4KLQotLyogbm90ZSB0aGF0IHRoaXMgZm9yY2VzIHN0ZGRlZi5oIHRvICpvbmx5KiBkZWZpbmUgc2l6ZV90ICovCi0jZGVmaW5lIF9fbmVlZF9zaXplX3QKICNpbmNsdWRlIDxzdGRkZWYuaD4KIAorI2RlZmluZSBfX25lZWRfTlVMTAogI2luY2x1ZGUgPHN0ZGRlZi5oPgogCi0jaWYgX19CU0RfVklTSUJMRSB8fCBfX1BPU0lYX1ZJU0lCTEUgfHwgX19YUEdfVklTSUJMRQotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgkvKiBYWFggc2hvdWxkIGJlIHJlbW92ZWQgKi8KLSNlbmRpZgotCi0jaWZuZGVmCV9TSVpFX1RfREVGSU5FRF8KLSNkZWZpbmUJX1NJWkVfVF9ERUZJTkVEXwotdHlwZWRlZgl1bnNpZ25lZCBsb25nICAgIHNpemVfdDsKLSNlbmRpZgotCi0jaWZuZGVmCV9PRkZfVF9ERUZJTkVEXwotI2RlZmluZQlfT0ZGX1RfREVGSU5FRF8KLXR5cGVkZWYJbG9uZyAgICBvZmZfdDsKLSNlbmRpZgotCi0jaWZuZGVmIE5VTEwKLSNpZmRlZiAJX19HTlVHX18KLSNkZWZpbmUJTlVMTAlfX251bGwKLSNlbHNlCi0jZGVmaW5lCU5VTEwJMEwKLSNlbmRpZgotI2VuZGlmCi0KICNkZWZpbmUJX0ZTVERJTwkJCS8qIERlZmluZSBmb3IgbmV3IHN0ZGlvIHdpdGggZnVuY3Rpb25zLiAqLwogCiB0eXBlZGVmIG9mZl90IGZwb3NfdDsJCS8qIHN0ZGlvIGZpbGUgcG9zaXRpb24gdHlwZSAqLwpAQCAtMTY1LDggKzEzOSw4IEBACiAjZGVmaW5lCV9fU01CRgkweDAwODAJCS8qIF9idWYgaXMgZnJvbSBtYWxsb2MgKi8KICNkZWZpbmUJX19TQVBQCTB4MDEwMAkJLyogZmRvcGVuKCllZCBpbiBhcHBlbmQgbW9kZSAqLwogI2RlZmluZQlfX1NTVFIJMHgwMjAwCQkvKiB0aGlzIGlzIGFuIHNwcmludGYvc25wcmludGYgc3RyaW5nICovCi0jZGVmaW5lCV9fU09QVAkweDA0MDAJCS8qIGRvIGZzZWVrKCkgb3B0aW1pc2F0aW9uICovCi0jZGVmaW5lCV9fU05QVAkweDA4MDAJCS8qIGRvIG5vdCBkbyBmc2VlaygpIG9wdGltaXNhdGlvbiAqLworI2RlZmluZQlfX1NPUFQJMHgwNDAwCQkvKiBkbyBmc2VlaygpIG9wdGltaXphdGlvbiAqLworI2RlZmluZQlfX1NOUFQJMHgwODAwCQkvKiBkbyBub3QgZG8gZnNlZWsoKSBvcHRpbWl6YXRpb24gKi8KICNkZWZpbmUJX19TT0ZGCTB4MTAwMAkJLyogc2V0IGlmZiBfb2Zmc2V0IGlzIGluIGZhY3QgY29ycmVjdCAqLwogI2RlZmluZQlfX1NNT0QJMHgyMDAwCQkvKiB0cnVlID0+IGZnZXRsbiBtb2RpZmllZCBfcCB0ZXh0ICovCiAjZGVmaW5lCV9fU0FMQwkweDQwMDAJCS8qIGFsbG9jYXRlIHN0cmluZyBzcGFjZSBkeW5hbWljYWxseSAqLwpAQCAtMTg2LDE0ICsxNjAsMTQgQEAKICNkZWZpbmUJX0lPTkJGCTIJCS8qIHNldHZidWYgc2hvdWxkIHNldCB1bmJ1ZmZlcmVkICovCiAKICNkZWZpbmUJQlVGU0laCTEwMjQJCS8qIHNpemUgb2YgYnVmZmVyIHVzZWQgYnkgc2V0YnVmICovCi0KICNkZWZpbmUJRU9GCSgtMSkKIAogLyoKLSAqIEZPUEVOX01BWCBpcyBhIG1pbmltdW0gbWF4aW11bSwgYW5kIHNob3VsZCBiZSB0aGUgbnVtYmVyIG9mIGRlc2NyaXB0b3JzCi0gKiB0aGF0IHRoZSBrZXJuZWwgY2FuIHByb3ZpZGUgd2l0aG91dCBhbGxvY2F0aW9uIG9mIGEgcmVzb3VyY2UgdGhhdCBjYW4KLSAqIGZhaWwgd2l0aG91dCB0aGUgcHJvY2VzcyBzbGVlcGluZy4gIERvIG5vdCB1c2UgdGhpcyBmb3IgYW55dGhpbmcuCisgKiBGT1BFTl9NQVggaXMgYSBtaW5pbXVtIG1heGltdW0sIGFuZCBpcyB0aGUgbnVtYmVyIG9mIHN0cmVhbXMgdGhhdAorICogc3RkaW8gY2FuIHByb3ZpZGUgd2l0aG91dCBhdHRlbXB0aW5nIHRvIGFsbG9jYXRlIGZ1cnRoZXIgcmVzb3VyY2VzCisgKiAod2hpY2ggY291bGQgZmFpbCkuICBEbyBub3QgdXNlIHRoaXMgZm9yIGFueXRoaW5nLgogICovCisKICNkZWZpbmUJRk9QRU5fTUFYCTIwCS8qIG11c3QgYmUgPD0gT1BFTl9NQVggPHN5cy9zeXNsaW1pdHMuaD4gKi8KICNkZWZpbmUJRklMRU5BTUVfTUFYCTEwMjQJLyogbXVzdCBiZSA8PSBQQVRIX01BWCA8c3lzL3N5c2xpbWl0cy5oPiAqLwogCkBAIC0yMDQsNiArMTc4LDcgQEAKICNkZWZpbmUJTF90bXBuYW0JMTAyNAkvKiBYWFggbXVzdCBiZSA9PSBQQVRIX01BWCAqLwogI2RlZmluZQlUTVBfTUFYCQkzMDg5MTU3NzYKIAorLyogQWx3YXlzIGVuc3VyZSB0aGF0IHRoZXNlIGFyZSBjb25zaXN0ZW50IHdpdGggPGZjbnRsLmg+IGFuZCA8dW5pc3RkLmg+ISAqLwogI2lmbmRlZiBTRUVLX1NFVAogI2RlZmluZQlTRUVLX1NFVAkwCS8qIHNldCBmaWxlIG9mZnNldCB0byBvZmZzZXQgKi8KICNlbmRpZgpAQCAtMjI4LDIzICsyMDMsMjUgQEAKIGludAkgZmVycm9yKEZJTEUgKik7CiBpbnQJIGZmbHVzaChGSUxFICopOwogaW50CSBmZ2V0YyhGSUxFICopOwotaW50CSBmZ2V0cG9zKEZJTEUgKiwgZnBvc190ICopOwotY2hhcgkqZmdldHMoY2hhciAqLCBpbnQsIEZJTEUgKik7Ci1GSUxFCSpmb3Blbihjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7Ci1pbnQJIGZwcmludGYoRklMRSAqLCBjb25zdCBjaGFyICosIC4uLik7CitjaGFyCSpmZ2V0cyhjaGFyICogX19yZXN0cmljdCwgaW50LCBGSUxFICogX19yZXN0cmljdCk7CitGSUxFCSpmb3Blbihjb25zdCBjaGFyICogX19yZXN0cmljdCAsIGNvbnN0IGNoYXIgKiBfX3Jlc3RyaWN0KTsKK2ludAkgZnByaW50ZihGSUxFICogX19yZXN0cmljdCAsIGNvbnN0IGNoYXIgKiBfX3Jlc3RyaWN0LCAuLi4pCisJCV9fcHJpbnRmbGlrZSgyLCAzKTsKIGludAkgZnB1dGMoaW50LCBGSUxFICopOwotaW50CSBmcHV0cyhjb25zdCBjaGFyICosIEZJTEUgKik7Ci1zaXplX3QJIGZyZWFkKHZvaWQgKiwgc2l6ZV90LCBzaXplX3QsIEZJTEUgKik7Ci1GSUxFCSpmcmVvcGVuKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBGSUxFICopOwotaW50CSBmc2NhbmYoRklMRSAqLCBjb25zdCBjaGFyICosIC4uLik7CitpbnQJIGZwdXRzKGNvbnN0IGNoYXIgKiBfX3Jlc3RyaWN0LCBGSUxFICogX19yZXN0cmljdCk7CitzaXplX3QJIGZyZWFkKHZvaWQgKiBfX3Jlc3RyaWN0LCBzaXplX3QsIHNpemVfdCwgRklMRSAqIF9fcmVzdHJpY3QpOworRklMRQkqZnJlb3Blbihjb25zdCBjaGFyICogX19yZXN0cmljdCwgY29uc3QgY2hhciAqIF9fcmVzdHJpY3QsCisJICAgIEZJTEUgKiBfX3Jlc3RyaWN0KTsKK2ludAkgZnNjYW5mKEZJTEUgKiBfX3Jlc3RyaWN0LCBjb25zdCBjaGFyICogX19yZXN0cmljdCwgLi4uKQorCQlfX3NjYW5mbGlrZSgyLCAzKTsKIGludAkgZnNlZWsoRklMRSAqLCBsb25nLCBpbnQpOwotaW50CSBmc2Vla28oRklMRSAqLCBvZmZfdCwgaW50KTsKLWludAkgZnNldHBvcyhGSUxFICosIGNvbnN0IGZwb3NfdCAqKTsKIGxvbmcJIGZ0ZWxsKEZJTEUgKik7Ci1vZmZfdAkgZnRlbGxvKEZJTEUgKik7Ci1zaXplX3QJIGZ3cml0ZShjb25zdCB2b2lkICosIHNpemVfdCwgc2l6ZV90LCBGSUxFICopOworc2l6ZV90CSBmd3JpdGUoY29uc3Qgdm9pZCAqIF9fcmVzdHJpY3QsIHNpemVfdCwgc2l6ZV90LCBGSUxFICogX19yZXN0cmljdCk7CiBpbnQJIGdldGMoRklMRSAqKTsKIGludAkgZ2V0Y2hhcih2b2lkKTsKK3NzaXplX3QJIGdldGRlbGltKGNoYXIgKiogX19yZXN0cmljdCwgc2l6ZV90ICogX19yZXN0cmljdCwgaW50LAorCSAgICBGSUxFICogX19yZXN0cmljdCk7Citzc2l6ZV90CSBnZXRsaW5lKGNoYXIgKiogX19yZXN0cmljdCwgc2l6ZV90ICogX19yZXN0cmljdCwgRklMRSAqIF9fcmVzdHJpY3QpOwogY2hhcgkqZ2V0cyhjaGFyICopOwogI2lmIF9fQlNEX1ZJU0lCTEUgJiYgIWRlZmluZWQoX19TWVNfRVJSTElTVCkKICNkZWZpbmUgX19TWVNfRVJSTElTVApAQCAtMjUzLDQxICsyMzAsNTUgQEAKIGV4dGVybiBjaGFyICpzeXNfZXJybGlzdFtdOwogI2VuZGlmCiB2b2lkCSBwZXJyb3IoY29uc3QgY2hhciAqKTsKLWludAkgcHJpbnRmKGNvbnN0IGNoYXIgKiwgLi4uKTsKK2ludAkgcHJpbnRmKGNvbnN0IGNoYXIgKiBfX3Jlc3RyaWN0LCAuLi4pCisJCV9fcHJpbnRmbGlrZSgxLCAyKTsKIGludAkgcHV0YyhpbnQsIEZJTEUgKik7CiBpbnQJIHB1dGNoYXIoaW50KTsKIGludAkgcHV0cyhjb25zdCBjaGFyICopOwogaW50CSByZW1vdmUoY29uc3QgY2hhciAqKTsKLWludAkgcmVuYW1lKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKIHZvaWQJIHJld2luZChGSUxFICopOwotaW50CSBzY2FuZihjb25zdCBjaGFyICosIC4uLik7Ci12b2lkCSBzZXRidWYoRklMRSAqLCBjaGFyICopOwotaW50CSBzZXR2YnVmKEZJTEUgKiwgY2hhciAqLCBpbnQsIHNpemVfdCk7Ci1pbnQJIHNwcmludGYoY2hhciAqLCBjb25zdCBjaGFyICosIC4uLik7Ci1pbnQJIHNzY2FuZihjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgLi4uKTsKK2ludAkgc2NhbmYoY29uc3QgY2hhciAqIF9fcmVzdHJpY3QsIC4uLikKKwkJX19zY2FuZmxpa2UoMSwgMik7Cit2b2lkCSBzZXRidWYoRklMRSAqIF9fcmVzdHJpY3QsIGNoYXIgKiBfX3Jlc3RyaWN0KTsKK2ludAkgc2V0dmJ1ZihGSUxFICogX19yZXN0cmljdCwgY2hhciAqIF9fcmVzdHJpY3QsIGludCwgc2l6ZV90KTsKK2ludAkgc3NjYW5mKGNvbnN0IGNoYXIgKiBfX3Jlc3RyaWN0LCBjb25zdCBjaGFyICogX19yZXN0cmljdCwgLi4uKQorCQlfX3NjYW5mbGlrZSgyLCAzKTsKIEZJTEUJKnRtcGZpbGUodm9pZCk7Ci1jaGFyCSp0bXBuYW0oY2hhciAqKTsKIGludAkgdW5nZXRjKGludCwgRklMRSAqKTsKLWludAkgdmZwcmludGYoRklMRSAqLCBjb25zdCBjaGFyICosIF9fdmFfbGlzdCk7Ci1pbnQJIHZwcmludGYoY29uc3QgY2hhciAqLCBfX3ZhX2xpc3QpOwotaW50CSB2c3ByaW50ZihjaGFyICosIGNvbnN0IGNoYXIgKiwgX192YV9saXN0KTsKK2ludAkgdmZwcmludGYoRklMRSAqIF9fcmVzdHJpY3QsIGNvbnN0IGNoYXIgKiBfX3Jlc3RyaWN0LCBfX3ZhX2xpc3QpCisJCV9fcHJpbnRmbGlrZSgyLCAwKTsKK2ludAkgdnByaW50Zihjb25zdCBjaGFyICogX19yZXN0cmljdCwgX192YV9saXN0KQorCQlfX3ByaW50Zmxpa2UoMSwgMCk7CisKKyNpZm5kZWYgX19BVURJVF9fCitjaGFyCSpnZXRzKGNoYXIgKik7CitpbnQJIHNwcmludGYoY2hhciAqIF9fcmVzdHJpY3QsIGNvbnN0IGNoYXIgKiBfX3Jlc3RyaWN0LCAuLi4pCisJCV9fcHJpbnRmbGlrZSgyLCAzKTsKK2NoYXIJKnRtcG5hbShjaGFyICopOworaW50CSB2c3ByaW50ZihjaGFyICogX19yZXN0cmljdCwgY29uc3QgY2hhciAqIF9fcmVzdHJpY3QsCisgICAgX192YV9saXN0KQorCQlfX3ByaW50Zmxpa2UoMiwgMCk7CisjZW5kaWYKKworaW50CSByZW5hbWUgKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKKworaW50CSBmZ2V0cG9zKEZJTEUgKiBfX3Jlc3RyaWN0LCBmcG9zX3QgKiBfX3Jlc3RyaWN0KTsKK2ludAkgZnNldHBvcyhGSUxFICosIGNvbnN0IGZwb3NfdCAqKTsKKworaW50CSBmc2Vla28oRklMRSAqLCBvZmZfdCwgaW50KTsKK29mZl90CSBmdGVsbG8oRklMRSAqKTsKIAogI2lmIF9fSVNPX0NfVklTSUJMRSA+PSAxOTk5IHx8IF9fQlNEX1ZJU0lCTEUKLWludAkgc25wcmludGYoY2hhciAqLCBzaXplX3QsIGNvbnN0IGNoYXIgKiwgLi4uKQotCQlfX2F0dHJpYnV0ZV9fKChfX2Zvcm1hdF9fIChwcmludGYsIDMsIDQpKSkKLQkJX19hdHRyaWJ1dGVfXygoX19ub25udWxsX18gKDMpKSk7Ci1pbnQJIHZmc2NhbmYoRklMRSAqLCBjb25zdCBjaGFyICosIF9fdmFfbGlzdCkKLQkJX19hdHRyaWJ1dGVfXygoX19mb3JtYXRfXyAoc2NhbmYsIDIsIDApKSkKLQkJX19hdHRyaWJ1dGVfXygoX19ub25udWxsX18gKDIpKSk7CitpbnQJIHNucHJpbnRmKGNoYXIgKiBfX3Jlc3RyaWN0LCBzaXplX3QsIGNvbnN0IGNoYXIgKiBfX3Jlc3RyaWN0LCAuLi4pCisJCV9fcHJpbnRmbGlrZSgzLCA0KTsKK2ludAkgdmZzY2FuZihGSUxFICogX19yZXN0cmljdCwgY29uc3QgY2hhciAqIF9fcmVzdHJpY3QsIF9fdmFfbGlzdCkKKwkJX19zY2FuZmxpa2UoMiwgMCk7CiBpbnQJIHZzY2FuZihjb25zdCBjaGFyICosIF9fdmFfbGlzdCkKLQkJX19hdHRyaWJ1dGVfXygoX19mb3JtYXRfXyAoc2NhbmYsIDEsIDApKSkKLQkJX19hdHRyaWJ1dGVfXygoX19ub25udWxsX18gKDEpKSk7Ci1pbnQJIHZzbnByaW50ZihjaGFyICosIHNpemVfdCwgY29uc3QgY2hhciAqLCBfX3ZhX2xpc3QpCi0JCV9fYXR0cmlidXRlX18oKF9fZm9ybWF0X18gKHByaW50ZiwgMywgMCkpKQotCQlfX2F0dHJpYnV0ZV9fKChfX25vbm51bGxfXyAoMykpKTsKLWludAkgdnNzY2FuZihjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgX192YV9saXN0KQotCQlfX2F0dHJpYnV0ZV9fKChfX2Zvcm1hdF9fIChzY2FuZiwgMiwgMCkpKQotCQlfX2F0dHJpYnV0ZV9fKChfX25vbm51bGxfXyAoMikpKTsKKwkJX19zY2FuZmxpa2UoMSwgMCk7CitpbnQJIHZzbnByaW50ZihjaGFyICogX19yZXN0cmljdCwgc2l6ZV90LCBjb25zdCBjaGFyICogX19yZXN0cmljdCwgX192YV9saXN0KQorCQlfX3ByaW50Zmxpa2UoMywgMCk7CitpbnQJIHZzc2NhbmYoY29uc3QgY2hhciAqIF9fcmVzdHJpY3QsIGNvbnN0IGNoYXIgKiBfX3Jlc3RyaWN0LCBfX3ZhX2xpc3QpCisJCV9fc2NhbmZsaWtlKDIsIDApOwogI2VuZGlmIC8qIF9fSVNPX0NfVklTSUJMRSA+PSAxOTk5IHx8IF9fQlNEX1ZJU0lCTEUgKi8KIAogX19FTkRfREVDTFMKQEAgLTM0MCwxOCArMzMxLDE3IEBACiAgKi8KICNpZiBfX0JTRF9WSVNJQkxFCiBfX0JFR0lOX0RFQ0xTCi1pbnQJIGFzcHJpbnRmKGNoYXIgKiosIGNvbnN0IGNoYXIgKiwgLi4uKQotCQlfX2F0dHJpYnV0ZV9fKChfX2Zvcm1hdF9fIChwcmludGYsIDIsIDMpKSkKLQkJX19hdHRyaWJ1dGVfXygoX19ub25udWxsX18gKDIpKSk7Ci1jaGFyCSpmZ2V0bG4oRklMRSAqLCBzaXplX3QgKik7CitpbnQJIGFzcHJpbnRmKGNoYXIgKiogX19yZXN0cmljdCwgY29uc3QgY2hhciAqIF9fcmVzdHJpY3QsIC4uLikKKwkJX19wcmludGZsaWtlKDIsIDMpOworY2hhcgkqZmdldGxuKEZJTEUgKiBfX3Jlc3RyaWN0LCBzaXplX3QgKiBfX3Jlc3RyaWN0KTsKIGludAkgZnB1cmdlKEZJTEUgKik7CiBpbnQJIGdldHcoRklMRSAqKTsKIGludAkgcHV0dyhpbnQsIEZJTEUgKik7CiB2b2lkCSBzZXRidWZmZXIoRklMRSAqLCBjaGFyICosIGludCk7CiBpbnQJIHNldGxpbmVidWYoRklMRSAqKTsKLWludAkgdmFzcHJpbnRmKGNoYXIgKiosIGNvbnN0IGNoYXIgKiwgX192YV9saXN0KQotCQlfX2F0dHJpYnV0ZV9fKChfX2Zvcm1hdF9fIChwcmludGYsIDIsIDApKSkKLQkJX19hdHRyaWJ1dGVfXygoX19ub25udWxsX18gKDIpKSk7CitpbnQJIHZhc3ByaW50ZihjaGFyICoqIF9fcmVzdHJpY3QsIGNvbnN0IGNoYXIgKiBfX3Jlc3RyaWN0LAorICAgIF9fdmFfbGlzdCkKKwkJX19wcmludGZsaWtlKDIsIDApOwogX19FTkRfREVDTFMKIAogLyoKQEAgLTQ1Miw4ICs0NDIsOTggQEAKICAqIGZkcHJpbnRmIGlzIGEgYmV0dGVyIG5hbWUsIGFuZCBzb21lIHByb2dyYW1zIHRoYXQgdXNlIGZkcHJpbnRmIHVzZSBhCiAgKiAjZGVmaW5lIGZkcHJpbnRmIGRwcmludGYgZm9yIGNvbXBhdGliaWxpdHkKICAqLwotaW50IGZkcHJpbnRmKGludCwgY29uc3QgY2hhciosIC4uLik7Ci1pbnQgdmZkcHJpbnRmKGludCwgY29uc3QgY2hhciosIF9fdmFfbGlzdCk7CitfX0JFR0lOX0RFQ0xTCitpbnQgZmRwcmludGYoaW50LCBjb25zdCBjaGFyKiwgLi4uKQorCQlfX3ByaW50Zmxpa2UoMiwgMyk7CitpbnQgdmZkcHJpbnRmKGludCwgY29uc3QgY2hhciosIF9fdmFfbGlzdCkKKwkJX19wcmludGZsaWtlKDIsIDApOworX19FTkRfREVDTFMKICNlbmRpZiAvKiBfR05VX1NPVVJDRSAqLwogCisjaWYgZGVmaW5lZChfX0JJT05JQ19GT1JUSUZZKQorCitfX0JFR0lOX0RFQ0xTCisKK19fQklPTklDX0ZPUlRJRllfSU5MSU5FCitfX3ByaW50Zmxpa2UoMywgMCkKK2ludCB2c25wcmludGYoY2hhciAqZGVzdCwgc2l6ZV90IHNpemUsIGNvbnN0IGNoYXIgKmZvcm1hdCwgX192YV9saXN0IGFwKQoreworICAgIHJldHVybiBfX2J1aWx0aW5fX192c25wcmludGZfY2hrKGRlc3QsIHNpemUsIDAsIF9fYm9zKGRlc3QpLCBmb3JtYXQsIGFwKTsKK30KKworX19CSU9OSUNfRk9SVElGWV9JTkxJTkUKK19fcHJpbnRmbGlrZSgyLCAwKQoraW50IHZzcHJpbnRmKGNoYXIgKmRlc3QsIGNvbnN0IGNoYXIgKmZvcm1hdCwgX192YV9saXN0IGFwKQoreworICAgIHJldHVybiBfX2J1aWx0aW5fX192c3ByaW50Zl9jaGsoZGVzdCwgMCwgX19ib3MoZGVzdCksIGZvcm1hdCwgYXApOworfQorCisjaWYgZGVmaW5lZChfX2NsYW5nX18pCisjZGVmaW5lIHNucHJpbnRmKGRlc3QsIHNpemUsIC4uLikgX19idWlsdGluX19fc25wcmludGZfY2hrKGRlc3QsIHNpemUsIDAsIF9fYm9zKGRlc3QpLCBfX1ZBX0FSR1NfXykKKyNlbHNlCitfX0JJT05JQ19GT1JUSUZZX0lOTElORQorX19wcmludGZsaWtlKDMsIDQpCitpbnQgc25wcmludGYoY2hhciAqZGVzdCwgc2l6ZV90IHNpemUsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQoreworICAgIHJldHVybiBfX2J1aWx0aW5fX19zbnByaW50Zl9jaGsoZGVzdCwgc2l6ZSwgMCwKKyAgICAgICAgX19ib3MoZGVzdCksIGZvcm1hdCwgX19idWlsdGluX3ZhX2FyZ19wYWNrKCkpOworfQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9fY2xhbmdfXykKKyNkZWZpbmUgc3ByaW50ZihkZXN0LCAuLi4pIF9fYnVpbHRpbl9fX3NwcmludGZfY2hrKGRlc3QsIDAsIF9fYm9zKGRlc3QpLCBfX1ZBX0FSR1NfXykKKyNlbHNlCitfX0JJT05JQ19GT1JUSUZZX0lOTElORQorX19wcmludGZsaWtlKDIsIDMpCitpbnQgc3ByaW50ZihjaGFyICpkZXN0LCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKK3sKKyAgICByZXR1cm4gX19idWlsdGluX19fc3ByaW50Zl9jaGsoZGVzdCwgMCwKKyAgICAgICAgX19ib3MoZGVzdCksIGZvcm1hdCwgX19idWlsdGluX3ZhX2FyZ19wYWNrKCkpOworfQorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChfX2NsYW5nX18pCitleHRlcm4gY2hhciAqX19mZ2V0c19yZWFsKGNoYXIgKiwgaW50LCBGSUxFICopCisgICAgX19hc21fXyhfX1VTRVJfTEFCRUxfUFJFRklYX18gImZnZXRzIik7CitfX2Vycm9yZGVjbChfX2ZnZXRzX3Rvb19iaWdfZXJyb3IsICJmZ2V0cyBjYWxsZWQgd2l0aCBzaXplIGJpZ2dlciB0aGFuIGJ1ZmZlciIpOworX19lcnJvcmRlY2woX19mZ2V0c190b29fc21hbGxfZXJyb3IsICJmZ2V0cyBjYWxsZWQgd2l0aCBzaXplIGxlc3MgdGhhbiB6ZXJvIik7CitleHRlcm4gY2hhciAqX19mZ2V0c19jaGsoY2hhciAqLCBpbnQsIEZJTEUgKiwgc2l6ZV90KTsKKworX19CSU9OSUNfRk9SVElGWV9JTkxJTkUKK2NoYXIgKmZnZXRzKGNoYXIgKmRlc3QsIGludCBzaXplLCBGSUxFICpzdHJlYW0pCit7CisgICAgc2l6ZV90IGJvcyA9IF9fYm9zKGRlc3QpOworCisgICAgLy8gQ29tcGlsZXIgY2FuIHByb3ZlLCBhdCBjb21waWxlIHRpbWUsIHRoYXQgdGhlIHBhc3NlZCBpbiBzaXplCisgICAgLy8gaXMgYWx3YXlzIG5lZ2F0aXZlLiBGb3JjZSBhIGNvbXBpbGVyIGVycm9yLgorICAgIGlmIChfX2J1aWx0aW5fY29uc3RhbnRfcChzaXplKSAmJiAoc2l6ZSA8IDApKSB7CisgICAgICAgIF9fZmdldHNfdG9vX3NtYWxsX2Vycm9yKCk7CisgICAgfQorCisgICAgLy8gQ29tcGlsZXIgZG9lc24ndCBrbm93IGRlc3RpbmF0aW9uIHNpemUuIERvbid0IGNhbGwgX19mZ2V0c19jaGsKKyAgICBpZiAoYm9zID09IF9fQklPTklDX0ZPUlRJRllfVU5LTk9XTl9TSVpFKSB7CisgICAgICAgIHJldHVybiBfX2ZnZXRzX3JlYWwoZGVzdCwgc2l6ZSwgc3RyZWFtKTsKKyAgICB9CisKKyAgICAvLyBDb21waWxlciBjYW4gcHJvdmUsIGF0IGNvbXBpbGUgdGltZSwgdGhhdCB0aGUgcGFzc2VkIGluIHNpemUKKyAgICAvLyBpcyBhbHdheXMgPD0gdGhlIGFjdHVhbCBvYmplY3Qgc2l6ZS4gRG9uJ3QgY2FsbCBfX2ZnZXRzX2NoaworICAgIGlmIChfX2J1aWx0aW5fY29uc3RhbnRfcChzaXplKSAmJiAoc2l6ZSA8PSAoaW50KSBib3MpKSB7CisgICAgICAgIHJldHVybiBfX2ZnZXRzX3JlYWwoZGVzdCwgc2l6ZSwgc3RyZWFtKTsKKyAgICB9CisKKyAgICAvLyBDb21waWxlciBjYW4gcHJvdmUsIGF0IGNvbXBpbGUgdGltZSwgdGhhdCB0aGUgcGFzc2VkIGluIHNpemUKKyAgICAvLyBpcyBhbHdheXMgPiB0aGUgYWN0dWFsIG9iamVjdCBzaXplLiBGb3JjZSBhIGNvbXBpbGVyIGVycm9yLgorICAgIGlmIChfX2J1aWx0aW5fY29uc3RhbnRfcChzaXplKSAmJiAoc2l6ZSA+IChpbnQpIGJvcykpIHsKKyAgICAgICAgX19mZ2V0c190b29fYmlnX2Vycm9yKCk7CisgICAgfQorCisgICAgcmV0dXJuIF9fZmdldHNfY2hrKGRlc3QsIHNpemUsIHN0cmVhbSwgYm9zKTsKK30KKworI2VuZGlmIC8qICFkZWZpbmVkKF9fY2xhbmdfXykgKi8KKworX19FTkRfREVDTFMKKworI2VuZGlmIC8qIGRlZmluZWQoX19CSU9OSUNfRk9SVElGWSkgKi8KKwogI2VuZGlmIC8qIF9TVERJT19IXyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL3N0ZGxpYi5oIGIvbGliYy9pbmNsdWRlL3N0ZGxpYi5oCmluZGV4IGU1Y2FhZGQuLmU3MjhjYjYgMTAwNjQ0Ci0tLSBhL2xpYmMvaW5jbHVkZS9zdGRsaWIuaAorKysgYi9saWJjL2luY2x1ZGUvc3RkbGliLmgKQEAgLTMwLDEyICszMCw2IEBACiAKICNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KIAotLyogd2NoYXJfdCBpcyByZXF1aXJlZCBpbiBzdGRsaWIuaCBhY2NvcmRpbmcgdG8gUE9TSVguCi0gKiBub3RlIHRoYXQgZGVmaW5pbmcgX19uZWVkX3djaGFyX3QgcHJldmVudHMgc3RkZGVmLmgKLSAqIHRvIGRlZmluZSBhbGwgb3RoZXIgc3ltYm9scyBpdCBkb2VzIG5vcm1hbGx5ICovCi0jZGVmaW5lIF9fbmVlZF93Y2hhcl90Ci0jaW5jbHVkZSA8c3RkZGVmLmg+Ci0KICNpbmNsdWRlIDxzdGRkZWYuaD4KICNpbmNsdWRlIDxzdHJpbmcuaD4KICNpbmNsdWRlIDxhbGxvY2EuaD4KQEAgLTU4LDggKzUyLDggQEAKIGV4dGVybiBpbnQgY2xlYXJlbnYodm9pZCk7CiAKIGV4dGVybiBjaGFyICpta2R0ZW1wKGNoYXIgKik7Ci1leHRlcm4gY2hhciAqbWt0ZW1wIChjaGFyICopOwotZXh0ZXJuIGludCBta3N0ZW1wIChjaGFyICopOworZXh0ZXJuIGNoYXIgKm1rdGVtcChjaGFyICopOworZXh0ZXJuIGludCBta3N0ZW1wKGNoYXIgKik7CiAKIGV4dGVybiBsb25nIHN0cnRvbChjb25zdCBjaGFyICosIGNoYXIgKiosIGludCk7CiBleHRlcm4gbG9uZyBsb25nIHN0cnRvbGwoY29uc3QgY2hhciAqLCBjaGFyICoqLCBpbnQpOwpAQCAtNzQsOSArNjgsOSBAQAogICAgIHJldHVybiAoZmxvYXQpc3RydG9kKG5wdHIsIGVuZHB0cik7CiB9CiAKLWV4dGVybiBpbnQgYXRvaShjb25zdCBjaGFyICopOwotZXh0ZXJuIGxvbmcgYXRvbChjb25zdCBjaGFyICopOwotZXh0ZXJuIGxvbmcgbG9uZyBhdG9sbChjb25zdCBjaGFyICopOworZXh0ZXJuIGludCBhdG9pKGNvbnN0IGNoYXIgKikgX19wdXJlZnVuYzsKK2V4dGVybiBsb25nIGF0b2woY29uc3QgY2hhciAqKSBfX3B1cmVmdW5jOworZXh0ZXJuIGxvbmcgbG9uZyBhdG9sbChjb25zdCBjaGFyICopIF9fcHVyZWZ1bmM7CiAKIHN0YXRpYyBfX2lubGluZV9fIGRvdWJsZSBhdG9mKGNvbnN0IGNoYXIgKm5wdHIpCiB7CmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvc3RyaW5nLmggYi9saWJjL2luY2x1ZGUvc3RyaW5nLmgKaW5kZXggNjEzZGNkNy4uNzgwMWVlOSAxMDA2NDQKLS0tIGEvbGliYy9pbmNsdWRlL3N0cmluZy5oCisrKyBiL2xpYmMvaW5jbHVkZS9zdHJpbmcuaApAQCAtMzQsNTYgKzM0LDI0MiBAQAogCiBfX0JFR0lOX0RFQ0xTCiAKLWV4dGVybiB2b2lkKiAgbWVtY2NweSh2b2lkICosIGNvbnN0IHZvaWQgKiwgaW50LCBzaXplX3QpOwotZXh0ZXJuIHZvaWQqICBtZW1jaHIoY29uc3Qgdm9pZCAqLCBpbnQsIHNpemVfdCk7Ci1leHRlcm4gdm9pZCogIG1lbXJjaHIoY29uc3Qgdm9pZCAqLCBpbnQsIHNpemVfdCk7Ci1leHRlcm4gaW50ICAgIG1lbWNtcChjb25zdCB2b2lkICosIGNvbnN0IHZvaWQgKiwgc2l6ZV90KTsKLWV4dGVybiB2b2lkKiAgbWVtY3B5KHZvaWQgKiwgY29uc3Qgdm9pZCAqLCBzaXplX3QpOworZXh0ZXJuIHZvaWQqICBtZW1jY3B5KHZvaWQqIF9fcmVzdHJpY3QsIGNvbnN0IHZvaWQqIF9fcmVzdHJpY3QsIGludCwgc2l6ZV90KTsKK2V4dGVybiB2b2lkKiAgbWVtY2hyKGNvbnN0IHZvaWQgKiwgaW50LCBzaXplX3QpIF9fcHVyZWZ1bmM7CitleHRlcm4gdm9pZCogIG1lbXJjaHIoY29uc3Qgdm9pZCAqLCBpbnQsIHNpemVfdCkgX19wdXJlZnVuYzsKK2V4dGVybiBpbnQgICAgbWVtY21wKGNvbnN0IHZvaWQgKiwgY29uc3Qgdm9pZCAqLCBzaXplX3QpIF9fcHVyZWZ1bmM7CitleHRlcm4gdm9pZCogIG1lbWNweSh2b2lkKiBfX3Jlc3RyaWN0LCBjb25zdCB2b2lkKiBfX3Jlc3RyaWN0LCBzaXplX3QpOwogZXh0ZXJuIHZvaWQqICBtZW1tb3ZlKHZvaWQgKiwgY29uc3Qgdm9pZCAqLCBzaXplX3QpOwogZXh0ZXJuIHZvaWQqICBtZW1zZXQodm9pZCAqLCBpbnQsIHNpemVfdCk7Ci1leHRlcm4gdm9pZCogIG1lbW1lbShjb25zdCB2b2lkICosIHNpemVfdCwgY29uc3Qgdm9pZCAqLCBzaXplX3QpOworZXh0ZXJuIHZvaWQqICBtZW1tZW0oY29uc3Qgdm9pZCAqLCBzaXplX3QsIGNvbnN0IHZvaWQgKiwgc2l6ZV90KSBfX3B1cmVmdW5jOwogZXh0ZXJuIHZvaWQgICBtZW1zd2FwKHZvaWQgKiwgdm9pZCAqLCBzaXplX3QpOwogCi1leHRlcm4gY2hhciogIGluZGV4KGNvbnN0IGNoYXIgKiwgaW50KTsKLWV4dGVybiBjaGFyKiAgcmluZGV4KGNvbnN0IGNoYXIgKiwgaW50KTsKLWV4dGVybiBjaGFyKiAgc3RyY2hyKGNvbnN0IGNoYXIgKiwgaW50KTsKLWV4dGVybiBjaGFyKiAgc3RycmNocihjb25zdCBjaGFyICosIGludCk7CitleHRlcm4gY2hhciogIGluZGV4KGNvbnN0IGNoYXIgKiwgaW50KSBfX3B1cmVmdW5jOworZXh0ZXJuIGNoYXIqICBzdHJjaHIoY29uc3QgY2hhciAqLCBpbnQpIF9fcHVyZWZ1bmM7CitleHRlcm4gY2hhciogIHN0cnJjaHIoY29uc3QgY2hhciAqLCBpbnQpIF9fcHVyZWZ1bmM7CiAKLWV4dGVybiBzaXplX3Qgc3RybGVuKGNvbnN0IGNoYXIgKik7Ci1leHRlcm4gaW50ICAgIHN0cmNtcChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7Ci1leHRlcm4gY2hhciogIHN0cmNweShjaGFyICosIGNvbnN0IGNoYXIgKik7Ci1leHRlcm4gY2hhciogIHN0cmNhdChjaGFyICosIGNvbnN0IGNoYXIgKik7CitleHRlcm4gc2l6ZV90IHN0cmxlbihjb25zdCBjaGFyICopIF9fcHVyZWZ1bmM7CitleHRlcm4gc2l6ZV90IF9fc3RybGVuX2Noayhjb25zdCBjaGFyICosIHNpemVfdCk7CitleHRlcm4gaW50ICAgIHN0cmNtcChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKikgX19wdXJlZnVuYzsKK2V4dGVybiBjaGFyKiAgc3RyY3B5KGNoYXIqIF9fcmVzdHJpY3QsIGNvbnN0IGNoYXIqIF9fcmVzdHJpY3QpOworZXh0ZXJuIGNoYXIqICBzdHJjYXQoY2hhciogX19yZXN0cmljdCwgY29uc3QgY2hhciogX19yZXN0cmljdCk7CiAKLWV4dGVybiBpbnQgICAgc3RyY2FzZWNtcChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7Ci1leHRlcm4gaW50ICAgIHN0cm5jYXNlY21wKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBzaXplX3QpOworZXh0ZXJuIGludCAgICBzdHJjYXNlY21wKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKSBfX3B1cmVmdW5jOworZXh0ZXJuIGludCAgICBzdHJuY2FzZWNtcChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90KSBfX3B1cmVmdW5jOwogZXh0ZXJuIGNoYXIqICBzdHJkdXAoY29uc3QgY2hhciAqKTsKIAotZXh0ZXJuIGNoYXIqICBzdHJzdHIoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwotZXh0ZXJuIGNoYXIqICBzdHJjYXNlc3RyKGNvbnN0IGNoYXIgKmhheXN0YWNrLCBjb25zdCBjaGFyICpuZWVkbGUpOwotZXh0ZXJuIGNoYXIqICBzdHJ0b2soY2hhciAqLCBjb25zdCBjaGFyICopOwotZXh0ZXJuIGNoYXIqICBzdHJ0b2tfcihjaGFyICosIGNvbnN0IGNoYXIgKiwgY2hhcioqKTsKK2V4dGVybiBjaGFyKiAgc3Ryc3RyKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKSBfX3B1cmVmdW5jOworZXh0ZXJuIGNoYXIqICBzdHJjYXNlc3RyKGNvbnN0IGNoYXIgKmhheXN0YWNrLCBjb25zdCBjaGFyICpuZWVkbGUpIF9fcHVyZWZ1bmM7CitleHRlcm4gY2hhciogIHN0cnRvayhjaGFyKiBfX3Jlc3RyaWN0LCBjb25zdCBjaGFyKiBfX3Jlc3RyaWN0KTsKK2V4dGVybiBjaGFyKiAgc3RydG9rX3IoY2hhciogX19yZXN0cmljdCwgY29uc3QgY2hhciogX19yZXN0cmljdCwgY2hhcioqIF9fcmVzdHJpY3QpOwogCiBleHRlcm4gY2hhciogIHN0cmVycm9yKGludCk7CiBleHRlcm4gaW50ICAgIHN0cmVycm9yX3IoaW50IGVycm51bSwgY2hhciAqYnVmLCBzaXplX3Qgbik7CiAKLWV4dGVybiBzaXplX3Qgc3Rybmxlbihjb25zdCBjaGFyICosIHNpemVfdCk7Ci1leHRlcm4gY2hhciogIHN0cm5jYXQoY2hhciAqLCBjb25zdCBjaGFyICosIHNpemVfdCk7CitleHRlcm4gc2l6ZV90IHN0cm5sZW4oY29uc3QgY2hhciAqLCBzaXplX3QpIF9fcHVyZWZ1bmM7CitleHRlcm4gY2hhciogIHN0cm5jYXQoY2hhciogX19yZXN0cmljdCwgY29uc3QgY2hhciogX19yZXN0cmljdCwgc2l6ZV90KTsKIGV4dGVybiBjaGFyKiAgc3RybmR1cChjb25zdCBjaGFyICosIHNpemVfdCk7Ci1leHRlcm4gaW50ICAgIHN0cm5jbXAoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIHNpemVfdCk7Ci1leHRlcm4gY2hhciogIHN0cm5jcHkoY2hhciAqLCBjb25zdCBjaGFyICosIHNpemVfdCk7CitleHRlcm4gaW50ICAgIHN0cm5jbXAoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIHNpemVfdCkgX19wdXJlZnVuYzsKK2V4dGVybiBjaGFyKiAgc3RybmNweShjaGFyKiBfX3Jlc3RyaWN0LCBjb25zdCBjaGFyKiBfX3Jlc3RyaWN0LCBzaXplX3QpOwogCi1leHRlcm4gc2l6ZV90IHN0cmxjYXQoY2hhciAqLCBjb25zdCBjaGFyICosIHNpemVfdCk7Ci1leHRlcm4gc2l6ZV90IHN0cmxjcHkoY2hhciAqLCBjb25zdCBjaGFyICosIHNpemVfdCk7CitleHRlcm4gc2l6ZV90IHN0cmxjYXQoY2hhciogX19yZXN0cmljdCwgY29uc3QgY2hhciogX19yZXN0cmljdCwgc2l6ZV90KTsKK2V4dGVybiBzaXplX3Qgc3RybGNweShjaGFyKiBfX3Jlc3RyaWN0LCBjb25zdCBjaGFyKiBfX3Jlc3RyaWN0LCBzaXplX3QpOwogCi1leHRlcm4gc2l6ZV90IHN0cmNzcG4oY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwotZXh0ZXJuIGNoYXIqICBzdHJwYnJrKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKLWV4dGVybiBjaGFyKiAgc3Ryc2VwKGNoYXIgKiosIGNvbnN0IGNoYXIgKik7CitleHRlcm4gc2l6ZV90IHN0cmNzcG4oY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopIF9fcHVyZWZ1bmM7CitleHRlcm4gY2hhciogIHN0cnBicmsoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopIF9fcHVyZWZ1bmM7CitleHRlcm4gY2hhciogIHN0cnNlcChjaGFyKiogX19yZXN0cmljdCwgY29uc3QgY2hhciogX19yZXN0cmljdCk7CiBleHRlcm4gc2l6ZV90IHN0cnNwbihjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CiAKIGV4dGVybiBjaGFyKiAgc3Ryc2lnbmFsKGludCAgc2lnKTsKIAotZXh0ZXJuIGludCAgICBzdHJjb2xsKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKLWV4dGVybiBzaXplX3Qgc3RyeGZybShjaGFyICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsKK2V4dGVybiBpbnQgICAgc3RyY29sbChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKikgX19wdXJlZnVuYzsKK2V4dGVybiBzaXplX3Qgc3RyeGZybShjaGFyKiBfX3Jlc3RyaWN0LCBjb25zdCBjaGFyKiBfX3Jlc3RyaWN0LCBzaXplX3QpOworCisjaWYgZGVmaW5lZChfX0JJT05JQ19GT1JUSUZZKQorCitfX2Vycm9yZGVjbChfX21lbWNweV9kZXN0X3NpemVfZXJyb3IsICJtZW1jcHkgY2FsbGVkIHdpdGggc2l6ZSBiaWdnZXIgdGhhbiBkZXN0aW5hdGlvbiIpOworX19lcnJvcmRlY2woX19tZW1jcHlfc3JjX3NpemVfZXJyb3IsICJtZW1jcHkgY2FsbGVkIHdpdGggc2l6ZSBiaWdnZXIgdGhhbiBzb3VyY2UiKTsKKworX19CSU9OSUNfRk9SVElGWV9JTkxJTkUKK3ZvaWQqIG1lbWNweSh2b2lkKiBfX3Jlc3RyaWN0IGRlc3QsIGNvbnN0IHZvaWQqIF9fcmVzdHJpY3Qgc3JjLCBzaXplX3QgY29weV9hbW91bnQpIHsKKyAgICBjaGFyICpkID0gKGNoYXIgKikgZGVzdDsKKyAgICBjb25zdCBjaGFyICpzID0gKGNvbnN0IGNoYXIgKikgc3JjOworICAgIHNpemVfdCBzX2xlbiA9IF9fYnVpbHRpbl9vYmplY3Rfc2l6ZShzLCAwKTsKKyAgICBzaXplX3QgZF9sZW4gPSBfX2J1aWx0aW5fb2JqZWN0X3NpemUoZCwgMCk7CisKKyAgICBpZiAoX19idWlsdGluX2NvbnN0YW50X3AoY29weV9hbW91bnQpICYmIChjb3B5X2Ftb3VudCA+IGRfbGVuKSkgeworICAgICAgICBfX21lbWNweV9kZXN0X3NpemVfZXJyb3IoKTsKKyAgICB9CisKKyAgICBpZiAoX19idWlsdGluX2NvbnN0YW50X3AoY29weV9hbW91bnQpICYmIChjb3B5X2Ftb3VudCA+IHNfbGVuKSkgeworICAgICAgICBfX21lbWNweV9zcmNfc2l6ZV9lcnJvcigpOworICAgIH0KKworICAgIHJldHVybiBfX2J1aWx0aW5fX19tZW1jcHlfY2hrKGRlc3QsIHNyYywgY29weV9hbW91bnQsIGRfbGVuKTsKK30KKworX19CSU9OSUNfRk9SVElGWV9JTkxJTkUKK3ZvaWQqIG1lbW1vdmUodm9pZCAqZGVzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgbGVuKSB7CisgICAgcmV0dXJuIF9fYnVpbHRpbl9fX21lbW1vdmVfY2hrKGRlc3QsIHNyYywgbGVuLCBfX2J1aWx0aW5fb2JqZWN0X3NpemUgKGRlc3QsIDApKTsKK30KKworX19CSU9OSUNfRk9SVElGWV9JTkxJTkUKK2NoYXIqIHN0cmNweShjaGFyKiBfX3Jlc3RyaWN0IGRlc3QsIGNvbnN0IGNoYXIqIF9fcmVzdHJpY3Qgc3JjKSB7CisgICAgcmV0dXJuIF9fYnVpbHRpbl9fX3N0cmNweV9jaGsoZGVzdCwgc3JjLCBfX2JvcyhkZXN0KSk7Cit9CisKK19fZXJyb3JkZWNsKF9fc3RybmNweV9lcnJvciwgInN0cm5jcHkgY2FsbGVkIHdpdGggc2l6ZSBiaWdnZXIgdGhhbiBidWZmZXIiKTsKKworX19CSU9OSUNfRk9SVElGWV9JTkxJTkUKK2NoYXIqIHN0cm5jcHkoY2hhciogX19yZXN0cmljdCBkZXN0LCBjb25zdCBjaGFyKiBfX3Jlc3RyaWN0IHNyYywgc2l6ZV90IG4pIHsKKyAgICBzaXplX3QgYm9zID0gX19ib3MoZGVzdCk7CisgICAgaWYgKF9fYnVpbHRpbl9jb25zdGFudF9wKG4pICYmIChuID4gYm9zKSkgeworICAgICAgICBfX3N0cm5jcHlfZXJyb3IoKTsKKyAgICB9CisgICAgcmV0dXJuIF9fYnVpbHRpbl9fX3N0cm5jcHlfY2hrKGRlc3QsIHNyYywgbiwgYm9zKTsKK30KKworX19CSU9OSUNfRk9SVElGWV9JTkxJTkUKK2NoYXIqIHN0cmNhdChjaGFyKiBfX3Jlc3RyaWN0IGRlc3QsIGNvbnN0IGNoYXIqIF9fcmVzdHJpY3Qgc3JjKSB7CisgICAgcmV0dXJuIF9fYnVpbHRpbl9fX3N0cmNhdF9jaGsoZGVzdCwgc3JjLCBfX2JvcyhkZXN0KSk7Cit9CisKK19fQklPTklDX0ZPUlRJRllfSU5MSU5FCitjaGFyICpzdHJuY2F0KGNoYXIqIF9fcmVzdHJpY3QgZGVzdCwgY29uc3QgY2hhciogX19yZXN0cmljdCBzcmMsIHNpemVfdCBuKSB7CisgICAgcmV0dXJuIF9fYnVpbHRpbl9fX3N0cm5jYXRfY2hrKGRlc3QsIHNyYywgbiwgX19ib3MoZGVzdCkpOworfQorCitfX0JJT05JQ19GT1JUSUZZX0lOTElORQordm9pZCogbWVtc2V0KHZvaWQgKnMsIGludCBjLCBzaXplX3QgbikgeworICAgIHJldHVybiBfX2J1aWx0aW5fX19tZW1zZXRfY2hrKHMsIGMsIG4sIF9fYnVpbHRpbl9vYmplY3Rfc2l6ZSAocywgMCkpOworfQorCitleHRlcm4gc2l6ZV90IF9fc3RybGNweV9yZWFsKGNoYXIqIF9fcmVzdHJpY3QsIGNvbnN0IGNoYXIqIF9fcmVzdHJpY3QsIHNpemVfdCkKKyAgICBfX2FzbV9fKF9fVVNFUl9MQUJFTF9QUkVGSVhfXyAic3RybGNweSIpOworX19lcnJvcmRlY2woX19zdHJsY3B5X2Vycm9yLCAic3RybGNweSBjYWxsZWQgd2l0aCBzaXplIGJpZ2dlciB0aGFuIGJ1ZmZlciIpOworZXh0ZXJuIHNpemVfdCBfX3N0cmxjcHlfY2hrKGNoYXIgKiwgY29uc3QgY2hhciAqLCBzaXplX3QsIHNpemVfdCk7CisKK19fQklPTklDX0ZPUlRJRllfSU5MSU5FCitzaXplX3Qgc3RybGNweShjaGFyKiBfX3Jlc3RyaWN0IGRlc3QsIGNvbnN0IGNoYXIqIF9fcmVzdHJpY3Qgc3JjLCBzaXplX3Qgc2l6ZSkgeworICAgIHNpemVfdCBib3MgPSBfX2JvcyhkZXN0KTsKKworI2lmICFkZWZpbmVkKF9fY2xhbmdfXykKKyAgICAvLyBDb21waWxlciBkb2Vzbid0IGtub3cgZGVzdGluYXRpb24gc2l6ZS4gRG9uJ3QgY2FsbCBfX3N0cmxjcHlfY2hrCisgICAgaWYgKGJvcyA9PSBfX0JJT05JQ19GT1JUSUZZX1VOS05PV05fU0laRSkgeworICAgICAgICByZXR1cm4gX19zdHJsY3B5X3JlYWwoZGVzdCwgc3JjLCBzaXplKTsKKyAgICB9CisKKyAgICAvLyBDb21waWxlciBjYW4gcHJvdmUsIGF0IGNvbXBpbGUgdGltZSwgdGhhdCB0aGUgcGFzc2VkIGluIHNpemUKKyAgICAvLyBpcyBhbHdheXMgPD0gdGhlIGFjdHVhbCBvYmplY3Qgc2l6ZS4gRG9uJ3QgY2FsbCBfX3N0cmxjcHlfY2hrCisgICAgaWYgKF9fYnVpbHRpbl9jb25zdGFudF9wKHNpemUpICYmIChzaXplIDw9IGJvcykpIHsKKyAgICAgICAgcmV0dXJuIF9fc3RybGNweV9yZWFsKGRlc3QsIHNyYywgc2l6ZSk7CisgICAgfQorCisgICAgLy8gQ29tcGlsZXIgY2FuIHByb3ZlLCBhdCBjb21waWxlIHRpbWUsIHRoYXQgdGhlIHBhc3NlZCBpbiBzaXplCisgICAgLy8gaXMgYWx3YXlzID4gdGhlIGFjdHVhbCBvYmplY3Qgc2l6ZS4gRm9yY2UgYSBjb21waWxlciBlcnJvci4KKyAgICBpZiAoX19idWlsdGluX2NvbnN0YW50X3Aoc2l6ZSkgJiYgKHNpemUgPiBib3MpKSB7CisgICAgICAgIF9fc3RybGNweV9lcnJvcigpOworICAgIH0KKyNlbmRpZiAvKiAhZGVmaW5lZChfX2NsYW5nX18pICovCisKKyAgICByZXR1cm4gX19zdHJsY3B5X2NoayhkZXN0LCBzcmMsIHNpemUsIGJvcyk7Cit9CisKK2V4dGVybiBzaXplX3QgX19zdHJsY2F0X3JlYWwoY2hhciogX19yZXN0cmljdCwgY29uc3QgY2hhciogX19yZXN0cmljdCwgc2l6ZV90KQorICAgIF9fYXNtX18oX19VU0VSX0xBQkVMX1BSRUZJWF9fICJzdHJsY2F0Iik7CitfX2Vycm9yZGVjbChfX3N0cmxjYXRfZXJyb3IsICJzdHJsY2F0IGNhbGxlZCB3aXRoIHNpemUgYmlnZ2VyIHRoYW4gYnVmZmVyIik7CitleHRlcm4gc2l6ZV90IF9fc3RybGNhdF9jaGsoY2hhciogX19yZXN0cmljdCwgY29uc3QgY2hhciogX19yZXN0cmljdCwgc2l6ZV90LCBzaXplX3QpOworCisKK19fQklPTklDX0ZPUlRJRllfSU5MSU5FCitzaXplX3Qgc3RybGNhdChjaGFyKiBfX3Jlc3RyaWN0IGRlc3QsIGNvbnN0IGNoYXIqIF9fcmVzdHJpY3Qgc3JjLCBzaXplX3Qgc2l6ZSkgeworICAgIHNpemVfdCBib3MgPSBfX2JvcyhkZXN0KTsKKworI2lmICFkZWZpbmVkKF9fY2xhbmdfXykKKyAgICAvLyBDb21waWxlciBkb2Vzbid0IGtub3cgZGVzdGluYXRpb24gc2l6ZS4gRG9uJ3QgY2FsbCBfX3N0cmxjYXRfY2hrCisgICAgaWYgKGJvcyA9PSBfX0JJT05JQ19GT1JUSUZZX1VOS05PV05fU0laRSkgeworICAgICAgICByZXR1cm4gX19zdHJsY2F0X3JlYWwoZGVzdCwgc3JjLCBzaXplKTsKKyAgICB9CisKKyAgICAvLyBDb21waWxlciBjYW4gcHJvdmUsIGF0IGNvbXBpbGUgdGltZSwgdGhhdCB0aGUgcGFzc2VkIGluIHNpemUKKyAgICAvLyBpcyBhbHdheXMgPD0gdGhlIGFjdHVhbCBvYmplY3Qgc2l6ZS4gRG9uJ3QgY2FsbCBfX3N0cmxjYXRfY2hrCisgICAgaWYgKF9fYnVpbHRpbl9jb25zdGFudF9wKHNpemUpICYmIChzaXplIDw9IGJvcykpIHsKKyAgICAgICAgcmV0dXJuIF9fc3RybGNhdF9yZWFsKGRlc3QsIHNyYywgc2l6ZSk7CisgICAgfQorCisgICAgLy8gQ29tcGlsZXIgY2FuIHByb3ZlLCBhdCBjb21waWxlIHRpbWUsIHRoYXQgdGhlIHBhc3NlZCBpbiBzaXplCisgICAgLy8gaXMgYWx3YXlzID4gdGhlIGFjdHVhbCBvYmplY3Qgc2l6ZS4gRm9yY2UgYSBjb21waWxlciBlcnJvci4KKyAgICBpZiAoX19idWlsdGluX2NvbnN0YW50X3Aoc2l6ZSkgJiYgKHNpemUgPiBib3MpKSB7CisgICAgICAgIF9fc3RybGNhdF9lcnJvcigpOworICAgIH0KKyNlbmRpZiAvKiAhZGVmaW5lZChfX2NsYW5nX18pICovCisKKyAgICByZXR1cm4gX19zdHJsY2F0X2NoayhkZXN0LCBzcmMsIHNpemUsIGJvcyk7Cit9CisKK19fQklPTklDX0ZPUlRJRllfSU5MSU5FCitzaXplX3Qgc3RybGVuKGNvbnN0IGNoYXIgKnMpIHsKKyAgICBzaXplX3QgYm9zID0gX19ib3Mocyk7CisKKyNpZiAhZGVmaW5lZChfX2NsYW5nX18pCisgICAgLy8gQ29tcGlsZXIgZG9lc24ndCBrbm93IGRlc3RpbmF0aW9uIHNpemUuIERvbid0IGNhbGwgX19zdHJsZW5fY2hrCisgICAgaWYgKGJvcyA9PSBfX0JJT05JQ19GT1JUSUZZX1VOS05PV05fU0laRSkgeworICAgICAgICByZXR1cm4gX19idWlsdGluX3N0cmxlbihzKTsKKyAgICB9CisKKyAgICBzaXplX3Qgc2xlbiA9IF9fYnVpbHRpbl9zdHJsZW4ocyk7CisgICAgaWYgKF9fYnVpbHRpbl9jb25zdGFudF9wKHNsZW4pKSB7CisgICAgICAgIHJldHVybiBzbGVuOworICAgIH0KKyNlbmRpZiAvKiAhZGVmaW5lZChfX2NsYW5nX18pICovCisKKyAgICByZXR1cm4gX19zdHJsZW5fY2hrKHMsIGJvcyk7Cit9CisKK2V4dGVybiBjaGFyKiBfX3N0cmNocl9jaGsoY29uc3QgY2hhciAqLCBpbnQsIHNpemVfdCk7CisKK19fQklPTklDX0ZPUlRJRllfSU5MSU5FCitjaGFyKiBzdHJjaHIoY29uc3QgY2hhciAqcywgaW50IGMpIHsKKyAgICBzaXplX3QgYm9zID0gX19ib3Mocyk7CisKKyNpZiAhZGVmaW5lZChfX2NsYW5nX18pCisgICAgLy8gQ29tcGlsZXIgZG9lc24ndCBrbm93IGRlc3RpbmF0aW9uIHNpemUuIERvbid0IGNhbGwgX19zdHJjaHJfY2hrCisgICAgaWYgKGJvcyA9PSBfX0JJT05JQ19GT1JUSUZZX1VOS05PV05fU0laRSkgeworICAgICAgICByZXR1cm4gX19idWlsdGluX3N0cmNocihzLCBjKTsKKyAgICB9CisKKyAgICBzaXplX3Qgc2xlbiA9IF9fYnVpbHRpbl9zdHJsZW4ocyk7CisgICAgaWYgKF9fYnVpbHRpbl9jb25zdGFudF9wKHNsZW4pICYmIChzbGVuIDwgYm9zKSkgeworICAgICAgICByZXR1cm4gX19idWlsdGluX3N0cmNocihzLCBjKTsKKyAgICB9CisjZW5kaWYgLyogIWRlZmluZWQoX19jbGFuZ19fKSAqLworCisgICAgcmV0dXJuIF9fc3RyY2hyX2NoayhzLCBjLCBib3MpOworfQorCitleHRlcm4gY2hhciogX19zdHJyY2hyX2Noayhjb25zdCBjaGFyICosIGludCwgc2l6ZV90KTsKKworX19CSU9OSUNfRk9SVElGWV9JTkxJTkUKK2NoYXIqIHN0cnJjaHIoY29uc3QgY2hhciAqcywgaW50IGMpIHsKKyAgICBzaXplX3QgYm9zID0gX19ib3Mocyk7CisKKyNpZiAhZGVmaW5lZChfX2NsYW5nX18pCisgICAgLy8gQ29tcGlsZXIgZG9lc24ndCBrbm93IGRlc3RpbmF0aW9uIHNpemUuIERvbid0IGNhbGwgX19zdHJyY2hyX2NoaworICAgIGlmIChib3MgPT0gX19CSU9OSUNfRk9SVElGWV9VTktOT1dOX1NJWkUpIHsKKyAgICAgICAgcmV0dXJuIF9fYnVpbHRpbl9zdHJyY2hyKHMsIGMpOworICAgIH0KKworICAgIHNpemVfdCBzbGVuID0gX19idWlsdGluX3N0cmxlbihzKTsKKyAgICBpZiAoX19idWlsdGluX2NvbnN0YW50X3Aoc2xlbikgJiYgKHNsZW4gPCBib3MpKSB7CisgICAgICAgIHJldHVybiBfX2J1aWx0aW5fc3RycmNocihzLCBjKTsKKyAgICB9CisjZW5kaWYgLyogIWRlZmluZWQoX19jbGFuZ19fKSAqLworCisgICAgcmV0dXJuIF9fc3RycmNocl9jaGsocywgYywgYm9zKTsKK30KKworCisjZW5kaWYgLyogZGVmaW5lZChfX0JJT05JQ19GT1JUSUZZKSAqLwogCiBfX0VORF9ERUNMUwogCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvc3RyaW5ncy5oIGIvbGliYy9pbmNsdWRlL3N0cmluZ3MuaAppbmRleCBmZWU3ZGM0Li5lNzI3OThiIDEwMDY0NAotLS0gYS9saWJjL2luY2x1ZGUvc3RyaW5ncy5oCisrKyBiL2xpYmMvaW5jbHVkZS9zdHJpbmdzLmgKQEAgLTQzLDE0ICs0MywyMCBAQAogI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgogCiBfX0JFR0lOX0RFQ0xTCi1pbnQJIGJjbXAoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICosIHNpemVfdCk7CiB2b2lkCSBiY29weShjb25zdCB2b2lkICosIHZvaWQgKiwgc2l6ZV90KTsKIHZvaWQJIGJ6ZXJvKHZvaWQgKiwgc2l6ZV90KTsKIGludAkgZmZzKGludCk7CiBjaGFyCSppbmRleChjb25zdCBjaGFyICosIGludCk7Ci1jaGFyCSpyaW5kZXgoY29uc3QgY2hhciAqLCBpbnQpOwogaW50CSBzdHJjYXNlY21wKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKIGludAkgc3RybmNhc2VjbXAoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIHNpemVfdCk7CisKKyNpZiBkZWZpbmVkKF9fQklPTklDX0ZPUlRJRlkpCitfX0JJT05JQ19GT1JUSUZZX0lOTElORQordm9pZCBiemVybyAodm9pZCAqcywgc2l6ZV90IG4pIHsKKyAgICBfX2J1aWx0aW5fX19tZW1zZXRfY2hrKHMsICdcMCcsIG4sIF9fYnVpbHRpbl9vYmplY3Rfc2l6ZSAocywgMCkpOworfQorI2VuZGlmIC8qIGRlZmluZWQoX19CSU9OSUNfRk9SVElGWSkgKi8KKwogX19FTkRfREVDTFMKIAogI2VuZGlmIC8qICFkZWZpbmVkKF9TVFJJTkdTX0hfKSAqLwpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL3N5cy9fZXJyZGVmcy5oIGIvbGliYy9pbmNsdWRlL3N5cy9fZXJyZGVmcy5oCmluZGV4IDUxZDkyMWIuLjNlZWFkZjQgMTAwNjQ0Ci0tLSBhL2xpYmMvaW5jbHVkZS9zeXMvX2VycmRlZnMuaAorKysgYi9saWJjL2luY2x1ZGUvc3lzL19lcnJkZWZzLmgKQEAgLTE2Nyw3ICsxNjcsNCBAQAogX19CSU9OSUNfRVJSREVGKCBFT1dORVJERUFEICAgICAsIDEzMCwgIk93bmVyIGRpZWQiICkKIF9fQklPTklDX0VSUkRFRiggRU5PVFJFQ09WRVJBQkxFLCAxMzEsICJTdGF0ZSBub3QgcmVjb3ZlcmFibGUiICkKIAotLyogdGhlIGZvbGxvd2luZyBpcyBub3QgZGVmaW5lZCBieSBMaW51eCBidXQgbmVlZGVkIGZvciB0aGUgQlNEIHBvcnRpb25zIG9mIHRoZSBDIGxpYnJhcnkgKi8KLV9fQklPTklDX0VSUkRFRiggRUZUWVBFLCAxMDAwLCAiU3R1cGlkIEMgbGlicmFyeSBoYWNrICEhIiApCi0KICN1bmRlZiBfX0JJT05JQ19FUlJERUYKZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9zeXMvX3NpZ2RlZnMuaCBiL2xpYmMvaW5jbHVkZS9zeXMvX3NpZ2RlZnMuaAppbmRleCA2ODIyYzI1Li5lYWRmN2I5IDEwMDY0NAotLS0gYS9saWJjL2luY2x1ZGUvc3lzL19zaWdkZWZzLmgKKysrIGIvbGliYy9pbmNsdWRlL3N5cy9fc2lnZGVmcy5oCkBAIC00MSwyMiArNDEsNTIgQEAKIF9fQklPTklDX1NJR0RFRihJTEwsNCwiSWxsZWdhbCBpbnN0cnVjdGlvbiIpCiBfX0JJT05JQ19TSUdERUYoVFJBUCw1LCJUcmFwIikKIF9fQklPTklDX1NJR0RFRihBQlJULDYsIkFib3J0ZWQiKQorI2lmZGVmIF9fbWlwc19fCitfX0JJT05JQ19TSUdERUYoRU1ULDcsIkVNVCIpCisjZWxzZQogX19CSU9OSUNfU0lHREVGKEJVUyw3LCJCdXMgZXJyb3IiKQorI2VuZGlmCiBfX0JJT05JQ19TSUdERUYoRlBFLDgsIkZsb2F0aW5nIHBvaW50IGV4Y2VwdGlvbiIpCiBfX0JJT05JQ19TSUdERUYoS0lMTCw5LCJLaWxsZWQiKQorI2lmZGVmIF9fbWlwc19fCitfX0JJT05JQ19TSUdERUYoQlVTLDEwLCJCdXMgZXJyb3IiKQorI2Vsc2UKIF9fQklPTklDX1NJR0RFRihVU1IxLDEwLCJVc2VyIHNpZ25hbCAxIikKKyNlbmRpZgogX19CSU9OSUNfU0lHREVGKFNFR1YsMTEsIlNlZ21lbnRhdGlvbiBmYXVsdCIpCisjaWZkZWYgX19taXBzX18KK19fQklPTklDX1NJR0RFRihTWVMsMTIsIkJhZCBzeXN0ZW0gY2FsbCIpCisjZWxzZQogX19CSU9OSUNfU0lHREVGKFVTUjIsMTIsIlVzZXIgc2lnbmFsIDIiKQorI2VuZGlmCiBfX0JJT05JQ19TSUdERUYoUElQRSwxMywiQnJva2VuIHBpcGUiKQogX19CSU9OSUNfU0lHREVGKEFMUk0sMTQsIkFsYXJtIGNsb2NrIikKIF9fQklPTklDX1NJR0RFRihURVJNLDE1LCJUZXJtaW5hdGVkIikKKyNpZmRlZiBfX21pcHNfXworX19CSU9OSUNfU0lHREVGKFVTUjEsMTYsIlVzZXIgc2lnbmFsIDEiKQorX19CSU9OSUNfU0lHREVGKFVTUjIsMTcsIlVzZXIgc2lnbmFsIDIiKQorX19CSU9OSUNfU0lHREVGKENITEQsMTgsIkNoaWxkIGV4aXRlZCIpCitfX0JJT05JQ19TSUdERUYoUFdSLDE5LCJQb3dlciBmYWlsdXJlIikKK19fQklPTklDX1NJR0RFRihXSU5DSCwyMCwiV2luZG93IHNpemUgY2hhbmdlZCIpCitfX0JJT05JQ19TSUdERUYoVVJHLDIxLCJVcmdlbnQgSS9PIGNvbmRpdGlvbiIpCitfX0JJT05JQ19TSUdERUYoSU8sMjIsIkkvTyBwb3NzaWJsZSIpCitfX0JJT05JQ19TSUdERUYoU1RPUCwyMywiU3RvcHBlZCAoc2lnbmFsKSIpCitfX0JJT05JQ19TSUdERUYoVFNUUCwyNCwiU3RvcHBlZCIpCitfX0JJT05JQ19TSUdERUYoQ09OVCwyNSwiQ29udGludWUiKQorX19CSU9OSUNfU0lHREVGKFRUSU4sMjYsIlN0b3BwZWQgKHR0eSBpbnB1dCkiKQorX19CSU9OSUNfU0lHREVGKFRUT1UsMjcsIlN0b3BwZWQgKHR0eSBvdXRwdXQpIikKK19fQklPTklDX1NJR0RFRihWVEFMUk0sMjgsIlZpcnR1YWwgdGltZXIgZXhwaXJlZCIpCitfX0JJT05JQ19TSUdERUYoUFJPRiwyOSwiUHJvZmlsaW5nIHRpbWVyIGV4cGlyZWQiKQorX19CSU9OSUNfU0lHREVGKFhDUFUsMzAsIkNQVSB0aW1lIGxpbWl0IGV4Y2VlZGVkIikKK19fQklPTklDX1NJR0RFRihYRlNaLDMxLCJGaWxlIHNpemUgbGltaXQgZXhjZWVkZWQiKQorI2Vsc2UKIF9fQklPTklDX1NJR0RFRihTVEtGTFQsMTYsIlN0YWNrIGZhdWx0IikKIF9fQklPTklDX1NJR0RFRihDSExELDE3LCJDaGlsZCBleGl0ZWQiKQogX19CSU9OSUNfU0lHREVGKENPTlQsMTgsIkNvbnRpbnVlIikKIF9fQklPTklDX1NJR0RFRihTVE9QLDE5LCJTdG9wcGVkIChzaWduYWwpIikKIF9fQklPTklDX1NJR0RFRihUU1RQLDIwLCJTdG9wcGVkIikKIF9fQklPTklDX1NJR0RFRihUVElOLDIxLCJTdG9wcGVkICh0dHkgaW5wdXQpIikKLV9fQklPTklDX1NJR0RFRihUVE9VLDIyLCJTdG9wcGVyICh0dHkgb3V0cHV0KSIpCitfX0JJT05JQ19TSUdERUYoVFRPVSwyMiwiU3RvcHBlZCAodHR5IG91dHB1dCkiKQogX19CSU9OSUNfU0lHREVGKFVSRywyMywiVXJnZW50IEkvTyBjb25kaXRpb24iKQogX19CSU9OSUNfU0lHREVGKFhDUFUsMjQsIkNQVSB0aW1lIGxpbWl0IGV4Y2VlZGVkIikKIF9fQklPTklDX1NJR0RFRihYRlNaLDI1LCJGaWxlIHNpemUgbGltaXQgZXhjZWVkZWQiKQpAQCAtNjYsNSArOTYsNiBAQAogX19CSU9OSUNfU0lHREVGKElPLDI5LCJJL08gcG9zc2libGUiKQogX19CSU9OSUNfU0lHREVGKFBXUiwzMCwiUG93ZXIgZmFpbHVyZSIpCiBfX0JJT05JQ19TSUdERUYoU1lTLDMxLCJCYWQgc3lzdGVtIGNhbGwiKQorI2VuZGlmCiAKICN1bmRlZiBfX0JJT05JQ19TSUdERUYKZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9zeXMvX3N5c3RlbV9wcm9wZXJ0aWVzLmggYi9saWJjL2luY2x1ZGUvc3lzL19zeXN0ZW1fcHJvcGVydGllcy5oCmluZGV4IDQyYTdmNmMuLjVlZWU3ZjAgMTAwNjQ0Ci0tLSBhL2xpYmMvaW5jbHVkZS9zeXMvX3N5c3RlbV9wcm9wZXJ0aWVzLmgKKysrIGIvbGliYy9pbmNsdWRlL3N5cy9fc3lzdGVtX3Byb3BlcnRpZXMuaApAQCAtMzQsMzcgKzM0LDIxIEBACiAjZWxzZQogI2luY2x1ZGUgPHN5cy9zeXN0ZW1fcHJvcGVydGllcy5oPgogCi10eXBlZGVmIHN0cnVjdCBwcm9wX2FyZWEgcHJvcF9hcmVhOwogdHlwZWRlZiBzdHJ1Y3QgcHJvcF9tc2cgcHJvcF9tc2c7CiAKICNkZWZpbmUgUFJPUF9BUkVBX01BR0lDICAgMHg1MDRmNTI1MAotI2RlZmluZSBQUk9QX0FSRUFfVkVSU0lPTiAweDQ1NDM0Zjc2CisjZGVmaW5lIFBST1BfQVJFQV9WRVJTSU9OIDB4ZmM2ZWQwYWIKKyNkZWZpbmUgUFJPUF9BUkVBX1ZFUlNJT05fQ09NUEFUIDB4NDU0MzRmNzYKIAogI2RlZmluZSBQUk9QX1NFUlZJQ0VfTkFNRSAicHJvcGVydHlfc2VydmljZSIKKyNkZWZpbmUgUFJPUF9GSUxFTkFNRSAiL2Rldi9fX3Byb3BlcnRpZXNfXyIKIAotLyogI2RlZmluZSBQUk9QX01BWF9FTlRSSUVTIDI0NyAqLwotLyogMjQ3IC0+IDMyNjIwIGJ5dGVzICg8MzI3NjgpICovCi0KLSNkZWZpbmUgVE9DX05BTUVfTEVOKHRvYykgICAgICAgKCh0b2MpID4+IDI0KQotI2RlZmluZSBUT0NfVE9fSU5GTyhhcmVhLCB0b2MpICAoKHByb3BfaW5mbyopICgoKGNoYXIqKSBhcmVhKSArICgodG9jKSAmIDB4RkZGRkZGKSkpCi0KLXN0cnVjdCBwcm9wX2FyZWEgewotICAgIHVuc2lnbmVkIHZvbGF0aWxlIGNvdW50OwotICAgIHVuc2lnbmVkIHZvbGF0aWxlIHNlcmlhbDsKLSAgICB1bnNpZ25lZCBtYWdpYzsKLSAgICB1bnNpZ25lZCB2ZXJzaW9uOwotICAgIHVuc2lnbmVkIHJlc2VydmVkWzRdOwotICAgIHVuc2lnbmVkIHRvY1sxXTsKLX07CisjZGVmaW5lIFBBX1NJWkUgICAgICAgICAoMTI4ICogMTAyNCkKIAogI2RlZmluZSBTRVJJQUxfVkFMVUVfTEVOKHNlcmlhbCkgKChzZXJpYWwpID4+IDI0KQogI2RlZmluZSBTRVJJQUxfRElSVFkoc2VyaWFsKSAoKHNlcmlhbCkgJiAxKQogCi1zdHJ1Y3QgcHJvcF9pbmZvIHsKLSAgICBjaGFyIG5hbWVbUFJPUF9OQU1FX01BWF07Ci0gICAgdW5zaWduZWQgdm9sYXRpbGUgc2VyaWFsOwotICAgIGNoYXIgdmFsdWVbUFJPUF9WQUxVRV9NQVhdOwotfTsKK19fQkVHSU5fREVDTFMKIAogc3RydWN0IHByb3BfbXNnIAogewpAQCAtOTIsMTcgKzc2LDcwIEBACiAqKiAgIDEuIHBpLT5zZXJpYWwgPSBwaS0+c2VyaWFsIHwgMQogKiogICAyLiBtZW1jcHkocGktPnZhbHVlLCBsb2NhbF92YWx1ZSwgdmFsdWVfbGVuKQogKiogICAzLiBwaS0+c2VyaWFsID0gKHZhbHVlX2xlbiA8PCAyNCkgfCAoKHBpLT5zZXJpYWwgKyAxKSAmIDB4ZmZmZmZmKQotKioKLSoqIEltcHJvdmVtZW50czoKLSoqIC0gbWFpbnRhaW4gdGhlIHRvYyBzb3J0ZWQgYnkgcGktPm5hbWUgdG8gYWxsb3cgbG9va3VwCi0qKiAgIGJ5IGJpbmFyeSBzZWFyY2gKLSoqCiAqLwogCiAjZGVmaW5lIFBST1BfUEFUSF9SQU1ESVNLX0RFRkFVTFQgICIvZGVmYXVsdC5wcm9wIgogI2RlZmluZSBQUk9QX1BBVEhfU1lTVEVNX0JVSUxEICAgICAiL3N5c3RlbS9idWlsZC5wcm9wIgogI2RlZmluZSBQUk9QX1BBVEhfU1lTVEVNX0RFRkFVTFQgICAiL3N5c3RlbS9kZWZhdWx0LnByb3AiCiAjZGVmaW5lIFBST1BfUEFUSF9MT0NBTF9PVkVSUklERSAgICIvZGF0YS9sb2NhbC5wcm9wIgorI2RlZmluZSBQUk9QX1BBVEhfRkFDVE9SWSAgICAgICAgICAiL2ZhY3RvcnkvZmFjdG9yeS5wcm9wIgorCisvKgorKiogTWFwIHRoZSBwcm9wZXJ0eSBhcmVhIGZyb20gdGhlIHNwZWNpZmllZCBmaWxlbmFtZS4gIFRoaXMKKyoqIG1ldGhvZCBpcyBmb3IgdGVzdGluZyBvbmx5LgorKi8KK2ludCBfX3N5c3RlbV9wcm9wZXJ0eV9zZXRfZmlsZW5hbWUoY29uc3QgY2hhciAqZmlsZW5hbWUpOworCisvKgorKiogSW5pdGlhbGl6ZSB0aGUgYXJlYSB0byBiZSB1c2VkIHRvIHN0b3JlIHByb3BlcnRpZXMuICBDYW4KKyoqIG9ubHkgYmUgZG9uZSBieSBhIHNpbmdsZSBwcm9jZXNzIHRoYXQgaGFzIHdyaXRlIGFjY2VzcyB0bworKiogdGhlIHByb3BlcnR5IGFyZWEuCisqLworaW50IF9fc3lzdGVtX3Byb3BlcnR5X2FyZWFfaW5pdCgpOworCisvKiBBZGQgYSBuZXcgc3lzdGVtIHByb3BlcnR5LiAgQ2FuIG9ubHkgYmUgZG9uZSBieSBhIHNpbmdsZQorKiogcHJvY2VzcyB0aGF0IGhhcyB3cml0ZSBhY2Nlc3MgdG8gdGhlIHByb3BlcnR5IGFyZWEsIGFuZAorKiogdGhhdCBwcm9jZXNzIG11c3QgaGFuZGxlIHNlcXVlbmNpbmcgdG8gZW5zdXJlIHRoZSBwcm9wZXJ0eQorKiogZG9lcyBub3QgYWxyZWFkeSBleGlzdCBhbmQgdGhhdCBvbmx5IG9uZSBwcm9wZXJ0eSBpcyBhZGRlZAorKiogb3IgdXBkYXRlZCBhdCBhIHRpbWUuCisqKgorKiogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIC0xIGlmIHRoZSBwcm9wZXJ0eSBhcmVhIGlzIGZ1bGwuCisqLworaW50IF9fc3lzdGVtX3Byb3BlcnR5X2FkZChjb25zdCBjaGFyICpuYW1lLCB1bnNpZ25lZCBpbnQgbmFtZWxlbiwKKwkJCWNvbnN0IGNoYXIgKnZhbHVlLCB1bnNpZ25lZCBpbnQgdmFsdWVsZW4pOworCisvKiBVcGRhdGUgdGhlIHZhbHVlIG9mIGEgc3lzdGVtIHByb3BlcnR5IHJldHVybmVkIGJ5CisqKiBfX3N5c3RlbV9wcm9wZXJ0eV9maW5kLiAgQ2FuIG9ubHkgYmUgZG9uZSBieSBhIHNpbmdsZSBwcm9jZXNzCisqKiB0aGF0IGhhcyB3cml0ZSBhY2Nlc3MgdG8gdGhlIHByb3BlcnR5IGFyZWEsIGFuZCB0aGF0IHByb2Nlc3MKKyoqIG11c3QgaGFuZGxlIHNlcXVlbmNpbmcgdG8gZW5zdXJlIHRoYXQgb25seSBvbmUgcHJvcGVydHkgaXMKKyoqIHVwZGF0ZWQgYXQgYSB0aW1lLgorKioKKyoqIFJldHVybnMgMCBvbiBzdWNjZXNzLCAtMSBpZiB0aGUgcGFyYW1ldGVycyBhcmUgaW5jb3JyZWN0LgorKi8KK2ludCBfX3N5c3RlbV9wcm9wZXJ0eV91cGRhdGUocHJvcF9pbmZvICpwaSwgY29uc3QgY2hhciAqdmFsdWUsIHVuc2lnbmVkIGludCBsZW4pOworCisvKiBSZWFkIHRoZSBzZXJpYWwgbnVtYmVyIG9mIGEgc3lzdGVtIHByb3BlcnR5IHJldHVybmVkIGJ5CisqKiBfX3N5c3RlbV9wcm9wZXJ0eV9maW5kLgorKioKKyoqIFJldHVybnMgdGhlIHNlcmlhbCBudW1iZXIgb24gc3VjY2VzcywgLTEgb24gZXJyb3IuCisqLwordW5zaWduZWQgaW50IF9fc3lzdGVtX3Byb3BlcnR5X3NlcmlhbChjb25zdCBwcm9wX2luZm8gKnBpKTsKKworLyogV2FpdCBmb3IgYW55IHN5c3RlbSBwcm9wZXJ0eSB0byBiZSB1cGRhdGVkLiAgQ2FsbGVyIG11c3QgcGFzcworKiogaW4gMCB0aGUgZmlyc3QgdGltZSwgYW5kIHRoZSBwcmV2aW91cyByZXR1cm4gdmFsdWUgb24gZWFjaAorKiogc3VjY2Vzc2l2ZSBjYWxsLiAqLwordW5zaWduZWQgaW50IF9fc3lzdGVtX3Byb3BlcnR5X3dhaXRfYW55KHVuc2lnbmVkIGludCBzZXJpYWwpOworCisvKiAgQ29tcGF0aWJpbGl0eSBmdW5jdGlvbnMgdG8gc3VwcG9ydCB1c2luZyBhbiBvbGQgaW5pdCB3aXRoIGEgbmV3IGxpYmMsCisgKiogbW9zdGx5IGZvciB0aGUgT1RBIHVwZGF0ZXIgYmluYXJ5LiAgVGhlc2UgY2FuIGJlIGRlbGV0ZWQgb25jZSBPVEFzIGZyb20KKyAqKiBhIHByZS1LIHJlbGVhc2Ugbm8gbG9uZ2VyIG5lZWRlZCB0byBiZSBzdXBwb3J0ZWQuICovCitjb25zdCBwcm9wX2luZm8gKl9fc3lzdGVtX3Byb3BlcnR5X2ZpbmRfY29tcGF0KGNvbnN0IGNoYXIgKm5hbWUpOworaW50IF9fc3lzdGVtX3Byb3BlcnR5X3JlYWRfY29tcGF0KGNvbnN0IHByb3BfaW5mbyAqcGksIGNoYXIgKm5hbWUsIGNoYXIgKnZhbHVlKTsKK2ludCBfX3N5c3RlbV9wcm9wZXJ0eV9mb3JlYWNoX2NvbXBhdCgKKyAgICAgICAgdm9pZCAoKnByb3BmbikoY29uc3QgcHJvcF9pbmZvICpwaSwgdm9pZCAqY29va2llKSwKKyAgICAgICAgdm9pZCAqY29va2llKTsKKworX19FTkRfREVDTFMKIAogI2VuZGlmCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9zeXMvYXRvbWljcy5oIGIvbGliYy9pbmNsdWRlL3N5cy9hdG9taWNzLmgKaW5kZXggZDNmYTE0NS4uMTQzYmM0YiAxMDA2NDQKLS0tIGEvbGliYy9pbmNsdWRlL3N5cy9hdG9taWNzLmgKKysrIGIvbGliYy9pbmNsdWRlL3N5cy9hdG9taWNzLmgKQEAgLTMzLDEwICszMyw0OCBAQAogCiBfX0JFR0lOX0RFQ0xTCiAKLWV4dGVybiBpbnQgX19hdG9taWNfY21weGNoZyhpbnQgb2xkLCBpbnQgX25ldywgdm9sYXRpbGUgaW50ICpwdHIpOwotZXh0ZXJuIGludCBfX2F0b21pY19zd2FwKGludCBfbmV3LCB2b2xhdGlsZSBpbnQgKnB0cik7Ci1leHRlcm4gaW50IF9fYXRvbWljX2RlYyh2b2xhdGlsZSBpbnQgKnB0cik7Ci1leHRlcm4gaW50IF9fYXRvbWljX2luYyh2b2xhdGlsZSBpbnQgKnB0cik7CisvKiBOb3RlOiBhdG9taWMgb3BlcmF0aW9ucyB0aGF0IHdlcmUgZXhwb3J0ZWQgYnkgdGhlIEMgbGlicmFyeSBkaWRuJ3QKKyAqICAgICAgIHByb3ZpZGUgYW55IG1lbW9yeSBiYXJyaWVycywgd2hpY2ggY3JlYXRlZCBwb3RlbnRpYWwgaXNzdWVzIG9uCisgKiAgICAgICBtdWx0aS1jb3JlIGRldmljZXMuIFdlIG5vdyBkZWZpbmUgdGhlbSBhcyBpbmxpbmVkIGNhbGxzIHRvCisgKiAgICAgICBHQ0Mgc3luYyBidWlsdGlucywgd2hpY2ggYWx3YXlzIHByb3ZpZGUgYSBmdWxsIGJhcnJpZXIuCisgKgorICogICAgICAgTk9URTogVGhlIEMgbGlicmFyeSBzdGlsbCBleHBvcnRzIGF0b21pYyBmdW5jdGlvbnMgYnkgdGhlIHNhbWUKKyAqICAgICAgICAgICAgICBuYW1lIHRvIGVuc3VyZSBBQkkgc3RhYmlsaXR5IGZvciBleGlzdGluZyBOREsgbWFjaGluZSBjb2RlLgorICoKKyAqICAgICAgIElmIHlvdSBhcmUgYW4gTkRLIGRldmVsb3Blciwgd2UgZW5jb3VyYWdlIHlvdSB0byByZWJ1aWxkIHlvdXIKKyAqICAgICAgIHVubW9kaWZpZWQgc291cmNlcyBhZ2FpbnN0IHRoaXMgaGVhZGVyIGFzIHNvb24gYXMgcG9zc2libGUuCisgKi8KKyNkZWZpbmUgX19BVE9NSUNfSU5MSU5FX18gc3RhdGljIF9faW5saW5lX18gX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpCisKK19fQVRPTUlDX0lOTElORV9fIGludAorX19hdG9taWNfY21weGNoZyhpbnQgb2xkX3ZhbHVlLCBpbnQgbmV3X3ZhbHVlLCB2b2xhdGlsZSBpbnQqIHB0cikKK3sKKyAgICAvKiBXZSBtdXN0IHJldHVybiAwIG9uIHN1Y2Nlc3MgKi8KKyAgICByZXR1cm4gX19zeW5jX3ZhbF9jb21wYXJlX2FuZF9zd2FwKHB0ciwgb2xkX3ZhbHVlLCBuZXdfdmFsdWUpICE9IG9sZF92YWx1ZTsKK30KKworX19BVE9NSUNfSU5MSU5FX18gaW50CitfX2F0b21pY19zd2FwKGludCBuZXdfdmFsdWUsIHZvbGF0aWxlIGludCAqcHRyKQoreworICAgIGludCBvbGRfdmFsdWU7CisgICAgZG8geworICAgICAgICBvbGRfdmFsdWUgPSAqcHRyOworICAgIH0gd2hpbGUgKF9fc3luY192YWxfY29tcGFyZV9hbmRfc3dhcChwdHIsIG9sZF92YWx1ZSwgbmV3X3ZhbHVlKSAhPSBvbGRfdmFsdWUpOworICAgIHJldHVybiBvbGRfdmFsdWU7Cit9CisKK19fQVRPTUlDX0lOTElORV9fIGludAorX19hdG9taWNfZGVjKHZvbGF0aWxlIGludCAqcHRyKQoreworICByZXR1cm4gX19zeW5jX2ZldGNoX2FuZF9zdWIgKHB0ciwgMSk7Cit9CisKK19fQVRPTUlDX0lOTElORV9fIGludAorX19hdG9taWNfaW5jKHZvbGF0aWxlIGludCAqcHRyKQoreworICByZXR1cm4gX19zeW5jX2ZldGNoX2FuZF9hZGQgKHB0ciwgMSk7Cit9CisKIAogaW50IF9fZnV0ZXhfd2FpdCh2b2xhdGlsZSB2b2lkICpmdHgsIGludCB2YWwsIGNvbnN0IHN0cnVjdCB0aW1lc3BlYyAqdGltZW91dCk7CiBpbnQgX19mdXRleF93YWtlKHZvbGF0aWxlIHZvaWQgKmZ0eCwgaW50IGNvdW50KTsKZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9zeXMvYXV4di5oIGIvbGliYy9pbmNsdWRlL3N5cy9hdXh2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQ3NTNjMwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvaW5jbHVkZS9zeXMvYXV4di5oCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKyNpZm5kZWYgX1NZU19BVVhWX0hfCisjZGVmaW5lIF9TWVNfQVVYVl9IXworCisjaW5jbHVkZSA8bGludXgvYXV4dmVjLmg+CisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisKK19fQkVHSU5fREVDTFMKKwordW5zaWduZWQgbG9uZyBpbnQgZ2V0YXV4dmFsKHVuc2lnbmVkIGxvbmcgaW50IHR5cGUpOworCitfX0VORF9ERUNMUworCisjZW5kaWYgLyogX1NZU19BVVhWX0hfICovCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvc3lzL2NhY2hlY3RsLmggYi9saWJjL2luY2x1ZGUvc3lzL2NhY2hlY3RsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTdlNmFlNwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvaW5jbHVkZS9zeXMvY2FjaGVjdGwuaApAQCAtMCwwICsxLDM2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisjaWZuZGVmIF9TWVNfQ0FDSEVDVExfSAorI2RlZmluZSBfU1lTX0NBQ0hFQ1RMX0ggMQorCisjaWZkZWYgX19taXBzX18KKyNpbmNsdWRlIDxhc20vY2FjaGVjdGwuaD4KK2V4dGVybiBpbnQgX19jYWNoZWN0bCAodm9pZCAqYWRkciwgX19jb25zdCBpbnQgbmJ5dGVzLCBfX2NvbnN0IGludCBvcCk7CitleHRlcm4gaW50IF9mbHVzaF9jYWNoZSAoY2hhciAqYWRkciwgX19jb25zdCBpbnQgbmJ5dGVzLCBfX2NvbnN0IGludCBvcCk7CisjZW5kaWYKKyNlbmRpZiAvKiBzeXMvY2FjaGVjdGwuaCAqLwpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL3N5cy9jYXBhYmlsaXR5LmggYi9saWJjL2luY2x1ZGUvc3lzL2NhcGFiaWxpdHkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NzE4YTZjCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9pbmNsdWRlL3N5cy9jYXBhYmlsaXR5LmgKQEAgLTAsMCArMSw0MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIF9CSU9OSUNfU1lTX0NBUEFCSUxJVFlfSAorI2RlZmluZSBfQklPTklDX1NZU19DQVBBQklMSVRZX0gKKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorI2luY2x1ZGUgPGxpbnV4L2NhcGFiaWxpdHkuaD4KKworX19CRUdJTl9ERUNMUworCitleHRlcm4gaW50IGNhcGdldChjYXBfdXNlcl9oZWFkZXJfdCBoZHJwLCBjYXBfdXNlcl9kYXRhX3QgZGF0YXApOworZXh0ZXJuIGludCBjYXBzZXQoY2FwX3VzZXJfaGVhZGVyX3QgaGRycCwgY29uc3QgY2FwX3VzZXJfZGF0YV90IGRhdGFwKTsKKworX19FTkRfREVDTFMKKworI2VuZGlmIC8qIF9CSU9OSUNfU1lTX0NBUEFCSUxJVFlfSCAqLwpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL3N5cy9jZGVmcy5oIGIvbGliYy9pbmNsdWRlL3N5cy9jZGVmcy5oCmluZGV4IDkyMDM1ZDQuLmE0YzFhZmYgMTAwNjQ0Ci0tLSBhL2xpYmMvaW5jbHVkZS9zeXMvY2RlZnMuaAorKysgYi9saWJjL2luY2x1ZGUvc3lzL2NkZWZzLmgKQEAgLTE3Nyw2ICsxNzcsOCBAQAogI2RlZmluZQlfX3VudXNlZAkvKiBkZWxldGUgKi8KICNlbmRpZgogCisjZGVmaW5lIF9fcHVyZTIgX19hdHRyaWJ1dGVfXygoX19jb25zdF9fKSkgLyogQW5kcm9pZC1hZGRlZDogdXNlZCBieSBGcmVlQlNEIGxpYm0gKi8KKwogI2lmIF9fR05VQ19QUkVSRVFfXygzLCAxKQogI2RlZmluZQlfX3VzZWQJCV9fYXR0cmlidXRlX18oKF9fdXNlZF9fKSkKICNlbHNlCkBAIC0yMDksNiArMjExLDExIEBACiAjZGVmaW5lIF9fc3RhdGVtZW50KHgpCSh4KQogI2VuZGlmCiAKKyNkZWZpbmUgX19ub25udWxsKGFyZ3MpIF9fYXR0cmlidXRlX18oKF9fbm9ubnVsbF9fIGFyZ3MpKQorCisjZGVmaW5lIF9fcHJpbnRmbGlrZSh4LCB5KSBfX2F0dHJpYnV0ZV9fKChfX2Zvcm1hdF9fKHByaW50ZiwgeCwgeSkpKSBfX25vbm51bGwoKHgpKQorI2RlZmluZSBfX3NjYW5mbGlrZSh4LCB5KSBfX2F0dHJpYnV0ZV9fKChfX2Zvcm1hdF9fKHNjYW5mLCB4LCB5KSkpIF9fbm9ubnVsbCgoeCkpCisKIC8qCiAgKiBDOTkgZGVmaW5lcyB0aGUgcmVzdHJpY3QgdHlwZSBxdWFsaWZpZXIga2V5d29yZCwgd2hpY2ggd2FzIG1hZGUgYXZhaWxhYmxlCiAgKiBpbiBHQ0MgMi45Mi4KQEAgLTMwNiw5ICszMTMsMjkgQEAKICNpZiBfX0dOVUNfUFJFUkVRX18oMiwgOTYpCiAjZGVmaW5lIF9fbm9yZXR1cm4gICAgX19hdHRyaWJ1dGVfXygoX19ub3JldHVybl9fKSkKICNkZWZpbmUgX19tYWxsb2NmdW5jICBfX2F0dHJpYnV0ZV9fKChtYWxsb2MpKQorI2RlZmluZSBfX3B1cmVmdW5jICAgIF9fYXR0cmlidXRlX18oKHB1cmUpKQogI2Vsc2UKICNkZWZpbmUgX19ub3JldHVybgogI2RlZmluZSBfX21hbGxvY2Z1bmMKKyNkZWZpbmUgX19wdXJlZnVuYworI2VuZGlmCisKKyNpZiBfX0dOVUNfUFJFUkVRX18oMywgMSkKKyNkZWZpbmUgX19hbHdheXNfaW5saW5lIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkKKyNlbHNlCisjZGVmaW5lIF9fYWx3YXlzX2lubGluZQorI2VuZGlmCisKKyNpZiBfX0dOVUNfUFJFUkVRX18oMywgNCkKKyNkZWZpbmUgX193dXIgX19hdHRyaWJ1dGVfXygoX193YXJuX3VudXNlZF9yZXN1bHRfXykpCisjZWxzZQorI2RlZmluZSBfX3d1cgorI2VuZGlmCisKKyNpZiBfX0dOVUNfUFJFUkVRX18oNCwgMykKKyNkZWZpbmUgX19lcnJvcmRlY2wobmFtZSwgbXNnKSBleHRlcm4gdm9pZCBuYW1lKHZvaWQpIF9fYXR0cmlidXRlX18oKF9fZXJyb3JfXyhtc2cpKSkKKyNlbHNlCisjZGVmaW5lIF9fZXJyb3JkZWNsKG5hbWUsIG1zZykgZXh0ZXJuIHZvaWQgbmFtZSh2b2lkKQogI2VuZGlmCiAKIC8qCkBAIC0zNjEsMTEgKzM4OCwxMSBAQAogI2RlZmluZQlfX2xpbmtfc2V0X2VudHJ5KHNldCwgaWR4KQkoX19saW5rX3NldF9iZWdpbihzZXQpW2lkeF0pCiAKIC8qCi0gKiBTb21lIG9mIHRoZSByZWNlbmQgRnJlZUJTRCBzb3VyY2VzIHVzZWQgaW4gQmlvbmljIG5lZWQgdGhpcy4KKyAqIFNvbWUgb2YgdGhlIEZyZWVCU0Qgc291cmNlcyB1c2VkIGluIEJpb25pYyBuZWVkIHRoaXMuCiAgKiBPcmlnaW5hbGx5LCB0aGlzIGlzIHVzZWQgdG8gZW1iZWQgdGhlIHJjcyB2ZXJzaW9ucyBvZiBlYWNoIHNvdXJjZSBmaWxlCiAgKiBpbiB0aGUgZ2VuZXJhdGVkIGJpbmFyeS4gV2UgY2VydGFpbmx5IGRvbid0IHdhbnQgdGhpcyBpbiBCaW9uaWMuCiAgKi8KLSNkZWZpbmUJX19GQlNESUQocykJc3RydWN0IF9faGFjaworI2RlZmluZSBfX0ZCU0RJRChzKSAvKiBub3RoaW5nICovCiAKIC8qLQogICogVGhlIGZvbGxvd2luZyBkZWZpbml0aW9ucyBhcmUgYW4gZXh0ZW5zaW9uIG9mIHRoZSBiZWhhdmlvciBvcmlnaW5hbGx5CkBAIC00OTksNCArNTI2LDI2IEBACiAjZGVmaW5lICBfX0JJT05JQ19fICAgMQogI2luY2x1ZGUgPGFuZHJvaWQvYXBpLWxldmVsLmg+CiAKKyNpZiBkZWZpbmVkKF9GT1JUSUZZX1NPVVJDRSkgJiYgX0ZPUlRJRllfU09VUkNFID4gMCAmJiBkZWZpbmVkKF9fT1BUSU1JWkVfXykgJiYgX19PUFRJTUlaRV9fID4gMAorI2RlZmluZSBfX0JJT05JQ19GT1JUSUZZIDEKKyNpZiBfRk9SVElGWV9TT1VSQ0UgPT0gMgorI2RlZmluZSBfX2JvcyhzKSBfX2J1aWx0aW5fb2JqZWN0X3NpemUoKHMpLCAxKQorI2Vsc2UKKyNkZWZpbmUgX19ib3MocykgX19idWlsdGluX29iamVjdF9zaXplKChzKSwgMCkKKyNlbmRpZgorCisjZGVmaW5lIF9fQklPTklDX0ZPUlRJRllfSU5MSU5FIFwKKyAgICBleHRlcm4gaW5saW5lIFwKKyAgICBfX2F0dHJpYnV0ZV9fICgoYWx3YXlzX2lubGluZSkpIFwKKyAgICBfX2F0dHJpYnV0ZV9fICgoZ251X2lubGluZSkpCisjZW5kaWYKKyNkZWZpbmUgX19CSU9OSUNfRk9SVElGWV9VTktOT1dOX1NJWkUgKChzaXplX3QpIC0xKQorCisvKiBBbmRyb2lkLWFkZGVkOiBmb3IgRnJlZUJTRCdzIGxpYm0uICovCisjZGVmaW5lIF9fd2Vha19yZWZlcmVuY2Uoc3ltLGFsaWFzKSBcCisgICAgX19hc21fXygiLndlYWsgIiAjYWxpYXMpOyBcCisgICAgX19hc21fXygiLmVxdSAiICAjYWxpYXMgIiwgIiAjc3ltKQorI2RlZmluZSBfX3N0cm9uZ19yZWZlcmVuY2Uoc3ltLGFsaWFzc3ltKSBcCisgICAgZXh0ZXJuIF9fdHlwZW9mIChzeW0pIGFsaWFzc3ltIF9fYXR0cmlidXRlX18gKChfX2FsaWFzX18gKCNzeW0pKSkKKwogI2VuZGlmIC8qICFfU1lTX0NERUZTX0hfICovCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvc3lzL2VuZGlhbi5oIGIvbGliYy9pbmNsdWRlL3N5cy9lbmRpYW4uaAppbmRleCAwMGY0ODM5Li5iMDM2NWQ4IDEwMDY0NAotLS0gYS9saWJjL2luY2x1ZGUvc3lzL2VuZGlhbi5oCisrKyBiL2xpYmMvaW5jbHVkZS9zeXMvZW5kaWFuLmgKQEAgLTM3LDYgKzM3LDcgQEAKICNkZWZpbmUgX1NZU19FTkRJQU5fSF8KIAogI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorI2luY2x1ZGUgPG1hY2hpbmUvZW5kaWFuLmg+CiAjaW5jbHVkZSA8bWFjaGluZS9fdHlwZXMuaD4KIAogI2RlZmluZSBfTElUVExFX0VORElBTgkxMjM0CkBAIC0xNTgsMjIgKzE1OSw2IEBACiAjZGVmaW5lIHN3YXAzMiBfX3N3YXAzMgogI2RlZmluZSBzd2FwNjQgX19zd2FwNjQKICNkZWZpbmUgc3dhcDE2X211bHRpIF9fc3dhcDE2X211bHRpCi0KLV9fQkVHSU5fREVDTFMKLV9fdWludDY0X3QJaHRvYmU2NChfX3VpbnQ2NF90KTsKLV9fdWludDMyX3QJaHRvYmUzMihfX3VpbnQzMl90KTsKLV9fdWludDE2X3QJaHRvYmUxNihfX3VpbnQxNl90KTsKLV9fdWludDY0X3QJYmV0b2g2NChfX3VpbnQ2NF90KTsKLV9fdWludDMyX3QJYmV0b2gzMihfX3VpbnQzMl90KTsKLV9fdWludDE2X3QJYmV0b2gxNihfX3VpbnQxNl90KTsKLQotX191aW50NjRfdAlodG9sZTY0KF9fdWludDY0X3QpOwotX191aW50MzJfdAlodG9sZTMyKF9fdWludDMyX3QpOwotX191aW50MTZfdAlodG9sZTE2KF9fdWludDE2X3QpOwotX191aW50NjRfdAlsZXRvaDY0KF9fdWludDY0X3QpOwotX191aW50MzJfdAlsZXRvaDMyKF9fdWludDMyX3QpOwotX191aW50MTZfdAlsZXRvaDE2KF9fdWludDE2X3QpOwotX19FTkRfREVDTFMKICNlbmRpZiAvKiBfX0JTRF9WSVNJQkxFICovCiAKICNpZiBfQllURV9PUkRFUiA9PSBfTElUVExFX0VORElBTgpAQCAtMjcwLDQgKzI1NSwyMCBAQAogI2RlZmluZSAgX19CSUdfRU5ESUFOICAgICAgIF9CSUdfRU5ESUFOCiAjZW5kaWYKIAorCisjaWZkZWYgX19CU0RfVklTSUJMRQorLyoKKyAqIGdsaWJjLWNvbXBhdGlibGUgYmVYWHRvaC9sZVhYdG9oIHN5bm9ueW1zIGZvciBodG9iZVhYL2h0b2xlWFguCisgKiBUaGUgQlNEcyBleHBvcnQgYm90aCBzZXRzIG9mIG5hbWVzLCBiaW9uaWMgaGlzdG9yaWNhbGx5IG9ubHkKKyAqIGV4cG9ydGVkIHRoZSBvbmVzIGFib3ZlIChvciBvbiB0aGUgcmhzIGhlcmUpLCBhbmQgZ2xpYmMgb25seQorICogZXhwb3J0cyB0aGVzZSBuYW1lcyAob24gdGhlIGxocykuCisgKi8KKyNkZWZpbmUgYmUxNnRvaCh4KSBodG9iZTE2KHgpCisjZGVmaW5lIGJlMzJ0b2goeCkgaHRvYmUzMih4KQorI2RlZmluZSBiZTY0dG9oKHgpIGh0b2JlNjQoeCkKKyNkZWZpbmUgbGUxNnRvaCh4KSBodG9sZTE2KHgpCisjZGVmaW5lIGxlMzJ0b2goeCkgaHRvbGUzMih4KQorI2RlZmluZSBsZTY0dG9oKHgpIGh0b2xlNjQoeCkKKyNlbmRpZgorCiAjZW5kaWYgLyogX1NZU19FTkRJQU5fSF8gKi8KZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9zeXMvZXBvbGwuaCBiL2xpYmMvaW5jbHVkZS9zeXMvZXBvbGwuaAppbmRleCBkZWNkYjQ2Li4zODczOWFhIDEwMDY0NAotLS0gYS9saWJjL2luY2x1ZGUvc3lzL2Vwb2xsLmgKKysrIGIvbGliYy9pbmNsdWRlL3N5cy9lcG9sbC5oCkBAIC00Miw2ICs0Miw5IEBACiAjZGVmaW5lIEVQT0xMV1JOT1JNICAgICAgMHgwMDAwMDEwMAogI2RlZmluZSBFUE9MTFdSQkFORCAgICAgIDB4MDAwMDAyMDAKICNkZWZpbmUgRVBPTExNU0cgICAgICAgICAweDAwMDAwNDAwCisjZGVmaW5lIEVQT0xMUkRIVVAgICAgICAgMHgwMDAwMjAwMAorI2RlZmluZSBFUE9MTFdBS0VVUCAgICAgIDB4MjAwMDAwMDAKKyNkZWZpbmUgRVBPTExPTkVTSE9UICAgICAweDQwMDAwMDAwCiAjZGVmaW5lIEVQT0xMRVQgICAgICAgICAgMHg4MDAwMDAwMAogCiAjZGVmaW5lIEVQT0xMX0NUTF9BREQgICAgMQpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL3N5cy9ldmVudGZkLmggYi9saWJjL2luY2x1ZGUvc3lzL2V2ZW50ZmQuaAppbmRleCAxOTI0NGE1Li5lYzg0ZTI3IDEwMDY0NAotLS0gYS9saWJjL2luY2x1ZGUvc3lzL2V2ZW50ZmQuaAorKysgYi9saWJjL2luY2x1ZGUvc3lzL2V2ZW50ZmQuaApAQCAtMzMsMTcgKzMzLDE2IEBACiAKIF9fQkVHSU5fREVDTFMKIAotI2RlZmluZSAgRUZEX0NMT0VYRUMgICBPX0NMT0VYRUMKLSNkZWZpbmUgIEVGRF9OT05CTE9DSyAgT19OT05CTE9DSworI2RlZmluZSBFRkRfQ0xPRVhFQyBPX0NMT0VYRUMKKyNkZWZpbmUgRUZEX05PTkJMT0NLIE9fTk9OQkxPQ0sKIAogLyogdHlwZSBvZiBldmVudCBjb3VudGVyICovCi10eXBlZGVmIHVpbnQ2NF90ICBldmVudGZkX3Q7Cit0eXBlZGVmIHVpbnQ2NF90IGV2ZW50ZmRfdDsKIAotZXh0ZXJuIGludCBldmVudGZkKHVuc2lnbmVkIGludCBpbml0dmFsLCBpbnQgZmxhZ3MpOworZXh0ZXJuIGludCBldmVudGZkKHVuc2lnbmVkIGludCBpbml0aWFsX3ZhbHVlLCBpbnQgZmxhZ3MpOwogCi0vKiBDb21wYXRpYmlsaXR5IHdpdGggR0xpYmMgKi8KLWV4dGVybiBpbnQgZXZlbnRmZF9yZWFkKGludCBmZCwgZXZlbnRmZF90ICpjb3VudGVyKTsKLWV4dGVybiBpbnQgZXZlbnRmZF93cml0ZShpbnQgZmQsIGNvbnN0IGV2ZW50ZmRfdCBjb3VudGVyKTsKK2V4dGVybiBpbnQgZXZlbnRmZF9yZWFkKGludCBmZCwgZXZlbnRmZF90KiB2YWx1ZSk7CitleHRlcm4gaW50IGV2ZW50ZmRfd3JpdGUoaW50IGZkLCBldmVudGZkX3QgdmFsdWUpOwogCiBfX0VORF9ERUNMUwogCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvc3lzL2V4ZWNfZWxmLmggYi9saWJjL2luY2x1ZGUvc3lzL2V4ZWNfZWxmLmgKaW5kZXggMDNiYmRhYy4uNmQ0NDViZiAxMDA2NDQKLS0tIGEvbGliYy9pbmNsdWRlL3N5cy9leGVjX2VsZi5oCisrKyBiL2xpYmMvaW5jbHVkZS9zeXMvZXhlY19lbGYuaApAQCAtMSw2ICsxLDExIEBACi0vKgkkT3BlbkJTRDogZXhlY19lbGYuaCx2IDEuNDEgMjAwNi8wMS8wNiAxODo1MzowNSBtaWxsZXJ0IEV4cCAkCSovCi0vKgotICogQ29weXJpZ2h0IChjKSAxOTk1LCAxOTk2IEVyaWsgVGhlaXNlbi4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvKgkkTmV0QlNEOiBleGVjX2VsZi5oLHYgMS4xMjYgMjAxMi8wOC8wNSAwMTo0Mzo1OSBtYXR0IEV4cCAkCSovCisKKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTk0IFRoZSBOZXRCU0QgRm91bmRhdGlvbiwgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIFRoZSBOZXRCU0QgRm91bmRhdGlvbgorICogYnkgQ2hyaXN0b3MgWm91bGFzLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMCw0MCArMTUsMTY0IEBACiAgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAogICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQogICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIFRoZSBuYW1lIG9mIHRoZSBhdXRob3IgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cwotICogICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24KICAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUgotICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KLSAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKLSAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLyoKLSAqIFRoaXMgaXMgdGhlIEVMRiBBQkkgaGVhZGVyIGZpbGUKLSAqIGZvcm1lcmx5IGtub3duIGFzICJlbGZfYWJpLmgiLgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgTkVUQlNEIEZPVU5EQVRJT04sIElOQy4gQU5EIENPTlRSSUJVVE9SUworICogYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVECisgKiBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBGT1VOREFUSU9OIE9SIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAogI2lmbmRlZiBfU1lTX0VYRUNfRUxGX0hfCiAjZGVmaW5lIF9TWVNfRVhFQ19FTEZfSF8KIAotI2luY2x1ZGUgPG1hY2hpbmUvX3R5cGVzLmg+Ci0jaW5jbHVkZSA8bWFjaGluZS9leGVjLmg+Ci0jaW5jbHVkZSA8bGludXgvZWxmLmg+CisvKgorICogVGhlIGN1cnJlbnQgRUxGIEFCSSBzcGVjaWZpY2F0aW9uIGlzIGF2YWlsYWJsZSBhdDoKKyAqCWh0dHA6Ly93d3cuc2NvLmNvbS9kZXZlbG9wZXJzL2dhYmkvCisgKgorICogQ3VycmVudCBoZWFkZXIgZGVmaW5pdGlvbnMgYXJlIGluOgorICoJaHR0cDovL3d3dy5zY28uY29tL2RldmVsb3BlcnMvZ2FiaS9sYXRlc3QvY2g0LmVoZWFkZXIuaHRtbAorICovCiAKLS8qIGVfaWRlbnRbXSBPcGVyYXRpbmcgU3lzdGVtL0FCSSAqLworI2lmIGRlZmluZWQoX0tFUk5FTCkgfHwgZGVmaW5lZChfU1RBTkRBTE9ORSkKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbHNlCisjaW5jbHVkZSA8aW50dHlwZXMuaD4KKyNlbmRpZiAvKiBfS0VSTkVMIHx8IF9TVEFOREFMT05FICovCisKKyNpZiBIQVZFX05CVE9PTF9DT05GSUdfSAorI2luY2x1ZGUgPG5iaW5jbHVkZS9tYWNoaW5lL2VsZl9tYWNoZGVwLmg+CisjZWxzZQorI2luY2x1ZGUgPG1hY2hpbmUvZWxmX21hY2hkZXAuaD4KKyNlbmRpZgorCit0eXBlZGVmIHVpbnQ4X3QJCUVsZl9CeXRlOworCit0eXBlZGVmIHVpbnQzMl90CUVsZjMyX0FkZHI7CisjZGVmaW5lIEVMRjMyX0ZTWl9BRERSCTQKK3R5cGVkZWYgdWludDMyX3QJRWxmMzJfT2ZmOwordHlwZWRlZiBpbnQzMl90CQlFbGYzMl9TT2ZmOworI2RlZmluZSBFTEYzMl9GU1pfT0ZGCTQKK3R5cGVkZWYgaW50MzJfdAkJRWxmMzJfU3dvcmQ7CisjZGVmaW5lIEVMRjMyX0ZTWl9TV09SRCA0Cit0eXBlZGVmIHVpbnQzMl90CUVsZjMyX1dvcmQ7CisjZGVmaW5lIEVMRjMyX0ZTWl9XT1JECTQKK3R5cGVkZWYgdWludDE2X3QJRWxmMzJfSGFsZjsKKyNkZWZpbmUgRUxGMzJfRlNaX0hBTEYJMgordHlwZWRlZiB1aW50NjRfdAlFbGYzMl9Md29yZDsKKyNkZWZpbmUgRUxGMzJfRlNaX0xXT1JEIDgKKwordHlwZWRlZiB1aW50NjRfdAlFbGY2NF9BZGRyOworI2RlZmluZSBFTEY2NF9GU1pfQUREUgk4Cit0eXBlZGVmIHVpbnQ2NF90CUVsZjY0X09mZjsKK3R5cGVkZWYgaW50NjRfdAkJRWxmNjRfU09mZjsKKyNkZWZpbmUgRUxGNjRfRlNaX09GRgk4Cit0eXBlZGVmIGludDMyX3QJCUVsZjY0X1NoYWxmOworI2RlZmluZSBFTEY2NF9GU1pfU0hBTEYgNAorCit0eXBlZGVmIGludDMyX3QJCUVsZjY0X1N3b3JkOworI2RlZmluZSBFTEY2NF9GU1pfU1dPUkQgNAordHlwZWRlZiB1aW50MzJfdAlFbGY2NF9Xb3JkOworI2RlZmluZSBFTEY2NF9GU1pfV09SRAk0CisKK3R5cGVkZWYgaW50NjRfdAkJRWxmNjRfU3h3b3JkOworI2RlZmluZSBFTEY2NF9GU1pfU1hXT1JEIDgKK3R5cGVkZWYgdWludDY0X3QJRWxmNjRfWHdvcmQ7CisjZGVmaW5lIEVMRjY0X0ZTWl9YV09SRCA4Cit0eXBlZGVmIHVpbnQ2NF90CUVsZjY0X0x3b3JkOworI2RlZmluZSBFTEY2NF9GU1pfTFdPUkQgOAordHlwZWRlZiB1aW50MTZfdAlFbGY2NF9IYWxmOworI2RlZmluZSBFTEY2NF9GU1pfSEFMRiAyCisKKy8qCisgKiBFTEYgSGVhZGVyCisgKi8KKyNkZWZpbmUgRUxGX05JREVOVAkxNgorCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgY2hhcgllX2lkZW50W0VMRl9OSURFTlRdOwkvKiBJZCBieXRlcyAqLworCUVsZjMyX0hhbGYJZV90eXBlOwkJCS8qIGZpbGUgdHlwZSAqLworCUVsZjMyX0hhbGYJZV9tYWNoaW5lOwkJLyogbWFjaGluZSB0eXBlICovCisJRWxmMzJfV29yZAllX3ZlcnNpb247CQkvKiB2ZXJzaW9uIG51bWJlciAqLworCUVsZjMyX0FkZHIJZV9lbnRyeTsJCS8qIGVudHJ5IHBvaW50ICovCisJRWxmMzJfT2ZmCWVfcGhvZmY7CQkvKiBQcm9ncmFtIGhkciBvZmZzZXQgKi8KKwlFbGYzMl9PZmYJZV9zaG9mZjsJCS8qIFNlY3Rpb24gaGRyIG9mZnNldCAqLworCUVsZjMyX1dvcmQJZV9mbGFnczsJCS8qIFByb2Nlc3NvciBmbGFncyAqLworCUVsZjMyX0hhbGYJZV9laHNpemU7CQkvKiBzaXplb2YgZWhkciAqLworCUVsZjMyX0hhbGYJZV9waGVudHNpemU7CQkvKiBQcm9ncmFtIGhlYWRlciBlbnRyeSBzaXplICovCisJRWxmMzJfSGFsZgllX3BobnVtOwkJLyogTnVtYmVyIG9mIHByb2dyYW0gaGVhZGVycyAqLworCUVsZjMyX0hhbGYJZV9zaGVudHNpemU7CQkvKiBTZWN0aW9uIGhlYWRlciBlbnRyeSBzaXplICovCisJRWxmMzJfSGFsZgllX3NobnVtOwkJLyogTnVtYmVyIG9mIHNlY3Rpb24gaGVhZGVycyAqLworCUVsZjMyX0hhbGYJZV9zaHN0cm5keDsJCS8qIFN0cmluZyB0YWJsZSBpbmRleCAqLworfSBFbGYzMl9FaGRyOworCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgY2hhcgllX2lkZW50W0VMRl9OSURFTlRdOwkvKiBJZCBieXRlcyAqLworCUVsZjY0X0hhbGYJZV90eXBlOwkJCS8qIGZpbGUgdHlwZSAqLworCUVsZjY0X0hhbGYJZV9tYWNoaW5lOwkJLyogbWFjaGluZSB0eXBlICovCisJRWxmNjRfV29yZAllX3ZlcnNpb247CQkvKiB2ZXJzaW9uIG51bWJlciAqLworCUVsZjY0X0FkZHIJZV9lbnRyeTsJCS8qIGVudHJ5IHBvaW50ICovCisJRWxmNjRfT2ZmCWVfcGhvZmY7CQkvKiBQcm9ncmFtIGhkciBvZmZzZXQgKi8KKwlFbGY2NF9PZmYJZV9zaG9mZjsJCS8qIFNlY3Rpb24gaGRyIG9mZnNldCAqLworCUVsZjY0X1dvcmQJZV9mbGFnczsJCS8qIFByb2Nlc3NvciBmbGFncyAqLworCUVsZjY0X0hhbGYJZV9laHNpemU7CQkvKiBzaXplb2YgZWhkciAqLworCUVsZjY0X0hhbGYJZV9waGVudHNpemU7CQkvKiBQcm9ncmFtIGhlYWRlciBlbnRyeSBzaXplICovCisJRWxmNjRfSGFsZgllX3BobnVtOwkJLyogTnVtYmVyIG9mIHByb2dyYW0gaGVhZGVycyAqLworCUVsZjY0X0hhbGYJZV9zaGVudHNpemU7CQkvKiBTZWN0aW9uIGhlYWRlciBlbnRyeSBzaXplICovCisJRWxmNjRfSGFsZgllX3NobnVtOwkJLyogTnVtYmVyIG9mIHNlY3Rpb24gaGVhZGVycyAqLworCUVsZjY0X0hhbGYJZV9zaHN0cm5keDsJCS8qIFN0cmluZyB0YWJsZSBpbmRleCAqLworfSBFbGY2NF9FaGRyOworCisvKiBlX2lkZW50IG9mZnNldHMgKi8KKyNkZWZpbmUgRUlfTUFHMAkJMAkvKiAnXDE3NycgKi8KKyNkZWZpbmUgRUlfTUFHMQkJMQkvKiAnRScJICAqLworI2RlZmluZSBFSV9NQUcyCQkyCS8qICdMJwkgICovCisjZGVmaW5lIEVJX01BRzMJCTMJLyogJ0YnCSAgKi8KKyNkZWZpbmUgRUlfQ0xBU1MJNAkvKiBGaWxlIGNsYXNzICovCisjZGVmaW5lIEVJX0RBVEEJCTUJLyogRGF0YSBlbmNvZGluZyAqLworI2RlZmluZSBFSV9WRVJTSU9OCTYJLyogRmlsZSB2ZXJzaW9uICovCisjZGVmaW5lIEVJX09TQUJJCTcJLyogT3BlcmF0aW5nIHN5c3RlbS9BQkkgaWRlbnRpZmljYXRpb24gKi8KKyNkZWZpbmUgRUlfQUJJVkVSU0lPTgk4CS8qIEFCSSB2ZXJzaW9uICovCisjZGVmaW5lIEVJX1BBRAkJOQkvKiBTdGFydCBvZiBwYWRkaW5nIGJ5dGVzIHVwIHRvIEVJX05JREVOVCovCisjZGVmaW5lIEVJX05JREVOVAkxNgkvKiBGaXJzdCBub24taWRlbnQgaGVhZGVyIGJ5dGUgKi8KKworLyogZV9pZGVudFtFSV9NQUcwLEVJX01BRzNdICovCisjZGVmaW5lIEVMRk1BRzAJCTB4N2YKKyNkZWZpbmUgRUxGTUFHMQkJJ0UnCisjZGVmaW5lIEVMRk1BRzIJCSdMJworI2RlZmluZSBFTEZNQUczCQknRicKKyNkZWZpbmUgRUxGTUFHCQkiXDE3N0VMRiIKKyNkZWZpbmUgU0VMRk1BRwkJNAorCisvKiBlX2lkZW50W0VJX0NMQVNTXSAqLworI2RlZmluZSBFTEZDTEFTU05PTkUJMAkvKiBJbnZhbGlkIGNsYXNzICovCisjZGVmaW5lIEVMRkNMQVNTMzIJMQkvKiAzMi1iaXQgb2JqZWN0cyAqLworI2RlZmluZSBFTEZDTEFTUzY0CTIJLyogNjQtYml0IG9iamVjdHMgKi8KKyNkZWZpbmUgRUxGQ0xBU1NOVU0JMworCisvKiBlX2lkZW50W0VJX0RBVEFdICovCisjZGVmaW5lIEVMRkRBVEFOT05FCTAJLyogSW52YWxpZCBkYXRhIGVuY29kaW5nICovCisjZGVmaW5lIEVMRkRBVEEyTFNCCTEJLyogMidzIGNvbXBsZW1lbnQgdmFsdWVzLCBMU0IgZmlyc3QgKi8KKyNkZWZpbmUgRUxGREFUQTJNU0IJMgkvKiAyJ3MgY29tcGxlbWVudCB2YWx1ZXMsIE1TQiBmaXJzdCAqLworCisvKiBlX2lkZW50W0VJX1ZFUlNJT05dICovCisjZGVmaW5lIEVWX05PTkUJCTAJLyogSW52YWxpZCB2ZXJzaW9uICovCisjZGVmaW5lIEVWX0NVUlJFTlQJMQkvKiBDdXJyZW50IHZlcnNpb24gKi8KKyNkZWZpbmUgRVZfTlVNCQkyCisKKy8qIGVfaWRlbnRbRUlfT1NBQkldICovCiAjZGVmaW5lIEVMRk9TQUJJX1NZU1YJCTAJLyogVU5JWCBTeXN0ZW0gViBBQkkgKi8KICNkZWZpbmUgRUxGT1NBQklfSFBVWAkJMQkvKiBIUC1VWCBvcGVyYXRpbmcgc3lzdGVtICovCiAjZGVmaW5lIEVMRk9TQUJJX05FVEJTRAkJMgkvKiBOZXRCU0QgKi8KICNkZWZpbmUgRUxGT1NBQklfTElOVVgJCTMJLyogR05VL0xpbnV4ICovCiAjZGVmaW5lIEVMRk9TQUJJX0hVUkQJCTQJLyogR05VL0h1cmQgKi8KLSNkZWZpbmUgRUxGT1NBQklfODZPUEVOCQk1CS8qIDg2T3BlbiBjb21tb24gSUEzMiBBQkkgKi8KKyNkZWZpbmUgRUxGT1NBQklfODZPUEVOCQk1CS8qIDg2T3BlbiAqLwogI2RlZmluZSBFTEZPU0FCSV9TT0xBUklTCTYJLyogU29sYXJpcyAqLwogI2RlZmluZSBFTEZPU0FCSV9NT05URVJFWQk3CS8qIE1vbnRlcmV5ICovCiAjZGVmaW5lIEVMRk9TQUJJX0lSSVgJCTgJLyogSVJJWCAqLwpAQCAtNTEsODMgKzE4MCwxMDU0IEBACiAjZGVmaW5lIEVMRk9TQUJJX1RSVTY0CQkxMAkvKiBUUlU2NCBVTklYICovCiAjZGVmaW5lIEVMRk9TQUJJX01PREVTVE8JMTEJLyogTm92ZWxsIE1vZGVzdG8gKi8KICNkZWZpbmUgRUxGT1NBQklfT1BFTkJTRAkxMgkvKiBPcGVuQlNEICovCisjZGVmaW5lIEVMRk9TQUJJX09QRU5WTVMJMTMJLyogT3BlblZNUyAqLworI2RlZmluZSBFTEZPU0FCSV9OU0sJCTE0CS8qIEhQIE5vbi1TdG9wIEtlcm5lbCAqLworI2RlZmluZSBFTEZPU0FCSV9BUk9TCQkxNQkvKiBBbWlnYSBSZXNlYXJjaCBPUyAqLworLyogVW5vZmZpY2lhbCBPU0FCSXMgZm9sbG93ICovCiAjZGVmaW5lIEVMRk9TQUJJX0FSTQkJOTcJLyogQVJNICovCiAjZGVmaW5lIEVMRk9TQUJJX1NUQU5EQUxPTkUJMjU1CS8qIFN0YW5kYWxvbmUgKGVtYmVkZGVkKSBhcHBsaWNhdGlvbiAqLwogCi0vKiBlX2lkZW50ICovCi0jZGVmaW5lIElTX0VMRihlaGRyKSAoKGVoZHIpLmVfaWRlbnRbRUlfTUFHMF0gPT0gRUxGTUFHMCAmJiBcCi0gICAgICAgICAgICAgICAgICAgICAgKGVoZHIpLmVfaWRlbnRbRUlfTUFHMV0gPT0gRUxGTUFHMSAmJiBcCi0gICAgICAgICAgICAgICAgICAgICAgKGVoZHIpLmVfaWRlbnRbRUlfTUFHMl0gPT0gRUxGTUFHMiAmJiBcCi0gICAgICAgICAgICAgICAgICAgICAgKGVoZHIpLmVfaWRlbnRbRUlfTUFHM10gPT0gRUxGTUFHMykKKyNkZWZpbmUgRUxGT1NBQklfTk9ORQkJRUxGT1NBQklfU1lTVgorI2RlZmluZSBFTEZPU0FCSV9BSVgJCUVMRk9TQUJJX01PTlRFUkVZCisKKy8qIGVfdHlwZSAqLworI2RlZmluZSBFVF9OT05FCQkwCS8qIE5vIGZpbGUgdHlwZSAqLworI2RlZmluZSBFVF9SRUwJCTEJLyogUmVsb2NhdGFibGUgZmlsZSAqLworI2RlZmluZSBFVF9FWEVDCQkyCS8qIEV4ZWN1dGFibGUgZmlsZSAqLworI2RlZmluZSBFVF9EWU4JCTMJLyogU2hhcmVkIG9iamVjdCBmaWxlICovCisjZGVmaW5lIEVUX0NPUkUJCTQJLyogQ29yZSBmaWxlICovCisjZGVmaW5lIEVUX05VTQkJNQorCisjZGVmaW5lIEVUX0xPT1MJCTB4ZmUwMAkvKiBPcGVyYXRpbmcgc3lzdGVtIHNwZWNpZmljIHJhbmdlICovCisjZGVmaW5lIEVUX0hJT1MJCTB4ZmVmZgorI2RlZmluZSBFVF9MT1BST0MJMHhmZjAwCS8qIFByb2Nlc3Nvci1zcGVjaWZpYyByYW5nZSAqLworI2RlZmluZSBFVF9ISVBST0MJMHhmZmZmCiAKIC8qIGVfbWFjaGluZSAqLwotI2RlZmluZSBFTV9OT05FCQkwCQkvKiBObyBNYWNoaW5lICovCi0jZGVmaW5lIEVNX00zMgkJMQkJLyogQVQmVCBXRSAzMjEwMCAqLwotI2RlZmluZSBFTV9TUEFSQwkyCQkvKiBTUEFSQyAqLwotI2RlZmluZSBFTV8zODYJCTMJCS8qIEludGVsIDgwMzg2ICovCi0jZGVmaW5lIEVNXzY4SwkJNAkJLyogTW90b3JvbGEgNjgwMDAgKi8KLSNkZWZpbmUgRU1fODhLCQk1CQkvKiBNb3Rvcm9sYSA4ODAwMCAqLwotI2RlZmluZSBFTV80ODYJCTYJCS8qIEludGVsIDgwNDg2IC0gdW51c2VkPyAqLwotI2RlZmluZSBFTV84NjAJCTcJCS8qIEludGVsIDgwODYwICovCi0jZGVmaW5lIEVNX01JUFMJCTgJCS8qIE1JUFMgUjMwMDAgQmlnLUVuZGlhbiBvbmx5ICovCi0vKiAKLSAqIERvbid0IGtub3cgaWYgRU1fTUlQU19SUzRfQkUsCi0gKiBFTV9TUEFSQzY0LCBFTV9QQVJJU0MsCi0gKiBvciBFTV9QUEMgYXJlIEFCSSBjb21wbGlhbnQKKyNkZWZpbmUgRU1fTk9ORQkJMAkvKiBObyBtYWNoaW5lICovCisjZGVmaW5lIEVNX00zMgkJMQkvKiBBVCZUIFdFIDMyMTAwICovCisjZGVmaW5lIEVNX1NQQVJDCTIJLyogU1BBUkMgKi8KKyNkZWZpbmUgRU1fMzg2CQkzCS8qIEludGVsIDgwMzg2ICovCisjZGVmaW5lIEVNXzY4SwkJNAkvKiBNb3Rvcm9sYSA2ODAwMCAqLworI2RlZmluZSBFTV84OEsJCTUJLyogTW90b3JvbGEgODgwMDAgKi8KKyNkZWZpbmUgRU1fNDg2CQk2CS8qIEludGVsIDgwNDg2ICovCisjZGVmaW5lIEVNXzg2MAkJNwkvKiBJbnRlbCA4MDg2MCAqLworI2RlZmluZSBFTV9NSVBTCQk4CS8qIE1JUFMgSSBBcmNoaXRlY3R1cmUgKi8KKyNkZWZpbmUgRU1fUzM3MAkJOQkvKiBBbWRhaGwgVVRTIG9uIFN5c3RlbS8zNzAgKi8KKyNkZWZpbmUgRU1fTUlQU19SUzNfTEUJMTAJLyogTUlQUyBSUzMwMDAgTGl0dGxlLWVuZGlhbiAqLworCQkJLyogMTEtMTQgLSBSZXNlcnZlZCAqLworI2RlZmluZSBFTV9SUzYwMDAJMTEJLyogSUJNIFJTLzYwMDAgWFhYIHJlc2VydmVkICovCisjZGVmaW5lIEVNX1BBUklTQwkxNQkvKiBIZXdsZXR0LVBhY2thcmQgUEEtUklTQyAqLworI2RlZmluZSBFTV9OQ1VCRQkxNgkvKiBOQ3ViZSBYWFggcmVzZXJ2ZWQgKi8KKyNkZWZpbmUgRU1fVlBQNTAwCTE3CS8qIEZ1aml0c3UgVlBQNTAwICovCisjZGVmaW5lIEVNX1NQQVJDMzJQTFVTCTE4CS8qIEVuaGFuY2VkIGluc3RydWN0aW9uIHNldCBTUEFSQyAqLworI2RlZmluZSBFTV85NjAJCTE5CS8qIEludGVsIDgwOTYwICovCisjZGVmaW5lIEVNX1BQQwkJMjAJLyogUG93ZXJQQyAqLworI2RlZmluZSBFTV9QUEM2NAkyMQkvKiA2NC1iaXQgUG93ZXJQQyAqLworCQkJLyogMjItMzUgLSBSZXNlcnZlZCAqLworI2RlZmluZSBFTV9TMzkwCQkyMgkvKiBTeXN0ZW0vMzkwIFhYWCByZXNlcnZlZCAqLworI2RlZmluZSBFTV9WODAwCQkzNgkvKiBORUMgVjgwMCAqLworI2RlZmluZSBFTV9GUjIwCQkzNwkvKiBGdWppdHN1IEZSMjAgKi8KKyNkZWZpbmUgRU1fUkgzMgkJMzgJLyogVFJXIFJILTMyICovCisjZGVmaW5lIEVNX1JDRQkJMzkJLyogTW90b3JvbGEgUkNFICovCisjZGVmaW5lIEVNX0FSTQkJNDAJLyogQWR2YW5jZWQgUklTQyBNYWNoaW5lcyBBUk0gKi8KKyNkZWZpbmUgRU1fQUxQSEEJNDEJLyogRElHSVRBTCBBbHBoYSAqLworI2RlZmluZSBFTV9TSAkJNDIJLyogSGl0YWNoaSBTdXBlci1IICovCisjZGVmaW5lIEVNX1NQQVJDVjkJNDMJLyogU1BBUkMgVmVyc2lvbiA5ICovCisjZGVmaW5lIEVNX1RSSUNPUkUJNDQJLyogU2llbWVucyBUcmljb3JlICovCisjZGVmaW5lIEVNX0FSQwkJNDUJLyogQXJnb25hdXQgUklTQyBDb3JlICovCisjZGVmaW5lIEVNX0g4XzMwMAk0NgkvKiBIaXRhY2hpIEg4LzMwMCAqLworI2RlZmluZSBFTV9IOF8zMDBICTQ3CS8qIEhpdGFjaGkgSDgvMzAwSCAqLworI2RlZmluZSBFTV9IOFMJCTQ4CS8qIEhpdGFjaGkgSDhTICovCisjZGVmaW5lIEVNX0g4XzUwMAk0OQkvKiBIaXRhY2hpIEg4LzUwMCAqLworI2RlZmluZSBFTV9JQV82NAk1MAkvKiBJbnRlbCBNZXJjZWQgUHJvY2Vzc29yICovCisjZGVmaW5lIEVNX01JUFNfWAk1MQkvKiBTdGFuZm9yZCBNSVBTLVggKi8KKyNkZWZpbmUgRU1fQ09MREZJUkUJNTIJLyogTW90b3JvbGEgQ29sZGZpcmUgKi8KKyNkZWZpbmUgRU1fNjhIQzEyCTUzCS8qIE1vdG9yb2xhIE1DNjhIQzEyICovCisjZGVmaW5lIEVNX01NQQkJNTQJLyogRnVqaXRzdSBNTUEgTXVsdGltZWRpYSBBY2NlbGVyYXRvciAqLworI2RlZmluZSBFTV9QQ1AJCTU1CS8qIFNpZW1lbnMgUENQICovCisjZGVmaW5lIEVNX05DUFUJCTU2CS8qIFNvbnkgbkNQVSBlbWJlZGRlZCBSSVNDIHByb2Nlc3NvciAqLworI2RlZmluZSBFTV9ORFIxCQk1NwkvKiBEZW5zbyBORFIxIG1pY3JvcHJvY2Vzc29yICovCisjZGVmaW5lIEVNX1NUQVJDT1JFCTU4CS8qIE1vdG9yb2xhIFN0YXIqQ29yZSBwcm9jZXNzb3IgKi8KKyNkZWZpbmUgRU1fTUUxNgkJNTkJLyogVG95b3RhIE1FMTYgcHJvY2Vzc29yICovCisjZGVmaW5lIEVNX1NUMTAwCTYwCS8qIFNUTWljcm9lbGVjdHJvbmljcyBTVDEwMCBwcm9jZXNzb3IgKi8KKyNkZWZpbmUgRU1fVElOWUoJNjEJLyogQWR2YW5jZWQgTG9naWMgQ29ycC4gVGlueUogZW1iZWRkZWQgZmFtaWx5IHByb2Nlc3NvciAqLworI2RlZmluZSBFTV9YODZfNjQJNjIJLyogQU1EIHg4Ni02NCBhcmNoaXRlY3R1cmUgKi8KKyNkZWZpbmUgRU1fUERTUAkJNjMJLyogU29ueSBEU1AgUHJvY2Vzc29yICovCisjZGVmaW5lIEVNX1BEUDEwCTY0CS8qIERpZ2l0YWwgRXF1aXBtZW50IENvcnAuIFBEUC0xMCAqLworI2RlZmluZSBFTV9QRFAxMQk2NQkvKiBEaWdpdGFsIEVxdWlwbWVudCBDb3JwLiBQRFAtMTEgKi8KKyNkZWZpbmUgRU1fRlg2NgkJNjYJLyogU2llbWVucyBGWDY2IG1pY3JvY29udHJvbGxlciAqLworI2RlZmluZSBFTV9TVDlQTFVTCTY3CS8qIFNUTWljcm9lbGVjdHJvbmljcyBTVDkrIDgvMTYgYml0IG1pY3JvY29udHJvbGxlciAqLworI2RlZmluZSBFTV9TVDcJCTY4CS8qIFNUTWljcm9lbGVjdHJvbmljcyBTVDcgOC1iaXQgbWljcm9jb250cm9sbGVyICovCisjZGVmaW5lIEVNXzY4SEMxNgk2OQkvKiBNb3Rvcm9sYSBNQzY4SEMxNiBNaWNyb2NvbnRyb2xsZXIgKi8KKyNkZWZpbmUgRU1fNjhIQzExCTcwCS8qIE1vdG9yb2xhIE1DNjhIQzExIE1pY3JvY29udHJvbGxlciAqLworI2RlZmluZSBFTV82OEhDMDgJNzEJLyogTW90b3JvbGEgTUM2OEhDMDggTWljcm9jb250cm9sbGVyICovCisjZGVmaW5lIEVNXzY4SEMwNQk3MgkvKiBNb3Rvcm9sYSBNQzY4SEMwNSBNaWNyb2NvbnRyb2xsZXIgKi8KKyNkZWZpbmUgRU1fU1ZYCQk3MwkvKiBTaWxpY29uIEdyYXBoaWNzIFNWeCAqLworI2RlZmluZSBFTV9TVDE5CQk3NAkvKiBTVE1pY3JvZWxlY3Ryb25pY3MgU1QxOSA4LWJpdCBDUFUgKi8KKyNkZWZpbmUgRU1fVkFYCQk3NQkvKiBEaWdpdGFsIFZBWCAqLworI2RlZmluZSBFTV9DUklTCQk3NgkvKiBBeGlzIENvbW11bmljYXRpb25zIDMyLWJpdCBlbWJlZGRlZCBwcm9jZXNzb3IgKi8KKyNkZWZpbmUgRU1fSkFWRUxJTgk3NwkvKiBJbmZpbmVvbiBUZWNobm9sb2dpZXMgMzItYml0IGVtYmVkZGVkIENQVSAqLworI2RlZmluZSBFTV9GSVJFUEFUSAk3OAkvKiBFbGVtZW50IDE0IDY0LWJpdCBEU1AgcHJvY2Vzc29yICovCisjZGVmaW5lIEVNX1pTUAkJNzkJLyogTFNJIExvZ2ljJ3MgMTYtYml0IERTUCBwcm9jZXNzb3IgKi8KKyNkZWZpbmUgRU1fTU1JWAkJODAJLyogRG9uYWxkIEtudXRoJ3MgZWR1Y2F0aW9uYWwgNjQtYml0IHByb2Nlc3NvciAqLworI2RlZmluZSBFTV9IVUFOWQk4MQkvKiBIYXJ2YXJkJ3MgbWFjaGluZS1pbmRlcGVuZGVudCBmb3JtYXQgKi8KKyNkZWZpbmUgRU1fUFJJU00JODIJLyogU2lUZXJhIFByaXNtICovCisjZGVmaW5lIEVNX0FWUgkJODMJLyogQXRtZWwgQVZSIDgtYml0IG1pY3JvY29udHJvbGxlciAqLworI2RlZmluZSBFTV9GUjMwCQk4NAkvKiBGdWppdHN1IEZSMzAgKi8KKyNkZWZpbmUgRU1fRDEwVgkJODUJLyogTWl0c3ViaXNoaSBEMTBWICovCisjZGVmaW5lIEVNX0QzMFYJCTg2CS8qIE1pdHN1YmlzaGkgRDMwViAqLworI2RlZmluZSBFTV9WODUwCQk4NwkvKiBORUMgdjg1MCAqLworI2RlZmluZSBFTV9NMzJSCQk4OAkvKiBNaXRzdWJpc2hpIE0zMlIgKi8KKyNkZWZpbmUgRU1fTU4xMDMwMAk4OQkvKiBNYXRzdXNoaXRhIE1OMTAzMDAgKi8KKyNkZWZpbmUgRU1fTU4xMDIwMAk5MAkvKiBNYXRzdXNoaXRhIE1OMTAyMDAgKi8KKyNkZWZpbmUgRU1fUEoJCTkxCS8qIHBpY29KYXZhICovCisjZGVmaW5lIEVNX09QRU5SSVNDCTkyCS8qIE9wZW5SSVNDIDMyLWJpdCBlbWJlZGRlZCBwcm9jZXNzb3IgKi8KKyNkZWZpbmUgRU1fQVJDX0E1CTkzCS8qIEFSQyBDb3JlcyBUYW5nZW50LUE1ICovCisjZGVmaW5lIEVNX1hURU5TQQk5NAkvKiBUZW5zaWxpY2EgWHRlbnNhIEFyY2hpdGVjdHVyZSAqLworI2RlZmluZSBFTV9WSURFT0NPUkUJOTUJLyogQWxwaGFtb3NhaWMgVmlkZW9Db3JlIHByb2Nlc3NvciAqLworI2RlZmluZSBFTV9UTU1fR1BQCTk2CS8qIFRob21wc29uIE11bHRpbWVkaWEgR2VuZXJhbCBQdXJwb3NlIFByb2Nlc3NvciAqLworI2RlZmluZSBFTV9OUzMySwk5NwkvKiBOYXRpb25hbCBTZW1pY29uZHVjdG9yIDMyMDAwIHNlcmllcyAqLworI2RlZmluZSBFTV9UUEMJCTk4CS8qIFRlbm9yIE5ldHdvcmsgVFBDIHByb2Nlc3NvciAqLworI2RlZmluZSBFTV9TTlAxSwk5OQkvKiBUcmViaWEgU05QIDEwMDAgcHJvY2Vzc29yICovCisjZGVmaW5lIEVNX1NUMjAwCTEwMAkvKiBTVE1pY3JvZWxlY3Ryb25pY3MgU1QyMDAgbWljcm9jb250cm9sbGVyICovCisjZGVmaW5lIEVNX0lQMksJCTEwMQkvKiBVYmljb20gSVAyeHh4IG1pY3JvY29udHJvbGxlciBmYW1pbHkgKi8KKyNkZWZpbmUgRU1fTUFYCQkxMDIJLyogTUFYIHByb2Nlc3NvciAqLworI2RlZmluZSBFTV9DUgkJMTAzCS8qIE5hdGlvbmFsIFNlbWljb25kdWN0b3IgQ29tcGFjdFJJU0MgbWljb3Jwcm9jZXNzb3IgKi8KKyNkZWZpbmUgRU1fRjJNQzE2CTEwNAkvKiBGdWppdHN1IEYyTUMxNiAqLworI2RlZmluZSBFTV9NU1A0MzAJMTA1CS8qIFRleGFzIEluc3RydW1lbnRzIE1TUDQzMCAqLworI2RlZmluZSBFTV9CTEFDS0ZJTgkxMDYJLyogQW5hbG9nIERldmljZXMgQmxhY2tmaW4gRFNQICovCisjZGVmaW5lIEVNX1NFX0MzMwkxMDcJLyogU2Vpa28gRXBzb24gUzFDMzMgZmFtaWx5ICovCisjZGVmaW5lIEVNX1NFUAkJMTA4CS8qIFNoYXJwIGVtYmVkZGVkIG1pY3JvcHJvY2Vzc29yICovCisjZGVmaW5lIEVNX0FSQ0EJCTEwOQkvKiBBcmNhIFJJU0MgbWljcm9wcm9jZXNzb3IgKi8KKyNkZWZpbmUgRU1fVU5JQ09SRQkxMTAJLyogVU5JQ09SRSBmcm9tIFBLVS1Vbml0eSBMdGQuIGFuZCBNUFJDIFBla2luZyBVbml2ZXJzaXR5ICovCisKKy8qIFVub2ZmaWNpYWwgbWFjaGluZSB0eXBlcyBmb2xsb3cgKi8KKyNkZWZpbmUgRU1fQVZSMzIJNjMxNwkvKiB1c2VkIGJ5IE5ldEJTRC9hdnIzMiAqLworI2RlZmluZSBFTV9BTFBIQV9FWFAJMzY5MDIJLyogdXNlZCBieSBOZXRCU0QvYWxwaGE7IG9ic29sZXRlICovCisjZGVmaW5lIEVNX05VTQkJMzY5MDMKKworLyoKKyAqIFByb2dyYW0gSGVhZGVyCiAgKi8KLSNkZWZpbmUgRU1fTUlQU19SUzRfQkUJMTAJCS8qIE1JUFMgUjQwMDAgQmlnLUVuZGlhbiAqLwotI2RlZmluZSBFTV9TUEFSQzY0CTExCQkvKiBTUEFSQyB2OSA2NC1iaXQgdW5vZmZpY2FsICovCi0jZGVmaW5lIEVNX1BBUklTQwkxNQkJLyogSFBQQSAqLwotI2RlZmluZSBFTV9TUEFSQzMyUExVUwkxOAkJLyogRW5oYW5jZWQgaW5zdHJ1Y3Rpb24gc2V0IFNQQVJDICovCi0jZGVmaW5lIEVNX1BQQwkJMjAJCS8qIFBvd2VyUEMgKi8KLSNkZWZpbmUgRU1fQVJNCQk0MAkJLyogQWR2YW5jZWQgUklTQyBNYWNoaW5lcyBBUk0gKi8KLSNkZWZpbmUgRU1fQUxQSEEJNDEJCS8qIERFQyBBTFBIQSAqLwotI2RlZmluZSBFTV9TUEFSQ1Y5CTQzCQkvKiBTUEFSQyB2ZXJzaW9uIDkgKi8KLSNkZWZpbmUgRU1fQUxQSEFfRVhQCTB4OTAyNgkJLyogREVDIEFMUEhBICovCi0jZGVmaW5lIEVNX0FNRDY0CTYyCQkvKiBBTUQ2NCBhcmNoaXRlY3R1cmUgKi8KLSNkZWZpbmUgRU1fVkFYCQk3NQkJLyogREVDIFZBWCAqLwotI2RlZmluZSBFTV9OVU0JCTE1CQkvKiBudW1iZXIgb2YgbWFjaGluZSB0eXBlcyAqLwordHlwZWRlZiBzdHJ1Y3QgeworCUVsZjMyX1dvcmQJcF90eXBlOwkJLyogZW50cnkgdHlwZSAqLworCUVsZjMyX09mZglwX29mZnNldDsJLyogb2Zmc2V0ICovCisJRWxmMzJfQWRkcglwX3ZhZGRyOwkvKiB2aXJ0dWFsIGFkZHJlc3MgKi8KKwlFbGYzMl9BZGRyCXBfcGFkZHI7CS8qIHBoeXNpY2FsIGFkZHJlc3MgKi8KKwlFbGYzMl9Xb3JkCXBfZmlsZXN6OwkvKiBmaWxlIHNpemUgKi8KKwlFbGYzMl9Xb3JkCXBfbWVtc3o7CS8qIG1lbW9yeSBzaXplICovCisJRWxmMzJfV29yZAlwX2ZsYWdzOwkvKiBmbGFncyAqLworCUVsZjMyX1dvcmQJcF9hbGlnbjsJLyogbWVtb3J5ICYgZmlsZSBhbGlnbm1lbnQgKi8KK30gRWxmMzJfUGhkcjsKIAordHlwZWRlZiBzdHJ1Y3QgeworCUVsZjY0X1dvcmQJcF90eXBlOwkJLyogZW50cnkgdHlwZSAqLworCUVsZjY0X1dvcmQJcF9mbGFnczsJLyogZmxhZ3MgKi8KKwlFbGY2NF9PZmYJcF9vZmZzZXQ7CS8qIG9mZnNldCAqLworCUVsZjY0X0FkZHIJcF92YWRkcjsJLyogdmlydHVhbCBhZGRyZXNzICovCisJRWxmNjRfQWRkcglwX3BhZGRyOwkvKiBwaHlzaWNhbCBhZGRyZXNzICovCisJRWxmNjRfWHdvcmQJcF9maWxlc3o7CS8qIGZpbGUgc2l6ZSAqLworCUVsZjY0X1h3b3JkCXBfbWVtc3o7CS8qIG1lbW9yeSBzaXplICovCisJRWxmNjRfWHdvcmQJcF9hbGlnbjsJLyogbWVtb3J5ICYgZmlsZSBhbGlnbm1lbnQgKi8KK30gRWxmNjRfUGhkcjsKIAotLyogU2VjdGlvbiBuYW1lcyAqLwotI2RlZmluZSBFTEZfQlNTICAgICAgICAgIi5ic3MiCQkvKiB1bmluaXRpYWxpemVkIGRhdGEgKi8KLSNkZWZpbmUgRUxGX0RBVEEgICAgICAgICIuZGF0YSIJCS8qIGluaXRpYWxpemVkIGRhdGEgKi8KLSNkZWZpbmUgRUxGX0RFQlVHICAgICAgICIuZGVidWciCS8qIGRlYnVnICovCi0jZGVmaW5lIEVMRl9EWU5BTUlDICAgICAiLmR5bmFtaWMiCS8qIGR5bmFtaWMgbGlua2luZyBpbmZvcm1hdGlvbiAqLwotI2RlZmluZSBFTEZfRFlOU1RSICAgICAgIi5keW5zdHIiCS8qIGR5bmFtaWMgc3RyaW5nIHRhYmxlICovCi0jZGVmaW5lIEVMRl9EWU5TWU0gICAgICAiLmR5bnN5bSIJLyogZHluYW1pYyBzeW1ib2wgdGFibGUgKi8KLSNkZWZpbmUgRUxGX0ZJTkkgICAgICAgICIuZmluaSIJCS8qIHRlcm1pbmF0aW9uIGNvZGUgKi8KLSNkZWZpbmUgRUxGX0dPVCAgICAgICAgICIuZ290IgkJLyogZ2xvYmFsIG9mZnNldCB0YWJsZSAqLwotI2RlZmluZSBFTEZfSEFTSCAgICAgICAgIi5oYXNoIgkJLyogc3ltYm9sIGhhc2ggdGFibGUgKi8KLSNkZWZpbmUgRUxGX0lOSVQgICAgICAgICIuaW5pdCIJCS8qIGluaXRpYWxpemF0aW9uIGNvZGUgKi8KLSNkZWZpbmUgRUxGX1JFTF9EQVRBICAgICIucmVsLmRhdGEiCS8qIHJlbG9jYXRpb24gZGF0YSAqLwotI2RlZmluZSBFTEZfUkVMX0ZJTkkgICAgIi5yZWwuZmluaSIJLyogcmVsb2NhdGlvbiB0ZXJtaW5hdGlvbiBjb2RlICovCi0jZGVmaW5lIEVMRl9SRUxfSU5JVCAgICAiLnJlbC5pbml0IgkvKiByZWxvY2F0aW9uIGluaXRpYWxpemF0aW9uIGNvZGUgKi8KLSNkZWZpbmUgRUxGX1JFTF9EWU4gICAgICIucmVsLmR5biIJLyogcmVsb2NhbHRpb24gZHluYW1pYyBsaW5rIGluZm8gKi8KLSNkZWZpbmUgRUxGX1JFTF9ST0RBVEEgICIucmVsLnJvZGF0YSIJLyogcmVsb2NhdGlvbiByZWFkLW9ubHkgZGF0YSAqLwotI2RlZmluZSBFTEZfUkVMX1RFWFQgICAgIi5yZWwudGV4dCIJLyogcmVsb2NhdGlvbiBjb2RlICovCi0jZGVmaW5lIEVMRl9ST0RBVEEgICAgICAiLnJvZGF0YSIJLyogcmVhZC1vbmx5IGRhdGEgKi8KLSNkZWZpbmUgRUxGX1NIU1RSVEFCICAgICIuc2hzdHJ0YWIiCS8qIHNlY3Rpb24gaGVhZGVyIHN0cmluZyB0YWJsZSAqLwotI2RlZmluZSBFTEZfU1RSVEFCICAgICAgIi5zdHJ0YWIiCS8qIHN0cmluZyB0YWJsZSAqLwotI2RlZmluZSBFTEZfU1lNVEFCICAgICAgIi5zeW10YWIiCS8qIHN5bWJvbCB0YWJsZSAqLwotI2RlZmluZSBFTEZfVEVYVCAgICAgICAgIi50ZXh0IgkJLyogY29kZSAqLworLyogcF90eXBlICovCisjZGVmaW5lIFBUX05VTEwJCTAJCS8qIFByb2dyYW0gaGVhZGVyIHRhYmxlIGVudHJ5IHVudXNlZCAqLworI2RlZmluZSBQVF9MT0FECQkxCQkvKiBMb2FkYWJsZSBwcm9ncmFtIHNlZ21lbnQgKi8KKyNkZWZpbmUgUFRfRFlOQU1JQwkyCQkvKiBEeW5hbWljIGxpbmtpbmcgaW5mb3JtYXRpb24gKi8KKyNkZWZpbmUgUFRfSU5URVJQCTMJCS8qIFByb2dyYW0gaW50ZXJwcmV0ZXIgKi8KKyNkZWZpbmUgUFRfTk9URQkJNAkJLyogQXV4aWxpYXJ5IGluZm9ybWF0aW9uICovCisjZGVmaW5lIFBUX1NITElCCTUJCS8qIFJlc2VydmVkLCB1bnNwZWNpZmllZCBzZW1hbnRpY3MgKi8KKyNkZWZpbmUgUFRfUEhEUgkJNgkJLyogRW50cnkgZm9yIGhlYWRlciB0YWJsZSBpdHNlbGYgKi8KKyNkZWZpbmUgUFRfVExTCQk3CQkvKiBUTFMgaW5pdGlhbGlzYXRpb24gaW1hZ2UgKi8KKyNkZWZpbmUgUFRfTlVNCQk4CiAKLS8qIFN5bWJvbCBCaW5kaW5nIC0gRUxGMzJfU1RfQklORCAtIHN0X2luZm8gKi8KLSNkZWZpbmUgU1RCX0xPQ0FMCTAJCS8qIExvY2FsIHN5bWJvbCAqLwotI2RlZmluZSBTVEJfR0xPQkFMCTEJCS8qIEdsb2JhbCBzeW1ib2wgKi8KLSNkZWZpbmUgU1RCX1dFQUsJMgkJLyogbGlrZSBnbG9iYWwgLSBsb3dlciBwcmVjZWRlbmNlICovCi0jZGVmaW5lIFNUQl9OVU0JCTMJCS8qIG51bWJlciBvZiBzeW1ib2wgYmluZGluZ3MgKi8KLSNkZWZpbmUgU1RCX0xPUFJPQwkxMwkJLyogcmVzZXJ2ZWQgcmFuZ2UgZm9yIHByb2Nlc3NvciAqLwotI2RlZmluZSBTVEJfSElQUk9DCTE1CQkvKiAgc3BlY2lmaWMgc3ltYm9sIGJpbmRpbmdzICovCisjZGVmaW5lIFBUX0xPT1MJCTB4NjAwMDAwMDAJLyogT1Mtc3BlY2lmaWMgcmFuZ2UgKi8KIAotLyogU3ltYm9sIHR5cGUgLSBFTEYzMl9TVF9UWVBFIC0gc3RfaW5mbyAqLwotI2RlZmluZSBTVFRfTk9UWVBFCTAJCS8qIG5vdCBzcGVjaWZpZWQgKi8KLSNkZWZpbmUgU1RUX09CSkVDVAkxCQkvKiBkYXRhIG9iamVjdCAqLwotI2RlZmluZSBTVFRfRlVOQwkyCQkvKiBmdW5jdGlvbiAqLwotI2RlZmluZSBTVFRfU0VDVElPTgkzCQkvKiBzZWN0aW9uICovCi0jZGVmaW5lIFNUVF9GSUxFCTQJCS8qIGZpbGUgKi8KLSNkZWZpbmUgU1RUX05VTQkJNQkJLyogbnVtYmVyIG9mIHN5bWJvbCB0eXBlcyAqLwotI2RlZmluZSBTVFRfTE9QUk9DCTEzCQkvKiByZXNlcnZlZCByYW5nZSBmb3IgcHJvY2Vzc29yICovCi0jZGVmaW5lIFNUVF9ISVBST0MJMTUJCS8qICBzcGVjaWZpYyBzeW1ib2wgdHlwZXMgKi8KKy8qIEdOVS1zcGVjaWZpYyAqLworI2RlZmluZSBQVF9HTlVfRUhfRlJBTUUgMHg2NDc0ZTU1MAkvKiBFSCBmcmFtZSBzZWdtZW50ICovCisjZGVmaW5lIFBUX0dOVV9TVEFDSwkweDY0NzRlNTUxCS8qIEluZGljYXRlIGV4ZWN1dGFibGUgc3RhY2sgKi8KKyNkZWZpbmUgUFRfR05VX1JFTFJPCTB4NjQ3NGU1NTIJLyogTWFrZSByZWFkLW9ubHkgYWZ0ZXIgcmVsb2NhdGlvbiAqLwogCi0jZW5kaWYgLyogX1NZU19FWEVDX0VMRl9IXyAqLworI2RlZmluZSBQVF9ISU9TCQkweDZmZmZmZmZmCisjZGVmaW5lIFBUX0xPUFJPQwkweDcwMDAwMDAwCS8qIFByb2Nlc3Nvci1zcGVjaWZpYyByYW5nZSAqLworI2RlZmluZSBQVF9ISVBST0MJMHg3ZmZmZmZmZgorCisjZGVmaW5lIFBUX01JUFNfUkVHSU5GTyAweDcwMDAwMDAwCisKKy8qIHBfZmxhZ3MgKi8KKyNkZWZpbmUgUEZfUgkJMHg0CQkvKiBTZWdtZW50IGlzIHJlYWRhYmxlICovCisjZGVmaW5lIFBGX1cJCTB4MgkJLyogU2VnbWVudCBpcyB3cml0YWJsZSAqLworI2RlZmluZSBQRl9YCQkweDEJCS8qIFNlZ21lbnQgaXMgZXhlY3V0YWJsZSAqLworCisjZGVmaW5lIFBGX01BU0tPUwkweDBmZjAwMDAwCS8qIE9wZXJhdGluZyBzeXN0ZW0gc3BlY2lmaWMgdmFsdWVzICovCisjZGVmaW5lIFBGX01BU0tQUk9DCTB4ZjAwMDAwMDAJLyogUHJvY2Vzc29yLXNwZWNpZmljIHZhbHVlcyAqLworCisvKiBFeHRlbmRlZCBwcm9ncmFtIGhlYWRlciBpbmRleC4gKi8KKyNkZWZpbmUgUE5fWE5VTQkJMHhmZmZmCisKKy8qCisgKiBTZWN0aW9uIEhlYWRlcnMKKyAqLwordHlwZWRlZiBzdHJ1Y3QgeworCUVsZjMyX1dvcmQJc2hfbmFtZTsJLyogc2VjdGlvbiBuYW1lICguc2hzdHJ0YWIgaW5kZXgpICovCisJRWxmMzJfV29yZAlzaF90eXBlOwkvKiBzZWN0aW9uIHR5cGUgKi8KKwlFbGYzMl9Xb3JkCXNoX2ZsYWdzOwkvKiBzZWN0aW9uIGZsYWdzICovCisJRWxmMzJfQWRkcglzaF9hZGRyOwkvKiB2aXJ0dWFsIGFkZHJlc3MgKi8KKwlFbGYzMl9PZmYJc2hfb2Zmc2V0OwkvKiBmaWxlIG9mZnNldCAqLworCUVsZjMyX1dvcmQJc2hfc2l6ZTsJLyogc2VjdGlvbiBzaXplICovCisJRWxmMzJfV29yZAlzaF9saW5rOwkvKiBsaW5rIHRvIGFub3RoZXIgKi8KKwlFbGYzMl9Xb3JkCXNoX2luZm87CS8qIG1pc2MgaW5mbyAqLworCUVsZjMyX1dvcmQJc2hfYWRkcmFsaWduOwkvKiBtZW1vcnkgYWxpZ25tZW50ICovCisJRWxmMzJfV29yZAlzaF9lbnRzaXplOwkvKiB0YWJsZSBlbnRyeSBzaXplICovCit9IEVsZjMyX1NoZHI7CisKK3R5cGVkZWYgc3RydWN0IHsKKwlFbGY2NF9Xb3JkCXNoX25hbWU7CS8qIHNlY3Rpb24gbmFtZSAoLnNoc3RydGFiIGluZGV4KSAqLworCUVsZjY0X1dvcmQJc2hfdHlwZTsJLyogc2VjdGlvbiB0eXBlICovCisJRWxmNjRfWHdvcmQJc2hfZmxhZ3M7CS8qIHNlY3Rpb24gZmxhZ3MgKi8KKwlFbGY2NF9BZGRyCXNoX2FkZHI7CS8qIHZpcnR1YWwgYWRkcmVzcyAqLworCUVsZjY0X09mZglzaF9vZmZzZXQ7CS8qIGZpbGUgb2Zmc2V0ICovCisJRWxmNjRfWHdvcmQJc2hfc2l6ZTsJLyogc2VjdGlvbiBzaXplICovCisJRWxmNjRfV29yZAlzaF9saW5rOwkvKiBsaW5rIHRvIGFub3RoZXIgKi8KKwlFbGY2NF9Xb3JkCXNoX2luZm87CS8qIG1pc2MgaW5mbyAqLworCUVsZjY0X1h3b3JkCXNoX2FkZHJhbGlnbjsJLyogbWVtb3J5IGFsaWdubWVudCAqLworCUVsZjY0X1h3b3JkCXNoX2VudHNpemU7CS8qIHRhYmxlIGVudHJ5IHNpemUgKi8KK30gRWxmNjRfU2hkcjsKKworLyogc2hfdHlwZSAqLworI2RlZmluZSBTSFRfTlVMTAkgICAgICAwCQkvKiBTZWN0aW9uIGhlYWRlciB0YWJsZSBlbnRyeSB1bnVzZWQgKi8KKyNkZWZpbmUgU0hUX1BST0dCSVRTCSAgICAgIDEJCS8qIFByb2dyYW0gaW5mb3JtYXRpb24gKi8KKyNkZWZpbmUgU0hUX1NZTVRBQgkgICAgICAyCQkvKiBTeW1ib2wgdGFibGUgKi8KKyNkZWZpbmUgU0hUX1NUUlRBQgkgICAgICAzCQkvKiBTdHJpbmcgdGFibGUgKi8KKyNkZWZpbmUgU0hUX1JFTEEJICAgICAgNAkJLyogUmVsb2NhdGlvbiBpbmZvcm1hdGlvbiB3LyBhZGRlbmQgKi8KKyNkZWZpbmUgU0hUX0hBU0gJICAgICAgNQkJLyogU3ltYm9sIGhhc2ggdGFibGUgKi8KKyNkZWZpbmUgU0hUX0RZTkFNSUMJICAgICAgNgkJLyogRHluYW1pYyBsaW5raW5nIGluZm9ybWF0aW9uICovCisjZGVmaW5lIFNIVF9OT1RFCSAgICAgIDcJCS8qIEF1eGlsaWFyeSBpbmZvcm1hdGlvbiAqLworI2RlZmluZSBTSFRfTk9CSVRTCSAgICAgIDgJCS8qIE5vIHNwYWNlIGFsbG9jYXRlZCBpbiBmaWxlIGltYWdlICovCisjZGVmaW5lIFNIVF9SRUwJCSAgICAgIDkJCS8qIFJlbG9jYXRpb24gaW5mb3JtYXRpb24gdy9vIGFkZGVuZCAqLworI2RlZmluZSBTSFRfU0hMSUIJICAgICAxMAkJLyogUmVzZXJ2ZWQsIHVuc3BlY2lmaWVkIHNlbWFudGljcyAqLworI2RlZmluZSBTSFRfRFlOU1lNCSAgICAgMTEJCS8qIFN5bWJvbCB0YWJsZSBmb3IgZHluYW1pYyBsaW5rZXIgKi8KKyNkZWZpbmUgU0hUX0lOSVRfQVJSQVkJICAgICAxNAkJLyogSW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gcG9pbnRlcnMgKi8KKyNkZWZpbmUgU0hUX0ZJTklfQVJSQVkJICAgICAxNQkJLyogVGVybWluYXRpb24gZnVuY3Rpb24gcG9pbnRlcnMgKi8KKyNkZWZpbmUgU0hUX1BSRUlOSVRfQVJSQVkgICAgMTYJCS8qIFByZS1pbml0aWFsaXphdGlvbiBmdW5jdGlvbiBwdHJzICovCisjZGVmaW5lIFNIVF9HUk9VUAkgICAgIDE3CQkvKiBTZWN0aW9uIGdyb3VwICovCisjZGVmaW5lIFNIVF9TWU1UQUJfU0hORFggICAgIDE4CQkvKiBTZWN0aW9uIGluZGV4ZXMgKHNlZSBTSE5fWElOREVYKSAqLworI2RlZmluZSBTSFRfTlVNCQkgICAgIDE5CisKKyNkZWZpbmUgU0hUX0xPT1MJICAgICAweDYwMDAwMDAwIC8qIE9wZXJhdGluZyBzeXN0ZW0gc3BlY2lmaWMgcmFuZ2UgKi8KKyNkZWZpbmUgU0hUX0dOVV9IQVNICSAgICAgMHg2ZmZmZmZmNiAvKiBHTlUgc3R5bGUgc3ltYm9sIGhhc2ggdGFibGUgKi8KKyNkZWZpbmUgU0hUX1NVTldfbW92ZQkgICAgIDB4NmZmZmZmZmEKKyNkZWZpbmUgU0hUX1NVTldfc3ltaW5mbyAgICAgMHg2ZmZmZmZmYworI2RlZmluZSBTSFRfU1VOV192ZXJkZWYJICAgICAweDZmZmZmZmZkIC8qIFZlcnNpb25zIGRlZmluZWQgYnkgZmlsZSAqLworI2RlZmluZSBTSFRfR05VX3ZlcmRlZgkgICAgIFNIVF9TVU5XX3ZlcmRlZgorI2RlZmluZSBTSFRfU1VOV192ZXJuZWVkICAgICAweDZmZmZmZmZlIC8qIFZlcnNpb25zIG5lZWRlZCBieSBmaWxlICovCisjZGVmaW5lIFNIVF9HTlVfdmVybmVlZAkgICAgIFNIVF9TVU5XX3Zlcm5lZWQKKyNkZWZpbmUgU0hUX1NVTldfdmVyc3ltCSAgICAgMHg2ZmZmZmZmZiAvKiBTeW1ib2wgdmVyc2lvbnMgKi8KKyNkZWZpbmUgU0hUX0dOVV92ZXJzeW0JICAgICBTSFRfU1VOV192ZXJzeW0KKyNkZWZpbmUgU0hUX0hJT1MJICAgICAweDZmZmZmZmZmCisjZGVmaW5lIFNIVF9MT1BST0MJICAgICAweDcwMDAwMDAwIC8qIFByb2Nlc3Nvci1zcGVjaWZpYyByYW5nZSAqLworI2RlZmluZSBTSFRfQU1ENjRfVU5XSU5EICAgICAweDcwMDAwMDAxIC8qIHVud2luZCBpbmZvcm1hdGlvbiAqLworI2RlZmluZSBTSFRfSElQUk9DCSAgICAgMHg3ZmZmZmZmZgorI2RlZmluZSBTSFRfTE9VU0VSCSAgICAgMHg4MDAwMDAwMCAvKiBBcHBsaWNhdGlvbi1zcGVjaWZpYyByYW5nZSAqLworI2RlZmluZSBTSFRfSElVU0VSCSAgICAgMHhmZmZmZmZmZgorCisvKiBzaF9mbGFncyAqLworI2RlZmluZSBTSEZfV1JJVEUJICAgICAweDAwMDAwMDAxIC8qIENvbnRhaW5zIHdyaXRhYmxlIGRhdGEgKi8KKyNkZWZpbmUgU0hGX0FMTE9DCSAgICAgMHgwMDAwMDAwMiAvKiBPY2N1cGllcyBtZW1vcnkgKi8KKyNkZWZpbmUgU0hGX0VYRUNJTlNUUgkgICAgIDB4MDAwMDAwMDQgLyogQ29udGFpbnMgZXhlY3V0YWJsZSBpbnNucyAqLworI2RlZmluZSBTSEZfTUVSR0UJICAgICAweDAwMDAwMDEwIC8qIE1pZ2h0IGJlIG1lcmdlZCAqLworI2RlZmluZSBTSEZfU1RSSU5HUwkgICAgIDB4MDAwMDAwMjAgLyogQ29udGFpbnMgbnVsIHRlcm1pbmF0ZWQgc3RyaW5ncyAqLworI2RlZmluZSBTSEZfSU5GT19MSU5LCSAgICAgMHgwMDAwMDA0MCAvKiAic2hfaW5mbyIgY29udGFpbnMgU0hUIGluZGV4ICovCisjZGVmaW5lIFNIRl9MSU5LX09SREVSCSAgICAgMHgwMDAwMDA4MCAvKiBQcmVzZXJ2ZSBvcmRlciBhZnRlciBjb21iaW5pbmcgKi8KKyNkZWZpbmUgU0hGX09TX05PTkNPTkZPUk1JTkcgMHgwMDAwMDEwMCAvKiBPUyBzcGVjaWZpYyBoYW5kbGluZyByZXF1aXJlZCAqLworI2RlZmluZSBTSEZfR1JPVVAJICAgICAweDAwMDAwMjAwIC8qIElzIG1lbWJlciBvZiBhIGdyb3VwICovCisjZGVmaW5lIFNIRl9UTFMJCSAgICAgMHgwMDAwMDQwMCAvKiBIb2xkcyB0aHJlYWQtbG9jYWwgZGF0YSAqLworI2RlZmluZSBTSEZfTUFTS09TCSAgICAgMHgwZmYwMDAwMCAvKiBPcGVyYXRpbmcgc3lzdGVtIHNwZWNpZmljIHZhbHVlcyAqLworI2RlZmluZSBTSEZfTUFTS1BST0MJICAgICAweGYwMDAwMDAwIC8qIFByb2Nlc3Nvci1zcGVjaWZpYyB2YWx1ZXMgKi8KKyNkZWZpbmUgU0hGX09SREVSRUQJICAgICAweDQwMDAwMDAwIC8qIE9yZGVyaW5nIHJlcXVpcmVtZW50IChTb2xhcmlzKSAqLworI2RlZmluZSBTSEZfRVhDTFVERQkgICAgIDB4ODAwMDAwMDAgLyogRXhjbHVkZWQgdW5sZXNzIHVubGVzIHJlZi9hbGxvYworCQkJCQkgICAoU29sYXJpcykuKi8KKy8qCisgKiBTeW1ib2wgVGFibGUKKyAqLwordHlwZWRlZiBzdHJ1Y3QgeworCUVsZjMyX1dvcmQJc3RfbmFtZTsJLyogU3ltYm9sIG5hbWUgKC5zdHJ0YWIgaW5kZXgpICovCisJRWxmMzJfV29yZAlzdF92YWx1ZTsJLyogdmFsdWUgb2Ygc3ltYm9sICovCisJRWxmMzJfV29yZAlzdF9zaXplOwkvKiBzaXplIG9mIHN5bWJvbCAqLworCUVsZl9CeXRlCXN0X2luZm87CS8qIHR5cGUgLyBiaW5kaW5nIGF0dHJzICovCisJRWxmX0J5dGUJc3Rfb3RoZXI7CS8qIHVudXNlZCAqLworCUVsZjMyX0hhbGYJc3Rfc2huZHg7CS8qIHNlY3Rpb24gaW5kZXggb2Ygc3ltYm9sICovCit9IEVsZjMyX1N5bTsKKwordHlwZWRlZiBzdHJ1Y3QgeworCUVsZjY0X1dvcmQJc3RfbmFtZTsJLyogU3ltYm9sIG5hbWUgKC5zdHJ0YWIgaW5kZXgpICovCisJRWxmX0J5dGUJc3RfaW5mbzsJLyogdHlwZSAvIGJpbmRpbmcgYXR0cnMgKi8KKwlFbGZfQnl0ZQlzdF9vdGhlcjsJLyogdW51c2VkICovCisJRWxmNjRfSGFsZglzdF9zaG5keDsJLyogc2VjdGlvbiBpbmRleCBvZiBzeW1ib2wgKi8KKwlFbGY2NF9BZGRyCXN0X3ZhbHVlOwkvKiB2YWx1ZSBvZiBzeW1ib2wgKi8KKwlFbGY2NF9Yd29yZAlzdF9zaXplOwkvKiBzaXplIG9mIHN5bWJvbCAqLworfSBFbGY2NF9TeW07CisKKy8qIFN5bWJvbCBUYWJsZSBpbmRleCBvZiB0aGUgdW5kZWZpbmVkIHN5bWJvbCAqLworI2RlZmluZSBFTEZfU1lNX1VOREVGSU5FRAkwCisKKyNkZWZpbmUgU1ROX1VOREVGCQkwCS8qIHVuZGVmaW5lZCBpbmRleCAqLworCisvKiBzdF9pbmZvOiBTeW1ib2wgQmluZGluZ3MgKi8KKyNkZWZpbmUgU1RCX0xPQ0FMCQkwCS8qIGxvY2FsIHN5bWJvbCAqLworI2RlZmluZSBTVEJfR0xPQkFMCQkxCS8qIGdsb2JhbCBzeW1ib2wgKi8KKyNkZWZpbmUgU1RCX1dFQUsJCTIJLyogd2Vha2x5IGRlZmluZWQgZ2xvYmFsIHN5bWJvbCAqLworI2RlZmluZSBTVEJfTlVNCQkJMworCisjZGVmaW5lIFNUQl9MT09TCQkxMAkvKiBPcGVyYXRpbmcgc3lzdGVtIHNwZWNpZmljIHJhbmdlICovCisjZGVmaW5lIFNUQl9ISU9TCQkxMgorI2RlZmluZSBTVEJfTE9QUk9DCQkxMwkvKiBQcm9jZXNzb3Itc3BlY2lmaWMgcmFuZ2UgKi8KKyNkZWZpbmUgU1RCX0hJUFJPQwkJMTUKKworLyogc3RfaW5mbzogU3ltYm9sIFR5cGVzICovCisjZGVmaW5lIFNUVF9OT1RZUEUJCTAJLyogVHlwZSBub3Qgc3BlY2lmaWVkICovCisjZGVmaW5lIFNUVF9PQkpFQ1QJCTEJLyogQXNzb2NpYXRlZCB3aXRoIGEgZGF0YSBvYmplY3QgKi8KKyNkZWZpbmUgU1RUX0ZVTkMJCTIJLyogQXNzb2NpYXRlZCB3aXRoIGEgZnVuY3Rpb24gKi8KKyNkZWZpbmUgU1RUX1NFQ1RJT04JCTMJLyogQXNzb2NpYXRlZCB3aXRoIGEgc2VjdGlvbiAqLworI2RlZmluZSBTVFRfRklMRQkJNAkvKiBBc3NvY2lhdGVkIHdpdGggYSBmaWxlIG5hbWUgKi8KKyNkZWZpbmUgU1RUX0NPTU1PTgkJNQkvKiBVbmluaXRpYWxpc2VkIGNvbW1vbiBibG9jayAqLworI2RlZmluZSBTVFRfVExTCQkJNgkvKiBUaHJlYWQgbG9jYWwgZGF0YSBvYmplY3QgKi8KKyNkZWZpbmUgU1RUX05VTQkJCTcKKworI2RlZmluZSBTVFRfTE9PUwkJMTAJLyogT3BlcmF0aW5nIHN5c3RlbSBzcGVjaWZpYyByYW5nZSAqLworI2RlZmluZSBTVFRfSElPUwkJMTIKKyNkZWZpbmUgU1RUX0xPUFJPQwkJMTMJLyogUHJvY2Vzc29yLXNwZWNpZmljIHJhbmdlICovCisjZGVmaW5lIFNUVF9ISVBST0MJCTE1CisKKy8qIHN0X290aGVyOiBWaXNpYmlsaXR5IFR5cGVzICovCisjZGVmaW5lIFNUVl9ERUZBVUxUCQkwCS8qIHVzZSBiaW5kaW5nIHR5cGUgKi8KKyNkZWZpbmUgU1RWX0lOVEVSTkFMCQkxCS8qIG5vdCByZWZlcmVuY2VkIGZyb20gb3V0c2lkZSAqLworI2RlZmluZSBTVFZfSElEREVOCQkyCS8qIG5vdCB2aXNpYmxlLCBtYXkgYmUgdXNlZCB2aWEgcHRyICovCisjZGVmaW5lIFNUVl9QUk9URUNURUQJCTMJLyogdmlzaWJsZSwgbm90IHByZWVtcHRpYmxlICovCisjZGVmaW5lIFNUVl9FWFBPUlRFRAkJNAorI2RlZmluZSBTVFZfU0lOR0xFVE9OCQk1CisjZGVmaW5lIFNUVl9FTElNSU5BVEUJCTYKKworLyogc3RfaW5mby9zdF9vdGhlciB1dGlsaXR5IG1hY3JvcyAqLworI2RlZmluZSBFTEZfU1RfQklORChpbmZvKQkJKCh1aW50MzJfdCkoaW5mbykgPj4gNCkKKyNkZWZpbmUgRUxGX1NUX1RZUEUoaW5mbykJCSgodWludDMyX3QpKGluZm8pICYgMHhmKQorI2RlZmluZSBFTEZfU1RfSU5GTyhiaW5kLHR5cGUpCQkoKEVsZl9CeXRlKSgoKGJpbmQpIDw8IDQpIHwgXAorCQkJCQkgKCh0eXBlKSAmIDB4ZikpKQorI2RlZmluZSBFTEZfU1RfVklTSUJJTElUWShvdGhlcikJKCh1aW50MzJfdCkob3RoZXIpICYgMykKKworLyoKKyAqIFNwZWNpYWwgc2VjdGlvbiBpbmRleGVzCisgKi8KKyNkZWZpbmUgU0hOX1VOREVGCTAJCS8qIFVuZGVmaW5lZCBzZWN0aW9uICovCisKKyNkZWZpbmUgU0hOX0xPUkVTRVJWRQkweGZmMDAJCS8qIFJlc2VydmVkIHJhbmdlICovCisjZGVmaW5lIFNITl9BQlMJCTB4ZmZmMQkJLyogIEFic29sdXRlIHN5bWJvbHMgKi8KKyNkZWZpbmUgU0hOX0NPTU1PTgkweGZmZjIJCS8qICBDb21tb24gc3ltYm9scyAqLworI2RlZmluZSBTSE5fWElOREVYCTB4ZmZmZgkJLyogRXNjYXBlIC0tIGluZGV4IHN0b3JlZCBlbHNld2hlcmUgKi8KKyNkZWZpbmUgU0hOX0hJUkVTRVJWRQkweGZmZmYKKworI2RlZmluZSBTSE5fTE9QUk9DCTB4ZmYwMAkJLyogUHJvY2Vzc29yLXNwZWNpZmljIHJhbmdlICovCisjZGVmaW5lIFNITl9ISVBST0MJMHhmZjFmCisjZGVmaW5lIFNITl9MT09TCTB4ZmYyMAkJLyogT3BlcmF0aW5nIHN5c3RlbSBzcGVjaWZpYyByYW5nZSAqLworI2RlZmluZSBTSE5fSElPUwkweGZmM2YKKworI2RlZmluZSBTSE5fTUlQU19BQ09NTU9OIDB4ZmYwMAorI2RlZmluZSBTSE5fTUlQU19URVhUCTB4ZmYwMQorI2RlZmluZSBTSE5fTUlQU19EQVRBCTB4ZmYwMgorI2RlZmluZSBTSE5fTUlQU19TQ09NTU9OIDB4ZmYwMworCisvKgorICogUmVsb2NhdGlvbiBFbnRyaWVzCisgKi8KK3R5cGVkZWYgc3RydWN0IHsKKwlFbGYzMl9Xb3JkCXJfb2Zmc2V0OwkvKiB3aGVyZSB0byBkbyBpdCAqLworCUVsZjMyX1dvcmQJcl9pbmZvOwkJLyogaW5kZXggJiB0eXBlIG9mIHJlbG9jYXRpb24gKi8KK30gRWxmMzJfUmVsOworCit0eXBlZGVmIHN0cnVjdCB7CisJRWxmMzJfV29yZAlyX29mZnNldDsJLyogd2hlcmUgdG8gZG8gaXQgKi8KKwlFbGYzMl9Xb3JkCXJfaW5mbzsJCS8qIGluZGV4ICYgdHlwZSBvZiByZWxvY2F0aW9uICovCisJRWxmMzJfU3dvcmQJcl9hZGRlbmQ7CS8qIGFkanVzdG1lbnQgdmFsdWUgKi8KK30gRWxmMzJfUmVsYTsKKworLyogcl9pbmZvIHV0aWxpdHkgbWFjcm9zICovCisjZGVmaW5lIEVMRjMyX1JfU1lNKGluZm8pCSgoaW5mbykgPj4gOCkKKyNkZWZpbmUgRUxGMzJfUl9UWVBFKGluZm8pCSgoaW5mbykgJiAweGZmKQorI2RlZmluZSBFTEYzMl9SX0lORk8oc3ltLCB0eXBlKSAoKChzeW0pIDw8IDgpICsgKHVuc2lnbmVkIGNoYXIpKHR5cGUpKQorCit0eXBlZGVmIHN0cnVjdCB7CisJRWxmNjRfQWRkcglyX29mZnNldDsJLyogd2hlcmUgdG8gZG8gaXQgKi8KKwlFbGY2NF9Yd29yZAlyX2luZm87CQkvKiBpbmRleCAmIHR5cGUgb2YgcmVsb2NhdGlvbiAqLworfSBFbGY2NF9SZWw7CisKK3R5cGVkZWYgc3RydWN0IHsKKwlFbGY2NF9BZGRyCXJfb2Zmc2V0OwkvKiB3aGVyZSB0byBkbyBpdCAqLworCUVsZjY0X1h3b3JkCXJfaW5mbzsJCS8qIGluZGV4ICYgdHlwZSBvZiByZWxvY2F0aW9uICovCisJRWxmNjRfU3h3b3JkCXJfYWRkZW5kOwkvKiBhZGp1c3RtZW50IHZhbHVlICovCit9IEVsZjY0X1JlbGE7CisKKy8qIHJfaW5mbyB1dGlsaXR5IG1hY3JvcyAqLworI2RlZmluZSBFTEY2NF9SX1NZTShpbmZvKQkoKGluZm8pID4+IDMyKQorI2RlZmluZSBFTEY2NF9SX1RZUEUoaW5mbykJKChpbmZvKSAmIDB4ZmZmZmZmZmYpCisjZGVmaW5lIEVMRjY0X1JfSU5GTyhzeW0sdHlwZSkJKCgoc3ltKSA8PCAzMikgKyAodHlwZSkpCisKKy8qCisgKiBNb3ZlIGVudHJpZXMKKyAqLwordHlwZWRlZiBzdHJ1Y3QgeworCUVsZjMyX0x3b3JkCW1fdmFsdWU7CS8qIHN5bWJvbCB2YWx1ZSAqLworCUVsZjMyX1dvcmQJbV9pbmZvOwkJLyogc2l6ZSArIGluZGV4ICovCisJRWxmMzJfV29yZAltX3BvZmZzZXQ7CS8qIHN5bWJvbCBvZmZzZXQgKi8KKwlFbGYzMl9IYWxmCW1fcmVwZWF0OwkvKiByZXBlYXQgY291bnQgKi8KKwlFbGYzMl9IYWxmCW1fc3RyaWRlOwkvKiBzdHJpZGUgaW5mbyAqLworfSBFbGYzMl9Nb3ZlOworCisjZGVmaW5lIEVMRjMyX01fU1lNKGluZm8pCSgoaW5mbykgPj4gOCkKKyNkZWZpbmUgRUxGMzJfTV9TSVpFKGluZm8pCSgoaW5mbykgJiAweGZmKQorI2RlZmluZSBFTEYzMl9NX0lORk8oc3ltLCBzaXplKSAoKChzeW0pIDw8IDgpICsgKHVuc2lnbmVkIGNoYXIpKHNpemUpKQorCit0eXBlZGVmIHN0cnVjdCB7CisJRWxmNjRfTHdvcmQJbV92YWx1ZTsJLyogc3ltYm9sIHZhbHVlICovCisJRWxmNjRfWHdvcmQJbV9pbmZvOwkJLyogc2l6ZSArIGluZGV4ICovCisJRWxmNjRfWHdvcmQJbV9wb2Zmc2V0OwkvKiBzeW1ib2wgb2Zmc2V0ICovCisJRWxmNjRfV29yZAltX3JlcGVhdDsJLyogcmVwZWF0IGNvdW50ICovCisJRWxmNjRfV29yZAltX3N0cmlkZTsJLyogc3RyaWRlIGluZm8gKi8KK30gRWxmNjRfTW92ZTsKKworI2RlZmluZSBFTEY2NF9NX1NZTShpbmZvKQkoKGluZm8pID4+IDgpCisjZGVmaW5lIEVMRjY0X01fU0laRShpbmZvKQkoKGluZm8pICYgMHhmZikKKyNkZWZpbmUgRUxGNjRfTV9JTkZPKHN5bSwgc2l6ZSkgKCgoc3ltKSA8PCA4KSArICh1bnNpZ25lZCBjaGFyKShzaXplKSkKKworLyoKKyAqIEhhcmR3YXJlL3NvZnR3YXJlIGNhcGFiaWxpdGllcyBlbnRyeQorICovCit0eXBlZGVmIHN0cnVjdCB7CisJRWxmMzJfV29yZAkJY190YWc7CS8qIGVudHJ5IHRhZyB2YWx1ZSAqLworCXVuaW9uIHsKKwkJRWxmMzJfQWRkcgljX3B0cjsKKwkJRWxmMzJfV29yZAljX3ZhbDsKKwl9IGNfdW47Cit9IEVsZjMyX0NhcDsKKwordHlwZWRlZiBzdHJ1Y3QgeworCUVsZjY0X1h3b3JkCQljX3RhZzsJLyogZW50cnkgdGFnIHZhbHVlICovCisJdW5pb24geworCQlFbGY2NF9BZGRyCWNfcHRyOworCQlFbGY2NF9Yd29yZAljX3ZhbDsKKwl9IGNfdW47Cit9IEVsZjY0X0NhcDsKKworLyoKKyAqIER5bmFtaWMgU2VjdGlvbiBzdHJ1Y3R1cmUgYXJyYXkKKyAqLwordHlwZWRlZiBzdHJ1Y3QgeworCUVsZjMyX1dvcmQJCWRfdGFnOwkvKiBlbnRyeSB0YWcgdmFsdWUgKi8KKwl1bmlvbiB7CisJCUVsZjMyX0FkZHIJZF9wdHI7CisJCUVsZjMyX1dvcmQJZF92YWw7CisJfSBkX3VuOworfSBFbGYzMl9EeW47CisKK3R5cGVkZWYgc3RydWN0IHsKKwlFbGY2NF9Yd29yZAkJZF90YWc7CS8qIGVudHJ5IHRhZyB2YWx1ZSAqLworCXVuaW9uIHsKKwkJRWxmNjRfQWRkcglkX3B0cjsKKwkJRWxmNjRfWHdvcmQJZF92YWw7CisJfSBkX3VuOworfSBFbGY2NF9EeW47CisKKy8qIGRfdGFnICovCisjZGVmaW5lIERUX05VTEwJCTAJLyogTWFya3MgZW5kIG9mIGR5bmFtaWMgYXJyYXkgKi8KKyNkZWZpbmUgRFRfTkVFREVECTEJLyogTmFtZSBvZiBuZWVkZWQgbGlicmFyeSAoRFRfU1RSVEFCIG9mZnNldCkgKi8KKyNkZWZpbmUgRFRfUExUUkVMU1oJMgkvKiBTaXplLCBpbiBieXRlcywgb2YgcmVsb2NhdGlvbnMgaW4gUExUICovCisjZGVmaW5lIERUX1BMVEdPVAkzCS8qIEFkZHJlc3Mgb2YgUExUIGFuZC9vciBHT1QgKi8KKyNkZWZpbmUgRFRfSEFTSAkJNAkvKiBBZGRyZXNzIG9mIHN5bWJvbCBoYXNoIHRhYmxlICovCisjZGVmaW5lIERUX1NUUlRBQgk1CS8qIEFkZHJlc3Mgb2Ygc3RyaW5nIHRhYmxlICovCisjZGVmaW5lIERUX1NZTVRBQgk2CS8qIEFkZHJlc3Mgb2Ygc3ltYm9sIHRhYmxlICovCisjZGVmaW5lIERUX1JFTEEJCTcJLyogQWRkcmVzcyBvZiBSZWxhIHJlbG9jYXRpb24gdGFibGUgKi8KKyNkZWZpbmUgRFRfUkVMQVNaCTgJLyogU2l6ZSwgaW4gYnl0ZXMsIG9mIERUX1JFTEEgdGFibGUgKi8KKyNkZWZpbmUgRFRfUkVMQUVOVAk5CS8qIFNpemUsIGluIGJ5dGVzLCBvZiBvbmUgRFRfUkVMQSBlbnRyeSAqLworI2RlZmluZSBEVF9TVFJTWgkxMAkvKiBTaXplLCBpbiBieXRlcywgb2YgRFRfU1RSVEFCIHRhYmxlICovCisjZGVmaW5lIERUX1NZTUVOVAkxMQkvKiBTaXplLCBpbiBieXRlcywgb2Ygb25lIERUX1NZTVRBQiBlbnRyeSAqLworI2RlZmluZSBEVF9JTklUCQkxMgkvKiBBZGRyZXNzIG9mIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uICovCisjZGVmaW5lIERUX0ZJTkkJCTEzCS8qIEFkZHJlc3Mgb2YgdGVybWluYXRpb24gZnVuY3Rpb24gKi8KKyNkZWZpbmUgRFRfU09OQU1FCTE0CS8qIFNoYXJlZCBvYmplY3QgbmFtZSAoRFRfU1RSVEFCIG9mZnNldCkgKi8KKyNkZWZpbmUgRFRfUlBBVEgJMTUJLyogTGlicmFyeSBzZWFyY2ggcGF0aCAoRFRfU1RSVEFCIG9mZnNldCkgKi8KKyNkZWZpbmUgRFRfU1lNQk9MSUMJMTYJLyogU3RhcnQgc3ltYm9sIHNlYXJjaCB3aXRoaW4gbG9jYWwgb2JqZWN0ICovCisjZGVmaW5lIERUX1JFTAkJMTcJLyogQWRkcmVzcyBvZiBSZWwgcmVsb2NhdGlvbiB0YWJsZSAqLworI2RlZmluZSBEVF9SRUxTWgkxOAkvKiBTaXplLCBpbiBieXRlcywgb2YgRFRfUkVMIHRhYmxlICovCisjZGVmaW5lIERUX1JFTEVOVAkxOQkvKiBTaXplLCBpbiBieXRlcywgb2Ygb25lIERUX1JFTCBlbnRyeSAqLworI2RlZmluZSBEVF9QTFRSRUwJMjAJLyogVHlwZSBvZiBQTFQgcmVsb2NhdGlvbiBlbnRyaWVzICovCisjZGVmaW5lIERUX0RFQlVHCTIxCS8qIFVzZWQgZm9yIGRlYnVnZ2luZzsgdW5zcGVjaWZpZWQgKi8KKyNkZWZpbmUgRFRfVEVYVFJFTAkyMgkvKiBSZWxvY2F0aW9ucyBtaWdodCBtb2RpZnkgbm9uLXdyaXRhYmxlIHNlZyAqLworI2RlZmluZSBEVF9KTVBSRUwJMjMJLyogQWRkcmVzcyBvZiByZWxvY2F0aW9ucyBhc3NvY2lhdGVkIHdpdGggUExUICovCisjZGVmaW5lIERUX0JJTkRfTk9XCTI0CS8qIFByb2Nlc3MgYWxsIHJlbG9jYXRpb25zIGF0IGxvYWQtdGltZSAqLworI2RlZmluZSBEVF9JTklUX0FSUkFZCTI1CS8qIEFkZHJlc3Mgb2YgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gYXJyYXkgKi8KKyNkZWZpbmUgRFRfRklOSV9BUlJBWQkyNgkvKiBTaXplLCBpbiBieXRlcywgb2YgRFRfSU5JVF9BUlJBWSBhcnJheSAqLworI2RlZmluZSBEVF9JTklUX0FSUkFZU1ogMjcJLyogQWRkcmVzcyBvZiB0ZXJtaW5hdGlvbiBmdW5jdGlvbiBhcnJheSAqLworI2RlZmluZSBEVF9GSU5JX0FSUkFZU1ogMjgJLyogU2l6ZSwgaW4gYnl0ZXMsIG9mIERUX0ZJTklfQVJSQVkgYXJyYXkqLworI2RlZmluZSBEVF9OVU0JCTI5CisKKyNkZWZpbmUgRFRfTE9PUwkJMHg2MDAwMDAwMAkvKiBPcGVyYXRpbmcgc3lzdGVtIHNwZWNpZmljIHJhbmdlICovCisjZGVmaW5lIERUX1ZFUlNZTQkweDZmZmZmZmYwCS8qIFN5bWJvbCB2ZXJzaW9ucyAqLworI2RlZmluZSBEVF9GTEFHU18xCTB4NmZmZmZmZmIJLyogRUxGIGR5bmFtaWMgZmxhZ3MgKi8KKyNkZWZpbmUgRFRfVkVSREVGCTB4NmZmZmZmZmMJLyogVmVyc2lvbnMgZGVmaW5lZCBieSBmaWxlICovCisjZGVmaW5lIERUX1ZFUkRFRk5VTQkweDZmZmZmZmZkCS8qIE51bWJlciBvZiB2ZXJzaW9ucyBkZWZpbmVkIGJ5IGZpbGUgKi8KKyNkZWZpbmUgRFRfVkVSTkVFRAkweDZmZmZmZmZlCS8qIFZlcnNpb25zIG5lZWRlZCBieSBmaWxlICovCisjZGVmaW5lIERUX1ZFUk5FRUROVU0JMHg2ZmZmZmZmZgkvKiBOdW1iZXIgb2YgdmVyc2lvbnMgbmVlZGVkIGJ5IGZpbGUgKi8KKyNkZWZpbmUgRFRfSElPUwkJMHg2ZmZmZmZmZgorI2RlZmluZSBEVF9MT1BST0MJMHg3MDAwMDAwMAkvKiBQcm9jZXNzb3Itc3BlY2lmaWMgcmFuZ2UgKi8KKyNkZWZpbmUgRFRfSElQUk9DCTB4N2ZmZmZmZmYKKworLyogRmxhZyB2YWx1ZXMgZm9yIERUX0ZMQUdTXzEgKGluY29tcGxldGUpICovCisjZGVmaW5lIERGXzFfQklORF9OT1cJMHgwMDAwMDAwMQkvKiBTYW1lIGFzIERGX0JJTkRfTk9XICovCisjZGVmaW5lIERGXzFfTk9ERUxFVEUJMHgwMDAwMDAwOAkvKiBTZXQgdGhlIFJUTERfTk9ERUxFVEUgZm9yIG9iamVjdCAqLworI2RlZmluZSBERl8xX0lOSVRGSVJTVAkweDAwMDAwMDIwCS8qIE9iamVjdCdzIGluaXQvZmluaSB0YWtlIHByaW9yaXR5ICovCisjZGVmaW5lIERGXzFfTk9PUEVOCTB4MDAwMDAwNDAJLyogRG8gbm90IGFsbG93IGxvYWRpbmcgb24gZGxvcGVuKCkgKi8KKworLyoKKyAqIEF1eGlsaWFyeSBWZWN0b3JzCisgKi8KK3R5cGVkZWYgc3RydWN0IHsKKwlFbGYzMl9Xb3JkCWFfdHlwZTsJCQkJLyogMzItYml0IGlkICovCisJRWxmMzJfV29yZAlhX3Y7CQkJCS8qIDMyLWJpdCBpZCAqLworfSBBdXgzMkluZm87CisKK3R5cGVkZWYgc3RydWN0IHsKKwlFbGY2NF9Xb3JkCWFfdHlwZTsJCS8qIDMyLWJpdCBpZCAqLworCUVsZjY0X1h3b3JkCWFfdjsJCS8qIDY0LWJpdCBpZCAqLworfSBBdXg2NEluZm87CisKKy8qIEJFR0lOIGFuZHJvaWQtY2hhbmdlZDogdGhlc2UgY29uc3RhbnRzIHNob3VsZCBjb21lIGZyb20gPGxpbnV4L2F1eHZlYy5oPi4gKi8KKyNpZiAwCisvKiBhX3R5cGUgKi8KKyNkZWZpbmUgQVRfTlVMTAkJMAkvKiBNYXJrcyBlbmQgb2YgYXJyYXkgKi8KKyNkZWZpbmUgQVRfSUdOT1JFCTEJLyogTm8gbWVhbmluZywgYV91biBpcyB1bmRlZmluZWQgKi8KKyNkZWZpbmUgQVRfRVhFQ0ZECTIJLyogT3BlbiBmaWxlIGRlc2NyaXB0b3Igb2Ygb2JqZWN0IGZpbGUgKi8KKyNkZWZpbmUgQVRfUEhEUgkJMwkvKiAmcGhkclswXSAqLworI2RlZmluZSBBVF9QSEVOVAk0CS8qIHNpemVvZihwaGRyWzBdKSAqLworI2RlZmluZSBBVF9QSE5VTQk1CS8qICMgcGhkciBlbnRyaWVzICovCisjZGVmaW5lIEFUX1BBR0VTWgk2CS8qIFBBR0VTSVpFICovCisjZGVmaW5lIEFUX0JBU0UJCTcJLyogSW50ZXJwcmV0ZXIgYmFzZSBhZGRyICovCisjZGVmaW5lIEFUX0ZMQUdTCTgJLyogUHJvY2Vzc29yIGZsYWdzICovCisjZGVmaW5lIEFUX0VOVFJZCTkJLyogRW50cnkgYWRkcmVzcyBvZiBleGVjdXRhYmxlICovCisjZGVmaW5lIEFUX0RDQUNIRUJTSVpFCTEwCS8qIERhdGEgY2FjaGUgYmxvY2sgc2l6ZSAqLworI2RlZmluZSBBVF9JQ0FDSEVCU0laRQkxMQkvKiBJbnN0cnVjdGlvbiBjYWNoZSBibG9jayBzaXplICovCisjZGVmaW5lIEFUX1VDQUNIRUJTSVpFCTEyCS8qIFVuaWZpZWQgY2FjaGUgYmxvY2sgc2l6ZSAqLworI2RlZmluZSBBVF9TVEFDS0JBU0UJMTMJLyogQmFzZSBhZGRyZXNzIG9mIHRoZSBtYWluIHRocmVhZCAqLworCisJLyogVmVuZG9yIHNwZWNpZmljICovCisjZGVmaW5lIEFUX01JUFNfTk9URUxGCTEwCS8qIFhYWCBhX3ZhbCAhPSAwIC0+IE1JUFMgWENPRkYgZXhlY3V0YWJsZSAqLworCisjZGVmaW5lIEFUX0VVSUQJCTIwMDAJLyogZXVpZCAoc29sYXJpcyBjb21wYXRpYmxlIG51bWJlcnMpICovCisjZGVmaW5lIEFUX1JVSUQJCTIwMDEJLyogcnVpZCAoc29sYXJpcyBjb21wYXRpYmxlIG51bWJlcnMpICovCisjZGVmaW5lIEFUX0VHSUQJCTIwMDIJLyogZWdpZCAoc29sYXJpcyBjb21wYXRpYmxlIG51bWJlcnMpICovCisjZGVmaW5lIEFUX1JHSUQJCTIwMDMJLyogcmdpZCAoc29sYXJpcyBjb21wYXRpYmxlIG51bWJlcnMpICovCisKKwkvKiBTb2xhcmlzIGtlcm5lbCBzcGVjaWZpYyAqLworI2RlZmluZSBBVF9TVU5fTERFTEYJMjAwNAkvKiBkeW5hbWljIGxpbmtlcidzIEVMRiBoZWFkZXIgKi8KKyNkZWZpbmUgQVRfU1VOX0xEU0hEUgkyMDA1CS8qIGR5bmFtaWMgbGlua2VyJ3Mgc2VjdGlvbiBoZWFkZXIgKi8KKyNkZWZpbmUgQVRfU1VOX0xETkFNRQkyMDA2CS8qIGR5bmFtaWMgbGlua2VyJ3MgbmFtZSAqLworI2RlZmluZSBBVF9TVU5fTFBHU0laRQkyMDA3CS8qIGxhcmdlIHBhZ2VzaXplICovCisKKwkvKiBPdGhlciBpbmZvcm1hdGlvbiAqLworI2RlZmluZSBBVF9TVU5fUExBVEZPUk0gMjAwOAkvKiBzeXNpbmZvKFNJX1BMQVRGT1JNKSAqLworI2RlZmluZSBBVF9TVU5fSFdDQVAJMjAwOQkvKiBwcm9jZXNzIGhhcmR3YXJlIGNhcGFiaWxpdGllcyAqLworI2RlZmluZSBBVF9TVU5fSUZMVVNICTIwMTAJLyogZG8gd2UgbmVlZCB0byBmbHVzaCB0aGUgaW5zdHJ1Y3Rpb24gY2FjaGU/ICovCisjZGVmaW5lIEFUX1NVTl9DUFUJMjAxMQkvKiBDUFUgbmFtZSAqLworCS8qIGliY3MyIGVtdWxhdGlvbiBiYW5kIGFpZCAqLworI2RlZmluZSBBVF9TVU5fRU1VTF9FTlRSWSAyMDEyCS8qIGNvZmYgZW50cnkgcG9pbnQgKi8KKyNkZWZpbmUgQVRfU1VOX0VNVUxfRVhFQ0ZEIDIwMTMgLyogY29mZiBmaWxlIGRlc2NyaXB0b3IgKi8KKwkvKiBFeGVjdXRhYmxlJ3MgZnVsbHkgcmVzb2x2ZWQgbmFtZSAqLworI2RlZmluZSBBVF9TVU5fRVhFQ05BTUUgMjAxNAorI2VuZGlmCisvKiBFTkQgYW5kcm9pZC1jaGFuZ2VkICovCisKKy8qCisgKiBOb3RlIEhlYWRlcnMKKyAqLwordHlwZWRlZiBzdHJ1Y3QgeworCUVsZjMyX1dvcmQgbl9uYW1lc3o7CisJRWxmMzJfV29yZCBuX2Rlc2NzejsKKwlFbGYzMl9Xb3JkIG5fdHlwZTsKK30gRWxmMzJfTmhkcjsKKwordHlwZWRlZiBzdHJ1Y3QgeworCUVsZjY0X1dvcmQgbl9uYW1lc3o7CisJRWxmNjRfV29yZCBuX2Rlc2NzejsKKwlFbGY2NF9Xb3JkIG5fdHlwZTsKK30gRWxmNjRfTmhkcjsKKworI2RlZmluZSBFTEZfTk9URV9HTlVfTkFNRVNaCQk0CisjZGVmaW5lIEVMRl9OT1RFX0dOVV9OQU1FCQkiR05VXDAiCisKKy8qCisgKiBHTlUtc3BlY2lmaWMgbm90ZSB0eXBlOiBBQkkgdGFnCisgKiBuYW1lOiBHTlVcMAorICogbmFtZXN6OiA0CisgKiBkZXNjOgorICoJd29yZFswXTogT1MgdGFnCisgKgl3b3JkWzFdOiBtYWpvciB2ZXJzaW9uCisgKgl3b3JkWzJdOiBtaW5vciB2ZXJzaW9uCisgKgl3b3JkWzNdOiB0ZWVueSB2ZXJzaW9uCisgKiBkZXNjc3o6IDE2CisgKi8KKy8qIEdOVS1zcGVjaWZpYyBub3RlIG5hbWUgYW5kIGRlc2NyaXB0aW9uIHNpemVzICovCisjZGVmaW5lIEVMRl9OT1RFX1RZUEVfQUJJX1RBRwkJMQorI2RlZmluZSBFTEZfTk9URV9BQklfTkFNRQkJRUxGX05PVEVfR05VX05BTUUKKyNkZWZpbmUgRUxGX05PVEVfQUJJX05BTUVTWgkJRUxGX05PVEVfR05VX05BTUVTWgorI2RlZmluZSBFTEZfTk9URV9BQklfREVTQ1NaCQkxNgorLyogR05VLXNwZWNpZmljIE9TL3ZlcnNpb24gdmFsdWUgc3R1ZmYgKi8KKyNkZWZpbmUgRUxGX05PVEVfQUJJX09TX0xJTlVYCQkwCisjZGVmaW5lIEVMRl9OT1RFX0FCSV9PU19IVVJECQkxCisjZGVmaW5lIEVMRl9OT1RFX0FCSV9PU19TT0xBUklTCQkyCisjZGVmaW5lIEVMRl9OT1RFX0FCSV9PU19LRlJFRUJTRAkzCisjZGVmaW5lIEVMRl9OT1RFX0FCSV9PU19LTkVUQlNECQk0CisKKy8qCisgKiBHTlUtc3BlY2lmaWMgbm90ZSB0eXBlOiBIYXJkd2FyZSBjYXBhYmlsaXRpZXMKKyAqIG5hbWU6IEdOVVwwCisgKiBuYW1lc3o6IDQKKyAqIGRlc2M6CisgKgl3b3JkWzBdOiBOdW1iZXIgb2YgZW50cmllcworICoJd29yZFsxXTogQml0bWFzayBvZiBlbmFibGVkIGVudHJpZXMKKyAqCUZvbGxvd2VkIGJ5IGEgYnl0ZSBpZCwgYW5kIGEgTlVMIHRlcm1pbmF0ZWQgc3RyaW5nIHBlciBlbnRyeQorICogZGVzY3N6OiB2YXJpYWJsZQorICovCisjZGVmaW5lIEVMRl9OT1RFX1RZUEVfR05VX0hXQ0FQCQkyCisKKy8qCisgKiBHTlUtc3BlY2lmaWMgbm90ZSB0eXBlOiBCdWlsZCBJRCBnZW5lcmF0ZWQgYnkgbGQKKyAqIG5hbWU6IEdOVVwwCisgKiBkZXNjOgorICoJd29yZFswLi40XSBTSEExIFtkZWZhdWx0XSAKKyAqIG9yCisgKgl3b3JkWzAuLjNdIG1kNSBvciB1dWlkCisgKiBkZXNjc3o6IDE2IG9yIDIwCisgKi8KKyNkZWZpbmUgRUxGX05PVEVfVFlQRV9HTlVfQlVJTERfSUQJMworCisvKiBTdVNFLXNwZWNpZmljIG5vdGUgdHlwZTogQUJJCisgKiBuYW1lOiBTdVNFXDAKKyAqIG5hbWVzejogNQorICogZGVzYzoKKyAqCWhhbGZbMF0gPSBNTW1tCisgKgorICoJTSA9IHByb2R1Y3QgbWFqb3IgdmVyc2lvbgorICoJbSA9IHByb2R1Y3QgbWlub3IgdmVyc2lvbgorICogZGVzY3N6OiAyCisgKi8KKyNkZWZpbmUgRUxGX05PVEVfVFlQRV9TVVNFX1RBRwkxCisvKiBTdVNFLXNwZWNpZmljIG5vdGUgbmFtZSBhbmQgZGVzY3JpcHRpb24gc2l6ZXMgKi8KKyNkZWZpbmUgRUxGX05PVEVfU1VTRV9OQU1FU1oJNQorI2RlZmluZSBFTEZfTk9URV9TVVNFX0RFU0NTWgkyCisvKiBTdVNFLXNwZWNpZmljIG5vdGUgbmFtZSAqLworI2RlZmluZSBFTEZfTk9URV9TVVNFX05BTUUJCSJTdVNFXDAiCisKKy8qIFN1U0Utc3BlY2lmaWMgbm90ZSB0eXBlOiB2ZXJzaW9uCisgKiBuYW1lOiBTdVNFXDBcMFwwXDAKKyAqIG5hbWVzejogOAorICogZGVzYzogCisgKgl3b3JkWzBdID0gVlZUVE1NbW0KKyAqCisgKglWID0gdmVyc2lvbiBvZiBmb2xsb3dpbmcgZGF0YQorICoJVCA9IHByb2R1Y3QgdHlwZTogW2JveCwgc2xlcywgbmxkLCB3aGF0ZXZlcl0KKyAqCU0gPSBwcm9kdWN0IG1ham9yIHZlcnNpb24KKyAqCW0gPSBwcm9kdWN0IG1pbm9yIHZlcnNpb24KKyAqIGRlc2NzejogOAorICovCisjZGVmaW5lIEVMRl9OT1RFX1RZUEVfU1VTRV9WRVJTSU9OX1RBRwkweDQ1NTM3NTUzCS8qIFN1U0UgaW4gTEUgKi8KKy8qIFN1U0Utc3BlY2lmaWMgbm90ZSBuYW1lIGFuZCBkZXNjcmlwdGlvbiBzaXplcyAqLworI2RlZmluZSBFTEZfTk9URV9TVVNFX1ZFUlNJT05fTkFNRVNaCTgKKyNkZWZpbmUgRUxGX05PVEVfU1VTRV9WRVJTSU9OX0RFU0NTWgk4CisvKiBTdVNFLXNwZWNpZmljIG5vdGUgbmFtZSAqLworI2RlZmluZSBFTEZfTk9URV9TVVNFX1ZFUlNJT05fTkFNRQkJIlN1U0VcMFwwXDBcMCIKKworLyogTmV0QlNELXNwZWNpZmljIG5vdGUgdHlwZTogRW11bGF0aW9uIG5hbWUuCisgKiBuYW1lOiBOZXRCU0RcMFwwCisgKiBuYW1lc3o6IDgKKyAqIGRlc2M6IAorICoJd29yZFswXTogTU1tbXJycHAwMAorICoKKyAqCU0gPSBtYWpvciB2ZXJzaW9uCisgKgltID0gbWlub3IgdmVyc2lvbgorICoJciA9IHJlbGVhc2UgWyIiLEEtWixaW0EtWl0gYnV0IG51bWVyaWNdCisgKglwID0gcGF0Y2hsZXZlbAorICogZGVzY3N6OiA0CisgKi8KKyNkZWZpbmUgRUxGX05PVEVfVFlQRV9ORVRCU0RfVEFHCTEKKy8qIE5ldEJTRC1zcGVjaWZpYyBub3RlIG5hbWUgYW5kIGRlc2NyaXB0aW9uIHNpemVzICovCisjZGVmaW5lIEVMRl9OT1RFX05FVEJTRF9OQU1FU1oJCTcKKyNkZWZpbmUgRUxGX05PVEVfTkVUQlNEX0RFU0NTWgkJNAorLyogTmV0QlNELXNwZWNpZmljIG5vdGUgbmFtZSAqLworI2RlZmluZSBFTEZfTk9URV9ORVRCU0RfTkFNRQkJIk5ldEJTRFwwXDAiCisKKy8qIE5ldEJTRC1zcGVjaWZpYyBub3RlIHR5cGU6IENoZWNrc3VtLiAKKyAqIFRoZXJlIHNob3VsZCBiZSAxIE5PVEUgcGVyIFBUX0xPQUQgc2VjdGlvbi4KKyAqIG5hbWU6ID8/PworICogbmFtZXN6OiA/Pz8KKyAqIGRlc2M6CisgKglhIHR1cGxlIG9mIDxwaG51bT4oMTYpLDxjaGstdHlwZT4oMTYpLDxjaGstdmFsdWU+LgorICogZGVzY3N6OiA/Pz8KKyAqLworI2RlZmluZSBFTEZfTk9URV9UWVBFX0NIRUNLU1VNX1RBRwkyCisjZGVmaW5lIEVMRl9OT1RFX0NIRUNLU1VNX0NSQzMyCQkxCisjZGVmaW5lIEVMRl9OT1RFX0NIRUNLU1VNX01ENQkJMgorI2RlZmluZSBFTEZfTk9URV9DSEVDS1NVTV9TSEExCQkzCisjZGVmaW5lIEVMRl9OT1RFX0NIRUNLU1VNX1NIQTI1Ngk0CisKKy8qCisgKiBOZXRCU0Qtc3BlY2lmaWMgbm90ZSB0eXBlOiBQYVguCisgKiBUaGVyZSBzaG91bGQgYmUgMSBOT1RFIHBlciBleGVjdXRhYmxlLgorICogbmFtZTogUGFYXDAKKyAqIG5hbWVzejogNAorICogZGVzYzoKKyAqCXdvcmRbMF06IGNhcGFiaWxpdHkgYml0bWFzaworICogZGVzY3N6OiA0CisgKi8KKyNkZWZpbmUgRUxGX05PVEVfVFlQRV9QQVhfVEFHCQkzCisjZGVmaW5lIEVMRl9OT1RFX1BBWF9NUFJPVEVDVAkJMHgwMQkvKiBGb3JjZSBlbmFibGUgTXByb3RlY3QgKi8KKyNkZWZpbmUgRUxGX05PVEVfUEFYX05PTVBST1RFQ1QJCTB4MDIJLyogRm9yY2UgZGlzYWJsZSBNcHJvdGVjdCAqLworI2RlZmluZSBFTEZfTk9URV9QQVhfR1VBUkQJCTB4MDQJLyogRm9yY2UgZW5hYmxlIFNlZ3ZndWFyZCAqLworI2RlZmluZSBFTEZfTk9URV9QQVhfTk9HVUFSRAkJMHgwOAkvKiBGb3JjZSBkaXNhYmxlIFNlcnZndWFyZCAqLworI2RlZmluZSBFTEZfTk9URV9QQVhfQVNMUgkJMHgxMAkvKiBGb3JjZSBlbmFibGUgQVNMUiAqLworI2RlZmluZSBFTEZfTk9URV9QQVhfTk9BU0xSCQkweDIwCS8qIEZvcmNlIGRpc2FibGUgQVNMUiAqLworI2RlZmluZSBFTEZfTk9URV9QQVhfTkFNRVNaCQk0CisjZGVmaW5lIEVMRl9OT1RFX1BBWF9OQU1FCQkiUGFYXDAiCisjZGVmaW5lIEVMRl9OT1RFX1BBWF9ERVNDU1oJCTQKKworLyoKKyAqIE5ldEJTRC1zcGVjaWZpYyBjb3JlIGZpbGUgaW5mb3JtYXRpb24uCisgKgorICogTmV0QlNEIEVMRiBjb3JlIGZpbGVzIHVzZSBub3RlcyB0byBwcm92aWRlIGluZm9ybWF0aW9uIGFib3V0CisgKiB0aGUgcHJvY2VzcydzIHN0YXRlLgkgVGhlIG5vdGUgbmFtZSBpcyAiTmV0QlNELUNPUkUiIGZvcgorICogaW5mb3JtYXRpb24gdGhhdCBpcyBnbG9iYWwgdG8gdGhlIHByb2Nlc3MsIGFuZCAiTmV0QlNELUNPUkVAbm4iLAorICogd2hlcmUgIm5uIiBpcyB0aGUgbHdwaWQgb2YgdGhlIExXUCB0aGF0IHRoZSBpbmZvcm1hdGlvbiBiZWxvbmdzCisgKiB0byAoc3VjaCBhcyByZWdpc3RlciBzdGF0ZSkuCisgKgorICogV2UgdXNlIHRoZSBmb2xsb3dpbmcgbm90ZSBpZGVudGlmaWVyczoKKyAqCisgKglFTEZfTk9URV9ORVRCU0RfQ09SRV9QUk9DSU5GTworICoJCU5vdGUgaXMgYSAibmV0YnNkX2VsZmNvcmVfcHJvY2luZm8iIHN0cnVjdHVyZS4KKyAqCisgKiBXZSBhbHNvIHVzZSBwdHJhY2UoMikgcmVxdWVzdCBudW1iZXJzICh0aGUgb25lcyB0aGF0IGV4aXN0IGluCisgKiBtYWNoaW5lLWRlcGVuZGVudCBzcGFjZSkgdG8gaWRlbnRpZnkgcmVnaXN0ZXIgaW5mbyBub3Rlcy4gIFRoZQorICogaW5mbyBpbiBzdWNoIG5vdGVzIGlzIGluIHRoZSBzYW1lIGZvcm1hdCB0aGF0IHB0cmFjZSgyKSB3b3VsZAorICogZXhwb3J0IHRoYXQgaW5mb3JtYXRpb24uCisgKgorICogUGxlYXNlIHRyeSB0byBrZWVwIHRoZSBtZW1iZXJzIG9mIHRoaXMgc3RydWN0dXJlIG5pY2VseSBhbGlnbmVkLAorICogYW5kIGlmIHlvdSBhZGQgZWxlbWVudHMsIGFkZCB0aGVtIHRvIHRoZSBlbmQgYW5kIGJ1bXAgdGhlIHZlcnNpb24uCisgKi8KKworI2RlZmluZSBFTEZfTk9URV9ORVRCU0RfQ09SRV9OQU1FCSJOZXRCU0QtQ09SRSIKKworI2RlZmluZSBFTEZfTk9URV9ORVRCU0RfQ09SRV9QUk9DSU5GTwkxCisKKyNkZWZpbmUgTkVUQlNEX0VMRkNPUkVfUFJPQ0lORk9fVkVSU0lPTiAxCisKK3N0cnVjdCBuZXRic2RfZWxmY29yZV9wcm9jaW5mbyB7CisJLyogVmVyc2lvbiAxIGZpZWxkcyBzdGFydCBoZXJlLiAqLworCXVpbnQzMl90CWNwaV92ZXJzaW9uOwkJLyogb3VyIHZlcnNpb24gKi8KKwl1aW50MzJfdAljcGlfY3Bpc2l6ZTsJCS8qIHNpemVvZih0aGlzIHN0cnVjdCkgKi8KKwl1aW50MzJfdAljcGlfc2lnbm87CQkvKiBraWxsaW5nIHNpZ25hbCAqLworCXVpbnQzMl90CWNwaV9zaWdjb2RlOwkJLyogc2lnbmFsIGNvZGUgKi8KKwl1aW50MzJfdAljcGlfc2lncGVuZFs0XTsJCS8qIHBlbmRpbmcgc2lnbmFscyAqLworCXVpbnQzMl90CWNwaV9zaWdtYXNrWzRdOwkJLyogYmxvY2tlZCBzaWduYWxzICovCisJdWludDMyX3QJY3BpX3NpZ2lnbm9yZVs0XTsJLyogaWdub3JlZCBzaWduYWxzICovCisJdWludDMyX3QJY3BpX3NpZ2NhdGNoWzRdOwkvKiBjYXVnaHQgc2lnbmFscyAqLworCWludDMyX3QJCWNwaV9waWQ7CQkvKiBwcm9jZXNzIElEICovCisJaW50MzJfdAkJY3BpX3BwaWQ7CQkvKiBwYXJlbnQgcHJvY2VzcyBJRCAqLworCWludDMyX3QJCWNwaV9wZ3JwOwkJLyogcHJvY2VzcyBncm91cCBJRCAqLworCWludDMyX3QJCWNwaV9zaWQ7CQkvKiBzZXNzaW9uIElEICovCisJdWludDMyX3QJY3BpX3J1aWQ7CQkvKiByZWFsIHVzZXIgSUQgKi8KKwl1aW50MzJfdAljcGlfZXVpZDsJCS8qIGVmZmVjdGl2ZSB1c2VyIElEICovCisJdWludDMyX3QJY3BpX3N2dWlkOwkJLyogc2F2ZWQgdXNlciBJRCAqLworCXVpbnQzMl90CWNwaV9yZ2lkOwkJLyogcmVhbCBncm91cCBJRCAqLworCXVpbnQzMl90CWNwaV9lZ2lkOwkJLyogZWZmZWN0aXZlIGdyb3VwIElEICovCisJdWludDMyX3QJY3BpX3N2Z2lkOwkJLyogc2F2ZWQgZ3JvdXAgSUQgKi8KKwl1aW50MzJfdAljcGlfbmx3cHM7CQkvKiBudW1iZXIgb2YgTFdQcyAqLworCWludDhfdAkJY3BpX25hbWVbMzJdOwkJLyogY29weSBvZiBwLT5wX2NvbW0gKi8KKwkvKiBBZGQgdmVyc2lvbiAyIGZpZWxkcyBiZWxvdyBoZXJlLiAqLworCWludDMyX3QJCWNwaV9zaWdsd3A7CS8qIExXUCB0YXJnZXQgb2Yga2lsbGluZyBzaWduYWwgKi8KK307CisKKyNpZiAhZGVmaW5lZChFTEZTSVpFKSAmJiBkZWZpbmVkKEFSQ0hfRUxGU0laRSkKKyNkZWZpbmUgRUxGU0laRSBBUkNIX0VMRlNJWkUKKyNlbmRpZgorCisjaWYgZGVmaW5lZChFTEZTSVpFKQorI2RlZmluZSBDT05DQVQoeCx5KQlfX0NPTkNBVCh4LHkpCisjZGVmaW5lIEVMRk5BTUUoeCkJQ09OQ0FUKGVsZixDT05DQVQoRUxGU0laRSxDT05DQVQoXyx4KSkpCisjZGVmaW5lIEVMRk5BTUUyKHgseSkJQ09OQ0FUKHgsQ09OQ0FUKF9lbGYsQ09OQ0FUKEVMRlNJWkUsQ09OQ0FUKF8seSkpKSkKKyNkZWZpbmUgRUxGTkFNRUVORCh4KQlDT05DQVQoeCxDT05DQVQoX2VsZixFTEZTSVpFKSkKKyNkZWZpbmUgRUxGREVGTk5BTUUoeCkJQ09OQ0FUKEVMRixDT05DQVQoRUxGU0laRSxDT05DQVQoXyx4KSkpCisjZW5kaWYKKworI2lmIGRlZmluZWQoRUxGU0laRSkgJiYgKEVMRlNJWkUgPT0gMzIpCisjZGVmaW5lIEVsZl9FaGRyCUVsZjMyX0VoZHIKKyNkZWZpbmUgRWxmX1BoZHIJRWxmMzJfUGhkcgorI2RlZmluZSBFbGZfU2hkcglFbGYzMl9TaGRyCisjZGVmaW5lIEVsZl9TeW0JCUVsZjMyX1N5bQorI2RlZmluZSBFbGZfUmVsCQlFbGYzMl9SZWwKKyNkZWZpbmUgRWxmX1JlbGEJRWxmMzJfUmVsYQorI2RlZmluZSBFbGZfRHluCQlFbGYzMl9EeW4KKyNkZWZpbmUgRWxmX1dvcmQJRWxmMzJfV29yZAorI2RlZmluZSBFbGZfU3dvcmQJRWxmMzJfU3dvcmQKKyNkZWZpbmUgRWxmX0hhbGYJRWxmMzJfSGFsZgorI2RlZmluZSBFbGZfQWRkcglFbGYzMl9BZGRyCisjZGVmaW5lIEVsZl9PZmYJCUVsZjMyX09mZgorI2RlZmluZSBFbGZfU09mZglFbGYzMl9TT2ZmCisjZGVmaW5lIEVsZl9OaGRyCUVsZjMyX05oZHIKKyNkZWZpbmUgRWxmX1ZlcmRlZglFbGYzMl9WZXJkZWYKKyNkZWZpbmUgRWxmX1ZlcmRhdXgJRWxmMzJfVmVyZGF1eAorI2RlZmluZSBFbGZfVmVybmVlZAlFbGYzMl9WZXJuZWVkCisjZGVmaW5lIEVsZl9WZXJuYXV4CUVsZjMyX1Zlcm5hdXgKKyNkZWZpbmUgRWxmX1ZlcnN5bQlFbGYzMl9WZXJzeW0KKworI2RlZmluZSBFTEZfUl9TWU0JRUxGMzJfUl9TWU0KKyNkZWZpbmUgRUxGX1JfVFlQRQlFTEYzMl9SX1RZUEUKKyNkZWZpbmUgRUxGQ0xBU1MJRUxGQ0xBU1MzMgorCisjZGVmaW5lIEF1eEluZm8JCUF1eDMySW5mbworI2VsaWYgZGVmaW5lZChFTEZTSVpFKSAmJiAoRUxGU0laRSA9PSA2NCkKKyNkZWZpbmUgRWxmX0VoZHIJRWxmNjRfRWhkcgorI2RlZmluZSBFbGZfUGhkcglFbGY2NF9QaGRyCisjZGVmaW5lIEVsZl9TaGRyCUVsZjY0X1NoZHIKKyNkZWZpbmUgRWxmX1N5bQkJRWxmNjRfU3ltCisjZGVmaW5lIEVsZl9SZWwJCUVsZjY0X1JlbAorI2RlZmluZSBFbGZfUmVsYQlFbGY2NF9SZWxhCisjZGVmaW5lIEVsZl9EeW4JCUVsZjY0X0R5bgorI2RlZmluZSBFbGZfV29yZAlFbGY2NF9Xb3JkCisjZGVmaW5lIEVsZl9Td29yZAlFbGY2NF9Td29yZAorI2RlZmluZSBFbGZfSGFsZglFbGY2NF9IYWxmCisjZGVmaW5lIEVsZl9BZGRyCUVsZjY0X0FkZHIKKyNkZWZpbmUgRWxmX09mZgkJRWxmNjRfT2ZmCisjZGVmaW5lIEVsZl9TT2ZmCUVsZjY0X1NPZmYKKyNkZWZpbmUgRWxmX05oZHIJRWxmNjRfTmhkcgorI2RlZmluZSBFbGZfVmVyZGVmCUVsZjY0X1ZlcmRlZgorI2RlZmluZSBFbGZfVmVyZGF1eAlFbGY2NF9WZXJkYXV4CisjZGVmaW5lIEVsZl9WZXJuZWVkCUVsZjY0X1Zlcm5lZWQKKyNkZWZpbmUgRWxmX1Zlcm5hdXgJRWxmNjRfVmVybmF1eAorI2RlZmluZSBFbGZfVmVyc3ltCUVsZjY0X1ZlcnN5bQorCisjZGVmaW5lIEVMRl9SX1NZTQlFTEY2NF9SX1NZTQorI2RlZmluZSBFTEZfUl9UWVBFCUVMRjY0X1JfVFlQRQorI2RlZmluZSBFTEZDTEFTUwlFTEZDTEFTUzY0CisKKyNkZWZpbmUgQXV4SW5mbwkJQXV4NjRJbmZvCisjZW5kaWYKKworI2lmbmRlZiBFbGZfU3ltaW5keAorI2RlZmluZSBFbGZfU3ltaW5keAl1aW50MzJfdAorI2VuZGlmCisKKyNkZWZpbmUgRUxGMzJfU1RfQklORChpbmZvKQkJRUxGX1NUX0JJTkQoaW5mbykKKyNkZWZpbmUgRUxGMzJfU1RfVFlQRShpbmZvKQkJRUxGX1NUX1RZUEUoaW5mbykKKyNkZWZpbmUgRUxGMzJfU1RfSU5GTyhiaW5kLHR5cGUpCUVMRl9TVF9JTkZPKGJpbmQsdHlwZSkKKyNkZWZpbmUgRUxGMzJfU1RfVklTSUJJTElUWShvdGhlcikJRUxGX1NUX1ZJU0lCSUxJVFkob3RoZXIpCisKKyNkZWZpbmUgRUxGNjRfU1RfQklORChpbmZvKQkJRUxGX1NUX0JJTkQoaW5mbykKKyNkZWZpbmUgRUxGNjRfU1RfVFlQRShpbmZvKQkJRUxGX1NUX1RZUEUoaW5mbykKKyNkZWZpbmUgRUxGNjRfU1RfSU5GTyhiaW5kLHR5cGUpCUVMRl9TVF9JTkZPKGJpbmQsdHlwZSkKKyNkZWZpbmUgRUxGNjRfU1RfVklTSUJJTElUWShvdGhlcikJRUxGX1NUX1ZJU0lCSUxJVFkob3RoZXIpCisKK3R5cGVkZWYgc3RydWN0IHsKKwlFbGYzMl9IYWxmCXNpX2JvdW5kdG87CS8qIGRpcmVjdCBiaW5kaW5ncyAtIHN5bWJvbCBib3VuZCB0byAqLworCUVsZjMyX0hhbGYJc2lfZmxhZ3M7CS8qIHBlciBzeW1ib2wgZmxhZ3MgKi8KK30gRWxmMzJfU3ltaW5mbzsKKwordHlwZWRlZiBzdHJ1Y3QgeworCUVsZjY0X1dvcmQJc2lfYm91bmR0bzsJLyogZGlyZWN0IGJpbmRpbmdzIC0gc3ltYm9sIGJvdW5kIHRvICovCisJRWxmNjRfV29yZAlzaV9mbGFnczsJLyogcGVyIHN5bWJvbCBmbGFncyAqLworfSBFbGY2NF9TeW1pbmZvOworCisjZGVmaW5lIFNZTUlORk9fRkxHX0RJUkVDVAkweDAwMDEJLyogc3ltYm9sIHJlZiBoYXMgZGlyZWN0IGFzc29jaWF0aW9uCisJCQkJCSAgIHRvIG9iamVjdCBjb250YWluaW5nIGRlZmluaXRpb24gKi8KKyNkZWZpbmUgU1lNSU5GT19GTEdfUEFTU1RIUlUJMHgwMDAyCS8qIGlnbm9yZWQgLSBzZWUgU1lNSU5GT19GTEdfRklMVEVSICovCisjZGVmaW5lIFNZTUlORk9fRkxHX0NPUFkJMHgwMDA0CS8qIHN5bWJvbCBpcyBhIGNvcHktcmVsb2MgKi8KKyNkZWZpbmUgU1lNSU5GT19GTEdfTEFaWUxPQUQJMHgwMDA4CS8qIG9iamVjdCBjb250YWluaW5nIGRlZm4gc2hvdWxkIGJlCisJCQkJCSAgIGxhemlseS1sb2FkZWQgKi8KKyNkZWZpbmUgU1lNSU5GT19GTEdfRElSRUNUQklORAkweDAwMTAJLyogcmVmIHNob3VsZCBiZSBib3VuZCBkaXJlY3RseSB0bworCQkJCQkgICBvYmplY3QgY29udGFpbmluZyBkZWZpbml0aW9uICovCisjZGVmaW5lIFNZTUlORk9fRkxHX05PRVhURElSRUNUIDB4MDAyMAkvKiBkb24ndCBsZXQgYW4gZXh0ZXJuYWwgcmVmZXJlbmNlCisJCQkJCSAgIGRpcmVjdGx5IGJpbmQgdG8gdGhpcyBzeW1ib2wgKi8KKyNkZWZpbmUgU1lNSU5GT19GTEdfRklMVEVSCTB4MDAwMgkvKiBzeW1ib2wgcmVmIGlzIGFzc29jaWF0ZWQgdG8gYSAqLworI2RlZmluZSBTWU1JTkZPX0ZMR19BVVhJTElBUlkJMHgwMDQwCS8qCXN0YW5kYXJkIG9yIGF1eGlsaWFyeSBmaWx0ZXIgKi8KKworI2RlZmluZSBTWU1JTkZPX0JUX1NFTEYJCTB4ZmZmZgkvKiBzeW1ib2wgYm91bmQgdG8gc2VsZiAqLworI2RlZmluZSBTWU1JTkZPX0JUX1BBUkVOVAkweGZmZmUJLyogc3ltYm9sIGJvdW5kIHRvIHBhcmVudCAqLworI2RlZmluZSBTWU1JTkZPX0JUX05PTkUJCTB4ZmZmZAkvKiBubyBzcGVjaWFsIHN5bWJvbCBiaW5kaW5nICovCisjZGVmaW5lIFNZTUlORk9fQlRfRVhURVJOCTB4ZmZmYwkvKiBzeW1ib2wgZGVmaW5lZCBhcyBleHRlcm5hbCAqLworI2RlZmluZSBTWU1JTkZPX0JUX0xPV1JFU0VSVkUJMHhmZjAwCS8qIGJlZ2lubmluZyBvZiByZXNlcnZlZCBlbnRyaWVzICovCisKKyNkZWZpbmUgU1lNSU5GT19OT05FCQkwCS8qIFN5bWluZm8gdmVyc2lvbiAqLworI2RlZmluZSBTWU1JTkZPX0NVUlJFTlQJCTEKKyNkZWZpbmUgU1lNSU5GT19OVU0JCTIKKworLyoKKyAqIFRoZXNlIGNvbnN0YW50cyBhcmUgdXNlZCBmb3IgRWxmMzJfVmVyZGVmIHN0cnVjdCdzIHZlcnNpb24gbnVtYmVyLiAgCisgKi8KKyNkZWZpbmUgVkVSX0RFRl9OT05FCQkwCisjZGVmaW5lIFZFUl9ERUZfQ1VSUkVOVAkJMQorCisvKgorICogVGhlc2UgY29uc3RhbnRzIGFyZSB1c2VkIGZvciBFbGYzMl9WZXJkZWYgc3RydWN0J3MgdmRfbmR4LgorICovCisjZGVmaW5lIFZFUl9ERUZfSURYKHgpCQlWRVJfTkRYKHgpCisKKy8qCisgKiBUaGVzZSBjb25zdGFudHMgYXJlIHVzZWQgZm9yIEVsZjMyX1ZlcmRlZiBzdHJ1Y3QncyB2ZF9mbGFncy4JIAorICovCisjZGVmaW5lIFZFUl9GTEdfQkFTRQkJMHgxCisjZGVmaW5lIFZFUl9GTEdfV0VBSwkJMHgyCisKKy8qCisgKiBUaGVzZSBhcmUgdXNlZCBpbiBhbiBFbGYzMl9WZXJzeW0gZmllbGQuCisgKi8KKyNkZWZpbmUgVkVSX05EWF9MT0NBTAkJMAorI2RlZmluZSBWRVJfTkRYX0dMT0JBTAkJMQorI2RlZmluZSBWRVJfTkRYX0dJVkVOCQkyCisKKy8qCisgKiBUaGVzZSBjb25zdGFudHMgYXJlIHVzZWQgZm9yIEVsZjMyX1Zlcm5lZWQgc3RydWN0J3MgdmVyc2lvbiBudW1iZXIuCQorICovCisjZGVmaW5lIFZFUl9ORUVEX05PTkUJCTAKKyNkZWZpbmUgVkVSX05FRURfQ1VSUkVOVAkxCisKKy8qCisgKiBUaGVzZSBjb25zdGFudHMgYXJlIHVzZWQgZm9yIEVsZjMyX1Zlcm5hdXggc3RydWN0J3Mgdm5hX290aGVyLgorICovCisjZGVmaW5lIFZFUl9ORUVEX0hJRERFTgkJVkVSX05EWF9ISURERU4KKyNkZWZpbmUgVkVSX05FRURfSURYKHgpCQlWRVJfTkRYKHgpCisKKy8qIGluZGV4ICovCisjZGVmaW5lIFZFUl9ORFhfSElEREVOCQkweDgwMDAKKyNkZWZpbmUgVkVSX05EWCh4KQkJKCh4KSAmIH5WRVJfTkRYX0hJRERFTikKKworLyoKKyAqIEdOVSBFeHRlbnNpb24gaGlkZGluZyBzeW1ib2wKKyAqLworI2RlZmluZSBWRVJTWU1fSElEREVOCQkweDgwMDAKKyNkZWZpbmUgVkVSU1lNX1ZFUlNJT04JCTB4N2ZmZgorCisjZGVmaW5lIEVMRl9WRVJfQ0hSCQknQCcKKworLyoKKyAqIFRoZXNlIGFyZSBjdXJyZW50IHNpemUgaW5kZXBlbmRlbnQuCisgKi8KKwordHlwZWRlZiBzdHJ1Y3QgeworCUVsZjMyX0hhbGYJdmRfdmVyc2lvbjsJLyogdmVyc2lvbiBudW1iZXIgb2Ygc3RydWN0dXJlICovCisJRWxmMzJfSGFsZgl2ZF9mbGFnczsJLyogZmxhZ3MgKFZFUl9GTEdfKikgKi8KKwlFbGYzMl9IYWxmCXZkX25keDsJCS8qIHZlcnNpb24gaW5kZXggKi8KKwlFbGYzMl9IYWxmCXZkX2NudDsJCS8qIG51bWJlciBvZiB2ZXJkYXV4IGVudHJpZXMgKi8KKwlFbGYzMl9Xb3JkCXZkX2hhc2g7CS8qIGhhc2ggb2YgbmFtZSAqLworCUVsZjMyX1dvcmQJdmRfYXV4OwkJLyogb2Zmc2V0IHRvIHZlcmRhdXggZW50cmllcyAqLworCUVsZjMyX1dvcmQJdmRfbmV4dDsJLyogb2Zmc2V0IHRvIG5leHQgdmVyZGVmICovCit9IEVsZjMyX1ZlcmRlZjsKK3R5cGVkZWYgRWxmMzJfVmVyZGVmCUVsZjY0X1ZlcmRlZjsKKwordHlwZWRlZiBzdHJ1Y3QgeworCUVsZjMyX1dvcmQJdmRhX25hbWU7CS8qIHN0cmluZyB0YWJsZSBvZmZzZXQgb2YgbmFtZSAqLworCUVsZjMyX1dvcmQJdmRhX25leHQ7CS8qIG9mZnNldCB0byB2ZXJkYXV4ICovCit9IEVsZjMyX1ZlcmRhdXg7Cit0eXBlZGVmIEVsZjMyX1ZlcmRhdXgJRWxmNjRfVmVyZGF1eDsKKwordHlwZWRlZiBzdHJ1Y3QgeworCUVsZjMyX0hhbGYJdm5fdmVyc2lvbjsJLyogdmVyc2lvbiBudW1iZXIgb2Ygc3RydWN0dXJlICovCisJRWxmMzJfSGFsZgl2bl9jbnQ7CQkvKiBudW1iZXIgb2YgdmVybmF1eCBlbnRyaWVzICovCisJRWxmMzJfV29yZAl2bl9maWxlOwkvKiBzdHJpbmcgdGFibGUgb2Zmc2V0IG9mIGxpYnJhcnkgbmFtZSovCisJRWxmMzJfV29yZAl2bl9hdXg7CQkvKiBvZmZzZXQgdG8gdmVybmF1eCBlbnRyaWVzICovCisJRWxmMzJfV29yZAl2bl9uZXh0OwkvKiBvZmZzZXQgdG8gbmV4dCB2ZXJuZWVkICovCit9IEVsZjMyX1Zlcm5lZWQ7Cit0eXBlZGVmIEVsZjMyX1Zlcm5lZWQJRWxmNjRfVmVybmVlZDsKKwordHlwZWRlZiBzdHJ1Y3QgeworCUVsZjMyX1dvcmQJdm5hX2hhc2g7CS8qIEhhc2ggb2YgZGVwZW5kZW5jeSBuYW1lICovCisJRWxmMzJfSGFsZgl2bmFfZmxhZ3M7CS8qIGZsYWdzIChWRVJfRkxHXyopICovCisJRWxmMzJfSGFsZgl2bmFfb3RoZXI7CS8qIHVudXNlZCAqLworCUVsZjMyX1dvcmQJdm5hX25hbWU7CS8qIHN0cmluZyB0YWJsZSBvZmZzZXQgdG8gdmVyc2lvbiBuYW1lKi8KKwlFbGYzMl9Xb3JkCXZuYV9uZXh0OwkvKiBvZmZzZXQgdG8gbmV4dCB2ZXJuYXV4ICovCit9IEVsZjMyX1Zlcm5hdXg7Cit0eXBlZGVmIEVsZjMyX1Zlcm5hdXgJRWxmNjRfVmVybmF1eDsKKwordHlwZWRlZiBzdHJ1Y3QgeworCUVsZjMyX0hhbGYJdnNfdmVyczsKK30gRWxmMzJfVmVyc3ltOwordHlwZWRlZiBFbGYzMl9WZXJzeW0JRWxmNjRfVmVyc3ltOworCisjaWZkZWYgX0tFUk5FTAorCisjZGVmaW5lIEVMRl9BVVhfRU5UUklFUyAxNQkvKiBNYXggc2l6ZSBvZiBhdXggYXJyYXkgcGFzc2VkIHRvIGxvYWRlciAqLworI2RlZmluZSBFTEYzMl9OT19BRERSCSh+KEVsZjMyX0FkZHIpMCkgLyogSW5kaWNhdGVzIGFkZHIuIG5vdCB5ZXQgZmlsbGVkIGluICovCisjZGVmaW5lIEVMRjMyX0xJTktfQUREUiAoKEVsZjMyX0FkZHIpLTIpIC8qIGFkdmlzZXMgdG8gdXNlIGxpbmsgYWRkcmVzcyAqLworI2RlZmluZSBFTEY2NF9OT19BRERSCSh+KEVsZjY0X0FkZHIpMCkgLyogSW5kaWNhdGVzIGFkZHIuIG5vdCB5ZXQgZmlsbGVkIGluICovCisjZGVmaW5lIEVMRjY0X0xJTktfQUREUiAoKEVsZjY0X0FkZHIpLTIpIC8qIGFkdmlzZXMgdG8gdXNlIGxpbmsgYWRkcmVzcyAqLworCisjaWYgZGVmaW5lZChFTEZTSVpFKSAmJiAoRUxGU0laRSA9PSA2NCkKKyNkZWZpbmUgRUxGX05PX0FERFIJRUxGNjRfTk9fQUREUgorI2RlZmluZSBFTEZfTElOS19BRERSCUVMRjY0X0xJTktfQUREUgorI2VsaWYgZGVmaW5lZChFTEZTSVpFKSAmJiAoRUxGU0laRSA9PSAzMikKKyNkZWZpbmUgRUxGX05PX0FERFIJRUxGMzJfTk9fQUREUgorI2RlZmluZSBFTEZfTElOS19BRERSCUVMRjMyX0xJTktfQUREUgorI2VuZGlmCisKKyNpZm5kZWYgRUxGMzJfRUhEUl9GTEFHU19PSworI2RlZmluZSBFTEYzMl9FSERSX0ZMQUdTX09LKGVoKSAxCisjZW5kaWYKKworI2lmbmRlZiBFTEY2NF9FSERSX0ZMQUdTX09LCisjZGVmaW5lIEVMRjY0X0VIRFJfRkxBR1NfT0soZWgpIDEKKyNlbmRpZgorCisjaWYgZGVmaW5lZChFTEZTSVpFKSAmJiAoRUxGU0laRSA9PSA2NCkKKyNkZWZpbmUgRUxGX0VIRFJfRkxBR1NfT0soZWgpCUVMRjY0X0VIRFJfRkxBR1NfT0soZWgpCisjZWxzZQorI2RlZmluZSBFTEZfRUhEUl9GTEFHU19PSyhlaCkJRUxGMzJfRUhEUl9GTEFHU19PSyhlaCkKKyNlbmRpZgorCisjaWYgZGVmaW5lZChFTEZTSVpFKQorc3RydWN0IGVsZl9hcmdzIHsKKwlFbGZfQWRkcglhcmdfZW50cnk7CS8qIHByb2dyYW0gZW50cnkgcG9pbnQgKi8KKwlFbGZfQWRkcglhcmdfaW50ZXJwOwkvKiBJbnRlcnByZXRlciBsb2FkIGFkZHJlc3MgKi8KKwlFbGZfQWRkcglhcmdfcGhhZGRyOwkvKiBwcm9ncmFtIGhlYWRlciBhZGRyZXNzICovCisJRWxmX0FkZHIJYXJnX3BoZW50c2l6ZTsJLyogU2l6ZSBvZiBwcm9ncmFtIGhlYWRlciAqLworCUVsZl9BZGRyCWFyZ19waG51bTsJLyogTnVtYmVyIG9mIHByb2dyYW0gaGVhZGVycyAqLworfTsKKyNlbmRpZgorCisjaWZkZWYgX0tFUk5FTF9PUFQKKyNpbmNsdWRlICJvcHRfZXhlY2ZtdC5oIgorI2VuZGlmCisKK3N0cnVjdCBwc19zdHJpbmdzOworCisjaWZkZWYgRVhFQ19FTEYzMgoraW50CWV4ZWNfZWxmMzJfbWFrZWNtZHMoc3RydWN0IGx3cCAqLCBzdHJ1Y3QgZXhlY19wYWNrYWdlICopOworaW50CWVsZjMyX2NvcHlhcmdzKHN0cnVjdCBsd3AgKiwgc3RydWN0IGV4ZWNfcGFja2FnZSAqLAorICAgIHN0cnVjdCBwc19zdHJpbmdzICosIGNoYXIgKiosIHZvaWQgKik7CisKK2ludAljb3JlZHVtcF9lbGYzMihzdHJ1Y3QgbHdwICosIHZvaWQgKik7CitpbnQJY29yZWR1bXBfd3JpdGVub3RlX2VsZjMyKHN0cnVjdCBwcm9jICosIHZvaWQgKiwgRWxmMzJfTmhkciAqLAorICAgIGNvbnN0IGNoYXIgKiwgdm9pZCAqKTsKKworaW50CWVsZjMyX2NoZWNrX2hlYWRlcihFbGYzMl9FaGRyICosIGludCk7CisjZW5kaWYKKworI2lmZGVmIEVYRUNfRUxGNjQKK2ludAlleGVjX2VsZjY0X21ha2VjbWRzKHN0cnVjdCBsd3AgKiwgc3RydWN0IGV4ZWNfcGFja2FnZSAqKTsKK2ludAllbGY2NF9jb3B5YXJncyhzdHJ1Y3QgbHdwICosIHN0cnVjdCBleGVjX3BhY2thZ2UgKiwKKyAgICBzdHJ1Y3QgcHNfc3RyaW5ncyAqLCBjaGFyICoqLCB2b2lkICopOworCitpbnQJY29yZWR1bXBfZWxmNjQoc3RydWN0IGx3cCAqLCB2b2lkICopOworaW50CWNvcmVkdW1wX3dyaXRlbm90ZV9lbGY2NChzdHJ1Y3QgcHJvYyAqLCB2b2lkICosIEVsZjY0X05oZHIgKiwKKyAgICBjb25zdCBjaGFyICosIHZvaWQgKik7CisKK2ludAllbGY2NF9jaGVja19oZWFkZXIoRWxmNjRfRWhkciAqLCBpbnQpOworI2VuZGlmCisKKyNlbmRpZiAvKiBfS0VSTkVMICovCisKKyNlbmRpZiAvKiAhX1NZU19FWEVDX0VMRl9IXyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL3N5cy9nbGliYy1zeXNjYWxscy5oIGIvbGliYy9pbmNsdWRlL3N5cy9nbGliYy1zeXNjYWxscy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0ZjM3YzgKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2luY2x1ZGUvc3lzL2dsaWJjLXN5c2NhbGxzLmgKQEAgLTAsMCArMSwxMDUwIEBACisvKiBBdXRvLWdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weTsgZG8gbm90IGVkaXQuICovCisjaWZuZGVmIF9CSU9OSUNfR0xJQkNfU1lTQ0FMTFNfSF8KKyNkZWZpbmUgX0JJT05JQ19HTElCQ19TWVNDQUxMU19IXworI2lmIGRlZmluZWQoX19hcm1fXykKKyNkZWZpbmUgU1lTX2FjY2VwdCBfX05SX2FjY2VwdAorI2RlZmluZSBTWVNfYWNjZXB0NCBfX05SX2FjY2VwdDQKKyNkZWZpbmUgU1lTX2FjY2VzcyBfX05SX2FjY2VzcworI2RlZmluZSBTWVNfYWNjdCBfX05SX2FjY3QKKyNkZWZpbmUgU1lTX2FkZF9rZXkgX19OUl9hZGRfa2V5CisjZGVmaW5lIFNZU19hZGp0aW1leCBfX05SX2FkanRpbWV4CisjZGVmaW5lIFNZU19hbGFybSBfX05SX2FsYXJtCisjZGVmaW5lIFNZU19hcm1fZmFkdmlzZTY0XzY0IF9fTlJfYXJtX2ZhZHZpc2U2NF82NAorI2RlZmluZSBTWVNfYXJtX3N5bmNfZmlsZV9yYW5nZSBfX05SX2FybV9zeW5jX2ZpbGVfcmFuZ2UKKyNkZWZpbmUgU1lTX2JkZmx1c2ggX19OUl9iZGZsdXNoCisjZGVmaW5lIFNZU19iaW5kIF9fTlJfYmluZAorI2RlZmluZSBTWVNfYnJrIF9fTlJfYnJrCisjZGVmaW5lIFNZU19jYXBnZXQgX19OUl9jYXBnZXQKKyNkZWZpbmUgU1lTX2NhcHNldCBfX05SX2NhcHNldAorI2RlZmluZSBTWVNfY2hkaXIgX19OUl9jaGRpcgorI2RlZmluZSBTWVNfY2htb2QgX19OUl9jaG1vZAorI2RlZmluZSBTWVNfY2hvd24gX19OUl9jaG93bgorI2RlZmluZSBTWVNfY2hvd24zMiBfX05SX2Nob3duMzIKKyNkZWZpbmUgU1lTX2Nocm9vdCBfX05SX2Nocm9vdAorI2RlZmluZSBTWVNfY2xvY2tfYWRqdGltZSBfX05SX2Nsb2NrX2FkanRpbWUKKyNkZWZpbmUgU1lTX2Nsb2NrX2dldHJlcyBfX05SX2Nsb2NrX2dldHJlcworI2RlZmluZSBTWVNfY2xvY2tfZ2V0dGltZSBfX05SX2Nsb2NrX2dldHRpbWUKKyNkZWZpbmUgU1lTX2Nsb2NrX25hbm9zbGVlcCBfX05SX2Nsb2NrX25hbm9zbGVlcAorI2RlZmluZSBTWVNfY2xvY2tfc2V0dGltZSBfX05SX2Nsb2NrX3NldHRpbWUKKyNkZWZpbmUgU1lTX2Nsb25lIF9fTlJfY2xvbmUKKyNkZWZpbmUgU1lTX2Nsb3NlIF9fTlJfY2xvc2UKKyNkZWZpbmUgU1lTX2Nvbm5lY3QgX19OUl9jb25uZWN0CisjZGVmaW5lIFNZU19jcmVhdCBfX05SX2NyZWF0CisjZGVmaW5lIFNZU19kZWxldGVfbW9kdWxlIF9fTlJfZGVsZXRlX21vZHVsZQorI2RlZmluZSBTWVNfZHVwIF9fTlJfZHVwCisjZGVmaW5lIFNZU19kdXAyIF9fTlJfZHVwMgorI2RlZmluZSBTWVNfZHVwMyBfX05SX2R1cDMKKyNkZWZpbmUgU1lTX2Vwb2xsX2NyZWF0ZSBfX05SX2Vwb2xsX2NyZWF0ZQorI2RlZmluZSBTWVNfZXBvbGxfY3JlYXRlMSBfX05SX2Vwb2xsX2NyZWF0ZTEKKyNkZWZpbmUgU1lTX2Vwb2xsX2N0bCBfX05SX2Vwb2xsX2N0bAorI2RlZmluZSBTWVNfZXBvbGxfcHdhaXQgX19OUl9lcG9sbF9wd2FpdAorI2RlZmluZSBTWVNfZXBvbGxfd2FpdCBfX05SX2Vwb2xsX3dhaXQKKyNkZWZpbmUgU1lTX2V2ZW50ZmQgX19OUl9ldmVudGZkCisjZGVmaW5lIFNZU19ldmVudGZkMiBfX05SX2V2ZW50ZmQyCisjZGVmaW5lIFNZU19leGVjdmUgX19OUl9leGVjdmUKKyNkZWZpbmUgU1lTX2V4aXQgX19OUl9leGl0CisjZGVmaW5lIFNZU19leGl0X2dyb3VwIF9fTlJfZXhpdF9ncm91cAorI2RlZmluZSBTWVNfZmFjY2Vzc2F0IF9fTlJfZmFjY2Vzc2F0CisjZGVmaW5lIFNZU19mYWxsb2NhdGUgX19OUl9mYWxsb2NhdGUKKyNkZWZpbmUgU1lTX2Zhbm90aWZ5X2luaXQgX19OUl9mYW5vdGlmeV9pbml0CisjZGVmaW5lIFNZU19mYW5vdGlmeV9tYXJrIF9fTlJfZmFub3RpZnlfbWFyaworI2RlZmluZSBTWVNfZmNoZGlyIF9fTlJfZmNoZGlyCisjZGVmaW5lIFNZU19mY2htb2QgX19OUl9mY2htb2QKKyNkZWZpbmUgU1lTX2ZjaG1vZGF0IF9fTlJfZmNobW9kYXQKKyNkZWZpbmUgU1lTX2ZjaG93biBfX05SX2ZjaG93bgorI2RlZmluZSBTWVNfZmNob3duMzIgX19OUl9mY2hvd24zMgorI2RlZmluZSBTWVNfZmNob3duYXQgX19OUl9mY2hvd25hdAorI2RlZmluZSBTWVNfZmNudGwgX19OUl9mY250bAorI2RlZmluZSBTWVNfZmNudGw2NCBfX05SX2ZjbnRsNjQKKyNkZWZpbmUgU1lTX2ZkYXRhc3luYyBfX05SX2ZkYXRhc3luYworI2RlZmluZSBTWVNfZmdldHhhdHRyIF9fTlJfZmdldHhhdHRyCisjZGVmaW5lIFNZU19mbGlzdHhhdHRyIF9fTlJfZmxpc3R4YXR0cgorI2RlZmluZSBTWVNfZmxvY2sgX19OUl9mbG9jaworI2RlZmluZSBTWVNfZm9yayBfX05SX2ZvcmsKKyNkZWZpbmUgU1lTX2ZyZW1vdmV4YXR0ciBfX05SX2ZyZW1vdmV4YXR0cgorI2RlZmluZSBTWVNfZnNldHhhdHRyIF9fTlJfZnNldHhhdHRyCisjZGVmaW5lIFNZU19mc3RhdCBfX05SX2ZzdGF0CisjZGVmaW5lIFNZU19mc3RhdDY0IF9fTlJfZnN0YXQ2NAorI2RlZmluZSBTWVNfZnN0YXRhdDY0IF9fTlJfZnN0YXRhdDY0CisjZGVmaW5lIFNZU19mc3RhdGZzIF9fTlJfZnN0YXRmcworI2RlZmluZSBTWVNfZnN0YXRmczY0IF9fTlJfZnN0YXRmczY0CisjZGVmaW5lIFNZU19mc3luYyBfX05SX2ZzeW5jCisjZGVmaW5lIFNZU19mdHJ1bmNhdGUgX19OUl9mdHJ1bmNhdGUKKyNkZWZpbmUgU1lTX2Z0cnVuY2F0ZTY0IF9fTlJfZnRydW5jYXRlNjQKKyNkZWZpbmUgU1lTX2Z1dGV4IF9fTlJfZnV0ZXgKKyNkZWZpbmUgU1lTX2Z1dGltZXNhdCBfX05SX2Z1dGltZXNhdAorI2RlZmluZSBTWVNfZ2V0X21lbXBvbGljeSBfX05SX2dldF9tZW1wb2xpY3kKKyNkZWZpbmUgU1lTX2dldF9yb2J1c3RfbGlzdCBfX05SX2dldF9yb2J1c3RfbGlzdAorI2RlZmluZSBTWVNfZ2V0Y3B1IF9fTlJfZ2V0Y3B1CisjZGVmaW5lIFNZU19nZXRjd2QgX19OUl9nZXRjd2QKKyNkZWZpbmUgU1lTX2dldGRlbnRzIF9fTlJfZ2V0ZGVudHMKKyNkZWZpbmUgU1lTX2dldGRlbnRzNjQgX19OUl9nZXRkZW50czY0CisjZGVmaW5lIFNZU19nZXRlZ2lkIF9fTlJfZ2V0ZWdpZAorI2RlZmluZSBTWVNfZ2V0ZWdpZDMyIF9fTlJfZ2V0ZWdpZDMyCisjZGVmaW5lIFNZU19nZXRldWlkIF9fTlJfZ2V0ZXVpZAorI2RlZmluZSBTWVNfZ2V0ZXVpZDMyIF9fTlJfZ2V0ZXVpZDMyCisjZGVmaW5lIFNZU19nZXRnaWQgX19OUl9nZXRnaWQKKyNkZWZpbmUgU1lTX2dldGdpZDMyIF9fTlJfZ2V0Z2lkMzIKKyNkZWZpbmUgU1lTX2dldGdyb3VwcyBfX05SX2dldGdyb3VwcworI2RlZmluZSBTWVNfZ2V0Z3JvdXBzMzIgX19OUl9nZXRncm91cHMzMgorI2RlZmluZSBTWVNfZ2V0aXRpbWVyIF9fTlJfZ2V0aXRpbWVyCisjZGVmaW5lIFNZU19nZXRwZWVybmFtZSBfX05SX2dldHBlZXJuYW1lCisjZGVmaW5lIFNZU19nZXRwZ2lkIF9fTlJfZ2V0cGdpZAorI2RlZmluZSBTWVNfZ2V0cGdycCBfX05SX2dldHBncnAKKyNkZWZpbmUgU1lTX2dldHBpZCBfX05SX2dldHBpZAorI2RlZmluZSBTWVNfZ2V0cHBpZCBfX05SX2dldHBwaWQKKyNkZWZpbmUgU1lTX2dldHByaW9yaXR5IF9fTlJfZ2V0cHJpb3JpdHkKKyNkZWZpbmUgU1lTX2dldHJlc2dpZCBfX05SX2dldHJlc2dpZAorI2RlZmluZSBTWVNfZ2V0cmVzZ2lkMzIgX19OUl9nZXRyZXNnaWQzMgorI2RlZmluZSBTWVNfZ2V0cmVzdWlkIF9fTlJfZ2V0cmVzdWlkCisjZGVmaW5lIFNZU19nZXRyZXN1aWQzMiBfX05SX2dldHJlc3VpZDMyCisjZGVmaW5lIFNZU19nZXRybGltaXQgX19OUl9nZXRybGltaXQKKyNkZWZpbmUgU1lTX2dldHJ1c2FnZSBfX05SX2dldHJ1c2FnZQorI2RlZmluZSBTWVNfZ2V0c2lkIF9fTlJfZ2V0c2lkCisjZGVmaW5lIFNZU19nZXRzb2NrbmFtZSBfX05SX2dldHNvY2tuYW1lCisjZGVmaW5lIFNZU19nZXRzb2Nrb3B0IF9fTlJfZ2V0c29ja29wdAorI2RlZmluZSBTWVNfZ2V0dGlkIF9fTlJfZ2V0dGlkCisjZGVmaW5lIFNZU19nZXR0aW1lb2ZkYXkgX19OUl9nZXR0aW1lb2ZkYXkKKyNkZWZpbmUgU1lTX2dldHVpZCBfX05SX2dldHVpZAorI2RlZmluZSBTWVNfZ2V0dWlkMzIgX19OUl9nZXR1aWQzMgorI2RlZmluZSBTWVNfZ2V0eGF0dHIgX19OUl9nZXR4YXR0cgorI2RlZmluZSBTWVNfaW5pdF9tb2R1bGUgX19OUl9pbml0X21vZHVsZQorI2RlZmluZSBTWVNfaW5vdGlmeV9hZGRfd2F0Y2ggX19OUl9pbm90aWZ5X2FkZF93YXRjaAorI2RlZmluZSBTWVNfaW5vdGlmeV9pbml0IF9fTlJfaW5vdGlmeV9pbml0CisjZGVmaW5lIFNZU19pbm90aWZ5X2luaXQxIF9fTlJfaW5vdGlmeV9pbml0MQorI2RlZmluZSBTWVNfaW5vdGlmeV9ybV93YXRjaCBfX05SX2lub3RpZnlfcm1fd2F0Y2gKKyNkZWZpbmUgU1lTX2lvX2NhbmNlbCBfX05SX2lvX2NhbmNlbAorI2RlZmluZSBTWVNfaW9fZGVzdHJveSBfX05SX2lvX2Rlc3Ryb3kKKyNkZWZpbmUgU1lTX2lvX2dldGV2ZW50cyBfX05SX2lvX2dldGV2ZW50cworI2RlZmluZSBTWVNfaW9fc2V0dXAgX19OUl9pb19zZXR1cAorI2RlZmluZSBTWVNfaW9fc3VibWl0IF9fTlJfaW9fc3VibWl0CisjZGVmaW5lIFNZU19pb2N0bCBfX05SX2lvY3RsCisjZGVmaW5lIFNZU19pb3ByaW9fZ2V0IF9fTlJfaW9wcmlvX2dldAorI2RlZmluZSBTWVNfaW9wcmlvX3NldCBfX05SX2lvcHJpb19zZXQKKyNkZWZpbmUgU1lTX2lwYyBfX05SX2lwYworI2RlZmluZSBTWVNfa2V4ZWNfbG9hZCBfX05SX2tleGVjX2xvYWQKKyNkZWZpbmUgU1lTX2tleWN0bCBfX05SX2tleWN0bAorI2RlZmluZSBTWVNfa2lsbCBfX05SX2tpbGwKKyNkZWZpbmUgU1lTX2xjaG93biBfX05SX2xjaG93bgorI2RlZmluZSBTWVNfbGNob3duMzIgX19OUl9sY2hvd24zMgorI2RlZmluZSBTWVNfbGdldHhhdHRyIF9fTlJfbGdldHhhdHRyCisjZGVmaW5lIFNZU19saW5rIF9fTlJfbGluaworI2RlZmluZSBTWVNfbGlua2F0IF9fTlJfbGlua2F0CisjZGVmaW5lIFNZU19saXN0ZW4gX19OUl9saXN0ZW4KKyNkZWZpbmUgU1lTX2xpc3R4YXR0ciBfX05SX2xpc3R4YXR0cgorI2RlZmluZSBTWVNfbGxpc3R4YXR0ciBfX05SX2xsaXN0eGF0dHIKKyNkZWZpbmUgU1lTX2xvb2t1cF9kY29va2llIF9fTlJfbG9va3VwX2Rjb29raWUKKyNkZWZpbmUgU1lTX2xyZW1vdmV4YXR0ciBfX05SX2xyZW1vdmV4YXR0cgorI2RlZmluZSBTWVNfbHNlZWsgX19OUl9sc2VlaworI2RlZmluZSBTWVNfbHNldHhhdHRyIF9fTlJfbHNldHhhdHRyCisjZGVmaW5lIFNZU19sc3RhdCBfX05SX2xzdGF0CisjZGVmaW5lIFNZU19sc3RhdDY0IF9fTlJfbHN0YXQ2NAorI2RlZmluZSBTWVNfbWFkdmlzZSBfX05SX21hZHZpc2UKKyNkZWZpbmUgU1lTX21iaW5kIF9fTlJfbWJpbmQKKyNkZWZpbmUgU1lTX21pbmNvcmUgX19OUl9taW5jb3JlCisjZGVmaW5lIFNZU19ta2RpciBfX05SX21rZGlyCisjZGVmaW5lIFNZU19ta2RpcmF0IF9fTlJfbWtkaXJhdAorI2RlZmluZSBTWVNfbWtub2QgX19OUl9ta25vZAorI2RlZmluZSBTWVNfbWtub2RhdCBfX05SX21rbm9kYXQKKyNkZWZpbmUgU1lTX21sb2NrIF9fTlJfbWxvY2sKKyNkZWZpbmUgU1lTX21sb2NrYWxsIF9fTlJfbWxvY2thbGwKKyNkZWZpbmUgU1lTX21tYXAgX19OUl9tbWFwCisjZGVmaW5lIFNZU19tbWFwMiBfX05SX21tYXAyCisjZGVmaW5lIFNZU19tb3VudCBfX05SX21vdW50CisjZGVmaW5lIFNZU19tb3ZlX3BhZ2VzIF9fTlJfbW92ZV9wYWdlcworI2RlZmluZSBTWVNfbXByb3RlY3QgX19OUl9tcHJvdGVjdAorI2RlZmluZSBTWVNfbXFfZ2V0c2V0YXR0ciBfX05SX21xX2dldHNldGF0dHIKKyNkZWZpbmUgU1lTX21xX25vdGlmeSBfX05SX21xX25vdGlmeQorI2RlZmluZSBTWVNfbXFfb3BlbiBfX05SX21xX29wZW4KKyNkZWZpbmUgU1lTX21xX3RpbWVkcmVjZWl2ZSBfX05SX21xX3RpbWVkcmVjZWl2ZQorI2RlZmluZSBTWVNfbXFfdGltZWRzZW5kIF9fTlJfbXFfdGltZWRzZW5kCisjZGVmaW5lIFNZU19tcV91bmxpbmsgX19OUl9tcV91bmxpbmsKKyNkZWZpbmUgU1lTX21yZW1hcCBfX05SX21yZW1hcAorI2RlZmluZSBTWVNfbXNnY3RsIF9fTlJfbXNnY3RsCisjZGVmaW5lIFNZU19tc2dnZXQgX19OUl9tc2dnZXQKKyNkZWZpbmUgU1lTX21zZ3JjdiBfX05SX21zZ3JjdgorI2RlZmluZSBTWVNfbXNnc25kIF9fTlJfbXNnc25kCisjZGVmaW5lIFNZU19tc3luYyBfX05SX21zeW5jCisjZGVmaW5lIFNZU19tdW5sb2NrIF9fTlJfbXVubG9jaworI2RlZmluZSBTWVNfbXVubG9ja2FsbCBfX05SX211bmxvY2thbGwKKyNkZWZpbmUgU1lTX211bm1hcCBfX05SX211bm1hcAorI2RlZmluZSBTWVNfbmFtZV90b19oYW5kbGVfYXQgX19OUl9uYW1lX3RvX2hhbmRsZV9hdAorI2RlZmluZSBTWVNfbmFub3NsZWVwIF9fTlJfbmFub3NsZWVwCisjZGVmaW5lIFNZU19uZnNzZXJ2Y3RsIF9fTlJfbmZzc2VydmN0bAorI2RlZmluZSBTWVNfbmljZSBfX05SX25pY2UKKyNkZWZpbmUgU1lTX29wZW4gX19OUl9vcGVuCisjZGVmaW5lIFNZU19vcGVuX2J5X2hhbmRsZV9hdCBfX05SX29wZW5fYnlfaGFuZGxlX2F0CisjZGVmaW5lIFNZU19vcGVuYXQgX19OUl9vcGVuYXQKKyNkZWZpbmUgU1lTX3BhdXNlIF9fTlJfcGF1c2UKKyNkZWZpbmUgU1lTX3BjaWNvbmZpZ19pb2Jhc2UgX19OUl9wY2ljb25maWdfaW9iYXNlCisjZGVmaW5lIFNZU19wY2ljb25maWdfcmVhZCBfX05SX3BjaWNvbmZpZ19yZWFkCisjZGVmaW5lIFNZU19wY2ljb25maWdfd3JpdGUgX19OUl9wY2ljb25maWdfd3JpdGUKKyNkZWZpbmUgU1lTX3BlcmZfZXZlbnRfb3BlbiBfX05SX3BlcmZfZXZlbnRfb3BlbgorI2RlZmluZSBTWVNfcGVyc29uYWxpdHkgX19OUl9wZXJzb25hbGl0eQorI2RlZmluZSBTWVNfcGlwZSBfX05SX3BpcGUKKyNkZWZpbmUgU1lTX3BpcGUyIF9fTlJfcGlwZTIKKyNkZWZpbmUgU1lTX3Bpdm90X3Jvb3QgX19OUl9waXZvdF9yb290CisjZGVmaW5lIFNZU19wb2xsIF9fTlJfcG9sbAorI2RlZmluZSBTWVNfcHBvbGwgX19OUl9wcG9sbAorI2RlZmluZSBTWVNfcHJjdGwgX19OUl9wcmN0bAorI2RlZmluZSBTWVNfcHJlYWQ2NCBfX05SX3ByZWFkNjQKKyNkZWZpbmUgU1lTX3ByZWFkdiBfX05SX3ByZWFkdgorI2RlZmluZSBTWVNfcHJsaW1pdDY0IF9fTlJfcHJsaW1pdDY0CisjZGVmaW5lIFNZU19wcm9jZXNzX3ZtX3JlYWR2IF9fTlJfcHJvY2Vzc192bV9yZWFkdgorI2RlZmluZSBTWVNfcHJvY2Vzc192bV93cml0ZXYgX19OUl9wcm9jZXNzX3ZtX3dyaXRldgorI2RlZmluZSBTWVNfcHNlbGVjdDYgX19OUl9wc2VsZWN0NgorI2RlZmluZSBTWVNfcHRyYWNlIF9fTlJfcHRyYWNlCisjZGVmaW5lIFNZU19wd3JpdGU2NCBfX05SX3B3cml0ZTY0CisjZGVmaW5lIFNZU19wd3JpdGV2IF9fTlJfcHdyaXRldgorI2RlZmluZSBTWVNfcXVvdGFjdGwgX19OUl9xdW90YWN0bAorI2RlZmluZSBTWVNfcmVhZCBfX05SX3JlYWQKKyNkZWZpbmUgU1lTX3JlYWRhaGVhZCBfX05SX3JlYWRhaGVhZAorI2RlZmluZSBTWVNfcmVhZGRpciBfX05SX3JlYWRkaXIKKyNkZWZpbmUgU1lTX3JlYWRsaW5rIF9fTlJfcmVhZGxpbmsKKyNkZWZpbmUgU1lTX3JlYWRsaW5rYXQgX19OUl9yZWFkbGlua2F0CisjZGVmaW5lIFNZU19yZWFkdiBfX05SX3JlYWR2CisjZGVmaW5lIFNZU19yZWJvb3QgX19OUl9yZWJvb3QKKyNkZWZpbmUgU1lTX3JlY3YgX19OUl9yZWN2CisjZGVmaW5lIFNZU19yZWN2ZnJvbSBfX05SX3JlY3Zmcm9tCisjZGVmaW5lIFNZU19yZWN2bW1zZyBfX05SX3JlY3ZtbXNnCisjZGVmaW5lIFNZU19yZWN2bXNnIF9fTlJfcmVjdm1zZworI2RlZmluZSBTWVNfcmVtYXBfZmlsZV9wYWdlcyBfX05SX3JlbWFwX2ZpbGVfcGFnZXMKKyNkZWZpbmUgU1lTX3JlbW92ZXhhdHRyIF9fTlJfcmVtb3ZleGF0dHIKKyNkZWZpbmUgU1lTX3JlbmFtZSBfX05SX3JlbmFtZQorI2RlZmluZSBTWVNfcmVuYW1lYXQgX19OUl9yZW5hbWVhdAorI2RlZmluZSBTWVNfcmVxdWVzdF9rZXkgX19OUl9yZXF1ZXN0X2tleQorI2RlZmluZSBTWVNfcmVzdGFydF9zeXNjYWxsIF9fTlJfcmVzdGFydF9zeXNjYWxsCisjZGVmaW5lIFNZU19ybWRpciBfX05SX3JtZGlyCisjZGVmaW5lIFNZU19ydF9zaWdhY3Rpb24gX19OUl9ydF9zaWdhY3Rpb24KKyNkZWZpbmUgU1lTX3J0X3NpZ3BlbmRpbmcgX19OUl9ydF9zaWdwZW5kaW5nCisjZGVmaW5lIFNZU19ydF9zaWdwcm9jbWFzayBfX05SX3J0X3NpZ3Byb2NtYXNrCisjZGVmaW5lIFNZU19ydF9zaWdxdWV1ZWluZm8gX19OUl9ydF9zaWdxdWV1ZWluZm8KKyNkZWZpbmUgU1lTX3J0X3NpZ3JldHVybiBfX05SX3J0X3NpZ3JldHVybgorI2RlZmluZSBTWVNfcnRfc2lnc3VzcGVuZCBfX05SX3J0X3NpZ3N1c3BlbmQKKyNkZWZpbmUgU1lTX3J0X3NpZ3RpbWVkd2FpdCBfX05SX3J0X3NpZ3RpbWVkd2FpdAorI2RlZmluZSBTWVNfcnRfdGdzaWdxdWV1ZWluZm8gX19OUl9ydF90Z3NpZ3F1ZXVlaW5mbworI2RlZmluZSBTWVNfc2NoZWRfZ2V0X3ByaW9yaXR5X21heCBfX05SX3NjaGVkX2dldF9wcmlvcml0eV9tYXgKKyNkZWZpbmUgU1lTX3NjaGVkX2dldF9wcmlvcml0eV9taW4gX19OUl9zY2hlZF9nZXRfcHJpb3JpdHlfbWluCisjZGVmaW5lIFNZU19zY2hlZF9nZXRhZmZpbml0eSBfX05SX3NjaGVkX2dldGFmZmluaXR5CisjZGVmaW5lIFNZU19zY2hlZF9nZXRwYXJhbSBfX05SX3NjaGVkX2dldHBhcmFtCisjZGVmaW5lIFNZU19zY2hlZF9nZXRzY2hlZHVsZXIgX19OUl9zY2hlZF9nZXRzY2hlZHVsZXIKKyNkZWZpbmUgU1lTX3NjaGVkX3JyX2dldF9pbnRlcnZhbCBfX05SX3NjaGVkX3JyX2dldF9pbnRlcnZhbAorI2RlZmluZSBTWVNfc2NoZWRfc2V0YWZmaW5pdHkgX19OUl9zY2hlZF9zZXRhZmZpbml0eQorI2RlZmluZSBTWVNfc2NoZWRfc2V0cGFyYW0gX19OUl9zY2hlZF9zZXRwYXJhbQorI2RlZmluZSBTWVNfc2NoZWRfc2V0c2NoZWR1bGVyIF9fTlJfc2NoZWRfc2V0c2NoZWR1bGVyCisjZGVmaW5lIFNZU19zY2hlZF95aWVsZCBfX05SX3NjaGVkX3lpZWxkCisjZGVmaW5lIFNZU19zZWxlY3QgX19OUl9zZWxlY3QKKyNkZWZpbmUgU1lTX3NlbWN0bCBfX05SX3NlbWN0bAorI2RlZmluZSBTWVNfc2VtZ2V0IF9fTlJfc2VtZ2V0CisjZGVmaW5lIFNZU19zZW1vcCBfX05SX3NlbW9wCisjZGVmaW5lIFNZU19zZW10aW1lZG9wIF9fTlJfc2VtdGltZWRvcAorI2RlZmluZSBTWVNfc2VuZCBfX05SX3NlbmQKKyNkZWZpbmUgU1lTX3NlbmRmaWxlIF9fTlJfc2VuZGZpbGUKKyNkZWZpbmUgU1lTX3NlbmRmaWxlNjQgX19OUl9zZW5kZmlsZTY0CisjZGVmaW5lIFNZU19zZW5kbW1zZyBfX05SX3NlbmRtbXNnCisjZGVmaW5lIFNZU19zZW5kbXNnIF9fTlJfc2VuZG1zZworI2RlZmluZSBTWVNfc2VuZHRvIF9fTlJfc2VuZHRvCisjZGVmaW5lIFNZU19zZXRfbWVtcG9saWN5IF9fTlJfc2V0X21lbXBvbGljeQorI2RlZmluZSBTWVNfc2V0X3JvYnVzdF9saXN0IF9fTlJfc2V0X3JvYnVzdF9saXN0CisjZGVmaW5lIFNZU19zZXRfdGlkX2FkZHJlc3MgX19OUl9zZXRfdGlkX2FkZHJlc3MKKyNkZWZpbmUgU1lTX3NldGRvbWFpbm5hbWUgX19OUl9zZXRkb21haW5uYW1lCisjZGVmaW5lIFNZU19zZXRmc2dpZCBfX05SX3NldGZzZ2lkCisjZGVmaW5lIFNZU19zZXRmc2dpZDMyIF9fTlJfc2V0ZnNnaWQzMgorI2RlZmluZSBTWVNfc2V0ZnN1aWQgX19OUl9zZXRmc3VpZAorI2RlZmluZSBTWVNfc2V0ZnN1aWQzMiBfX05SX3NldGZzdWlkMzIKKyNkZWZpbmUgU1lTX3NldGdpZCBfX05SX3NldGdpZAorI2RlZmluZSBTWVNfc2V0Z2lkMzIgX19OUl9zZXRnaWQzMgorI2RlZmluZSBTWVNfc2V0Z3JvdXBzIF9fTlJfc2V0Z3JvdXBzCisjZGVmaW5lIFNZU19zZXRncm91cHMzMiBfX05SX3NldGdyb3VwczMyCisjZGVmaW5lIFNZU19zZXRob3N0bmFtZSBfX05SX3NldGhvc3RuYW1lCisjZGVmaW5lIFNZU19zZXRpdGltZXIgX19OUl9zZXRpdGltZXIKKyNkZWZpbmUgU1lTX3NldG5zIF9fTlJfc2V0bnMKKyNkZWZpbmUgU1lTX3NldHBnaWQgX19OUl9zZXRwZ2lkCisjZGVmaW5lIFNZU19zZXRwcmlvcml0eSBfX05SX3NldHByaW9yaXR5CisjZGVmaW5lIFNZU19zZXRyZWdpZCBfX05SX3NldHJlZ2lkCisjZGVmaW5lIFNZU19zZXRyZWdpZDMyIF9fTlJfc2V0cmVnaWQzMgorI2RlZmluZSBTWVNfc2V0cmVzZ2lkIF9fTlJfc2V0cmVzZ2lkCisjZGVmaW5lIFNZU19zZXRyZXNnaWQzMiBfX05SX3NldHJlc2dpZDMyCisjZGVmaW5lIFNZU19zZXRyZXN1aWQgX19OUl9zZXRyZXN1aWQKKyNkZWZpbmUgU1lTX3NldHJlc3VpZDMyIF9fTlJfc2V0cmVzdWlkMzIKKyNkZWZpbmUgU1lTX3NldHJldWlkIF9fTlJfc2V0cmV1aWQKKyNkZWZpbmUgU1lTX3NldHJldWlkMzIgX19OUl9zZXRyZXVpZDMyCisjZGVmaW5lIFNZU19zZXRybGltaXQgX19OUl9zZXRybGltaXQKKyNkZWZpbmUgU1lTX3NldHNpZCBfX05SX3NldHNpZAorI2RlZmluZSBTWVNfc2V0c29ja29wdCBfX05SX3NldHNvY2tvcHQKKyNkZWZpbmUgU1lTX3NldHRpbWVvZmRheSBfX05SX3NldHRpbWVvZmRheQorI2RlZmluZSBTWVNfc2V0dWlkIF9fTlJfc2V0dWlkCisjZGVmaW5lIFNZU19zZXR1aWQzMiBfX05SX3NldHVpZDMyCisjZGVmaW5lIFNZU19zZXR4YXR0ciBfX05SX3NldHhhdHRyCisjZGVmaW5lIFNZU19zaG1hdCBfX05SX3NobWF0CisjZGVmaW5lIFNZU19zaG1jdGwgX19OUl9zaG1jdGwKKyNkZWZpbmUgU1lTX3NobWR0IF9fTlJfc2htZHQKKyNkZWZpbmUgU1lTX3NobWdldCBfX05SX3NobWdldAorI2RlZmluZSBTWVNfc2h1dGRvd24gX19OUl9zaHV0ZG93bgorI2RlZmluZSBTWVNfc2lnYWN0aW9uIF9fTlJfc2lnYWN0aW9uCisjZGVmaW5lIFNZU19zaWdhbHRzdGFjayBfX05SX3NpZ2FsdHN0YWNrCisjZGVmaW5lIFNZU19zaWduYWxmZCBfX05SX3NpZ25hbGZkCisjZGVmaW5lIFNZU19zaWduYWxmZDQgX19OUl9zaWduYWxmZDQKKyNkZWZpbmUgU1lTX3NpZ3BlbmRpbmcgX19OUl9zaWdwZW5kaW5nCisjZGVmaW5lIFNZU19zaWdwcm9jbWFzayBfX05SX3NpZ3Byb2NtYXNrCisjZGVmaW5lIFNZU19zaWdyZXR1cm4gX19OUl9zaWdyZXR1cm4KKyNkZWZpbmUgU1lTX3NpZ3N1c3BlbmQgX19OUl9zaWdzdXNwZW5kCisjZGVmaW5lIFNZU19zb2NrZXQgX19OUl9zb2NrZXQKKyNkZWZpbmUgU1lTX3NvY2tldGNhbGwgX19OUl9zb2NrZXRjYWxsCisjZGVmaW5lIFNZU19zb2NrZXRwYWlyIF9fTlJfc29ja2V0cGFpcgorI2RlZmluZSBTWVNfc3BsaWNlIF9fTlJfc3BsaWNlCisjZGVmaW5lIFNZU19zdGF0IF9fTlJfc3RhdAorI2RlZmluZSBTWVNfc3RhdDY0IF9fTlJfc3RhdDY0CisjZGVmaW5lIFNZU19zdGF0ZnMgX19OUl9zdGF0ZnMKKyNkZWZpbmUgU1lTX3N0YXRmczY0IF9fTlJfc3RhdGZzNjQKKyNkZWZpbmUgU1lTX3N0aW1lIF9fTlJfc3RpbWUKKyNkZWZpbmUgU1lTX3N3YXBvZmYgX19OUl9zd2Fwb2ZmCisjZGVmaW5lIFNZU19zd2Fwb24gX19OUl9zd2Fwb24KKyNkZWZpbmUgU1lTX3N5bWxpbmsgX19OUl9zeW1saW5rCisjZGVmaW5lIFNZU19zeW1saW5rYXQgX19OUl9zeW1saW5rYXQKKyNkZWZpbmUgU1lTX3N5bmMgX19OUl9zeW5jCisjZGVmaW5lIFNZU19zeW5jX2ZpbGVfcmFuZ2UyIF9fTlJfc3luY19maWxlX3JhbmdlMgorI2RlZmluZSBTWVNfc3luY2ZzIF9fTlJfc3luY2ZzCisjZGVmaW5lIFNZU19zeXNjYWxsIF9fTlJfc3lzY2FsbAorI2RlZmluZSBTWVNfc3lzZnMgX19OUl9zeXNmcworI2RlZmluZSBTWVNfc3lzaW5mbyBfX05SX3N5c2luZm8KKyNkZWZpbmUgU1lTX3N5c2xvZyBfX05SX3N5c2xvZworI2RlZmluZSBTWVNfdGVlIF9fTlJfdGVlCisjZGVmaW5lIFNZU190Z2tpbGwgX19OUl90Z2tpbGwKKyNkZWZpbmUgU1lTX3RpbWUgX19OUl90aW1lCisjZGVmaW5lIFNZU190aW1lcl9jcmVhdGUgX19OUl90aW1lcl9jcmVhdGUKKyNkZWZpbmUgU1lTX3RpbWVyX2RlbGV0ZSBfX05SX3RpbWVyX2RlbGV0ZQorI2RlZmluZSBTWVNfdGltZXJfZ2V0b3ZlcnJ1biBfX05SX3RpbWVyX2dldG92ZXJydW4KKyNkZWZpbmUgU1lTX3RpbWVyX2dldHRpbWUgX19OUl90aW1lcl9nZXR0aW1lCisjZGVmaW5lIFNZU190aW1lcl9zZXR0aW1lIF9fTlJfdGltZXJfc2V0dGltZQorI2RlZmluZSBTWVNfdGltZXJmZF9jcmVhdGUgX19OUl90aW1lcmZkX2NyZWF0ZQorI2RlZmluZSBTWVNfdGltZXJmZF9nZXR0aW1lIF9fTlJfdGltZXJmZF9nZXR0aW1lCisjZGVmaW5lIFNZU190aW1lcmZkX3NldHRpbWUgX19OUl90aW1lcmZkX3NldHRpbWUKKyNkZWZpbmUgU1lTX3RpbWVzIF9fTlJfdGltZXMKKyNkZWZpbmUgU1lTX3RraWxsIF9fTlJfdGtpbGwKKyNkZWZpbmUgU1lTX3RydW5jYXRlIF9fTlJfdHJ1bmNhdGUKKyNkZWZpbmUgU1lTX3RydW5jYXRlNjQgX19OUl90cnVuY2F0ZTY0CisjZGVmaW5lIFNZU191Z2V0cmxpbWl0IF9fTlJfdWdldHJsaW1pdAorI2RlZmluZSBTWVNfdW1hc2sgX19OUl91bWFzaworI2RlZmluZSBTWVNfdW1vdW50IF9fTlJfdW1vdW50CisjZGVmaW5lIFNZU191bW91bnQyIF9fTlJfdW1vdW50MgorI2RlZmluZSBTWVNfdW5hbWUgX19OUl91bmFtZQorI2RlZmluZSBTWVNfdW5saW5rIF9fTlJfdW5saW5rCisjZGVmaW5lIFNZU191bmxpbmthdCBfX05SX3VubGlua2F0CisjZGVmaW5lIFNZU191bnNoYXJlIF9fTlJfdW5zaGFyZQorI2RlZmluZSBTWVNfdXNlbGliIF9fTlJfdXNlbGliCisjZGVmaW5lIFNZU191c3RhdCBfX05SX3VzdGF0CisjZGVmaW5lIFNZU191dGltZSBfX05SX3V0aW1lCisjZGVmaW5lIFNZU191dGltZW5zYXQgX19OUl91dGltZW5zYXQKKyNkZWZpbmUgU1lTX3V0aW1lcyBfX05SX3V0aW1lcworI2RlZmluZSBTWVNfdmZvcmsgX19OUl92Zm9yaworI2RlZmluZSBTWVNfdmhhbmd1cCBfX05SX3ZoYW5ndXAKKyNkZWZpbmUgU1lTX3Ztc3BsaWNlIF9fTlJfdm1zcGxpY2UKKyNkZWZpbmUgU1lTX3ZzZXJ2ZXIgX19OUl92c2VydmVyCisjZGVmaW5lIFNZU193YWl0NCBfX05SX3dhaXQ0CisjZGVmaW5lIFNZU193YWl0aWQgX19OUl93YWl0aWQKKyNkZWZpbmUgU1lTX3dyaXRlIF9fTlJfd3JpdGUKKyNkZWZpbmUgU1lTX3dyaXRldiBfX05SX3dyaXRldgorI2VsaWYgZGVmaW5lZChfX21pcHNfXykKKyNkZWZpbmUgU1lTX2FjY2VwdCBfX05SX2FjY2VwdAorI2RlZmluZSBTWVNfYWNjZXB0NCBfX05SX2FjY2VwdDQKKyNkZWZpbmUgU1lTX2FjY2VzcyBfX05SX2FjY2VzcworI2RlZmluZSBTWVNfYWNjdCBfX05SX2FjY3QKKyNkZWZpbmUgU1lTX2FkZF9rZXkgX19OUl9hZGRfa2V5CisjZGVmaW5lIFNZU19hZGp0aW1leCBfX05SX2FkanRpbWV4CisjZGVmaW5lIFNZU19hZnNfc3lzY2FsbCBfX05SX2Fmc19zeXNjYWxsCisjZGVmaW5lIFNZU19hbGFybSBfX05SX2FsYXJtCisjZGVmaW5lIFNZU19iZGZsdXNoIF9fTlJfYmRmbHVzaAorI2RlZmluZSBTWVNfYmluZCBfX05SX2JpbmQKKyNkZWZpbmUgU1lTX2JyZWFrIF9fTlJfYnJlYWsKKyNkZWZpbmUgU1lTX2JyayBfX05SX2JyaworI2RlZmluZSBTWVNfY2FjaGVjdGwgX19OUl9jYWNoZWN0bAorI2RlZmluZSBTWVNfY2FjaGVmbHVzaCBfX05SX2NhY2hlZmx1c2gKKyNkZWZpbmUgU1lTX2NhcGdldCBfX05SX2NhcGdldAorI2RlZmluZSBTWVNfY2Fwc2V0IF9fTlJfY2Fwc2V0CisjZGVmaW5lIFNZU19jaGRpciBfX05SX2NoZGlyCisjZGVmaW5lIFNZU19jaG1vZCBfX05SX2NobW9kCisjZGVmaW5lIFNZU19jaG93biBfX05SX2Nob3duCisjZGVmaW5lIFNZU19jaHJvb3QgX19OUl9jaHJvb3QKKyNkZWZpbmUgU1lTX2Nsb2NrX2FkanRpbWUgX19OUl9jbG9ja19hZGp0aW1lCisjZGVmaW5lIFNZU19jbG9ja19nZXRyZXMgX19OUl9jbG9ja19nZXRyZXMKKyNkZWZpbmUgU1lTX2Nsb2NrX2dldHRpbWUgX19OUl9jbG9ja19nZXR0aW1lCisjZGVmaW5lIFNZU19jbG9ja19uYW5vc2xlZXAgX19OUl9jbG9ja19uYW5vc2xlZXAKKyNkZWZpbmUgU1lTX2Nsb2NrX3NldHRpbWUgX19OUl9jbG9ja19zZXR0aW1lCisjZGVmaW5lIFNZU19jbG9uZSBfX05SX2Nsb25lCisjZGVmaW5lIFNZU19jbG9zZSBfX05SX2Nsb3NlCisjZGVmaW5lIFNZU19jb25uZWN0IF9fTlJfY29ubmVjdAorI2RlZmluZSBTWVNfY3JlYXQgX19OUl9jcmVhdAorI2RlZmluZSBTWVNfY3JlYXRlX21vZHVsZSBfX05SX2NyZWF0ZV9tb2R1bGUKKyNkZWZpbmUgU1lTX2RlbGV0ZV9tb2R1bGUgX19OUl9kZWxldGVfbW9kdWxlCisjZGVmaW5lIFNZU19kdXAgX19OUl9kdXAKKyNkZWZpbmUgU1lTX2R1cDIgX19OUl9kdXAyCisjZGVmaW5lIFNZU19kdXAzIF9fTlJfZHVwMworI2RlZmluZSBTWVNfZXBvbGxfY3JlYXRlIF9fTlJfZXBvbGxfY3JlYXRlCisjZGVmaW5lIFNZU19lcG9sbF9jcmVhdGUxIF9fTlJfZXBvbGxfY3JlYXRlMQorI2RlZmluZSBTWVNfZXBvbGxfY3RsIF9fTlJfZXBvbGxfY3RsCisjZGVmaW5lIFNZU19lcG9sbF9wd2FpdCBfX05SX2Vwb2xsX3B3YWl0CisjZGVmaW5lIFNZU19lcG9sbF93YWl0IF9fTlJfZXBvbGxfd2FpdAorI2RlZmluZSBTWVNfZXZlbnRmZCBfX05SX2V2ZW50ZmQKKyNkZWZpbmUgU1lTX2V2ZW50ZmQyIF9fTlJfZXZlbnRmZDIKKyNkZWZpbmUgU1lTX2V4ZWN2ZSBfX05SX2V4ZWN2ZQorI2RlZmluZSBTWVNfZXhpdCBfX05SX2V4aXQKKyNkZWZpbmUgU1lTX2V4aXRfZ3JvdXAgX19OUl9leGl0X2dyb3VwCisjZGVmaW5lIFNZU19mYWNjZXNzYXQgX19OUl9mYWNjZXNzYXQKKyNkZWZpbmUgU1lTX2ZhZHZpc2U2NCBfX05SX2ZhZHZpc2U2NAorI2RlZmluZSBTWVNfZmFsbG9jYXRlIF9fTlJfZmFsbG9jYXRlCisjZGVmaW5lIFNZU19mYW5vdGlmeV9pbml0IF9fTlJfZmFub3RpZnlfaW5pdAorI2RlZmluZSBTWVNfZmFub3RpZnlfbWFyayBfX05SX2Zhbm90aWZ5X21hcmsKKyNkZWZpbmUgU1lTX2ZjaGRpciBfX05SX2ZjaGRpcgorI2RlZmluZSBTWVNfZmNobW9kIF9fTlJfZmNobW9kCisjZGVmaW5lIFNZU19mY2htb2RhdCBfX05SX2ZjaG1vZGF0CisjZGVmaW5lIFNZU19mY2hvd24gX19OUl9mY2hvd24KKyNkZWZpbmUgU1lTX2ZjaG93bmF0IF9fTlJfZmNob3duYXQKKyNkZWZpbmUgU1lTX2ZjbnRsIF9fTlJfZmNudGwKKyNkZWZpbmUgU1lTX2ZjbnRsNjQgX19OUl9mY250bDY0CisjZGVmaW5lIFNZU19mZGF0YXN5bmMgX19OUl9mZGF0YXN5bmMKKyNkZWZpbmUgU1lTX2ZnZXR4YXR0ciBfX05SX2ZnZXR4YXR0cgorI2RlZmluZSBTWVNfZmxpc3R4YXR0ciBfX05SX2ZsaXN0eGF0dHIKKyNkZWZpbmUgU1lTX2Zsb2NrIF9fTlJfZmxvY2sKKyNkZWZpbmUgU1lTX2ZvcmsgX19OUl9mb3JrCisjZGVmaW5lIFNZU19mcmVtb3ZleGF0dHIgX19OUl9mcmVtb3ZleGF0dHIKKyNkZWZpbmUgU1lTX2ZzZXR4YXR0ciBfX05SX2ZzZXR4YXR0cgorI2RlZmluZSBTWVNfZnN0YXQgX19OUl9mc3RhdAorI2RlZmluZSBTWVNfZnN0YXQ2NCBfX05SX2ZzdGF0NjQKKyNkZWZpbmUgU1lTX2ZzdGF0YXQ2NCBfX05SX2ZzdGF0YXQ2NAorI2RlZmluZSBTWVNfZnN0YXRmcyBfX05SX2ZzdGF0ZnMKKyNkZWZpbmUgU1lTX2ZzdGF0ZnM2NCBfX05SX2ZzdGF0ZnM2NAorI2RlZmluZSBTWVNfZnN5bmMgX19OUl9mc3luYworI2RlZmluZSBTWVNfZnRpbWUgX19OUl9mdGltZQorI2RlZmluZSBTWVNfZnRydW5jYXRlIF9fTlJfZnRydW5jYXRlCisjZGVmaW5lIFNZU19mdHJ1bmNhdGU2NCBfX05SX2Z0cnVuY2F0ZTY0CisjZGVmaW5lIFNZU19mdXRleCBfX05SX2Z1dGV4CisjZGVmaW5lIFNZU19mdXRpbWVzYXQgX19OUl9mdXRpbWVzYXQKKyNkZWZpbmUgU1lTX2dldF9rZXJuZWxfc3ltcyBfX05SX2dldF9rZXJuZWxfc3ltcworI2RlZmluZSBTWVNfZ2V0X21lbXBvbGljeSBfX05SX2dldF9tZW1wb2xpY3kKKyNkZWZpbmUgU1lTX2dldF9yb2J1c3RfbGlzdCBfX05SX2dldF9yb2J1c3RfbGlzdAorI2RlZmluZSBTWVNfZ2V0Y3B1IF9fTlJfZ2V0Y3B1CisjZGVmaW5lIFNZU19nZXRjd2QgX19OUl9nZXRjd2QKKyNkZWZpbmUgU1lTX2dldGRlbnRzIF9fTlJfZ2V0ZGVudHMKKyNkZWZpbmUgU1lTX2dldGRlbnRzNjQgX19OUl9nZXRkZW50czY0CisjZGVmaW5lIFNZU19nZXRlZ2lkIF9fTlJfZ2V0ZWdpZAorI2RlZmluZSBTWVNfZ2V0ZXVpZCBfX05SX2dldGV1aWQKKyNkZWZpbmUgU1lTX2dldGdpZCBfX05SX2dldGdpZAorI2RlZmluZSBTWVNfZ2V0Z3JvdXBzIF9fTlJfZ2V0Z3JvdXBzCisjZGVmaW5lIFNZU19nZXRpdGltZXIgX19OUl9nZXRpdGltZXIKKyNkZWZpbmUgU1lTX2dldHBlZXJuYW1lIF9fTlJfZ2V0cGVlcm5hbWUKKyNkZWZpbmUgU1lTX2dldHBnaWQgX19OUl9nZXRwZ2lkCisjZGVmaW5lIFNZU19nZXRwZ3JwIF9fTlJfZ2V0cGdycAorI2RlZmluZSBTWVNfZ2V0cGlkIF9fTlJfZ2V0cGlkCisjZGVmaW5lIFNZU19nZXRwbXNnIF9fTlJfZ2V0cG1zZworI2RlZmluZSBTWVNfZ2V0cHBpZCBfX05SX2dldHBwaWQKKyNkZWZpbmUgU1lTX2dldHByaW9yaXR5IF9fTlJfZ2V0cHJpb3JpdHkKKyNkZWZpbmUgU1lTX2dldHJlc2dpZCBfX05SX2dldHJlc2dpZAorI2RlZmluZSBTWVNfZ2V0cmVzdWlkIF9fTlJfZ2V0cmVzdWlkCisjZGVmaW5lIFNZU19nZXRybGltaXQgX19OUl9nZXRybGltaXQKKyNkZWZpbmUgU1lTX2dldHJ1c2FnZSBfX05SX2dldHJ1c2FnZQorI2RlZmluZSBTWVNfZ2V0c2lkIF9fTlJfZ2V0c2lkCisjZGVmaW5lIFNZU19nZXRzb2NrbmFtZSBfX05SX2dldHNvY2tuYW1lCisjZGVmaW5lIFNZU19nZXRzb2Nrb3B0IF9fTlJfZ2V0c29ja29wdAorI2RlZmluZSBTWVNfZ2V0dGlkIF9fTlJfZ2V0dGlkCisjZGVmaW5lIFNZU19nZXR0aW1lb2ZkYXkgX19OUl9nZXR0aW1lb2ZkYXkKKyNkZWZpbmUgU1lTX2dldHVpZCBfX05SX2dldHVpZAorI2RlZmluZSBTWVNfZ2V0eGF0dHIgX19OUl9nZXR4YXR0cgorI2RlZmluZSBTWVNfZ3R0eSBfX05SX2d0dHkKKyNkZWZpbmUgU1lTX2lkbGUgX19OUl9pZGxlCisjZGVmaW5lIFNZU19pbml0X21vZHVsZSBfX05SX2luaXRfbW9kdWxlCisjZGVmaW5lIFNZU19pbm90aWZ5X2FkZF93YXRjaCBfX05SX2lub3RpZnlfYWRkX3dhdGNoCisjZGVmaW5lIFNZU19pbm90aWZ5X2luaXQgX19OUl9pbm90aWZ5X2luaXQKKyNkZWZpbmUgU1lTX2lub3RpZnlfaW5pdDEgX19OUl9pbm90aWZ5X2luaXQxCisjZGVmaW5lIFNZU19pbm90aWZ5X3JtX3dhdGNoIF9fTlJfaW5vdGlmeV9ybV93YXRjaAorI2RlZmluZSBTWVNfaW9fY2FuY2VsIF9fTlJfaW9fY2FuY2VsCisjZGVmaW5lIFNZU19pb19kZXN0cm95IF9fTlJfaW9fZGVzdHJveQorI2RlZmluZSBTWVNfaW9fZ2V0ZXZlbnRzIF9fTlJfaW9fZ2V0ZXZlbnRzCisjZGVmaW5lIFNZU19pb19zZXR1cCBfX05SX2lvX3NldHVwCisjZGVmaW5lIFNZU19pb19zdWJtaXQgX19OUl9pb19zdWJtaXQKKyNkZWZpbmUgU1lTX2lvY3RsIF9fTlJfaW9jdGwKKyNkZWZpbmUgU1lTX2lvcGVybSBfX05SX2lvcGVybQorI2RlZmluZSBTWVNfaW9wbCBfX05SX2lvcGwKKyNkZWZpbmUgU1lTX2lvcHJpb19nZXQgX19OUl9pb3ByaW9fZ2V0CisjZGVmaW5lIFNZU19pb3ByaW9fc2V0IF9fTlJfaW9wcmlvX3NldAorI2RlZmluZSBTWVNfaXBjIF9fTlJfaXBjCisjZGVmaW5lIFNZU19rZXhlY19sb2FkIF9fTlJfa2V4ZWNfbG9hZAorI2RlZmluZSBTWVNfa2V5Y3RsIF9fTlJfa2V5Y3RsCisjZGVmaW5lIFNZU19raWxsIF9fTlJfa2lsbAorI2RlZmluZSBTWVNfbGNob3duIF9fTlJfbGNob3duCisjZGVmaW5lIFNZU19sZ2V0eGF0dHIgX19OUl9sZ2V0eGF0dHIKKyNkZWZpbmUgU1lTX2xpbmsgX19OUl9saW5rCisjZGVmaW5lIFNZU19saW5rYXQgX19OUl9saW5rYXQKKyNkZWZpbmUgU1lTX2xpc3RlbiBfX05SX2xpc3RlbgorI2RlZmluZSBTWVNfbGlzdHhhdHRyIF9fTlJfbGlzdHhhdHRyCisjZGVmaW5lIFNZU19sbGlzdHhhdHRyIF9fTlJfbGxpc3R4YXR0cgorI2RlZmluZSBTWVNfbG9jayBfX05SX2xvY2sKKyNkZWZpbmUgU1lTX2xvb2t1cF9kY29va2llIF9fTlJfbG9va3VwX2Rjb29raWUKKyNkZWZpbmUgU1lTX2xyZW1vdmV4YXR0ciBfX05SX2xyZW1vdmV4YXR0cgorI2RlZmluZSBTWVNfbHNlZWsgX19OUl9sc2VlaworI2RlZmluZSBTWVNfbHNldHhhdHRyIF9fTlJfbHNldHhhdHRyCisjZGVmaW5lIFNZU19sc3RhdCBfX05SX2xzdGF0CisjZGVmaW5lIFNZU19sc3RhdDY0IF9fTlJfbHN0YXQ2NAorI2RlZmluZSBTWVNfbWFkdmlzZSBfX05SX21hZHZpc2UKKyNkZWZpbmUgU1lTX21iaW5kIF9fTlJfbWJpbmQKKyNkZWZpbmUgU1lTX21pZ3JhdGVfcGFnZXMgX19OUl9taWdyYXRlX3BhZ2VzCisjZGVmaW5lIFNZU19taW5jb3JlIF9fTlJfbWluY29yZQorI2RlZmluZSBTWVNfbWtkaXIgX19OUl9ta2RpcgorI2RlZmluZSBTWVNfbWtkaXJhdCBfX05SX21rZGlyYXQKKyNkZWZpbmUgU1lTX21rbm9kIF9fTlJfbWtub2QKKyNkZWZpbmUgU1lTX21rbm9kYXQgX19OUl9ta25vZGF0CisjZGVmaW5lIFNZU19tbG9jayBfX05SX21sb2NrCisjZGVmaW5lIFNZU19tbG9ja2FsbCBfX05SX21sb2NrYWxsCisjZGVmaW5lIFNZU19tbWFwIF9fTlJfbW1hcAorI2RlZmluZSBTWVNfbW1hcDIgX19OUl9tbWFwMgorI2RlZmluZSBTWVNfbW9kaWZ5X2xkdCBfX05SX21vZGlmeV9sZHQKKyNkZWZpbmUgU1lTX21vdW50IF9fTlJfbW91bnQKKyNkZWZpbmUgU1lTX21vdmVfcGFnZXMgX19OUl9tb3ZlX3BhZ2VzCisjZGVmaW5lIFNZU19tcHJvdGVjdCBfX05SX21wcm90ZWN0CisjZGVmaW5lIFNZU19tcHggX19OUl9tcHgKKyNkZWZpbmUgU1lTX21xX2dldHNldGF0dHIgX19OUl9tcV9nZXRzZXRhdHRyCisjZGVmaW5lIFNZU19tcV9ub3RpZnkgX19OUl9tcV9ub3RpZnkKKyNkZWZpbmUgU1lTX21xX29wZW4gX19OUl9tcV9vcGVuCisjZGVmaW5lIFNZU19tcV90aW1lZHJlY2VpdmUgX19OUl9tcV90aW1lZHJlY2VpdmUKKyNkZWZpbmUgU1lTX21xX3RpbWVkc2VuZCBfX05SX21xX3RpbWVkc2VuZAorI2RlZmluZSBTWVNfbXFfdW5saW5rIF9fTlJfbXFfdW5saW5rCisjZGVmaW5lIFNZU19tcmVtYXAgX19OUl9tcmVtYXAKKyNkZWZpbmUgU1lTX21zZ2N0bCBfX05SX21zZ2N0bAorI2RlZmluZSBTWVNfbXNnZ2V0IF9fTlJfbXNnZ2V0CisjZGVmaW5lIFNZU19tc2dyY3YgX19OUl9tc2dyY3YKKyNkZWZpbmUgU1lTX21zZ3NuZCBfX05SX21zZ3NuZAorI2RlZmluZSBTWVNfbXN5bmMgX19OUl9tc3luYworI2RlZmluZSBTWVNfbXVubG9jayBfX05SX211bmxvY2sKKyNkZWZpbmUgU1lTX211bmxvY2thbGwgX19OUl9tdW5sb2NrYWxsCisjZGVmaW5lIFNZU19tdW5tYXAgX19OUl9tdW5tYXAKKyNkZWZpbmUgU1lTX25hbWVfdG9faGFuZGxlX2F0IF9fTlJfbmFtZV90b19oYW5kbGVfYXQKKyNkZWZpbmUgU1lTX25hbm9zbGVlcCBfX05SX25hbm9zbGVlcAorI2RlZmluZSBTWVNfbmV3ZnN0YXRhdCBfX05SX25ld2ZzdGF0YXQKKyNkZWZpbmUgU1lTX25mc3NlcnZjdGwgX19OUl9uZnNzZXJ2Y3RsCisjZGVmaW5lIFNZU19uaWNlIF9fTlJfbmljZQorI2RlZmluZSBTWVNfb3BlbiBfX05SX29wZW4KKyNkZWZpbmUgU1lTX29wZW5fYnlfaGFuZGxlX2F0IF9fTlJfb3Blbl9ieV9oYW5kbGVfYXQKKyNkZWZpbmUgU1lTX29wZW5hdCBfX05SX29wZW5hdAorI2RlZmluZSBTWVNfcGF1c2UgX19OUl9wYXVzZQorI2RlZmluZSBTWVNfcGVyZl9ldmVudF9vcGVuIF9fTlJfcGVyZl9ldmVudF9vcGVuCisjZGVmaW5lIFNZU19wZXJzb25hbGl0eSBfX05SX3BlcnNvbmFsaXR5CisjZGVmaW5lIFNZU19waXBlIF9fTlJfcGlwZQorI2RlZmluZSBTWVNfcGlwZTIgX19OUl9waXBlMgorI2RlZmluZSBTWVNfcGl2b3Rfcm9vdCBfX05SX3Bpdm90X3Jvb3QKKyNkZWZpbmUgU1lTX3BvbGwgX19OUl9wb2xsCisjZGVmaW5lIFNZU19wcG9sbCBfX05SX3Bwb2xsCisjZGVmaW5lIFNZU19wcmN0bCBfX05SX3ByY3RsCisjZGVmaW5lIFNZU19wcmVhZDY0IF9fTlJfcHJlYWQ2NAorI2RlZmluZSBTWVNfcHJlYWR2IF9fTlJfcHJlYWR2CisjZGVmaW5lIFNZU19wcmxpbWl0NjQgX19OUl9wcmxpbWl0NjQKKyNkZWZpbmUgU1lTX3Byb2Nlc3Nfdm1fcmVhZHYgX19OUl9wcm9jZXNzX3ZtX3JlYWR2CisjZGVmaW5lIFNZU19wcm9jZXNzX3ZtX3dyaXRldiBfX05SX3Byb2Nlc3Nfdm1fd3JpdGV2CisjZGVmaW5lIFNZU19wcm9mIF9fTlJfcHJvZgorI2RlZmluZSBTWVNfcHJvZmlsIF9fTlJfcHJvZmlsCisjZGVmaW5lIFNZU19wc2VsZWN0NiBfX05SX3BzZWxlY3Q2CisjZGVmaW5lIFNZU19wdHJhY2UgX19OUl9wdHJhY2UKKyNkZWZpbmUgU1lTX3B1dHBtc2cgX19OUl9wdXRwbXNnCisjZGVmaW5lIFNZU19wd3JpdGU2NCBfX05SX3B3cml0ZTY0CisjZGVmaW5lIFNZU19wd3JpdGV2IF9fTlJfcHdyaXRldgorI2RlZmluZSBTWVNfcXVlcnlfbW9kdWxlIF9fTlJfcXVlcnlfbW9kdWxlCisjZGVmaW5lIFNZU19xdW90YWN0bCBfX05SX3F1b3RhY3RsCisjZGVmaW5lIFNZU19yZWFkIF9fTlJfcmVhZAorI2RlZmluZSBTWVNfcmVhZGFoZWFkIF9fTlJfcmVhZGFoZWFkCisjZGVmaW5lIFNZU19yZWFkZGlyIF9fTlJfcmVhZGRpcgorI2RlZmluZSBTWVNfcmVhZGxpbmsgX19OUl9yZWFkbGluaworI2RlZmluZSBTWVNfcmVhZGxpbmthdCBfX05SX3JlYWRsaW5rYXQKKyNkZWZpbmUgU1lTX3JlYWR2IF9fTlJfcmVhZHYKKyNkZWZpbmUgU1lTX3JlYm9vdCBfX05SX3JlYm9vdAorI2RlZmluZSBTWVNfcmVjdiBfX05SX3JlY3YKKyNkZWZpbmUgU1lTX3JlY3Zmcm9tIF9fTlJfcmVjdmZyb20KKyNkZWZpbmUgU1lTX3JlY3ZtbXNnIF9fTlJfcmVjdm1tc2cKKyNkZWZpbmUgU1lTX3JlY3Ztc2cgX19OUl9yZWN2bXNnCisjZGVmaW5lIFNZU19yZW1hcF9maWxlX3BhZ2VzIF9fTlJfcmVtYXBfZmlsZV9wYWdlcworI2RlZmluZSBTWVNfcmVtb3ZleGF0dHIgX19OUl9yZW1vdmV4YXR0cgorI2RlZmluZSBTWVNfcmVuYW1lIF9fTlJfcmVuYW1lCisjZGVmaW5lIFNZU19yZW5hbWVhdCBfX05SX3JlbmFtZWF0CisjZGVmaW5lIFNZU19yZXF1ZXN0X2tleSBfX05SX3JlcXVlc3Rfa2V5CisjZGVmaW5lIFNZU19yZXNlcnZlZDE3NyBfX05SX3Jlc2VydmVkMTc3CisjZGVmaW5lIFNZU19yZXNlcnZlZDE5MyBfX05SX3Jlc2VydmVkMTkzCisjZGVmaW5lIFNZU19yZXNlcnZlZDIyMSBfX05SX3Jlc2VydmVkMjIxCisjZGVmaW5lIFNZU19yZXNlcnZlZDgyIF9fTlJfcmVzZXJ2ZWQ4MgorI2RlZmluZSBTWVNfcmVzdGFydF9zeXNjYWxsIF9fTlJfcmVzdGFydF9zeXNjYWxsCisjZGVmaW5lIFNZU19ybWRpciBfX05SX3JtZGlyCisjZGVmaW5lIFNZU19ydF9zaWdhY3Rpb24gX19OUl9ydF9zaWdhY3Rpb24KKyNkZWZpbmUgU1lTX3J0X3NpZ3BlbmRpbmcgX19OUl9ydF9zaWdwZW5kaW5nCisjZGVmaW5lIFNZU19ydF9zaWdwcm9jbWFzayBfX05SX3J0X3NpZ3Byb2NtYXNrCisjZGVmaW5lIFNZU19ydF9zaWdxdWV1ZWluZm8gX19OUl9ydF9zaWdxdWV1ZWluZm8KKyNkZWZpbmUgU1lTX3J0X3NpZ3JldHVybiBfX05SX3J0X3NpZ3JldHVybgorI2RlZmluZSBTWVNfcnRfc2lnc3VzcGVuZCBfX05SX3J0X3NpZ3N1c3BlbmQKKyNkZWZpbmUgU1lTX3J0X3NpZ3RpbWVkd2FpdCBfX05SX3J0X3NpZ3RpbWVkd2FpdAorI2RlZmluZSBTWVNfcnRfdGdzaWdxdWV1ZWluZm8gX19OUl9ydF90Z3NpZ3F1ZXVlaW5mbworI2RlZmluZSBTWVNfc2NoZWRfZ2V0X3ByaW9yaXR5X21heCBfX05SX3NjaGVkX2dldF9wcmlvcml0eV9tYXgKKyNkZWZpbmUgU1lTX3NjaGVkX2dldF9wcmlvcml0eV9taW4gX19OUl9zY2hlZF9nZXRfcHJpb3JpdHlfbWluCisjZGVmaW5lIFNZU19zY2hlZF9nZXRhZmZpbml0eSBfX05SX3NjaGVkX2dldGFmZmluaXR5CisjZGVmaW5lIFNZU19zY2hlZF9nZXRwYXJhbSBfX05SX3NjaGVkX2dldHBhcmFtCisjZGVmaW5lIFNZU19zY2hlZF9nZXRzY2hlZHVsZXIgX19OUl9zY2hlZF9nZXRzY2hlZHVsZXIKKyNkZWZpbmUgU1lTX3NjaGVkX3JyX2dldF9pbnRlcnZhbCBfX05SX3NjaGVkX3JyX2dldF9pbnRlcnZhbAorI2RlZmluZSBTWVNfc2NoZWRfc2V0YWZmaW5pdHkgX19OUl9zY2hlZF9zZXRhZmZpbml0eQorI2RlZmluZSBTWVNfc2NoZWRfc2V0cGFyYW0gX19OUl9zY2hlZF9zZXRwYXJhbQorI2RlZmluZSBTWVNfc2NoZWRfc2V0c2NoZWR1bGVyIF9fTlJfc2NoZWRfc2V0c2NoZWR1bGVyCisjZGVmaW5lIFNZU19zY2hlZF95aWVsZCBfX05SX3NjaGVkX3lpZWxkCisjZGVmaW5lIFNZU19zZW1jdGwgX19OUl9zZW1jdGwKKyNkZWZpbmUgU1lTX3NlbWdldCBfX05SX3NlbWdldAorI2RlZmluZSBTWVNfc2Vtb3AgX19OUl9zZW1vcAorI2RlZmluZSBTWVNfc2VtdGltZWRvcCBfX05SX3NlbXRpbWVkb3AKKyNkZWZpbmUgU1lTX3NlbmQgX19OUl9zZW5kCisjZGVmaW5lIFNZU19zZW5kZmlsZSBfX05SX3NlbmRmaWxlCisjZGVmaW5lIFNZU19zZW5kZmlsZTY0IF9fTlJfc2VuZGZpbGU2NAorI2RlZmluZSBTWVNfc2VuZG1tc2cgX19OUl9zZW5kbW1zZworI2RlZmluZSBTWVNfc2VuZG1zZyBfX05SX3NlbmRtc2cKKyNkZWZpbmUgU1lTX3NlbmR0byBfX05SX3NlbmR0bworI2RlZmluZSBTWVNfc2V0X21lbXBvbGljeSBfX05SX3NldF9tZW1wb2xpY3kKKyNkZWZpbmUgU1lTX3NldF9yb2J1c3RfbGlzdCBfX05SX3NldF9yb2J1c3RfbGlzdAorI2RlZmluZSBTWVNfc2V0X3RocmVhZF9hcmVhIF9fTlJfc2V0X3RocmVhZF9hcmVhCisjZGVmaW5lIFNZU19zZXRfdGlkX2FkZHJlc3MgX19OUl9zZXRfdGlkX2FkZHJlc3MKKyNkZWZpbmUgU1lTX3NldGRvbWFpbm5hbWUgX19OUl9zZXRkb21haW5uYW1lCisjZGVmaW5lIFNZU19zZXRmc2dpZCBfX05SX3NldGZzZ2lkCisjZGVmaW5lIFNZU19zZXRmc3VpZCBfX05SX3NldGZzdWlkCisjZGVmaW5lIFNZU19zZXRnaWQgX19OUl9zZXRnaWQKKyNkZWZpbmUgU1lTX3NldGdyb3VwcyBfX05SX3NldGdyb3VwcworI2RlZmluZSBTWVNfc2V0aG9zdG5hbWUgX19OUl9zZXRob3N0bmFtZQorI2RlZmluZSBTWVNfc2V0aXRpbWVyIF9fTlJfc2V0aXRpbWVyCisjZGVmaW5lIFNZU19zZXRucyBfX05SX3NldG5zCisjZGVmaW5lIFNZU19zZXRwZ2lkIF9fTlJfc2V0cGdpZAorI2RlZmluZSBTWVNfc2V0cHJpb3JpdHkgX19OUl9zZXRwcmlvcml0eQorI2RlZmluZSBTWVNfc2V0cmVnaWQgX19OUl9zZXRyZWdpZAorI2RlZmluZSBTWVNfc2V0cmVzZ2lkIF9fTlJfc2V0cmVzZ2lkCisjZGVmaW5lIFNZU19zZXRyZXN1aWQgX19OUl9zZXRyZXN1aWQKKyNkZWZpbmUgU1lTX3NldHJldWlkIF9fTlJfc2V0cmV1aWQKKyNkZWZpbmUgU1lTX3NldHJsaW1pdCBfX05SX3NldHJsaW1pdAorI2RlZmluZSBTWVNfc2V0c2lkIF9fTlJfc2V0c2lkCisjZGVmaW5lIFNZU19zZXRzb2Nrb3B0IF9fTlJfc2V0c29ja29wdAorI2RlZmluZSBTWVNfc2V0dGltZW9mZGF5IF9fTlJfc2V0dGltZW9mZGF5CisjZGVmaW5lIFNZU19zZXR1aWQgX19OUl9zZXR1aWQKKyNkZWZpbmUgU1lTX3NldHhhdHRyIF9fTlJfc2V0eGF0dHIKKyNkZWZpbmUgU1lTX3NnZXRtYXNrIF9fTlJfc2dldG1hc2sKKyNkZWZpbmUgU1lTX3NobWF0IF9fTlJfc2htYXQKKyNkZWZpbmUgU1lTX3NobWN0bCBfX05SX3NobWN0bAorI2RlZmluZSBTWVNfc2htZHQgX19OUl9zaG1kdAorI2RlZmluZSBTWVNfc2htZ2V0IF9fTlJfc2htZ2V0CisjZGVmaW5lIFNZU19zaHV0ZG93biBfX05SX3NodXRkb3duCisjZGVmaW5lIFNZU19zaWdhY3Rpb24gX19OUl9zaWdhY3Rpb24KKyNkZWZpbmUgU1lTX3NpZ2FsdHN0YWNrIF9fTlJfc2lnYWx0c3RhY2sKKyNkZWZpbmUgU1lTX3NpZ25hbCBfX05SX3NpZ25hbAorI2RlZmluZSBTWVNfc2lnbmFsZmQgX19OUl9zaWduYWxmZAorI2RlZmluZSBTWVNfc2lnbmFsZmQ0IF9fTlJfc2lnbmFsZmQ0CisjZGVmaW5lIFNZU19zaWdwZW5kaW5nIF9fTlJfc2lncGVuZGluZworI2RlZmluZSBTWVNfc2lncHJvY21hc2sgX19OUl9zaWdwcm9jbWFzaworI2RlZmluZSBTWVNfc2lncmV0dXJuIF9fTlJfc2lncmV0dXJuCisjZGVmaW5lIFNZU19zaWdzdXNwZW5kIF9fTlJfc2lnc3VzcGVuZAorI2RlZmluZSBTWVNfc29ja2V0IF9fTlJfc29ja2V0CisjZGVmaW5lIFNZU19zb2NrZXRjYWxsIF9fTlJfc29ja2V0Y2FsbAorI2RlZmluZSBTWVNfc29ja2V0cGFpciBfX05SX3NvY2tldHBhaXIKKyNkZWZpbmUgU1lTX3NwbGljZSBfX05SX3NwbGljZQorI2RlZmluZSBTWVNfc3NldG1hc2sgX19OUl9zc2V0bWFzaworI2RlZmluZSBTWVNfc3RhdCBfX05SX3N0YXQKKyNkZWZpbmUgU1lTX3N0YXQ2NCBfX05SX3N0YXQ2NAorI2RlZmluZSBTWVNfc3RhdGZzIF9fTlJfc3RhdGZzCisjZGVmaW5lIFNZU19zdGF0ZnM2NCBfX05SX3N0YXRmczY0CisjZGVmaW5lIFNZU19zdGltZSBfX05SX3N0aW1lCisjZGVmaW5lIFNZU19zdHR5IF9fTlJfc3R0eQorI2RlZmluZSBTWVNfc3dhcG9mZiBfX05SX3N3YXBvZmYKKyNkZWZpbmUgU1lTX3N3YXBvbiBfX05SX3N3YXBvbgorI2RlZmluZSBTWVNfc3ltbGluayBfX05SX3N5bWxpbmsKKyNkZWZpbmUgU1lTX3N5bWxpbmthdCBfX05SX3N5bWxpbmthdAorI2RlZmluZSBTWVNfc3luYyBfX05SX3N5bmMKKyNkZWZpbmUgU1lTX3N5bmNfZmlsZV9yYW5nZSBfX05SX3N5bmNfZmlsZV9yYW5nZQorI2RlZmluZSBTWVNfc3luY2ZzIF9fTlJfc3luY2ZzCisjZGVmaW5lIFNZU19zeXNjYWxsIF9fTlJfc3lzY2FsbAorI2RlZmluZSBTWVNfc3lzZnMgX19OUl9zeXNmcworI2RlZmluZSBTWVNfc3lzaW5mbyBfX05SX3N5c2luZm8KKyNkZWZpbmUgU1lTX3N5c2xvZyBfX05SX3N5c2xvZworI2RlZmluZSBTWVNfc3lzbWlwcyBfX05SX3N5c21pcHMKKyNkZWZpbmUgU1lTX3RlZSBfX05SX3RlZQorI2RlZmluZSBTWVNfdGdraWxsIF9fTlJfdGdraWxsCisjZGVmaW5lIFNZU190aW1lIF9fTlJfdGltZQorI2RlZmluZSBTWVNfdGltZXJfY3JlYXRlIF9fTlJfdGltZXJfY3JlYXRlCisjZGVmaW5lIFNZU190aW1lcl9kZWxldGUgX19OUl90aW1lcl9kZWxldGUKKyNkZWZpbmUgU1lTX3RpbWVyX2dldG92ZXJydW4gX19OUl90aW1lcl9nZXRvdmVycnVuCisjZGVmaW5lIFNZU190aW1lcl9nZXR0aW1lIF9fTlJfdGltZXJfZ2V0dGltZQorI2RlZmluZSBTWVNfdGltZXJfc2V0dGltZSBfX05SX3RpbWVyX3NldHRpbWUKKyNkZWZpbmUgU1lTX3RpbWVyZmQgX19OUl90aW1lcmZkCisjZGVmaW5lIFNZU190aW1lcmZkX2NyZWF0ZSBfX05SX3RpbWVyZmRfY3JlYXRlCisjZGVmaW5lIFNZU190aW1lcmZkX2dldHRpbWUgX19OUl90aW1lcmZkX2dldHRpbWUKKyNkZWZpbmUgU1lTX3RpbWVyZmRfc2V0dGltZSBfX05SX3RpbWVyZmRfc2V0dGltZQorI2RlZmluZSBTWVNfdGltZXMgX19OUl90aW1lcworI2RlZmluZSBTWVNfdGtpbGwgX19OUl90a2lsbAorI2RlZmluZSBTWVNfdHJ1bmNhdGUgX19OUl90cnVuY2F0ZQorI2RlZmluZSBTWVNfdHJ1bmNhdGU2NCBfX05SX3RydW5jYXRlNjQKKyNkZWZpbmUgU1lTX3VsaW1pdCBfX05SX3VsaW1pdAorI2RlZmluZSBTWVNfdW1hc2sgX19OUl91bWFzaworI2RlZmluZSBTWVNfdW1vdW50IF9fTlJfdW1vdW50CisjZGVmaW5lIFNZU191bW91bnQyIF9fTlJfdW1vdW50MgorI2RlZmluZSBTWVNfdW5hbWUgX19OUl91bmFtZQorI2RlZmluZSBTWVNfdW5saW5rIF9fTlJfdW5saW5rCisjZGVmaW5lIFNZU191bmxpbmthdCBfX05SX3VubGlua2F0CisjZGVmaW5lIFNZU191bnNoYXJlIF9fTlJfdW5zaGFyZQorI2RlZmluZSBTWVNfdW51c2VkMTA5IF9fTlJfdW51c2VkMTA5CisjZGVmaW5lIFNZU191bnVzZWQxNTAgX19OUl91bnVzZWQxNTAKKyNkZWZpbmUgU1lTX3VudXNlZDE4IF9fTlJfdW51c2VkMTgKKyNkZWZpbmUgU1lTX3VudXNlZDI4IF9fTlJfdW51c2VkMjgKKyNkZWZpbmUgU1lTX3VudXNlZDU5IF9fTlJfdW51c2VkNTkKKyNkZWZpbmUgU1lTX3VudXNlZDg0IF9fTlJfdW51c2VkODQKKyNkZWZpbmUgU1lTX3VzZWxpYiBfX05SX3VzZWxpYgorI2RlZmluZSBTWVNfdXN0YXQgX19OUl91c3RhdAorI2RlZmluZSBTWVNfdXRpbWUgX19OUl91dGltZQorI2RlZmluZSBTWVNfdXRpbWVuc2F0IF9fTlJfdXRpbWVuc2F0CisjZGVmaW5lIFNZU191dGltZXMgX19OUl91dGltZXMKKyNkZWZpbmUgU1lTX3ZoYW5ndXAgX19OUl92aGFuZ3VwCisjZGVmaW5lIFNZU192bTg2IF9fTlJfdm04NgorI2RlZmluZSBTWVNfdm1zcGxpY2UgX19OUl92bXNwbGljZQorI2RlZmluZSBTWVNfdnNlcnZlciBfX05SX3ZzZXJ2ZXIKKyNkZWZpbmUgU1lTX3dhaXQ0IF9fTlJfd2FpdDQKKyNkZWZpbmUgU1lTX3dhaXRpZCBfX05SX3dhaXRpZAorI2RlZmluZSBTWVNfd2FpdHBpZCBfX05SX3dhaXRwaWQKKyNkZWZpbmUgU1lTX3dyaXRlIF9fTlJfd3JpdGUKKyNkZWZpbmUgU1lTX3dyaXRldiBfX05SX3dyaXRldgorI2VsaWYgZGVmaW5lZChfX2kzODZfXykKKyNkZWZpbmUgU1lTX2FjY2VzcyBfX05SX2FjY2VzcworI2RlZmluZSBTWVNfYWNjdCBfX05SX2FjY3QKKyNkZWZpbmUgU1lTX2FkZF9rZXkgX19OUl9hZGRfa2V5CisjZGVmaW5lIFNZU19hZGp0aW1leCBfX05SX2FkanRpbWV4CisjZGVmaW5lIFNZU19hZnNfc3lzY2FsbCBfX05SX2Fmc19zeXNjYWxsCisjZGVmaW5lIFNZU19hbGFybSBfX05SX2FsYXJtCisjZGVmaW5lIFNZU19iZGZsdXNoIF9fTlJfYmRmbHVzaAorI2RlZmluZSBTWVNfYnJlYWsgX19OUl9icmVhaworI2RlZmluZSBTWVNfYnJrIF9fTlJfYnJrCisjZGVmaW5lIFNZU19jYXBnZXQgX19OUl9jYXBnZXQKKyNkZWZpbmUgU1lTX2NhcHNldCBfX05SX2NhcHNldAorI2RlZmluZSBTWVNfY2hkaXIgX19OUl9jaGRpcgorI2RlZmluZSBTWVNfY2htb2QgX19OUl9jaG1vZAorI2RlZmluZSBTWVNfY2hvd24gX19OUl9jaG93bgorI2RlZmluZSBTWVNfY2hvd24zMiBfX05SX2Nob3duMzIKKyNkZWZpbmUgU1lTX2Nocm9vdCBfX05SX2Nocm9vdAorI2RlZmluZSBTWVNfY2xvY2tfYWRqdGltZSBfX05SX2Nsb2NrX2FkanRpbWUKKyNkZWZpbmUgU1lTX2Nsb2NrX2dldHJlcyBfX05SX2Nsb2NrX2dldHJlcworI2RlZmluZSBTWVNfY2xvY2tfZ2V0dGltZSBfX05SX2Nsb2NrX2dldHRpbWUKKyNkZWZpbmUgU1lTX2Nsb2NrX25hbm9zbGVlcCBfX05SX2Nsb2NrX25hbm9zbGVlcAorI2RlZmluZSBTWVNfY2xvY2tfc2V0dGltZSBfX05SX2Nsb2NrX3NldHRpbWUKKyNkZWZpbmUgU1lTX2Nsb25lIF9fTlJfY2xvbmUKKyNkZWZpbmUgU1lTX2Nsb3NlIF9fTlJfY2xvc2UKKyNkZWZpbmUgU1lTX2NyZWF0IF9fTlJfY3JlYXQKKyNkZWZpbmUgU1lTX2NyZWF0ZV9tb2R1bGUgX19OUl9jcmVhdGVfbW9kdWxlCisjZGVmaW5lIFNZU19kZWxldGVfbW9kdWxlIF9fTlJfZGVsZXRlX21vZHVsZQorI2RlZmluZSBTWVNfZHVwIF9fTlJfZHVwCisjZGVmaW5lIFNZU19kdXAyIF9fTlJfZHVwMgorI2RlZmluZSBTWVNfZHVwMyBfX05SX2R1cDMKKyNkZWZpbmUgU1lTX2Vwb2xsX2NyZWF0ZSBfX05SX2Vwb2xsX2NyZWF0ZQorI2RlZmluZSBTWVNfZXBvbGxfY3JlYXRlMSBfX05SX2Vwb2xsX2NyZWF0ZTEKKyNkZWZpbmUgU1lTX2Vwb2xsX2N0bCBfX05SX2Vwb2xsX2N0bAorI2RlZmluZSBTWVNfZXBvbGxfcHdhaXQgX19OUl9lcG9sbF9wd2FpdAorI2RlZmluZSBTWVNfZXBvbGxfd2FpdCBfX05SX2Vwb2xsX3dhaXQKKyNkZWZpbmUgU1lTX2V2ZW50ZmQgX19OUl9ldmVudGZkCisjZGVmaW5lIFNZU19ldmVudGZkMiBfX05SX2V2ZW50ZmQyCisjZGVmaW5lIFNZU19leGVjdmUgX19OUl9leGVjdmUKKyNkZWZpbmUgU1lTX2V4aXQgX19OUl9leGl0CisjZGVmaW5lIFNZU19leGl0X2dyb3VwIF9fTlJfZXhpdF9ncm91cAorI2RlZmluZSBTWVNfZmFjY2Vzc2F0IF9fTlJfZmFjY2Vzc2F0CisjZGVmaW5lIFNZU19mYWR2aXNlNjQgX19OUl9mYWR2aXNlNjQKKyNkZWZpbmUgU1lTX2ZhZHZpc2U2NF82NCBfX05SX2ZhZHZpc2U2NF82NAorI2RlZmluZSBTWVNfZmFsbG9jYXRlIF9fTlJfZmFsbG9jYXRlCisjZGVmaW5lIFNZU19mYW5vdGlmeV9pbml0IF9fTlJfZmFub3RpZnlfaW5pdAorI2RlZmluZSBTWVNfZmFub3RpZnlfbWFyayBfX05SX2Zhbm90aWZ5X21hcmsKKyNkZWZpbmUgU1lTX2ZjaGRpciBfX05SX2ZjaGRpcgorI2RlZmluZSBTWVNfZmNobW9kIF9fTlJfZmNobW9kCisjZGVmaW5lIFNZU19mY2htb2RhdCBfX05SX2ZjaG1vZGF0CisjZGVmaW5lIFNZU19mY2hvd24gX19OUl9mY2hvd24KKyNkZWZpbmUgU1lTX2ZjaG93bjMyIF9fTlJfZmNob3duMzIKKyNkZWZpbmUgU1lTX2ZjaG93bmF0IF9fTlJfZmNob3duYXQKKyNkZWZpbmUgU1lTX2ZjbnRsIF9fTlJfZmNudGwKKyNkZWZpbmUgU1lTX2ZjbnRsNjQgX19OUl9mY250bDY0CisjZGVmaW5lIFNZU19mZGF0YXN5bmMgX19OUl9mZGF0YXN5bmMKKyNkZWZpbmUgU1lTX2ZnZXR4YXR0ciBfX05SX2ZnZXR4YXR0cgorI2RlZmluZSBTWVNfZmxpc3R4YXR0ciBfX05SX2ZsaXN0eGF0dHIKKyNkZWZpbmUgU1lTX2Zsb2NrIF9fTlJfZmxvY2sKKyNkZWZpbmUgU1lTX2ZvcmsgX19OUl9mb3JrCisjZGVmaW5lIFNZU19mcmVtb3ZleGF0dHIgX19OUl9mcmVtb3ZleGF0dHIKKyNkZWZpbmUgU1lTX2ZzZXR4YXR0ciBfX05SX2ZzZXR4YXR0cgorI2RlZmluZSBTWVNfZnN0YXQgX19OUl9mc3RhdAorI2RlZmluZSBTWVNfZnN0YXQ2NCBfX05SX2ZzdGF0NjQKKyNkZWZpbmUgU1lTX2ZzdGF0YXQ2NCBfX05SX2ZzdGF0YXQ2NAorI2RlZmluZSBTWVNfZnN0YXRmcyBfX05SX2ZzdGF0ZnMKKyNkZWZpbmUgU1lTX2ZzdGF0ZnM2NCBfX05SX2ZzdGF0ZnM2NAorI2RlZmluZSBTWVNfZnN5bmMgX19OUl9mc3luYworI2RlZmluZSBTWVNfZnRpbWUgX19OUl9mdGltZQorI2RlZmluZSBTWVNfZnRydW5jYXRlIF9fTlJfZnRydW5jYXRlCisjZGVmaW5lIFNZU19mdHJ1bmNhdGU2NCBfX05SX2Z0cnVuY2F0ZTY0CisjZGVmaW5lIFNZU19mdXRleCBfX05SX2Z1dGV4CisjZGVmaW5lIFNZU19mdXRpbWVzYXQgX19OUl9mdXRpbWVzYXQKKyNkZWZpbmUgU1lTX2dldF9rZXJuZWxfc3ltcyBfX05SX2dldF9rZXJuZWxfc3ltcworI2RlZmluZSBTWVNfZ2V0X21lbXBvbGljeSBfX05SX2dldF9tZW1wb2xpY3kKKyNkZWZpbmUgU1lTX2dldF9yb2J1c3RfbGlzdCBfX05SX2dldF9yb2J1c3RfbGlzdAorI2RlZmluZSBTWVNfZ2V0X3RocmVhZF9hcmVhIF9fTlJfZ2V0X3RocmVhZF9hcmVhCisjZGVmaW5lIFNZU19nZXRjcHUgX19OUl9nZXRjcHUKKyNkZWZpbmUgU1lTX2dldGN3ZCBfX05SX2dldGN3ZAorI2RlZmluZSBTWVNfZ2V0ZGVudHMgX19OUl9nZXRkZW50cworI2RlZmluZSBTWVNfZ2V0ZGVudHM2NCBfX05SX2dldGRlbnRzNjQKKyNkZWZpbmUgU1lTX2dldGVnaWQgX19OUl9nZXRlZ2lkCisjZGVmaW5lIFNZU19nZXRlZ2lkMzIgX19OUl9nZXRlZ2lkMzIKKyNkZWZpbmUgU1lTX2dldGV1aWQgX19OUl9nZXRldWlkCisjZGVmaW5lIFNZU19nZXRldWlkMzIgX19OUl9nZXRldWlkMzIKKyNkZWZpbmUgU1lTX2dldGdpZCBfX05SX2dldGdpZAorI2RlZmluZSBTWVNfZ2V0Z2lkMzIgX19OUl9nZXRnaWQzMgorI2RlZmluZSBTWVNfZ2V0Z3JvdXBzIF9fTlJfZ2V0Z3JvdXBzCisjZGVmaW5lIFNZU19nZXRncm91cHMzMiBfX05SX2dldGdyb3VwczMyCisjZGVmaW5lIFNZU19nZXRpdGltZXIgX19OUl9nZXRpdGltZXIKKyNkZWZpbmUgU1lTX2dldHBnaWQgX19OUl9nZXRwZ2lkCisjZGVmaW5lIFNZU19nZXRwZ3JwIF9fTlJfZ2V0cGdycAorI2RlZmluZSBTWVNfZ2V0cGlkIF9fTlJfZ2V0cGlkCisjZGVmaW5lIFNZU19nZXRwbXNnIF9fTlJfZ2V0cG1zZworI2RlZmluZSBTWVNfZ2V0cHBpZCBfX05SX2dldHBwaWQKKyNkZWZpbmUgU1lTX2dldHByaW9yaXR5IF9fTlJfZ2V0cHJpb3JpdHkKKyNkZWZpbmUgU1lTX2dldHJlc2dpZCBfX05SX2dldHJlc2dpZAorI2RlZmluZSBTWVNfZ2V0cmVzZ2lkMzIgX19OUl9nZXRyZXNnaWQzMgorI2RlZmluZSBTWVNfZ2V0cmVzdWlkIF9fTlJfZ2V0cmVzdWlkCisjZGVmaW5lIFNZU19nZXRyZXN1aWQzMiBfX05SX2dldHJlc3VpZDMyCisjZGVmaW5lIFNZU19nZXRybGltaXQgX19OUl9nZXRybGltaXQKKyNkZWZpbmUgU1lTX2dldHJ1c2FnZSBfX05SX2dldHJ1c2FnZQorI2RlZmluZSBTWVNfZ2V0c2lkIF9fTlJfZ2V0c2lkCisjZGVmaW5lIFNZU19nZXR0aWQgX19OUl9nZXR0aWQKKyNkZWZpbmUgU1lTX2dldHRpbWVvZmRheSBfX05SX2dldHRpbWVvZmRheQorI2RlZmluZSBTWVNfZ2V0dWlkIF9fTlJfZ2V0dWlkCisjZGVmaW5lIFNZU19nZXR1aWQzMiBfX05SX2dldHVpZDMyCisjZGVmaW5lIFNZU19nZXR4YXR0ciBfX05SX2dldHhhdHRyCisjZGVmaW5lIFNZU19ndHR5IF9fTlJfZ3R0eQorI2RlZmluZSBTWVNfaWRsZSBfX05SX2lkbGUKKyNkZWZpbmUgU1lTX2luaXRfbW9kdWxlIF9fTlJfaW5pdF9tb2R1bGUKKyNkZWZpbmUgU1lTX2lub3RpZnlfYWRkX3dhdGNoIF9fTlJfaW5vdGlmeV9hZGRfd2F0Y2gKKyNkZWZpbmUgU1lTX2lub3RpZnlfaW5pdCBfX05SX2lub3RpZnlfaW5pdAorI2RlZmluZSBTWVNfaW5vdGlmeV9pbml0MSBfX05SX2lub3RpZnlfaW5pdDEKKyNkZWZpbmUgU1lTX2lub3RpZnlfcm1fd2F0Y2ggX19OUl9pbm90aWZ5X3JtX3dhdGNoCisjZGVmaW5lIFNZU19pb19jYW5jZWwgX19OUl9pb19jYW5jZWwKKyNkZWZpbmUgU1lTX2lvX2Rlc3Ryb3kgX19OUl9pb19kZXN0cm95CisjZGVmaW5lIFNZU19pb19nZXRldmVudHMgX19OUl9pb19nZXRldmVudHMKKyNkZWZpbmUgU1lTX2lvX3NldHVwIF9fTlJfaW9fc2V0dXAKKyNkZWZpbmUgU1lTX2lvX3N1Ym1pdCBfX05SX2lvX3N1Ym1pdAorI2RlZmluZSBTWVNfaW9jdGwgX19OUl9pb2N0bAorI2RlZmluZSBTWVNfaW9wZXJtIF9fTlJfaW9wZXJtCisjZGVmaW5lIFNZU19pb3BsIF9fTlJfaW9wbAorI2RlZmluZSBTWVNfaW9wcmlvX2dldCBfX05SX2lvcHJpb19nZXQKKyNkZWZpbmUgU1lTX2lvcHJpb19zZXQgX19OUl9pb3ByaW9fc2V0CisjZGVmaW5lIFNZU19pcGMgX19OUl9pcGMKKyNkZWZpbmUgU1lTX2tleGVjX2xvYWQgX19OUl9rZXhlY19sb2FkCisjZGVmaW5lIFNZU19rZXljdGwgX19OUl9rZXljdGwKKyNkZWZpbmUgU1lTX2tpbGwgX19OUl9raWxsCisjZGVmaW5lIFNZU19sY2hvd24gX19OUl9sY2hvd24KKyNkZWZpbmUgU1lTX2xjaG93bjMyIF9fTlJfbGNob3duMzIKKyNkZWZpbmUgU1lTX2xnZXR4YXR0ciBfX05SX2xnZXR4YXR0cgorI2RlZmluZSBTWVNfbGluayBfX05SX2xpbmsKKyNkZWZpbmUgU1lTX2xpbmthdCBfX05SX2xpbmthdAorI2RlZmluZSBTWVNfbGlzdHhhdHRyIF9fTlJfbGlzdHhhdHRyCisjZGVmaW5lIFNZU19sbGlzdHhhdHRyIF9fTlJfbGxpc3R4YXR0cgorI2RlZmluZSBTWVNfbG9jayBfX05SX2xvY2sKKyNkZWZpbmUgU1lTX2xvb2t1cF9kY29va2llIF9fTlJfbG9va3VwX2Rjb29raWUKKyNkZWZpbmUgU1lTX2xyZW1vdmV4YXR0ciBfX05SX2xyZW1vdmV4YXR0cgorI2RlZmluZSBTWVNfbHNlZWsgX19OUl9sc2VlaworI2RlZmluZSBTWVNfbHNldHhhdHRyIF9fTlJfbHNldHhhdHRyCisjZGVmaW5lIFNZU19sc3RhdCBfX05SX2xzdGF0CisjZGVmaW5lIFNZU19sc3RhdDY0IF9fTlJfbHN0YXQ2NAorI2RlZmluZSBTWVNfbWFkdmlzZSBfX05SX21hZHZpc2UKKyNkZWZpbmUgU1lTX21hZHZpc2UxIF9fTlJfbWFkdmlzZTEKKyNkZWZpbmUgU1lTX21iaW5kIF9fTlJfbWJpbmQKKyNkZWZpbmUgU1lTX21pZ3JhdGVfcGFnZXMgX19OUl9taWdyYXRlX3BhZ2VzCisjZGVmaW5lIFNZU19taW5jb3JlIF9fTlJfbWluY29yZQorI2RlZmluZSBTWVNfbWtkaXIgX19OUl9ta2RpcgorI2RlZmluZSBTWVNfbWtkaXJhdCBfX05SX21rZGlyYXQKKyNkZWZpbmUgU1lTX21rbm9kIF9fTlJfbWtub2QKKyNkZWZpbmUgU1lTX21rbm9kYXQgX19OUl9ta25vZGF0CisjZGVmaW5lIFNZU19tbG9jayBfX05SX21sb2NrCisjZGVmaW5lIFNZU19tbG9ja2FsbCBfX05SX21sb2NrYWxsCisjZGVmaW5lIFNZU19tbWFwIF9fTlJfbW1hcAorI2RlZmluZSBTWVNfbW1hcDIgX19OUl9tbWFwMgorI2RlZmluZSBTWVNfbW9kaWZ5X2xkdCBfX05SX21vZGlmeV9sZHQKKyNkZWZpbmUgU1lTX21vdW50IF9fTlJfbW91bnQKKyNkZWZpbmUgU1lTX21vdmVfcGFnZXMgX19OUl9tb3ZlX3BhZ2VzCisjZGVmaW5lIFNZU19tcHJvdGVjdCBfX05SX21wcm90ZWN0CisjZGVmaW5lIFNZU19tcHggX19OUl9tcHgKKyNkZWZpbmUgU1lTX21xX2dldHNldGF0dHIgX19OUl9tcV9nZXRzZXRhdHRyCisjZGVmaW5lIFNZU19tcV9ub3RpZnkgX19OUl9tcV9ub3RpZnkKKyNkZWZpbmUgU1lTX21xX29wZW4gX19OUl9tcV9vcGVuCisjZGVmaW5lIFNZU19tcV90aW1lZHJlY2VpdmUgX19OUl9tcV90aW1lZHJlY2VpdmUKKyNkZWZpbmUgU1lTX21xX3RpbWVkc2VuZCBfX05SX21xX3RpbWVkc2VuZAorI2RlZmluZSBTWVNfbXFfdW5saW5rIF9fTlJfbXFfdW5saW5rCisjZGVmaW5lIFNZU19tcmVtYXAgX19OUl9tcmVtYXAKKyNkZWZpbmUgU1lTX21zeW5jIF9fTlJfbXN5bmMKKyNkZWZpbmUgU1lTX211bmxvY2sgX19OUl9tdW5sb2NrCisjZGVmaW5lIFNZU19tdW5sb2NrYWxsIF9fTlJfbXVubG9ja2FsbAorI2RlZmluZSBTWVNfbXVubWFwIF9fTlJfbXVubWFwCisjZGVmaW5lIFNZU19uYW1lX3RvX2hhbmRsZV9hdCBfX05SX25hbWVfdG9faGFuZGxlX2F0CisjZGVmaW5lIFNZU19uYW5vc2xlZXAgX19OUl9uYW5vc2xlZXAKKyNkZWZpbmUgU1lTX25mc3NlcnZjdGwgX19OUl9uZnNzZXJ2Y3RsCisjZGVmaW5lIFNZU19uaWNlIF9fTlJfbmljZQorI2RlZmluZSBTWVNfb2xkZnN0YXQgX19OUl9vbGRmc3RhdAorI2RlZmluZSBTWVNfb2xkbHN0YXQgX19OUl9vbGRsc3RhdAorI2RlZmluZSBTWVNfb2xkb2xkdW5hbWUgX19OUl9vbGRvbGR1bmFtZQorI2RlZmluZSBTWVNfb2xkc3RhdCBfX05SX29sZHN0YXQKKyNkZWZpbmUgU1lTX29sZHVuYW1lIF9fTlJfb2xkdW5hbWUKKyNkZWZpbmUgU1lTX29wZW4gX19OUl9vcGVuCisjZGVmaW5lIFNZU19vcGVuX2J5X2hhbmRsZV9hdCBfX05SX29wZW5fYnlfaGFuZGxlX2F0CisjZGVmaW5lIFNZU19vcGVuYXQgX19OUl9vcGVuYXQKKyNkZWZpbmUgU1lTX3BhdXNlIF9fTlJfcGF1c2UKKyNkZWZpbmUgU1lTX3BlcmZfZXZlbnRfb3BlbiBfX05SX3BlcmZfZXZlbnRfb3BlbgorI2RlZmluZSBTWVNfcGVyc29uYWxpdHkgX19OUl9wZXJzb25hbGl0eQorI2RlZmluZSBTWVNfcGlwZSBfX05SX3BpcGUKKyNkZWZpbmUgU1lTX3BpcGUyIF9fTlJfcGlwZTIKKyNkZWZpbmUgU1lTX3Bpdm90X3Jvb3QgX19OUl9waXZvdF9yb290CisjZGVmaW5lIFNZU19wb2xsIF9fTlJfcG9sbAorI2RlZmluZSBTWVNfcHBvbGwgX19OUl9wcG9sbAorI2RlZmluZSBTWVNfcHJjdGwgX19OUl9wcmN0bAorI2RlZmluZSBTWVNfcHJlYWQ2NCBfX05SX3ByZWFkNjQKKyNkZWZpbmUgU1lTX3ByZWFkdiBfX05SX3ByZWFkdgorI2RlZmluZSBTWVNfcHJsaW1pdDY0IF9fTlJfcHJsaW1pdDY0CisjZGVmaW5lIFNZU19wcm9mIF9fTlJfcHJvZgorI2RlZmluZSBTWVNfcHJvZmlsIF9fTlJfcHJvZmlsCisjZGVmaW5lIFNZU19wc2VsZWN0NiBfX05SX3BzZWxlY3Q2CisjZGVmaW5lIFNZU19wdHJhY2UgX19OUl9wdHJhY2UKKyNkZWZpbmUgU1lTX3B1dHBtc2cgX19OUl9wdXRwbXNnCisjZGVmaW5lIFNZU19wd3JpdGU2NCBfX05SX3B3cml0ZTY0CisjZGVmaW5lIFNZU19wd3JpdGV2IF9fTlJfcHdyaXRldgorI2RlZmluZSBTWVNfcXVlcnlfbW9kdWxlIF9fTlJfcXVlcnlfbW9kdWxlCisjZGVmaW5lIFNZU19xdW90YWN0bCBfX05SX3F1b3RhY3RsCisjZGVmaW5lIFNZU19yZWFkIF9fTlJfcmVhZAorI2RlZmluZSBTWVNfcmVhZGFoZWFkIF9fTlJfcmVhZGFoZWFkCisjZGVmaW5lIFNZU19yZWFkZGlyIF9fTlJfcmVhZGRpcgorI2RlZmluZSBTWVNfcmVhZGxpbmsgX19OUl9yZWFkbGluaworI2RlZmluZSBTWVNfcmVhZGxpbmthdCBfX05SX3JlYWRsaW5rYXQKKyNkZWZpbmUgU1lTX3JlYWR2IF9fTlJfcmVhZHYKKyNkZWZpbmUgU1lTX3JlYm9vdCBfX05SX3JlYm9vdAorI2RlZmluZSBTWVNfcmVjdm1tc2cgX19OUl9yZWN2bW1zZworI2RlZmluZSBTWVNfcmVtYXBfZmlsZV9wYWdlcyBfX05SX3JlbWFwX2ZpbGVfcGFnZXMKKyNkZWZpbmUgU1lTX3JlbW92ZXhhdHRyIF9fTlJfcmVtb3ZleGF0dHIKKyNkZWZpbmUgU1lTX3JlbmFtZSBfX05SX3JlbmFtZQorI2RlZmluZSBTWVNfcmVuYW1lYXQgX19OUl9yZW5hbWVhdAorI2RlZmluZSBTWVNfcmVxdWVzdF9rZXkgX19OUl9yZXF1ZXN0X2tleQorI2RlZmluZSBTWVNfcmVzdGFydF9zeXNjYWxsIF9fTlJfcmVzdGFydF9zeXNjYWxsCisjZGVmaW5lIFNZU19ybWRpciBfX05SX3JtZGlyCisjZGVmaW5lIFNZU19ydF9zaWdhY3Rpb24gX19OUl9ydF9zaWdhY3Rpb24KKyNkZWZpbmUgU1lTX3J0X3NpZ3BlbmRpbmcgX19OUl9ydF9zaWdwZW5kaW5nCisjZGVmaW5lIFNZU19ydF9zaWdwcm9jbWFzayBfX05SX3J0X3NpZ3Byb2NtYXNrCisjZGVmaW5lIFNZU19ydF9zaWdxdWV1ZWluZm8gX19OUl9ydF9zaWdxdWV1ZWluZm8KKyNkZWZpbmUgU1lTX3J0X3NpZ3JldHVybiBfX05SX3J0X3NpZ3JldHVybgorI2RlZmluZSBTWVNfcnRfc2lnc3VzcGVuZCBfX05SX3J0X3NpZ3N1c3BlbmQKKyNkZWZpbmUgU1lTX3J0X3NpZ3RpbWVkd2FpdCBfX05SX3J0X3NpZ3RpbWVkd2FpdAorI2RlZmluZSBTWVNfcnRfdGdzaWdxdWV1ZWluZm8gX19OUl9ydF90Z3NpZ3F1ZXVlaW5mbworI2RlZmluZSBTWVNfc2NoZWRfZ2V0X3ByaW9yaXR5X21heCBfX05SX3NjaGVkX2dldF9wcmlvcml0eV9tYXgKKyNkZWZpbmUgU1lTX3NjaGVkX2dldF9wcmlvcml0eV9taW4gX19OUl9zY2hlZF9nZXRfcHJpb3JpdHlfbWluCisjZGVmaW5lIFNZU19zY2hlZF9nZXRhZmZpbml0eSBfX05SX3NjaGVkX2dldGFmZmluaXR5CisjZGVmaW5lIFNZU19zY2hlZF9nZXRwYXJhbSBfX05SX3NjaGVkX2dldHBhcmFtCisjZGVmaW5lIFNZU19zY2hlZF9nZXRzY2hlZHVsZXIgX19OUl9zY2hlZF9nZXRzY2hlZHVsZXIKKyNkZWZpbmUgU1lTX3NjaGVkX3JyX2dldF9pbnRlcnZhbCBfX05SX3NjaGVkX3JyX2dldF9pbnRlcnZhbAorI2RlZmluZSBTWVNfc2NoZWRfc2V0YWZmaW5pdHkgX19OUl9zY2hlZF9zZXRhZmZpbml0eQorI2RlZmluZSBTWVNfc2NoZWRfc2V0cGFyYW0gX19OUl9zY2hlZF9zZXRwYXJhbQorI2RlZmluZSBTWVNfc2NoZWRfc2V0c2NoZWR1bGVyIF9fTlJfc2NoZWRfc2V0c2NoZWR1bGVyCisjZGVmaW5lIFNZU19zY2hlZF95aWVsZCBfX05SX3NjaGVkX3lpZWxkCisjZGVmaW5lIFNZU19zZWxlY3QgX19OUl9zZWxlY3QKKyNkZWZpbmUgU1lTX3NlbmRmaWxlIF9fTlJfc2VuZGZpbGUKKyNkZWZpbmUgU1lTX3NlbmRmaWxlNjQgX19OUl9zZW5kZmlsZTY0CisjZGVmaW5lIFNZU19zZW5kbW1zZyBfX05SX3NlbmRtbXNnCisjZGVmaW5lIFNZU19zZXRfbWVtcG9saWN5IF9fTlJfc2V0X21lbXBvbGljeQorI2RlZmluZSBTWVNfc2V0X3JvYnVzdF9saXN0IF9fTlJfc2V0X3JvYnVzdF9saXN0CisjZGVmaW5lIFNZU19zZXRfdGhyZWFkX2FyZWEgX19OUl9zZXRfdGhyZWFkX2FyZWEKKyNkZWZpbmUgU1lTX3NldF90aWRfYWRkcmVzcyBfX05SX3NldF90aWRfYWRkcmVzcworI2RlZmluZSBTWVNfc2V0ZG9tYWlubmFtZSBfX05SX3NldGRvbWFpbm5hbWUKKyNkZWZpbmUgU1lTX3NldGZzZ2lkIF9fTlJfc2V0ZnNnaWQKKyNkZWZpbmUgU1lTX3NldGZzZ2lkMzIgX19OUl9zZXRmc2dpZDMyCisjZGVmaW5lIFNZU19zZXRmc3VpZCBfX05SX3NldGZzdWlkCisjZGVmaW5lIFNZU19zZXRmc3VpZDMyIF9fTlJfc2V0ZnN1aWQzMgorI2RlZmluZSBTWVNfc2V0Z2lkIF9fTlJfc2V0Z2lkCisjZGVmaW5lIFNZU19zZXRnaWQzMiBfX05SX3NldGdpZDMyCisjZGVmaW5lIFNZU19zZXRncm91cHMgX19OUl9zZXRncm91cHMKKyNkZWZpbmUgU1lTX3NldGdyb3VwczMyIF9fTlJfc2V0Z3JvdXBzMzIKKyNkZWZpbmUgU1lTX3NldGhvc3RuYW1lIF9fTlJfc2V0aG9zdG5hbWUKKyNkZWZpbmUgU1lTX3NldGl0aW1lciBfX05SX3NldGl0aW1lcgorI2RlZmluZSBTWVNfc2V0bnMgX19OUl9zZXRucworI2RlZmluZSBTWVNfc2V0cGdpZCBfX05SX3NldHBnaWQKKyNkZWZpbmUgU1lTX3NldHByaW9yaXR5IF9fTlJfc2V0cHJpb3JpdHkKKyNkZWZpbmUgU1lTX3NldHJlZ2lkIF9fTlJfc2V0cmVnaWQKKyNkZWZpbmUgU1lTX3NldHJlZ2lkMzIgX19OUl9zZXRyZWdpZDMyCisjZGVmaW5lIFNZU19zZXRyZXNnaWQgX19OUl9zZXRyZXNnaWQKKyNkZWZpbmUgU1lTX3NldHJlc2dpZDMyIF9fTlJfc2V0cmVzZ2lkMzIKKyNkZWZpbmUgU1lTX3NldHJlc3VpZCBfX05SX3NldHJlc3VpZAorI2RlZmluZSBTWVNfc2V0cmVzdWlkMzIgX19OUl9zZXRyZXN1aWQzMgorI2RlZmluZSBTWVNfc2V0cmV1aWQgX19OUl9zZXRyZXVpZAorI2RlZmluZSBTWVNfc2V0cmV1aWQzMiBfX05SX3NldHJldWlkMzIKKyNkZWZpbmUgU1lTX3NldHJsaW1pdCBfX05SX3NldHJsaW1pdAorI2RlZmluZSBTWVNfc2V0c2lkIF9fTlJfc2V0c2lkCisjZGVmaW5lIFNZU19zZXR0aW1lb2ZkYXkgX19OUl9zZXR0aW1lb2ZkYXkKKyNkZWZpbmUgU1lTX3NldHVpZCBfX05SX3NldHVpZAorI2RlZmluZSBTWVNfc2V0dWlkMzIgX19OUl9zZXR1aWQzMgorI2RlZmluZSBTWVNfc2V0eGF0dHIgX19OUl9zZXR4YXR0cgorI2RlZmluZSBTWVNfc2dldG1hc2sgX19OUl9zZ2V0bWFzaworI2RlZmluZSBTWVNfc2lnYWN0aW9uIF9fTlJfc2lnYWN0aW9uCisjZGVmaW5lIFNZU19zaWdhbHRzdGFjayBfX05SX3NpZ2FsdHN0YWNrCisjZGVmaW5lIFNZU19zaWduYWwgX19OUl9zaWduYWwKKyNkZWZpbmUgU1lTX3NpZ25hbGZkIF9fTlJfc2lnbmFsZmQKKyNkZWZpbmUgU1lTX3NpZ25hbGZkNCBfX05SX3NpZ25hbGZkNAorI2RlZmluZSBTWVNfc2lncGVuZGluZyBfX05SX3NpZ3BlbmRpbmcKKyNkZWZpbmUgU1lTX3NpZ3Byb2NtYXNrIF9fTlJfc2lncHJvY21hc2sKKyNkZWZpbmUgU1lTX3NpZ3JldHVybiBfX05SX3NpZ3JldHVybgorI2RlZmluZSBTWVNfc2lnc3VzcGVuZCBfX05SX3NpZ3N1c3BlbmQKKyNkZWZpbmUgU1lTX3NvY2tldGNhbGwgX19OUl9zb2NrZXRjYWxsCisjZGVmaW5lIFNZU19zcGxpY2UgX19OUl9zcGxpY2UKKyNkZWZpbmUgU1lTX3NzZXRtYXNrIF9fTlJfc3NldG1hc2sKKyNkZWZpbmUgU1lTX3N0YXQgX19OUl9zdGF0CisjZGVmaW5lIFNZU19zdGF0NjQgX19OUl9zdGF0NjQKKyNkZWZpbmUgU1lTX3N0YXRmcyBfX05SX3N0YXRmcworI2RlZmluZSBTWVNfc3RhdGZzNjQgX19OUl9zdGF0ZnM2NAorI2RlZmluZSBTWVNfc3RpbWUgX19OUl9zdGltZQorI2RlZmluZSBTWVNfc3R0eSBfX05SX3N0dHkKKyNkZWZpbmUgU1lTX3N3YXBvZmYgX19OUl9zd2Fwb2ZmCisjZGVmaW5lIFNZU19zd2Fwb24gX19OUl9zd2Fwb24KKyNkZWZpbmUgU1lTX3N5bWxpbmsgX19OUl9zeW1saW5rCisjZGVmaW5lIFNZU19zeW1saW5rYXQgX19OUl9zeW1saW5rYXQKKyNkZWZpbmUgU1lTX3N5bmMgX19OUl9zeW5jCisjZGVmaW5lIFNZU19zeW5jX2ZpbGVfcmFuZ2UgX19OUl9zeW5jX2ZpbGVfcmFuZ2UKKyNkZWZpbmUgU1lTX3N5bmNmcyBfX05SX3N5bmNmcworI2RlZmluZSBTWVNfc3lzZnMgX19OUl9zeXNmcworI2RlZmluZSBTWVNfc3lzaW5mbyBfX05SX3N5c2luZm8KKyNkZWZpbmUgU1lTX3N5c2xvZyBfX05SX3N5c2xvZworI2RlZmluZSBTWVNfdGVlIF9fTlJfdGVlCisjZGVmaW5lIFNZU190Z2tpbGwgX19OUl90Z2tpbGwKKyNkZWZpbmUgU1lTX3RpbWUgX19OUl90aW1lCisjZGVmaW5lIFNZU190aW1lcl9jcmVhdGUgX19OUl90aW1lcl9jcmVhdGUKKyNkZWZpbmUgU1lTX3RpbWVyX2RlbGV0ZSBfX05SX3RpbWVyX2RlbGV0ZQorI2RlZmluZSBTWVNfdGltZXJfZ2V0b3ZlcnJ1biBfX05SX3RpbWVyX2dldG92ZXJydW4KKyNkZWZpbmUgU1lTX3RpbWVyX2dldHRpbWUgX19OUl90aW1lcl9nZXR0aW1lCisjZGVmaW5lIFNZU190aW1lcl9zZXR0aW1lIF9fTlJfdGltZXJfc2V0dGltZQorI2RlZmluZSBTWVNfdGltZXJmZF9jcmVhdGUgX19OUl90aW1lcmZkX2NyZWF0ZQorI2RlZmluZSBTWVNfdGltZXJmZF9nZXR0aW1lIF9fTlJfdGltZXJmZF9nZXR0aW1lCisjZGVmaW5lIFNZU190aW1lcmZkX3NldHRpbWUgX19OUl90aW1lcmZkX3NldHRpbWUKKyNkZWZpbmUgU1lTX3RpbWVzIF9fTlJfdGltZXMKKyNkZWZpbmUgU1lTX3RraWxsIF9fTlJfdGtpbGwKKyNkZWZpbmUgU1lTX3RydW5jYXRlIF9fTlJfdHJ1bmNhdGUKKyNkZWZpbmUgU1lTX3RydW5jYXRlNjQgX19OUl90cnVuY2F0ZTY0CisjZGVmaW5lIFNZU191Z2V0cmxpbWl0IF9fTlJfdWdldHJsaW1pdAorI2RlZmluZSBTWVNfdWxpbWl0IF9fTlJfdWxpbWl0CisjZGVmaW5lIFNZU191bWFzayBfX05SX3VtYXNrCisjZGVmaW5lIFNZU191bW91bnQgX19OUl91bW91bnQKKyNkZWZpbmUgU1lTX3Vtb3VudDIgX19OUl91bW91bnQyCisjZGVmaW5lIFNZU191bmFtZSBfX05SX3VuYW1lCisjZGVmaW5lIFNZU191bmxpbmsgX19OUl91bmxpbmsKKyNkZWZpbmUgU1lTX3VubGlua2F0IF9fTlJfdW5saW5rYXQKKyNkZWZpbmUgU1lTX3Vuc2hhcmUgX19OUl91bnNoYXJlCisjZGVmaW5lIFNZU191c2VsaWIgX19OUl91c2VsaWIKKyNkZWZpbmUgU1lTX3VzdGF0IF9fTlJfdXN0YXQKKyNkZWZpbmUgU1lTX3V0aW1lIF9fTlJfdXRpbWUKKyNkZWZpbmUgU1lTX3V0aW1lbnNhdCBfX05SX3V0aW1lbnNhdAorI2RlZmluZSBTWVNfdXRpbWVzIF9fTlJfdXRpbWVzCisjZGVmaW5lIFNZU192Zm9yayBfX05SX3Zmb3JrCisjZGVmaW5lIFNZU192aGFuZ3VwIF9fTlJfdmhhbmd1cAorI2RlZmluZSBTWVNfdm04NiBfX05SX3ZtODYKKyNkZWZpbmUgU1lTX3ZtODZvbGQgX19OUl92bTg2b2xkCisjZGVmaW5lIFNZU192bXNwbGljZSBfX05SX3Ztc3BsaWNlCisjZGVmaW5lIFNZU192c2VydmVyIF9fTlJfdnNlcnZlcgorI2RlZmluZSBTWVNfd2FpdDQgX19OUl93YWl0NAorI2RlZmluZSBTWVNfd2FpdGlkIF9fTlJfd2FpdGlkCisjZGVmaW5lIFNZU193YWl0cGlkIF9fTlJfd2FpdHBpZAorI2RlZmluZSBTWVNfd3JpdGUgX19OUl93cml0ZQorI2RlZmluZSBTWVNfd3JpdGV2IF9fTlJfd3JpdGV2CisjZW5kaWYKKyNlbmRpZiAvKiBfQklPTklDX0dMSUJDX1NZU0NBTExTX0hfICovCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvc3lzL2lvY3RsLmggYi9saWJjL2luY2x1ZGUvc3lzL2lvY3RsLmgKaW5kZXggOWY2ODUxMC4uNDlkNDUyYyAxMDA2NDQKLS0tIGEvbGliYy9pbmNsdWRlL3N5cy9pb2N0bC5oCisrKyBiL2xpYmMvaW5jbHVkZS9zeXMvaW9jdGwuaApAQCAtMzAsNiArMzAsMTEgQEAKIAogI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgogI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+CisvKgorICogTmV0QlNEIGFuZCBnbGliYydzIDxzeXMvaW9jdGwuaD4gcHJvdmlkZSBzb21lIG9mIHRoZQorICogdGVybWluYWwtcmVsYXRlZCBpb2N0bCBkYXRhIHN0cnVjdHVyZXMgc3VjaCBhcyBzdHJ1Y3Qgd2luc2l6ZS4KKyAqLworI2luY2x1ZGUgPGxpbnV4L3Rlcm1pb3MuaD4KICNpbmNsdWRlIDxhc20vaW9jdGxzLmg+CiAjaW5jbHVkZSA8YXNtL3Rlcm1iaXRzLmg+CiAjaW5jbHVkZSA8c3lzL2lvY3RsX2NvbXBhdC5oPgpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL3N5cy9pb2N0bF9jb21wYXQuaCBiL2xpYmMvaW5jbHVkZS9zeXMvaW9jdGxfY29tcGF0LmgKaW5kZXggY2FiNWM4MC4uZDliYTRjNyAxMDA2NDQKLS0tIGEvbGliYy9pbmNsdWRlL3N5cy9pb2N0bF9jb21wYXQuaAorKysgYi9saWJjL2luY2x1ZGUvc3lzL2lvY3RsX2NvbXBhdC5oCkBAIC00Miw2ICs0Miw3IEBACiAvKiNpbmNsdWRlIDxzeXMvdHR5Y2hhcnMuaD4qLwogLyojaW5jbHVkZSA8c3lzL3R0eWRldi5oPiovCiAKKyNpZiAhZGVmaW5lZChfX21pcHNfXykKIHN0cnVjdCB0Y2hhcnMgewogCWNoYXIJdF9pbnRyYzsJLyogaW50ZXJydXB0ICovCiAJY2hhcgl0X3F1aXRjOwkvKiBxdWl0ICovCkBAIC03Myw2ICs3NCw3IEBACiAJc2hvcnQJc2dfZmxhZ3M7CQkvKiBtb2RlIGZsYWdzICovCiB9OwogI2VuZGlmCisjZW5kaWYKIAogI2lmZGVmIFVTRV9PTERfVFRZCiAjIHVuZGVmICBUSU9DR0VURApAQCAtODQsOSArODYsMTEgQEAKICMgZGVmaW5lIE9USU9DU0VURAlfSU9XKCd0JywgMSwgaW50KQkvKiBzZXQgbGluZSBkaXNjaXBsaW5lICovCiAjZW5kaWYKICNkZWZpbmUJVElPQ0hQQ0wJX0lPKCd0JywgMikJCS8qIGhhbmcgdXAgb24gbGFzdCBjbG9zZSAqLworI2lmICFkZWZpbmVkKF9fbWlwc19fKQogI2RlZmluZQlUSU9DR0VUUAlfSU9SKCd0JywgOCxzdHJ1Y3Qgc2d0dHliKS8qIGdldCBwYXJhbWV0ZXJzIC0tIGd0dHkgKi8KICNkZWZpbmUJVElPQ1NFVFAJX0lPVygndCcsIDksc3RydWN0IHNndHR5YikvKiBzZXQgcGFyYW1ldGVycyAtLSBzdHR5ICovCiAjZGVmaW5lCVRJT0NTRVROCV9JT1coJ3QnLDEwLHN0cnVjdCBzZ3R0eWIpLyogYXMgYWJvdmUsIGJ1dCBubyBmbHVzaHR0eSovCisjZW5kaWYKICNkZWZpbmUJVElPQ1NFVEMJX0lPVygndCcsMTcsc3RydWN0IHRjaGFycykvKiBzZXQgc3BlY2lhbCBjaGFyYWN0ZXJzICovCiAjZGVmaW5lCVRJT0NHRVRDCV9JT1IoJ3QnLDE4LHN0cnVjdCB0Y2hhcnMpLyogZ2V0IHNwZWNpYWwgY2hhcmFjdGVycyAqLwogI2lmIDAKQEAgLTE1OCw4ICsxNjIsMTAgQEAKICNkZWZpbmUJCUxQRU5ESU4JCShQRU5ESU4+PjE2KQogI2RlZmluZQkJTERFQ0NUUQkJKERFQ0NUUT4+MTYpCiAjZGVmaW5lCQlMTk9GTFNICQkoTk9GTFNIPj4xNikKKyNpZiAhZGVmaW5lZChfX21pcHNfXykKICNkZWZpbmUJVElPQ1NMVEMJX0lPVygndCcsMTE3LHN0cnVjdCBsdGNoYXJzKS8qIHNldCBsb2NhbCBzcGVjaWFsIGNoYXJzKi8KICNkZWZpbmUJVElPQ0dMVEMJX0lPUigndCcsMTE2LHN0cnVjdCBsdGNoYXJzKS8qIGdldCBsb2NhbCBzcGVjaWFsIGNoYXJzKi8KKyNlbmRpZgogI2RlZmluZSBPVElPQ0NPTlMJX0lPKCd0JywgOTgpCS8qIGZvciBocDMwMCAtLSBzYW5zIGludCBhcmcgKi8KICNkZWZpbmUJT1RUWURJU0MJMAogI2RlZmluZQlORVRMRElTQwkxCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvc3lzL2tsb2cuaCBiL2xpYmMvaW5jbHVkZS9zeXMva2xvZy5oCmluZGV4IDIxYmI3ZDkuLjAyODUxZDIgMTAwNjQ0Ci0tLSBhL2xpYmMvaW5jbHVkZS9zeXMva2xvZy5oCisrKyBiL2xpYmMvaW5jbHVkZS9zeXMva2xvZy5oCkBAIC0zMiwxNyArMzIsMjUgQEAKIAogX19CRUdJTl9ERUNMUwogCi0jZGVmaW5lIEtMT0dfQ0xPU0UgICAgICAwCi0jZGVmaW5lIEtMT0dfT1BFTiAgICAgICAxCi0jZGVmaW5lIEtMT0dfUkVBRCAgICAgICAyCi0jZGVmaW5lIEtMT0dfUkVBRF9BTEwgICAzCi0jZGVmaW5lIEtMT0dfUkVBRF9DTEVBUiA0Ci0jZGVmaW5lIEtMT0dfQ0xFQVIgICAgICA1Ci0jZGVmaW5lIEtMT0dfRElTQUJMRSAgICA2Ci0jZGVmaW5lIEtMT0dfRU5BQkxFICAgICA3Ci0jZGVmaW5lIEtMT0dfU0VUTEVWRUwgICA4CisvKiBUaGVzZSBjb3JyZXNwb25kIHRvIHRoZSBrZXJuZWwncyBTWVNMT0dfQUNUSU9OX3doYXRldmVyIGNvbnN0YW50cy4gKi8KKyNkZWZpbmUgS0xPR19DTE9TRSAgICAgICAgIDAKKyNkZWZpbmUgS0xPR19PUEVOICAgICAgICAgIDEKKyNkZWZpbmUgS0xPR19SRUFEICAgICAgICAgIDIKKyNkZWZpbmUgS0xPR19SRUFEX0FMTCAgICAgIDMKKyNkZWZpbmUgS0xPR19SRUFEX0NMRUFSICAgIDQKKyNkZWZpbmUgS0xPR19DTEVBUiAgICAgICAgIDUKKyNkZWZpbmUgS0xPR19DT05TT0xFX09GRiAgIDYKKyNkZWZpbmUgS0xPR19DT05TT0xFX09OICAgIDcKKyNkZWZpbmUgS0xPR19DT05TT0xFX0xFVkVMIDgKKyNkZWZpbmUgS0xPR19TSVpFX1VOUkVBRCAgIDkKKyNkZWZpbmUgS0xPR19TSVpFX0JVRkZFUiAgIDEwCisKKy8qIFRoZXNlIGFyZSBkZXByZWNhdGVkIG5hbWVzIHRoYXQgd2VyZSB1c2VkIGluIGVhcmxpZXIgYmlvbmljIHJlbGVhc2VzLiBEbyBub3QgdXNlLiAqLworI2RlZmluZSBLTE9HX0RJU0FCTEUgNgorI2RlZmluZSBLTE9HX0VOQUJMRSA3CisjZGVmaW5lIEtMT0dfU0VUTEVWRUwgOAogI2RlZmluZSBLTE9HX1VOUkVBRFNJWkUgOQotI2RlZmluZSBLTE9HX1dSSVRFICAgICAgMTAKKyNkZWZpbmUgS0xPR19XUklURSAxMAogCiBleHRlcm4gaW50IGtsb2djdGwoaW50LCBjaGFyICosIGludCk7CiAKZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9zeXMvbGltaXRzLmggYi9saWJjL2luY2x1ZGUvc3lzL2xpbWl0cy5oCmluZGV4IDQxZDAyZmYuLmYxMDgwZmUgMTAwNjQ0Ci0tLSBhL2xpYmMvaW5jbHVkZS9zeXMvbGltaXRzLmgKKysrIGIvbGliYy9pbmNsdWRlL3N5cy9saW1pdHMuaApAQCAtMTY5LDExICsxNjksMTggQEAKIAogI3VuZGVmICAgX1BPU0lYX1BST0NFU1NfU0hBUkVEICAgICAgICAgICAvKiB3ZSBkb24ndCBzdXBwb3J0IHByb2Nlc3Mtc2hhcmVkIHN5bmNocm9uaXphdGlvbiAqLwogI3VuZGVmICAgX1BPU0lYX1RIUkVBRF9TQUZFX0ZVTkNUSU9OUyAgICAvKiBtb3N0IGZ1bmN0aW9ucyBhcmUsIGJ1dCBub3QgZXZlcnl0aGluZyB5ZXQgKi8KLSNkZWZpbmUgIF9QT1NJWF9DSE9XTl9SRVNUUklDVEVEICAgIDEgICAgLyogeWVzLCBjaG93biByZXF1aXJlcyBhcHByb3ByaWF0ZSBwcml2aWxlZGdlcyAqLworI2RlZmluZSAgX1BPU0lYX0NIT1dOX1JFU1RSSUNURUQgICAgMSAgICAvKiB5ZXMsIGNob3duIHJlcXVpcmVzIGFwcHJvcHJpYXRlIHByaXZpbGVnZXMgKi8KKyNkZWZpbmUgIF9QT1NJWF9NT05PVE9OSUNfQ0xPQ0sgICAgIDAgICAgLyogdGhlIG1vbm90b25pYyBjbG9jayBtYXkgYmUgYXZhaWxhYmxlOyBhc2sgc3lzY29uZiAqLwogI2RlZmluZSAgX1BPU0lYX05PX1RSVU5DICAgICAgICAgICAgMSAgICAvKiB2ZXJ5IGxvbmcgcGF0aG5hbWVzIGdlbmVyYXRlIGFuIGVycm9yICovCiAjZGVmaW5lICBfUE9TSVhfU0FWRURfSURTICAgICAgICAgICAxICAgIC8qIHNhdmVkIHVzZXIgaWRzIGlzIGEgTGludXggZmVhdHVyZSAqLwogI2RlZmluZSAgX1BPU0lYX0pPQl9DT05UUk9MICAgICAgICAgMSAgICAvKiBqb2IgY29udHJvbCBpcyBhIExpbnV4IGZlYXR1cmUgKi8KIAorI2RlZmluZSBfUE9TSVhfVEhSRUFEX0RFU1RSVUNUT1JfSVRFUkFUSU9OUyA0IC8qIHRoZSBtaW5pbXVtIG1hbmRhdGVkIGJ5IFBPU0lYICovCisjZGVmaW5lIFBUSFJFQURfREVTVFJVQ1RPUl9JVEVSQVRJT05TIF9QT1NJWF9USFJFQURfREVTVFJVQ1RPUl9JVEVSQVRJT05TCisjZGVmaW5lIF9QT1NJWF9USFJFQURfS0VZU19NQVggMTI4ICAgICAgICAgICAgLyogdGhlIG1pbmltdW0gbWFuZGF0ZWQgYnkgUE9TSVggKi8KKyNkZWZpbmUgUFRIUkVBRF9LRVlTX01BWCBfUE9TSVhfVEhSRUFEX0tFWVNfTUFYCisjZGVmaW5lIF9QT1NJWF9USFJFQURfVEhSRUFEU19NQVggNjQgICAgICAgICAgLyogdGhlIG1pbmltdW0gbWFuZGF0ZWQgYnkgUE9TSVggKi8KKyNkZWZpbmUgUFRIUkVBRF9USFJFQURTX01BWCAgICAgICAgICAgICAgICAgICAvKiBiaW9uaWMgaGFzIG5vIHNwZWNpZmljIGxpbWl0ICovCiAKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvc3lzL2xpbnV4LXN5c2NhbGxzLmggYi9saWJjL2luY2x1ZGUvc3lzL2xpbnV4LXN5c2NhbGxzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRlNjRjNmIuLjAwMDAwMDAKLS0tIGEvbGliYy9pbmNsdWRlL3N5cy9saW51eC1zeXNjYWxscy5oCisrKyAvZGV2L251bGwKQEAgLTEsNDUxICswLDAgQEAKLS8qIGF1dG8tZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LCBkbyBub3QgdG91Y2ggKi8KLSNpZm5kZWYgX0JJT05JQ19MSU5VWF9TWVNDQUxMU19IXwotI2RlZmluZSBfQklPTklDX0xJTlVYX1NZU0NBTExTX0hfCi0KLSNpZiAhZGVmaW5lZCBfX0FTTV9BUk1fVU5JU1REX0ggJiYgIWRlZmluZWQgX19BU01fSTM4Nl9VTklTVERfSCAmJiAhZGVmaW5lZCBfX0FTTV9NSVBTX1VOSVNURF9ICi0jaWYgZGVmaW5lZCBfX2FybV9fICYmICFkZWZpbmVkIF9fQVJNX0VBQklfXyAmJiAhZGVmaW5lZCBfX3RodW1iX18KLSAgIyAgZGVmaW5lIF9fTlJfU1lTQ0FMTF9CQVNFIDB4OTAwMDAwCi0jZWxpZiBkZWZpbmVkKF9fbWlwc19fKQotICAjICBkZWZpbmUgX19OUl9TWVNDQUxMX0JBU0UgNDAwMAotI2Vsc2UKLSAgIyAgZGVmaW5lIF9fTlJfU1lTQ0FMTF9CQVNFIDAKLSNlbmRpZgotCi0jZGVmaW5lIF9fTlJfZXhpdCAgICAgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAxKQotI2RlZmluZSBfX05SX2ZvcmsgICAgICAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMikKLSNkZWZpbmUgX19OUl9yZWFkICAgICAgICAgICAgICAgICAgICAgICAgIChfX05SX1NZU0NBTExfQkFTRSArIDMpCi0jZGVmaW5lIF9fTlJfd3JpdGUgICAgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyA0KQotI2RlZmluZSBfX05SX29wZW4gICAgICAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgNSkKLSNkZWZpbmUgX19OUl9jbG9zZSAgICAgICAgICAgICAgICAgICAgICAgIChfX05SX1NZU0NBTExfQkFTRSArIDYpCi0jZGVmaW5lIF9fTlJfbGluayAgICAgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyA5KQotI2RlZmluZSBfX05SX3VubGluayAgICAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMTApCi0jZGVmaW5lIF9fTlJfZXhlY3ZlICAgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAxMSkKLSNkZWZpbmUgX19OUl9jaGRpciAgICAgICAgICAgICAgICAgICAgICAgIChfX05SX1NZU0NBTExfQkFTRSArIDEyKQotI2RlZmluZSBfX05SX21rbm9kICAgICAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMTQpCi0jZGVmaW5lIF9fTlJfY2htb2QgICAgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAxNSkKLSNkZWZpbmUgX19OUl9sc2VlayAgICAgICAgICAgICAgICAgICAgICAgIChfX05SX1NZU0NBTExfQkFTRSArIDE5KQotI2RlZmluZSBfX05SX2dldHBpZCAgICAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMjApCi0jZGVmaW5lIF9fTlJfbW91bnQgICAgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyMSkKLSNkZWZpbmUgX19OUl9wdHJhY2UgICAgICAgICAgICAgICAgICAgICAgIChfX05SX1NZU0NBTExfQkFTRSArIDI2KQotI2RlZmluZSBfX05SX3BhdXNlICAgICAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMjkpCi0jZGVmaW5lIF9fTlJfYWNjZXNzICAgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAzMykKLSNkZWZpbmUgX19OUl9zeW5jICAgICAgICAgICAgICAgICAgICAgICAgIChfX05SX1NZU0NBTExfQkFTRSArIDM2KQotI2RlZmluZSBfX05SX3JlbmFtZSAgICAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMzgpCi0jZGVmaW5lIF9fTlJfbWtkaXIgICAgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAzOSkKLSNkZWZpbmUgX19OUl9ybWRpciAgICAgICAgICAgICAgICAgICAgICAgIChfX05SX1NZU0NBTExfQkFTRSArIDQwKQotI2RlZmluZSBfX05SX2R1cCAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgNDEpCi0jZGVmaW5lIF9fTlJfdGltZXMgICAgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyA0MykKLSNkZWZpbmUgX19OUl9icmsgICAgICAgICAgICAgICAgICAgICAgICAgIChfX05SX1NZU0NBTExfQkFTRSArIDQ1KQotI2RlZmluZSBfX05SX2FjY3QgICAgICAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgNTEpCi0jZGVmaW5lIF9fTlJfdW1vdW50MiAgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyA1MikKLSNkZWZpbmUgX19OUl9pb2N0bCAgICAgICAgICAgICAgICAgICAgICAgIChfX05SX1NZU0NBTExfQkFTRSArIDU0KQotI2RlZmluZSBfX05SX2ZjbnRsICAgICAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgNTUpCi0jZGVmaW5lIF9fTlJfc2V0cGdpZCAgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyA1NykKLSNkZWZpbmUgX19OUl91bWFzayAgICAgICAgICAgICAgICAgICAgICAgIChfX05SX1NZU0NBTExfQkFTRSArIDYwKQotI2RlZmluZSBfX05SX2Nocm9vdCAgICAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgNjEpCi0jZGVmaW5lIF9fTlJfZHVwMiAgICAgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyA2MykKLSNkZWZpbmUgX19OUl9nZXRwcGlkICAgICAgICAgICAgICAgICAgICAgIChfX05SX1NZU0NBTExfQkFTRSArIDY0KQotI2RlZmluZSBfX05SX3NldHNpZCAgICAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgNjYpCi0jZGVmaW5lIF9fTlJfc2lnYWN0aW9uICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyA2NykKLSNkZWZpbmUgX19OUl9zaWdzdXNwZW5kICAgICAgICAgICAgICAgICAgIChfX05SX1NZU0NBTExfQkFTRSArIDcyKQotI2RlZmluZSBfX05SX3NpZ3BlbmRpbmcgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgNzMpCi0jZGVmaW5lIF9fTlJfc2V0cmxpbWl0ICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyA3NSkKLSNkZWZpbmUgX19OUl9nZXRydXNhZ2UgICAgICAgICAgICAgICAgICAgIChfX05SX1NZU0NBTExfQkFTRSArIDc3KQotI2RlZmluZSBfX05SX2dldHRpbWVvZmRheSAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgNzgpCi0jZGVmaW5lIF9fTlJfc2V0dGltZW9mZGF5ICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyA3OSkKLSNkZWZpbmUgX19OUl9zeW1saW5rICAgICAgICAgICAgICAgICAgICAgIChfX05SX1NZU0NBTExfQkFTRSArIDgzKQotI2RlZmluZSBfX05SX3JlYWRsaW5rICAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgODUpCi0jZGVmaW5lIF9fTlJfcmVib290ICAgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyA4OCkKLSNkZWZpbmUgX19OUl9tdW5tYXAgICAgICAgICAgICAgICAgICAgICAgIChfX05SX1NZU0NBTExfQkFTRSArIDkxKQotI2RlZmluZSBfX05SX3RydW5jYXRlICAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgOTIpCi0jZGVmaW5lIF9fTlJfZnRydW5jYXRlICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyA5MykKLSNkZWZpbmUgX19OUl9mY2htb2QgICAgICAgICAgICAgICAgICAgICAgIChfX05SX1NZU0NBTExfQkFTRSArIDk0KQotI2RlZmluZSBfX05SX2dldHByaW9yaXR5ICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgOTYpCi0jZGVmaW5lIF9fTlJfc2V0cHJpb3JpdHkgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyA5NykKLSNkZWZpbmUgX19OUl9zeXNsb2cgICAgICAgICAgICAgICAgICAgICAgIChfX05SX1NZU0NBTExfQkFTRSArIDEwMykKLSNkZWZpbmUgX19OUl9zeXNsb2cgICAgICAgICAgICAgICAgICAgICAgIChfX05SX1NZU0NBTExfQkFTRSArIDEwMykKLSNkZWZpbmUgX19OUl9zZXRpdGltZXIgICAgICAgICAgICAgICAgICAgIChfX05SX1NZU0NBTExfQkFTRSArIDEwNCkKLSNkZWZpbmUgX19OUl9nZXRpdGltZXIgICAgICAgICAgICAgICAgICAgIChfX05SX1NZU0NBTExfQkFTRSArIDEwNSkKLSNkZWZpbmUgX19OUl93YWl0NCAgICAgICAgICAgICAgICAgICAgICAgIChfX05SX1NZU0NBTExfQkFTRSArIDExNCkKLSNkZWZpbmUgX19OUl9zeXNpbmZvICAgICAgICAgICAgICAgICAgICAgIChfX05SX1NZU0NBTExfQkFTRSArIDExNikKLSNkZWZpbmUgX19OUl9mc3luYyAgICAgICAgICAgICAgICAgICAgICAgIChfX05SX1NZU0NBTExfQkFTRSArIDExOCkKLSNkZWZpbmUgX19OUl9jbG9uZSAgICAgICAgICAgICAgICAgICAgICAgIChfX05SX1NZU0NBTExfQkFTRSArIDEyMCkKLSNkZWZpbmUgX19OUl91bmFtZSAgICAgICAgICAgICAgICAgICAgICAgIChfX05SX1NZU0NBTExfQkFTRSArIDEyMikKLSNkZWZpbmUgX19OUl9tcHJvdGVjdCAgICAgICAgICAgICAgICAgICAgIChfX05SX1NZU0NBTExfQkFTRSArIDEyNSkKLSNkZWZpbmUgX19OUl9zaWdwcm9jbWFzayAgICAgICAgICAgICAgICAgIChfX05SX1NZU0NBTExfQkFTRSArIDEyNikKLSNkZWZpbmUgX19OUl9pbml0X21vZHVsZSAgICAgICAgICAgICAgICAgIChfX05SX1NZU0NBTExfQkFTRSArIDEyOCkKLSNkZWZpbmUgX19OUl9kZWxldGVfbW9kdWxlICAgICAgICAgICAgICAgIChfX05SX1NZU0NBTExfQkFTRSArIDEyOSkKLSNkZWZpbmUgX19OUl9nZXRwZ2lkICAgICAgICAgICAgICAgICAgICAgIChfX05SX1NZU0NBTExfQkFTRSArIDEzMikKLSNkZWZpbmUgX19OUl9mY2hkaXIgICAgICAgICAgICAgICAgICAgICAgIChfX05SX1NZU0NBTExfQkFTRSArIDEzMykKLSNkZWZpbmUgX19OUl9wZXJzb25hbGl0eSAgICAgICAgICAgICAgICAgIChfX05SX1NZU0NBTExfQkFTRSArIDEzNikKLSNkZWZpbmUgX19OUl9fbGxzZWVrICAgICAgICAgICAgICAgICAgICAgIChfX05SX1NZU0NBTExfQkFTRSArIDE0MCkKLSNkZWZpbmUgX19OUl9fbmV3c2VsZWN0ICAgICAgICAgICAgICAgICAgIChfX05SX1NZU0NBTExfQkFTRSArIDE0MikKLSNkZWZpbmUgX19OUl9mbG9jayAgICAgICAgICAgICAgICAgICAgICAgIChfX05SX1NZU0NBTExfQkFTRSArIDE0MykKLSNkZWZpbmUgX19OUl9tc3luYyAgICAgICAgICAgICAgICAgICAgICAgIChfX05SX1NZU0NBTExfQkFTRSArIDE0NCkKLSNkZWZpbmUgX19OUl9yZWFkdiAgICAgICAgICAgICAgICAgICAgICAgIChfX05SX1NZU0NBTExfQkFTRSArIDE0NSkKLSNkZWZpbmUgX19OUl93cml0ZXYgICAgICAgICAgICAgICAgICAgICAgIChfX05SX1NZU0NBTExfQkFTRSArIDE0NikKLQotI2lmZGVmIF9fYXJtX18KLSNkZWZpbmUgX19OUl9leGl0X2dyb3VwICAgICAgICAgICAgICAgICAgIChfX05SX1NZU0NBTExfQkFTRSArIDI0OCkKLSNkZWZpbmUgX19OUl93YWl0aWQgICAgICAgICAgICAgICAgICAgICAgIChfX05SX1NZU0NBTExfQkFTRSArIDI4MCkKLSNkZWZpbmUgX19OUl9zZXR1aWQzMiAgICAgICAgICAgICAgICAgICAgIChfX05SX1NZU0NBTExfQkFTRSArIDIxMykKLSNkZWZpbmUgX19OUl9nZXR1aWQzMiAgICAgICAgICAgICAgICAgICAgIChfX05SX1NZU0NBTExfQkFTRSArIDE5OSkKLSNkZWZpbmUgX19OUl9nZXRnaWQzMiAgICAgICAgICAgICAgICAgICAgIChfX05SX1NZU0NBTExfQkFTRSArIDIwMCkKLSNkZWZpbmUgX19OUl9nZXRldWlkMzIgICAgICAgICAgICAgICAgICAgIChfX05SX1NZU0NBTExfQkFTRSArIDIwMSkKLSNkZWZpbmUgX19OUl9nZXRlZ2lkMzIgICAgICAgICAgICAgICAgICAgIChfX05SX1NZU0NBTExfQkFTRSArIDIwMikKLSNkZWZpbmUgX19OUl9nZXRyZXN1aWQzMiAgICAgICAgICAgICAgICAgIChfX05SX1NZU0NBTExfQkFTRSArIDIwOSkKLSNkZWZpbmUgX19OUl9nZXRyZXNnaWQzMiAgICAgICAgICAgICAgICAgIChfX05SX1NZU0NBTExfQkFTRSArIDIxMSkKLSNkZWZpbmUgX19OUl9nZXR0aWQgICAgICAgICAgICAgICAgICAgICAgIChfX05SX1NZU0NBTExfQkFTRSArIDIyNCkKLSNkZWZpbmUgX19OUl9yZWFkYWhlYWQgICAgICAgICAgICAgICAgICAgIChfX05SX1NZU0NBTExfQkFTRSArIDIyNSkKLSNkZWZpbmUgX19OUl9nZXRncm91cHMzMiAgICAgICAgICAgICAgICAgIChfX05SX1NZU0NBTExfQkFTRSArIDIwNSkKLSNkZWZpbmUgX19OUl9zZXRnaWQzMiAgICAgICAgICAgICAgICAgICAgIChfX05SX1NZU0NBTExfQkFTRSArIDIxNCkKLSNkZWZpbmUgX19OUl9zZXRyZXVpZDMyICAgICAgICAgICAgICAgICAgIChfX05SX1NZU0NBTExfQkFTRSArIDIwMykKLSNkZWZpbmUgX19OUl9zZXRyZXN1aWQzMiAgICAgICAgICAgICAgICAgIChfX05SX1NZU0NBTExfQkFTRSArIDIwOCkKLSNkZWZpbmUgX19OUl9zZXRyZXNnaWQzMiAgICAgICAgICAgICAgICAgIChfX05SX1NZU0NBTExfQkFTRSArIDIxMCkKLSNkZWZpbmUgX19OUl91Z2V0cmxpbWl0ICAgICAgICAgICAgICAgICAgIChfX05SX1NZU0NBTExfQkFTRSArIDE5MSkKLSNkZWZpbmUgX19OUl9zZXRncm91cHMzMiAgICAgICAgICAgICAgICAgIChfX05SX1NZU0NBTExfQkFTRSArIDIwNikKLSNkZWZpbmUgX19OUl92Zm9yayAgICAgICAgICAgICAgICAgICAgICAgIChfX05SX1NZU0NBTExfQkFTRSArIDE5MCkKLSNkZWZpbmUgX19OUl9zZXRyZWdpZDMyICAgICAgICAgICAgICAgICAgIChfX05SX1NZU0NBTExfQkFTRSArIDIwNCkKLSNkZWZpbmUgX19OUl9wcmN0bCAgICAgICAgICAgICAgICAgICAgICAgIChfX05SX1NZU0NBTExfQkFTRSArIDE3MikKLSNkZWZpbmUgX19OUl9jYXBnZXQgICAgICAgICAgICAgICAgICAgICAgIChfX05SX1NZU0NBTExfQkFTRSArIDE4NCkKLSNkZWZpbmUgX19OUl9jYXBzZXQgICAgICAgICAgICAgICAgICAgICAgIChfX05SX1NZU0NBTExfQkFTRSArIDE4NSkKLSNkZWZpbmUgX19OUl9zaWdhbHRzdGFjayAgICAgICAgICAgICAgICAgIChfX05SX1NZU0NBTExfQkFTRSArIDE4NikKLSNkZWZpbmUgX19OUl9wcmVhZDY0ICAgICAgICAgICAgICAgICAgICAgIChfX05SX1NZU0NBTExfQkFTRSArIDE4MCkKLSNkZWZpbmUgX19OUl9wd3JpdGU2NCAgICAgICAgICAgICAgICAgICAgIChfX05SX1NZU0NBTExfQkFTRSArIDE4MSkKLSNkZWZpbmUgX19OUl9vcGVuYXQgICAgICAgICAgICAgICAgICAgICAgIChfX05SX1NZU0NBTExfQkFTRSArIDMyMikKLSNkZWZpbmUgX19OUl9tbWFwMiAgICAgICAgICAgICAgICAgICAgICAgIChfX05SX1NZU0NBTExfQkFTRSArIDE5MikKLSNkZWZpbmUgX19OUl9tcmVtYXAgICAgICAgICAgICAgICAgICAgICAgIChfX05SX1NZU0NBTExfQkFTRSArIDE2MykKLSNkZWZpbmUgX19OUl9tYWR2aXNlICAgICAgICAgICAgICAgICAgICAgIChfX05SX1NZU0NBTExfQkFTRSArIDIyMCkKLSNkZWZpbmUgX19OUl9tbG9jayAgICAgICAgICAgICAgICAgICAgICAgIChfX05SX1NZU0NBTExfQkFTRSArIDE1MCkKLSNkZWZpbmUgX19OUl9tdW5sb2NrICAgICAgICAgICAgICAgICAgICAgIChfX05SX1NZU0NBTExfQkFTRSArIDE1MSkKLSNkZWZpbmUgX19OUl9taW5jb3JlICAgICAgICAgICAgICAgICAgICAgIChfX05SX1NZU0NBTExfQkFTRSArIDIxOSkKLSNkZWZpbmUgX19OUl9waXBlICAgICAgICAgICAgICAgICAgICAgICAgIChfX05SX1NZU0NBTExfQkFTRSArIDQyKQotI2RlZmluZSBfX05SX3BpcGUyICAgICAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMzU5KQotI2RlZmluZSBfX05SX2Z0cnVuY2F0ZTY0ICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMTk0KQotI2RlZmluZSBfX05SX2dldGRlbnRzNjQgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMjE3KQotI2RlZmluZSBfX05SX2ZkYXRhc3luYyAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMTQ4KQotI2RlZmluZSBfX05SX2ZjaG93bjMyICAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMjA3KQotI2RlZmluZSBfX05SX2ZjbnRsNjQgICAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMjIxKQotI2RlZmluZSBfX05SX2ZzdGF0ZnM2NCAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMjY3KQotI2RlZmluZSBfX05SX3NlbmRmaWxlICAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMTg3KQotI2RlZmluZSBfX05SX2ZzdGF0YXQ2NCAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMzI3KQotI2RlZmluZSBfX05SX21rZGlyYXQgICAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMzIzKQotI2RlZmluZSBfX05SX2ZjaG93bmF0ICAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMzI1KQotI2RlZmluZSBfX05SX2ZjaG1vZGF0ICAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMzMzKQotI2RlZmluZSBfX05SX3JlbmFtZWF0ICAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMzI5KQotI2RlZmluZSBfX05SX2ZzZXR4YXR0ciAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMjI4KQotI2RlZmluZSBfX05SX2ZnZXR4YXR0ciAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMjMxKQotI2RlZmluZSBfX05SX2ZsaXN0eGF0dHIgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMjM0KQotI2RlZmluZSBfX05SX2ZyZW1vdmV4YXR0ciAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMjM3KQotI2RlZmluZSBfX05SX3VubGlua2F0ICAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMzI4KQotI2RlZmluZSBfX05SX2Nob3duMzIgICAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMjEyKQotI2RlZmluZSBfX05SX2xjaG93bjMyICAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMTk4KQotI2RlZmluZSBfX05SX2ZzdGF0NjQgICAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMTk3KQotI2RlZmluZSBfX05SX3N0YXQ2NCAgICAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMTk1KQotI2RlZmluZSBfX05SX2xzdGF0NjQgICAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMTk2KQotI2RlZmluZSBfX05SX2dldGN3ZCAgICAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMTgzKQotI2RlZmluZSBfX05SX3NldHhhdHRyICAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMjI2KQotI2RlZmluZSBfX05SX2xzZXR4YXR0ciAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMjI3KQotI2RlZmluZSBfX05SX2dldHhhdHRyICAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMjI5KQotI2RlZmluZSBfX05SX2xnZXR4YXR0ciAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMjMwKQotI2RlZmluZSBfX05SX2xpc3R4YXR0ciAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMjMyKQotI2RlZmluZSBfX05SX2xsaXN0eGF0dHIgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMjMzKQotI2RlZmluZSBfX05SX3JlbW92ZXhhdHRyICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMjM1KQotI2RlZmluZSBfX05SX2xyZW1vdmV4YXR0ciAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMjM2KQotI2RlZmluZSBfX05SX3N0YXRmczY0ICAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMjY2KQotI2RlZmluZSBfX05SX25hbm9zbGVlcCAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMTYyKQotI2RlZmluZSBfX05SX2Nsb2NrX2dldHRpbWUgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMjYzKQotI2RlZmluZSBfX05SX2Nsb2NrX3NldHRpbWUgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMjYyKQotI2RlZmluZSBfX05SX2Nsb2NrX2dldHJlcyAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMjY0KQotI2RlZmluZSBfX05SX2Nsb2NrX25hbm9zbGVlcCAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMjY1KQotI2RlZmluZSBfX05SX3RpbWVyX2NyZWF0ZSAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMjU3KQotI2RlZmluZSBfX05SX3RpbWVyX3NldHRpbWUgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMjU4KQotI2RlZmluZSBfX05SX3RpbWVyX2dldHRpbWUgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMjU5KQotI2RlZmluZSBfX05SX3RpbWVyX2dldG92ZXJydW4gICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMjYwKQotI2RlZmluZSBfX05SX3RpbWVyX2RlbGV0ZSAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMjYxKQotI2RlZmluZSBfX05SX3V0aW1lcyAgICAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMjY5KQotI2RlZmluZSBfX05SX3V0aW1lbnNhdCAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMzQ4KQotI2RlZmluZSBfX05SX3J0X3NpZ2FjdGlvbiAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMTc0KQotI2RlZmluZSBfX05SX3J0X3NpZ3Byb2NtYXNrICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMTc1KQotI2RlZmluZSBfX05SX3J0X3NpZ3RpbWVkd2FpdCAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMTc3KQotI2RlZmluZSBfX05SX3NvY2tldCAgICAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMjgxKQotI2RlZmluZSBfX05SX3NvY2tldHBhaXIgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMjg4KQotI2RlZmluZSBfX05SX2JpbmQgICAgICAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMjgyKQotI2RlZmluZSBfX05SX2Nvbm5lY3QgICAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMjgzKQotI2RlZmluZSBfX05SX2xpc3RlbiAgICAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMjg0KQotI2RlZmluZSBfX05SX2FjY2VwdCAgICAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMjg1KQotI2RlZmluZSBfX05SX2dldHNvY2tuYW1lICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMjg2KQotI2RlZmluZSBfX05SX2dldHBlZXJuYW1lICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMjg3KQotI2RlZmluZSBfX05SX3NlbmR0byAgICAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMjkwKQotI2RlZmluZSBfX05SX3JlY3Zmcm9tICAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMjkyKQotI2RlZmluZSBfX05SX3NodXRkb3duICAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMjkzKQotI2RlZmluZSBfX05SX3NldHNvY2tvcHQgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMjk0KQotI2RlZmluZSBfX05SX2dldHNvY2tvcHQgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMjk1KQotI2RlZmluZSBfX05SX3NlbmRtc2cgICAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMjk2KQotI2RlZmluZSBfX05SX3JlY3Ztc2cgICAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMjk3KQotI2RlZmluZSBfX05SX3NjaGVkX3NldHNjaGVkdWxlciAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMTU2KQotI2RlZmluZSBfX05SX3NjaGVkX2dldHNjaGVkdWxlciAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMTU3KQotI2RlZmluZSBfX05SX3NjaGVkX3lpZWxkICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMTU4KQotI2RlZmluZSBfX05SX3NjaGVkX3NldHBhcmFtICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMTU0KQotI2RlZmluZSBfX05SX3NjaGVkX2dldHBhcmFtICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMTU1KQotI2RlZmluZSBfX05SX3NjaGVkX2dldF9wcmlvcml0eV9tYXggICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMTU5KQotI2RlZmluZSBfX05SX3NjaGVkX2dldF9wcmlvcml0eV9taW4gICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMTYwKQotI2RlZmluZSBfX05SX3NjaGVkX3JyX2dldF9pbnRlcnZhbCAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMTYxKQotI2RlZmluZSBfX05SX3NjaGVkX3NldGFmZmluaXR5ICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMjQxKQotI2RlZmluZSBfX05SX3NjaGVkX2dldGFmZmluaXR5ICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMjQyKQotI2RlZmluZSBfX05SX2dldGNwdSAgICAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMzQ1KQotI2RlZmluZSBfX05SX2lvcHJpb19zZXQgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMzE0KQotI2RlZmluZSBfX05SX2lvcHJpb19nZXQgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMzE1KQotI2RlZmluZSBfX05SX2Z1dGV4ICAgICAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMjQwKQotI2RlZmluZSBfX05SX2Vwb2xsX2NyZWF0ZSAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMjUwKQotI2RlZmluZSBfX05SX2Vwb2xsX2N0bCAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMjUxKQotI2RlZmluZSBfX05SX2Vwb2xsX3dhaXQgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMjUyKQotI2RlZmluZSBfX05SX2lub3RpZnlfaW5pdCAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMzE2KQotI2RlZmluZSBfX05SX2lub3RpZnlfYWRkX3dhdGNoICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMzE3KQotI2RlZmluZSBfX05SX2lub3RpZnlfcm1fd2F0Y2ggICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMzE4KQotI2RlZmluZSBfX05SX3BvbGwgICAgICAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMTY4KQotI2RlZmluZSBfX05SX2V2ZW50ZmQyICAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMzU2KQotI2RlZmluZSBfX05SX0FSTV9zZXRfdGxzICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgOTgzMDQ1KQotI2RlZmluZSBfX05SX0FSTV9jYWNoZWZsdXNoICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgOTgzMDQyKQotI2VuZGlmCi0KLSNpZmRlZiBfX2kzODZfXwotI2RlZmluZSBfX05SX3dhaXRwaWQgICAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgNykKLSNkZWZpbmUgX19OUl9raWxsICAgICAgICAgICAgICAgICAgICAgICAgIChfX05SX1NZU0NBTExfQkFTRSArIDM3KQotI2RlZmluZSBfX05SX3BpcGUgICAgICAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgNDIpCi0jZGVmaW5lIF9fTlJfc29ja2V0Y2FsbCAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAxMDIpCi0jZGVmaW5lIF9fTlJfZmRhdGFzeW5jICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAxNDgpCi0jZGVmaW5lIF9fTlJfbWxvY2sgICAgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAxNTApCi0jZGVmaW5lIF9fTlJfbXVubG9jayAgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAxNTEpCi0jZGVmaW5lIF9fTlJfc2NoZWRfc2V0cGFyYW0gICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAxNTQpCi0jZGVmaW5lIF9fTlJfc2NoZWRfZ2V0cGFyYW0gICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAxNTUpCi0jZGVmaW5lIF9fTlJfc2NoZWRfc2V0c2NoZWR1bGVyICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAxNTYpCi0jZGVmaW5lIF9fTlJfc2NoZWRfZ2V0c2NoZWR1bGVyICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAxNTcpCi0jZGVmaW5lIF9fTlJfc2NoZWRfeWllbGQgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAxNTgpCi0jZGVmaW5lIF9fTlJfc2NoZWRfZ2V0X3ByaW9yaXR5X21heCAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAxNTkpCi0jZGVmaW5lIF9fTlJfc2NoZWRfZ2V0X3ByaW9yaXR5X21pbiAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAxNjApCi0jZGVmaW5lIF9fTlJfc2NoZWRfcnJfZ2V0X2ludGVydmFsICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAxNjEpCi0jZGVmaW5lIF9fTlJfbmFub3NsZWVwICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAxNjIpCi0jZGVmaW5lIF9fTlJfbXJlbWFwICAgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAxNjMpCi0jZGVmaW5lIF9fTlJfcG9sbCAgICAgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAxNjgpCi0jZGVmaW5lIF9fTlJfcHJjdGwgICAgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAxNzIpCi0jZGVmaW5lIF9fTlJfcnRfc2lnYWN0aW9uICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAxNzQpCi0jZGVmaW5lIF9fTlJfcnRfc2lncHJvY21hc2sgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAxNzUpCi0jZGVmaW5lIF9fTlJfcnRfc2lndGltZWR3YWl0ICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAxNzcpCi0jZGVmaW5lIF9fTlJfcHJlYWQ2NCAgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAxODApCi0jZGVmaW5lIF9fTlJfcHdyaXRlNjQgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAxODEpCi0jZGVmaW5lIF9fTlJfZ2V0Y3dkICAgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAxODMpCi0jZGVmaW5lIF9fTlJfY2FwZ2V0ICAgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAxODQpCi0jZGVmaW5lIF9fTlJfY2Fwc2V0ICAgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAxODUpCi0jZGVmaW5lIF9fTlJfc2lnYWx0c3RhY2sgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAxODYpCi0jZGVmaW5lIF9fTlJfc2VuZGZpbGUgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAxODcpCi0jZGVmaW5lIF9fTlJfdWdldHJsaW1pdCAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAxOTEpCi0jZGVmaW5lIF9fTlJfbW1hcDIgICAgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAxOTIpCi0jZGVmaW5lIF9fTlJfZnRydW5jYXRlNjQgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAxOTQpCi0jZGVmaW5lIF9fTlJfc3RhdDY0ICAgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAxOTUpCi0jZGVmaW5lIF9fTlJfbHN0YXQ2NCAgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAxOTYpCi0jZGVmaW5lIF9fTlJfZnN0YXQ2NCAgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAxOTcpCi0jZGVmaW5lIF9fTlJfbGNob3duMzIgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAxOTgpCi0jZGVmaW5lIF9fTlJfZ2V0dWlkMzIgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAxOTkpCi0jZGVmaW5lIF9fTlJfZ2V0Z2lkMzIgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyMDApCi0jZGVmaW5lIF9fTlJfZ2V0ZXVpZDMyICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyMDEpCi0jZGVmaW5lIF9fTlJfZ2V0ZWdpZDMyICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyMDIpCi0jZGVmaW5lIF9fTlJfc2V0cmV1aWQzMiAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyMDMpCi0jZGVmaW5lIF9fTlJfc2V0cmVnaWQzMiAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyMDQpCi0jZGVmaW5lIF9fTlJfZ2V0Z3JvdXBzMzIgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyMDUpCi0jZGVmaW5lIF9fTlJfc2V0Z3JvdXBzMzIgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyMDYpCi0jZGVmaW5lIF9fTlJfZmNob3duMzIgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyMDcpCi0jZGVmaW5lIF9fTlJfc2V0cmVzdWlkMzIgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyMDgpCi0jZGVmaW5lIF9fTlJfZ2V0cmVzdWlkMzIgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyMDkpCi0jZGVmaW5lIF9fTlJfc2V0cmVzZ2lkMzIgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyMTApCi0jZGVmaW5lIF9fTlJfZ2V0cmVzZ2lkMzIgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyMTEpCi0jZGVmaW5lIF9fTlJfY2hvd24zMiAgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyMTIpCi0jZGVmaW5lIF9fTlJfc2V0dWlkMzIgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyMTMpCi0jZGVmaW5lIF9fTlJfc2V0Z2lkMzIgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyMTQpCi0jZGVmaW5lIF9fTlJfbWluY29yZSAgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyMTgpCi0jZGVmaW5lIF9fTlJfbWFkdmlzZSAgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyMTkpCi0jZGVmaW5lIF9fTlJfZ2V0ZGVudHM2NCAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyMjApCi0jZGVmaW5lIF9fTlJfZmNudGw2NCAgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyMjEpCi0jZGVmaW5lIF9fTlJfZ2V0dGlkICAgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyMjQpCi0jZGVmaW5lIF9fTlJfcmVhZGFoZWFkICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyMjUpCi0jZGVmaW5lIF9fTlJfc2V0eGF0dHIgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyMjYpCi0jZGVmaW5lIF9fTlJfbHNldHhhdHRyICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyMjcpCi0jZGVmaW5lIF9fTlJfZnNldHhhdHRyICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyMjgpCi0jZGVmaW5lIF9fTlJfZ2V0eGF0dHIgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyMjkpCi0jZGVmaW5lIF9fTlJfbGdldHhhdHRyICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyMzApCi0jZGVmaW5lIF9fTlJfZmdldHhhdHRyICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyMzEpCi0jZGVmaW5lIF9fTlJfbGlzdHhhdHRyICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyMzIpCi0jZGVmaW5lIF9fTlJfbGxpc3R4YXR0ciAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyMzMpCi0jZGVmaW5lIF9fTlJfZmxpc3R4YXR0ciAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyMzQpCi0jZGVmaW5lIF9fTlJfcmVtb3ZleGF0dHIgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyMzUpCi0jZGVmaW5lIF9fTlJfbHJlbW92ZXhhdHRyICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyMzYpCi0jZGVmaW5lIF9fTlJfZnJlbW92ZXhhdHRyICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyMzcpCi0jZGVmaW5lIF9fTlJfdGtpbGwgICAgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyMzgpCi0jZGVmaW5lIF9fTlJfZnV0ZXggICAgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyNDApCi0jZGVmaW5lIF9fTlJfc2NoZWRfc2V0YWZmaW5pdHkgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyNDEpCi0jZGVmaW5lIF9fTlJfc2NoZWRfZ2V0YWZmaW5pdHkgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyNDIpCi0jZGVmaW5lIF9fTlJfc2V0X3RocmVhZF9hcmVhICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyNDMpCi0jZGVmaW5lIF9fTlJfZXhpdF9ncm91cCAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyNTIpCi0jZGVmaW5lIF9fTlJfZXBvbGxfY3JlYXRlICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyNTQpCi0jZGVmaW5lIF9fTlJfZXBvbGxfY3RsICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyNTUpCi0jZGVmaW5lIF9fTlJfZXBvbGxfd2FpdCAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyNTYpCi0jZGVmaW5lIF9fTlJfdGltZXJfY3JlYXRlICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyNTkpCi0jZGVmaW5lIF9fTlJfdGltZXJfc2V0dGltZSAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyNjApCi0jZGVmaW5lIF9fTlJfdGltZXJfZ2V0dGltZSAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyNjEpCi0jZGVmaW5lIF9fTlJfdGltZXJfZ2V0b3ZlcnJ1biAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyNjIpCi0jZGVmaW5lIF9fTlJfdGltZXJfZGVsZXRlICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyNjMpCi0jZGVmaW5lIF9fTlJfY2xvY2tfc2V0dGltZSAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyNjQpCi0jZGVmaW5lIF9fTlJfY2xvY2tfZ2V0dGltZSAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyNjUpCi0jZGVmaW5lIF9fTlJfY2xvY2tfZ2V0cmVzICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyNjYpCi0jZGVmaW5lIF9fTlJfY2xvY2tfbmFub3NsZWVwICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyNjcpCi0jZGVmaW5lIF9fTlJfc3RhdGZzNjQgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyNjgpCi0jZGVmaW5lIF9fTlJfZnN0YXRmczY0ICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyNjkpCi0jZGVmaW5lIF9fTlJfdXRpbWVzICAgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyNzEpCi0jZGVmaW5lIF9fTlJfd2FpdGlkICAgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyODQpCi0jZGVmaW5lIF9fTlJfaW9wcmlvX3NldCAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyODkpCi0jZGVmaW5lIF9fTlJfaW9wcmlvX2dldCAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyOTApCi0jZGVmaW5lIF9fTlJfaW5vdGlmeV9pbml0ICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyOTEpCi0jZGVmaW5lIF9fTlJfaW5vdGlmeV9hZGRfd2F0Y2ggICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyOTIpCi0jZGVmaW5lIF9fTlJfaW5vdGlmeV9ybV93YXRjaCAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyOTMpCi0jZGVmaW5lIF9fTlJfb3BlbmF0ICAgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyOTUpCi0jZGVmaW5lIF9fTlJfbWtkaXJhdCAgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyOTYpCi0jZGVmaW5lIF9fTlJfZmNob3duYXQgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyOTgpCi0jZGVmaW5lIF9fTlJfZnN0YXRhdDY0ICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAzMDApCi0jZGVmaW5lIF9fTlJfdW5saW5rYXQgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAzMDEpCi0jZGVmaW5lIF9fTlJfcmVuYW1lYXQgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAzMDIpCi0jZGVmaW5lIF9fTlJfZmNobW9kYXQgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAzMDYpCi0jZGVmaW5lIF9fTlJfZ2V0Y3B1ICAgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAzMTgpCi0jZGVmaW5lIF9fTlJfdXRpbWVuc2F0ICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAzMjApCi0jZGVmaW5lIF9fTlJfZXZlbnRmZDIgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAzMjgpCi0jZGVmaW5lIF9fTlJfcGlwZTIgICAgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAzMzEpCi0jZW5kaWYKLQotI2lmZGVmIF9fbWlwc19fCi0jZGVmaW5lIF9fTlJfc3lzY2FsbCAgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAwKQotI2RlZmluZSBfX05SX3dhaXRwaWQgICAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgNykKLSNkZWZpbmUgX19OUl9sY2hvd24gICAgICAgICAgICAgICAgICAgICAgIChfX05SX1NZU0NBTExfQkFTRSArIDE2KQotI2RlZmluZSBfX05SX3NldHVpZCAgICAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMjMpCi0jZGVmaW5lIF9fTlJfZ2V0dWlkICAgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyNCkKLSNkZWZpbmUgX19OUl9raWxsICAgICAgICAgICAgICAgICAgICAgICAgIChfX05SX1NZU0NBTExfQkFTRSArIDM3KQotI2RlZmluZSBfX05SX3NldGdpZCAgICAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgNDYpCi0jZGVmaW5lIF9fTlJfZ2V0Z2lkICAgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyA0NykKLSNkZWZpbmUgX19OUl9nZXRldWlkICAgICAgICAgICAgICAgICAgICAgIChfX05SX1NZU0NBTExfQkFTRSArIDQ5KQotI2RlZmluZSBfX05SX2dldGVnaWQgICAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgNTApCi0jZGVmaW5lIF9fTlJfc2V0cmV1aWQgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyA3MCkKLSNkZWZpbmUgX19OUl9zZXRyZWdpZCAgICAgICAgICAgICAgICAgICAgIChfX05SX1NZU0NBTExfQkFTRSArIDcxKQotI2RlZmluZSBfX05SX2dldHJsaW1pdCAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgNzYpCi0jZGVmaW5lIF9fTlJfZ2V0Z3JvdXBzICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyA4MCkKLSNkZWZpbmUgX19OUl9zZXRncm91cHMgICAgICAgICAgICAgICAgICAgIChfX05SX1NZU0NBTExfQkFTRSArIDgxKQotI2RlZmluZSBfX05SX2ZjaG93biAgICAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgOTUpCi0jZGVmaW5lIF9fTlJfY2FjaGVmbHVzaCAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAxNDcpCi0jZGVmaW5lIF9fTlJfZmRhdGFzeW5jICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAxNTIpCi0jZGVmaW5lIF9fTlJfbWxvY2sgICAgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAxNTQpCi0jZGVmaW5lIF9fTlJfbXVubG9jayAgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAxNTUpCi0jZGVmaW5lIF9fTlJfc2NoZWRfc2V0cGFyYW0gICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAxNTgpCi0jZGVmaW5lIF9fTlJfc2NoZWRfZ2V0cGFyYW0gICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAxNTkpCi0jZGVmaW5lIF9fTlJfc2NoZWRfc2V0c2NoZWR1bGVyICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAxNjApCi0jZGVmaW5lIF9fTlJfc2NoZWRfZ2V0c2NoZWR1bGVyICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAxNjEpCi0jZGVmaW5lIF9fTlJfc2NoZWRfeWllbGQgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAxNjIpCi0jZGVmaW5lIF9fTlJfc2NoZWRfZ2V0X3ByaW9yaXR5X21heCAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAxNjMpCi0jZGVmaW5lIF9fTlJfc2NoZWRfZ2V0X3ByaW9yaXR5X21pbiAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAxNjQpCi0jZGVmaW5lIF9fTlJfc2NoZWRfcnJfZ2V0X2ludGVydmFsICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAxNjUpCi0jZGVmaW5lIF9fTlJfbmFub3NsZWVwICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAxNjYpCi0jZGVmaW5lIF9fTlJfbXJlbWFwICAgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAxNjcpCi0jZGVmaW5lIF9fTlJfYWNjZXB0ICAgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAxNjgpCi0jZGVmaW5lIF9fTlJfYmluZCAgICAgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAxNjkpCi0jZGVmaW5lIF9fTlJfY29ubmVjdCAgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAxNzApCi0jZGVmaW5lIF9fTlJfZ2V0cGVlcm5hbWUgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAxNzEpCi0jZGVmaW5lIF9fTlJfZ2V0c29ja25hbWUgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAxNzIpCi0jZGVmaW5lIF9fTlJfZ2V0c29ja29wdCAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAxNzMpCi0jZGVmaW5lIF9fTlJfbGlzdGVuICAgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAxNzQpCi0jZGVmaW5lIF9fTlJfcmVjdmZyb20gICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAxNzYpCi0jZGVmaW5lIF9fTlJfcmVjdm1zZyAgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAxNzcpCi0jZGVmaW5lIF9fTlJfc2VuZG1zZyAgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAxNzkpCi0jZGVmaW5lIF9fTlJfc2VuZHRvICAgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAxODApCi0jZGVmaW5lIF9fTlJfc2V0c29ja29wdCAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAxODEpCi0jZGVmaW5lIF9fTlJfc2h1dGRvd24gICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAxODIpCi0jZGVmaW5lIF9fTlJfc29ja2V0ICAgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAxODMpCi0jZGVmaW5lIF9fTlJfc29ja2V0cGFpciAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAxODQpCi0jZGVmaW5lIF9fTlJfc2V0cmVzdWlkICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAxODUpCi0jZGVmaW5lIF9fTlJfZ2V0cmVzdWlkICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAxODYpCi0jZGVmaW5lIF9fTlJfcG9sbCAgICAgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAxODgpCi0jZGVmaW5lIF9fTlJfc2V0cmVzZ2lkICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAxOTApCi0jZGVmaW5lIF9fTlJfZ2V0cmVzZ2lkICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAxOTEpCi0jZGVmaW5lIF9fTlJfcHJjdGwgICAgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAxOTIpCi0jZGVmaW5lIF9fTlJfcnRfc2lnYWN0aW9uICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAxOTQpCi0jZGVmaW5lIF9fTlJfcnRfc2lncHJvY21hc2sgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAxOTUpCi0jZGVmaW5lIF9fTlJfcnRfc2lndGltZWR3YWl0ICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAxOTcpCi0jZGVmaW5lIF9fTlJfcHJlYWQ2NCAgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyMDApCi0jZGVmaW5lIF9fTlJfcHdyaXRlNjQgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyMDEpCi0jZGVmaW5lIF9fTlJfY2hvd24gICAgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyMDIpCi0jZGVmaW5lIF9fTlJfZ2V0Y3dkICAgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyMDMpCi0jZGVmaW5lIF9fTlJfY2FwZ2V0ICAgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyMDQpCi0jZGVmaW5lIF9fTlJfY2Fwc2V0ICAgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyMDUpCi0jZGVmaW5lIF9fTlJfc2lnYWx0c3RhY2sgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyMDYpCi0jZGVmaW5lIF9fTlJfc2VuZGZpbGUgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyMDcpCi0jZGVmaW5lIF9fTlJfbW1hcDIgICAgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyMTApCi0jZGVmaW5lIF9fTlJfZnRydW5jYXRlNjQgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyMTIpCi0jZGVmaW5lIF9fTlJfc3RhdDY0ICAgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyMTMpCi0jZGVmaW5lIF9fTlJfbHN0YXQ2NCAgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyMTQpCi0jZGVmaW5lIF9fTlJfZnN0YXQ2NCAgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyMTUpCi0jZGVmaW5lIF9fTlJfbWluY29yZSAgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyMTcpCi0jZGVmaW5lIF9fTlJfbWFkdmlzZSAgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyMTgpCi0jZGVmaW5lIF9fTlJfZ2V0ZGVudHM2NCAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyMTkpCi0jZGVmaW5lIF9fTlJfZmNudGw2NCAgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyMjApCi0jZGVmaW5lIF9fTlJfZ2V0dGlkICAgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyMjIpCi0jZGVmaW5lIF9fTlJfcmVhZGFoZWFkICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyMjMpCi0jZGVmaW5lIF9fTlJfc2V0eGF0dHIgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyMjQpCi0jZGVmaW5lIF9fTlJfbHNldHhhdHRyICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyMjUpCi0jZGVmaW5lIF9fTlJfZnNldHhhdHRyICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyMjYpCi0jZGVmaW5lIF9fTlJfZ2V0eGF0dHIgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyMjcpCi0jZGVmaW5lIF9fTlJfbGdldHhhdHRyICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyMjgpCi0jZGVmaW5lIF9fTlJfZmdldHhhdHRyICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyMjkpCi0jZGVmaW5lIF9fTlJfbGlzdHhhdHRyICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyMzApCi0jZGVmaW5lIF9fTlJfbGxpc3R4YXR0ciAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyMzEpCi0jZGVmaW5lIF9fTlJfZmxpc3R4YXR0ciAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyMzIpCi0jZGVmaW5lIF9fTlJfcmVtb3ZleGF0dHIgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyMzMpCi0jZGVmaW5lIF9fTlJfbHJlbW92ZXhhdHRyICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyMzQpCi0jZGVmaW5lIF9fTlJfZnJlbW92ZXhhdHRyICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyMzUpCi0jZGVmaW5lIF9fTlJfdGtpbGwgICAgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyMzYpCi0jZGVmaW5lIF9fTlJfZnV0ZXggICAgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyMzgpCi0jZGVmaW5lIF9fTlJfc2NoZWRfc2V0YWZmaW5pdHkgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyMzkpCi0jZGVmaW5lIF9fTlJfc2NoZWRfZ2V0YWZmaW5pdHkgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyNDApCi0jZGVmaW5lIF9fTlJfZXhpdF9ncm91cCAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyNDYpCi0jZGVmaW5lIF9fTlJfZXBvbGxfY3JlYXRlICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyNDgpCi0jZGVmaW5lIF9fTlJfZXBvbGxfY3RsICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyNDkpCi0jZGVmaW5lIF9fTlJfZXBvbGxfd2FpdCAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyNTApCi0jZGVmaW5lIF9fTlJfc3RhdGZzNjQgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyNTUpCi0jZGVmaW5lIF9fTlJfZnN0YXRmczY0ICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyNTYpCi0jZGVmaW5lIF9fTlJfdGltZXJfY3JlYXRlICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyNTcpCi0jZGVmaW5lIF9fTlJfdGltZXJfc2V0dGltZSAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyNTgpCi0jZGVmaW5lIF9fTlJfdGltZXJfZ2V0dGltZSAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyNTkpCi0jZGVmaW5lIF9fTlJfdGltZXJfZ2V0b3ZlcnJ1biAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyNjApCi0jZGVmaW5lIF9fTlJfdGltZXJfZGVsZXRlICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyNjEpCi0jZGVmaW5lIF9fTlJfY2xvY2tfc2V0dGltZSAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyNjIpCi0jZGVmaW5lIF9fTlJfY2xvY2tfZ2V0dGltZSAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyNjMpCi0jZGVmaW5lIF9fTlJfY2xvY2tfZ2V0cmVzICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyNjQpCi0jZGVmaW5lIF9fTlJfY2xvY2tfbmFub3NsZWVwICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyNjUpCi0jZGVmaW5lIF9fTlJfdXRpbWVzICAgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyNjcpCi0jZGVmaW5lIF9fTlJfd2FpdGlkICAgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyNzgpCi0jZGVmaW5lIF9fTlJfc2V0X3RocmVhZF9hcmVhICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyODMpCi0jZGVmaW5lIF9fTlJfaW5vdGlmeV9pbml0ICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyODQpCi0jZGVmaW5lIF9fTlJfaW5vdGlmeV9hZGRfd2F0Y2ggICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyODUpCi0jZGVmaW5lIF9fTlJfaW5vdGlmeV9ybV93YXRjaCAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyODYpCi0jZGVmaW5lIF9fTlJfb3BlbmF0ICAgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyODgpCi0jZGVmaW5lIF9fTlJfbWtkaXJhdCAgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyODkpCi0jZGVmaW5lIF9fTlJfZmNob3duYXQgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyOTEpCi0jZGVmaW5lIF9fTlJfZnN0YXRhdDY0ICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyOTMpCi0jZGVmaW5lIF9fTlJfdW5saW5rYXQgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyOTQpCi0jZGVmaW5lIF9fTlJfcmVuYW1lYXQgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyOTUpCi0jZGVmaW5lIF9fTlJfZmNobW9kYXQgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyOTkpCi0jZGVmaW5lIF9fTlJfZ2V0Y3B1ICAgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAzMTIpCi0jZGVmaW5lIF9fTlJfaW9wcmlvX3NldCAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAzMTQpCi0jZGVmaW5lIF9fTlJfaW9wcmlvX2dldCAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAzMTUpCi0jZGVmaW5lIF9fTlJfdXRpbWVuc2F0ICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAzMTYpCi0jZGVmaW5lIF9fTlJfZXZlbnRmZDIgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAzMjUpCi0jZGVmaW5lIF9fTlJfcGlwZTIgICAgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAzMjgpCi0jZW5kaWYKLQotI2VuZGlmCi0KLSNlbmRpZiAvKiBfQklPTklDX0xJTlVYX1NZU0NBTExTX0hfICovCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvc3lzL2xpbnV4LXVuaXN0ZC5oIGIvbGliYy9pbmNsdWRlL3N5cy9saW51eC11bmlzdGQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDQ0NWY5Yy4uMDAwMDAwMAotLS0gYS9saWJjL2luY2x1ZGUvc3lzL2xpbnV4LXVuaXN0ZC5oCisrKyAvZGV2L251bGwKQEAgLTEsMjUwICswLDAgQEAKLS8qIGF1dG8tZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LCBkbyBub3QgdG91Y2ggKi8KLSNpZm5kZWYgX0JJT05JQ19MSU5VWF9VTklTVERfSF8KLQotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiIHsKLSNlbmRpZgotCi12b2lkICAgICAgICAgICAgIF9leGl0IChpbnQpOwotdm9pZCAgICAgICAgICAgICBfZXhpdF90aHJlYWQgKGludCk7Ci1waWRfdCAgICAgICAgICAgIF9fZm9yayAodm9pZCk7Ci1waWRfdCAgICAgICAgICAgIF93YWl0cGlkIChwaWRfdCwgaW50KiwgaW50LCBzdHJ1Y3QgcnVzYWdlKik7Ci1pbnQgICAgICAgICAgICAgIF9fd2FpdGlkIChpbnQsIHBpZF90LCBzdHJ1Y3Qgc2lnaW5mb190KiwgaW50LHZvaWQqKTsKLXBpZF90ICAgICAgICAgICAgX19zeXNfY2xvbmUgKGludCwgdm9pZCosIGludCosIHZvaWQqLCBpbnQqKTsKLWludCAgICAgICAgICAgICAgZXhlY3ZlIChjb25zdCBjaGFyKiwgY2hhciogY29uc3QqLCBjaGFyKiBjb25zdCopOwotaW50ICAgICAgICAgICAgICBfX3NldHVpZCAodWlkX3QpOwotaW50ICAgICAgICAgICAgICBfX3NldHVpZCAodWlkX3QpOwotdWlkX3QgICAgICAgICAgICBnZXR1aWQgKHZvaWQpOwotdWlkX3QgICAgICAgICAgICBnZXR1aWQgKHZvaWQpOwotZ2lkX3QgICAgICAgICAgICBnZXRnaWQgKHZvaWQpOwotZ2lkX3QgICAgICAgICAgICBnZXRnaWQgKHZvaWQpOwotdWlkX3QgICAgICAgICAgICBnZXRldWlkICh2b2lkKTsKLXVpZF90ICAgICAgICAgICAgZ2V0ZXVpZCAodm9pZCk7Ci1naWRfdCAgICAgICAgICAgIGdldGVnaWQgKHZvaWQpOwotZ2lkX3QgICAgICAgICAgICBnZXRlZ2lkICh2b2lkKTsKLXVpZF90ICAgICAgICAgICAgZ2V0cmVzdWlkICh1aWRfdCAqcnVpZCwgdWlkX3QgKmV1aWQsIHVpZF90ICpzdWlkKTsKLXVpZF90ICAgICAgICAgICAgZ2V0cmVzdWlkICh1aWRfdCAqcnVpZCwgdWlkX3QgKmV1aWQsIHVpZF90ICpzdWlkKTsKLWdpZF90ICAgICAgICAgICAgZ2V0cmVzZ2lkIChnaWRfdCAqcmdpZCwgZ2lkX3QgKmVnaWQsIGdpZF90ICpzZ2lkKTsKLWdpZF90ICAgICAgICAgICAgZ2V0cmVzZ2lkIChnaWRfdCAqcmdpZCwgZ2lkX3QgKmVnaWQsIGdpZF90ICpzZ2lkKTsKLXBpZF90ICAgICAgICAgICAgZ2V0dGlkICh2b2lkKTsKLXNzaXplX3QgICAgICAgICAgcmVhZGFoZWFkIChpbnQsIG9mZjY0X3QsIHNpemVfdCk7Ci1pbnQgICAgICAgICAgICAgIGdldGdyb3VwcyAoaW50LCBnaWRfdCAqKTsKLWludCAgICAgICAgICAgICAgZ2V0Z3JvdXBzIChpbnQsIGdpZF90ICopOwotcGlkX3QgICAgICAgICAgICBnZXRwZ2lkIChwaWRfdCk7Ci1waWRfdCAgICAgICAgICAgIGdldHBwaWQgKHZvaWQpOwotcGlkX3QgICAgICAgICAgICBzZXRzaWQgKHZvaWQpOwotaW50ICAgICAgICAgICAgICBzZXRnaWQgKGdpZF90KTsKLWludCAgICAgICAgICAgICAgc2V0Z2lkIChnaWRfdCk7Ci1pbnQgICAgICAgICAgICAgIHNldGV1aWQgKHVpZF90KTsKLWludCAgICAgICAgICAgICAgX19zZXRyZXVpZCAodWlkX3QsIHVpZF90KTsKLWludCAgICAgICAgICAgICAgX19zZXRyZXVpZCAodWlkX3QsIHVpZF90KTsKLWludCAgICAgICAgICAgICAgX19zZXRyZXN1aWQgKHVpZF90LCB1aWRfdCwgdWlkX3QpOwotaW50ICAgICAgICAgICAgICBfX3NldHJlc3VpZCAodWlkX3QsIHVpZF90LCB1aWRfdCk7Ci1pbnQgICAgICAgICAgICAgIHNldHJlc2dpZCAoZ2lkX3QsIGdpZF90LCBnaWRfdCk7Ci1pbnQgICAgICAgICAgICAgIHNldHJlc2dpZCAoZ2lkX3QsIGdpZF90LCBnaWRfdCk7Ci12b2lkKiAgICAgICAgICAgIF9fYnJrICh2b2lkKik7Ci1pbnQgICAgICAgICAgICAgIGtpbGwgKHBpZF90LCBpbnQpOwotaW50ICAgICAgICAgICAgICB0a2lsbCAocGlkX3QgdGlkLCBpbnQgc2lnKTsKLWludCAgICAgICAgICAgICAgX19wdHJhY2UgKGludCByZXF1ZXN0LCBpbnQgcGlkLCB2b2lkKiBhZGRyLCB2b2lkKiBkYXRhKTsKLWludCAgICAgICAgICAgICAgX19zZXRfdGhyZWFkX2FyZWEgKHZvaWQqICB1c2VyX2Rlc2MpOwotaW50ICAgICAgICAgICAgICBfX2dldHByaW9yaXR5IChpbnQsIGludCk7Ci1pbnQgICAgICAgICAgICAgIHNldHByaW9yaXR5IChpbnQsIGludCwgaW50KTsKLWludCAgICAgICAgICAgICAgc2V0cmxpbWl0IChpbnQgcmVzb3VyY2UsIGNvbnN0IHN0cnVjdCBybGltaXQgKnJscCk7Ci1pbnQgICAgICAgICAgICAgIGdldHJsaW1pdCAoaW50IHJlc291cmNlLCBzdHJ1Y3QgcmxpbWl0ICpybHApOwotaW50ICAgICAgICAgICAgICBnZXRybGltaXQgKGludCByZXNvdXJjZSwgc3RydWN0IHJsaW1pdCAqcmxwKTsKLWludCAgICAgICAgICAgICAgZ2V0cnVzYWdlIChpbnQgd2hvLCBzdHJ1Y3QgcnVzYWdlKiAgcl91c2FnZSk7Ci1pbnQgICAgICAgICAgICAgIHNldGdyb3VwcyAoaW50LCBjb25zdCBnaWRfdCAqKTsKLWludCAgICAgICAgICAgICAgc2V0Z3JvdXBzIChpbnQsIGNvbnN0IGdpZF90ICopOwotcGlkX3QgICAgICAgICAgICBnZXRwZ3JwICh2b2lkKTsKLWludCAgICAgICAgICAgICAgc2V0cGdpZCAocGlkX3QsIHBpZF90KTsKLXBpZF90ICAgICAgICAgICAgdmZvcmsgKHZvaWQpOwotaW50ICAgICAgICAgICAgICBzZXRyZWdpZCAoZ2lkX3QsIGdpZF90KTsKLWludCAgICAgICAgICAgICAgc2V0cmVnaWQgKGdpZF90LCBnaWRfdCk7Ci1pbnQgICAgICAgICAgICAgIGNocm9vdCAoY29uc3QgY2hhciAqKTsKLWludCAgICAgICAgICAgICAgcHJjdGwgKGludCBvcHRpb24sIHVuc2lnbmVkIGludCBhcmcyLCB1bnNpZ25lZCBpbnQgYXJnMywgdW5zaWduZWQgaW50IGFyZzQsIHVuc2lnbmVkIGludCBhcmc1KTsKLWludCAgICAgICAgICAgICAgY2FwZ2V0IChjYXBfdXNlcl9oZWFkZXJfdCBoZWFkZXIsIGNhcF91c2VyX2RhdGFfdCBkYXRhKTsKLWludCAgICAgICAgICAgICAgY2Fwc2V0IChjYXBfdXNlcl9oZWFkZXJfdCBoZWFkZXIsIGNvbnN0IGNhcF91c2VyX2RhdGFfdCBkYXRhKTsKLWludCAgICAgICAgICAgICAgc2lnYWx0c3RhY2sgKGNvbnN0IHN0YWNrX3QqLCBzdGFja190Kik7Ci1pbnQgICAgICAgICAgICAgIGFjY3QgKGNvbnN0IGNoYXIqICBmaWxlcGF0aCk7Ci1zc2l6ZV90ICAgICAgICAgIHJlYWQgKGludCwgdm9pZCosIHNpemVfdCk7Ci1zc2l6ZV90ICAgICAgICAgIHdyaXRlIChpbnQsIGNvbnN0IHZvaWQqLCBzaXplX3QpOwotc3NpemVfdCAgICAgICAgICBwcmVhZDY0IChpbnQsIHZvaWQgKiwgc2l6ZV90LCBvZmY2NF90KTsKLXNzaXplX3QgICAgICAgICAgcHdyaXRlNjQgKGludCwgdm9pZCAqLCBzaXplX3QsIG9mZjY0X3QpOwotaW50ICAgICAgICAgICAgICBfX29wZW4gKGNvbnN0IGNoYXIqLCBpbnQsIG1vZGVfdCk7Ci1pbnQgICAgICAgICAgICAgIF9fb3BlbmF0IChpbnQsIGNvbnN0IGNoYXIqLCBpbnQsIG1vZGVfdCk7Ci1pbnQgICAgICAgICAgICAgIGNsb3NlIChpbnQpOwotaW50ICAgICAgICAgICAgICBjcmVhdCAoY29uc3QgY2hhciosIG1vZGVfdCk7Ci1vZmZfdCAgICAgICAgICAgIGxzZWVrIChpbnQsIG9mZl90LCBpbnQpOwotaW50ICAgICAgICAgICAgICBfX2xsc2VlayAoaW50LCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCBsb2ZmX3QqLCBpbnQpOwotcGlkX3QgICAgICAgICAgICBnZXRwaWQgKHZvaWQpOwotdm9pZCAqICAgICAgICAgICBtbWFwICh2b2lkICosIHNpemVfdCwgaW50LCBpbnQsIGludCwgbG9uZyk7Ci12b2lkICogICAgICAgICAgIF9fbW1hcDIgKHZvaWQqLCBzaXplX3QsIGludCwgaW50LCBpbnQsIGxvbmcpOwotaW50ICAgICAgICAgICAgICBtdW5tYXAgKHZvaWQgKiwgc2l6ZV90KTsKLXZvaWQgKiAgICAgICAgICAgbXJlbWFwICh2b2lkICosIHNpemVfdCwgc2l6ZV90LCB1bnNpZ25lZCBsb25nKTsKLWludCAgICAgICAgICAgICAgbXN5bmMgKGNvbnN0IHZvaWQgKiwgc2l6ZV90LCBpbnQpOwotaW50ICAgICAgICAgICAgICBtcHJvdGVjdCAoY29uc3Qgdm9pZCAqLCBzaXplX3QsIGludCk7Ci1pbnQgICAgICAgICAgICAgIG1hZHZpc2UgKGNvbnN0IHZvaWQgKiwgc2l6ZV90LCBpbnQpOwotaW50ICAgICAgICAgICAgICBtbG9jayAoY29uc3Qgdm9pZCAqYWRkciwgc2l6ZV90IGxlbik7Ci1pbnQgICAgICAgICAgICAgIG11bmxvY2sgKGNvbnN0IHZvaWQgKmFkZHIsIHNpemVfdCBsZW4pOwotaW50ICAgICAgICAgICAgICBtaW5jb3JlICh2b2lkKiAgc3RhcnQsIHNpemVfdCAgbGVuZ3RoLCB1bnNpZ25lZCBjaGFyKiAgdmVjKTsKLWludCAgICAgICAgICAgICAgX19pb2N0bCAoaW50LCBpbnQsIHZvaWQgKik7Ci1pbnQgICAgICAgICAgICAgIHJlYWR2IChpbnQsIGNvbnN0IHN0cnVjdCBpb3ZlYyAqLCBpbnQpOwotaW50ICAgICAgICAgICAgICB3cml0ZXYgKGludCwgY29uc3Qgc3RydWN0IGlvdmVjICosIGludCk7Ci1pbnQgICAgICAgICAgICAgIF9fZmNudGwgKGludCwgaW50LCB2b2lkKik7Ci1pbnQgICAgICAgICAgICAgIGZsb2NrIChpbnQsIGludCk7Ci1pbnQgICAgICAgICAgICAgIGZjaG1vZCAoaW50LCBtb2RlX3QpOwotaW50ICAgICAgICAgICAgICBkdXAgKGludCk7Ci1pbnQgICAgICAgICAgICAgIHBpcGUgKGludCAqKTsKLWludCAgICAgICAgICAgICAgcGlwZTIgKGludCAqLCBpbnQpOwotaW50ICAgICAgICAgICAgICBkdXAyIChpbnQsIGludCk7Ci1pbnQgICAgICAgICAgICAgIHNlbGVjdCAoaW50LCBzdHJ1Y3QgZmRfc2V0ICosIHN0cnVjdCBmZF9zZXQgKiwgc3RydWN0IGZkX3NldCAqLCBzdHJ1Y3QgdGltZXZhbCAqKTsKLWludCAgICAgICAgICAgICAgZnRydW5jYXRlIChpbnQsIG9mZl90KTsKLWludCAgICAgICAgICAgICAgZnRydW5jYXRlNjQgKGludCwgb2ZmNjRfdCk7Ci1pbnQgICAgICAgICAgICAgIGdldGRlbnRzICh1bnNpZ25lZCBpbnQsIHN0cnVjdCBkaXJlbnQgKiwgdW5zaWduZWQgaW50KTsKLWludCAgICAgICAgICAgICAgZnN5bmMgKGludCk7Ci1pbnQgICAgICAgICAgICAgIGZkYXRhc3luYyAoaW50KTsKLWludCAgICAgICAgICAgICAgZmNob3duIChpbnQsIHVpZF90LCBnaWRfdCk7Ci1pbnQgICAgICAgICAgICAgIGZjaG93biAoaW50LCB1aWRfdCwgZ2lkX3QpOwotdm9pZCAgICAgICAgICAgICBzeW5jICh2b2lkKTsKLWludCAgICAgICAgICAgICAgX19mY250bDY0IChpbnQsIGludCwgdm9pZCAqKTsKLWludCAgICAgICAgICAgICAgX19mc3RhdGZzNjQgKGludCwgc2l6ZV90LCBzdHJ1Y3Qgc3RhdGZzICopOwotc3NpemVfdCAgICAgICAgICBzZW5kZmlsZSAoaW50IG91dF9mZCwgaW50IGluX2ZkLCBvZmZfdCAqb2Zmc2V0LCBzaXplX3QgY291bnQpOwotaW50ICAgICAgICAgICAgICBmc3RhdGF0IChpbnQgZGlyZmQsIGNvbnN0IGNoYXIgKnBhdGgsIHN0cnVjdCBzdGF0ICpidWYsIGludCBmbGFncyk7Ci1pbnQgICAgICAgICAgICAgIG1rZGlyYXQgKGludCBkaXJmZCwgY29uc3QgY2hhciAqcGF0aG5hbWUsIG1vZGVfdCBtb2RlKTsKLWludCAgICAgICAgICAgICAgZmNob3duYXQgKGludCBkaXJmZCwgY29uc3QgY2hhciAqcGF0aCwgdWlkX3Qgb3duZXIsIGdpZF90IGdyb3VwLCBpbnQgZmxhZ3MpOwotaW50ICAgICAgICAgICAgICBmY2htb2RhdCAoaW50IGRpcmZkLCBjb25zdCBjaGFyICpwYXRoLCBtb2RlX3QgbW9kZSwgaW50IGZsYWdzKTsKLWludCAgICAgICAgICAgICAgcmVuYW1lYXQgKGludCBvbGRkaXJmZCwgY29uc3QgY2hhciAqb2xkcGF0aCwgaW50IG5ld2RpcmZkLCBjb25zdCBjaGFyICpuZXdwYXRoKTsKLWludCAgICAgICAgICAgICAgZnNldHhhdHRyIChpbnQsIGNvbnN0IGNoYXIgKiwgY29uc3Qgdm9pZCAqLCBzaXplX3QsIGludCk7Ci1zc2l6ZV90ICAgICAgICAgIGZnZXR4YXR0ciAoaW50LCBjb25zdCBjaGFyICosIHZvaWQgKiwgc2l6ZV90KTsKLXNzaXplX3QgICAgICAgICAgZmxpc3R4YXR0ciAoaW50LCBjaGFyICosIHNpemVfdCk7Ci1pbnQgICAgICAgICAgICAgIGZyZW1vdmV4YXR0ciAoaW50LCBjb25zdCBjaGFyICopOwotaW50ICAgICAgICAgICAgICBsaW5rIChjb25zdCBjaGFyKiwgY29uc3QgY2hhciopOwotaW50ICAgICAgICAgICAgICB1bmxpbmsgKGNvbnN0IGNoYXIqKTsKLWludCAgICAgICAgICAgICAgdW5saW5rYXQgKGludCwgY29uc3QgY2hhciAqLCBpbnQpOwotaW50ICAgICAgICAgICAgICBjaGRpciAoY29uc3QgY2hhciopOwotaW50ICAgICAgICAgICAgICBta25vZCAoY29uc3QgY2hhciosIG1vZGVfdCwgZGV2X3QpOwotaW50ICAgICAgICAgICAgICBjaG1vZCAoY29uc3QgY2hhciosbW9kZV90KTsKLWludCAgICAgICAgICAgICAgY2hvd24gKGNvbnN0IGNoYXIgKiwgdWlkX3QsIGdpZF90KTsKLWludCAgICAgICAgICAgICAgY2hvd24gKGNvbnN0IGNoYXIgKiwgdWlkX3QsIGdpZF90KTsKLWludCAgICAgICAgICAgICAgbGNob3duIChjb25zdCBjaGFyKiwgdWlkX3QsIGdpZF90KTsKLWludCAgICAgICAgICAgICAgbGNob3duIChjb25zdCBjaGFyKiwgdWlkX3QsIGdpZF90KTsKLWludCAgICAgICAgICAgICAgbW91bnQgKGNvbnN0IGNoYXIqLCBjb25zdCBjaGFyKiwgY29uc3QgY2hhciosIHVuc2lnbmVkIGxvbmcsIGNvbnN0IHZvaWQqKTsKLWludCAgICAgICAgICAgICAgdW1vdW50IChjb25zdCBjaGFyKik7Ci1pbnQgICAgICAgICAgICAgIHVtb3VudDIgKGNvbnN0IGNoYXIqLCBpbnQpOwotaW50ICAgICAgICAgICAgICBmc3RhdCAoaW50LCBzdHJ1Y3Qgc3RhdCopOwotaW50ICAgICAgICAgICAgICBzdGF0IChjb25zdCBjaGFyICosIHN0cnVjdCBzdGF0ICopOwotaW50ICAgICAgICAgICAgICBsc3RhdCAoY29uc3QgY2hhciAqLCBzdHJ1Y3Qgc3RhdCAqKTsKLWludCAgICAgICAgICAgICAgbWtkaXIgKGNvbnN0IGNoYXIgKiwgbW9kZV90KTsKLWludCAgICAgICAgICAgICAgcmVhZGxpbmsgKGNvbnN0IGNoYXIgKiwgY2hhciAqLCBzaXplX3QpOwotaW50ICAgICAgICAgICAgICBybWRpciAoY29uc3QgY2hhciAqKTsKLWludCAgICAgICAgICAgICAgcmVuYW1lIChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7Ci1pbnQgICAgICAgICAgICAgIF9fZ2V0Y3dkIChjaGFyICogYnVmLCBzaXplX3Qgc2l6ZSk7Ci1pbnQgICAgICAgICAgICAgIGFjY2VzcyAoY29uc3QgY2hhciAqLCBpbnQpOwotaW50ICAgICAgICAgICAgICBzeW1saW5rIChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7Ci1pbnQgICAgICAgICAgICAgIGZjaGRpciAoaW50KTsKLWludCAgICAgICAgICAgICAgdHJ1bmNhdGUgKGNvbnN0IGNoYXIqLCBvZmZfdCk7Ci1pbnQgICAgICAgICAgICAgIHNldHhhdHRyIChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgY29uc3Qgdm9pZCAqLCBzaXplX3QsIGludCk7Ci1pbnQgICAgICAgICAgICAgIGxzZXR4YXR0ciAoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIGNvbnN0IHZvaWQgKiwgc2l6ZV90LCBpbnQpOwotc3NpemVfdCAgICAgICAgICBnZXR4YXR0ciAoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIHZvaWQgKiwgc2l6ZV90KTsKLXNzaXplX3QgICAgICAgICAgbGdldHhhdHRyIChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgdm9pZCAqLCBzaXplX3QpOwotc3NpemVfdCAgICAgICAgICBsaXN0eGF0dHIgKGNvbnN0IGNoYXIgKiwgY2hhciAqLCBzaXplX3QpOwotc3NpemVfdCAgICAgICAgICBsbGlzdHhhdHRyIChjb25zdCBjaGFyICosIGNoYXIgKiwgc2l6ZV90KTsKLWludCAgICAgICAgICAgICAgcmVtb3ZleGF0dHIgKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKLWludCAgICAgICAgICAgICAgbHJlbW92ZXhhdHRyIChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7Ci1pbnQgICAgICAgICAgICAgIF9fc3RhdGZzNjQgKGNvbnN0IGNoYXIgKiwgc2l6ZV90LCBzdHJ1Y3Qgc3RhdGZzICopOwotaW50ICAgICAgICAgICAgICBwYXVzZSAodm9pZCk7Ci1pbnQgICAgICAgICAgICAgIGdldHRpbWVvZmRheSAoc3RydWN0IHRpbWV2YWwqLCBzdHJ1Y3QgdGltZXpvbmUqKTsKLWludCAgICAgICAgICAgICAgc2V0dGltZW9mZGF5IChjb25zdCBzdHJ1Y3QgdGltZXZhbCosIGNvbnN0IHN0cnVjdCB0aW1lem9uZSopOwotY2xvY2tfdCAgICAgICAgICB0aW1lcyAoc3RydWN0IHRtcyAqKTsKLWludCAgICAgICAgICAgICAgbmFub3NsZWVwIChjb25zdCBzdHJ1Y3QgdGltZXNwZWMgKiwgc3RydWN0IHRpbWVzcGVjICopOwotaW50ICAgICAgICAgICAgICBjbG9ja19nZXR0aW1lIChjbG9ja2lkX3QgY2xrX2lkLCBzdHJ1Y3QgdGltZXNwZWMgKnRwKTsKLWludCAgICAgICAgICAgICAgY2xvY2tfc2V0dGltZSAoY2xvY2tpZF90IGNsa19pZCwgY29uc3Qgc3RydWN0IHRpbWVzcGVjICp0cCk7Ci1pbnQgICAgICAgICAgICAgIGNsb2NrX2dldHJlcyAoY2xvY2tpZF90IGNsa19pZCwgc3RydWN0IHRpbWVzcGVjICpyZXMpOwotaW50ICAgICAgICAgICAgICBjbG9ja19uYW5vc2xlZXAgKGNsb2NraWRfdCBjbG9ja19pZCwgaW50IGZsYWdzLCBjb25zdCBzdHJ1Y3QgdGltZXNwZWMgKnJlcSwgc3RydWN0IHRpbWVzcGVjICpyZW0pOwotaW50ICAgICAgICAgICAgICBnZXRpdGltZXIgKGludCwgY29uc3Qgc3RydWN0IGl0aW1lcnZhbCAqKTsKLWludCAgICAgICAgICAgICAgc2V0aXRpbWVyIChpbnQsIGNvbnN0IHN0cnVjdCBpdGltZXJ2YWwgKiwgc3RydWN0IGl0aW1lcnZhbCAqKTsKLWludCAgICAgICAgICAgICAgX190aW1lcl9jcmVhdGUgKGNsb2NraWRfdCBjbG9ja2lkLCBzdHJ1Y3Qgc2lnZXZlbnQgKmV2cCwgdGltZXJfdCAqdGltZXJpZCk7Ci1pbnQgICAgICAgICAgICAgIF9fdGltZXJfc2V0dGltZSAodGltZXJfdCwgaW50LCBjb25zdCBzdHJ1Y3QgaXRpbWVyc3BlYyosIHN0cnVjdCBpdGltZXJzcGVjKik7Ci1pbnQgICAgICAgICAgICAgIF9fdGltZXJfZ2V0dGltZSAodGltZXJfdCwgc3RydWN0IGl0aW1lcnNwZWMqKTsKLWludCAgICAgICAgICAgICAgX190aW1lcl9nZXRvdmVycnVuICh0aW1lcl90KTsKLWludCAgICAgICAgICAgICAgX190aW1lcl9kZWxldGUgKHRpbWVyX3QpOwotaW50ICAgICAgICAgICAgICB1dGltZXMgKGNvbnN0IGNoYXIqLCBjb25zdCBzdHJ1Y3QgdGltZXZhbCB0dnBbMl0pOwotaW50ICAgICAgICAgICAgICB1dGltZW5zYXQgKGludCwgY29uc3QgY2hhciAqLCBjb25zdCBzdHJ1Y3QgdGltZXNwZWMgdGltZXNbMl0sIGludCk7Ci1pbnQgICAgICAgICAgICAgIHNpZ2FjdGlvbiAoaW50LCBjb25zdCBzdHJ1Y3Qgc2lnYWN0aW9uICosIHN0cnVjdCBzaWdhY3Rpb24gKik7Ci1pbnQgICAgICAgICAgICAgIHNpZ3Byb2NtYXNrIChpbnQsIGNvbnN0IHNpZ3NldF90ICosIHNpZ3NldF90ICopOwotaW50ICAgICAgICAgICAgICBfX3NpZ3N1c3BlbmQgKGludCB1bnVzZWQxLCBpbnQgdW51c2VkMiwgdW5zaWduZWQgbWFzayk7Ci1pbnQgICAgICAgICAgICAgIF9fcnRfc2lnYWN0aW9uIChpbnQgc2lnLCBjb25zdCBzdHJ1Y3Qgc2lnYWN0aW9uICphY3QsIHN0cnVjdCBzaWdhY3Rpb24gKm9hY3QsIHNpemVfdCBzaWdzZXRzaXplKTsKLWludCAgICAgICAgICAgICAgX19ydF9zaWdwcm9jbWFzayAoaW50ICBob3csIGNvbnN0IHNpZ3NldF90ICpzZXQsIHNpZ3NldF90ICpvc2V0LCBzaXplX3Qgc2lnc2V0c2l6ZSk7Ci1pbnQgICAgICAgICAgICAgIF9fcnRfc2lndGltZWR3YWl0IChjb25zdCBzaWdzZXRfdCAqc2V0LCBzdHJ1Y3Qgc2lnaW5mb190ICAqaW5mbywgc3RydWN0IHRpbWVzcGVjX3QgICp0aW1lb3V0LCBzaXplX3QgIHNpZ3NldF9zaXplKTsKLWludCAgICAgICAgICAgICAgc2lncGVuZGluZyAoc2lnc2V0X3QgKik7Ci1pbnQgICAgICAgICAgICAgIHNvY2tldCAoaW50LCBpbnQsIGludCk7Ci1pbnQgICAgICAgICAgICAgIHNvY2tldHBhaXIgKGludCwgaW50LCBpbnQsIGludCopOwotaW50ICAgICAgICAgICAgICBiaW5kIChpbnQsIHN0cnVjdCBzb2NrYWRkciAqLCBpbnQpOwotaW50ICAgICAgICAgICAgICBjb25uZWN0IChpbnQsIHN0cnVjdCBzb2NrYWRkciAqLCBzb2NrbGVuX3QpOwotaW50ICAgICAgICAgICAgICBsaXN0ZW4gKGludCwgaW50KTsKLWludCAgICAgICAgICAgICAgYWNjZXB0IChpbnQsIHN0cnVjdCBzb2NrYWRkciAqLCBzb2NrbGVuX3QgKik7Ci1pbnQgICAgICAgICAgICAgIGdldHNvY2tuYW1lIChpbnQsIHN0cnVjdCBzb2NrYWRkciAqLCBzb2NrbGVuX3QgKik7Ci1pbnQgICAgICAgICAgICAgIGdldHBlZXJuYW1lIChpbnQsIHN0cnVjdCBzb2NrYWRkciAqLCBzb2NrbGVuX3QgKik7Ci1pbnQgICAgICAgICAgICAgIHNlbmR0byAoaW50LCBjb25zdCB2b2lkICosIHNpemVfdCwgaW50LCBjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKiwgc29ja2xlbl90KTsKLWludCAgICAgICAgICAgICAgcmVjdmZyb20gKGludCwgdm9pZCAqLCBzaXplX3QsIHVuc2lnbmVkIGludCwgc3RydWN0IHNvY2thZGRyICosIHNvY2tsZW5fdCAqKTsKLWludCAgICAgICAgICAgICAgc2h1dGRvd24gKGludCwgaW50KTsKLWludCAgICAgICAgICAgICAgc2V0c29ja29wdCAoaW50LCBpbnQsIGludCwgY29uc3Qgdm9pZCAqLCBzb2NrbGVuX3QpOwotaW50ICAgICAgICAgICAgICBnZXRzb2Nrb3B0IChpbnQsIGludCwgaW50LCB2b2lkICosIHNvY2tsZW5fdCAqKTsKLWludCAgICAgICAgICAgICAgc2VuZG1zZyAoaW50LCBjb25zdCBzdHJ1Y3QgbXNnaGRyICosIHVuc2lnbmVkIGludCk7Ci1pbnQgICAgICAgICAgICAgIHJlY3Ztc2cgKGludCwgc3RydWN0IG1zZ2hkciAqLCB1bnNpZ25lZCBpbnQpOwotaW50ICAgICAgICAgICAgICBzb2NrZXQgKGludCwgaW50LCBpbnQpOwotaW50ICAgICAgICAgICAgICBiaW5kIChpbnQsIHN0cnVjdCBzb2NrYWRkciAqLCBpbnQpOwotaW50ICAgICAgICAgICAgICBjb25uZWN0IChpbnQsIHN0cnVjdCBzb2NrYWRkciAqLCBzb2NrbGVuX3QpOwotaW50ICAgICAgICAgICAgICBsaXN0ZW4gKGludCwgaW50KTsKLWludCAgICAgICAgICAgICAgYWNjZXB0IChpbnQsIHN0cnVjdCBzb2NrYWRkciAqLCBzb2NrbGVuX3QgKik7Ci1pbnQgICAgICAgICAgICAgIGdldHNvY2tuYW1lIChpbnQsIHN0cnVjdCBzb2NrYWRkciAqLCBzb2NrbGVuX3QgKik7Ci1pbnQgICAgICAgICAgICAgIGdldHBlZXJuYW1lIChpbnQsIHN0cnVjdCBzb2NrYWRkciAqLCBzb2NrbGVuX3QgKik7Ci1pbnQgICAgICAgICAgICAgIHNvY2tldHBhaXIgKGludCwgaW50LCBpbnQsIGludCopOwotaW50ICAgICAgICAgICAgICBzZW5kdG8gKGludCwgY29uc3Qgdm9pZCAqLCBzaXplX3QsIGludCwgY29uc3Qgc3RydWN0IHNvY2thZGRyICosIHNvY2tsZW5fdCk7Ci1pbnQgICAgICAgICAgICAgIHJlY3Zmcm9tIChpbnQsIHZvaWQgKiwgc2l6ZV90LCB1bnNpZ25lZCBpbnQsIHN0cnVjdCBzb2NrYWRkciAqLCBzb2NrbGVuX3QgKik7Ci1pbnQgICAgICAgICAgICAgIHNodXRkb3duIChpbnQsIGludCk7Ci1pbnQgICAgICAgICAgICAgIHNldHNvY2tvcHQgKGludCwgaW50LCBpbnQsIGNvbnN0IHZvaWQgKiwgc29ja2xlbl90KTsKLWludCAgICAgICAgICAgICAgZ2V0c29ja29wdCAoaW50LCBpbnQsIGludCwgdm9pZCAqLCBzb2NrbGVuX3QgKik7Ci1pbnQgICAgICAgICAgICAgIHNlbmRtc2cgKGludCwgY29uc3Qgc3RydWN0IG1zZ2hkciAqLCB1bnNpZ25lZCBpbnQpOwotaW50ICAgICAgICAgICAgICByZWN2bXNnIChpbnQsIHN0cnVjdCBtc2doZHIgKiwgdW5zaWduZWQgaW50KTsKLWludCAgICAgICAgICAgICAgc2NoZWRfc2V0c2NoZWR1bGVyIChwaWRfdCBwaWQsIGludCBwb2xpY3ksIGNvbnN0IHN0cnVjdCBzY2hlZF9wYXJhbSAqcGFyYW0pOwotaW50ICAgICAgICAgICAgICBzY2hlZF9nZXRzY2hlZHVsZXIgKHBpZF90IHBpZCk7Ci1pbnQgICAgICAgICAgICAgIHNjaGVkX3lpZWxkICh2b2lkKTsKLWludCAgICAgICAgICAgICAgc2NoZWRfc2V0cGFyYW0gKHBpZF90IHBpZCwgY29uc3Qgc3RydWN0IHNjaGVkX3BhcmFtICpwYXJhbSk7Ci1pbnQgICAgICAgICAgICAgIHNjaGVkX2dldHBhcmFtIChwaWRfdCBwaWQsIHN0cnVjdCBzY2hlZF9wYXJhbSAqcGFyYW0pOwotaW50ICAgICAgICAgICAgICBzY2hlZF9nZXRfcHJpb3JpdHlfbWF4IChpbnQgcG9saWN5KTsKLWludCAgICAgICAgICAgICAgc2NoZWRfZ2V0X3ByaW9yaXR5X21pbiAoaW50IHBvbGljeSk7Ci1pbnQgICAgICAgICAgICAgIHNjaGVkX3JyX2dldF9pbnRlcnZhbCAocGlkX3QgcGlkLCBzdHJ1Y3QgdGltZXNwZWMgKmludGVydmFsKTsKLWludCAgICAgICAgICAgICAgc2NoZWRfc2V0YWZmaW5pdHkgKHBpZF90IHBpZCwgc2l6ZV90IHNldHNpemUsIGNvbnN0IGNwdV9zZXRfdCogc2V0KTsKLWludCAgICAgICAgICAgICAgX19zY2hlZF9nZXRhZmZpbml0eSAocGlkX3QgcGlkLCBzaXplX3Qgc2V0c2l6ZSwgY3B1X3NldF90KiBzZXQpOwotaW50ICAgICAgICAgICAgICBfX2dldGNwdSAodW5zaWduZWQgKmNwdSwgdW5zaWduZWQgKm5vZGUsIHZvaWQgKnVudXNlZCk7Ci1pbnQgICAgICAgICAgICAgIGlvcHJpb19zZXQgKGludCB3aGljaCwgaW50IHdobywgaW50IGlvcHJpbyk7Ci1pbnQgICAgICAgICAgICAgIGlvcHJpb19nZXQgKGludCB3aGljaCwgaW50IHdobyk7Ci1pbnQgICAgICAgICAgICAgIHVuYW1lIChzdHJ1Y3QgdXRzbmFtZSAqKTsKLXBpZF90ICAgICAgICAgICAgX193YWl0NCAocGlkX3QgcGlkLCBpbnQgKnN0YXR1cywgaW50IG9wdGlvbnMsIHN0cnVjdCBydXNhZ2UgKnJ1c2FnZSk7Ci1tb2RlX3QgICAgICAgICAgIHVtYXNrIChtb2RlX3QpOwotaW50ICAgICAgICAgICAgICBfX3JlYm9vdCAoaW50LCBpbnQsIGludCwgdm9pZCAqKTsKLWludCAgICAgICAgICAgICAgX19zeXNsb2cgKGludCwgY2hhciAqLCBpbnQpOwotaW50ICAgICAgICAgICAgICBpbml0X21vZHVsZSAodm9pZCAqLCB1bnNpZ25lZCBsb25nLCBjb25zdCBjaGFyICopOwotaW50ICAgICAgICAgICAgICBkZWxldGVfbW9kdWxlIChjb25zdCBjaGFyKiwgdW5zaWduZWQgaW50KTsKLWludCAgICAgICAgICAgICAga2xvZ2N0bCAoaW50LCBjaGFyICosIGludCk7Ci1pbnQgICAgICAgICAgICAgIHN5c2luZm8gKHN0cnVjdCBzeXNpbmZvICopOwotaW50ICAgICAgICAgICAgICBwZXJzb25hbGl0eSAodW5zaWduZWQgbG9uZyk7Ci1pbnQgICAgICAgICAgICAgIGZ1dGV4ICh2b2lkICosIGludCwgaW50LCB2b2lkICosIHZvaWQgKiwgaW50KTsKLWludCAgICAgICAgICAgICAgZXBvbGxfY3JlYXRlIChpbnQgc2l6ZSk7Ci1pbnQgICAgICAgICAgICAgIGVwb2xsX2N0bCAoaW50IGVwZmQsIGludCBvcCwgaW50IGZkLCBzdHJ1Y3QgZXBvbGxfZXZlbnQgKmV2ZW50KTsKLWludCAgICAgICAgICAgICAgZXBvbGxfd2FpdCAoaW50IGVwZmQsIHN0cnVjdCBlcG9sbF9ldmVudCAqZXZlbnRzLCBpbnQgbWF4LCBpbnQgdGltZW91dCk7Ci1pbnQgICAgICAgICAgICAgIGlub3RpZnlfaW5pdCAodm9pZCk7Ci1pbnQgICAgICAgICAgICAgIGlub3RpZnlfYWRkX3dhdGNoIChpbnQsIGNvbnN0IGNoYXIgKiwgdW5zaWduZWQgaW50KTsKLWludCAgICAgICAgICAgICAgaW5vdGlmeV9ybV93YXRjaCAoaW50LCB1bnNpZ25lZCBpbnQpOwotaW50ICAgICAgICAgICAgICBwb2xsIChzdHJ1Y3QgcG9sbGZkICosIHVuc2lnbmVkIGludCwgbG9uZyk7Ci1pbnQgICAgICAgICAgICAgIGV2ZW50ZmQgKHVuc2lnbmVkIGludCwgaW50KTsKLWludCAgICAgICAgICAgICAgX19zZXRfdGxzICh2b2lkKik7Ci1pbnQgICAgICAgICAgICAgIGNhY2hlZmx1c2ggKGxvbmcgc3RhcnQsIGxvbmcgZW5kLCBsb25nIGZsYWdzKTsKLWludCAgICAgICAgICAgICAgX2ZsdXNoX2NhY2hlIChjaGFyICphZGRyLCBjb25zdCBpbnQgbmJ5dGVzLCBjb25zdCBpbnQgb3ApOwotaW50ICAgICAgICAgICAgICBzeXNjYWxsIChpbnQgbnVtYmVyLC4uLik7Ci0jaWZkZWYgX19jcGx1c3BsdXMKLX0KLSNlbmRpZgotCi0jZW5kaWYgLyogX0JJT05JQ19MSU5VWF9VTklTVERfSF8gKi8KZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9zeXMvbW91bnQuaCBiL2xpYmMvaW5jbHVkZS9zeXMvbW91bnQuaAppbmRleCBiYTg4NDQ3Li4zYzM1ZDMxIDEwMDY0NAotLS0gYS9saWJjL2luY2x1ZGUvc3lzL21vdW50LmgKKysrIGIvbGliYy9pbmNsdWRlL3N5cy9tb3VudC5oCkBAIC0zMCw3MiArMzAsMTggQEAKIAogI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgogI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAKIF9fQkVHSU5fREVDTFMKIAotLyoKLSAqIFRoZXNlIGFyZSB0aGUgZnMtaW5kZXBlbmRlbnQgbW91bnQtZmxhZ3M6IHVwIHRvIDMyIGZsYWdzIGFyZSBzdXBwb3J0ZWQKLSAqLwotI2RlZmluZSBNU19SRE9OTFkgICAgICAgIDEgICAgICAvKiBNb3VudCByZWFkLW9ubHkgKi8KLSNkZWZpbmUgTVNfTk9TVUlEICAgICAgICAyICAgICAgLyogSWdub3JlIHN1aWQgYW5kIHNnaWQgYml0cyAqLwotI2RlZmluZSBNU19OT0RFViAgICAgICAgIDQgICAgICAvKiBEaXNhbGxvdyBhY2Nlc3MgdG8gZGV2aWNlIHNwZWNpYWwgZmlsZXMgKi8KLSNkZWZpbmUgTVNfTk9FWEVDICAgICAgICA4ICAgICAgLyogRGlzYWxsb3cgcHJvZ3JhbSBleGVjdXRpb24gKi8KLSNkZWZpbmUgTVNfU1lOQ0hST05PVVMgIDE2ICAgICAgLyogV3JpdGVzIGFyZSBzeW5jZWQgYXQgb25jZSAqLwotI2RlZmluZSBNU19SRU1PVU5UICAgICAgMzIgICAgICAvKiBBbHRlciBmbGFncyBvZiBhIG1vdW50ZWQgRlMgKi8KLSNkZWZpbmUgTVNfTUFORExPQ0sgICAgIDY0ICAgICAgLyogQWxsb3cgbWFuZGF0b3J5IGxvY2tzIG9uIGFuIEZTICovCi0jZGVmaW5lIE1TX0RJUlNZTkMgICAgICAxMjggICAgIC8qIERpcmVjdG9yeSBtb2RpZmljYXRpb25zIGFyZSBzeW5jaHJvbm91cyAqLwotI2RlZmluZSBNU19OT0FUSU1FICAgICAgMTAyNCAgICAvKiBEbyBub3QgdXBkYXRlIGFjY2VzcyB0aW1lcy4gKi8KLSNkZWZpbmUgTVNfTk9ESVJBVElNRSAgIDIwNDggICAgLyogRG8gbm90IHVwZGF0ZSBkaXJlY3RvcnkgYWNjZXNzIHRpbWVzICovCi0jZGVmaW5lIE1TX0JJTkQgICAgICAgICA0MDk2Ci0jZGVmaW5lIE1TX01PVkUgICAgICAgICA4MTkyCi0jZGVmaW5lIE1TX1JFQyAgICAgICAgICAxNjM4NAotI2RlZmluZSBNU19WRVJCT1NFICAgICAgMzI3NjgKLSNkZWZpbmUgTVNfUE9TSVhBQ0wgICAgICgxPDwxNikgLyogVkZTIGRvZXMgbm90IGFwcGx5IHRoZSB1bWFzayAqLwotI2RlZmluZSBNU19PTkVfU0VDT05EICAgKDE8PDE3KSAvKiBmcyBoYXMgMSBzZWMgYS9tL2N0aW1lIHJlc29sdXRpb24gKi8KLSNkZWZpbmUgTVNfQUNUSVZFICAgICAgICgxPDwzMCkKLSNkZWZpbmUgTVNfTk9VU0VSICAgICAgICgxPDwzMSkKLQotLyoKLSAqIFN1cGVyYmxvY2sgZmxhZ3MgdGhhdCBjYW4gYmUgYWx0ZXJlZCBieSBNU19SRU1PVU5UCi0gKi8KLSNkZWZpbmUgTVNfUk1UX01BU0sgICAgIChNU19SRE9OTFl8TVNfU1lOQ0hST05PVVN8TVNfTUFORExPQ0t8TVNfTk9BVElNRXxNU19OT0RJUkFUSU1FKQotCi0vKgotICogT2xkIG1hZ2ljIG1vdW50IGZsYWcgYW5kIG1hc2sKLSAqLwotI2RlZmluZSBNU19NR0NfVkFMIDB4QzBFRDAwMDAKLSNkZWZpbmUgTVNfTUdDX01TSyAweGZmZmYwMDAwCi0KLS8qCi0gKiB1bW91bnQyKCkgZmxhZ3MKLSAqLworLyogdW1vdW50MiBmbGFncy4gKi8KICNkZWZpbmUgTU5UX0ZPUkNFCTEJLyogRm9yY2libHkgdW5tb3VudCAqLwogI2RlZmluZSBNTlRfREVUQUNICTIJLyogRGV0YWNoIGZyb20gdHJlZSBvbmx5ICovCiAjZGVmaW5lIE1OVF9FWFBJUkUJNAkvKiBNYXJrIGZvciBleHBpcnkgKi8KIAotLyoKLSAqIEJsb2NrIGRldmljZSBpb2N0bHMKLSAqLwotI2RlZmluZSBCTEtST1NFVCAgIF9JTygweDEyLCA5MykgLyogU2V0IGRldmljZSByZWFkLW9ubHkgKDAgPSByZWFkLXdyaXRlKS4gICovCi0jZGVmaW5lIEJMS1JPR0VUICAgX0lPKDB4MTIsIDk0KSAvKiBHZXQgcmVhZC1vbmx5IHN0YXR1cyAoMCA9IHJlYWRfd3JpdGUpLiAgKi8KLSNkZWZpbmUgQkxLUlJQQVJUICBfSU8oMHgxMiwgOTUpIC8qIFJlLXJlYWQgcGFydGl0aW9uIHRhYmxlLiAgKi8KLSNkZWZpbmUgQkxLR0VUU0laRSBfSU8oMHgxMiwgOTYpIC8qIFJldHVybiBkZXZpY2Ugc2l6ZS4gICovCi0jZGVmaW5lIEJMS0ZMU0JVRiAgX0lPKDB4MTIsIDk3KSAvKiBGbHVzaCBidWZmZXIgY2FjaGUuICAqLwotI2RlZmluZSBCTEtSQVNFVCAgIF9JTygweDEyLCA5OCkgLyogU2V0IHJlYWQgYWhlYWQgZm9yIGJsb2NrIGRldmljZS4gICovCi0jZGVmaW5lIEJMS1JBR0VUICAgX0lPKDB4MTIsIDk5KSAvKiBHZXQgY3VycmVudCByZWFkIGFoZWFkIHNldHRpbmcuICAqLwotCi0vKgotICogUHJvdG90eXBlcwotICovCi1leHRlcm4gaW50IG1vdW50KGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLAotCQkgICBjb25zdCBjaGFyICosIHVuc2lnbmVkIGxvbmcsCi0JCSAgIGNvbnN0IHZvaWQgKik7Ci1leHRlcm4gaW50IHVtb3VudChjb25zdCBjaGFyICopOwotZXh0ZXJuIGludCB1bW91bnQyKGNvbnN0IGNoYXIgKiwgaW50KTsKLQotI2lmIDAgLyogTUlTU0lORyBGUk9NIEJJT05JQyAqLwotZXh0ZXJuIGludCBwaXZvdF9yb290KGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKLSNlbmRpZiAvKiBNSVNTSU5HICovCitleHRlcm4gaW50IG1vdW50KGNvbnN0IGNoYXIqLCBjb25zdCBjaGFyKiwgY29uc3QgY2hhciosIHVuc2lnbmVkIGxvbmcsIGNvbnN0IHZvaWQqKTsKK2V4dGVybiBpbnQgdW1vdW50KGNvbnN0IGNoYXIqKTsKK2V4dGVybiBpbnQgdW1vdW50Mihjb25zdCBjaGFyKiwgaW50KTsKIAogX19FTkRfREVDTFMKIApkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL3N5cy9wYXJhbS5oIGIvbGliYy9pbmNsdWRlL3N5cy9wYXJhbS5oCmluZGV4IDNhODE1Y2IuLjBiZmRjNWQgMTAwNjQ0Ci0tLSBhL2xpYmMvaW5jbHVkZS9zeXMvcGFyYW0uaAorKysgYi9saWJjL2luY2x1ZGUvc3lzL3BhcmFtLmgKQEAgLTM3LDQgKzM3LDYgQEAKICNkZWZpbmUgQUxJR05CWVRFUyAgMwogI2RlZmluZSBBTElHTihwKSAgICAoKCh1bnNpZ25lZCBpbnQpKHApICsgQUxJR05CWVRFUykgJn4gQUxJR05CWVRFUykKIAorI2RlZmluZSBwb3dlcm9mMih4KSAoKCgoeCktMSkmKHgpKT09MCkKKwogI2VuZGlmIC8qIF9TWVNfUEFSQU1fSF8gKi8KZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9zeXMvcGVyc29uYWxpdHkuaCBiL2xpYmMvaW5jbHVkZS9zeXMvcGVyc29uYWxpdHkuaAppbmRleCAyMTk5ZmE3Li44YTAyM2Y5IDEwMDY0NAotLS0gYS9saWJjL2luY2x1ZGUvc3lzL3BlcnNvbmFsaXR5LmgKKysrIGIvbGliYy9pbmNsdWRlL3N5cy9wZXJzb25hbGl0eS5oCkBAIC0yOSw1NiArMjksMTEgQEAKICNpZm5kZWYgX1NZU19QRVJTT05BTElUWV9IXwogI2RlZmluZSBfU1lTX1BFUlNPTkFMSVRZX0hfCiAKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9wZXJzb25hbGl0eS5oPgorCiBfX0JFR0lOX0RFQ0xTCiAKLS8qIGNvbnN0YW50cyB0YWtlbiBmcm9tIGxpbnV4LTMuMC40L2luY2x1ZGUvbGludXgvcGVyc29uYWxpdHkuaCAqLwotCi1lbnVtIHsKLSAgICAgICAgVU5BTUUyNiA9ICAgICAgICAgICAgICAgMHgwMDIwMDAwLAotICAgICAgICBBRERSX05PX1JBTkRPTUlaRSA9ICAgICAweDAwNDAwMDAsCi0gICAgICAgIEZEUElDX0ZVTkNQVFJTID0gICAgICAgIDB4MDA4MDAwMCwKLSAgICAgICAgTU1BUF9QQUdFX1pFUk8gPSAgICAgICAgMHgwMTAwMDAwLAotICAgICAgICBBRERSX0NPTVBBVF9MQVlPVVQgPSAgICAweDAyMDAwMDAsCi0gICAgICAgIFJFQURfSU1QTElFU19FWEVDID0gICAgIDB4MDQwMDAwMCwKLSAgICAgICAgQUREUl9MSU1JVF8zMkJJVCA9ICAgICAgMHgwODAwMDAwLAotICAgICAgICBTSE9SVF9JTk9ERSA9ICAgICAgICAgICAweDEwMDAwMDAsCi0gICAgICAgIFdIT0xFX1NFQ09ORFMgPSAgICAgICAgIDB4MjAwMDAwMCwKLSAgICAgICAgU1RJQ0tZX1RJTUVPVVRTID0gICAgICAgMHg0MDAwMDAwLAotICAgICAgICBBRERSX0xJTUlUXzNHQiA9ICAgICAgICAweDgwMDAwMDAsCi19OwotCi0jZGVmaW5lIFBFUl9DTEVBUl9PTl9TRVRJRCAoUkVBRF9JTVBMSUVTX0VYRUMgIHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFERFJfTk9fUkFORE9NSVpFICB8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBBRERSX0NPTVBBVF9MQVlPVVQgfCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgTU1BUF9QQUdFX1pFUk8pCi0KLWVudW0gewotICAgICAgICBQRVJfTElOVVggPSAgICAgICAgICAgICAweDAwMDAsCi0gICAgICAgIFBFUl9MSU5VWF8zMkJJVCA9ICAgICAgIDB4MDAwMCB8IEFERFJfTElNSVRfMzJCSVQsCi0gICAgICAgIFBFUl9MSU5VWF9GRFBJQyA9ICAgICAgIDB4MDAwMCB8IEZEUElDX0ZVTkNQVFJTLAotICAgICAgICBQRVJfU1ZSNCA9ICAgICAgICAgICAgICAweDAwMDEgfCBTVElDS1lfVElNRU9VVFMgfCBNTUFQX1BBR0VfWkVSTywKLSAgICAgICAgUEVSX1NWUjMgPSAgICAgICAgICAgICAgMHgwMDAyIHwgU1RJQ0tZX1RJTUVPVVRTIHwgU0hPUlRfSU5PREUsCi0gICAgICAgIFBFUl9TQ09TVlIzID0gICAgICAgICAgIDB4MDAwMyB8IFNUSUNLWV9USU1FT1VUUyB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdIT0xFX1NFQ09ORFMgfCBTSE9SVF9JTk9ERSwKLSAgICAgICAgUEVSX09TUjUgPSAgICAgICAgICAgICAgMHgwMDAzIHwgU1RJQ0tZX1RJTUVPVVRTIHwgV0hPTEVfU0VDT05EUywKLSAgICAgICAgUEVSX1dZU0VWMzg2ID0gICAgICAgICAgMHgwMDA0IHwgU1RJQ0tZX1RJTUVPVVRTIHwgU0hPUlRfSU5PREUsCi0gICAgICAgIFBFUl9JU0NSNCA9ICAgICAgICAgICAgIDB4MDAwNSB8IFNUSUNLWV9USU1FT1VUUywKLSAgICAgICAgUEVSX0JTRCA9ICAgICAgICAgICAgICAgMHgwMDA2LAotICAgICAgICBQRVJfU1VOT1MgPSAgICAgICAgICAgICAweDAwMDYgfCBTVElDS1lfVElNRU9VVFMsCi0gICAgICAgIFBFUl9YRU5JWCA9ICAgICAgICAgICAgIDB4MDAwNyB8IFNUSUNLWV9USU1FT1VUUyB8IFNIT1JUX0lOT0RFLAotICAgICAgICBQRVJfTElOVVgzMiA9ICAgICAgICAgICAweDAwMDgsCi0gICAgICAgIFBFUl9MSU5VWDMyXzNHQiA9ICAgICAgIDB4MDAwOCB8IEFERFJfTElNSVRfM0dCLAotICAgICAgICBQRVJfSVJJWDMyID0gICAgICAgICAgICAweDAwMDkgfCBTVElDS1lfVElNRU9VVFMsCi0gICAgICAgIFBFUl9JUklYTjMyID0gICAgICAgICAgIDB4MDAwYSB8IFNUSUNLWV9USU1FT1VUUywKLSAgICAgICAgUEVSX0lSSVg2NCA9ICAgICAgICAgICAgMHgwMDBiIHwgU1RJQ0tZX1RJTUVPVVRTLAotICAgICAgICBQRVJfUklTQ09TID0gICAgICAgICAgICAweDAwMGMsCi0gICAgICAgIFBFUl9TT0xBUklTID0gICAgICAgICAgIDB4MDAwZCB8IFNUSUNLWV9USU1FT1VUUywKLSAgICAgICAgUEVSX1VXNyA9ICAgICAgICAgICAgICAgMHgwMDBlIHwgU1RJQ0tZX1RJTUVPVVRTIHwgTU1BUF9QQUdFX1pFUk8sCi0gICAgICAgIFBFUl9PU0Y0ID0gICAgICAgICAgICAgIDB4MDAwZiwKLSAgICAgICAgUEVSX0hQVVggPSAgICAgICAgICAgICAgMHgwMDEwLAotICAgICAgICBQRVJfTUFTSyA9ICAgICAgICAgICAgICAweDAwZmYsCi19OwotCiBleHRlcm4gaW50IHBlcnNvbmFsaXR5ICh1bnNpZ25lZCBsb25nIHBlcnNvbmEpOwogCiBfX0VORF9ERUNMUwpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL3N5cy9wcmN0bC5oIGIvbGliYy9pbmNsdWRlL3N5cy9wcmN0bC5oCmluZGV4IDM1OWQ2ODQuLjAwZTU4MzcgMTAwNjQ0Ci0tLSBhL2xpYmMvaW5jbHVkZS9zeXMvcHJjdGwuaAorKysgYi9saWJjL2luY2x1ZGUvc3lzL3ByY3RsLmgKQEAgLTI5LDYgKzI5LDcgQEAKICNkZWZpbmUgX1NZU19QUkNUTF9ICiAKICNpbmNsdWRlIDxsaW51eC9wcmN0bC5oPgorI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgogCiBfX0JFR0lOX0RFQ0xTCiAKZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9zeXMvc2hhMS5oIGIvbGliYy9pbmNsdWRlL3N5cy9zaGExLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjdhZGE0NgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvaW5jbHVkZS9zeXMvc2hhMS5oCkBAIC0wLDAgKzEsMzEgQEAKKy8qCSROZXRCU0Q6IHNoYTEuaCx2IDEuMTMgMjAwNS8xMi8yNiAxODo0MTozNiBwZXJyeSBFeHAgJAkqLworCisvKgorICogU0hBLTEgaW4gQworICogQnkgU3RldmUgUmVpZCA8c3RldmVAZWRtd2ViLmNvbT4KKyAqIDEwMCUgUHVibGljIERvbWFpbgorICovCisKKyNpZm5kZWYgX1NZU19TSEExX0hfCisjZGVmaW5lCV9TWVNfU0hBMV9IXworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisKKyNkZWZpbmUgU0hBMV9ESUdFU1RfTEVOR1RICQkyMAorI2RlZmluZSBTSEExX0RJR0VTVF9TVFJJTkdfTEVOR1RICTQxCisKK3R5cGVkZWYgc3RydWN0IHsKKwl1aW50MzJfdCBzdGF0ZVs1XTsKKwl1aW50MzJfdCBjb3VudFsyXTsKKwl1X2NoYXIgYnVmZmVyWzY0XTsKK30gU0hBMV9DVFg7CisKK19fQkVHSU5fREVDTFMKK3ZvaWQJU0hBMVRyYW5zZm9ybSh1aW50MzJfdFs1XSwgY29uc3QgdV9jaGFyWzY0XSk7Cit2b2lkCVNIQTFJbml0KFNIQTFfQ1RYICopOwordm9pZAlTSEExVXBkYXRlKFNIQTFfQ1RYICosIGNvbnN0IHVfY2hhciAqLCB1X2ludCk7Cit2b2lkCVNIQTFGaW5hbCh1X2NoYXJbU0hBMV9ESUdFU1RfTEVOR1RIXSwgU0hBMV9DVFggKik7CitfX0VORF9ERUNMUworCisjZW5kaWYgLyogX1NZU19TSEExX0hfICovCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvc3lzL3NpZ25hbC5oIGIvbGliYy9pbmNsdWRlL3N5cy9zaWduYWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZTYwMmRhCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9pbmNsdWRlL3N5cy9zaWduYWwuaApAQCAtMCwwICsxIEBACisjaW5jbHVkZSA8c2lnbmFsLmg+CmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvc3lzL3NpZ25hbGZkLmggYi9saWJjL2luY2x1ZGUvc3lzL3NpZ25hbGZkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjUzN2FiOQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvaW5jbHVkZS9zeXMvc2lnbmFsZmQuaApAQCAtMCwwICsxLDQyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgX1NZU19TSUdOQUxGRF9IXworI2RlZmluZSBfU1lTX1NJR05BTEZEX0hfCisKKyNpbmNsdWRlIDxsaW51eC9zaWduYWxmZC5oPgorI2luY2x1ZGUgPHNpZ25hbC5oPgorI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorCitfX0JFR0lOX0RFQ0xTCisKK2V4dGVybiBpbnQgc2lnbmFsZmQoaW50IGZkLCBjb25zdCBzaWdzZXRfdCogbWFzaywgaW50IGZsYWdzKSBfX25vbm51bGwoKDIpKTsKKworX19FTkRfREVDTFMKKworI2VuZGlmIC8qIF9TWVNfU0lHTkFMRkRfSCAqLwpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL3N5cy9zb2NrZXQuaCBiL2xpYmMvaW5jbHVkZS9zeXMvc29ja2V0LmgKaW5kZXggMjA4NjYzZS4uMTdiYTBhMSAxMDA2NDQKLS0tIGEvbGliYy9pbmNsdWRlL3N5cy9zb2NrZXQuaAorKysgYi9saWJjL2luY2x1ZGUvc3lzL3NvY2tldC5oCkBAIC0zMiwxOSArMzIsMzMgQEAKICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9zb2NrZXQuaD4KIAorI2luY2x1ZGUgPGFzbS9zb2NrZXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zb2NraW9zLmg+CisjaW5jbHVkZSA8bGludXgvdWlvLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorCiBfX0JFR0lOX0RFQ0xTCiAKKyNkZWZpbmUgc29ja2FkZHJfc3RvcmFnZSBfX2tlcm5lbF9zb2NrYWRkcl9zdG9yYWdlCit0eXBlZGVmIF9fc2FfZmFtaWx5X3Qgc2FfZmFtaWx5X3Q7Cit0eXBlZGVmIGludCBzb2NrbGVuX3Q7CisKKyNpZmRlZiBfX21pcHNfXworI2RlZmluZSBTT0NLX0RHUkFNICAgICAgMQorI2RlZmluZSBTT0NLX1NUUkVBTSAgICAgMgorI2RlZmluZSBTT0NLX1JBVyAgICAgICAgMworI2RlZmluZSBTT0NLX1JETSAgICAgICAgNAorI2RlZmluZSBTT0NLX1NFUVBBQ0tFVCAgNQorI2RlZmluZSBTT0NLX0RDQ1AgICAgICAgNgorI2RlZmluZSBTT0NLX1BBQ0tFVCAgICAgMTAKKyNlbHNlCiAjZGVmaW5lIFNPQ0tfU1RSRUFNICAgICAgMQogI2RlZmluZSBTT0NLX0RHUkFNICAgICAgIDIKICNkZWZpbmUgU09DS19SQVcgICAgICAgICAzCiAjZGVmaW5lIFNPQ0tfUkRNICAgICAgICAgNAogI2RlZmluZSBTT0NLX1NFUVBBQ0tFVCAgIDUKICNkZWZpbmUgU09DS19QQUNLRVQgICAgICAxMAotCi0jaWZkZWYgX19pMzg2X18KLSMgZGVmaW5lIF9fc29ja2V0Y2FsbCBleHRlcm4gX19hdHRyaWJ1dGVfXygoX19jZGVjbF9fKSkKLSNlbHNlCi0jIGRlZmluZSBfX3NvY2tldGNhbGwgZXh0ZXJuCiAjZW5kaWYKIAogLyogQklPTklDOiBzZWNvbmQgYXJndW1lbnQgdG8gc2h1dGRvd24oKSAqLwpAQCAtNTcsOCArNzEsMjA3IEBACiAjZGVmaW5lIFNIVVRfUkRXUiAgICAgICBTSFVUX1JEV1IKIH07CiAKK3N0cnVjdCBzb2NrYWRkciB7Cisgc2FfZmFtaWx5X3Qgc2FfZmFtaWx5OworIGNoYXIgc2FfZGF0YVsxNF07Cit9OwogCi10eXBlZGVmIGludCBzb2NrbGVuX3Q7CitzdHJ1Y3QgbGluZ2VyIHsKKyBpbnQgbF9vbm9mZjsKKyBpbnQgbF9saW5nZXI7Cit9OworCitzdHJ1Y3QgbXNnaGRyIHsKKyB2b2lkICogbXNnX25hbWU7CisgaW50IG1zZ19uYW1lbGVuOworIHN0cnVjdCBpb3ZlYyAqIG1zZ19pb3Y7CisgX19rZXJuZWxfc2l6ZV90IG1zZ19pb3ZsZW47Cisgdm9pZCAqIG1zZ19jb250cm9sOworIF9fa2VybmVsX3NpemVfdCBtc2dfY29udHJvbGxlbjsKKyB1bnNpZ25lZCBtc2dfZmxhZ3M7Cit9OworCitzdHJ1Y3QgY21zZ2hkciB7CisgX19rZXJuZWxfc2l6ZV90IGNtc2dfbGVuOworIGludCBjbXNnX2xldmVsOworIGludCBjbXNnX3R5cGU7Cit9OworCisjZGVmaW5lIF9fQ01TR19OWFRIRFIoY3RsLCBsZW4sIGNtc2cpIF9fY21zZ19ueHRoZHIoKGN0bCksKGxlbiksKGNtc2cpKQorI2RlZmluZSBDTVNHX05YVEhEUihtaGRyLCBjbXNnKSBjbXNnX254dGhkcigobWhkciksIChjbXNnKSkKKyNkZWZpbmUgQ01TR19BTElHTihsZW4pICggKChsZW4pK3NpemVvZihsb25nKS0xKSAmIH4oc2l6ZW9mKGxvbmcpLTEpICkKKyNkZWZpbmUgQ01TR19EQVRBKGNtc2cpICgodm9pZCAqKSgoY2hhciAqKShjbXNnKSArIENNU0dfQUxJR04oc2l6ZW9mKHN0cnVjdCBjbXNnaGRyKSkpKQorI2RlZmluZSBDTVNHX1NQQUNFKGxlbikgKENNU0dfQUxJR04oc2l6ZW9mKHN0cnVjdCBjbXNnaGRyKSkgKyBDTVNHX0FMSUdOKGxlbikpCisjZGVmaW5lIENNU0dfTEVOKGxlbikgKENNU0dfQUxJR04oc2l6ZW9mKHN0cnVjdCBjbXNnaGRyKSkgKyAobGVuKSkKKyNkZWZpbmUgX19DTVNHX0ZJUlNUSERSKGN0bCxsZW4pICgobGVuKSA+PSBzaXplb2Yoc3RydWN0IGNtc2doZHIpID8gICAoc3RydWN0IGNtc2doZHIgKikoY3RsKSA6ICAgKHN0cnVjdCBjbXNnaGRyICopTlVMTCkKKyNkZWZpbmUgQ01TR19GSVJTVEhEUihtc2cpIF9fQ01TR19GSVJTVEhEUigobXNnKS0+bXNnX2NvbnRyb2wsIChtc2cpLT5tc2dfY29udHJvbGxlbikKKyNkZWZpbmUgQ01TR19PSyhtaGRyLCBjbXNnKSAoKGNtc2cpLT5jbXNnX2xlbiA+PSBzaXplb2Yoc3RydWN0IGNtc2doZHIpICYmICAgKGNtc2cpLT5jbXNnX2xlbiA8PSAodW5zaWduZWQgbG9uZykgICAoKG1oZHIpLT5tc2dfY29udHJvbGxlbiAtICAgKChjaGFyICopKGNtc2cpIC0gKGNoYXIgKikobWhkciktPm1zZ19jb250cm9sKSkpCisKKyNpZmRlZiBfX0dOVUNfXworI2RlZmluZSBfX0tJTkxJTkUgc3RhdGljIF9faW5saW5lX18KKyNlbGlmIGRlZmluZWQoX19jcGx1c3BsdXMpCisjZGVmaW5lIF9fS0lOTElORSBzdGF0aWMgaW5saW5lCisjZWxzZQorI2RlZmluZSBfX0tJTkxJTkUgc3RhdGljCisjZW5kaWYKKworX19LSU5MSU5FIHN0cnVjdCBjbXNnaGRyICogX19jbXNnX254dGhkcih2b2lkICpfX2N0bCwgX19rZXJuZWxfc2l6ZV90IF9fc2l6ZSwgc3RydWN0IGNtc2doZHIgKl9fY21zZykgeworIHN0cnVjdCBjbXNnaGRyICogX19wdHI7CisgX19wdHIgPSAoc3RydWN0IGNtc2doZHIqKSgoKHVuc2lnbmVkIGNoYXIgKikgX19jbXNnKSArIENNU0dfQUxJR04oX19jbXNnLT5jbXNnX2xlbikpOworIGlmICgodW5zaWduZWQgbG9uZykoKGNoYXIqKShfX3B0cisxKSAtIChjaGFyICopIF9fY3RsKSA+IF9fc2l6ZSkKKyByZXR1cm4gKHN0cnVjdCBjbXNnaGRyICopMDsKKyByZXR1cm4gX19wdHI7Cit9CisKK19fS0lOTElORSBzdHJ1Y3QgY21zZ2hkciAqIGNtc2dfbnh0aGRyIChzdHJ1Y3QgbXNnaGRyICpfX21zZywgc3RydWN0IGNtc2doZHIgKl9fY21zZykgeworIHJldHVybiBfX2Ntc2dfbnh0aGRyKF9fbXNnLT5tc2dfY29udHJvbCwgX19tc2ctPm1zZ19jb250cm9sbGVuLCBfX2Ntc2cpOworfQorCisjZGVmaW5lIFNDTV9SSUdIVFMgMHgwMQorI2RlZmluZSBTQ01fQ1JFREVOVElBTFMgMHgwMgorI2RlZmluZSBTQ01fU0VDVVJJVFkgMHgwMworCitzdHJ1Y3QgdWNyZWQgeworIF9fdTMyIHBpZDsKKyBfX3UzMiB1aWQ7CisgX191MzIgZ2lkOworfTsKKworI2RlZmluZSBBRl9VTlNQRUMgMAorI2RlZmluZSBBRl9VTklYIDEKKyNkZWZpbmUgQUZfTE9DQUwgMQorI2RlZmluZSBBRl9JTkVUIDIKKyNkZWZpbmUgQUZfQVgyNSAzCisjZGVmaW5lIEFGX0lQWCA0CisjZGVmaW5lIEFGX0FQUExFVEFMSyA1CisjZGVmaW5lIEFGX05FVFJPTSA2CisjZGVmaW5lIEFGX0JSSURHRSA3CisjZGVmaW5lIEFGX0FUTVBWQyA4CisjZGVmaW5lIEFGX1gyNSA5CisjZGVmaW5lIEFGX0lORVQ2IDEwCisjZGVmaW5lIEFGX1JPU0UgMTEKKyNkZWZpbmUgQUZfREVDbmV0IDEyCisjZGVmaW5lIEFGX05FVEJFVUkgMTMKKyNkZWZpbmUgQUZfU0VDVVJJVFkgMTQKKyNkZWZpbmUgQUZfS0VZIDE1CisjZGVmaW5lIEFGX05FVExJTksgMTYKKyNkZWZpbmUgQUZfUk9VVEUgQUZfTkVUTElOSworI2RlZmluZSBBRl9QQUNLRVQgMTcKKyNkZWZpbmUgQUZfQVNIIDE4CisjZGVmaW5lIEFGX0VDT05FVCAxOQorI2RlZmluZSBBRl9BVE1TVkMgMjAKKyNkZWZpbmUgQUZfUkRTIDIxCisjZGVmaW5lIEFGX1NOQSAyMgorI2RlZmluZSBBRl9JUkRBIDIzCisjZGVmaW5lIEFGX1BQUE9YIDI0CisjZGVmaW5lIEFGX1dBTlBJUEUgMjUKKyNkZWZpbmUgQUZfTExDIDI2CisjZGVmaW5lIEFGX0NBTiAyOQorI2RlZmluZSBBRl9USVBDIDMwCisjZGVmaW5lIEFGX0JMVUVUT09USCAzMQorI2RlZmluZSBBRl9JVUNWIDMyCisjZGVmaW5lIEFGX1JYUlBDIDMzCisjZGVmaW5lIEFGX0lTRE4gMzQKKyNkZWZpbmUgQUZfUEhPTkVUIDM1CisjZGVmaW5lIEFGX0lFRUU4MDIxNTQgMzYKKyNkZWZpbmUgQUZfQ0FJRiAzNworI2RlZmluZSBBRl9BTEcgMzgKKyNkZWZpbmUgQUZfTUFYIDM5CisKKyNkZWZpbmUgUEZfVU5TUEVDIEFGX1VOU1BFQworI2RlZmluZSBQRl9VTklYIEFGX1VOSVgKKyNkZWZpbmUgUEZfTE9DQUwgQUZfTE9DQUwKKyNkZWZpbmUgUEZfSU5FVCBBRl9JTkVUCisjZGVmaW5lIFBGX0FYMjUgQUZfQVgyNQorI2RlZmluZSBQRl9JUFggQUZfSVBYCisjZGVmaW5lIFBGX0FQUExFVEFMSyBBRl9BUFBMRVRBTEsKKyNkZWZpbmUgUEZfTkVUUk9NIEFGX05FVFJPTQorI2RlZmluZSBQRl9CUklER0UgQUZfQlJJREdFCisjZGVmaW5lIFBGX0FUTVBWQyBBRl9BVE1QVkMKKyNkZWZpbmUgUEZfWDI1IEFGX1gyNQorI2RlZmluZSBQRl9JTkVUNiBBRl9JTkVUNgorI2RlZmluZSBQRl9ST1NFIEFGX1JPU0UKKyNkZWZpbmUgUEZfREVDbmV0IEFGX0RFQ25ldAorI2RlZmluZSBQRl9ORVRCRVVJIEFGX05FVEJFVUkKKyNkZWZpbmUgUEZfU0VDVVJJVFkgQUZfU0VDVVJJVFkKKyNkZWZpbmUgUEZfS0VZIEFGX0tFWQorI2RlZmluZSBQRl9ORVRMSU5LIEFGX05FVExJTksKKyNkZWZpbmUgUEZfUk9VVEUgQUZfUk9VVEUKKyNkZWZpbmUgUEZfUEFDS0VUIEFGX1BBQ0tFVAorI2RlZmluZSBQRl9BU0ggQUZfQVNICisjZGVmaW5lIFBGX0VDT05FVCBBRl9FQ09ORVQKKyNkZWZpbmUgUEZfQVRNU1ZDIEFGX0FUTVNWQworI2RlZmluZSBQRl9SRFMgQUZfUkRTCisjZGVmaW5lIFBGX1NOQSBBRl9TTkEKKyNkZWZpbmUgUEZfSVJEQSBBRl9JUkRBCisjZGVmaW5lIFBGX1BQUE9YIEFGX1BQUE9YCisjZGVmaW5lIFBGX1dBTlBJUEUgQUZfV0FOUElQRQorI2RlZmluZSBQRl9MTEMgQUZfTExDCisjZGVmaW5lIFBGX0NBTiBBRl9DQU4KKyNkZWZpbmUgUEZfVElQQyBBRl9USVBDCisjZGVmaW5lIFBGX0JMVUVUT09USCBBRl9CTFVFVE9PVEgKKyNkZWZpbmUgUEZfSVVDViBBRl9JVUNWCisjZGVmaW5lIFBGX1JYUlBDIEFGX1JYUlBDCisjZGVmaW5lIFBGX0lTRE4gQUZfSVNETgorI2RlZmluZSBQRl9QSE9ORVQgQUZfUEhPTkVUCisjZGVmaW5lIFBGX0lFRUU4MDIxNTQgQUZfSUVFRTgwMjE1NAorI2RlZmluZSBQRl9DQUlGIEFGX0NBSUYKKyNkZWZpbmUgUEZfQUxHIEFGX0FMRworI2RlZmluZSBQRl9NQVggQUZfTUFYCisKKyNkZWZpbmUgU09NQVhDT05OIDEyOAorCisjZGVmaW5lIE1TR19PT0IgMQorI2RlZmluZSBNU0dfUEVFSyAyCisjZGVmaW5lIE1TR19ET05UUk9VVEUgNAorI2RlZmluZSBNU0dfVFJZSEFSRCA0CisjZGVmaW5lIE1TR19DVFJVTkMgOAorI2RlZmluZSBNU0dfUFJPQkUgMHgxMAorI2RlZmluZSBNU0dfVFJVTkMgMHgyMAorI2RlZmluZSBNU0dfRE9OVFdBSVQgMHg0MAorI2RlZmluZSBNU0dfRU9SIDB4ODAKKyNkZWZpbmUgTVNHX1dBSVRBTEwgMHgxMDAKKyNkZWZpbmUgTVNHX0ZJTiAweDIwMAorI2RlZmluZSBNU0dfU1lOIDB4NDAwCisjZGVmaW5lIE1TR19DT05GSVJNIDB4ODAwCisjZGVmaW5lIE1TR19SU1QgMHgxMDAwCisjZGVmaW5lIE1TR19FUlJRVUVVRSAweDIwMDAKKyNkZWZpbmUgTVNHX05PU0lHTkFMIDB4NDAwMAorI2RlZmluZSBNU0dfTU9SRSAweDgwMDAKKyNkZWZpbmUgTVNHX0VPRiBNU0dfRklOCisjZGVmaW5lIE1TR19DTVNHX0NPTVBBVCAwCisKKyNkZWZpbmUgU09MX0lQIDAKKyNkZWZpbmUgU09MX1RDUCA2CisjZGVmaW5lIFNPTF9VRFAgMTcKKyNkZWZpbmUgU09MX0lQVjYgNDEKKyNkZWZpbmUgU09MX0lDTVBWNiA1OAorI2RlZmluZSBTT0xfU0NUUCAxMzIKKyNkZWZpbmUgU09MX1JBVyAyNTUKKyNkZWZpbmUgU09MX0lQWCAyNTYKKyNkZWZpbmUgU09MX0FYMjUgMjU3CisjZGVmaW5lIFNPTF9BVEFMSyAyNTgKKyNkZWZpbmUgU09MX05FVFJPTSAyNTkKKyNkZWZpbmUgU09MX1JPU0UgMjYwCisjZGVmaW5lIFNPTF9ERUNORVQgMjYxCisjZGVmaW5lIFNPTF9YMjUgMjYyCisjZGVmaW5lIFNPTF9QQUNLRVQgMjYzCisjZGVmaW5lIFNPTF9BVE0gMjY0CisjZGVmaW5lIFNPTF9BQUwgMjY1CisjZGVmaW5lIFNPTF9JUkRBIDI2NgorI2RlZmluZSBTT0xfTkVUQkVVSSAyNjcKKyNkZWZpbmUgU09MX0xMQyAyNjgKKyNkZWZpbmUgU09MX0RDQ1AgMjY5CisjZGVmaW5lIFNPTF9ORVRMSU5LIDI3MAorI2RlZmluZSBTT0xfVElQQyAyNzEKKworI2RlZmluZSBJUFhfVFlQRSAxCisKKyNpZmRlZiBfX2kzODZfXworIyBkZWZpbmUgX19zb2NrZXRjYWxsIGV4dGVybiBfX2F0dHJpYnV0ZV9fKChfX2NkZWNsX18pKQorI2Vsc2UKKyMgZGVmaW5lIF9fc29ja2V0Y2FsbCBleHRlcm4KKyNlbmRpZgogCiBfX3NvY2tldGNhbGwgaW50IHNvY2tldChpbnQsIGludCwgaW50KTsKIF9fc29ja2V0Y2FsbCBpbnQgYmluZChpbnQsIGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqLCBpbnQpOwpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL3N5cy9zdGF0LmggYi9saWJjL2luY2x1ZGUvc3lzL3N0YXQuaAppbmRleCA4N2ZjZmQwLi5jNzcxNWEzIDEwMDY0NAotLS0gYS9saWJjL2luY2x1ZGUvc3lzL3N0YXQuaAorKysgYi9saWJjL2luY2x1ZGUvc3lzL3N0YXQuaApAQCAtNDEsNiArNDEsMzkgQEAKICAqIE5vdGU6IFRoZSBrZXJuZWwgemVybydzIHRoZSBwYWRkZWQgcmVnaW9uIGJlY2F1c2UgZ2xpYmMgbWlnaHQgcmVhZCB0aGVtCiAgKiBpbiB0aGUgaG9wZSB0aGF0IHRoZSBrZXJuZWwgaGFzIHN0cmV0Y2hlZCB0byB1c2luZyBsYXJnZXIgc2l6ZXMuCiAgKi8KKyNpZmRlZiBfX21pcHNfXworc3RydWN0IHN0YXQgeworICAgIHVuc2lnbmVkIGxvbmcgICAgICAgc3RfZGV2OworICAgIHVuc2lnbmVkIGxvbmcgICAgICAgX19wYWQwWzNdOworCisgICAgdW5zaWduZWQgbG9uZyBsb25nICBzdF9pbm87CisKKyAgICB1bnNpZ25lZCBpbnQgICAgICAgIHN0X21vZGU7CisgICAgdW5zaWduZWQgaW50ICAgICAgICBzdF9ubGluazsKKworICAgIHVuc2lnbmVkIGxvbmcgICAgICAgc3RfdWlkOworICAgIHVuc2lnbmVkIGxvbmcgICAgICAgc3RfZ2lkOworCisgICAgdW5zaWduZWQgbG9uZyAgICAgICBzdF9yZGV2OworICAgIHVuc2lnbmVkIGxvbmcgICAgICAgX19wYWQxWzNdOworCisgICAgbG9uZyBsb25nICAgICAgICAgICBzdF9zaXplOworCisgICAgdW5zaWduZWQgbG9uZyAgICAgICBzdF9hdGltZTsKKyAgICB1bnNpZ25lZCBsb25nICAgICAgIHN0X2F0aW1lX25zZWM7CisKKyAgICB1bnNpZ25lZCBsb25nICAgICAgIHN0X210aW1lOworICAgIHVuc2lnbmVkIGxvbmcgICAgICAgc3RfbXRpbWVfbnNlYzsKKworICAgIHVuc2lnbmVkIGxvbmcgICAgICAgc3RfY3RpbWU7CisgICAgdW5zaWduZWQgbG9uZyAgICAgICBzdF9jdGltZV9uc2VjOworCisgICAgdW5zaWduZWQgbG9uZyAgICAgICBzdF9ibGtzaXplOworICAgIHVuc2lnbmVkIGxvbmcgICAgICAgX19wYWQyOworCisgICAgdW5zaWduZWQgbG9uZyBsb25nICBzdF9ibG9ja3M7Cit9OworI2Vsc2UKIHN0cnVjdCBzdGF0IHsKICAgICB1bnNpZ25lZCBsb25nIGxvbmcgIHN0X2RldjsKICAgICB1bnNpZ25lZCBjaGFyICAgICAgIF9fcGFkMFs0XTsKQEAgLTcwLDYgKzEwMyw3IEBACiAKICAgICB1bnNpZ25lZCBsb25nIGxvbmcgIHN0X2lubzsKIH07CisjZW5kaWYKIAogLyogRm9yIGNvbXBhdGliaWxpdHkgd2l0aCBHTGliYywgd2UgcHJvdmlkZSBtYWNybyBhbGlhc2VzCiAgKiBmb3IgdGhlIG5vbi1Qb3NpeCBuYW5vLXNlY29uZHMgYWNjZXNzb3JzLgpAQCAtNzgsNiArMTEyLDEzIEBACiAjZGVmaW5lICBzdF9tdGltZW5zZWMgIHN0X210aW1lX25zZWMKICNkZWZpbmUgIHN0X2N0aW1lbnNlYyAgc3RfY3RpbWVfbnNlYwogCisjaWZkZWYgX19VU0VfQlNECisvKiBQZXJtaXNzaW9uIG1hY3JvcyBwcm92aWRlZCBieSBnbGliYyBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIEJTRHMuICovCisjZGVmaW5lIEFDQ0VTU1BFUk1TIChTX0lSV1hVIHwgU19JUldYRyB8IFNfSVJXWE8pIC8qIDA3NzcgKi8KKyNkZWZpbmUgQUxMUEVSTVMgICAgKFNfSVNVSUQgfCBTX0lTR0lEIHwgU19JU1ZUWCB8IFNfSVJXWFUgfCBTX0lSV1hHIHwgU19JUldYTykgLyogMDc3NzcgKi8KKyNkZWZpbmUgREVGRklMRU1PREUgKFNfSVJVU1IgfCBTX0lXVVNSIHwgU19JUkdSUCB8IFNfSVdHUlAgfCBTX0lST1RIIHwgU19JV09USCkgLyogMDY2NiAqLworI2VuZGlmCisKIGV4dGVybiBpbnQgICAgY2htb2QoY29uc3QgY2hhciAqLCBtb2RlX3QpOwogZXh0ZXJuIGludCAgICBmY2htb2QoaW50LCBtb2RlX3QpOwogZXh0ZXJuIGludCAgICBta2Rpcihjb25zdCBjaGFyICosIG1vZGVfdCk7CkBAIC04OCw2ICsxMjksMjggQEAKIGV4dGVybiBpbnQgICAgbWtub2QoY29uc3QgY2hhciAqLCBtb2RlX3QsIGRldl90KTsKIGV4dGVybiBtb2RlX3QgdW1hc2sobW9kZV90KTsKIAorI2lmIGRlZmluZWQoX19CSU9OSUNfRk9SVElGWSkKKworZXh0ZXJuIG1vZGVfdCBfX3VtYXNrX2Noayhtb2RlX3QpOworZXh0ZXJuIG1vZGVfdCBfX3VtYXNrX3JlYWwobW9kZV90KQorICAgIF9fYXNtX18oX19VU0VSX0xBQkVMX1BSRUZJWF9fICJ1bWFzayIpOworX19lcnJvcmRlY2woX191bWFza19pbnZhbGlkX21vZGUsICJ1bWFzayBjYWxsZWQgd2l0aCBpbnZhbGlkIG1vZGUiKTsKKworX19CSU9OSUNfRk9SVElGWV9JTkxJTkUKK21vZGVfdCB1bWFzayhtb2RlX3QgbW9kZSkgeworI2lmICFkZWZpbmVkKF9fY2xhbmdfXykKKyAgaWYgKF9fYnVpbHRpbl9jb25zdGFudF9wKG1vZGUpKSB7CisgICAgaWYgKChtb2RlICYgMDc3NykgIT0gbW9kZSkgeworICAgICAgX191bWFza19pbnZhbGlkX21vZGUoKTsKKyAgICB9CisgICAgcmV0dXJuIF9fdW1hc2tfcmVhbChtb2RlKTsKKyAgfQorI2VuZGlmCisgIHJldHVybiBfX3VtYXNrX2Noayhtb2RlKTsKK30KKyNlbmRpZiAvKiBkZWZpbmVkKF9fQklPTklDX0ZPUlRJRlkpICovCisKKwogI2RlZmluZSAgc3RhdDY0ICAgIHN0YXQKICNkZWZpbmUgIGZzdGF0NjQgICBmc3RhdAogI2RlZmluZSAgbHN0YXQ2NCAgIGxzdGF0CmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvc3lzL3N0YXR2ZnMuaCBiL2xpYmMvaW5jbHVkZS9zeXMvc3RhdHZmcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5MTBjMDMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2luY2x1ZGUvc3lzL3N0YXR2ZnMuaApAQCAtMCwwICsxLDU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2lmbmRlZiBfU1lTX1NUQVRWRlNfSF8KKyNkZWZpbmUgX1NZU19TVEFUVkZTX0hfCisKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKworX19CRUdJTl9ERUNMUworCitzdHJ1Y3Qgc3RhdHZmcyB7CisgIHVuc2lnbmVkIGxvbmcgZl9ic2l6ZTsKKyAgdW5zaWduZWQgbG9uZyBmX2Zyc2l6ZTsKKyAgZnNibGtjbnRfdCAgICBmX2Jsb2NrczsKKyAgZnNibGtjbnRfdCAgICBmX2JmcmVlOworICBmc2Jsa2NudF90ICAgIGZfYmF2YWlsOworICBmc2ZpbGNudF90ICAgIGZfZmlsZXM7CisgIGZzZmlsY250X3QgICAgZl9mZnJlZTsKKyAgZnNmaWxjbnRfdCAgICBmX2ZhdmFpbDsKKyAgdW5zaWduZWQgbG9uZyBmX2ZzaWQ7CisgIHVuc2lnbmVkIGxvbmcgZl9mbGFnOworICB1bnNpZ25lZCBsb25nIGZfbmFtZW1heDsKK307CisKKyNkZWZpbmUgU1RfUkRPTkxZICAgICAgMHgwMDAxCisjZGVmaW5lIFNUX05PU1VJRCAgICAgIDB4MDAwMgorI2RlZmluZSBTVF9OT0RFViAgICAgICAweDAwMDQKKyNkZWZpbmUgU1RfTk9FWEVDICAgICAgMHgwMDA4CisjZGVmaW5lIFNUX1NZTkNIUk9OT1VTIDB4MDAxMAorI2RlZmluZSBTVF9NQU5ETE9DSyAgICAweDAwNDAKKyNkZWZpbmUgU1RfTk9BVElNRSAgICAgMHgwNDAwCisjZGVmaW5lIFNUX05PRElSQVRJTUUgIDB4MDgwMAorI2RlZmluZSBTVF9SRUxBVElNRSAgICAweDEwMDAKKworZXh0ZXJuIGludCBzdGF0dmZzKGNvbnN0IGNoYXIqIF9fcmVzdHJpY3QsIHN0cnVjdCBzdGF0dmZzKiBfX3Jlc3RyaWN0KSBfX25vbm51bGwoKDEsIDIpKTsKK2V4dGVybiBpbnQgZnN0YXR2ZnMoaW50LCBzdHJ1Y3Qgc3RhdHZmcyopIF9fbm9ubnVsbCgoMikpOworCitfX0VORF9ERUNMUworCisjZW5kaWYgLyogX1NZU19TVEFUVkZTX0hfICovCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvc3lzL3N3YXAuaCBiL2xpYmMvaW5jbHVkZS9zeXMvc3dhcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3YTZmMzYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2luY2x1ZGUvc3lzL3N3YXAuaApAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgX1NZU19TV0FQX0hfCisjZGVmaW5lIF9TWVNfU1dBUF9IXworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisKK19fQkVHSU5fREVDTFMKKworZXh0ZXJuIGludCBzd2Fwb24oY29uc3QgY2hhciosIGludCkgX19ub25udWxsKCgxKSk7CitleHRlcm4gaW50IHN3YXBvZmYoY29uc3QgY2hhciopIF9fbm9ubnVsbCgoMSkpOworCitfX0VORF9ERUNMUworCisjZW5kaWYgLyogX1NZU19TV0FQX0hfICovCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvc3lzL3N5c2NhbGwuaCBiL2xpYmMvaW5jbHVkZS9zeXMvc3lzY2FsbC5oCmluZGV4IDcwNTU1MTguLmE0NGIyZTUgMTAwNjQ0Ci0tLSBhL2xpYmMvaW5jbHVkZS9zeXMvc3lzY2FsbC5oCisrKyBiL2xpYmMvaW5jbHVkZS9zeXMvc3lzY2FsbC5oCkBAIC0zMyw2ICszMyw4IEBACiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogCisjaW5jbHVkZSA8c3lzL2dsaWJjLXN5c2NhbGxzLmg+IC8qIGdsaWJjLWNvbXBhdGlibGUgU1lTXyogYWxpYXNlcyBmb3Igb3VyIF9fTlJfKiBuYW1lcy4gKi8KKwogX19CRUdJTl9ERUNMUwogCiBpbnQgc3lzY2FsbChpbnQgbnVtYmVyLCAuLi4pOwpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL3N5cy9zeXNjb25mLmggYi9saWJjL2luY2x1ZGUvc3lzL3N5c2NvbmYuaAppbmRleCAyZmMxYjA4Li4wYTQ2ZTdhIDEwMDY0NAotLS0gYS9saWJjL2luY2x1ZGUvc3lzL3N5c2NvbmYuaAorKysgYi9saWJjL2luY2x1ZGUvc3lzL3N5c2NvbmYuaApAQCAtMTI3LDggKzEyNyw5IEBACiAjZGVmaW5lIF9TQ19OUFJPQ0VTU09SU19PTkxOICAgICAgICAgICAgMHgwMDYxCiAjZGVmaW5lIF9TQ19QSFlTX1BBR0VTICAgICAgICAgICAgICAgICAgMHgwMDYyCiAjZGVmaW5lIF9TQ19BVlBIWVNfUEFHRVMgICAgICAgICAgICAgICAgMHgwMDYzCisjZGVmaW5lIF9TQ19NT05PVE9OSUNfQ0xPQ0sgICAgICAgICAgICAgMHgwMDY0CiAKLWV4dGVybiBpbnQgc3lzY29uZiAoaW50ICBuYW1lKTsKK2V4dGVybiBpbnQgc3lzY29uZihpbnQgbmFtZSk7CiAKIF9fRU5EX0RFQ0xTCiAKZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9zeXMvc3lzdGVtX3Byb3BlcnRpZXMuaCBiL2xpYmMvaW5jbHVkZS9zeXMvc3lzdGVtX3Byb3BlcnRpZXMuaAppbmRleCA4NTkxNWIyLi4wMWMzZGIzIDEwMDY0NAotLS0gYS9saWJjL2luY2x1ZGUvc3lzL3N5c3RlbV9wcm9wZXJ0aWVzLmgKKysrIGIvbGliYy9pbmNsdWRlL3N5cy9zeXN0ZW1fcHJvcGVydGllcy5oCkBAIC03NiwxMyArNzYsMjYgQEAKICoqIHRoZXJlIGlzIG5vIG50aCBwcm9wZXJ0eS4gIFVzZSBfX3N5c3RlbV9wcm9wZXJ0eV9yZWFkKCkgdG8KICoqIHJlYWQgdGhlIHZhbHVlIG9mIHRoaXMgcHJvcGVydHkuCiAqKgotKiogVGhpcyBtZXRob2QgaXMgZm9yIGluc3BlY3RpbmcgYW5kIGRlYnVnZ2luZyB0aGUgcHJvcGVydHkgCisqKiBQbGVhc2UgZG8gbm90IGNhbGwgdGhpcyBtZXRob2QuICBJdCBvbmx5IGV4aXN0cyB0byBwcm92aWRlCisqKiBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSB0byBOREsgYXBwcy4gIEl0cyBpbXBsZW1lbnRhdGlvbgorKiogaXMgaW5lZmZpY2llbnQgYW5kIG9yZGVyIG9mIHJlc3VsdHMgbWF5IGNoYW5nZSBmcm9tIGNhbGwKKyoqIHRvIGNhbGwuCisqLyAKK2NvbnN0IHByb3BfaW5mbyAqX19zeXN0ZW1fcHJvcGVydHlfZmluZF9udGgodW5zaWduZWQgbik7CisKKy8qIFBhc3MgYSBwcm9wX2luZm8gZm9yIGVhY2ggc3lzdGVtIHByb3BlcnR5IHRvIHRoZSBwcm92aWRlZAorKiogY2FsbGJhY2suICBVc2UgX19zeXN0ZW1fcHJvcGVydHlfcmVhZCgpIHRvIHJlYWQgdGhlIHZhbHVlCisqKiBvZiB0aGlzIHByb3BlcnR5LgorKioKKyoqIFRoaXMgbWV0aG9kIGlzIGZvciBpbnNwZWN0aW5nIGFuZCBkZWJ1Z2dpbmcgdGhlIHByb3BlcnR5CiAqKiBzeXN0ZW0uICBQbGVhc2UgdXNlIF9fc3lzdGVtX3Byb3BlcnR5X2ZpbmQoKSBpbnN0ZWFkLgogKioKICoqIE9yZGVyIG9mIHJlc3VsdHMgbWF5IGNoYW5nZSBmcm9tIGNhbGwgdG8gY2FsbC4gIFRoaXMgaXMKICoqIG5vdCBhIGJ1Zy4KLSovIAotY29uc3QgcHJvcF9pbmZvICpfX3N5c3RlbV9wcm9wZXJ0eV9maW5kX250aCh1bnNpZ25lZCBuKTsKKyovCitpbnQgX19zeXN0ZW1fcHJvcGVydHlfZm9yZWFjaCgKKyAgICAgICAgdm9pZCAoKnByb3BmbikoY29uc3QgcHJvcF9pbmZvICpwaSwgdm9pZCAqY29va2llKSwKKyAgICAgICAgdm9pZCAqY29va2llKTsKIAogX19FTkRfREVDTFMKIApkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL3N5cy90aW1lYi5oIGIvbGliYy9pbmNsdWRlL3N5cy90aW1lYi5oCmluZGV4IGYyY2MzOWMuLmNmNmYyNTUgMTAwNjQ0Ci0tLSBhL2xpYmMvaW5jbHVkZS9zeXMvdGltZWIuaAorKysgYi9saWJjL2luY2x1ZGUvc3lzL3RpbWViLmgKQEAgLTI4LDYgKzI4LDcgQEAKICNpZm5kZWYgX1NZU19USU1FQl9ICiAjZGVmaW5lIF9TWVNfVElNRUJfSAogCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CiAjaW5jbHVkZSA8c3lzL3RpbWUuaD4KIAogX19CRUdJTl9ERUNMUwpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL3N5cy90aW1lcmZkLmggYi9saWJjL2luY2x1ZGUvc3lzL3RpbWVyZmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNjUxZjFjCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9pbmNsdWRlL3N5cy90aW1lcmZkLmgKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIF9TWVNfVElNRVJGRF9IXworI2RlZmluZSBfU1lTX1RJTUVSRkRfSF8KKworI2luY2x1ZGUgPHRpbWUuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lcmZkLmg+CisKK19fQkVHSU5fREVDTFMKKworZXh0ZXJuIGludCB0aW1lcmZkX2NyZWF0ZShjbG9ja2lkX3QsIGludCk7CitleHRlcm4gaW50IHRpbWVyZmRfc2V0dGltZShpbnQsIGludCwgY29uc3Qgc3RydWN0IGl0aW1lcnNwZWMqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGl0aW1lcnNwZWMqKTsKK2V4dGVybiBpbnQgdGltZXJmZF9nZXR0aW1lKGludCwgc3RydWN0IGl0aW1lcnNwZWMqKTsKKworX19FTkRfREVDTFMKKworI2VuZGlmIC8qIF9TWVNfVElNRVJGRF9IICovCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvc3lzL3R0eWRlZmF1bHRzLmggYi9saWJjL2luY2x1ZGUvc3lzL3R0eWRlZmF1bHRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDA1ZTc1OQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvaW5jbHVkZS9zeXMvdHR5ZGVmYXVsdHMuaApAQCAtMCwwICsxLDExNSBAQAorLyoJJE5ldEJTRDogdHR5ZGVmYXVsdHMuaCx2IDEuMTYgMjAwOC8wNS8yNCAxNDowNjozOSB5YW10IEV4cCAkCSovCisKKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTgyLCAxOTg2LCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIChjKSBVTklYIFN5c3RlbSBMYWJvcmF0b3JpZXMsIEluYy4KKyAqIEFsbCBvciBzb21lIHBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgZGVyaXZlZCBmcm9tIG1hdGVyaWFsIGxpY2Vuc2VkCisgKiB0byB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhIGJ5IEFtZXJpY2FuIFRlbGVwaG9uZSBhbmQgVGVsZWdyYXBoCisgKiBDby4gb3IgVW5peCBTeXN0ZW0gTGFib3JhdG9yaWVzLCBJbmMuIGFuZCBhcmUgcmVwcm9kdWNlZCBoZXJlaW4gd2l0aAorICogdGhlIHBlcm1pc3Npb24gb2YgVU5JWCBTeXN0ZW0gTGFib3JhdG9yaWVzLCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqCUAoIyl0dHlkZWZhdWx0cy5oCTguNCAoQmVya2VsZXkpIDEvMjEvOTQKKyAqLworCisvKgorICogU3lzdGVtIHdpZGUgZGVmYXVsdHMgZm9yIHRlcm1pbmFsIHN0YXRlLgorICovCisjaWZuZGVmIF9TWVNfVFRZREVGQVVMVFNfSF8KKyNkZWZpbmUJX1NZU19UVFlERUZBVUxUU19IXworCisvKgorICogRGVmYXVsdHMgb24gImZpcnN0IiBvcGVuLgorICovCisjZGVmaW5lCVRUWURFRl9JRkxBRwkoQlJLSU5UIHwgSUNSTkwgfCBJTUFYQkVMIHwgSVhPTiB8IElYQU5ZKQorI2RlZmluZSBUVFlERUZfT0ZMQUcJKE9QT1NUIHwgT05MQ1IgfCBPWFRBQlMpCisjZGVmaW5lIFRUWURFRl9MRkxBRwkoRUNITyB8IElDQU5PTiB8IElTSUcgfCBJRVhURU4gfCBFQ0hPRXxFQ0hPS0V8RUNIT0NUTCkKKyNkZWZpbmUgVFRZREVGX0NGTEFHCShDUkVBRCB8IENTOCB8IEhVUENMKQorI2RlZmluZSBUVFlERUZfU1BFRUQJKEI5NjAwKQorCisvKgorICogQ29udHJvbCBDaGFyYWN0ZXIgRGVmYXVsdHMKKyAqLworI2RlZmluZSBDVFJMKHgpCSh4JjAzNykKKyNkZWZpbmUJQ0VPRgkJQ1RSTCgnZCcpCisjZGVmaW5lCUNFT0wJCSgodW5zaWduZWQgY2hhciknXDM3NycpCS8qIFhYWCBhdm9pZCBfUE9TSVhfVkRJU0FCTEUgKi8KKyNkZWZpbmUJQ0VSQVNFCQkwMTc3CisjZGVmaW5lCUNJTlRSCQlDVFJMKCdjJykKKyNkZWZpbmUJQ1NUQVRVUwkJQ1RSTCgndCcpCisjZGVmaW5lCUNLSUxMCQlDVFJMKCd1JykKKyNkZWZpbmUJQ01JTgkJMQorI2RlZmluZQlDUVVJVAkJMDM0CQkvKiBGUywgXlwgKi8KKyNkZWZpbmUJQ1NVU1AJCUNUUkwoJ3onKQorI2RlZmluZQlDVElNRQkJMAorI2RlZmluZQlDRFNVU1AJCUNUUkwoJ3knKQorI2RlZmluZQlDU1RBUlQJCUNUUkwoJ3EnKQorI2RlZmluZQlDU1RPUAkJQ1RSTCgncycpCisjZGVmaW5lCUNMTkVYVAkJQ1RSTCgndicpCisjZGVmaW5lCUNESVNDQVJEIAlDVFJMKCdvJykKKyNkZWZpbmUJQ1dFUkFTRSAJQ1RSTCgndycpCisjZGVmaW5lCUNSRVBSSU5UIAlDVFJMKCdyJykKKyNkZWZpbmUJQ0VPVAkJQ0VPRgorLyogY29tcGF0ICovCisjZGVmaW5lCUNCUksJCUNFT0wKKyNkZWZpbmUgQ1JQUk5UCQlDUkVQUklOVAorI2RlZmluZQlDRkxVU0gJCUNESVNDQVJECisKKy8qIFBST1RFQ1RFRCBJTkNMVVNJT04gRU5EUyBIRVJFICovCisjZW5kaWYgLyogIV9TWVNfVFRZREVGQVVMVFNfSF8gKi8KKworLyoKKyAqICNkZWZpbmUgVFRZREVGQ0hBUlMgdG8gaW5jbHVkZSBhbiBhcnJheSBvZiBkZWZhdWx0IGNvbnRyb2wgY2hhcmFjdGVycy4KKyAqLworI2lmZGVmIF9LRVJORUwKKyNpZmRlZiBUVFlERUZDSEFSUworY29uc3QgY2NfdCB0dHlkZWZjaGFyc1tOQ0NTXSA9IHsKKwlbVkVPRl0gPSBDRU9GLAorCVtWRU9MXSA9IENFT0wsCisJW1ZFT0wyXSA9IENFT0wsCisJW1ZFUkFTRV0gPSBDRVJBU0UsCisJW1ZXRVJBU0VdID0gQ1dFUkFTRSwKKwlbVktJTExdID0gQ0tJTEwsCisJW1ZSRVBSSU5UXSA9IENSRVBSSU5ULAorCVs3XSA9IF9QT1NJWF9WRElTQUJMRSwJLyogc3BhcmUgKi8KKwlbVklOVFJdID0gQ0lOVFIsCisJW1ZRVUlUXSA9IENRVUlULAorCVtWU1VTUF0gPSBDU1VTUCwKKwlbVkRTVVNQXSA9IENEU1VTUCwKKwlbVlNUQVJUXSA9IENTVEFSVCwKKwlbVlNUT1BdID0gQ1NUT1AsCisJW1ZMTkVYVF0gPSBDTE5FWFQsCisJW1ZESVNDQVJEXSA9IENESVNDQVJELAorCVtWTUlOXSA9IENNSU4sCisJW1ZUSU1FXSA9IENUSU1FLAorCVtWU1RBVFVTXSA9IENTVEFUVVMsCisJWzE5XSA9IF9QT1NJWF9WRElTQUJMRSwJLyogc3BhcmUgKi8KK307CisjdW5kZWYgVFRZREVGQ0hBUlMKKyNlbHNlCitleHRlcm4gY29uc3QgY2NfdCB0dHlkZWZjaGFyc1tOQ0NTXTsKKyNlbmRpZgorI2VuZGlmIC8qIF9LRVJORUwgKi8KZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9zeXMvdHlwZXMuaCBiL2xpYmMvaW5jbHVkZS9zeXMvdHlwZXMuaAppbmRleCAzM2ZlMzBlLi5hMGNlNDA1IDEwMDY0NAotLS0gYS9saWJjL2luY2x1ZGUvc3lzL3R5cGVzLmgKKysrIGIvbGliYy9pbmNsdWRlL3N5cy90eXBlcy5oCkBAIC0yOCw4ICsyOCw2IEBACiAjaWZuZGVmIF9TWVNfVFlQRVNfSF8KICNkZWZpbmUgX1NZU19UWVBFU19IXwogCi0jZGVmaW5lIF9fbmVlZF9zaXplX3QKLSNkZWZpbmUgX19uZWVkX3B0cmRpZmZfdAogI2luY2x1ZGUgPHN0ZGRlZi5oPgogI2luY2x1ZGUgPHN0ZGludC5oPgogI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgpAQCAtNDUsNyArNDMsNyBAQAogICogdGhlc2UgYXJlIGRlZmluZWQgYXMgMTYtYml0IGZvciBsZWdhY3kgcmVhc29uLCBidXQKICAqIHRoZSBrZXJuZWwgdXNlcyAzMi1iaXRzIGluc3RlYWQuCiAgKgotICogMzItYml0IHZhbHVlYSBhcmUgcmVxdWlyZWQgZm9yIEFuZHJvaWQsIHNvIHVzZQorICogMzItYml0IHZhbHVlcyBhcmUgcmVxdWlyZWQgZm9yIEFuZHJvaWQsIHNvIHVzZQogICogX19rZXJuZWxfdWlkMzJfdCBhbmQgX19rZXJuZWxfZ2lkMzJfdAogICovCiAKQEAgLTg1LDE1ICs4MywxNCBAQAogdHlwZWRlZiAgLi4uLiBwdGhyZWFkX3Q7CiAjZW5kaWYKIAotI2lmbmRlZiBfU0laRV9UX0RFRklORURfCi0jZGVmaW5lIF9TSVpFX1RfREVGSU5FRF8KLXR5cGVkZWYgdW5zaWduZWQgaW50ICBzaXplX3Q7Ci0jZW5kaWYKLQotLyogc2l6ZV90IGlzIGRlZmluZWQgYnkgdGhlIEdDQy1zcGVjaWZpYyA8c3RkZGVmLmg+ICovCiAjaWZuZGVmIF9TU0laRV9UX0RFRklORURfCiAjZGVmaW5lIF9TU0laRV9UX0RFRklORURfCi10eXBlZGVmIGxvbmcgaW50ICBzc2l6ZV90OworLyogVHJhZGl0aW9uYWxseSwgYmlvbmljJ3Mgc3NpemVfdCB3YXMgImxvbmcgaW50Ii4gVGhpcyBjYXVzZWQgR0NDIHRvIGVtaXQgd2FybmluZ3Mgd2hlbiB5b3UKKyAqIHBhc3MgYSBzc2l6ZV90IHRvIGEgcHJpbnRmLXN0eWxlIGZ1bmN0aW9uLiBUaGUgY29ycmVjdCB0eXBlIGlzIF9fa2VybmVsX3NzaXplX3QsIHdoaWNoIGlzCisgKiAiaW50Iiwgd2hpY2ggaXNuJ3QgYW4gQUJJIGNoYW5nZSBmb3IgQyBjb2RlIChiZWNhdXNlIHRoZXkncmUgdGhlIHNhbWUgc2l6ZSkgYnV0IGlzIGFuIEFCSQorICogY2hhbmdlIGZvciBDKysgYmVjYXVzZSAiaW50IiBhbmQgImxvbmcgaW50IiBtYW5nbGUgdG8gImkiIGFuZCAibCIgcmVzcGVjdGl2ZWx5LiBTbyB1bnRpbAorICogd2UgY2FuIGZpeCB0aGUgQUJJLCB0aGlzIGNoYW5nZSBzaG91bGQgbm90IGJlIHByb3BhZ2F0ZWQgdG8gdGhlIE5ESy4gaHR0cDovL2IvODI1Mzc2OS4gKi8KK3R5cGVkZWYgX19rZXJuZWxfc3NpemVfdCBzc2l6ZV90OwogI2VuZGlmCiAKIHR5cGVkZWYgX19rZXJuZWxfc3VzZWNvbmRzX3QgIHN1c2Vjb25kc190OwpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL3N5cy91bi5oIGIvbGliYy9pbmNsdWRlL3N5cy91bi5oCmluZGV4IDk3Mzg2MWYuLmY4OWVhZDMgMTAwNjQ0Ci0tLSBhL2xpYmMvaW5jbHVkZS9zeXMvdW4uaAorKysgYi9saWJjL2luY2x1ZGUvc3lzL3VuLmgKQEAgLTI4LDYgKzI4LDkgQEAKICNpZm5kZWYgX1NZU19VTl9IXwogI2RlZmluZSBfU1lTX1VOX0hfCiAKKyNpbmNsdWRlIDxzeXMvX3R5cGVzLmg+Cit0eXBlZGVmIF9fc2FfZmFtaWx5X3Qgc2FfZmFtaWx5X3Q7CisKICNpbmNsdWRlIDxsaW51eC91bi5oPgogCiAjZW5kaWYgLyogX1NZU19VTl9IXyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL3N5cy92ZnMuaCBiL2xpYmMvaW5jbHVkZS9zeXMvdmZzLmgKaW5kZXggNGFkYWY1Zi4uNmE1NWM5OSAxMDA2NDQKLS0tIGEvbGliYy9pbmNsdWRlL3N5cy92ZnMuaAorKysgYi9saWJjL2luY2x1ZGUvc3lzL3Zmcy5oCkBAIC0zNCw3ICszNCwyNCBAQAogCiBfX0JFR0lOX0RFQ0xTCiAKLS8qIG5vdGU6IHRoaXMgY29ycmVzcG9uZHMgdG8gdGhlIGtlcm5lbCdzIHN0YXRmczY0IHR5cGUgKi8KKy8qIFRoZXNlIGNvcnJlc3BvbmQgdG8gdGhlIGtlcm5lbCdzIHN0YXRmczY0IHR5cGUuICovCisjaWZkZWYgX19taXBzX18KK3N0cnVjdCBzdGF0ZnMgeworICAgIHVpbnQzMl90ICAgICAgICBmX3R5cGU7CisgICAgdWludDMyX3QgICAgICAgIGZfYnNpemU7CisgICAgdWludDMyX3QgICAgICAgIGZfZnJzaXplOworICAgIHVpbnQzMl90ICAgICAgICBfX3BhZDsKKyAgICB1aW50NjRfdCAgICAgICAgZl9ibG9ja3M7CisgICAgdWludDY0X3QgICAgICAgIGZfYmZyZWU7CisgICAgdWludDY0X3QgICAgICAgIGZfZmlsZXM7CisgICAgdWludDY0X3QgICAgICAgIGZfZmZyZWU7CisgICAgdWludDY0X3QgICAgICAgIGZfYmF2YWlsOworICAgIF9fa2VybmVsX2ZzaWRfdCBmX2ZzaWQ7CisgICAgdWludDMyX3QgICAgICAgIGZfbmFtZWxlbjsKKyAgICB1aW50MzJfdCAgICAgICAgZl9mbGFnczsKKyAgICB1aW50MzJfdCAgICAgICAgZl9zcGFyZVs1XTsKK307CisjZWxzZQogc3RydWN0IHN0YXRmcyB7CiAgICAgdWludDMyX3QgICAgICAgIGZfdHlwZTsKICAgICB1aW50MzJfdCAgICAgICAgZl9ic2l6ZTsKQEAgLTQ2LDggKzYzLDEwIEBACiAgICAgX19rZXJuZWxfZnNpZF90IGZfZnNpZDsKICAgICB1aW50MzJfdCAgICAgICAgZl9uYW1lbGVuOwogICAgIHVpbnQzMl90ICAgICAgICBmX2Zyc2l6ZTsKLSAgICB1aW50MzJfdCAgICAgICAgZl9zcGFyZVs1XTsKKyAgICB1aW50MzJfdCAgICAgICAgZl9mbGFnczsKKyAgICB1aW50MzJfdCAgICAgICAgZl9zcGFyZVs0XTsKIH07CisjZW5kaWYKIAogI2RlZmluZSAgQURGU19TVVBFUl9NQUdJQyAgICAgIDB4YWRmNQogI2RlZmluZSAgQUZGU19TVVBFUl9NQUdJQyAgICAgIDB4QURGRgpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL3N5c2xvZy5oIGIvbGliYy9pbmNsdWRlL3N5c2xvZy5oCmluZGV4IGNiOGM0OGMuLjQ2NzdjMTQgMTAwNjQ0Ci0tLSBhL2xpYmMvaW5jbHVkZS9zeXNsb2cuaAorKysgYi9saWJjL2luY2x1ZGUvc3lzbG9nLmgKQEAgLTEwMywxMyArMTAzLDEzIEBACiBleHRlcm4gdm9pZAljbG9zZWxvZyh2b2lkKTsKIGV4dGVybiB2b2lkCW9wZW5sb2coY29uc3QgY2hhciAqLCBpbnQsIGludCk7CiBleHRlcm4gaW50CXNldGxvZ21hc2soaW50KTsKLWV4dGVybiB2b2lkCXN5c2xvZyhpbnQsIGNvbnN0IGNoYXIgKiwgLi4uKTsKLWV4dGVybiB2b2lkCXZzeXNsb2coaW50LCBjb25zdCBjaGFyICosIHZhX2xpc3QpOworZXh0ZXJuIHZvaWQJc3lzbG9nKGludCwgY29uc3QgY2hhciAqLCAuLi4pIF9fcHJpbnRmbGlrZSgyLCAzKTsKK2V4dGVybiB2b2lkCXZzeXNsb2coaW50LCBjb25zdCBjaGFyICosIHZhX2xpc3QpIF9fcHJpbnRmbGlrZSgyLCAwKTsKIGV4dGVybiB2b2lkCWNsb3NlbG9nX3Ioc3RydWN0IHN5c2xvZ19kYXRhICopOwogZXh0ZXJuIHZvaWQJb3BlbmxvZ19yKGNvbnN0IGNoYXIgKiwgaW50LCBpbnQsIHN0cnVjdCBzeXNsb2dfZGF0YSAqKTsKIGV4dGVybiBpbnQJc2V0bG9nbWFza19yKGludCwgc3RydWN0IHN5c2xvZ19kYXRhICopOwotZXh0ZXJuIHZvaWQJc3lzbG9nX3IoaW50LCBzdHJ1Y3Qgc3lzbG9nX2RhdGEgKiwgY29uc3QgY2hhciAqLCAuLi4pOwotZXh0ZXJuIHZvaWQJdnN5c2xvZ19yKGludCwgc3RydWN0IHN5c2xvZ19kYXRhICosIGNvbnN0IGNoYXIgKiwgdmFfbGlzdCk7CitleHRlcm4gdm9pZAlzeXNsb2dfcihpbnQsIHN0cnVjdCBzeXNsb2dfZGF0YSAqLCBjb25zdCBjaGFyICosIC4uLikgX19wcmludGZsaWtlKDMsIDQpOworZXh0ZXJuIHZvaWQJdnN5c2xvZ19yKGludCwgc3RydWN0IHN5c2xvZ19kYXRhICosIGNvbnN0IGNoYXIgKiwgdmFfbGlzdCkgX19wcmludGZsaWtlKDMsIDApOwogCiBfX0VORF9ERUNMUwogCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvdGVybWlvcy5oIGIvbGliYy9pbmNsdWRlL3Rlcm1pb3MuaAppbmRleCBhZDE5MDg5Li4wZDQ0MzU1IDEwMDY0NAotLS0gYS9saWJjL2luY2x1ZGUvdGVybWlvcy5oCisrKyBiL2xpYmMvaW5jbHVkZS90ZXJtaW9zLmgKQEAgLTY2LDYgKzY2LDExIEBACiAgICAgcmV0dXJuIGlvY3RsKGZkLCBUQ0ZMU0gsICh2b2lkICopKGludHB0cl90KV9fcXVldWUpOwogfQogCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgdGNkcmFpbihpbnQgZmQpCit7CisgICAgcmV0dXJuIGlvY3RsKGZkLCBUQ1NCUkssICh2b2lkICopKGludHB0cl90KTEpOworfQorCiBzdGF0aWMgX19pbmxpbmVfXyBwaWRfdCB0Y2dldHNpZChpbnQgZmQpCiB7CiAgICAgcGlkX3QgX3BpZDsKZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS90aW1lLmggYi9saWJjL2luY2x1ZGUvdGltZS5oCmluZGV4IDRhZDRmN2IuLjg5OTU1ODUgMTAwNjQ0Ci0tLSBhL2xpYmMvaW5jbHVkZS90aW1lLmgKKysrIGIvbGliYy9pbmNsdWRlL3RpbWUuaApAQCAtNzksMjQgKzc5LDYgQEAKIGV4dGVybiBjaGFyKiAgICAgICBzdHJwdGltZShjb25zdCBjaGFyICpidWYsIGNvbnN0IGNoYXIgKmZtdCwgc3RydWN0IHRtICp0bSk7CiBleHRlcm4gc2l6ZV90ICAgICAgc3RyZnRpbWUoY2hhciAqcywgc2l6ZV90IG1heCwgY29uc3QgY2hhciAqZm9ybWF0LCBjb25zdCBzdHJ1Y3QgdG0gKnRtKTsKIAotLyogQU5EUk9JRC1CRUdJTiAqLwotc3RydWN0IHN0cmZ0aW1lX2xvY2FsZSB7Ci0gICAgY29uc3QgY2hhciAqICBtb25bMTJdOwotICAgIGNvbnN0IGNoYXIgKiAgbW9udGhbMTJdOwotICAgIGNvbnN0IGNoYXIgKiAgc3RhbmRhbG9uZV9tb250aFsxMl07Ci0gICAgY29uc3QgY2hhciAqICB3ZGF5WzddOwotICAgIGNvbnN0IGNoYXIgKiAgd2Vla2RheVs3XTsKLSAgICBjb25zdCBjaGFyICogIFhfZm10OwotICAgIGNvbnN0IGNoYXIgKiAgeF9mbXQ7Ci0gICAgY29uc3QgY2hhciAqICBjX2ZtdDsKLSAgICBjb25zdCBjaGFyICogIGFtOwotICAgIGNvbnN0IGNoYXIgKiAgcG07Ci0gICAgY29uc3QgY2hhciAqICBkYXRlX2ZtdDsKLX07Ci0KLWV4dGVybiBzaXplX3QgICAgICBzdHJmdGltZV90eihjaGFyICpzLCBzaXplX3QgbWF4LCBjb25zdCBjaGFyICpmb3JtYXQsIGNvbnN0IHN0cnVjdCB0bSAqdG0sIGNvbnN0IHN0cnVjdCBzdHJmdGltZV9sb2NhbGUqICBsYyk7Ci0vKiBBTkRST0lELUVORCAqLwotCiBleHRlcm4gY2hhciAqY3RpbWUoY29uc3QgdGltZV90ICp0aW1lcCk7CiBleHRlcm4gY2hhciAqY3RpbWVfcihjb25zdCB0aW1lX3QgKnRpbWVwLCBjaGFyICpidWYpOwogCkBAIC0xMTksOCArMTAxLDEyIEBACiAjZGVmaW5lIENMT0NLX01PTk9UT05JQyAgICAgICAgICAgIDEKICNkZWZpbmUgQ0xPQ0tfUFJPQ0VTU19DUFVUSU1FX0lEICAgMgogI2RlZmluZSBDTE9DS19USFJFQURfQ1BVVElNRV9JRCAgICAzCi0jZGVmaW5lIENMT0NLX1JFQUxUSU1FX0hSICAgICAgICAgIDQKLSNkZWZpbmUgQ0xPQ0tfTU9OT1RPTklDX0hSICAgICAgICAgNQorI2RlZmluZSBDTE9DS19NT05PVE9OSUNfUkFXICAgICAgICA0CisjZGVmaW5lIENMT0NLX1JFQUxUSU1FX0NPQVJTRSAgICAgIDUKKyNkZWZpbmUgQ0xPQ0tfTU9OT1RPTklDX0NPQVJTRSAgICAgNgorI2RlZmluZSBDTE9DS19CT09UVElNRSAgICAgICAgICAgICA3CisjZGVmaW5lIENMT0NLX1JFQUxUSU1FX0FMQVJNICAgICAgIDgKKyNkZWZpbmUgQ0xPQ0tfQk9PVFRJTUVfQUxBUk0gICAgICAgOQogCiBleHRlcm4gaW50ICB0aW1lcl9jcmVhdGUoaW50LCBzdHJ1Y3Qgc2lnZXZlbnQqLCB0aW1lcl90Kik7CiBleHRlcm4gaW50ICB0aW1lcl9kZWxldGUodGltZXJfdCk7CmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvdW5pc3RkLmggYi9saWJjL2luY2x1ZGUvdW5pc3RkLmgKaW5kZXggZDkyNTQ5Zi4uOTg5NzBhZSAxMDA2NDQKLS0tIGEvbGliYy9pbmNsdWRlL3VuaXN0ZC5oCisrKyBiL2xpYmMvaW5jbHVkZS91bmlzdGQuaApAQCAtMzMsNyArMzMsNiBAQAogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgogI2luY2x1ZGUgPHN5cy9zZWxlY3QuaD4KICNpbmNsdWRlIDxzeXMvc3lzY29uZi5oPgotI2luY2x1ZGUgPGxpbnV4L2NhcGFiaWxpdHkuaD4KICNpbmNsdWRlIDxwYXRoY29uZi5oPgogCiBfX0JFR0lOX0RFQ0xTCkBAIC02MCw2ICs1OSw3IEBACiBleHRlcm4gcGlkX3QgIGdldHBwaWQodm9pZCk7CiBleHRlcm4gcGlkX3QgIGdldHBncnAodm9pZCk7CiBleHRlcm4gaW50ICAgIHNldHBncnAodm9pZCk7CitleHRlcm4gcGlkX3QgIGdldHNpZChwaWRfdCk7CiBleHRlcm4gcGlkX3QgIHNldHNpZCh2b2lkKTsKIAogZXh0ZXJuIGludCBleGVjdihjb25zdCBjaGFyICosIGNoYXIgKiBjb25zdCAqKTsKQEAgLTY4LDggKzY4LDYgQEAKIGV4dGVybiBpbnQgZXhlY2woY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIC4uLik7CiBleHRlcm4gaW50IGV4ZWNscChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgLi4uKTsKIGV4dGVybiBpbnQgZXhlY2xlKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCAuLi4pOwotZXh0ZXJuIGludCBjYXBnZXQoY2FwX3VzZXJfaGVhZGVyX3QgaGRycCwgY2FwX3VzZXJfZGF0YV90IGRhdGFwKTsKLWV4dGVybiBpbnQgY2Fwc2V0KGNhcF91c2VyX2hlYWRlcl90IGhkcnAsIGNvbnN0IGNhcF91c2VyX2RhdGFfdCBkYXRhcCk7CiAKIC8qIElNUE9SVEFOVDogU2VlIGNvbW1lbnQgdW5kZXIgPHN5cy9wcmN0bC5oPiBhYm91dCB0aGlzIGRlY2xhcmF0aW9uICovCiBleHRlcm4gaW50IHByY3RsKGludCAgb3B0aW9uLCAuLi4pOwpAQCAtMTA3LDYgKzEwNSw3IEBACiAjZGVmaW5lIEZfT0sgIDAgIC8qIEV4aXN0ZW5jZSAqLwogCiBleHRlcm4gaW50IGFjY2Vzcyhjb25zdCBjaGFyICosIGludCk7CitleHRlcm4gaW50IGZhY2Nlc3NhdChpbnQsIGNvbnN0IGNoYXIgKiwgaW50LCBpbnQpOwogZXh0ZXJuIGludCBsaW5rKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKIGV4dGVybiBpbnQgdW5saW5rKGNvbnN0IGNoYXIgKik7CiBleHRlcm4gaW50IGNoZGlyKGNvbnN0IGNoYXIgKik7CkBAIC0xOTEsNyArMTkwLDYgQEAKIGV4dGVybiBpbnQgICB0Y3NldHBncnAoaW50IGZkLCBwaWRfdCBfcGlkKTsKIAogI2lmIDAgLyogTUlTU0lORyBGUk9NIEJJT05JQyAqLwotZXh0ZXJuIHBpZF90ICBnZXRzaWQocGlkX3QpOwogZXh0ZXJuIGludCBleGVjdnBlKGNvbnN0IGNoYXIgKiwgY2hhciAqIGNvbnN0ICosIGNoYXIgKiBjb25zdCAqKTsKIGV4dGVybiBpbnQgZXhlY2xwZShjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgLi4uKTsKIGV4dGVybiBpbnQgZ2V0ZnN1aWQodWlkX3QpOwpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL3djaGFyLmggYi9saWJjL2luY2x1ZGUvd2NoYXIuaAppbmRleCAxMzYxZmY1Li43NmFjMDJjIDEwMDY0NAotLS0gYS9saWJjL2luY2x1ZGUvd2NoYXIuaAorKysgYi9saWJjL2luY2x1ZGUvd2NoYXIuaApAQCAtMzEsMTYgKzMxLDExIEBACiAjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CiAjaW5jbHVkZSA8c3RkaW8uaD4KIAotLyogd2NoYXJfdCBpcyByZXF1aXJlZCBpbiBzdGRsaWIuaCBhY2NvcmRpbmcgdG8gUE9TSVggKi8KLSNkZWZpbmUgX19uZWVkX19fd2NoYXJfdAotI2luY2x1ZGUgPHN0ZGRlZi5oPgotCiAjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8c3RkZGVmLmg+CiAjaW5jbHVkZSA8dGltZS5oPgogI2luY2x1ZGUgPG1hbGxvYy5oPgogCi0jaW5jbHVkZSA8c3RkZGVmLmg+Ci0KIC8qIElNUE9SVEFOVDogQW55IGNvZGUgdGhhdCByZWxpZXMgb24gd2lkZSBjaGFyYWN0ZXIgc3VwcG9ydCBpcyBlc3NlbnRpYWxseQogICogICAgICAgICAgICBub24tcG9ydGFibGUgYW5kL29yIGJyb2tlbi4gdGhlIG9ubHkgcmVhc29uIHRoaXMgaGVhZGVyIGV4aXN0CiAgKiAgICAgICAgICAgIGlzIGJlY2F1c2UgSSdtIHJlYWxseSBhIG5pY2UgZ3V5LiBIb3dldmVyLCBJJ20gbm90IG5pY2UgZW5vdWdoCkBAIC01MCw3ICs0NSw3IEBACiAKIF9fQkVHSU5fREVDTFMKIAotdHlwZWRlZiBpbnQgICAgICAgICAgICAgICAgICAgICB3aW50X3Q7Cit0eXBlZGVmIF9fV0lOVF9UWVBFX18gICAgICAgICAgIHdpbnRfdDsKIHR5cGVkZWYgc3RydWN0IHsgaW50ICBkdW1teTsgfSAgbWJzdGF0ZV90OwogCiB0eXBlZGVmIGVudW0gewpAQCAtNzAsOCArNjUsMTEgQEAKICAgICBXQ19UWVBFX01BWAogfSB3Y3R5cGVfdDsKIAorI2lmbmRlZiBXQ0hBUl9NQVgKICNkZWZpbmUgIFdDSEFSX01BWCAgIElOVF9NQVgKICNkZWZpbmUgIFdDSEFSX01JTiAgIElOVF9NSU4KKyNlbmRpZgorCiAjZGVmaW5lICBXRU9GICAgICAgICAoKHdpbnRfdCkoLTEpKQogCiBleHRlcm4gd2ludF90ICAgICAgICAgICAgYnRvd2MoaW50KTsKQEAgLTE1NCw2ICsxNTIsMTEgQEAKIGV4dGVybiB3aW50X3QJCSB0b3djdHJhbnMod2ludF90LCB3Y3RyYW5zX3QpOwogZXh0ZXJuIHdjdHJhbnNfdAkgd2N0cmFucyAoY29uc3QgY2hhciAqKTsKIAorI2lmIF9YT1BFTl9TT1VSQ0UgPj0gNzAwIHx8IF9QT1NJWF9DX1NPVVJDRSA+PSAyMDA4MDlMCit3Y2hhcl90KiB3Y3NkdXAoY29uc3Qgd2NoYXJfdCopOworc2l6ZV90IHdjc25sZW4oY29uc3Qgd2NoYXJfdCosIHNpemVfdCk7CisjZW5kaWYKKwogX19FTkRfREVDTFMKIAogI2VuZGlmIC8qIF9XQ0hBUl9IXyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9pbmV0L2luZXRfYWRkci5jIGIvbGliYy9pbmV0L2luZXRfYWRkci5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZTQ4MGE0Li4wMDAwMDAwCi0tLSBhL2xpYmMvaW5ldC9pbmV0X2FkZHIuYworKysgL2Rldi9udWxsCkBAIC0xLDcyICswLDAgQEAKLS8qCSRPcGVuQlNEOiBpbmV0X2FkZHIuYyx2IDEuOSAyMDA1LzA4LzA2IDIwOjMwOjAzIGVzcGllIEV4cCAkCSovCi0KLS8qCi0gKiArK0NvcHlyaWdodCsrIDE5ODMsIDE5OTAsIDE5OTMKLSAqIC0KLSAqIENvcHlyaWdodCAoYykgMTk4MywgMTk5MCwgMTk5MwotICogICAgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKiAKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKiAtCi0gKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTMgYnkgRGlnaXRhbCBFcXVpcG1lbnQgQ29ycG9yYXRpb24uCi0gKiAKLSAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQotICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQKLSAqIHRoZSBuYW1lIG9mIERpZ2l0YWwgRXF1aXBtZW50IENvcnBvcmF0aW9uIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yCi0gKiBwdWJsaWNpdHkgcGVydGFpbmluZyB0byBkaXN0cmlidXRpb24gb2YgdGhlIGRvY3VtZW50IG9yIHNvZnR3YXJlIHdpdGhvdXQKLSAqIHNwZWNpZmljLCB3cml0dGVuIHByaW9yIHBlcm1pc3Npb24uCi0gKiAKLSAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBESUdJVEFMIEVRVUlQTUVOVCBDT1JQLiBESVNDTEFJTVMgQUxMCi0gKiBXQVJSQU5USUVTIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUsIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTCi0gKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuICAgSU4gTk8gRVZFTlQgU0hBTEwgRElHSVRBTCBFUVVJUE1FTlQKLSAqIENPUlBPUkFUSU9OIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUgotICogUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMKLSAqIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUwotICogU09GVFdBUkUuCi0gKiAtCi0gKiAtLUNvcHlyaWdodC0tCi0gKi8KLQotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgotI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KLSNpbmNsdWRlIDxhcnBhL2luZXQuaD4KLSNpbmNsdWRlIDxjdHlwZS5oPgotCi0vKgotICogQXNjaWkgaW50ZXJuZXQgYWRkcmVzcyBpbnRlcnByZXRhdGlvbiByb3V0aW5lLgotICogVGhlIHZhbHVlIHJldHVybmVkIGlzIGluIG5ldHdvcmsgb3JkZXIuCi0gKi8KLWluX2FkZHJfdAotaW5ldF9hZGRyKGNvbnN0IGNoYXIgKmNwKQotewotCXN0cnVjdCBpbl9hZGRyIHZhbDsKLQotCWlmIChpbmV0X2F0b24oY3AsICZ2YWwpKQotCQlyZXR1cm4gKHZhbC5zX2FkZHIpOwotCXJldHVybiAoSU5BRERSX05PTkUpOwotfQpkaWZmIC0tZ2l0IGEvbGliYy9pbmV0L2luZXRfYXRvbi5jIGIvbGliYy9pbmV0L2luZXRfYXRvbi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNDU2ZDA3Li4wMDAwMDAwCi0tLSBhL2xpYmMvaW5ldC9pbmV0X2F0b24uYworKysgL2Rldi9udWxsCkBAIC0xLDE1NyArMCwwIEBACi0vKgkkT3BlbkJTRDogaW5ldF9hZGRyLmMsdiAxLjkgMjAwNS8wOC8wNiAyMDozMDowMyBlc3BpZSBFeHAgJAkqLwotCi0vKgotICogKytDb3B5cmlnaHQrKyAxOTgzLCAxOTkwLCAxOTkzCi0gKiAtCi0gKiBDb3B5cmlnaHQgKGMpIDE5ODMsIDE5OTAsIDE5OTMKLSAqICAgIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0gKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKLSAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICogCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICogLQotICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTkzIGJ5IERpZ2l0YWwgRXF1aXBtZW50IENvcnBvcmF0aW9uLgotICogCi0gKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKLSAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0Ci0gKiB0aGUgbmFtZSBvZiBEaWdpdGFsIEVxdWlwbWVudCBDb3Jwb3JhdGlvbiBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvcgotICogcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gZGlzdHJpYnV0aW9uIG9mIHRoZSBkb2N1bWVudCBvciBzb2Z0d2FyZSB3aXRob3V0Ci0gKiBzcGVjaWZpYywgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLgotICogCi0gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgRElHSVRBTCBFUVVJUE1FTlQgQ09SUC4gRElTQ0xBSU1TIEFMTAotICogV0FSUkFOVElFUyBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFLCBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUwotICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiAgIElOIE5PIEVWRU5UIFNIQUxMIERJR0lUQUwgRVFVSVBNRU5UCi0gKiBDT1JQT1JBVElPTiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IKLSAqIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTCi0gKiBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMKLSAqIFNPRlRXQVJFLgotICogLQotICogLS1Db3B5cmlnaHQtLQotICovCi0KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KLSNpbmNsdWRlIDxuZXRpbmV0L2luLmg+Ci0jaW5jbHVkZSA8YXJwYS9pbmV0Lmg+Ci0jaW5jbHVkZSA8Y3R5cGUuaD4KLQotLyogCi0gKiBDaGVjayB3aGV0aGVyICJjcCIgaXMgYSB2YWxpZCBhc2NpaSByZXByZXNlbnRhdGlvbgotICogb2YgYW4gSW50ZXJuZXQgYWRkcmVzcyBhbmQgY29udmVydCB0byBhIGJpbmFyeSBhZGRyZXNzLgotICogUmV0dXJucyAxIGlmIHRoZSBhZGRyZXNzIGlzIHZhbGlkLCAwIGlmIG5vdC4KLSAqIFRoaXMgcmVwbGFjZXMgaW5ldF9hZGRyLCB0aGUgcmV0dXJuIHZhbHVlIGZyb20gd2hpY2gKLSAqIGNhbm5vdCBkaXN0aW5ndWlzaCBiZXR3ZWVuIGZhaWx1cmUgYW5kIGEgbG9jYWwgYnJvYWRjYXN0IGFkZHJlc3MuCi0gKi8KLWludAotaW5ldF9hdG9uKGNvbnN0IGNoYXIgKmNwLCBzdHJ1Y3QgaW5fYWRkciAqYWRkcikKLXsKLQlpbl9hZGRyX3QgdmFsOwotCWludCBiYXNlLCBuOwotCWNoYXIgYzsKLQl1X2ludCBwYXJ0c1s0XTsKLQl1X2ludCAqcHAgPSBwYXJ0czsKLQotCWMgPSAqY3A7Ci0JZm9yICg7OykgewotCQkvKgotCQkgKiBDb2xsZWN0IG51bWJlciB1cCB0byBgYC4nJy4KLQkJICogVmFsdWVzIGFyZSBzcGVjaWZpZWQgYXMgZm9yIEM6Ci0JCSAqIDB4PWhleCwgMD1vY3RhbCwgaXNkaWdpdD1kZWNpbWFsLgotCQkgKi8KLQkJaWYgKCFpc2RpZ2l0KGMpKQotCQkJcmV0dXJuICgwKTsKLQkJdmFsID0gMDsgYmFzZSA9IDEwOwotCQlpZiAoYyA9PSAnMCcpIHsKLQkJCWMgPSAqKytjcDsKLQkJCWlmIChjID09ICd4JyB8fCBjID09ICdYJykKLQkJCQliYXNlID0gMTYsIGMgPSAqKytjcDsKLQkJCWVsc2UKLQkJCQliYXNlID0gODsKLQkJfQotCQlmb3IgKDs7KSB7Ci0JCQlpZiAoaXNhc2NpaShjKSAmJiBpc2RpZ2l0KGMpKSB7Ci0JCQkJdmFsID0gKHZhbCAqIGJhc2UpICsgKGMgLSAnMCcpOwotCQkJCWMgPSAqKytjcDsKLQkJCX0gZWxzZSBpZiAoYmFzZSA9PSAxNiAmJiBpc2FzY2lpKGMpICYmIGlzeGRpZ2l0KGMpKSB7Ci0JCQkJdmFsID0gKHZhbCA8PCA0KSB8Ci0JCQkJCShjICsgMTAgLSAoaXNsb3dlcihjKSA/ICdhJyA6ICdBJykpOwotCQkJCWMgPSAqKytjcDsKLQkJCX0gZWxzZQotCQkJCWJyZWFrOwotCQl9Ci0JCWlmIChjID09ICcuJykgewotCQkJLyoKLQkJCSAqIEludGVybmV0IGZvcm1hdDoKLQkJCSAqCWEuYi5jLmQKLQkJCSAqCWEuYi5jCSh3aXRoIGMgdHJlYXRlZCBhcyAxNiBiaXRzKQotCQkJICoJYS5iCSh3aXRoIGIgdHJlYXRlZCBhcyAyNCBiaXRzKQotCQkJICovCi0JCQlpZiAocHAgPj0gcGFydHMgKyAzKQotCQkJCXJldHVybiAoMCk7Ci0JCQkqcHArKyA9IHZhbDsKLQkJCWMgPSAqKytjcDsKLQkJfSBlbHNlCi0JCQlicmVhazsKLQl9Ci0JLyoKLQkgKiBDaGVjayBmb3IgdHJhaWxpbmcgY2hhcmFjdGVycy4KLQkgKi8KLQlpZiAoYyAhPSAnXDAnICYmICghaXNhc2NpaShjKSB8fCAhaXNzcGFjZShjKSkpCi0JCXJldHVybiAoMCk7Ci0JLyoKLQkgKiBDb25jb2N0IHRoZSBhZGRyZXNzIGFjY29yZGluZyB0bwotCSAqIHRoZSBudW1iZXIgb2YgcGFydHMgc3BlY2lmaWVkLgotCSAqLwotCW4gPSBwcCAtIHBhcnRzICsgMTsKLQlzd2l0Y2ggKG4pIHsKLQotCWNhc2UgMDoKLQkJcmV0dXJuICgwKTsJCS8qIGluaXRpYWwgbm9uZGlnaXQgKi8KLQotCWNhc2UgMToJCQkJLyogYSAtLSAzMiBiaXRzICovCi0JCWJyZWFrOwotCi0JY2FzZSAyOgkJCQkvKiBhLmIgLS0gOC4yNCBiaXRzICovCi0JCWlmICgodmFsID4gMHhmZmZmZmYpIHx8IChwYXJ0c1swXSA+IDB4ZmYpKQotCQkJcmV0dXJuICgwKTsKLQkJdmFsIHw9IHBhcnRzWzBdIDw8IDI0OwotCQlicmVhazsKLQotCWNhc2UgMzoJCQkJLyogYS5iLmMgLS0gOC44LjE2IGJpdHMgKi8KLQkJaWYgKCh2YWwgPiAweGZmZmYpIHx8IChwYXJ0c1swXSA+IDB4ZmYpIHx8IChwYXJ0c1sxXSA+IDB4ZmYpKQotCQkJcmV0dXJuICgwKTsKLQkJdmFsIHw9IChwYXJ0c1swXSA8PCAyNCkgfCAocGFydHNbMV0gPDwgMTYpOwotCQlicmVhazsKLQotCWNhc2UgNDoJCQkJLyogYS5iLmMuZCAtLSA4LjguOC44IGJpdHMgKi8KLQkJaWYgKCh2YWwgPiAweGZmKSB8fCAocGFydHNbMF0gPiAweGZmKSB8fCAocGFydHNbMV0gPiAweGZmKSB8fCAocGFydHNbMl0gPiAweGZmKSkKLQkJCXJldHVybiAoMCk7Ci0JCXZhbCB8PSAocGFydHNbMF0gPDwgMjQpIHwgKHBhcnRzWzFdIDw8IDE2KSB8IChwYXJ0c1syXSA8PCA4KTsKLQkJYnJlYWs7Ci0JfQotCWlmIChhZGRyKQotCQlhZGRyLT5zX2FkZHIgPSBodG9ubCh2YWwpOwotCXJldHVybiAoMSk7Ci19CmRpZmYgLS1naXQgYS9saWJjL2luZXQvaW5ldF9udG9hLmMgYi9saWJjL2luZXQvaW5ldF9udG9hLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZmNWQ5M2QuLjAwMDAwMDAKLS0tIGEvbGliYy9pbmV0L2luZXRfbnRvYS5jCisrKyAvZGV2L251bGwKQEAgLTEsNTEgKzAsMCBAQAotLyoJJE9wZW5CU0Q6IGluZXRfbnRvYS5jLHYgMS42IDIwMDUvMDgvMDYgMjA6MzA6MDMgZXNwaWUgRXhwICQgKi8KLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDE5ODMsIDE5OTMKLSAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0vKgotICogQ29udmVydCBuZXR3b3JrLWZvcm1hdCBpbnRlcm5ldCBhZGRyZXNzCi0gKiB0byBiYXNlIDI1NiBkLmQuZC5kIHJlcHJlc2VudGF0aW9uLgotICovCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgotI2luY2x1ZGUgPGFycGEvaW5ldC5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0KLWNoYXIgKgotaW5ldF9udG9hKHN0cnVjdCBpbl9hZGRyIGluKQotewotCXN0YXRpYyBjaGFyIGJbMThdOwotCWNoYXIgKnA7Ci0KLQlwID0gKGNoYXIgKikmaW47Ci0jZGVmaW5lCVVDKGIpCSgoKGludCliKSYweGZmKQotCSh2b2lkKXNucHJpbnRmKGIsIHNpemVvZihiKSwKLQkgICAgIiV1LiV1LiV1LiV1IiwgVUMocFswXSksIFVDKHBbMV0pLCBVQyhwWzJdKSwgVUMocFszXSkpOwotCXJldHVybiAoYik7Ci19CmRpZmYgLS1naXQgYS9saWJjL2luZXQvaW5ldF9udG9wLmMgYi9saWJjL2luZXQvaW5ldF9udG9wLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3NDhkYTMuLjAwMDAwMDAKLS0tIGEvbGliYy9pbmV0L2luZXRfbnRvcC5jCisrKyAvZGV2L251bGwKQEAgLTEsMTk3ICswLDAgQEAKLS8qCSRPcGVuQlNEOiBpbmV0X250b3AuYyx2IDEuNyAyMDA1LzA4LzA2IDIwOjMwOjAzIGVzcGllIEV4cCAkCSovCi0KLS8qIENvcHlyaWdodCAoYykgMTk5NiBieSBJbnRlcm5ldCBTb2Z0d2FyZSBDb25zb3J0aXVtLgotICoKLSAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQotICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KLSAqCi0gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgSU5URVJORVQgU09GVFdBUkUgQ09OU09SVElVTSBESVNDTEFJTVMKLSAqIEFMTCBXQVJSQU5USUVTIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMKLSAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgSU5URVJORVQgU09GVFdBUkUKLSAqIENPTlNPUlRJVU0gQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SCi0gKiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUwotICogQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTCi0gKiBTT0ZUV0FSRS4KLSAqLwotCi0jaW5jbHVkZSA8c3lzL3BhcmFtLmg+Ci0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSA8c3lzL3NvY2tldC5oPgotI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KLSNpbmNsdWRlIDxhcnBhL2luZXQuaD4KLSNpbmNsdWRlICJhcnBhX25hbWVzZXIuaCIKLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxlcnJuby5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0KLS8qCi0gKiBXQVJOSU5HOiBEb24ndCBldmVuIGNvbnNpZGVyIHRyeWluZyB0byBjb21waWxlIHRoaXMgb24gYSBzeXN0ZW0gd2hlcmUKLSAqIHNpemVvZihpbnQpIDwgNC4gIHNpemVvZihpbnQpID4gNCBpcyBmaW5lOyBhbGwgdGhlIHdvcmxkJ3Mgbm90IGEgVkFYLgotICovCi0KLXN0YXRpYyBjb25zdCBjaGFyICppbmV0X250b3A0KGNvbnN0IHVfY2hhciAqc3JjLCBjaGFyICpkc3QsIHNpemVfdCBzaXplKTsKLXN0YXRpYyBjb25zdCBjaGFyICppbmV0X250b3A2KGNvbnN0IHVfY2hhciAqc3JjLCBjaGFyICpkc3QsIHNpemVfdCBzaXplKTsKLQotLyogY2hhciAqCi0gKiBpbmV0X250b3AoYWYsIHNyYywgZHN0LCBzaXplKQotICoJY29udmVydCBhIG5ldHdvcmsgZm9ybWF0IGFkZHJlc3MgdG8gcHJlc2VudGF0aW9uIGZvcm1hdC4KLSAqIHJldHVybjoKLSAqCXBvaW50ZXIgdG8gcHJlc2VudGF0aW9uIGZvcm1hdCBhZGRyZXNzIChgZHN0JyksIG9yIE5VTEwgKHNlZSBlcnJubykuCi0gKiBhdXRob3I6Ci0gKglQYXVsIFZpeGllLCAxOTk2LgotICovCi1jb25zdCBjaGFyICoKLWluZXRfbnRvcChpbnQgYWYsIGNvbnN0IHZvaWQgKnNyYywgY2hhciAqZHN0LCBzaXplX3Qgc2l6ZSkKLXsKLQlzd2l0Y2ggKGFmKSB7Ci0JY2FzZSBBRl9JTkVUOgotCQlyZXR1cm4gKGluZXRfbnRvcDQoc3JjLCBkc3QsIHNpemUpKTsKLQljYXNlIEFGX0lORVQ2OgotCQlyZXR1cm4gKGluZXRfbnRvcDYoc3JjLCBkc3QsIHNpemUpKTsKLQlkZWZhdWx0OgotCQllcnJubyA9IEVBRk5PU1VQUE9SVDsKLQkJcmV0dXJuIChOVUxMKTsKLQl9Ci0JLyogTk9UUkVBQ0hFRCAqLwotfQotCi0vKiBjb25zdCBjaGFyICoKLSAqIGluZXRfbnRvcDQoc3JjLCBkc3QsIHNpemUpCi0gKglmb3JtYXQgYW4gSVB2NCBhZGRyZXNzLCBtb3JlIG9yIGxlc3MgbGlrZSBpbmV0X250b2EoKQotICogcmV0dXJuOgotICoJYGRzdCcgKGFzIGEgY29uc3QpCi0gKiBub3RlczoKLSAqCSgxKSB1c2VzIG5vIHN0YXRpY3MKLSAqCSgyKSB0YWtlcyBhIHVfY2hhciogbm90IGFuIGluX2FkZHIgYXMgaW5wdXQKLSAqIGF1dGhvcjoKLSAqCVBhdWwgVml4aWUsIDE5OTYuCi0gKi8KLXN0YXRpYyBjb25zdCBjaGFyICoKLWluZXRfbnRvcDQoY29uc3QgdV9jaGFyICpzcmMsIGNoYXIgKmRzdCwgc2l6ZV90IHNpemUpCi17Ci0Jc3RhdGljIGNvbnN0IGNoYXIgZm10W10gPSAiJXUuJXUuJXUuJXUiOwotCWNoYXIgdG1wW3NpemVvZiAiMjU1LjI1NS4yNTUuMjU1Il07Ci0JaW50IGw7Ci0KLQlsID0gc25wcmludGYodG1wLCBzaXplLCBmbXQsIHNyY1swXSwgc3JjWzFdLCBzcmNbMl0sIHNyY1szXSk7Ci0JaWYgKGwgPD0gMCB8fCAoc2l6ZV90KWwgPj0gc2l6ZSkgewotCQllcnJubyA9IEVOT1NQQzsKLQkJcmV0dXJuIChOVUxMKTsKLQl9Ci0Jc3RybGNweShkc3QsIHRtcCwgc2l6ZSk7Ci0JcmV0dXJuIChkc3QpOwotfQotCi0vKiBjb25zdCBjaGFyICoKLSAqIGluZXRfbnRvcDYoc3JjLCBkc3QsIHNpemUpCi0gKgljb252ZXJ0IElQdjYgYmluYXJ5IGFkZHJlc3MgaW50byBwcmVzZW50YXRpb24gKHByaW50YWJsZSkgZm9ybWF0Ci0gKiBhdXRob3I6Ci0gKglQYXVsIFZpeGllLCAxOTk2LgotICovCi1zdGF0aWMgY29uc3QgY2hhciAqCi1pbmV0X250b3A2KGNvbnN0IHVfY2hhciAqc3JjLCBjaGFyICpkc3QsIHNpemVfdCBzaXplKQotewotCS8qCi0JICogTm90ZSB0aGF0IGludDMyX3QgYW5kIGludDE2X3QgbmVlZCBvbmx5IGJlICJhdCBsZWFzdCIgbGFyZ2UgZW5vdWdoCi0JICogdG8gY29udGFpbiBhIHZhbHVlIG9mIHRoZSBzcGVjaWZpZWQgc2l6ZS4gIE9uIHNvbWUgc3lzdGVtcywgbGlrZQotCSAqIENyYXlzLCB0aGVyZSBpcyBubyBzdWNoIHRoaW5nIGFzIGFuIGludGVnZXIgdmFyaWFibGUgd2l0aCAxNiBiaXRzLgotCSAqIEtlZXAgdGhpcyBpbiBtaW5kIGlmIHlvdSB0aGluayB0aGlzIGZ1bmN0aW9uIHNob3VsZCBoYXZlIGJlZW4gY29kZWQKLQkgKiB0byB1c2UgcG9pbnRlciBvdmVybGF5cy4gIEFsbCB0aGUgd29ybGQncyBub3QgYSBWQVguCi0JICovCi0JY2hhciB0bXBbc2l6ZW9mICJmZmZmOmZmZmY6ZmZmZjpmZmZmOmZmZmY6ZmZmZjoyNTUuMjU1LjI1NS4yNTUiXTsKLQljaGFyICp0cCwgKmVwOwotCXN0cnVjdCB7IGludCBiYXNlLCBsZW47IH0gYmVzdCwgY3VyOwotCXVfaW50IHdvcmRzW0lONkFERFJTWiAvIElOVDE2U1pdOwotCWludCBpOwotCWludCBhZHZhbmNlOwotCi0JLyoKLQkgKiBQcmVwcm9jZXNzOgotCSAqCUNvcHkgdGhlIGlucHV0IChieXRld2lzZSkgYXJyYXkgaW50byBhIHdvcmR3aXNlIGFycmF5LgotCSAqCUZpbmQgdGhlIGxvbmdlc3QgcnVuIG9mIDB4MDAncyBpbiBzcmNbXSBmb3IgOjogc2hvcnRoYW5kaW5nLgotCSAqLwotCW1lbXNldCh3b3JkcywgJ1wwJywgc2l6ZW9mIHdvcmRzKTsKLQlmb3IgKGkgPSAwOyBpIDwgSU42QUREUlNaOyBpKyspCi0JCXdvcmRzW2kgLyAyXSB8PSAoc3JjW2ldIDw8ICgoMSAtIChpICUgMikpIDw8IDMpKTsKLQliZXN0LmJhc2UgPSAtMTsKLQliZXN0LmxlbiAgPSAwOwotCWN1ci5iYXNlID0gLTE7Ci0JY3VyLmxlbiAgPSAwOwotCWZvciAoaSA9IDA7IGkgPCAoSU42QUREUlNaIC8gSU5UMTZTWik7IGkrKykgewotCQlpZiAod29yZHNbaV0gPT0gMCkgewotCQkJaWYgKGN1ci5iYXNlID09IC0xKQotCQkJCWN1ci5iYXNlID0gaSwgY3VyLmxlbiA9IDE7Ci0JCQllbHNlCi0JCQkJY3VyLmxlbisrOwotCQl9IGVsc2UgewotCQkJaWYgKGN1ci5iYXNlICE9IC0xKSB7Ci0JCQkJaWYgKGJlc3QuYmFzZSA9PSAtMSB8fCBjdXIubGVuID4gYmVzdC5sZW4pCi0JCQkJCWJlc3QgPSBjdXI7Ci0JCQkJY3VyLmJhc2UgPSAtMTsKLQkJCX0KLQkJfQotCX0KLQlpZiAoY3VyLmJhc2UgIT0gLTEpIHsKLQkJaWYgKGJlc3QuYmFzZSA9PSAtMSB8fCBjdXIubGVuID4gYmVzdC5sZW4pCi0JCQliZXN0ID0gY3VyOwotCX0KLQlpZiAoYmVzdC5iYXNlICE9IC0xICYmIGJlc3QubGVuIDwgMikKLQkJYmVzdC5iYXNlID0gLTE7Ci0KLQkvKgotCSAqIEZvcm1hdCB0aGUgcmVzdWx0LgotCSAqLwotCXRwID0gdG1wOwotCWVwID0gdG1wICsgc2l6ZW9mKHRtcCk7Ci0JZm9yIChpID0gMDsgaSA8IChJTjZBRERSU1ogLyBJTlQxNlNaKSAmJiB0cCA8IGVwOyBpKyspIHsKLQkJLyogQXJlIHdlIGluc2lkZSB0aGUgYmVzdCBydW4gb2YgMHgwMCdzPyAqLwotCQlpZiAoYmVzdC5iYXNlICE9IC0xICYmIGkgPj0gYmVzdC5iYXNlICYmCi0JCSAgICBpIDwgKGJlc3QuYmFzZSArIGJlc3QubGVuKSkgewotCQkJaWYgKGkgPT0gYmVzdC5iYXNlKSB7Ci0JCQkJaWYgKHRwICsgMSA+PSBlcCkKLQkJCQkJcmV0dXJuIChOVUxMKTsKLQkJCQkqdHArKyA9ICc6JzsKLQkJCX0KLQkJCWNvbnRpbnVlOwotCQl9Ci0JCS8qIEFyZSB3ZSBmb2xsb3dpbmcgYW4gaW5pdGlhbCBydW4gb2YgMHgwMHMgb3IgYW55IHJlYWwgaGV4PyAqLwotCQlpZiAoaSAhPSAwKSB7Ci0JCQlpZiAodHAgKyAxID49IGVwKQotCQkJCXJldHVybiAoTlVMTCk7Ci0JCQkqdHArKyA9ICc6JzsKLQkJfQotCQkvKiBJcyB0aGlzIGFkZHJlc3MgYW4gZW5jYXBzdWxhdGVkIElQdjQ/ICovCi0JCWlmIChpID09IDYgJiYgYmVzdC5iYXNlID09IDAgJiYKLQkJICAgIChiZXN0LmxlbiA9PSA2IHx8IChiZXN0LmxlbiA9PSA1ICYmIHdvcmRzWzVdID09IDB4ZmZmZikpKSB7Ci0JCQlpZiAoIWluZXRfbnRvcDQoc3JjKzEyLCB0cCwgKHNpemVfdCkoZXAgLSB0cCkpKQotCQkJCXJldHVybiAoTlVMTCk7Ci0JCQl0cCArPSBzdHJsZW4odHApOwotCQkJYnJlYWs7Ci0JCX0KLQkJYWR2YW5jZSA9IHNucHJpbnRmKHRwLCBlcCAtIHRwLCAiJXgiLCB3b3Jkc1tpXSk7Ci0JCWlmIChhZHZhbmNlIDw9IDAgfHwgYWR2YW5jZSA+PSBlcCAtIHRwKQotCQkJcmV0dXJuIChOVUxMKTsKLQkJdHAgKz0gYWR2YW5jZTsKLQl9Ci0JLyogV2FzIGl0IGEgdHJhaWxpbmcgcnVuIG9mIDB4MDAncz8gKi8KLQlpZiAoYmVzdC5iYXNlICE9IC0xICYmIChiZXN0LmJhc2UgKyBiZXN0LmxlbikgPT0gKElONkFERFJTWiAvIElOVDE2U1opKSB7Ci0JCWlmICh0cCArIDEgPj0gZXApCi0JCQlyZXR1cm4gKE5VTEwpOwotCQkqdHArKyA9ICc6JzsKLQl9Ci0JaWYgKHRwICsgMSA+PSBlcCkKLQkJcmV0dXJuIChOVUxMKTsKLQkqdHArKyA9ICdcMCc7Ci0KLQkvKgotCSAqIENoZWNrIGZvciBvdmVyZmxvdywgY29weSwgYW5kIHdlJ3JlIGRvbmUuCi0JICovCi0JaWYgKChzaXplX3QpKHRwIC0gdG1wKSA+IHNpemUpIHsKLQkJZXJybm8gPSBFTk9TUEM7Ci0JCXJldHVybiAoTlVMTCk7Ci0JfQotCXN0cmxjcHkoZHN0LCB0bXAsIHNpemUpOwotCXJldHVybiAoZHN0KTsKLX0KZGlmZiAtLWdpdCBhL2xpYmMvaW5ldC9pbmV0X3B0b24uYyBiL2xpYmMvaW5ldC9pbmV0X3B0b24uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmU3NGU2YS4uMDAwMDAwMAotLS0gYS9saWJjL2luZXQvaW5ldF9wdG9uLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzMTYgKzAsMCBAQAotLyoJJE5ldEJTRDogaW5ldF9wdG9uLmMsdiAxLjYuMTAuMSAyMDExLzAxLzEwIDAwOjQyOjE3IHJpeiBFeHAgJAkqLwotCi0vKgotICogQ29weXJpZ2h0IChjKSAyMDA0IGJ5IEludGVybmV0IFN5c3RlbXMgQ29uc29ydGl1bSwgSW5jLiAoIklTQyIpCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTYsMTk5OSBieSBJbnRlcm5ldCBTb2Z0d2FyZSBDb25zb3J0aXVtLgotICoKLSAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQotICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KLSAqCi0gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgSVNDIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUwotICogV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgotICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiAgSU4gTk8gRVZFTlQgU0hBTEwgSVNDIEJFIExJQUJMRSBGT1IKLSAqIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKLSAqIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgotICogQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQKLSAqIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCi0gKi8KLQotI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgotI2lmIGRlZmluZWQoTElCQ19TQ0NTKSAmJiAhZGVmaW5lZChsaW50KQotI2lmIDAKLXN0YXRpYyBjb25zdCBjaGFyIHJjc2lkW10gPSAiSWQ6IGluZXRfcHRvbi5jLHYgMS41IDIwMDUvMDcvMjggMDY6NTE6NDcgbWFya2EgRXhwIjsKLSNlbHNlCi1fX1JDU0lEKCIkTmV0QlNEOiBpbmV0X3B0b24uYyx2IDEuNi4xMC4xIDIwMTEvMDEvMTAgMDA6NDI6MTcgcml6IEV4cCAkIik7Ci0jZW5kaWYKLSNlbmRpZiAvKiBMSUJDX1NDQ1MgYW5kIG5vdCBsaW50ICovCi0KLS8vIEJFR0lOIGFuZHJvaWQtYWRkZWQKLSNkZWZpbmUgX0RJQUdBU1NFUlQoZXhwKSBhc3NlcnQoZXhwKQotI2luY2x1ZGUgIi4uL3ByaXZhdGUvYXJwYV9uYW1lc2VyLmgiCi0vLyBFTkQgYW5kcm9pZC1hZGRlZAotCi0vLyBhbmRyb2lkLXJlbW92ZWQ6ICNpbmNsdWRlICJwb3J0X2JlZm9yZS5oIgotCi0vLyBhbmRyb2lkLXJlbW92ZWQ6ICNpbmNsdWRlICJuYW1lc3BhY2UuaCIKLSNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+Ci0jaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgotI2luY2x1ZGUgPGFycGEvaW5ldC5oPgotI2luY2x1ZGUgPGFycGEvbmFtZXNlci5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPGFzc2VydC5oPgotI2luY2x1ZGUgPGN0eXBlLmg+Ci0jaW5jbHVkZSA8ZXJybm8uaD4KLQotLy8gYW5kcm9pZC1yZW1vdmVkOiAjaW5jbHVkZSAicG9ydF9hZnRlci5oIgotCi0vLyBCRUdJTiBhbmRyb2lkLXJlbW92ZWQKLS8vICNpZmRlZiBfX3dlYWtfYWxpYXMKLS8vIF9fd2Vha19hbGlhcyhpbmV0X3B0b24sX2luZXRfcHRvbikKLS8vICNlbmRpZgotLy8gRU5EIGFuZHJvaWQtcmVtb3ZlZAotCi0vKiUKLSAqIFdBUk5JTkc6IERvbid0IGV2ZW4gY29uc2lkZXIgdHJ5aW5nIHRvIGNvbXBpbGUgdGhpcyBvbiBhIHN5c3RlbSB3aGVyZQotICogc2l6ZW9mKGludCkgPCA0LiAgc2l6ZW9mKGludCkgPiA0IGlzIGZpbmU7IGFsbCB0aGUgd29ybGQncyBub3QgYSBWQVguCi0gKi8KLQotc3RhdGljIGludAlpbmV0X3B0b240KGNvbnN0IGNoYXIgKnNyYywgdV9jaGFyICpkc3QsIGludCBwdG9uKTsKLXN0YXRpYyBpbnQJaW5ldF9wdG9uNihjb25zdCBjaGFyICpzcmMsIHVfY2hhciAqZHN0KTsKLQotLyogaW50Ci0gKiBpbmV0X3B0b24oYWYsIHNyYywgZHN0KQotICoJY29udmVydCBmcm9tIHByZXNlbnRhdGlvbiBmb3JtYXQgKHdoaWNoIHVzdWFsbHkgbWVhbnMgQVNDSUkgcHJpbnRhYmxlKQotICoJdG8gbmV0d29yayBmb3JtYXQgKHdoaWNoIGlzIHVzdWFsbHkgc29tZSBraW5kIG9mIGJpbmFyeSBmb3JtYXQpLgotICogcmV0dXJuOgotICoJMSBpZiB0aGUgYWRkcmVzcyB3YXMgdmFsaWQgZm9yIHRoZSBzcGVjaWZpZWQgYWRkcmVzcyBmYW1pbHkKLSAqCTAgaWYgdGhlIGFkZHJlc3Mgd2Fzbid0IHZhbGlkIChgZHN0JyBpcyB1bnRvdWNoZWQgaW4gdGhpcyBjYXNlKQotICoJLTEgaWYgc29tZSBvdGhlciBlcnJvciBvY2N1cnJlZCAoYGRzdCcgaXMgdW50b3VjaGVkIGluIHRoaXMgY2FzZSwgdG9vKQotICogYXV0aG9yOgotICoJUGF1bCBWaXhpZSwgMTk5Ni4KLSAqLwotaW50Ci1pbmV0X3B0b24oaW50IGFmLCBjb25zdCBjaGFyICpzcmMsIHZvaWQgKmRzdCkKLXsKLQotCV9ESUFHQVNTRVJUKHNyYyAhPSBOVUxMKTsKLQlfRElBR0FTU0VSVChkc3QgIT0gTlVMTCk7Ci0KLQlzd2l0Y2ggKGFmKSB7Ci0JY2FzZSBBRl9JTkVUOgotCQlyZXR1cm4gKGluZXRfcHRvbjQoc3JjLCBkc3QsIDEpKTsKLQljYXNlIEFGX0lORVQ2OgotCQlyZXR1cm4gKGluZXRfcHRvbjYoc3JjLCBkc3QpKTsKLQlkZWZhdWx0OgotCQllcnJubyA9IEVBRk5PU1VQUE9SVDsKLQkJcmV0dXJuICgtMSk7Ci0JfQotCS8qIE5PVFJFQUNIRUQgKi8KLX0KLQotLyogaW50Ci0gKiBpbmV0X3B0b240KHNyYywgZHN0LCBwdG9uKQotICoJd2hlbiBsYXN0IGFyZyBpcyAwOiBpbmV0X2F0b24oKS4gd2l0aCBoZXhhZGVjaW1hbCwgb2N0YWwgYW5kIHNob3J0aGFuZC4KLSAqCXdoZW4gbGFzdCBhcmcgaXMgMTogaW5ldF9wdG9uKCkuIGRlY2ltYWwgZG90dGVkLXF1YWQgb25seS4KLSAqIHJldHVybjoKLSAqCTEgaWYgYHNyYycgaXMgYSB2YWxpZCBpbnB1dCwgZWxzZSAwLgotICogbm90aWNlOgotICoJZG9lcyBub3QgdG91Y2ggYGRzdCcgdW5sZXNzIGl0J3MgcmV0dXJuaW5nIDEuCi0gKiBhdXRob3I6Ci0gKglQYXVsIFZpeGllLCAxOTk2LgotICovCi1zdGF0aWMgaW50Ci1pbmV0X3B0b240KGNvbnN0IGNoYXIgKnNyYywgdV9jaGFyICpkc3QsIGludCBwdG9uKQotewotCXVfaW50MzJfdCB2YWw7Ci0JdV9pbnQgZGlnaXQsIGJhc2U7Ci0JaW50IG47Ci0JdW5zaWduZWQgY2hhciBjOwotCXVfaW50IHBhcnRzWzRdOwotCXJlZ2lzdGVyIHVfaW50ICpwcCA9IHBhcnRzOwotCi0JX0RJQUdBU1NFUlQoc3JjICE9IE5VTEwpOwotCV9ESUFHQVNTRVJUKGRzdCAhPSBOVUxMKTsKLQotCWMgPSAqc3JjOwotCWZvciAoOzspIHsKLQkJLyoKLQkJICogQ29sbGVjdCBudW1iZXIgdXAgdG8gYGAuJycuCi0JCSAqIFZhbHVlcyBhcmUgc3BlY2lmaWVkIGFzIGZvciBDOgotCQkgKiAweD1oZXgsIDA9b2N0YWwsIGlzZGlnaXQ9ZGVjaW1hbC4KLQkJICovCi0JCWlmICghaXNkaWdpdChjKSkKLQkJCXJldHVybiAoMCk7Ci0JCXZhbCA9IDA7IGJhc2UgPSAxMDsKLQkJaWYgKGMgPT0gJzAnKSB7Ci0JCQljID0gKisrc3JjOwotCQkJaWYgKGMgPT0gJ3gnIHx8IGMgPT0gJ1gnKQotCQkJCWJhc2UgPSAxNiwgYyA9ICorK3NyYzsKLQkJCWVsc2UgaWYgKGlzZGlnaXQoYykgJiYgYyAhPSAnOScpCi0JCQkJYmFzZSA9IDg7Ci0JCX0KLQkJLyogaW5ldF9wdG9uKCkgdGFrZXMgZGVjaW1hbCBvbmx5ICovCi0JCWlmIChwdG9uICYmIGJhc2UgIT0gMTApCi0JCQlyZXR1cm4gKDApOwotCQlmb3IgKDs7KSB7Ci0JCQlpZiAoaXNkaWdpdChjKSkgewotCQkJCWRpZ2l0ID0gYyAtICcwJzsKLQkJCQlpZiAoZGlnaXQgPj0gYmFzZSkKLQkJCQkJYnJlYWs7Ci0JCQkJdmFsID0gKHZhbCAqIGJhc2UpICsgZGlnaXQ7Ci0JCQkJYyA9ICorK3NyYzsKLQkJCX0gZWxzZSBpZiAoYmFzZSA9PSAxNiAmJiBpc3hkaWdpdChjKSkgewotCQkJCWRpZ2l0ID0gYyArIDEwIC0gKGlzbG93ZXIoYykgPyAnYScgOiAnQScpOwotCQkJCWlmIChkaWdpdCA+PSAxNikKLQkJCQkJYnJlYWs7Ci0JCQkJdmFsID0gKHZhbCA8PCA0KSB8IGRpZ2l0OwotCQkJCWMgPSAqKytzcmM7Ci0JCQl9IGVsc2UKLQkJCQlicmVhazsKLQkJfQotCQlpZiAoYyA9PSAnLicpIHsKLQkJCS8qCi0JCQkgKiBJbnRlcm5ldCBmb3JtYXQ6Ci0JCQkgKglhLmIuYy5kCi0JCQkgKglhLmIuYwkod2l0aCBjIHRyZWF0ZWQgYXMgMTYgYml0cykKLQkJCSAqCWEuYgkod2l0aCBiIHRyZWF0ZWQgYXMgMjQgYml0cykKLQkJCSAqCWEJKHdpdGggYSB0cmVhdGVkIGFzIDMyIGJpdHMpCi0JCQkgKi8KLQkJCWlmIChwcCA+PSBwYXJ0cyArIDMpCi0JCQkJcmV0dXJuICgwKTsKLQkJCSpwcCsrID0gdmFsOwotCQkJYyA9ICorK3NyYzsKLQkJfSBlbHNlCi0JCQlicmVhazsKLQl9Ci0JLyoKLQkgKiBDaGVjayBmb3IgdHJhaWxpbmcgY2hhcmFjdGVycy4KLQkgKi8KLQlpZiAoYyAhPSAnXDAnICYmICFpc3NwYWNlKGMpKQotCQlyZXR1cm4gKDApOwotCS8qCi0JICogQ29uY29jdCB0aGUgYWRkcmVzcyBhY2NvcmRpbmcgdG8KLQkgKiB0aGUgbnVtYmVyIG9mIHBhcnRzIHNwZWNpZmllZC4KLQkgKi8KLQluID0gcHAgLSBwYXJ0cyArIDE7Ci0JLyogaW5ldF9wdG9uKCkgdGFrZXMgZG90dGVkLXF1YWQgb25seS4gIGl0IGRvZXMgbm90IHRha2Ugc2hvcnRoYW5kLiAqLwotCWlmIChwdG9uICYmIG4gIT0gNCkKLQkJcmV0dXJuICgwKTsKLQlzd2l0Y2ggKG4pIHsKLQotCWNhc2UgMDoKLQkJcmV0dXJuICgwKTsJCS8qIGluaXRpYWwgbm9uZGlnaXQgKi8KLQotCWNhc2UgMToJCQkJLyogYSAtLSAzMiBiaXRzICovCi0JCWJyZWFrOwotCi0JY2FzZSAyOgkJCQkvKiBhLmIgLS0gOC4yNCBiaXRzICovCi0JCWlmIChwYXJ0c1swXSA+IDB4ZmYgfHwgdmFsID4gMHhmZmZmZmYpCi0JCQlyZXR1cm4gKDApOwotCQl2YWwgfD0gcGFydHNbMF0gPDwgMjQ7Ci0JCWJyZWFrOwotCi0JY2FzZSAzOgkJCQkvKiBhLmIuYyAtLSA4LjguMTYgYml0cyAqLwotCQlpZiAoKHBhcnRzWzBdIHwgcGFydHNbMV0pID4gMHhmZiB8fCB2YWwgPiAweGZmZmYpCi0JCQlyZXR1cm4gKDApOwotCQl2YWwgfD0gKHBhcnRzWzBdIDw8IDI0KSB8IChwYXJ0c1sxXSA8PCAxNik7Ci0JCWJyZWFrOwotCi0JY2FzZSA0OgkJCQkvKiBhLmIuYy5kIC0tIDguOC44LjggYml0cyAqLwotCQlpZiAoKHBhcnRzWzBdIHwgcGFydHNbMV0gfCBwYXJ0c1syXSB8IHZhbCkgPiAweGZmKQotCQkJcmV0dXJuICgwKTsKLQkJdmFsIHw9IChwYXJ0c1swXSA8PCAyNCkgfCAocGFydHNbMV0gPDwgMTYpIHwgKHBhcnRzWzJdIDw8IDgpOwotCQlicmVhazsKLQl9Ci0JaWYgKGRzdCkgewotCQl2YWwgPSBodG9ubCh2YWwpOwotCQltZW1jcHkoZHN0LCAmdmFsLCBOU19JTkFERFJTWik7Ci0JfQotCXJldHVybiAoMSk7Ci19Ci0KLS8qIGludAotICogaW5ldF9wdG9uNihzcmMsIGRzdCkKLSAqCWNvbnZlcnQgcHJlc2VudGF0aW9uIGxldmVsIGFkZHJlc3MgdG8gbmV0d29yayBvcmRlciBiaW5hcnkgZm9ybS4KLSAqIHJldHVybjoKLSAqCTEgaWYgYHNyYycgaXMgYSB2YWxpZCBbUkZDMTg4NCAyLjJdIGFkZHJlc3MsIGVsc2UgMC4KLSAqIG5vdGljZToKLSAqCSgxKSBkb2VzIG5vdCB0b3VjaCBgZHN0JyB1bmxlc3MgaXQncyByZXR1cm5pbmcgMS4KLSAqCSgyKSA6OiBpbiBhIGZ1bGwgYWRkcmVzcyBpcyBzaWxlbnRseSBpZ25vcmVkLgotICogY3JlZGl0OgotICoJaW5zcGlyZWQgYnkgTWFyayBBbmRyZXdzLgotICogYXV0aG9yOgotICoJUGF1bCBWaXhpZSwgMTk5Ni4KLSAqLwotc3RhdGljIGludAotaW5ldF9wdG9uNihjb25zdCBjaGFyICpzcmMsIHVfY2hhciAqZHN0KQotewotCXN0YXRpYyBjb25zdCBjaGFyIHhkaWdpdHNfbFtdID0gIjAxMjM0NTY3ODlhYmNkZWYiLAotCQkJICB4ZGlnaXRzX3VbXSA9ICIwMTIzNDU2Nzg5QUJDREVGIjsKLQl1X2NoYXIgdG1wW05TX0lONkFERFJTWl0sICp0cCwgKmVuZHAsICpjb2xvbnA7Ci0JY29uc3QgY2hhciAqeGRpZ2l0cywgKmN1cnRvazsKLQlpbnQgY2gsIHNlZW5feGRpZ2l0czsKLQl1X2ludCB2YWw7Ci0KLQlfRElBR0FTU0VSVChzcmMgIT0gTlVMTCk7Ci0JX0RJQUdBU1NFUlQoZHN0ICE9IE5VTEwpOwotCi0JbWVtc2V0KCh0cCA9IHRtcCksICdcMCcsIE5TX0lONkFERFJTWik7Ci0JZW5kcCA9IHRwICsgTlNfSU42QUREUlNaOwotCWNvbG9ucCA9IE5VTEw7Ci0JLyogTGVhZGluZyA6OiByZXF1aXJlcyBzb21lIHNwZWNpYWwgaGFuZGxpbmcuICovCi0JaWYgKCpzcmMgPT0gJzonKQotCQlpZiAoKisrc3JjICE9ICc6JykKLQkJCXJldHVybiAoMCk7Ci0JY3VydG9rID0gc3JjOwotCXNlZW5feGRpZ2l0cyA9IDA7Ci0JdmFsID0gMDsKLQl3aGlsZSAoKGNoID0gKnNyYysrKSAhPSAnXDAnKSB7Ci0JCWNvbnN0IGNoYXIgKnBjaDsKLQotCQlpZiAoKHBjaCA9IHN0cmNocigoeGRpZ2l0cyA9IHhkaWdpdHNfbCksIGNoKSkgPT0gTlVMTCkKLQkJCXBjaCA9IHN0cmNocigoeGRpZ2l0cyA9IHhkaWdpdHNfdSksIGNoKTsKLQkJaWYgKHBjaCAhPSBOVUxMKSB7Ci0JCQl2YWwgPDw9IDQ7Ci0JCQl2YWwgfD0gKHBjaCAtIHhkaWdpdHMpOwotCQkJaWYgKCsrc2Vlbl94ZGlnaXRzID4gNCkKLQkJCQlyZXR1cm4gKDApOwotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKGNoID09ICc6JykgewotCQkJY3VydG9rID0gc3JjOwotCQkJaWYgKCFzZWVuX3hkaWdpdHMpIHsKLQkJCQlpZiAoY29sb25wKQotCQkJCQlyZXR1cm4gKDApOwotCQkJCWNvbG9ucCA9IHRwOwotCQkJCWNvbnRpbnVlOwotCQkJfSBlbHNlIGlmICgqc3JjID09ICdcMCcpCi0JCQkJcmV0dXJuICgwKTsKLQkJCWlmICh0cCArIE5TX0lOVDE2U1ogPiBlbmRwKQotCQkJCXJldHVybiAoMCk7Ci0JCQkqdHArKyA9ICh1X2NoYXIpICh2YWwgPj4gOCkgJiAweGZmOwotCQkJKnRwKysgPSAodV9jaGFyKSB2YWwgJiAweGZmOwotCQkJc2Vlbl94ZGlnaXRzID0gMDsKLQkJCXZhbCA9IDA7Ci0JCQljb250aW51ZTsKLQkJfQotCQlpZiAoY2ggPT0gJy4nICYmICgodHAgKyBOU19JTkFERFJTWikgPD0gZW5kcCkgJiYKLQkJICAgIGluZXRfcHRvbjQoY3VydG9rLCB0cCwgMSkgPiAwKSB7Ci0JCQl0cCArPSBOU19JTkFERFJTWjsKLQkJCXNlZW5feGRpZ2l0cyA9IDA7Ci0JCQlicmVhazsJLyolPCAnXFwwJyB3YXMgc2VlbiBieSBpbmV0X3B0b240KCkuICovCi0JCX0KLQkJcmV0dXJuICgwKTsKLQl9Ci0JaWYgKHNlZW5feGRpZ2l0cykgewotCQlpZiAodHAgKyBOU19JTlQxNlNaID4gZW5kcCkKLQkJCXJldHVybiAoMCk7Ci0JCSp0cCsrID0gKHVfY2hhcikgKHZhbCA+PiA4KSAmIDB4ZmY7Ci0JCSp0cCsrID0gKHVfY2hhcikgdmFsICYgMHhmZjsKLQl9Ci0JaWYgKGNvbG9ucCAhPSBOVUxMKSB7Ci0JCS8qCi0JCSAqIFNpbmNlIHNvbWUgbWVtbW92ZSgpJ3MgZXJyb25lb3VzbHkgZmFpbCB0byBoYW5kbGUKLQkJICogb3ZlcmxhcHBpbmcgcmVnaW9ucywgd2UnbGwgZG8gdGhlIHNoaWZ0IGJ5IGhhbmQuCi0JCSAqLwotCQljb25zdCBpbnQgbiA9IHRwIC0gY29sb25wOwotCQlpbnQgaTsKLQotCQlpZiAodHAgPT0gZW5kcCkKLQkJCXJldHVybiAoMCk7Ci0JCWZvciAoaSA9IDE7IGkgPD0gbjsgaSsrKSB7Ci0JCQllbmRwWy0gaV0gPSBjb2xvbnBbbiAtIGldOwotCQkJY29sb25wW24gLSBpXSA9IDA7Ci0JCX0KLQkJdHAgPSBlbmRwOwotCX0KLQlpZiAodHAgIT0gZW5kcCkKLQkJcmV0dXJuICgwKTsKLQltZW1jcHkoZHN0LCB0bXAsIE5TX0lONkFERFJTWik7Ci0JcmV0dXJuICgxKTsKLX0KLQotLyohIFxmaWxlICovCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9SRUFETUUuVFhUIGIvbGliYy9rZXJuZWwvUkVBRE1FLlRYVAppbmRleCA3NmRmYTRkLi43ZDI0ZmU5IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9SRUFETUUuVFhUCisrKyBiL2xpYmMva2VybmVsL1JFQURNRS5UWFQKQEAgLTE3LDI2ICsxNywyNyBAQAogCiB0aGUgZ2VuZXJhdGlvbiBwcm9jZXNzIHdvcmtzIGFzIGZvbGxvd3M6CiAKLSAgKiAnYmlvbmljL2tlcm5lbC9vcmlnaW5hbC8nCisgICogJ2V4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLycKICAgICBjb250YWlucyBhIHNldCBvZiBrZXJuZWwgaGVhZGVycyBhcyBub3JtYWxseSBmb3VuZCBpbiB0aGUgJ2luY2x1ZGUnCiAgICAgZGlyZWN0b3J5IG9mIGEgbm9ybWFsIExpbnV4IGtlcm5lbCBzb3VyY2UgdHJlZS4gbm90ZSB0aGF0IHRoaXMgc2hvdWxkCiAgICAgb25seSBjb250YWluIHRoZSBmaWxlcyB0aGF0IGFyZSByZWFsbHkgbmVlZGVkIGJ5IEFuZHJvaWQgKHVzZQogICAgICdmaW5kX2hlYWRlcnMucHknIHRvIGZpbmQgdGhlc2UgYXV0b21hdGljYWxseSkuCiAKLSAgKiAnYmlvbmljL2tlcm5lbC9jb21tb24nCisgICogJ2Jpb25pYy9saWJjL2tlcm5lbC9jb21tb24nCiAgICAgY29udGFpbnMgdGhlIG5vbi1hcmNoLXNwZWNpZmljIGNsZWFuIGhlYWRlcnMgYW5kIGRpcmVjdG9yaWVzCiAgICAgKGUuZy4gbGludXgsIGFzbS1nZW5lcmljIGFuZCBtdGQpCiAKLSAgKidiaW9uaWMva2VybmVsL2FyY2gtYXJtLycKKyAgKiAnYmlvbmljL2xpYmMva2VybmVsL2FyY2gtYXJtLycKICAgICBjb250YWlucyB0aGUgQVJNLXNwZWNpZmljIGRpcmVjdG9yeSB0cmVlIG9mIGNsZWFuIGhlYWRlcnMuCiAKLSAgKiAnYmlvbmljL2tlcm5lbC9hcmNoLWFybS9hc20nCisgICogJ2Jpb25pYy9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20nCiAgICAgY29udGFpbnMgdGhlIHJlYWwgQVJNLXNwZWNpZmljIGhlYWRlcnMKIAotICAqICdiaW9uaWMva2VybmVsL2FyY2gteDg2JworICAqICdiaW9uaWMvbGliYy9rZXJuZWwvYXJjaC14ODYnCisgICAgJ2Jpb25pYy9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20nCiAgICAgc2ltaWxhcmx5IGNvbnRhaW5zIGFsbCBoZWFkZXJzIGFuZCBzeW1saW5rcyB0byBiZSB1c2VkIG9uIHg4NgogCi0gICogJ2Jpb25pYy9rZXJuZWwvdG9vbHMnIGNvbnRhaW5zIHZhcmlvdXMgUHl0aG9uIGFuZCBzaGVsbCBzY3JpcHRzIHVzZWQKKyAgKiAnYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzJyBjb250YWlucyB2YXJpb3VzIFB5dGhvbiBhbmQgc2hlbGwgc2NyaXB0cyB1c2VkCiAgICAgdG8gbWFuYWdlIGFuZCByZS1nZW5lcmF0ZSB0aGUgaGVhZGVycwogCiB0aGUgdG9vbHMgeW91IGNhbiB1c2UgYXJlOgpAQCAtNTYsMTYgKzU3LDkgQEAKIAogICAqIHRvb2xzL3VwZGF0ZV9hbGwucHkKICAgICBhdXRvbWF0aWNhbGx5IHVwZGF0ZSBhbGwgY2xlYW4gaGVhZGVycyBmcm9tIHRoZSBjb250ZW50IG9mIAotICAgICdiaW9uaWMva2VybmVsL29yaWdpbmFsJy4gdGhpcyBpcyB0aGUgc2NyaXB0IHlvdSdyZSBsaWtlbHkgZ29pbmcgdG8gCisgICAgJ2V4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsJy4gdGhpcyBpcyB0aGUgc2NyaXB0IHlvdSdyZSBsaWtlbHkgZ29pbmcgdG8KICAgICBydW4gd2hlbmV2ZXIgeW91IHVwZGF0ZSB0aGUgb3JpZ2luYWwgaGVhZGVycy4KIAotTk9URToKLSAgaWYgQU5EUk9JRF9QUk9EVUNUX09VVCBpcyBkZWZpbmVkIGluIHlvdXIgZW52aXJvbm1lbnQsIGJvdGggJ2NsZWFuX2hlYWRlci5weScKLSAgYW5kICd1cGRhdGVfYWxsLnB5JyB3aWxsIGF1dG9tYXRpY2FsbHkgaXNzdWUgInA0IGFkZC9lZGl0L2RlbGV0ZSIgY29tbWFuZHMKLSAgYXBwcm9wcmlhdGVseSB0byByZWZsZWN0IHRoZSBjaGFuZ2VzIGJlaW5nIG1hZGUuCi0KLSAgeW91IHdpbGwgbmVlZCB0byAicDQgc3VibWl0IiBtYW51YWxseSB0aG91Z2guLi4KLQogCiBIT1cgVE8gQlVJTEQgQklPTklDIEFORCBPVEhFUiBQUk9HUkFNUyBXSVRIIFRIRSBDTEVBTiBIRUFERVJTOgogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9hLm91dC5oIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2Eub3V0LmgKaW5kZXggZThmMTdkYy4uNzM5NzdlYyAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2Eub3V0LmgKKysrIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2Eub3V0LmgKQEAgLTcsMzYgKzcsNDIgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9fQVJNX0FfT1VUX0hfXwogI2RlZmluZSBfX0FSTV9BX09VVF9IX18KLQogI2luY2x1ZGUgPGxpbnV4L3BlcnNvbmFsaXR5Lmg+CiAjaW5jbHVkZSA8YXNtL3R5cGVzLmg+Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgZXhlYwogewogIF9fdTMyIGFfaW5mbzsKICBfX3UzMiBhX3RleHQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGFfZGF0YTsKICBfX3UzMiBhX2JzczsKICBfX3UzMiBhX3N5bXM7CiAgX191MzIgYV9lbnRyeTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgYV90cnNpemU7CiAgX191MzIgYV9kcnNpemU7CiB9OwotCiAjZGVmaW5lIE5fVFhUQUREUihhKSAoMHgwMDAwODAwMCkKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTl9UUlNJWkUoYSkgKChhKS5hX3Ryc2l6ZSkKICNkZWZpbmUgTl9EUlNJWkUoYSkgKChhKS5hX2Ryc2l6ZSkKICNkZWZpbmUgTl9TWU1TSVpFKGEpICgoYSkuYV9zeW1zKQotCiAjZGVmaW5lIE1fQVJNIDEwMwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2lmbmRlZiBMSUJSQVJZX1NUQVJUX1RFWFQKICNkZWZpbmUgTElCUkFSWV9TVEFSVF9URVhUICgweDAwYzAwMDAwKQogI2VuZGlmCi0KICNlbmRpZgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9hcmNoL2JvYXJkLXBlcnNldXMyLmggYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vYXJjaC9ib2FyZC1wZXJzZXVzMi5oCmluZGV4IGM2YzU0MTMuLmJjMGFiMjMgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9hcmNoL2JvYXJkLXBlcnNldXMyLmgKKysrIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2FyY2gvYm9hcmQtcGVyc2V1czIuaApAQCAtNywyMSArNywyNSBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX19BU01fQVJDSF9PTUFQX1BFUlNFVVMyX0gKICNkZWZpbmUgX19BU01fQVJDSF9PTUFQX1BFUlNFVVMyX0gKLQogI2luY2x1ZGUgPGFzbS9hcmNoL2ZwZ2EuaD4KLQogI2lmbmRlZiBPTUFQX1NEUkFNX0RFVklDRQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgT01BUF9TRFJBTV9ERVZJQ0UgRDI1Nk1fMVgxNl80QgogI2VuZGlmCi0KICNkZWZpbmUgTUFYSVJRTlVNIElIX0JPQVJEX0JBU0UKICNkZWZpbmUgTUFYRklRTlVNIE1BWElSUU5VTQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTUFYU1dJTlVNIE1BWElSUU5VTQotCiAjZGVmaW5lIE5SX0lSUVMgKE1BWElSUU5VTSArIDEpCi0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2FyY2gvYm9hcmQuaCBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9hcmNoL2JvYXJkLmgKaW5kZXggYTdhNGM2Ni4uNzhmYTRiMCAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2FyY2gvYm9hcmQuaAorKysgYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vYXJjaC9ib2FyZC5oCkBAIC03LDE1NyArNywxNTkgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9PTUFQX0JPQVJEX0gKICNkZWZpbmUgX09NQVBfQk9BUkRfSAotCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLQogI2luY2x1ZGUgPGFzbS9hcmNoL2dwaW8tc3dpdGNoLmg+Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE9NQVBfVEFHX0NMT0NLIDB4NGYwMQogI2RlZmluZSBPTUFQX1RBR19NTUMgMHg0ZjAyCiAjZGVmaW5lIE9NQVBfVEFHX1NFUklBTF9DT05TT0xFIDB4NGYwMwogI2RlZmluZSBPTUFQX1RBR19VU0IgMHg0ZjA0CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBPTUFQX1RBR19MQ0QgMHg0ZjA1CiAjZGVmaW5lIE9NQVBfVEFHX0dQSU9fU1dJVENIIDB4NGYwNgogI2RlZmluZSBPTUFQX1RBR19VQVJUIDB4NGYwNwogI2RlZmluZSBPTUFQX1RBR19GQk1FTSAweDRmMDgKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE9NQVBfVEFHX1NUSV9DT05TT0xFIDB4NGYwOQogI2RlZmluZSBPTUFQX1RBR19DQU1FUkFfU0VOU09SIDB4NGYwYQogI2RlZmluZSBPTUFQX1RBR19CVCAweDRmMGIKLQogI2RlZmluZSBPTUFQX1RBR19CT09UX1JFQVNPTiAweDRmODAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE9NQVBfVEFHX0ZMQVNIX1BBUlQgMHg0ZjgxCiAjZGVmaW5lIE9NQVBfVEFHX1ZFUlNJT05fU1RSIDB4NGY4MgotCiBzdHJ1Y3Qgb21hcF9jbG9ja19jb25maWcgewotCiAgdTggc3lzdGVtX2Nsb2NrX3R5cGU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKLQogc3RydWN0IG9tYXBfbW1jX2NvbmYgewogIHVuc2lnbmVkIGVuYWJsZWQ6MTsKLQogIHVuc2lnbmVkIG5vbXV4OjE7Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgY292ZXI6MTsKLQogIHVuc2lnbmVkIHdpcmU0OjE7CiAgczE2IHBvd2VyX3BpbjsKICBzMTYgc3dpdGNoX3BpbjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgczE2IHdwX3BpbjsKIH07Ci0KIHN0cnVjdCBvbWFwX21tY19jb25maWcgewogIHN0cnVjdCBvbWFwX21tY19jb25mIG1tY1syXTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwotCiBzdHJ1Y3Qgb21hcF9zZXJpYWxfY29uc29sZV9jb25maWcgewogIHU4IGNvbnNvbGVfdWFydDsKICB1MzIgY29uc29sZV9zcGVlZDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwotCiBzdHJ1Y3Qgb21hcF9zdGlfY29uc29sZV9jb25maWcgewogIHVuc2lnbmVkIGVuYWJsZToxOwogIHU4IGNoYW5uZWw7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKLQogc3RydWN0IG9tYXBfY2FtZXJhX3NlbnNvcl9jb25maWcgewogIHUxNiByZXNldF9ncGlvOwogIGludCAoKnBvd2VyX29uKSh2b2lkICogZGF0YSk7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGludCAoKnBvd2VyX29mZikodm9pZCAqIGRhdGEpOwogfTsKLQogc3RydWN0IG9tYXBfdXNiX2NvbmZpZyB7Ci0KICB1bnNpZ25lZCByZWdpc3Rlcl9ob3N0OjE7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIHJlZ2lzdGVyX2RldjoxOwogIHU4IG90ZzsKLQogIHU4IGhtY19tb2RlOwotCiAgdTggcndjOwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHU4IHBpbnNbM107CiB9OwotCiBzdHJ1Y3Qgb21hcF9sY2RfY29uZmlnIHsKICBjaGFyIHBhbmVsX25hbWVbMTZdOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBjaGFyIGN0cmxfbmFtZVsxNl07CiAgczE2IG5yZXNldF9ncGlvOwogIHU4IGRhdGFfbGluZXM7CiB9OwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IGRldmljZTsKIHN0cnVjdCBmYl9pbmZvOwogc3RydWN0IG9tYXBfYmFja2xpZ2h0X2NvbmZpZyB7CiAgaW50IGRlZmF1bHRfaW50ZW5zaXR5OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBpbnQgKCpzZXRfcG93ZXIpKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHN0YXRlKTsKICBpbnQgKCpjaGVja19mYikoc3RydWN0IGZiX2luZm8gKmZiKTsKIH07Ci0KIHN0cnVjdCBvbWFwX2ZibWVtX2NvbmZpZyB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHUzMiBzdGFydDsKICB1MzIgc2l6ZTsKIH07Ci0KIHN0cnVjdCBvbWFwX3B3bV9sZWRfcGxhdGZvcm1fZGF0YSB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGNvbnN0IGNoYXIgKm5hbWU7CiAgaW50IGludGVuc2l0eV90aW1lcjsKICBpbnQgYmxpbmtfdGltZXI7CiAgdm9pZCAoKnNldF9wb3dlcikoc3RydWN0IG9tYXBfcHdtX2xlZF9wbGF0Zm9ybV9kYXRhICpzZWxmLCBpbnQgb25fb2ZmKTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwotCiBzdHJ1Y3Qgb21hcF9ncGlvX3N3aXRjaF9jb25maWcgewogIGNoYXIgbmFtZVsxMl07CiAgdTE2IGdwaW87CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGludCBmbGFnczo0OwogIGludCB0eXBlOjQ7CiAgaW50IGtleV9jb2RlOjI0OwogfTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBvbWFwX3VhcnRfY29uZmlnIHsKLQogIHVuc2lnbmVkIGludCBlbmFibGVkX3VhcnRzOwogfTsKLQogc3RydWN0IG9tYXBfZmxhc2hfcGFydF9jb25maWcgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBjaGFyIHBhcnRfdGFibGVbMF07CiB9OwotCiBzdHJ1Y3Qgb21hcF9ib290X3JlYXNvbl9jb25maWcgewogIGNoYXIgcmVhc29uX3N0clsxMl07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKLQogc3RydWN0IG9tYXBfdmVyc2lvbl9jb25maWcgewogIGNoYXIgY29tcG9uZW50WzEyXTsKICBjaGFyIHZlcnNpb25bMTJdOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07Ci0KIHN0cnVjdCBvbWFwX2JvYXJkX2NvbmZpZ19lbnRyeSB7CiAgdTE2IHRhZzsKICB1MTYgbGVuOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1OCBkYXRhWzBdOwogfTsKLQogc3RydWN0IG9tYXBfYm9hcmRfY29uZmlnX2tlcm5lbCB7CiAgdTE2IHRhZzsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgY29uc3Qgdm9pZCAqZGF0YTsKIH07Ci0KIHN0cnVjdCBvbWFwX2JsdWV0b290aF9jb25maWcgewogIHU4IGNoaXBfdHlwZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdTggYnRfdWFydDsKICB1OCBiZF9hZGRyWzZdOwogIHU4IGJ0X3N5c2NsazsKICBpbnQgYnRfd2FrZXVwX2dwaW87CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGludCBob3N0X3dha2V1cF9ncGlvOwogIGludCByZXNldF9ncGlvOwogfTsKLQogI2RlZmluZSBvbWFwX2dldF9jb25maWcodGFnLCB0eXBlKSAgICgoY29uc3QgdHlwZSAqKSBfX29tYXBfZ2V0X2NvbmZpZygodGFnKSwgc2l6ZW9mKHR5cGUpLCAwKSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIG9tYXBfZ2V0X25yX2NvbmZpZyh0YWcsIHR5cGUsIG5yKSAgICgoY29uc3QgdHlwZSAqKSBfX29tYXBfZ2V0X2NvbmZpZygodGFnKSwgc2l6ZW9mKHR5cGUpLCAobnIpKSkKLQogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vYXJjaC9jcHUuaCBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9hcmNoL2NwdS5oCmluZGV4IGZhN2E0MDguLmZiOTUwNDggMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9hcmNoL2NwdS5oCisrKyBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9hcmNoL2NwdS5oCkBAIC03LDUxICs3LDYwIEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfX0FTTV9BUkNIX09NQVBfQ1BVX0gKICNkZWZpbmUgX19BU01fQVJDSF9PTUFQX0NQVV9ICi0KICNkZWZpbmUgb21hcDJfY3B1X3JldigpICgoc3lzdGVtX3JldiA+PiA4KSAmIDB4MGYpCi0KICN1bmRlZiBNVUxUSV9PTUFQMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICN1bmRlZiBNVUxUSV9PTUFQMgogI3VuZGVmIE9NQVBfTkFNRQotCiAjZGVmaW5lIEdFVF9PTUFQX0NMQVNTIChzeXN0ZW1fcmV2ICYgMHhmZikKLQogI2RlZmluZSBJU19PTUFQX0NMQVNTKGNsYXNzLCBpZCkgIHN0YXRpYyBpbmxpbmUgaW50IGlzX29tYXAgIyNjbGFzcyAodm9pZCkgIHsgICByZXR1cm4gKEdFVF9PTUFQX0NMQVNTID09IChpZCkpID8gMSA6IDA7ICB9Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEdFVF9PTUFQX1NVQkNMQVNTICgoc3lzdGVtX3JldiA+PiAyMCkgJiAweDBmZmYpCi0KICNkZWZpbmUgSVNfT01BUF9TVUJDTEFTUyhzdWJjbGFzcywgaWQpICBzdGF0aWMgaW5saW5lIGludCBpc19vbWFwICMjc3ViY2xhc3MgKHZvaWQpICB7ICAgcmV0dXJuIChHRVRfT01BUF9TVUJDTEFTUyA9PSAoaWQpKSA/IDEgOiAwOyAgfQotCiAjZGVmaW5lIGNwdV9pc19vbWFwN3h4KCkgMAogI2RlZmluZSBjcHVfaXNfb21hcDE1eHgoKSAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBjcHVfaXNfb21hcDE2eHgoKSAwCiAjZGVmaW5lIGNwdV9pc19vbWFwMjR4eCgpIDAKICNkZWZpbmUgY3B1X2lzX29tYXAyNDJ4KCkgMAogI2RlZmluZSBjcHVfaXNfb21hcDI0M3goKSAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2lmZGVmIE1VTFRJX09NQVAxCiAjZWxzZQogI2VuZGlmCiAjZGVmaW5lIEdFVF9PTUFQX1RZUEUgKChzeXN0ZW1fcmV2ID4+IDE2KSAmIDB4ZmZmZikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIElTX09NQVBfVFlQRSh0eXBlLCBpZCkgIHN0YXRpYyBpbmxpbmUgaW50IGlzX29tYXAgIyN0eXBlICh2b2lkKSAgeyAgIHJldHVybiAoR0VUX09NQVBfVFlQRSA9PSAoaWQpKSA/IDEgOiAwOyAgfQogI2RlZmluZSBjcHVfaXNfb21hcDMxMCgpIDAKICNkZWZpbmUgY3B1X2lzX29tYXA3MzAoKSAwCiAjZGVmaW5lIGNwdV9pc19vbWFwMTUxMCgpIDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIGNwdV9pc19vbWFwMTYxMCgpIDAKICNkZWZpbmUgY3B1X2lzX29tYXA1OTEyKCkgMAogI2RlZmluZSBjcHVfaXNfb21hcDE2MTEoKSAwCiAjZGVmaW5lIGNwdV9pc19vbWFwMTYyMSgpIDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIGNwdV9pc19vbWFwMTcxMCgpIDAKICNkZWZpbmUgY3B1X2lzX29tYXAyNDIwKCkgMAogI2RlZmluZSBjcHVfaXNfb21hcDI0MjIoKSAwCiAjZGVmaW5lIGNwdV9pc19vbWFwMjQyMygpIDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIGNwdV9pc19vbWFwMjQzMCgpIDAKICNpZmRlZiBNVUxUSV9PTUFQMQogI2Vsc2UKICNlbmRpZgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgY3B1X2NsYXNzX2lzX29tYXAxKCkgKGNwdV9pc19vbWFwNzMwKCkgfHwgY3B1X2lzX29tYXAxNXh4KCkgfHwgICBjcHVfaXNfb21hcDE2eHgoKSkKICNkZWZpbmUgY3B1X2NsYXNzX2lzX29tYXAyKCkgY3B1X2lzX29tYXAyNHh4KCkKICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2FyY2gvZG1hLmggYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vYXJjaC9kbWEuaAppbmRleCA1ZTViZTc2Li41NDA1NDY5IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vYXJjaC9kbWEuaAorKysgYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vYXJjaC9kbWEuaApAQCAtNywzMTIgKzcsMzYyIEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfX0FTTV9BUkNIX0RNQV9ICiAjZGVmaW5lIF9fQVNNX0FSQ0hfRE1BX0gKLQogI2RlZmluZSBPTUFQX0RNQV9CQVNFICgweGZmZmVkODAwKQogI2RlZmluZSBPTUFQX0RNQV9HQ1IgKE9NQVBfRE1BX0JBU0UgKyAweDQwMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE9NQVBfRE1BX0dTQ1IgKE9NQVBfRE1BX0JBU0UgKyAweDQwNCkKICNkZWZpbmUgT01BUF9ETUFfR1JTVCAoT01BUF9ETUFfQkFTRSArIDB4NDA4KQogI2RlZmluZSBPTUFQX0RNQV9IV19JRCAoT01BUF9ETUFfQkFTRSArIDB4NDQyKQogI2RlZmluZSBPTUFQX0RNQV9QQ0gyX0lEIChPTUFQX0RNQV9CQVNFICsgMHg0NDQpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBPTUFQX0RNQV9QQ0gwX0lEIChPTUFQX0RNQV9CQVNFICsgMHg0NDYpCiAjZGVmaW5lIE9NQVBfRE1BX1BDSDFfSUQgKE9NQVBfRE1BX0JBU0UgKyAweDQ0OCkKICNkZWZpbmUgT01BUF9ETUFfUENIR19JRCAoT01BUF9ETUFfQkFTRSArIDB4NDRhKQogI2RlZmluZSBPTUFQX0RNQV9QQ0hEX0lEIChPTUFQX0RNQV9CQVNFICsgMHg0NGMpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBPTUFQX0RNQV9DQVBTXzBfVSAoT01BUF9ETUFfQkFTRSArIDB4NDRlKQogI2RlZmluZSBPTUFQX0RNQV9DQVBTXzBfTCAoT01BUF9ETUFfQkFTRSArIDB4NDUwKQogI2RlZmluZSBPTUFQX0RNQV9DQVBTXzFfVSAoT01BUF9ETUFfQkFTRSArIDB4NDUyKQogI2RlZmluZSBPTUFQX0RNQV9DQVBTXzFfTCAoT01BUF9ETUFfQkFTRSArIDB4NDU0KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgT01BUF9ETUFfQ0FQU18yIChPTUFQX0RNQV9CQVNFICsgMHg0NTYpCiAjZGVmaW5lIE9NQVBfRE1BX0NBUFNfMyAoT01BUF9ETUFfQkFTRSArIDB4NDU4KQogI2RlZmluZSBPTUFQX0RNQV9DQVBTXzQgKE9NQVBfRE1BX0JBU0UgKyAweDQ1YSkKICNkZWZpbmUgT01BUF9ETUFfUENIMl9TUiAoT01BUF9ETUFfQkFTRSArIDB4NDYwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgT01BUF9ETUFfUENIMF9TUiAoT01BUF9ETUFfQkFTRSArIDB4NDgwKQogI2RlZmluZSBPTUFQX0RNQV9QQ0gxX1NSIChPTUFQX0RNQV9CQVNFICsgMHg0ODIpCiAjZGVmaW5lIE9NQVBfRE1BX1BDSERfU1IgKE9NQVBfRE1BX0JBU0UgKyAweDRjMCkKLQogI2RlZmluZSBPTUFQMjRYWF9ETUFfQkFTRSAoTDRfMjRYWF9CQVNFICsgMHg1NjAwMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE9NQVBfRE1BNF9SRVZJU0lPTiAoT01BUDI0WFhfRE1BX0JBU0UgKyAweDAwKQogI2RlZmluZSBPTUFQX0RNQTRfR0NSX1JFRyAoT01BUDI0WFhfRE1BX0JBU0UgKyAweDc4KQogI2RlZmluZSBPTUFQX0RNQTRfSVJRU1RBVFVTX0wwIChPTUFQMjRYWF9ETUFfQkFTRSArIDB4MDgpCiAjZGVmaW5lIE9NQVBfRE1BNF9JUlFTVEFUVVNfTDEgKE9NQVAyNFhYX0RNQV9CQVNFICsgMHgwYykKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE9NQVBfRE1BNF9JUlFTVEFUVVNfTDIgKE9NQVAyNFhYX0RNQV9CQVNFICsgMHgxMCkKICNkZWZpbmUgT01BUF9ETUE0X0lSUVNUQVRVU19MMyAoT01BUDI0WFhfRE1BX0JBU0UgKyAweDE0KQogI2RlZmluZSBPTUFQX0RNQTRfSVJRRU5BQkxFX0wwIChPTUFQMjRYWF9ETUFfQkFTRSArIDB4MTgpCiAjZGVmaW5lIE9NQVBfRE1BNF9JUlFFTkFCTEVfTDEgKE9NQVAyNFhYX0RNQV9CQVNFICsgMHgxYykKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE9NQVBfRE1BNF9JUlFFTkFCTEVfTDIgKE9NQVAyNFhYX0RNQV9CQVNFICsgMHgyMCkKICNkZWZpbmUgT01BUF9ETUE0X0lSUUVOQUJMRV9MMyAoT01BUDI0WFhfRE1BX0JBU0UgKyAweDI0KQogI2RlZmluZSBPTUFQX0RNQTRfU1lTU1RBVFVTIChPTUFQMjRYWF9ETUFfQkFTRSArIDB4MjgpCiAjZGVmaW5lIE9NQVBfRE1BNF9DQVBTXzAgKE9NQVAyNFhYX0RNQV9CQVNFICsgMHg2NCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE9NQVBfRE1BNF9DQVBTXzIgKE9NQVAyNFhYX0RNQV9CQVNFICsgMHg2YykKICNkZWZpbmUgT01BUF9ETUE0X0NBUFNfMyAoT01BUDI0WFhfRE1BX0JBU0UgKyAweDcwKQogI2RlZmluZSBPTUFQX0RNQTRfQ0FQU180IChPTUFQMjRYWF9ETUFfQkFTRSArIDB4NzQpCi0KLSNkZWZpbmUgT01BUF9MT0dJQ0FMX0RNQV9DSF9DT1VOVCAzMiAgCi0KKyNkZWZpbmUgT01BUF9MT0dJQ0FMX0RNQV9DSF9DT1VOVCAzMgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgT01BUF9ETUFfQ0NSX1JFRyhuKSBfX1JFRzMyKE9NQVAyNFhYX0RNQV9CQVNFICsgMHg2MCAqIChuKSArIDB4ODApCiAjZGVmaW5lIE9NQVBfRE1BX0NMTktfQ1RSTF9SRUcobikgX19SRUczMihPTUFQMjRYWF9ETUFfQkFTRSArIDB4NjAgKiAobikgKyAweDg0KQogI2RlZmluZSBPTUFQX0RNQV9DSUNSX1JFRyhuKSBfX1JFRzMyKE9NQVAyNFhYX0RNQV9CQVNFICsgMHg2MCAqIChuKSArIDB4ODgpCiAjZGVmaW5lIE9NQVBfRE1BX0NTUl9SRUcobikgX19SRUczMihPTUFQMjRYWF9ETUFfQkFTRSArIDB4NjAgKiAobikgKyAweDhjKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgT01BUF9ETUFfQ1NEUF9SRUcobikgX19SRUczMihPTUFQMjRYWF9ETUFfQkFTRSArIDB4NjAgKiAobikgKyAweDkwKQogI2RlZmluZSBPTUFQX0RNQV9DRU5fUkVHKG4pIF9fUkVHMzIoT01BUDI0WFhfRE1BX0JBU0UgKyAweDYwICogKG4pICsgMHg5NCkKICNkZWZpbmUgT01BUF9ETUFfQ0ZOX1JFRyhuKSBfX1JFRzMyKE9NQVAyNFhYX0RNQV9CQVNFICsgMHg2MCAqIChuKSArIDB4OTgpCiAjZGVmaW5lIE9NQVBfRE1BX0NTRUlfUkVHKG4pIF9fUkVHMzIoT01BUDI0WFhfRE1BX0JBU0UgKyAweDYwICogKG4pICsgMHhhNCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE9NQVBfRE1BX0NTRklfUkVHKG4pIF9fUkVHMzIoT01BUDI0WFhfRE1BX0JBU0UgKyAweDYwICogKG4pICsgMHhhOCkKICNkZWZpbmUgT01BUF9ETUFfQ0RFSV9SRUcobikgX19SRUczMihPTUFQMjRYWF9ETUFfQkFTRSArIDB4NjAgKiAobikgKyAweGFjKQogI2RlZmluZSBPTUFQX0RNQV9DREZJX1JFRyhuKSBfX1JFRzMyKE9NQVAyNFhYX0RNQV9CQVNFICsgMHg2MCAqIChuKSArIDB4YjApCiAjZGVmaW5lIE9NQVBfRE1BX0NTQUNfUkVHKG4pIF9fUkVHMzIoT01BUDI0WFhfRE1BX0JBU0UgKyAweDYwICogKG4pICsgMHhiNCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE9NQVBfRE1BX0NEQUNfUkVHKG4pIF9fUkVHMzIoT01BUDI0WFhfRE1BX0JBU0UgKyAweDYwICogKG4pICsgMHhiOCkKLQogI2RlZmluZSBPTUFQMV9ETUFfQ1NTQV9MX1JFRyhuKSBfX1JFRzE2KE9NQVBfRE1BX0JBU0UgKyAweDQwICogKG4pICsgMHgwOCkKICNkZWZpbmUgT01BUDFfRE1BX0NTU0FfVV9SRUcobikgX19SRUcxNihPTUFQX0RNQV9CQVNFICsgMHg0MCAqIChuKSArIDB4MGEpCiAjZGVmaW5lIE9NQVAxX0RNQV9DRFNBX0xfUkVHKG4pIF9fUkVHMTYoT01BUF9ETUFfQkFTRSArIDB4NDAgKiAobikgKyAweDBjKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgT01BUDFfRE1BX0NEU0FfVV9SRUcobikgX19SRUcxNihPTUFQX0RNQV9CQVNFICsgMHg0MCAqIChuKSArIDB4MGUpCiAjZGVmaW5lIE9NQVAxX0RNQV9DT0xPUl9MX1JFRyhuKSBfX1JFRzE2KE9NQVBfRE1BX0JBU0UgKyAweDQwICogKG4pICsgMHgyMCkKICNkZWZpbmUgT01BUDFfRE1BX0NDUjJfUkVHKG4pIF9fUkVHMTYoT01BUF9ETUFfQkFTRSArIDB4NDAgKiAobikgKyAweDI0KQogI2RlZmluZSBPTUFQMV9ETUFfQ09MT1JfVV9SRUcobikgX19SRUcxNihPTUFQX0RNQV9CQVNFICsgMHg0MCAqIChuKSArIDB4MjIpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBPTUFQMV9ETUFfTENIX0NUUkxfUkVHKG4pIF9fUkVHMTYoT01BUF9ETUFfQkFTRSArIDB4NDAgKiAobikgKyAweDJhKQotCiAjZGVmaW5lIE9NQVAyX0RNQV9DU1NBX1JFRyhuKSBfX1JFRzMyKE9NQVAyNFhYX0RNQV9CQVNFICsgMHg2MCAqIChuKSArIDB4OWMpCiAjZGVmaW5lIE9NQVAyX0RNQV9DRFNBX1JFRyhuKSBfX1JFRzMyKE9NQVAyNFhYX0RNQV9CQVNFICsgMHg2MCAqIChuKSArIDB4YTApCiAjZGVmaW5lIE9NQVAyX0RNQV9DQ0VOX1JFRyhuKSBfX1JFRzMyKE9NQVAyNFhYX0RNQV9CQVNFICsgMHg2MCAqIChuKSArIDB4YmMpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBPTUFQMl9ETUFfQ0NGTl9SRUcobikgX19SRUczMihPTUFQMjRYWF9ETUFfQkFTRSArIDB4NjAgKiAobikgKyAweGMwKQogI2RlZmluZSBPTUFQMl9ETUFfQ09MT1JfUkVHKG4pIF9fUkVHMzIoT01BUDI0WFhfRE1BX0JBU0UgKyAweDYwICogKG4pICsgMHhjNCkKLQogI2RlZmluZSBPTUFQX0RNQV9OT19ERVZJQ0UgMAogI2RlZmluZSBPTUFQX0RNQV9NQ1NJMV9UWCAxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBPTUFQX0RNQV9NQ1NJMV9SWCAyCiAjZGVmaW5lIE9NQVBfRE1BX0kyQ19SWCAzCiAjZGVmaW5lIE9NQVBfRE1BX0kyQ19UWCA0CiAjZGVmaW5lIE9NQVBfRE1BX0VYVF9ORE1BX1JFUSA1CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBPTUFQX0RNQV9FWFRfTkRNQV9SRVEyIDYKICNkZWZpbmUgT01BUF9ETUFfVVdJUkVfVFggNwogI2RlZmluZSBPTUFQX0RNQV9NQ0JTUDFfVFggOAogI2RlZmluZSBPTUFQX0RNQV9NQ0JTUDFfUlggOQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgT01BUF9ETUFfTUNCU1AzX1RYIDEwCiAjZGVmaW5lIE9NQVBfRE1BX01DQlNQM19SWCAxMQogI2RlZmluZSBPTUFQX0RNQV9VQVJUMV9UWCAxMgogI2RlZmluZSBPTUFQX0RNQV9VQVJUMV9SWCAxMworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgT01BUF9ETUFfVUFSVDJfVFggMTQKICNkZWZpbmUgT01BUF9ETUFfVUFSVDJfUlggMTUKICNkZWZpbmUgT01BUF9ETUFfTUNCU1AyX1RYIDE2CiAjZGVmaW5lIE9NQVBfRE1BX01DQlNQMl9SWCAxNworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgT01BUF9ETUFfVUFSVDNfVFggMTgKICNkZWZpbmUgT01BUF9ETUFfVUFSVDNfUlggMTkKICNkZWZpbmUgT01BUF9ETUFfQ0FNRVJBX0lGX1JYIDIwCiAjZGVmaW5lIE9NQVBfRE1BX01NQ19UWCAyMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgT01BUF9ETUFfTU1DX1JYIDIyCiAjZGVmaW5lIE9NQVBfRE1BX05BTkQgMjMKICNkZWZpbmUgT01BUF9ETUFfSVJRX0xDRF9MSU5FIDI0CiAjZGVmaW5lIE9NQVBfRE1BX01FTU9SWV9TVElDSyAyNQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgT01BUF9ETUFfVVNCX1cyRkNfUlgwIDI2CiAjZGVmaW5lIE9NQVBfRE1BX1VTQl9XMkZDX1JYMSAyNwogI2RlZmluZSBPTUFQX0RNQV9VU0JfVzJGQ19SWDIgMjgKICNkZWZpbmUgT01BUF9ETUFfVVNCX1cyRkNfVFgwIDI5CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBPTUFQX0RNQV9VU0JfVzJGQ19UWDEgMzAKICNkZWZpbmUgT01BUF9ETUFfVVNCX1cyRkNfVFgyIDMxCi0KICNkZWZpbmUgT01BUF9ETUFfQ1JZUFRPX0RFU19JTiAzMgogI2RlZmluZSBPTUFQX0RNQV9TUElfVFggMzMKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE9NQVBfRE1BX1NQSV9SWCAzNAogI2RlZmluZSBPTUFQX0RNQV9DUllQVE9fSEFTSCAzNQogI2RlZmluZSBPTUFQX0RNQV9DQ1BfQVRUTiAzNgogI2RlZmluZSBPTUFQX0RNQV9DQ1BfRklGT19OT1RfRU1QVFkgMzcKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE9NQVBfRE1BX0NNVF9BUEVfVFhfQ0hBTl8wIDM4CiAjZGVmaW5lIE9NQVBfRE1BX0NNVF9BUEVfUlZfQ0hBTl8wIDM5CiAjZGVmaW5lIE9NQVBfRE1BX0NNVF9BUEVfVFhfQ0hBTl8xIDQwCiAjZGVmaW5lIE9NQVBfRE1BX0NNVF9BUEVfUlZfQ0hBTl8xIDQxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBPTUFQX0RNQV9DTVRfQVBFX1RYX0NIQU5fMiA0MgogI2RlZmluZSBPTUFQX0RNQV9DTVRfQVBFX1JWX0NIQU5fMiA0MwogI2RlZmluZSBPTUFQX0RNQV9DTVRfQVBFX1RYX0NIQU5fMyA0NAogI2RlZmluZSBPTUFQX0RNQV9DTVRfQVBFX1JWX0NIQU5fMyA0NQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgT01BUF9ETUFfQ01UX0FQRV9UWF9DSEFOXzQgNDYKICNkZWZpbmUgT01BUF9ETUFfQ01UX0FQRV9SVl9DSEFOXzQgNDcKICNkZWZpbmUgT01BUF9ETUFfQ01UX0FQRV9UWF9DSEFOXzUgNDgKICNkZWZpbmUgT01BUF9ETUFfQ01UX0FQRV9SVl9DSEFOXzUgNDkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE9NQVBfRE1BX0NNVF9BUEVfVFhfQ0hBTl82IDUwCiAjZGVmaW5lIE9NQVBfRE1BX0NNVF9BUEVfUlZfQ0hBTl82IDUxCiAjZGVmaW5lIE9NQVBfRE1BX0NNVF9BUEVfVFhfQ0hBTl83IDUyCiAjZGVmaW5lIE9NQVBfRE1BX0NNVF9BUEVfUlZfQ0hBTl83IDUzCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBPTUFQX0RNQV9NTUMyX1RYIDU0CiAjZGVmaW5lIE9NQVBfRE1BX01NQzJfUlggNTUKICNkZWZpbmUgT01BUF9ETUFfQ1JZUFRPX0RFU19PVVQgNTYKLQogI2RlZmluZSBPTUFQMjRYWF9ETUFfTk9fREVWSUNFIDAKLSNkZWZpbmUgT01BUDI0WFhfRE1BX1hUSV9ETUEgMSAgCi0jZGVmaW5lIE9NQVAyNFhYX0RNQV9FWFRfRE1BUkVRMCAyICAKLSNkZWZpbmUgT01BUDI0WFhfRE1BX0VYVF9ETUFSRVExIDMgIAotI2RlZmluZSBPTUFQMjRYWF9ETUFfR1BNQyA0ICAKLSNkZWZpbmUgT01BUDI0WFhfRE1BX0dGWCA1ICAKLSNkZWZpbmUgT01BUDI0WFhfRE1BX0RTUyA2ICAKLSNkZWZpbmUgT01BUDI0WFhfRE1BX1ZMWU5RX1RYIDcgIAotI2RlZmluZSBPTUFQMjRYWF9ETUFfQ1dUIDggIAotI2RlZmluZSBPTUFQMjRYWF9ETUFfQUVTX1RYIDkgIAotI2RlZmluZSBPTUFQMjRYWF9ETUFfQUVTX1JYIDEwICAKLSNkZWZpbmUgT01BUDI0WFhfRE1BX0RFU19UWCAxMSAgCi0jZGVmaW5lIE9NQVAyNFhYX0RNQV9ERVNfUlggMTIgIAotI2RlZmluZSBPTUFQMjRYWF9ETUFfU0hBMU1ENV9SWCAxMyAgCi0jZGVmaW5lIE9NQVAyNFhYX0RNQV9FWFRfRE1BUkVRMiAxNCAgCi0jZGVmaW5lIE9NQVAyNFhYX0RNQV9FWFRfRE1BUkVRMyAxNSAgCi0jZGVmaW5lIE9NQVAyNFhYX0RNQV9FWFRfRE1BUkVRNCAxNiAgCi0jZGVmaW5lIE9NQVAyNFhYX0RNQV9FQUNfQUNfUkQgMTcgIAotI2RlZmluZSBPTUFQMjRYWF9ETUFfRUFDX0FDX1dSIDE4ICAKLSNkZWZpbmUgT01BUDI0WFhfRE1BX0VBQ19NRF9VTF9SRCAxOSAgCi0jZGVmaW5lIE9NQVAyNFhYX0RNQV9FQUNfTURfVUxfV1IgMjAgIAotI2RlZmluZSBPTUFQMjRYWF9ETUFfRUFDX01EX0RMX1JEIDIxICAKLSNkZWZpbmUgT01BUDI0WFhfRE1BX0VBQ19NRF9ETF9XUiAyMiAgCi0jZGVmaW5lIE9NQVAyNFhYX0RNQV9FQUNfQlRfVUxfUkQgMjMgIAotI2RlZmluZSBPTUFQMjRYWF9ETUFfRUFDX0JUX1VMX1dSIDI0ICAKLSNkZWZpbmUgT01BUDI0WFhfRE1BX0VBQ19CVF9ETF9SRCAyNSAgCi0jZGVmaW5lIE9NQVAyNFhYX0RNQV9FQUNfQlRfRExfV1IgMjYgIAotI2RlZmluZSBPTUFQMjRYWF9ETUFfSTJDMV9UWCAyNyAgCi0jZGVmaW5lIE9NQVAyNFhYX0RNQV9JMkMxX1JYIDI4ICAKLSNkZWZpbmUgT01BUDI0WFhfRE1BX0kyQzJfVFggMjkgIAotI2RlZmluZSBPTUFQMjRYWF9ETUFfSTJDMl9SWCAzMCAgCi0jZGVmaW5lIE9NQVAyNFhYX0RNQV9NQ0JTUDFfVFggMzEgIAotI2RlZmluZSBPTUFQMjRYWF9ETUFfTUNCU1AxX1JYIDMyICAKLSNkZWZpbmUgT01BUDI0WFhfRE1BX01DQlNQMl9UWCAzMyAgCi0jZGVmaW5lIE9NQVAyNFhYX0RNQV9NQ0JTUDJfUlggMzQgIAotI2RlZmluZSBPTUFQMjRYWF9ETUFfU1BJMV9UWDAgMzUgIAotI2RlZmluZSBPTUFQMjRYWF9ETUFfU1BJMV9SWDAgMzYgIAotI2RlZmluZSBPTUFQMjRYWF9ETUFfU1BJMV9UWDEgMzcgIAotI2RlZmluZSBPTUFQMjRYWF9ETUFfU1BJMV9SWDEgMzggIAotI2RlZmluZSBPTUFQMjRYWF9ETUFfU1BJMV9UWDIgMzkgIAotI2RlZmluZSBPTUFQMjRYWF9ETUFfU1BJMV9SWDIgNDAgIAotI2RlZmluZSBPTUFQMjRYWF9ETUFfU1BJMV9UWDMgNDEgIAotI2RlZmluZSBPTUFQMjRYWF9ETUFfU1BJMV9SWDMgNDIgIAotI2RlZmluZSBPTUFQMjRYWF9ETUFfU1BJMl9UWDAgNDMgIAotI2RlZmluZSBPTUFQMjRYWF9ETUFfU1BJMl9SWDAgNDQgIAotI2RlZmluZSBPTUFQMjRYWF9ETUFfU1BJMl9UWDEgNDUgIAotI2RlZmluZSBPTUFQMjRYWF9ETUFfU1BJMl9SWDEgNDYgIAotCi0jZGVmaW5lIE9NQVAyNFhYX0RNQV9VQVJUMV9UWCA0OSAgCi0jZGVmaW5lIE9NQVAyNFhYX0RNQV9VQVJUMV9SWCA1MCAgCi0jZGVmaW5lIE9NQVAyNFhYX0RNQV9VQVJUMl9UWCA1MSAgCi0jZGVmaW5lIE9NQVAyNFhYX0RNQV9VQVJUMl9SWCA1MiAgCi0jZGVmaW5lIE9NQVAyNFhYX0RNQV9VQVJUM19UWCA1MyAgCi0jZGVmaW5lIE9NQVAyNFhYX0RNQV9VQVJUM19SWCA1NCAgCi0jZGVmaW5lIE9NQVAyNFhYX0RNQV9VU0JfVzJGQ19UWDAgNTUgIAotI2RlZmluZSBPTUFQMjRYWF9ETUFfVVNCX1cyRkNfUlgwIDU2ICAKLSNkZWZpbmUgT01BUDI0WFhfRE1BX1VTQl9XMkZDX1RYMSA1NyAgCi0jZGVmaW5lIE9NQVAyNFhYX0RNQV9VU0JfVzJGQ19SWDEgNTggIAotI2RlZmluZSBPTUFQMjRYWF9ETUFfVVNCX1cyRkNfVFgyIDU5ICAKLSNkZWZpbmUgT01BUDI0WFhfRE1BX1VTQl9XMkZDX1JYMiA2MCAgCi0jZGVmaW5lIE9NQVAyNFhYX0RNQV9NTUMxX1RYIDYxICAKLSNkZWZpbmUgT01BUDI0WFhfRE1BX01NQzFfUlggNjIgIAotI2RlZmluZSBPTUFQMjRYWF9ETUFfTVMgNjMgIAotI2RlZmluZSBPTUFQMjRYWF9ETUFfRVhUX0RNQVJFUTUgNjQgIAotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBPTUFQMjRYWF9ETUFfWFRJX0RNQSAxCisjZGVmaW5lIE9NQVAyNFhYX0RNQV9FWFRfRE1BUkVRMCAyCisjZGVmaW5lIE9NQVAyNFhYX0RNQV9FWFRfRE1BUkVRMSAzCisjZGVmaW5lIE9NQVAyNFhYX0RNQV9HUE1DIDQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIE9NQVAyNFhYX0RNQV9HRlggNQorI2RlZmluZSBPTUFQMjRYWF9ETUFfRFNTIDYKKyNkZWZpbmUgT01BUDI0WFhfRE1BX1ZMWU5RX1RYIDcKKyNkZWZpbmUgT01BUDI0WFhfRE1BX0NXVCA4CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBPTUFQMjRYWF9ETUFfQUVTX1RYIDkKKyNkZWZpbmUgT01BUDI0WFhfRE1BX0FFU19SWCAxMAorI2RlZmluZSBPTUFQMjRYWF9ETUFfREVTX1RYIDExCisjZGVmaW5lIE9NQVAyNFhYX0RNQV9ERVNfUlggMTIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIE9NQVAyNFhYX0RNQV9TSEExTUQ1X1JYIDEzCisjZGVmaW5lIE9NQVAyNFhYX0RNQV9FWFRfRE1BUkVRMiAxNAorI2RlZmluZSBPTUFQMjRYWF9ETUFfRVhUX0RNQVJFUTMgMTUKKyNkZWZpbmUgT01BUDI0WFhfRE1BX0VYVF9ETUFSRVE0IDE2CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBPTUFQMjRYWF9ETUFfRUFDX0FDX1JEIDE3CisjZGVmaW5lIE9NQVAyNFhYX0RNQV9FQUNfQUNfV1IgMTgKKyNkZWZpbmUgT01BUDI0WFhfRE1BX0VBQ19NRF9VTF9SRCAxOQorI2RlZmluZSBPTUFQMjRYWF9ETUFfRUFDX01EX1VMX1dSIDIwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBPTUFQMjRYWF9ETUFfRUFDX01EX0RMX1JEIDIxCisjZGVmaW5lIE9NQVAyNFhYX0RNQV9FQUNfTURfRExfV1IgMjIKKyNkZWZpbmUgT01BUDI0WFhfRE1BX0VBQ19CVF9VTF9SRCAyMworI2RlZmluZSBPTUFQMjRYWF9ETUFfRUFDX0JUX1VMX1dSIDI0CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBPTUFQMjRYWF9ETUFfRUFDX0JUX0RMX1JEIDI1CisjZGVmaW5lIE9NQVAyNFhYX0RNQV9FQUNfQlRfRExfV1IgMjYKKyNkZWZpbmUgT01BUDI0WFhfRE1BX0kyQzFfVFggMjcKKyNkZWZpbmUgT01BUDI0WFhfRE1BX0kyQzFfUlggMjgKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIE9NQVAyNFhYX0RNQV9JMkMyX1RYIDI5CisjZGVmaW5lIE9NQVAyNFhYX0RNQV9JMkMyX1JYIDMwCisjZGVmaW5lIE9NQVAyNFhYX0RNQV9NQ0JTUDFfVFggMzEKKyNkZWZpbmUgT01BUDI0WFhfRE1BX01DQlNQMV9SWCAzMgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgT01BUDI0WFhfRE1BX01DQlNQMl9UWCAzMworI2RlZmluZSBPTUFQMjRYWF9ETUFfTUNCU1AyX1JYIDM0CisjZGVmaW5lIE9NQVAyNFhYX0RNQV9TUEkxX1RYMCAzNQorI2RlZmluZSBPTUFQMjRYWF9ETUFfU1BJMV9SWDAgMzYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIE9NQVAyNFhYX0RNQV9TUEkxX1RYMSAzNworI2RlZmluZSBPTUFQMjRYWF9ETUFfU1BJMV9SWDEgMzgKKyNkZWZpbmUgT01BUDI0WFhfRE1BX1NQSTFfVFgyIDM5CisjZGVmaW5lIE9NQVAyNFhYX0RNQV9TUEkxX1JYMiA0MAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgT01BUDI0WFhfRE1BX1NQSTFfVFgzIDQxCisjZGVmaW5lIE9NQVAyNFhYX0RNQV9TUEkxX1JYMyA0MgorI2RlZmluZSBPTUFQMjRYWF9ETUFfU1BJMl9UWDAgNDMKKyNkZWZpbmUgT01BUDI0WFhfRE1BX1NQSTJfUlgwIDQ0CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBPTUFQMjRYWF9ETUFfU1BJMl9UWDEgNDUKKyNkZWZpbmUgT01BUDI0WFhfRE1BX1NQSTJfUlgxIDQ2CisjZGVmaW5lIE9NQVAyNFhYX0RNQV9VQVJUMV9UWCA0OQorI2RlZmluZSBPTUFQMjRYWF9ETUFfVUFSVDFfUlggNTAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIE9NQVAyNFhYX0RNQV9VQVJUMl9UWCA1MQorI2RlZmluZSBPTUFQMjRYWF9ETUFfVUFSVDJfUlggNTIKKyNkZWZpbmUgT01BUDI0WFhfRE1BX1VBUlQzX1RYIDUzCisjZGVmaW5lIE9NQVAyNFhYX0RNQV9VQVJUM19SWCA1NAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgT01BUDI0WFhfRE1BX1VTQl9XMkZDX1RYMCA1NQorI2RlZmluZSBPTUFQMjRYWF9ETUFfVVNCX1cyRkNfUlgwIDU2CisjZGVmaW5lIE9NQVAyNFhYX0RNQV9VU0JfVzJGQ19UWDEgNTcKKyNkZWZpbmUgT01BUDI0WFhfRE1BX1VTQl9XMkZDX1JYMSA1OAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgT01BUDI0WFhfRE1BX1VTQl9XMkZDX1RYMiA1OQorI2RlZmluZSBPTUFQMjRYWF9ETUFfVVNCX1cyRkNfUlgyIDYwCisjZGVmaW5lIE9NQVAyNFhYX0RNQV9NTUMxX1RYIDYxCisjZGVmaW5lIE9NQVAyNFhYX0RNQV9NTUMxX1JYIDYyCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBPTUFQMjRYWF9ETUFfTVMgNjMKKyNkZWZpbmUgT01BUDI0WFhfRE1BX0VYVF9ETUFSRVE1IDY0CiAjZGVmaW5lIE9NQVAxNTEwX0RNQV9MQ0RfQkFTRSAoMHhmZmZlZGIwMCkKICNkZWZpbmUgT01BUDE1MTBfRE1BX0xDRF9DVFJMIChPTUFQMTUxMF9ETUFfTENEX0JBU0UgKyAweDAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgT01BUDE1MTBfRE1BX0xDRF9UT1BfRjFfTCAoT01BUDE1MTBfRE1BX0xDRF9CQVNFICsgMHgwMikKICNkZWZpbmUgT01BUDE1MTBfRE1BX0xDRF9UT1BfRjFfVSAoT01BUDE1MTBfRE1BX0xDRF9CQVNFICsgMHgwNCkKICNkZWZpbmUgT01BUDE1MTBfRE1BX0xDRF9CT1RfRjFfTCAoT01BUDE1MTBfRE1BX0xDRF9CQVNFICsgMHgwNikKICNkZWZpbmUgT01BUDE1MTBfRE1BX0xDRF9CT1RfRjFfVSAoT01BUDE1MTBfRE1BX0xDRF9CQVNFICsgMHgwOCkKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgT01BUDE2MTBfRE1BX0xDRF9CQVNFICgweGZmZmVlMzAwKQogI2RlZmluZSBPTUFQMTYxMF9ETUFfTENEX0NTRFAgKE9NQVAxNjEwX0RNQV9MQ0RfQkFTRSArIDB4YzApCiAjZGVmaW5lIE9NQVAxNjEwX0RNQV9MQ0RfQ0NSIChPTUFQMTYxMF9ETUFfTENEX0JBU0UgKyAweGMyKQogI2RlZmluZSBPTUFQMTYxMF9ETUFfTENEX0NUUkwgKE9NQVAxNjEwX0RNQV9MQ0RfQkFTRSArIDB4YzQpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBPTUFQMTYxMF9ETUFfTENEX1RPUF9CMV9MIChPTUFQMTYxMF9ETUFfTENEX0JBU0UgKyAweGM4KQogI2RlZmluZSBPTUFQMTYxMF9ETUFfTENEX1RPUF9CMV9VIChPTUFQMTYxMF9ETUFfTENEX0JBU0UgKyAweGNhKQogI2RlZmluZSBPTUFQMTYxMF9ETUFfTENEX0JPVF9CMV9MIChPTUFQMTYxMF9ETUFfTENEX0JBU0UgKyAweGNjKQogI2RlZmluZSBPTUFQMTYxMF9ETUFfTENEX0JPVF9CMV9VIChPTUFQMTYxMF9ETUFfTENEX0JBU0UgKyAweGNlKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgT01BUDE2MTBfRE1BX0xDRF9UT1BfQjJfTCAoT01BUDE2MTBfRE1BX0xDRF9CQVNFICsgMHhkMCkKICNkZWZpbmUgT01BUDE2MTBfRE1BX0xDRF9UT1BfQjJfVSAoT01BUDE2MTBfRE1BX0xDRF9CQVNFICsgMHhkMikKICNkZWZpbmUgT01BUDE2MTBfRE1BX0xDRF9CT1RfQjJfTCAoT01BUDE2MTBfRE1BX0xDRF9CQVNFICsgMHhkNCkKICNkZWZpbmUgT01BUDE2MTBfRE1BX0xDRF9CT1RfQjJfVSAoT01BUDE2MTBfRE1BX0xDRF9CQVNFICsgMHhkNikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE9NQVAxNjEwX0RNQV9MQ0RfU1JDX0VJX0IxIChPTUFQMTYxMF9ETUFfTENEX0JBU0UgKyAweGQ4KQogI2RlZmluZSBPTUFQMTYxMF9ETUFfTENEX1NSQ19GSV9CMV9MIChPTUFQMTYxMF9ETUFfTENEX0JBU0UgKyAweGRhKQogI2RlZmluZSBPTUFQMTYxMF9ETUFfTENEX1NSQ19FTl9CMSAoT01BUDE2MTBfRE1BX0xDRF9CQVNFICsgMHhlMCkKICNkZWZpbmUgT01BUDE2MTBfRE1BX0xDRF9TUkNfRk5fQjEgKE9NQVAxNjEwX0RNQV9MQ0RfQkFTRSArIDB4ZTQpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBPTUFQMTYxMF9ETUFfTENEX0xDSF9DVFJMIChPTUFQMTYxMF9ETUFfTENEX0JBU0UgKyAweGVhKQogI2RlZmluZSBPTUFQMTYxMF9ETUFfTENEX1NSQ19GSV9CMV9VIChPTUFQMTYxMF9ETUFfTENEX0JBU0UgKyAweGY0KQotCiAjZGVmaW5lIE9NQVAxX0RNQV9UT1VUX0lSUSAoMSA8PCAwKQogI2RlZmluZSBPTUFQX0RNQV9EUk9QX0lSUSAoMSA8PCAxKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgT01BUF9ETUFfSEFMRl9JUlEgKDEgPDwgMikKICNkZWZpbmUgT01BUF9ETUFfRlJBTUVfSVJRICgxIDw8IDMpCiAjZGVmaW5lIE9NQVBfRE1BX0xBU1RfSVJRICgxIDw8IDQpCiAjZGVmaW5lIE9NQVBfRE1BX0JMT0NLX0lSUSAoMSA8PCA1KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgT01BUDFfRE1BX1NZTkNfSVJRICgxIDw8IDYpCiAjZGVmaW5lIE9NQVAyX0RNQV9QS1RfSVJRICgxIDw8IDcpCiAjZGVmaW5lIE9NQVAyX0RNQV9UUkFOU19FUlJfSVJRICgxIDw8IDgpCiAjZGVmaW5lIE9NQVAyX0RNQV9TRUNVUkVfRVJSX0lSUSAoMSA8PCA5KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgT01BUDJfRE1BX1NVUEVSVklTT1JfRVJSX0lSUSAoMSA8PCAxMCkKICNkZWZpbmUgT01BUDJfRE1BX01JU0FMSUdORURfRVJSX0lSUSAoMSA8PCAxMSkKLQogI2RlZmluZSBPTUFQX0RNQV9EQVRBX1RZUEVfUzggMHgwMAogI2RlZmluZSBPTUFQX0RNQV9EQVRBX1RZUEVfUzE2IDB4MDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE9NQVBfRE1BX0RBVEFfVFlQRV9TMzIgMHgwMgotCiAjZGVmaW5lIE9NQVBfRE1BX1NZTkNfRUxFTUVOVCAweDAwCiAjZGVmaW5lIE9NQVBfRE1BX1NZTkNfRlJBTUUgMHgwMQogI2RlZmluZSBPTUFQX0RNQV9TWU5DX0JMT0NLIDB4MDIKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgT01BUF9ETUFfUE9SVF9FTUlGRiAweDAwCiAjZGVmaW5lIE9NQVBfRE1BX1BPUlRfRU1JRlMgMHgwMQogI2RlZmluZSBPTUFQX0RNQV9QT1JUX09DUF9UMSAweDAyCiAjZGVmaW5lIE9NQVBfRE1BX1BPUlRfVElQQiAweDAzCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBPTUFQX0RNQV9QT1JUX09DUF9UMiAweDA0CiAjZGVmaW5lIE9NQVBfRE1BX1BPUlRfTVBVSSAweDA1Ci0KICNkZWZpbmUgT01BUF9ETUFfQU1PREVfQ09OU1RBTlQgMHgwMAogI2RlZmluZSBPTUFQX0RNQV9BTU9ERV9QT1NUX0lOQyAweDAxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBPTUFQX0RNQV9BTU9ERV9TSU5HTEVfSURYIDB4MDIKICNkZWZpbmUgT01BUF9ETUFfQU1PREVfRE9VQkxFX0lEWCAweDAzCi0KIGVudW0gewogIE9NQVBfTENEX0RNQV9CMV9UT1AsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE9NQVBfTENEX0RNQV9CMV9CT1RUT00sCiAgT01BUF9MQ0RfRE1BX0IyX1RPUCwKICBPTUFQX0xDRF9ETUFfQjJfQk9UVE9NCiB9OwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogZW51bSBvbWFwX2RtYV9idXJzdF9tb2RlIHsKICBPTUFQX0RNQV9EQVRBX0JVUlNUX0RJUyA9IDAsCiAgT01BUF9ETUFfREFUQV9CVVJTVF80LAogIE9NQVBfRE1BX0RBVEFfQlVSU1RfOCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgT01BUF9ETUFfREFUQV9CVVJTVF8xNiwKIH07Ci0KIGVudW0gb21hcF9kbWFfY29sb3JfbW9kZSB7CiAgT01BUF9ETUFfQ09MT1JfRElTID0gMCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgT01BUF9ETUFfQ09OU1RBTlRfRklMTCwKICBPTUFQX0RNQV9UUkFOU1BBUkVOVF9DT1BZCiB9OwotCiBlbnVtIG9tYXBfZG1hX3dyaXRlX21vZGUgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBPTUFQX0RNQV9XUklURV9OT05fUE9TVEVEID0gMCwKICBPTUFQX0RNQV9XUklURV9QT1NURUQsCiAgT01BUF9ETUFfV1JJVEVfTEFTVF9OT05fUE9TVEVECiB9OwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IG9tYXBfZG1hX2NoYW5uZWxfcGFyYW1zIHsKICBpbnQgZGF0YV90eXBlOwogIGludCBlbGVtX2NvdW50OwogIGludCBmcmFtZV9jb3VudDsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBpbnQgc3JjX3BvcnQ7CiAgaW50IHNyY19hbW9kZTsKICB1bnNpZ25lZCBsb25nIHNyY19zdGFydDsKICBpbnQgc3JjX2VpOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBpbnQgc3JjX2ZpOwotCiAgaW50IGRzdF9wb3J0OwogIGludCBkc3RfYW1vZGU7CiAgdW5zaWduZWQgbG9uZyBkc3Rfc3RhcnQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGludCBkc3RfZWk7CiAgaW50IGRzdF9maTsKLQogIGludCB0cmlnZ2VyOwogIGludCBzeW5jX21vZGU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGludCBzcmNfb3JfZHN0X3N5bmNoOwotCiAgaW50IGllOwogfTsKLQogI2VuZGlmCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2FyY2gvZnBnYS5oIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2FyY2gvZnBnYS5oCmluZGV4IGExYjIxMGQuLjg0MzlhODAgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9hcmNoL2ZwZ2EuaAorKysgYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vYXJjaC9mcGdhLmgKQEAgLTcsMTU0ICs3LDE2MiBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX19BU01fQVJDSF9PTUFQX0ZQR0FfSAogI2RlZmluZSBfX0FTTV9BUkNIX09NQVBfRlBHQV9ICi0KICNkZWZpbmUgb21hcDE1MTBfZnBnYV9pbml0X2lycSgpICgwKQotCiAjZGVmaW5lIGZwZ2FfcmVhZChyZWcpIF9fcmF3X3JlYWRiKHJlZykKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIGZwZ2Ffd3JpdGUodmFsLCByZWcpIF9fcmF3X3dyaXRlYih2YWwsIHJlZykKLQotI2RlZmluZSBIMlAyX0RCR19GUEdBX0JBU0UgMHhFODAwMDAwMCAgCi0jZGVmaW5lIEgyUDJfREJHX0ZQR0FfU0laRSBTWl80SyAgCi0jZGVmaW5lIEgyUDJfREJHX0ZQR0FfU1RBUlQgMHgwNDAwMDAwMCAgCi0KKyNkZWZpbmUgSDJQMl9EQkdfRlBHQV9CQVNFIDB4RTgwMDAwMDAKKyNkZWZpbmUgSDJQMl9EQkdfRlBHQV9TSVpFIFNaXzRLCisjZGVmaW5lIEgyUDJfREJHX0ZQR0FfU1RBUlQgMHgwNDAwMDAwMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSDJQMl9EQkdfRlBHQV9FVEhSX1NUQVJUIChIMlAyX0RCR19GUEdBX1NUQVJUICsgMHgzMDApCi0jZGVmaW5lIEgyUDJfREJHX0ZQR0FfRlBHQV9SRVYgKEgyUDJfREJHX0ZQR0FfQkFTRSArIDB4MTApICAKLSNkZWZpbmUgSDJQMl9EQkdfRlBHQV9CT0FSRF9SRVYgKEgyUDJfREJHX0ZQR0FfQkFTRSArIDB4MTIpICAKLSNkZWZpbmUgSDJQMl9EQkdfRlBHQV9HUElPIChIMlAyX0RCR19GUEdBX0JBU0UgKyAweDE0KSAgCi0jZGVmaW5lIEgyUDJfREJHX0ZQR0FfTEVEUyAoSDJQMl9EQkdfRlBHQV9CQVNFICsgMHgxNikgIAotI2RlZmluZSBIMlAyX0RCR19GUEdBX01JU0NfSU5QVVRTIChIMlAyX0RCR19GUEdBX0JBU0UgKyAweDE4KSAgCi0jZGVmaW5lIEgyUDJfREJHX0ZQR0FfTEFOX1NUQVRVUyAoSDJQMl9EQkdfRlBHQV9CQVNFICsgMHgxQSkgIAotI2RlZmluZSBIMlAyX0RCR19GUEdBX0xBTl9SRVNFVCAoSDJQMl9EQkdfRlBHQV9CQVNFICsgMHgxQykgIAotCisjZGVmaW5lIEgyUDJfREJHX0ZQR0FfRlBHQV9SRVYgKEgyUDJfREJHX0ZQR0FfQkFTRSArIDB4MTApCisjZGVmaW5lIEgyUDJfREJHX0ZQR0FfQk9BUkRfUkVWIChIMlAyX0RCR19GUEdBX0JBU0UgKyAweDEyKQorI2RlZmluZSBIMlAyX0RCR19GUEdBX0dQSU8gKEgyUDJfREJHX0ZQR0FfQkFTRSArIDB4MTQpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBIMlAyX0RCR19GUEdBX0xFRFMgKEgyUDJfREJHX0ZQR0FfQkFTRSArIDB4MTYpCisjZGVmaW5lIEgyUDJfREJHX0ZQR0FfTUlTQ19JTlBVVFMgKEgyUDJfREJHX0ZQR0FfQkFTRSArIDB4MTgpCisjZGVmaW5lIEgyUDJfREJHX0ZQR0FfTEFOX1NUQVRVUyAoSDJQMl9EQkdfRlBHQV9CQVNFICsgMHgxQSkKKyNkZWZpbmUgSDJQMl9EQkdfRlBHQV9MQU5fUkVTRVQgKEgyUDJfREJHX0ZQR0FfQkFTRSArIDB4MUMpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IGgycDJfZGJnX2ZwZ2EgewotCiAgdTE2IHNtYzkxeFs4XTsKLQogIHUxNiBmcGdhX3JldjsKICB1MTYgYm9hcmRfcmV2OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1MTYgZ3Bpb19vdXRwdXRzOwogIHUxNiBsZWRzOwotCiAgdTE2IG1pc2NfaW5wdXRzOwogIHUxNiBsYW5fc3RhdHVzOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1MTYgbGFuX3Jlc2V0OwogIHUxNiByZXNlcnZlZDA7Ci0KICB1MTYgcHMyX2RhdGE7CiAgdTE2IHBzMl9jdHJsOwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKLQogI2RlZmluZSBIMlAyX0RCR19GUEdBX0xFRF9HUkVFTiAoMSA8PCAxNSkKICNkZWZpbmUgSDJQMl9EQkdfRlBHQV9MRURfQU1CRVIgKDEgPDwgMTQpCiAjZGVmaW5lIEgyUDJfREJHX0ZQR0FfTEVEX1JFRCAoMSA8PCAxMykKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEgyUDJfREJHX0ZQR0FfTEVEX0JMVUUgKDEgPDwgMTIpCi0KLSNkZWZpbmUgSDJQMl9EQkdfRlBHQV9MT0FEX01FVEVSICgxIDw8IDApIAorI2RlZmluZSBIMlAyX0RCR19GUEdBX0xPQURfTUVURVIgKDEgPDwgMCkKICNkZWZpbmUgSDJQMl9EQkdfRlBHQV9MT0FEX01FVEVSX1NJWkUgMTEKICNkZWZpbmUgSDJQMl9EQkdfRlBHQV9MT0FEX01FVEVSX01BU0sgKCgxIDw8IEgyUDJfREJHX0ZQR0FfTE9BRF9NRVRFUl9TSVpFKSAtIDEpCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEgyUDJfREJHX0ZQR0FfUDJfTEVEX1RJTUVSICgxIDw8IDApCiAjZGVmaW5lIEgyUDJfREJHX0ZQR0FfUDJfTEVEX0lETEUgKDEgPDwgMSkKLQotI2RlZmluZSBPTUFQMTUxMF9GUEdBX0JBU0UgMHhFODAwMDAwMCAgCisjZGVmaW5lIE9NQVAxNTEwX0ZQR0FfQkFTRSAweEU4MDAwMDAwCiAjZGVmaW5lIE9NQVAxNTEwX0ZQR0FfU0laRSBTWl80SwotI2RlZmluZSBPTUFQMTUxMF9GUEdBX1NUQVJUIDB4MDgwMDAwMDAgIAotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBPTUFQMTUxMF9GUEdBX1NUQVJUIDB4MDgwMDAwMDAKICNkZWZpbmUgT01BUDE1MTBfRlBHQV9SRVZfTE9XIChPTUFQMTUxMF9GUEdBX0JBU0UgKyAweDApCiAjZGVmaW5lIE9NQVAxNTEwX0ZQR0FfUkVWX0hJR0ggKE9NQVAxNTEwX0ZQR0FfQkFTRSArIDB4MSkKLQogI2RlZmluZSBPTUFQMTUxMF9GUEdBX0xDRF9QQU5FTF9DT05UUk9MIChPTUFQMTUxMF9GUEdBX0JBU0UgKyAweDIpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBPTUFQMTUxMF9GUEdBX0xFRF9ESUdJVCAoT01BUDE1MTBfRlBHQV9CQVNFICsgMHgzKQogI2RlZmluZSBJTk5PVkFUT1JfRlBHQV9ISURfU1BJIChPTUFQMTUxMF9GUEdBX0JBU0UgKyAweDQpCiAjZGVmaW5lIE9NQVAxNTEwX0ZQR0FfUE9XRVIgKE9NQVAxNTEwX0ZQR0FfQkFTRSArIDB4NSkKLQogI2RlZmluZSBPTUFQMTUxMF9GUEdBX0lTUl9MTyAoT01BUDE1MTBfRlBHQV9CQVNFICsgMHg2KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgT01BUDE1MTBfRlBHQV9JU1JfSEkgKE9NQVAxNTEwX0ZQR0FfQkFTRSArIDB4NykKLQogI2RlZmluZSBPTUFQMTUxMF9GUEdBX0lNUl9MTyAoT01BUDE1MTBfRlBHQV9CQVNFICsgMHg4KQogI2RlZmluZSBPTUFQMTUxMF9GUEdBX0lNUl9ISSAoT01BUDE1MTBfRlBHQV9CQVNFICsgMHg5KQotCiAjZGVmaW5lIE9NQVAxNTEwX0ZQR0FfSE9TVF9SRVNFVCAoT01BUDE1MTBfRlBHQV9CQVNFICsgMHhhKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgT01BUDE1MTBfRlBHQV9SU1QgKE9NQVAxNTEwX0ZQR0FfQkFTRSArIDB4YikKLQogI2RlZmluZSBPTUFQMTUxMF9GUEdBX0FVRElPIChPTUFQMTUxMF9GUEdBX0JBU0UgKyAweGMpCiAjZGVmaW5lIE9NQVAxNTEwX0ZQR0FfRElQIChPTUFQMTUxMF9GUEdBX0JBU0UgKyAweGUpCiAjZGVmaW5lIE9NQVAxNTEwX0ZQR0FfRlBHQV9JTyAoT01BUDE1MTBfRlBHQV9CQVNFICsgMHhmKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgT01BUDE1MTBfRlBHQV9VQVJUMSAoT01BUDE1MTBfRlBHQV9CQVNFICsgMHgxNCkKICNkZWZpbmUgT01BUDE1MTBfRlBHQV9VQVJUMiAoT01BUDE1MTBfRlBHQV9CQVNFICsgMHgxNSkKICNkZWZpbmUgT01BUDE1MTBfRlBHQV9PTUFQMTUxMF9TVEFUVVMgKE9NQVAxNTEwX0ZQR0FfQkFTRSArIDB4MTYpCiAjZGVmaW5lIE9NQVAxNTEwX0ZQR0FfQk9BUkRfUkVWIChPTUFQMTUxMF9GUEdBX0JBU0UgKyAweDE4KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgT01BUDE1MTBQMV9QUFRfREFUQSAoT01BUDE1MTBfRlBHQV9CQVNFICsgMHgxMDApCiAjZGVmaW5lIE9NQVAxNTEwUDFfUFBUX1NUQVRVUyAoT01BUDE1MTBfRlBHQV9CQVNFICsgMHgxMDEpCiAjZGVmaW5lIE9NQVAxNTEwUDFfUFBUX0NPTlRST0wgKE9NQVAxNTEwX0ZQR0FfQkFTRSArIDB4MTAyKQotCiAjZGVmaW5lIE9NQVAxNTEwX0ZQR0FfVE9VQ0hTQ1JFRU4gKE9NQVAxNTEwX0ZQR0FfQkFTRSArIDB4MjA0KQotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJTk5PVkFUT1JfRlBHQV9JTkZPIChPTUFQMTUxMF9GUEdBX0JBU0UgKyAweDIwNSkKICNkZWZpbmUgSU5OT1ZBVE9SX0ZQR0FfTENEX0JSSUdIVF9MTyAoT01BUDE1MTBfRlBHQV9CQVNFICsgMHgyMDYpCiAjZGVmaW5lIElOTk9WQVRPUl9GUEdBX0xDRF9CUklHSFRfSEkgKE9NQVAxNTEwX0ZQR0FfQkFTRSArIDB4MjA3KQogI2RlZmluZSBJTk5PVkFUT1JfRlBHQV9MRURfR1JOX0xPIChPTUFQMTUxMF9GUEdBX0JBU0UgKyAweDIwOCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIElOTk9WQVRPUl9GUEdBX0xFRF9HUk5fSEkgKE9NQVAxNTEwX0ZQR0FfQkFTRSArIDB4MjA5KQogI2RlZmluZSBJTk5PVkFUT1JfRlBHQV9MRURfUkVEX0xPIChPTUFQMTUxMF9GUEdBX0JBU0UgKyAweDIwYSkKICNkZWZpbmUgSU5OT1ZBVE9SX0ZQR0FfTEVEX1JFRF9ISSAoT01BUDE1MTBfRlBHQV9CQVNFICsgMHgyMGIpCiAjZGVmaW5lIElOTk9WQVRPUl9GUEdBX0NBTV9VU0JfQ09OVFJPTCAoT01BUDE1MTBfRlBHQV9CQVNFICsgMHgyMGMpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJTk5PVkFUT1JfRlBHQV9FWFBfQ09OVFJPTCAoT01BUDE1MTBfRlBHQV9CQVNFICsgMHgyMGQpCiAjZGVmaW5lIElOTk9WQVRPUl9GUEdBX0lTUjIgKE9NQVAxNTEwX0ZQR0FfQkFTRSArIDB4MjBlKQogI2RlZmluZSBJTk5PVkFUT1JfRlBHQV9JTVIyIChPTUFQMTUxMF9GUEdBX0JBU0UgKyAweDIxMCkKLQogI2RlZmluZSBPTUFQMTUxMF9GUEdBX0VUSFJfU1RBUlQgKE9NQVAxNTEwX0ZQR0FfU1RBUlQgKyAweDMwMCkKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgT01BUDE1MTBfRlBHQV9SRVNFVF9WQUxVRSAweDQyCi0KICNkZWZpbmUgT01BUDE1MTBfRlBHQV9QQ1JfSUZfUEQwICgxIDw8IDcpCiAjZGVmaW5lIE9NQVAxNTEwX0ZQR0FfUENSX0NPTTJfRU4gKDEgPDwgNikKICNkZWZpbmUgT01BUDE1MTBfRlBHQV9QQ1JfQ09NMV9FTiAoMSA8PCA1KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgT01BUDE1MTBfRlBHQV9QQ1JfRVhQX1BEMCAoMSA8PCA0KQogI2RlZmluZSBPTUFQMTUxMF9GUEdBX1BDUl9FWFBfUEQxICgxIDw8IDMpCiAjZGVmaW5lIE9NQVAxNTEwX0ZQR0FfUENSXzQ4TUhaX0NMSyAoMSA8PCAyKQogI2RlZmluZSBPTUFQMTUxMF9GUEdBX1BDUl80TUhaX0NMSyAoMSA8PCAxKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgT01BUDE1MTBfRlBHQV9QQ1JfUlNSVkRfQklUMCAoMSA8PCAwKQotCi0jZGVmaW5lIE9NQVAxNTEwX0ZQR0FfSElEX1NDTEsgKDE8PDApICAKLSNkZWZpbmUgT01BUDE1MTBfRlBHQV9ISURfTU9TSSAoMTw8MSkgIAotI2RlZmluZSBPTUFQMTUxMF9GUEdBX0hJRF9uU1MgKDE8PDIpICAKLSNkZWZpbmUgT01BUDE1MTBfRlBHQV9ISURfbkhTVVMgKDE8PDMpICAKLSNkZWZpbmUgT01BUDE1MTBfRlBHQV9ISURfTUlTTyAoMTw8NCkgIAotI2RlZmluZSBPTUFQMTUxMF9GUEdBX0hJRF9BVE4gKDE8PDUpICAKKyNkZWZpbmUgT01BUDE1MTBfRlBHQV9ISURfU0NMSyAoMTw8MCkKKyNkZWZpbmUgT01BUDE1MTBfRlBHQV9ISURfTU9TSSAoMTw8MSkKKyNkZWZpbmUgT01BUDE1MTBfRlBHQV9ISURfblNTICgxPDwyKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgT01BUDE1MTBfRlBHQV9ISURfbkhTVVMgKDE8PDMpCisjZGVmaW5lIE9NQVAxNTEwX0ZQR0FfSElEX01JU08gKDE8PDQpCisjZGVmaW5lIE9NQVAxNTEwX0ZQR0FfSElEX0FUTiAoMTw8NSkKICNkZWZpbmUgT01BUDE1MTBfRlBHQV9ISURfcnNydmQgKDE8PDYpCi0jZGVmaW5lIE9NQVAxNTEwX0ZQR0FfSElEX1JFU0VUbiAoMTw8NykgIAotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBPTUFQMTUxMF9GUEdBX0hJRF9SRVNFVG4gKDE8PDcpCiAjZGVmaW5lIE9NQVAxNTEwX0lOVF9GUEdBIChJSF9HUElPX0JBU0UgKyAxMykKLQogI2RlZmluZSBPTUFQMTUxMF9JSF9GUEdBX0JBU0UgSUhfQk9BUkRfQkFTRQogI2RlZmluZSBPTUFQMTUxMF9JTlRfRlBHQV9BVE4gKE9NQVAxNTEwX0lIX0ZQR0FfQkFTRSArIDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBPTUFQMTUxMF9JTlRfRlBHQV9BQ0sgKE9NQVAxNTEwX0lIX0ZQR0FfQkFTRSArIDEpCiAjZGVmaW5lIE9NQVAxNTEwX0lOVF9GUEdBMiAoT01BUDE1MTBfSUhfRlBHQV9CQVNFICsgMikKICNkZWZpbmUgT01BUDE1MTBfSU5UX0ZQR0EzIChPTUFQMTUxMF9JSF9GUEdBX0JBU0UgKyAzKQogI2RlZmluZSBPTUFQMTUxMF9JTlRfRlBHQTQgKE9NQVAxNTEwX0lIX0ZQR0FfQkFTRSArIDQpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBPTUFQMTUxMF9JTlRfRlBHQTUgKE9NQVAxNTEwX0lIX0ZQR0FfQkFTRSArIDUpCiAjZGVmaW5lIE9NQVAxNTEwX0lOVF9GUEdBNiAoT01BUDE1MTBfSUhfRlBHQV9CQVNFICsgNikKICNkZWZpbmUgT01BUDE1MTBfSU5UX0ZQR0E3IChPTUFQMTUxMF9JSF9GUEdBX0JBU0UgKyA3KQogI2RlZmluZSBPTUFQMTUxMF9JTlRfRlBHQTggKE9NQVAxNTEwX0lIX0ZQR0FfQkFTRSArIDgpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBPTUFQMTUxMF9JTlRfRlBHQTkgKE9NQVAxNTEwX0lIX0ZQR0FfQkFTRSArIDkpCiAjZGVmaW5lIE9NQVAxNTEwX0lOVF9GUEdBMTAgKE9NQVAxNTEwX0lIX0ZQR0FfQkFTRSArIDEwKQogI2RlZmluZSBPTUFQMTUxMF9JTlRfRlBHQTExIChPTUFQMTUxMF9JSF9GUEdBX0JBU0UgKyAxMSkKICNkZWZpbmUgT01BUDE1MTBfSU5UX0ZQR0ExMiAoT01BUDE1MTBfSUhfRlBHQV9CQVNFICsgMTIpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBPTUFQMTUxMF9JTlRfRVRIRVIgKE9NQVAxNTEwX0lIX0ZQR0FfQkFTRSArIDEzKQogI2RlZmluZSBPTUFQMTUxMF9JTlRfRlBHQVVBUlQxIChPTUFQMTUxMF9JSF9GUEdBX0JBU0UgKyAxNCkKICNkZWZpbmUgT01BUDE1MTBfSU5UX0ZQR0FVQVJUMiAoT01BUDE1MTBfSUhfRlBHQV9CQVNFICsgMTUpCiAjZGVmaW5lIE9NQVAxNTEwX0lOVF9GUEdBX1RTIChPTUFQMTUxMF9JSF9GUEdBX0JBU0UgKyAxNikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE9NQVAxNTEwX0lOVF9GUEdBMTcgKE9NQVAxNTEwX0lIX0ZQR0FfQkFTRSArIDE3KQogI2RlZmluZSBPTUFQMTUxMF9JTlRfRlBHQV9DQU0gKE9NQVAxNTEwX0lIX0ZQR0FfQkFTRSArIDE4KQogI2RlZmluZSBPTUFQMTUxMF9JTlRfRlBHQV9SVENfQSAoT01BUDE1MTBfSUhfRlBHQV9CQVNFICsgMTkpCiAjZGVmaW5lIE9NQVAxNTEwX0lOVF9GUEdBX1JUQ19CIChPTUFQMTUxMF9JSF9GUEdBX0JBU0UgKyAyMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE9NQVAxNTEwX0lOVF9GUEdBX0NEIChPTUFQMTUxMF9JSF9GUEdBX0JBU0UgKyAyMSkKICNkZWZpbmUgT01BUDE1MTBfSU5UX0ZQR0EyMiAoT01BUDE1MTBfSUhfRlBHQV9CQVNFICsgMjIpCiAjZGVmaW5lIE9NQVAxNTEwX0lOVF9GUEdBMjMgKE9NQVAxNTEwX0lIX0ZQR0FfQkFTRSArIDIzKQotCiAjZW5kaWYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vYXJjaC9ncGlvLXN3aXRjaC5oIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2FyY2gvZ3Bpby1zd2l0Y2guaAppbmRleCAyMGVhM2YyLi5kMThhZTUyIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vYXJjaC9ncGlvLXN3aXRjaC5oCisrKyBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9hcmNoL2dwaW8tc3dpdGNoLmgKQEAgLTcsMzEgKzcsMzUgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9fQVNNX0FSQ0hfT01BUF9HUElPX1NXSVRDSF9ICiAjZGVmaW5lIF9fQVNNX0FSQ0hfT01BUF9HUElPX1NXSVRDSF9ICi0KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotCiAjZGVmaW5lIE9NQVBfR1BJT19TV0lUQ0hfVFlQRV9DT1ZFUiAweDAwMDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE9NQVBfR1BJT19TV0lUQ0hfVFlQRV9DT05ORUNUSU9OIDB4MDAwMQogI2RlZmluZSBPTUFQX0dQSU9fU1dJVENIX1RZUEVfQUNUSVZJVFkgMHgwMDAyCiAjZGVmaW5lIE9NQVBfR1BJT19TV0lUQ0hfRkxBR19JTlZFUlRFRCAweDAwMDEKICNkZWZpbmUgT01BUF9HUElPX1NXSVRDSF9GTEFHX09VVFBVVCAweDAwMDIKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBvbWFwX2dwaW9fc3dpdGNoIHsKICBjb25zdCBjaGFyICpuYW1lOwogIHMxNiBncGlvOwogIHVuc2lnbmVkIGZsYWdzOjQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIHR5cGU6NDsKLQogIHUxNiBkZWJvdW5jZV9yaXNpbmc7Ci0KICB1MTYgZGVib3VuY2VfZmFsbGluZzsKLQogIHZvaWQgKCogbm90aWZ5KSh2b2lkICpkYXRhLCBpbnQgc3RhdGUpOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB2b2lkICpub3RpZnlfZGF0YTsKIH07Ci0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2FyY2gvZ3Bpby5oIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2FyY2gvZ3Bpby5oCmluZGV4IDMzMjI0NmQuLmM5OTVhNzEgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9hcmNoL2dwaW8uaAorKysgYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vYXJjaC9ncGlvLmgKQEAgLTcsNDMgKzcsNDkgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9fQVNNX0FSQ0hfT01BUF9HUElPX0gKICNkZWZpbmUgX19BU01fQVJDSF9PTUFQX0dQSU9fSAotCiAjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvaXJxcy5oPgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNpbmNsdWRlIDxhc20vaW8uaD4KLQogI2RlZmluZSBPTUFQX01QVUlPX0JBU0UgKHZvaWQgX19pb21lbSAqKTB4ZmZmYjUwMDAKLQogI2RlZmluZSBPTUFQX01QVUlPX0lOUFVUX0xBVENIIDB4MDAKICNkZWZpbmUgT01BUF9NUFVJT19PVVRQVVQgMHgwNAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgT01BUF9NUFVJT19JT19DTlRMIDB4MDgKICNkZWZpbmUgT01BUF9NUFVJT19LQlJfTEFUQ0ggMHgxMAogI2RlZmluZSBPTUFQX01QVUlPX0tCQyAweDE0CiAjZGVmaW5lIE9NQVBfTVBVSU9fR1BJT19FVkVOVF9NT0RFIDB4MTgKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE9NQVBfTVBVSU9fR1BJT19JTlRfRURHRSAweDFjCiAjZGVmaW5lIE9NQVBfTVBVSU9fS0JEX0lOVCAweDIwCiAjZGVmaW5lIE9NQVBfTVBVSU9fR1BJT19JTlQgMHgyNAogI2RlZmluZSBPTUFQX01QVUlPX0tCRF9NQVNLSVQgMHgyOAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgT01BUF9NUFVJT19HUElPX01BU0tJVCAweDJjCiAjZGVmaW5lIE9NQVBfTVBVSU9fR1BJT19ERUJPVU5DSU5HIDB4MzAKICNkZWZpbmUgT01BUF9NUFVJT19MQVRDSCAweDM0Ci0KICNkZWZpbmUgT01BUF9NUFVJTyhucikgKE9NQVBfTUFYX0dQSU9fTElORVMgKyAobnIpKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgT01BUF9HUElPX0lTX01QVUlPKG5yKSAoKG5yKSA+PSBPTUFQX01BWF9HUElPX0xJTkVTKQotCiAjZGVmaW5lIE9NQVBfR1BJT19JUlEobnIpIChPTUFQX0dQSU9fSVNfTVBVSU8obnIpID8gICBJSF9NUFVJT19CQVNFICsgKChucikgJiAweDBmKSA6ICAgSUhfR1BJT19CQVNFICsgKG5yKSkKLQogc3RydWN0IG9tYXBfbWFjaGluZV9ncGlvX2JhbmsgewogIGludCBzdGFydDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgaW50IGVuZDsKLQogIHZvaWQgKCpzZXRfZ3Bpb19kaXJlY3Rpb24pKGludCBncGlvLCBpbnQgaXNfaW5wdXQpOwogIHZvaWQgKCpzZXRfZ3Bpb19kYXRhb3V0KShpbnQgZ3BpbywgaW50IGVuYWJsZSk7CiAgaW50ICgqZ2V0X2dwaW9fZGF0YWluKShpbnQgZ3Bpbyk7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKLQogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vYXJjaC9oYXJkd2FyZS5oIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2FyY2gvaGFyZHdhcmUuaAppbmRleCBlNTE1ZWU4Li5hNzc5ZDk2IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vYXJjaC9oYXJkd2FyZS5oCisrKyBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9hcmNoL2hhcmR3YXJlLmgKQEAgLTcsMTUxICs3LDE2OSBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX19BU01fQVJDSF9PTUFQX0hBUkRXQVJFX0gKICNkZWZpbmUgX19BU01fQVJDSF9PTUFQX0hBUkRXQVJFX0gKLQogI2luY2x1ZGUgPGFzbS9zaXplcy5oPgogI2lmbmRlZiBfX0FTU0VNQkxFUl9fCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2luY2x1ZGUgPGFzbS90eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL2NwdS5oPgogI2VuZGlmCiAjaW5jbHVkZSA8YXNtL2FyY2gvaW8uaD4KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjaW5jbHVkZSA8YXNtL2FyY2gvc2VyaWFsLmg+Ci0KICNkZWZpbmUgT01BUF9NUFVfVElNRVIxX0JBU0UgKDB4ZmZmZWM1MDApCiAjZGVmaW5lIE9NQVBfTVBVX1RJTUVSMl9CQVNFICgweGZmZmVjNjAwKQogI2RlZmluZSBPTUFQX01QVV9USU1FUjNfQkFTRSAoMHhmZmZlYzcwMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1QVV9USU1FUl9GUkVFICgxIDw8IDYpCiAjZGVmaW5lIE1QVV9USU1FUl9DTE9DS19FTkFCTEUgKDEgPDwgNSkKICNkZWZpbmUgTVBVX1RJTUVSX0FSICgxIDw8IDEpCiAjZGVmaW5lIE1QVV9USU1FUl9TVCAoMSA8PCAwKQotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBDTEtHRU5fUkVHX0JBU0UgKDB4ZmZmZWNlMDApCiAjZGVmaW5lIEFSTV9DS0NUTCAoQ0xLR0VOX1JFR19CQVNFICsgMHgwKQogI2RlZmluZSBBUk1fSURMRUNUMSAoQ0xLR0VOX1JFR19CQVNFICsgMHg0KQogI2RlZmluZSBBUk1fSURMRUNUMiAoQ0xLR0VOX1JFR19CQVNFICsgMHg4KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQVJNX0VXVVBDVCAoQ0xLR0VOX1JFR19CQVNFICsgMHhDKQogI2RlZmluZSBBUk1fUlNUQ1QxIChDTEtHRU5fUkVHX0JBU0UgKyAweDEwKQogI2RlZmluZSBBUk1fUlNUQ1QyIChDTEtHRU5fUkVHX0JBU0UgKyAweDE0KQogI2RlZmluZSBBUk1fU1lTU1QgKENMS0dFTl9SRUdfQkFTRSArIDB4MTgpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBUk1fSURMRUNUMyAoQ0xLR0VOX1JFR19CQVNFICsgMHgyNCkKLQogI2RlZmluZSBDS19SQVRFRiAxCiAjZGVmaW5lIENLX0lETEVGIDIKICNkZWZpbmUgQ0tfRU5BQkxFRiA0CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBDS19TRUxFQ1RGIDgKICNkZWZpbmUgU0VUQVJNX0lETEVfU0hJRlQKLQogI2RlZmluZSBEUExMX0NUTCAoMHhmZmZlY2YwMCkKLQogI2RlZmluZSBEU1BfQ09ORklHX1JFR19CQVNFICgweGUxMDA4MDAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRFNQX0NLQ1RMIChEU1BfQ09ORklHX1JFR19CQVNFICsgMHgwKQogI2RlZmluZSBEU1BfSURMRUNUMSAoRFNQX0NPTkZJR19SRUdfQkFTRSArIDB4NCkKICNkZWZpbmUgRFNQX0lETEVDVDIgKERTUF9DT05GSUdfUkVHX0JBU0UgKyAweDgpCiAjZGVmaW5lIERTUF9SU1RDVDIgKERTUF9DT05GSUdfUkVHX0JBU0UgKyAweDE0KQotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBVTFBEX1JFR19CQVNFICgweGZmZmUwODAwKQogI2RlZmluZSBVTFBEX0lUX1NUQVRVUyAoVUxQRF9SRUdfQkFTRSArIDB4MTQpCiAjZGVmaW5lIFVMUERfU0VUVVBfQU5BTE9HX0NFTExfMyAoVUxQRF9SRUdfQkFTRSArIDB4MjQpCiAjZGVmaW5lIFVMUERfQ0xPQ0tfQ1RSTCAoVUxQRF9SRUdfQkFTRSArIDB4MzApCi0jZGVmaW5lIERJU19VU0JfUFZDSV9DTEsgKDEgPDwgNSkgIAotI2RlZmluZSBVU0JfTUNMS19FTiAoMSA8PCA0KSAgCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBESVNfVVNCX1BWQ0lfQ0xLICgxIDw8IDUpCisjZGVmaW5lIFVTQl9NQ0xLX0VOICgxIDw8IDQpCiAjZGVmaW5lIFVMUERfU09GVF9SRVEgKFVMUERfUkVHX0JBU0UgKyAweDM0KQogI2RlZmluZSBTT0ZUX1VEQ19SRVEgKDEgPDwgNCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNPRlRfVVNCX0NMS19SRVEgKDEgPDwgMykKICNkZWZpbmUgU09GVF9EUExMX1JFUSAoMSA8PCAwKQogI2RlZmluZSBVTFBEX0RQTExfQ1RSTCAoVUxQRF9SRUdfQkFTRSArIDB4M2MpCiAjZGVmaW5lIFVMUERfU1RBVFVTX1JFUSAoVUxQRF9SRUdfQkFTRSArIDB4NDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBVTFBEX0FQTExfQ1RSTCAoVUxQRF9SRUdfQkFTRSArIDB4NGMpCiAjZGVmaW5lIFVMUERfUE9XRVJfQ1RSTCAoVUxQRF9SRUdfQkFTRSArIDB4NTApCiAjZGVmaW5lIFVMUERfU09GVF9ESVNBQkxFX1JFUV9SRUcgKFVMUERfUkVHX0JBU0UgKyAweDY4KQogI2RlZmluZSBESVNfTU1DMl9EUExMX1JFUSAoMSA8PCAxMSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIERJU19NTUMxX0RQTExfUkVRICgxIDw8IDEwKQogI2RlZmluZSBESVNfVUFSVDNfRFBMTF9SRVEgKDEgPDwgOSkKICNkZWZpbmUgRElTX1VBUlQyX0RQTExfUkVRICgxIDw8IDgpCiAjZGVmaW5lIERJU19VQVJUMV9EUExMX1JFUSAoMSA8PCA3KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRElTX1VTQl9IT1NUX0RQTExfUkVRICgxIDw8IDYpCiAjZGVmaW5lIFVMUERfU0RXX0NMS19ESVZfQ1RSTF9TRUwgKFVMUERfUkVHX0JBU0UgKyAweDc0KQogI2RlZmluZSBVTFBEX0NBTV9DTEtfQ1RSTCAoVUxQRF9SRUdfQkFTRSArIDB4N2MpCi0KICNkZWZpbmUgT01BUF9NUFVfV0FUQ0hET0dfQkFTRSAoMHhmZmZlYzgwMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE9NQVBfV0RUX1RJTUVSIChPTUFQX01QVV9XQVRDSERPR19CQVNFICsgMHgwKQogI2RlZmluZSBPTUFQX1dEVF9MT0FEX1RJTSAoT01BUF9NUFVfV0FUQ0hET0dfQkFTRSArIDB4NCkKICNkZWZpbmUgT01BUF9XRFRfUkVBRF9USU0gKE9NQVBfTVBVX1dBVENIRE9HX0JBU0UgKyAweDQpCiAjZGVmaW5lIE9NQVBfV0RUX1RJTUVSX01PREUgKE9NQVBfTVBVX1dBVENIRE9HX0JBU0UgKyAweDgpCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1PRF9DT05GX0NUUkxfMCAweGZmZmUxMDgwCiAjZGVmaW5lIE1PRF9DT05GX0NUUkxfMSAweGZmZmUxMTEwCi0KICNkZWZpbmUgRlVOQ19NVVhfQ1RSTF8wIDB4ZmZmZTEwMDAKICNkZWZpbmUgRlVOQ19NVVhfQ1RSTF8xIDB4ZmZmZTEwMDQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEZVTkNfTVVYX0NUUkxfMiAweGZmZmUxMDA4CiAjZGVmaW5lIENPTVBfTU9ERV9DVFJMXzAgMHhmZmZlMTAwYwogI2RlZmluZSBGVU5DX01VWF9DVFJMXzMgMHhmZmZlMTAxMAogI2RlZmluZSBGVU5DX01VWF9DVFJMXzQgMHhmZmZlMTAxNAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRlVOQ19NVVhfQ1RSTF81IDB4ZmZmZTEwMTgKICNkZWZpbmUgRlVOQ19NVVhfQ1RSTF82IDB4ZmZmZTEwMUMKICNkZWZpbmUgRlVOQ19NVVhfQ1RSTF83IDB4ZmZmZTEwMjAKICNkZWZpbmUgRlVOQ19NVVhfQ1RSTF84IDB4ZmZmZTEwMjQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEZVTkNfTVVYX0NUUkxfOSAweGZmZmUxMDI4CiAjZGVmaW5lIEZVTkNfTVVYX0NUUkxfQSAweGZmZmUxMDJDCiAjZGVmaW5lIEZVTkNfTVVYX0NUUkxfQiAweGZmZmUxMDMwCiAjZGVmaW5lIEZVTkNfTVVYX0NUUkxfQyAweGZmZmUxMDM0CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBGVU5DX01VWF9DVFJMX0QgMHhmZmZlMTAzOAogI2RlZmluZSBQVUxMX0RXTl9DVFJMXzAgMHhmZmZlMTA0MAogI2RlZmluZSBQVUxMX0RXTl9DVFJMXzEgMHhmZmZlMTA0NAogI2RlZmluZSBQVUxMX0RXTl9DVFJMXzIgMHhmZmZlMTA0OAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUFVMTF9EV05fQ1RSTF8zIDB4ZmZmZTEwNGMKICNkZWZpbmUgUFVMTF9EV05fQ1RSTF80IDB4ZmZmZTEwYWMKLQogI2RlZmluZSBGVU5DX01VWF9DVFJMX0UgMHhmZmZlMTA5MAogI2RlZmluZSBGVU5DX01VWF9DVFJMX0YgMHhmZmZlMTA5NAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRlVOQ19NVVhfQ1RSTF8xMCAweGZmZmUxMDk4CiAjZGVmaW5lIEZVTkNfTVVYX0NUUkxfMTEgMHhmZmZlMTA5YwogI2RlZmluZSBGVU5DX01VWF9DVFJMXzEyIDB4ZmZmZTEwYTAKICNkZWZpbmUgUFVfUERfU0VMXzAgMHhmZmZlMTBiNAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUFVfUERfU0VMXzEgMHhmZmZlMTBiOAogI2RlZmluZSBQVV9QRF9TRUxfMiAweGZmZmUxMGJjCiAjZGVmaW5lIFBVX1BEX1NFTF8zIDB4ZmZmZTEwYzAKICNkZWZpbmUgUFVfUERfU0VMXzQgMHhmZmZlMTBjNAotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBPTUFQX1RJTUVSMzJLX0JBU0UgMHhGRkZCQzQwMAotCiAjZGVmaW5lIFRJUEJfUFVCTElDX0NOVExfQkFTRSAweGZmZmVkMzAwCiAjZGVmaW5lIE1QVV9QVUJMSUNfVElQQl9DTlRMIChUSVBCX1BVQkxJQ19DTlRMX0JBU0UgKyAweDgpCiAjZGVmaW5lIFRJUEJfUFJJVkFURV9DTlRMX0JBU0UgMHhmZmZlY2EwMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTVBVX1BSSVZBVEVfVElQQl9DTlRMIChUSVBCX1BSSVZBVEVfQ05UTF9CQVNFICsgMHg4KQotCiAjZGVmaW5lIE1QVUlfQkFTRSAoMHhmZmZlYzkwMCkKICNkZWZpbmUgTVBVSV9DVFJMIChNUFVJX0JBU0UgKyAweDApCiAjZGVmaW5lIE1QVUlfREVCVUdfQUREUiAoTVBVSV9CQVNFICsgMHg0KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTVBVSV9ERUJVR19EQVRBIChNUFVJX0JBU0UgKyAweDgpCiAjZGVmaW5lIE1QVUlfREVCVUdfRkxBRyAoTVBVSV9CQVNFICsgMHhjKQogI2RlZmluZSBNUFVJX1NUQVRVU19SRUcgKE1QVUlfQkFTRSArIDB4MTApCiAjZGVmaW5lIE1QVUlfRFNQX1NUQVRVUyAoTVBVSV9CQVNFICsgMHgxNCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1QVUlfRFNQX0JPT1RfQ09ORklHIChNUFVJX0JBU0UgKyAweDE4KQogI2RlZmluZSBNUFVJX0RTUF9BUElfQ09ORklHIChNUFVJX0JBU0UgKyAweDFjKQotCiAjZGVmaW5lIE9NQVBfTFBHMV9CQVNFIDB4ZmZmYmQwMDAKICNkZWZpbmUgT01BUF9MUEcyX0JBU0UgMHhmZmZiZDgwMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgT01BUF9MUEcxX0xDUiAoT01BUF9MUEcxX0JBU0UgKyAweDAwKQogI2RlZmluZSBPTUFQX0xQRzFfUE1SIChPTUFQX0xQRzFfQkFTRSArIDB4MDQpCiAjZGVmaW5lIE9NQVBfTFBHMl9MQ1IgKE9NQVBfTFBHMl9CQVNFICsgMHgwMCkKICNkZWZpbmUgT01BUF9MUEcyX1BNUiAoT01BUF9MUEcyX0JBU0UgKyAweDA0KQotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBPTUFQX1BXTF9CQVNFIDB4ZmZmYjU4MDAKICNkZWZpbmUgT01BUF9QV0xfRU5BQkxFIChPTUFQX1BXTF9CQVNFICsgMHgwMCkKICNkZWZpbmUgT01BUF9QV0xfQ0xLX0VOQUJMRSAoT01BUF9QV0xfQkFTRSArIDB4MDQpCi0KICNpbmNsdWRlICJvbWFwNzMwLmgiCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2luY2x1ZGUgIm9tYXAxNTEwLmgiCiAjaW5jbHVkZSAib21hcDI0eHguaCIKICNpbmNsdWRlICJvbWFwMTZ4eC5oIgotCiAjaWZuZGVmIF9fQVNTRU1CTEVSX18KLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlbmRpZgotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9hcmNoL2lvLmggYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vYXJjaC9pby5oCmluZGV4IDEyYWMzZDQuLjQ3NTM0NWEgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9hcmNoL2lvLmgKKysrIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2FyY2gvaW8uaApAQCAtNyw0OCArNyw0OCBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX19BU01fQVJNX0FSQ0hfSU9fSAogI2RlZmluZSBfX0FTTV9BUk1fQVJDSF9JT19ICi0KICNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KLQogI2RlZmluZSBJT19TUEFDRV9MSU1JVCAweGZmZmZmZmZmCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9faW8oYSkgKCh2b2lkIF9faW9tZW0gKikoUENJT19CQVNFICsgKGEpKSkKICNkZWZpbmUgX19tZW1fcGNpKGEpIChhKQotCiAjZGVmaW5lIFBDSU9fQkFTRSAwCi0KICNpZm5kZWYgX19BU1NFTUJMRVJfXwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBvbWFwX3JlYWRiKGEpICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKilJT19BRERSRVNTKGEpKQogI2RlZmluZSBvbWFwX3JlYWR3KGEpICgqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopSU9fQUREUkVTUyhhKSkKICNkZWZpbmUgb21hcF9yZWFkbChhKSAoKih2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKilJT19BRERSRVNTKGEpKQotCiAjZGVmaW5lIG9tYXBfd3JpdGViKHYsYSkgKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKUlPX0FERFJFU1MoYSkgPSAodikpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBvbWFwX3dyaXRldyh2LGEpICgqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopSU9fQUREUkVTUyhhKSA9ICh2KSkKICNkZWZpbmUgb21hcF93cml0ZWwodixhKSAoKih2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKilJT19BRERSRVNTKGEpID0gKHYpKQotCiB0eXBlZGVmIHN0cnVjdCB7IHZvbGF0aWxlIHUxNiBvZmZzZXRbMjU2XTsgfSBfX3JlZ2Jhc2UxNjsKICNkZWZpbmUgX19SRUdWMTYodmFkZHIpICgoX19yZWdiYXNlMTYgKikoKHZhZGRyKSZ+MHhmZikpICAgLT5vZmZzZXRbKCh2YWRkcikmMHhmZik+PjFdCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX1JFRzE2KHBhZGRyKSBfX1JFR1YxNihpb19wMnYocGFkZHIpKQotCiB0eXBlZGVmIHN0cnVjdCB7IHZvbGF0aWxlIHU4IG9mZnNldFs0MDk2XTsgfSBfX3JlZ2Jhc2U4OwogI2RlZmluZSBfX1JFR1Y4KHZhZGRyKSAoKF9fcmVnYmFzZTggKikoKHZhZGRyKSZ+NDA5NSkpICAgLT5vZmZzZXRbKCh2YWRkcikmNDA5NSk+PjBdCiAjZGVmaW5lIF9fUkVHOChwYWRkcikgX19SRUdWOChpb19wMnYocGFkZHIpKQotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogdHlwZWRlZiBzdHJ1Y3QgeyB2b2xhdGlsZSB1MzIgb2Zmc2V0WzQwOTZdOyB9IF9fcmVnYmFzZTMyOwogI2RlZmluZSBfX1JFR1YzMih2YWRkcikgKChfX3JlZ2Jhc2UzMiAqKSgodmFkZHIpJn40MDk1KSkgICAtPm9mZnNldFsoKHZhZGRyKSY0MDk1KT4+Ml0KICNkZWZpbmUgX19SRUczMihwYWRkcikgX19SRUdWMzIoaW9fcDJ2KHBhZGRyKSkKLQogI2Vsc2UKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19SRUc4KHBhZGRyKSBpb19wMnYocGFkZHIpCiAjZGVmaW5lIF9fUkVHMTYocGFkZHIpIGlvX3AydihwYWRkcikKICNkZWZpbmUgX19SRUczMihwYWRkcikgaW9fcDJ2KHBhZGRyKQotCiAjZW5kaWYKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2FyY2gvaXJxcy5oIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2FyY2gvaXJxcy5oCmluZGV4IDNlOTQ0ODcuLjcxMzA2YTUgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9hcmNoL2lycXMuaAorKysgYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vYXJjaC9pcnFzLmgKQEAgLTcsMjM2ICs3LDI3OSBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX19BU01fQVJDSF9PTUFQMTVYWF9JUlFTX0gKICNkZWZpbmUgX19BU01fQVJDSF9PTUFQMTVYWF9JUlFTX0gKLQogI2RlZmluZSBJTlRfQ0FNRVJBIDEKICNkZWZpbmUgSU5UX0ZJUSAzCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJTlRfUlREWCA2CiAjZGVmaW5lIElOVF9EU1BfTU1VX0FCT1JUIDcKICNkZWZpbmUgSU5UX0hPU1QgOAogI2RlZmluZSBJTlRfQUJPUlQgOQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSU5UX0RTUF9NQUlMQk9YMSAxMAogI2RlZmluZSBJTlRfRFNQX01BSUxCT1gyIDExCiAjZGVmaW5lIElOVF9CUklER0VfUFJJViAxMwogI2RlZmluZSBJTlRfR1BJT19CQU5LMSAxNAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSU5UX1VBUlQzIDE1CiAjZGVmaW5lIElOVF9USU1FUjMgMTYKICNkZWZpbmUgSU5UX0RNQV9DSDBfNiAxOQogI2RlZmluZSBJTlRfRE1BX0NIMV83IDIwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJTlRfRE1BX0NIMl84IDIxCiAjZGVmaW5lIElOVF9ETUFfQ0gzIDIyCiAjZGVmaW5lIElOVF9ETUFfQ0g0IDIzCiAjZGVmaW5lIElOVF9ETUFfQ0g1IDI0CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJTlRfRE1BX0xDRCAyNQogI2RlZmluZSBJTlRfVElNRVIxIDI2CiAjZGVmaW5lIElOVF9XRF9USU1FUiAyNwogI2RlZmluZSBJTlRfQlJJREdFX1BVQiAyOAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSU5UX1RJTUVSMiAzMAogI2RlZmluZSBJTlRfTENEX0NUUkwgMzEKLQogI2RlZmluZSBJTlRfMTUxMF9JSDJfSVJRIDAKICNkZWZpbmUgSU5UXzE1MTBfUkVTMiAyCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJTlRfMTUxMF9TUElfVFggNAogI2RlZmluZSBJTlRfMTUxMF9TUElfUlggNQogI2RlZmluZSBJTlRfMTUxMF9SRVMxMiAxMgogI2RlZmluZSBJTlRfMTUxMF9MQl9NTVUgMTcKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIElOVF8xNTEwX1JFUzE4IDE4CiAjZGVmaW5lIElOVF8xNTEwX0xPQ0FMX0JVUyAyOQotCiAjZGVmaW5lIElOVF8xNjEwX0lIMl9JUlEgMAogI2RlZmluZSBJTlRfMTYxMF9JSDJfRklRIDIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIElOVF8xNjEwX01jQlNQMl9UWCA0CiAjZGVmaW5lIElOVF8xNjEwX01jQlNQMl9SWCA1CiAjZGVmaW5lIElOVF8xNjEwX0xDRF9MSU5FIDEyCiAjZGVmaW5lIElOVF8xNjEwX0dQVElNRVIxIDE3CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJTlRfMTYxMF9HUFRJTUVSMiAxOAogI2RlZmluZSBJTlRfMTYxMF9TU1JfRklGT18wIDI5Ci0KICNkZWZpbmUgSU5UXzczMF9JSDJfRklRIDAKICNkZWZpbmUgSU5UXzczMF9JSDJfSVJRIDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIElOVF83MzBfVVNCX05PTl9JU08gMgogI2RlZmluZSBJTlRfNzMwX1VTQl9JU08gMwogI2RlZmluZSBJTlRfNzMwX0lDUiA0CiAjZGVmaW5lIElOVF83MzBfRUFDIDUKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIElOVF83MzBfR1BJT19CQU5LMSA2CiAjZGVmaW5lIElOVF83MzBfR1BJT19CQU5LMiA3CiAjZGVmaW5lIElOVF83MzBfR1BJT19CQU5LMyA4CiAjZGVmaW5lIElOVF83MzBfTWNCU1AyVFggMTAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIElOVF83MzBfTWNCU1AyUlggMTEKICNkZWZpbmUgSU5UXzczMF9NY0JTUDJSWF9PVkYgMTIKICNkZWZpbmUgSU5UXzczMF9MQ0RfTElORSAxNAogI2RlZmluZSBJTlRfNzMwX0dTTV9QUk9URUNUIDE1CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJTlRfNzMwX1RJTUVSMyAxNgogI2RlZmluZSBJTlRfNzMwX0dQSU9fQkFOSzUgMTcKICNkZWZpbmUgSU5UXzczMF9HUElPX0JBTks2IDE4CiAjZGVmaW5lIElOVF83MzBfU1BHSU9fV1IgMjkKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSUgyX0JBU0UgMzIKLQogI2RlZmluZSBJTlRfS0VZQk9BUkQgKDEgKyBJSDJfQkFTRSkKICNkZWZpbmUgSU5UX3VXaXJlVFggKDIgKyBJSDJfQkFTRSkKICNkZWZpbmUgSU5UX3VXaXJlUlggKDMgKyBJSDJfQkFTRSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIElOVF9JMkMgKDQgKyBJSDJfQkFTRSkKICNkZWZpbmUgSU5UX01QVUlPICg1ICsgSUgyX0JBU0UpCiAjZGVmaW5lIElOVF9VU0JfSEhDXzEgKDYgKyBJSDJfQkFTRSkKICNkZWZpbmUgSU5UX01jQlNQM1RYICgxMCArIElIMl9CQVNFKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSU5UX01jQlNQM1JYICgxMSArIElIMl9CQVNFKQogI2RlZmluZSBJTlRfTWNCU1AxVFggKDEyICsgSUgyX0JBU0UpCiAjZGVmaW5lIElOVF9NY0JTUDFSWCAoMTMgKyBJSDJfQkFTRSkKICNkZWZpbmUgSU5UX1VBUlQyICgxNCArIElIMl9CQVNFKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSU5UX1VBUlQxICgxNSArIElIMl9CQVNFKQogI2RlZmluZSBJTlRfQlRfTUNTSTFUWCAoMTYgKyBJSDJfQkFTRSkKICNkZWZpbmUgSU5UX0JUX01DU0kxUlggKDE3ICsgSUgyX0JBU0UpCiAjZGVmaW5lIElOVF9VU0JfVzJGQyAoMjAgKyBJSDJfQkFTRSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIElOVF8xV0lSRSAoMjEgKyBJSDJfQkFTRSkKICNkZWZpbmUgSU5UX09TX1RJTUVSICgyMiArIElIMl9CQVNFKQogI2RlZmluZSBJTlRfTU1DICgyMyArIElIMl9CQVNFKQogI2RlZmluZSBJTlRfR0FVR0VfMzJLICgyNCArIElIMl9CQVNFKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSU5UX1JUQ19USU1FUiAoMjUgKyBJSDJfQkFTRSkKICNkZWZpbmUgSU5UX1JUQ19BTEFSTSAoMjYgKyBJSDJfQkFTRSkKICNkZWZpbmUgSU5UX01FTV9TVElDSyAoMjcgKyBJSDJfQkFTRSkKICNkZWZpbmUgSU5UX0RTUF9NTVUgKDI4ICsgSUgyX0JBU0UpCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIElOVF8xNTEwX0NPTV9TUElfUk8gKDMxICsgSUgyX0JBU0UpCi0KICNkZWZpbmUgSU5UXzE2MTBfRkFDICgwICsgSUgyX0JBU0UpCiAjZGVmaW5lIElOVF8xNjEwX1VTQl9ISENfMiAoNyArIElIMl9CQVNFKQogI2RlZmluZSBJTlRfMTYxMF9VU0JfT1RHICg4ICsgSUgyX0JBU0UpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJTlRfMTYxMF9Tb1NTSSAoOSArIElIMl9CQVNFKQogI2RlZmluZSBJTlRfMTYxMF9Tb1NTSV9NQVRDSCAoMTkgKyBJSDJfQkFTRSkKICNkZWZpbmUgSU5UXzE2MTBfTWNCU1AyUlhfT0YgKDMxICsgSUgyX0JBU0UpCiAjZGVmaW5lIElOVF8xNjEwX1NUSSAoMzIgKyBJSDJfQkFTRSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIElOVF8xNjEwX1NUSV9XQUtFVVAgKDMzICsgSUgyX0JBU0UpCiAjZGVmaW5lIElOVF8xNjEwX0dQVElNRVIzICgzNCArIElIMl9CQVNFKQogI2RlZmluZSBJTlRfMTYxMF9HUFRJTUVSNCAoMzUgKyBJSDJfQkFTRSkKICNkZWZpbmUgSU5UXzE2MTBfR1BUSU1FUjUgKDM2ICsgSUgyX0JBU0UpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJTlRfMTYxMF9HUFRJTUVSNiAoMzcgKyBJSDJfQkFTRSkKICNkZWZpbmUgSU5UXzE2MTBfR1BUSU1FUjcgKDM4ICsgSUgyX0JBU0UpCiAjZGVmaW5lIElOVF8xNjEwX0dQVElNRVI4ICgzOSArIElIMl9CQVNFKQogI2RlZmluZSBJTlRfMTYxMF9HUElPX0JBTksyICg0MCArIElIMl9CQVNFKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSU5UXzE2MTBfR1BJT19CQU5LMyAoNDEgKyBJSDJfQkFTRSkKICNkZWZpbmUgSU5UXzE2MTBfTU1DMiAoNDIgKyBJSDJfQkFTRSkKICNkZWZpbmUgSU5UXzE2MTBfQ0YgKDQzICsgSUgyX0JBU0UpCiAjZGVmaW5lIElOVF8xNjEwX1dBS0VfVVBfUkVRICg0NiArIElIMl9CQVNFKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSU5UXzE2MTBfR1BJT19CQU5LNCAoNDggKyBJSDJfQkFTRSkKICNkZWZpbmUgSU5UXzE2MTBfU1BJICg0OSArIElIMl9CQVNFKQogI2RlZmluZSBJTlRfMTYxMF9ETUFfQ0g2ICg1MyArIElIMl9CQVNFKQogI2RlZmluZSBJTlRfMTYxMF9ETUFfQ0g3ICg1NCArIElIMl9CQVNFKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSU5UXzE2MTBfRE1BX0NIOCAoNTUgKyBJSDJfQkFTRSkKICNkZWZpbmUgSU5UXzE2MTBfRE1BX0NIOSAoNTYgKyBJSDJfQkFTRSkKICNkZWZpbmUgSU5UXzE2MTBfRE1BX0NIMTAgKDU3ICsgSUgyX0JBU0UpCiAjZGVmaW5lIElOVF8xNjEwX0RNQV9DSDExICg1OCArIElIMl9CQVNFKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSU5UXzE2MTBfRE1BX0NIMTIgKDU5ICsgSUgyX0JBU0UpCiAjZGVmaW5lIElOVF8xNjEwX0RNQV9DSDEzICg2MCArIElIMl9CQVNFKQogI2RlZmluZSBJTlRfMTYxMF9ETUFfQ0gxNCAoNjEgKyBJSDJfQkFTRSkKICNkZWZpbmUgSU5UXzE2MTBfRE1BX0NIMTUgKDYyICsgSUgyX0JBU0UpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJTlRfMTYxMF9OQU5EICg2MyArIElIMl9CQVNFKQotCiAjZGVmaW5lIElOVF83MzBfSFdfRVJST1JTICgwICsgSUgyX0JBU0UpCiAjZGVmaW5lIElOVF83MzBfTkZJUV9QV1JfRkFJTCAoMSArIElIMl9CQVNFKQogI2RlZmluZSBJTlRfNzMwX0NGQ0QgKDIgKyBJSDJfQkFTRSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIElOVF83MzBfQ0ZJUkVRICgzICsgSUgyX0JBU0UpCiAjZGVmaW5lIElOVF83MzBfSTJDICg0ICsgSUgyX0JBU0UpCiAjZGVmaW5lIElOVF83MzBfUENDICg1ICsgSUgyX0JBU0UpCiAjZGVmaW5lIElOVF83MzBfTVBVX0VYVF9OSVJRICg2ICsgSUgyX0JBU0UpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJTlRfNzMwX1NQSV8xMDBLXzEgKDcgKyBJSDJfQkFTRSkKICNkZWZpbmUgSU5UXzczMF9TWVJFTl9TUEkgKDggKyBJSDJfQkFTRSkKICNkZWZpbmUgSU5UXzczMF9WTFlOUSAoOSArIElIMl9CQVNFKQogI2RlZmluZSBJTlRfNzMwX0dQSU9fQkFOSzQgKDEwICsgSUgyX0JBU0UpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJTlRfNzMwX01jQlNQMVRYICgxMSArIElIMl9CQVNFKQogI2RlZmluZSBJTlRfNzMwX01jQlNQMVJYICgxMiArIElIMl9CQVNFKQogI2RlZmluZSBJTlRfNzMwX01jQlNQMVJYX09GICgxMyArIElIMl9CQVNFKQogI2RlZmluZSBJTlRfNzMwX1VBUlRfTU9ERU1fSVJEQV8yICgxNCArIElIMl9CQVNFKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSU5UXzczMF9VQVJUX01PREVNXzEgKDE1ICsgSUgyX0JBU0UpCiAjZGVmaW5lIElOVF83MzBfTUNTSSAoMTYgKyBJSDJfQkFTRSkKICNkZWZpbmUgSU5UXzczMF91V2lyZVRYICgxNyArIElIMl9CQVNFKQogI2RlZmluZSBJTlRfNzMwX3VXaXJlUlggKDE4ICsgSUgyX0JBU0UpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJTlRfNzMwX1NNQ19DRCAoMTkgKyBJSDJfQkFTRSkKICNkZWZpbmUgSU5UXzczMF9TTUNfSVJFUSAoMjAgKyBJSDJfQkFTRSkKICNkZWZpbmUgSU5UXzczMF9IRFFfMVdJUkUgKDIxICsgSUgyX0JBU0UpCiAjZGVmaW5lIElOVF83MzBfVElNRVIzMksgKDIyICsgSUgyX0JBU0UpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJTlRfNzMwX01NQ19TRElPICgyMyArIElIMl9CQVNFKQogI2RlZmluZSBJTlRfNzMwX1VQTEQgKDI0ICsgSUgyX0JBU0UpCiAjZGVmaW5lIElOVF83MzBfVVNCX0hIQ18xICgyNyArIElIMl9CQVNFKQogI2RlZmluZSBJTlRfNzMwX1VTQl9ISENfMiAoMjggKyBJSDJfQkFTRSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIElOVF83MzBfVVNCX0dFTkkgKDI5ICsgSUgyX0JBU0UpCiAjZGVmaW5lIElOVF83MzBfVVNCX09URyAoMzAgKyBJSDJfQkFTRSkKICNkZWZpbmUgSU5UXzczMF9DQU1FUkFfSUYgKDMxICsgSUgyX0JBU0UpCiAjZGVmaW5lIElOVF83MzBfUk5HICgzMiArIElIMl9CQVNFKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSU5UXzczMF9EVUFMX01PREVfVElNRVIgKDMzICsgSUgyX0JBU0UpCiAjZGVmaW5lIElOVF83MzBfREJCX1JGX0VOICgzNCArIElIMl9CQVNFKQogI2RlZmluZSBJTlRfNzMwX01QVUlPX0tFWVBBRCAoMzUgKyBJSDJfQkFTRSkKICNkZWZpbmUgSU5UXzczMF9TSEExX01ENSAoMzYgKyBJSDJfQkFTRSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIElOVF83MzBfU1BJXzEwMEtfMiAoMzcgKyBJSDJfQkFTRSkKICNkZWZpbmUgSU5UXzczMF9STkdfSURMRSAoMzggKyBJSDJfQkFTRSkKICNkZWZpbmUgSU5UXzczMF9NUFVJTyAoMzkgKyBJSDJfQkFTRSkKICNkZWZpbmUgSU5UXzczMF9MTFBDX0xDRF9DVFJMX0NBTl9CRV9PRkYgKDQwICsgSUgyX0JBU0UpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJTlRfNzMwX0xMUENfT0VfRkFMTElORyAoNDEgKyBJSDJfQkFTRSkKICNkZWZpbmUgSU5UXzczMF9MTFBDX09FX1JJU0lORyAoNDIgKyBJSDJfQkFTRSkKICNkZWZpbmUgSU5UXzczMF9MTFBDX1ZTWU5DICg0MyArIElIMl9CQVNFKQogI2RlZmluZSBJTlRfNzMwX1dBS0VfVVBfUkVRICg0NiArIElIMl9CQVNFKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSU5UXzczMF9ETUFfQ0g2ICg1MyArIElIMl9CQVNFKQogI2RlZmluZSBJTlRfNzMwX0RNQV9DSDcgKDU0ICsgSUgyX0JBU0UpCiAjZGVmaW5lIElOVF83MzBfRE1BX0NIOCAoNTUgKyBJSDJfQkFTRSkKICNkZWZpbmUgSU5UXzczMF9ETUFfQ0g5ICg1NiArIElIMl9CQVNFKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSU5UXzczMF9ETUFfQ0gxMCAoNTcgKyBJSDJfQkFTRSkKICNkZWZpbmUgSU5UXzczMF9ETUFfQ0gxMSAoNTggKyBJSDJfQkFTRSkKICNkZWZpbmUgSU5UXzczMF9ETUFfQ0gxMiAoNTkgKyBJSDJfQkFTRSkKICNkZWZpbmUgSU5UXzczMF9ETUFfQ0gxMyAoNjAgKyBJSDJfQkFTRSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIElOVF83MzBfRE1BX0NIMTQgKDYxICsgSUgyX0JBU0UpCiAjZGVmaW5lIElOVF83MzBfRE1BX0NIMTUgKDYyICsgSUgyX0JBU0UpCiAjZGVmaW5lIElOVF83MzBfTkFORCAoNjMgKyBJSDJfQkFTRSkKLQogI2RlZmluZSBJTlRfMjRYWF9TWVNfTklSUSA3CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJTlRfMjRYWF9TRE1BX0lSUTAgMTIKICNkZWZpbmUgSU5UXzI0WFhfU0RNQV9JUlExIDEzCiAjZGVmaW5lIElOVF8yNFhYX1NETUFfSVJRMiAxNAogI2RlZmluZSBJTlRfMjRYWF9TRE1BX0lSUTMgMTUKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIElOVF8yNFhYX0NBTV9JUlEgMjQKICNkZWZpbmUgSU5UXzI0WFhfRFNTX0lSUSAyNQogI2RlZmluZSBJTlRfMjRYWF9HUElPX0JBTksxIDI5CiAjZGVmaW5lIElOVF8yNFhYX0dQSU9fQkFOSzIgMzAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIElOVF8yNFhYX0dQSU9fQkFOSzMgMzEKICNkZWZpbmUgSU5UXzI0WFhfR1BJT19CQU5LNCAzMgogI2RlZmluZSBJTlRfMjRYWF9HUFRJTUVSMSAzNwogI2RlZmluZSBJTlRfMjRYWF9HUFRJTUVSMiAzOAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSU5UXzI0WFhfR1BUSU1FUjMgMzkKICNkZWZpbmUgSU5UXzI0WFhfR1BUSU1FUjQgNDAKICNkZWZpbmUgSU5UXzI0WFhfR1BUSU1FUjUgNDEKICNkZWZpbmUgSU5UXzI0WFhfR1BUSU1FUjYgNDIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIElOVF8yNFhYX0dQVElNRVI3IDQzCiAjZGVmaW5lIElOVF8yNFhYX0dQVElNRVI4IDQ0CiAjZGVmaW5lIElOVF8yNFhYX0dQVElNRVI5IDQ1CiAjZGVmaW5lIElOVF8yNFhYX0dQVElNRVIxMCA0NgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSU5UXzI0WFhfR1BUSU1FUjExIDQ3CiAjZGVmaW5lIElOVF8yNFhYX0dQVElNRVIxMiA0OAogI2RlZmluZSBJTlRfMjRYWF9NQ0JTUDFfSVJRX1RYIDU5CiAjZGVmaW5lIElOVF8yNFhYX01DQlNQMV9JUlFfUlggNjAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIElOVF8yNFhYX01DQlNQMl9JUlFfVFggNjIKICNkZWZpbmUgSU5UXzI0WFhfTUNCU1AyX0lSUV9SWCA2MwogI2RlZmluZSBJTlRfMjRYWF9VQVJUMV9JUlEgNzIKICNkZWZpbmUgSU5UXzI0WFhfVUFSVDJfSVJRIDczCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJTlRfMjRYWF9VQVJUM19JUlEgNzQKICNkZWZpbmUgSU5UXzI0WFhfTU1DX0lSUSA4MwotCiAjZGVmaW5lIE9NQVBfTUFYX0dQSU9fTElORVMgMTkyCiAjZGVmaW5lIElIX0dQSU9fQkFTRSAoMTI4ICsgSUgyX0JBU0UpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJSF9NUFVJT19CQVNFIChPTUFQX01BWF9HUElPX0xJTkVTICsgSUhfR1BJT19CQVNFKQogI2RlZmluZSBJSF9CT0FSRF9CQVNFICgxNiArIElIX01QVUlPX0JBU0UpCi0KICNkZWZpbmUgT01BUF9JUlFfQklUKGlycSkgKDEgPDwgKChpcnEpICUgMzIpKQotCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2VuZGlmCi0KICNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KLQogI2lmbmRlZiBOUl9JUlFTCiAjZGVmaW5lIE5SX0lSUVMgSUhfQk9BUkRfQkFTRQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlbmRpZgotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9hcmNoL21jYnNwLmggYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vYXJjaC9tY2JzcC5oCmluZGV4IGNhZTVlM2IuLjVmNGU0ZDQgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9hcmNoL21jYnNwLmgKKysrIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2FyY2gvbWNic3AuaApAQCAtNywxNzkgKzcsMTk1IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfX0FTTV9BUkNIX09NQVBfTUNCU1BfSAogI2RlZmluZSBfX0FTTV9BUkNIX09NQVBfTUNCU1BfSAotCiAjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+Ci0KICNkZWZpbmUgT01BUDczMF9NQ0JTUDFfQkFTRSAweGZmZmIxMDAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBPTUFQNzMwX01DQlNQMl9CQVNFIDB4ZmZmYjE4MDAKLQogI2RlZmluZSBPTUFQMTUxMF9NQ0JTUDFfQkFTRSAweGUxMDExODAwCiAjZGVmaW5lIE9NQVAxNTEwX01DQlNQMl9CQVNFIDB4ZmZmYjEwMDAKICNkZWZpbmUgT01BUDE1MTBfTUNCU1AzX0JBU0UgMHhlMTAxNzAwMAotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBPTUFQMTYxMF9NQ0JTUDFfQkFTRSAweGUxMDExODAwCiAjZGVmaW5lIE9NQVAxNjEwX01DQlNQMl9CQVNFIDB4ZmZmYjEwMDAKICNkZWZpbmUgT01BUDE2MTBfTUNCU1AzX0JBU0UgMHhlMTAxNzAwMAotCiAjZGVmaW5lIE9NQVAyNFhYX01DQlNQMV9CQVNFIDB4NDgwNzQwMDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE9NQVAyNFhYX01DQlNQMl9CQVNFIDB4NDgwNzYwMDAKLQogI2RlZmluZSBPTUFQX01DQlNQX1JFQUQoYmFzZSwgcmVnKSBfX3Jhd19yZWFkdygoYmFzZSkgKyBPTUFQX01DQlNQX1JFR18jI3JlZykKICNkZWZpbmUgT01BUF9NQ0JTUF9XUklURShiYXNlLCByZWcsIHZhbCkgX19yYXdfd3JpdGV3KCh2YWwpLCAoYmFzZSkgKyBPTUFQX01DQlNQX1JFR18jI3JlZykKLQogI2RlZmluZSBSUlNUIDB4MDAwMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUlJEWSAweDAwMDIKICNkZWZpbmUgUkZVTEwgMHgwMDA0CiAjZGVmaW5lIFJTWU5DX0VSUiAweDAwMDgKLSNkZWZpbmUgUklOVE0odmFsdWUpICgodmFsdWUpPDw0KSAgCisjZGVmaW5lIFJJTlRNKHZhbHVlKSAoKHZhbHVlKTw8NCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFCSVMgMHgwMDQwCiAjZGVmaW5lIERYRU5BIDB4MDA4MAotI2RlZmluZSBDTEtTVFAodmFsdWUpICgodmFsdWUpPDwxMSkgIAotI2RlZmluZSBSSlVTVCh2YWx1ZSkgKCh2YWx1ZSk8PDEzKSAgCisjZGVmaW5lIENMS1NUUCh2YWx1ZSkgKCh2YWx1ZSk8PDExKQorI2RlZmluZSBSSlVTVCh2YWx1ZSkgKCh2YWx1ZSk8PDEzKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRExCIDB4ODAwMAotCiAjZGVmaW5lIFhSU1QgMHgwMDAxCiAjZGVmaW5lIFhSRFkgMHgwMDAyCiAjZGVmaW5lIFhFTVBUWSAweDAwMDQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFhTWU5DX0VSUiAweDAwMDgKLSNkZWZpbmUgWElOVE0odmFsdWUpICgodmFsdWUpPDw0KSAgCisjZGVmaW5lIFhJTlRNKHZhbHVlKSAoKHZhbHVlKTw8NCkKICNkZWZpbmUgR1JTVCAweDAwNDAKICNkZWZpbmUgRlJTVCAweDAwODAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNPRlQgMHgwMTAwCiAjZGVmaW5lIEZSRUUgMHgwMjAwCi0KICNkZWZpbmUgQ0xLUlAgMHgwMDAxCiAjZGVmaW5lIENMS1hQIDB4MDAwMgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRlNSUCAweDAwMDQKICNkZWZpbmUgRlNYUCAweDAwMDgKICNkZWZpbmUgRFJfU1RBVCAweDAwMTAKICNkZWZpbmUgRFhfU1RBVCAweDAwMjAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIENMS1NfU1RBVCAweDAwNDAKICNkZWZpbmUgU0NMS01FIDB4MDA4MAogI2RlZmluZSBDTEtSTSAweDAxMDAKICNkZWZpbmUgQ0xLWE0gMHgwMjAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBGU1JNIDB4MDQwMAogI2RlZmluZSBGU1hNIDB4MDgwMAogI2RlZmluZSBSSU9FTiAweDEwMDAKICNkZWZpbmUgWElPRU4gMHgyMDAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJRExFX0VOIDB4NDAwMAotCi0jZGVmaW5lIFJXRExFTjEodmFsdWUpICgodmFsdWUpPDw1KSAgCi0jZGVmaW5lIFJGUkxFTjEodmFsdWUpICgodmFsdWUpPDw4KSAgCi0KLSNkZWZpbmUgWFdETEVOMSh2YWx1ZSkgKCh2YWx1ZSk8PDUpICAKLSNkZWZpbmUgWEZSTEVOMSh2YWx1ZSkgKCh2YWx1ZSk8PDgpICAKLQotI2RlZmluZSBSREFURExZKHZhbHVlKSAodmFsdWUpICAKKyNkZWZpbmUgUldETEVOMSh2YWx1ZSkgKCh2YWx1ZSk8PDUpCisjZGVmaW5lIFJGUkxFTjEodmFsdWUpICgodmFsdWUpPDw4KQorI2RlZmluZSBYV0RMRU4xKHZhbHVlKSAoKHZhbHVlKTw8NSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFhGUkxFTjEodmFsdWUpICgodmFsdWUpPDw4KQorI2RlZmluZSBSREFURExZKHZhbHVlKSAodmFsdWUpCiAjZGVmaW5lIFJGSUcgMHgwMDA0Ci0jZGVmaW5lIFJDT01QQU5EKHZhbHVlKSAoKHZhbHVlKTw8MykgIAotI2RlZmluZSBSV0RMRU4yKHZhbHVlKSAoKHZhbHVlKTw8NSkgIAotI2RlZmluZSBSRlJMRU4yKHZhbHVlKSAoKHZhbHVlKTw8OCkgIAorI2RlZmluZSBSQ09NUEFORCh2YWx1ZSkgKCh2YWx1ZSk8PDMpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBSV0RMRU4yKHZhbHVlKSAoKHZhbHVlKTw8NSkKKyNkZWZpbmUgUkZSTEVOMih2YWx1ZSkgKCh2YWx1ZSk8PDgpCiAjZGVmaW5lIFJQSEFTRSAweDgwMDAKLQotI2RlZmluZSBYREFURExZKHZhbHVlKSAodmFsdWUpICAKKyNkZWZpbmUgWERBVERMWSh2YWx1ZSkgKHZhbHVlKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgWEZJRyAweDAwMDQKLSNkZWZpbmUgWENPTVBBTkQodmFsdWUpICgodmFsdWUpPDwzKSAgCi0jZGVmaW5lIFhXRExFTjIodmFsdWUpICgodmFsdWUpPDw1KSAgCi0jZGVmaW5lIFhGUkxFTjIodmFsdWUpICgodmFsdWUpPDw4KSAgCisjZGVmaW5lIFhDT01QQU5EKHZhbHVlKSAoKHZhbHVlKTw8MykKKyNkZWZpbmUgWFdETEVOMih2YWx1ZSkgKCh2YWx1ZSk8PDUpCisjZGVmaW5lIFhGUkxFTjIodmFsdWUpICgodmFsdWUpPDw4KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgWFBIQVNFIDB4ODAwMAotCi0jZGVmaW5lIENMS0dEVih2YWx1ZSkgKHZhbHVlKSAgCi0jZGVmaW5lIEZXSUQodmFsdWUpICgodmFsdWUpPDw4KSAgCi0KLSNkZWZpbmUgRlBFUih2YWx1ZSkgKHZhbHVlKSAgCisjZGVmaW5lIENMS0dEVih2YWx1ZSkgKHZhbHVlKQorI2RlZmluZSBGV0lEKHZhbHVlKSAoKHZhbHVlKTw8OCkKKyNkZWZpbmUgRlBFUih2YWx1ZSkgKHZhbHVlKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRlNHTSAweDEwMDAKICNkZWZpbmUgQ0xLU00gMHgyMDAwCiAjZGVmaW5lIENMS1NQIDB4NDAwMAogI2RlZmluZSBHU1lOQyAweDgwMDAKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUk1DTSAweDAwMDEKLSNkZWZpbmUgUkNCTEsodmFsdWUpICgodmFsdWUpPDwyKSAgCi0jZGVmaW5lIFJQQUJMSyh2YWx1ZSkgKCh2YWx1ZSk8PDUpICAKLSNkZWZpbmUgUlBCQkxLKHZhbHVlKSAoKHZhbHVlKTw8NykgIAotCi0jZGVmaW5lIFhNQ00odmFsdWUpICh2YWx1ZSkgIAotI2RlZmluZSBYQ0JMSyh2YWx1ZSkgKCh2YWx1ZSk8PDIpICAKLSNkZWZpbmUgWFBBQkxLKHZhbHVlKSAoKHZhbHVlKTw8NSkgIAotI2RlZmluZSBYUEJCTEsodmFsdWUpICgodmFsdWUpPDw3KSAgCi0KKyNkZWZpbmUgUkNCTEsodmFsdWUpICgodmFsdWUpPDwyKQorI2RlZmluZSBSUEFCTEsodmFsdWUpICgodmFsdWUpPDw1KQorI2RlZmluZSBSUEJCTEsodmFsdWUpICgodmFsdWUpPDw3KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgWE1DTSh2YWx1ZSkgKHZhbHVlKQorI2RlZmluZSBYQ0JMSyh2YWx1ZSkgKCh2YWx1ZSk8PDIpCisjZGVmaW5lIFhQQUJMSyh2YWx1ZSkgKCh2YWx1ZSk8PDUpCisjZGVmaW5lIFhQQkJMSyh2YWx1ZSkgKCh2YWx1ZSk8PDcpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IG9tYXBfbWNic3BfcmVnX2NmZyB7CiAgdTE2IHNwY3IyOwogIHUxNiBzcGNyMTsKICB1MTYgcmNyMjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdTE2IHJjcjE7CiAgdTE2IHhjcjI7CiAgdTE2IHhjcjE7CiAgdTE2IHNyZ3IyOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1MTYgc3JncjE7CiAgdTE2IG1jcjI7CiAgdTE2IG1jcjE7CiAgdTE2IHBjcjA7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHUxNiByY2VyYzsKICB1MTYgcmNlcmQ7CiAgdTE2IHhjZXJjOwogIHUxNiB4Y2VyZDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdTE2IHJjZXJlOwogIHUxNiByY2VyZjsKICB1MTYgeGNlcmU7CiAgdTE2IHhjZXJmOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1MTYgcmNlcmc7CiAgdTE2IHJjZXJoOwogIHUxNiB4Y2VyZzsKICB1MTYgeGNlcmg7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKLQogdHlwZWRlZiBlbnVtIHsKICBPTUFQX01DQlNQMSA9IDAsCiAgT01BUF9NQ0JTUDIsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE9NQVBfTUNCU1AzLAogfSBvbWFwX21jYnNwX2lkOwotCiB0eXBlZGVmIGludCBfX2JpdHdpc2Ugb21hcF9tY2JzcF9pb190eXBlX3Q7CiAjZGVmaW5lIE9NQVBfTUNCU1BfSVJRX0lPICgoX19mb3JjZSBvbWFwX21jYnNwX2lvX3R5cGVfdCkgMSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE9NQVBfTUNCU1BfUE9MTF9JTyAoKF9fZm9yY2Ugb21hcF9tY2JzcF9pb190eXBlX3QpIDIpCi0KIHR5cGVkZWYgZW51bSB7CiAgT01BUF9NQ0JTUF9XT1JEXzggPSAwLAogIE9NQVBfTUNCU1BfV09SRF8xMiwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgT01BUF9NQ0JTUF9XT1JEXzE2LAogIE9NQVBfTUNCU1BfV09SRF8yMCwKICBPTUFQX01DQlNQX1dPUkRfMjQsCiAgT01BUF9NQ0JTUF9XT1JEXzMyLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH0gb21hcF9tY2JzcF93b3JkX2xlbmd0aDsKLQogdHlwZWRlZiBlbnVtIHsKICBPTUFQX01DQlNQX0NMS19SSVNJTkcgPSAwLAogIE9NQVBfTUNCU1BfQ0xLX0ZBTExJTkcsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfSBvbWFwX21jYnNwX2Nsa19wb2xhcml0eTsKLQogdHlwZWRlZiBlbnVtIHsKICBPTUFQX01DQlNQX0ZTX0FDVElWRV9ISUdIID0gMCwKICBPTUFQX01DQlNQX0ZTX0FDVElWRV9MT1csCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfSBvbWFwX21jYnNwX2ZzX3BvbGFyaXR5OwotCiB0eXBlZGVmIGVudW0gewogIE9NQVBfTUNCU1BfQ0xLX1NUUF9NT0RFX05PX0RFTEFZID0gMCwKICBPTUFQX01DQlNQX0NMS19TVFBfTU9ERV9ERUxBWSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9IG9tYXBfbWNic3BfY2xrX3N0cF9tb2RlOwotCiB0eXBlZGVmIGVudW0gewogIE9NQVBfTUNCU1BfU1BJX01BU1RFUiA9IDAsCiAgT01BUF9NQ0JTUF9TUElfU0xBVkUsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfSBvbWFwX21jYnNwX3NwaV9tb2RlOwotCiBzdHJ1Y3Qgb21hcF9tY2JzcF9zcGlfY2ZnIHsKICBvbWFwX21jYnNwX3NwaV9tb2RlIHNwaV9tb2RlOwogIG9tYXBfbWNic3BfY2xrX3BvbGFyaXR5IHJ4X2Nsb2NrX3BvbGFyaXR5OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBvbWFwX21jYnNwX2Nsa19wb2xhcml0eSB0eF9jbG9ja19wb2xhcml0eTsKICBvbWFwX21jYnNwX2ZzX3BvbGFyaXR5IGZzeF9wb2xhcml0eTsKICB1OCBjbGtfZGl2OwogIG9tYXBfbWNic3BfY2xrX3N0cF9tb2RlIGNsa19zdHBfbW9kZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgb21hcF9tY2JzcF93b3JkX2xlbmd0aCB3b3JkX2xlbmd0aDsKIH07Ci0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2FyY2gvbWVtb3J5LmggYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vYXJjaC9tZW1vcnkuaAppbmRleCA4YjA2NGI4Li4yMzY3ZTM5IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vYXJjaC9tZW1vcnkuaAorKysgYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vYXJjaC9tZW1vcnkuaApAQCAtNywxMyArNywxOCBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX19BU01fQVJDSF9NRU1PUllfSAogI2RlZmluZSBfX0FTTV9BUkNIX01FTU9SWV9ICi0KICNkZWZpbmUgX192aXJ0X3RvX2J1cyh4KSBfX3ZpcnRfdG9fcGh5cyh4KQogI2RlZmluZSBfX2J1c190b192aXJ0KHgpIF9fcGh5c190b192aXJ0KHgpCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZW5kaWYKLQpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2FyY2gvbXRkLXhpcC5oIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2FyY2gvbXRkLXhpcC5oCmluZGV4IDliNjBhZWYuLjJkMDU2OTEgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9hcmNoL210ZC14aXAuaAorKysgYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vYXJjaC9tdGQteGlwLmgKQEAgLTcsMjUgKzcsMzIgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9fQVJDSF9PTUFQX01URF9YSVBfSF9fCiAjZGVmaW5lIF9fQVJDSF9PTUFQX01URF9YSVBfSF9fCi0KICNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KICNkZWZpbmUgT01BUF9NUFVfVElNRVJfQkFTRSAoMHhmZmZlYzUwMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE9NQVBfTVBVX1RJTUVSX09GRlNFVCAweDEwMAotCiB0eXBlZGVmIHN0cnVjdCB7CiAgdTMyIGNudGw7CiAgdTMyIGxvYWRfdGltOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1MzIgcmVhZF90aW07CiB9IHhpcF9vbWFwX21wdV90aW1lcl9yZWdzX3Q7Ci0KICNkZWZpbmUgeGlwX29tYXBfbXB1X3RpbWVyX2Jhc2UobikgICgodm9sYXRpbGUgeGlwX29tYXBfbXB1X3RpbWVyX3JlZ3NfdCopSU9fQUREUkVTUyhPTUFQX01QVV9USU1FUl9CQVNFICsgICAobikqT01BUF9NUFVfVElNRVJfT0ZGU0VUKSkKLQogI2RlZmluZSB4aXBfaXJxcGVuZGluZygpICAgKG9tYXBfcmVhZGwoT01BUF9JSDFfSVRSKSAmIH5vbWFwX3JlYWRsKE9NQVBfSUgxX01JUikpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSB4aXBfY3VycnRpbWUoKSAofnhpcF9vbWFwX21wdV90aW1lcl9yZWFkKDApKQogI2RlZmluZSB4aXBfZWxhcHNlZF9zaW5jZSh4KSAoc2lnbmVkKSgofnhpcF9vbWFwX21wdV90aW1lcl9yZWFkKDApIC0gKHgpKSAvIDYpCiAjZGVmaW5lIHhpcF9jcHVfaWRsZSgpIGFzbSB2b2xhdGlsZSAoIm1jciBwMTUsIDAsICUwLCBjNywgYzAsIDQiIDo6ICJyIiAoMSkpCiAjZW5kaWYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vYXJjaC9tdXguaCBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9hcmNoL211eC5oCmluZGV4IDcyZGE1NGUuLmVmMDg0OGMgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9hcmNoL211eC5oCisrKyBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9hcmNoL211eC5oCkBAIC03LDM4NSArNyw0MDIgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9fQVNNX0FSQ0hfTVVYX0gKICNkZWZpbmUgX19BU01fQVJDSF9NVVhfSAotCi0jZGVmaW5lIFBVX1BEX1NFTF9OQSAwICAKLSNkZWZpbmUgUFVMTF9EV05fQ1RSTF9OQSAwICAKLQorI2RlZmluZSBQVV9QRF9TRUxfTkEgMAorI2RlZmluZSBQVUxMX0RXTl9DVFJMX05BIDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1VWF9SRUcocmVnLCBtb2RlX29mZnNldCwgbW9kZSkgLm11eF9yZWcgPSBGVU5DX01VWF9DVFJMXyMjcmVnLCAgIC5tYXNrX29mZnNldCA9IG1vZGVfb2Zmc2V0LCAgIC5tYXNrID0gbW9kZSwKLQogI2RlZmluZSBQVUxMX1JFRyhyZWcsIGJpdCwgc3RhdHVzKSAucHVsbF9yZWcgPSBQVUxMX0RXTl9DVFJMXyMjcmVnLCAgIC5wdWxsX2JpdCA9IGJpdCwgICAucHVsbF92YWwgPSBzdGF0dXMsCi0KICNkZWZpbmUgUFVfUERfUkVHKHJlZywgc3RhdHVzKSAucHVfcGRfcmVnID0gUFVfUERfU0VMXyMjcmVnLCAgIC5wdV9wZF92YWwgPSBzdGF0dXMsCi0KICNkZWZpbmUgTVVYX1JFR183MzAocmVnLCBtb2RlX29mZnNldCwgbW9kZSkgICAubXV4X3JlZyA9IE9NQVA3MzBfSU9fQ09ORl8jI3JlZywgICAubWFza19vZmZzZXQgPSBtb2RlX29mZnNldCwgICAubWFzayA9IG1vZGUsCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBVTExfUkVHXzczMChyZWcsIGJpdCwgc3RhdHVzKSAucHVsbF9yZWcgPSBPTUFQNzMwX0lPX0NPTkZfIyNyZWcsICAgLnB1bGxfYml0ID0gYml0LCAgIC5wdWxsX3ZhbCA9IHN0YXR1cywKLQogI2RlZmluZSBNVVhfQ0ZHKGRlc2MsIG11eF9yZWcsIG1vZGVfb2Zmc2V0LCBtb2RlLCAgIHB1bGxfcmVnLCBwdWxsX2JpdCwgcHVsbF9zdGF0dXMsICAgcHVfcGRfcmVnLCBwdV9wZF9zdGF0dXMsIGRlYnVnX3N0YXR1cykgIHsgICAubmFtZSA9IGRlc2MsICAgLmRlYnVnID0gZGVidWdfc3RhdHVzLCAgIE1VWF9SRUcobXV4X3JlZywgbW9kZV9vZmZzZXQsIG1vZGUpICAgUFVMTF9SRUcocHVsbF9yZWcsIHB1bGxfYml0LCAhcHVsbF9zdGF0dXMpICAgUFVfUERfUkVHKHB1X3BkX3JlZywgcHVfcGRfc3RhdHVzKSAgfSwKLQogI2RlZmluZSBNVVhfQ0ZHXzczMChkZXNjLCBtdXhfcmVnLCBtb2RlX29mZnNldCwgbW9kZSwgICBwdWxsX2JpdCwgcHVsbF9zdGF0dXMsIGRlYnVnX3N0YXR1cykgeyAgIC5uYW1lID0gZGVzYywgICAuZGVidWcgPSBkZWJ1Z19zdGF0dXMsICAgTVVYX1JFR183MzAobXV4X3JlZywgbW9kZV9vZmZzZXQsIG1vZGUpICAgUFVMTF9SRUdfNzMwKG11eF9yZWcsIHB1bGxfYml0LCBwdWxsX3N0YXR1cykgICBQVV9QRF9SRUcoTkEsIDApICB9LAotCiAjZGVmaW5lIE1VWF9DRkdfMjRYWChkZXNjLCByZWdfb2Zmc2V0LCBtb2RlLCAgIHB1bGxfZW4sIHB1bGxfbW9kZSwgZGJnKSAgeyAgIC5uYW1lID0gZGVzYywgICAuZGVidWcgPSBkYmcsICAgLm11eF9yZWcgPSByZWdfb2Zmc2V0LCAgIC5tYXNrID0gbW9kZSwgICAucHVsbF92YWwgPSBwdWxsX2VuLCAgIC5wdV9wZF92YWwgPSBwdWxsX21vZGUsICB9LAotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQVUxMX0RJU0FCTEVEIDAKICNkZWZpbmUgUFVMTF9FTkFCTEVEIDEKLQogI2RlZmluZSBQVUxMX0RPV04gMAogI2RlZmluZSBQVUxMX1VQIDEKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBwaW5fY29uZmlnIHsKICBjaGFyICpuYW1lOwogIHVuc2lnbmVkIGNoYXIgYnVzeTsKICB1bnNpZ25lZCBjaGFyIGRlYnVnOwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGNvbnN0IGNoYXIgKm11eF9yZWdfbmFtZTsKICBjb25zdCB1bnNpZ25lZCBpbnQgbXV4X3JlZzsKICBjb25zdCB1bnNpZ25lZCBjaGFyIG1hc2tfb2Zmc2V0OwogIGNvbnN0IHVuc2lnbmVkIGNoYXIgbWFzazsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBjb25zdCBjaGFyICpwdWxsX25hbWU7CiAgY29uc3QgdW5zaWduZWQgaW50IHB1bGxfcmVnOwogIGNvbnN0IHVuc2lnbmVkIGNoYXIgcHVsbF92YWw7CiAgY29uc3QgdW5zaWduZWQgY2hhciBwdWxsX2JpdDsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBjb25zdCBjaGFyICpwdV9wZF9uYW1lOwogIGNvbnN0IHVuc2lnbmVkIGludCBwdV9wZF9yZWc7CiAgY29uc3QgdW5zaWduZWQgY2hhciBwdV9wZF92YWw7CiB9OwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogZW51bSBvbWFwNzMwX2luZGV4IHsKLQogIEUyXzczMF9LQlIwLAogIEo3XzczMF9LQlIxLAogIEUxXzczMF9LQlIyLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBGM183MzBfS0JSMywKICBEMl83MzBfS0JSNCwKICBBQTIwXzczMF9LQlI1LAogIFYxN183MzBfS0JSNiwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQzJfNzMwX0tCQzAsCiAgRDNfNzMwX0tCQzEsCiAgRTRfNzMwX0tCQzIsCiAgRjRfNzMwX0tCQzMsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIEUzXzczMF9LQkM0LAotCiAgQUExN183MzBfVVNCX0RNLAogIFcxNl83MzBfVVNCX1BVX0VOLAogIFcxN183MzBfVVNCX1ZCVVNJLAotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFYxOV83MzBfR1BJT18xNSwKICBNMTlfNzMwX0dQSU9fNzcsCiAgQzIxXzczMF9HUElPXzEyMV8xMjIsCiAgSzE5XzczMF9HUElPXzEyNiwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgSzE1XzczMF9HUElPXzEyNywKLQogIFAxNV83MzBfR1BJT18xNl8xNywKLQogIE0xNV83MzBfR1BJT184MywKICBOMjBfNzMwX0dQSU9fODIsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE4xOF83MzBfR1BJT184MSwKICBOMTlfNzMwX0dQSU9fODAsCiAgTDE1XzczMF9HUElPXzc2LAotCiAgVUFSVDFfQ1RTX1JUUywKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgT01BUF83MzBfR1BJT1NfNDJfNDMsCiAgVUFSVDFfVFhfUlgsCiAgT01BUF83MzBfR1BJT1NfNDBfNDEsCiAgVUFSVDFfVVNCX1JYX1RYLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBVQVJUMV9VU0JfUlRTLAogIFVBUlQxX1VTQl9DVFMKIH07Ci0KIGVudW0gb21hcDF4eHhfaW5kZXggewotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFVBUlQxX1RYID0gMCwKICBVQVJUMV9SVFMsCi0KICBVQVJUMl9UWCwKICBVQVJUMl9SWCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVUFSVDJfQ1RTLAogIFVBUlQyX1JUUywKLQogIFVBUlQzX1RYLAogIFVBUlQzX1JYLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBVQVJUM19DVFMsCiAgVUFSVDNfUlRTLAogIFVBUlQzX0NMS1JFUSwKICBVQVJUM19CQ0xLLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBZMTVfMTYxMF9VQVJUM19SVFMsCi0KICBQV1QsCiAgUFdMLAotCiAgUjE4X1VTQl9WQlVTLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBSMThfMTUxMF9VU0JfR1BJTzAsCiAgVzRfVVNCX1BVRU4sCiAgVzRfVVNCX0NMS08sCiAgVzRfVVNCX0hJR0haLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBXNF9HUElPNTgsCi0KICBVU0IxX1NVU1AsCiAgVVNCMV9TRU8sCiAgVzEzXzE2MTBfVVNCMV9TRTAsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFVTQjFfVFhFTiwKICBVU0IxX1RYRCwKICBVU0IxX1ZQLAogIFVTQjFfVk0sCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFVTQjFfUkNWLAogIFVTQjFfU1BFRUQsCiAgUjEzXzE2MTBfVVNCMV9TUEVFRCwKICBSMTNfMTcxMF9VU0IxX1NFMCwKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBVU0IyX1NVU1AsCiAgVVNCMl9WUCwKICBVU0IyX1RYRU4sCiAgVVNCMl9WTSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVVNCMl9SQ1YsCiAgVVNCMl9TRU8sCiAgVVNCMl9UWEQsCi0KICBSMThfMTUxMF9HUElPMCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgUjE5XzE1MTBfR1BJTzEsCiAgTTE0XzE1MTBfR1BJTzIsCi0KICBQMThfMTYxMF9HUElPMywKICBZMTVfMTYxMF9HUElPMTcsCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgUjE4XzE3MTBfR1BJTzAsCiAgVjJfMTcxMF9HUElPMTAsCiAgTjIxXzE3MTBfR1BJTzE0LAogIFcxNV8xNzEwX0dQSU80MCwKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBNUFVJTzIsCiAgTjE1XzE2MTBfTVBVSU8yLAogIE1QVUlPNCwKICBNUFVJTzUsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFQyMF8xNjEwX01QVUlPNSwKICBXMTFfMTYxMF9NUFVJTzYsCiAgVjEwXzE2MTBfTVBVSU83LAogIFcxMV8xNjEwX01QVUlPOSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVjEwXzE2MTBfTVBVSU8xMCwKICBXMTBfMTYxMF9NUFVJTzExLAogIEUyMF8xNjEwX01QVUlPMTMsCiAgVTIwXzE2MTBfTVBVSU8xNCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgRTE5XzE2MTBfTVBVSU8xNSwKLQogIE1DQlNQMl9DTEtSLAogIE1DQlNQMl9DTEtYLAogIE1DQlNQMl9EUiwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTUNCU1AyX0RYLAogIE1DQlNQMl9GU1IsCiAgTUNCU1AyX0ZTWCwKLQogIE1DQlNQM19DTEtYLAotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIEJBTExPVVRfVjhfQVJNSU8zLAogIE4yMF9IRFEsCi0KICBXOF8xNjEwX01NQzJfREFUMCwKICBWOF8xNjEwX01NQzJfREFUMSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVzE1XzE2MTBfTU1DMl9EQVQyLAogIFIxMF8xNjEwX01NQzJfREFUMywKICBZMTBfMTYxMF9NTUMyX0NMSywKICBZOF8xNjEwX01NQzJfQ01ELAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBWOV8xNjEwX01NQzJfQ01ERElSLAogIFY1XzE2MTBfTU1DMl9EQVRESVIwLAogIFcxOV8xNjEwX01NQzJfREFURElSMSwKICBSMThfMTYxMF9NTUMyX0NMS0lOLAotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE0xOV8xNjEwX0VUTV9QU1RBVDAsCiAgTDE1XzE2MTBfRVRNX1BTVEFUMSwKICBMMThfMTYxMF9FVE1fUFNUQVQyLAogIEwxOV8xNjEwX0VUTV9EMCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgSjE5XzE2MTBfRVRNX0Q2LAogIEoxOF8xNjEwX0VUTV9ENywKLQogIFAyMF8xNjEwX0dQSU80LAogIFY5XzE2MTBfR1BJTzcsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFc4XzE2MTBfR1BJTzksCiAgTjIwXzE2MTBfR1BJTzExLAogIE4xOV8xNjEwX0dQSU8xMywKICBQMTBfMTYxMF9HUElPMjIsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFY1XzE2MTBfR1BJTzI0LAogIEFBMjBfMTYxMF9HUElPXzQxLAogIFcxOV8xNjEwX0dQSU80OCwKICBNN18xNjEwX0dQSU82MiwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVjE0XzE2WFhfR1BJTzM3LAogIFI5XzE2WFhfR1BJTzE4LAogIEwxNF8xNlhYX0dQSU80OSwKLQogIFYxOV8xNjEwX1VXSVJFX1NDTEssCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFUxOF8xNjEwX1VXSVJFX1NESSwKICBXMjFfMTYxMF9VV0lSRV9TRE8sCiAgTjE0XzE2MTBfVVdJUkVfQ1MwLAogIFAxNV8xNjEwX1VXSVJFX0NTMywKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTjE1XzE2MTBfVVdJUkVfQ1MxLAotCiAgVTE5XzE2MTBfU1BJRl9TQ0ssCiAgVTE4XzE2MTBfU1BJRl9ESU4sCiAgUDIwXzE2MTBfU1BJRl9ESU4sCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFcyMV8xNjEwX1NQSUZfRE9VVCwKICBSMThfMTYxMF9TUElGX0RPVVQsCiAgTjE0XzE2MTBfU1BJRl9DUzAsCiAgTjE1XzE2MTBfU1BJRl9DUzEsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFQxOV8xNjEwX1NQSUZfQ1MyLAogIFAxNV8xNjEwX1NQSUZfQ1MzLAotCiAgTDNfMTYxMF9GTEFTSF9DUzJCX09FLAogIE04XzE2MTBfRkxBU0hfQ1MyQl9XRSwKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBNTUNfQ01ELAogIE1NQ19EQVQxLAogIE1NQ19EQVQyLAogIE1NQ19EQVQwLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBNTUNfQ0xLLAogIE1NQ19EQVQzLAotCiAgTTE1XzE3MTBfTU1DX0NMS0ksCiAgUDE5XzE3MTBfTU1DX0NNRERJUiwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgUDIwXzE3MTBfTU1DX0RBVERJUjAsCi0KICBXOV9VU0IwX1RYRU4sCiAgQUE5X1VTQjBfVlAsCiAgWTVfVVNCMF9SQ1YsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFI5X1VTQjBfVk0sCiAgVjZfVVNCMF9UWEQsCiAgVzVfVVNCMF9TRTAsCiAgVjlfVVNCMF9TUEVFRCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVjlfVVNCMF9TVVNQLAotCiAgVzlfVVNCMl9UWEVOLAogIEFBOV9VU0IyX1ZQLAogIFk1X1VTQjJfUkNWLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBSOV9VU0IyX1ZNLAogIFY2X1VTQjJfVFhELAogIFc1X1VTQjJfU0UwLAotCiAgUjEzXzE2MTBfVUFSVDFfVFgsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFYxNF8xNlhYX1VBUlQxX1JYLAogIFIxNF8xNjEwX1VBUlQxX0NUUywKICBBQTE1XzE2MTBfVUFSVDFfUlRTLAogIFI5XzE2WFhfVUFSVDJfUlgsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIEwxNF8xNlhYX1VBUlQzX1JYLAotCiAgSTJDX1NDTCwKICBJMkNfU0RBLAotCiAgRjE4XzE2MTBfS0JDMCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgRDIwXzE2MTBfS0JDMSwKICBEMTlfMTYxMF9LQkMyLAogIEUxOF8xNjEwX0tCQzMsCiAgQzIxXzE2MTBfS0JDNCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgRzE4XzE2MTBfS0JSMCwKICBGMTlfMTYxMF9LQlIxLAogIEgxNF8xNjEwX0tCUjIsCiAgRTIwXzE2MTBfS0JSMywKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgRTE5XzE2MTBfS0JSNCwKICBOMTlfMTYxMF9LQlI1LAotCiAgVDIwXzE2MTBfTE9XX1BXUiwKLQogIFY1XzE3MTBfTUNMS19PTiwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVjVfMTcxMF9NQ0xLX09GRiwKICBSMTBfMTYxMF9NQ0xLX09OLAogIFIxMF8xNjEwX01DTEtfT0ZGLAotCiAgUDExXzE2MTBfQ0ZfQ0QyLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBSMTFfMTYxMF9DRl9JT0lTMTYsCiAgVjEwXzE2MTBfQ0ZfSVJFUSwKICBXMTBfMTYxMF9DRl9SRVNFVCwKICBXMTFfMTYxMF9DRl9DRDEsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKLQogZW51bSBvbWFwMjR4eF9pbmRleCB7Ci0KICBNMTlfMjRYWF9JMkMxX1NDTCwKICBMMTVfMjRYWF9JMkMxX1NEQSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgSjE1XzI0WFhfSTJDMl9TQ0wsCiAgSDE5XzI0WFhfSTJDMl9TREEsCi0KICBXMTlfMjRYWF9TWVNfTklSUSwKLQogIFcxNF8yNFhYX1NZU19DTEtPVVQsCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTDNfR1BNQ19XQUlUMCwKICBON19HUE1DX1dBSVQxLAogIE0xX0dQTUNfV0FJVDIsCiAgUDFfR1BNQ19XQUlUMywKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBZMTVfMjRYWF9NQ0JTUDJfQ0xLWCwKICBSMTRfMjRYWF9NQ0JTUDJfRlNYLAogIFcxNV8yNFhYX01DQlNQMl9EUiwKICBWMTVfMjRYWF9NQ0JTUDJfRFgsCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTTIxXzI0MlhfR1BJTzExLAogIEFBMTBfMjQyWF9HUElPMTMsCiAgQUE2XzI0MlhfR1BJTzE0LAogIEFBNF8yNDJYX0dQSU8xNSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgWTExXzI0MlhfR1BJTzE2LAogIEFBMTJfMjQyWF9HUElPMTcsCiAgQUE4XzI0MlhfR1BJTzU4LAogIFkyMF8yNFhYX0dQSU82MCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVzRfXzI0WFhfR1BJTzc0LAogIE0xNV8yNFhYX0dQSU85MiwKICBWMTRfMjRYWF9HUElPMTE3LAotCiAgVjRfMjQyWF9HUElPNDksCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFcyXzI0MlhfR1BJTzUwLAogIFU0XzI0MlhfR1BJTzUxLAogIFYzXzI0MlhfR1BJTzUyLAogIFYyXzI0MlhfR1BJTzUzLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBWNl8yNDJYX0dQSU81MywKICBUNF8yNDJYX0dQSU81NCwKICBZNF8yNDJYX0dQSU81NCwKICBUM18yNDJYX0dQSU81NSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVTJfMjQyWF9HUElPNTYsCi0KICBBQTEwXzI0MlhfRE1BUkVRMCwKICBBQTZfMjQyWF9ETUFSRVExLAogIEU0XzI0MlhfRE1BUkVRMiwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgRzRfMjQyWF9ETUFSRVEzLAogIEQzXzI0MlhfRE1BUkVRNCwKICBFM18yNDJYX0RNQVJFUTUsCi0KICBQMjBfMjRYWF9UU0NfSVJRLAotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIEsxNV8yNFhYX1VBUlQzX1RYLAogIEsxNF8yNFhYX1VBUlQzX1JYLAotCiAgRzE5XzI0WFhfTU1DX0NMS08sCiAgSDE4XzI0WFhfTU1DX0NNRCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgRjIwXzI0WFhfTU1DX0RBVDAsCiAgSDE0XzI0WFhfTU1DX0RBVDEsCiAgRTE5XzI0WFhfTU1DX0RBVDIsCiAgRDE5XzI0WFhfTU1DX0RBVDMsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIEYxOV8yNFhYX01NQ19EQVRfRElSMCwKICBFMjBfMjRYWF9NTUNfREFUX0RJUjEsCiAgRjE4XzI0WFhfTU1DX0RBVF9ESVIyLAogIEUxOF8yNFhYX01NQ19EQVRfRElSMywKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgRzE4XzI0WFhfTU1DX0NNRF9ESVIsCiAgSDE1XzI0WFhfTU1DX0NMS0ksCi0KICBUMTlfMjRYWF9LQlIwLAogIFIxOV8yNFhYX0tCUjEsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFYxOF8yNFhYX0tCUjIsCiAgTTIxXzI0WFhfS0JSMywKICBFNV9fMjRYWF9LQlI0LAogIE0xOF8yNFhYX0tCUjUsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFIyMF8yNFhYX0tCQzAsCiAgTTE0XzI0WFhfS0JDMSwKICBIMTlfMjRYWF9LQkMyLAogIFYxN18yNFhYX0tCQzMsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFAyMV8yNFhYX0tCQzQsCiAgTDE0XzI0WFhfS0JDNSwKICBOMTlfMjRYWF9LQkM2LAotCiAgQjNfXzI0WFhfS0JSNSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQUE0XzI0WFhfS0JDMiwKICBCMTNfMjRYWF9LQkM2LAogfTsKLQogI2VuZGlmCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2FyY2gvb21hcDI0eHguaCBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9hcmNoL29tYXAyNHh4LmgKaW5kZXggMzdkZWYyZi4uYWRjNjBlYiAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2FyY2gvb21hcDI0eHguaAorKysgYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vYXJjaC9vbWFwMjR4eC5oCkBAIC03LDI0ICs3LDI4IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfX0FTTV9BUkNIX09NQVAyNFhYX0gKICNkZWZpbmUgX19BU01fQVJDSF9PTUFQMjRYWF9ICi0KICNkZWZpbmUgTDRfMjRYWF9CQVNFIDB4NDgwMDAwMDAKICNkZWZpbmUgTDNfMjRYWF9CQVNFIDB4NjgwMDAwMDAKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgT01BUDI0WFhfSUNfQkFTRSAoTDRfMjRYWF9CQVNFICsgMHhmZTAwMCkKICNkZWZpbmUgVkFfSUNfQkFTRSBJT19BRERSRVNTKE9NQVAyNFhYX0lDX0JBU0UpCiAjZGVmaW5lIE9NQVAyNFhYX0lWQV9JTlRDX0JBU0UgMHg0MDAwMDAwMAogI2RlZmluZSBJUlFfU0lSX0lSUSAweDAwNDAKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgT01BUDI0WFhfMzJLU1lOQ1RfQkFTRSAoTDRfMjRYWF9CQVNFICsgMHg0MDAwKQogI2RlZmluZSBPTUFQMjRYWF9QUkNNX0JBU0UgKEw0XzI0WFhfQkFTRSArIDB4ODAwMCkKICNkZWZpbmUgT01BUDI0WFhfU0RSQ19CQVNFIChMM18yNFhYX0JBU0UgKyAweDkwMDApCi0KICNkZWZpbmUgT01BUDI0MlhfQ09OVFJPTF9TVEFUVVMgKEw0XzI0WFhfQkFTRSArIDB4MmY4KQotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2VuZGlmCi0KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9hcmNoL3NlcmlhbC5oIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2FyY2gvc2VyaWFsLmgKaW5kZXggNmFiODYxMy4uZTExYzUzYSAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2FyY2gvc2VyaWFsLmgKKysrIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2FyY2gvc2VyaWFsLmgKQEAgLTcsMTUgKzcsMjAgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9fQVNNX0FSQ0hfU0VSSUFMX0gKICNkZWZpbmUgX19BU01fQVJDSF9TRVJJQUxfSAotCiAjZGVmaW5lIE9NQVBfTUFYX05SX1BPUlRTIDMKICNkZWZpbmUgT01BUDE1MTBfQkFTRV9CQVVEICgxMjAwMDAwMC8xNikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE9NQVAxNlhYX0JBU0VfQkFVRCAoNDgwMDAwMDAvMTYpCi0KICNkZWZpbmUgaXNfb21hcF9wb3J0KHApICh7aW50IF9fcmV0ID0gMDsgICBpZiAocCA9PSBJT19BRERSRVNTKE9NQVBfVUFSVDFfQkFTRSkgfHwgICBwID09IElPX0FERFJFU1MoT01BUF9VQVJUMl9CQVNFKSB8fCAgIHAgPT0gSU9fQUREUkVTUyhPTUFQX1VBUlQzX0JBU0UpKSAgIF9fcmV0ID0gMTsgICBfX3JldDsgICB9KQotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9hcmNoL3RpbWV4LmggYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vYXJjaC90aW1leC5oCmluZGV4IDJjOTIzNGMuLmEwZDYyYWEgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9hcmNoL3RpbWV4LmgKKysrIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2FyY2gvdGltZXguaApAQCAtNywxMSArNywxNyBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX19BU01fQVJDSF9PTUFQX1RJTUVYX0gKICNkZWZpbmUgX19BU01fQVJDSF9PTUFQX1RJTUVYX0gKLQogI2RlZmluZSBDTE9DS19USUNLX1JBVEUgKEhaICogMTAwMDAwVUwpCi0KICNlbmRpZgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9hcmNoL3ZtYWxsb2MuaCBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9hcmNoL3ZtYWxsb2MuaAppbmRleCBmMmI1YjQ0Li42YWY2ZjU2IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vYXJjaC92bWFsbG9jLmgKKysrIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2FyY2gvdm1hbGxvYy5oCkBAIC03LDcgKzcsMTMgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjZGVmaW5lIFZNQUxMT0NfRU5EIChQQUdFX09GRlNFVCArIDB4MTAwMDAwMDApCi0KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9hdG9taWMuaCBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9hdG9taWMuaAppbmRleCA2ZjE5MjFhLi5kOTgzMDA5IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vYXRvbWljLmgKKysrIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2F0b21pYy5oCkBAIC03LDE1ICs3LDE5IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfX0FTTV9BUk1fQVRPTUlDX0gKICNkZWZpbmUgX19BU01fQVJNX0FUT01JQ19ICi0KICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgotCiB0eXBlZGVmIHN0cnVjdCB7IHZvbGF0aWxlIGludCBjb3VudGVyOyB9IGF0b21pY190OwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBVE9NSUNfSU5JVChpKSB7IChpKSB9Ci0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2F1eHZlYy5oIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2F1eHZlYy5oCmluZGV4IGM3ZTgzOWMuLjU2MGJhMzcgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9hdXh2ZWMuaAorKysgYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vYXV4dmVjLmgKQEAgLTcsOSArNywxNSBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX19BU01BUk1fQVVYVkVDX0gKICNkZWZpbmUgX19BU01BUk1fQVVYVkVDX0gKLQogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vYml0b3BzLmggYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vYml0b3BzLmgKaW5kZXggZmY3NmE2OC4uNWU2MDY3YiAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2JpdG9wcy5oCisrKyBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9iaXRvcHMuaApAQCAtNyw5ICs3LDE1IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfX0FTTV9BUk1fQklUT1BTX0gKICNkZWZpbmUgX19BU01fQVJNX0JJVE9QU19ICi0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2J5dGVvcmRlci5oIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2J5dGVvcmRlci5oCmluZGV4IGI4Njk2OTUuLmE1Y2Y0YWIgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9ieXRlb3JkZXIuaAorKysgYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vYnl0ZW9yZGVyLmgKQEAgLTcsNDUgKzcsNDggQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9fQVNNX0FSTV9CWVRFT1JERVJfSAogI2RlZmluZSBfX0FTTV9BUk1fQllURU9SREVSX0gKLQogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CiAjaW5jbHVkZSA8YXNtL3R5cGVzLmg+Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdGF0aWMgaW5saW5lIF9fYXR0cmlidXRlX2NvbnN0X18gX191MzIgX19fYXJjaF9fc3dhYjMyKF9fdTMyIHgpCiB7CiAgX191MzIgdDsKLQogI2lmbmRlZiBfX3RodW1iX18KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgaWYgKCFfX2J1aWx0aW5fY29uc3RhbnRfcCh4KSkgewotCiAgX19hc21fXyAoImVvclx0JTAsICUxLCAlMSwgcm9yICMxNiIgOiAiPXIiICh0KSA6ICJyIiAoeCkpOwogIH0gZWxzZQogI2VuZGlmCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHQgPSB4IF4gKCh4IDw8IDE2KSB8ICh4ID4+IDE2KSk7Ci0KICB4ID0gKHggPDwgMjQpIHwgKHggPj4gOCk7CiAgdCAmPSB+MHgwMEZGMDAwMDsKICB4IF49ICh0ID4+IDgpOwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHJldHVybiB4OwogfQotCiAjZGVmaW5lIF9fYXJjaF9fc3dhYjMyKHgpIF9fX2FyY2hfX3N3YWIzMih4KQotCiAjaWZuZGVmIF9fU1RSSUNUX0FOU0lfXworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19CWVRFT1JERVJfSEFTX1U2NF9fCiAjZGVmaW5lIF9fU1dBQl82NF9USFJVXzMyX18KICNlbmRpZgotCiAjaWZkZWYgX19BUk1FQl9fCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2luY2x1ZGUgPGxpbnV4L2J5dGVvcmRlci9iaWdfZW5kaWFuLmg+CiAjZWxzZQogI2luY2x1ZGUgPGxpbnV4L2J5dGVvcmRlci9saXR0bGVfZW5kaWFuLmg+CiAjZW5kaWYKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlbmRpZgotCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vY2FjaGUuaCBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9jYWNoZS5oCmluZGV4IGJlMjY0MjMuLmVhOTRmZGQgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9jYWNoZS5oCisrKyBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9jYWNoZS5oCkBAIC03LDEyICs3LDE4IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfX0FTTUFSTV9DQUNIRV9ICiAjZGVmaW5lIF9fQVNNQVJNX0NBQ0hFX0gKLQogI2RlZmluZSBMMV9DQUNIRV9TSElGVCA1CiAjZGVmaW5lIEwxX0NBQ0hFX0JZVEVTICgxIDw8IEwxX0NBQ0hFX1NISUZUKQotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vY2FjaGVmbHVzaC5oIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2NhY2hlZmx1c2guaAppbmRleCAzZmZhODdhLi45OTE0ZjMzIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vY2FjaGVmbHVzaC5oCisrKyBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9jYWNoZWZsdXNoLmgKQEAgLTcsMTAxICs3LDk1IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfQVNNQVJNX0NBQ0hFRkxVU0hfSAogI2RlZmluZSBfQVNNQVJNX0NBQ0hFRkxVU0hfSAotCiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2luY2x1ZGUgPGFzbS9nbHVlLmg+CiAjaW5jbHVkZSA8YXNtL3NobXBhcmFtLmg+Ci0KICNkZWZpbmUgQ0FDSEVfQ09MT1VSKHZhZGRyKSAoKHZhZGRyICYgKFNITUxCQSAtIDEpKSA+PiBQQUdFX1NISUZUKQotCiAjdW5kZWYgX0NBQ0hFCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI3VuZGVmIE1VTFRJX0NBQ0hFCi0KICNpZiAhZGVmaW5lZChfQ0FDSEUpICYmICFkZWZpbmVkKE1VTFRJX0NBQ0hFKQogI2Vycm9yIFVua25vd24gY2FjaGUgbWFpbnRhaW5lbmNlIG1vZGVsCiAjZW5kaWYKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUEdfZGNhY2hlX2RpcnR5IFBHX2FyY2hfMQotCiBzdHJ1Y3QgY3B1X2NhY2hlX2ZucyB7CiAgdm9pZCAoKmZsdXNoX2tlcm5fYWxsKSh2b2lkKTsKICB2b2lkICgqZmx1c2hfdXNlcl9hbGwpKHZvaWQpOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB2b2lkICgqZmx1c2hfdXNlcl9yYW5nZSkodW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgaW50KTsKLQogIHZvaWQgKCpjb2hlcmVudF9rZXJuX3JhbmdlKSh1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKTsKICB2b2lkICgqY29oZXJlbnRfdXNlcl9yYW5nZSkodW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZyk7CiAgdm9pZCAoKmZsdXNoX2tlcm5fZGNhY2hlX3BhZ2UpKHZvaWQgKik7Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdm9pZCAoKmRtYV9pbnZfcmFuZ2UpKHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpOwogIHZvaWQgKCpkbWFfY2xlYW5fcmFuZ2UpKHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpOwogIHZvaWQgKCpkbWFfZmx1c2hfcmFuZ2UpKHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpOwogfTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNpZmRlZiBNVUxUSV9DQUNIRQotCiAjZGVmaW5lIF9fY3B1Y19mbHVzaF9rZXJuX2FsbCBjcHVfY2FjaGUuZmx1c2hfa2Vybl9hbGwKICNkZWZpbmUgX19jcHVjX2ZsdXNoX3VzZXJfYWxsIGNwdV9jYWNoZS5mbHVzaF91c2VyX2FsbAogI2RlZmluZSBfX2NwdWNfZmx1c2hfdXNlcl9yYW5nZSBjcHVfY2FjaGUuZmx1c2hfdXNlcl9yYW5nZQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19jcHVjX2NvaGVyZW50X2tlcm5fcmFuZ2UgY3B1X2NhY2hlLmNvaGVyZW50X2tlcm5fcmFuZ2UKICNkZWZpbmUgX19jcHVjX2NvaGVyZW50X3VzZXJfcmFuZ2UgY3B1X2NhY2hlLmNvaGVyZW50X3VzZXJfcmFuZ2UKICNkZWZpbmUgX19jcHVjX2ZsdXNoX2RjYWNoZV9wYWdlIGNwdV9jYWNoZS5mbHVzaF9rZXJuX2RjYWNoZV9wYWdlCi0KICNkZWZpbmUgZG1hY19pbnZfcmFuZ2UgY3B1X2NhY2hlLmRtYV9pbnZfcmFuZ2UKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIGRtYWNfY2xlYW5fcmFuZ2UgY3B1X2NhY2hlLmRtYV9jbGVhbl9yYW5nZQogI2RlZmluZSBkbWFjX2ZsdXNoX3JhbmdlIGNwdV9jYWNoZS5kbWFfZmx1c2hfcmFuZ2UKLQogI2Vsc2UKLQogI2RlZmluZSBfX2NwdWNfZmx1c2hfa2Vybl9hbGwgX19nbHVlKF9DQUNIRSxfZmx1c2hfa2Vybl9jYWNoZV9hbGwpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX2NwdWNfZmx1c2hfdXNlcl9hbGwgX19nbHVlKF9DQUNIRSxfZmx1c2hfdXNlcl9jYWNoZV9hbGwpCiAjZGVmaW5lIF9fY3B1Y19mbHVzaF91c2VyX3JhbmdlIF9fZ2x1ZShfQ0FDSEUsX2ZsdXNoX3VzZXJfY2FjaGVfcmFuZ2UpCiAjZGVmaW5lIF9fY3B1Y19jb2hlcmVudF9rZXJuX3JhbmdlIF9fZ2x1ZShfQ0FDSEUsX2NvaGVyZW50X2tlcm5fcmFuZ2UpCiAjZGVmaW5lIF9fY3B1Y19jb2hlcmVudF91c2VyX3JhbmdlIF9fZ2x1ZShfQ0FDSEUsX2NvaGVyZW50X3VzZXJfcmFuZ2UpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX2NwdWNfZmx1c2hfZGNhY2hlX3BhZ2UgX19nbHVlKF9DQUNIRSxfZmx1c2hfa2Vybl9kY2FjaGVfcGFnZSkKLQogI2RlZmluZSBkbWFjX2ludl9yYW5nZSBfX2dsdWUoX0NBQ0hFLF9kbWFfaW52X3JhbmdlKQogI2RlZmluZSBkbWFjX2NsZWFuX3JhbmdlIF9fZ2x1ZShfQ0FDSEUsX2RtYV9jbGVhbl9yYW5nZSkKICNkZWZpbmUgZG1hY19mbHVzaF9yYW5nZSBfX2dsdWUoX0NBQ0hFLF9kbWFfZmx1c2hfcmFuZ2UpCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZW5kaWYKLQogI2RlZmluZSBmbHVzaF9jYWNoZV92bWFwKHN0YXJ0LCBlbmQpIGZsdXNoX2NhY2hlX2FsbCgpCiAjZGVmaW5lIGZsdXNoX2NhY2hlX3Z1bm1hcChzdGFydCwgZW5kKSBmbHVzaF9jYWNoZV9hbGwoKQotCiAjZGVmaW5lIGNvcHlfdG9fdXNlcl9wYWdlKHZtYSwgcGFnZSwgdmFkZHIsIGRzdCwgc3JjLCBsZW4pICAgZG8geyAgIG1lbWNweShkc3QsIHNyYywgbGVuKTsgICBmbHVzaF9wdHJhY2VfYWNjZXNzKHZtYSwgcGFnZSwgdmFkZHIsIGRzdCwgbGVuLCAxKTsgIH0gd2hpbGUgKDApCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIGNvcHlfZnJvbV91c2VyX3BhZ2Uodm1hLCBwYWdlLCB2YWRkciwgZHN0LCBzcmMsIGxlbikgICBkbyB7ICAgbWVtY3B5KGRzdCwgc3JjLCBsZW4pOyAgIH0gd2hpbGUgKDApCi0KICNkZWZpbmUgZmx1c2hfY2FjaGVfYWxsKCkgX19jcHVjX2ZsdXNoX2tlcm5fYWxsKCkKICNkZWZpbmUgZmx1c2hfY2FjaGVfdXNlcl9yYW5nZSh2bWEsc3RhcnQsZW5kKSAgIF9fY3B1Y19jb2hlcmVudF91c2VyX3JhbmdlKChzdGFydCkgJiBQQUdFX01BU0ssIFBBR0VfQUxJR04oZW5kKSkKICNkZWZpbmUgZmx1c2hfaWNhY2hlX3JhbmdlKHMsZSkgX19jcHVjX2NvaGVyZW50X2tlcm5fcmFuZ2UocyxlKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgY2xlYW5fZGNhY2hlX2FyZWEoc3RhcnQsc2l6ZSkgY3B1X2RjYWNoZV9jbGVhbl9hcmVhKHN0YXJ0LCBzaXplKQotCiAjZGVmaW5lIGZsdXNoX2RjYWNoZV9tbWFwX2xvY2sobWFwcGluZykgICB3cml0ZV9sb2NrX2lycSgmKG1hcHBpbmcpLT50cmVlX2xvY2spCiAjZGVmaW5lIGZsdXNoX2RjYWNoZV9tbWFwX3VubG9jayhtYXBwaW5nKSAgIHdyaXRlX3VubG9ja19pcnEoJihtYXBwaW5nKS0+dHJlZV9sb2NrKQotCiAjZGVmaW5lIGZsdXNoX2ljYWNoZV91c2VyX3JhbmdlKHZtYSxwYWdlLGFkZHIsbGVuKSAgIGZsdXNoX2RjYWNoZV9wYWdlKHBhZ2UpCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIGZsdXNoX2ljYWNoZV9wYWdlKHZtYSxwYWdlKSBkbyB7IH0gd2hpbGUgKDApCi0KICNkZWZpbmUgX19jYWNoZWlkX3ByZXNlbnQodmFsKSAodmFsICE9IHJlYWRfY3B1aWQoQ1BVSURfSUQpKQogI2RlZmluZSBfX2NhY2hlaWRfdml2dCh2YWwpICgodmFsICYgKDE1IDw8IDI1KSkgIT0gKDE0IDw8IDI1KSkKICNkZWZpbmUgX19jYWNoZWlkX3ZpcHQodmFsKSAoKHZhbCAmICgxNSA8PCAyNSkpID09ICgxNCA8PCAyNSkpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX2NhY2hlaWRfdmlwdF9ub25hbGlhc2luZyh2YWwpICgodmFsICYgKDE1IDw8IDI1IHwgMSA8PCAyMykpID09ICgxNCA8PCAyNSkpCiAjZGVmaW5lIF9fY2FjaGVpZF92aXB0X2FsaWFzaW5nKHZhbCkgKCh2YWwgJiAoMTUgPDwgMjUgfCAxIDw8IDIzKSkgPT0gKDE0IDw8IDI1IHwgMSA8PCAyMykpCi0KICNkZWZpbmUgY2FjaGVfaXNfdml2dCgpICAgKHsgICB1bnNpZ25lZCBpbnQgX192YWwgPSByZWFkX2NwdWlkKENQVUlEX0NBQ0hFVFlQRSk7ICAgKCFfX2NhY2hlaWRfcHJlc2VudChfX3ZhbCkpIHx8IF9fY2FjaGVpZF92aXZ0KF9fdmFsKTsgICB9KQotCiAjZGVmaW5lIGNhY2hlX2lzX3ZpcHQoKSAgICh7ICAgdW5zaWduZWQgaW50IF9fdmFsID0gcmVhZF9jcHVpZChDUFVJRF9DQUNIRVRZUEUpOyAgIF9fY2FjaGVpZF9wcmVzZW50KF9fdmFsKSAmJiBfX2NhY2hlaWRfdmlwdChfX3ZhbCk7ICAgfSkKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgY2FjaGVfaXNfdmlwdF9ub25hbGlhc2luZygpICAgKHsgICB1bnNpZ25lZCBpbnQgX192YWwgPSByZWFkX2NwdWlkKENQVUlEX0NBQ0hFVFlQRSk7ICAgX19jYWNoZWlkX3ByZXNlbnQoX192YWwpICYmICAgX19jYWNoZWlkX3ZpcHRfbm9uYWxpYXNpbmcoX192YWwpOyAgIH0pCi0KICNkZWZpbmUgY2FjaGVfaXNfdmlwdF9hbGlhc2luZygpICAgKHsgICB1bnNpZ25lZCBpbnQgX192YWwgPSByZWFkX2NwdWlkKENQVUlEX0NBQ0hFVFlQRSk7ICAgX19jYWNoZWlkX3ByZXNlbnQoX192YWwpICYmICAgX19jYWNoZWlkX3ZpcHRfYWxpYXNpbmcoX192YWwpOyAgIH0pCi0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2NwdXRpbWUuaCBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9jcHV0aW1lLmgKaW5kZXggNGE0MDk3Zi4uODcwNTQyMiAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2NwdXRpbWUuaAorKysgYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vY3B1dGltZS5oCkBAIC03LDExICs3LDE3IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfX0FSTV9DUFVUSU1FX0gKICNkZWZpbmUgX19BUk1fQ1BVVElNRV9ICi0KICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9jcHV0aW1lLmg+Ci0KICNlbmRpZgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9kZWxheS5oIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2RlbGF5LmgKaW5kZXggNjMxZmQ5Yi4uYTA0YzQwYiAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2RlbGF5LmgKKysrIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2RlbGF5LmgKQEAgLTcsMTYgKzcsMTkgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9fQVNNX0FSTV9ERUxBWV9ICiAjZGVmaW5lIF9fQVNNX0FSTV9ERUxBWV9ICi0KLSNpbmNsdWRlIDxhc20vcGFyYW0uaD4gIAotCisjaW5jbHVkZSA8YXNtL3BhcmFtLmg+CiAjZGVmaW5lIE1BWF9VREVMQVlfTVMgMgotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSB1ZGVsYXkobikgICAoX19idWlsdGluX2NvbnN0YW50X3AobikgPyAgICgobikgPiAoTUFYX1VERUxBWV9NUyAqIDEwMDApID8gX19iYWRfdWRlbGF5KCkgOiAgIF9fY29uc3RfdWRlbGF5KChuKSAqICgoMjE5OTAyM1UqSFopPj4xMSkpKSA6ICAgX191ZGVsYXkobikpCi0KICNlbmRpZgotCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vZGl2NjQuaCBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9kaXY2NC5oCmluZGV4IGMwM2EwZTQuLjZiYTAwOGEgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9kaXY2NC5oCisrKyBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9kaXY2NC5oCkBAIC03LDIxICs3LDI3IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfX0FTTV9BUk1fRElWNjQKICNkZWZpbmUgX19BU01fQVJNX0RJVjY0Ci0KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+Ci0KICNpZmRlZiBfX0FSTUVCX18KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9feGggInIwIgogI2RlZmluZSBfX3hsICJyMSIKICNlbHNlCiAjZGVmaW5lIF9feGwgInIwIgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX194aCAicjEiCiAjZW5kaWYKLQogI2RlZmluZSBkb19kaXYobixiYXNlKSAgKHsgICByZWdpc3RlciB1bnNpZ25lZCBpbnQgX19iYXNlIGFzbSgicjQiKSA9IGJhc2U7ICAgcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBsb25nIF9fbiBhc20oInIwIikgPSBuOyAgIHJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgbG9uZyBfX3JlcyBhc20oInIyIik7ICAgcmVnaXN0ZXIgdW5zaWduZWQgaW50IF9fcmVtIGFzbShfX3hoKTsgICBhc20oIF9fYXNtZXEoIiUwIiwgX194aCkgICBfX2FzbWVxKCIlMSIsICJyMiIpICAgX19hc21lcSgiJTIiLCAicjAiKSAgIF9fYXNtZXEoIiUzIiwgInI0IikgICAiYmwJX19kb19kaXY2NCIgICA6ICI9ciIgKF9fcmVtKSwgIj1yIiAoX19yZXMpICAgOiAiciIgKF9fbiksICJyIiAoX19iYXNlKSAgIDogImlwIiwgImxyIiwgImNjIik7ICAgbiA9IF9fcmVzOyAgIF9fcmVtOyAgfSkKLQogI2VuZGlmCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2RtYS1tYXBwaW5nLmggYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vZG1hLW1hcHBpbmcuaAppbmRleCA3ZTY1MDA5Li5kZTIyMWFkIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vZG1hLW1hcHBpbmcuaAorKysgYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vZG1hLW1hcHBpbmcuaApAQCAtNyw5ICs3LDE1IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBBU01BUk1fRE1BX01BUFBJTkdfSAogI2RlZmluZSBBU01BUk1fRE1BX01BUFBJTkdfSAotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9kbWEuaCBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9kbWEuaAppbmRleCA3ZWVlYjc4Li5mMjNjOGZlIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vZG1hLmgKKysrIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2RtYS5oCkBAIC03LDM5ICs3LDQwIEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfX0FTTV9BUk1fRE1BX0gKICNkZWZpbmUgX19BU01fQVJNX0RNQV9ICi0KIHR5cGVkZWYgdW5zaWduZWQgaW50IGRtYWNoX3Q7Ci0KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8YXNtL3NjYXR0ZXJsaXN0Lmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvZG1hLmg+Ci0KICNpZm5kZWYgTUFYX0RNQV9BRERSRVNTCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNQVhfRE1BX0FERFJFU1MgMHhmZmZmZmZmZgogI2VuZGlmCi0KIHR5cGVkZWYgdW5zaWduZWQgaW50IGRtYW1vZGVfdDsKLQogI2RlZmluZSBETUFfTU9ERV9NQVNLIDMKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRE1BX01PREVfUkVBRCAwCiAjZGVmaW5lIERNQV9NT0RFX1dSSVRFIDEKICNkZWZpbmUgRE1BX01PREVfQ0FTQ0FERSAyCiAjZGVmaW5lIERNQV9BVVRPSU5JVCA0Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIGNsZWFyX2RtYV9mZihjaGFubmVsKQotCiAjZGVmaW5lIHNldF9kbWFfYWRkcihjaGFubmVsLCBhZGRyKSAgIF9fc2V0X2RtYV9hZGRyKGNoYW5uZWwsIGJ1c190b192aXJ0KGFkZHIpKQotCiAjaWZuZGVmIE5PX0RNQQogI2RlZmluZSBOT19ETUEgMjU1CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2VuZGlmCi0KICNkZWZpbmUgaXNhX2RtYV9icmlkZ2VfYnVnZ3kgKDApCi0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2RvbWFpbi5oIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2RvbWFpbi5oCmluZGV4IDk3MzEwOWUuLjg0YWRjY2IgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9kb21haW4uaAorKysgYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vZG9tYWluLmgKQEAgLTcsMjYgKzcsMzAgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9fQVNNX1BST0NfRE9NQUlOX0gKICNkZWZpbmUgX19BU01fUFJPQ19ET01BSU5fSAotCiAjZGVmaW5lIERPTUFJTl9LRVJORUwgMAogI2RlZmluZSBET01BSU5fVEFCTEUgMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRE9NQUlOX1VTRVIgMQogI2RlZmluZSBET01BSU5fSU8gMgotCiAjZGVmaW5lIERPTUFJTl9OT0FDQ0VTUyAwCiAjZGVmaW5lIERPTUFJTl9DTElFTlQgMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRE9NQUlOX01BTkFHRVIgMwotCiAjZGVmaW5lIGRvbWFpbl92YWwoZG9tLHR5cGUpICgodHlwZSkgPDwgKDIqKGRvbSkpKQotCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwotCiAjZGVmaW5lIHNldF9kb21haW4oeCkgZG8geyB9IHdoaWxlICgwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgbW9kaWZ5X2RvbWFpbihkb20sdHlwZSkgZG8geyB9IHdoaWxlICgwKQotCiAjZW5kaWYKICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2R5bnRpY2suaCBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9keW50aWNrLmgKaW5kZXggMWYzMjNmMi4uZDJkYjk0ZCAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2R5bnRpY2suaAorKysgYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vZHludGljay5oCkBAIC03LDExICs3LDE3IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfQVNNQVJNX0RZTlRJQ0tfSAogI2RlZmluZSBfQVNNQVJNX0RZTlRJQ0tfSAotCiAjaW5jbHVkZSA8YXNtL21hY2gvdGltZS5oPgotCiAjZW5kaWYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vZWxmLmggYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vZWxmLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU5ZDA5NWUuLjAwMDAwMDAKLS0tIGEvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2VsZi5oCisrKyAvZGV2L251bGwKQEAgLTEsNjMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKioqCi0gKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCi0gKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bwotICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCi0gKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKLSAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgotICoqKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotI2lmbmRlZiBfX0FTTUFSTV9FTEZfSAotI2RlZmluZSBfX0FTTUFSTV9FTEZfSAotCi0jaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgotI2luY2x1ZGUgPGFzbS91c2VyLmg+Ci0jaWZkZWYgX19LRVJORUwKLSNpbmNsdWRlIDxhc20vcHJvY2luZm8uaD4KLSNlbmRpZgotCi10eXBlZGVmIHVuc2lnbmVkIGxvbmcgZWxmX2dyZWdfdDsKLXR5cGVkZWYgdW5zaWduZWQgbG9uZyBlbGZfZnJlZ190WzNdOwotCi0jZGVmaW5lIEVNX0FSTSA0MAotI2RlZmluZSBFRl9BUk1fQVBDUzI2IDB4MDgKLSNkZWZpbmUgRUZfQVJNX1NPRlRfRkxPQVQgMHgyMDAKLSNkZWZpbmUgRUZfQVJNX0VBQklfTUFTSyAweEZGMDAwMDAwCi0KLSNkZWZpbmUgUl9BUk1fTk9ORSAwCi0jZGVmaW5lIFJfQVJNX1BDMjQgMQotI2RlZmluZSBSX0FSTV9BQlMzMiAyCi0jZGVmaW5lIFJfQVJNX0NBTEwgMjgKLSNkZWZpbmUgUl9BUk1fSlVNUDI0IDI5Ci0KLSNkZWZpbmUgRUxGX05HUkVHIChzaXplb2YgKHN0cnVjdCBwdF9yZWdzKSAvIHNpemVvZihlbGZfZ3JlZ190KSkKLXR5cGVkZWYgZWxmX2dyZWdfdCBlbGZfZ3JlZ3NldF90W0VMRl9OR1JFR107Ci0KLXR5cGVkZWYgc3RydWN0IHVzZXJfZnAgZWxmX2ZwcmVnc2V0X3Q7Ci0KLSNkZWZpbmUgZWxmX2NoZWNrX2FyY2goeCkgKCAoKHgpLT5lX21hY2hpbmUgPT0gRU1fQVJNKSAmJiAoRUxGX1BST0NfT0soKHgpKSkgKQotCi0jZGVmaW5lIEVMRl9DTEFTUyBFTEZDTEFTUzMyCi0jaWZkZWYgX19BUk1FQl9fCi0jZGVmaW5lIEVMRl9EQVRBIEVMRkRBVEEyTVNCCi0jZWxzZQotI2RlZmluZSBFTEZfREFUQSBFTEZEQVRBMkxTQgotI2VuZGlmCi0jZGVmaW5lIEVMRl9BUkNIIEVNX0FSTQotCi0jZGVmaW5lIFVTRV9FTEZfQ09SRV9EVU1QCi0jZGVmaW5lIEVMRl9FWEVDX1BBR0VTSVpFIDQwOTYKLQotI2RlZmluZSBFTEZfRVRfRFlOX0JBU0UgKDIgKiBUQVNLX1NJWkUgLyAzKQotCi0jZGVmaW5lIEVMRl9QTEFUX0lOSVQoX3IsIGxvYWRfYWRkcikgKF9yKS0+QVJNX3IwID0gMAotCi0jZGVmaW5lIEVMRl9IV0NBUCAoZWxmX2h3Y2FwKQotCi0jZGVmaW5lIEVMRl9QTEFURk9STV9TSVpFIDgKLQotI2RlZmluZSBFTEZfUExBVEZPUk0gKGVsZl9wbGF0Zm9ybSkKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vZXJybm8uaCBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9lcnJuby5oCmluZGV4IDZiZTcwNDguLmY3ODQ2NDYgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9lcnJuby5oCisrKyBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9lcnJuby5oCkBAIC03LDExICs3LDE3IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfQVJNX0VSUk5PX0gKICNkZWZpbmUgX0FSTV9FUlJOT19ICi0KICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9lcnJuby5oPgotCiAjZW5kaWYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vZmNudGwuaCBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9mY250bC5oCmluZGV4IDQyMzUxZWEuLjk5NWQxNDUgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9mY250bC5oCisrKyBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9mY250bC5oCkBAIC03LDE2ICs3LDIyIEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfQVJNX0ZDTlRMX0gKICNkZWZpbmUgX0FSTV9GQ05UTF9ICi0KLSNkZWZpbmUgT19ESVJFQ1RPUlkgMDQwMDAwICAKLSNkZWZpbmUgT19OT0ZPTExPVyAwMTAwMDAwICAKLSNkZWZpbmUgT19ESVJFQ1QgMDIwMDAwMCAgCisjZGVmaW5lIE9fRElSRUNUT1JZIDA0MDAwMAorI2RlZmluZSBPX05PRk9MTE9XIDAxMDAwMDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIE9fRElSRUNUIDAyMDAwMDAKICNkZWZpbmUgT19MQVJHRUZJTEUgMDQwMDAwMAotCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvZmNudGwuaD4KLQogI2VuZGlmCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2Zwc3RhdGUuaCBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9mcHN0YXRlLmgKaW5kZXggYjM2MmIxNC4uNDU1OGY4MCAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2Zwc3RhdGUuaAorKysgYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vZnBzdGF0ZS5oCkBAIC03LDYyICs3LDYzIEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfX0FTTV9BUk1fRlBTVEFURV9ICiAjZGVmaW5lIF9fQVNNX0FSTV9GUFNUQVRFX0gKLQogI2lmbmRlZiBfX0FTU0VNQkxZX18KLQogc3RydWN0IHZmcF9oYXJkX3N0cnVjdCB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTY0IGZwcmVnc1sxNl07CiAjaWYgX19MSU5VWF9BUk1fQVJDSF9fIDwgNgogIF9fdTMyIGZwbXhfc3RhdGU7CiAjZW5kaWYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgZnBleGM7CiAgX191MzIgZnBzY3I7Ci0KICBfX3UzMiBmcGluc3Q7CiAgX191MzIgZnBpbnN0MjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwotCiB1bmlvbiB2ZnBfc3RhdGUgewogIHN0cnVjdCB2ZnBfaGFyZF9zdHJ1Y3QgaGFyZDsKIH07Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEZQX0hBUkRfU0laRSAzNQotCiBzdHJ1Y3QgZnBfaGFyZF9zdHJ1Y3QgewogIHVuc2lnbmVkIGludCBzYXZlW0ZQX0hBUkRfU0laRV07CiB9OwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBGUF9TT0ZUX1NJWkUgMzUKLQogc3RydWN0IGZwX3NvZnRfc3RydWN0IHsKICB1bnNpZ25lZCBpbnQgc2F2ZVtGUF9TT0ZUX1NJWkVdOwogfTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSVdNTVhUX1NJWkUgMHg5OAotCiBzdHJ1Y3QgaXdtbXh0X3N0cnVjdCB7CiAgdW5zaWduZWQgaW50IHNhdmVbSVdNTVhUX1NJWkUgLyBzaXplb2YodW5zaWduZWQgaW50KV07CiB9OwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogdW5pb24gZnBfc3RhdGUgewogIHN0cnVjdCBmcF9oYXJkX3N0cnVjdCBoYXJkOwogIHN0cnVjdCBmcF9zb2Z0X3N0cnVjdCBzb2Z0OwogfTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRlBfU0laRSAoc2l6ZW9mKHVuaW9uIGZwX3N0YXRlKSAvIHNpemVvZihpbnQpKQotCiBzdHJ1Y3QgY3J1bmNoX3N0YXRlIHsKICB1bnNpZ25lZCBpbnQgbXZkeFsxNl1bMl07CiAgdW5zaWduZWQgaW50IG12YXhbNF1bM107CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGludCBkc3BzY1syXTsKIH07Ci0KICNkZWZpbmUgQ1JVTkNIX1NJWkUgc2l6ZW9mKHN0cnVjdCBjcnVuY2hfc3RhdGUpCi0KICNlbmRpZgotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vZ2x1ZS5oIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2dsdWUuaAppbmRleCAxMzI3YjU5Li44Nzg0MTljIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vZ2x1ZS5oCisrKyBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9nbHVlLmgKQEAgLTcsNSArNywxMiBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9oYXJkaXJxLmggYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vaGFyZGlycS5oCmluZGV4IDU0MjA3ZTMuLjRkMmRiN2MgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9oYXJkaXJxLmgKKysrIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2hhcmRpcnEuaApAQCAtNywzMiArNywzNyBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX19BU01fSEFSRElSUV9ICiAjZGVmaW5lIF9fQVNNX0hBUkRJUlFfSAotCiAjaW5jbHVkZSA8bGludXgvY2FjaGUuaD4KICNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2luY2x1ZGUgPGFzbS9pcnEuaD4KLQogdHlwZWRlZiBzdHJ1Y3QgewogIHVuc2lnbmVkIGludCBfX3NvZnRpcnFfcGVuZGluZzsKICB1bnNpZ25lZCBpbnQgbG9jYWxfdGltZXJfaXJxczsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9IF9fX19jYWNoZWxpbmVfYWxpZ25lZCBpcnFfY3B1c3RhdF90OwotCi0jaW5jbHVkZSA8bGludXgvaXJxX2NwdXN0YXQuaD4gIAotCisjaW5jbHVkZSA8bGludXgvaXJxX2NwdXN0YXQuaD4KICNpZiBOUl9JUlFTID4gMjU2CiAjZGVmaW5lIEhBUkRJUlFfQklUUyA5CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2Vsc2UKICNkZWZpbmUgSEFSRElSUV9CSVRTIDgKICNlbmRpZgotCiAjaWYgMSA8PCBIQVJESVJRX0JJVFMgPCBOUl9JUlFTCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2Vycm9yIEhBUkRJUlFfQklUUyBpcyB0b28gbG93IQogI2VuZGlmCi0KICNkZWZpbmUgX19BUkNIX0lSUV9FWElUX0lSUVNfRElTQUJMRUQgMQotCiAjZW5kaWYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vaGFyZHdhcmUuaCBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9oYXJkd2FyZS5oCmluZGV4IDBiMzgxZDEuLjA5MjBmYWUgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9oYXJkd2FyZS5oCisrKyBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9oYXJkd2FyZS5oCkBAIC03LDExICs3LDE3IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfX0FTTV9IQVJEV0FSRV9ICiAjZGVmaW5lIF9fQVNNX0hBUkRXQVJFX0gKLQogI2luY2x1ZGUgPGFzbS9hcmNoL2hhcmR3YXJlLmg+Ci0KICNlbmRpZgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9od19pcnEuaCBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9od19pcnEuaAppbmRleCBhMzRiMzkwLi45ZGFlZTVkIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vaHdfaXJxLmgKKysrIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2h3X2lycS5oCkBAIC03LDExICs3LDE3IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfQVJDSF9BUk1fSFdfSVJRX0gKICNkZWZpbmUgX0FSQ0hfQVJNX0hXX0lSUV9ICi0KICNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KLQogI2VuZGlmCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2lkZS5oIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2lkZS5oCmluZGV4IGY1MmQ1Y2EuLmViM2Y1YzcgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9pZGUuaAorKysgYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vaWRlLmgKQEAgLTcsOSArNywxNSBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX19BU01BUk1fSURFX0gKICNkZWZpbmUgX19BU01BUk1fSURFX0gKLQogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vaW8uaCBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9pby5oCmluZGV4IDY3OTQwMjIuLmZhYmU3ZWEgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9pby5oCisrKyBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9pby5oCkBAIC03LDkgKzcsMTUgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9fQVNNX0FSTV9JT19ICiAjZGVmaW5lIF9fQVNNX0FSTV9JT19ICi0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2lvY3RsLmggYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vaW9jdGwuaAppbmRleCA2ZTQ0NmI2Li43YjdiZDM3IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vaW9jdGwuaAorKysgYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vaW9jdGwuaApAQCAtNyw2ICs3LDEzIEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2luY2x1ZGUgPGFzbS1nZW5lcmljL2lvY3RsLmg+CmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vaW9jdGxzLmggYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vaW9jdGxzLmgKaW5kZXggOWRmODJiYy4uZTg5ZmQzMCAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2lvY3Rscy5oCisrKyBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9pb2N0bHMuaApAQCAtNyw4MiArNyw5OSBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX19BU01fQVJNX0lPQ1RMU19ICiAjZGVmaW5lIF9fQVNNX0FSTV9JT0NUTFNfSAotCiAjaW5jbHVkZSA8YXNtL2lvY3RsLmg+Ci0KICNkZWZpbmUgVENHRVRTIDB4NTQwMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVENTRVRTIDB4NTQwMgogI2RlZmluZSBUQ1NFVFNXIDB4NTQwMwogI2RlZmluZSBUQ1NFVFNGIDB4NTQwNAogI2RlZmluZSBUQ0dFVEEgMHg1NDA1CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBUQ1NFVEEgMHg1NDA2CiAjZGVmaW5lIFRDU0VUQVcgMHg1NDA3CiAjZGVmaW5lIFRDU0VUQUYgMHg1NDA4CiAjZGVmaW5lIFRDU0JSSyAweDU0MDkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFRDWE9OQyAweDU0MEEKICNkZWZpbmUgVENGTFNIIDB4NTQwQgogI2RlZmluZSBUSU9DRVhDTCAweDU0MEMKICNkZWZpbmUgVElPQ05YQ0wgMHg1NDBECisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBUSU9DU0NUVFkgMHg1NDBFCiAjZGVmaW5lIFRJT0NHUEdSUCAweDU0MEYKICNkZWZpbmUgVElPQ1NQR1JQIDB4NTQxMAogI2RlZmluZSBUSU9DT1VUUSAweDU0MTEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFRJT0NTVEkgMHg1NDEyCiAjZGVmaW5lIFRJT0NHV0lOU1ogMHg1NDEzCiAjZGVmaW5lIFRJT0NTV0lOU1ogMHg1NDE0CiAjZGVmaW5lIFRJT0NNR0VUIDB4NTQxNQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVElPQ01CSVMgMHg1NDE2CiAjZGVmaW5lIFRJT0NNQklDIDB4NTQxNwogI2RlZmluZSBUSU9DTVNFVCAweDU0MTgKICNkZWZpbmUgVElPQ0dTT0ZUQ0FSIDB4NTQxOQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVElPQ1NTT0ZUQ0FSIDB4NTQxQQogI2RlZmluZSBGSU9OUkVBRCAweDU0MUIKICNkZWZpbmUgVElPQ0lOUSBGSU9OUkVBRAogI2RlZmluZSBUSU9DTElOVVggMHg1NDFDCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBUSU9DQ09OUyAweDU0MUQKICNkZWZpbmUgVElPQ0dTRVJJQUwgMHg1NDFFCiAjZGVmaW5lIFRJT0NTU0VSSUFMIDB4NTQxRgogI2RlZmluZSBUSU9DUEtUIDB4NTQyMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRklPTkJJTyAweDU0MjEKICNkZWZpbmUgVElPQ05PVFRZIDB4NTQyMgogI2RlZmluZSBUSU9DU0VURCAweDU0MjMKICNkZWZpbmUgVElPQ0dFVEQgMHg1NDI0Ci0jZGVmaW5lIFRDU0JSS1AgMHg1NDI1ICAKLSNkZWZpbmUgVElPQ1NCUksgMHg1NDI3ICAKLSNkZWZpbmUgVElPQ0NCUksgMHg1NDI4ICAKLSNkZWZpbmUgVElPQ0dTSUQgMHg1NDI5ICAKLSNkZWZpbmUgVElPQ0dQVE4gX0lPUignVCcsMHgzMCwgdW5zaWduZWQgaW50KSAgCi0jZGVmaW5lIFRJT0NTUFRMQ0sgX0lPVygnVCcsMHgzMSwgaW50KSAgCi0KLSNkZWZpbmUgRklPTkNMRVggMHg1NDUwICAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRDU0JSS1AgMHg1NDI1CisjZGVmaW5lIFRJT0NTQlJLIDB4NTQyNworI2RlZmluZSBUSU9DQ0JSSyAweDU0MjgKKyNkZWZpbmUgVElPQ0dTSUQgMHg1NDI5CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU9DR1BUTiBfSU9SKCdUJywweDMwLCB1bnNpZ25lZCBpbnQpCisjZGVmaW5lIFRJT0NTUFRMQ0sgX0lPVygnVCcsMHgzMSwgaW50KQorI2RlZmluZSBGSU9OQ0xFWCAweDU0NTAKICNkZWZpbmUgRklPQ0xFWCAweDU0NTEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEZJT0FTWU5DIDB4NTQ1MgogI2RlZmluZSBUSU9DU0VSQ09ORklHIDB4NTQ1MwogI2RlZmluZSBUSU9DU0VSR1dJTEQgMHg1NDU0CiAjZGVmaW5lIFRJT0NTRVJTV0lMRCAweDU0NTUKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFRJT0NHTENLVFJNSU9TIDB4NTQ1NgogI2RlZmluZSBUSU9DU0xDS1RSTUlPUyAweDU0NTcKLSNkZWZpbmUgVElPQ1NFUkdTVFJVQ1QgMHg1NDU4ICAKLSNkZWZpbmUgVElPQ1NFUkdFVExTUiAweDU0NTkgIAotI2RlZmluZSBUSU9DU0VSR0VUTVVMVEkgMHg1NDVBICAKLSNkZWZpbmUgVElPQ1NFUlNFVE1VTFRJIDB4NTQ1QiAgCi0KLSNkZWZpbmUgVElPQ01JV0FJVCAweDU0NUMgIAotI2RlZmluZSBUSU9DR0lDT1VOVCAweDU0NUQgIAorI2RlZmluZSBUSU9DU0VSR1NUUlVDVCAweDU0NTgKKyNkZWZpbmUgVElPQ1NFUkdFVExTUiAweDU0NTkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJT0NTRVJHRVRNVUxUSSAweDU0NUEKKyNkZWZpbmUgVElPQ1NFUlNFVE1VTFRJIDB4NTQ1QgorI2RlZmluZSBUSU9DTUlXQUlUIDB4NTQ1QworI2RlZmluZSBUSU9DR0lDT1VOVCAweDU0NUQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEZJT1FTSVpFIDB4NTQ1RQotCiAjZGVmaW5lIFRJT0NQS1RfREFUQSAwCiAjZGVmaW5lIFRJT0NQS1RfRkxVU0hSRUFEIDEKICNkZWZpbmUgVElPQ1BLVF9GTFVTSFdSSVRFIDIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFRJT0NQS1RfU1RPUCA0CiAjZGVmaW5lIFRJT0NQS1RfU1RBUlQgOAogI2RlZmluZSBUSU9DUEtUX05PU1RPUCAxNgogI2RlZmluZSBUSU9DUEtUX0RPU1RPUCAzMgotCi0jZGVmaW5lIFRJT0NTRVJfVEVNVCAweDAxICAKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElPQ1NFUl9URU1UIDB4MDEKICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2lwY2J1Zi5oIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2lwY2J1Zi5oCmluZGV4IDBlNDc1MDcuLmU0YmFiZDYgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9pcGNidWYuaAorKysgYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vaXBjYnVmLmgKQEAgLTcsMjQgKzcsMzMgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9fQVNNQVJNX0lQQ0JVRl9ICiAjZGVmaW5lIF9fQVNNQVJNX0lQQ0JVRl9ICi0KIHN0cnVjdCBpcGM2NF9wZXJtCiB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fa2VybmVsX2tleV90IGtleTsKICBfX2tlcm5lbF91aWQzMl90IHVpZDsKICBfX2tlcm5lbF9naWQzMl90IGdpZDsKICBfX2tlcm5lbF91aWQzMl90IGN1aWQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fa2VybmVsX2dpZDMyX3QgY2dpZDsKICBfX2tlcm5lbF9tb2RlX3QgbW9kZTsKICB1bnNpZ25lZCBzaG9ydCBfX3BhZDE7CiAgdW5zaWduZWQgc2hvcnQgc2VxOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBzaG9ydCBfX3BhZDI7CiAgdW5zaWduZWQgbG9uZyBfX3VudXNlZDE7CiAgdW5zaWduZWQgbG9uZyBfX3VudXNlZDI7CiB9OwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vaXJxLmggYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vaXJxLmgKaW5kZXggMjA4NWEyMS4uMTUyMmE1OCAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2lycS5oCisrKyBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9pcnEuaApAQCAtNywzOSArNyw0MyBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX19BU01fQVJNX0lSUV9ICiAjZGVmaW5lIF9fQVNNX0FSTV9JUlFfSAotCiAjaW5jbHVkZSA8YXNtL2FyY2gvaXJxcy5oPgotCiAjaWZuZGVmIGlycV9jYW5vbmljYWxpemUKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIGlycV9jYW5vbmljYWxpemUoaSkgKGkpCiAjZW5kaWYKLQogI2lmbmRlZiBOUl9JUlFTCiAjZGVmaW5lIE5SX0lSUVMgMTI4CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2VuZGlmCi0KICNpZm5kZWYgTk9fSVJRCiAjZGVmaW5lIE5PX0lSUSAoKHVuc2lnbmVkIGludCkoLTEpKQogI2VuZGlmCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgaXJxYWN0aW9uOwotCiAjZGVmaW5lIF9fSVJRVF9GQUxFREdFIElSUV9UWVBFX0VER0VfRkFMTElORwogI2RlZmluZSBfX0lSUVRfUklTRURHRSBJUlFfVFlQRV9FREdFX1JJU0lORwogI2RlZmluZSBfX0lSUVRfTE9XTFZMIElSUV9UWVBFX0xFVkVMX0xPVworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19JUlFUX0hJR0hMVkwgSVJRX1RZUEVfTEVWRUxfSElHSAotCiAjZGVmaW5lIElSUVRfTk9FREdFICgwKQogI2RlZmluZSBJUlFUX1JJU0lORyAoX19JUlFUX1JJU0VER0UpCiAjZGVmaW5lIElSUVRfRkFMTElORyAoX19JUlFUX0ZBTEVER0UpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJUlFUX0JPVEhFREdFIChfX0lSUVRfUklTRURHRXxfX0lSUVRfRkFMRURHRSkKICNkZWZpbmUgSVJRVF9MT1cgKF9fSVJRVF9MT1dMVkwpCiAjZGVmaW5lIElSUVRfSElHSCAoX19JUlFUX0hJR0hMVkwpCiAjZGVmaW5lIElSUVRfUFJPQkUgSVJRX1RZUEVfUFJPQkUKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlbmRpZgotCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vbGlua2FnZS5oIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2xpbmthZ2UuaAppbmRleCAxZmI2MjhlLi5jMWE1YjY4IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vbGlua2FnZS5oCisrKyBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9saW5rYWdlLmgKQEAgLTcsMTIgKzcsMTggQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9fQVNNX0xJTktBR0VfSAogI2RlZmluZSBfX0FTTV9MSU5LQUdFX0gKLQogI2RlZmluZSBfX0FMSUdOIC5hbGlnbiAwCiAjZGVmaW5lIF9fQUxJR05fU1RSICIuYWxpZ24gMCIKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2xvY2FsLmggYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vbG9jYWwuaAppbmRleCAxMGQ2YTYwLi43MjY3M2UzIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vbG9jYWwuaAorKysgYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vbG9jYWwuaApAQCAtNyw2ICs3LDEzIEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2luY2x1ZGUgPGFzbS1nZW5lcmljL2xvY2FsLmg+CmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vbG9ja3MuaCBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9sb2Nrcy5oCmluZGV4IGY0ODQ4NWMuLmFiNDA4MjggMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9sb2Nrcy5oCisrKyBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9sb2Nrcy5oCkBAIC03LDQ5ICs3LDQyIEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfX0FTTV9QUk9DX0xPQ0tTX0gKICNkZWZpbmUgX19BU01fUFJPQ19MT0NLU19ICi0KICNpZiBfX0xJTlVYX0FSTV9BUkNIX18gPj0gNgotCiAjZGVmaW5lIF9fZG93bl9vcChwdHIsZmFpbCkgICAoeyAgIF9fYXNtX18gX192b2xhdGlsZV9fKCAgICJAIGRvd25fb3BcbiIgICIxOglsZHJleAlsciwgWyUwXVxuIiAgIglzdWIJbHIsIGxyLCAlMVxuIiAgIglzdHJleAlpcCwgbHIsIFslMF1cbiIgICIJdGVxCWlwLCAjMFxuIiAgIglibmUJMWJcbiIgICIJdGVxCWxyLCAjMFxuIiAgIgltb3ZtaQlpcCwgJTBcbiIgICIJYmxtaQkiICNmYWlsICAgOiAgIDogInIiIChwdHIpLCAiSSIgKDEpICAgOiAiaXAiLCAibHIiLCAiY2MiKTsgICBzbXBfbWIoKTsgICB9KQotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX2Rvd25fb3BfcmV0KHB0cixmYWlsKSAgICh7ICAgdW5zaWduZWQgaW50IHJldDsgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyggICAiQCBkb3duX29wX3JldFxuIiAgIjE6CWxkcmV4CWxyLCBbJTFdXG4iICAiCXN1YglsciwgbHIsICUyXG4iICAiCXN0cmV4CWlwLCBsciwgWyUxXVxuIiAgIgl0ZXEJaXAsICMwXG4iICAiCWJuZQkxYlxuIiAgIgl0ZXEJbHIsICMwXG4iICAiCW1vdm1pCWlwLCAlMVxuIiAgIgltb3ZwbAlpcCwgIzBcbiIgICIJYmxtaQkiICNmYWlsICJcbiIgICIJbW92CSUwLCBpcCIgICA6ICI9JnIiIChyZXQpICAgOiAiciIgKHB0ciksICJJIiAoMSkgICA6ICJpcCIsICJsciIsICJjYyIpOyAgIHNtcF9tYigpOyAgIHJldDsgICB9KQotCiAjZGVmaW5lIF9fdXBfb3AocHRyLHdha2UpICAgKHsgICBzbXBfbWIoKTsgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyggICAiQCB1cF9vcFxuIiAgIjE6CWxkcmV4CWxyLCBbJTBdXG4iICAiCWFkZAlsciwgbHIsICUxXG4iICAiCXN0cmV4CWlwLCBsciwgWyUwXVxuIiAgIgl0ZXEJaXAsICMwXG4iICAiCWJuZQkxYlxuIiAgIgljbXAJbHIsICMwXG4iICAiCW1vdmxlCWlwLCAlMFxuIiAgIglibGxlCSIgI3dha2UgICA6ICAgOiAiciIgKHB0ciksICJJIiAoMSkgICA6ICJpcCIsICJsciIsICJjYyIpOyAgIH0pCi0KICNkZWZpbmUgUldfTE9DS19CSUFTIDB4MDEwMDAwMDAKICNkZWZpbmUgUldfTE9DS19CSUFTX1NUUiAiMHgwMTAwMDAwMCIKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19kb3duX29wX3dyaXRlKHB0cixmYWlsKSAgICh7ICAgX19hc21fXyBfX3ZvbGF0aWxlX18oICAgIkAgZG93bl9vcF93cml0ZVxuIiAgIjE6CWxkcmV4CWxyLCBbJTBdXG4iICAiCXN1YglsciwgbHIsICUxXG4iICAiCXN0cmV4CWlwLCBsciwgWyUwXVxuIiAgIgl0ZXEJaXAsICMwXG4iICAiCWJuZQkxYlxuIiAgIgl0ZXEJbHIsICMwXG4iICAiCW1vdm5lCWlwLCAlMFxuIiAgIglibG5lCSIgI2ZhaWwgICA6ICAgOiAiciIgKHB0ciksICJJIiAoUldfTE9DS19CSUFTKSAgIDogImlwIiwgImxyIiwgImNjIik7ICAgc21wX21iKCk7ICAgfSkKLQogI2RlZmluZSBfX3VwX29wX3dyaXRlKHB0cix3YWtlKSAgICh7ICAgc21wX21iKCk7ICAgX19hc21fXyBfX3ZvbGF0aWxlX18oICAgIkAgdXBfb3Bfd3JpdGVcbiIgICIxOglsZHJleAlsciwgWyUwXVxuIiAgIglhZGRzCWxyLCBsciwgJTFcbiIgICIJc3RyZXgJaXAsIGxyLCBbJTBdXG4iICAiCXRlcQlpcCwgIzBcbiIgICIJYm5lCTFiXG4iICAiCW1vdmNzCWlwLCAlMFxuIiAgIglibGNzCSIgI3dha2UgICA6ICAgOiAiciIgKHB0ciksICJJIiAoUldfTE9DS19CSUFTKSAgIDogImlwIiwgImxyIiwgImNjIik7ICAgfSkKLQogI2RlZmluZSBfX2Rvd25fb3BfcmVhZChwdHIsZmFpbCkgICBfX2Rvd25fb3AocHRyLCBmYWlsKQotCiAjZGVmaW5lIF9fdXBfb3BfcmVhZChwdHIsd2FrZSkgICAoeyAgIHNtcF9tYigpOyAgIF9fYXNtX18gX192b2xhdGlsZV9fKCAgICJAIHVwX29wX3JlYWRcbiIgICIxOglsZHJleAlsciwgWyUwXVxuIiAgIglhZGQJbHIsIGxyLCAlMVxuIiAgIglzdHJleAlpcCwgbHIsIFslMF1cbiIgICIJdGVxCWlwLCAjMFxuIiAgIglibmUJMWJcbiIgICIJdGVxCWxyLCAjMFxuIiAgIgltb3ZlcQlpcCwgJTBcbiIgICIJYmxlcQkiICN3YWtlICAgOiAgIDogInIiIChwdHIpLCAiSSIgKDEpICAgOiAiaXAiLCAibHIiLCAiY2MiKTsgICB9KQotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2Vsc2UKLQogI2RlZmluZSBfX2Rvd25fb3AocHRyLGZhaWwpICAgKHsgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyggICAiQCBkb3duX29wXG4iICAiCW1ycwlpcCwgY3BzclxuIiAgIglvcnIJbHIsIGlwLCAjMTI4XG4iICAiCW1zcgljcHNyX2MsIGxyXG4iICAiCWxkcglsciwgWyUwXVxuIiAgIglzdWJzCWxyLCBsciwgJTFcbiIgICIJc3RyCWxyLCBbJTBdXG4iICAiCW1zcgljcHNyX2MsIGlwXG4iICAiCW1vdm1pCWlwLCAlMFxuIiAgIglibG1pCSIgI2ZhaWwgICA6ICAgOiAiciIgKHB0ciksICJJIiAoMSkgICA6ICJpcCIsICJsciIsICJjYyIpOyAgIHNtcF9tYigpOyAgIH0pCi0KICNkZWZpbmUgX19kb3duX29wX3JldChwdHIsZmFpbCkgICAoeyAgIHVuc2lnbmVkIGludCByZXQ7ICAgX19hc21fXyBfX3ZvbGF0aWxlX18oICAgIkAgZG93bl9vcF9yZXRcbiIgICIJbXJzCWlwLCBjcHNyXG4iICAiCW9ycglsciwgaXAsICMxMjhcbiIgICIJbXNyCWNwc3JfYywgbHJcbiIgICIJbGRyCWxyLCBbJTFdXG4iICAiCXN1YnMJbHIsIGxyLCAlMlxuIiAgIglzdHIJbHIsIFslMV1cbiIgICIJbXNyCWNwc3JfYywgaXBcbiIgICIJbW92bWkJaXAsICUxXG4iICAiCW1vdnBsCWlwLCAjMFxuIiAgIglibG1pCSIgI2ZhaWwgIlxuIiAgIgltb3YJJTAsIGlwIiAgIDogIj0mciIgKHJldCkgICA6ICJyIiAocHRyKSwgIkkiICgxKSAgIDogImlwIiwgImxyIiwgImNjIik7ICAgc21wX21iKCk7ICAgcmV0OyAgIH0pCi0KICNkZWZpbmUgX191cF9vcChwdHIsd2FrZSkgICAoeyAgIHNtcF9tYigpOyAgIF9fYXNtX18gX192b2xhdGlsZV9fKCAgICJAIHVwX29wXG4iICAiCW1ycwlpcCwgY3BzclxuIiAgIglvcnIJbHIsIGlwLCAjMTI4XG4iICAiCW1zcgljcHNyX2MsIGxyXG4iICAiCWxkcglsciwgWyUwXVxuIiAgIglhZGRzCWxyLCBsciwgJTFcbiIgICIJc3RyCWxyLCBbJTBdXG4iICAiCW1zcgljcHNyX2MsIGlwXG4iICAiCW1vdmxlCWlwLCAlMFxuIiAgIglibGxlCSIgI3dha2UgICA6ICAgOiAiciIgKHB0ciksICJJIiAoMSkgICA6ICJpcCIsICJsciIsICJjYyIpOyAgIH0pCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFJXX0xPQ0tfQklBUyAweDAxMDAwMDAwCiAjZGVmaW5lIFJXX0xPQ0tfQklBU19TVFIgIjB4MDEwMDAwMDAiCi0KICNkZWZpbmUgX19kb3duX29wX3dyaXRlKHB0cixmYWlsKSAgICh7ICAgX19hc21fXyBfX3ZvbGF0aWxlX18oICAgIkAgZG93bl9vcF93cml0ZVxuIiAgIgltcnMJaXAsIGNwc3JcbiIgICIJb3JyCWxyLCBpcCwgIzEyOFxuIiAgIgltc3IJY3Bzcl9jLCBsclxuIiAgIglsZHIJbHIsIFslMF1cbiIgICIJc3VicwlsciwgbHIsICUxXG4iICAiCXN0cglsciwgWyUwXVxuIiAgIgltc3IJY3Bzcl9jLCBpcFxuIiAgIgltb3ZuZQlpcCwgJTBcbiIgICIJYmxuZQkiICNmYWlsICAgOiAgIDogInIiIChwdHIpLCAiSSIgKFJXX0xPQ0tfQklBUykgICA6ICJpcCIsICJsciIsICJjYyIpOyAgIHNtcF9tYigpOyAgIH0pCi0KICNkZWZpbmUgX191cF9vcF93cml0ZShwdHIsd2FrZSkgICAoeyAgIF9fYXNtX18gX192b2xhdGlsZV9fKCAgICJAIHVwX29wX3dyaXRlXG4iICAiCW1ycwlpcCwgY3BzclxuIiAgIglvcnIJbHIsIGlwLCAjMTI4XG4iICAiCW1zcgljcHNyX2MsIGxyXG4iICAiCWxkcglsciwgWyUwXVxuIiAgIglhZGRzCWxyLCBsciwgJTFcbiIgICIJc3RyCWxyLCBbJTBdXG4iICAiCW1zcgljcHNyX2MsIGlwXG4iICAiCW1vdmNzCWlwLCAlMFxuIiAgIglibGNzCSIgI3dha2UgICA6ICAgOiAiciIgKHB0ciksICJJIiAoUldfTE9DS19CSUFTKSAgIDogImlwIiwgImxyIiwgImNjIik7ICAgc21wX21iKCk7ICAgfSkKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19kb3duX29wX3JlYWQocHRyLGZhaWwpICAgX19kb3duX29wKHB0ciwgZmFpbCkKLQogI2RlZmluZSBfX3VwX29wX3JlYWQocHRyLHdha2UpICAgKHsgICBzbXBfbWIoKTsgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyggICAiQCB1cF9vcF9yZWFkXG4iICAiCW1ycwlpcCwgY3BzclxuIiAgIglvcnIJbHIsIGlwLCAjMTI4XG4iICAiCW1zcgljcHNyX2MsIGxyXG4iICAiCWxkcglsciwgWyUwXVxuIiAgIglhZGRzCWxyLCBsciwgJTFcbiIgICIJc3RyCWxyLCBbJTBdXG4iICAiCW1zcgljcHNyX2MsIGlwXG4iICAiCW1vdmVxCWlwLCAlMFxuIiAgIglibGVxCSIgI3dha2UgICA6ICAgOiAiciIgKHB0ciksICJJIiAoMSkgICA6ICJpcCIsICJsciIsICJjYyIpOyAgIH0pCi0KICNlbmRpZgotCiAjZW5kaWYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vbWMxNDY4MThydGMuaCBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9tYzE0NjgxOHJ0Yy5oCmluZGV4IDVhODY3MjQuLjllMjA1YmEgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9tYzE0NjgxOHJ0Yy5oCisrKyBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9tYzE0NjgxOHJ0Yy5oCkBAIC03LDIwICs3LDI1IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfQVNNX01DMTQ2ODE4UlRDX0gKICNkZWZpbmUgX0FTTV9NQzE0NjgxOFJUQ19ICi0KICNpbmNsdWRlIDxhc20vYXJjaC9pcnFzLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjaWZuZGVmIFJUQ19QT1JUCiAjZGVmaW5lIFJUQ19QT1JUKHgpICgweDcwICsgKHgpKQotI2RlZmluZSBSVENfQUxXQVlTX0JDRCAxICAKKyNkZWZpbmUgUlRDX0FMV0FZU19CQ0QgMQogI2VuZGlmCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIENNT1NfUkVBRChhZGRyKSAoeyAgb3V0Yl9wKChhZGRyKSxSVENfUE9SVCgwKSk7ICBpbmJfcChSVENfUE9SVCgxKSk7ICB9KQogI2RlZmluZSBDTU9TX1dSSVRFKHZhbCwgYWRkcikgKHsgIG91dGJfcCgoYWRkciksUlRDX1BPUlQoMCkpOyAgb3V0Yl9wKCh2YWwpLFJUQ19QT1JUKDEpKTsgIH0pCi0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL21lbW9yeS5oIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL21lbW9yeS5oCmluZGV4IGMxMTM3YTcuLjJjN2ExNmMgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9tZW1vcnkuaAorKysgYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vbWVtb3J5LmgKQEAgLTcsODkgKzcsOTcgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9fQVNNX0FSTV9NRU1PUllfSAogI2RlZmluZSBfX0FTTV9BUk1fTUVNT1JZX0gKLQogI2lmbmRlZiBfX0FTU0VNQkxZX18KICNkZWZpbmUgVUwoeCkgKHgjI1VMKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlbHNlCiAjZGVmaW5lIFVMKHgpICh4KQogI2VuZGlmCi0KICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNpbmNsdWRlIDxhc20vYXJjaC9tZW1vcnkuaD4KICNpbmNsdWRlIDxhc20vc2l6ZXMuaD4KLQogI2lmbmRlZiBUQVNLX1NJWkUKICNkZWZpbmUgVEFTS19TSVpFIChDT05GSUdfRFJBTV9TSVpFKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlbmRpZgotCiAjaWZuZGVmIFRBU0tfVU5NQVBQRURfQkFTRQogI2RlZmluZSBUQVNLX1VOTUFQUEVEX0JBU0UgVUwoMHgwMDAwMDAwMCkKICNlbmRpZgotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2lmbmRlZiBQSFlTX09GRlNFVAogI2RlZmluZSBQSFlTX09GRlNFVCAoQ09ORklHX0RSQU1fQkFTRSkKICNlbmRpZgotCiAjaWZuZGVmIEVORF9NRU0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEVORF9NRU0gKENPTkZJR19EUkFNX0JBU0UgKyBDT05GSUdfRFJBTV9TSVpFKQogI2VuZGlmCi0KICNpZm5kZWYgUEFHRV9PRkZTRVQKICNkZWZpbmUgUEFHRV9PRkZTRVQgKFBIWVNfT0ZGU0VUKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlbmRpZgotCiAjZGVmaW5lIE1PRFVMRV9FTkQgKEVORF9NRU0pCiAjZGVmaW5lIE1PRFVMRV9TVEFSVCAoUEhZU19PRkZTRVQpCi0KICNpZm5kZWYgQ09OU0lTVEVOVF9ETUFfU0laRQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQ09OU0lTVEVOVF9ETUFfU0laRSBTWl8yTQogI2VuZGlmCi0KICNpZm5kZWYgX192aXJ0X3RvX3BoeXMKICNkZWZpbmUgX192aXJ0X3RvX3BoeXMoeCkgKCh4KSAtIFBBR0VfT0ZGU0VUICsgUEhZU19PRkZTRVQpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX3BoeXNfdG9fdmlydCh4KSAoKHgpIC0gUEhZU19PRkZTRVQgKyBQQUdFX09GRlNFVCkKICNlbmRpZgotCiAjZGVmaW5lIF9fcGh5c190b19wZm4ocGFkZHIpICgocGFkZHIpID4+IFBBR0VfU0hJRlQpCiAjZGVmaW5lIF9fcGZuX3RvX3BoeXMocGZuKSAoKHBmbikgPDwgUEFHRV9TSElGVCkKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNpZm5kZWYgX19BU1NFTUJMWV9fCi0KICNpZm5kZWYgSVNBX0RNQV9USFJFU0hPTEQKICNkZWZpbmUgSVNBX0RNQV9USFJFU0hPTEQgKDB4ZmZmZmZmZmZVTEwpCiAjZW5kaWYKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNpZm5kZWYgYXJjaF9hZGp1c3Rfem9uZXMKICNkZWZpbmUgYXJjaF9hZGp1c3Rfem9uZXMobm9kZSxzaXplLGhvbGVzKSBkbyB7IH0gd2hpbGUgKDApCiAjZW5kaWYKLQogI2RlZmluZSBQSFlTX1BGTl9PRkZTRVQgKFBIWVNfT0ZGU0VUID4+IFBBR0VfU0hJRlQpCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fcGEoeCkgX192aXJ0X3RvX3BoeXMoKHVuc2lnbmVkIGxvbmcpKHgpKQogI2RlZmluZSBfX3ZhKHgpICgodm9pZCAqKV9fcGh5c190b192aXJ0KCh1bnNpZ25lZCBsb25nKSh4KSkpCiAjZGVmaW5lIHBmbl90b19rYWRkcihwZm4pIF9fdmEoKHBmbikgPDwgUEFHRV9TSElGVCkKICNkZWZpbmUgQVJDSF9QRk5fT0ZGU0VUIFBIWVNfUEZOX09GRlNFVAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgcGZuX3ZhbGlkKHBmbikgKChwZm4pID49IFBIWVNfUEZOX09GRlNFVCAmJiAocGZuKSA8IChQSFlTX1BGTl9PRkZTRVQgKyBtYXhfbWFwbnIpKQogI2RlZmluZSB2aXJ0X3RvX3BhZ2Uoa2FkZHIpIHBmbl90b19wYWdlKF9fcGEoa2FkZHIpID4+IFBBR0VfU0hJRlQpCiAjZGVmaW5lIHZpcnRfYWRkcl92YWxpZChrYWRkcikgKCh1bnNpZ25lZCBsb25nKShrYWRkcikgPj0gUEFHRV9PRkZTRVQgJiYgKHVuc2lnbmVkIGxvbmcpKGthZGRyKSA8ICh1bnNpZ25lZCBsb25nKWhpZ2hfbWVtb3J5KQogI2RlZmluZSBQSFlTX1RPX05JRChhZGRyKSAoMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIHBhZ2VfdG9fcGh5cyhwYWdlKSAocGFnZV90b19wZm4ocGFnZSkgPDwgUEFHRV9TSElGVCkKICNpZm5kZWYgX19hcmNoX3BhZ2VfdG9fZG1hCiAjZGVmaW5lIHBhZ2VfdG9fZG1hKGRldiwgcGFnZSkgKChkbWFfYWRkcl90KV9fdmlydF90b19idXMoKHVuc2lnbmVkIGxvbmcpcGFnZV9hZGRyZXNzKHBhZ2UpKSkKICNkZWZpbmUgZG1hX3RvX3ZpcnQoZGV2LCBhZGRyKSAoKHZvaWQgKilfX2J1c190b192aXJ0KGFkZHIpKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgdmlydF90b19kbWEoZGV2LCBhZGRyKSAoKGRtYV9hZGRyX3QpX192aXJ0X3RvX2J1cygodW5zaWduZWQgbG9uZykoYWRkcikpKQogI2Vsc2UKICNkZWZpbmUgcGFnZV90b19kbWEoZGV2LCBwYWdlKSAoX19hcmNoX3BhZ2VfdG9fZG1hKGRldiwgcGFnZSkpCiAjZGVmaW5lIGRtYV90b192aXJ0KGRldiwgYWRkcikgKF9fYXJjaF9kbWFfdG9fdmlydChkZXYsIGFkZHIpKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgdmlydF90b19kbWEoZGV2LCBhZGRyKSAoX19hcmNoX3ZpcnRfdG9fZG1hKGRldiwgYWRkcikpCiAjZW5kaWYKICNpZm5kZWYgYXJjaF9pc19jb2hlcmVudAogI2RlZmluZSBhcmNoX2lzX2NvaGVyZW50KCkgMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlbmRpZgogI2VuZGlmCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvbWVtb3J5X21vZGVsLmg+CiAjZW5kaWYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vbW1hbi5oIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL21tYW4uaAppbmRleCA4ZjcxZDFiLi44N2E4MDZhIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vbW1hbi5oCisrKyBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9tbWFuLmgKQEAgLTcsMjIgKzcsMjggQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9fQVJNX01NQU5fSF9fCiAjZGVmaW5lIF9fQVJNX01NQU5fSF9fCi0KICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9tbWFuLmg+Ci0KLSNkZWZpbmUgTUFQX0dST1dTRE9XTiAweDAxMDAgIAotI2RlZmluZSBNQVBfREVOWVdSSVRFIDB4MDgwMCAgCi0jZGVmaW5lIE1BUF9FWEVDVVRBQkxFIDB4MTAwMCAgCi0jZGVmaW5lIE1BUF9MT0NLRUQgMHgyMDAwICAKLSNkZWZpbmUgTUFQX05PUkVTRVJWRSAweDQwMDAgIAotI2RlZmluZSBNQVBfUE9QVUxBVEUgMHg4MDAwICAKLSNkZWZpbmUgTUFQX05PTkJMT0NLIDB4MTAwMDAgIAotCi0jZGVmaW5lIE1DTF9DVVJSRU5UIDEgIAotI2RlZmluZSBNQ0xfRlVUVVJFIDIgIAotCisjZGVmaW5lIE1BUF9HUk9XU0RPV04gMHgwMTAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBNQVBfREVOWVdSSVRFIDB4MDgwMAorI2RlZmluZSBNQVBfRVhFQ1VUQUJMRSAweDEwMDAKKyNkZWZpbmUgTUFQX0xPQ0tFRCAweDIwMDAKKyNkZWZpbmUgTUFQX05PUkVTRVJWRSAweDQwMDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIE1BUF9QT1BVTEFURSAweDgwMDAKKyNkZWZpbmUgTUFQX05PTkJMT0NLIDB4MTAwMDAKKyNkZWZpbmUgTUNMX0NVUlJFTlQgMQorI2RlZmluZSBNQ0xfRlVUVVJFIDIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9tb2R1bGUuaCBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9tb2R1bGUuaAppbmRleCA2OGI4MDZhLi4wNDZlZmE4IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vbW9kdWxlLmgKKysrIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL21vZHVsZS5oCkBAIC03LDIwICs3LDI1IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfQVNNX0FSTV9NT0RVTEVfSAogI2RlZmluZSBfQVNNX0FSTV9NT0RVTEVfSAotCiBzdHJ1Y3QgbW9kX2FyY2hfc3BlY2lmaWMKIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgaW50IGZvbzsKIH07Ci0KICNkZWZpbmUgRWxmX1NoZHIgRWxmMzJfU2hkcgogI2RlZmluZSBFbGZfU3ltIEVsZjMyX1N5bQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRWxmX0VoZHIgRWxmMzJfRWhkcgotCiAjZGVmaW5lIE1PRFVMRV9BUkNIX1ZFUk1BR0lDICJBUk12IiBfX3N0cmluZ2lmeShfX0xJTlVYX0FSTV9BUkNIX18pICIgIgotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9tc2didWYuaCBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9tc2didWYuaAppbmRleCA4NGQ2MTRjLi5kNjg3ZTMwIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vbXNnYnVmLmgKKysrIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL21zZ2J1Zi5oCkBAIC03LDI2ICs3LDM1IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfQVNNQVJNX01TR0JVRl9ICiAjZGVmaW5lIF9BU01BUk1fTVNHQlVGX0gKLQogc3RydWN0IG1zcWlkNjRfZHMgewogIHN0cnVjdCBpcGM2NF9wZXJtIG1zZ19wZXJtOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX2tlcm5lbF90aW1lX3QgbXNnX3N0aW1lOwogIHVuc2lnbmVkIGxvbmcgX191bnVzZWQxOwogIF9fa2VybmVsX3RpbWVfdCBtc2dfcnRpbWU7CiAgdW5zaWduZWQgbG9uZyBfX3VudXNlZDI7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fa2VybmVsX3RpbWVfdCBtc2dfY3RpbWU7CiAgdW5zaWduZWQgbG9uZyBfX3VudXNlZDM7CiAgdW5zaWduZWQgbG9uZyBtc2dfY2J5dGVzOwogIHVuc2lnbmVkIGxvbmcgbXNnX3FudW07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGxvbmcgbXNnX3FieXRlczsKICBfX2tlcm5lbF9waWRfdCBtc2dfbHNwaWQ7CiAgX19rZXJuZWxfcGlkX3QgbXNnX2xycGlkOwogIHVuc2lnbmVkIGxvbmcgX191bnVzZWQ0OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBsb25nIF9fdW51c2VkNTsKIH07Ci0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL210ZC14aXAuaCBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9tdGQteGlwLmgKaW5kZXggNmM1M2Y2Zi4uZDZjZTEzZiAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL210ZC14aXAuaAorKysgYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vbXRkLXhpcC5oCkBAIC03LDE0ICs3LDE5IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfX0FSTV9NVERfWElQX0hfXwogI2RlZmluZSBfX0FSTV9NVERfWElQX0hfXwotCiAjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvbXRkLXhpcC5oPgotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSB4aXBfaXByZWZldGNoKCkgZG8geyBhc20gdm9sYXRpbGUgKCIucmVwIDg7IG5vcDsgLmVuZHIiKTsgfSB3aGlsZSAoMCkKLQogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vcGFnZS5oIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL3BhZ2UuaAppbmRleCBmOTgwMzQzLi4zYzQ1NzI0IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vcGFnZS5oCisrKyBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9wYWdlLmgKQEAgLTcsMTMgKzcsMTkgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9BU01BUk1fUEFHRV9ICiAjZGVmaW5lIF9BU01BUk1fUEFHRV9ICi0KICNkZWZpbmUgUEFHRV9TSElGVCAxMgogI2RlZmluZSBQQUdFX1NJWkUgKDFVTCA8PCBQQUdFX1NISUZUKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUEFHRV9NQVNLICh+KFBBR0VfU0laRS0xKSkKLQogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vcGFyYW0uaCBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9wYXJhbS5oCmluZGV4IDY4MTRmZTMuLjE0OGNjNDcgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9wYXJhbS5oCisrKyBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9wYXJhbS5oCkBAIC03LDE5ICs3LDIyIEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfX0FTTV9QQVJBTV9ICiAjZGVmaW5lIF9fQVNNX1BBUkFNX0gKLQogI2RlZmluZSBIWiAxMDAKLQogI2RlZmluZSBFWEVDX1BBR0VTSVpFIDQwOTYKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNpZm5kZWYgTk9HUk9VUAogI2RlZmluZSBOT0dST1VQICgtMSkKICNlbmRpZgotCi0KICNlbmRpZgotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL3BlcmNwdS5oIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL3BlcmNwdS5oCmluZGV4IDI1MDAzNDUuLjkwZDZjZDUgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9wZXJjcHUuaAorKysgYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vcGVyY3B1LmgKQEAgLTcsMTEgKzcsMTcgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9fQVJNX1BFUkNQVQogI2RlZmluZSBfX0FSTV9QRVJDUFUKLQogI2luY2x1ZGUgPGFzbS1nZW5lcmljL3BlcmNwdS5oPgotCiAjZW5kaWYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vcGdhbGxvYy5oIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL3BnYWxsb2MuaAppbmRleCA1ZDQ1ZTY1Li5jNDMyYWE2IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vcGdhbGxvYy5oCisrKyBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9wZ2FsbG9jLmgKQEAgLTcsMTcgKzcsMjMgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9BU01BUk1fUEdBTExPQ19ICiAjZGVmaW5lIF9BU01BUk1fUEdBTExPQ19ICi0KICNpbmNsdWRlIDxhc20vZG9tYWluLmg+CiAjaW5jbHVkZSA8YXNtL3BndGFibGUtaHdkZWYuaD4KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CiAjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+Ci0KICNkZWZpbmUgY2hlY2tfcGd0X2NhY2hlKCkgZG8geyB9IHdoaWxlICgwKQotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vcGd0YWJsZS1od2RlZi5oIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL3BndGFibGUtaHdkZWYuaAppbmRleCA0N2U4Njc1Li5jYzQ3YjM3IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vcGd0YWJsZS1od2RlZi5oCisrKyBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9wZ3RhYmxlLWh3ZGVmLmgKQEAgLTcsNjQgKzcsNzcgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9BU01BUk1fUEdUQUJMRV9IV0RFRl9ICiAjZGVmaW5lIF9BU01BUk1fUEdUQUJMRV9IV0RFRl9ICi0KICNkZWZpbmUgUE1EX1RZUEVfTUFTSyAoMyA8PCAwKQogI2RlZmluZSBQTURfVFlQRV9GQVVMVCAoMCA8PCAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUE1EX1RZUEVfVEFCTEUgKDEgPDwgMCkKICNkZWZpbmUgUE1EX1RZUEVfU0VDVCAoMiA8PCAwKQogI2RlZmluZSBQTURfQklUNCAoMSA8PCA0KQogI2RlZmluZSBQTURfRE9NQUlOKHgpICgoeCkgPDwgNSkKLSNkZWZpbmUgUE1EX1BST1RFQ1RJT04gKDEgPDwgOSkgIAotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBQTURfUFJPVEVDVElPTiAoMSA8PCA5KQogI2RlZmluZSBQTURfU0VDVF9CVUZGRVJBQkxFICgxIDw8IDIpCiAjZGVmaW5lIFBNRF9TRUNUX0NBQ0hFQUJMRSAoMSA8PCAzKQotI2RlZmluZSBQTURfU0VDVF9YTiAoMSA8PCA0KSAgCisjZGVmaW5lIFBNRF9TRUNUX1hOICgxIDw8IDQpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQTURfU0VDVF9BUF9XUklURSAoMSA8PCAxMCkKICNkZWZpbmUgUE1EX1NFQ1RfQVBfUkVBRCAoMSA8PCAxMSkKLSNkZWZpbmUgUE1EX1NFQ1RfVEVYKHgpICgoeCkgPDwgMTIpICAKLSNkZWZpbmUgUE1EX1NFQ1RfQVBYICgxIDw8IDE1KSAgCi0jZGVmaW5lIFBNRF9TRUNUX1MgKDEgPDwgMTYpICAKLSNkZWZpbmUgUE1EX1NFQ1RfbkcgKDEgPDwgMTcpICAKLSNkZWZpbmUgUE1EX1NFQ1RfU1VQRVIgKDEgPDwgMTgpICAKLQorI2RlZmluZSBQTURfU0VDVF9URVgoeCkgKCh4KSA8PCAxMikKKyNkZWZpbmUgUE1EX1NFQ1RfQVBYICgxIDw8IDE1KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgUE1EX1NFQ1RfUyAoMSA8PCAxNikKKyNkZWZpbmUgUE1EX1NFQ1RfbkcgKDEgPDwgMTcpCisjZGVmaW5lIFBNRF9TRUNUX1NVUEVSICgxIDw8IDE4KQogI2RlZmluZSBQTURfU0VDVF9VTkNBQ0hFRCAoMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBNRF9TRUNUX0JVRkZFUkVEIChQTURfU0VDVF9CVUZGRVJBQkxFKQogI2RlZmluZSBQTURfU0VDVF9XVCAoUE1EX1NFQ1RfQ0FDSEVBQkxFKQogI2RlZmluZSBQTURfU0VDVF9XQiAoUE1EX1NFQ1RfQ0FDSEVBQkxFIHwgUE1EX1NFQ1RfQlVGRkVSQUJMRSkKICNkZWZpbmUgUE1EX1NFQ1RfTUlOSUNBQ0hFIChQTURfU0VDVF9URVgoMSkgfCBQTURfU0VDVF9DQUNIRUFCTEUpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQTURfU0VDVF9XQldBIChQTURfU0VDVF9URVgoMSkgfCBQTURfU0VDVF9DQUNIRUFCTEUgfCBQTURfU0VDVF9CVUZGRVJBQkxFKQogI2RlZmluZSBQTURfU0VDVF9OT05TSEFSRURfREVWIChQTURfU0VDVF9URVgoMikpCi0KICNkZWZpbmUgUFRFX1RZUEVfTUFTSyAoMyA8PCAwKQogI2RlZmluZSBQVEVfVFlQRV9GQVVMVCAoMCA8PCAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUFRFX1RZUEVfTEFSR0UgKDEgPDwgMCkKICNkZWZpbmUgUFRFX1RZUEVfU01BTEwgKDIgPDwgMCkKLSNkZWZpbmUgUFRFX1RZUEVfRVhUICgzIDw8IDApICAKKyNkZWZpbmUgUFRFX1RZUEVfRVhUICgzIDw8IDApCiAjZGVmaW5lIFBURV9CVUZGRVJBQkxFICgxIDw8IDIpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQVEVfQ0FDSEVBQkxFICgxIDw8IDMpCi0KLSNkZWZpbmUgUFRFX0VYVF9YTiAoMSA8PCAwKSAgCisjZGVmaW5lIFBURV9FWFRfWE4gKDEgPDwgMCkKICNkZWZpbmUgUFRFX0VYVF9BUF9NQVNLICgzIDw8IDQpCiAjZGVmaW5lIFBURV9FWFRfQVAwICgxIDw8IDQpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQVEVfRVhUX0FQMSAoMiA8PCA0KQogI2RlZmluZSBQVEVfRVhUX0FQX1VOT19TUk8gKDAgPDwgNCkKICNkZWZpbmUgUFRFX0VYVF9BUF9VTk9fU1JXIChQVEVfRVhUX0FQMCkKICNkZWZpbmUgUFRFX0VYVF9BUF9VUk9fU1JXIChQVEVfRVhUX0FQMSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBURV9FWFRfQVBfVVJXX1NSVyAoUFRFX0VYVF9BUDF8UFRFX0VYVF9BUDApCi0jZGVmaW5lIFBURV9FWFRfVEVYKHgpICgoeCkgPDwgNikgIAotI2RlZmluZSBQVEVfRVhUX0FQWCAoMSA8PCA5KSAgCi0jZGVmaW5lIFBURV9FWFRfQ09IRVJFTlQgKDEgPDwgOSkgIAotI2RlZmluZSBQVEVfRVhUX1NIQVJFRCAoMSA8PCAxMCkgIAotI2RlZmluZSBQVEVfRVhUX05HICgxIDw8IDExKSAgCi0KKyNkZWZpbmUgUFRFX0VYVF9URVgoeCkgKCh4KSA8PCA2KQorI2RlZmluZSBQVEVfRVhUX0FQWCAoMSA8PCA5KQorI2RlZmluZSBQVEVfRVhUX0NPSEVSRU5UICgxIDw8IDkpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBQVEVfRVhUX1NIQVJFRCAoMSA8PCAxMCkKKyNkZWZpbmUgUFRFX0VYVF9ORyAoMSA8PCAxMSkKICNkZWZpbmUgUFRFX1NNQUxMX0FQX01BU0sgKDB4ZmYgPDwgNCkKICNkZWZpbmUgUFRFX1NNQUxMX0FQX1VOT19TUk8gKDB4MDAgPDwgNCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBURV9TTUFMTF9BUF9VTk9fU1JXICgweDU1IDw8IDQpCiAjZGVmaW5lIFBURV9TTUFMTF9BUF9VUk9fU1JXICgweGFhIDw8IDQpCiAjZGVmaW5lIFBURV9TTUFMTF9BUF9VUldfU1JXICgweGZmIDw8IDQpCi0KICNlbmRpZgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9wZ3RhYmxlLmggYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vcGd0YWJsZS5oCmluZGV4IGNiYWM2MTEuLjJkNmQyNzQgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9wZ3RhYmxlLmgKKysrIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL3BndGFibGUuaApAQCAtNywxNCArNywxOSBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX0FTTUFSTV9QR1RBQkxFX0gKICNkZWZpbmUgX0FTTUFSTV9QR1RBQkxFX0gKLQogI2luY2x1ZGUgPGFzbS1nZW5lcmljLzRsZXZlbC1maXh1cC5oPgogI2luY2x1ZGUgPGFzbS9wcm9jLWZucy5oPgotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2luY2x1ZGUgInBndGFibGUtbm9tbXUuaCIKLQogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vcG9sbC5oIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL3BvbGwuaAppbmRleCBjNWI4MGE1Li40YzBmMzY0IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vcG9sbC5oCisrKyBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9wb2xsLmgKQEAgLTcsMzAgKzcsMzggQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9fQVNNQVJNX1BPTExfSAogI2RlZmluZSBfX0FTTUFSTV9QT0xMX0gKLQogI2RlZmluZSBQT0xMSU4gMHgwMDAxCiAjZGVmaW5lIFBPTExQUkkgMHgwMDAyCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQT0xMT1VUIDB4MDAwNAogI2RlZmluZSBQT0xMRVJSIDB4MDAwOAogI2RlZmluZSBQT0xMSFVQIDB4MDAxMAogI2RlZmluZSBQT0xMTlZBTCAweDAwMjAKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUE9MTFJETk9STSAweDAwNDAKICNkZWZpbmUgUE9MTFJEQkFORCAweDAwODAKICNkZWZpbmUgUE9MTFdSTk9STSAweDAxMDAKICNkZWZpbmUgUE9MTFdSQkFORCAweDAyMDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBPTExNU0cgMHgwNDAwCiAjZGVmaW5lIFBPTExSRU1PVkUgMHgxMDAwCiAjZGVmaW5lIFBPTExSREhVUCAweDIwMDAKLQogc3RydWN0IHBvbGxmZCB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGludCBmZDsKICBzaG9ydCBldmVudHM7CiAgc2hvcnQgcmV2ZW50czsKIH07Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9wb3NpeF90eXBlcy5oIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL3Bvc2l4X3R5cGVzLmgKaW5kZXggYmM4NTIxNy4uYTA5OTAzZCAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL3Bvc2l4X3R5cGVzLmgKKysrIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL3Bvc2l4X3R5cGVzLmgKQEAgLTcsNjQgKzcsNzIgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9fQVJDSF9BUk1fUE9TSVhfVFlQRVNfSAogI2RlZmluZSBfX0FSQ0hfQVJNX1BPU0lYX1RZUEVTX0gKLQogdHlwZWRlZiB1bnNpZ25lZCBsb25nIF9fa2VybmVsX2lub190OwogdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBfX2tlcm5lbF9tb2RlX3Q7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBfX2tlcm5lbF9ubGlua190OwogdHlwZWRlZiBsb25nIF9fa2VybmVsX29mZl90OwogdHlwZWRlZiBpbnQgX19rZXJuZWxfcGlkX3Q7CiB0eXBlZGVmIHVuc2lnbmVkIHNob3J0IF9fa2VybmVsX2lwY19waWRfdDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB0eXBlZGVmIHVuc2lnbmVkIHNob3J0IF9fa2VybmVsX3VpZF90OwogdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBfX2tlcm5lbF9naWRfdDsKIHR5cGVkZWYgdW5zaWduZWQgaW50IF9fa2VybmVsX3NpemVfdDsKIHR5cGVkZWYgaW50IF9fa2VybmVsX3NzaXplX3Q7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogdHlwZWRlZiBpbnQgX19rZXJuZWxfcHRyZGlmZl90OwogdHlwZWRlZiBsb25nIF9fa2VybmVsX3RpbWVfdDsKIHR5cGVkZWYgbG9uZyBfX2tlcm5lbF9zdXNlY29uZHNfdDsKIHR5cGVkZWYgbG9uZyBfX2tlcm5lbF9jbG9ja190OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHR5cGVkZWYgaW50IF9fa2VybmVsX3RpbWVyX3Q7CiB0eXBlZGVmIGludCBfX2tlcm5lbF9jbG9ja2lkX3Q7CiB0eXBlZGVmIGludCBfX2tlcm5lbF9kYWRkcl90OwogdHlwZWRlZiBjaGFyICogX19rZXJuZWxfY2FkZHJfdDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB0eXBlZGVmIHVuc2lnbmVkIHNob3J0IF9fa2VybmVsX3VpZDE2X3Q7CiB0eXBlZGVmIHVuc2lnbmVkIHNob3J0IF9fa2VybmVsX2dpZDE2X3Q7CiB0eXBlZGVmIHVuc2lnbmVkIGludCBfX2tlcm5lbF91aWQzMl90OwogdHlwZWRlZiB1bnNpZ25lZCBpbnQgX19rZXJuZWxfZ2lkMzJfdDsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHR5cGVkZWYgdW5zaWduZWQgc2hvcnQgX19rZXJuZWxfb2xkX3VpZF90OwogdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBfX2tlcm5lbF9vbGRfZ2lkX3Q7CiB0eXBlZGVmIHVuc2lnbmVkIHNob3J0IF9fa2VybmVsX29sZF9kZXZfdDsKLQogI2lmZGVmIF9fR05VQ19fCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogdHlwZWRlZiBsb25nIGxvbmcgX19rZXJuZWxfbG9mZl90OwogI2VuZGlmCi0KIHR5cGVkZWYgc3RydWN0IHsKICNpZmRlZiBfX1VTRV9BTEwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgaW50IHZhbFsyXTsKICNlbHNlCiAgaW50IF9fdmFsWzJdOwogI2VuZGlmCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfSBfX2tlcm5lbF9mc2lkX3Q7Ci0KICNpZiAhZGVmaW5lZChfX0dMSUJDX18pIHx8IF9fR0xJQkNfXyA8IDIKLQogI3VuZGVmIF9fRkRfU0VUCiAjZGVmaW5lIF9fRkRfU0VUKGZkLCBmZHNldHApICAgKCgoZmRfc2V0ICopKGZkc2V0cCkpLT5mZHNfYml0c1soZmQpID4+IDVdIHw9ICgxPDwoKGZkKSAmIDMxKSkpCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjdW5kZWYgX19GRF9DTFIKICNkZWZpbmUgX19GRF9DTFIoZmQsIGZkc2V0cCkgICAoKChmZF9zZXQgKikoZmRzZXRwKSktPmZkc19iaXRzWyhmZCkgPj4gNV0gJj0gfigxPDwoKGZkKSAmIDMxKSkpCi0KICN1bmRlZiBfX0ZEX0lTU0VUCiAjZGVmaW5lIF9fRkRfSVNTRVQoZmQsIGZkc2V0cCkgICAoKCgoZmRfc2V0ICopKGZkc2V0cCkpLT5mZHNfYml0c1soZmQpID4+IDVdICYgKDE8PCgoZmQpICYgMzEpKSkgIT0gMCkKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICN1bmRlZiBfX0ZEX1pFUk8KICNkZWZpbmUgX19GRF9aRVJPKGZkc2V0cCkgICAobWVtc2V0IChmZHNldHAsIDAsIHNpemVvZiAoKihmZF9zZXQgKikoZmRzZXRwKSkpKQotCiAjZW5kaWYKLQogI2VuZGlmCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL3Byb2MtZm5zLmggYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vcHJvYy1mbnMuaAppbmRleCA0YTU2MGQwLi41OTQ4YzI2IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vcHJvYy1mbnMuaAorKysgYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vcHJvYy1mbnMuaApAQCAtNyw5ICs3LDE1IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfX0FTTV9QUk9DRk5TX0gKICNkZWZpbmUgX19BU01fUFJPQ0ZOU19ICi0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL3Byb2Nlc3Nvci5oIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL3Byb2Nlc3Nvci5oCmluZGV4IGY5M2NiYzEuLmM3ZmU3ZTkgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9wcm9jZXNzb3IuaAorKysgYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vcHJvY2Vzc29yLmgKQEAgLTcsMTEgKzcsMTcgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9fQVNNX0FSTV9QUk9DRVNTT1JfSAogI2RlZmluZSBfX0FTTV9BUk1fUFJPQ0VTU09SX0gKLQogI2RlZmluZSBjdXJyZW50X3RleHRfYWRkcigpICh7IF9fbGFiZWxfXyBfbDsgX2w6ICYmX2w7fSkKLQogI2VuZGlmCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL3Byb2NpbmZvLmggYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vcHJvY2luZm8uaAppbmRleCBkNzc0ZTBiLi5lMmNhMDM5IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vcHJvY2luZm8uaAorKysgYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vcHJvY2luZm8uaApAQCAtNyw0NSArNyw1NCBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX19BU01fUFJPQ0lORk9fSAogI2RlZmluZSBfX0FTTV9QUk9DSU5GT19ICi0KICNpZm5kZWYgX19BU1NFTUJMWV9fCi0KIHN0cnVjdCBjcHVfdGxiX2ZuczsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgY3B1X3VzZXJfZm5zOwogc3RydWN0IGNwdV9jYWNoZV9mbnM7CiBzdHJ1Y3QgcHJvY2Vzc29yOwotCiBzdHJ1Y3QgcHJvY19pbmZvX2xpc3QgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBpbnQgY3B1X3ZhbDsKICB1bnNpZ25lZCBpbnQgY3B1X21hc2s7CiAgdW5zaWduZWQgbG9uZyBfX2NwdV9tbV9tbXVfZmxhZ3M7CiAgdW5zaWduZWQgbG9uZyBfX2NwdV9pb19tbXVfZmxhZ3M7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGxvbmcgX19jcHVfZmx1c2g7CiAgY29uc3QgY2hhciAqYXJjaF9uYW1lOwogIGNvbnN0IGNoYXIgKmVsZl9uYW1lOwogIHVuc2lnbmVkIGludCBlbGZfaHdjYXA7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGNvbnN0IGNoYXIgKmNwdV9uYW1lOwogIHN0cnVjdCBwcm9jZXNzb3IgKnByb2M7CiAgc3RydWN0IGNwdV90bGJfZm5zICp0bGI7CiAgc3RydWN0IGNwdV91c2VyX2ZucyAqdXNlcjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IGNwdV9jYWNoZV9mbnMgKmNhY2hlOwogfTsKLQogI2VuZGlmCi0KICNkZWZpbmUgSFdDQVBfU1dQIDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEhXQ0FQX0hBTEYgMgogI2RlZmluZSBIV0NBUF9USFVNQiA0Ci0jZGVmaW5lIEhXQ0FQXzI2QklUIDggIAorI2RlZmluZSBIV0NBUF8yNkJJVCA4CiAjZGVmaW5lIEhXQ0FQX0ZBU1RfTVVMVCAxNgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSFdDQVBfRlBBIDMyCiAjZGVmaW5lIEhXQ0FQX1ZGUCA2NAogI2RlZmluZSBIV0NBUF9FRFNQIDEyOAogI2RlZmluZSBIV0NBUF9KQVZBIDI1NgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSFdDQVBfSVdNTVhUIDUxMgotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9wdHJhY2UuaCBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9wdHJhY2UuaAppbmRleCBhMDRlZWMzLi5hYjU4OTkwIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vcHRyYWNlLmgKKysrIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL3B0cmFjZS5oCkBAIC03LDkyICs3LDk4IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfX0FTTV9BUk1fUFRSQUNFX0gKICNkZWZpbmUgX19BU01fQVJNX1BUUkFDRV9ICi0KICNkZWZpbmUgUFRSQUNFX0dFVFJFR1MgMTIKICNkZWZpbmUgUFRSQUNFX1NFVFJFR1MgMTMKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBUUkFDRV9HRVRGUFJFR1MgMTQKICNkZWZpbmUgUFRSQUNFX1NFVEZQUkVHUyAxNQotCiAjZGVmaW5lIFBUUkFDRV9HRVRXTU1YUkVHUyAxOAogI2RlZmluZSBQVFJBQ0VfU0VUV01NWFJFR1MgMTkKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUFRSQUNFX09MRFNFVE9QVElPTlMgMjEKLQogI2RlZmluZSBQVFJBQ0VfR0VUX1RIUkVBRF9BUkVBIDIyCi0KICNkZWZpbmUgUFRSQUNFX1NFVF9TWVNDQUxMIDIzCi0KICNkZWZpbmUgUFRSQUNFX0dFVENSVU5DSFJFR1MgMjUKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBUUkFDRV9TRVRDUlVOQ0hSRUdTIDI2Ci0KICNkZWZpbmUgUFRSQUNFX0dFVFZGUFJFR1MgMjcKICNkZWZpbmUgUFRSQUNFX1NFVFZGUFJFR1MgMjgKLQogI2RlZmluZSBVU1IyNl9NT0RFIDB4MDAwMDAwMDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEZJUTI2X01PREUgMHgwMDAwMDAwMQogI2RlZmluZSBJUlEyNl9NT0RFIDB4MDAwMDAwMDIKICNkZWZpbmUgU1ZDMjZfTU9ERSAweDAwMDAwMDAzCiAjZGVmaW5lIFVTUl9NT0RFIDB4MDAwMDAwMTAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEZJUV9NT0RFIDB4MDAwMDAwMTEKICNkZWZpbmUgSVJRX01PREUgMHgwMDAwMDAxMgogI2RlZmluZSBTVkNfTU9ERSAweDAwMDAwMDEzCiAjZGVmaW5lIEFCVF9NT0RFIDB4MDAwMDAwMTcKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFVORF9NT0RFIDB4MDAwMDAwMWIKICNkZWZpbmUgU1lTVEVNX01PREUgMHgwMDAwMDAxZgogI2RlZmluZSBNT0RFMzJfQklUIDB4MDAwMDAwMTAKICNkZWZpbmUgTU9ERV9NQVNLIDB4MDAwMDAwMWYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBTUl9UX0JJVCAweDAwMDAwMDIwCiAjZGVmaW5lIFBTUl9GX0JJVCAweDAwMDAwMDQwCiAjZGVmaW5lIFBTUl9JX0JJVCAweDAwMDAwMDgwCiAjZGVmaW5lIFBTUl9KX0JJVCAweDAxMDAwMDAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQU1JfUV9CSVQgMHgwODAwMDAwMAogI2RlZmluZSBQU1JfVl9CSVQgMHgxMDAwMDAwMAogI2RlZmluZSBQU1JfQ19CSVQgMHgyMDAwMDAwMAogI2RlZmluZSBQU1JfWl9CSVQgMHg0MDAwMDAwMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUFNSX05fQklUIDB4ODAwMDAwMDAKICNkZWZpbmUgUENNQVNLIDAKLQotI2RlZmluZSBQU1JfZiAweGZmMDAwMDAwICAKLSNkZWZpbmUgUFNSX3MgMHgwMGZmMDAwMCAgCi0jZGVmaW5lIFBTUl94IDB4MDAwMGZmMDAgIAotI2RlZmluZSBQU1JfYyAweDAwMDAwMGZmICAKLQorI2RlZmluZSBQU1JfZiAweGZmMDAwMDAwCisjZGVmaW5lIFBTUl9zIDB4MDBmZjAwMDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFBTUl94IDB4MDAwMGZmMDAKKyNkZWZpbmUgUFNSX2MgMHgwMDAwMDBmZgogI2lmbmRlZiBfX0FTU0VNQkxZX18KLQogc3RydWN0IHB0X3JlZ3MgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBsb25nIHVyZWdzWzE4XTsKIH07Ci0KICNkZWZpbmUgQVJNX2Nwc3IgdXJlZ3NbMTZdCiAjZGVmaW5lIEFSTV9wYyB1cmVnc1sxNV0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFSTV9sciB1cmVnc1sxNF0KICNkZWZpbmUgQVJNX3NwIHVyZWdzWzEzXQogI2RlZmluZSBBUk1faXAgdXJlZ3NbMTJdCiAjZGVmaW5lIEFSTV9mcCB1cmVnc1sxMV0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFSTV9yMTAgdXJlZ3NbMTBdCiAjZGVmaW5lIEFSTV9yOSB1cmVnc1s5XQogI2RlZmluZSBBUk1fcjggdXJlZ3NbOF0KICNkZWZpbmUgQVJNX3I3IHVyZWdzWzddCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBUk1fcjYgdXJlZ3NbNl0KICNkZWZpbmUgQVJNX3I1IHVyZWdzWzVdCiAjZGVmaW5lIEFSTV9yNCB1cmVnc1s0XQogI2RlZmluZSBBUk1fcjMgdXJlZ3NbM10KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFSTV9yMiB1cmVnc1syXQogI2RlZmluZSBBUk1fcjEgdXJlZ3NbMV0KICNkZWZpbmUgQVJNX3IwIHVyZWdzWzBdCiAjZGVmaW5lIEFSTV9PUklHX3IwIHVyZWdzWzE3XQotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBwY19wb2ludGVyKHYpICAgKCh2KSAmIH5QQ01BU0spCi0KICNkZWZpbmUgaW5zdHJ1Y3Rpb25fcG9pbnRlcihyZWdzKSAgIChwY19wb2ludGVyKChyZWdzKS0+QVJNX3BjKSkKLQogI2RlZmluZSBwcm9maWxlX3BjKHJlZ3MpIGluc3RydWN0aW9uX3BvaW50ZXIocmVncykKLQogI2VuZGlmCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZW5kaWYKLQpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL3Jlc291cmNlLmggYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vcmVzb3VyY2UuaAppbmRleCA3NTQ2ZGQ0Li4xODJhZmM5IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vcmVzb3VyY2UuaAorKysgYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vcmVzb3VyY2UuaApAQCAtNywxMSArNywxNyBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX0FSTV9SRVNPVVJDRV9ICiAjZGVmaW5lIF9BUk1fUkVTT1VSQ0VfSAotCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvcmVzb3VyY2UuaD4KLQogI2VuZGlmCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL3NjYXR0ZXJsaXN0LmggYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vc2NhdHRlcmxpc3QuaAppbmRleCBhMmMwNmNhLi4zY2M1YzJhIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vc2NhdHRlcmxpc3QuaAorKysgYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vc2NhdHRlcmxpc3QuaApAQCAtNywyMiArNywyOCBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX0FTTUFSTV9TQ0FUVEVSTElTVF9ICiAjZGVmaW5lIF9BU01BUk1fU0NBVFRFUkxJU1RfSAotCiAjaW5jbHVkZSA8YXNtL21lbW9yeS5oPgogI2luY2x1ZGUgPGFzbS90eXBlcy5oPgotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IHNjYXR0ZXJsaXN0IHsKICBzdHJ1Y3QgcGFnZSAqcGFnZTsKICB1bnNpZ25lZCBpbnQgb2Zmc2V0OwogIGRtYV9hZGRyX3QgZG1hX2FkZHJlc3M7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGludCBsZW5ndGg7CiB9OwotCiAjZGVmaW5lIHNnX2RtYV9hZGRyZXNzKHNnKSAoKHNnKS0+ZG1hX2FkZHJlc3MpCiAjZGVmaW5lIHNnX2RtYV9sZW4oc2cpICgoc2cpLT5sZW5ndGgpCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9zZW1hcGhvcmUuaCBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9zZW1hcGhvcmUuaAppbmRleCA3YzU2MThhLi42ZTAxZWZmIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vc2VtYXBob3JlLmgKKysrIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL3NlbWFwaG9yZS5oCkBAIC03LDMwICs3LDM0IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfX0FTTV9BUk1fU0VNQVBIT1JFX0gKICNkZWZpbmUgX19BU01fQVJNX1NFTUFQSE9SRV9ICi0KICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjaW5jbHVkZSA8bGludXgvd2FpdC5oPgogI2luY2x1ZGUgPGxpbnV4L3J3c2VtLmg+Ci0KICNpbmNsdWRlIDxhc20vYXRvbWljLmg+CiAjaW5jbHVkZSA8YXNtL2xvY2tzLmg+Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3Qgc2VtYXBob3JlIHsKICBhdG9taWNfdCBjb3VudDsKICBpbnQgc2xlZXBlcnM7CiAgd2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwotCiAjZGVmaW5lIF9fU0VNQVBIT1JFX0lOSVQobmFtZSwgY250KSAgeyAgIC5jb3VudCA9IEFUT01JQ19JTklUKGNudCksICAgLndhaXQgPSBfX1dBSVRfUVVFVUVfSEVBRF9JTklUSUFMSVpFUigobmFtZSkud2FpdCksICB9Ci0KICNkZWZpbmUgX19ERUNMQVJFX1NFTUFQSE9SRV9HRU5FUklDKG5hbWUsY291bnQpICAgc3RydWN0IHNlbWFwaG9yZSBuYW1lID0gX19TRU1BUEhPUkVfSU5JVChuYW1lLGNvdW50KQotCiAjZGVmaW5lIERFQ0xBUkVfTVVURVgobmFtZSkgX19ERUNMQVJFX1NFTUFQSE9SRV9HRU5FUklDKG5hbWUsMSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIERFQ0xBUkVfTVVURVhfTE9DS0VEKG5hbWUpIF9fREVDTEFSRV9TRU1BUEhPUkVfR0VORVJJQyhuYW1lLDApCi0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL3NlbWJ1Zi5oIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL3NlbWJ1Zi5oCmluZGV4IGEyZjVkZDAuLmMwNzJkZGEgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9zZW1idWYuaAorKysgYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vc2VtYnVmLmgKQEAgLTcsMjAgKzcsMjggQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9BU01BUk1fU0VNQlVGX0gKICNkZWZpbmUgX0FTTUFSTV9TRU1CVUZfSAotCiBzdHJ1Y3Qgc2VtaWQ2NF9kcyB7CiAgc3RydWN0IGlwYzY0X3Blcm0gc2VtX3Blcm07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fa2VybmVsX3RpbWVfdCBzZW1fb3RpbWU7CiAgdW5zaWduZWQgbG9uZyBfX3VudXNlZDE7CiAgX19rZXJuZWxfdGltZV90IHNlbV9jdGltZTsKICB1bnNpZ25lZCBsb25nIF9fdW51c2VkMjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgbG9uZyBzZW1fbnNlbXM7CiAgdW5zaWduZWQgbG9uZyBfX3VudXNlZDM7CiAgdW5zaWduZWQgbG9uZyBfX3VudXNlZDQ7CiB9OwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vc2htYnVmLmggYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vc2htYnVmLmgKaW5kZXggMWQ0ZDc4Yy4uNTRiMWYwNCAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL3NobWJ1Zi5oCisrKyBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9zaG1idWYuaApAQCAtNywzNyArNyw0OCBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX0FTTUFSTV9TSE1CVUZfSAogI2RlZmluZSBfQVNNQVJNX1NITUJVRl9ICi0KIHN0cnVjdCBzaG1pZDY0X2RzIHsKICBzdHJ1Y3QgaXBjNjRfcGVybSBzaG1fcGVybTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc2l6ZV90IHNobV9zZWdzejsKICBfX2tlcm5lbF90aW1lX3Qgc2htX2F0aW1lOwogIHVuc2lnbmVkIGxvbmcgX191bnVzZWQxOwogIF9fa2VybmVsX3RpbWVfdCBzaG1fZHRpbWU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGxvbmcgX191bnVzZWQyOwogIF9fa2VybmVsX3RpbWVfdCBzaG1fY3RpbWU7CiAgdW5zaWduZWQgbG9uZyBfX3VudXNlZDM7CiAgX19rZXJuZWxfcGlkX3Qgc2htX2NwaWQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fa2VybmVsX3BpZF90IHNobV9scGlkOwogIHVuc2lnbmVkIGxvbmcgc2htX25hdHRjaDsKICB1bnNpZ25lZCBsb25nIF9fdW51c2VkNDsKICB1bnNpZ25lZCBsb25nIF9fdW51c2VkNTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwotCiBzdHJ1Y3Qgc2htaW5mbzY0IHsKICB1bnNpZ25lZCBsb25nIHNobW1heDsKICB1bnNpZ25lZCBsb25nIHNobW1pbjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgbG9uZyBzaG1tbmk7CiAgdW5zaWduZWQgbG9uZyBzaG1zZWc7CiAgdW5zaWduZWQgbG9uZyBzaG1hbGw7CiAgdW5zaWduZWQgbG9uZyBfX3VudXNlZDE7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGxvbmcgX191bnVzZWQyOwogIHVuc2lnbmVkIGxvbmcgX191bnVzZWQzOwogIHVuc2lnbmVkIGxvbmcgX191bnVzZWQ0OwogfTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL3NobXBhcmFtLmggYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vc2htcGFyYW0uaAppbmRleCBlYTUzYThkLi5jMDFiNDEzIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vc2htcGFyYW0uaAorKysgYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vc2htcGFyYW0uaApAQCAtNywxMyArNywxOCBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX0FTTUFSTV9TSE1QQVJBTV9ICiAjZGVmaW5lIF9BU01BUk1fU0hNUEFSQU1fSAotCi0jZGVmaW5lIFNITUxCQSAoNCAqIFBBR0VfU0laRSkgIAotCisjZGVmaW5lIFNITUxCQSAoNCAqIFBBR0VfU0laRSkKICNkZWZpbmUgX19BUkNIX0ZPUkNFX1NITUxCQQotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vc2lnY29udGV4dC5oIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL3NpZ2NvbnRleHQuaAppbmRleCAzYzRmY2YzLi5iZGEyMzM5IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vc2lnY29udGV4dC5oCisrKyBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9zaWdjb250ZXh0LmgKQEAgLTcsMzMgKzcsNDQgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9BU01BUk1fU0lHQ09OVEVYVF9ICiAjZGVmaW5lIF9BU01BUk1fU0lHQ09OVEVYVF9ICi0KIHN0cnVjdCBzaWdjb250ZXh0IHsKICB1bnNpZ25lZCBsb25nIHRyYXBfbm87CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGxvbmcgZXJyb3JfY29kZTsKICB1bnNpZ25lZCBsb25nIG9sZG1hc2s7CiAgdW5zaWduZWQgbG9uZyBhcm1fcjA7CiAgdW5zaWduZWQgbG9uZyBhcm1fcjE7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGxvbmcgYXJtX3IyOwogIHVuc2lnbmVkIGxvbmcgYXJtX3IzOwogIHVuc2lnbmVkIGxvbmcgYXJtX3I0OwogIHVuc2lnbmVkIGxvbmcgYXJtX3I1OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBsb25nIGFybV9yNjsKICB1bnNpZ25lZCBsb25nIGFybV9yNzsKICB1bnNpZ25lZCBsb25nIGFybV9yODsKICB1bnNpZ25lZCBsb25nIGFybV9yOTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgbG9uZyBhcm1fcjEwOwogIHVuc2lnbmVkIGxvbmcgYXJtX2ZwOwogIHVuc2lnbmVkIGxvbmcgYXJtX2lwOwogIHVuc2lnbmVkIGxvbmcgYXJtX3NwOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBsb25nIGFybV9scjsKICB1bnNpZ25lZCBsb25nIGFybV9wYzsKICB1bnNpZ25lZCBsb25nIGFybV9jcHNyOwogIHVuc2lnbmVkIGxvbmcgZmF1bHRfYWRkcmVzczsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9zaWdpbmZvLmggYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vc2lnaW5mby5oCmluZGV4IDIyNTY4NWUuLmNmOTQwNjUgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9zaWdpbmZvLmgKKysrIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL3NpZ2luZm8uaApAQCAtNywxMSArNywxNyBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX0FTTUFSTV9TSUdJTkZPX0gKICNkZWZpbmUgX0FTTUFSTV9TSUdJTkZPX0gKLQogI2luY2x1ZGUgPGFzbS1nZW5lcmljL3NpZ2luZm8uaD4KLQogI2VuZGlmCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL3NpZ25hbC5oIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL3NpZ25hbC5oCmluZGV4IDIxMmQ5ZjEuLjk0NzEzYjkgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9zaWduYWwuaAorKysgYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vc2lnbmFsLmgKQEAgLTcsOTcgKzcsMTA3IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfQVNNQVJNX1NJR05BTF9ICiAjZGVmaW5lIF9BU01BUk1fU0lHTkFMX0gKLQogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0KIHN0cnVjdCBzaWdpbmZvOwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBOU0lHIDMyCiB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgc2lnc2V0X3Q7Ci0KICNkZWZpbmUgU0lHSFVQIDEKICNkZWZpbmUgU0lHSU5UIDIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNJR1FVSVQgMwogI2RlZmluZSBTSUdJTEwgNAogI2RlZmluZSBTSUdUUkFQIDUKICNkZWZpbmUgU0lHQUJSVCA2CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTSUdJT1QgNgogI2RlZmluZSBTSUdCVVMgNwogI2RlZmluZSBTSUdGUEUgOAogI2RlZmluZSBTSUdLSUxMIDkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNJR1VTUjEgMTAKICNkZWZpbmUgU0lHU0VHViAxMQogI2RlZmluZSBTSUdVU1IyIDEyCiAjZGVmaW5lIFNJR1BJUEUgMTMKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNJR0FMUk0gMTQKICNkZWZpbmUgU0lHVEVSTSAxNQogI2RlZmluZSBTSUdTVEtGTFQgMTYKICNkZWZpbmUgU0lHQ0hMRCAxNworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU0lHQ09OVCAxOAogI2RlZmluZSBTSUdTVE9QIDE5CiAjZGVmaW5lIFNJR1RTVFAgMjAKICNkZWZpbmUgU0lHVFRJTiAyMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU0lHVFRPVSAyMgogI2RlZmluZSBTSUdVUkcgMjMKICNkZWZpbmUgU0lHWENQVSAyNAogI2RlZmluZSBTSUdYRlNaIDI1CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTSUdWVEFMUk0gMjYKICNkZWZpbmUgU0lHUFJPRiAyNwogI2RlZmluZSBTSUdXSU5DSCAyOAogI2RlZmluZSBTSUdJTyAyOQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU0lHUE9MTCBTSUdJTwotCiAjZGVmaW5lIFNJR1BXUiAzMAogI2RlZmluZSBTSUdTWVMgMzEKICNkZWZpbmUgU0lHVU5VU0VEIDMxCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNJR1JUTUlOIDMyCiAjZGVmaW5lIFNJR1JUTUFYIF9OU0lHCi0KICNkZWZpbmUgU0lHU1dJIDMyCi0KICNkZWZpbmUgU0FfTk9DTERTVE9QIDB4MDAwMDAwMDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNBX05PQ0xEV0FJVCAweDAwMDAwMDAyCiAjZGVmaW5lIFNBX1NJR0lORk8gMHgwMDAwMDAwNAogI2RlZmluZSBTQV9USElSVFlUV08gMHgwMjAwMDAwMAogI2RlZmluZSBTQV9SRVNUT1JFUiAweDA0MDAwMDAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTQV9PTlNUQUNLIDB4MDgwMDAwMDAKICNkZWZpbmUgU0FfUkVTVEFSVCAweDEwMDAwMDAwCiAjZGVmaW5lIFNBX05PREVGRVIgMHg0MDAwMDAwMAogI2RlZmluZSBTQV9SRVNFVEhBTkQgMHg4MDAwMDAwMAotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTQV9OT01BU0sgU0FfTk9ERUZFUgogI2RlZmluZSBTQV9PTkVTSE9UIFNBX1JFU0VUSEFORAotCiAjZGVmaW5lIFNTX09OU1RBQ0sgMQogI2RlZmluZSBTU19ESVNBQkxFIDIKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTUlOU0lHU1RLU1ogMjA0OAogI2RlZmluZSBTSUdTVEtTWiA4MTkyCi0KICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9zaWduYWwuaD4KLQogc3RydWN0IHNpZ2FjdGlvbiB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuaW9uIHsKICBfX3NpZ2hhbmRsZXJfdCBfc2FfaGFuZGxlcjsKICB2b2lkICgqX3NhX3NpZ2FjdGlvbikoaW50LCBzdHJ1Y3Qgc2lnaW5mbyAqLCB2b2lkICopOwogIH0gX3U7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHNpZ3NldF90IHNhX21hc2s7CiAgdW5zaWduZWQgbG9uZyBzYV9mbGFnczsKICB2b2lkICgqc2FfcmVzdG9yZXIpKHZvaWQpOwogfTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgc2FfaGFuZGxlciBfdS5fc2FfaGFuZGxlcgogI2RlZmluZSBzYV9zaWdhY3Rpb24gX3UuX3NhX3NpZ2FjdGlvbgotCiB0eXBlZGVmIHN0cnVjdCBzaWdhbHRzdGFjayB7CiAgdm9pZCBfX3VzZXIgKnNzX3NwOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBpbnQgc3NfZmxhZ3M7CiAgc2l6ZV90IHNzX3NpemU7CiB9IHN0YWNrX3Q7Ci0KICNlbmRpZgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9zaXplcy5oIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL3NpemVzLmgKaW5kZXggOTBjMWM3MS4uNzg2NzcwOSAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL3NpemVzLmgKKysrIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL3NpemVzLmgKQEAgLTcsMzMgKzcsNDAgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9fc2l6ZXNfaAogI2RlZmluZSBfX3NpemVzX2ggMQotCiAjZGVmaW5lIFNaXzFLIDB4MDAwMDA0MDAKICNkZWZpbmUgU1pfNEsgMHgwMDAwMTAwMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU1pfOEsgMHgwMDAwMjAwMAogI2RlZmluZSBTWl8xNksgMHgwMDAwNDAwMAogI2RlZmluZSBTWl82NEsgMHgwMDAxMDAwMAogI2RlZmluZSBTWl8xMjhLIDB4MDAwMjAwMDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNaXzI1NksgMHgwMDA0MDAwMAogI2RlZmluZSBTWl81MTJLIDB4MDAwODAwMDAKLQogI2RlZmluZSBTWl8xTSAweDAwMTAwMDAwCiAjZGVmaW5lIFNaXzJNIDB4MDAyMDAwMDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNaXzRNIDB4MDA0MDAwMDAKICNkZWZpbmUgU1pfOE0gMHgwMDgwMDAwMAogI2RlZmluZSBTWl8xNk0gMHgwMTAwMDAwMAogI2RlZmluZSBTWl8zMk0gMHgwMjAwMDAwMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU1pfNjRNIDB4MDQwMDAwMDAKICNkZWZpbmUgU1pfMTI4TSAweDA4MDAwMDAwCiAjZGVmaW5lIFNaXzI1Nk0gMHgxMDAwMDAwMAogI2RlZmluZSBTWl81MTJNIDB4MjAwMDAwMDAKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU1pfMUcgMHg0MDAwMDAwMAogI2RlZmluZSBTWl8yRyAweDgwMDAwMDAwCi0KICNlbmRpZgotCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vc21wLmggYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vc21wLmgKaW5kZXggZTZjMWU0MS4uODhjZDFiNyAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL3NtcC5oCisrKyBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9zbXAuaApAQCAtNywyOCArNywzMCBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX19BU01fQVJNX1NNUF9ICiAjZGVmaW5lIF9fQVNNX0FSTV9TTVBfSAotCiAjaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgogI2luY2x1ZGUgPGxpbnV4L2NwdW1hc2suaD4KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjaW5jbHVkZSA8bGludXgvdGhyZWFkX2luZm8uaD4KLQogI2luY2x1ZGUgPGFzbS9hcmNoL3NtcC5oPgotCiAjZXJyb3IgIjxhc20tYXJtL3NtcC5oPiBpbmNsdWRlZCBpbiBub24tU01QIGJ1aWxkIgotCiAjZGVmaW5lIHJhd19zbXBfcHJvY2Vzc29yX2lkKCkgKGN1cnJlbnRfdGhyZWFkX2luZm8oKS0+Y3B1KQotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQUk9DX0NIQU5HRV9QRU5BTFRZIDE1Ci0KIHN0cnVjdCBzZXFfZmlsZTsKLQogc3RydWN0IHNlY29uZGFyeV9kYXRhIHsKICB1bnNpZ25lZCBsb25nIHBnZGlyOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB2b2lkICpzdGFjazsKIH07Ci0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL3NvY2tldC5oIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL3NvY2tldC5oCmluZGV4IDFmMDA1MGEuLjA3NDFiYWQgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9zb2NrZXQuaAorKysgYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vc29ja2V0LmgKQEAgLTcsNTUgKzcsNzMgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9BU01BUk1fU09DS0VUX0gKICNkZWZpbmUgX0FTTUFSTV9TT0NLRVRfSAotCiAjaW5jbHVkZSA8YXNtL3NvY2tpb3MuaD4KLQogI2RlZmluZSBTT0xfU09DS0VUIDEKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU09fREVCVUcgMQogI2RlZmluZSBTT19SRVVTRUFERFIgMgogI2RlZmluZSBTT19UWVBFIDMKICNkZWZpbmUgU09fRVJST1IgNAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU09fRE9OVFJPVVRFIDUKICNkZWZpbmUgU09fQlJPQURDQVNUIDYKICNkZWZpbmUgU09fU05EQlVGIDcKICNkZWZpbmUgU09fUkNWQlVGIDgKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNPX1NOREJVRkZPUkNFIDMyCiAjZGVmaW5lIFNPX1JDVkJVRkZPUkNFIDMzCiAjZGVmaW5lIFNPX0tFRVBBTElWRSA5CiAjZGVmaW5lIFNPX09PQklOTElORSAxMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU09fTk9fQ0hFQ0sgMTEKICNkZWZpbmUgU09fUFJJT1JJVFkgMTIKICNkZWZpbmUgU09fTElOR0VSIDEzCiAjZGVmaW5lIFNPX0JTRENPTVBBVCAxNAotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTT19QQVNTQ1JFRCAxNgogI2RlZmluZSBTT19QRUVSQ1JFRCAxNwogI2RlZmluZSBTT19SQ1ZMT1dBVCAxOAogI2RlZmluZSBTT19TTkRMT1dBVCAxOQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU09fUkNWVElNRU8gMjAKICNkZWZpbmUgU09fU05EVElNRU8gMjEKLQogI2RlZmluZSBTT19TRUNVUklUWV9BVVRIRU5USUNBVElPTiAyMgogI2RlZmluZSBTT19TRUNVUklUWV9FTkNSWVBUSU9OX1RSQU5TUE9SVCAyMworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU09fU0VDVVJJVFlfRU5DUllQVElPTl9ORVRXT1JLIDI0Ci0KICNkZWZpbmUgU09fQklORFRPREVWSUNFIDI1Ci0KICNkZWZpbmUgU09fQVRUQUNIX0ZJTFRFUiAyNgogI2RlZmluZSBTT19ERVRBQ0hfRklMVEVSIDI3Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNPX1BFRVJOQU1FIDI4CiAjZGVmaW5lIFNPX1RJTUVTVEFNUCAyOQogI2RlZmluZSBTQ01fVElNRVNUQU1QIFNPX1RJTUVTVEFNUAotCiAjZGVmaW5lIFNPX0FDQ0VQVENPTk4gMzAKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU09fUEVFUlNFQyAzMQogI2RlZmluZSBTT19QQVNTU0VDIDM0Ci0KKyNkZWZpbmUgU09fVElNRVNUQU1QTlMgMzUKKyNkZWZpbmUgU0NNX1RJTUVTVEFNUE5TIFNPX1RJTUVTVEFNUE5TCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBTT19NQVJLIDM2CisjZGVmaW5lIFNPX1RJTUVTVEFNUElORyAzNworI2RlZmluZSBTQ01fVElNRVNUQU1QSU5HIFNPX1RJTUVTVEFNUElORworI2RlZmluZSBTT19QUk9UT0NPTCAzOAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgU09fRE9NQUlOIDM5CisjZGVmaW5lIFNPX1JYUV9PVkZMIDQwCisjZGVmaW5lIFNPX1dJRklfU1RBVFVTIDQxCisjZGVmaW5lIFNDTV9XSUZJX1NUQVRVUyBTT19XSUZJX1NUQVRVUworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL3NvY2tpb3MuaCBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9zb2NraW9zLmgKaW5kZXggY2FiODZiOC4uM2IyNDBlYSAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL3NvY2tpb3MuaAorKysgYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vc29ja2lvcy5oCkBAIC03LDE2ICs3LDIzIEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfX0FSQ0hfQVJNX1NPQ0tJT1NfSAogI2RlZmluZSBfX0FSQ0hfQVJNX1NPQ0tJT1NfSAotCiAjZGVmaW5lIEZJT1NFVE9XTiAweDg5MDEKICNkZWZpbmUgU0lPQ1NQR1JQIDB4ODkwMgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRklPR0VUT1dOIDB4ODkwMwogI2RlZmluZSBTSU9DR1BHUlAgMHg4OTA0CiAjZGVmaW5lIFNJT0NBVE1BUksgMHg4OTA1Ci0jZGVmaW5lIFNJT0NHU1RBTVAgMHg4OTA2ICAKLQorI2RlZmluZSBTSU9DR1NUQU1QIDB4ODkwNgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL3NwaW5sb2NrLmggYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vc3BpbmxvY2suaAppbmRleCAzYWUyMTczLi5hN2IyODU4IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vc3BpbmxvY2suaAorKysgYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vc3BpbmxvY2suaApAQCAtNywyMSArNywyNyBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX19BU01fU1BJTkxPQ0tfSAogI2RlZmluZSBfX0FTTV9TUElOTE9DS19ICi0KICNpZiBfX0xJTlVYX0FSTV9BUkNIX18gPCA2CiAjZXJyb3IgU01QIG5vdCBzdXBwb3J0ZWQgb24gcHJlLUFSTXY2IENQVXMKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZW5kaWYKLQogI2RlZmluZSBfX3Jhd19zcGluX2lzX2xvY2tlZCh4KSAoKHgpLT5sb2NrICE9IDApCiAjZGVmaW5lIF9fcmF3X3NwaW5fdW5sb2NrX3dhaXQobG9jaykgICBkbyB7IHdoaWxlIChfX3Jhd19zcGluX2lzX2xvY2tlZChsb2NrKSkgY3B1X3JlbGF4KCk7IH0gd2hpbGUgKDApCi0KICNkZWZpbmUgX19yYXdfc3Bpbl9sb2NrX2ZsYWdzKGxvY2ssIGZsYWdzKSBfX3Jhd19zcGluX2xvY2sobG9jaykKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgcndsb2NrX2lzX2xvY2tlZCh4KSAoKigodm9sYXRpbGUgdW5zaWduZWQgaW50ICopKHgpKSAhPSAwKQogI2RlZmluZSBfX3Jhd193cml0ZV9jYW5fbG9jayh4KSAoKHgpLT5sb2NrID09IDB4ODAwMDAwMDApCiAjZGVmaW5lIF9fcmF3X3JlYWRfY2FuX2xvY2soeCkgKCh4KS0+bG9jayA8IDB4ODAwMDAwMDApCiAjZW5kaWYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vc3BpbmxvY2tfdHlwZXMuaCBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9zcGlubG9ja190eXBlcy5oCmluZGV4IGVlNzdmMjAuLmZiZjMzZTAgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9zcGlubG9ja190eXBlcy5oCisrKyBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9zcGlubG9ja190eXBlcy5oCkBAIC03LDI1ICs3LDI5IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfX0FTTV9TUElOTE9DS19UWVBFU19ICiAjZGVmaW5lIF9fQVNNX1NQSU5MT0NLX1RZUEVTX0gKLQogI2lmbmRlZiBfX0xJTlVYX1NQSU5MT0NLX1RZUEVTX0gKICNlcnJvciAicGxlYXNlIGRvbid0IGluY2x1ZGUgdGhpcyBmaWxlIGRpcmVjdGx5IgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlbmRpZgotCiB0eXBlZGVmIHN0cnVjdCB7CiAgdm9sYXRpbGUgdW5zaWduZWQgaW50IGxvY2s7CiB9IHJhd19zcGlubG9ja190OwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX1JBV19TUElOX0xPQ0tfVU5MT0NLRUQgeyAwIH0KLQogdHlwZWRlZiBzdHJ1Y3QgewogIHZvbGF0aWxlIHVuc2lnbmVkIGludCBsb2NrOwogfSByYXdfcndsb2NrX3Q7Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fUkFXX1JXX0xPQ0tfVU5MT0NLRUQgeyAwIH0KLQogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vc3RhdC5oIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL3N0YXQuaAppbmRleCA0OWI4NWY5Li5kODE4OGJmIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vc3RhdC5oCisrKyBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9zdGF0LmgKQEAgLTcsODcgKzcsOTggQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9BU01BUk1fU1RBVF9ICiAjZGVmaW5lIF9BU01BUk1fU1RBVF9ICi0KIHN0cnVjdCBfX29sZF9rZXJuZWxfc3RhdCB7CiAgdW5zaWduZWQgc2hvcnQgc3RfZGV2OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBzaG9ydCBzdF9pbm87CiAgdW5zaWduZWQgc2hvcnQgc3RfbW9kZTsKICB1bnNpZ25lZCBzaG9ydCBzdF9ubGluazsKICB1bnNpZ25lZCBzaG9ydCBzdF91aWQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIHNob3J0IHN0X2dpZDsKICB1bnNpZ25lZCBzaG9ydCBzdF9yZGV2OwogIHVuc2lnbmVkIGxvbmcgc3Rfc2l6ZTsKICB1bnNpZ25lZCBsb25nIHN0X2F0aW1lOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBsb25nIHN0X210aW1lOwogIHVuc2lnbmVkIGxvbmcgc3RfY3RpbWU7CiB9OwotCi0jZGVmaW5lIFNUQVRfSEFWRV9OU0VDIAotCisjZGVmaW5lIFNUQVRfSEFWRV9OU0VDCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IHN0YXQgewogI2lmZGVmIF9fQVJNRUJfXwogIHVuc2lnbmVkIHNob3J0IHN0X2RldjsKICB1bnNpZ25lZCBzaG9ydCBfX3BhZDE7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2Vsc2UKICB1bnNpZ25lZCBsb25nIHN0X2RldjsKICNlbmRpZgogIHVuc2lnbmVkIGxvbmcgc3RfaW5vOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBzaG9ydCBzdF9tb2RlOwogIHVuc2lnbmVkIHNob3J0IHN0X25saW5rOwogIHVuc2lnbmVkIHNob3J0IHN0X3VpZDsKICB1bnNpZ25lZCBzaG9ydCBzdF9naWQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2lmZGVmIF9fQVJNRUJfXwogIHVuc2lnbmVkIHNob3J0IHN0X3JkZXY7CiAgdW5zaWduZWQgc2hvcnQgX19wYWQyOwogI2Vsc2UKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgbG9uZyBzdF9yZGV2OwogI2VuZGlmCiAgdW5zaWduZWQgbG9uZyBzdF9zaXplOwogIHVuc2lnbmVkIGxvbmcgc3RfYmxrc2l6ZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgbG9uZyBzdF9ibG9ja3M7CiAgdW5zaWduZWQgbG9uZyBzdF9hdGltZTsKICB1bnNpZ25lZCBsb25nIHN0X2F0aW1lX25zZWM7CiAgdW5zaWduZWQgbG9uZyBzdF9tdGltZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgbG9uZyBzdF9tdGltZV9uc2VjOwogIHVuc2lnbmVkIGxvbmcgc3RfY3RpbWU7CiAgdW5zaWduZWQgbG9uZyBzdF9jdGltZV9uc2VjOwogIHVuc2lnbmVkIGxvbmcgX191bnVzZWQ0OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBsb25nIF9fdW51c2VkNTsKIH07Ci0KIHN0cnVjdCBzdGF0NjQgewogIHVuc2lnbmVkIGxvbmcgbG9uZyBzdF9kZXY7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGNoYXIgX19wYWQwWzRdOwotCiAjZGVmaW5lIFNUQVQ2NF9IQVNfQlJPS0VOX1NUX0lOTyAxCiAgdW5zaWduZWQgbG9uZyBfX3N0X2lubzsKICB1bnNpZ25lZCBpbnQgc3RfbW9kZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgaW50IHN0X25saW5rOwotCiAgdW5zaWduZWQgbG9uZyBzdF91aWQ7CiAgdW5zaWduZWQgbG9uZyBzdF9naWQ7Ci0KICB1bnNpZ25lZCBsb25nIGxvbmcgc3RfcmRldjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgY2hhciBfX3BhZDNbNF07Ci0KICBsb25nIGxvbmcgc3Rfc2l6ZTsKICB1bnNpZ25lZCBsb25nIHN0X2Jsa3NpemU7CiAgdW5zaWduZWQgbG9uZyBsb25nIHN0X2Jsb2NrczsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBsb25nIHN0X2F0aW1lOwogIHVuc2lnbmVkIGxvbmcgc3RfYXRpbWVfbnNlYzsKLQogIHVuc2lnbmVkIGxvbmcgc3RfbXRpbWU7CiAgdW5zaWduZWQgbG9uZyBzdF9tdGltZV9uc2VjOwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGxvbmcgc3RfY3RpbWU7CiAgdW5zaWduZWQgbG9uZyBzdF9jdGltZV9uc2VjOwotCiAgdW5zaWduZWQgbG9uZyBsb25nIHN0X2lubzsKIH07Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9zdGF0ZnMuaCBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9zdGF0ZnMuaAppbmRleCA3OTYzZWFiLi40MzFmYmNjIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vc3RhdGZzLmgKKysrIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL3N0YXRmcy5oCkBAIC03LDM3ICs3LDQ4IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfQVNNQVJNX1NUQVRGU19ICiAjZGVmaW5lIF9BU01BUk1fU1RBVEZTX0gKLQogc3RydWN0IHN0YXRmcyB7CiAgX191MzIgZl90eXBlOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBmX2JzaXplOwogIF9fdTMyIGZfYmxvY2tzOwogIF9fdTMyIGZfYmZyZWU7CiAgX191MzIgZl9iYXZhaWw7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGZfZmlsZXM7CiAgX191MzIgZl9mZnJlZTsKICBfX2tlcm5lbF9mc2lkX3QgZl9mc2lkOwogIF9fdTMyIGZfbmFtZWxlbjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgZl9mcnNpemU7CiAgX191MzIgZl9zcGFyZVs1XTsKIH07Ci0KIHN0cnVjdCBzdGF0ZnM2NCB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGZfdHlwZTsKICBfX3UzMiBmX2JzaXplOwogIF9fdTY0IGZfYmxvY2tzOwogIF9fdTY0IGZfYmZyZWU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTY0IGZfYmF2YWlsOwogIF9fdTY0IGZfZmlsZXM7CiAgX191NjQgZl9mZnJlZTsKICBfX2tlcm5lbF9mc2lkX3QgZl9mc2lkOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBmX25hbWVsZW47CiAgX191MzIgZl9mcnNpemU7CiAgX191MzIgZl9zcGFyZVs1XTsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCxhbGlnbmVkKDQpKSk7Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9zdXNwZW5kLmggYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vc3VzcGVuZC5oCmluZGV4IDE1NmMxNzEuLjVkZGEyYzAgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9zdXNwZW5kLmgKKysrIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL3N1c3BlbmQuaApAQCAtNyw5ICs3LDE1IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfQVNNQVJNX1NVU1BFTkRfSAogI2RlZmluZSBfQVNNQVJNX1NVU1BFTkRfSAotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9zeXN0ZW0uaCBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9zeXN0ZW0uaAppbmRleCA4ZTg1MDM5Li41YmNkNGQ1IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vc3lzdGVtLmgKKysrIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL3N5c3RlbS5oCkBAIC03LDkgKzcsMTUgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9fQVNNX0FSTV9TWVNURU1fSAogI2RlZmluZSBfX0FTTV9BUk1fU1lTVEVNX0gKLQogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vdGVybWJpdHMuaCBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS90ZXJtYml0cy5oCmluZGV4IDY0MGJkMjcuLjQ3NjQzMmIgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS90ZXJtYml0cy5oCisrKyBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS90ZXJtYml0cy5oCkBAIC03LDE2OCArNywyMDIgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9fQVNNX0FSTV9URVJNQklUU19ICiAjZGVmaW5lIF9fQVNNX0FSTV9URVJNQklUU19ICi0KIHR5cGVkZWYgdW5zaWduZWQgY2hhciBjY190OwogdHlwZWRlZiB1bnNpZ25lZCBpbnQgc3BlZWRfdDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB0eXBlZGVmIHVuc2lnbmVkIGludCB0Y2ZsYWdfdDsKLQogI2RlZmluZSBOQ0NTIDE5CiBzdHJ1Y3QgdGVybWlvcyB7CiAgdGNmbGFnX3QgY19pZmxhZzsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdGNmbGFnX3QgY19vZmxhZzsKICB0Y2ZsYWdfdCBjX2NmbGFnOwogIHRjZmxhZ190IGNfbGZsYWc7CiAgY2NfdCBjX2xpbmU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGNjX3QgY19jY1tOQ0NTXTsKIH07Ci0KICNkZWZpbmUgVklOVFIgMAogI2RlZmluZSBWUVVJVCAxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWRVJBU0UgMgogI2RlZmluZSBWS0lMTCAzCiAjZGVmaW5lIFZFT0YgNAogI2RlZmluZSBWVElNRSA1CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWTUlOIDYKICNkZWZpbmUgVlNXVEMgNwogI2RlZmluZSBWU1RBUlQgOAogI2RlZmluZSBWU1RPUCA5CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWU1VTUCAxMAogI2RlZmluZSBWRU9MIDExCiAjZGVmaW5lIFZSRVBSSU5UIDEyCiAjZGVmaW5lIFZESVNDQVJEIDEzCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWV0VSQVNFIDE0CiAjZGVmaW5lIFZMTkVYVCAxNQogI2RlZmluZSBWRU9MMiAxNgotCiAjZGVmaW5lIElHTkJSSyAwMDAwMDAxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBCUktJTlQgMDAwMDAwMgogI2RlZmluZSBJR05QQVIgMDAwMDAwNAogI2RlZmluZSBQQVJNUksgMDAwMDAxMAogI2RlZmluZSBJTlBDSyAwMDAwMDIwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJU1RSSVAgMDAwMDA0MAogI2RlZmluZSBJTkxDUiAwMDAwMTAwCiAjZGVmaW5lIElHTkNSIDAwMDAyMDAKICNkZWZpbmUgSUNSTkwgMDAwMDQwMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSVVDTEMgMDAwMTAwMAogI2RlZmluZSBJWE9OIDAwMDIwMDAKICNkZWZpbmUgSVhBTlkgMDAwNDAwMAogI2RlZmluZSBJWE9GRiAwMDEwMDAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJTUFYQkVMIDAwMjAwMDAKICNkZWZpbmUgSVVURjggMDA0MDAwMAotCiAjZGVmaW5lIE9QT1NUIDAwMDAwMDEKICNkZWZpbmUgT0xDVUMgMDAwMDAwMgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgT05MQ1IgMDAwMDAwNAogI2RlZmluZSBPQ1JOTCAwMDAwMDEwCiAjZGVmaW5lIE9OT0NSIDAwMDAwMjAKICNkZWZpbmUgT05MUkVUIDAwMDAwNDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE9GSUxMIDAwMDAxMDAKICNkZWZpbmUgT0ZERUwgMDAwMDIwMAogI2RlZmluZSBOTERMWSAwMDAwNDAwCiAjZGVmaW5lIE5MMCAwMDAwMDAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBOTDEgMDAwMDQwMAogI2RlZmluZSBDUkRMWSAwMDAzMDAwCiAjZGVmaW5lIENSMCAwMDAwMDAwCiAjZGVmaW5lIENSMSAwMDAxMDAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBDUjIgMDAwMjAwMAogI2RlZmluZSBDUjMgMDAwMzAwMAogI2RlZmluZSBUQUJETFkgMDAxNDAwMAogI2RlZmluZSBUQUIwIDAwMDAwMDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFRBQjEgMDAwNDAwMAogI2RlZmluZSBUQUIyIDAwMTAwMDAKICNkZWZpbmUgVEFCMyAwMDE0MDAwCiAjZGVmaW5lIFhUQUJTIDAwMTQwMDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEJTRExZIDAwMjAwMDAKICNkZWZpbmUgQlMwIDAwMDAwMDAKICNkZWZpbmUgQlMxIDAwMjAwMDAKICNkZWZpbmUgVlRETFkgMDA0MDAwMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVlQwIDAwMDAwMDAKICNkZWZpbmUgVlQxIDAwNDAwMDAKICNkZWZpbmUgRkZETFkgMDEwMDAwMAogI2RlZmluZSBGRjAgMDAwMDAwMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRkYxIDAxMDAwMDAKLQogI2RlZmluZSBDQkFVRCAwMDEwMDE3Ci0jZGVmaW5lIEIwIDAwMDAwMDAgIAorI2RlZmluZSBCMCAwMDAwMDAwCiAjZGVmaW5lIEI1MCAwMDAwMDAxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBCNzUgMDAwMDAwMgogI2RlZmluZSBCMTEwIDAwMDAwMDMKICNkZWZpbmUgQjEzNCAwMDAwMDA0CiAjZGVmaW5lIEIxNTAgMDAwMDAwNQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQjIwMCAwMDAwMDA2CiAjZGVmaW5lIEIzMDAgMDAwMDAwNwogI2RlZmluZSBCNjAwIDAwMDAwMTAKICNkZWZpbmUgQjEyMDAgMDAwMDAxMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQjE4MDAgMDAwMDAxMgogI2RlZmluZSBCMjQwMCAwMDAwMDEzCiAjZGVmaW5lIEI0ODAwIDAwMDAwMTQKICNkZWZpbmUgQjk2MDAgMDAwMDAxNQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQjE5MjAwIDAwMDAwMTYKICNkZWZpbmUgQjM4NDAwIDAwMDAwMTcKICNkZWZpbmUgRVhUQSBCMTkyMDAKICNkZWZpbmUgRVhUQiBCMzg0MDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIENTSVpFIDAwMDAwNjAKICNkZWZpbmUgQ1M1IDAwMDAwMDAKICNkZWZpbmUgQ1M2IDAwMDAwMjAKICNkZWZpbmUgQ1M3IDAwMDAwNDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIENTOCAwMDAwMDYwCiAjZGVmaW5lIENTVE9QQiAwMDAwMTAwCiAjZGVmaW5lIENSRUFEIDAwMDAyMDAKICNkZWZpbmUgUEFSRU5CIDAwMDA0MDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBBUk9ERCAwMDAxMDAwCiAjZGVmaW5lIEhVUENMIDAwMDIwMDAKICNkZWZpbmUgQ0xPQ0FMIDAwMDQwMDAKICNkZWZpbmUgQ0JBVURFWCAwMDEwMDAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBCNTc2MDAgMDAxMDAwMQogI2RlZmluZSBCMTE1MjAwIDAwMTAwMDIKICNkZWZpbmUgQjIzMDQwMCAwMDEwMDAzCiAjZGVmaW5lIEI0NjA4MDAgMDAxMDAwNAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQjUwMDAwMCAwMDEwMDA1CiAjZGVmaW5lIEI1NzYwMDAgMDAxMDAwNgogI2RlZmluZSBCOTIxNjAwIDAwMTAwMDcKICNkZWZpbmUgQjEwMDAwMDAgMDAxMDAxMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQjExNTIwMDAgMDAxMDAxMQogI2RlZmluZSBCMTUwMDAwMCAwMDEwMDEyCiAjZGVmaW5lIEIyMDAwMDAwIDAwMTAwMTMKICNkZWZpbmUgQjI1MDAwMDAgMDAxMDAxNAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQjMwMDAwMDAgMDAxMDAxNQogI2RlZmluZSBCMzUwMDAwMCAwMDEwMDE2CiAjZGVmaW5lIEI0MDAwMDAwIDAwMTAwMTcKLSNkZWZpbmUgQ0lCQVVEIDAwMjAwMzYwMDAwMCAgCi0jZGVmaW5lIENNU1BBUiAwMTAwMDAwMDAwMDAgIAotI2RlZmluZSBDUlRTQ1RTIDAyMDAwMDAwMDAwMCAgCi0KKyNkZWZpbmUgQ0lCQVVEIDAwMjAwMzYwMDAwMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgQ01TUEFSIDAxMDAwMDAwMDAwMAorI2RlZmluZSBDUlRTQ1RTIDAyMDAwMDAwMDAwMAogI2RlZmluZSBJU0lHIDAwMDAwMDEKICNkZWZpbmUgSUNBTk9OIDAwMDAwMDIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFhDQVNFIDAwMDAwMDQKICNkZWZpbmUgRUNITyAwMDAwMDEwCiAjZGVmaW5lIEVDSE9FIDAwMDAwMjAKICNkZWZpbmUgRUNIT0sgMDAwMDA0MAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRUNIT05MIDAwMDAxMDAKICNkZWZpbmUgTk9GTFNIIDAwMDAyMDAKICNkZWZpbmUgVE9TVE9QIDAwMDA0MDAKICNkZWZpbmUgRUNIT0NUTCAwMDAxMDAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBFQ0hPUFJUIDAwMDIwMDAKICNkZWZpbmUgRUNIT0tFIDAwMDQwMDAKICNkZWZpbmUgRkxVU0hPIDAwMTAwMDAKICNkZWZpbmUgUEVORElOIDAwNDAwMDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIElFWFRFTiAwMTAwMDAwCi0KICNkZWZpbmUgVENPT0ZGIDAKICNkZWZpbmUgVENPT04gMQogI2RlZmluZSBUQ0lPRkYgMgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVENJT04gMwotCiAjZGVmaW5lIFRDSUZMVVNIIDAKICNkZWZpbmUgVENPRkxVU0ggMQogI2RlZmluZSBUQ0lPRkxVU0ggMgotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBUQ1NBTk9XIDAKICNkZWZpbmUgVENTQURSQUlOIDEKICNkZWZpbmUgVENTQUZMVVNIIDIKLQogI2VuZGlmCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL3Rlcm1pb3MuaCBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS90ZXJtaW9zLmgKaW5kZXggYmE0M2FjMi4uNDYzNTFjZiAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL3Rlcm1pb3MuaAorKysgYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vdGVybWlvcy5oCkBAIC03LDYxICs3LDc0IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfX0FTTV9BUk1fVEVSTUlPU19ICiAjZGVmaW5lIF9fQVNNX0FSTV9URVJNSU9TX0gKLQogI2luY2x1ZGUgPGFzbS90ZXJtYml0cy5oPgogI2luY2x1ZGUgPGFzbS9pb2N0bHMuaD4KLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCB3aW5zaXplIHsKICB1bnNpZ25lZCBzaG9ydCB3c19yb3c7CiAgdW5zaWduZWQgc2hvcnQgd3NfY29sOwogIHVuc2lnbmVkIHNob3J0IHdzX3hwaXhlbDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgc2hvcnQgd3NfeXBpeGVsOwogfTsKLQogI2RlZmluZSBOQ0MgOAogc3RydWN0IHRlcm1pbyB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIHNob3J0IGNfaWZsYWc7CiAgdW5zaWduZWQgc2hvcnQgY19vZmxhZzsKICB1bnNpZ25lZCBzaG9ydCBjX2NmbGFnOwogIHVuc2lnbmVkIHNob3J0IGNfbGZsYWc7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGNoYXIgY19saW5lOwogIHVuc2lnbmVkIGNoYXIgY19jY1tOQ0NdOwogfTsKLQogI2RlZmluZSBUSU9DTV9MRSAweDAwMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVElPQ01fRFRSIDB4MDAyCiAjZGVmaW5lIFRJT0NNX1JUUyAweDAwNAogI2RlZmluZSBUSU9DTV9TVCAweDAwOAogI2RlZmluZSBUSU9DTV9TUiAweDAxMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVElPQ01fQ1RTIDB4MDIwCiAjZGVmaW5lIFRJT0NNX0NBUiAweDA0MAogI2RlZmluZSBUSU9DTV9STkcgMHgwODAKICNkZWZpbmUgVElPQ01fRFNSIDB4MTAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBUSU9DTV9DRCBUSU9DTV9DQVIKICNkZWZpbmUgVElPQ01fUkkgVElPQ01fUk5HCiAjZGVmaW5lIFRJT0NNX09VVDEgMHgyMDAwCiAjZGVmaW5lIFRJT0NNX09VVDIgMHg0MDAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBUSU9DTV9MT09QIDB4ODAwMAotCiAjZGVmaW5lIE5fVFRZIDAKICNkZWZpbmUgTl9TTElQIDEKICNkZWZpbmUgTl9NT1VTRSAyCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBOX1BQUCAzCiAjZGVmaW5lIE5fU1RSSVAgNAogI2RlZmluZSBOX0FYMjUgNQotI2RlZmluZSBOX1gyNSA2ICAKKyNkZWZpbmUgTl9YMjUgNgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTl82UEFDSyA3Ci0jZGVmaW5lIE5fTUFTQyA4ICAKLSNkZWZpbmUgTl9SMzk2NCA5ICAKLSNkZWZpbmUgTl9QUk9GSUJVU19GREwgMTAgIAotI2RlZmluZSBOX0lSREEgMTEgIAotI2RlZmluZSBOX1NNU0JMT0NLIDEyICAKLSNkZWZpbmUgTl9IRExDIDEzICAKKyNkZWZpbmUgTl9NQVNDIDgKKyNkZWZpbmUgTl9SMzk2NCA5CisjZGVmaW5lIE5fUFJPRklCVVNfRkRMIDEwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBOX0lSREEgMTEKKyNkZWZpbmUgTl9TTVNCTE9DSyAxMgorI2RlZmluZSBOX0hETEMgMTMKICNkZWZpbmUgTl9TWU5DX1BQUCAxNAotI2RlZmluZSBOX0hDSSAxNSAgCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIE5fSENJIDE1CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS90aHJlYWRfaW5mby5oIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL3RocmVhZF9pbmZvLmgKaW5kZXggYTMwZDJkYy4uMDk1NmU2YSAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL3RocmVhZF9pbmZvLmgKKysrIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL3RocmVhZF9pbmZvLmgKQEAgLTcsOSArNywxNSBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX19BU01fQVJNX1RIUkVBRF9JTkZPX0gKICNkZWZpbmUgX19BU01fQVJNX1RIUkVBRF9JTkZPX0gKLQogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vdGltZXguaCBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS90aW1leC5oCmluZGV4IDExMGM0NzEuLjJiMGZmNmUgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS90aW1leC5oCisrKyBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS90aW1leC5oCkBAIC03LDEzICs3LDE4IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfQVNNQVJNX1RJTUVYX0gKICNkZWZpbmUgX0FTTUFSTV9USU1FWF9ICi0KICNpbmNsdWRlIDxhc20vYXJjaC90aW1leC5oPgotCiB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgY3ljbGVzX3Q7Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS90bGJmbHVzaC5oIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL3RsYmZsdXNoLmgKaW5kZXggNzBhMjNkYy4uZWI1NDY4YyAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL3RsYmZsdXNoLmgKKysrIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL3RsYmZsdXNoLmgKQEAgLTcsMTEgKzcsMTcgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9BU01BUk1fVExCRkxVU0hfSAogI2RlZmluZSBfQVNNQVJNX1RMQkZMVVNIX0gKLQogI2RlZmluZSB0bGJfZmx1c2godGxiKSAoKHZvaWQpIHRsYikKLQogI2VuZGlmCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL3RvcG9sb2d5LmggYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vdG9wb2xvZ3kuaAppbmRleCA5ZWNjZmQ0Li5kYTJjNGY4IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vdG9wb2xvZ3kuaAorKysgYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vdG9wb2xvZ3kuaApAQCAtNywxMSArNywxNyBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX0FTTV9BUk1fVE9QT0xPR1lfSAogI2RlZmluZSBfQVNNX0FSTV9UT1BPTE9HWV9ICi0KICNpbmNsdWRlIDxhc20tZ2VuZXJpYy90b3BvbG9neS5oPgotCiAjZW5kaWYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vdHlwZXMuaCBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS90eXBlcy5oCmluZGV4IDgwY2VhOGQuLmFmMWVhMGMgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS90eXBlcy5oCisrKyBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS90eXBlcy5oCkBAIC03LDMwICs3LDMyIEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfX0FTTV9BUk1fVFlQRVNfSAogI2RlZmluZSBfX0FTTV9BUk1fVFlQRVNfSAotCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwotCiB0eXBlZGVmIHVuc2lnbmVkIHNob3J0IHVtb2RlX3Q7Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB0eXBlZGVmIF9fc2lnbmVkX18gY2hhciBfX3M4OwogdHlwZWRlZiB1bnNpZ25lZCBjaGFyIF9fdTg7Ci0KIHR5cGVkZWYgX19zaWduZWRfXyBzaG9ydCBfX3MxNjsKIHR5cGVkZWYgdW5zaWduZWQgc2hvcnQgX191MTY7Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB0eXBlZGVmIF9fc2lnbmVkX18gaW50IF9fczMyOwogdHlwZWRlZiB1bnNpZ25lZCBpbnQgX191MzI7Ci0KICNpZmRlZiBfX0dOVUNfXwogdHlwZWRlZiBfX3NpZ25lZF9fIGxvbmcgbG9uZyBfX3M2NDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBfX3U2NDsKICNlbmRpZgotCiAjZW5kaWYKLQogI2VuZGlmCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vdWFjY2Vzcy5oIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL3VhY2Nlc3MuaAppbmRleCAyMWZjM2YyLi42YWIyMWQ4IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vdWFjY2Vzcy5oCisrKyBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS91YWNjZXNzLmgKQEAgLTcsNzEgKzcsODQgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9BU01BUk1fVUFDQ0VTU19ICiAjZGVmaW5lIF9BU01BUk1fVUFDQ0VTU19ICi0KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGFzbS9lcnJuby5oPgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNpbmNsdWRlIDxhc20vbWVtb3J5Lmg+CiAjaW5jbHVkZSA8YXNtL2RvbWFpbi5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KLQogI2RlZmluZSBWRVJJRllfUkVBRCAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWRVJJRllfV1JJVEUgMQotCiBzdHJ1Y3QgZXhjZXB0aW9uX3RhYmxlX2VudHJ5CiB7CiAgdW5zaWduZWQgbG9uZyBpbnNuLCBmaXh1cDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwotCiAjZGVmaW5lIEtFUk5FTF9EUyAweDAwMDAwMDAwCiAjZGVmaW5lIGdldF9kcygpIChLRVJORUxfRFMpCi0KICNkZWZpbmUgVVNFUl9EUyBLRVJORUxfRFMKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgc2VnbWVudF9lcShhLGIpICgxKQogI2RlZmluZSBfX2FkZHJfb2soYWRkcikgKDEpCiAjZGVmaW5lIF9fcmFuZ2Vfb2soYWRkcixzaXplKSAoMCkKICNkZWZpbmUgZ2V0X2ZzKCkgKEtFUk5FTF9EUykKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgZ2V0X3VzZXIoeCxwKSBfX2dldF91c2VyKHgscCkKICNkZWZpbmUgcHV0X3VzZXIoeCxwKSBfX3B1dF91c2VyKHgscCkKICNkZWZpbmUgYWNjZXNzX29rKHR5cGUsYWRkcixzaXplKSAoX19yYW5nZV9vayhhZGRyLHNpemUpID09IDApCiAjZGVmaW5lIF9fZ2V0X3VzZXIoeCxwdHIpICAoeyAgIGxvbmcgX19ndV9lcnIgPSAwOyAgIF9fZ2V0X3VzZXJfZXJyKCh4KSwocHRyKSxfX2d1X2Vycik7ICAgX19ndV9lcnI7ICB9KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19nZXRfdXNlcl9lcnJvcih4LHB0cixlcnIpICAoeyAgIF9fZ2V0X3VzZXJfZXJyKCh4KSwocHRyKSxlcnIpOyAgICh2b2lkKSAwOyAgfSkKICNkZWZpbmUgX19nZXRfdXNlcl9lcnIoeCxwdHIsZXJyKSAgZG8geyAgIHVuc2lnbmVkIGxvbmcgX19ndV9hZGRyID0gKHVuc2lnbmVkIGxvbmcpKHB0cik7ICAgdW5zaWduZWQgbG9uZyBfX2d1X3ZhbDsgICBfX2Noa191c2VyX3B0cihwdHIpOyAgIHN3aXRjaCAoc2l6ZW9mKCoocHRyKSkpIHsgICBjYXNlIDE6IF9fZ2V0X3VzZXJfYXNtX2J5dGUoX19ndV92YWwsX19ndV9hZGRyLGVycik7IGJyZWFrOyAgIGNhc2UgMjogX19nZXRfdXNlcl9hc21faGFsZihfX2d1X3ZhbCxfX2d1X2FkZHIsZXJyKTsgYnJlYWs7ICAgY2FzZSA0OiBfX2dldF91c2VyX2FzbV93b3JkKF9fZ3VfdmFsLF9fZ3VfYWRkcixlcnIpOyBicmVhazsgICBkZWZhdWx0OiAoX19ndV92YWwpID0gX19nZXRfdXNlcl9iYWQoKTsgICB9ICAgKHgpID0gKF9fdHlwZW9mX18oKihwdHIpKSlfX2d1X3ZhbDsgIH0gd2hpbGUgKDApCiAjZGVmaW5lIF9fZ2V0X3VzZXJfYXNtX2J5dGUoeCxhZGRyLGVycikgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyggICAiMToJbGRyYnQJJTEsWyUyXSwjMFxuIiAgICIyOlxuIiAgICIJLnNlY3Rpb24gLmZpeHVwLFwiYXhcIlxuIiAgICIJLmFsaWduCTJcbiIgICAiMzoJbW92CSUwLCAlM1xuIiAgICIJbW92CSUxLCAjMFxuIiAgICIJYgkyYlxuIiAgICIJLnByZXZpb3VzXG4iICAgIgkuc2VjdGlvbiBfX2V4X3RhYmxlLFwiYVwiXG4iICAgIgkuYWxpZ24JM1xuIiAgICIJLmxvbmcJMWIsIDNiXG4iICAgIgkucHJldmlvdXMiICAgOiAiK3IiIChlcnIpLCAiPSZyIiAoeCkgICA6ICJyIiAoYWRkciksICJpIiAoLUVGQVVMVCkgICA6ICJjYyIpCiAjaWZuZGVmIF9fQVJNRUJfXworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19nZXRfdXNlcl9hc21faGFsZih4LF9fZ3VfYWRkcixlcnIpICAoeyAgIHVuc2lnbmVkIGxvbmcgX19iMSwgX19iMjsgICBfX2dldF91c2VyX2FzbV9ieXRlKF9fYjEsIF9fZ3VfYWRkciwgZXJyKTsgICBfX2dldF91c2VyX2FzbV9ieXRlKF9fYjIsIF9fZ3VfYWRkciArIDEsIGVycik7ICAgKHgpID0gX19iMSB8IChfX2IyIDw8IDgpOyAgfSkKICNlbHNlCiAjZGVmaW5lIF9fZ2V0X3VzZXJfYXNtX2hhbGYoeCxfX2d1X2FkZHIsZXJyKSAgKHsgICB1bnNpZ25lZCBsb25nIF9fYjEsIF9fYjI7ICAgX19nZXRfdXNlcl9hc21fYnl0ZShfX2IxLCBfX2d1X2FkZHIsIGVycik7ICAgX19nZXRfdXNlcl9hc21fYnl0ZShfX2IyLCBfX2d1X2FkZHIgKyAxLCBlcnIpOyAgICh4KSA9IChfX2IxIDw8IDgpIHwgX19iMjsgIH0pCiAjZW5kaWYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fZ2V0X3VzZXJfYXNtX3dvcmQoeCxhZGRyLGVycikgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyggICAiMToJbGRydAklMSxbJTJdLCMwXG4iICAgIjI6XG4iICAgIgkuc2VjdGlvbiAuZml4dXAsXCJheFwiXG4iICAgIgkuYWxpZ24JMlxuIiAgICIzOgltb3YJJTAsICUzXG4iICAgIgltb3YJJTEsICMwXG4iICAgIgliCTJiXG4iICAgIgkucHJldmlvdXNcbiIgICAiCS5zZWN0aW9uIF9fZXhfdGFibGUsXCJhXCJcbiIgICAiCS5hbGlnbgkzXG4iICAgIgkubG9uZwkxYiwgM2JcbiIgICAiCS5wcmV2aW91cyIgICA6ICIrciIgKGVyciksICI9JnIiICh4KSAgIDogInIiIChhZGRyKSwgImkiICgtRUZBVUxUKSAgIDogImNjIikKICNkZWZpbmUgX19wdXRfdXNlcih4LHB0cikgICh7ICAgbG9uZyBfX3B1X2VyciA9IDA7ICAgX19wdXRfdXNlcl9lcnIoKHgpLChwdHIpLF9fcHVfZXJyKTsgICBfX3B1X2VycjsgIH0pCiAjZGVmaW5lIF9fcHV0X3VzZXJfZXJyb3IoeCxwdHIsZXJyKSAgKHsgICBfX3B1dF91c2VyX2VycigoeCksKHB0ciksZXJyKTsgICAodm9pZCkgMDsgIH0pCiAjZGVmaW5lIF9fcHV0X3VzZXJfZXJyKHgscHRyLGVycikgIGRvIHsgICB1bnNpZ25lZCBsb25nIF9fcHVfYWRkciA9ICh1bnNpZ25lZCBsb25nKShwdHIpOyAgIF9fdHlwZW9mX18oKihwdHIpKSBfX3B1X3ZhbCA9ICh4KTsgICBfX2Noa191c2VyX3B0cihwdHIpOyAgIHN3aXRjaCAoc2l6ZW9mKCoocHRyKSkpIHsgICBjYXNlIDE6IF9fcHV0X3VzZXJfYXNtX2J5dGUoX19wdV92YWwsX19wdV9hZGRyLGVycik7IGJyZWFrOyAgIGNhc2UgMjogX19wdXRfdXNlcl9hc21faGFsZihfX3B1X3ZhbCxfX3B1X2FkZHIsZXJyKTsgYnJlYWs7ICAgY2FzZSA0OiBfX3B1dF91c2VyX2FzbV93b3JkKF9fcHVfdmFsLF9fcHVfYWRkcixlcnIpOyBicmVhazsgICBjYXNlIDg6IF9fcHV0X3VzZXJfYXNtX2R3b3JkKF9fcHVfdmFsLF9fcHVfYWRkcixlcnIpOyBicmVhazsgICBkZWZhdWx0OiBfX3B1dF91c2VyX2JhZCgpOyAgIH0gIH0gd2hpbGUgKDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX3B1dF91c2VyX2FzbV9ieXRlKHgsX19wdV9hZGRyLGVycikgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyggICAiMToJc3RyYnQJJTEsWyUyXSwjMFxuIiAgICIyOlxuIiAgICIJLnNlY3Rpb24gLmZpeHVwLFwiYXhcIlxuIiAgICIJLmFsaWduCTJcbiIgICAiMzoJbW92CSUwLCAlM1xuIiAgICIJYgkyYlxuIiAgICIJLnByZXZpb3VzXG4iICAgIgkuc2VjdGlvbiBfX2V4X3RhYmxlLFwiYVwiXG4iICAgIgkuYWxpZ24JM1xuIiAgICIJLmxvbmcJMWIsIDNiXG4iICAgIgkucHJldmlvdXMiICAgOiAiK3IiIChlcnIpICAgOiAiciIgKHgpLCAiciIgKF9fcHVfYWRkciksICJpIiAoLUVGQVVMVCkgICA6ICJjYyIpCiAjaWZuZGVmIF9fQVJNRUJfXwogI2RlZmluZSBfX3B1dF91c2VyX2FzbV9oYWxmKHgsX19wdV9hZGRyLGVycikgICh7ICAgdW5zaWduZWQgbG9uZyBfX3RlbXAgPSAodW5zaWduZWQgbG9uZykoeCk7ICAgX19wdXRfdXNlcl9hc21fYnl0ZShfX3RlbXAsIF9fcHVfYWRkciwgZXJyKTsgICBfX3B1dF91c2VyX2FzbV9ieXRlKF9fdGVtcCA+PiA4LCBfX3B1X2FkZHIgKyAxLCBlcnIpOyAgfSkKICNlbHNlCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX3B1dF91c2VyX2FzbV9oYWxmKHgsX19wdV9hZGRyLGVycikgICh7ICAgdW5zaWduZWQgbG9uZyBfX3RlbXAgPSAodW5zaWduZWQgbG9uZykoeCk7ICAgX19wdXRfdXNlcl9hc21fYnl0ZShfX3RlbXAgPj4gOCwgX19wdV9hZGRyLCBlcnIpOyAgIF9fcHV0X3VzZXJfYXNtX2J5dGUoX190ZW1wLCBfX3B1X2FkZHIgKyAxLCBlcnIpOyAgfSkKICNlbmRpZgogI2RlZmluZSBfX3B1dF91c2VyX2FzbV93b3JkKHgsX19wdV9hZGRyLGVycikgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyggICAiMToJc3RydAklMSxbJTJdLCMwXG4iICAgIjI6XG4iICAgIgkuc2VjdGlvbiAuZml4dXAsXCJheFwiXG4iICAgIgkuYWxpZ24JMlxuIiAgICIzOgltb3YJJTAsICUzXG4iICAgIgliCTJiXG4iICAgIgkucHJldmlvdXNcbiIgICAiCS5zZWN0aW9uIF9fZXhfdGFibGUsXCJhXCJcbiIgICAiCS5hbGlnbgkzXG4iICAgIgkubG9uZwkxYiwgM2JcbiIgICAiCS5wcmV2aW91cyIgICA6ICIrciIgKGVycikgICA6ICJyIiAoeCksICJyIiAoX19wdV9hZGRyKSwgImkiICgtRUZBVUxUKSAgIDogImNjIikKICNpZm5kZWYgX19BUk1FQl9fCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX3JlZ19vcGVyMCAiJVIyIgogI2RlZmluZSBfX3JlZ19vcGVyMSAiJVEyIgogI2Vsc2UKICNkZWZpbmUgX19yZWdfb3BlcjAgIiVRMiIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fcmVnX29wZXIxICIlUjIiCiAjZW5kaWYKICNkZWZpbmUgX19wdXRfdXNlcl9hc21fZHdvcmQoeCxfX3B1X2FkZHIsZXJyKSAgIF9fYXNtX18gX192b2xhdGlsZV9fKCAgICIxOglzdHJ0CSIgX19yZWdfb3BlcjEgIiwgWyUxXSwgIzRcbiIgICAiMjoJc3RydAkiIF9fcmVnX29wZXIwICIsIFslMV0sICMwXG4iICAgIjM6XG4iICAgIgkuc2VjdGlvbiAuZml4dXAsXCJheFwiXG4iICAgIgkuYWxpZ24JMlxuIiAgICI0Ogltb3YJJTAsICUzXG4iICAgIgliCTNiXG4iICAgIgkucHJldmlvdXNcbiIgICAiCS5zZWN0aW9uIF9fZXhfdGFibGUsXCJhXCJcbiIgICAiCS5hbGlnbgkzXG4iICAgIgkubG9uZwkxYiwgNGJcbiIgICAiCS5sb25nCTJiLCA0YlxuIiAgICIJLnByZXZpb3VzIiAgIDogIityIiAoZXJyKSwgIityIiAoX19wdV9hZGRyKSAgIDogInIiICh4KSwgImkiICgtRUZBVUxUKSAgIDogImNjIikKICNkZWZpbmUgX19jb3B5X2Zyb21fdXNlcih0byxmcm9tLG4pIChtZW1jcHkodG8sICh2b2lkIF9fZm9yY2UgKilmcm9tLCBuKSwgMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fY29weV90b191c2VyKHRvLGZyb20sbikgKG1lbWNweSgodm9pZCBfX2ZvcmNlICopdG8sIGZyb20sIG4pLCAwKQogI2RlZmluZSBfX2NsZWFyX3VzZXIoYWRkcixuKSAobWVtc2V0KCh2b2lkIF9fZm9yY2UgKilhZGRyLCAwLCBuKSwgMCkKLQogI2RlZmluZSBfX2NvcHlfdG9fdXNlcl9pbmF0b21pYyBfX2NvcHlfdG9fdXNlcgogI2RlZmluZSBfX2NvcHlfZnJvbV91c2VyX2luYXRvbWljIF9fY29weV9mcm9tX3VzZXIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIHN0cmxlbl91c2VyKHMpIHN0cm5sZW5fdXNlcihzLCB+MFVMID4+IDEpCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS91Y29udGV4dC5oIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL3Vjb250ZXh0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjU0YTdmMQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS91Y29udGV4dC5oCkBAIC0wLDAgKzEsMzQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0FTTUFSTV9VQ09OVEVYVF9ICisjZGVmaW5lIF9BU01BUk1fVUNPTlRFWFRfSAorI2luY2x1ZGUgPGFzbS9mcHN0YXRlLmg+CitzdHJ1Y3QgdWNvbnRleHQgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyB1bnNpZ25lZCBsb25nIHVjX2ZsYWdzOworIHN0cnVjdCB1Y29udGV4dCAqdWNfbGluazsKKyBzdGFja190IHVjX3N0YWNrOworIHN0cnVjdCBzaWdjb250ZXh0IHVjX21jb250ZXh0OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBzaWdzZXRfdCB1Y19zaWdtYXNrOworIGludCBfX2xpbnV4X3VudXNlZFszMiAtIChzaXplb2YgKHNpZ3NldF90KSAvIHNpemVvZiAoaW50KSldOworIHVuc2lnbmVkIGxvbmcgdWNfcmVnc3BhY2VbMTI4XSBfX2F0dHJpYnV0ZV9fKChfX2FsaWduZWRfXyg4KSkpOworfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS91bmFsaWduZWQuaCBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS91bmFsaWduZWQuaAppbmRleCA4YjliMDk2Li4yZTY2MTJhIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vdW5hbGlnbmVkLmgKKysrIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL3VuYWxpZ25lZC5oCkBAIC03LDMyICs3LDM1IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfX0FTTV9BUk1fVU5BTElHTkVEX0gKICNkZWZpbmUgX19BU01fQVJNX1VOQUxJR05FRF9ICi0KICNpbmNsdWRlIDxhc20vdHlwZXMuaD4KLQogI2RlZmluZSBfX2dldF91bmFsaWduZWRfMl9sZShfX3ApICAgKF9fcFswXSB8IF9fcFsxXSA8PCA4KQotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX2dldF91bmFsaWduZWRfMl9iZShfX3ApICAgKF9fcFswXSA8PCA4IHwgX19wWzFdKQotCiAjZGVmaW5lIF9fZ2V0X3VuYWxpZ25lZF80X2xlKF9fcCkgICAoX19wWzBdIHwgX19wWzFdIDw8IDggfCBfX3BbMl0gPDwgMTYgfCBfX3BbM10gPDwgMjQpCi0KICNkZWZpbmUgX19nZXRfdW5hbGlnbmVkXzRfYmUoX19wKSAgIChfX3BbMF0gPDwgMjQgfCBfX3BbMV0gPDwgMTYgfCBfX3BbMl0gPDwgOCB8IF9fcFszXSkKLQogI2RlZmluZSBfX2dldF91bmFsaWduZWRfbGUocHRyKSAgICh7ICAgX190eXBlb2ZfXygqKHB0cikpIF9fdjsgICBfX3U4ICpfX3AgPSAoX191OCAqKShwdHIpOyAgIHN3aXRjaCAoc2l6ZW9mKCoocHRyKSkpIHsgICBjYXNlIDE6IF9fdiA9ICoocHRyKTsgYnJlYWs7ICAgY2FzZSAyOiBfX3YgPSBfX2dldF91bmFsaWduZWRfMl9sZShfX3ApOyBicmVhazsgICBjYXNlIDQ6IF9fdiA9IF9fZ2V0X3VuYWxpZ25lZF80X2xlKF9fcCk7IGJyZWFrOyAgIGNhc2UgODogeyAgIHVuc2lnbmVkIGludCBfX3YxLCBfX3YyOyAgIF9fdjIgPSBfX2dldF91bmFsaWduZWRfNF9sZSgoX19wKzQpKTsgICBfX3YxID0gX19nZXRfdW5hbGlnbmVkXzRfbGUoX19wKTsgICBfX3YgPSAoKHVuc2lnbmVkIGxvbmcgbG9uZylfX3YyIDw8IDMyIHwgX192MSk7ICAgfSAgIGJyZWFrOyAgIGRlZmF1bHQ6IF9fdiA9IF9fYnVnX3VuYWxpZ25lZF94KF9fcCk7IGJyZWFrOyAgIH0gICBfX3Y7ICAgfSkKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19nZXRfdW5hbGlnbmVkX2JlKHB0cikgICAoeyAgIF9fdHlwZW9mX18oKihwdHIpKSBfX3Y7ICAgX191OCAqX19wID0gKF9fdTggKikocHRyKTsgICBzd2l0Y2ggKHNpemVvZigqKHB0cikpKSB7ICAgY2FzZSAxOiBfX3YgPSAqKHB0cik7IGJyZWFrOyAgIGNhc2UgMjogX192ID0gX19nZXRfdW5hbGlnbmVkXzJfYmUoX19wKTsgYnJlYWs7ICAgY2FzZSA0OiBfX3YgPSBfX2dldF91bmFsaWduZWRfNF9iZShfX3ApOyBicmVhazsgICBjYXNlIDg6IHsgICB1bnNpZ25lZCBpbnQgX192MSwgX192MjsgICBfX3YyID0gX19nZXRfdW5hbGlnbmVkXzRfYmUoX19wKTsgICBfX3YxID0gX19nZXRfdW5hbGlnbmVkXzRfYmUoKF9fcCs0KSk7ICAgX192ID0gKCh1bnNpZ25lZCBsb25nIGxvbmcpX192MiA8PCAzMiB8IF9fdjEpOyAgIH0gICBicmVhazsgICBkZWZhdWx0OiBfX3YgPSBfX2J1Z191bmFsaWduZWRfeChfX3ApOyBicmVhazsgICB9ICAgX192OyAgIH0pCi0KICNkZWZpbmUgX19wdXRfdW5hbGlnbmVkX2xlKHZhbCxwdHIpICAgKHsgICBzd2l0Y2ggKHNpemVvZigqKHB0cikpKSB7ICAgY2FzZSAxOiAgICoocHRyKSA9ICh2YWwpOyAgIGJyZWFrOyAgIGNhc2UgMjogX19wdXRfdW5hbGlnbmVkXzJfbGUoKHZhbCksKF9fdTggKikocHRyKSk7ICAgYnJlYWs7ICAgY2FzZSA0OiBfX3B1dF91bmFsaWduZWRfNF9sZSgodmFsKSwoX191OCAqKShwdHIpKTsgICBicmVhazsgICBjYXNlIDg6IF9fcHV0X3VuYWxpZ25lZF84X2xlKCh2YWwpLChfX3U4ICopKHB0cikpOyAgIGJyZWFrOyAgIGRlZmF1bHQ6IF9fYnVnX3VuYWxpZ25lZF94KHB0cik7ICAgYnJlYWs7ICAgfSAgICh2b2lkKSAwOyAgIH0pCiAjZGVmaW5lIF9fcHV0X3VuYWxpZ25lZF9iZSh2YWwscHRyKSAgICh7ICAgc3dpdGNoIChzaXplb2YoKihwdHIpKSkgeyAgIGNhc2UgMTogICAqKHB0cikgPSAodmFsKTsgICBicmVhazsgICBjYXNlIDI6IF9fcHV0X3VuYWxpZ25lZF8yX2JlKCh2YWwpLChfX3U4ICopKHB0cikpOyAgIGJyZWFrOyAgIGNhc2UgNDogX19wdXRfdW5hbGlnbmVkXzRfYmUoKHZhbCksKF9fdTggKikocHRyKSk7ICAgYnJlYWs7ICAgY2FzZSA4OiBfX3B1dF91bmFsaWduZWRfOF9iZSgodmFsKSwoX191OCAqKShwdHIpKTsgICBicmVhazsgICBkZWZhdWx0OiBfX2J1Z191bmFsaWduZWRfeChwdHIpOyAgIGJyZWFrOyAgIH0gICAodm9pZCkgMDsgICB9KQogI2lmbmRlZiBfX0FSTUVCX18KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIGdldF91bmFsaWduZWQgX19nZXRfdW5hbGlnbmVkX2xlCiAjZGVmaW5lIHB1dF91bmFsaWduZWQgX19wdXRfdW5hbGlnbmVkX2xlCiAjZWxzZQogI2RlZmluZSBnZXRfdW5hbGlnbmVkIF9fZ2V0X3VuYWxpZ25lZF9iZQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgcHV0X3VuYWxpZ25lZCBfX3B1dF91bmFsaWduZWRfYmUKICNlbmRpZgogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vdW5pc3RkLmggYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vdW5pc3RkLmgKaW5kZXggOWEzMGRkYy4uZDI2MTJlOCAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL3VuaXN0ZC5oCisrKyBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS91bmlzdGQuaApAQCAtNywzNTMgKzcsNDgwIEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfX0FTTV9BUk1fVU5JU1REX0gKICNkZWZpbmUgX19BU01fQVJNX1VOSVNURF9ICi0KICNkZWZpbmUgX19OUl9PQUJJX1NZU0NBTExfQkFTRSAweDkwMDAwMAotCiAjaWYgZGVmaW5lZChfX3RodW1iX18pIHx8IGRlZmluZWQoX19BUk1fRUFCSV9fKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9TWVNDQUxMX0JBU0UgMAogI2Vsc2UKICNkZWZpbmUgX19OUl9TWVNDQUxMX0JBU0UgX19OUl9PQUJJX1NZU0NBTExfQkFTRQogI2VuZGlmCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfcmVzdGFydF9zeXNjYWxsIChfX05SX1NZU0NBTExfQkFTRSsgMCkKICNkZWZpbmUgX19OUl9leGl0IChfX05SX1NZU0NBTExfQkFTRSsgMSkKICNkZWZpbmUgX19OUl9mb3JrIChfX05SX1NZU0NBTExfQkFTRSsgMikKICNkZWZpbmUgX19OUl9yZWFkIChfX05SX1NZU0NBTExfQkFTRSsgMykKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfd3JpdGUgKF9fTlJfU1lTQ0FMTF9CQVNFKyA0KQogI2RlZmluZSBfX05SX29wZW4gKF9fTlJfU1lTQ0FMTF9CQVNFKyA1KQogI2RlZmluZSBfX05SX2Nsb3NlIChfX05SX1NZU0NBTExfQkFTRSsgNikKLQogI2RlZmluZSBfX05SX2NyZWF0IChfX05SX1NZU0NBTExfQkFTRSsgOCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfbGluayAoX19OUl9TWVNDQUxMX0JBU0UrIDkpCiAjZGVmaW5lIF9fTlJfdW5saW5rIChfX05SX1NZU0NBTExfQkFTRSsgMTApCiAjZGVmaW5lIF9fTlJfZXhlY3ZlIChfX05SX1NZU0NBTExfQkFTRSsgMTEpCiAjZGVmaW5lIF9fTlJfY2hkaXIgKF9fTlJfU1lTQ0FMTF9CQVNFKyAxMikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfdGltZSAoX19OUl9TWVNDQUxMX0JBU0UrIDEzKQogI2RlZmluZSBfX05SX21rbm9kIChfX05SX1NZU0NBTExfQkFTRSsgMTQpCiAjZGVmaW5lIF9fTlJfY2htb2QgKF9fTlJfU1lTQ0FMTF9CQVNFKyAxNSkKICNkZWZpbmUgX19OUl9sY2hvd24gKF9fTlJfU1lTQ0FMTF9CQVNFKyAxNikKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9sc2VlayAoX19OUl9TWVNDQUxMX0JBU0UrIDE5KQogI2RlZmluZSBfX05SX2dldHBpZCAoX19OUl9TWVNDQUxMX0JBU0UrIDIwKQogI2RlZmluZSBfX05SX21vdW50IChfX05SX1NZU0NBTExfQkFTRSsgMjEpCiAjZGVmaW5lIF9fTlJfdW1vdW50IChfX05SX1NZU0NBTExfQkFTRSsgMjIpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3NldHVpZCAoX19OUl9TWVNDQUxMX0JBU0UrIDIzKQogI2RlZmluZSBfX05SX2dldHVpZCAoX19OUl9TWVNDQUxMX0JBU0UrIDI0KQogI2RlZmluZSBfX05SX3N0aW1lIChfX05SX1NZU0NBTExfQkFTRSsgMjUpCiAjZGVmaW5lIF9fTlJfcHRyYWNlIChfX05SX1NZU0NBTExfQkFTRSsgMjYpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX2FsYXJtIChfX05SX1NZU0NBTExfQkFTRSsgMjcpCi0KICNkZWZpbmUgX19OUl9wYXVzZSAoX19OUl9TWVNDQUxMX0JBU0UrIDI5KQogI2RlZmluZSBfX05SX3V0aW1lIChfX05SX1NZU0NBTExfQkFTRSsgMzApCi0KICNkZWZpbmUgX19OUl9hY2Nlc3MgKF9fTlJfU1lTQ0FMTF9CQVNFKyAzMykKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfbmljZSAoX19OUl9TWVNDQUxMX0JBU0UrIDM0KQotCiAjZGVmaW5lIF9fTlJfc3luYyAoX19OUl9TWVNDQUxMX0JBU0UrIDM2KQogI2RlZmluZSBfX05SX2tpbGwgKF9fTlJfU1lTQ0FMTF9CQVNFKyAzNykKICNkZWZpbmUgX19OUl9yZW5hbWUgKF9fTlJfU1lTQ0FMTF9CQVNFKyAzOCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfbWtkaXIgKF9fTlJfU1lTQ0FMTF9CQVNFKyAzOSkKICNkZWZpbmUgX19OUl9ybWRpciAoX19OUl9TWVNDQUxMX0JBU0UrIDQwKQogI2RlZmluZSBfX05SX2R1cCAoX19OUl9TWVNDQUxMX0JBU0UrIDQxKQogI2RlZmluZSBfX05SX3BpcGUgKF9fTlJfU1lTQ0FMTF9CQVNFKyA0MikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfdGltZXMgKF9fTlJfU1lTQ0FMTF9CQVNFKyA0MykKLQogI2RlZmluZSBfX05SX2JyayAoX19OUl9TWVNDQUxMX0JBU0UrIDQ1KQogI2RlZmluZSBfX05SX3NldGdpZCAoX19OUl9TWVNDQUxMX0JBU0UrIDQ2KQogI2RlZmluZSBfX05SX2dldGdpZCAoX19OUl9TWVNDQUxMX0JBU0UrIDQ3KQotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX2dldGV1aWQgKF9fTlJfU1lTQ0FMTF9CQVNFKyA0OSkKICNkZWZpbmUgX19OUl9nZXRlZ2lkIChfX05SX1NZU0NBTExfQkFTRSsgNTApCiAjZGVmaW5lIF9fTlJfYWNjdCAoX19OUl9TWVNDQUxMX0JBU0UrIDUxKQogI2RlZmluZSBfX05SX3Vtb3VudDIgKF9fTlJfU1lTQ0FMTF9CQVNFKyA1MikKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9pb2N0bCAoX19OUl9TWVNDQUxMX0JBU0UrIDU0KQogI2RlZmluZSBfX05SX2ZjbnRsIChfX05SX1NZU0NBTExfQkFTRSsgNTUpCi0KICNkZWZpbmUgX19OUl9zZXRwZ2lkIChfX05SX1NZU0NBTExfQkFTRSsgNTcpCi0KICNkZWZpbmUgX19OUl91bWFzayAoX19OUl9TWVNDQUxMX0JBU0UrIDYwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9jaHJvb3QgKF9fTlJfU1lTQ0FMTF9CQVNFKyA2MSkKICNkZWZpbmUgX19OUl91c3RhdCAoX19OUl9TWVNDQUxMX0JBU0UrIDYyKQogI2RlZmluZSBfX05SX2R1cDIgKF9fTlJfU1lTQ0FMTF9CQVNFKyA2MykKICNkZWZpbmUgX19OUl9nZXRwcGlkIChfX05SX1NZU0NBTExfQkFTRSsgNjQpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX2dldHBncnAgKF9fTlJfU1lTQ0FMTF9CQVNFKyA2NSkKICNkZWZpbmUgX19OUl9zZXRzaWQgKF9fTlJfU1lTQ0FMTF9CQVNFKyA2NikKICNkZWZpbmUgX19OUl9zaWdhY3Rpb24gKF9fTlJfU1lTQ0FMTF9CQVNFKyA2NykKLQogI2RlZmluZSBfX05SX3NldHJldWlkIChfX05SX1NZU0NBTExfQkFTRSsgNzApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3NldHJlZ2lkIChfX05SX1NZU0NBTExfQkFTRSsgNzEpCiAjZGVmaW5lIF9fTlJfc2lnc3VzcGVuZCAoX19OUl9TWVNDQUxMX0JBU0UrIDcyKQogI2RlZmluZSBfX05SX3NpZ3BlbmRpbmcgKF9fTlJfU1lTQ0FMTF9CQVNFKyA3MykKICNkZWZpbmUgX19OUl9zZXRob3N0bmFtZSAoX19OUl9TWVNDQUxMX0JBU0UrIDc0KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9zZXRybGltaXQgKF9fTlJfU1lTQ0FMTF9CQVNFKyA3NSkKLSNkZWZpbmUgX19OUl9nZXRybGltaXQgKF9fTlJfU1lTQ0FMTF9CQVNFKyA3NikgIAorI2RlZmluZSBfX05SX2dldHJsaW1pdCAoX19OUl9TWVNDQUxMX0JBU0UrIDc2KQogI2RlZmluZSBfX05SX2dldHJ1c2FnZSAoX19OUl9TWVNDQUxMX0JBU0UrIDc3KQogI2RlZmluZSBfX05SX2dldHRpbWVvZmRheSAoX19OUl9TWVNDQUxMX0JBU0UrIDc4KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9zZXR0aW1lb2ZkYXkgKF9fTlJfU1lTQ0FMTF9CQVNFKyA3OSkKICNkZWZpbmUgX19OUl9nZXRncm91cHMgKF9fTlJfU1lTQ0FMTF9CQVNFKyA4MCkKICNkZWZpbmUgX19OUl9zZXRncm91cHMgKF9fTlJfU1lTQ0FMTF9CQVNFKyA4MSkKICNkZWZpbmUgX19OUl9zZWxlY3QgKF9fTlJfU1lTQ0FMTF9CQVNFKyA4MikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfc3ltbGluayAoX19OUl9TWVNDQUxMX0JBU0UrIDgzKQotCiAjZGVmaW5lIF9fTlJfcmVhZGxpbmsgKF9fTlJfU1lTQ0FMTF9CQVNFKyA4NSkKICNkZWZpbmUgX19OUl91c2VsaWIgKF9fTlJfU1lTQ0FMTF9CQVNFKyA4NikKICNkZWZpbmUgX19OUl9zd2Fwb24gKF9fTlJfU1lTQ0FMTF9CQVNFKyA4NykKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfcmVib290IChfX05SX1NZU0NBTExfQkFTRSsgODgpCiAjZGVmaW5lIF9fTlJfcmVhZGRpciAoX19OUl9TWVNDQUxMX0JBU0UrIDg5KQogI2RlZmluZSBfX05SX21tYXAgKF9fTlJfU1lTQ0FMTF9CQVNFKyA5MCkKICNkZWZpbmUgX19OUl9tdW5tYXAgKF9fTlJfU1lTQ0FMTF9CQVNFKyA5MSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfdHJ1bmNhdGUgKF9fTlJfU1lTQ0FMTF9CQVNFKyA5MikKICNkZWZpbmUgX19OUl9mdHJ1bmNhdGUgKF9fTlJfU1lTQ0FMTF9CQVNFKyA5MykKICNkZWZpbmUgX19OUl9mY2htb2QgKF9fTlJfU1lTQ0FMTF9CQVNFKyA5NCkKICNkZWZpbmUgX19OUl9mY2hvd24gKF9fTlJfU1lTQ0FMTF9CQVNFKyA5NSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfZ2V0cHJpb3JpdHkgKF9fTlJfU1lTQ0FMTF9CQVNFKyA5NikKICNkZWZpbmUgX19OUl9zZXRwcmlvcml0eSAoX19OUl9TWVNDQUxMX0JBU0UrIDk3KQotCiAjZGVmaW5lIF9fTlJfc3RhdGZzIChfX05SX1NZU0NBTExfQkFTRSsgOTkpCiAjZGVmaW5lIF9fTlJfZnN0YXRmcyAoX19OUl9TWVNDQUxMX0JBU0UrMTAwKQotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3NvY2tldGNhbGwgKF9fTlJfU1lTQ0FMTF9CQVNFKzEwMikKICNkZWZpbmUgX19OUl9zeXNsb2cgKF9fTlJfU1lTQ0FMTF9CQVNFKzEwMykKICNkZWZpbmUgX19OUl9zZXRpdGltZXIgKF9fTlJfU1lTQ0FMTF9CQVNFKzEwNCkKICNkZWZpbmUgX19OUl9nZXRpdGltZXIgKF9fTlJfU1lTQ0FMTF9CQVNFKzEwNSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfc3RhdCAoX19OUl9TWVNDQUxMX0JBU0UrMTA2KQogI2RlZmluZSBfX05SX2xzdGF0IChfX05SX1NZU0NBTExfQkFTRSsxMDcpCiAjZGVmaW5lIF9fTlJfZnN0YXQgKF9fTlJfU1lTQ0FMTF9CQVNFKzEwOCkKLQogI2RlZmluZSBfX05SX3ZoYW5ndXAgKF9fTlJfU1lTQ0FMTF9CQVNFKzExMSkKLQotI2RlZmluZSBfX05SX3N5c2NhbGwgKF9fTlJfU1lTQ0FMTF9CQVNFKzExMykgIAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgX19OUl9zeXNjYWxsIChfX05SX1NZU0NBTExfQkFTRSsxMTMpCiAjZGVmaW5lIF9fTlJfd2FpdDQgKF9fTlJfU1lTQ0FMTF9CQVNFKzExNCkKICNkZWZpbmUgX19OUl9zd2Fwb2ZmIChfX05SX1NZU0NBTExfQkFTRSsxMTUpCiAjZGVmaW5lIF9fTlJfc3lzaW5mbyAoX19OUl9TWVNDQUxMX0JBU0UrMTE2KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9pcGMgKF9fTlJfU1lTQ0FMTF9CQVNFKzExNykKICNkZWZpbmUgX19OUl9mc3luYyAoX19OUl9TWVNDQUxMX0JBU0UrMTE4KQogI2RlZmluZSBfX05SX3NpZ3JldHVybiAoX19OUl9TWVNDQUxMX0JBU0UrMTE5KQogI2RlZmluZSBfX05SX2Nsb25lIChfX05SX1NZU0NBTExfQkFTRSsxMjApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3NldGRvbWFpbm5hbWUgKF9fTlJfU1lTQ0FMTF9CQVNFKzEyMSkKICNkZWZpbmUgX19OUl91bmFtZSAoX19OUl9TWVNDQUxMX0JBU0UrMTIyKQotCiAjZGVmaW5lIF9fTlJfYWRqdGltZXggKF9fTlJfU1lTQ0FMTF9CQVNFKzEyNCkKICNkZWZpbmUgX19OUl9tcHJvdGVjdCAoX19OUl9TWVNDQUxMX0JBU0UrMTI1KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9zaWdwcm9jbWFzayAoX19OUl9TWVNDQUxMX0JBU0UrMTI2KQotCiAjZGVmaW5lIF9fTlJfaW5pdF9tb2R1bGUgKF9fTlJfU1lTQ0FMTF9CQVNFKzEyOCkKICNkZWZpbmUgX19OUl9kZWxldGVfbW9kdWxlIChfX05SX1NZU0NBTExfQkFTRSsxMjkpCi0KICNkZWZpbmUgX19OUl9xdW90YWN0bCAoX19OUl9TWVNDQUxMX0JBU0UrMTMxKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9nZXRwZ2lkIChfX05SX1NZU0NBTExfQkFTRSsxMzIpCiAjZGVmaW5lIF9fTlJfZmNoZGlyIChfX05SX1NZU0NBTExfQkFTRSsxMzMpCiAjZGVmaW5lIF9fTlJfYmRmbHVzaCAoX19OUl9TWVNDQUxMX0JBU0UrMTM0KQogI2RlZmluZSBfX05SX3N5c2ZzIChfX05SX1NZU0NBTExfQkFTRSsxMzUpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3BlcnNvbmFsaXR5IChfX05SX1NZU0NBTExfQkFTRSsxMzYpCi0KICNkZWZpbmUgX19OUl9zZXRmc3VpZCAoX19OUl9TWVNDQUxMX0JBU0UrMTM4KQogI2RlZmluZSBfX05SX3NldGZzZ2lkIChfX05SX1NZU0NBTExfQkFTRSsxMzkpCiAjZGVmaW5lIF9fTlJfX2xsc2VlayAoX19OUl9TWVNDQUxMX0JBU0UrMTQwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9nZXRkZW50cyAoX19OUl9TWVNDQUxMX0JBU0UrMTQxKQogI2RlZmluZSBfX05SX19uZXdzZWxlY3QgKF9fTlJfU1lTQ0FMTF9CQVNFKzE0MikKICNkZWZpbmUgX19OUl9mbG9jayAoX19OUl9TWVNDQUxMX0JBU0UrMTQzKQogI2RlZmluZSBfX05SX21zeW5jIChfX05SX1NZU0NBTExfQkFTRSsxNDQpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3JlYWR2IChfX05SX1NZU0NBTExfQkFTRSsxNDUpCiAjZGVmaW5lIF9fTlJfd3JpdGV2IChfX05SX1NZU0NBTExfQkFTRSsxNDYpCiAjZGVmaW5lIF9fTlJfZ2V0c2lkIChfX05SX1NZU0NBTExfQkFTRSsxNDcpCiAjZGVmaW5lIF9fTlJfZmRhdGFzeW5jIChfX05SX1NZU0NBTExfQkFTRSsxNDgpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX19zeXNjdGwgKF9fTlJfU1lTQ0FMTF9CQVNFKzE0OSkKICNkZWZpbmUgX19OUl9tbG9jayAoX19OUl9TWVNDQUxMX0JBU0UrMTUwKQogI2RlZmluZSBfX05SX211bmxvY2sgKF9fTlJfU1lTQ0FMTF9CQVNFKzE1MSkKICNkZWZpbmUgX19OUl9tbG9ja2FsbCAoX19OUl9TWVNDQUxMX0JBU0UrMTUyKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9tdW5sb2NrYWxsIChfX05SX1NZU0NBTExfQkFTRSsxNTMpCiAjZGVmaW5lIF9fTlJfc2NoZWRfc2V0cGFyYW0gKF9fTlJfU1lTQ0FMTF9CQVNFKzE1NCkKICNkZWZpbmUgX19OUl9zY2hlZF9nZXRwYXJhbSAoX19OUl9TWVNDQUxMX0JBU0UrMTU1KQogI2RlZmluZSBfX05SX3NjaGVkX3NldHNjaGVkdWxlciAoX19OUl9TWVNDQUxMX0JBU0UrMTU2KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9zY2hlZF9nZXRzY2hlZHVsZXIgKF9fTlJfU1lTQ0FMTF9CQVNFKzE1NykKICNkZWZpbmUgX19OUl9zY2hlZF95aWVsZCAoX19OUl9TWVNDQUxMX0JBU0UrMTU4KQogI2RlZmluZSBfX05SX3NjaGVkX2dldF9wcmlvcml0eV9tYXggKF9fTlJfU1lTQ0FMTF9CQVNFKzE1OSkKICNkZWZpbmUgX19OUl9zY2hlZF9nZXRfcHJpb3JpdHlfbWluIChfX05SX1NZU0NBTExfQkFTRSsxNjApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3NjaGVkX3JyX2dldF9pbnRlcnZhbCAoX19OUl9TWVNDQUxMX0JBU0UrMTYxKQogI2RlZmluZSBfX05SX25hbm9zbGVlcCAoX19OUl9TWVNDQUxMX0JBU0UrMTYyKQogI2RlZmluZSBfX05SX21yZW1hcCAoX19OUl9TWVNDQUxMX0JBU0UrMTYzKQogI2RlZmluZSBfX05SX3NldHJlc3VpZCAoX19OUl9TWVNDQUxMX0JBU0UrMTY0KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9nZXRyZXN1aWQgKF9fTlJfU1lTQ0FMTF9CQVNFKzE2NSkKLQogI2RlZmluZSBfX05SX3BvbGwgKF9fTlJfU1lTQ0FMTF9CQVNFKzE2OCkKICNkZWZpbmUgX19OUl9uZnNzZXJ2Y3RsIChfX05SX1NZU0NBTExfQkFTRSsxNjkpCiAjZGVmaW5lIF9fTlJfc2V0cmVzZ2lkIChfX05SX1NZU0NBTExfQkFTRSsxNzApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX2dldHJlc2dpZCAoX19OUl9TWVNDQUxMX0JBU0UrMTcxKQogI2RlZmluZSBfX05SX3ByY3RsIChfX05SX1NZU0NBTExfQkFTRSsxNzIpCiAjZGVmaW5lIF9fTlJfcnRfc2lncmV0dXJuIChfX05SX1NZU0NBTExfQkFTRSsxNzMpCiAjZGVmaW5lIF9fTlJfcnRfc2lnYWN0aW9uIChfX05SX1NZU0NBTExfQkFTRSsxNzQpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3J0X3NpZ3Byb2NtYXNrIChfX05SX1NZU0NBTExfQkFTRSsxNzUpCiAjZGVmaW5lIF9fTlJfcnRfc2lncGVuZGluZyAoX19OUl9TWVNDQUxMX0JBU0UrMTc2KQogI2RlZmluZSBfX05SX3J0X3NpZ3RpbWVkd2FpdCAoX19OUl9TWVNDQUxMX0JBU0UrMTc3KQogI2RlZmluZSBfX05SX3J0X3NpZ3F1ZXVlaW5mbyAoX19OUl9TWVNDQUxMX0JBU0UrMTc4KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9ydF9zaWdzdXNwZW5kIChfX05SX1NZU0NBTExfQkFTRSsxNzkpCiAjZGVmaW5lIF9fTlJfcHJlYWQ2NCAoX19OUl9TWVNDQUxMX0JBU0UrMTgwKQogI2RlZmluZSBfX05SX3B3cml0ZTY0IChfX05SX1NZU0NBTExfQkFTRSsxODEpCiAjZGVmaW5lIF9fTlJfY2hvd24gKF9fTlJfU1lTQ0FMTF9CQVNFKzE4MikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfZ2V0Y3dkIChfX05SX1NZU0NBTExfQkFTRSsxODMpCiAjZGVmaW5lIF9fTlJfY2FwZ2V0IChfX05SX1NZU0NBTExfQkFTRSsxODQpCiAjZGVmaW5lIF9fTlJfY2Fwc2V0IChfX05SX1NZU0NBTExfQkFTRSsxODUpCiAjZGVmaW5lIF9fTlJfc2lnYWx0c3RhY2sgKF9fTlJfU1lTQ0FMTF9CQVNFKzE4NikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfc2VuZGZpbGUgKF9fTlJfU1lTQ0FMTF9CQVNFKzE4NykKLQogI2RlZmluZSBfX05SX3Zmb3JrIChfX05SX1NZU0NBTExfQkFTRSsxOTApCi0jZGVmaW5lIF9fTlJfdWdldHJsaW1pdCAoX19OUl9TWVNDQUxMX0JBU0UrMTkxKSAgCisjZGVmaW5lIF9fTlJfdWdldHJsaW1pdCAoX19OUl9TWVNDQUxMX0JBU0UrMTkxKQogI2RlZmluZSBfX05SX21tYXAyIChfX05SX1NZU0NBTExfQkFTRSsxOTIpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3RydW5jYXRlNjQgKF9fTlJfU1lTQ0FMTF9CQVNFKzE5MykKICNkZWZpbmUgX19OUl9mdHJ1bmNhdGU2NCAoX19OUl9TWVNDQUxMX0JBU0UrMTk0KQogI2RlZmluZSBfX05SX3N0YXQ2NCAoX19OUl9TWVNDQUxMX0JBU0UrMTk1KQogI2RlZmluZSBfX05SX2xzdGF0NjQgKF9fTlJfU1lTQ0FMTF9CQVNFKzE5NikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfZnN0YXQ2NCAoX19OUl9TWVNDQUxMX0JBU0UrMTk3KQogI2RlZmluZSBfX05SX2xjaG93bjMyIChfX05SX1NZU0NBTExfQkFTRSsxOTgpCiAjZGVmaW5lIF9fTlJfZ2V0dWlkMzIgKF9fTlJfU1lTQ0FMTF9CQVNFKzE5OSkKICNkZWZpbmUgX19OUl9nZXRnaWQzMiAoX19OUl9TWVNDQUxMX0JBU0UrMjAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9nZXRldWlkMzIgKF9fTlJfU1lTQ0FMTF9CQVNFKzIwMSkKICNkZWZpbmUgX19OUl9nZXRlZ2lkMzIgKF9fTlJfU1lTQ0FMTF9CQVNFKzIwMikKICNkZWZpbmUgX19OUl9zZXRyZXVpZDMyIChfX05SX1NZU0NBTExfQkFTRSsyMDMpCiAjZGVmaW5lIF9fTlJfc2V0cmVnaWQzMiAoX19OUl9TWVNDQUxMX0JBU0UrMjA0KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9nZXRncm91cHMzMiAoX19OUl9TWVNDQUxMX0JBU0UrMjA1KQogI2RlZmluZSBfX05SX3NldGdyb3VwczMyIChfX05SX1NZU0NBTExfQkFTRSsyMDYpCiAjZGVmaW5lIF9fTlJfZmNob3duMzIgKF9fTlJfU1lTQ0FMTF9CQVNFKzIwNykKICNkZWZpbmUgX19OUl9zZXRyZXN1aWQzMiAoX19OUl9TWVNDQUxMX0JBU0UrMjA4KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9nZXRyZXN1aWQzMiAoX19OUl9TWVNDQUxMX0JBU0UrMjA5KQogI2RlZmluZSBfX05SX3NldHJlc2dpZDMyIChfX05SX1NZU0NBTExfQkFTRSsyMTApCiAjZGVmaW5lIF9fTlJfZ2V0cmVzZ2lkMzIgKF9fTlJfU1lTQ0FMTF9CQVNFKzIxMSkKICNkZWZpbmUgX19OUl9jaG93bjMyIChfX05SX1NZU0NBTExfQkFTRSsyMTIpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3NldHVpZDMyIChfX05SX1NZU0NBTExfQkFTRSsyMTMpCiAjZGVmaW5lIF9fTlJfc2V0Z2lkMzIgKF9fTlJfU1lTQ0FMTF9CQVNFKzIxNCkKICNkZWZpbmUgX19OUl9zZXRmc3VpZDMyIChfX05SX1NZU0NBTExfQkFTRSsyMTUpCiAjZGVmaW5lIF9fTlJfc2V0ZnNnaWQzMiAoX19OUl9TWVNDQUxMX0JBU0UrMjE2KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9nZXRkZW50czY0IChfX05SX1NZU0NBTExfQkFTRSsyMTcpCiAjZGVmaW5lIF9fTlJfcGl2b3Rfcm9vdCAoX19OUl9TWVNDQUxMX0JBU0UrMjE4KQogI2RlZmluZSBfX05SX21pbmNvcmUgKF9fTlJfU1lTQ0FMTF9CQVNFKzIxOSkKICNkZWZpbmUgX19OUl9tYWR2aXNlIChfX05SX1NZU0NBTExfQkFTRSsyMjApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX2ZjbnRsNjQgKF9fTlJfU1lTQ0FMTF9CQVNFKzIyMSkKLQogI2RlZmluZSBfX05SX2dldHRpZCAoX19OUl9TWVNDQUxMX0JBU0UrMjI0KQogI2RlZmluZSBfX05SX3JlYWRhaGVhZCAoX19OUl9TWVNDQUxMX0JBU0UrMjI1KQogI2RlZmluZSBfX05SX3NldHhhdHRyIChfX05SX1NZU0NBTExfQkFTRSsyMjYpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX2xzZXR4YXR0ciAoX19OUl9TWVNDQUxMX0JBU0UrMjI3KQogI2RlZmluZSBfX05SX2ZzZXR4YXR0ciAoX19OUl9TWVNDQUxMX0JBU0UrMjI4KQogI2RlZmluZSBfX05SX2dldHhhdHRyIChfX05SX1NZU0NBTExfQkFTRSsyMjkpCiAjZGVmaW5lIF9fTlJfbGdldHhhdHRyIChfX05SX1NZU0NBTExfQkFTRSsyMzApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX2ZnZXR4YXR0ciAoX19OUl9TWVNDQUxMX0JBU0UrMjMxKQogI2RlZmluZSBfX05SX2xpc3R4YXR0ciAoX19OUl9TWVNDQUxMX0JBU0UrMjMyKQogI2RlZmluZSBfX05SX2xsaXN0eGF0dHIgKF9fTlJfU1lTQ0FMTF9CQVNFKzIzMykKICNkZWZpbmUgX19OUl9mbGlzdHhhdHRyIChfX05SX1NZU0NBTExfQkFTRSsyMzQpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3JlbW92ZXhhdHRyIChfX05SX1NZU0NBTExfQkFTRSsyMzUpCiAjZGVmaW5lIF9fTlJfbHJlbW92ZXhhdHRyIChfX05SX1NZU0NBTExfQkFTRSsyMzYpCiAjZGVmaW5lIF9fTlJfZnJlbW92ZXhhdHRyIChfX05SX1NZU0NBTExfQkFTRSsyMzcpCiAjZGVmaW5lIF9fTlJfdGtpbGwgKF9fTlJfU1lTQ0FMTF9CQVNFKzIzOCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfc2VuZGZpbGU2NCAoX19OUl9TWVNDQUxMX0JBU0UrMjM5KQogI2RlZmluZSBfX05SX2Z1dGV4IChfX05SX1NZU0NBTExfQkFTRSsyNDApCiAjZGVmaW5lIF9fTlJfc2NoZWRfc2V0YWZmaW5pdHkgKF9fTlJfU1lTQ0FMTF9CQVNFKzI0MSkKICNkZWZpbmUgX19OUl9zY2hlZF9nZXRhZmZpbml0eSAoX19OUl9TWVNDQUxMX0JBU0UrMjQyKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9pb19zZXR1cCAoX19OUl9TWVNDQUxMX0JBU0UrMjQzKQogI2RlZmluZSBfX05SX2lvX2Rlc3Ryb3kgKF9fTlJfU1lTQ0FMTF9CQVNFKzI0NCkKICNkZWZpbmUgX19OUl9pb19nZXRldmVudHMgKF9fTlJfU1lTQ0FMTF9CQVNFKzI0NSkKICNkZWZpbmUgX19OUl9pb19zdWJtaXQgKF9fTlJfU1lTQ0FMTF9CQVNFKzI0NikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfaW9fY2FuY2VsIChfX05SX1NZU0NBTExfQkFTRSsyNDcpCiAjZGVmaW5lIF9fTlJfZXhpdF9ncm91cCAoX19OUl9TWVNDQUxMX0JBU0UrMjQ4KQogI2RlZmluZSBfX05SX2xvb2t1cF9kY29va2llIChfX05SX1NZU0NBTExfQkFTRSsyNDkpCiAjZGVmaW5lIF9fTlJfZXBvbGxfY3JlYXRlIChfX05SX1NZU0NBTExfQkFTRSsyNTApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX2Vwb2xsX2N0bCAoX19OUl9TWVNDQUxMX0JBU0UrMjUxKQogI2RlZmluZSBfX05SX2Vwb2xsX3dhaXQgKF9fTlJfU1lTQ0FMTF9CQVNFKzI1MikKICNkZWZpbmUgX19OUl9yZW1hcF9maWxlX3BhZ2VzIChfX05SX1NZU0NBTExfQkFTRSsyNTMpCi0KICNkZWZpbmUgX19OUl9zZXRfdGlkX2FkZHJlc3MgKF9fTlJfU1lTQ0FMTF9CQVNFKzI1NikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfdGltZXJfY3JlYXRlIChfX05SX1NZU0NBTExfQkFTRSsyNTcpCiAjZGVmaW5lIF9fTlJfdGltZXJfc2V0dGltZSAoX19OUl9TWVNDQUxMX0JBU0UrMjU4KQogI2RlZmluZSBfX05SX3RpbWVyX2dldHRpbWUgKF9fTlJfU1lTQ0FMTF9CQVNFKzI1OSkKICNkZWZpbmUgX19OUl90aW1lcl9nZXRvdmVycnVuIChfX05SX1NZU0NBTExfQkFTRSsyNjApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3RpbWVyX2RlbGV0ZSAoX19OUl9TWVNDQUxMX0JBU0UrMjYxKQogI2RlZmluZSBfX05SX2Nsb2NrX3NldHRpbWUgKF9fTlJfU1lTQ0FMTF9CQVNFKzI2MikKICNkZWZpbmUgX19OUl9jbG9ja19nZXR0aW1lIChfX05SX1NZU0NBTExfQkFTRSsyNjMpCiAjZGVmaW5lIF9fTlJfY2xvY2tfZ2V0cmVzIChfX05SX1NZU0NBTExfQkFTRSsyNjQpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX2Nsb2NrX25hbm9zbGVlcCAoX19OUl9TWVNDQUxMX0JBU0UrMjY1KQogI2RlZmluZSBfX05SX3N0YXRmczY0IChfX05SX1NZU0NBTExfQkFTRSsyNjYpCiAjZGVmaW5lIF9fTlJfZnN0YXRmczY0IChfX05SX1NZU0NBTExfQkFTRSsyNjcpCiAjZGVmaW5lIF9fTlJfdGdraWxsIChfX05SX1NZU0NBTExfQkFTRSsyNjgpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3V0aW1lcyAoX19OUl9TWVNDQUxMX0JBU0UrMjY5KQogI2RlZmluZSBfX05SX2FybV9mYWR2aXNlNjRfNjQgKF9fTlJfU1lTQ0FMTF9CQVNFKzI3MCkKICNkZWZpbmUgX19OUl9wY2ljb25maWdfaW9iYXNlIChfX05SX1NZU0NBTExfQkFTRSsyNzEpCiAjZGVmaW5lIF9fTlJfcGNpY29uZmlnX3JlYWQgKF9fTlJfU1lTQ0FMTF9CQVNFKzI3MikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfcGNpY29uZmlnX3dyaXRlIChfX05SX1NZU0NBTExfQkFTRSsyNzMpCiAjZGVmaW5lIF9fTlJfbXFfb3BlbiAoX19OUl9TWVNDQUxMX0JBU0UrMjc0KQogI2RlZmluZSBfX05SX21xX3VubGluayAoX19OUl9TWVNDQUxMX0JBU0UrMjc1KQogI2RlZmluZSBfX05SX21xX3RpbWVkc2VuZCAoX19OUl9TWVNDQUxMX0JBU0UrMjc2KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9tcV90aW1lZHJlY2VpdmUgKF9fTlJfU1lTQ0FMTF9CQVNFKzI3NykKICNkZWZpbmUgX19OUl9tcV9ub3RpZnkgKF9fTlJfU1lTQ0FMTF9CQVNFKzI3OCkKICNkZWZpbmUgX19OUl9tcV9nZXRzZXRhdHRyIChfX05SX1NZU0NBTExfQkFTRSsyNzkpCiAjZGVmaW5lIF9fTlJfd2FpdGlkIChfX05SX1NZU0NBTExfQkFTRSsyODApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3NvY2tldCAoX19OUl9TWVNDQUxMX0JBU0UrMjgxKQogI2RlZmluZSBfX05SX2JpbmQgKF9fTlJfU1lTQ0FMTF9CQVNFKzI4MikKICNkZWZpbmUgX19OUl9jb25uZWN0IChfX05SX1NZU0NBTExfQkFTRSsyODMpCiAjZGVmaW5lIF9fTlJfbGlzdGVuIChfX05SX1NZU0NBTExfQkFTRSsyODQpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX2FjY2VwdCAoX19OUl9TWVNDQUxMX0JBU0UrMjg1KQogI2RlZmluZSBfX05SX2dldHNvY2tuYW1lIChfX05SX1NZU0NBTExfQkFTRSsyODYpCiAjZGVmaW5lIF9fTlJfZ2V0cGVlcm5hbWUgKF9fTlJfU1lTQ0FMTF9CQVNFKzI4NykKICNkZWZpbmUgX19OUl9zb2NrZXRwYWlyIChfX05SX1NZU0NBTExfQkFTRSsyODgpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3NlbmQgKF9fTlJfU1lTQ0FMTF9CQVNFKzI4OSkKICNkZWZpbmUgX19OUl9zZW5kdG8gKF9fTlJfU1lTQ0FMTF9CQVNFKzI5MCkKICNkZWZpbmUgX19OUl9yZWN2IChfX05SX1NZU0NBTExfQkFTRSsyOTEpCiAjZGVmaW5lIF9fTlJfcmVjdmZyb20gKF9fTlJfU1lTQ0FMTF9CQVNFKzI5MikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfc2h1dGRvd24gKF9fTlJfU1lTQ0FMTF9CQVNFKzI5MykKICNkZWZpbmUgX19OUl9zZXRzb2Nrb3B0IChfX05SX1NZU0NBTExfQkFTRSsyOTQpCiAjZGVmaW5lIF9fTlJfZ2V0c29ja29wdCAoX19OUl9TWVNDQUxMX0JBU0UrMjk1KQogI2RlZmluZSBfX05SX3NlbmRtc2cgKF9fTlJfU1lTQ0FMTF9CQVNFKzI5NikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfcmVjdm1zZyAoX19OUl9TWVNDQUxMX0JBU0UrMjk3KQogI2RlZmluZSBfX05SX3NlbW9wIChfX05SX1NZU0NBTExfQkFTRSsyOTgpCiAjZGVmaW5lIF9fTlJfc2VtZ2V0IChfX05SX1NZU0NBTExfQkFTRSsyOTkpCiAjZGVmaW5lIF9fTlJfc2VtY3RsIChfX05SX1NZU0NBTExfQkFTRSszMDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX21zZ3NuZCAoX19OUl9TWVNDQUxMX0JBU0UrMzAxKQogI2RlZmluZSBfX05SX21zZ3JjdiAoX19OUl9TWVNDQUxMX0JBU0UrMzAyKQogI2RlZmluZSBfX05SX21zZ2dldCAoX19OUl9TWVNDQUxMX0JBU0UrMzAzKQogI2RlZmluZSBfX05SX21zZ2N0bCAoX19OUl9TWVNDQUxMX0JBU0UrMzA0KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9zaG1hdCAoX19OUl9TWVNDQUxMX0JBU0UrMzA1KQogI2RlZmluZSBfX05SX3NobWR0IChfX05SX1NZU0NBTExfQkFTRSszMDYpCiAjZGVmaW5lIF9fTlJfc2htZ2V0IChfX05SX1NZU0NBTExfQkFTRSszMDcpCiAjZGVmaW5lIF9fTlJfc2htY3RsIChfX05SX1NZU0NBTExfQkFTRSszMDgpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX2FkZF9rZXkgKF9fTlJfU1lTQ0FMTF9CQVNFKzMwOSkKICNkZWZpbmUgX19OUl9yZXF1ZXN0X2tleSAoX19OUl9TWVNDQUxMX0JBU0UrMzEwKQogI2RlZmluZSBfX05SX2tleWN0bCAoX19OUl9TWVNDQUxMX0JBU0UrMzExKQogI2RlZmluZSBfX05SX3NlbXRpbWVkb3AgKF9fTlJfU1lTQ0FMTF9CQVNFKzMxMikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfdnNlcnZlciAoX19OUl9TWVNDQUxMX0JBU0UrMzEzKQogI2RlZmluZSBfX05SX2lvcHJpb19zZXQgKF9fTlJfU1lTQ0FMTF9CQVNFKzMxNCkKICNkZWZpbmUgX19OUl9pb3ByaW9fZ2V0IChfX05SX1NZU0NBTExfQkFTRSszMTUpCiAjZGVmaW5lIF9fTlJfaW5vdGlmeV9pbml0IChfX05SX1NZU0NBTExfQkFTRSszMTYpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX2lub3RpZnlfYWRkX3dhdGNoIChfX05SX1NZU0NBTExfQkFTRSszMTcpCiAjZGVmaW5lIF9fTlJfaW5vdGlmeV9ybV93YXRjaCAoX19OUl9TWVNDQUxMX0JBU0UrMzE4KQogI2RlZmluZSBfX05SX21iaW5kIChfX05SX1NZU0NBTExfQkFTRSszMTkpCiAjZGVmaW5lIF9fTlJfZ2V0X21lbXBvbGljeSAoX19OUl9TWVNDQUxMX0JBU0UrMzIwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9zZXRfbWVtcG9saWN5IChfX05SX1NZU0NBTExfQkFTRSszMjEpCi0KKyNkZWZpbmUgX19OUl9vcGVuYXQgKF9fTlJfU1lTQ0FMTF9CQVNFKzMyMikKKyNkZWZpbmUgX19OUl9ta2RpcmF0IChfX05SX1NZU0NBTExfQkFTRSszMjMpCisjZGVmaW5lIF9fTlJfbWtub2RhdCAoX19OUl9TWVNDQUxMX0JBU0UrMzI0KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgX19OUl9mY2hvd25hdCAoX19OUl9TWVNDQUxMX0JBU0UrMzI1KQorI2RlZmluZSBfX05SX2Z1dGltZXNhdCAoX19OUl9TWVNDQUxMX0JBU0UrMzI2KQorI2RlZmluZSBfX05SX2ZzdGF0YXQ2NCAoX19OUl9TWVNDQUxMX0JBU0UrMzI3KQorI2RlZmluZSBfX05SX3VubGlua2F0IChfX05SX1NZU0NBTExfQkFTRSszMjgpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBfX05SX3JlbmFtZWF0IChfX05SX1NZU0NBTExfQkFTRSszMjkpCisjZGVmaW5lIF9fTlJfbGlua2F0IChfX05SX1NZU0NBTExfQkFTRSszMzApCisjZGVmaW5lIF9fTlJfc3ltbGlua2F0IChfX05SX1NZU0NBTExfQkFTRSszMzEpCisjZGVmaW5lIF9fTlJfcmVhZGxpbmthdCAoX19OUl9TWVNDQUxMX0JBU0UrMzMyKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgX19OUl9mY2htb2RhdCAoX19OUl9TWVNDQUxMX0JBU0UrMzMzKQorI2RlZmluZSBfX05SX2ZhY2Nlc3NhdCAoX19OUl9TWVNDQUxMX0JBU0UrMzM0KQorI2RlZmluZSBfX05SX3BzZWxlY3Q2IChfX05SX1NZU0NBTExfQkFTRSszMzUpCisjZGVmaW5lIF9fTlJfcHBvbGwgKF9fTlJfU1lTQ0FMTF9CQVNFKzMzNikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIF9fTlJfdW5zaGFyZSAoX19OUl9TWVNDQUxMX0JBU0UrMzM3KQorI2RlZmluZSBfX05SX3NldF9yb2J1c3RfbGlzdCAoX19OUl9TWVNDQUxMX0JBU0UrMzM4KQorI2RlZmluZSBfX05SX2dldF9yb2J1c3RfbGlzdCAoX19OUl9TWVNDQUxMX0JBU0UrMzM5KQorI2RlZmluZSBfX05SX3NwbGljZSAoX19OUl9TWVNDQUxMX0JBU0UrMzQwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgX19OUl9hcm1fc3luY19maWxlX3JhbmdlIChfX05SX1NZU0NBTExfQkFTRSszNDEpCisjZGVmaW5lIF9fTlJfc3luY19maWxlX3JhbmdlMiBfX05SX2FybV9zeW5jX2ZpbGVfcmFuZ2UKKyNkZWZpbmUgX19OUl90ZWUgKF9fTlJfU1lTQ0FMTF9CQVNFKzM0MikKKyNkZWZpbmUgX19OUl92bXNwbGljZSAoX19OUl9TWVNDQUxMX0JBU0UrMzQzKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgX19OUl9tb3ZlX3BhZ2VzIChfX05SX1NZU0NBTExfQkFTRSszNDQpCisjZGVmaW5lIF9fTlJfZ2V0Y3B1IChfX05SX1NZU0NBTExfQkFTRSszNDUpCisjZGVmaW5lIF9fTlJfZXBvbGxfcHdhaXQgKF9fTlJfU1lTQ0FMTF9CQVNFKzM0NikKKyNkZWZpbmUgX19OUl9rZXhlY19sb2FkIChfX05SX1NZU0NBTExfQkFTRSszNDcpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBfX05SX3V0aW1lbnNhdCAoX19OUl9TWVNDQUxMX0JBU0UrMzQ4KQorI2RlZmluZSBfX05SX3NpZ25hbGZkIChfX05SX1NZU0NBTExfQkFTRSszNDkpCisjZGVmaW5lIF9fTlJfdGltZXJmZF9jcmVhdGUgKF9fTlJfU1lTQ0FMTF9CQVNFKzM1MCkKKyNkZWZpbmUgX19OUl9ldmVudGZkIChfX05SX1NZU0NBTExfQkFTRSszNTEpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBfX05SX2ZhbGxvY2F0ZSAoX19OUl9TWVNDQUxMX0JBU0UrMzUyKQorI2RlZmluZSBfX05SX3RpbWVyZmRfc2V0dGltZSAoX19OUl9TWVNDQUxMX0JBU0UrMzUzKQorI2RlZmluZSBfX05SX3RpbWVyZmRfZ2V0dGltZSAoX19OUl9TWVNDQUxMX0JBU0UrMzU0KQorI2RlZmluZSBfX05SX3NpZ25hbGZkNCAoX19OUl9TWVNDQUxMX0JBU0UrMzU1KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgX19OUl9ldmVudGZkMiAoX19OUl9TWVNDQUxMX0JBU0UrMzU2KQorI2RlZmluZSBfX05SX2Vwb2xsX2NyZWF0ZTEgKF9fTlJfU1lTQ0FMTF9CQVNFKzM1NykKKyNkZWZpbmUgX19OUl9kdXAzIChfX05SX1NZU0NBTExfQkFTRSszNTgpCisjZGVmaW5lIF9fTlJfcGlwZTIgKF9fTlJfU1lTQ0FMTF9CQVNFKzM1OSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIF9fTlJfaW5vdGlmeV9pbml0MSAoX19OUl9TWVNDQUxMX0JBU0UrMzYwKQorI2RlZmluZSBfX05SX3ByZWFkdiAoX19OUl9TWVNDQUxMX0JBU0UrMzYxKQorI2RlZmluZSBfX05SX3B3cml0ZXYgKF9fTlJfU1lTQ0FMTF9CQVNFKzM2MikKKyNkZWZpbmUgX19OUl9ydF90Z3NpZ3F1ZXVlaW5mbyAoX19OUl9TWVNDQUxMX0JBU0UrMzYzKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgX19OUl9wZXJmX2V2ZW50X29wZW4gKF9fTlJfU1lTQ0FMTF9CQVNFKzM2NCkKKyNkZWZpbmUgX19OUl9yZWN2bW1zZyAoX19OUl9TWVNDQUxMX0JBU0UrMzY1KQorI2RlZmluZSBfX05SX2FjY2VwdDQgKF9fTlJfU1lTQ0FMTF9CQVNFKzM2NikKKyNkZWZpbmUgX19OUl9mYW5vdGlmeV9pbml0IChfX05SX1NZU0NBTExfQkFTRSszNjcpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBfX05SX2Zhbm90aWZ5X21hcmsgKF9fTlJfU1lTQ0FMTF9CQVNFKzM2OCkKKyNkZWZpbmUgX19OUl9wcmxpbWl0NjQgKF9fTlJfU1lTQ0FMTF9CQVNFKzM2OSkKKyNkZWZpbmUgX19OUl9uYW1lX3RvX2hhbmRsZV9hdCAoX19OUl9TWVNDQUxMX0JBU0UrMzcwKQorI2RlZmluZSBfX05SX29wZW5fYnlfaGFuZGxlX2F0IChfX05SX1NZU0NBTExfQkFTRSszNzEpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBfX05SX2Nsb2NrX2FkanRpbWUgKF9fTlJfU1lTQ0FMTF9CQVNFKzM3MikKKyNkZWZpbmUgX19OUl9zeW5jZnMgKF9fTlJfU1lTQ0FMTF9CQVNFKzM3MykKKyNkZWZpbmUgX19OUl9zZW5kbW1zZyAoX19OUl9TWVNDQUxMX0JBU0UrMzc0KQorI2RlZmluZSBfX05SX3NldG5zIChfX05SX1NZU0NBTExfQkFTRSszNzUpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBfX05SX3Byb2Nlc3Nfdm1fcmVhZHYgKF9fTlJfU1lTQ0FMTF9CQVNFKzM3NikKKyNkZWZpbmUgX19OUl9wcm9jZXNzX3ZtX3dyaXRldiAoX19OUl9TWVNDQUxMX0JBU0UrMzc3KQogI2RlZmluZSBfX0FSTV9OUl9CQVNFIChfX05SX1NZU0NBTExfQkFTRSsweDBmMDAwMCkKICNkZWZpbmUgX19BUk1fTlJfYnJlYWtwb2ludCAoX19BUk1fTlJfQkFTRSsxKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19BUk1fTlJfY2FjaGVmbHVzaCAoX19BUk1fTlJfQkFTRSsyKQogI2RlZmluZSBfX0FSTV9OUl91c3IyNiAoX19BUk1fTlJfQkFTRSszKQogI2RlZmluZSBfX0FSTV9OUl91c3IzMiAoX19BUk1fTlJfQkFTRSs0KQogI2RlZmluZSBfX0FSTV9OUl9zZXRfdGxzIChfX0FSTV9OUl9CQVNFKzUpCi0KLSNpZiBkZWZpbmVkKF9fQVJNX0VBQklfXykgJiYgIWRlZmluZWQoX19LRVJORUxfXykKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjaWZkZWYgX19BUk1fRUFCSV9fCiAjdW5kZWYgX19OUl90aW1lCiAjdW5kZWYgX19OUl91bW91bnQKICN1bmRlZiBfX05SX3N0aW1lCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI3VuZGVmIF9fTlJfYWxhcm0KICN1bmRlZiBfX05SX3V0aW1lCiAjdW5kZWYgX19OUl9nZXRybGltaXQKICN1bmRlZiBfX05SX3NlbGVjdAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICN1bmRlZiBfX05SX3JlYWRkaXIKICN1bmRlZiBfX05SX21tYXAKICN1bmRlZiBfX05SX3NvY2tldGNhbGwKICN1bmRlZiBfX05SX3N5c2NhbGwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjdW5kZWYgX19OUl9pcGMKICNlbmRpZgotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS91c2VyLmggYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vdXNlci5oCmluZGV4IGQwYmFlY2QuLjc2YzQwNzQgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS91c2VyLmgKKysrIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL3VzZXIuaApAQCAtNyw2NiArNyw3NCBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX0FSTV9VU0VSX0gKICNkZWZpbmUgX0FSTV9VU0VSX0gKLQogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IHVzZXJfZnAgewogIHN0cnVjdCBmcF9yZWcgewogIHVuc2lnbmVkIGludCBzaWduMToxOwogIHVuc2lnbmVkIGludCB1bnVzZWQ6MTU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGludCBzaWduMjoxOwogIHVuc2lnbmVkIGludCBleHBvbmVudDoxNDsKICB1bnNpZ25lZCBpbnQgajoxOwogIHVuc2lnbmVkIGludCBtYW50aXNzYTE6MzE7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGludCBtYW50aXNzYTA6MzI7CiAgfSBmcHJlZ3NbOF07CiAgdW5zaWduZWQgaW50IGZwc3I6MzI7CiAgdW5zaWduZWQgaW50IGZwY3I6MzI7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGNoYXIgZnR5cGVbOF07CiAgdW5zaWduZWQgaW50IGluaXRfZmxhZzsKIH07Ci0KIHN0cnVjdCB1c2VyewotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCBwdF9yZWdzIHJlZ3M7Ci0KICBpbnQgdV9mcHZhbGlkOwotCiAgdW5zaWduZWQgbG9uZyBpbnQgdV90c2l6ZTsKICB1bnNpZ25lZCBsb25nIGludCB1X2RzaXplOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBsb25nIGludCB1X3NzaXplOwogIHVuc2lnbmVkIGxvbmcgc3RhcnRfY29kZTsKICB1bnNpZ25lZCBsb25nIHN0YXJ0X3N0YWNrOwogIGxvbmcgaW50IHNpZ25hbDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgaW50IHJlc2VydmVkOwogIHN0cnVjdCBwdF9yZWdzICogdV9hcjA7Ci0KICB1bnNpZ25lZCBsb25nIG1hZ2ljOwogIGNoYXIgdV9jb21tWzMyXTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgaW50IHVfZGVidWdyZWdbOF07CiAgc3RydWN0IHVzZXJfZnAgdV9mcDsKICBzdHJ1Y3QgdXNlcl9mcF9zdHJ1Y3QgKiB1X2ZwMDsKLQogfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE5CUEcgUEFHRV9TSVpFCiAjZGVmaW5lIFVQQUdFUyAxCiAjZGVmaW5lIEhPU1RfVEVYVF9TVEFSVF9BRERSICh1LnN0YXJ0X2NvZGUpCiAjZGVmaW5lIEhPU1RfU1RBQ0tfRU5EX0FERFIgKHUuc3RhcnRfc3RhY2sgKyB1LnVfc3NpemUgKiBOQlBHKQotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IHVzZXJfdmZwIHsKICB1bnNpZ25lZCBsb25nIGxvbmcgZnByZWdzWzMyXTsKICB1bnNpZ25lZCBsb25nIGZwc2NyOwogfTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCB1c2VyX3ZmcF9leGMgewogIHVuc2lnbmVkIGxvbmcgZnBleGM7CiAgdW5zaWduZWQgbG9uZyBmcGluc3Q7CiAgdW5zaWduZWQgbG9uZyBmcGluc3QyOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07Ci0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL3ZnYS5oIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL3ZnYS5oCmluZGV4IDc4NzVkYmYuLmM5MzhkYTkgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS92Z2EuaAorKysgYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vdmdhLmgKQEAgLTcsMTcgKzcsMjIgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIEFTTUFSTV9WR0FfSAogI2RlZmluZSBBU01BUk1fVkdBX0gKLQogI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWR0FfTUFQX01FTSh4LHMpIChQQ0lNRU1fQkFTRSArICh4KSkKLQogI2RlZmluZSB2Z2FfcmVhZGIoeCkgKCooKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKil4KSkKICNkZWZpbmUgdmdhX3dyaXRlYih4LHkpICgqKCh2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopeSkgPSAoeCkpCi0KICNlbmRpZgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gtbWlwcy9hc20vYWRkcnNwYWNlLmggYi9saWJjL2tlcm5lbC9hcmNoLW1pcHMvYXNtL2FkZHJzcGFjZS5oCmluZGV4IDY5YWJiZDQuLmNiNzJlMmIgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2FyY2gtbWlwcy9hc20vYWRkcnNwYWNlLmgKKysrIGIvbGliYy9rZXJuZWwvYXJjaC1taXBzL2FzbS9hZGRyc3BhY2UuaApAQCAtMzgsOCArMzgsOCBAQAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX0FDQVNUNjRfCiAjZWxzZQotI2RlZmluZSBfQUNBU1QzMl8gKF9BVFlQRV8pKF9BVFlQRTMyXykgIAotI2RlZmluZSBfQUNBU1Q2NF8gKF9BVFlQRTY0XykgIAorI2RlZmluZSBfQUNBU1QzMl8gKF9BVFlQRV8pKF9BVFlQRTMyXykKKyNkZWZpbmUgX0FDQVNUNjRfIChfQVRZUEU2NF8pCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2VuZGlmCiAjZGVmaW5lIEtTRUdYKGEpICgoX0FDQVNUMzJfIChhKSkgJiAweGUwMDAwMDAwKQpAQCAtODMsMTAgKzgzLDEwIEBACiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBYS1BIWVNfVE9fUEhZUyhwKSAoKHApICYgVE9fUEhZU19NQVNLKQogI2RlZmluZSBQSFlTX1RPX1hLUEhZUyhjbSwgYSkgKF9DT05TVDY0XygweDgwMDAwMDAwMDAwMDAwMDApIHwgICAoX0NPTlNUNjRfKGNtKSA8PCA1OSkgfCAoYSkpCi0jZGVmaW5lIFRPX1BIWVNfTUFTSyBfQ09OU1Q2NF8oMHgwN2ZmZmZmZmZmZmZmZmZmKSAgCisjZGVmaW5lIFRPX1BIWVNfTUFTSyBfQ09OU1Q2NF8oMHgwN2ZmZmZmZmZmZmZmZmZmKQogI2RlZmluZSBDT01QQVRfSzFCQVNFMzIgX0NPTlNUNjRfKDB4ZmZmZmZmZmZhMDAwMDAwMCkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIFBIWVNfVE9fQ09NUEFUSzEoeCkgKCh4KSB8IENPTVBBVF9LMUJBU0UzMikgIAorI2RlZmluZSBQSFlTX1RPX0NPTVBBVEsxKHgpICgoeCkgfCBDT01QQVRfSzFCQVNFMzIpCiAjZGVmaW5lIEtETV9UT19QSFlTKHgpIChfQUNBU1Q2NF8gKHgpICYgVE9fUEhZU19NQVNLKQogI2RlZmluZSBQSFlTX1RPX0swKHgpIChfQUNBU1Q2NF8gKHgpIHwgQ0FDX0JBU0UpCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gtbWlwcy9hc20vYXNtbWFjcm8uaCBiL2xpYmMva2VybmVsL2FyY2gtbWlwcy9hc20vYXNtbWFjcm8uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTFlOTgwNC4uMDAwMDAwMAotLS0gYS9saWJjL2tlcm5lbC9hcmNoLW1pcHMvYXNtL2FzbW1hY3JvLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqKioKLSAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKLSAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCi0gKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKLSAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAotICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCi0gKioqCi0gKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCi0gKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCi0gKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5Ci0gKioqCi0gKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCi0gKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCi0gKioqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0jaWZuZGVmIF9BU01fQVNNTUFDUk9fSAotI2RlZmluZSBfQVNNX0FTTU1BQ1JPX0gKLSNpbmNsdWRlIDxhc20vaGF6YXJkcy5oPgotI2VuZGlmCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC1taXBzL2FzbS9iaXRvcHMuaCBiL2xpYmMva2VybmVsL2FyY2gtbWlwcy9hc20vYml0b3BzLmgKaW5kZXggNzQ5Y2FhYS4uMWUwOWU0MCAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvYXJjaC1taXBzL2FzbS9iaXRvcHMuaAorKysgYi9saWJjL2tlcm5lbC9hcmNoLW1pcHMvYXNtL2JpdG9wcy5oCkBAIC0yOCw3ICsyOCw3IEBACiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2luY2x1ZGUgPGFzbS9iYXJyaWVyLmg+CiAjaW5jbHVkZSA8YXNtL2J1Zy5oPgotI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4gIAorI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KICNpbmNsdWRlIDxhc20vY3B1LWZlYXR1cmVzLmg+CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2luY2x1ZGUgPGFzbS9zZ2lkZWZzLmg+CmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLW1pcHMvYXNtL2Jvb3RpbmZvLmggYi9saWJjL2tlcm5lbC9hcmNoLW1pcHMvYXNtL2Jvb3RpbmZvLmgKaW5kZXggOTczNjhlYS4uZGQ5Mjk2ZCAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvYXJjaC1taXBzL2FzbS9ib290aW5mby5oCisrKyBiL2xpYmMva2VybmVsL2FyY2gtbWlwcy9hc20vYm9vdGluZm8uaApAQCAtMjEsMzIgKzIxLDMyIEBACiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vc2V0dXAuaD4KIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIE1BQ0hfVU5LTk9XTiAwICAKKyNkZWZpbmUgTUFDSF9VTktOT1dOIDAKICNkZWZpbmUgTUFDSF9EU1VOS05PV04gMAotI2RlZmluZSBNQUNIX0RTMjMxMDAgMSAgCi0jZGVmaW5lIE1BQ0hfRFM1MTAwIDIgIAorI2RlZmluZSBNQUNIX0RTMjMxMDAgMQorI2RlZmluZSBNQUNIX0RTNTEwMCAyCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBNQUNIX0RTNTAwMF8yMDAgMyAgCi0jZGVmaW5lIE1BQ0hfRFM1MDAwXzFYWCA0ICAKLSNkZWZpbmUgTUFDSF9EUzUwMDBfWFggNSAgCi0jZGVmaW5lIE1BQ0hfRFM1MDAwXzJYMCA2ICAKKyNkZWZpbmUgTUFDSF9EUzUwMDBfMjAwIDMKKyNkZWZpbmUgTUFDSF9EUzUwMDBfMVhYIDQKKyNkZWZpbmUgTUFDSF9EUzUwMDBfWFggNQorI2RlZmluZSBNQUNIX0RTNTAwMF8yWDAgNgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgTUFDSF9EUzU0MDAgNyAgCi0jZGVmaW5lIE1BQ0hfRFM1NTAwIDggIAotI2RlZmluZSBNQUNIX0RTNTgwMCA5ICAKLSNkZWZpbmUgTUFDSF9EUzU5MDAgMTAgIAorI2RlZmluZSBNQUNIX0RTNTQwMCA3CisjZGVmaW5lIE1BQ0hfRFM1NTAwIDgKKyNkZWZpbmUgTUFDSF9EUzU4MDAgOQorI2RlZmluZSBNQUNIX0RTNTkwMCAxMAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgTUFDSF9NU1A0MjAwX0VWQUwgMCAgCi0jZGVmaW5lIE1BQ0hfTVNQNDIwMF9HVyAxICAKLSNkZWZpbmUgTUFDSF9NU1A0MjAwX0ZQR0EgMiAgCi0jZGVmaW5lIE1BQ0hfTVNQNzEyMF9FVkFMIDMgIAorI2RlZmluZSBNQUNIX01TUDQyMDBfRVZBTCAwCisjZGVmaW5lIE1BQ0hfTVNQNDIwMF9HVyAxCisjZGVmaW5lIE1BQ0hfTVNQNDIwMF9GUEdBIDIKKyNkZWZpbmUgTUFDSF9NU1A3MTIwX0VWQUwgMwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgTUFDSF9NU1A3MTIwX0dXIDQgIAotI2RlZmluZSBNQUNIX01TUDcxMjBfRlBHQSA1ICAKLSNkZWZpbmUgTUFDSF9NU1BfT1RIRVIgMjU1ICAKLSNkZWZpbmUgTUFDSF9NSUtST1RJS19SQjUzMiAwICAKKyNkZWZpbmUgTUFDSF9NU1A3MTIwX0dXIDQKKyNkZWZpbmUgTUFDSF9NU1A3MTIwX0ZQR0EgNQorI2RlZmluZSBNQUNIX01TUF9PVEhFUiAyNTUKKyNkZWZpbmUgTUFDSF9NSUtST1RJS19SQjUzMiAwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBNQUNIX01JS1JPVElLX1JCNTMyQSAxICAKKyNkZWZpbmUgTUFDSF9NSUtST1RJS19SQjUzMkEgMQogI2RlZmluZSBDTF9TSVpFIENPTU1BTkRfTElORV9TSVpFCiAjZGVmaW5lIEJPT1RfTUVNX01BUF9NQVggMzIKICNkZWZpbmUgQk9PVF9NRU1fUkFNIDEKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gtbWlwcy9hc20vY2FjaGVjdGwuaCBiL2xpYmMva2VybmVsL2FyY2gtbWlwcy9hc20vY2FjaGVjdGwuaAppbmRleCA0NThjMDBkLi42Y2M2ZjI4IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9hcmNoLW1pcHMvYXNtL2NhY2hlY3RsLmgKKysrIGIvbGliYy9rZXJuZWwvYXJjaC1taXBzL2FzbS9jYWNoZWN0bC5oCkBAIC0xOCwxMSArMTgsMTEgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfQVNNX0NBQ0hFQ1RMCiAjZGVmaW5lIF9BU01fQ0FDSEVDVEwKLSNkZWZpbmUgSUNBQ0hFICgxPDwwKSAgCi0jZGVmaW5lIERDQUNIRSAoMTw8MSkgIAorI2RlZmluZSBJQ0FDSEUgKDE8PDApCisjZGVmaW5lIERDQUNIRSAoMTw8MSkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIEJDQUNIRSAoSUNBQ0hFfERDQUNIRSkgIAotI2RlZmluZSBDQUNIRUFCTEUgMCAgCi0jZGVmaW5lIFVOQ0FDSEVBQkxFIDEgIAorI2RlZmluZSBCQ0FDSEUgKElDQUNIRXxEQ0FDSEUpCisjZGVmaW5lIENBQ0hFQUJMRSAwCisjZGVmaW5lIFVOQ0FDSEVBQkxFIDEKICNlbmRpZgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gtbWlwcy9hc20vY3B1LWZlYXR1cmVzLmggYi9saWJjL2tlcm5lbC9hcmNoLW1pcHMvYXNtL2NwdS1mZWF0dXJlcy5oCmluZGV4IGIzNjQyYzIuLjUwY2U1NzIgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2FyY2gtbWlwcy9hc20vY3B1LWZlYXR1cmVzLmgKKysrIGIvbGliYy9rZXJuZWwvYXJjaC1taXBzL2FzbS9jcHUtZmVhdHVyZXMuaApAQCAtMTYxLDI2ICsxNjEsNDUgQEAKICNkZWZpbmUgY3B1X2hhc191c2VybG9jYWwgKGNwdV9kYXRhWzBdLm9wdGlvbnMgJiBNSVBTX0NQVV9VTFJJKQogI2VuZGlmCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2lmbmRlZiBjcHVfaGFzX25vZnB1ZXgKKyNkZWZpbmUgY3B1X2hhc19ub2ZwdWV4IChjcHVfZGF0YVswXS5vcHRpb25zICYgTUlQU19DUFVfTk9GUFVFWCkKKyNlbmRpZgorI2lmbmRlZiBjcHVfaGFzXzY0Yml0cworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgY3B1X2hhc182NGJpdHMgKGNwdV9kYXRhWzBdLmlzYV9sZXZlbCAmIE1JUFNfQ1BVX0lTQV82NEJJVCkKKyNlbmRpZgorI2lmbmRlZiBjcHVfaGFzXzY0Yml0X3plcm9fcmVnCisjZGVmaW5lIGNwdV9oYXNfNjRiaXRfemVyb19yZWcgKGNwdV9kYXRhWzBdLmlzYV9sZXZlbCAmIE1JUFNfQ1BVX0lTQV82NEJJVCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZW5kaWYKKyNpZm5kZWYgY3B1X2hhc182NGJpdF9ncF9yZWdzCisjZGVmaW5lIGNwdV9oYXNfNjRiaXRfZ3BfcmVncyAwCisjZW5kaWYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjaWZuZGVmIGNwdV9oYXNfNjRiaXRfYWRkcmVzc2VzCisjZGVmaW5lIGNwdV9oYXNfNjRiaXRfYWRkcmVzc2VzIDAKKyNlbmRpZgogI2lmbmRlZiBjcHVfaGFzX3ZpbnQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIGNwdV9oYXNfdmludCAwCiAjZW5kaWYKICNpZm5kZWYgY3B1X2hhc192ZWljCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBjcHVfaGFzX3ZlaWMgMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlbmRpZgogI2lmbmRlZiBjcHVfaGFzX2luY2x1c2l2ZV9wY2FjaGVzCiAjZGVmaW5lIGNwdV9oYXNfaW5jbHVzaXZlX3BjYWNoZXMgKGNwdV9kYXRhWzBdLm9wdGlvbnMgJiBNSVBTX0NQVV9JTkNMVVNJVkVfQ0FDSEVTKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlbmRpZgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNpZm5kZWYgY3B1X2RjYWNoZV9saW5lX3NpemUKICNkZWZpbmUgY3B1X2RjYWNoZV9saW5lX3NpemUoKSBjcHVfZGF0YVswXS5kY2FjaGUubGluZXN6CiAjZW5kaWYKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjaWZuZGVmIGNwdV9pY2FjaGVfbGluZV9zaXplCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBjcHVfaWNhY2hlX2xpbmVfc2l6ZSgpIGNwdV9kYXRhWzBdLmljYWNoZS5saW5lc3oKICNlbmRpZgogI2lmbmRlZiBjcHVfc2NhY2hlX2xpbmVfc2l6ZQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgY3B1X3NjYWNoZV9saW5lX3NpemUoKSBjcHVfZGF0YVswXS5zY2FjaGUubGluZXN6CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2VuZGlmCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gtbWlwcy9hc20vY3B1LWluZm8uaCBiL2xpYmMva2VybmVsL2FyY2gtbWlwcy9hc20vY3B1LWluZm8uaAppbmRleCBkOGJkMTIyLi5mMmZmODVhIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9hcmNoLW1pcHMvYXNtL2NwdS1pbmZvLmgKKysrIGIvbGliYy9rZXJuZWwvYXJjaC1taXBzL2FzbS9jcHUtaW5mby5oCkBAIC0zMSwxMiArMzEsMTIgQEAKIH07CiAjZGVmaW5lIE1JUFNfQ0FDSEVfTk9UX1BSRVNFTlQgMHgwMDAwMDAwMQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgTUlQU19DQUNIRV9WVEFHIDB4MDAwMDAwMDIgIAotI2RlZmluZSBNSVBTX0NBQ0hFX0FMSUFTRVMgMHgwMDAwMDAwNCAgCi0jZGVmaW5lIE1JUFNfQ0FDSEVfSUNfRl9EQyAweDAwMDAwMDA4ICAKLSNkZWZpbmUgTUlQU19JQ19TTk9PUFNfUkVNT1RFIDB4MDAwMDAwMTAgIAorI2RlZmluZSBNSVBTX0NBQ0hFX1ZUQUcgMHgwMDAwMDAwMgorI2RlZmluZSBNSVBTX0NBQ0hFX0FMSUFTRVMgMHgwMDAwMDAwNAorI2RlZmluZSBNSVBTX0NBQ0hFX0lDX0ZfREMgMHgwMDAwMDAwOAorI2RlZmluZSBNSVBTX0lDX1NOT09QU19SRU1PVEUgMHgwMDAwMDAxMAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgTUlQU19DQUNIRV9QSU5ERVggMHgwMDAwMDAyMCAgCisjZGVmaW5lIE1JUFNfQ0FDSEVfUElOREVYIDB4MDAwMDAwMjAKIHN0cnVjdCBjcHVpbmZvX21pcHMgewogIHVuc2lnbmVkIGxvbmcgdWRlbGF5X3ZhbDsKICB1bnNpZ25lZCBsb25nIGFzaWRfY2FjaGU7CmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLW1pcHMvYXNtL2NwdS5oIGIvbGliYy9rZXJuZWwvYXJjaC1taXBzL2FzbS9jcHUuaAppbmRleCA3YjRiMmQzLi5jYmQ0MTQ3IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9hcmNoLW1pcHMvYXNtL2NwdS5oCisrKyBiL2xpYmMva2VybmVsL2FyY2gtbWlwcy9hc20vY3B1LmgKQEAgLTM0LDkgKzM0LDkgQEAKICNkZWZpbmUgUFJJRF9JTVBfUjIwMDAgMHgwMTAwCiAjZGVmaW5lIFBSSURfSU1QX0FVMV9SRVYxIDB4MDEwMAogI2RlZmluZSBQUklEX0lNUF9BVTFfUkVWMiAweDAyMDAKLSNkZWZpbmUgUFJJRF9JTVBfUjMwMDAgMHgwMjAwICAKKyNkZWZpbmUgUFJJRF9JTVBfUjMwMDAgMHgwMjAwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBQUklEX0lNUF9SNjAwMCAweDAzMDAgIAorI2RlZmluZSBQUklEX0lNUF9SNjAwMCAweDAzMDAKICNkZWZpbmUgUFJJRF9JTVBfUjQwMDAgMHgwNDAwCiAjZGVmaW5lIFBSSURfSU1QX1I2MDAwQSAweDA2MDAKICNkZWZpbmUgUFJJRF9JTVBfUjEwMDAwIDB4MDkwMApAQCAtNTMsNyArNTMsNyBAQAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUFJJRF9JTVBfVFgzOSAweDIyMDAKICNkZWZpbmUgUFJJRF9JTVBfUjQ2NDAgMHgyMjAwCi0jZGVmaW5lIFBSSURfSU1QX1I0NjUwIDB4MjIwMCAgCisjZGVmaW5lIFBSSURfSU1QX1I0NjUwIDB4MjIwMAogI2RlZmluZSBQUklEX0lNUF9SNTAwMCAweDIzMDAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBSSURfSU1QX1RYNDkgMHgyZDAwCkBAIC02MSw3ICs2MSw3IEBACiAjZGVmaW5lIFBSSURfSU1QX01BR0lDIDB4MjUwMAogI2RlZmluZSBQUklEX0lNUF9STTcwMDAgMHgyNzAwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBQUklEX0lNUF9ORVZBREEgMHgyODAwICAKKyNkZWZpbmUgUFJJRF9JTVBfTkVWQURBIDB4MjgwMAogI2RlZmluZSBQUklEX0lNUF9STTkwMDAgMHgzNDAwCiAjZGVmaW5lIFBSSURfSU1QX0xPT05HU09OMSAweDQyMDAKICNkZWZpbmUgUFJJRF9JTVBfUjU0MzIgMHg1NDAwCkBAIC0xMDgsMTEgKzEwOCwxMSBAQAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUFJJRF9SRVZfVFgzOTI3IDB4MDA0MAogI2RlZmluZSBQUklEX1JFVl9WUjQxMTEgMHgwMDUwCi0jZGVmaW5lIFBSSURfUkVWX1ZSNDE4MSAweDAwNTAgIAorI2RlZmluZSBQUklEX1JFVl9WUjQxODEgMHgwMDUwCiAjZGVmaW5lIFBSSURfUkVWX1ZSNDEyMSAweDAwNjAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBSSURfUkVWX1ZSNDEyMiAweDAwNzAKLSNkZWZpbmUgUFJJRF9SRVZfVlI0MTgxQSAweDAwNzAgIAorI2RlZmluZSBQUklEX1JFVl9WUjQxODFBIDB4MDA3MAogI2RlZmluZSBQUklEX1JFVl9WUjQxMzAgMHgwMDgwCiAjZGVmaW5lIFBSSURfUkVWXzM0S19WMV8wXzIgMHgwMDIyCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwpAQCAtMTU3LDM5ICsxNTcsMzkgQEAKICNkZWZpbmUgTUlQU19DUFVfSVNBXzMyQklUIChNSVBTX0NQVV9JU0FfSSB8IE1JUFNfQ1BVX0lTQV9JSSB8ICAgTUlQU19DUFVfSVNBX00zMlIxIHwgTUlQU19DUFVfSVNBX00zMlIyICkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1JUFNfQ1BVX0lTQV82NEJJVCAoTUlQU19DUFVfSVNBX0lJSSB8IE1JUFNfQ1BVX0lTQV9JViB8ICAgTUlQU19DUFVfSVNBX1YgfCBNSVBTX0NQVV9JU0FfTTY0UjEgfCBNSVBTX0NQVV9JU0FfTTY0UjIpCi0jZGVmaW5lIE1JUFNfQ1BVX1RMQiAweDAwMDAwMDAxICAKLSNkZWZpbmUgTUlQU19DUFVfNEtFWCAweDAwMDAwMDAyICAKLSNkZWZpbmUgTUlQU19DUFVfM0tfQ0FDSEUgMHgwMDAwMDAwNCAgCisjZGVmaW5lIE1JUFNfQ1BVX1RMQiAweDAwMDAwMDAxCisjZGVmaW5lIE1JUFNfQ1BVXzRLRVggMHgwMDAwMDAwMgorI2RlZmluZSBNSVBTX0NQVV8zS19DQUNIRSAweDAwMDAwMDA0CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBNSVBTX0NQVV80S19DQUNIRSAweDAwMDAwMDA4ICAKLSNkZWZpbmUgTUlQU19DUFVfVFgzOV9DQUNIRSAweDAwMDAwMDEwICAKLSNkZWZpbmUgTUlQU19DUFVfRlBVIDB4MDAwMDAwMjAgIAotI2RlZmluZSBNSVBTX0NQVV8zMkZQUiAweDAwMDAwMDQwICAKKyNkZWZpbmUgTUlQU19DUFVfNEtfQ0FDSEUgMHgwMDAwMDAwOAorI2RlZmluZSBNSVBTX0NQVV9UWDM5X0NBQ0hFIDB4MDAwMDAwMTAKKyNkZWZpbmUgTUlQU19DUFVfRlBVIDB4MDAwMDAwMjAKKyNkZWZpbmUgTUlQU19DUFVfMzJGUFIgMHgwMDAwMDA0MAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgTUlQU19DUFVfQ09VTlRFUiAweDAwMDAwMDgwICAKLSNkZWZpbmUgTUlQU19DUFVfV0FUQ0ggMHgwMDAwMDEwMCAgCi0jZGVmaW5lIE1JUFNfQ1BVX0RJVkVDIDB4MDAwMDAyMDAgIAotI2RlZmluZSBNSVBTX0NQVV9WQ0UgMHgwMDAwMDQwMCAgCisjZGVmaW5lIE1JUFNfQ1BVX0NPVU5URVIgMHgwMDAwMDA4MAorI2RlZmluZSBNSVBTX0NQVV9XQVRDSCAweDAwMDAwMTAwCisjZGVmaW5lIE1JUFNfQ1BVX0RJVkVDIDB4MDAwMDAyMDAKKyNkZWZpbmUgTUlQU19DUFVfVkNFIDB4MDAwMDA0MDAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIE1JUFNfQ1BVX0NBQ0hFX0NERVhfUCAweDAwMDAwODAwICAKLSNkZWZpbmUgTUlQU19DUFVfQ0FDSEVfQ0RFWF9TIDB4MDAwMDEwMDAgIAotI2RlZmluZSBNSVBTX0NQVV9NQ0hFQ0sgMHgwMDAwMjAwMCAgCi0jZGVmaW5lIE1JUFNfQ1BVX0VKVEFHIDB4MDAwMDQwMDAgIAorI2RlZmluZSBNSVBTX0NQVV9DQUNIRV9DREVYX1AgMHgwMDAwMDgwMAorI2RlZmluZSBNSVBTX0NQVV9DQUNIRV9DREVYX1MgMHgwMDAwMTAwMAorI2RlZmluZSBNSVBTX0NQVV9NQ0hFQ0sgMHgwMDAwMjAwMAorI2RlZmluZSBNSVBTX0NQVV9FSlRBRyAweDAwMDA0MDAwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBNSVBTX0NQVV9OT0ZQVUVYIDB4MDAwMDgwMDAgIAotI2RlZmluZSBNSVBTX0NQVV9MTFNDIDB4MDAwMTAwMDAgIAotI2RlZmluZSBNSVBTX0NQVV9JTkNMVVNJVkVfQ0FDSEVTIDB4MDAwMjAwMDAgIAotI2RlZmluZSBNSVBTX0NQVV9QUkVGRVRDSCAweDAwMDQwMDAwICAKKyNkZWZpbmUgTUlQU19DUFVfTk9GUFVFWCAweDAwMDA4MDAwCisjZGVmaW5lIE1JUFNfQ1BVX0xMU0MgMHgwMDAxMDAwMAorI2RlZmluZSBNSVBTX0NQVV9JTkNMVVNJVkVfQ0FDSEVTIDB4MDAwMjAwMDAKKyNkZWZpbmUgTUlQU19DUFVfUFJFRkVUQ0ggMHgwMDA0MDAwMAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgTUlQU19DUFVfVklOVCAweDAwMDgwMDAwICAKLSNkZWZpbmUgTUlQU19DUFVfVkVJQyAweDAwMTAwMDAwICAKLSNkZWZpbmUgTUlQU19DUFVfVUxSSSAweDAwMjAwMDAwICAKLSNkZWZpbmUgTUlQU19BU0VfTUlQUzE2IDB4MDAwMDAwMDEgIAorI2RlZmluZSBNSVBTX0NQVV9WSU5UIDB4MDAwODAwMDAKKyNkZWZpbmUgTUlQU19DUFVfVkVJQyAweDAwMTAwMDAwCisjZGVmaW5lIE1JUFNfQ1BVX1VMUkkgMHgwMDIwMDAwMAorI2RlZmluZSBNSVBTX0FTRV9NSVBTMTYgMHgwMDAwMDAwMQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgTUlQU19BU0VfTURNWCAweDAwMDAwMDAyICAKLSNkZWZpbmUgTUlQU19BU0VfTUlQUzNEIDB4MDAwMDAwMDQgIAotI2RlZmluZSBNSVBTX0FTRV9TTUFSVE1JUFMgMHgwMDAwMDAwOCAgCi0jZGVmaW5lIE1JUFNfQVNFX0RTUCAweDAwMDAwMDEwICAKKyNkZWZpbmUgTUlQU19BU0VfTURNWCAweDAwMDAwMDAyCisjZGVmaW5lIE1JUFNfQVNFX01JUFMzRCAweDAwMDAwMDA0CisjZGVmaW5lIE1JUFNfQVNFX1NNQVJUTUlQUyAweDAwMDAwMDA4CisjZGVmaW5lIE1JUFNfQVNFX0RTUCAweDAwMDAwMDEwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBNSVBTX0FTRV9NSVBTTVQgMHgwMDAwMDAyMCAgCisjZGVmaW5lIE1JUFNfQVNFX01JUFNNVCAweDAwMDAwMDIwCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gtbWlwcy9hc20vZGVjL2VjYy5oIGIvbGliYy9rZXJuZWwvYXJjaC1taXBzL2FzbS9kZWMvZWNjLmgKaW5kZXggNTEzNDJhNS4uOGZlMzBhNiAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvYXJjaC1taXBzL2FzbS9kZWMvZWNjLmgKKysrIGIvbGliYy9rZXJuZWwvYXJjaC1taXBzL2FzbS9kZWMvZWNjLmgKQEAgLTE4LDIzICsxOCwyMyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9fQVNNX01JUFNfREVDX0VDQ19ICiAjZGVmaW5lIF9fQVNNX01JUFNfREVDX0VDQ19ICi0jZGVmaW5lIEtOMFhfRUFSX1ZBTElEICgxPDwzMSkgIAotI2RlZmluZSBLTjBYX0VBUl9DUFUgKDE8PDMwKSAgCisjZGVmaW5lIEtOMFhfRUFSX1ZBTElEICgxPDwzMSkKKyNkZWZpbmUgS04wWF9FQVJfQ1BVICgxPDwzMCkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIEtOMFhfRUFSX1dSSVRFICgxPDwyOSkgIAotI2RlZmluZSBLTjBYX0VBUl9FQ0NFUlIgKDE8PDI4KSAgCi0jZGVmaW5lIEtOMFhfRUFSX1JFU18yNyAoMTw8MjcpICAKLSNkZWZpbmUgS04wWF9FQVJfQUREUkVTUyAoMHg3ZmZmZmZmPDwwKSAgCisjZGVmaW5lIEtOMFhfRUFSX1dSSVRFICgxPDwyOSkKKyNkZWZpbmUgS04wWF9FQVJfRUNDRVJSICgxPDwyOCkKKyNkZWZpbmUgS04wWF9FQVJfUkVTXzI3ICgxPDwyNykKKyNkZWZpbmUgS04wWF9FQVJfQUREUkVTUyAoMHg3ZmZmZmZmPDwwKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgS04wWF9FU1JfVkxESEkgKDE8PDMxKSAgCi0jZGVmaW5lIEtOMFhfRVNSX0NIS0hJICgweDdmPDwyNCkgIAotI2RlZmluZSBLTjBYX0VTUl9TTkdISSAoMTw8MjMpICAKLSNkZWZpbmUgS04wWF9FU1JfU1lOSEkgKDB4N2Y8PDE2KSAgCisjZGVmaW5lIEtOMFhfRVNSX1ZMREhJICgxPDwzMSkKKyNkZWZpbmUgS04wWF9FU1JfQ0hLSEkgKDB4N2Y8PDI0KQorI2RlZmluZSBLTjBYX0VTUl9TTkdISSAoMTw8MjMpCisjZGVmaW5lIEtOMFhfRVNSX1NZTkhJICgweDdmPDwxNikKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIEtOMFhfRVNSX1ZMRExPICgxPDwxNSkgIAotI2RlZmluZSBLTjBYX0VTUl9DSEtMTyAoMHg3Zjw8OCkgIAotI2RlZmluZSBLTjBYX0VTUl9TTkdMTyAoMTw8NykgIAotI2RlZmluZSBLTjBYX0VTUl9TWU5MTyAoMHg3Zjw8MCkgIAorI2RlZmluZSBLTjBYX0VTUl9WTERMTyAoMTw8MTUpCisjZGVmaW5lIEtOMFhfRVNSX0NIS0xPICgweDdmPDw4KQorI2RlZmluZSBLTjBYX0VTUl9TTkdMTyAoMTw8NykKKyNkZWZpbmUgS04wWF9FU1JfU1lOTE8gKDB4N2Y8PDApCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2lmbmRlZiBfX0FTU0VNQkxZX18KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gtbWlwcy9hc20vZGVjL2lvYXNpY19hZGRycy5oIGIvbGliYy9rZXJuZWwvYXJjaC1taXBzL2FzbS9kZWMvaW9hc2ljX2FkZHJzLmgKaW5kZXggOTk3NzRhMS4uNzI0OWYyZCAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvYXJjaC1taXBzL2FzbS9kZWMvaW9hc2ljX2FkZHJzLmgKKysrIGIvbGliYy9rZXJuZWwvYXJjaC1taXBzL2FzbS9kZWMvaW9hc2ljX2FkZHJzLmgKQEAgLTE5LDEwNiArMTksMTA2IEBACiAjaWZuZGVmIF9fQVNNX01JUFNfREVDX0lPQVNJQ19BRERSU19ICiAjZGVmaW5lIF9fQVNNX01JUFNfREVDX0lPQVNJQ19BRERSU19ICiAjZGVmaW5lIElPQVNJQ19TTE9UX1NJWkUgMHgwMDA0MDAwMAotI2RlZmluZSBJT0FTSUNfU1lTX1JPTSAoMCpJT0FTSUNfU0xPVF9TSVpFKSAgCisjZGVmaW5lIElPQVNJQ19TWVNfUk9NICgwKklPQVNJQ19TTE9UX1NJWkUpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBJT0FTSUNfSU9DVEwgKDEqSU9BU0lDX1NMT1RfU0laRSkgIAotI2RlZmluZSBJT0FTSUNfRVNBUiAoMipJT0FTSUNfU0xPVF9TSVpFKSAgCi0jZGVmaW5lIElPQVNJQ19MQU5DRSAoMypJT0FTSUNfU0xPVF9TSVpFKSAgCi0jZGVmaW5lIElPQVNJQ19TQ0MwICg0KklPQVNJQ19TTE9UX1NJWkUpICAKKyNkZWZpbmUgSU9BU0lDX0lPQ1RMICgxKklPQVNJQ19TTE9UX1NJWkUpCisjZGVmaW5lIElPQVNJQ19FU0FSICgyKklPQVNJQ19TTE9UX1NJWkUpCisjZGVmaW5lIElPQVNJQ19MQU5DRSAoMypJT0FTSUNfU0xPVF9TSVpFKQorI2RlZmluZSBJT0FTSUNfU0NDMCAoNCpJT0FTSUNfU0xPVF9TSVpFKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgSU9BU0lDX1ZEQUNfSEkgKDUqSU9BU0lDX1NMT1RfU0laRSkgIAotI2RlZmluZSBJT0FTSUNfU0NDMSAoNipJT0FTSUNfU0xPVF9TSVpFKSAgCi0jZGVmaW5lIElPQVNJQ19WREFDX0xPICg3KklPQVNJQ19TTE9UX1NJWkUpICAKLSNkZWZpbmUgSU9BU0lDX1RPWSAoOCpJT0FTSUNfU0xPVF9TSVpFKSAgCisjZGVmaW5lIElPQVNJQ19WREFDX0hJICg1KklPQVNJQ19TTE9UX1NJWkUpCisjZGVmaW5lIElPQVNJQ19TQ0MxICg2KklPQVNJQ19TTE9UX1NJWkUpCisjZGVmaW5lIElPQVNJQ19WREFDX0xPICg3KklPQVNJQ19TTE9UX1NJWkUpCisjZGVmaW5lIElPQVNJQ19UT1kgKDgqSU9BU0lDX1NMT1RfU0laRSkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIElPQVNJQ19JU0ROICg5KklPQVNJQ19TTE9UX1NJWkUpICAKLSNkZWZpbmUgSU9BU0lDX0VSUkFERFIgKDkqSU9BU0lDX1NMT1RfU0laRSkgIAotI2RlZmluZSBJT0FTSUNfQ0hLU1lOICgxMCpJT0FTSUNfU0xPVF9TSVpFKSAgCi0jZGVmaW5lIElPQVNJQ19BQ0NfQlVTICgxMCpJT0FTSUNfU0xPVF9TSVpFKSAgCisjZGVmaW5lIElPQVNJQ19JU0ROICg5KklPQVNJQ19TTE9UX1NJWkUpCisjZGVmaW5lIElPQVNJQ19FUlJBRERSICg5KklPQVNJQ19TTE9UX1NJWkUpCisjZGVmaW5lIElPQVNJQ19DSEtTWU4gKDEwKklPQVNJQ19TTE9UX1NJWkUpCisjZGVmaW5lIElPQVNJQ19BQ0NfQlVTICgxMCpJT0FTSUNfU0xPVF9TSVpFKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgSU9BU0lDX01DUiAoMTEqSU9BU0lDX1NMT1RfU0laRSkgIAotI2RlZmluZSBJT0FTSUNfRkxPUFBZICgxMSpJT0FTSUNfU0xPVF9TSVpFKSAgCi0jZGVmaW5lIElPQVNJQ19TQ1NJICgxMipJT0FTSUNfU0xPVF9TSVpFKSAgCi0jZGVmaW5lIElPQVNJQ19GRENfRE1BICgxMypJT0FTSUNfU0xPVF9TSVpFKSAgCisjZGVmaW5lIElPQVNJQ19NQ1IgKDExKklPQVNJQ19TTE9UX1NJWkUpCisjZGVmaW5lIElPQVNJQ19GTE9QUFkgKDExKklPQVNJQ19TTE9UX1NJWkUpCisjZGVmaW5lIElPQVNJQ19TQ1NJICgxMipJT0FTSUNfU0xPVF9TSVpFKQorI2RlZmluZSBJT0FTSUNfRkRDX0RNQSAoMTMqSU9BU0lDX1NMT1RfU0laRSkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIElPQVNJQ19TQ1NJX0RNQSAoMTQqSU9BU0lDX1NMT1RfU0laRSkgIAotI2RlZmluZSBJT0FTSUNfUkVTXzE1ICgxNSpJT0FTSUNfU0xPVF9TSVpFKSAgCi0jZGVmaW5lIElPX1JFR19TQ1NJX0RNQV9QIDB4MDAgIAotI2RlZmluZSBJT19SRUdfU0NTSV9ETUFfQlAgMHgxMCAgCisjZGVmaW5lIElPQVNJQ19TQ1NJX0RNQSAoMTQqSU9BU0lDX1NMT1RfU0laRSkKKyNkZWZpbmUgSU9BU0lDX1JFU18xNSAoMTUqSU9BU0lDX1NMT1RfU0laRSkKKyNkZWZpbmUgSU9fUkVHX1NDU0lfRE1BX1AgMHgwMAorI2RlZmluZSBJT19SRUdfU0NTSV9ETUFfQlAgMHgxMAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgSU9fUkVHX0xBTkNFX0RNQV9QIDB4MjAgIAotI2RlZmluZSBJT19SRUdfU0NDMEFfVF9ETUFfUCAweDMwICAKLSNkZWZpbmUgSU9fUkVHX1NDQzBBX1JfRE1BX1AgMHg0MCAgCi0jZGVmaW5lIElPX1JFR19TQ0MxQV9UX0RNQV9QIDB4NTAgIAorI2RlZmluZSBJT19SRUdfTEFOQ0VfRE1BX1AgMHgyMAorI2RlZmluZSBJT19SRUdfU0NDMEFfVF9ETUFfUCAweDMwCisjZGVmaW5lIElPX1JFR19TQ0MwQV9SX0RNQV9QIDB4NDAKKyNkZWZpbmUgSU9fUkVHX1NDQzFBX1RfRE1BX1AgMHg1MAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgSU9fUkVHX1NDQzFBX1JfRE1BX1AgMHg2MCAgCi0jZGVmaW5lIElPX1JFR19BQl9UX0RNQV9QIDB4NTAgIAotI2RlZmluZSBJT19SRUdfQUJfUl9ETUFfUCAweDYwICAKLSNkZWZpbmUgSU9fUkVHX0ZMT1BQWV9ETUFfUCAweDcwICAKKyNkZWZpbmUgSU9fUkVHX1NDQzFBX1JfRE1BX1AgMHg2MAorI2RlZmluZSBJT19SRUdfQUJfVF9ETUFfUCAweDUwCisjZGVmaW5lIElPX1JFR19BQl9SX0RNQV9QIDB4NjAKKyNkZWZpbmUgSU9fUkVHX0ZMT1BQWV9ETUFfUCAweDcwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBJT19SRUdfSVNETl9UX0RNQV9QIDB4ODAgIAotI2RlZmluZSBJT19SRUdfSVNETl9UX0RNQV9CUCAweDkwICAKLSNkZWZpbmUgSU9fUkVHX0lTRE5fUl9ETUFfUCAweGEwICAKLSNkZWZpbmUgSU9fUkVHX0lTRE5fUl9ETUFfQlAgMHhiMCAgCisjZGVmaW5lIElPX1JFR19JU0ROX1RfRE1BX1AgMHg4MAorI2RlZmluZSBJT19SRUdfSVNETl9UX0RNQV9CUCAweDkwCisjZGVmaW5lIElPX1JFR19JU0ROX1JfRE1BX1AgMHhhMAorI2RlZmluZSBJT19SRUdfSVNETl9SX0RNQV9CUCAweGIwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBJT19SRUdfREFUQV8wIDB4YzAgIAotI2RlZmluZSBJT19SRUdfREFUQV8xIDB4ZDAgIAotI2RlZmluZSBJT19SRUdfREFUQV8yIDB4ZTAgIAotI2RlZmluZSBJT19SRUdfREFUQV8zIDB4ZjAgIAorI2RlZmluZSBJT19SRUdfREFUQV8wIDB4YzAKKyNkZWZpbmUgSU9fUkVHX0RBVEFfMSAweGQwCisjZGVmaW5lIElPX1JFR19EQVRBXzIgMHhlMAorI2RlZmluZSBJT19SRUdfREFUQV8zIDB4ZjAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIElPX1JFR19TU1IgMHgxMDAgIAotI2RlZmluZSBJT19SRUdfU0lSIDB4MTEwICAKLSNkZWZpbmUgSU9fUkVHX1NJTVIgMHgxMjAgIAotI2RlZmluZSBJT19SRUdfU0FSIDB4MTMwICAKKyNkZWZpbmUgSU9fUkVHX1NTUiAweDEwMAorI2RlZmluZSBJT19SRUdfU0lSIDB4MTEwCisjZGVmaW5lIElPX1JFR19TSU1SIDB4MTIwCisjZGVmaW5lIElPX1JFR19TQVIgMHgxMzAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIElPX1JFR19JU0ROX1RfREFUQSAweDE0MCAgCi0jZGVmaW5lIElPX1JFR19JU0ROX1JfREFUQSAweDE1MCAgCi0jZGVmaW5lIElPX1JFR19MQU5DRV9TTE9UIDB4MTYwICAKLSNkZWZpbmUgSU9fUkVHX1NDU0lfU0xPVCAweDE3MCAgCisjZGVmaW5lIElPX1JFR19JU0ROX1RfREFUQSAweDE0MAorI2RlZmluZSBJT19SRUdfSVNETl9SX0RBVEEgMHgxNTAKKyNkZWZpbmUgSU9fUkVHX0xBTkNFX1NMT1QgMHgxNjAKKyNkZWZpbmUgSU9fUkVHX1NDU0lfU0xPVCAweDE3MAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgSU9fUkVHX1NDQzBBX1NMT1QgMHgxODAgIAotI2RlZmluZSBJT19SRUdfU0NDMUFfU0xPVCAweDE5MCAgCi0jZGVmaW5lIElPX1JFR19BQl9TTE9UIDB4MTkwICAKLSNkZWZpbmUgSU9fUkVHX0ZMT1BQWV9TTE9UIDB4MWEwICAKKyNkZWZpbmUgSU9fUkVHX1NDQzBBX1NMT1QgMHgxODAKKyNkZWZpbmUgSU9fUkVHX1NDQzFBX1NMT1QgMHgxOTAKKyNkZWZpbmUgSU9fUkVHX0FCX1NMT1QgMHgxOTAKKyNkZWZpbmUgSU9fUkVHX0ZMT1BQWV9TTE9UIDB4MWEwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBJT19SRUdfU0NTSV9TQ1IgMHgxYjAgIAotI2RlZmluZSBJT19SRUdfU0NTSV9TRFIwIDB4MWMwICAKLSNkZWZpbmUgSU9fUkVHX1NDU0lfU0RSMSAweDFkMCAgCi0jZGVmaW5lIElPX1JFR19GQ1RSIDB4MWUwICAKKyNkZWZpbmUgSU9fUkVHX1NDU0lfU0NSIDB4MWIwCisjZGVmaW5lIElPX1JFR19TQ1NJX1NEUjAgMHgxYzAKKyNkZWZpbmUgSU9fUkVHX1NDU0lfU0RSMSAweDFkMAorI2RlZmluZSBJT19SRUdfRkNUUiAweDFlMAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgSU9fUkVHX1JFU18zMSAweDFmMCAgCi0jZGVmaW5lIElPX1NTUl9TQ0MwQV9UWF9ETUFfRU4gKDE8PDMxKSAgCi0jZGVmaW5lIElPX1NTUl9TQ0MwQV9SWF9ETUFfRU4gKDE8PDMwKSAgCi0jZGVmaW5lIElPX1NTUl9SRVNfMjcgKDE8PDI3KSAgCisjZGVmaW5lIElPX1JFR19SRVNfMzEgMHgxZjAKKyNkZWZpbmUgSU9fU1NSX1NDQzBBX1RYX0RNQV9FTiAoMTw8MzEpCisjZGVmaW5lIElPX1NTUl9TQ0MwQV9SWF9ETUFfRU4gKDE8PDMwKQorI2RlZmluZSBJT19TU1JfUkVTXzI3ICgxPDwyNykKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIElPX1NTUl9SRVNfMjYgKDE8PDI2KSAgCi0jZGVmaW5lIElPX1NTUl9SRVNfMjUgKDE8PDI1KSAgCi0jZGVmaW5lIElPX1NTUl9SRVNfMjQgKDE8PDI0KSAgCi0jZGVmaW5lIElPX1NTUl9SRVNfMjMgKDE8PDIzKSAgCisjZGVmaW5lIElPX1NTUl9SRVNfMjYgKDE8PDI2KQorI2RlZmluZSBJT19TU1JfUkVTXzI1ICgxPDwyNSkKKyNkZWZpbmUgSU9fU1NSX1JFU18yNCAoMTw8MjQpCisjZGVmaW5lIElPX1NTUl9SRVNfMjMgKDE8PDIzKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgSU9fU1NSX1NDU0lfRE1BX0RJUiAoMTw8MTgpICAKLSNkZWZpbmUgSU9fU1NSX1NDU0lfRE1BX0VOICgxPDwxNykgIAotI2RlZmluZSBJT19TU1JfTEFOQ0VfRE1BX0VOICgxPDwxNikgIAotI2RlZmluZSBJT19TU1JfU0NDMUFfVFhfRE1BX0VOICgxPDwyOSkgIAorI2RlZmluZSBJT19TU1JfU0NTSV9ETUFfRElSICgxPDwxOCkKKyNkZWZpbmUgSU9fU1NSX1NDU0lfRE1BX0VOICgxPDwxNykKKyNkZWZpbmUgSU9fU1NSX0xBTkNFX0RNQV9FTiAoMTw8MTYpCisjZGVmaW5lIElPX1NTUl9TQ0MxQV9UWF9ETUFfRU4gKDE8PDI5KQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgSU9fU1NSX1NDQzFBX1JYX0RNQV9FTiAoMTw8MjgpICAKLSNkZWZpbmUgSU9fU1NSX1JFU18yMiAoMTw8MjIpICAKLSNkZWZpbmUgSU9fU1NSX1JFU18yMSAoMTw8MjEpICAKLSNkZWZpbmUgSU9fU1NSX1JFU18yMCAoMTw8MjApICAKKyNkZWZpbmUgSU9fU1NSX1NDQzFBX1JYX0RNQV9FTiAoMTw8MjgpCisjZGVmaW5lIElPX1NTUl9SRVNfMjIgKDE8PDIyKQorI2RlZmluZSBJT19TU1JfUkVTXzIxICgxPDwyMSkKKyNkZWZpbmUgSU9fU1NSX1JFU18yMCAoMTw8MjApCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBJT19TU1JfUkVTXzE5ICgxPDwxOSkgIAotI2RlZmluZSBJT19TU1JfQUJfVFhfRE1BX0VOICgxPDwyOSkgIAotI2RlZmluZSBJT19TU1JfQUJfUlhfRE1BX0VOICgxPDwyOCkgIAotI2RlZmluZSBJT19TU1JfRkxPUFBZX0RNQV9ESVIgKDE8PDIyKSAgCisjZGVmaW5lIElPX1NTUl9SRVNfMTkgKDE8PDE5KQorI2RlZmluZSBJT19TU1JfQUJfVFhfRE1BX0VOICgxPDwyOSkKKyNkZWZpbmUgSU9fU1NSX0FCX1JYX0RNQV9FTiAoMTw8MjgpCisjZGVmaW5lIElPX1NTUl9GTE9QUFlfRE1BX0RJUiAoMTw8MjIpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBJT19TU1JfRkxPUFBZX0RNQV9FTiAoMTw8MjEpICAKLSNkZWZpbmUgSU9fU1NSX0lTRE5fVFhfRE1BX0VOICgxPDwyMCkgIAotI2RlZmluZSBJT19TU1JfSVNETl9SWF9ETUFfRU4gKDE8PDE5KSAgCi0jZGVmaW5lIEtOMFhfSU9fU1NSX0RJQUdETiAoMTw8MTUpICAKKyNkZWZpbmUgSU9fU1NSX0ZMT1BQWV9ETUFfRU4gKDE8PDIxKQorI2RlZmluZSBJT19TU1JfSVNETl9UWF9ETUFfRU4gKDE8PDIwKQorI2RlZmluZSBJT19TU1JfSVNETl9SWF9ETUFfRU4gKDE8PDE5KQorI2RlZmluZSBLTjBYX0lPX1NTUl9ESUFHRE4gKDE8PDE1KQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgS04wWF9JT19TU1JfU0NDX1JTVCAoMTw8MTEpICAKLSNkZWZpbmUgS04wWF9JT19TU1JfUlRDX1JTVCAoMTw8MTApICAKLSNkZWZpbmUgS04wWF9JT19TU1JfQVNDX1JTVCAoMTw8OSkgIAotI2RlZmluZSBLTjBYX0lPX1NTUl9MQU5DRV9SU1QgKDE8PDgpICAKKyNkZWZpbmUgS04wWF9JT19TU1JfU0NDX1JTVCAoMTw8MTEpCisjZGVmaW5lIEtOMFhfSU9fU1NSX1JUQ19SU1QgKDE8PDEwKQorI2RlZmluZSBLTjBYX0lPX1NTUl9BU0NfUlNUICgxPDw5KQorI2RlZmluZSBLTjBYX0lPX1NTUl9MQU5DRV9SU1QgKDE8PDgpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLW1pcHMvYXNtL2RlYy9rbjAyeGEuaCBiL2xpYmMva2VybmVsL2FyY2gtbWlwcy9hc20vZGVjL2tuMDJ4YS5oCmluZGV4IDYwNzhjOGIuLjAyNzI1MTQgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2FyY2gtbWlwcy9hc20vZGVjL2tuMDJ4YS5oCisrKyBiL2xpYmMva2VybmVsL2FyY2gtbWlwcy9hc20vZGVjL2tuMDJ4YS5oCkBAIC0yMSwzOCArMjEsMzggQEAKICNpbmNsdWRlIDxhc20vZGVjL2lvYXNpY19hZGRycy5oPgogI2RlZmluZSBLTjAyWEFfU0xPVF9CQVNFIDB4MWMwMDAwMDAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIEtOMDJYQV9NRVIgMHgwYzQwMDAwMCAgCi0jZGVmaW5lIEtOMDJYQV9NU1IgMHgwYzgwMDAwMCAgCi0jZGVmaW5lIEtOMDJYQV9NRU1fQ09ORiAweDBlMDAwMDAwICAKLSNkZWZpbmUgS04wMlhBX0VBUiAweDBlMDAwMDA0ICAKKyNkZWZpbmUgS04wMlhBX01FUiAweDBjNDAwMDAwCisjZGVmaW5lIEtOMDJYQV9NU1IgMHgwYzgwMDAwMAorI2RlZmluZSBLTjAyWEFfTUVNX0NPTkYgMHgwZTAwMDAwMAorI2RlZmluZSBLTjAyWEFfRUFSIDB4MGUwMDAwMDQKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIEtOMDJYQV9CT09UMCAweDBlMDAwMDA4ICAKLSNkZWZpbmUgS04wMlhBX01FTV9JTlRSIDB4MGUwMDAwMGMgIAotI2RlZmluZSBLTjAyWEFfTUVSX1JFU18yOCAoMHhmPDwyOCkgIAotI2RlZmluZSBLTjAyWEFfTUVSX1JFU18xNyAoMHgzZmY8PDE3KSAgCisjZGVmaW5lIEtOMDJYQV9CT09UMCAweDBlMDAwMDA4CisjZGVmaW5lIEtOMDJYQV9NRU1fSU5UUiAweDBlMDAwMDBjCisjZGVmaW5lIEtOMDJYQV9NRVJfUkVTXzI4ICgweGY8PDI4KQorI2RlZmluZSBLTjAyWEFfTUVSX1JFU18xNyAoMHgzZmY8PDE3KQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgS04wMlhBX01FUl9QQUdFUlIgKDE8PDE2KSAgCi0jZGVmaW5lIEtOMDJYQV9NRVJfVFJBTlNFUlIgKDE8PDE1KSAgCi0jZGVmaW5lIEtOMDJYQV9NRVJfUEFSRElTICgxPDwxNCkgIAotI2RlZmluZSBLTjAyWEFfTUVSX1NJWkUgKDE8PDEzKSAgCisjZGVmaW5lIEtOMDJYQV9NRVJfUEFHRVJSICgxPDwxNikKKyNkZWZpbmUgS04wMlhBX01FUl9UUkFOU0VSUiAoMTw8MTUpCisjZGVmaW5lIEtOMDJYQV9NRVJfUEFSRElTICgxPDwxNCkKKyNkZWZpbmUgS04wMlhBX01FUl9TSVpFICgxPDwxMykKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIEtOMDJYQV9NRVJfUkVTXzEyICgxPDwxMikgIAotI2RlZmluZSBLTjAyWEFfTUVSX0JZVEVSUiAoMHhmPDw4KSAgCi0jZGVmaW5lIEtOMDJYQV9NRVJfQllURVJSXzMgKDB4ODw8OCkgIAotI2RlZmluZSBLTjAyWEFfTUVSX0JZVEVSUl8yICgweDQ8PDgpICAKKyNkZWZpbmUgS04wMlhBX01FUl9SRVNfMTIgKDE8PDEyKQorI2RlZmluZSBLTjAyWEFfTUVSX0JZVEVSUiAoMHhmPDw4KQorI2RlZmluZSBLTjAyWEFfTUVSX0JZVEVSUl8zICgweDg8PDgpCisjZGVmaW5lIEtOMDJYQV9NRVJfQllURVJSXzIgKDB4NDw8OCkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIEtOMDJYQV9NRVJfQllURVJSXzEgKDB4Mjw8OCkgIAotI2RlZmluZSBLTjAyWEFfTUVSX0JZVEVSUl8wICgweDE8PDgpICAKLSNkZWZpbmUgS04wMlhBX01FUl9SRVNfMCAoMHhmZjw8MCkgIAotI2RlZmluZSBLTjAyWEFfTVNSX1JFU18yNyAoMHgxZjw8MjcpICAKKyNkZWZpbmUgS04wMlhBX01FUl9CWVRFUlJfMSAoMHgyPDw4KQorI2RlZmluZSBLTjAyWEFfTUVSX0JZVEVSUl8wICgweDE8PDgpCisjZGVmaW5lIEtOMDJYQV9NRVJfUkVTXzAgKDB4ZmY8PDApCisjZGVmaW5lIEtOMDJYQV9NU1JfUkVTXzI3ICgweDFmPDwyNykKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIEtOMDJYQV9NU1JfUkVTXzE0ICgweDc8PDE0KSAgCi0jZGVmaW5lIEtOMDJYQV9NU1JfU0laRSAoMTw8MTMpICAKLSNkZWZpbmUgS04wMlhBX01TUl9SRVNfMCAoMHgxZmZmPDwwKSAgCi0jZGVmaW5lIEtOMDJYQV9FQVJfUkVTXzI5ICgweDc8PDI5KSAgCisjZGVmaW5lIEtOMDJYQV9NU1JfUkVTXzE0ICgweDc8PDE0KQorI2RlZmluZSBLTjAyWEFfTVNSX1NJWkUgKDE8PDEzKQorI2RlZmluZSBLTjAyWEFfTVNSX1JFU18wICgweDFmZmY8PDApCisjZGVmaW5lIEtOMDJYQV9FQVJfUkVTXzI5ICgweDc8PDI5KQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgS04wMlhBX0VBUl9BRERSRVNTICgweDdmZmZmZmY8PDIpICAKLSNkZWZpbmUgS04wMlhBX0VBUl9SRVNfMCAoMHgzPDwwKSAgCisjZGVmaW5lIEtOMDJYQV9FQVJfQUREUkVTUyAoMHg3ZmZmZmZmPDwyKQorI2RlZmluZSBLTjAyWEFfRUFSX1JFU18wICgweDM8PDApCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gtbWlwcy9hc20vZG1hLmggYi9saWJjL2tlcm5lbC9hcmNoLW1pcHMvYXNtL2RtYS5oCmluZGV4IGFlZGI1ZGQuLmU5YWI3YjIgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2FyY2gtbWlwcy9hc20vZG1hLmgKKysrIGIvbGliYy9rZXJuZWwvYXJjaC1taXBzL2FzbS9kbWEuaApAQCAtMTgsOCArMTgsOCBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9BU01fRE1BX0gKICNkZWZpbmUgX0FTTV9ETUFfSAotI2luY2x1ZGUgPGFzbS9pby5oPiAgCi0jaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4gIAorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgpAQCAtMzYsMzQgKzM2LDM0IEBACiAjZGVmaW5lIE1BWF9ETUFfUEZOIFBGTl9ET1dOKHZpcnRfdG9fcGh5cygodm9pZCAqKU1BWF9ETUFfQUREUkVTUykpCiAjZGVmaW5lIE1BWF9ETUEzMl9QRk4gKDFVTCA8PCAoMzIgLSBQQUdFX1NISUZUKSkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIElPX0RNQTFfQkFTRSAweDAwICAKLSNkZWZpbmUgSU9fRE1BMl9CQVNFIDB4QzAgIAotI2RlZmluZSBETUExX0NNRF9SRUcgMHgwOCAgCi0jZGVmaW5lIERNQTFfU1RBVF9SRUcgMHgwOCAgCisjZGVmaW5lIElPX0RNQTFfQkFTRSAweDAwCisjZGVmaW5lIElPX0RNQTJfQkFTRSAweEMwCisjZGVmaW5lIERNQTFfQ01EX1JFRyAweDA4CisjZGVmaW5lIERNQTFfU1RBVF9SRUcgMHgwOAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgRE1BMV9SRVFfUkVHIDB4MDkgIAotI2RlZmluZSBETUExX01BU0tfUkVHIDB4MEEgIAotI2RlZmluZSBETUExX01PREVfUkVHIDB4MEIgIAotI2RlZmluZSBETUExX0NMRUFSX0ZGX1JFRyAweDBDICAKKyNkZWZpbmUgRE1BMV9SRVFfUkVHIDB4MDkKKyNkZWZpbmUgRE1BMV9NQVNLX1JFRyAweDBBCisjZGVmaW5lIERNQTFfTU9ERV9SRUcgMHgwQgorI2RlZmluZSBETUExX0NMRUFSX0ZGX1JFRyAweDBDCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBETUExX1RFTVBfUkVHIDB4MEQgIAotI2RlZmluZSBETUExX1JFU0VUX1JFRyAweDBEICAKLSNkZWZpbmUgRE1BMV9DTFJfTUFTS19SRUcgMHgwRSAgCi0jZGVmaW5lIERNQTFfTUFTS19BTExfUkVHIDB4MEYgIAorI2RlZmluZSBETUExX1RFTVBfUkVHIDB4MEQKKyNkZWZpbmUgRE1BMV9SRVNFVF9SRUcgMHgwRAorI2RlZmluZSBETUExX0NMUl9NQVNLX1JFRyAweDBFCisjZGVmaW5lIERNQTFfTUFTS19BTExfUkVHIDB4MEYKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIERNQTJfQ01EX1JFRyAweEQwICAKLSNkZWZpbmUgRE1BMl9TVEFUX1JFRyAweEQwICAKLSNkZWZpbmUgRE1BMl9SRVFfUkVHIDB4RDIgIAotI2RlZmluZSBETUEyX01BU0tfUkVHIDB4RDQgIAorI2RlZmluZSBETUEyX0NNRF9SRUcgMHhEMAorI2RlZmluZSBETUEyX1NUQVRfUkVHIDB4RDAKKyNkZWZpbmUgRE1BMl9SRVFfUkVHIDB4RDIKKyNkZWZpbmUgRE1BMl9NQVNLX1JFRyAweEQ0CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBETUEyX01PREVfUkVHIDB4RDYgIAotI2RlZmluZSBETUEyX0NMRUFSX0ZGX1JFRyAweEQ4ICAKLSNkZWZpbmUgRE1BMl9URU1QX1JFRyAweERBICAKLSNkZWZpbmUgRE1BMl9SRVNFVF9SRUcgMHhEQSAgCisjZGVmaW5lIERNQTJfTU9ERV9SRUcgMHhENgorI2RlZmluZSBETUEyX0NMRUFSX0ZGX1JFRyAweEQ4CisjZGVmaW5lIERNQTJfVEVNUF9SRUcgMHhEQQorI2RlZmluZSBETUEyX1JFU0VUX1JFRyAweERBCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBETUEyX0NMUl9NQVNLX1JFRyAweERDICAKLSNkZWZpbmUgRE1BMl9NQVNLX0FMTF9SRUcgMHhERSAgCi0jZGVmaW5lIERNQV9BRERSXzAgMHgwMCAgCisjZGVmaW5lIERNQTJfQ0xSX01BU0tfUkVHIDB4REMKKyNkZWZpbmUgRE1BMl9NQVNLX0FMTF9SRUcgMHhERQorI2RlZmluZSBETUFfQUREUl8wIDB4MDAKICNkZWZpbmUgRE1BX0FERFJfMSAweDAyCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBETUFfQUREUl8yIDB4MDQKQEAgLTczLDcgKzczLDcgQEAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIERNQV9BRERSXzYgMHhDOAogI2RlZmluZSBETUFfQUREUl83IDB4Q0MKLSNkZWZpbmUgRE1BX0NOVF8wIDB4MDEgIAorI2RlZmluZSBETUFfQ05UXzAgMHgwMQogI2RlZmluZSBETUFfQ05UXzEgMHgwMwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRE1BX0NOVF8yIDB4MDUKQEAgLTgzLDcgKzgzLDcgQEAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIERNQV9DTlRfNiAweENBCiAjZGVmaW5lIERNQV9DTlRfNyAweENFCi0jZGVmaW5lIERNQV9QQUdFXzAgMHg4NyAgCisjZGVmaW5lIERNQV9QQUdFXzAgMHg4NwogI2RlZmluZSBETUFfUEFHRV8xIDB4ODMKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIERNQV9QQUdFXzIgMHg4MQpAQCAtOTIsOSArOTIsOSBAQAogI2RlZmluZSBETUFfUEFHRV82IDB4ODkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIERNQV9QQUdFXzcgMHg4QQotI2RlZmluZSBETUFfTU9ERV9SRUFEIDB4NDQgIAotI2RlZmluZSBETUFfTU9ERV9XUklURSAweDQ4ICAKLSNkZWZpbmUgRE1BX01PREVfQ0FTQ0FERSAweEMwICAKKyNkZWZpbmUgRE1BX01PREVfUkVBRCAweDQ0CisjZGVmaW5lIERNQV9NT0RFX1dSSVRFIDB4NDgKKyNkZWZpbmUgRE1BX01PREVfQ0FTQ0FERSAweEMwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBETUFfQVVUT0lOSVQgMHgxMAogI2RlZmluZSBpc2FfZG1hX2JyaWRnZV9idWdneSAoMCkKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gtbWlwcy9hc20vZWxmLmggYi9saWJjL2tlcm5lbC9hcmNoLW1pcHMvYXNtL2VsZi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2Y2NiNjIyLi4wMDAwMDAwCi0tLSBhL2xpYmMva2VybmVsL2FyY2gtbWlwcy9hc20vZWxmLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMTQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKioqCi0gKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCi0gKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bwotICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCi0gKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKLSAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgotICoqKgotICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZwotICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgotICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQotICoqKgotICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAotICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQotICoqKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotI2lmbmRlZiBfQVNNX0VMRl9ICi0jZGVmaW5lIF9BU01fRUxGX0gKLSNkZWZpbmUgRUZfTUlQU19BUkNIXzEgMHgwMDAwMDAwMCAgCi0jZGVmaW5lIEVGX01JUFNfQVJDSF8yIDB4MTAwMDAwMDAgIAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgRUZfTUlQU19BUkNIXzMgMHgyMDAwMDAwMCAgCi0jZGVmaW5lIEVGX01JUFNfQVJDSF80IDB4MzAwMDAwMDAgIAotI2RlZmluZSBFRl9NSVBTX0FSQ0hfNSAweDQwMDAwMDAwICAKLSNkZWZpbmUgRUZfTUlQU19BUkNIXzMyIDB4NTAwMDAwMDAgIAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgRUZfTUlQU19BUkNIXzY0IDB4NjAwMDAwMDAgIAotI2RlZmluZSBFRl9NSVBTX0FSQ0hfMzJSMiAweDcwMDAwMDAwICAKLSNkZWZpbmUgRUZfTUlQU19BUkNIXzY0UjIgMHg4MDAwMDAwMCAgCi0jZGVmaW5lIEVGX01JUFNfQUJJX08zMiAweDAwMDAxMDAwICAKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIEVGX01JUFNfQUJJX082NCAweDAwMDAyMDAwICAKLSNkZWZpbmUgUFRfTUlQU19SRUdJTkZPIDB4NzAwMDAwMDAKLSNkZWZpbmUgUFRfTUlQU19SVFBST0MgMHg3MDAwMDAwMQotI2RlZmluZSBQVF9NSVBTX09QVElPTlMgMHg3MDAwMDAwMgotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgRUZfTUlQU19OT1JFT1JERVIgMHgwMDAwMDAwMQotI2RlZmluZSBFRl9NSVBTX1BJQyAweDAwMDAwMDAyCi0jZGVmaW5lIEVGX01JUFNfQ1BJQyAweDAwMDAwMDA0Ci0jZGVmaW5lIEVGX01JUFNfQUJJMiAweDAwMDAwMDIwCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBFRl9NSVBTX09QVElPTlNfRklSU1QgMHgwMDAwMDA4MAotI2RlZmluZSBFRl9NSVBTXzMyQklUTU9ERSAweDAwMDAwMTAwCi0jZGVmaW5lIEVGX01JUFNfQUJJIDB4MDAwMGYwMDAKLSNkZWZpbmUgRUZfTUlQU19BUkNIIDB4ZjAwMDAwMDAKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIERUX01JUFNfUkxEX1ZFUlNJT04gMHg3MDAwMDAwMQotI2RlZmluZSBEVF9NSVBTX1RJTUVfU1RBTVAgMHg3MDAwMDAwMgotI2RlZmluZSBEVF9NSVBTX0lDSEVDS1NVTSAweDcwMDAwMDAzCi0jZGVmaW5lIERUX01JUFNfSVZFUlNJT04gMHg3MDAwMDAwNAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgRFRfTUlQU19GTEFHUyAweDcwMDAwMDA1Ci0jZGVmaW5lIFJIRl9OT05FIDB4MDAwMDAwMDAKLSNkZWZpbmUgUkhGX0hBUkRXQVkgMHgwMDAwMDAwMQotI2RlZmluZSBSSEZfTk9UUE9UIDB4MDAwMDAwMDIKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIFJIRl9TR0lfT05MWSAweDAwMDAwMDEwCi0jZGVmaW5lIERUX01JUFNfQkFTRV9BRERSRVNTIDB4NzAwMDAwMDYKLSNkZWZpbmUgRFRfTUlQU19DT05GTElDVCAweDcwMDAwMDA4Ci0jZGVmaW5lIERUX01JUFNfTElCTElTVCAweDcwMDAwMDA5Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBEVF9NSVBTX0xPQ0FMX0dPVE5PIDB4NzAwMDAwMGEKLSNkZWZpbmUgRFRfTUlQU19DT05GTElDVE5PIDB4NzAwMDAwMGIKLSNkZWZpbmUgRFRfTUlQU19MSUJMSVNUTk8gMHg3MDAwMDAxMAotI2RlZmluZSBEVF9NSVBTX1NZTVRBQk5PIDB4NzAwMDAwMTEKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIERUX01JUFNfVU5SRUZFWFROTyAweDcwMDAwMDEyCi0jZGVmaW5lIERUX01JUFNfR09UU1lNIDB4NzAwMDAwMTMKLSNkZWZpbmUgRFRfTUlQU19ISVBBR0VOTyAweDcwMDAwMDE0Ci0jZGVmaW5lIERUX01JUFNfUkxEX01BUCAweDcwMDAwMDE2Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBSX01JUFNfTk9ORSAwCi0jZGVmaW5lIFJfTUlQU18xNiAxCi0jZGVmaW5lIFJfTUlQU18zMiAyCi0jZGVmaW5lIFJfTUlQU19SRUwzMiAzCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBSX01JUFNfMjYgNAotI2RlZmluZSBSX01JUFNfSEkxNiA1Ci0jZGVmaW5lIFJfTUlQU19MTzE2IDYKLSNkZWZpbmUgUl9NSVBTX0dQUkVMMTYgNwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgUl9NSVBTX0xJVEVSQUwgOAotI2RlZmluZSBSX01JUFNfR09UMTYgOQotI2RlZmluZSBSX01JUFNfUEMxNiAxMAotI2RlZmluZSBSX01JUFNfQ0FMTDE2IDExCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBSX01JUFNfR1BSRUwzMiAxMgotI2RlZmluZSBSX01JUFNfVU5VU0VEMSAxMwotI2RlZmluZSBSX01JUFNfVU5VU0VEMiAxNAotI2RlZmluZSBSX01JUFNfVU5VU0VEMyAxNQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgUl9NSVBTX1NISUZUNSAxNgotI2RlZmluZSBSX01JUFNfU0hJRlQ2IDE3Ci0jZGVmaW5lIFJfTUlQU182NCAxOAotI2RlZmluZSBSX01JUFNfR09UX0RJU1AgMTkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIFJfTUlQU19HT1RfUEFHRSAyMAotI2RlZmluZSBSX01JUFNfR09UX09GU1QgMjEKLSNkZWZpbmUgUl9NSVBTX0dPVEhJMTYgMjIKLSNkZWZpbmUgUl9NSVBTX0dPVExPMTYgMjMKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIFJfTUlQU19TVUIgMjQKLSNkZWZpbmUgUl9NSVBTX0lOU0VSVF9BIDI1Ci0jZGVmaW5lIFJfTUlQU19JTlNFUlRfQiAyNgotI2RlZmluZSBSX01JUFNfREVMRVRFIDI3Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBSX01JUFNfSElHSEVSIDI4Ci0jZGVmaW5lIFJfTUlQU19ISUdIRVNUIDI5Ci0jZGVmaW5lIFJfTUlQU19DQUxMSEkxNiAzMAotI2RlZmluZSBSX01JUFNfQ0FMTExPMTYgMzEKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIFJfTUlQU19MT1ZFTkRPUiAxMDAKLSNkZWZpbmUgUl9NSVBTX0hJVkVORE9SIDEyNwotI2RlZmluZSBTSE5fTUlQU19BQ0NPTU9OIDB4ZmYwMCAgCi0jZGVmaW5lIFNITl9NSVBTX1RFWFQgMHhmZjAxICAKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIFNITl9NSVBTX0RBVEEgMHhmZjAyICAKLSNkZWZpbmUgU0hOX01JUFNfU0NPTU1PTiAweGZmMDMgIAotI2RlZmluZSBTSE5fTUlQU19TVU5ERUZJTkVEIDB4ZmYwNCAgCi0jZGVmaW5lIFNIVF9NSVBTX0xJU1QgMHg3MDAwMDAwMAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgU0hUX01JUFNfQ09ORkxJQ1QgMHg3MDAwMDAwMgotI2RlZmluZSBTSFRfTUlQU19HUFRBQiAweDcwMDAwMDAzCi0jZGVmaW5lIFNIVF9NSVBTX1VDT0RFIDB4NzAwMDAwMDQKLSNkZWZpbmUgU0hUX01JUFNfREVCVUcgMHg3MDAwMDAwNQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgU0hUX01JUFNfUkVHSU5GTyAweDcwMDAwMDA2Ci0jZGVmaW5lIFNIVF9NSVBTX1BBQ0tBR0UgMHg3MDAwMDAwNwotI2RlZmluZSBTSFRfTUlQU19QQUNLU1lNIDB4NzAwMDAwMDgKLSNkZWZpbmUgU0hUX01JUFNfUkVMRCAweDcwMDAwMDA5Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBTSFRfTUlQU19JRkFDRSAweDcwMDAwMDBiCi0jZGVmaW5lIFNIVF9NSVBTX0NPTlRFTlQgMHg3MDAwMDAwYwotI2RlZmluZSBTSFRfTUlQU19PUFRJT05TIDB4NzAwMDAwMGQKLSNkZWZpbmUgU0hUX01JUFNfU0hEUiAweDcwMDAwMDEwCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBTSFRfTUlQU19GREVTQyAweDcwMDAwMDExCi0jZGVmaW5lIFNIVF9NSVBTX0VYVFNZTSAweDcwMDAwMDEyCi0jZGVmaW5lIFNIVF9NSVBTX0RFTlNFIDB4NzAwMDAwMTMKLSNkZWZpbmUgU0hUX01JUFNfUERFU0MgMHg3MDAwMDAxNAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgU0hUX01JUFNfTE9DU1lNIDB4NzAwMDAwMTUKLSNkZWZpbmUgU0hUX01JUFNfQVVYU1lNIDB4NzAwMDAwMTYKLSNkZWZpbmUgU0hUX01JUFNfT1BUU1lNIDB4NzAwMDAwMTcKLSNkZWZpbmUgU0hUX01JUFNfTE9DU1RSIDB4NzAwMDAwMTgKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIFNIVF9NSVBTX0xJTkUgMHg3MDAwMDAxOQotI2RlZmluZSBTSFRfTUlQU19SRkRFU0MgMHg3MDAwMDAxYQotI2RlZmluZSBTSFRfTUlQU19ERUxUQVNZTSAweDcwMDAwMDFiCi0jZGVmaW5lIFNIVF9NSVBTX0RFTFRBSU5TVCAweDcwMDAwMDFjCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBTSFRfTUlQU19ERUxUQUNMQVNTIDB4NzAwMDAwMWQKLSNkZWZpbmUgU0hUX01JUFNfRFdBUkYgMHg3MDAwMDAxZQotI2RlZmluZSBTSFRfTUlQU19ERUxUQURFQ0wgMHg3MDAwMDAxZgotI2RlZmluZSBTSFRfTUlQU19TWU1CT0xfTElCIDB4NzAwMDAwMjAKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIFNIVF9NSVBTX0VWRU5UUyAweDcwMDAwMDIxCi0jZGVmaW5lIFNIVF9NSVBTX1RSQU5TTEFURSAweDcwMDAwMDIyCi0jZGVmaW5lIFNIVF9NSVBTX1BJWElFIDB4NzAwMDAwMjMKLSNkZWZpbmUgU0hUX01JUFNfWExBVEUgMHg3MDAwMDAyNAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgU0hUX01JUFNfWExBVEVfREVCVUcgMHg3MDAwMDAyNQotI2RlZmluZSBTSFRfTUlQU19XSElSTCAweDcwMDAwMDI2Ci0jZGVmaW5lIFNIVF9NSVBTX0VIX1JFR0lPTiAweDcwMDAwMDI3Ci0jZGVmaW5lIFNIVF9NSVBTX1hMQVRFX09MRCAweDcwMDAwMDI4Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBTSFRfTUlQU19QRFJfRVhDRVBUSU9OIDB4NzAwMDAwMjkKLSNkZWZpbmUgU0hGX01JUFNfR1BSRUwgMHgxMDAwMDAwMAotI2RlZmluZSBTSEZfTUlQU19NRVJHRSAweDIwMDAwMDAwCi0jZGVmaW5lIFNIRl9NSVBTX0FERFIgMHg0MDAwMDAwMAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgU0hGX01JUFNfU1RSSU5HIDB4ODAwMDAwMDAKLSNkZWZpbmUgU0hGX01JUFNfTk9TVFJJUCAweDA4MDAwMDAwCi0jZGVmaW5lIFNIRl9NSVBTX0xPQ0FMIDB4MDQwMDAwMDAKLSNkZWZpbmUgU0hGX01JUFNfTkFNRVMgMHgwMjAwMDAwMAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgU0hGX01JUFNfTk9EVVBFUyAweDAxMDAwMDAwCi0jaWZuZGVmIEVMRl9BUkNICi0jZGVmaW5lIEVMRl9OR1JFRyA0NQotI2RlZmluZSBFTEZfTkZQUkVHIDMzCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotdHlwZWRlZiB1bnNpZ25lZCBsb25nIGVsZl9ncmVnX3Q7Ci10eXBlZGVmIGVsZl9ncmVnX3QgZWxmX2dyZWdzZXRfdFtFTEZfTkdSRUddOwotdHlwZWRlZiBkb3VibGUgZWxmX2ZwcmVnX3Q7Ci10eXBlZGVmIGVsZl9mcHJlZ190IGVsZl9mcHJlZ3NldF90W0VMRl9ORlBSRUddOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNpZmRlZiBfX01JUFNFQl9fCi0jZGVmaW5lIEVMRl9EQVRBIEVMRkRBVEEyTVNCCi0jZWxpZiBfX01JUFNFTF9fCi0jZGVmaW5lIEVMRl9EQVRBIEVMRkRBVEEyTFNCCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2VuZGlmCi0jZGVmaW5lIEVMRl9BUkNIIEVNX01JUFMKLSNlbmRpZgotc3RydWN0IG1pcHNfYWJpOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLXN0cnVjdCB0YXNrX3N0cnVjdDsKLSNkZWZpbmUgRUxGX0NPUkVfQ09QWV9SRUdTKGVsZl9yZWdzLCByZWdzKSAgIGVsZl9kdW1wX3JlZ3MoKGVsZl9ncmVnX3QgKikmKGVsZl9yZWdzKSwgcmVncyk7Ci0jZGVmaW5lIEVMRl9DT1JFX0NPUFlfVEFTS19SRUdTKHRzaywgZWxmX3JlZ3MpIGR1bXBfdGFza19yZWdzKHRzaywgZWxmX3JlZ3MpCi0jZGVmaW5lIEVMRl9DT1JFX0NPUFlfRlBSRUdTKHRzaywgZWxmX2ZwcmVncykgICBkdW1wX3Rhc2tfZnB1KHRzaywgZWxmX2ZwcmVncykKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIFVTRV9FTEZfQ09SRV9EVU1QCi0jZGVmaW5lIEVMRl9FWEVDX1BBR0VTSVpFIFBBR0VfU0laRQotI2RlZmluZSBFTEZfSFdDQVAgKDApCi0jZGVmaW5lIEVMRl9QTEFURk9STSAoTlVMTCkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIEVMRl9QTEFUX0lOSVQoX3IsIGxvYWRfYWRkcikgZG8geyAgIF9yLT5yZWdzWzFdID0gX3ItPnJlZ3NbMl0gPSBfci0+cmVnc1szXSA9IF9yLT5yZWdzWzRdID0gMDsgICBfci0+cmVnc1s1XSA9IF9yLT5yZWdzWzZdID0gX3ItPnJlZ3NbN10gPSBfci0+cmVnc1s4XSA9IDA7ICAgX3ItPnJlZ3NbOV0gPSBfci0+cmVnc1sxMF0gPSBfci0+cmVnc1sxMV0gPSBfci0+cmVnc1sxMl0gPSAwOyAgIF9yLT5yZWdzWzEzXSA9IF9yLT5yZWdzWzE0XSA9IF9yLT5yZWdzWzE1XSA9IF9yLT5yZWdzWzE2XSA9IDA7ICAgX3ItPnJlZ3NbMTddID0gX3ItPnJlZ3NbMThdID0gX3ItPnJlZ3NbMTldID0gX3ItPnJlZ3NbMjBdID0gMDsgICBfci0+cmVnc1syMV0gPSBfci0+cmVnc1syMl0gPSBfci0+cmVnc1syM10gPSBfci0+cmVnc1syNF0gPSAwOyAgIF9yLT5yZWdzWzI1XSA9IF9yLT5yZWdzWzI2XSA9IF9yLT5yZWdzWzI3XSA9IF9yLT5yZWdzWzI4XSA9IDA7ICAgX3ItPnJlZ3NbMzBdID0gX3ItPnJlZ3NbMzFdID0gMDsgIH0gd2hpbGUgKDApCi0jaWZuZGVmIEVMRl9FVF9EWU5fQkFTRQotI2RlZmluZSBFTEZfRVRfRFlOX0JBU0UgKFRBU0tfU0laRSAvIDMgKiAyKQotI2VuZGlmCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLW1pcHMvYXNtL2Vycm5vLmggYi9saWJjL2tlcm5lbC9hcmNoLW1pcHMvYXNtL2Vycm5vLmgKaW5kZXggZjhiYTQzOC4uNDM3MjkzZCAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvYXJjaC1taXBzL2FzbS9lcnJuby5oCisrKyBiL2xpYmMva2VybmVsL2FyY2gtbWlwcy9hc20vZXJybm8uaApAQCAtMTksMTI4ICsxOSwxMjggQEAKICNpZm5kZWYgX0FTTV9FUlJOT19ICiAjZGVmaW5lIF9BU01fRVJSTk9fSAogI2luY2x1ZGUgPGFzbS1nZW5lcmljL2Vycm5vLWJhc2UuaD4KLSNkZWZpbmUgRU5PTVNHIDM1ICAKKyNkZWZpbmUgRU5PTVNHIDM1CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBFSURSTSAzNiAgCi0jZGVmaW5lIEVDSFJORyAzNyAgCi0jZGVmaW5lIEVMMk5TWU5DIDM4ICAKLSNkZWZpbmUgRUwzSExUIDM5ICAKKyNkZWZpbmUgRUlEUk0gMzYKKyNkZWZpbmUgRUNIUk5HIDM3CisjZGVmaW5lIEVMMk5TWU5DIDM4CisjZGVmaW5lIEVMM0hMVCAzOQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgRUwzUlNUIDQwICAKLSNkZWZpbmUgRUxOUk5HIDQxICAKLSNkZWZpbmUgRVVOQVRDSCA0MiAgCi0jZGVmaW5lIEVOT0NTSSA0MyAgCisjZGVmaW5lIEVMM1JTVCA0MAorI2RlZmluZSBFTE5STkcgNDEKKyNkZWZpbmUgRVVOQVRDSCA0MgorI2RlZmluZSBFTk9DU0kgNDMKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIEVMMkhMVCA0NCAgCi0jZGVmaW5lIEVERUFETEsgNDUgIAotI2RlZmluZSBFTk9MQ0sgNDYgIAotI2RlZmluZSBFQkFERSA1MCAgCisjZGVmaW5lIEVMMkhMVCA0NAorI2RlZmluZSBFREVBRExLIDQ1CisjZGVmaW5lIEVOT0xDSyA0NgorI2RlZmluZSBFQkFERSA1MAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgRUJBRFIgNTEgIAotI2RlZmluZSBFWEZVTEwgNTIgIAotI2RlZmluZSBFTk9BTk8gNTMgIAotI2RlZmluZSBFQkFEUlFDIDU0ICAKKyNkZWZpbmUgRUJBRFIgNTEKKyNkZWZpbmUgRVhGVUxMIDUyCisjZGVmaW5lIEVOT0FOTyA1MworI2RlZmluZSBFQkFEUlFDIDU0CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBFQkFEU0xUIDU1ICAKLSNkZWZpbmUgRURFQURMT0NLIDU2ICAKLSNkZWZpbmUgRUJGT05UIDU5ICAKLSNkZWZpbmUgRU5PU1RSIDYwICAKKyNkZWZpbmUgRUJBRFNMVCA1NQorI2RlZmluZSBFREVBRExPQ0sgNTYKKyNkZWZpbmUgRUJGT05UIDU5CisjZGVmaW5lIEVOT1NUUiA2MAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgRU5PREFUQSA2MSAgCi0jZGVmaW5lIEVUSU1FIDYyICAKLSNkZWZpbmUgRU5PU1IgNjMgIAotI2RlZmluZSBFTk9ORVQgNjQgIAorI2RlZmluZSBFTk9EQVRBIDYxCisjZGVmaW5lIEVUSU1FIDYyCisjZGVmaW5lIEVOT1NSIDYzCisjZGVmaW5lIEVOT05FVCA2NAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgRU5PUEtHIDY1ICAKLSNkZWZpbmUgRVJFTU9URSA2NiAgCi0jZGVmaW5lIEVOT0xJTksgNjcgIAotI2RlZmluZSBFQURWIDY4ICAKKyNkZWZpbmUgRU5PUEtHIDY1CisjZGVmaW5lIEVSRU1PVEUgNjYKKyNkZWZpbmUgRU5PTElOSyA2NworI2RlZmluZSBFQURWIDY4CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBFU1JNTlQgNjkgIAotI2RlZmluZSBFQ09NTSA3MCAgCi0jZGVmaW5lIEVQUk9UTyA3MSAgCi0jZGVmaW5lIEVET1RET1QgNzMgIAorI2RlZmluZSBFU1JNTlQgNjkKKyNkZWZpbmUgRUNPTU0gNzAKKyNkZWZpbmUgRVBST1RPIDcxCisjZGVmaW5lIEVET1RET1QgNzMKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIEVNVUxUSUhPUCA3NCAgCi0jZGVmaW5lIEVCQURNU0cgNzcgIAotI2RlZmluZSBFTkFNRVRPT0xPTkcgNzggIAotI2RlZmluZSBFT1ZFUkZMT1cgNzkgIAorI2RlZmluZSBFTVVMVElIT1AgNzQKKyNkZWZpbmUgRUJBRE1TRyA3NworI2RlZmluZSBFTkFNRVRPT0xPTkcgNzgKKyNkZWZpbmUgRU9WRVJGTE9XIDc5CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBFTk9UVU5JUSA4MCAgCi0jZGVmaW5lIEVCQURGRCA4MSAgCi0jZGVmaW5lIEVSRU1DSEcgODIgIAotI2RlZmluZSBFTElCQUNDIDgzICAKKyNkZWZpbmUgRU5PVFVOSVEgODAKKyNkZWZpbmUgRUJBREZEIDgxCisjZGVmaW5lIEVSRU1DSEcgODIKKyNkZWZpbmUgRUxJQkFDQyA4MwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgRUxJQkJBRCA4NCAgCi0jZGVmaW5lIEVMSUJTQ04gODUgIAotI2RlZmluZSBFTElCTUFYIDg2ICAKLSNkZWZpbmUgRUxJQkVYRUMgODcgIAorI2RlZmluZSBFTElCQkFEIDg0CisjZGVmaW5lIEVMSUJTQ04gODUKKyNkZWZpbmUgRUxJQk1BWCA4NgorI2RlZmluZSBFTElCRVhFQyA4NwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgRUlMU0VRIDg4ICAKLSNkZWZpbmUgRU5PU1lTIDg5ICAKLSNkZWZpbmUgRUxPT1AgOTAgIAotI2RlZmluZSBFUkVTVEFSVCA5MSAgCisjZGVmaW5lIEVJTFNFUSA4OAorI2RlZmluZSBFTk9TWVMgODkKKyNkZWZpbmUgRUxPT1AgOTAKKyNkZWZpbmUgRVJFU1RBUlQgOTEKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIEVTVFJQSVBFIDkyICAKLSNkZWZpbmUgRU5PVEVNUFRZIDkzICAKLSNkZWZpbmUgRVVTRVJTIDk0ICAKLSNkZWZpbmUgRU5PVFNPQ0sgOTUgIAorI2RlZmluZSBFU1RSUElQRSA5MgorI2RlZmluZSBFTk9URU1QVFkgOTMKKyNkZWZpbmUgRVVTRVJTIDk0CisjZGVmaW5lIEVOT1RTT0NLIDk1CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBFREVTVEFERFJSRVEgOTYgIAotI2RlZmluZSBFTVNHU0laRSA5NyAgCi0jZGVmaW5lIEVQUk9UT1RZUEUgOTggIAotI2RlZmluZSBFTk9QUk9UT09QVCA5OSAgCisjZGVmaW5lIEVERVNUQUREUlJFUSA5NgorI2RlZmluZSBFTVNHU0laRSA5NworI2RlZmluZSBFUFJPVE9UWVBFIDk4CisjZGVmaW5lIEVOT1BST1RPT1BUIDk5CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBFUFJPVE9OT1NVUFBPUlQgMTIwICAKLSNkZWZpbmUgRVNPQ0tUTk9TVVBQT1JUIDEyMSAgCi0jZGVmaW5lIEVPUE5PVFNVUFAgMTIyICAKLSNkZWZpbmUgRVBGTk9TVVBQT1JUIDEyMyAgCisjZGVmaW5lIEVQUk9UT05PU1VQUE9SVCAxMjAKKyNkZWZpbmUgRVNPQ0tUTk9TVVBQT1JUIDEyMQorI2RlZmluZSBFT1BOT1RTVVBQIDEyMgorI2RlZmluZSBFUEZOT1NVUFBPUlQgMTIzCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBFQUZOT1NVUFBPUlQgMTI0ICAKLSNkZWZpbmUgRUFERFJJTlVTRSAxMjUgIAotI2RlZmluZSBFQUREUk5PVEFWQUlMIDEyNiAgCi0jZGVmaW5lIEVORVRET1dOIDEyNyAgCisjZGVmaW5lIEVBRk5PU1VQUE9SVCAxMjQKKyNkZWZpbmUgRUFERFJJTlVTRSAxMjUKKyNkZWZpbmUgRUFERFJOT1RBVkFJTCAxMjYKKyNkZWZpbmUgRU5FVERPV04gMTI3CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBFTkVUVU5SRUFDSCAxMjggIAotI2RlZmluZSBFTkVUUkVTRVQgMTI5ICAKLSNkZWZpbmUgRUNPTk5BQk9SVEVEIDEzMCAgCi0jZGVmaW5lIEVDT05OUkVTRVQgMTMxICAKKyNkZWZpbmUgRU5FVFVOUkVBQ0ggMTI4CisjZGVmaW5lIEVORVRSRVNFVCAxMjkKKyNkZWZpbmUgRUNPTk5BQk9SVEVEIDEzMAorI2RlZmluZSBFQ09OTlJFU0VUIDEzMQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgRU5PQlVGUyAxMzIgIAotI2RlZmluZSBFSVNDT05OIDEzMyAgCi0jZGVmaW5lIEVOT1RDT05OIDEzNCAgCi0jZGVmaW5lIEVVQ0xFQU4gMTM1ICAKKyNkZWZpbmUgRU5PQlVGUyAxMzIKKyNkZWZpbmUgRUlTQ09OTiAxMzMKKyNkZWZpbmUgRU5PVENPTk4gMTM0CisjZGVmaW5lIEVVQ0xFQU4gMTM1CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBFTk9UTkFNIDEzNyAgCi0jZGVmaW5lIEVOQVZBSUwgMTM4ICAKLSNkZWZpbmUgRUlTTkFNIDEzOSAgCi0jZGVmaW5lIEVSRU1PVEVJTyAxNDAgIAorI2RlZmluZSBFTk9UTkFNIDEzNworI2RlZmluZSBFTkFWQUlMIDEzOAorI2RlZmluZSBFSVNOQU0gMTM5CisjZGVmaW5lIEVSRU1PVEVJTyAxNDAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIEVJTklUIDE0MSAgCi0jZGVmaW5lIEVSRU1ERVYgMTQyICAKLSNkZWZpbmUgRVNIVVRET1dOIDE0MyAgCi0jZGVmaW5lIEVUT09NQU5ZUkVGUyAxNDQgIAorI2RlZmluZSBFSU5JVCAxNDEKKyNkZWZpbmUgRVJFTURFViAxNDIKKyNkZWZpbmUgRVNIVVRET1dOIDE0MworI2RlZmluZSBFVE9PTUFOWVJFRlMgMTQ0CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBFVElNRURPVVQgMTQ1ICAKLSNkZWZpbmUgRUNPTk5SRUZVU0VEIDE0NiAgCi0jZGVmaW5lIEVIT1NURE9XTiAxNDcgIAotI2RlZmluZSBFSE9TVFVOUkVBQ0ggMTQ4ICAKKyNkZWZpbmUgRVRJTUVET1VUIDE0NQorI2RlZmluZSBFQ09OTlJFRlVTRUQgMTQ2CisjZGVmaW5lIEVIT1NURE9XTiAxNDcKKyNkZWZpbmUgRUhPU1RVTlJFQUNIIDE0OAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgRVdPVUxEQkxPQ0sgRUFHQUlOICAKLSNkZWZpbmUgRUFMUkVBRFkgMTQ5ICAKLSNkZWZpbmUgRUlOUFJPR1JFU1MgMTUwICAKLSNkZWZpbmUgRVNUQUxFIDE1MSAgCisjZGVmaW5lIEVXT1VMREJMT0NLIEVBR0FJTgorI2RlZmluZSBFQUxSRUFEWSAxNDkKKyNkZWZpbmUgRUlOUFJPR1JFU1MgMTUwCisjZGVmaW5lIEVTVEFMRSAxNTEKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIEVDQU5DRUxFRCAxNTggIAotI2RlZmluZSBFTk9NRURJVU0gMTU5ICAKLSNkZWZpbmUgRU1FRElVTVRZUEUgMTYwICAKLSNkZWZpbmUgRU5PS0VZIDE2MSAgCisjZGVmaW5lIEVDQU5DRUxFRCAxNTgKKyNkZWZpbmUgRU5PTUVESVVNIDE1OQorI2RlZmluZSBFTUVESVVNVFlQRSAxNjAKKyNkZWZpbmUgRU5PS0VZIDE2MQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgRUtFWUVYUElSRUQgMTYyICAKLSNkZWZpbmUgRUtFWVJFVk9LRUQgMTYzICAKLSNkZWZpbmUgRUtFWVJFSkVDVEVEIDE2NCAgCi0jZGVmaW5lIEVPV05FUkRFQUQgMTY1ICAKKyNkZWZpbmUgRUtFWUVYUElSRUQgMTYyCisjZGVmaW5lIEVLRVlSRVZPS0VEIDE2MworI2RlZmluZSBFS0VZUkVKRUNURUQgMTY0CisjZGVmaW5lIEVPV05FUkRFQUQgMTY1CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBFTk9UUkVDT1ZFUkFCTEUgMTY2ICAKLSNkZWZpbmUgRURRVU9UIDExMzMgIAorI2RlZmluZSBFTk9UUkVDT1ZFUkFCTEUgMTY2CisjZGVmaW5lIEVEUVVPVCAxMTMzCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gtbWlwcy9hc20vZmNudGwuaCBiL2xpYmMva2VybmVsL2FyY2gtbWlwcy9hc20vZmNudGwuaAppbmRleCAyNjg2MzQwLi41N2Q5NmJlIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9hcmNoLW1pcHMvYXNtL2ZjbnRsLmgKKysrIGIvbGliYy9rZXJuZWwvYXJjaC1taXBzL2FzbS9mY250bC5oCkBAIC0yMiwyNyArMjIsMzkgQEAKICNkZWZpbmUgT19TWU5DIDB4MDAxMAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgT19OT05CTE9DSyAweDAwODAKLSNkZWZpbmUgT19DUkVBVCAweDAxMDAgIAotI2RlZmluZSBPX1RSVU5DIDB4MDIwMCAgCi0jZGVmaW5lIE9fRVhDTCAweDA0MDAgIAorI2RlZmluZSBPX0NSRUFUIDB4MDEwMAorI2RlZmluZSBPX1RSVU5DIDB4MDIwMAorI2RlZmluZSBPX0VYQ0wgMHgwNDAwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBPX05PQ1RUWSAweDA4MDAgIAotI2RlZmluZSBGQVNZTkMgMHgxMDAwICAKLSNkZWZpbmUgT19MQVJHRUZJTEUgMHgyMDAwICAKLSNkZWZpbmUgT19ESVJFQ1QgMHg4MDAwICAKKyNkZWZpbmUgT19OT0NUVFkgMHgwODAwCisjZGVmaW5lIEZBU1lOQyAweDEwMDAKKyNkZWZpbmUgT19MQVJHRUZJTEUgMHgyMDAwCisjZGVmaW5lIE9fRElSRUNUIDB4ODAwMAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRl9HRVRMSyAxNAogI2RlZmluZSBGX1NFVExLIDYKICNkZWZpbmUgRl9TRVRMS1cgNwotI2RlZmluZSBGX1NFVE9XTiAyNCAgCisjZGVmaW5lIEZfU0VUT1dOIDI0CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBGX0dFVE9XTiAyMyAgCisjZGVmaW5lIEZfR0VUT1dOIDIzCiAjaWZuZGVmIF9fbWlwczY0Ci0jZGVmaW5lIEZfR0VUTEs2NCAzMyAgCisjZGVmaW5lIEZfR0VUTEs2NCAzMwogI2RlZmluZSBGX1NFVExLNjQgMzQKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEZfU0VUTEtXNjQgMzUKICNlbmRpZgorc3RydWN0IGZsb2NrIHsKKyBzaG9ydCBsX3R5cGU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIHNob3J0IGxfd2hlbmNlOworIF9fa2VybmVsX29mZl90IGxfc3RhcnQ7CisgX19rZXJuZWxfb2ZmX3QgbF9sZW47CisgbG9uZyBsX3N5c2lkOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX2tlcm5lbF9waWRfdCBsX3BpZDsKKyBsb25nIHBhZFs0XTsKK307CisjZGVmaW5lIEhBVkVfQVJDSF9TVFJVQ1RfRkxPQ0sKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvZmNudGwuaD4KICNlbmRpZgotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gtbWlwcy9hc20vZmxvcHB5LmggYi9saWJjL2tlcm5lbC9hcmNoLW1pcHMvYXNtL2Zsb3BweS5oCmluZGV4IDc2OWIzZjkuLjM5YjYxZGEgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2FyY2gtbWlwcy9hc20vZmxvcHB5LmgKKysrIGIvbGliYy9rZXJuZWwvYXJjaC1taXBzL2FzbS9mbG9wcHkuaApAQCAtMjQsNyArMjQsNyBAQAogI2RlZmluZSBGTE9QUFkwX1RZUEUgZmRfZHJpdmVfdHlwZSgwKQogI2RlZmluZSBGTE9QUFkxX1RZUEUgZmRfZHJpdmVfdHlwZSgxKQogI2RlZmluZSBGREMxIGZkX2dldGZkYWRkcjEoKTsKLSNkZWZpbmUgTl9GREMgMSAgCisjZGVmaW5lIE5fRkRDIDEKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE5fRFJJVkUgOAogI2RlZmluZSBDUk9TU182NEtCKGEsIHMpICgodW5zaWduZWQgbG9uZykoYSkvS182NCAhPSAoKHVuc2lnbmVkIGxvbmcpKGEpICsgKHMpIC0gMSkgLyBLXzY0KQpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC1taXBzL2FzbS9mcHJlZ2RlZi5oIGIvbGliYy9rZXJuZWwvYXJjaC1taXBzL2FzbS9mcHJlZ2RlZi5oCmluZGV4IDA0NmY3NTAuLmI2ZDMzNTEgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2FyY2gtbWlwcy9hc20vZnByZWdkZWYuaAorKysgYi9saWJjL2tlcm5lbC9hcmNoLW1pcHMvYXNtL2ZwcmVnZGVmLmgKQEAgLTIxLDE3ICsyMSwxNyBAQAogI2luY2x1ZGUgPGFzbS9zZ2lkZWZzLmg+CiAjaWYgX01JUFNfU0lNID09IF9NSVBTX1NJTV9BQkkzMgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgZnYwICRmMCAgCisjZGVmaW5lIGZ2MCAkZjAKICNkZWZpbmUgZnYwZiAkZjEKICNkZWZpbmUgZnYxICRmMgogI2RlZmluZSBmdjFmICRmMwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgZmEwICRmMTIgIAorI2RlZmluZSBmYTAgJGYxMgogI2RlZmluZSBmYTBmICRmMTMKICNkZWZpbmUgZmExICRmMTQKICNkZWZpbmUgZmExZiAkZjE1CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBmdDAgJGY0ICAKKyNkZWZpbmUgZnQwICRmNAogI2RlZmluZSBmdDBmICRmNQogI2RlZmluZSBmdDEgJGY2CiAjZGVmaW5lIGZ0MWYgJGY3CkBAIC00Niw3ICs0Niw3IEBACiAjZGVmaW5lIGZ0NSAkZjE4CiAjZGVmaW5lIGZ0NWYgJGYxOQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgZnMwICRmMjAgIAorI2RlZmluZSBmczAgJGYyMAogI2RlZmluZSBmczBmICRmMjEKICNkZWZpbmUgZnMxICRmMjIKICNkZWZpbmUgZnMxZiAkZjIzCkBAIC02MSwxMyArNjEsMTMgQEAKICNkZWZpbmUgZnM1ICRmMzAKICNkZWZpbmUgZnM1ZiAkZjMxCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBmY3IzMSAkMzEgIAorI2RlZmluZSBmY3IzMSAkMzEKICNlbmRpZgogI2lmIF9NSVBTX1NJTSA9PSBfTUlQU19TSU1fQUJJNjQgfHwgX01JUFNfU0lNID09IF9NSVBTX1NJTV9OQUJJMzIKLSNkZWZpbmUgZnYwICRmMCAgCisjZGVmaW5lIGZ2MCAkZjAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIGZ2MSAkZjIKLSNkZWZpbmUgZmEwICRmMTIgIAorI2RlZmluZSBmYTAgJGYxMgogI2RlZmluZSBmYTEgJGYxMwogI2RlZmluZSBmYTIgJGYxNAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KQEAgLTc3LDcgKzc3LDcgQEAKICNkZWZpbmUgZmE2ICRmMTgKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIGZhNyAkZjE5Ci0jZGVmaW5lIGZ0MCAkZjQgIAorI2RlZmluZSBmdDAgJGY0CiAjZGVmaW5lIGZ0MSAkZjUKICNkZWZpbmUgZnQyICRmNgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KQEAgLTk0LDcgKzk0LDcgQEAKICNkZWZpbmUgZnQxMSAkZjIzCiAjZGVmaW5lIGZ0MTIgJGYxCiAjZGVmaW5lIGZ0MTMgJGYzCi0jZGVmaW5lIGZzMCAkZjI0ICAKKyNkZWZpbmUgZnMwICRmMjQKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIGZzMSAkZjI1CiAjZGVmaW5lIGZzMiAkZjI2CmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLW1pcHMvYXNtL2d0NjQxMjAuaCBiL2xpYmMva2VybmVsL2FyY2gtbWlwcy9hc20vZ3Q2NDEyMC5oCmluZGV4IGQ0Y2RhMGQuLmQzZGUxNjggMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2FyY2gtbWlwcy9hc20vZ3Q2NDEyMC5oCisrKyBiL2xpYmMva2VybmVsL2FyY2gtbWlwcy9hc20vZ3Q2NDEyMC5oCkBAIC02OSwxMCArNjksMTAgQEAKICNkZWZpbmUgR1RfUENJMU0xUkVNQVBfT0ZTIDB4MTE4CiAjZGVmaW5lIEdUX0NQVUVSUl9BRERSTE9fT0ZTIDB4MDcwCiAjZGVmaW5lIEdUX0NQVUVSUl9BRERSSElfT0ZTIDB4MDc4Ci0jZGVmaW5lIEdUX0NQVUVSUl9EQVRBTE9fT0ZTIDB4MTI4ICAKKyNkZWZpbmUgR1RfQ1BVRVJSX0RBVEFMT19PRlMgMHgxMjgKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIEdUX0NQVUVSUl9EQVRBSElfT0ZTIDB4MTMwICAKLSNkZWZpbmUgR1RfQ1BVRVJSX1BBUklUWV9PRlMgMHgxMzggIAorI2RlZmluZSBHVF9DUFVFUlJfREFUQUhJX09GUyAweDEzMAorI2RlZmluZSBHVF9DUFVFUlJfUEFSSVRZX09GUyAweDEzOAogI2RlZmluZSBHVF9QQ0kwU1lOQ19PRlMgMHgwYzAKICNkZWZpbmUgR1RfUENJMVNZTkNfT0ZTIDB4MGM4CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwpAQCAtMTE2LDEyICsxMTYsMTIgQEAKICNkZWZpbmUgR1RfREVWX0IzX09GUyAweDQ2OAogI2RlZmluZSBHVF9ERVZfQk9PVF9PRlMgMHg0NmMKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIEdUX0VDQ19FUlJEQVRBTE8gMHg0ODAgIAotI2RlZmluZSBHVF9FQ0NfRVJSREFUQUhJIDB4NDg0ICAKLSNkZWZpbmUgR1RfRUNDX01FTSAweDQ4OCAgCi0jZGVmaW5lIEdUX0VDQ19DQUxDIDB4NDhjICAKKyNkZWZpbmUgR1RfRUNDX0VSUkRBVEFMTyAweDQ4MAorI2RlZmluZSBHVF9FQ0NfRVJSREFUQUhJIDB4NDg0CisjZGVmaW5lIEdUX0VDQ19NRU0gMHg0ODgKKyNkZWZpbmUgR1RfRUNDX0NBTEMgMHg0OGMKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIEdUX0VDQ19FUlJBRERSIDB4NDkwICAKKyNkZWZpbmUgR1RfRUNDX0VSUkFERFIgMHg0OTAKICNkZWZpbmUgR1RfRE1BMF9DTlRfT0ZTIDB4ODAwCiAjZGVmaW5lIEdUX0RNQTFfQ05UX09GUyAweDgwNAogI2RlZmluZSBHVF9ETUEyX0NOVF9PRlMgMHg4MDgKQEAgLTUxOCw4ICs1MTgsOCBAQAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgR1RfREVGX1BDSTBfTUVNMF9TSVpFIDB4MDIwMDAwMDBVTAogI2RlZmluZSBHVF9ERUZfQkFTRSAweDE0MDAwMDAwVUwKLSNkZWZpbmUgR1RfTUFYX0JBTktTSVpFICgyNTYgKiAxMDI0ICogMTAyNCkgIAotI2RlZmluZSBHVF9MQVRUSU1fTUlOIDYgIAorI2RlZmluZSBHVF9NQVhfQkFOS1NJWkUgKDI1NiAqIDEwMjQgKiAxMDI0KQorI2RlZmluZSBHVF9MQVRUSU1fTUlOIDYKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjaW5jbHVkZSA8bWFjaC1ndDY0MTIwLmg+CiAjZGVmaW5lIF9fR1RfUkVBRChvZnMpICAgKCoodm9sYXRpbGUgdTMyICopKEdUNjQxMjBfQkFTRSsob2ZzKSkpCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLW1pcHMvYXNtL2hhcmRpcnEuaCBiL2xpYmMva2VybmVsL2FyY2gtbWlwcy9hc20vaGFyZGlycS5oCmluZGV4IGYzYTA1YjQuLmU3YjcwYTcgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2FyY2gtbWlwcy9hc20vaGFyZGlycS5oCisrKyBiL2xpYmMva2VybmVsL2FyY2gtbWlwcy9hc20vaGFyZGlycS5oCkBAIC0yNCw2ICsyNCw2IEBACiB0eXBlZGVmIHN0cnVjdCB7CiAgdW5zaWduZWQgaW50IF9fc29mdGlycV9wZW5kaW5nOwogfSBfX19fY2FjaGVsaW5lX2FsaWduZWQgaXJxX2NwdXN0YXRfdDsKLSNpbmNsdWRlIDxsaW51eC9pcnFfY3B1c3RhdC5oPiAgCisjaW5jbHVkZSA8bGludXgvaXJxX2NwdXN0YXQuaD4KIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gtbWlwcy9hc20vaW8uaCBiL2xpYmMva2VybmVsL2FyY2gtbWlwcy9hc20vaW8uaAppbmRleCBiMzBlNTFhLi5hYjU2ZTUwIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9hcmNoLW1pcHMvYXNtL2lvLmgKKysrIGIvbGliYy9rZXJuZWwvYXJjaC1taXBzL2FzbS9pby5oCkBAIC03Nyw3ICs3Nyw3IEBACiAjZGVmaW5lIF9fQlVJTERfSU9QT1JUX1NJTkdMRShwZngsIGJ3bHEsIHR5cGUsIHAsIHNsb3cpICAgIHN0YXRpYyBpbmxpbmUgdm9pZCBwZngjI291dCMjYndscSMjcCh0eXBlIHZhbCwgdW5zaWduZWQgbG9uZyBwb3J0KSAgeyAgIHZvbGF0aWxlIHR5cGUgKl9fYWRkcjsgICB0eXBlIF9fdmFsOyAgICAgX19hZGRyID0gKHZvaWQgKilfX3N3aXp6bGVfYWRkcl8jI2J3bHEobWlwc19pb19wb3J0X2Jhc2UgKyBwb3J0KTsgICAgIF9fdmFsID0gcGZ4IyNpb3N3YWIjI2J3bHEoX19hZGRyLCB2YWwpOyAgICAgICAgIEJVSUxEX0JVR19PTihzaXplb2YodHlwZSkgPiBzaXplb2YodW5zaWduZWQgbG9uZykpOyAgICAgKl9fYWRkciA9IF9fdmFsOyAgIHNsb3c7ICB9ICAgIHN0YXRpYyBpbmxpbmUgdHlwZSBwZngjI2luIyNid2xxIyNwKHVuc2lnbmVkIGxvbmcgcG9ydCkgIHsgICB2b2xhdGlsZSB0eXBlICpfX2FkZHI7ICAgdHlwZSBfX3ZhbDsgICAgIF9fYWRkciA9ICh2b2lkICopX19zd2l6emxlX2FkZHJfIyNid2xxKG1pcHNfaW9fcG9ydF9iYXNlICsgcG9ydCk7ICAgICBCVUlMRF9CVUdfT04oc2l6ZW9mKHR5cGUpID4gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKTsgICAgIF9fdmFsID0gKl9fYWRkcjsgICBzbG93OyAgICAgcmV0dXJuIHBmeCMjaW9zd2FiIyNid2xxKF9fYWRkciwgX192YWwpOyAgfQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19CVUlMRF9NRU1PUllfUEZYKGJ1cywgYndscSwgdHlwZSkgICAgX19CVUlMRF9NRU1PUllfU0lOR0xFKGJ1cywgYndscSwgdHlwZSwgMSkKLSNkZWZpbmUgQlVJTERJT19NRU0oYndscSwgdHlwZSkgICAgX19CVUlMRF9NRU1PUllfUEZYKF9fcmF3XywgYndscSwgdHlwZSkgIF9fQlVJTERfTUVNT1JZX1BGWCgsIGJ3bHEsIHR5cGUpICBfX0JVSUxEX01FTU9SWV9QRlgoX19tZW1fLCBid2xxLCB0eXBlKSAgCisjZGVmaW5lIEJVSUxESU9fTUVNKGJ3bHEsIHR5cGUpICAgIF9fQlVJTERfTUVNT1JZX1BGWChfX3Jhd18sIGJ3bHEsIHR5cGUpICBfX0JVSUxEX01FTU9SWV9QRlgoLCBid2xxLCB0eXBlKSAgX19CVUlMRF9NRU1PUllfUEZYKF9fbWVtXywgYndscSwgdHlwZSkKICNkZWZpbmUgX19CVUlMRF9JT1BPUlRfUEZYKGJ1cywgYndscSwgdHlwZSkgICBfX0JVSUxEX0lPUE9SVF9TSU5HTEUoYnVzLCBid2xxLCB0eXBlLCAsKSAgIF9fQlVJTERfSU9QT1JUX1NJTkdMRShidXMsIGJ3bHEsIHR5cGUsIF9wLCBTTE9XX0RPV05fSU8pCiAjZGVmaW5lIEJVSUxESU9fSU9QT1JUKGJ3bHEsIHR5cGUpICAgX19CVUlMRF9JT1BPUlRfUEZYKCwgYndscSwgdHlwZSkgICBfX0JVSUxEX0lPUE9SVF9QRlgoX19tZW1fLCBid2xxLCB0eXBlKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gtbWlwcy9hc20vaW9jdGxzLmggYi9saWJjL2tlcm5lbC9hcmNoLW1pcHMvYXNtL2lvY3Rscy5oCmluZGV4IDIwYTAyZTguLjM4ZDQyZjkgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2FyY2gtbWlwcy9hc20vaW9jdGxzLmgKKysrIGIvbGliYy9rZXJuZWwvYXJjaC1taXBzL2FzbS9pb2N0bHMuaApAQCAtMjEsNyArMjEsNyBAQAogI2luY2x1ZGUgPGFzbS9pb2N0bC5oPgogI2RlZmluZSBUQ0dFVEEgMHg1NDAxCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBUQ1NFVEEgMHg1NDAyICAKKyNkZWZpbmUgVENTRVRBIDB4NTQwMgogI2RlZmluZSBUQ1NFVEFXIDB4NTQwMwogI2RlZmluZSBUQ1NFVEFGIDB4NTQwNAogI2RlZmluZSBUQ1NCUksgMHg1NDA1CkBAIC0zMywzMCArMzMsMzAgQEAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFRDU0VUU1cgMHg1NDBmCiAjZGVmaW5lIFRDU0VUU0YgMHg1NDEwCi0jZGVmaW5lIFRJT0NFWENMIDB4NzQwZCAgCi0jZGVmaW5lIFRJT0NOWENMIDB4NzQwZSAgCisjZGVmaW5lIFRJT0NFWENMIDB4NzQwZAorI2RlZmluZSBUSU9DTlhDTCAweDc0MGUKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIFRJT0NPVVRRIDB4NzQ3MiAgCi0jZGVmaW5lIFRJT0NTVEkgMHg1NDcyICAKLSNkZWZpbmUgVElPQ01HRVQgMHg3NDFkICAKLSNkZWZpbmUgVElPQ01CSVMgMHg3NDFiICAKKyNkZWZpbmUgVElPQ09VVFEgMHg3NDcyCisjZGVmaW5lIFRJT0NTVEkgMHg1NDcyCisjZGVmaW5lIFRJT0NNR0VUIDB4NzQxZAorI2RlZmluZSBUSU9DTUJJUyAweDc0MWIKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIFRJT0NNQklDIDB4NzQxYyAgCi0jZGVmaW5lIFRJT0NNU0VUIDB4NzQxYSAgCi0jZGVmaW5lIFRJT0NQS1QgMHg1NDcwICAKLSNkZWZpbmUgVElPQ1BLVF9EQVRBIDB4MDAgIAorI2RlZmluZSBUSU9DTUJJQyAweDc0MWMKKyNkZWZpbmUgVElPQ01TRVQgMHg3NDFhCisjZGVmaW5lIFRJT0NQS1QgMHg1NDcwCisjZGVmaW5lIFRJT0NQS1RfREFUQSAweDAwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBUSU9DUEtUX0ZMVVNIUkVBRCAweDAxICAKLSNkZWZpbmUgVElPQ1BLVF9GTFVTSFdSSVRFIDB4MDIgIAotI2RlZmluZSBUSU9DUEtUX1NUT1AgMHgwNCAgCi0jZGVmaW5lIFRJT0NQS1RfU1RBUlQgMHgwOCAgCisjZGVmaW5lIFRJT0NQS1RfRkxVU0hSRUFEIDB4MDEKKyNkZWZpbmUgVElPQ1BLVF9GTFVTSFdSSVRFIDB4MDIKKyNkZWZpbmUgVElPQ1BLVF9TVE9QIDB4MDQKKyNkZWZpbmUgVElPQ1BLVF9TVEFSVCAweDA4CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBUSU9DUEtUX05PU1RPUCAweDEwICAKLSNkZWZpbmUgVElPQ1BLVF9ET1NUT1AgMHgyMCAgCi0jZGVmaW5lIFRJT0NTV0lOU1ogX0lPVygndCcsIDEwMywgc3RydWN0IHdpbnNpemUpICAKLSNkZWZpbmUgVElPQ0dXSU5TWiBfSU9SKCd0JywgMTA0LCBzdHJ1Y3Qgd2luc2l6ZSkgIAorI2RlZmluZSBUSU9DUEtUX05PU1RPUCAweDEwCisjZGVmaW5lIFRJT0NQS1RfRE9TVE9QIDB4MjAKKyNkZWZpbmUgVElPQ1NXSU5TWiBfSU9XKCd0JywgMTAzLCBzdHJ1Y3Qgd2luc2l6ZSkKKyNkZWZpbmUgVElPQ0dXSU5TWiBfSU9SKCd0JywgMTA0LCBzdHJ1Y3Qgd2luc2l6ZSkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIFRJT0NOT1RUWSAweDU0NzEgIAorI2RlZmluZSBUSU9DTk9UVFkgMHg1NDcxCiAjZGVmaW5lIFRJT0NTRVREIDB4NzQwMQogI2RlZmluZSBUSU9DR0VURCAweDc0MDAKICNkZWZpbmUgRklPQ0xFWCAweDY2MDEKQEAgLTY2LDMwICs2NiwzMCBAQAogI2RlZmluZSBGSU9OQklPIDB4NjY3ZQogI2RlZmluZSBGSU9RU0laRSAweDY2N2YKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIFRJT0NHTFRDIDB4NzQ3NCAgCi0jZGVmaW5lIFRJT0NTTFRDIDB4NzQ3NSAgCi0jZGVmaW5lIFRJT0NTUEdSUCBfSU9XKCd0JywgMTE4LCBpbnQpICAKLSNkZWZpbmUgVElPQ0dQR1JQIF9JT1IoJ3QnLCAxMTksIGludCkgIAorI2RlZmluZSBUSU9DR0xUQyAweDc0NzQKKyNkZWZpbmUgVElPQ1NMVEMgMHg3NDc1CisjZGVmaW5lIFRJT0NTUEdSUCBfSU9XKCd0JywgMTE4LCBpbnQpCisjZGVmaW5lIFRJT0NHUEdSUCBfSU9SKCd0JywgMTE5LCBpbnQpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBUSU9DQ09OUyBfSU9XKCd0JywgMTIwLCBpbnQpICAKKyNkZWZpbmUgVElPQ0NPTlMgX0lPVygndCcsIDEyMCwgaW50KQogI2RlZmluZSBGSU9OUkVBRCAweDQ2N2YKICNkZWZpbmUgVElPQ0lOUSBGSU9OUkVBRAogI2RlZmluZSBUSU9DR0VUUCAweDc0MDgKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFRJT0NTRVRQIDB4NzQwOQotI2RlZmluZSBUSU9DU0VUTiAweDc0MGEgIAotI2RlZmluZSBUSU9DU0JSSyAweDU0MjcgIAotI2RlZmluZSBUSU9DQ0JSSyAweDU0MjggIAorI2RlZmluZSBUSU9DU0VUTiAweDc0MGEKKyNkZWZpbmUgVElPQ1NCUksgMHg1NDI3CisjZGVmaW5lIFRJT0NDQlJLIDB4NTQyOAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgVElPQ0dTSUQgMHg3NDE2ICAKKyNkZWZpbmUgVElPQ0dTSUQgMHg3NDE2CiAjZGVmaW5lIFRDR0VUUzIgX0lPUignVCcsIDB4MkEsIHN0cnVjdCB0ZXJtaW9zMikKICNkZWZpbmUgVENTRVRTMiBfSU9XKCdUJywgMHgyQiwgc3RydWN0IHRlcm1pb3MyKQogI2RlZmluZSBUQ1NFVFNXMiBfSU9XKCdUJywgMHgyQywgc3RydWN0IHRlcm1pb3MyKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVENTRVRTRjIgX0lPVygnVCcsIDB4MkQsIHN0cnVjdCB0ZXJtaW9zMikKLSNkZWZpbmUgVElPQ0dQVE4gX0lPUignVCcsIDB4MzAsIHVuc2lnbmVkIGludCkgIAotI2RlZmluZSBUSU9DU1BUTENLIF9JT1coJ1QnLCAweDMxLCBpbnQpICAKLSNkZWZpbmUgVElPQ1NDVFRZIDB4NTQ4MCAgCisjZGVmaW5lIFRJT0NHUFROIF9JT1IoJ1QnLCAweDMwLCB1bnNpZ25lZCBpbnQpCisjZGVmaW5lIFRJT0NTUFRMQ0sgX0lPVygnVCcsIDB4MzEsIGludCkKKyNkZWZpbmUgVElPQ1NDVFRZIDB4NTQ4MAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVElPQ0dTT0ZUQ0FSIDB4NTQ4MQogI2RlZmluZSBUSU9DU1NPRlRDQVIgMHg1NDgyCkBAIC05NywyMiArOTcsMjIgQEAKICNkZWZpbmUgVElPQ0dTRVJJQUwgMHg1NDg0CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBUSU9DU1NFUklBTCAweDU0ODUKLSNkZWZpbmUgVENTQlJLUCAweDU0ODYgIAorI2RlZmluZSBUQ1NCUktQIDB4NTQ4NgogI2RlZmluZSBUSU9DU0VSQ09ORklHIDB4NTQ4OAogI2RlZmluZSBUSU9DU0VSR1dJTEQgMHg1NDg5CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBUSU9DU0VSU1dJTEQgMHg1NDhhCiAjZGVmaW5lIFRJT0NHTENLVFJNSU9TIDB4NTQ4YgogI2RlZmluZSBUSU9DU0xDS1RSTUlPUyAweDU0OGMKLSNkZWZpbmUgVElPQ1NFUkdTVFJVQ1QgMHg1NDhkICAKKyNkZWZpbmUgVElPQ1NFUkdTVFJVQ1QgMHg1NDhkCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBUSU9DU0VSR0VUTFNSIDB4NTQ4ZSAgCi0jZGVmaW5lIFRJT0NTRVJHRVRNVUxUSSAweDU0OGYgIAotI2RlZmluZSBUSU9DU0VSU0VUTVVMVEkgMHg1NDkwICAKLSNkZWZpbmUgVElPQ01JV0FJVCAweDU0OTEgIAorI2RlZmluZSBUSU9DU0VSR0VUTFNSIDB4NTQ4ZQorI2RlZmluZSBUSU9DU0VSR0VUTVVMVEkgMHg1NDhmCisjZGVmaW5lIFRJT0NTRVJTRVRNVUxUSSAweDU0OTAKKyNkZWZpbmUgVElPQ01JV0FJVCAweDU0OTEKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIFRJT0NHSUNPVU5UIDB4NTQ5MiAgCi0jZGVmaW5lIFRJT0NHSEFZRVNFU1AgMHg1NDkzICAKLSNkZWZpbmUgVElPQ1NIQVlFU0VTUCAweDU0OTQgIAorI2RlZmluZSBUSU9DR0lDT1VOVCAweDU0OTIKKyNkZWZpbmUgVElPQ0dIQVlFU0VTUCAweDU0OTMKKyNkZWZpbmUgVElPQ1NIQVlFU0VTUCAweDU0OTQKICNlbmRpZgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gtbWlwcy9hc20vaXAzMi9jcmltZS5oIGIvbGliYy9rZXJuZWwvYXJjaC1taXBzL2FzbS9pcDMyL2NyaW1lLmgKaW5kZXggYTk3OTcwOC4uYmNmMDM2YSAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvYXJjaC1taXBzL2FzbS9pcDMyL2NyaW1lLmgKKysrIGIvbGliYy9rZXJuZWwvYXJjaC1taXBzL2FzbS9pcDMyL2NyaW1lLmgKQEAgLTE4LDcgKzE4LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfX0FTTV9DUklNRV9IX18KICNkZWZpbmUgX19BU01fQ1JJTUVfSF9fCi0jZGVmaW5lIENSSU1FX0JBU0UgMHgxNDAwMDAwMCAgCisjZGVmaW5lIENSSU1FX0JBU0UgMHgxNDAwMDAwMAogc3RydWN0IHNnaV9jcmltZSB7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgaWQ7CkBAIC0xMDgsMTMgKzEwOCwxMyBAQAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQ1JJTUVfRE9HX1ZBTFVFIDB4MDAwMDdmZmYKICB2b2xhdGlsZSB1bnNpZ25lZCBsb25nIHRpbWVyOwotI2RlZmluZSBDUklNRV9NQVNURVJfRlJFUSA2NjY2NjUwMCAgCi0jZGVmaW5lIENSSU1FX05TX1BFUl9USUNLIDE1ICAKKyNkZWZpbmUgQ1JJTUVfTUFTVEVSX0ZSRVEgNjY2NjY1MDAKKyNkZWZpbmUgQ1JJTUVfTlNfUEVSX1RJQ0sgMTUKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBjcHVfZXJyb3JfYWRkcjsKICNkZWZpbmUgQ1JJTUVfQ1BVX0VSUk9SX0FERFJfTUFTSyAweDNmZmZmZmZmZgogIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgY3B1X2Vycm9yX3N0YXQ7Ci0jZGVmaW5lIENSSU1FX0NQVV9FUlJPUl9NQVNLIDB4NyAgCisjZGVmaW5lIENSSU1FX0NQVV9FUlJPUl9NQVNLIDB4NwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQ1JJTUVfQ1BVX0VSUk9SX0NQVV9JTExfQUREUiAweDQKICNkZWZpbmUgQ1JJTUVfQ1BVX0VSUk9SX1ZJQ0VfV1JUX1BSVFkgMHgyCkBAIC0xMjMsMTYgKzEyMywxNiBAQAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB2b2xhdGlsZSB1bnNpZ25lZCBsb25nIG1jX2N0cmw7CiAgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBiYW5rX2N0cmxbOF07Ci0jZGVmaW5lIENSSU1FX01FTV9CQU5LX0NPTlRST0xfTUFTSyAweDExZiAgCisjZGVmaW5lIENSSU1FX01FTV9CQU5LX0NPTlRST0xfTUFTSyAweDExZgogI2RlZmluZSBDUklNRV9NRU1fQkFOS19DT05UUk9MX0FERFIgMHgwMWYKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIENSSU1FX01FTV9CQU5LX0NPTlRST0xfU0RSQU1fU0laRSAweDEwMAogI2RlZmluZSBDUklNRV9NQVhCQU5LUyA4CiAgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBtZW1fcmVmX2NvdW50ZXI7Ci0jZGVmaW5lIENSSU1FX01FTV9SRUZfQ09VTlRFUl9NQVNLIDB4M2ZmICAKKyNkZWZpbmUgQ1JJTUVfTUVNX1JFRl9DT1VOVEVSX01BU0sgMHgzZmYKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBtZW1fZXJyb3Jfc3RhdDsKLSNkZWZpbmUgQ1JJTUVfTUVNX0VSUk9SX1NUQVRfTUFTSyAweDBmZjdmZmZmICAKKyNkZWZpbmUgQ1JJTUVfTUVNX0VSUk9SX1NUQVRfTUFTSyAweDBmZjdmZmZmCiAjZGVmaW5lIENSSU1FX01FTV9FUlJPUl9NQUNFX0lEIDB4MDAwMDAwN2YKICNkZWZpbmUgQ1JJTUVfTUVNX0VSUk9SX01BQ0VfQUNDRVNTIDB4MDAwMDAwODAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCkBAIC0xNjcsNSArMTY3LDUgQEAKICNkZWZpbmUgQ1JJTUVfTUVNX0VSUk9SX0VDQ19SRVBMX01BU0sgMHhmZmZmZmZmZgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07Ci0jZGVmaW5lIENSSU1FX0hJX01FTV9CQVNFIDB4NDAwMDAwMDAgIAorI2RlZmluZSBDUklNRV9ISV9NRU1fQkFTRSAweDQwMDAwMDAwCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gtbWlwcy9hc20vaXAzMi9tYWNlLmggYi9saWJjL2tlcm5lbC9hcmNoLW1pcHMvYXNtL2lwMzIvbWFjZS5oCmluZGV4IGMyYzE0OWQuLjc1OWM4NjMgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2FyY2gtbWlwcy9hc20vaXAzMi9tYWNlLmgKKysrIGIvbGliYy9rZXJuZWwvYXJjaC1taXBzL2FzbS9pcDMyL21hY2UuaApAQCAtMTgsNyArMTgsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9fQVNNX01BQ0VfSF9fCiAjZGVmaW5lIF9fQVNNX01BQ0VfSF9fCi0jZGVmaW5lIE1BQ0VfQkFTRSAweDFmMDAwMDAwICAKKyNkZWZpbmUgTUFDRV9CQVNFIDB4MWYwMDAwMDAKIHN0cnVjdCBtYWNlX3BjaSB7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHZvbGF0aWxlIHVuc2lnbmVkIGludCBlcnJvcl9hZGRyOwpAQCAtMTgyLDEzICsxODIsMTMgQEAKICNkZWZpbmUgTUFDRUlTQV9SSU5HQlVGRkVSU19TSVpFICg4ICogNDA5NikKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBtaXNjOwotI2RlZmluZSBNQUNFSVNBX0ZMQVNIX1dFIEJJVCgwKSAgCi0jZGVmaW5lIE1BQ0VJU0FfUFdEX0NMRUFSIEJJVCgxKSAgCisjZGVmaW5lIE1BQ0VJU0FfRkxBU0hfV0UgQklUKDApCisjZGVmaW5lIE1BQ0VJU0FfUFdEX0NMRUFSIEJJVCgxKQogI2RlZmluZSBNQUNFSVNBX05JQ19ERUFTU0VSVCBCSVQoMikKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1BQ0VJU0FfTklDX0RBVEEgQklUKDMpCi0jZGVmaW5lIE1BQ0VJU0FfTEVEX1JFRCBCSVQoNCkgIAotI2RlZmluZSBNQUNFSVNBX0xFRF9HUkVFTiBCSVQoNSkgIAorI2RlZmluZSBNQUNFSVNBX0xFRF9SRUQgQklUKDQpCisjZGVmaW5lIE1BQ0VJU0FfTEVEX0dSRUVOIEJJVCg1KQogI2RlZmluZSBNQUNFSVNBX0RQX1JBTV9FTkFCTEUgQklUKDYpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgaXN0YXQ7CmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLW1pcHMvYXNtL2lycS5oIGIvbGliYy9rZXJuZWwvYXJjaC1taXBzL2FzbS9pcnEuaAppbmRleCAwNDJjOTUxLi5hODk2NjA1IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9hcmNoLW1pcHMvYXNtL2lycS5oCisrKyBiL2xpYmMva2VybmVsL2FyY2gtbWlwcy9hc20vaXJxLmgKQEAgLTIyLDcgKzIyLDcgQEAKICNpbmNsdWRlIDxhc20vbWlwc210cmVncy5oPgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNpbmNsdWRlIDxpcnEuaD4KLSNkZWZpbmUgaXJxX2Nhbm9uaWNhbGl6ZShpcnEpIChpcnEpICAKKyNkZWZpbmUgaXJxX2Nhbm9uaWNhbGl6ZShpcnEpIChpcnEpCiAjZGVmaW5lIElSUV9BRkZJTklUWV9IT09LKGlycSkgZG8geyB9IHdoaWxlICgwKQogI2RlZmluZSBfX0RPX0lSUV9TTVRDX0hPT0soaXJxKSAgZG8geyAgIElSUV9BRkZJTklUWV9IT09LKGlycSk7ICB9IHdoaWxlICgwKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gtbWlwcy9hc20vamF6ei5oIGIvbGliYy9rZXJuZWwvYXJjaC1taXBzL2FzbS9qYXp6LmgKaW5kZXggNWU2ZWE4Zi4uNGZkNjFkNSAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvYXJjaC1taXBzL2FzbS9qYXp6LmgKKysrIGIvbGliYy9rZXJuZWwvYXJjaC1taXBzL2FzbS9qYXp6LmgKQEAgLTEyOCwzNSArMTI4LDM1IEBACiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBKQVpaX1NFUklBTDJfSVJRIChKQVpaX0lSUV9TVEFSVCArIDkpCiAjZGVmaW5lIEpBWlpfVElNRVJfSVJRIChNSVBTX0NQVV9JUlFfQkFTRSs2KQotI2RlZmluZSBKQVpaX1NDU0lfRE1BIDAgIAotI2RlZmluZSBKQVpaX0ZMT1BQWV9ETUEgMSAgCisjZGVmaW5lIEpBWlpfU0NTSV9ETUEgMAorI2RlZmluZSBKQVpaX0ZMT1BQWV9ETUEgMQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgSkFaWl9BVURJT0xfRE1BIDIgIAotI2RlZmluZSBKQVpaX0FVRElPUl9ETUEgMyAgCi0jZGVmaW5lIEpBWlpfUjQwMzBfQ09ORklHIDB4RTAwMDAwMDAgIAotI2RlZmluZSBKQVpaX1I0MDMwX1JFVklTSU9OIDB4RTAwMDAwMDggIAorI2RlZmluZSBKQVpaX0FVRElPTF9ETUEgMgorI2RlZmluZSBKQVpaX0FVRElPUl9ETUEgMworI2RlZmluZSBKQVpaX1I0MDMwX0NPTkZJRyAweEUwMDAwMDAwCisjZGVmaW5lIEpBWlpfUjQwMzBfUkVWSVNJT04gMHhFMDAwMDAwOAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgSkFaWl9SNDAzMF9JTlZfQUREUiAweEUwMDAwMDEwICAKLSNkZWZpbmUgSkFaWl9SNDAzMF9UUlNUQkxfQkFTRSAweEUwMDAwMDE4ICAKLSNkZWZpbmUgSkFaWl9SNDAzMF9UUlNUQkxfTElNIDB4RTAwMDAwMjAgIAotI2RlZmluZSBKQVpaX1I0MDMwX1RSU1RCTF9JTlYgMHhFMDAwMDAyOCAgCisjZGVmaW5lIEpBWlpfUjQwMzBfSU5WX0FERFIgMHhFMDAwMDAxMAorI2RlZmluZSBKQVpaX1I0MDMwX1RSU1RCTF9CQVNFIDB4RTAwMDAwMTgKKyNkZWZpbmUgSkFaWl9SNDAzMF9UUlNUQkxfTElNIDB4RTAwMDAwMjAKKyNkZWZpbmUgSkFaWl9SNDAzMF9UUlNUQkxfSU5WIDB4RTAwMDAwMjgKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIEpBWlpfUjQwMzBfQ0FDSEVfTVROQyAweEUwMDAwMDMwICAKLSNkZWZpbmUgSkFaWl9SNDAzMF9SX0ZBSUxfQUREUiAweEUwMDAwMDM4ICAKLSNkZWZpbmUgSkFaWl9SNDAzMF9NX0ZBSUxfQUREUiAweEUwMDAwMDQwICAKLSNkZWZpbmUgSkFaWl9SNDAzMF9DQUNIRV9QVEFHIDB4RTAwMDAwNDggIAorI2RlZmluZSBKQVpaX1I0MDMwX0NBQ0hFX01UTkMgMHhFMDAwMDAzMAorI2RlZmluZSBKQVpaX1I0MDMwX1JfRkFJTF9BRERSIDB4RTAwMDAwMzgKKyNkZWZpbmUgSkFaWl9SNDAzMF9NX0ZBSUxfQUREUiAweEUwMDAwMDQwCisjZGVmaW5lIEpBWlpfUjQwMzBfQ0FDSEVfUFRBRyAweEUwMDAwMDQ4CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBKQVpaX1I0MDMwX0NBQ0hFX0xUQUcgMHhFMDAwMDA1MCAgCi0jZGVmaW5lIEpBWlpfUjQwMzBfQ0FDSEVfQk1BU0sgMHhFMDAwMDA1OCAgCi0jZGVmaW5lIEpBWlpfUjQwMzBfQ0FDSEVfQldJTiAweEUwMDAwMDYwICAKLSNkZWZpbmUgSkFaWl9SNDAzMF9SRU1fU1BFRUQgMHhFMDAwMDA3MCAgCisjZGVmaW5lIEpBWlpfUjQwMzBfQ0FDSEVfTFRBRyAweEUwMDAwMDUwCisjZGVmaW5lIEpBWlpfUjQwMzBfQ0FDSEVfQk1BU0sgMHhFMDAwMDA1OAorI2RlZmluZSBKQVpaX1I0MDMwX0NBQ0hFX0JXSU4gMHhFMDAwMDA2MAorI2RlZmluZSBKQVpaX1I0MDMwX1JFTV9TUEVFRCAweEUwMDAwMDcwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBKQVpaX1I0MDMwX0lSUV9FTkFCTEUgMHhFMDAwMDBFOCAgCi0jZGVmaW5lIEpBWlpfUjQwMzBfSU5WQUxfQUREUiAweEUwMDAwMDEwICAKLSNkZWZpbmUgSkFaWl9SNDAzMF9JUlFfU09VUkNFIDB4RTAwMDAyMDAgIAotI2RlZmluZSBKQVpaX1I0MDMwX0kzODZfRVJST1IgMHhFMDAwMDIwOCAgCisjZGVmaW5lIEpBWlpfUjQwMzBfSVJRX0VOQUJMRSAweEUwMDAwMEU4CisjZGVmaW5lIEpBWlpfUjQwMzBfSU5WQUxfQUREUiAweEUwMDAwMDEwCisjZGVmaW5lIEpBWlpfUjQwMzBfSVJRX1NPVVJDRSAweEUwMDAwMjAwCisjZGVmaW5lIEpBWlpfUjQwMzBfSTM4Nl9FUlJPUiAweEUwMDAwMjA4CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBKQVpaX0VJU0FfSVJRX0FDSyAweEUwMDAwMjM4ICAKKyNkZWZpbmUgSkFaWl9FSVNBX0lSUV9BQ0sgMHhFMDAwMDIzOAogI2lmbmRlZiBfX0FTU0VNQkxZX18KICNlbmRpZgogI2RlZmluZSBKQVpaX0ZEQ19CQVNFIDB4ZTAwMDMwMDAKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gtbWlwcy9hc20vamF6emRtYS5oIGIvbGliYy9rZXJuZWwvYXJjaC1taXBzL2FzbS9qYXp6ZG1hLmgKaW5kZXggNzQyNjgwNy4uOTc0NGQ4MiAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvYXJjaC1taXBzL2FzbS9qYXp6ZG1hLmgKKysrIGIvbGliYy9rZXJuZWwvYXJjaC1taXBzL2FzbS9qYXp6ZG1hLmgKQEAgLTMyLDE4ICszMiwxOCBAQAogIHVuc2lnbmVkIGludCBvd25lcjsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9IFZETUFfUEdUQkxfRU5UUlk7Ci0jZGVmaW5lIEpBWlpfUjQwMzBfQ0hOTF9NT0RFIDB4RTAwMDAxMDAgIAotI2RlZmluZSBKQVpaX1I0MDMwX0NITkxfRU5BQkxFIDB4RTAwMDAxMDggIAotI2RlZmluZSBKQVpaX1I0MDMwX0NITkxfQ09VTlQgMHhFMDAwMDExMCAgCisjZGVmaW5lIEpBWlpfUjQwMzBfQ0hOTF9NT0RFIDB4RTAwMDAxMDAKKyNkZWZpbmUgSkFaWl9SNDAzMF9DSE5MX0VOQUJMRSAweEUwMDAwMTA4CisjZGVmaW5lIEpBWlpfUjQwMzBfQ0hOTF9DT1VOVCAweEUwMDAwMTEwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBKQVpaX1I0MDMwX0NITkxfQUREUiAweEUwMDAwMTE4ICAKKyNkZWZpbmUgSkFaWl9SNDAzMF9DSE5MX0FERFIgMHhFMDAwMDExOAogI2RlZmluZSBSNDAzMF9DSE5MX0VOQUJMRSAoMTw8MCkKICNkZWZpbmUgUjQwMzBfQ0hOTF9XUklURSAoMTw8MSkKICNkZWZpbmUgUjQwMzBfVENfSU5UUiAoMTw8OCkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFI0MDMwX01FTV9JTlRSICgxPDw5KQogI2RlZmluZSBSNDAzMF9BRERSX0lOVFIgKDE8PDEwKQotI2RlZmluZSBSNDAzMF9NT0RFX0FUSU1FXzQwICgwKSAgCisjZGVmaW5lIFI0MDMwX01PREVfQVRJTUVfNDAgKDApCiAjZGVmaW5lIFI0MDMwX01PREVfQVRJTUVfODAgKDEpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBSNDAzMF9NT0RFX0FUSU1FXzEyMCAoMikKQEAgLTUzLDEyICs1MywxMiBAQAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUjQwMzBfTU9ERV9BVElNRV8yODAgKDYpCiAjZGVmaW5lIFI0MDMwX01PREVfQVRJTUVfMzIwICg3KQotI2RlZmluZSBSNDAzMF9NT0RFX1dJRFRIXzggKDE8PDMpICAKKyNkZWZpbmUgUjQwMzBfTU9ERV9XSURUSF84ICgxPDwzKQogI2RlZmluZSBSNDAzMF9NT0RFX1dJRFRIXzE2ICgyPDwzKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUjQwMzBfTU9ERV9XSURUSF8zMiAoMzw8MykKICNkZWZpbmUgUjQwMzBfTU9ERV9JTlRSX0VOICgxPDw1KQotI2RlZmluZSBSNDAzMF9NT0RFX0JVUlNUICgxPDw2KSAgCi0jZGVmaW5lIFI0MDMwX01PREVfRkFTVF9BQ0sgKDE8PDcpICAKKyNkZWZpbmUgUjQwMzBfTU9ERV9CVVJTVCAoMTw8NikKKyNkZWZpbmUgUjQwMzBfTU9ERV9GQVNUX0FDSyAoMTw8NykKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gtbWlwcy9hc20vbGFzYXQvbGFzYXQuaCBiL2xpYmMva2VybmVsL2FyY2gtbWlwcy9hc20vbGFzYXQvbGFzYXQuaAppbmRleCBhYTI1NWY2Li5kOTMwMTE0IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9hcmNoLW1pcHMvYXNtL2xhc2F0L2xhc2F0LmgKKysrIGIvbGliYy9rZXJuZWwvYXJjaC1taXBzL2FzbS9sYXNhdC9sYXNhdC5oCkBAIC0xMzEsNyArMTMxLDcgQEAKICNkZWZpbmUgTEFTQVRfQk1JRF9TQUZFUElQRTEwMDAgNwogI2RlZmluZSBMQVNBVF9CTUlEX1VOS05PV04gMHhmCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBMQVNBVF9NQVhfQk1JRF9OQU1FUyA5ICAKKyNkZWZpbmUgTEFTQVRfTUFYX0JNSURfTkFNRVMgOQogI2RlZmluZSBMQVNBVF9IQVNfRURIQUMgKDEgPDwgMCkKICNkZWZpbmUgTEFTQVRfRURIQUNfRkFTVCAoMSA8PCAxKQogI2RlZmluZSBMQVNBVF9IQVNfRUFESSAoMSA8PCAyKQpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC1taXBzL2FzbS9sb2NhbC5oIGIvbGliYy9rZXJuZWwvYXJjaC1taXBzL2FzbS9sb2NhbC5oCmluZGV4IDlkMjE3MmIuLjNkODhmNjMgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2FyY2gtbWlwcy9hc20vbG9jYWwuaAorKysgYi9saWJjL2tlcm5lbC9hcmNoLW1pcHMvYXNtL2xvY2FsLmgKQEAgLTU3LDcgKzU3LDcgQEAKICNkZWZpbmUgX19sb2NhbF9zdWIoaSwgbCkgKChsKS0+YS5jb3VudGVyLT0oaSkpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBjcHVfbG9jYWxfd3JhcF92KGwpICAgKHsgbG9jYWxfdCByZXNfXzsgICBwcmVlbXB0X2Rpc2FibGUoKTsgICByZXNfXyA9IChsKTsgICBwcmVlbXB0X2VuYWJsZSgpOyAgIHJlc19fOyB9KQotI2RlZmluZSBjcHVfbG9jYWxfd3JhcChsKSAgICh7IHByZWVtcHRfZGlzYWJsZSgpOyAgIGw7ICAgcHJlZW1wdF9lbmFibGUoKTsgfSkgIAorI2RlZmluZSBjcHVfbG9jYWxfd3JhcChsKSAgICh7IHByZWVtcHRfZGlzYWJsZSgpOyAgIGw7ICAgcHJlZW1wdF9lbmFibGUoKTsgfSkKICNkZWZpbmUgY3B1X2xvY2FsX3JlYWQobCkgY3B1X2xvY2FsX3dyYXBfdihsb2NhbF9yZWFkKCZfX2dldF9jcHVfdmFyKGwpKSkKICNkZWZpbmUgY3B1X2xvY2FsX3NldChsLCBpKSBjcHVfbG9jYWxfd3JhcChsb2NhbF9zZXQoJl9fZ2V0X2NwdV92YXIobCksIChpKSkpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC1taXBzL2FzbS9tYWNoLWF1MXgwMC9hdTEwMDAuaCBiL2xpYmMva2VybmVsL2FyY2gtbWlwcy9hc20vbWFjaC1hdTF4MDAvYXUxMDAwLmgKaW5kZXggYzMzMTg3OS4uZGY1NmFlZiAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvYXJjaC1taXBzL2FzbS9tYWNoLWF1MXgwMC9hdTEwMDAuaAorKysgYi9saWJjL2tlcm5lbC9hcmNoLW1pcHMvYXNtL21hY2gtYXUxeDAwL2F1MTAwMC5oCkBAIC0xMzIsNyArMTMyLDcgQEAKICNkZWZpbmUgQVUxMDAwX0lOVEMxX0lOVF9MQVNUIChBVTEwMDBfSU5UQzFfSU5UX0JBU0UgKyAzMSkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFVMTAwMF9NQVhfSU5UUiBBVTEwMDBfSU5UQzFfSU5UX0xBU1QKLSNkZWZpbmUgSU5UWCAweEZGICAKKyNkZWZpbmUgSU5UWCAweEZGCiAjZGVmaW5lIFNZU19CQVNFIDB4QjE5MDAwMDAKICNkZWZpbmUgU1lTX0NPVU5URVJfQ05UUkwgKFNZU19CQVNFICsgMHgxNCkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCkBAIC00MDMsODYgKzQwMyw4NiBAQAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVUFSVF9CQVNFIFVBUlQwX0FERFIKICNkZWZpbmUgVUFSVF9ERUJVR19CQVNFIFVBUlQzX0FERFIKLSNkZWZpbmUgVUFSVF9SWCAwICAKLSNkZWZpbmUgVUFSVF9UWCA0ICAKKyNkZWZpbmUgVUFSVF9SWCAwCisjZGVmaW5lIFVBUlRfVFggNAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgVUFSVF9JRVIgOCAgCi0jZGVmaW5lIFVBUlRfSUlSIDB4QyAgCi0jZGVmaW5lIFVBUlRfRkNSIDB4MTAgIAotI2RlZmluZSBVQVJUX0xDUiAweDE0ICAKKyNkZWZpbmUgVUFSVF9JRVIgOAorI2RlZmluZSBVQVJUX0lJUiAweEMKKyNkZWZpbmUgVUFSVF9GQ1IgMHgxMAorI2RlZmluZSBVQVJUX0xDUiAweDE0CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBVQVJUX01DUiAweDE4ICAKLSNkZWZpbmUgVUFSVF9MU1IgMHgxQyAgCi0jZGVmaW5lIFVBUlRfTVNSIDB4MjAgIAotI2RlZmluZSBVQVJUX0NMSyAweDI4ICAKKyNkZWZpbmUgVUFSVF9NQ1IgMHgxOAorI2RlZmluZSBVQVJUX0xTUiAweDFDCisjZGVmaW5lIFVBUlRfTVNSIDB4MjAKKyNkZWZpbmUgVUFSVF9DTEsgMHgyOAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgVUFSVF9NT0RfQ05UUkwgMHgxMDAgIAotI2RlZmluZSBVQVJUX0ZDUl9FTkFCTEVfRklGTyAweDAxICAKLSNkZWZpbmUgVUFSVF9GQ1JfQ0xFQVJfUkNWUiAweDAyICAKLSNkZWZpbmUgVUFSVF9GQ1JfQ0xFQVJfWE1JVCAweDA0ICAKKyNkZWZpbmUgVUFSVF9NT0RfQ05UUkwgMHgxMDAKKyNkZWZpbmUgVUFSVF9GQ1JfRU5BQkxFX0ZJRk8gMHgwMQorI2RlZmluZSBVQVJUX0ZDUl9DTEVBUl9SQ1ZSIDB4MDIKKyNkZWZpbmUgVUFSVF9GQ1JfQ0xFQVJfWE1JVCAweDA0CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBVQVJUX0ZDUl9ETUFfU0VMRUNUIDB4MDggIAotI2RlZmluZSBVQVJUX0ZDUl9UUklHR0VSX01BU0sgMHhGMCAgCi0jZGVmaW5lIFVBUlRfRkNSX1JfVFJJR0dFUl8xIDB4MDAgIAotI2RlZmluZSBVQVJUX0ZDUl9SX1RSSUdHRVJfNCAweDQwICAKKyNkZWZpbmUgVUFSVF9GQ1JfRE1BX1NFTEVDVCAweDA4CisjZGVmaW5lIFVBUlRfRkNSX1RSSUdHRVJfTUFTSyAweEYwCisjZGVmaW5lIFVBUlRfRkNSX1JfVFJJR0dFUl8xIDB4MDAKKyNkZWZpbmUgVUFSVF9GQ1JfUl9UUklHR0VSXzQgMHg0MAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgVUFSVF9GQ1JfUl9UUklHR0VSXzggMHg4MCAgCi0jZGVmaW5lIFVBUlRfRkNSX1JfVFJJR0dFUl8xNCAweEEwICAKLSNkZWZpbmUgVUFSVF9GQ1JfVF9UUklHR0VSXzAgMHgwMCAgCi0jZGVmaW5lIFVBUlRfRkNSX1RfVFJJR0dFUl80IDB4MTAgIAorI2RlZmluZSBVQVJUX0ZDUl9SX1RSSUdHRVJfOCAweDgwCisjZGVmaW5lIFVBUlRfRkNSX1JfVFJJR0dFUl8xNCAweEEwCisjZGVmaW5lIFVBUlRfRkNSX1RfVFJJR0dFUl8wIDB4MDAKKyNkZWZpbmUgVUFSVF9GQ1JfVF9UUklHR0VSXzQgMHgxMAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgVUFSVF9GQ1JfVF9UUklHR0VSXzggMHgyMCAgCi0jZGVmaW5lIFVBUlRfRkNSX1RfVFJJR0dFUl8xMiAweDMwICAKLSNkZWZpbmUgVUFSVF9MQ1JfU0JDIDB4NDAgIAotI2RlZmluZSBVQVJUX0xDUl9TUEFSIDB4MjAgIAorI2RlZmluZSBVQVJUX0ZDUl9UX1RSSUdHRVJfOCAweDIwCisjZGVmaW5lIFVBUlRfRkNSX1RfVFJJR0dFUl8xMiAweDMwCisjZGVmaW5lIFVBUlRfTENSX1NCQyAweDQwCisjZGVmaW5lIFVBUlRfTENSX1NQQVIgMHgyMAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgVUFSVF9MQ1JfRVBBUiAweDEwICAKLSNkZWZpbmUgVUFSVF9MQ1JfUEFSSVRZIDB4MDggIAotI2RlZmluZSBVQVJUX0xDUl9TVE9QIDB4MDQgIAotI2RlZmluZSBVQVJUX0xDUl9XTEVONSAweDAwICAKKyNkZWZpbmUgVUFSVF9MQ1JfRVBBUiAweDEwCisjZGVmaW5lIFVBUlRfTENSX1BBUklUWSAweDA4CisjZGVmaW5lIFVBUlRfTENSX1NUT1AgMHgwNAorI2RlZmluZSBVQVJUX0xDUl9XTEVONSAweDAwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBVQVJUX0xDUl9XTEVONiAweDAxICAKLSNkZWZpbmUgVUFSVF9MQ1JfV0xFTjcgMHgwMiAgCi0jZGVmaW5lIFVBUlRfTENSX1dMRU44IDB4MDMgIAotI2RlZmluZSBVQVJUX0xTUl9URU1UIDB4NDAgIAorI2RlZmluZSBVQVJUX0xDUl9XTEVONiAweDAxCisjZGVmaW5lIFVBUlRfTENSX1dMRU43IDB4MDIKKyNkZWZpbmUgVUFSVF9MQ1JfV0xFTjggMHgwMworI2RlZmluZSBVQVJUX0xTUl9URU1UIDB4NDAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIFVBUlRfTFNSX1RIUkUgMHgyMCAgCi0jZGVmaW5lIFVBUlRfTFNSX0JJIDB4MTAgIAotI2RlZmluZSBVQVJUX0xTUl9GRSAweDA4ICAKLSNkZWZpbmUgVUFSVF9MU1JfUEUgMHgwNCAgCisjZGVmaW5lIFVBUlRfTFNSX1RIUkUgMHgyMAorI2RlZmluZSBVQVJUX0xTUl9CSSAweDEwCisjZGVmaW5lIFVBUlRfTFNSX0ZFIDB4MDgKKyNkZWZpbmUgVUFSVF9MU1JfUEUgMHgwNAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgVUFSVF9MU1JfT0UgMHgwMiAgCi0jZGVmaW5lIFVBUlRfTFNSX0RSIDB4MDEgIAotI2RlZmluZSBVQVJUX0lJUl9OT19JTlQgMHgwMSAgCi0jZGVmaW5lIFVBUlRfSUlSX0lEIDB4MDYgIAorI2RlZmluZSBVQVJUX0xTUl9PRSAweDAyCisjZGVmaW5lIFVBUlRfTFNSX0RSIDB4MDEKKyNkZWZpbmUgVUFSVF9JSVJfTk9fSU5UIDB4MDEKKyNkZWZpbmUgVUFSVF9JSVJfSUQgMHgwNgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgVUFSVF9JSVJfTVNJIDB4MDAgIAotI2RlZmluZSBVQVJUX0lJUl9USFJJIDB4MDIgIAotI2RlZmluZSBVQVJUX0lJUl9SREkgMHgwNCAgCi0jZGVmaW5lIFVBUlRfSUlSX1JMU0kgMHgwNiAgCisjZGVmaW5lIFVBUlRfSUlSX01TSSAweDAwCisjZGVmaW5lIFVBUlRfSUlSX1RIUkkgMHgwMgorI2RlZmluZSBVQVJUX0lJUl9SREkgMHgwNAorI2RlZmluZSBVQVJUX0lJUl9STFNJIDB4MDYKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIFVBUlRfSUVSX01TSSAweDA4ICAKLSNkZWZpbmUgVUFSVF9JRVJfUkxTSSAweDA0ICAKLSNkZWZpbmUgVUFSVF9JRVJfVEhSSSAweDAyICAKLSNkZWZpbmUgVUFSVF9JRVJfUkRJIDB4MDEgIAorI2RlZmluZSBVQVJUX0lFUl9NU0kgMHgwOAorI2RlZmluZSBVQVJUX0lFUl9STFNJIDB4MDQKKyNkZWZpbmUgVUFSVF9JRVJfVEhSSSAweDAyCisjZGVmaW5lIFVBUlRfSUVSX1JESSAweDAxCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBVQVJUX01DUl9MT09QIDB4MTAgIAotI2RlZmluZSBVQVJUX01DUl9PVVQyIDB4MDggIAotI2RlZmluZSBVQVJUX01DUl9PVVQxIDB4MDQgIAotI2RlZmluZSBVQVJUX01DUl9SVFMgMHgwMiAgCisjZGVmaW5lIFVBUlRfTUNSX0xPT1AgMHgxMAorI2RlZmluZSBVQVJUX01DUl9PVVQyIDB4MDgKKyNkZWZpbmUgVUFSVF9NQ1JfT1VUMSAweDA0CisjZGVmaW5lIFVBUlRfTUNSX1JUUyAweDAyCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBVQVJUX01DUl9EVFIgMHgwMSAgCi0jZGVmaW5lIFVBUlRfTVNSX0RDRCAweDgwICAKLSNkZWZpbmUgVUFSVF9NU1JfUkkgMHg0MCAgCi0jZGVmaW5lIFVBUlRfTVNSX0RTUiAweDIwICAKKyNkZWZpbmUgVUFSVF9NQ1JfRFRSIDB4MDEKKyNkZWZpbmUgVUFSVF9NU1JfRENEIDB4ODAKKyNkZWZpbmUgVUFSVF9NU1JfUkkgMHg0MAorI2RlZmluZSBVQVJUX01TUl9EU1IgMHgyMAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgVUFSVF9NU1JfQ1RTIDB4MTAgIAotI2RlZmluZSBVQVJUX01TUl9ERENEIDB4MDggIAotI2RlZmluZSBVQVJUX01TUl9URVJJIDB4MDQgIAotI2RlZmluZSBVQVJUX01TUl9ERFNSIDB4MDIgIAorI2RlZmluZSBVQVJUX01TUl9DVFMgMHgxMAorI2RlZmluZSBVQVJUX01TUl9ERENEIDB4MDgKKyNkZWZpbmUgVUFSVF9NU1JfVEVSSSAweDA0CisjZGVmaW5lIFVBUlRfTVNSX0REU1IgMHgwMgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgVUFSVF9NU1JfRENUUyAweDAxICAKLSNkZWZpbmUgVUFSVF9NU1JfQU5ZX0RFTFRBIDB4MEYgIAorI2RlZmluZSBVQVJUX01TUl9EQ1RTIDB4MDEKKyNkZWZpbmUgVUFSVF9NU1JfQU5ZX0RFTFRBIDB4MEYKICNkZWZpbmUgU1NJMF9TVEFUVVMgMHhCMTYwMDAwMAogI2RlZmluZSBTU0lfU1RBVFVTX0JGICgxIDw8IDQpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwpAQCAtNjI4LDMxICs2MjgsMzEgQEAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIElSX0lOVEVSRkFDRV9DT05GSUcgKElSREFfQkFTRSArIDB4NDApCiAjZGVmaW5lIFNZU19QSU5GVU5DIDB4QjE5MDAwMkMKLSNkZWZpbmUgU1lTX1BGX1VTQiAoMSA8PCAxNSkgIAotI2RlZmluZSBTWVNfUEZfVTMgKDEgPDwgMTQpICAKKyNkZWZpbmUgU1lTX1BGX1VTQiAoMSA8PCAxNSkKKyNkZWZpbmUgU1lTX1BGX1UzICgxIDw8IDE0KQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgU1lTX1BGX1UyICgxIDw8IDEzKSAgCi0jZGVmaW5lIFNZU19QRl9VMSAoMSA8PCAxMikgIAotI2RlZmluZSBTWVNfUEZfU1JDICgxIDw8IDExKSAgCi0jZGVmaW5lIFNZU19QRl9DSzUgKDEgPDwgMTApICAKKyNkZWZpbmUgU1lTX1BGX1UyICgxIDw8IDEzKQorI2RlZmluZSBTWVNfUEZfVTEgKDEgPDwgMTIpCisjZGVmaW5lIFNZU19QRl9TUkMgKDEgPDwgMTEpCisjZGVmaW5lIFNZU19QRl9DSzUgKDEgPDwgMTApCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBTWVNfUEZfQ0s0ICgxIDw8IDkpICAKLSNkZWZpbmUgU1lTX1BGX0lSRiAoMSA8PCA4KSAgCi0jZGVmaW5lIFNZU19QRl9VUjMgKDEgPDwgNykgIAotI2RlZmluZSBTWVNfUEZfSTJEICgxIDw8IDYpICAKKyNkZWZpbmUgU1lTX1BGX0NLNCAoMSA8PCA5KQorI2RlZmluZSBTWVNfUEZfSVJGICgxIDw8IDgpCisjZGVmaW5lIFNZU19QRl9VUjMgKDEgPDwgNykKKyNkZWZpbmUgU1lTX1BGX0kyRCAoMSA8PCA2KQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgU1lTX1BGX0kyUyAoMSA8PCA1KSAgCi0jZGVmaW5lIFNZU19QRl9OSTIgKDEgPDwgNCkgIAotI2RlZmluZSBTWVNfUEZfVTAgKDEgPDwgMykgIAotI2RlZmluZSBTWVNfUEZfUkQgKDEgPDwgMikgIAorI2RlZmluZSBTWVNfUEZfSTJTICgxIDw8IDUpCisjZGVmaW5lIFNZU19QRl9OSTIgKDEgPDwgNCkKKyNkZWZpbmUgU1lTX1BGX1UwICgxIDw8IDMpCisjZGVmaW5lIFNZU19QRl9SRCAoMSA8PCAyKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgU1lTX1BGX0E5NyAoMSA8PCAxKSAgCi0jZGVmaW5lIFNZU19QRl9TMCAoMSA8PCAwKSAgCi0jZGVmaW5lIFNZU19QRl9QQyAoMSA8PCAxOCkgIAotI2RlZmluZSBTWVNfUEZfTENEICgxIDw8IDE3KSAgCisjZGVmaW5lIFNZU19QRl9BOTcgKDEgPDwgMSkKKyNkZWZpbmUgU1lTX1BGX1MwICgxIDw8IDApCisjZGVmaW5lIFNZU19QRl9QQyAoMSA8PCAxOCkKKyNkZWZpbmUgU1lTX1BGX0xDRCAoMSA8PCAxNykKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIFNZU19QRl9DUyAoMSA8PCAxNikgIAotI2RlZmluZSBTWVNfUEZfRVgwICgxIDw8IDkpICAKKyNkZWZpbmUgU1lTX1BGX0NTICgxIDw8IDE2KQorI2RlZmluZSBTWVNfUEZfRVgwICgxIDw8IDkpCiAjZGVmaW5lIFNZU19QRl9QU0MyX01BU0sgKDcgPDwgMTcpCiAjZGVmaW5lIFNZU19QRl9QU0MyX0FDOTcgMAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gtbWlwcy9hc20vbWFjaC1nZW5lcmljL3NwYWNlcy5oIGIvbGliYy9rZXJuZWwvYXJjaC1taXBzL2FzbS9tYWNoLWdlbmVyaWMvc3BhY2VzLmgKaW5kZXggY2JkYTIzNy4uMGVjMWY1NyAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvYXJjaC1taXBzL2FzbS9tYWNoLWdlbmVyaWMvc3BhY2VzLmgKKysrIGIvbGliYy9rZXJuZWwvYXJjaC1taXBzL2FzbS9tYWNoLWdlbmVyaWMvc3BhY2VzLmgKQEAgLTIzLDggKzIzLDE5IEBACiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQSFlTX09GRlNFVCBfQUMoMCwgVUwpCiAjZW5kaWYKLSNpZm5kZWYgUEFHRV9PRkZTRVQKLSNkZWZpbmUgUEFHRV9PRkZTRVQgKENBQ19CQVNFICsgUEhZU19PRkZTRVQpCisjZGVmaW5lIENBQ19CQVNFIF9BQygweDgwMDAwMDAwLCBVTCkKKyNkZWZpbmUgSU9fQkFTRSBfQUMoMHhhMDAwMDAwMCwgVUwpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBVTkNBQ19CQVNFIF9BQygweGEwMDAwMDAwLCBVTCkKKyNpZm5kZWYgTUFQX0JBU0UKKyNkZWZpbmUgTUFQX0JBU0UgX0FDKDB4YzAwMDAwMDAsIFVMKQorI2VuZGlmCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2lmbmRlZiBISUdITUVNX1NUQVJUCisjZGVmaW5lIEhJR0hNRU1fU1RBUlQgX0FDKDB4MjAwMDAwMDAsIFVMKQorI2VuZGlmCisjaWZuZGVmIFBBR0VfT0ZGU0VUCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBQQUdFX09GRlNFVCAoQ0FDX0JBU0UgKyBQSFlTX09GRlNFVCkKICNlbmRpZgogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLW1pcHMvYXNtL21pcHMtYm9hcmRzL21zYzAxX3BjaS5oIGIvbGliYy9rZXJuZWwvYXJjaC1taXBzL2FzbS9taXBzLWJvYXJkcy9tc2MwMV9wY2kuaAppbmRleCA2MjM1ODQ3Li40ZjQwMjczIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9hcmNoLW1pcHMvYXNtL21pcHMtYm9hcmRzL21zYzAxX3BjaS5oCisrKyBiL2xpYmMva2VybmVsL2FyY2gtbWlwcy9hc20vbWlwcy1ib2FyZHMvbXNjMDFfcGNpLmgKQEAgLTM2LDI1ICszNiwyNSBAQAogI2RlZmluZSBNU0MwMV9QQ0lfQ0ZHREFUQV9PRlMgMHgwNjE4CiAjZGVmaW5lIE1TQzAxX1BDSV9JQUNLX09GUyAweDA2MjAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIE1TQzAxX1BDSV9IRUFEMF9PRlMgMHgyMDAwICAKLSNkZWZpbmUgTVNDMDFfUENJX0hFQUQxX09GUyAweDIwMDggIAotI2RlZmluZSBNU0MwMV9QQ0lfSEVBRDJfT0ZTIDB4MjAxMCAgCi0jZGVmaW5lIE1TQzAxX1BDSV9IRUFEM19PRlMgMHgyMDE4ICAKKyNkZWZpbmUgTVNDMDFfUENJX0hFQUQwX09GUyAweDIwMDAKKyNkZWZpbmUgTVNDMDFfUENJX0hFQUQxX09GUyAweDIwMDgKKyNkZWZpbmUgTVNDMDFfUENJX0hFQUQyX09GUyAweDIwMTAKKyNkZWZpbmUgTVNDMDFfUENJX0hFQUQzX09GUyAweDIwMTgKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIE1TQzAxX1BDSV9IRUFENF9PRlMgMHgyMDIwICAKLSNkZWZpbmUgTVNDMDFfUENJX0hFQUQ1X09GUyAweDIwMjggIAotI2RlZmluZSBNU0MwMV9QQ0lfSEVBRDZfT0ZTIDB4MjAzMCAgCi0jZGVmaW5lIE1TQzAxX1BDSV9IRUFEN19PRlMgMHgyMDM4ICAKKyNkZWZpbmUgTVNDMDFfUENJX0hFQUQ0X09GUyAweDIwMjAKKyNkZWZpbmUgTVNDMDFfUENJX0hFQUQ1X09GUyAweDIwMjgKKyNkZWZpbmUgTVNDMDFfUENJX0hFQUQ2X09GUyAweDIwMzAKKyNkZWZpbmUgTVNDMDFfUENJX0hFQUQ3X09GUyAweDIwMzgKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIE1TQzAxX1BDSV9IRUFEOF9PRlMgMHgyMDQwICAKLSNkZWZpbmUgTVNDMDFfUENJX0hFQUQ5X09GUyAweDIwNDggIAotI2RlZmluZSBNU0MwMV9QQ0lfSEVBRDEwX09GUyAweDIwNTAgIAotI2RlZmluZSBNU0MwMV9QQ0lfSEVBRDExX09GUyAweDIwNTggIAorI2RlZmluZSBNU0MwMV9QQ0lfSEVBRDhfT0ZTIDB4MjA0MAorI2RlZmluZSBNU0MwMV9QQ0lfSEVBRDlfT0ZTIDB4MjA0OAorI2RlZmluZSBNU0MwMV9QQ0lfSEVBRDEwX09GUyAweDIwNTAKKyNkZWZpbmUgTVNDMDFfUENJX0hFQUQxMV9PRlMgMHgyMDU4CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBNU0MwMV9QQ0lfSEVBRDEyX09GUyAweDIwNjAgIAotI2RlZmluZSBNU0MwMV9QQ0lfSEVBRDEzX09GUyAweDIwNjggIAotI2RlZmluZSBNU0MwMV9QQ0lfSEVBRDE0X09GUyAweDIwNzAgIAotI2RlZmluZSBNU0MwMV9QQ0lfSEVBRDE1X09GUyAweDIwNzggIAorI2RlZmluZSBNU0MwMV9QQ0lfSEVBRDEyX09GUyAweDIwNjAKKyNkZWZpbmUgTVNDMDFfUENJX0hFQUQxM19PRlMgMHgyMDY4CisjZGVmaW5lIE1TQzAxX1BDSV9IRUFEMTRfT0ZTIDB4MjA3MAorI2RlZmluZSBNU0MwMV9QQ0lfSEVBRDE1X09GUyAweDIwNzgKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1TQzAxX1BDSV9CQVIwX09GUyAweDIyMjAKICNkZWZpbmUgTVNDMDFfUENJX0NGR19PRlMgMHgyMzgwCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLW1pcHMvYXNtL21pcHNyZWdzLmggYi9saWJjL2tlcm5lbC9hcmNoLW1pcHMvYXNtL21pcHNyZWdzLmgKaW5kZXggMDk3NjkzOS4uOWNiMjdhYSAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvYXJjaC1taXBzL2FzbS9taXBzcmVncy5oCisrKyBiL2xpYmMva2VybmVsL2FyY2gtbWlwcy9hc20vbWlwc3JlZ3MuaApAQCAtODksMjUgKzg5LDI1IEBACiAjZGVmaW5lIENQMF9TMV9ERVJSQUREUjAgJDI2CiAjZGVmaW5lIENQMF9TMV9ERVJSQUREUjEgJDI3CiAjZGVmaW5lIENQMF9TMV9JTlRDT05UUk9MICQyMAotI2RlZmluZSBDUDBfUzJfU1JTQ1RMICQxMiAgCisjZGVmaW5lIENQMF9TMl9TUlNDVEwgJDEyCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBDUDBfUzNfU1JTTUFQICQxMiAgCisjZGVmaW5lIENQMF9TM19TUlNNQVAgJDEyCiAjZGVmaW5lIENQMF9UWDM5X0NBQ0hFICQ3CiAjZGVmaW5lIENQMV9SRVZJU0lPTiAkMAogI2RlZmluZSBDUDFfU1RBVFVTICQzMQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgRlBVX0NTUl9GTFVTSCAweDAxMDAwMDAwICAKLSNkZWZpbmUgRlBVX0NTUl9DT05EIDB4MDA4MDAwMDAgIAotI2RlZmluZSBGUFVfQ1NSX0NPTkQwIDB4MDA4MDAwMDAgIAotI2RlZmluZSBGUFVfQ1NSX0NPTkQxIDB4MDIwMDAwMDAgIAorI2RlZmluZSBGUFVfQ1NSX0ZMVVNIIDB4MDEwMDAwMDAKKyNkZWZpbmUgRlBVX0NTUl9DT05EIDB4MDA4MDAwMDAKKyNkZWZpbmUgRlBVX0NTUl9DT05EMCAweDAwODAwMDAwCisjZGVmaW5lIEZQVV9DU1JfQ09ORDEgMHgwMjAwMDAwMAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgRlBVX0NTUl9DT05EMiAweDA0MDAwMDAwICAKLSNkZWZpbmUgRlBVX0NTUl9DT05EMyAweDA4MDAwMDAwICAKLSNkZWZpbmUgRlBVX0NTUl9DT05ENCAweDEwMDAwMDAwICAKLSNkZWZpbmUgRlBVX0NTUl9DT05ENSAweDIwMDAwMDAwICAKKyNkZWZpbmUgRlBVX0NTUl9DT05EMiAweDA0MDAwMDAwCisjZGVmaW5lIEZQVV9DU1JfQ09ORDMgMHgwODAwMDAwMAorI2RlZmluZSBGUFVfQ1NSX0NPTkQ0IDB4MTAwMDAwMDAKKyNkZWZpbmUgRlBVX0NTUl9DT05ENSAweDIwMDAwMDAwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBGUFVfQ1NSX0NPTkQ2IDB4NDAwMDAwMDAgIAotI2RlZmluZSBGUFVfQ1NSX0NPTkQ3IDB4ODAwMDAwMDAgIAorI2RlZmluZSBGUFVfQ1NSX0NPTkQ2IDB4NDAwMDAwMDAKKyNkZWZpbmUgRlBVX0NTUl9DT05ENyAweDgwMDAwMDAwCiAjZGVmaW5lIEZQVV9DU1JfQUxMX1ggMHgwMDAzZjAwMAogI2RlZmluZSBGUFVfQ1NSX1VOSV9YIDB4MDAwMjAwMDAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCkBAIC0xMzIsMTEgKzEzMiwxMSBAQAogI2RlZmluZSBGUFVfQ1NSX1VERl9TIDB4MDAwMDAwMDgKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEZQVV9DU1JfSU5FX1MgMHgwMDAwMDAwNAotI2RlZmluZSBGUFVfQ1NSX1JOIDB4MCAgCi0jZGVmaW5lIEZQVV9DU1JfUlogMHgxICAKLSNkZWZpbmUgRlBVX0NTUl9SVSAweDIgIAorI2RlZmluZSBGUFVfQ1NSX1JOIDB4MAorI2RlZmluZSBGUFVfQ1NSX1JaIDB4MQorI2RlZmluZSBGUFVfQ1NSX1JVIDB4MgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgRlBVX0NTUl9SRCAweDMgIAorI2RlZmluZSBGUFVfQ1NSX1JEIDB4MwogI2RlZmluZSBQTV80SyAweDAwMDAwMDAwCiAjZGVmaW5lIFBNXzE2SyAweDAwMDA2MDAwCiAjZGVmaW5lIFBNXzY0SyAweDAwMDFlMDAwCkBAIC0zMDIsNyArMzAyLDcgQEAKICNkZWZpbmUgU1QwX0NVMiAweDQwMDAwMDAwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTVDBfQ1UzIDB4ODAwMDAwMDAKLSNkZWZpbmUgU1QwX1hYIDB4ODAwMDAwMDAgIAorI2RlZmluZSBTVDBfWFggMHg4MDAwMDAwMAogI2RlZmluZSBDQVVTRUJfRVhDQ09ERSAyCiAjZGVmaW5lIENBVVNFRl9FWENDT0RFIChfVUxDQVNUXygzMSkgPDwgMikKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCkBAIC00MTEsNyArNDExLDcgQEAKICNkZWZpbmUgUjMwWFhfQ09ORl9MT0NLIChfVUxDQVNUXygxKSA8PCAzMSkKICNkZWZpbmUgVFg0OV9DT05GX0RDIChfVUxDQVNUXygxKSA8PCAxNikKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIFRYNDlfQ09ORl9JQyAoX1VMQ0FTVF8oMSkgPDwgMTcpICAKKyNkZWZpbmUgVFg0OV9DT05GX0lDIChfVUxDQVNUXygxKSA8PCAxNykKICNkZWZpbmUgVFg0OV9DT05GX0hBTFQgKF9VTENBU1RfKDEpIDw8IDE4KQogI2RlZmluZSBUWDQ5X0NPTkZfQ1dGT04gKF9VTENBU1RfKDEpIDw8IDI3KQogI2RlZmluZSBNSVBTX0NPTkZfTVQgKF9VTENBU1RfKDcpIDw8IDcpCkBAIC01MTIsMjcgKzUxMiwyNyBAQAogI2RlZmluZSB3cml0ZV9jMF93aXJlZCh2YWwpIF9fd3JpdGVfMzJiaXRfYzBfcmVnaXN0ZXIoJDYsIDAsIHZhbCkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIHJlYWRfYzBfaW5mbygpIF9fcmVhZF8zMmJpdF9jMF9yZWdpc3RlcigkNywgMCkKLSNkZWZpbmUgcmVhZF9jMF9jYWNoZSgpIF9fcmVhZF8zMmJpdF9jMF9yZWdpc3RlcigkNywgMCkgIAorI2RlZmluZSByZWFkX2MwX2NhY2hlKCkgX19yZWFkXzMyYml0X2MwX3JlZ2lzdGVyKCQ3LCAwKQogI2RlZmluZSB3cml0ZV9jMF9jYWNoZSh2YWwpIF9fd3JpdGVfMzJiaXRfYzBfcmVnaXN0ZXIoJDcsIDAsIHZhbCkKICNkZWZpbmUgcmVhZF9jMF9iYWR2YWRkcigpIF9fcmVhZF91bG9uZ19jMF9yZWdpc3RlcigkOCwgMCkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIHdyaXRlX2MwX2JhZHZhZGRyKHZhbCkgX193cml0ZV91bG9uZ19jMF9yZWdpc3RlcigkOCwgMCwgdmFsKQogI2RlZmluZSByZWFkX2MwX2NvdW50KCkgX19yZWFkXzMyYml0X2MwX3JlZ2lzdGVyKCQ5LCAwKQogI2RlZmluZSB3cml0ZV9jMF9jb3VudCh2YWwpIF9fd3JpdGVfMzJiaXRfYzBfcmVnaXN0ZXIoJDksIDAsIHZhbCkKLSNkZWZpbmUgcmVhZF9jMF9jb3VudDIoKSBfX3JlYWRfMzJiaXRfYzBfcmVnaXN0ZXIoJDksIDYpICAKKyNkZWZpbmUgcmVhZF9jMF9jb3VudDIoKSBfX3JlYWRfMzJiaXRfYzBfcmVnaXN0ZXIoJDksIDYpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSB3cml0ZV9jMF9jb3VudDIodmFsKSBfX3dyaXRlXzMyYml0X2MwX3JlZ2lzdGVyKCQ5LCA2LCB2YWwpCi0jZGVmaW5lIHJlYWRfYzBfY291bnQzKCkgX19yZWFkXzMyYml0X2MwX3JlZ2lzdGVyKCQ5LCA3KSAgCisjZGVmaW5lIHJlYWRfYzBfY291bnQzKCkgX19yZWFkXzMyYml0X2MwX3JlZ2lzdGVyKCQ5LCA3KQogI2RlZmluZSB3cml0ZV9jMF9jb3VudDModmFsKSBfX3dyaXRlXzMyYml0X2MwX3JlZ2lzdGVyKCQ5LCA3LCB2YWwpCiAjZGVmaW5lIHJlYWRfYzBfZW50cnloaSgpIF9fcmVhZF91bG9uZ19jMF9yZWdpc3RlcigkMTAsIDApCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSB3cml0ZV9jMF9lbnRyeWhpKHZhbCkgX193cml0ZV91bG9uZ19jMF9yZWdpc3RlcigkMTAsIDAsIHZhbCkKICNkZWZpbmUgcmVhZF9jMF9jb21wYXJlKCkgX19yZWFkXzMyYml0X2MwX3JlZ2lzdGVyKCQxMSwgMCkKICNkZWZpbmUgd3JpdGVfYzBfY29tcGFyZSh2YWwpIF9fd3JpdGVfMzJiaXRfYzBfcmVnaXN0ZXIoJDExLCAwLCB2YWwpCi0jZGVmaW5lIHJlYWRfYzBfY29tcGFyZTIoKSBfX3JlYWRfMzJiaXRfYzBfcmVnaXN0ZXIoJDExLCA2KSAgCisjZGVmaW5lIHJlYWRfYzBfY29tcGFyZTIoKSBfX3JlYWRfMzJiaXRfYzBfcmVnaXN0ZXIoJDExLCA2KQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgd3JpdGVfYzBfY29tcGFyZTIodmFsKSBfX3dyaXRlXzMyYml0X2MwX3JlZ2lzdGVyKCQxMSwgNiwgdmFsKQotI2RlZmluZSByZWFkX2MwX2NvbXBhcmUzKCkgX19yZWFkXzMyYml0X2MwX3JlZ2lzdGVyKCQxMSwgNykgIAorI2RlZmluZSByZWFkX2MwX2NvbXBhcmUzKCkgX19yZWFkXzMyYml0X2MwX3JlZ2lzdGVyKCQxMSwgNykKICNkZWZpbmUgd3JpdGVfYzBfY29tcGFyZTModmFsKSBfX3dyaXRlXzMyYml0X2MwX3JlZ2lzdGVyKCQxMSwgNywgdmFsKQogI2RlZmluZSByZWFkX2MwX3N0YXR1cygpIF9fcmVhZF8zMmJpdF9jMF9yZWdpc3RlcigkMTIsIDApCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC1taXBzL2FzbS9tbWFuLmggYi9saWJjL2tlcm5lbC9hcmNoLW1pcHMvYXNtL21tYW4uaAppbmRleCA5ZTUxYzY3Li40M2VlM2RjIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9hcmNoLW1pcHMvYXNtL21tYW4uaAorKysgYi9saWJjL2tlcm5lbC9hcmNoLW1pcHMvYXNtL21tYW4uaApAQCAtMTgsNTEgKzE4LDYyIEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX0FTTV9NTUFOX0gKICNkZWZpbmUgX0FTTV9NTUFOX0gKLSNkZWZpbmUgUFJPVF9OT05FIDB4MDAgIAotI2RlZmluZSBQUk9UX1JFQUQgMHgwMSAgCisjZGVmaW5lIFBST1RfTk9ORSAweDAwCisjZGVmaW5lIFBST1RfUkVBRCAweDAxCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBQUk9UX1dSSVRFIDB4MDIgIAotI2RlZmluZSBQUk9UX0VYRUMgMHgwNCAgCi0jZGVmaW5lIFBST1RfU0VNIDB4MTAgIAotI2RlZmluZSBQUk9UX0dST1dTRE9XTiAweDAxMDAwMDAwICAKKyNkZWZpbmUgUFJPVF9XUklURSAweDAyCisjZGVmaW5lIFBST1RfRVhFQyAweDA0CisjZGVmaW5lIFBST1RfU0VNIDB4MTAKKyNkZWZpbmUgUFJPVF9HUk9XU0RPV04gMHgwMTAwMDAwMAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgUFJPVF9HUk9XU1VQIDB4MDIwMDAwMDAgIAotI2RlZmluZSBNQVBfU0hBUkVEIDB4MDAxICAKLSNkZWZpbmUgTUFQX1BSSVZBVEUgMHgwMDIgIAotI2RlZmluZSBNQVBfVFlQRSAweDAwZiAgCisjZGVmaW5lIFBST1RfR1JPV1NVUCAweDAyMDAwMDAwCisjZGVmaW5lIE1BUF9TSEFSRUQgMHgwMDEKKyNkZWZpbmUgTUFQX1BSSVZBVEUgMHgwMDIKKyNkZWZpbmUgTUFQX1RZUEUgMHgwMGYKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIE1BUF9GSVhFRCAweDAxMCAgCi0jZGVmaW5lIE1BUF9SRU5BTUUgMHgwMjAgIAotI2RlZmluZSBNQVBfQVVUT0dST1cgMHgwNDAgIAotI2RlZmluZSBNQVBfTE9DQUwgMHgwODAgIAorI2RlZmluZSBNQVBfRklYRUQgMHgwMTAKKyNkZWZpbmUgTUFQX1JFTkFNRSAweDAyMAorI2RlZmluZSBNQVBfQVVUT0dST1cgMHgwNDAKKyNkZWZpbmUgTUFQX0xPQ0FMIDB4MDgwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBNQVBfQVVUT1JTUlYgMHgxMDAgIAotI2RlZmluZSBNQVBfTk9SRVNFUlZFIDB4MDQwMCAgCi0jZGVmaW5lIE1BUF9BTk9OWU1PVVMgMHgwODAwICAKLSNkZWZpbmUgTUFQX0dST1dTRE9XTiAweDEwMDAgIAorI2RlZmluZSBNQVBfQVVUT1JTUlYgMHgxMDAKKyNkZWZpbmUgTUFQX05PUkVTRVJWRSAweDA0MDAKKyNkZWZpbmUgTUFQX0FOT05ZTU9VUyAweDA4MDAKKyNkZWZpbmUgTUFQX0dST1dTRE9XTiAweDEwMDAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIE1BUF9ERU5ZV1JJVEUgMHgyMDAwICAKLSNkZWZpbmUgTUFQX0VYRUNVVEFCTEUgMHg0MDAwICAKLSNkZWZpbmUgTUFQX0xPQ0tFRCAweDgwMDAgIAotI2RlZmluZSBNQVBfUE9QVUxBVEUgMHgxMDAwMCAgCisjZGVmaW5lIE1BUF9ERU5ZV1JJVEUgMHgyMDAwCisjZGVmaW5lIE1BUF9FWEVDVVRBQkxFIDB4NDAwMAorI2RlZmluZSBNQVBfTE9DS0VEIDB4ODAwMAorI2RlZmluZSBNQVBfUE9QVUxBVEUgMHgxMDAwMAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgTUFQX05PTkJMT0NLIDB4MjAwMDAgIAotI2RlZmluZSBNU19BU1lOQyAweDAwMDEgIAotI2RlZmluZSBNU19JTlZBTElEQVRFIDB4MDAwMiAgCi0jZGVmaW5lIE1TX1NZTkMgMHgwMDA0ICAKKyNkZWZpbmUgTUFQX05PTkJMT0NLIDB4MjAwMDAKKyNkZWZpbmUgTUFQX1NUQUNLIDB4NDAwMDAKKyNkZWZpbmUgTUFQX0hVR0VUTEIgMHg4MDAwMAorI2RlZmluZSBNU19BU1lOQyAweDAwMDEKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIE1DTF9DVVJSRU5UIDEgIAotI2RlZmluZSBNQ0xfRlVUVVJFIDIgIAotI2RlZmluZSBNQURWX05PUk1BTCAwICAKLSNkZWZpbmUgTUFEVl9SQU5ET00gMSAgCisjZGVmaW5lIE1TX0lOVkFMSURBVEUgMHgwMDAyCisjZGVmaW5lIE1TX1NZTkMgMHgwMDA0CisjZGVmaW5lIE1DTF9DVVJSRU5UIDEKKyNkZWZpbmUgTUNMX0ZVVFVSRSAyCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBNQURWX1NFUVVFTlRJQUwgMiAgCi0jZGVmaW5lIE1BRFZfV0lMTE5FRUQgMyAgCi0jZGVmaW5lIE1BRFZfRE9OVE5FRUQgNCAgCi0jZGVmaW5lIE1BRFZfUkVNT1ZFIDkgIAorI2RlZmluZSBNQURWX05PUk1BTCAwCisjZGVmaW5lIE1BRFZfUkFORE9NIDEKKyNkZWZpbmUgTUFEVl9TRVFVRU5USUFMIDIKKyNkZWZpbmUgTUFEVl9XSUxMTkVFRCAzCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBNQURWX0RPTlRGT1JLIDEwICAKLSNkZWZpbmUgTUFEVl9ET0ZPUksgMTEgIAorI2RlZmluZSBNQURWX0RPTlRORUVEIDQKKyNkZWZpbmUgTUFEVl9SRU1PVkUgOQorI2RlZmluZSBNQURWX0RPTlRGT1JLIDEwCisjZGVmaW5lIE1BRFZfRE9GT1JLIDExCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBNQURWX01FUkdFQUJMRSAxMgorI2RlZmluZSBNQURWX1VOTUVSR0VBQkxFIDEzCisjZGVmaW5lIE1BRFZfSFdQT0lTT04gMTAwCisjZGVmaW5lIE1BRFZfSFVHRVBBR0UgMTQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIE1BRFZfTk9IVUdFUEFHRSAxNQorI2RlZmluZSBNQURWX0RPTlREVU1QIDE2CisjZGVmaW5lIE1BRFZfRE9EVU1QIDE3CiAjZGVmaW5lIE1BUF9GSUxFIDAKLSNlbmRpZgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC1taXBzL2FzbS9tb2R1bGUuaCBiL2xpYmMva2VybmVsL2FyY2gtbWlwcy9hc20vbW9kdWxlLmgKaW5kZXggNDU4MDhlOS4uZGQyNDI5MCAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvYXJjaC1taXBzL2FzbS9tb2R1bGUuaAorKysgYi9saWJjL2tlcm5lbC9hcmNoLW1pcHMvYXNtL21vZHVsZS5oCkBAIC00OSw4ICs0OSwyMCBAQAogIEVsZjY0X0J5dGUgcl90eXBlOwogIEVsZjY0X1N4d29yZCByX2FkZGVuZDsKIH0gRWxmNjRfTWlwc19SZWxhOworI2RlZmluZSBFbGZfU2hkciBFbGYzMl9TaGRyCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBFbGZfU3ltIEVsZjMyX1N5bQorI2RlZmluZSBFbGZfRWhkciBFbGYzMl9FaGRyCisjZGVmaW5lIEVsZl9BZGRyIEVsZjMyX0FkZHIKKyNkZWZpbmUgRWxmX01pcHNfUmVsIEVsZjMyX1JlbAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgRWxmX01pcHNfUmVsYSBFbGYzMl9SZWxhCisjZGVmaW5lIEVMRl9NSVBTX1JfU1lNKHJlbCkgRUxGMzJfUl9TWU0ocmVsLnJfaW5mbykKKyNkZWZpbmUgRUxGX01JUFNfUl9UWVBFKHJlbCkgRUxGMzJfUl9UWVBFKHJlbC5yX2luZm8pCiAjZXJyb3IgTU9EVUxFX1BST0NfRkFNSUxZIHVuZGVmaW5lZCBmb3IgeW91ciBwcm9jZXNzb3IgY29uZmlndXJhdGlvbgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgTU9EVUxFX0tFUk5FTF9UWVBFICIzMkJJVCAiCiAjZGVmaW5lIE1PRFVMRV9LRVJORUxfU01UQyAiIgogI2RlZmluZSBNT0RVTEVfQVJDSF9WRVJNQUdJQyAgIE1PRFVMRV9QUk9DX0ZBTUlMWSBNT0RVTEVfS0VSTkVMX1RZUEUgTU9EVUxFX0tFUk5FTF9TTVRDCiAjZW5kaWYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLW1pcHMvYXNtL21zZ2J1Zi5oIGIvbGliYy9rZXJuZWwvYXJjaC1taXBzL2FzbS9tc2didWYuaAppbmRleCAzMWExODg3Li5kODFkYTczIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9hcmNoLW1pcHMvYXNtL21zZ2J1Zi5oCisrKyBiL2xpYmMva2VybmVsL2FyY2gtbWlwcy9hc20vbXNnYnVmLmgKQEAgLTIxLDE4ICsyMSwyMSBAQAogc3RydWN0IG1zcWlkNjRfZHMgewogIHN0cnVjdCBpcGM2NF9wZXJtIG1zZ19wZXJtOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyB1bnNpZ25lZCBsb25nIF9fdW51c2VkMTsKICBfX2tlcm5lbF90aW1lX3QgbXNnX3N0aW1lOworIHVuc2lnbmVkIGxvbmcgX191bnVzZWQyOwogIF9fa2VybmVsX3RpbWVfdCBtc2dfcnRpbWU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIHVuc2lnbmVkIGxvbmcgX191bnVzZWQzOwogIF9fa2VybmVsX3RpbWVfdCBtc2dfY3RpbWU7CiAgdW5zaWduZWQgbG9uZyBtc2dfY2J5dGVzOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBsb25nIG1zZ19xbnVtOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBsb25nIG1zZ19xYnl0ZXM7CiAgX19rZXJuZWxfcGlkX3QgbXNnX2xzcGlkOwogIF9fa2VybmVsX3BpZF90IG1zZ19scnBpZDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgbG9uZyBfX3VudXNlZDQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGxvbmcgX191bnVzZWQ1OwogfTsKICNlbmRpZgotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gtbWlwcy9hc20vcGNpL2JyaWRnZS5oIGIvbGliYy9rZXJuZWwvYXJjaC1taXBzL2FzbS9wY2kvYnJpZGdlLmgKaW5kZXggY2QyZmRlNC4uM2Y0MjFlMyAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvYXJjaC1taXBzL2FzbS9wY2kvYnJpZGdlLmgKKysrIGIvbGliYy9rZXJuZWwvYXJjaC1taXBzL2FzbS9wY2kvYnJpZGdlLmgKQEAgLTIxLDI0ICsyMSwyNCBAQAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2luY2x1ZGUgPGFzbS94dGFsay94d2lkZ2V0Lmg+ICAKKyNpbmNsdWRlIDxhc20veHRhbGsveHdpZGdldC5oPgogI2luY2x1ZGUgPGFzbS9zbi90eXBlcy5oPgotI2RlZmluZSBJT1BGTlNISUZUIDEyICAKKyNkZWZpbmUgSU9QRk5TSElGVCAxMgogI2RlZmluZSBJT1BHU0laRSAoMSA8PCBJT1BGTlNISUZUKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSU9QRyh4KSAoKHgpID4+IElPUEZOU0hJRlQpCiAjZGVmaW5lIElPUEdPRkYoeCkgKCh4KSAmIChJT1BHU0laRS0xKSkKLSNkZWZpbmUgQlJJREdFX0FURV9SQU1fU0laRSAweDAwMDAwNDAwICAKKyNkZWZpbmUgQlJJREdFX0FURV9SQU1fU0laRSAweDAwMDAwNDAwCiAjZGVmaW5lIEJSSURHRV9DT05GSUdfQkFTRSAweDIwMDAwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBCUklER0VfQ09ORklHMV9CQVNFIDB4MjgwMDAKICNkZWZpbmUgQlJJREdFX0NPTkZJR19FTkQgMHgzMDAwMAogI2RlZmluZSBCUklER0VfQ09ORklHX1NMT1RfU0laRSAweDEwMDAKLSNkZWZpbmUgQlJJREdFX1NTUkFNXzUxMksgMHgwMDA4MDAwMCAgCisjZGVmaW5lIEJSSURHRV9TU1JBTV81MTJLIDB4MDAwODAwMDAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIEJSSURHRV9TU1JBTV8xMjhLIDB4MDAwMjAwMDAgIAotI2RlZmluZSBCUklER0VfU1NSQU1fNjRLIDB4MDAwMTAwMDAgIAotI2RlZmluZSBCUklER0VfU1NSQU1fMEsgMHgwMDAwMDAwMCAgCisjZGVmaW5lIEJSSURHRV9TU1JBTV8xMjhLIDB4MDAwMjAwMDAKKyNkZWZpbmUgQlJJREdFX1NTUkFNXzY0SyAweDAwMDEwMDAwCisjZGVmaW5lIEJSSURHRV9TU1JBTV8wSyAweDAwMDAwMDAwCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHR5cGVkZWYgdTMyIGJyaWRnZXJlZ190OwpAQCAtMTM4LDggKzEzOCw4IEBACiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGJyaWRnZXJlZ190IHJlZzsKICB9IGJfcnJiX21hcFsyXTsKLSNkZWZpbmUgYl9ldmVuX3Jlc3AgYl9ycmJfbWFwWzBdLnJlZyAgCi0jZGVmaW5lIGJfb2RkX3Jlc3AgYl9ycmJfbWFwWzFdLnJlZyAgCisjZGVmaW5lIGJfZXZlbl9yZXNwIGJfcnJiX21hcFswXS5yZWcKKyNkZWZpbmUgYl9vZGRfcmVzcCBiX3JyYl9tYXBbMV0ucmVnCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGJyaWRnZXJlZ190IF9wYWRfMDAwMjkwOwogIGJyaWRnZXJlZ190IGJfcmVzcF9zdGF0dXM7CkBAIC0yNTYsNjggKzI1Niw2OCBAQAogI2RlZmluZSBCUklER0VfV0lEX0xMUCBXSURHRVRfTExQX0NGRwogI2RlZmluZSBCUklER0VfV0lEX1RGTFVTSCBXSURHRVRfVEZMVVNICiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBCUklER0VfV0lEX0FVWF9FUlIgMHgwMDAwNUMgIAotI2RlZmluZSBCUklER0VfV0lEX1JFU1BfVVBQRVIgMHgwMDAwNjQgIAotI2RlZmluZSBCUklER0VfV0lEX1JFU1BfTE9XRVIgMHgwMDAwNkMgIAotI2RlZmluZSBCUklER0VfV0lEX1RTVF9QSU5fQ1RSTCAweDAwMDA3NCAgCisjZGVmaW5lIEJSSURHRV9XSURfQVVYX0VSUiAweDAwMDA1QworI2RlZmluZSBCUklER0VfV0lEX1JFU1BfVVBQRVIgMHgwMDAwNjQKKyNkZWZpbmUgQlJJREdFX1dJRF9SRVNQX0xPV0VSIDB4MDAwMDZDCisjZGVmaW5lIEJSSURHRV9XSURfVFNUX1BJTl9DVFJMIDB4MDAwMDc0CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBCUklER0VfRElSX01BUCAweDAwMDA4NCAgCi0jZGVmaW5lIEJSSURHRV9SQU1fUEVSUiAweDAwMDA5NCAgCi0jZGVmaW5lIEJSSURHRV9BUkIgMHgwMDAwQTQgIAotI2RlZmluZSBCUklER0VfTklDIDB4MDAwMEI0ICAKKyNkZWZpbmUgQlJJREdFX0RJUl9NQVAgMHgwMDAwODQKKyNkZWZpbmUgQlJJREdFX1JBTV9QRVJSIDB4MDAwMDk0CisjZGVmaW5lIEJSSURHRV9BUkIgMHgwMDAwQTQKKyNkZWZpbmUgQlJJREdFX05JQyAweDAwMDBCNAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgQlJJREdFX0JVU19USU1FT1VUIDB4MDAwMEM0ICAKKyNkZWZpbmUgQlJJREdFX0JVU19USU1FT1VUIDB4MDAwMEM0CiAjZGVmaW5lIEJSSURHRV9QQ0lfQlVTX1RJTUVPVVQgQlJJREdFX0JVU19USU1FT1VUCi0jZGVmaW5lIEJSSURHRV9QQ0lfQ0ZHIDB4MDAwMENDICAKLSNkZWZpbmUgQlJJREdFX1BDSV9FUlJfVVBQRVIgMHgwMDAwRDQgIAorI2RlZmluZSBCUklER0VfUENJX0NGRyAweDAwMDBDQworI2RlZmluZSBCUklER0VfUENJX0VSUl9VUFBFUiAweDAwMDBENAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgQlJJREdFX1BDSV9FUlJfTE9XRVIgMHgwMDAwREMgIAotI2RlZmluZSBCUklER0VfSU5UX1NUQVRVUyAweDAwMDEwNCAgCi0jZGVmaW5lIEJSSURHRV9JTlRfRU5BQkxFIDB4MDAwMTBDICAKLSNkZWZpbmUgQlJJREdFX0lOVF9SU1RfU1RBVCAweDAwMDExNCAgCisjZGVmaW5lIEJSSURHRV9QQ0lfRVJSX0xPV0VSIDB4MDAwMERDCisjZGVmaW5lIEJSSURHRV9JTlRfU1RBVFVTIDB4MDAwMTA0CisjZGVmaW5lIEJSSURHRV9JTlRfRU5BQkxFIDB4MDAwMTBDCisjZGVmaW5lIEJSSURHRV9JTlRfUlNUX1NUQVQgMHgwMDAxMTQKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIEJSSURHRV9JTlRfTU9ERSAweDAwMDExQyAgCi0jZGVmaW5lIEJSSURHRV9JTlRfREVWSUNFIDB4MDAwMTI0ICAKLSNkZWZpbmUgQlJJREdFX0lOVF9IT1NUX0VSUiAweDAwMDEyQyAgCi0jZGVmaW5lIEJSSURHRV9JTlRfQUREUjAgMHgwMDAxMzQgIAorI2RlZmluZSBCUklER0VfSU5UX01PREUgMHgwMDAxMUMKKyNkZWZpbmUgQlJJREdFX0lOVF9ERVZJQ0UgMHgwMDAxMjQKKyNkZWZpbmUgQlJJREdFX0lOVF9IT1NUX0VSUiAweDAwMDEyQworI2RlZmluZSBCUklER0VfSU5UX0FERFIwIDB4MDAwMTM0CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBCUklER0VfSU5UX0FERFJfT0ZGIDB4MDAwMDA4ICAKKyNkZWZpbmUgQlJJREdFX0lOVF9BRERSX09GRiAweDAwMDAwOAogI2RlZmluZSBCUklER0VfSU5UX0FERFIoeCkgKEJSSURHRV9JTlRfQUREUjArKHgpKkJSSURHRV9JTlRfQUREUl9PRkYpCi0jZGVmaW5lIEJSSURHRV9ERVZJQ0UwIDB4MDAwMjA0ICAKLSNkZWZpbmUgQlJJREdFX0RFVklDRV9PRkYgMHgwMDAwMDggIAorI2RlZmluZSBCUklER0VfREVWSUNFMCAweDAwMDIwNAorI2RlZmluZSBCUklER0VfREVWSUNFX09GRiAweDAwMDAwOAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQlJJREdFX0RFVklDRSh4KSAoQlJJREdFX0RFVklDRTArKHgpKkJSSURHRV9ERVZJQ0VfT0ZGKQotI2RlZmluZSBCUklER0VfV1JfUkVRX0JVRjAgMHgwMDAyNDQgIAotI2RlZmluZSBCUklER0VfV1JfUkVRX0JVRl9PRkYgMHgwMDAwMDggIAorI2RlZmluZSBCUklER0VfV1JfUkVRX0JVRjAgMHgwMDAyNDQKKyNkZWZpbmUgQlJJREdFX1dSX1JFUV9CVUZfT0ZGIDB4MDAwMDA4CiAjZGVmaW5lIEJSSURHRV9XUl9SRVFfQlVGKHgpIChCUklER0VfV1JfUkVRX0JVRjArKHgpKkJSSURHRV9XUl9SRVFfQlVGX09GRikKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIEJSSURHRV9FVkVOX1JFU1AgMHgwMDAyODQgIAotI2RlZmluZSBCUklER0VfT0REX1JFU1AgMHgwMDAyOEMgIAotI2RlZmluZSBCUklER0VfUkVTUF9TVEFUVVMgMHgwMDAyOTQgIAotI2RlZmluZSBCUklER0VfUkVTUF9DTEVBUiAweDAwMDI5QyAgCisjZGVmaW5lIEJSSURHRV9FVkVOX1JFU1AgMHgwMDAyODQKKyNkZWZpbmUgQlJJREdFX09ERF9SRVNQIDB4MDAwMjhDCisjZGVmaW5lIEJSSURHRV9SRVNQX1NUQVRVUyAweDAwMDI5NAorI2RlZmluZSBCUklER0VfUkVTUF9DTEVBUiAweDAwMDI5QwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgQlJJREdFX0FURV9SQU0gMHgwMDAxMDAwMCAgCi0jZGVmaW5lIEJSSURHRV9UWVBFMF9DRkdfREVWMCAweDAwMDIwMDAwICAKLSNkZWZpbmUgQlJJREdFX1RZUEUwX0NGR19TTE9UX09GRiAweDAwMDAxMDAwICAKLSNkZWZpbmUgQlJJREdFX1RZUEUwX0NGR19GVU5DX09GRiAweDAwMDAwMTAwICAKKyNkZWZpbmUgQlJJREdFX0FURV9SQU0gMHgwMDAxMDAwMAorI2RlZmluZSBCUklER0VfVFlQRTBfQ0ZHX0RFVjAgMHgwMDAyMDAwMAorI2RlZmluZSBCUklER0VfVFlQRTBfQ0ZHX1NMT1RfT0ZGIDB4MDAwMDEwMDAKKyNkZWZpbmUgQlJJREdFX1RZUEUwX0NGR19GVU5DX09GRiAweDAwMDAwMTAwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBCUklER0VfVFlQRTBfQ0ZHX0RFVihzKSAoQlJJREdFX1RZUEUwX0NGR19ERVYwKyAgKHMpKkJSSURHRV9UWVBFMF9DRkdfU0xPVF9PRkYpCiAjZGVmaW5lIEJSSURHRV9UWVBFMF9DRkdfREVWRihzLCBmKSAoQlJJREdFX1RZUEUwX0NGR19ERVYwKyAgKHMpKkJSSURHRV9UWVBFMF9DRkdfU0xPVF9PRkYrICAoZikqQlJJREdFX1RZUEUwX0NGR19GVU5DX09GRikKLSNkZWZpbmUgQlJJREdFX1RZUEUxX0NGRyAweDAwMDI4MDAwICAKLSNkZWZpbmUgQlJJREdFX1BDSV9JQUNLIDB4MDAwMzAwMDAgIAorI2RlZmluZSBCUklER0VfVFlQRTFfQ0ZHIDB4MDAwMjgwMDAKKyNkZWZpbmUgQlJJREdFX1BDSV9JQUNLIDB4MDAwMzAwMDAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIEJSSURHRV9FWFRfU1NSQU0gMHgwMDA4MDAwMCAgCi0jZGVmaW5lIEJSSURHRV9ERVZfQ05UIDggIAotI2RlZmluZSBCUklER0VfREVWSU8wIDB4MDAyMDAwMDAgIAotI2RlZmluZSBCUklER0VfREVWSU8xIDB4MDA0MDAwMDAgIAorI2RlZmluZSBCUklER0VfRVhUX1NTUkFNIDB4MDAwODAwMDAKKyNkZWZpbmUgQlJJREdFX0RFVl9DTlQgOAorI2RlZmluZSBCUklER0VfREVWSU8wIDB4MDAyMDAwMDAKKyNkZWZpbmUgQlJJREdFX0RFVklPMSAweDAwNDAwMDAwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBCUklER0VfREVWSU8yIDB4MDA2MDAwMDAgIAotI2RlZmluZSBCUklER0VfREVWSU9fT0ZGIDB4MDAxMDAwMDAgIAotI2RlZmluZSBCUklER0VfREVWSU9fMk1CIDB4MDAyMDAwMDAgIAotI2RlZmluZSBCUklER0VfREVWSU9fMU1CIDB4MDAxMDAwMDAgIAorI2RlZmluZSBCUklER0VfREVWSU8yIDB4MDA2MDAwMDAKKyNkZWZpbmUgQlJJREdFX0RFVklPX09GRiAweDAwMTAwMDAwCisjZGVmaW5lIEJSSURHRV9ERVZJT18yTUIgMHgwMDIwMDAwMAorI2RlZmluZSBCUklER0VfREVWSU9fMU1CIDB4MDAxMDAwMDAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEJSSURHRV9ERVZJTyh4KSAoKHgpPD0xID8gQlJJREdFX0RFVklPMCsoeCkqQlJJREdFX0RFVklPXzJNQiA6IEJSSURHRV9ERVZJTzIrKCh4KS0yKSpCUklER0VfREVWSU9fMU1CKQotI2RlZmluZSBCUklER0VfRVhURVJOQUxfRkxBU0ggMHgwMEMwMDAwMCAgCisjZGVmaW5lIEJSSURHRV9FWFRFUk5BTF9GTEFTSCAweDAwQzAwMDAwCiAjZGVmaW5lIEJSSURHRV9XSURHRVRfUEFSVF9OVU0gMHhjMDAyCiAjZGVmaW5lIFhCUklER0VfV0lER0VUX1BBUlRfTlVNIDB4ZDAwMgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KQEAgLTM4NCw3ICszODQsNyBAQAogI2RlZmluZSBCUklER0VfRElSTUFQX1JNRl82NCAoMHgxIDw8IDE4KQogI2RlZmluZSBCUklER0VfRElSTUFQX0FERDUxMiAoMHgxIDw8IDE3KQogI2RlZmluZSBCUklER0VfRElSTUFQX09GRiAoMHgxZmZmZiA8PCAwKQotI2RlZmluZSBCUklER0VfRElSTUFQX09GRl9BRERSU0hGVCAoMzEpICAKKyNkZWZpbmUgQlJJREdFX0RJUk1BUF9PRkZfQUREUlNIRlQgKDMxKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQlJJREdFX0FSQl9SRVFfV0FJVF9USUNLKHgpICgoeCkgPDwgMTYpCiAjZGVmaW5lIEJSSURHRV9BUkJfUkVRX1dBSVRfVElDS19NQVNLIEJSSURHRV9BUkJfUkVRX1dBSVRfVElDSygweDMpCkBAIC01NDQsOSArNTQ0LDkgQEAKICNkZWZpbmUgQlJJREdFX0RFVl9QTVVfQklUUyAoQlJJREdFX0RFVl9QTVVfV1JHQV9FTiB8ICAgQlJJREdFX0RFVl9TV0FQX1BNVSkKICNkZWZpbmUgQlJJREdFX0RFVl9EMzJfQklUUyAoQlJJREdFX0RFVl9ESVJfV1JHQV9FTiB8ICAgQlJJREdFX0RFVl9TV0FQX0RJUiB8ICAgQlJJREdFX0RFVl9QUkVGIHwgICBCUklER0VfREVWX1BSRUNJU0UgfCAgIEJSSURHRV9ERVZfQ09IIHwgICBCUklER0VfREVWX0JBUlJJRVIpCiAjZGVmaW5lIEJSSURHRV9ERVZfRDY0X0JJVFMgKEJSSURHRV9ERVZfRElSX1dSR0FfRU4gfCAgIEJSSURHRV9ERVZfU1dBUF9ESVIgfCAgIEJSSURHRV9ERVZfQ09IIHwgICBCUklER0VfREVWX0JBUlJJRVIpCi0jZGVmaW5lIEJSSURHRV9FUlJVUFBSX0RFVk1BU1RFUiAoMHgxIDw8IDIwKSAgCisjZGVmaW5lIEJSSURHRV9FUlJVUFBSX0RFVk1BU1RFUiAoMHgxIDw8IDIwKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgQlJJREdFX0VSUlVQUFJfUENJVkRFViAoMHgxIDw8IDE5KSAgCisjZGVmaW5lIEJSSURHRV9FUlJVUFBSX1BDSVZERVYgKDB4MSA8PCAxOSkKICNkZWZpbmUgQlJJREdFX0VSUlVQUFJfREVWTlVNX1NIRlQgKDE2KQogI2RlZmluZSBCUklER0VfRVJSVVBQUl9ERVZOVU1fTUFTSyAoMHg3IDw8IEJSSURHRV9FUlJVUFBSX0RFVk5VTV9TSEZUKQogI2RlZmluZSBCUklER0VfRVJSVVBQUl9ERVZJQ0UoZXJyKSAoKChlcnIpID4+IEJSSURHRV9FUlJVUFBSX0RFVk5VTV9TSEZUKSAmIDB4NykKQEAgLTU1NCwyMCArNTU0LDIwIEBACiAjZGVmaW5lIEJSSURHRV9FUlJVUFBSX0FERFJNQVNLICgweEZGRkYpCiAjZGVmaW5lIEJSSURHRV9JTlRNT0RFX0NMUl9QS1RfRU4oeCkgKDB4MSA8PCAoeCkpCiAjZGVmaW5lIEJSSURHRV9DUkVESVQgMwotI2RlZmluZSBCUklER0VfUlJCX0VOIDB4OCAgCisjZGVmaW5lIEJSSURHRV9SUkJfRU4gMHg4CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBCUklER0VfUlJCX0RFViAweDcgIAotI2RlZmluZSBCUklER0VfUlJCX1ZERVYgMHg0ICAKLSNkZWZpbmUgQlJJREdFX1JSQl9QREVWIDB4MyAgCisjZGVmaW5lIEJSSURHRV9SUkJfREVWIDB4NworI2RlZmluZSBCUklER0VfUlJCX1ZERVYgMHg0CisjZGVmaW5lIEJSSURHRV9SUkJfUERFViAweDMKICNkZWZpbmUgQlJJREdFX1JSQl9WQUxJRChyKSAoMHgwMDAxMDAwMDw8KHIpKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQlJJREdFX1JSQl9JTlVTRShyKSAoMHgwMDAwMDAwMTw8KHIpKQogI2RlZmluZSBCUklER0VfUlJCX0NMRUFSKHIpICgweDAwMDAwMDAxPDwocikpCiAjZGVmaW5lIFhCT1hfQlJJREdFX1dJRCA4Ci0jZGVmaW5lIEZMQVNIX1BST00xX0JBU0UgMHhFMDAwMDAgIAorI2RlZmluZSBGTEFTSF9QUk9NMV9CQVNFIDB4RTAwMDAwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBYQk9YX1JQU19FWElTVFMgMSA8PCA2ICAKLSNkZWZpbmUgWEJPWF9SUFNfRkFJTCAxIDw8IDQgIAorI2RlZmluZSBYQk9YX1JQU19FWElTVFMgMSA8PCA2CisjZGVmaW5lIFhCT1hfUlBTX0ZBSUwgMSA8PCA0CiAjZGVmaW5lIEJSSURHRV9QSU8zMl9YVEFMS19BTElBU19CQVNFIDB4MDAwMDQwMDAwMDAwTAogI2RlZmluZSBCUklER0VfUElPMzJfWFRBTEtfQUxJQVNfTElNSVQgMHgwMDAwN0ZGRkZGRkZMCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwpAQCAtNTc2LDkgKzU3Niw5IEBACiAjZGVmaW5lIEJSSURHRV9QQ0lJT19YVEFMS19BTElBU19CQVNFIDB4MDAwMTAwMDAwMDAwTAogI2RlZmluZSBCUklER0VfUENJSU9fWFRBTEtfQUxJQVNfTElNSVQgMHgwMDAxRkZGRkZGRkZMCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBCUklER0VfTUlOX1BJT19BRERSX01FTSAweDAwMDAwMDAwICAKKyNkZWZpbmUgQlJJREdFX01JTl9QSU9fQUREUl9NRU0gMHgwMDAwMDAwMAogI2RlZmluZSBCUklER0VfTUFYX1BJT19BRERSX01FTSAweDNmZmZmZmZmCi0jZGVmaW5lIEJSSURHRV9NSU5fUElPX0FERFJfSU8gMHgwMDAwMDAwMCAgCisjZGVmaW5lIEJSSURHRV9NSU5fUElPX0FERFJfSU8gMHgwMDAwMDAwMAogI2RlZmluZSBCUklER0VfTUFYX1BJT19BRERSX0lPIDB4ZmZmZmZmZmYKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEJSSURHRV9QQ0lfTUVNMzJfQkFTRSBCUklER0VfUElPMzJfWFRBTEtfQUxJQVNfQkFTRQpAQCAtNTkxLDkgKzU5MSw5IEBACiAjZGVmaW5lIEJSSURHRV9MT0NBTF9CQVNFIDAKICNkZWZpbmUgQlJJREdFX0RNQV9NQVBQRURfQkFTRSAweDQwMDAwMDAwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBCUklER0VfRE1BX01BUFBFRF9TSVpFIDB4NDAwMDAwMDAgIAorI2RlZmluZSBCUklER0VfRE1BX01BUFBFRF9TSVpFIDB4NDAwMDAwMDAKICNkZWZpbmUgQlJJREdFX0RNQV9ESVJFQ1RfQkFTRSAweDgwMDAwMDAwCi0jZGVmaW5lIEJSSURHRV9ETUFfRElSRUNUX1NJWkUgMHg4MDAwMDAwMCAgCisjZGVmaW5lIEJSSURHRV9ETUFfRElSRUNUX1NJWkUgMHg4MDAwMDAwMAogI2RlZmluZSBQQ0kzMl9MT0NBTF9CQVNFIEJSSURHRV9MT0NBTF9CQVNFCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0kzMl9NQVBQRURfQkFTRSBCUklER0VfRE1BX01BUFBFRF9CQVNFCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLW1pcHMvYXNtL3BnYWxsb2MuaCBiL2xpYmMva2VybmVsL2FyY2gtbWlwcy9hc20vcGdhbGxvYy5oCmluZGV4IGUzZWYzYjguLjBmMTYzNDYgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2FyY2gtbWlwcy9hc20vcGdhbGxvYy5oCisrKyBiL2xpYmMva2VybmVsL2FyY2gtbWlwcy9hc20vcGdhbGxvYy5oCkBAIC0yNCw2ICsyNCw4IEBACiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNkZWZpbmUgcG1kX3BndGFibGUocG1kKSBwbWRfcGFnZShwbWQpCiAjZGVmaW5lIF9fcHRlX2ZyZWVfdGxiKHRsYixwdGUpICBkbyB7ICAgcGd0YWJsZV9wYWdlX2R0b3IocHRlKTsgICB0bGJfcmVtb3ZlX3BhZ2UoKHRsYiksIHB0ZSk7ICB9IHdoaWxlICgwKQotI2RlZmluZSBjaGVja19wZ3RfY2FjaGUoKSBkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIHBtZF9mcmVlKG1tLCB4KSBkbyB7IH0gd2hpbGUgKDApCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBfX3BtZF9mcmVlX3RsYih0bGIsIHgpIGRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgY2hlY2tfcGd0X2NhY2hlKCkgZG8geyB9IHdoaWxlICgwKQogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLW1pcHMvYXNtL3BndGFibGUtMzIuaCBiL2xpYmMva2VybmVsL2FyY2gtbWlwcy9hc20vcGd0YWJsZS0zMi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwMDUwODMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9hcmNoLW1pcHMvYXNtL3BndGFibGUtMzIuaApAQCAtMCwwICsxLDc5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9BU01fUEdUQUJMRV8zMl9ICisjZGVmaW5lIF9BU01fUEdUQUJMRV8zMl9ICisjaW5jbHVkZSA8YXNtL2FkZHJzcGFjZS5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKyNpbmNsdWRlIDxhc20vY2FjaGVjdGwuaD4KKyNpbmNsdWRlIDxhc20vZml4bWFwLmg+CisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvcGd0YWJsZS1ub3BtZC5oPgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgUEdESVJfU0hJRlQgKDIgKiBQQUdFX1NISUZUICsgUFRFX09SREVSIC0gUFRFX1RfTE9HMikKKyNkZWZpbmUgUEdESVJfU0laRSAoMVVMIDw8IFBHRElSX1NISUZUKQorI2RlZmluZSBQR0RJUl9NQVNLICh+KFBHRElSX1NJWkUtMSkpCisjZGVmaW5lIF9fUEdEX09SREVSICgzMiAtIDMgKiBQQUdFX1NISUZUICsgUEdEX1RfTE9HMiArIFBURV9UX0xPRzIpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBQR0RfT1JERVIgKF9fUEdEX09SREVSID49IDAgPyBfX1BHRF9PUkRFUiA6IDApCisjZGVmaW5lIFBVRF9PUkRFUiBhaWVlZWVfYXR0ZW1wdF90b19hbGxvY2F0ZV9wdWQKKyNkZWZpbmUgUE1EX09SREVSIDEKKyNkZWZpbmUgUFRFX09SREVSIDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFBUUlNfUEVSX1BHRCAoVVNFUl9QVFJTX1BFUl9QR0QgKiAyKQorI2RlZmluZSBQVFJTX1BFUl9QVEUgKChQQUdFX1NJWkUgPDwgUFRFX09SREVSKSAvIHNpemVvZihwdGVfdCkpCisjZGVmaW5lIFVTRVJfUFRSU19QRVJfUEdEICgweDgwMDAwMDAwVUwvUEdESVJfU0laRSkKKyNkZWZpbmUgRklSU1RfVVNFUl9BRERSRVNTIDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFZNQUxMT0NfU1RBUlQgTUFQX0JBU0UKKyNkZWZpbmUgUEtNQVBfQkFTRSAoMHhmZTAwMDAwMFVMKQorI2RlZmluZSBWTUFMTE9DX0VORCAoRklYQUREUl9TVEFSVC0yKlBBR0VfU0laRSkKKyNkZWZpbmUgcHRlX0VSUk9SKGUpICAgcHJpbnRrKCIlczolZDogYmFkIHB0ZSAlMDhseC5cbiIsIF9fRklMRV9fLCBfX0xJTkVfXywgcHRlX3ZhbChlKSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIHBnZF9FUlJPUihlKSAgIHByaW50aygiJXM6JWQ6IGJhZCBwZ2QgJTA4bHguXG4iLCBfX0ZJTEVfXywgX19MSU5FX18sIHBnZF92YWwoZSkpCisjZGVmaW5lIHBtZF9iYWQocG1kKSAocG1kX3ZhbChwbWQpICYgflBBR0VfTUFTSykKKyNkZWZpbmUgcHRlX3BhZ2UoeCkgcGZuX3RvX3BhZ2UocHRlX3Bmbih4KSkKKyNkZWZpbmUgcHRlX3Bmbih4KSAoKHVuc2lnbmVkIGxvbmcpKCh4KS5wdGUgPj4gX1BGTl9TSElGVCkpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBwZm5fcHRlKHBmbiwgcHJvdCkgX19wdGUoKCh1bnNpZ25lZCBsb25nIGxvbmcpKHBmbikgPDwgX1BGTl9TSElGVCkgfCBwZ3Byb3RfdmFsKHByb3QpKQorI2RlZmluZSBfX3BnZF9vZmZzZXQoYWRkcmVzcykgcGdkX2luZGV4KGFkZHJlc3MpCisjZGVmaW5lIF9fcHVkX29mZnNldChhZGRyZXNzKSAoKChhZGRyZXNzKSA+PiBQVURfU0hJRlQpICYgKFBUUlNfUEVSX1BVRC0xKSkKKyNkZWZpbmUgX19wbWRfb2Zmc2V0KGFkZHJlc3MpICgoKGFkZHJlc3MpID4+IFBNRF9TSElGVCkgJiAoUFRSU19QRVJfUE1ELTEpKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgcGdkX29mZnNldF9rKGFkZHJlc3MpIHBnZF9vZmZzZXQoJmluaXRfbW0sIGFkZHJlc3MpCisjZGVmaW5lIHBnZF9pbmRleChhZGRyZXNzKSAoKChhZGRyZXNzKSA+PiBQR0RJUl9TSElGVCkgJiAoUFRSU19QRVJfUEdELTEpKQorI2RlZmluZSBwZ2Rfb2Zmc2V0KG1tLCBhZGRyKSAoKG1tKS0+cGdkICsgcGdkX2luZGV4KGFkZHIpKQorI2RlZmluZSBfX3B0ZV9vZmZzZXQoYWRkcmVzcykgICAoKChhZGRyZXNzKSA+PiBQQUdFX1NISUZUKSAmIChQVFJTX1BFUl9QVEUgLSAxKSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIHB0ZV9vZmZzZXQoZGlyLCBhZGRyZXNzKSAgICgocHRlX3QgKikgcG1kX3BhZ2VfdmFkZHIoKihkaXIpKSArIF9fcHRlX29mZnNldChhZGRyZXNzKSkKKyNkZWZpbmUgcHRlX29mZnNldF9rZXJuZWwoZGlyLCBhZGRyZXNzKSAgICgocHRlX3QgKikgcG1kX3BhZ2VfdmFkZHIoKihkaXIpKSArIF9fcHRlX29mZnNldChhZGRyZXNzKSkKKyNkZWZpbmUgcHRlX29mZnNldF9tYXAoZGlyLCBhZGRyZXNzKSAgICgocHRlX3QgKilwYWdlX2FkZHJlc3MocG1kX3BhZ2UoKihkaXIpKSkgKyBfX3B0ZV9vZmZzZXQoYWRkcmVzcykpCisjZGVmaW5lIHB0ZV91bm1hcChwdGUpICgodm9pZCkocHRlKSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIF9fc3dwX3R5cGUoeCkgKCgoeCkudmFsID4+IDgpICYgMHgxZikKKyNkZWZpbmUgX19zd3Bfb2Zmc2V0KHgpICgoeCkudmFsID4+IDEzKQorI2RlZmluZSBfX3N3cF9lbnRyeSh0eXBlLG9mZnNldCkgICAoKHN3cF9lbnRyeV90KSB7ICgodHlwZSkgPDwgOCkgfCAoKG9mZnNldCkgPDwgMTMpIH0pCisjZGVmaW5lIFBURV9GSUxFX01BWF9CSVRTIDI4CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBwdGVfdG9fcGdvZmYoX3B0ZSkgKCgoKF9wdGUpLnB0ZSA+PiAxKSAmIDB4NykgfCAgICgoKF9wdGUpLnB0ZSA+PiAyKSAmIDB4OCkgfCAgICgoKF9wdGUpLnB0ZSA+PiA4KSA8PCA0KSkKKyNkZWZpbmUgcGdvZmZfdG9fcHRlKG9mZikgKChwdGVfdCkgeyAoKChvZmYpICYgMHg3KSA8PCAxKSB8ICAgKCgob2ZmKSAmIDB4OCkgPDwgMikgfCAgICgoKG9mZikgPj4gNCkgPDwgOCkgfCAgIF9QQUdFX0ZJTEUgfSkKKyNkZWZpbmUgX19wdGVfdG9fc3dwX2VudHJ5KHB0ZSkgKChzd3BfZW50cnlfdCkgeyBwdGVfdmFsKHB0ZSkgfSkKKyNkZWZpbmUgX19zd3BfZW50cnlfdG9fcHRlKHgpICgocHRlX3QpIHsgKHgpLnZhbCB9KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC1taXBzL2FzbS9wZ3RhYmxlLWJpdHMuaCBiL2xpYmMva2VybmVsL2FyY2gtbWlwcy9hc20vcGd0YWJsZS1iaXRzLmgKaW5kZXggM2RmMmMzZC4uZWNkNjIwYyAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvYXJjaC1taXBzL2FzbS9wZ3RhYmxlLWJpdHMuaAorKysgYi9saWJjL2tlcm5lbC9hcmNoLW1pcHMvYXNtL3BndGFibGUtYml0cy5oCkBAIC0xOCwzNSArMTgsMzUgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfQVNNX1BHVEFCTEVfQklUU19ICiAjZGVmaW5lIF9BU01fUEdUQUJMRV9CSVRTX0gKLSNkZWZpbmUgX1BBR0VfUFJFU0VOVCAoMTw8MCkgIAotI2RlZmluZSBfUEFHRV9SRUFEICgxPDwxKSAgCisjZGVmaW5lIF9QQUdFX1BSRVNFTlQgKDE8PDApCisjZGVmaW5lIF9QQUdFX1JFQUQgKDE8PDEpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBfUEFHRV9XUklURSAoMTw8MikgIAotI2RlZmluZSBfUEFHRV9BQ0NFU1NFRCAoMTw8MykgIAotI2RlZmluZSBfUEFHRV9NT0RJRklFRCAoMTw8NCkgIAotI2RlZmluZSBfUEFHRV9GSUxFICgxPDw0KSAgCisjZGVmaW5lIF9QQUdFX1dSSVRFICgxPDwyKQorI2RlZmluZSBfUEFHRV9BQ0NFU1NFRCAoMTw8MykKKyNkZWZpbmUgX1BBR0VfTU9ESUZJRUQgKDE8PDQpCisjZGVmaW5lIF9QQUdFX0ZJTEUgKDE8PDQpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBfUEFHRV9SNEtCVUcgKDE8PDUpICAKKyNkZWZpbmUgX1BBR0VfUjRLQlVHICgxPDw1KQogI2RlZmluZSBfUEFHRV9HTE9CQUwgKDE8PDYpCiAjZGVmaW5lIF9QQUdFX1ZBTElEICgxPDw3KQotI2RlZmluZSBfUEFHRV9TSUxFTlRfUkVBRCAoMTw8NykgIAorI2RlZmluZSBfUEFHRV9TSUxFTlRfUkVBRCAoMTw8NykKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIF9QQUdFX0RJUlRZICgxPDw4KSAgCisjZGVmaW5lIF9QQUdFX0RJUlRZICgxPDw4KQogI2RlZmluZSBfUEFHRV9TSUxFTlRfV1JJVEUgKDE8PDgpCiAjZGVmaW5lIF9DQUNIRV9TSElGVCA5CiAjZGVmaW5lIF9DQUNIRV9NQVNLICg3PDw5KQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgX0NBQ0hFX0NBQ0hBQkxFX05PX1dBICgwPDxfQ0FDSEVfU0hJRlQpICAKLSNkZWZpbmUgX0NBQ0hFX0NBQ0hBQkxFX1dBICgxPDxfQ0FDSEVfU0hJRlQpICAKLSNkZWZpbmUgX0NBQ0hFX1VOQ0FDSEVEICgyPDxfQ0FDSEVfU0hJRlQpICAKLSNkZWZpbmUgX0NBQ0hFX0NBQ0hBQkxFX05PTkNPSEVSRU5UICgzPDxfQ0FDSEVfU0hJRlQpICAKKyNkZWZpbmUgX0NBQ0hFX0NBQ0hBQkxFX05PX1dBICgwPDxfQ0FDSEVfU0hJRlQpCisjZGVmaW5lIF9DQUNIRV9DQUNIQUJMRV9XQSAoMTw8X0NBQ0hFX1NISUZUKQorI2RlZmluZSBfQ0FDSEVfVU5DQUNIRUQgKDI8PF9DQUNIRV9TSElGVCkKKyNkZWZpbmUgX0NBQ0hFX0NBQ0hBQkxFX05PTkNPSEVSRU5UICgzPDxfQ0FDSEVfU0hJRlQpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBfQ0FDSEVfQ0FDSEFCTEVfQ0UgKDQ8PF9DQUNIRV9TSElGVCkgIAotI2RlZmluZSBfQ0FDSEVfQ0FDSEFCTEVfQ09XICg1PDxfQ0FDSEVfU0hJRlQpICAKLSNkZWZpbmUgX0NBQ0hFX0NBQ0hBQkxFX0NPSEVSRU5UICg1PDxfQ0FDSEVfU0hJRlQpICAKLSNkZWZpbmUgX0NBQ0hFX0NBQ0hBQkxFX0NVVyAoNjw8X0NBQ0hFX1NISUZUKSAgCisjZGVmaW5lIF9DQUNIRV9DQUNIQUJMRV9DRSAoNDw8X0NBQ0hFX1NISUZUKQorI2RlZmluZSBfQ0FDSEVfQ0FDSEFCTEVfQ09XICg1PDxfQ0FDSEVfU0hJRlQpCisjZGVmaW5lIF9DQUNIRV9DQUNIQUJMRV9DT0hFUkVOVCAoNTw8X0NBQ0hFX1NISUZUKQorI2RlZmluZSBfQ0FDSEVfQ0FDSEFCTEVfQ1VXICg2PDxfQ0FDSEVfU0hJRlQpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBfQ0FDSEVfVU5DQUNIRURfQUNDRUxFUkFURUQgKDc8PF9DQUNIRV9TSElGVCkgIAorI2RlZmluZSBfQ0FDSEVfVU5DQUNIRURfQUNDRUxFUkFURUQgKDc8PF9DQUNIRV9TSElGVCkKICNkZWZpbmUgX19SRUFEQUJMRSAoX1BBR0VfUkVBRCB8IF9QQUdFX1NJTEVOVF9SRUFEIHwgX1BBR0VfQUNDRVNTRUQpCiAjZGVmaW5lIF9fV1JJVEVBQkxFIChfUEFHRV9XUklURSB8IF9QQUdFX1NJTEVOVF9XUklURSB8IF9QQUdFX01PRElGSUVEKQogI2RlZmluZSBfUEFHRV9DSEdfTUFTSyAoUEFHRV9NQVNLIHwgX1BBR0VfQUNDRVNTRUQgfCBfUEFHRV9NT0RJRklFRCB8IF9DQUNIRV9NQVNLKQpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC1taXBzL2FzbS9wZ3RhYmxlLmggYi9saWJjL2tlcm5lbC9hcmNoLW1pcHMvYXNtL3BndGFibGUuaAppbmRleCBjZWI0MzQzLi40NmE1YmExIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9hcmNoLW1pcHMvYXNtL3BndGFibGUuaAorKysgYi9saWJjL2tlcm5lbC9hcmNoLW1pcHMvYXNtL3BndGFibGUuaApAQCAtMTgsNjEgKzE4LDYyIEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX0FTTV9QR1RBQkxFX0gKICNkZWZpbmUgX0FTTV9QR1RBQkxFX0gKKyNpbmNsdWRlIDxhc20vcGd0YWJsZS0zMi5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLWJpdHMuaD4KIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjaW5jbHVkZSA8YXNtL3BndGFibGUtYml0cy5oPgogc3RydWN0IG1tX3N0cnVjdDsKIHN0cnVjdCB2bV9hcmVhX3N0cnVjdDsKICNkZWZpbmUgUEFHRV9OT05FIF9fcGdwcm90KF9QQUdFX1BSRVNFTlQgfCBfQ0FDSEVfQ0FDSEFCTEVfTk9OQ09IRVJFTlQpCi0jZGVmaW5lIFBBR0VfU0hBUkVEIF9fcGdwcm90KF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9SRUFEIHwgX1BBR0VfV1JJVEUgfCAgIF9wYWdlX2NhY2hhYmxlX2RlZmF1bHQpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBQQUdFX1NIQVJFRCBfX3BncHJvdChfUEFHRV9QUkVTRU5UIHwgX1BBR0VfUkVBRCB8IF9QQUdFX1dSSVRFIHwgICBfcGFnZV9jYWNoYWJsZV9kZWZhdWx0KQogI2RlZmluZSBQQUdFX0NPUFkgX19wZ3Byb3QoX1BBR0VfUFJFU0VOVCB8IF9QQUdFX1JFQUQgfCAgIF9wYWdlX2NhY2hhYmxlX2RlZmF1bHQpCiAjZGVmaW5lIFBBR0VfUkVBRE9OTFkgX19wZ3Byb3QoX1BBR0VfUFJFU0VOVCB8IF9QQUdFX1JFQUQgfCAgIF9wYWdlX2NhY2hhYmxlX2RlZmF1bHQpCiAjZGVmaW5lIFBBR0VfS0VSTkVMIF9fcGdwcm90KF9QQUdFX1BSRVNFTlQgfCBfX1JFQURBQkxFIHwgX19XUklURUFCTEUgfCAgIF9QQUdFX0dMT0JBTCB8IF9wYWdlX2NhY2hhYmxlX2RlZmF1bHQpCi0jZGVmaW5lIFBBR0VfVVNFUklPIF9fcGdwcm90KF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9SRUFEIHwgX1BBR0VfV1JJVEUgfCAgIF9wYWdlX2NhY2hhYmxlX2RlZmF1bHQpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBQQUdFX1VTRVJJTyBfX3BncHJvdChfUEFHRV9QUkVTRU5UIHwgX1BBR0VfUkVBRCB8IF9QQUdFX1dSSVRFIHwgICBfcGFnZV9jYWNoYWJsZV9kZWZhdWx0KQogI2RlZmluZSBQQUdFX0tFUk5FTF9VTkNBQ0hFRCBfX3BncHJvdChfUEFHRV9QUkVTRU5UIHwgX19SRUFEQUJMRSB8ICAgX19XUklURUFCTEUgfCBfUEFHRV9HTE9CQUwgfCBfQ0FDSEVfVU5DQUNIRUQpCiAjZGVmaW5lIF9fUDAwMCBfX3BncHJvdCgwKQogI2RlZmluZSBfX1AwMDEgX19wZ3Byb3QoMCkKLSNkZWZpbmUgX19QMDEwIF9fcGdwcm90KDApCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBfX1AwMTAgX19wZ3Byb3QoMCkKICNkZWZpbmUgX19QMDExIF9fcGdwcm90KDApCiAjZGVmaW5lIF9fUDEwMCBfX3BncHJvdCgwKQogI2RlZmluZSBfX1AxMDEgX19wZ3Byb3QoMCkKLSNkZWZpbmUgX19QMTEwIF9fcGdwcm90KDApCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBfX1AxMTAgX19wZ3Byb3QoMCkKICNkZWZpbmUgX19QMTExIF9fcGdwcm90KDApCiAjZGVmaW5lIF9fUzAwMCBfX3BncHJvdCgwKQogI2RlZmluZSBfX1MwMDEgX19wZ3Byb3QoMCkKLSNkZWZpbmUgX19TMDEwIF9fcGdwcm90KDApCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBfX1MwMTAgX19wZ3Byb3QoMCkKICNkZWZpbmUgX19TMDExIF9fcGdwcm90KDApCiAjZGVmaW5lIF9fUzEwMCBfX3BncHJvdCgwKQogI2RlZmluZSBfX1MxMDEgX19wZ3Byb3QoMCkKLSNkZWZpbmUgX19TMTEwIF9fcGdwcm90KDApCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBfX1MxMTAgX19wZ3Byb3QoMCkKICNkZWZpbmUgX19TMTExIF9fcGdwcm90KDApCiAjZGVmaW5lIFpFUk9fUEFHRSh2YWRkcikgICAodmlydF90b19wYWdlKCh2b2lkICopKGVtcHR5X3plcm9fcGFnZSArICgoKHVuc2lnbmVkIGxvbmcpKHZhZGRyKSkgJiB6ZXJvX3BhZ2VfbWFzaykpKSkKICNkZWZpbmUgcG1kX3BoeXMocG1kKSB2aXJ0X3RvX3BoeXMoKHZvaWQgKilwbWRfdmFsKHBtZCkpCi0jZGVmaW5lIHBtZF9wYWdlKHBtZCkgKHBmbl90b19wYWdlKHBtZF9waHlzKHBtZCkgPj4gUEFHRV9TSElGVCkpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBwbWRfcGFnZShwbWQpIChwZm5fdG9fcGFnZShwbWRfcGh5cyhwbWQpID4+IFBBR0VfU0hJRlQpKQogI2RlZmluZSBwbWRfcGFnZV92YWRkcihwbWQpIHBtZF92YWwocG1kKQogI2RlZmluZSBwdGVfbm9uZShwdGUpICghKHB0ZV92YWwocHRlKSAmIH5fUEFHRV9HTE9CQUwpKQogI2RlZmluZSBwdGVfcHJlc2VudChwdGUpIChwdGVfdmFsKHB0ZSkgJiBfUEFHRV9QUkVTRU5UKQotI2RlZmluZSBzZXRfcHRlX2F0KG1tLCBhZGRyLCBwdGVwLCBwdGV2YWwpIHNldF9wdGUocHRlcCwgcHRldmFsKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgc2V0X3B0ZV9hdChtbSwgYWRkciwgcHRlcCwgcHRldmFsKSBzZXRfcHRlKHB0ZXAsIHB0ZXZhbCkKICNkZWZpbmUgc2V0X3BtZChwbWRwdHIsIHBtZHZhbCkgZG8geyAqKHBtZHB0cikgPSAocG1kdmFsKTsgfSB3aGlsZSgwKQogI2RlZmluZSBQR0RfVF9MT0cyIChfX2J1aWx0aW5fZmZzKHNpemVvZihwZ2RfdCkpIC0gMSkKICNkZWZpbmUgUE1EX1RfTE9HMiAoX19idWlsdGluX2ZmcyhzaXplb2YocG1kX3QpKSAtIDEpCi0jZGVmaW5lIFBURV9UX0xPRzIgKF9fYnVpbHRpbl9mZnMoc2l6ZW9mKHB0ZV90KSkgLSAxKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgUFRFX1RfTE9HMiAoX19idWlsdGluX2ZmcyhzaXplb2YocHRlX3QpKSAtIDEpCiAjZGVmaW5lIHBncHJvdF9ub25jYWNoZWQgcGdwcm90X25vbmNhY2hlZAogI2RlZmluZSBta19wdGUocGFnZSwgcGdwcm90KSBwZm5fcHRlKHBhZ2VfdG9fcGZuKHBhZ2UpLCAocGdwcm90KSkKICNkZWZpbmUga2Vybl9hZGRyX3ZhbGlkKGFkZHIpICgxKQotI2RlZmluZSBpb19yZW1hcF9wZm5fcmFuZ2Uodm1hLCB2YWRkciwgcGZuLCBzaXplLCBwcm90KSAgIHJlbWFwX3Bmbl9yYW5nZSh2bWEsIHZhZGRyLCBwZm4sIHNpemUsIHByb3QpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBpb19yZW1hcF9wZm5fcmFuZ2Uodm1hLCB2YWRkciwgcGZuLCBzaXplLCBwcm90KSAgIHJlbWFwX3Bmbl9yYW5nZSh2bWEsIHZhZGRyLCBwZm4sIHNpemUsIHByb3QpCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvcGd0YWJsZS5oPgogI2RlZmluZSBIQVZFX0FSQ0hfVU5NQVBQRURfQVJFQQogI2RlZmluZSBwZ3RhYmxlX2NhY2hlX2luaXQoKSBkbyB7IH0gd2hpbGUgKDApCi0jZW5kaWYKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gtbWlwcy9hc20vcHJvY2Vzc29yLmggYi9saWJjL2tlcm5lbC9hcmNoLW1pcHMvYXNtL3Byb2Nlc3Nvci5oCmluZGV4IDM1NjMxMjEuLmZlOWVlNzYgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2FyY2gtbWlwcy9hc20vcHJvY2Vzc29yLmgKKysrIGIvbGliYy9rZXJuZWwvYXJjaC1taXBzL2FzbS9wcm9jZXNzb3IuaApAQCAtMjksNjEgKzI5LDY1IEBACiAjaW5jbHVkZSA8YXNtL3ByZWZldGNoLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2RlZmluZSBjdXJyZW50X3RleHRfYWRkcigpICh7IF9fbGFiZWxfXyBfbDsgX2w6ICYmX2w7fSkKLSNkZWZpbmUgTlVNX0ZQVV9SRUdTIDMyCisjZGVmaW5lIFRBU0tfU0laRSAweDdmZmY4MDAwVUwKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFNUQUNLX1RPUCBUQVNLX1NJWkUKKyNkZWZpbmUgVEFTS19VTk1BUFBFRF9CQVNFICgoVEFTS19TSVpFIC8gMykgJiB+KFBBR0VfU0laRSkpCisjZGVmaW5lIE5VTV9GUFVfUkVHUyAzMgogdHlwZWRlZiBfX3U2NCBmcHVyZWdfdDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgbWlwc19mcHVfc3RydWN0IHsKICBmcHVyZWdfdCBmcHJbTlVNX0ZQVV9SRUdTXTsKICB1bnNpZ25lZCBpbnQgZmNyMzE7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE5VTV9EU1BfUkVHUyA2CiB0eXBlZGVmIF9fdTMyIGRzcHJlZ190Owogc3RydWN0IG1pcHNfZHNwX3N0YXRlIHsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgZHNwcmVnX3QgZHNwcltOVU1fRFNQX1JFR1NdOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBpbnQgZHNwY29udHJvbDsKIH07CiAjZGVmaW5lIElOSVRfQ1BVTUFTSyB7ICAgezAsfSAgfQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHR5cGVkZWYgc3RydWN0IHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgbG9uZyBzZWc7CiB9IG1tX3NlZ21lbnRfdDsKICNkZWZpbmUgQVJDSF9NSU5fVEFTS0FMSUdOIDgKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgbWlwc19hYmk7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IHRocmVhZF9zdHJ1Y3QgewogIHVuc2lnbmVkIGxvbmcgcmVnMTY7CiAgdW5zaWduZWQgbG9uZyByZWcxNywgcmVnMTgsIHJlZzE5LCByZWcyMCwgcmVnMjEsIHJlZzIyLCByZWcyMzsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgbG9uZyByZWcyOSwgcmVnMzAsIHJlZzMxOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBsb25nIGNwMF9zdGF0dXM7CiAgc3RydWN0IG1pcHNfZnB1X3N0cnVjdCBmcHU7CiAgc3RydWN0IG1pcHNfZHNwX3N0YXRlIGRzcDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgbG9uZyBjcDBfYmFkdmFkZHI7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGxvbmcgY3AwX2JhZHVhZGRyOwogIHVuc2lnbmVkIGxvbmcgZXJyb3JfY29kZTsKICB1bnNpZ25lZCBsb25nIHRyYXBfbm87Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGxvbmcgaXJpeF90cmFtcG9saW5lOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBsb25nIGlyaXhfb2xkY3R4OwogIHN0cnVjdCBtaXBzX2FiaSAqYWJpOwogfTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEZQQUZGX0lOSVQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIElOSVRfVEhSRUFEIHsgICAgICAgLnJlZzE2ID0gMCwgICAucmVnMTcgPSAwLCAgIC5yZWcxOCA9IDAsICAgLnJlZzE5ID0gMCwgICAucmVnMjAgPSAwLCAgIC5yZWcyMSA9IDAsICAgLnJlZzIyID0gMCwgICAucmVnMjMgPSAwLCAgIC5yZWcyOSA9IDAsICAgLnJlZzMwID0gMCwgICAucmVnMzEgPSAwLCAgICAgICAuY3AwX3N0YXR1cyA9IDAsICAgICAgIC5mcHUgPSB7ICAgLmZwciA9IHswLH0sICAgLmZjcjMxID0gMCwgICB9LCAgICAgICBGUEFGRl9JTklUICAgICAgIC5kc3AgPSB7ICAgLmRzcHIgPSB7MCwgfSwgICAuZHNwY29udHJvbCA9IDAsICAgfSwgICAgICAgLmNwMF9iYWR2YWRkciA9IDAsICAgLmNwMF9iYWR1YWRkciA9IDAsICAgLmVycm9yX2NvZGUgPSAwLCAgIC50cmFwX25vID0gMCwgICAuaXJpeF90cmFtcG9saW5lID0gMCwgICAuaXJpeF9vbGRjdHggPSAwLCAgfQogc3RydWN0IHRhc2tfc3RydWN0OwogI2RlZmluZSByZWxlYXNlX3RocmVhZCh0aHJlYWQpIGRvIHsgfSB3aGlsZSgwKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgcHJlcGFyZV90b19jb3B5KHRzaykgZG8geyB9IHdoaWxlICgwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19LU1RLX1RPUyh0c2spICgodW5zaWduZWQgbG9uZyl0YXNrX3N0YWNrX3BhZ2UodHNrKSArIFRIUkVBRF9TSVpFIC0gMzIpCiAjZGVmaW5lIHRhc2tfcHRfcmVncyh0c2spICgoc3RydWN0IHB0X3JlZ3MgKilfX0tTVEtfVE9TKHRzaykgLSAxKQogI2RlZmluZSBLU1RLX0VJUCh0c2spICh0YXNrX3B0X3JlZ3ModHNrKS0+Y3AwX2VwYykKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtTVEtfRVNQKHRzaykgKHRhc2tfcHRfcmVncyh0c2spLT5yZWdzWzI5XSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtTVEtfU1RBVFVTKHRzaykgKHRhc2tfcHRfcmVncyh0c2spLT5jcDBfc3RhdHVzKQogI2RlZmluZSBjcHVfcmVsYXgoKSBiYXJyaWVyKCkKICNkZWZpbmUgcmV0dXJuX2FkZHJlc3MoKSAoe19fYXNtX18gX192b2xhdGlsZV9fKCIiOjo6IiQzMSIpO19fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKTt9KQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlbmRpZgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gtbWlwcy9hc20vcHRyYWNlLmggYi9saWJjL2tlcm5lbC9hcmNoLW1pcHMvYXNtL3B0cmFjZS5oCmluZGV4IDJiNzFlNzAuLmQ5NzFjN2UgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2FyY2gtbWlwcy9hc20vcHRyYWNlLmgKKysrIGIvbGliYy9rZXJuZWwvYXJjaC1taXBzL2FzbS9wdHJhY2UuaApAQCAtMjgsMzQgKzI4LDM2IEBACiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBGUENfQ1NSIDY5CiAjZGVmaW5lIEZQQ19FSVIgNzAKLSNkZWZpbmUgRFNQX0JBU0UgNzEgIAorI2RlZmluZSBEU1BfQkFTRSA3MQogI2RlZmluZSBEU1BfQ09OVFJPTCA3NwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQUNYIDc4CiBzdHJ1Y3QgcHRfcmVncyB7CisgdW5zaWduZWQgbG9uZyBwYWQwWzZdOwogIHVuc2lnbmVkIGxvbmcgcmVnc1szMl07Ci0gdW5zaWduZWQgbG9uZyBjcDBfc3RhdHVzOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyB1bnNpZ25lZCBsb25nIGNwMF9zdGF0dXM7CiAgdW5zaWduZWQgbG9uZyBoaTsKICB1bnNpZ25lZCBsb25nIGxvOwogIHVuc2lnbmVkIGxvbmcgY3AwX2JhZHZhZGRyOwotIHVuc2lnbmVkIGxvbmcgY3AwX2NhdXNlOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyB1bnNpZ25lZCBsb25nIGNwMF9jYXVzZTsKICB1bnNpZ25lZCBsb25nIGNwMF9lcGM7CiB9IF9fYXR0cmlidXRlX18gKChhbGlnbmVkICg4KSkpOwogI2RlZmluZSBQVFJBQ0VfR0VUUkVHUyAxMgotI2RlZmluZSBQVFJBQ0VfU0VUUkVHUyAxMwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgUFRSQUNFX1NFVFJFR1MgMTMKICNkZWZpbmUgUFRSQUNFX0dFVEZQUkVHUyAxNAogI2RlZmluZSBQVFJBQ0VfU0VURlBSRUdTIDE1CiAjZGVmaW5lIFBUUkFDRV9PTERTRVRPUFRJT05TIDIxCi0jZGVmaW5lIFBUUkFDRV9HRVRfVEhSRUFEX0FSRUEgMjUKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFBUUkFDRV9HRVRfVEhSRUFEX0FSRUEgMjUKICNkZWZpbmUgUFRSQUNFX1NFVF9USFJFQURfQVJFQSAyNgogI2RlZmluZSBQVFJBQ0VfUEVFS1RFWFRfMzI2NCAweGMwCiAjZGVmaW5lIFBUUkFDRV9QRUVLREFUQV8zMjY0IDB4YzEKLSNkZWZpbmUgUFRSQUNFX1BPS0VURVhUXzMyNjQgMHhjMgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgUFRSQUNFX1BPS0VURVhUXzMyNjQgMHhjMgogI2RlZmluZSBQVFJBQ0VfUE9LRURBVEFfMzI2NCAweGMzCiAjZGVmaW5lIFBUUkFDRV9HRVRfVEhSRUFEX0FSRUFfMzI2NCAweGM0CiAjZW5kaWYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLW1pcHMvYXNtL3JlZy5oIGIvbGliYy9rZXJuZWwvYXJjaC1taXBzL2FzbS9yZWcuaAppbmRleCA5MTc0ZTI3Li4xYjhlOGVlIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9hcmNoLW1pcHMvYXNtL3JlZy5oCisrKyBiL2xpYmMva2VybmVsL2FyY2gtbWlwcy9hc20vcmVnLmgKQEAgLTE4LDU3ICsxOCw1NCBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9fQVNNX01JUFNfUkVHX0gKICNkZWZpbmUgX19BU01fTUlQU19SRUdfSAotI2lmZGVmIFdBTlRfQ09NUEFUX1JFR19ICiAjZGVmaW5lIEVGX1IwIDYKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEVGX1IxIDcKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEVGX1IyIDgKICNkZWZpbmUgRUZfUjMgOQogI2RlZmluZSBFRl9SNCAxMAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRUZfUjUgMTEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEVGX1I2IDEyCiAjZGVmaW5lIEVGX1I3IDEzCiAjZGVmaW5lIEVGX1I4IDE0Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBFRl9SOSAxNQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRUZfUjEwIDE2CiAjZGVmaW5lIEVGX1IxMSAxNwogI2RlZmluZSBFRl9SMTIgMTgKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEVGX1IxMyAxOQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRUZfUjE0IDIwCiAjZGVmaW5lIEVGX1IxNSAyMQogI2RlZmluZSBFRl9SMTYgMjIKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEVGX1IxNyAyMworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRUZfUjE4IDI0CiAjZGVmaW5lIEVGX1IxOSAyNQogI2RlZmluZSBFRl9SMjAgMjYKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEVGX1IyMSAyNworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRUZfUjIyIDI4CiAjZGVmaW5lIEVGX1IyMyAyOQogI2RlZmluZSBFRl9SMjQgMzAKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEVGX1IyNSAzMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRUZfUjI2IDMyCiAjZGVmaW5lIEVGX1IyNyAzMwogI2RlZmluZSBFRl9SMjggMzQKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEVGX1IyOSAzNQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRUZfUjMwIDM2CiAjZGVmaW5lIEVGX1IzMSAzNwogI2RlZmluZSBFRl9MTyAzOAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRUZfSEkgMzkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEVGX0NQMF9FUEMgNDAKICNkZWZpbmUgRUZfQ1AwX0JBRFZBRERSIDQxCiAjZGVmaW5lIEVGX0NQMF9TVEFUVVMgNDIKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEVGX0NQMF9DQVVTRSA0MworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRUZfVU5VU0VEMCA0NAogI2RlZmluZSBFRl9TSVpFIDE4MAogI2VuZGlmCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLW1pcHMvYXNtL3JlZ2RlZi5oIGIvbGliYy9rZXJuZWwvYXJjaC1taXBzL2FzbS9yZWdkZWYuaAppbmRleCAxMmQ5YzQyLi44NzAwMzI1IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9hcmNoLW1pcHMvYXNtL3JlZ2RlZi5oCisrKyBiL2xpYmMva2VybmVsL2FyY2gtbWlwcy9hc20vcmVnZGVmLmgKQEAgLTIxLDE3ICsyMSwxNyBAQAogI2luY2x1ZGUgPGFzbS9zZ2lkZWZzLmg+CiAjaWYgX01JUFNfU0lNID09IF9NSVBTX1NJTV9BQkkzMgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgemVybyAkMCAgCi0jZGVmaW5lIEFUICQxICAKLSNkZWZpbmUgdjAgJDIgIAorI2RlZmluZSB6ZXJvICQwCisjZGVmaW5lIEFUICQxCisjZGVmaW5lIHYwICQyCiAjZGVmaW5lIHYxICQzCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBhMCAkNCAgCisjZGVmaW5lIGEwICQ0CiAjZGVmaW5lIGExICQ1CiAjZGVmaW5lIGEyICQ2CiAjZGVmaW5lIGEzICQ3CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSB0MCAkOCAgCisjZGVmaW5lIHQwICQ4CiAjZGVmaW5lIHQxICQ5CiAjZGVmaW5lIHQyICQxMAogI2RlZmluZSB0MyAkMTEKQEAgLTQxLDcgKzQxLDcgQEAKICNkZWZpbmUgdDYgJDE0CiAjZGVmaW5lIHQ3ICQxNQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgczAgJDE2ICAKKyNkZWZpbmUgczAgJDE2CiAjZGVmaW5lIHMxICQxNwogI2RlZmluZSBzMiAkMTgKICNkZWZpbmUgczMgJDE5CkBAIC01MSwzMiArNTEsMzIgQEAKICNkZWZpbmUgczYgJDIyCiAjZGVmaW5lIHM3ICQyMwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgdDggJDI0ICAKKyNkZWZpbmUgdDggJDI0CiAjZGVmaW5lIHQ5ICQyNQotI2RlZmluZSBqcCAkMjUgIAotI2RlZmluZSBrMCAkMjYgIAorI2RlZmluZSBqcCAkMjUKKyNkZWZpbmUgazAgJDI2CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBrMSAkMjcKLSNkZWZpbmUgZ3AgJDI4ICAKLSNkZWZpbmUgc3AgJDI5ICAKLSNkZWZpbmUgZnAgJDMwICAKKyNkZWZpbmUgZ3AgJDI4CisjZGVmaW5lIHNwICQyOQorI2RlZmluZSBmcCAkMzAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIHM4ICQzMCAgCi0jZGVmaW5lIHJhICQzMSAgCisjZGVmaW5lIHM4ICQzMAorI2RlZmluZSByYSAkMzEKICNlbmRpZgogI2lmIF9NSVBTX1NJTSA9PSBfTUlQU19TSU1fQUJJNjQgfHwgX01JUFNfU0lNID09IF9NSVBTX1NJTV9OQUJJMzIKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIHplcm8gJDAgIAotI2RlZmluZSBBVCAkYXQgIAotI2RlZmluZSB2MCAkMiAgCisjZGVmaW5lIHplcm8gJDAKKyNkZWZpbmUgQVQgJGF0CisjZGVmaW5lIHYwICQyCiAjZGVmaW5lIHYxICQzCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBhMCAkNCAgCisjZGVmaW5lIGEwICQ0CiAjZGVmaW5lIGExICQ1CiAjZGVmaW5lIGEyICQ2CiAjZGVmaW5lIGEzICQ3CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBhNCAkOCAgCisjZGVmaW5lIGE0ICQ4CiAjZGVmaW5lIHRhMCAkOAogI2RlZmluZSBhNSAkOQogI2RlZmluZSB0YTEgJDkKQEAgLTg2LDEyICs4NiwxMiBAQAogI2RlZmluZSBhNyAkMTEKICNkZWZpbmUgdGEzICQxMQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgdDAgJDEyICAKKyNkZWZpbmUgdDAgJDEyCiAjZGVmaW5lIHQxICQxMwogI2RlZmluZSB0MiAkMTQKICNkZWZpbmUgdDMgJDE1CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBzMCAkMTYgIAorI2RlZmluZSBzMCAkMTYKICNkZWZpbmUgczEgJDE3CiAjZGVmaW5lIHMyICQxOAogI2RlZmluZSBzMyAkMTkKQEAgLTEwMSwxOCArMTAxLDE4IEBACiAjZGVmaW5lIHM2ICQyMgogI2RlZmluZSBzNyAkMjMKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIHQ4ICQyNCAgCi0jZGVmaW5lIHQ5ICQyNSAgCi0jZGVmaW5lIGpwICQyNSAgCi0jZGVmaW5lIGswICQyNiAgCisjZGVmaW5lIHQ4ICQyNAorI2RlZmluZSB0OSAkMjUKKyNkZWZpbmUganAgJDI1CisjZGVmaW5lIGswICQyNgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgazEgJDI3Ci0jZGVmaW5lIGdwICQyOCAgCi0jZGVmaW5lIHNwICQyOSAgCi0jZGVmaW5lIGZwICQzMCAgCisjZGVmaW5lIGdwICQyOAorI2RlZmluZSBzcCAkMjkKKyNkZWZpbmUgZnAgJDMwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBzOCAkMzAgIAotI2RlZmluZSByYSAkMzEgIAorI2RlZmluZSBzOCAkMzAKKyNkZWZpbmUgcmEgJDMxCiAjZW5kaWYKICNlbmRpZgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gtbWlwcy9hc20vcmVzb3VyY2UuaCBiL2xpYmMva2VybmVsL2FyY2gtbWlwcy9hc20vcmVzb3VyY2UuaAppbmRleCBlODQxMDcyLi44NzYxNjk3IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9hcmNoLW1pcHMvYXNtL3Jlc291cmNlLmgKKysrIGIvbGliYy9rZXJuZWwvYXJjaC1taXBzL2FzbS9yZXNvdXJjZS5oCkBAIC0xOCwxMiArMTgsMTMgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfQVNNX1JFU09VUkNFX0gKICNkZWZpbmUgX0FTTV9SRVNPVVJDRV9ICi0jZGVmaW5lIFJMSU1JVF9OT0ZJTEUgNSAgCi0jZGVmaW5lIFJMSU1JVF9BUyA2ICAKKyNkZWZpbmUgUkxJTUlUX05PRklMRSA1CisjZGVmaW5lIFJMSU1JVF9BUyA2CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBSTElNSVRfUlNTIDcgIAotI2RlZmluZSBSTElNSVRfTlBST0MgOCAgCi0jZGVmaW5lIFJMSU1JVF9NRU1MT0NLIDkgIAorI2RlZmluZSBSTElNSVRfUlNTIDcKKyNkZWZpbmUgUkxJTUlUX05QUk9DIDgKKyNkZWZpbmUgUkxJTUlUX01FTUxPQ0sgOQorI2RlZmluZSBSTElNX0lORklOSVRZIDB4N2ZmZmZmZmZVTAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9yZXNvdXJjZS5oPgotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC1taXBzL2FzbS9zZ2kvaHBjMy5oIGIvbGliYy9rZXJuZWwvYXJjaC1taXBzL2FzbS9zZ2kvaHBjMy5oCmluZGV4IGQ0ZjQyODAuLmQ2NGZjNmYgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2FyY2gtbWlwcy9hc20vc2dpL2hwYzMuaAorKysgYi9saWJjL2tlcm5lbC9hcmNoLW1pcHMvYXNtL3NnaS9ocGMzLmgKQEAgLTI0LDE5ICsyNCwxOSBAQAogc3RydWN0IGhwY19kbWFfZGVzYyB7CiAgdTMyIHBidWY7CiAgdTMyIGNudGluZm87Ci0jZGVmaW5lIEhQQ0RNQV9FT1ggMHg4MDAwMDAwMCAgCisjZGVmaW5lIEhQQ0RNQV9FT1ggMHg4MDAwMDAwMAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgSFBDRE1BX0VPUiAweDgwMDAwMDAwICAKLSNkZWZpbmUgSFBDRE1BX0VPWFAgMHg0MDAwMDAwMCAgCi0jZGVmaW5lIEhQQ0RNQV9FT1JQIDB4NDAwMDAwMDAgIAotI2RlZmluZSBIUENETUFfWElFIDB4MjAwMDAwMDAgIAorI2RlZmluZSBIUENETUFfRU9SIDB4ODAwMDAwMDAKKyNkZWZpbmUgSFBDRE1BX0VPWFAgMHg0MDAwMDAwMAorI2RlZmluZSBIUENETUFfRU9SUCAweDQwMDAwMDAwCisjZGVmaW5lIEhQQ0RNQV9YSUUgMHgyMDAwMDAwMAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgSFBDRE1BX1hJVSAweDAxMDAwMDAwICAKLSNkZWZpbmUgSFBDRE1BX0VJUEMgMHgwMGZmMDAwMCAgCi0jZGVmaW5lIEhQQ0RNQV9FVFhEIDB4MDAwMDgwMDAgIAotI2RlZmluZSBIUENETUFfT1dOIDB4MDAwMDQwMDAgIAorI2RlZmluZSBIUENETUFfWElVIDB4MDEwMDAwMDAKKyNkZWZpbmUgSFBDRE1BX0VJUEMgMHgwMGZmMDAwMAorI2RlZmluZSBIUENETUFfRVRYRCAweDAwMDA4MDAwCisjZGVmaW5lIEhQQ0RNQV9PV04gMHgwMDAwNDAwMAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgSFBDRE1BX0JDTlQgMHgwMDAwM2ZmZiAgCisjZGVmaW5lIEhQQ0RNQV9CQ05UIDB4MDAwMDNmZmYKICB1MzIgcG5leHQ7CiB9Owogc3RydWN0IGhwYzNfcGJ1c19kbWFjcmVncyB7CkBAIC00NiwxOSArNDYsMTkgQEAKICB1MzIgX3VudXNlZDBbMHgxMDAwLzQgLSAyXTsKICB2b2xhdGlsZSB1MzIgcGJkbWFfY3RybDsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIEhQQzNfUERNQUNUUkxfSU5UIDB4MDAwMDAwMDEgIAotI2RlZmluZSBIUEMzX1BETUFDVFJMX0lTQUNUIDB4MDAwMDAwMDIgIAotI2RlZmluZSBIUEMzX1BETUFDVFJMX1NFTCAweDAwMDAwMDAyICAKLSNkZWZpbmUgSFBDM19QRE1BQ1RSTF9SQ1YgMHgwMDAwMDAwNCAgCisjZGVmaW5lIEhQQzNfUERNQUNUUkxfSU5UIDB4MDAwMDAwMDEKKyNkZWZpbmUgSFBDM19QRE1BQ1RSTF9JU0FDVCAweDAwMDAwMDAyCisjZGVmaW5lIEhQQzNfUERNQUNUUkxfU0VMIDB4MDAwMDAwMDIKKyNkZWZpbmUgSFBDM19QRE1BQ1RSTF9SQ1YgMHgwMDAwMDAwNAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgSFBDM19QRE1BQ1RSTF9GTFNIIDB4MDAwMDAwMDggIAotI2RlZmluZSBIUEMzX1BETUFDVFJMX0FDVCAweDAwMDAwMDEwICAKLSNkZWZpbmUgSFBDM19QRE1BQ1RSTF9MRCAweDAwMDAwMDIwICAKLSNkZWZpbmUgSFBDM19QRE1BQ1RSTF9SVCAweDAwMDAwMDQwICAKKyNkZWZpbmUgSFBDM19QRE1BQ1RSTF9GTFNIIDB4MDAwMDAwMDgKKyNkZWZpbmUgSFBDM19QRE1BQ1RSTF9BQ1QgMHgwMDAwMDAxMAorI2RlZmluZSBIUEMzX1BETUFDVFJMX0xEIDB4MDAwMDAwMjAKKyNkZWZpbmUgSFBDM19QRE1BQ1RSTF9SVCAweDAwMDAwMDQwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBIUEMzX1BETUFDVFJMX0hXIDB4MDAwMGZmMDAgIAotI2RlZmluZSBIUEMzX1BETUFDVFJMX0ZCIDB4MDAzZjAwMDAgIAotI2RlZmluZSBIUEMzX1BETUFDVFJMX0ZFIDB4M2YwMDAwMDAgIAorI2RlZmluZSBIUEMzX1BETUFDVFJMX0hXIDB4MDAwMGZmMDAKKyNkZWZpbmUgSFBDM19QRE1BQ1RSTF9GQiAweDAwM2YwMDAwCisjZGVmaW5lIEhQQzNfUERNQUNUUkxfRkUgMHgzZjAwMDAwMAogIHUzMiBfdW51c2VkMVsweDEwMDAvNCAtIDFdOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CkBAIC02OCw0OCArNjgsNDggQEAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdTMyIF91bnVzZWQwWzB4MTAwMC80IC0gMl07CiAgdm9sYXRpbGUgdTMyIGJjZDsKLSNkZWZpbmUgSFBDM19TQkNEX0JDTlRNU0sgMHgwMDAwM2ZmZiAgCi0jZGVmaW5lIEhQQzNfU0JDRF9YSUUgMHgwMDAwNDAwMCAgCisjZGVmaW5lIEhQQzNfU0JDRF9CQ05UTVNLIDB4MDAwMDNmZmYKKyNkZWZpbmUgSFBDM19TQkNEX1hJRSAweDAwMDA0MDAwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBIUEMzX1NCQ0RfRU9YIDB4MDAwMDgwMDAgIAorI2RlZmluZSBIUEMzX1NCQ0RfRU9YIDB4MDAwMDgwMDAKICB2b2xhdGlsZSB1MzIgY3RybDsKLSNkZWZpbmUgSFBDM19TQ1RSTF9JUlEgMHgwMSAgCi0jZGVmaW5lIEhQQzNfU0NUUkxfRU5ESUFOIDB4MDIgIAorI2RlZmluZSBIUEMzX1NDVFJMX0lSUSAweDAxCisjZGVmaW5lIEhQQzNfU0NUUkxfRU5ESUFOIDB4MDIKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIEhQQzNfU0NUUkxfRElSIDB4MDQgIAotI2RlZmluZSBIUEMzX1NDVFJMX0ZMVVNIIDB4MDggIAotI2RlZmluZSBIUEMzX1NDVFJMX0FDVElWRSAweDEwICAKLSNkZWZpbmUgSFBDM19TQ1RSTF9BTUFTSyAweDIwICAKKyNkZWZpbmUgSFBDM19TQ1RSTF9ESVIgMHgwNAorI2RlZmluZSBIUEMzX1NDVFJMX0ZMVVNIIDB4MDgKKyNkZWZpbmUgSFBDM19TQ1RSTF9BQ1RJVkUgMHgxMAorI2RlZmluZSBIUEMzX1NDVFJMX0FNQVNLIDB4MjAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIEhQQzNfU0NUUkxfQ1JFU0VUIDB4NDAgIAotI2RlZmluZSBIUEMzX1NDVFJMX1BFUlIgMHg4MCAgCisjZGVmaW5lIEhQQzNfU0NUUkxfQ1JFU0VUIDB4NDAKKyNkZWZpbmUgSFBDM19TQ1RSTF9QRVJSIDB4ODAKICB2b2xhdGlsZSB1MzIgZ2ZwdHI7CiAgdm9sYXRpbGUgdTMyIGRmcHRyOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB2b2xhdGlsZSB1MzIgZGNvbmZpZzsKLSNkZWZpbmUgSFBDM19TRENGR19IQ0xLIDB4MDAwMDEgIAotI2RlZmluZSBIUEMzX1NEQ0ZHX0QxIDB4MDAwMDYgIAotI2RlZmluZSBIUEMzX1NEQ0ZHX0QyIDB4MDAwMzggIAorI2RlZmluZSBIUEMzX1NEQ0ZHX0hDTEsgMHgwMDAwMQorI2RlZmluZSBIUEMzX1NEQ0ZHX0QxIDB4MDAwMDYKKyNkZWZpbmUgSFBDM19TRENGR19EMiAweDAwMDM4CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBIUEMzX1NEQ0ZHX0QzIDB4MDAxYzAgIAotI2RlZmluZSBIUEMzX1NEQ0ZHX0hXQVQgMHgwMGUwMCAgCi0jZGVmaW5lIEhQQzNfU0RDRkdfSFcgMHgwMTAwMCAgCi0jZGVmaW5lIEhQQzNfU0RDRkdfU1dBUCAweDAyMDAwICAKKyNkZWZpbmUgSFBDM19TRENGR19EMyAweDAwMWMwCisjZGVmaW5lIEhQQzNfU0RDRkdfSFdBVCAweDAwZTAwCisjZGVmaW5lIEhQQzNfU0RDRkdfSFcgMHgwMTAwMAorI2RlZmluZSBIUEMzX1NEQ0ZHX1NXQVAgMHgwMjAwMAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgSFBDM19TRENGR19FUEFSIDB4MDQwMDAgIAotI2RlZmluZSBIUEMzX1NEQ0ZHX1BPTEwgMHgwODAwMCAgCi0jZGVmaW5lIEhQQzNfU0RDRkdfRVJMWSAweDMwMDAwICAKKyNkZWZpbmUgSFBDM19TRENGR19FUEFSIDB4MDQwMDAKKyNkZWZpbmUgSFBDM19TRENGR19QT0xMIDB4MDgwMDAKKyNkZWZpbmUgSFBDM19TRENGR19FUkxZIDB4MzAwMDAKICB2b2xhdGlsZSB1MzIgcGNvbmZpZzsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIEhQQzNfU1BDRkdfUDMgMHgwMDAzICAKLSNkZWZpbmUgSFBDM19TUENGR19QMlcgMHgwMDFjICAKLSNkZWZpbmUgSFBDM19TUENGR19QMlIgMHgwMWUwICAKLSNkZWZpbmUgSFBDM19TUENGR19QMSAweDBlMDAgIAorI2RlZmluZSBIUEMzX1NQQ0ZHX1AzIDB4MDAwMworI2RlZmluZSBIUEMzX1NQQ0ZHX1AyVyAweDAwMWMKKyNkZWZpbmUgSFBDM19TUENGR19QMlIgMHgwMWUwCisjZGVmaW5lIEhQQzNfU1BDRkdfUDEgMHgwZTAwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBIUEMzX1NQQ0ZHX0hXIDB4MTAwMCAgCi0jZGVmaW5lIEhQQzNfU1BDRkdfU1dBUCAweDIwMDAgIAotI2RlZmluZSBIUEMzX1NQQ0ZHX0VQQVIgMHg0MDAwICAKLSNkZWZpbmUgSFBDM19TUENGR19GVUpJIDB4ODAwMCAgCisjZGVmaW5lIEhQQzNfU1BDRkdfSFcgMHgxMDAwCisjZGVmaW5lIEhQQzNfU1BDRkdfU1dBUCAweDIwMDAKKyNkZWZpbmUgSFBDM19TUENGR19FUEFSIDB4NDAwMAorI2RlZmluZSBIUEMzX1NQQ0ZHX0ZVSkkgMHg4MDAwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHUzMiBfdW51c2VkMVsweDEwMDAvNCAtIDZdOwogfTsKQEAgLTExOSw0NiArMTE5LDQ2IEBACiAgdm9sYXRpbGUgdTMyIHJ4X25kcHRyOwogIHUzMiBfdW51c2VkMFsweDEwMDAvNCAtIDJdOwogIHZvbGF0aWxlIHUzMiByeF9iY2Q7Ci0jZGVmaW5lIEhQQzNfRVJYQkNEX0JDTlRNU0sgMHgwMDAwM2ZmZiAgCisjZGVmaW5lIEhQQzNfRVJYQkNEX0JDTlRNU0sgMHgwMDAwM2ZmZgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgSFBDM19FUlhCQ0RfWElFIDB4MjAwMDAwMDAgIAotI2RlZmluZSBIUEMzX0VSWEJDRF9FT1ggMHg4MDAwMDAwMCAgCisjZGVmaW5lIEhQQzNfRVJYQkNEX1hJRSAweDIwMDAwMDAwCisjZGVmaW5lIEhQQzNfRVJYQkNEX0VPWCAweDgwMDAwMDAwCiAgdm9sYXRpbGUgdTMyIHJ4X2N0cmw7Ci0jZGVmaW5lIEhQQzNfRVJYQ1RSTF9TVEFUNTAgMHgwMDAwMDAzZiAgCisjZGVmaW5lIEhQQzNfRVJYQ1RSTF9TVEFUNTAgMHgwMDAwMDAzZgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgSFBDM19FUlhDVFJMX1NUQVQ2IDB4MDAwMDAwNDAgIAotI2RlZmluZSBIUEMzX0VSWENUUkxfU1RBVDcgMHgwMDAwMDA4MCAgCi0jZGVmaW5lIEhQQzNfRVJYQ1RSTF9FTkRJQU4gMHgwMDAwMDEwMCAgCi0jZGVmaW5lIEhQQzNfRVJYQ1RSTF9BQ1RJVkUgMHgwMDAwMDIwMCAgCisjZGVmaW5lIEhQQzNfRVJYQ1RSTF9TVEFUNiAweDAwMDAwMDQwCisjZGVmaW5lIEhQQzNfRVJYQ1RSTF9TVEFUNyAweDAwMDAwMDgwCisjZGVmaW5lIEhQQzNfRVJYQ1RSTF9FTkRJQU4gMHgwMDAwMDEwMAorI2RlZmluZSBIUEMzX0VSWENUUkxfQUNUSVZFIDB4MDAwMDAyMDAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIEhQQzNfRVJYQ1RSTF9BTUFTSyAweDAwMDAwNDAwICAKLSNkZWZpbmUgSFBDM19FUlhDVFJMX1JCTyAweDAwMDAwODAwICAKKyNkZWZpbmUgSFBDM19FUlhDVFJMX0FNQVNLIDB4MDAwMDA0MDAKKyNkZWZpbmUgSFBDM19FUlhDVFJMX1JCTyAweDAwMDAwODAwCiAgdm9sYXRpbGUgdTMyIHJ4X2dmcHRyOwogIHZvbGF0aWxlIHUzMiByeF9kZnB0cjsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdTMyIF91bnVzZWQxOwogIHZvbGF0aWxlIHUzMiByZXNldDsKLSNkZWZpbmUgSFBDM19FUlNUX0NSRVNFVCAweDEgIAotI2RlZmluZSBIUEMzX0VSU1RfQ0xSSVJRIDB4MiAgCisjZGVmaW5lIEhQQzNfRVJTVF9DUkVTRVQgMHgxCisjZGVmaW5lIEhQQzNfRVJTVF9DTFJJUlEgMHgyCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBIUEMzX0VSU1RfTEJBQ0sgMHg0ICAKKyNkZWZpbmUgSFBDM19FUlNUX0xCQUNLIDB4NAogIHZvbGF0aWxlIHUzMiBkY29uZmlnOwotI2RlZmluZSBIUEMzX0VEQ0ZHX0QxIDB4MDAwMGYgIAotI2RlZmluZSBIUEMzX0VEQ0ZHX0QyIDB4MDAwZjAgIAorI2RlZmluZSBIUEMzX0VEQ0ZHX0QxIDB4MDAwMGYKKyNkZWZpbmUgSFBDM19FRENGR19EMiAweDAwMGYwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBIUEMzX0VEQ0ZHX0QzIDB4MDBmMDAgIAotI2RlZmluZSBIUEMzX0VEQ0ZHX1dDVFJMIDB4MDEwMDAgIAotI2RlZmluZSBIUEMzX0VEQ0ZHX0ZSWERDIDB4MDIwMDAgIAotI2RlZmluZSBIUEMzX0VEQ0ZHX0ZFT1AgMHgwNDAwMCAgCisjZGVmaW5lIEhQQzNfRURDRkdfRDMgMHgwMGYwMAorI2RlZmluZSBIUEMzX0VEQ0ZHX1dDVFJMIDB4MDEwMDAKKyNkZWZpbmUgSFBDM19FRENGR19GUlhEQyAweDAyMDAwCisjZGVmaW5lIEhQQzNfRURDRkdfRkVPUCAweDA0MDAwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBIUEMzX0VEQ0ZHX0ZJUlEgMHgwODAwMCAgCi0jZGVmaW5lIEhQQzNfRURDRkdfUFRPIDB4MzAwMDAgIAorI2RlZmluZSBIUEMzX0VEQ0ZHX0ZJUlEgMHgwODAwMAorI2RlZmluZSBIUEMzX0VEQ0ZHX1BUTyAweDMwMDAwCiAgdm9sYXRpbGUgdTMyIHBjb25maWc7Ci0jZGVmaW5lIEhQQzNfRVBDRkdfUDEgMHgwMDBmICAKKyNkZWZpbmUgSFBDM19FUENGR19QMSAweDAwMGYKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIEhQQzNfRVBDRkdfUDIgMHgwMGYwICAKLSNkZWZpbmUgSFBDM19FUENGR19QMyAweDBmMDAgIAotI2RlZmluZSBIUEMzX0VQQ0ZHX1RTVCAweDEwMDAgIAorI2RlZmluZSBIUEMzX0VQQ0ZHX1AyIDB4MDBmMAorI2RlZmluZSBIUEMzX0VQQ0ZHX1AzIDB4MGYwMAorI2RlZmluZSBIUEMzX0VQQ0ZHX1RTVCAweDEwMDAKICB1MzIgX3VudXNlZDJbMHgxMDAwLzQgLSA4XTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdm9sYXRpbGUgdTMyIHR4X2NicHRyOwpAQCAtMTY2LDIwICsxNjYsMjAgQEAKICB1MzIgX3VudXNlZDNbMHgxMDAwLzQgLSAyXTsKICB2b2xhdGlsZSB1MzIgdHhfYmNkOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgSFBDM19FVFhCQ0RfQkNOVE1TSyAweDAwMDAzZmZmICAKLSNkZWZpbmUgSFBDM19FVFhCQ0RfRVNBTVAgMHgxMDAwMDAwMCAgCi0jZGVmaW5lIEhQQzNfRVRYQkNEX1hJRSAweDIwMDAwMDAwICAKLSNkZWZpbmUgSFBDM19FVFhCQ0RfRU9QIDB4NDAwMDAwMDAgIAorI2RlZmluZSBIUEMzX0VUWEJDRF9CQ05UTVNLIDB4MDAwMDNmZmYKKyNkZWZpbmUgSFBDM19FVFhCQ0RfRVNBTVAgMHgxMDAwMDAwMAorI2RlZmluZSBIUEMzX0VUWEJDRF9YSUUgMHgyMDAwMDAwMAorI2RlZmluZSBIUEMzX0VUWEJDRF9FT1AgMHg0MDAwMDAwMAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgSFBDM19FVFhCQ0RfRU9YIDB4ODAwMDAwMDAgIAorI2RlZmluZSBIUEMzX0VUWEJDRF9FT1ggMHg4MDAwMDAwMAogIHZvbGF0aWxlIHUzMiB0eF9jdHJsOwotI2RlZmluZSBIUEMzX0VUWENUUkxfU1RBVDMwIDB4MDAwMDAwMGYgIAotI2RlZmluZSBIUEMzX0VUWENUUkxfU1RBVDQgMHgwMDAwMDAxMCAgCisjZGVmaW5lIEhQQzNfRVRYQ1RSTF9TVEFUMzAgMHgwMDAwMDAwZgorI2RlZmluZSBIUEMzX0VUWENUUkxfU1RBVDQgMHgwMDAwMDAxMAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgSFBDM19FVFhDVFJMX1NUQVQ3NSAweDAwMDAwMGUwICAKLSNkZWZpbmUgSFBDM19FVFhDVFJMX0VORElBTiAweDAwMDAwMTAwICAKLSNkZWZpbmUgSFBDM19FVFhDVFJMX0FDVElWRSAweDAwMDAwMjAwICAKLSNkZWZpbmUgSFBDM19FVFhDVFJMX0FNQVNLIDB4MDAwMDA0MDAgIAorI2RlZmluZSBIUEMzX0VUWENUUkxfU1RBVDc1IDB4MDAwMDAwZTAKKyNkZWZpbmUgSFBDM19FVFhDVFJMX0VORElBTiAweDAwMDAwMTAwCisjZGVmaW5lIEhQQzNfRVRYQ1RSTF9BQ1RJVkUgMHgwMDAwMDIwMAorI2RlZmluZSBIUEMzX0VUWENUUkxfQU1BU0sgMHgwMDAwMDQwMAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB2b2xhdGlsZSB1MzIgdHhfZ2ZwdHI7CiAgdm9sYXRpbGUgdTMyIHR4X2RmcHRyOwpAQCAtMTkzLDI4ICsxOTMsMjggQEAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdTMyIF91bnVzZWQwWzB4MTgwMDAvNF07CiAgdm9sYXRpbGUgdTMyIGlzdGF0MDsKLSNkZWZpbmUgSFBDM19JU1RBVF9QQklNQVNLIDB4MGZmICAKLSNkZWZpbmUgSFBDM19JU1RBVF9TQzBNQVNLIDB4MTAwICAKKyNkZWZpbmUgSFBDM19JU1RBVF9QQklNQVNLIDB4MGZmCisjZGVmaW5lIEhQQzNfSVNUQVRfU0MwTUFTSyAweDEwMAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgSFBDM19JU1RBVF9TQzFNQVNLIDB4MjAwICAKKyNkZWZpbmUgSFBDM19JU1RBVF9TQzFNQVNLIDB4MjAwCiAgdm9sYXRpbGUgdTMyIGdpb19taXNjOwotI2RlZmluZSBIUEMzX0dJT01JU0NfRVJUSU1FIDB4MSAgCi0jZGVmaW5lIEhQQzNfR0lPTUlTQ19ERU5ESUFOIDB4MiAgCisjZGVmaW5lIEhQQzNfR0lPTUlTQ19FUlRJTUUgMHgxCisjZGVmaW5lIEhQQzNfR0lPTUlTQ19ERU5ESUFOIDB4MgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1MzIgZWVwcm9tOwotI2RlZmluZSBIUEMzX0VFUFJPTV9FUFJPVCAweDAxICAKLSNkZWZpbmUgSFBDM19FRVBST01fQ1NFTCAweDAyICAKLSNkZWZpbmUgSFBDM19FRVBST01fRUNMSyAweDA0ICAKKyNkZWZpbmUgSFBDM19FRVBST01fRVBST1QgMHgwMQorI2RlZmluZSBIUEMzX0VFUFJPTV9DU0VMIDB4MDIKKyNkZWZpbmUgSFBDM19FRVBST01fRUNMSyAweDA0CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBIUEMzX0VFUFJPTV9EQVRPIDB4MDggIAotI2RlZmluZSBIUEMzX0VFUFJPTV9EQVRJIDB4MTAgIAorI2RlZmluZSBIUEMzX0VFUFJPTV9EQVRPIDB4MDgKKyNkZWZpbmUgSFBDM19FRVBST01fREFUSSAweDEwCiAgdm9sYXRpbGUgdTMyIGlzdGF0MTsKICB2b2xhdGlsZSB1MzIgYmVzdGF0OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgSFBDM19CRVNUQVRfQkxNQVNLIDB4MDAwZmYgIAotI2RlZmluZSBIUEMzX0JFU1RBVF9DVFlQRSAweDAwMTAwICAKKyNkZWZpbmUgSFBDM19CRVNUQVRfQkxNQVNLIDB4MDAwZmYKKyNkZWZpbmUgSFBDM19CRVNUQVRfQ1RZUEUgMHgwMDEwMAogI2RlZmluZSBIUEMzX0JFU1RBVF9QSURTSElGVCA5Ci0jZGVmaW5lIEhQQzNfQkVTVEFUX1BJRE1BU0sgMHgzZjcwMCAgCisjZGVmaW5lIEhQQzNfQkVTVEFUX1BJRE1BU0sgMHgzZjcwMAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1MzIgX3VudXNlZDFbMHgxNDAwMC80IC0gNV07CiAgdm9sYXRpbGUgdTMyIHNjc2kwX2V4dFsyNTZdOwpAQCAtMjY5LDIyICsyNjksMjIgQEAKICNkZWZpbmUgSFBDM19QSU9DRkdfRFMxNiAweDQwMDAwCiAjZGVmaW5lIEhQQzNfUElPQ0ZHX0VWRU5ISSAweDgwMDAwCiAgdm9sYXRpbGUgdTMyIHBidXNfcHJvbXdlOwotI2RlZmluZSBIUEMzX1BST01fV0VOQUIgMHgxICAKKyNkZWZpbmUgSFBDM19QUk9NX1dFTkFCIDB4MQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1MzIgX3VudXNlZDVbMHgwODAwLzQgLSAxXTsKICB2b2xhdGlsZSB1MzIgcGJ1c19wcm9tc3dhcDsKLSNkZWZpbmUgSFBDM19QUk9NX1NXQVAgMHgxICAKKyNkZWZpbmUgSFBDM19QUk9NX1NXQVAgMHgxCiAgdTMyIF91bnVzZWQ2WzB4MDgwMC80IC0gMV07CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHZvbGF0aWxlIHUzMiBwYnVzX2dvdXQ7Ci0jZGVmaW5lIEhQQzNfUFJPTV9TVEFUIDB4MSAgCisjZGVmaW5lIEhQQzNfUFJPTV9TVEFUIDB4MQogIHUzMiBfdW51c2VkN1sweDEwMDAvNCAtIDFdOwogIHZvbGF0aWxlIHUzMiBydGNyZWdzWzE0XTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdTMyIF91bnVzZWQ4WzUwXTsKICB2b2xhdGlsZSB1MzIgYmJyYW1bODE5Mi01MC0xNF07CiB9OwotI2RlZmluZSBIUEMzX0NISVAwX0JBU0UgMHgxZmI4MDAwMCAgCisjZGVmaW5lIEhQQzNfQ0hJUDBfQkFTRSAweDFmYjgwMDAwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBIUEMzX0NISVAxX0JBU0UgMHgxZmIwMDAwMCAgCisjZGVmaW5lIEhQQzNfQ0hJUDFfQkFTRSAweDFmYjAwMDAwCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gtbWlwcy9hc20vc2dpL2lvYy5oIGIvbGliYy9rZXJuZWwvYXJjaC1taXBzL2FzbS9zZ2kvaW9jLmgKaW5kZXggZGI3NWIyMC4uM2ZjMTlhOSAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvYXJjaC1taXBzL2FzbS9zZ2kvaW9jLmgKKysrIGIvbGliYy9rZXJuZWwvYXJjaC1taXBzL2FzbS9zZ2kvaW9jLmgKQEAgLTk4LDI3ICs5OCwyNyBAQAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1OCBfdGN3b3JkWzNdOwogIHZvbGF0aWxlIHU4IHRjd29yZDsKLSNkZWZpbmUgU0dJTlRfVENXT1JEX0JDRCAweDAxICAKLSNkZWZpbmUgU0dJTlRfVENXT1JEX01NQVNLIDB4MGUgIAorI2RlZmluZSBTR0lOVF9UQ1dPUkRfQkNEIDB4MDEKKyNkZWZpbmUgU0dJTlRfVENXT1JEX01NQVNLIDB4MGUKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIFNHSU5UX1RDV09SRF9NSVRDIDB4MDAgIAotI2RlZmluZSBTR0lOVF9UQ1dPUkRfTU9TIDB4MDIgIAotI2RlZmluZSBTR0lOVF9UQ1dPUkRfTVJHRU4gMHgwNCAgCi0jZGVmaW5lIFNHSU5UX1RDV09SRF9NU1dHRU4gMHgwNiAgCisjZGVmaW5lIFNHSU5UX1RDV09SRF9NSVRDIDB4MDAKKyNkZWZpbmUgU0dJTlRfVENXT1JEX01PUyAweDAyCisjZGVmaW5lIFNHSU5UX1RDV09SRF9NUkdFTiAweDA0CisjZGVmaW5lIFNHSU5UX1RDV09SRF9NU1dHRU4gMHgwNgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgU0dJTlRfVENXT1JEX01TV1NUIDB4MDggIAotI2RlZmluZSBTR0lOVF9UQ1dPUkRfTUhXU1QgMHgwYSAgCi0jZGVmaW5lIFNHSU5UX1RDV09SRF9DTUFTSyAweDMwICAKLSNkZWZpbmUgU0dJTlRfVENXT1JEX0NMQVQgMHgwMCAgCisjZGVmaW5lIFNHSU5UX1RDV09SRF9NU1dTVCAweDA4CisjZGVmaW5lIFNHSU5UX1RDV09SRF9NSFdTVCAweDBhCisjZGVmaW5lIFNHSU5UX1RDV09SRF9DTUFTSyAweDMwCisjZGVmaW5lIFNHSU5UX1RDV09SRF9DTEFUIDB4MDAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIFNHSU5UX1RDV09SRF9DTFNCIDB4MTAgIAotI2RlZmluZSBTR0lOVF9UQ1dPUkRfQ01TQiAweDIwICAKLSNkZWZpbmUgU0dJTlRfVENXT1JEX0NBTEwgMHgzMCAgCi0jZGVmaW5lIFNHSU5UX1RDV09SRF9DTlQwIDB4MDAgIAorI2RlZmluZSBTR0lOVF9UQ1dPUkRfQ0xTQiAweDEwCisjZGVmaW5lIFNHSU5UX1RDV09SRF9DTVNCIDB4MjAKKyNkZWZpbmUgU0dJTlRfVENXT1JEX0NBTEwgMHgzMAorI2RlZmluZSBTR0lOVF9UQ1dPUkRfQ05UMCAweDAwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBTR0lOVF9UQ1dPUkRfQ05UMSAweDQwICAKLSNkZWZpbmUgU0dJTlRfVENXT1JEX0NOVDIgMHg4MCAgCi0jZGVmaW5lIFNHSU5UX1RDV09SRF9DUkJDSyAweGMwICAKKyNkZWZpbmUgU0dJTlRfVENXT1JEX0NOVDEgMHg0MAorI2RlZmluZSBTR0lOVF9UQ1dPUkRfQ05UMiAweDgwCisjZGVmaW5lIFNHSU5UX1RDV09SRF9DUkJDSyAweGMwCiB9OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU0dJTlRfVElNRVJfQ0xPQ0sgMTAwMDAwMApAQCAtMTU5LDUyICsxNTksNTIgQEAKICB1MzIgX3VudXNlZDM7CiAgdTggX2RtYXNlbFszXTsKICB2b2xhdGlsZSB1OCBkbWFzZWw7Ci0jZGVmaW5lIFNHSU9DX0RNQVNFTF9TQ0xLMTBNSFogMHgwMCAgCisjZGVmaW5lIFNHSU9DX0RNQVNFTF9TQ0xLMTBNSFogMHgwMAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgU0dJT0NfRE1BU0VMX0lTRE5CIDB4MDEgIAotI2RlZmluZSBTR0lPQ19ETUFTRUxfSVNETkEgMHgwMiAgCi0jZGVmaW5lIFNHSU9DX0RNQVNFTF9QUE9SVCAweDA0ICAKLSNkZWZpbmUgU0dJT0NfRE1BU0VMX1NDTEs2NjdNSFogMHgxMCAgCisjZGVmaW5lIFNHSU9DX0RNQVNFTF9JU0ROQiAweDAxCisjZGVmaW5lIFNHSU9DX0RNQVNFTF9JU0ROQSAweDAyCisjZGVmaW5lIFNHSU9DX0RNQVNFTF9QUE9SVCAweDA0CisjZGVmaW5lIFNHSU9DX0RNQVNFTF9TQ0xLNjY3TUhaIDB4MTAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIFNHSU9DX0RNQVNFTF9TQ0xLRVhUIDB4MjAgIAorI2RlZmluZSBTR0lPQ19ETUFTRUxfU0NMS0VYVCAweDIwCiAgdTMyIF91bnVzZWQ0OwogIHU4IF9yZXNldFszXTsKICB2b2xhdGlsZSB1OCByZXNldDsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIFNHSU9DX1JFU0VUX1BQT1JUIDB4MDEgIAotI2RlZmluZSBTR0lPQ19SRVNFVF9LQkRNT1VTRSAweDAyICAKLSNkZWZpbmUgU0dJT0NfUkVTRVRfRUlTQSAweDA0ICAKLSNkZWZpbmUgU0dJT0NfUkVTRVRfSVNETiAweDA4ICAKKyNkZWZpbmUgU0dJT0NfUkVTRVRfUFBPUlQgMHgwMQorI2RlZmluZSBTR0lPQ19SRVNFVF9LQkRNT1VTRSAweDAyCisjZGVmaW5lIFNHSU9DX1JFU0VUX0VJU0EgMHgwNAorI2RlZmluZSBTR0lPQ19SRVNFVF9JU0ROIDB4MDgKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIFNHSU9DX1JFU0VUX0xDME9GRiAweDEwICAKLSNkZWZpbmUgU0dJT0NfUkVTRVRfTEMxT0ZGIDB4MjAgIAorI2RlZmluZSBTR0lPQ19SRVNFVF9MQzBPRkYgMHgxMAorI2RlZmluZSBTR0lPQ19SRVNFVF9MQzFPRkYgMHgyMAogIHUzMiBfdW51c2VkNTsKICB1OCBfd3JpdGVbM107CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHZvbGF0aWxlIHU4IHdyaXRlOwotI2RlZmluZSBTR0lPQ19XUklURV9OVEhSRVNIIDB4MDEgIAotI2RlZmluZSBTR0lPQ19XUklURV9UUFNQRUVEIDB4MDIgIAotI2RlZmluZSBTR0lPQ19XUklURV9FUFNFTCAweDA0ICAKKyNkZWZpbmUgU0dJT0NfV1JJVEVfTlRIUkVTSCAweDAxCisjZGVmaW5lIFNHSU9DX1dSSVRFX1RQU1BFRUQgMHgwMgorI2RlZmluZSBTR0lPQ19XUklURV9FUFNFTCAweDA0CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBTR0lPQ19XUklURV9FQVNFTCAweDA4ICAKLSNkZWZpbmUgU0dJT0NfV1JJVEVfVTFBTU9ERSAweDEwICAKLSNkZWZpbmUgU0dJT0NfV1JJVEVfVTBBTU9ERSAweDIwICAKLSNkZWZpbmUgU0dJT0NfV1JJVEVfTUxPIDB4NDAgIAorI2RlZmluZSBTR0lPQ19XUklURV9FQVNFTCAweDA4CisjZGVmaW5lIFNHSU9DX1dSSVRFX1UxQU1PREUgMHgxMAorI2RlZmluZSBTR0lPQ19XUklURV9VMEFNT0RFIDB4MjAKKyNkZWZpbmUgU0dJT0NfV1JJVEVfTUxPIDB4NDAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIFNHSU9DX1dSSVRFX01ISSAweDgwICAKKyNkZWZpbmUgU0dJT0NfV1JJVEVfTUhJIDB4ODAKICB1MzIgX3VudXNlZDY7CiAgc3RydWN0IHNnaW50X3JlZ3MgaW50MzsKICB1MzIgX3VudXNlZDdbMTZdOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB2b2xhdGlsZSB1MzIgZXh0aW87Ci0jZGVmaW5lIEVYVElPX1MwX0lSUV8zIDB4ODAwMCAgCi0jZGVmaW5lIEVYVElPX1MwX0lSUV8yIDB4NDAwMCAgCi0jZGVmaW5lIEVYVElPX1MwX0lSUV8xIDB4MjAwMCAgCisjZGVmaW5lIEVYVElPX1MwX0lSUV8zIDB4ODAwMAorI2RlZmluZSBFWFRJT19TMF9JUlFfMiAweDQwMDAKKyNkZWZpbmUgRVhUSU9fUzBfSVJRXzEgMHgyMDAwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBFWFRJT19TMF9SRVRSQUNFIDB4MTAwMAotI2RlZmluZSBFWFRJT19TR19JUlFfMyAweDA4MDAgIAotI2RlZmluZSBFWFRJT19TR19JUlFfMiAweDA0MDAgIAotI2RlZmluZSBFWFRJT19TR19JUlFfMSAweDAyMDAgIAorI2RlZmluZSBFWFRJT19TR19JUlFfMyAweDA4MDAKKyNkZWZpbmUgRVhUSU9fU0dfSVJRXzIgMHgwNDAwCisjZGVmaW5lIEVYVElPX1NHX0lSUV8xIDB4MDIwMAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRVhUSU9fU0dfUkVUUkFDRSAweDAxMDAKICNkZWZpbmUgRVhUSU9fR0lPXzMzTUhaIDB4MDA4MApkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC1taXBzL2FzbS9zZ2kvcGkxLmggYi9saWJjL2tlcm5lbC9hcmNoLW1pcHMvYXNtL3NnaS9waTEuaAppbmRleCAxYWEwNDM4Li5kZDUzMjM3IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9hcmNoLW1pcHMvYXNtL3NnaS9waTEuaAorKysgYi9saWJjL2tlcm5lbC9hcmNoLW1pcHMvYXNtL3NnaS9waTEuaApAQCAtMzYsOCArMzYsOCBAQAogIHU4IF9zdGF0dXNbM107CiAgdm9sYXRpbGUgdTggc3RhdHVzOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgUEkxX1NUQVRfREVWSUQgMHgwMyAgCi0jZGVmaW5lIFBJMV9TVEFUX05PSU5LIDB4MDQgIAorI2RlZmluZSBQSTFfU1RBVF9ERVZJRCAweDAzCisjZGVmaW5lIFBJMV9TVEFUX05PSU5LIDB4MDQKICNkZWZpbmUgUEkxX1NUQVRfRVJST1IgMHgwOAogI2RlZmluZSBQSTFfU1RBVF9PTkxJTkUgMHgxMAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KQEAgLTQ3LDE4ICs0NywxOCBAQAogIHU4IF9kbWFjdHJsWzNdOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB2b2xhdGlsZSB1OCBkbWFjdHJsOwotI2RlZmluZSBQSTFfRE1BQ1RSTF9GSUZPX0VNUFRZIDB4MDEgIAotI2RlZmluZSBQSTFfRE1BQ1RSTF9BQk9SVCAweDAyICAKLSNkZWZpbmUgUEkxX0RNQUNUUkxfU1RETU9ERSAweDAwICAKKyNkZWZpbmUgUEkxX0RNQUNUUkxfRklGT19FTVBUWSAweDAxCisjZGVmaW5lIFBJMV9ETUFDVFJMX0FCT1JUIDB4MDIKKyNkZWZpbmUgUEkxX0RNQUNUUkxfU1RETU9ERSAweDAwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBQSTFfRE1BQ1RSTF9TR0lNT0RFIDB4MDQgIAotI2RlZmluZSBQSTFfRE1BQ1RSTF9SSUNPSE1PREUgMHgwOCAgCi0jZGVmaW5lIFBJMV9ETUFDVFJMX0hQTU9ERSAweDBjICAKLSNkZWZpbmUgUEkxX0RNQUNUUkxfQkxLTU9ERSAweDEwICAKKyNkZWZpbmUgUEkxX0RNQUNUUkxfU0dJTU9ERSAweDA0CisjZGVmaW5lIFBJMV9ETUFDVFJMX1JJQ09ITU9ERSAweDA4CisjZGVmaW5lIFBJMV9ETUFDVFJMX0hQTU9ERSAweDBjCisjZGVmaW5lIFBJMV9ETUFDVFJMX0JMS01PREUgMHgxMAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgUEkxX0RNQUNUUkxfRklGT19DTEVBUiAweDIwICAKLSNkZWZpbmUgUEkxX0RNQUNUUkxfUkVBRCAweDQwICAKLSNkZWZpbmUgUEkxX0RNQUNUUkxfUlVOIDB4ODAgIAorI2RlZmluZSBQSTFfRE1BQ1RSTF9GSUZPX0NMRUFSIDB4MjAKKyNkZWZpbmUgUEkxX0RNQUNUUkxfUkVBRCAweDQwCisjZGVmaW5lIFBJMV9ETUFDVFJMX1JVTiAweDgwCiAgdTggX2ludHN0YXRbM107CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHZvbGF0aWxlIHU4IGludHN0YXQ7CmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLW1pcHMvYXNtL3NnaWFyY3MuaCBiL2xpYmMva2VybmVsL2FyY2gtbWlwcy9hc20vc2dpYXJjcy5oCmluZGV4IDVmZTBkNDcuLmI5ZmZmM2YgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2FyY2gtbWlwcy9hc20vc2dpYXJjcy5oCisrKyBiL2xpYmMva2VybmVsL2FyY2gtbWlwcy9hc20vc2dpYXJjcy5oCkBAIC0yOTEsMTMgKzI5MSwxMyBAQAogI2RlZmluZSBTR0lQUk9NX1NURElOIDAKICNkZWZpbmUgU0dJUFJPTV9TVERPVVQgMQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgU0dJUFJPTV9ST0ZJTEUgMHgwMSAgCi0jZGVmaW5lIFNHSVBST01fSEZJTEUgMHgwMiAgCi0jZGVmaW5lIFNHSVBST01fU0ZJTEUgMHgwNCAgCi0jZGVmaW5lIFNHSVBST01fQUZJTEUgMHgwOCAgCisjZGVmaW5lIFNHSVBST01fUk9GSUxFIDB4MDEKKyNkZWZpbmUgU0dJUFJPTV9IRklMRSAweDAyCisjZGVmaW5lIFNHSVBST01fU0ZJTEUgMHgwNAorI2RlZmluZSBTR0lQUk9NX0FGSUxFIDB4MDgKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIFNHSVBST01fREZJTEUgMHgxMCAgCi0jZGVmaW5lIFNHSVBST01fREVMRklMRSAweDIwICAKKyNkZWZpbmUgU0dJUFJPTV9ERklMRSAweDEwCisjZGVmaW5lIFNHSVBST01fREVMRklMRSAweDIwCiBzdHJ1Y3Qgc2dpX3BhcnRpdGlvbiB7CiAgdW5zaWduZWQgY2hhciBmbGFnOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gtbWlwcy9hc20vc2htcGFyYW0uaCBiL2xpYmMva2VybmVsL2FyY2gtbWlwcy9hc20vc2htcGFyYW0uaAppbmRleCBkNWVjNzhmLi45MTJhZTA0IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9hcmNoLW1pcHMvYXNtL3NobXBhcmFtLmgKKysrIGIvbGliYy9rZXJuZWwvYXJjaC1taXBzL2FzbS9zaG1wYXJhbS5oCkBAIC0xOSw2ICsxOSw2IEBACiAjaWZuZGVmIF9BU01fU0hNUEFSQU1fSAogI2RlZmluZSBfQVNNX1NITVBBUkFNX0gKICNkZWZpbmUgX19BUkNIX0ZPUkNFX1NITUxCQSAxCi0jZGVmaW5lIFNITUxCQSAweDQwMDAwICAKKyNkZWZpbmUgU0hNTEJBIDB4NDAwMDAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gtbWlwcy9hc20vc2lieXRlL2JjbTE0ODBfaW50LmggYi9saWJjL2tlcm5lbC9hcmNoLW1pcHMvYXNtL3NpYnl0ZS9iY20xNDgwX2ludC5oCmluZGV4IGIxNGYxY2EuLjI3NmU1NjkgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2FyY2gtbWlwcy9hc20vc2lieXRlL2JjbTE0ODBfaW50LmgKKysrIGIvbGliYy9rZXJuZWwvYXJjaC1taXBzL2FzbS9zaWJ5dGUvYmNtMTQ4MF9pbnQuaApAQCAtMjQ0LDcgKzI0NCw3IEBACiAjZGVmaW5lIE1fQkNNMTQ4MF9JTlRfR1BJT18xMyBfQkNNMTQ4MF9JTlRfTUFTSzEoS19CQ00xNDgwX0lOVF9HUElPXzEzKQogI2RlZmluZSBNX0JDTTE0ODBfSU5UX0dQSU9fMTQgX0JDTTE0ODBfSU5UX01BU0sxKEtfQkNNMTQ4MF9JTlRfR1BJT18xNCkKICNkZWZpbmUgTV9CQ00xNDgwX0lOVF9HUElPXzE1IF9CQ00xNDgwX0lOVF9NQVNLMShLX0JDTTE0ODBfSU5UX0dQSU9fMTUpCi0jZGVmaW5lIEtfQkNNMTQ4MF9JTlRfTUFQX0kwIDAgIAorI2RlZmluZSBLX0JDTTE0ODBfSU5UX01BUF9JMCAwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLX0JDTTE0ODBfSU5UX01BUF9JMSAxCiAjZGVmaW5lIEtfQkNNMTQ4MF9JTlRfTUFQX0kyIDIKQEAgLTI1Miw4ICsyNTIsOCBAQAogI2RlZmluZSBLX0JDTTE0ODBfSU5UX01BUF9JNCA0CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLX0JDTTE0ODBfSU5UX01BUF9JNSA1Ci0jZGVmaW5lIEtfQkNNMTQ4MF9JTlRfTUFQX05NSSA2ICAKLSNkZWZpbmUgS19CQ00xNDgwX0lOVF9NQVBfRElOVCA3ICAKKyNkZWZpbmUgS19CQ00xNDgwX0lOVF9NQVBfTk1JIDYKKyNkZWZpbmUgS19CQ00xNDgwX0lOVF9NQVBfRElOVCA3CiAjZGVmaW5lIFNfQkNNMTQ4MF9JTlRfSFRfSU5UTVNHIDAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1fQkNNMTQ4MF9JTlRfSFRfSU5UTVNHIF9TQl9NQUtFTUFTSygzLCBTX0JDTTE0ODBfSU5UX0hUX0lOVE1TRykKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gtbWlwcy9hc20vc2lieXRlL2JjbTE0ODBfc2NkLmggYi9saWJjL2tlcm5lbC9hcmNoLW1pcHMvYXNtL3NpYnl0ZS9iY20xNDgwX3NjZC5oCmluZGV4IDI1MGFjYTguLmM3MGIyODIgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2FyY2gtbWlwcy9hc20vc2lieXRlL2JjbTE0ODBfc2NkLmgKKysrIGIvbGliYy9rZXJuZWwvYXJjaC1taXBzL2FzbS9zaWJ5dGUvYmNtMTQ4MF9zY2QuaApAQCAtMTA0LDcgKzEwNCw3IEBACiAjZGVmaW5lIE1fQkNNMTQ4MF9TQ0RfV0RPR19SRVNFVF9UWVBFIF9TQl9NQUtFTUFTSyg1LCBTX0JDTTE0ODBfU0NEX1dET0dfUkVTRVRfVFlQRSkKICNkZWZpbmUgVl9CQ00xNDgwX1NDRF9XRE9HX1JFU0VUX1RZUEUoeCkgX1NCX01BS0VWQUxVRSh4LCBTX0JDTTE0ODBfU0NEX1dET0dfUkVTRVRfVFlQRSkKICNkZWZpbmUgR19CQ00xNDgwX1NDRF9XRE9HX1JFU0VUX1RZUEUoeCkgX1NCX0dFVFZBTFVFKHgsIFNfQkNNMTQ4MF9TQ0RfV0RPR19SRVNFVF9UWVBFLCBNX0JDTTE0ODBfU0NEX1dET0dfUkVTRVRfVFlQRSkKLSNkZWZpbmUgS19CQ00xNDgwX1NDRF9XRE9HX1JFU0VUX0ZVTEwgMCAgCisjZGVmaW5lIEtfQkNNMTQ4MF9TQ0RfV0RPR19SRVNFVF9GVUxMIDAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtfQkNNMTQ4MF9TQ0RfV0RPR19SRVNFVF9TT0ZUIDEKICNkZWZpbmUgS19CQ00xNDgwX1NDRF9XRE9HX1JFU0VUX0NQVTAgMwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC1taXBzL2FzbS9zaWJ5dGUvc2IxMjUwX2ludC5oIGIvbGliYy9rZXJuZWwvYXJjaC1taXBzL2FzbS9zaWJ5dGUvc2IxMjUwX2ludC5oCmluZGV4IDBiMDFiNzUuLjhmZmQzNWMgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2FyY2gtbWlwcy9hc20vc2lieXRlL3NiMTI1MF9pbnQuaAorKysgYi9saWJjL2tlcm5lbC9hcmNoLW1pcHMvYXNtL3NpYnl0ZS9zYjEyNTBfaW50LmgKQEAgLTE5MiwxNiArMTkyLDE2IEBACiAjZGVmaW5lIE1fSU5UX01BQ18yX0NIMSBfU0JfTUFLRU1BU0sxKEtfSU5UX01BQ18yX0NIMSkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZW5kaWYKLSNkZWZpbmUgS19JTlRfTUFQX0kwIDAgIAorI2RlZmluZSBLX0lOVF9NQVBfSTAgMAogI2RlZmluZSBLX0lOVF9NQVBfSTEgMQogI2RlZmluZSBLX0lOVF9NQVBfSTIgMgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS19JTlRfTUFQX0kzIDMKICNkZWZpbmUgS19JTlRfTUFQX0k0IDQKICNkZWZpbmUgS19JTlRfTUFQX0k1IDUKLSNkZWZpbmUgS19JTlRfTUFQX05NSSA2ICAKKyNkZWZpbmUgS19JTlRfTUFQX05NSSA2CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBLX0lOVF9NQVBfRElOVCA3ICAKKyNkZWZpbmUgS19JTlRfTUFQX0RJTlQgNwogI2RlZmluZSBTX0lOVF9MRFRfSU5UTVNHIDAKICNkZWZpbmUgTV9JTlRfTERUX0lOVE1TRyBfU0JfTUFLRU1BU0soMywgU19JTlRfTERUX0lOVE1TRykKICNkZWZpbmUgVl9JTlRfTERUX0lOVE1TRyh4KSBfU0JfTUFLRVZBTFVFKHgsIFNfSU5UX0xEVF9JTlRNU0cpCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLW1pcHMvYXNtL3NpYnl0ZS9zYjEyNTBfc2NkLmggYi9saWJjL2tlcm5lbC9hcmNoLW1pcHMvYXNtL3NpYnl0ZS9zYjEyNTBfc2NkLmgKaW5kZXggNTVlNGE1YS4uMWU3Nzk3OSAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvYXJjaC1taXBzL2FzbS9zaWJ5dGUvc2IxMjUwX3NjZC5oCisrKyBiL2xpYmMva2VybmVsL2FyY2gtbWlwcy9hc20vc2lieXRlL3NiMTI1MF9zY2QuaApAQCAtMjgsMTMgKzI4LDEzIEBACiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLX1NZU19SRVZJU0lPTl9CQ00xMjUwX1BBU1MxIDB4MDEKICNkZWZpbmUgS19TWVNfUkVWSVNJT05fQkNNMTI1MF9QQVNTMiAweDAzCi0jZGVmaW5lIEtfU1lTX1JFVklTSU9OX0JDTTEyNTBfQTEgMHgwMyAgCi0jZGVmaW5lIEtfU1lTX1JFVklTSU9OX0JDTTEyNTBfQTIgMHgwNCAgCisjZGVmaW5lIEtfU1lTX1JFVklTSU9OX0JDTTEyNTBfQTEgMHgwMworI2RlZmluZSBLX1NZU19SRVZJU0lPTl9CQ00xMjUwX0EyIDB4MDQKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIEtfU1lTX1JFVklTSU9OX0JDTTEyNTBfQTMgMHgwNSAgCi0jZGVmaW5lIEtfU1lTX1JFVklTSU9OX0JDTTEyNTBfQTQgMHgwNiAgCi0jZGVmaW5lIEtfU1lTX1JFVklTSU9OX0JDTTEyNTBfQTYgMHgwNyAgCi0jZGVmaW5lIEtfU1lTX1JFVklTSU9OX0JDTTEyNTBfQTggMHgwYiAgCisjZGVmaW5lIEtfU1lTX1JFVklTSU9OX0JDTTEyNTBfQTMgMHgwNQorI2RlZmluZSBLX1NZU19SRVZJU0lPTl9CQ00xMjUwX0E0IDB4MDYKKyNkZWZpbmUgS19TWVNfUkVWSVNJT05fQkNNMTI1MF9BNiAweDA3CisjZGVmaW5lIEtfU1lTX1JFVklTSU9OX0JDTTEyNTBfQTggMHgwYgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS19TWVNfUkVWSVNJT05fQkNNMTI1MF9BOSAweDA4CiAjZGVmaW5lIEtfU1lTX1JFVklTSU9OX0JDTTEyNTBfQTEwIEtfU1lTX1JFVklTSU9OX0JDTTEyNTBfQTgKQEAgLTEwNywxMSArMTA3LDExIEBACiAjZGVmaW5lIEtfU1lTX1NPQ19UWVBFX0JDTTEyNTAgMHgwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLX1NZU19TT0NfVFlQRV9CQ00xMTIwIDB4MQotI2RlZmluZSBLX1NZU19TT0NfVFlQRV9CQ00xMjUwX0FMVCAweDIgIAorI2RlZmluZSBLX1NZU19TT0NfVFlQRV9CQ00xMjUwX0FMVCAweDIKICNkZWZpbmUgS19TWVNfU09DX1RZUEVfQkNNMTEyNSAweDMKICNkZWZpbmUgS19TWVNfU09DX1RZUEVfQkNNMTEyNUggMHg0CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBLX1NZU19TT0NfVFlQRV9CQ00xMjUwX0FMVDIgMHg1ICAKKyNkZWZpbmUgS19TWVNfU09DX1RZUEVfQkNNMTI1MF9BTFQyIDB4NQogI2RlZmluZSBLX1NZU19TT0NfVFlQRV9CQ00xeDgwIDB4NgogI2RlZmluZSBLX1NZU19TT0NfVFlQRV9CQ00xeDU1IDB4NwogI2lmZGVmIF9fQVNTRU1CTEVSX18KQEAgLTI2Miw3ICsyNjIsNyBAQAogI2RlZmluZSBWX1NDRF9XRE9HX1JFU0VUX1RZUEUoeCkgX1NCX01BS0VWQUxVRSh4LCBTX1NDRF9XRE9HX1JFU0VUX1RZUEUpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBHX1NDRF9XRE9HX1JFU0VUX1RZUEUoeCkgX1NCX0dFVFZBTFVFKHgsIFNfU0NEX1dET0dfUkVTRVRfVFlQRSwgTV9TQ0RfV0RPR19SRVNFVF9UWVBFKQotI2RlZmluZSBLX1NDRF9XRE9HX1JFU0VUX0ZVTEwgMCAgCisjZGVmaW5lIEtfU0NEX1dET0dfUkVTRVRfRlVMTCAwCiAjZGVmaW5lIEtfU0NEX1dET0dfUkVTRVRfU09GVCAxCiAjZGVmaW5lIEtfU0NEX1dET0dfUkVTRVRfQ1BVMCAzCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC1taXBzL2FzbS9zaWdpbmZvLmggYi9saWJjL2tlcm5lbC9hcmNoLW1pcHMvYXNtL3NpZ2luZm8uaAppbmRleCBmM2U1MDhhLi44NDEyYWMxIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9hcmNoLW1pcHMvYXNtL3NpZ2luZm8uaAorKysgYi9saWJjL2tlcm5lbC9hcmNoLW1pcHMvYXNtL3NpZ2luZm8uaApAQCAtMTksNzggKzE5LDgwIEBACiAjaWZuZGVmIF9BU01fU0lHSU5GT19ICiAjZGVmaW5lIF9BU01fU0lHSU5GT19ICiAjZGVmaW5lIF9fQVJDSF9TSUdFVl9QUkVBTUJMRV9TSVpFIChzaXplb2YobG9uZykgKyAyKnNpemVvZihpbnQpKQotI3VuZGVmIF9fQVJDSF9TSV9UUkFQTk8gIAorI3VuZGVmIF9fQVJDSF9TSV9UUkFQTk8KIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEhBVkVfQVJDSF9TSUdJTkZPX1QKICNkZWZpbmUgSEFWRV9BUkNIX0NPUFlfU0lHSU5GTwogc3RydWN0IHNpZ2luZm87Ci0jaW5jbHVkZSA8YXNtLWdlbmVyaWMvc2lnaW5mby5oPgorI2RlZmluZSBfX0FSQ0hfU0lfUFJFQU1CTEVfU0laRSAoMyAqIHNpemVvZihpbnQpKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9zaWdpbmZvLmg+CiB0eXBlZGVmIHN0cnVjdCBzaWdpbmZvIHsKICBpbnQgc2lfc2lnbm87CiAgaW50IHNpX2NvZGU7Ci0gaW50IHNpX2Vycm5vOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBpbnQgc2lfZXJybm87CiAgaW50IF9fcGFkMFtTSV9NQVhfU0laRSAvIHNpemVvZihpbnQpIC0gU0lfUEFEX1NJWkUgLSAzXTsKICB1bmlvbiB7CiAgaW50IF9wYWRbU0lfUEFEX1NJWkVdOwotIHN0cnVjdCB7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIHN0cnVjdCB7CiAgcGlkX3QgX3BpZDsKICBfX0FSQ0hfU0lfVUlEX1QgX3VpZDsKICB9IF9raWxsOwotIHN0cnVjdCB7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIHN0cnVjdCB7CiAgdGltZXJfdCBfdGlkOwogIGludCBfb3ZlcnJ1bjsKICBjaGFyIF9wYWRbc2l6ZW9mKCBfX0FSQ0hfU0lfVUlEX1QpIC0gc2l6ZW9mKGludCldOwotIHNpZ3ZhbF90IF9zaWd2YWw7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIHNpZ3ZhbF90IF9zaWd2YWw7CiAgaW50IF9zeXNfcHJpdmF0ZTsKICB9IF90aW1lcjsKICBzdHJ1Y3QgewotIHBpZF90IF9waWQ7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIHBpZF90IF9waWQ7CiAgX19BUkNIX1NJX1VJRF9UIF91aWQ7CiAgc2lndmFsX3QgX3NpZ3ZhbDsKICB9IF9ydDsKLSBzdHJ1Y3QgewogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBzdHJ1Y3QgewogIHBpZF90IF9waWQ7CiAgX19BUkNIX1NJX1VJRF9UIF91aWQ7CiAgaW50IF9zdGF0dXM7Ci0gY2xvY2tfdCBfdXRpbWU7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIGNsb2NrX3QgX3V0aW1lOwogIGNsb2NrX3QgX3N0aW1lOwogIH0gX3NpZ2NobGQ7CiAgc3RydWN0IHsKLSBwaWRfdCBfcGlkOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBwaWRfdCBfcGlkOwogIGNsb2NrX3QgX3V0aW1lOwogIGludCBfc3RhdHVzOwogIGNsb2NrX3QgX3N0aW1lOwotIH0gX2lyaXhfc2lnY2hsZDsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgfSBfaXJpeF9zaWdjaGxkOwogIHN0cnVjdCB7CiAgdm9pZCBfX3VzZXIgKl9hZGRyOwogI2lmZGVmIF9fQVJDSF9TSV9UUkFQTk8KLSBpbnQgX3RyYXBubzsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgaW50IF90cmFwbm87CiAjZW5kaWYKICB9IF9zaWdmYXVsdDsKICBzdHJ1Y3QgewotIF9fQVJDSF9TSV9CQU5EX1QgX2JhbmQ7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fQVJDSF9TSV9CQU5EX1QgX2JhbmQ7CiAgaW50IF9mZDsKICB9IF9zaWdwb2xsOwogIH0gX3NpZmllbGRzOwotfSBzaWdpbmZvX3Q7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworfSBzaWdpbmZvX3Q7CiAjdW5kZWYgU0lfQVNZTkNJTwogI3VuZGVmIFNJX1RJTUVSCiAjdW5kZWYgU0lfTUVTR1EKLSNkZWZpbmUgU0lfQVNZTkNJTyAtMiAgCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBTSV9USU1FUiBfX1NJX0NPREUoX19TSV9USU1FUiwgLTMpICAKLSNkZWZpbmUgU0lfTUVTR1EgX19TSV9DT0RFKF9fU0lfTUVTR1EsIC00KSAgCisjZGVmaW5lIFNJX0FTWU5DSU8gLTIKKyNkZWZpbmUgU0lfVElNRVIgX19TSV9DT0RFKF9fU0lfVElNRVIsIC0zKQorI2RlZmluZSBTSV9NRVNHUSBfX1NJX0NPREUoX19TSV9NRVNHUSwgLTQpCiAjZW5kaWYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLW1pcHMvYXNtL3NpZ25hbC5oIGIvbGliYy9rZXJuZWwvYXJjaC1taXBzL2FzbS9zaWduYWwuaAppbmRleCA1ZjVhYzc3Li41MzYyZDRhIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9hcmNoLW1pcHMvYXNtL3NpZ25hbC5oCisrKyBiL2xpYmMva2VybmVsL2FyY2gtbWlwcy9hc20vc2lnbmFsLmgKQEAgLTI5LDQ5ICsyOSw0OSBAQAogIHVuc2lnbmVkIGxvbmcgc2lnW19OU0lHX1dPUkRTXTsKIH0gc2lnc2V0X3Q7CiB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgb2xkX3NpZ3NldF90OwotI2RlZmluZSBTSUdIVVAgMSAgCisjZGVmaW5lIFNJR0hVUCAxCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBTSUdJTlQgMiAgCi0jZGVmaW5lIFNJR1FVSVQgMyAgCi0jZGVmaW5lIFNJR0lMTCA0ICAKLSNkZWZpbmUgU0lHVFJBUCA1ICAKKyNkZWZpbmUgU0lHSU5UIDIKKyNkZWZpbmUgU0lHUVVJVCAzCisjZGVmaW5lIFNJR0lMTCA0CisjZGVmaW5lIFNJR1RSQVAgNQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgU0lHSU9UIDYgIAotI2RlZmluZSBTSUdBQlJUIFNJR0lPVCAgCisjZGVmaW5lIFNJR0lPVCA2CisjZGVmaW5lIFNJR0FCUlQgU0lHSU9UCiAjZGVmaW5lIFNJR0VNVCA3Ci0jZGVmaW5lIFNJR0ZQRSA4ICAKKyNkZWZpbmUgU0lHRlBFIDgKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIFNJR0tJTEwgOSAgCi0jZGVmaW5lIFNJR0JVUyAxMCAgCi0jZGVmaW5lIFNJR1NFR1YgMTEgIAorI2RlZmluZSBTSUdLSUxMIDkKKyNkZWZpbmUgU0lHQlVTIDEwCisjZGVmaW5lIFNJR1NFR1YgMTEKICNkZWZpbmUgU0lHU1lTIDEyCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBTSUdQSVBFIDEzICAKLSNkZWZpbmUgU0lHQUxSTSAxNCAgCi0jZGVmaW5lIFNJR1RFUk0gMTUgIAotI2RlZmluZSBTSUdVU1IxIDE2ICAKKyNkZWZpbmUgU0lHUElQRSAxMworI2RlZmluZSBTSUdBTFJNIDE0CisjZGVmaW5lIFNJR1RFUk0gMTUKKyNkZWZpbmUgU0lHVVNSMSAxNgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgU0lHVVNSMiAxNyAgCi0jZGVmaW5lIFNJR0NITEQgMTggIAotI2RlZmluZSBTSUdDTEQgU0lHQ0hMRCAgCi0jZGVmaW5lIFNJR1BXUiAxOSAgCisjZGVmaW5lIFNJR1VTUjIgMTcKKyNkZWZpbmUgU0lHQ0hMRCAxOAorI2RlZmluZSBTSUdDTEQgU0lHQ0hMRAorI2RlZmluZSBTSUdQV1IgMTkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIFNJR1dJTkNIIDIwICAKLSNkZWZpbmUgU0lHVVJHIDIxICAKLSNkZWZpbmUgU0lHSU8gMjIgIAotI2RlZmluZSBTSUdQT0xMIFNJR0lPICAKKyNkZWZpbmUgU0lHV0lOQ0ggMjAKKyNkZWZpbmUgU0lHVVJHIDIxCisjZGVmaW5lIFNJR0lPIDIyCisjZGVmaW5lIFNJR1BPTEwgU0lHSU8KIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIFNJR1NUT1AgMjMgIAotI2RlZmluZSBTSUdUU1RQIDI0ICAKLSNkZWZpbmUgU0lHQ09OVCAyNSAgCi0jZGVmaW5lIFNJR1RUSU4gMjYgIAorI2RlZmluZSBTSUdTVE9QIDIzCisjZGVmaW5lIFNJR1RTVFAgMjQKKyNkZWZpbmUgU0lHQ09OVCAyNQorI2RlZmluZSBTSUdUVElOIDI2CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBTSUdUVE9VIDI3ICAKLSNkZWZpbmUgU0lHVlRBTFJNIDI4ICAKLSNkZWZpbmUgU0lHUFJPRiAyOSAgCi0jZGVmaW5lIFNJR1hDUFUgMzAgIAorI2RlZmluZSBTSUdUVE9VIDI3CisjZGVmaW5lIFNJR1ZUQUxSTSAyOAorI2RlZmluZSBTSUdQUk9GIDI5CisjZGVmaW5lIFNJR1hDUFUgMzAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIFNJR1hGU1ogMzEgIAorI2RlZmluZSBTSUdYRlNaIDMxCiAjZGVmaW5lIFNJR1JUTUlOIDMyCiAjZGVmaW5lIFNJR1JUTUFYIF9OU0lHCiAjZGVmaW5lIFNBX09OU1RBQ0sgMHgwODAwMDAwMApAQCAtODYsMTcgKzg2LDE3IEBACiAjZGVmaW5lIFNBX05PTUFTSyBTQV9OT0RFRkVSCiAjZGVmaW5lIFNBX09ORVNIT1QgU0FfUkVTRVRIQU5ECiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBTQV9SRVNUT1JFUiAweDA0MDAwMDAwICAKKyNkZWZpbmUgU0FfUkVTVE9SRVIgMHgwNDAwMDAwMAogI2RlZmluZSBTU19PTlNUQUNLIDEKICNkZWZpbmUgU1NfRElTQUJMRSAyCiAjZGVmaW5lIE1JTlNJR1NUS1NaIDIwNDgKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNJR1NUS1NaIDgxOTIKIHN0cnVjdCBzaWdpbmZvOwotI2RlZmluZSBTSUdfQkxPQ0sgMSAgCi0jZGVmaW5lIFNJR19VTkJMT0NLIDIgIAorI2RlZmluZSBTSUdfQkxPQ0sgMQorI2RlZmluZSBTSUdfVU5CTE9DSyAyCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBTSUdfU0VUTUFTSyAzICAKKyNkZWZpbmUgU0lHX1NFVE1BU0sgMwogI2luY2x1ZGUgPGFzbS1nZW5lcmljL3NpZ25hbC5oPgogc3RydWN0IHNpZ2FjdGlvbiB7CiAgdW5zaWduZWQgaW50IHNhX2ZsYWdzOwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC1taXBzL2FzbS9zbXAuaCBiL2xpYmMva2VybmVsL2FyY2gtbWlwcy9hc20vc21wLmgKaW5kZXggODdlZWE4OC4uZjc1M2U0ZiAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvYXJjaC1taXBzL2FzbS9zbXAuaAorKysgYi9saWJjL2tlcm5lbC9hcmNoLW1pcHMvYXNtL3NtcC5oCkBAIC0zMSw3ICszMSw3IEBACiAjZGVmaW5lIGNwdV9sb2dpY2FsX21hcChjcHUpIF9fY3B1X2xvZ2ljYWxfbWFwW2NwdV0KICNkZWZpbmUgTk9fUFJPQ19JRCAoLTEpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBTTVBfUkVTQ0hFRFVMRV9ZT1VSU0VMRiAweDEgIAorI2RlZmluZSBTTVBfUkVTQ0hFRFVMRV9ZT1VSU0VMRiAweDEKICNkZWZpbmUgU01QX0NBTExfRlVOQ1RJT04gMHgyCiAjZGVmaW5lIGNwdV9wb3NzaWJsZV9tYXAgcGh5c19jcHVfcHJlc2VudF9tYXAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC1taXBzL2FzbS9zbi9hZGRycy5oIGIvbGliYy9rZXJuZWwvYXJjaC1taXBzL2FzbS9zbi9hZGRycy5oCmluZGV4IGQyNDM2MTMuLjU0M2M3ZDUgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2FyY2gtbWlwcy9hc20vc24vYWRkcnMuaAorKysgYi9saWJjL2tlcm5lbC9hcmNoLW1pcHMvYXNtL3NuL2FkZHJzLmgKQEAgLTY4LDEyICs2OCwxMiBAQAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTk9ERV9TV0lOX0FERFIobmFzaWQsIGFkZHIpICAgKCgoYWRkcikgPj0gTk9ERV9TV0lOX0JBU0UobmFzaWQsIDApKSAmJiAgICgoYWRkcikgPCAoTk9ERV9TV0lOX0JBU0UobmFzaWQsIEhVQl9OVU1fV0lER0VUKSArIFNXSU5fU0laRSkgICkpCiAjZGVmaW5lIFVBTElBU19CQVNFIEhTUEVDX0JBU0UKLSNkZWZpbmUgVUFMSUFTX1NJWkUgMHgxMDAwMDAwMCAgCisjZGVmaW5lIFVBTElBU19TSVpFIDB4MTAwMDAwMDAKICNkZWZpbmUgVUFMSUFTX0xJTUlUIChVQUxJQVNfQkFTRSArIFVBTElBU19TSVpFKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSFVCX1JFR0lTVEVSX1dJREdFVCAxCiAjZGVmaW5lIElBTElBU19CQVNFIE5PREVfU1dJTl9CQVNFKDAsIEhVQl9SRUdJU1RFUl9XSURHRVQpCi0jZGVmaW5lIElBTElBU19TSVpFIDB4ODAwMDAwICAKKyNkZWZpbmUgSUFMSUFTX1NJWkUgMHg4MDAwMDAKICNkZWZpbmUgSVNfSUFMSUFTKF9hKSAoKChfYSkgPj0gSUFMSUFTX0JBU0UpICYmICAgKChfYSkgPCAoSUFMSUFTX0JBU0UgKyBJQUxJQVNfU0laRSkpKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTk9ERV9CRE9PUl9CQVNFKF9uKSAoTk9ERV9IU1BFQ19CQVNFKF9uKSArIChOT0RFX0FERFJTUEFDRV9TSVpFLzIpKQpAQCAtMTE2LDcgKzExNiw3IEBACiAjZGVmaW5lIEtMRElSX0FERFIobmFzaWQpICAgVE9fTk9ERV9VTkNBQygobmFzaWQpLCBLTERJUl9PRkZTRVQpCiAjZGVmaW5lIEtMRElSX1NJWkUgMHgwNDAwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBLTElfTEFVTkNIIDAgIAorI2RlZmluZSBLTElfTEFVTkNIIDAKICNkZWZpbmUgS0xJX0tMQ09ORklHIDEKICNkZWZpbmUgS0xJX05NSSAyCiAjZGVmaW5lIEtMSV9HREEgMwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC1taXBzL2FzbS9zbi9pby5oIGIvbGliYy9rZXJuZWwvYXJjaC1taXBzL2FzbS9zbi9pby5oCmluZGV4IDJiOGExMDEuLmEzYzNlMTcgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2FyY2gtbWlwcy9hc20vc24vaW8uaAorKysgYi9saWJjL2tlcm5lbC9hcmNoLW1pcHMvYXNtL3NuL2lvLmgKQEAgLTE4LDIzICsxOCwyMyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9BU01fU05fSU9fSAogI2RlZmluZSBfQVNNX1NOX0lPX0gKLSNkZWZpbmUgSUlPX0lUVEVfQkFTRSAweDQwMDE2MCAgCisjZGVmaW5lIElJT19JVFRFX0JBU0UgMHg0MDAxNjAKICNkZWZpbmUgSUlPX0lUVEUoYmlnd2luKSAoSUlPX0lUVEVfQkFTRSArIDgqKGJpZ3dpbikpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBJSU9fSVRURV9PRkZTRVRfQklUUyA1ICAKKyNkZWZpbmUgSUlPX0lUVEVfT0ZGU0VUX0JJVFMgNQogI2RlZmluZSBJSU9fSVRURV9PRkZTRVRfTUFTSyAoKDE8PElJT19JVFRFX09GRlNFVF9CSVRTKS0xKQogI2RlZmluZSBJSU9fSVRURV9PRkZTRVRfU0hJRlQgMAotI2RlZmluZSBJSU9fSVRURV9XSURHRVRfQklUUyA0ICAKKyNkZWZpbmUgSUlPX0lUVEVfV0lER0VUX0JJVFMgNAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSUlPX0lUVEVfV0lER0VUX01BU0sgKCgxPDxJSU9fSVRURV9XSURHRVRfQklUUyktMSkKICNkZWZpbmUgSUlPX0lUVEVfV0lER0VUX1NISUZUIDgKLSNkZWZpbmUgSUlPX0lUVEVfSU9TUCAxICAKKyNkZWZpbmUgSUlPX0lUVEVfSU9TUCAxCiAjZGVmaW5lIElJT19JVFRFX0lPU1BfTUFTSyAxCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJSU9fSVRURV9JT1NQX1NISUZUIDEyCiAjZGVmaW5lIEhVQl9QSU9fTUFQX1RPX01FTSAwCiAjZGVmaW5lIEhVQl9QSU9fTUFQX1RPX0lPIDEKLSNkZWZpbmUgSUlPX0lUVEVfSU5WQUxJRF9XSURHRVQgMyAgCisjZGVmaW5lIElJT19JVFRFX0lOVkFMSURfV0lER0VUIDMKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIElJT19JVFRFX1BVVChuYXNpZCwgYmlnd2luLCBpb19vcl9tZW0sIHdpZGdldCwgYWRkcikgICBSRU1PVEVfSFVCX1MoKG5hc2lkKSwgSUlPX0lUVEUoYmlnd2luKSwgICAoKCgoKGFkZHIpID4+IEJXSU5fU0laRV9CSVRTKSAmICAgSUlPX0lUVEVfT0ZGU0VUX01BU0spIDw8IElJT19JVFRFX09GRlNFVF9TSElGVCkgfCAgIChpb19vcl9tZW0gPDwgSUlPX0lUVEVfSU9TUF9TSElGVCkgfCAgICgoKHdpZGdldCkgJiBJSU9fSVRURV9XSURHRVRfTUFTSykgPDwgSUlPX0lUVEVfV0lER0VUX1NISUZUKSkpCiAjZGVmaW5lIElJT19JVFRFX0RJU0FCTEUobmFzaWQsIGJpZ3dpbikgICBJSU9fSVRURV9QVVQoKG5hc2lkKSwgSFVCX1BJT19NQVBfVE9fTUVNLCAgIChiaWd3aW4pLCBJSU9fSVRURV9JTlZBTElEX1dJREdFVCwgMCkKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gtbWlwcy9hc20vc24vaW9jMy5oIGIvbGliYy9rZXJuZWwvYXJjaC1taXBzL2FzbS9zbi9pb2MzLmgKaW5kZXggOTc3MTMwNC4uNDZiYTRkZCAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvYXJjaC1taXBzL2FzbS9zbi9pb2MzLmgKKysrIGIvbGliYy9rZXJuZWwvYXJjaC1taXBzL2FzbS9zbi9pb2MzLmgKQEAgLTE5MywyMSArMTkzLDIxIEBACiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBFUlhCVUZfQllURUNOVF9TSElGVCAxNgogI2RlZmluZSBFUlhCVUZfViAweDgwMDAwMDAwCi0jZGVmaW5lIEVSWEJVRl9DUkNFUlIgMHgwMDAwMDAwMSAgCi0jZGVmaW5lIEVSWEJVRl9GUkFNRVJSIDB4MDAwMDAwMDIgIAorI2RlZmluZSBFUlhCVUZfQ1JDRVJSIDB4MDAwMDAwMDEKKyNkZWZpbmUgRVJYQlVGX0ZSQU1FUlIgMHgwMDAwMDAwMgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgRVJYQlVGX0NPREVSUiAweDAwMDAwMDA0ICAKLSNkZWZpbmUgRVJYQlVGX0lOVlBSRUFNQiAweDAwMDAwMDA4ICAKLSNkZWZpbmUgRVJYQlVGX0xPTEVOIDB4MDAwMDcwMDAgIAotI2RlZmluZSBFUlhCVUZfSElMRU4gMHgwM2ZmMDAwMCAgCisjZGVmaW5lIEVSWEJVRl9DT0RFUlIgMHgwMDAwMDAwNAorI2RlZmluZSBFUlhCVUZfSU5WUFJFQU1CIDB4MDAwMDAwMDgKKyNkZWZpbmUgRVJYQlVGX0xPTEVOIDB4MDAwMDcwMDAKKyNkZWZpbmUgRVJYQlVGX0hJTEVOIDB4MDNmZjAwMDAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIEVSWEJVRl9NVUxUSUNBU1QgMHgwNDAwMDAwMCAgCi0jZGVmaW5lIEVSWEJVRl9CUk9BRENBU1QgMHgwODAwMDAwMCAgCi0jZGVmaW5lIEVSWEJVRl9MT05HRVZFTlQgMHgxMDAwMDAwMCAgCi0jZGVmaW5lIEVSWEJVRl9CQURQS1QgMHgyMDAwMDAwMCAgCisjZGVmaW5lIEVSWEJVRl9NVUxUSUNBU1QgMHgwNDAwMDAwMAorI2RlZmluZSBFUlhCVUZfQlJPQURDQVNUIDB4MDgwMDAwMDAKKyNkZWZpbmUgRVJYQlVGX0xPTkdFVkVOVCAweDEwMDAwMDAwCisjZGVmaW5lIEVSWEJVRl9CQURQS1QgMHgyMDAwMDAwMAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgRVJYQlVGX0dPT0RQS1QgMHg0MDAwMDAwMCAgCi0jZGVmaW5lIEVSWEJVRl9DQVJSSUVSIDB4ODAwMDAwMDAgIAorI2RlZmluZSBFUlhCVUZfR09PRFBLVCAweDQwMDAwMDAwCisjZGVmaW5lIEVSWEJVRl9DQVJSSUVSIDB4ODAwMDAwMDAKICNkZWZpbmUgRVRYRF9EQVRBTEVOIDEwNAogc3RydWN0IGlvYzNfZXR4ZCB7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwpAQCAtMjE4LDE1ICsyMTgsMTUgQEAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdTggZGF0YVtFVFhEX0RBVEFMRU5dOwogfTsKLSNkZWZpbmUgRVRYRF9CWVRFQ05UX01BU0sgMHgwMDAwMDdmZiAgCi0jZGVmaW5lIEVUWERfSU5UV0hFTkRPTkUgMHgwMDAwMTAwMCAgCisjZGVmaW5lIEVUWERfQllURUNOVF9NQVNLIDB4MDAwMDA3ZmYKKyNkZWZpbmUgRVRYRF9JTlRXSEVORE9ORSAweDAwMDAxMDAwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBFVFhEX0QwViAweDAwMDEwMDAwICAKLSNkZWZpbmUgRVRYRF9CMVYgMHgwMDAyMDAwMCAgCi0jZGVmaW5lIEVUWERfQjJWIDB4MDAwNDAwMDAgIAotI2RlZmluZSBFVFhEX0RPQ0hFQ0tTVU0gMHgwMDA4MDAwMCAgCisjZGVmaW5lIEVUWERfRDBWIDB4MDAwMTAwMDAKKyNkZWZpbmUgRVRYRF9CMVYgMHgwMDAyMDAwMAorI2RlZmluZSBFVFhEX0IyViAweDAwMDQwMDAwCisjZGVmaW5lIEVUWERfRE9DSEVDS1NVTSAweDAwMDgwMDAwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBFVFhEX0NIS09GRl9NQVNLIDB4MDdmMDAwMDAgIAorI2RlZmluZSBFVFhEX0NIS09GRl9NQVNLIDB4MDdmMDAwMDAKICNkZWZpbmUgRVRYRF9DSEtPRkZfU0hJRlQgMjAKICNkZWZpbmUgRVRYRF9EMENOVF9NQVNLIDB4MDAwMDAwN2YKICNkZWZpbmUgRVRYRF9CMUNOVF9NQVNLIDB4MDAwN2ZmMDAKQEAgLTI0MSwyMiArMjQxLDIyIEBACiAjZGVmaW5lIElPQzNfQllURUJVU19ERVYzIDB4ZTAwMDBMCiAjZGVmaW5lIElPQzNfU0lPX0JBU0UgMHgyMDAwMAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgSU9DM19TSU9fVUFSVEMgKElPQzNfU0lPX0JBU0UrMHgxNDEpICAKLSNkZWZpbmUgSU9DM19TSU9fS0JEQ0cgKElPQzNfU0lPX0JBU0UrMHgxNDIpICAKLSNkZWZpbmUgSU9DM19TSU9fUFBfQkFTRSAoSU9DM19TSU9fQkFTRStQUF9CQVNFKSAgCi0jZGVmaW5lIElPQzNfU0lPX1JUQ19CQVNFIChJT0MzX1NJT19CQVNFKzB4MTY4KSAgCisjZGVmaW5lIElPQzNfU0lPX1VBUlRDIChJT0MzX1NJT19CQVNFKzB4MTQxKQorI2RlZmluZSBJT0MzX1NJT19LQkRDRyAoSU9DM19TSU9fQkFTRSsweDE0MikKKyNkZWZpbmUgSU9DM19TSU9fUFBfQkFTRSAoSU9DM19TSU9fQkFTRStQUF9CQVNFKQorI2RlZmluZSBJT0MzX1NJT19SVENfQkFTRSAoSU9DM19TSU9fQkFTRSsweDE2OCkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIElPQzNfU0lPX1VCX0JBU0UgKElPQzNfU0lPX0JBU0UrVUFSVEJfQkFTRSkgIAotI2RlZmluZSBJT0MzX1NJT19VQV9CQVNFIChJT0MzX1NJT19CQVNFK1VBUlRBX0JBU0UpICAKLSNkZWZpbmUgSU9DM19TU1JBTSBJT0MzX1JBTV9PRkYgIAotI2RlZmluZSBJT0MzX1NTUkFNX0xFTiAweDQwMDAwICAKKyNkZWZpbmUgSU9DM19TSU9fVUJfQkFTRSAoSU9DM19TSU9fQkFTRStVQVJUQl9CQVNFKQorI2RlZmluZSBJT0MzX1NJT19VQV9CQVNFIChJT0MzX1NJT19CQVNFK1VBUlRBX0JBU0UpCisjZGVmaW5lIElPQzNfU1NSQU0gSU9DM19SQU1fT0ZGCisjZGVmaW5lIElPQzNfU1NSQU1fTEVOIDB4NDAwMDAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIElPQzNfU1NSQU1fRE0gMHgwMDAwZmZmZiAgCi0jZGVmaW5lIElPQzNfU1NSQU1fUE0gMHgwMDAxMDAwMCAgCi0jZGVmaW5lIFBDSV9TQ1JfUEFSX1JFU1BfRU4gMHgwMDAwMDA0MCAgCi0jZGVmaW5lIFBDSV9TQ1JfU0VSUl9FTiAweDAwMDAwMTAwICAKKyNkZWZpbmUgSU9DM19TU1JBTV9ETSAweDAwMDBmZmZmCisjZGVmaW5lIElPQzNfU1NSQU1fUE0gMHgwMDAxMDAwMAorI2RlZmluZSBQQ0lfU0NSX1BBUl9SRVNQX0VOIDB4MDAwMDAwNDAKKyNkZWZpbmUgUENJX1NDUl9TRVJSX0VOIDB4MDAwMDAxMDAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIFBDSV9TQ1JfRFJPUF9NT0RFX0VOIDB4MDAwMDgwMDAgIAorI2RlZmluZSBQQ0lfU0NSX0RST1BfTU9ERV9FTiAweDAwMDA4MDAwCiAjZGVmaW5lIFBDSV9TQ1JfUlhfU0VSUiAoMHgxIDw8IDE2KQogI2RlZmluZSBQQ0lfU0NSX0RST1BfTU9ERSAoMHgxIDw8IDE3KQogI2RlZmluZSBQQ0lfU0NSX1NJR19QQVJfRVJSICgweDEgPDwgMjQpCkBAIC0yNjcsMTU4ICsyNjcsMTU4IEBACiAjZGVmaW5lIFBDSV9TQ1JfU0lHX1NFUlIgKDB4MSA8PCAzMCkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9TQ1JfUEFSX0VSUiAoMHgxIDw8IDMxKQotI2RlZmluZSBLTV9DU1JfS19XUlRfUEVORCAweDAwMDAwMDAxICAKLSNkZWZpbmUgS01fQ1NSX01fV1JUX1BFTkQgMHgwMDAwMDAwMiAgCi0jZGVmaW5lIEtNX0NTUl9LX0xDQiAweDAwMDAwMDA0ICAKKyNkZWZpbmUgS01fQ1NSX0tfV1JUX1BFTkQgMHgwMDAwMDAwMQorI2RlZmluZSBLTV9DU1JfTV9XUlRfUEVORCAweDAwMDAwMDAyCisjZGVmaW5lIEtNX0NTUl9LX0xDQiAweDAwMDAwMDA0CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBLTV9DU1JfTV9MQ0IgMHgwMDAwMDAwOCAgCi0jZGVmaW5lIEtNX0NTUl9LX0RBVEEgMHgwMDAwMDAxMCAgCi0jZGVmaW5lIEtNX0NTUl9LX0NMSyAweDAwMDAwMDIwICAKLSNkZWZpbmUgS01fQ1NSX0tfUFVMTF9EQVRBIDB4MDAwMDAwNDAgIAorI2RlZmluZSBLTV9DU1JfTV9MQ0IgMHgwMDAwMDAwOAorI2RlZmluZSBLTV9DU1JfS19EQVRBIDB4MDAwMDAwMTAKKyNkZWZpbmUgS01fQ1NSX0tfQ0xLIDB4MDAwMDAwMjAKKyNkZWZpbmUgS01fQ1NSX0tfUFVMTF9EQVRBIDB4MDAwMDAwNDAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIEtNX0NTUl9LX1BVTExfQ0xLIDB4MDAwMDAwODAgIAotI2RlZmluZSBLTV9DU1JfTV9EQVRBIDB4MDAwMDAxMDAgIAotI2RlZmluZSBLTV9DU1JfTV9DTEsgMHgwMDAwMDIwMCAgCi0jZGVmaW5lIEtNX0NTUl9NX1BVTExfREFUQSAweDAwMDAwNDAwICAKKyNkZWZpbmUgS01fQ1NSX0tfUFVMTF9DTEsgMHgwMDAwMDA4MAorI2RlZmluZSBLTV9DU1JfTV9EQVRBIDB4MDAwMDAxMDAKKyNkZWZpbmUgS01fQ1NSX01fQ0xLIDB4MDAwMDAyMDAKKyNkZWZpbmUgS01fQ1NSX01fUFVMTF9EQVRBIDB4MDAwMDA0MDAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIEtNX0NTUl9NX1BVTExfQ0xLIDB4MDAwMDA4MDAgIAotI2RlZmluZSBLTV9DU1JfRU1NX01PREUgMHgwMDAwMTAwMCAgCi0jZGVmaW5lIEtNX0NTUl9TSU1fTU9ERSAweDAwMDAyMDAwICAKLSNkZWZpbmUgS01fQ1NSX0tfU01fSURMRSAweDAwMDA0MDAwICAKKyNkZWZpbmUgS01fQ1NSX01fUFVMTF9DTEsgMHgwMDAwMDgwMAorI2RlZmluZSBLTV9DU1JfRU1NX01PREUgMHgwMDAwMTAwMAorI2RlZmluZSBLTV9DU1JfU0lNX01PREUgMHgwMDAwMjAwMAorI2RlZmluZSBLTV9DU1JfS19TTV9JRExFIDB4MDAwMDQwMDAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIEtNX0NTUl9NX1NNX0lETEUgMHgwMDAwODAwMCAgCi0jZGVmaW5lIEtNX0NTUl9LX1RPIDB4MDAwMTAwMDAgIAotI2RlZmluZSBLTV9DU1JfTV9UTyAweDAwMDIwMDAwICAKLSNkZWZpbmUgS01fQ1NSX0tfVE9fRU4gMHgwMDA0MDAwMCAgCisjZGVmaW5lIEtNX0NTUl9NX1NNX0lETEUgMHgwMDAwODAwMAorI2RlZmluZSBLTV9DU1JfS19UTyAweDAwMDEwMDAwCisjZGVmaW5lIEtNX0NTUl9NX1RPIDB4MDAwMjAwMDAKKyNkZWZpbmUgS01fQ1NSX0tfVE9fRU4gMHgwMDA0MDAwMAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgS01fQ1NSX01fVE9fRU4gMHgwMDA4MDAwMCAgCi0jZGVmaW5lIEtNX0NTUl9LX0NMQU1QX09ORSAweDAwMTAwMDAwICAKLSNkZWZpbmUgS01fQ1NSX01fQ0xBTVBfT05FIDB4MDAyMDAwMDAgIAotI2RlZmluZSBLTV9DU1JfS19DTEFNUF9USFJFRSAweDAwNDAwMDAwICAKKyNkZWZpbmUgS01fQ1NSX01fVE9fRU4gMHgwMDA4MDAwMAorI2RlZmluZSBLTV9DU1JfS19DTEFNUF9PTkUgMHgwMDEwMDAwMAorI2RlZmluZSBLTV9DU1JfTV9DTEFNUF9PTkUgMHgwMDIwMDAwMAorI2RlZmluZSBLTV9DU1JfS19DTEFNUF9USFJFRSAweDAwNDAwMDAwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBLTV9DU1JfTV9DTEFNUF9USFJFRSAweDAwODAwMDAwICAKLSNkZWZpbmUgS01fUkRfREFUQV8yIDB4MDAwMDAwZmYgIAorI2RlZmluZSBLTV9DU1JfTV9DTEFNUF9USFJFRSAweDAwODAwMDAwCisjZGVmaW5lIEtNX1JEX0RBVEFfMiAweDAwMDAwMGZmCiAjZGVmaW5lIEtNX1JEX0RBVEFfMl9TSElGVCAwCi0jZGVmaW5lIEtNX1JEX0RBVEFfMSAweDAwMDBmZjAwICAKKyNkZWZpbmUgS01fUkRfREFUQV8xIDB4MDAwMGZmMDAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtNX1JEX0RBVEFfMV9TSElGVCA4Ci0jZGVmaW5lIEtNX1JEX0RBVEFfMCAweDAwZmYwMDAwICAKKyNkZWZpbmUgS01fUkRfREFUQV8wIDB4MDBmZjAwMDAKICNkZWZpbmUgS01fUkRfREFUQV8wX1NISUZUIDE2Ci0jZGVmaW5lIEtNX1JEX0ZSQU1FX0VSUl8yIDB4MDEwMDAwMDAgIAorI2RlZmluZSBLTV9SRF9GUkFNRV9FUlJfMiAweDAxMDAwMDAwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBLTV9SRF9GUkFNRV9FUlJfMSAweDAyMDAwMDAwICAKLSNkZWZpbmUgS01fUkRfRlJBTUVfRVJSXzAgMHgwNDAwMDAwMCAgCi0jZGVmaW5lIEtNX1JEX0tCRF9NU0UgMHgwODAwMDAwMCAgCi0jZGVmaW5lIEtNX1JEX09GTE8gMHgxMDAwMDAwMCAgCisjZGVmaW5lIEtNX1JEX0ZSQU1FX0VSUl8xIDB4MDIwMDAwMDAKKyNkZWZpbmUgS01fUkRfRlJBTUVfRVJSXzAgMHgwNDAwMDAwMAorI2RlZmluZSBLTV9SRF9LQkRfTVNFIDB4MDgwMDAwMDAKKyNkZWZpbmUgS01fUkRfT0ZMTyAweDEwMDAwMDAwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBLTV9SRF9WQUxJRF8yIDB4MjAwMDAwMDAgIAotI2RlZmluZSBLTV9SRF9WQUxJRF8xIDB4NDAwMDAwMDAgIAotI2RlZmluZSBLTV9SRF9WQUxJRF8wIDB4ODAwMDAwMDAgIAorI2RlZmluZSBLTV9SRF9WQUxJRF8yIDB4MjAwMDAwMDAKKyNkZWZpbmUgS01fUkRfVkFMSURfMSAweDQwMDAwMDAwCisjZGVmaW5lIEtNX1JEX1ZBTElEXzAgMHg4MDAwMDAwMAogI2RlZmluZSBLTV9SRF9WQUxJRF9BTEwgKEtNX1JEX1ZBTElEXzB8S01fUkRfVkFMSURfMXxLTV9SRF9WQUxJRF8yKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgS01fV0RfV1JUX0RBVEEgMHgwMDAwMDBmZiAgCisjZGVmaW5lIEtNX1dEX1dSVF9EQVRBIDB4MDAwMDAwZmYKICNkZWZpbmUgS01fV0RfV1JUX0RBVEFfU0hJRlQgMAotI2RlZmluZSBSWFNCX09WRVJSVU4gMHgwMSAgCi0jZGVmaW5lIFJYU0JfUEFSX0VSUiAweDAyICAKKyNkZWZpbmUgUlhTQl9PVkVSUlVOIDB4MDEKKyNkZWZpbmUgUlhTQl9QQVJfRVJSIDB4MDIKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIFJYU0JfRlJBTUVfRVJSIDB4MDQgIAotI2RlZmluZSBSWFNCX0JSRUFLIDB4MDggIAotI2RlZmluZSBSWFNCX0NUUyAweDEwICAKLSNkZWZpbmUgUlhTQl9EQ0QgMHgyMCAgCisjZGVmaW5lIFJYU0JfRlJBTUVfRVJSIDB4MDQKKyNkZWZpbmUgUlhTQl9CUkVBSyAweDA4CisjZGVmaW5lIFJYU0JfQ1RTIDB4MTAKKyNkZWZpbmUgUlhTQl9EQ0QgMHgyMAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgUlhTQl9NT0RFTV9WQUxJRCAweDQwICAKLSNkZWZpbmUgUlhTQl9EQVRBX1ZBTElEIDB4ODAgIAotI2RlZmluZSBUWENCX0lOVF9XSEVOX0RPTkUgMHgyMCAgCi0jZGVmaW5lIFRYQ0JfSU5WQUxJRCAweDAwICAKKyNkZWZpbmUgUlhTQl9NT0RFTV9WQUxJRCAweDQwCisjZGVmaW5lIFJYU0JfREFUQV9WQUxJRCAweDgwCisjZGVmaW5lIFRYQ0JfSU5UX1dIRU5fRE9ORSAweDIwCisjZGVmaW5lIFRYQ0JfSU5WQUxJRCAweDAwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBUWENCX1ZBTElEIDB4NDAgIAotI2RlZmluZSBUWENCX01DUiAweDgwICAKLSNkZWZpbmUgVFhDQl9ERUxBWSAweGMwICAKLSNkZWZpbmUgU0JCUl9MX1NJWkUgMHgwMDAwMDAwMSAgCisjZGVmaW5lIFRYQ0JfVkFMSUQgMHg0MAorI2RlZmluZSBUWENCX01DUiAweDgwCisjZGVmaW5lIFRYQ0JfREVMQVkgMHhjMAorI2RlZmluZSBTQkJSX0xfU0laRSAweDAwMDAwMDAxCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBTQkJSX0xfQkFTRSAweGZmZmZmMDAwICAKLSNkZWZpbmUgU1NDUl9SWF9USFJFU0hPTEQgMHgwMDAwMDFmZiAgCi0jZGVmaW5lIFNTQ1JfVFhfVElNRVJfQlVTWSAweDAwMDEwMDAwICAKLSNkZWZpbmUgU1NDUl9IRkNfRU4gMHgwMDAyMDAwMCAgCisjZGVmaW5lIFNCQlJfTF9CQVNFIDB4ZmZmZmYwMDAKKyNkZWZpbmUgU1NDUl9SWF9USFJFU0hPTEQgMHgwMDAwMDFmZgorI2RlZmluZSBTU0NSX1RYX1RJTUVSX0JVU1kgMHgwMDAxMDAwMAorI2RlZmluZSBTU0NSX0hGQ19FTiAweDAwMDIwMDAwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBTU0NSX1JYX1JJTkdfRENEIDB4MDAwNDAwMDAgIAotI2RlZmluZSBTU0NSX1JYX1JJTkdfQ1RTIDB4MDAwODAwMDAgIAotI2RlZmluZSBTU0NSX0hJR0hfU1BEIDB4MDAxMDAwMDAgIAotI2RlZmluZSBTU0NSX0RJQUcgMHgwMDIwMDAwMCAgCisjZGVmaW5lIFNTQ1JfUlhfUklOR19EQ0QgMHgwMDA0MDAwMAorI2RlZmluZSBTU0NSX1JYX1JJTkdfQ1RTIDB4MDAwODAwMDAKKyNkZWZpbmUgU1NDUl9ISUdIX1NQRCAweDAwMTAwMDAwCisjZGVmaW5lIFNTQ1JfRElBRyAweDAwMjAwMDAwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBTU0NSX1JYX0RSQUlOIDB4MDgwMDAwMDAgIAotI2RlZmluZSBTU0NSX0RNQV9FTiAweDEwMDAwMDAwICAKLSNkZWZpbmUgU1NDUl9ETUFfUEFVU0UgMHgyMDAwMDAwMCAgCi0jZGVmaW5lIFNTQ1JfUEFVU0VfU1RBVEUgMHg0MDAwMDAwMCAgCisjZGVmaW5lIFNTQ1JfUlhfRFJBSU4gMHgwODAwMDAwMAorI2RlZmluZSBTU0NSX0RNQV9FTiAweDEwMDAwMDAwCisjZGVmaW5lIFNTQ1JfRE1BX1BBVVNFIDB4MjAwMDAwMDAKKyNkZWZpbmUgU1NDUl9QQVVTRV9TVEFURSAweDQwMDAwMDAwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBTU0NSX1JFU0VUIDB4ODAwMDAwMDAgIAotI2RlZmluZSBQUk9EX0NPTlNfUFRSXzRLIDB4MDAwMDBmZjggIAotI2RlZmluZSBQUk9EX0NPTlNfUFRSXzFLIDB4MDAwMDAzZjggIAorI2RlZmluZSBTU0NSX1JFU0VUIDB4ODAwMDAwMDAKKyNkZWZpbmUgUFJPRF9DT05TX1BUUl80SyAweDAwMDAwZmY4CisjZGVmaW5lIFBST0RfQ09OU19QVFJfMUsgMHgwMDAwMDNmOAogI2RlZmluZSBQUk9EX0NPTlNfUFRSX09GRiAzCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBTUkNJUl9BUk0gMHg4MDAwMDAwMCAgCi0jZGVmaW5lIFNSUElSX0JZVEVfQ05UIDB4MDcwMDAwMDAgIAorI2RlZmluZSBTUkNJUl9BUk0gMHg4MDAwMDAwMAorI2RlZmluZSBTUlBJUl9CWVRFX0NOVCAweDA3MDAwMDAwCiAjZGVmaW5lIFNSUElSX0JZVEVfQ05UX1NISUZUIDI0Ci0jZGVmaW5lIFNUQ0lSX0JZVEVfQ05UIDB4MGYwMDAwMDAgIAorI2RlZmluZSBTVENJUl9CWVRFX0NOVCAweDBmMDAwMDAwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTVENJUl9CWVRFX0NOVF9TSElGVCAyNAotI2RlZmluZSBTSEFET1dfRFIgMHgwMDAwMDAwMSAgCi0jZGVmaW5lIFNIQURPV19PRSAweDAwMDAwMDAyICAKLSNkZWZpbmUgU0hBRE9XX1BFIDB4MDAwMDAwMDQgIAorI2RlZmluZSBTSEFET1dfRFIgMHgwMDAwMDAwMQorI2RlZmluZSBTSEFET1dfT0UgMHgwMDAwMDAwMgorI2RlZmluZSBTSEFET1dfUEUgMHgwMDAwMDAwNAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgU0hBRE9XX0ZFIDB4MDAwMDAwMDggIAotI2RlZmluZSBTSEFET1dfQkkgMHgwMDAwMDAxMCAgCi0jZGVmaW5lIFNIQURPV19USFJFIDB4MDAwMDAwMjAgIAotI2RlZmluZSBTSEFET1dfVEVNVCAweDAwMDAwMDQwICAKKyNkZWZpbmUgU0hBRE9XX0ZFIDB4MDAwMDAwMDgKKyNkZWZpbmUgU0hBRE9XX0JJIDB4MDAwMDAwMTAKKyNkZWZpbmUgU0hBRE9XX1RIUkUgMHgwMDAwMDAyMAorI2RlZmluZSBTSEFET1dfVEVNVCAweDAwMDAwMDQwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBTSEFET1dfUkZDRSAweDAwMDAwMDgwICAKLSNkZWZpbmUgU0hBRE9XX0RDVFMgMHgwMDAxMDAwMCAgCi0jZGVmaW5lIFNIQURPV19ERENEIDB4MDAwODAwMDAgIAotI2RlZmluZSBTSEFET1dfQ1RTIDB4MDAxMDAwMDAgIAorI2RlZmluZSBTSEFET1dfUkZDRSAweDAwMDAwMDgwCisjZGVmaW5lIFNIQURPV19EQ1RTIDB4MDAwMTAwMDAKKyNkZWZpbmUgU0hBRE9XX0REQ0QgMHgwMDA4MDAwMAorI2RlZmluZSBTSEFET1dfQ1RTIDB4MDAxMDAwMDAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIFNIQURPV19EQ0QgMHgwMDgwMDAwMCAgCi0jZGVmaW5lIFNIQURPV19EVFIgMHgwMTAwMDAwMCAgCi0jZGVmaW5lIFNIQURPV19SVFMgMHgwMjAwMDAwMCAgCi0jZGVmaW5lIFNIQURPV19PVVQxIDB4MDQwMDAwMDAgIAorI2RlZmluZSBTSEFET1dfRENEIDB4MDA4MDAwMDAKKyNkZWZpbmUgU0hBRE9XX0RUUiAweDAxMDAwMDAwCisjZGVmaW5lIFNIQURPV19SVFMgMHgwMjAwMDAwMAorI2RlZmluZSBTSEFET1dfT1VUMSAweDA0MDAwMDAwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBTSEFET1dfT1VUMiAweDA4MDAwMDAwICAKLSNkZWZpbmUgU0hBRE9XX0xPT1AgMHgxMDAwMDAwMCAgCi0jZGVmaW5lIFNSVFJfQ05UIDB4MDAwMDBmZmYgIAotI2RlZmluZSBTUlRSX0NOVF9WQUwgMHgwZmZmMDAwMCAgCisjZGVmaW5lIFNIQURPV19PVVQyIDB4MDgwMDAwMDAKKyNkZWZpbmUgU0hBRE9XX0xPT1AgMHgxMDAwMDAwMAorI2RlZmluZSBTUlRSX0NOVCAweDAwMDAwZmZmCisjZGVmaW5lIFNSVFJfQ05UX1ZBTCAweDBmZmYwMDAwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTUlRSX0NOVF9WQUxfU0hJRlQgMTYKLSNkZWZpbmUgU1JUUl9IWiAxNjAwMCAgCi0jZGVmaW5lIFNJT19JUl9TQV9UWF9NVCAweDAwMDAwMDAxICAKLSNkZWZpbmUgU0lPX0lSX1NBX1JYX0ZVTEwgMHgwMDAwMDAwMiAgCisjZGVmaW5lIFNSVFJfSFogMTYwMDAKKyNkZWZpbmUgU0lPX0lSX1NBX1RYX01UIDB4MDAwMDAwMDEKKyNkZWZpbmUgU0lPX0lSX1NBX1JYX0ZVTEwgMHgwMDAwMDAwMgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgU0lPX0lSX1NBX1JYX0hJR0ggMHgwMDAwMDAwNCAgCi0jZGVmaW5lIFNJT19JUl9TQV9SWF9USU1FUiAweDAwMDAwMDA4ICAKLSNkZWZpbmUgU0lPX0lSX1NBX0RFTFRBX0RDRCAweDAwMDAwMDEwICAKLSNkZWZpbmUgU0lPX0lSX1NBX0RFTFRBX0NUUyAweDAwMDAwMDIwICAKKyNkZWZpbmUgU0lPX0lSX1NBX1JYX0hJR0ggMHgwMDAwMDAwNAorI2RlZmluZSBTSU9fSVJfU0FfUlhfVElNRVIgMHgwMDAwMDAwOAorI2RlZmluZSBTSU9fSVJfU0FfREVMVEFfRENEIDB4MDAwMDAwMTAKKyNkZWZpbmUgU0lPX0lSX1NBX0RFTFRBX0NUUyAweDAwMDAwMDIwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBTSU9fSVJfU0FfSU5UIDB4MDAwMDAwNDAgIAotI2RlZmluZSBTSU9fSVJfU0FfVFhfRVhQTElDSVQgMHgwMDAwMDA4MCAgCi0jZGVmaW5lIFNJT19JUl9TQV9NRU1FUlIgMHgwMDAwMDEwMCAgCi0jZGVmaW5lIFNJT19JUl9TQl9UWF9NVCAweDAwMDAwMjAwICAKKyNkZWZpbmUgU0lPX0lSX1NBX0lOVCAweDAwMDAwMDQwCisjZGVmaW5lIFNJT19JUl9TQV9UWF9FWFBMSUNJVCAweDAwMDAwMDgwCisjZGVmaW5lIFNJT19JUl9TQV9NRU1FUlIgMHgwMDAwMDEwMAorI2RlZmluZSBTSU9fSVJfU0JfVFhfTVQgMHgwMDAwMDIwMAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgU0lPX0lSX1NCX1JYX0ZVTEwgMHgwMDAwMDQwMCAgCi0jZGVmaW5lIFNJT19JUl9TQl9SWF9ISUdIIDB4MDAwMDA4MDAgIAotI2RlZmluZSBTSU9fSVJfU0JfUlhfVElNRVIgMHgwMDAwMTAwMCAgCi0jZGVmaW5lIFNJT19JUl9TQl9ERUxUQV9EQ0QgMHgwMDAwMjAwMCAgCisjZGVmaW5lIFNJT19JUl9TQl9SWF9GVUxMIDB4MDAwMDA0MDAKKyNkZWZpbmUgU0lPX0lSX1NCX1JYX0hJR0ggMHgwMDAwMDgwMAorI2RlZmluZSBTSU9fSVJfU0JfUlhfVElNRVIgMHgwMDAwMTAwMAorI2RlZmluZSBTSU9fSVJfU0JfREVMVEFfRENEIDB4MDAwMDIwMDAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIFNJT19JUl9TQl9ERUxUQV9DVFMgMHgwMDAwNDAwMCAgCi0jZGVmaW5lIFNJT19JUl9TQl9JTlQgMHgwMDAwODAwMCAgCi0jZGVmaW5lIFNJT19JUl9TQl9UWF9FWFBMSUNJVCAweDAwMDEwMDAwICAKLSNkZWZpbmUgU0lPX0lSX1NCX01FTUVSUiAweDAwMDIwMDAwICAKKyNkZWZpbmUgU0lPX0lSX1NCX0RFTFRBX0NUUyAweDAwMDA0MDAwCisjZGVmaW5lIFNJT19JUl9TQl9JTlQgMHgwMDAwODAwMAorI2RlZmluZSBTSU9fSVJfU0JfVFhfRVhQTElDSVQgMHgwMDAxMDAwMAorI2RlZmluZSBTSU9fSVJfU0JfTUVNRVJSIDB4MDAwMjAwMDAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIFNJT19JUl9QUF9JTlQgMHgwMDA0MDAwMCAgCi0jZGVmaW5lIFNJT19JUl9QUF9JTlRBIDB4MDAwODAwMDAgIAotI2RlZmluZSBTSU9fSVJfUFBfSU5UQiAweDAwMTAwMDAwICAKLSNkZWZpbmUgU0lPX0lSX1BQX01FTUVSUiAweDAwMjAwMDAwICAKKyNkZWZpbmUgU0lPX0lSX1BQX0lOVCAweDAwMDQwMDAwCisjZGVmaW5lIFNJT19JUl9QUF9JTlRBIDB4MDAwODAwMDAKKyNkZWZpbmUgU0lPX0lSX1BQX0lOVEIgMHgwMDEwMDAwMAorI2RlZmluZSBTSU9fSVJfUFBfTUVNRVJSIDB4MDAyMDAwMDAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIFNJT19JUl9LQkRfSU5UIDB4MDA0MDAwMDAgIAotI2RlZmluZSBTSU9fSVJfUlRfSU5UIDB4MDgwMDAwMDAgIAotI2RlZmluZSBTSU9fSVJfR0VOX0lOVDEgMHgxMDAwMDAwMCAgCisjZGVmaW5lIFNJT19JUl9LQkRfSU5UIDB4MDA0MDAwMDAKKyNkZWZpbmUgU0lPX0lSX1JUX0lOVCAweDA4MDAwMDAwCisjZGVmaW5lIFNJT19JUl9HRU5fSU5UMSAweDEwMDAwMDAwCiAjZGVmaW5lIFNJT19JUl9HRU5fSU5UX1NISUZUIDI4CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTSU9fSVJfU0EgKFNJT19JUl9TQV9UWF9NVCB8IFNJT19JUl9TQV9SWF9GVUxMIHwgICBTSU9fSVJfU0FfUlhfSElHSCB8IFNJT19JUl9TQV9SWF9USU1FUiB8ICAgU0lPX0lSX1NBX0RFTFRBX0RDRCB8IFNJT19JUl9TQV9ERUxUQV9DVFMgfCAgIFNJT19JUl9TQV9JTlQgfCBTSU9fSVJfU0FfVFhfRVhQTElDSVQgfCAgIFNJT19JUl9TQV9NRU1FUlIpCkBAIC00MjcsNjEgKzQyNyw2MSBAQAogI2RlZmluZSBTSU9fSVJfUlQgKFNJT19JUl9SVF9JTlQgfCBTSU9fSVJfR0VOX0lOVDEpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJT0MzX1BFTkRJTkdfSU5UUlMobWVtKSAoUENJX0lOVygmKChtZW0pLT5zaW9faXIpKSAmICAgUENJX0lOVygmKChtZW0pLT5zaW9faWVzX3JvKSkpCi0jZGVmaW5lIFNJT19DUl9TSU9fUkVTRVQgMHgwMDAwMDAwMSAgCi0jZGVmaW5lIFNJT19DUl9TRVJfQV9CQVNFIDB4MDAwMDAwZmUgIAorI2RlZmluZSBTSU9fQ1JfU0lPX1JFU0VUIDB4MDAwMDAwMDEKKyNkZWZpbmUgU0lPX0NSX1NFUl9BX0JBU0UgMHgwMDAwMDBmZQogI2RlZmluZSBTSU9fQ1JfU0VSX0FfQkFTRV9TSElGVCAxCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBTSU9fQ1JfU0VSX0JfQkFTRSAweDAwMDA3ZjAwICAKKyNkZWZpbmUgU0lPX0NSX1NFUl9CX0JBU0UgMHgwMDAwN2YwMAogI2RlZmluZSBTSU9fQ1JfU0VSX0JfQkFTRV9TSElGVCA4Ci0jZGVmaW5lIFNJT19TUl9DTURfUFVMU0UgMHgwMDA3ODAwMCAgCisjZGVmaW5lIFNJT19TUl9DTURfUFVMU0UgMHgwMDA3ODAwMAogI2RlZmluZSBTSU9fQ1JfQ01EX1BVTFNFX1NISUZUIDE1CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBTSU9fQ1JfQVJCX0RJQUcgMHgwMDM4MDAwMCAgCisjZGVmaW5lIFNJT19DUl9BUkJfRElBRyAweDAwMzgwMDAwCiAjZGVmaW5lIFNJT19DUl9BUkJfRElBR19UWEEgMHgwMDAwMDAwMAogI2RlZmluZSBTSU9fQ1JfQVJCX0RJQUdfUlhBIDB4MDAwODAwMDAKICNkZWZpbmUgU0lPX0NSX0FSQl9ESUFHX1RYQiAweDAwMTAwMDAwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTSU9fQ1JfQVJCX0RJQUdfUlhCIDB4MDAxODAwMDAKICNkZWZpbmUgU0lPX0NSX0FSQl9ESUFHX1BQIDB4MDAyMDAwMDAKLSNkZWZpbmUgU0lPX0NSX0FSQl9ESUFHX0lETEUgMHgwMDQwMDAwMCAgCi0jZGVmaW5lIElOVF9PVVRfQ09VTlQgMHgwMDAwZmZmZiAgCisjZGVmaW5lIFNJT19DUl9BUkJfRElBR19JRExFIDB4MDA0MDAwMDAKKyNkZWZpbmUgSU5UX09VVF9DT1VOVCAweDAwMDBmZmZmCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBJTlRfT1VUX01PREUgMHgwMDA3MDAwMCAgCi0jZGVmaW5lIElOVF9PVVRfTU9ERV8wIDB4MDAwMDAwMDAgIAotI2RlZmluZSBJTlRfT1VUX01PREVfMSAweDAwMDQwMDAwICAKLSNkZWZpbmUgSU5UX09VVF9NT0RFXzFQVUxTRSAweDAwMDUwMDAwICAKKyNkZWZpbmUgSU5UX09VVF9NT0RFIDB4MDAwNzAwMDAKKyNkZWZpbmUgSU5UX09VVF9NT0RFXzAgMHgwMDAwMDAwMAorI2RlZmluZSBJTlRfT1VUX01PREVfMSAweDAwMDQwMDAwCisjZGVmaW5lIElOVF9PVVRfTU9ERV8xUFVMU0UgMHgwMDA1MDAwMAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgSU5UX09VVF9NT0RFX1BVTFNFUyAweDAwMDYwMDAwICAKLSNkZWZpbmUgSU5UX09VVF9NT0RFX1NRVyAweDAwMDcwMDAwICAKLSNkZWZpbmUgSU5UX09VVF9ESUFHIDB4NDAwMDAwMDAgIAotI2RlZmluZSBJTlRfT1VUX0lOVF9PVVQgMHg4MDAwMDAwMCAgCisjZGVmaW5lIElOVF9PVVRfTU9ERV9QVUxTRVMgMHgwMDA2MDAwMAorI2RlZmluZSBJTlRfT1VUX01PREVfU1FXIDB4MDAwNzAwMDAKKyNkZWZpbmUgSU5UX09VVF9ESUFHIDB4NDAwMDAwMDAKKyNkZWZpbmUgSU5UX09VVF9JTlRfT1VUIDB4ODAwMDAwMDAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIElOVF9PVVRfTlNfUEVSX1RJQ0sgKDMwICogMjYwKSAgCi0jZGVmaW5lIElOVF9PVVRfVElDS1NfUEVSX1BVTFNFIDMgIAorI2RlZmluZSBJTlRfT1VUX05TX1BFUl9USUNLICgzMCAqIDI2MCkKKyNkZWZpbmUgSU5UX09VVF9USUNLU19QRVJfUFVMU0UgMwogI2RlZmluZSBJTlRfT1VUX1VTX1RPX0NPVU5UKHgpICAgICAoKCh4KSAqIDEwICsgSU5UX09VVF9OU19QRVJfVElDSyAvIDIwMCkgKiAgIDEwMCAvIElOVF9PVVRfTlNfUEVSX1RJQ0sgLSAxKQogI2RlZmluZSBJTlRfT1VUX0NPVU5UX1RPX1VTKHgpICAgICAoKCh4KSArIDEpICogSU5UX09VVF9OU19QRVJfVElDSyAvIDEwMDApCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBJTlRfT1VUX01JTl9USUNLUyAzICAKLSNkZWZpbmUgSU5UX09VVF9NQVhfVElDS1MgSU5UX09VVF9DT1VOVCAgCi0jZGVmaW5lIEdQQ1JfRElSIDB4MDAwMDAwZmYgIAotI2RlZmluZSBHUENSX0RJUl9QSU4oeCkgKDE8PCh4KSkgIAorI2RlZmluZSBJTlRfT1VUX01JTl9USUNLUyAzCisjZGVmaW5lIElOVF9PVVRfTUFYX1RJQ0tTIElOVF9PVVRfQ09VTlQKKyNkZWZpbmUgR1BDUl9ESVIgMHgwMDAwMDBmZgorI2RlZmluZSBHUENSX0RJUl9QSU4oeCkgKDE8PCh4KSkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIEdQQ1JfRURHRSAweDAwMGYwMDAwICAKLSNkZWZpbmUgR1BDUl9FREdFX1BJTih4KSAoMTw8KCh4KSsxNSkpICAKLSNkZWZpbmUgR1BDUl9JTlRfT1VUX0VOIDB4MDAxMDAwMDAgIAotI2RlZmluZSBHUENSX01MQU5fRU4gMHgwMDIwMDAwMCAgCisjZGVmaW5lIEdQQ1JfRURHRSAweDAwMGYwMDAwCisjZGVmaW5lIEdQQ1JfRURHRV9QSU4oeCkgKDE8PCgoeCkrMTUpKQorI2RlZmluZSBHUENSX0lOVF9PVVRfRU4gMHgwMDEwMDAwMAorI2RlZmluZSBHUENSX01MQU5fRU4gMHgwMDIwMDAwMAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgR1BDUl9ESVJfU0VSQV9YQ1ZSIDB4MDAwMDAwODAgIAotI2RlZmluZSBHUENSX0RJUl9TRVJCX1hDVlIgMHgwMDAwMDA0MCAgCi0jZGVmaW5lIEdQQ1JfRElSX1BIWV9SU1QgMHgwMDAwMDAyMCAgCi0jZGVmaW5lIEdQQ1JfUEhZX1JFU0VUIDB4MjAgIAorI2RlZmluZSBHUENSX0RJUl9TRVJBX1hDVlIgMHgwMDAwMDA4MAorI2RlZmluZSBHUENSX0RJUl9TRVJCX1hDVlIgMHgwMDAwMDA0MAorI2RlZmluZSBHUENSX0RJUl9QSFlfUlNUIDB4MDAwMDAwMjAKKyNkZWZpbmUgR1BDUl9QSFlfUkVTRVQgMHgyMAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgR1BDUl9VQVJUQl9NT0RFU0VMIDB4NDAgIAotI2RlZmluZSBHUENSX1VBUlRBX01PREVTRUwgMHg4MCAgCi0jZGVmaW5lIEdQUFJfUEhZX1JFU0VUX1BJTiA1ICAKLSNkZWZpbmUgR1BQUl9VQVJUQl9NT0RFU0VMX1BJTiA2ICAKKyNkZWZpbmUgR1BDUl9VQVJUQl9NT0RFU0VMIDB4NDAKKyNkZWZpbmUgR1BDUl9VQVJUQV9NT0RFU0VMIDB4ODAKKyNkZWZpbmUgR1BQUl9QSFlfUkVTRVRfUElOIDUKKyNkZWZpbmUgR1BQUl9VQVJUQl9NT0RFU0VMX1BJTiA2CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBHUFBSX1VBUlRBX01PREVTRUxfUElOIDcgIAorI2RlZmluZSBHUFBSX1VBUlRBX01PREVTRUxfUElOIDcKICNkZWZpbmUgRU1DUl9EVVBMRVggMHgwMDAwMDAwMQogI2RlZmluZSBFTUNSX1BST01JU0MgMHgwMDAwMDAwMgogI2RlZmluZSBFTUNSX1BBREVOIDB4MDAwMDAwMDQKQEAgLTUyMywxMCArNTIzLDEwIEBACiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBFSVNSX1RYTUVNRVJSIDB4MDIwMDAwMDAKICNkZWZpbmUgRUlTUl9UWFBBUkVSUiAweDA0MDAwMDAwCi0jZGVmaW5lIEVSQ1NSX1RIUkVTSF9NQVNLIDB4MDAwMDAxZmYgIAotI2RlZmluZSBFUkNTUl9SWF9UTVIgMHg0MDAwMDAwMCAgCisjZGVmaW5lIEVSQ1NSX1RIUkVTSF9NQVNLIDB4MDAwMDAxZmYKKyNkZWZpbmUgRVJDU1JfUlhfVE1SIDB4NDAwMDAwMDAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIEVSQ1NSX0RJQUdfT0ZMTyAweDgwMDAwMDAwICAKKyNkZWZpbmUgRVJDU1JfRElBR19PRkxPIDB4ODAwMDAwMDAKICNkZWZpbmUgRVJCUl9BTElHTk1FTlQgNDA5NgogI2RlZmluZSBFUkJSX0xfUlhSSU5HQkFTRV9NQVNLIDB4ZmZmZmYwMDAKICNkZWZpbmUgRVJCQVJfQkFSUklFUl9CSVQgMHgwMTAwCkBAIC01ODEsMjkgKzU4MSwyOSBAQAogI2RlZmluZSBFUlhCVUZfQllURUNOVF9TSElGVCAxNgogI2RlZmluZSBFUlhCVUZfViAweDgwMDAwMDAwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBFUlhCVUZfQ1JDRVJSIDB4MDAwMDAwMDEgIAotI2RlZmluZSBFUlhCVUZfRlJBTUVSUiAweDAwMDAwMDAyICAKLSNkZWZpbmUgRVJYQlVGX0NPREVSUiAweDAwMDAwMDA0ICAKLSNkZWZpbmUgRVJYQlVGX0lOVlBSRUFNQiAweDAwMDAwMDA4ICAKKyNkZWZpbmUgRVJYQlVGX0NSQ0VSUiAweDAwMDAwMDAxCisjZGVmaW5lIEVSWEJVRl9GUkFNRVJSIDB4MDAwMDAwMDIKKyNkZWZpbmUgRVJYQlVGX0NPREVSUiAweDAwMDAwMDA0CisjZGVmaW5lIEVSWEJVRl9JTlZQUkVBTUIgMHgwMDAwMDAwOAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgRVJYQlVGX0xPTEVOIDB4MDAwMDcwMDAgIAotI2RlZmluZSBFUlhCVUZfSElMRU4gMHgwM2ZmMDAwMCAgCi0jZGVmaW5lIEVSWEJVRl9NVUxUSUNBU1QgMHgwNDAwMDAwMCAgCi0jZGVmaW5lIEVSWEJVRl9CUk9BRENBU1QgMHgwODAwMDAwMCAgCisjZGVmaW5lIEVSWEJVRl9MT0xFTiAweDAwMDA3MDAwCisjZGVmaW5lIEVSWEJVRl9ISUxFTiAweDAzZmYwMDAwCisjZGVmaW5lIEVSWEJVRl9NVUxUSUNBU1QgMHgwNDAwMDAwMAorI2RlZmluZSBFUlhCVUZfQlJPQURDQVNUIDB4MDgwMDAwMDAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIEVSWEJVRl9MT05HRVZFTlQgMHgxMDAwMDAwMCAgCi0jZGVmaW5lIEVSWEJVRl9CQURQS1QgMHgyMDAwMDAwMCAgCi0jZGVmaW5lIEVSWEJVRl9HT09EUEtUIDB4NDAwMDAwMDAgIAotI2RlZmluZSBFUlhCVUZfQ0FSUklFUiAweDgwMDAwMDAwICAKKyNkZWZpbmUgRVJYQlVGX0xPTkdFVkVOVCAweDEwMDAwMDAwCisjZGVmaW5lIEVSWEJVRl9CQURQS1QgMHgyMDAwMDAwMAorI2RlZmluZSBFUlhCVUZfR09PRFBLVCAweDQwMDAwMDAwCisjZGVmaW5lIEVSWEJVRl9DQVJSSUVSIDB4ODAwMDAwMDAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIEVUWERfQllURUNOVF9NQVNLIDB4MDAwMDA3ZmYgIAotI2RlZmluZSBFVFhEX0lOVFdIRU5ET05FIDB4MDAwMDEwMDAgIAotI2RlZmluZSBFVFhEX0QwViAweDAwMDEwMDAwICAKLSNkZWZpbmUgRVRYRF9CMVYgMHgwMDAyMDAwMCAgCisjZGVmaW5lIEVUWERfQllURUNOVF9NQVNLIDB4MDAwMDA3ZmYKKyNkZWZpbmUgRVRYRF9JTlRXSEVORE9ORSAweDAwMDAxMDAwCisjZGVmaW5lIEVUWERfRDBWIDB4MDAwMTAwMDAKKyNkZWZpbmUgRVRYRF9CMVYgMHgwMDAyMDAwMAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgRVRYRF9CMlYgMHgwMDA0MDAwMCAgCi0jZGVmaW5lIEVUWERfRE9DSEVDS1NVTSAweDAwMDgwMDAwICAKLSNkZWZpbmUgRVRYRF9DSEtPRkZfTUFTSyAweDA3ZjAwMDAwICAKKyNkZWZpbmUgRVRYRF9CMlYgMHgwMDA0MDAwMAorI2RlZmluZSBFVFhEX0RPQ0hFQ0tTVU0gMHgwMDA4MDAwMAorI2RlZmluZSBFVFhEX0NIS09GRl9NQVNLIDB4MDdmMDAwMDAKICNkZWZpbmUgRVRYRF9DSEtPRkZfU0hJRlQgMjAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEVUWERfRDBDTlRfTUFTSyAweDAwMDAwMDdmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLW1pcHMvYXNtL3NuL2tsZGlyLmggYi9saWJjL2tlcm5lbC9hcmNoLW1pcHMvYXNtL3NuL2tsZGlyLmgKaW5kZXggNmM2NjNjYS4uZWY0MTAxMyAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvYXJjaC1taXBzL2FzbS9zbi9rbGRpci5oCisrKyBiL2xpYmMva2VybmVsL2FyY2gtbWlwcy9hc20vc24va2xkaXIuaApAQCAtNzksNyArNzksNyBAQAogI2lmbmRlZiBfX0FTU0VNQkxZX18KIHR5cGVkZWYgc3RydWN0IGtsZGlyX2VudF9zIHsKICB1NjQgbWFnaWM7Ci0gb2ZmX3Qgb2Zmc2V0OworIF9fa2VybmVsX29mZl90IG9mZnNldDsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgbG9uZyBwb2ludGVyOwogIHNpemVfdCBzaXplOwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC1taXBzL2FzbS9zbi9zbjAvYWRkcnMuaCBiL2xpYmMva2VybmVsL2FyY2gtbWlwcy9hc20vc24vc24wL2FkZHJzLmgKaW5kZXggNWMwNTZlZC4uOGUyOTQxOSAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvYXJjaC1taXBzL2FzbS9zbi9zbjAvYWRkcnMuaAorKysgYi9saWJjL2tlcm5lbC9hcmNoLW1pcHMvYXNtL3NuL3NuMC9hZGRycy5oCkBAIC0xMTksMTUgKzExOSwxNSBAQAogI2RlZmluZSBJTzZEUFJPTV9TSVpFIDB4MjAwMDAwCiAjZGVmaW5lIE5PREVCVUdVTklYX0FERFIgUEhZU19UT19LMCgweDAwMDE5MDAwKQogI2RlZmluZSBERUJVR1VOSVhfQUREUiBQSFlTX1RPX0swKDB4MDAxMDAwMDApCi0jZGVmaW5lIElQMjdQUk9NX0lOVF9MQVVOQ0ggMTAgIAorI2RlZmluZSBJUDI3UFJPTV9JTlRfTEFVTkNIIDEwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBJUDI3UFJPTV9JTlRfTkVUVUFSVCAxMiAgCisjZGVmaW5lIElQMjdQUk9NX0lOVF9ORVRVQVJUIDEyCiAjZW5kaWYKICNkZWZpbmUgSVAyN1BST01fRUxTQ19TSEZUIDEwCiAjZGVmaW5lIElQMjdQUk9NX0VMU0NfU0laRSAoMSA8PCBJUDI3UFJPTV9FTFNDX1NIRlQpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBGUkVFTUVNX0JBU0UgUEhZU19UT19LMCgweDIwMDAwMDApCi0jZGVmaW5lIElPNlBST01fU1RBQ0tfU0hGVCAxNCAgCisjZGVmaW5lIElPNlBST01fU1RBQ0tfU0hGVCAxNAogI2RlZmluZSBJTzZQUk9NX1NUQUNLX1NJWkUgKDEgPDwgSU82UFJPTV9TVEFDS19TSEZUKQogI2RlZmluZSBJUDI3UFJPTV9FTlRSWSBQSFlTX1RPX0NPTVBBVEsxKDB4MWZjMDAwMDApCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwpAQCAtMTQyLDExICsxNDIsMTEgQEAKICNkZWZpbmUgSVAyN1BST01fV0FJVFNMQVZFIFBIWVNfVE9fQ09NUEFUSzEoMHgxZmMwMDA0MCkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIElQMjdQUk9NX1BPTExTTEFWRSBQSFlTX1RPX0NPTVBBVEsxKDB4MWZjMDAwNDgpCi0jZGVmaW5lIEtMX1VBUlRfQkFTRSBMT0NBTF9IVUJfQUREUihNRF9VUkVHMF8wKSAgCi0jZGVmaW5lIEtMX1VBUlRfQ01EIExPQ0FMX0hVQl9BRERSKE1EX1VSRUcwXzApICAKLSNkZWZpbmUgS0xfVUFSVF9EQVRBIExPQ0FMX0hVQl9BRERSKE1EX1VSRUcwXzEpICAKKyNkZWZpbmUgS0xfVUFSVF9CQVNFIExPQ0FMX0hVQl9BRERSKE1EX1VSRUcwXzApCisjZGVmaW5lIEtMX1VBUlRfQ01EIExPQ0FMX0hVQl9BRERSKE1EX1VSRUcwXzApCisjZGVmaW5lIEtMX1VBUlRfREFUQSBMT0NBTF9IVUJfQUREUihNRF9VUkVHMF8xKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgS0xfSTJDX1JFRyBNRF9VUkVHMF8wICAKKyNkZWZpbmUgS0xfSTJDX1JFRyBNRF9VUkVHMF8wCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogI2lmZGVmIEhVQl9FUlJfU1RTX1dBUgogI2RlZmluZSBDQUNIRV9FUlJfRUZSQU1FIDB4NDgwCkBAIC0xNTYsNyArMTU2LDcgQEAKICNlbmRpZgogI2RlZmluZSBDQUNIRV9FUlJfRUNDRlJBTUUgKENBQ0hFX0VSUl9FRlJBTUUgKyBFRl9TSVpFKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgQ0FDSEVfRVJSX1NQX1BUUiAoMHgxMDAwIC0gMzIpICAKKyNkZWZpbmUgQ0FDSEVfRVJSX1NQX1BUUiAoMHgxMDAwIC0gMzIpCiAjZGVmaW5lIENBQ0hFX0VSUl9JQkFTRV9QVFIgKDB4MTAwMCAtIDQwKQogI2RlZmluZSBDQUNIRV9FUlJfU1AgKENBQ0hFX0VSUl9TUF9QVFIgLSAxNikKICNkZWZpbmUgQ0FDSEVfRVJSX0FSRUFfU0laRSAoQVJDU19TUEJfT0ZGU0VUIC0gQ0FDSEVfRVJSX0VGUkFNRSkKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gtbWlwcy9hc20vc24vc24wL2h1YmlvLmggYi9saWJjL2tlcm5lbC9hcmNoLW1pcHMvYXNtL3NuL3NuMC9odWJpby5oCmluZGV4IGY1OTMyMzMuLmVhZGJlYTkgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2FyY2gtbWlwcy9hc20vc24vc24wL2h1YmlvLmgKKysrIGIvbGliYy9rZXJuZWwvYXJjaC1taXBzL2FzbS9zbi9zbjAvaHViaW8uaApAQCAtMTgsNDEgKzE4LDQxIEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX0FTTV9TR0lfU05fU04wX0hVQklPX0gKICNkZWZpbmUgX0FTTV9TR0lfU05fU04wX0hVQklPX0gKLSNkZWZpbmUgSUlPX1dJREdFVCBJSU9fV0lEICAKLSNkZWZpbmUgSUlPX1dJREdFVF9TVEFUIElJT19XU1RBVCAgCisjZGVmaW5lIElJT19XSURHRVQgSUlPX1dJRAorI2RlZmluZSBJSU9fV0lER0VUX1NUQVQgSUlPX1dTVEFUCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBJSU9fV0lER0VUX0NUUkwgSUlPX1dDUiAgCi0jZGVmaW5lIElJT19XSURHRVRfVE9VVCBJSU9fV1JUTyAgCi0jZGVmaW5lIElJT19XSURHRVRfRkxVU0ggSUlPX1dURlIgIAotI2RlZmluZSBJSU9fUFJPVEVDVCBJSU9fSUxBUFIgIAorI2RlZmluZSBJSU9fV0lER0VUX0NUUkwgSUlPX1dDUgorI2RlZmluZSBJSU9fV0lER0VUX1RPVVQgSUlPX1dSVE8KKyNkZWZpbmUgSUlPX1dJREdFVF9GTFVTSCBJSU9fV1RGUgorI2RlZmluZSBJSU9fUFJPVEVDVCBJSU9fSUxBUFIKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIElJT19QUk9URUNUX09WUlJEIElJT19JTEFQTyAgCi0jZGVmaW5lIElJT19PVVRXSURHRVRfQUNDRVNTIElJT19JT1dBICAKLSNkZWZpbmUgSUlPX0lOV0lER0VUX0FDQ0VTUyBJSU9fSUlXQSAgCi0jZGVmaW5lIElJT19JTkRFVl9FUlJfTUFTSyBJSU9fSUlERU0gIAorI2RlZmluZSBJSU9fUFJPVEVDVF9PVlJSRCBJSU9fSUxBUE8KKyNkZWZpbmUgSUlPX09VVFdJREdFVF9BQ0NFU1MgSUlPX0lPV0EKKyNkZWZpbmUgSUlPX0lOV0lER0VUX0FDQ0VTUyBJSU9fSUlXQQorI2RlZmluZSBJSU9fSU5ERVZfRVJSX01BU0sgSUlPX0lJREVNCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBJSU9fTExQX0NTUiBJSU9fSUxDU1IgIAotI2RlZmluZSBJSU9fTExQX0xPRyBJSU9fSUxMUiAgCi0jZGVmaW5lIElJT19YVEFMS0NDX1RPVVQgSUlPX0lYQ0MgIAotI2RlZmluZSBJSU9fWFRBTEtUVF9UT1VUIElJT19JWFRUICAKKyNkZWZpbmUgSUlPX0xMUF9DU1IgSUlPX0lMQ1NSCisjZGVmaW5lIElJT19MTFBfTE9HIElJT19JTExSCisjZGVmaW5lIElJT19YVEFMS0NDX1RPVVQgSUlPX0lYQ0MKKyNkZWZpbmUgSUlPX1hUQUxLVFRfVE9VVCBJSU9fSVhUVAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgSUlPX0lPX0VSUl9DTFIgSUlPX0lFQ0xSICAKLSNkZWZpbmUgSUlPX0JURV9DUkJfQ05UIElJT19JQkNOICAKKyNkZWZpbmUgSUlPX0lPX0VSUl9DTFIgSUlPX0lFQ0xSCisjZGVmaW5lIElJT19CVEVfQ1JCX0NOVCBJSU9fSUJDTgogI2RlZmluZSBJSU9fTExQX0NTUl9JU19VUCAweDAwMDAyMDAwCiAjZGVmaW5lIElJT19MTFBfQ1NSX0xMUF9TVEFUX01BU0sgMHgwMDAwMzAwMAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSUlPX0xMUF9DU1JfTExQX1NUQVRfU0hGVCAxMgotI2RlZmluZSBJSU9fUFJPVEVDVF9PVlJSRF9LRVkgMHg1MzQ3NDk3Mjc1NmM2NTczdWxsICAKLSNkZWZpbmUgSUlPX0JURV9TVEFUXzAgSUlPX0lCTFNfMCAgCi0jZGVmaW5lIElJT19CVEVfU1JDXzAgSUlPX0lCU0FfMCAgCisjZGVmaW5lIElJT19QUk9URUNUX09WUlJEX0tFWSAweDUzNDc0OTcyNzU2YzY1NzN1bGwKKyNkZWZpbmUgSUlPX0JURV9TVEFUXzAgSUlPX0lCTFNfMAorI2RlZmluZSBJSU9fQlRFX1NSQ18wIElJT19JQlNBXzAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIElJT19CVEVfREVTVF8wIElJT19JQkRBXzAgIAotI2RlZmluZSBJSU9fQlRFX0NUUkxfMCBJSU9fSUJDVF8wICAKLSNkZWZpbmUgSUlPX0JURV9OT1RJRllfMCBJSU9fSUJOQV8wICAKLSNkZWZpbmUgSUlPX0JURV9JTlRfMCBJSU9fSUJJQV8wICAKKyNkZWZpbmUgSUlPX0JURV9ERVNUXzAgSUlPX0lCREFfMAorI2RlZmluZSBJSU9fQlRFX0NUUkxfMCBJSU9fSUJDVF8wCisjZGVmaW5lIElJT19CVEVfTk9USUZZXzAgSUlPX0lCTkFfMAorI2RlZmluZSBJSU9fQlRFX0lOVF8wIElJT19JQklBXzAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIElJT19CVEVfT0ZGXzAgMCAgCi0jZGVmaW5lIElJT19CVEVfT0ZGXzEgSUlPX0lCTFNfMSAtIElJT19JQkxTXzAgIAorI2RlZmluZSBJSU9fQlRFX09GRl8wIDAKKyNkZWZpbmUgSUlPX0JURV9PRkZfMSBJSU9fSUJMU18xIC0gSUlPX0lCTFNfMAogI2RlZmluZSBCVEVPRkZfU1RBVCAwCiAjZGVmaW5lIEJURU9GRl9TUkMgKElJT19CVEVfU1JDXzAgLSBJSU9fQlRFX1NUQVRfMCkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCkBAIC02OCwyNyArNjgsMjcgQEAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIElJT19QRVJGX0NOVCAweDQzMDAwOAogI2RlZmluZSBJT19QRVJGX1NFVFMgMzIKLSNkZWZpbmUgSUlPX1dJRCAweDQwMDAwMCAgCi0jZGVmaW5lIElJT19XU1RBVCAweDQwMDAwOCAgCisjZGVmaW5lIElJT19XSUQgMHg0MDAwMDAKKyNkZWZpbmUgSUlPX1dTVEFUIDB4NDAwMDA4CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBJSU9fV0NSIDB4NDAwMDIwICAKLSNkZWZpbmUgSUlPX1dTVEFUX0VDUkFaWSAoMVVMTCA8PCAzMikgIAotI2RlZmluZSBJSU9fV1NUQVRfVFhSRVRSWSAoMVVMTCA8PCA5KSAgCisjZGVmaW5lIElJT19XQ1IgMHg0MDAwMjAKKyNkZWZpbmUgSUlPX1dTVEFUX0VDUkFaWSAoMVVMTCA8PCAzMikKKyNkZWZpbmUgSUlPX1dTVEFUX1RYUkVUUlkgKDFVTEwgPDwgOSkKICNkZWZpbmUgSUlPX1dTVEFUX1RYUkVUUllfTUFTSyAoMHg3RikKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIElJT19XU1RBVF9UWFJFVFJZX1NIRlQgKDE2KQogI2RlZmluZSBJSU9fV1NUQVRfVFhSRVRSWV9DTlQodykgKCgodykgPj4gSUlPX1dTVEFUX1RYUkVUUllfU0hGVCkgJiAgIElJT19XU1RBVF9UWFJFVFJZX01BU0spCi0jZGVmaW5lIElJT19JTEFQUiAweDQwMDEwMCAgCi0jZGVmaW5lIElJT19JTEFQTyAweDQwMDEwOCAgCisjZGVmaW5lIElJT19JTEFQUiAweDQwMDEwMAorI2RlZmluZSBJSU9fSUxBUE8gMHg0MDAxMDgKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIElJT19JT1dBIDB4NDAwMTEwICAKLSNkZWZpbmUgSUlPX0lJV0EgMHg0MDAxMTggIAotI2RlZmluZSBJSU9fSUlERU0gMHg0MDAxMjAgIAotI2RlZmluZSBJSU9fSUxDU1IgMHg0MDAxMjggIAorI2RlZmluZSBJSU9fSU9XQSAweDQwMDExMAorI2RlZmluZSBJSU9fSUlXQSAweDQwMDExOAorI2RlZmluZSBJSU9fSUlERU0gMHg0MDAxMjAKKyNkZWZpbmUgSUlPX0lMQ1NSIDB4NDAwMTI4CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBJSU9fSUxMUiAweDQwMDEzMCAgCi0jZGVmaW5lIElJT19JSURTUiAweDQwMDEzOCAgCi0jZGVmaW5lIElJT19JSUJVU0VSUiAweDE0MDAyMDggIAorI2RlZmluZSBJSU9fSUxMUiAweDQwMDEzMAorI2RlZmluZSBJSU9fSUlEU1IgMHg0MDAxMzgKKyNkZWZpbmUgSUlPX0lJQlVTRVJSIDB4MTQwMDIwOAogI2RlZmluZSBJSU9fSUlEU1JfU0VOVF9TSElGVCAyOAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSUlPX0lJRFNSX1NFTlRfTUFTSyAweDEwMDAwMDAwCkBAIC05OSwyMSArOTksMjEgQEAKICNkZWZpbmUgSUlPX0lJRFNSX05PREVfTUFTSyAweDAwMDBmZjAwCiAjZGVmaW5lIElJT19JSURTUl9MVkxfU0hJRlQgMAogI2RlZmluZSBJSU9fSUlEU1JfTFZMX01BU0sgMHgwMDAwMDAzZgotI2RlZmluZSBJSU9fSUdGWF8wIDB4NDAwMTQwICAKKyNkZWZpbmUgSUlPX0lHRlhfMCAweDQwMDE0MAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgSUlPX0lHRlhfMSAweDQwMDE0OCAgCi0jZGVmaW5lIElJT19JR0ZYX1dfTlVNX0JJVFMgNCAgCisjZGVmaW5lIElJT19JR0ZYXzEgMHg0MDAxNDgKKyNkZWZpbmUgSUlPX0lHRlhfV19OVU1fQklUUyA0CiAjZGVmaW5lIElJT19JR0ZYX1dfTlVNX01BU0sgKCgxPDxJSU9fSUdGWF9XX05VTV9CSVRTKS0xKQogI2RlZmluZSBJSU9fSUdGWF9XX05VTV9TSElGVCAwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBJSU9fSUdGWF9OX05VTV9CSVRTIDkgIAorI2RlZmluZSBJSU9fSUdGWF9OX05VTV9CSVRTIDkKICNkZWZpbmUgSUlPX0lHRlhfTl9OVU1fTUFTSyAoKDE8PElJT19JR0ZYX05fTlVNX0JJVFMpLTEpCiAjZGVmaW5lIElJT19JR0ZYX05fTlVNX1NISUZUIDQKLSNkZWZpbmUgSUlPX0lHRlhfUF9OVU1fQklUUyAxICAKKyNkZWZpbmUgSUlPX0lHRlhfUF9OVU1fQklUUyAxCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJSU9fSUdGWF9QX05VTV9NQVNLICgoMTw8SUlPX0lHRlhfUF9OVU1fQklUUyktMSkKICNkZWZpbmUgSUlPX0lHRlhfUF9OVU1fU0hJRlQgMTYKLSNkZWZpbmUgSUlPX0lHRlhfVkxEX0JJVFMgMSAgCisjZGVmaW5lIElJT19JR0ZYX1ZMRF9CSVRTIDEKICNkZWZpbmUgSUlPX0lHRlhfVkxEX01BU0sgKCgxPDxJSU9fSUdGWF9WTERfQklUUyktMSkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIElJT19JR0ZYX1ZMRF9TSElGVCAyMApAQCAtMTM2LDcgKzEzNiw3IEBACiAjZGVmaW5lIElJT19TQ1JBVENIX0JJVDBfOSAweDAwMDAwMDAwMDAwMDEwMDAKICNkZWZpbmUgSUlPX1NDUkFUQ0hfQklUMF9SIDB4MDAwMDAwMDAwMDAwMGZmZgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgSUlPX05VTV9JVFRFUyA3ICAKKyNkZWZpbmUgSUlPX05VTV9JVFRFUyA3CiAjZGVmaW5lIEhVQl9OVU1fQklHX1dJTkRPVyBJSU9fTlVNX0lUVEVTIC0gMQogI2RlZmluZSBTV0lOMF9CSUdXSU4gSFVCX05VTV9CSUdfV0lORE9XCiAjZGVmaW5lIElMQ1NSX1dBUk1fUkVTRVQgMHgxMDAKQEAgLTI3Miw0NiArMjcyLDQ2IEBACiAjZGVmaW5lIElJT19MTFBfU05fTUFYIDB4ZmZmZgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSUlPX05VTV9JUFJCUyAoOSkKLSNkZWZpbmUgSUlPX0lPUFJCXzAgMHg0MDAxOTggIAotI2RlZmluZSBJSU9fSU9QUkJfOCAweDQwMDFhMCAgCi0jZGVmaW5lIElJT19JT1BSQl85IDB4NDAwMWE4ICAKKyNkZWZpbmUgSUlPX0lPUFJCXzAgMHg0MDAxOTgKKyNkZWZpbmUgSUlPX0lPUFJCXzggMHg0MDAxYTAKKyNkZWZpbmUgSUlPX0lPUFJCXzkgMHg0MDAxYTgKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIElJT19JT1BSQl9BIDB4NDAwMWIwICAKLSNkZWZpbmUgSUlPX0lPUFJCX0IgMHg0MDAxYjggIAotI2RlZmluZSBJSU9fSU9QUkJfQyAweDQwMDFjMCAgCi0jZGVmaW5lIElJT19JT1BSQl9EIDB4NDAwMWM4ICAKKyNkZWZpbmUgSUlPX0lPUFJCX0EgMHg0MDAxYjAKKyNkZWZpbmUgSUlPX0lPUFJCX0IgMHg0MDAxYjgKKyNkZWZpbmUgSUlPX0lPUFJCX0MgMHg0MDAxYzAKKyNkZWZpbmUgSUlPX0lPUFJCX0QgMHg0MDAxYzgKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIElJT19JT1BSQl9FIDB4NDAwMWQwICAKLSNkZWZpbmUgSUlPX0lPUFJCX0YgMHg0MDAxZDggIAotI2RlZmluZSBJSU9fSVhDQyAweDQwMDFlMCAgCisjZGVmaW5lIElJT19JT1BSQl9FIDB4NDAwMWQwCisjZGVmaW5lIElJT19JT1BSQl9GIDB4NDAwMWQ4CisjZGVmaW5lIElJT19JWENDIDB4NDAwMWUwCiAjZGVmaW5lIElJT19JWFRDQyBJSU9fSVhDQwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgSUlPX0lNRU0gMHg0MDAxZTggIAotI2RlZmluZSBJSU9fSVhUVCAweDQwMDFmMCAgCi0jZGVmaW5lIElJT19JRUNMUiAweDQwMDFmOCAgCi0jZGVmaW5lIElJT19JQkNOIDB4NDAwMjAwICAKKyNkZWZpbmUgSUlPX0lNRU0gMHg0MDAxZTgKKyNkZWZpbmUgSUlPX0lYVFQgMHg0MDAxZjAKKyNkZWZpbmUgSUlPX0lFQ0xSIDB4NDAwMWY4CisjZGVmaW5lIElJT19JQkNOIDB4NDAwMjAwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBJSU9fSU1FTV9XMEVTRCAweDEgIAotI2RlZmluZSBJSU9fSU1FTV9CMEVTRCAoMSA8PCA0KSAgCi0jZGVmaW5lIElJT19JTUVNX0IxRVNEICgxIDw8IDgpICAKLSNkZWZpbmUgSUlPX0lQQ0EgMHg0MDAzMDAgIAorI2RlZmluZSBJSU9fSU1FTV9XMEVTRCAweDEKKyNkZWZpbmUgSUlPX0lNRU1fQjBFU0QgKDEgPDwgNCkKKyNkZWZpbmUgSUlPX0lNRU1fQjFFU0QgKDEgPDwgOCkKKyNkZWZpbmUgSUlPX0lQQ0EgMHg0MDAzMDAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIElJT19OVU1fUFJURVMgOCAgCi0jZGVmaW5lIElJT19QUlRFXzAgMHg0MDAzMDggIAorI2RlZmluZSBJSU9fTlVNX1BSVEVTIDgKKyNkZWZpbmUgSUlPX1BSVEVfMCAweDQwMDMwOAogI2RlZmluZSBJSU9fUFJURShfeCkgKElJT19QUlRFXzAgKyAoOCAqIChfeCkpKQotI2RlZmluZSBJSU9fV0lEUFJURSh4KSBJSU9fUFJURSgoKHgpIC0gOCkpICAKKyNkZWZpbmUgSUlPX1dJRFBSVEUoeCkgSUlPX1BSVEUoKCh4KSAtIDgpKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgSUlPX0lQRFIgMHg0MDAzODggIAotI2RlZmluZSBJSU9fSUNEUiAweDQwMDM5MCAgCi0jZGVmaW5lIElJT19JRkRSIDB4NDAwMzk4ICAKLSNkZWZpbmUgSUlPX0lJQVAgMHg0MDAzYTAgIAorI2RlZmluZSBJSU9fSVBEUiAweDQwMDM4OAorI2RlZmluZSBJSU9fSUNEUiAweDQwMDM5MAorI2RlZmluZSBJSU9fSUZEUiAweDQwMDM5OAorI2RlZmluZSBJSU9fSUlBUCAweDQwMDNhMAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSUlPX0lNTVIgSUlPX0lJQVAKLSNkZWZpbmUgSUlPX0lDTVIgMHg0MDAzYTggIAotI2RlZmluZSBJSU9fSUNDUiAweDQwMDNiMCAgCi0jZGVmaW5lIElJT19JQ1RPIDB4NDAwM2I4ICAKKyNkZWZpbmUgSUlPX0lDTVIgMHg0MDAzYTgKKyNkZWZpbmUgSUlPX0lDQ1IgMHg0MDAzYjAKKyNkZWZpbmUgSUlPX0lDVE8gMHg0MDAzYjgKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIElJT19JQ1RQIDB4NDAwM2MwICAKKyNkZWZpbmUgSUlPX0lDVFAgMHg0MDAzYzAKICNkZWZpbmUgSUlPX0lDTVJfUENfVkxEX1NIRlQgMzYKICNkZWZpbmUgSUlPX0lDTVJfUENfVkxEX01BU0sgKDB4N2ZmZlVMIDw8IElJT19JQ01SX1BDX1ZMRF9TSEZUKQogI2RlZmluZSBJSU9fSUNNUl9DUkJfVkxEX1NIRlQgMjAKQEAgLTMzNCwxNiArMzM0LDE2IEBACiAjZGVmaW5lIElJT19JQ0NSX1BFTkRJTkcgKDB4MTAwMDApCiAjZGVmaW5lIElJT19JQ0NSX0NNRF9NQVNLICgweEZGKQogI2RlZmluZSBJSU9fSUNDUl9DTURfU0hGVCAoNykKLSNkZWZpbmUgSUlPX0lDQ1JfQ01EX05PUCAoMHgwKSAgCisjZGVmaW5lIElJT19JQ0NSX0NNRF9OT1AgKDB4MCkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIElJT19JQ0NSX0NNRF9XQUtFICgweDEwMCkgIAotI2RlZmluZSBJSU9fSUNDUl9DTURfVElNRU9VVCAoMHgyMDApICAKLSNkZWZpbmUgSUlPX0lDQ1JfQ01EX0VKRUNUICgweDQwMCkgIAorI2RlZmluZSBJSU9fSUNDUl9DTURfV0FLRSAoMHgxMDApCisjZGVmaW5lIElJT19JQ0NSX0NNRF9USU1FT1VUICgweDIwMCkKKyNkZWZpbmUgSUlPX0lDQ1JfQ01EX0VKRUNUICgweDQwMCkKICNkZWZpbmUgSUlPX0lDQ1JfQ01EX0ZMVVNIICgweDgwMCkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIElJT19OVU1fQ1JCUyAxNSAgCi0jZGVmaW5lIElJT19OVU1fTk9STUFMX0NSQlMgMTIgIAotI2RlZmluZSBJSU9fTlVNX1BDX0NSQlMgNCAgCisjZGVmaW5lIElJT19OVU1fQ1JCUyAxNQorI2RlZmluZSBJSU9fTlVNX05PUk1BTF9DUkJTIDEyCisjZGVmaW5lIElJT19OVU1fUENfQ1JCUyA0CiAjZGVmaW5lIElJT19JQ1JCX09GRlNFVCA4CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJSU9fSUNSQl8wIDB4NDAwNDAwCkBAIC00MDEsMTcgKzQwMSwxNyBAQAogI2RlZmluZSBJQ1JCTl9BX0VSUl9NQVNLIDB4M2ZmCiAjZW5kaWYKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIElJT19JQ1JCX0FERFJfU0hGVCAyICAKLSNkZWZpbmUgSUlPX0lDUkJfRUNPREVfREVSUiAwICAKLSNkZWZpbmUgSUlPX0lDUkJfRUNPREVfUEVSUiAxICAKLSNkZWZpbmUgSUlPX0lDUkJfRUNPREVfV0VSUiAyICAKKyNkZWZpbmUgSUlPX0lDUkJfQUREUl9TSEZUIDIKKyNkZWZpbmUgSUlPX0lDUkJfRUNPREVfREVSUiAwCisjZGVmaW5lIElJT19JQ1JCX0VDT0RFX1BFUlIgMQorI2RlZmluZSBJSU9fSUNSQl9FQ09ERV9XRVJSIDIKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIElJT19JQ1JCX0VDT0RFX0FFUlIgMyAgCi0jZGVmaW5lIElJT19JQ1JCX0VDT0RFX1BXRVJSIDQgIAotI2RlZmluZSBJSU9fSUNSQl9FQ09ERV9QUkVSUiA1ICAKLSNkZWZpbmUgSUlPX0lDUkJfRUNPREVfVE9VVCA2ICAKKyNkZWZpbmUgSUlPX0lDUkJfRUNPREVfQUVSUiAzCisjZGVmaW5lIElJT19JQ1JCX0VDT0RFX1BXRVJSIDQKKyNkZWZpbmUgSUlPX0lDUkJfRUNPREVfUFJFUlIgNQorI2RlZmluZSBJSU9fSUNSQl9FQ09ERV9UT1VUIDYKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIElJT19JQ1JCX0VDT0RFX1hURVJSIDcgIAorI2RlZmluZSBJSU9fSUNSQl9FQ09ERV9YVEVSUiA3CiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogdHlwZWRlZiB1bmlvbiBpY3JiYl91IHsKICB1NjQgcmVnX3ZhbHVlOwpAQCAtNDk2LDQ0ICs0OTYsNDQgQEAKICNkZWZpbmUgYl9pbml0aWF0b3IgaWNyYmJfZmllbGRfcy5pbml0aWF0b3IKICNlbmRpZgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgSUlPX0lDUkJfWFRTSVpFX0RXIDAgIAotI2RlZmluZSBJSU9fSUNSQl9YVFNJWkVfMzIgMSAgCi0jZGVmaW5lIElJT19JQ1JCX1hUU0laRV8xMjggMiAgCi0jZGVmaW5lIElJT19JQ1JCX1BST0MwIDAgIAorI2RlZmluZSBJSU9fSUNSQl9YVFNJWkVfRFcgMAorI2RlZmluZSBJSU9fSUNSQl9YVFNJWkVfMzIgMQorI2RlZmluZSBJSU9fSUNSQl9YVFNJWkVfMTI4IDIKKyNkZWZpbmUgSUlPX0lDUkJfUFJPQzAgMAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgSUlPX0lDUkJfUFJPQzEgMSAgCi0jZGVmaW5lIElJT19JQ1JCX0dCX1JFUSAyICAKLSNkZWZpbmUgSUlPX0lDUkJfSU9fUkVRIDMgIAotI2RlZmluZSBJSU9fSUNSQl9JTVNHVF9YVEFMSyAwICAKKyNkZWZpbmUgSUlPX0lDUkJfUFJPQzEgMQorI2RlZmluZSBJSU9fSUNSQl9HQl9SRVEgMgorI2RlZmluZSBJSU9fSUNSQl9JT19SRVEgMworI2RlZmluZSBJSU9fSUNSQl9JTVNHVF9YVEFMSyAwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBJSU9fSUNSQl9JTVNHVF9CVEUgMSAgCi0jZGVmaW5lIElJT19JQ1JCX0lNU0dUX1NOME5FVCAyICAKLSNkZWZpbmUgSUlPX0lDUkJfSU1TR1RfQ1JCIDMgIAotI2RlZmluZSBJSU9fSUNSQl9JTklUX1hUQUxLIDAgIAorI2RlZmluZSBJSU9fSUNSQl9JTVNHVF9CVEUgMQorI2RlZmluZSBJSU9fSUNSQl9JTVNHVF9TTjBORVQgMgorI2RlZmluZSBJSU9fSUNSQl9JTVNHVF9DUkIgMworI2RlZmluZSBJSU9fSUNSQl9JTklUX1hUQUxLIDAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIElJT19JQ1JCX0lOSVRfQlRFMCAweDEgIAotI2RlZmluZSBJSU9fSUNSQl9JTklUX1NOME5FVCAweDIgIAotI2RlZmluZSBJSU9fSUNSQl9JTklUX0NSQiAweDMgIAotI2RlZmluZSBJSU9fSUNSQl9JTklUX0JURTEgMHg1ICAKKyNkZWZpbmUgSUlPX0lDUkJfSU5JVF9CVEUwIDB4MQorI2RlZmluZSBJSU9fSUNSQl9JTklUX1NOME5FVCAweDIKKyNkZWZpbmUgSUlPX0lDUkJfSU5JVF9DUkIgMHgzCisjZGVmaW5lIElJT19JQ1JCX0lOSVRfQlRFMSAweDUKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIElJT19JQ1JCX1JFUV9EV1JEIDAgIAotI2RlZmluZSBJSU9fSUNSQl9SRVFfUUNMUkQgMSAgCi0jZGVmaW5lIElJT19JQ1JCX1JFUV9CTEtSRCAyICAKLSNkZWZpbmUgSUlPX0lDUkJfUkVRX1JTSFUgNiAgCisjZGVmaW5lIElJT19JQ1JCX1JFUV9EV1JEIDAKKyNkZWZpbmUgSUlPX0lDUkJfUkVRX1FDTFJEIDEKKyNkZWZpbmUgSUlPX0lDUkJfUkVRX0JMS1JEIDIKKyNkZWZpbmUgSUlPX0lDUkJfUkVRX1JTSFUgNgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgSUlPX0lDUkJfUkVRX1JFWFUgNyAgCi0jZGVmaW5lIElJT19JQ1JCX1JFUV9SREVYIDggIAotI2RlZmluZSBJSU9fSUNSQl9SRVFfV0lOQyA5ICAKLSNkZWZpbmUgSUlPX0lDUkJfUkVRX0JXSU5WIDEwICAKKyNkZWZpbmUgSUlPX0lDUkJfUkVRX1JFWFUgNworI2RlZmluZSBJSU9fSUNSQl9SRVFfUkRFWCA4CisjZGVmaW5lIElJT19JQ1JCX1JFUV9XSU5DIDkKKyNkZWZpbmUgSUlPX0lDUkJfUkVRX0JXSU5WIDEwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBJSU9fSUNSQl9SRVFfUElPUkQgMTEgIAotI2RlZmluZSBJSU9fSUNSQl9SRVFfUElPV1IgMTIgIAotI2RlZmluZSBJSU9fSUNSQl9SRVFfUFJETSAxMyAgCi0jZGVmaW5lIElJT19JQ1JCX1JFUV9QV1JNIDE0ICAKKyNkZWZpbmUgSUlPX0lDUkJfUkVRX1BJT1JEIDExCisjZGVmaW5lIElJT19JQ1JCX1JFUV9QSU9XUiAxMgorI2RlZmluZSBJSU9fSUNSQl9SRVFfUFJETSAxMworI2RlZmluZSBJSU9fSUNSQl9SRVFfUFdSTSAxNAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgSUlPX0lDUkJfUkVRX1BUUFdSIDE1ICAKLSNkZWZpbmUgSUlPX0lDUkJfUkVRX1dCIDE2ICAKLSNkZWZpbmUgSUlPX0lDUkJfUkVRX0RFWCAxNyAgCisjZGVmaW5lIElJT19JQ1JCX1JFUV9QVFBXUiAxNQorI2RlZmluZSBJSU9fSUNSQl9SRVFfV0IgMTYKKyNkZWZpbmUgSUlPX0lDUkJfUkVRX0RFWCAxNwogI2lmbmRlZiBfX0FTU0VNQkxZX18KIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB0eXBlZGVmIHVuaW9uIGljcmJjX3MgewpAQCAtNTU4LDggKzU1OCw4IEBACiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBjX3ByaXBzYyBpY3JiY19maWVsZF9zLnByaXBzYwogI2RlZmluZSBjX2J0ZW9wIGljcmJjX2ZpZWxkX3MuYnRlb3AKLSNkZWZpbmUgY19idGVhZGRyIGljcmJjX2ZpZWxkX3MucHVzaF9iZSAgCi0jZGVmaW5lIGNfYmVuYWJsZSBpY3JiY19maWVsZF9zLnB1c2hfYmUgIAorI2RlZmluZSBjX2J0ZWFkZHIgaWNyYmNfZmllbGRfcy5wdXNoX2JlCisjZGVmaW5lIGNfYmVuYWJsZSBpY3JiY19maWVsZF9zLnB1c2hfYmUKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIGNfc3VwcGwgaWNyYmNfZmllbGRfcy5zdXBwbAogI2RlZmluZSBjX2JhcnJvcCBpY3JiY19maWVsZF9zLmJhcnJvcApAQCAtNTk4LDQxICs1OTgsNDEgQEAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9IGh1YmlpX2lmZHJfdDsKICNlbmRpZgotI2RlZmluZSBJSU9fSUJMU18wIDB4NDEwMDAwICAKLSNkZWZpbmUgSUlPX0lCU0FfMCAweDQxMDAwOCAgCisjZGVmaW5lIElJT19JQkxTXzAgMHg0MTAwMDAKKyNkZWZpbmUgSUlPX0lCU0FfMCAweDQxMDAwOAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgSUlPX0lCREFfMCAweDQxMDAxMCAgCi0jZGVmaW5lIElJT19JQkNUXzAgMHg0MTAwMTggIAotI2RlZmluZSBJSU9fSUJOQV8wIDB4NDEwMDIwICAKKyNkZWZpbmUgSUlPX0lCREFfMCAweDQxMDAxMAorI2RlZmluZSBJSU9fSUJDVF8wIDB4NDEwMDE4CisjZGVmaW5lIElJT19JQk5BXzAgMHg0MTAwMjAKICNkZWZpbmUgSUlPX0lCTlJfMCBJSU9fSUJOQV8wCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBJSU9fSUJJQV8wIDB4NDEwMDI4ICAKLSNkZWZpbmUgSUlPX0lCTFNfMSAweDQyMDAwMCAgCi0jZGVmaW5lIElJT19JQlNBXzEgMHg0MjAwMDggIAotI2RlZmluZSBJSU9fSUJEQV8xIDB4NDIwMDEwICAKKyNkZWZpbmUgSUlPX0lCSUFfMCAweDQxMDAyOAorI2RlZmluZSBJSU9fSUJMU18xIDB4NDIwMDAwCisjZGVmaW5lIElJT19JQlNBXzEgMHg0MjAwMDgKKyNkZWZpbmUgSUlPX0lCREFfMSAweDQyMDAxMAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgSUlPX0lCQ1RfMSAweDQyMDAxOCAgCi0jZGVmaW5lIElJT19JQk5BXzEgMHg0MjAwMjAgIAorI2RlZmluZSBJSU9fSUJDVF8xIDB4NDIwMDE4CisjZGVmaW5lIElJT19JQk5BXzEgMHg0MjAwMjAKICNkZWZpbmUgSUlPX0lCTlJfMSBJSU9fSUJOQV8xCi0jZGVmaW5lIElJT19JQklBXzEgMHg0MjAwMjggIAorI2RlZmluZSBJSU9fSUJJQV8xIDB4NDIwMDI4CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBJSU9fSVBDUiAweDQzMDAwMCAgCi0jZGVmaW5lIElJT19JUFBSIDB4NDMwMDA4ICAKLSNkZWZpbmUgSUVDTFJfQlRFMSAoMSA8PCAxOCkgIAotI2RlZmluZSBJRUNMUl9CVEUwICgxIDw8IDE3KSAgCisjZGVmaW5lIElJT19JUENSIDB4NDMwMDAwCisjZGVmaW5lIElJT19JUFBSIDB4NDMwMDA4CisjZGVmaW5lIElFQ0xSX0JURTEgKDEgPDwgMTgpCisjZGVmaW5lIElFQ0xSX0JURTAgKDEgPDwgMTcpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBJRUNMUl9DUkFaWSAoMSA8PCAxNikgIAotI2RlZmluZSBJRUNMUl9QUkJfRiAoMSA8PCAxNSkgIAotI2RlZmluZSBJRUNMUl9QUkJfRSAoMSA8PCAxNCkgIAotI2RlZmluZSBJRUNMUl9QUkJfRCAoMSA8PCAxMykgIAorI2RlZmluZSBJRUNMUl9DUkFaWSAoMSA8PCAxNikKKyNkZWZpbmUgSUVDTFJfUFJCX0YgKDEgPDwgMTUpCisjZGVmaW5lIElFQ0xSX1BSQl9FICgxIDw8IDE0KQorI2RlZmluZSBJRUNMUl9QUkJfRCAoMSA8PCAxMykKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIElFQ0xSX1BSQl9DICgxIDw8IDEyKSAgCi0jZGVmaW5lIElFQ0xSX1BSQl9CICgxIDw8IDExKSAgCi0jZGVmaW5lIElFQ0xSX1BSQl9BICgxIDw8IDEwKSAgCi0jZGVmaW5lIElFQ0xSX1BSQl85ICgxIDw8IDkpICAKKyNkZWZpbmUgSUVDTFJfUFJCX0MgKDEgPDwgMTIpCisjZGVmaW5lIElFQ0xSX1BSQl9CICgxIDw8IDExKQorI2RlZmluZSBJRUNMUl9QUkJfQSAoMSA8PCAxMCkKKyNkZWZpbmUgSUVDTFJfUFJCXzkgKDEgPDwgOSkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIElFQ0xSX1BSQl84ICgxIDw8IDgpICAKLSNkZWZpbmUgSUVDTFJfUFJCXzAgKDEgPDwgMCkgIAorI2RlZmluZSBJRUNMUl9QUkJfOCAoMSA8PCA4KQorI2RlZmluZSBJRUNMUl9QUkJfMCAoMSA8PCAwKQogI2lmbmRlZiBfX0FTU0VNQkxZX18KIHR5cGVkZWYgdW5pb24gaXBydGVfYSB7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwpAQCAtNjkyLDkgKzY5Miw5IEBACiAjZW5kaWYKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIElQUkJfTU9ERV9OT1JNQUwgKDApCi0jZGVmaW5lIElQUkJfTU9ERV9DT0xMRUNUX0EgKDEpICAKLSNkZWZpbmUgSVBSQl9NT0RFX1NFUlZJQ0VfQSAoMikgIAotI2RlZmluZSBJUFJCX01PREVfU0VSVklDRV9CICgzKSAgCisjZGVmaW5lIElQUkJfTU9ERV9DT0xMRUNUX0EgKDEpCisjZGVmaW5lIElQUkJfTU9ERV9TRVJWSUNFX0EgKDIpCisjZGVmaW5lIElQUkJfTU9ERV9TRVJWSUNFX0IgKDMpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2lmbmRlZiBfX0FTU0VNQkxZX18KIHR5cGVkZWYgdW5pb24gaWNyYnBfYSB7CkBAIC03ODEsNyArNzgxLDcgQEAKICNkZWZpbmUgTUFYX0hVQlNfUEVSX1hCT1cgMgogI2RlZmluZSBJSU9fV0NSX1dJRF9HRVQobmFzaWQpIChSRU1PVEVfSFVCX0wobmFzaWQsIElJSV9XQ1IpICYgMHhmKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgSUlPX1dTVF9FUlJPUl9NQVNLIChVSU5UNjRfQ0FTVCAxIDw8IDMyKSAgCisjZGVmaW5lIElJT19XU1RfRVJST1JfTUFTSyAoVUlOVDY0X0NBU1QgMSA8PCAzMikKICNkZWZpbmUgSFVCSUlfWEJPV19DUkVESVQgMwogI2RlZmluZSBIVUJJSV9YQk9XX1JFVjJfQ1JFRElUIDQKICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC1taXBzL2FzbS9zbi9zbjAvaHVibWQuaCBiL2xpYmMva2VybmVsL2FyY2gtbWlwcy9hc20vc24vc24wL2h1Ym1kLmgKaW5kZXggOWYwODkzZi4uOTgyNTAwOSAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvYXJjaC1taXBzL2FzbS9zbi9zbjAvaHVibWQuaAorKysgYi9saWJjL2tlcm5lbC9hcmNoLW1pcHMvYXNtL3NuL3NuMC9odWJtZC5oCkBAIC0xOCwxMDYgKzE4LDEwNiBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9BU01fU05fU04wX0hVQk1EX0gKICNkZWZpbmUgX0FTTV9TTl9TTjBfSFVCTURfSAotI2RlZmluZSBDQUNIRV9TTElORV9TSVpFIDEyOCAgCisjZGVmaW5lIENBQ0hFX1NMSU5FX1NJWkUgMTI4CiAjZGVmaW5lIE1BWF9SRUdJT05TIDY0CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBNRF9QQUdFX1NJWkUgNDA5NiAgCi0jZGVmaW5lIE1EX1BBR0VfTlVNX1NIRlQgMTIgIAorI2RlZmluZSBNRF9QQUdFX1NJWkUgNDA5NgorI2RlZmluZSBNRF9QQUdFX05VTV9TSEZUIDEyCiAjZGVmaW5lIE1EX0JBU0UgMHgyMDAwMDAKICNkZWZpbmUgTURfQkFTRV9QRVJGIDB4MjEwMDAwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNRF9CQVNFX0pVTksgMHgyMjAwMDAKLSNkZWZpbmUgTURfSU9fUFJPVEVDVCAweDIwMDAwMCAgCi0jZGVmaW5lIE1EX0lPX1BST1RfT1ZSUkQgMHgyMDAwMDggIAotI2RlZmluZSBNRF9IU1BFQ19QUk9URUNUIDB4MjAwMDEwICAKKyNkZWZpbmUgTURfSU9fUFJPVEVDVCAweDIwMDAwMAorI2RlZmluZSBNRF9JT19QUk9UX09WUlJEIDB4MjAwMDA4CisjZGVmaW5lIE1EX0hTUEVDX1BST1RFQ1QgMHgyMDAwMTAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIE1EX01FTU9SWV9DT05GSUcgMHgyMDAwMTggIAotI2RlZmluZSBNRF9SRUZSRVNIX0NPTlRST0wgMHgyMDAwMjAgIAotI2RlZmluZSBNRF9GQU5ET1BfQ0FDX1NUQVQgMHgyMDAwMjggIAotI2RlZmluZSBNRF9NSUdfRElGRl9USFJFU0ggMHgyMDAwMzAgIAorI2RlZmluZSBNRF9NRU1PUllfQ09ORklHIDB4MjAwMDE4CisjZGVmaW5lIE1EX1JFRlJFU0hfQ09OVFJPTCAweDIwMDAyMAorI2RlZmluZSBNRF9GQU5ET1BfQ0FDX1NUQVQgMHgyMDAwMjgKKyNkZWZpbmUgTURfTUlHX0RJRkZfVEhSRVNIIDB4MjAwMDMwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBNRF9NSUdfVkFMVUVfVEhSRVNIIDB4MjAwMDM4ICAKLSNkZWZpbmUgTURfTUlHX0NBTkRJREFURSAweDIwMDA0MCAgCi0jZGVmaW5lIE1EX01JR19DQU5ESURBVEVfQ0xSIDB4MjAwMDQ4ICAKLSNkZWZpbmUgTURfRElSX0VSUk9SIDB4MjAwMDUwICAKKyNkZWZpbmUgTURfTUlHX1ZBTFVFX1RIUkVTSCAweDIwMDAzOAorI2RlZmluZSBNRF9NSUdfQ0FORElEQVRFIDB4MjAwMDQwCisjZGVmaW5lIE1EX01JR19DQU5ESURBVEVfQ0xSIDB4MjAwMDQ4CisjZGVmaW5lIE1EX0RJUl9FUlJPUiAweDIwMDA1MAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgTURfRElSX0VSUk9SX0NMUiAweDIwMDA1OCAgCi0jZGVmaW5lIE1EX1BST1RPQ09MX0VSUk9SIDB4MjAwMDYwICAKLSNkZWZpbmUgTURfUFJPVE9DT0xfRVJST1JfQ0xSIDB4MjAwMDY4ICAKLSNkZWZpbmUgTURfTUVNX0VSUk9SIDB4MjAwMDcwICAKKyNkZWZpbmUgTURfRElSX0VSUk9SX0NMUiAweDIwMDA1OAorI2RlZmluZSBNRF9QUk9UT0NPTF9FUlJPUiAweDIwMDA2MAorI2RlZmluZSBNRF9QUk9UT0NPTF9FUlJPUl9DTFIgMHgyMDAwNjgKKyNkZWZpbmUgTURfTUVNX0VSUk9SIDB4MjAwMDcwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBNRF9NRU1fRVJST1JfQ0xSIDB4MjAwMDc4ICAKLSNkZWZpbmUgTURfTUlTQ19FUlJPUiAweDIwMDA4MCAgCi0jZGVmaW5lIE1EX01JU0NfRVJST1JfQ0xSIDB4MjAwMDg4ICAKLSNkZWZpbmUgTURfTUVNX0RJTU1fSU5JVCAweDIwMDA5MCAgCisjZGVmaW5lIE1EX01FTV9FUlJPUl9DTFIgMHgyMDAwNzgKKyNkZWZpbmUgTURfTUlTQ19FUlJPUiAweDIwMDA4MAorI2RlZmluZSBNRF9NSVNDX0VSUk9SX0NMUiAweDIwMDA4OAorI2RlZmluZSBNRF9NRU1fRElNTV9JTklUIDB4MjAwMDkwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBNRF9ESVJfRElNTV9JTklUIDB4MjAwMDk4ICAKLSNkZWZpbmUgTURfTU9RX1NJWkUgMHgyMDAwYTAgIAotI2RlZmluZSBNRF9NTEFOX0NUTCAweDIwMDBhOCAgCi0jZGVmaW5lIE1EX1BFUkZfU0VMIDB4MjEwMDAwICAKKyNkZWZpbmUgTURfRElSX0RJTU1fSU5JVCAweDIwMDA5OAorI2RlZmluZSBNRF9NT1FfU0laRSAweDIwMDBhMAorI2RlZmluZSBNRF9NTEFOX0NUTCAweDIwMDBhOAorI2RlZmluZSBNRF9QRVJGX1NFTCAweDIxMDAwMAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgTURfUEVSRl9DTlQwIDB4MjEwMDEwICAKLSNkZWZpbmUgTURfUEVSRl9DTlQxIDB4MjEwMDE4ICAKLSNkZWZpbmUgTURfUEVSRl9DTlQyIDB4MjEwMDIwICAKLSNkZWZpbmUgTURfUEVSRl9DTlQzIDB4MjEwMDI4ICAKKyNkZWZpbmUgTURfUEVSRl9DTlQwIDB4MjEwMDEwCisjZGVmaW5lIE1EX1BFUkZfQ05UMSAweDIxMDAxOAorI2RlZmluZSBNRF9QRVJGX0NOVDIgMHgyMTAwMjAKKyNkZWZpbmUgTURfUEVSRl9DTlQzIDB4MjEwMDI4CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBNRF9QRVJGX0NOVDQgMHgyMTAwMzAgIAotI2RlZmluZSBNRF9QRVJGX0NOVDUgMHgyMTAwMzggIAotI2RlZmluZSBNRF9VUkVHMF8wIDB4MjIwMDAwICAKLSNkZWZpbmUgTURfVVJFRzBfMSAweDIyMDAwOCAgCisjZGVmaW5lIE1EX1BFUkZfQ05UNCAweDIxMDAzMAorI2RlZmluZSBNRF9QRVJGX0NOVDUgMHgyMTAwMzgKKyNkZWZpbmUgTURfVVJFRzBfMCAweDIyMDAwMAorI2RlZmluZSBNRF9VUkVHMF8xIDB4MjIwMDA4CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBNRF9VUkVHMF8yIDB4MjIwMDEwICAKLSNkZWZpbmUgTURfVVJFRzBfMyAweDIyMDAxOCAgCi0jZGVmaW5lIE1EX1VSRUcwXzQgMHgyMjAwMjAgIAotI2RlZmluZSBNRF9VUkVHMF81IDB4MjIwMDI4ICAKKyNkZWZpbmUgTURfVVJFRzBfMiAweDIyMDAxMAorI2RlZmluZSBNRF9VUkVHMF8zIDB4MjIwMDE4CisjZGVmaW5lIE1EX1VSRUcwXzQgMHgyMjAwMjAKKyNkZWZpbmUgTURfVVJFRzBfNSAweDIyMDAyOAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgTURfVVJFRzBfNiAweDIyMDAzMCAgCi0jZGVmaW5lIE1EX1VSRUcwXzcgMHgyMjAwMzggIAotI2RlZmluZSBNRF9TTE9USURfVVNUQVQgMHgyMjAwNDggIAotI2RlZmluZSBNRF9MRUQwIDB4MjIwMDUwICAKKyNkZWZpbmUgTURfVVJFRzBfNiAweDIyMDAzMAorI2RlZmluZSBNRF9VUkVHMF83IDB4MjIwMDM4CisjZGVmaW5lIE1EX1NMT1RJRF9VU1RBVCAweDIyMDA0OAorI2RlZmluZSBNRF9MRUQwIDB4MjIwMDUwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBNRF9MRUQxIDB4MjIwMDU4ICAKLSNkZWZpbmUgTURfVVJFRzFfMCAweDIyMDA4MCAgCi0jZGVmaW5lIE1EX1VSRUcxXzEgMHgyMjAwODggIAotI2RlZmluZSBNRF9VUkVHMV8yIDB4MjIwMDkwICAKKyNkZWZpbmUgTURfTEVEMSAweDIyMDA1OAorI2RlZmluZSBNRF9VUkVHMV8wIDB4MjIwMDgwCisjZGVmaW5lIE1EX1VSRUcxXzEgMHgyMjAwODgKKyNkZWZpbmUgTURfVVJFRzFfMiAweDIyMDA5MAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgTURfVVJFRzFfMyAweDIyMDA5OCAgCi0jZGVmaW5lIE1EX1VSRUcxXzQgMHgyMjAwYTAgIAotI2RlZmluZSBNRF9VUkVHMV81IDB4MjIwMGE4ICAKLSNkZWZpbmUgTURfVVJFRzFfNiAweDIyMDBiMCAgCisjZGVmaW5lIE1EX1VSRUcxXzMgMHgyMjAwOTgKKyNkZWZpbmUgTURfVVJFRzFfNCAweDIyMDBhMAorI2RlZmluZSBNRF9VUkVHMV81IDB4MjIwMGE4CisjZGVmaW5lIE1EX1VSRUcxXzYgMHgyMjAwYjAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIE1EX1VSRUcxXzcgMHgyMjAwYjggIAotI2RlZmluZSBNRF9VUkVHMV84IDB4MjIwMGMwICAKLSNkZWZpbmUgTURfVVJFRzFfOSAweDIyMDBjOCAgCi0jZGVmaW5lIE1EX1VSRUcxXzEwIDB4MjIwMGQwICAKKyNkZWZpbmUgTURfVVJFRzFfNyAweDIyMDBiOAorI2RlZmluZSBNRF9VUkVHMV84IDB4MjIwMGMwCisjZGVmaW5lIE1EX1VSRUcxXzkgMHgyMjAwYzgKKyNkZWZpbmUgTURfVVJFRzFfMTAgMHgyMjAwZDAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIE1EX1VSRUcxXzExIDB4MjIwMGQ4ICAKLSNkZWZpbmUgTURfVVJFRzFfMTIgMHgyMjAwZTAgIAotI2RlZmluZSBNRF9VUkVHMV8xMyAweDIyMDBlOCAgCi0jZGVmaW5lIE1EX1VSRUcxXzE0IDB4MjIwMGYwICAKKyNkZWZpbmUgTURfVVJFRzFfMTEgMHgyMjAwZDgKKyNkZWZpbmUgTURfVVJFRzFfMTIgMHgyMjAwZTAKKyNkZWZpbmUgTURfVVJFRzFfMTMgMHgyMjAwZTgKKyNkZWZpbmUgTURfVVJFRzFfMTQgMHgyMjAwZjAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIE1EX1VSRUcxXzE1IDB4MjIwMGY4ICAKLSNkZWZpbmUgTURfTUVNX0JBTktTIDggIAotI2RlZmluZSBNRF9TSVpFX0VNUFRZIDAgIAorI2RlZmluZSBNRF9VUkVHMV8xNSAweDIyMDBmOAorI2RlZmluZSBNRF9NRU1fQkFOS1MgOAorI2RlZmluZSBNRF9TSVpFX0VNUFRZIDAKICNkZWZpbmUgTURfU0laRV84TUIgMQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTURfU0laRV8xNk1CIDIKLSNkZWZpbmUgTURfU0laRV8zMk1CIDMgIAotI2RlZmluZSBNRF9TSVpFXzY0TUIgNCAgCi0jZGVmaW5lIE1EX1NJWkVfMTI4TUIgNSAgCisjZGVmaW5lIE1EX1NJWkVfMzJNQiAzCisjZGVmaW5lIE1EX1NJWkVfNjRNQiA0CisjZGVmaW5lIE1EX1NJWkVfMTI4TUIgNQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTURfU0laRV8yNTZNQiA2Ci0jZGVmaW5lIE1EX1NJWkVfNTEyTUIgNyAgCisjZGVmaW5lIE1EX1NJWkVfNTEyTUIgNwogI2RlZmluZSBNRF9TSVpFXzFHQiA4CiAjZGVmaW5lIE1EX1NJWkVfMkdCIDkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1EX1NJWkVfNEdCIDEwCiAjZGVmaW5lIE1EX1NJWkVfQllURVMoc2l6ZSkgKChzaXplKSA9PSAwID8gMCA6IDB4NDAwMDAwTCA8PCAoc2l6ZSkpCiAjZGVmaW5lIE1EX1NJWkVfTUJZVEVTKHNpemUpICgoc2l6ZSkgPT0gMCA/IDAgOiA0IDw8IChzaXplKSkKLSNkZWZpbmUgTU1DX0ZQUk9NX0NZQ19TSEZUIDQ5ICAKKyNkZWZpbmUgTU1DX0ZQUk9NX0NZQ19TSEZUIDQ5CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBNTUNfRlBST01fQ1lDX01BU0sgKFVJTlQ2NF9DQVNUIDMxIDw8IDQ5KSAgCi0jZGVmaW5lIE1NQ19GUFJPTV9XUl9TSEZUIDQ0ICAKKyNkZWZpbmUgTU1DX0ZQUk9NX0NZQ19NQVNLIChVSU5UNjRfQ0FTVCAzMSA8PCA0OSkKKyNkZWZpbmUgTU1DX0ZQUk9NX1dSX1NIRlQgNDQKICNkZWZpbmUgTU1DX0ZQUk9NX1dSX01BU0sgKFVJTlQ2NF9DQVNUIDMxIDw8IDQ0KQogI2RlZmluZSBNTUNfVUNUTFJfQ1lDX1NIRlQgMzkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCkBAIC0xOTEsMjcgKzE5MSwyNyBAQAogI2RlZmluZSBNTEFOX1JEX0RBVEEgKFVJTlQ2NF9DQVNUIDB4MDEpCiAjZGVmaW5lIE1MQU5fUkVTRVRfREVGQVVMVFMgKFVJTlQ2NF9DQVNUIDB4MzEgPDwgTUxBTl9QSEkxX1NIRlQgfCAgIFVJTlQ2NF9DQVNUIDB4MzEgPDwgTUxBTl9QSEkwX1NIRlQpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBNU1VfQ09SRUNMS19UU1RfU0hGVCA3ICAKKyNkZWZpbmUgTVNVX0NPUkVDTEtfVFNUX1NIRlQgNwogI2RlZmluZSBNU1VfQ09SRUNMS19UU1RfTUFTSyAoVUlOVDY0X0NBU1QgMSA8PCA3KQogI2RlZmluZSBNU1VfQ09SRUNMS19UU1QgKFVJTlQ2NF9DQVNUIDEgPDwgNykKLSNkZWZpbmUgTVNVX0NPUkVDTEtfU0hGVCA2ICAKKyNkZWZpbmUgTVNVX0NPUkVDTEtfU0hGVCA2CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNU1VfQ09SRUNMS19NQVNLIChVSU5UNjRfQ0FTVCAxIDw8IDYpCiAjZGVmaW5lIE1TVV9DT1JFQ0xLIChVSU5UNjRfQ0FTVCAxIDw8IDYpCi0jZGVmaW5lIE1TVV9ORVRTWU5DX1NIRlQgNSAgCisjZGVmaW5lIE1TVV9ORVRTWU5DX1NIRlQgNQogI2RlZmluZSBNU1VfTkVUU1lOQ19NQVNLIChVSU5UNjRfQ0FTVCAxIDw8IDUpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNU1VfTkVUU1lOQyAoVUlOVDY0X0NBU1QgMSA8PCA1KQotI2RlZmluZSBNU1VfRlBST01SRFlfU0hGVCA0ICAKKyNkZWZpbmUgTVNVX0ZQUk9NUkRZX1NIRlQgNAogI2RlZmluZSBNU1VfRlBST01SRFlfTUFTSyAoVUlOVDY0X0NBU1QgMSA8PCA0KQogI2RlZmluZSBNU1VfRlBST01SRFkgKFVJTlQ2NF9DQVNUIDEgPDwgNCkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIE1TVV9JMkNJTlRSX1NIRlQgMyAgCisjZGVmaW5lIE1TVV9JMkNJTlRSX1NIRlQgMwogI2RlZmluZSBNU1VfSTJDSU5UUl9NQVNLIChVSU5UNjRfQ0FTVCAxIDw8IDMpCiAjZGVmaW5lIE1TVV9JMkNJTlRSIChVSU5UNjRfQ0FTVCAxIDw8IDMpCiAjZGVmaW5lIE1TVV9TTE9USURfTUFTSyAweGZmCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBNU1VfU04wX1NMT1RJRF9TSEZUIDAgIAorI2RlZmluZSBNU1VfU04wX1NMT1RJRF9TSEZUIDAKICNkZWZpbmUgTVNVX1NOMF9TTE9USURfTUFTSyAoVUlOVDY0X0NBU1QgNykKICNkZWZpbmUgTVNVX1NOMDBfU0xPVElEX1NIRlQgNwogI2RlZmluZSBNU1VfU04wMF9TTE9USURfTUFTSyAoVUlOVDY0X0NBU1QgMHg4MCkKQEAgLTIzOSw1NSArMjM5LDU1IEBACiAjZGVmaW5lIE1EX01JR19DQU5ESURBVEVfTk9ERUlEX01BU0sgKFVJTlQ2NF9DQVNUIDB4MWZmIDw8IDIwKQogI2RlZmluZSBNRF9NSUdfQ0FORElEQVRFX05PREVJRF9TSEZUIDIwCiAjZGVmaW5lIE1EX01JR19DQU5ESURBVEVfQUREUl9NQVNLIChVSU5UNjRfQ0FTVCAweDNmZmZmKQotI2RlZmluZSBNRF9NSUdfQ0FORElEQVRFX0FERFJfU0hGVCAxNCAgCisjZGVmaW5lIE1EX01JR19DQU5ESURBVEVfQUREUl9TSEZUIDE0CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBNRF9CQU5LX1NIRlQgMjkgIAorI2RlZmluZSBNRF9CQU5LX1NIRlQgMjkKICNkZWZpbmUgTURfQkFOS19NQVNLIChVSU5UNjRfQ0FTVCA3IDw8IDI5KQotI2RlZmluZSBNRF9CQU5LX1NJWkUgKFVJTlQ2NF9DQVNUIDEgPDwgTURfQkFOS19TSEZUKSAgCisjZGVmaW5lIE1EX0JBTktfU0laRSAoVUlOVDY0X0NBU1QgMSA8PCBNRF9CQU5LX1NIRlQpCiAjZGVmaW5lIE1EX0JBTktfT0ZGU0VUKF9iKSAoVUlOVDY0X0NBU1QgKF9iKSA8PCBNRF9CQU5LX1NIRlQpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBNRF9ESVJfU0hBUkVEIChVSU5UNjRfQ0FTVCAweDApICAKLSNkZWZpbmUgTURfRElSX1BPSVNPTkVEIChVSU5UNjRfQ0FTVCAweDEpICAKLSNkZWZpbmUgTURfRElSX0VYQ0xVU0lWRSAoVUlOVDY0X0NBU1QgMHgyKSAgCi0jZGVmaW5lIE1EX0RJUl9CVVNZX1NIQVJFRCAoVUlOVDY0X0NBU1QgMHgzKSAgCisjZGVmaW5lIE1EX0RJUl9TSEFSRUQgKFVJTlQ2NF9DQVNUIDB4MCkKKyNkZWZpbmUgTURfRElSX1BPSVNPTkVEIChVSU5UNjRfQ0FTVCAweDEpCisjZGVmaW5lIE1EX0RJUl9FWENMVVNJVkUgKFVJTlQ2NF9DQVNUIDB4MikKKyNkZWZpbmUgTURfRElSX0JVU1lfU0hBUkVEIChVSU5UNjRfQ0FTVCAweDMpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBNRF9ESVJfQlVTWV9FWENMIChVSU5UNjRfQ0FTVCAweDQpICAKLSNkZWZpbmUgTURfRElSX1dBSVQgKFVJTlQ2NF9DQVNUIDB4NSkgIAotI2RlZmluZSBNRF9ESVJfVU5PV05FRCAoVUlOVDY0X0NBU1QgMHg3KSAgCisjZGVmaW5lIE1EX0RJUl9CVVNZX0VYQ0wgKFVJTlQ2NF9DQVNUIDB4NCkKKyNkZWZpbmUgTURfRElSX1dBSVQgKFVJTlQ2NF9DQVNUIDB4NSkKKyNkZWZpbmUgTURfRElSX1VOT1dORUQgKFVJTlQ2NF9DQVNUIDB4NykKICNkZWZpbmUgTURfRElSX0ZPUkNFX0VDQyAoVUlOVDY0X0NBU1QgMSA8PCA2MykKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIE1EX1BESVJfTUFTSyAweGZmZmZmZmZmZmZmZiAgCi0jZGVmaW5lIE1EX1BESVJfRUNDX1NIRlQgMCAgCisjZGVmaW5lIE1EX1BESVJfTUFTSyAweGZmZmZmZmZmZmZmZgorI2RlZmluZSBNRF9QRElSX0VDQ19TSEZUIDAKICNkZWZpbmUgTURfUERJUl9FQ0NfTUFTSyAweDdmCi0jZGVmaW5lIE1EX1BESVJfUFJJT19TSEZUIDggIAorI2RlZmluZSBNRF9QRElSX1BSSU9fU0hGVCA4CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNRF9QRElSX1BSSU9fTUFTSyAoMHhmIDw8IDgpCi0jZGVmaW5lIE1EX1BESVJfQVhfU0hGVCA3ICAKKyNkZWZpbmUgTURfUERJUl9BWF9TSEZUIDcKICNkZWZpbmUgTURfUERJUl9BWF9NQVNLICgxIDw8IDcpCiAjZGVmaW5lIE1EX1BESVJfQVggKDEgPDwgNykKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIE1EX1BESVJfRklORV9TSEZUIDEyICAKKyNkZWZpbmUgTURfUERJUl9GSU5FX1NIRlQgMTIKICNkZWZpbmUgTURfUERJUl9GSU5FX01BU0sgKDEgPDwgMTIpCiAjZGVmaW5lIE1EX1BESVJfRklORSAoMSA8PCAxMikKLSNkZWZpbmUgTURfUERJUl9PQ1RfU0hGVCAxMyAgCisjZGVmaW5lIE1EX1BESVJfT0NUX1NIRlQgMTMKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1EX1BESVJfT0NUX01BU0sgKDcgPDwgMTMpCi0jZGVmaW5lIE1EX1BESVJfU1RBVEVfU0hGVCAxMyAgCisjZGVmaW5lIE1EX1BESVJfU1RBVEVfU0hGVCAxMwogI2RlZmluZSBNRF9QRElSX1NUQVRFX01BU0sgKDcgPDwgMTMpCi0jZGVmaW5lIE1EX1BESVJfT05FQ05UX1NIRlQgMTYgIAorI2RlZmluZSBNRF9QRElSX09ORUNOVF9TSEZUIDE2CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNRF9QRElSX09ORUNOVF9NQVNLICgweDNmIDw8IDE2KQotI2RlZmluZSBNRF9QRElSX1BUUl9TSEZUIDIyICAKKyNkZWZpbmUgTURfUERJUl9QVFJfU0hGVCAyMgogI2RlZmluZSBNRF9QRElSX1BUUl9NQVNLIChVSU5UNjRfQ0FTVCAweDdmZiA8PCAyMikKLSNkZWZpbmUgTURfUERJUl9WRUNNU0JfU0hGVCAyMiAgCisjZGVmaW5lIE1EX1BESVJfVkVDTVNCX1NIRlQgMjIKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1EX1BESVJfVkVDTVNCX0JJVE1BU0sgMHgzZmZmZmZmCiAjZGVmaW5lIE1EX1BESVJfVkVDTVNCX0JJVFNIRlQgMjcKICNkZWZpbmUgTURfUERJUl9WRUNNU0JfTUFTSyAoVUlOVDY0X0NBU1QgTURfUERJUl9WRUNNU0JfQklUTUFTSyA8PCAyMikKLSNkZWZpbmUgTURfUERJUl9DV09GRl9TSEZUIDcgIAorI2RlZmluZSBNRF9QRElSX0NXT0ZGX1NIRlQgNwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTURfUERJUl9DV09GRl9NQVNLICg3IDw8IDcpCi0jZGVmaW5lIE1EX1BESVJfVkVDTFNCX1NIRlQgMTAgIAorI2RlZmluZSBNRF9QRElSX1ZFQ0xTQl9TSEZUIDEwCiAjZGVmaW5lIE1EX1BESVJfVkVDTFNCX0JJVE1BU0sgKFVJTlQ2NF9DQVNUIDB4M2ZmZmZmZmZmZikKICNkZWZpbmUgTURfUERJUl9WRUNMU0JfQklUU0hGVCAwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwpAQCAtMjk2LDI5ICsyOTYsMjkgQEAKICNkZWZpbmUgTURfUERJUl9JTklUX0hJIDAKICNkZWZpbmUgTURfUERJUl9JTklUX1BST1QgKE1EX1BST1RfUlcgPDwgTURfUFBST1RfSU9fU0hGVCB8ICAgTURfUFJPVF9SVyA8PCBNRF9QUFJPVF9TSEZUKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgTURfU0RJUl9NQVNLIDB4ZmZmZiAgCi0jZGVmaW5lIE1EX1NESVJfRUNDX1NIRlQgMCAgCisjZGVmaW5lIE1EX1NESVJfTUFTSyAweGZmZmYKKyNkZWZpbmUgTURfU0RJUl9FQ0NfU0hGVCAwCiAjZGVmaW5lIE1EX1NESVJfRUNDX01BU0sgMHgxZgotI2RlZmluZSBNRF9TRElSX1BSSU9fU0hGVCA2ICAKKyNkZWZpbmUgTURfU0RJUl9QUklPX1NIRlQgNgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTURfU0RJUl9QUklPX01BU0sgKDEgPDwgNikKLSNkZWZpbmUgTURfU0RJUl9BWF9TSEZUIDUgIAorI2RlZmluZSBNRF9TRElSX0FYX1NIRlQgNQogI2RlZmluZSBNRF9TRElSX0FYX01BU0sgKDEgPDwgNSkKICNkZWZpbmUgTURfU0RJUl9BWCAoMSA8PCA1KQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgTURfU0RJUl9TVEFURV9TSEZUIDcgIAorI2RlZmluZSBNRF9TRElSX1NUQVRFX1NIRlQgNwogI2RlZmluZSBNRF9TRElSX1NUQVRFX01BU0sgKDcgPDwgNykKLSNkZWZpbmUgTURfU0RJUl9QVFJfU0hGVCAxMCAgCisjZGVmaW5lIE1EX1NESVJfUFRSX1NIRlQgMTAKICNkZWZpbmUgTURfU0RJUl9QVFJfTUFTSyAoMHgzZiA8PCAxMCkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIE1EX1NESVJfQ1dPRkZfU0hGVCA1ICAKKyNkZWZpbmUgTURfU0RJUl9DV09GRl9TSEZUIDUKICNkZWZpbmUgTURfU0RJUl9DV09GRl9NQVNLICg3IDw8IDUpCi0jZGVmaW5lIE1EX1NESVJfVkVDTVNCX1NIRlQgMTEgIAorI2RlZmluZSBNRF9TRElSX1ZFQ01TQl9TSEZUIDExCiAjZGVmaW5lIE1EX1NESVJfVkVDTVNCX0JJVE1BU0sgMHgxZgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTURfU0RJUl9WRUNNU0JfQklUU0hGVCA3CiAjZGVmaW5lIE1EX1NESVJfVkVDTVNCX01BU0sgKE1EX1NESVJfVkVDTVNCX0JJVE1BU0sgPDwgMTEpCi0jZGVmaW5lIE1EX1NESVJfVkVDTFNCX1NIRlQgNSAgCisjZGVmaW5lIE1EX1NESVJfVkVDTFNCX1NIRlQgNQogI2RlZmluZSBNRF9TRElSX1ZFQ0xTQl9CSVRNQVNLIDB4N2ZmCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNRF9TRElSX1ZFQ0xTQl9CSVRTSEZUIDAKQEAgLTMzMiwyMyArMzMyLDIzIEBACiAjZGVmaW5lIE1EX1BST1RfTk8gKFVJTlQ2NF9DQVNUIDB4MCkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1EX1BST1RfQkFEIChVSU5UNjRfQ0FTVCAweDUpCi0jZGVmaW5lIE1EX1BQUk9UX1NIRlQgMCAgCisjZGVmaW5lIE1EX1BQUk9UX1NIRlQgMAogI2RlZmluZSBNRF9QUFJPVF9NQVNLIDcKLSNkZWZpbmUgTURfUFBST1RfTUlHTURfU0hGVCAzICAKKyNkZWZpbmUgTURfUFBST1RfTUlHTURfU0hGVCAzCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNRF9QUFJPVF9NSUdNRF9NQVNLICgzIDw8IDMpCi0jZGVmaW5lIE1EX1BQUk9UX1JFRkNOVF9TSEZUIDUgIAorI2RlZmluZSBNRF9QUFJPVF9SRUZDTlRfU0hGVCA1CiAjZGVmaW5lIE1EX1BQUk9UX1JFRkNOVF9XSURUSCAweDdmZmZmCiAjZGVmaW5lIE1EX1BQUk9UX1JFRkNOVF9NQVNLIChNRF9QUFJPVF9SRUZDTlRfV0lEVEggPDwgNSkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIE1EX1BQUk9UX0lPX1NIRlQgNDUgIAorI2RlZmluZSBNRF9QUFJPVF9JT19TSEZUIDQ1CiAjZGVmaW5lIE1EX1BQUk9UX0lPX01BU0sgKFVJTlQ2NF9DQVNUIDcgPDwgNDUpCi0jZGVmaW5lIE1EX1NQUk9UX1NIRlQgMCAgCisjZGVmaW5lIE1EX1NQUk9UX1NIRlQgMAogI2RlZmluZSBNRF9TUFJPVF9NQVNLIDcKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIE1EX1NQUk9UX01JR01EX1NIRlQgMyAgCisjZGVmaW5lIE1EX1NQUk9UX01JR01EX1NIRlQgMwogI2RlZmluZSBNRF9TUFJPVF9NSUdNRF9NQVNLICgzIDw8IDMpCi0jZGVmaW5lIE1EX1NQUk9UX1JFRkNOVF9TSEZUIDUgIAorI2RlZmluZSBNRF9TUFJPVF9SRUZDTlRfU0hGVCA1CiAjZGVmaW5lIE1EX1NQUk9UX1JFRkNOVF9XSURUSCAweDdmZgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTURfU1BST1RfUkVGQ05UX01BU0sgKE1EX1NQUk9UX1JFRkNOVF9XSURUSCA8PCA1KQpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC1taXBzL2FzbS9zbi9zbjAvaHVibmkuaCBiL2xpYmMva2VybmVsL2FyY2gtbWlwcy9hc20vc24vc24wL2h1Ym5pLmgKaW5kZXggY2IzNjU4ZC4uOGQzMzBmMSAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvYXJjaC1taXBzL2FzbS9zbi9zbjAvaHVibmkuaAorKysgYi9saWJjL2tlcm5lbC9hcmNoLW1pcHMvYXNtL3NuL3NuMC9odWJuaS5oCkBAIC0yNCw0NyArMjQsNDcgQEAKICNlbmRpZgogI2RlZmluZSBOSV9CQVNFIDB4NjAwMDAwCiAjZGVmaW5lIE5JX0JBU0VfVEFCTEVTIDB4NjMwMDAwCi0jZGVmaW5lIE5JX1NUQVRVU19SRVZfSUQgMHg2MDAwMDAgIAorI2RlZmluZSBOSV9TVEFUVVNfUkVWX0lEIDB4NjAwMDAwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBOSV9QT1JUX1JFU0VUIDB4NjAwMDA4ICAKLSNkZWZpbmUgTklfUFJPVEVDVElPTiAweDYwMDAxMCAgCi0jZGVmaW5lIE5JX0dMT0JBTF9QQVJNUyAweDYwMDAxOCAgCi0jZGVmaW5lIE5JX1NDUkFUQ0hfUkVHMCAweDYwMDEwMCAgCisjZGVmaW5lIE5JX1BPUlRfUkVTRVQgMHg2MDAwMDgKKyNkZWZpbmUgTklfUFJPVEVDVElPTiAweDYwMDAxMAorI2RlZmluZSBOSV9HTE9CQUxfUEFSTVMgMHg2MDAwMTgKKyNkZWZpbmUgTklfU0NSQVRDSF9SRUcwIDB4NjAwMTAwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBOSV9TQ1JBVENIX1JFRzEgMHg2MDAxMDggIAotI2RlZmluZSBOSV9ESUFHX1BBUk1TIDB4NjAwMTEwICAKLSNkZWZpbmUgTklfVkVDVE9SX1BBUk1TIDB4NjAwMjAwICAKLSNkZWZpbmUgTklfVkVDVE9SIDB4NjAwMjA4ICAKKyNkZWZpbmUgTklfU0NSQVRDSF9SRUcxIDB4NjAwMTA4CisjZGVmaW5lIE5JX0RJQUdfUEFSTVMgMHg2MDAxMTAKKyNkZWZpbmUgTklfVkVDVE9SX1BBUk1TIDB4NjAwMjAwCisjZGVmaW5lIE5JX1ZFQ1RPUiAweDYwMDIwOAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgTklfVkVDVE9SX0RBVEEgMHg2MDAyMTAgIAotI2RlZmluZSBOSV9WRUNUT1JfU1RBVFVTIDB4NjAwMzAwICAKLSNkZWZpbmUgTklfUkVUVVJOX1ZFQ1RPUiAweDYwMDMwOCAgCi0jZGVmaW5lIE5JX1ZFQ1RPUl9SRUFEX0RBVEEgMHg2MDAzMTAgIAorI2RlZmluZSBOSV9WRUNUT1JfREFUQSAweDYwMDIxMAorI2RlZmluZSBOSV9WRUNUT1JfU1RBVFVTIDB4NjAwMzAwCisjZGVmaW5lIE5JX1JFVFVSTl9WRUNUT1IgMHg2MDAzMDgKKyNkZWZpbmUgTklfVkVDVE9SX1JFQURfREFUQSAweDYwMDMxMAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgTklfVkVDVE9SX0NMRUFSIDB4NjAwMzgwICAKLSNkZWZpbmUgTklfSU9fUFJPVEVDVCAweDYwMDQwMCAgCi0jZGVmaW5lIE5JX0lPX1BST1RfT1ZSUkQgMHg2MDA0MDggIAotI2RlZmluZSBOSV9BR0VfQ1BVMF9NRU1PUlkgMHg2MDA1MDAgIAorI2RlZmluZSBOSV9WRUNUT1JfQ0xFQVIgMHg2MDAzODAKKyNkZWZpbmUgTklfSU9fUFJPVEVDVCAweDYwMDQwMAorI2RlZmluZSBOSV9JT19QUk9UX09WUlJEIDB4NjAwNDA4CisjZGVmaW5lIE5JX0FHRV9DUFUwX01FTU9SWSAweDYwMDUwMAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgTklfQUdFX0NQVTBfUElPIDB4NjAwNTA4ICAKLSNkZWZpbmUgTklfQUdFX0NQVTFfTUVNT1JZIDB4NjAwNTEwICAKLSNkZWZpbmUgTklfQUdFX0NQVTFfUElPIDB4NjAwNTE4ICAKLSNkZWZpbmUgTklfQUdFX0dCUl9NRU1PUlkgMHg2MDA1MjAgIAorI2RlZmluZSBOSV9BR0VfQ1BVMF9QSU8gMHg2MDA1MDgKKyNkZWZpbmUgTklfQUdFX0NQVTFfTUVNT1JZIDB4NjAwNTEwCisjZGVmaW5lIE5JX0FHRV9DUFUxX1BJTyAweDYwMDUxOAorI2RlZmluZSBOSV9BR0VfR0JSX01FTU9SWSAweDYwMDUyMAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgTklfQUdFX0dCUl9QSU8gMHg2MDA1MjggIAotI2RlZmluZSBOSV9BR0VfSU9fTUVNT1JZIDB4NjAwNTMwICAKLSNkZWZpbmUgTklfQUdFX0lPX1BJTyAweDYwMDUzOCAgCisjZGVmaW5lIE5JX0FHRV9HQlJfUElPIDB4NjAwNTI4CisjZGVmaW5lIE5JX0FHRV9JT19NRU1PUlkgMHg2MDA1MzAKKyNkZWZpbmUgTklfQUdFX0lPX1BJTyAweDYwMDUzOAogI2RlZmluZSBOSV9BR0VfUkVHX01JTiBOSV9BR0VfQ1BVMF9NRU1PUlkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE5JX0FHRV9SRUdfTUFYIE5JX0FHRV9JT19QSU8KLSNkZWZpbmUgTklfUE9SVF9QQVJNUyAweDYwODAwMCAgCi0jZGVmaW5lIE5JX1BPUlRfRVJST1IgMHg2MDgwMDggIAotI2RlZmluZSBOSV9QT1JUX0VSUk9SX0NMRUFSIDB4NjA4MDg4ICAKKyNkZWZpbmUgTklfUE9SVF9QQVJNUyAweDYwODAwMAorI2RlZmluZSBOSV9QT1JUX0VSUk9SIDB4NjA4MDA4CisjZGVmaW5lIE5JX1BPUlRfRVJST1JfQ0xFQVIgMHg2MDgwODgKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIE5JX01FVEFfVEFCTEUwIDB4NjM4MDAwICAKKyNkZWZpbmUgTklfTUVUQV9UQUJMRTAgMHg2MzgwMDAKICNkZWZpbmUgTklfTUVUQV9UQUJMRShfeCkgKE5JX01FVEFfVEFCTEUwICsgKDggKiAoX3gpKSkKICNkZWZpbmUgTklfTUVUQV9FTlRSSUVTIDMyCi0jZGVmaW5lIE5JX0xPQ0FMX1RBQkxFMCAweDYzODEwMCAgCisjZGVmaW5lIE5JX0xPQ0FMX1RBQkxFMCAweDYzODEwMAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTklfTE9DQUxfVEFCTEUoX3gpIChOSV9MT0NBTF9UQUJMRTAgKyAoOCAqIChfeCkpKQogI2RlZmluZSBOSV9MT0NBTF9FTlRSSUVTIDE2CkBAIC03Myw1NSArNzMsNTUgQEAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE5TUklfTElOS1VQX1NIRlQgMjkKICNkZWZpbmUgTlNSSV9MSU5LVVBfTUFTSyAoVUlOVDY0X0NBU1QgMHgxIDw8IDI5KQotI2RlZmluZSBOU1JJX0RPV05SRUFTT05fU0hGVCAyOCAgCi0jZGVmaW5lIE5TUklfRE9XTlJFQVNPTl9NQVNLIChVSU5UNjRfQ0FTVCAweDEgPDwgMjgpICAKKyNkZWZpbmUgTlNSSV9ET1dOUkVBU09OX1NIRlQgMjgKKyNkZWZpbmUgTlNSSV9ET1dOUkVBU09OX01BU0sgKFVJTlQ2NF9DQVNUIDB4MSA8PCAyOCkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE5TUklfTU9SRU5PREVTX1NIRlQgMTgKLSNkZWZpbmUgTlNSSV9NT1JFTk9ERVNfTUFTSyAoVUlOVDY0X0NBU1QgMSA8PCAxOCkgIAorI2RlZmluZSBOU1JJX01PUkVOT0RFU19NQVNLIChVSU5UNjRfQ0FTVCAxIDw8IDE4KQogI2RlZmluZSBNT1JFX01FTU9SWSAwCiAjZGVmaW5lIE1PUkVfTk9ERVMgMQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTlNSSV9SRUdJT05TSVpFX1NIRlQgMTcKLSNkZWZpbmUgTlNSSV9SRUdJT05TSVpFX01BU0sgKFVJTlQ2NF9DQVNUIDEgPDwgMTcpICAKKyNkZWZpbmUgTlNSSV9SRUdJT05TSVpFX01BU0sgKFVJTlQ2NF9DQVNUIDEgPDwgMTcpCiAjZGVmaW5lIFJFR0lPTlNJWkVfRklORSAxCiAjZGVmaW5lIFJFR0lPTlNJWkVfQ09BUlNFIDAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE5TUklfTk9ERUlEX1NIRlQgOAotI2RlZmluZSBOU1JJX05PREVJRF9NQVNLIChVSU5UNjRfQ0FTVCAweDFmZiA8PCA4KSAKKyNkZWZpbmUgTlNSSV9OT0RFSURfTUFTSyAoVUlOVDY0X0NBU1QgMHgxZmYgPDwgOCkKICNkZWZpbmUgTlNSSV9SRVZfU0hGVCA0Ci0jZGVmaW5lIE5TUklfUkVWX01BU0sgKFVJTlQ2NF9DQVNUIDB4ZiA8PCA0KSAgCisjZGVmaW5lIE5TUklfUkVWX01BU0sgKFVJTlQ2NF9DQVNUIDB4ZiA8PCA0KQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTlNSSV9DSElQSURfU0hGVCAwCi0jZGVmaW5lIE5TUklfQ0hJUElEX01BU0sgKFVJTlQ2NF9DQVNUIDB4ZikgIAorI2RlZmluZSBOU1JJX0NISVBJRF9NQVNLIChVSU5UNjRfQ0FTVCAweGYpCiAjZGVmaW5lIE5BU0lEX1RPX0ZJTkVSRUdfU0hGVCAwCiAjZGVmaW5lIE5BU0lEX1RPX0NPQVJTRVJFR19TSEZUIDMKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIE5QUl9QT1JUUkVTRVQgKFVJTlQ2NF9DQVNUIDEgPDwgNykgIAotI2RlZmluZSBOUFJfTElOS1JFU0VUIChVSU5UNjRfQ0FTVCAxIDw8IDEpICAKLSNkZWZpbmUgTlBSX0xPQ0FMUkVTRVQgKFVJTlQ2NF9DQVNUIDEpICAKKyNkZWZpbmUgTlBSX1BPUlRSRVNFVCAoVUlOVDY0X0NBU1QgMSA8PCA3KQorI2RlZmluZSBOUFJfTElOS1JFU0VUIChVSU5UNjRfQ0FTVCAxIDw8IDEpCisjZGVmaW5lIE5QUl9MT0NBTFJFU0VUIChVSU5UNjRfQ0FTVCAxKQogI2RlZmluZSBOUFJPVF9SRVNFVE9LIChVSU5UNjRfQ0FTVCAxKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgTkdQX01BWFJFVFJZX1NIRlQgNDggIAorI2RlZmluZSBOR1BfTUFYUkVUUllfU0hGVCA0OAogI2RlZmluZSBOR1BfTUFYUkVUUllfTUFTSyAoVUlOVDY0X0NBU1QgMHgzZmYgPDwgNDgpCi0jZGVmaW5lIE5HUF9UQUlMVE9XUkFQX1NIRlQgMzIgIAorI2RlZmluZSBOR1BfVEFJTFRPV1JBUF9TSEZUIDMyCiAjZGVmaW5lIE5HUF9UQUlMVE9XUkFQX01BU0sgKFVJTlQ2NF9DQVNUIDB4ZmZmZiA8PCAzMikKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIE5HUF9DUkVESVRUT1ZBTF9TSEZUIDE2ICAKKyNkZWZpbmUgTkdQX0NSRURJVFRPVkFMX1NIRlQgMTYKICNkZWZpbmUgTkdQX0NSRURJVFRPVkFMX01BU0sgKFVJTlQ2NF9DQVNUIDB4ZiA8PCAxNikKLSNkZWZpbmUgTkdQX1RBSUxUT1ZBTF9TSEZUIDQgIAorI2RlZmluZSBOR1BfVEFJTFRPVkFMX1NIRlQgNAogI2RlZmluZSBOR1BfVEFJTFRPVkFMX01BU0sgKFVJTlQ2NF9DQVNUIDB4ZiA8PCA0KQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgTkRQX1BPUlRUT1JFU0VUIChVSU5UNjRfQ0FTVCAxIDw8IDE4KSAgCi0jZGVmaW5lIE5EUF9MTFA4QklUTU9ERSAoVUlOVDY0X0NBU1QgMSA8PCAxMikgIAotI2RlZmluZSBORFBfUE9SVERJU0FCTEUgKFVJTlQ2NF9DQVNUIDEgPDwgNikgIAotI2RlZmluZSBORFBfU0VOREVSUk9SIChVSU5UNjRfQ0FTVCAxKSAgCisjZGVmaW5lIE5EUF9QT1JUVE9SRVNFVCAoVUlOVDY0X0NBU1QgMSA8PCAxOCkKKyNkZWZpbmUgTkRQX0xMUDhCSVRNT0RFIChVSU5UNjRfQ0FTVCAxIDw8IDEyKQorI2RlZmluZSBORFBfUE9SVERJU0FCTEUgKFVJTlQ2NF9DQVNUIDEgPDwgNikKKyNkZWZpbmUgTkRQX1NFTkRFUlJPUiAoVUlOVDY0X0NBU1QgMSkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE5WUF9QSU9JRF9TSEZUIDQwCiAjZGVmaW5lIE5WUF9QSU9JRF9NQVNLIChVSU5UNjRfQ0FTVCAweDNmZiA8PCA0MCkKICNkZWZpbmUgTlZQX1dSSVRFSURfU0hGVCAzMgogI2RlZmluZSBOVlBfV1JJVEVJRF9NQVNLIChVSU5UNjRfQ0FTVCAweGZmIDw8IDMyKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgTlZQX0FERFJFU1NfTUFTSyAoVUlOVDY0X0NBU1QgMHhmZmZmOCkgIAorI2RlZmluZSBOVlBfQUREUkVTU19NQVNLIChVSU5UNjRfQ0FTVCAweGZmZmY4KQogI2RlZmluZSBOVlBfVFlQRV9TSEZUIDAKICNkZWZpbmUgTlZQX1RZUEVfTUFTSyAoVUlOVDY0X0NBU1QgMHgzKQogI2RlZmluZSBOVlNfVkFMSUQgKFVJTlQ2NF9DQVNUIDEgPDwgNjMpCkBAIC0xMzQsMjEgKzEzNCwyMSBAQAogI2RlZmluZSBOVlNfUElPSURfTUFTSyAoVUlOVDY0X0NBU1QgMHgzZmYgPDwgNDApCiAjZGVmaW5lIE5WU19XUklURUlEX1NIRlQgMzIKICNkZWZpbmUgTlZTX1dSSVRFSURfTUFTSyAoVUlOVDY0X0NBU1QgMHhmZiA8PCAzMikKLSNkZWZpbmUgTlZTX0FERFJFU1NfTUFTSyAoVUlOVDY0X0NBU1QgMHhmZmZmZmZmOCkgIAorI2RlZmluZSBOVlNfQUREUkVTU19NQVNLIChVSU5UNjRfQ0FTVCAweGZmZmZmZmY4KQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTlZTX1RZUEVfU0hGVCAwCiAjZGVmaW5lIE5WU19UWVBFX01BU0sgKFVJTlQ2NF9DQVNUIDB4NykKLSNkZWZpbmUgTlZTX0VSUk9SX01BU0sgKFVJTlQ2NF9DQVNUIDB4NCkgIAotI2RlZmluZSBQSU9UWVBFX1JFQUQgMCAgCisjZGVmaW5lIE5WU19FUlJPUl9NQVNLIChVSU5UNjRfQ0FTVCAweDQpCisjZGVmaW5lIFBJT1RZUEVfUkVBRCAwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBQSU9UWVBFX1dSSVRFIDEgIAotI2RlZmluZSBQSU9UWVBFX1VOREVGSU5FRCAyICAKLSNkZWZpbmUgUElPVFlQRV9FWENIQU5HRSAzICAKLSNkZWZpbmUgUElPVFlQRV9BRERSX0VSUiA0ICAKKyNkZWZpbmUgUElPVFlQRV9XUklURSAxCisjZGVmaW5lIFBJT1RZUEVfVU5ERUZJTkVEIDIKKyNkZWZpbmUgUElPVFlQRV9FWENIQU5HRSAzCisjZGVmaW5lIFBJT1RZUEVfQUREUl9FUlIgNAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgUElPVFlQRV9DTURfRVJSIDUgIAotI2RlZmluZSBQSU9UWVBFX1BST1RfRVJSIDYgIAotI2RlZmluZSBQSU9UWVBFX1VOS05PV04gNyAgCisjZGVmaW5lIFBJT1RZUEVfQ01EX0VSUiA1CisjZGVmaW5lIFBJT1RZUEVfUFJPVF9FUlIgNgorI2RlZmluZSBQSU9UWVBFX1VOS05PV04gNwogI2RlZmluZSBOQUdFX1ZDSF9TSEZUIDEwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBOQUdFX1ZDSF9NQVNLIChVSU5UNjRfQ0FTVCAzIDw8IDEwKQpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC1taXBzL2FzbS9zbi9zbjAvaHVicGkuaCBiL2xpYmMva2VybmVsL2FyY2gtbWlwcy9hc20vc24vc24wL2h1YnBpLmgKaW5kZXggOTIyYzQ4MC4uN2VmYWI4YiAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvYXJjaC1taXBzL2FzbS9zbi9zbjAvaHVicGkuaAorKysgYi9saWJjL2tlcm5lbC9hcmNoLW1pcHMvYXNtL3NuL3NuMC9odWJwaS5oCkBAIC0yMSwxNSArMjEsMTUgQEAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2RlZmluZSBQSV9CQVNFIDB4MDAwMDAwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBQSV9DUFVfUFJPVEVDVCAweDAwMDAwMCAgCi0jZGVmaW5lIFBJX1BST1RfT1ZFUlJEIDB4MDAwMDA4ICAKLSNkZWZpbmUgUElfSU9fUFJPVEVDVCAweDAwMDAxMCAgCi0jZGVmaW5lIFBJX1JFR0lPTl9QUkVTRU5UIDB4MDAwMDE4ICAKKyNkZWZpbmUgUElfQ1BVX1BST1RFQ1QgMHgwMDAwMDAKKyNkZWZpbmUgUElfUFJPVF9PVkVSUkQgMHgwMDAwMDgKKyNkZWZpbmUgUElfSU9fUFJPVEVDVCAweDAwMDAxMAorI2RlZmluZSBQSV9SRUdJT05fUFJFU0VOVCAweDAwMDAxOAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgUElfQ1BVX05VTSAweDAwMDAyMCAgCi0jZGVmaW5lIFBJX0NBTElBU19TSVpFIDB4MDAwMDI4ICAKLSNkZWZpbmUgUElfTUFYX0NSQl9USU1FT1VUIDB4MDAwMDMwICAKLSNkZWZpbmUgUElfQ1JCX1NGQUNUT1IgMHgwMDAwMzggIAorI2RlZmluZSBQSV9DUFVfTlVNIDB4MDAwMDIwCisjZGVmaW5lIFBJX0NBTElBU19TSVpFIDB4MDAwMDI4CisjZGVmaW5lIFBJX01BWF9DUkJfVElNRU9VVCAweDAwMDAzMAorI2RlZmluZSBQSV9DUkJfU0ZBQ1RPUiAweDAwMDAzOAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUElfQ0FMSUFTX1NJWkVfMCAwCiAjZGVmaW5lIFBJX0NBTElBU19TSVpFXzRLIDEKQEAgLTUxLDE0MyArNTEsMTQzIEBACiAjZGVmaW5lIFBJX0NBTElBU19TSVpFXzMyTSAxNAogI2RlZmluZSBQSV9DQUxJQVNfU0laRV82NE0gMTUKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIFBJX0NQVV9QUkVTRU5UX0EgMHgwMDAwNDAgIAotI2RlZmluZSBQSV9DUFVfUFJFU0VOVF9CIDB4MDAwMDQ4ICAKLSNkZWZpbmUgUElfQ1BVX0VOQUJMRV9BIDB4MDAwMDUwICAKLSNkZWZpbmUgUElfQ1BVX0VOQUJMRV9CIDB4MDAwMDU4ICAKKyNkZWZpbmUgUElfQ1BVX1BSRVNFTlRfQSAweDAwMDA0MAorI2RlZmluZSBQSV9DUFVfUFJFU0VOVF9CIDB4MDAwMDQ4CisjZGVmaW5lIFBJX0NQVV9FTkFCTEVfQSAweDAwMDA1MAorI2RlZmluZSBQSV9DUFVfRU5BQkxFX0IgMHgwMDAwNTgKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIFBJX1JFUExZX0xFVkVMIDB4MDAwMDYwICAKLSNkZWZpbmUgUElfSEFSRFJFU0VUX0JJVCAweDAyMDA2OCAgCi0jZGVmaW5lIFBJX05NSV9BIDB4MDAwMDcwICAKLSNkZWZpbmUgUElfTk1JX0IgMHgwMDAwNzggIAorI2RlZmluZSBQSV9SRVBMWV9MRVZFTCAweDAwMDA2MAorI2RlZmluZSBQSV9IQVJEUkVTRVRfQklUIDB4MDIwMDY4CisjZGVmaW5lIFBJX05NSV9BIDB4MDAwMDcwCisjZGVmaW5lIFBJX05NSV9CIDB4MDAwMDc4CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQSV9OTUlfT0ZGU0VUIChQSV9OTUlfQiAtIFBJX05NSV9BKQotI2RlZmluZSBQSV9TT0ZUUkVTRVQgMHgwMDAwODAgIAotI2RlZmluZSBQSV9JTlRfUEVORF9NT0QgMHgwMDAwOTAgIAotI2RlZmluZSBQSV9JTlRfUEVORDAgMHgwMDAwOTggIAorI2RlZmluZSBQSV9TT0ZUUkVTRVQgMHgwMDAwODAKKyNkZWZpbmUgUElfSU5UX1BFTkRfTU9EIDB4MDAwMDkwCisjZGVmaW5lIFBJX0lOVF9QRU5EMCAweDAwMDA5OAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgUElfSU5UX1BFTkQxIDB4MDAwMGEwICAKLSNkZWZpbmUgUElfSU5UX01BU0swX0EgMHgwMDAwYTggIAotI2RlZmluZSBQSV9JTlRfTUFTSzFfQSAweDAwMDBiMCAgCi0jZGVmaW5lIFBJX0lOVF9NQVNLMF9CIDB4MDAwMGI4ICAKKyNkZWZpbmUgUElfSU5UX1BFTkQxIDB4MDAwMGEwCisjZGVmaW5lIFBJX0lOVF9NQVNLMF9BIDB4MDAwMGE4CisjZGVmaW5lIFBJX0lOVF9NQVNLMV9BIDB4MDAwMGIwCisjZGVmaW5lIFBJX0lOVF9NQVNLMF9CIDB4MDAwMGI4CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBQSV9JTlRfTUFTSzFfQiAweDAwMDBjMCAgCi0jZGVmaW5lIFBJX0lOVF9NQVNLX09GRlNFVCAweDEwICAKLSNkZWZpbmUgUElfQ0NfUEVORF9TRVRfQSAweDAwMDBjOCAgCi0jZGVmaW5lIFBJX0NDX1BFTkRfU0VUX0IgMHgwMDAwZDAgIAorI2RlZmluZSBQSV9JTlRfTUFTSzFfQiAweDAwMDBjMAorI2RlZmluZSBQSV9JTlRfTUFTS19PRkZTRVQgMHgxMAorI2RlZmluZSBQSV9DQ19QRU5EX1NFVF9BIDB4MDAwMGM4CisjZGVmaW5lIFBJX0NDX1BFTkRfU0VUX0IgMHgwMDAwZDAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIFBJX0NDX1BFTkRfQ0xSX0EgMHgwMDAwZDggIAotI2RlZmluZSBQSV9DQ19QRU5EX0NMUl9CIDB4MDAwMGUwICAKLSNkZWZpbmUgUElfQ0NfTUFTSyAweDAwMDBlOCAgCi0jZGVmaW5lIFBJX0lOVF9TRVRfT0ZGU0VUIDB4MDggIAorI2RlZmluZSBQSV9DQ19QRU5EX0NMUl9BIDB4MDAwMGQ4CisjZGVmaW5lIFBJX0NDX1BFTkRfQ0xSX0IgMHgwMDAwZTAKKyNkZWZpbmUgUElfQ0NfTUFTSyAweDAwMDBlOAorI2RlZmluZSBQSV9JTlRfU0VUX09GRlNFVCAweDA4CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBQSV9SVF9DT1VOVCAweDAzMDEwMCAgCi0jZGVmaW5lIFBJX1JUX0NPTVBBUkVfQSAweDAwMDEwOCAgCi0jZGVmaW5lIFBJX1JUX0NPTVBBUkVfQiAweDAwMDExMCAgCi0jZGVmaW5lIFBJX1BST0ZJTEVfQ09NUEFSRSAweDAwMDExOCAgCisjZGVmaW5lIFBJX1JUX0NPVU5UIDB4MDMwMTAwCisjZGVmaW5lIFBJX1JUX0NPTVBBUkVfQSAweDAwMDEwOAorI2RlZmluZSBQSV9SVF9DT01QQVJFX0IgMHgwMDAxMTAKKyNkZWZpbmUgUElfUFJPRklMRV9DT01QQVJFIDB4MDAwMTE4CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBQSV9SVF9QRU5EX0EgMHgwMDAxMjAgIAotI2RlZmluZSBQSV9SVF9QRU5EX0IgMHgwMDAxMjggIAotI2RlZmluZSBQSV9QUk9GX1BFTkRfQSAweDAwMDEzMCAgCi0jZGVmaW5lIFBJX1BST0ZfUEVORF9CIDB4MDAwMTM4ICAKKyNkZWZpbmUgUElfUlRfUEVORF9BIDB4MDAwMTIwCisjZGVmaW5lIFBJX1JUX1BFTkRfQiAweDAwMDEyOAorI2RlZmluZSBQSV9QUk9GX1BFTkRfQSAweDAwMDEzMAorI2RlZmluZSBQSV9QUk9GX1BFTkRfQiAweDAwMDEzOAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgUElfUlRfRU5fQSAweDAwMDE0MCAgCi0jZGVmaW5lIFBJX1JUX0VOX0IgMHgwMDAxNDggIAotI2RlZmluZSBQSV9QUk9GX0VOX0EgMHgwMDAxNTAgIAotI2RlZmluZSBQSV9QUk9GX0VOX0IgMHgwMDAxNTggIAorI2RlZmluZSBQSV9SVF9FTl9BIDB4MDAwMTQwCisjZGVmaW5lIFBJX1JUX0VOX0IgMHgwMDAxNDgKKyNkZWZpbmUgUElfUFJPRl9FTl9BIDB4MDAwMTUwCisjZGVmaW5lIFBJX1BST0ZfRU5fQiAweDAwMDE1OAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgUElfUlRfTE9DQUxfQ1RSTCAweDAwMDE2MCAgCi0jZGVmaW5lIFBJX1JUX0ZJTFRFUl9DVFJMIDB4MDAwMTY4ICAKLSNkZWZpbmUgUElfQ09VTlRfT0ZGU0VUIDB4MDggIAotI2RlZmluZSBQSV9CSVNUX1dSSVRFX0RBVEEgMHgwMDAyMDAgIAorI2RlZmluZSBQSV9SVF9MT0NBTF9DVFJMIDB4MDAwMTYwCisjZGVmaW5lIFBJX1JUX0ZJTFRFUl9DVFJMIDB4MDAwMTY4CisjZGVmaW5lIFBJX0NPVU5UX09GRlNFVCAweDA4CisjZGVmaW5lIFBJX0JJU1RfV1JJVEVfREFUQSAweDAwMDIwMAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgUElfQklTVF9SRUFEX0RBVEEgMHgwMDAyMDggIAotI2RlZmluZSBQSV9CSVNUX0NPVU5UX1RBUkcgMHgwMDAyMTAgIAotI2RlZmluZSBQSV9CSVNUX1JFQURZIDB4MDAwMjE4ICAKLSNkZWZpbmUgUElfQklTVF9TSElGVF9MT0FEIDB4MDAwMjIwICAKKyNkZWZpbmUgUElfQklTVF9SRUFEX0RBVEEgMHgwMDAyMDgKKyNkZWZpbmUgUElfQklTVF9DT1VOVF9UQVJHIDB4MDAwMjEwCisjZGVmaW5lIFBJX0JJU1RfUkVBRFkgMHgwMDAyMTgKKyNkZWZpbmUgUElfQklTVF9TSElGVF9MT0FEIDB4MDAwMjIwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBQSV9CSVNUX1NISUZUX1VOTE9BRCAweDAwMDIyOCAgCi0jZGVmaW5lIFBJX0JJU1RfRU5URVJfUlVOIDB4MDAwMjMwICAKLSNkZWZpbmUgUElfR0ZYX1BBR0VfQSAweDAwMDMwMCAgCi0jZGVmaW5lIFBJX0dGWF9DUkVESVRfQ05UUl9BIDB4MDAwMzA4ICAKKyNkZWZpbmUgUElfQklTVF9TSElGVF9VTkxPQUQgMHgwMDAyMjgKKyNkZWZpbmUgUElfQklTVF9FTlRFUl9SVU4gMHgwMDAyMzAKKyNkZWZpbmUgUElfR0ZYX1BBR0VfQSAweDAwMDMwMAorI2RlZmluZSBQSV9HRlhfQ1JFRElUX0NOVFJfQSAweDAwMDMwOAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgUElfR0ZYX0JJQVNfQSAweDAwMDMxMCAgCi0jZGVmaW5lIFBJX0dGWF9JTlRfQ05UUl9BIDB4MDAwMzE4ICAKLSNkZWZpbmUgUElfR0ZYX0lOVF9DTVBfQSAweDAwMDMyMCAgCi0jZGVmaW5lIFBJX0dGWF9QQUdFX0IgMHgwMDAzMjggIAorI2RlZmluZSBQSV9HRlhfQklBU19BIDB4MDAwMzEwCisjZGVmaW5lIFBJX0dGWF9JTlRfQ05UUl9BIDB4MDAwMzE4CisjZGVmaW5lIFBJX0dGWF9JTlRfQ01QX0EgMHgwMDAzMjAKKyNkZWZpbmUgUElfR0ZYX1BBR0VfQiAweDAwMDMyOAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgUElfR0ZYX0NSRURJVF9DTlRSX0IgMHgwMDAzMzAgIAotI2RlZmluZSBQSV9HRlhfQklBU19CIDB4MDAwMzM4ICAKLSNkZWZpbmUgUElfR0ZYX0lOVF9DTlRSX0IgMHgwMDAzNDAgIAotI2RlZmluZSBQSV9HRlhfSU5UX0NNUF9CIDB4MDAwMzQ4ICAKKyNkZWZpbmUgUElfR0ZYX0NSRURJVF9DTlRSX0IgMHgwMDAzMzAKKyNkZWZpbmUgUElfR0ZYX0JJQVNfQiAweDAwMDMzOAorI2RlZmluZSBQSV9HRlhfSU5UX0NOVFJfQiAweDAwMDM0MAorI2RlZmluZSBQSV9HRlhfSU5UX0NNUF9CIDB4MDAwMzQ4CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQSV9HRlhfT0ZGU0VUIChQSV9HRlhfUEFHRV9CIC0gUElfR0ZYX1BBR0VfQSkKICNkZWZpbmUgUElfR0ZYX1BBR0VfRU5BQkxFIDB4MDAwMDAxMDAwMDAwMDAwMExMCi0jZGVmaW5lIFBJX0VSUl9JTlRfUEVORCAweDAwMDQwMCAgCi0jZGVmaW5lIFBJX0VSUl9JTlRfTUFTS19BIDB4MDAwNDA4ICAKKyNkZWZpbmUgUElfRVJSX0lOVF9QRU5EIDB4MDAwNDAwCisjZGVmaW5lIFBJX0VSUl9JTlRfTUFTS19BIDB4MDAwNDA4CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBQSV9FUlJfSU5UX01BU0tfQiAweDAwMDQxMCAgCi0jZGVmaW5lIFBJX0VSUl9TVEFDS19BRERSX0EgMHgwMDA0MTggIAotI2RlZmluZSBQSV9FUlJfU1RBQ0tfQUREUl9CIDB4MDAwNDIwICAKLSNkZWZpbmUgUElfRVJSX1NUQUNLX1NJWkUgMHgwMDA0MjggIAorI2RlZmluZSBQSV9FUlJfSU5UX01BU0tfQiAweDAwMDQxMAorI2RlZmluZSBQSV9FUlJfU1RBQ0tfQUREUl9BIDB4MDAwNDE4CisjZGVmaW5lIFBJX0VSUl9TVEFDS19BRERSX0IgMHgwMDA0MjAKKyNkZWZpbmUgUElfRVJSX1NUQUNLX1NJWkUgMHgwMDA0MjgKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIFBJX0VSUl9TVEFUVVMwX0EgMHgwMDA0MzAgIAotI2RlZmluZSBQSV9FUlJfU1RBVFVTMF9BX1JDTFIgMHgwMDA0MzggIAotI2RlZmluZSBQSV9FUlJfU1RBVFVTMV9BIDB4MDAwNDQwICAKLSNkZWZpbmUgUElfRVJSX1NUQVRVUzFfQV9SQ0xSIDB4MDAwNDQ4ICAKKyNkZWZpbmUgUElfRVJSX1NUQVRVUzBfQSAweDAwMDQzMAorI2RlZmluZSBQSV9FUlJfU1RBVFVTMF9BX1JDTFIgMHgwMDA0MzgKKyNkZWZpbmUgUElfRVJSX1NUQVRVUzFfQSAweDAwMDQ0MAorI2RlZmluZSBQSV9FUlJfU1RBVFVTMV9BX1JDTFIgMHgwMDA0NDgKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIFBJX0VSUl9TVEFUVVMwX0IgMHgwMDA0NTAgIAotI2RlZmluZSBQSV9FUlJfU1RBVFVTMF9CX1JDTFIgMHgwMDA0NTggIAotI2RlZmluZSBQSV9FUlJfU1RBVFVTMV9CIDB4MDAwNDYwICAKLSNkZWZpbmUgUElfRVJSX1NUQVRVUzFfQl9SQ0xSIDB4MDAwNDY4ICAKKyNkZWZpbmUgUElfRVJSX1NUQVRVUzBfQiAweDAwMDQ1MAorI2RlZmluZSBQSV9FUlJfU1RBVFVTMF9CX1JDTFIgMHgwMDA0NTgKKyNkZWZpbmUgUElfRVJSX1NUQVRVUzFfQiAweDAwMDQ2MAorI2RlZmluZSBQSV9FUlJfU1RBVFVTMV9CX1JDTFIgMHgwMDA0NjgKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIFBJX1NQT09MX0NNUF9BIDB4MDAwNDcwICAKLSNkZWZpbmUgUElfU1BPT0xfQ01QX0IgMHgwMDA0NzggIAotI2RlZmluZSBQSV9DUkJfVElNRU9VVF9BIDB4MDAwNDgwICAKLSNkZWZpbmUgUElfQ1JCX1RJTUVPVVRfQiAweDAwMDQ4OCAgCisjZGVmaW5lIFBJX1NQT09MX0NNUF9BIDB4MDAwNDcwCisjZGVmaW5lIFBJX1NQT09MX0NNUF9CIDB4MDAwNDc4CisjZGVmaW5lIFBJX0NSQl9USU1FT1VUX0EgMHgwMDA0ODAKKyNkZWZpbmUgUElfQ1JCX1RJTUVPVVRfQiAweDAwMDQ4OAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgUElfU1lTQURfRVJSQ0hLX0VOIDB4MDAwNDkwICAKLSNkZWZpbmUgUElfQkFEX0NIRUNLX0JJVF9BIDB4MDAwNDk4ICAKLSNkZWZpbmUgUElfQkFEX0NIRUNLX0JJVF9CIDB4MDAwNGEwICAKLSNkZWZpbmUgUElfTkFDS19DTlRfQSAweDAwMDRhOCAgCisjZGVmaW5lIFBJX1NZU0FEX0VSUkNIS19FTiAweDAwMDQ5MAorI2RlZmluZSBQSV9CQURfQ0hFQ0tfQklUX0EgMHgwMDA0OTgKKyNkZWZpbmUgUElfQkFEX0NIRUNLX0JJVF9CIDB4MDAwNGEwCisjZGVmaW5lIFBJX05BQ0tfQ05UX0EgMHgwMDA0YTgKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIFBJX05BQ0tfQ05UX0IgMHgwMDA0YjAgIAotI2RlZmluZSBQSV9OQUNLX0NNUCAweDAwMDRiOCAgCisjZGVmaW5lIFBJX05BQ0tfQ05UX0IgMHgwMDA0YjAKKyNkZWZpbmUgUElfTkFDS19DTVAgMHgwMDA0YjgKICNkZWZpbmUgUElfU1RBQ0tBRERSX09GRlNFVCAoUElfRVJSX1NUQUNLX0FERFJfQiAtIFBJX0VSUl9TVEFDS19BRERSX0EpCiAjZGVmaW5lIFBJX0VSUlNUQVRfT0ZGU0VUIChQSV9FUlJfU1RBVFVTMF9CIC0gUElfRVJSX1NUQVRVUzBfQSkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBJX1JEQ0xSX09GRlNFVCAoUElfRVJSX1NUQVRVUzBfQV9SQ0xSIC0gUElfRVJSX1NUQVRVUzBfQSkKLSNkZWZpbmUgUElfRVJSX1NQT09MX0NNUF9CIDB4MDAwMDAwMDEgIAorI2RlZmluZSBQSV9FUlJfU1BPT0xfQ01QX0IgMHgwMDAwMDAwMQogI2RlZmluZSBQSV9FUlJfU1BPT0xfQ01QX0EgMHgwMDAwMDAwMgotI2RlZmluZSBQSV9FUlJfU1BVUl9NU0dfQiAweDAwMDAwMDA0ICAKKyNkZWZpbmUgUElfRVJSX1NQVVJfTVNHX0IgMHgwMDAwMDAwNAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUElfRVJSX1NQVVJfTVNHX0EgMHgwMDAwMDAwOAotI2RlZmluZSBQSV9FUlJfV1JCX1RFUlJfQiAweDAwMDAwMDEwICAKKyNkZWZpbmUgUElfRVJSX1dSQl9URVJSX0IgMHgwMDAwMDAxMAogI2RlZmluZSBQSV9FUlJfV1JCX1RFUlJfQSAweDAwMDAwMDIwCi0jZGVmaW5lIFBJX0VSUl9XUkJfV0VSUl9CIDB4MDAwMDAwNDAgIAorI2RlZmluZSBQSV9FUlJfV1JCX1dFUlJfQiAweDAwMDAwMDQwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQSV9FUlJfV1JCX1dFUlJfQSAweDAwMDAwMDgwCi0jZGVmaW5lIFBJX0VSUl9TWVNTVEFURV9CIDB4MDAwMDAxMDAgIAorI2RlZmluZSBQSV9FUlJfU1lTU1RBVEVfQiAweDAwMDAwMTAwCiAjZGVmaW5lIFBJX0VSUl9TWVNTVEFURV9BIDB4MDAwMDAyMDAKLSNkZWZpbmUgUElfRVJSX1NZU0FEX0RBVEFfQiAweDAwMDAwNDAwICAKKyNkZWZpbmUgUElfRVJSX1NZU0FEX0RBVEFfQiAweDAwMDAwNDAwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQSV9FUlJfU1lTQURfREFUQV9BIDB4MDAwMDA4MDAKLSNkZWZpbmUgUElfRVJSX1NZU0FEX0FERFJfQiAweDAwMDAxMDAwICAKKyNkZWZpbmUgUElfRVJSX1NZU0FEX0FERFJfQiAweDAwMDAxMDAwCiAjZGVmaW5lIFBJX0VSUl9TWVNBRF9BRERSX0EgMHgwMDAwMjAwMAotI2RlZmluZSBQSV9FUlJfU1lTQ01EX0RBVEFfQiAweDAwMDA0MDAwICAKKyNkZWZpbmUgUElfRVJSX1NZU0NNRF9EQVRBX0IgMHgwMDAwNDAwMAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUElfRVJSX1NZU0NNRF9EQVRBX0EgMHgwMDAwODAwMAotI2RlZmluZSBQSV9FUlJfU1lTQ01EX0FERFJfQiAweDAwMDEwMDAwICAKKyNkZWZpbmUgUElfRVJSX1NZU0NNRF9BRERSX0IgMHgwMDAxMDAwMAogI2RlZmluZSBQSV9FUlJfU1lTQ01EX0FERFJfQSAweDAwMDIwMDAwCi0jZGVmaW5lIFBJX0VSUl9CQURfU1BPT0xfQiAweDAwMDQwMDAwICAKKyNkZWZpbmUgUElfRVJSX0JBRF9TUE9PTF9CIDB4MDAwNDAwMDAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBJX0VSUl9CQURfU1BPT0xfQSAweDAwMDgwMDAwCi0jZGVmaW5lIFBJX0VSUl9VTkNBQ19VTkNPUlJfQiAweDAwMTAwMDAwICAKKyNkZWZpbmUgUElfRVJSX1VOQ0FDX1VOQ09SUl9CIDB4MDAxMDAwMDAKICNkZWZpbmUgUElfRVJSX1VOQ0FDX1VOQ09SUl9BIDB4MDAyMDAwMDAKLSNkZWZpbmUgUElfRVJSX1NZU1NUQVRFX1RBR19CIDB4MDA0MDAwMDAgIAorI2RlZmluZSBQSV9FUlJfU1lTU1RBVEVfVEFHX0IgMHgwMDQwMDAwMAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUElfRVJSX1NZU1NUQVRFX1RBR19BIDB4MDA4MDAwMDAKLSNkZWZpbmUgUElfRVJSX01EX1VOQ09SUiAweDAxMDAwMDAwICAKKyNkZWZpbmUgUElfRVJSX01EX1VOQ09SUiAweDAxMDAwMDAwCiAjZGVmaW5lIFBJX0VSUl9DTEVBUl9BTExfQSAweDAwYWFhYWFhCiAjZGVmaW5lIFBJX0VSUl9DTEVBUl9BTExfQiAweDAwNTU1NTU1CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwpAQCAtMjY2LDggKzI2Niw4IEBACiAjZGVmaW5lIEVSUl9TVEtfQUREUl9TSEZUIDcKICNkZWZpbmUgRVJSX1NUQVQwX0FERFJfU0hGVCAzCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBQSV9NSU5fU1RBQ0tfU0laRSA0MDk2ICAKLSNkZWZpbmUgUElfU1RBQ0tfU0laRV9TSEZUIDEyICAKKyNkZWZpbmUgUElfTUlOX1NUQUNLX1NJWkUgNDA5NgorI2RlZmluZSBQSV9TVEFDS19TSVpFX1NIRlQgMTIKICNkZWZpbmUgRVJSX1NUQUNLX1NJWkVfQllURVMoX3N6KSAgICgoX3N6KSA/IChQSV9NSU5fU1RBQ0tfU0laRSA8PCAoKF9zeikgLSAxKSkgOiAwKQogI2lmbmRlZiBfX0FTU0VNQkxZX18KIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCkBAIC0zMjMsMTUgKzMyMywxNSBAQAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHR5cGVkZWYgdTY0IHJ0Y190aW1lX3Q7CiAjZW5kaWYKLSNkZWZpbmUgUElfU1lTQURfRVJSQ0hLX0VDQ0dFTiAweDAxICAKLSNkZWZpbmUgUElfU1lTQURfRVJSQ0hLX1FVQUxHRU4gMHgwMiAgCisjZGVmaW5lIFBJX1NZU0FEX0VSUkNIS19FQ0NHRU4gMHgwMQorI2RlZmluZSBQSV9TWVNBRF9FUlJDSEtfUVVBTEdFTiAweDAyCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBQSV9TWVNBRF9FUlJDSEtfU0FEUCAweDA0ICAKLSNkZWZpbmUgUElfU1lTQURfRVJSQ0hLX0NNRFAgMHgwOCAgCi0jZGVmaW5lIFBJX1NZU0FEX0VSUkNIS19TVEFURSAweDEwICAKLSNkZWZpbmUgUElfU1lTQURfRVJSQ0hLX1FVQUwgMHgyMCAgCisjZGVmaW5lIFBJX1NZU0FEX0VSUkNIS19TQURQIDB4MDQKKyNkZWZpbmUgUElfU1lTQURfRVJSQ0hLX0NNRFAgMHgwOAorI2RlZmluZSBQSV9TWVNBRF9FUlJDSEtfU1RBVEUgMHgxMAorI2RlZmluZSBQSV9TWVNBRF9FUlJDSEtfUVVBTCAweDIwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBQSV9TWVNBRF9DSEVDS19BTEwgMHgzZiAgCisjZGVmaW5lIFBJX1NZU0FEX0NIRUNLX0FMTCAweDNmCiAjZGVmaW5lIEhVQl9JUF9QRU5EMCAweDA0MDAKICNkZWZpbmUgSFVCX0lQX1BFTkQxX0NDIDB4MDgwMAogI2RlZmluZSBIVUJfSVBfUlQgMHgxMDAwCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLW1pcHMvYXNtL3NvY2tldC5oIGIvbGliYy9rZXJuZWwvYXJjaC1taXBzL2FzbS9zb2NrZXQuaAppbmRleCBmZjhhM2JhLi4wMmNmMjllIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9hcmNoLW1pcHMvYXNtL3NvY2tldC5oCisrKyBiL2xpYmMva2VybmVsL2FyY2gtbWlwcy9hc20vc29ja2V0LmgKQEAgLTIxLDUxICsyMSw2MCBAQAogI2luY2x1ZGUgPGFzbS9zb2NraW9zLmg+CiAjZGVmaW5lIFNPTF9TT0NLRVQgMHhmZmZmCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBTT19ERUJVRyAweDAwMDEgIAotI2RlZmluZSBTT19SRVVTRUFERFIgMHgwMDA0ICAKLSNkZWZpbmUgU09fS0VFUEFMSVZFIDB4MDAwOCAgCi0jZGVmaW5lIFNPX0RPTlRST1VURSAweDAwMTAgIAorI2RlZmluZSBTT19ERUJVRyAweDAwMDEKKyNkZWZpbmUgU09fUkVVU0VBRERSIDB4MDAwNAorI2RlZmluZSBTT19LRUVQQUxJVkUgMHgwMDA4CisjZGVmaW5lIFNPX0RPTlRST1VURSAweDAwMTAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIFNPX0JST0FEQ0FTVCAweDAwMjAgIAotI2RlZmluZSBTT19MSU5HRVIgMHgwMDgwICAKLSNkZWZpbmUgU09fT09CSU5MSU5FIDB4MDEwMCAgCi0jZGVmaW5lIFNPX1RZUEUgMHgxMDA4ICAKKyNkZWZpbmUgU09fQlJPQURDQVNUIDB4MDAyMAorI2RlZmluZSBTT19MSU5HRVIgMHgwMDgwCisjZGVmaW5lIFNPX09PQklOTElORSAweDAxMDAKKyNkZWZpbmUgU09fVFlQRSAweDEwMDgKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIFNPX1NUWUxFIFNPX1RZUEUgIAotI2RlZmluZSBTT19FUlJPUiAweDEwMDcgIAotI2RlZmluZSBTT19TTkRCVUYgMHgxMDAxICAKLSNkZWZpbmUgU09fUkNWQlVGIDB4MTAwMiAgCisjZGVmaW5lIFNPX1NUWUxFIFNPX1RZUEUKKyNkZWZpbmUgU09fRVJST1IgMHgxMDA3CisjZGVmaW5lIFNPX1NOREJVRiAweDEwMDEKKyNkZWZpbmUgU09fUkNWQlVGIDB4MTAwMgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgU09fU05ETE9XQVQgMHgxMDAzICAKLSNkZWZpbmUgU09fUkNWTE9XQVQgMHgxMDA0ICAKLSNkZWZpbmUgU09fU05EVElNRU8gMHgxMDA1ICAKLSNkZWZpbmUgU09fUkNWVElNRU8gMHgxMDA2ICAKKyNkZWZpbmUgU09fU05ETE9XQVQgMHgxMDAzCisjZGVmaW5lIFNPX1JDVkxPV0FUIDB4MTAwNAorI2RlZmluZSBTT19TTkRUSU1FTyAweDEwMDUKKyNkZWZpbmUgU09fUkNWVElNRU8gMHgxMDA2CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTT19BQ0NFUFRDT05OIDB4MTAwOQorI2RlZmluZSBTT19QUk9UT0NPTCAweDEwMjgKKyNkZWZpbmUgU09fRE9NQUlOIDB4MTAyOQogI2RlZmluZSBTT19OT19DSEVDSyAxMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU09fUFJJT1JJVFkgMTIKICNkZWZpbmUgU09fQlNEQ09NUEFUIDE0Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTT19QQVNTQ1JFRCAxNwogI2RlZmluZSBTT19QRUVSQ1JFRCAxOAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU09fU0VDVVJJVFlfQVVUSEVOVElDQVRJT04gMjIKICNkZWZpbmUgU09fU0VDVVJJVFlfRU5DUllQVElPTl9UUkFOU1BPUlQgMjMKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNPX1NFQ1VSSVRZX0VOQ1JZUFRJT05fTkVUV09SSyAyNAogI2RlZmluZSBTT19CSU5EVE9ERVZJQ0UgMjUKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNPX0FUVEFDSF9GSUxURVIgMjYKICNkZWZpbmUgU09fREVUQUNIX0ZJTFRFUiAyNwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU09fUEVFUk5BTUUgMjgKICNkZWZpbmUgU09fVElNRVNUQU1QIDI5CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTQ01fVElNRVNUQU1QIFNPX1RJTUVTVEFNUAogI2RlZmluZSBTT19QRUVSU0VDIDMwCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTT19TTkRCVUZGT1JDRSAzMQogI2RlZmluZSBTT19SQ1ZCVUZGT1JDRSAzMworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU09fUEFTU1NFQyAzNAogI2RlZmluZSBTT19USU1FU1RBTVBOUyAzNQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU0NNX1RJTUVTVEFNUE5TIFNPX1RJTUVTVEFNUE5TCiAjZGVmaW5lIFNPX01BUksgMzYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFNPX1RJTUVTVEFNUElORyAzNworI2RlZmluZSBTQ01fVElNRVNUQU1QSU5HIFNPX1RJTUVTVEFNUElORworI2RlZmluZSBTT19SWFFfT1ZGTCA0MAorI2RlZmluZSBTT19XSUZJX1NUQVRVUyA0MQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgU0NNX1dJRklfU1RBVFVTIFNPX1dJRklfU1RBVFVTCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gtbWlwcy9hc20vc29ja2lvcy5oIGIvbGliYy9rZXJuZWwvYXJjaC1taXBzL2FzbS9zb2NraW9zLmgKaW5kZXggMGU1YTRhYy4uYzNiMzMzNCAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvYXJjaC1taXBzL2FzbS9zb2NraW9zLmgKKysrIGIvbGliYy9rZXJuZWwvYXJjaC1taXBzL2FzbS9zb2NraW9zLmgKQEAgLTI2LDYgKzI2LDYgQEAKICNkZWZpbmUgU0lPQ1NQR1JQIF9JT1coJ3MnLCA4LCBwaWRfdCkKICNkZWZpbmUgU0lPQ0dQR1JQIF9JT1IoJ3MnLCA5LCBwaWRfdCkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIFNJT0NHU1RBTVAgMHg4OTA2ICAKLSNkZWZpbmUgU0lPQ0dTVEFNUE5TIDB4ODkwNyAgCisjZGVmaW5lIFNJT0NHU1RBTVAgMHg4OTA2CisjZGVmaW5lIFNJT0NHU1RBTVBOUyAweDg5MDcKICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC1taXBzL2FzbS9zdGF0LmggYi9saWJjL2tlcm5lbC9hcmNoLW1pcHMvYXNtL3N0YXQuaAppbmRleCBhOGZlZTc4Li4wYjU4MWIyIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9hcmNoLW1pcHMvYXNtL3N0YXQuaAorKysgYi9saWJjL2tlcm5lbC9hcmNoLW1pcHMvYXNtL3N0YXQuaApAQCAtMzQsNyArMzQsNyBAQAogIGdpZF90IHN0X2dpZDsKICB1bnNpZ25lZCBzdF9yZGV2OwogIGxvbmcgc3RfcGFkMlsyXTsKLSBvZmZfdCBzdF9zaXplOworIF9fa2VybmVsX29mZl90IHN0X3NpemU7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGxvbmcgc3RfcGFkMzsKICB0aW1lX3Qgc3RfYXRpbWU7CkBAIC05MSw3ICs5MSw3IEBACiAgdW5zaWduZWQgaW50IHN0X3JkZXY7CiAgdW5zaWduZWQgaW50IHN0X3BhZDFbM107CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotIG9mZl90IHN0X3NpemU7CisgX19rZXJuZWxfb2ZmX3Qgc3Rfc2l6ZTsKICB1bnNpZ25lZCBpbnQgc3RfYXRpbWU7CiAgdW5zaWduZWQgaW50IHN0X2F0aW1lX25zZWM7CiAgdW5zaWduZWQgaW50IHN0X210aW1lOwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC1taXBzL2FzbS9zdHJpbmcuaCBiL2xpYmMva2VybmVsL2FyY2gtbWlwcy9hc20vc3RyaW5nLmgKaW5kZXggODU2ZjYxYi4uNmYzNzVhMyAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvYXJjaC1taXBzL2FzbS9zdHJpbmcuaAorKysgYi9saWJjL2tlcm5lbC9hcmNoLW1pcHMvYXNtL3N0cmluZy5oCkBAIC0xOCw4ICsxOCwxNiBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9BU01fU1RSSU5HX0gKICNkZWZpbmUgX0FTTV9TVFJJTkdfSAorI2lmbmRlZiBJTl9TVFJJTkdfQworI2RlZmluZSBfX0hBVkVfQVJDSF9TVFJDUFkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIF9fSEFWRV9BUkNIX1NUUk5DUFkKKyNkZWZpbmUgX19IQVZFX0FSQ0hfU1RSQ01QCisjZW5kaWYKKyNkZWZpbmUgX19IQVZFX0FSQ0hfU1RSTkNNUAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19IQVZFX0FSQ0hfTUVNU0VUCiAjZGVmaW5lIF9fSEFWRV9BUkNIX01FTUNQWQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19IQVZFX0FSQ0hfTUVNTU9WRQogI2VuZGlmCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC1taXBzL2FzbS9zeXNtaXBzLmggYi9saWJjL2tlcm5lbC9hcmNoLW1pcHMvYXNtL3N5c21pcHMuaAppbmRleCA2NjVmNjdmLi45NmIxOGI4IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9hcmNoLW1pcHMvYXNtL3N5c21pcHMuaAorKysgYi9saWJjL2tlcm5lbC9hcmNoLW1pcHMvYXNtL3N5c21pcHMuaApAQCAtMTgsMTEgKzE4LDExIEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX0FTTV9TWVNNSVBTX0gKICNkZWZpbmUgX0FTTV9TWVNNSVBTX0gKLSNkZWZpbmUgU0VUTkFNRSAxICAKLSNkZWZpbmUgRkxVU0hfQ0FDSEUgMyAgCisjZGVmaW5lIFNFVE5BTUUgMQorI2RlZmluZSBGTFVTSF9DQUNIRSAzCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBNSVBTX0ZJWEFERSA3ICAKLSNkZWZpbmUgTUlQU19SRE5WUkFNIDEwICAKLSNkZWZpbmUgTUlQU19BVE9NSUNfU0VUIDIwMDEgIAorI2RlZmluZSBNSVBTX0ZJWEFERSA3CisjZGVmaW5lIE1JUFNfUkROVlJBTSAxMAorI2RlZmluZSBNSVBTX0FUT01JQ19TRVQgMjAwMQogI2VuZGlmCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC1taXBzL2FzbS90ZXJtYml0cy5oIGIvbGliYy9rZXJuZWwvYXJjaC1taXBzL2FzbS90ZXJtYml0cy5oCmluZGV4IDZhMGFkZDcuLmNmNmViMTAgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2FyY2gtbWlwcy9hc20vdGVybWJpdHMuaAorKysgYi9saWJjL2tlcm5lbC9hcmNoLW1pcHMvYXNtL3Rlcm1iaXRzLmgKQEAgLTU5LDUxICs1OSw1MSBAQAogIHNwZWVkX3QgY19pc3BlZWQ7CiAgc3BlZWRfdCBjX29zcGVlZDsKIH07Ci0jZGVmaW5lIFZJTlRSIDAgIAorI2RlZmluZSBWSU5UUiAwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBWUVVJVCAxICAKLSNkZWZpbmUgVkVSQVNFIDIgIAotI2RlZmluZSBWS0lMTCAzICAKLSNkZWZpbmUgVk1JTiA0ICAKKyNkZWZpbmUgVlFVSVQgMQorI2RlZmluZSBWRVJBU0UgMgorI2RlZmluZSBWS0lMTCAzCisjZGVmaW5lIFZNSU4gNAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgVlRJTUUgNSAgCi0jZGVmaW5lIFZFT0wyIDYgIAotI2RlZmluZSBWU1dUQyA3ICAKKyNkZWZpbmUgVlRJTUUgNQorI2RlZmluZSBWRU9MMiA2CisjZGVmaW5lIFZTV1RDIDcKICNkZWZpbmUgVlNXVENIIFZTV1RDCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBWU1RBUlQgOCAgCi0jZGVmaW5lIFZTVE9QIDkgIAotI2RlZmluZSBWU1VTUCAxMCAgCi0jZGVmaW5lIFZSRVBSSU5UIDEyICAKKyNkZWZpbmUgVlNUQVJUIDgKKyNkZWZpbmUgVlNUT1AgOQorI2RlZmluZSBWU1VTUCAxMAorI2RlZmluZSBWUkVQUklOVCAxMgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgVkRJU0NBUkQgMTMgIAotI2RlZmluZSBWV0VSQVNFIDE0ICAKLSNkZWZpbmUgVkxORVhUIDE1ICAKLSNkZWZpbmUgVkVPRiAxNiAgCisjZGVmaW5lIFZESVNDQVJEIDEzCisjZGVmaW5lIFZXRVJBU0UgMTQKKyNkZWZpbmUgVkxORVhUIDE1CisjZGVmaW5lIFZFT0YgMTYKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIFZFT0wgMTcgIAotI2RlZmluZSBJR05CUksgMDAwMDAwMSAgCi0jZGVmaW5lIEJSS0lOVCAwMDAwMDAyICAKLSNkZWZpbmUgSUdOUEFSIDAwMDAwMDQgIAorI2RlZmluZSBWRU9MIDE3CisjZGVmaW5lIElHTkJSSyAwMDAwMDAxCisjZGVmaW5lIEJSS0lOVCAwMDAwMDAyCisjZGVmaW5lIElHTlBBUiAwMDAwMDA0CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBQQVJNUksgMDAwMDAxMCAgCi0jZGVmaW5lIElOUENLIDAwMDAwMjAgIAotI2RlZmluZSBJU1RSSVAgMDAwMDA0MCAgCi0jZGVmaW5lIElOTENSIDAwMDAxMDAgIAorI2RlZmluZSBQQVJNUksgMDAwMDAxMAorI2RlZmluZSBJTlBDSyAwMDAwMDIwCisjZGVmaW5lIElTVFJJUCAwMDAwMDQwCisjZGVmaW5lIElOTENSIDAwMDAxMDAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIElHTkNSIDAwMDAyMDAgIAotI2RlZmluZSBJQ1JOTCAwMDAwNDAwICAKLSNkZWZpbmUgSVVDTEMgMDAwMTAwMCAgCi0jZGVmaW5lIElYT04gMDAwMjAwMCAgCisjZGVmaW5lIElHTkNSIDAwMDAyMDAKKyNkZWZpbmUgSUNSTkwgMDAwMDQwMAorI2RlZmluZSBJVUNMQyAwMDAxMDAwCisjZGVmaW5lIElYT04gMDAwMjAwMAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgSVhBTlkgMDAwNDAwMCAgCi0jZGVmaW5lIElYT0ZGIDAwMTAwMDAgIAotI2RlZmluZSBJTUFYQkVMIDAwMjAwMDAgIAotI2RlZmluZSBJVVRGOCAwMDQwMDAwICAKKyNkZWZpbmUgSVhBTlkgMDAwNDAwMAorI2RlZmluZSBJWE9GRiAwMDEwMDAwCisjZGVmaW5lIElNQVhCRUwgMDAyMDAwMAorI2RlZmluZSBJVVRGOCAwMDQwMDAwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBPUE9TVCAwMDAwMDAxICAKLSNkZWZpbmUgT0xDVUMgMDAwMDAwMiAgCi0jZGVmaW5lIE9OTENSIDAwMDAwMDQgIAorI2RlZmluZSBPUE9TVCAwMDAwMDAxCisjZGVmaW5lIE9MQ1VDIDAwMDAwMDIKKyNkZWZpbmUgT05MQ1IgMDAwMDAwNAogI2RlZmluZSBPQ1JOTCAwMDAwMDEwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBPTk9DUiAwMDAwMDIwCkBAIC0xNDEsNyArMTQxLDcgQEAKICNkZWZpbmUgRkYxIDAxMDAwMDAKICNkZWZpbmUgQ0JBVUQgMDAxMDAxNwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgQjAgMDAwMDAwMCAgCisjZGVmaW5lIEIwIDAwMDAwMDAKICNkZWZpbmUgQjUwIDAwMDAwMDEKICNkZWZpbmUgQjc1IDAwMDAwMDIKICNkZWZpbmUgQjExMCAwMDAwMDAzCkBAIC0xNjMsMjAgKzE2MywyMCBAQAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRVhUQSBCMTkyMDAKICNkZWZpbmUgRVhUQiBCMzg0MDAKLSNkZWZpbmUgQ1NJWkUgMDAwMDA2MCAgCi0jZGVmaW5lIENTNSAwMDAwMDAwICAKKyNkZWZpbmUgQ1NJWkUgMDAwMDA2MAorI2RlZmluZSBDUzUgMDAwMDAwMAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgQ1M2IDAwMDAwMjAgIAotI2RlZmluZSBDUzcgMDAwMDA0MCAgCi0jZGVmaW5lIENTOCAwMDAwMDYwICAKLSNkZWZpbmUgQ1NUT1BCIDAwMDAxMDAgIAorI2RlZmluZSBDUzYgMDAwMDAyMAorI2RlZmluZSBDUzcgMDAwMDA0MAorI2RlZmluZSBDUzggMDAwMDA2MAorI2RlZmluZSBDU1RPUEIgMDAwMDEwMAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgQ1JFQUQgMDAwMDIwMCAgCi0jZGVmaW5lIFBBUkVOQiAwMDAwNDAwICAKLSNkZWZpbmUgUEFST0REIDAwMDEwMDAgIAotI2RlZmluZSBIVVBDTCAwMDAyMDAwICAKKyNkZWZpbmUgQ1JFQUQgMDAwMDIwMAorI2RlZmluZSBQQVJFTkIgMDAwMDQwMAorI2RlZmluZSBQQVJPREQgMDAwMTAwMAorI2RlZmluZSBIVVBDTCAwMDAyMDAwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBDTE9DQUwgMDAwNDAwMCAgCisjZGVmaW5lIENMT0NBTCAwMDA0MDAwCiAjZGVmaW5lIENCQVVERVggMDAxMDAwMAogI2RlZmluZSBCT1RIRVIgMDAxMDAwMAogI2RlZmluZSBCNTc2MDAgMDAxMDAwMQpAQCAtMTk4LDQzICsxOTgsNDMgQEAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEIzNTAwMDAwIDAwMTAwMTYKICNkZWZpbmUgQjQwMDAwMDAgMDAxMDAxNwotI2RlZmluZSBDSUJBVUQgMDAyMDAzNjAwMDAwICAKLSNkZWZpbmUgQ01TUEFSIDAxMDAwMDAwMDAwMCAgCisjZGVmaW5lIENJQkFVRCAwMDIwMDM2MDAwMDAKKyNkZWZpbmUgQ01TUEFSIDAxMDAwMDAwMDAwMAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgQ1JUU0NUUyAwMjAwMDAwMDAwMDAgIAotI2RlZmluZSBJQlNISUZUIDE2ICAKLSNkZWZpbmUgSVNJRyAwMDAwMDAxICAKLSNkZWZpbmUgSUNBTk9OIDAwMDAwMDIgIAorI2RlZmluZSBDUlRTQ1RTIDAyMDAwMDAwMDAwMAorI2RlZmluZSBJQlNISUZUIDE2CisjZGVmaW5lIElTSUcgMDAwMDAwMQorI2RlZmluZSBJQ0FOT04gMDAwMDAwMgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgWENBU0UgMDAwMDAwNAotI2RlZmluZSBFQ0hPIDAwMDAwMTAgIAotI2RlZmluZSBFQ0hPRSAwMDAwMDIwICAKLSNkZWZpbmUgRUNIT0sgMDAwMDA0MCAgCisjZGVmaW5lIEVDSE8gMDAwMDAxMAorI2RlZmluZSBFQ0hPRSAwMDAwMDIwCisjZGVmaW5lIEVDSE9LIDAwMDAwNDAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIEVDSE9OTCAwMDAwMTAwICAKLSNkZWZpbmUgTk9GTFNIIDAwMDAyMDAgIAotI2RlZmluZSBJRVhURU4gMDAwMDQwMCAgCi0jZGVmaW5lIEVDSE9DVEwgMDAwMTAwMCAgCisjZGVmaW5lIEVDSE9OTCAwMDAwMTAwCisjZGVmaW5lIE5PRkxTSCAwMDAwMjAwCisjZGVmaW5lIElFWFRFTiAwMDAwNDAwCisjZGVmaW5lIEVDSE9DVEwgMDAwMTAwMAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgRUNIT1BSVCAwMDAyMDAwICAKLSNkZWZpbmUgRUNIT0tFIDAwMDQwMDAgIAorI2RlZmluZSBFQ0hPUFJUIDAwMDIwMDAKKyNkZWZpbmUgRUNIT0tFIDAwMDQwMDAKICNkZWZpbmUgRkxVU0hPIDAwMjAwMDAKLSNkZWZpbmUgUEVORElOIDAwNDAwMDAgIAorI2RlZmluZSBQRU5ESU4gMDA0MDAwMAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgVE9TVE9QIDAxMDAwMDAgIAorI2RlZmluZSBUT1NUT1AgMDEwMDAwMAogI2RlZmluZSBJVE9TVE9QIFRPU1RPUAotI2RlZmluZSBUSU9DU0VSX1RFTVQgMHgwMSAgCi0jZGVmaW5lIFRDT09GRiAwICAKKyNkZWZpbmUgVElPQ1NFUl9URU1UIDB4MDEKKyNkZWZpbmUgVENPT0ZGIDAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIFRDT09OIDEgIAotI2RlZmluZSBUQ0lPRkYgMiAgCi0jZGVmaW5lIFRDSU9OIDMgIAotI2RlZmluZSBUQ0lGTFVTSCAwICAKKyNkZWZpbmUgVENPT04gMQorI2RlZmluZSBUQ0lPRkYgMgorI2RlZmluZSBUQ0lPTiAzCisjZGVmaW5lIFRDSUZMVVNIIDAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIFRDT0ZMVVNIIDEgIAotI2RlZmluZSBUQ0lPRkxVU0ggMiAgCi0jZGVmaW5lIFRDU0FOT1cgVENTRVRTICAKLSNkZWZpbmUgVENTQURSQUlOIFRDU0VUU1cgIAorI2RlZmluZSBUQ09GTFVTSCAxCisjZGVmaW5lIFRDSU9GTFVTSCAyCisjZGVmaW5lIFRDU0FOT1cgVENTRVRTCisjZGVmaW5lIFRDU0FEUkFJTiBUQ1NFVFNXCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBUQ1NBRkxVU0ggVENTRVRTRiAgCisjZGVmaW5lIFRDU0FGTFVTSCBUQ1NFVFNGCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gtbWlwcy9hc20vdGVybWlvcy5oIGIvbGliYy9rZXJuZWwvYXJjaC1taXBzL2FzbS90ZXJtaW9zLmgKaW5kZXggZDZmMjMwZS4uZTE3YWNkOCAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvYXJjaC1taXBzL2FzbS90ZXJtaW9zLmgKKysrIGIvbGliYy9rZXJuZWwvYXJjaC1taXBzL2FzbS90ZXJtaW9zLmgKQEAgLTY4LDIwICs2OCwyMCBAQAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBjaGFyIGNfY2NbTkNDU107CiB9OwotI2RlZmluZSBUSU9DTV9MRSAweDAwMSAgCi0jZGVmaW5lIFRJT0NNX0RUUiAweDAwMiAgCisjZGVmaW5lIFRJT0NNX0xFIDB4MDAxCisjZGVmaW5lIFRJT0NNX0RUUiAweDAwMgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgVElPQ01fUlRTIDB4MDA0ICAKLSNkZWZpbmUgVElPQ01fU1QgMHgwMTAgIAotI2RlZmluZSBUSU9DTV9TUiAweDAyMCAgCi0jZGVmaW5lIFRJT0NNX0NUUyAweDA0MCAgCisjZGVmaW5lIFRJT0NNX1JUUyAweDAwNAorI2RlZmluZSBUSU9DTV9TVCAweDAxMAorI2RlZmluZSBUSU9DTV9TUiAweDAyMAorI2RlZmluZSBUSU9DTV9DVFMgMHgwNDAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIFRJT0NNX0NBUiAweDEwMCAgCisjZGVmaW5lIFRJT0NNX0NBUiAweDEwMAogI2RlZmluZSBUSU9DTV9DRCBUSU9DTV9DQVIKLSNkZWZpbmUgVElPQ01fUk5HIDB4MjAwICAKKyNkZWZpbmUgVElPQ01fUk5HIDB4MjAwCiAjZGVmaW5lIFRJT0NNX1JJIFRJT0NNX1JORwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgVElPQ01fRFNSIDB4NDAwICAKKyNkZWZpbmUgVElPQ01fRFNSIDB4NDAwCiAjZGVmaW5lIFRJT0NNX09VVDEgMHgyMDAwCiAjZGVmaW5lIFRJT0NNX09VVDIgMHg0MDAwCiAjZGVmaW5lIFRJT0NNX0xPT1AgMHg4MDAwCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLW1pcHMvYXNtL3VhY2Nlc3MuaCBiL2xpYmMva2VybmVsL2FyY2gtbWlwcy9hc20vdWFjY2Vzcy5oCmluZGV4IDM3MDNhZjMuLjk2MDI1ZDMgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2FyY2gtbWlwcy9hc20vdWFjY2Vzcy5oCisrKyBiL2xpYmMva2VybmVsL2FyY2gtbWlwcy9hc20vdWFjY2Vzcy5oCkBAIC0yMywzNSArMjMsNDUgQEAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjaW5jbHVkZSA8bGludXgvdGhyZWFkX2luZm8uaD4KICNpbmNsdWRlIDxhc20tZ2VuZXJpYy91YWNjZXNzLmg+CisjZGVmaW5lIF9fVUFfTElNSVQgMHg4MDAwMDAwMFVMCisjZGVmaW5lIF9fVUFfQUREUiAiLndvcmQiCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBfX1VBX0xBICJsYSIKKyNkZWZpbmUgX19VQV9BRERVICJhZGR1IgorI2RlZmluZSBfX1VBX3QwICIkOCIKKyNkZWZpbmUgX19VQV90MSAiJDkiCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLRVJORUxfRFMgKChtbV9zZWdtZW50X3QpIHsgMFVMIH0pCiAjZGVmaW5lIFVTRVJfRFMgKChtbV9zZWdtZW50X3QpIHsgX19VQV9MSU1JVCB9KQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVkVSSUZZX1JFQUQgMAogI2RlZmluZSBWRVJJRllfV1JJVEUgMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgZ2V0X2RzKCkgKEtFUk5FTF9EUykKICNkZWZpbmUgZ2V0X2ZzKCkgKGN1cnJlbnRfdGhyZWFkX2luZm8oKS0+YWRkcl9saW1pdCkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIHNldF9mcyh4KSAoY3VycmVudF90aHJlYWRfaW5mbygpLT5hZGRyX2xpbWl0ID0gKHgpKQogI2RlZmluZSBzZWdtZW50X2VxKGEsIGIpICgoYSkuc2VnID09IChiKS5zZWcpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX3VhX3NpemUoc2l6ZSkgICAoKF9fYnVpbHRpbl9jb25zdGFudF9wKHNpemUpICYmIChzaWduZWQgbG9uZykgKHNpemUpID4gMCkgPyAwIDogKHNpemUpKQogI2RlZmluZSBfX2FjY2Vzc19tYXNrIGdldF9mcygpLnNlZwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19hY2Nlc3Nfb2soYWRkciwgc2l6ZSwgbWFzaykgICAoKChzaWduZWQgbG9uZykoKG1hc2spICYgKChhZGRyKSB8ICgoYWRkcikgKyAoc2l6ZSkpIHwgX191YV9zaXplKHNpemUpKSkpID09IDApCiAjZGVmaW5lIGFjY2Vzc19vayh0eXBlLCBhZGRyLCBzaXplKSAgIGxpa2VseShfX2FjY2Vzc19vaygodW5zaWduZWQgbG9uZykoYWRkciksIChzaXplKSwgX19hY2Nlc3NfbWFzaykpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBwdXRfdXNlcih4LHB0cikgICBfX3B1dF91c2VyX2NoZWNrKCh4KSwgKHB0ciksIHNpemVvZigqKHB0cikpKQogI2RlZmluZSBnZXRfdXNlcih4LHB0cikgICBfX2dldF91c2VyX2NoZWNrKCh4KSwgKHB0ciksIHNpemVvZigqKHB0cikpKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19wdXRfdXNlcih4LHB0cikgICBfX3B1dF91c2VyX25vY2hlY2soKHgpLCAocHRyKSwgc2l6ZW9mKCoocHRyKSkpCiAjZGVmaW5lIF9fZ2V0X3VzZXIoeCxwdHIpICAgX19nZXRfdXNlcl9ub2NoZWNrKCh4KSwgKHB0ciksIHNpemVvZigqKHB0cikpKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBfX2xhcmdlX3N0cnVjdCB7IHVuc2lnbmVkIGxvbmcgYnVmWzEwMF07IH07CiAjZGVmaW5lIF9fbSh4KSAoKihzdHJ1Y3QgX19sYXJnZV9zdHJ1Y3QgX191c2VyICopKHgpKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgX19HRVRfVVNFUl9EVyh2YWwsIHB0cikgX19nZXRfdXNlcl9hc21fbGwzMih2YWwsIHB0cikKICNkZWZpbmUgX19nZXRfdXNlcl9jb21tb24odmFsLCBzaXplLCBwdHIpICBkbyB7ICAgc3dpdGNoIChzaXplKSB7ICAgY2FzZSAxOiBfX2dldF91c2VyX2FzbSh2YWwsICJsYiIsIHB0cik7IGJyZWFrOyAgIGNhc2UgMjogX19nZXRfdXNlcl9hc20odmFsLCAibGgiLCBwdHIpOyBicmVhazsgICBjYXNlIDQ6IF9fZ2V0X3VzZXJfYXNtKHZhbCwgImx3IiwgcHRyKTsgYnJlYWs7ICAgY2FzZSA4OiBfX0dFVF9VU0VSX0RXKHZhbCwgcHRyKTsgYnJlYWs7ICAgZGVmYXVsdDogX19nZXRfdXNlcl91bmtub3duKCk7IGJyZWFrOyAgIH0gIH0gd2hpbGUgKDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX2dldF91c2VyX25vY2hlY2soeCwgcHRyLCBzaXplKSAgKHsgICBsb25nIF9fZ3VfZXJyOyAgICAgX19nZXRfdXNlcl9jb21tb24oKHgpLCBzaXplLCBwdHIpOyAgIF9fZ3VfZXJyOyAgfSkKICNkZWZpbmUgX19nZXRfdXNlcl9jaGVjayh4LCBwdHIsIHNpemUpICAoeyAgIGxvbmcgX19ndV9lcnIgPSAtRUZBVUxUOyAgIGNvbnN0IF9fdHlwZW9mX18oKihwdHIpKSBfX3VzZXIgKiBfX2d1X3B0ciA9IChwdHIpOyAgICAgaWYgKGxpa2VseShhY2Nlc3Nfb2soVkVSSUZZX1JFQUQsIF9fZ3VfcHRyLCBzaXplKSkpICAgX19nZXRfdXNlcl9jb21tb24oKHgpLCBzaXplLCBfX2d1X3B0cik7ICAgICBfX2d1X2VycjsgIH0pCiAjZGVmaW5lIF9fZ2V0X3VzZXJfYXNtKHZhbCwgaW5zbiwgYWRkcikgIHsgICBsb25nIF9fZ3VfdG1wOyAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oICAgIjE6CSIgaW5zbiAiCSUxLCAlMwkJCQlcbiIgICAiMjoJCQkJCQkJXG4iICAgIgkuc2VjdGlvbiAuZml4dXAsXCJheFwiCQkJCVxuIiAgICIzOglsaQklMCwgJTQJCQkJCVxuIiAgICIJagkyYgkJCQkJXG4iICAgIgkucHJldmlvdXMJCQkJCVxuIiAgICIJLnNlY3Rpb24gX19leF90YWJsZSxcImFcIgkJCVxuIiAgICIJIl9fVUFfQUREUiAiXHQxYiwgM2IJCQkJXG4iICAgIgkucHJldmlvdXMJCQkJCVxuIiAgIDogIj1yIiAoX19ndV9lcnIpLCAiPXIiIChfX2d1X3RtcCkgICA6ICIwIiAoMCksICJvIiAoX19tKGFkZHIpKSwgImkiICgtRUZBVUxUKSk7ICAgICAodmFsKSA9IChfX3R5cGVvZl9fKCooYWRkcikpKSBfX2d1X3RtcDsgIH0KLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fZ2V0X3VzZXJfYXNtX2xsMzIodmFsLCBhZGRyKSAgeyAgIHVuaW9uIHsgICB1bnNpZ25lZCBsb25nIGxvbmcgbDsgICBfX3R5cGVvZl9fKCooYWRkcikpIHQ7ICAgfSBfX2d1X3RtcDsgICAgIF9fYXNtX18gX192b2xhdGlsZV9fKCAgICIxOglsdwklMSwgKCUzKQkJCQlcbiIgICAiMjoJbHcJJUQxLCA0KCUzKQkJCQlcbiIgICAiMzoJLnNlY3Rpb24JLmZpeHVwLFwiYXhcIgkJCVxuIiAgICI0OglsaQklMCwgJTQJCQkJCVxuIiAgICIJbW92ZQklMSwgJDAJCQkJCVxuIiAgICIJbW92ZQklRDEsICQwCQkJCQlcbiIgICAiCWoJM2IJCQkJCVxuIiAgICIJLnByZXZpb3VzCQkJCQlcbiIgICAiCS5zZWN0aW9uCV9fZXhfdGFibGUsXCJhXCIJCVxuIiAgICIJIiBfX1VBX0FERFIgIgkxYiwgNGIJCQkJXG4iICAgIgkiIF9fVUFfQUREUiAiCTJiLCA0YgkJCQlcbiIgICAiCS5wcmV2aW91cwkJCQkJXG4iICAgOiAiPXIiIChfX2d1X2VyciksICI9JnIiIChfX2d1X3RtcC5sKSAgIDogIjAiICgwKSwgInIiIChhZGRyKSwgImkiICgtRUZBVUxUKSk7ICAgICAodmFsKSA9IF9fZ3VfdG1wLnQ7ICB9CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBfX1BVVF9VU0VSX0RXKHB0cikgX19wdXRfdXNlcl9hc21fbGwzMihwdHIpCiAjZGVmaW5lIF9fcHV0X3VzZXJfbm9jaGVjayh4LCBwdHIsIHNpemUpICAoeyAgIF9fdHlwZW9mX18oKihwdHIpKSBfX3B1X3ZhbDsgICBsb25nIF9fcHVfZXJyID0gMDsgICAgIF9fcHVfdmFsID0gKHgpOyAgIHN3aXRjaCAoc2l6ZSkgeyAgIGNhc2UgMTogX19wdXRfdXNlcl9hc20oInNiIiwgcHRyKTsgYnJlYWs7ICAgY2FzZSAyOiBfX3B1dF91c2VyX2FzbSgic2giLCBwdHIpOyBicmVhazsgICBjYXNlIDQ6IF9fcHV0X3VzZXJfYXNtKCJzdyIsIHB0cik7IGJyZWFrOyAgIGNhc2UgODogX19QVVRfVVNFUl9EVyhwdHIpOyBicmVhazsgICBkZWZhdWx0OiBfX3B1dF91c2VyX3Vua25vd24oKTsgYnJlYWs7ICAgfSAgIF9fcHVfZXJyOyAgfSkKICNkZWZpbmUgX19wdXRfdXNlcl9jaGVjayh4LCBwdHIsIHNpemUpICAoeyAgIF9fdHlwZW9mX18oKihwdHIpKSBfX3VzZXIgKl9fcHVfYWRkciA9IChwdHIpOyAgIF9fdHlwZW9mX18oKihwdHIpKSBfX3B1X3ZhbCA9ICh4KTsgICBsb25nIF9fcHVfZXJyID0gLUVGQVVMVDsgICAgIGlmIChsaWtlbHkoYWNjZXNzX29rKFZFUklGWV9XUklURSwgX19wdV9hZGRyLCBzaXplKSkpIHsgICBzd2l0Y2ggKHNpemUpIHsgICBjYXNlIDE6IF9fcHV0X3VzZXJfYXNtKCJzYiIsIF9fcHVfYWRkcik7IGJyZWFrOyAgIGNhc2UgMjogX19wdXRfdXNlcl9hc20oInNoIiwgX19wdV9hZGRyKTsgYnJlYWs7ICAgY2FzZSA0OiBfX3B1dF91c2VyX2FzbSgic3ciLCBfX3B1X2FkZHIpOyBicmVhazsgICBjYXNlIDg6IF9fUFVUX1VTRVJfRFcoX19wdV9hZGRyKTsgYnJlYWs7ICAgZGVmYXVsdDogX19wdXRfdXNlcl91bmtub3duKCk7IGJyZWFrOyAgIH0gICB9ICAgX19wdV9lcnI7ICB9KQogI2RlZmluZSBfX3B1dF91c2VyX2FzbShpbnNuLCBwdHIpICB7ICAgX19hc21fXyBfX3ZvbGF0aWxlX18oICAgIjE6CSIgaW5zbiAiCSV6MiwgJTMJCSMgX19wdXRfdXNlcl9hc21cbiIgICAiMjoJCQkJCQkJXG4iICAgIgkuc2VjdGlvbgkuZml4dXAsXCJheFwiCQkJXG4iICAgIjM6CWxpCSUwLCAlNAkJCQkJXG4iICAgIglqCTJiCQkJCQlcbiIgICAiCS5wcmV2aW91cwkJCQkJXG4iICAgIgkuc2VjdGlvbglfX2V4X3RhYmxlLFwiYVwiCQlcbiIgICAiCSIgX19VQV9BRERSICIJMWIsIDNiCQkJCVxuIiAgICIJLnByZXZpb3VzCQkJCQlcbiIgICA6ICI9ciIgKF9fcHVfZXJyKSAgIDogIjAiICgwKSwgIkpyIiAoX19wdV92YWwpLCAibyIgKF9fbShwdHIpKSwgICAiaSIgKC1FRkFVTFQpKTsgIH0KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gtbWlwcy9hc20vdWNvbnRleHQuaCBiL2xpYmMva2VybmVsL2FyY2gtbWlwcy9hc20vdWNvbnRleHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYTRkNjdkCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvYXJjaC1taXBzL2FzbS91Y29udGV4dC5oCkBAIC0wLDAgKzEsMTkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy91Y29udGV4dC5oPgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC1taXBzL2FzbS91bmlzdGQuaCBiL2xpYmMva2VybmVsL2FyY2gtbWlwcy9hc20vdW5pc3RkLmgKaW5kZXggMzhlODRjYy4uZmRhMWI3MiAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvYXJjaC1taXBzL2FzbS91bmlzdGQuaAorKysgYi9saWJjL2tlcm5lbC9hcmNoLW1pcHMvYXNtL3VuaXN0ZC5oCkBAIC0xOTMsNyArMTkzLDcgQEAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfc3lzZnMgKF9fTlJfTGludXggKyAxMzUpCiAjZGVmaW5lIF9fTlJfcGVyc29uYWxpdHkgKF9fTlJfTGludXggKyAxMzYpCi0jZGVmaW5lIF9fTlJfYWZzX3N5c2NhbGwgKF9fTlJfTGludXggKyAxMzcpICAKKyNkZWZpbmUgX19OUl9hZnNfc3lzY2FsbCAoX19OUl9MaW51eCArIDEzNykKICNkZWZpbmUgX19OUl9zZXRmc3VpZCAoX19OUl9MaW51eCArIDEzOCkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfc2V0ZnNnaWQgKF9fTlJfTGludXggKyAxMzkpCkBAIC00MzMsNzQ5ICs0MzMsODE0IEBACiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3BpcGUyIChfX05SX0xpbnV4ICsgMzI4KQogI2RlZmluZSBfX05SX2lub3RpZnlfaW5pdDEgKF9fTlJfTGludXggKyAzMjkpCi0jZGVmaW5lIF9fTlJfTGludXhfc3lzY2FsbHMgMzI5CisjZGVmaW5lIF9fTlJfcHJlYWR2IChfX05SX0xpbnV4ICsgMzMwKQorI2RlZmluZSBfX05SX3B3cml0ZXYgKF9fTlJfTGludXggKyAzMzEpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBfX05SX3J0X3Rnc2lncXVldWVpbmZvIChfX05SX0xpbnV4ICsgMzMyKQorI2RlZmluZSBfX05SX3BlcmZfZXZlbnRfb3BlbiAoX19OUl9MaW51eCArIDMzMykKKyNkZWZpbmUgX19OUl9hY2NlcHQ0IChfX05SX0xpbnV4ICsgMzM0KQorI2RlZmluZSBfX05SX3JlY3ZtbXNnIChfX05SX0xpbnV4ICsgMzM1KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgX19OUl9mYW5vdGlmeV9pbml0IChfX05SX0xpbnV4ICsgMzM2KQorI2RlZmluZSBfX05SX2Zhbm90aWZ5X21hcmsgKF9fTlJfTGludXggKyAzMzcpCisjZGVmaW5lIF9fTlJfcHJsaW1pdDY0IChfX05SX0xpbnV4ICsgMzM4KQorI2RlZmluZSBfX05SX25hbWVfdG9faGFuZGxlX2F0IChfX05SX0xpbnV4ICsgMzM5KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgX19OUl9vcGVuX2J5X2hhbmRsZV9hdCAoX19OUl9MaW51eCArIDM0MCkKKyNkZWZpbmUgX19OUl9jbG9ja19hZGp0aW1lIChfX05SX0xpbnV4ICsgMzQxKQorI2RlZmluZSBfX05SX3N5bmNmcyAoX19OUl9MaW51eCArIDM0MikKKyNkZWZpbmUgX19OUl9zZW5kbW1zZyAoX19OUl9MaW51eCArIDM0MykKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIF9fTlJfc2V0bnMgKF9fTlJfTGludXggKyAzNDQpCisjZGVmaW5lIF9fTlJfcHJvY2Vzc192bV9yZWFkdiAoX19OUl9MaW51eCArIDM0NSkKKyNkZWZpbmUgX19OUl9wcm9jZXNzX3ZtX3dyaXRldiAoX19OUl9MaW51eCArIDM0NikKKyNkZWZpbmUgX19OUl9MaW51eF9zeXNjYWxscyAzNDYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZW5kaWYKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfTzMyX0xpbnV4IDQwMDAKLSNkZWZpbmUgX19OUl9PMzJfTGludXhfc3lzY2FsbHMgMzI5CisjZGVmaW5lIF9fTlJfTzMyX0xpbnV4X3N5c2NhbGxzIDM0NgogI2lmIF9NSVBTX1NJTSA9PSBfTUlQU19TSU1fQUJJNjQKLSNkZWZpbmUgX19OUl9MaW51eCA1MDAwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBfX05SX0xpbnV4IDUwMDAKICNkZWZpbmUgX19OUl9yZWFkIChfX05SX0xpbnV4ICsgMCkKICNkZWZpbmUgX19OUl93cml0ZSAoX19OUl9MaW51eCArIDEpCiAjZGVmaW5lIF9fTlJfb3BlbiAoX19OUl9MaW51eCArIDIpCi0jZGVmaW5lIF9fTlJfY2xvc2UgKF9fTlJfTGludXggKyAzKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgX19OUl9jbG9zZSAoX19OUl9MaW51eCArIDMpCiAjZGVmaW5lIF9fTlJfc3RhdCAoX19OUl9MaW51eCArIDQpCiAjZGVmaW5lIF9fTlJfZnN0YXQgKF9fTlJfTGludXggKyA1KQogI2RlZmluZSBfX05SX2xzdGF0IChfX05SX0xpbnV4ICsgNikKLSNkZWZpbmUgX19OUl9wb2xsIChfX05SX0xpbnV4ICsgNykKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIF9fTlJfcG9sbCAoX19OUl9MaW51eCArIDcpCiAjZGVmaW5lIF9fTlJfbHNlZWsgKF9fTlJfTGludXggKyA4KQogI2RlZmluZSBfX05SX21tYXAgKF9fTlJfTGludXggKyA5KQogI2RlZmluZSBfX05SX21wcm90ZWN0IChfX05SX0xpbnV4ICsgMTApCi0jZGVmaW5lIF9fTlJfbXVubWFwIChfX05SX0xpbnV4ICsgMTEpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBfX05SX211bm1hcCAoX19OUl9MaW51eCArIDExKQogI2RlZmluZSBfX05SX2JyayAoX19OUl9MaW51eCArIDEyKQogI2RlZmluZSBfX05SX3J0X3NpZ2FjdGlvbiAoX19OUl9MaW51eCArIDEzKQogI2RlZmluZSBfX05SX3J0X3NpZ3Byb2NtYXNrIChfX05SX0xpbnV4ICsgMTQpCi0jZGVmaW5lIF9fTlJfaW9jdGwgKF9fTlJfTGludXggKyAxNSkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIF9fTlJfaW9jdGwgKF9fTlJfTGludXggKyAxNSkKICNkZWZpbmUgX19OUl9wcmVhZDY0IChfX05SX0xpbnV4ICsgMTYpCiAjZGVmaW5lIF9fTlJfcHdyaXRlNjQgKF9fTlJfTGludXggKyAxNykKICNkZWZpbmUgX19OUl9yZWFkdiAoX19OUl9MaW51eCArIDE4KQotI2RlZmluZSBfX05SX3dyaXRldiAoX19OUl9MaW51eCArIDE5KQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgX19OUl93cml0ZXYgKF9fTlJfTGludXggKyAxOSkKICNkZWZpbmUgX19OUl9hY2Nlc3MgKF9fTlJfTGludXggKyAyMCkKICNkZWZpbmUgX19OUl9waXBlIChfX05SX0xpbnV4ICsgMjEpCiAjZGVmaW5lIF9fTlJfX25ld3NlbGVjdCAoX19OUl9MaW51eCArIDIyKQotI2RlZmluZSBfX05SX3NjaGVkX3lpZWxkIChfX05SX0xpbnV4ICsgMjMpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBfX05SX3NjaGVkX3lpZWxkIChfX05SX0xpbnV4ICsgMjMpCiAjZGVmaW5lIF9fTlJfbXJlbWFwIChfX05SX0xpbnV4ICsgMjQpCiAjZGVmaW5lIF9fTlJfbXN5bmMgKF9fTlJfTGludXggKyAyNSkKICNkZWZpbmUgX19OUl9taW5jb3JlIChfX05SX0xpbnV4ICsgMjYpCi0jZGVmaW5lIF9fTlJfbWFkdmlzZSAoX19OUl9MaW51eCArIDI3KQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgX19OUl9tYWR2aXNlIChfX05SX0xpbnV4ICsgMjcpCiAjZGVmaW5lIF9fTlJfc2htZ2V0IChfX05SX0xpbnV4ICsgMjgpCiAjZGVmaW5lIF9fTlJfc2htYXQgKF9fTlJfTGludXggKyAyOSkKICNkZWZpbmUgX19OUl9zaG1jdGwgKF9fTlJfTGludXggKyAzMCkKLSNkZWZpbmUgX19OUl9kdXAgKF9fTlJfTGludXggKyAzMSkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIF9fTlJfZHVwIChfX05SX0xpbnV4ICsgMzEpCiAjZGVmaW5lIF9fTlJfZHVwMiAoX19OUl9MaW51eCArIDMyKQogI2RlZmluZSBfX05SX3BhdXNlIChfX05SX0xpbnV4ICsgMzMpCiAjZGVmaW5lIF9fTlJfbmFub3NsZWVwIChfX05SX0xpbnV4ICsgMzQpCi0jZGVmaW5lIF9fTlJfZ2V0aXRpbWVyIChfX05SX0xpbnV4ICsgMzUpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBfX05SX2dldGl0aW1lciAoX19OUl9MaW51eCArIDM1KQogI2RlZmluZSBfX05SX3NldGl0aW1lciAoX19OUl9MaW51eCArIDM2KQogI2RlZmluZSBfX05SX2FsYXJtIChfX05SX0xpbnV4ICsgMzcpCiAjZGVmaW5lIF9fTlJfZ2V0cGlkIChfX05SX0xpbnV4ICsgMzgpCi0jZGVmaW5lIF9fTlJfc2VuZGZpbGUgKF9fTlJfTGludXggKyAzOSkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIF9fTlJfc2VuZGZpbGUgKF9fTlJfTGludXggKyAzOSkKICNkZWZpbmUgX19OUl9zb2NrZXQgKF9fTlJfTGludXggKyA0MCkKICNkZWZpbmUgX19OUl9jb25uZWN0IChfX05SX0xpbnV4ICsgNDEpCiAjZGVmaW5lIF9fTlJfYWNjZXB0IChfX05SX0xpbnV4ICsgNDIpCi0jZGVmaW5lIF9fTlJfc2VuZHRvIChfX05SX0xpbnV4ICsgNDMpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBfX05SX3NlbmR0byAoX19OUl9MaW51eCArIDQzKQogI2RlZmluZSBfX05SX3JlY3Zmcm9tIChfX05SX0xpbnV4ICsgNDQpCiAjZGVmaW5lIF9fTlJfc2VuZG1zZyAoX19OUl9MaW51eCArIDQ1KQogI2RlZmluZSBfX05SX3JlY3Ztc2cgKF9fTlJfTGludXggKyA0NikKLSNkZWZpbmUgX19OUl9zaHV0ZG93biAoX19OUl9MaW51eCArIDQ3KQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgX19OUl9zaHV0ZG93biAoX19OUl9MaW51eCArIDQ3KQogI2RlZmluZSBfX05SX2JpbmQgKF9fTlJfTGludXggKyA0OCkKICNkZWZpbmUgX19OUl9saXN0ZW4gKF9fTlJfTGludXggKyA0OSkKICNkZWZpbmUgX19OUl9nZXRzb2NrbmFtZSAoX19OUl9MaW51eCArIDUwKQotI2RlZmluZSBfX05SX2dldHBlZXJuYW1lIChfX05SX0xpbnV4ICsgNTEpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBfX05SX2dldHBlZXJuYW1lIChfX05SX0xpbnV4ICsgNTEpCiAjZGVmaW5lIF9fTlJfc29ja2V0cGFpciAoX19OUl9MaW51eCArIDUyKQogI2RlZmluZSBfX05SX3NldHNvY2tvcHQgKF9fTlJfTGludXggKyA1MykKICNkZWZpbmUgX19OUl9nZXRzb2Nrb3B0IChfX05SX0xpbnV4ICsgNTQpCi0jZGVmaW5lIF9fTlJfY2xvbmUgKF9fTlJfTGludXggKyA1NSkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIF9fTlJfY2xvbmUgKF9fTlJfTGludXggKyA1NSkKICNkZWZpbmUgX19OUl9mb3JrIChfX05SX0xpbnV4ICsgNTYpCiAjZGVmaW5lIF9fTlJfZXhlY3ZlIChfX05SX0xpbnV4ICsgNTcpCiAjZGVmaW5lIF9fTlJfZXhpdCAoX19OUl9MaW51eCArIDU4KQotI2RlZmluZSBfX05SX3dhaXQ0IChfX05SX0xpbnV4ICsgNTkpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBfX05SX3dhaXQ0IChfX05SX0xpbnV4ICsgNTkpCiAjZGVmaW5lIF9fTlJfa2lsbCAoX19OUl9MaW51eCArIDYwKQogI2RlZmluZSBfX05SX3VuYW1lIChfX05SX0xpbnV4ICsgNjEpCiAjZGVmaW5lIF9fTlJfc2VtZ2V0IChfX05SX0xpbnV4ICsgNjIpCi0jZGVmaW5lIF9fTlJfc2Vtb3AgKF9fTlJfTGludXggKyA2MykKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIF9fTlJfc2Vtb3AgKF9fTlJfTGludXggKyA2MykKICNkZWZpbmUgX19OUl9zZW1jdGwgKF9fTlJfTGludXggKyA2NCkKICNkZWZpbmUgX19OUl9zaG1kdCAoX19OUl9MaW51eCArIDY1KQogI2RlZmluZSBfX05SX21zZ2dldCAoX19OUl9MaW51eCArIDY2KQotI2RlZmluZSBfX05SX21zZ3NuZCAoX19OUl9MaW51eCArIDY3KQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgX19OUl9tc2dzbmQgKF9fTlJfTGludXggKyA2NykKICNkZWZpbmUgX19OUl9tc2dyY3YgKF9fTlJfTGludXggKyA2OCkKICNkZWZpbmUgX19OUl9tc2djdGwgKF9fTlJfTGludXggKyA2OSkKICNkZWZpbmUgX19OUl9mY250bCAoX19OUl9MaW51eCArIDcwKQotI2RlZmluZSBfX05SX2Zsb2NrIChfX05SX0xpbnV4ICsgNzEpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBfX05SX2Zsb2NrIChfX05SX0xpbnV4ICsgNzEpCiAjZGVmaW5lIF9fTlJfZnN5bmMgKF9fTlJfTGludXggKyA3MikKICNkZWZpbmUgX19OUl9mZGF0YXN5bmMgKF9fTlJfTGludXggKyA3MykKICNkZWZpbmUgX19OUl90cnVuY2F0ZSAoX19OUl9MaW51eCArIDc0KQotI2RlZmluZSBfX05SX2Z0cnVuY2F0ZSAoX19OUl9MaW51eCArIDc1KQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgX19OUl9mdHJ1bmNhdGUgKF9fTlJfTGludXggKyA3NSkKICNkZWZpbmUgX19OUl9nZXRkZW50cyAoX19OUl9MaW51eCArIDc2KQogI2RlZmluZSBfX05SX2dldGN3ZCAoX19OUl9MaW51eCArIDc3KQogI2RlZmluZSBfX05SX2NoZGlyIChfX05SX0xpbnV4ICsgNzgpCi0jZGVmaW5lIF9fTlJfZmNoZGlyIChfX05SX0xpbnV4ICsgNzkpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBfX05SX2ZjaGRpciAoX19OUl9MaW51eCArIDc5KQogI2RlZmluZSBfX05SX3JlbmFtZSAoX19OUl9MaW51eCArIDgwKQogI2RlZmluZSBfX05SX21rZGlyIChfX05SX0xpbnV4ICsgODEpCiAjZGVmaW5lIF9fTlJfcm1kaXIgKF9fTlJfTGludXggKyA4MikKLSNkZWZpbmUgX19OUl9jcmVhdCAoX19OUl9MaW51eCArIDgzKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgX19OUl9jcmVhdCAoX19OUl9MaW51eCArIDgzKQogI2RlZmluZSBfX05SX2xpbmsgKF9fTlJfTGludXggKyA4NCkKICNkZWZpbmUgX19OUl91bmxpbmsgKF9fTlJfTGludXggKyA4NSkKICNkZWZpbmUgX19OUl9zeW1saW5rIChfX05SX0xpbnV4ICsgODYpCi0jZGVmaW5lIF9fTlJfcmVhZGxpbmsgKF9fTlJfTGludXggKyA4NykKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIF9fTlJfcmVhZGxpbmsgKF9fTlJfTGludXggKyA4NykKICNkZWZpbmUgX19OUl9jaG1vZCAoX19OUl9MaW51eCArIDg4KQogI2RlZmluZSBfX05SX2ZjaG1vZCAoX19OUl9MaW51eCArIDg5KQogI2RlZmluZSBfX05SX2Nob3duIChfX05SX0xpbnV4ICsgOTApCi0jZGVmaW5lIF9fTlJfZmNob3duIChfX05SX0xpbnV4ICsgOTEpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBfX05SX2ZjaG93biAoX19OUl9MaW51eCArIDkxKQogI2RlZmluZSBfX05SX2xjaG93biAoX19OUl9MaW51eCArIDkyKQogI2RlZmluZSBfX05SX3VtYXNrIChfX05SX0xpbnV4ICsgOTMpCiAjZGVmaW5lIF9fTlJfZ2V0dGltZW9mZGF5IChfX05SX0xpbnV4ICsgOTQpCi0jZGVmaW5lIF9fTlJfZ2V0cmxpbWl0IChfX05SX0xpbnV4ICsgOTUpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBfX05SX2dldHJsaW1pdCAoX19OUl9MaW51eCArIDk1KQogI2RlZmluZSBfX05SX2dldHJ1c2FnZSAoX19OUl9MaW51eCArIDk2KQogI2RlZmluZSBfX05SX3N5c2luZm8gKF9fTlJfTGludXggKyA5NykKICNkZWZpbmUgX19OUl90aW1lcyAoX19OUl9MaW51eCArIDk4KQotI2RlZmluZSBfX05SX3B0cmFjZSAoX19OUl9MaW51eCArIDk5KQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgX19OUl9wdHJhY2UgKF9fTlJfTGludXggKyA5OSkKICNkZWZpbmUgX19OUl9nZXR1aWQgKF9fTlJfTGludXggKyAxMDApCiAjZGVmaW5lIF9fTlJfc3lzbG9nIChfX05SX0xpbnV4ICsgMTAxKQogI2RlZmluZSBfX05SX2dldGdpZCAoX19OUl9MaW51eCArIDEwMikKLSNkZWZpbmUgX19OUl9zZXR1aWQgKF9fTlJfTGludXggKyAxMDMpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBfX05SX3NldHVpZCAoX19OUl9MaW51eCArIDEwMykKICNkZWZpbmUgX19OUl9zZXRnaWQgKF9fTlJfTGludXggKyAxMDQpCiAjZGVmaW5lIF9fTlJfZ2V0ZXVpZCAoX19OUl9MaW51eCArIDEwNSkKICNkZWZpbmUgX19OUl9nZXRlZ2lkIChfX05SX0xpbnV4ICsgMTA2KQotI2RlZmluZSBfX05SX3NldHBnaWQgKF9fTlJfTGludXggKyAxMDcpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBfX05SX3NldHBnaWQgKF9fTlJfTGludXggKyAxMDcpCiAjZGVmaW5lIF9fTlJfZ2V0cHBpZCAoX19OUl9MaW51eCArIDEwOCkKICNkZWZpbmUgX19OUl9nZXRwZ3JwIChfX05SX0xpbnV4ICsgMTA5KQogI2RlZmluZSBfX05SX3NldHNpZCAoX19OUl9MaW51eCArIDExMCkKLSNkZWZpbmUgX19OUl9zZXRyZXVpZCAoX19OUl9MaW51eCArIDExMSkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIF9fTlJfc2V0cmV1aWQgKF9fTlJfTGludXggKyAxMTEpCiAjZGVmaW5lIF9fTlJfc2V0cmVnaWQgKF9fTlJfTGludXggKyAxMTIpCiAjZGVmaW5lIF9fTlJfZ2V0Z3JvdXBzIChfX05SX0xpbnV4ICsgMTEzKQogI2RlZmluZSBfX05SX3NldGdyb3VwcyAoX19OUl9MaW51eCArIDExNCkKLSNkZWZpbmUgX19OUl9zZXRyZXN1aWQgKF9fTlJfTGludXggKyAxMTUpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBfX05SX3NldHJlc3VpZCAoX19OUl9MaW51eCArIDExNSkKICNkZWZpbmUgX19OUl9nZXRyZXN1aWQgKF9fTlJfTGludXggKyAxMTYpCiAjZGVmaW5lIF9fTlJfc2V0cmVzZ2lkIChfX05SX0xpbnV4ICsgMTE3KQogI2RlZmluZSBfX05SX2dldHJlc2dpZCAoX19OUl9MaW51eCArIDExOCkKLSNkZWZpbmUgX19OUl9nZXRwZ2lkIChfX05SX0xpbnV4ICsgMTE5KQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgX19OUl9nZXRwZ2lkIChfX05SX0xpbnV4ICsgMTE5KQogI2RlZmluZSBfX05SX3NldGZzdWlkIChfX05SX0xpbnV4ICsgMTIwKQogI2RlZmluZSBfX05SX3NldGZzZ2lkIChfX05SX0xpbnV4ICsgMTIxKQogI2RlZmluZSBfX05SX2dldHNpZCAoX19OUl9MaW51eCArIDEyMikKLSNkZWZpbmUgX19OUl9jYXBnZXQgKF9fTlJfTGludXggKyAxMjMpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBfX05SX2NhcGdldCAoX19OUl9MaW51eCArIDEyMykKICNkZWZpbmUgX19OUl9jYXBzZXQgKF9fTlJfTGludXggKyAxMjQpCiAjZGVmaW5lIF9fTlJfcnRfc2lncGVuZGluZyAoX19OUl9MaW51eCArIDEyNSkKICNkZWZpbmUgX19OUl9ydF9zaWd0aW1lZHdhaXQgKF9fTlJfTGludXggKyAxMjYpCi0jZGVmaW5lIF9fTlJfcnRfc2lncXVldWVpbmZvIChfX05SX0xpbnV4ICsgMTI3KQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgX19OUl9ydF9zaWdxdWV1ZWluZm8gKF9fTlJfTGludXggKyAxMjcpCiAjZGVmaW5lIF9fTlJfcnRfc2lnc3VzcGVuZCAoX19OUl9MaW51eCArIDEyOCkKICNkZWZpbmUgX19OUl9zaWdhbHRzdGFjayAoX19OUl9MaW51eCArIDEyOSkKICNkZWZpbmUgX19OUl91dGltZSAoX19OUl9MaW51eCArIDEzMCkKLSNkZWZpbmUgX19OUl9ta25vZCAoX19OUl9MaW51eCArIDEzMSkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIF9fTlJfbWtub2QgKF9fTlJfTGludXggKyAxMzEpCiAjZGVmaW5lIF9fTlJfcGVyc29uYWxpdHkgKF9fTlJfTGludXggKyAxMzIpCiAjZGVmaW5lIF9fTlJfdXN0YXQgKF9fTlJfTGludXggKyAxMzMpCiAjZGVmaW5lIF9fTlJfc3RhdGZzIChfX05SX0xpbnV4ICsgMTM0KQotI2RlZmluZSBfX05SX2ZzdGF0ZnMgKF9fTlJfTGludXggKyAxMzUpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBfX05SX2ZzdGF0ZnMgKF9fTlJfTGludXggKyAxMzUpCiAjZGVmaW5lIF9fTlJfc3lzZnMgKF9fTlJfTGludXggKyAxMzYpCiAjZGVmaW5lIF9fTlJfZ2V0cHJpb3JpdHkgKF9fTlJfTGludXggKyAxMzcpCiAjZGVmaW5lIF9fTlJfc2V0cHJpb3JpdHkgKF9fTlJfTGludXggKyAxMzgpCi0jZGVmaW5lIF9fTlJfc2NoZWRfc2V0cGFyYW0gKF9fTlJfTGludXggKyAxMzkpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBfX05SX3NjaGVkX3NldHBhcmFtIChfX05SX0xpbnV4ICsgMTM5KQogI2RlZmluZSBfX05SX3NjaGVkX2dldHBhcmFtIChfX05SX0xpbnV4ICsgMTQwKQogI2RlZmluZSBfX05SX3NjaGVkX3NldHNjaGVkdWxlciAoX19OUl9MaW51eCArIDE0MSkKICNkZWZpbmUgX19OUl9zY2hlZF9nZXRzY2hlZHVsZXIgKF9fTlJfTGludXggKyAxNDIpCi0jZGVmaW5lIF9fTlJfc2NoZWRfZ2V0X3ByaW9yaXR5X21heCAoX19OUl9MaW51eCArIDE0MykKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIF9fTlJfc2NoZWRfZ2V0X3ByaW9yaXR5X21heCAoX19OUl9MaW51eCArIDE0MykKICNkZWZpbmUgX19OUl9zY2hlZF9nZXRfcHJpb3JpdHlfbWluIChfX05SX0xpbnV4ICsgMTQ0KQogI2RlZmluZSBfX05SX3NjaGVkX3JyX2dldF9pbnRlcnZhbCAoX19OUl9MaW51eCArIDE0NSkKICNkZWZpbmUgX19OUl9tbG9jayAoX19OUl9MaW51eCArIDE0NikKLSNkZWZpbmUgX19OUl9tdW5sb2NrIChfX05SX0xpbnV4ICsgMTQ3KQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgX19OUl9tdW5sb2NrIChfX05SX0xpbnV4ICsgMTQ3KQogI2RlZmluZSBfX05SX21sb2NrYWxsIChfX05SX0xpbnV4ICsgMTQ4KQogI2RlZmluZSBfX05SX211bmxvY2thbGwgKF9fTlJfTGludXggKyAxNDkpCiAjZGVmaW5lIF9fTlJfdmhhbmd1cCAoX19OUl9MaW51eCArIDE1MCkKLSNkZWZpbmUgX19OUl9waXZvdF9yb290IChfX05SX0xpbnV4ICsgMTUxKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgX19OUl9waXZvdF9yb290IChfX05SX0xpbnV4ICsgMTUxKQogI2RlZmluZSBfX05SX19zeXNjdGwgKF9fTlJfTGludXggKyAxNTIpCiAjZGVmaW5lIF9fTlJfcHJjdGwgKF9fTlJfTGludXggKyAxNTMpCiAjZGVmaW5lIF9fTlJfYWRqdGltZXggKF9fTlJfTGludXggKyAxNTQpCi0jZGVmaW5lIF9fTlJfc2V0cmxpbWl0IChfX05SX0xpbnV4ICsgMTU1KQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgX19OUl9zZXRybGltaXQgKF9fTlJfTGludXggKyAxNTUpCiAjZGVmaW5lIF9fTlJfY2hyb290IChfX05SX0xpbnV4ICsgMTU2KQogI2RlZmluZSBfX05SX3N5bmMgKF9fTlJfTGludXggKyAxNTcpCiAjZGVmaW5lIF9fTlJfYWNjdCAoX19OUl9MaW51eCArIDE1OCkKLSNkZWZpbmUgX19OUl9zZXR0aW1lb2ZkYXkgKF9fTlJfTGludXggKyAxNTkpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBfX05SX3NldHRpbWVvZmRheSAoX19OUl9MaW51eCArIDE1OSkKICNkZWZpbmUgX19OUl9tb3VudCAoX19OUl9MaW51eCArIDE2MCkKICNkZWZpbmUgX19OUl91bW91bnQyIChfX05SX0xpbnV4ICsgMTYxKQogI2RlZmluZSBfX05SX3N3YXBvbiAoX19OUl9MaW51eCArIDE2MikKLSNkZWZpbmUgX19OUl9zd2Fwb2ZmIChfX05SX0xpbnV4ICsgMTYzKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgX19OUl9zd2Fwb2ZmIChfX05SX0xpbnV4ICsgMTYzKQogI2RlZmluZSBfX05SX3JlYm9vdCAoX19OUl9MaW51eCArIDE2NCkKICNkZWZpbmUgX19OUl9zZXRob3N0bmFtZSAoX19OUl9MaW51eCArIDE2NSkKICNkZWZpbmUgX19OUl9zZXRkb21haW5uYW1lIChfX05SX0xpbnV4ICsgMTY2KQotI2RlZmluZSBfX05SX2NyZWF0ZV9tb2R1bGUgKF9fTlJfTGludXggKyAxNjcpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBfX05SX2NyZWF0ZV9tb2R1bGUgKF9fTlJfTGludXggKyAxNjcpCiAjZGVmaW5lIF9fTlJfaW5pdF9tb2R1bGUgKF9fTlJfTGludXggKyAxNjgpCiAjZGVmaW5lIF9fTlJfZGVsZXRlX21vZHVsZSAoX19OUl9MaW51eCArIDE2OSkKICNkZWZpbmUgX19OUl9nZXRfa2VybmVsX3N5bXMgKF9fTlJfTGludXggKyAxNzApCi0jZGVmaW5lIF9fTlJfcXVlcnlfbW9kdWxlIChfX05SX0xpbnV4ICsgMTcxKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgX19OUl9xdWVyeV9tb2R1bGUgKF9fTlJfTGludXggKyAxNzEpCiAjZGVmaW5lIF9fTlJfcXVvdGFjdGwgKF9fTlJfTGludXggKyAxNzIpCiAjZGVmaW5lIF9fTlJfbmZzc2VydmN0bCAoX19OUl9MaW51eCArIDE3MykKICNkZWZpbmUgX19OUl9nZXRwbXNnIChfX05SX0xpbnV4ICsgMTc0KQotI2RlZmluZSBfX05SX3B1dHBtc2cgKF9fTlJfTGludXggKyAxNzUpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBfX05SX3B1dHBtc2cgKF9fTlJfTGludXggKyAxNzUpCiAjZGVmaW5lIF9fTlJfYWZzX3N5c2NhbGwgKF9fTlJfTGludXggKyAxNzYpCiAjZGVmaW5lIF9fTlJfcmVzZXJ2ZWQxNzcgKF9fTlJfTGludXggKyAxNzcpCiAjZGVmaW5lIF9fTlJfZ2V0dGlkIChfX05SX0xpbnV4ICsgMTc4KQotI2RlZmluZSBfX05SX3JlYWRhaGVhZCAoX19OUl9MaW51eCArIDE3OSkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIF9fTlJfcmVhZGFoZWFkIChfX05SX0xpbnV4ICsgMTc5KQogI2RlZmluZSBfX05SX3NldHhhdHRyIChfX05SX0xpbnV4ICsgMTgwKQogI2RlZmluZSBfX05SX2xzZXR4YXR0ciAoX19OUl9MaW51eCArIDE4MSkKICNkZWZpbmUgX19OUl9mc2V0eGF0dHIgKF9fTlJfTGludXggKyAxODIpCi0jZGVmaW5lIF9fTlJfZ2V0eGF0dHIgKF9fTlJfTGludXggKyAxODMpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBfX05SX2dldHhhdHRyIChfX05SX0xpbnV4ICsgMTgzKQogI2RlZmluZSBfX05SX2xnZXR4YXR0ciAoX19OUl9MaW51eCArIDE4NCkKICNkZWZpbmUgX19OUl9mZ2V0eGF0dHIgKF9fTlJfTGludXggKyAxODUpCiAjZGVmaW5lIF9fTlJfbGlzdHhhdHRyIChfX05SX0xpbnV4ICsgMTg2KQotI2RlZmluZSBfX05SX2xsaXN0eGF0dHIgKF9fTlJfTGludXggKyAxODcpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBfX05SX2xsaXN0eGF0dHIgKF9fTlJfTGludXggKyAxODcpCiAjZGVmaW5lIF9fTlJfZmxpc3R4YXR0ciAoX19OUl9MaW51eCArIDE4OCkKICNkZWZpbmUgX19OUl9yZW1vdmV4YXR0ciAoX19OUl9MaW51eCArIDE4OSkKICNkZWZpbmUgX19OUl9scmVtb3ZleGF0dHIgKF9fTlJfTGludXggKyAxOTApCi0jZGVmaW5lIF9fTlJfZnJlbW92ZXhhdHRyIChfX05SX0xpbnV4ICsgMTkxKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgX19OUl9mcmVtb3ZleGF0dHIgKF9fTlJfTGludXggKyAxOTEpCiAjZGVmaW5lIF9fTlJfdGtpbGwgKF9fTlJfTGludXggKyAxOTIpCiAjZGVmaW5lIF9fTlJfcmVzZXJ2ZWQxOTMgKF9fTlJfTGludXggKyAxOTMpCiAjZGVmaW5lIF9fTlJfZnV0ZXggKF9fTlJfTGludXggKyAxOTQpCi0jZGVmaW5lIF9fTlJfc2NoZWRfc2V0YWZmaW5pdHkgKF9fTlJfTGludXggKyAxOTUpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBfX05SX3NjaGVkX3NldGFmZmluaXR5IChfX05SX0xpbnV4ICsgMTk1KQogI2RlZmluZSBfX05SX3NjaGVkX2dldGFmZmluaXR5IChfX05SX0xpbnV4ICsgMTk2KQogI2RlZmluZSBfX05SX2NhY2hlZmx1c2ggKF9fTlJfTGludXggKyAxOTcpCiAjZGVmaW5lIF9fTlJfY2FjaGVjdGwgKF9fTlJfTGludXggKyAxOTgpCi0jZGVmaW5lIF9fTlJfc3lzbWlwcyAoX19OUl9MaW51eCArIDE5OSkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIF9fTlJfc3lzbWlwcyAoX19OUl9MaW51eCArIDE5OSkKICNkZWZpbmUgX19OUl9pb19zZXR1cCAoX19OUl9MaW51eCArIDIwMCkKICNkZWZpbmUgX19OUl9pb19kZXN0cm95IChfX05SX0xpbnV4ICsgMjAxKQogI2RlZmluZSBfX05SX2lvX2dldGV2ZW50cyAoX19OUl9MaW51eCArIDIwMikKLSNkZWZpbmUgX19OUl9pb19zdWJtaXQgKF9fTlJfTGludXggKyAyMDMpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBfX05SX2lvX3N1Ym1pdCAoX19OUl9MaW51eCArIDIwMykKICNkZWZpbmUgX19OUl9pb19jYW5jZWwgKF9fTlJfTGludXggKyAyMDQpCiAjZGVmaW5lIF9fTlJfZXhpdF9ncm91cCAoX19OUl9MaW51eCArIDIwNSkKICNkZWZpbmUgX19OUl9sb29rdXBfZGNvb2tpZSAoX19OUl9MaW51eCArIDIwNikKLSNkZWZpbmUgX19OUl9lcG9sbF9jcmVhdGUgKF9fTlJfTGludXggKyAyMDcpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBfX05SX2Vwb2xsX2NyZWF0ZSAoX19OUl9MaW51eCArIDIwNykKICNkZWZpbmUgX19OUl9lcG9sbF9jdGwgKF9fTlJfTGludXggKyAyMDgpCiAjZGVmaW5lIF9fTlJfZXBvbGxfd2FpdCAoX19OUl9MaW51eCArIDIwOSkKICNkZWZpbmUgX19OUl9yZW1hcF9maWxlX3BhZ2VzIChfX05SX0xpbnV4ICsgMjEwKQotI2RlZmluZSBfX05SX3J0X3NpZ3JldHVybiAoX19OUl9MaW51eCArIDIxMSkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIF9fTlJfcnRfc2lncmV0dXJuIChfX05SX0xpbnV4ICsgMjExKQogI2RlZmluZSBfX05SX3NldF90aWRfYWRkcmVzcyAoX19OUl9MaW51eCArIDIxMikKICNkZWZpbmUgX19OUl9yZXN0YXJ0X3N5c2NhbGwgKF9fTlJfTGludXggKyAyMTMpCiAjZGVmaW5lIF9fTlJfc2VtdGltZWRvcCAoX19OUl9MaW51eCArIDIxNCkKLSNkZWZpbmUgX19OUl9mYWR2aXNlNjQgKF9fTlJfTGludXggKyAyMTUpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBfX05SX2ZhZHZpc2U2NCAoX19OUl9MaW51eCArIDIxNSkKICNkZWZpbmUgX19OUl90aW1lcl9jcmVhdGUgKF9fTlJfTGludXggKyAyMTYpCiAjZGVmaW5lIF9fTlJfdGltZXJfc2V0dGltZSAoX19OUl9MaW51eCArIDIxNykKICNkZWZpbmUgX19OUl90aW1lcl9nZXR0aW1lIChfX05SX0xpbnV4ICsgMjE4KQotI2RlZmluZSBfX05SX3RpbWVyX2dldG92ZXJydW4gKF9fTlJfTGludXggKyAyMTkpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBfX05SX3RpbWVyX2dldG92ZXJydW4gKF9fTlJfTGludXggKyAyMTkpCiAjZGVmaW5lIF9fTlJfdGltZXJfZGVsZXRlIChfX05SX0xpbnV4ICsgMjIwKQogI2RlZmluZSBfX05SX2Nsb2NrX3NldHRpbWUgKF9fTlJfTGludXggKyAyMjEpCiAjZGVmaW5lIF9fTlJfY2xvY2tfZ2V0dGltZSAoX19OUl9MaW51eCArIDIyMikKLSNkZWZpbmUgX19OUl9jbG9ja19nZXRyZXMgKF9fTlJfTGludXggKyAyMjMpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBfX05SX2Nsb2NrX2dldHJlcyAoX19OUl9MaW51eCArIDIyMykKICNkZWZpbmUgX19OUl9jbG9ja19uYW5vc2xlZXAgKF9fTlJfTGludXggKyAyMjQpCiAjZGVmaW5lIF9fTlJfdGdraWxsIChfX05SX0xpbnV4ICsgMjI1KQogI2RlZmluZSBfX05SX3V0aW1lcyAoX19OUl9MaW51eCArIDIyNikKLSNkZWZpbmUgX19OUl9tYmluZCAoX19OUl9MaW51eCArIDIyNykKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIF9fTlJfbWJpbmQgKF9fTlJfTGludXggKyAyMjcpCiAjZGVmaW5lIF9fTlJfZ2V0X21lbXBvbGljeSAoX19OUl9MaW51eCArIDIyOCkKICNkZWZpbmUgX19OUl9zZXRfbWVtcG9saWN5IChfX05SX0xpbnV4ICsgMjI5KQogI2RlZmluZSBfX05SX21xX29wZW4gKF9fTlJfTGludXggKyAyMzApCi0jZGVmaW5lIF9fTlJfbXFfdW5saW5rIChfX05SX0xpbnV4ICsgMjMxKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgX19OUl9tcV91bmxpbmsgKF9fTlJfTGludXggKyAyMzEpCiAjZGVmaW5lIF9fTlJfbXFfdGltZWRzZW5kIChfX05SX0xpbnV4ICsgMjMyKQogI2RlZmluZSBfX05SX21xX3RpbWVkcmVjZWl2ZSAoX19OUl9MaW51eCArIDIzMykKICNkZWZpbmUgX19OUl9tcV9ub3RpZnkgKF9fTlJfTGludXggKyAyMzQpCi0jZGVmaW5lIF9fTlJfbXFfZ2V0c2V0YXR0ciAoX19OUl9MaW51eCArIDIzNSkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIF9fTlJfbXFfZ2V0c2V0YXR0ciAoX19OUl9MaW51eCArIDIzNSkKICNkZWZpbmUgX19OUl92c2VydmVyIChfX05SX0xpbnV4ICsgMjM2KQogI2RlZmluZSBfX05SX3dhaXRpZCAoX19OUl9MaW51eCArIDIzNykKICNkZWZpbmUgX19OUl9hZGRfa2V5IChfX05SX0xpbnV4ICsgMjM5KQotI2RlZmluZSBfX05SX3JlcXVlc3Rfa2V5IChfX05SX0xpbnV4ICsgMjQwKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgX19OUl9yZXF1ZXN0X2tleSAoX19OUl9MaW51eCArIDI0MCkKICNkZWZpbmUgX19OUl9rZXljdGwgKF9fTlJfTGludXggKyAyNDEpCiAjZGVmaW5lIF9fTlJfc2V0X3RocmVhZF9hcmVhIChfX05SX0xpbnV4ICsgMjQyKQogI2RlZmluZSBfX05SX2lub3RpZnlfaW5pdCAoX19OUl9MaW51eCArIDI0MykKLSNkZWZpbmUgX19OUl9pbm90aWZ5X2FkZF93YXRjaCAoX19OUl9MaW51eCArIDI0NCkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIF9fTlJfaW5vdGlmeV9hZGRfd2F0Y2ggKF9fTlJfTGludXggKyAyNDQpCiAjZGVmaW5lIF9fTlJfaW5vdGlmeV9ybV93YXRjaCAoX19OUl9MaW51eCArIDI0NSkKICNkZWZpbmUgX19OUl9taWdyYXRlX3BhZ2VzIChfX05SX0xpbnV4ICsgMjQ2KQogI2RlZmluZSBfX05SX29wZW5hdCAoX19OUl9MaW51eCArIDI0NykKLSNkZWZpbmUgX19OUl9ta2RpcmF0IChfX05SX0xpbnV4ICsgMjQ4KQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgX19OUl9ta2RpcmF0IChfX05SX0xpbnV4ICsgMjQ4KQogI2RlZmluZSBfX05SX21rbm9kYXQgKF9fTlJfTGludXggKyAyNDkpCiAjZGVmaW5lIF9fTlJfZmNob3duYXQgKF9fTlJfTGludXggKyAyNTApCiAjZGVmaW5lIF9fTlJfZnV0aW1lc2F0IChfX05SX0xpbnV4ICsgMjUxKQotI2RlZmluZSBfX05SX25ld2ZzdGF0YXQgKF9fTlJfTGludXggKyAyNTIpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBfX05SX25ld2ZzdGF0YXQgKF9fTlJfTGludXggKyAyNTIpCiAjZGVmaW5lIF9fTlJfdW5saW5rYXQgKF9fTlJfTGludXggKyAyNTMpCiAjZGVmaW5lIF9fTlJfcmVuYW1lYXQgKF9fTlJfTGludXggKyAyNTQpCiAjZGVmaW5lIF9fTlJfbGlua2F0IChfX05SX0xpbnV4ICsgMjU1KQotI2RlZmluZSBfX05SX3N5bWxpbmthdCAoX19OUl9MaW51eCArIDI1NikKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIF9fTlJfc3ltbGlua2F0IChfX05SX0xpbnV4ICsgMjU2KQogI2RlZmluZSBfX05SX3JlYWRsaW5rYXQgKF9fTlJfTGludXggKyAyNTcpCiAjZGVmaW5lIF9fTlJfZmNobW9kYXQgKF9fTlJfTGludXggKyAyNTgpCiAjZGVmaW5lIF9fTlJfZmFjY2Vzc2F0IChfX05SX0xpbnV4ICsgMjU5KQotI2RlZmluZSBfX05SX3BzZWxlY3Q2IChfX05SX0xpbnV4ICsgMjYwKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgX19OUl9wc2VsZWN0NiAoX19OUl9MaW51eCArIDI2MCkKICNkZWZpbmUgX19OUl9wcG9sbCAoX19OUl9MaW51eCArIDI2MSkKICNkZWZpbmUgX19OUl91bnNoYXJlIChfX05SX0xpbnV4ICsgMjYyKQogI2RlZmluZSBfX05SX3NwbGljZSAoX19OUl9MaW51eCArIDI2MykKLSNkZWZpbmUgX19OUl9zeW5jX2ZpbGVfcmFuZ2UgKF9fTlJfTGludXggKyAyNjQpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBfX05SX3N5bmNfZmlsZV9yYW5nZSAoX19OUl9MaW51eCArIDI2NCkKICNkZWZpbmUgX19OUl90ZWUgKF9fTlJfTGludXggKyAyNjUpCiAjZGVmaW5lIF9fTlJfdm1zcGxpY2UgKF9fTlJfTGludXggKyAyNjYpCiAjZGVmaW5lIF9fTlJfbW92ZV9wYWdlcyAoX19OUl9MaW51eCArIDI2NykKLSNkZWZpbmUgX19OUl9zZXRfcm9idXN0X2xpc3QgKF9fTlJfTGludXggKyAyNjgpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBfX05SX3NldF9yb2J1c3RfbGlzdCAoX19OUl9MaW51eCArIDI2OCkKICNkZWZpbmUgX19OUl9nZXRfcm9idXN0X2xpc3QgKF9fTlJfTGludXggKyAyNjkpCiAjZGVmaW5lIF9fTlJfa2V4ZWNfbG9hZCAoX19OUl9MaW51eCArIDI3MCkKICNkZWZpbmUgX19OUl9nZXRjcHUgKF9fTlJfTGludXggKyAyNzEpCi0jZGVmaW5lIF9fTlJfZXBvbGxfcHdhaXQgKF9fTlJfTGludXggKyAyNzIpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBfX05SX2Vwb2xsX3B3YWl0IChfX05SX0xpbnV4ICsgMjcyKQogI2RlZmluZSBfX05SX2lvcHJpb19zZXQgKF9fTlJfTGludXggKyAyNzMpCiAjZGVmaW5lIF9fTlJfaW9wcmlvX2dldCAoX19OUl9MaW51eCArIDI3NCkKICNkZWZpbmUgX19OUl91dGltZW5zYXQgKF9fTlJfTGludXggKyAyNzUpCi0jZGVmaW5lIF9fTlJfc2lnbmFsZmQgKF9fTlJfTGludXggKyAyNzYpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBfX05SX3NpZ25hbGZkIChfX05SX0xpbnV4ICsgMjc2KQogI2RlZmluZSBfX05SX3RpbWVyZmQgKF9fTlJfTGludXggKyAyNzcpCiAjZGVmaW5lIF9fTlJfZXZlbnRmZCAoX19OUl9MaW51eCArIDI3OCkKICNkZWZpbmUgX19OUl9mYWxsb2NhdGUgKF9fTlJfTGludXggKyAyNzkpCi0jZGVmaW5lIF9fTlJfdGltZXJmZF9jcmVhdGUgKF9fTlJfTGludXggKyAyODApCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBfX05SX3RpbWVyZmRfY3JlYXRlIChfX05SX0xpbnV4ICsgMjgwKQogI2RlZmluZSBfX05SX3RpbWVyZmRfZ2V0dGltZSAoX19OUl9MaW51eCArIDI4MSkKICNkZWZpbmUgX19OUl90aW1lcmZkX3NldHRpbWUgKF9fTlJfTGludXggKyAyODIpCiAjZGVmaW5lIF9fTlJfc2lnbmFsZmQ0IChfX05SX0xpbnV4ICsgMjgzKQotI2RlZmluZSBfX05SX2V2ZW50ZmQyIChfX05SX0xpbnV4ICsgMjg0KQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgX19OUl9ldmVudGZkMiAoX19OUl9MaW51eCArIDI4NCkKICNkZWZpbmUgX19OUl9lcG9sbF9jcmVhdGUxIChfX05SX0xpbnV4ICsgMjg1KQogI2RlZmluZSBfX05SX2R1cDMgKF9fTlJfTGludXggKyAyODYpCiAjZGVmaW5lIF9fTlJfcGlwZTIgKF9fTlJfTGludXggKyAyODcpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX2lub3RpZnlfaW5pdDEgKF9fTlJfTGludXggKyAyODgpCisjZGVmaW5lIF9fTlJfcHJlYWR2IChfX05SX0xpbnV4ICsgMjg5KQorI2RlZmluZSBfX05SX3B3cml0ZXYgKF9fTlJfTGludXggKyAyOTApCisjZGVmaW5lIF9fTlJfcnRfdGdzaWdxdWV1ZWluZm8gKF9fTlJfTGludXggKyAyOTEpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBfX05SX0xpbnV4X3N5c2NhbGxzIDI4OAorI2RlZmluZSBfX05SX3BlcmZfZXZlbnRfb3BlbiAoX19OUl9MaW51eCArIDI5MikKKyNkZWZpbmUgX19OUl9hY2NlcHQ0IChfX05SX0xpbnV4ICsgMjkzKQorI2RlZmluZSBfX05SX3JlY3ZtbXNnIChfX05SX0xpbnV4ICsgMjk0KQorI2RlZmluZSBfX05SX2Zhbm90aWZ5X2luaXQgKF9fTlJfTGludXggKyAyOTUpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBfX05SX2Zhbm90aWZ5X21hcmsgKF9fTlJfTGludXggKyAyOTYpCisjZGVmaW5lIF9fTlJfcHJsaW1pdDY0IChfX05SX0xpbnV4ICsgMjk3KQorI2RlZmluZSBfX05SX25hbWVfdG9faGFuZGxlX2F0IChfX05SX0xpbnV4ICsgMjk4KQorI2RlZmluZSBfX05SX29wZW5fYnlfaGFuZGxlX2F0IChfX05SX0xpbnV4ICsgMjk5KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgX19OUl9jbG9ja19hZGp0aW1lIChfX05SX0xpbnV4ICsgMzAwKQorI2RlZmluZSBfX05SX3N5bmNmcyAoX19OUl9MaW51eCArIDMwMSkKKyNkZWZpbmUgX19OUl9zZW5kbW1zZyAoX19OUl9MaW51eCArIDMwMikKKyNkZWZpbmUgX19OUl9zZXRucyAoX19OUl9MaW51eCArIDMwMykKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIF9fTlJfcHJvY2Vzc192bV9yZWFkdiAoX19OUl9MaW51eCArIDMwNCkKKyNkZWZpbmUgX19OUl9wcm9jZXNzX3ZtX3dyaXRldiAoX19OUl9MaW51eCArIDMwNSkKKyNkZWZpbmUgX19OUl9MaW51eF9zeXNjYWxscyAzMDUKICNlbmRpZgotI2RlZmluZSBfX05SXzY0X0xpbnV4IDUwMDAKLSNkZWZpbmUgX19OUl82NF9MaW51eF9zeXNjYWxscyAyODgKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIF9fTlJfNjRfTGludXggNTAwMAorI2RlZmluZSBfX05SXzY0X0xpbnV4X3N5c2NhbGxzIDMwNQogI2lmIF9NSVBTX1NJTSA9PSBfTUlQU19TSU1fTkFCSTMyCiAjZGVmaW5lIF9fTlJfTGludXggNjAwMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9yZWFkIChfX05SX0xpbnV4ICsgMCkKICNkZWZpbmUgX19OUl93cml0ZSAoX19OUl9MaW51eCArIDEpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX29wZW4gKF9fTlJfTGludXggKyAyKQogI2RlZmluZSBfX05SX2Nsb3NlIChfX05SX0xpbnV4ICsgMykKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfc3RhdCAoX19OUl9MaW51eCArIDQpCiAjZGVmaW5lIF9fTlJfZnN0YXQgKF9fTlJfTGludXggKyA1KQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9sc3RhdCAoX19OUl9MaW51eCArIDYpCiAjZGVmaW5lIF9fTlJfcG9sbCAoX19OUl9MaW51eCArIDcpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX2xzZWVrIChfX05SX0xpbnV4ICsgOCkKICNkZWZpbmUgX19OUl9tbWFwIChfX05SX0xpbnV4ICsgOSkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfbXByb3RlY3QgKF9fTlJfTGludXggKyAxMCkKICNkZWZpbmUgX19OUl9tdW5tYXAgKF9fTlJfTGludXggKyAxMSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfYnJrIChfX05SX0xpbnV4ICsgMTIpCiAjZGVmaW5lIF9fTlJfcnRfc2lnYWN0aW9uIChfX05SX0xpbnV4ICsgMTMpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3J0X3NpZ3Byb2NtYXNrIChfX05SX0xpbnV4ICsgMTQpCiAjZGVmaW5lIF9fTlJfaW9jdGwgKF9fTlJfTGludXggKyAxNSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfcHJlYWQ2NCAoX19OUl9MaW51eCArIDE2KQogI2RlZmluZSBfX05SX3B3cml0ZTY0IChfX05SX0xpbnV4ICsgMTcpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3JlYWR2IChfX05SX0xpbnV4ICsgMTgpCiAjZGVmaW5lIF9fTlJfd3JpdGV2IChfX05SX0xpbnV4ICsgMTkpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX2FjY2VzcyAoX19OUl9MaW51eCArIDIwKQogI2RlZmluZSBfX05SX3BpcGUgKF9fTlJfTGludXggKyAyMSkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfX25ld3NlbGVjdCAoX19OUl9MaW51eCArIDIyKQogI2RlZmluZSBfX05SX3NjaGVkX3lpZWxkIChfX05SX0xpbnV4ICsgMjMpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX21yZW1hcCAoX19OUl9MaW51eCArIDI0KQogI2RlZmluZSBfX05SX21zeW5jIChfX05SX0xpbnV4ICsgMjUpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX21pbmNvcmUgKF9fTlJfTGludXggKyAyNikKICNkZWZpbmUgX19OUl9tYWR2aXNlIChfX05SX0xpbnV4ICsgMjcpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3NobWdldCAoX19OUl9MaW51eCArIDI4KQogI2RlZmluZSBfX05SX3NobWF0IChfX05SX0xpbnV4ICsgMjkpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3NobWN0bCAoX19OUl9MaW51eCArIDMwKQogI2RlZmluZSBfX05SX2R1cCAoX19OUl9MaW51eCArIDMxKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9kdXAyIChfX05SX0xpbnV4ICsgMzIpCiAjZGVmaW5lIF9fTlJfcGF1c2UgKF9fTlJfTGludXggKyAzMykKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfbmFub3NsZWVwIChfX05SX0xpbnV4ICsgMzQpCiAjZGVmaW5lIF9fTlJfZ2V0aXRpbWVyIChfX05SX0xpbnV4ICsgMzUpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3NldGl0aW1lciAoX19OUl9MaW51eCArIDM2KQogI2RlZmluZSBfX05SX2FsYXJtIChfX05SX0xpbnV4ICsgMzcpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX2dldHBpZCAoX19OUl9MaW51eCArIDM4KQogI2RlZmluZSBfX05SX3NlbmRmaWxlIChfX05SX0xpbnV4ICsgMzkpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3NvY2tldCAoX19OUl9MaW51eCArIDQwKQogI2RlZmluZSBfX05SX2Nvbm5lY3QgKF9fTlJfTGludXggKyA0MSkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfYWNjZXB0IChfX05SX0xpbnV4ICsgNDIpCiAjZGVmaW5lIF9fTlJfc2VuZHRvIChfX05SX0xpbnV4ICsgNDMpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3JlY3Zmcm9tIChfX05SX0xpbnV4ICsgNDQpCiAjZGVmaW5lIF9fTlJfc2VuZG1zZyAoX19OUl9MaW51eCArIDQ1KQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9yZWN2bXNnIChfX05SX0xpbnV4ICsgNDYpCiAjZGVmaW5lIF9fTlJfc2h1dGRvd24gKF9fTlJfTGludXggKyA0NykKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfYmluZCAoX19OUl9MaW51eCArIDQ4KQogI2RlZmluZSBfX05SX2xpc3RlbiAoX19OUl9MaW51eCArIDQ5KQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9nZXRzb2NrbmFtZSAoX19OUl9MaW51eCArIDUwKQogI2RlZmluZSBfX05SX2dldHBlZXJuYW1lIChfX05SX0xpbnV4ICsgNTEpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3NvY2tldHBhaXIgKF9fTlJfTGludXggKyA1MikKICNkZWZpbmUgX19OUl9zZXRzb2Nrb3B0IChfX05SX0xpbnV4ICsgNTMpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX2dldHNvY2tvcHQgKF9fTlJfTGludXggKyA1NCkKICNkZWZpbmUgX19OUl9jbG9uZSAoX19OUl9MaW51eCArIDU1KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9mb3JrIChfX05SX0xpbnV4ICsgNTYpCiAjZGVmaW5lIF9fTlJfZXhlY3ZlIChfX05SX0xpbnV4ICsgNTcpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX2V4aXQgKF9fTlJfTGludXggKyA1OCkKICNkZWZpbmUgX19OUl93YWl0NCAoX19OUl9MaW51eCArIDU5KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9raWxsIChfX05SX0xpbnV4ICsgNjApCiAjZGVmaW5lIF9fTlJfdW5hbWUgKF9fTlJfTGludXggKyA2MSkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfc2VtZ2V0IChfX05SX0xpbnV4ICsgNjIpCiAjZGVmaW5lIF9fTlJfc2Vtb3AgKF9fTlJfTGludXggKyA2MykKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfc2VtY3RsIChfX05SX0xpbnV4ICsgNjQpCiAjZGVmaW5lIF9fTlJfc2htZHQgKF9fTlJfTGludXggKyA2NSkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfbXNnZ2V0IChfX05SX0xpbnV4ICsgNjYpCiAjZGVmaW5lIF9fTlJfbXNnc25kIChfX05SX0xpbnV4ICsgNjcpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX21zZ3JjdiAoX19OUl9MaW51eCArIDY4KQogI2RlZmluZSBfX05SX21zZ2N0bCAoX19OUl9MaW51eCArIDY5KQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9mY250bCAoX19OUl9MaW51eCArIDcwKQogI2RlZmluZSBfX05SX2Zsb2NrIChfX05SX0xpbnV4ICsgNzEpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX2ZzeW5jIChfX05SX0xpbnV4ICsgNzIpCiAjZGVmaW5lIF9fTlJfZmRhdGFzeW5jIChfX05SX0xpbnV4ICsgNzMpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3RydW5jYXRlIChfX05SX0xpbnV4ICsgNzQpCiAjZGVmaW5lIF9fTlJfZnRydW5jYXRlIChfX05SX0xpbnV4ICsgNzUpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX2dldGRlbnRzIChfX05SX0xpbnV4ICsgNzYpCiAjZGVmaW5lIF9fTlJfZ2V0Y3dkIChfX05SX0xpbnV4ICsgNzcpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX2NoZGlyIChfX05SX0xpbnV4ICsgNzgpCiAjZGVmaW5lIF9fTlJfZmNoZGlyIChfX05SX0xpbnV4ICsgNzkpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3JlbmFtZSAoX19OUl9MaW51eCArIDgwKQogI2RlZmluZSBfX05SX21rZGlyIChfX05SX0xpbnV4ICsgODEpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3JtZGlyIChfX05SX0xpbnV4ICsgODIpCiAjZGVmaW5lIF9fTlJfY3JlYXQgKF9fTlJfTGludXggKyA4MykKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfbGluayAoX19OUl9MaW51eCArIDg0KQogI2RlZmluZSBfX05SX3VubGluayAoX19OUl9MaW51eCArIDg1KQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9zeW1saW5rIChfX05SX0xpbnV4ICsgODYpCiAjZGVmaW5lIF9fTlJfcmVhZGxpbmsgKF9fTlJfTGludXggKyA4NykKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfY2htb2QgKF9fTlJfTGludXggKyA4OCkKICNkZWZpbmUgX19OUl9mY2htb2QgKF9fTlJfTGludXggKyA4OSkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfY2hvd24gKF9fTlJfTGludXggKyA5MCkKICNkZWZpbmUgX19OUl9mY2hvd24gKF9fTlJfTGludXggKyA5MSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfbGNob3duIChfX05SX0xpbnV4ICsgOTIpCiAjZGVmaW5lIF9fTlJfdW1hc2sgKF9fTlJfTGludXggKyA5MykKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfZ2V0dGltZW9mZGF5IChfX05SX0xpbnV4ICsgOTQpCiAjZGVmaW5lIF9fTlJfZ2V0cmxpbWl0IChfX05SX0xpbnV4ICsgOTUpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX2dldHJ1c2FnZSAoX19OUl9MaW51eCArIDk2KQogI2RlZmluZSBfX05SX3N5c2luZm8gKF9fTlJfTGludXggKyA5NykKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfdGltZXMgKF9fTlJfTGludXggKyA5OCkKICNkZWZpbmUgX19OUl9wdHJhY2UgKF9fTlJfTGludXggKyA5OSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfZ2V0dWlkIChfX05SX0xpbnV4ICsgMTAwKQogI2RlZmluZSBfX05SX3N5c2xvZyAoX19OUl9MaW51eCArIDEwMSkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfZ2V0Z2lkIChfX05SX0xpbnV4ICsgMTAyKQogI2RlZmluZSBfX05SX3NldHVpZCAoX19OUl9MaW51eCArIDEwMykKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfc2V0Z2lkIChfX05SX0xpbnV4ICsgMTA0KQogI2RlZmluZSBfX05SX2dldGV1aWQgKF9fTlJfTGludXggKyAxMDUpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX2dldGVnaWQgKF9fTlJfTGludXggKyAxMDYpCiAjZGVmaW5lIF9fTlJfc2V0cGdpZCAoX19OUl9MaW51eCArIDEwNykKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfZ2V0cHBpZCAoX19OUl9MaW51eCArIDEwOCkKICNkZWZpbmUgX19OUl9nZXRwZ3JwIChfX05SX0xpbnV4ICsgMTA5KQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9zZXRzaWQgKF9fTlJfTGludXggKyAxMTApCiAjZGVmaW5lIF9fTlJfc2V0cmV1aWQgKF9fTlJfTGludXggKyAxMTEpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3NldHJlZ2lkIChfX05SX0xpbnV4ICsgMTEyKQogI2RlZmluZSBfX05SX2dldGdyb3VwcyAoX19OUl9MaW51eCArIDExMykKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfc2V0Z3JvdXBzIChfX05SX0xpbnV4ICsgMTE0KQogI2RlZmluZSBfX05SX3NldHJlc3VpZCAoX19OUl9MaW51eCArIDExNSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfZ2V0cmVzdWlkIChfX05SX0xpbnV4ICsgMTE2KQogI2RlZmluZSBfX05SX3NldHJlc2dpZCAoX19OUl9MaW51eCArIDExNykKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfZ2V0cmVzZ2lkIChfX05SX0xpbnV4ICsgMTE4KQogI2RlZmluZSBfX05SX2dldHBnaWQgKF9fTlJfTGludXggKyAxMTkpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3NldGZzdWlkIChfX05SX0xpbnV4ICsgMTIwKQogI2RlZmluZSBfX05SX3NldGZzZ2lkIChfX05SX0xpbnV4ICsgMTIxKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9nZXRzaWQgKF9fTlJfTGludXggKyAxMjIpCiAjZGVmaW5lIF9fTlJfY2FwZ2V0IChfX05SX0xpbnV4ICsgMTIzKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9jYXBzZXQgKF9fTlJfTGludXggKyAxMjQpCiAjZGVmaW5lIF9fTlJfcnRfc2lncGVuZGluZyAoX19OUl9MaW51eCArIDEyNSkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfcnRfc2lndGltZWR3YWl0IChfX05SX0xpbnV4ICsgMTI2KQogI2RlZmluZSBfX05SX3J0X3NpZ3F1ZXVlaW5mbyAoX19OUl9MaW51eCArIDEyNykKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfcnRfc2lnc3VzcGVuZCAoX19OUl9MaW51eCArIDEyOCkKICNkZWZpbmUgX19OUl9zaWdhbHRzdGFjayAoX19OUl9MaW51eCArIDEyOSkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfdXRpbWUgKF9fTlJfTGludXggKyAxMzApCiAjZGVmaW5lIF9fTlJfbWtub2QgKF9fTlJfTGludXggKyAxMzEpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3BlcnNvbmFsaXR5IChfX05SX0xpbnV4ICsgMTMyKQogI2RlZmluZSBfX05SX3VzdGF0IChfX05SX0xpbnV4ICsgMTMzKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9zdGF0ZnMgKF9fTlJfTGludXggKyAxMzQpCiAjZGVmaW5lIF9fTlJfZnN0YXRmcyAoX19OUl9MaW51eCArIDEzNSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfc3lzZnMgKF9fTlJfTGludXggKyAxMzYpCiAjZGVmaW5lIF9fTlJfZ2V0cHJpb3JpdHkgKF9fTlJfTGludXggKyAxMzcpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3NldHByaW9yaXR5IChfX05SX0xpbnV4ICsgMTM4KQogI2RlZmluZSBfX05SX3NjaGVkX3NldHBhcmFtIChfX05SX0xpbnV4ICsgMTM5KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9zY2hlZF9nZXRwYXJhbSAoX19OUl9MaW51eCArIDE0MCkKICNkZWZpbmUgX19OUl9zY2hlZF9zZXRzY2hlZHVsZXIgKF9fTlJfTGludXggKyAxNDEpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3NjaGVkX2dldHNjaGVkdWxlciAoX19OUl9MaW51eCArIDE0MikKICNkZWZpbmUgX19OUl9zY2hlZF9nZXRfcHJpb3JpdHlfbWF4IChfX05SX0xpbnV4ICsgMTQzKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9zY2hlZF9nZXRfcHJpb3JpdHlfbWluIChfX05SX0xpbnV4ICsgMTQ0KQogI2RlZmluZSBfX05SX3NjaGVkX3JyX2dldF9pbnRlcnZhbCAoX19OUl9MaW51eCArIDE0NSkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfbWxvY2sgKF9fTlJfTGludXggKyAxNDYpCiAjZGVmaW5lIF9fTlJfbXVubG9jayAoX19OUl9MaW51eCArIDE0NykKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfbWxvY2thbGwgKF9fTlJfTGludXggKyAxNDgpCiAjZGVmaW5lIF9fTlJfbXVubG9ja2FsbCAoX19OUl9MaW51eCArIDE0OSkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfdmhhbmd1cCAoX19OUl9MaW51eCArIDE1MCkKICNkZWZpbmUgX19OUl9waXZvdF9yb290IChfX05SX0xpbnV4ICsgMTUxKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9fc3lzY3RsIChfX05SX0xpbnV4ICsgMTUyKQogI2RlZmluZSBfX05SX3ByY3RsIChfX05SX0xpbnV4ICsgMTUzKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9hZGp0aW1leCAoX19OUl9MaW51eCArIDE1NCkKICNkZWZpbmUgX19OUl9zZXRybGltaXQgKF9fTlJfTGludXggKyAxNTUpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX2Nocm9vdCAoX19OUl9MaW51eCArIDE1NikKICNkZWZpbmUgX19OUl9zeW5jIChfX05SX0xpbnV4ICsgMTU3KQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9hY2N0IChfX05SX0xpbnV4ICsgMTU4KQogI2RlZmluZSBfX05SX3NldHRpbWVvZmRheSAoX19OUl9MaW51eCArIDE1OSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfbW91bnQgKF9fTlJfTGludXggKyAxNjApCiAjZGVmaW5lIF9fTlJfdW1vdW50MiAoX19OUl9MaW51eCArIDE2MSkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfc3dhcG9uIChfX05SX0xpbnV4ICsgMTYyKQogI2RlZmluZSBfX05SX3N3YXBvZmYgKF9fTlJfTGludXggKyAxNjMpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3JlYm9vdCAoX19OUl9MaW51eCArIDE2NCkKICNkZWZpbmUgX19OUl9zZXRob3N0bmFtZSAoX19OUl9MaW51eCArIDE2NSkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfc2V0ZG9tYWlubmFtZSAoX19OUl9MaW51eCArIDE2NikKICNkZWZpbmUgX19OUl9jcmVhdGVfbW9kdWxlIChfX05SX0xpbnV4ICsgMTY3KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9pbml0X21vZHVsZSAoX19OUl9MaW51eCArIDE2OCkKICNkZWZpbmUgX19OUl9kZWxldGVfbW9kdWxlIChfX05SX0xpbnV4ICsgMTY5KQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9nZXRfa2VybmVsX3N5bXMgKF9fTlJfTGludXggKyAxNzApCiAjZGVmaW5lIF9fTlJfcXVlcnlfbW9kdWxlIChfX05SX0xpbnV4ICsgMTcxKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9xdW90YWN0bCAoX19OUl9MaW51eCArIDE3MikKICNkZWZpbmUgX19OUl9uZnNzZXJ2Y3RsIChfX05SX0xpbnV4ICsgMTczKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9nZXRwbXNnIChfX05SX0xpbnV4ICsgMTc0KQogI2RlZmluZSBfX05SX3B1dHBtc2cgKF9fTlJfTGludXggKyAxNzUpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX2Fmc19zeXNjYWxsIChfX05SX0xpbnV4ICsgMTc2KQogI2RlZmluZSBfX05SX3Jlc2VydmVkMTc3IChfX05SX0xpbnV4ICsgMTc3KQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9nZXR0aWQgKF9fTlJfTGludXggKyAxNzgpCiAjZGVmaW5lIF9fTlJfcmVhZGFoZWFkIChfX05SX0xpbnV4ICsgMTc5KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9zZXR4YXR0ciAoX19OUl9MaW51eCArIDE4MCkKICNkZWZpbmUgX19OUl9sc2V0eGF0dHIgKF9fTlJfTGludXggKyAxODEpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX2ZzZXR4YXR0ciAoX19OUl9MaW51eCArIDE4MikKICNkZWZpbmUgX19OUl9nZXR4YXR0ciAoX19OUl9MaW51eCArIDE4MykKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfbGdldHhhdHRyIChfX05SX0xpbnV4ICsgMTg0KQogI2RlZmluZSBfX05SX2ZnZXR4YXR0ciAoX19OUl9MaW51eCArIDE4NSkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfbGlzdHhhdHRyIChfX05SX0xpbnV4ICsgMTg2KQogI2RlZmluZSBfX05SX2xsaXN0eGF0dHIgKF9fTlJfTGludXggKyAxODcpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX2ZsaXN0eGF0dHIgKF9fTlJfTGludXggKyAxODgpCiAjZGVmaW5lIF9fTlJfcmVtb3ZleGF0dHIgKF9fTlJfTGludXggKyAxODkpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX2xyZW1vdmV4YXR0ciAoX19OUl9MaW51eCArIDE5MCkKICNkZWZpbmUgX19OUl9mcmVtb3ZleGF0dHIgKF9fTlJfTGludXggKyAxOTEpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3RraWxsIChfX05SX0xpbnV4ICsgMTkyKQogI2RlZmluZSBfX05SX3Jlc2VydmVkMTkzIChfX05SX0xpbnV4ICsgMTkzKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9mdXRleCAoX19OUl9MaW51eCArIDE5NCkKICNkZWZpbmUgX19OUl9zY2hlZF9zZXRhZmZpbml0eSAoX19OUl9MaW51eCArIDE5NSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfc2NoZWRfZ2V0YWZmaW5pdHkgKF9fTlJfTGludXggKyAxOTYpCiAjZGVmaW5lIF9fTlJfY2FjaGVmbHVzaCAoX19OUl9MaW51eCArIDE5NykKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfY2FjaGVjdGwgKF9fTlJfTGludXggKyAxOTgpCiAjZGVmaW5lIF9fTlJfc3lzbWlwcyAoX19OUl9MaW51eCArIDE5OSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfaW9fc2V0dXAgKF9fTlJfTGludXggKyAyMDApCiAjZGVmaW5lIF9fTlJfaW9fZGVzdHJveSAoX19OUl9MaW51eCArIDIwMSkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfaW9fZ2V0ZXZlbnRzIChfX05SX0xpbnV4ICsgMjAyKQogI2RlZmluZSBfX05SX2lvX3N1Ym1pdCAoX19OUl9MaW51eCArIDIwMykKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfaW9fY2FuY2VsIChfX05SX0xpbnV4ICsgMjA0KQogI2RlZmluZSBfX05SX2V4aXRfZ3JvdXAgKF9fTlJfTGludXggKyAyMDUpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX2xvb2t1cF9kY29va2llIChfX05SX0xpbnV4ICsgMjA2KQogI2RlZmluZSBfX05SX2Vwb2xsX2NyZWF0ZSAoX19OUl9MaW51eCArIDIwNykKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfZXBvbGxfY3RsIChfX05SX0xpbnV4ICsgMjA4KQogI2RlZmluZSBfX05SX2Vwb2xsX3dhaXQgKF9fTlJfTGludXggKyAyMDkpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3JlbWFwX2ZpbGVfcGFnZXMgKF9fTlJfTGludXggKyAyMTApCiAjZGVmaW5lIF9fTlJfcnRfc2lncmV0dXJuIChfX05SX0xpbnV4ICsgMjExKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9mY250bDY0IChfX05SX0xpbnV4ICsgMjEyKQogI2RlZmluZSBfX05SX3NldF90aWRfYWRkcmVzcyAoX19OUl9MaW51eCArIDIxMykKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfcmVzdGFydF9zeXNjYWxsIChfX05SX0xpbnV4ICsgMjE0KQogI2RlZmluZSBfX05SX3NlbXRpbWVkb3AgKF9fTlJfTGludXggKyAyMTUpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX2ZhZHZpc2U2NCAoX19OUl9MaW51eCArIDIxNikKICNkZWZpbmUgX19OUl9zdGF0ZnM2NCAoX19OUl9MaW51eCArIDIxNykKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfZnN0YXRmczY0IChfX05SX0xpbnV4ICsgMjE4KQogI2RlZmluZSBfX05SX3NlbmRmaWxlNjQgKF9fTlJfTGludXggKyAyMTkpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3RpbWVyX2NyZWF0ZSAoX19OUl9MaW51eCArIDIyMCkKICNkZWZpbmUgX19OUl90aW1lcl9zZXR0aW1lIChfX05SX0xpbnV4ICsgMjIxKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl90aW1lcl9nZXR0aW1lIChfX05SX0xpbnV4ICsgMjIyKQogI2RlZmluZSBfX05SX3RpbWVyX2dldG92ZXJydW4gKF9fTlJfTGludXggKyAyMjMpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3RpbWVyX2RlbGV0ZSAoX19OUl9MaW51eCArIDIyNCkKICNkZWZpbmUgX19OUl9jbG9ja19zZXR0aW1lIChfX05SX0xpbnV4ICsgMjI1KQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9jbG9ja19nZXR0aW1lIChfX05SX0xpbnV4ICsgMjI2KQogI2RlZmluZSBfX05SX2Nsb2NrX2dldHJlcyAoX19OUl9MaW51eCArIDIyNykKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfY2xvY2tfbmFub3NsZWVwIChfX05SX0xpbnV4ICsgMjI4KQogI2RlZmluZSBfX05SX3Rna2lsbCAoX19OUl9MaW51eCArIDIyOSkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfdXRpbWVzIChfX05SX0xpbnV4ICsgMjMwKQogI2RlZmluZSBfX05SX21iaW5kIChfX05SX0xpbnV4ICsgMjMxKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9nZXRfbWVtcG9saWN5IChfX05SX0xpbnV4ICsgMjMyKQogI2RlZmluZSBfX05SX3NldF9tZW1wb2xpY3kgKF9fTlJfTGludXggKyAyMzMpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX21xX29wZW4gKF9fTlJfTGludXggKyAyMzQpCiAjZGVmaW5lIF9fTlJfbXFfdW5saW5rIChfX05SX0xpbnV4ICsgMjM1KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9tcV90aW1lZHNlbmQgKF9fTlJfTGludXggKyAyMzYpCiAjZGVmaW5lIF9fTlJfbXFfdGltZWRyZWNlaXZlIChfX05SX0xpbnV4ICsgMjM3KQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9tcV9ub3RpZnkgKF9fTlJfTGludXggKyAyMzgpCiAjZGVmaW5lIF9fTlJfbXFfZ2V0c2V0YXR0ciAoX19OUl9MaW51eCArIDIzOSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfdnNlcnZlciAoX19OUl9MaW51eCArIDI0MCkKICNkZWZpbmUgX19OUl93YWl0aWQgKF9fTlJfTGludXggKyAyNDEpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX2FkZF9rZXkgKF9fTlJfTGludXggKyAyNDMpCiAjZGVmaW5lIF9fTlJfcmVxdWVzdF9rZXkgKF9fTlJfTGludXggKyAyNDQpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX2tleWN0bCAoX19OUl9MaW51eCArIDI0NSkKICNkZWZpbmUgX19OUl9zZXRfdGhyZWFkX2FyZWEgKF9fTlJfTGludXggKyAyNDYpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX2lub3RpZnlfaW5pdCAoX19OUl9MaW51eCArIDI0NykKICNkZWZpbmUgX19OUl9pbm90aWZ5X2FkZF93YXRjaCAoX19OUl9MaW51eCArIDI0OCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfaW5vdGlmeV9ybV93YXRjaCAoX19OUl9MaW51eCArIDI0OSkKICNkZWZpbmUgX19OUl9taWdyYXRlX3BhZ2VzIChfX05SX0xpbnV4ICsgMjUwKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9vcGVuYXQgKF9fTlJfTGludXggKyAyNTEpCiAjZGVmaW5lIF9fTlJfbWtkaXJhdCAoX19OUl9MaW51eCArIDI1MikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfbWtub2RhdCAoX19OUl9MaW51eCArIDI1MykKICNkZWZpbmUgX19OUl9mY2hvd25hdCAoX19OUl9MaW51eCArIDI1NCkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfZnV0aW1lc2F0IChfX05SX0xpbnV4ICsgMjU1KQogI2RlZmluZSBfX05SX25ld2ZzdGF0YXQgKF9fTlJfTGludXggKyAyNTYpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3VubGlua2F0IChfX05SX0xpbnV4ICsgMjU3KQogI2RlZmluZSBfX05SX3JlbmFtZWF0IChfX05SX0xpbnV4ICsgMjU4KQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9saW5rYXQgKF9fTlJfTGludXggKyAyNTkpCiAjZGVmaW5lIF9fTlJfc3ltbGlua2F0IChfX05SX0xpbnV4ICsgMjYwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9yZWFkbGlua2F0IChfX05SX0xpbnV4ICsgMjYxKQogI2RlZmluZSBfX05SX2ZjaG1vZGF0IChfX05SX0xpbnV4ICsgMjYyKQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9mYWNjZXNzYXQgKF9fTlJfTGludXggKyAyNjMpCiAjZGVmaW5lIF9fTlJfcHNlbGVjdDYgKF9fTlJfTGludXggKyAyNjQpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3Bwb2xsIChfX05SX0xpbnV4ICsgMjY1KQogI2RlZmluZSBfX05SX3Vuc2hhcmUgKF9fTlJfTGludXggKyAyNjYpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3NwbGljZSAoX19OUl9MaW51eCArIDI2NykKICNkZWZpbmUgX19OUl9zeW5jX2ZpbGVfcmFuZ2UgKF9fTlJfTGludXggKyAyNjgpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3RlZSAoX19OUl9MaW51eCArIDI2OSkKICNkZWZpbmUgX19OUl92bXNwbGljZSAoX19OUl9MaW51eCArIDI3MCkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfbW92ZV9wYWdlcyAoX19OUl9MaW51eCArIDI3MSkKICNkZWZpbmUgX19OUl9zZXRfcm9idXN0X2xpc3QgKF9fTlJfTGludXggKyAyNzIpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX2dldF9yb2J1c3RfbGlzdCAoX19OUl9MaW51eCArIDI3MykKICNkZWZpbmUgX19OUl9rZXhlY19sb2FkIChfX05SX0xpbnV4ICsgMjc0KQotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9nZXRjcHUgKF9fTlJfTGludXggKyAyNzUpCiAjZGVmaW5lIF9fTlJfZXBvbGxfcHdhaXQgKF9fTlJfTGludXggKyAyNzYpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX2lvcHJpb19zZXQgKF9fTlJfTGludXggKyAyNzcpCiAjZGVmaW5lIF9fTlJfaW9wcmlvX2dldCAoX19OUl9MaW51eCArIDI3OCkKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfdXRpbWVuc2F0IChfX05SX0xpbnV4ICsgMjc5KQogI2RlZmluZSBfX05SX3NpZ25hbGZkIChfX05SX0xpbnV4ICsgMjgwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl90aW1lcmZkIChfX05SX0xpbnV4ICsgMjgxKQogI2RlZmluZSBfX05SX2V2ZW50ZmQgKF9fTlJfTGludXggKyAyODIpCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX2ZhbGxvY2F0ZSAoX19OUl9MaW51eCArIDI4MykKICNkZWZpbmUgX19OUl90aW1lcmZkX2NyZWF0ZSAoX19OUl9MaW51eCArIDI4NCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfdGltZXJmZF9nZXR0aW1lIChfX05SX0xpbnV4ICsgMjg1KQogI2RlZmluZSBfX05SX3RpbWVyZmRfc2V0dGltZSAoX19OUl9MaW51eCArIDI4NikKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfc2lnbmFsZmQ0IChfX05SX0xpbnV4ICsgMjg3KQogI2RlZmluZSBfX05SX2V2ZW50ZmQyIChfX05SX0xpbnV4ICsgMjg4KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9lcG9sbF9jcmVhdGUxIChfX05SX0xpbnV4ICsgMjg5KQogI2RlZmluZSBfX05SX2R1cDMgKF9fTlJfTGludXggKyAyOTApCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3BpcGUyIChfX05SX0xpbnV4ICsgMjkxKQogI2RlZmluZSBfX05SX2lub3RpZnlfaW5pdDEgKF9fTlJfTGludXggKyAyOTIpCi0jZGVmaW5lIF9fTlJfTGludXhfc3lzY2FsbHMgMjkyCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBfX05SX3ByZWFkdiAoX19OUl9MaW51eCArIDI5MykKKyNkZWZpbmUgX19OUl9wd3JpdGV2IChfX05SX0xpbnV4ICsgMjk0KQorI2RlZmluZSBfX05SX3J0X3Rnc2lncXVldWVpbmZvIChfX05SX0xpbnV4ICsgMjk1KQorI2RlZmluZSBfX05SX3BlcmZfZXZlbnRfb3BlbiAoX19OUl9MaW51eCArIDI5NikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIF9fTlJfYWNjZXB0NCAoX19OUl9MaW51eCArIDI5NykKKyNkZWZpbmUgX19OUl9yZWN2bW1zZyAoX19OUl9MaW51eCArIDI5OCkKKyNkZWZpbmUgX19OUl9nZXRkZW50czY0IChfX05SX0xpbnV4ICsgMjk5KQorI2RlZmluZSBfX05SX2Zhbm90aWZ5X2luaXQgKF9fTlJfTGludXggKyAzMDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBfX05SX2Zhbm90aWZ5X21hcmsgKF9fTlJfTGludXggKyAzMDEpCisjZGVmaW5lIF9fTlJfcHJsaW1pdDY0IChfX05SX0xpbnV4ICsgMzAyKQorI2RlZmluZSBfX05SX25hbWVfdG9faGFuZGxlX2F0IChfX05SX0xpbnV4ICsgMzAzKQorI2RlZmluZSBfX05SX29wZW5fYnlfaGFuZGxlX2F0IChfX05SX0xpbnV4ICsgMzA0KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgX19OUl9jbG9ja19hZGp0aW1lIChfX05SX0xpbnV4ICsgMzA1KQorI2RlZmluZSBfX05SX3N5bmNmcyAoX19OUl9MaW51eCArIDMwNikKKyNkZWZpbmUgX19OUl9zZW5kbW1zZyAoX19OUl9MaW51eCArIDMwNykKKyNkZWZpbmUgX19OUl9zZXRucyAoX19OUl9MaW51eCArIDMwOCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIF9fTlJfcHJvY2Vzc192bV9yZWFkdiAoX19OUl9MaW51eCArIDMwOSkKKyNkZWZpbmUgX19OUl9wcm9jZXNzX3ZtX3dyaXRldiAoX19OUl9MaW51eCArIDMxMCkKKyNkZWZpbmUgX19OUl9MaW51eF9zeXNjYWxscyAzMTAKICNlbmRpZgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9OMzJfTGludXggNjAwMAotI2RlZmluZSBfX05SX04zMl9MaW51eF9zeXNjYWxscyAyOTIKKyNkZWZpbmUgX19OUl9OMzJfTGludXhfc3lzY2FsbHMgMzEwCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gtbWlwcy9hc20vdnI0MXh4L2lycS5oIGIvbGliYy9rZXJuZWwvYXJjaC1taXBzL2FzbS92cjQxeHgvaXJxLmgKaW5kZXggMWM1NGI2Ni4uZWNjNzRmYyAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvYXJjaC1taXBzL2FzbS92cjQxeHgvaXJxLmgKKysrIGIvbGliYy9rZXJuZWwvYXJjaC1taXBzL2FzbS92cjQxeHgvaXJxLmgKQEAgLTU5LDcgKzU5LDcgQEAKICNkZWZpbmUgSFNQX0lSUSBTWVNJTlQyX0lSUSgyKQogI2RlZmluZSBUQ0xPQ0tfSVJRIFNZU0lOVDJfSVJRKDMpCiAjZGVmaW5lIEZJUl9JUlEgU1lTSU5UMl9JUlEoNCkKLSNkZWZpbmUgQ0VVX0lSUSBTWVNJTlQyX0lSUSg0KSAgCisjZGVmaW5lIENFVV9JUlEgU1lTSU5UMl9JUlEoNCkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIERTSVVfSVJRIFNZU0lOVDJfSVJRKDUpCiAjZGVmaW5lIFBDSV9JUlEgU1lTSU5UMl9JUlEoNikKQEAgLTcxLDcgKzcxLDcgQEAKICNkZWZpbmUgU1lTSU5UMl9JUlFfTEFTVCBFVEhFUk5FVF9JUlEKICNkZWZpbmUgR0lVX0lSUV9CQVNFIDQwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBHSVVfSVJRKHgpIChHSVVfSVJRX0JBU0UgKyAoeCkpICAKKyNkZWZpbmUgR0lVX0lSUSh4KSAoR0lVX0lSUV9CQVNFICsgKHgpKQogI2RlZmluZSBHSVVfSVJRX0xBU1QgR0lVX0lSUSgzMSkKICNkZWZpbmUgVlJDNDE3M19JUlFfQkFTRSA3MgogI2RlZmluZSBWUkM0MTczX0lSUSh4KSAoVlJDNDE3M19JUlFfQkFTRSArICh4KSkKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9hLm91dC5oIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2Eub3V0LmgKaW5kZXggNmFlY2ZmNy4uZmEyODdiNSAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2Eub3V0LmgKKysrIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2Eub3V0LmgKQEAgLTcsMjUgKzcsMzMgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9BU01fWDg2X0FfT1VUX0gKICNkZWZpbmUgX0FTTV9YODZfQV9PVVRfSAotCiBzdHJ1Y3QgZXhlYwogeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBpbnQgYV9pbmZvOwogIHVuc2lnbmVkIGFfdGV4dDsKICB1bnNpZ25lZCBhX2RhdGE7CiAgdW5zaWduZWQgYV9ic3M7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGFfc3ltczsKICB1bnNpZ25lZCBhX2VudHJ5OwogIHVuc2lnbmVkIGFfdHJzaXplOwogIHVuc2lnbmVkIGFfZHJzaXplOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07Ci0KICNkZWZpbmUgTl9UUlNJWkUoYSkgKChhKS5hX3Ryc2l6ZSkKICNkZWZpbmUgTl9EUlNJWkUoYSkgKChhKS5hX2Ryc2l6ZSkKICNkZWZpbmUgTl9TWU1TSVpFKGEpICgoYSkuYV9zeW1zKQotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vYWNwaS5oIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2FjcGkuaAppbmRleCAwMTE1Y2U5Li45MmU2YjdkIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vYWNwaS5oCisrKyBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9hY3BpLmgKQEAgLTcsMTMgKzcsMTggQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9BU01fWDg2X0FDUElfSAogI2RlZmluZSBfQVNNX1g4Nl9BQ1BJX0gKLQotI2luY2x1ZGUgImFjcGlfNjQuaCIKLQorI2luY2x1ZGUgImFjcGlfMzIuaCIKICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9hY3BpXzMyLmggYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vYWNwaV8zMi5oCmluZGV4IGZlMDA0M2MuLmFmNjBjNjMgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9hY3BpXzMyLmgKKysrIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2FjcGlfMzIuaApAQCAtNyw5ICs3LDE1IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfQVNNX0FDUElfSAogI2RlZmluZSBfQVNNX0FDUElfSAotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9hbHRlcm5hdGl2ZS5oIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2FsdGVybmF0aXZlLmgKaW5kZXggMTdjMWRjNS4uMTA3ZjU1MSAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2FsdGVybmF0aXZlLmgKKysrIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2FsdGVybmF0aXZlLmgKQEAgLTcsNiArNywxMyBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSNpbmNsdWRlICJhbHRlcm5hdGl2ZV82NC5oIgorI2luY2x1ZGUgImFsdGVybmF0aXZlXzMyLmgiCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vYWx0ZXJuYXRpdmVfMzIuaCBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9hbHRlcm5hdGl2ZV8zMi5oCmluZGV4IGVmMTMxMTEuLjVhYTIwODggMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9hbHRlcm5hdGl2ZV8zMi5oCisrKyBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9hbHRlcm5hdGl2ZV8zMi5oCkBAIC03LDMyICs3LDQwIEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfSTM4Nl9BTFRFUk5BVElWRV9ICiAjZGVmaW5lIF9JMzg2X0FMVEVSTkFUSVZFX0gKLQogI2luY2x1ZGUgPGFzbS90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotCiBzdHJ1Y3QgYWx0X2luc3RyIHsKICB1OCAqaW5zdHI7CiAgdTggKnJlcGxhY2VtZW50OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1OCBjcHVpZDsKICB1OCBpbnN0cmxlbjsKICB1OCByZXBsYWNlbWVudGxlbjsKICB1OCBwYWQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKLQogc3RydWN0IG1vZHVsZTsKICNkZWZpbmUgYWx0ZXJuYXRpdmUob2xkaW5zdHIsIG5ld2luc3RyLCBmZWF0dXJlKSAgIGFzbSB2b2xhdGlsZSAoIjY2MTpcblx0IiBvbGRpbnN0ciAiXG42NjI6XG4iICAgIi5zZWN0aW9uIC5hbHRpbnN0cnVjdGlvbnMsXCJhXCJcbiIgICAiICAuYWxpZ24gNFxuIiAgICIgIC5sb25nIDY2MWJcbiIgICAgICIgIC5sb25nIDY2M2ZcbiIgICAgICIgIC5ieXRlICVjMFxuIiAgICAgIiAgLmJ5dGUgNjYyYi02NjFiXG4iICAgICAiICAuYnl0ZSA2NjRmLTY2M2ZcbiIgICAgICIucHJldmlvdXNcbiIgICAiLnNlY3Rpb24gLmFsdGluc3RyX3JlcGxhY2VtZW50LFwiYXhcIlxuIiAgICI2NjM6XG5cdCIgbmV3aW5zdHIgIlxuNjY0OlxuIiAgICAiLnByZXZpb3VzIiA6OiAiaSIgKGZlYXR1cmUpIDogIm1lbW9yeSIpCiAjZGVmaW5lIGFsdGVybmF0aXZlX2lucHV0KG9sZGluc3RyLCBuZXdpbnN0ciwgZmVhdHVyZSwgaW5wdXQuLi4pICAgYXNtIHZvbGF0aWxlICgiNjYxOlxuXHQiIG9sZGluc3RyICJcbjY2MjpcbiIgICAiLnNlY3Rpb24gLmFsdGluc3RydWN0aW9ucyxcImFcIlxuIiAgICIgIC5hbGlnbiA0XG4iICAgIiAgLmxvbmcgNjYxYlxuIiAgICAgIiAgLmxvbmcgNjYzZlxuIiAgICAgIiAgLmJ5dGUgJWMwXG4iICAgICAiICAuYnl0ZSA2NjJiLTY2MWJcbiIgICAgICIgIC5ieXRlIDY2NGYtNjYzZlxuIiAgICAgIi5wcmV2aW91c1xuIiAgICIuc2VjdGlvbiAuYWx0aW5zdHJfcmVwbGFjZW1lbnQsXCJheFwiXG4iICAgIjY2Mzpcblx0IiBuZXdpbnN0ciAiXG42NjQ6XG4iICAgICIucHJldmlvdXMiIDo6ICJpIiAoZmVhdHVyZSksICMjaW5wdXQpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBhbHRlcm5hdGl2ZV9pbyhvbGRpbnN0ciwgbmV3aW5zdHIsIGZlYXR1cmUsIG91dHB1dCwgaW5wdXQuLi4pICAgYXNtIHZvbGF0aWxlICgiNjYxOlxuXHQiIG9sZGluc3RyICJcbjY2MjpcbiIgICAiLnNlY3Rpb24gLmFsdGluc3RydWN0aW9ucyxcImFcIlxuIiAgICIgIC5hbGlnbiA0XG4iICAgIiAgLmxvbmcgNjYxYlxuIiAgICAgIiAgLmxvbmcgNjYzZlxuIiAgICAgIiAgLmJ5dGUgJWNbZmVhdF1cbiIgICAgICIgIC5ieXRlIDY2MmItNjYxYlxuIiAgICAgIiAgLmJ5dGUgNjY0Zi02NjNmXG4iICAgICAiLnByZXZpb3VzXG4iICAgIi5zZWN0aW9uIC5hbHRpbnN0cl9yZXBsYWNlbWVudCxcImF4XCJcbiIgICAiNjYzOlxuXHQiIG5ld2luc3RyICJcbjY2NDpcbiIgICAgICIucHJldmlvdXMiIDogb3V0cHV0IDogW2ZlYXRdICJpIiAoZmVhdHVyZSksICMjaW5wdXQpCiAjZGVmaW5lIEFTTV9PVVRQVVQyKGEsIGIpIGEsIGIKICNkZWZpbmUgTE9DS19QUkVGSVggIiIKLQorc3RydWN0IHBhcmF2aXJ0X3BhdGNoX3NpdGU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX3BhcmFpbnN0cnVjdGlvbnMgTlVMTAogI2RlZmluZSBfX3BhcmFpbnN0cnVjdGlvbnNfZW5kIE5VTEwKLQogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vYXBpYy5oIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2FwaWMuaAppbmRleCA1Y2I3MTgxLi5iZjZhYzcyIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vYXBpYy5oCisrKyBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9hcGljLmgKQEAgLTcsNiArNywxMyBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSNpbmNsdWRlICJhcGljXzY0LmgiCisjaW5jbHVkZSAiYXBpY18zMi5oIgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2FwaWNfMzIuaCBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9hcGljXzMyLmgKaW5kZXggMDJjOWQ5Yi4uY2NiMzkwYiAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2FwaWNfMzIuaAorKysgYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vYXBpY18zMi5oCkBAIC03LDI1ICs3LDMwIEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfX0FTTV9BUElDX0gKICNkZWZpbmUgX19BU01fQVBJQ19ICi0KICNpbmNsdWRlIDxsaW51eC9wbS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2luY2x1ZGUgPGFzbS9maXhtYXAuaD4KICNpbmNsdWRlIDxhc20vYXBpY2RlZi5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIERwcmludGsoeC4uLikKLQogI2RlZmluZSBBUElDX1FVSUVUIDAKICNkZWZpbmUgQVBJQ19WRVJCT1NFIDEKICNkZWZpbmUgQVBJQ19ERUJVRyAyCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIGFwaWNfcHJpbnRrKHYsIHMsIGEuLi4pIGRvIHsgICBpZiAoKHYpIDw9IGFwaWNfdmVyYm9zaXR5KSAgIHByaW50ayhzLCAjI2EpOyAgIH0gd2hpbGUgKDApCi0KICNkZWZpbmUgbG9jYWxfYXBpY190aW1lcl9jMl9vayAxCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9hcGljZGVmLmggYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vYXBpY2RlZi5oCmluZGV4IGJkMTlmNWEuLmFmNWIwNzQgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9hcGljZGVmLmgKKysrIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2FwaWNkZWYuaApAQCAtNyw2ICs3LDEzIEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotI2luY2x1ZGUgImFwaWNkZWZfNjQuaCIKKyNpbmNsdWRlICJhcGljZGVmXzMyLmgiCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vYXBpY2RlZl8zMi5oIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2FwaWNkZWZfMzIuaAppbmRleCBhNGE1ZWRiLi5lNzNmZjIxIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vYXBpY2RlZl8zMi5oCisrKyBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9hcGljZGVmXzMyLmgKQEAgLTcsMzY2ICs3LDM5OCBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX19BU01fQVBJQ0RFRl9ICiAjZGVmaW5lIF9fQVNNX0FQSUNERUZfSAotCiAjZGVmaW5lIEFQSUNfREVGQVVMVF9QSFlTX0JBU0UgMHhmZWUwMDAwMAotCiAjZGVmaW5lIEFQSUNfSUQgMHgyMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQVBJQ19MVlIgMHgzMAogI2RlZmluZSBBUElDX0xWUl9NQVNLIDB4RkYwMEZGCiAjZGVmaW5lIEdFVF9BUElDX1ZFUlNJT04oeCkgKCh4KSYweEZGKQogI2RlZmluZSBHRVRfQVBJQ19NQVhMVlQoeCkgKCgoeCk+PjE2KSYweEZGKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQVBJQ19JTlRFR1JBVEVEKHgpICgoeCkmMHhGMCkKICNkZWZpbmUgQVBJQ19YQVBJQyh4KSAoKHgpID49IDB4MTQpCiAjZGVmaW5lIEFQSUNfVEFTS1BSSSAweDgwCiAjZGVmaW5lIEFQSUNfVFBSSV9NQVNLIDB4RkYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFQSUNfQVJCUFJJIDB4OTAKICNkZWZpbmUgQVBJQ19BUkJQUklfTUFTSyAweEZGCiAjZGVmaW5lIEFQSUNfUFJPQ1BSSSAweEEwCiAjZGVmaW5lIEFQSUNfRU9JIDB4QjAKLSNkZWZpbmUgQVBJQ19FSU9fQUNLIDB4MCAgCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBBUElDX0VJT19BQ0sgMHgwCiAjZGVmaW5lIEFQSUNfUlJSIDB4QzAKICNkZWZpbmUgQVBJQ19MRFIgMHhEMAogI2RlZmluZSBBUElDX0xEUl9NQVNLICgweEZGPDwyNCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEdFVF9BUElDX0xPR0lDQUxfSUQoeCkgKCgoeCk+PjI0KSYweEZGKQogI2RlZmluZSBTRVRfQVBJQ19MT0dJQ0FMX0lEKHgpICgoKHgpPDwyNCkpCiAjZGVmaW5lIEFQSUNfQUxMX0NQVVMgMHhGRgogI2RlZmluZSBBUElDX0RGUiAweEUwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBUElDX0RGUl9DTFVTVEVSIDB4MEZGRkZGRkZ1bAogI2RlZmluZSBBUElDX0RGUl9GTEFUIDB4RkZGRkZGRkZ1bAogI2RlZmluZSBBUElDX1NQSVYgMHhGMAogI2RlZmluZSBBUElDX1NQSVZfRk9DVVNfRElTQUJMRUQgKDE8PDkpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBUElDX1NQSVZfQVBJQ19FTkFCTEVEICgxPDw4KQogI2RlZmluZSBBUElDX0lTUiAweDEwMAotI2RlZmluZSBBUElDX0lTUl9OUiAweDggIAorI2RlZmluZSBBUElDX0lTUl9OUiAweDgKICNkZWZpbmUgQVBJQ19UTVIgMHgxODAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFQSUNfSVJSIDB4MjAwCiAjZGVmaW5lIEFQSUNfRVNSIDB4MjgwCiAjZGVmaW5lIEFQSUNfRVNSX1NFTkRfQ1MgMHgwMDAwMQogI2RlZmluZSBBUElDX0VTUl9SRUNWX0NTIDB4MDAwMDIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFQSUNfRVNSX1NFTkRfQUNDIDB4MDAwMDQKICNkZWZpbmUgQVBJQ19FU1JfUkVDVl9BQ0MgMHgwMDAwOAogI2RlZmluZSBBUElDX0VTUl9TRU5ESUxMIDB4MDAwMjAKICNkZWZpbmUgQVBJQ19FU1JfUkVDVklMTCAweDAwMDQwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBUElDX0VTUl9JTExSRUdBIDB4MDAwODAKICNkZWZpbmUgQVBJQ19JQ1IgMHgzMDAKICNkZWZpbmUgQVBJQ19ERVNUX1NFTEYgMHg0MDAwMAogI2RlZmluZSBBUElDX0RFU1RfQUxMSU5DIDB4ODAwMDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFQSUNfREVTVF9BTExCVVQgMHhDMDAwMAogI2RlZmluZSBBUElDX0lDUl9SUl9NQVNLIDB4MzAwMDAKICNkZWZpbmUgQVBJQ19JQ1JfUlJfSU5WQUxJRCAweDAwMDAwCiAjZGVmaW5lIEFQSUNfSUNSX1JSX0lOUFJPRyAweDEwMDAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBUElDX0lDUl9SUl9WQUxJRCAweDIwMDAwCiAjZGVmaW5lIEFQSUNfSU5UX0xFVkVMVFJJRyAweDA4MDAwCiAjZGVmaW5lIEFQSUNfSU5UX0FTU0VSVCAweDA0MDAwCiAjZGVmaW5lIEFQSUNfSUNSX0JVU1kgMHgwMTAwMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQVBJQ19ERVNUX0xPR0lDQUwgMHgwMDgwMAogI2RlZmluZSBBUElDX0RNX0ZJWEVEIDB4MDAwMDAKICNkZWZpbmUgQVBJQ19ETV9MT1dFU1QgMHgwMDEwMAogI2RlZmluZSBBUElDX0RNX1NNSSAweDAwMjAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBUElDX0RNX1JFTVJEIDB4MDAzMDAKICNkZWZpbmUgQVBJQ19ETV9OTUkgMHgwMDQwMAogI2RlZmluZSBBUElDX0RNX0lOSVQgMHgwMDUwMAogI2RlZmluZSBBUElDX0RNX1NUQVJUVVAgMHgwMDYwMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQVBJQ19ETV9FWFRJTlQgMHgwMDcwMAogI2RlZmluZSBBUElDX1ZFQ1RPUl9NQVNLIDB4MDAwRkYKICNkZWZpbmUgQVBJQ19JQ1IyIDB4MzEwCiAjZGVmaW5lIEdFVF9BUElDX0RFU1RfRklFTEQoeCkgKCgoeCk+PjI0KSYweEZGKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU0VUX0FQSUNfREVTVF9GSUVMRCh4KSAoKHgpPDwyNCkKICNkZWZpbmUgQVBJQ19MVlRUIDB4MzIwCiAjZGVmaW5lIEFQSUNfTFZUVEhNUiAweDMzMAogI2RlZmluZSBBUElDX0xWVFBDIDB4MzQwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBUElDX0xWVDAgMHgzNTAKICNkZWZpbmUgQVBJQ19MVlRfVElNRVJfQkFTRV9NQVNLICgweDM8PDE4KQogI2RlZmluZSBHRVRfQVBJQ19USU1FUl9CQVNFKHgpICgoKHgpPj4xOCkmMHgzKQogI2RlZmluZSBTRVRfQVBJQ19USU1FUl9CQVNFKHgpICgoKHgpPDwxOCkpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBUElDX1RJTUVSX0JBU0VfQ0xLSU4gMHgwCiAjZGVmaW5lIEFQSUNfVElNRVJfQkFTRV9UTUJBU0UgMHgxCiAjZGVmaW5lIEFQSUNfVElNRVJfQkFTRV9ESVYgMHgyCiAjZGVmaW5lIEFQSUNfTFZUX1RJTUVSX1BFUklPRElDICgxPDwxNykKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFQSUNfTFZUX01BU0tFRCAoMTw8MTYpCiAjZGVmaW5lIEFQSUNfTFZUX0xFVkVMX1RSSUdHRVIgKDE8PDE1KQogI2RlZmluZSBBUElDX0xWVF9SRU1PVEVfSVJSICgxPDwxNCkKICNkZWZpbmUgQVBJQ19JTlBVVF9QT0xBUklUWSAoMTw8MTMpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBUElDX1NFTkRfUEVORElORyAoMTw8MTIpCiAjZGVmaW5lIEFQSUNfTU9ERV9NQVNLIDB4NzAwCiAjZGVmaW5lIEdFVF9BUElDX0RFTElWRVJZX01PREUoeCkgKCgoeCk+PjgpJjB4NykKICNkZWZpbmUgU0VUX0FQSUNfREVMSVZFUllfTU9ERSh4LHkpICgoKHgpJn4weDcwMCl8KCh5KTw8OCkpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBUElDX01PREVfRklYRUQgMHgwCiAjZGVmaW5lIEFQSUNfTU9ERV9OTUkgMHg0CiAjZGVmaW5lIEFQSUNfTU9ERV9FWFRJTlQgMHg3CiAjZGVmaW5lIEFQSUNfTFZUMSAweDM2MAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQVBJQ19MVlRFUlIgMHgzNzAKICNkZWZpbmUgQVBJQ19UTUlDVCAweDM4MAogI2RlZmluZSBBUElDX1RNQ0NUIDB4MzkwCiAjZGVmaW5lIEFQSUNfVERDUiAweDNFMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQVBJQ19URFJfRElWX1RNQkFTRSAoMTw8MikKICNkZWZpbmUgQVBJQ19URFJfRElWXzEgMHhCCiAjZGVmaW5lIEFQSUNfVERSX0RJVl8yIDB4MAogI2RlZmluZSBBUElDX1REUl9ESVZfNCAweDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFQSUNfVERSX0RJVl84IDB4MgogI2RlZmluZSBBUElDX1REUl9ESVZfMTYgMHgzCiAjZGVmaW5lIEFQSUNfVERSX0RJVl8zMiAweDgKICNkZWZpbmUgQVBJQ19URFJfRElWXzY0IDB4OQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQVBJQ19URFJfRElWXzEyOCAweEEKLQogI2RlZmluZSBBUElDX0JBU0UgKGZpeF90b192aXJ0KEZJWF9BUElDX0JBU0UpKQotCiAjZGVmaW5lIE1BWF9JT19BUElDUyA2NAotCiAjZGVmaW5lIHUzMiB1bnNpZ25lZCBpbnQKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBsb2NhbF9hcGljIHsKLQogICBzdHJ1Y3QgeyB1MzIgX19yZXNlcnZlZFs0XTsgfSBfX3Jlc2VydmVkXzAxOwotCiAgIHN0cnVjdCB7IHUzMiBfX3Jlc2VydmVkWzRdOyB9IF9fcmVzZXJ2ZWRfMDI7Ci0KICAgc3RydWN0IHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdTMyIF9fcmVzZXJ2ZWRfMSA6IDI0LAogIHBoeXNfYXBpY19pZCA6IDQsCiAgX19yZXNlcnZlZF8yIDogNDsKICB1MzIgX19yZXNlcnZlZFszXTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgfSBpZDsKLQogICBjb25zdAogIHN0cnVjdCB7CiAgdTMyIHZlcnNpb24gOiA4LAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3Jlc2VydmVkXzEgOiA4LAogIG1heF9sdnQgOiA4LAogIF9fcmVzZXJ2ZWRfMiA6IDg7CiAgdTMyIF9fcmVzZXJ2ZWRbM107CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIH0gdmVyc2lvbjsKLQogICBzdHJ1Y3QgeyB1MzIgX19yZXNlcnZlZFs0XTsgfSBfX3Jlc2VydmVkXzAzOwotCiAgIHN0cnVjdCB7IHUzMiBfX3Jlc2VydmVkWzRdOyB9IF9fcmVzZXJ2ZWRfMDQ7Ci0KICAgc3RydWN0IHsgdTMyIF9fcmVzZXJ2ZWRbNF07IH0gX19yZXNlcnZlZF8wNTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICAgc3RydWN0IHsgdTMyIF9fcmVzZXJ2ZWRbNF07IH0gX19yZXNlcnZlZF8wNjsKLQogICBzdHJ1Y3QgewogIHUzMiBwcmlvcml0eSA6IDgsCiAgX19yZXNlcnZlZF8xIDogMjQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHUzMiBfX3Jlc2VydmVkXzJbM107CiAgfSB0cHI7Ci0KICAgY29uc3QKICBzdHJ1Y3QgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1MzIgcHJpb3JpdHkgOiA4LAogIF9fcmVzZXJ2ZWRfMSA6IDI0OwogIHUzMiBfX3Jlc2VydmVkXzJbM107CiAgfSBhcHI7Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgIGNvbnN0CiAgc3RydWN0IHsKICB1MzIgcHJpb3JpdHkgOiA4LAogIF9fcmVzZXJ2ZWRfMSA6IDI0OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1MzIgX19yZXNlcnZlZF8yWzNdOwogIH0gcHByOwotCiAgIHN0cnVjdCB7CiAgdTMyIGVvaTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdTMyIF9fcmVzZXJ2ZWRbM107CiAgfSBlb2k7Ci0KICAgc3RydWN0IHsgdTMyIF9fcmVzZXJ2ZWRbNF07IH0gX19yZXNlcnZlZF8wNzsKLQogICBzdHJ1Y3QgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1MzIgX19yZXNlcnZlZF8xIDogMjQsCiAgbG9naWNhbF9kZXN0IDogODsKICB1MzIgX19yZXNlcnZlZF8yWzNdOwogIH0gbGRyOwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogICBzdHJ1Y3QgewogIHUzMiBfX3Jlc2VydmVkXzEgOiAyOCwKICBtb2RlbCA6IDQ7CiAgdTMyIF9fcmVzZXJ2ZWRfMlszXTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgfSBkZnI7Ci0KICAgc3RydWN0IHsKICB1MzIgc3B1cmlvdXNfdmVjdG9yIDogOCwKICBhcGljX2VuYWJsZWQgOiAxLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBmb2N1c19jcHUgOiAxLAogIF9fcmVzZXJ2ZWRfMiA6IDIyOwogIHUzMiBfX3Jlc2VydmVkXzNbM107CiAgfSBzdnI7Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgIHN0cnVjdCB7CiAgIHUzMiBiaXRmaWVsZDsKICB1MzIgX19yZXNlcnZlZFszXTsKICB9IGlzciBbOF07Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgIHN0cnVjdCB7CiAgIHUzMiBiaXRmaWVsZDsKICB1MzIgX19yZXNlcnZlZFszXTsKICB9IHRtciBbOF07Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgIHN0cnVjdCB7CiAgIHUzMiBiaXRmaWVsZDsKICB1MzIgX19yZXNlcnZlZFszXTsKICB9IGlyciBbOF07Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgIHVuaW9uIHsKICBzdHJ1Y3QgewogIHUzMiBzZW5kX2NzX2Vycm9yIDogMSwKICByZWNlaXZlX2NzX2Vycm9yIDogMSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc2VuZF9hY2NlcHRfZXJyb3IgOiAxLAogIHJlY2VpdmVfYWNjZXB0X2Vycm9yIDogMSwKICBfX3Jlc2VydmVkXzEgOiAxLAogIHNlbmRfaWxsZWdhbF92ZWN0b3IgOiAxLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICByZWNlaXZlX2lsbGVnYWxfdmVjdG9yIDogMSwKICBpbGxlZ2FsX3JlZ2lzdGVyX2FkZHJlc3MgOiAxLAogIF9fcmVzZXJ2ZWRfMiA6IDI0OwogIHUzMiBfX3Jlc2VydmVkXzNbM107CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIH0gZXJyb3JfYml0czsKICBzdHJ1Y3QgewogIHUzMiBlcnJvcnM7CiAgdTMyIF9fcmVzZXJ2ZWRfM1szXTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgfSBhbGxfZXJyb3JzOwogIH0gZXNyOwotCiAgIHN0cnVjdCB7IHUzMiBfX3Jlc2VydmVkWzRdOyB9IF9fcmVzZXJ2ZWRfMDg7Ci0KICAgc3RydWN0IHsgdTMyIF9fcmVzZXJ2ZWRbNF07IH0gX19yZXNlcnZlZF8wOTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICAgc3RydWN0IHsgdTMyIF9fcmVzZXJ2ZWRbNF07IH0gX19yZXNlcnZlZF8xMDsKLQogICBzdHJ1Y3QgeyB1MzIgX19yZXNlcnZlZFs0XTsgfSBfX3Jlc2VydmVkXzExOwotCiAgIHN0cnVjdCB7IHUzMiBfX3Jlc2VydmVkWzRdOyB9IF9fcmVzZXJ2ZWRfMTI7Ci0KICAgc3RydWN0IHsgdTMyIF9fcmVzZXJ2ZWRbNF07IH0gX19yZXNlcnZlZF8xMzsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICAgc3RydWN0IHsgdTMyIF9fcmVzZXJ2ZWRbNF07IH0gX19yZXNlcnZlZF8xNDsKLQogICBzdHJ1Y3QgewogIHUzMiB2ZWN0b3IgOiA4LAogIGRlbGl2ZXJ5X21vZGUgOiAzLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBkZXN0aW5hdGlvbl9tb2RlIDogMSwKICBkZWxpdmVyeV9zdGF0dXMgOiAxLAogIF9fcmVzZXJ2ZWRfMSA6IDEsCiAgbGV2ZWwgOiAxLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB0cmlnZ2VyIDogMSwKICBfX3Jlc2VydmVkXzIgOiAyLAogIHNob3J0aGFuZCA6IDIsCiAgX19yZXNlcnZlZF8zIDogMTI7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHUzMiBfX3Jlc2VydmVkXzRbM107CiAgfSBpY3IxOwotCiAgIHN0cnVjdCB7CiAgdW5pb24geworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1MzIgX19yZXNlcnZlZF8xIDogMjQsCiAgcGh5c19kZXN0IDogNCwKICBfX3Jlc2VydmVkXzIgOiA0OwogIHUzMiBfX3Jlc2VydmVkXzMgOiAyNCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgbG9naWNhbF9kZXN0IDogODsKICB9IGRlc3Q7CiAgdTMyIF9fcmVzZXJ2ZWRfNFszXTsKICB9IGljcjI7Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgIHN0cnVjdCB7CiAgdTMyIHZlY3RvciA6IDgsCiAgX19yZXNlcnZlZF8xIDogNCwKICBkZWxpdmVyeV9zdGF0dXMgOiAxLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3Jlc2VydmVkXzIgOiAzLAogIG1hc2sgOiAxLAogIHRpbWVyX21vZGUgOiAxLAogIF9fcmVzZXJ2ZWRfMyA6IDE0OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1MzIgX19yZXNlcnZlZF80WzNdOwogIH0gbHZ0X3RpbWVyOwotCiAgIHN0cnVjdCB7CiAgdTMyIHZlY3RvciA6IDgsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGRlbGl2ZXJ5X21vZGUgOiAzLAogIF9fcmVzZXJ2ZWRfMSA6IDEsCiAgZGVsaXZlcnlfc3RhdHVzIDogMSwKICBfX3Jlc2VydmVkXzIgOiAzLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBtYXNrIDogMSwKICBfX3Jlc2VydmVkXzMgOiAxNTsKICB1MzIgX19yZXNlcnZlZF80WzNdOwogIH0gbHZ0X3RoZXJtYWw7Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgIHN0cnVjdCB7CiAgdTMyIHZlY3RvciA6IDgsCiAgZGVsaXZlcnlfbW9kZSA6IDMsCiAgX19yZXNlcnZlZF8xIDogMSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgZGVsaXZlcnlfc3RhdHVzIDogMSwKICBfX3Jlc2VydmVkXzIgOiAzLAogIG1hc2sgOiAxLAogIF9fcmVzZXJ2ZWRfMyA6IDE1OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1MzIgX19yZXNlcnZlZF80WzNdOwogIH0gbHZ0X3BjOwotCiAgIHN0cnVjdCB7CiAgdTMyIHZlY3RvciA6IDgsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGRlbGl2ZXJ5X21vZGUgOiAzLAogIF9fcmVzZXJ2ZWRfMSA6IDEsCiAgZGVsaXZlcnlfc3RhdHVzIDogMSwKICBwb2xhcml0eSA6IDEsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHJlbW90ZV9pcnIgOiAxLAogIHRyaWdnZXIgOiAxLAogIG1hc2sgOiAxLAogIF9fcmVzZXJ2ZWRfMiA6IDE1OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1MzIgX19yZXNlcnZlZF8zWzNdOwogIH0gbHZ0X2xpbnQwOwotCiAgIHN0cnVjdCB7CiAgdTMyIHZlY3RvciA6IDgsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGRlbGl2ZXJ5X21vZGUgOiAzLAogIF9fcmVzZXJ2ZWRfMSA6IDEsCiAgZGVsaXZlcnlfc3RhdHVzIDogMSwKICBwb2xhcml0eSA6IDEsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHJlbW90ZV9pcnIgOiAxLAogIHRyaWdnZXIgOiAxLAogIG1hc2sgOiAxLAogIF9fcmVzZXJ2ZWRfMiA6IDE1OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1MzIgX19yZXNlcnZlZF8zWzNdOwogIH0gbHZ0X2xpbnQxOwotCiAgIHN0cnVjdCB7CiAgdTMyIHZlY3RvciA6IDgsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fcmVzZXJ2ZWRfMSA6IDQsCiAgZGVsaXZlcnlfc3RhdHVzIDogMSwKICBfX3Jlc2VydmVkXzIgOiAzLAogIG1hc2sgOiAxLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3Jlc2VydmVkXzMgOiAxNTsKICB1MzIgX19yZXNlcnZlZF80WzNdOwogIH0gbHZ0X2Vycm9yOwotCiAgIHN0cnVjdCB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHUzMiBpbml0aWFsX2NvdW50OwogIHUzMiBfX3Jlc2VydmVkXzJbM107CiAgfSB0aW1lcl9pY3I7Ci0KICAgY29uc3QKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IHsKICB1MzIgY3Vycl9jb3VudDsKICB1MzIgX19yZXNlcnZlZF8yWzNdOwogIH0gdGltZXJfY2NyOwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogICBzdHJ1Y3QgeyB1MzIgX19yZXNlcnZlZFs0XTsgfSBfX3Jlc2VydmVkXzE2OwotCiAgIHN0cnVjdCB7IHUzMiBfX3Jlc2VydmVkWzRdOyB9IF9fcmVzZXJ2ZWRfMTc7Ci0KICAgc3RydWN0IHsgdTMyIF9fcmVzZXJ2ZWRbNF07IH0gX19yZXNlcnZlZF8xODsKLQogICBzdHJ1Y3QgeyB1MzIgX19yZXNlcnZlZFs0XTsgfSBfX3Jlc2VydmVkXzE5OwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogICBzdHJ1Y3QgewogIHUzMiBkaXZpc29yIDogNCwKICBfX3Jlc2VydmVkXzEgOiAyODsKICB1MzIgX19yZXNlcnZlZF8yWzNdOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB9IHRpbWVyX2RjcjsKLQogICBzdHJ1Y3QgeyB1MzIgX19yZXNlcnZlZFs0XTsgfSBfX3Jlc2VydmVkXzIwOwotCiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQogI3VuZGVmIHUzMgotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vYXRvbWljLmggYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vYXRvbWljLmgKaW5kZXggMDAyODljZi4uOWM2NTM0NyAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2F0b21pYy5oCisrKyBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9hdG9taWMuaApAQCAtNyw2ICs3LDEzIEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotI2luY2x1ZGUgImF0b21pY182NC5oIgorI2luY2x1ZGUgImF0b21pY18zMi5oIgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2F0b21pY18zMi5oIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2F0b21pY18zMi5oCmluZGV4IDY3N2FhYzguLjM1NWI2MjAgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9hdG9taWNfMzIuaAorKysgYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vYXRvbWljXzMyLmgKQEAgLTcsMzMgKzcsMzkgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9fQVJDSF9JMzg2X0FUT01JQ19fCiAjZGVmaW5lIF9fQVJDSF9JMzg2X0FUT01JQ19fCi0KICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjaW5jbHVkZSA8YXNtL2NtcHhjaGcuaD4KLQogdHlwZWRlZiBzdHJ1Y3QgeyBpbnQgY291bnRlcjsgfSBhdG9taWNfdDsKLQogI2RlZmluZSBBVE9NSUNfSU5JVChpKSB7IChpKSB9Ci0KICNkZWZpbmUgYXRvbWljX3JlYWQodikgKCh2KS0+Y291bnRlcikKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgYXRvbWljX3NldCh2LGkpICgoKHYpLT5jb3VudGVyKSA9IChpKSkKLQogI2RlZmluZSBhdG9taWNfY21weGNoZyh2LCBvbGQsIG5ldykgKGNtcHhjaGcoJigodiktPmNvdW50ZXIpLCAob2xkKSwgKG5ldykpKQogI2RlZmluZSBhdG9taWNfeGNoZyh2LCBuZXcpICh4Y2hnKCYoKHYpLT5jb3VudGVyKSwgKG5ldykpKQogI2RlZmluZSBhdG9taWNfaW5jX25vdF96ZXJvKHYpIGF0b21pY19hZGRfdW5sZXNzKCh2KSwgMSwgMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIGF0b21pY19pbmNfcmV0dXJuKHYpIChhdG9taWNfYWRkX3JldHVybigxLHYpKQogI2RlZmluZSBhdG9taWNfZGVjX3JldHVybih2KSAoYXRvbWljX3N1Yl9yZXR1cm4oMSx2KSkKICNkZWZpbmUgYXRvbWljX2NsZWFyX21hc2sobWFzaywgYWRkcikgIF9fYXNtX18gX192b2xhdGlsZV9fKExPQ0tfUFJFRklYICJhbmRsICUwLCUxIiAgOiA6ICJyIiAofihtYXNrKSksIm0iICgqYWRkcikgOiAibWVtb3J5IikKICNkZWZpbmUgYXRvbWljX3NldF9tYXNrKG1hc2ssIGFkZHIpICBfX2FzbV9fIF9fdm9sYXRpbGVfXyhMT0NLX1BSRUZJWCAib3JsICUwLCUxIiAgOiA6ICJyIiAobWFzayksIm0iICgqKGFkZHIpKSA6ICJtZW1vcnkiKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgc21wX21iX19iZWZvcmVfYXRvbWljX2RlYygpIGJhcnJpZXIoKQogI2RlZmluZSBzbXBfbWJfX2FmdGVyX2F0b21pY19kZWMoKSBiYXJyaWVyKCkKICNkZWZpbmUgc21wX21iX19iZWZvcmVfYXRvbWljX2luYygpIGJhcnJpZXIoKQogI2RlZmluZSBzbXBfbWJfX2FmdGVyX2F0b21pY19pbmMoKSBiYXJyaWVyKCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYXRvbWljLmg+CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9hdXh2ZWMuaCBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9hdXh2ZWMuaAppbmRleCBmMDY1ZWIxLi42YTU5NzhlIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vYXV4dmVjLmgKKysrIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2F1eHZlYy5oCkBAIC03LDE0ICs3LDE5IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfQVNNX1g4Nl9BVVhWRUNfSAogI2RlZmluZSBfQVNNX1g4Nl9BVVhWRUNfSAotCi0jaWZkZWYgX19pMzg2X18KICNkZWZpbmUgQVRfU1lTSU5GTyAzMgotI2VuZGlmCiAjZGVmaW5lIEFUX1NZU0lORk9fRUhEUiAzMwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBBVF9WRUNUT1JfU0laRV9BUkNIIDIKICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2JpdG9wcy5oIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2JpdG9wcy5oCmluZGV4IDNiNTg1NjUuLjQ5MWI2MTEgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9iaXRvcHMuaAorKysgYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vYml0b3BzLmgKQEAgLTcsNiArNywxMyBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSNpbmNsdWRlICJiaXRvcHNfNjQuaCIKKyNpbmNsdWRlICJiaXRvcHNfMzIuaCIKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9iaXRvcHNfMzIuaCBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9iaXRvcHNfMzIuaAppbmRleCBmYTc3ZmUyLi5iMTdiNWY5IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vYml0b3BzXzMyLmgKKysrIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2JpdG9wc18zMi5oCkBAIC03LDI0ICs3LDI5IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfSTM4Nl9CSVRPUFNfSAogI2RlZmluZSBfSTM4Nl9CSVRPUFNfSAotCiAjaWZuZGVmIF9MSU5VWF9CSVRPUFNfSAogI2Vycm9yIG9ubHkgPGxpbnV4L2JpdG9wcy5oPiBjYW4gYmUgaW5jbHVkZWQgZGlyZWN0bHkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZW5kaWYKLQogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CiAjaW5jbHVkZSA8YXNtL2FsdGVybmF0aXZlLmg+Ci0KICNkZWZpbmUgQUREUiAoKih2b2xhdGlsZSBsb25nICopIGFkZHIpCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIHNtcF9tYl9fYmVmb3JlX2NsZWFyX2JpdCgpIGJhcnJpZXIoKQogI2RlZmluZSBzbXBfbWJfX2FmdGVyX2NsZWFyX2JpdCgpIGJhcnJpZXIoKQogI2RlZmluZSB0ZXN0X2JpdChucixhZGRyKSAgKF9fYnVpbHRpbl9jb25zdGFudF9wKG5yKSA/ICAgY29uc3RhbnRfdGVzdF9iaXQoKG5yKSwoYWRkcikpIDogICB2YXJpYWJsZV90ZXN0X2JpdCgobnIpLChhZGRyKSkpCiAjdW5kZWYgQUREUgotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2luY2x1ZGUgPGFzbS1nZW5lcmljL2JpdG9wcy9mbHM2NC5oPgogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vYnVnLmggYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vYnVnLmgKaW5kZXggOTI0NzAyMi4uNGIzZWRmNCAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2J1Zy5oCisrKyBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9idWcuaApAQCAtNywxMCArNywxNyBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX0FTTV9YODZfQlVHX0gKICNkZWZpbmUgX0FTTV9YODZfQlVHX0gKLQogI2luY2x1ZGUgPGFzbS1nZW5lcmljL2J1Zy5oPgogI2VuZGlmCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2J5dGVvcmRlci5oIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2J5dGVvcmRlci5oCmluZGV4IGE4Mzk3OTguLjc0ZGM5ZDYgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9ieXRlb3JkZXIuaAorKysgYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vYnl0ZW9yZGVyLmgKQEAgLTcsNjQgKzcsNTIgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9BU01fWDg2X0JZVEVPUkRFUl9ICiAjZGVmaW5lIF9BU01fWDg2X0JZVEVPUkRFUl9ICi0KICNpbmNsdWRlIDxhc20vdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2lmZGVmIF9fR05VQ19fCi0KLSNpZmRlZiBfX2kzODZfXwotCiBzdGF0aWMgX19pbmxpbmVfXyBfX2F0dHJpYnV0ZV9jb25zdF9fIF9fdTMyIF9fX2FyY2hfX3N3YWIzMihfX3UzMiB4KQogewogIF9fYXNtX18oInhjaGdiICViMCwlaDBcblx0IgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICAicm9ybCAkMTYsJTBcblx0IgogICJ4Y2hnYiAlYjAsJWgwIgogIDoiPXEiICh4KQogIDogIjAiICh4KSk7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHJldHVybiB4OwogfQotCiBzdGF0aWMgX19pbmxpbmVfXyBfX2F0dHJpYnV0ZV9jb25zdF9fIF9fdTY0IF9fX2FyY2hfX3N3YWI2NChfX3U2NCB2YWwpCiB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuaW9uIHsKICBzdHJ1Y3QgeyBfX3UzMiBhLGI7IH0gczsKICBfX3U2NCB1OwogIH0gdjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdi51ID0gdmFsOwogIHYucy5hID0gX19fYXJjaF9fc3dhYjMyKHYucy5hKTsKICB2LnMuYiA9IF9fX2FyY2hfX3N3YWIzMih2LnMuYik7CiAgX19hc21fXygieGNoZ2wgJTAsJTEiIDogIj1yIiAodi5zLmEpLCAiPXIiICh2LnMuYikgOiAiMCIgKHYucy5hKSwgIjEiICh2LnMuYikpOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICByZXR1cm4gdi51OwogfQotCi0jZWxzZQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX2F0dHJpYnV0ZV9jb25zdF9fIF9fdTY0IF9fX2FyY2hfX3N3YWI2NChfX3U2NCB4KQotewotIF9fYXNtX18oImJzd2FwcSAlMCIgOiAiPXIiICh4KSA6ICIwIiAoeCkpOwotIHJldHVybiB4OwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBfX2F0dHJpYnV0ZV9jb25zdF9fIF9fdTMyIF9fX2FyY2hfX3N3YWIzMihfX3UzMiB4KQotewotIF9fYXNtX18oImJzd2FwbCAlMCIgOiAiPXIiICh4KSA6ICIwIiAoeCkpOwotIHJldHVybiB4OwotfQotCi0jZW5kaWYKLQogI2RlZmluZSBfX2FyY2hfX3N3YWI2NCh4KSBfX19hcmNoX19zd2FiNjQoeCkKICNkZWZpbmUgX19hcmNoX19zd2FiMzIoeCkgX19fYXJjaF9fc3dhYjMyKHgpCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fQllURU9SREVSX0hBU19VNjRfXwotCiAjZW5kaWYKLQogI2luY2x1ZGUgPGxpbnV4L2J5dGVvcmRlci9saXR0bGVfZW5kaWFuLmg+Ci0KICNlbmRpZgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9jYWNoZS5oIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2NhY2hlLmgKaW5kZXggMjc2NmE3MS4uOWM2MDdlOSAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2NhY2hlLmgKKysrIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2NhY2hlLmgKQEAgLTcsMTQgKzcsMTkgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9BUkNIX1g4Nl9DQUNIRV9ICiAjZGVmaW5lIF9BUkNIX1g4Nl9DQUNIRV9ICi0KICNkZWZpbmUgTDFfQ0FDSEVfU0hJRlQgKENPTkZJR19YODZfTDFfQ0FDSEVfU0hJRlQpCiAjZGVmaW5lIEwxX0NBQ0hFX0JZVEVTICgxIDw8IEwxX0NBQ0hFX1NISUZUKQotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX3JlYWRfbW9zdGx5IF9fYXR0cmlidXRlX18oKF9fc2VjdGlvbl9fKCIuZGF0YS5yZWFkX21vc3RseSIpKSkKLQogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vY2FjaGVmbHVzaC5oIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2NhY2hlZmx1c2guaAppbmRleCAwMjgyNzdiLi45MmE2NDU4IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vY2FjaGVmbHVzaC5oCisrKyBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9jYWNoZWZsdXNoLmgKQEAgLTcsMjggKzcsMzUgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9BU01fWDg2X0NBQ0hFRkxVU0hfSAogI2RlZmluZSBfQVNNX1g4Nl9DQUNIRUZMVVNIX0gKLQogI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0KICNkZWZpbmUgZmx1c2hfY2FjaGVfYWxsKCkgZG8geyB9IHdoaWxlICgwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgZmx1c2hfY2FjaGVfbW0obW0pIGRvIHsgfSB3aGlsZSAoMCkKICNkZWZpbmUgZmx1c2hfY2FjaGVfZHVwX21tKG1tKSBkbyB7IH0gd2hpbGUgKDApCiAjZGVmaW5lIGZsdXNoX2NhY2hlX3JhbmdlKHZtYSwgc3RhcnQsIGVuZCkgZG8geyB9IHdoaWxlICgwKQogI2RlZmluZSBmbHVzaF9jYWNoZV9wYWdlKHZtYSwgdm1hZGRyLCBwZm4pIGRvIHsgfSB3aGlsZSAoMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIGZsdXNoX2RjYWNoZV9wYWdlKHBhZ2UpIGRvIHsgfSB3aGlsZSAoMCkKICNkZWZpbmUgZmx1c2hfZGNhY2hlX21tYXBfbG9jayhtYXBwaW5nKSBkbyB7IH0gd2hpbGUgKDApCiAjZGVmaW5lIGZsdXNoX2RjYWNoZV9tbWFwX3VubG9jayhtYXBwaW5nKSBkbyB7IH0gd2hpbGUgKDApCiAjZGVmaW5lIGZsdXNoX2ljYWNoZV9yYW5nZShzdGFydCwgZW5kKSBkbyB7IH0gd2hpbGUgKDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBmbHVzaF9pY2FjaGVfcGFnZSh2bWEscGcpIGRvIHsgfSB3aGlsZSAoMCkKICNkZWZpbmUgZmx1c2hfaWNhY2hlX3VzZXJfcmFuZ2Uodm1hLHBnLGFkcixsZW4pIGRvIHsgfSB3aGlsZSAoMCkKICNkZWZpbmUgZmx1c2hfY2FjaGVfdm1hcChzdGFydCwgZW5kKSBkbyB7IH0gd2hpbGUgKDApCiAjZGVmaW5lIGZsdXNoX2NhY2hlX3Z1bm1hcChzdGFydCwgZW5kKSBkbyB7IH0gd2hpbGUgKDApCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIGNvcHlfdG9fdXNlcl9wYWdlKHZtYSwgcGFnZSwgdmFkZHIsIGRzdCwgc3JjLCBsZW4pICAgbWVtY3B5KGRzdCwgc3JjLCBsZW4pCiAjZGVmaW5lIGNvcHlfZnJvbV91c2VyX3BhZ2Uodm1hLCBwYWdlLCB2YWRkciwgZHN0LCBzcmMsIGxlbikgICBtZW1jcHkoZHN0LCBzcmMsIGxlbikKLQogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vY21weGNoZy5oIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2NtcHhjaGcuaAppbmRleCBkZTA1OWEyLi45NDQ3ODUwIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vY21weGNoZy5oCisrKyBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9jbXB4Y2hnLmgKQEAgLTcsNiArNywxMyBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSNpbmNsdWRlICJjbXB4Y2hnXzY0LmgiCisjaW5jbHVkZSAiY21weGNoZ18zMi5oIgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2NtcHhjaGdfMzIuaCBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9jbXB4Y2hnXzMyLmgKaW5kZXggMzYzMmY0Yy4uNTg4YTBmMSAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2NtcHhjaGdfMzIuaAorKysgYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vY21weGNoZ18zMi5oCkBAIC03LDI1ICs3LDMwIEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfX0FTTV9DTVBYQ0hHX0gKICNkZWZpbmUgX19BU01fQ01QWENIR19ICi0KLSNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4gIAotCisjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CiAjZGVmaW5lIHhjaGcocHRyLHYpICgoX190eXBlb2ZfXygqKHB0cikpKV9feGNoZygodW5zaWduZWQgbG9uZykodiksKHB0ciksc2l6ZW9mKCoocHRyKSkpKQotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IF9feGNoZ19kdW1teSB7IHVuc2lnbmVkIGxvbmcgYVsxMDBdOyB9OwogI2RlZmluZSBfX3hnKHgpICgoc3RydWN0IF9feGNoZ19kdW1teSAqKSh4KSkKLQogI2RlZmluZSBsbF9sb3coeCkgKigoKHVuc2lnbmVkIGludCopJih4KSkrMCkKICNkZWZpbmUgbGxfaGlnaCh4KSAqKCgodW5zaWduZWQgaW50KikmKHgpKSsxKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgc2V0XzY0Yml0KHB0cix2YWx1ZSkgIChfX2J1aWx0aW5fY29uc3RhbnRfcCh2YWx1ZSkgPyAgIF9fc2V0XzY0Yml0X2NvbnN0YW50KHB0ciwgdmFsdWUpIDogICBfX3NldF82NGJpdF92YXIocHRyLCB2YWx1ZSkgKQogI2RlZmluZSBfc2V0XzY0Yml0KHB0cix2YWx1ZSkgIChfX2J1aWx0aW5fY29uc3RhbnRfcCh2YWx1ZSkgPyAgIF9fc2V0XzY0Yml0KHB0ciwgKHVuc2lnbmVkIGludCkodmFsdWUpLCAodW5zaWduZWQgaW50KSgodmFsdWUpPj4zMlVMTCkgKSA6ICAgX19zZXRfNjRiaXQocHRyLCBsbF9sb3codmFsdWUpLCBsbF9oaWdoKHZhbHVlKSkgKQotCiAjZGVmaW5lIGNtcHhjaGcocHRyLG8sbikgICh7ICAgX190eXBlb2ZfXygqKHB0cikpIF9fcmV0OyAgIGlmIChsaWtlbHkoYm9vdF9jcHVfZGF0YS54ODYgPiAzKSkgICBfX3JldCA9IF9fY21weGNoZygocHRyKSwgKHVuc2lnbmVkIGxvbmcpKG8pLCAgICh1bnNpZ25lZCBsb25nKShuKSwgc2l6ZW9mKCoocHRyKSkpOyAgIGVsc2UgICBfX3JldCA9IGNtcHhjaGdfMzg2KChwdHIpLCAodW5zaWduZWQgbG9uZykobyksICAgKHVuc2lnbmVkIGxvbmcpKG4pLCBzaXplb2YoKihwdHIpKSk7ICAgX19yZXQ7ICB9KQogI2RlZmluZSBjbXB4Y2hnX2xvY2FsKHB0cixvLG4pICAoeyAgIF9fdHlwZW9mX18oKihwdHIpKSBfX3JldDsgICBpZiAobGlrZWx5KGJvb3RfY3B1X2RhdGEueDg2ID4gMykpICAgX19yZXQgPSBfX2NtcHhjaGdfbG9jYWwoKHB0ciksICh1bnNpZ25lZCBsb25nKShvKSwgICAodW5zaWduZWQgbG9uZykobiksIHNpemVvZigqKHB0cikpKTsgICBlbHNlICAgX19yZXQgPSBjbXB4Y2hnXzM4NigocHRyKSwgKHVuc2lnbmVkIGxvbmcpKG8pLCAgICh1bnNpZ25lZCBsb25nKShuKSwgc2l6ZW9mKCoocHRyKSkpOyAgIF9fcmV0OyAgfSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIGNtcHhjaGc2NChwdHIsbyxuKSAgKChfX3R5cGVvZl9fKCoocHRyKSkpX19jbXB4Y2hnNjQoKHB0ciksKHVuc2lnbmVkIGxvbmcgbG9uZykobyksICAodW5zaWduZWQgbG9uZyBsb25nKShuKSkpCiAjZGVmaW5lIGNtcHhjaGc2NF9sb2NhbChwdHIsbyxuKSAgKChfX3R5cGVvZl9fKCoocHRyKSkpX19jbXB4Y2hnNjRfbG9jYWwoKHB0ciksKHVuc2lnbmVkIGxvbmcgbG9uZykobyksICAodW5zaWduZWQgbG9uZyBsb25nKShuKSkpCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9jcHVmZWF0dXJlLmggYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vY3B1ZmVhdHVyZS5oCmluZGV4IDQ3YWY0NTcuLjdmY2ZhY2YgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9jcHVmZWF0dXJlLmgKKysrIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2NwdWZlYXR1cmUuaApAQCAtNyw2ICs3LDEzIEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotI2luY2x1ZGUgImNwdWZlYXR1cmVfNjQuaCIKKyNpbmNsdWRlICJjcHVmZWF0dXJlXzMyLmgiCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vY3B1ZmVhdHVyZV8zMi5oIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2NwdWZlYXR1cmVfMzIuaAppbmRleCBhOGViYzQwLi43ODY4MzZiIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vY3B1ZmVhdHVyZV8zMi5oCisrKyBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9jcHVmZWF0dXJlXzMyLmgKQEAgLTcsMTQ1ICs3LDE2NSBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX19BU01fSTM4Nl9DUFVGRUFUVVJFX0gKICNkZWZpbmUgX19BU01fSTM4Nl9DUFVGRUFUVVJFX0gKLQogI2lmbmRlZiBfX0FTU0VNQkxZX18KICNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZW5kaWYKICNpbmNsdWRlIDxhc20vcmVxdWlyZWQtZmVhdHVyZXMuaD4KLQotI2RlZmluZSBOQ0FQSU5UUyA4ICAKLQotI2RlZmluZSBYODZfRkVBVFVSRV9GUFUgKDAqMzIrIDApICAKLSNkZWZpbmUgWDg2X0ZFQVRVUkVfVk1FICgwKjMyKyAxKSAgCi0jZGVmaW5lIFg4Nl9GRUFUVVJFX0RFICgwKjMyKyAyKSAgCi0jZGVmaW5lIFg4Nl9GRUFUVVJFX1BTRSAoMCozMisgMykgIAotI2RlZmluZSBYODZfRkVBVFVSRV9UU0MgKDAqMzIrIDQpICAKLSNkZWZpbmUgWDg2X0ZFQVRVUkVfTVNSICgwKjMyKyA1KSAgCi0jZGVmaW5lIFg4Nl9GRUFUVVJFX1BBRSAoMCozMisgNikgIAotI2RlZmluZSBYODZfRkVBVFVSRV9NQ0UgKDAqMzIrIDcpICAKLSNkZWZpbmUgWDg2X0ZFQVRVUkVfQ1g4ICgwKjMyKyA4KSAgCi0jZGVmaW5lIFg4Nl9GRUFUVVJFX0FQSUMgKDAqMzIrIDkpICAKLSNkZWZpbmUgWDg2X0ZFQVRVUkVfU0VQICgwKjMyKzExKSAgCi0jZGVmaW5lIFg4Nl9GRUFUVVJFX01UUlIgKDAqMzIrMTIpICAKLSNkZWZpbmUgWDg2X0ZFQVRVUkVfUEdFICgwKjMyKzEzKSAgCi0jZGVmaW5lIFg4Nl9GRUFUVVJFX01DQSAoMCozMisxNCkgIAotI2RlZmluZSBYODZfRkVBVFVSRV9DTU9WICgwKjMyKzE1KSAgCi0jZGVmaW5lIFg4Nl9GRUFUVVJFX1BBVCAoMCozMisxNikgIAotI2RlZmluZSBYODZfRkVBVFVSRV9QU0UzNiAoMCozMisxNykgIAotI2RlZmluZSBYODZfRkVBVFVSRV9QTiAoMCozMisxOCkgIAotI2RlZmluZSBYODZfRkVBVFVSRV9DTEZMU0ggKDAqMzIrMTkpICAKLSNkZWZpbmUgWDg2X0ZFQVRVUkVfRFMgKDAqMzIrMjEpICAKLSNkZWZpbmUgWDg2X0ZFQVRVUkVfQUNQSSAoMCozMisyMikgIAotI2RlZmluZSBYODZfRkVBVFVSRV9NTVggKDAqMzIrMjMpICAKLSNkZWZpbmUgWDg2X0ZFQVRVUkVfRlhTUiAoMCozMisyNCkgIAotCi0jZGVmaW5lIFg4Nl9GRUFUVVJFX1hNTSAoMCozMisyNSkgIAotI2RlZmluZSBYODZfRkVBVFVSRV9YTU0yICgwKjMyKzI2KSAgCi0jZGVmaW5lIFg4Nl9GRUFUVVJFX1NFTEZTTk9PUCAoMCozMisyNykgIAotI2RlZmluZSBYODZfRkVBVFVSRV9IVCAoMCozMisyOCkgIAotI2RlZmluZSBYODZfRkVBVFVSRV9BQ0MgKDAqMzIrMjkpICAKLSNkZWZpbmUgWDg2X0ZFQVRVUkVfSUE2NCAoMCozMiszMCkgIAotCi0jZGVmaW5lIFg4Nl9GRUFUVVJFX1NZU0NBTEwgKDEqMzIrMTEpICAKLSNkZWZpbmUgWDg2X0ZFQVRVUkVfTVAgKDEqMzIrMTkpICAKLSNkZWZpbmUgWDg2X0ZFQVRVUkVfTlggKDEqMzIrMjApICAKLSNkZWZpbmUgWDg2X0ZFQVRVUkVfTU1YRVhUICgxKjMyKzIyKSAgCi0jZGVmaW5lIFg4Nl9GRUFUVVJFX1JEVFNDUCAoMSozMisyNykgIAotI2RlZmluZSBYODZfRkVBVFVSRV9MTSAoMSozMisyOSkgIAotI2RlZmluZSBYODZfRkVBVFVSRV8zRE5PV0VYVCAoMSozMiszMCkgIAotI2RlZmluZSBYODZfRkVBVFVSRV8zRE5PVyAoMSozMiszMSkgIAotCi0jZGVmaW5lIFg4Nl9GRUFUVVJFX1JFQ09WRVJZICgyKjMyKyAwKSAgCi0jZGVmaW5lIFg4Nl9GRUFUVVJFX0xPTkdSVU4gKDIqMzIrIDEpICAKLSNkZWZpbmUgWDg2X0ZFQVRVUkVfTFJUSSAoMiozMisgMykgIAotCi0jZGVmaW5lIFg4Nl9GRUFUVVJFX0NYTU1YICgzKjMyKyAwKSAgCi0jZGVmaW5lIFg4Nl9GRUFUVVJFX0s2X01UUlIgKDMqMzIrIDEpICAKLSNkZWZpbmUgWDg2X0ZFQVRVUkVfQ1lSSVhfQVJSICgzKjMyKyAyKSAgCi0jZGVmaW5lIFg4Nl9GRUFUVVJFX0NFTlRBVVJfTUNSICgzKjMyKyAzKSAgCi0KLSNkZWZpbmUgWDg2X0ZFQVRVUkVfSzggKDMqMzIrIDQpICAKLSNkZWZpbmUgWDg2X0ZFQVRVUkVfSzcgKDMqMzIrIDUpICAKLSNkZWZpbmUgWDg2X0ZFQVRVUkVfUDMgKDMqMzIrIDYpICAKLSNkZWZpbmUgWDg2X0ZFQVRVUkVfUDQgKDMqMzIrIDcpICAKLSNkZWZpbmUgWDg2X0ZFQVRVUkVfQ09OU1RBTlRfVFNDICgzKjMyKyA4KSAgCi0jZGVmaW5lIFg4Nl9GRUFUVVJFX1VQICgzKjMyKyA5KSAgCi0jZGVmaW5lIFg4Nl9GRUFUVVJFX0ZYU0FWRV9MRUFLICgzKjMyKzEwKSAgCi0jZGVmaW5lIFg4Nl9GRUFUVVJFX0FSQ0hfUEVSRk1PTiAoMyozMisxMSkgIAotI2RlZmluZSBYODZfRkVBVFVSRV9QRUJTICgzKjMyKzEyKSAgCi0jZGVmaW5lIFg4Nl9GRUFUVVJFX0JUUyAoMyozMisxMykgIAotCi0jZGVmaW5lIFg4Nl9GRUFUVVJFX1NZTkNfUkRUU0MgKDMqMzIrMTUpICAKLSNkZWZpbmUgWDg2X0ZFQVRVUkVfUkVQX0dPT0QgKDMqMzIrMTYpICAKLQotI2RlZmluZSBYODZfRkVBVFVSRV9YTU0zICg0KjMyKyAwKSAgCi0jZGVmaW5lIFg4Nl9GRUFUVVJFX01XQUlUICg0KjMyKyAzKSAgCi0jZGVmaW5lIFg4Nl9GRUFUVVJFX0RTQ1BMICg0KjMyKyA0KSAgCi0jZGVmaW5lIFg4Nl9GRUFUVVJFX0VTVCAoNCozMisgNykgIAotI2RlZmluZSBYODZfRkVBVFVSRV9UTTIgKDQqMzIrIDgpICAKLSNkZWZpbmUgWDg2X0ZFQVRVUkVfQ0lEICg0KjMyKzEwKSAgCi0jZGVmaW5lIFg4Nl9GRUFUVVJFX0NYMTYgKDQqMzIrMTMpICAKLSNkZWZpbmUgWDg2X0ZFQVRVUkVfWFRQUiAoNCozMisxNCkgIAotI2RlZmluZSBYODZfRkVBVFVSRV9EQ0EgKDQqMzIrMTgpICAKLQotI2RlZmluZSBYODZfRkVBVFVSRV9YU1RPUkUgKDUqMzIrIDIpICAKLSNkZWZpbmUgWDg2X0ZFQVRVUkVfWFNUT1JFX0VOICg1KjMyKyAzKSAgCi0jZGVmaW5lIFg4Nl9GRUFUVVJFX1hDUllQVCAoNSozMisgNikgIAotI2RlZmluZSBYODZfRkVBVFVSRV9YQ1JZUFRfRU4gKDUqMzIrIDcpICAKLSNkZWZpbmUgWDg2X0ZFQVRVUkVfQUNFMiAoNSozMisgOCkgIAotI2RlZmluZSBYODZfRkVBVFVSRV9BQ0UyX0VOICg1KjMyKyA5KSAgCi0jZGVmaW5lIFg4Nl9GRUFUVVJFX1BIRSAoNSozMisgMTApICAKLSNkZWZpbmUgWDg2X0ZFQVRVUkVfUEhFX0VOICg1KjMyKyAxMSkgIAotI2RlZmluZSBYODZfRkVBVFVSRV9QTU0gKDUqMzIrIDEyKSAgCi0jZGVmaW5lIFg4Nl9GRUFUVVJFX1BNTV9FTiAoNSozMisgMTMpICAKLQotI2RlZmluZSBYODZfRkVBVFVSRV9MQUhGX0xNICg2KjMyKyAwKSAgCi0jZGVmaW5lIFg4Nl9GRUFUVVJFX0NNUF9MRUdBQ1kgKDYqMzIrIDEpICAKLQotI2RlZmluZSBYODZfRkVBVFVSRV9JREEgKDcqMzIrIDApICAKLQorI2RlZmluZSBOQ0FQSU5UUyA4CisjZGVmaW5lIFg4Nl9GRUFUVVJFX0ZQVSAoMCozMisgMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFg4Nl9GRUFUVVJFX1ZNRSAoMCozMisgMSkKKyNkZWZpbmUgWDg2X0ZFQVRVUkVfREUgKDAqMzIrIDIpCisjZGVmaW5lIFg4Nl9GRUFUVVJFX1BTRSAoMCozMisgMykKKyNkZWZpbmUgWDg2X0ZFQVRVUkVfVFNDICgwKjMyKyA0KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgWDg2X0ZFQVRVUkVfTVNSICgwKjMyKyA1KQorI2RlZmluZSBYODZfRkVBVFVSRV9QQUUgKDAqMzIrIDYpCisjZGVmaW5lIFg4Nl9GRUFUVVJFX01DRSAoMCozMisgNykKKyNkZWZpbmUgWDg2X0ZFQVRVUkVfQ1g4ICgwKjMyKyA4KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgWDg2X0ZFQVRVUkVfQVBJQyAoMCozMisgOSkKKyNkZWZpbmUgWDg2X0ZFQVRVUkVfU0VQICgwKjMyKzExKQorI2RlZmluZSBYODZfRkVBVFVSRV9NVFJSICgwKjMyKzEyKQorI2RlZmluZSBYODZfRkVBVFVSRV9QR0UgKDAqMzIrMTMpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBYODZfRkVBVFVSRV9NQ0EgKDAqMzIrMTQpCisjZGVmaW5lIFg4Nl9GRUFUVVJFX0NNT1YgKDAqMzIrMTUpCisjZGVmaW5lIFg4Nl9GRUFUVVJFX1BBVCAoMCozMisxNikKKyNkZWZpbmUgWDg2X0ZFQVRVUkVfUFNFMzYgKDAqMzIrMTcpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBYODZfRkVBVFVSRV9QTiAoMCozMisxOCkKKyNkZWZpbmUgWDg2X0ZFQVRVUkVfQ0xGTFNIICgwKjMyKzE5KQorI2RlZmluZSBYODZfRkVBVFVSRV9EUyAoMCozMisyMSkKKyNkZWZpbmUgWDg2X0ZFQVRVUkVfQUNQSSAoMCozMisyMikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFg4Nl9GRUFUVVJFX01NWCAoMCozMisyMykKKyNkZWZpbmUgWDg2X0ZFQVRVUkVfRlhTUiAoMCozMisyNCkKKyNkZWZpbmUgWDg2X0ZFQVRVUkVfWE1NICgwKjMyKzI1KQorI2RlZmluZSBYODZfRkVBVFVSRV9YTU0yICgwKjMyKzI2KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgWDg2X0ZFQVRVUkVfU0VMRlNOT09QICgwKjMyKzI3KQorI2RlZmluZSBYODZfRkVBVFVSRV9IVCAoMCozMisyOCkKKyNkZWZpbmUgWDg2X0ZFQVRVUkVfQUNDICgwKjMyKzI5KQorI2RlZmluZSBYODZfRkVBVFVSRV9JQTY0ICgwKjMyKzMwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgWDg2X0ZFQVRVUkVfU1lTQ0FMTCAoMSozMisxMSkKKyNkZWZpbmUgWDg2X0ZFQVRVUkVfTVAgKDEqMzIrMTkpCisjZGVmaW5lIFg4Nl9GRUFUVVJFX05YICgxKjMyKzIwKQorI2RlZmluZSBYODZfRkVBVFVSRV9NTVhFWFQgKDEqMzIrMjIpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBYODZfRkVBVFVSRV9SRFRTQ1AgKDEqMzIrMjcpCisjZGVmaW5lIFg4Nl9GRUFUVVJFX0xNICgxKjMyKzI5KQorI2RlZmluZSBYODZfRkVBVFVSRV8zRE5PV0VYVCAoMSozMiszMCkKKyNkZWZpbmUgWDg2X0ZFQVRVUkVfM0ROT1cgKDEqMzIrMzEpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBYODZfRkVBVFVSRV9SRUNPVkVSWSAoMiozMisgMCkKKyNkZWZpbmUgWDg2X0ZFQVRVUkVfTE9OR1JVTiAoMiozMisgMSkKKyNkZWZpbmUgWDg2X0ZFQVRVUkVfTFJUSSAoMiozMisgMykKKyNkZWZpbmUgWDg2X0ZFQVRVUkVfQ1hNTVggKDMqMzIrIDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBYODZfRkVBVFVSRV9LNl9NVFJSICgzKjMyKyAxKQorI2RlZmluZSBYODZfRkVBVFVSRV9DWVJJWF9BUlIgKDMqMzIrIDIpCisjZGVmaW5lIFg4Nl9GRUFUVVJFX0NFTlRBVVJfTUNSICgzKjMyKyAzKQorI2RlZmluZSBYODZfRkVBVFVSRV9LOCAoMyozMisgNCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFg4Nl9GRUFUVVJFX0s3ICgzKjMyKyA1KQorI2RlZmluZSBYODZfRkVBVFVSRV9QMyAoMyozMisgNikKKyNkZWZpbmUgWDg2X0ZFQVRVUkVfUDQgKDMqMzIrIDcpCisjZGVmaW5lIFg4Nl9GRUFUVVJFX0NPTlNUQU5UX1RTQyAoMyozMisgOCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFg4Nl9GRUFUVVJFX1VQICgzKjMyKyA5KQorI2RlZmluZSBYODZfRkVBVFVSRV9GWFNBVkVfTEVBSyAoMyozMisxMCkKKyNkZWZpbmUgWDg2X0ZFQVRVUkVfQVJDSF9QRVJGTU9OICgzKjMyKzExKQorI2RlZmluZSBYODZfRkVBVFVSRV9QRUJTICgzKjMyKzEyKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgWDg2X0ZFQVRVUkVfQlRTICgzKjMyKzEzKQorI2RlZmluZSBYODZfRkVBVFVSRV9TWU5DX1JEVFNDICgzKjMyKzE1KQorI2RlZmluZSBYODZfRkVBVFVSRV9SRVBfR09PRCAoMyozMisxNikKKyNkZWZpbmUgWDg2X0ZFQVRVUkVfWE1NMyAoNCozMisgMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFg4Nl9GRUFUVVJFX01XQUlUICg0KjMyKyAzKQorI2RlZmluZSBYODZfRkVBVFVSRV9EU0NQTCAoNCozMisgNCkKKyNkZWZpbmUgWDg2X0ZFQVRVUkVfRVNUICg0KjMyKyA3KQorI2RlZmluZSBYODZfRkVBVFVSRV9UTTIgKDQqMzIrIDgpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBYODZfRkVBVFVSRV9DSUQgKDQqMzIrMTApCisjZGVmaW5lIFg4Nl9GRUFUVVJFX0NYMTYgKDQqMzIrMTMpCisjZGVmaW5lIFg4Nl9GRUFUVVJFX1hUUFIgKDQqMzIrMTQpCisjZGVmaW5lIFg4Nl9GRUFUVVJFX0RDQSAoNCozMisxOCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFg4Nl9GRUFUVVJFX1hTVE9SRSAoNSozMisgMikKKyNkZWZpbmUgWDg2X0ZFQVRVUkVfWFNUT1JFX0VOICg1KjMyKyAzKQorI2RlZmluZSBYODZfRkVBVFVSRV9YQ1JZUFQgKDUqMzIrIDYpCisjZGVmaW5lIFg4Nl9GRUFUVVJFX1hDUllQVF9FTiAoNSozMisgNykKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFg4Nl9GRUFUVVJFX0FDRTIgKDUqMzIrIDgpCisjZGVmaW5lIFg4Nl9GRUFUVVJFX0FDRTJfRU4gKDUqMzIrIDkpCisjZGVmaW5lIFg4Nl9GRUFUVVJFX1BIRSAoNSozMisgMTApCisjZGVmaW5lIFg4Nl9GRUFUVVJFX1BIRV9FTiAoNSozMisgMTEpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBYODZfRkVBVFVSRV9QTU0gKDUqMzIrIDEyKQorI2RlZmluZSBYODZfRkVBVFVSRV9QTU1fRU4gKDUqMzIrIDEzKQorI2RlZmluZSBYODZfRkVBVFVSRV9MQUhGX0xNICg2KjMyKyAwKQorI2RlZmluZSBYODZfRkVBVFVSRV9DTVBfTEVHQUNZICg2KjMyKyAxKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgWDg2X0ZFQVRVUkVfSURBICg3KjMyKyAwKQogI2RlZmluZSBjcHVfaGFzKGMsIGJpdCkgICAoX19idWlsdGluX2NvbnN0YW50X3AoYml0KSAmJiAgICggKCgoYml0KT4+NSk9PTAgJiYgKDFVTDw8KChiaXQpJjMxKSAmIFJFUVVJUkVEX01BU0swKSkgfHwgICAoKChiaXQpPj41KT09MSAmJiAoMVVMPDwoKGJpdCkmMzEpICYgUkVRVUlSRURfTUFTSzEpKSB8fCAgICgoKGJpdCk+PjUpPT0yICYmICgxVUw8PCgoYml0KSYzMSkgJiBSRVFVSVJFRF9NQVNLMikpIHx8ICAgKCgoYml0KT4+NSk9PTMgJiYgKDFVTDw8KChiaXQpJjMxKSAmIFJFUVVJUkVEX01BU0szKSkgfHwgICAoKChiaXQpPj41KT09NCAmJiAoMVVMPDwoKGJpdCkmMzEpICYgUkVRVUlSRURfTUFTSzQpKSB8fCAgICgoKGJpdCk+PjUpPT01ICYmICgxVUw8PCgoYml0KSYzMSkgJiBSRVFVSVJFRF9NQVNLNSkpIHx8ICAgKCgoYml0KT4+NSk9PTYgJiYgKDFVTDw8KChiaXQpJjMxKSAmIFJFUVVJUkVEX01BU0s2KSkgfHwgICAoKChiaXQpPj41KT09NyAmJiAoMVVMPDwoKGJpdCkmMzEpICYgUkVRVUlSRURfTUFTSzcpKSApICAgPyAxIDogICB0ZXN0X2JpdChiaXQsIChjKS0+eDg2X2NhcGFiaWxpdHkpKQogI2RlZmluZSBib290X2NwdV9oYXMoYml0KSBjcHVfaGFzKCZib290X2NwdV9kYXRhLCBiaXQpCi0KICNkZWZpbmUgY3B1X2hhc19mcHUgYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX0ZQVSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIGNwdV9oYXNfdm1lIGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9WTUUpCiAjZGVmaW5lIGNwdV9oYXNfZGUgYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX0RFKQogI2RlZmluZSBjcHVfaGFzX3BzZSBib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfUFNFKQogI2RlZmluZSBjcHVfaGFzX3RzYyBib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfVFNDKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgY3B1X2hhc19wYWUgYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX1BBRSkKICNkZWZpbmUgY3B1X2hhc19wZ2UgYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX1BHRSkKICNkZWZpbmUgY3B1X2hhc19hcGljIGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9BUElDKQogI2RlZmluZSBjcHVfaGFzX3NlcCBib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfU0VQKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgY3B1X2hhc19tdHJyIGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9NVFJSKQogI2RlZmluZSBjcHVfaGFzX21teCBib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfTU1YKQogI2RlZmluZSBjcHVfaGFzX2Z4c3IgYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX0ZYU1IpCiAjZGVmaW5lIGNwdV9oYXNfeG1tIGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9YTU0pCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBjcHVfaGFzX3htbTIgYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX1hNTTIpCiAjZGVmaW5lIGNwdV9oYXNfeG1tMyBib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfWE1NMykKICNkZWZpbmUgY3B1X2hhc19odCBib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfSFQpCiAjZGVmaW5lIGNwdV9oYXNfbXAgYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX01QKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgY3B1X2hhc19ueCBib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfTlgpCiAjZGVmaW5lIGNwdV9oYXNfazZfbXRyciBib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfSzZfTVRSUikKICNkZWZpbmUgY3B1X2hhc19jeXJpeF9hcnIgYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX0NZUklYX0FSUikKICNkZWZpbmUgY3B1X2hhc19jZW50YXVyX21jciBib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfQ0VOVEFVUl9NQ1IpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBjcHVfaGFzX3hzdG9yZSBib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfWFNUT1JFKQogI2RlZmluZSBjcHVfaGFzX3hzdG9yZV9lbmFibGVkIGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9YU1RPUkVfRU4pCiAjZGVmaW5lIGNwdV9oYXNfeGNyeXB0IGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9YQ1JZUFQpCiAjZGVmaW5lIGNwdV9oYXNfeGNyeXB0X2VuYWJsZWQgYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX1hDUllQVF9FTikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIGNwdV9oYXNfYWNlMiBib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfQUNFMikKICNkZWZpbmUgY3B1X2hhc19hY2UyX2VuYWJsZWQgYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX0FDRTJfRU4pCiAjZGVmaW5lIGNwdV9oYXNfcGhlIGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9QSEUpCiAjZGVmaW5lIGNwdV9oYXNfcGhlX2VuYWJsZWQgYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX1BIRV9FTikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIGNwdV9oYXNfcG1tIGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9QTU0pCiAjZGVmaW5lIGNwdV9oYXNfcG1tX2VuYWJsZWQgYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX1BNTV9FTikKICNkZWZpbmUgY3B1X2hhc19kcyBib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfRFMpCiAjZGVmaW5lIGNwdV9oYXNfcGVicyBib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfUEVCUykKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIGNwdV9oYXNfY2xmbHVzaCBib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfQ0xGTFNIKQogI2RlZmluZSBjcHVfaGFzX2J0cyBib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfQlRTKQotCiAjZW5kaWYKLQpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2NwdXRpbWUuaCBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9jcHV0aW1lLmgKaW5kZXggMGU3OWUwYi4uNTAzNWE2MyAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2NwdXRpbWUuaAorKysgYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vY3B1dGltZS5oCkBAIC03LDYgKzcsMTMgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvY3B1dGltZS5oPgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2N1cnJlbnQuaCBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9jdXJyZW50LmgKaW5kZXggYjUzYzZmZS4uZGE4NTE2OSAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2N1cnJlbnQuaAorKysgYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vY3VycmVudC5oCkBAIC03LDYgKzcsMTMgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0jaW5jbHVkZSAiY3VycmVudF82NC5oIgorI2luY2x1ZGUgImN1cnJlbnRfMzIuaCIKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9jdXJyZW50XzMyLmggYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vY3VycmVudF8zMi5oCmluZGV4IGY3NGIzNzEuLjA4ODJmNzkgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9jdXJyZW50XzMyLmgKKysrIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2N1cnJlbnRfMzIuaApAQCAtNywxNSArNywyMCBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX0kzODZfQ1VSUkVOVF9ICiAjZGVmaW5lIF9JMzg2X0NVUlJFTlRfSAotCiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KICNpbmNsdWRlIDxhc20vcGVyY3B1Lmg+Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgdGFza19zdHJ1Y3Q7Ci0KICNkZWZpbmUgY3VycmVudCBnZXRfY3VycmVudCgpCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9kZWxheS5oIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2RlbGF5LmgKaW5kZXggN2NiNWY3NC4uNDU1NDU1YSAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2RlbGF5LmgKKysrIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2RlbGF5LmgKQEAgLTcsMTMgKzcsMTggQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9BU01fWDg2X0RFTEFZX0gKICNkZWZpbmUgX0FTTV9YODZfREVMQVlfSAotCiAjZGVmaW5lIHVkZWxheShuKSAoX19idWlsdGluX2NvbnN0YW50X3AobikgPyAgICgobikgPiAyMDAwMCA/IF9fYmFkX3VkZWxheSgpIDogX19jb25zdF91ZGVsYXkoKG4pICogMHgxMGM3dWwpKSA6ICAgX191ZGVsYXkobikpCi0KICNkZWZpbmUgbmRlbGF5KG4pIChfX2J1aWx0aW5fY29uc3RhbnRfcChuKSA/ICAgKChuKSA+IDIwMDAwID8gX19iYWRfbmRlbGF5KCkgOiBfX2NvbnN0X3VkZWxheSgobikgKiA1dWwpKSA6ICAgX19uZGVsYXkobikpCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9kZXNjLmggYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vZGVzYy5oCmluZGV4IGU5ZDQ0OGIuLmI2MDc4N2UgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9kZXNjLmgKKysrIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2Rlc2MuaApAQCAtNyw2ICs3LDEzIEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotI2luY2x1ZGUgImRlc2NfNjQuaCIKKyNpbmNsdWRlICJkZXNjXzMyLmgiCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vZGVzY18zMi5oIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2Rlc2NfMzIuaAppbmRleCBmNTMxOTFjLi4zOGNjZTNkIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vZGVzY18zMi5oCisrKyBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9kZXNjXzMyLmgKQEAgLTcsNTkgKzcsNzAgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9fQVJDSF9ERVNDX0gKICNkZWZpbmUgX19BUkNIX0RFU0NfSAotCiAjaW5jbHVkZSA8YXNtL2xkdC5oPgogI2luY2x1ZGUgPGFzbS9zZWdtZW50Lmg+Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwotCiAjaW5jbHVkZSA8bGludXgvcHJlZW1wdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgogI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS5oPgotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2luY2x1ZGUgPGFzbS9tbXUuaD4KLQogc3RydWN0IFhndF9kZXNjX3N0cnVjdCB7CiAgdW5zaWduZWQgc2hvcnQgc2l6ZTsKICB1bnNpZ25lZCBsb25nIGFkZHJlc3MgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIHNob3J0IHBhZDsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCiBzdHJ1Y3QgZ2R0X3BhZ2UKIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IGRlc2Nfc3RydWN0IGdkdFtHRFRfRU5UUklFU107CiB9IF9fYXR0cmlidXRlX18oKGFsaWduZWQoUEFHRV9TSVpFKSkpOwotCi0jZGVmaW5lIERFU0NUWVBFX0xEVCAweDgyICAKLSNkZWZpbmUgREVTQ1RZUEVfVFNTIDB4ODkgIAotI2RlZmluZSBERVNDVFlQRV9UQVNLIDB4ODUgIAotI2RlZmluZSBERVNDVFlQRV9JTlQgMHg4ZSAgCi0jZGVmaW5lIERFU0NUWVBFX1RSQVAgMHg4ZiAgCi0jZGVmaW5lIERFU0NUWVBFX0RQTDMgMHg2MCAgCi0jZGVmaW5lIERFU0NUWVBFX1MgMHgxMCAgCisjZGVmaW5lIERFU0NUWVBFX0xEVCAweDgyCisjZGVmaW5lIERFU0NUWVBFX1RTUyAweDg5CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBERVNDVFlQRV9UQVNLIDB4ODUKKyNkZWZpbmUgREVTQ1RZUEVfSU5UIDB4OGUKKyNkZWZpbmUgREVTQ1RZUEVfVFJBUCAweDhmCisjZGVmaW5lIERFU0NUWVBFX0RQTDMgMHg2MAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgREVTQ1RZUEVfUyAweDEwCiAjZGVmaW5lIGxvYWRfVFJfZGVzYygpIG5hdGl2ZV9sb2FkX3RyX2Rlc2MoKQogI2RlZmluZSBsb2FkX2dkdChkdHIpIG5hdGl2ZV9sb2FkX2dkdChkdHIpCiAjZGVmaW5lIGxvYWRfaWR0KGR0cikgbmF0aXZlX2xvYWRfaWR0KGR0cikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIGxvYWRfdHIodHIpIF9fYXNtX18gX192b2xhdGlsZSgibHRyICUwIjo6Im0iICh0cikpCiAjZGVmaW5lIGxvYWRfbGR0KGxkdCkgX19hc21fXyBfX3ZvbGF0aWxlKCJsbGR0ICUwIjo6Im0iIChsZHQpKQogI2RlZmluZSBzdG9yZV9nZHQoZHRyKSBuYXRpdmVfc3RvcmVfZ2R0KGR0cikKICNkZWZpbmUgc3RvcmVfaWR0KGR0cikgbmF0aXZlX3N0b3JlX2lkdChkdHIpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBzdG9yZV90cih0cikgKHRyID0gbmF0aXZlX3N0b3JlX3RyKCkpCiAjZGVmaW5lIHN0b3JlX2xkdChsZHQpIF9fYXNtX18gKCJzbGR0ICUwIjoiPW0iIChsZHQpKQogI2RlZmluZSBsb2FkX1RMUyh0LCBjcHUpIG5hdGl2ZV9sb2FkX3Rscyh0LCBjcHUpCiAjZGVmaW5lIHNldF9sZHQgbmF0aXZlX3NldF9sZHQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIHdyaXRlX2xkdF9lbnRyeShkdCwgZW50cnksIGEsIGIpIHdyaXRlX2R0X2VudHJ5KGR0LCBlbnRyeSwgYSwgYikKICNkZWZpbmUgd3JpdGVfZ2R0X2VudHJ5KGR0LCBlbnRyeSwgYSwgYikgd3JpdGVfZHRfZW50cnkoZHQsIGVudHJ5LCBhLCBiKQogI2RlZmluZSB3cml0ZV9pZHRfZW50cnkoZHQsIGVudHJ5LCBhLCBiKSB3cml0ZV9kdF9lbnRyeShkdCwgZW50cnksIGEsIGIpCiAjZGVmaW5lIHNldF90c3NfZGVzYyhjcHUsYWRkcikgX19zZXRfdHNzX2Rlc2MoY3B1LCBHRFRfRU5UUllfVFNTLCBhZGRyKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTERUX2VudHJ5X2EoaW5mbykgICAoKCgoaW5mbyktPmJhc2VfYWRkciAmIDB4MDAwMGZmZmYpIDw8IDE2KSB8ICgoaW5mbyktPmxpbWl0ICYgMHgwZmZmZikpCiAjZGVmaW5lIExEVF9lbnRyeV9iKGluZm8pICAgKCgoaW5mbyktPmJhc2VfYWRkciAmIDB4ZmYwMDAwMDApIHwgICAoKChpbmZvKS0+YmFzZV9hZGRyICYgMHgwMGZmMDAwMCkgPj4gMTYpIHwgICAoKGluZm8pLT5saW1pdCAmIDB4ZjAwMDApIHwgICAoKChpbmZvKS0+cmVhZF9leGVjX29ubHkgXiAxKSA8PCA5KSB8ICAgKChpbmZvKS0+Y29udGVudHMgPDwgMTApIHwgICAoKChpbmZvKS0+c2VnX25vdF9wcmVzZW50IF4gMSkgPDwgMTUpIHwgICAoKGluZm8pLT5zZWdfMzJiaXQgPDwgMjIpIHwgICAoKGluZm8pLT5saW1pdF9pbl9wYWdlcyA8PCAyMykgfCAgICgoaW5mbyktPnVzZWFibGUgPDwgMjApIHwgICAweDcwMDApCiAjZGVmaW5lIExEVF9lbXB0eShpbmZvKSAoICAoaW5mbyktPmJhc2VfYWRkciA9PSAwICYmICAgKGluZm8pLT5saW1pdCA9PSAwICYmICAgKGluZm8pLT5jb250ZW50cyA9PSAwICYmICAgKGluZm8pLT5yZWFkX2V4ZWNfb25seSA9PSAxICYmICAgKGluZm8pLT5zZWdfMzJiaXQgPT0gMCAmJiAgIChpbmZvKS0+bGltaXRfaW5fcGFnZXMgPT0gMCAmJiAgIChpbmZvKS0+c2VnX25vdF9wcmVzZW50ID09IDEgJiYgICAoaW5mbyktPnVzZWFibGUgPT0gMCApCiAjZWxzZQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgR0VUX0RFU0NfQkFTRShpZHgsIGdkdCwgYmFzZSwgbG9fdywgbG9fYiwgaGlfYikgICBtb3ZiIGlkeCo4KzQoZ2R0KSwgbG9fYjsgICBtb3ZiIGlkeCo4KzcoZ2R0KSwgaGlfYjsgICBzaGxsICQxNiwgYmFzZTsgICBtb3Z3IGlkeCo4KzIoZ2R0KSwgbG9fdzsKICNlbmRpZgogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vZGVzY19kZWZzLmggYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vZGVzY19kZWZzLmgKaW5kZXggYmY2ZGU0YS4uMzJiNDZlMSAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2Rlc2NfZGVmcy5oCisrKyBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9kZXNjX2RlZnMuaApAQCAtNyw2NCArNyw3MCBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX19BUkNIX0RFU0NfREVGU19ICiAjZGVmaW5lIF9fQVJDSF9ERVNDX0RFRlNfSAotCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwotCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBkZXNjX3N0cnVjdCB7CiAgdTE2IGxpbWl0MDsKICB1MTYgYmFzZTA7CiAgdW5zaWduZWQgYmFzZTEgOiA4LCB0eXBlIDogNCwgcyA6IDEsIGRwbCA6IDIsIHAgOiAxOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBsaW1pdCA6IDQsIGF2bCA6IDEsIGwgOiAxLCBkIDogMSwgZyA6IDEsIGJhc2UyIDogODsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Ci0KIHN0cnVjdCBuX2Rlc2Nfc3RydWN0IHsKICB1bnNpZ25lZCBpbnQgYSxiOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07Ci0KIGVudW0gewogIEdBVEVfSU5URVJSVVBUID0gMHhFLAogIEdBVEVfVFJBUCA9IDB4RiwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgR0FURV9DQUxMID0gMHhDLAogfTsKLQogc3RydWN0IGdhdGVfc3RydWN0IHsKICB1MTYgb2Zmc2V0X2xvdzsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdTE2IHNlZ21lbnQ7CiAgdW5zaWduZWQgaXN0IDogMywgemVybzAgOiA1LCB0eXBlIDogNSwgZHBsIDogMiwgcCA6IDE7CiAgdTE2IG9mZnNldF9taWRkbGU7CiAgdTMyIG9mZnNldF9oaWdoOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1MzIgemVybzE7CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwotCiAjZGVmaW5lIFBUUl9MT1coeCkgKCh1bnNpZ25lZCBsb25nKSh4KSAmIDB4RkZGRikKICNkZWZpbmUgUFRSX01JRERMRSh4KSAoKCh1bnNpZ25lZCBsb25nKSh4KSA+PiAxNikgJiAweEZGRkYpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQVFJfSElHSCh4KSAoKHVuc2lnbmVkIGxvbmcpKHgpID4+IDMyKQotCiBlbnVtIHsKICBERVNDX1RTUyA9IDB4OSwKICBERVNDX0xEVCA9IDB4MiwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwotCiBzdHJ1Y3QgbGR0dHNzX2Rlc2MgewogIHUxNiBsaW1pdDA7CiAgdTE2IGJhc2UwOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBiYXNlMSA6IDgsIHR5cGUgOiA1LCBkcGwgOiAyLCBwIDogMTsKICB1bnNpZ25lZCBsaW1pdDEgOiA0LCB6ZXJvMCA6IDMsIGcgOiAxLCBiYXNlMiA6IDg7CiAgdTMyIGJhc2UzOwogIHUzMiB6ZXJvMTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwotCiBzdHJ1Y3QgZGVzY19wdHIgewogIHVuc2lnbmVkIHNob3J0IHNpemU7CiAgdW5zaWduZWQgbG9uZyBhZGRyZXNzOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgOwotCiAjZW5kaWYKLQogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vZGl2NjQuaCBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9kaXY2NC5oCmluZGV4IDNmZWY0M2UuLjQyMGQ5ZTMgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9kaXY2NC5oCisrKyBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9kaXY2NC5oCkBAIC03LDExICs3LDE5IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfQVNNX1g4Nl9ESVY2NF9ICiAjZGVmaW5lIF9BU01fWDg2X0RJVjY0X0gKLQotI2luY2x1ZGUgPGFzbS1nZW5lcmljL2RpdjY0Lmg+Ci0KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2RlZmluZSBkb19kaXYobixiYXNlKSAoeyAgIHVuc2lnbmVkIGxvbmcgX191cHBlciwgX19sb3csIF9faGlnaCwgX19tb2QsIF9fYmFzZTsgICBfX2Jhc2UgPSAoYmFzZSk7ICAgYXNtKCIiOiI9YSIgKF9fbG93KSwgIj1kIiAoX19oaWdoKToiQSIgKG4pKTsgICBfX3VwcGVyID0gX19oaWdoOyAgIGlmIChfX2hpZ2gpIHsgICBfX3VwcGVyID0gX19oaWdoICUgKF9fYmFzZSk7ICAgX19oaWdoID0gX19oaWdoIC8gKF9fYmFzZSk7ICAgfSAgIGFzbSgiZGl2bCAlMiI6Ij1hIiAoX19sb3cpLCAiPWQiIChfX21vZCk6InJtIiAoX19iYXNlKSwgIjAiIChfX2xvdyksICIxIiAoX191cHBlcikpOyAgIGFzbSgiIjoiPUEiIChuKToiYSIgKF9fbG93KSwiZCIgKF9faGlnaCkpOyAgIF9fbW9kOyAgfSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIGRpdl9sb25nX2xvbmdfcmVtKGEsYixjKSBkaXZfbGxfWF9sX3JlbShhLGIsYykKICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2RtYS1tYXBwaW5nLmggYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vZG1hLW1hcHBpbmcuaAppbmRleCAzZGExZGE2Li4wYTlkMjNiIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vZG1hLW1hcHBpbmcuaAorKysgYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vZG1hLW1hcHBpbmcuaApAQCAtNyw2ICs3LDEzIEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotI2luY2x1ZGUgImRtYS1tYXBwaW5nXzY0LmgiCisjaW5jbHVkZSAiZG1hLW1hcHBpbmdfMzIuaCIKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9kbWEtbWFwcGluZ18zMi5oIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2RtYS1tYXBwaW5nXzMyLmgKaW5kZXggOTc0YTYwYi4uNmI0MWFkZiAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2RtYS1tYXBwaW5nXzMyLmgKKysrIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2RtYS1tYXBwaW5nXzMyLmgKQEAgLTcsMjIgKzcsMjcgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9BU01fSTM4Nl9ETUFfTUFQUElOR19ICiAjZGVmaW5lIF9BU01fSTM4Nl9ETUFfTUFQUElOR19ICi0KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0Lmg+Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjaW5jbHVkZSA8YXNtL2NhY2hlLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL2J1Zy5oPgotCiAjZGVmaW5lIGRtYV9hbGxvY19ub25jb2hlcmVudChkLCBzLCBoLCBmKSBkbWFfYWxsb2NfY29oZXJlbnQoZCwgcywgaCwgZikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIGRtYV9mcmVlX25vbmNvaGVyZW50KGQsIHMsIHYsIGgpIGRtYV9mcmVlX2NvaGVyZW50KGQsIHMsIHYsIGgpCi0KICNkZWZpbmUgZG1hX2lzX2NvbnNpc3RlbnQoZCwgaCkgKDEpCiAjZGVmaW5lIEFSQ0hfSEFTX0RNQV9ERUNMQVJFX0NPSEVSRU5UX01FTU9SWQotCiAjZW5kaWYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vZG1hLmggYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vZG1hLmgKaW5kZXggYWU1MWUwMi4uMWU5NmQ5MCAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2RtYS5oCisrKyBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9kbWEuaApAQCAtNyw2ICs3LDEzIEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotI2luY2x1ZGUgImRtYV82NC5oIgorI2luY2x1ZGUgImRtYV8zMi5oIgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2RtYV8zMi5oIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2RtYV8zMi5oCmluZGV4IDljMjRmNWUuLmFjNmQxOTMgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9kbWFfMzIuaAorKysgYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vZG1hXzMyLmgKQEAgLTcsODQgKzcsOTIgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9BU01fRE1BX0gKICNkZWZpbmUgX0FTTV9ETUFfSAotCi0jaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4gIAotI2luY2x1ZGUgPGFzbS9pby5oPiAgCisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLQogI2lmZGVmIEhBVkVfUkVBTExZX1NMT1dfRE1BX0NPTlRST0xMRVIKICNkZWZpbmUgZG1hX291dGIgb3V0Yl9wCiAjZWxzZQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgZG1hX291dGIgb3V0YgogI2VuZGlmCi0KICNkZWZpbmUgZG1hX2luYiBpbmIKLQogI2RlZmluZSBNQVhfRE1BX0NIQU5ORUxTIDgKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTUFYX0RNQV9BRERSRVNTIChQQUdFX09GRlNFVCsweDEwMDAwMDApCi0KLSNkZWZpbmUgSU9fRE1BMV9CQVNFIDB4MDAgIAotI2RlZmluZSBJT19ETUEyX0JBU0UgMHhDMCAgCi0KLSNkZWZpbmUgRE1BMV9DTURfUkVHIDB4MDggIAotI2RlZmluZSBETUExX1NUQVRfUkVHIDB4MDggIAotI2RlZmluZSBETUExX1JFUV9SRUcgMHgwOSAgCi0jZGVmaW5lIERNQTFfTUFTS19SRUcgMHgwQSAgCi0jZGVmaW5lIERNQTFfTU9ERV9SRUcgMHgwQiAgCi0jZGVmaW5lIERNQTFfQ0xFQVJfRkZfUkVHIDB4MEMgIAotI2RlZmluZSBETUExX1RFTVBfUkVHIDB4MEQgIAotI2RlZmluZSBETUExX1JFU0VUX1JFRyAweDBEICAKLSNkZWZpbmUgRE1BMV9DTFJfTUFTS19SRUcgMHgwRSAgCi0jZGVmaW5lIERNQTFfTUFTS19BTExfUkVHIDB4MEYgIAotCi0jZGVmaW5lIERNQTJfQ01EX1JFRyAweEQwICAKLSNkZWZpbmUgRE1BMl9TVEFUX1JFRyAweEQwICAKLSNkZWZpbmUgRE1BMl9SRVFfUkVHIDB4RDIgIAotI2RlZmluZSBETUEyX01BU0tfUkVHIDB4RDQgIAotI2RlZmluZSBETUEyX01PREVfUkVHIDB4RDYgIAotI2RlZmluZSBETUEyX0NMRUFSX0ZGX1JFRyAweEQ4ICAKLSNkZWZpbmUgRE1BMl9URU1QX1JFRyAweERBICAKLSNkZWZpbmUgRE1BMl9SRVNFVF9SRUcgMHhEQSAgCi0jZGVmaW5lIERNQTJfQ0xSX01BU0tfUkVHIDB4REMgIAotI2RlZmluZSBETUEyX01BU0tfQUxMX1JFRyAweERFICAKLQotI2RlZmluZSBETUFfQUREUl8wIDB4MDAgIAorI2RlZmluZSBJT19ETUExX0JBU0UgMHgwMAorI2RlZmluZSBJT19ETUEyX0JBU0UgMHhDMAorI2RlZmluZSBETUExX0NNRF9SRUcgMHgwOAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgRE1BMV9TVEFUX1JFRyAweDA4CisjZGVmaW5lIERNQTFfUkVRX1JFRyAweDA5CisjZGVmaW5lIERNQTFfTUFTS19SRUcgMHgwQQorI2RlZmluZSBETUExX01PREVfUkVHIDB4MEIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIERNQTFfQ0xFQVJfRkZfUkVHIDB4MEMKKyNkZWZpbmUgRE1BMV9URU1QX1JFRyAweDBECisjZGVmaW5lIERNQTFfUkVTRVRfUkVHIDB4MEQKKyNkZWZpbmUgRE1BMV9DTFJfTUFTS19SRUcgMHgwRQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgRE1BMV9NQVNLX0FMTF9SRUcgMHgwRgorI2RlZmluZSBETUEyX0NNRF9SRUcgMHhEMAorI2RlZmluZSBETUEyX1NUQVRfUkVHIDB4RDAKKyNkZWZpbmUgRE1BMl9SRVFfUkVHIDB4RDIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIERNQTJfTUFTS19SRUcgMHhENAorI2RlZmluZSBETUEyX01PREVfUkVHIDB4RDYKKyNkZWZpbmUgRE1BMl9DTEVBUl9GRl9SRUcgMHhEOAorI2RlZmluZSBETUEyX1RFTVBfUkVHIDB4REEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIERNQTJfUkVTRVRfUkVHIDB4REEKKyNkZWZpbmUgRE1BMl9DTFJfTUFTS19SRUcgMHhEQworI2RlZmluZSBETUEyX01BU0tfQUxMX1JFRyAweERFCisjZGVmaW5lIERNQV9BRERSXzAgMHgwMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRE1BX0FERFJfMSAweDAyCiAjZGVmaW5lIERNQV9BRERSXzIgMHgwNAogI2RlZmluZSBETUFfQUREUl8zIDB4MDYKICNkZWZpbmUgRE1BX0FERFJfNCAweEMwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBETUFfQUREUl81IDB4QzQKICNkZWZpbmUgRE1BX0FERFJfNiAweEM4CiAjZGVmaW5lIERNQV9BRERSXzcgMHhDQwotCi0jZGVmaW5lIERNQV9DTlRfMCAweDAxICAKKyNkZWZpbmUgRE1BX0NOVF8wIDB4MDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIERNQV9DTlRfMSAweDAzCiAjZGVmaW5lIERNQV9DTlRfMiAweDA1CiAjZGVmaW5lIERNQV9DTlRfMyAweDA3CiAjZGVmaW5lIERNQV9DTlRfNCAweEMyCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBETUFfQ05UXzUgMHhDNgogI2RlZmluZSBETUFfQ05UXzYgMHhDQQogI2RlZmluZSBETUFfQ05UXzcgMHhDRQotCi0jZGVmaW5lIERNQV9QQUdFXzAgMHg4NyAgCisjZGVmaW5lIERNQV9QQUdFXzAgMHg4NworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRE1BX1BBR0VfMSAweDgzCiAjZGVmaW5lIERNQV9QQUdFXzIgMHg4MQogI2RlZmluZSBETUFfUEFHRV8zIDB4ODIKICNkZWZpbmUgRE1BX1BBR0VfNSAweDhCCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBETUFfUEFHRV82IDB4ODkKICNkZWZpbmUgRE1BX1BBR0VfNyAweDhBCi0KLSNkZWZpbmUgRE1BX01PREVfUkVBRCAweDQ0ICAKLSNkZWZpbmUgRE1BX01PREVfV1JJVEUgMHg0OCAgCi0jZGVmaW5lIERNQV9NT0RFX0NBU0NBREUgMHhDMCAgCi0KKyNkZWZpbmUgRE1BX01PREVfUkVBRCAweDQ0CisjZGVmaW5lIERNQV9NT0RFX1dSSVRFIDB4NDgKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIERNQV9NT0RFX0NBU0NBREUgMHhDMAogI2RlZmluZSBETUFfQVVUT0lOSVQgMHgxMAotCiAjZGVmaW5lIGlzYV9kbWFfYnJpZGdlX2J1Z2d5ICgwKQotCiAjZW5kaWYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vZHdhcmYyLmggYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vZHdhcmYyLmgKaW5kZXggYzkzNzU5MS4uOTE2YmNiOCAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2R3YXJmMi5oCisrKyBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9kd2FyZjIuaApAQCAtNyw2ICs3LDEzIEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotI2luY2x1ZGUgImR3YXJmMl82NC5oIgorI2luY2x1ZGUgImR3YXJmMl8zMi5oIgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2R3YXJmMl8zMi5oIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2R3YXJmMl8zMi5oCmluZGV4IGEyZGMzZjEuLjBlYzE2NTAgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9kd2FyZjJfMzIuaAorKysgYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vZHdhcmYyXzMyLmgKQEAgLTcsMjcgKzcsMzcgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9EV0FSRjJfSAogI2RlZmluZSBfRFdBUkYyX0gKLQogI2lmbmRlZiBfX0FTU0VNQkxZX18KICN3YXJuaW5nICJhc20vZHdhcmYyLmggc2hvdWxkIGJlIG9ubHkgaW5jbHVkZWQgaW4gcHVyZSBhc3NlbWJseSBmaWxlcyIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZW5kaWYKLQogI2RlZmluZSBDRklfU1RBUlRQUk9DIGlnbm9yZQogI2RlZmluZSBDRklfRU5EUFJPQyBpZ25vcmUKICNkZWZpbmUgQ0ZJX0RFRl9DRkEgaWdub3JlCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBDRklfREVGX0NGQV9SRUdJU1RFUiBpZ25vcmUKICNkZWZpbmUgQ0ZJX0RFRl9DRkFfT0ZGU0VUIGlnbm9yZQogI2RlZmluZSBDRklfQURKVVNUX0NGQV9PRkZTRVQgaWdub3JlCiAjZGVmaW5lIENGSV9PRkZTRVQgaWdub3JlCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBDRklfUkVMX09GRlNFVCBpZ25vcmUKICNkZWZpbmUgQ0ZJX1JFR0lTVEVSIGlnbm9yZQogI2RlZmluZSBDRklfUkVTVE9SRSBpZ25vcmUKICNkZWZpbmUgQ0ZJX1JFTUVNQkVSX1NUQVRFIGlnbm9yZQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQ0ZJX1JFU1RPUkVfU1RBVEUgaWdub3JlCiAjZGVmaW5lIENGSV9VTkRFRklORUQgaWdub3JlCiAjZGVmaW5lIENGSV9TSUdOQUxfRlJBTUUgaWdub3JlCiAjZW5kaWYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vZTgyMC5oIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2U4MjAuaAppbmRleCA4YTg4ZmYwLi43NmZmYmJkIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vZTgyMC5oCisrKyBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9lODIwLmgKQEAgLTcsMzAgKzcsMzggQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9fQVNNX0U4MjBfSAogI2RlZmluZSBfX0FTTV9FODIwX0gKLSNkZWZpbmUgRTgyME1BUCAweDJkMCAgCi0jZGVmaW5lIEU4MjBNQVggMTI4ICAKLSNkZWZpbmUgRTgyME5SIDB4MWU4ICAKLQorI2RlZmluZSBFODIwTUFQIDB4MmQwCisjZGVmaW5lIEU4MjBNQVggMTI4CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBFODIwTlIgMHgxZTgKICNkZWZpbmUgRTgyMF9SQU0gMQogI2RlZmluZSBFODIwX1JFU0VSVkVEIDIKICNkZWZpbmUgRTgyMF9BQ1BJIDMKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEU4MjBfTlZTIDQKLQogI2lmbmRlZiBfX0FTU0VNQkxZX18KIHN0cnVjdCBlODIwZW50cnkgewogIF9fdTY0IGFkZHI7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTY0IHNpemU7CiAgX191MzIgdHlwZTsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Ci0KIHN0cnVjdCBlODIwbWFwIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgbnJfbWFwOwogIHN0cnVjdCBlODIwZW50cnkgbWFwW0U4MjBNQVhdOwogfTsKICNlbmRpZgotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vZWxmLmggYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vZWxmLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZjNmZiYmYuLjAwMDAwMDAKLS0tIGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2VsZi5oCisrKyAvZGV2L251bGwKQEAgLTEsNzQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKioqCi0gKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCi0gKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bwotICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCi0gKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKLSAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgotICoqKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotI2lmbmRlZiBfQVNNX1g4Nl9FTEZfSAotI2RlZmluZSBfQVNNX1g4Nl9FTEZfSAotCi0jaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgotI2luY2x1ZGUgPGFzbS91c2VyLmg+Ci0jaW5jbHVkZSA8YXNtL2F1eHZlYy5oPgotCi10eXBlZGVmIHVuc2lnbmVkIGxvbmcgZWxmX2dyZWdfdDsKLQotI2RlZmluZSBFTEZfTkdSRUcgKHNpemVvZiAoc3RydWN0IHVzZXJfcmVnc19zdHJ1Y3QpIC8gc2l6ZW9mKGVsZl9ncmVnX3QpKQotdHlwZWRlZiBlbGZfZ3JlZ190IGVsZl9ncmVnc2V0X3RbRUxGX05HUkVHXTsKLQotdHlwZWRlZiBzdHJ1Y3QgdXNlcl9pMzg3X3N0cnVjdCBlbGZfZnByZWdzZXRfdDsKLQotI2lmZGVmIF9faTM4Nl9fCi0KLXR5cGVkZWYgc3RydWN0IHVzZXJfZnhzcl9zdHJ1Y3QgZWxmX2ZweHJlZ3NldF90OwotCi0jZGVmaW5lIFJfMzg2X05PTkUgMAotI2RlZmluZSBSXzM4Nl8zMiAxCi0jZGVmaW5lIFJfMzg2X1BDMzIgMgotI2RlZmluZSBSXzM4Nl9HT1QzMiAzCi0jZGVmaW5lIFJfMzg2X1BMVDMyIDQKLSNkZWZpbmUgUl8zODZfQ09QWSA1Ci0jZGVmaW5lIFJfMzg2X0dMT0JfREFUIDYKLSNkZWZpbmUgUl8zODZfSk1QX1NMT1QgNwotI2RlZmluZSBSXzM4Nl9SRUxBVElWRSA4Ci0jZGVmaW5lIFJfMzg2X0dPVE9GRiA5Ci0jZGVmaW5lIFJfMzg2X0dPVFBDIDEwCi0jZGVmaW5lIFJfMzg2X05VTSAxMQotCi0jZGVmaW5lIEVMRl9DTEFTUyBFTEZDTEFTUzMyCi0jZGVmaW5lIEVMRl9EQVRBIEVMRkRBVEEyTFNCCi0jZGVmaW5lIEVMRl9BUkNIIEVNXzM4NgotCi0jZWxzZQotCi0jZGVmaW5lIFJfWDg2XzY0X05PTkUgMCAgCi0jZGVmaW5lIFJfWDg2XzY0XzY0IDEgIAotI2RlZmluZSBSX1g4Nl82NF9QQzMyIDIgIAotI2RlZmluZSBSX1g4Nl82NF9HT1QzMiAzICAKLSNkZWZpbmUgUl9YODZfNjRfUExUMzIgNCAgCi0jZGVmaW5lIFJfWDg2XzY0X0NPUFkgNSAgCi0jZGVmaW5lIFJfWDg2XzY0X0dMT0JfREFUIDYgIAotI2RlZmluZSBSX1g4Nl82NF9KVU1QX1NMT1QgNyAgCi0jZGVmaW5lIFJfWDg2XzY0X1JFTEFUSVZFIDggIAotI2RlZmluZSBSX1g4Nl82NF9HT1RQQ1JFTCA5ICAKLSNkZWZpbmUgUl9YODZfNjRfMzIgMTAgIAotI2RlZmluZSBSX1g4Nl82NF8zMlMgMTEgIAotI2RlZmluZSBSX1g4Nl82NF8xNiAxMiAgCi0jZGVmaW5lIFJfWDg2XzY0X1BDMTYgMTMgIAotI2RlZmluZSBSX1g4Nl82NF84IDE0ICAKLSNkZWZpbmUgUl9YODZfNjRfUEM4IDE1ICAKLQotI2RlZmluZSBSX1g4Nl82NF9OVU0gMTYKLQotI2RlZmluZSBFTEZfQ0xBU1MgRUxGQ0xBU1M2NAotI2RlZmluZSBFTEZfREFUQSBFTEZEQVRBMkxTQgotI2RlZmluZSBFTEZfQVJDSCBFTV9YODZfNjQKLQotI2VuZGlmCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2Vycm5vLmggYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vZXJybm8uaAppbmRleCBlOGY3NDI1Li4zOTJjZDk0IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vZXJybm8uaAorKysgYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vZXJybm8uaApAQCAtNyw2ICs3LDEzIEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2luY2x1ZGUgPGFzbS1nZW5lcmljL2Vycm5vLmg+CmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vZmNudGwuaCBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9mY250bC5oCmluZGV4IDAwNjMwYWQuLjUxOGQzYTcgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9mY250bC5oCisrKyBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9mY250bC5oCkBAIC03LDYgKzcsMTMgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvZmNudGwuaD4KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9maXhtYXAuaCBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9maXhtYXAuaAppbmRleCAxOWI5Y2M4Li5mOGExZDE4IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vZml4bWFwLmgKKysrIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2ZpeG1hcC5oCkBAIC03LDYgKzcsMTMgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0jaW5jbHVkZSAiZml4bWFwXzY0LmgiCisjaW5jbHVkZSAiZml4bWFwXzMyLmgiCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vZml4bWFwXzMyLmggYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vZml4bWFwXzMyLmgKaW5kZXggOTVkZThhMC4uOTRhMjBhNiAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2ZpeG1hcF8zMi5oCisrKyBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9maXhtYXBfMzIuaApAQCAtNyw0OSArNyw1MyBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX0FTTV9GSVhNQVBfSAogI2RlZmluZSBfQVNNX0ZJWE1BUF9ICi0KICNkZWZpbmUgRklYQUREUl9VU0VSX1NUQVJUIF9fZml4X3RvX3ZpcnQoRklYX1ZEU08pCiAjZGVmaW5lIEZJWEFERFJfVVNFUl9FTkQgX19maXhfdG9fdmlydChGSVhfVkRTTyAtIDEpCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGFzbS9hY3BpLmg+CiAjaW5jbHVkZSA8YXNtL2FwaWNkZWYuaD4KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KLQogZW51bSBmaXhlZF9hZGRyZXNzZXMgewogIEZJWF9IT0xFLAogIEZJWF9WRFNPLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBGSVhfREJHUF9CQVNFLAogIEZJWF9FQVJMWUNPTl9NRU1fQkFTRSwKICBfX2VuZF9vZl9wZXJtYW5lbnRfZml4ZWRfYWRkcmVzc2VzLAotCiAjZGVmaW5lIE5SX0ZJWF9CVE1BUFMgMTYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgRklYX0JUTUFQX0VORCA9IF9fZW5kX29mX3Blcm1hbmVudF9maXhlZF9hZGRyZXNzZXMsCiAgRklYX0JUTUFQX0JFR0lOID0gRklYX0JUTUFQX0VORCArIE5SX0ZJWF9CVE1BUFMgLSAxLAogIEZJWF9XUF9URVNULAogIF9fZW5kX29mX2ZpeGVkX2FkZHJlc3NlcworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07Ci0KICNkZWZpbmUgc2V0X2ZpeG1hcChpZHgsIHBoeXMpICAgX19zZXRfZml4bWFwKGlkeCwgcGh5cywgUEFHRV9LRVJORUwpCi0KICNkZWZpbmUgc2V0X2ZpeG1hcF9ub2NhY2hlKGlkeCwgcGh5cykgICBfX3NldF9maXhtYXAoaWR4LCBwaHlzLCBQQUdFX0tFUk5FTF9OT0NBQ0hFKQotCiAjZGVmaW5lIGNsZWFyX2ZpeG1hcChpZHgpICAgX19zZXRfZml4bWFwKGlkeCwgMCwgX19wZ3Byb3QoMCkpCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEZJWEFERFJfVE9QICgodW5zaWduZWQgbG9uZylfX0ZJWEFERFJfVE9QKQotCiAjZGVmaW5lIF9fRklYQUREUl9TSVpFIChfX2VuZF9vZl9wZXJtYW5lbnRfZml4ZWRfYWRkcmVzc2VzIDw8IFBBR0VfU0hJRlQpCiAjZGVmaW5lIF9fRklYQUREUl9CT09UX1NJWkUgKF9fZW5kX29mX2ZpeGVkX2FkZHJlc3NlcyA8PCBQQUdFX1NISUZUKQogI2RlZmluZSBGSVhBRERSX1NUQVJUIChGSVhBRERSX1RPUCAtIF9fRklYQUREUl9TSVpFKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRklYQUREUl9CT09UX1NUQVJUIChGSVhBRERSX1RPUCAtIF9fRklYQUREUl9CT09UX1NJWkUpCi0KICNkZWZpbmUgX19maXhfdG9fdmlydCh4KSAoRklYQUREUl9UT1AgLSAoKHgpIDw8IFBBR0VfU0hJRlQpKQogI2RlZmluZSBfX3ZpcnRfdG9fZml4KHgpICgoRklYQUREUl9UT1AgLSAoKHgpJlBBR0VfTUFTSykpID4+IFBBR0VfU0hJRlQpCi0KICNlbmRpZgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2dlbmFwaWMuaCBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9nZW5hcGljLmgKaW5kZXggODRlNjg3ZS4uM2RjNWU0NSAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2dlbmFwaWMuaAorKysgYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vZ2VuYXBpYy5oCkBAIC03LDYgKzcsMTMgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0jaW5jbHVkZSAiZ2VuYXBpY182NC5oIgorI2luY2x1ZGUgImdlbmFwaWNfMzIuaCIKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9nZW5hcGljXzMyLmggYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vZ2VuYXBpY18zMi5oCmluZGV4IDA3ODAxZWEuLjg5YTY4YjMgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9nZW5hcGljXzMyLmgKKysrIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2dlbmFwaWNfMzIuaApAQCAtNyw2NyArNyw3MyBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX0FTTV9HRU5BUElDX0gKICNkZWZpbmUgX0FTTV9HRU5BUElDX0ggMQotCiAjaW5jbHVkZSA8YXNtL21wc3BlYy5oPgotCiBzdHJ1Y3QgbXBjX2NvbmZpZ190cmFuc2xhdGlvbjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgbXBjX2NvbmZpZ19idXM7CiBzdHJ1Y3QgbXBfY29uZmlnX3RhYmxlOwogc3RydWN0IG1wY19jb25maWdfcHJvY2Vzc29yOwotCiBzdHJ1Y3QgZ2VuYXBpYyB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGNoYXIgKm5hbWU7CiAgaW50ICgqcHJvYmUpKHZvaWQpOwotCiAgaW50ICgqYXBpY19pZF9yZWdpc3RlcmVkKSh2b2lkKTsKICBjcHVtYXNrX3QgKCp0YXJnZXRfY3B1cykodm9pZCk7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGludCBpbnRfZGVsaXZlcnlfbW9kZTsKICBpbnQgaW50X2Rlc3RfbW9kZTsKICBpbnQgRVNSX0RJU0FCTEU7CiAgaW50IGFwaWNfZGVzdGluYXRpb25fbG9naWNhbDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgbG9uZyAoKmNoZWNrX2FwaWNpZF91c2VkKShwaHlzaWRfbWFza190IGJpdG1hcCwgaW50IGFwaWNpZCk7CiAgdW5zaWduZWQgbG9uZyAoKmNoZWNrX2FwaWNpZF9wcmVzZW50KShpbnQgYXBpY2lkKTsKICBpbnQgbm9fYmFsYW5jZV9pcnE7CiAgaW50IG5vX2lvYXBpY19jaGVjazsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdm9pZCAoKmluaXRfYXBpY19sZHIpKHZvaWQpOwogIHBoeXNpZF9tYXNrX3QgKCppb2FwaWNfcGh5c19pZF9tYXApKHBoeXNpZF9tYXNrX3QgbWFwKTsKLQogIHZvaWQgKCpzZXR1cF9hcGljX3JvdXRpbmcpKHZvaWQpOwogIGludCAoKm11bHRpX3RpbWVyX2NoZWNrKShpbnQgYXBpYywgaW50IGlycSk7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGludCAoKmFwaWNpZF90b19ub2RlKShpbnQgbG9naWNhbF9hcGljaWQpOwogIGludCAoKmNwdV90b19sb2dpY2FsX2FwaWNpZCkoaW50IGNwdSk7CiAgaW50ICgqY3B1X3ByZXNlbnRfdG9fYXBpY2lkKShpbnQgbXBzX2NwdSk7CiAgcGh5c2lkX21hc2tfdCAoKmFwaWNpZF90b19jcHVfcHJlc2VudCkoaW50IHBoeXNfYXBpY2lkKTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgaW50ICgqbXBjX2FwaWNfaWQpKHN0cnVjdCBtcGNfY29uZmlnX3Byb2Nlc3NvciAqbSwKICBzdHJ1Y3QgbXBjX2NvbmZpZ190cmFuc2xhdGlvbiAqdCk7CiAgdm9pZCAoKnNldHVwX3BvcnRpb19yZW1hcCkodm9pZCk7CiAgaW50ICgqY2hlY2tfcGh5c19hcGljaWRfcHJlc2VudCkoaW50IGJvb3RfY3B1X3BoeXNpY2FsX2FwaWNpZCk7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHZvaWQgKCplbmFibGVfYXBpY19tb2RlKSh2b2lkKTsKICB1MzIgKCpwaHlzX3BrZ19pZCkodTMyIGNwdWlkX2FwaWMsIGludCBpbmRleF9tc2IpOwotCiAgdm9pZCAoKm1wY19vZW1fYnVzX2luZm8pKHN0cnVjdCBtcGNfY29uZmlnX2J1cyAqLCBjaGFyICosCiAgc3RydWN0IG1wY19jb25maWdfdHJhbnNsYXRpb24gKik7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHZvaWQgKCptcGNfb2VtX3BjaV9idXMpKHN0cnVjdCBtcGNfY29uZmlnX2J1cyAqLAogIHN0cnVjdCBtcGNfY29uZmlnX3RyYW5zbGF0aW9uICopOwotCiAgaW50ICgqbXBzX29lbV9jaGVjaykoc3RydWN0IG1wX2NvbmZpZ190YWJsZSAqbXBjLCBjaGFyICpvZW0sCiAgY2hhciAqcHJvZHVjdGlkKTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgaW50ICgqYWNwaV9tYWR0X29lbV9jaGVjaykoY2hhciAqb2VtX2lkLCBjaGFyICpvZW1fdGFibGVfaWQpOwotCiAgdW5zaWduZWQgKCpnZXRfYXBpY19pZCkodW5zaWduZWQgbG9uZyB4KTsKICB1bnNpZ25lZCBsb25nIGFwaWNfaWRfbWFzazsKICB1bnNpZ25lZCBpbnQgKCpjcHVfbWFza190b19hcGljaWQpKGNwdW1hc2tfdCBjcHVtYXNrKTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07Ci0KICNkZWZpbmUgQVBJQ0ZVTkMoeCkgLnggPSB4LAotCiAjZGVmaW5lIElQSUZVTkMoeCkKLQogI2RlZmluZSBBUElDX0lOSVQoYW5hbWUsIGFwcm9iZSkgeyAgIC5uYW1lID0gYW5hbWUsICAgLnByb2JlID0gYXByb2JlLCAgIC5pbnRfZGVsaXZlcnlfbW9kZSA9IElOVF9ERUxJVkVSWV9NT0RFLCAgIC5pbnRfZGVzdF9tb2RlID0gSU5UX0RFU1RfTU9ERSwgICAubm9fYmFsYW5jZV9pcnEgPSBOT19CQUxBTkNFX0lSUSwgICAuRVNSX0RJU0FCTEUgPSBlc3JfZGlzYWJsZSwgICAuYXBpY19kZXN0aW5hdGlvbl9sb2dpY2FsID0gQVBJQ19ERVNUX0xPR0lDQUwsICAgQVBJQ0ZVTkMoYXBpY19pZF9yZWdpc3RlcmVkKSAgIEFQSUNGVU5DKHRhcmdldF9jcHVzKSAgIEFQSUNGVU5DKGNoZWNrX2FwaWNpZF91c2VkKSAgIEFQSUNGVU5DKGNoZWNrX2FwaWNpZF9wcmVzZW50KSAgIEFQSUNGVU5DKGluaXRfYXBpY19sZHIpICAgQVBJQ0ZVTkMoaW9hcGljX3BoeXNfaWRfbWFwKSAgIEFQSUNGVU5DKHNldHVwX2FwaWNfcm91dGluZykgICBBUElDRlVOQyhtdWx0aV90aW1lcl9jaGVjaykgICBBUElDRlVOQyhhcGljaWRfdG9fbm9kZSkgICBBUElDRlVOQyhjcHVfdG9fbG9naWNhbF9hcGljaWQpICAgQVBJQ0ZVTkMoY3B1X3ByZXNlbnRfdG9fYXBpY2lkKSAgIEFQSUNGVU5DKGFwaWNpZF90b19jcHVfcHJlc2VudCkgICBBUElDRlVOQyhtcGNfYXBpY19pZCkgICBBUElDRlVOQyhzZXR1cF9wb3J0aW9fcmVtYXApICAgQVBJQ0ZVTkMoY2hlY2tfcGh5c19hcGljaWRfcHJlc2VudCkgICBBUElDRlVOQyhtcGNfb2VtX2J1c19pbmZvKSAgIEFQSUNGVU5DKG1wY19vZW1fcGNpX2J1cykgICBBUElDRlVOQyhtcHNfb2VtX2NoZWNrKSAgIEFQSUNGVU5DKGdldF9hcGljX2lkKSAgIC5hcGljX2lkX21hc2sgPSBBUElDX0lEX01BU0ssICAgQVBJQ0ZVTkMoY3B1X21hc2tfdG9fYXBpY2lkKSAgIEFQSUNGVU5DKGFjcGlfbWFkdF9vZW1fY2hlY2spICAgSVBJRlVOQyhzZW5kX0lQSV9tYXNrKSAgIElQSUZVTkMoc2VuZF9JUElfYWxsYnV0c2VsZikgICBJUElGVU5DKHNlbmRfSVBJX2FsbCkgICBBUElDRlVOQyhlbmFibGVfYXBpY19tb2RlKSAgIEFQSUNGVU5DKHBoeXNfcGtnX2lkKSAgIH0KLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2hhcmRpcnEuaCBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9oYXJkaXJxLmgKaW5kZXggZWUyMjRmMS4uNGUzYjhjMSAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2hhcmRpcnEuaAorKysgYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vaGFyZGlycS5oCkBAIC03LDYgKzcsMTMgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0jaW5jbHVkZSAiaGFyZGlycV82NC5oIgorI2luY2x1ZGUgImhhcmRpcnFfMzIuaCIKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9oYXJkaXJxXzMyLmggYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vaGFyZGlycV8zMi5oCmluZGV4IGI2ODJmNjYuLmMxZWU2NGYgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9oYXJkaXJxXzMyLmgKKysrIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2hhcmRpcnFfMzIuaApAQCAtNywzMCArNywzNyBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX19BU01fSEFSRElSUV9ICiAjZGVmaW5lIF9fQVNNX0hBUkRJUlFfSAotCiAjaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogdHlwZWRlZiBzdHJ1Y3QgewogIHVuc2lnbmVkIGludCBfX3NvZnRpcnFfcGVuZGluZzsKICB1bnNpZ25lZCBsb25nIGlkbGVfdGltZXN0YW1wOwogIHVuc2lnbmVkIGludCBfX25taV9jb3VudDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgaW50IGFwaWNfdGltZXJfaXJxczsKICB1bnNpZ25lZCBpbnQgaXJxMF9pcnFzOwogIHVuc2lnbmVkIGludCBpcnFfcmVzY2hlZF9jb3VudDsKICB1bnNpZ25lZCBpbnQgaXJxX2NhbGxfY291bnQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGludCBpcnFfdGxiX2NvdW50OwogIHVuc2lnbmVkIGludCBpcnFfdGhlcm1hbF9jb3VudDsKICB1bnNpZ25lZCBpbnQgaXJxX3NwdXJpb3VzX2NvdW50OwogfSBfX19fY2FjaGVsaW5lX2FsaWduZWQgaXJxX2NwdXN0YXRfdDsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19BUkNIX0lSUV9TVEFUCiAjZGVmaW5lIF9fSVJRX1NUQVQoY3B1LCBtZW1iZXIpIChwZXJfY3B1KGlycV9zdGF0LCBjcHUpLm1lbWJlcikKLQogI2luY2x1ZGUgPGxpbnV4L2lycV9jcHVzdGF0Lmg+Ci0KICNlbmRpZgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9oaWdobWVtLmggYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vaGlnaG1lbS5oCmluZGV4IGY3Mzg4NTEuLmM2Njk4MTkgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9oaWdobWVtLmgKKysrIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2hpZ2htZW0uaApAQCAtNyw5ICs3LDE1IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfQVNNX0hJR0hNRU1fSAogI2RlZmluZSBfQVNNX0hJR0hNRU1fSAotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9od19pcnEuaCBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9od19pcnEuaAppbmRleCBlZDkzN2M3Li5kNjlkOGU5IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vaHdfaXJxLmgKKysrIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2h3X2lycS5oCkBAIC03LDYgKzcsMTMgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0jaW5jbHVkZSAiaHdfaXJxXzY0LmgiCisjaW5jbHVkZSAiaHdfaXJxXzMyLmgiCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vaHdfaXJxXzMyLmggYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vaHdfaXJxXzMyLmgKaW5kZXggNmY1ODRmYy4uNDRmY2Q0NyAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2h3X2lycV8zMi5oCisrKyBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9od19pcnFfMzIuaApAQCAtNywxOCArNywyMyBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX0FTTV9IV19JUlFfSAogI2RlZmluZSBfQVNNX0hXX0lSUV9ICi0KICNpbmNsdWRlIDxsaW51eC9wcm9maWxlLmg+CiAjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8YXNtL3NlY3Rpb25zLmg+Ci0KICNkZWZpbmUgTk1JX1ZFQ1RPUiAweDAyCi0KICNkZWZpbmUgSU9fQVBJQ19JUlEoeCkgKCgoeCkgPj0gMTYpIHx8ICgoMTw8KHgpKSAmIGlvX2FwaWNfaXJxcykpCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9pMzg3LmggYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vaTM4Ny5oCmluZGV4IDI2OTI1NTcuLjkzMzMwNTEgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9pMzg3LmgKKysrIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2kzODcuaApAQCAtNyw2ICs3LDEzIEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotI2luY2x1ZGUgImkzODdfNjQuaCIKKyNpbmNsdWRlICJpMzg3XzMyLmgiCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vaTM4N18zMi5oIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2kzODdfMzIuaAppbmRleCA4NTYzZmI5Li40NTQzZGE1IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vaTM4N18zMi5oCisrKyBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9pMzg3XzMyLmgKQEAgLTcsMjcgKzcsMzIgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9fQVNNX0kzODZfSTM4N19ICiAjZGVmaW5lIF9fQVNNX0kzODZfSTM4N19ICi0KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjaW5jbHVkZSA8bGludXgva2VybmVsX3N0YXQuaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAjaW5jbHVkZSA8YXNtL3NpZ2NvbnRleHQuaD4KICNpbmNsdWRlIDxhc20vdXNlci5oPgotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSByZXN0b3JlX2ZwdSh0c2spICAgYWx0ZXJuYXRpdmVfaW5wdXQoICAgIm5vcCA7IGZyc3RvciAlMSIsICAgImZ4cnN0b3IgJTEiLCAgIFg4Nl9GRUFUVVJFX0ZYU1IsICAgIm0iICgodHNrKS0+dGhyZWFkLmkzODcuZnhzYXZlKSkKLQogI2RlZmluZSBrZXJuZWxfZnB1X2VuZCgpIGRvIHsgc3R0cygpOyBwcmVlbXB0X2VuYWJsZSgpOyB9IHdoaWxlKDApCi0KICNkZWZpbmUgc2FmZV9hZGRyZXNzIChrc3RhdF9jcHUoMCkuY3B1c3RhdC51c2VyKQotCiAjZGVmaW5lIF9fdW5sYXp5X2ZwdSggdHNrICkgZG8geyAgIGlmICh0YXNrX3RocmVhZF9pbmZvKHRzayktPnN0YXR1cyAmIFRTX1VTRURGUFUpIHsgICBfX3NhdmVfaW5pdF9mcHUodHNrKTsgICBzdHRzKCk7ICAgfSBlbHNlICAgdHNrLT5mcHVfY291bnRlciA9IDA7ICB9IHdoaWxlICgwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19jbGVhcl9mcHUoIHRzayApICBkbyB7ICAgaWYgKHRhc2tfdGhyZWFkX2luZm8odHNrKS0+c3RhdHVzICYgVFNfVVNFREZQVSkgeyAgIGFzbSB2b2xhdGlsZSgiZm5jbGV4IDsgZndhaXQiKTsgICB0YXNrX3RocmVhZF9pbmZvKHRzayktPnN0YXR1cyAmPSB+VFNfVVNFREZQVTsgICBzdHRzKCk7ICAgfSAgfSB3aGlsZSAoMCkKICNkZWZpbmUgdW5sYXp5X2ZwdSggdHNrICkgZG8geyAgIHByZWVtcHRfZGlzYWJsZSgpOyAgIF9fdW5sYXp5X2ZwdSh0c2spOyAgIHByZWVtcHRfZW5hYmxlKCk7ICB9IHdoaWxlICgwKQogI2RlZmluZSBjbGVhcl9mcHUoIHRzayApIGRvIHsgICBwcmVlbXB0X2Rpc2FibGUoKTsgICBfX2NsZWFyX2ZwdSggdHNrICk7ICAgcHJlZW1wdF9lbmFibGUoKTsgIH0gd2hpbGUgKDApCi0KICNlbmRpZgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9pODI1My5oIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2k4MjUzLmgKaW5kZXggOTNiMWQxYS4uNTc2YTM1NiAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2k4MjUzLmgKKysrIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2k4MjUzLmgKQEAgLTcsMTMgKzcsMTkgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9fQVNNX0k4MjUzX0hfXwogI2RlZmluZSBfX0FTTV9JODI1M19IX18KLQogI2RlZmluZSBQSVRfTU9ERSAweDQzCiAjZGVmaW5lIFBJVF9DSDAgMHg0MAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUElUX0NIMiAweDQyCi0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2k4MjU5LmggYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vaTgyNTkuaAppbmRleCBjMjM2NmVhLi5kYzdlNzg2IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vaTgyNTkuaAorKysgYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vaTgyNTkuaApAQCAtNywxMyArNywxOSBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX19BU01fSTgyNTlfSF9fCiAjZGVmaW5lIF9fQVNNX0k4MjU5X0hfXwotCiAjZGVmaW5lIF9fYnl0ZSh4LHkpICgoKHVuc2lnbmVkIGNoYXIgKikgJih5KSlbeF0pCiAjZGVmaW5lIGNhY2hlZF9tYXN0ZXJfbWFzayAoX19ieXRlKDAsIGNhY2hlZF9pcnFfbWFzaykpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBjYWNoZWRfc2xhdmVfbWFzayAoX19ieXRlKDEsIGNhY2hlZF9pcnFfbWFzaykpCi0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2lhMzJfdW5pc3RkLmggYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vaWEzMl91bmlzdGQuaAppbmRleCA4NDhkMjI4Li4yY2I1M2QwIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vaWEzMl91bmlzdGQuaAorKysgYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vaWEzMl91bmlzdGQuaApAQCAtNywxNiArNywyMyBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX0FTTV9YODZfNjRfSUEzMl9VTklTVERfSF8KICNkZWZpbmUgX0FTTV9YODZfNjRfSUEzMl9VTklTVERfSF8KLQogI2RlZmluZSBfX05SX2lhMzJfcmVzdGFydF9zeXNjYWxsIDAKICNkZWZpbmUgX19OUl9pYTMyX2V4aXQgMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9pYTMyX3JlYWQgMwogI2RlZmluZSBfX05SX2lhMzJfd3JpdGUgNAogI2RlZmluZSBfX05SX2lhMzJfc2lncmV0dXJuIDExOQogI2RlZmluZSBfX05SX2lhMzJfcnRfc2lncmV0dXJuIDE3MwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vaW8uaCBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9pby5oCmluZGV4IGVhNTJlNjYuLjRlODFiOGMgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9pby5oCisrKyBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9pby5oCkBAIC03LDYgKzcsMTMgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0jaW5jbHVkZSAiaW9fNjQuaCIKKyNpbmNsdWRlICJpb18zMi5oIgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2lvXzMyLmggYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vaW9fMzIuaAppbmRleCBmN2UwMDI1Li5iYjllNmYxIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vaW9fMzIuaAorKysgYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vaW9fMzIuaApAQCAtNywyMSArNywyNyBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX0FTTV9JT19ICiAjZGVmaW5lIF9BU01fSU9fSAotCiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSU9fU1BBQ0VfTElNSVQgMHhmZmZmCi0KICNkZWZpbmUgWFFVQURfUE9SVElPX0JBU0UgMHhmZTQwMDAwMAotI2RlZmluZSBYUVVBRF9QT1JUSU9fUVVBRCAweDQwMDAwICAKLQorI2RlZmluZSBYUVVBRF9QT1JUSU9fUVVBRCAweDQwMDAwCiAjaWZkZWYgUkVBTExZX1NMT1dfSU8KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZW5kaWYKICNkZWZpbmUgX19CVUlMRElPKGJ3bCxidyx0eXBlKSAgc3RhdGljIGlubGluZSB2b2lkIG91dCMjYndsKHVuc2lnbmVkIHR5cGUgdmFsdWUsIGludCBwb3J0KSB7ICAgb3V0IyNid2wjI19sb2NhbCh2YWx1ZSwgcG9ydCk7ICB9ICBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIHR5cGUgaW4jI2J3bChpbnQgcG9ydCkgeyAgIHJldHVybiBpbiMjYndsIyNfbG9jYWwocG9ydCk7ICB9CiAjZGVmaW5lIEJVSUxESU8oYndsLGJ3LHR5cGUpICBzdGF0aWMgaW5saW5lIHZvaWQgb3V0IyNid2wjI19sb2NhbCh1bnNpZ25lZCB0eXBlIHZhbHVlLCBpbnQgcG9ydCkgeyAgIF9fYXNtX18gX192b2xhdGlsZV9fKCJvdXQiICNid2wgIiAlIiAjYncgIjAsICV3MSIgOiA6ICJhIih2YWx1ZSksICJOZCIocG9ydCkpOyAgfSAgc3RhdGljIGlubGluZSB1bnNpZ25lZCB0eXBlIGluIyNid2wjI19sb2NhbChpbnQgcG9ydCkgeyAgIHVuc2lnbmVkIHR5cGUgdmFsdWU7ICAgX19hc21fXyBfX3ZvbGF0aWxlX18oImluIiAjYndsICIgJXcxLCAlIiAjYncgIjAiIDogIj1hIih2YWx1ZSkgOiAiTmQiKHBvcnQpKTsgICByZXR1cm4gdmFsdWU7ICB9ICBzdGF0aWMgaW5saW5lIHZvaWQgb3V0IyNid2wjI19sb2NhbF9wKHVuc2lnbmVkIHR5cGUgdmFsdWUsIGludCBwb3J0KSB7ICAgb3V0IyNid2wjI19sb2NhbCh2YWx1ZSwgcG9ydCk7ICAgc2xvd19kb3duX2lvKCk7ICB9ICBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIHR5cGUgaW4jI2J3bCMjX2xvY2FsX3AoaW50IHBvcnQpIHsgICB1bnNpZ25lZCB0eXBlIHZhbHVlID0gaW4jI2J3bCMjX2xvY2FsKHBvcnQpOyAgIHNsb3dfZG93bl9pbygpOyAgIHJldHVybiB2YWx1ZTsgIH0gIF9fQlVJTERJTyhid2wsYncsdHlwZSkgIHN0YXRpYyBpbmxpbmUgdm9pZCBvdXQjI2J3bCMjX3AodW5zaWduZWQgdHlwZSB2YWx1ZSwgaW50IHBvcnQpIHsgICBvdXQjI2J3bCh2YWx1ZSwgcG9ydCk7ICAgc2xvd19kb3duX2lvKCk7ICB9ICBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIHR5cGUgaW4jI2J3bCMjX3AoaW50IHBvcnQpIHsgICB1bnNpZ25lZCB0eXBlIHZhbHVlID0gaW4jI2J3bChwb3J0KTsgICBzbG93X2Rvd25faW8oKTsgICByZXR1cm4gdmFsdWU7ICB9ICBzdGF0aWMgaW5saW5lIHZvaWQgb3V0cyMjYndsKGludCBwb3J0LCBjb25zdCB2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIGNvdW50KSB7ICAgX19hc21fXyBfX3ZvbGF0aWxlX18oInJlcDsgb3V0cyIgI2J3bCA6ICIrUyIoYWRkciksICIrYyIoY291bnQpIDogImQiKHBvcnQpKTsgIH0gIHN0YXRpYyBpbmxpbmUgdm9pZCBpbnMjI2J3bChpbnQgcG9ydCwgdm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBjb3VudCkgeyAgIF9fYXNtX18gX192b2xhdGlsZV9fKCJyZXA7IGlucyIgI2J3bCA6ICIrRCIoYWRkciksICIrYyIoY291bnQpIDogImQiKHBvcnQpKTsgIH0KICNlbmRpZgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9pb19hcGljLmggYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vaW9fYXBpYy5oCmluZGV4IGVkNjA4ZDMuLjU0YmYyM2EgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9pb19hcGljLmgKKysrIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2lvX2FwaWMuaApAQCAtNyw2ICs3LDEzIEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotI2luY2x1ZGUgImlvX2FwaWNfNjQuaCIKKyNpbmNsdWRlICJpb19hcGljXzMyLmgiCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vaW9fYXBpY18zMi5oIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2lvX2FwaWNfMzIuaAppbmRleCBjYzg1OGEzLi4xY2Q0NDAxIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vaW9fYXBpY18zMi5oCisrKyBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9pb19hcGljXzMyLmgKQEAgLTcsOTAgKzcsMTAzIEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfX0FTTV9JT19BUElDX0gKICNkZWZpbmUgX19BU01fSU9fQVBJQ19ICi0KICNpbmNsdWRlIDxhc20vdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vbXBzcGVjLmg+CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2luY2x1ZGUgPGFzbS9hcGljZGVmLmg+Ci0KIHVuaW9uIElPX0FQSUNfcmVnXzAwIHsKICB1MzIgcmF3OwogIHN0cnVjdCB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHUzMiBfX3Jlc2VydmVkXzIgOiAxNCwKICBMVFMgOiAxLAogIGRlbGl2ZXJ5X3R5cGUgOiAxLAogIF9fcmVzZXJ2ZWRfMSA6IDgsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIElEIDogODsKICB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBiaXRzOwogfTsKLQogdW5pb24gSU9fQVBJQ19yZWdfMDEgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1MzIgcmF3OwogIHN0cnVjdCB7CiAgdTMyIHZlcnNpb24gOiA4LAogIF9fcmVzZXJ2ZWRfMiA6IDcsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFBSUSA6IDEsCiAgZW50cmllcyA6IDgsCiAgX19yZXNlcnZlZF8xIDogODsKICB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBiaXRzOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07Ci0KIHVuaW9uIElPX0FQSUNfcmVnXzAyIHsKICB1MzIgcmF3OwogIHN0cnVjdCB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHUzMiBfX3Jlc2VydmVkXzIgOiAyNCwKICBhcmJpdHJhdGlvbiA6IDQsCiAgX19yZXNlcnZlZF8xIDogNDsKICB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBiaXRzOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07Ci0KIHVuaW9uIElPX0FQSUNfcmVnXzAzIHsKICB1MzIgcmF3OwogIHN0cnVjdCB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHUzMiBib290X0RUIDogMSwKICBfX3Jlc2VydmVkXzEgOiAzMTsKICB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBiaXRzOwogfTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIGVudW0gaW9hcGljX2lycV9kZXN0aW5hdGlvbl90eXBlcyB7CiAgZGVzdF9GaXhlZCA9IDAsCiAgZGVzdF9Mb3dlc3RQcmlvID0gMSwKICBkZXN0X1NNSSA9IDIsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGRlc3RfX3Jlc2VydmVkXzEgPSAzLAogIGRlc3RfTk1JID0gNCwKICBkZXN0X0lOSVQgPSA1LAogIGRlc3RfX3Jlc2VydmVkXzIgPSA2LAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBkZXN0X0V4dElOVCA9IDcKIH07Ci0KIHN0cnVjdCBJT19BUElDX3JvdXRlX2VudHJ5IHsKICBfX3UzMiB2ZWN0b3IgOiA4LAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBkZWxpdmVyeV9tb2RlIDogMywKICBkZXN0X21vZGUgOiAxLAogIGRlbGl2ZXJ5X3N0YXR1cyA6IDEsCiAgcG9sYXJpdHkgOiAxLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBpcnIgOiAxLAogIHRyaWdnZXIgOiAxLAogIG1hc2sgOiAxLAogIF9fcmVzZXJ2ZWRfMiA6IDE1OwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuaW9uIHsgc3RydWN0IHsgX191MzIKICBfX3Jlc2VydmVkXzEgOiAyNCwKICBwaHlzaWNhbF9kZXN0IDogNCwKICBfX3Jlc2VydmVkXzIgOiA0OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB9IHBoeXNpY2FsOwotCiAgc3RydWN0IHsgX191MzIKICBfX3Jlc2VydmVkXzEgOiAyNCwKICBsb2dpY2FsX2Rlc3QgOiA4OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB9IGxvZ2ljYWw7CiAgfSBkZXN0OwotCiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQogI2RlZmluZSBpb19hcGljX2Fzc2lnbl9wY2lfaXJxcyAwCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9pb2N0bC5oIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2lvY3RsLmgKaW5kZXggNmU0NDZiNi4uN2I3YmQzNyAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2lvY3RsLmgKKysrIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2lvY3RsLmgKQEAgLTcsNiArNywxMyBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9pb2N0bC5oPgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2lvY3Rscy5oIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2lvY3Rscy5oCmluZGV4IDNhZWRjMDQuLjIxNzg1MTkgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9pb2N0bHMuaAorKysgYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vaW9jdGxzLmgKQEAgLTcsODkgKzcsMTA3IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfQVNNX1g4Nl9JT0NUTFNfSAogI2RlZmluZSBfQVNNX1g4Nl9JT0NUTFNfSAotCiAjaW5jbHVkZSA8YXNtL2lvY3RsLmg+Ci0KICNkZWZpbmUgVENHRVRTIDB4NTQwMQotI2RlZmluZSBUQ1NFVFMgMHg1NDAyICAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRDU0VUUyAweDU0MDIKICNkZWZpbmUgVENTRVRTVyAweDU0MDMKICNkZWZpbmUgVENTRVRTRiAweDU0MDQKICNkZWZpbmUgVENHRVRBIDB4NTQwNQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVENTRVRBIDB4NTQwNgogI2RlZmluZSBUQ1NFVEFXIDB4NTQwNwogI2RlZmluZSBUQ1NFVEFGIDB4NTQwOAogI2RlZmluZSBUQ1NCUksgMHg1NDA5CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBUQ1hPTkMgMHg1NDBBCiAjZGVmaW5lIFRDRkxTSCAweDU0MEIKICNkZWZpbmUgVElPQ0VYQ0wgMHg1NDBDCiAjZGVmaW5lIFRJT0NOWENMIDB4NTQwRAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVElPQ1NDVFRZIDB4NTQwRQogI2RlZmluZSBUSU9DR1BHUlAgMHg1NDBGCiAjZGVmaW5lIFRJT0NTUEdSUCAweDU0MTAKICNkZWZpbmUgVElPQ09VVFEgMHg1NDExCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBUSU9DU1RJIDB4NTQxMgogI2RlZmluZSBUSU9DR1dJTlNaIDB4NTQxMwogI2RlZmluZSBUSU9DU1dJTlNaIDB4NTQxNAogI2RlZmluZSBUSU9DTUdFVCAweDU0MTUKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFRJT0NNQklTIDB4NTQxNgogI2RlZmluZSBUSU9DTUJJQyAweDU0MTcKICNkZWZpbmUgVElPQ01TRVQgMHg1NDE4CiAjZGVmaW5lIFRJT0NHU09GVENBUiAweDU0MTkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFRJT0NTU09GVENBUiAweDU0MUEKICNkZWZpbmUgRklPTlJFQUQgMHg1NDFCCiAjZGVmaW5lIFRJT0NJTlEgRklPTlJFQUQKICNkZWZpbmUgVElPQ0xJTlVYIDB4NTQxQworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVElPQ0NPTlMgMHg1NDFECiAjZGVmaW5lIFRJT0NHU0VSSUFMIDB4NTQxRQogI2RlZmluZSBUSU9DU1NFUklBTCAweDU0MUYKICNkZWZpbmUgVElPQ1BLVCAweDU0MjAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEZJT05CSU8gMHg1NDIxCiAjZGVmaW5lIFRJT0NOT1RUWSAweDU0MjIKICNkZWZpbmUgVElPQ1NFVEQgMHg1NDIzCiAjZGVmaW5lIFRJT0NHRVREIDB4NTQyNAotI2RlZmluZSBUQ1NCUktQIDB4NTQyNSAgCi0KLSNkZWZpbmUgVElPQ1NCUksgMHg1NDI3ICAKLSNkZWZpbmUgVElPQ0NCUksgMHg1NDI4ICAKLSNkZWZpbmUgVElPQ0dTSUQgMHg1NDI5ICAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRDU0JSS1AgMHg1NDI1CisjZGVmaW5lIFRJT0NTQlJLIDB4NTQyNworI2RlZmluZSBUSU9DQ0JSSyAweDU0MjgKKyNkZWZpbmUgVElPQ0dTSUQgMHg1NDI5CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBUQ0dFVFMyIF9JT1IoJ1QnLDB4MkEsIHN0cnVjdCB0ZXJtaW9zMikKICNkZWZpbmUgVENTRVRTMiBfSU9XKCdUJywweDJCLCBzdHJ1Y3QgdGVybWlvczIpCiAjZGVmaW5lIFRDU0VUU1cyIF9JT1coJ1QnLDB4MkMsIHN0cnVjdCB0ZXJtaW9zMikKICNkZWZpbmUgVENTRVRTRjIgX0lPVygnVCcsMHgyRCwgc3RydWN0IHRlcm1pb3MyKQotI2RlZmluZSBUSU9DR1BUTiBfSU9SKCdUJywweDMwLCB1bnNpZ25lZCBpbnQpICAKLSNkZWZpbmUgVElPQ1NQVExDSyBfSU9XKCdUJywweDMxLCBpbnQpICAKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElPQ0dQVE4gX0lPUignVCcsMHgzMCwgdW5zaWduZWQgaW50KQorI2RlZmluZSBUSU9DU1BUTENLIF9JT1coJ1QnLDB4MzEsIGludCkKICNkZWZpbmUgRklPTkNMRVggMHg1NDUwCiAjZGVmaW5lIEZJT0NMRVggMHg1NDUxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBGSU9BU1lOQyAweDU0NTIKICNkZWZpbmUgVElPQ1NFUkNPTkZJRyAweDU0NTMKICNkZWZpbmUgVElPQ1NFUkdXSUxEIDB4NTQ1NAogI2RlZmluZSBUSU9DU0VSU1dJTEQgMHg1NDU1CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBUSU9DR0xDS1RSTUlPUyAweDU0NTYKICNkZWZpbmUgVElPQ1NMQ0tUUk1JT1MgMHg1NDU3Ci0jZGVmaW5lIFRJT0NTRVJHU1RSVUNUIDB4NTQ1OCAgCi0jZGVmaW5lIFRJT0NTRVJHRVRMU1IgMHg1NDU5ICAKLSNkZWZpbmUgVElPQ1NFUkdFVE1VTFRJIDB4NTQ1QSAgCi0jZGVmaW5lIFRJT0NTRVJTRVRNVUxUSSAweDU0NUIgIAotCi0jZGVmaW5lIFRJT0NNSVdBSVQgMHg1NDVDICAKLSNkZWZpbmUgVElPQ0dJQ09VTlQgMHg1NDVEICAKLSNkZWZpbmUgVElPQ0dIQVlFU0VTUCAweDU0NUUgIAotI2RlZmluZSBUSU9DU0hBWUVTRVNQIDB4NTQ1RiAgCisjZGVmaW5lIFRJT0NTRVJHU1RSVUNUIDB4NTQ1OAorI2RlZmluZSBUSU9DU0VSR0VUTFNSIDB4NTQ1OQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElPQ1NFUkdFVE1VTFRJIDB4NTQ1QQorI2RlZmluZSBUSU9DU0VSU0VUTVVMVEkgMHg1NDVCCisjZGVmaW5lIFRJT0NNSVdBSVQgMHg1NDVDCisjZGVmaW5lIFRJT0NHSUNPVU5UIDB4NTQ1RAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElPQ0dIQVlFU0VTUCAweDU0NUUKKyNkZWZpbmUgVElPQ1NIQVlFU0VTUCAweDU0NUYKICNkZWZpbmUgRklPUVNJWkUgMHg1NDYwCi0KICNkZWZpbmUgVElPQ1BLVF9EQVRBIDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFRJT0NQS1RfRkxVU0hSRUFEIDEKICNkZWZpbmUgVElPQ1BLVF9GTFVTSFdSSVRFIDIKICNkZWZpbmUgVElPQ1BLVF9TVE9QIDQKICNkZWZpbmUgVElPQ1BLVF9TVEFSVCA4CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBUSU9DUEtUX05PU1RPUCAxNgogI2RlZmluZSBUSU9DUEtUX0RPU1RPUCAzMgotCi0jZGVmaW5lIFRJT0NTRVJfVEVNVCAweDAxICAKLQorI2RlZmluZSBUSU9DU0VSX1RFTVQgMHgwMQogI2VuZGlmCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2lwY2J1Zi5oIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2lwY2J1Zi5oCmluZGV4IDMyMzQyYzEuLjgzZGMxMmYgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9pcGNidWYuaAorKysgYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vaXBjYnVmLmgKQEAgLTcsMjQgKzcsMzMgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9BU01fWDg2X0lQQ0JVRl9ICiAjZGVmaW5lIF9BU01fWDg2X0lQQ0JVRl9ICi0KIHN0cnVjdCBpcGM2NF9wZXJtCiB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fa2VybmVsX2tleV90IGtleTsKICBfX2tlcm5lbF91aWQzMl90IHVpZDsKICBfX2tlcm5lbF9naWQzMl90IGdpZDsKICBfX2tlcm5lbF91aWQzMl90IGN1aWQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fa2VybmVsX2dpZDMyX3QgY2dpZDsKICBfX2tlcm5lbF9tb2RlX3QgbW9kZTsKICB1bnNpZ25lZCBzaG9ydCBfX3BhZDE7CiAgdW5zaWduZWQgc2hvcnQgc2VxOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBzaG9ydCBfX3BhZDI7CiAgdW5zaWduZWQgbG9uZyBfX3VudXNlZDE7CiAgdW5zaWduZWQgbG9uZyBfX3VudXNlZDI7CiB9OwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vaXJxLmggYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vaXJxLmgKaW5kZXggMDdhMzMxZC4uZWFhNjVkYiAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2lycS5oCisrKyBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9pcnEuaApAQCAtNyw2ICs3LDEzIEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotI2luY2x1ZGUgImlycV82NC5oIgorI2luY2x1ZGUgImlycV8zMi5oIgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2lycV8zMi5oIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2lycV8zMi5oCmluZGV4IDMxNDEwNzEuLjFkN2ZhYjYgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9pcnFfMzIuaAorKysgYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vaXJxXzMyLmgKQEAgLTcsMTcgKzcsMjIgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9BU01fSVJRX0gKICNkZWZpbmUgX0FTTV9JUlFfSAotCiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLQogI2luY2x1ZGUgImlycV92ZWN0b3JzLmgiCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2luY2x1ZGUgPGFzbS90aHJlYWRfaW5mby5oPgotCiAjZGVmaW5lIGlycV9jdHhfaW5pdChjcHUpIGRvIHsgfSB3aGlsZSAoMCkKICNkZWZpbmUgaXJxX2N0eF9leGl0KGNwdSkgZG8geyB9IHdoaWxlICgwKQotCiAjZW5kaWYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vaXJxZmxhZ3MuaCBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9pcnFmbGFncy5oCmluZGV4IDRmODQ2NjIuLjQxMzY1OTggMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9pcnFmbGFncy5oCisrKyBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9pcnFmbGFncy5oCkBAIC03LDYgKzcsMTMgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0jaW5jbHVkZSAiaXJxZmxhZ3NfNjQuaCIKKyNpbmNsdWRlICJpcnFmbGFnc18zMi5oIgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2lycWZsYWdzXzMyLmggYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vaXJxZmxhZ3NfMzIuaAppbmRleCA5MDAyZTQ0Li45ZDc3MjY0IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vaXJxZmxhZ3NfMzIuaAorKysgYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vaXJxZmxhZ3NfMzIuaApAQCAtNywyNyArNywzOCBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX0FTTV9JUlFGTEFHU19ICiAjZGVmaW5lIF9BU01fSVJRRkxBR1NfSAogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3ItZmxhZ3MuaD4KLQogI2lmbmRlZiBfX0FTU0VNQkxZX18KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZW5kaWYKICNpZm5kZWYgX19BU1NFTUJMWV9fCiAjZWxzZQogI2RlZmluZSBESVNBQkxFX0lOVEVSUlVQVFMoY2xvYmJlcnMpIGNsaQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRU5BQkxFX0lOVEVSUlVQVFMoY2xvYmJlcnMpIHN0aQogI2RlZmluZSBFTkFCTEVfSU5URVJSVVBUU19TWVNFWElUIHN0aTsgc3lzZXhpdAogI2RlZmluZSBJTlRFUlJVUFRfUkVUVVJOIGlyZXQKICNkZWZpbmUgR0VUX0NSMF9JTlRPX0VBWCBtb3ZsICVjcjAsICVlYXgKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZW5kaWYKICNpZm5kZWYgX19BU1NFTUJMWV9fCiAjZGVmaW5lIHJhd19sb2NhbF9zYXZlX2ZsYWdzKGZsYWdzKSAgIGRvIHsgKGZsYWdzKSA9IF9fcmF3X2xvY2FsX3NhdmVfZmxhZ3MoKTsgfSB3aGlsZSAoMCkKICNkZWZpbmUgcmF3X2xvY2FsX2lycV9zYXZlKGZsYWdzKSAgIGRvIHsgKGZsYWdzKSA9IF9fcmF3X2xvY2FsX2lycV9zYXZlKCk7IH0gd2hpbGUgKDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2VuZGlmCiAjZGVmaW5lIFRSQUNFX0lSUVNfT04KICNkZWZpbmUgVFJBQ0VfSVJRU19PRkYKICNkZWZpbmUgTE9DS0RFUF9TWVNfRVhJVAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2lzdC5oIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2lzdC5oCmluZGV4IDBhYmFiMTkuLjAzNDliZDMgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9pc3QuaAorKysgYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vaXN0LmgKQEAgLTcsMTggKzcsMjQgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9BU01fSVNUX0gKICNkZWZpbmUgX0FTTV9JU1RfSAotCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLQogc3RydWN0IGlzdF9pbmZvIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgc2lnbmF0dXJlOwogIF9fdTMyIGNvbW1hbmQ7CiAgX191MzIgZXZlbnQ7CiAgX191MzIgcGVyZl9sZXZlbDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9rbWFwX3R5cGVzLmggYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20va21hcF90eXBlcy5oCmluZGV4IGMyMzEzZWUuLmJhNmFmOTMgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9rbWFwX3R5cGVzLmgKKysrIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2ttYXBfdHlwZXMuaApAQCAtNywzMCArNywzOCBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX0FTTV9YODZfS01BUF9UWVBFU19ICiAjZGVmaW5lIF9BU01fWDg2X0tNQVBfVFlQRVNfSAotCiAjZGVmaW5lIEQobikKLQogZW51bSBrbV90eXBlIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBEKDApIEtNX0JPVU5DRV9SRUFELAogRCgxKSBLTV9TS0JfU1VOUlBDX0RBVEEsCiBEKDIpIEtNX1NLQl9EQVRBX1NPRlRJUlEsCiBEKDMpIEtNX1VTRVIwLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIEQoNCkgS01fVVNFUjEsCiBEKDUpIEtNX0JJT19TUkNfSVJRLAogRCg2KSBLTV9CSU9fRFNUX0lSUSwKIEQoNykgS01fUFRFMCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBEKDgpIEtNX1BURTEsCiBEKDkpIEtNX0lSUTAsCiBEKDEwKSBLTV9JUlExLAogRCgxMSkgS01fU09GVElSUTAsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogRCgxMikgS01fU09GVElSUTEsCiBEKDEzKSBLTV9UWVBFX05SCiB9OwotCiAjdW5kZWYgRAotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vbGR0LmggYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vbGR0LmgKaW5kZXggMTliOTFhYi4uZmY4ODc2MCAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2xkdC5oCisrKyBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9sZHQuaApAQCAtNywzNSArNyw0MiBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX0FTTV9YODZfTERUX0gKICNkZWZpbmUgX0FTTV9YODZfTERUX0gKLQogI2RlZmluZSBMRFRfRU5UUklFUyA4MTkyCi0KICNkZWZpbmUgTERUX0VOVFJZX1NJWkUgOAotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2lmbmRlZiBfX0FTU0VNQkxZX18KLQogc3RydWN0IHVzZXJfZGVzYyB7CiAgdW5zaWduZWQgaW50IGVudHJ5X251bWJlcjsKICB1bnNpZ25lZCBpbnQgYmFzZV9hZGRyOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBpbnQgbGltaXQ7CiAgdW5zaWduZWQgaW50IHNlZ18zMmJpdDoxOwogIHVuc2lnbmVkIGludCBjb250ZW50czoyOwogIHVuc2lnbmVkIGludCByZWFkX2V4ZWNfb25seToxOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBpbnQgbGltaXRfaW5fcGFnZXM6MTsKICB1bnNpZ25lZCBpbnQgc2VnX25vdF9wcmVzZW50OjE7CiAgdW5zaWduZWQgaW50IHVzZWFibGU6MTsKICNpZmRlZiBfX3g4Nl82NF9fCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGludCBsbToxOwogI2VuZGlmCiB9OwotCiAjZGVmaW5lIE1PRElGWV9MRFRfQ09OVEVOVFNfREFUQSAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNT0RJRllfTERUX0NPTlRFTlRTX1NUQUNLIDEKICNkZWZpbmUgTU9ESUZZX0xEVF9DT05URU5UU19DT0RFIDIKLQogI2VuZGlmCiAjZW5kaWYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vbGlua2FnZS5oIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2xpbmthZ2UuaAppbmRleCBmMTQ5ZTRkLi4zYWFlNDNkIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vbGlua2FnZS5oCisrKyBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9saW5rYWdlLmgKQEAgLTcsNiArNywxMyBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSNpbmNsdWRlICJsaW5rYWdlXzY0LmgiCisjaW5jbHVkZSAibGlua2FnZV8zMi5oIgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2xpbmthZ2VfMzIuaCBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9saW5rYWdlXzMyLmgKaW5kZXggNmRiMTBlZS4uZTg1MDk0NyAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2xpbmthZ2VfMzIuaAorKysgYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vbGlua2FnZV8zMi5oCkBAIC03LDE1ICs3LDIwIEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfX0FTTV9MSU5LQUdFX0gKICNkZWZpbmUgX19BU01fTElOS0FHRV9ICi0KICNkZWZpbmUgYXNtbGlua2FnZSBDUFBfQVNNTElOS0FHRSBfX2F0dHJpYnV0ZV9fKChyZWdwYXJtKDApKSkKICNkZWZpbmUgRkFTVENBTEwoeCkgeCBfX2F0dHJpYnV0ZV9fKChyZWdwYXJtKDMpKSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIGZhc3RjYWxsIF9fYXR0cmlidXRlX18oKHJlZ3Bhcm0oMykpKQotCiAjZGVmaW5lIHByZXZlbnRfdGFpbF9jYWxsKHJldCkgX19hc21fXyAoIiIgOiAiPXIiIChyZXQpIDogIjAiIChyZXQpKQotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9sb2NhbC5oIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2xvY2FsLmgKaW5kZXggODUwODBiOC4uOTlhY2Y2ZCAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2xvY2FsLmgKKysrIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL2xvY2FsLmgKQEAgLTcsNiArNywxMyBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSNpbmNsdWRlICJsb2NhbF82NC5oIgorI2luY2x1ZGUgImxvY2FsXzMyLmgiCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vbG9jYWxfMzIuaCBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9sb2NhbF8zMi5oCmluZGV4IGZjYWQ3NTMuLjhjNWIzMjIgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9sb2NhbF8zMi5oCisrKyBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9sb2NhbF8zMi5oCkBAIC03LDQ1ICs3LDU1IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfQVJDSF9JMzg2X0xPQ0FMX0gKICNkZWZpbmUgX0FSQ0hfSTM4Nl9MT0NBTF9ICi0KICNpbmNsdWRlIDxsaW51eC9wZXJjcHUuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KLQogdHlwZWRlZiBzdHJ1Y3QKIHsKICBhdG9taWNfbG9uZ190IGE7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfSBsb2NhbF90OwotCiAjZGVmaW5lIExPQ0FMX0lOSVQoaSkgeyBBVE9NSUNfTE9OR19JTklUKGkpIH0KLQogI2RlZmluZSBsb2NhbF9yZWFkKGwpIGF0b21pY19sb25nX3JlYWQoJihsKS0+YSkKICNkZWZpbmUgbG9jYWxfc2V0KGwsaSkgYXRvbWljX2xvbmdfc2V0KCYobCktPmEsIChpKSkKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgbG9jYWxfaW5jX3JldHVybihsKSAobG9jYWxfYWRkX3JldHVybigxLGwpKQogI2RlZmluZSBsb2NhbF9kZWNfcmV0dXJuKGwpIChsb2NhbF9zdWJfcmV0dXJuKDEsbCkpCiAjZGVmaW5lIGxvY2FsX2NtcHhjaGcobCwgbywgbikgICAoY21weGNoZ19sb2NhbCgmKChsKS0+YS5jb3VudGVyKSwgKG8pLCAobikpKQogI2RlZmluZSBsb2NhbF94Y2hnKGwsIG4pICh4Y2hnKCYoKGwpLT5hLmNvdW50ZXIpLCAobikpKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgbG9jYWxfYWRkX3VubGVzcyhsLCBhLCB1KSAgKHsgICBsb25nIGMsIG9sZDsgICBjID0gbG9jYWxfcmVhZChsKTsgICBmb3IgKDs7KSB7ICAgaWYgKHVubGlrZWx5KGMgPT0gKHUpKSkgICBicmVhazsgICBvbGQgPSBsb2NhbF9jbXB4Y2hnKChsKSwgYywgYyArIChhKSk7ICAgaWYgKGxpa2VseShvbGQgPT0gYykpICAgYnJlYWs7ICAgYyA9IG9sZDsgICB9ICAgYyAhPSAodSk7ICB9KQogI2RlZmluZSBsb2NhbF9pbmNfbm90X3plcm8obCkgbG9jYWxfYWRkX3VubGVzcygobCksIDEsIDApCiAjZGVmaW5lIF9fbG9jYWxfaW5jKGwpIGxvY2FsX2luYyhsKQogI2RlZmluZSBfX2xvY2FsX2RlYyhsKSBsb2NhbF9kZWMobCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fbG9jYWxfYWRkKGksbCkgbG9jYWxfYWRkKChpKSwobCkpCiAjZGVmaW5lIF9fbG9jYWxfc3ViKGksbCkgbG9jYWxfc3ViKChpKSwobCkpCiAjZGVmaW5lIGNwdV9sb2NhbF93cmFwX3YobCkgICAoeyBsb2NhbF90IHJlc19fOyAgIHByZWVtcHRfZGlzYWJsZSgpOyAgIHJlc19fID0gKGwpOyAgIHByZWVtcHRfZW5hYmxlKCk7ICAgcmVzX187IH0pCi0jZGVmaW5lIGNwdV9sb2NhbF93cmFwKGwpICAgKHsgcHJlZW1wdF9kaXNhYmxlKCk7ICAgbDsgICBwcmVlbXB0X2VuYWJsZSgpOyB9KSAgCisjZGVmaW5lIGNwdV9sb2NhbF93cmFwKGwpICAgKHsgcHJlZW1wdF9kaXNhYmxlKCk7ICAgbDsgICBwcmVlbXB0X2VuYWJsZSgpOyB9KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgY3B1X2xvY2FsX3JlYWQobCkgY3B1X2xvY2FsX3dyYXBfdihsb2NhbF9yZWFkKCZfX2dldF9jcHVfdmFyKGwpKSkKICNkZWZpbmUgY3B1X2xvY2FsX3NldChsLCBpKSBjcHVfbG9jYWxfd3JhcChsb2NhbF9zZXQoJl9fZ2V0X2NwdV92YXIobCksIChpKSkpCiAjZGVmaW5lIGNwdV9sb2NhbF9pbmMobCkgY3B1X2xvY2FsX3dyYXAobG9jYWxfaW5jKCZfX2dldF9jcHVfdmFyKGwpKSkKICNkZWZpbmUgY3B1X2xvY2FsX2RlYyhsKSBjcHVfbG9jYWxfd3JhcChsb2NhbF9kZWMoJl9fZ2V0X2NwdV92YXIobCkpKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgY3B1X2xvY2FsX2FkZChpLCBsKSBjcHVfbG9jYWxfd3JhcChsb2NhbF9hZGQoKGkpLCAmX19nZXRfY3B1X3ZhcihsKSkpCiAjZGVmaW5lIGNwdV9sb2NhbF9zdWIoaSwgbCkgY3B1X2xvY2FsX3dyYXAobG9jYWxfc3ViKChpKSwgJl9fZ2V0X2NwdV92YXIobCkpKQogI2RlZmluZSBfX2NwdV9sb2NhbF9pbmMobCkgY3B1X2xvY2FsX2luYyhsKQogI2RlZmluZSBfX2NwdV9sb2NhbF9kZWMobCkgY3B1X2xvY2FsX2RlYyhsKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19jcHVfbG9jYWxfYWRkKGksIGwpIGNwdV9sb2NhbF9hZGQoKGkpLCAobCkpCiAjZGVmaW5lIF9fY3B1X2xvY2FsX3N1YihpLCBsKSBjcHVfbG9jYWxfc3ViKChpKSwgKGwpKQogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vbWF0aF9lbXUuaCBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9tYXRoX2VtdS5oCmluZGV4IDkzODBkMTkuLjA2ODAwNmMgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9tYXRoX2VtdS5oCisrKyBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9tYXRoX2VtdS5oCkBAIC03LDM0ICs3LDQ1IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfSTM4Nl9NQVRIX0VNVV9ICiAjZGVmaW5lIF9JMzg2X01BVEhfRU1VX0gKLQogI2luY2x1ZGUgPGFzbS9zaWdjb250ZXh0Lmg+Ci0KIHN0cnVjdCBpbmZvIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgbG9uZyBfX19vcmlnX2VpcDsKICBsb25nIF9fX2VieDsKICBsb25nIF9fX2VjeDsKICBsb25nIF9fX2VkeDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgbG9uZyBfX19lc2k7CiAgbG9uZyBfX19lZGk7CiAgbG9uZyBfX19lYnA7CiAgbG9uZyBfX19lYXg7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGxvbmcgX19fZHM7CiAgbG9uZyBfX19lczsKICBsb25nIF9fX2ZzOwogIGxvbmcgX19fb3JpZ19lYXg7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGxvbmcgX19fZWlwOwogIGxvbmcgX19fY3M7CiAgbG9uZyBfX19lZmxhZ3M7CiAgbG9uZyBfX19lc3A7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGxvbmcgX19fc3M7CiAgbG9uZyBfX192bTg2X2VzOwogIGxvbmcgX19fdm04Nl9kczsKICBsb25nIF9fX3ZtODZfZnM7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGxvbmcgX19fdm04Nl9nczsKIH07CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9tYzE0NjgxOHJ0Yy5oIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL21jMTQ2ODE4cnRjLmgKaW5kZXggODQ5Nzg3Ny4uZjdlODc4MSAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL21jMTQ2ODE4cnRjLmgKKysrIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL21jMTQ2ODE4cnRjLmgKQEAgLTcsNiArNywxMyBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSNpbmNsdWRlICJtYzE0NjgxOHJ0Y182NC5oIgorI2luY2x1ZGUgIm1jMTQ2ODE4cnRjXzMyLmgiCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vbWMxNDY4MThydGNfMzIuaCBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9tYzE0NjgxOHJ0Y18zMi5oCmluZGV4IDg5OWQ2MDguLmVmZjg1ODEgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9tYzE0NjgxOHJ0Y18zMi5oCisrKyBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9tYzE0NjgxOHJ0Y18zMi5oCkBAIC03LDM4ICs3LDQ0IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfQVNNX01DMTQ2ODE4UlRDX0gKICNkZWZpbmUgX0FTTV9NQzE0NjgxOFJUQ19ICi0KICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KICNpbmNsdWRlIDxsaW51eC9tYzE0NjgxOHJ0Yy5oPgotCiAjaWZuZGVmIFJUQ19QT1JUCiAjZGVmaW5lIFJUQ19QT1JUKHgpICgweDcwICsgKHgpKQotI2RlZmluZSBSVENfQUxXQVlTX0JDRCAxICAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFJUQ19BTFdBWVNfQkNEIDEKICNlbmRpZgotCiAjaWZkZWYgX19IQVZFX0FSQ0hfQ01QWENIRwotCiAjaW5jbHVkZSA8bGludXgvc21wLmg+Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIGxvY2tfY21vc19wcmVmaXgocmVnKSAgIGRvIHsgICB1bnNpZ25lZCBsb25nIGNtb3NfZmxhZ3M7ICAgbG9jYWxfaXJxX3NhdmUoY21vc19mbGFncyk7ICAgbG9ja19jbW9zKHJlZykKICNkZWZpbmUgbG9ja19jbW9zX3N1ZmZpeChyZWcpICAgdW5sb2NrX2Ntb3MoKTsgICBsb2NhbF9pcnFfcmVzdG9yZShjbW9zX2ZsYWdzKTsgICB9IHdoaWxlICgwKQogI2Vsc2UKICNkZWZpbmUgbG9ja19jbW9zX3ByZWZpeChyZWcpIGRvIHt9IHdoaWxlICgwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgbG9ja19jbW9zX3N1ZmZpeChyZWcpIGRvIHt9IHdoaWxlICgwKQogI2RlZmluZSBsb2NrX2Ntb3MocmVnKQogI2RlZmluZSB1bmxvY2tfY21vcygpCiAjZGVmaW5lIGRvX2lfaGF2ZV9sb2NrX2Ntb3MoKSAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBjdXJyZW50X2xvY2tfY21vc19yZWcoKSAwCiAjZW5kaWYKICNkZWZpbmUgQ01PU19SRUFEKGFkZHIpIHJ0Y19jbW9zX3JlYWQoYWRkcikKICNkZWZpbmUgQ01PU19XUklURSh2YWwsIGFkZHIpIHJ0Y19jbW9zX3dyaXRlKHZhbCwgYWRkcikKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUlRDX0lSUSA4Ci0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL21tYW4uaCBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9tbWFuLmgKaW5kZXggN2VkYTMxOS4uNmYxZDcxZSAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL21tYW4uaAorKysgYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vbW1hbi5oCkBAIC03LDI0ICs3LDI5IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfQVNNX1g4Nl9NTUFOX0gKICNkZWZpbmUgX0FTTV9YODZfTU1BTl9ICi0KICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9tbWFuLmg+Ci0KLSNkZWZpbmUgTUFQXzMyQklUIDB4NDAgIAotCi0jZGVmaW5lIE1BUF9HUk9XU0RPV04gMHgwMTAwICAKLSNkZWZpbmUgTUFQX0RFTllXUklURSAweDA4MDAgIAotI2RlZmluZSBNQVBfRVhFQ1VUQUJMRSAweDEwMDAgIAotI2RlZmluZSBNQVBfTE9DS0VEIDB4MjAwMCAgCi0jZGVmaW5lIE1BUF9OT1JFU0VSVkUgMHg0MDAwICAKLSNkZWZpbmUgTUFQX1BPUFVMQVRFIDB4ODAwMCAgCi0jZGVmaW5lIE1BUF9OT05CTE9DSyAweDEwMDAwICAKLQotI2RlZmluZSBNQ0xfQ1VSUkVOVCAxICAKLSNkZWZpbmUgTUNMX0ZVVFVSRSAyICAKLQorI2RlZmluZSBNQVBfMzJCSVQgMHg0MAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgTUFQX0dST1dTRE9XTiAweDAxMDAKKyNkZWZpbmUgTUFQX0RFTllXUklURSAweDA4MDAKKyNkZWZpbmUgTUFQX0VYRUNVVEFCTEUgMHgxMDAwCisjZGVmaW5lIE1BUF9MT0NLRUQgMHgyMDAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBNQVBfTk9SRVNFUlZFIDB4NDAwMAorI2RlZmluZSBNQVBfUE9QVUxBVEUgMHg4MDAwCisjZGVmaW5lIE1BUF9OT05CTE9DSyAweDEwMDAwCisjZGVmaW5lIE1DTF9DVVJSRU5UIDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIE1DTF9GVVRVUkUgMgogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vbW1zZWdtZW50LmggYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vbW1zZWdtZW50LmgKaW5kZXggNzYwNDVjNy4uMDFiZmZjYSAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL21tc2VnbWVudC5oCisrKyBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9tbXNlZ21lbnQuaApAQCAtNywxMyArNywxOSBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX0FTTV9NTVNFR01FTlRfSAogI2RlZmluZSBfQVNNX01NU0VHTUVOVF9IIDEKLQogdHlwZWRlZiBzdHJ1Y3QgewogIHVuc2lnbmVkIGxvbmcgc2VnOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH0gbW1fc2VnbWVudF90OwotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9tbXUuaCBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9tbXUuaAppbmRleCAzMGRiMTBhLi42MWMzY2MwIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vbW11LmgKKysrIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL21tdS5oCkBAIC03LDE5ICs3LDI1IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfQVNNX1g4Nl9NTVVfSAogI2RlZmluZSBfQVNNX1g4Nl9NTVVfSAotCiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogdHlwZWRlZiBzdHJ1Y3QgewogIHZvaWQgKmxkdDsKICBpbnQgc2l6ZTsKICBzdHJ1Y3QgbXV0ZXggbG9jazsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdm9pZCAqdmRzbzsKIH0gbW1fY29udGV4dF90OwotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9tb2R1bGUuaCBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9tb2R1bGUuaAppbmRleCBmZjI5MmQ0Li4yOTZlZDJiIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vbW9kdWxlLmgKKysrIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL21vZHVsZS5oCkBAIC03LDYgKzcsMTMgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0jaW5jbHVkZSAibW9kdWxlXzY0LmgiCisjaW5jbHVkZSAibW9kdWxlXzMyLmgiCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vbW9kdWxlXzMyLmggYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vbW9kdWxlXzMyLmgKaW5kZXggMmUyNjcyOS4uZmQxZDA5OSAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL21vZHVsZV8zMi5oCisrKyBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9tb2R1bGVfMzIuaApAQCAtNywyMyArNywyNyBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX0FTTV9JMzg2X01PRFVMRV9ICiAjZGVmaW5lIF9BU01fSTM4Nl9NT0RVTEVfSAotCiBzdHJ1Y3QgbW9kX2FyY2hfc3BlY2lmaWMKIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwotCiAjZGVmaW5lIEVsZl9TaGRyIEVsZjMyX1NoZHIKICNkZWZpbmUgRWxmX1N5bSBFbGYzMl9TeW0KICNkZWZpbmUgRWxmX0VoZHIgRWxmMzJfRWhkcgotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2Vycm9yIHVua25vd24gcHJvY2Vzc29yIGZhbWlseQotCiAjZGVmaW5lIE1PRFVMRV9TVEFDS1NJWkUgIiIKLQogI2RlZmluZSBNT0RVTEVfQVJDSF9WRVJNQUdJQyBNT0RVTEVfUFJPQ19GQU1JTFkgTU9EVUxFX1NUQUNLU0laRQotCiAjZW5kaWYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vbXBzcGVjLmggYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vbXBzcGVjLmgKaW5kZXggMjMzNjUwNC4uMjE3YTdkNCAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL21wc3BlYy5oCisrKyBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9tcHNwZWMuaApAQCAtNyw2ICs3LDEzIEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotI2luY2x1ZGUgIm1wc3BlY182NC5oIgorI2luY2x1ZGUgIm1wc3BlY18zMi5oIgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL21wc3BlY18zMi5oIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL21wc3BlY18zMi5oCmluZGV4IDdhY2JlOGEuLjkwOWMzYzQgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9tcHNwZWNfMzIuaAorKysgYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vbXBzcGVjXzMyLmgKQEAgLTcsNDYgKzcsNDkgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9fQVNNX01QU1BFQ19ICiAjZGVmaW5lIF9fQVNNX01QU1BFQ19ICi0KICNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+CiAjaW5jbHVkZSA8YXNtL21wc3BlY19kZWYuaD4KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjaW5jbHVkZSA8bWFjaF9tcHNwZWMuaD4KLQogI2RlZmluZSBQSFlTSURfQVJSQVlfU0laRSBCSVRTX1RPX0xPTkdTKE1BWF9BUElDUykKLQogc3RydWN0IHBoeXNpZF9tYXNrCiB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGxvbmcgbWFza1tQSFlTSURfQVJSQVlfU0laRV07CiB9OwotCiB0eXBlZGVmIHN0cnVjdCBwaHlzaWRfbWFzayBwaHlzaWRfbWFza190OwotCiAjZGVmaW5lIHBoeXNpZF9zZXQocGh5c2lkLCBtYXApIHNldF9iaXQocGh5c2lkLCAobWFwKS5tYXNrKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgcGh5c2lkX2NsZWFyKHBoeXNpZCwgbWFwKSBjbGVhcl9iaXQocGh5c2lkLCAobWFwKS5tYXNrKQogI2RlZmluZSBwaHlzaWRfaXNzZXQocGh5c2lkLCBtYXApIHRlc3RfYml0KHBoeXNpZCwgKG1hcCkubWFzaykKICNkZWZpbmUgcGh5c2lkX3Rlc3RfYW5kX3NldChwaHlzaWQsIG1hcCkgdGVzdF9hbmRfc2V0X2JpdChwaHlzaWQsIChtYXApLm1hc2spCi0KICNkZWZpbmUgcGh5c2lkc19hbmQoZHN0LCBzcmMxLCBzcmMyKSBiaXRtYXBfYW5kKChkc3QpLm1hc2ssIChzcmMxKS5tYXNrLCAoc3JjMikubWFzaywgTUFYX0FQSUNTKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgcGh5c2lkc19vcihkc3QsIHNyYzEsIHNyYzIpIGJpdG1hcF9vcigoZHN0KS5tYXNrLCAoc3JjMSkubWFzaywgKHNyYzIpLm1hc2ssIE1BWF9BUElDUykKICNkZWZpbmUgcGh5c2lkc19jbGVhcihtYXApIGJpdG1hcF96ZXJvKChtYXApLm1hc2ssIE1BWF9BUElDUykKICNkZWZpbmUgcGh5c2lkc19jb21wbGVtZW50KGRzdCwgc3JjKSBiaXRtYXBfY29tcGxlbWVudCgoZHN0KS5tYXNrLChzcmMpLm1hc2ssIE1BWF9BUElDUykKICNkZWZpbmUgcGh5c2lkc19lbXB0eShtYXApIGJpdG1hcF9lbXB0eSgobWFwKS5tYXNrLCBNQVhfQVBJQ1MpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBwaHlzaWRzX2VxdWFsKG1hcDEsIG1hcDIpIGJpdG1hcF9lcXVhbCgobWFwMSkubWFzaywgKG1hcDIpLm1hc2ssIE1BWF9BUElDUykKICNkZWZpbmUgcGh5c2lkc193ZWlnaHQobWFwKSBiaXRtYXBfd2VpZ2h0KChtYXApLm1hc2ssIE1BWF9BUElDUykKICNkZWZpbmUgcGh5c2lkc19zaGlmdF9yaWdodChkLCBzLCBuKSBiaXRtYXBfc2hpZnRfcmlnaHQoKGQpLm1hc2ssIChzKS5tYXNrLCBuLCBNQVhfQVBJQ1MpCiAjZGVmaW5lIHBoeXNpZHNfc2hpZnRfbGVmdChkLCBzLCBuKSBiaXRtYXBfc2hpZnRfbGVmdCgoZCkubWFzaywgKHMpLm1hc2ssIG4sIE1BWF9BUElDUykKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIHBoeXNpZHNfY29lcmNlKG1hcCkgKChtYXApLm1hc2tbMF0pCi0KICNkZWZpbmUgcGh5c2lkc19wcm9tb3RlKHBoeXNpZHMpICAgKHsgICBwaHlzaWRfbWFza190IF9fcGh5c2lkX21hc2sgPSBQSFlTSURfTUFTS19OT05FOyAgIF9fcGh5c2lkX21hc2subWFza1swXSA9IHBoeXNpZHM7ICAgX19waHlzaWRfbWFzazsgICB9KQotCiAjZGVmaW5lIHBoeXNpZF9tYXNrX29mX3BoeXNpZChwaHlzaWQpICAgKHsgICBwaHlzaWRfbWFza190IF9fcGh5c2lkX21hc2sgPSBQSFlTSURfTUFTS19OT05FOyAgIHBoeXNpZF9zZXQocGh5c2lkLCBfX3BoeXNpZF9tYXNrKTsgICBfX3BoeXNpZF9tYXNrOyAgIH0pCi0KICNkZWZpbmUgUEhZU0lEX01BU0tfQUxMIHsge1swIC4uLiBQSFlTSURfQVJSQVlfU0laRS0xXSA9IH4wVUx9IH0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBIWVNJRF9NQVNLX05PTkUgeyB7WzAgLi4uIFBIWVNJRF9BUlJBWV9TSVpFLTFdID0gMFVMfSB9Ci0KICNlbmRpZgotCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vbXBzcGVjX2RlZi5oIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL21wc3BlY19kZWYuaAppbmRleCAxZjE1MzYzLi5mNjVlYTliIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vbXBzcGVjX2RlZi5oCisrKyBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9tcHNwZWNfZGVmLmgKQEAgLTcsMTY1ICs3LDE5MCBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX19BU01fTVBTUEVDX0RFRl9ICiAjZGVmaW5lIF9fQVNNX01QU1BFQ19ERUZfSAotCiAjZGVmaW5lIFNNUF9NQUdJQ19JREVOVCAoKCdfJzw8MjQpfCgnUCc8PDE2KXwoJ00nPDw4KXwnXycpCi0KICNkZWZpbmUgTUFYX01QQ19FTlRSWSAxMDI0CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNQVhfQVBJQ1MgMjU2Ci0KIHN0cnVjdCBpbnRlbF9tcF9mbG9hdGluZwogewogIGNoYXIgbXBmX3NpZ25hdHVyZVs0XTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgbG9uZyBtcGZfcGh5c3B0cjsKICB1bnNpZ25lZCBjaGFyIG1wZl9sZW5ndGg7CiAgdW5zaWduZWQgY2hhciBtcGZfc3BlY2lmaWNhdGlvbjsKICB1bnNpZ25lZCBjaGFyIG1wZl9jaGVja3N1bTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgY2hhciBtcGZfZmVhdHVyZTE7CiAgdW5zaWduZWQgY2hhciBtcGZfZmVhdHVyZTI7CiAgdW5zaWduZWQgY2hhciBtcGZfZmVhdHVyZTM7CiAgdW5zaWduZWQgY2hhciBtcGZfZmVhdHVyZTQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGNoYXIgbXBmX2ZlYXR1cmU1OwogfTsKLQogc3RydWN0IG1wX2NvbmZpZ190YWJsZQogeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBjaGFyIG1wY19zaWduYXR1cmVbNF07CiAjZGVmaW5lIE1QQ19TSUdOQVRVUkUgIlBDTVAiCiAgdW5zaWduZWQgc2hvcnQgbXBjX2xlbmd0aDsKICBjaGFyIG1wY19zcGVjOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBjaGFyIG1wY19jaGVja3N1bTsKICBjaGFyIG1wY19vZW1bOF07CiAgY2hhciBtcGNfcHJvZHVjdGlkWzEyXTsKICB1bnNpZ25lZCBsb25nIG1wY19vZW1wdHI7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIHNob3J0IG1wY19vZW1zaXplOwogIHVuc2lnbmVkIHNob3J0IG1wY19vZW1jb3VudDsKICB1bnNpZ25lZCBsb25nIG1wY19sYXBpYzsKICB1bnNpZ25lZCBsb25nIHJlc2VydmVkOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07Ci0KICNkZWZpbmUgTVBfUFJPQ0VTU09SIDAKICNkZWZpbmUgTVBfQlVTIDEKICNkZWZpbmUgTVBfSU9BUElDIDIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1QX0lOVFNSQyAzCiAjZGVmaW5lIE1QX0xJTlRTUkMgNAotI2RlZmluZSBNUF9UUkFOU0xBVElPTiAxOTIgIAotCisjZGVmaW5lIE1QX1RSQU5TTEFUSU9OIDE5Mgogc3RydWN0IG1wY19jb25maWdfcHJvY2Vzc29yCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogewogIHVuc2lnbmVkIGNoYXIgbXBjX3R5cGU7CiAgdW5zaWduZWQgY2hhciBtcGNfYXBpY2lkOwogIHVuc2lnbmVkIGNoYXIgbXBjX2FwaWN2ZXI7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGNoYXIgbXBjX2NwdWZsYWc7Ci0jZGVmaW5lIENQVV9FTkFCTEVEIDEgIAotI2RlZmluZSBDUFVfQk9PVFBST0NFU1NPUiAyICAKKyNkZWZpbmUgQ1BVX0VOQUJMRUQgMQorI2RlZmluZSBDUFVfQk9PVFBST0NFU1NPUiAyCiAgdW5zaWduZWQgbG9uZyBtcGNfY3B1ZmVhdHVyZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIENQVV9TVEVQUElOR19NQVNLIDB4MEYKICNkZWZpbmUgQ1BVX01PREVMX01BU0sgMHhGMAogI2RlZmluZSBDUFVfRkFNSUxZX01BU0sgMHhGMDAKICB1bnNpZ25lZCBsb25nIG1wY19mZWF0dXJlZmxhZzsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgbG9uZyBtcGNfcmVzZXJ2ZWRbMl07CiB9OwotCiBzdHJ1Y3QgbXBjX2NvbmZpZ19idXMKIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgY2hhciBtcGNfdHlwZTsKICB1bnNpZ25lZCBjaGFyIG1wY19idXNpZDsKICB1bnNpZ25lZCBjaGFyIG1wY19idXN0eXBlWzZdOwogfTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQlVTVFlQRV9FSVNBICJFSVNBIgogI2RlZmluZSBCVVNUWVBFX0lTQSAiSVNBIgotI2RlZmluZSBCVVNUWVBFX0lOVEVSTiAiSU5URVJOIiAgCisjZGVmaW5lIEJVU1RZUEVfSU5URVJOICJJTlRFUk4iCiAjZGVmaW5lIEJVU1RZUEVfTUNBICJNQ0EiCi0jZGVmaW5lIEJVU1RZUEVfVkwgIlZMIiAgCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBCVVNUWVBFX1ZMICJWTCIKICNkZWZpbmUgQlVTVFlQRV9QQ0kgIlBDSSIKICNkZWZpbmUgQlVTVFlQRV9QQ01DSUEgIlBDTUNJQSIKICNkZWZpbmUgQlVTVFlQRV9DQlVTICJDQlVTIgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQlVTVFlQRV9DQlVTSUkgIkNCVVNJSSIKICNkZWZpbmUgQlVTVFlQRV9GVVRVUkUgIkZVVFVSRSIKICNkZWZpbmUgQlVTVFlQRV9NQkkgIk1CSSIKICNkZWZpbmUgQlVTVFlQRV9NQklJICJNQklJIgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQlVTVFlQRV9NUEkgIk1QSSIKICNkZWZpbmUgQlVTVFlQRV9NUFNBICJNUFNBIgogI2RlZmluZSBCVVNUWVBFX05VQlVTICJOVUJVUyIKICNkZWZpbmUgQlVTVFlQRV9UQyAiVEMiCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBCVVNUWVBFX1ZNRSAiVk1FIgogI2RlZmluZSBCVVNUWVBFX1hQUkVTUyAiWFBSRVNTIgotCiBzdHJ1Y3QgbXBjX2NvbmZpZ19pb2FwaWMKIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgY2hhciBtcGNfdHlwZTsKICB1bnNpZ25lZCBjaGFyIG1wY19hcGljaWQ7CiAgdW5zaWduZWQgY2hhciBtcGNfYXBpY3ZlcjsKICB1bnNpZ25lZCBjaGFyIG1wY19mbGFnczsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1QQ19BUElDX1VTQUJMRSAweDAxCiAgdW5zaWduZWQgbG9uZyBtcGNfYXBpY2FkZHI7CiB9OwotCiBzdHJ1Y3QgbXBjX2NvbmZpZ19pbnRzcmMKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB7CiAgdW5zaWduZWQgY2hhciBtcGNfdHlwZTsKICB1bnNpZ25lZCBjaGFyIG1wY19pcnF0eXBlOwogIHVuc2lnbmVkIHNob3J0IG1wY19pcnFmbGFnOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBjaGFyIG1wY19zcmNidXM7CiAgdW5zaWduZWQgY2hhciBtcGNfc3JjYnVzaXJxOwogIHVuc2lnbmVkIGNoYXIgbXBjX2RzdGFwaWM7CiAgdW5zaWduZWQgY2hhciBtcGNfZHN0aXJxOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07Ci0KIGVudW0gbXBfaXJxX3NvdXJjZV90eXBlcyB7CiAgbXBfSU5UID0gMCwKICBtcF9OTUkgPSAxLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBtcF9TTUkgPSAyLAogIG1wX0V4dElOVCA9IDMKIH07Ci0KICNkZWZpbmUgTVBfSVJRRElSX0RFRkFVTFQgMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTVBfSVJRRElSX0hJR0ggMQogI2RlZmluZSBNUF9JUlFESVJfTE9XIDMKLQogc3RydWN0IG1wY19jb25maWdfbGludHNyYwogeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBjaGFyIG1wY190eXBlOwogIHVuc2lnbmVkIGNoYXIgbXBjX2lycXR5cGU7CiAgdW5zaWduZWQgc2hvcnQgbXBjX2lycWZsYWc7CiAgdW5zaWduZWQgY2hhciBtcGNfc3JjYnVzaWQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGNoYXIgbXBjX3NyY2J1c2lycTsKICB1bnNpZ25lZCBjaGFyIG1wY19kZXN0YXBpYzsKICNkZWZpbmUgTVBfQVBJQ19BTEwgMHhGRgogIHVuc2lnbmVkIGNoYXIgbXBjX2Rlc3RhcGljbGludDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwotCiBzdHJ1Y3QgbXBfY29uZmlnX29lbXRhYmxlCiB7CiAgY2hhciBvZW1fc2lnbmF0dXJlWzRdOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTVBDX09FTV9TSUdOQVRVUkUgIl9PRU0iCiAgdW5zaWduZWQgc2hvcnQgb2VtX2xlbmd0aDsKICBjaGFyIG9lbV9yZXY7CiAgY2hhciBvZW1fY2hlY2tzdW07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGNoYXIgbXBjX29lbVs4XTsKIH07Ci0KIHN0cnVjdCBtcGNfY29uZmlnX3RyYW5zbGF0aW9uCiB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGNoYXIgbXBjX3R5cGU7CiAgdW5zaWduZWQgY2hhciB0cmFuc19sZW47CiAgdW5zaWduZWQgY2hhciB0cmFuc190eXBlOwogIHVuc2lnbmVkIGNoYXIgdHJhbnNfcXVhZDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgY2hhciB0cmFuc19nbG9iYWw7CiAgdW5zaWduZWQgY2hhciB0cmFuc19sb2NhbDsKICB1bnNpZ25lZCBzaG9ydCB0cmFuc19yZXNlcnZlZDsKIH07Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBlbnVtIG1wX2J1c3R5cGUgewogIE1QX0JVU19JU0EgPSAxLAogIE1QX0JVU19FSVNBLAogIE1QX0JVU19QQ0ksCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE1QX0JVU19NQ0EsCiB9OwogI2VuZGlmCi0KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9tc2didWYuaCBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9tc2didWYuaAppbmRleCA4ODQzZTc4Li45OWNhZjc2IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vbXNnYnVmLmgKKysrIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL21zZ2J1Zi5oCkBAIC03LDMyICs3LDM1IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfQVNNX1g4Nl9NU0dCVUZfSAogI2RlZmluZSBfQVNNX1g4Nl9NU0dCVUZfSAotCiBzdHJ1Y3QgbXNxaWQ2NF9kcyB7CiAgc3RydWN0IGlwYzY0X3Blcm0gbXNnX3Blcm07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fa2VybmVsX3RpbWVfdCBtc2dfc3RpbWU7Ci0jaWZkZWYgX19pMzg2X18KICB1bnNpZ25lZCBsb25nIF9fdW51c2VkMTsKLSNlbmRpZgogIF9fa2VybmVsX3RpbWVfdCBtc2dfcnRpbWU7Ci0jaWZkZWYgX19pMzg2X18KICB1bnNpZ25lZCBsb25nIF9fdW51c2VkMjsKLSNlbmRpZgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX2tlcm5lbF90aW1lX3QgbXNnX2N0aW1lOwotI2lmZGVmIF9faTM4Nl9fCiAgdW5zaWduZWQgbG9uZyBfX3VudXNlZDM7Ci0jZW5kaWYKICB1bnNpZ25lZCBsb25nIG1zZ19jYnl0ZXM7CiAgdW5zaWduZWQgbG9uZyBtc2dfcW51bTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgbG9uZyBtc2dfcWJ5dGVzOwogIF9fa2VybmVsX3BpZF90IG1zZ19sc3BpZDsKICBfX2tlcm5lbF9waWRfdCBtc2dfbHJwaWQ7CiAgdW5zaWduZWQgbG9uZyBfX3VudXNlZDQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGxvbmcgX191bnVzZWQ1OwogfTsKLQogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vbXNyLWluZGV4LmggYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vbXNyLWluZGV4LmgKaW5kZXggOGVhMjA0ZS4uMTBiMjcyNiAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL21zci1pbmRleC5oCisrKyBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9tc3ItaW5kZXguaApAQCAtNywyNzcgKzcsMzEwIEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfX0FTTV9NU1JfSU5ERVhfSAogI2RlZmluZSBfX0FTTV9NU1JfSU5ERVhfSAotCi0jZGVmaW5lIE1TUl9FRkVSIDB4YzAwMDAwODAgIAotI2RlZmluZSBNU1JfU1RBUiAweGMwMDAwMDgxICAKLSNkZWZpbmUgTVNSX0xTVEFSIDB4YzAwMDAwODIgIAotI2RlZmluZSBNU1JfQ1NUQVIgMHhjMDAwMDA4MyAgCi0jZGVmaW5lIE1TUl9TWVNDQUxMX01BU0sgMHhjMDAwMDA4NCAgCi0jZGVmaW5lIE1TUl9GU19CQVNFIDB4YzAwMDAxMDAgIAotI2RlZmluZSBNU1JfR1NfQkFTRSAweGMwMDAwMTAxICAKLSNkZWZpbmUgTVNSX0tFUk5FTF9HU19CQVNFIDB4YzAwMDAxMDIgIAotCi0jZGVmaW5lIF9FRkVSX1NDRSAwICAKLSNkZWZpbmUgX0VGRVJfTE1FIDggIAotI2RlZmluZSBfRUZFUl9MTUEgMTAgIAotI2RlZmluZSBfRUZFUl9OWCAxMSAgCi0KKyNkZWZpbmUgTVNSX0VGRVIgMHhjMDAwMDA4MAorI2RlZmluZSBNU1JfU1RBUiAweGMwMDAwMDgxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBNU1JfTFNUQVIgMHhjMDAwMDA4MgorI2RlZmluZSBNU1JfQ1NUQVIgMHhjMDAwMDA4MworI2RlZmluZSBNU1JfU1lTQ0FMTF9NQVNLIDB4YzAwMDAwODQKKyNkZWZpbmUgTVNSX0ZTX0JBU0UgMHhjMDAwMDEwMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgTVNSX0dTX0JBU0UgMHhjMDAwMDEwMQorI2RlZmluZSBNU1JfS0VSTkVMX0dTX0JBU0UgMHhjMDAwMDEwMgorI2RlZmluZSBfRUZFUl9TQ0UgMAorI2RlZmluZSBfRUZFUl9MTUUgOAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgX0VGRVJfTE1BIDEwCisjZGVmaW5lIF9FRkVSX05YIDExCiAjZGVmaW5lIEVGRVJfU0NFICgxPDxfRUZFUl9TQ0UpCiAjZGVmaW5lIEVGRVJfTE1FICgxPDxfRUZFUl9MTUUpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBFRkVSX0xNQSAoMTw8X0VGRVJfTE1BKQogI2RlZmluZSBFRkVSX05YICgxPDxfRUZFUl9OWCkKLQogI2RlZmluZSBNU1JfSUEzMl9QRVJGQ1RSMCAweDAwMDAwMGMxCiAjZGVmaW5lIE1TUl9JQTMyX1BFUkZDVFIxIDB4MDAwMDAwYzIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1TUl9GU0JfRlJFUSAweDAwMDAwMGNkCi0KICNkZWZpbmUgTVNSX01UUlJjYXAgMHgwMDAwMDBmZQogI2RlZmluZSBNU1JfSUEzMl9CQkxfQ1JfQ1RMIDB4MDAwMDAxMTkKLQogI2RlZmluZSBNU1JfSUEzMl9TWVNFTlRFUl9DUyAweDAwMDAwMTc0CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNU1JfSUEzMl9TWVNFTlRFUl9FU1AgMHgwMDAwMDE3NQogI2RlZmluZSBNU1JfSUEzMl9TWVNFTlRFUl9FSVAgMHgwMDAwMDE3NgotCiAjZGVmaW5lIE1TUl9JQTMyX01DR19DQVAgMHgwMDAwMDE3OQogI2RlZmluZSBNU1JfSUEzMl9NQ0dfU1RBVFVTIDB4MDAwMDAxN2EKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1TUl9JQTMyX01DR19DVEwgMHgwMDAwMDE3YgotCiAjZGVmaW5lIE1TUl9JQTMyX1BFQlNfRU5BQkxFIDB4MDAwMDAzZjEKICNkZWZpbmUgTVNSX0lBMzJfRFNfQVJFQSAweDAwMDAwNjAwCiAjZGVmaW5lIE1TUl9JQTMyX1BFUkZfQ0FQQUJJTElUSUVTIDB4MDAwMDAzNDUKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTVNSX01UUlJmaXg2NEtfMDAwMDAgMHgwMDAwMDI1MAogI2RlZmluZSBNU1JfTVRSUmZpeDE2S184MDAwMCAweDAwMDAwMjU4CiAjZGVmaW5lIE1TUl9NVFJSZml4MTZLX0EwMDAwIDB4MDAwMDAyNTkKICNkZWZpbmUgTVNSX01UUlJmaXg0S19DMDAwMCAweDAwMDAwMjY4CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNU1JfTVRSUmZpeDRLX0M4MDAwIDB4MDAwMDAyNjkKICNkZWZpbmUgTVNSX01UUlJmaXg0S19EMDAwMCAweDAwMDAwMjZhCiAjZGVmaW5lIE1TUl9NVFJSZml4NEtfRDgwMDAgMHgwMDAwMDI2YgogI2RlZmluZSBNU1JfTVRSUmZpeDRLX0UwMDAwIDB4MDAwMDAyNmMKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1TUl9NVFJSZml4NEtfRTgwMDAgMHgwMDAwMDI2ZAogI2RlZmluZSBNU1JfTVRSUmZpeDRLX0YwMDAwIDB4MDAwMDAyNmUKICNkZWZpbmUgTVNSX01UUlJmaXg0S19GODAwMCAweDAwMDAwMjZmCiAjZGVmaW5lIE1TUl9NVFJSZGVmVHlwZSAweDAwMDAwMmZmCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1TUl9JQTMyX0RFQlVHQ1RMTVNSIDB4MDAwMDAxZDkKICNkZWZpbmUgTVNSX0lBMzJfTEFTVEJSQU5DSEZST01JUCAweDAwMDAwMWRiCiAjZGVmaW5lIE1TUl9JQTMyX0xBU1RCUkFOQ0hUT0lQIDB4MDAwMDAxZGMKICNkZWZpbmUgTVNSX0lBMzJfTEFTVElOVEZST01JUCAweDAwMDAwMWRkCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNU1JfSUEzMl9MQVNUSU5UVE9JUCAweDAwMDAwMWRlCi0KICNkZWZpbmUgTVNSX0lBMzJfTUMwX0NUTCAweDAwMDAwNDAwCiAjZGVmaW5lIE1TUl9JQTMyX01DMF9TVEFUVVMgMHgwMDAwMDQwMQogI2RlZmluZSBNU1JfSUEzMl9NQzBfQUREUiAweDAwMDAwNDAyCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNU1JfSUEzMl9NQzBfTUlTQyAweDAwMDAwNDAzCi0KICNkZWZpbmUgTVNSX1A2X1BFUkZDVFIwIDB4MDAwMDAwYzEKICNkZWZpbmUgTVNSX1A2X1BFUkZDVFIxIDB4MDAwMDAwYzIKICNkZWZpbmUgTVNSX1A2X0VWTlRTRUwwIDB4MDAwMDAxODYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1TUl9QNl9FVk5UU0VMMSAweDAwMDAwMTg3Ci0KICNkZWZpbmUgTVNSX0FNRDY0X0lCU0ZFVENIQ1RMIDB4YzAwMTEwMzAKICNkZWZpbmUgTVNSX0FNRDY0X0lCU0ZFVENITElOQUQgMHhjMDAxMTAzMQogI2RlZmluZSBNU1JfQU1ENjRfSUJTRkVUQ0hQSFlTQUQgMHhjMDAxMTAzMgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTVNSX0FNRDY0X0lCU09QQ1RMIDB4YzAwMTEwMzMKICNkZWZpbmUgTVNSX0FNRDY0X0lCU09QUklQIDB4YzAwMTEwMzQKICNkZWZpbmUgTVNSX0FNRDY0X0lCU09QREFUQSAweGMwMDExMDM1CiAjZGVmaW5lIE1TUl9BTUQ2NF9JQlNPUERBVEEyIDB4YzAwMTEwMzYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1TUl9BTUQ2NF9JQlNPUERBVEEzIDB4YzAwMTEwMzcKICNkZWZpbmUgTVNSX0FNRDY0X0lCU0RDTElOQUQgMHhjMDAxMTAzOAogI2RlZmluZSBNU1JfQU1ENjRfSUJTRENQSFlTQUQgMHhjMDAxMTAzOQogI2RlZmluZSBNU1JfQU1ENjRfSUJTQ1RMIDB4YzAwMTEwM2EKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTVNSX0s4X1RPUF9NRU0xIDB4YzAwMTAwMWEKICNkZWZpbmUgTVNSX0s4X1RPUF9NRU0yIDB4YzAwMTAwMWQKICNkZWZpbmUgTVNSX0s4X1NZU0NGRyAweGMwMDEwMDEwCiAjZGVmaW5lIE1TUl9LOF9IV0NSIDB4YzAwMTAwMTUKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1TUl9LOF9FTkFCTEVfQzFFIDB4YzAwMTAwNTUKLSNkZWZpbmUgSzhfTVRSUkZJWFJBTkdFX0RSQU1fRU5BQkxFIDB4MDAwNDAwMDAgIAotI2RlZmluZSBLOF9NVFJSRklYUkFOR0VfRFJBTV9NT0RJRlkgMHgwMDA4MDAwMCAgCi0jZGVmaW5lIEs4X01UUlJfUkRNRU1fV1JNRU1fTUFTSyAweDE4MTgxODE4ICAKLQorI2RlZmluZSBLOF9NVFJSRklYUkFOR0VfRFJBTV9FTkFCTEUgMHgwMDA0MDAwMAorI2RlZmluZSBLOF9NVFJSRklYUkFOR0VfRFJBTV9NT0RJRlkgMHgwMDA4MDAwMAorI2RlZmluZSBLOF9NVFJSX1JETUVNX1dSTUVNX01BU0sgMHgxODE4MTgxOAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTVNSX0s3X0VWTlRTRUwwIDB4YzAwMTAwMDAKICNkZWZpbmUgTVNSX0s3X1BFUkZDVFIwIDB4YzAwMTAwMDQKICNkZWZpbmUgTVNSX0s3X0VWTlRTRUwxIDB4YzAwMTAwMDEKICNkZWZpbmUgTVNSX0s3X1BFUkZDVFIxIDB4YzAwMTAwMDUKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1TUl9LN19FVk5UU0VMMiAweGMwMDEwMDAyCiAjZGVmaW5lIE1TUl9LN19QRVJGQ1RSMiAweGMwMDEwMDA2CiAjZGVmaW5lIE1TUl9LN19FVk5UU0VMMyAweGMwMDEwMDAzCiAjZGVmaW5lIE1TUl9LN19QRVJGQ1RSMyAweGMwMDEwMDA3CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNU1JfSzdfQ0xLX0NUTCAweGMwMDEwMDFiCiAjZGVmaW5lIE1TUl9LN19IV0NSIDB4YzAwMTAwMTUKICNkZWZpbmUgTVNSX0s3X0ZJRF9WSURfQ1RMIDB4YzAwMTAwNDEKICNkZWZpbmUgTVNSX0s3X0ZJRF9WSURfU1RBVFVTIDB4YzAwMTAwNDIKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTVNSX0s2X0VGRVIgMHhjMDAwMDA4MAogI2RlZmluZSBNU1JfSzZfU1RBUiAweGMwMDAwMDgxCiAjZGVmaW5lIE1TUl9LNl9XSENSIDB4YzAwMDAwODIKICNkZWZpbmUgTVNSX0s2X1VXQ0NSIDB4YzAwMDAwODUKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1TUl9LNl9FUE1SIDB4YzAwMDAwODYKICNkZWZpbmUgTVNSX0s2X1BTT1IgMHhjMDAwMDA4NwogI2RlZmluZSBNU1JfSzZfUEZJUiAweGMwMDAwMDg4Ci0KICNkZWZpbmUgTVNSX0lEVF9GQ1IxIDB4MDAwMDAxMDcKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1TUl9JRFRfRkNSMiAweDAwMDAwMTA4CiAjZGVmaW5lIE1TUl9JRFRfRkNSMyAweDAwMDAwMTA5CiAjZGVmaW5lIE1TUl9JRFRfRkNSNCAweDAwMDAwMTBhCi0KICNkZWZpbmUgTVNSX0lEVF9NQ1IwIDB4MDAwMDAxMTAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1TUl9JRFRfTUNSMSAweDAwMDAwMTExCiAjZGVmaW5lIE1TUl9JRFRfTUNSMiAweDAwMDAwMTEyCiAjZGVmaW5lIE1TUl9JRFRfTUNSMyAweDAwMDAwMTEzCiAjZGVmaW5lIE1TUl9JRFRfTUNSNCAweDAwMDAwMTE0CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNU1JfSURUX01DUjUgMHgwMDAwMDExNQogI2RlZmluZSBNU1JfSURUX01DUjYgMHgwMDAwMDExNgogI2RlZmluZSBNU1JfSURUX01DUjcgMHgwMDAwMDExNwogI2RlZmluZSBNU1JfSURUX01DUl9DVFJMIDB4MDAwMDAxMjAKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTVNSX1ZJQV9GQ1IgMHgwMDAwMTEwNwogI2RlZmluZSBNU1JfVklBX0xPTkdIQVVMIDB4MDAwMDExMGEKICNkZWZpbmUgTVNSX1ZJQV9STkcgMHgwMDAwMTEwYgogI2RlZmluZSBNU1JfVklBX0JDUjIgMHgwMDAwMTE0NwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNU1JfVE1UQV9MT05HUlVOX0NUUkwgMHg4MDg2ODAxMAogI2RlZmluZSBNU1JfVE1UQV9MT05HUlVOX0ZMQUdTIDB4ODA4NjgwMTEKICNkZWZpbmUgTVNSX1RNVEFfTFJUSV9SRUFET1VUIDB4ODA4NjgwMTgKICNkZWZpbmUgTVNSX1RNVEFfTFJUSV9WT0xUX01IWiAweDgwODY4MDFhCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1TUl9JQTMyX1A1X01DX0FERFIgMHgwMDAwMDAwMAogI2RlZmluZSBNU1JfSUEzMl9QNV9NQ19UWVBFIDB4MDAwMDAwMDEKICNkZWZpbmUgTVNSX0lBMzJfVFNDIDB4MDAwMDAwMTAKICNkZWZpbmUgTVNSX0lBMzJfUExBVEZPUk1fSUQgMHgwMDAwMDAxNworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTVNSX0lBMzJfRUJMX0NSX1BPV0VST04gMHgwMDAwMDAyYQotCiAjZGVmaW5lIE1TUl9JQTMyX0FQSUNCQVNFIDB4MDAwMDAwMWIKICNkZWZpbmUgTVNSX0lBMzJfQVBJQ0JBU0VfQlNQICgxPDw4KQogI2RlZmluZSBNU1JfSUEzMl9BUElDQkFTRV9FTkFCTEUgKDE8PDExKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTVNSX0lBMzJfQVBJQ0JBU0VfQkFTRSAoMHhmZmZmZjw8MTIpCi0KICNkZWZpbmUgTVNSX0lBMzJfVUNPREVfV1JJVEUgMHgwMDAwMDA3OQogI2RlZmluZSBNU1JfSUEzMl9VQ09ERV9SRVYgMHgwMDAwMDA4YgotCiAjZGVmaW5lIE1TUl9JQTMyX1BFUkZfU1RBVFVTIDB4MDAwMDAxOTgKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1TUl9JQTMyX1BFUkZfQ1RMIDB4MDAwMDAxOTkKLQogI2RlZmluZSBNU1JfSUEzMl9NUEVSRiAweDAwMDAwMGU3CiAjZGVmaW5lIE1TUl9JQTMyX0FQRVJGIDB4MDAwMDAwZTgKLQogI2RlZmluZSBNU1JfSUEzMl9USEVSTV9DT05UUk9MIDB4MDAwMDAxOWEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1TUl9JQTMyX1RIRVJNX0lOVEVSUlVQVCAweDAwMDAwMTliCiAjZGVmaW5lIE1TUl9JQTMyX1RIRVJNX1NUQVRVUyAweDAwMDAwMTljCiAjZGVmaW5lIE1TUl9JQTMyX01JU0NfRU5BQkxFIDB4MDAwMDAxYTAKLQogI2RlZmluZSBNU1JfUDZfRVZOVFNFTDAgMHgwMDAwMDE4NgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTVNSX1A2X0VWTlRTRUwxIDB4MDAwMDAxODcKLQogI2RlZmluZSBNU1JfSUEzMl9NQ0dfRUFYIDB4MDAwMDAxODAKICNkZWZpbmUgTVNSX0lBMzJfTUNHX0VCWCAweDAwMDAwMTgxCiAjZGVmaW5lIE1TUl9JQTMyX01DR19FQ1ggMHgwMDAwMDE4MgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTVNSX0lBMzJfTUNHX0VEWCAweDAwMDAwMTgzCiAjZGVmaW5lIE1TUl9JQTMyX01DR19FU0kgMHgwMDAwMDE4NAogI2RlZmluZSBNU1JfSUEzMl9NQ0dfRURJIDB4MDAwMDAxODUKICNkZWZpbmUgTVNSX0lBMzJfTUNHX0VCUCAweDAwMDAwMTg2CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNU1JfSUEzMl9NQ0dfRVNQIDB4MDAwMDAxODcKICNkZWZpbmUgTVNSX0lBMzJfTUNHX0VGTEFHUyAweDAwMDAwMTg4CiAjZGVmaW5lIE1TUl9JQTMyX01DR19FSVAgMHgwMDAwMDE4OQogI2RlZmluZSBNU1JfSUEzMl9NQ0dfUkVTRVJWRUQgMHgwMDAwMDE4YQotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNU1JfUDRfQlBVX1BFUkZDVFIwIDB4MDAwMDAzMDAKICNkZWZpbmUgTVNSX1A0X0JQVV9QRVJGQ1RSMSAweDAwMDAwMzAxCiAjZGVmaW5lIE1TUl9QNF9CUFVfUEVSRkNUUjIgMHgwMDAwMDMwMgogI2RlZmluZSBNU1JfUDRfQlBVX1BFUkZDVFIzIDB4MDAwMDAzMDMKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1TUl9QNF9NU19QRVJGQ1RSMCAweDAwMDAwMzA0CiAjZGVmaW5lIE1TUl9QNF9NU19QRVJGQ1RSMSAweDAwMDAwMzA1CiAjZGVmaW5lIE1TUl9QNF9NU19QRVJGQ1RSMiAweDAwMDAwMzA2CiAjZGVmaW5lIE1TUl9QNF9NU19QRVJGQ1RSMyAweDAwMDAwMzA3CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNU1JfUDRfRkxBTUVfUEVSRkNUUjAgMHgwMDAwMDMwOAogI2RlZmluZSBNU1JfUDRfRkxBTUVfUEVSRkNUUjEgMHgwMDAwMDMwOQogI2RlZmluZSBNU1JfUDRfRkxBTUVfUEVSRkNUUjIgMHgwMDAwMDMwYQogI2RlZmluZSBNU1JfUDRfRkxBTUVfUEVSRkNUUjMgMHgwMDAwMDMwYgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTVNSX1A0X0lRX1BFUkZDVFIwIDB4MDAwMDAzMGMKICNkZWZpbmUgTVNSX1A0X0lRX1BFUkZDVFIxIDB4MDAwMDAzMGQKICNkZWZpbmUgTVNSX1A0X0lRX1BFUkZDVFIyIDB4MDAwMDAzMGUKICNkZWZpbmUgTVNSX1A0X0lRX1BFUkZDVFIzIDB4MDAwMDAzMGYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1TUl9QNF9JUV9QRVJGQ1RSNCAweDAwMDAwMzEwCiAjZGVmaW5lIE1TUl9QNF9JUV9QRVJGQ1RSNSAweDAwMDAwMzExCiAjZGVmaW5lIE1TUl9QNF9CUFVfQ0NDUjAgMHgwMDAwMDM2MAogI2RlZmluZSBNU1JfUDRfQlBVX0NDQ1IxIDB4MDAwMDAzNjEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1TUl9QNF9CUFVfQ0NDUjIgMHgwMDAwMDM2MgogI2RlZmluZSBNU1JfUDRfQlBVX0NDQ1IzIDB4MDAwMDAzNjMKICNkZWZpbmUgTVNSX1A0X01TX0NDQ1IwIDB4MDAwMDAzNjQKICNkZWZpbmUgTVNSX1A0X01TX0NDQ1IxIDB4MDAwMDAzNjUKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1TUl9QNF9NU19DQ0NSMiAweDAwMDAwMzY2CiAjZGVmaW5lIE1TUl9QNF9NU19DQ0NSMyAweDAwMDAwMzY3CiAjZGVmaW5lIE1TUl9QNF9GTEFNRV9DQ0NSMCAweDAwMDAwMzY4CiAjZGVmaW5lIE1TUl9QNF9GTEFNRV9DQ0NSMSAweDAwMDAwMzY5CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNU1JfUDRfRkxBTUVfQ0NDUjIgMHgwMDAwMDM2YQogI2RlZmluZSBNU1JfUDRfRkxBTUVfQ0NDUjMgMHgwMDAwMDM2YgogI2RlZmluZSBNU1JfUDRfSVFfQ0NDUjAgMHgwMDAwMDM2YwogI2RlZmluZSBNU1JfUDRfSVFfQ0NDUjEgMHgwMDAwMDM2ZAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTVNSX1A0X0lRX0NDQ1IyIDB4MDAwMDAzNmUKICNkZWZpbmUgTVNSX1A0X0lRX0NDQ1IzIDB4MDAwMDAzNmYKICNkZWZpbmUgTVNSX1A0X0lRX0NDQ1I0IDB4MDAwMDAzNzAKICNkZWZpbmUgTVNSX1A0X0lRX0NDQ1I1IDB4MDAwMDAzNzEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1TUl9QNF9BTEZfRVNDUjAgMHgwMDAwMDNjYQogI2RlZmluZSBNU1JfUDRfQUxGX0VTQ1IxIDB4MDAwMDAzY2IKICNkZWZpbmUgTVNSX1A0X0JQVV9FU0NSMCAweDAwMDAwM2IyCiAjZGVmaW5lIE1TUl9QNF9CUFVfRVNDUjEgMHgwMDAwMDNiMworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTVNSX1A0X0JTVV9FU0NSMCAweDAwMDAwM2EwCiAjZGVmaW5lIE1TUl9QNF9CU1VfRVNDUjEgMHgwMDAwMDNhMQogI2RlZmluZSBNU1JfUDRfQ1JVX0VTQ1IwIDB4MDAwMDAzYjgKICNkZWZpbmUgTVNSX1A0X0NSVV9FU0NSMSAweDAwMDAwM2I5CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNU1JfUDRfQ1JVX0VTQ1IyIDB4MDAwMDAzY2MKICNkZWZpbmUgTVNSX1A0X0NSVV9FU0NSMyAweDAwMDAwM2NkCiAjZGVmaW5lIE1TUl9QNF9DUlVfRVNDUjQgMHgwMDAwMDNlMAogI2RlZmluZSBNU1JfUDRfQ1JVX0VTQ1I1IDB4MDAwMDAzZTEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1TUl9QNF9EQUNfRVNDUjAgMHgwMDAwMDNhOAogI2RlZmluZSBNU1JfUDRfREFDX0VTQ1IxIDB4MDAwMDAzYTkKICNkZWZpbmUgTVNSX1A0X0ZJUk1fRVNDUjAgMHgwMDAwMDNhNAogI2RlZmluZSBNU1JfUDRfRklSTV9FU0NSMSAweDAwMDAwM2E1CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNU1JfUDRfRkxBTUVfRVNDUjAgMHgwMDAwMDNhNgogI2RlZmluZSBNU1JfUDRfRkxBTUVfRVNDUjEgMHgwMDAwMDNhNwogI2RlZmluZSBNU1JfUDRfRlNCX0VTQ1IwIDB4MDAwMDAzYTIKICNkZWZpbmUgTVNSX1A0X0ZTQl9FU0NSMSAweDAwMDAwM2EzCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNU1JfUDRfSVFfRVNDUjAgMHgwMDAwMDNiYQogI2RlZmluZSBNU1JfUDRfSVFfRVNDUjEgMHgwMDAwMDNiYgogI2RlZmluZSBNU1JfUDRfSVNfRVNDUjAgMHgwMDAwMDNiNAogI2RlZmluZSBNU1JfUDRfSVNfRVNDUjEgMHgwMDAwMDNiNQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTVNSX1A0X0lUTEJfRVNDUjAgMHgwMDAwMDNiNgogI2RlZmluZSBNU1JfUDRfSVRMQl9FU0NSMSAweDAwMDAwM2I3CiAjZGVmaW5lIE1TUl9QNF9JWF9FU0NSMCAweDAwMDAwM2M4CiAjZGVmaW5lIE1TUl9QNF9JWF9FU0NSMSAweDAwMDAwM2M5CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNU1JfUDRfTU9CX0VTQ1IwIDB4MDAwMDAzYWEKICNkZWZpbmUgTVNSX1A0X01PQl9FU0NSMSAweDAwMDAwM2FiCiAjZGVmaW5lIE1TUl9QNF9NU19FU0NSMCAweDAwMDAwM2MwCiAjZGVmaW5lIE1TUl9QNF9NU19FU0NSMSAweDAwMDAwM2MxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNU1JfUDRfUE1IX0VTQ1IwIDB4MDAwMDAzYWMKICNkZWZpbmUgTVNSX1A0X1BNSF9FU0NSMSAweDAwMDAwM2FkCiAjZGVmaW5lIE1TUl9QNF9SQVRfRVNDUjAgMHgwMDAwMDNiYwogI2RlZmluZSBNU1JfUDRfUkFUX0VTQ1IxIDB4MDAwMDAzYmQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1TUl9QNF9TQUFUX0VTQ1IwIDB4MDAwMDAzYWUKICNkZWZpbmUgTVNSX1A0X1NBQVRfRVNDUjEgMHgwMDAwMDNhZgogI2RlZmluZSBNU1JfUDRfU1NVX0VTQ1IwIDB4MDAwMDAzYmUKLSNkZWZpbmUgTVNSX1A0X1NTVV9FU0NSMSAweDAwMDAwM2JmICAKLQorI2RlZmluZSBNU1JfUDRfU1NVX0VTQ1IxIDB4MDAwMDAzYmYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1TUl9QNF9UQlBVX0VTQ1IwIDB4MDAwMDAzYzIKICNkZWZpbmUgTVNSX1A0X1RCUFVfRVNDUjEgMHgwMDAwMDNjMwogI2RlZmluZSBNU1JfUDRfVENfRVNDUjAgMHgwMDAwMDNjNAogI2RlZmluZSBNU1JfUDRfVENfRVNDUjEgMHgwMDAwMDNjNQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTVNSX1A0X1UyTF9FU0NSMCAweDAwMDAwM2IwCiAjZGVmaW5lIE1TUl9QNF9VMkxfRVNDUjEgMHgwMDAwMDNiMQotCiAjZGVmaW5lIE1TUl9DT1JFX1BFUkZfRklYRURfQ1RSMCAweDAwMDAwMzA5CiAjZGVmaW5lIE1TUl9DT1JFX1BFUkZfRklYRURfQ1RSMSAweDAwMDAwMzBhCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNU1JfQ09SRV9QRVJGX0ZJWEVEX0NUUjIgMHgwMDAwMDMwYgogI2RlZmluZSBNU1JfQ09SRV9QRVJGX0ZJWEVEX0NUUl9DVFJMIDB4MDAwMDAzOGQKICNkZWZpbmUgTVNSX0NPUkVfUEVSRl9HTE9CQUxfU1RBVFVTIDB4MDAwMDAzOGUKICNkZWZpbmUgTVNSX0NPUkVfUEVSRl9HTE9CQUxfQ1RSTCAweDAwMDAwMzhmCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNU1JfQ09SRV9QRVJGX0dMT0JBTF9PVkZfQ1RSTCAweDAwMDAwMzkwCi0KICNkZWZpbmUgTVNSX0dFT0RFX0JVU0NPTlRfQ09ORjAgMHgwMDAwMTkwMAotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9tc3IuaCBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9tc3IuaAppbmRleCBmMWRhOTE3Li4wMGZiODAwIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vbXNyLmgKKysrIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL21zci5oCkBAIC03LDQ4ICs3LDIwIEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfX0FTTV9YODZfTVNSX0hfCiAjZGVmaW5lIF9fQVNNX1g4Nl9NU1JfSF8KLQogI2luY2x1ZGUgPGFzbS9tc3ItaW5kZXguaD4KLQogI2lmbmRlZiBfX0FTU0VNQkxZX18KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNlbmRpZgotCi0jaWZkZWYgX19pMzg2X18KLQotI2Vsc2UKLQotI2lmbmRlZiBfX0FTU0VNQkxZX18KLSNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgotCi0jZGVmaW5lIHJkbXNyKG1zcix2YWwxLHZhbDIpICAgX19hc21fXyBfX3ZvbGF0aWxlX18oInJkbXNyIiAgIDogIj1hIiAodmFsMSksICI9ZCIgKHZhbDIpICAgOiAiYyIgKG1zcikpCi0KLSNkZWZpbmUgcmRtc3JsKG1zcix2YWwpIGRvIHsgdW5zaWduZWQgbG9uZyBhX18sYl9fOyAgIF9fYXNtX18gX192b2xhdGlsZV9fKCJyZG1zciIgICA6ICI9YSIgKGFfXyksICI9ZCIgKGJfXykgICA6ICJjIiAobXNyKSk7ICAgdmFsID0gYV9fIHwgKGJfXzw8MzIpOyAgfSB3aGlsZSgwKQotCi0jZGVmaW5lIHdybXNyKG1zcix2YWwxLHZhbDIpICAgX19hc21fXyBfX3ZvbGF0aWxlX18oIndybXNyIiAgIDogICAgIDogImMiIChtc3IpLCAiYSIgKHZhbDEpLCAiZCIgKHZhbDIpKQotCi0jZGVmaW5lIHdybXNybChtc3IsdmFsKSB3cm1zcihtc3IsKF9fdTMyKSgoX191NjQpKHZhbCkpLCgoX191NjQpKHZhbCkpPj4zMikKLQotI2RlZmluZSByZHRzYyhsb3csaGlnaCkgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygicmR0c2MiIDogIj1hIiAobG93KSwgIj1kIiAoaGlnaCkpCi0KLSNkZWZpbmUgcmR0c2NsKGxvdykgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoInJkdHNjIiA6ICI9YSIgKGxvdykgOiA6ICJlZHgiKQotCi0jZGVmaW5lIHJkdHNjcChsb3csaGlnaCxhdXgpICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCIuYnl0ZSAweDBmLDB4MDEsMHhmOSIgOiAiPWEiIChsb3cpLCAiPWQiIChoaWdoKSwgIj1jIiAoYXV4KSkKLQotI2RlZmluZSByZHRzY2xsKHZhbCkgZG8geyAgIHVuc2lnbmVkIGludCBfX2EsX19kOyAgIF9fYXNtX18gX192b2xhdGlsZV9fKCJyZHRzYyIgOiAiPWEiIChfX2EpLCAiPWQiIChfX2QpKTsgICAodmFsKSA9ICgodW5zaWduZWQgbG9uZylfX2EpIHwgKCgodW5zaWduZWQgbG9uZylfX2QpPDwzMik7ICB9IHdoaWxlKDApCi0KLSNkZWZpbmUgcmR0c2NwbGwodmFsLCBhdXgpIGRvIHsgICB1bnNpZ25lZCBsb25nIF9fYSwgX19kOyAgIF9fYXNtX18gX192b2xhdGlsZV9fICgiLmJ5dGUgMHgwZiwweDAxLDB4ZjkiIDogIj1hIiAoX19hKSwgIj1kIiAoX19kKSwgIj1jIiAoYXV4KSk7ICAgKHZhbCkgPSAoX19kIDw8IDMyKSB8IF9fYTsgIH0gd2hpbGUgKDApCi0KLSNkZWZpbmUgd3JpdGVfdHNjKHZhbDEsdmFsMikgd3Jtc3IoMHgxMCwgdmFsMSwgdmFsMikKLQotI2RlZmluZSB3cml0ZV9yZHRzY3BfYXV4KHZhbCkgd3Jtc3IoMHhjMDAwMDEwMywgdmFsLCAwKQotCi0jZGVmaW5lIHJkcG1jKGNvdW50ZXIsbG93LGhpZ2gpICAgX19hc21fXyBfX3ZvbGF0aWxlX18oInJkcG1jIiAgIDogIj1hIiAobG93KSwgIj1kIiAoaGlnaCkgICA6ICJjIiAoY291bnRlcikpCi0KLSNlbmRpZgotI2VuZGlmCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9wYWdlLmggYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vcGFnZS5oCmluZGV4IGU2ZGNmMjcuLjNiNDUzODMgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9wYWdlLmgKKysrIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3BhZ2UuaApAQCAtNywxMCArNywxMyBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSNpZmRlZiBfX2kzODZfXwogI2luY2x1ZGUgInBhZ2VfMzIuaCIKLSNlbHNlCi0jaW5jbHVkZSAicGFnZV82NC5oIgotI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vcGFnZV8zMi5oIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3BhZ2VfMzIuaAppbmRleCA3MThjZjk1Li41ZTg2NGFkIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vcGFnZV8zMi5oCisrKyBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9wYWdlXzMyLmgKQEAgLTcsMTYgKzcsMjIgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9JMzg2X1BBR0VfSAogI2RlZmluZSBfSTM4Nl9QQUdFX0gKLQogI2RlZmluZSBQQUdFX1NISUZUIDEyCiAjZGVmaW5lIFBBR0VfU0laRSAoMVVMIDw8IFBBR0VfU0hJRlQpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQUdFX01BU0sgKH4oUEFHRV9TSVpFLTEpKQotCiAjZGVmaW5lIExBUkdFX1BBR0VfTUFTSyAofihMQVJHRV9QQUdFX1NJWkUtMSkpCiAjZGVmaW5lIExBUkdFX1BBR0VfU0laRSAoMVVMIDw8IFBNRF9TSElGVCkKLQogI2VuZGlmCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3BhcmFtLmggYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vcGFyYW0uaAppbmRleCAzZmFmZDU1Li5jZDc3MTIzIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vcGFyYW0uaAorKysgYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vcGFyYW0uaApAQCAtNywyMCArNywyNCBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX0FTTV9YODZfUEFSQU1fSAogI2RlZmluZSBfQVNNX1g4Nl9QQVJBTV9ICi0KICNpZm5kZWYgSFoKICNkZWZpbmUgSFogMTAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2VuZGlmCi0KICNkZWZpbmUgRVhFQ19QQUdFU0laRSA0MDk2Ci0KICNpZm5kZWYgTk9HUk9VUAogI2RlZmluZSBOT0dST1VQICgtMSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZW5kaWYKLQotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9wYXJhdmlydC5oIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3BhcmF2aXJ0LmgKaW5kZXggYWIwZDA4ZS4uMjU3ZTk2OCAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3BhcmF2aXJ0LmgKKysrIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3BhcmF2aXJ0LmgKQEAgLTcsOSArNywxNSBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX19BU01fUEFSQVZJUlRfSAogI2RlZmluZSBfX0FTTV9QQVJBVklSVF9ICi0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3BkYS5oIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3BkYS5oCmluZGV4IDY3MTEyMjQuLmExMDVmMjggMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9wZGEuaAorKysgYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vcGRhLmgKQEAgLTcsNTkgKzcsNjUgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIFg4Nl82NF9QREFfSAogI2RlZmluZSBYODZfNjRfUERBX0gKLQogI2lmbmRlZiBfX0FTU0VNQkxZX18KICNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9jYWNoZS5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+Ci0KIHN0cnVjdCB4ODY2NF9wZGEgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnBjdXJyZW50OwogIHVuc2lnbmVkIGxvbmcgZGF0YV9vZmZzZXQ7CiAgdW5zaWduZWQgbG9uZyBrZXJuZWxzdGFjazsKICB1bnNpZ25lZCBsb25nIG9sZHJzcDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgaW50IGlycWNvdW50OwogIGludCBjcHVudW1iZXI7CiAgY2hhciAqaXJxc3RhY2twdHI7CiAgaW50IG5vZGVudW1iZXI7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGludCBfX3NvZnRpcnFfcGVuZGluZzsKICB1bnNpZ25lZCBpbnQgX19ubWlfY291bnQ7CiAgc2hvcnQgbW11X3N0YXRlOwogIHNob3J0IGlzaWRsZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IG1tX3N0cnVjdCAqYWN0aXZlX21tOwogIHVuc2lnbmVkIGFwaWNfdGltZXJfaXJxczsKICB1bnNpZ25lZCBpcnEwX2lycXM7CiAgdW5zaWduZWQgaXJxX3Jlc2NoZWRfY291bnQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGlycV9jYWxsX2NvdW50OwogIHVuc2lnbmVkIGlycV90bGJfY291bnQ7CiAgdW5zaWduZWQgaXJxX3RoZXJtYWxfY291bnQ7CiAgdW5zaWduZWQgaXJxX3RocmVzaG9sZF9jb3VudDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgaXJxX3NwdXJpb3VzX2NvdW50OwogfSBfX19fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wOwotCiAjZGVmaW5lIGNwdV9wZGEoaSkgKF9jcHVfcGRhW2ldKQotCiAjZGVmaW5lIHBkYV9vZmZzZXQoZmllbGQpIG9mZnNldG9mKHN0cnVjdCB4ODY2NF9wZGEsIGZpZWxkKQotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBwZGFfdG9fb3Aob3AsZmllbGQsdmFsKSBkbyB7ICAgdHlwZWRlZiB0eXBlb2YoX3Byb3h5X3BkYS5maWVsZCkgVF9fOyAgIGlmICgwKSB7IFRfXyB0bXBfXzsgdG1wX18gPSAodmFsKTsgfSAgICAgc3dpdGNoIChzaXplb2YoX3Byb3h5X3BkYS5maWVsZCkpIHsgICBjYXNlIDI6ICAgYXNtKG9wICJ3ICUxLCUlZ3M6JWMyIiA6ICAgIittIiAoX3Byb3h5X3BkYS5maWVsZCkgOiAgICJyaSIgKChUX18pdmFsKSwgICAiaSIocGRhX29mZnNldChmaWVsZCkpKTsgICBicmVhazsgICBjYXNlIDQ6ICAgYXNtKG9wICJsICUxLCUlZ3M6JWMyIiA6ICAgIittIiAoX3Byb3h5X3BkYS5maWVsZCkgOiAgICJyaSIgKChUX18pdmFsKSwgICAiaSIgKHBkYV9vZmZzZXQoZmllbGQpKSk7ICAgYnJlYWs7ICAgY2FzZSA4OiAgIGFzbShvcCAicSAlMSwlJWdzOiVjMiI6ICAgIittIiAoX3Byb3h5X3BkYS5maWVsZCkgOiAgICJyaSIgKChUX18pdmFsKSwgICAiaSIocGRhX29mZnNldChmaWVsZCkpKTsgICBicmVhazsgICBkZWZhdWx0OiAgIF9fYmFkX3BkYV9maWVsZCgpOyAgIH0gICB9IHdoaWxlICgwKQotCiAjZGVmaW5lIHBkYV9mcm9tX29wKG9wLGZpZWxkKSAoeyAgIHR5cGVvZihfcHJveHlfcGRhLmZpZWxkKSByZXRfXzsgICBzd2l0Y2ggKHNpemVvZihfcHJveHlfcGRhLmZpZWxkKSkgeyAgIGNhc2UgMjogICBhc20ob3AgIncgJSVnczolYzEsJTAiIDogICAiPXIiIChyZXRfXykgOiAgICJpIiAocGRhX29mZnNldChmaWVsZCkpLCAgICJtIiAoX3Byb3h5X3BkYS5maWVsZCkpOyAgIGJyZWFrOyAgIGNhc2UgNDogICBhc20ob3AgImwgJSVnczolYzEsJTAiOiAgICI9ciIgKHJldF9fKTogICAiaSIgKHBkYV9vZmZzZXQoZmllbGQpKSwgICAibSIgKF9wcm94eV9wZGEuZmllbGQpKTsgICBicmVhazsgICBjYXNlIDg6ICAgYXNtKG9wICJxICUlZ3M6JWMxLCUwIjogICAiPXIiIChyZXRfXykgOiAgICJpIiAocGRhX29mZnNldChmaWVsZCkpLCAgICJtIiAoX3Byb3h5X3BkYS5maWVsZCkpOyAgIGJyZWFrOyAgIGRlZmF1bHQ6ICAgX19iYWRfcGRhX2ZpZWxkKCk7ICAgfSAgIHJldF9fOyB9KQotCiAjZGVmaW5lIHJlYWRfcGRhKGZpZWxkKSBwZGFfZnJvbV9vcCgibW92IixmaWVsZCkKICNkZWZpbmUgd3JpdGVfcGRhKGZpZWxkLHZhbCkgcGRhX3RvX29wKCJtb3YiLGZpZWxkLHZhbCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIGFkZF9wZGEoZmllbGQsdmFsKSBwZGFfdG9fb3AoImFkZCIsZmllbGQsdmFsKQogI2RlZmluZSBzdWJfcGRhKGZpZWxkLHZhbCkgcGRhX3RvX29wKCJzdWIiLGZpZWxkLHZhbCkKICNkZWZpbmUgb3JfcGRhKGZpZWxkLHZhbCkgcGRhX3RvX29wKCJvciIsZmllbGQsdmFsKQotCiAjZGVmaW5lIHRlc3RfYW5kX2NsZWFyX2JpdF9wZGEoYml0LGZpZWxkKSAoeyAgIGludCBvbGRfXzsgICBhc20gdm9sYXRpbGUoImJ0ciAlMiwlJWdzOiVjM1xuXHRzYmJsICUwLCUwIiAgIDogIj1yIiAob2xkX18pLCAiK20iIChfcHJveHlfcGRhLmZpZWxkKSAgIDogImRJciIgKGJpdCksICJpIiAocGRhX29mZnNldChmaWVsZCkpIDogIm1lbW9yeSIpOyAgIG9sZF9fOyAgfSkKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlbmRpZgotCiAjZGVmaW5lIFBEQV9TVEFDS09GRlNFVCAoNSo4KQotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9wZXJjcHUuaCBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9wZXJjcHUuaAppbmRleCA3NzQwZTY3Li42MDdiOTJlIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vcGVyY3B1LmgKKysrIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3BlcmNwdS5oCkBAIC03LDYgKzcsMTMgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0jaW5jbHVkZSAicGVyY3B1XzY0LmgiCisjaW5jbHVkZSAicGVyY3B1XzMyLmgiCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vcGVyY3B1XzMyLmggYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vcGVyY3B1XzMyLmgKaW5kZXggMjExMzVkNi4uODZiZjNhYSAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3BlcmNwdV8zMi5oCisrKyBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9wZXJjcHVfMzIuaApAQCAtNywzMCArNywzMyBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX19BUkNIX0kzODZfUEVSQ1BVX18KICNkZWZpbmUgX19BUkNIX0kzODZfUEVSQ1BVX18KLQogI2lmZGVmIF9fQVNTRU1CTFlfXwotCiAjZGVmaW5lIFBFUl9DUFUodmFyLCByZWcpICAgbW92bCAkcGVyX2NwdV9fIyN2YXIsIHJlZworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUEVSX0NQVV9WQVIodmFyKSBwZXJfY3B1X18jI3ZhcgotCiAjZWxzZQotCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvcGVyY3B1Lmg+CiAjZGVmaW5lIF9fcGVyY3B1X3NlZyAiIgotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBwZXJjcHVfdG9fb3Aob3AsdmFyLHZhbCkgICBkbyB7ICAgdHlwZWRlZiB0eXBlb2YodmFyKSBUX187ICAgaWYgKDApIHsgVF9fIHRtcF9fOyB0bXBfXyA9ICh2YWwpOyB9ICAgc3dpdGNoIChzaXplb2YodmFyKSkgeyAgIGNhc2UgMTogICBhc20ob3AgImIgJTEsIl9fcGVyY3B1X3NlZyIlMCIgICA6ICIrbSIgKHZhcikgICA6InJpIiAoKFRfXyl2YWwpKTsgICBicmVhazsgICBjYXNlIDI6ICAgYXNtKG9wICJ3ICUxLCJfX3BlcmNwdV9zZWciJTAiICAgOiAiK20iICh2YXIpICAgOiJyaSIgKChUX18pdmFsKSk7ICAgYnJlYWs7ICAgY2FzZSA0OiAgIGFzbShvcCAibCAlMSwiX19wZXJjcHVfc2VnIiUwIiAgIDogIittIiAodmFyKSAgIDoicmkiICgoVF9fKXZhbCkpOyAgIGJyZWFrOyAgIGRlZmF1bHQ6IF9fYmFkX3BlcmNwdV9zaXplKCk7ICAgfSAgIH0gd2hpbGUgKDApCi0KICNkZWZpbmUgcGVyY3B1X2Zyb21fb3Aob3AsdmFyKSAgICh7ICAgdHlwZW9mKHZhcikgcmV0X187ICAgc3dpdGNoIChzaXplb2YodmFyKSkgeyAgIGNhc2UgMTogICBhc20ob3AgImIgIl9fcGVyY3B1X3NlZyIlMSwlMCIgICA6ICI9ciIgKHJldF9fKSAgIDogIm0iICh2YXIpKTsgICBicmVhazsgICBjYXNlIDI6ICAgYXNtKG9wICJ3ICJfX3BlcmNwdV9zZWciJTEsJTAiICAgOiAiPXIiIChyZXRfXykgICA6ICJtIiAodmFyKSk7ICAgYnJlYWs7ICAgY2FzZSA0OiAgIGFzbShvcCAibCAiX19wZXJjcHVfc2VnIiUxLCUwIiAgIDogIj1yIiAocmV0X18pICAgOiAibSIgKHZhcikpOyAgIGJyZWFrOyAgIGRlZmF1bHQ6IF9fYmFkX3BlcmNwdV9zaXplKCk7ICAgfSAgIHJldF9fOyB9KQotCiAjZGVmaW5lIHg4Nl9yZWFkX3BlcmNwdSh2YXIpIHBlcmNwdV9mcm9tX29wKCJtb3YiLCBwZXJfY3B1X18jI3ZhcikKICNkZWZpbmUgeDg2X3dyaXRlX3BlcmNwdSh2YXIsdmFsKSBwZXJjcHVfdG9fb3AoIm1vdiIsIHBlcl9jcHVfXyMjdmFyLCB2YWwpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSB4ODZfYWRkX3BlcmNwdSh2YXIsdmFsKSBwZXJjcHVfdG9fb3AoImFkZCIsIHBlcl9jcHVfXyMjdmFyLCB2YWwpCiAjZGVmaW5lIHg4Nl9zdWJfcGVyY3B1KHZhcix2YWwpIHBlcmNwdV90b19vcCgic3ViIiwgcGVyX2NwdV9fIyN2YXIsIHZhbCkKICNkZWZpbmUgeDg2X29yX3BlcmNwdSh2YXIsdmFsKSBwZXJjcHVfdG9fb3AoIm9yIiwgcGVyX2NwdV9fIyN2YXIsIHZhbCkKICNlbmRpZgotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vcGdhbGxvYy5oIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3BnYWxsb2MuaAppbmRleCBkNWEwMzJiLi45MTc1MzY3IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vcGdhbGxvYy5oCisrKyBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9wZ2FsbG9jLmgKQEAgLTcsNiArNywxMyBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSNpbmNsdWRlICJwZ2FsbG9jXzY0LmgiCisjaW5jbHVkZSAicGdhbGxvY18zMi5oIgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3BnYWxsb2NfMzIuaCBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9wZ2FsbG9jXzMyLmgKaW5kZXggYmMwZjg4NC4uMjQ5MDQ3MyAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3BnYWxsb2NfMzIuaAorKysgYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vcGdhbGxvY18zMi5oCkBAIC03LDI0ICs3LDI5IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfSTM4Nl9QR0FMTE9DX0gKICNkZWZpbmUgX0kzODZfUEdBTExPQ19ICi0KICNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+Ci0jaW5jbHVkZSA8bGludXgvbW0uaD4gIAotCisjaW5jbHVkZSA8bGludXgvbW0uaD4KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIHBhcmF2aXJ0X2FsbG9jX3B0KG1tLCBwZm4pIGRvIHsgfSB3aGlsZSAoMCkKICNkZWZpbmUgcGFyYXZpcnRfYWxsb2NfcGQocGZuKSBkbyB7IH0gd2hpbGUgKDApCiAjZGVmaW5lIHBhcmF2aXJ0X2FsbG9jX3BkKHBmbikgZG8geyB9IHdoaWxlICgwKQogI2RlZmluZSBwYXJhdmlydF9hbGxvY19wZF9jbG9uZShwZm4sIGNsb25lcGZuLCBzdGFydCwgY291bnQpIGRvIHsgfSB3aGlsZSAoMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIHBhcmF2aXJ0X3JlbGVhc2VfcHQocGZuKSBkbyB7IH0gd2hpbGUgKDApCiAjZGVmaW5lIHBhcmF2aXJ0X3JlbGVhc2VfcGQocGZuKSBkbyB7IH0gd2hpbGUgKDApCi0KICNkZWZpbmUgcG1kX3BvcHVsYXRlX2tlcm5lbChtbSwgcG1kLCBwdGUpICBkbyB7ICAgcGFyYXZpcnRfYWxsb2NfcHQobW0sIF9fcGEocHRlKSA+PiBQQUdFX1NISUZUKTsgICBzZXRfcG1kKHBtZCwgX19wbWQoX1BBR0VfVEFCTEUgKyBfX3BhKHB0ZSkpKTsgIH0gd2hpbGUgKDApCi0KICNkZWZpbmUgcG1kX3BvcHVsYXRlKG1tLCBwbWQsIHB0ZSkgIGRvIHsgICBwYXJhdmlydF9hbGxvY19wdChtbSwgcGFnZV90b19wZm4ocHRlKSk7ICAgc2V0X3BtZChwbWQsIF9fcG1kKF9QQUdFX1RBQkxFICsgICAoKHVuc2lnbmVkIGxvbmcgbG9uZylwYWdlX3RvX3BmbihwdGUpIDw8ICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgUEFHRV9TSElGVCkpKTsgIH0gd2hpbGUgKDApCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fcHRlX2ZyZWVfdGxiKHRsYixwdGUpICBkbyB7ICAgcGFyYXZpcnRfcmVsZWFzZV9wdChwYWdlX3RvX3BmbihwdGUpKTsgICB0bGJfcmVtb3ZlX3BhZ2UoKHRsYiksKHB0ZSkpOyAgfSB3aGlsZSAoMCkKICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3BndGFibGUtMmxldmVsLWRlZnMuaCBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9wZ3RhYmxlLTJsZXZlbC1kZWZzLmgKaW5kZXggOWVkYzZjNS4uOWE2MGRiNSAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3BndGFibGUtMmxldmVsLWRlZnMuaAorKysgYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vcGd0YWJsZS0ybGV2ZWwtZGVmcy5oCkBAIC03LDE2ICs3LDIwIEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfSTM4Nl9QR1RBQkxFXzJMRVZFTF9ERUZTX0gKICNkZWZpbmUgX0kzODZfUEdUQUJMRV8yTEVWRUxfREVGU19ICi0KICNkZWZpbmUgU0hBUkVEX0tFUk5FTF9QTUQgMAotCiAjZGVmaW5lIFBHRElSX1NISUZUIDIyCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQVFJTX1BFUl9QR0QgMTAyNAotCiAjZGVmaW5lIFBUUlNfUEVSX1BURSAxMDI0Ci0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3BndGFibGUtMmxldmVsLmggYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vcGd0YWJsZS0ybGV2ZWwuaAppbmRleCA3YWRlNGVkLi43N2NkZWZkIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vcGd0YWJsZS0ybGV2ZWwuaAorKysgYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vcGd0YWJsZS0ybGV2ZWwuaApAQCAtNywzMyArNyw0NCBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX0kzODZfUEdUQUJMRV8yTEVWRUxfSAogI2RlZmluZSBfSTM4Nl9QR1RBQkxFXzJMRVZFTF9ICi0KICNkZWZpbmUgcHRlX0VSUk9SKGUpICAgcHJpbnRrKCIlczolZDogYmFkIHB0ZSAlMDhseC5cbiIsIF9fRklMRV9fLCBfX0xJTkVfXywgKGUpLnB0ZV9sb3cpCiAjZGVmaW5lIHBnZF9FUlJPUihlKSAgIHByaW50aygiJXM6JWQ6IGJhZCBwZ2QgJTA4bHguXG4iLCBfX0ZJTEVfXywgX19MSU5FX18sIHBnZF92YWwoZSkpCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIHNldF9wdGUocHRlcHRyLCBwdGV2YWwpIG5hdGl2ZV9zZXRfcHRlKHB0ZXB0ciwgcHRldmFsKQogI2RlZmluZSBzZXRfcHRlX2F0KG1tLGFkZHIscHRlcCxwdGV2YWwpIG5hdGl2ZV9zZXRfcHRlX2F0KG1tLCBhZGRyLCBwdGVwLCBwdGV2YWwpCiAjZGVmaW5lIHNldF9wbWQocG1kcHRyLCBwbWR2YWwpIG5hdGl2ZV9zZXRfcG1kKHBtZHB0ciwgcG1kdmFsKQogI2RlZmluZSBzZXRfcHRlX2F0b21pYyhwdGVwdHIsIHB0ZXZhbCkgc2V0X3B0ZShwdGVwdHIscHRldmFsKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgc2V0X3B0ZV9wcmVzZW50KG1tLGFkZHIscHRlcCxwdGV2YWwpIHNldF9wdGVfYXQobW0sYWRkcixwdGVwLHB0ZXZhbCkKICNkZWZpbmUgcHRlX2NsZWFyKG1tLGFkZHIseHApIGRvIHsgc2V0X3B0ZV9hdChtbSwgYWRkciwgeHAsIF9fcHRlKDApKTsgfSB3aGlsZSAoMCkKICNkZWZpbmUgcG1kX2NsZWFyKHhwKSBkbyB7IHNldF9wbWQoeHAsIF9fcG1kKDApKTsgfSB3aGlsZSAoMCkKICNkZWZpbmUgbmF0aXZlX3B0ZXBfZ2V0X2FuZF9jbGVhcih4cCkgbmF0aXZlX2xvY2FsX3B0ZXBfZ2V0X2FuZF9jbGVhcih4cCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIHB0ZV9wYWdlKHgpIHBmbl90b19wYWdlKHB0ZV9wZm4oeCkpCiAjZGVmaW5lIHB0ZV9ub25lKHgpICghKHgpLnB0ZV9sb3cpCiAjZGVmaW5lIHB0ZV9wZm4oeCkgKHB0ZV92YWwoeCkgPj4gUEFHRV9TSElGVCkKICNkZWZpbmUgcGZuX3B0ZShwZm4sIHByb3QpIF9fcHRlKCgocGZuKSA8PCBQQUdFX1NISUZUKSB8IHBncHJvdF92YWwocHJvdCkpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBwZm5fcG1kKHBmbiwgcHJvdCkgX19wbWQoKChwZm4pIDw8IFBBR0VfU0hJRlQpIHwgcGdwcm90X3ZhbChwcm90KSkKICNkZWZpbmUgUFRFX0ZJTEVfTUFYX0JJVFMgMjkKICNkZWZpbmUgcHRlX3RvX3Bnb2ZmKHB0ZSkgICAoKCgocHRlKS5wdGVfbG93ID4+IDEpICYgMHgxZiApICsgKCgocHRlKS5wdGVfbG93ID4+IDgpIDw8IDUgKSkKICNkZWZpbmUgcGdvZmZfdG9fcHRlKG9mZikgICAoKHB0ZV90KSB7ICgoKG9mZikgJiAweDFmKSA8PCAxKSArICgoKG9mZikgPj4gNSkgPDwgOCkgKyBfUEFHRV9GSUxFIH0pCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX3N3cF90eXBlKHgpICgoKHgpLnZhbCA+PiAxKSAmIDB4MWYpCiAjZGVmaW5lIF9fc3dwX29mZnNldCh4KSAoKHgpLnZhbCA+PiA4KQogI2RlZmluZSBfX3N3cF9lbnRyeSh0eXBlLCBvZmZzZXQpICgoc3dwX2VudHJ5X3QpIHsgKCh0eXBlKSA8PCAxKSB8ICgob2Zmc2V0KSA8PCA4KSB9KQogI2RlZmluZSBfX3B0ZV90b19zd3BfZW50cnkocHRlKSAoKHN3cF9lbnRyeV90KSB7IChwdGUpLnB0ZV9sb3cgfSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fc3dwX2VudHJ5X3RvX3B0ZSh4KSAoKHB0ZV90KSB7ICh4KS52YWwgfSkKICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3BndGFibGUuaCBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9wZ3RhYmxlLmgKaW5kZXggNzk3ZTQ3My4uYTliZWQ2YiAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3BndGFibGUuaAorKysgYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vcGd0YWJsZS5oCkBAIC03LDYgKzcsMTMgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0jaW5jbHVkZSAicGd0YWJsZV82NC5oIgorI2luY2x1ZGUgInBndGFibGVfMzIuaCIKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9wZ3RhYmxlXzMyLmggYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vcGd0YWJsZV8zMi5oCmluZGV4IGM2M2JhOTMuLjY0YjY5NzggMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9wZ3RhYmxlXzMyLmgKKysrIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3BndGFibGVfMzIuaApAQCAtNywxNjkgKzcsMTgyIEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfSTM4Nl9QR1RBQkxFX0gKICNkZWZpbmUgX0kzODZfUEdUQUJMRV9ICi0KICNpZm5kZWYgX19BU1NFTUJMWV9fCiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNpbmNsdWRlIDxhc20vZml4bWFwLmg+CiAjaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgogI2luY2x1ZGUgPGFzbS9wYXJhdmlydC5oPgotCiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KLQogc3RydWN0IG1tX3N0cnVjdDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3Q7Ci0KICNkZWZpbmUgWkVST19QQUdFKHZhZGRyKSAodmlydF90b19wYWdlKGVtcHR5X3plcm9fcGFnZSkpCi0KICNpbmNsdWRlIDxhc20vcGd0YWJsZS0ybGV2ZWwtZGVmcy5oPgotCiAjZGVmaW5lIFBHRElSX1NJWkUgKDFVTCA8PCBQR0RJUl9TSElGVCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBHRElSX01BU0sgKH4oUEdESVJfU0laRS0xKSkKLQogI2RlZmluZSBVU0VSX1BUUlNfUEVSX1BHRCAoVEFTS19TSVpFL1BHRElSX1NJWkUpCiAjZGVmaW5lIEZJUlNUX1VTRVJfQUREUkVTUyAwCi0KICNkZWZpbmUgVVNFUl9QR0RfUFRSUyAoUEFHRV9PRkZTRVQgPj4gUEdESVJfU0hJRlQpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLRVJORUxfUEdEX1BUUlMgKFBUUlNfUEVSX1BHRC1VU0VSX1BHRF9QVFJTKQotCiAjZGVmaW5lIFRXT0xFVkVMX1BHRElSX1NISUZUIDIyCiAjZGVmaW5lIEJPT1RfVVNFUl9QR0RfUFRSUyAoX19QQUdFX09GRlNFVCA+PiBUV09MRVZFTF9QR0RJUl9TSElGVCkKICNkZWZpbmUgQk9PVF9LRVJORUxfUEdEX1BUUlMgKDEwMjQtQk9PVF9VU0VSX1BHRF9QVFJTKQotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWTUFMTE9DX09GRlNFVCAoOCoxMDI0KjEwMjQpCiAjZGVmaW5lIFZNQUxMT0NfU1RBUlQgKCgodW5zaWduZWQgbG9uZykgaGlnaF9tZW1vcnkgKyAgIDIqVk1BTExPQ19PRkZTRVQtMSkgJiB+KFZNQUxMT0NfT0ZGU0VULTEpKQogI2RlZmluZSBWTUFMTE9DX0VORCAoRklYQUREUl9TVEFSVC0yKlBBR0VfU0laRSkKLQogI2RlZmluZSBfUEFHRV9CSVRfUFJFU0VOVCAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfUEFHRV9CSVRfUlcgMQogI2RlZmluZSBfUEFHRV9CSVRfVVNFUiAyCiAjZGVmaW5lIF9QQUdFX0JJVF9QV1QgMwogI2RlZmluZSBfUEFHRV9CSVRfUENEIDQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9QQUdFX0JJVF9BQ0NFU1NFRCA1CiAjZGVmaW5lIF9QQUdFX0JJVF9ESVJUWSA2Ci0jZGVmaW5lIF9QQUdFX0JJVF9QU0UgNyAgCi0jZGVmaW5lIF9QQUdFX0JJVF9HTE9CQUwgOCAgCi0jZGVmaW5lIF9QQUdFX0JJVF9VTlVTRUQxIDkgIAorI2RlZmluZSBfUEFHRV9CSVRfUFNFIDcKKyNkZWZpbmUgX1BBR0VfQklUX0dMT0JBTCA4CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBfUEFHRV9CSVRfVU5VU0VEMSA5CiAjZGVmaW5lIF9QQUdFX0JJVF9VTlVTRUQyIDEwCiAjZGVmaW5lIF9QQUdFX0JJVF9VTlVTRUQzIDExCiAjZGVmaW5lIF9QQUdFX0JJVF9OWCA2MwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfUEFHRV9QUkVTRU5UIDB4MDAxCiAjZGVmaW5lIF9QQUdFX1JXIDB4MDAyCiAjZGVmaW5lIF9QQUdFX1VTRVIgMHgwMDQKICNkZWZpbmUgX1BBR0VfUFdUIDB4MDA4CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfUEFHRV9QQ0QgMHgwMTAKICNkZWZpbmUgX1BBR0VfQUNDRVNTRUQgMHgwMjAKICNkZWZpbmUgX1BBR0VfRElSVFkgMHgwNDAKLSNkZWZpbmUgX1BBR0VfUFNFIDB4MDgwICAKLSNkZWZpbmUgX1BBR0VfR0xPQkFMIDB4MTAwICAKLSNkZWZpbmUgX1BBR0VfVU5VU0VEMSAweDIwMCAgCisjZGVmaW5lIF9QQUdFX1BTRSAweDA4MAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgX1BBR0VfR0xPQkFMIDB4MTAwCisjZGVmaW5lIF9QQUdFX1VOVVNFRDEgMHgyMDAKICNkZWZpbmUgX1BBR0VfVU5VU0VEMiAweDQwMAogI2RlZmluZSBfUEFHRV9VTlVTRUQzIDB4ODAwCi0KLSNkZWZpbmUgX1BBR0VfRklMRSAweDA0MCAgCi0jZGVmaW5lIF9QQUdFX1BST1ROT05FIDB4MDgwICAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIF9QQUdFX0ZJTEUgMHgwNDAKKyNkZWZpbmUgX1BBR0VfUFJPVE5PTkUgMHgwODAKICNkZWZpbmUgX1BBR0VfTlggMAotCiAjZGVmaW5lIF9QQUdFX1RBQkxFIChfUEFHRV9QUkVTRU5UIHwgX1BBR0VfUlcgfCBfUEFHRV9VU0VSIHwgX1BBR0VfQUNDRVNTRUQgfCBfUEFHRV9ESVJUWSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9LRVJOUEdfVEFCTEUgKF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9SVyB8IF9QQUdFX0FDQ0VTU0VEIHwgX1BBR0VfRElSVFkpCiAjZGVmaW5lIF9QQUdFX0NIR19NQVNLIChQVEVfTUFTSyB8IF9QQUdFX0FDQ0VTU0VEIHwgX1BBR0VfRElSVFkpCi0KICNkZWZpbmUgUEFHRV9OT05FICAgX19wZ3Byb3QoX1BBR0VfUFJPVE5PTkUgfCBfUEFHRV9BQ0NFU1NFRCkKICNkZWZpbmUgUEFHRV9TSEFSRUQgICBfX3BncHJvdChfUEFHRV9QUkVTRU5UIHwgX1BBR0VfUlcgfCBfUEFHRV9VU0VSIHwgX1BBR0VfQUNDRVNTRUQpCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBBR0VfU0hBUkVEX0VYRUMgICBfX3BncHJvdChfUEFHRV9QUkVTRU5UIHwgX1BBR0VfUlcgfCBfUEFHRV9VU0VSIHwgX1BBR0VfQUNDRVNTRUQpCiAjZGVmaW5lIFBBR0VfQ09QWV9OT0VYRUMgICBfX3BncHJvdChfUEFHRV9QUkVTRU5UIHwgX1BBR0VfVVNFUiB8IF9QQUdFX0FDQ0VTU0VEIHwgX1BBR0VfTlgpCiAjZGVmaW5lIFBBR0VfQ09QWV9FWEVDICAgX19wZ3Byb3QoX1BBR0VfUFJFU0VOVCB8IF9QQUdFX1VTRVIgfCBfUEFHRV9BQ0NFU1NFRCkKICNkZWZpbmUgUEFHRV9DT1BZICAgUEFHRV9DT1BZX05PRVhFQworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUEFHRV9SRUFET05MWSAgIF9fcGdwcm90KF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9VU0VSIHwgX1BBR0VfQUNDRVNTRUQgfCBfUEFHRV9OWCkKICNkZWZpbmUgUEFHRV9SRUFET05MWV9FWEVDICAgX19wZ3Byb3QoX1BBR0VfUFJFU0VOVCB8IF9QQUdFX1VTRVIgfCBfUEFHRV9BQ0NFU1NFRCkKLQogI2RlZmluZSBfUEFHRV9LRVJORUwgICAoX1BBR0VfUFJFU0VOVCB8IF9QQUdFX1JXIHwgX1BBR0VfRElSVFkgfCBfUEFHRV9BQ0NFU1NFRCB8IF9QQUdFX05YKQogI2RlZmluZSBfUEFHRV9LRVJORUxfRVhFQyAgIChfUEFHRV9QUkVTRU5UIHwgX1BBR0VfUlcgfCBfUEFHRV9ESVJUWSB8IF9QQUdFX0FDQ0VTU0VEKQotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX1BBR0VfS0VSTkVMX1JPIChfX1BBR0VfS0VSTkVMICYgfl9QQUdFX1JXKQogI2RlZmluZSBfX1BBR0VfS0VSTkVMX1JYIChfX1BBR0VfS0VSTkVMX0VYRUMgJiB+X1BBR0VfUlcpCiAjZGVmaW5lIF9fUEFHRV9LRVJORUxfTk9DQUNIRSAoX19QQUdFX0tFUk5FTCB8IF9QQUdFX1BDRCkKICNkZWZpbmUgX19QQUdFX0tFUk5FTF9MQVJHRSAoX19QQUdFX0tFUk5FTCB8IF9QQUdFX1BTRSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fUEFHRV9LRVJORUxfTEFSR0VfRVhFQyAoX19QQUdFX0tFUk5FTF9FWEVDIHwgX1BBR0VfUFNFKQotCiAjZGVmaW5lIFBBR0VfS0VSTkVMIF9fcGdwcm90KF9fUEFHRV9LRVJORUwpCiAjZGVmaW5lIFBBR0VfS0VSTkVMX1JPIF9fcGdwcm90KF9fUEFHRV9LRVJORUxfUk8pCiAjZGVmaW5lIFBBR0VfS0VSTkVMX0VYRUMgX19wZ3Byb3QoX19QQUdFX0tFUk5FTF9FWEVDKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUEFHRV9LRVJORUxfUlggX19wZ3Byb3QoX19QQUdFX0tFUk5FTF9SWCkKICNkZWZpbmUgUEFHRV9LRVJORUxfTk9DQUNIRSBfX3BncHJvdChfX1BBR0VfS0VSTkVMX05PQ0FDSEUpCiAjZGVmaW5lIFBBR0VfS0VSTkVMX0xBUkdFIF9fcGdwcm90KF9fUEFHRV9LRVJORUxfTEFSR0UpCiAjZGVmaW5lIFBBR0VfS0VSTkVMX0xBUkdFX0VYRUMgX19wZ3Byb3QoX19QQUdFX0tFUk5FTF9MQVJHRV9FWEVDKQotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX1AwMDAgUEFHRV9OT05FCiAjZGVmaW5lIF9fUDAwMSBQQUdFX1JFQURPTkxZCiAjZGVmaW5lIF9fUDAxMCBQQUdFX0NPUFkKICNkZWZpbmUgX19QMDExIFBBR0VfQ09QWQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19QMTAwIFBBR0VfUkVBRE9OTFlfRVhFQwogI2RlZmluZSBfX1AxMDEgUEFHRV9SRUFET05MWV9FWEVDCiAjZGVmaW5lIF9fUDExMCBQQUdFX0NPUFlfRVhFQwogI2RlZmluZSBfX1AxMTEgUEFHRV9DT1BZX0VYRUMKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19TMDAwIFBBR0VfTk9ORQogI2RlZmluZSBfX1MwMDEgUEFHRV9SRUFET05MWQogI2RlZmluZSBfX1MwMTAgUEFHRV9TSEFSRUQKICNkZWZpbmUgX19TMDExIFBBR0VfU0hBUkVECisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX1MxMDAgUEFHRV9SRUFET05MWV9FWEVDCiAjZGVmaW5lIF9fUzEwMSBQQUdFX1JFQURPTkxZX0VYRUMKICNkZWZpbmUgX19TMTEwIFBBR0VfU0hBUkVEX0VYRUMKICNkZWZpbmUgX19TMTExIFBBR0VfU0hBUkVEX0VYRUMKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICN1bmRlZiBURVNUX0FDQ0VTU19PSwotCiAjZGVmaW5lIHB0ZV9wcmVzZW50KHgpICgoeCkucHRlX2xvdyAmIChfUEFHRV9QUkVTRU5UIHwgX1BBR0VfUFJPVE5PTkUpKQotCiAjZGVmaW5lIHBtZF9ub25lKHgpICghKHVuc2lnbmVkIGxvbmcpcG1kX3ZhbCh4KSkKICNkZWZpbmUgcG1kX3ByZXNlbnQoeCkgKHBtZF92YWwoeCkgJiBfUEFHRV9QUkVTRU5UKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgcG1kX2JhZCh4KSAoKHBtZF92YWwoeCkgJiAoflBBR0VfTUFTSyAmIH5fUEFHRV9VU0VSKSkgIT0gX0tFUk5QR19UQUJMRSkKLQogI2RlZmluZSBwYWdlc190b19tYih4KSAoKHgpID4+ICgyMC1QQUdFX1NISUZUKSkKLQogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLTJsZXZlbC5oPgogI2RlZmluZSBwdGVfdXBkYXRlKG1tLCBhZGRyLCBwdGVwKSBkbyB7IH0gd2hpbGUgKDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBwdGVfdXBkYXRlX2RlZmVyKG1tLCBhZGRyLCBwdGVwKSBkbyB7IH0gd2hpbGUgKDApCiAjZGVmaW5lIF9fSEFWRV9BUkNIX1BURVBfU0VUX0FDQ0VTU19GTEFHUwogI2RlZmluZSBwdGVwX3NldF9hY2Nlc3NfZmxhZ3Modm1hLCBhZGRyZXNzLCBwdGVwLCBlbnRyeSwgZGlydHkpICAoeyAgIGludCBfX2NoYW5nZWQgPSAhcHRlX3NhbWUoKihwdGVwKSwgZW50cnkpOyAgIGlmIChfX2NoYW5nZWQgJiYgZGlydHkpIHsgICAocHRlcCktPnB0ZV9sb3cgPSAoZW50cnkpLnB0ZV9sb3c7ICAgcHRlX3VwZGF0ZV9kZWZlcigodm1hKS0+dm1fbW0sIChhZGRyZXNzKSwgKHB0ZXApKTsgICBmbHVzaF90bGJfcGFnZSh2bWEsIGFkZHJlc3MpOyAgIH0gICBfX2NoYW5nZWQ7ICB9KQogI2RlZmluZSBfX0hBVkVfQVJDSF9QVEVQX1RFU1RfQU5EX0NMRUFSX1lPVU5HCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBwdGVwX3Rlc3RfYW5kX2NsZWFyX3lvdW5nKHZtYSwgYWRkciwgcHRlcCkgKHsgICBpbnQgX19yZXQgPSAwOyAgIGlmIChwdGVfeW91bmcoKihwdGVwKSkpICAgX19yZXQgPSB0ZXN0X2FuZF9jbGVhcl9iaXQoX1BBR0VfQklUX0FDQ0VTU0VELCAgICYocHRlcCktPnB0ZV9sb3cpOyAgIGlmIChfX3JldCkgICBwdGVfdXBkYXRlKCh2bWEpLT52bV9tbSwgYWRkciwgcHRlcCk7ICAgX19yZXQ7ICB9KQogI2RlZmluZSBfX0hBVkVfQVJDSF9QVEVQX0NMRUFSX1lPVU5HX0ZMVVNICiAjZGVmaW5lIHB0ZXBfY2xlYXJfZmx1c2hfeW91bmcodm1hLCBhZGRyZXNzLCBwdGVwKSAgKHsgICBpbnQgX195b3VuZzsgICBfX3lvdW5nID0gcHRlcF90ZXN0X2FuZF9jbGVhcl95b3VuZygodm1hKSwgKGFkZHJlc3MpLCAocHRlcCkpOyAgIGlmIChfX3lvdW5nKSAgIGZsdXNoX3RsYl9wYWdlKHZtYSwgYWRkcmVzcyk7ICAgX195b3VuZzsgIH0pCiAjZGVmaW5lIF9fSEFWRV9BUkNIX1BURVBfR0VUX0FORF9DTEVBUgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19IQVZFX0FSQ0hfUFRFUF9HRVRfQU5EX0NMRUFSX0ZVTEwKICNkZWZpbmUgX19IQVZFX0FSQ0hfUFRFUF9TRVRfV1JQUk9URUNUCiAjZGVmaW5lIHBncHJvdF9ub25jYWNoZWQocHJvdCkgKChib290X2NwdV9kYXRhLng4NiA+IDMpICAgPyAoX19wZ3Byb3QocGdwcm90X3ZhbChwcm90KSB8IF9QQUdFX1BDRCB8IF9QQUdFX1BXVCkpIDogKHByb3QpKQogI2RlZmluZSBta19wdGUocGFnZSwgcGdwcm90KSBwZm5fcHRlKHBhZ2VfdG9fcGZuKHBhZ2UpLCAocGdwcm90KSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIHBtZF9sYXJnZShwbWQpICAoKHBtZF92YWwocG1kKSAmIChfUEFHRV9QU0V8X1BBR0VfUFJFU0VOVCkpID09IChfUEFHRV9QU0V8X1BBR0VfUFJFU0VOVCkpCiAjZGVmaW5lIHBnZF9pbmRleChhZGRyZXNzKSAoKChhZGRyZXNzKSA+PiBQR0RJUl9TSElGVCkgJiAoUFRSU19QRVJfUEdELTEpKQogI2RlZmluZSBwZ2RfaW5kZXhfayhhZGRyKSBwZ2RfaW5kZXgoYWRkcikKICNkZWZpbmUgcGdkX29mZnNldChtbSwgYWRkcmVzcykgKChtbSktPnBnZCtwZ2RfaW5kZXgoYWRkcmVzcykpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBwZ2Rfb2Zmc2V0X2soYWRkcmVzcykgcGdkX29mZnNldCgmaW5pdF9tbSwgYWRkcmVzcykKICNkZWZpbmUgcG1kX2luZGV4KGFkZHJlc3MpICAgKCgoYWRkcmVzcykgPj4gUE1EX1NISUZUKSAmIChQVFJTX1BFUl9QTUQtMSkpCiAjZGVmaW5lIHB0ZV9pbmRleChhZGRyZXNzKSAgICgoKGFkZHJlc3MpID4+IFBBR0VfU0hJRlQpICYgKFBUUlNfUEVSX1BURSAtIDEpKQogI2RlZmluZSBwdGVfb2Zmc2V0X2tlcm5lbChkaXIsIGFkZHJlc3MpICAgKChwdGVfdCAqKSBwbWRfcGFnZV92YWRkcigqKGRpcikpICsgcHRlX2luZGV4KGFkZHJlc3MpKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgcG1kX3BhZ2UocG1kKSAocGZuX3RvX3BhZ2UocG1kX3ZhbChwbWQpID4+IFBBR0VfU0hJRlQpKQogI2RlZmluZSBwbWRfcGFnZV92YWRkcihwbWQpICAgKCh1bnNpZ25lZCBsb25nKSBfX3ZhKHBtZF92YWwocG1kKSAmIFBBR0VfTUFTSykpCi0KLSAjZGVmaW5lIHB0ZV9vZmZzZXRfbWFwKGRpciwgYWRkcmVzcykgICAoKHB0ZV90ICopcGFnZV9hZGRyZXNzKHBtZF9wYWdlKCooZGlyKSkpICsgcHRlX2luZGV4KGFkZHJlc3MpKQorI2RlZmluZSBwdGVfb2Zmc2V0X21hcChkaXIsIGFkZHJlc3MpICAgKChwdGVfdCAqKXBhZ2VfYWRkcmVzcyhwbWRfcGFnZSgqKGRpcikpKSArIHB0ZV9pbmRleChhZGRyZXNzKSkKICNkZWZpbmUgcHRlX29mZnNldF9tYXBfbmVzdGVkKGRpciwgYWRkcmVzcykgcHRlX29mZnNldF9tYXAoZGlyLCBhZGRyZXNzKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgcHRlX3VubWFwKHB0ZSkgZG8geyB9IHdoaWxlICgwKQogI2RlZmluZSBwdGVfdW5tYXBfbmVzdGVkKHB0ZSkgZG8geyB9IHdoaWxlICgwKQogI2RlZmluZSBrcHRlX2NsZWFyX2ZsdXNoKHB0ZXAsIHZhZGRyKSAgZG8geyAgIHB0ZV9jbGVhcigmaW5pdF9tbSwgdmFkZHIsIHB0ZXApOyAgIF9fZmx1c2hfdGxiX29uZSh2YWRkcik7ICB9IHdoaWxlICgwKQogI2RlZmluZSB1cGRhdGVfbW11X2NhY2hlKHZtYSxhZGRyZXNzLHB0ZSkgZG8geyB9IHdoaWxlICgwKQotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2VuZGlmCiAjZGVmaW5lIGlvX3JlbWFwX3Bmbl9yYW5nZSh2bWEsIHZhZGRyLCBwZm4sIHNpemUsIHByb3QpICAgcmVtYXBfcGZuX3JhbmdlKHZtYSwgdmFkZHIsIHBmbiwgc2l6ZSwgcHJvdCkKICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9wZ3RhYmxlLmg+CiAjZW5kaWYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vcG9sbC5oIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3BvbGwuaAppbmRleCA1YjE2NjczLi5kN2U4YWRjIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vcG9sbC5oCisrKyBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9wb2xsLmgKQEAgLTcsNiArNywxMyBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9wb2xsLmg+CmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vcG9zaXhfdHlwZXMuaCBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9wb3NpeF90eXBlcy5oCmluZGV4IDc5YmI0OTAuLjRlMjY3ODggMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9wb3NpeF90eXBlcy5oCisrKyBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9wb3NpeF90eXBlcy5oCkBAIC03LDEwICs3LDEzIEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotI2lmZGVmIF9faTM4Nl9fCiAjaW5jbHVkZSAicG9zaXhfdHlwZXNfMzIuaCIKLSNlbHNlCi0jaW5jbHVkZSAicG9zaXhfdHlwZXNfNjQuaCIKLSNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3Bvc2l4X3R5cGVzXzMyLmggYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vcG9zaXhfdHlwZXNfMzIuaAppbmRleCA5N2E4YjY5Li45MDEzNmQyIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vcG9zaXhfdHlwZXNfMzIuaAorKysgYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vcG9zaXhfdHlwZXNfMzIuaApAQCAtNyw2NCArNyw3MiBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX19BUkNIX0kzODZfUE9TSVhfVFlQRVNfSAogI2RlZmluZSBfX0FSQ0hfSTM4Nl9QT1NJWF9UWVBFU19ICi0KIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBfX2tlcm5lbF9pbm9fdDsKIHR5cGVkZWYgdW5zaWduZWQgc2hvcnQgX19rZXJuZWxfbW9kZV90OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHR5cGVkZWYgdW5zaWduZWQgc2hvcnQgX19rZXJuZWxfbmxpbmtfdDsKIHR5cGVkZWYgbG9uZyBfX2tlcm5lbF9vZmZfdDsKIHR5cGVkZWYgaW50IF9fa2VybmVsX3BpZF90OwogdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBfX2tlcm5lbF9pcGNfcGlkX3Q7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBfX2tlcm5lbF91aWRfdDsKIHR5cGVkZWYgdW5zaWduZWQgc2hvcnQgX19rZXJuZWxfZ2lkX3Q7CiB0eXBlZGVmIHVuc2lnbmVkIGludCBfX2tlcm5lbF9zaXplX3Q7CiB0eXBlZGVmIGludCBfX2tlcm5lbF9zc2l6ZV90OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHR5cGVkZWYgaW50IF9fa2VybmVsX3B0cmRpZmZfdDsKIHR5cGVkZWYgbG9uZyBfX2tlcm5lbF90aW1lX3Q7CiB0eXBlZGVmIGxvbmcgX19rZXJuZWxfc3VzZWNvbmRzX3Q7CiB0eXBlZGVmIGxvbmcgX19rZXJuZWxfY2xvY2tfdDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB0eXBlZGVmIGludCBfX2tlcm5lbF90aW1lcl90OwogdHlwZWRlZiBpbnQgX19rZXJuZWxfY2xvY2tpZF90OwogdHlwZWRlZiBpbnQgX19rZXJuZWxfZGFkZHJfdDsKIHR5cGVkZWYgY2hhciAqIF9fa2VybmVsX2NhZGRyX3Q7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBfX2tlcm5lbF91aWQxNl90OwogdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBfX2tlcm5lbF9naWQxNl90OwogdHlwZWRlZiB1bnNpZ25lZCBpbnQgX19rZXJuZWxfdWlkMzJfdDsKIHR5cGVkZWYgdW5zaWduZWQgaW50IF9fa2VybmVsX2dpZDMyX3Q7Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB0eXBlZGVmIHVuc2lnbmVkIHNob3J0IF9fa2VybmVsX29sZF91aWRfdDsKIHR5cGVkZWYgdW5zaWduZWQgc2hvcnQgX19rZXJuZWxfb2xkX2dpZF90OwogdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBfX2tlcm5lbF9vbGRfZGV2X3Q7Ci0KICNpZmRlZiBfX0dOVUNfXworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHR5cGVkZWYgbG9uZyBsb25nIF9fa2VybmVsX2xvZmZfdDsKICNlbmRpZgotCiB0eXBlZGVmIHN0cnVjdCB7CiAjaWZkZWYgX19VU0VfQUxMCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGludCB2YWxbMl07CiAjZWxzZQogIGludCBfX3ZhbFsyXTsKICNlbmRpZgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH0gX19rZXJuZWxfZnNpZF90OwotCiAjaWYgIWRlZmluZWQoX19HTElCQ19fKSB8fCBfX0dMSUJDX18gPCAyCi0KICN1bmRlZiBfX0ZEX1NFVAogI2RlZmluZSBfX0ZEX1NFVChmZCxmZHNldHApICAgX19hc21fXyBfX3ZvbGF0aWxlX18oImJ0c2wgJTEsJTAiOiAgICIrbSIgKCooX19rZXJuZWxfZmRfc2V0ICopIChmZHNldHApKToiciIgKChpbnQpIChmZCkpKQotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI3VuZGVmIF9fRkRfQ0xSCiAjZGVmaW5lIF9fRkRfQ0xSKGZkLGZkc2V0cCkgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygiYnRybCAlMSwlMCI6ICAgIittIiAoKihfX2tlcm5lbF9mZF9zZXQgKikgKGZkc2V0cCkpOiJyIiAoKGludCkgKGZkKSkpCi0KICN1bmRlZiBfX0ZEX0lTU0VUCiAjZGVmaW5lIF9fRkRfSVNTRVQoZmQsZmRzZXRwKSAoX19leHRlbnNpb25fXyAoeyAgIHVuc2lnbmVkIGNoYXIgX19yZXN1bHQ7ICAgX19hc21fXyBfX3ZvbGF0aWxlX18oImJ0bCAlMSwlMiA7IHNldGIgJTAiICAgOiI9cSIgKF9fcmVzdWx0KSA6InIiICgoaW50KSAoZmQpKSwgICAibSIgKCooX19rZXJuZWxfZmRfc2V0ICopIChmZHNldHApKSk7ICAgX19yZXN1bHQ7IH0pKQotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI3VuZGVmIF9fRkRfWkVSTwogI2RlZmluZSBfX0ZEX1pFUk8oZmRzZXRwKSAgZG8geyAgIGludCBfX2QwLCBfX2QxOyAgIF9fYXNtX18gX192b2xhdGlsZV9fKCJjbGQgOyByZXAgOyBzdG9zbCIgICA6Ij1tIiAoKihfX2tlcm5lbF9mZF9zZXQgKikgKGZkc2V0cCkpLCAgICI9JmMiIChfX2QwKSwgIj0mRCIgKF9fZDEpICAgOiJhIiAoMCksICIxIiAoX19GRFNFVF9MT05HUyksICAgIjIiICgoX19rZXJuZWxfZmRfc2V0ICopIChmZHNldHApKSA6ICJtZW1vcnkiKTsgIH0gd2hpbGUgKDApCi0KICNlbmRpZgotCiAjZW5kaWYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vcHJjdGwuaCBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9wcmN0bC5oCmluZGV4IDg4NTJjYTcuLmQxOTRjZjggMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9wcmN0bC5oCisrKyBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9wcmN0bC5oCkBAIC03LDE0ICs3LDIwIEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBYODZfNjRfUFJDVExfSAogI2RlZmluZSBYODZfNjRfUFJDVExfSCAxCi0KICNkZWZpbmUgQVJDSF9TRVRfR1MgMHgxMDAxCiAjZGVmaW5lIEFSQ0hfU0VUX0ZTIDB4MTAwMgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQVJDSF9HRVRfRlMgMHgxMDAzCiAjZGVmaW5lIEFSQ0hfR0VUX0dTIDB4MTAwNAotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9wcm9jZXNzb3ItZmxhZ3MuaCBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9wcm9jZXNzb3ItZmxhZ3MuaAppbmRleCA3OWU4ZjdkLi5lZGVhNmU5IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vcHJvY2Vzc29yLWZsYWdzLmgKKysrIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3Byb2Nlc3Nvci1mbGFncy5oCkBAIC03LDczICs3LDg4IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfX0FTTV9JMzg2X1BST0NFU1NPUl9GTEFHU19ICiAjZGVmaW5lIF9fQVNNX0kzODZfUFJPQ0VTU09SX0ZMQUdTX0gKLQotI2RlZmluZSBYODZfRUZMQUdTX0NGIDB4MDAwMDAwMDEgIAotI2RlZmluZSBYODZfRUZMQUdTX1BGIDB4MDAwMDAwMDQgIAotI2RlZmluZSBYODZfRUZMQUdTX0FGIDB4MDAwMDAwMTAgIAotI2RlZmluZSBYODZfRUZMQUdTX1pGIDB4MDAwMDAwNDAgIAotI2RlZmluZSBYODZfRUZMQUdTX1NGIDB4MDAwMDAwODAgIAotI2RlZmluZSBYODZfRUZMQUdTX1RGIDB4MDAwMDAxMDAgIAotI2RlZmluZSBYODZfRUZMQUdTX0lGIDB4MDAwMDAyMDAgIAotI2RlZmluZSBYODZfRUZMQUdTX0RGIDB4MDAwMDA0MDAgIAotI2RlZmluZSBYODZfRUZMQUdTX09GIDB4MDAwMDA4MDAgIAotI2RlZmluZSBYODZfRUZMQUdTX0lPUEwgMHgwMDAwMzAwMCAgCi0jZGVmaW5lIFg4Nl9FRkxBR1NfTlQgMHgwMDAwNDAwMCAgCi0jZGVmaW5lIFg4Nl9FRkxBR1NfUkYgMHgwMDAxMDAwMCAgCi0jZGVmaW5lIFg4Nl9FRkxBR1NfVk0gMHgwMDAyMDAwMCAgCi0jZGVmaW5lIFg4Nl9FRkxBR1NfQUMgMHgwMDA0MDAwMCAgCi0jZGVmaW5lIFg4Nl9FRkxBR1NfVklGIDB4MDAwODAwMDAgIAotI2RlZmluZSBYODZfRUZMQUdTX1ZJUCAweDAwMTAwMDAwICAKLSNkZWZpbmUgWDg2X0VGTEFHU19JRCAweDAwMjAwMDAwICAKLQotI2RlZmluZSBYODZfQ1IwX1BFIDB4MDAwMDAwMDEgIAotI2RlZmluZSBYODZfQ1IwX01QIDB4MDAwMDAwMDIgIAotI2RlZmluZSBYODZfQ1IwX0VNIDB4MDAwMDAwMDQgIAotI2RlZmluZSBYODZfQ1IwX1RTIDB4MDAwMDAwMDggIAotI2RlZmluZSBYODZfQ1IwX0VUIDB4MDAwMDAwMTAgIAotI2RlZmluZSBYODZfQ1IwX05FIDB4MDAwMDAwMjAgIAotI2RlZmluZSBYODZfQ1IwX1dQIDB4MDAwMTAwMDAgIAotI2RlZmluZSBYODZfQ1IwX0FNIDB4MDAwNDAwMDAgIAotI2RlZmluZSBYODZfQ1IwX05XIDB4MjAwMDAwMDAgIAotI2RlZmluZSBYODZfQ1IwX0NEIDB4NDAwMDAwMDAgIAotI2RlZmluZSBYODZfQ1IwX1BHIDB4ODAwMDAwMDAgIAotCi0jZGVmaW5lIFg4Nl9DUjNfUFdUIDB4MDAwMDAwMDggIAotI2RlZmluZSBYODZfQ1IzX1BDRCAweDAwMDAwMDEwICAKLQotI2RlZmluZSBYODZfQ1I0X1ZNRSAweDAwMDAwMDAxICAKLSNkZWZpbmUgWDg2X0NSNF9QVkkgMHgwMDAwMDAwMiAgCi0jZGVmaW5lIFg4Nl9DUjRfVFNEIDB4MDAwMDAwMDQgIAotI2RlZmluZSBYODZfQ1I0X0RFIDB4MDAwMDAwMDggIAotI2RlZmluZSBYODZfQ1I0X1BTRSAweDAwMDAwMDEwICAKLSNkZWZpbmUgWDg2X0NSNF9QQUUgMHgwMDAwMDAyMCAgCi0jZGVmaW5lIFg4Nl9DUjRfTUNFIDB4MDAwMDAwNDAgIAotI2RlZmluZSBYODZfQ1I0X1BHRSAweDAwMDAwMDgwICAKLSNkZWZpbmUgWDg2X0NSNF9QQ0UgMHgwMDAwMDEwMCAgCi0jZGVmaW5lIFg4Nl9DUjRfT1NGWFNSIDB4MDAwMDAyMDAgIAotI2RlZmluZSBYODZfQ1I0X09TWE1NRVhDUFQgMHgwMDAwMDQwMCAgCi0jZGVmaW5lIFg4Nl9DUjRfVk1YRSAweDAwMDAyMDAwICAKLQotI2RlZmluZSBYODZfQ1I4X1RQUiAweDAwMDAwMDBGICAKLQorI2RlZmluZSBYODZfRUZMQUdTX0NGIDB4MDAwMDAwMDEKKyNkZWZpbmUgWDg2X0VGTEFHU19QRiAweDAwMDAwMDA0CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBYODZfRUZMQUdTX0FGIDB4MDAwMDAwMTAKKyNkZWZpbmUgWDg2X0VGTEFHU19aRiAweDAwMDAwMDQwCisjZGVmaW5lIFg4Nl9FRkxBR1NfU0YgMHgwMDAwMDA4MAorI2RlZmluZSBYODZfRUZMQUdTX1RGIDB4MDAwMDAxMDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFg4Nl9FRkxBR1NfSUYgMHgwMDAwMDIwMAorI2RlZmluZSBYODZfRUZMQUdTX0RGIDB4MDAwMDA0MDAKKyNkZWZpbmUgWDg2X0VGTEFHU19PRiAweDAwMDAwODAwCisjZGVmaW5lIFg4Nl9FRkxBR1NfSU9QTCAweDAwMDAzMDAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBYODZfRUZMQUdTX05UIDB4MDAwMDQwMDAKKyNkZWZpbmUgWDg2X0VGTEFHU19SRiAweDAwMDEwMDAwCisjZGVmaW5lIFg4Nl9FRkxBR1NfVk0gMHgwMDAyMDAwMAorI2RlZmluZSBYODZfRUZMQUdTX0FDIDB4MDAwNDAwMDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFg4Nl9FRkxBR1NfVklGIDB4MDAwODAwMDAKKyNkZWZpbmUgWDg2X0VGTEFHU19WSVAgMHgwMDEwMDAwMAorI2RlZmluZSBYODZfRUZMQUdTX0lEIDB4MDAyMDAwMDAKKyNkZWZpbmUgWDg2X0NSMF9QRSAweDAwMDAwMDAxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBYODZfQ1IwX01QIDB4MDAwMDAwMDIKKyNkZWZpbmUgWDg2X0NSMF9FTSAweDAwMDAwMDA0CisjZGVmaW5lIFg4Nl9DUjBfVFMgMHgwMDAwMDAwOAorI2RlZmluZSBYODZfQ1IwX0VUIDB4MDAwMDAwMTAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFg4Nl9DUjBfTkUgMHgwMDAwMDAyMAorI2RlZmluZSBYODZfQ1IwX1dQIDB4MDAwMTAwMDAKKyNkZWZpbmUgWDg2X0NSMF9BTSAweDAwMDQwMDAwCisjZGVmaW5lIFg4Nl9DUjBfTlcgMHgyMDAwMDAwMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgWDg2X0NSMF9DRCAweDQwMDAwMDAwCisjZGVmaW5lIFg4Nl9DUjBfUEcgMHg4MDAwMDAwMAorI2RlZmluZSBYODZfQ1IzX1BXVCAweDAwMDAwMDA4CisjZGVmaW5lIFg4Nl9DUjNfUENEIDB4MDAwMDAwMTAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFg4Nl9DUjRfVk1FIDB4MDAwMDAwMDEKKyNkZWZpbmUgWDg2X0NSNF9QVkkgMHgwMDAwMDAwMgorI2RlZmluZSBYODZfQ1I0X1RTRCAweDAwMDAwMDA0CisjZGVmaW5lIFg4Nl9DUjRfREUgMHgwMDAwMDAwOAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgWDg2X0NSNF9QU0UgMHgwMDAwMDAxMAorI2RlZmluZSBYODZfQ1I0X1BBRSAweDAwMDAwMDIwCisjZGVmaW5lIFg4Nl9DUjRfTUNFIDB4MDAwMDAwNDAKKyNkZWZpbmUgWDg2X0NSNF9QR0UgMHgwMDAwMDA4MAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgWDg2X0NSNF9QQ0UgMHgwMDAwMDEwMAorI2RlZmluZSBYODZfQ1I0X09TRlhTUiAweDAwMDAwMjAwCisjZGVmaW5lIFg4Nl9DUjRfT1NYTU1FWENQVCAweDAwMDAwNDAwCisjZGVmaW5lIFg4Nl9DUjRfVk1YRSAweDAwMDAyMDAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBYODZfQ1I4X1RQUiAweDAwMDAwMDBGCiAjZGVmaW5lIENYODZfUENSMCAweDIwCiAjZGVmaW5lIENYODZfR0NSIDB4YjgKICNkZWZpbmUgQ1g4Nl9DQ1IwIDB4YzAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIENYODZfQ0NSMSAweGMxCiAjZGVmaW5lIENYODZfQ0NSMiAweGMyCiAjZGVmaW5lIENYODZfQ0NSMyAweGMzCiAjZGVmaW5lIENYODZfQ0NSNCAweGU4CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBDWDg2X0NDUjUgMHhlOQogI2RlZmluZSBDWDg2X0NDUjYgMHhlYQogI2RlZmluZSBDWDg2X0NDUjcgMHhlYgogI2RlZmluZSBDWDg2X1BDUjEgMHhmMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQ1g4Nl9ESVIwIDB4ZmUKICNkZWZpbmUgQ1g4Nl9ESVIxIDB4ZmYKICNkZWZpbmUgQ1g4Nl9BUlJfQkFTRSAweGM0CiAjZGVmaW5lIENYODZfUkNSX0JBU0UgMHhkYwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vcHJvY2Vzc29yLmggYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vcHJvY2Vzc29yLmgKaW5kZXggN2Q0Nzc0OS4uZTllYWVjOCAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3Byb2Nlc3Nvci5oCisrKyBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9wcm9jZXNzb3IuaApAQCAtNyw2ICs3LDEzIEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotI2luY2x1ZGUgInByb2Nlc3Nvcl82NC5oIgorI2luY2x1ZGUgInByb2Nlc3Nvcl8zMi5oIgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3Byb2Nlc3Nvcl8zMi5oIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3Byb2Nlc3Nvcl8zMi5oCmluZGV4IDUzOWVkZDEuLmJlYjMwNzUgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9wcm9jZXNzb3JfMzIuaAorKysgYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vcHJvY2Vzc29yXzMyLmgKQEAgLTcsMzE4ICs3LDM0MiBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX19BU01fSTM4Nl9QUk9DRVNTT1JfSAogI2RlZmluZSBfX0FTTV9JMzg2X1BST0NFU1NPUl9ICi0KICNpbmNsdWRlIDxhc20vdm04Ni5oPgogI2luY2x1ZGUgPGFzbS9tYXRoX2VtdS5oPgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNpbmNsdWRlIDxhc20vc2VnbWVudC5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL3NpZ2NvbnRleHQuaD4KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjaW5jbHVkZSA8YXNtL2NwdWZlYXR1cmUuaD4KICNpbmNsdWRlIDxhc20vbXNyLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGxpbnV4L2NhY2hlLmg+CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KICNpbmNsdWRlIDxhc20vcGVyY3B1Lmg+CiAjaW5jbHVkZSA8bGludXgvY3B1bWFzay5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci1mbGFncy5oPgotCiBzdHJ1Y3QgZGVzY19zdHJ1Y3QgewogIHVuc2lnbmVkIGxvbmcgYSxiOwogfTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgZGVzY19lbXB0eShkZXNjKSAgICghKChkZXNjKS0+YSB8IChkZXNjKS0+YikpCi0KICNkZWZpbmUgZGVzY19lcXVhbChkZXNjMSwgZGVzYzIpICAgKCgoZGVzYzEpLT5hID09IChkZXNjMiktPmEpICYmICgoZGVzYzEpLT5iID09IChkZXNjMiktPmIpKQotCiAjZGVmaW5lIGN1cnJlbnRfdGV4dF9hZGRyKCkgKHsgdm9pZCAqcGM7IF9fYXNtX18oIm1vdmwgJDFmLCUwXG4xOiI6Ij1nIiAocGMpKTsgcGM7IH0pCi0KIHN0cnVjdCBjcHVpbmZvX3g4NiB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTggeDg2OwogIF9fdTggeDg2X3ZlbmRvcjsKICBfX3U4IHg4Nl9tb2RlbDsKICBfX3U4IHg4Nl9tYXNrOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBjaGFyIHdwX3dvcmtzX29rOwogIGNoYXIgaGx0X3dvcmtzX29rOwogIGNoYXIgaGFyZF9tYXRoOwogIGNoYXIgcmZ1OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBpbnQgY3B1aWRfbGV2ZWw7CiAgdW5zaWduZWQgbG9uZyB4ODZfY2FwYWJpbGl0eVtOQ0FQSU5UU107CiAgY2hhciB4ODZfdmVuZG9yX2lkWzE2XTsKICBjaGFyIHg4Nl9tb2RlbF9pZFs2NF07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGludCB4ODZfY2FjaGVfc2l6ZTsKICBpbnQgeDg2X2NhY2hlX2FsaWdubWVudDsKICBjaGFyIGZkaXZfYnVnOwogIGNoYXIgZjAwZl9idWc7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGNoYXIgY29tYV9idWc7CiAgY2hhciBwYWQwOwogIGludCB4ODZfcG93ZXI7CiAgdW5zaWduZWQgbG9uZyBsb29wc19wZXJfamlmZnk7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGNoYXIgeDg2X21heF9jb3JlczsKICB1bnNpZ25lZCBjaGFyIGFwaWNpZDsKICB1bnNpZ25lZCBzaG9ydCB4ODZfY2xmbHVzaF9zaXplOwogfSBfX2F0dHJpYnV0ZV9fKChfX2FsaWduZWRfXyhTTVBfQ0FDSEVfQllURVMpKSk7Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFg4Nl9WRU5ET1JfSU5URUwgMAogI2RlZmluZSBYODZfVkVORE9SX0NZUklYIDEKICNkZWZpbmUgWDg2X1ZFTkRPUl9BTUQgMgogI2RlZmluZSBYODZfVkVORE9SX1VNQyAzCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBYODZfVkVORE9SX05FWEdFTiA0CiAjZGVmaW5lIFg4Nl9WRU5ET1JfQ0VOVEFVUiA1CiAjZGVmaW5lIFg4Nl9WRU5ET1JfVFJBTlNNRVRBIDcKICNkZWZpbmUgWDg2X1ZFTkRPUl9OU0MgOAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgWDg2X1ZFTkRPUl9OVU0gOQogI2RlZmluZSBYODZfVkVORE9SX1VOS05PV04gMHhmZgotCiAjZGVmaW5lIGNwdV9kYXRhKGNwdSkgYm9vdF9jcHVfZGF0YQogI2RlZmluZSBjdXJyZW50X2NwdV9kYXRhIGJvb3RfY3B1X2RhdGEKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgbG9hZF9jcjMocGdkaXIpIHdyaXRlX2NyMyhfX3BhKHBnZGlyKSkKLQogI2RlZmluZSBUQVNLX1NJWkUgKFBBR0VfT0ZGU0VUKQotCiAjZGVmaW5lIFRBU0tfVU5NQVBQRURfQkFTRSAoUEFHRV9BTElHTihUQVNLX1NJWkUgLyAzKSkKLQogI2RlZmluZSBIQVZFX0FSQ0hfUElDS19NTUFQX0xBWU9VVAotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJT19CSVRNQVBfQklUUyA2NTUzNgogI2RlZmluZSBJT19CSVRNQVBfQllURVMgKElPX0JJVE1BUF9CSVRTLzgpCiAjZGVmaW5lIElPX0JJVE1BUF9MT05HUyAoSU9fQklUTUFQX0JZVEVTL3NpemVvZihsb25nKSkKICNkZWZpbmUgSU9fQklUTUFQX09GRlNFVCBvZmZzZXRvZihzdHJ1Y3QgdHNzX3N0cnVjdCxpb19iaXRtYXApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJTlZBTElEX0lPX0JJVE1BUF9PRkZTRVQgMHg4MDAwCiAjZGVmaW5lIElOVkFMSURfSU9fQklUTUFQX09GRlNFVF9MQVpZIDB4OTAwMAotCiBzdHJ1Y3QgaTM4N19mc2F2ZV9zdHJ1Y3QgewogIGxvbmcgY3dkOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBsb25nIHN3ZDsKICBsb25nIHR3ZDsKICBsb25nIGZpcDsKICBsb25nIGZjczsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgbG9uZyBmb287CiAgbG9uZyBmb3M7CiAgbG9uZyBzdF9zcGFjZVsyMF07CiAgbG9uZyBzdGF0dXM7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKLQogc3RydWN0IGkzODdfZnhzYXZlX3N0cnVjdCB7CiAgdW5zaWduZWQgc2hvcnQgY3dkOwogIHVuc2lnbmVkIHNob3J0IHN3ZDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgc2hvcnQgdHdkOwogIHVuc2lnbmVkIHNob3J0IGZvcDsKICBsb25nIGZpcDsKICBsb25nIGZjczsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgbG9uZyBmb287CiAgbG9uZyBmb3M7CiAgbG9uZyBteGNzcjsKICBsb25nIG14Y3NyX21hc2s7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGxvbmcgc3Rfc3BhY2VbMzJdOwogIGxvbmcgeG1tX3NwYWNlWzMyXTsKICBsb25nIHBhZGRpbmdbNTZdOwogfSBfX2F0dHJpYnV0ZV9fICgoYWxpZ25lZCAoMTYpKSk7Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgaTM4N19zb2Z0X3N0cnVjdCB7CiAgbG9uZyBjd2Q7CiAgbG9uZyBzd2Q7CiAgbG9uZyB0d2Q7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGxvbmcgZmlwOwogIGxvbmcgZmNzOwogIGxvbmcgZm9vOwogIGxvbmcgZm9zOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBsb25nIHN0X3NwYWNlWzIwXTsKICB1bnNpZ25lZCBjaGFyIGZ0b3AsIGNoYW5nZWQsIGxvb2thaGVhZCwgbm9fdXBkYXRlLCBybSwgYWxpbWl0OwogIHN0cnVjdCBpbmZvICppbmZvOwogIHVuc2lnbmVkIGxvbmcgZW50cnlfZWlwOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07Ci0KIHVuaW9uIGkzODdfdW5pb24gewogIHN0cnVjdCBpMzg3X2ZzYXZlX3N0cnVjdCBmc2F2ZTsKICBzdHJ1Y3QgaTM4N19meHNhdmVfc3RydWN0IGZ4c2F2ZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IGkzODdfc29mdF9zdHJ1Y3Qgc29mdDsKIH07Ci0KIHR5cGVkZWYgc3RydWN0IHsKICB1bnNpZ25lZCBsb25nIHNlZzsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9IG1tX3NlZ21lbnRfdDsKLQogc3RydWN0IHRocmVhZF9zdHJ1Y3Q7Ci0KIHN0cnVjdCBpMzg2X2h3X3RzcyB7CiAgdW5zaWduZWQgc2hvcnQgYmFja19saW5rLF9fYmxoOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBsb25nIGVzcDA7CiAgdW5zaWduZWQgc2hvcnQgc3MwLF9fc3MwaDsKICB1bnNpZ25lZCBsb25nIGVzcDE7CiAgdW5zaWduZWQgc2hvcnQgc3MxLF9fc3MxaDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgbG9uZyBlc3AyOwogIHVuc2lnbmVkIHNob3J0IHNzMixfX3NzMmg7CiAgdW5zaWduZWQgbG9uZyBfX2NyMzsKICB1bnNpZ25lZCBsb25nIGVpcDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgbG9uZyBlZmxhZ3M7CiAgdW5zaWduZWQgbG9uZyBlYXgsZWN4LGVkeCxlYng7CiAgdW5zaWduZWQgbG9uZyBlc3A7CiAgdW5zaWduZWQgbG9uZyBlYnA7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGxvbmcgZXNpOwogIHVuc2lnbmVkIGxvbmcgZWRpOwogIHVuc2lnbmVkIHNob3J0IGVzLCBfX2VzaDsKICB1bnNpZ25lZCBzaG9ydCBjcywgX19jc2g7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIHNob3J0IHNzLCBfX3NzaDsKICB1bnNpZ25lZCBzaG9ydCBkcywgX19kc2g7CiAgdW5zaWduZWQgc2hvcnQgZnMsIF9fZnNoOwogIHVuc2lnbmVkIHNob3J0IGdzLCBfX2dzaDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgc2hvcnQgbGR0LCBfX2xkdGg7CiAgdW5zaWduZWQgc2hvcnQgdHJhY2UsIGlvX2JpdG1hcF9iYXNlOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKLQogc3RydWN0IHRzc19zdHJ1Y3QgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgaTM4Nl9od190c3MgeDg2X3RzczsKLQogIHVuc2lnbmVkIGxvbmcgaW9fYml0bWFwW0lPX0JJVE1BUF9MT05HUyArIDFdOwotCiAgdW5zaWduZWQgbG9uZyBpb19iaXRtYXBfbWF4OwogIHN0cnVjdCB0aHJlYWRfc3RydWN0ICppb19iaXRtYXBfb3duZXI7Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgbG9uZyBfX2NhY2hlbGluZV9maWxsZXJbMzVdOwotCiAgdW5zaWduZWQgbG9uZyBzdGFja1s2NF07CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwotCiAjZGVmaW5lIEFSQ0hfTUlOX1RBU0tBTElHTiAxNgotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IHRocmVhZF9zdHJ1Y3QgewotCiAgc3RydWN0IGRlc2Nfc3RydWN0IHRsc19hcnJheVtHRFRfRU5UUllfVExTX0VOVFJJRVNdOwogIHVuc2lnbmVkIGxvbmcgZXNwMDsKICB1bnNpZ25lZCBsb25nIHN5c2VudGVyX2NzOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBsb25nIGVpcDsKICB1bnNpZ25lZCBsb25nIGVzcDsKICB1bnNpZ25lZCBsb25nIGZzOwogIHVuc2lnbmVkIGxvbmcgZ3M7Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgbG9uZyBkZWJ1Z3JlZ1s4XTsKLQogIHVuc2lnbmVkIGxvbmcgY3IyLCB0cmFwX25vLCBlcnJvcl9jb2RlOwotCiAgdW5pb24gaTM4N191bmlvbiBpMzg3OwotCiAgc3RydWN0IHZtODZfc3RydWN0IF9fdXNlciAqIHZtODZfaW5mbzsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgbG9uZyBzY3JlZW5fYml0bWFwOwogIHVuc2lnbmVkIGxvbmcgdjg2ZmxhZ3MsIHY4Nm1hc2ssIHNhdmVkX2VzcDA7CiAgdW5zaWduZWQgaW50IHNhdmVkX2ZzLCBzYXZlZF9nczsKLQogIHVuc2lnbmVkIGxvbmcgKmlvX2JpdG1hcF9wdHI7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGxvbmcgaW9wbDsKLQogIHVuc2lnbmVkIGxvbmcgaW9fYml0bWFwX21heDsKIH07Ci0KICNkZWZpbmUgSU5JVF9USFJFQUQgeyAgIC5lc3AwID0gc2l6ZW9mKGluaXRfc3RhY2spICsgKGxvbmcpJmluaXRfc3RhY2ssICAgLnZtODZfaW5mbyA9IE5VTEwsICAgLnN5c2VudGVyX2NzID0gX19LRVJORUxfQ1MsICAgLmlvX2JpdG1hcF9wdHIgPSBOVUxMLCAgIC5mcyA9IF9fS0VSTkVMX1BFUkNQVSwgIH0KLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSU5JVF9UU1MgeyAgIC54ODZfdHNzID0geyAgIC5lc3AwID0gc2l6ZW9mKGluaXRfc3RhY2spICsgKGxvbmcpJmluaXRfc3RhY2ssICAgLnNzMCA9IF9fS0VSTkVMX0RTLCAgIC5zczEgPSBfX0tFUk5FTF9DUywgICAuaW9fYml0bWFwX2Jhc2UgPSBJTlZBTElEX0lPX0JJVE1BUF9PRkZTRVQsICAgfSwgICAuaW9fYml0bWFwID0geyBbIDAgLi4uIElPX0JJVE1BUF9MT05HU10gPSB+MCB9LCAgfQotCiAjZGVmaW5lIHN0YXJ0X3RocmVhZChyZWdzLCBuZXdfZWlwLCBuZXdfZXNwKSBkbyB7ICAgX19hc21fXygibW92bCAlMCwlJWdzIjogOiJyIiAoMCkpOyAgIHJlZ3MtPnhmcyA9IDA7ICAgc2V0X2ZzKFVTRVJfRFMpOyAgIHJlZ3MtPnhkcyA9IF9fVVNFUl9EUzsgICByZWdzLT54ZXMgPSBfX1VTRVJfRFM7ICAgcmVncy0+eHNzID0gX19VU0VSX0RTOyAgIHJlZ3MtPnhjcyA9IF9fVVNFUl9DUzsgICByZWdzLT5laXAgPSBuZXdfZWlwOyAgIHJlZ3MtPmVzcCA9IG5ld19lc3A7ICB9IHdoaWxlICgwKQotCiBzdHJ1Y3QgdGFza19zdHJ1Y3Q7CiBzdHJ1Y3QgbW1fc3RydWN0OwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBUSFJFQURfU0laRV9MT05HUyAoVEhSRUFEX1NJWkUvc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKQogI2RlZmluZSBLU1RLX1RPUChpbmZvKSAgKHsgICB1bnNpZ25lZCBsb25nICpfX3B0ciA9ICh1bnNpZ25lZCBsb25nICopKGluZm8pOyAgICh1bnNpZ25lZCBsb25nKSgmX19wdHJbVEhSRUFEX1NJWkVfTE9OR1NdKTsgIH0pCi0KICNkZWZpbmUgdGFza19wdF9yZWdzKHRhc2spICAoeyAgIHN0cnVjdCBwdF9yZWdzICpfX3JlZ3NfXzsgICBfX3JlZ3NfXyA9IChzdHJ1Y3QgcHRfcmVncyAqKShLU1RLX1RPUCh0YXNrX3N0YWNrX3BhZ2UodGFzaykpLTgpOyAgIF9fcmVnc19fIC0gMTsgIH0pCi0KICNkZWZpbmUgS1NUS19FSVAodGFzaykgKHRhc2tfcHRfcmVncyh0YXNrKS0+ZWlwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS1NUS19FU1AodGFzaykgKHRhc2tfcHRfcmVncyh0YXNrKS0+ZXNwKQotCiBzdHJ1Y3QgbWljcm9jb2RlX2hlYWRlciB7CiAgdW5zaWduZWQgaW50IGhkcnZlcjsKICB1bnNpZ25lZCBpbnQgcmV2OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBpbnQgZGF0ZTsKICB1bnNpZ25lZCBpbnQgc2lnOwogIHVuc2lnbmVkIGludCBja3N1bTsKICB1bnNpZ25lZCBpbnQgbGRydmVyOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBpbnQgcGY7CiAgdW5zaWduZWQgaW50IGRhdGFzaXplOwogIHVuc2lnbmVkIGludCB0b3RhbHNpemU7CiAgdW5zaWduZWQgaW50IHJlc2VydmVkWzNdOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07Ci0KIHN0cnVjdCBtaWNyb2NvZGUgewogIHN0cnVjdCBtaWNyb2NvZGVfaGVhZGVyIGhkcjsKICB1bnNpZ25lZCBpbnQgYml0c1swXTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwotCiB0eXBlZGVmIHN0cnVjdCBtaWNyb2NvZGUgbWljcm9jb2RlX3Q7CiB0eXBlZGVmIHN0cnVjdCBtaWNyb2NvZGVfaGVhZGVyIG1pY3JvY29kZV9oZWFkZXJfdDsKLQogc3RydWN0IGV4dGVuZGVkX3NpZ25hdHVyZSB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGludCBzaWc7CiAgdW5zaWduZWQgaW50IHBmOwogIHVuc2lnbmVkIGludCBja3N1bTsKIH07Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgZXh0ZW5kZWRfc2lndGFibGUgewogIHVuc2lnbmVkIGludCBjb3VudDsKICB1bnNpZ25lZCBpbnQgY2tzdW07CiAgdW5zaWduZWQgaW50IHJlc2VydmVkWzNdOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgZXh0ZW5kZWRfc2lnbmF0dXJlIHNpZ3NbMF07CiB9OwotCiAjZGVmaW5lIGNwdV9yZWxheCgpIHJlcF9ub3AoKQogI2RlZmluZSBwYXJhdmlydF9lbmFibGVkKCkgMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19jcHVpZCBuYXRpdmVfY3B1aWQKICNkZWZpbmUgZ2V0X2RlYnVncmVnKHZhciwgcmVnaXN0ZXIpICAgKHZhcikgPSBuYXRpdmVfZ2V0X2RlYnVncmVnKHJlZ2lzdGVyKQogI2RlZmluZSBzZXRfZGVidWdyZWcodmFsdWUsIHJlZ2lzdGVyKSAgIG5hdGl2ZV9zZXRfZGVidWdyZWcocmVnaXN0ZXIsIHZhbHVlKQogI2RlZmluZSBzZXRfaW9wbF9tYXNrIG5hdGl2ZV9zZXRfaW9wbF9tYXNrCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBHRU5FUklDX05PUDEgIi5ieXRlIDB4OTBcbiIKICNkZWZpbmUgR0VORVJJQ19OT1AyICIuYnl0ZSAweDg5LDB4ZjZcbiIKICNkZWZpbmUgR0VORVJJQ19OT1AzICIuYnl0ZSAweDhkLDB4NzYsMHgwMFxuIgogI2RlZmluZSBHRU5FUklDX05PUDQgIi5ieXRlIDB4OGQsMHg3NCwweDI2LDB4MDBcbiIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEdFTkVSSUNfTk9QNSBHRU5FUklDX05PUDEgR0VORVJJQ19OT1A0CiAjZGVmaW5lIEdFTkVSSUNfTk9QNiAiLmJ5dGUgMHg4ZCwweGI2LDB4MDAsMHgwMCwweDAwLDB4MDBcbiIKICNkZWZpbmUgR0VORVJJQ19OT1A3ICIuYnl0ZSAweDhkLDB4YjQsMHgyNiwweDAwLDB4MDAsMHgwMCwweDAwXG4iCiAjZGVmaW5lIEdFTkVSSUNfTk9QOCBHRU5FUklDX05PUDEgR0VORVJJQ19OT1A3CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLOF9OT1AxIEdFTkVSSUNfTk9QMQotI2RlZmluZSBLOF9OT1AyICIuYnl0ZSAweDY2LDB4OTBcbiIgCi0jZGVmaW5lIEs4X05PUDMgIi5ieXRlIDB4NjYsMHg2NiwweDkwXG4iIAotI2RlZmluZSBLOF9OT1A0ICIuYnl0ZSAweDY2LDB4NjYsMHg2NiwweDkwXG4iIAotI2RlZmluZSBLOF9OT1A1IEs4X05PUDMgSzhfTk9QMiAKKyNkZWZpbmUgSzhfTk9QMiAiLmJ5dGUgMHg2NiwweDkwXG4iCisjZGVmaW5lIEs4X05PUDMgIi5ieXRlIDB4NjYsMHg2NiwweDkwXG4iCisjZGVmaW5lIEs4X05PUDQgIi5ieXRlIDB4NjYsMHg2NiwweDY2LDB4OTBcbiIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEs4X05PUDUgSzhfTk9QMyBLOF9OT1AyCiAjZGVmaW5lIEs4X05PUDYgSzhfTk9QMyBLOF9OT1AzCiAjZGVmaW5lIEs4X05PUDcgSzhfTk9QNCBLOF9OT1AzCiAjZGVmaW5lIEs4X05PUDggSzhfTk9QNCBLOF9OT1A0CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLN19OT1AxIEdFTkVSSUNfTk9QMQotI2RlZmluZSBLN19OT1AyICIuYnl0ZSAweDhiLDB4YzBcbiIgCisjZGVmaW5lIEs3X05PUDIgIi5ieXRlIDB4OGIsMHhjMFxuIgogI2RlZmluZSBLN19OT1AzICIuYnl0ZSAweDhkLDB4MDQsMHgyMFxuIgogI2RlZmluZSBLN19OT1A0ICIuYnl0ZSAweDhkLDB4NDQsMHgyMCwweDAwXG4iCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLN19OT1A1IEs3X05PUDQgQVNNX05PUDEKICNkZWZpbmUgSzdfTk9QNiAiLmJ5dGUgMHg4ZCwweDgwLDAsMCwwLDBcbiIKICNkZWZpbmUgSzdfTk9QNyAiLmJ5dGUgMHg4RCwweDA0LDB4MDUsMCwwLDAsMFxuIgogI2RlZmluZSBLN19OT1A4IEs3X05PUDcgQVNNX05PUDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFA2X05PUDEgR0VORVJJQ19OT1AxCiAjZGVmaW5lIFA2X05PUDIgIi5ieXRlIDB4NjYsMHg5MFxuIgogI2RlZmluZSBQNl9OT1AzICIuYnl0ZSAweDBmLDB4MWYsMHgwMFxuIgogI2RlZmluZSBQNl9OT1A0ICIuYnl0ZSAweDBmLDB4MWYsMHg0MCwwXG4iCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQNl9OT1A1ICIuYnl0ZSAweDBmLDB4MWYsMHg0NCwweDAwLDBcbiIKICNkZWZpbmUgUDZfTk9QNiAiLmJ5dGUgMHg2NiwweDBmLDB4MWYsMHg0NCwweDAwLDBcbiIKICNkZWZpbmUgUDZfTk9QNyAiLmJ5dGUgMHgwZiwweDFmLDB4ODAsMCwwLDAsMFxuIgogI2RlZmluZSBQNl9OT1A4ICIuYnl0ZSAweDBmLDB4MWYsMHg4NCwweDAwLDAsMCwwLDBcbiIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFTTV9OT1AxIEdFTkVSSUNfTk9QMQogI2RlZmluZSBBU01fTk9QMiBHRU5FUklDX05PUDIKICNkZWZpbmUgQVNNX05PUDMgR0VORVJJQ19OT1AzCiAjZGVmaW5lIEFTTV9OT1A0IEdFTkVSSUNfTk9QNAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQVNNX05PUDUgR0VORVJJQ19OT1A1CiAjZGVmaW5lIEFTTV9OT1A2IEdFTkVSSUNfTk9QNgogI2RlZmluZSBBU01fTk9QNyBHRU5FUklDX05PUDcKICNkZWZpbmUgQVNNX05PUDggR0VORVJJQ19OT1A4CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBU01fTk9QX01BWCA4CiAjZGVmaW5lIEFSQ0hfSEFTX1BSRUZFVENICiAjZGVmaW5lIEFSQ0hfSEFTX1BSRUZFVENICiAjZGVmaW5lIEFSQ0hfSEFTX1BSRUZFVENIVworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQVJDSF9IQVNfU1BJTkxPQ0tfUFJFRkVUQ0gKICNkZWZpbmUgc3Bpbl9sb2NrX3ByZWZldGNoKHgpIHByZWZldGNodyh4KQotCiAjZGVmaW5lIGNhY2hlX2xpbmVfc2l6ZSgpIChib290X2NwdV9kYXRhLng4Nl9jYWNoZV9hbGlnbm1lbnQpCi0KICNlbmRpZgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9wdHJhY2UtYWJpLmggYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vcHRyYWNlLWFiaS5oCmluZGV4IDNlNmVhMDguLmJiYzdlODYgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9wdHJhY2UtYWJpLmgKKysrIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3B0cmFjZS1hYmkuaApAQCAtNyw4MiArNyw1NyBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX0FTTV9YODZfUFRSQUNFX0FCSV9ICiAjZGVmaW5lIF9BU01fWDg2X1BUUkFDRV9BQklfSAotCi0jaWZkZWYgX19pMzg2X18KLQogI2RlZmluZSBFQlggMAogI2RlZmluZSBFQ1ggMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRURYIDIKICNkZWZpbmUgRVNJIDMKICNkZWZpbmUgRURJIDQKICNkZWZpbmUgRUJQIDUKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEVBWCA2CiAjZGVmaW5lIERTIDcKICNkZWZpbmUgRVMgOAogI2RlZmluZSBGUyA5CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBHUyAxMAogI2RlZmluZSBPUklHX0VBWCAxMQogI2RlZmluZSBFSVAgMTIKICNkZWZpbmUgQ1MgMTMKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEVGTCAxNAogI2RlZmluZSBVRVNQIDE1CiAjZGVmaW5lIFNTIDE2CiAjZGVmaW5lIEZSQU1FX1NJWkUgMTcKLQotI2Vsc2UKLQotI2lmIGRlZmluZWQoX19BU1NFTUJMWV9fKSB8fCBkZWZpbmVkKF9fRlJBTUVfT0ZGU0VUUykKLSNkZWZpbmUgUjE1IDAKLSNkZWZpbmUgUjE0IDgKLSNkZWZpbmUgUjEzIDE2Ci0jZGVmaW5lIFIxMiAyNAotI2RlZmluZSBSQlAgMzIKLSNkZWZpbmUgUkJYIDQwCi0KLSNkZWZpbmUgUjExIDQ4Ci0jZGVmaW5lIFIxMCA1NgotI2RlZmluZSBSOSA2NAotI2RlZmluZSBSOCA3MgotI2RlZmluZSBSQVggODAKLSNkZWZpbmUgUkNYIDg4Ci0jZGVmaW5lIFJEWCA5NgotI2RlZmluZSBSU0kgMTA0Ci0jZGVmaW5lIFJESSAxMTIKLSNkZWZpbmUgT1JJR19SQVggMTIwICAKLQotI2RlZmluZSBSSVAgMTI4Ci0jZGVmaW5lIENTIDEzNgotI2RlZmluZSBFRkxBR1MgMTQ0Ci0jZGVmaW5lIFJTUCAxNTIKLSNkZWZpbmUgU1MgMTYwCi0jZGVmaW5lIEFSR09GRlNFVCBSMTEKLSNlbmRpZgotCi0jZGVmaW5lIEZSQU1FX1NJWkUgMTY4Ci0KLSNlbmRpZgotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQVFJBQ0VfR0VUUkVHUyAxMgogI2RlZmluZSBQVFJBQ0VfU0VUUkVHUyAxMwogI2RlZmluZSBQVFJBQ0VfR0VURlBSRUdTIDE0CiAjZGVmaW5lIFBUUkFDRV9TRVRGUFJFR1MgMTUKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBUUkFDRV9HRVRGUFhSRUdTIDE4CiAjZGVmaW5lIFBUUkFDRV9TRVRGUFhSRUdTIDE5Ci0KICNkZWZpbmUgUFRSQUNFX09MRFNFVE9QVElPTlMgMjEKLQogI2RlZmluZSBQVFJBQ0VfR0VUX1RIUkVBRF9BUkVBIDI1CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQVFJBQ0VfU0VUX1RIUkVBRF9BUkVBIDI2Ci0KICNpZmRlZiBfX3g4Nl82NF9fCiAjZGVmaW5lIFBUUkFDRV9BUkNIX1BSQ1RMIDMwCiAjZWxzZQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUFRSQUNFX1NZU0VNVSAzMQogI2RlZmluZSBQVFJBQ0VfU1lTRU1VX1NJTkdMRVNURVAgMzIKICNlbmRpZgotCiAjZW5kaWYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vcHRyYWNlLmggYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vcHRyYWNlLmgKaW5kZXggNDc0M2UwZi4uMjkxNDQxMSAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3B0cmFjZS5oCisrKyBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9wdHJhY2UuaApAQCAtNyw2OCArNyw0MyBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX0FTTV9YODZfUFRSQUNFX0gKICNkZWZpbmUgX0FTTV9YODZfUFRSQUNFX0gKLQotI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+ICAKKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgogI2luY2x1ZGUgPGFzbS9wdHJhY2UtYWJpLmg+Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwotCi0jaWZkZWYgX19pMzg2X18KLQogc3RydWN0IHB0X3JlZ3MgewogIGxvbmcgZWJ4OwogIGxvbmcgZWN4OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBsb25nIGVkeDsKICBsb25nIGVzaTsKICBsb25nIGVkaTsKICBsb25nIGVicDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgbG9uZyBlYXg7CiAgaW50IHhkczsKICBpbnQgeGVzOwogIGludCB4ZnM7Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgbG9uZyBvcmlnX2VheDsKICBsb25nIGVpcDsKICBpbnQgeGNzOwogIGxvbmcgZWZsYWdzOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBsb25nIGVzcDsKICBpbnQgeHNzOwogfTsKLQotI2Vsc2UKLQotc3RydWN0IHB0X3JlZ3MgewotIHVuc2lnbmVkIGxvbmcgcjE1OwotIHVuc2lnbmVkIGxvbmcgcjE0OwotIHVuc2lnbmVkIGxvbmcgcjEzOwotIHVuc2lnbmVkIGxvbmcgcjEyOwotIHVuc2lnbmVkIGxvbmcgcmJwOwotIHVuc2lnbmVkIGxvbmcgcmJ4OwotCi0gdW5zaWduZWQgbG9uZyByMTE7Ci0gdW5zaWduZWQgbG9uZyByMTA7Ci0gdW5zaWduZWQgbG9uZyByOTsKLSB1bnNpZ25lZCBsb25nIHI4OwotIHVuc2lnbmVkIGxvbmcgcmF4OwotIHVuc2lnbmVkIGxvbmcgcmN4OwotIHVuc2lnbmVkIGxvbmcgcmR4OwotIHVuc2lnbmVkIGxvbmcgcnNpOwotIHVuc2lnbmVkIGxvbmcgcmRpOwotIHVuc2lnbmVkIGxvbmcgb3JpZ19yYXg7Ci0KLSB1bnNpZ25lZCBsb25nIHJpcDsKLSB1bnNpZ25lZCBsb25nIGNzOwotIHVuc2lnbmVkIGxvbmcgZWZsYWdzOwotIHVuc2lnbmVkIGxvbmcgcnNwOwotIHVuc2lnbmVkIGxvbmcgc3M7Ci0KLX07Ci0KICNlbmRpZgotI2VuZGlmCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9yZXF1aXJlZC1mZWF0dXJlcy5oIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3JlcXVpcmVkLWZlYXR1cmVzLmgKaW5kZXggYTk2NTE3YS4uZGY5ZDMzYyAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3JlcXVpcmVkLWZlYXR1cmVzLmgKKysrIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3JlcXVpcmVkLWZlYXR1cmVzLmgKQEAgLTcsMzggKzcsNDIgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9BU01fUkVRVUlSRURfRkVBVFVSRVNfSAogI2RlZmluZSBfQVNNX1JFUVVJUkVEX0ZFQVRVUkVTX0ggMQotCiAjZGVmaW5lIE5FRURfRlBVICgxPDwoWDg2X0ZFQVRVUkVfRlBVICYgMzEpKQotCiAjZGVmaW5lIE5FRURfUEFFIDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE5FRURfQ1g4IDAKLQogI2RlZmluZSBORUVEX0NNT1YgMAotCiAjZGVmaW5lIE5FRURfM0ROT1cgMAotCiAjZGVmaW5lIE5FRURfUFNFIDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE5FRURfTVNSIDAKICNkZWZpbmUgTkVFRF9QR0UgMAogI2RlZmluZSBORUVEX0ZYU1IgMAogI2RlZmluZSBORUVEX1hNTSAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBORUVEX1hNTTIgMAogI2RlZmluZSBORUVEX0xNIDAKLQogI2RlZmluZSBSRVFVSVJFRF9NQVNLMCAoTkVFRF9GUFV8TkVFRF9QU0V8TkVFRF9NU1J8TkVFRF9QQUV8ICBORUVEX0NYOHxORUVEX1BHRXxORUVEX0ZYU1J8TkVFRF9DTU9WfCAgTkVFRF9YTU18TkVFRF9YTU0yKQogI2RlZmluZSBTU0VfTUFTSyAoTkVFRF9YTU18TkVFRF9YTU0yKQotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBSRVFVSVJFRF9NQVNLMSAoTkVFRF9MTXxORUVEXzNETk9XKQotCiAjZGVmaW5lIFJFUVVJUkVEX01BU0syIDAKICNkZWZpbmUgUkVRVUlSRURfTUFTSzMgMAogI2RlZmluZSBSRVFVSVJFRF9NQVNLNCAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBSRVFVSVJFRF9NQVNLNSAwCiAjZGVmaW5lIFJFUVVJUkVEX01BU0s2IDAKICNkZWZpbmUgUkVRVUlSRURfTUFTSzcgMAotCiAjZW5kaWYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vcmVzb3VyY2UuaCBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9yZXNvdXJjZS5oCmluZGV4IDI5ZDllMTIuLjM3MWFkYjUgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9yZXNvdXJjZS5oCisrKyBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9yZXNvdXJjZS5oCkBAIC03LDYgKzcsMTMgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvcmVzb3VyY2UuaD4KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9yd2xvY2suaCBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9yd2xvY2suaAppbmRleCAzNjkzNTQyLi44MmE5NmUwIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vcndsb2NrLmgKKysrIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3J3bG9jay5oCkBAIC03LDEyICs3LDE4IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfQVNNX1g4Nl9SV0xPQ0tfSAogI2RlZmluZSBfQVNNX1g4Nl9SV0xPQ0tfSAotCiAjZGVmaW5lIFJXX0xPQ0tfQklBUyAweDAxMDAwMDAwCiAjZGVmaW5lIFJXX0xPQ0tfQklBU19TVFIgIjB4MDEwMDAwMDAiCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9zY2F0dGVybGlzdC5oIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3NjYXR0ZXJsaXN0LmgKaW5kZXggZmE0ZDBjYy4uYjY5MWQwOCAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3NjYXR0ZXJsaXN0LmgKKysrIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3NjYXR0ZXJsaXN0LmgKQEAgLTcsNiArNywxMyBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSNpbmNsdWRlICJzY2F0dGVybGlzdF82NC5oIgorI2luY2x1ZGUgInNjYXR0ZXJsaXN0XzMyLmgiCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vc2NhdHRlcmxpc3RfMzIuaCBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9zY2F0dGVybGlzdF8zMi5oCmluZGV4IDI5MDQ0YzMuLmUzYzc3N2QgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9zY2F0dGVybGlzdF8zMi5oCisrKyBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9zY2F0dGVybGlzdF8zMi5oCkBAIC03LDI1ICs3LDI5IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfSTM4Nl9TQ0FUVEVSTElTVF9ICiAjZGVmaW5lIF9JMzg2X1NDQVRURVJMSVNUX0gKLQogI2luY2x1ZGUgPGFzbS90eXBlcy5oPgotCiBzdHJ1Y3Qgc2NhdHRlcmxpc3QgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBsb25nIHBhZ2VfbGluazsKICB1bnNpZ25lZCBpbnQgb2Zmc2V0OwogIGRtYV9hZGRyX3QgZG1hX2FkZHJlc3M7CiAgdW5zaWduZWQgaW50IGxlbmd0aDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwotCiAjZGVmaW5lIEFSQ0hfSEFTX1NHX0NIQUlOCi0KICNkZWZpbmUgc2dfZG1hX2FkZHJlc3Moc2cpICgoc2cpLT5kbWFfYWRkcmVzcykKICNkZWZpbmUgc2dfZG1hX2xlbihzZykgKChzZyktPmxlbmd0aCkKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSVNBX0RNQV9USFJFU0hPTEQgKDB4MDBmZmZmZmYpCi0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3NlY3Rpb25zLmggYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vc2VjdGlvbnMuaAppbmRleCBhMjFkYTNlLi43ZjM1YTU5IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vc2VjdGlvbnMuaAorKysgYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vc2VjdGlvbnMuaApAQCAtNyw2ICs3LDEzIEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2luY2x1ZGUgPGFzbS1nZW5lcmljL3NlY3Rpb25zLmg+CmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vc2VnbWVudC5oIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3NlZ21lbnQuaAppbmRleCA2ODc3YTgwLi4xNDVlMjFkIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vc2VnbWVudC5oCisrKyBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9zZWdtZW50LmgKQEAgLTcsNiArNywxMyBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSNpbmNsdWRlICJzZWdtZW50XzY0LmgiCisjaW5jbHVkZSAic2VnbWVudF8zMi5oIgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3NlZ21lbnRfMzIuaCBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9zZWdtZW50XzMyLmgKaW5kZXggNTRiMzEyYi4uYTliMThlYyAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3NlZ21lbnRfMzIuaAorKysgYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vc2VnbWVudF8zMi5oCkBAIC03LDgzICs3LDc1IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfQVNNX1NFR01FTlRfSAogI2RlZmluZSBfQVNNX1NFR01FTlRfSAotCiAjZGVmaW5lIEdEVF9FTlRSWV9UTFNfRU5UUklFUyAzCiAjZGVmaW5lIEdEVF9FTlRSWV9UTFNfTUlOIDYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEdEVF9FTlRSWV9UTFNfTUFYIChHRFRfRU5UUllfVExTX01JTiArIEdEVF9FTlRSWV9UTFNfRU5UUklFUyAtIDEpCi0KICNkZWZpbmUgVExTX1NJWkUgKEdEVF9FTlRSWV9UTFNfRU5UUklFUyAqIDgpCi0KICNkZWZpbmUgR0RUX0VOVFJZX0RFRkFVTFRfVVNFUl9DUyAxNAogI2RlZmluZSBfX1VTRVJfQ1MgKEdEVF9FTlRSWV9ERUZBVUxUX1VTRVJfQ1MgKiA4ICsgMykKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgR0RUX0VOVFJZX0RFRkFVTFRfVVNFUl9EUyAxNQogI2RlZmluZSBfX1VTRVJfRFMgKEdEVF9FTlRSWV9ERUZBVUxUX1VTRVJfRFMgKiA4ICsgMykKLQogI2RlZmluZSBHRFRfRU5UUllfS0VSTkVMX0JBU0UgMTIKLQogI2RlZmluZSBHRFRfRU5UUllfS0VSTkVMX0NTIChHRFRfRU5UUllfS0VSTkVMX0JBU0UgKyAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19LRVJORUxfQ1MgKEdEVF9FTlRSWV9LRVJORUxfQ1MgKiA4KQotCiAjZGVmaW5lIEdEVF9FTlRSWV9LRVJORUxfRFMgKEdEVF9FTlRSWV9LRVJORUxfQkFTRSArIDEpCiAjZGVmaW5lIF9fS0VSTkVMX0RTIChHRFRfRU5UUllfS0VSTkVMX0RTICogOCkKLQogI2RlZmluZSBHRFRfRU5UUllfVFNTIChHRFRfRU5UUllfS0VSTkVMX0JBU0UgKyA0KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgR0RUX0VOVFJZX0xEVCAoR0RUX0VOVFJZX0tFUk5FTF9CQVNFICsgNSkKLQogI2RlZmluZSBHRFRfRU5UUllfUE5QQklPU19CQVNFIChHRFRfRU5UUllfS0VSTkVMX0JBU0UgKyA2KQogI2RlZmluZSBHRFRfRU5UUllfQVBNQklPU19CQVNFIChHRFRfRU5UUllfS0VSTkVMX0JBU0UgKyAxMSkKLQogI2RlZmluZSBHRFRfRU5UUllfRVNQRklYX1NTIChHRFRfRU5UUllfS0VSTkVMX0JBU0UgKyAxNCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fRVNQRklYX1NTIChHRFRfRU5UUllfRVNQRklYX1NTICogOCkKLQogI2RlZmluZSBHRFRfRU5UUllfUEVSQ1BVIChHRFRfRU5UUllfS0VSTkVMX0JBU0UgKyAxNSkKICNkZWZpbmUgX19LRVJORUxfUEVSQ1BVIDAKLQogI2RlZmluZSBHRFRfRU5UUllfRE9VQkxFRkFVTFRfVFNTIDMxCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEdEVF9FTlRSSUVTIDMyCiAjZGVmaW5lIEdEVF9TSVpFIChHRFRfRU5UUklFUyAqIDgpCi0KICNkZWZpbmUgR0RUX0VOVFJZX0JPT1RfQ1MgMgogI2RlZmluZSBfX0JPT1RfQ1MgKEdEVF9FTlRSWV9CT09UX0NTICogOCkKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgR0RUX0VOVFJZX0JPT1RfRFMgKEdEVF9FTlRSWV9CT09UX0NTICsgMSkKICNkZWZpbmUgX19CT09UX0RTIChHRFRfRU5UUllfQk9PVF9EUyAqIDgpCi0KICNkZWZpbmUgR0RUX0VOVFJZX1BOUEJJT1NfQ1MzMiAoR0RUX0VOVFJZX1BOUEJJT1NfQkFTRSArIDApCiAjZGVmaW5lIEdEVF9FTlRSWV9QTlBCSU9TX0NTMTYgKEdEVF9FTlRSWV9QTlBCSU9TX0JBU0UgKyAxKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgR0RUX0VOVFJZX1BOUEJJT1NfRFMgKEdEVF9FTlRSWV9QTlBCSU9TX0JBU0UgKyAyKQogI2RlZmluZSBHRFRfRU5UUllfUE5QQklPU19UUzEgKEdEVF9FTlRSWV9QTlBCSU9TX0JBU0UgKyAzKQogI2RlZmluZSBHRFRfRU5UUllfUE5QQklPU19UUzIgKEdEVF9FTlRSWV9QTlBCSU9TX0JBU0UgKyA0KQotCi0jZGVmaW5lIFBOUF9DUzMyIChHRFRfRU5UUllfUE5QQklPU19DUzMyICogOCkgIAotI2RlZmluZSBQTlBfQ1MxNiAoR0RUX0VOVFJZX1BOUEJJT1NfQ1MxNiAqIDgpICAKLSNkZWZpbmUgUE5QX0RTIChHRFRfRU5UUllfUE5QQklPU19EUyAqIDgpICAKLSNkZWZpbmUgUE5QX1RTMSAoR0RUX0VOVFJZX1BOUEJJT1NfVFMxICogOCkgIAotI2RlZmluZSBQTlBfVFMyIChHRFRfRU5UUllfUE5QQklPU19UUzIgKiA4KSAgCi0KKyNkZWZpbmUgUE5QX0NTMzIgKEdEVF9FTlRSWV9QTlBCSU9TX0NTMzIgKiA4KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgUE5QX0NTMTYgKEdEVF9FTlRSWV9QTlBCSU9TX0NTMTYgKiA4KQorI2RlZmluZSBQTlBfRFMgKEdEVF9FTlRSWV9QTlBCSU9TX0RTICogOCkKKyNkZWZpbmUgUE5QX1RTMSAoR0RUX0VOVFJZX1BOUEJJT1NfVFMxICogOCkKKyNkZWZpbmUgUE5QX1RTMiAoR0RUX0VOVFJZX1BOUEJJT1NfVFMyICogOCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIElEVF9FTlRSSUVTIDI1NgotCiAjZGVmaW5lIFNFR01FTlRfUlBMX01BU0sgMHgzCi0KICNkZWZpbmUgU0VHTUVOVF9USV9NQVNLIDB4NAotCiAjZGVmaW5lIFVTRVJfUlBMIDB4MwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTRUdNRU5UX0xEVCAweDQKICNkZWZpbmUgU0VHTUVOVF9HRFQgMHgwCi0KICNkZWZpbmUgZ2V0X2tlcm5lbF9ycGwoKSAwCi0KICNkZWZpbmUgU0VHTUVOVF9JU19LRVJORUxfQ09ERSh4KSAoKCh4KSAmIDB4ZmMpID09IEdEVF9FTlRSWV9LRVJORUxfQ1MgKiA4KQotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTRUdNRU5UX0lTX0ZMQVRfQ09ERSh4KSAoKCh4KSAmIDB4ZWMpID09IEdEVF9FTlRSWV9LRVJORUxfQ1MgKiA4KQotCiAjZGVmaW5lIFNFR01FTlRfSVNfUE5QX0NPREUoeCkgKCgoeCkgJiAweGY0KSA9PSBHRFRfRU5UUllfUE5QQklPU19CQVNFICogOCkKLQogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vc2VtYXBob3JlLmggYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vc2VtYXBob3JlLmgKaW5kZXggOGI0YzU5NS4uN2EyMjIzZSAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3NlbWFwaG9yZS5oCisrKyBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9zZW1hcGhvcmUuaApAQCAtNyw2ICs3LDEzIEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotI2luY2x1ZGUgInNlbWFwaG9yZV82NC5oIgorI2luY2x1ZGUgInNlbWFwaG9yZV8zMi5oIgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3NlbWFwaG9yZV8zMi5oIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3NlbWFwaG9yZV8zMi5oCmluZGV4IGJhYmU3NzkuLjdkNDhkMGUgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9zZW1hcGhvcmVfMzIuaAorKysgYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vc2VtYXBob3JlXzMyLmgKQEAgLTcsMTEgKzcsMTcgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9JMzg2X1NFTUFQSE9SRV9ICiAjZGVmaW5lIF9JMzg2X1NFTUFQSE9SRV9ICi0KICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+Ci0KICNlbmRpZgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9zZW1idWYuaCBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9zZW1idWYuaAppbmRleCAxNjk1MjA4Li5kMWNiMjk2IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vc2VtYnVmLmgKKysrIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3NlbWJ1Zi5oCkBAIC03LDIwICs3LDI4IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfQVNNX1g4Nl9TRU1CVUZfSAogI2RlZmluZSBfQVNNX1g4Nl9TRU1CVUZfSAotCiBzdHJ1Y3Qgc2VtaWQ2NF9kcyB7CiAgc3RydWN0IGlwYzY0X3Blcm0gc2VtX3Blcm07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fa2VybmVsX3RpbWVfdCBzZW1fb3RpbWU7CiAgdW5zaWduZWQgbG9uZyBfX3VudXNlZDE7CiAgX19rZXJuZWxfdGltZV90IHNlbV9jdGltZTsKICB1bnNpZ25lZCBsb25nIF9fdW51c2VkMjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgbG9uZyBzZW1fbnNlbXM7CiAgdW5zaWduZWQgbG9uZyBfX3VudXNlZDM7CiAgdW5zaWduZWQgbG9uZyBfX3VudXNlZDQ7CiB9OwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vc2V0dXAuaCBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9zZXR1cC5oCmluZGV4IDY5NmVkOTcuLmZlNmNhMGYgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9zZXR1cC5oCisrKyBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9zZXR1cC5oCkBAIC03LDExICs3LDE3IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfQVNNX1g4Nl9TRVRVUF9ICiAjZGVmaW5lIF9BU01fWDg2X1NFVFVQX0gKLQogI2RlZmluZSBDT01NQU5EX0xJTkVfU0laRSAyMDQ4Ci0KICNlbmRpZgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9zaG1idWYuaCBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9zaG1idWYuaAppbmRleCAzMTRjY2I3Li41ZWNmZTA4IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vc2htYnVmLmgKKysrIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3NobWJ1Zi5oCkBAIC03LDQzICs3LDQ4IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfQVNNX1g4Nl9TSE1CVUZfSAogI2RlZmluZSBfQVNNX1g4Nl9TSE1CVUZfSAotCiBzdHJ1Y3Qgc2htaWQ2NF9kcyB7CiAgc3RydWN0IGlwYzY0X3Blcm0gc2htX3Blcm07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHNpemVfdCBzaG1fc2Vnc3o7CiAgX19rZXJuZWxfdGltZV90IHNobV9hdGltZTsKLSNpZmRlZiBfX2kzODZfXwogIHVuc2lnbmVkIGxvbmcgX191bnVzZWQxOwotI2VuZGlmCiAgX19rZXJuZWxfdGltZV90IHNobV9kdGltZTsKLSNpZmRlZiBfX2kzODZfXworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBsb25nIF9fdW51c2VkMjsKLSNlbmRpZgogIF9fa2VybmVsX3RpbWVfdCBzaG1fY3RpbWU7Ci0jaWZkZWYgX19pMzg2X18KICB1bnNpZ25lZCBsb25nIF9fdW51c2VkMzsKLSNlbmRpZgogIF9fa2VybmVsX3BpZF90IHNobV9jcGlkOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX2tlcm5lbF9waWRfdCBzaG1fbHBpZDsKICB1bnNpZ25lZCBsb25nIHNobV9uYXR0Y2g7CiAgdW5zaWduZWQgbG9uZyBfX3VudXNlZDQ7CiAgdW5zaWduZWQgbG9uZyBfX3VudXNlZDU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKLQogc3RydWN0IHNobWluZm82NCB7CiAgdW5zaWduZWQgbG9uZyBzaG1tYXg7CiAgdW5zaWduZWQgbG9uZyBzaG1taW47CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGxvbmcgc2htbW5pOwogIHVuc2lnbmVkIGxvbmcgc2htc2VnOwogIHVuc2lnbmVkIGxvbmcgc2htYWxsOwogIHVuc2lnbmVkIGxvbmcgX191bnVzZWQxOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBsb25nIF9fdW51c2VkMjsKICB1bnNpZ25lZCBsb25nIF9fdW51c2VkMzsKICB1bnNpZ25lZCBsb25nIF9fdW51c2VkNDsKIH07Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9zaG1wYXJhbS5oIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3NobXBhcmFtLmgKaW5kZXggZTY2N2JhMS4uZjc2MTYwNiAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3NobXBhcmFtLmgKKysrIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3NobXBhcmFtLmgKQEAgLTcsMTEgKzcsMTcgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9BU01fWDg2X1NITVBBUkFNX0gKICNkZWZpbmUgX0FTTV9YODZfU0hNUEFSQU1fSAotCi0jZGVmaW5lIFNITUxCQSBQQUdFX1NJWkUgIAotCisjZGVmaW5lIFNITUxCQSBQQUdFX1NJWkUKICNlbmRpZgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9zaWdjb250ZXh0LmggYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vc2lnY29udGV4dC5oCmluZGV4IGE4Zjc2ZjAuLjM5MDE4OWYgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9zaWdjb250ZXh0LmgKKysrIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3NpZ2NvbnRleHQuaApAQCAtNywxMjYgKzcsODcgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9BU01fWDg2X1NJR0NPTlRFWFRfSAogI2RlZmluZSBfQVNNX1g4Nl9TSUdDT05URVhUX0gKLQogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CiAjaW5jbHVkZSA8YXNtL3R5cGVzLmg+Ci0KLSNpZmRlZiBfX2kzODZfXwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IF9mcHJlZyB7CiAgdW5zaWduZWQgc2hvcnQgc2lnbmlmaWNhbmRbNF07CiAgdW5zaWduZWQgc2hvcnQgZXhwb25lbnQ7CiB9OwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IF9mcHhyZWcgewogIHVuc2lnbmVkIHNob3J0IHNpZ25pZmljYW5kWzRdOwogIHVuc2lnbmVkIHNob3J0IGV4cG9uZW50OwogIHVuc2lnbmVkIHNob3J0IHBhZGRpbmdbM107CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKLQogc3RydWN0IF94bW1yZWcgewogIHVuc2lnbmVkIGxvbmcgZWxlbWVudFs0XTsKIH07Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgX2Zwc3RhdGUgewotCiAgdW5zaWduZWQgbG9uZyBjdzsKICB1bnNpZ25lZCBsb25nIHN3OwogIHVuc2lnbmVkIGxvbmcgdGFnOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBsb25nIGlwb2ZmOwogIHVuc2lnbmVkIGxvbmcgY3NzZWw7CiAgdW5zaWduZWQgbG9uZyBkYXRhb2ZmOwogIHVuc2lnbmVkIGxvbmcgZGF0YXNlbDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IF9mcHJlZyBfc3RbOF07CiAgdW5zaWduZWQgc2hvcnQgc3RhdHVzOwogIHVuc2lnbmVkIHNob3J0IG1hZ2ljOwotCiAgdW5zaWduZWQgbG9uZyBfZnhzcl9lbnZbNl07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGxvbmcgbXhjc3I7CiAgdW5zaWduZWQgbG9uZyByZXNlcnZlZDsKICBzdHJ1Y3QgX2ZweHJlZyBfZnhzcl9zdFs4XTsKICBzdHJ1Y3QgX3htbXJlZyBfeG1tWzhdOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBsb25nIHBhZGRpbmdbNTZdOwogfTsKLQogI2RlZmluZSBYODZfRlhTUl9NQUdJQyAweDAwMDAKLQogc3RydWN0IHNpZ2NvbnRleHQgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBzaG9ydCBncywgX19nc2g7CiAgdW5zaWduZWQgc2hvcnQgZnMsIF9fZnNoOwogIHVuc2lnbmVkIHNob3J0IGVzLCBfX2VzaDsKICB1bnNpZ25lZCBzaG9ydCBkcywgX19kc2g7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGxvbmcgZWRpOwogIHVuc2lnbmVkIGxvbmcgZXNpOwogIHVuc2lnbmVkIGxvbmcgZWJwOwogIHVuc2lnbmVkIGxvbmcgZXNwOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBsb25nIGVieDsKICB1bnNpZ25lZCBsb25nIGVkeDsKICB1bnNpZ25lZCBsb25nIGVjeDsKICB1bnNpZ25lZCBsb25nIGVheDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgbG9uZyB0cmFwbm87CiAgdW5zaWduZWQgbG9uZyBlcnI7CiAgdW5zaWduZWQgbG9uZyBlaXA7CiAgdW5zaWduZWQgc2hvcnQgY3MsIF9fY3NoOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBsb25nIGVmbGFnczsKICB1bnNpZ25lZCBsb25nIGVzcF9hdF9zaWduYWw7CiAgdW5zaWduZWQgc2hvcnQgc3MsIF9fc3NoOwogIHN0cnVjdCBfZnBzdGF0ZSBfX3VzZXIgKiBmcHN0YXRlOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBsb25nIG9sZG1hc2s7CiAgdW5zaWduZWQgbG9uZyBjcjI7CiB9OwotCi0jZWxzZQotCi1zdHJ1Y3QgX2Zwc3RhdGUgewotIF9fdTE2IGN3ZDsKLSBfX3UxNiBzd2Q7Ci0gX191MTYgdHdkOwotIF9fdTE2IGZvcDsKLSBfX3U2NCByaXA7Ci0gX191NjQgcmRwOwotIF9fdTMyIG14Y3NyOwotIF9fdTMyIG14Y3NyX21hc2s7Ci0gX191MzIgc3Rfc3BhY2VbMzJdOwotIF9fdTMyIHhtbV9zcGFjZVs2NF07Ci0gX191MzIgcmVzZXJ2ZWQyWzI0XTsKLX07Ci0KLXN0cnVjdCBzaWdjb250ZXh0IHsKLSB1bnNpZ25lZCBsb25nIHI4OwotIHVuc2lnbmVkIGxvbmcgcjk7Ci0gdW5zaWduZWQgbG9uZyByMTA7Ci0gdW5zaWduZWQgbG9uZyByMTE7Ci0gdW5zaWduZWQgbG9uZyByMTI7Ci0gdW5zaWduZWQgbG9uZyByMTM7Ci0gdW5zaWduZWQgbG9uZyByMTQ7Ci0gdW5zaWduZWQgbG9uZyByMTU7Ci0gdW5zaWduZWQgbG9uZyByZGk7Ci0gdW5zaWduZWQgbG9uZyByc2k7Ci0gdW5zaWduZWQgbG9uZyByYnA7Ci0gdW5zaWduZWQgbG9uZyByYng7Ci0gdW5zaWduZWQgbG9uZyByZHg7Ci0gdW5zaWduZWQgbG9uZyByYXg7Ci0gdW5zaWduZWQgbG9uZyByY3g7Ci0gdW5zaWduZWQgbG9uZyByc3A7Ci0gdW5zaWduZWQgbG9uZyByaXA7Ci0gdW5zaWduZWQgbG9uZyBlZmxhZ3M7Ci0gdW5zaWduZWQgc2hvcnQgY3M7Ci0gdW5zaWduZWQgc2hvcnQgZ3M7Ci0gdW5zaWduZWQgc2hvcnQgZnM7Ci0gdW5zaWduZWQgc2hvcnQgX19wYWQwOwotIHVuc2lnbmVkIGxvbmcgZXJyOwotIHVuc2lnbmVkIGxvbmcgdHJhcG5vOwotIHVuc2lnbmVkIGxvbmcgb2xkbWFzazsKLSB1bnNpZ25lZCBsb25nIGNyMjsKLSBzdHJ1Y3QgX2Zwc3RhdGUgX191c2VyICpmcHN0YXRlOwotIHVuc2lnbmVkIGxvbmcgcmVzZXJ2ZWQxWzhdOwotfTsKLQogI2VuZGlmCi0KLSNlbmRpZgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9zaWdpbmZvLmggYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vc2lnaW5mby5oCmluZGV4IDBkMjFkMjIuLjY0NTliZTcgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9zaWdpbmZvLmgKKysrIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3NpZ2luZm8uaApAQCAtNywxNSArNywyMCBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX0FTTV9YODZfU0lHSU5GT19ICiAjZGVmaW5lIF9BU01fWDg2X1NJR0lORk9fSAotCiAjaWZkZWYgX194ODZfNjRfXwogI2RlZmluZSBfX0FSQ0hfU0lfUFJFQU1CTEVfU0laRSAoNCAqIHNpemVvZihpbnQpKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlbmRpZgotCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvc2lnaW5mby5oPgotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9zaWduYWwuaCBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9zaWduYWwuaAppbmRleCA2ZDg0ZWFiLi4xYzhmMmY2IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vc2lnbmFsLmgKKysrIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3NpZ25hbC5oCkBAIC03LDEyMSArNywxMTIgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9BU01fWDg2X1NJR05BTF9ICiAjZGVmaW5lIF9BU01fWDg2X1NJR05BTF9ICi0KICNpZm5kZWYgX19BU1NFTUJMWV9fCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+Ci0KIHN0cnVjdCBzaWdpbmZvOwotCiAjZGVmaW5lIE5TSUcgMzIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgc2lnc2V0X3Q7Ci0KICNlbmRpZgotCiAjZGVmaW5lIFNJR0hVUCAxCiAjZGVmaW5lIFNJR0lOVCAyCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTSUdRVUlUIDMKICNkZWZpbmUgU0lHSUxMIDQKICNkZWZpbmUgU0lHVFJBUCA1CiAjZGVmaW5lIFNJR0FCUlQgNgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU0lHSU9UIDYKICNkZWZpbmUgU0lHQlVTIDcKICNkZWZpbmUgU0lHRlBFIDgKICNkZWZpbmUgU0lHS0lMTCA5CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTSUdVU1IxIDEwCiAjZGVmaW5lIFNJR1NFR1YgMTEKICNkZWZpbmUgU0lHVVNSMiAxMgogI2RlZmluZSBTSUdQSVBFIDEzCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTSUdBTFJNIDE0CiAjZGVmaW5lIFNJR1RFUk0gMTUKICNkZWZpbmUgU0lHU1RLRkxUIDE2CiAjZGVmaW5lIFNJR0NITEQgMTcKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNJR0NPTlQgMTgKICNkZWZpbmUgU0lHU1RPUCAxOQogI2RlZmluZSBTSUdUU1RQIDIwCiAjZGVmaW5lIFNJR1RUSU4gMjEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNJR1RUT1UgMjIKICNkZWZpbmUgU0lHVVJHIDIzCiAjZGVmaW5lIFNJR1hDUFUgMjQKICNkZWZpbmUgU0lHWEZTWiAyNQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU0lHVlRBTFJNIDI2CiAjZGVmaW5lIFNJR1BST0YgMjcKICNkZWZpbmUgU0lHV0lOQ0ggMjgKICNkZWZpbmUgU0lHSU8gMjkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNJR1BPTEwgU0lHSU8KLQogI2RlZmluZSBTSUdQV1IgMzAKICNkZWZpbmUgU0lHU1lTIDMxCiAjZGVmaW5lIFNJR1VOVVNFRCAzMQotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTSUdSVE1JTiAzMgogI2RlZmluZSBTSUdSVE1BWCBfTlNJRwotCiAjZGVmaW5lIFNBX05PQ0xEU1RPUCAweDAwMDAwMDAxdQogI2RlZmluZSBTQV9OT0NMRFdBSVQgMHgwMDAwMDAwMnUKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNBX1NJR0lORk8gMHgwMDAwMDAwNHUKICNkZWZpbmUgU0FfT05TVEFDSyAweDA4MDAwMDAwdQogI2RlZmluZSBTQV9SRVNUQVJUIDB4MTAwMDAwMDB1CiAjZGVmaW5lIFNBX05PREVGRVIgMHg0MDAwMDAwMHUKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNBX1JFU0VUSEFORCAweDgwMDAwMDAwdQotCiAjZGVmaW5lIFNBX05PTUFTSyBTQV9OT0RFRkVSCiAjZGVmaW5lIFNBX09ORVNIT1QgU0FfUkVTRVRIQU5ECi0KICNkZWZpbmUgU0FfUkVTVE9SRVIgMHgwNDAwMDAwMAotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTU19PTlNUQUNLIDEKICNkZWZpbmUgU1NfRElTQUJMRSAyCi0KICNkZWZpbmUgTUlOU0lHU1RLU1ogMjA0OAogI2RlZmluZSBTSUdTVEtTWiA4MTkyCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvc2lnbmFsLmg+Ci0KICNpZm5kZWYgX19BU1NFTUJMWV9fCi0KLSNpZmRlZiBfX2kzODZfXwotCiBzdHJ1Y3Qgc2lnYWN0aW9uIHsKICB1bmlvbiB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fc2lnaGFuZGxlcl90IF9zYV9oYW5kbGVyOwogIHZvaWQgKCpfc2Ffc2lnYWN0aW9uKShpbnQsIHN0cnVjdCBzaWdpbmZvICosIHZvaWQgKik7CiAgfSBfdTsKICBzaWdzZXRfdCBzYV9tYXNrOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBsb25nIHNhX2ZsYWdzOwogIHZvaWQgKCpzYV9yZXN0b3Jlcikodm9pZCk7CiB9OwotCiAjZGVmaW5lIHNhX2hhbmRsZXIgX3UuX3NhX2hhbmRsZXIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIHNhX3NpZ2FjdGlvbiBfdS5fc2Ffc2lnYWN0aW9uCi0KLSNlbHNlCi0KLXN0cnVjdCBzaWdhY3Rpb24gewotIF9fc2lnaGFuZGxlcl90IHNhX2hhbmRsZXI7Ci0gdW5zaWduZWQgbG9uZyBzYV9mbGFnczsKLSBfX3NpZ3Jlc3RvcmVfdCBzYV9yZXN0b3JlcjsKLSBzaWdzZXRfdCBzYV9tYXNrOwotfTsKLQotc3RydWN0IGtfc2lnYWN0aW9uIHsKLSBzdHJ1Y3Qgc2lnYWN0aW9uIHNhOwotfTsKLQotI2VuZGlmCi0KIHR5cGVkZWYgc3RydWN0IHNpZ2FsdHN0YWNrIHsKICB2b2lkIF9fdXNlciAqc3Nfc3A7CiAgaW50IHNzX2ZsYWdzOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzaXplX3Qgc3Nfc2l6ZTsKIH0gc3RhY2tfdDsKLQogI2VuZGlmCi0KICNlbmRpZgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9zbXAuaCBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9zbXAuaAppbmRleCA0MGQ0NjAxLi40ZTQzOWQ1IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vc21wLmgKKysrIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3NtcC5oCkBAIC03LDYgKzcsMTMgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0jaW5jbHVkZSAic21wXzY0LmgiCisjaW5jbHVkZSAic21wXzMyLmgiCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vc21wXzMyLmggYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vc21wXzMyLmgKaW5kZXggZjA5M2EyNC4uM2JjNjRmNiAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3NtcF8zMi5oCisrKyBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9zbXBfMzIuaApAQCAtNywyOCArNywzMCBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX19BU01fU01QX0gKICNkZWZpbmUgX19BU01fU01QX0gKLQogI2lmbmRlZiBfX0FTU0VNQkxZX18KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgogI2luY2x1ZGUgPGxpbnV4L2NwdW1hc2suaD4KICNlbmRpZgotCiAjZGVmaW5lIEJBRF9BUElDSUQgMHhGRnUKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgc2FmZV9zbXBfcHJvY2Vzc29yX2lkKCkgMAogI2RlZmluZSBjcHVfcGh5c2ljYWxfaWQoY3B1KSBib290X2NwdV9waHlzaWNhbF9hcGljaWQKLQotI2RlZmluZSBOT19QUk9DX0lEIDB4RkYgIAotCisjZGVmaW5lIE5PX1BST0NfSUQgMHhGRgogI2lmbmRlZiBfX0FTU0VNQkxZX18KLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgaGFyZF9zbXBfcHJvY2Vzc29yX2lkKCkgMAotCiAjZW5kaWYKLQogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vc29ja2V0LmggYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vc29ja2V0LmgKaW5kZXggMjdkMjQzZi4uNTBhOTg3NCAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3NvY2tldC5oCisrKyBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9zb2NrZXQuaApAQCAtNyw1NyArNywxMyBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSNpZm5kZWYgX0FTTV9TT0NLRVRfSAotI2RlZmluZSBfQVNNX1NPQ0tFVF9ICi0KLSNpbmNsdWRlIDxhc20vc29ja2lvcy5oPgotCi0jZGVmaW5lIFNPTF9TT0NLRVQgMQotCi0jZGVmaW5lIFNPX0RFQlVHIDEKLSNkZWZpbmUgU09fUkVVU0VBRERSIDIKLSNkZWZpbmUgU09fVFlQRSAzCi0jZGVmaW5lIFNPX0VSUk9SIDQKLSNkZWZpbmUgU09fRE9OVFJPVVRFIDUKLSNkZWZpbmUgU09fQlJPQURDQVNUIDYKLSNkZWZpbmUgU09fU05EQlVGIDcKLSNkZWZpbmUgU09fUkNWQlVGIDgKLSNkZWZpbmUgU09fU05EQlVGRk9SQ0UgMzIKLSNkZWZpbmUgU09fUkNWQlVGRk9SQ0UgMzMKLSNkZWZpbmUgU09fS0VFUEFMSVZFIDkKLSNkZWZpbmUgU09fT09CSU5MSU5FIDEwCi0jZGVmaW5lIFNPX05PX0NIRUNLIDExCi0jZGVmaW5lIFNPX1BSSU9SSVRZIDEyCi0jZGVmaW5lIFNPX0xJTkdFUiAxMwotI2RlZmluZSBTT19CU0RDT01QQVQgMTQKLQotI2RlZmluZSBTT19QQVNTQ1JFRCAxNgotI2RlZmluZSBTT19QRUVSQ1JFRCAxNwotI2RlZmluZSBTT19SQ1ZMT1dBVCAxOAotI2RlZmluZSBTT19TTkRMT1dBVCAxOQotI2RlZmluZSBTT19SQ1ZUSU1FTyAyMAotI2RlZmluZSBTT19TTkRUSU1FTyAyMQotCi0jZGVmaW5lIFNPX1NFQ1VSSVRZX0FVVEhFTlRJQ0FUSU9OIDIyCi0jZGVmaW5lIFNPX1NFQ1VSSVRZX0VOQ1JZUFRJT05fVFJBTlNQT1JUIDIzCi0jZGVmaW5lIFNPX1NFQ1VSSVRZX0VOQ1JZUFRJT05fTkVUV09SSyAyNAotCi0jZGVmaW5lIFNPX0JJTkRUT0RFVklDRSAyNQotCi0jZGVmaW5lIFNPX0FUVEFDSF9GSUxURVIgMjYKLSNkZWZpbmUgU09fREVUQUNIX0ZJTFRFUiAyNwotCi0jZGVmaW5lIFNPX1BFRVJOQU1FIDI4Ci0jZGVmaW5lIFNPX1RJTUVTVEFNUCAyOQotI2RlZmluZSBTQ01fVElNRVNUQU1QIFNPX1RJTUVTVEFNUAotCi0jZGVmaW5lIFNPX0FDQ0VQVENPTk4gMzAKLQotI2RlZmluZSBTT19QRUVSU0VDIDMxCi0jZGVmaW5lIFNPX1BBU1NTRUMgMzQKLSNkZWZpbmUgU09fVElNRVNUQU1QTlMgMzUKLSNkZWZpbmUgU0NNX1RJTUVTVEFNUE5TIFNPX1RJTUVTVEFNUE5TCi0KLSNlbmRpZgorI2luY2x1ZGUgPGFzbS1nZW5lcmljL3NvY2tldC5oPgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3NvY2tpb3MuaCBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9zb2NraW9zLmgKaW5kZXggZWJkZmE5OC4uZDA4MjlkYiAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3NvY2tpb3MuaAorKysgYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vc29ja2lvcy5oCkBAIC03LDE3ICs3LDI0IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfQVNNX1g4Nl9TT0NLSU9TX0gKICNkZWZpbmUgX0FTTV9YODZfU09DS0lPU19ICi0KICNkZWZpbmUgRklPU0VUT1dOIDB4ODkwMQogI2RlZmluZSBTSU9DU1BHUlAgMHg4OTAyCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBGSU9HRVRPV04gMHg4OTAzCiAjZGVmaW5lIFNJT0NHUEdSUCAweDg5MDQKICNkZWZpbmUgU0lPQ0FUTUFSSyAweDg5MDUKLSNkZWZpbmUgU0lPQ0dTVEFNUCAweDg5MDYgIAotI2RlZmluZSBTSU9DR1NUQU1QTlMgMHg4OTA3ICAKLQorI2RlZmluZSBTSU9DR1NUQU1QIDB4ODkwNgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgU0lPQ0dTVEFNUE5TIDB4ODkwNwogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vc3BpbmxvY2suaCBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9zcGlubG9jay5oCmluZGV4IDEwZDEyM2EuLjI4NmJmODYgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9zcGlubG9jay5oCisrKyBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9zcGlubG9jay5oCkBAIC03LDYgKzcsMTMgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0jaW5jbHVkZSAic3BpbmxvY2tfNjQuaCIKKyNpbmNsdWRlICJzcGlubG9ja18zMi5oIgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3NwaW5sb2NrXzMyLmggYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vc3BpbmxvY2tfMzIuaAppbmRleCAxNzE3ODNlLi41ZDJlYjA1IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vc3BpbmxvY2tfMzIuaAorKysgYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vc3BpbmxvY2tfMzIuaApAQCAtNywyMyArNywzMCBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX19BU01fU1BJTkxPQ0tfSAogI2RlZmluZSBfX0FTTV9TUElOTE9DS19ICi0KICNpbmNsdWRlIDxhc20vYXRvbWljLmg+CiAjaW5jbHVkZSA8YXNtL3J3bG9jay5oPgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNpbmNsdWRlIDxhc20vcGFnZS5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgotCiAjZGVmaW5lIENMSV9TVFJJTkcgImNsaSIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNUSV9TVFJJTkcgInN0aSIKICNkZWZpbmUgQ0xJX1NUSV9DTE9CQkVSUwogI2RlZmluZSBDTElfU1RJX0lOUFVUX0FSR1MKLQogI2RlZmluZSBfcmF3X3NwaW5fcmVsYXgobG9jaykgY3B1X3JlbGF4KCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9yYXdfcmVhZF9yZWxheChsb2NrKSBjcHVfcmVsYXgoKQogI2RlZmluZSBfcmF3X3dyaXRlX3JlbGF4KGxvY2spIGNwdV9yZWxheCgpCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9zcGlubG9ja190eXBlcy5oIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3NwaW5sb2NrX3R5cGVzLmgKaW5kZXggYWI5MTRjNC4uOWFmM2NjZSAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3NwaW5sb2NrX3R5cGVzLmgKKysrIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3NwaW5sb2NrX3R5cGVzLmgKQEAgLTcsMjUgKzcsMjkgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9fQVNNX1NQSU5MT0NLX1RZUEVTX0gKICNkZWZpbmUgX19BU01fU1BJTkxPQ0tfVFlQRVNfSAotCiAjaWZuZGVmIF9fTElOVVhfU1BJTkxPQ0tfVFlQRVNfSAogI2Vycm9yICJwbGVhc2UgZG9uJ3QgaW5jbHVkZSB0aGlzIGZpbGUgZGlyZWN0bHkiCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2VuZGlmCi0KIHR5cGVkZWYgc3RydWN0IHsKICB1bnNpZ25lZCBpbnQgc2xvY2s7CiB9IHJhd19zcGlubG9ja190OwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX1JBV19TUElOX0xPQ0tfVU5MT0NLRUQgeyAxIH0KLQogdHlwZWRlZiBzdHJ1Y3QgewogIHVuc2lnbmVkIGludCBsb2NrOwogfSByYXdfcndsb2NrX3Q7Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fUkFXX1JXX0xPQ0tfVU5MT0NLRUQgeyBSV19MT0NLX0JJQVMgfQotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9zdGF0LmggYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vc3RhdC5oCmluZGV4IDgzN2Q3MTYuLjM4NzhjODggMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9zdGF0LmgKKysrIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3N0YXQuaApAQCAtNywxMTQgKzcsODUgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9BU01fWDg2X1NUQVRfSAogI2RlZmluZSBfQVNNX1g4Nl9TVEFUX0gKLQogI2RlZmluZSBTVEFUX0hBVkVfTlNFQyAxCi0KLSNpZmRlZiBfX2kzODZfXwogc3RydWN0IHN0YXQgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBsb25nIHN0X2RldjsKICB1bnNpZ25lZCBsb25nIHN0X2lubzsKICB1bnNpZ25lZCBzaG9ydCBzdF9tb2RlOwogIHVuc2lnbmVkIHNob3J0IHN0X25saW5rOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBzaG9ydCBzdF91aWQ7CiAgdW5zaWduZWQgc2hvcnQgc3RfZ2lkOwogIHVuc2lnbmVkIGxvbmcgc3RfcmRldjsKICB1bnNpZ25lZCBsb25nIHN0X3NpemU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGxvbmcgc3RfYmxrc2l6ZTsKICB1bnNpZ25lZCBsb25nIHN0X2Jsb2NrczsKICB1bnNpZ25lZCBsb25nIHN0X2F0aW1lOwogIHVuc2lnbmVkIGxvbmcgc3RfYXRpbWVfbnNlYzsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgbG9uZyBzdF9tdGltZTsKICB1bnNpZ25lZCBsb25nIHN0X210aW1lX25zZWM7CiAgdW5zaWduZWQgbG9uZyBzdF9jdGltZTsKICB1bnNpZ25lZCBsb25nIHN0X2N0aW1lX25zZWM7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGxvbmcgX191bnVzZWQ0OwogIHVuc2lnbmVkIGxvbmcgX191bnVzZWQ1OwogfTsKLQogI2RlZmluZSBTVEFUNjRfSEFTX0JST0tFTl9TVF9JTk8gMQotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IHN0YXQ2NCB7CiAgdW5zaWduZWQgbG9uZyBsb25nIHN0X2RldjsKICB1bnNpZ25lZCBjaGFyIF9fcGFkMFs0XTsKLQogIHVuc2lnbmVkIGxvbmcgX19zdF9pbm87Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgaW50IHN0X21vZGU7CiAgdW5zaWduZWQgaW50IHN0X25saW5rOwotCiAgdW5zaWduZWQgbG9uZyBzdF91aWQ7CiAgdW5zaWduZWQgbG9uZyBzdF9naWQ7Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgbG9uZyBsb25nIHN0X3JkZXY7CiAgdW5zaWduZWQgY2hhciBfX3BhZDNbNF07Ci0KICBsb25nIGxvbmcgc3Rfc2l6ZTsKICB1bnNpZ25lZCBsb25nIHN0X2Jsa3NpemU7Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgbG9uZyBsb25nIHN0X2Jsb2NrczsKLQogIHVuc2lnbmVkIGxvbmcgc3RfYXRpbWU7CiAgdW5zaWduZWQgbG9uZyBzdF9hdGltZV9uc2VjOwotCiAgdW5zaWduZWQgbG9uZyBzdF9tdGltZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgaW50IHN0X210aW1lX25zZWM7Ci0KICB1bnNpZ25lZCBsb25nIHN0X2N0aW1lOwogIHVuc2lnbmVkIGxvbmcgc3RfY3RpbWVfbnNlYzsKLQogIHVuc2lnbmVkIGxvbmcgbG9uZyBzdF9pbm87CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKLQotI2Vsc2UKLQotc3RydWN0IHN0YXQgewotIHVuc2lnbmVkIGxvbmcgc3RfZGV2OwotIHVuc2lnbmVkIGxvbmcgc3RfaW5vOwotIHVuc2lnbmVkIGxvbmcgc3Rfbmxpbms7Ci0KLSB1bnNpZ25lZCBpbnQgc3RfbW9kZTsKLSB1bnNpZ25lZCBpbnQgc3RfdWlkOwotIHVuc2lnbmVkIGludCBzdF9naWQ7Ci0gdW5zaWduZWQgaW50IF9fcGFkMDsKLSB1bnNpZ25lZCBsb25nIHN0X3JkZXY7Ci0gbG9uZyBzdF9zaXplOwotIGxvbmcgc3RfYmxrc2l6ZTsKLSBsb25nIHN0X2Jsb2NrczsKLQotIHVuc2lnbmVkIGxvbmcgc3RfYXRpbWU7Ci0gdW5zaWduZWQgbG9uZyBzdF9hdGltZV9uc2VjOwotIHVuc2lnbmVkIGxvbmcgc3RfbXRpbWU7Ci0gdW5zaWduZWQgbG9uZyBzdF9tdGltZV9uc2VjOwotIHVuc2lnbmVkIGxvbmcgc3RfY3RpbWU7Ci0gdW5zaWduZWQgbG9uZyBzdF9jdGltZV9uc2VjOwotIGxvbmcgX191bnVzZWRbM107Ci19OwotI2VuZGlmCi0KIHN0cnVjdCBfX29sZF9rZXJuZWxfc3RhdCB7CiAgdW5zaWduZWQgc2hvcnQgc3RfZGV2OwogIHVuc2lnbmVkIHNob3J0IHN0X2lubzsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgc2hvcnQgc3RfbW9kZTsKICB1bnNpZ25lZCBzaG9ydCBzdF9ubGluazsKICB1bnNpZ25lZCBzaG9ydCBzdF91aWQ7CiAgdW5zaWduZWQgc2hvcnQgc3RfZ2lkOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBzaG9ydCBzdF9yZGV2OwotI2lmZGVmIF9faTM4Nl9fCiAgdW5zaWduZWQgbG9uZyBzdF9zaXplOwogIHVuc2lnbmVkIGxvbmcgc3RfYXRpbWU7CiAgdW5zaWduZWQgbG9uZyBzdF9tdGltZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgbG9uZyBzdF9jdGltZTsKLSNlbHNlCi0gdW5zaWduZWQgaW50IHN0X3NpemU7Ci0gdW5zaWduZWQgaW50IHN0X2F0aW1lOwotIHVuc2lnbmVkIGludCBzdF9tdGltZTsKLSB1bnNpZ25lZCBpbnQgc3RfY3RpbWU7Ci0jZW5kaWYKIH07Ci0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3N0YXRmcy5oIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3N0YXRmcy5oCmluZGV4IDU5MmQ4NjQuLjc0NzI2MDUgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9zdGF0ZnMuaAorKysgYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vc3RhdGZzLmgKQEAgLTcsNTYgKzcsMTcgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9BU01fWDg2X1NUQVRGU19ICiAjZGVmaW5lIF9BU01fWDg2X1NUQVRGU19ICi0KLSNpZmRlZiBfX2kzODZfXwogI2luY2x1ZGUgPGFzbS1nZW5lcmljL3N0YXRmcy5oPgotI2Vsc2UKLQotc3RydWN0IHN0YXRmcyB7Ci0gbG9uZyBmX3R5cGU7Ci0gbG9uZyBmX2JzaXplOwotIGxvbmcgZl9ibG9ja3M7Ci0gbG9uZyBmX2JmcmVlOwotIGxvbmcgZl9iYXZhaWw7Ci0gbG9uZyBmX2ZpbGVzOwotIGxvbmcgZl9mZnJlZTsKLSBfX2tlcm5lbF9mc2lkX3QgZl9mc2lkOwotIGxvbmcgZl9uYW1lbGVuOwotIGxvbmcgZl9mcnNpemU7Ci0gbG9uZyBmX3NwYXJlWzVdOwotfTsKLQotc3RydWN0IHN0YXRmczY0IHsKLSBsb25nIGZfdHlwZTsKLSBsb25nIGZfYnNpemU7Ci0gbG9uZyBmX2Jsb2NrczsKLSBsb25nIGZfYmZyZWU7Ci0gbG9uZyBmX2JhdmFpbDsKLSBsb25nIGZfZmlsZXM7Ci0gbG9uZyBmX2ZmcmVlOwotIF9fa2VybmVsX2ZzaWRfdCBmX2ZzaWQ7Ci0gbG9uZyBmX25hbWVsZW47Ci0gbG9uZyBmX2Zyc2l6ZTsKLSBsb25nIGZfc3BhcmVbNV07Ci19OwotCi1zdHJ1Y3QgY29tcGF0X3N0YXRmczY0IHsKLSBfX3UzMiBmX3R5cGU7Ci0gX191MzIgZl9ic2l6ZTsKLSBfX3U2NCBmX2Jsb2NrczsKLSBfX3U2NCBmX2JmcmVlOwotIF9fdTY0IGZfYmF2YWlsOwotIF9fdTY0IGZfZmlsZXM7Ci0gX191NjQgZl9mZnJlZTsKLSBfX2tlcm5lbF9mc2lkX3QgZl9mc2lkOwotIF9fdTMyIGZfbmFtZWxlbjsKLSBfX3UzMiBmX2Zyc2l6ZTsKLSBfX3UzMiBmX3NwYXJlWzVdOwotfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKLQogI2VuZGlmCi0jZW5kaWYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vc3RyaW5nLmggYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vc3RyaW5nLmgKaW5kZXggOTJmYTI5MS4uODc0YjJmMCAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3N0cmluZy5oCisrKyBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9zdHJpbmcuaApAQCAtNyw2ICs3LDEzIEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotI2luY2x1ZGUgInN0cmluZ182NC5oIgorI2luY2x1ZGUgInN0cmluZ18zMi5oIgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3N0cmluZ18zMi5oIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3N0cmluZ18zMi5oCmluZGV4IDU4YTcyZDcuLjMwNjM4NTggMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9zdHJpbmdfMzIuaAorKysgYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vc3RyaW5nXzMyLmgKQEAgLTcsOSArNywxNSBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX0kzODZfU1RSSU5HX0hfCiAjZGVmaW5lIF9JMzg2X1NUUklOR19IXwotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9zd2lvdGxiLmggYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vc3dpb3RsYi5oCmluZGV4IDVlZTM3YjMuLjc5YmQzZTcgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9zd2lvdGxiLmgKKysrIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3N3aW90bGIuaApAQCAtNywxMyArNywxOCBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX0FTTV9TV0lPVExCX0gKICNkZWZpbmUgX0FTTV9TV0lPVExCX0ggMQotCiAjaW5jbHVkZSA8YXNtL2RtYS1tYXBwaW5nLmg+Ci0KICNkZWZpbmUgc3dpb3RsYiAwCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9zeXN0ZW0uaCBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9zeXN0ZW0uaAppbmRleCA4MzQxOTNiLi4xMjc2N2NkIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vc3lzdGVtLmgKKysrIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3N5c3RlbS5oCkBAIC03LDYgKzcsMTMgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0jaW5jbHVkZSAic3lzdGVtXzY0LmgiCisjaW5jbHVkZSAic3lzdGVtXzMyLmgiCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vc3lzdGVtXzMyLmggYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vc3lzdGVtXzMyLmgKaW5kZXggZDc5OWFlNi4uZWMwMWNjNiAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3N5c3RlbV8zMi5oCisrKyBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS9zeXN0ZW1fMzIuaApAQCAtNywyNyArNywzNSBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX19BU01fU1lTVEVNX0gKICNkZWZpbmUgX19BU01fU1lTVEVNX0gKLQogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGFzbS9zZWdtZW50Lmg+CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2luY2x1ZGUgPGFzbS9jcHVmZWF0dXJlLmg+CiAjaW5jbHVkZSA8YXNtL2NtcHhjaGcuaD4KLQogI2RlZmluZSBub3AoKSBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIm5vcCIpCiAjZGVmaW5lIG1iKCkgYWx0ZXJuYXRpdmUoImxvY2s7IGFkZGwgJDAsMCglJWVzcCkiLCAibWZlbmNlIiwgWDg2X0ZFQVRVUkVfWE1NMikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIHJtYigpIGFsdGVybmF0aXZlKCJsb2NrOyBhZGRsICQwLDAoJSVlc3ApIiwgImxmZW5jZSIsIFg4Nl9GRUFUVVJFX1hNTTIpCiAjZGVmaW5lIHdtYigpIGFsdGVybmF0aXZlKCJsb2NrOyBhZGRsICQwLDAoJSVlc3ApIiwgInNmZW5jZSIsIFg4Nl9GRUFUVVJFX1hNTSkKICNkZWZpbmUgcmVhZF9iYXJyaWVyX2RlcGVuZHMoKSBkbyB7IH0gd2hpbGUoMCkKICNkZWZpbmUgc21wX21iKCkgYmFycmllcigpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBzbXBfcm1iKCkgYmFycmllcigpCiAjZGVmaW5lIHNtcF93bWIoKSBiYXJyaWVyKCkKICNkZWZpbmUgc21wX3JlYWRfYmFycmllcl9kZXBlbmRzKCkgZG8geyB9IHdoaWxlKDApCiAjZGVmaW5lIHNldF9tYih2YXIsIHZhbHVlKSBkbyB7IHZhciA9IHZhbHVlOyBiYXJyaWVyKCk7IH0gd2hpbGUgKDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2luY2x1ZGUgPGxpbnV4L2lycWZsYWdzLmg+CiAjZGVmaW5lIEhBVkVfRElTQUJMRV9ITFQKLQogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vdGVybWJpdHMuaCBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS90ZXJtYml0cy5oCmluZGV4IDZkN2M1ZTguLmZjZTdiYWMgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS90ZXJtYml0cy5oCisrKyBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS90ZXJtYml0cy5oCkBAIC03LDE5NSArNywyMzAgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9BU01fWDg2X1RFUk1CSVRTX0gKICNkZWZpbmUgX0FTTV9YODZfVEVSTUJJVFNfSAotCiAjaW5jbHVkZSA8bGludXgvcG9zaXhfdHlwZXMuaD4KLQogdHlwZWRlZiB1bnNpZ25lZCBjaGFyIGNjX3Q7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogdHlwZWRlZiB1bnNpZ25lZCBpbnQgc3BlZWRfdDsKIHR5cGVkZWYgdW5zaWduZWQgaW50IHRjZmxhZ190OwotCiAjZGVmaW5lIE5DQ1MgMTkKIHN0cnVjdCB0ZXJtaW9zIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdGNmbGFnX3QgY19pZmxhZzsKICB0Y2ZsYWdfdCBjX29mbGFnOwogIHRjZmxhZ190IGNfY2ZsYWc7CiAgdGNmbGFnX3QgY19sZmxhZzsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgY2NfdCBjX2xpbmU7CiAgY2NfdCBjX2NjW05DQ1NdOwogfTsKLQogc3RydWN0IHRlcm1pb3MyIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdGNmbGFnX3QgY19pZmxhZzsKICB0Y2ZsYWdfdCBjX29mbGFnOwogIHRjZmxhZ190IGNfY2ZsYWc7CiAgdGNmbGFnX3QgY19sZmxhZzsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgY2NfdCBjX2xpbmU7CiAgY2NfdCBjX2NjW05DQ1NdOwogIHNwZWVkX3QgY19pc3BlZWQ7CiAgc3BlZWRfdCBjX29zcGVlZDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwotCiBzdHJ1Y3Qga3Rlcm1pb3MgewogIHRjZmxhZ190IGNfaWZsYWc7CiAgdGNmbGFnX3QgY19vZmxhZzsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdGNmbGFnX3QgY19jZmxhZzsKICB0Y2ZsYWdfdCBjX2xmbGFnOwogIGNjX3QgY19saW5lOwogIGNjX3QgY19jY1tOQ0NTXTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3BlZWRfdCBjX2lzcGVlZDsKICBzcGVlZF90IGNfb3NwZWVkOwogfTsKLQogI2RlZmluZSBWSU5UUiAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWUVVJVCAxCiAjZGVmaW5lIFZFUkFTRSAyCiAjZGVmaW5lIFZLSUxMIDMKICNkZWZpbmUgVkVPRiA0CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWVElNRSA1CiAjZGVmaW5lIFZNSU4gNgogI2RlZmluZSBWU1dUQyA3CiAjZGVmaW5lIFZTVEFSVCA4CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWU1RPUCA5CiAjZGVmaW5lIFZTVVNQIDEwCiAjZGVmaW5lIFZFT0wgMTEKICNkZWZpbmUgVlJFUFJJTlQgMTIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFZESVNDQVJEIDEzCiAjZGVmaW5lIFZXRVJBU0UgMTQKICNkZWZpbmUgVkxORVhUIDE1CiAjZGVmaW5lIFZFT0wyIDE2Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIElHTkJSSyAwMDAwMDAxCiAjZGVmaW5lIEJSS0lOVCAwMDAwMDAyCiAjZGVmaW5lIElHTlBBUiAwMDAwMDA0CiAjZGVmaW5lIFBBUk1SSyAwMDAwMDEwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJTlBDSyAwMDAwMDIwCiAjZGVmaW5lIElTVFJJUCAwMDAwMDQwCiAjZGVmaW5lIElOTENSIDAwMDAxMDAKICNkZWZpbmUgSUdOQ1IgMDAwMDIwMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSUNSTkwgMDAwMDQwMAogI2RlZmluZSBJVUNMQyAwMDAxMDAwCiAjZGVmaW5lIElYT04gMDAwMjAwMAogI2RlZmluZSBJWEFOWSAwMDA0MDAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJWE9GRiAwMDEwMDAwCiAjZGVmaW5lIElNQVhCRUwgMDAyMDAwMAogI2RlZmluZSBJVVRGOCAwMDQwMDAwCi0KICNkZWZpbmUgT1BPU1QgMDAwMDAwMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgT0xDVUMgMDAwMDAwMgogI2RlZmluZSBPTkxDUiAwMDAwMDA0CiAjZGVmaW5lIE9DUk5MIDAwMDAwMTAKICNkZWZpbmUgT05PQ1IgMDAwMDAyMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgT05MUkVUIDAwMDAwNDAKICNkZWZpbmUgT0ZJTEwgMDAwMDEwMAogI2RlZmluZSBPRkRFTCAwMDAwMjAwCiAjZGVmaW5lIE5MRExZIDAwMDA0MDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE5MMCAwMDAwMDAwCiAjZGVmaW5lIE5MMSAwMDAwNDAwCiAjZGVmaW5lIENSRExZIDAwMDMwMDAKICNkZWZpbmUgQ1IwIDAwMDAwMDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIENSMSAwMDAxMDAwCiAjZGVmaW5lIENSMiAwMDAyMDAwCiAjZGVmaW5lIENSMyAwMDAzMDAwCiAjZGVmaW5lIFRBQkRMWSAwMDE0MDAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBUQUIwIDAwMDAwMDAKICNkZWZpbmUgVEFCMSAwMDA0MDAwCiAjZGVmaW5lIFRBQjIgMDAxMDAwMAogI2RlZmluZSBUQUIzIDAwMTQwMDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFhUQUJTIDAwMTQwMDAKICNkZWZpbmUgQlNETFkgMDAyMDAwMAogI2RlZmluZSBCUzAgMDAwMDAwMAogI2RlZmluZSBCUzEgMDAyMDAwMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVlRETFkgMDA0MDAwMAogI2RlZmluZSBWVDAgMDAwMDAwMAogI2RlZmluZSBWVDEgMDA0MDAwMAogI2RlZmluZSBGRkRMWSAwMTAwMDAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBGRjAgMDAwMDAwMAogI2RlZmluZSBGRjEgMDEwMDAwMAotCiAjZGVmaW5lIENCQVVEIDAwMTAwMTcKLSNkZWZpbmUgQjAgMDAwMDAwMCAgCisjZGVmaW5lIEIwIDAwMDAwMDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEI1MCAwMDAwMDAxCiAjZGVmaW5lIEI3NSAwMDAwMDAyCiAjZGVmaW5lIEIxMTAgMDAwMDAwMwogI2RlZmluZSBCMTM0IDAwMDAwMDQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEIxNTAgMDAwMDAwNQogI2RlZmluZSBCMjAwIDAwMDAwMDYKICNkZWZpbmUgQjMwMCAwMDAwMDA3CiAjZGVmaW5lIEI2MDAgMDAwMDAxMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQjEyMDAgMDAwMDAxMQogI2RlZmluZSBCMTgwMCAwMDAwMDEyCiAjZGVmaW5lIEIyNDAwIDAwMDAwMTMKICNkZWZpbmUgQjQ4MDAgMDAwMDAxNAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQjk2MDAgMDAwMDAxNQogI2RlZmluZSBCMTkyMDAgMDAwMDAxNgogI2RlZmluZSBCMzg0MDAgMDAwMDAxNwogI2RlZmluZSBFWFRBIEIxOTIwMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRVhUQiBCMzg0MDAKICNkZWZpbmUgQ1NJWkUgMDAwMDA2MAogI2RlZmluZSBDUzUgMDAwMDAwMAogI2RlZmluZSBDUzYgMDAwMDAyMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQ1M3IDAwMDAwNDAKICNkZWZpbmUgQ1M4IDAwMDAwNjAKICNkZWZpbmUgQ1NUT1BCIDAwMDAxMDAKICNkZWZpbmUgQ1JFQUQgMDAwMDIwMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUEFSRU5CIDAwMDA0MDAKICNkZWZpbmUgUEFST0REIDAwMDEwMDAKICNkZWZpbmUgSFVQQ0wgMDAwMjAwMAogI2RlZmluZSBDTE9DQUwgMDAwNDAwMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQ0JBVURFWCAwMDEwMDAwCi0jZGVmaW5lIEJPVEhFUiAwMDEwMDAwICAKKyNkZWZpbmUgQk9USEVSIDAwMTAwMDAKICNkZWZpbmUgQjU3NjAwIDAwMTAwMDEKICNkZWZpbmUgQjExNTIwMCAwMDEwMDAyCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBCMjMwNDAwIDAwMTAwMDMKICNkZWZpbmUgQjQ2MDgwMCAwMDEwMDA0CiAjZGVmaW5lIEI1MDAwMDAgMDAxMDAwNQogI2RlZmluZSBCNTc2MDAwIDAwMTAwMDYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEI5MjE2MDAgMDAxMDAwNwogI2RlZmluZSBCMTAwMDAwMCAwMDEwMDEwCiAjZGVmaW5lIEIxMTUyMDAwIDAwMTAwMTEKICNkZWZpbmUgQjE1MDAwMDAgMDAxMDAxMgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQjIwMDAwMDAgMDAxMDAxMwogI2RlZmluZSBCMjUwMDAwMCAwMDEwMDE0CiAjZGVmaW5lIEIzMDAwMDAwIDAwMTAwMTUKICNkZWZpbmUgQjM1MDAwMDAgMDAxMDAxNgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQjQwMDAwMDAgMDAxMDAxNwotI2RlZmluZSBDSUJBVUQgMDAyMDAzNjAwMDAwICAKLSNkZWZpbmUgQ01TUEFSIDAxMDAwMDAwMDAwMCAgCi0jZGVmaW5lIENSVFNDVFMgMDIwMDAwMDAwMDAwICAKLQotI2RlZmluZSBJQlNISUZUIDE2ICAKLQorI2RlZmluZSBDSUJBVUQgMDAyMDAzNjAwMDAwCisjZGVmaW5lIENNU1BBUiAwMTAwMDAwMDAwMDAKKyNkZWZpbmUgQ1JUU0NUUyAwMjAwMDAwMDAwMDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIElCU0hJRlQgMTYKICNkZWZpbmUgSVNJRyAwMDAwMDAxCiAjZGVmaW5lIElDQU5PTiAwMDAwMDAyCiAjZGVmaW5lIFhDQVNFIDAwMDAwMDQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEVDSE8gMDAwMDAxMAogI2RlZmluZSBFQ0hPRSAwMDAwMDIwCiAjZGVmaW5lIEVDSE9LIDAwMDAwNDAKICNkZWZpbmUgRUNIT05MIDAwMDAxMDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE5PRkxTSCAwMDAwMjAwCiAjZGVmaW5lIFRPU1RPUCAwMDAwNDAwCiAjZGVmaW5lIEVDSE9DVEwgMDAwMTAwMAogI2RlZmluZSBFQ0hPUFJUIDAwMDIwMDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEVDSE9LRSAwMDA0MDAwCiAjZGVmaW5lIEZMVVNITyAwMDEwMDAwCiAjZGVmaW5lIFBFTkRJTiAwMDQwMDAwCiAjZGVmaW5lIElFWFRFTiAwMTAwMDAwCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFRDT09GRiAwCiAjZGVmaW5lIFRDT09OIDEKICNkZWZpbmUgVENJT0ZGIDIKICNkZWZpbmUgVENJT04gMwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBUQ0lGTFVTSCAwCiAjZGVmaW5lIFRDT0ZMVVNIIDEKICNkZWZpbmUgVENJT0ZMVVNIIDIKLQogI2RlZmluZSBUQ1NBTk9XIDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFRDU0FEUkFJTiAxCiAjZGVmaW5lIFRDU0FGTFVTSCAyCi0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3Rlcm1pb3MuaCBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS90ZXJtaW9zLmgKaW5kZXggNjU0MmM3OC4uMjVlMGI2ZCAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3Rlcm1pb3MuaAorKysgYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vdGVybWlvcy5oCkBAIC03LDYxICs3LDk0IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfQVNNX1g4Nl9URVJNSU9TX0gKICNkZWZpbmUgX0FTTV9YODZfVEVSTUlPU19ICi0KICNpbmNsdWRlIDxhc20vdGVybWJpdHMuaD4KICNpbmNsdWRlIDxhc20vaW9jdGxzLmg+Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3Qgd2luc2l6ZSB7CiAgdW5zaWduZWQgc2hvcnQgd3Nfcm93OwogIHVuc2lnbmVkIHNob3J0IHdzX2NvbDsKICB1bnNpZ25lZCBzaG9ydCB3c194cGl4ZWw7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIHNob3J0IHdzX3lwaXhlbDsKIH07Ci0KICNkZWZpbmUgTkNDIDgKIHN0cnVjdCB0ZXJtaW8geworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBzaG9ydCBjX2lmbGFnOwogIHVuc2lnbmVkIHNob3J0IGNfb2ZsYWc7CiAgdW5zaWduZWQgc2hvcnQgY19jZmxhZzsKICB1bnNpZ25lZCBzaG9ydCBjX2xmbGFnOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBjaGFyIGNfbGluZTsKICB1bnNpZ25lZCBjaGFyIGNfY2NbTkNDXTsKIH07Ci0KICNkZWZpbmUgVElPQ01fTEUgMHgwMDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFRJT0NNX0RUUiAweDAwMgogI2RlZmluZSBUSU9DTV9SVFMgMHgwMDQKICNkZWZpbmUgVElPQ01fU1QgMHgwMDgKICNkZWZpbmUgVElPQ01fU1IgMHgwMTAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFRJT0NNX0NUUyAweDAyMAogI2RlZmluZSBUSU9DTV9DQVIgMHgwNDAKICNkZWZpbmUgVElPQ01fUk5HIDB4MDgwCiAjZGVmaW5lIFRJT0NNX0RTUiAweDEwMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVElPQ01fQ0QgVElPQ01fQ0FSCiAjZGVmaW5lIFRJT0NNX1JJIFRJT0NNX1JORwogI2RlZmluZSBUSU9DTV9PVVQxIDB4MjAwMAogI2RlZmluZSBUSU9DTV9PVVQyIDB4NDAwMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVElPQ01fTE9PUCAweDgwMDAKLQogI2RlZmluZSBOX1RUWSAwCiAjZGVmaW5lIE5fU0xJUCAxCiAjZGVmaW5lIE5fTU9VU0UgMgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTl9QUFAgMwogI2RlZmluZSBOX1NUUklQIDQKICNkZWZpbmUgTl9BWDI1IDUKLSNkZWZpbmUgTl9YMjUgNiAgCisjZGVmaW5lIE5fWDI1IDYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE5fNlBBQ0sgNwotI2RlZmluZSBOX01BU0MgOCAgCi0jZGVmaW5lIE5fUjM5NjQgOSAgCi0jZGVmaW5lIE5fUFJPRklCVVNfRkRMIDEwICAKLSNkZWZpbmUgTl9JUkRBIDExICAKLSNkZWZpbmUgTl9TTVNCTE9DSyAxMiAgCi0jZGVmaW5lIE5fSERMQyAxMyAgCisjZGVmaW5lIE5fTUFTQyA4CisjZGVmaW5lIE5fUjM5NjQgOQorI2RlZmluZSBOX1BST0ZJQlVTX0ZETCAxMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgTl9JUkRBIDExCisjZGVmaW5lIE5fU01TQkxPQ0sgMTIKKyNkZWZpbmUgTl9IRExDIDEzCiAjZGVmaW5lIE5fU1lOQ19QUFAgMTQKLSNkZWZpbmUgTl9IQ0kgMTUgIAotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBOX0hDSSAxNQorI2RlZmluZSBOX1RUWSAwCisjZGVmaW5lIE5fU0xJUCAxCisjZGVmaW5lIE5fTU9VU0UgMgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgTl9QUFAgMworI2RlZmluZSBOX1NUUklQIDQKKyNkZWZpbmUgTl9BWDI1IDUKKyNkZWZpbmUgTl9YMjUgNgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgTl82UEFDSyA3CisjZGVmaW5lIE5fTUFTQyA4CisjZGVmaW5lIE5fUjM5NjQgOQorI2RlZmluZSBOX1BST0ZJQlVTX0ZETCAxMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgTl9JUkRBIDExCisjZGVmaW5lIE5fU01TQkxPQ0sgMTIKKyNkZWZpbmUgTl9IRExDIDEzCisjZGVmaW5lIE5fU1lOQ19QUFAgMTQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIE5fSENJIDE1CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS90aHJlYWRfaW5mby5oIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3RocmVhZF9pbmZvLmgKaW5kZXggZmY0NmIwOC4uZDE1ZTM2MiAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3RocmVhZF9pbmZvLmgKKysrIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3RocmVhZF9pbmZvLmgKQEAgLTcsNiArNywxMyBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSNpbmNsdWRlICJ0aHJlYWRfaW5mb182NC5oIgorI2luY2x1ZGUgInRocmVhZF9pbmZvXzMyLmgiCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vdGhyZWFkX2luZm9fMzIuaCBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS90aHJlYWRfaW5mb18zMi5oCmluZGV4IDU2NjRlZjguLjA3ZmM2NmIgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS90aHJlYWRfaW5mb18zMi5oCisrKyBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS90aHJlYWRfaW5mb18zMi5oCkBAIC03LDkgKzcsMTUgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9BU01fVEhSRUFEX0lORk9fSAogI2RlZmluZSBfQVNNX1RIUkVBRF9JTkZPX0gKLQogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vdGxiZmx1c2guaCBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS90bGJmbHVzaC5oCmluZGV4IGZkNmIyMjYuLmZkNTc2ZGYgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS90bGJmbHVzaC5oCisrKyBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS90bGJmbHVzaC5oCkBAIC03LDYgKzcsMTMgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0jaW5jbHVkZSAidGxiZmx1c2hfNjQuaCIKKyNpbmNsdWRlICJ0bGJmbHVzaF8zMi5oIgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3RsYmZsdXNoXzMyLmggYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vdGxiZmx1c2hfMzIuaAppbmRleCA4ZWJmZjgwLi5lMGFiMTMyIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vdGxiZmx1c2hfMzIuaAorKysgYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vdGxiZmx1c2hfMzIuaApAQCAtNywzNyArNywzNyBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX0kzODZfVExCRkxVU0hfSAogI2RlZmluZSBfSTM4Nl9UTEJGTFVTSF9ICi0KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19mbHVzaF90bGIoKSBfX25hdGl2ZV9mbHVzaF90bGIoKQogI2RlZmluZSBfX2ZsdXNoX3RsYl9nbG9iYWwoKSBfX25hdGl2ZV9mbHVzaF90bGJfZ2xvYmFsKCkKICNkZWZpbmUgX19mbHVzaF90bGJfc2luZ2xlKGFkZHIpIF9fbmF0aXZlX2ZsdXNoX3RsYl9zaW5nbGUoYWRkcikKLQogI2RlZmluZSBfX25hdGl2ZV9mbHVzaF90bGIoKSAgIGRvIHsgICB1bnNpZ25lZCBpbnQgdG1wcmVnOyAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oICAgIm1vdmwgJSVjcjMsICUwOyAgICAgICAgICAgICAgXG4iICAgIm1vdmwgJTAsICUlY3IzOyAgIyBmbHVzaCBUTEIgXG4iICAgOiAiPXIiICh0bXByZWcpICAgOjogIm1lbW9yeSIpOyAgIH0gd2hpbGUgKDApCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fbmF0aXZlX2ZsdXNoX3RsYl9nbG9iYWwoKSAgIGRvIHsgICB1bnNpZ25lZCBpbnQgdG1wcmVnLCBjcjQsIGNyNF9vcmlnOyAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oICAgIm1vdmwgJSVjcjQsICUyOyAgIyB0dXJuIG9mZiBQR0UgICAgIFxuIiAgICJtb3ZsICUyLCAlMTsgICAgICAgICAgICAgICAgICAgICAgICBcbiIgICAiYW5kbCAlMywgJTE7ICAgICAgICAgICAgICAgICAgICAgICAgXG4iICAgIm1vdmwgJTEsICUlY3I0OyAgICAgICAgICAgICAgICAgICAgIFxuIiAgICJtb3ZsICUlY3IzLCAlMDsgICAgICAgICAgICAgICAgICAgICBcbiIgICAibW92bCAlMCwgJSVjcjM7ICAjIGZsdXNoIFRMQiAgICAgICAgXG4iICAgIm1vdmwgJTIsICUlY3I0OyAgIyB0dXJuIFBHRSBiYWNrIG9uIFxuIiAgIDogIj0mciIgKHRtcHJlZyksICI9JnIiIChjcjQpLCAiPSZyIiAoY3I0X29yaWcpICAgOiAiaSIgKH5YODZfQ1I0X1BHRSkgICA6ICJtZW1vcnkiKTsgICB9IHdoaWxlICgwKQotCiAjZGVmaW5lIF9fbmF0aXZlX2ZsdXNoX3RsYl9zaW5nbGUoYWRkcikgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygiaW52bHBnICglMCkiIDo6InIiIChhZGRyKSA6ICJtZW1vcnkiKQotCiAjZGVmaW5lIF9fZmx1c2hfdGxiX2FsbCgpICAgZG8geyAgIGlmIChjcHVfaGFzX3BnZSkgICBfX2ZsdXNoX3RsYl9nbG9iYWwoKTsgICBlbHNlICAgX19mbHVzaF90bGIoKTsgICB9IHdoaWxlICgwKQotCiAjZGVmaW5lIGNwdV9oYXNfaW52bHBnIChib290X2NwdV9kYXRhLng4NiA+IDMpCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fZmx1c2hfdGxiX29uZShhZGRyKSAgIGRvIHsgICBpZiAoY3B1X2hhc19pbnZscGcpICAgX19mbHVzaF90bGJfc2luZ2xlKGFkZHIpOyAgIGVsc2UgICBfX2ZsdXNoX3RsYigpOyAgIH0gd2hpbGUgKDApCi0KICNkZWZpbmUgVExCX0ZMVVNIX0FMTCAweGZmZmZmZmZmCi0KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgotCiAjZGVmaW5lIGZsdXNoX3RsYigpIF9fZmx1c2hfdGxiKCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIGZsdXNoX3RsYl9hbGwoKSBfX2ZsdXNoX3RsYl9hbGwoKQogI2RlZmluZSBsb2NhbF9mbHVzaF90bGIoKSBfX2ZsdXNoX3RsYigpCi0KICNkZWZpbmUgZmx1c2hfdGxiX290aGVycyhtYXNrLCBtbSwgdmEpICAgbmF0aXZlX2ZsdXNoX3RsYl9vdGhlcnMoJm1hc2ssIG1tLCB2YSkKICNlbmRpZgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS90c2MuaCBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS90c2MuaAppbmRleCAyNTI4Y2QxLi5lMzRmNmQxIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vdHNjLmgKKysrIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3RzYy5oCkBAIC03LDE2ICs3LDIwIEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfQVNNX1g4Nl9UU0NfSAogI2RlZmluZSBfQVNNX1g4Nl9UU0NfSAotCiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgotCi0jZGVmaW5lIE5TX1NDQUxFIDEwICAKLSNkZWZpbmUgVVNfU0NBTEUgMzIgIAotCisjZGVmaW5lIE5TX1NDQUxFIDEwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBVU19TQ0FMRSAzMgogdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgY3ljbGVzX3Q7Ci0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3R5cGVzLmggYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vdHlwZXMuaAppbmRleCA0YWY5MmIwLi5iNzFkODliIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vdHlwZXMuaAorKysgYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vdHlwZXMuaApAQCAtNywzNCArNywzMiBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX0FTTV9YODZfVFlQRVNfSAogI2RlZmluZSBfQVNNX1g4Nl9UWVBFU19ICi0KICNpZm5kZWYgX19BU1NFTUJMWV9fCi0KIHR5cGVkZWYgdW5zaWduZWQgc2hvcnQgdW1vZGVfdDsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHR5cGVkZWYgX19zaWduZWRfXyBjaGFyIF9fczg7CiB0eXBlZGVmIHVuc2lnbmVkIGNoYXIgX191ODsKLQogdHlwZWRlZiBfX3NpZ25lZF9fIHNob3J0IF9fczE2OwogdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBfX3UxNjsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHR5cGVkZWYgX19zaWduZWRfXyBpbnQgX19zMzI7CiB0eXBlZGVmIHVuc2lnbmVkIGludCBfX3UzMjsKLQotI2lmZGVmIF9faTM4Nl9fCiAjaWZkZWYgX19HTlVDX18KIF9fZXh0ZW5zaW9uX18gdHlwZWRlZiBfX3NpZ25lZF9fIGxvbmcgbG9uZyBfX3M2NDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBfX2V4dGVuc2lvbl9fIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIF9fdTY0OwogI2VuZGlmCi0jZWxzZQotdHlwZWRlZiBfX3NpZ25lZF9fIGxvbmcgbG9uZyBfX3M2NDsKLXR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIF9fdTY0OwogI2VuZGlmCi0KICNlbmRpZgotCi0jZW5kaWYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vdWFjY2Vzcy5oIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3VhY2Nlc3MuaAppbmRleCBiMmJlYzY5Li5iMTY3ZjZkIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vdWFjY2Vzcy5oCisrKyBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS91YWNjZXNzLmgKQEAgLTcsNiArNywxMyBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSNpbmNsdWRlICJ1YWNjZXNzXzY0LmgiCisjaW5jbHVkZSAidWFjY2Vzc18zMi5oIgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3VhY2Nlc3NfMzIuaCBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS91YWNjZXNzXzMyLmgKaW5kZXggOTgyN2ZjNC4uNDdlNGRjZCAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3VhY2Nlc3NfMzIuaAorKysgYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vdWFjY2Vzc18zMi5oCkBAIC03LDc3ICs3LDY4IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfX2kzODZfVUFDQ0VTU19ICiAjZGVmaW5lIF9faTM4Nl9VQUNDRVNTX0gKLQogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvdGhyZWFkX2luZm8uaD4KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjaW5jbHVkZSA8bGludXgvcHJlZmV0Y2guaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgotCiAjZGVmaW5lIFZFUklGWV9SRUFEIDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFZFUklGWV9XUklURSAxCi0KICNkZWZpbmUgTUFLRV9NTV9TRUcocykgKChtbV9zZWdtZW50X3QpIHsgKHMpIH0pCi0KICNkZWZpbmUgS0VSTkVMX0RTIE1BS0VfTU1fU0VHKDB4RkZGRkZGRkZVTCkKICNkZWZpbmUgVVNFUl9EUyBNQUtFX01NX1NFRyhQQUdFX09GRlNFVCkKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgZ2V0X2RzKCkgKEtFUk5FTF9EUykKICNkZWZpbmUgZ2V0X2ZzKCkgKGN1cnJlbnRfdGhyZWFkX2luZm8oKS0+YWRkcl9saW1pdCkKICNkZWZpbmUgc2V0X2ZzKHgpIChjdXJyZW50X3RocmVhZF9pbmZvKCktPmFkZHJfbGltaXQgPSAoeCkpCi0KICNkZWZpbmUgc2VnbWVudF9lcShhLGIpICgoYSkuc2VnID09IChiKS5zZWcpCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fYWRkcl9vayhhZGRyKSAoKHVuc2lnbmVkIGxvbmcgX19mb3JjZSkoYWRkcikgPCAoY3VycmVudF90aHJlYWRfaW5mbygpLT5hZGRyX2xpbWl0LnNlZykpCi0KICNkZWZpbmUgX19yYW5nZV9vayhhZGRyLHNpemUpICh7ICAgdW5zaWduZWQgbG9uZyBmbGFnLHJva3N1bTsgICBfX2Noa191c2VyX3B0cihhZGRyKTsgICBhc20oImFkZGwgJTMsJTEgOyBzYmJsICUwLCUwOyBjbXBsICUxLCU0OyBzYmJsICQwLCUwIiAgIDoiPSZyIiAoZmxhZyksICI9ciIgKHJva3N1bSkgICA6IjEiIChhZGRyKSwiZyIgKChpbnQpKHNpemUpKSwicm0iIChjdXJyZW50X3RocmVhZF9pbmZvKCktPmFkZHJfbGltaXQuc2VnKSk7ICAgZmxhZzsgfSkKLQogI2RlZmluZSBhY2Nlc3Nfb2sodHlwZSxhZGRyLHNpemUpIChsaWtlbHkoX19yYW5nZV9vayhhZGRyLHNpemUpID09IDApKQotCiBzdHJ1Y3QgZXhjZXB0aW9uX3RhYmxlX2VudHJ5CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogewogIHVuc2lnbmVkIGxvbmcgaW5zbiwgZml4dXA7CiB9OwotCiAjZGVmaW5lIF9fZ2V0X3VzZXJfeChzaXplLHJldCx4LHB0cikgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygiY2FsbCBfX2dldF91c2VyXyIgI3NpemUgICA6Ij1hIiAocmV0KSwiPWQiICh4KSAgIDoiMCIgKHB0cikpCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIGdldF91c2VyKHgscHRyKSAgKHsgaW50IF9fcmV0X2d1OyAgIHVuc2lnbmVkIGxvbmcgX192YWxfZ3U7ICAgX19jaGtfdXNlcl9wdHIocHRyKTsgICBzd2l0Y2goc2l6ZW9mICgqKHB0cikpKSB7ICAgY2FzZSAxOiBfX2dldF91c2VyX3goMSxfX3JldF9ndSxfX3ZhbF9ndSxwdHIpOyBicmVhazsgICBjYXNlIDI6IF9fZ2V0X3VzZXJfeCgyLF9fcmV0X2d1LF9fdmFsX2d1LHB0cik7IGJyZWFrOyAgIGNhc2UgNDogX19nZXRfdXNlcl94KDQsX19yZXRfZ3UsX192YWxfZ3UscHRyKTsgYnJlYWs7ICAgZGVmYXVsdDogX19nZXRfdXNlcl94KFgsX19yZXRfZ3UsX192YWxfZ3UscHRyKTsgYnJlYWs7ICAgfSAgICh4KSA9IChfX3R5cGVvZl9fKCoocHRyKSkpX192YWxfZ3U7ICAgX19yZXRfZ3U7ICB9KQotCiAjZGVmaW5lIF9fcHV0X3VzZXJfMSh4LCBwdHIpIF9fYXNtX18gX192b2xhdGlsZV9fKCJjYWxsIF9fcHV0X3VzZXJfMSI6Ij1hIiAoX19yZXRfcHUpOiIwIiAoKHR5cGVvZigqKHB0cikpKSh4KSksICJjIiAocHRyKSkKICNkZWZpbmUgX19wdXRfdXNlcl8yKHgsIHB0cikgX19hc21fXyBfX3ZvbGF0aWxlX18oImNhbGwgX19wdXRfdXNlcl8yIjoiPWEiIChfX3JldF9wdSk6IjAiICgodHlwZW9mKCoocHRyKSkpKHgpKSwgImMiIChwdHIpKQogI2RlZmluZSBfX3B1dF91c2VyXzQoeCwgcHRyKSBfX2FzbV9fIF9fdm9sYXRpbGVfXygiY2FsbCBfX3B1dF91c2VyXzQiOiI9YSIgKF9fcmV0X3B1KToiMCIgKCh0eXBlb2YoKihwdHIpKSkoeCkpLCAiYyIgKHB0cikpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX3B1dF91c2VyXzgoeCwgcHRyKSBfX2FzbV9fIF9fdm9sYXRpbGVfXygiY2FsbCBfX3B1dF91c2VyXzgiOiI9YSIgKF9fcmV0X3B1KToiQSIgKCh0eXBlb2YoKihwdHIpKSkoeCkpLCAiYyIgKHB0cikpCiAjZGVmaW5lIF9fcHV0X3VzZXJfWCh4LCBwdHIpIF9fYXNtX18gX192b2xhdGlsZV9fKCJjYWxsIF9fcHV0X3VzZXJfWCI6Ij1hIiAoX19yZXRfcHUpOiJjIiAocHRyKSkKLQogI2RlZmluZSBwdXRfdXNlcih4LHB0cikgICh7ICAgaW50IF9fcmV0X3B1OyAgIF9fdHlwZW9mX18oKihwdHIpKSBfX3B1c190bXAgPSB4OyAgIF9fcmV0X3B1PTA7ICAgaWYodW5saWtlbHkoX19jb3B5X3RvX3VzZXJfbGwocHRyLCAmX19wdXNfdG1wLCAgIHNpemVvZigqKHB0cikpKSAhPSAwKSkgICBfX3JldF9wdT0tRUZBVUxUOyAgIF9fcmV0X3B1OyAgIH0pCi0KICNkZWZpbmUgX19nZXRfdXNlcih4LHB0cikgICBfX2dldF91c2VyX25vY2hlY2soKHgpLChwdHIpLHNpemVvZigqKHB0cikpKQotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX3B1dF91c2VyKHgscHRyKSAgIF9fcHV0X3VzZXJfbm9jaGVjaygoX190eXBlb2ZfXygqKHB0cikpKSh4KSwocHRyKSxzaXplb2YoKihwdHIpKSkKLQogI2RlZmluZSBfX3B1dF91c2VyX25vY2hlY2soeCxwdHIsc2l6ZSkgICh7ICAgbG9uZyBfX3B1X2VycjsgICBfX3B1dF91c2VyX3NpemUoKHgpLChwdHIpLChzaXplKSxfX3B1X2VyciwtRUZBVUxUKTsgICBfX3B1X2VycjsgIH0pCi0KICNkZWZpbmUgX19wdXRfdXNlcl91NjQoeCwgYWRkciwgZXJyKSAgIF9fYXNtX18gX192b2xhdGlsZV9fKCAgICIxOgltb3ZsICUlZWF4LDAoJTIpXG4iICAgIjI6CW1vdmwgJSVlZHgsNCglMilcbiIgICAiMzpcbiIgICAiLnNlY3Rpb24gLmZpeHVwLFwiYXhcIlxuIiAgICI0Ogltb3ZsICUzLCUwXG4iICAgIglqbXAgM2JcbiIgICAiLnByZXZpb3VzXG4iICAgIi5zZWN0aW9uIF9fZXhfdGFibGUsXCJhXCJcbiIgICAiCS5hbGlnbiA0XG4iICAgIgkubG9uZyAxYiw0YlxuIiAgICIJLmxvbmcgMmIsNGJcbiIgICAiLnByZXZpb3VzIiAgIDogIj1yIihlcnIpICAgOiAiQSIgKHgpLCAiciIgKGFkZHIpLCAiaSIoLUVGQVVMVCksICIwIihlcnIpKQotCiAjZGVmaW5lIF9fcHV0X3VzZXJfc2l6ZSh4LHB0cixzaXplLHJldHZhbCxlcnJyZXQpICBkbyB7ICAgX190eXBlb2ZfXygqKHB0cikpIF9fcHVzX3RtcCA9IHg7ICAgcmV0dmFsID0gMDsgICAgIGlmKHVubGlrZWx5KF9fY29weV90b191c2VyX2xsKHB0ciwgJl9fcHVzX3RtcCwgc2l6ZSkgIT0gMCkpICAgcmV0dmFsID0gZXJycmV0OyAgfSB3aGlsZSAoMCkKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBfX2xhcmdlX3N0cnVjdCB7IHVuc2lnbmVkIGxvbmcgYnVmWzEwMF07IH07CiAjZGVmaW5lIF9fbSh4KSAoKihzdHJ1Y3QgX19sYXJnZV9zdHJ1Y3QgX191c2VyICopKHgpKQotCiAjZGVmaW5lIF9fcHV0X3VzZXJfYXNtKHgsIGFkZHIsIGVyciwgaXR5cGUsIHJ0eXBlLCBsdHlwZSwgZXJycmV0KSAgIF9fYXNtX18gX192b2xhdGlsZV9fKCAgICIxOgltb3YiaXR5cGUiICUicnR5cGUiMSwlMlxuIiAgICIyOlxuIiAgICIuc2VjdGlvbiAuZml4dXAsXCJheFwiXG4iICAgIjM6CW1vdmwgJTMsJTBcbiIgICAiCWptcCAyYlxuIiAgICIucHJldmlvdXNcbiIgICAiLnNlY3Rpb24gX19leF90YWJsZSxcImFcIlxuIiAgICIJLmFsaWduIDRcbiIgICAiCS5sb25nIDFiLDNiXG4iICAgIi5wcmV2aW91cyIgICA6ICI9ciIoZXJyKSAgIDogbHR5cGUgKHgpLCAibSIoX19tKGFkZHIpKSwgImkiKGVycnJldCksICIwIihlcnIpKQotCiAjZGVmaW5lIF9fZ2V0X3VzZXJfbm9jaGVjayh4LHB0cixzaXplKSAgKHsgICBsb25nIF9fZ3VfZXJyOyAgIHVuc2lnbmVkIGxvbmcgX19ndV92YWw7ICAgX19nZXRfdXNlcl9zaXplKF9fZ3VfdmFsLChwdHIpLChzaXplKSxfX2d1X2VyciwtRUZBVUxUKTsgICh4KSA9IChfX3R5cGVvZl9fKCoocHRyKSkpX19ndV92YWw7ICAgX19ndV9lcnI7ICB9KQotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX2dldF91c2VyX3NpemUoeCxwdHIsc2l6ZSxyZXR2YWwsZXJycmV0KSAgZG8geyAgIHJldHZhbCA9IDA7ICAgX19jaGtfdXNlcl9wdHIocHRyKTsgICBzd2l0Y2ggKHNpemUpIHsgICBjYXNlIDE6IF9fZ2V0X3VzZXJfYXNtKHgscHRyLHJldHZhbCwiYiIsImIiLCI9cSIsZXJycmV0KTticmVhazsgICBjYXNlIDI6IF9fZ2V0X3VzZXJfYXNtKHgscHRyLHJldHZhbCwidyIsInciLCI9ciIsZXJycmV0KTticmVhazsgICBjYXNlIDQ6IF9fZ2V0X3VzZXJfYXNtKHgscHRyLHJldHZhbCwibCIsIiIsIj1yIixlcnJyZXQpO2JyZWFrOyAgIGRlZmF1bHQ6ICh4KSA9IF9fZ2V0X3VzZXJfYmFkKCk7ICAgfSAgfSB3aGlsZSAoMCkKLQogI2RlZmluZSBfX2dldF91c2VyX2FzbSh4LCBhZGRyLCBlcnIsIGl0eXBlLCBydHlwZSwgbHR5cGUsIGVycnJldCkgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyggICAiMToJbW92Iml0eXBlIiAlMiwlInJ0eXBlIjFcbiIgICAiMjpcbiIgICAiLnNlY3Rpb24gLmZpeHVwLFwiYXhcIlxuIiAgICIzOgltb3ZsICUzLCUwXG4iICAgIgl4b3IiaXR5cGUiICUicnR5cGUiMSwlInJ0eXBlIjFcbiIgICAiCWptcCAyYlxuIiAgICIucHJldmlvdXNcbiIgICAiLnNlY3Rpb24gX19leF90YWJsZSxcImFcIlxuIiAgICIJLmFsaWduIDRcbiIgICAiCS5sb25nIDFiLDNiXG4iICAgIi5wcmV2aW91cyIgICA6ICI9ciIoZXJyKSwgbHR5cGUgKHgpICAgOiAibSIoX19tKGFkZHIpKSwgImkiKGVycnJldCksICIwIihlcnIpKQotCiAjZGVmaW5lIEFSQ0hfSEFTX05PQ0FDSEVfVUFDQ0VTUwotCiAjZGVmaW5lIHN0cmxlbl91c2VyKHN0cikgc3Rybmxlbl91c2VyKHN0ciwgTE9OR19NQVgpCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS91Y29udGV4dC5oIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3Vjb250ZXh0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWNlZmZhYwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS91Y29udGV4dC5oCkBAIC0wLDAgKzEsMjQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0FTTV9YODZfVUNPTlRFWFRfSAorI2RlZmluZSBfQVNNX1g4Nl9VQ09OVEVYVF9ICisjZGVmaW5lIFVDX0ZQX1hTVEFURSAweDEKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy91Y29udGV4dC5oPgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3VuYWxpZ25lZC5oIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3VuYWxpZ25lZC5oCmluZGV4IGNlN2E4YTcuLjhmMjI4N2MgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS91bmFsaWduZWQuaAorKysgYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vdW5hbGlnbmVkLmgKQEAgLTcsMTMgKzcsMTggQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9BU01fWDg2X1VOQUxJR05FRF9ICiAjZGVmaW5lIF9BU01fWDg2X1VOQUxJR05FRF9ICi0KICNkZWZpbmUgZ2V0X3VuYWxpZ25lZChwdHIpICgqKHB0cikpCi0KICNkZWZpbmUgcHV0X3VuYWxpZ25lZCh2YWwsIHB0cikgKCh2b2lkKSggKihwdHIpID0gKHZhbCkgKSkKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3VuaXN0ZC5oIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3VuaXN0ZC5oCmluZGV4IDc2OWY4MzYuLmQxMDlmNWYgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS91bmlzdGQuaAorKysgYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vdW5pc3RkLmgKQEAgLTcsMTAgKzcsMTMgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0jaWZkZWYgX19pMzg2X18KICNpbmNsdWRlICJ1bmlzdGRfMzIuaCIKLSNlbHNlCi0jaW5jbHVkZSAidW5pc3RkXzY0LmgiCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS91bmlzdGRfMzIuaCBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS91bmlzdGRfMzIuaAppbmRleCBiM2Q4YjE5Li41YzFhMTA4IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vdW5pc3RkXzMyLmgKKysrIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3VuaXN0ZF8zMi5oCkBAIC03LDMzNSArNyw0NDUgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0jaWZuZGVmIF9BU01fSTM4Nl9VTklTVERfSF8KLSNkZWZpbmUgX0FTTV9JMzg2X1VOSVNURF9IXwotCisjaWZuZGVmIF9BU01fWDg2X1VOSVNURF8zMl9ICisjZGVmaW5lIF9BU01fWDg2X1VOSVNURF8zMl9ICiAjZGVmaW5lIF9fTlJfcmVzdGFydF9zeXNjYWxsIDAKICNkZWZpbmUgX19OUl9leGl0IDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfZm9yayAyCiAjZGVmaW5lIF9fTlJfcmVhZCAzCiAjZGVmaW5lIF9fTlJfd3JpdGUgNAogI2RlZmluZSBfX05SX29wZW4gNQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9jbG9zZSA2CiAjZGVmaW5lIF9fTlJfd2FpdHBpZCA3CiAjZGVmaW5lIF9fTlJfY3JlYXQgOAogI2RlZmluZSBfX05SX2xpbmsgOQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl91bmxpbmsgMTAKICNkZWZpbmUgX19OUl9leGVjdmUgMTEKICNkZWZpbmUgX19OUl9jaGRpciAxMgogI2RlZmluZSBfX05SX3RpbWUgMTMKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfbWtub2QgMTQKICNkZWZpbmUgX19OUl9jaG1vZCAxNQogI2RlZmluZSBfX05SX2xjaG93biAxNgogI2RlZmluZSBfX05SX2JyZWFrIDE3CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX29sZHN0YXQgMTgKICNkZWZpbmUgX19OUl9sc2VlayAxOQogI2RlZmluZSBfX05SX2dldHBpZCAyMAogI2RlZmluZSBfX05SX21vdW50IDIxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3Vtb3VudCAyMgogI2RlZmluZSBfX05SX3NldHVpZCAyMwogI2RlZmluZSBfX05SX2dldHVpZCAyNAogI2RlZmluZSBfX05SX3N0aW1lIDI1CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3B0cmFjZSAyNgogI2RlZmluZSBfX05SX2FsYXJtIDI3CiAjZGVmaW5lIF9fTlJfb2xkZnN0YXQgMjgKICNkZWZpbmUgX19OUl9wYXVzZSAyOQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl91dGltZSAzMAogI2RlZmluZSBfX05SX3N0dHkgMzEKICNkZWZpbmUgX19OUl9ndHR5IDMyCiAjZGVmaW5lIF9fTlJfYWNjZXNzIDMzCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX25pY2UgMzQKICNkZWZpbmUgX19OUl9mdGltZSAzNQogI2RlZmluZSBfX05SX3N5bmMgMzYKICNkZWZpbmUgX19OUl9raWxsIDM3CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3JlbmFtZSAzOAogI2RlZmluZSBfX05SX21rZGlyIDM5CiAjZGVmaW5lIF9fTlJfcm1kaXIgNDAKICNkZWZpbmUgX19OUl9kdXAgNDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfcGlwZSA0MgogI2RlZmluZSBfX05SX3RpbWVzIDQzCiAjZGVmaW5lIF9fTlJfcHJvZiA0NAogI2RlZmluZSBfX05SX2JyayA0NQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9zZXRnaWQgNDYKICNkZWZpbmUgX19OUl9nZXRnaWQgNDcKICNkZWZpbmUgX19OUl9zaWduYWwgNDgKICNkZWZpbmUgX19OUl9nZXRldWlkIDQ5CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX2dldGVnaWQgNTAKICNkZWZpbmUgX19OUl9hY2N0IDUxCiAjZGVmaW5lIF9fTlJfdW1vdW50MiA1MgogI2RlZmluZSBfX05SX2xvY2sgNTMKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfaW9jdGwgNTQKICNkZWZpbmUgX19OUl9mY250bCA1NQogI2RlZmluZSBfX05SX21weCA1NgogI2RlZmluZSBfX05SX3NldHBnaWQgNTcKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfdWxpbWl0IDU4CiAjZGVmaW5lIF9fTlJfb2xkb2xkdW5hbWUgNTkKICNkZWZpbmUgX19OUl91bWFzayA2MAogI2RlZmluZSBfX05SX2Nocm9vdCA2MQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl91c3RhdCA2MgogI2RlZmluZSBfX05SX2R1cDIgNjMKICNkZWZpbmUgX19OUl9nZXRwcGlkIDY0CiAjZGVmaW5lIF9fTlJfZ2V0cGdycCA2NQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9zZXRzaWQgNjYKICNkZWZpbmUgX19OUl9zaWdhY3Rpb24gNjcKICNkZWZpbmUgX19OUl9zZ2V0bWFzayA2OAogI2RlZmluZSBfX05SX3NzZXRtYXNrIDY5CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3NldHJldWlkIDcwCiAjZGVmaW5lIF9fTlJfc2V0cmVnaWQgNzEKICNkZWZpbmUgX19OUl9zaWdzdXNwZW5kIDcyCiAjZGVmaW5lIF9fTlJfc2lncGVuZGluZyA3MworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9zZXRob3N0bmFtZSA3NAogI2RlZmluZSBfX05SX3NldHJsaW1pdCA3NQotI2RlZmluZSBfX05SX2dldHJsaW1pdCA3NiAgCisjZGVmaW5lIF9fTlJfZ2V0cmxpbWl0IDc2CiAjZGVmaW5lIF9fTlJfZ2V0cnVzYWdlIDc3CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX2dldHRpbWVvZmRheSA3OAogI2RlZmluZSBfX05SX3NldHRpbWVvZmRheSA3OQogI2RlZmluZSBfX05SX2dldGdyb3VwcyA4MAogI2RlZmluZSBfX05SX3NldGdyb3VwcyA4MQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9zZWxlY3QgODIKICNkZWZpbmUgX19OUl9zeW1saW5rIDgzCiAjZGVmaW5lIF9fTlJfb2xkbHN0YXQgODQKICNkZWZpbmUgX19OUl9yZWFkbGluayA4NQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl91c2VsaWIgODYKICNkZWZpbmUgX19OUl9zd2Fwb24gODcKICNkZWZpbmUgX19OUl9yZWJvb3QgODgKICNkZWZpbmUgX19OUl9yZWFkZGlyIDg5CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX21tYXAgOTAKICNkZWZpbmUgX19OUl9tdW5tYXAgOTEKICNkZWZpbmUgX19OUl90cnVuY2F0ZSA5MgogI2RlZmluZSBfX05SX2Z0cnVuY2F0ZSA5MworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9mY2htb2QgOTQKICNkZWZpbmUgX19OUl9mY2hvd24gOTUKICNkZWZpbmUgX19OUl9nZXRwcmlvcml0eSA5NgogI2RlZmluZSBfX05SX3NldHByaW9yaXR5IDk3CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3Byb2ZpbCA5OAogI2RlZmluZSBfX05SX3N0YXRmcyA5OQogI2RlZmluZSBfX05SX2ZzdGF0ZnMgMTAwCiAjZGVmaW5lIF9fTlJfaW9wZXJtIDEwMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9zb2NrZXRjYWxsIDEwMgogI2RlZmluZSBfX05SX3N5c2xvZyAxMDMKICNkZWZpbmUgX19OUl9zZXRpdGltZXIgMTA0CiAjZGVmaW5lIF9fTlJfZ2V0aXRpbWVyIDEwNQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9zdGF0IDEwNgogI2RlZmluZSBfX05SX2xzdGF0IDEwNwogI2RlZmluZSBfX05SX2ZzdGF0IDEwOAogI2RlZmluZSBfX05SX29sZHVuYW1lIDEwOQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9pb3BsIDExMAogI2RlZmluZSBfX05SX3ZoYW5ndXAgMTExCiAjZGVmaW5lIF9fTlJfaWRsZSAxMTIKICNkZWZpbmUgX19OUl92bTg2b2xkIDExMworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl93YWl0NCAxMTQKICNkZWZpbmUgX19OUl9zd2Fwb2ZmIDExNQogI2RlZmluZSBfX05SX3N5c2luZm8gMTE2CiAjZGVmaW5lIF9fTlJfaXBjIDExNworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9mc3luYyAxMTgKICNkZWZpbmUgX19OUl9zaWdyZXR1cm4gMTE5CiAjZGVmaW5lIF9fTlJfY2xvbmUgMTIwCiAjZGVmaW5lIF9fTlJfc2V0ZG9tYWlubmFtZSAxMjEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfdW5hbWUgMTIyCiAjZGVmaW5lIF9fTlJfbW9kaWZ5X2xkdCAxMjMKICNkZWZpbmUgX19OUl9hZGp0aW1leCAxMjQKICNkZWZpbmUgX19OUl9tcHJvdGVjdCAxMjUKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfc2lncHJvY21hc2sgMTI2CiAjZGVmaW5lIF9fTlJfY3JlYXRlX21vZHVsZSAxMjcKICNkZWZpbmUgX19OUl9pbml0X21vZHVsZSAxMjgKICNkZWZpbmUgX19OUl9kZWxldGVfbW9kdWxlIDEyOQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9nZXRfa2VybmVsX3N5bXMgMTMwCiAjZGVmaW5lIF9fTlJfcXVvdGFjdGwgMTMxCiAjZGVmaW5lIF9fTlJfZ2V0cGdpZCAxMzIKICNkZWZpbmUgX19OUl9mY2hkaXIgMTMzCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX2JkZmx1c2ggMTM0CiAjZGVmaW5lIF9fTlJfc3lzZnMgMTM1CiAjZGVmaW5lIF9fTlJfcGVyc29uYWxpdHkgMTM2Ci0jZGVmaW5lIF9fTlJfYWZzX3N5c2NhbGwgMTM3ICAKKyNkZWZpbmUgX19OUl9hZnNfc3lzY2FsbCAxMzcKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfc2V0ZnN1aWQgMTM4CiAjZGVmaW5lIF9fTlJfc2V0ZnNnaWQgMTM5CiAjZGVmaW5lIF9fTlJfX2xsc2VlayAxNDAKICNkZWZpbmUgX19OUl9nZXRkZW50cyAxNDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfX25ld3NlbGVjdCAxNDIKICNkZWZpbmUgX19OUl9mbG9jayAxNDMKICNkZWZpbmUgX19OUl9tc3luYyAxNDQKICNkZWZpbmUgX19OUl9yZWFkdiAxNDUKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfd3JpdGV2IDE0NgogI2RlZmluZSBfX05SX2dldHNpZCAxNDcKICNkZWZpbmUgX19OUl9mZGF0YXN5bmMgMTQ4CiAjZGVmaW5lIF9fTlJfX3N5c2N0bCAxNDkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfbWxvY2sgMTUwCiAjZGVmaW5lIF9fTlJfbXVubG9jayAxNTEKICNkZWZpbmUgX19OUl9tbG9ja2FsbCAxNTIKICNkZWZpbmUgX19OUl9tdW5sb2NrYWxsIDE1MworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9zY2hlZF9zZXRwYXJhbSAxNTQKICNkZWZpbmUgX19OUl9zY2hlZF9nZXRwYXJhbSAxNTUKICNkZWZpbmUgX19OUl9zY2hlZF9zZXRzY2hlZHVsZXIgMTU2CiAjZGVmaW5lIF9fTlJfc2NoZWRfZ2V0c2NoZWR1bGVyIDE1NworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9zY2hlZF95aWVsZCAxNTgKICNkZWZpbmUgX19OUl9zY2hlZF9nZXRfcHJpb3JpdHlfbWF4IDE1OQogI2RlZmluZSBfX05SX3NjaGVkX2dldF9wcmlvcml0eV9taW4gMTYwCiAjZGVmaW5lIF9fTlJfc2NoZWRfcnJfZ2V0X2ludGVydmFsIDE2MQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9uYW5vc2xlZXAgMTYyCiAjZGVmaW5lIF9fTlJfbXJlbWFwIDE2MwogI2RlZmluZSBfX05SX3NldHJlc3VpZCAxNjQKICNkZWZpbmUgX19OUl9nZXRyZXN1aWQgMTY1CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3ZtODYgMTY2CiAjZGVmaW5lIF9fTlJfcXVlcnlfbW9kdWxlIDE2NwogI2RlZmluZSBfX05SX3BvbGwgMTY4CiAjZGVmaW5lIF9fTlJfbmZzc2VydmN0bCAxNjkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfc2V0cmVzZ2lkIDE3MAogI2RlZmluZSBfX05SX2dldHJlc2dpZCAxNzEKICNkZWZpbmUgX19OUl9wcmN0bCAxNzIKICNkZWZpbmUgX19OUl9ydF9zaWdyZXR1cm4gMTczCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3J0X3NpZ2FjdGlvbiAxNzQKICNkZWZpbmUgX19OUl9ydF9zaWdwcm9jbWFzayAxNzUKICNkZWZpbmUgX19OUl9ydF9zaWdwZW5kaW5nIDE3NgogI2RlZmluZSBfX05SX3J0X3NpZ3RpbWVkd2FpdCAxNzcKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfcnRfc2lncXVldWVpbmZvIDE3OAogI2RlZmluZSBfX05SX3J0X3NpZ3N1c3BlbmQgMTc5CiAjZGVmaW5lIF9fTlJfcHJlYWQ2NCAxODAKICNkZWZpbmUgX19OUl9wd3JpdGU2NCAxODEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfY2hvd24gMTgyCiAjZGVmaW5lIF9fTlJfZ2V0Y3dkIDE4MwogI2RlZmluZSBfX05SX2NhcGdldCAxODQKICNkZWZpbmUgX19OUl9jYXBzZXQgMTg1CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3NpZ2FsdHN0YWNrIDE4NgogI2RlZmluZSBfX05SX3NlbmRmaWxlIDE4NwotI2RlZmluZSBfX05SX2dldHBtc2cgMTg4ICAKLSNkZWZpbmUgX19OUl9wdXRwbXNnIDE4OSAgCisjZGVmaW5lIF9fTlJfZ2V0cG1zZyAxODgKKyNkZWZpbmUgX19OUl9wdXRwbXNnIDE4OQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl92Zm9yayAxOTAKLSNkZWZpbmUgX19OUl91Z2V0cmxpbWl0IDE5MSAgCisjZGVmaW5lIF9fTlJfdWdldHJsaW1pdCAxOTEKICNkZWZpbmUgX19OUl9tbWFwMiAxOTIKICNkZWZpbmUgX19OUl90cnVuY2F0ZTY0IDE5MworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9mdHJ1bmNhdGU2NCAxOTQKICNkZWZpbmUgX19OUl9zdGF0NjQgMTk1CiAjZGVmaW5lIF9fTlJfbHN0YXQ2NCAxOTYKICNkZWZpbmUgX19OUl9mc3RhdDY0IDE5NworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9sY2hvd24zMiAxOTgKICNkZWZpbmUgX19OUl9nZXR1aWQzMiAxOTkKICNkZWZpbmUgX19OUl9nZXRnaWQzMiAyMDAKICNkZWZpbmUgX19OUl9nZXRldWlkMzIgMjAxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX2dldGVnaWQzMiAyMDIKICNkZWZpbmUgX19OUl9zZXRyZXVpZDMyIDIwMwogI2RlZmluZSBfX05SX3NldHJlZ2lkMzIgMjA0CiAjZGVmaW5lIF9fTlJfZ2V0Z3JvdXBzMzIgMjA1CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3NldGdyb3VwczMyIDIwNgogI2RlZmluZSBfX05SX2ZjaG93bjMyIDIwNwogI2RlZmluZSBfX05SX3NldHJlc3VpZDMyIDIwOAogI2RlZmluZSBfX05SX2dldHJlc3VpZDMyIDIwOQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9zZXRyZXNnaWQzMiAyMTAKICNkZWZpbmUgX19OUl9nZXRyZXNnaWQzMiAyMTEKICNkZWZpbmUgX19OUl9jaG93bjMyIDIxMgogI2RlZmluZSBfX05SX3NldHVpZDMyIDIxMworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9zZXRnaWQzMiAyMTQKICNkZWZpbmUgX19OUl9zZXRmc3VpZDMyIDIxNQogI2RlZmluZSBfX05SX3NldGZzZ2lkMzIgMjE2CiAjZGVmaW5lIF9fTlJfcGl2b3Rfcm9vdCAyMTcKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfbWluY29yZSAyMTgKICNkZWZpbmUgX19OUl9tYWR2aXNlIDIxOQotI2RlZmluZSBfX05SX21hZHZpc2UxIDIxOSAgCisjZGVmaW5lIF9fTlJfbWFkdmlzZTEgMjE5CiAjZGVmaW5lIF9fTlJfZ2V0ZGVudHM2NCAyMjAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfZmNudGw2NCAyMjEKLQogI2RlZmluZSBfX05SX2dldHRpZCAyMjQKICNkZWZpbmUgX19OUl9yZWFkYWhlYWQgMjI1CiAjZGVmaW5lIF9fTlJfc2V0eGF0dHIgMjI2CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX2xzZXR4YXR0ciAyMjcKICNkZWZpbmUgX19OUl9mc2V0eGF0dHIgMjI4CiAjZGVmaW5lIF9fTlJfZ2V0eGF0dHIgMjI5CiAjZGVmaW5lIF9fTlJfbGdldHhhdHRyIDIzMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9mZ2V0eGF0dHIgMjMxCiAjZGVmaW5lIF9fTlJfbGlzdHhhdHRyIDIzMgogI2RlZmluZSBfX05SX2xsaXN0eGF0dHIgMjMzCiAjZGVmaW5lIF9fTlJfZmxpc3R4YXR0ciAyMzQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfcmVtb3ZleGF0dHIgMjM1CiAjZGVmaW5lIF9fTlJfbHJlbW92ZXhhdHRyIDIzNgogI2RlZmluZSBfX05SX2ZyZW1vdmV4YXR0ciAyMzcKICNkZWZpbmUgX19OUl90a2lsbCAyMzgKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfc2VuZGZpbGU2NCAyMzkKICNkZWZpbmUgX19OUl9mdXRleCAyNDAKICNkZWZpbmUgX19OUl9zY2hlZF9zZXRhZmZpbml0eSAyNDEKICNkZWZpbmUgX19OUl9zY2hlZF9nZXRhZmZpbml0eSAyNDIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfc2V0X3RocmVhZF9hcmVhIDI0MwogI2RlZmluZSBfX05SX2dldF90aHJlYWRfYXJlYSAyNDQKICNkZWZpbmUgX19OUl9pb19zZXR1cCAyNDUKICNkZWZpbmUgX19OUl9pb19kZXN0cm95IDI0NgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9pb19nZXRldmVudHMgMjQ3CiAjZGVmaW5lIF9fTlJfaW9fc3VibWl0IDI0OAogI2RlZmluZSBfX05SX2lvX2NhbmNlbCAyNDkKICNkZWZpbmUgX19OUl9mYWR2aXNlNjQgMjUwCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfZXhpdF9ncm91cCAyNTIKICNkZWZpbmUgX19OUl9sb29rdXBfZGNvb2tpZSAyNTMKICNkZWZpbmUgX19OUl9lcG9sbF9jcmVhdGUgMjU0CiAjZGVmaW5lIF9fTlJfZXBvbGxfY3RsIDI1NQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9lcG9sbF93YWl0IDI1NgogI2RlZmluZSBfX05SX3JlbWFwX2ZpbGVfcGFnZXMgMjU3CiAjZGVmaW5lIF9fTlJfc2V0X3RpZF9hZGRyZXNzIDI1OAogI2RlZmluZSBfX05SX3RpbWVyX2NyZWF0ZSAyNTkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfdGltZXJfc2V0dGltZSAoX19OUl90aW1lcl9jcmVhdGUrMSkKICNkZWZpbmUgX19OUl90aW1lcl9nZXR0aW1lIChfX05SX3RpbWVyX2NyZWF0ZSsyKQogI2RlZmluZSBfX05SX3RpbWVyX2dldG92ZXJydW4gKF9fTlJfdGltZXJfY3JlYXRlKzMpCiAjZGVmaW5lIF9fTlJfdGltZXJfZGVsZXRlIChfX05SX3RpbWVyX2NyZWF0ZSs0KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9jbG9ja19zZXR0aW1lIChfX05SX3RpbWVyX2NyZWF0ZSs1KQogI2RlZmluZSBfX05SX2Nsb2NrX2dldHRpbWUgKF9fTlJfdGltZXJfY3JlYXRlKzYpCiAjZGVmaW5lIF9fTlJfY2xvY2tfZ2V0cmVzIChfX05SX3RpbWVyX2NyZWF0ZSs3KQogI2RlZmluZSBfX05SX2Nsb2NrX25hbm9zbGVlcCAoX19OUl90aW1lcl9jcmVhdGUrOCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfc3RhdGZzNjQgMjY4CiAjZGVmaW5lIF9fTlJfZnN0YXRmczY0IDI2OQogI2RlZmluZSBfX05SX3Rna2lsbCAyNzAKICNkZWZpbmUgX19OUl91dGltZXMgMjcxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX2ZhZHZpc2U2NF82NCAyNzIKICNkZWZpbmUgX19OUl92c2VydmVyIDI3MwogI2RlZmluZSBfX05SX21iaW5kIDI3NAogI2RlZmluZSBfX05SX2dldF9tZW1wb2xpY3kgMjc1CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3NldF9tZW1wb2xpY3kgMjc2CiAjZGVmaW5lIF9fTlJfbXFfb3BlbiAyNzcKICNkZWZpbmUgX19OUl9tcV91bmxpbmsgKF9fTlJfbXFfb3BlbisxKQogI2RlZmluZSBfX05SX21xX3RpbWVkc2VuZCAoX19OUl9tcV9vcGVuKzIpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX21xX3RpbWVkcmVjZWl2ZSAoX19OUl9tcV9vcGVuKzMpCiAjZGVmaW5lIF9fTlJfbXFfbm90aWZ5IChfX05SX21xX29wZW4rNCkKICNkZWZpbmUgX19OUl9tcV9nZXRzZXRhdHRyIChfX05SX21xX29wZW4rNSkKICNkZWZpbmUgX19OUl9rZXhlY19sb2FkIDI4MworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl93YWl0aWQgMjg0Ci0KICNkZWZpbmUgX19OUl9hZGRfa2V5IDI4NgogI2RlZmluZSBfX05SX3JlcXVlc3Rfa2V5IDI4NwogI2RlZmluZSBfX05SX2tleWN0bCAyODgKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfaW9wcmlvX3NldCAyODkKICNkZWZpbmUgX19OUl9pb3ByaW9fZ2V0IDI5MAogI2RlZmluZSBfX05SX2lub3RpZnlfaW5pdCAyOTEKICNkZWZpbmUgX19OUl9pbm90aWZ5X2FkZF93YXRjaCAyOTIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTlJfaW5vdGlmeV9ybV93YXRjaCAyOTMKICNkZWZpbmUgX19OUl9taWdyYXRlX3BhZ2VzIDI5NAogI2RlZmluZSBfX05SX29wZW5hdCAyOTUKICNkZWZpbmUgX19OUl9ta2RpcmF0IDI5NgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9ta25vZGF0IDI5NwogI2RlZmluZSBfX05SX2ZjaG93bmF0IDI5OAogI2RlZmluZSBfX05SX2Z1dGltZXNhdCAyOTkKICNkZWZpbmUgX19OUl9mc3RhdGF0NjQgMzAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3VubGlua2F0IDMwMQogI2RlZmluZSBfX05SX3JlbmFtZWF0IDMwMgogI2RlZmluZSBfX05SX2xpbmthdCAzMDMKICNkZWZpbmUgX19OUl9zeW1saW5rYXQgMzA0CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3JlYWRsaW5rYXQgMzA1CiAjZGVmaW5lIF9fTlJfZmNobW9kYXQgMzA2CiAjZGVmaW5lIF9fTlJfZmFjY2Vzc2F0IDMwNwogI2RlZmluZSBfX05SX3BzZWxlY3Q2IDMwOAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9wcG9sbCAzMDkKICNkZWZpbmUgX19OUl91bnNoYXJlIDMxMAogI2RlZmluZSBfX05SX3NldF9yb2J1c3RfbGlzdCAzMTEKICNkZWZpbmUgX19OUl9nZXRfcm9idXN0X2xpc3QgMzEyCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3NwbGljZSAzMTMKICNkZWZpbmUgX19OUl9zeW5jX2ZpbGVfcmFuZ2UgMzE0CiAjZGVmaW5lIF9fTlJfdGVlIDMxNQogI2RlZmluZSBfX05SX3Ztc3BsaWNlIDMxNgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19OUl9tb3ZlX3BhZ2VzIDMxNwogI2RlZmluZSBfX05SX2dldGNwdSAzMTgKICNkZWZpbmUgX19OUl9lcG9sbF9wd2FpdCAzMTkKICNkZWZpbmUgX19OUl91dGltZW5zYXQgMzIwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05SX3NpZ25hbGZkIDMyMQotI2RlZmluZSBfX05SX3RpbWVyZmQgMzIyCisjZGVmaW5lIF9fTlJfdGltZXJmZF9jcmVhdGUgMzIyCiAjZGVmaW5lIF9fTlJfZXZlbnRmZCAzMjMKICNkZWZpbmUgX19OUl9mYWxsb2NhdGUgMzI0Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIF9fTlJfdGltZXJmZF9zZXR0aW1lIDMyNQorI2RlZmluZSBfX05SX3RpbWVyZmRfZ2V0dGltZSAzMjYKKyNkZWZpbmUgX19OUl9zaWduYWxmZDQgMzI3CisjZGVmaW5lIF9fTlJfZXZlbnRmZDIgMzI4CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBfX05SX2Vwb2xsX2NyZWF0ZTEgMzI5CisjZGVmaW5lIF9fTlJfZHVwMyAzMzAKKyNkZWZpbmUgX19OUl9waXBlMiAzMzEKKyNkZWZpbmUgX19OUl9pbm90aWZ5X2luaXQxIDMzMgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgX19OUl9wcmVhZHYgMzMzCisjZGVmaW5lIF9fTlJfcHdyaXRldiAzMzQKKyNkZWZpbmUgX19OUl9ydF90Z3NpZ3F1ZXVlaW5mbyAzMzUKKyNkZWZpbmUgX19OUl9wZXJmX2V2ZW50X29wZW4gMzM2CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBfX05SX3JlY3ZtbXNnIDMzNworI2RlZmluZSBfX05SX2Zhbm90aWZ5X2luaXQgMzM4CisjZGVmaW5lIF9fTlJfZmFub3RpZnlfbWFyayAzMzkKKyNkZWZpbmUgX19OUl9wcmxpbWl0NjQgMzQwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBfX05SX25hbWVfdG9faGFuZGxlX2F0IDM0MQorI2RlZmluZSBfX05SX29wZW5fYnlfaGFuZGxlX2F0IDM0MgorI2RlZmluZSBfX05SX2Nsb2NrX2FkanRpbWUgMzQzCisjZGVmaW5lIF9fTlJfc3luY2ZzIDM0NAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgX19OUl9zZW5kbW1zZyAzNDUKKyNkZWZpbmUgX19OUl9zZXRucyAzNDYKICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3VzZXIuaCBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS91c2VyLmgKaW5kZXggOTgwYjBhYS4uMDU0MTgyZSAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3VzZXIuaAorKysgYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vdXNlci5oCkBAIC03LDEwICs3LDEzIEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotI2lmZGVmIF9faTM4Nl9fCiAjaW5jbHVkZSAidXNlcl8zMi5oIgotI2Vsc2UKLSNpbmNsdWRlICJ1c2VyXzY0LmgiCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS91c2VyMzIuaCBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS91c2VyMzIuaAppbmRleCA4OWVhYmIxLi4xNTQ5ZWZkIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vdXNlcjMyLmgKKysrIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3VzZXIzMi5oCkBAIC03LDY3ICs3LDc5IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBVU0VSMzJfSAogI2RlZmluZSBVU0VSMzJfSCAxCi0KIHN0cnVjdCB1c2VyX2kzODdfaWEzMl9zdHJ1Y3QgewogIHUzMiBjd2Q7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHUzMiBzd2Q7CiAgdTMyIHR3ZDsKICB1MzIgZmlwOwogIHUzMiBmY3M7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHUzMiBmb287CiAgdTMyIGZvczsKICB1MzIgc3Rfc3BhY2VbMjBdOwogfTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCB1c2VyMzJfZnhzcl9zdHJ1Y3QgewogIHVuc2lnbmVkIHNob3J0IGN3ZDsKICB1bnNpZ25lZCBzaG9ydCBzd2Q7CiAgdW5zaWduZWQgc2hvcnQgdHdkOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBzaG9ydCBmb3A7CiAgaW50IGZpcDsKICBpbnQgZmNzOwogIGludCBmb287CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGludCBmb3M7CiAgaW50IG14Y3NyOwogIGludCByZXNlcnZlZDsKICBpbnQgc3Rfc3BhY2VbMzJdOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBpbnQgeG1tX3NwYWNlWzMyXTsKICBpbnQgcGFkZGluZ1s1Nl07CiB9OwotCiBzdHJ1Y3QgdXNlcl9yZWdzX3N0cnVjdDMyIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgZWJ4LCBlY3gsIGVkeCwgZXNpLCBlZGksIGVicCwgZWF4OwogIHVuc2lnbmVkIHNob3J0IGRzLCBfX2RzLCBlcywgX19lczsKICB1bnNpZ25lZCBzaG9ydCBmcywgX19mcywgZ3MsIF9fZ3M7CiAgX191MzIgb3JpZ19lYXgsIGVpcDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgc2hvcnQgY3MsIF9fY3M7CiAgX191MzIgZWZsYWdzLCBlc3A7CiAgdW5zaWduZWQgc2hvcnQgc3MsIF9fc3M7CiB9OwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IHVzZXIzMiB7CiAgc3RydWN0IHVzZXJfcmVnc19zdHJ1Y3QzMiByZWdzOwogIGludCB1X2ZwdmFsaWQ7Ci0KICBzdHJ1Y3QgdXNlcl9pMzg3X2lhMzJfc3RydWN0IGkzODc7Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgdV90c2l6ZTsKICBfX3UzMiB1X2RzaXplOwogIF9fdTMyIHVfc3NpemU7CiAgX191MzIgc3RhcnRfY29kZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgc3RhcnRfc3RhY2s7CiAgX191MzIgc2lnbmFsOwogIGludCByZXNlcnZlZDsKICBfX3UzMiB1X2FyMDsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiB1X2Zwc3RhdGU7CiAgX191MzIgbWFnaWM7CiAgY2hhciB1X2NvbW1bMzJdOwogIGludCB1X2RlYnVncmVnWzhdOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07Ci0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3VzZXJfMzIuaCBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS91c2VyXzMyLmgKaW5kZXggOGUwMjk2Yy4uNjgyNWIzNSAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3VzZXJfMzIuaAorKysgYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vdXNlcl8zMi5oCkBAIC03LDc1ICs3LDg1IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfSTM4Nl9VU0VSX0gKICNkZWZpbmUgX0kzODZfVVNFUl9ICi0KICNpbmNsdWRlIDxhc20vcGFnZS5oPgotCiBzdHJ1Y3QgdXNlcl9pMzg3X3N0cnVjdCB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGxvbmcgY3dkOwogIGxvbmcgc3dkOwogIGxvbmcgdHdkOwogIGxvbmcgZmlwOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBsb25nIGZjczsKICBsb25nIGZvbzsKICBsb25nIGZvczsKICBsb25nIHN0X3NwYWNlWzIwXTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwotCiBzdHJ1Y3QgdXNlcl9meHNyX3N0cnVjdCB7CiAgdW5zaWduZWQgc2hvcnQgY3dkOwogIHVuc2lnbmVkIHNob3J0IHN3ZDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgc2hvcnQgdHdkOwogIHVuc2lnbmVkIHNob3J0IGZvcDsKICBsb25nIGZpcDsKICBsb25nIGZjczsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgbG9uZyBmb287CiAgbG9uZyBmb3M7CiAgbG9uZyBteGNzcjsKICBsb25nIHJlc2VydmVkOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBsb25nIHN0X3NwYWNlWzMyXTsKICBsb25nIHhtbV9zcGFjZVszMl07CiAgbG9uZyBwYWRkaW5nWzU2XTsKIH07Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgdXNlcl9yZWdzX3N0cnVjdCB7CiAgbG9uZyBlYngsIGVjeCwgZWR4LCBlc2ksIGVkaSwgZWJwLCBlYXg7CiAgdW5zaWduZWQgc2hvcnQgZHMsIF9fZHMsIGVzLCBfX2VzOwogIHVuc2lnbmVkIHNob3J0IGZzLCBfX2ZzLCBncywgX19nczsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgbG9uZyBvcmlnX2VheCwgZWlwOwogIHVuc2lnbmVkIHNob3J0IGNzLCBfX2NzOwogIGxvbmcgZWZsYWdzLCBlc3A7CiAgdW5zaWduZWQgc2hvcnQgc3MsIF9fc3M7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKLQogc3RydWN0IHVzZXJ7Ci0KICBzdHJ1Y3QgdXNlcl9yZWdzX3N0cnVjdCByZWdzOwotCiAgaW50IHVfZnB2YWxpZDsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgdXNlcl9pMzg3X3N0cnVjdCBpMzg3OwotCiAgdW5zaWduZWQgbG9uZyBpbnQgdV90c2l6ZTsKICB1bnNpZ25lZCBsb25nIGludCB1X2RzaXplOwogIHVuc2lnbmVkIGxvbmcgaW50IHVfc3NpemU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGxvbmcgc3RhcnRfY29kZTsKICB1bnNpZ25lZCBsb25nIHN0YXJ0X3N0YWNrOwogIGxvbmcgaW50IHNpZ25hbDsKICBpbnQgcmVzZXJ2ZWQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCB1c2VyX3B0X3JlZ3MgKiB1X2FyMDsKLQogIHN0cnVjdCB1c2VyX2kzODdfc3RydWN0KiB1X2Zwc3RhdGU7CiAgdW5zaWduZWQgbG9uZyBtYWdpYzsKICBjaGFyIHVfY29tbVszMl07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGludCB1X2RlYnVncmVnWzhdOwogfTsKICNkZWZpbmUgTkJQRyBQQUdFX1NJWkUKICNkZWZpbmUgVVBBR0VTIDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEhPU1RfVEVYVF9TVEFSVF9BRERSICh1LnN0YXJ0X2NvZGUpCiAjZGVmaW5lIEhPU1RfU1RBQ0tfRU5EX0FERFIgKHUuc3RhcnRfc3RhY2sgKyB1LnVfc3NpemUgKiBOQlBHKQotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS92bTg2LmggYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vdm04Ni5oCmluZGV4IGQwZTcxZjEuLjk1Njg5MzAgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS92bTg2LmgKKysrIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3ZtODYuaApAQCAtNywxMDcgKzcsMTE5IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfTElOVVhfVk04Nl9ICiAjZGVmaW5lIF9MSU5VWF9WTTg2X0gKLQogI2RlZmluZSBURl9NQVNLIDB4MDAwMDAxMDAKICNkZWZpbmUgSUZfTUFTSyAweDAwMDAwMjAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJT1BMX01BU0sgMHgwMDAwMzAwMAogI2RlZmluZSBOVF9NQVNLIDB4MDAwMDQwMDAKLSNkZWZpbmUgVk1fTUFTSyAwICAKKyNkZWZpbmUgVk1fTUFTSyAwCiAjZGVmaW5lIEFDX01BU0sgMHgwMDA0MDAwMAotI2RlZmluZSBWSUZfTUFTSyAweDAwMDgwMDAwICAKLSNkZWZpbmUgVklQX01BU0sgMHgwMDEwMDAwMCAgCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBWSUZfTUFTSyAweDAwMDgwMDAwCisjZGVmaW5lIFZJUF9NQVNLIDB4MDAxMDAwMDAKICNkZWZpbmUgSURfTUFTSyAweDAwMjAwMDAwCi0KICNkZWZpbmUgQklPU1NFRyAweDBmMDAwCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIENQVV8wODYgMAogI2RlZmluZSBDUFVfMTg2IDEKICNkZWZpbmUgQ1BVXzI4NiAyCiAjZGVmaW5lIENQVV8zODYgMworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQ1BVXzQ4NiA0CiAjZGVmaW5lIENQVV81ODYgNQotCiAjZGVmaW5lIFZNODZfVFlQRShyZXR2YWwpICgocmV0dmFsKSAmIDB4ZmYpCiAjZGVmaW5lIFZNODZfQVJHKHJldHZhbCkgKChyZXR2YWwpID4+IDgpCi0KLSNkZWZpbmUgVk04Nl9TSUdOQUwgMCAgCi0jZGVmaW5lIFZNODZfVU5LTk9XTiAxICAKLSNkZWZpbmUgVk04Nl9JTlR4IDIgIAotI2RlZmluZSBWTTg2X1NUSSAzICAKLQotI2RlZmluZSBWTTg2X1BJQ1JFVFVSTiA0ICAKLSNkZWZpbmUgVk04Nl9UUkFQIDYgIAotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBWTTg2X1NJR05BTCAwCisjZGVmaW5lIFZNODZfVU5LTk9XTiAxCisjZGVmaW5lIFZNODZfSU5UeCAyCisjZGVmaW5lIFZNODZfU1RJIDMKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFZNODZfUElDUkVUVVJOIDQKKyNkZWZpbmUgVk04Nl9UUkFQIDYKICNkZWZpbmUgVk04Nl9QTFVTX0lOU1RBTExfQ0hFQ0sgMAogI2RlZmluZSBWTTg2X0VOVEVSIDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFZNODZfRU5URVJfTk9fQllQQVNTIDIKICNkZWZpbmUgVk04Nl9SRVFVRVNUX0lSUSAzCiAjZGVmaW5lIFZNODZfRlJFRV9JUlEgNAogI2RlZmluZSBWTTg2X0dFVF9JUlFfQklUUyA1CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWTTg2X0dFVF9BTkRfUkVTRVRfSVJRIDYKLQogc3RydWN0IHZtODZfcmVncyB7Ci0KICBsb25nIGVieDsKICBsb25nIGVjeDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgbG9uZyBlZHg7CiAgbG9uZyBlc2k7CiAgbG9uZyBlZGk7CiAgbG9uZyBlYnA7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGxvbmcgZWF4OwogIGxvbmcgX19udWxsX2RzOwogIGxvbmcgX19udWxsX2VzOwogIGxvbmcgX19udWxsX2ZzOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBsb25nIF9fbnVsbF9nczsKICBsb25nIG9yaWdfZWF4OwogIGxvbmcgZWlwOwogIHVuc2lnbmVkIHNob3J0IGNzLCBfX2NzaDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgbG9uZyBlZmxhZ3M7CiAgbG9uZyBlc3A7CiAgdW5zaWduZWQgc2hvcnQgc3MsIF9fc3NoOwotCiAgdW5zaWduZWQgc2hvcnQgZXMsIF9fZXNoOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBzaG9ydCBkcywgX19kc2g7CiAgdW5zaWduZWQgc2hvcnQgZnMsIF9fZnNoOwogIHVuc2lnbmVkIHNob3J0IGdzLCBfX2dzaDsKIH07Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgcmV2ZWN0b3JlZF9zdHJ1Y3QgewogIHVuc2lnbmVkIGxvbmcgX19tYXBbOF07CiB9OwotCiBzdHJ1Y3Qgdm04Nl9zdHJ1Y3QgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3Qgdm04Nl9yZWdzIHJlZ3M7CiAgdW5zaWduZWQgbG9uZyBmbGFnczsKICB1bnNpZ25lZCBsb25nIHNjcmVlbl9iaXRtYXA7CiAgdW5zaWduZWQgbG9uZyBjcHVfdHlwZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IHJldmVjdG9yZWRfc3RydWN0IGludF9yZXZlY3RvcmVkOwogIHN0cnVjdCByZXZlY3RvcmVkX3N0cnVjdCBpbnQyMV9yZXZlY3RvcmVkOwogfTsKLQogI2RlZmluZSBWTTg2X1NDUkVFTl9CSVRNQVAgMHgwMDAxCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3Qgdm04NnBsdXNfaW5mb19zdHJ1Y3QgewogIHVuc2lnbmVkIGxvbmcgZm9yY2VfcmV0dXJuX2Zvcl9waWM6MTsKICB1bnNpZ25lZCBsb25nIHZtODZkYmdfYWN0aXZlOjE7CiAgdW5zaWduZWQgbG9uZyB2bTg2ZGJnX1RGcGVuZGlnOjE7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGxvbmcgdW51c2VkOjI4OwogIHVuc2lnbmVkIGxvbmcgaXNfdm04NnB1czoxOwogIHVuc2lnbmVkIGNoYXIgdm04NmRiZ19pbnR4eHRhYlszMl07CiB9OwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IHZtODZwbHVzX3N0cnVjdCB7CiAgc3RydWN0IHZtODZfcmVncyByZWdzOwogIHVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAgdW5zaWduZWQgbG9uZyBzY3JlZW5fYml0bWFwOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBsb25nIGNwdV90eXBlOwogIHN0cnVjdCByZXZlY3RvcmVkX3N0cnVjdCBpbnRfcmV2ZWN0b3JlZDsKICBzdHJ1Y3QgcmV2ZWN0b3JlZF9zdHJ1Y3QgaW50MjFfcmV2ZWN0b3JlZDsKICBzdHJ1Y3Qgdm04NnBsdXNfaW5mb19zdHJ1Y3Qgdm04NnBsdXM7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKLQogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vdm95YWdlci5oIGIvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3ZveWFnZXIuaAppbmRleCBjNmY1MGE5Li5kYTk3M2IzIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vdm95YWdlci5oCisrKyBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS92b3lhZ2VyLmgKQEAgLTcsNDMxICs3LDQ1NCBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICN1bmRlZiBWT1lBR0VSX0RFQlVHCiAjdW5kZWYgVk9ZQUdFUl9DQVRfREVCVUcKLQogI2lmZGVmIFZPWUFHRVJfREVCVUcKICNkZWZpbmUgVkRFQlVHKHgpIHByaW50ayB4CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2Vsc2UKICNkZWZpbmUgVkRFQlVHKHgpCiAjZW5kaWYKLQogI2RlZmluZSBWT1lBR0VSX0xFVkVMNV9BTkRfQUJPVkUgMHgzNDM1CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWT1lBR0VSX0xFVkVMNCAweDMzNjAKLQogI2RlZmluZSBWT1lBR0VSX0RJTk8gMHg0MwotCiAjZGVmaW5lIFZPWUFHRVJfTUNfU0VUVVAgMHg5NgotCiAjZGVmaW5lIFZPWUFHRVJfQ0FUX0NPTkZJR19QT1JUIDB4OTcKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFZPWUFHRVJfQ0FUX0RFU0VMRUNUIDB4ZmYKICNkZWZpbmUgVk9ZQUdFUl9TU1BCX1JFTE9DQVRJT05fUE9SVCAweDk4Ci0KICNkZWZpbmUgVk9ZQUdFUl9DQVRfSVJDWUMgMHgwMQotCiAjZGVmaW5lIFZPWUFHRVJfQ0FUX0RSQ1lDIDB4MDIKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVk9ZQUdFUl9DQVRfUlVOIDB4MEYKLQogI2RlZmluZSBWT1lBR0VSX0NBVF9FTkQgMHg4MAotCiAjZGVmaW5lIFZPWUFHRVJfQ0FUX0hPTEQgMHg5MAotCiAjZGVmaW5lIFZPWUFHRVJfQ0FUX1NURVAgMHhFMAotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWT1lBR0VSX0NBVF9DTEVNU09OIDB4RkYKLQogI2RlZmluZSBWT1lBR0VSX0NBVF9IRUFERVIgMHg3RgotCiAjZGVmaW5lIFZPWUFHRVJfTUlOX01PRFVMRSAweDEwCiAjZGVmaW5lIFZPWUFHRVJfTUFYX01PRFVMRSAweDFmCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFZPWUFHRVJfQVNJQ19JRF9SRUcgMHgwMAogI2RlZmluZSBWT1lBR0VSX0FTSUNfVFlQRV9SRUcgMHgwMQotCiAjZGVmaW5lIFZPWUFHRVJfQVVUT19JTkNfUkVHIDB4MDIKICNkZWZpbmUgVk9ZQUdFUl9BVVRPX0lOQyAweDA0CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWT1lBR0VSX05PX0FVVE9fSU5DIDB4ZmIKICNkZWZpbmUgVk9ZQUdFUl9TVUJBRERSREFUQSAweDAzCiAjZGVmaW5lIFZPWUFHRVJfU0NBTlBBVEggMHgwNQogI2RlZmluZSBWT1lBR0VSX0NPTk5FQ1RfQVNJQyAweDAxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWT1lBR0VSX0RJU0NPTk5FQ1RfQVNJQyAweGZlCiAjZGVmaW5lIFZPWUFHRVJfU1VCQUREUkxPIDB4MDYKICNkZWZpbmUgVk9ZQUdFUl9TVUJBRERSSEkgMHgwNwogI2RlZmluZSBWT1lBR0VSX1NVQk1PRFNFTEVDVCAweDA4CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWT1lBR0VSX1NVQk1PRFBSRVNFTlQgMHgwOQotCiAjZGVmaW5lIFZPWUFHRVJfU1VCQUREUl9MTyAweGZmCiAjZGVmaW5lIFZPWUFHRVJfU1VCQUREUl9ISSAweGZmZmYKLQogI2RlZmluZSBWT1lBR0VSX01BWF9TQ0FOX1BBVEggMHgxMDAKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVk9ZQUdFUl9NQVhfUkVHX1NJWkUgNAotCiAjZGVmaW5lIFZPWUFHRVJfTUFYX01PRFVMRVMgMTYKLQogI2RlZmluZSBWT1lBR0VSX01BWF9BU0lDU19QRVJfTU9EVUxFIDcKLQogI2RlZmluZSBWT1lBR0VSX0NBVF9JRCAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWT1lBR0VSX1BTSSAweDFhCi0KICNkZWZpbmUgVk9ZQUdFUl9SRUFEX0NPTkZJRyAweDEKICNkZWZpbmUgVk9ZQUdFUl9XUklURV9DT05GSUcgMHgyCiAjZGVmaW5lIFZPWUFHRVJfQllQQVNTIDB4ZmYKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHR5cGVkZWYgc3RydWN0IHZveWFnZXJfYXNpYwogewogIF9fdTggYXNpY19hZGRyOwogIF9fdTggYXNpY190eXBlOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IGFzaWNfaWQ7CiAgX191OCBqdGFnX2lkWzRdOwogIF9fdTggYXNpY19sb2NhdGlvbjsKICBfX3U4IGJpdF9sb2NhdGlvbjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191OCBpcmVnX2xlbmd0aDsKICBfX3UxNiBzdWJhZGRyOwogIHN0cnVjdCB2b3lhZ2VyX2FzaWMgKm5leHQ7CiB9IHZveWFnZXJfYXNpY190OwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogdHlwZWRlZiBzdHJ1Y3Qgdm95YWdlcl9tb2R1bGUgewogIF9fdTggbW9kdWxlX2FkZHI7CiAgX191OCBzY2FuX3BhdGhfY29ubmVjdGVkOwogIF9fdTE2IGVlX3NpemU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTE2IG51bV9hc2ljczsKICBfX3UxNiBpbnN0X2JpdHM7CiAgX191MTYgbGFyZ2VzdF9yZWc7CiAgX191MTYgc21hbGxlc3RfcmVnOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB2b3lhZ2VyX2FzaWNfdCAqYXNpYzsKICBzdHJ1Y3Qgdm95YWdlcl9tb2R1bGUgKnN1Ym1vZHVsZTsKICBzdHJ1Y3Qgdm95YWdlcl9tb2R1bGUgKm5leHQ7CiB9IHZveWFnZXJfbW9kdWxlX3Q7Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB0eXBlZGVmIHN0cnVjdCB2b3lhZ2VyX2VlcHJvbV9oZHIgewogIF9fdTggbW9kdWxlX2lkWzRdOwogIF9fdTggdmVyc2lvbl9pZDsKICBfX3U4IGNvbmZpZ19pZDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MTYgYm91bmRyeV9pZDsKICBfX3UxNiBlZV9zaXplOwogIF9fdTggYXNzZW1ibHlbMTFdOwogIF9fdTggYXNzZW1ibHlfcmV2OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IHRyYWNlcls0XTsKICBfX3UxNiBhc3NlbWJseV9ja3N1bTsKICBfX3UxNiBwb3dlcl9jb25zdW1wOwogIF9fdTE2IG51bV9hc2ljczsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MTYgYmlzdF90aW1lOwogIF9fdTE2IGVycl9sb2dfb2Zmc2V0OwogIF9fdTE2IHNjYW5fcGF0aF9vZmZzZXQ7CiAgX191MTYgY2N0X29mZnNldDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MTYgbG9nX2xlbmd0aDsKICBfX3UxNiB4c3VtX2VuZDsKICBfX3U4IHJlc2VydmVkWzRdOwogIF9fdTggc2ZsYWc7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTggcGFydF9udW1iZXJbMTNdOwogIF9fdTggdmVyc2lvblsxMF07CiAgX191OCBzaWduYXR1cmVbOF07CiAgX191MTYgZWVwcm9tX2Noa3N1bTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgZGF0YV9zdGFtcF9vZmZzZXQ7CiAgX191OCBlZmxhZyA7CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIHZveWFnZXJfZXByb21faGRyX3Q7Ci0KICNkZWZpbmUgVk9ZQUdFUl9FUFJPTV9TSVpFX09GRlNFVCAoKF9fdTE2KSgmKCgodm95YWdlcl9lcHJvbV9oZHJfdCAqKTApLT5lZV9zaXplKSkpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWT1lBR0VSX1hTVU1fRU5EX09GRlNFVCAweDJhCi0KIHR5cGVkZWYgc3RydWN0IHZveWFnZXJfc3BfdGFibGUgewogIF9fdTggYXNpY19pZDsKICBfX3U4IGJ5cGFzc19mbGFnOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UxNiBhc2ljX2RhdGFfb2Zmc2V0OwogIF9fdTE2IGNvbmZpZ19kYXRhX29mZnNldDsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgdm95YWdlcl9zcF90YWJsZV90OwotCiB0eXBlZGVmIHN0cnVjdCB2b3lhZ2VyX2p0YWdfdGFibGUgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IGljb2RlWzRdOwogIF9fdTggcnVuYmlzdFs0XTsKICBfX3U4IGludGVzdFs0XTsKICBfX3U4IHNhbXBfcHJlbGRbNF07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTggaXJlZ19sZW47CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIHZveWFnZXJfanR0X3Q7Ci0KIHR5cGVkZWYgc3RydWN0IHZveWFnZXJfYXNpY19kYXRhX3RhYmxlIHsKICBfX3U4IGp0YWdfaWRbNF07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTE2IGxlbmd0aF9ic3I7CiAgX191MTYgbGVuZ3RoX2Jpc3RfcmVnOwogIF9fdTMyIGJpc3RfY2xrOwogIF9fdTE2IHN1YmFkZHJfYml0czsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MTYgc2VlZF9iaXRzOwogIF9fdTE2IHNpZ19iaXRzOwogIF9fdTE2IGp0YWdfb2Zmc2V0OwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSB2b3lhZ2VyX2F0X3Q7Ci0KLSNkZWZpbmUgVk9ZQUdFUl9XQ0JJQzAgMHg0MSAgCi0jZGVmaW5lIFZPWUFHRVJfV0NCSUMxIDB4NDkgIAotI2RlZmluZSBWT1lBR0VSX1dDQklDMiAweDUxICAKLSNkZWZpbmUgVk9ZQUdFUl9XQ0JJQzMgMHg1OSAgCi0jZGVmaW5lIFZPWUFHRVJfV0NCSUM0IDB4NjEgIAotI2RlZmluZSBWT1lBR0VSX1dDQklDNSAweDY5ICAKLSNkZWZpbmUgVk9ZQUdFUl9XQ0JJQzYgMHg3MSAgCi0jZGVmaW5lIFZPWUFHRVJfV0NCSUM3IDB4NzkgIAotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBWT1lBR0VSX1dDQklDMCAweDQxCisjZGVmaW5lIFZPWUFHRVJfV0NCSUMxIDB4NDkKKyNkZWZpbmUgVk9ZQUdFUl9XQ0JJQzIgMHg1MQorI2RlZmluZSBWT1lBR0VSX1dDQklDMyAweDU5CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBWT1lBR0VSX1dDQklDNCAweDYxCisjZGVmaW5lIFZPWUFHRVJfV0NCSUM1IDB4NjkKKyNkZWZpbmUgVk9ZQUdFUl9XQ0JJQzYgMHg3MQorI2RlZmluZSBWT1lBR0VSX1dDQklDNyAweDc5CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWT1lBR0VSX1dDQklDX1RPTV9MIDB4NAogI2RlZmluZSBWT1lBR0VSX1dDQklDX1RPTV9IIDB4NQotCiAjZGVmaW5lIFZPWUFHRVJfVk1DMSAweDgxCiAjZGVmaW5lIFZPWUFHRVJfVk1DMiAweDkxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWT1lBR0VSX1ZNQzMgMHhhMQogI2RlZmluZSBWT1lBR0VSX1ZNQzQgMHhiMQotCiAjZGVmaW5lIFZPWUFHRVJfVk1DX01FTU9SWV9TRVRVUCAweDkKICNkZWZpbmUgVk1DX0ludGVybGVhdmluZyAweDAxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWTUNfNFdheSAweDAyCiAjZGVmaW5lIFZNQ19FdmVuQ2FjaGVMaW5lcyAweDA0CiAjZGVmaW5lIFZNQ19IaWdoTGluZSAweDA4CiAjZGVmaW5lIFZNQ19TdGFydDBfRW5hYmxlIDB4MjAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFZNQ19TdGFydDFfRW5hYmxlIDB4NDAKICNkZWZpbmUgVk1DX1ZyZW1hcCAweDgwCiAjZGVmaW5lIFZPWUFHRVJfVk1DX0JBTktfREVOU0lUWSAweGEKICNkZWZpbmUgVk1DX0JBTktfRU1QVFkgMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVk1DX0JBTktfNE1CIDEKICNkZWZpbmUgVk1DX0JBTktfMTZNQiAyCiAjZGVmaW5lIFZNQ19CQU5LXzY0TUIgMwogI2RlZmluZSBWTUNfQkFOSzBfTUFTSyAweDAzCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWTUNfQkFOSzFfTUFTSyAweDBDCiAjZGVmaW5lIFZNQ19CQU5LMl9NQVNLIDB4MzAKICNkZWZpbmUgVk1DX0JBTkszX01BU0sgMHhDMAotCiAjZGVmaW5lIFZPWUFHRVJfTU1DX0FTSUNfSUQgMQotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWT1lBR0VSX01NQ19NRU1PUlkwX01PRFVMRSAweDE0CiAjZGVmaW5lIFZPWUFHRVJfTU1DX01FTU9SWTFfTU9EVUxFIDB4MTUKLQogI2RlZmluZSBWT1lBR0VSX01NQV9BU0lDX0lEIDIKLQogI2RlZmluZSBWT1lBR0VSX1FVQURfQkFTRUJPQVJEIDEKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVk9ZQUdFUl9RVUFEX1FEQVRBMCAxCiAjZGVmaW5lIFZPWUFHRVJfUVVBRF9RREFUQTEgMgogI2RlZmluZSBWT1lBR0VSX1FVQURfUUFCQyAzCi0KICNkZWZpbmUgVk9ZQUdFUl9QUk9DRVNTT1JfUFJFU0VOVF9NQVNLIDB4ODhhCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWT1lBR0VSX01FTU9SWV9DTElDS01BUCAweGEyMwogI2RlZmluZSBWT1lBR0VSX0RVTVBfTE9DQVRJT04gMHhiMWEKLQogI2RlZmluZSBWT1lBR0VSX1NVU19JTl9DT05UUk9MX1BPUlQgMHgzZmYKICNkZWZpbmUgVk9ZQUdFUl9JTl9DT05UUk9MX0ZMQUcgMHg4MAotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWT1lBR0VSX1BTSV9TVEFUVVNfUkVHIDB4MDgKICNkZWZpbmUgUFNJX0RDX0ZBSUwgMHgwMQogI2RlZmluZSBQU0lfTU9OIDB4MDIKICNkZWZpbmUgUFNJX0ZBVUxUIDB4MDQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBTSV9BTEFSTSAweDA4CiAjZGVmaW5lIFBTSV9DVVJSRU5UIDB4MTAKICNkZWZpbmUgUFNJX0RWTSAweDIwCiAjZGVmaW5lIFBTSV9QU0NGQVVMVCAweDQwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQU0lfU1RBVF9DSEcgMHg4MAotCiAjZGVmaW5lIFZPWUFHRVJfUFNJX1NVUFBMWV9SRUcgMHg4MDAwCi0KICNkZWZpbmUgUFNJX0ZBSUxfREMgMHgwMQogI2RlZmluZSBQU0lfRkFJTF9BQyAweDAyCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQU0lfTU9OX0lOVCAweDA0CiAjZGVmaW5lIFBTSV9TV0lUQ0hfT0ZGIDB4MDgKICNkZWZpbmUgUFNJX0hYX09GRiAweDEwCiAjZGVmaW5lIFBTSV9TRUNVUklUWSAweDIwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQU0lfQ01PU19CQVRUX0xPVyAweDQwCiAjZGVmaW5lIFBTSV9DTU9TX0JBVFRfRkFJTCAweDgwCi0KICNkZWZpbmUgUFNJX0NMUl9TV0lUQ0hfT0ZGIDB4MTMKICNkZWZpbmUgUFNJX0NMUl9IWF9PRkYgMHgxNAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUFNJX0NMUl9DTU9TX0JBVFRfRkFJTCAweDE3Ci0KICNkZWZpbmUgVk9ZQUdFUl9QU0lfTUFTSyAweDgwMDEKICNkZWZpbmUgUFNJX01BU0tfTUFTSyAweDEwCi0KICNkZWZpbmUgVk9ZQUdFUl9QU0lfQUNfRkFJTF9SRUcgMHg4MDA0CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBQ19GQUlMX1NUQVRfQ0hBTkdFIDB4ODAKLQogI2RlZmluZSBWT1lBR0VSX1BTSV9HRU5FUkFMX1JFRyAweDgwMDcKLQogI2RlZmluZSBQU0lfU1dJVENIX09OIDB4MDEKICNkZWZpbmUgUFNJX1NXSVRDSF9FTkFCTEVEIDB4MDIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBTSV9BTEFSTV9FTkFCTEVEIDB4MDgKICNkZWZpbmUgUFNJX1NFQ1VSRV9FTkFCTEVEIDB4MTAKICNkZWZpbmUgUFNJX0NPTERfUkVTRVQgMHgyMAogI2RlZmluZSBQU0lfQ09MRF9TVEFSVCAweDgwCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBTSV9QT1dFUl9ET1dOIDB4MTAKICNkZWZpbmUgUFNJX1NXSVRDSF9ESVNBQkxFIDB4MDEKICNkZWZpbmUgUFNJX1NXSVRDSF9FTkFCTEUgMHgxMQogI2RlZmluZSBQU0lfQ0xFQVIgMHgxMgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUFNJX0FMQVJNX0RJU0FCTEUgMHgwMwogI2RlZmluZSBQU0lfQUxBUk1fRU5BQkxFIDB4MTMKICNkZWZpbmUgUFNJX0NMRUFSX0NPTERfUkVTRVQgMHgwNQogI2RlZmluZSBQU0lfU0VUX0NPTERfUkVTRVQgMHgxNQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUFNJX0NMRUFSX0NPTERfU1RBUlQgMHgwNwogI2RlZmluZSBQU0lfU0VUX0NPTERfU1RBUlQgMHgxNwotCiBzdHJ1Y3Qgdm95YWdlcl9iaW9zX2luZm8gewogIF9fdTggbGVuOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IG1ham9yOwogIF9fdTggbWlub3I7CiAgX191OCBkZWJ1ZzsKICBfX3U4IG51bV9jbGFzc2VzOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IGNsYXNzXzE7CiAgX191OCBjbGFzc18yOwogfTsKLQogI2RlZmluZSBOVU1CRVJfT0ZfTUNfQlVTU0VTIDIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNMT1RTX1BFUl9NQ19CVVMgOAotI2RlZmluZSBNQVhfQ1BVUyAxNiAgCi0jZGVmaW5lIE1BWF9QUk9DRVNTT1JfQk9BUkRTIDQgIAotI2RlZmluZSBNQVhfQ0FDSEVfTEVWRUxTIDQgIAotI2RlZmluZSBNQVhfU0hBUkVEX0NQVVMgNCAgCisjZGVmaW5lIE1BWF9DUFVTIDE2CisjZGVmaW5lIE1BWF9QUk9DRVNTT1JfQk9BUkRTIDQKKyNkZWZpbmUgTUFYX0NBQ0hFX0xFVkVMUyA0CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBNQVhfU0hBUkVEX0NQVVMgNAogI2RlZmluZSBOVU1CRVJfT0ZfUE9TX1JFR1MgOAotCiB0eXBlZGVmIHN0cnVjdCB7CiAgX191OCBNQ19TbG90OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IFBPU19WYWx1ZXNbTlVNQkVSX09GX1BPU19SRUdTXTsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgTUNfU2xvdEluZm9ybWF0aW9uX3Q7Ci0KIHN0cnVjdCBRdWFkRGVzY3JpcHRpb24gewogIF9fdTggVHlwZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191OCBTdHJ1Y3R1cmVWZXJzaW9uOwogIF9fdTMyIENQSV9CYXNlQWRkcmVzczsKICBfX3UzMiBMQVJDX0JhbmtTaXplOwogIF9fdTMyIExvY2FsTWVtb3J5U3RhdGVCaXRzOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IFNsb3Q7CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwotCiBzdHJ1Y3QgUHJvY0JvYXJkSW5mbyB7CiAgX191OCBUeXBlOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IFN0cnVjdHVyZVZlcnNpb247CiAgX191OCBOdW1iZXJPZkJvYXJkczsKICBzdHJ1Y3QgUXVhZERlc2NyaXB0aW9uIFF1YWREYXRhW01BWF9QUk9DRVNTT1JfQk9BUkRTXTsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgQ2FjaGVEZXNjcmlwdGlvbiB7CiAgX191OCBMZXZlbDsKICBfX3UzMiBUb3RhbFNpemU7CiAgX191MTYgTGluZVNpemU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTggQXNzb2NpYXRpdml0eTsKICBfX3U4IENhY2hlVHlwZTsKICBfX3U4IFdyaXRlVHlwZTsKICBfX3U4IE51bWJlcl9DUFVzX1NoYXJlZEJ5OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IFNoYXJlZF9DUFVzX0hhcmR3YXJlX0lEc1tNQVhfU0hBUkVEX0NQVVNdOwotCiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwotCiBzdHJ1Y3QgQ1BVX0Rlc2NyaXB0aW9uIHsKICBfX3U4IENQVV9IYXJkd2FyZUlkOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBjaGFyICpGUlVfU3RyaW5nOwogIF9fdTggTnVtYmVyT2ZDYWNoZUxldmVsczsKICBzdHJ1Y3QgQ2FjaGVEZXNjcmlwdGlvbiBDYWNoZUxldmVsRGF0YVtNQVhfQ0FDSEVfTEVWRUxTXTsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgQ1BVX0luZm8gewogIF9fdTggVHlwZTsKICBfX3U4IFN0cnVjdHVyZVZlcnNpb247CiAgX191OCBOdW1iZXJPZl9DUFVzOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgQ1BVX0Rlc2NyaXB0aW9uIENQVV9EYXRhW01BWF9DUFVTXTsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Ci0KIHR5cGVkZWYgc3RydWN0IHsKICBfX3U4IE1haWxib3hfU1VTOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IE1haWxib3hfT1M7CiAgX191OCBTVVNfTWFpbGJveFZlcnNpb247CiAgX191OCBPU19NYWlsYm94VmVyc2lvbjsKICBfX3UzMiBPU19GbGFnczsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgU1VTX0ZsYWdzOwogIF9fdTMyIFdhdGNoRG9nUGVyaW9kOwogIF9fdTMyIFdhdGNoRG9nQ291bnQ7CiAgX191MzIgTWVtb3J5Rm9yX1NVU19FcnJvckxvZzsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTUNfU2xvdEluZm9ybWF0aW9uX3QgTUNfU2xvdEluZm9bTlVNQkVSX09GX01DX0JVU1NFUypTTE9UU19QRVJfTUNfQlVTXTsKLQogIHN0cnVjdCBQcm9jQm9hcmRJbmZvICpCb2FyZERhdGE7CiAgc3RydWN0IENQVV9JbmZvICpDUFVfRGF0YTsKLQogfSBWb3lhZ2VyX0tlcm5lbFNVU19NYm94X3Q7Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3Qgdm95YWdlcl9xaWNfY3BpIHsKLQogIHN0cnVjdCB7CiAgX191MzIgcGFkMVszXTsKICBfX3UzMiBjcGk7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHBhZDJbNF07CiAgfSBxaWNfY3BpWzhdOwogfTsKLQogc3RydWN0IHZveWFnZXJfc3RhdHVzIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgcG93ZXJfZmFpbDoxOwogIF9fdTMyIHN3aXRjaF9vZmY6MTsKICBfX3UzMiByZXF1ZXN0X2Zyb21fa2VybmVsOjE7CiB9OwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IHZveWFnZXJfcHNpX3JlZ3MgewogIF9fdTggY2F0X2lkOwogIF9fdTggY2F0X2RldjsKICBfX3U4IGNhdF9jb250cm9sOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IHN1YmFkZHI7CiAgX191OCBkdW1teTQ7CiAgX191OCBjaGVja2JpdDsKICBfX3U4IHN1YmFkZHJfbG93OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IHN1YmFkZHJfaGlnaDsKICBfX3U4IGludHN0YXR1czsKICBfX3U4IHN0YXQxOwogIF9fdTggc3RhdDM7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTggZmF1bHQ7CiAgX191OCB0bXM7CiAgX191OCBnZW47CiAgX191OCBzeXNjb25mOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IGR1bW15MTU7CiB9OwotCiBzdHJ1Y3Qgdm95YWdlcl9wc2lfc3VicmVncyB7CiAgX191OCBzdXBwbHk7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTggbWFzazsKICBfX3U4IHByZXNlbnQ7CiAgX191OCBEQ2ZhaWw7CiAgX191OCBBQ2ZhaWw7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTggZmFpbDsKICBfX3U4IFVQU2ZhaWw7CiAgX191OCBnZW5zdGF0dXM7CiB9OwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IHZveWFnZXJfcHNpIHsKICBzdHJ1Y3Qgdm95YWdlcl9wc2lfcmVncyByZWdzOwogIHN0cnVjdCB2b3lhZ2VyX3BzaV9zdWJyZWdzIHN1YnJlZ3M7CiB9OwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IHZveWFnZXJfU1VTIHsKICNkZWZpbmUgVk9ZQUdFUl9EVU1QX0JVVFRPTl9OTUkgMHgxCiAjZGVmaW5lIFZPWUFHRVJfU1VTX1ZBTElEIDB4MgogI2RlZmluZSBWT1lBR0VSX1NZU0lOVF9DT01QTEVURSAweDMKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191OCBTVVNfbWJveDsKICNkZWZpbmUgVk9ZQUdFUl9OT19DT01NQU5EIDB4MAogI2RlZmluZSBWT1lBR0VSX0lHTk9SRV9EVU1QIDB4MQogI2RlZmluZSBWT1lBR0VSX0RPX0RVTVAgMHgyCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWT1lBR0VSX1NZU0lOVF9IQU5EU0hBS0UgMHgzCiAjZGVmaW5lIFZPWUFHRVJfRE9fTUVNX0RVTVAgMHg0CiAjZGVmaW5lIFZPWUFHRVJfU1lTSU5UX1dBU19SRUNPVkVSRUQgMHg1CiAgX191OCBrZXJuZWxfbWJveDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFZPWUFHRVJfTUFJTEJPWF9WRVJTSU9OIDB4MTAKICBfX3U4IFNVU192ZXJzaW9uOwogIF9fdTgga2VybmVsX3ZlcnNpb247CiAjZGVmaW5lIFZPWUFHRVJfT1NfSEFTX1NZU0lOVCAweDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFZPWUFHRVJfT1NfSU5fUFJPR1JFU1MgMHgyCiAjZGVmaW5lIFZPWUFHRVJfVVBEQVRJTkdfV0RQRVJJT0QgMHg0CiAgX191MzIga2VybmVsX2ZsYWdzOwogI2RlZmluZSBWT1lBR0VSX1NVU19CT09USU5HIDB4MQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVk9ZQUdFUl9TVVNfSU5fUFJPR1JFU1MgMHgyCiAgX191MzIgU1VTX2ZsYWdzOwogIF9fdTMyIHdhdGNoZG9nX3BlcmlvZDsKICBfX3UzMiB3YXRjaGRvZ19jb3VudDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgU1VTX2Vycm9ybG9nOwotCiB9OwotCiAjZGVmaW5lIFZPWUFHRVJfUFNJX1JFQUQgMAogI2RlZmluZSBWT1lBR0VSX1BTSV9XUklURSAxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWT1lBR0VSX1BTSV9TVUJSRUFEIDIKICNkZWZpbmUgVk9ZQUdFUl9QU0lfU1VCV1JJVEUgMwotCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20vdnN5c2NhbGwuaCBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS92c3lzY2FsbC5oCmluZGV4IGE3YmVlM2IuLjQxYTUyY2YgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS92c3lzY2FsbC5oCisrKyBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS92c3lzY2FsbC5oCkBAIC03LDIxICs3LDI4IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfQVNNX1g4Nl82NF9WU1lTQ0FMTF9IXwogI2RlZmluZSBfQVNNX1g4Nl82NF9WU1lTQ0FMTF9IXwotCiBlbnVtIHZzeXNjYWxsX251bSB7CiAgX19OUl92Z2V0dGltZW9mZGF5LAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX05SX3Z0aW1lLAogIF9fTlJfdmdldGNwdSwKIH07Ci0KICNkZWZpbmUgVlNZU0NBTExfU1RBUlQgKC0xMFVMIDw8IDIwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVlNZU0NBTExfU0laRSAxMDI0CiAjZGVmaW5lIFZTWVNDQUxMX0VORCAoLTJVTCA8PCAyMCkKICNkZWZpbmUgVlNZU0NBTExfTUFQUEVEX1BBR0VTIDEKICNkZWZpbmUgVlNZU0NBTExfQUREUih2c3lzY2FsbF9ucikgKFZTWVNDQUxMX1NUQVJUK1ZTWVNDQUxMX1NJWkUqKHZzeXNjYWxsX25yKSkKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3hlbi9oeXBlcmNhbGwuaCBiL2xpYmMva2VybmVsL2FyY2gteDg2L2FzbS94ZW4vaHlwZXJjYWxsLmgKaW5kZXggM2M1MjNhOC4uYmIyMzQyYyAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvYXJjaC14ODYvYXNtL3hlbi9oeXBlcmNhbGwuaAorKysgYi9saWJjL2tlcm5lbC9hcmNoLXg4Ni9hc20veGVuL2h5cGVyY2FsbC5oCkBAIC03LDI4ICs3LDI5IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfX0hZUEVSQ0FMTF9IX18KICNkZWZpbmUgX19IWVBFUkNBTExfSF9fCi0KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2luY2x1ZGUgPHhlbi9pbnRlcmZhY2UveGVuLmg+CiAjaW5jbHVkZSA8eGVuL2ludGVyZmFjZS9zY2hlZC5oPgogI2luY2x1ZGUgPHhlbi9pbnRlcmZhY2UvcGh5c2Rldi5oPgotCiAjZGVmaW5lIF9oeXBlcmNhbGwwKHR5cGUsIG5hbWUpICAoeyAgIGxvbmcgX19yZXM7ICAgYXNtIHZvbGF0aWxlICggICAiY2FsbCAlW2NhbGxdIiAgIDogIj1hIiAoX19yZXMpICAgOiBbY2FsbF0gIm0iIChoeXBlcmNhbGxfcGFnZVtfX0hZUEVSVklTT1JfIyNuYW1lXSkgICA6ICJtZW1vcnkiICk7ICAgKHR5cGUpX19yZXM7ICB9KQotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfaHlwZXJjYWxsMSh0eXBlLCBuYW1lLCBhMSkgICh7ICAgbG9uZyBfX3JlcywgX19pZ24xOyAgIGFzbSB2b2xhdGlsZSAoICAgImNhbGwgJVtjYWxsXSIgICA6ICI9YSIgKF9fcmVzKSwgIj1iIiAoX19pZ24xKSAgIDogIjEiICgobG9uZykoYTEpKSwgICBbY2FsbF0gIm0iIChoeXBlcmNhbGxfcGFnZVtfX0hZUEVSVklTT1JfIyNuYW1lXSkgICA6ICJtZW1vcnkiICk7ICAgKHR5cGUpX19yZXM7ICB9KQotCiAjZGVmaW5lIF9oeXBlcmNhbGwyKHR5cGUsIG5hbWUsIGExLCBhMikgICh7ICAgbG9uZyBfX3JlcywgX19pZ24xLCBfX2lnbjI7ICAgYXNtIHZvbGF0aWxlICggICAiY2FsbCAlW2NhbGxdIiAgIDogIj1hIiAoX19yZXMpLCAiPWIiIChfX2lnbjEpLCAiPWMiIChfX2lnbjIpICAgOiAiMSIgKChsb25nKShhMSkpLCAiMiIgKChsb25nKShhMikpLCAgIFtjYWxsXSAibSIgKGh5cGVyY2FsbF9wYWdlW19fSFlQRVJWSVNPUl8jI25hbWVdKSAgIDogIm1lbW9yeSIgKTsgICAodHlwZSlfX3JlczsgIH0pCi0KICNkZWZpbmUgX2h5cGVyY2FsbDModHlwZSwgbmFtZSwgYTEsIGEyLCBhMykgICh7ICAgbG9uZyBfX3JlcywgX19pZ24xLCBfX2lnbjIsIF9faWduMzsgICBhc20gdm9sYXRpbGUgKCAgICJjYWxsICVbY2FsbF0iICAgOiAiPWEiIChfX3JlcyksICI9YiIgKF9faWduMSksICI9YyIgKF9faWduMiksICAgIj1kIiAoX19pZ24zKSAgIDogIjEiICgobG9uZykoYTEpKSwgIjIiICgobG9uZykoYTIpKSwgICAiMyIgKChsb25nKShhMykpLCAgIFtjYWxsXSAibSIgKGh5cGVyY2FsbF9wYWdlW19fSFlQRVJWSVNPUl8jI25hbWVdKSAgIDogIm1lbW9yeSIgKTsgICAodHlwZSlfX3JlczsgIH0pCi0KICNkZWZpbmUgX2h5cGVyY2FsbDQodHlwZSwgbmFtZSwgYTEsIGEyLCBhMywgYTQpICAoeyAgIGxvbmcgX19yZXMsIF9faWduMSwgX19pZ24yLCBfX2lnbjMsIF9faWduNDsgICBhc20gdm9sYXRpbGUgKCAgICJjYWxsICVbY2FsbF0iICAgOiAiPWEiIChfX3JlcyksICI9YiIgKF9faWduMSksICI9YyIgKF9faWduMiksICAgIj1kIiAoX19pZ24zKSwgIj1TIiAoX19pZ240KSAgIDogIjEiICgobG9uZykoYTEpKSwgIjIiICgobG9uZykoYTIpKSwgICAiMyIgKChsb25nKShhMykpLCAiNCIgKChsb25nKShhNCkpLCAgIFtjYWxsXSAibSIgKGh5cGVyY2FsbF9wYWdlW19fSFlQRVJWSVNPUl8jI25hbWVdKSAgIDogIm1lbW9yeSIgKTsgICAodHlwZSlfX3JlczsgIH0pCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9oeXBlcmNhbGw1KHR5cGUsIG5hbWUsIGExLCBhMiwgYTMsIGE0LCBhNSkgICh7ICAgbG9uZyBfX3JlcywgX19pZ24xLCBfX2lnbjIsIF9faWduMywgX19pZ240LCBfX2lnbjU7ICAgYXNtIHZvbGF0aWxlICggICAiY2FsbCAlW2NhbGxdIiAgIDogIj1hIiAoX19yZXMpLCAiPWIiIChfX2lnbjEpLCAiPWMiIChfX2lnbjIpLCAgICI9ZCIgKF9faWduMyksICI9UyIgKF9faWduNCksICI9RCIgKF9faWduNSkgICA6ICIxIiAoKGxvbmcpKGExKSksICIyIiAoKGxvbmcpKGEyKSksICAgIjMiICgobG9uZykoYTMpKSwgIjQiICgobG9uZykoYTQpKSwgICAiNSIgKChsb25nKShhNSkpLCAgIFtjYWxsXSAibSIgKGh5cGVyY2FsbF9wYWdlW19fSFlQRVJWSVNPUl8jI25hbWVdKSAgIDogIm1lbW9yeSIgKTsgICAodHlwZSlfX3JlczsgIH0pCi0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2FzbS1nZW5lcmljLzRsZXZlbC1maXh1cC5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2FzbS1nZW5lcmljLzRsZXZlbC1maXh1cC5oCmluZGV4IDkxYWU3ZjQuLmRkZGJhMWIgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9hc20tZ2VuZXJpYy80bGV2ZWwtZml4dXAuaAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vYXNtLWdlbmVyaWMvNGxldmVsLWZpeHVwLmgKQEAgLTcsMzYgKzcsNDAgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF80TEVWRUxfRklYVVBfSAogI2RlZmluZSBfNExFVkVMX0ZJWFVQX0gKLQogI2RlZmluZSBfX0FSQ0hfSEFTXzRMRVZFTF9IQUNLCiAjZGVmaW5lIF9fUEFHRVRBQkxFX1BVRF9GT0xERUQKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUFVEX1NJWkUgUEdESVJfU0laRQogI2RlZmluZSBQVURfTUFTSyBQR0RJUl9NQVNLCiAjZGVmaW5lIFBUUlNfUEVSX1BVRCAxCi0KICNkZWZpbmUgcHVkX3QgcGdkX3QKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgcG1kX2FsbG9jKG1tLCBwdWQsIGFkZHJlc3MpICAgKCh1bmxpa2VseShwZ2Rfbm9uZSgqKHB1ZCkpKSAmJiBfX3BtZF9hbGxvYyhtbSwgcHVkLCBhZGRyZXNzKSk/ICAgTlVMTDogcG1kX29mZnNldChwdWQsIGFkZHJlc3MpKQotCiAjZGVmaW5lIHB1ZF9hbGxvYyhtbSwgcGdkLCBhZGRyZXNzKSAocGdkKQogI2RlZmluZSBwdWRfb2Zmc2V0KHBnZCwgc3RhcnQpIChwZ2QpCiAjZGVmaW5lIHB1ZF9ub25lKHB1ZCkgMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgcHVkX2JhZChwdWQpIDAKICNkZWZpbmUgcHVkX3ByZXNlbnQocHVkKSAxCiAjZGVmaW5lIHB1ZF9FUlJPUihwdWQpIGRvIHsgfSB3aGlsZSAoMCkKICNkZWZpbmUgcHVkX2NsZWFyKHB1ZCkgcGdkX2NsZWFyKHB1ZCkKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICN1bmRlZiBwdWRfZnJlZV90bGIKICNkZWZpbmUgcHVkX2ZyZWVfdGxiKHRsYiwgeCkgZG8geyB9IHdoaWxlICgwKQogI2RlZmluZSBwdWRfZnJlZSh4KSBkbyB7IH0gd2hpbGUgKDApCiAjZGVmaW5lIF9fcHVkX2ZyZWVfdGxiKHRsYiwgeCkgZG8geyB9IHdoaWxlICgwKQotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI3VuZGVmIHB1ZF9hZGRyX2VuZAogI2RlZmluZSBwdWRfYWRkcl9lbmQoYWRkciwgZW5kKSAoZW5kKQotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9hc20tZ2VuZXJpYy9hdWRpdF9kaXJfd3JpdGUuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9hc20tZ2VuZXJpYy9hdWRpdF9kaXJfd3JpdGUuaAppbmRleCAxMzI3YjU5Li44Nzg0MTljIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vYXNtLWdlbmVyaWMvYXVkaXRfZGlyX3dyaXRlLmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2FzbS1nZW5lcmljL2F1ZGl0X2Rpcl93cml0ZS5oCkBAIC03LDUgKzcsMTIgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vYXNtLWdlbmVyaWMvYml0b3BzL19fZmZzLmggYi9saWJjL2tlcm5lbC9jb21tb24vYXNtLWdlbmVyaWMvYml0b3BzL19fZmZzLmgKaW5kZXggM2QxMzViZC4uZWNjMTkzOSAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2FzbS1nZW5lcmljL2JpdG9wcy9fX2Zmcy5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9hc20tZ2VuZXJpYy9iaXRvcHMvX19mZnMuaApAQCAtNywxMyArNywxOSBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX0FTTV9HRU5FUklDX0JJVE9QU19fX0ZGU19IXwogI2RlZmluZSBfQVNNX0dFTkVSSUNfQklUT1BTX19fRkZTX0hfCi0KICNpbmNsdWRlIDxhc20vdHlwZXMuaD4KLQogI2lmIEJJVFNfUEVSX0xPTkcgPT0gNjQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZW5kaWYKICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2FzbS1nZW5lcmljL2JpdG9wcy9hdG9taWMuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9hc20tZ2VuZXJpYy9iaXRvcHMvYXRvbWljLmgKaW5kZXggNWY1M2JhOS4uYjA1NGJjOSAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2FzbS1nZW5lcmljL2JpdG9wcy9hdG9taWMuaAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vYXNtLWdlbmVyaWMvYml0b3BzL2F0b21pYy5oCkBAIC03LDE3ICs3LDIyIEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfQVNNX0dFTkVSSUNfQklUT1BTX0FUT01JQ19IXwogI2RlZmluZSBfQVNNX0dFTkVSSUNfQklUT1BTX0FUT01JQ19IXwotCiAjaW5jbHVkZSA8YXNtL3R5cGVzLmg+Ci0KICNkZWZpbmUgQklUT1BfTUFTSyhucikgKDFVTCA8PCAoKG5yKSAlIEJJVFNfUEVSX0xPTkcpKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQklUT1BfV09SRChucikgKChucikgLyBCSVRTX1BFUl9MT05HKQotCiAjZGVmaW5lIF9hdG9taWNfc3Bpbl9sb2NrX2lycXNhdmUobCxmKSBkbyB7IGxvY2FsX2lycV9zYXZlKGYpOyB9IHdoaWxlICgwKQogI2RlZmluZSBfYXRvbWljX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUobCxmKSBkbyB7IGxvY2FsX2lycV9yZXN0b3JlKGYpOyB9IHdoaWxlICgwKQotCiAjZW5kaWYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vYXNtLWdlbmVyaWMvYml0b3BzL2Zmei5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2FzbS1nZW5lcmljL2JpdG9wcy9mZnouaAppbmRleCAxOGRhMjcxLi4xZjJlYmE1IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vYXNtLWdlbmVyaWMvYml0b3BzL2Zmei5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9hc20tZ2VuZXJpYy9iaXRvcHMvZmZ6LmgKQEAgLTcsMTEgKzcsMTcgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9BU01fR0VORVJJQ19CSVRPUFNfRkZaX0hfCiAjZGVmaW5lIF9BU01fR0VORVJJQ19CSVRPUFNfRkZaX0hfCi0KICNkZWZpbmUgZmZ6KHgpIF9fZmZzKH4oeCkpCi0KICNlbmRpZgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9hc20tZ2VuZXJpYy9iaXRvcHMvZmluZC5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2FzbS1nZW5lcmljL2JpdG9wcy9maW5kLmgKaW5kZXggODM2MWNmZS4uMGRlMGY3ZCAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2FzbS1nZW5lcmljL2JpdG9wcy9maW5kLmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2FzbS1nZW5lcmljL2JpdG9wcy9maW5kLmgKQEAgLTcsMTIgKzcsMTggQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9BU01fR0VORVJJQ19CSVRPUFNfRklORF9IXwogI2RlZmluZSBfQVNNX0dFTkVSSUNfQklUT1BTX0ZJTkRfSF8KLQogI2RlZmluZSBmaW5kX2ZpcnN0X2JpdChhZGRyLCBzaXplKSBmaW5kX25leHRfYml0KChhZGRyKSwgKHNpemUpLCAwKQogI2RlZmluZSBmaW5kX2ZpcnN0X3plcm9fYml0KGFkZHIsIHNpemUpIGZpbmRfbmV4dF96ZXJvX2JpdCgoYWRkciksIChzaXplKSwgMCkKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2FzbS1nZW5lcmljL2JpdG9wcy9mbHMuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9hc20tZ2VuZXJpYy9iaXRvcHMvZmxzLmgKaW5kZXggOGFkYmYzMS4uZTQzMjZiNyAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2FzbS1nZW5lcmljL2JpdG9wcy9mbHMuaAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vYXNtLWdlbmVyaWMvYml0b3BzL2Zscy5oCkBAIC03LDkgKzcsMTUgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9BU01fR0VORVJJQ19CSVRPUFNfRkxTX0hfCiAjZGVmaW5lIF9BU01fR0VORVJJQ19CSVRPUFNfRkxTX0hfCi0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2FzbS1nZW5lcmljL2JpdG9wcy9mbHM2NC5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2FzbS1nZW5lcmljL2JpdG9wcy9mbHM2NC5oCmluZGV4IGFmNzcwOTguLjM3NjlmNjMgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9hc20tZ2VuZXJpYy9iaXRvcHMvZmxzNjQuaAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vYXNtLWdlbmVyaWMvYml0b3BzL2ZsczY0LmgKQEAgLTcsMTEgKzcsMTcgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9BU01fR0VORVJJQ19CSVRPUFNfRkxTNjRfSF8KICNkZWZpbmUgX0FTTV9HRU5FUklDX0JJVE9QU19GTFM2NF9IXwotCiAjaW5jbHVkZSA8YXNtL3R5cGVzLmg+Ci0KICNlbmRpZgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9hc20tZ2VuZXJpYy9iaXRvcHMvbGUuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9hc20tZ2VuZXJpYy9iaXRvcHMvbGUuaAppbmRleCA5N2NhOTczLi45ZDZkZDc4IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vYXNtLWdlbmVyaWMvYml0b3BzL2xlLmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2FzbS1nZW5lcmljL2JpdG9wcy9sZS5oCkBAIC03LDQ3ICs3LDQ3IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfQVNNX0dFTkVSSUNfQklUT1BTX0xFX0hfCiAjZGVmaW5lIF9BU01fR0VORVJJQ19CSVRPUFNfTEVfSF8KLQogI2luY2x1ZGUgPGFzbS90eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQklUT1BfV09SRChucikgKChucikgLyBCSVRTX1BFUl9MT05HKQogI2RlZmluZSBCSVRPUF9MRV9TV0laWkxFICgoQklUU19QRVJfTE9ORy0xKSAmIH4weDcpCi0KICNpZmRlZiBfX0xJVFRMRV9FTkRJQU4KLQogI2RlZmluZSBnZW5lcmljX3Rlc3RfbGVfYml0KG5yLCBhZGRyKSB0ZXN0X2JpdChuciwgYWRkcikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIGdlbmVyaWNfX19zZXRfbGVfYml0KG5yLCBhZGRyKSBfX3NldF9iaXQobnIsIGFkZHIpCiAjZGVmaW5lIGdlbmVyaWNfX19jbGVhcl9sZV9iaXQobnIsIGFkZHIpIF9fY2xlYXJfYml0KG5yLCBhZGRyKQotCiAjZGVmaW5lIGdlbmVyaWNfdGVzdF9hbmRfc2V0X2xlX2JpdChuciwgYWRkcikgdGVzdF9hbmRfc2V0X2JpdChuciwgYWRkcikKICNkZWZpbmUgZ2VuZXJpY190ZXN0X2FuZF9jbGVhcl9sZV9iaXQobnIsIGFkZHIpIHRlc3RfYW5kX2NsZWFyX2JpdChuciwgYWRkcikKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgZ2VuZXJpY19fX3Rlc3RfYW5kX3NldF9sZV9iaXQobnIsIGFkZHIpIF9fdGVzdF9hbmRfc2V0X2JpdChuciwgYWRkcikKICNkZWZpbmUgZ2VuZXJpY19fX3Rlc3RfYW5kX2NsZWFyX2xlX2JpdChuciwgYWRkcikgX190ZXN0X2FuZF9jbGVhcl9iaXQobnIsIGFkZHIpCi0KICNkZWZpbmUgZ2VuZXJpY19maW5kX25leHRfemVyb19sZV9iaXQoYWRkciwgc2l6ZSwgb2Zmc2V0KSBmaW5kX25leHRfemVyb19iaXQoYWRkciwgc2l6ZSwgb2Zmc2V0KQotCiAjZWxpZiBkZWZpbmVkKF9fQklHX0VORElBTikKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgZ2VuZXJpY190ZXN0X2xlX2JpdChuciwgYWRkcikgICB0ZXN0X2JpdCgobnIpIF4gQklUT1BfTEVfU1dJWlpMRSwgKGFkZHIpKQogI2RlZmluZSBnZW5lcmljX19fc2V0X2xlX2JpdChuciwgYWRkcikgICBfX3NldF9iaXQoKG5yKSBeIEJJVE9QX0xFX1NXSVpaTEUsIChhZGRyKSkKICNkZWZpbmUgZ2VuZXJpY19fX2NsZWFyX2xlX2JpdChuciwgYWRkcikgICBfX2NsZWFyX2JpdCgobnIpIF4gQklUT1BfTEVfU1dJWlpMRSwgKGFkZHIpKQotCiAjZGVmaW5lIGdlbmVyaWNfdGVzdF9hbmRfc2V0X2xlX2JpdChuciwgYWRkcikgICB0ZXN0X2FuZF9zZXRfYml0KChucikgXiBCSVRPUF9MRV9TV0laWkxFLCAoYWRkcikpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBnZW5lcmljX3Rlc3RfYW5kX2NsZWFyX2xlX2JpdChuciwgYWRkcikgICB0ZXN0X2FuZF9jbGVhcl9iaXQoKG5yKSBeIEJJVE9QX0xFX1NXSVpaTEUsIChhZGRyKSkKLQogI2RlZmluZSBnZW5lcmljX19fdGVzdF9hbmRfc2V0X2xlX2JpdChuciwgYWRkcikgICBfX3Rlc3RfYW5kX3NldF9iaXQoKG5yKSBeIEJJVE9QX0xFX1NXSVpaTEUsIChhZGRyKSkKICNkZWZpbmUgZ2VuZXJpY19fX3Rlc3RfYW5kX2NsZWFyX2xlX2JpdChuciwgYWRkcikgICBfX3Rlc3RfYW5kX2NsZWFyX2JpdCgobnIpIF4gQklUT1BfTEVfU1dJWlpMRSwgKGFkZHIpKQotCiAjZWxzZQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlcnJvciAiUGxlYXNlIGZpeCA8YXNtL2J5dGVvcmRlci5oPiIKICNlbmRpZgotCiAjZGVmaW5lIGdlbmVyaWNfZmluZF9maXJzdF96ZXJvX2xlX2JpdChhZGRyLCBzaXplKSAgIGdlbmVyaWNfZmluZF9uZXh0X3plcm9fbGVfYml0KChhZGRyKSwgKHNpemUpLCAwKQotCiAjZW5kaWYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vYXNtLWdlbmVyaWMvYml0b3BzL25vbi1hdG9taWMuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9hc20tZ2VuZXJpYy9iaXRvcHMvbm9uLWF0b21pYy5oCmluZGV4IDcyN2Y3MzYuLjVmMjg2NmUgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9hc20tZ2VuZXJpYy9iaXRvcHMvbm9uLWF0b21pYy5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9hc20tZ2VuZXJpYy9iaXRvcHMvbm9uLWF0b21pYy5oCkBAIC03LDE0ICs3LDE5IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfQVNNX0dFTkVSSUNfQklUT1BTX05PTl9BVE9NSUNfSF8KICNkZWZpbmUgX0FTTV9HRU5FUklDX0JJVE9QU19OT05fQVRPTUlDX0hfCi0KICNpbmNsdWRlIDxhc20vdHlwZXMuaD4KLQogI2RlZmluZSBCSVRPUF9NQVNLKG5yKSAoMVVMIDw8ICgobnIpICUgQklUU19QRVJfTE9ORykpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBCSVRPUF9XT1JEKG5yKSAoKG5yKSAvIEJJVFNfUEVSX0xPTkcpCi0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2FzbS1nZW5lcmljL2J1Zy5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2FzbS1nZW5lcmljL2J1Zy5oCmluZGV4IGQ5MWExMzUuLjE5NDYwYTcgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9hc20tZ2VuZXJpYy9idWcuaAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vYXNtLWdlbmVyaWMvYnVnLmgKQEAgLTcsMjcgKzcsMzAgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9BU01fR0VORVJJQ19CVUdfSAogI2RlZmluZSBfQVNNX0dFTkVSSUNfQlVHX0gKLQogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+Ci0KICNpZm5kZWYgSEFWRV9BUkNIX0JVRworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQlVHKCkKICNlbmRpZgotCiAjaWZuZGVmIEhBVkVfQVJDSF9CVUdfT04KICNkZWZpbmUgQlVHX09OKGNvbmRpdGlvbikgZG8geyBpZiAoY29uZGl0aW9uKSA7IH0gd2hpbGUoMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZW5kaWYKLQogI2lmbmRlZiBIQVZFX0FSQ0hfV0FSTl9PTgogI2RlZmluZSBXQVJOX09OKGNvbmRpdGlvbikgZG8geyBpZiAoY29uZGl0aW9uKSA7IH0gd2hpbGUoMCkKICNlbmRpZgotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBXQVJOX09OX09OQ0UoY29uZGl0aW9uKSAgKHsgICBzdGF0aWMgaW50IF9fd2Fybl9vbmNlID0gMTsgICBpbnQgX19yZXQgPSAwOyAgICAgaWYgKHVubGlrZWx5KChjb25kaXRpb24pICYmIF9fd2Fybl9vbmNlKSkgeyAgIF9fd2Fybl9vbmNlID0gMDsgICBXQVJOX09OKDEpOyAgIF9fcmV0ID0gMTsgICB9ICAgX19yZXQ7ICB9KQotCiAjZGVmaW5lIFdBUk5fT05fU01QKHgpIGRvIHsgfSB3aGlsZSAoMCkKLQogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vYXNtLWdlbmVyaWMvY3B1dGltZS5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2FzbS1nZW5lcmljL2NwdXRpbWUuaAppbmRleCAwNDg2Yjg3Li5kYmM3ODU5IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vYXNtLWdlbmVyaWMvY3B1dGltZS5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9hc20tZ2VuZXJpYy9jcHV0aW1lLmgKQEAgLTcsNTQgKzcsNTggQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9BU01fR0VORVJJQ19DUFVUSU1FX0gKICNkZWZpbmUgX0FTTV9HRU5FUklDX0NQVVRJTUVfSAotCiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBjcHV0aW1lX3Q7Ci0KICNkZWZpbmUgY3B1dGltZV96ZXJvICgwVUwpCiAjZGVmaW5lIGNwdXRpbWVfbWF4ICgofjBVTCA+PiAxKSAtIDEpCiAjZGVmaW5lIGNwdXRpbWVfYWRkKF9fYSwgX19iKSAoKF9fYSkgKyAoX19iKSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIGNwdXRpbWVfc3ViKF9fYSwgX19iKSAoKF9fYSkgLSAoX19iKSkKICNkZWZpbmUgY3B1dGltZV9kaXYoX19hLCBfX24pICgoX19hKSAvIChfX24pKQogI2RlZmluZSBjcHV0aW1lX2hhbHZlKF9fYSkgKChfX2EpID4+IDEpCiAjZGVmaW5lIGNwdXRpbWVfZXEoX19hLCBfX2IpICgoX19hKSA9PSAoX19iKSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIGNwdXRpbWVfZ3QoX19hLCBfX2IpICgoX19hKSA+IChfX2IpKQogI2RlZmluZSBjcHV0aW1lX2dlKF9fYSwgX19iKSAoKF9fYSkgPj0gKF9fYikpCiAjZGVmaW5lIGNwdXRpbWVfbHQoX19hLCBfX2IpICgoX19hKSA8IChfX2IpKQogI2RlZmluZSBjcHV0aW1lX2xlKF9fYSwgX19iKSAoKF9fYSkgPD0gKF9fYikpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBjcHV0aW1lX3RvX2ppZmZpZXMoX19jdCkgKF9fY3QpCiAjZGVmaW5lIGppZmZpZXNfdG9fY3B1dGltZShfX2h6KSAoX19oeikKLQogdHlwZWRlZiB1NjQgY3B1dGltZTY0X3Q7Ci0KICNkZWZpbmUgY3B1dGltZTY0X3plcm8gKDBVTEwpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBjcHV0aW1lNjRfYWRkKF9fYSwgX19iKSAoKF9fYSkgKyAoX19iKSkKICNkZWZpbmUgY3B1dGltZTY0X3N1YihfX2EsIF9fYikgKChfX2EpIC0gKF9fYikpCiAjZGVmaW5lIGNwdXRpbWU2NF90b19qaWZmaWVzNjQoX19jdCkgKF9fY3QpCiAjZGVmaW5lIGppZmZpZXM2NF90b19jcHV0aW1lNjQoX19qaWYpIChfX2ppZikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIGNwdXRpbWVfdG9fY3B1dGltZTY0KF9fY3QpICgodTY0KSBfX2N0KQotCiAjZGVmaW5lIGNwdXRpbWVfdG9fbXNlY3MoX19jdCkgamlmZmllc190b19tc2VjcyhfX2N0KQogI2RlZmluZSBtc2Vjc190b19jcHV0aW1lKF9fbXNlY3MpIG1zZWNzX3RvX2ppZmZpZXMoX19tc2VjcykKLQogI2RlZmluZSBjcHV0aW1lX3RvX3NlY3MoamlmKSAoKGppZikgLyBIWikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIHNlY3NfdG9fY3B1dGltZShzZWMpICgoc2VjKSAqIEhaKQotCiAjZGVmaW5lIHRpbWVzcGVjX3RvX2NwdXRpbWUoX192YWwpIHRpbWVzcGVjX3RvX2ppZmZpZXMoX192YWwpCiAjZGVmaW5lIGNwdXRpbWVfdG9fdGltZXNwZWMoX19jdCxfX3ZhbCkgamlmZmllc190b190aW1lc3BlYyhfX2N0LF9fdmFsKQotCiAjZGVmaW5lIHRpbWV2YWxfdG9fY3B1dGltZShfX3ZhbCkgdGltZXZhbF90b19qaWZmaWVzKF9fdmFsKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgY3B1dGltZV90b190aW1ldmFsKF9fY3QsX192YWwpIGppZmZpZXNfdG9fdGltZXZhbChfX2N0LF9fdmFsKQotCiAjZGVmaW5lIGNwdXRpbWVfdG9fY2xvY2tfdChfX2N0KSBqaWZmaWVzX3RvX2Nsb2NrX3QoX19jdCkKICNkZWZpbmUgY2xvY2tfdF90b19jcHV0aW1lKF9feCkgY2xvY2tfdF90b19qaWZmaWVzKF9feCkKLQogI2RlZmluZSBjcHV0aW1lNjRfdG9fY2xvY2tfdChfX2N0KSBqaWZmaWVzXzY0X3RvX2Nsb2NrX3QoX19jdCkKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2FzbS1nZW5lcmljL2VtZXJnZW5jeS1yZXN0YXJ0LmggYi9saWJjL2tlcm5lbC9jb21tb24vYXNtLWdlbmVyaWMvZW1lcmdlbmN5LXJlc3RhcnQuaAppbmRleCA2MTljNjgyLi44Y2ZmYzU3IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vYXNtLWdlbmVyaWMvZW1lcmdlbmN5LXJlc3RhcnQuaAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vYXNtLWdlbmVyaWMvZW1lcmdlbmN5LXJlc3RhcnQuaApAQCAtNyw5ICs3LDE1IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfQVNNX0dFTkVSSUNfRU1FUkdFTkNZX1JFU1RBUlRfSAogI2RlZmluZSBfQVNNX0dFTkVSSUNfRU1FUkdFTkNZX1JFU1RBUlRfSAotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9hc20tZ2VuZXJpYy9lcnJuby1iYXNlLmggYi9saWJjL2tlcm5lbC9jb21tb24vYXNtLWdlbmVyaWMvZXJybm8tYmFzZS5oCmluZGV4IDJmYjRhMzMuLmEyNmJmNzUgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9hc20tZ2VuZXJpYy9lcnJuby1iYXNlLmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2FzbS1nZW5lcmljL2Vycm5vLWJhc2UuaApAQCAtNyw0NCArNyw1OCBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX0FTTV9HRU5FUklDX0VSUk5PX0JBU0VfSAogI2RlZmluZSBfQVNNX0dFTkVSSUNfRVJSTk9fQkFTRV9ICi0KLSNkZWZpbmUgRVBFUk0gMSAgCi0jZGVmaW5lIEVOT0VOVCAyICAKLSNkZWZpbmUgRVNSQ0ggMyAgCi0jZGVmaW5lIEVJTlRSIDQgIAotI2RlZmluZSBFSU8gNSAgCi0jZGVmaW5lIEVOWElPIDYgIAotI2RlZmluZSBFMkJJRyA3ICAKLSNkZWZpbmUgRU5PRVhFQyA4ICAKLSNkZWZpbmUgRUJBREYgOSAgCi0jZGVmaW5lIEVDSElMRCAxMCAgCi0jZGVmaW5lIEVBR0FJTiAxMSAgCi0jZGVmaW5lIEVOT01FTSAxMiAgCi0jZGVmaW5lIEVBQ0NFUyAxMyAgCi0jZGVmaW5lIEVGQVVMVCAxNCAgCi0jZGVmaW5lIEVOT1RCTEsgMTUgIAotI2RlZmluZSBFQlVTWSAxNiAgCi0jZGVmaW5lIEVFWElTVCAxNyAgCi0jZGVmaW5lIEVYREVWIDE4ICAKLSNkZWZpbmUgRU5PREVWIDE5ICAKLSNkZWZpbmUgRU5PVERJUiAyMCAgCi0jZGVmaW5lIEVJU0RJUiAyMSAgCi0jZGVmaW5lIEVJTlZBTCAyMiAgCi0jZGVmaW5lIEVORklMRSAyMyAgCi0jZGVmaW5lIEVNRklMRSAyNCAgCi0jZGVmaW5lIEVOT1RUWSAyNSAgCi0jZGVmaW5lIEVUWFRCU1kgMjYgIAotI2RlZmluZSBFRkJJRyAyNyAgCi0jZGVmaW5lIEVOT1NQQyAyOCAgCi0jZGVmaW5lIEVTUElQRSAyOSAgCi0jZGVmaW5lIEVST0ZTIDMwICAKLSNkZWZpbmUgRU1MSU5LIDMxICAKLSNkZWZpbmUgRVBJUEUgMzIgIAotI2RlZmluZSBFRE9NIDMzICAKLSNkZWZpbmUgRVJBTkdFIDM0ICAKLQorI2RlZmluZSBFUEVSTSAxCisjZGVmaW5lIEVOT0VOVCAyCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBFU1JDSCAzCisjZGVmaW5lIEVJTlRSIDQKKyNkZWZpbmUgRUlPIDUKKyNkZWZpbmUgRU5YSU8gNgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgRTJCSUcgNworI2RlZmluZSBFTk9FWEVDIDgKKyNkZWZpbmUgRUJBREYgOQorI2RlZmluZSBFQ0hJTEQgMTAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEVBR0FJTiAxMQorI2RlZmluZSBFTk9NRU0gMTIKKyNkZWZpbmUgRUFDQ0VTIDEzCisjZGVmaW5lIEVGQVVMVCAxNAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgRU5PVEJMSyAxNQorI2RlZmluZSBFQlVTWSAxNgorI2RlZmluZSBFRVhJU1QgMTcKKyNkZWZpbmUgRVhERVYgMTgKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEVOT0RFViAxOQorI2RlZmluZSBFTk9URElSIDIwCisjZGVmaW5lIEVJU0RJUiAyMQorI2RlZmluZSBFSU5WQUwgMjIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEVORklMRSAyMworI2RlZmluZSBFTUZJTEUgMjQKKyNkZWZpbmUgRU5PVFRZIDI1CisjZGVmaW5lIEVUWFRCU1kgMjYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEVGQklHIDI3CisjZGVmaW5lIEVOT1NQQyAyOAorI2RlZmluZSBFU1BJUEUgMjkKKyNkZWZpbmUgRVJPRlMgMzAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEVNTElOSyAzMQorI2RlZmluZSBFUElQRSAzMgorI2RlZmluZSBFRE9NIDMzCisjZGVmaW5lIEVSQU5HRSAzNAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2FzbS1nZW5lcmljL2Vycm5vLmggYi9saWJjL2tlcm5lbC9jb21tb24vYXNtLWdlbmVyaWMvZXJybm8uaAppbmRleCAxMWRkMDBmLi4yY2E5NGYyIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vYXNtLWdlbmVyaWMvZXJybm8uaAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vYXNtLWdlbmVyaWMvZXJybm8uaApAQCAtNywxMTMgKzcsMTM4IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfQVNNX0dFTkVSSUNfRVJSTk9fSAogI2RlZmluZSBfQVNNX0dFTkVSSUNfRVJSTk9fSAotCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvZXJybm8tYmFzZS5oPgotCi0jZGVmaW5lIEVERUFETEsgMzUgIAotI2RlZmluZSBFTkFNRVRPT0xPTkcgMzYgIAotI2RlZmluZSBFTk9MQ0sgMzcgIAotI2RlZmluZSBFTk9TWVMgMzggIAotI2RlZmluZSBFTk9URU1QVFkgMzkgIAotI2RlZmluZSBFTE9PUCA0MCAgCi0jZGVmaW5lIEVXT1VMREJMT0NLIEVBR0FJTiAgCi0jZGVmaW5lIEVOT01TRyA0MiAgCi0jZGVmaW5lIEVJRFJNIDQzICAKLSNkZWZpbmUgRUNIUk5HIDQ0ICAKLSNkZWZpbmUgRUwyTlNZTkMgNDUgIAotI2RlZmluZSBFTDNITFQgNDYgIAotI2RlZmluZSBFTDNSU1QgNDcgIAotI2RlZmluZSBFTE5STkcgNDggIAotI2RlZmluZSBFVU5BVENIIDQ5ICAKLSNkZWZpbmUgRU5PQ1NJIDUwICAKLSNkZWZpbmUgRUwySExUIDUxICAKLSNkZWZpbmUgRUJBREUgNTIgIAotI2RlZmluZSBFQkFEUiA1MyAgCi0jZGVmaW5lIEVYRlVMTCA1NCAgCi0jZGVmaW5lIEVOT0FOTyA1NSAgCi0jZGVmaW5lIEVCQURSUUMgNTYgIAotI2RlZmluZSBFQkFEU0xUIDU3ICAKLQorI2RlZmluZSBFREVBRExLIDM1CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBFTkFNRVRPT0xPTkcgMzYKKyNkZWZpbmUgRU5PTENLIDM3CisjZGVmaW5lIEVOT1NZUyAzOAorI2RlZmluZSBFTk9URU1QVFkgMzkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEVMT09QIDQwCisjZGVmaW5lIEVXT1VMREJMT0NLIEVBR0FJTgorI2RlZmluZSBFTk9NU0cgNDIKKyNkZWZpbmUgRUlEUk0gNDMKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEVDSFJORyA0NAorI2RlZmluZSBFTDJOU1lOQyA0NQorI2RlZmluZSBFTDNITFQgNDYKKyNkZWZpbmUgRUwzUlNUIDQ3CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBFTE5STkcgNDgKKyNkZWZpbmUgRVVOQVRDSCA0OQorI2RlZmluZSBFTk9DU0kgNTAKKyNkZWZpbmUgRUwySExUIDUxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBFQkFERSA1MgorI2RlZmluZSBFQkFEUiA1MworI2RlZmluZSBFWEZVTEwgNTQKKyNkZWZpbmUgRU5PQU5PIDU1CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBFQkFEUlFDIDU2CisjZGVmaW5lIEVCQURTTFQgNTcKICNkZWZpbmUgRURFQURMT0NLIEVERUFETEsKLQotI2RlZmluZSBFQkZPTlQgNTkgIAotI2RlZmluZSBFTk9TVFIgNjAgIAotI2RlZmluZSBFTk9EQVRBIDYxICAKLSNkZWZpbmUgRVRJTUUgNjIgIAotI2RlZmluZSBFTk9TUiA2MyAgCi0jZGVmaW5lIEVOT05FVCA2NCAgCi0jZGVmaW5lIEVOT1BLRyA2NSAgCi0jZGVmaW5lIEVSRU1PVEUgNjYgIAotI2RlZmluZSBFTk9MSU5LIDY3ICAKLSNkZWZpbmUgRUFEViA2OCAgCi0jZGVmaW5lIEVTUk1OVCA2OSAgCi0jZGVmaW5lIEVDT01NIDcwICAKLSNkZWZpbmUgRVBST1RPIDcxICAKLSNkZWZpbmUgRU1VTFRJSE9QIDcyICAKLSNkZWZpbmUgRURPVERPVCA3MyAgCi0jZGVmaW5lIEVCQURNU0cgNzQgIAotI2RlZmluZSBFT1ZFUkZMT1cgNzUgIAotI2RlZmluZSBFTk9UVU5JUSA3NiAgCi0jZGVmaW5lIEVCQURGRCA3NyAgCi0jZGVmaW5lIEVSRU1DSEcgNzggIAotI2RlZmluZSBFTElCQUNDIDc5ICAKLSNkZWZpbmUgRUxJQkJBRCA4MCAgCi0jZGVmaW5lIEVMSUJTQ04gODEgIAotI2RlZmluZSBFTElCTUFYIDgyICAKLSNkZWZpbmUgRUxJQkVYRUMgODMgIAotI2RlZmluZSBFSUxTRVEgODQgIAotI2RlZmluZSBFUkVTVEFSVCA4NSAgCi0jZGVmaW5lIEVTVFJQSVBFIDg2ICAKLSNkZWZpbmUgRVVTRVJTIDg3ICAKLSNkZWZpbmUgRU5PVFNPQ0sgODggIAotI2RlZmluZSBFREVTVEFERFJSRVEgODkgIAotI2RlZmluZSBFTVNHU0laRSA5MCAgCi0jZGVmaW5lIEVQUk9UT1RZUEUgOTEgIAotI2RlZmluZSBFTk9QUk9UT09QVCA5MiAgCi0jZGVmaW5lIEVQUk9UT05PU1VQUE9SVCA5MyAgCi0jZGVmaW5lIEVTT0NLVE5PU1VQUE9SVCA5NCAgCi0jZGVmaW5lIEVPUE5PVFNVUFAgOTUgIAotI2RlZmluZSBFUEZOT1NVUFBPUlQgOTYgIAotI2RlZmluZSBFQUZOT1NVUFBPUlQgOTcgIAotI2RlZmluZSBFQUREUklOVVNFIDk4ICAKLSNkZWZpbmUgRUFERFJOT1RBVkFJTCA5OSAgCi0jZGVmaW5lIEVORVRET1dOIDEwMCAgCi0jZGVmaW5lIEVORVRVTlJFQUNIIDEwMSAgCi0jZGVmaW5lIEVORVRSRVNFVCAxMDIgIAotI2RlZmluZSBFQ09OTkFCT1JURUQgMTAzICAKLSNkZWZpbmUgRUNPTk5SRVNFVCAxMDQgIAotI2RlZmluZSBFTk9CVUZTIDEwNSAgCi0jZGVmaW5lIEVJU0NPTk4gMTA2ICAKLSNkZWZpbmUgRU5PVENPTk4gMTA3ICAKLSNkZWZpbmUgRVNIVVRET1dOIDEwOCAgCi0jZGVmaW5lIEVUT09NQU5ZUkVGUyAxMDkgIAotI2RlZmluZSBFVElNRURPVVQgMTEwICAKLSNkZWZpbmUgRUNPTk5SRUZVU0VEIDExMSAgCi0jZGVmaW5lIEVIT1NURE9XTiAxMTIgIAotI2RlZmluZSBFSE9TVFVOUkVBQ0ggMTEzICAKLSNkZWZpbmUgRUFMUkVBRFkgMTE0ICAKLSNkZWZpbmUgRUlOUFJPR1JFU1MgMTE1ICAKLSNkZWZpbmUgRVNUQUxFIDExNiAgCi0jZGVmaW5lIEVVQ0xFQU4gMTE3ICAKLSNkZWZpbmUgRU5PVE5BTSAxMTggIAotI2RlZmluZSBFTkFWQUlMIDExOSAgCi0jZGVmaW5lIEVJU05BTSAxMjAgIAotI2RlZmluZSBFUkVNT1RFSU8gMTIxICAKLSNkZWZpbmUgRURRVU9UIDEyMiAgCi0KLSNkZWZpbmUgRU5PTUVESVVNIDEyMyAgCi0jZGVmaW5lIEVNRURJVU1UWVBFIDEyNCAgCi0jZGVmaW5lIEVDQU5DRUxFRCAxMjUgIAotI2RlZmluZSBFTk9LRVkgMTI2ICAKLSNkZWZpbmUgRUtFWUVYUElSRUQgMTI3ICAKLSNkZWZpbmUgRUtFWVJFVk9LRUQgMTI4ICAKLSNkZWZpbmUgRUtFWVJFSkVDVEVEIDEyOSAgCi0KLSNkZWZpbmUgRU9XTkVSREVBRCAxMzAgIAotI2RlZmluZSBFTk9UUkVDT1ZFUkFCTEUgMTMxICAKLQorI2RlZmluZSBFQkZPTlQgNTkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEVOT1NUUiA2MAorI2RlZmluZSBFTk9EQVRBIDYxCisjZGVmaW5lIEVUSU1FIDYyCisjZGVmaW5lIEVOT1NSIDYzCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBFTk9ORVQgNjQKKyNkZWZpbmUgRU5PUEtHIDY1CisjZGVmaW5lIEVSRU1PVEUgNjYKKyNkZWZpbmUgRU5PTElOSyA2NworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgRUFEViA2OAorI2RlZmluZSBFU1JNTlQgNjkKKyNkZWZpbmUgRUNPTU0gNzAKKyNkZWZpbmUgRVBST1RPIDcxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBFTVVMVElIT1AgNzIKKyNkZWZpbmUgRURPVERPVCA3MworI2RlZmluZSBFQkFETVNHIDc0CisjZGVmaW5lIEVPVkVSRkxPVyA3NQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgRU5PVFVOSVEgNzYKKyNkZWZpbmUgRUJBREZEIDc3CisjZGVmaW5lIEVSRU1DSEcgNzgKKyNkZWZpbmUgRUxJQkFDQyA3OQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgRUxJQkJBRCA4MAorI2RlZmluZSBFTElCU0NOIDgxCisjZGVmaW5lIEVMSUJNQVggODIKKyNkZWZpbmUgRUxJQkVYRUMgODMKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEVJTFNFUSA4NAorI2RlZmluZSBFUkVTVEFSVCA4NQorI2RlZmluZSBFU1RSUElQRSA4NgorI2RlZmluZSBFVVNFUlMgODcKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEVOT1RTT0NLIDg4CisjZGVmaW5lIEVERVNUQUREUlJFUSA4OQorI2RlZmluZSBFTVNHU0laRSA5MAorI2RlZmluZSBFUFJPVE9UWVBFIDkxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBFTk9QUk9UT09QVCA5MgorI2RlZmluZSBFUFJPVE9OT1NVUFBPUlQgOTMKKyNkZWZpbmUgRVNPQ0tUTk9TVVBQT1JUIDk0CisjZGVmaW5lIEVPUE5PVFNVUFAgOTUKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEVQRk5PU1VQUE9SVCA5NgorI2RlZmluZSBFQUZOT1NVUFBPUlQgOTcKKyNkZWZpbmUgRUFERFJJTlVTRSA5OAorI2RlZmluZSBFQUREUk5PVEFWQUlMIDk5CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBFTkVURE9XTiAxMDAKKyNkZWZpbmUgRU5FVFVOUkVBQ0ggMTAxCisjZGVmaW5lIEVORVRSRVNFVCAxMDIKKyNkZWZpbmUgRUNPTk5BQk9SVEVEIDEwMworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgRUNPTk5SRVNFVCAxMDQKKyNkZWZpbmUgRU5PQlVGUyAxMDUKKyNkZWZpbmUgRUlTQ09OTiAxMDYKKyNkZWZpbmUgRU5PVENPTk4gMTA3CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBFU0hVVERPV04gMTA4CisjZGVmaW5lIEVUT09NQU5ZUkVGUyAxMDkKKyNkZWZpbmUgRVRJTUVET1VUIDExMAorI2RlZmluZSBFQ09OTlJFRlVTRUQgMTExCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBFSE9TVERPV04gMTEyCisjZGVmaW5lIEVIT1NUVU5SRUFDSCAxMTMKKyNkZWZpbmUgRUFMUkVBRFkgMTE0CisjZGVmaW5lIEVJTlBST0dSRVNTIDExNQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgRVNUQUxFIDExNgorI2RlZmluZSBFVUNMRUFOIDExNworI2RlZmluZSBFTk9UTkFNIDExOAorI2RlZmluZSBFTkFWQUlMIDExOQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgRUlTTkFNIDEyMAorI2RlZmluZSBFUkVNT1RFSU8gMTIxCisjZGVmaW5lIEVEUVVPVCAxMjIKKyNkZWZpbmUgRU5PTUVESVVNIDEyMworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgRU1FRElVTVRZUEUgMTI0CisjZGVmaW5lIEVDQU5DRUxFRCAxMjUKKyNkZWZpbmUgRU5PS0VZIDEyNgorI2RlZmluZSBFS0VZRVhQSVJFRCAxMjcKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEVLRVlSRVZPS0VEIDEyOAorI2RlZmluZSBFS0VZUkVKRUNURUQgMTI5CisjZGVmaW5lIEVPV05FUkRFQUQgMTMwCisjZGVmaW5lIEVOT1RSRUNPVkVSQUJMRSAxMzEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9hc20tZ2VuZXJpYy9mY250bC5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2FzbS1nZW5lcmljL2ZjbnRsLmgKaW5kZXggYTUzYjUzNi4uOGU5NmY4MCAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2FzbS1nZW5lcmljL2ZjbnRsLmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2FzbS1nZW5lcmljL2ZjbnRsLmgKQEAgLTcsMTQyICs3LDE4NSBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX0FTTV9HRU5FUklDX0ZDTlRMX0gKICNkZWZpbmUgX0FTTV9HRU5FUklDX0ZDTlRMX0gKLQogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0KICNkZWZpbmUgT19BQ0NNT0RFIDAwMDAwMDAzCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBPX1JET05MWSAwMDAwMDAwMAogI2RlZmluZSBPX1dST05MWSAwMDAwMDAwMQogI2RlZmluZSBPX1JEV1IgMDAwMDAwMDIKICNpZm5kZWYgT19DUkVBVAotI2RlZmluZSBPX0NSRUFUIDAwMDAwMTAwICAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIE9fQ1JFQVQgMDAwMDAxMDAKICNlbmRpZgogI2lmbmRlZiBPX0VYQ0wKLSNkZWZpbmUgT19FWENMIDAwMDAwMjAwICAKKyNkZWZpbmUgT19FWENMIDAwMDAwMjAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2VuZGlmCiAjaWZuZGVmIE9fTk9DVFRZCi0jZGVmaW5lIE9fTk9DVFRZIDAwMDAwNDAwICAKKyNkZWZpbmUgT19OT0NUVFkgMDAwMDA0MDAKICNlbmRpZgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNpZm5kZWYgT19UUlVOQwotI2RlZmluZSBPX1RSVU5DIDAwMDAxMDAwICAKKyNkZWZpbmUgT19UUlVOQyAwMDAwMTAwMAogI2VuZGlmCiAjaWZuZGVmIE9fQVBQRU5ECisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBPX0FQUEVORCAwMDAwMjAwMAogI2VuZGlmCiAjaWZuZGVmIE9fTk9OQkxPQ0sKICNkZWZpbmUgT19OT05CTE9DSyAwMDAwNDAwMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlbmRpZgotI2lmbmRlZiBPX1NZTkMKLSNkZWZpbmUgT19TWU5DIDAwMDEwMDAwCisjaWZuZGVmIE9fRFNZTkMKKyNkZWZpbmUgT19EU1lOQyAwMDAxMDAwMAogI2VuZGlmCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2lmbmRlZiBGQVNZTkMKLSNkZWZpbmUgRkFTWU5DIDAwMDIwMDAwICAKKyNkZWZpbmUgRkFTWU5DIDAwMDIwMDAwCiAjZW5kaWYKICNpZm5kZWYgT19ESVJFQ1QKLSNkZWZpbmUgT19ESVJFQ1QgMDAwNDAwMDAgIAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgT19ESVJFQ1QgMDAwNDAwMDAKICNlbmRpZgogI2lmbmRlZiBPX0xBUkdFRklMRQogI2RlZmluZSBPX0xBUkdFRklMRSAwMDEwMDAwMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlbmRpZgogI2lmbmRlZiBPX0RJUkVDVE9SWQotI2RlZmluZSBPX0RJUkVDVE9SWSAwMDIwMDAwMCAgCisjZGVmaW5lIE9fRElSRUNUT1JZIDAwMjAwMDAwCiAjZW5kaWYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjaWZuZGVmIE9fTk9GT0xMT1cKLSNkZWZpbmUgT19OT0ZPTExPVyAwMDQwMDAwMCAgCisjZGVmaW5lIE9fTk9GT0xMT1cgMDA0MDAwMDAKICNlbmRpZgogI2lmbmRlZiBPX05PQVRJTUUKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE9fTk9BVElNRSAwMTAwMDAwMAogI2VuZGlmCisjaWZuZGVmIE9fQ0xPRVhFQworI2RlZmluZSBPX0NMT0VYRUMgMDIwMDAwMDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZW5kaWYKKyNpZm5kZWYgT19TWU5DCisjZGVmaW5lIF9fT19TWU5DIDA0MDAwMDAwCisjZGVmaW5lIE9fU1lOQyAoX19PX1NZTkN8T19EU1lOQykKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZW5kaWYKKyNpZm5kZWYgT19QQVRICisjZGVmaW5lIE9fUEFUSCAwMTAwMDAwMDAKKyNlbmRpZgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNpZm5kZWYgT19OREVMQVkKICNkZWZpbmUgT19OREVMQVkgT19OT05CTE9DSwogI2VuZGlmCi0KLSNkZWZpbmUgRl9EVVBGRCAwICAKLSNkZWZpbmUgRl9HRVRGRCAxICAKLSNkZWZpbmUgRl9TRVRGRCAyICAKLSNkZWZpbmUgRl9HRVRGTCAzICAKLSNkZWZpbmUgRl9TRVRGTCA0ICAKKyNkZWZpbmUgRl9EVVBGRCAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBGX0dFVEZEIDEKKyNkZWZpbmUgRl9TRVRGRCAyCisjZGVmaW5lIEZfR0VURkwgMworI2RlZmluZSBGX1NFVEZMIDQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjaWZuZGVmIEZfR0VUTEsKICNkZWZpbmUgRl9HRVRMSyA1CiAjZGVmaW5lIEZfU0VUTEsgNgogI2RlZmluZSBGX1NFVExLVyA3CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2VuZGlmCiAjaWZuZGVmIEZfU0VUT1dOCi0jZGVmaW5lIEZfU0VUT1dOIDggIAotI2RlZmluZSBGX0dFVE9XTiA5ICAKKyNkZWZpbmUgRl9TRVRPV04gOAorI2RlZmluZSBGX0dFVE9XTiA5CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2VuZGlmCiAjaWZuZGVmIEZfU0VUU0lHCi0jZGVmaW5lIEZfU0VUU0lHIDEwICAKLSNkZWZpbmUgRl9HRVRTSUcgMTEgIAorI2RlZmluZSBGX1NFVFNJRyAxMAorI2RlZmluZSBGX0dFVFNJRyAxMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlbmRpZgotCi0jZGVmaW5lIEZEX0NMT0VYRUMgMSAgCi0KKyNpZm5kZWYgRl9HRVRMSzY0CisjZGVmaW5lIEZfR0VUTEs2NCAxMgorI2RlZmluZSBGX1NFVExLNjQgMTMKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEZfU0VUTEtXNjQgMTQKKyNlbmRpZgorI2lmbmRlZiBGX1NFVE9XTl9FWAorI2RlZmluZSBGX1NFVE9XTl9FWCAxNQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgRl9HRVRPV05fRVggMTYKKyNlbmRpZgorI2RlZmluZSBGX09XTkVSX1RJRCAwCisjZGVmaW5lIEZfT1dORVJfUElEIDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEZfT1dORVJfUEdSUCAyCitzdHJ1Y3QgZl9vd25lcl9leCB7CisgaW50IHR5cGU7CisgX19rZXJuZWxfcGlkX3QgcGlkOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK307CisjZGVmaW5lIEZEX0NMT0VYRUMgMQogI2lmbmRlZiBGX1JETENLCiAjZGVmaW5lIEZfUkRMQ0sgMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRl9XUkxDSyAxCiAjZGVmaW5lIEZfVU5MQ0sgMgogI2VuZGlmCi0KICNpZm5kZWYgRl9FWExDSwotI2RlZmluZSBGX0VYTENLIDQgIAotI2RlZmluZSBGX1NITENLIDggIAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgRl9FWExDSyA0CisjZGVmaW5lIEZfU0hMQ0sgOAogI2VuZGlmCi0KLSNpZm5kZWYgRl9JTlBST0dSRVNTCi0jZGVmaW5lIEZfSU5QUk9HUkVTUyAxNgotI2VuZGlmCi0KLSNkZWZpbmUgTE9DS19TSCAxICAKLSNkZWZpbmUgTE9DS19FWCAyICAKLSNkZWZpbmUgTE9DS19OQiA0ICAKLSNkZWZpbmUgTE9DS19VTiA4ICAKLQotI2RlZmluZSBMT0NLX01BTkQgMzIgIAotI2RlZmluZSBMT0NLX1JFQUQgNjQgIAotI2RlZmluZSBMT0NLX1dSSVRFIDEyOCAgCi0jZGVmaW5lIExPQ0tfUlcgMTkyICAKLQorI2RlZmluZSBMT0NLX1NIIDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIExPQ0tfRVggMgorI2RlZmluZSBMT0NLX05CIDQKKyNkZWZpbmUgTE9DS19VTiA4CisjZGVmaW5lIExPQ0tfTUFORCAzMgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgTE9DS19SRUFEIDY0CisjZGVmaW5lIExPQ0tfV1JJVEUgMTI4CisjZGVmaW5lIExPQ0tfUlcgMTkyCiAjZGVmaW5lIEZfTElOVVhfU1BFQ0lGSUNfQkFTRSAxMDI0Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjaWZuZGVmIEhBVkVfQVJDSF9TVFJVQ1RfRkxPQ0sKICNpZm5kZWYgX19BUkNIX0ZMT0NLX1BBRAogI2RlZmluZSBfX0FSQ0hfRkxPQ0tfUEFECiAjZW5kaWYKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBmbG9jayB7CiAgc2hvcnQgbF90eXBlOwogIHNob3J0IGxfd2hlbmNlOwotIG9mZl90IGxfc3RhcnQ7Ci0gb2ZmX3QgbF9sZW47Ci0gcGlkX3QgbF9waWQ7CisgX19rZXJuZWxfb2ZmX3QgbF9zdGFydDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX19rZXJuZWxfb2ZmX3QgbF9sZW47CisgX19rZXJuZWxfcGlkX3QgbF9waWQ7CiAgX19BUkNIX0ZMT0NLX1BBRAogfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZW5kaWYKLQotI2lmbmRlZiBGX0dFVExLNjQKLSNkZWZpbmUgRl9HRVRMSzY0IDEyICAKLSNkZWZpbmUgRl9TRVRMSzY0IDEzCi0jZGVmaW5lIEZfU0VUTEtXNjQgMTQKLSNlbmRpZgotCiAjaWZuZGVmIEhBVkVfQVJDSF9TVFJVQ1RfRkxPQ0s2NAogI2lmbmRlZiBfX0FSQ0hfRkxPQ0s2NF9QQUQKICNkZWZpbmUgX19BUkNIX0ZMT0NLNjRfUEFECisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2VuZGlmCi0KIHN0cnVjdCBmbG9jazY0IHsKICBzaG9ydCBsX3R5cGU7CiAgc2hvcnQgbF93aGVuY2U7Ci0gbG9mZl90IGxfc3RhcnQ7Ci0gbG9mZl90IGxfbGVuOwotIHBpZF90IGxfcGlkOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX2tlcm5lbF9sb2ZmX3QgbF9zdGFydDsKKyBfX2tlcm5lbF9sb2ZmX3QgbF9sZW47CisgX19rZXJuZWxfcGlkX3QgbF9waWQ7CiAgX19BUkNIX0ZMT0NLNjRfUEFECisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKICNlbmRpZgotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9hc20tZ2VuZXJpYy9mdXRleC5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2FzbS1nZW5lcmljL2Z1dGV4LmgKaW5kZXggMDVkM2FmZS4uNzdmN2JiYSAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2FzbS1nZW5lcmljL2Z1dGV4LmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2FzbS1nZW5lcmljL2Z1dGV4LmgKQEAgLTcsOSArNywxNSBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX0FTTV9HRU5FUklDX0ZVVEVYX0gKICNkZWZpbmUgX0FTTV9HRU5FUklDX0ZVVEVYX0gKLQogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vYXNtLWdlbmVyaWMvaW9jdGwuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9hc20tZ2VuZXJpYy9pb2N0bC5oCmluZGV4IGNiYTJiOGUuLmY5ODczMTQgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9hc20tZ2VuZXJpYy9pb2N0bC5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9hc20tZ2VuZXJpYy9pb2N0bC5oCkBAIC03LDUyICs3LDU4IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfQVNNX0dFTkVSSUNfSU9DVExfSAogI2RlZmluZSBfQVNNX0dFTkVSSUNfSU9DVExfSAotCiAjZGVmaW5lIF9JT0NfTlJCSVRTIDgKICNkZWZpbmUgX0lPQ19UWVBFQklUUyA4CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfSU9DX1NJWkVCSVRTIDE0CiAjZGVmaW5lIF9JT0NfRElSQklUUyAyCi0KICNkZWZpbmUgX0lPQ19OUk1BU0sgKCgxIDw8IF9JT0NfTlJCSVRTKS0xKQogI2RlZmluZSBfSU9DX1RZUEVNQVNLICgoMSA8PCBfSU9DX1RZUEVCSVRTKS0xKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX0lPQ19TSVpFTUFTSyAoKDEgPDwgX0lPQ19TSVpFQklUUyktMSkKICNkZWZpbmUgX0lPQ19ESVJNQVNLICgoMSA8PCBfSU9DX0RJUkJJVFMpLTEpCi0KICNkZWZpbmUgX0lPQ19OUlNISUZUIDAKICNkZWZpbmUgX0lPQ19UWVBFU0hJRlQgKF9JT0NfTlJTSElGVCtfSU9DX05SQklUUykKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9JT0NfU0laRVNISUZUIChfSU9DX1RZUEVTSElGVCtfSU9DX1RZUEVCSVRTKQogI2RlZmluZSBfSU9DX0RJUlNISUZUIChfSU9DX1NJWkVTSElGVCtfSU9DX1NJWkVCSVRTKQotCiAjZGVmaW5lIF9JT0NfTk9ORSAwVQogI2RlZmluZSBfSU9DX1dSSVRFIDFVCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfSU9DX1JFQUQgMlUKLQogI2RlZmluZSBfSU9DKGRpcix0eXBlLG5yLHNpemUpICAgKCgoZGlyKSA8PCBfSU9DX0RJUlNISUZUKSB8ICAgKCh0eXBlKSA8PCBfSU9DX1RZUEVTSElGVCkgfCAgICgobnIpIDw8IF9JT0NfTlJTSElGVCkgfCAgICgoc2l6ZSkgPDwgX0lPQ19TSVpFU0hJRlQpKQotCiBleHRlcm4gdW5zaWduZWQgaW50IF9faW52YWxpZF9zaXplX2FyZ3VtZW50X2Zvcl9JT0M7CiAjZGVmaW5lIF9JT0NfVFlQRUNIRUNLKHQpICAgKChzaXplb2YodCkgPT0gc2l6ZW9mKHRbMV0pICYmICAgc2l6ZW9mKHQpIDwgKDEgPDwgX0lPQ19TSVpFQklUUykpID8gICBzaXplb2YodCkgOiBfX2ludmFsaWRfc2l6ZV9hcmd1bWVudF9mb3JfSU9DKQotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfSU8odHlwZSxucikgX0lPQyhfSU9DX05PTkUsKHR5cGUpLChuciksMCkKICNkZWZpbmUgX0lPUih0eXBlLG5yLHNpemUpIF9JT0MoX0lPQ19SRUFELCh0eXBlKSwobnIpLChfSU9DX1RZUEVDSEVDSyhzaXplKSkpCiAjZGVmaW5lIF9JT1codHlwZSxucixzaXplKSBfSU9DKF9JT0NfV1JJVEUsKHR5cGUpLChuciksKF9JT0NfVFlQRUNIRUNLKHNpemUpKSkKICNkZWZpbmUgX0lPV1IodHlwZSxucixzaXplKSBfSU9DKF9JT0NfUkVBRHxfSU9DX1dSSVRFLCh0eXBlKSwobnIpLChfSU9DX1RZUEVDSEVDSyhzaXplKSkpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfSU9SX0JBRCh0eXBlLG5yLHNpemUpIF9JT0MoX0lPQ19SRUFELCh0eXBlKSwobnIpLHNpemVvZihzaXplKSkKICNkZWZpbmUgX0lPV19CQUQodHlwZSxucixzaXplKSBfSU9DKF9JT0NfV1JJVEUsKHR5cGUpLChuciksc2l6ZW9mKHNpemUpKQogI2RlZmluZSBfSU9XUl9CQUQodHlwZSxucixzaXplKSBfSU9DKF9JT0NfUkVBRHxfSU9DX1dSSVRFLCh0eXBlKSwobnIpLHNpemVvZihzaXplKSkKLQogI2RlZmluZSBfSU9DX0RJUihucikgKCgobnIpID4+IF9JT0NfRElSU0hJRlQpICYgX0lPQ19ESVJNQVNLKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX0lPQ19UWVBFKG5yKSAoKChucikgPj4gX0lPQ19UWVBFU0hJRlQpICYgX0lPQ19UWVBFTUFTSykKICNkZWZpbmUgX0lPQ19OUihucikgKCgobnIpID4+IF9JT0NfTlJTSElGVCkgJiBfSU9DX05STUFTSykKICNkZWZpbmUgX0lPQ19TSVpFKG5yKSAoKChucikgPj4gX0lPQ19TSVpFU0hJRlQpICYgX0lPQ19TSVpFTUFTSykKLQogI2RlZmluZSBJT0NfSU4gKF9JT0NfV1JJVEUgPDwgX0lPQ19ESVJTSElGVCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIElPQ19PVVQgKF9JT0NfUkVBRCA8PCBfSU9DX0RJUlNISUZUKQogI2RlZmluZSBJT0NfSU5PVVQgKChfSU9DX1dSSVRFfF9JT0NfUkVBRCkgPDwgX0lPQ19ESVJTSElGVCkKICNkZWZpbmUgSU9DU0laRV9NQVNLIChfSU9DX1NJWkVNQVNLIDw8IF9JT0NfU0laRVNISUZUKQogI2RlZmluZSBJT0NTSVpFX1NISUZUIChfSU9DX1NJWkVTSElGVCkKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2FzbS1nZW5lcmljL2lwYy5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2FzbS1nZW5lcmljL2lwYy5oCmluZGV4IDU3NjU3YTcuLmEzYmE0NGUgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9hc20tZ2VuZXJpYy9pcGMuaAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vYXNtLWdlbmVyaWMvaXBjLmgKQEAgLTcsMzEgKzcsMzggQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9BU01fR0VORVJJQ19JUENfSAogI2RlZmluZSBfQVNNX0dFTkVSSUNfSVBDX0gKLQogc3RydWN0IGlwY19rbHVkZ2UgewogIHN0cnVjdCBtc2didWYgX191c2VyICptc2dwOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBsb25nIG1zZ3R5cDsKIH07Ci0KICNkZWZpbmUgU0VNT1AgMQogI2RlZmluZSBTRU1HRVQgMgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU0VNQ1RMIDMKICNkZWZpbmUgU0VNVElNRURPUCA0CiAjZGVmaW5lIE1TR1NORCAxMQogI2RlZmluZSBNU0dSQ1YgMTIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1TR0dFVCAxMwogI2RlZmluZSBNU0dDVEwgMTQKICNkZWZpbmUgU0hNQVQgMjEKICNkZWZpbmUgU0hNRFQgMjIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNITUdFVCAyMwogI2RlZmluZSBTSE1DVEwgMjQKLQogI2RlZmluZSBESVBDIDI1Ci0KICNkZWZpbmUgSVBDQ0FMTCh2ZXJzaW9uLG9wKSAoKHZlcnNpb24pPDwxNiB8IChvcCkpCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9hc20tZ2VuZXJpYy9sb2NhbC5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2FzbS1nZW5lcmljL2xvY2FsLmgKaW5kZXggY2FlMGQ1NC4uYzY3M2JkZiAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2FzbS1nZW5lcmljL2xvY2FsLmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2FzbS1nZW5lcmljL2xvY2FsLmgKQEAgLTcsNDUgKzcsNTIgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9BU01fR0VORVJJQ19MT0NBTF9ICiAjZGVmaW5lIF9BU01fR0VORVJJQ19MT0NBTF9ICi0KICNpbmNsdWRlIDxsaW51eC9wZXJjcHUuaD4KICNpbmNsdWRlIDxsaW51eC9oYXJkaXJxLmg+CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KICNpbmNsdWRlIDxhc20vdHlwZXMuaD4KLQogdHlwZWRlZiBzdHJ1Y3QKIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgYXRvbWljX2xvbmdfdCBhOwogfSBsb2NhbF90OwotCiAjZGVmaW5lIExPQ0FMX0lOSVQoaSkgeyBBVE9NSUNfTE9OR19JTklUKGkpIH0KLQogI2RlZmluZSBsb2NhbF9yZWFkKGwpIGF0b21pY19sb25nX3JlYWQoJihsKS0+YSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIGxvY2FsX3NldChsLGkpIGF0b21pY19sb25nX3NldCgoJihsKS0+YSksKGkpKQogI2RlZmluZSBsb2NhbF9pbmMobCkgYXRvbWljX2xvbmdfaW5jKCYobCktPmEpCiAjZGVmaW5lIGxvY2FsX2RlYyhsKSBhdG9taWNfbG9uZ19kZWMoJihsKS0+YSkKICNkZWZpbmUgbG9jYWxfYWRkKGksbCkgYXRvbWljX2xvbmdfYWRkKChpKSwoJihsKS0+YSkpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBsb2NhbF9zdWIoaSxsKSBhdG9taWNfbG9uZ19zdWIoKGkpLCgmKGwpLT5hKSkKLQogI2RlZmluZSBfX2xvY2FsX2luYyhsKSBsb2NhbF9zZXQoKGwpLCBsb2NhbF9yZWFkKGwpICsgMSkKICNkZWZpbmUgX19sb2NhbF9kZWMobCkgbG9jYWxfc2V0KChsKSwgbG9jYWxfcmVhZChsKSAtIDEpCiAjZGVmaW5lIF9fbG9jYWxfYWRkKGksbCkgbG9jYWxfc2V0KChsKSwgbG9jYWxfcmVhZChsKSArIChpKSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fbG9jYWxfc3ViKGksbCkgbG9jYWxfc2V0KChsKSwgbG9jYWxfcmVhZChsKSAtIChpKSkKLQogI2RlZmluZSBjcHVfbG9jYWxfcmVhZCh2KSBsb2NhbF9yZWFkKCZfX2dldF9jcHVfdmFyKHYpKQogI2RlZmluZSBjcHVfbG9jYWxfc2V0KHYsIGkpIGxvY2FsX3NldCgmX19nZXRfY3B1X3Zhcih2KSwgKGkpKQogI2RlZmluZSBjcHVfbG9jYWxfaW5jKHYpIGxvY2FsX2luYygmX19nZXRfY3B1X3Zhcih2KSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIGNwdV9sb2NhbF9kZWModikgbG9jYWxfZGVjKCZfX2dldF9jcHVfdmFyKHYpKQogI2RlZmluZSBjcHVfbG9jYWxfYWRkKGksIHYpIGxvY2FsX2FkZCgoaSksICZfX2dldF9jcHVfdmFyKHYpKQogI2RlZmluZSBjcHVfbG9jYWxfc3ViKGksIHYpIGxvY2FsX3N1YigoaSksICZfX2dldF9jcHVfdmFyKHYpKQotCiAjZGVmaW5lIF9fY3B1X2xvY2FsX2luYyh2KSBfX2xvY2FsX2luYygmX19nZXRfY3B1X3Zhcih2KSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fY3B1X2xvY2FsX2RlYyh2KSBfX2xvY2FsX2RlYygmX19nZXRfY3B1X3Zhcih2KSkKICNkZWZpbmUgX19jcHVfbG9jYWxfYWRkKGksIHYpIF9fbG9jYWxfYWRkKChpKSwgJl9fZ2V0X2NwdV92YXIodikpCiAjZGVmaW5lIF9fY3B1X2xvY2FsX3N1YihpLCB2KSBfX2xvY2FsX3N1YigoaSksICZfX2dldF9jcHVfdmFyKHYpKQotCiAjZW5kaWYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vYXNtLWdlbmVyaWMvbWVtb3J5X21vZGVsLmggYi9saWJjL2tlcm5lbC9jb21tb24vYXNtLWdlbmVyaWMvbWVtb3J5X21vZGVsLmgKaW5kZXggZmE3NjAyZS4uNDc2NTMxMSAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2FzbS1nZW5lcmljL21lbW9yeV9tb2RlbC5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9hc20tZ2VuZXJpYy9tZW1vcnlfbW9kZWwuaApAQCAtNyw5ICs3LDE1IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfX0FTTV9NRU1PUllfTU9ERUxfSAogI2RlZmluZSBfX0FTTV9NRU1PUllfTU9ERUxfSAotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9hc20tZ2VuZXJpYy9tbWFuLWNvbW1vbi5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2FzbS1nZW5lcmljL21tYW4tY29tbW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGRiYjUwMwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9hc20tZ2VuZXJpYy9tbWFuLWNvbW1vbi5oCkBAIC0wLDAgKzEsNjAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19BU01fR0VORVJJQ19NTUFOX0NPTU1PTl9ICisjZGVmaW5lIF9fQVNNX0dFTkVSSUNfTU1BTl9DT01NT05fSAorI2RlZmluZSBQUk9UX1JFQUQgMHgxCisjZGVmaW5lIFBST1RfV1JJVEUgMHgyCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBQUk9UX0VYRUMgMHg0CisjZGVmaW5lIFBST1RfU0VNIDB4OAorI2RlZmluZSBQUk9UX05PTkUgMHgwCisjZGVmaW5lIFBST1RfR1JPV1NET1dOIDB4MDEwMDAwMDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFBST1RfR1JPV1NVUCAweDAyMDAwMDAwCisjZGVmaW5lIE1BUF9TSEFSRUQgMHgwMQorI2RlZmluZSBNQVBfUFJJVkFURSAweDAyCisjZGVmaW5lIE1BUF9UWVBFIDB4MGYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIE1BUF9GSVhFRCAweDEwCisjZGVmaW5lIE1BUF9BTk9OWU1PVVMgMHgyMAorI2RlZmluZSBNQVBfVU5JTklUSUFMSVpFRCAweDAKKyNkZWZpbmUgTVNfQVNZTkMgMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgTVNfSU5WQUxJREFURSAyCisjZGVmaW5lIE1TX1NZTkMgNAorI2RlZmluZSBNQURWX05PUk1BTCAwCisjZGVmaW5lIE1BRFZfUkFORE9NIDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIE1BRFZfU0VRVUVOVElBTCAyCisjZGVmaW5lIE1BRFZfV0lMTE5FRUQgMworI2RlZmluZSBNQURWX0RPTlRORUVEIDQKKyNkZWZpbmUgTUFEVl9SRU1PVkUgOQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgTUFEVl9ET05URk9SSyAxMAorI2RlZmluZSBNQURWX0RPRk9SSyAxMQorI2RlZmluZSBNQURWX0hXUE9JU09OIDEwMAorI2RlZmluZSBNQURWX1NPRlRfT0ZGTElORSAxMDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIE1BRFZfTUVSR0VBQkxFIDEyCisjZGVmaW5lIE1BRFZfVU5NRVJHRUFCTEUgMTMKKyNkZWZpbmUgTUFEVl9IVUdFUEFHRSAxNAorI2RlZmluZSBNQURWX05PSFVHRVBBR0UgMTUKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIE1BUF9GSUxFIDAKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2FzbS1nZW5lcmljL21tYW4uaCBiL2xpYmMva2VybmVsL2NvbW1vbi9hc20tZ2VuZXJpYy9tbWFuLmgKaW5kZXggOThkMjc4My4uNWEwMjQyYSAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2FzbS1nZW5lcmljL21tYW4uaAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vYXNtLWdlbmVyaWMvbW1hbi5oCkBAIC03LDQwICs3LDMwIEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotI2lmbmRlZiBfQVNNX0dFTkVSSUNfTU1BTl9ICi0jZGVmaW5lIF9BU01fR0VORVJJQ19NTUFOX0gKLQotI2RlZmluZSBQUk9UX1JFQUQgMHgxICAKLSNkZWZpbmUgUFJPVF9XUklURSAweDIgIAotI2RlZmluZSBQUk9UX0VYRUMgMHg0ICAKLSNkZWZpbmUgUFJPVF9TRU0gMHg4ICAKLSNkZWZpbmUgUFJPVF9OT05FIDB4MCAgCi0jZGVmaW5lIFBST1RfR1JPV1NET1dOIDB4MDEwMDAwMDAgIAotI2RlZmluZSBQUk9UX0dST1dTVVAgMHgwMjAwMDAwMCAgCi0KLSNkZWZpbmUgTUFQX1NIQVJFRCAweDAxICAKLSNkZWZpbmUgTUFQX1BSSVZBVEUgMHgwMiAgCi0jZGVmaW5lIE1BUF9UWVBFIDB4MGYgIAotI2RlZmluZSBNQVBfRklYRUQgMHgxMCAgCi0jZGVmaW5lIE1BUF9BTk9OWU1PVVMgMHgyMCAgCi0KLSNkZWZpbmUgTVNfQVNZTkMgMSAgCi0jZGVmaW5lIE1TX0lOVkFMSURBVEUgMiAgCi0jZGVmaW5lIE1TX1NZTkMgNCAgCi0KLSNkZWZpbmUgTUFEVl9OT1JNQUwgMCAgCi0jZGVmaW5lIE1BRFZfUkFORE9NIDEgIAotI2RlZmluZSBNQURWX1NFUVVFTlRJQUwgMiAgCi0jZGVmaW5lIE1BRFZfV0lMTE5FRUQgMyAgCi0jZGVmaW5lIE1BRFZfRE9OVE5FRUQgNCAgCi0KLSNkZWZpbmUgTUFEVl9SRU1PVkUgOSAgCi0jZGVmaW5lIE1BRFZfRE9OVEZPUksgMTAgIAotI2RlZmluZSBNQURWX0RPRk9SSyAxMSAgCi0KLSNkZWZpbmUgTUFQX0FOT04gTUFQX0FOT05ZTU9VUwotI2RlZmluZSBNQVBfRklMRSAwCi0KKyNpZm5kZWYgX19BU01fR0VORVJJQ19NTUFOX0gKKyNkZWZpbmUgX19BU01fR0VORVJJQ19NTUFOX0gKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9tbWFuLWNvbW1vbi5oPgorI2RlZmluZSBNQVBfR1JPV1NET1dOIDB4MDEwMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgTUFQX0RFTllXUklURSAweDA4MDAKKyNkZWZpbmUgTUFQX0VYRUNVVEFCTEUgMHgxMDAwCisjZGVmaW5lIE1BUF9MT0NLRUQgMHgyMDAwCisjZGVmaW5lIE1BUF9OT1JFU0VSVkUgMHg0MDAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBNQVBfUE9QVUxBVEUgMHg4MDAwCisjZGVmaW5lIE1BUF9OT05CTE9DSyAweDEwMDAwCisjZGVmaW5lIE1BUF9TVEFDSyAweDIwMDAwCisjZGVmaW5lIE1BUF9IVUdFVExCIDB4NDAwMDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIE1DTF9DVVJSRU5UIDEKKyNkZWZpbmUgTUNMX0ZVVFVSRSAyCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9hc20tZ2VuZXJpYy9tdXRleC14Y2hnLmggYi9saWJjL2tlcm5lbC9jb21tb24vYXNtLWdlbmVyaWMvbXV0ZXgteGNoZy5oCmluZGV4IDYzYTU1N2UuLjc0OTQ5NjUgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9hc20tZ2VuZXJpYy9tdXRleC14Y2hnLmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2FzbS1nZW5lcmljL211dGV4LXhjaGcuaApAQCAtNywxMCArNywxNyBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX0FTTV9HRU5FUklDX01VVEVYX1hDSEdfSAogI2RlZmluZSBfQVNNX0dFTkVSSUNfTVVURVhfWENIR19ICi0KICNkZWZpbmUgX19tdXRleF9zbG93cGF0aF9uZWVkc190b191bmxvY2soKSAwCiAjZW5kaWYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vYXNtLWdlbmVyaWMvcGVyY3B1LmggYi9saWJjL2tlcm5lbC9jb21tb24vYXNtLWdlbmVyaWMvcGVyY3B1LmgKaW5kZXggZTQ5ODMwMC4uNTViOGI2YSAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2FzbS1nZW5lcmljL3BlcmNwdS5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9hc20tZ2VuZXJpYy9wZXJjcHUuaApAQCAtNywyMyArNywyNyBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX0FTTV9HRU5FUklDX1BFUkNQVV9IXwogI2RlZmluZSBfQVNNX0dFTkVSSUNfUEVSQ1BVX0hfCiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KLQogI2RlZmluZSBfX0dFTkVSSUNfUEVSX0NQVQotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBERUZJTkVfUEVSX0NQVSh0eXBlLCBuYW1lKSAgIF9fdHlwZW9mX18odHlwZSkgcGVyX2NwdV9fIyNuYW1lCi0KICNkZWZpbmUgcGVyX2NwdSh2YXIsIGNwdSkgKCooKHZvaWQpKGNwdSksICZwZXJfY3B1X18jI3ZhcikpCiAjZGVmaW5lIF9fZ2V0X2NwdV92YXIodmFyKSBwZXJfY3B1X18jI3ZhcgogI2RlZmluZSBfX3Jhd19nZXRfY3B1X3Zhcih2YXIpIHBlcl9jcHVfXyMjdmFyCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIERFQ0xBUkVfUEVSX0NQVSh0eXBlLCBuYW1lKSBleHRlcm4gX190eXBlb2ZfXyh0eXBlKSBwZXJfY3B1X18jI25hbWUKLQogI2RlZmluZSBFWFBPUlRfUEVSX0NQVV9TWU1CT0wodmFyKSBFWFBPUlRfU1lNQk9MKHBlcl9jcHVfXyMjdmFyKQogI2RlZmluZSBFWFBPUlRfUEVSX0NQVV9TWU1CT0xfR1BMKHZhcikgRVhQT1JUX1NZTUJPTF9HUEwocGVyX2NwdV9fIyN2YXIpCi0KICNlbmRpZgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9hc20tZ2VuZXJpYy9wZ3RhYmxlLW5vcG1kLmggYi9saWJjL2tlcm5lbC9jb21tb24vYXNtLWdlbmVyaWMvcGd0YWJsZS1ub3BtZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjM2Y0MGMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vYXNtLWdlbmVyaWMvcGd0YWJsZS1ub3BtZC5oCkBAIC0wLDAgKzEsNDggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX1BHVEFCTEVfTk9QTURfSAorI2RlZmluZSBfUEdUQUJMRV9OT1BNRF9ICisjaWZuZGVmIF9fQVNTRU1CTFlfXworI2luY2x1ZGUgPGFzbS1nZW5lcmljL3BndGFibGUtbm9wdWQuaD4KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCitzdHJ1Y3QgbW1fc3RydWN0OworI2RlZmluZSBfX1BBR0VUQUJMRV9QTURfRk9MREVECit0eXBlZGVmIHN0cnVjdCB7IHB1ZF90IHB1ZDsgfSBwbWRfdDsKKyNkZWZpbmUgUE1EX1NISUZUIFBVRF9TSElGVAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgUFRSU19QRVJfUE1EIDEKKyNkZWZpbmUgUE1EX1NJWkUgKDFVTCA8PCBQTURfU0hJRlQpCisjZGVmaW5lIFBNRF9NQVNLICh+KFBNRF9TSVpFLTEpKQorI2RlZmluZSBwbWRfRVJST1IocG1kKSAocHVkX0VSUk9SKChwbWQpLnB1ZCkpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBwdWRfcG9wdWxhdGUobW0sIHBtZCwgcHRlKSBkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIHNldF9wdWQocHVkcHRyLCBwdWR2YWwpIHNldF9wbWQoKHBtZF90ICopKHB1ZHB0ciksIChwbWRfdCkgeyBwdWR2YWwgfSkKKyNkZWZpbmUgcG1kX3ZhbCh4KSAocHVkX3ZhbCgoeCkucHVkKSkKKyNkZWZpbmUgX19wbWQoeCkgKChwbWRfdCkgeyBfX3B1ZCh4KSB9ICkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIHB1ZF9wYWdlKHB1ZCkgKHBtZF9wYWdlKChwbWRfdCl7IHB1ZCB9KSkKKyNkZWZpbmUgcHVkX3BhZ2VfdmFkZHIocHVkKSAocG1kX3BhZ2VfdmFkZHIoKHBtZF90KXsgcHVkIH0pKQorI2RlZmluZSBwbWRfYWxsb2Nfb25lKG1tLCBhZGRyZXNzKSBOVUxMCisjZGVmaW5lIF9fcG1kX2ZyZWVfdGxiKHRsYiwgeCwgYSkgZG8geyB9IHdoaWxlICgwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyN1bmRlZiBwbWRfYWRkcl9lbmQKKyNkZWZpbmUgcG1kX2FkZHJfZW5kKGFkZHIsIGVuZCkgKGVuZCkKKyNlbmRpZgorI2VuZGlmCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2FzbS1nZW5lcmljL3BndGFibGUtbm9wdWQuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9hc20tZ2VuZXJpYy9wZ3RhYmxlLW5vcHVkLmgKaW5kZXggNTg1ZjgxNi4uZTk0MGFlNCAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2FzbS1nZW5lcmljL3BndGFibGUtbm9wdWQuaAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vYXNtLWdlbmVyaWMvcGd0YWJsZS1ub3B1ZC5oCkBAIC03LDMzICs3LDQwIEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfUEdUQUJMRV9OT1BVRF9ICiAjZGVmaW5lIF9QR1RBQkxFX05PUFVEX0gKLQogI2lmbmRlZiBfX0FTU0VNQkxZX18KLQogI2RlZmluZSBfX1BBR0VUQUJMRV9QVURfRk9MREVECi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB0eXBlZGVmIHN0cnVjdCB7IHBnZF90IHBnZDsgfSBwdWRfdDsKLQogI2RlZmluZSBQVURfU0hJRlQgUEdESVJfU0hJRlQKICNkZWZpbmUgUFRSU19QRVJfUFVEIDEKICNkZWZpbmUgUFVEX1NJWkUgKDFVTCA8PCBQVURfU0hJRlQpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQVURfTUFTSyAofihQVURfU0laRS0xKSkKLQogI2RlZmluZSBwdWRfRVJST1IocHVkKSAocGdkX0VSUk9SKChwdWQpLnBnZCkpCiAjZGVmaW5lIHBnZF9wb3B1bGF0ZShtbSwgcGdkLCBwdWQpIGRvIHsgfSB3aGlsZSAoMCkKICNkZWZpbmUgc2V0X3BnZChwZ2RwdHIsIHBnZHZhbCkgc2V0X3B1ZCgocHVkX3QgKikocGdkcHRyKSwgKHB1ZF90KSB7IHBnZHZhbCB9KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgcHVkX3ZhbCh4KSAocGdkX3ZhbCgoeCkucGdkKSkKICNkZWZpbmUgX19wdWQoeCkgKChwdWRfdCkgeyBfX3BnZCh4KSB9ICkKICNkZWZpbmUgcGdkX3BhZ2UocGdkKSAocHVkX3BhZ2UoKHB1ZF90KXsgcGdkIH0pKQogI2RlZmluZSBwZ2RfcGFnZV9rZXJuZWwocGdkKSAocHVkX3BhZ2Vfa2VybmVsKChwdWRfdCl7IHBnZCB9KSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIHB1ZF9hbGxvY19vbmUobW0sIGFkZHJlc3MpIE5VTEwKICNkZWZpbmUgcHVkX2ZyZWUoeCkgZG8geyB9IHdoaWxlICgwKQogI2RlZmluZSBfX3B1ZF9mcmVlX3RsYih0bGIsIHgpIGRvIHsgfSB3aGlsZSAoMCkKICN1bmRlZiBwdWRfYWRkcl9lbmQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIHB1ZF9hZGRyX2VuZChhZGRyLCBlbmQpIChlbmQpCiAjZW5kaWYKICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2FzbS1nZW5lcmljL3BndGFibGUuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9hc20tZ2VuZXJpYy9wZ3RhYmxlLmgKaW5kZXggYTIxY2RiYS4uZGFkZjM4NiAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2FzbS1nZW5lcmljL3BndGFibGUuaAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vYXNtLWdlbmVyaWMvcGd0YWJsZS5oCkBAIC03LDg5ICs3LDk5IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfQVNNX0dFTkVSSUNfUEdUQUJMRV9ICiAjZGVmaW5lIF9BU01fR0VORVJJQ19QR1RBQkxFX0gKLQogI2lmbmRlZiBfX0hBVkVfQVJDSF9QVEVQX0VTVEFCTElTSAotCiAjaWZuZGVmIF9fSEFWRV9BUkNIX1NFVF9QVEVfQVRPTUlDCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBwdGVwX2VzdGFibGlzaChfX3ZtYSwgX19hZGRyZXNzLCBfX3B0ZXAsIF9fZW50cnkpICBkbyB7ICAgc2V0X3B0ZV9hdCgoX192bWEpLT52bV9tbSwgKF9fYWRkcmVzcyksIF9fcHRlcCwgX19lbnRyeSk7ICAgZmx1c2hfdGxiX3BhZ2UoX192bWEsIF9fYWRkcmVzcyk7ICB9IHdoaWxlICgwKQogI2Vsc2UKICNkZWZpbmUgcHRlcF9lc3RhYmxpc2goX192bWEsIF9fYWRkcmVzcywgX19wdGVwLCBfX2VudHJ5KSAgZG8geyAgIHNldF9wdGVfYXRvbWljKF9fcHRlcCwgX19lbnRyeSk7ICAgZmx1c2hfdGxiX3BhZ2UoX192bWEsIF9fYWRkcmVzcyk7ICB9IHdoaWxlICgwKQogI2VuZGlmCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2VuZGlmCi0KICNpZm5kZWYgX19IQVZFX0FSQ0hfUFRFUF9TRVRfQUNDRVNTX0ZMQUdTCi0KICNkZWZpbmUgcHRlcF9zZXRfYWNjZXNzX2ZsYWdzKF9fdm1hLCBfX2FkZHJlc3MsIF9fcHRlcCwgX19lbnRyeSwgX19kaXJ0eSkgIGRvIHsgICBzZXRfcHRlX2F0KChfX3ZtYSktPnZtX21tLCAoX19hZGRyZXNzKSwgX19wdGVwLCBfX2VudHJ5KTsgICBmbHVzaF90bGJfcGFnZShfX3ZtYSwgX19hZGRyZXNzKTsgIH0gd2hpbGUgKDApCiAjZW5kaWYKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNpZm5kZWYgX19IQVZFX0FSQ0hfUFRFUF9URVNUX0FORF9DTEVBUl9ZT1VORwogI2RlZmluZSBwdGVwX3Rlc3RfYW5kX2NsZWFyX3lvdW5nKF9fdm1hLCBfX2FkZHJlc3MsIF9fcHRlcCkgICh7ICAgcHRlX3QgX19wdGUgPSAqKF9fcHRlcCk7ICAgaW50IHIgPSAxOyAgIGlmICghcHRlX3lvdW5nKF9fcHRlKSkgICByID0gMDsgICBlbHNlICAgc2V0X3B0ZV9hdCgoX192bWEpLT52bV9tbSwgKF9fYWRkcmVzcyksICAgKF9fcHRlcCksIHB0ZV9ta29sZChfX3B0ZSkpOyAgIHI7ICB9KQogI2VuZGlmCi0KICNpZm5kZWYgX19IQVZFX0FSQ0hfUFRFUF9DTEVBUl9ZT1VOR19GTFVTSAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgcHRlcF9jbGVhcl9mbHVzaF95b3VuZyhfX3ZtYSwgX19hZGRyZXNzLCBfX3B0ZXApICAoeyAgIGludCBfX3lvdW5nOyAgIF9feW91bmcgPSBwdGVwX3Rlc3RfYW5kX2NsZWFyX3lvdW5nKF9fdm1hLCBfX2FkZHJlc3MsIF9fcHRlcCk7ICAgaWYgKF9feW91bmcpICAgZmx1c2hfdGxiX3BhZ2UoX192bWEsIF9fYWRkcmVzcyk7ICAgX195b3VuZzsgIH0pCiAjZW5kaWYKLQogI2lmbmRlZiBfX0hBVkVfQVJDSF9QVEVQX1RFU1RfQU5EX0NMRUFSX0RJUlRZCiAjZGVmaW5lIHB0ZXBfdGVzdF9hbmRfY2xlYXJfZGlydHkoX192bWEsIF9fYWRkcmVzcywgX19wdGVwKSAgKHsgICBwdGVfdCBfX3B0ZSA9ICpfX3B0ZXA7ICAgaW50IHIgPSAxOyAgIGlmICghcHRlX2RpcnR5KF9fcHRlKSkgICByID0gMDsgICBlbHNlICAgc2V0X3B0ZV9hdCgoX192bWEpLT52bV9tbSwgKF9fYWRkcmVzcyksIChfX3B0ZXApLCAgIHB0ZV9ta2NsZWFuKF9fcHRlKSk7ICAgcjsgIH0pCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2VuZGlmCi0KICNpZm5kZWYgX19IQVZFX0FSQ0hfUFRFUF9DTEVBUl9ESVJUWV9GTFVTSAogI2RlZmluZSBwdGVwX2NsZWFyX2ZsdXNoX2RpcnR5KF9fdm1hLCBfX2FkZHJlc3MsIF9fcHRlcCkgICh7ICAgaW50IF9fZGlydHk7ICAgX19kaXJ0eSA9IHB0ZXBfdGVzdF9hbmRfY2xlYXJfZGlydHkoX192bWEsIF9fYWRkcmVzcywgX19wdGVwKTsgICBpZiAoX19kaXJ0eSkgICBmbHVzaF90bGJfcGFnZShfX3ZtYSwgX19hZGRyZXNzKTsgICBfX2RpcnR5OyAgfSkKICNlbmRpZgotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2lmbmRlZiBfX0hBVkVfQVJDSF9QVEVQX0dFVF9BTkRfQ0xFQVIKICNkZWZpbmUgcHRlcF9nZXRfYW5kX2NsZWFyKF9fbW0sIF9fYWRkcmVzcywgX19wdGVwKSAgKHsgICBwdGVfdCBfX3B0ZSA9ICooX19wdGVwKTsgICBwdGVfY2xlYXIoKF9fbW0pLCAoX19hZGRyZXNzKSwgKF9fcHRlcCkpOyAgIF9fcHRlOyAgfSkKICNlbmRpZgotCiAjaWZuZGVmIF9fSEFWRV9BUkNIX1BURVBfR0VUX0FORF9DTEVBUl9GVUxMCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBwdGVwX2dldF9hbmRfY2xlYXJfZnVsbChfX21tLCBfX2FkZHJlc3MsIF9fcHRlcCwgX19mdWxsKSAgKHsgICBwdGVfdCBfX3B0ZTsgICBfX3B0ZSA9IHB0ZXBfZ2V0X2FuZF9jbGVhcigoX19tbSksIChfX2FkZHJlc3MpLCAoX19wdGVwKSk7ICAgX19wdGU7ICB9KQogI2VuZGlmCi0KICNpZm5kZWYgX19IQVZFX0FSQ0hfUFRFX0NMRUFSX0ZVTEwKICNkZWZpbmUgcHRlX2NsZWFyX2Z1bGwoX19tbSwgX19hZGRyZXNzLCBfX3B0ZXAsIF9fZnVsbCkgIGRvIHsgICBwdGVfY2xlYXIoKF9fbW0pLCAoX19hZGRyZXNzKSwgKF9fcHRlcCkpOyAgfSB3aGlsZSAoMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZW5kaWYKLQogI2lmbmRlZiBfX0hBVkVfQVJDSF9QVEVQX0NMRUFSX0ZMVVNICiAjZGVmaW5lIHB0ZXBfY2xlYXJfZmx1c2goX192bWEsIF9fYWRkcmVzcywgX19wdGVwKSAgKHsgICBwdGVfdCBfX3B0ZTsgICBfX3B0ZSA9IHB0ZXBfZ2V0X2FuZF9jbGVhcigoX192bWEpLT52bV9tbSwgX19hZGRyZXNzLCBfX3B0ZXApOyAgIGZsdXNoX3RsYl9wYWdlKF9fdm1hLCBfX2FkZHJlc3MpOyAgIF9fcHRlOyAgfSkKICNlbmRpZgotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2lmbmRlZiBfX0hBVkVfQVJDSF9QVEVQX1NFVF9XUlBST1RFQ1QKIHN0cnVjdCBtbV9zdHJ1Y3Q7CiAjZW5kaWYKICNpZm5kZWYgX19IQVZFX0FSQ0hfUFRFX1NBTUUKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIHB0ZV9zYW1lKEEsQikgKHB0ZV92YWwoQSkgPT0gcHRlX3ZhbChCKSkKICNlbmRpZgogI2lmbmRlZiBfX0hBVkVfQVJDSF9QQUdFX1RFU1RfQU5EX0NMRUFSX0RJUlRZCiAjZGVmaW5lIHBhZ2VfdGVzdF9hbmRfY2xlYXJfZGlydHkocGFnZSkgKDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBwdGVfbWF5YmVfZGlydHkocHRlKSBwdGVfZGlydHkocHRlKQogI2Vsc2UKICNkZWZpbmUgcHRlX21heWJlX2RpcnR5KHB0ZSkgKDEpCiAjZW5kaWYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjaWZuZGVmIF9fSEFWRV9BUkNIX1BBR0VfVEVTVF9BTkRfQ0xFQVJfWU9VTkcKICNkZWZpbmUgcGFnZV90ZXN0X2FuZF9jbGVhcl95b3VuZyhwYWdlKSAoMCkKICNlbmRpZgogI2lmbmRlZiBfX0hBVkVfQVJDSF9QR0RfT0ZGU0VUX0dBVEUKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIHBnZF9vZmZzZXRfZ2F0ZShtbSwgYWRkcikgcGdkX29mZnNldChtbSwgYWRkcikKICNlbmRpZgogI2lmbmRlZiBfX0hBVkVfQVJDSF9MQVpZX01NVV9QUk9UX1VQREFURQogI2RlZmluZSBsYXp5X21tdV9wcm90X3VwZGF0ZShwdGUpIGRvIHsgfSB3aGlsZSAoMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZW5kaWYKICNpZm5kZWYgX19IQVZFX0FSQ0hfTU9WRV9QVEUKICNkZWZpbmUgbW92ZV9wdGUocHRlLCBwcm90LCBvbGRfYWRkciwgbmV3X2FkZHIpIChwdGUpCiAjZW5kaWYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIHBnZF9hZGRyX2VuZChhZGRyLCBlbmQpICAoeyB1bnNpZ25lZCBsb25nIF9fYm91bmRhcnkgPSAoKGFkZHIpICsgUEdESVJfU0laRSkgJiBQR0RJUl9NQVNLOyAgIChfX2JvdW5kYXJ5IC0gMSA8IChlbmQpIC0gMSk/IF9fYm91bmRhcnk6IChlbmQpOyAgfSkKICNpZm5kZWYgcHVkX2FkZHJfZW5kCiAjZGVmaW5lIHB1ZF9hZGRyX2VuZChhZGRyLCBlbmQpICAoeyB1bnNpZ25lZCBsb25nIF9fYm91bmRhcnkgPSAoKGFkZHIpICsgUFVEX1NJWkUpICYgUFVEX01BU0s7ICAgKF9fYm91bmRhcnkgLSAxIDwgKGVuZCkgLSAxKT8gX19ib3VuZGFyeTogKGVuZCk7ICB9KQogI2VuZGlmCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2lmbmRlZiBwbWRfYWRkcl9lbmQKICNkZWZpbmUgcG1kX2FkZHJfZW5kKGFkZHIsIGVuZCkgICh7IHVuc2lnbmVkIGxvbmcgX19ib3VuZGFyeSA9ICgoYWRkcikgKyBQTURfU0laRSkgJiBQTURfTUFTSzsgICAoX19ib3VuZGFyeSAtIDEgPCAoZW5kKSAtIDEpPyBfX2JvdW5kYXJ5OiAoZW5kKTsgIH0pCiAjZW5kaWYKICNpZm5kZWYgX19BU1NFTUJMWV9fCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZW5kaWYKICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2FzbS1nZW5lcmljL3BvbGwuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9hc20tZ2VuZXJpYy9wb2xsLmgKaW5kZXggYjhjZDNkYS4uZjdiOTExZCAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2FzbS1nZW5lcmljL3BvbGwuaAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vYXNtLWdlbmVyaWMvcG9sbC5oCkBAIC03LDQwICs3LDUwIEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfX0FTTV9HRU5FUklDX1BPTExfSAogI2RlZmluZSBfX0FTTV9HRU5FUklDX1BPTExfSAotCiAjZGVmaW5lIFBPTExJTiAweDAwMDEKICNkZWZpbmUgUE9MTFBSSSAweDAwMDIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBPTExPVVQgMHgwMDA0CiAjZGVmaW5lIFBPTExFUlIgMHgwMDA4CiAjZGVmaW5lIFBPTExIVVAgMHgwMDEwCiAjZGVmaW5lIFBPTExOVkFMIDB4MDAyMAotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQT0xMUkROT1JNIDB4MDA0MAogI2RlZmluZSBQT0xMUkRCQU5EIDB4MDA4MAogI2lmbmRlZiBQT0xMV1JOT1JNCiAjZGVmaW5lIFBPTExXUk5PUk0gMHgwMTAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2VuZGlmCiAjaWZuZGVmIFBPTExXUkJBTkQKICNkZWZpbmUgUE9MTFdSQkFORCAweDAyMDAKICNlbmRpZgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNpZm5kZWYgUE9MTE1TRwogI2RlZmluZSBQT0xMTVNHIDB4MDQwMAogI2VuZGlmCiAjaWZuZGVmIFBPTExSRU1PVkUKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBPTExSRU1PVkUgMHgxMDAwCiAjZW5kaWYKICNpZm5kZWYgUE9MTFJESFVQCiAjZGVmaW5lIFBPTExSREhVUCAweDIwMDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZW5kaWYKLQogc3RydWN0IHBvbGxmZCB7CiAgaW50IGZkOwogIHNob3J0IGV2ZW50czsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc2hvcnQgcmV2ZW50czsKIH07Ci0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2FzbS1nZW5lcmljL3Jlc291cmNlLmggYi9saWJjL2tlcm5lbC9jb21tb24vYXNtLWdlbmVyaWMvcmVzb3VyY2UuaAppbmRleCBjNDliNDc2Li5hYTYwNzhmIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vYXNtLWdlbmVyaWMvcmVzb3VyY2UuaAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vYXNtLWdlbmVyaWMvcmVzb3VyY2UuaApAQCAtMTgsMzggKzE4LDM4IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX0FTTV9HRU5FUklDX1JFU09VUkNFX0gKICNkZWZpbmUgX0FTTV9HRU5FUklDX1JFU09VUkNFX0gKLSNkZWZpbmUgUkxJTUlUX0NQVSAwICAKLSNkZWZpbmUgUkxJTUlUX0ZTSVpFIDEgIAorI2RlZmluZSBSTElNSVRfQ1BVIDAKKyNkZWZpbmUgUkxJTUlUX0ZTSVpFIDEKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIFJMSU1JVF9EQVRBIDIgIAotI2RlZmluZSBSTElNSVRfU1RBQ0sgMyAgCi0jZGVmaW5lIFJMSU1JVF9DT1JFIDQgIAorI2RlZmluZSBSTElNSVRfREFUQSAyCisjZGVmaW5lIFJMSU1JVF9TVEFDSyAzCisjZGVmaW5lIFJMSU1JVF9DT1JFIDQKICNpZm5kZWYgUkxJTUlUX1JTUwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgUkxJTUlUX1JTUyA1ICAKKyNkZWZpbmUgUkxJTUlUX1JTUyA1CiAjZW5kaWYKICNpZm5kZWYgUkxJTUlUX05QUk9DCi0jZGVmaW5lIFJMSU1JVF9OUFJPQyA2ICAKKyNkZWZpbmUgUkxJTUlUX05QUk9DIDYKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZW5kaWYKICNpZm5kZWYgUkxJTUlUX05PRklMRQotI2RlZmluZSBSTElNSVRfTk9GSUxFIDcgIAorI2RlZmluZSBSTElNSVRfTk9GSUxFIDcKICNlbmRpZgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNpZm5kZWYgUkxJTUlUX01FTUxPQ0sKLSNkZWZpbmUgUkxJTUlUX01FTUxPQ0sgOCAgCisjZGVmaW5lIFJMSU1JVF9NRU1MT0NLIDgKICNlbmRpZgogI2lmbmRlZiBSTElNSVRfQVMKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIFJMSU1JVF9BUyA5ICAKKyNkZWZpbmUgUkxJTUlUX0FTIDkKICNlbmRpZgotI2RlZmluZSBSTElNSVRfTE9DS1MgMTAgIAotI2RlZmluZSBSTElNSVRfU0lHUEVORElORyAxMSAgCisjZGVmaW5lIFJMSU1JVF9MT0NLUyAxMAorI2RlZmluZSBSTElNSVRfU0lHUEVORElORyAxMQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgUkxJTUlUX01TR1FVRVVFIDEyICAKLSNkZWZpbmUgUkxJTUlUX05JQ0UgMTMgIAotI2RlZmluZSBSTElNSVRfUlRQUklPIDE0ICAKLSNkZWZpbmUgUkxJTUlUX1JUVElNRSAxNSAgCisjZGVmaW5lIFJMSU1JVF9NU0dRVUVVRSAxMgorI2RlZmluZSBSTElNSVRfTklDRSAxMworI2RlZmluZSBSTElNSVRfUlRQUklPIDE0CisjZGVmaW5lIFJMSU1JVF9SVFRJTUUgMTUKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFJMSU1fTkxJTUlUUyAxNgogI2lmbmRlZiBSTElNX0lORklOSVRZCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vYXNtLWdlbmVyaWMvc2VjdGlvbnMuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9hc20tZ2VuZXJpYy9zZWN0aW9ucy5oCmluZGV4IGU5ZWFhNDYuLjA1MjkyODAgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9hc20tZ2VuZXJpYy9zZWN0aW9ucy5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9hc20tZ2VuZXJpYy9zZWN0aW9ucy5oCkBAIC03LDkgKzcsMTUgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9BU01fR0VORVJJQ19TRUNUSU9OU19IXwogI2RlZmluZSBfQVNNX0dFTkVSSUNfU0VDVElPTlNfSF8KLQogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vYXNtLWdlbmVyaWMvc2lnaW5mby5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2FzbS1nZW5lcmljL3NpZ2luZm8uaAppbmRleCBkNjc0M2E3Li42MTU3ZWJjIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vYXNtLWdlbmVyaWMvc2lnaW5mby5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9hc20tZ2VuZXJpYy9zaWdpbmZvLmgKQEAgLTcsMjA3ICs3LDIyMiBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX0FTTV9HRU5FUklDX1NJR0lORk9fSAogI2RlZmluZSBfQVNNX0dFTkVSSUNfU0lHSU5GT19ICi0KICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB0eXBlZGVmIHVuaW9uIHNpZ3ZhbCB7CiAgaW50IHNpdmFsX2ludDsKICB2b2lkIF9fdXNlciAqc2l2YWxfcHRyOwogfSBzaWd2YWxfdDsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNpZm5kZWYgX19BUkNIX1NJX1BSRUFNQkxFX1NJWkUKICNkZWZpbmUgX19BUkNIX1NJX1BSRUFNQkxFX1NJWkUgKDMgKiBzaXplb2YoaW50KSkKICNlbmRpZgotCiAjZGVmaW5lIFNJX01BWF9TSVpFIDEyOAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNpZm5kZWYgU0lfUEFEX1NJWkUKICNkZWZpbmUgU0lfUEFEX1NJWkUgKChTSV9NQVhfU0laRSAtIF9fQVJDSF9TSV9QUkVBTUJMRV9TSVpFKSAvIHNpemVvZihpbnQpKQogI2VuZGlmCi0KICNpZm5kZWYgX19BUkNIX1NJX1VJRF9UCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX0FSQ0hfU0lfVUlEX1QgdWlkX3QKICNlbmRpZgotCiAjaWZuZGVmIF9fQVJDSF9TSV9CQU5EX1QKICNkZWZpbmUgX19BUkNIX1NJX0JBTkRfVCBsb25nCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2VuZGlmCi0KICNpZm5kZWYgSEFWRV9BUkNIX1NJR0lORk9fVAotCiB0eXBlZGVmIHN0cnVjdCBzaWdpbmZvIHsKICBpbnQgc2lfc2lnbm87CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGludCBzaV9lcnJubzsKICBpbnQgc2lfY29kZTsKLQogIHVuaW9uIHsKICBpbnQgX3BhZFtTSV9QQURfU0laRV07Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IHsKICBwaWRfdCBfcGlkOwogIF9fQVJDSF9TSV9VSURfVCBfdWlkOwogIH0gX2tpbGw7Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IHsKICB0aW1lcl90IF90aWQ7CiAgaW50IF9vdmVycnVuOwogIGNoYXIgX3BhZFtzaXplb2YoIF9fQVJDSF9TSV9VSURfVCkgLSBzaXplb2YoaW50KV07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHNpZ3ZhbF90IF9zaWd2YWw7CiAgaW50IF9zeXNfcHJpdmF0ZTsKICB9IF90aW1lcjsKLQogIHN0cnVjdCB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHBpZF90IF9waWQ7CiAgX19BUkNIX1NJX1VJRF9UIF91aWQ7CiAgc2lndmFsX3QgX3NpZ3ZhbDsKICB9IF9ydDsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgewogIHBpZF90IF9waWQ7CiAgX19BUkNIX1NJX1VJRF9UIF91aWQ7CiAgaW50IF9zdGF0dXM7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGNsb2NrX3QgX3V0aW1lOwogIGNsb2NrX3QgX3N0aW1lOwogIH0gX3NpZ2NobGQ7Ci0KICBzdHJ1Y3QgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB2b2lkIF9fdXNlciAqX2FkZHI7CiAjaWZkZWYgX19BUkNIX1NJX1RSQVBOTwogIGludCBfdHJhcG5vOwogI2VuZGlmCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIH0gX3NpZ2ZhdWx0OwotCiAgc3RydWN0IHsKICBfX0FSQ0hfU0lfQkFORF9UIF9iYW5kOwogIGludCBfZmQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIH0gX3NpZ3BvbGw7CiAgfSBfc2lmaWVsZHM7CiB9IHNpZ2luZm9fdDsKLQogI2VuZGlmCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIHNpX3BpZCBfc2lmaWVsZHMuX2tpbGwuX3BpZAogI2RlZmluZSBzaV91aWQgX3NpZmllbGRzLl9raWxsLl91aWQKICNkZWZpbmUgc2lfdGlkIF9zaWZpZWxkcy5fdGltZXIuX3RpZAogI2RlZmluZSBzaV9vdmVycnVuIF9zaWZpZWxkcy5fdGltZXIuX292ZXJydW4KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIHNpX3N5c19wcml2YXRlIF9zaWZpZWxkcy5fdGltZXIuX3N5c19wcml2YXRlCiAjZGVmaW5lIHNpX3N0YXR1cyBfc2lmaWVsZHMuX3NpZ2NobGQuX3N0YXR1cwogI2RlZmluZSBzaV91dGltZSBfc2lmaWVsZHMuX3NpZ2NobGQuX3V0aW1lCiAjZGVmaW5lIHNpX3N0aW1lIF9zaWZpZWxkcy5fc2lnY2hsZC5fc3RpbWUKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIHNpX3ZhbHVlIF9zaWZpZWxkcy5fcnQuX3NpZ3ZhbAogI2RlZmluZSBzaV9pbnQgX3NpZmllbGRzLl9ydC5fc2lndmFsLnNpdmFsX2ludAogI2RlZmluZSBzaV9wdHIgX3NpZmllbGRzLl9ydC5fc2lndmFsLnNpdmFsX3B0cgogI2RlZmluZSBzaV9hZGRyIF9zaWZpZWxkcy5fc2lnZmF1bHQuX2FkZHIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjaWZkZWYgX19BUkNIX1NJX1RSQVBOTwogI2RlZmluZSBzaV90cmFwbm8gX3NpZmllbGRzLl9zaWdmYXVsdC5fdHJhcG5vCiAjZW5kaWYKICNkZWZpbmUgc2lfYmFuZCBfc2lmaWVsZHMuX3NpZ3BvbGwuX2JhbmQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIHNpX2ZkIF9zaWZpZWxkcy5fc2lncG9sbC5fZmQKLQogI2RlZmluZSBfX1NJX0tJTEwgMAogI2RlZmluZSBfX1NJX1RJTUVSIDAKICNkZWZpbmUgX19TSV9QT0xMIDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fU0lfRkFVTFQgMAogI2RlZmluZSBfX1NJX0NITEQgMAogI2RlZmluZSBfX1NJX1JUIDAKICNkZWZpbmUgX19TSV9NRVNHUSAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX1NJX0NPREUoVCxOKSAoTikKLQotI2RlZmluZSBTSV9VU0VSIDAgIAotI2RlZmluZSBTSV9LRVJORUwgMHg4MCAgCi0jZGVmaW5lIFNJX1FVRVVFIC0xICAKLSNkZWZpbmUgU0lfVElNRVIgX19TSV9DT0RFKF9fU0lfVElNRVIsLTIpICAKLSNkZWZpbmUgU0lfTUVTR1EgX19TSV9DT0RFKF9fU0lfTUVTR1EsLTMpICAKLSNkZWZpbmUgU0lfQVNZTkNJTyAtNCAgCi0jZGVmaW5lIFNJX1NJR0lPIC01ICAKLSNkZWZpbmUgU0lfVEtJTEwgLTYgIAotI2RlZmluZSBTSV9ERVRIUkVBRCAtNyAgCi0KKyNkZWZpbmUgU0lfVVNFUiAwCisjZGVmaW5lIFNJX0tFUk5FTCAweDgwCisjZGVmaW5lIFNJX1FVRVVFIC0xCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBTSV9USU1FUiBfX1NJX0NPREUoX19TSV9USU1FUiwtMikKKyNkZWZpbmUgU0lfTUVTR1EgX19TSV9DT0RFKF9fU0lfTUVTR1EsLTMpCisjZGVmaW5lIFNJX0FTWU5DSU8gLTQKKyNkZWZpbmUgU0lfU0lHSU8gLTUKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFNJX1RLSUxMIC02CisjZGVmaW5lIFNJX0RFVEhSRUFEIC03CiAjZGVmaW5lIFNJX0ZST01VU0VSKHNpcHRyKSAoKHNpcHRyKS0+c2lfY29kZSA8PSAwKQogI2RlZmluZSBTSV9GUk9NS0VSTkVMKHNpcHRyKSAoKHNpcHRyKS0+c2lfY29kZSA+IDApCi0KLSNkZWZpbmUgSUxMX0lMTE9QQyAoX19TSV9GQVVMVHwxKSAgCi0jZGVmaW5lIElMTF9JTExPUE4gKF9fU0lfRkFVTFR8MikgIAotI2RlZmluZSBJTExfSUxMQURSIChfX1NJX0ZBVUxUfDMpICAKLSNkZWZpbmUgSUxMX0lMTFRSUCAoX19TSV9GQVVMVHw0KSAgCi0jZGVmaW5lIElMTF9QUlZPUEMgKF9fU0lfRkFVTFR8NSkgIAotI2RlZmluZSBJTExfUFJWUkVHIChfX1NJX0ZBVUxUfDYpICAKLSNkZWZpbmUgSUxMX0NPUFJPQyAoX19TSV9GQVVMVHw3KSAgCi0jZGVmaW5lIElMTF9CQURTVEsgKF9fU0lfRkFVTFR8OCkgIAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgSUxMX0lMTE9QQyAoX19TSV9GQVVMVHwxKQorI2RlZmluZSBJTExfSUxMT1BOIChfX1NJX0ZBVUxUfDIpCisjZGVmaW5lIElMTF9JTExBRFIgKF9fU0lfRkFVTFR8MykKKyNkZWZpbmUgSUxMX0lMTFRSUCAoX19TSV9GQVVMVHw0KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgSUxMX1BSVk9QQyAoX19TSV9GQVVMVHw1KQorI2RlZmluZSBJTExfUFJWUkVHIChfX1NJX0ZBVUxUfDYpCisjZGVmaW5lIElMTF9DT1BST0MgKF9fU0lfRkFVTFR8NykKKyNkZWZpbmUgSUxMX0JBRFNUSyAoX19TSV9GQVVMVHw4KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTlNJR0lMTCA4Ci0KLSNkZWZpbmUgRlBFX0lOVERJViAoX19TSV9GQVVMVHwxKSAgCi0jZGVmaW5lIEZQRV9JTlRPVkYgKF9fU0lfRkFVTFR8MikgIAotI2RlZmluZSBGUEVfRkxURElWIChfX1NJX0ZBVUxUfDMpICAKLSNkZWZpbmUgRlBFX0ZMVE9WRiAoX19TSV9GQVVMVHw0KSAgCi0jZGVmaW5lIEZQRV9GTFRVTkQgKF9fU0lfRkFVTFR8NSkgIAotI2RlZmluZSBGUEVfRkxUUkVTIChfX1NJX0ZBVUxUfDYpICAKLSNkZWZpbmUgRlBFX0ZMVElOViAoX19TSV9GQVVMVHw3KSAgCi0jZGVmaW5lIEZQRV9GTFRTVUIgKF9fU0lfRkFVTFR8OCkgIAorI2RlZmluZSBGUEVfSU5URElWIChfX1NJX0ZBVUxUfDEpCisjZGVmaW5lIEZQRV9JTlRPVkYgKF9fU0lfRkFVTFR8MikKKyNkZWZpbmUgRlBFX0ZMVERJViAoX19TSV9GQVVMVHwzKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgRlBFX0ZMVE9WRiAoX19TSV9GQVVMVHw0KQorI2RlZmluZSBGUEVfRkxUVU5EIChfX1NJX0ZBVUxUfDUpCisjZGVmaW5lIEZQRV9GTFRSRVMgKF9fU0lfRkFVTFR8NikKKyNkZWZpbmUgRlBFX0ZMVElOViAoX19TSV9GQVVMVHw3KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgRlBFX0ZMVFNVQiAoX19TSV9GQVVMVHw4KQogI2RlZmluZSBOU0lHRlBFIDgKLQotI2RlZmluZSBTRUdWX01BUEVSUiAoX19TSV9GQVVMVHwxKSAgCi0jZGVmaW5lIFNFR1ZfQUNDRVJSIChfX1NJX0ZBVUxUfDIpICAKKyNkZWZpbmUgU0VHVl9NQVBFUlIgKF9fU0lfRkFVTFR8MSkKKyNkZWZpbmUgU0VHVl9BQ0NFUlIgKF9fU0lfRkFVTFR8MikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE5TSUdTRUdWIDIKLQotI2RlZmluZSBCVVNfQURSQUxOIChfX1NJX0ZBVUxUfDEpICAKLSNkZWZpbmUgQlVTX0FEUkVSUiAoX19TSV9GQVVMVHwyKSAgCi0jZGVmaW5lIEJVU19PQkpFUlIgKF9fU0lfRkFVTFR8MykgIAorI2RlZmluZSBCVVNfQURSQUxOIChfX1NJX0ZBVUxUfDEpCisjZGVmaW5lIEJVU19BRFJFUlIgKF9fU0lfRkFVTFR8MikKKyNkZWZpbmUgQlVTX09CSkVSUiAoX19TSV9GQVVMVHwzKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTlNJR0JVUyAzCi0KLSNkZWZpbmUgVFJBUF9CUktQVCAoX19TSV9GQVVMVHwxKSAgCi0jZGVmaW5lIFRSQVBfVFJBQ0UgKF9fU0lfRkFVTFR8MikgIAorI2RlZmluZSBUUkFQX0JSS1BUIChfX1NJX0ZBVUxUfDEpCisjZGVmaW5lIFRSQVBfVFJBQ0UgKF9fU0lfRkFVTFR8MikKICNkZWZpbmUgTlNJR1RSQVAgMgotCi0jZGVmaW5lIENMRF9FWElURUQgKF9fU0lfQ0hMRHwxKSAgCi0jZGVmaW5lIENMRF9LSUxMRUQgKF9fU0lfQ0hMRHwyKSAgCi0jZGVmaW5lIENMRF9EVU1QRUQgKF9fU0lfQ0hMRHwzKSAgCi0jZGVmaW5lIENMRF9UUkFQUEVEIChfX1NJX0NITER8NCkgIAotI2RlZmluZSBDTERfU1RPUFBFRCAoX19TSV9DSExEfDUpICAKLSNkZWZpbmUgQ0xEX0NPTlRJTlVFRCAoX19TSV9DSExEfDYpICAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIENMRF9FWElURUQgKF9fU0lfQ0hMRHwxKQorI2RlZmluZSBDTERfS0lMTEVEIChfX1NJX0NITER8MikKKyNkZWZpbmUgQ0xEX0RVTVBFRCAoX19TSV9DSExEfDMpCisjZGVmaW5lIENMRF9UUkFQUEVEIChfX1NJX0NITER8NCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIENMRF9TVE9QUEVEIChfX1NJX0NITER8NSkKKyNkZWZpbmUgQ0xEX0NPTlRJTlVFRCAoX19TSV9DSExEfDYpCiAjZGVmaW5lIE5TSUdDSExEIDYKLQotI2RlZmluZSBQT0xMX0lOIChfX1NJX1BPTEx8MSkgIAotI2RlZmluZSBQT0xMX09VVCAoX19TSV9QT0xMfDIpICAKLSNkZWZpbmUgUE9MTF9NU0cgKF9fU0lfUE9MTHwzKSAgCi0jZGVmaW5lIFBPTExfRVJSIChfX1NJX1BPTEx8NCkgIAotI2RlZmluZSBQT0xMX1BSSSAoX19TSV9QT0xMfDUpICAKLSNkZWZpbmUgUE9MTF9IVVAgKF9fU0lfUE9MTHw2KSAgCisjZGVmaW5lIFBPTExfSU4gKF9fU0lfUE9MTHwxKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgUE9MTF9PVVQgKF9fU0lfUE9MTHwyKQorI2RlZmluZSBQT0xMX01TRyAoX19TSV9QT0xMfDMpCisjZGVmaW5lIFBPTExfRVJSIChfX1NJX1BPTEx8NCkKKyNkZWZpbmUgUE9MTF9QUkkgKF9fU0lfUE9MTHw1KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgUE9MTF9IVVAgKF9fU0lfUE9MTHw2KQogI2RlZmluZSBOU0lHUE9MTCA2Ci0KLSNkZWZpbmUgU0lHRVZfU0lHTkFMIDAgIAotI2RlZmluZSBTSUdFVl9OT05FIDEgIAotI2RlZmluZSBTSUdFVl9USFJFQUQgMiAgCi0jZGVmaW5lIFNJR0VWX1RIUkVBRF9JRCA0ICAKLQorI2RlZmluZSBTSUdFVl9TSUdOQUwgMAorI2RlZmluZSBTSUdFVl9OT05FIDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFNJR0VWX1RIUkVBRCAyCisjZGVmaW5lIFNJR0VWX1RIUkVBRF9JRCA0CiAjaWZuZGVmIF9fQVJDSF9TSUdFVl9QUkVBTUJMRV9TSVpFCiAjZGVmaW5lIF9fQVJDSF9TSUdFVl9QUkVBTUJMRV9TSVpFIChzaXplb2YoaW50KSAqIDIgKyBzaXplb2Yoc2lndmFsX3QpKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlbmRpZgotCiAjZGVmaW5lIFNJR0VWX01BWF9TSVpFIDY0CiAjZGVmaW5lIFNJR0VWX1BBRF9TSVpFICgoU0lHRVZfTUFYX1NJWkUgLSBfX0FSQ0hfU0lHRVZfUFJFQU1CTEVfU0laRSkgICAvIHNpemVvZihpbnQpKQotCiB0eXBlZGVmIHN0cnVjdCBzaWdldmVudCB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHNpZ3ZhbF90IHNpZ2V2X3ZhbHVlOwogIGludCBzaWdldl9zaWdubzsKICBpbnQgc2lnZXZfbm90aWZ5OwogIHVuaW9uIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgaW50IF9wYWRbU0lHRVZfUEFEX1NJWkVdOwogIGludCBfdGlkOwotCiAgc3RydWN0IHsKICB2b2lkICgqX2Z1bmN0aW9uKShzaWd2YWxfdCk7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHZvaWQgKl9hdHRyaWJ1dGU7CiAgfSBfc2lnZXZfdGhyZWFkOwogIH0gX3NpZ2V2X3VuOwogfSBzaWdldmVudF90OwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBzaWdldl9ub3RpZnlfZnVuY3Rpb24gX3NpZ2V2X3VuLl9zaWdldl90aHJlYWQuX2Z1bmN0aW9uCiAjZGVmaW5lIHNpZ2V2X25vdGlmeV9hdHRyaWJ1dGVzIF9zaWdldl91bi5fc2lnZXZfdGhyZWFkLl9hdHRyaWJ1dGUKICNkZWZpbmUgc2lnZXZfbm90aWZ5X3RocmVhZF9pZCBfc2lnZXZfdW4uX3RpZAotCiAjZW5kaWYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vYXNtLWdlbmVyaWMvc2lnbmFsLmggYi9saWJjL2tlcm5lbC9jb21tb24vYXNtLWdlbmVyaWMvc2lnbmFsLmgKaW5kZXggMjI2ZDk5Yy4uN2YyNDcxNyAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2FzbS1nZW5lcmljL3NpZ25hbC5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9hc20tZ2VuZXJpYy9zaWduYWwuaApAQCAtNywzMyArNywzOSBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX19BU01fR0VORVJJQ19TSUdOQUxfSAogI2RlZmluZSBfX0FTTV9HRU5FUklDX1NJR05BTF9ICi0KICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgotCiAjaWZuZGVmIFNJR19CTE9DSwotI2RlZmluZSBTSUdfQkxPQ0sgMCAgCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBTSUdfQkxPQ0sgMAogI2VuZGlmCiAjaWZuZGVmIFNJR19VTkJMT0NLCi0jZGVmaW5lIFNJR19VTkJMT0NLIDEgIAorI2RlZmluZSBTSUdfVU5CTE9DSyAxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2VuZGlmCiAjaWZuZGVmIFNJR19TRVRNQVNLCi0jZGVmaW5lIFNJR19TRVRNQVNLIDIgIAorI2RlZmluZSBTSUdfU0VUTUFTSyAyCiAjZW5kaWYKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNpZm5kZWYgX19BU1NFTUJMWV9fCiB0eXBlZGVmIHZvaWQgX19zaWduYWxmbl90KGludCk7CiB0eXBlZGVmIF9fc2lnbmFsZm5fdCBfX3VzZXIgKl9fc2lnaGFuZGxlcl90OwotCiB0eXBlZGVmIHZvaWQgX19yZXN0b3JlZm5fdCh2b2lkKTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB0eXBlZGVmIF9fcmVzdG9yZWZuX3QgX191c2VyICpfX3NpZ3Jlc3RvcmVfdDsKLQotI2RlZmluZSBTSUdfREZMICgoX19mb3JjZSBfX3NpZ2hhbmRsZXJfdCkwKSAgCi0jZGVmaW5lIFNJR19JR04gKChfX2ZvcmNlIF9fc2lnaGFuZGxlcl90KTEpICAKLSNkZWZpbmUgU0lHX0VSUiAoKF9fZm9yY2UgX19zaWdoYW5kbGVyX3QpLTEpICAKKyNkZWZpbmUgU0lHX0RGTCAoKF9fZm9yY2UgX19zaWdoYW5kbGVyX3QpMCkKKyNkZWZpbmUgU0lHX0lHTiAoKF9fZm9yY2UgX19zaWdoYW5kbGVyX3QpMSkKKyNkZWZpbmUgU0lHX0VSUiAoKF9fZm9yY2UgX19zaWdoYW5kbGVyX3QpLTEpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2VuZGlmCi0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2FzbS1nZW5lcmljL3NvY2tldC5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2FzbS1nZW5lcmljL3NvY2tldC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiMzg3NmUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vYXNtLWdlbmVyaWMvc29ja2V0LmgKQEAgLTAsMCArMSw4MSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX0FTTV9HRU5FUklDX1NPQ0tFVF9ICisjZGVmaW5lIF9fQVNNX0dFTkVSSUNfU09DS0VUX0gKKyNpbmNsdWRlIDxhc20vc29ja2lvcy5oPgorI2RlZmluZSBTT0xfU09DS0VUIDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFNPX0RFQlVHIDEKKyNkZWZpbmUgU09fUkVVU0VBRERSIDIKKyNkZWZpbmUgU09fVFlQRSAzCisjZGVmaW5lIFNPX0VSUk9SIDQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFNPX0RPTlRST1VURSA1CisjZGVmaW5lIFNPX0JST0FEQ0FTVCA2CisjZGVmaW5lIFNPX1NOREJVRiA3CisjZGVmaW5lIFNPX1JDVkJVRiA4CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBTT19TTkRCVUZGT1JDRSAzMgorI2RlZmluZSBTT19SQ1ZCVUZGT1JDRSAzMworI2RlZmluZSBTT19LRUVQQUxJVkUgOQorI2RlZmluZSBTT19PT0JJTkxJTkUgMTAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFNPX05PX0NIRUNLIDExCisjZGVmaW5lIFNPX1BSSU9SSVRZIDEyCisjZGVmaW5lIFNPX0xJTkdFUiAxMworI2RlZmluZSBTT19CU0RDT01QQVQgMTQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjaWZuZGVmIFNPX1BBU1NDUkVECisjZGVmaW5lIFNPX1BBU1NDUkVEIDE2CisjZGVmaW5lIFNPX1BFRVJDUkVEIDE3CisjZGVmaW5lIFNPX1JDVkxPV0FUIDE4CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBTT19TTkRMT1dBVCAxOQorI2RlZmluZSBTT19SQ1ZUSU1FTyAyMAorI2RlZmluZSBTT19TTkRUSU1FTyAyMQorI2VuZGlmCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBTT19TRUNVUklUWV9BVVRIRU5USUNBVElPTiAyMgorI2RlZmluZSBTT19TRUNVUklUWV9FTkNSWVBUSU9OX1RSQU5TUE9SVCAyMworI2RlZmluZSBTT19TRUNVUklUWV9FTkNSWVBUSU9OX05FVFdPUksgMjQKKyNkZWZpbmUgU09fQklORFRPREVWSUNFIDI1CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBTT19BVFRBQ0hfRklMVEVSIDI2CisjZGVmaW5lIFNPX0RFVEFDSF9GSUxURVIgMjcKKyNkZWZpbmUgU09fUEVFUk5BTUUgMjgKKyNkZWZpbmUgU09fVElNRVNUQU1QIDI5CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBTQ01fVElNRVNUQU1QIFNPX1RJTUVTVEFNUAorI2RlZmluZSBTT19BQ0NFUFRDT05OIDMwCisjZGVmaW5lIFNPX1BFRVJTRUMgMzEKKyNkZWZpbmUgU09fUEFTU1NFQyAzNAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgU09fVElNRVNUQU1QTlMgMzUKKyNkZWZpbmUgU0NNX1RJTUVTVEFNUE5TIFNPX1RJTUVTVEFNUE5TCisjZGVmaW5lIFNPX01BUksgMzYKKyNkZWZpbmUgU09fVElNRVNUQU1QSU5HIDM3CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBTQ01fVElNRVNUQU1QSU5HIFNPX1RJTUVTVEFNUElORworI2RlZmluZSBTT19QUk9UT0NPTCAzOAorI2RlZmluZSBTT19ET01BSU4gMzkKKyNkZWZpbmUgU09fUlhRX09WRkwgNDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFNPX1dJRklfU1RBVFVTIDQxCisjZGVmaW5lIFNDTV9XSUZJX1NUQVRVUyBTT19XSUZJX1NUQVRVUworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vYXNtLWdlbmVyaWMvc3dhYi5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2FzbS1nZW5lcmljL3N3YWIuaAppbmRleCA1OTI5MjZkLi44Mjc5MzMyIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vYXNtLWdlbmVyaWMvc3dhYi5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9hc20tZ2VuZXJpYy9zd2FiLmgKQEAgLTcsMTcgKzcsMjMgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9BU01fR0VORVJJQ19TV0FCX0gKICNkZWZpbmUgX0FTTV9HRU5FUklDX1NXQUJfSAotCiAjaW5jbHVkZSA8YXNtL2JpdHNwZXJsb25nLmg+Ci0KICNpZiBfX0JJVFNfUEVSX0xPTkcgPT0gMzIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgKCFkZWZpbmVkKF9fU1RSSUNUX0FOU0lfXykgfHwgZGVmaW5lZChfX0tFUk5FTF9fKSkKICNkZWZpbmUgX19TV0FCXzY0X1RIUlVfMzJfXwogI2VuZGlmCiAjZW5kaWYKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2FzbS1nZW5lcmljL3RsYi5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2FzbS1nZW5lcmljL3RsYi5oCmluZGV4IGRjMWU3OWYuLjY2NjkzODggMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9hc20tZ2VuZXJpYy90bGIuaAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vYXNtLWdlbmVyaWMvdGxiLmgKQEAgLTcsMzEgKzcsMzkgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9BU01fR0VORVJJQ19fVExCX0gKICNkZWZpbmUgX0FTTV9HRU5FUklDX19UTEJfSAotCiAjaW5jbHVkZSA8bGludXgvc3dhcC5oPgogI2luY2x1ZGUgPGFzbS9wZ2FsbG9jLmg+CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgotCiAjZGVmaW5lIEZSRUVfUFRFX05SIDEKICNkZWZpbmUgdGxiX2Zhc3RfbW9kZSh0bGIpIDEKLQogc3RydWN0IG1tdV9nYXRoZXIgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgbW1fc3RydWN0ICptbTsKICB1bnNpZ25lZCBpbnQgbnI7CiAgdW5zaWduZWQgaW50IG5lZWRfZmx1c2g7CiAgdW5zaWduZWQgaW50IGZ1bGxtbTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IHBhZ2UgKiBwYWdlc1tGUkVFX1BURV9OUl07CiB9OwotCiAjZGVmaW5lIHRsYl9yZW1vdmVfdGxiX2VudHJ5KHRsYiwgcHRlcCwgYWRkcmVzcykgICBkbyB7ICAgdGxiLT5uZWVkX2ZsdXNoID0gMTsgICBfX3RsYl9yZW1vdmVfdGxiX2VudHJ5KHRsYiwgcHRlcCwgYWRkcmVzcyk7ICAgfSB3aGlsZSAoMCkKICNkZWZpbmUgcHRlX2ZyZWVfdGxiKHRsYiwgcHRlcCkgICBkbyB7ICAgdGxiLT5uZWVkX2ZsdXNoID0gMTsgICBfX3B0ZV9mcmVlX3RsYih0bGIsIHB0ZXApOyAgIH0gd2hpbGUgKDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2lmbmRlZiBfX0FSQ0hfSEFTXzRMRVZFTF9IQUNLCiAjZGVmaW5lIHB1ZF9mcmVlX3RsYih0bGIsIHB1ZHApICAgZG8geyAgIHRsYi0+bmVlZF9mbHVzaCA9IDE7ICAgX19wdWRfZnJlZV90bGIodGxiLCBwdWRwKTsgICB9IHdoaWxlICgwKQogI2VuZGlmCiAjZGVmaW5lIHBtZF9mcmVlX3RsYih0bGIsIHBtZHApICAgZG8geyAgIHRsYi0+bmVlZF9mbHVzaCA9IDE7ICAgX19wbWRfZnJlZV90bGIodGxiLCBwbWRwKTsgICB9IHdoaWxlICgwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgdGxiX21pZ3JhdGVfZmluaXNoKG1tKSBkbyB7fSB3aGlsZSAoMCkKICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2FzbS1nZW5lcmljL3RvcG9sb2d5LmggYi9saWJjL2tlcm5lbC9jb21tb24vYXNtLWdlbmVyaWMvdG9wb2xvZ3kuaAppbmRleCAwODliMWYyLi43ODMzZDdkIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vYXNtLWdlbmVyaWMvdG9wb2xvZ3kuaAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vYXNtLWdlbmVyaWMvdG9wb2xvZ3kuaApAQCAtNywyOSArNywzOCBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX0FTTV9HRU5FUklDX1RPUE9MT0dZX0gKICNkZWZpbmUgX0FTTV9HRU5FUklDX1RPUE9MT0dZX0gKLQogI2lmbmRlZiBjcHVfdG9fbm9kZQogI2RlZmluZSBjcHVfdG9fbm9kZShjcHUpICgwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlbmRpZgogI2lmbmRlZiBwYXJlbnRfbm9kZQogI2RlZmluZSBwYXJlbnRfbm9kZShub2RlKSAoMCkKICNlbmRpZgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNpZm5kZWYgbm9kZV90b19jcHVtYXNrCiAjZGVmaW5lIG5vZGVfdG9fY3B1bWFzayhub2RlKSAoY3B1X29ubGluZV9tYXApCiAjZW5kaWYKICNpZm5kZWYgbm9kZV90b19maXJzdF9jcHUKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIG5vZGVfdG9fZmlyc3RfY3B1KG5vZGUpICgwKQogI2VuZGlmCiAjaWZuZGVmIHBjaWJ1c190b19ub2RlCiAjZGVmaW5lIHBjaWJ1c190b19ub2RlKG5vZGUpICgtMSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZW5kaWYKLQogI2lmbmRlZiBwY2lidXNfdG9fY3B1bWFzawogI2RlZmluZSBwY2lidXNfdG9fY3B1bWFzayhidXMpIChwY2lidXNfdG9fbm9kZShidXMpID09IC0xID8gICBDUFVfTUFTS19BTEwgOiAgIG5vZGVfdG9fY3B1bWFzayhwY2lidXNfdG9fbm9kZShidXMpKSAgICkKICNlbmRpZgotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vYXNtLWdlbmVyaWMvdWNvbnRleHQuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9hc20tZ2VuZXJpYy91Y29udGV4dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyNmQxY2MKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vYXNtLWdlbmVyaWMvdWNvbnRleHQuaApAQCAtMCwwICsxLDMwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fQVNNX0dFTkVSSUNfVUNPTlRFWFRfSAorI2RlZmluZSBfX0FTTV9HRU5FUklDX1VDT05URVhUX0gKK3N0cnVjdCB1Y29udGV4dCB7CisgdW5zaWduZWQgbG9uZyB1Y19mbGFnczsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgc3RydWN0IHVjb250ZXh0ICp1Y19saW5rOworIHN0YWNrX3QgdWNfc3RhY2s7Cisgc3RydWN0IHNpZ2NvbnRleHQgdWNfbWNvbnRleHQ7Cisgc2lnc2V0X3QgdWNfc2lnbWFzazsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCit9OworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vYXNtLWdlbmVyaWMveG9yLmggYi9saWJjL2tlcm5lbC9jb21tb24vYXNtLWdlbmVyaWMveG9yLmgKaW5kZXggNmIxZTRlOC4uN2FhYTExNyAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2FzbS1nZW5lcmljL3hvci5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9hc20tZ2VuZXJpYy94b3IuaApAQCAtNyw4ICs3LDE0IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KLQogI2RlZmluZSBYT1JfVFJZX1RFTVBMQVRFUyAgIGRvIHsgICB4b3Jfc3BlZWQoJnhvcl9ibG9ja184cmVncyk7ICAgeG9yX3NwZWVkKCZ4b3JfYmxvY2tfOHJlZ3NfcCk7ICAgeG9yX3NwZWVkKCZ4b3JfYmxvY2tfMzJyZWdzKTsgICB4b3Jfc3BlZWQoJnhvcl9ibG9ja18zMnJlZ3NfcCk7ICAgfSB3aGlsZSAoMCkKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9hLm91dC5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2Eub3V0LmgKaW5kZXggNzMyNTMwNC4uOTExMjA0NSAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2Eub3V0LmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2Eub3V0LmgKQEAgLTcsMjE0ICs3LDIxOCBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX19BX09VVF9HTlVfSF9fCiAjZGVmaW5lIF9fQV9PVVRfR05VX0hfXwotCiAjZGVmaW5lIF9fR05VX0VYRUNfTUFDUk9TX18KLQogI2lmbmRlZiBfX1NUUlVDVF9FWEVDX09WRVJSSURFX18KLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNpbmNsdWRlIDxhc20vYS5vdXQuaD4KLQogI2VuZGlmCi0KIGVudW0gbWFjaGluZV90eXBlIHsKICNpZmRlZiBNX09MRFNVTjIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTV9fT0xEU1VOMiA9IE1fT0xEU1VOMiwKICNlbHNlCiAgTV9PTERTVU4yID0gMCwKICNlbmRpZgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNpZmRlZiBNXzY4MDEwCiAgTV9fNjgwMTAgPSBNXzY4MDEwLAogI2Vsc2UKICBNXzY4MDEwID0gMSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZW5kaWYKICNpZmRlZiBNXzY4MDIwCiAgTV9fNjgwMjAgPSBNXzY4MDIwLAogI2Vsc2UKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTV82ODAyMCA9IDIsCiAjZW5kaWYKICNpZmRlZiBNX1NQQVJDCiAgTV9fU1BBUkMgPSBNX1NQQVJDLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlbHNlCiAgTV9TUEFSQyA9IDMsCiAjZW5kaWYKLQogIE1fMzg2ID0gMTAwLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBNX01JUFMxID0gMTUxLAogIE1fTUlQUzIgPSAxNTIKIH07Ci0KICNpZm5kZWYgTl9NQUdJQworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTl9NQUdJQyhleGVjKSAoKGV4ZWMpLmFfaW5mbyAmIDB4ZmZmZikKICNlbmRpZgogI2RlZmluZSBOX01BQ0hUWVBFKGV4ZWMpICgoZW51bSBtYWNoaW5lX3R5cGUpKCgoZXhlYykuYV9pbmZvID4+IDE2KSAmIDB4ZmYpKQogI2RlZmluZSBOX0ZMQUdTKGV4ZWMpICgoKGV4ZWMpLmFfaW5mbyA+PiAyNCkgJiAweGZmKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTl9TRVRfSU5GTyhleGVjLCBtYWdpYywgdHlwZSwgZmxhZ3MpICAgKChleGVjKS5hX2luZm8gPSAoKG1hZ2ljKSAmIDB4ZmZmZikgICB8ICgoKGludCkodHlwZSkgJiAweGZmKSA8PCAxNikgICB8ICgoKGZsYWdzKSAmIDB4ZmYpIDw8IDI0KSkKICNkZWZpbmUgTl9TRVRfTUFHSUMoZXhlYywgbWFnaWMpICAgKChleGVjKS5hX2luZm8gPSAoKChleGVjKS5hX2luZm8gJiAweGZmZmYwMDAwKSB8ICgobWFnaWMpICYgMHhmZmZmKSkpCi0KICNkZWZpbmUgTl9TRVRfTUFDSFRZUEUoZXhlYywgbWFjaHR5cGUpICAgKChleGVjKS5hX2luZm8gPSAgICgoZXhlYykuYV9pbmZvJjB4ZmYwMGZmZmYpIHwgKCgoKGludCkobWFjaHR5cGUpKSYweGZmKSA8PCAxNikpCi0KICNkZWZpbmUgTl9TRVRfRkxBR1MoZXhlYywgZmxhZ3MpICAgKChleGVjKS5hX2luZm8gPSAgICgoZXhlYykuYV9pbmZvJjB4MDBmZmZmZmYpIHwgKCgoZmxhZ3MpICYgMHhmZikgPDwgMjQpKQotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBPTUFHSUMgMDQwNwotCiAjZGVmaW5lIE5NQUdJQyAwNDEwCi0KICNkZWZpbmUgWk1BR0lDIDA0MTMKLQogI2RlZmluZSBRTUFHSUMgMDMxNAotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBDTUFHSUMgMDQyMQotCiAjaWZuZGVmIE5fQkFETUFHCiAjZGVmaW5lIE5fQkFETUFHKHgpIChOX01BR0lDKHgpICE9IE9NQUdJQyAgICYmIE5fTUFHSUMoeCkgIT0gTk1BR0lDICAgJiYgTl9NQUdJQyh4KSAhPSBaTUFHSUMgICAmJiBOX01BR0lDKHgpICE9IFFNQUdJQykKICNlbmRpZgotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfTl9IRFJPRkYoeCkgKDEwMjQgLSBzaXplb2YgKHN0cnVjdCBleGVjKSkKLQogI2lmbmRlZiBOX1RYVE9GRgogI2RlZmluZSBOX1RYVE9GRih4KSAgIChOX01BR0lDKHgpID09IFpNQUdJQyA/IF9OX0hEUk9GRigoeCkpICsgc2l6ZW9mIChzdHJ1Y3QgZXhlYykgOiAgIChOX01BR0lDKHgpID09IFFNQUdJQyA/IDAgOiBzaXplb2YgKHN0cnVjdCBleGVjKSkpCiAjZW5kaWYKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNpZm5kZWYgTl9EQVRPRkYKICNkZWZpbmUgTl9EQVRPRkYoeCkgKE5fVFhUT0ZGKHgpICsgKHgpLmFfdGV4dCkKICNlbmRpZgotCiAjaWZuZGVmIE5fVFJFTE9GRgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTl9UUkVMT0ZGKHgpIChOX0RBVE9GRih4KSArICh4KS5hX2RhdGEpCiAjZW5kaWYKLQogI2lmbmRlZiBOX0RSRUxPRkYKICNkZWZpbmUgTl9EUkVMT0ZGKHgpIChOX1RSRUxPRkYoeCkgKyBOX1RSU0laRSh4KSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZW5kaWYKLQogI2lmbmRlZiBOX1NZTU9GRgogI2RlZmluZSBOX1NZTU9GRih4KSAoTl9EUkVMT0ZGKHgpICsgTl9EUlNJWkUoeCkpCiAjZW5kaWYKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNpZm5kZWYgTl9TVFJPRkYKICNkZWZpbmUgTl9TVFJPRkYoeCkgKE5fU1lNT0ZGKHgpICsgTl9TWU1TSVpFKHgpKQogI2VuZGlmCi0KICNpZm5kZWYgTl9UWFRBRERSCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBOX1RYVEFERFIoeCkgKE5fTUFHSUMoeCkgPT0gUU1BR0lDID8gUEFHRV9TSVpFIDogMCkKICNlbmRpZgotCiAjaWYgZGVmaW5lZCh2YXgpIHx8IGRlZmluZWQoaHAzMDApIHx8IGRlZmluZWQocHlyKQogI2RlZmluZSBTRUdNRU5UX1NJWkUgcGFnZV9zaXplCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2VuZGlmCiAjaWZkZWYgc29ueQogI2RlZmluZSBTRUdNRU5UX1NJWkUgMHgyMDAwCiAjZW5kaWYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjaWZkZWYgaXM2OGsKICNkZWZpbmUgU0VHTUVOVF9TSVpFIDB4MjAwMDAKICNlbmRpZgogI2lmIGRlZmluZWQobTY4aykgJiYgZGVmaW5lZChQT1JUQVIpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQUdFX1NJWkUgMHg0MDAKICNkZWZpbmUgU0VHTUVOVF9TSVpFIFBBR0VfU0laRQogI2VuZGlmCi0KICNpZmRlZiBsaW51eAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNpbmNsdWRlIDxhc20vcGFnZS5oPgogI2lmIGRlZmluZWQoX19pMzg2X18pIHx8IGRlZmluZWQoX19tYzY4MDAwX18pCiAjZGVmaW5lIFNFR01FTlRfU0laRSAxMDI0CiAjZWxzZQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNpZm5kZWYgU0VHTUVOVF9TSVpFCiAjZGVmaW5lIFNFR01FTlRfU0laRSBQQUdFX1NJWkUKICNlbmRpZgogI2VuZGlmCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2VuZGlmCi0KICNkZWZpbmUgX05fU0VHTUVOVF9ST1VORCh4KSBBTElHTih4LCBTRUdNRU5UX1NJWkUpCi0KICNkZWZpbmUgX05fVFhURU5EQUREUih4KSAoTl9UWFRBRERSKHgpKyh4KS5hX3RleHQpCi0KICNpZm5kZWYgTl9EQVRBRERSCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBOX0RBVEFERFIoeCkgICAoTl9NQUdJQyh4KT09T01BR0lDPyAoX05fVFhURU5EQUREUih4KSkgICA6IChfTl9TRUdNRU5UX1JPVU5EIChfTl9UWFRFTkRBRERSKHgpKSkpCiAjZW5kaWYKLQogI2lmbmRlZiBOX0JTU0FERFIKICNkZWZpbmUgTl9CU1NBRERSKHgpIChOX0RBVEFERFIoeCkgKyAoeCkuYV9kYXRhKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlbmRpZgotCiAjaWZuZGVmIE5fTkxJU1RfREVDTEFSRUQKIHN0cnVjdCBubGlzdCB7CiAgdW5pb24geworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBjaGFyICpuX25hbWU7CiAgc3RydWN0IG5saXN0ICpuX25leHQ7CiAgbG9uZyBuX3N0cng7CiAgfSBuX3VuOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBjaGFyIG5fdHlwZTsKICBjaGFyIG5fb3RoZXI7CiAgc2hvcnQgbl9kZXNjOwogIHVuc2lnbmVkIGxvbmcgbl92YWx1ZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwogI2VuZGlmCi0KICNpZm5kZWYgTl9VTkRGCiAjZGVmaW5lIE5fVU5ERiAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2VuZGlmCiAjaWZuZGVmIE5fQUJTCiAjZGVmaW5lIE5fQUJTIDIKICNlbmRpZgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNpZm5kZWYgTl9URVhUCiAjZGVmaW5lIE5fVEVYVCA0CiAjZW5kaWYKICNpZm5kZWYgTl9EQVRBCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBOX0RBVEEgNgogI2VuZGlmCiAjaWZuZGVmIE5fQlNTCiAjZGVmaW5lIE5fQlNTIDgKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZW5kaWYKICNpZm5kZWYgTl9GTgogI2RlZmluZSBOX0ZOIDE1CiAjZW5kaWYKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNpZm5kZWYgTl9FWFQKICNkZWZpbmUgTl9FWFQgMQogI2VuZGlmCiAjaWZuZGVmIE5fVFlQRQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTl9UWVBFIDAzNgogI2VuZGlmCiAjaWZuZGVmIE5fU1RBQgogI2RlZmluZSBOX1NUQUIgMDM0MAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlbmRpZgotCiAjZGVmaW5lIE5fSU5EUiAweGEKLQotI2RlZmluZSBOX1NFVEEgMHgxNCAgCi0jZGVmaW5lIE5fU0VUVCAweDE2ICAKLSNkZWZpbmUgTl9TRVREIDB4MTggIAotI2RlZmluZSBOX1NFVEIgMHgxQSAgCi0KLSNkZWZpbmUgTl9TRVRWIDB4MUMgIAotCisjZGVmaW5lIE5fU0VUQSAweDE0CisjZGVmaW5lIE5fU0VUVCAweDE2CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBOX1NFVEQgMHgxOAorI2RlZmluZSBOX1NFVEIgMHgxQQorI2RlZmluZSBOX1NFVFYgMHgxQwogI2lmbmRlZiBOX1JFTE9DQVRJT05fSU5GT19ERUNMQVJFRAotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IHJlbG9jYXRpb25faW5mbwogewotCiAgaW50IHJfYWRkcmVzczsKLQogIHVuc2lnbmVkIGludCByX3N5bWJvbG51bToyNDsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBpbnQgcl9wY3JlbDoxOwotCiAgdW5zaWduZWQgaW50IHJfbGVuZ3RoOjI7Ci0KICB1bnNpZ25lZCBpbnQgcl9leHRlcm46MTsKLQogI2lmZGVmIE5TMzJLCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIHJfYnNyOjE7CiAgdW5zaWduZWQgcl9kaXNwOjE7CiAgdW5zaWduZWQgcl9wYWQ6MjsKICNlbHNlCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGludCByX3BhZDo0OwogI2VuZGlmCiB9OwogI2VuZGlmCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9hMTAyNi5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2ExMDI2LmgKaW5kZXggMmJmNjE5MC4uMWU1Y2UxYiAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2ExMDI2LmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2ExMDI2LmgKQEAgLTcsNjEgKzcsNzAgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9fTElOVVhfQTEwMjZfSAogI2RlZmluZSBfX0xJTlVYX0ExMDI2X0gKLQogI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+Ci0KICNkZWZpbmUgQTEwMjZfTUFYX0ZXX1NJWkUgKDMyKjEwMjQpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IGExMDI2aW1nIHsKICB1bnNpZ25lZCBjaGFyICpidWY7CiAgdW5zaWduZWQgaW1nX3NpemU7CiB9OwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogZW51bSBBMTAyNl9QYXRoSUQgewogIEExMDI2X1BBVEhfU1VTUEVORCwKICBBMTAyNl9QQVRIX0lOQ0FMTF9SRUNFSVZFUiwKICBBMTAyNl9QQVRIX0lOQ0FMTF9IRUFEU0VULAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBBMTAyNl9QQVRIX0lOQ0FMTF9TUEVBS0VSLAogIEExMDI2X1BBVEhfSU5DQUxMX0JULAogIEExMDI2X1BBVEhfVlJfTk9fTlNfUkVDRUlWRVIsCiAgQTEwMjZfUEFUSF9WUl9OT19OU19IRUFEU0VULAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBBMTAyNl9QQVRIX1ZSX05PX05TX1NQRUFLRVIsCiAgQTEwMjZfUEFUSF9WUl9OT19OU19CVCwKICBBMTAyNl9QQVRIX1ZSX05TX1JFQ0VJVkVSLAogIEExMDI2X1BBVEhfVlJfTlNfSEVBRFNFVCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQTEwMjZfUEFUSF9WUl9OU19TUEVBS0VSLAogIEExMDI2X1BBVEhfVlJfTlNfQlQsCiAgQTEwMjZfUEFUSF9SRUNPUkRfUkVDRUlWRVIsCiAgQTEwMjZfUEFUSF9SRUNPUkRfSEVBRFNFVCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQTEwMjZfUEFUSF9SRUNPUkRfU1BFQUtFUiwKICBBMTAyNl9QQVRIX1JFQ09SRF9CVCwKICBBMTAyNl9QQVRIX0NBTUNPUkRFUiwKICBBMTAyNl9QQVRIX0lOQ0FMTF9UVFkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwotCiBlbnVtIEExMDI2X05TX3N0YXRlcyB7CiAgQTEwMjZfTlNfU1RBVEVfQVVUTywKICBBMTAyNl9OU19TVEFURV9PRkYsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIEExMDI2X05TX1NUQVRFX0NULAogIEExMDI2X05TX1NUQVRFX0ZULAogIEExMDI2X05TX05VTV9TVEFURVMKIH07Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEExMDI2X0lPQ1RMX01BR0lDICd1JwotCiAjZGVmaW5lIEExMDI2X0JPT1RVUF9JTklUIF9JT1coQTEwMjZfSU9DVExfTUFHSUMsIDB4MDEsIHN0cnVjdCBhMTAyNmltZyAqKQogI2RlZmluZSBBMTAyNl9TRVRfQ09ORklHIF9JT1coQTEwMjZfSU9DVExfTUFHSUMsIDB4MDIsIGVudW0gQTEwMjZfUGF0aElEKQogI2RlZmluZSBBMTAyNl9TRVRfTlNfU1RBVEUgX0lPVyhBMTAyNl9JT0NUTF9NQUdJQywgMHgwMywgZW51bSBBMTAyNl9OU19zdGF0ZXMpCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEExMDI2X1NFVF9NSUNfT05PRkYgX0lPVyhBMTAyNl9JT0NUTF9NQUdJQywgMHg1MCwgdW5zaWduZWQpCiAjZGVmaW5lIEExMDI2X1NFVF9NSUNTRUxfT05PRkYgX0lPVyhBMTAyNl9JT0NUTF9NQUdJQywgMHg1MSwgdW5zaWduZWQpCiAjZGVmaW5lIEExMDI2X1JFQURfREFUQSBfSU9SKEExMDI2X0lPQ1RMX01BR0lDLCAweDUyLCB1bnNpZ25lZCkKICNkZWZpbmUgQTEwMjZfV1JJVEVfTVNHIF9JT1coQTEwMjZfSU9DVExfTUFHSUMsIDB4NTMsIHVuc2lnbmVkKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQTEwMjZfU1lOQ19DTUQgX0lPKEExMDI2X0lPQ1RMX01BR0lDLCAweDU0KQogI2RlZmluZSBBMTAyNl9TRVRfQ01EX0ZJTEUgX0lPVyhBMTAyNl9JT0NUTF9NQUdJQywgMHg1NSwgdW5zaWduZWQpCi0KICNlbmRpZgotCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvYWlvX2FiaS5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2Fpb19hYmkuaAppbmRleCBjOTJiYzhmLi4zYjg3Mzk5IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvYWlvX2FiaS5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9haW9fYWJpLmgKQEAgLTcsNTggKzcsNjAgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9fTElOVVhfX0FJT19BQklfSAogI2RlZmluZSBfX0xJTlVYX19BSU9fQUJJX0gKLQogI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KLQogdHlwZWRlZiB1bnNpZ25lZCBsb25nIGFpb19jb250ZXh0X3Q7Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBlbnVtIHsKICBJT0NCX0NNRF9QUkVBRCA9IDAsCiAgSU9DQl9DTURfUFdSSVRFID0gMSwKICBJT0NCX0NNRF9GU1lOQyA9IDIsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIElPQ0JfQ01EX0ZEU1lOQyA9IDMsCi0KICBJT0NCX0NNRF9OT09QID0gNiwKIH07Ci0KIHN0cnVjdCBpb19ldmVudCB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTY0IGRhdGE7CiAgX191NjQgb2JqOwogIF9fczY0IHJlczsKICBfX3M2NCByZXMyOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07Ci0KICNpZmRlZiBfX0xJVFRMRV9FTkRJQU4KICNkZWZpbmUgUEFEREVEKHgseSkgeCwgeQogI2VsaWYgZGVmaW5lZChfX0JJR19FTkRJQU4pCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQURERUQoeCx5KSB5LCB4CiAjZWxzZQogI2Vycm9yIGVkaXQgZm9yIHlvdXIgb2RkIGJ5dGVvcmRlci4KICNlbmRpZgotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IGlvY2IgewotCiAgX191NjQgYWlvX2RhdGE7CiAgX191MzIgUEFEREVEKGFpb19rZXksIGFpb19yZXNlcnZlZDEpOwotCiAgX191MTYgYWlvX2xpb19vcGNvZGU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fczE2IGFpb19yZXFwcmlvOwogIF9fdTMyIGFpb19maWxkZXM7Ci0KICBfX3U2NCBhaW9fYnVmOwogIF9fdTY0IGFpb19uYnl0ZXM7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fczY0IGFpb19vZmZzZXQ7Ci0KICBfX3U2NCBhaW9fcmVzZXJ2ZWQyOwogIF9fdTY0IGFpb19yZXNlcnZlZDM7CiB9OwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI3VuZGVmIElGQklHCiAjdW5kZWYgSUZMSVRUTEUKLQogI2VuZGlmCi0KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9ha204OTczLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvYWttODk3My5oCmluZGV4IDI4OTJmNzIuLjRkOTY0MGEgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9ha204OTczLmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2FrbTg5NzMuaApAQCAtNywzOSArNyw0NSBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgQUtNODk3M19ICiAjZGVmaW5lIEFLTTg5NzNfSAotCiAjaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KLQogI2RlZmluZSBBS01JTyAweEExCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEVDU19JT0NUTF9XUklURSBfSU9XKEFLTUlPLCAweDAxLCBjaGFyWzVdKQogI2RlZmluZSBFQ1NfSU9DVExfUkVBRCBfSU9XUihBS01JTywgMHgwMiwgY2hhcls1XSkKICNkZWZpbmUgRUNTX0lPQ1RMX1JFU0VUIF9JTyhBS01JTywgMHgwMykKICNkZWZpbmUgRUNTX0lPQ1RMX1NFVF9NT0RFIF9JT1coQUtNSU8sIDB4MDQsIHNob3J0KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRUNTX0lPQ1RMX0dFVERBVEEgX0lPUihBS01JTywgMHgwNSwgY2hhcltSQlVGRl9TSVpFKzFdKQogI2RlZmluZSBFQ1NfSU9DVExfU0VUX1lQUiBfSU9XKEFLTUlPLCAweDA2LCBzaG9ydFsxMl0pCiAjZGVmaW5lIEVDU19JT0NUTF9HRVRfT1BFTl9TVEFUVVMgX0lPUihBS01JTywgMHgwNywgaW50KQogI2RlZmluZSBFQ1NfSU9DVExfR0VUX0NMT1NFX1NUQVRVUyBfSU9SKEFLTUlPLCAweDA4LCBpbnQpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBFQ1NfSU9DVExfR0VUX0RFTEFZIF9JT1IoQUtNSU8sIDB4MzAsIHNob3J0KQotCiAjZGVmaW5lIEVDU19JT0NUTF9BUFBfU0VUX01PREUgX0lPVyhBS01JTywgMHgxMCwgc2hvcnQpCiAjZGVmaW5lIEVDU19JT0NUTF9BUFBfU0VUX01GTEFHIF9JT1coQUtNSU8sIDB4MTEsIHNob3J0KQogI2RlZmluZSBFQ1NfSU9DVExfQVBQX0dFVF9NRkxBRyBfSU9XKEFLTUlPLCAweDEyLCBzaG9ydCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEVDU19JT0NUTF9BUFBfU0VUX0FGTEFHIF9JT1coQUtNSU8sIDB4MTMsIHNob3J0KQogI2RlZmluZSBFQ1NfSU9DVExfQVBQX0dFVF9BRkxBRyBfSU9SKEFLTUlPLCAweDE0LCBzaG9ydCkKICNkZWZpbmUgRUNTX0lPQ1RMX0FQUF9TRVRfVEZMQUcgX0lPUihBS01JTywgMHgxNSwgc2hvcnQpCiAjZGVmaW5lIEVDU19JT0NUTF9BUFBfR0VUX1RGTEFHIF9JT1IoQUtNSU8sIDB4MTYsIHNob3J0KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRUNTX0lPQ1RMX0FQUF9SRVNFVF9QRURPTUVURVIgX0lPKEFLTUlPLCAweDE3KQogI2RlZmluZSBFQ1NfSU9DVExfQVBQX1NFVF9ERUxBWSBfSU9XKEFLTUlPLCAweDE4LCBzaG9ydCkKICNkZWZpbmUgRUNTX0lPQ1RMX0FQUF9HRVRfREVMQVkgRUNTX0lPQ1RMX0dFVF9ERUxBWQogI2RlZmluZSBFQ1NfSU9DVExfQVBQX1NFVF9NVkZMQUcgX0lPVyhBS01JTywgMHgxOSwgc2hvcnQpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBFQ1NfSU9DVExfQVBQX0dFVF9NVkZMQUcgX0lPUihBS01JTywgMHgxQSwgc2hvcnQpCi0KICNkZWZpbmUgRUNTX0lPQ1RMX1NFVF9TVEVQX0NOVCBfSU9XKEFLTUlPLCAweDIwLCBzaG9ydCkKICNlbmRpZgotCi0KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9ha204OTc1LmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvYWttODk3NS5oCmluZGV4IDE4MTVmNzUuLjMyNGM0MGQgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9ha204OTc1LmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2FrbTg5NzUuaApAQCAtNyw2NiArNyw3MyBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgQUtNODk3NV9ICiAjZGVmaW5lIEFLTTg5NzVfSAotCiAjaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KLQogI2RlZmluZSBBSzg5NzVfTU9ERV9TTkdfTUVBU1VSRSAweDAxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBSzg5NzVfTU9ERV9TRUxGX1RFU1QgMHgwOAogI2RlZmluZSBBSzg5NzVfTU9ERV9GVVNFX0FDQ0VTUyAweDBGCiAjZGVmaW5lIEFLODk3NV9NT0RFX1BPV0VSX0RPV04gMHgwMAotCi0jZGVmaW5lIFJCVUZGX1NJWkUgOCAgCi0KKyNkZWZpbmUgUkJVRkZfU0laRSA4CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBSzg5NzVfUkVHX1dJQSAweDAwCiAjZGVmaW5lIEFLODk3NV9SRUdfSU5GTyAweDAxCiAjZGVmaW5lIEFLODk3NV9SRUdfU1QxIDB4MDIKICNkZWZpbmUgQUs4OTc1X1JFR19IWEwgMHgwMworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQUs4OTc1X1JFR19IWEggMHgwNAogI2RlZmluZSBBSzg5NzVfUkVHX0hZTCAweDA1CiAjZGVmaW5lIEFLODk3NV9SRUdfSFlIIDB4MDYKICNkZWZpbmUgQUs4OTc1X1JFR19IWkwgMHgwNworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQUs4OTc1X1JFR19IWkggMHgwOAogI2RlZmluZSBBSzg5NzVfUkVHX1NUMiAweDA5CiAjZGVmaW5lIEFLODk3NV9SRUdfQ05UTCAweDBBCiAjZGVmaW5lIEFLODk3NV9SRUdfUlNWIDB4MEIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFLODk3NV9SRUdfQVNUQyAweDBDCiAjZGVmaW5lIEFLODk3NV9SRUdfVFMxIDB4MEQKICNkZWZpbmUgQUs4OTc1X1JFR19UUzIgMHgwRQogI2RlZmluZSBBSzg5NzVfUkVHX0kyQ0RJUyAweDBGCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFLODk3NV9GVVNFX0FTQVggMHgxMAogI2RlZmluZSBBSzg5NzVfRlVTRV9BU0FZIDB4MTEKICNkZWZpbmUgQUs4OTc1X0ZVU0VfQVNBWiAweDEyCi0KICNkZWZpbmUgQUtNSU8gMHhBMQotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBFQ1NfSU9DVExfV1JJVEUgX0lPVyhBS01JTywgMHgwMiwgY2hhcls1XSkKICNkZWZpbmUgRUNTX0lPQ1RMX1JFQUQgX0lPV1IoQUtNSU8sIDB4MDMsIGNoYXJbNV0pCiAjZGVmaW5lIEVDU19JT0NUTF9HRVREQVRBIF9JT1IoQUtNSU8sIDB4MDgsIGNoYXJbUkJVRkZfU0laRV0pCiAjZGVmaW5lIEVDU19JT0NUTF9TRVRfWVBSIF9JT1coQUtNSU8sIDB4MEMsIHNob3J0WzEyXSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEVDU19JT0NUTF9HRVRfT1BFTl9TVEFUVVMgX0lPUihBS01JTywgMHgwRCwgaW50KQogI2RlZmluZSBFQ1NfSU9DVExfR0VUX0NMT1NFX1NUQVRVUyBfSU9SKEFLTUlPLCAweDBFLCBpbnQpCiAjZGVmaW5lIEVDU19JT0NUTF9HRVRfREVMQVkgX0lPUihBS01JTywgMHgzMCwgc2hvcnQpCi0KICNkZWZpbmUgRUNTX0lPQ1RMX0FQUF9TRVRfTUZMQUcgX0lPVyhBS01JTywgMHgxMSwgc2hvcnQpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBFQ1NfSU9DVExfQVBQX0dFVF9NRkxBRyBfSU9XKEFLTUlPLCAweDEyLCBzaG9ydCkKICNkZWZpbmUgRUNTX0lPQ1RMX0FQUF9TRVRfQUZMQUcgX0lPVyhBS01JTywgMHgxMywgc2hvcnQpCiAjZGVmaW5lIEVDU19JT0NUTF9BUFBfR0VUX0FGTEFHIF9JT1IoQUtNSU8sIDB4MTQsIHNob3J0KQogI2RlZmluZSBFQ1NfSU9DVExfQVBQX1NFVF9ERUxBWSBfSU9XKEFLTUlPLCAweDE4LCBzaG9ydCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEVDU19JT0NUTF9BUFBfR0VUX0RFTEFZIEVDU19JT0NUTF9HRVRfREVMQVkKLSNkZWZpbmUgRUNTX0lPQ1RMX0FQUF9TRVRfTVZGTEFHIF9JT1coQUtNSU8sIDB4MTksIHNob3J0KSAgCi0jZGVmaW5lIEVDU19JT0NUTF9BUFBfR0VUX01WRkxBRyBfSU9SKEFLTUlPLCAweDFBLCBzaG9ydCkgIAorI2RlZmluZSBFQ1NfSU9DVExfQVBQX1NFVF9NVkZMQUcgX0lPVyhBS01JTywgMHgxOSwgc2hvcnQpCisjZGVmaW5lIEVDU19JT0NUTF9BUFBfR0VUX01WRkxBRyBfSU9SKEFLTUlPLCAweDFBLCBzaG9ydCkKICNkZWZpbmUgRUNTX0lPQ1RMX0FQUF9TRVRfVEZMQUcgX0lPUihBS01JTywgMHgxNSwgc2hvcnQpCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEVDU19JTlRSIDE0MAotCiBzdHJ1Y3QgYWttODk3NV9wbGF0Zm9ybV9kYXRhIHsKICBpbnQgaW50cjsKIH07Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZW5kaWYKLQpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2FrbTg5NzYuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9ha204OTc2LmgKaW5kZXggYTVhYTY4ZS4uZTE5MTc5ZSAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2FrbTg5NzYuaAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvYWttODk3Ni5oCkBAIC03LDgzICs3LDkwIEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBBS004OTc2X0gKICNkZWZpbmUgQUtNODk3Nl9ICi0KICNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgotCi0jZGVmaW5lIEFLRUNTX01PREVfTUVBU1VSRSAweDAwICAKLQotI2RlZmluZSBBS0VDU19NT0RFX1BGRkQgMHgwMSAgCi0jZGVmaW5lIEFLRUNTX01PREVfRTJQX1JFQUQgMHgwMiAgCi0jZGVmaW5lIEFLRUNTX01PREVfUE9XRVJET1dOIDB4MDMgIAotCi0jZGVmaW5lIEFLRUNTX01PREVfTUVBU1VSRV9TTkcgMHgxMCAgCi0jZGVmaW5lIEFLRUNTX01PREVfTUVBU1VSRV9TRVEgMHgxMSAgCi0KLSNkZWZpbmUgQ1NQRUNfQUlOVCAweDAxICAKLSNkZWZpbmUgQ1NQRUNfU05HX05VTSAweDAxICAKLSNkZWZpbmUgQ1NQRUNfU0VRX05VTSAweDAyICAKLSNkZWZpbmUgQ1NQRUNfU0ZSUV8zMiAweDAwICAKLSNkZWZpbmUgQ1NQRUNfU0ZSUV82NCAweDAxICAKLSNkZWZpbmUgQ1NQRUNfTUNTIDB4MDcgIAotI2RlZmluZSBDU1BFQ19NS1MgMHgwMSAgCi0jZGVmaW5lIENTUEVDX0lOVEVOIDB4MDEgIAotCi0jZGVmaW5lIFJCVUZGX1NJWkUgMzEgIAotI2RlZmluZSBNQVhfQ0FMSV9TSVpFIDB4MTAwMFUgIAotCisjZGVmaW5lIEFLRUNTX01PREVfTUVBU1VSRSAweDAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBBS0VDU19NT0RFX1BGRkQgMHgwMQorI2RlZmluZSBBS0VDU19NT0RFX0UyUF9SRUFEIDB4MDIKKyNkZWZpbmUgQUtFQ1NfTU9ERV9QT1dFUkRPV04gMHgwMworI2RlZmluZSBBS0VDU19NT0RFX01FQVNVUkVfU05HIDB4MTAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEFLRUNTX01PREVfTUVBU1VSRV9TRVEgMHgxMQorI2RlZmluZSBDU1BFQ19BSU5UIDB4MDEKKyNkZWZpbmUgQ1NQRUNfU05HX05VTSAweDAxCisjZGVmaW5lIENTUEVDX1NFUV9OVU0gMHgwMgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgQ1NQRUNfU0ZSUV8zMiAweDAwCisjZGVmaW5lIENTUEVDX1NGUlFfNjQgMHgwMQorI2RlZmluZSBDU1BFQ19NQ1MgMHgwNworI2RlZmluZSBDU1BFQ19NS1MgMHgwMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgQ1NQRUNfSU5URU4gMHgwMQorI2RlZmluZSBSQlVGRl9TSVpFIDMxCisjZGVmaW5lIE1BWF9DQUxJX1NJWkUgMHgxMDAwVQogI2RlZmluZSBBS0VDU19SRUdfU1QgMHhDMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQUtFQ1NfUkVHX1RNUFMgMHhDMQogI2RlZmluZSBBS0VDU19SRUdfTVMxIDB4RTAKICNkZWZpbmUgQUtFQ1NfUkVHX01TMiAweEUxCiAjZGVmaW5lIEFLRUNTX1JFR19NUzMgMHhFMgotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBS01JTyAweEExCi0KICNkZWZpbmUgRUNTX0lPQ1RMX0lOSVQgX0lPKEFLTUlPLCAweDAxKQogI2RlZmluZSBFQ1NfSU9DVExfV1JJVEUgX0lPVyhBS01JTywgMHgwMiwgY2hhcls1XSkKICNkZWZpbmUgRUNTX0lPQ1RMX1JFQUQgX0lPV1IoQUtNSU8sIDB4MDMsIGNoYXJbNV0pCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBFQ1NfSU9DVExfUkVTRVQgX0lPKEFLTUlPLCAweDA0KQogI2RlZmluZSBFQ1NfSU9DVExfSU5UX1NUQVRVUyBfSU8oQUtNSU8sIDB4MDUpCiAjZGVmaW5lIEVDU19JT0NUTF9GRkRfU1RBVFVTIF9JTyhBS01JTywgMHgwNikKICNkZWZpbmUgRUNTX0lPQ1RMX1NFVF9NT0RFIF9JT1coQUtNSU8sIDB4MDcsIHNob3J0KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRUNTX0lPQ1RMX0dFVERBVEEgX0lPUihBS01JTywgMHgwOCwgY2hhcltSQlVGRl9TSVpFKzFdKQogI2RlZmluZSBFQ1NfSU9DVExfR0VUX05VTUZSUSBfSU9SKEFLTUlPLCAweDA5LCBjaGFyWzJdKQogI2RlZmluZSBFQ1NfSU9DVExfU0VUX1BFUlNUIF9JTyhBS01JTywgMHgwQSkKICNkZWZpbmUgRUNTX0lPQ1RMX1NFVF9HMFJTVCBfSU8oQUtNSU8sIDB4MEIpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBFQ1NfSU9DVExfU0VUX1lQUiBfSU9XKEFLTUlPLCAweDBDLCBzaG9ydFsxMl0pCiAjZGVmaW5lIEVDU19JT0NUTF9HRVRfT1BFTl9TVEFUVVMgX0lPUihBS01JTywgMHgwRCwgaW50KQogI2RlZmluZSBFQ1NfSU9DVExfR0VUX0NMT1NFX1NUQVRVUyBfSU9SKEFLTUlPLCAweDBFLCBpbnQpCiAjZGVmaW5lIEVDU19JT0NUTF9HRVRfQ0FMSV9EQVRBIF9JT1IoQUtNSU8sIDB4MEYsIGNoYXJbTUFYX0NBTElfU0laRV0pCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBFQ1NfSU9DVExfR0VUX0RFTEFZIF9JT1IoQUtNSU8sIDB4MzAsIHNob3J0KQotCiAjZGVmaW5lIEVDU19JT0NUTF9BUFBfU0VUX01PREUgX0lPVyhBS01JTywgMHgxMCwgc2hvcnQpCiAjZGVmaW5lIEVDU19JT0NUTF9BUFBfU0VUX01GTEFHIF9JT1coQUtNSU8sIDB4MTEsIHNob3J0KQogI2RlZmluZSBFQ1NfSU9DVExfQVBQX0dFVF9NRkxBRyBfSU9XKEFLTUlPLCAweDEyLCBzaG9ydCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEVDU19JT0NUTF9BUFBfU0VUX0FGTEFHIF9JT1coQUtNSU8sIDB4MTMsIHNob3J0KQogI2RlZmluZSBFQ1NfSU9DVExfQVBQX0dFVF9BRkxBRyBfSU9SKEFLTUlPLCAweDE0LCBzaG9ydCkKICNkZWZpbmUgRUNTX0lPQ1RMX0FQUF9TRVRfVEZMQUcgX0lPUihBS01JTywgMHgxNSwgc2hvcnQpCiAjZGVmaW5lIEVDU19JT0NUTF9BUFBfR0VUX1RGTEFHIF9JT1IoQUtNSU8sIDB4MTYsIHNob3J0KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRUNTX0lPQ1RMX0FQUF9SRVNFVF9QRURPTUVURVIgX0lPKEFLTUlPLCAweDE3KQogI2RlZmluZSBFQ1NfSU9DVExfQVBQX1NFVF9ERUxBWSBfSU9XKEFLTUlPLCAweDE4LCBzaG9ydCkKICNkZWZpbmUgRUNTX0lPQ1RMX0FQUF9HRVRfREVMQVkgRUNTX0lPQ1RMX0dFVF9ERUxBWQotI2RlZmluZSBFQ1NfSU9DVExfQVBQX1NFVF9NVkZMQUcgX0lPVyhBS01JTywgMHgxOSwgc2hvcnQpICAKLSNkZWZpbmUgRUNTX0lPQ1RMX0FQUF9HRVRfTVZGTEFHIF9JT1IoQUtNSU8sIDB4MUEsIHNob3J0KSAgCi0KKyNkZWZpbmUgRUNTX0lPQ1RMX0FQUF9TRVRfTVZGTEFHIF9JT1coQUtNSU8sIDB4MTksIHNob3J0KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgRUNTX0lPQ1RMX0FQUF9HRVRfTVZGTEFHIF9JT1IoQUtNSU8sIDB4MUEsIHNob3J0KQogI2RlZmluZSBFQ1NfSU9DVExfU0VUX1NURVBfQ05UIF9JT1coQUtNSU8sIDB4MjAsIHNob3J0KQotCi0jZGVmaW5lIEVDU19SU1QgMTQ2ICAKLSNkZWZpbmUgRUNTX0NMS19PTiAxNTUgIAotI2RlZmluZSBFQ1NfSU5UUiAxNjEgIAotCisjZGVmaW5lIEVDU19SU1QgMTQ2CisjZGVmaW5lIEVDU19DTEtfT04gMTU1CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBFQ1NfSU5UUiAxNjEKIHN0cnVjdCBha204OTc2X3BsYXRmb3JtX2RhdGEgewogIGludCByZXNldDsKICBpbnQgY2xrX29uOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBpbnQgaW50cjsKIH07Ci0KICNlbmRpZgotCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvYW5kcm9pZF9hbGFybS5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2FuZHJvaWRfYWxhcm0uaAppbmRleCA4MDgyOGVhLi5iMDJlMzdiIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvYW5kcm9pZF9hbGFybS5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9hbmRyb2lkX2FsYXJtLmgKQEAgLTcsNDQgKzcsNDkgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9MSU5VWF9BTkRST0lEX0FMQVJNX0gKICNkZWZpbmUgX0xJTlVYX0FORFJPSURfQUxBUk1fSAotCiAjaW5jbHVkZSA8YXNtL2lvY3RsLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogdHlwZWRlZiBlbnVtIHsKLQogIEFORFJPSURfQUxBUk1fUlRDX1dBS0VVUCwKICBBTkRST0lEX0FMQVJNX1JUQywKICBBTkRST0lEX0FMQVJNX0VMQVBTRURfUkVBTFRJTUVfV0FLRVVQLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBBTkRST0lEX0FMQVJNX0VMQVBTRURfUkVBTFRJTUUsCiAgQU5EUk9JRF9BTEFSTV9TWVNURU1USU1FLAotCiAgQU5EUk9JRF9BTEFSTV9UWVBFX0NPVU5ULAotCiB9IGFuZHJvaWRfYWxhcm1fdHlwZV90OwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogdHlwZWRlZiBlbnVtIHsKICBBTkRST0lEX0FMQVJNX1JUQ19XQUtFVVBfTUFTSyA9IDFVIDw8IEFORFJPSURfQUxBUk1fUlRDX1dBS0VVUCwKICBBTkRST0lEX0FMQVJNX1JUQ19NQVNLID0gMVUgPDwgQU5EUk9JRF9BTEFSTV9SVEMsCiAgQU5EUk9JRF9BTEFSTV9FTEFQU0VEX1JFQUxUSU1FX1dBS0VVUF9NQVNLID0gMVUgPDwgQU5EUk9JRF9BTEFSTV9FTEFQU0VEX1JFQUxUSU1FX1dBS0VVUCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQU5EUk9JRF9BTEFSTV9FTEFQU0VEX1JFQUxUSU1FX01BU0sgPSAxVSA8PCBBTkRST0lEX0FMQVJNX0VMQVBTRURfUkVBTFRJTUUsCiAgQU5EUk9JRF9BTEFSTV9TWVNURU1USU1FX01BU0sgPSAxVSA8PCBBTkRST0lEX0FMQVJNX1NZU1RFTVRJTUUsCiAgQU5EUk9JRF9BTEFSTV9USU1FX0NIQU5HRV9NQVNLID0gMVUgPDwgMTYKIH0gYW5kcm9pZF9hbGFybV9yZXR1cm5fZmxhZ3NfdDsKLQotI2RlZmluZSBBTkRST0lEX0FMQVJNX0NMRUFSKHR5cGUpIF9JTygnYScsIDAgfCAoKHR5cGUpIDw8IDQpKSAKLSNkZWZpbmUgQU5EUk9JRF9BTEFSTV9XQUlUIF9JTygnYScsIDEpIAotI2RlZmluZSBBTkRST0lEX0FMQVJNX1NFVCh0eXBlKSBfSU9XKCdhJywgMiB8ICgodHlwZSkgPDwgNCksIHN0cnVjdCB0aW1lc3BlYykgCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBBTkRST0lEX0FMQVJNX0NMRUFSKHR5cGUpIF9JTygnYScsIDAgfCAoKHR5cGUpIDw8IDQpKQorI2RlZmluZSBBTkRST0lEX0FMQVJNX1dBSVQgX0lPKCdhJywgMSkKKyNkZWZpbmUgQU5EUk9JRF9BTEFSTV9TRVQodHlwZSkgX0lPVygnYScsIDIgfCAoKHR5cGUpIDw8IDQpLCBzdHJ1Y3QgdGltZXNwZWMpCiAjZGVmaW5lIEFORFJPSURfQUxBUk1fU0VUX0FORF9XQUlUKHR5cGUpIF9JT1coJ2EnLCAzIHwgKCh0eXBlKSA8PCA0KSwgc3RydWN0IHRpbWVzcGVjKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQU5EUk9JRF9BTEFSTV9HRVRfVElNRSh0eXBlKSBfSU9XKCdhJywgNCB8ICgodHlwZSkgPDwgNCksIHN0cnVjdCB0aW1lc3BlYykKICNkZWZpbmUgQU5EUk9JRF9BTEFSTV9TRVRfUlRDIF9JT1coJ2EnLCA1LCBzdHJ1Y3QgdGltZXNwZWMpCiAjZGVmaW5lIEFORFJPSURfQUxBUk1fU0VUX1RJTUVaT05FIF9JT1coJ2EnLCA2LCBzdHJ1Y3QgdGltZXpvbmUpCi0KICNkZWZpbmUgQU5EUk9JRF9BTEFSTV9CQVNFX0NNRChjbWQpIChjbWQgJiB+KF9JT0MoMCwgMCwgMHhmMCwgMCkpKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQU5EUk9JRF9BTEFSTV9JT0NUTF9UT19UWVBFKGNtZCkgKF9JT0NfTlIoY21kKSA+PiA0KQotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9hbmRyb2lkX3BtZW0uaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9hbmRyb2lkX3BtZW0uaAppbmRleCBiZTBiMzQyLi44YzYwNWU0IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvYW5kcm9pZF9wbWVtLmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2FuZHJvaWRfcG1lbS5oCkBAIC03LDQzICs3LDQzIEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfQU5EUk9JRF9QTUVNX0hfCiAjZGVmaW5lIF9BTkRST0lEX1BNRU1fSF8KLQogI2RlZmluZSBQTUVNX0lPQ1RMX01BR0lDICdwJwogI2RlZmluZSBQTUVNX0dFVF9QSFlTIF9JT1coUE1FTV9JT0NUTF9NQUdJQywgMSwgdW5zaWduZWQgaW50KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUE1FTV9NQVAgX0lPVyhQTUVNX0lPQ1RMX01BR0lDLCAyLCB1bnNpZ25lZCBpbnQpCiAjZGVmaW5lIFBNRU1fR0VUX1NJWkUgX0lPVyhQTUVNX0lPQ1RMX01BR0lDLCAzLCB1bnNpZ25lZCBpbnQpCiAjZGVmaW5lIFBNRU1fVU5NQVAgX0lPVyhQTUVNX0lPQ1RMX01BR0lDLCA0LCB1bnNpZ25lZCBpbnQpCi0KICNkZWZpbmUgUE1FTV9BTExPQ0FURSBfSU9XKFBNRU1fSU9DVExfTUFHSUMsIDUsIHVuc2lnbmVkIGludCkKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUE1FTV9DT05ORUNUIF9JT1coUE1FTV9JT0NUTF9NQUdJQywgNiwgdW5zaWduZWQgaW50KQotCiAjZGVmaW5lIFBNRU1fR0VUX1RPVEFMX1NJWkUgX0lPVyhQTUVNX0lPQ1RMX01BR0lDLCA3LCB1bnNpZ25lZCBpbnQpCiAjZGVmaW5lIFBNRU1fQ0FDSEVfRkxVU0ggX0lPVyhQTUVNX0lPQ1RMX01BR0lDLCA4LCB1bnNpZ25lZCBpbnQpCi0KIHN0cnVjdCBhbmRyb2lkX3BtZW1fcGxhdGZvcm1fZGF0YQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHsKICBjb25zdCBjaGFyKiBuYW1lOwotCiAgdW5zaWduZWQgbG9uZyBzdGFydDsKLQogIHVuc2lnbmVkIGxvbmcgc2l6ZTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBub19hbGxvY2F0b3I7Ci0KICB1bnNpZ25lZCBjYWNoZWQ7Ci0KICB1bnNpZ25lZCBidWZmZXJlZDsKIH07Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgcG1lbV9yZWdpb24gewogIHVuc2lnbmVkIGxvbmcgb2Zmc2V0OwogIHVuc2lnbmVkIGxvbmcgbGVuOwogfTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlbmRpZgotCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvYW5kcm9pZF9wb3dlci5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2FuZHJvaWRfcG93ZXIuaAppbmRleCAyZTkwMzIxLi45NDZkZDBiIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvYW5kcm9pZF9wb3dlci5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9hbmRyb2lkX3Bvd2VyLmgKQEAgLTcsNDkgKzcsNTggQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9MSU5VWF9BTkRST0lEX1BPV0VSX0gKICNkZWZpbmUgX0xJTlVYX0FORFJPSURfUE9XRVJfSAotCiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgotCiB0eXBlZGVmIHN0cnVjdAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHsKICBzdHJ1Y3QgbGlzdF9oZWFkIGxpbms7CiAgaW50IGxvY2tfY291bnQ7CiAgaW50IGZsYWdzOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBjb25zdCBjaGFyICpuYW1lOwogIGludCBleHBpcmVzOwogfSBhbmRyb2lkX3N1c3BlbmRfbG9ja190OwotCiAjZGVmaW5lIEFORFJPSURfU1VTUEVORF9MT0NLX0ZMQUdfQ09VTlRFRCAoMVUgPDwgMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFORFJPSURfU1VTUEVORF9MT0NLX0ZMQUdfVVNFUl9SRUFEQUJMRSAoMVUgPDwgMSkKICNkZWZpbmUgQU5EUk9JRF9TVVNQRU5EX0xPQ0tfRkxBR19VU0VSX1NFVCAoMVUgPDwgMikKICNkZWZpbmUgQU5EUk9JRF9TVVNQRU5EX0xPQ0tfRkxBR19VU0VSX0NMRUFSICgxVSA8PCAzKQogI2RlZmluZSBBTkRST0lEX1NVU1BFTkRfTE9DS19GTEFHX1VTRVJfSU5DICgxVSA8PCA0KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQU5EUk9JRF9TVVNQRU5EX0xPQ0tfRkxBR19VU0VSX0RFQyAoMVUgPDwgNSkKICNkZWZpbmUgQU5EUk9JRF9TVVNQRU5EX0xPQ0tfRkxBR19VU0VSX1ZJU0lCTEVfTUFTSyAoMHgxZlUgPDwgMSkKICNkZWZpbmUgQU5EUk9JRF9TVVNQRU5EX0xPQ0tfQVVUT19FWFBJUkUgKDFVIDw8IDYpCi0KIHR5cGVkZWYgc3RydWN0IGFuZHJvaWRfZWFybHlfc3VzcGVuZCBhbmRyb2lkX2Vhcmx5X3N1c3BlbmRfdDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgYW5kcm9pZF9lYXJseV9zdXNwZW5kCiB7CiAgc3RydWN0IGxpc3RfaGVhZCBsaW5rOwogIGludCBsZXZlbDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdm9pZCAoKnN1c3BlbmQpKGFuZHJvaWRfZWFybHlfc3VzcGVuZF90ICpoKTsKICB2b2lkICgqcmVzdW1lKShhbmRyb2lkX2Vhcmx5X3N1c3BlbmRfdCAqaCk7CiB9OwotCiB0eXBlZGVmIGVudW0geworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBBTkRST0lEX0NIQVJHSU5HX1NUQVRFX1VOS05PV04sCiAgQU5EUk9JRF9DSEFSR0lOR19TVEFURV9ESVNDSEFSR0UsCiAgQU5EUk9JRF9DSEFSR0lOR19TVEFURV9NQUlOVEFJTiwKICBBTkRST0lEX0NIQVJHSU5HX1NUQVRFX1NMT1csCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIEFORFJPSURfQ0hBUkdJTkdfU1RBVEVfTk9STUFMLAogIEFORFJPSURfQ0hBUkdJTkdfU1RBVEVfRkFTVCwKICBBTkRST0lEX0NIQVJHSU5HX1NUQVRFX09WRVJIRUFUCiB9IGFuZHJvaWRfY2hhcmdpbmdfc3RhdGVfdDsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlbmRpZgotCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvYXBtX2Jpb3MuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9hcG1fYmlvcy5oCmluZGV4IGQzMmI0YWEuLjY0ZTJjMDYgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9hcG1fYmlvcy5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9hcG1fYmlvcy5oCkBAIC03LDg4ICs3LDEwMCBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX0xJTlVYX0FQTV9ICiAjZGVmaW5lIF9MSU5VWF9BUE1fSAotCiB0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGFwbV9ldmVudF90OwogdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBhcG1fZXZlbnRpbmZvX3Q7Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFQTV9TVEFURV9SRUFEWSAweDAwMDAKICNkZWZpbmUgQVBNX1NUQVRFX1NUQU5EQlkgMHgwMDAxCiAjZGVmaW5lIEFQTV9TVEFURV9TVVNQRU5EIDB4MDAwMgogI2RlZmluZSBBUE1fU1RBVEVfT0ZGIDB4MDAwMworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQVBNX1NUQVRFX0JVU1kgMHgwMDA0CiAjZGVmaW5lIEFQTV9TVEFURV9SRUpFQ1QgMHgwMDA1CiAjZGVmaW5lIEFQTV9TVEFURV9PRU1fU1lTIDB4MDAyMAogI2RlZmluZSBBUE1fU1RBVEVfT0VNX0RFViAweDAwNDAKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQVBNX1NUQVRFX0RJU0FCTEUgMHgwMDAwCiAjZGVmaW5lIEFQTV9TVEFURV9FTkFCTEUgMHgwMDAxCi0KICNkZWZpbmUgQVBNX1NUQVRFX0RJU0VOR0FHRSAweDAwMDAKICNkZWZpbmUgQVBNX1NUQVRFX0VOR0FHRSAweDAwMDEKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQVBNX1NZU19TVEFOREJZIDB4MDAwMQogI2RlZmluZSBBUE1fU1lTX1NVU1BFTkQgMHgwMDAyCiAjZGVmaW5lIEFQTV9OT1JNQUxfUkVTVU1FIDB4MDAwMwogI2RlZmluZSBBUE1fQ1JJVElDQUxfUkVTVU1FIDB4MDAwNAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQVBNX0xPV19CQVRURVJZIDB4MDAwNQogI2RlZmluZSBBUE1fUE9XRVJfU1RBVFVTX0NIQU5HRSAweDAwMDYKICNkZWZpbmUgQVBNX1VQREFURV9USU1FIDB4MDAwNwogI2RlZmluZSBBUE1fQ1JJVElDQUxfU1VTUEVORCAweDAwMDgKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFQTV9VU0VSX1NUQU5EQlkgMHgwMDA5CiAjZGVmaW5lIEFQTV9VU0VSX1NVU1BFTkQgMHgwMDBhCiAjZGVmaW5lIEFQTV9TVEFOREJZX1JFU1VNRSAweDAwMGIKICNkZWZpbmUgQVBNX0NBUEFCSUxJVFlfQ0hBTkdFIDB4MDAwYwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBUE1fU1VDQ0VTUyAweDAwCiAjZGVmaW5lIEFQTV9ESVNBQkxFRCAweDAxCiAjZGVmaW5lIEFQTV9DT05ORUNURUQgMHgwMgogI2RlZmluZSBBUE1fTk9UX0NPTk5FQ1RFRCAweDAzCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBUE1fMTZfQ09OTkVDVEVEIDB4MDUKICNkZWZpbmUgQVBNXzE2X1VOU1VQUE9SVEVEIDB4MDYKICNkZWZpbmUgQVBNXzMyX0NPTk5FQ1RFRCAweDA3CiAjZGVmaW5lIEFQTV8zMl9VTlNVUFBPUlRFRCAweDA4CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBUE1fQkFEX0RFVklDRSAweDA5CiAjZGVmaW5lIEFQTV9CQURfUEFSQU0gMHgwYQogI2RlZmluZSBBUE1fTk9UX0VOR0FHRUQgMHgwYgogI2RlZmluZSBBUE1fQkFEX0ZVTkNUSU9OIDB4MGMKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFQTV9SRVNVTUVfRElTQUJMRUQgMHgwZAogI2RlZmluZSBBUE1fTk9fRVJST1IgMHg1MwogI2RlZmluZSBBUE1fQkFEX1NUQVRFIDB4NjAKICNkZWZpbmUgQVBNX05PX0VWRU5UUyAweDgwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBUE1fTk9UX1BSRVNFTlQgMHg4NgotCiAjZGVmaW5lIEFQTV9ERVZJQ0VfQklPUyAweDAwMDAKICNkZWZpbmUgQVBNX0RFVklDRV9BTEwgMHgwMDAxCiAjZGVmaW5lIEFQTV9ERVZJQ0VfRElTUExBWSAweDAxMDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFQTV9ERVZJQ0VfU1RPUkFHRSAweDAyMDAKICNkZWZpbmUgQVBNX0RFVklDRV9QQVJBTExFTCAweDAzMDAKICNkZWZpbmUgQVBNX0RFVklDRV9TRVJJQUwgMHgwNDAwCiAjZGVmaW5lIEFQTV9ERVZJQ0VfTkVUV09SSyAweDA1MDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFQTV9ERVZJQ0VfUENNQ0lBIDB4MDYwMAogI2RlZmluZSBBUE1fREVWSUNFX0JBVFRFUlkgMHg4MDAwCiAjZGVmaW5lIEFQTV9ERVZJQ0VfT0VNIDB4ZTAwMAogI2RlZmluZSBBUE1fREVWSUNFX09MRF9BTEwgMHhmZmZmCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBUE1fREVWSUNFX0NMQVNTIDB4MDBmZgogI2RlZmluZSBBUE1fREVWSUNFX01BU0sgMHhmZjAwCi0KICNkZWZpbmUgQVBNX01BWF9CQVRURVJJRVMgMgotCiAjZGVmaW5lIEFQTV9DQVBfR0xPQkFMX1NUQU5EQlkgMHgwMDAxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBUE1fQ0FQX0dMT0JBTF9TVVNQRU5EIDB4MDAwMgotI2RlZmluZSBBUE1fQ0FQX1JFU1VNRV9TVEFOREJZX1RJTUVSIDB4MDAwNCAgCi0jZGVmaW5lIEFQTV9DQVBfUkVTVU1FX1NVU1BFTkRfVElNRVIgMHgwMDA4ICAKLSNkZWZpbmUgQVBNX0NBUF9SRVNVTUVfU1RBTkRCWV9SSU5HIDB4MDAxMCAgCi0jZGVmaW5lIEFQTV9DQVBfUkVTVU1FX1NVU1BFTkRfUklORyAweDAwMjAgIAotI2RlZmluZSBBUE1fQ0FQX1JFU1VNRV9TVEFOREJZX1BDTUNJQSAweDAwNDAgIAotI2RlZmluZSBBUE1fQ0FQX1JFU1VNRV9TVVNQRU5EX1BDTUNJQSAweDAwODAgIAotCisjZGVmaW5lIEFQTV9DQVBfUkVTVU1FX1NUQU5EQllfVElNRVIgMHgwMDA0CisjZGVmaW5lIEFQTV9DQVBfUkVTVU1FX1NVU1BFTkRfVElNRVIgMHgwMDA4CisjZGVmaW5lIEFQTV9DQVBfUkVTVU1FX1NUQU5EQllfUklORyAweDAwMTAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEFQTV9DQVBfUkVTVU1FX1NVU1BFTkRfUklORyAweDAwMjAKKyNkZWZpbmUgQVBNX0NBUF9SRVNVTUVfU1RBTkRCWV9QQ01DSUEgMHgwMDQwCisjZGVmaW5lIEFQTV9DQVBfUkVTVU1FX1NVU1BFTkRfUENNQ0lBIDB4MDA4MAogI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFQTV9JT0NfU1RBTkRCWSBfSU8oJ0EnLCAxKQogI2RlZmluZSBBUE1fSU9DX1NVU1BFTkQgX0lPKCdBJywgMikKLQogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvYXNobWVtLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvYXNobWVtLmgKaW5kZXggYTU3ZDFkZS4uZTQwMmU0ZSAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2FzaG1lbS5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9hc2htZW0uaApAQCAtNyw0MCArNyw0NCBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX0xJTlVYX0FTSE1FTV9ICiAjZGVmaW5lIF9MSU5VWF9BU0hNRU1fSAotCiAjaW5jbHVkZSA8bGludXgvbGltaXRzLmg+CiAjaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQVNITUVNX05BTUVfTEVOIDI1NgotCiAjZGVmaW5lIEFTSE1FTV9OQU1FX0RFRiAiZGV2L2FzaG1lbSIKLQogI2RlZmluZSBBU0hNRU1fTk9UX1BVUkdFRCAwCiAjZGVmaW5lIEFTSE1FTV9XQVNfUFVSR0VEIDEKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQVNITUVNX0lTX1VOUElOTkVEIDAKICNkZWZpbmUgQVNITUVNX0lTX1BJTk5FRCAxCi0KIHN0cnVjdCBhc2htZW1fcGluIHsKICBfX3UzMiBvZmZzZXQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGxlbjsKIH07Ci0KICNkZWZpbmUgX19BU0hNRU1JT0MgMHg3NwotCiAjZGVmaW5lIEFTSE1FTV9TRVRfTkFNRSBfSU9XKF9fQVNITUVNSU9DLCAxLCBjaGFyW0FTSE1FTV9OQU1FX0xFTl0pCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBU0hNRU1fR0VUX05BTUUgX0lPUihfX0FTSE1FTUlPQywgMiwgY2hhcltBU0hNRU1fTkFNRV9MRU5dKQogI2RlZmluZSBBU0hNRU1fU0VUX1NJWkUgX0lPVyhfX0FTSE1FTUlPQywgMywgc2l6ZV90KQogI2RlZmluZSBBU0hNRU1fR0VUX1NJWkUgX0lPKF9fQVNITUVNSU9DLCA0KQogI2RlZmluZSBBU0hNRU1fU0VUX1BST1RfTUFTSyBfSU9XKF9fQVNITUVNSU9DLCA1LCB1bnNpZ25lZCBsb25nKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQVNITUVNX0dFVF9QUk9UX01BU0sgX0lPKF9fQVNITUVNSU9DLCA2KQogI2RlZmluZSBBU0hNRU1fUElOIF9JT1coX19BU0hNRU1JT0MsIDcsIHN0cnVjdCBhc2htZW1fcGluKQogI2RlZmluZSBBU0hNRU1fVU5QSU4gX0lPVyhfX0FTSE1FTUlPQywgOCwgc3RydWN0IGFzaG1lbV9waW4pCiAjZGVmaW5lIEFTSE1FTV9HRVRfUElOX1NUQVRVUyBfSU8oX19BU0hNRU1JT0MsIDkpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBU0hNRU1fUFVSR0VfQUxMX0NBQ0hFUyBfSU8oX19BU0hNRU1JT0MsIDEwKQotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9hdGEuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9hdGEuaAppbmRleCA3NmFmNTc2Li5lODk3NjM4IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvYXRhLmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2F0YS5oCkBAIC03LDI1OSArNywyODcgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9fTElOVVhfQVRBX0hfXwogI2RlZmluZSBfX0xJTlVYX0FUQV9IX18KLQogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0KICNkZWZpbmUgQVRBX0RNQV9CT1VOREFSWSAweGZmZmZVTAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQVRBX0RNQV9NQVNLIDB4ZmZmZmZmZmZVTEwKLQogZW51bSB7Ci0KICBBVEFfTUFYX0RFVklDRVMgPSAyLAogIEFUQV9NQVhfUFJEID0gMjU2LAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBBVEFfU0VDVF9TSVpFID0gNTEyLAotCiAgQVRBX0lEX1dPUkRTID0gMjU2LAogIEFUQV9JRF9TRVJOT19PRlMgPSAxMCwKICBBVEFfSURfRldfUkVWX09GUyA9IDIzLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBBVEFfSURfUFJPRF9PRlMgPSAyNywKICBBVEFfSURfT0xEX1BJT19NT0RFUyA9IDUxLAogIEFUQV9JRF9GSUVMRF9WQUxJRCA9IDUzLAogIEFUQV9JRF9NV0RNQV9NT0RFUyA9IDYzLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBBVEFfSURfUElPX01PREVTID0gNjQsCiAgQVRBX0lEX0VJREVfRE1BX01JTiA9IDY1LAogIEFUQV9JRF9FSURFX1BJTyA9IDY3LAogIEFUQV9JRF9FSURFX1BJT19JT1JEWSA9IDY4LAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBBVEFfSURfVURNQV9NT0RFUyA9IDg4LAogIEFUQV9JRF9NQUpPUl9WRVIgPSA4MCwKICBBVEFfSURfUElPNCA9ICgxIDw8IDEpLAotCiAgQVRBX1BDSV9DVExfT0ZTID0gMiwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQVRBX1NFUk5PX0xFTiA9IDIwLAogIEFUQV9VRE1BMCA9ICgxIDw8IDApLAogIEFUQV9VRE1BMSA9IEFUQV9VRE1BMCB8ICgxIDw8IDEpLAogIEFUQV9VRE1BMiA9IEFUQV9VRE1BMSB8ICgxIDw8IDIpLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBBVEFfVURNQTMgPSBBVEFfVURNQTIgfCAoMSA8PCAzKSwKICBBVEFfVURNQTQgPSBBVEFfVURNQTMgfCAoMSA8PCA0KSwKICBBVEFfVURNQTUgPSBBVEFfVURNQTQgfCAoMSA8PCA1KSwKICBBVEFfVURNQTYgPSBBVEFfVURNQTUgfCAoMSA8PCA2KSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQVRBX1VETUE3ID0gQVRBX1VETUE2IHwgKDEgPDwgNyksCi0KICBBVEFfVURNQV9NQVNLXzQwQyA9IEFUQV9VRE1BMiwKLQogIEFUQV9QUkRfU1ogPSA4LAogIEFUQV9QUkRfVEJMX1NaID0gKEFUQV9NQVhfUFJEICogQVRBX1BSRF9TWiksCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIEFUQV9QUkRfRU9UID0gKDEgPDwgMzEpLAotCiAgQVRBX0RNQV9UQUJMRV9PRlMgPSA0LAogIEFUQV9ETUFfU1RBVFVTID0gMiwKICBBVEFfRE1BX0NNRCA9IDAsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIEFUQV9ETUFfV1IgPSAoMSA8PCAzKSwKICBBVEFfRE1BX1NUQVJUID0gKDEgPDwgMCksCiAgQVRBX0RNQV9JTlRSID0gKDEgPDwgMiksCiAgQVRBX0RNQV9FUlIgPSAoMSA8PCAxKSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQVRBX0RNQV9BQ1RJVkUgPSAoMSA8PCAwKSwKLQogIEFUQV9IT0IgPSAoMSA8PCA3KSwKICBBVEFfTklFTiA9ICgxIDw8IDEpLAogIEFUQV9MQkEgPSAoMSA8PCA2KSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQVRBX0RFVjEgPSAoMSA8PCA0KSwKICBBVEFfREVWSUNFX09CUyA9ICgxIDw8IDcpIHwgKDEgPDwgNSksCiAgQVRBX0RFVkNUTF9PQlMgPSAoMSA8PCAzKSwKICBBVEFfQlVTWSA9ICgxIDw8IDcpLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBBVEFfRFJEWSA9ICgxIDw8IDYpLAogIEFUQV9ERiA9ICgxIDw8IDUpLAogIEFUQV9EUlEgPSAoMSA8PCAzKSwKICBBVEFfRVJSID0gKDEgPDwgMCksCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIEFUQV9TUlNUID0gKDEgPDwgMiksCiAgQVRBX0lDUkMgPSAoMSA8PCA3KSwKICBBVEFfVU5DID0gKDEgPDwgNiksCiAgQVRBX0lETkYgPSAoMSA8PCA0KSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQVRBX0FCT1JURUQgPSAoMSA8PCAyKSwKLQogIEFUQV9SRUdfREFUQSA9IDB4MDAsCiAgQVRBX1JFR19FUlIgPSAweDAxLAogIEFUQV9SRUdfTlNFQ1QgPSAweDAyLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBBVEFfUkVHX0xCQUwgPSAweDAzLAogIEFUQV9SRUdfTEJBTSA9IDB4MDQsCiAgQVRBX1JFR19MQkFIID0gMHgwNSwKICBBVEFfUkVHX0RFVklDRSA9IDB4MDYsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIEFUQV9SRUdfU1RBVFVTID0gMHgwNywKLQogIEFUQV9SRUdfRkVBVFVSRSA9IEFUQV9SRUdfRVJSLAogIEFUQV9SRUdfQ01EID0gQVRBX1JFR19TVEFUVVMsCiAgQVRBX1JFR19CWVRFTCA9IEFUQV9SRUdfTEJBTSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQVRBX1JFR19CWVRFSCA9IEFUQV9SRUdfTEJBSCwKICBBVEFfUkVHX0RFVlNFTCA9IEFUQV9SRUdfREVWSUNFLAogIEFUQV9SRUdfSVJRID0gQVRBX1JFR19OU0VDVCwKLQogIEFUQV9DTURfQ0hLX1BPV0VSID0gMHhFNSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQVRBX0NNRF9TVEFOREJZID0gMHhFMiwKICBBVEFfQ01EX0lETEUgPSAweEUzLAogIEFUQV9DTURfRUREID0gMHg5MCwKICBBVEFfQ01EX0ZMVVNIID0gMHhFNywKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQVRBX0NNRF9GTFVTSF9FWFQgPSAweEVBLAogIEFUQV9DTURfSURfQVRBID0gMHhFQywKICBBVEFfQ01EX0lEX0FUQVBJID0gMHhBMSwKICBBVEFfQ01EX1JFQUQgPSAweEM4LAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBBVEFfQ01EX1JFQURfRVhUID0gMHgyNSwKICBBVEFfQ01EX1dSSVRFID0gMHhDQSwKICBBVEFfQ01EX1dSSVRFX0VYVCA9IDB4MzUsCiAgQVRBX0NNRF9XUklURV9GVUFfRVhUID0gMHgzRCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQVRBX0NNRF9GUERNQV9SRUFEID0gMHg2MCwKICBBVEFfQ01EX0ZQRE1BX1dSSVRFID0gMHg2MSwKICBBVEFfQ01EX1BJT19SRUFEID0gMHgyMCwKICBBVEFfQ01EX1BJT19SRUFEX0VYVCA9IDB4MjQsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIEFUQV9DTURfUElPX1dSSVRFID0gMHgzMCwKICBBVEFfQ01EX1BJT19XUklURV9FWFQgPSAweDM0LAogIEFUQV9DTURfUkVBRF9NVUxUSSA9IDB4QzQsCiAgQVRBX0NNRF9SRUFEX01VTFRJX0VYVCA9IDB4MjksCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIEFUQV9DTURfV1JJVEVfTVVMVEkgPSAweEM1LAogIEFUQV9DTURfV1JJVEVfTVVMVElfRVhUID0gMHgzOSwKICBBVEFfQ01EX1dSSVRFX01VTFRJX0ZVQV9FWFQgPSAweENFLAogIEFUQV9DTURfU0VUX0ZFQVRVUkVTID0gMHhFRiwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQVRBX0NNRF9QQUNLRVQgPSAweEEwLAogIEFUQV9DTURfVkVSSUZZID0gMHg0MCwKICBBVEFfQ01EX1ZFUklGWV9FWFQgPSAweDQyLAogIEFUQV9DTURfU1RBTkRCWU5PVzEgPSAweEUwLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBBVEFfQ01EX0lETEVJTU1FRElBVEUgPSAweEUxLAogIEFUQV9DTURfSU5JVF9ERVZfUEFSQU1TID0gMHg5MSwKICBBVEFfQ01EX1JFQURfTkFUSVZFX01BWCA9IDB4RjgsCiAgQVRBX0NNRF9SRUFEX05BVElWRV9NQVhfRVhUID0gMHgyNywKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQVRBX0NNRF9SRUFEX0xPR19FWFQgPSAweDJmLAotCiAgQVRBX0xPR19TQVRBX05DUSA9IDB4MTAsCi0KICBTRVRGRUFUVVJFU19YRkVSID0gMHgwMywKICBYRkVSX1VETUFfNyA9IDB4NDcsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFhGRVJfVURNQV82ID0gMHg0NiwKICBYRkVSX1VETUFfNSA9IDB4NDUsCiAgWEZFUl9VRE1BXzQgPSAweDQ0LAogIFhGRVJfVURNQV8zID0gMHg0MywKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgWEZFUl9VRE1BXzIgPSAweDQyLAogIFhGRVJfVURNQV8xID0gMHg0MSwKICBYRkVSX1VETUFfMCA9IDB4NDAsCiAgWEZFUl9NV19ETUFfMiA9IDB4MjIsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFhGRVJfTVdfRE1BXzEgPSAweDIxLAogIFhGRVJfTVdfRE1BXzAgPSAweDIwLAogIFhGRVJfU1dfRE1BXzIgPSAweDEyLAogIFhGRVJfU1dfRE1BXzEgPSAweDExLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBYRkVSX1NXX0RNQV8wID0gMHgxMCwKICBYRkVSX1BJT180ID0gMHgwQywKICBYRkVSX1BJT18zID0gMHgwQiwKICBYRkVSX1BJT18yID0gMHgwQSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgWEZFUl9QSU9fMSA9IDB4MDksCiAgWEZFUl9QSU9fMCA9IDB4MDgsCiAgWEZFUl9QSU9fU0xPVyA9IDB4MDAsCi0KICBTRVRGRUFUVVJFU19XQ19PTiA9IDB4MDIsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFNFVEZFQVRVUkVTX1dDX09GRiA9IDB4ODIsCi0KICBBVEFQSV9QS1RfRE1BID0gKDEgPDwgMCksCiAgQVRBUElfRE1BRElSID0gKDEgPDwgMiksCiAgQVRBUElfQ0RCX0xFTiA9IDE2LAotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIEFUQV9DQkxfTk9ORSA9IDAsCiAgQVRBX0NCTF9QQVRBNDAgPSAxLAogIEFUQV9DQkxfUEFUQTgwID0gMiwKICBBVEFfQ0JMX1BBVEFfVU5LID0gMywKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQVRBX0NCTF9TQVRBID0gNCwKLQogIFNDUl9TVEFUVVMgPSAwLAogIFNDUl9FUlJPUiA9IDEsCiAgU0NSX0NPTlRST0wgPSAyLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBTQ1JfQUNUSVZFID0gMywKICBTQ1JfTk9USUZJQ0FUSU9OID0gNCwKLQogIFNFUlJfREFUQV9SRUNPVkVSRUQgPSAoMSA8PCAwKSwKICBTRVJSX0NPTU1fUkVDT1ZFUkVEID0gKDEgPDwgMSksCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFNFUlJfREFUQSA9ICgxIDw8IDgpLAogIFNFUlJfUEVSU0lTVEVOVCA9ICgxIDw8IDkpLAogIFNFUlJfUFJPVE9DT0wgPSAoMSA8PCAxMCksCiAgU0VSUl9JTlRFUk5BTCA9ICgxIDw8IDExKSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgU0VSUl9QSFlSRFlfQ0hHID0gKDEgPDwgMTYpLAogIFNFUlJfREVWX1hDSEcgPSAoMSA8PCAyNiksCi0KICBBVEFfVEZMQUdfTEJBNDggPSAoMSA8PCAwKSwKICBBVEFfVEZMQUdfSVNBRERSID0gKDEgPDwgMSksCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIEFUQV9URkxBR19ERVZJQ0UgPSAoMSA8PCAyKSwKICBBVEFfVEZMQUdfV1JJVEUgPSAoMSA8PCAzKSwKICBBVEFfVEZMQUdfTEJBID0gKDEgPDwgNCksCiAgQVRBX1RGTEFHX0ZVQSA9ICgxIDw8IDUpLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBBVEFfVEZMQUdfUE9MTElORyA9ICgxIDw8IDYpLAogfTsKLQogZW51bSBhdGFfdGZfcHJvdG9jb2xzIHsKLQogIEFUQV9QUk9UX1VOS05PV04sCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIEFUQV9QUk9UX05PREFUQSwKICBBVEFfUFJPVF9QSU8sCiAgQVRBX1BST1RfRE1BLAogIEFUQV9QUk9UX05DUSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQVRBX1BST1RfQVRBUEksCiAgQVRBX1BST1RfQVRBUElfTk9EQVRBLAogIEFUQV9QUk9UX0FUQVBJX0RNQSwKIH07Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBlbnVtIGF0YV9pb2N0bHMgewogIEFUQV9JT0NfR0VUX0lPMzIgPSAweDMwOSwKICBBVEFfSU9DX1NFVF9JTzMyID0gMHgzMjQsCiB9OwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IGF0YV9wcmQgewogIHUzMiBhZGRyOwogIHUzMiBmbGFnc19sZW47CiB9OwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IGF0YV90YXNrZmlsZSB7CiAgdW5zaWduZWQgbG9uZyBmbGFnczsKICB1OCBwcm90b2NvbDsKLQogIHU4IGN0bDsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1OCBob2JfZmVhdHVyZTsKICB1OCBob2JfbnNlY3Q7CiAgdTggaG9iX2xiYWw7CiAgdTggaG9iX2xiYW07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHU4IGhvYl9sYmFoOwotCiAgdTggZmVhdHVyZTsKICB1OCBuc2VjdDsKICB1OCBsYmFsOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1OCBsYmFtOwogIHU4IGxiYWg7Ci0KICB1OCBkZXZpY2U7Ci0KICB1OCBjb21tYW5kOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07Ci0KICNkZWZpbmUgYXRhX2lkX2lzX2F0YShpZCkgKCgoaWQpWzBdICYgKDEgPDwgMTUpKSA9PSAwKQogI2RlZmluZSBhdGFfaWRfaXNfY2ZhKGlkKSAoKGlkKVswXSA9PSAweDg0OEEpCiAjZGVmaW5lIGF0YV9pZF9pc19zYXRhKGlkKSAoKGlkKVs5M10gPT0gMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIGF0YV9pZF9yYWhlYWRfZW5hYmxlZChpZCkgKChpZClbODVdICYgKDEgPDwgNikpCiAjZGVmaW5lIGF0YV9pZF93Y2FjaGVfZW5hYmxlZChpZCkgKChpZClbODVdICYgKDEgPDwgNSkpCiAjZGVmaW5lIGF0YV9pZF9ocGFfZW5hYmxlZChpZCkgKChpZClbODVdICYgKDEgPDwgMTApKQogI2RlZmluZSBhdGFfaWRfaGFzX2Z1YShpZCkgKChpZClbODRdICYgKDEgPDwgNikpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBhdGFfaWRfaGFzX2ZsdXNoKGlkKSAoKGlkKVs4M10gJiAoMSA8PCAxMikpCiAjZGVmaW5lIGF0YV9pZF9oYXNfZmx1c2hfZXh0KGlkKSAoKGlkKVs4M10gJiAoMSA8PCAxMykpCiAjZGVmaW5lIGF0YV9pZF9oYXNfbGJhNDgoaWQpICgoaWQpWzgzXSAmICgxIDw8IDEwKSkKICNkZWZpbmUgYXRhX2lkX2hhc19ocGEoaWQpICgoaWQpWzgyXSAmICgxIDw8IDEwKSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIGF0YV9pZF9oYXNfd2NhY2hlKGlkKSAoKGlkKVs4Ml0gJiAoMSA8PCA1KSkKICNkZWZpbmUgYXRhX2lkX2hhc19wbShpZCkgKChpZClbODJdICYgKDEgPDwgMykpCiAjZGVmaW5lIGF0YV9pZF9oYXNfbGJhKGlkKSAoKGlkKVs0OV0gJiAoMSA8PCA5KSkKICNkZWZpbmUgYXRhX2lkX2hhc19kbWEoaWQpICgoaWQpWzQ5XSAmICgxIDw8IDgpKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgYXRhX2lkX2hhc19uY3EoaWQpICgoaWQpWzc2XSAmICgxIDw8IDgpKQogI2RlZmluZSBhdGFfaWRfcXVldWVfZGVwdGgoaWQpICgoKGlkKVs3NV0gJiAweDFmKSArIDEpCiAjZGVmaW5lIGF0YV9pZF9yZW1vdmVhYmxlKGlkKSAoKGlkKVswXSAmICgxIDw8IDcpKQogI2RlZmluZSBhdGFfaWRfaGFzX2R3b3JkX2lvKGlkKSAoKGlkKVs1MF0gJiAoMSA8PCAwKSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIGF0YV9pZF91MzIoaWQsbikgICAoKCh1MzIpIChpZClbKG4pICsgMV0gPDwgMTYpIHwgKCh1MzIpIChpZClbKG4pXSkpCiAjZGVmaW5lIGF0YV9pZF91NjQoaWQsbikgICAoICgodTY0KSAoaWQpWyhuKSArIDNdIDw8IDQ4KSB8ICAgKCh1NjQpIChpZClbKG4pICsgMl0gPDwgMzIpIHwgICAoKHU2NCkgKGlkKVsobikgKyAxXSA8PCAxNikgfCAgICgodTY0KSAoaWQpWyhuKSArIDBdKSApCi0KICNkZWZpbmUgYXRhX2lkX2NkYl9pbnRyKGlkKSAoKChpZClbMF0gJiAweDYwKSA9PSAweDIwKQotCiAjZW5kaWYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvYXRtLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvYXRtLmgKaW5kZXggYzliY2Q3MC4uZWM2YThkZiAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2F0bS5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9hdG0uaApAQCAtNywxNTUgKzcsMTcwIEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfTElOVVhfQVRNX0gKICNkZWZpbmUgX0xJTlVYX0FUTV9ICi0KICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgogI2luY2x1ZGUgPGxpbnV4L2F0bWFwaS5oPgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNpbmNsdWRlIDxsaW51eC9hdG1zYXAuaD4KICNpbmNsdWRlIDxsaW51eC9hdG1pb2MuaD4KLQotI2RlZmluZSBBVE1fQ0VMTF9TSVpFIDUzICAKLSNkZWZpbmUgQVRNX0NFTExfUEFZTE9BRCA0OCAgCi0jZGVmaW5lIEFUTV9BQUwwX1NEVSA1MiAgCi0jZGVmaW5lIEFUTV9NQVhfQUFMMzRfUERVIDY1NTM1ICAKLSNkZWZpbmUgQVRNX0FBTDVfVFJBSUxFUiA4ICAKLSNkZWZpbmUgQVRNX01BWF9BQUw1X1BEVSA2NTUzNSAgCi0jZGVmaW5lIEFUTV9NQVhfQ0RWIDk5OTkgIAotI2RlZmluZSBBVE1fTk9UX1JTVl9WQ0kgMzIgIAotCi0jZGVmaW5lIEFUTV9NQVhfVlBJIDI1NSAgCi0jZGVmaW5lIEFUTV9NQVhfVlBJX05OSSA0MDk2ICAKLSNkZWZpbmUgQVRNX01BWF9WQ0kgNjU1MzUgIAotCi0jZGVmaW5lIEFUTV9OT19BQUwgMCAgCi0jZGVmaW5lIEFUTV9BQUwwIDEzICAKLSNkZWZpbmUgQVRNX0FBTDEgMSAgCi0jZGVmaW5lIEFUTV9BQUwyIDIgIAotI2RlZmluZSBBVE1fQUFMMzQgMyAgCi0jZGVmaW5lIEFUTV9BQUw1IDUgIAotCisjZGVmaW5lIEFUTV9DRUxMX1NJWkUgNTMKKyNkZWZpbmUgQVRNX0NFTExfUEFZTE9BRCA0OAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgQVRNX0FBTDBfU0RVIDUyCisjZGVmaW5lIEFUTV9NQVhfQUFMMzRfUERVIDY1NTM1CisjZGVmaW5lIEFUTV9BQUw1X1RSQUlMRVIgOAorI2RlZmluZSBBVE1fTUFYX0FBTDVfUERVIDY1NTM1CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBBVE1fTUFYX0NEViA5OTk5CisjZGVmaW5lIEFUTV9OT1RfUlNWX1ZDSSAzMgorI2RlZmluZSBBVE1fTUFYX1ZQSSAyNTUKKyNkZWZpbmUgQVRNX01BWF9WUElfTk5JIDQwOTYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEFUTV9NQVhfVkNJIDY1NTM1CisjZGVmaW5lIEFUTV9OT19BQUwgMAorI2RlZmluZSBBVE1fQUFMMCAxMworI2RlZmluZSBBVE1fQUFMMSAxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBBVE1fQUFMMiAyCisjZGVmaW5lIEFUTV9BQUwzNCAzCisjZGVmaW5lIEFUTV9BQUw1IDUKICNkZWZpbmUgX19TT19FTkNPREUobCxuLHQpICgoKChsKSAmIDB4MUZGKSA8PCAyMikgfCAoKG4pIDw8IDE2KSB8ICAgc2l6ZW9mKHQpKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19TT19MRVZFTF9NQVRDSChjLG0pICgoKGMpID4+IDIyKSA9PSAoKG0pICYgMHgxRkYpKQogI2RlZmluZSBfX1NPX05VTUJFUihjKSAoKChjKSA+PiAxNikgJiAweDNmKQogI2RlZmluZSBfX1NPX1NJWkUoYykgKChjKSAmIDB4M2ZmZikKLQogI2RlZmluZSBTT19TRVRDTFAgX19TT19FTkNPREUoU09MX0FUTSwwLGludCkKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU09fQ0lSQU5HRSBfX1NPX0VOQ09ERShTT0xfQVRNLDEsc3RydWN0IGF0bV9jaXJhbmdlKQotCiAjZGVmaW5lIFNPX0FUTVFPUyBfX1NPX0VOQ09ERShTT0xfQVRNLDIsc3RydWN0IGF0bV9xb3MpCi0KICNkZWZpbmUgU09fQVRNU0FQIF9fU09fRU5DT0RFKFNPTF9BVE0sMyxzdHJ1Y3QgYXRtX3NhcCkKLQogI2RlZmluZSBTT19BVE1QVkMgX19TT19FTkNPREUoU09MX0FUTSw0LHN0cnVjdCBzb2NrYWRkcl9hdG1wdmMpCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNPX01VTFRJUE9JTlQgX19TT19FTkNPREUoU09MX0FUTSwgNSwgaW50KQotCiAjZGVmaW5lIEFUTV9IRFJfR0ZDX01BU0sgMHhmMDAwMDAwMAogI2RlZmluZSBBVE1fSERSX0dGQ19TSElGVCAyOAogI2RlZmluZSBBVE1fSERSX1ZQSV9NQVNLIDB4MGZmMDAwMDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFUTV9IRFJfVlBJX1NISUZUIDIwCiAjZGVmaW5lIEFUTV9IRFJfVkNJX01BU0sgMHgwMDBmZmZmMAogI2RlZmluZSBBVE1fSERSX1ZDSV9TSElGVCA0CiAjZGVmaW5lIEFUTV9IRFJfUFRJX01BU0sgMHgwMDAwMDAwZQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQVRNX0hEUl9QVElfU0hJRlQgMQogI2RlZmluZSBBVE1fSERSX0NMUCAweDAwMDAwMDAxCi0KLSNkZWZpbmUgQVRNX1BUSV9VUzAgMCAgCi0jZGVmaW5lIEFUTV9QVElfVVMxIDEgIAotI2RlZmluZSBBVE1fUFRJX1VDRVMwIDIgIAotI2RlZmluZSBBVE1fUFRJX1VDRVMxIDMgIAotI2RlZmluZSBBVE1fUFRJX1NFR0Y1IDQgIAotI2RlZmluZSBBVE1fUFRJX0UyRUY1IDUgIAotI2RlZmluZSBBVE1fUFRJX1JTVl9STSA2ICAKLSNkZWZpbmUgQVRNX1BUSV9SU1YgNyAgCi0KLSNkZWZpbmUgQVRNX05PTkUgMCAgCisjZGVmaW5lIEFUTV9QVElfVVMwIDAKKyNkZWZpbmUgQVRNX1BUSV9VUzEgMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgQVRNX1BUSV9VQ0VTMCAyCisjZGVmaW5lIEFUTV9QVElfVUNFUzEgMworI2RlZmluZSBBVE1fUFRJX1NFR0Y1IDQKKyNkZWZpbmUgQVRNX1BUSV9FMkVGNSA1CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBBVE1fUFRJX1JTVl9STSA2CisjZGVmaW5lIEFUTV9QVElfUlNWIDcKKyNkZWZpbmUgQVRNX05PTkUgMAogI2RlZmluZSBBVE1fVUJSIDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFUTV9DQlIgMgogI2RlZmluZSBBVE1fVkJSIDMKICNkZWZpbmUgQVRNX0FCUiA0Ci0jZGVmaW5lIEFUTV9BTllDTEFTUyA1ICAKLQotI2RlZmluZSBBVE1fTUFYX1BDUiAtMSAgCi0KKyNkZWZpbmUgQVRNX0FOWUNMQVNTIDUKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEFUTV9NQVhfUENSIC0xCiBzdHJ1Y3QgYXRtX3RyYWZwcm0gewogIHVuc2lnbmVkIGNoYXIgdHJhZmZpY19jbGFzczsKICBpbnQgbWF4X3BjcjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgaW50IHBjcjsKICBpbnQgbWluX3BjcjsKICBpbnQgbWF4X2NkdjsKICBpbnQgbWF4X3NkdTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBpbnQgaWNyOwogIHVuc2lnbmVkIGludCB0YmU7CiAgdW5zaWduZWQgaW50IGZydHQgOiAyNDsKICB1bnNpZ25lZCBpbnQgcmlmIDogNDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgaW50IHJkZiA6IDQ7CiAgdW5zaWduZWQgaW50IG5ybV9wcmVzIDoxOwogIHVuc2lnbmVkIGludCB0cm1fcHJlcyA6MTsKICB1bnNpZ25lZCBpbnQgYWR0Zl9wcmVzIDoxOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBpbnQgY2RmX3ByZXMgOjE7CiAgdW5zaWduZWQgaW50IG5ybSA6MzsKICB1bnNpZ25lZCBpbnQgdHJtIDozOwogIHVuc2lnbmVkIGludCBhZHRmIDoxMDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgaW50IGNkZiA6MzsKICB1bnNpZ25lZCBpbnQgc3BhcmUgOjk7CiB9OwotCiBzdHJ1Y3QgYXRtX3FvcyB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCBhdG1fdHJhZnBybSB0eHRwOwogIHN0cnVjdCBhdG1fdHJhZnBybSByeHRwIF9fQVRNX0FQSV9BTElHTjsKLQogIHVuc2lnbmVkIGNoYXIgYWFsIF9fQVRNX0FQSV9BTElHTjsKIH07Ci0KLSNkZWZpbmUgQVRNX0lURl9BTlkgLTEgIAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgQVRNX0lURl9BTlkgLTEKICNkZWZpbmUgQVRNX1ZQSV9BTlkgLTEKICNkZWZpbmUgQVRNX1ZDSV9BTlkgLTEKICNkZWZpbmUgQVRNX1ZQSV9VTlNQRUMgLTIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFUTV9WQ0lfVU5TUEVDIC0yCi0KIHN0cnVjdCBzb2NrYWRkcl9hdG1wdmMgewogIHVuc2lnbmVkIHNob3J0IHNhcF9mYW1pbHk7CiAgc3RydWN0IHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc2hvcnQgaXRmOwogIHNob3J0IHZwaTsKICBpbnQgdmNpOwogIH0gc2FwX2FkZHIgX19BVE1fQVBJX0FMSUdOOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07Ci0KLSNkZWZpbmUgQVRNX0VTQV9MRU4gMjAgIAotI2RlZmluZSBBVE1fRTE2NF9MRU4gMTIgIAotCi0jZGVmaW5lIEFUTV9BRklfRENDIDB4MzkgIAotI2RlZmluZSBBVE1fQUZJX0lDRCAweDQ3ICAKLSNkZWZpbmUgQVRNX0FGSV9FMTY0IDB4NDUgIAotI2RlZmluZSBBVE1fQUZJX0xPQ0FMIDB4NDkgICAKLQotI2RlZmluZSBBVE1fQUZJX0RDQ19HUk9VUCAweEJEICAKLSNkZWZpbmUgQVRNX0FGSV9JQ0RfR1JPVVAgMHhDNSAgCi0jZGVmaW5lIEFUTV9BRklfRTE2NF9HUk9VUCAweEMzICAKLSNkZWZpbmUgQVRNX0FGSV9MT0NBTF9HUk9VUCAweEM3ICAKLQotI2RlZmluZSBBVE1fTElKX05PTkUgMCAgCi0jZGVmaW5lIEFUTV9MSUogMSAgCi0jZGVmaW5lIEFUTV9MSUpfUlBKIDIgIAotI2RlZmluZSBBVE1fTElKX05KIDMgIAotCisjZGVmaW5lIEFUTV9FU0FfTEVOIDIwCisjZGVmaW5lIEFUTV9FMTY0X0xFTiAxMgorI2RlZmluZSBBVE1fQUZJX0RDQyAweDM5CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBBVE1fQUZJX0lDRCAweDQ3CisjZGVmaW5lIEFUTV9BRklfRTE2NCAweDQ1CisjZGVmaW5lIEFUTV9BRklfTE9DQUwgMHg0OQorI2RlZmluZSBBVE1fQUZJX0RDQ19HUk9VUCAweEJECisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBBVE1fQUZJX0lDRF9HUk9VUCAweEM1CisjZGVmaW5lIEFUTV9BRklfRTE2NF9HUk9VUCAweEMzCisjZGVmaW5lIEFUTV9BRklfTE9DQUxfR1JPVVAgMHhDNworI2RlZmluZSBBVE1fTElKX05PTkUgMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgQVRNX0xJSiAxCisjZGVmaW5lIEFUTV9MSUpfUlBKIDIKKyNkZWZpbmUgQVRNX0xJSl9OSiAzCiBzdHJ1Y3Qgc29ja2FkZHJfYXRtc3ZjIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgc2hvcnQgc2FzX2ZhbWlseTsKICBzdHJ1Y3QgewogIHVuc2lnbmVkIGNoYXIgcHJ2W0FUTV9FU0FfTEVOXTsKICBjaGFyIHB1YltBVE1fRTE2NF9MRU4rMV07Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgY2hhciBsaWpfdHlwZTsKICB1aW50MzJfdCBsaWpfaWQ7CiAgfSBzYXNfYWRkciBfX0FUTV9BUElfQUxJR047CiB9OwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworc3RydWN0IGF0bWlmX3Npb2MgeworIGludCBudW1iZXI7CisgaW50IGxlbmd0aDsKKyB2b2lkIF9fdXNlciAqYXJnOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK307CiB0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGF0bV9iYWNrZW5kX3Q7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9hdG1hcGkuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9hdG1hcGkuaAppbmRleCBiZWU1Y2FlLi4xNmU4ZmRmIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvYXRtYXBpLmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2F0bWFwaS5oCkBAIC03LDE4ICs3LDIzIEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfTElOVVhfQVRNQVBJX0gKICNkZWZpbmUgX0xJTlVYX0FUTUFQSV9ICi0KICNpZiBkZWZpbmVkKF9fc3BhcmNfXykgfHwgZGVmaW5lZChfX2lhNjRfXykKLQogI2RlZmluZSBfX0FUTV9BUElfQUxJR04gX19hdHRyaWJ1dGVfXygoYWxpZ25lZCg4KSkpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2Vsc2UKICNkZWZpbmUgX19BVE1fQVBJX0FMSUdOCiAjZW5kaWYKLQogdHlwZWRlZiBzdHJ1Y3QgeyB1bnNpZ25lZCBjaGFyIF9bOF07IH0gX19BVE1fQVBJX0FMSUdOIGF0bV9rcHRyX3Q7Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9hdG1kZXYuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9hdG1kZXYuaAppbmRleCAyN2JhZWIwLi40NTRhZDA5IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvYXRtZGV2LmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2F0bWRldi5oCkBAIC03LDE1NSArNywxMzIgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIExJTlVYX0FUTURFVl9ICiAjZGVmaW5lIExJTlVYX0FUTURFVl9ICi0KICNpbmNsdWRlIDxsaW51eC9hdG1hcGkuaD4KICNpbmNsdWRlIDxsaW51eC9hdG0uaD4KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjaW5jbHVkZSA8bGludXgvYXRtaW9jLmg+Ci0KICNkZWZpbmUgRVNJX0xFTiA2Ci0KICNkZWZpbmUgQVRNX09DM19QQ1IgKDE1NTUyMDAwMC8yNzAqMjYwLzgvNTMpCi0KICNkZWZpbmUgQVRNXzI1X1BDUiAoKDI1NjAwMDAwLzgtODAwMCkvNTQpCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFUTV9PQzEyX1BDUiAoNjIyMDgwMDAwLzEwODAqMTA0MC84LzUzKQotCiAjZGVmaW5lIEFUTV9EUzNfUENSICg4MDAwKjEyKQotCi0jZGVmaW5lIF9fQUFMX1NUQVRfSVRFTVMgICBfX0hBTkRMRV9JVEVNKHR4KTsgICAgIF9fSEFORExFX0lURU0odHhfZXJyKTsgICAgIF9fSEFORExFX0lURU0ocngpOyAgICAgX19IQU5ETEVfSVRFTShyeF9lcnIpOyAgICAgX19IQU5ETEVfSVRFTShyeF9kcm9wKTsgIAotCisjZGVmaW5lIF9fQUFMX1NUQVRfSVRFTVMgICBfX0hBTkRMRV9JVEVNKHR4KTsgICAgIF9fSEFORExFX0lURU0odHhfZXJyKTsgICAgIF9fSEFORExFX0lURU0ocngpOyAgICAgX19IQU5ETEVfSVRFTShyeF9lcnIpOyAgICAgX19IQU5ETEVfSVRFTShyeF9kcm9wKTsKIHN0cnVjdCBhdG1fYWFsX3N0YXRzIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fSEFORExFX0lURU0oaSkgaW50IGkKICBfX0FBTF9TVEFUX0lURU1TCiAjdW5kZWYgX19IQU5ETEVfSVRFTQogfTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBhdG1fZGV2X3N0YXRzIHsKICBzdHJ1Y3QgYXRtX2FhbF9zdGF0cyBhYWwwOwogIHN0cnVjdCBhdG1fYWFsX3N0YXRzIGFhbDM0OwogIHN0cnVjdCBhdG1fYWFsX3N0YXRzIGFhbDU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfSBfX0FUTV9BUElfQUxJR047Ci0KICNkZWZpbmUgQVRNX0dFVExJTktSQVRFIF9JT1coJ2EnLEFUTUlPQ19JVEYrMSxzdHJ1Y3QgYXRtaWZfc2lvYykKLQogI2RlZmluZSBBVE1fR0VUTkFNRVMgX0lPVygnYScsQVRNSU9DX0lURiszLHN0cnVjdCBhdG1faW9idWYpCi0KICNkZWZpbmUgQVRNX0dFVFRZUEUgX0lPVygnYScsQVRNSU9DX0lURis0LHN0cnVjdCBhdG1pZl9zaW9jKQotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBVE1fR0VURVNJIF9JT1coJ2EnLEFUTUlPQ19JVEYrNSxzdHJ1Y3QgYXRtaWZfc2lvYykKLQogI2RlZmluZSBBVE1fR0VUQUREUiBfSU9XKCdhJyxBVE1JT0NfSVRGKzYsc3RydWN0IGF0bWlmX3Npb2MpCi0KICNkZWZpbmUgQVRNX1JTVEFERFIgX0lPVygnYScsQVRNSU9DX0lURis3LHN0cnVjdCBhdG1pZl9zaW9jKQotCiAjZGVmaW5lIEFUTV9BRERBRERSIF9JT1coJ2EnLEFUTUlPQ19JVEYrOCxzdHJ1Y3QgYXRtaWZfc2lvYykKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQVRNX0RFTEFERFIgX0lPVygnYScsQVRNSU9DX0lURis5LHN0cnVjdCBhdG1pZl9zaW9jKQotCiAjZGVmaW5lIEFUTV9HRVRDSVJBTkdFIF9JT1coJ2EnLEFUTUlPQ19JVEYrMTAsc3RydWN0IGF0bWlmX3Npb2MpCi0KICNkZWZpbmUgQVRNX1NFVENJUkFOR0UgX0lPVygnYScsQVRNSU9DX0lURisxMSxzdHJ1Y3QgYXRtaWZfc2lvYykKLQogI2RlZmluZSBBVE1fU0VURVNJIF9JT1coJ2EnLEFUTUlPQ19JVEYrMTIsc3RydWN0IGF0bWlmX3Npb2MpCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFUTV9TRVRFU0lGIF9JT1coJ2EnLEFUTUlPQ19JVEYrMTMsc3RydWN0IGF0bWlmX3Npb2MpCi0KICNkZWZpbmUgQVRNX0FERExFQ1NBRERSIF9JT1coJ2EnLCBBVE1JT0NfSVRGKzE0LCBzdHJ1Y3QgYXRtaWZfc2lvYykKLQogI2RlZmluZSBBVE1fREVMTEVDU0FERFIgX0lPVygnYScsIEFUTUlPQ19JVEYrMTUsIHN0cnVjdCBhdG1pZl9zaW9jKQotCiAjZGVmaW5lIEFUTV9HRVRMRUNTQUREUiBfSU9XKCdhJywgQVRNSU9DX0lURisxNiwgc3RydWN0IGF0bWlmX3Npb2MpCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFUTV9HRVRTVEFUIF9JT1coJ2EnLEFUTUlPQ19TQVJDT00rMCxzdHJ1Y3QgYXRtaWZfc2lvYykKLQogI2RlZmluZSBBVE1fR0VUU1RBVFogX0lPVygnYScsQVRNSU9DX1NBUkNPTSsxLHN0cnVjdCBhdG1pZl9zaW9jKQotCiAjZGVmaW5lIEFUTV9HRVRMT09QIF9JT1coJ2EnLEFUTUlPQ19TQVJDT00rMixzdHJ1Y3QgYXRtaWZfc2lvYykKLQogI2RlZmluZSBBVE1fU0VUTE9PUCBfSU9XKCdhJyxBVE1JT0NfU0FSQ09NKzMsc3RydWN0IGF0bWlmX3Npb2MpCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFUTV9RVUVSWUxPT1AgX0lPVygnYScsQVRNSU9DX1NBUkNPTSs0LHN0cnVjdCBhdG1pZl9zaW9jKQotCiAjZGVmaW5lIEFUTV9TRVRTQyBfSU9XKCdhJyxBVE1JT0NfU1BFQ0lBTCsxLGludCkKLQogI2RlZmluZSBBVE1fU0VUQkFDS0VORCBfSU9XKCdhJyxBVE1JT0NfU1BFQ0lBTCsyLGF0bV9iYWNrZW5kX3QpCi0KICNkZWZpbmUgQVRNX05FV0JBQ0tFTkRJRiBfSU9XKCdhJyxBVE1JT0NfU1BFQ0lBTCszLGF0bV9iYWNrZW5kX3QpCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFUTV9BRERQQVJUWSBfSU9XKCdhJywgQVRNSU9DX1NQRUNJQUwrNCxzdHJ1Y3QgYXRtX2lvYnVmKQotCiAjZGVmaW5lIEFUTV9EUk9QUEFSVFkgX0lPVygnYScsIEFUTUlPQ19TUEVDSUFMKzUsaW50KQotCi0jZGVmaW5lIEFUTV9CQUNLRU5EX1JBVyAwIAotI2RlZmluZSBBVE1fQkFDS0VORF9QUFAgMSAgCi0jZGVmaW5lIEFUTV9CQUNLRU5EX0JSMjY4NCAyICAKLQotI2RlZmluZSBBVE1fSVRGVFlQX0xFTiA4ICAKLQotI2RlZmluZSBfX0FUTV9MTV9OT05FIDAgIAotI2RlZmluZSBfX0FUTV9MTV9BQUwgMSAgCi0jZGVmaW5lIF9fQVRNX0xNX0FUTSAyICAKLQotI2RlZmluZSBfX0FUTV9MTV9QSFkgOCAgCi0jZGVmaW5lIF9fQVRNX0xNX0FOQUxPRyAxNiAgCi0KLSNkZWZpbmUgX19BVE1fTE1fTUtMT0MobikgKChuKSkgIAotI2RlZmluZSBfX0FUTV9MTV9NS1JNVChuKSAoKG4pIDw8IDgpICAKLQorI2RlZmluZSBBVE1fQkFDS0VORF9SQVcgMAorI2RlZmluZSBBVE1fQkFDS0VORF9QUFAgMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgQVRNX0JBQ0tFTkRfQlIyNjg0IDIKKyNkZWZpbmUgQVRNX0lURlRZUF9MRU4gOAorI2RlZmluZSBfX0FUTV9MTV9OT05FIDAKKyNkZWZpbmUgX19BVE1fTE1fQUFMIDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIF9fQVRNX0xNX0FUTSAyCisjZGVmaW5lIF9fQVRNX0xNX1BIWSA4CisjZGVmaW5lIF9fQVRNX0xNX0FOQUxPRyAxNgorI2RlZmluZSBfX0FUTV9MTV9NS0xPQyhuKSAoKG4pKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgX19BVE1fTE1fTUtSTVQobikgKChuKSA8PCA4KQogI2RlZmluZSBfX0FUTV9MTV9YVExPQyhuKSAoKG4pICYgMHhmZikKICNkZWZpbmUgX19BVE1fTE1fWFRSTVQobikgKCgobikgPj4gOCkgJiAweGZmKQotCi0jZGVmaW5lIEFUTV9MTV9OT05FIDAgIAotCisjZGVmaW5lIEFUTV9MTV9OT05FIDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFUTV9MTV9MT0NfQUFMIF9fQVRNX0xNX01LTE9DKF9fQVRNX0xNX0FBTCkKICNkZWZpbmUgQVRNX0xNX0xPQ19BVE0gX19BVE1fTE1fTUtMT0MoX19BVE1fTE1fQVRNKQogI2RlZmluZSBBVE1fTE1fTE9DX1BIWSBfX0FUTV9MTV9NS0xPQyhfX0FUTV9MTV9QSFkpCiAjZGVmaW5lIEFUTV9MTV9MT0NfQU5BTE9HIF9fQVRNX0xNX01LTE9DKF9fQVRNX0xNX0FOQUxPRykKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQVRNX0xNX1JNVF9BQUwgX19BVE1fTE1fTUtSTVQoX19BVE1fTE1fQUFMKQogI2RlZmluZSBBVE1fTE1fUk1UX0FUTSBfX0FUTV9MTV9NS1JNVChfX0FUTV9MTV9BVE0pCiAjZGVmaW5lIEFUTV9MTV9STVRfUEhZIF9fQVRNX0xNX01LUk1UKF9fQVRNX0xNX1BIWSkKICNkZWZpbmUgQVRNX0xNX1JNVF9BTkFMT0cgX19BVE1fTE1fTUtSTVQoX19BVE1fTE1fQU5BTE9HKQotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IGF0bV9pb2J1ZiB7CiAgaW50IGxlbmd0aDsKICB2b2lkIF9fdXNlciAqYnVmZmVyOwogfTsKLQotI2RlZmluZSBBVE1fQ0lfTUFYIC0xICAKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgQVRNX0NJX01BWCAtMQogc3RydWN0IGF0bV9jaXJhbmdlIHsKICBzaWduZWQgY2hhciB2cGlfYml0czsKICBzaWduZWQgY2hhciB2Y2lfYml0czsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwotCi0jZGVmaW5lIEFUTV9TQ19SWCAxMDI0ICAKLSNkZWZpbmUgQVRNX1NDX1RYIDIwNDggIAotCi0jZGVmaW5lIEFUTV9CQUNLTE9HX0RFRkFVTFQgMzIgIAotCi0jZGVmaW5lIEFUTV9NRl9JTU1FRCAxICAKLSNkZWZpbmUgQVRNX01GX0lOQ19SU1YgMiAgCi0jZGVmaW5lIEFUTV9NRl9JTkNfU0hQIDQgIAotI2RlZmluZSBBVE1fTUZfREVDX1JTViA4ICAKLSNkZWZpbmUgQVRNX01GX0RFQ19TSFAgMTYgIAotI2RlZmluZSBBVE1fTUZfQldEIDMyICAKLQorI2RlZmluZSBBVE1fU0NfUlggMTAyNAorI2RlZmluZSBBVE1fU0NfVFggMjA0OAorI2RlZmluZSBBVE1fQkFDS0xPR19ERUZBVUxUIDMyCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBBVE1fTUZfSU1NRUQgMQorI2RlZmluZSBBVE1fTUZfSU5DX1JTViAyCisjZGVmaW5lIEFUTV9NRl9JTkNfU0hQIDQKKyNkZWZpbmUgQVRNX01GX0RFQ19SU1YgOAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgQVRNX01GX0RFQ19TSFAgMTYKKyNkZWZpbmUgQVRNX01GX0JXRCAzMgogI2RlZmluZSBBVE1fTUZfU0VUIChBVE1fTUZfSU5DX1JTViB8IEFUTV9NRl9JTkNfU0hQIHwgQVRNX01GX0RFQ19SU1YgfCAgIEFUTV9NRl9ERUNfU0hQIHwgQVRNX01GX0JXRCkKLQotI2RlZmluZSBBVE1fVlNfSURMRSAwICAKLSNkZWZpbmUgQVRNX1ZTX0NPTk5FQ1RFRCAxICAKLSNkZWZpbmUgQVRNX1ZTX0NMT1NJTkcgMiAgCi0jZGVmaW5lIEFUTV9WU19MSVNURU4gMyAgCi0jZGVmaW5lIEFUTV9WU19JTlVTRSA0ICAKLSNkZWZpbmUgQVRNX1ZTX0JPVU5EIDUgIAotCisjZGVmaW5lIEFUTV9WU19JRExFIDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEFUTV9WU19DT05ORUNURUQgMQorI2RlZmluZSBBVE1fVlNfQ0xPU0lORyAyCisjZGVmaW5lIEFUTV9WU19MSVNURU4gMworI2RlZmluZSBBVE1fVlNfSU5VU0UgNAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgQVRNX1ZTX0JPVU5EIDUKICNkZWZpbmUgQVRNX1ZTMlRYVF9NQVAgICAiSURMRSIsICJDT05ORUNURUQiLCAiQ0xPU0lORyIsICJMSVNURU4iLCAiSU5VU0UiLCAiQk9VTkQiCi0KICNkZWZpbmUgQVRNX1ZGMlRYVF9NQVAgICAiQUREUiIsICJSRUFEWSIsICJQQVJUSUFMIiwgIlJFR0lTIiwgICAiUkVMRUFTRUQiLCAiSEFTUU9TIiwgIkxJU1RFTiIsICJNRVRBIiwgICAiMjU2IiwgIjUxMiIsICIxMDI0IiwgIjIwNDgiLCAgICJTRVNTSU9OIiwgIkhBU1NBUCIsICJCT1VORCIsICJDTE9TRSIKLQogI2VuZGlmCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2F0bWlvYy5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2F0bWlvYy5oCmluZGV4IGQwMDQzMzkuLjE0N2I3Y2MgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9hdG1pb2MuaAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvYXRtaW9jLmgKQEAgLTcsMzQgKzcsNDMgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9MSU5VWF9BVE1JT0NfSAogI2RlZmluZSBfTElOVVhfQVRNSU9DX0gKLQogI2luY2x1ZGUgPGFzbS9pb2N0bC5oPgotCi0jZGVmaW5lIEFUTUlPQ19QSFlDT00gMHgwMCAgCisjZGVmaW5lIEFUTUlPQ19QSFlDT00gMHgwMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQVRNSU9DX1BIWUNPTV9FTkQgMHgwZgotI2RlZmluZSBBVE1JT0NfUEhZVFlQIDB4MTAgIAorI2RlZmluZSBBVE1JT0NfUEhZVFlQIDB4MTAKICNkZWZpbmUgQVRNSU9DX1BIWVRZUF9FTkQgMHgyZgotI2RlZmluZSBBVE1JT0NfUEhZUFJWIDB4MzAgIAorI2RlZmluZSBBVE1JT0NfUEhZUFJWIDB4MzAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFUTUlPQ19QSFlQUlZfRU5EIDB4NGYKLSNkZWZpbmUgQVRNSU9DX1NBUkNPTSAweDUwICAKKyNkZWZpbmUgQVRNSU9DX1NBUkNPTSAweDUwCiAjZGVmaW5lIEFUTUlPQ19TQVJDT01fRU5EIDB4NTAKLSNkZWZpbmUgQVRNSU9DX1NBUlBSViAweDYwICAKKyNkZWZpbmUgQVRNSU9DX1NBUlBSViAweDYwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBVE1JT0NfU0FSUFJWX0VORCAweDdmCi0jZGVmaW5lIEFUTUlPQ19JVEYgMHg4MCAgCisjZGVmaW5lIEFUTUlPQ19JVEYgMHg4MAogI2RlZmluZSBBVE1JT0NfSVRGX0VORCAweDhmCi0jZGVmaW5lIEFUTUlPQ19CQUNLRU5EIDB4OTAgIAorI2RlZmluZSBBVE1JT0NfQkFDS0VORCAweDkwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBVE1JT0NfQkFDS0VORF9FTkQgMHhhZgotCi0jZGVmaW5lIEFUTUlPQ19BUkVRVUlQQSAweGMwICAKLSNkZWZpbmUgQVRNSU9DX0xBTkUgMHhkMCAgCi0jZGVmaW5lIEFUTUlPQ19NUE9BIDB4ZDggIAotI2RlZmluZSBBVE1JT0NfQ0xJUCAweGUwICAKKyNkZWZpbmUgQVRNSU9DX0FSRVFVSVBBIDB4YzAKKyNkZWZpbmUgQVRNSU9DX0xBTkUgMHhkMAorI2RlZmluZSBBVE1JT0NfTVBPQSAweGQ4CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBBVE1JT0NfQ0xJUCAweGUwCiAjZGVmaW5lIEFUTUlPQ19DTElQX0VORCAweGVmCi0jZGVmaW5lIEFUTUlPQ19TUEVDSUFMIDB4ZjAgIAorI2RlZmluZSBBVE1JT0NfU1BFQ0lBTCAweGYwCiAjZGVmaW5lIEFUTUlPQ19TUEVDSUFMX0VORCAweGZmCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9hdG1wcHAuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9hdG1wcHAuaAppbmRleCAzMzMwYzMyLi45OGUyZTMxIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvYXRtcHBwLmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2F0bXBwcC5oCkBAIC03LDIwICs3LDI1IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfTElOVVhfQVRNUFBQX0gKICNkZWZpbmUgX0xJTlVYX0FUTVBQUF9ICi0KICNpbmNsdWRlIDxsaW51eC9hdG0uaD4KLQogI2RlZmluZSBQUFBPQVRNX0VOQ0FQU19BVVRPREVURUNUICgwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUFBQT0FUTV9FTkNBUFNfVkMgKDEpCiAjZGVmaW5lIFBQUE9BVE1fRU5DQVBTX0xMQyAoMikKLQogc3RydWN0IGF0bV9iYWNrZW5kX3BwcCB7CiAgYXRtX2JhY2tlbmRfdCBiYWNrZW5kX251bTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgaW50IGVuY2FwczsKIH07Ci0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2F0bXNhcC5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2F0bXNhcC5oCmluZGV4IDQ1NmY3NWYuLjg1ZTgwMjAgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9hdG1zYXAuaAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvYXRtc2FwLmgKQEAgLTcsMTExICs3LDExOCBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX0xJTlVYX0FUTVNBUF9ICiAjZGVmaW5lIF9MSU5VWF9BVE1TQVBfSAotCiAjaW5jbHVkZSA8bGludXgvYXRtYXBpLmg+Ci0KLSNkZWZpbmUgQVRNX0wyX05PTkUgMCAgCi0jZGVmaW5lIEFUTV9MMl9JU08xNzQ1IDB4MDEgIAotI2RlZmluZSBBVE1fTDJfUTI5MSAweDAyICAKLSNkZWZpbmUgQVRNX0wyX1gyNV9MTCAweDA2ICAKLSNkZWZpbmUgQVRNX0wyX1gyNV9NTCAweDA3ICAKLSNkZWZpbmUgQVRNX0wyX0xBUEIgMHgwOCAgCi0jZGVmaW5lIEFUTV9MMl9IRExDX0FSTSAweDA5ICAKLSNkZWZpbmUgQVRNX0wyX0hETENfTlJNIDB4MGEgIAotI2RlZmluZSBBVE1fTDJfSERMQ19BQk0gMHgwYiAgCi0jZGVmaW5lIEFUTV9MMl9JU084ODAyIDB4MGMgIAotI2RlZmluZSBBVE1fTDJfWDc1IDB4MGQgIAotI2RlZmluZSBBVE1fTDJfUTkyMiAweDBlICAKLSNkZWZpbmUgQVRNX0wyX1VTRVIgMHgxMCAgCi0jZGVmaW5lIEFUTV9MMl9JU083Nzc2IDB4MTEgIAotCi0jZGVmaW5lIEFUTV9MM19OT05FIDAgIAotI2RlZmluZSBBVE1fTDNfWDI1IDB4MDYgIAotI2RlZmluZSBBVE1fTDNfSVNPODIwOCAweDA3ICAKLSNkZWZpbmUgQVRNX0wzX1gyMjMgMHgwOCAgCi0jZGVmaW5lIEFUTV9MM19JU084NDczIDB4MDkgIAotI2RlZmluZSBBVE1fTDNfVDcwIDB4MGEgIAotI2RlZmluZSBBVE1fTDNfVFI5NTc3IDB4MGIgIAotI2RlZmluZSBBVE1fTDNfSDMxMCAweDBjICAKLSNkZWZpbmUgQVRNX0wzX0gzMjEgMHgwZCAgCi0jZGVmaW5lIEFUTV9MM19VU0VSIDB4MTAgIAotCi0jZGVmaW5lIEFUTV9ITF9OT05FIDAgIAotI2RlZmluZSBBVE1fSExfSVNPIDB4MDEgIAotI2RlZmluZSBBVE1fSExfVVNFUiAweDAyICAKLSNkZWZpbmUgQVRNX0hMX0hMUCAweDAzICAKLSNkZWZpbmUgQVRNX0hMX1ZFTkRPUiAweDA0ICAKLQotI2RlZmluZSBBVE1fSU1EX05PTkUgMCAgCi0jZGVmaW5lIEFUTV9JTURfTk9STUFMIDEgIAotI2RlZmluZSBBVE1fSU1EX0VYVEVOREVEIDIgIAotCi0jZGVmaW5lIEFUTV9UVF9OT05FIDAgIAotI2RlZmluZSBBVE1fVFRfUlggMSAgCi0jZGVmaW5lIEFUTV9UVF9UWCAyICAKLSNkZWZpbmUgQVRNX1RUX1JYVFggMyAgCi0KLSNkZWZpbmUgQVRNX01DX05PTkUgMCAgCi0jZGVmaW5lIEFUTV9NQ19UUyAxICAKLSNkZWZpbmUgQVRNX01DX1RTX0ZFQyAyICAKLSNkZWZpbmUgQVRNX01DX1BTIDMgIAotI2RlZmluZSBBVE1fTUNfUFNfRkVDIDQgIAotI2RlZmluZSBBVE1fTUNfSDIyMSA1ICAKLQotI2RlZmluZSBBVE1fTUFYX0hMSSA4ICAKLQorI2RlZmluZSBBVE1fTDJfTk9ORSAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBBVE1fTDJfSVNPMTc0NSAweDAxCisjZGVmaW5lIEFUTV9MMl9RMjkxIDB4MDIKKyNkZWZpbmUgQVRNX0wyX1gyNV9MTCAweDA2CisjZGVmaW5lIEFUTV9MMl9YMjVfTUwgMHgwNworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgQVRNX0wyX0xBUEIgMHgwOAorI2RlZmluZSBBVE1fTDJfSERMQ19BUk0gMHgwOQorI2RlZmluZSBBVE1fTDJfSERMQ19OUk0gMHgwYQorI2RlZmluZSBBVE1fTDJfSERMQ19BQk0gMHgwYgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgQVRNX0wyX0lTTzg4MDIgMHgwYworI2RlZmluZSBBVE1fTDJfWDc1IDB4MGQKKyNkZWZpbmUgQVRNX0wyX1E5MjIgMHgwZQorI2RlZmluZSBBVE1fTDJfVVNFUiAweDEwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBBVE1fTDJfSVNPNzc3NiAweDExCisjZGVmaW5lIEFUTV9MM19OT05FIDAKKyNkZWZpbmUgQVRNX0wzX1gyNSAweDA2CisjZGVmaW5lIEFUTV9MM19JU084MjA4IDB4MDcKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEFUTV9MM19YMjIzIDB4MDgKKyNkZWZpbmUgQVRNX0wzX0lTTzg0NzMgMHgwOQorI2RlZmluZSBBVE1fTDNfVDcwIDB4MGEKKyNkZWZpbmUgQVRNX0wzX1RSOTU3NyAweDBiCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBBVE1fTDNfSDMxMCAweDBjCisjZGVmaW5lIEFUTV9MM19IMzIxIDB4MGQKKyNkZWZpbmUgQVRNX0wzX1VTRVIgMHgxMAorI2RlZmluZSBBVE1fSExfTk9ORSAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBBVE1fSExfSVNPIDB4MDEKKyNkZWZpbmUgQVRNX0hMX1VTRVIgMHgwMgorI2RlZmluZSBBVE1fSExfSExQIDB4MDMKKyNkZWZpbmUgQVRNX0hMX1ZFTkRPUiAweDA0CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBBVE1fSU1EX05PTkUgMAorI2RlZmluZSBBVE1fSU1EX05PUk1BTCAxCisjZGVmaW5lIEFUTV9JTURfRVhURU5ERUQgMgorI2RlZmluZSBBVE1fVFRfTk9ORSAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBBVE1fVFRfUlggMQorI2RlZmluZSBBVE1fVFRfVFggMgorI2RlZmluZSBBVE1fVFRfUlhUWCAzCisjZGVmaW5lIEFUTV9NQ19OT05FIDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEFUTV9NQ19UUyAxCisjZGVmaW5lIEFUTV9NQ19UU19GRUMgMgorI2RlZmluZSBBVE1fTUNfUFMgMworI2RlZmluZSBBVE1fTUNfUFNfRkVDIDQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEFUTV9NQ19IMjIxIDUKKyNkZWZpbmUgQVRNX01BWF9ITEkgOAogc3RydWN0IGF0bV9ibGxpIHsKICB1bnNpZ25lZCBjaGFyIGwyX3Byb3RvOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bmlvbiB7CiAgc3RydWN0IHsKICB1bnNpZ25lZCBjaGFyIG1vZGU7Ci0KICB1bnNpZ25lZCBjaGFyIHdpbmRvdzsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgfSBpdHU7CiAgdW5zaWduZWQgY2hhciB1c2VyOwogIH0gbDI7CiAgdW5zaWduZWQgY2hhciBsM19wcm90bzsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5pb24gewogIHN0cnVjdCB7CiAgdW5zaWduZWQgY2hhciBtb2RlOwotCiAgdW5zaWduZWQgY2hhciBkZWZfc2l6ZTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBjaGFyIHdpbmRvdzsKICB9IGl0dTsKICB1bnNpZ25lZCBjaGFyIHVzZXI7CiAgc3RydWN0IHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgY2hhciB0ZXJtX3R5cGU7CiAgdW5zaWduZWQgY2hhciBmd19tcHhfY2FwOwotCiAgdW5zaWduZWQgY2hhciBid19tcHhfY2FwOwotCiAgfSBoMzEwOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgewogIHVuc2lnbmVkIGNoYXIgaXBpOwogIHVuc2lnbmVkIGNoYXIgc25hcFs1XTsKLQogIH0gdHI5NTc3OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB9IGwzOwogfSBfX0FUTV9BUElfQUxJR047Ci0KIHN0cnVjdCBhdG1fYmhsaSB7CiAgdW5zaWduZWQgY2hhciBobF90eXBlOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBjaGFyIGhsX2xlbmd0aDsKLQogIHVuc2lnbmVkIGNoYXIgaGxfaW5mb1tBVE1fTUFYX0hMSV07CiB9OwotCi0jZGVmaW5lIEFUTV9NQVhfQkxMSSAzICAKLQorI2RlZmluZSBBVE1fTUFYX0JMTEkgMworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBhdG1fc2FwIHsKICBzdHJ1Y3QgYXRtX2JobGkgYmhsaTsKICBzdHJ1Y3QgYXRtX2JsbGkgYmxsaVtBVE1fTUFYX0JMTEldIF9fQVRNX0FQSV9BTElHTjsKLQogfTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2F0dHJpYnV0ZV9jb250YWluZXIuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9hdHRyaWJ1dGVfY29udGFpbmVyLmgKaW5kZXggMWE5YmZiMC4uNjhhZDM2NSAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2F0dHJpYnV0ZV9jb250YWluZXIuaAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvYXR0cmlidXRlX2NvbnRhaW5lci5oCkBAIC03LDI4ICs3LDM1IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfQVRUUklCVVRFX0NPTlRBSU5FUl9IXwogI2RlZmluZSBfQVRUUklCVVRFX0NPTlRBSU5FUl9IXwotCiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNpbmNsdWRlIDxsaW51eC9rbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+Ci0KIHN0cnVjdCBhdHRyaWJ1dGVfY29udGFpbmVyIHsKICBzdHJ1Y3QgbGlzdF9oZWFkIG5vZGU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCBrbGlzdCBjb250YWluZXJzOwogIHN0cnVjdCBjbGFzcyAqY2xhc3M7CiAgc3RydWN0IGNsYXNzX2RldmljZV9hdHRyaWJ1dGUgKiphdHRyczsKICBpbnQgKCptYXRjaCkoc3RydWN0IGF0dHJpYnV0ZV9jb250YWluZXIgKiwgc3RydWN0IGRldmljZSAqKTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFUVFJJQlVURV9DT05UQUlORVJfTk9fQ0xBU1NERVZTIDB4MDEKICB1bnNpZ25lZCBsb25nIGZsYWdzOwogfTsKLQogc3RydWN0IGF0dHJpYnV0ZV9jb250YWluZXIgKmF0dHJpYnV0ZV9jb250YWluZXJfY2xhc3NkZXZfdG9fY29udGFpbmVyKHN0cnVjdCBjbGFzc19kZXZpY2UgKik7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IGNsYXNzX2RldmljZSAqYXR0cmlidXRlX2NvbnRhaW5lcl9maW5kX2NsYXNzX2RldmljZShzdHJ1Y3QgYXR0cmlidXRlX2NvbnRhaW5lciAqLCBzdHJ1Y3QgZGV2aWNlICopOwogc3RydWN0IGNsYXNzX2RldmljZV9hdHRyaWJ1dGUgKiphdHRyaWJ1dGVfY29udGFpbmVyX2NsYXNzZGV2X3RvX2F0dHJzKGNvbnN0IHN0cnVjdCBjbGFzc19kZXZpY2UgKmNsYXNzZGV2KTsKLQogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvYXVkaXQuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9hdWRpdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiZWE2ODQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvYXVkaXQuaApAQCAtMCwwICsxLDM2MSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfTElOVVhfQVVESVRfSF8KKyNkZWZpbmUgX0xJTlVYX0FVRElUX0hfCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9lbGYtZW0uaD4KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+CisjZGVmaW5lIEFVRElUX0dFVCAxMDAwCisjZGVmaW5lIEFVRElUX1NFVCAxMDAxCisjZGVmaW5lIEFVRElUX0xJU1QgMTAwMgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgQVVESVRfQUREIDEwMDMKKyNkZWZpbmUgQVVESVRfREVMIDEwMDQKKyNkZWZpbmUgQVVESVRfVVNFUiAxMDA1CisjZGVmaW5lIEFVRElUX0xPR0lOIDEwMDYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEFVRElUX1dBVENIX0lOUyAxMDA3CisjZGVmaW5lIEFVRElUX1dBVENIX1JFTSAxMDA4CisjZGVmaW5lIEFVRElUX1dBVENIX0xJU1QgMTAwOQorI2RlZmluZSBBVURJVF9TSUdOQUxfSU5GTyAxMDEwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBBVURJVF9BRERfUlVMRSAxMDExCisjZGVmaW5lIEFVRElUX0RFTF9SVUxFIDEwMTIKKyNkZWZpbmUgQVVESVRfTElTVF9SVUxFUyAxMDEzCisjZGVmaW5lIEFVRElUX1RSSU0gMTAxNAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgQVVESVRfTUFLRV9FUVVJViAxMDE1CisjZGVmaW5lIEFVRElUX1RUWV9HRVQgMTAxNgorI2RlZmluZSBBVURJVF9UVFlfU0VUIDEwMTcKKyNkZWZpbmUgQVVESVRfRklSU1RfVVNFUl9NU0cgMTEwMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgQVVESVRfVVNFUl9BVkMgMTEwNworI2RlZmluZSBBVURJVF9VU0VSX1RUWSAxMTI0CisjZGVmaW5lIEFVRElUX0xBU1RfVVNFUl9NU0cgMTE5OQorI2RlZmluZSBBVURJVF9GSVJTVF9VU0VSX01TRzIgMjEwMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgQVVESVRfTEFTVF9VU0VSX01TRzIgMjk5OQorI2RlZmluZSBBVURJVF9EQUVNT05fU1RBUlQgMTIwMAorI2RlZmluZSBBVURJVF9EQUVNT05fRU5EIDEyMDEKKyNkZWZpbmUgQVVESVRfREFFTU9OX0FCT1JUIDEyMDIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEFVRElUX0RBRU1PTl9DT05GSUcgMTIwMworI2RlZmluZSBBVURJVF9TWVNDQUxMIDEzMDAKKyNkZWZpbmUgQVVESVRfUEFUSCAxMzAyCisjZGVmaW5lIEFVRElUX0lQQyAxMzAzCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBBVURJVF9TT0NLRVRDQUxMIDEzMDQKKyNkZWZpbmUgQVVESVRfQ09ORklHX0NIQU5HRSAxMzA1CisjZGVmaW5lIEFVRElUX1NPQ0tBRERSIDEzMDYKKyNkZWZpbmUgQVVESVRfQ1dEIDEzMDcKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEFVRElUX0VYRUNWRSAxMzA5CisjZGVmaW5lIEFVRElUX0lQQ19TRVRfUEVSTSAxMzExCisjZGVmaW5lIEFVRElUX01RX09QRU4gMTMxMgorI2RlZmluZSBBVURJVF9NUV9TRU5EUkVDViAxMzEzCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBBVURJVF9NUV9OT1RJRlkgMTMxNAorI2RlZmluZSBBVURJVF9NUV9HRVRTRVRBVFRSIDEzMTUKKyNkZWZpbmUgQVVESVRfS0VSTkVMX09USEVSIDEzMTYKKyNkZWZpbmUgQVVESVRfRkRfUEFJUiAxMzE3CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBBVURJVF9PQkpfUElEIDEzMTgKKyNkZWZpbmUgQVVESVRfVFRZIDEzMTkKKyNkZWZpbmUgQVVESVRfRU9FIDEzMjAKKyNkZWZpbmUgQVVESVRfQlBSTV9GQ0FQUyAxMzIxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBBVURJVF9DQVBTRVQgMTMyMgorI2RlZmluZSBBVURJVF9NTUFQIDEzMjMKKyNkZWZpbmUgQVVESVRfTkVURklMVEVSX1BLVCAxMzI0CisjZGVmaW5lIEFVRElUX05FVEZJTFRFUl9DRkcgMTMyNQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgQVVESVRfQVZDIDE0MDAKKyNkZWZpbmUgQVVESVRfU0VMSU5VWF9FUlIgMTQwMQorI2RlZmluZSBBVURJVF9BVkNfUEFUSCAxNDAyCisjZGVmaW5lIEFVRElUX01BQ19QT0xJQ1lfTE9BRCAxNDAzCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBBVURJVF9NQUNfU1RBVFVTIDE0MDQKKyNkZWZpbmUgQVVESVRfTUFDX0NPTkZJR19DSEFOR0UgMTQwNQorI2RlZmluZSBBVURJVF9NQUNfVU5MQkxfQUxMT1cgMTQwNgorI2RlZmluZSBBVURJVF9NQUNfQ0lQU09WNF9BREQgMTQwNworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgQVVESVRfTUFDX0NJUFNPVjRfREVMIDE0MDgKKyNkZWZpbmUgQVVESVRfTUFDX01BUF9BREQgMTQwOQorI2RlZmluZSBBVURJVF9NQUNfTUFQX0RFTCAxNDEwCisjZGVmaW5lIEFVRElUX01BQ19JUFNFQ19BRERTQSAxNDExCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBBVURJVF9NQUNfSVBTRUNfREVMU0EgMTQxMgorI2RlZmluZSBBVURJVF9NQUNfSVBTRUNfQUREU1BEIDE0MTMKKyNkZWZpbmUgQVVESVRfTUFDX0lQU0VDX0RFTFNQRCAxNDE0CisjZGVmaW5lIEFVRElUX01BQ19JUFNFQ19FVkVOVCAxNDE1CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBBVURJVF9NQUNfVU5MQkxfU1RDQUREIDE0MTYKKyNkZWZpbmUgQVVESVRfTUFDX1VOTEJMX1NUQ0RFTCAxNDE3CisjZGVmaW5lIEFVRElUX0ZJUlNUX0tFUk5fQU5PTV9NU0cgMTcwMAorI2RlZmluZSBBVURJVF9MQVNUX0tFUk5fQU5PTV9NU0cgMTc5OQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgQVVESVRfQU5PTV9QUk9NSVNDVU9VUyAxNzAwCisjZGVmaW5lIEFVRElUX0FOT01fQUJFTkQgMTcwMQorI2RlZmluZSBBVURJVF9JTlRFR1JJVFlfREFUQSAxODAwCisjZGVmaW5lIEFVRElUX0lOVEVHUklUWV9NRVRBREFUQSAxODAxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBBVURJVF9JTlRFR1JJVFlfU1RBVFVTIDE4MDIKKyNkZWZpbmUgQVVESVRfSU5URUdSSVRZX0hBU0ggMTgwMworI2RlZmluZSBBVURJVF9JTlRFR1JJVFlfUENSIDE4MDQKKyNkZWZpbmUgQVVESVRfSU5URUdSSVRZX1JVTEUgMTgwNQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgQVVESVRfS0VSTkVMIDIwMDAKKyNkZWZpbmUgQVVESVRfRklMVEVSX1VTRVIgMHgwMAorI2RlZmluZSBBVURJVF9GSUxURVJfVEFTSyAweDAxCisjZGVmaW5lIEFVRElUX0ZJTFRFUl9FTlRSWSAweDAyCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBBVURJVF9GSUxURVJfV0FUQ0ggMHgwMworI2RlZmluZSBBVURJVF9GSUxURVJfRVhJVCAweDA0CisjZGVmaW5lIEFVRElUX0ZJTFRFUl9UWVBFIDB4MDUKKyNkZWZpbmUgQVVESVRfTlJfRklMVEVSUyA2CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBBVURJVF9GSUxURVJfUFJFUEVORCAweDEwCisjZGVmaW5lIEFVRElUX05FVkVSIDAKKyNkZWZpbmUgQVVESVRfUE9TU0lCTEUgMQorI2RlZmluZSBBVURJVF9BTFdBWVMgMgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgQVVESVRfTUFYX0ZJRUxEUyA2NAorI2RlZmluZSBBVURJVF9NQVhfS0VZX0xFTiAyNTYKKyNkZWZpbmUgQVVESVRfQklUTUFTS19TSVpFIDY0CisjZGVmaW5lIEFVRElUX1dPUkQobnIpICgoX191MzIpKChucikvMzIpKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgQVVESVRfQklUKG5yKSAoMSA8PCAoKG5yKSAtIEFVRElUX1dPUkQobnIpKjMyKSkKKyNkZWZpbmUgQVVESVRfU1lTQ0FMTF9DTEFTU0VTIDE2CisjZGVmaW5lIEFVRElUX0NMQVNTX0RJUl9XUklURSAwCisjZGVmaW5lIEFVRElUX0NMQVNTX0RJUl9XUklURV8zMiAxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBBVURJVF9DTEFTU19DSEFUVFIgMgorI2RlZmluZSBBVURJVF9DTEFTU19DSEFUVFJfMzIgMworI2RlZmluZSBBVURJVF9DTEFTU19SRUFEIDQKKyNkZWZpbmUgQVVESVRfQ0xBU1NfUkVBRF8zMiA1CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBBVURJVF9DTEFTU19XUklURSA2CisjZGVmaW5lIEFVRElUX0NMQVNTX1dSSVRFXzMyIDcKKyNkZWZpbmUgQVVESVRfQ0xBU1NfU0lHTkFMIDgKKyNkZWZpbmUgQVVESVRfQ0xBU1NfU0lHTkFMXzMyIDkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEFVRElUX1VOVVNFRF9CSVRTIDB4MDdGRkZDMDAKKyNkZWZpbmUgQVVESVRfQ09NUEFSRV9VSURfVE9fT0JKX1VJRCAxCisjZGVmaW5lIEFVRElUX0NPTVBBUkVfR0lEX1RPX09CSl9HSUQgMgorI2RlZmluZSBBVURJVF9DT01QQVJFX0VVSURfVE9fT0JKX1VJRCAzCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBBVURJVF9DT01QQVJFX0VHSURfVE9fT0JKX0dJRCA0CisjZGVmaW5lIEFVRElUX0NPTVBBUkVfQVVJRF9UT19PQkpfVUlEIDUKKyNkZWZpbmUgQVVESVRfQ09NUEFSRV9TVUlEX1RPX09CSl9VSUQgNgorI2RlZmluZSBBVURJVF9DT01QQVJFX1NHSURfVE9fT0JKX0dJRCA3CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBBVURJVF9DT01QQVJFX0ZTVUlEX1RPX09CSl9VSUQgOAorI2RlZmluZSBBVURJVF9DT01QQVJFX0ZTR0lEX1RPX09CSl9HSUQgOQorI2RlZmluZSBBVURJVF9DT01QQVJFX1VJRF9UT19BVUlEIDEwCisjZGVmaW5lIEFVRElUX0NPTVBBUkVfVUlEX1RPX0VVSUQgMTEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEFVRElUX0NPTVBBUkVfVUlEX1RPX0ZTVUlEIDEyCisjZGVmaW5lIEFVRElUX0NPTVBBUkVfVUlEX1RPX1NVSUQgMTMKKyNkZWZpbmUgQVVESVRfQ09NUEFSRV9BVUlEX1RPX0ZTVUlEIDE0CisjZGVmaW5lIEFVRElUX0NPTVBBUkVfQVVJRF9UT19TVUlEIDE1CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBBVURJVF9DT01QQVJFX0FVSURfVE9fRVVJRCAxNgorI2RlZmluZSBBVURJVF9DT01QQVJFX0VVSURfVE9fU1VJRCAxNworI2RlZmluZSBBVURJVF9DT01QQVJFX0VVSURfVE9fRlNVSUQgMTgKKyNkZWZpbmUgQVVESVRfQ09NUEFSRV9TVUlEX1RPX0ZTVUlEIDE5CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBBVURJVF9DT01QQVJFX0dJRF9UT19FR0lEIDIwCisjZGVmaW5lIEFVRElUX0NPTVBBUkVfR0lEX1RPX0ZTR0lEIDIxCisjZGVmaW5lIEFVRElUX0NPTVBBUkVfR0lEX1RPX1NHSUQgMjIKKyNkZWZpbmUgQVVESVRfQ09NUEFSRV9FR0lEX1RPX0ZTR0lEIDIzCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBBVURJVF9DT01QQVJFX0VHSURfVE9fU0dJRCAyNAorI2RlZmluZSBBVURJVF9DT01QQVJFX1NHSURfVE9fRlNHSUQgMjUKKyNkZWZpbmUgQVVESVRfTUFYX0ZJRUxEX0NPTVBBUkUgQVVESVRfQ09NUEFSRV9TR0lEX1RPX0ZTR0lECisjZGVmaW5lIEFVRElUX1BJRCAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBBVURJVF9VSUQgMQorI2RlZmluZSBBVURJVF9FVUlEIDIKKyNkZWZpbmUgQVVESVRfU1VJRCAzCisjZGVmaW5lIEFVRElUX0ZTVUlEIDQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEFVRElUX0dJRCA1CisjZGVmaW5lIEFVRElUX0VHSUQgNgorI2RlZmluZSBBVURJVF9TR0lEIDcKKyNkZWZpbmUgQVVESVRfRlNHSUQgOAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgQVVESVRfTE9HSU5VSUQgOQorI2RlZmluZSBBVURJVF9QRVJTIDEwCisjZGVmaW5lIEFVRElUX0FSQ0ggMTEKKyNkZWZpbmUgQVVESVRfTVNHVFlQRSAxMgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgQVVESVRfU1VCSl9VU0VSIDEzCisjZGVmaW5lIEFVRElUX1NVQkpfUk9MRSAxNAorI2RlZmluZSBBVURJVF9TVUJKX1RZUEUgMTUKKyNkZWZpbmUgQVVESVRfU1VCSl9TRU4gMTYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEFVRElUX1NVQkpfQ0xSIDE3CisjZGVmaW5lIEFVRElUX1BQSUQgMTgKKyNkZWZpbmUgQVVESVRfT0JKX1VTRVIgMTkKKyNkZWZpbmUgQVVESVRfT0JKX1JPTEUgMjAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEFVRElUX09CSl9UWVBFIDIxCisjZGVmaW5lIEFVRElUX09CSl9MRVZfTE9XIDIyCisjZGVmaW5lIEFVRElUX09CSl9MRVZfSElHSCAyMworI2RlZmluZSBBVURJVF9ERVZNQUpPUiAxMDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEFVRElUX0RFVk1JTk9SIDEwMQorI2RlZmluZSBBVURJVF9JTk9ERSAxMDIKKyNkZWZpbmUgQVVESVRfRVhJVCAxMDMKKyNkZWZpbmUgQVVESVRfU1VDQ0VTUyAxMDQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEFVRElUX1dBVENIIDEwNQorI2RlZmluZSBBVURJVF9QRVJNIDEwNgorI2RlZmluZSBBVURJVF9ESVIgMTA3CisjZGVmaW5lIEFVRElUX0ZJTEVUWVBFIDEwOAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgQVVESVRfT0JKX1VJRCAxMDkKKyNkZWZpbmUgQVVESVRfT0JKX0dJRCAxMTAKKyNkZWZpbmUgQVVESVRfRklFTERfQ09NUEFSRSAxMTEKKyNkZWZpbmUgQVVESVRfQVJHMCAyMDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEFVRElUX0FSRzEgKEFVRElUX0FSRzArMSkKKyNkZWZpbmUgQVVESVRfQVJHMiAoQVVESVRfQVJHMCsyKQorI2RlZmluZSBBVURJVF9BUkczIChBVURJVF9BUkcwKzMpCisjZGVmaW5lIEFVRElUX0ZJTFRFUktFWSAyMTAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEFVRElUX05FR0FURSAweDgwMDAwMDAwCisjZGVmaW5lIEFVRElUX0JJVF9NQVNLIDB4MDgwMDAwMDAKKyNkZWZpbmUgQVVESVRfTEVTU19USEFOIDB4MTAwMDAwMDAKKyNkZWZpbmUgQVVESVRfR1JFQVRFUl9USEFOIDB4MjAwMDAwMDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEFVRElUX05PVF9FUVVBTCAweDMwMDAwMDAwCisjZGVmaW5lIEFVRElUX0VRVUFMIDB4NDAwMDAwMDAKKyNkZWZpbmUgQVVESVRfQklUX1RFU1QgKEFVRElUX0JJVF9NQVNLfEFVRElUX0VRVUFMKQorI2RlZmluZSBBVURJVF9MRVNTX1RIQU5fT1JfRVFVQUwgKEFVRElUX0xFU1NfVEhBTnxBVURJVF9FUVVBTCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEFVRElUX0dSRUFURVJfVEhBTl9PUl9FUVVBTCAoQVVESVRfR1JFQVRFUl9USEFOfEFVRElUX0VRVUFMKQorI2RlZmluZSBBVURJVF9PUEVSQVRPUlMgKEFVRElUX0VRVUFMfEFVRElUX05PVF9FUVVBTHxBVURJVF9CSVRfTUFTSykKK2VudW0geworIEF1ZGl0X2VxdWFsLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBBdWRpdF9ub3RfZXF1YWwsCisgQXVkaXRfYml0bWFzaywKKyBBdWRpdF9iaXR0ZXN0LAorIEF1ZGl0X2x0LAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBBdWRpdF9ndCwKKyBBdWRpdF9sZSwKKyBBdWRpdF9nZSwKKyBBdWRpdF9iYWQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCit9OworI2RlZmluZSBBVURJVF9TVEFUVVNfRU5BQkxFRCAweDAwMDEKKyNkZWZpbmUgQVVESVRfU1RBVFVTX0ZBSUxVUkUgMHgwMDAyCisjZGVmaW5lIEFVRElUX1NUQVRVU19QSUQgMHgwMDA0CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBBVURJVF9TVEFUVVNfUkFURV9MSU1JVCAweDAwMDgKKyNkZWZpbmUgQVVESVRfU1RBVFVTX0JBQ0tMT0dfTElNSVQgMHgwMDEwCisjZGVmaW5lIEFVRElUX0ZBSUxfU0lMRU5UIDAKKyNkZWZpbmUgQVVESVRfRkFJTF9QUklOVEsgMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgQVVESVRfRkFJTF9QQU5JQyAyCisjZGVmaW5lIF9fQVVESVRfQVJDSF82NEJJVCAweDgwMDAwMDAwCisjZGVmaW5lIF9fQVVESVRfQVJDSF9MRSAweDQwMDAwMDAwCisjZGVmaW5lIEFVRElUX0FSQ0hfQUxQSEEgKEVNX0FMUEhBfF9fQVVESVRfQVJDSF82NEJJVHxfX0FVRElUX0FSQ0hfTEUpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBBVURJVF9BUkNIX0FSTSAoRU1fQVJNfF9fQVVESVRfQVJDSF9MRSkKKyNkZWZpbmUgQVVESVRfQVJDSF9BUk1FQiAoRU1fQVJNKQorI2RlZmluZSBBVURJVF9BUkNIX0NSSVMgKEVNX0NSSVN8X19BVURJVF9BUkNIX0xFKQorI2RlZmluZSBBVURJVF9BUkNIX0ZSViAoRU1fRlJWKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgQVVESVRfQVJDSF9IODMwMCAoRU1fSDhfMzAwKQorI2RlZmluZSBBVURJVF9BUkNIX0kzODYgKEVNXzM4NnxfX0FVRElUX0FSQ0hfTEUpCisjZGVmaW5lIEFVRElUX0FSQ0hfSUE2NCAoRU1fSUFfNjR8X19BVURJVF9BUkNIXzY0QklUfF9fQVVESVRfQVJDSF9MRSkKKyNkZWZpbmUgQVVESVRfQVJDSF9NMzJSIChFTV9NMzJSKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgQVVESVRfQVJDSF9NNjhLIChFTV82OEspCisjZGVmaW5lIEFVRElUX0FSQ0hfTUlQUyAoRU1fTUlQUykKKyNkZWZpbmUgQVVESVRfQVJDSF9NSVBTRUwgKEVNX01JUFN8X19BVURJVF9BUkNIX0xFKQorI2RlZmluZSBBVURJVF9BUkNIX01JUFM2NCAoRU1fTUlQU3xfX0FVRElUX0FSQ0hfNjRCSVQpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBBVURJVF9BUkNIX01JUFNFTDY0IChFTV9NSVBTfF9fQVVESVRfQVJDSF82NEJJVHxfX0FVRElUX0FSQ0hfTEUpCisjZGVmaW5lIEFVRElUX0FSQ0hfUEFSSVNDIChFTV9QQVJJU0MpCisjZGVmaW5lIEFVRElUX0FSQ0hfUEFSSVNDNjQgKEVNX1BBUklTQ3xfX0FVRElUX0FSQ0hfNjRCSVQpCisjZGVmaW5lIEFVRElUX0FSQ0hfUFBDIChFTV9QUEMpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBBVURJVF9BUkNIX1BQQzY0IChFTV9QUEM2NHxfX0FVRElUX0FSQ0hfNjRCSVQpCisjZGVmaW5lIEFVRElUX0FSQ0hfUzM5MCAoRU1fUzM5MCkKKyNkZWZpbmUgQVVESVRfQVJDSF9TMzkwWCAoRU1fUzM5MHxfX0FVRElUX0FSQ0hfNjRCSVQpCisjZGVmaW5lIEFVRElUX0FSQ0hfU0ggKEVNX1NIKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgQVVESVRfQVJDSF9TSEVMIChFTV9TSHxfX0FVRElUX0FSQ0hfTEUpCisjZGVmaW5lIEFVRElUX0FSQ0hfU0g2NCAoRU1fU0h8X19BVURJVF9BUkNIXzY0QklUKQorI2RlZmluZSBBVURJVF9BUkNIX1NIRUw2NCAoRU1fU0h8X19BVURJVF9BUkNIXzY0QklUfF9fQVVESVRfQVJDSF9MRSkKKyNkZWZpbmUgQVVESVRfQVJDSF9TUEFSQyAoRU1fU1BBUkMpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBBVURJVF9BUkNIX1NQQVJDNjQgKEVNX1NQQVJDVjl8X19BVURJVF9BUkNIXzY0QklUKQorI2RlZmluZSBBVURJVF9BUkNIX1g4Nl82NCAoRU1fWDg2XzY0fF9fQVVESVRfQVJDSF82NEJJVHxfX0FVRElUX0FSQ0hfTEUpCisjZGVmaW5lIEFVRElUX1BFUk1fRVhFQyAxCisjZGVmaW5lIEFVRElUX1BFUk1fV1JJVEUgMgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgQVVESVRfUEVSTV9SRUFEIDQKKyNkZWZpbmUgQVVESVRfUEVSTV9BVFRSIDgKK3N0cnVjdCBhdWRpdF9zdGF0dXMgeworIF9fdTMyIG1hc2s7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTMyIGVuYWJsZWQ7CisgX191MzIgZmFpbHVyZTsKKyBfX3UzMiBwaWQ7CisgX191MzIgcmF0ZV9saW1pdDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MzIgYmFja2xvZ19saW1pdDsKKyBfX3UzMiBsb3N0OworIF9fdTMyIGJhY2tsb2c7Cit9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK3N0cnVjdCBhdWRpdF90dHlfc3RhdHVzIHsKKyBfX3UzMiBlbmFibGVkOworfTsKK3N0cnVjdCBhdWRpdF9ydWxlX2RhdGEgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UzMiBmbGFnczsKKyBfX3UzMiBhY3Rpb247CisgX191MzIgZmllbGRfY291bnQ7CisgX191MzIgbWFza1tBVURJVF9CSVRNQVNLX1NJWkVdOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UzMiBmaWVsZHNbQVVESVRfTUFYX0ZJRUxEU107CisgX191MzIgdmFsdWVzW0FVRElUX01BWF9GSUVMRFNdOworIF9fdTMyIGZpZWxkZmxhZ3NbQVVESVRfTUFYX0ZJRUxEU107CisgX191MzIgYnVmbGVuOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBjaGFyIGJ1ZlswXTsKK307CitzdHJ1Y3QgYXVkaXRfcnVsZSB7CisgX191MzIgZmxhZ3M7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTMyIGFjdGlvbjsKKyBfX3UzMiBmaWVsZF9jb3VudDsKKyBfX3UzMiBtYXNrW0FVRElUX0JJVE1BU0tfU0laRV07CisgX191MzIgZmllbGRzW0FVRElUX01BWF9GSUVMRFNdOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UzMiB2YWx1ZXNbQVVESVRfTUFYX0ZJRUxEU107Cit9OworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvYXV0b19mcy5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2F1dG9fZnMuaAppbmRleCAzNzExY2M0Li41OTE3ZGZkIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvYXV0b19mcy5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9hdXRvX2ZzLmgKQEAgLTcsNTAgKzcsNTUgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9MSU5VWF9BVVRPX0ZTX0gKICNkZWZpbmUgX0xJTlVYX0FVVE9fRlNfSAotCiAjaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KLQogI2RlZmluZSBBVVRPRlNfUFJPVE9fVkVSU0lPTiAzCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFVVE9GU19NQVhfUFJPVE9fVkVSU0lPTiBBVVRPRlNfUFJPVE9fVkVSU0lPTgogI2RlZmluZSBBVVRPRlNfTUlOX1BST1RPX1ZFUlNJT04gQVVUT0ZTX1BST1RPX1ZFUlNJT04KLQogI2lmIGRlZmluZWQoX19zcGFyY19fKSB8fCBkZWZpbmVkKF9fbWlwc19fKSB8fCBkZWZpbmVkKF9feDg2XzY0X18pIHx8IGRlZmluZWQoX19wb3dlcnBjX18pIHx8IGRlZmluZWQoX19zMzkwX18pCiB0eXBlZGVmIHVuc2lnbmVkIGludCBhdXRvZnNfd3F0X3Q7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2Vsc2UKIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBhdXRvZnNfd3F0X3Q7CiAjZW5kaWYKLQotI2RlZmluZSBhdXRvZnNfcHR5cGVfbWlzc2luZyAwICAKLSNkZWZpbmUgYXV0b2ZzX3B0eXBlX2V4cGlyZSAxICAKLQorI2RlZmluZSBhdXRvZnNfcHR5cGVfbWlzc2luZyAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBhdXRvZnNfcHR5cGVfZXhwaXJlIDEKIHN0cnVjdCBhdXRvZnNfcGFja2V0X2hkciB7CiAgaW50IHByb3RvX3ZlcnNpb247CiAgaW50IHR5cGU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKLQogc3RydWN0IGF1dG9mc19wYWNrZXRfbWlzc2luZyB7CiAgc3RydWN0IGF1dG9mc19wYWNrZXRfaGRyIGhkcjsKICBhdXRvZnNfd3F0X3Qgd2FpdF9xdWV1ZV90b2tlbjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgaW50IGxlbjsKICBjaGFyIG5hbWVbTkFNRV9NQVgrMV07CiB9OwotCiBzdHJ1Y3QgYXV0b2ZzX3BhY2tldF9leHBpcmUgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgYXV0b2ZzX3BhY2tldF9oZHIgaGRyOwogIGludCBsZW47CiAgY2hhciBuYW1lW05BTUVfTUFYKzFdOwogfTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQVVUT0ZTX0lPQ19SRUFEWSBfSU8oMHg5MywweDYwKQogI2RlZmluZSBBVVRPRlNfSU9DX0ZBSUwgX0lPKDB4OTMsMHg2MSkKICNkZWZpbmUgQVVUT0ZTX0lPQ19DQVRBVE9OSUMgX0lPKDB4OTMsMHg2MikKICNkZWZpbmUgQVVUT0ZTX0lPQ19QUk9UT1ZFUiBfSU9SKDB4OTMsMHg2MyxpbnQpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBVVRPRlNfSU9DX1NFVFRJTUVPVVQgX0lPV1IoMHg5MywweDY0LHVuc2lnbmVkIGxvbmcpCiAjZGVmaW5lIEFVVE9GU19JT0NfRVhQSVJFIF9JT1IoMHg5MywweDY1LHN0cnVjdCBhdXRvZnNfcGFja2V0X2V4cGlyZSkKLQogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvYXV0b2NvbmYuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9hdXRvY29uZi5oCmluZGV4IDMwNmJmMTIuLjY4NmY1NGIgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9hdXRvY29uZi5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9hdXRvY29uZi5oCkBAIC03LDExICs3LDE3IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBMSU5VWF9BVVRPQ09ORl9DUkFQX0dPRVNfSEVSRQogI2RlZmluZSBMSU5VWF9BVVRPQ09ORl9DUkFQX0dPRVNfSEVSRQotCiAjZGVmaW5lIEFVVE9DT05GX0lOQ0xVREVECi0KICNlbmRpZgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9hdXh2ZWMuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9hdXh2ZWMuaAppbmRleCBmOGEwNzAxLi44MGQxMDIyIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvYXV4dmVjLmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2F1eHZlYy5oCkBAIC03LDM0ICs3LDE4IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfTElOVVhfQVVYVkVDX0gKICNkZWZpbmUgX0xJTlVYX0FVWFZFQ19ICi0KLSNpbmNsdWRlIDxhc20vYXV4dmVjLmg+Ci0KLSNkZWZpbmUgQVRfTlVMTCAwICAKLSNkZWZpbmUgQVRfSUdOT1JFIDEgIAotI2RlZmluZSBBVF9FWEVDRkQgMiAgCi0jZGVmaW5lIEFUX1BIRFIgMyAgCi0jZGVmaW5lIEFUX1BIRU5UIDQgIAotI2RlZmluZSBBVF9QSE5VTSA1ICAKLSNkZWZpbmUgQVRfUEFHRVNaIDYgIAotI2RlZmluZSBBVF9CQVNFIDcgIAotI2RlZmluZSBBVF9GTEFHUyA4ICAKLSNkZWZpbmUgQVRfRU5UUlkgOSAgCi0jZGVmaW5lIEFUX05PVEVMRiAxMCAgCi0jZGVmaW5lIEFUX1VJRCAxMSAgCi0jZGVmaW5lIEFUX0VVSUQgMTIgIAotI2RlZmluZSBBVF9HSUQgMTMgIAotI2RlZmluZSBBVF9FR0lEIDE0ICAKLSNkZWZpbmUgQVRfUExBVEZPUk0gMTUgIAotI2RlZmluZSBBVF9IV0NBUCAxNiAgCi0jZGVmaW5lIEFUX0NMS1RDSyAxNyAgCi0KLSNkZWZpbmUgQVRfU0VDVVJFIDIzICAKLQotI2RlZmluZSBBVF9WRUNUT1JfU0laRSA0NCAgCi0KKyNpbmNsdWRlIDx1YXBpL2xpbnV4L2F1eHZlYy5oPgorI2RlZmluZSBBVF9WRUNUT1JfU0laRV9CQVNFIDE5CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvYmFja2luZy1kZXYuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9iYWNraW5nLWRldi5oCmluZGV4IDQ5OTZkMmMuLjIwMjRiZGMgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9iYWNraW5nLWRldi5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9iYWNraW5nLWRldi5oCkBAIC03LDQ3ICs3LDU1IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfTElOVVhfQkFDS0lOR19ERVZfSAogI2RlZmluZSBfTElOVVhfQkFDS0lOR19ERVZfSAotCiAjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgotCiBlbnVtIGJkaV9zdGF0ZSB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIEJESV9wZGZsdXNoLAogIEJESV93cml0ZV9jb25nZXN0ZWQsCiAgQkRJX3JlYWRfY29uZ2VzdGVkLAogIEJESV91bnVzZWQsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKLQogdHlwZWRlZiBpbnQgKGNvbmdlc3RlZF9mbikodm9pZCAqLCBpbnQpOwotCiBzdHJ1Y3QgYmFja2luZ19kZXZfaW5mbyB7CiAgdW5zaWduZWQgbG9uZyByYV9wYWdlczsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgbG9uZyBzdGF0ZTsKICB1bnNpZ25lZCBpbnQgY2FwYWJpbGl0aWVzOwogIGNvbmdlc3RlZF9mbiAqY29uZ2VzdGVkX2ZuOwogIHZvaWQgKmNvbmdlc3RlZF9kYXRhOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB2b2lkICgqdW5wbHVnX2lvX2ZuKShzdHJ1Y3QgYmFja2luZ19kZXZfaW5mbyAqLCBzdHJ1Y3QgcGFnZSAqKTsKICB2b2lkICp1bnBsdWdfaW9fZGF0YTsKIH07Ci0KLSNkZWZpbmUgQkRJX0NBUF9OT19BQ0NUX0RJUlRZIDB4MDAwMDAwMDEgIAotI2RlZmluZSBCRElfQ0FQX05PX1dSSVRFQkFDSyAweDAwMDAwMDAyICAKLSNkZWZpbmUgQkRJX0NBUF9NQVBfQ09QWSAweDAwMDAwMDA0ICAKLSNkZWZpbmUgQkRJX0NBUF9NQVBfRElSRUNUIDB4MDAwMDAwMDggIAotI2RlZmluZSBCRElfQ0FQX1JFQURfTUFQIDB4MDAwMDAwMTAgIAotI2RlZmluZSBCRElfQ0FQX1dSSVRFX01BUCAweDAwMDAwMDIwICAKLSNkZWZpbmUgQkRJX0NBUF9FWEVDX01BUCAweDAwMDAwMDQwICAKKyNkZWZpbmUgQkRJX0NBUF9OT19BQ0NUX0RJUlRZIDB4MDAwMDAwMDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEJESV9DQVBfTk9fV1JJVEVCQUNLIDB4MDAwMDAwMDIKKyNkZWZpbmUgQkRJX0NBUF9NQVBfQ09QWSAweDAwMDAwMDA0CisjZGVmaW5lIEJESV9DQVBfTUFQX0RJUkVDVCAweDAwMDAwMDA4CisjZGVmaW5lIEJESV9DQVBfUkVBRF9NQVAgMHgwMDAwMDAxMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgQkRJX0NBUF9XUklURV9NQVAgMHgwMDAwMDAyMAorI2RlZmluZSBCRElfQ0FQX0VYRUNfTUFQIDB4MDAwMDAwNDAKICNkZWZpbmUgQkRJX0NBUF9WTUZMQUdTICAgKEJESV9DQVBfUkVBRF9NQVAgfCBCRElfQ0FQX1dSSVRFX01BUCB8IEJESV9DQVBfRVhFQ19NQVApCi0KICNpZiBkZWZpbmVkKFZNX01BWVJFQUQpICYmIEJESV9DQVBfUkVBRF9NQVAgIT0gKFZNX01BWVJFQUQgfHwgQkRJX0NBUF9XUklURV9NQVAgIT0gKFZNX01BWVdSSVRFIHx8IEJESV9DQVBfRVhFQ19NQVAgIT0gVk1fTUFZRVhFQykpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2Vycm9yIHBsZWFzZSBjaGFuZ2UgYmFja2luZ19kZXZfaW5mbzo6Y2FwYWJpbGl0aWVzIGZsYWdzCiAjZW5kaWYKLQogI2RlZmluZSBiZGlfY2FwX3dyaXRlYmFja19kaXJ0eShiZGkpICAgKCEoKGJkaSktPmNhcGFiaWxpdGllcyAmIEJESV9DQVBfTk9fV1JJVEVCQUNLKSkKICNkZWZpbmUgYmRpX2NhcF9hY2NvdW50X2RpcnR5KGJkaSkgICAoISgoYmRpKS0+Y2FwYWJpbGl0aWVzICYgQkRJX0NBUF9OT19BQ0NUX0RJUlRZKSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIG1hcHBpbmdfY2FwX3dyaXRlYmFja19kaXJ0eShtYXBwaW5nKSAgIGJkaV9jYXBfd3JpdGViYWNrX2RpcnR5KChtYXBwaW5nKS0+YmFja2luZ19kZXZfaW5mbykKICNkZWZpbmUgbWFwcGluZ19jYXBfYWNjb3VudF9kaXJ0eShtYXBwaW5nKSAgIGJkaV9jYXBfYWNjb3VudF9kaXJ0eSgobWFwcGluZyktPmJhY2tpbmdfZGV2X2luZm8pCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9iaW5kZXIuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9iaW5kZXIuaAppbmRleCBiOTdlYWZiLi5jNTYwNjUzIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvYmluZGVyLmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2JpbmRlci5oCkBAIC03LDE4MCArNywxNjUgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9MSU5VWF9CSU5ERVJfSAogI2RlZmluZSBfTElOVVhfQklOREVSX0gKLQogI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+Ci0KICNkZWZpbmUgQl9QQUNLX0NIQVJTKGMxLCBjMiwgYzMsIGM0KSAgICgoKChjMSk8PDI0KSkgfCAoKChjMik8PDE2KSkgfCAoKChjMyk8PDgpKSB8IChjNCkpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBCX1RZUEVfTEFSR0UgMHg4NQotCiBlbnVtIHsKICBCSU5ERVJfVFlQRV9CSU5ERVIgPSBCX1BBQ0tfQ0hBUlMoJ3MnLCAnYicsICcqJywgQl9UWVBFX0xBUkdFKSwKICBCSU5ERVJfVFlQRV9XRUFLX0JJTkRFUiA9IEJfUEFDS19DSEFSUygndycsICdiJywgJyonLCBCX1RZUEVfTEFSR0UpLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBCSU5ERVJfVFlQRV9IQU5ETEUgPSBCX1BBQ0tfQ0hBUlMoJ3MnLCAnaCcsICcqJywgQl9UWVBFX0xBUkdFKSwKICBCSU5ERVJfVFlQRV9XRUFLX0hBTkRMRSA9IEJfUEFDS19DSEFSUygndycsICdoJywgJyonLCBCX1RZUEVfTEFSR0UpLAogIEJJTkRFUl9UWVBFX0ZEID0gQl9QQUNLX0NIQVJTKCdmJywgJ2QnLCAnKicsIEJfVFlQRV9MQVJHRSksCiB9OwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogZW51bSB7CiAgRkxBVF9CSU5ERVJfRkxBR19QUklPUklUWV9NQVNLID0gMHhmZiwKICBGTEFUX0JJTkRFUl9GTEFHX0FDQ0VQVFNfRkRTID0gMHgxMDAsCiB9OwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IGZsYXRfYmluZGVyX29iamVjdCB7Ci0KICB1bnNpZ25lZCBsb25nIHR5cGU7CiAgdW5zaWduZWQgbG9uZyBmbGFnczsKLQogIHVuaW9uIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdm9pZCAqYmluZGVyOwogIHNpZ25lZCBsb25nIGhhbmRsZTsKICB9OwotCiAgdm9pZCAqY29va2llOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07Ci0KIHN0cnVjdCBiaW5kZXJfd3JpdGVfcmVhZCB7CiAgc2lnbmVkIGxvbmcgd3JpdGVfc2l6ZTsKICBzaWduZWQgbG9uZyB3cml0ZV9jb25zdW1lZDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgbG9uZyB3cml0ZV9idWZmZXI7CiAgc2lnbmVkIGxvbmcgcmVhZF9zaXplOwogIHNpZ25lZCBsb25nIHJlYWRfY29uc3VtZWQ7CiAgdW5zaWduZWQgbG9uZyByZWFkX2J1ZmZlcjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwotCiBzdHJ1Y3QgYmluZGVyX3ZlcnNpb24gewotCiAgc2lnbmVkIGxvbmcgcHJvdG9jb2xfdmVyc2lvbjsKIH07Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEJJTkRFUl9DVVJSRU5UX1BST1RPQ09MX1ZFUlNJT04gNwotCiAjZGVmaW5lIEJJTkRFUl9XUklURV9SRUFEIF9JT1dSKCdiJywgMSwgc3RydWN0IGJpbmRlcl93cml0ZV9yZWFkKQogI2RlZmluZSBCSU5ERVJfU0VUX0lETEVfVElNRU9VVCBfSU9XKCdiJywgMywgaW50NjRfdCkKICNkZWZpbmUgQklOREVSX1NFVF9NQVhfVEhSRUFEUyBfSU9XKCdiJywgNSwgc2l6ZV90KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQklOREVSX1NFVF9JRExFX1BSSU9SSVRZIF9JT1coJ2InLCA2LCBpbnQpCiAjZGVmaW5lIEJJTkRFUl9TRVRfQ09OVEVYVF9NR1IgX0lPVygnYicsIDcsIGludCkKICNkZWZpbmUgQklOREVSX1RIUkVBRF9FWElUIF9JT1coJ2InLCA4LCBpbnQpCiAjZGVmaW5lIEJJTkRFUl9WRVJTSU9OIF9JT1dSKCdiJywgOSwgc3RydWN0IGJpbmRlcl92ZXJzaW9uKQotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogZW51bSB0cmFuc2FjdGlvbl9mbGFncyB7CiAgVEZfT05FX1dBWSA9IDB4MDEsCiAgVEZfUk9PVF9PQkpFQ1QgPSAweDA0LAogIFRGX1NUQVRVU19DT0RFID0gMHgwOCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVEZfQUNDRVBUX0ZEUyA9IDB4MTAsCiB9OwotCiBzdHJ1Y3QgYmluZGVyX3RyYW5zYWN0aW9uX2RhdGEgewotCiAgdW5pb24geworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzaXplX3QgaGFuZGxlOwogIHZvaWQgKnB0cjsKICB9IHRhcmdldDsKICB2b2lkICpjb29raWU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGludCBjb2RlOwotCiAgdW5zaWduZWQgaW50IGZsYWdzOwogIHBpZF90IHNlbmRlcl9waWQ7CiAgdWlkX3Qgc2VuZGVyX2V1aWQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHNpemVfdCBkYXRhX3NpemU7CiAgc2l6ZV90IG9mZnNldHNfc2l6ZTsKLQogIHVuaW9uIHsKICBzdHJ1Y3QgewotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGNvbnN0IHZvaWQgKmJ1ZmZlcjsKLQogIGNvbnN0IHZvaWQgKm9mZnNldHM7CiAgfSBwdHI7CiAgdWludDhfdCBidWZbOF07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIH0gZGF0YTsKIH07Ci0KIHN0cnVjdCBiaW5kZXJfcHRyX2Nvb2tpZSB7CiAgdm9pZCAqcHRyOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB2b2lkICpjb29raWU7CiB9OwotCiBzdHJ1Y3QgYmluZGVyX3ByaV9kZXNjIHsKICBpbnQgcHJpb3JpdHk7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGludCBkZXNjOwogfTsKLQogc3RydWN0IGJpbmRlcl9wcmlfcHRyX2Nvb2tpZSB7CiAgaW50IHByaW9yaXR5OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB2b2lkICpwdHI7CiAgdm9pZCAqY29va2llOwogfTsKLQogZW51bSBCaW5kZXJEcml2ZXJSZXR1cm5Qcm90b2NvbCB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIEJSX0VSUk9SID0gX0lPUl9CQUQoJ3InLCAwLCBpbnQpLAotCiAgQlJfT0sgPSBfSU8oJ3InLCAxKSwKLQogIEJSX1RSQU5TQUNUSU9OID0gX0lPUl9CQUQoJ3InLCAyLCBzdHJ1Y3QgYmluZGVyX3RyYW5zYWN0aW9uX2RhdGEpLAogIEJSX1JFUExZID0gX0lPUl9CQUQoJ3InLCAzLCBzdHJ1Y3QgYmluZGVyX3RyYW5zYWN0aW9uX2RhdGEpLAotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIEJSX0FDUVVJUkVfUkVTVUxUID0gX0lPUl9CQUQoJ3InLCA0LCBpbnQpLAotCiAgQlJfREVBRF9SRVBMWSA9IF9JTygncicsIDUpLAotCiAgQlJfVFJBTlNBQ1RJT05fQ09NUExFVEUgPSBfSU8oJ3InLCA2KSwKLQogIEJSX0lOQ1JFRlMgPSBfSU9SX0JBRCgncicsIDcsIHN0cnVjdCBiaW5kZXJfcHRyX2Nvb2tpZSksCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIEJSX0FDUVVJUkUgPSBfSU9SX0JBRCgncicsIDgsIHN0cnVjdCBiaW5kZXJfcHRyX2Nvb2tpZSksCiAgQlJfUkVMRUFTRSA9IF9JT1JfQkFEKCdyJywgOSwgc3RydWN0IGJpbmRlcl9wdHJfY29va2llKSwKICBCUl9ERUNSRUZTID0gX0lPUl9CQUQoJ3InLCAxMCwgc3RydWN0IGJpbmRlcl9wdHJfY29va2llKSwKLQogIEJSX0FUVEVNUFRfQUNRVUlSRSA9IF9JT1JfQkFEKCdyJywgMTEsIHN0cnVjdCBiaW5kZXJfcHJpX3B0cl9jb29raWUpLAotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIEJSX05PT1AgPSBfSU8oJ3InLCAxMiksCi0KICBCUl9TUEFXTl9MT09QRVIgPSBfSU8oJ3InLCAxMyksCi0KICBCUl9GSU5JU0hFRCA9IF9JTygncicsIDE0KSwKLQogIEJSX0RFQURfQklOREVSID0gX0lPUl9CQUQoJ3InLCAxNSwgdm9pZCAqKSwKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBCUl9DTEVBUl9ERUFUSF9OT1RJRklDQVRJT05fRE9ORSA9IF9JT1JfQkFEKCdyJywgMTYsIHZvaWQgKiksCi0KICBCUl9GQUlMRURfUkVQTFkgPSBfSU8oJ3InLCAxNyksCi0KIH07Ci0KIGVudW0gQmluZGVyRHJpdmVyQ29tbWFuZFByb3RvY29sIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQkNfVFJBTlNBQ1RJT04gPSBfSU9XX0JBRCgnYycsIDAsIHN0cnVjdCBiaW5kZXJfdHJhbnNhY3Rpb25fZGF0YSksCiAgQkNfUkVQTFkgPSBfSU9XX0JBRCgnYycsIDEsIHN0cnVjdCBiaW5kZXJfdHJhbnNhY3Rpb25fZGF0YSksCi0KICBCQ19BQ1FVSVJFX1JFU1VMVCA9IF9JT1dfQkFEKCdjJywgMiwgaW50KSwKLQogIEJDX0ZSRUVfQlVGRkVSID0gX0lPV19CQUQoJ2MnLCAzLCBpbnQpLAotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIEJDX0lOQ1JFRlMgPSBfSU9XX0JBRCgnYycsIDQsIGludCksCiAgQkNfQUNRVUlSRSA9IF9JT1dfQkFEKCdjJywgNSwgaW50KSwKICBCQ19SRUxFQVNFID0gX0lPV19CQUQoJ2MnLCA2LCBpbnQpLAogIEJDX0RFQ1JFRlMgPSBfSU9XX0JBRCgnYycsIDcsIGludCksCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQkNfSU5DUkVGU19ET05FID0gX0lPV19CQUQoJ2MnLCA4LCBzdHJ1Y3QgYmluZGVyX3B0cl9jb29raWUpLAogIEJDX0FDUVVJUkVfRE9ORSA9IF9JT1dfQkFEKCdjJywgOSwgc3RydWN0IGJpbmRlcl9wdHJfY29va2llKSwKLQogIEJDX0FUVEVNUFRfQUNRVUlSRSA9IF9JT1dfQkFEKCdjJywgMTAsIHN0cnVjdCBiaW5kZXJfcHJpX2Rlc2MpLAotCiAgQkNfUkVHSVNURVJfTE9PUEVSID0gX0lPKCdjJywgMTEpLAotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIEJDX0VOVEVSX0xPT1BFUiA9IF9JTygnYycsIDEyKSwKICBCQ19FWElUX0xPT1BFUiA9IF9JTygnYycsIDEzKSwKLQogIEJDX1JFUVVFU1RfREVBVEhfTk9USUZJQ0FUSU9OID0gX0lPV19CQUQoJ2MnLCAxNCwgc3RydWN0IGJpbmRlcl9wdHJfY29va2llKSwKLQogIEJDX0NMRUFSX0RFQVRIX05PVElGSUNBVElPTiA9IF9JT1dfQkFEKCdjJywgMTUsIHN0cnVjdCBiaW5kZXJfcHRyX2Nvb2tpZSksCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQkNfREVBRF9CSU5ERVJfRE9ORSA9IF9JT1dfQkFEKCdjJywgMTYsIHZvaWQgKiksCi0KIH07Ci0KICNlbmRpZgotCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvYmluZm10cy5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2JpbmZtdHMuaAppbmRleCAzMzM1OTg1Li5iOTNmZDA5IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvYmluZm10cy5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9iaW5mbXRzLmgKQEAgLTcsMTcgKzcsMjAgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9MSU5VWF9CSU5GTVRTX0gKICNkZWZpbmUgX0xJTlVYX0JJTkZNVFNfSAotCiAjaW5jbHVkZSA8bGludXgvY2FwYWJpbGl0eS5oPgotCiBzdHJ1Y3QgcHRfcmVnczsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTUFYX0FSR19QQUdFUyAzMgotCiAjZGVmaW5lIEJJTlBSTV9CVUZfU0laRSAxMjgKLQogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvYmlvLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvYmlvLmgKaW5kZXggNGU5MTMxNC4uYmY4M2E2NiAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2Jpby5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9iaW8uaApAQCAtNywxNjUgKzcsMTYwIEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfX0xJTlVYX0JJT19ICiAjZGVmaW5lIF9fTElOVVhfQklPX0gKLQogI2luY2x1ZGUgPGxpbnV4L2hpZ2htZW0uaD4KICNpbmNsdWRlIDxsaW51eC9tZW1wb29sLmg+CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2luY2x1ZGUgPGxpbnV4L2lvcHJpby5oPgotCiAjaW5jbHVkZSA8YXNtL2lvLmg+Ci0KICNpZiBkZWZpbmVkKEJJT19WTUVSR0VfTUFYX1NJWkUpICYmIGRlZmluZWQoQklPX1ZNRVJHRV9CT1VOREFSWSkKICNkZWZpbmUgQklPVkVDX1ZJUlRfU1RBUlRfU0laRSh4KSAoYnZlY190b19waHlzKHgpICYgKEJJT19WTUVSR0VfQk9VTkRBUlkgLSAxKSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEJJT1ZFQ19WSVJUX09WRVJTSVpFKHgpICgoeCkgPiBCSU9fVk1FUkdFX01BWF9TSVpFKQogI2Vsc2UKICNkZWZpbmUgQklPVkVDX1ZJUlRfU1RBUlRfU0laRSh4KSAwCiAjZGVmaW5lIEJJT1ZFQ19WSVJUX09WRVJTSVpFKHgpIDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZW5kaWYKLQogI2lmbmRlZiBCSU9fVk1FUkdFX0JPVU5EQVJZCiAjZGVmaW5lIEJJT19WTUVSR0VfQk9VTkRBUlkgMAogI2VuZGlmCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEJJT19ERUJVRwotCiAjaWZkZWYgQklPX0RFQlVHCiAjZGVmaW5lIEJJT19CVUdfT04gQlVHX09OCiAjZWxzZQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQklPX0JVR19PTgogI2VuZGlmCi0KICNkZWZpbmUgQklPX01BWF9QQUdFUyAyNTYKICNkZWZpbmUgQklPX01BWF9TSVpFIChCSU9fTUFYX1BBR0VTIDw8IFBBR0VfQ0FDSEVfU0hJRlQpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBCSU9fTUFYX1NFQ1RPUlMgKEJJT19NQVhfU0laRSA+PiA5KQotCiBzdHJ1Y3QgYmlvX3ZlYyB7CiAgc3RydWN0IHBhZ2UgKmJ2X3BhZ2U7CiAgdW5zaWduZWQgaW50IGJ2X2xlbjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgaW50IGJ2X29mZnNldDsKIH07Ci0KIHN0cnVjdCBiaW9fc2V0Owogc3RydWN0IGJpbzsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB0eXBlZGVmIGludCAoYmlvX2VuZF9pb190KSAoc3RydWN0IGJpbyAqLCB1bnNpZ25lZCBpbnQsIGludCk7CiB0eXBlZGVmIHZvaWQgKGJpb19kZXN0cnVjdG9yX3QpIChzdHJ1Y3QgYmlvICopOwotCiBzdHJ1Y3QgYmlvIHsKICBzZWN0b3JfdCBiaV9zZWN0b3I7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCBiaW8gKmJpX25leHQ7CiAgc3RydWN0IGJsb2NrX2RldmljZSAqYmlfYmRldjsKICB1bnNpZ25lZCBsb25nIGJpX2ZsYWdzOwogIHVuc2lnbmVkIGxvbmcgYmlfcnc7Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgc2hvcnQgYmlfdmNudDsKICB1bnNpZ25lZCBzaG9ydCBiaV9pZHg7Ci0KICB1bnNpZ25lZCBzaG9ydCBiaV9waHlzX3NlZ21lbnRzOwotCiAgdW5zaWduZWQgc2hvcnQgYmlfaHdfc2VnbWVudHM7Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgaW50IGJpX3NpemU7Ci0KICB1bnNpZ25lZCBpbnQgYmlfaHdfZnJvbnRfc2l6ZTsKICB1bnNpZ25lZCBpbnQgYmlfaHdfYmFja19zaXplOwotCiAgdW5zaWduZWQgaW50IGJpX21heF92ZWNzOwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCBiaW9fdmVjICpiaV9pb192ZWM7Ci0KICBiaW9fZW5kX2lvX3QgKmJpX2VuZF9pbzsKICBhdG9taWNfdCBiaV9jbnQ7Ci0KICB2b2lkICpiaV9wcml2YXRlOwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGJpb19kZXN0cnVjdG9yX3QgKmJpX2Rlc3RydWN0b3I7CiB9OwotCi0jZGVmaW5lIEJJT19VUFRPREFURSAwICAKLSNkZWZpbmUgQklPX1JXX0JMT0NLIDEgIAotI2RlZmluZSBCSU9fRU9GIDIgIAotI2RlZmluZSBCSU9fU0VHX1ZBTElEIDMgIAotI2RlZmluZSBCSU9fQ0xPTkVEIDQgIAotI2RlZmluZSBCSU9fQk9VTkNFRCA1ICAKLSNkZWZpbmUgQklPX1VTRVJfTUFQUEVEIDYgIAotI2RlZmluZSBCSU9fRU9QTk9UU1VQUCA3ICAKKyNkZWZpbmUgQklPX1VQVE9EQVRFIDAKKyNkZWZpbmUgQklPX1JXX0JMT0NLIDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEJJT19FT0YgMgorI2RlZmluZSBCSU9fU0VHX1ZBTElEIDMKKyNkZWZpbmUgQklPX0NMT05FRCA0CisjZGVmaW5lIEJJT19CT1VOQ0VEIDUKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEJJT19VU0VSX01BUFBFRCA2CisjZGVmaW5lIEJJT19FT1BOT1RTVVBQIDcKICNkZWZpbmUgYmlvX2ZsYWdnZWQoYmlvLCBmbGFnKSAoKGJpbyktPmJpX2ZsYWdzICYgKDEgPDwgKGZsYWcpKSkKLQogI2RlZmluZSBCSU9fUE9PTF9CSVRTICg0KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQklPX1BPT0xfT0ZGU0VUIChCSVRTX1BFUl9MT05HIC0gQklPX1BPT0xfQklUUykKICNkZWZpbmUgQklPX1BPT0xfTUFTSyAoMVVMIDw8IEJJT19QT09MX09GRlNFVCkKLSNkZWZpbmUgQklPX1BPT0xfSURYKGJpbykgKChiaW8pLT5iaV9mbGFncyA+PiBCSU9fUE9PTF9PRkZTRVQpIAotCisjZGVmaW5lIEJJT19QT09MX0lEWChiaW8pICgoYmlvKS0+YmlfZmxhZ3MgPj4gQklPX1BPT0xfT0ZGU0VUKQogI2RlZmluZSBCSU9fUlcgMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQklPX1JXX0FIRUFEIDEKICNkZWZpbmUgQklPX1JXX0JBUlJJRVIgMgogI2RlZmluZSBCSU9fUldfRkFJTEZBU1QgMwogI2RlZmluZSBCSU9fUldfU1lOQyA0Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEJJT19QUklPX1NISUZUICg4ICogc2l6ZW9mKHVuc2lnbmVkIGxvbmcpIC0gSU9QUklPX0JJVFMpCiAjZGVmaW5lIGJpb19wcmlvKGJpbykgKChiaW8pLT5iaV9ydyA+PiBCSU9fUFJJT19TSElGVCkKICNkZWZpbmUgYmlvX3ByaW9fdmFsaWQoYmlvKSBpb3ByaW9fdmFsaWQoYmlvX3ByaW8oYmlvKSkKLQogI2RlZmluZSBiaW9fc2V0X3ByaW8oYmlvLCBwcmlvKSBkbyB7ICAgV0FSTl9PTihwcmlvID49ICgxIDw8IElPUFJJT19CSVRTKSk7ICAgKGJpbyktPmJpX3J3ICY9ICgoMVVMIDw8IEJJT19QUklPX1NISUZUKSAtIDEpOyAgIChiaW8pLT5iaV9ydyB8PSAoKHVuc2lnbmVkIGxvbmcpIChwcmlvKSA8PCBCSU9fUFJJT19TSElGVCk7ICB9IHdoaWxlICgwKQotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBiaW9faW92ZWNfaWR4KGJpbywgaWR4KSAoJigoYmlvKS0+YmlfaW9fdmVjWyhpZHgpXSkpCiAjZGVmaW5lIGJpb19pb3ZlYyhiaW8pIGJpb19pb3ZlY19pZHgoKGJpbyksIChiaW8pLT5iaV9pZHgpCiAjZGVmaW5lIGJpb19wYWdlKGJpbykgYmlvX2lvdmVjKChiaW8pKS0+YnZfcGFnZQogI2RlZmluZSBiaW9fb2Zmc2V0KGJpbykgYmlvX2lvdmVjKChiaW8pKS0+YnZfb2Zmc2V0CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBiaW9fc2VnbWVudHMoYmlvKSAoKGJpbyktPmJpX3ZjbnQgLSAoYmlvKS0+YmlfaWR4KQogI2RlZmluZSBiaW9fc2VjdG9ycyhiaW8pICgoYmlvKS0+Ymlfc2l6ZSA+PiA5KQogI2RlZmluZSBiaW9fY3VyX3NlY3RvcnMoYmlvKSAoYmlvX2lvdmVjKGJpbyktPmJ2X2xlbiA+PiA5KQogI2RlZmluZSBiaW9fZGF0YShiaW8pIChwYWdlX2FkZHJlc3MoYmlvX3BhZ2UoKGJpbykpKSArIGJpb19vZmZzZXQoKGJpbykpKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgYmlvX2JhcnJpZXIoYmlvKSAoKGJpbyktPmJpX3J3ICYgKDEgPDwgQklPX1JXX0JBUlJJRVIpKQogI2RlZmluZSBiaW9fc3luYyhiaW8pICgoYmlvKS0+YmlfcncgJiAoMSA8PCBCSU9fUldfU1lOQykpCiAjZGVmaW5lIGJpb19mYWlsZmFzdChiaW8pICgoYmlvKS0+YmlfcncgJiAoMSA8PCBCSU9fUldfRkFJTEZBU1QpKQogI2RlZmluZSBiaW9fcndfYWhlYWQoYmlvKSAoKGJpbyktPmJpX3J3ICYgKDEgPDwgQklPX1JXX0FIRUFEKSkKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgYmlvX3RvX3BoeXMoYmlvKSAocGFnZV90b19waHlzKGJpb19wYWdlKChiaW8pKSkgKyAodW5zaWduZWQgbG9uZykgYmlvX29mZnNldCgoYmlvKSkpCiAjZGVmaW5lIGJ2ZWNfdG9fcGh5cyhidikgKHBhZ2VfdG9fcGh5cygoYnYpLT5idl9wYWdlKSArICh1bnNpZ25lZCBsb25nKSAoYnYpLT5idl9vZmZzZXQpCi0KICNkZWZpbmUgX19iaW9fa21hcF9hdG9taWMoYmlvLCBpZHgsIGttdHlwZSkgICAoa21hcF9hdG9taWMoYmlvX2lvdmVjX2lkeCgoYmlvKSwgKGlkeCkpLT5idl9wYWdlLCBrbXR5cGUpICsgICBiaW9faW92ZWNfaWR4KChiaW8pLCAoaWR4KSktPmJ2X29mZnNldCkKLQogI2RlZmluZSBfX2Jpb19rdW5tYXBfYXRvbWljKGFkZHIsIGttdHlwZSkga3VubWFwX2F0b21pYyhhZGRyLCBrbXR5cGUpCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fQlZFQ19FTkQoYmlvKSBiaW9faW92ZWNfaWR4KChiaW8pLCAoYmlvKS0+YmlfdmNudCAtIDEpCiAjZGVmaW5lIF9fQlZFQ19TVEFSVChiaW8pIGJpb19pb3ZlY19pZHgoKGJpbyksIChiaW8pLT5iaV9pZHgpCi0KICNpZm5kZWYgQklPVkVDX1BIWVNfTUVSR0VBQkxFCiAjZGVmaW5lIEJJT1ZFQ19QSFlTX01FUkdFQUJMRSh2ZWMxLCB2ZWMyKSAgICgoYnZlY190b19waHlzKCh2ZWMxKSkgKyAodmVjMSktPmJ2X2xlbikgPT0gYnZlY190b19waHlzKCh2ZWMyKSkpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2VuZGlmCi0KICNkZWZpbmUgQklPVkVDX1ZJUlRfTUVSR0VBQkxFKHZlYzEsIHZlYzIpICAgKCgoKGJ2ZWNfdG9fcGh5cygodmVjMSkpICsgKHZlYzEpLT5idl9sZW4pIHwgYnZlY190b19waHlzKCh2ZWMyKSkpICYgKEJJT19WTUVSR0VfQk9VTkRBUlkgLSAxKSkgPT0gMCkKICNkZWZpbmUgX19CSU9fU0VHX0JPVU5EQVJZKGFkZHIxLCBhZGRyMiwgbWFzaykgICAoKChhZGRyMSkgfCAobWFzaykpID09ICgoKGFkZHIyKSAtIDEpIHwgKG1hc2spKSkKICNkZWZpbmUgQklPVkVDX1NFR19CT1VOREFSWShxLCBiMSwgYjIpICAgX19CSU9fU0VHX0JPVU5EQVJZKGJ2ZWNfdG9fcGh5cygoYjEpKSwgYnZlY190b19waHlzKChiMikpICsgKGIyKS0+YnZfbGVuLCAocSktPnNlZ19ib3VuZGFyeV9tYXNrKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQklPX1NFR19CT1VOREFSWShxLCBiMSwgYjIpICAgQklPVkVDX1NFR19CT1VOREFSWSgocSksIF9fQlZFQ19FTkQoKGIxKSksIF9fQlZFQ19TVEFSVCgoYjIpKSkKLQogI2RlZmluZSBiaW9faW9fZXJyb3IoYmlvLCBieXRlcykgYmlvX2VuZGlvKChiaW8pLCAoYnl0ZXMpLCAtRUlPKQotCiAjZGVmaW5lIF9fYmlvX2Zvcl9lYWNoX3NlZ21lbnQoYnZsLCBiaW8sIGksIHN0YXJ0X2lkeCkgICBmb3IgKGJ2bCA9IGJpb19pb3ZlY19pZHgoKGJpbyksIChzdGFydF9pZHgpKSwgaSA9IChzdGFydF9pZHgpOyAgIGkgPCAoYmlvKS0+YmlfdmNudDsgICBidmwrKywgaSsrKQotCiAjZGVmaW5lIGJpb19mb3JfZWFjaF9zZWdtZW50KGJ2bCwgYmlvLCBpKSAgIF9fYmlvX2Zvcl9lYWNoX3NlZ21lbnQoYnZsLCBiaW8sIGksIChiaW8pLT5iaV9pZHgpCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIGJpb19nZXQoYmlvKSBhdG9taWNfaW5jKCYoYmlvKS0+YmlfY250KQotCiBzdHJ1Y3QgYmlvX3BhaXIgewogIHN0cnVjdCBiaW8gYmlvMSwgYmlvMjsKICBzdHJ1Y3QgYmlvX3ZlYyBidjEsIGJ2MjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgYXRvbWljX3QgY250OwogIGludCBlcnJvcjsKIH07Ci0KIHN0cnVjdCByZXF1ZXN0X3F1ZXVlOwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IHNnX2lvdmVjOwotCiAjZGVmaW5lIGJ2ZWNfa21hcF9pcnEoYnZlYywgZmxhZ3MpIChwYWdlX2FkZHJlc3MoKGJ2ZWMpLT5idl9wYWdlKSArIChidmVjKS0+YnZfb2Zmc2V0KQogI2RlZmluZSBidmVjX2t1bm1hcF9pcnEoYnVmLCBmbGFncykgZG8geyAqKGZsYWdzKSA9IDA7IH0gd2hpbGUgKDApCi0KICNkZWZpbmUgX19iaW9fa3VubWFwX2lycShidWYsIGZsYWdzKSBidmVjX2t1bm1hcF9pcnEoYnVmLCBmbGFncykKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIGJpb19rbWFwX2lycShiaW8sIGZsYWdzKSAgIF9fYmlvX2ttYXBfaXJxKChiaW8pLCAoYmlvKS0+YmlfaWR4LCAoZmxhZ3MpKQogI2RlZmluZSBiaW9fa3VubWFwX2lycShidWYsZmxhZ3MpIF9fYmlvX2t1bm1hcF9pcnEoYnVmLCBmbGFncykKICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2JpdG1hcC5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2JpdG1hcC5oCmluZGV4IDI0NmQxNTguLmM0Mzk1OWEgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9iaXRtYXAuaAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvYml0bWFwLmgKQEAgLTcsMTggKzcsMjMgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9fTElOVVhfQklUTUFQX0gKICNkZWZpbmUgX19MSU5VWF9CSVRNQVBfSAotCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwotCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+Ci0KICNkZWZpbmUgQklUTUFQX0xBU1RfV09SRF9NQVNLKG5iaXRzKSAgKCAgICgobmJpdHMpICUgQklUU19QRVJfTE9ORykgPyAgICgxVUw8PCgobmJpdHMpICUgQklUU19QRVJfTE9ORykpLTEgOiB+MFVMICApCi0KICNlbmRpZgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2JpdG9wcy5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2JpdG9wcy5oCmluZGV4IGY4ZGY2MTQuLmE4MzdmZDQgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9iaXRvcHMuaAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvYml0b3BzLmgKQEAgLTcsMTIgKzcsMTggQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9MSU5VWF9CSVRPUFNfSAogI2RlZmluZSBfTElOVVhfQklUT1BTX0gKICNpbmNsdWRlIDxhc20vdHlwZXMuaD4KLQogI2luY2x1ZGUgPGFzbS9iaXRvcHMuaD4KLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2Jsa190eXBlcy5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2Jsa190eXBlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllYzU2NzUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvYmxrX3R5cGVzLmgKQEAgLTAsMCArMSw5OSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX0xJTlVYX0JMS19UWVBFU19ICisjZGVmaW5lIF9fTElOVVhfQkxLX1RZUEVTX0gKK2VudW0gcnFfZmxhZ19iaXRzIHsKKyBfX1JFUV9XUklURSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX19SRVFfRkFJTEZBU1RfREVWLAorIF9fUkVRX0ZBSUxGQVNUX1RSQU5TUE9SVCwKKyBfX1JFUV9GQUlMRkFTVF9EUklWRVIsCisgX19SRVFfU1lOQywKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX19SRVFfTUVUQSwKKyBfX1JFUV9ESVNDQVJELAorIF9fUkVRX05PSURMRSwKKyBfX1JFUV9SQUhFQUQsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fUkVRX1RIUk9UVExFRCwKKyBfX1JFUV9TT1JURUQsCisgX19SRVFfU09GVEJBUlJJRVIsCisgX19SRVFfRlVBLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX1JFUV9OT01FUkdFLAorIF9fUkVRX1NUQVJURUQsCisgX19SRVFfRE9OVFBSRVAsCisgX19SRVFfUVVFVUVELAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX1JFUV9FTFZQUklWLAorIF9fUkVRX0ZBSUxFRCwKKyBfX1JFUV9RVUlFVCwKKyBfX1JFUV9QUkVFTVBULAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX1JFUV9BTExPQ0VELAorIF9fUkVRX0NPUFlfVVNFUiwKKyBfX1JFUV9GTFVTSCwKKyBfX1JFUV9GTFVTSF9TRVEsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fUkVRX0lPX1NUQVQsCisgX19SRVFfTUlYRURfTUVSR0UsCisgX19SRVFfU0VDVVJFLAorIF9fUkVRX05SX0JJVFMsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworfTsKKyNkZWZpbmUgUkVRX1dSSVRFICgxIDw8IF9fUkVRX1dSSVRFKQorI2RlZmluZSBSRVFfRkFJTEZBU1RfREVWICgxIDw8IF9fUkVRX0ZBSUxGQVNUX0RFVikKKyNkZWZpbmUgUkVRX0ZBSUxGQVNUX1RSQU5TUE9SVCAoMSA8PCBfX1JFUV9GQUlMRkFTVF9UUkFOU1BPUlQpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBSRVFfRkFJTEZBU1RfRFJJVkVSICgxIDw8IF9fUkVRX0ZBSUxGQVNUX0RSSVZFUikKKyNkZWZpbmUgUkVRX1NZTkMgKDEgPDwgX19SRVFfU1lOQykKKyNkZWZpbmUgUkVRX01FVEEgKDEgPDwgX19SRVFfTUVUQSkKKyNkZWZpbmUgUkVRX0RJU0NBUkQgKDEgPDwgX19SRVFfRElTQ0FSRCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFJFUV9OT0lETEUgKDEgPDwgX19SRVFfTk9JRExFKQorI2RlZmluZSBSRVFfRkFJTEZBU1RfTUFTSyAgIChSRVFfRkFJTEZBU1RfREVWIHwgUkVRX0ZBSUxGQVNUX1RSQU5TUE9SVCB8IFJFUV9GQUlMRkFTVF9EUklWRVIpCisjZGVmaW5lIFJFUV9DT01NT05fTUFTSyAgIChSRVFfV1JJVEUgfCBSRVFfRkFJTEZBU1RfTUFTSyB8IFJFUV9TWU5DIHwgUkVRX01FVEEgfCBSRVFfRElTQ0FSRCB8ICAgUkVRX05PSURMRSB8IFJFUV9GTFVTSCB8IFJFUV9GVUEgfCBSRVFfU0VDVVJFKQorI2RlZmluZSBSRVFfQ0xPTkVfTUFTSyBSRVFfQ09NTU9OX01BU0sKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFJFUV9SQUhFQUQgKDEgPDwgX19SRVFfUkFIRUFEKQorI2RlZmluZSBSRVFfVEhST1RUTEVEICgxIDw8IF9fUkVRX1RIUk9UVExFRCkKKyNkZWZpbmUgUkVRX1NPUlRFRCAoMSA8PCBfX1JFUV9TT1JURUQpCisjZGVmaW5lIFJFUV9TT0ZUQkFSUklFUiAoMSA8PCBfX1JFUV9TT0ZUQkFSUklFUikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFJFUV9GVUEgKDEgPDwgX19SRVFfRlVBKQorI2RlZmluZSBSRVFfTk9NRVJHRSAoMSA8PCBfX1JFUV9OT01FUkdFKQorI2RlZmluZSBSRVFfU1RBUlRFRCAoMSA8PCBfX1JFUV9TVEFSVEVEKQorI2RlZmluZSBSRVFfRE9OVFBSRVAgKDEgPDwgX19SRVFfRE9OVFBSRVApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBSRVFfUVVFVUVEICgxIDw8IF9fUkVRX1FVRVVFRCkKKyNkZWZpbmUgUkVRX0VMVlBSSVYgKDEgPDwgX19SRVFfRUxWUFJJVikKKyNkZWZpbmUgUkVRX0ZBSUxFRCAoMSA8PCBfX1JFUV9GQUlMRUQpCisjZGVmaW5lIFJFUV9RVUlFVCAoMSA8PCBfX1JFUV9RVUlFVCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFJFUV9QUkVFTVBUICgxIDw8IF9fUkVRX1BSRUVNUFQpCisjZGVmaW5lIFJFUV9BTExPQ0VEICgxIDw8IF9fUkVRX0FMTE9DRUQpCisjZGVmaW5lIFJFUV9DT1BZX1VTRVIgKDEgPDwgX19SRVFfQ09QWV9VU0VSKQorI2RlZmluZSBSRVFfRkxVU0ggKDEgPDwgX19SRVFfRkxVU0gpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBSRVFfRkxVU0hfU0VRICgxIDw8IF9fUkVRX0ZMVVNIX1NFUSkKKyNkZWZpbmUgUkVRX0lPX1NUQVQgKDEgPDwgX19SRVFfSU9fU1RBVCkKKyNkZWZpbmUgUkVRX01JWEVEX01FUkdFICgxIDw8IF9fUkVRX01JWEVEX01FUkdFKQorI2RlZmluZSBSRVFfU0VDVVJFICgxIDw8IF9fUkVRX1NFQ1VSRSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9ibGtkZXYuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9ibGtkZXYuaAppbmRleCAzMDA0NTI0Li4yMjFiNDdiIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvYmxrZGV2LmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2Jsa2Rldi5oCkBAIC03LDQ1NSArNyw0NTAgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9MSU5VWF9CTEtERVZfSAogI2RlZmluZSBfTElOVVhfQkxLREVWX0gKLQogI2luY2x1ZGUgPGxpbnV4L21ham9yLmg+CiAjaW5jbHVkZSA8bGludXgvZ2VuaGQuaD4KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CiAjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CiAjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNpbmNsdWRlIDxsaW51eC9iYWNraW5nLWRldi5oPgogI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KICNpbmNsdWRlIDxsaW51eC9tZW1wb29sLmg+CiAjaW5jbHVkZSA8bGludXgvYmlvLmg+CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZ2lmeS5oPgotCiAjaW5jbHVkZSA8YXNtL3NjYXR0ZXJsaXN0Lmg+Ci0KIHN0cnVjdCBzY3NpX2lvY3RsX2NvbW1hbmQ7Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgcmVxdWVzdF9xdWV1ZTsKIHR5cGVkZWYgc3RydWN0IHJlcXVlc3RfcXVldWUgcmVxdWVzdF9xdWV1ZV90Owogc3RydWN0IGVsZXZhdG9yX3F1ZXVlOwogdHlwZWRlZiBzdHJ1Y3QgZWxldmF0b3JfcXVldWUgZWxldmF0b3JfdDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgcmVxdWVzdF9wbV9zdGF0ZTsKIHN0cnVjdCBibGtfdHJhY2U7Ci0KICNkZWZpbmUgQkxLREVWX01JTl9SUSA0Ci0jZGVmaW5lIEJMS0RFVl9NQVhfUlEgMTI4ICAKLQorI2RlZmluZSBCTEtERVZfTUFYX1JRIDEyOAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBhc19pb19jb250ZXh0IHsKICBzcGlubG9ja190IGxvY2s7Ci0KICB2b2lkICgqZHRvcikoc3RydWN0IGFzX2lvX2NvbnRleHQgKmFpYyk7CiAgdm9pZCAoKmV4aXQpKHN0cnVjdCBhc19pb19jb250ZXh0ICphaWMpOwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGxvbmcgc3RhdGU7CiAgYXRvbWljX3QgbnJfcXVldWVkOwogIGF0b21pY190IG5yX2Rpc3BhdGNoZWQ7Ci0KICB1bnNpZ25lZCBsb25nIGxhc3RfZW5kX3JlcXVlc3Q7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGxvbmcgdHRpbWVfdG90YWw7CiAgdW5zaWduZWQgbG9uZyB0dGltZV9zYW1wbGVzOwogIHVuc2lnbmVkIGxvbmcgdHRpbWVfbWVhbjsKLQogIHVuc2lnbmVkIGludCBzZWVrX3NhbXBsZXM7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHNlY3Rvcl90IGxhc3RfcmVxdWVzdF9wb3M7CiAgdTY0IHNlZWtfdG90YWw7CiAgc2VjdG9yX3Qgc2Vla19tZWFuOwogfTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBjZnFfcXVldWU7CiBzdHJ1Y3QgY2ZxX2lvX2NvbnRleHQgewogIHN0cnVjdCByYl9ub2RlIHJiX25vZGU7CiAgdm9pZCAqa2V5OwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCBjZnFfcXVldWUgKmNmcXFbMl07Ci0KICBzdHJ1Y3QgaW9fY29udGV4dCAqaW9jOwotCiAgdW5zaWduZWQgbG9uZyBsYXN0X2VuZF9yZXF1ZXN0OwogIHNlY3Rvcl90IGxhc3RfcmVxdWVzdF9wb3M7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGxvbmcgbGFzdF9xdWV1ZTsKLQogIHVuc2lnbmVkIGxvbmcgdHRpbWVfdG90YWw7CiAgdW5zaWduZWQgbG9uZyB0dGltZV9zYW1wbGVzOwogIHVuc2lnbmVkIGxvbmcgdHRpbWVfbWVhbjsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBpbnQgc2Vla19zYW1wbGVzOwogIHU2NCBzZWVrX3RvdGFsOwogIHNlY3Rvcl90IHNlZWtfbWVhbjsKLQogIHN0cnVjdCBsaXN0X2hlYWQgcXVldWVfbGlzdDsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB2b2lkICgqZHRvcikoc3RydWN0IGlvX2NvbnRleHQgKik7CiAgdm9pZCAoKmV4aXQpKHN0cnVjdCBpb19jb250ZXh0ICopOwogfTsKLQogc3RydWN0IGlvX2NvbnRleHQgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBhdG9taWNfdCByZWZjb3VudDsKICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2s7Ci0KICBpbnQgKCpzZXRfaW9wcmlvKShzdHJ1Y3QgaW9fY29udGV4dCAqLCB1bnNpZ25lZCBpbnQpOwotCiAgdW5zaWduZWQgbG9uZyBsYXN0X3dhaXRlZDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgaW50IG5yX2JhdGNoX3JlcXVlc3RzOwotCiAgc3RydWN0IGFzX2lvX2NvbnRleHQgKmFpYzsKICBzdHJ1Y3QgcmJfcm9vdCBjaWNfcm9vdDsKIH07Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgaW9fY29udGV4dCAqY3VycmVudF9pb19jb250ZXh0KGdmcF90IGdmcF9mbGFncyk7CiBzdHJ1Y3QgaW9fY29udGV4dCAqZ2V0X2lvX2NvbnRleHQoZ2ZwX3QgZ2ZwX2ZsYWdzKTsKLQogc3RydWN0IHJlcXVlc3Q7CiB0eXBlZGVmIHZvaWQgKHJxX2VuZF9pb19mbikoc3RydWN0IHJlcXVlc3QgKiwgaW50KTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCByZXF1ZXN0X2xpc3QgewogIGludCBjb3VudFsyXTsKICBpbnQgc3RhcnZlZFsyXTsKICBpbnQgZWx2cHJpdjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgbWVtcG9vbF90ICpycV9wb29sOwogIHdhaXRfcXVldWVfaGVhZF90IHdhaXRbMl07CiB9OwotCiAjZGVmaW5lIEJMS19NQVhfQ0RCIDE2Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgcmVxdWVzdCB7CiAgc3RydWN0IGxpc3RfaGVhZCBxdWV1ZWxpc3Q7CiAgc3RydWN0IGxpc3RfaGVhZCBkb25lbGlzdDsKLQogIHVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc2VjdG9yX3Qgc2VjdG9yOwogIHVuc2lnbmVkIGxvbmcgbnJfc2VjdG9yczsKLQogIHVuc2lnbmVkIGludCBjdXJyZW50X25yX3NlY3RvcnM7Ci0KICBzZWN0b3JfdCBoYXJkX3NlY3RvcjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgbG9uZyBoYXJkX25yX3NlY3RvcnM7Ci0KICB1bnNpZ25lZCBpbnQgaGFyZF9jdXJfc2VjdG9yczsKLQogIHN0cnVjdCBiaW8gKmJpbzsKICBzdHJ1Y3QgYmlvICpiaW90YWlsOwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHZvaWQgKmVsZXZhdG9yX3ByaXZhdGU7CiAgdm9pZCAqY29tcGxldGlvbl9kYXRhOwotCiAgaW50IHJxX3N0YXR1czsKICBpbnQgZXJyb3JzOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgZ2VuZGlzayAqcnFfZGlzazsKICB1bnNpZ25lZCBsb25nIHN0YXJ0X3RpbWU7Ci0KICB1bnNpZ25lZCBzaG9ydCBucl9waHlzX3NlZ21lbnRzOwotCiAgdW5zaWduZWQgc2hvcnQgbnJfaHdfc2VnbWVudHM7Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgc2hvcnQgaW9wcmlvOwotCiAgaW50IHRhZzsKLQogIGludCByZWZfY291bnQ7CiAgcmVxdWVzdF9xdWV1ZV90ICpxOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgcmVxdWVzdF9saXN0ICpybDsKLQogIHN0cnVjdCBjb21wbGV0aW9uICp3YWl0aW5nOwogIHZvaWQgKnNwZWNpYWw7CiAgY2hhciAqYnVmZmVyOwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGludCBjbWRfbGVuOwogIHVuc2lnbmVkIGNoYXIgY21kW0JMS19NQVhfQ0RCXTsKLQogIHVuc2lnbmVkIGludCBkYXRhX2xlbjsKICB1bnNpZ25lZCBpbnQgc2Vuc2VfbGVuOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB2b2lkICpkYXRhOwogIHZvaWQgKnNlbnNlOwotCiAgdW5zaWduZWQgaW50IHRpbWVvdXQ7CiAgaW50IHJldHJpZXM7Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgcnFfZW5kX2lvX2ZuICplbmRfaW87CiAgdm9pZCAqZW5kX2lvX2RhdGE7CiB9OwotCiBlbnVtIHJxX2ZsYWdfYml0cyB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fUkVRX1JXLAogIF9fUkVRX0ZBSUxGQVNULAogIF9fUkVRX1NPUlRFRCwKICBfX1JFUV9TT0ZUQkFSUklFUiwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX19SRVFfSEFSREJBUlJJRVIsCiAgX19SRVFfRlVBLAogIF9fUkVRX0NNRCwKICBfX1JFUV9OT01FUkdFLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX1JFUV9TVEFSVEVELAogIF9fUkVRX0RPTlRQUkVQLAogIF9fUkVRX1FVRVVFRCwKICBfX1JFUV9FTFZQUklWLAotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fUkVRX1BDLAogIF9fUkVRX0JMT0NLX1BDLAogIF9fUkVRX1NFTlNFLAotCiAgX19SRVFfRkFJTEVELAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX1JFUV9RVUlFVCwKICBfX1JFUV9TUEVDSUFMLAogIF9fUkVRX0RSSVZFX0NNRCwKICBfX1JFUV9EUklWRV9UQVNLLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX1JFUV9EUklWRV9UQVNLRklMRSwKICBfX1JFUV9QUkVFTVBULAogIF9fUkVRX1BNX1NVU1BFTkQsCiAgX19SRVFfUE1fUkVTVU1FLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX1JFUV9QTV9TSFVURE9XTiwKICBfX1JFUV9PUkRFUkVEX0NPTE9SLAogIF9fUkVRX1JXX1NZTkMsCiAgX19SRVFfTlJfQklUUywKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwotCiAjZGVmaW5lIFJFUV9SVyAoMSA8PCBfX1JFUV9SVykKICNkZWZpbmUgUkVRX0ZBSUxGQVNUICgxIDw8IF9fUkVRX0ZBSUxGQVNUKQogI2RlZmluZSBSRVFfU09SVEVEICgxIDw8IF9fUkVRX1NPUlRFRCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFJFUV9TT0ZUQkFSUklFUiAoMSA8PCBfX1JFUV9TT0ZUQkFSUklFUikKICNkZWZpbmUgUkVRX0hBUkRCQVJSSUVSICgxIDw8IF9fUkVRX0hBUkRCQVJSSUVSKQogI2RlZmluZSBSRVFfRlVBICgxIDw8IF9fUkVRX0ZVQSkKICNkZWZpbmUgUkVRX0NNRCAoMSA8PCBfX1JFUV9DTUQpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBSRVFfTk9NRVJHRSAoMSA8PCBfX1JFUV9OT01FUkdFKQogI2RlZmluZSBSRVFfU1RBUlRFRCAoMSA8PCBfX1JFUV9TVEFSVEVEKQogI2RlZmluZSBSRVFfRE9OVFBSRVAgKDEgPDwgX19SRVFfRE9OVFBSRVApCiAjZGVmaW5lIFJFUV9RVUVVRUQgKDEgPDwgX19SRVFfUVVFVUVEKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUkVRX0VMVlBSSVYgKDEgPDwgX19SRVFfRUxWUFJJVikKICNkZWZpbmUgUkVRX1BDICgxIDw8IF9fUkVRX1BDKQogI2RlZmluZSBSRVFfQkxPQ0tfUEMgKDEgPDwgX19SRVFfQkxPQ0tfUEMpCiAjZGVmaW5lIFJFUV9TRU5TRSAoMSA8PCBfX1JFUV9TRU5TRSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFJFUV9GQUlMRUQgKDEgPDwgX19SRVFfRkFJTEVEKQogI2RlZmluZSBSRVFfUVVJRVQgKDEgPDwgX19SRVFfUVVJRVQpCiAjZGVmaW5lIFJFUV9TUEVDSUFMICgxIDw8IF9fUkVRX1NQRUNJQUwpCiAjZGVmaW5lIFJFUV9EUklWRV9DTUQgKDEgPDwgX19SRVFfRFJJVkVfQ01EKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUkVRX0RSSVZFX1RBU0sgKDEgPDwgX19SRVFfRFJJVkVfVEFTSykKICNkZWZpbmUgUkVRX0RSSVZFX1RBU0tGSUxFICgxIDw8IF9fUkVRX0RSSVZFX1RBU0tGSUxFKQogI2RlZmluZSBSRVFfUFJFRU1QVCAoMSA8PCBfX1JFUV9QUkVFTVBUKQogI2RlZmluZSBSRVFfUE1fU1VTUEVORCAoMSA8PCBfX1JFUV9QTV9TVVNQRU5EKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUkVRX1BNX1JFU1VNRSAoMSA8PCBfX1JFUV9QTV9SRVNVTUUpCiAjZGVmaW5lIFJFUV9QTV9TSFVURE9XTiAoMSA8PCBfX1JFUV9QTV9TSFVURE9XTikKICNkZWZpbmUgUkVRX09SREVSRURfQ09MT1IgKDEgPDwgX19SRVFfT1JERVJFRF9DT0xPUikKICNkZWZpbmUgUkVRX1JXX1NZTkMgKDEgPDwgX19SRVFfUldfU1lOQykKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCByZXF1ZXN0X3BtX3N0YXRlCiB7Ci0KICBpbnQgcG1fc3RlcDsKLQogIHUzMiBwbV9zdGF0ZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdm9pZCogZGF0YTsKIH07Ci0KICNpbmNsdWRlIDxsaW51eC9lbGV2YXRvci5oPgotCiB0eXBlZGVmIGludCAobWVyZ2VfcmVxdWVzdF9mbikgKHJlcXVlc3RfcXVldWVfdCAqLCBzdHJ1Y3QgcmVxdWVzdCAqLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgYmlvICopOwogdHlwZWRlZiBpbnQgKG1lcmdlX3JlcXVlc3RzX2ZuKSAocmVxdWVzdF9xdWV1ZV90ICosIHN0cnVjdCByZXF1ZXN0ICosCiAgc3RydWN0IHJlcXVlc3QgKik7CiB0eXBlZGVmIHZvaWQgKHJlcXVlc3RfZm5fcHJvYykgKHJlcXVlc3RfcXVldWVfdCAqcSk7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogdHlwZWRlZiBpbnQgKG1ha2VfcmVxdWVzdF9mbikgKHJlcXVlc3RfcXVldWVfdCAqcSwgc3RydWN0IGJpbyAqYmlvKTsKIHR5cGVkZWYgaW50IChwcmVwX3JxX2ZuKSAocmVxdWVzdF9xdWV1ZV90ICosIHN0cnVjdCByZXF1ZXN0ICopOwogdHlwZWRlZiB2b2lkICh1bnBsdWdfZm4pIChyZXF1ZXN0X3F1ZXVlX3QgKik7Ci0KIHN0cnVjdCBiaW9fdmVjOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHR5cGVkZWYgaW50IChtZXJnZV9idmVjX2ZuKSAocmVxdWVzdF9xdWV1ZV90ICosIHN0cnVjdCBiaW8gKiwgc3RydWN0IGJpb192ZWMgKik7CiB0eXBlZGVmIHZvaWQgKGFjdGl2aXR5X2ZuKSAodm9pZCAqZGF0YSwgaW50IHJ3KTsKIHR5cGVkZWYgaW50IChpc3N1ZV9mbHVzaF9mbikgKHJlcXVlc3RfcXVldWVfdCAqLCBzdHJ1Y3QgZ2VuZGlzayAqLCBzZWN0b3JfdCAqKTsKIHR5cGVkZWYgdm9pZCAocHJlcGFyZV9mbHVzaF9mbikgKHJlcXVlc3RfcXVldWVfdCAqLCBzdHJ1Y3QgcmVxdWVzdCAqKTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB0eXBlZGVmIHZvaWQgKHNvZnRpcnFfZG9uZV9mbikoc3RydWN0IHJlcXVlc3QgKik7Ci0KIGVudW0gYmxrX3F1ZXVlX3N0YXRlIHsKICBRdWV1ZV9kb3duLAogIFF1ZXVlX3VwLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07Ci0KIHN0cnVjdCBibGtfcXVldWVfdGFnIHsKICBzdHJ1Y3QgcmVxdWVzdCAqKnRhZ19pbmRleDsKICB1bnNpZ25lZCBsb25nICp0YWdfbWFwOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgbGlzdF9oZWFkIGJ1c3lfbGlzdDsKICBpbnQgYnVzeTsKICBpbnQgbWF4X2RlcHRoOwogIGludCByZWFsX21heF9kZXB0aDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgYXRvbWljX3QgcmVmY250OwogfTsKLQogc3RydWN0IHJlcXVlc3RfcXVldWUKIHsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgbGlzdF9oZWFkIHF1ZXVlX2hlYWQ7CiAgc3RydWN0IHJlcXVlc3QgKmxhc3RfbWVyZ2U7CiAgZWxldmF0b3JfdCAqZWxldmF0b3I7Ci0KICBzdHJ1Y3QgcmVxdWVzdF9saXN0IHJxOwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHJlcXVlc3RfZm5fcHJvYyAqcmVxdWVzdF9mbjsKICBtZXJnZV9yZXF1ZXN0X2ZuICpiYWNrX21lcmdlX2ZuOwogIG1lcmdlX3JlcXVlc3RfZm4gKmZyb250X21lcmdlX2ZuOwogIG1lcmdlX3JlcXVlc3RzX2ZuICptZXJnZV9yZXF1ZXN0c19mbjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgbWFrZV9yZXF1ZXN0X2ZuICptYWtlX3JlcXVlc3RfZm47CiAgcHJlcF9ycV9mbiAqcHJlcF9ycV9mbjsKICB1bnBsdWdfZm4gKnVucGx1Z19mbjsKICBtZXJnZV9idmVjX2ZuICptZXJnZV9idmVjX2ZuOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBhY3Rpdml0eV9mbiAqYWN0aXZpdHlfZm47CiAgaXNzdWVfZmx1c2hfZm4gKmlzc3VlX2ZsdXNoX2ZuOwogIHByZXBhcmVfZmx1c2hfZm4gKnByZXBhcmVfZmx1c2hfZm47CiAgc29mdGlycV9kb25lX2ZuICpzb2Z0aXJxX2RvbmVfZm47Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc2VjdG9yX3QgZW5kX3NlY3RvcjsKICBzdHJ1Y3QgcmVxdWVzdCAqYm91bmRhcnlfcnE7Ci0KICBzdHJ1Y3QgdGltZXJfbGlzdCB1bnBsdWdfdGltZXI7CiAgaW50IHVucGx1Z190aHJlc2g7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGxvbmcgdW5wbHVnX2RlbGF5OwogIHN0cnVjdCB3b3JrX3N0cnVjdCB1bnBsdWdfd29yazsKLQogIHN0cnVjdCBiYWNraW5nX2Rldl9pbmZvIGJhY2tpbmdfZGV2X2luZm87Ci0KICB2b2lkICpxdWV1ZWRhdGE7Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdm9pZCAqYWN0aXZpdHlfZGF0YTsKLQogIHVuc2lnbmVkIGxvbmcgYm91bmNlX3BmbjsKICBnZnBfdCBib3VuY2VfZ2ZwOwotCiAgdW5zaWduZWQgbG9uZyBxdWV1ZV9mbGFnczsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzcGlubG9ja190IF9fcXVldWVfbG9jazsKICBzcGlubG9ja190ICpxdWV1ZV9sb2NrOwotCiAgc3RydWN0IGtvYmplY3Qga29iajsKLQogIHVuc2lnbmVkIGxvbmcgbnJfcmVxdWVzdHM7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGludCBucl9jb25nZXN0aW9uX29uOwogIHVuc2lnbmVkIGludCBucl9jb25nZXN0aW9uX29mZjsKICB1bnNpZ25lZCBpbnQgbnJfYmF0Y2hpbmc7Ci0KICB1bnNpZ25lZCBpbnQgbWF4X3NlY3RvcnM7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGludCBtYXhfaHdfc2VjdG9yczsKICB1bnNpZ25lZCBzaG9ydCBtYXhfcGh5c19zZWdtZW50czsKICB1bnNpZ25lZCBzaG9ydCBtYXhfaHdfc2VnbWVudHM7CiAgdW5zaWduZWQgc2hvcnQgaGFyZHNlY3Rfc2l6ZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgaW50IG1heF9zZWdtZW50X3NpemU7Ci0KICB1bnNpZ25lZCBsb25nIHNlZ19ib3VuZGFyeV9tYXNrOwogIHVuc2lnbmVkIGludCBkbWFfYWxpZ25tZW50OwotCiAgc3RydWN0IGJsa19xdWV1ZV90YWcgKnF1ZXVlX3RhZ3M7Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgaW50IG5yX3NvcnRlZDsKICB1bnNpZ25lZCBpbnQgaW5fZmxpZ2h0OwotCiAgdW5zaWduZWQgaW50IHNnX3RpbWVvdXQ7CiAgdW5zaWduZWQgaW50IHNnX3Jlc2VydmVkX3NpemU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGludCBub2RlOwotCiAgc3RydWN0IGJsa190cmFjZSAqYmxrX3RyYWNlOwotCiAgdW5zaWduZWQgaW50IG9yZGVyZWQsIG5leHRfb3JkZXJlZCwgb3Jkc2VxOwogIGludCBvcmRlcnIsIG9yZGNvbG9yOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgcmVxdWVzdCBwcmVfZmx1c2hfcnEsIGJhcl9ycSwgcG9zdF9mbHVzaF9ycTsKICBzdHJ1Y3QgcmVxdWVzdCAqb3JpZ19iYXJfcnE7CiAgdW5zaWduZWQgaW50IGJpX3NpemU7Ci0KICBzdHJ1Y3QgbXV0ZXggc3lzZnNfbG9jazsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwotCiAjZGVmaW5lIFJRX0lOQUNUSVZFICgtMSkKICNkZWZpbmUgUlFfQUNUSVZFIDEKLQotI2RlZmluZSBRVUVVRV9GTEFHX0NMVVNURVIgMCAgCi0jZGVmaW5lIFFVRVVFX0ZMQUdfUVVFVUVEIDEgIAotI2RlZmluZSBRVUVVRV9GTEFHX1NUT1BQRUQgMiAgCi0jZGVmaW5lIFFVRVVFX0ZMQUdfUkVBREZVTEwgMyAgCi0jZGVmaW5lIFFVRVVFX0ZMQUdfV1JJVEVGVUxMIDQgIAotI2RlZmluZSBRVUVVRV9GTEFHX0RFQUQgNSAgCi0jZGVmaW5lIFFVRVVFX0ZMQUdfUkVFTlRFUiA2ICAKLSNkZWZpbmUgUVVFVUVfRkxBR19QTFVHR0VEIDcgIAotI2RlZmluZSBRVUVVRV9GTEFHX0VMVlNXSVRDSCA4ICAKLQorI2RlZmluZSBRVUVVRV9GTEFHX0NMVVNURVIgMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgUVVFVUVfRkxBR19RVUVVRUQgMQorI2RlZmluZSBRVUVVRV9GTEFHX1NUT1BQRUQgMgorI2RlZmluZSBRVUVVRV9GTEFHX1JFQURGVUxMIDMKKyNkZWZpbmUgUVVFVUVfRkxBR19XUklURUZVTEwgNAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgUVVFVUVfRkxBR19ERUFEIDUKKyNkZWZpbmUgUVVFVUVfRkxBR19SRUVOVEVSIDYKKyNkZWZpbmUgUVVFVUVfRkxBR19QTFVHR0VEIDcKKyNkZWZpbmUgUVVFVUVfRkxBR19FTFZTV0lUQ0ggOAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIGVudW0gewotCiAgUVVFVUVfT1JERVJFRF9OT05FID0gMHgwMCwKICBRVUVVRV9PUkRFUkVEX0RSQUlOID0gMHgwMSwKICBRVUVVRV9PUkRFUkVEX1RBRyA9IDB4MDIsCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgUVVFVUVfT1JERVJFRF9QUkVGTFVTSCA9IDB4MTAsCiAgUVVFVUVfT1JERVJFRF9QT1NURkxVU0ggPSAweDIwLAogIFFVRVVFX09SREVSRURfRlVBID0gMHg0MCwKLQogIFFVRVVFX09SREVSRURfRFJBSU5fRkxVU0ggPSBRVUVVRV9PUkRFUkVEX0RSQUlOIHwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgUVVFVUVfT1JERVJFRF9QUkVGTFVTSCB8IFFVRVVFX09SREVSRURfUE9TVEZMVVNILAogIFFVRVVFX09SREVSRURfRFJBSU5fRlVBID0gUVVFVUVfT1JERVJFRF9EUkFJTiB8CiAgUVVFVUVfT1JERVJFRF9QUkVGTFVTSCB8IFFVRVVFX09SREVSRURfRlVBLAogIFFVRVVFX09SREVSRURfVEFHX0ZMVVNIID0gUVVFVUVfT1JERVJFRF9UQUcgfAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBRVUVVRV9PUkRFUkVEX1BSRUZMVVNIIHwgUVVFVUVfT1JERVJFRF9QT1NURkxVU0gsCiAgUVVFVUVfT1JERVJFRF9UQUdfRlVBID0gUVVFVUVfT1JERVJFRF9UQUcgfAogIFFVRVVFX09SREVSRURfUFJFRkxVU0ggfCBRVUVVRV9PUkRFUkVEX0ZVQSwKLQogIFFVRVVFX09SRFNFUV9TVEFSVEVEID0gMHgwMSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgUVVFVUVfT1JEU0VRX0RSQUlOID0gMHgwMiwKICBRVUVVRV9PUkRTRVFfUFJFRkxVU0ggPSAweDA0LAogIFFVRVVFX09SRFNFUV9CQVIgPSAweDA4LAogIFFVRVVFX09SRFNFUV9QT1NURkxVU0ggPSAweDEwLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBRVUVVRV9PUkRTRVFfRE9ORSA9IDB4MjAsCiB9OwotCiAjZGVmaW5lIGJsa19xdWV1ZV9wbHVnZ2VkKHEpIHRlc3RfYml0KFFVRVVFX0ZMQUdfUExVR0dFRCwgJihxKS0+cXVldWVfZmxhZ3MpCiAjZGVmaW5lIGJsa19xdWV1ZV90YWdnZWQocSkgdGVzdF9iaXQoUVVFVUVfRkxBR19RVUVVRUQsICYocSktPnF1ZXVlX2ZsYWdzKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgYmxrX3F1ZXVlX3N0b3BwZWQocSkgdGVzdF9iaXQoUVVFVUVfRkxBR19TVE9QUEVELCAmKHEpLT5xdWV1ZV9mbGFncykKICNkZWZpbmUgYmxrX3F1ZXVlX2ZsdXNoaW5nKHEpICgocSktPm9yZHNlcSkKLQogI2RlZmluZSBibGtfZnNfcmVxdWVzdChycSkgKChycSktPmZsYWdzICYgUkVRX0NNRCkKICNkZWZpbmUgYmxrX3BjX3JlcXVlc3QocnEpICgocnEpLT5mbGFncyAmIFJFUV9CTE9DS19QQykKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIGJsa19ub3JldHJ5X3JlcXVlc3QocnEpICgocnEpLT5mbGFncyAmIFJFUV9GQUlMRkFTVCkKICNkZWZpbmUgYmxrX3JxX3N0YXJ0ZWQocnEpICgocnEpLT5mbGFncyAmIFJFUV9TVEFSVEVEKQotCiAjZGVmaW5lIGJsa19hY2NvdW50X3JxKHJxKSAoYmxrX3JxX3N0YXJ0ZWQocnEpICYmIGJsa19mc19yZXF1ZXN0KHJxKSkKLQogI2RlZmluZSBibGtfcG1fc3VzcGVuZF9yZXF1ZXN0KHJxKSAoKHJxKS0+ZmxhZ3MgJiBSRVFfUE1fU1VTUEVORCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIGJsa19wbV9yZXN1bWVfcmVxdWVzdChycSkgKChycSktPmZsYWdzICYgUkVRX1BNX1JFU1VNRSkKICNkZWZpbmUgYmxrX3BtX3JlcXVlc3QocnEpICAgKChycSktPmZsYWdzICYgKFJFUV9QTV9TVVNQRU5EIHwgUkVRX1BNX1JFU1VNRSkpCi0KICNkZWZpbmUgYmxrX3NvcnRlZF9ycShycSkgKChycSktPmZsYWdzICYgUkVRX1NPUlRFRCkKICNkZWZpbmUgYmxrX2JhcnJpZXJfcnEocnEpICgocnEpLT5mbGFncyAmIFJFUV9IQVJEQkFSUklFUikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIGJsa19mdWFfcnEocnEpICgocnEpLT5mbGFncyAmIFJFUV9GVUEpCi0KICNkZWZpbmUgbGlzdF9lbnRyeV9ycShwdHIpIGxpc3RfZW50cnkoKHB0ciksIHN0cnVjdCByZXF1ZXN0LCBxdWV1ZWxpc3QpCi0KICNkZWZpbmUgcnFfZGF0YV9kaXIocnEpICgocnEpLT5mbGFncyAmIDEpCi0KICNkZWZpbmUgUlFfTk9NRVJHRV9GTEFHUyAgIChSRVFfTk9NRVJHRSB8IFJFUV9TVEFSVEVEIHwgUkVRX0hBUkRCQVJSSUVSIHwgUkVRX1NPRlRCQVJSSUVSKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgcnFfbWVyZ2VhYmxlKHJxKSAgICghKChycSktPmZsYWdzICYgUlFfTk9NRVJHRV9GTEFHUykgJiYgYmxrX2ZzX3JlcXVlc3QoKHJxKSkpCiAjZGVmaW5lIGJsa19xdWV1ZV9oZWFkYWN0aXZlKHEsIGhlYWRfYWN0aXZlKQotI2RlZmluZSBCTEtQUkVQX09LIDAgIAotI2RlZmluZSBCTEtQUkVQX0tJTEwgMSAgCi0jZGVmaW5lIEJMS1BSRVBfREVGRVIgMiAgCi0KKyNkZWZpbmUgQkxLUFJFUF9PSyAwCisjZGVmaW5lIEJMS1BSRVBfS0lMTCAxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBCTEtQUkVQX0RFRkVSIDIKICNkZWZpbmUgQkxLX0JPVU5DRV9ISUdIICgodTY0KWJsa19tYXhfbG93X3BmbiA8PCBQQUdFX1NISUZUKQogI2RlZmluZSBCTEtfQk9VTkNFX0FOWSAoKHU2NClibGtfbWF4X3BmbiA8PCBQQUdFX1NISUZUKQogI2RlZmluZSBCTEtfQk9VTkNFX0lTQSAoSVNBX0RNQV9USFJFU0hPTEQpCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIHJxX2Zvcl9lYWNoX2JpbyhfYmlvLCBycSkgICBpZiAoKHJxLT5iaW8pKSAgIGZvciAoX2JpbyA9IChycSktPmJpbzsgX2JpbzsgX2JpbyA9IF9iaW8tPmJpX25leHQpCi0KK3N0cnVjdCBzZWNfc2l6ZSB7CisgdW5zaWduZWQgYmxvY2tfc2l6ZTsKKyB1bnNpZ25lZCBibG9ja19zaXplX2JpdHM7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworfTsKICNkZWZpbmUgZW5kX2lvX2Vycm9yKHVwdG9kYXRlKSAodW5saWtlbHkoKHVwdG9kYXRlKSA8PSAwKSkKLQogI2RlZmluZSBibGtfcXVldWVfdGFnX2RlcHRoKHEpICgocSktPnF1ZXVlX3RhZ3MtPmJ1c3kpCiAjZGVmaW5lIGJsa19xdWV1ZV90YWdfcXVldWUocSkgKChxKS0+cXVldWVfdGFncy0+YnVzeSA8IChxKS0+cXVldWVfdGFncy0+bWF4X2RlcHRoKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgYmxrX3JxX3RhZ2dlZChycSkgKChycSktPmZsYWdzICYgUkVRX1FVRVVFRCkKLQogI2RlZmluZSBNQVhfUEhZU19TRUdNRU5UUyAxMjgKICNkZWZpbmUgTUFYX0hXX1NFR01FTlRTIDEyOAogI2RlZmluZSBTQUZFX01BWF9TRUNUT1JTIDI1NQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQkxLX0RFRl9NQVhfU0VDVE9SUyAxMDI0Ci0KICNkZWZpbmUgTUFYX1NFR01FTlRfU0laRSA2NTUzNgotCiAjZGVmaW5lIGJsa2Rldl9lbnRyeV90b19yZXF1ZXN0KGVudHJ5KSBsaXN0X2VudHJ5KChlbnRyeSksIHN0cnVjdCByZXF1ZXN0LCBxdWV1ZWxpc3QpCi0KICNkZWZpbmUgYmxrX2ZpbmlzaGVkX2lvKG5zZWN0cykgZG8geyB9IHdoaWxlICgwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgYmxrX3N0YXJ0ZWRfaW8obnNlY3RzKSBkbyB7IH0gd2hpbGUgKDApCi0KK3R5cGVkZWYgc3RydWN0IHtzdHJ1Y3QgcGFnZSAqdjt9IFNlY3RvcjsKK3N0cnVjdCB3b3JrX3N0cnVjdDsKICNkZWZpbmUgc2VjdG9yX2RpdihuLCBiKSggIHsgICBpbnQgX3JlczsgICBfcmVzID0gKG4pICUgKGIpOyAgIChuKSAvPSAoYik7ICAgX3JlczsgIH0gICkKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTU9EVUxFX0FMSUFTX0JMT0NLREVWKG1ham9yLG1pbm9yKSAgIE1PRFVMRV9BTElBUygiYmxvY2stbWFqb3ItIiBfX3N0cmluZ2lmeShtYWpvcikgIi0iIF9fc3RyaW5naWZ5KG1pbm9yKSkKICNkZWZpbmUgTU9EVUxFX0FMSUFTX0JMT0NLREVWX01BSk9SKG1ham9yKSAgIE1PRFVMRV9BTElBUygiYmxvY2stbWFqb3ItIiBfX3N0cmluZ2lmeShtYWpvcikgIi0qIikKLQogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvYmxrcGcuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9ibGtwZy5oCmluZGV4IDQ1YTRhNDcuLjIxZGNkYjQgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9ibGtwZy5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9ibGtwZy5oCkBAIC03LDM1ICs3LDQwIEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfTElOVVhfQkxLUEdfSAogI2RlZmluZSBfTElOVVhfQkxLUEdfSAotCiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KICNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBCTEtQRyBfSU8oMHgxMiwxMDUpCi0KIHN0cnVjdCBibGtwZ19pb2N0bF9hcmcgewogIGludCBvcDsKICBpbnQgZmxhZ3M7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGludCBkYXRhbGVuOwogIHZvaWQgX191c2VyICpkYXRhOwogfTsKLQogI2RlZmluZSBCTEtQR19BRERfUEFSVElUSU9OIDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEJMS1BHX0RFTF9QQVJUSVRJT04gMgotCiAjZGVmaW5lIEJMS1BHX0RFVk5BTUVMVEggNjQKICNkZWZpbmUgQkxLUEdfVk9MTkFNRUxUSCA2NAotCiBzdHJ1Y3QgYmxrcGdfcGFydGl0aW9uIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgbG9uZyBsb25nIHN0YXJ0OwogIGxvbmcgbG9uZyBsZW5ndGg7CiAgaW50IHBubzsKICBjaGFyIGRldm5hbWVbQkxLUEdfREVWTkFNRUxUSF07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGNoYXIgdm9sbmFtZVtCTEtQR19WT0xOQU1FTFRIXTsKIH07Ci0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2Jsb2NrZ3JvdXBfbG9jay5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2Jsb2NrZ3JvdXBfbG9jay5oCmluZGV4IGM4MTQwMjAuLmY2OGVkYmIgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9ibG9ja2dyb3VwX2xvY2suaAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvYmxvY2tncm91cF9sb2NrLmgKQEAgLTcsMjMgKzcsMjggQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9MSU5VWF9CTE9DS0dST1VQX0xPQ0tfSAogI2RlZmluZSBfTElOVVhfQkxPQ0tHUk9VUF9MT0NLX0gKLQogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvY2FjaGUuaD4KLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTlJfQkdfTE9DS1MgMQotCiBzdHJ1Y3QgYmdsX2xvY2sgewogIHNwaW5sb2NrX3QgbG9jazsKIH0gX19fX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcDsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBibG9ja2dyb3VwX2xvY2sgewogIHN0cnVjdCBiZ2xfbG9jayBsb2Nrc1tOUl9CR19MT0NLU107CiB9OwotCiAjZGVmaW5lIHNiX2JnbF9sb2NrKHNiLCBibG9ja19ncm91cCkgICAoJihzYiktPnNfYmxvY2tncm91cF9sb2NrLmxvY2tzWyhibG9ja19ncm91cCkgJiAoTlJfQkdfTE9DS1MtMSldLmxvY2spCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvYm1wMDg1LmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvYm1wMDg1LmgKaW5kZXggNjUwY2I4OC4uNWI1NTkxMiAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2JtcDA4NS5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9ibXAwODUuaApAQCAtNywyMyArNywyNSBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX19CTVAwODVfSF9fCiAjZGVmaW5lIF9fQk1QMDg1X0hfXwotCi0jaW5jbHVkZSA8bGludXgvaW9jdGwuaD4gIAotCisjaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KICNkZWZpbmUgQk1QMDg1X05BTUUgImJtcDA4NSIKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQk1QMDg1X0lPQ1RMX0JBU0UgNzgKLQogI2RlZmluZSBCTVAwODVfSU9DVExfU0VUX0RFTEFZIF9JT1coQk1QMDg1X0lPQ1RMX0JBU0UsIDAsIGludCkKICNkZWZpbmUgQk1QMDg1X0lPQ1RMX0dFVF9ERUxBWSBfSU9SKEJNUDA4NV9JT0NUTF9CQVNFLCAxLCBpbnQpCiAjZGVmaW5lIEJNUDA4NV9JT0NUTF9TRVRfRU5BQkxFIF9JT1coQk1QMDg1X0lPQ1RMX0JBU0UsIDIsIGludCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEJNUDA4NV9JT0NUTF9HRVRfRU5BQkxFIF9JT1IoQk1QMDg1X0lPQ1RMX0JBU0UsIDMsIGludCkKICNkZWZpbmUgQk1QMDg1X0lPQ1RMX0FDQ1VSQUNZIF9JT1coQk1QMDg1X0lPQ1RMX0JBU0UsIDQsIGludCkKLQogI2VuZGlmCi0KLQpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2J5dGVvcmRlci9iaWdfZW5kaWFuLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvYnl0ZW9yZGVyL2JpZ19lbmRpYW4uaAppbmRleCBlZTBkODgwLi5hYjAxZDY4IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvYnl0ZW9yZGVyL2JpZ19lbmRpYW4uaAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvYnl0ZW9yZGVyL2JpZ19lbmRpYW4uaApAQCAtNyw2MSArNyw3NyBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX0xJTlVYX0JZVEVPUkRFUl9CSUdfRU5ESUFOX0gKICNkZWZpbmUgX0xJTlVYX0JZVEVPUkRFUl9CSUdfRU5ESUFOX0gKLQogI2lmbmRlZiBfX0JJR19FTkRJQU4KICNkZWZpbmUgX19CSUdfRU5ESUFOIDQzMjEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZW5kaWYKICNpZm5kZWYgX19CSUdfRU5ESUFOX0JJVEZJRUxECiAjZGVmaW5lIF9fQklHX0VORElBTl9CSVRGSUVMRAogI2VuZGlmCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9ieXRlb3JkZXIvc3dhYi5oPgotCiAjZGVmaW5lIF9fY29uc3RhbnRfaHRvbmwoeCkgKChfX2ZvcmNlIF9fYmUzMikoX191MzIpKHgpKQogI2RlZmluZSBfX2NvbnN0YW50X250b2hsKHgpICgoX19mb3JjZSBfX3UzMikoX19iZTMyKSh4KSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fY29uc3RhbnRfaHRvbnMoeCkgKChfX2ZvcmNlIF9fYmUxNikoX191MTYpKHgpKQogI2RlZmluZSBfX2NvbnN0YW50X250b2hzKHgpICgoX19mb3JjZSBfX3UxNikoX19iZTE2KSh4KSkKICNkZWZpbmUgX19jb25zdGFudF9jcHVfdG9fbGU2NCh4KSAoKF9fZm9yY2UgX19sZTY0KV9fX2NvbnN0YW50X3N3YWI2NCgoeCkpKQogI2RlZmluZSBfX2NvbnN0YW50X2xlNjRfdG9fY3B1KHgpIF9fX2NvbnN0YW50X3N3YWI2NCgoX19mb3JjZSBfX3U2NCkoX19sZTY0KSh4KSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoeCkgKChfX2ZvcmNlIF9fbGUzMilfX19jb25zdGFudF9zd2FiMzIoKHgpKSkKICNkZWZpbmUgX19jb25zdGFudF9sZTMyX3RvX2NwdSh4KSBfX19jb25zdGFudF9zd2FiMzIoKF9fZm9yY2UgX191MzIpKF9fbGUzMikoeCkpCiAjZGVmaW5lIF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoeCkgKChfX2ZvcmNlIF9fbGUxNilfX19jb25zdGFudF9zd2FiMTYoKHgpKSkKICNkZWZpbmUgX19jb25zdGFudF9sZTE2X3RvX2NwdSh4KSBfX19jb25zdGFudF9zd2FiMTYoKF9fZm9yY2UgX191MTYpKF9fbGUxNikoeCkpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX2NvbnN0YW50X2NwdV90b19iZTY0KHgpICgoX19mb3JjZSBfX2JlNjQpKF9fdTY0KSh4KSkKICNkZWZpbmUgX19jb25zdGFudF9iZTY0X3RvX2NwdSh4KSAoKF9fZm9yY2UgX191NjQpKF9fYmU2NCkoeCkpCiAjZGVmaW5lIF9fY29uc3RhbnRfY3B1X3RvX2JlMzIoeCkgKChfX2ZvcmNlIF9fYmUzMikoX191MzIpKHgpKQogI2RlZmluZSBfX2NvbnN0YW50X2JlMzJfdG9fY3B1KHgpICgoX19mb3JjZSBfX3UzMikoX19iZTMyKSh4KSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fY29uc3RhbnRfY3B1X3RvX2JlMTYoeCkgKChfX2ZvcmNlIF9fYmUxNikoX191MTYpKHgpKQogI2RlZmluZSBfX2NvbnN0YW50X2JlMTZfdG9fY3B1KHgpICgoX19mb3JjZSBfX3UxNikoX19iZTE2KSh4KSkKICNkZWZpbmUgX19jcHVfdG9fbGU2NCh4KSAoKF9fZm9yY2UgX19sZTY0KV9fc3dhYjY0KCh4KSkpCiAjZGVmaW5lIF9fbGU2NF90b19jcHUoeCkgX19zd2FiNjQoKF9fZm9yY2UgX191NjQpKF9fbGU2NCkoeCkpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX2NwdV90b19sZTMyKHgpICgoX19mb3JjZSBfX2xlMzIpX19zd2FiMzIoKHgpKSkKICNkZWZpbmUgX19sZTMyX3RvX2NwdSh4KSBfX3N3YWIzMigoX19mb3JjZSBfX3UzMikoX19sZTMyKSh4KSkKICNkZWZpbmUgX19jcHVfdG9fbGUxNih4KSAoKF9fZm9yY2UgX19sZTE2KV9fc3dhYjE2KCh4KSkpCiAjZGVmaW5lIF9fbGUxNl90b19jcHUoeCkgX19zd2FiMTYoKF9fZm9yY2UgX191MTYpKF9fbGUxNikoeCkpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX2NwdV90b19iZTY0KHgpICgoX19mb3JjZSBfX2JlNjQpKF9fdTY0KSh4KSkKICNkZWZpbmUgX19iZTY0X3RvX2NwdSh4KSAoKF9fZm9yY2UgX191NjQpKF9fYmU2NCkoeCkpCiAjZGVmaW5lIF9fY3B1X3RvX2JlMzIoeCkgKChfX2ZvcmNlIF9fYmUzMikoX191MzIpKHgpKQogI2RlZmluZSBfX2JlMzJfdG9fY3B1KHgpICgoX19mb3JjZSBfX3UzMikoX19iZTMyKSh4KSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fY3B1X3RvX2JlMTYoeCkgKChfX2ZvcmNlIF9fYmUxNikoX191MTYpKHgpKQogI2RlZmluZSBfX2JlMTZfdG9fY3B1KHgpICgoX19mb3JjZSBfX3UxNikoX19iZTE2KSh4KSkKLQogI2RlZmluZSBfX2NwdV90b19sZTY0cyh4KSBfX3N3YWI2NHMoKHgpKQogI2RlZmluZSBfX2xlNjRfdG9fY3B1cyh4KSBfX3N3YWI2NHMoKHgpKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19jcHVfdG9fbGUzMnMoeCkgX19zd2FiMzJzKCh4KSkKICNkZWZpbmUgX19sZTMyX3RvX2NwdXMoeCkgX19zd2FiMzJzKCh4KSkKICNkZWZpbmUgX19jcHVfdG9fbGUxNnMoeCkgX19zd2FiMTZzKCh4KSkKICNkZWZpbmUgX19sZTE2X3RvX2NwdXMoeCkgX19zd2FiMTZzKCh4KSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fY3B1X3RvX2JlNjRzKHgpIGRvIHt9IHdoaWxlICgwKQogI2RlZmluZSBfX2JlNjRfdG9fY3B1cyh4KSBkbyB7fSB3aGlsZSAoMCkKICNkZWZpbmUgX19jcHVfdG9fYmUzMnMoeCkgZG8ge30gd2hpbGUgKDApCiAjZGVmaW5lIF9fYmUzMl90b19jcHVzKHgpIGRvIHt9IHdoaWxlICgwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19jcHVfdG9fYmUxNnMoeCkgZG8ge30gd2hpbGUgKDApCiAjZGVmaW5lIF9fYmUxNl90b19jcHVzKHgpIGRvIHt9IHdoaWxlICgwKQogI2luY2x1ZGUgPGxpbnV4L2J5dGVvcmRlci9nZW5lcmljLmg+CiAjZW5kaWYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvYnl0ZW9yZGVyL2dlbmVyaWMuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9ieXRlb3JkZXIvZ2VuZXJpYy5oCmluZGV4IGFjNDY5ZmYuLjE5NjQzN2QgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9ieXRlb3JkZXIvZ2VuZXJpYy5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9ieXRlb3JkZXIvZ2VuZXJpYy5oCkBAIC03LDkgKzcsMTUgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9MSU5VWF9CWVRFT1JERVJfR0VORVJJQ19ICiAjZGVmaW5lIF9MSU5VWF9CWVRFT1JERVJfR0VORVJJQ19ICi0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2J5dGVvcmRlci9saXR0bGVfZW5kaWFuLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvYnl0ZW9yZGVyL2xpdHRsZV9lbmRpYW4uaAppbmRleCAyYzI2ZTljLi41ZTk0NDAxIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvYnl0ZW9yZGVyL2xpdHRsZV9lbmRpYW4uaAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvYnl0ZW9yZGVyL2xpdHRsZV9lbmRpYW4uaApAQCAtNyw2MSArNyw3NyBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX0xJTlVYX0JZVEVPUkRFUl9MSVRUTEVfRU5ESUFOX0gKICNkZWZpbmUgX0xJTlVYX0JZVEVPUkRFUl9MSVRUTEVfRU5ESUFOX0gKLQogI2lmbmRlZiBfX0xJVFRMRV9FTkRJQU4KICNkZWZpbmUgX19MSVRUTEVfRU5ESUFOIDEyMzQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZW5kaWYKICNpZm5kZWYgX19MSVRUTEVfRU5ESUFOX0JJVEZJRUxECiAjZGVmaW5lIF9fTElUVExFX0VORElBTl9CSVRGSUVMRAogI2VuZGlmCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9ieXRlb3JkZXIvc3dhYi5oPgotCiAjZGVmaW5lIF9fY29uc3RhbnRfaHRvbmwoeCkgKChfX2ZvcmNlIF9fYmUzMilfX19jb25zdGFudF9zd2FiMzIoKHgpKSkKICNkZWZpbmUgX19jb25zdGFudF9udG9obCh4KSBfX19jb25zdGFudF9zd2FiMzIoKF9fZm9yY2UgX19iZTMyKSh4KSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fY29uc3RhbnRfaHRvbnMoeCkgKChfX2ZvcmNlIF9fYmUxNilfX19jb25zdGFudF9zd2FiMTYoKHgpKSkKICNkZWZpbmUgX19jb25zdGFudF9udG9ocyh4KSBfX19jb25zdGFudF9zd2FiMTYoKF9fZm9yY2UgX19iZTE2KSh4KSkKICNkZWZpbmUgX19jb25zdGFudF9jcHVfdG9fbGU2NCh4KSAoKF9fZm9yY2UgX19sZTY0KShfX3U2NCkoeCkpCiAjZGVmaW5lIF9fY29uc3RhbnRfbGU2NF90b19jcHUoeCkgKChfX2ZvcmNlIF9fdTY0KShfX2xlNjQpKHgpKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19jb25zdGFudF9jcHVfdG9fbGUzMih4KSAoKF9fZm9yY2UgX19sZTMyKShfX3UzMikoeCkpCiAjZGVmaW5lIF9fY29uc3RhbnRfbGUzMl90b19jcHUoeCkgKChfX2ZvcmNlIF9fdTMyKShfX2xlMzIpKHgpKQogI2RlZmluZSBfX2NvbnN0YW50X2NwdV90b19sZTE2KHgpICgoX19mb3JjZSBfX2xlMTYpKF9fdTE2KSh4KSkKICNkZWZpbmUgX19jb25zdGFudF9sZTE2X3RvX2NwdSh4KSAoKF9fZm9yY2UgX191MTYpKF9fbGUxNikoeCkpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX2NvbnN0YW50X2NwdV90b19iZTY0KHgpICgoX19mb3JjZSBfX2JlNjQpX19fY29uc3RhbnRfc3dhYjY0KCh4KSkpCiAjZGVmaW5lIF9fY29uc3RhbnRfYmU2NF90b19jcHUoeCkgX19fY29uc3RhbnRfc3dhYjY0KChfX2ZvcmNlIF9fdTY0KShfX2JlNjQpKHgpKQogI2RlZmluZSBfX2NvbnN0YW50X2NwdV90b19iZTMyKHgpICgoX19mb3JjZSBfX2JlMzIpX19fY29uc3RhbnRfc3dhYjMyKCh4KSkpCiAjZGVmaW5lIF9fY29uc3RhbnRfYmUzMl90b19jcHUoeCkgX19fY29uc3RhbnRfc3dhYjMyKChfX2ZvcmNlIF9fdTMyKShfX2JlMzIpKHgpKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19jb25zdGFudF9jcHVfdG9fYmUxNih4KSAoKF9fZm9yY2UgX19iZTE2KV9fX2NvbnN0YW50X3N3YWIxNigoeCkpKQogI2RlZmluZSBfX2NvbnN0YW50X2JlMTZfdG9fY3B1KHgpIF9fX2NvbnN0YW50X3N3YWIxNigoX19mb3JjZSBfX3UxNikoX19iZTE2KSh4KSkKICNkZWZpbmUgX19jcHVfdG9fbGU2NCh4KSAoKF9fZm9yY2UgX19sZTY0KShfX3U2NCkoeCkpCiAjZGVmaW5lIF9fbGU2NF90b19jcHUoeCkgKChfX2ZvcmNlIF9fdTY0KShfX2xlNjQpKHgpKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19jcHVfdG9fbGUzMih4KSAoKF9fZm9yY2UgX19sZTMyKShfX3UzMikoeCkpCiAjZGVmaW5lIF9fbGUzMl90b19jcHUoeCkgKChfX2ZvcmNlIF9fdTMyKShfX2xlMzIpKHgpKQogI2RlZmluZSBfX2NwdV90b19sZTE2KHgpICgoX19mb3JjZSBfX2xlMTYpKF9fdTE2KSh4KSkKICNkZWZpbmUgX19sZTE2X3RvX2NwdSh4KSAoKF9fZm9yY2UgX191MTYpKF9fbGUxNikoeCkpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX2NwdV90b19iZTY0KHgpICgoX19mb3JjZSBfX2JlNjQpX19zd2FiNjQoKHgpKSkKICNkZWZpbmUgX19iZTY0X3RvX2NwdSh4KSBfX3N3YWI2NCgoX19mb3JjZSBfX3U2NCkoX19iZTY0KSh4KSkKICNkZWZpbmUgX19jcHVfdG9fYmUzMih4KSAoKF9fZm9yY2UgX19iZTMyKV9fc3dhYjMyKCh4KSkpCiAjZGVmaW5lIF9fYmUzMl90b19jcHUoeCkgX19zd2FiMzIoKF9fZm9yY2UgX191MzIpKF9fYmUzMikoeCkpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX2NwdV90b19iZTE2KHgpICgoX19mb3JjZSBfX2JlMTYpX19zd2FiMTYoKHgpKSkKICNkZWZpbmUgX19iZTE2X3RvX2NwdSh4KSBfX3N3YWIxNigoX19mb3JjZSBfX3UxNikoX19iZTE2KSh4KSkKLQogI2RlZmluZSBfX2NwdV90b19sZTY0cyh4KSBkbyB7fSB3aGlsZSAoMCkKICNkZWZpbmUgX19sZTY0X3RvX2NwdXMoeCkgZG8ge30gd2hpbGUgKDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX2NwdV90b19sZTMycyh4KSBkbyB7fSB3aGlsZSAoMCkKICNkZWZpbmUgX19sZTMyX3RvX2NwdXMoeCkgZG8ge30gd2hpbGUgKDApCiAjZGVmaW5lIF9fY3B1X3RvX2xlMTZzKHgpIGRvIHt9IHdoaWxlICgwKQogI2RlZmluZSBfX2xlMTZfdG9fY3B1cyh4KSBkbyB7fSB3aGlsZSAoMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fY3B1X3RvX2JlNjRzKHgpIF9fc3dhYjY0cygoeCkpCiAjZGVmaW5lIF9fYmU2NF90b19jcHVzKHgpIF9fc3dhYjY0cygoeCkpCiAjZGVmaW5lIF9fY3B1X3RvX2JlMzJzKHgpIF9fc3dhYjMycygoeCkpCiAjZGVmaW5lIF9fYmUzMl90b19jcHVzKHgpIF9fc3dhYjMycygoeCkpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX2NwdV90b19iZTE2cyh4KSBfX3N3YWIxNnMoKHgpKQogI2RlZmluZSBfX2JlMTZfdG9fY3B1cyh4KSBfX3N3YWIxNnMoKHgpKQogI2luY2x1ZGUgPGxpbnV4L2J5dGVvcmRlci9nZW5lcmljLmg+CiAjZW5kaWYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvYnl0ZW9yZGVyL3N3YWIuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9ieXRlb3JkZXIvc3dhYi5oCmluZGV4IDM3MzM2YjUuLjg2ZTJmMzAgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9ieXRlb3JkZXIvc3dhYi5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9ieXRlb3JkZXIvc3dhYi5oCkBAIC03LDY2ICs3LDc1IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfTElOVVhfQllURU9SREVSX1NXQUJfSAogI2RlZmluZSBfTElOVVhfQllURU9SREVSX1NXQUJfSAotCiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KLQogI2RlZmluZSBfX19zd2FiMTYoeCkgICh7ICAgX191MTYgX194ID0gKHgpOyAgICgoX191MTYpKCAgICgoKF9fdTE2KShfX3gpICYgKF9fdTE2KTB4MDBmZlUpIDw8IDgpIHwgICAoKChfX3UxNikoX194KSAmIChfX3UxNikweGZmMDBVKSA+PiA4KSApKTsgIH0pCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fX3N3YWIzMih4KSAgKHsgICBfX3UzMiBfX3ggPSAoeCk7ICAgKChfX3UzMikoICAgKCgoX191MzIpKF9feCkgJiAoX191MzIpMHgwMDAwMDBmZlVMKSA8PCAyNCkgfCAgICgoKF9fdTMyKShfX3gpICYgKF9fdTMyKTB4MDAwMGZmMDBVTCkgPDwgOCkgfCAgICgoKF9fdTMyKShfX3gpICYgKF9fdTMyKTB4MDBmZjAwMDBVTCkgPj4gOCkgfCAgICgoKF9fdTMyKShfX3gpICYgKF9fdTMyKTB4ZmYwMDAwMDBVTCkgPj4gMjQpICkpOyAgfSkKLQogI2RlZmluZSBfX19zd2FiNjQoeCkgICh7ICAgX191NjQgX194ID0gKHgpOyAgICgoX191NjQpKCAgIChfX3U2NCkoKChfX3U2NCkoX194KSAmIChfX3U2NCkweDAwMDAwMDAwMDAwMDAwZmZVTEwpIDw8IDU2KSB8ICAgKF9fdTY0KSgoKF9fdTY0KShfX3gpICYgKF9fdTY0KTB4MDAwMDAwMDAwMDAwZmYwMFVMTCkgPDwgNDApIHwgICAoX191NjQpKCgoX191NjQpKF9feCkgJiAoX191NjQpMHgwMDAwMDAwMDAwZmYwMDAwVUxMKSA8PCAyNCkgfCAgIChfX3U2NCkoKChfX3U2NCkoX194KSAmIChfX3U2NCkweDAwMDAwMDAwZmYwMDAwMDBVTEwpIDw8IDgpIHwgICAoX191NjQpKCgoX191NjQpKF9feCkgJiAoX191NjQpMHgwMDAwMDBmZjAwMDAwMDAwVUxMKSA+PiA4KSB8ICAgKF9fdTY0KSgoKF9fdTY0KShfX3gpICYgKF9fdTY0KTB4MDAwMGZmMDAwMDAwMDAwMFVMTCkgPj4gMjQpIHwgICAoX191NjQpKCgoX191NjQpKF9feCkgJiAoX191NjQpMHgwMGZmMDAwMDAwMDAwMDAwVUxMKSA+PiA0MCkgfCAgIChfX3U2NCkoKChfX3U2NCkoX194KSAmIChfX3U2NCkweGZmMDAwMDAwMDAwMDAwMDBVTEwpID4+IDU2KSApKTsgIH0pCi0KICNkZWZpbmUgX19fY29uc3RhbnRfc3dhYjE2KHgpICAgKChfX3UxNikoICAgKCgoX191MTYpKHgpICYgKF9fdTE2KTB4MDBmZlUpIDw8IDgpIHwgICAoKChfX3UxNikoeCkgJiAoX191MTYpMHhmZjAwVSkgPj4gOCkgKSkKICNkZWZpbmUgX19fY29uc3RhbnRfc3dhYjMyKHgpICAgKChfX3UzMikoICAgKCgoX191MzIpKHgpICYgKF9fdTMyKTB4MDAwMDAwZmZVTCkgPDwgMjQpIHwgICAoKChfX3UzMikoeCkgJiAoX191MzIpMHgwMDAwZmYwMFVMKSA8PCA4KSB8ICAgKCgoX191MzIpKHgpICYgKF9fdTMyKTB4MDBmZjAwMDBVTCkgPj4gOCkgfCAgICgoKF9fdTMyKSh4KSAmIChfX3UzMikweGZmMDAwMDAwVUwpID4+IDI0KSApKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19fY29uc3RhbnRfc3dhYjY0KHgpICAgKChfX3U2NCkoICAgKF9fdTY0KSgoKF9fdTY0KSh4KSAmIChfX3U2NCkweDAwMDAwMDAwMDAwMDAwZmZVTEwpIDw8IDU2KSB8ICAgKF9fdTY0KSgoKF9fdTY0KSh4KSAmIChfX3U2NCkweDAwMDAwMDAwMDAwMGZmMDBVTEwpIDw8IDQwKSB8ICAgKF9fdTY0KSgoKF9fdTY0KSh4KSAmIChfX3U2NCkweDAwMDAwMDAwMDBmZjAwMDBVTEwpIDw8IDI0KSB8ICAgKF9fdTY0KSgoKF9fdTY0KSh4KSAmIChfX3U2NCkweDAwMDAwMDAwZmYwMDAwMDBVTEwpIDw8IDgpIHwgICAoX191NjQpKCgoX191NjQpKHgpICYgKF9fdTY0KTB4MDAwMDAwZmYwMDAwMDAwMFVMTCkgPj4gOCkgfCAgIChfX3U2NCkoKChfX3U2NCkoeCkgJiAoX191NjQpMHgwMDAwZmYwMDAwMDAwMDAwVUxMKSA+PiAyNCkgfCAgIChfX3U2NCkoKChfX3U2NCkoeCkgJiAoX191NjQpMHgwMGZmMDAwMDAwMDAwMDAwVUxMKSA+PiA0MCkgfCAgIChfX3U2NCkoKChfX3U2NCkoeCkgJiAoX191NjQpMHhmZjAwMDAwMDAwMDAwMDAwVUxMKSA+PiA1NikgKSkKLQogI2lmbmRlZiBfX2FyY2hfX3N3YWIxNgogI2RlZmluZSBfX2FyY2hfX3N3YWIxNih4KSAoeyBfX3UxNiBfX3RtcCA9ICh4KSA7IF9fX3N3YWIxNihfX3RtcCk7IH0pCiAjZW5kaWYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjaWZuZGVmIF9fYXJjaF9fc3dhYjMyCiAjZGVmaW5lIF9fYXJjaF9fc3dhYjMyKHgpICh7IF9fdTMyIF9fdG1wID0gKHgpIDsgX19fc3dhYjMyKF9fdG1wKTsgfSkKICNlbmRpZgogI2lmbmRlZiBfX2FyY2hfX3N3YWI2NAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19hcmNoX19zd2FiNjQoeCkgKHsgX191NjQgX190bXAgPSAoeCkgOyBfX19zd2FiNjQoX190bXApOyB9KQogI2VuZGlmCi0KICNpZm5kZWYgX19hcmNoX19zd2FiMTZwCiAjZGVmaW5lIF9fYXJjaF9fc3dhYjE2cCh4KSBfX2FyY2hfX3N3YWIxNigqKHgpKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlbmRpZgogI2lmbmRlZiBfX2FyY2hfX3N3YWIzMnAKICNkZWZpbmUgX19hcmNoX19zd2FiMzJwKHgpIF9fYXJjaF9fc3dhYjMyKCooeCkpCiAjZW5kaWYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjaWZuZGVmIF9fYXJjaF9fc3dhYjY0cAogI2RlZmluZSBfX2FyY2hfX3N3YWI2NHAoeCkgX19hcmNoX19zd2FiNjQoKih4KSkKICNlbmRpZgotCiAjaWZuZGVmIF9fYXJjaF9fc3dhYjE2cworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19hcmNoX19zd2FiMTZzKHgpIGRvIHsgKih4KSA9IF9fYXJjaF9fc3dhYjE2cCgoeCkpOyB9IHdoaWxlICgwKQogI2VuZGlmCiAjaWZuZGVmIF9fYXJjaF9fc3dhYjMycwogI2RlZmluZSBfX2FyY2hfX3N3YWIzMnMoeCkgZG8geyAqKHgpID0gX19hcmNoX19zd2FiMzJwKCh4KSk7IH0gd2hpbGUgKDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2VuZGlmCiAjaWZuZGVmIF9fYXJjaF9fc3dhYjY0cwogI2RlZmluZSBfX2FyY2hfX3N3YWI2NHMoeCkgZG8geyAqKHgpID0gX19hcmNoX19zd2FiNjRwKCh4KSk7IH0gd2hpbGUgKDApCiAjZW5kaWYKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiBkZWZpbmVkKF9fT1BUSU1JWkVfXykKICNkZWZpbmUgX19zd2FiMTYoeCkgIChfX2J1aWx0aW5fY29uc3RhbnRfcCgoX191MTYpKHgpKSA/ICAgX19fc3dhYjE2KCh4KSkgOiAgIF9fZnN3YWIxNigoeCkpKQogI2RlZmluZSBfX3N3YWIzMih4KSAgKF9fYnVpbHRpbl9jb25zdGFudF9wKChfX3UzMikoeCkpID8gICBfX19zd2FiMzIoKHgpKSA6ICAgX19mc3dhYjMyKCh4KSkpCiAjZGVmaW5lIF9fc3dhYjY0KHgpICAoX19idWlsdGluX2NvbnN0YW50X3AoKF9fdTY0KSh4KSkgPyAgIF9fX3N3YWI2NCgoeCkpIDogICBfX2Zzd2FiNjQoKHgpKSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZWxzZQogI2RlZmluZSBfX3N3YWIxNih4KSBfX2Zzd2FiMTYoeCkKICNkZWZpbmUgX19zd2FiMzIoeCkgX19mc3dhYjMyKHgpCiAjZGVmaW5lIF9fc3dhYjY0KHgpIF9fZnN3YWI2NCh4KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlbmRpZgotCiAjaWZkZWYgX19CWVRFT1JERVJfSEFTX1U2NF9fCiAjaWZkZWYgX19TV0FCXzY0X1RIUlVfMzJfXwogI2Vsc2UKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZW5kaWYKICNlbmRpZgogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvYnl0ZW9yZGVyL3N3YWJiLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvYnl0ZW9yZGVyL3N3YWJiLmgKaW5kZXggYzViNmEzZS4uNzE0YTcxMiAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2J5dGVvcmRlci9zd2FiYi5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9ieXRlb3JkZXIvc3dhYmIuaApAQCAtNyw0NiArNyw1NCBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX0xJTlVYX0JZVEVPUkRFUl9TV0FCQl9ICiAjZGVmaW5lIF9MSU5VWF9CWVRFT1JERVJfU1dBQkJfSAotCiAjZGVmaW5lIF9fX3N3YWh3MzIoeCkgICh7ICAgX191MzIgX194ID0gKHgpOyAgICgoX191MzIpKCAgICgoKF9fdTMyKShfX3gpICYgKF9fdTMyKTB4MDAwMGZmZmZVTCkgPDwgMTYpIHwgICAoKChfX3UzMikoX194KSAmIChfX3UzMikweGZmZmYwMDAwVUwpID4+IDE2KSApKTsgIH0pCiAjZGVmaW5lIF9fX3N3YWhiMzIoeCkgICh7ICAgX191MzIgX194ID0gKHgpOyAgICgoX191MzIpKCAgICgoKF9fdTMyKShfX3gpICYgKF9fdTMyKTB4MDBmZjAwZmZVTCkgPDwgOCkgfCAgICgoKF9fdTMyKShfX3gpICYgKF9fdTMyKTB4ZmYwMGZmMDBVTCkgPj4gOCkgKSk7ICB9KQotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX19jb25zdGFudF9zd2FodzMyKHgpICAgKChfX3UzMikoICAgKCgoX191MzIpKHgpICYgKF9fdTMyKTB4MDAwMGZmZmZVTCkgPDwgMTYpIHwgICAoKChfX3UzMikoeCkgJiAoX191MzIpMHhmZmZmMDAwMFVMKSA+PiAxNikgKSkKICNkZWZpbmUgX19fY29uc3RhbnRfc3dhaGIzMih4KSAgICgoX191MzIpKCAgICgoKF9fdTMyKSh4KSAmIChfX3UzMikweDAwZmYwMGZmVUwpIDw8IDgpIHwgICAoKChfX3UzMikoeCkgJiAoX191MzIpMHhmZjAwZmYwMFVMKSA+PiA4KSApKQotCiAjaWZuZGVmIF9fYXJjaF9fc3dhaHczMgogI2RlZmluZSBfX2FyY2hfX3N3YWh3MzIoeCkgX19fc3dhaHczMih4KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlbmRpZgogI2lmbmRlZiBfX2FyY2hfX3N3YWhiMzIKICNkZWZpbmUgX19hcmNoX19zd2FoYjMyKHgpIF9fX3N3YWhiMzIoeCkKICNlbmRpZgotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2lmbmRlZiBfX2FyY2hfX3N3YWh3MzJwCiAjZGVmaW5lIF9fYXJjaF9fc3dhaHczMnAoeCkgX19zd2FodzMyKCooeCkpCiAjZW5kaWYKICNpZm5kZWYgX19hcmNoX19zd2FoYjMycAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19hcmNoX19zd2FoYjMycCh4KSBfX3N3YWhiMzIoKih4KSkKICNlbmRpZgotCiAjaWZuZGVmIF9fYXJjaF9fc3dhaHczMnMKICNkZWZpbmUgX19hcmNoX19zd2FodzMycyh4KSBkbyB7ICooeCkgPSBfX3N3YWh3MzJwKCh4KSk7IH0gd2hpbGUgKDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2VuZGlmCiAjaWZuZGVmIF9fYXJjaF9fc3dhaGIzMnMKICNkZWZpbmUgX19hcmNoX19zd2FoYjMycyh4KSBkbyB7ICooeCkgPSBfX3N3YWhiMzJwKCh4KSk7IH0gd2hpbGUgKDApCiAjZW5kaWYKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiBkZWZpbmVkKF9fT1BUSU1JWkVfXykKICNkZWZpbmUgX19zd2FodzMyKHgpICAoX19idWlsdGluX2NvbnN0YW50X3AoKF9fdTMyKSh4KSkgPyAgIF9fX3N3YWh3MzIoKHgpKSA6ICAgX19mc3dhaHczMigoeCkpKQogI2RlZmluZSBfX3N3YWhiMzIoeCkgIChfX2J1aWx0aW5fY29uc3RhbnRfcCgoX191MzIpKHgpKSA/ICAgX19fc3dhaGIzMigoeCkpIDogICBfX2Zzd2FoYjMyKCh4KSkpCiAjZWxzZQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19zd2FodzMyKHgpIF9fZnN3YWh3MzIoeCkKICNkZWZpbmUgX19zd2FoYjMyKHgpIF9fZnN3YWhiMzIoeCkKICNlbmRpZgotCiAjaWZkZWYgX19CWVRFT1JERVJfSEFTX1U2NF9fCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2VuZGlmCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9jYWNoZS5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2NhY2hlLmgKaW5kZXggZDI4MTg1NS4uZGNhNWEzYyAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2NhY2hlLmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2NhY2hlLmgKQEAgLTcsNDggKzcsNTIgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9fTElOVVhfQ0FDSEVfSAogI2RlZmluZSBfX0xJTlVYX0NBQ0hFX0gKLQogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGFzbS9jYWNoZS5oPgotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2lmbmRlZiBMMV9DQUNIRV9BTElHTgogI2RlZmluZSBMMV9DQUNIRV9BTElHTih4KSBBTElHTih4LCBMMV9DQUNIRV9CWVRFUykKICNlbmRpZgotCiAjaWZuZGVmIFNNUF9DQUNIRV9CWVRFUworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU01QX0NBQ0hFX0JZVEVTIEwxX0NBQ0hFX0JZVEVTCiAjZW5kaWYKLQogI2lmbmRlZiBfX3JlYWRfbW9zdGx5CiAjZGVmaW5lIF9fcmVhZF9tb3N0bHkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZW5kaWYKLQogI2lmbmRlZiBfX19fY2FjaGVsaW5lX2FsaWduZWQKICNkZWZpbmUgX19fX2NhY2hlbGluZV9hbGlnbmVkIF9fYXR0cmlidXRlX18oKF9fYWxpZ25lZF9fKFNNUF9DQUNIRV9CWVRFUykpKQogI2VuZGlmCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjaWZuZGVmIF9fX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXAKICNkZWZpbmUgX19fX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcAogI2VuZGlmCi0KICNpZm5kZWYgX19jYWNoZWxpbmVfYWxpZ25lZAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19jYWNoZWxpbmVfYWxpZ25lZCAgIF9fYXR0cmlidXRlX18oKF9fYWxpZ25lZF9fKFNNUF9DQUNIRV9CWVRFUyksICAgX19zZWN0aW9uX18oIi5kYXRhLmNhY2hlbGluZV9hbGlnbmVkIikpKQogI2VuZGlmCi0KICNpZm5kZWYgX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXAKICNkZWZpbmUgX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZW5kaWYKLQogI2lmbmRlZiBJTlRFUk5PREVfQ0FDSEVfU0hJRlQKICNkZWZpbmUgSU5URVJOT0RFX0NBQ0hFX1NISUZUIEwxX0NBQ0hFX1NISUZUCiAjZW5kaWYKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNpZm5kZWYgX19fX2NhY2hlbGluZV9pbnRlcm5vZGVhbGlnbmVkX2luX3NtcAogI2RlZmluZSBfX19fY2FjaGVsaW5lX2ludGVybm9kZWFsaWduZWRfaW5fc21wCiAjZW5kaWYKLQogI2VuZGlmCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2NhbGM2NC5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2NhbGM2NC5oCmluZGV4IDlmNzI2YWEuLjgxMzdhYjUgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9jYWxjNjQuaAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvY2FsYzY0LmgKQEAgLTcsMTYgKzcsMjIgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9MSU5VWF9DQUxDNjRfSAogI2RlZmluZSBfTElOVVhfQ0FMQzY0X0gKLQogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL2RpdjY0Lmg+Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjaWZuZGVmIGRpdl9sb25nX2xvbmdfcmVtCiAjZGVmaW5lIGRpdl9sb25nX2xvbmdfcmVtKGRpdmlkZW5kLCBkaXZpc29yLCByZW1haW5kZXIpICAgZG9fZGl2X2xscigoZGl2aWRlbmQpLCBkaXZpc29yLCByZW1haW5kZXIpCi0KICNlbmRpZgogI2VuZGlmCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2Nhbi5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2Nhbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmZjljZjkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvY2FuLmgKQEAgLTAsMCArMSw2NSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBDQU5fSAorI2RlZmluZSBDQU5fSAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvc29ja2V0Lmg+CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBDQU5fRUZGX0ZMQUcgMHg4MDAwMDAwMFUKKyNkZWZpbmUgQ0FOX1JUUl9GTEFHIDB4NDAwMDAwMDBVCisjZGVmaW5lIENBTl9FUlJfRkxBRyAweDIwMDAwMDAwVQorI2RlZmluZSBDQU5fU0ZGX01BU0sgMHgwMDAwMDdGRlUKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIENBTl9FRkZfTUFTSyAweDFGRkZGRkZGVQorI2RlZmluZSBDQU5fRVJSX01BU0sgMHgxRkZGRkZGRlUKK3R5cGVkZWYgX191MzIgY2FuaWRfdDsKK3R5cGVkZWYgX191MzIgY2FuX2Vycl9tYXNrX3Q7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworc3RydWN0IGNhbl9mcmFtZSB7CisgY2FuaWRfdCBjYW5faWQ7CisgX191OCBjYW5fZGxjOworIF9fdTggZGF0YVs4XSBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDgpKSk7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworfTsKKyNkZWZpbmUgQ0FOX1JBVyAxCisjZGVmaW5lIENBTl9CQ00gMgorI2RlZmluZSBDQU5fVFAxNiAzCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBDQU5fVFAyMCA0CisjZGVmaW5lIENBTl9NQ05FVCA1CisjZGVmaW5lIENBTl9JU09UUCA2CisjZGVmaW5lIENBTl9OUFJPVE8gNworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgU09MX0NBTl9CQVNFIDEwMAorc3RydWN0IHNvY2thZGRyX2NhbiB7CisgX19rZXJuZWxfc2FfZmFtaWx5X3QgY2FuX2ZhbWlseTsKKyBpbnQgY2FuX2lmaW5kZXg7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIHVuaW9uIHsKKyBzdHJ1Y3QgeyBjYW5pZF90IHJ4X2lkLCB0eF9pZDsgfSB0cDsKKyB9IGNhbl9hZGRyOworfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCitzdHJ1Y3QgY2FuX2ZpbHRlciB7CisgY2FuaWRfdCBjYW5faWQ7CisgY2FuaWRfdCBjYW5fbWFzazsKK307CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBDQU5fSU5WX0ZJTFRFUiAweDIwMDAwMDAwVQorI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvY2FuL2JjbS5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2Nhbi9iY20uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mY2ExMjMyCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2Nhbi9iY20uaApAQCAtMCwwICsxLDY2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIENBTl9CQ01fSAorI2RlZmluZSBDQU5fQkNNX0gKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2Nhbi5oPgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK3N0cnVjdCBiY21fbXNnX2hlYWQgeworIF9fdTMyIG9wY29kZTsKKyBfX3UzMiBmbGFnczsKKyBfX3UzMiBjb3VudDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgc3RydWN0IHRpbWV2YWwgaXZhbDEsIGl2YWwyOworIGNhbmlkX3QgY2FuX2lkOworIF9fdTMyIG5mcmFtZXM7Cisgc3RydWN0IGNhbl9mcmFtZSBmcmFtZXNbMF07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworfTsKK2VudW0geworIFRYX1NFVFVQID0gMSwKKyBUWF9ERUxFVEUsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIFRYX1JFQUQsCisgVFhfU0VORCwKKyBSWF9TRVRVUCwKKyBSWF9ERUxFVEUsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIFJYX1JFQUQsCisgVFhfU1RBVFVTLAorIFRYX0VYUElSRUQsCisgUlhfU1RBVFVTLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBSWF9USU1FT1VULAorIFJYX0NIQU5HRUQKK307CisjZGVmaW5lIFNFVFRJTUVSIDB4MDAwMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgU1RBUlRUSU1FUiAweDAwMDIKKyNkZWZpbmUgVFhfQ09VTlRFVlQgMHgwMDA0CisjZGVmaW5lIFRYX0FOTk9VTkNFIDB4MDAwOAorI2RlZmluZSBUWF9DUF9DQU5fSUQgMHgwMDEwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBSWF9GSUxURVJfSUQgMHgwMDIwCisjZGVmaW5lIFJYX0NIRUNLX0RMQyAweDAwNDAKKyNkZWZpbmUgUlhfTk9fQVVUT1RJTUVSIDB4MDA4MAorI2RlZmluZSBSWF9BTk5PVU5DRV9SRVNVTUUgMHgwMTAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUWF9SRVNFVF9NVUxUSV9JRFggMHgwMjAwCisjZGVmaW5lIFJYX1JUUl9GUkFNRSAweDA0MDAKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2Nhbi9lcnJvci5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2Nhbi9lcnJvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0MzZhY2UKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvY2FuL2Vycm9yLmgKQEAgLTAsMCArMSw5MyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBDQU5fRVJST1JfSAorI2RlZmluZSBDQU5fRVJST1JfSAorI2RlZmluZSBDQU5fRVJSX0RMQyA4CisjZGVmaW5lIENBTl9FUlJfVFhfVElNRU9VVCAweDAwMDAwMDAxVQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgQ0FOX0VSUl9MT1NUQVJCIDB4MDAwMDAwMDJVCisjZGVmaW5lIENBTl9FUlJfQ1JUTCAweDAwMDAwMDA0VQorI2RlZmluZSBDQU5fRVJSX1BST1QgMHgwMDAwMDAwOFUKKyNkZWZpbmUgQ0FOX0VSUl9UUlggMHgwMDAwMDAxMFUKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIENBTl9FUlJfQUNLIDB4MDAwMDAwMjBVCisjZGVmaW5lIENBTl9FUlJfQlVTT0ZGIDB4MDAwMDAwNDBVCisjZGVmaW5lIENBTl9FUlJfQlVTRVJST1IgMHgwMDAwMDA4MFUKKyNkZWZpbmUgQ0FOX0VSUl9SRVNUQVJURUQgMHgwMDAwMDEwMFUKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIENBTl9FUlJfTE9TVEFSQl9VTlNQRUMgMHgwMAorI2RlZmluZSBDQU5fRVJSX0NSVExfVU5TUEVDIDB4MDAKKyNkZWZpbmUgQ0FOX0VSUl9DUlRMX1JYX09WRVJGTE9XIDB4MDEKKyNkZWZpbmUgQ0FOX0VSUl9DUlRMX1RYX09WRVJGTE9XIDB4MDIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIENBTl9FUlJfQ1JUTF9SWF9XQVJOSU5HIDB4MDQKKyNkZWZpbmUgQ0FOX0VSUl9DUlRMX1RYX1dBUk5JTkcgMHgwOAorI2RlZmluZSBDQU5fRVJSX0NSVExfUlhfUEFTU0lWRSAweDEwCisjZGVmaW5lIENBTl9FUlJfQ1JUTF9UWF9QQVNTSVZFIDB4MjAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIENBTl9FUlJfUFJPVF9VTlNQRUMgMHgwMAorI2RlZmluZSBDQU5fRVJSX1BST1RfQklUIDB4MDEKKyNkZWZpbmUgQ0FOX0VSUl9QUk9UX0ZPUk0gMHgwMgorI2RlZmluZSBDQU5fRVJSX1BST1RfU1RVRkYgMHgwNAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgQ0FOX0VSUl9QUk9UX0JJVDAgMHgwOAorI2RlZmluZSBDQU5fRVJSX1BST1RfQklUMSAweDEwCisjZGVmaW5lIENBTl9FUlJfUFJPVF9PVkVSTE9BRCAweDIwCisjZGVmaW5lIENBTl9FUlJfUFJPVF9BQ1RJVkUgMHg0MAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgQ0FOX0VSUl9QUk9UX1RYIDB4ODAKKyNkZWZpbmUgQ0FOX0VSUl9QUk9UX0xPQ19VTlNQRUMgMHgwMAorI2RlZmluZSBDQU5fRVJSX1BST1RfTE9DX1NPRiAweDAzCisjZGVmaW5lIENBTl9FUlJfUFJPVF9MT0NfSUQyOF8yMSAweDAyCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBDQU5fRVJSX1BST1RfTE9DX0lEMjBfMTggMHgwNgorI2RlZmluZSBDQU5fRVJSX1BST1RfTE9DX1NSVFIgMHgwNAorI2RlZmluZSBDQU5fRVJSX1BST1RfTE9DX0lERSAweDA1CisjZGVmaW5lIENBTl9FUlJfUFJPVF9MT0NfSUQxN18xMyAweDA3CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBDQU5fRVJSX1BST1RfTE9DX0lEMTJfMDUgMHgwRgorI2RlZmluZSBDQU5fRVJSX1BST1RfTE9DX0lEMDRfMDAgMHgwRQorI2RlZmluZSBDQU5fRVJSX1BST1RfTE9DX1JUUiAweDBDCisjZGVmaW5lIENBTl9FUlJfUFJPVF9MT0NfUkVTMSAweDBECisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBDQU5fRVJSX1BST1RfTE9DX1JFUzAgMHgwOQorI2RlZmluZSBDQU5fRVJSX1BST1RfTE9DX0RMQyAweDBCCisjZGVmaW5lIENBTl9FUlJfUFJPVF9MT0NfREFUQSAweDBBCisjZGVmaW5lIENBTl9FUlJfUFJPVF9MT0NfQ1JDX1NFUSAweDA4CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBDQU5fRVJSX1BST1RfTE9DX0NSQ19ERUwgMHgxOAorI2RlZmluZSBDQU5fRVJSX1BST1RfTE9DX0FDSyAweDE5CisjZGVmaW5lIENBTl9FUlJfUFJPVF9MT0NfQUNLX0RFTCAweDFCCisjZGVmaW5lIENBTl9FUlJfUFJPVF9MT0NfRU9GIDB4MUEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIENBTl9FUlJfUFJPVF9MT0NfSU5URVJNIDB4MTIKKyNkZWZpbmUgQ0FOX0VSUl9UUlhfVU5TUEVDIDB4MDAKKyNkZWZpbmUgQ0FOX0VSUl9UUlhfQ0FOSF9OT19XSVJFIDB4MDQKKyNkZWZpbmUgQ0FOX0VSUl9UUlhfQ0FOSF9TSE9SVF9UT19CQVQgMHgwNQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgQ0FOX0VSUl9UUlhfQ0FOSF9TSE9SVF9UT19WQ0MgMHgwNgorI2RlZmluZSBDQU5fRVJSX1RSWF9DQU5IX1NIT1JUX1RPX0dORCAweDA3CisjZGVmaW5lIENBTl9FUlJfVFJYX0NBTkxfTk9fV0lSRSAweDQwCisjZGVmaW5lIENBTl9FUlJfVFJYX0NBTkxfU0hPUlRfVE9fQkFUIDB4NTAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIENBTl9FUlJfVFJYX0NBTkxfU0hPUlRfVE9fVkNDIDB4NjAKKyNkZWZpbmUgQ0FOX0VSUl9UUlhfQ0FOTF9TSE9SVF9UT19HTkQgMHg3MAorI2RlZmluZSBDQU5fRVJSX1RSWF9DQU5MX1NIT1JUX1RPX0NBTkggMHg4MAorI2VuZGlmCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2Nhbi9ndy5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2Nhbi9ndy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlOWE4YTcKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvY2FuL2d3LmgKQEAgLTAsMCArMSwxMDYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgQ0FOX0dXX0gKKyNkZWZpbmUgQ0FOX0dXX0gKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2Nhbi5oPgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK3N0cnVjdCBydGNhbm1zZyB7CisgX191OCBjYW5fZmFtaWx5OworIF9fdTggZ3d0eXBlOworIF9fdTE2IGZsYWdzOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK307CitlbnVtIHsKKyBDR1dfVFlQRV9VTlNQRUMsCisgQ0dXX1RZUEVfQ0FOX0NBTiwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX19DR1dfVFlQRV9NQVgKK307CisjZGVmaW5lIENHV19UWVBFX01BWCAoX19DR1dfVFlQRV9NQVggLSAxKQorZW51bSB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIENHV19VTlNQRUMsCisgQ0dXX01PRF9BTkQsCisgQ0dXX01PRF9PUiwKKyBDR1dfTU9EX1hPUiwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgQ0dXX01PRF9TRVQsCisgQ0dXX0NTX1hPUiwKKyBDR1dfQ1NfQ1JDOCwKKyBDR1dfSEFORExFRCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgQ0dXX0RST1BQRUQsCisgQ0dXX1NSQ19JRiwKKyBDR1dfRFNUX0lGLAorIENHV19GSUxURVIsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fQ0dXX01BWAorfTsKKyNkZWZpbmUgQ0dXX01BWCAoX19DR1dfTUFYIC0gMSkKKyNkZWZpbmUgQ0dXX0ZMQUdTX0NBTl9FQ0hPIDB4MDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIENHV19GTEFHU19DQU5fU1JDX1RTVEFNUCAweDAyCisjZGVmaW5lIENHV19NT0RfRlVOQ1MgNAorI2RlZmluZSBDR1dfTU9EX0lEIDB4MDEKKyNkZWZpbmUgQ0dXX01PRF9ETEMgMHgwMgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgQ0dXX01PRF9EQVRBIDB4MDQKKyNkZWZpbmUgQ0dXX0ZSQU1FX01PRFMgMworI2RlZmluZSBNQVhfTU9ERlVOQ1RJT05TIChDR1dfTU9EX0ZVTkNTICogQ0dXX0ZSQU1FX01PRFMpCitzdHJ1Y3QgY2d3X2ZyYW1lX21vZCB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIHN0cnVjdCBjYW5fZnJhbWUgY2Y7CisgX191OCBtb2R0eXBlOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKyNkZWZpbmUgQ0dXX01PREFUVFJfTEVOIHNpemVvZihzdHJ1Y3QgY2d3X2ZyYW1lX21vZCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCitzdHJ1Y3QgY2d3X2NzdW1feG9yIHsKKyBfX3M4IGZyb21faWR4OworIF9fczggdG9faWR4OworIF9fczggcmVzdWx0X2lkeDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191OCBpbml0X3hvcl92YWw7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworc3RydWN0IGNnd19jc3VtX2NyYzggeworIF9fczggZnJvbV9pZHg7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fczggdG9faWR4OworIF9fczggcmVzdWx0X2lkeDsKKyBfX3U4IGluaXRfY3JjX3ZhbDsKKyBfX3U4IGZpbmFsX3hvcl92YWw7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTggY3JjdGFiWzI1Nl07CisgX191OCBwcm9maWxlOworIF9fdTggcHJvZmlsZV9kYXRhWzIwXTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBDR1dfQ1NfWE9SX0xFTiBzaXplb2Yoc3RydWN0IGNnd19jc3VtX3hvcikKKyNkZWZpbmUgQ0dXX0NTX0NSQzhfTEVOIHNpemVvZihzdHJ1Y3QgY2d3X2NzdW1fY3JjOCkKK2VudW0geworIENHV19DUkM4UFJGX1VOU1BFQywKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgQ0dXX0NSQzhQUkZfMVU4LAorIENHV19DUkM4UFJGXzE2VTgsCisgQ0dXX0NSQzhQUkZfU0ZGSURfWE9SLAorIF9fQ0dXX0NSQzhQUkZfTUFYCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworfTsKKyNkZWZpbmUgQ0dXX0NSQzhQUkZfTUFYIChfX0NHV19DUkM4UFJGX01BWCAtIDEpCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9jYW4vbmV0bGluay5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2Nhbi9uZXRsaW5rLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGY4YTE5YwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9jYW4vbmV0bGluay5oCkBAIC0wLDAgKzEsMTA2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIENBTl9ORVRMSU5LX0gKKyNkZWZpbmUgQ0FOX05FVExJTktfSAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CitzdHJ1Y3QgY2FuX2JpdHRpbWluZyB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTMyIGJpdHJhdGU7CisgX191MzIgc2FtcGxlX3BvaW50OworIF9fdTMyIHRxOworIF9fdTMyIHByb3Bfc2VnOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UzMiBwaGFzZV9zZWcxOworIF9fdTMyIHBoYXNlX3NlZzI7CisgX191MzIgc2p3OworIF9fdTMyIGJycDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCit9Oworc3RydWN0IGNhbl9iaXR0aW1pbmdfY29uc3QgeworIGNoYXIgbmFtZVsxNl07CisgX191MzIgdHNlZzFfbWluOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UzMiB0c2VnMV9tYXg7CisgX191MzIgdHNlZzJfbWluOworIF9fdTMyIHRzZWcyX21heDsKKyBfX3UzMiBzandfbWF4OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UzMiBicnBfbWluOworIF9fdTMyIGJycF9tYXg7CisgX191MzIgYnJwX2luYzsKK307CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworc3RydWN0IGNhbl9jbG9jayB7CisgX191MzIgZnJlcTsKK307CitlbnVtIGNhbl9zdGF0ZSB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIENBTl9TVEFURV9FUlJPUl9BQ1RJVkUgPSAwLAorIENBTl9TVEFURV9FUlJPUl9XQVJOSU5HLAorIENBTl9TVEFURV9FUlJPUl9QQVNTSVZFLAorIENBTl9TVEFURV9CVVNfT0ZGLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBDQU5fU1RBVEVfU1RPUFBFRCwKKyBDQU5fU1RBVEVfU0xFRVBJTkcsCisgQ0FOX1NUQVRFX01BWAorfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCitzdHJ1Y3QgY2FuX2JlcnJfY291bnRlciB7CisgX191MTYgdHhlcnI7CisgX191MTYgcnhlcnI7Cit9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK3N0cnVjdCBjYW5fY3RybG1vZGUgeworIF9fdTMyIG1hc2s7CisgX191MzIgZmxhZ3M7Cit9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgQ0FOX0NUUkxNT0RFX0xPT1BCQUNLIDB4MDEKKyNkZWZpbmUgQ0FOX0NUUkxNT0RFX0xJU1RFTk9OTFkgMHgwMgorI2RlZmluZSBDQU5fQ1RSTE1PREVfM19TQU1QTEVTIDB4MDQKKyNkZWZpbmUgQ0FOX0NUUkxNT0RFX09ORV9TSE9UIDB4MDgKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIENBTl9DVFJMTU9ERV9CRVJSX1JFUE9SVElORyAweDEwCitzdHJ1Y3QgY2FuX2RldmljZV9zdGF0cyB7CisgX191MzIgYnVzX2Vycm9yOworIF9fdTMyIGVycm9yX3dhcm5pbmc7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTMyIGVycm9yX3Bhc3NpdmU7CisgX191MzIgYnVzX29mZjsKKyBfX3UzMiBhcmJpdHJhdGlvbl9sb3N0OworIF9fdTMyIHJlc3RhcnRzOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK307CitlbnVtIHsKKyBJRkxBX0NBTl9VTlNQRUMsCisgSUZMQV9DQU5fQklUVElNSU5HLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBJRkxBX0NBTl9CSVRUSU1JTkdfQ09OU1QsCisgSUZMQV9DQU5fQ0xPQ0ssCisgSUZMQV9DQU5fU1RBVEUsCisgSUZMQV9DQU5fQ1RSTE1PREUsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIElGTEFfQ0FOX1JFU1RBUlRfTVMsCisgSUZMQV9DQU5fUkVTVEFSVCwKKyBJRkxBX0NBTl9CRVJSX0NPVU5URVIsCisgX19JRkxBX0NBTl9NQVgKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCit9OworI2RlZmluZSBJRkxBX0NBTl9NQVggKF9fSUZMQV9DQU5fTUFYIC0gMSkKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2Nhbi9yYXcuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9jYW4vcmF3LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWYxN2JiNgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9jYW4vcmF3LmgKQEAgLTAsMCArMSwzMSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBDQU5fUkFXX0gKKyNkZWZpbmUgQ0FOX1JBV19ICisjaW5jbHVkZSA8bGludXgvY2FuLmg+CisjZGVmaW5lIFNPTF9DQU5fUkFXIChTT0xfQ0FOX0JBU0UgKyBDQU5fUkFXKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK2VudW0geworIENBTl9SQVdfRklMVEVSID0gMSwKKyBDQU5fUkFXX0VSUl9GSUxURVIsCisgQ0FOX1JBV19MT09QQkFDSywKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgQ0FOX1JBV19SRUNWX09XTl9NU0dTCit9OworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvY2FwYWJpbGl0eS5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2NhcGFiaWxpdHkuaAppbmRleCA2MDViYzI3Li42OGE2ZTBkIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvY2FwYWJpbGl0eS5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9jYXBhYmlsaXR5LmgKQEAgLTcsODkgKzcsMTE0IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfTElOVVhfQ0FQQUJJTElUWV9ICiAjZGVmaW5lIF9MSU5VWF9DQVBBQklMSVRZX0gKLQogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KLQotI2RlZmluZSBfTElOVVhfQ0FQQUJJTElUWV9WRVJTSU9OIDB4MTk5ODAzMzAKLQorc3RydWN0IHRhc2tfc3RydWN0OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgX0xJTlVYX0NBUEFCSUxJVFlfVkVSU0lPTl8xIDB4MTk5ODAzMzAKKyNkZWZpbmUgX0xJTlVYX0NBUEFCSUxJVFlfVTMyU18xIDEKKyNkZWZpbmUgX0xJTlVYX0NBUEFCSUxJVFlfVkVSU0lPTl8yIDB4MjAwNzEwMjYKKyNkZWZpbmUgX0xJTlVYX0NBUEFCSUxJVFlfVTMyU18yIDIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIF9MSU5VWF9DQVBBQklMSVRZX1ZFUlNJT05fMyAweDIwMDgwNTIyCisjZGVmaW5lIF9MSU5VWF9DQVBBQklMSVRZX1UzMlNfMyAyCiB0eXBlZGVmIHN0cnVjdCBfX3VzZXJfY2FwX2hlYWRlcl9zdHJ1Y3QgewogIF9fdTMyIHZlcnNpb247CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGludCBwaWQ7CiB9IF9fdXNlciAqY2FwX3VzZXJfaGVhZGVyX3Q7Ci0KIHR5cGVkZWYgc3RydWN0IF9fdXNlcl9jYXBfZGF0YV9zdHJ1Y3QgewogIF9fdTMyIGVmZmVjdGl2ZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgcGVybWl0dGVkOwogIF9fdTMyIGluaGVyaXRhYmxlOwogfSBfX3VzZXIgKmNhcF91c2VyX2RhdGFfdDsKLQorI2RlZmluZSBWRlNfQ0FQX1JFVklTSU9OX01BU0sgMHhGRjAwMDAwMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVkZTX0NBUF9SRVZJU0lPTl9TSElGVCAyNAorI2RlZmluZSBWRlNfQ0FQX0ZMQUdTX01BU0sgflZGU19DQVBfUkVWSVNJT05fTUFTSworI2RlZmluZSBWRlNfQ0FQX0ZMQUdTX0VGRkVDVElWRSAweDAwMDAwMQorI2RlZmluZSBWRlNfQ0FQX1JFVklTSU9OXzEgMHgwMTAwMDAwMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVkZTX0NBUF9VMzJfMSAxCisjZGVmaW5lIFhBVFRSX0NBUFNfU1pfMSAoc2l6ZW9mKF9fbGUzMikqKDEgKyAyKlZGU19DQVBfVTMyXzEpKQorI2RlZmluZSBWRlNfQ0FQX1JFVklTSU9OXzIgMHgwMjAwMDAwMAorI2RlZmluZSBWRlNfQ0FQX1UzMl8yIDIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFhBVFRSX0NBUFNfU1pfMiAoc2l6ZW9mKF9fbGUzMikqKDEgKyAyKlZGU19DQVBfVTMyXzIpKQorI2RlZmluZSBYQVRUUl9DQVBTX1NaIFhBVFRSX0NBUFNfU1pfMgorI2RlZmluZSBWRlNfQ0FQX1UzMiBWRlNfQ0FQX1UzMl8yCisjZGVmaW5lIFZGU19DQVBfUkVWSVNJT04gVkZTX0NBUF9SRVZJU0lPTl8yCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworc3RydWN0IHZmc19jYXBfZGF0YSB7CisgX19sZTMyIG1hZ2ljX2V0YzsKKyBzdHJ1Y3QgeworIF9fbGUzMiBwZXJtaXR0ZWQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fbGUzMiBpbmhlcml0YWJsZTsKKyB9IGRhdGFbVkZTX0NBUF9VMzJdOworfTsKKyNkZWZpbmUgX0xJTlVYX0NBUEFCSUxJVFlfVkVSU0lPTiBfTElOVVhfQ0FQQUJJTElUWV9WRVJTSU9OXzEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIF9MSU5VWF9DQVBBQklMSVRZX1UzMlMgX0xJTlVYX0NBUEFCSUxJVFlfVTMyU18xCiAjZGVmaW5lIENBUF9DSE9XTiAwCi0KICNkZWZpbmUgQ0FQX0RBQ19PVkVSUklERSAxCi0KICNkZWZpbmUgQ0FQX0RBQ19SRUFEX1NFQVJDSCAyCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIENBUF9GT1dORVIgMwotCiAjZGVmaW5lIENBUF9GU0VUSUQgNAotCi0jZGVmaW5lIENBUF9GU19NQVNLIDB4MWYKLQogI2RlZmluZSBDQVBfS0lMTCA1Ci0KICNkZWZpbmUgQ0FQX1NFVEdJRCA2Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIENBUF9TRVRVSUQgNwotCiAjZGVmaW5lIENBUF9TRVRQQ0FQIDgKLQogI2RlZmluZSBDQVBfTElOVVhfSU1NVVRBQkxFIDkKLQogI2RlZmluZSBDQVBfTkVUX0JJTkRfU0VSVklDRSAxMAotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBDQVBfTkVUX0JST0FEQ0FTVCAxMQotCiAjZGVmaW5lIENBUF9ORVRfQURNSU4gMTIKLQogI2RlZmluZSBDQVBfTkVUX1JBVyAxMwotCiAjZGVmaW5lIENBUF9JUENfTE9DSyAxNAotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBDQVBfSVBDX09XTkVSIDE1Ci0KICNkZWZpbmUgQ0FQX1NZU19NT0RVTEUgMTYKLQogI2RlZmluZSBDQVBfU1lTX1JBV0lPIDE3Ci0KICNkZWZpbmUgQ0FQX1NZU19DSFJPT1QgMTgKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQ0FQX1NZU19QVFJBQ0UgMTkKLQogI2RlZmluZSBDQVBfU1lTX1BBQ0NUIDIwCi0KICNkZWZpbmUgQ0FQX1NZU19BRE1JTiAyMQotCiAjZGVmaW5lIENBUF9TWVNfQk9PVCAyMgotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBDQVBfU1lTX05JQ0UgMjMKLQogI2RlZmluZSBDQVBfU1lTX1JFU09VUkNFIDI0Ci0KICNkZWZpbmUgQ0FQX1NZU19USU1FIDI1Ci0KICNkZWZpbmUgQ0FQX1NZU19UVFlfQ09ORklHIDI2Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIENBUF9NS05PRCAyNwotCiAjZGVmaW5lIENBUF9MRUFTRSAyOAotCiAjZGVmaW5lIENBUF9BVURJVF9XUklURSAyOQotCiAjZGVmaW5lIENBUF9BVURJVF9DT05UUk9MIDMwCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIENBUF9TRVRGQ0FQIDMxCisjZGVmaW5lIENBUF9NQUNfT1ZFUlJJREUgMzIKKyNkZWZpbmUgQ0FQX01BQ19BRE1JTiAzMworI2RlZmluZSBDQVBfU1lTTE9HIDM0CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBDQVBfV0FLRV9BTEFSTSAzNQorI2RlZmluZSBDQVBfTEFTVF9DQVAgQ0FQX1dBS0VfQUxBUk0KKyNkZWZpbmUgY2FwX3ZhbGlkKHgpICgoeCkgPj0gMCAmJiAoeCkgPD0gQ0FQX0xBU1RfQ0FQKQorI2RlZmluZSBDQVBfVE9fSU5ERVgoeCkgKCh4KSA+PiA1KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgQ0FQX1RPX01BU0soeCkgKDEgPDwgKCh4KSAmIDMxKSkKICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2NhcGVsbGFfY20zNjAyLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvY2FwZWxsYV9jbTM2MDIuaAppbmRleCA2MzkxZThhLi42NzJmODI5IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvY2FwZWxsYV9jbTM2MDIuaAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvY2FwZWxsYV9jbTM2MDIuaApAQCAtNywxNyArNywyMiBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX19MSU5VWF9DQVBFTExBX0NNMzYwMl9ICiAjZGVmaW5lIF9fTElOVVhfQ0FQRUxMQV9DTTM2MDJfSAotCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBDQVBFTExBX0NNMzYwMl9JT0NUTF9NQUdJQyAnYycKICNkZWZpbmUgQ0FQRUxMQV9DTTM2MDJfSU9DVExfR0VUX0VOQUJMRUQgICBfSU9SKENBUEVMTEFfQ00zNjAyX0lPQ1RMX01BR0lDLCAxLCBpbnQgKikKICNkZWZpbmUgQ0FQRUxMQV9DTTM2MDJfSU9DVExfRU5BQkxFICAgX0lPVyhDQVBFTExBX0NNMzYwMl9JT0NUTF9NQUdJQywgMiwgaW50ICopCi0KICNlbmRpZgotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2NhcGkuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9jYXBpLmgKaW5kZXggNTU5MWNmNi4uNGVkNTM2OSAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2NhcGkuaAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvY2FwaS5oCkBAIC03LDgyICs3LDgzIEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfX0xJTlVYX0NBUElfSF9fCiAjZGVmaW5lIF9fTElOVVhfQ0FQSV9IX18KLQogI2luY2x1ZGUgPGFzbS90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbGNhcGkuaD4KLQogdHlwZWRlZiBzdHJ1Y3QgY2FwaV9yZWdpc3Rlcl9wYXJhbXMgewogIF9fdTMyIGxldmVsM2NudDsKICBfX3UzMiBkYXRhYmxrY250OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBkYXRhYmxrbGVuOwogfSBjYXBpX3JlZ2lzdGVyX3BhcmFtczsKLQogI2RlZmluZSBDQVBJX1JFR0lTVEVSIF9JT1coJ0MnLDB4MDEsc3RydWN0IGNhcGlfcmVnaXN0ZXJfcGFyYW1zKQotCiAjZGVmaW5lIENBUElfTUFOVUZBQ1RVUkVSX0xFTiA2NAotCi0jZGVmaW5lIENBUElfR0VUX01BTlVGQUNUVVJFUiBfSU9XUignQycsMHgwNixpbnQpICAKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgQ0FQSV9HRVRfTUFOVUZBQ1RVUkVSIF9JT1dSKCdDJywweDA2LGludCkKIHR5cGVkZWYgc3RydWN0IGNhcGlfdmVyc2lvbiB7CiAgX191MzIgbWFqb3J2ZXJzaW9uOwogIF9fdTMyIG1pbm9ydmVyc2lvbjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgbWFqb3JtYW51dmVyc2lvbjsKICBfX3UzMiBtaW5vcm1hbnV2ZXJzaW9uOwogfSBjYXBpX3ZlcnNpb247Ci0KICNkZWZpbmUgQ0FQSV9HRVRfVkVSU0lPTiBfSU9XUignQycsMHgwNyxzdHJ1Y3QgY2FwaV92ZXJzaW9uKQotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBDQVBJX1NFUklBTF9MRU4gOAotI2RlZmluZSBDQVBJX0dFVF9TRVJJQUwgX0lPV1IoJ0MnLDB4MDgsaW50KSAgCi0KKyNkZWZpbmUgQ0FQSV9HRVRfU0VSSUFMIF9JT1dSKCdDJywweDA4LGludCkKIHR5cGVkZWYgc3RydWN0IGNhcGlfcHJvZmlsZSB7CiAgX191MTYgbmNvbnRyb2xsZXI7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTE2IG5iY2hhbm5lbDsKICBfX3UzMiBnb3B0aW9uczsKICBfX3UzMiBzdXBwb3J0MTsKICBfX3UzMiBzdXBwb3J0MjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgc3VwcG9ydDM7CiAgX191MzIgcmVzZXJ2ZWRbNl07CiAgX191MzIgbWFudVs1XTsKIH0gY2FwaV9wcm9maWxlOwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBDQVBJX0dFVF9QUk9GSUxFIF9JT1dSKCdDJywweDA5LHN0cnVjdCBjYXBpX3Byb2ZpbGUpCi0KIHR5cGVkZWYgc3RydWN0IGNhcGlfbWFudWZhY3R1cmVyX2NtZCB7CiAgdW5zaWduZWQgbG9uZyBjbWQ7CiAgdm9pZCBfX3VzZXIgKmRhdGE7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfSBjYXBpX21hbnVmYWN0dXJlcl9jbWQ7Ci0KICNkZWZpbmUgQ0FQSV9NQU5VRkFDVFVSRVJfQ01EIF9JT1dSKCdDJywweDIwLCBzdHJ1Y3QgY2FwaV9tYW51ZmFjdHVyZXJfY21kKQotCiAjZGVmaW5lIENBUElfR0VUX0VSUkNPREUgX0lPUignQycsMHgyMSwgX191MTYpCi0KICNkZWZpbmUgQ0FQSV9JTlNUQUxMRUQgX0lPUignQycsMHgyMiwgX191MTYpCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB0eXBlZGVmIHVuaW9uIGNhcGlfaW9jdGxfc3RydWN0IHsKICBfX3UzMiBjb250cjsKICBjYXBpX3JlZ2lzdGVyX3BhcmFtcyBycGFyYW1zOwogIF9fdTggbWFudWZhY3R1cmVyW0NBUElfTUFOVUZBQ1RVUkVSX0xFTl07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGNhcGlfdmVyc2lvbiB2ZXJzaW9uOwogIF9fdTggc2VyaWFsW0NBUElfU0VSSUFMX0xFTl07CiAgY2FwaV9wcm9maWxlIHByb2ZpbGU7CiAgY2FwaV9tYW51ZmFjdHVyZXJfY21kIGNtZDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MTYgZXJyY29kZTsKIH0gY2FwaV9pb2N0bF9zdHJ1Y3Q7Ci0KICNkZWZpbmUgQ0FQSUZMQUdfSElHSEpBQ0tJTkcgMHgwMDAxCi0KICNkZWZpbmUgQ0FQSV9HRVRfRkxBR1MgX0lPUignQycsMHgyMywgdW5zaWduZWQpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBDQVBJX1NFVF9GTEFHUyBfSU9SKCdDJywweDI0LCB1bnNpZ25lZCkKICNkZWZpbmUgQ0FQSV9DTFJfRkxBR1MgX0lPUignQycsMHgyNSwgdW5zaWduZWQpCi0KICNkZWZpbmUgQ0FQSV9OQ0NJX09QRU5DT1VOVCBfSU9SKCdDJywweDI2LCB1bnNpZ25lZCkKLQogI2RlZmluZSBDQVBJX05DQ0lfR0VUVU5JVCBfSU9SKCdDJywweDI3LCB1bnNpZ25lZCkKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2NkZXYuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9jZGV2LmgKaW5kZXggN2E3MWM3ZS4uMTIyZmI5NCAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2NkZXYuaAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvY2Rldi5oCkBAIC03LDYgKzcsMTMgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9MSU5VWF9DREVWX0gKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9jZHJvbS5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2Nkcm9tLmgKaW5kZXggY2M3MGM5Zi4uYWJlYzEzZiAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2Nkcm9tLmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2Nkcm9tLmgKQEAgLTcsNzEyICs3LDc3OCBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX0xJTlVYX0NEUk9NX0gKICNkZWZpbmUgX0xJTlVYX0NEUk9NX0gKLQogI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KLQogI2RlZmluZSBFRFJJVkVfQ0FOVF9ET19USElTIEVPUE5PVFNVUFAKLQotI2RlZmluZSBDRFJPTVBBVVNFIDB4NTMwMSAgIAotI2RlZmluZSBDRFJPTVJFU1VNRSAweDUzMDIgIAotI2RlZmluZSBDRFJPTVBMQVlNU0YgMHg1MzAzICAKLSNkZWZpbmUgQ0RST01QTEFZVFJLSU5EIDB4NTMwNCAgCi0jZGVmaW5lIENEUk9NUkVBRFRPQ0hEUiAweDUzMDUgIAotI2RlZmluZSBDRFJPTVJFQURUT0NFTlRSWSAweDUzMDYgIAotI2RlZmluZSBDRFJPTVNUT1AgMHg1MzA3ICAKLSNkZWZpbmUgQ0RST01TVEFSVCAweDUzMDggIAotI2RlZmluZSBDRFJPTUVKRUNUIDB4NTMwOSAgCi0jZGVmaW5lIENEUk9NVk9MQ1RSTCAweDUzMGEgIAotI2RlZmluZSBDRFJPTVNVQkNITkwgMHg1MzBiICAKLSNkZWZpbmUgQ0RST01SRUFETU9ERTIgMHg1MzBjICAKLSNkZWZpbmUgQ0RST01SRUFETU9ERTEgMHg1MzBkICAKLSNkZWZpbmUgQ0RST01SRUFEQVVESU8gMHg1MzBlICAKLSNkZWZpbmUgQ0RST01FSkVDVF9TVyAweDUzMGYgIAotI2RlZmluZSBDRFJPTU1VTFRJU0VTU0lPTiAweDUzMTAgIAotI2RlZmluZSBDRFJPTV9HRVRfTUNOIDB4NTMxMSAgCi0jZGVmaW5lIENEUk9NX0dFVF9VUEMgQ0RST01fR0VUX01DTiAgCi0jZGVmaW5lIENEUk9NUkVTRVQgMHg1MzEyICAKLSNkZWZpbmUgQ0RST01WT0xSRUFEIDB4NTMxMyAgCi0jZGVmaW5lIENEUk9NUkVBRFJBVyAweDUzMTQgIAotCi0jZGVmaW5lIENEUk9NUkVBRENPT0tFRCAweDUzMTUgIAotI2RlZmluZSBDRFJPTVNFRUsgMHg1MzE2ICAKLQotI2RlZmluZSBDRFJPTVBMQVlCTEsgMHg1MzE3ICAKLQotI2RlZmluZSBDRFJPTVJFQURBTEwgMHg1MzE4ICAKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgQ0RST01QQVVTRSAweDUzMDEKKyNkZWZpbmUgQ0RST01SRVNVTUUgMHg1MzAyCisjZGVmaW5lIENEUk9NUExBWU1TRiAweDUzMDMKKyNkZWZpbmUgQ0RST01QTEFZVFJLSU5EIDB4NTMwNAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgQ0RST01SRUFEVE9DSERSIDB4NTMwNQorI2RlZmluZSBDRFJPTVJFQURUT0NFTlRSWSAweDUzMDYKKyNkZWZpbmUgQ0RST01TVE9QIDB4NTMwNworI2RlZmluZSBDRFJPTVNUQVJUIDB4NTMwOAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgQ0RST01FSkVDVCAweDUzMDkKKyNkZWZpbmUgQ0RST01WT0xDVFJMIDB4NTMwYQorI2RlZmluZSBDRFJPTVNVQkNITkwgMHg1MzBiCisjZGVmaW5lIENEUk9NUkVBRE1PREUyIDB4NTMwYworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgQ0RST01SRUFETU9ERTEgMHg1MzBkCisjZGVmaW5lIENEUk9NUkVBREFVRElPIDB4NTMwZQorI2RlZmluZSBDRFJPTUVKRUNUX1NXIDB4NTMwZgorI2RlZmluZSBDRFJPTU1VTFRJU0VTU0lPTiAweDUzMTAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIENEUk9NX0dFVF9NQ04gMHg1MzExCisjZGVmaW5lIENEUk9NX0dFVF9VUEMgQ0RST01fR0VUX01DTgorI2RlZmluZSBDRFJPTVJFU0VUIDB4NTMxMgorI2RlZmluZSBDRFJPTVZPTFJFQUQgMHg1MzEzCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBDRFJPTVJFQURSQVcgMHg1MzE0CisjZGVmaW5lIENEUk9NUkVBRENPT0tFRCAweDUzMTUKKyNkZWZpbmUgQ0RST01TRUVLIDB4NTMxNgorI2RlZmluZSBDRFJPTVBMQVlCTEsgMHg1MzE3CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBDRFJPTVJFQURBTEwgMHg1MzE4CiAjZGVmaW5lIENEUk9NR0VUU1BJTkRPV04gMHg1MzFkCiAjZGVmaW5lIENEUk9NU0VUU1BJTkRPV04gMHg1MzFlCi0KLSNkZWZpbmUgQ0RST01DTE9TRVRSQVkgMHg1MzE5ICAKLSNkZWZpbmUgQ0RST01fU0VUX09QVElPTlMgMHg1MzIwICAKLSNkZWZpbmUgQ0RST01fQ0xFQVJfT1BUSU9OUyAweDUzMjEgIAotI2RlZmluZSBDRFJPTV9TRUxFQ1RfU1BFRUQgMHg1MzIyICAKLSNkZWZpbmUgQ0RST01fU0VMRUNUX0RJU0MgMHg1MzIzICAKLSNkZWZpbmUgQ0RST01fTUVESUFfQ0hBTkdFRCAweDUzMjUgIAotI2RlZmluZSBDRFJPTV9EUklWRV9TVEFUVVMgMHg1MzI2ICAKLSNkZWZpbmUgQ0RST01fRElTQ19TVEFUVVMgMHg1MzI3ICAKLSNkZWZpbmUgQ0RST01fQ0hBTkdFUl9OU0xPVFMgMHg1MzI4ICAKLSNkZWZpbmUgQ0RST01fTE9DS0RPT1IgMHg1MzI5ICAKLSNkZWZpbmUgQ0RST01fREVCVUcgMHg1MzMwICAKLSNkZWZpbmUgQ0RST01fR0VUX0NBUEFCSUxJVFkgMHg1MzMxICAKLQotI2RlZmluZSBDRFJPTUFVRElPQlVGU0laIDB4NTM4MiAgCi0KLSNkZWZpbmUgRFZEX1JFQURfU1RSVUNUIDB4NTM5MCAgCi0jZGVmaW5lIERWRF9XUklURV9TVFJVQ1QgMHg1MzkxICAKLSNkZWZpbmUgRFZEX0FVVEggMHg1MzkyICAKLQotI2RlZmluZSBDRFJPTV9TRU5EX1BBQ0tFVCAweDUzOTMgIAotI2RlZmluZSBDRFJPTV9ORVhUX1dSSVRBQkxFIDB4NTM5NCAgCi0jZGVmaW5lIENEUk9NX0xBU1RfV1JJVFRFTiAweDUzOTUgIAotCisjZGVmaW5lIENEUk9NQ0xPU0VUUkFZIDB4NTMxOQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgQ0RST01fU0VUX09QVElPTlMgMHg1MzIwCisjZGVmaW5lIENEUk9NX0NMRUFSX09QVElPTlMgMHg1MzIxCisjZGVmaW5lIENEUk9NX1NFTEVDVF9TUEVFRCAweDUzMjIKKyNkZWZpbmUgQ0RST01fU0VMRUNUX0RJU0MgMHg1MzIzCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBDRFJPTV9NRURJQV9DSEFOR0VEIDB4NTMyNQorI2RlZmluZSBDRFJPTV9EUklWRV9TVEFUVVMgMHg1MzI2CisjZGVmaW5lIENEUk9NX0RJU0NfU1RBVFVTIDB4NTMyNworI2RlZmluZSBDRFJPTV9DSEFOR0VSX05TTE9UUyAweDUzMjgKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIENEUk9NX0xPQ0tET09SIDB4NTMyOQorI2RlZmluZSBDRFJPTV9ERUJVRyAweDUzMzAKKyNkZWZpbmUgQ0RST01fR0VUX0NBUEFCSUxJVFkgMHg1MzMxCisjZGVmaW5lIENEUk9NQVVESU9CVUZTSVogMHg1MzgyCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBEVkRfUkVBRF9TVFJVQ1QgMHg1MzkwCisjZGVmaW5lIERWRF9XUklURV9TVFJVQ1QgMHg1MzkxCisjZGVmaW5lIERWRF9BVVRIIDB4NTM5MgorI2RlZmluZSBDRFJPTV9TRU5EX1BBQ0tFVCAweDUzOTMKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIENEUk9NX05FWFRfV1JJVEFCTEUgMHg1Mzk0CisjZGVmaW5lIENEUk9NX0xBU1RfV1JJVFRFTiAweDUzOTUKIHN0cnVjdCBjZHJvbV9tc2YwCiB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTggbWludXRlOwogIF9fdTggc2Vjb25kOwogIF9fdTggZnJhbWU7CiB9OwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogdW5pb24gY2Ryb21fYWRkcgogewogIHN0cnVjdCBjZHJvbV9tc2YwIG1zZjsKICBpbnQgbGJhOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07Ci0KIHN0cnVjdCBjZHJvbV9tc2YKIHsKICBfX3U4IGNkbXNmX21pbjA7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTggY2Rtc2Zfc2VjMDsKICBfX3U4IGNkbXNmX2ZyYW1lMDsKICBfX3U4IGNkbXNmX21pbjE7CiAgX191OCBjZG1zZl9zZWMxOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IGNkbXNmX2ZyYW1lMTsKIH07Ci0KIHN0cnVjdCBjZHJvbV90aQogeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IGNkdGlfdHJrMDsKICBfX3U4IGNkdGlfaW5kMDsKICBfX3U4IGNkdGlfdHJrMTsKICBfX3U4IGNkdGlfaW5kMTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwotCiBzdHJ1Y3QgY2Ryb21fdG9jaGRyCiB7CiAgX191OCBjZHRoX3RyazA7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTggY2R0aF90cmsxOwogfTsKLQogc3RydWN0IGNkcm9tX3ZvbGN0cmwKIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191OCBjaGFubmVsMDsKICBfX3U4IGNoYW5uZWwxOwogIF9fdTggY2hhbm5lbDI7CiAgX191OCBjaGFubmVsMzsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwotCiBzdHJ1Y3QgY2Ryb21fc3ViY2hubAogewogIF9fdTggY2RzY19mb3JtYXQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTggY2RzY19hdWRpb3N0YXR1czsKICBfX3U4IGNkc2NfYWRyOiA0OwogIF9fdTggY2RzY19jdHJsOiA0OwogIF9fdTggY2RzY190cms7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTggY2RzY19pbmQ7CiAgdW5pb24gY2Ryb21fYWRkciBjZHNjX2Fic2FkZHI7CiAgdW5pb24gY2Ryb21fYWRkciBjZHNjX3JlbGFkZHI7CiB9OwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IGNkcm9tX3RvY2VudHJ5CiB7CiAgX191OCBjZHRlX3RyYWNrOwogIF9fdTggY2R0ZV9hZHIgOjQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTggY2R0ZV9jdHJsIDo0OwogIF9fdTggY2R0ZV9mb3JtYXQ7CiAgdW5pb24gY2Ryb21fYWRkciBjZHRlX2FkZHI7CiAgX191OCBjZHRlX2RhdGFtb2RlOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07Ci0KIHN0cnVjdCBjZHJvbV9yZWFkCiB7CiAgaW50IGNkcmVhZF9sYmE7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGNoYXIgKmNkcmVhZF9idWZhZGRyOwogIGludCBjZHJlYWRfYnVmbGVuOwogfTsKLQogc3RydWN0IGNkcm9tX3JlYWRfYXVkaW8KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB7CiAgdW5pb24gY2Ryb21fYWRkciBhZGRyOwogIF9fdTggYWRkcl9mb3JtYXQ7CiAgaW50IG5mcmFtZXM7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTggX191c2VyICpidWY7CiB9OwotCiBzdHJ1Y3QgY2Ryb21fbXVsdGlzZXNzaW9uCiB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuaW9uIGNkcm9tX2FkZHIgYWRkcjsKICBfX3U4IHhhX2ZsYWc7CiAgX191OCBhZGRyX2Zvcm1hdDsKIH07Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgY2Ryb21fbWNuCiB7CiAgX191OCBtZWRpdW1fY2F0YWxvZ19udW1iZXJbMTRdOwogfTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBjZHJvbV9ibGsKIHsKICB1bnNpZ25lZCBmcm9tOwogIHVuc2lnbmVkIHNob3J0IGxlbjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwotCiAjZGVmaW5lIENEUk9NX1BBQ0tFVF9TSVpFIDEyCi0KICNkZWZpbmUgQ0dDX0RBVEFfVU5LTk9XTiAwCiAjZGVmaW5lIENHQ19EQVRBX1dSSVRFIDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIENHQ19EQVRBX1JFQUQgMgogI2RlZmluZSBDR0NfREFUQV9OT05FIDMKLQogc3RydWN0IGNkcm9tX2dlbmVyaWNfY29tbWFuZAogeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBjaGFyIGNtZFtDRFJPTV9QQUNLRVRfU0laRV07CiAgdW5zaWduZWQgY2hhciBfX3VzZXIgKmJ1ZmZlcjsKICB1bnNpZ25lZCBpbnQgYnVmbGVuOwogIGludCBzdGF0OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgcmVxdWVzdF9zZW5zZSBfX3VzZXIgKnNlbnNlOwogIHVuc2lnbmVkIGNoYXIgZGF0YV9kaXJlY3Rpb247CiAgaW50IHF1aWV0OwogIGludCB0aW1lb3V0OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB2b2lkIF9fdXNlciAqcmVzZXJ2ZWRbMV07CiB9OwotCi0jZGVmaW5lIENEX01JTlMgNzQgIAotI2RlZmluZSBDRF9TRUNTIDYwICAKLSNkZWZpbmUgQ0RfRlJBTUVTIDc1ICAKLSNkZWZpbmUgQ0RfU1lOQ19TSVpFIDEyICAKLSNkZWZpbmUgQ0RfTVNGX09GRlNFVCAxNTAgIAotI2RlZmluZSBDRF9DSFVOS19TSVpFIDI0ICAKLSNkZWZpbmUgQ0RfTlVNX09GX0NIVU5LUyA5OCAgCi0jZGVmaW5lIENEX0ZSQU1FU0laRV9TVUIgOTYgIAotI2RlZmluZSBDRF9IRUFEX1NJWkUgNCAgCi0jZGVmaW5lIENEX1NVQkhFQURfU0laRSA4ICAKLSNkZWZpbmUgQ0RfRURDX1NJWkUgNCAgCi0jZGVmaW5lIENEX1pFUk9fU0laRSA4ICAKLSNkZWZpbmUgQ0RfRUNDX1NJWkUgMjc2ICAKLSNkZWZpbmUgQ0RfRlJBTUVTSVpFIDIwNDggIAotI2RlZmluZSBDRF9GUkFNRVNJWkVfUkFXIDIzNTIgIAotI2RlZmluZSBDRF9GUkFNRVNJWkVfUkFXRVIgMjY0NiAgIAotCi0jZGVmaW5lIENEX0ZSQU1FU0laRV9SQVcxIChDRF9GUkFNRVNJWkVfUkFXLUNEX1NZTkNfU0laRSkgIAotI2RlZmluZSBDRF9GUkFNRVNJWkVfUkFXMCAoQ0RfRlJBTUVTSVpFX1JBVy1DRF9TWU5DX1NJWkUtQ0RfSEVBRF9TSVpFKSAgCi0KLSNkZWZpbmUgQ0RfWEFfSEVBRCAoQ0RfSEVBRF9TSVpFK0NEX1NVQkhFQURfU0laRSkgIAotI2RlZmluZSBDRF9YQV9UQUlMIChDRF9FRENfU0laRStDRF9FQ0NfU0laRSkgIAotI2RlZmluZSBDRF9YQV9TWU5DX0hFQUQgKENEX1NZTkNfU0laRStDRF9YQV9IRUFEKSAgCi0KLSNkZWZpbmUgQ0RST01fTEJBIDB4MDEgIAotI2RlZmluZSBDRFJPTV9NU0YgMHgwMiAgCi0KKyNkZWZpbmUgQ0RfTUlOUyA3NAorI2RlZmluZSBDRF9TRUNTIDYwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBDRF9GUkFNRVMgNzUKKyNkZWZpbmUgQ0RfU1lOQ19TSVpFIDEyCisjZGVmaW5lIENEX01TRl9PRkZTRVQgMTUwCisjZGVmaW5lIENEX0NIVU5LX1NJWkUgMjQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIENEX05VTV9PRl9DSFVOS1MgOTgKKyNkZWZpbmUgQ0RfRlJBTUVTSVpFX1NVQiA5NgorI2RlZmluZSBDRF9IRUFEX1NJWkUgNAorI2RlZmluZSBDRF9TVUJIRUFEX1NJWkUgOAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgQ0RfRURDX1NJWkUgNAorI2RlZmluZSBDRF9aRVJPX1NJWkUgOAorI2RlZmluZSBDRF9FQ0NfU0laRSAyNzYKKyNkZWZpbmUgQ0RfRlJBTUVTSVpFIDIwNDgKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIENEX0ZSQU1FU0laRV9SQVcgMjM1MgorI2RlZmluZSBDRF9GUkFNRVNJWkVfUkFXRVIgMjY0NgorI2RlZmluZSBDRF9GUkFNRVNJWkVfUkFXMSAoQ0RfRlJBTUVTSVpFX1JBVy1DRF9TWU5DX1NJWkUpCisjZGVmaW5lIENEX0ZSQU1FU0laRV9SQVcwIChDRF9GUkFNRVNJWkVfUkFXLUNEX1NZTkNfU0laRS1DRF9IRUFEX1NJWkUpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBDRF9YQV9IRUFEIChDRF9IRUFEX1NJWkUrQ0RfU1VCSEVBRF9TSVpFKQorI2RlZmluZSBDRF9YQV9UQUlMIChDRF9FRENfU0laRStDRF9FQ0NfU0laRSkKKyNkZWZpbmUgQ0RfWEFfU1lOQ19IRUFEIChDRF9TWU5DX1NJWkUrQ0RfWEFfSEVBRCkKKyNkZWZpbmUgQ0RST01fTEJBIDB4MDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIENEUk9NX01TRiAweDAyCiAjZGVmaW5lIENEUk9NX0RBVEFfVFJBQ0sgMHgwNAotCiAjZGVmaW5lIENEUk9NX0xFQURPVVQgMHhBQQotCi0jZGVmaW5lIENEUk9NX0FVRElPX0lOVkFMSUQgMHgwMCAgCi0jZGVmaW5lIENEUk9NX0FVRElPX1BMQVkgMHgxMSAgCi0jZGVmaW5lIENEUk9NX0FVRElPX1BBVVNFRCAweDEyICAKLSNkZWZpbmUgQ0RST01fQVVESU9fQ09NUExFVEVEIDB4MTMgIAotI2RlZmluZSBDRFJPTV9BVURJT19FUlJPUiAweDE0ICAKLSNkZWZpbmUgQ0RST01fQVVESU9fTk9fU1RBVFVTIDB4MTUgIAotCi0jZGVmaW5lIENEQ19DTE9TRV9UUkFZIDB4MSAgCi0jZGVmaW5lIENEQ19PUEVOX1RSQVkgMHgyICAKLSNkZWZpbmUgQ0RDX0xPQ0sgMHg0ICAKLSNkZWZpbmUgQ0RDX1NFTEVDVF9TUEVFRCAweDggIAotI2RlZmluZSBDRENfU0VMRUNUX0RJU0MgMHgxMCAgCi0jZGVmaW5lIENEQ19NVUxUSV9TRVNTSU9OIDB4MjAgIAotI2RlZmluZSBDRENfTUNOIDB4NDAgIAotI2RlZmluZSBDRENfTUVESUFfQ0hBTkdFRCAweDgwICAKLSNkZWZpbmUgQ0RDX1BMQVlfQVVESU8gMHgxMDAgIAotI2RlZmluZSBDRENfUkVTRVQgMHgyMDAgIAotI2RlZmluZSBDRENfRFJJVkVfU1RBVFVTIDB4ODAwICAKLSNkZWZpbmUgQ0RDX0dFTkVSSUNfUEFDS0VUIDB4MTAwMCAgCi0jZGVmaW5lIENEQ19DRF9SIDB4MjAwMCAgCi0jZGVmaW5lIENEQ19DRF9SVyAweDQwMDAgIAotI2RlZmluZSBDRENfRFZEIDB4ODAwMCAgCi0jZGVmaW5lIENEQ19EVkRfUiAweDEwMDAwICAKLSNkZWZpbmUgQ0RDX0RWRF9SQU0gMHgyMDAwMCAgCi0jZGVmaW5lIENEQ19NT19EUklWRSAweDQwMDAwICAKLSNkZWZpbmUgQ0RDX01SVyAweDgwMDAwICAKLSNkZWZpbmUgQ0RDX01SV19XIDB4MTAwMDAwICAKLSNkZWZpbmUgQ0RDX1JBTSAweDIwMDAwMCAgCi0KLSNkZWZpbmUgQ0RTX05PX0lORk8gMCAgCisjZGVmaW5lIENEUk9NX0FVRElPX0lOVkFMSUQgMHgwMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgQ0RST01fQVVESU9fUExBWSAweDExCisjZGVmaW5lIENEUk9NX0FVRElPX1BBVVNFRCAweDEyCisjZGVmaW5lIENEUk9NX0FVRElPX0NPTVBMRVRFRCAweDEzCisjZGVmaW5lIENEUk9NX0FVRElPX0VSUk9SIDB4MTQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIENEUk9NX0FVRElPX05PX1NUQVRVUyAweDE1CisjZGVmaW5lIENEQ19DTE9TRV9UUkFZIDB4MQorI2RlZmluZSBDRENfT1BFTl9UUkFZIDB4MgorI2RlZmluZSBDRENfTE9DSyAweDQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIENEQ19TRUxFQ1RfU1BFRUQgMHg4CisjZGVmaW5lIENEQ19TRUxFQ1RfRElTQyAweDEwCisjZGVmaW5lIENEQ19NVUxUSV9TRVNTSU9OIDB4MjAKKyNkZWZpbmUgQ0RDX01DTiAweDQwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBDRENfTUVESUFfQ0hBTkdFRCAweDgwCisjZGVmaW5lIENEQ19QTEFZX0FVRElPIDB4MTAwCisjZGVmaW5lIENEQ19SRVNFVCAweDIwMAorI2RlZmluZSBDRENfRFJJVkVfU1RBVFVTIDB4ODAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBDRENfR0VORVJJQ19QQUNLRVQgMHgxMDAwCisjZGVmaW5lIENEQ19DRF9SIDB4MjAwMAorI2RlZmluZSBDRENfQ0RfUlcgMHg0MDAwCisjZGVmaW5lIENEQ19EVkQgMHg4MDAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBDRENfRFZEX1IgMHgxMDAwMAorI2RlZmluZSBDRENfRFZEX1JBTSAweDIwMDAwCisjZGVmaW5lIENEQ19NT19EUklWRSAweDQwMDAwCisjZGVmaW5lIENEQ19NUlcgMHg4MDAwMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgQ0RDX01SV19XIDB4MTAwMDAwCisjZGVmaW5lIENEQ19SQU0gMHgyMDAwMDAKKyNkZWZpbmUgQ0RTX05PX0lORk8gMAogI2RlZmluZSBDRFNfTk9fRElTQyAxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBDRFNfVFJBWV9PUEVOIDIKICNkZWZpbmUgQ0RTX0RSSVZFX05PVF9SRUFEWSAzCiAjZGVmaW5lIENEU19ESVNDX09LIDQKLQogI2RlZmluZSBDRFNfQVVESU8gMTAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBDRFNfREFUQV8xIDEwMQogI2RlZmluZSBDRFNfREFUQV8yIDEwMgogI2RlZmluZSBDRFNfWEFfMl8xIDEwMwogI2RlZmluZSBDRFNfWEFfMl8yIDEwNAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQ0RTX01JWEVEIDEwNQotCi0jZGVmaW5lIENET19BVVRPX0NMT1NFIDB4MSAgCi0jZGVmaW5lIENET19BVVRPX0VKRUNUIDB4MiAgCi0jZGVmaW5lIENET19VU0VfRkZMQUdTIDB4NCAgCi0jZGVmaW5lIENET19MT0NLIDB4OCAgCi0jZGVmaW5lIENET19DSEVDS19UWVBFIDB4MTAgIAotCisjZGVmaW5lIENET19BVVRPX0NMT1NFIDB4MQorI2RlZmluZSBDRE9fQVVUT19FSkVDVCAweDIKKyNkZWZpbmUgQ0RPX1VTRV9GRkxBR1MgMHg0CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBDRE9fTE9DSyAweDgKKyNkZWZpbmUgQ0RPX0NIRUNLX1RZUEUgMHgxMAogI2RlZmluZSBDRFNMX05PTkUgKChpbnQpICh+MFU+PjEpLTEpCiAjZGVmaW5lIENEU0xfQ1VSUkVOVCAoKGludCkgKH4wVT4+MSkpCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIENEX1BBUlRfTUFYIDY0CiAjZGVmaW5lIENEX1BBUlRfTUFTSyAoQ0RfUEFSVF9NQVggLSAxKQotCiAjZGVmaW5lIEdQQ01EX0JMQU5LIDB4YTEKICNkZWZpbmUgR1BDTURfQ0xPU0VfVFJBQ0sgMHg1YgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgR1BDTURfRkxVU0hfQ0FDSEUgMHgzNQogI2RlZmluZSBHUENNRF9GT1JNQVRfVU5JVCAweDA0CiAjZGVmaW5lIEdQQ01EX0dFVF9DT05GSUdVUkFUSU9OIDB4NDYKICNkZWZpbmUgR1BDTURfR0VUX0VWRU5UX1NUQVRVU19OT1RJRklDQVRJT04gMHg0YQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgR1BDTURfR0VUX1BFUkZPUk1BTkNFIDB4YWMKICNkZWZpbmUgR1BDTURfSU5RVUlSWSAweDEyCiAjZGVmaW5lIEdQQ01EX0xPQURfVU5MT0FEIDB4YTYKICNkZWZpbmUgR1BDTURfTUVDSEFOSVNNX1NUQVRVUyAweGJkCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBHUENNRF9NT0RFX1NFTEVDVF8xMCAweDU1CiAjZGVmaW5lIEdQQ01EX01PREVfU0VOU0VfMTAgMHg1YQogI2RlZmluZSBHUENNRF9QQVVTRV9SRVNVTUUgMHg0YgogI2RlZmluZSBHUENNRF9QTEFZX0FVRElPXzEwIDB4NDUKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEdQQ01EX1BMQVlfQVVESU9fTVNGIDB4NDcKICNkZWZpbmUgR1BDTURfUExBWV9BVURJT19USSAweDQ4CiAjZGVmaW5lIEdQQ01EX1BMQVlfQ0QgMHhiYwogI2RlZmluZSBHUENNRF9QUkVWRU5UX0FMTE9XX01FRElVTV9SRU1PVkFMIDB4MWUKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEdQQ01EX1JFQURfMTAgMHgyOAogI2RlZmluZSBHUENNRF9SRUFEXzEyIDB4YTgKICNkZWZpbmUgR1BDTURfUkVBRF9CVUZGRVJfQ0FQQUNJVFkgMHg1YwogI2RlZmluZSBHUENNRF9SRUFEX0NEVkRfQ0FQQUNJVFkgMHgyNQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgR1BDTURfUkVBRF9DRCAweGJlCiAjZGVmaW5lIEdQQ01EX1JFQURfQ0RfTVNGIDB4YjkKICNkZWZpbmUgR1BDTURfUkVBRF9ESVNDX0lORk8gMHg1MQogI2RlZmluZSBHUENNRF9SRUFEX0RWRF9TVFJVQ1RVUkUgMHhhZAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgR1BDTURfUkVBRF9GT1JNQVRfQ0FQQUNJVElFUyAweDIzCiAjZGVmaW5lIEdQQ01EX1JFQURfSEVBREVSIDB4NDQKICNkZWZpbmUgR1BDTURfUkVBRF9UUkFDS19SWk9ORV9JTkZPIDB4NTIKICNkZWZpbmUgR1BDTURfUkVBRF9TVUJDSEFOTkVMIDB4NDIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEdQQ01EX1JFQURfVE9DX1BNQV9BVElQIDB4NDMKICNkZWZpbmUgR1BDTURfUkVQQUlSX1JaT05FX1RSQUNLIDB4NTgKICNkZWZpbmUgR1BDTURfUkVQT1JUX0tFWSAweGE0CiAjZGVmaW5lIEdQQ01EX1JFUVVFU1RfU0VOU0UgMHgwMworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgR1BDTURfUkVTRVJWRV9SWk9ORV9UUkFDSyAweDUzCiAjZGVmaW5lIEdQQ01EX1NFTkRfQ1VFX1NIRUVUIDB4NWQKICNkZWZpbmUgR1BDTURfU0NBTiAweGJhCiAjZGVmaW5lIEdQQ01EX1NFRUsgMHgyYgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgR1BDTURfU0VORF9EVkRfU1RSVUNUVVJFIDB4YmYKICNkZWZpbmUgR1BDTURfU0VORF9FVkVOVCAweGEyCiAjZGVmaW5lIEdQQ01EX1NFTkRfS0VZIDB4YTMKICNkZWZpbmUgR1BDTURfU0VORF9PUEMgMHg1NAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgR1BDTURfU0VUX1JFQURfQUhFQUQgMHhhNwogI2RlZmluZSBHUENNRF9TRVRfU1RSRUFNSU5HIDB4YjYKICNkZWZpbmUgR1BDTURfU1RBUlRfU1RPUF9VTklUIDB4MWIKICNkZWZpbmUgR1BDTURfU1RPUF9QTEFZX1NDQU4gMHg0ZQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgR1BDTURfVEVTVF9VTklUX1JFQURZIDB4MDAKICNkZWZpbmUgR1BDTURfVkVSSUZZXzEwIDB4MmYKICNkZWZpbmUgR1BDTURfV1JJVEVfMTAgMHgyYQogI2RlZmluZSBHUENNRF9XUklURV9BTkRfVkVSSUZZXzEwIDB4MmUKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgR1BDTURfU0VUX1NQRUVEIDB4YmIKLQogI2RlZmluZSBHUENNRF9QTEFZQVVESU9fVEkgMHg0OAotCiAjZGVmaW5lIEdQQ01EX0dFVF9NRURJQV9TVEFUVVMgMHhkYQotCiAjZGVmaW5lIEdQTU9ERV9WRU5ET1JfUEFHRSAweDAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBHUE1PREVfUl9XX0VSUk9SX1BBR0UgMHgwMQogI2RlZmluZSBHUE1PREVfV1JJVEVfUEFSTVNfUEFHRSAweDA1CiAjZGVmaW5lIEdQTU9ERV9XQ0FDSElOR19QQUdFIDB4MDgKICNkZWZpbmUgR1BNT0RFX0FVRElPX0NUTF9QQUdFIDB4MGUKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEdQTU9ERV9QT1dFUl9QQUdFIDB4MWEKICNkZWZpbmUgR1BNT0RFX0ZBVUxUX0ZBSUxfUEFHRSAweDFjCiAjZGVmaW5lIEdQTU9ERV9UT19QUk9URUNUX1BBR0UgMHgxZAogI2RlZmluZSBHUE1PREVfQ0FQQUJJTElUSUVTX1BBR0UgMHgyYQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgR1BNT0RFX0FMTF9QQUdFUyAweDNmCi0KICNkZWZpbmUgR1BNT0RFX0NEUk9NX1BBR0UgMHgwZAotCiAjZGVmaW5lIERWRF9TVFJVQ1RfUEhZU0lDQUwgMHgwMAogI2RlZmluZSBEVkRfU1RSVUNUX0NPUFlSSUdIVCAweDAxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBEVkRfU1RSVUNUX0RJU0NLRVkgMHgwMgogI2RlZmluZSBEVkRfU1RSVUNUX0JDQSAweDAzCiAjZGVmaW5lIERWRF9TVFJVQ1RfTUFOVUZBQ1QgMHgwNAotCiBzdHJ1Y3QgZHZkX2xheWVyIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191OCBib29rX3ZlcnNpb24gOiA0OwogIF9fdTggYm9va190eXBlIDogNDsKICBfX3U4IG1pbl9yYXRlIDogNDsKICBfX3U4IGRpc2Nfc2l6ZSA6IDQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTggbGF5ZXJfdHlwZSA6IDQ7CiAgX191OCB0cmFja19wYXRoIDogMTsKICBfX3U4IG5sYXllcnMgOiAyOwogIF9fdTggdHJhY2tfZGVuc2l0eSA6IDQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTggbGluZWFyX2RlbnNpdHkgOiA0OwogIF9fdTggYmNhIDogMTsKICBfX3UzMiBzdGFydF9zZWN0b3I7CiAgX191MzIgZW5kX3NlY3RvcjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgZW5kX3NlY3Rvcl9sMDsKIH07Ci0KICNkZWZpbmUgRFZEX0xBWUVSUyA0Ci0KIHN0cnVjdCBkdmRfcGh5c2ljYWwgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IHR5cGU7CiAgX191OCBsYXllcl9udW07CiAgc3RydWN0IGR2ZF9sYXllciBsYXllcltEVkRfTEFZRVJTXTsKIH07Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgZHZkX2NvcHlyaWdodCB7CiAgX191OCB0eXBlOwotCiAgX191OCBsYXllcl9udW07CiAgX191OCBjcHN0OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IHJtaTsKIH07Ci0KIHN0cnVjdCBkdmRfZGlzY2tleSB7CiAgX191OCB0eXBlOwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGFnaWQgOiAyOwogIF9fdTggdmFsdWVbMjA0OF07CiB9OwotCiBzdHJ1Y3QgZHZkX2JjYSB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTggdHlwZTsKLQogIGludCBsZW47CiAgX191OCB2YWx1ZVsxODhdOwogfTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBkdmRfbWFudWZhY3QgewogIF9fdTggdHlwZTsKLQogIF9fdTggbGF5ZXJfbnVtOwogIGludCBsZW47CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTggdmFsdWVbMjA0OF07CiB9OwotCiB0eXBlZGVmIHVuaW9uIHsKICBfX3U4IHR5cGU7Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IGR2ZF9waHlzaWNhbCBwaHlzaWNhbDsKICBzdHJ1Y3QgZHZkX2NvcHlyaWdodCBjb3B5cmlnaHQ7CiAgc3RydWN0IGR2ZF9kaXNja2V5IGRpc2NrZXk7CiAgc3RydWN0IGR2ZF9iY2EgYmNhOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgZHZkX21hbnVmYWN0IG1hbnVmYWN0OwogfSBkdmRfc3RydWN0OwotCiAjZGVmaW5lIERWRF9MVV9TRU5EX0FHSUQgMAogI2RlZmluZSBEVkRfSE9TVF9TRU5EX0NIQUxMRU5HRSAxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBEVkRfTFVfU0VORF9LRVkxIDIKICNkZWZpbmUgRFZEX0xVX1NFTkRfQ0hBTExFTkdFIDMKICNkZWZpbmUgRFZEX0hPU1RfU0VORF9LRVkyIDQKLQogI2RlZmluZSBEVkRfQVVUSF9FU1RBQkxJU0hFRCA1CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBEVkRfQVVUSF9GQUlMVVJFIDYKLQogI2RlZmluZSBEVkRfTFVfU0VORF9USVRMRV9LRVkgNwogI2RlZmluZSBEVkRfTFVfU0VORF9BU0YgOAogI2RlZmluZSBEVkRfSU5WQUxJREFURV9BR0lEIDkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIERWRF9MVV9TRU5EX1JQQ19TVEFURSAxMAogI2RlZmluZSBEVkRfSE9TVF9TRU5EX1JQQ19TVEFURSAxMQotCiB0eXBlZGVmIF9fdTggZHZkX2tleVs1XTsKIHR5cGVkZWYgX191OCBkdmRfY2hhbGxlbmdlWzEwXTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBkdmRfbHVfc2VuZF9hZ2lkIHsKICBfX3U4IHR5cGU7CiAgdW5zaWduZWQgYWdpZCA6IDI7CiB9OwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IGR2ZF9ob3N0X3NlbmRfY2hhbGxlbmdlIHsKICBfX3U4IHR5cGU7CiAgdW5zaWduZWQgYWdpZCA6IDI7Ci0KICBkdmRfY2hhbGxlbmdlIGNoYWw7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKLQogc3RydWN0IGR2ZF9zZW5kX2tleSB7CiAgX191OCB0eXBlOwogIHVuc2lnbmVkIGFnaWQgOiAyOwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGR2ZF9rZXkga2V5OwogfTsKLQogc3RydWN0IGR2ZF9sdV9zZW5kX2NoYWxsZW5nZSB7CiAgX191OCB0eXBlOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBhZ2lkIDogMjsKLQogIGR2ZF9jaGFsbGVuZ2UgY2hhbDsKIH07Ci0KICNkZWZpbmUgRFZEX0NQTV9OT19DT1BZUklHSFQgMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRFZEX0NQTV9DT1BZUklHSFRFRCAxCi0KICNkZWZpbmUgRFZEX0NQX1NFQ19OT05FIDAKICNkZWZpbmUgRFZEX0NQX1NFQ19FWElTVCAxCi0KICNkZWZpbmUgRFZEX0NHTVNfVU5SRVNUUklDVEVEIDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIERWRF9DR01TX1NJTkdMRSAyCiAjZGVmaW5lIERWRF9DR01TX1JFU1RSSUNURUQgMwotCiBzdHJ1Y3QgZHZkX2x1X3NlbmRfdGl0bGVfa2V5IHsKICBfX3U4IHR5cGU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGFnaWQgOiAyOwotCiAgZHZkX2tleSB0aXRsZV9rZXk7CiAgaW50IGxiYTsKICB1bnNpZ25lZCBjcG0gOiAxOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBjcF9zZWMgOiAxOwogIHVuc2lnbmVkIGNnbXMgOiAyOwogfTsKLQogc3RydWN0IGR2ZF9sdV9zZW5kX2FzZiB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTggdHlwZTsKICB1bnNpZ25lZCBhZ2lkIDogMjsKLQogIHVuc2lnbmVkIGFzZiA6IDE7CiB9OwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IGR2ZF9ob3N0X3NlbmRfcnBjc3RhdGUgewogIF9fdTggdHlwZTsKICBfX3U4IHBkcmM7CiB9OwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IGR2ZF9sdV9zZW5kX3JwY3N0YXRlIHsKICBfX3U4IHR5cGUgOiAyOwogIF9fdTggdnJhIDogMzsKICBfX3U4IHVjY2EgOiAzOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IHJlZ2lvbl9tYXNrOwogIF9fdTggcnBjX3NjaGVtZTsKIH07Ci0KIHR5cGVkZWYgdW5pb24geworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IHR5cGU7Ci0KICBzdHJ1Y3QgZHZkX2x1X3NlbmRfYWdpZCBsc2E7CiAgc3RydWN0IGR2ZF9ob3N0X3NlbmRfY2hhbGxlbmdlIGhzYzsKICBzdHJ1Y3QgZHZkX3NlbmRfa2V5IGxzazsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IGR2ZF9sdV9zZW5kX2NoYWxsZW5nZSBsc2M7CiAgc3RydWN0IGR2ZF9zZW5kX2tleSBoc2s7CiAgc3RydWN0IGR2ZF9sdV9zZW5kX3RpdGxlX2tleSBsc3RrOwogIHN0cnVjdCBkdmRfbHVfc2VuZF9hc2YgbHNhc2Y7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCBkdmRfaG9zdF9zZW5kX3JwY3N0YXRlIGhycGNzOwogIHN0cnVjdCBkdmRfbHVfc2VuZF9ycGNzdGF0ZSBscnBjczsKIH0gZHZkX2F1dGhpbmZvOwotCiBzdHJ1Y3QgcmVxdWVzdF9zZW5zZSB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2lmZGVmIF9fQklHX0VORElBTl9CSVRGSUVMRAogIF9fdTggdmFsaWQgOiAxOwogIF9fdTggZXJyb3JfY29kZSA6IDc7CiAjZWxpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTl9CSVRGSUVMRCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191OCBlcnJvcl9jb2RlIDogNzsKICBfX3U4IHZhbGlkIDogMTsKICNlbmRpZgogIF9fdTggc2VnbWVudF9udW1iZXI7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2lmZGVmIF9fQklHX0VORElBTl9CSVRGSUVMRAogIF9fdTggcmVzZXJ2ZWQxIDogMjsKICBfX3U4IGlsaSA6IDE7CiAgX191OCByZXNlcnZlZDIgOiAxOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IHNlbnNlX2tleSA6IDQ7CiAjZWxpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTl9CSVRGSUVMRCkKICBfX3U4IHNlbnNlX2tleSA6IDQ7CiAgX191OCByZXNlcnZlZDIgOiAxOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IGlsaSA6IDE7CiAgX191OCByZXNlcnZlZDEgOiAyOwogI2VuZGlmCiAgX191OCBpbmZvcm1hdGlvbls0XTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191OCBhZGRfc2Vuc2VfbGVuOwogIF9fdTggY29tbWFuZF9pbmZvWzRdOwogIF9fdTggYXNjOwogIF9fdTggYXNjcTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191OCBmcnVjOwogIF9fdTggc2tzWzNdOwogIF9fdTggYXNiWzQ2XTsKIH07Ci0KLSNkZWZpbmUgQ0RGX1JXUlQgMHgwMDIwICAKLSNkZWZpbmUgQ0RGX0hXRE0gMHgwMDI0ICAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIENERl9SV1JUIDB4MDAyMAorI2RlZmluZSBDREZfSFdETSAweDAwMjQKICNkZWZpbmUgQ0RGX01SVyAweDAwMjgKLQogI2RlZmluZSBDRE1fTVJXX05PVE1SVyAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBDRE1fTVJXX0JHRk9STUFUX0lOQUNUSVZFIDEKICNkZWZpbmUgQ0RNX01SV19CR0ZPUk1BVF9BQ1RJVkUgMgogI2RlZmluZSBDRE1fTVJXX0JHRk9STUFUX0NPTVBMRVRFIDMKLQogI2RlZmluZSBNUldfTEJBX0RNQSAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNUldfTEJBX0dBQSAxCi0KICNkZWZpbmUgTVJXX01PREVfUENfUFJFMSAweDJjCiAjZGVmaW5lIE1SV19NT0RFX1BDIDB4MDMKLQogc3RydWN0IG1yd19mZWF0dXJlX2Rlc2MgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UxNiBmZWF0dXJlX2NvZGU7CiAjaWZkZWYgX19CSUdfRU5ESUFOX0JJVEZJRUxECiAgX191OCByZXNlcnZlZDEgOiAyOwogIF9fdTggZmVhdHVyZV92ZXJzaW9uIDogNDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191OCBwZXJzaXN0ZW50IDogMTsKICBfX3U4IGN1cnIgOiAxOwogI2VsaWYgZGVmaW5lZChfX0xJVFRMRV9FTkRJQU5fQklURklFTEQpCiAgX191OCBjdXJyIDogMTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191OCBwZXJzaXN0ZW50IDogMTsKICBfX3U4IGZlYXR1cmVfdmVyc2lvbiA6IDQ7CiAgX191OCByZXNlcnZlZDEgOiAyOwogI2VuZGlmCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTggYWRkX2xlbjsKICNpZmRlZiBfX0JJR19FTkRJQU5fQklURklFTEQKICBfX3U4IHJlc2VydmVkMiA6IDc7CiAgX191OCB3cml0ZSA6IDE7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2VsaWYgZGVmaW5lZChfX0xJVFRMRV9FTkRJQU5fQklURklFTEQpCiAgX191OCB3cml0ZSA6IDE7CiAgX191OCByZXNlcnZlZDIgOiA3OwogI2VuZGlmCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTggcmVzZXJ2ZWQzOwogIF9fdTggcmVzZXJ2ZWQ0OwogIF9fdTggcmVzZXJ2ZWQ1OwogfTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCByd3J0X2ZlYXR1cmVfZGVzYyB7CiAgX191MTYgZmVhdHVyZV9jb2RlOwogI2lmZGVmIF9fQklHX0VORElBTl9CSVRGSUVMRAogIF9fdTggcmVzZXJ2ZWQxIDogMjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191OCBmZWF0dXJlX3ZlcnNpb24gOiA0OwogIF9fdTggcGVyc2lzdGVudCA6IDE7CiAgX191OCBjdXJyIDogMTsKICNlbGlmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOX0JJVEZJRUxEKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IGN1cnIgOiAxOwogIF9fdTggcGVyc2lzdGVudCA6IDE7CiAgX191OCBmZWF0dXJlX3ZlcnNpb24gOiA0OwogIF9fdTggcmVzZXJ2ZWQxIDogMjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZW5kaWYKICBfX3U4IGFkZF9sZW47CiAgX191MzIgbGFzdF9sYmE7CiAgX191MzIgYmxvY2tfc2l6ZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MTYgYmxvY2tpbmc7CiAjaWZkZWYgX19CSUdfRU5ESUFOX0JJVEZJRUxECiAgX191OCByZXNlcnZlZDIgOiA3OwogIF9fdTggcGFnZV9wcmVzZW50IDogMTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZWxpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTl9CSVRGSUVMRCkKICBfX3U4IHBhZ2VfcHJlc2VudCA6IDE7CiAgX191OCByZXNlcnZlZDIgOiA3OwogI2VuZGlmCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTggcmVzZXJ2ZWQzOwogfTsKLQogdHlwZWRlZiBzdHJ1Y3QgewogIF9fdTE2IGRpc2NfaW5mb3JtYXRpb25fbGVuZ3RoOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNpZmRlZiBfX0JJR19FTkRJQU5fQklURklFTEQKICBfX3U4IHJlc2VydmVkMSA6IDM7CiAgX191OCBlcmFzYWJsZSA6IDE7CiAgX191OCBib3JkZXJfc3RhdHVzIDogMjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191OCBkaXNjX3N0YXR1cyA6IDI7CiAjZWxpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTl9CSVRGSUVMRCkKICBfX3U4IGRpc2Nfc3RhdHVzIDogMjsKICBfX3U4IGJvcmRlcl9zdGF0dXMgOiAyOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IGVyYXNhYmxlIDogMTsKICBfX3U4IHJlc2VydmVkMSA6IDM7CiAjZWxzZQogI2Vycm9yICJQbGVhc2UgZml4IDxhc20vYnl0ZW9yZGVyLmg+IgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlbmRpZgogIF9fdTggbl9maXJzdF90cmFjazsKICBfX3U4IG5fc2Vzc2lvbnNfbHNiOwogIF9fdTggZmlyc3RfdHJhY2tfbHNiOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IGxhc3RfdHJhY2tfbHNiOwogI2lmZGVmIF9fQklHX0VORElBTl9CSVRGSUVMRAogIF9fdTggZGlkX3YgOiAxOwogIF9fdTggZGJjX3YgOiAxOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IHVydSA6IDE7CiAgX191OCByZXNlcnZlZDIgOiAyOwogIF9fdTggZGJpdCA6IDE7CiAgX191OCBtcndfc3RhdHVzIDogMjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZWxpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTl9CSVRGSUVMRCkKICBfX3U4IG1yd19zdGF0dXMgOiAyOwogIF9fdTggZGJpdCA6IDE7CiAgX191OCByZXNlcnZlZDIgOiAyOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IHVydSA6IDE7CiAgX191OCBkYmNfdiA6IDE7CiAgX191OCBkaWRfdiA6IDE7CiAjZW5kaWYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191OCBkaXNjX3R5cGU7CiAgX191OCBuX3Nlc3Npb25zX21zYjsKICBfX3U4IGZpcnN0X3RyYWNrX21zYjsKICBfX3U4IGxhc3RfdHJhY2tfbXNiOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBkaXNjX2lkOwogIF9fdTMyIGxlYWRfaW47CiAgX191MzIgbGVhZF9vdXQ7CiAgX191OCBkaXNjX2Jhcl9jb2RlWzhdOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IHJlc2VydmVkMzsKICBfX3U4IG5fb3BjOwogfSBkaXNjX2luZm9ybWF0aW9uOwotCiB0eXBlZGVmIHN0cnVjdCB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTE2IHRyYWNrX2luZm9ybWF0aW9uX2xlbmd0aDsKICBfX3U4IHRyYWNrX2xzYjsKICBfX3U4IHNlc3Npb25fbHNiOwogIF9fdTggcmVzZXJ2ZWQxOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNpZmRlZiBfX0JJR19FTkRJQU5fQklURklFTEQKICBfX3U4IHJlc2VydmVkMiA6IDI7CiAgX191OCBkYW1hZ2UgOiAxOwogIF9fdTggY29weSA6IDE7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTggdHJhY2tfbW9kZSA6IDQ7CiAgX191OCBydCA6IDE7CiAgX191OCBibGFuayA6IDE7CiAgX191OCBwYWNrZXQgOiAxOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IGZwIDogMTsKICBfX3U4IGRhdGFfbW9kZSA6IDQ7CiAgX191OCByZXNlcnZlZDMgOiA2OwogIF9fdTggbHJhX3YgOiAxOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IG53YV92IDogMTsKICNlbGlmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOX0JJVEZJRUxEKQogIF9fdTggdHJhY2tfbW9kZSA6IDQ7CiAgX191OCBjb3B5IDogMTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191OCBkYW1hZ2UgOiAxOwogIF9fdTggcmVzZXJ2ZWQyIDogMjsKICBfX3U4IGRhdGFfbW9kZSA6IDQ7CiAgX191OCBmcCA6IDE7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTggcGFja2V0IDogMTsKICBfX3U4IGJsYW5rIDogMTsKICBfX3U4IHJ0IDogMTsKICBfX3U4IG53YV92IDogMTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191OCBscmFfdiA6IDE7CiAgX191OCByZXNlcnZlZDMgOiA2OwogI2VuZGlmCiAgX191MzIgdHJhY2tfc3RhcnQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIG5leHRfd3JpdGFibGU7CiAgX191MzIgZnJlZV9ibG9ja3M7CiAgX191MzIgZml4ZWRfcGFja2V0X3NpemU7CiAgX191MzIgdHJhY2tfc2l6ZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgbGFzdF9yZWNfYWRkcmVzczsKIH0gdHJhY2tfaW5mb3JtYXRpb247Ci0KIHN0cnVjdCBmZWF0dXJlX2hlYWRlciB7CiAgX191MzIgZGF0YV9sZW47CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTggcmVzZXJ2ZWQxOwogIF9fdTggcmVzZXJ2ZWQyOwogIF9fdTE2IGN1cnJfcHJvZmlsZTsKIH07Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgbW9kZV9wYWdlX2hlYWRlciB7CiAgX191MTYgbW9kZV9kYXRhX2xlbmd0aDsKICBfX3U4IG1lZGl1bV90eXBlOwogIF9fdTggcmVzZXJ2ZWQxOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IHJlc2VydmVkMjsKICBfX3U4IHJlc2VydmVkMzsKICBfX3UxNiBkZXNjX2xlbmd0aDsKIH07Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9jaXJjX2J1Zi5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2NpcmNfYnVmLmgKaW5kZXggNDM4MjUwYy4uMjYyZTE2MyAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2NpcmNfYnVmLmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2NpcmNfYnVmLmgKQEAgLTcsMjMgKzcsMjcgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9MSU5VWF9DSVJDX0JVRl9ICiAjZGVmaW5lIF9MSU5VWF9DSVJDX0JVRl9IIDEKLQogc3RydWN0IGNpcmNfYnVmIHsKICBjaGFyICpidWY7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGludCBoZWFkOwogIGludCB0YWlsOwogfTsKLQogI2RlZmluZSBDSVJDX0NOVChoZWFkLHRhaWwsc2l6ZSkgKCgoaGVhZCkgLSAodGFpbCkpICYgKChzaXplKS0xKSkKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQ0lSQ19TUEFDRShoZWFkLHRhaWwsc2l6ZSkgQ0lSQ19DTlQoKHRhaWwpLCgoaGVhZCkrMSksKHNpemUpKQotCiAjZGVmaW5lIENJUkNfQ05UX1RPX0VORChoZWFkLHRhaWwsc2l6ZSkgICAoe2ludCBlbmQgPSAoc2l6ZSkgLSAodGFpbCk7ICAgaW50IG4gPSAoKGhlYWQpICsgZW5kKSAmICgoc2l6ZSktMSk7ICAgbiA8IGVuZCA/IG4gOiBlbmQ7fSkKLQogI2RlZmluZSBDSVJDX1NQQUNFX1RPX0VORChoZWFkLHRhaWwsc2l6ZSkgICAoe2ludCBlbmQgPSAoc2l6ZSkgLSAxIC0gKGhlYWQpOyAgIGludCBuID0gKGVuZCArICh0YWlsKSkgJiAoKHNpemUpLTEpOyAgIG4gPD0gZW5kID8gbiA6IGVuZCsxO30pCi0KICNlbmRpZgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9jbGsuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9jbGsuaAppbmRleCAyYjhmNDM2Li5mOWU0YmUxIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvY2xrLmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2Nsay5oCkBAIC03LDE3ICs3LDIwIEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfX0xJTlVYX0NMS19ICiAjZGVmaW5lIF9fTElOVVhfQ0xLX0gKLQogc3RydWN0IGRldmljZTsKLQogc3RydWN0IGNsazsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBjbGsgKmNsa19nZXQoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICppZCk7Ci0KIHN0cnVjdCBjbGsgKmNsa19nZXRfcGFyZW50KHN0cnVjdCBjbGsgKmNsayk7Ci0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2NvZGEuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9jb2RhLmgKaW5kZXggZTdlODlmOS4uZDAzZGM5MyAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2NvZGEuaAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvY29kYS5oCkBAIC03LDU4OCArNyw2MjAgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9DT0RBX0hFQURFUl8KICNkZWZpbmUgX0NPREFfSEVBREVSXwotCiAjaWYgZGVmaW5lZChfX05ldEJTRF9fKSB8fCAoZGVmaW5lZChESkdQUCkgfHwgZGVmaW5lZChfX0NZR1dJTjMyX18pKSAmJiAhZGVmaW5lZChLRVJORUwpCiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2VuZGlmCi0KICNpZm5kZWYgQ09EQV9NQVhTWU1MSU5LUwogI2RlZmluZSBDT0RBX01BWFNZTUxJTktTIDEwCiAjZW5kaWYKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNpZiBkZWZpbmVkKERKR1BQKSB8fCBkZWZpbmVkKF9fQ1lHV0lOMzJfXykKICNpZmRlZiBLRVJORUwKIHR5cGVkZWYgdW5zaWduZWQgbG9uZyB1X2xvbmc7CiB0eXBlZGVmIHVuc2lnbmVkIGludCB1X2ludDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB0eXBlZGVmIHVuc2lnbmVkIHNob3J0IHVfc2hvcnQ7CiB0eXBlZGVmIHVfbG9uZyBpbm9fdDsKIHR5cGVkZWYgdV9sb25nIGRldl90OwogdHlwZWRlZiB2b2lkICogY2FkZHJfdDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjaWZkZWYgRE9TCiB0eXBlZGVmIHVuc2lnbmVkIF9faW50NjQgdV9xdWFkX3Q7CiAjZWxzZQogdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgdV9xdWFkX3Q7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2VuZGlmCi0KICNkZWZpbmUgaW5saW5lCi0KIHN0cnVjdCB0aW1lc3BlYyB7CiAgbG9uZyB0c19zZWM7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGxvbmcgdHNfbnNlYzsKIH07CiAjZWxzZQogI2luY2x1ZGUgPHN5cy90aW1lLmg+CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgdV9xdWFkX3Q7CiAjZW5kaWYKICNlbmRpZgotCiAjaWZkZWYgX19saW51eF9fCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KICNkZWZpbmUgY2Rldl90IHVfcXVhZF90CiAjaWYgIWRlZmluZWQoX1VRVUFEX1RfKSAmJiAoIWRlZmluZWQoX19HTElCQ19fKSB8fCBfX0dMSUJDX18gPCAyKQogI2RlZmluZSBfVVFVQURfVF8gMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIHVfcXVhZF90OwogI2VuZGlmCiAjZWxzZQogI2RlZmluZSBjZGV2X3QgZGV2X3QKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZW5kaWYKLQogI2lmZGVmIF9fQ1lHV0lOMzJfXwogc3RydWN0IHRpbWVzcGVjIHsKICB0aW1lX3QgdHZfc2VjOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBsb25nIHR2X25zZWM7CiB9OwogI2VuZGlmCi0KICNpZm5kZWYgX19CSVRfVFlQRVNfREVGSU5FRF9fCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX0JJVF9UWVBFU19ERUZJTkVEX18KIHR5cGVkZWYgc2lnbmVkIGNoYXIgaW50OF90OwogdHlwZWRlZiB1bnNpZ25lZCBjaGFyIHVfaW50OF90OwogdHlwZWRlZiBzaG9ydCBpbnQxNl90OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHR5cGVkZWYgdW5zaWduZWQgc2hvcnQgdV9pbnQxNl90OwogdHlwZWRlZiBpbnQgaW50MzJfdDsKIHR5cGVkZWYgdW5zaWduZWQgaW50IHVfaW50MzJfdDsKICNlbmRpZgotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBDT0RBX01BWE5BTUxFTiAyNTUKICNkZWZpbmUgQ09EQV9NQVhQQVRITEVOIDEwMjQKICNkZWZpbmUgQ09EQV9NQVhTWU1MSU5LIDEwCi0KICNkZWZpbmUgQ19PX1JFQUQgMHgwMDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIENfT19XUklURSAweDAwMgogI2RlZmluZSBDX09fVFJVTkMgMHgwMTAKICNkZWZpbmUgQ19PX0VYQ0wgMHgxMDAKICNkZWZpbmUgQ19PX0NSRUFUIDB4MjAwCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIENfTV9SRUFEIDAwNDAwCiAjZGVmaW5lIENfTV9XUklURSAwMDIwMAotCi0jZGVmaW5lIENfQV9DX09LIDggIAotI2RlZmluZSBDX0FfUl9PSyA0ICAKLSNkZWZpbmUgQ19BX1dfT0sgMiAgCi0jZGVmaW5lIENfQV9YX09LIDEgIAotI2RlZmluZSBDX0FfRl9PSyAwICAKLQorI2RlZmluZSBDX0FfQ19PSyA4CisjZGVmaW5lIENfQV9SX09LIDQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIENfQV9XX09LIDIKKyNkZWZpbmUgQ19BX1hfT0sgMQorI2RlZmluZSBDX0FfRl9PSyAwCiAjaWZuZGVmIF9WRU5VU19ESVJFTlRfVF8KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9WRU5VU19ESVJFTlRfVF8gMQogc3RydWN0IHZlbnVzX2RpcmVudCB7CiAgdV9pbnQzMl90IGRfZmlsZW5vOwogIHVfaW50MTZfdCBkX3JlY2xlbjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdV9pbnQ4X3QgZF90eXBlOwogIHVfaW50OF90IGRfbmFtbGVuOwogIGNoYXIgZF9uYW1lW0NPREFfTUFYTkFNTEVOICsgMV07CiB9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICN1bmRlZiBESVJTSVoKICNkZWZpbmUgRElSU0laKGRwKSAoKHNpemVvZiAoc3RydWN0IHZlbnVzX2RpcmVudCkgLSAoQ09EQV9NQVhOQU1MRU4rMSkpICsgICAoKChkcCktPmRfbmFtbGVuKzEgKyAzKSAmfiAzKSkKLQogI2RlZmluZSBDRFRfVU5LTk9XTiAwCiAjZGVmaW5lIENEVF9GSUZPIDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIENEVF9DSFIgMgogI2RlZmluZSBDRFRfRElSIDQKICNkZWZpbmUgQ0RUX0JMSyA2CiAjZGVmaW5lIENEVF9SRUcgOAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQ0RUX0xOSyAxMAogI2RlZmluZSBDRFRfU09DSyAxMgogI2RlZmluZSBDRFRfV0hUIDE0Ci0KICNkZWZpbmUgSUZUT0NEVChtb2RlKSAoKChtb2RlKSAmIDAxNzAwMDApID4+IDEyKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQ0RUVE9JRihkaXJ0eXBlKSAoKGRpcnR5cGUpIDw8IDEyKQotCiAjZW5kaWYKLQogI2lmbmRlZiBfVlVJRF9UXwogI2RlZmluZSBfVlVJRF9UXworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHR5cGVkZWYgdV9pbnQzMl90IHZ1aWRfdDsKIHR5cGVkZWYgdV9pbnQzMl90IHZnaWRfdDsKICNlbmRpZgotCiBzdHJ1Y3QgQ29kYUZpZCB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVfaW50MzJfdCBvcGFxdWVbNF07CiB9OwotCiAjZGVmaW5lIGNvZGFfZjJpKGZpZCkgIChmaWQgPyAoZmlkLT5vcGFxdWVbM10gXiAoZmlkLT5vcGFxdWVbMl08PDEwKSBeIChmaWQtPm9wYXF1ZVsxXTw8MjApIF4gZmlkLT5vcGFxdWVbMF0pIDogMCkKLQogI2lmbmRlZiBfVkVOVVNfVkFUVFJfVF8KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9WRU5VU19WQVRUUl9UXwotCiBlbnVtIGNvZGFfdnR5cGUgeyBDX1ZOT04sIENfVlJFRywgQ19WRElSLCBDX1ZCTEssIENfVkNIUiwgQ19WTE5LLCBDX1ZTT0NLLCBDX1ZGSUZPLCBDX1ZCQUQgfTsKLQogc3RydWN0IGNvZGFfdmF0dHIgewogIGxvbmcgdmFfdHlwZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdV9zaG9ydCB2YV9tb2RlOwogIHNob3J0IHZhX25saW5rOwogIHZ1aWRfdCB2YV91aWQ7CiAgdmdpZF90IHZhX2dpZDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgbG9uZyB2YV9maWxlaWQ7CiAgdV9xdWFkX3QgdmFfc2l6ZTsKICBsb25nIHZhX2Jsb2Nrc2l6ZTsKICBzdHJ1Y3QgdGltZXNwZWMgdmFfYXRpbWU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCB0aW1lc3BlYyB2YV9tdGltZTsKICBzdHJ1Y3QgdGltZXNwZWMgdmFfY3RpbWU7CiAgdV9sb25nIHZhX2dlbjsKICB1X2xvbmcgdmFfZmxhZ3M7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGNkZXZfdCB2YV9yZGV2OwogIHVfcXVhZF90IHZhX2J5dGVzOwogIHVfcXVhZF90IHZhX2ZpbGVyZXY7CiB9OwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2VuZGlmCi0KIHN0cnVjdCBjb2RhX3N0YXRmcyB7CiAgaW50MzJfdCBmX2Jsb2NrczsKICBpbnQzMl90IGZfYmZyZWU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGludDMyX3QgZl9iYXZhaWw7CiAgaW50MzJfdCBmX2ZpbGVzOwogIGludDMyX3QgZl9mZnJlZTsKIH07Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIENPREFfUk9PVCAyCiAjZGVmaW5lIENPREFfT1BFTl9CWV9GRCAzCiAjZGVmaW5lIENPREFfT1BFTiA0CiAjZGVmaW5lIENPREFfQ0xPU0UgNQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQ09EQV9JT0NUTCA2CiAjZGVmaW5lIENPREFfR0VUQVRUUiA3CiAjZGVmaW5lIENPREFfU0VUQVRUUiA4CiAjZGVmaW5lIENPREFfQUNDRVNTIDkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIENPREFfTE9PS1VQIDEwCiAjZGVmaW5lIENPREFfQ1JFQVRFIDExCiAjZGVmaW5lIENPREFfUkVNT1ZFIDEyCiAjZGVmaW5lIENPREFfTElOSyAxMworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQ09EQV9SRU5BTUUgMTQKICNkZWZpbmUgQ09EQV9NS0RJUiAxNQogI2RlZmluZSBDT0RBX1JNRElSIDE2CiAjZGVmaW5lIENPREFfU1lNTElOSyAxOAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQ09EQV9SRUFETElOSyAxOQogI2RlZmluZSBDT0RBX0ZTWU5DIDIwCiAjZGVmaW5lIENPREFfVkdFVCAyMgogI2RlZmluZSBDT0RBX1NJR05BTCAyMwotI2RlZmluZSBDT0RBX1JFUExBQ0UgMjQgIAotI2RlZmluZSBDT0RBX0ZMVVNIIDI1ICAKLSNkZWZpbmUgQ09EQV9QVVJHRVVTRVIgMjYgIAotI2RlZmluZSBDT0RBX1pBUEZJTEUgMjcgIAotI2RlZmluZSBDT0RBX1pBUERJUiAyOCAgCi0jZGVmaW5lIENPREFfUFVSR0VGSUQgMzAgIAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgQ09EQV9SRVBMQUNFIDI0CisjZGVmaW5lIENPREFfRkxVU0ggMjUKKyNkZWZpbmUgQ09EQV9QVVJHRVVTRVIgMjYKKyNkZWZpbmUgQ09EQV9aQVBGSUxFIDI3CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBDT0RBX1pBUERJUiAyOAorI2RlZmluZSBDT0RBX1BVUkdFRklEIDMwCiAjZGVmaW5lIENPREFfT1BFTl9CWV9QQVRIIDMxCiAjZGVmaW5lIENPREFfUkVTT0xWRSAzMgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQ09EQV9SRUlOVEVHUkFURSAzMwogI2RlZmluZSBDT0RBX1NUQVRGUyAzNAogI2RlZmluZSBDT0RBX1NUT1JFIDM1CiAjZGVmaW5lIENPREFfUkVMRUFTRSAzNgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQ09EQV9OQ0FMTFMgMzcKLQogI2RlZmluZSBET1dOQ0FMTChvcGNvZGUpIChvcGNvZGUgPj0gQ09EQV9SRVBMQUNFICYmIG9wY29kZSA8PSBDT0RBX1BVUkdFRklEKQotCiAjZGVmaW5lIFZDX01BWERBVEFTSVpFIDgxOTIKLSNkZWZpbmUgVkNfTUFYTVNHU0laRSBzaXplb2YodW5pb24gaW5wdXRBcmdzKStzaXplb2YodW5pb24gb3V0cHV0QXJncykgKyAgVkNfTUFYREFUQVNJWkUgCi0KKyNkZWZpbmUgVkNfTUFYTVNHU0laRSBzaXplb2YodW5pb24gaW5wdXRBcmdzKStzaXplb2YodW5pb24gb3V0cHV0QXJncykgKyAgVkNfTUFYREFUQVNJWkUKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIENJT0NfS0VSTkVMX1ZFUlNJT04gX0lPV1IoJ2MnLCAxMCwgc2l6ZV90KQotCi0jZGVmaW5lIENPREFfS0VSTkVMX1ZFUlNJT04gMyAgCi0KKyNkZWZpbmUgQ09EQV9LRVJORUxfVkVSU0lPTiAzCiBzdHJ1Y3QgY29kYV9pbl9oZHIgewogIHVfaW50MzJfdCBvcGNvZGU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVfaW50MzJfdCB1bmlxdWU7CiAgcGlkX3QgcGlkOwogIHBpZF90IHBnaWQ7CiAgdnVpZF90IHVpZDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwotCiBzdHJ1Y3QgY29kYV9vdXRfaGRyIHsKICB1X2ludDMyX3Qgb3Bjb2RlOwogIHVfaW50MzJfdCB1bmlxdWU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVfaW50MzJfdCByZXN1bHQ7CiB9OwotCiBzdHJ1Y3QgY29kYV9yb290X291dCB7CiAgc3RydWN0IGNvZGFfb3V0X2hkciBvaDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IENvZGFGaWQgVkZpZDsKIH07Ci0KIHN0cnVjdCBjb2RhX3Jvb3RfaW4gewogIHN0cnVjdCBjb2RhX2luX2hkciBpbjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwotCiBzdHJ1Y3QgY29kYV9vcGVuX2luIHsKICBzdHJ1Y3QgY29kYV9pbl9oZHIgaWg7CiAgc3RydWN0IENvZGFGaWQgVkZpZDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgaW50IGZsYWdzOwogfTsKLQogc3RydWN0IGNvZGFfb3Blbl9vdXQgewogIHN0cnVjdCBjb2RhX291dF9oZHIgb2g7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGNkZXZfdCBkZXY7CiAgaW5vX3QgaW5vZGU7CiB9OwotCiBzdHJ1Y3QgY29kYV9zdG9yZV9pbiB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCBjb2RhX2luX2hkciBpaDsKICBzdHJ1Y3QgQ29kYUZpZCBWRmlkOwogIGludCBmbGFnczsKIH07Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgY29kYV9zdG9yZV9vdXQgewogIHN0cnVjdCBjb2RhX291dF9oZHIgb3V0OwogfTsKLQogc3RydWN0IGNvZGFfcmVsZWFzZV9pbiB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCBjb2RhX2luX2hkciBpaDsKICBzdHJ1Y3QgQ29kYUZpZCBWRmlkOwogIGludCBmbGFnczsKIH07Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgY29kYV9yZWxlYXNlX291dCB7CiAgc3RydWN0IGNvZGFfb3V0X2hkciBvdXQ7CiB9OwotCiBzdHJ1Y3QgY29kYV9jbG9zZV9pbiB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCBjb2RhX2luX2hkciBpaDsKICBzdHJ1Y3QgQ29kYUZpZCBWRmlkOwogIGludCBmbGFnczsKIH07Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgY29kYV9jbG9zZV9vdXQgewogIHN0cnVjdCBjb2RhX291dF9oZHIgb3V0OwogfTsKLQogc3RydWN0IGNvZGFfaW9jdGxfaW4geworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgY29kYV9pbl9oZHIgaWg7CiAgc3RydWN0IENvZGFGaWQgVkZpZDsKICBpbnQgY21kOwogIGludCBsZW47CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGludCByd2ZsYWc7CiAgY2hhciAqZGF0YTsKIH07Ci0KIHN0cnVjdCBjb2RhX2lvY3RsX291dCB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCBjb2RhX291dF9oZHIgb2g7CiAgaW50IGxlbjsKICBjYWRkcl90IGRhdGE7CiB9OwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IGNvZGFfZ2V0YXR0cl9pbiB7CiAgc3RydWN0IGNvZGFfaW5faGRyIGloOwogIHN0cnVjdCBDb2RhRmlkIFZGaWQ7CiB9OwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IGNvZGFfZ2V0YXR0cl9vdXQgewogIHN0cnVjdCBjb2RhX291dF9oZHIgb2g7CiAgc3RydWN0IGNvZGFfdmF0dHIgYXR0cjsKIH07Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgY29kYV9zZXRhdHRyX2luIHsKICBzdHJ1Y3QgY29kYV9pbl9oZHIgaWg7CiAgc3RydWN0IENvZGFGaWQgVkZpZDsKICBzdHJ1Y3QgY29kYV92YXR0ciBhdHRyOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07Ci0KIHN0cnVjdCBjb2RhX3NldGF0dHJfb3V0IHsKICBzdHJ1Y3QgY29kYV9vdXRfaGRyIG91dDsKIH07Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgY29kYV9hY2Nlc3NfaW4gewogIHN0cnVjdCBjb2RhX2luX2hkciBpaDsKICBzdHJ1Y3QgQ29kYUZpZCBWRmlkOwogIGludCBmbGFnczsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwotCiBzdHJ1Y3QgY29kYV9hY2Nlc3Nfb3V0IHsKICBzdHJ1Y3QgY29kYV9vdXRfaGRyIG91dDsKIH07Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIENMVV9DQVNFX1NFTlNJVElWRSAweDAxCiAjZGVmaW5lIENMVV9DQVNFX0lOU0VOU0lUSVZFIDB4MDIKLQogc3RydWN0IGNvZGFfbG9va3VwX2luIHsKICBzdHJ1Y3QgY29kYV9pbl9oZHIgaWg7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCBDb2RhRmlkIFZGaWQ7CiAgaW50IG5hbWU7CiAgaW50IGZsYWdzOwogfTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBjb2RhX2xvb2t1cF9vdXQgewogIHN0cnVjdCBjb2RhX291dF9oZHIgb2g7CiAgc3RydWN0IENvZGFGaWQgVkZpZDsKICBpbnQgdnR5cGU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKLQogc3RydWN0IGNvZGFfY3JlYXRlX2luIHsKICBzdHJ1Y3QgY29kYV9pbl9oZHIgaWg7CiAgc3RydWN0IENvZGFGaWQgVkZpZDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IGNvZGFfdmF0dHIgYXR0cjsKICBpbnQgZXhjbDsKICBpbnQgbW9kZTsKICBpbnQgbmFtZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwotCiBzdHJ1Y3QgY29kYV9jcmVhdGVfb3V0IHsKICBzdHJ1Y3QgY29kYV9vdXRfaGRyIG9oOwogIHN0cnVjdCBDb2RhRmlkIFZGaWQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCBjb2RhX3ZhdHRyIGF0dHI7CiB9OwotCiBzdHJ1Y3QgY29kYV9yZW1vdmVfaW4gewogIHN0cnVjdCBjb2RhX2luX2hkciBpaDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IENvZGFGaWQgVkZpZDsKICBpbnQgbmFtZTsKIH07Ci0KIHN0cnVjdCBjb2RhX3JlbW92ZV9vdXQgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgY29kYV9vdXRfaGRyIG91dDsKIH07Ci0KIHN0cnVjdCBjb2RhX2xpbmtfaW4gewogIHN0cnVjdCBjb2RhX2luX2hkciBpaDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IENvZGFGaWQgc291cmNlRmlkOwogIHN0cnVjdCBDb2RhRmlkIGRlc3RGaWQ7CiAgaW50IHRuYW1lOwogfTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBjb2RhX2xpbmtfb3V0IHsKICBzdHJ1Y3QgY29kYV9vdXRfaGRyIG91dDsKIH07Ci0KIHN0cnVjdCBjb2RhX3JlbmFtZV9pbiB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCBjb2RhX2luX2hkciBpaDsKICBzdHJ1Y3QgQ29kYUZpZCBzb3VyY2VGaWQ7CiAgaW50IHNyY25hbWU7CiAgc3RydWN0IENvZGFGaWQgZGVzdEZpZDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgaW50IGRlc3RuYW1lOwogfTsKLQogc3RydWN0IGNvZGFfcmVuYW1lX291dCB7CiAgc3RydWN0IGNvZGFfb3V0X2hkciBvdXQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKLQogc3RydWN0IGNvZGFfbWtkaXJfaW4gewogIHN0cnVjdCBjb2RhX2luX2hkciBpaDsKICBzdHJ1Y3QgQ29kYUZpZCBWRmlkOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgY29kYV92YXR0ciBhdHRyOwogIGludCBuYW1lOwogfTsKLQogc3RydWN0IGNvZGFfbWtkaXJfb3V0IHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IGNvZGFfb3V0X2hkciBvaDsKICBzdHJ1Y3QgQ29kYUZpZCBWRmlkOwogIHN0cnVjdCBjb2RhX3ZhdHRyIGF0dHI7CiB9OwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IGNvZGFfcm1kaXJfaW4gewogIHN0cnVjdCBjb2RhX2luX2hkciBpaDsKICBzdHJ1Y3QgQ29kYUZpZCBWRmlkOwogIGludCBuYW1lOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07Ci0KIHN0cnVjdCBjb2RhX3JtZGlyX291dCB7CiAgc3RydWN0IGNvZGFfb3V0X2hkciBvdXQ7CiB9OwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IGNvZGFfc3ltbGlua19pbiB7CiAgc3RydWN0IGNvZGFfaW5faGRyIGloOwogIHN0cnVjdCBDb2RhRmlkIFZGaWQ7CiAgaW50IHNyY25hbWU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCBjb2RhX3ZhdHRyIGF0dHI7CiAgaW50IHRuYW1lOwogfTsKLQogc3RydWN0IGNvZGFfc3ltbGlua19vdXQgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgY29kYV9vdXRfaGRyIG91dDsKIH07Ci0KIHN0cnVjdCBjb2RhX3JlYWRsaW5rX2luIHsKICBzdHJ1Y3QgY29kYV9pbl9oZHIgaWg7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCBDb2RhRmlkIFZGaWQ7CiB9OwotCiBzdHJ1Y3QgY29kYV9yZWFkbGlua19vdXQgewogIHN0cnVjdCBjb2RhX291dF9oZHIgb2g7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGludCBjb3VudDsKICBjYWRkcl90IGRhdGE7CiB9OwotCiBzdHJ1Y3QgY29kYV9mc3luY19pbiB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCBjb2RhX2luX2hkciBpaDsKICBzdHJ1Y3QgQ29kYUZpZCBWRmlkOwogfTsKLQogc3RydWN0IGNvZGFfZnN5bmNfb3V0IHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IGNvZGFfb3V0X2hkciBvdXQ7CiB9OwotCiBzdHJ1Y3QgY29kYV92Z2V0X2luIHsKICBzdHJ1Y3QgY29kYV9pbl9oZHIgaWg7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCBDb2RhRmlkIFZGaWQ7CiB9OwotCiBzdHJ1Y3QgY29kYV92Z2V0X291dCB7CiAgc3RydWN0IGNvZGFfb3V0X2hkciBvaDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IENvZGFGaWQgVkZpZDsKICBpbnQgdnR5cGU7CiB9OwotCiBzdHJ1Y3QgY29kYV9wdXJnZXVzZXJfb3V0IHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IGNvZGFfb3V0X2hkciBvaDsKICB2dWlkX3QgdWlkOwogfTsKLQogc3RydWN0IGNvZGFfemFwZmlsZV9vdXQgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgY29kYV9vdXRfaGRyIG9oOwogIHN0cnVjdCBDb2RhRmlkIENvZGFGaWQ7CiB9OwotCiBzdHJ1Y3QgY29kYV96YXBkaXJfb3V0IHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IGNvZGFfb3V0X2hkciBvaDsKICBzdHJ1Y3QgQ29kYUZpZCBDb2RhRmlkOwogfTsKLQogc3RydWN0IGNvZGFfcHVyZ2VmaWRfb3V0IHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IGNvZGFfb3V0X2hkciBvaDsKICBzdHJ1Y3QgQ29kYUZpZCBDb2RhRmlkOwogfTsKLQogc3RydWN0IGNvZGFfcmVwbGFjZV9vdXQgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgY29kYV9vdXRfaGRyIG9oOwogIHN0cnVjdCBDb2RhRmlkIE5ld0ZpZDsKICBzdHJ1Y3QgQ29kYUZpZCBPbGRGaWQ7CiB9OwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IGNvZGFfb3Blbl9ieV9mZF9pbiB7CiAgc3RydWN0IGNvZGFfaW5faGRyIGloOwogIHN0cnVjdCBDb2RhRmlkIFZGaWQ7CiAgaW50IGZsYWdzOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07Ci0KIHN0cnVjdCBjb2RhX29wZW5fYnlfZmRfb3V0IHsKICBzdHJ1Y3QgY29kYV9vdXRfaGRyIG9oOwogIGludCBmZDsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07Ci0KIHN0cnVjdCBjb2RhX29wZW5fYnlfcGF0aF9pbiB7CiAgc3RydWN0IGNvZGFfaW5faGRyIGloOwogIHN0cnVjdCBDb2RhRmlkIFZGaWQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGludCBmbGFnczsKIH07Ci0KIHN0cnVjdCBjb2RhX29wZW5fYnlfcGF0aF9vdXQgewogIHN0cnVjdCBjb2RhX291dF9oZHIgb2g7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGludCBwYXRoOwogfTsKLQogc3RydWN0IGNvZGFfc3RhdGZzX2luIHsKICBzdHJ1Y3QgY29kYV9pbl9oZHIgaW47CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKLQogc3RydWN0IGNvZGFfc3RhdGZzX291dCB7CiAgc3RydWN0IGNvZGFfb3V0X2hkciBvaDsKICBzdHJ1Y3QgY29kYV9zdGF0ZnMgc3RhdDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwotCiAjZGVmaW5lIENPREFfTk9DQUNIRSAweDgwMDAwMDAwCi0KIHVuaW9uIGlucHV0QXJncyB7CiAgc3RydWN0IGNvZGFfaW5faGRyIGloOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgY29kYV9vcGVuX2luIGNvZGFfb3BlbjsKICBzdHJ1Y3QgY29kYV9zdG9yZV9pbiBjb2RhX3N0b3JlOwogIHN0cnVjdCBjb2RhX3JlbGVhc2VfaW4gY29kYV9yZWxlYXNlOwogIHN0cnVjdCBjb2RhX2Nsb3NlX2luIGNvZGFfY2xvc2U7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCBjb2RhX2lvY3RsX2luIGNvZGFfaW9jdGw7CiAgc3RydWN0IGNvZGFfZ2V0YXR0cl9pbiBjb2RhX2dldGF0dHI7CiAgc3RydWN0IGNvZGFfc2V0YXR0cl9pbiBjb2RhX3NldGF0dHI7CiAgc3RydWN0IGNvZGFfYWNjZXNzX2luIGNvZGFfYWNjZXNzOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgY29kYV9sb29rdXBfaW4gY29kYV9sb29rdXA7CiAgc3RydWN0IGNvZGFfY3JlYXRlX2luIGNvZGFfY3JlYXRlOwogIHN0cnVjdCBjb2RhX3JlbW92ZV9pbiBjb2RhX3JlbW92ZTsKICBzdHJ1Y3QgY29kYV9saW5rX2luIGNvZGFfbGluazsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IGNvZGFfcmVuYW1lX2luIGNvZGFfcmVuYW1lOwogIHN0cnVjdCBjb2RhX21rZGlyX2luIGNvZGFfbWtkaXI7CiAgc3RydWN0IGNvZGFfcm1kaXJfaW4gY29kYV9ybWRpcjsKICBzdHJ1Y3QgY29kYV9zeW1saW5rX2luIGNvZGFfc3ltbGluazsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IGNvZGFfcmVhZGxpbmtfaW4gY29kYV9yZWFkbGluazsKICBzdHJ1Y3QgY29kYV9mc3luY19pbiBjb2RhX2ZzeW5jOwogIHN0cnVjdCBjb2RhX3ZnZXRfaW4gY29kYV92Z2V0OwogIHN0cnVjdCBjb2RhX29wZW5fYnlfZmRfaW4gY29kYV9vcGVuX2J5X2ZkOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgY29kYV9vcGVuX2J5X3BhdGhfaW4gY29kYV9vcGVuX2J5X3BhdGg7CiAgc3RydWN0IGNvZGFfc3RhdGZzX2luIGNvZGFfc3RhdGZzOwogfTsKLQogdW5pb24gb3V0cHV0QXJncyB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCBjb2RhX291dF9oZHIgb2g7CiAgc3RydWN0IGNvZGFfcm9vdF9vdXQgY29kYV9yb290OwogIHN0cnVjdCBjb2RhX29wZW5fb3V0IGNvZGFfb3BlbjsKICBzdHJ1Y3QgY29kYV9pb2N0bF9vdXQgY29kYV9pb2N0bDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IGNvZGFfZ2V0YXR0cl9vdXQgY29kYV9nZXRhdHRyOwogIHN0cnVjdCBjb2RhX2xvb2t1cF9vdXQgY29kYV9sb29rdXA7CiAgc3RydWN0IGNvZGFfY3JlYXRlX291dCBjb2RhX2NyZWF0ZTsKICBzdHJ1Y3QgY29kYV9ta2Rpcl9vdXQgY29kYV9ta2RpcjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IGNvZGFfcmVhZGxpbmtfb3V0IGNvZGFfcmVhZGxpbms7CiAgc3RydWN0IGNvZGFfdmdldF9vdXQgY29kYV92Z2V0OwogIHN0cnVjdCBjb2RhX3B1cmdldXNlcl9vdXQgY29kYV9wdXJnZXVzZXI7CiAgc3RydWN0IGNvZGFfemFwZmlsZV9vdXQgY29kYV96YXBmaWxlOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgY29kYV96YXBkaXJfb3V0IGNvZGFfemFwZGlyOwogIHN0cnVjdCBjb2RhX3B1cmdlZmlkX291dCBjb2RhX3B1cmdlZmlkOwogIHN0cnVjdCBjb2RhX3JlcGxhY2Vfb3V0IGNvZGFfcmVwbGFjZTsKICBzdHJ1Y3QgY29kYV9vcGVuX2J5X2ZkX291dCBjb2RhX29wZW5fYnlfZmQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCBjb2RhX29wZW5fYnlfcGF0aF9vdXQgY29kYV9vcGVuX2J5X3BhdGg7CiAgc3RydWN0IGNvZGFfc3RhdGZzX291dCBjb2RhX3N0YXRmczsKIH07Ci0KIHVuaW9uIGNvZGFfZG93bmNhbGxzIHsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgY29kYV9wdXJnZXVzZXJfb3V0IHB1cmdldXNlcjsKICBzdHJ1Y3QgY29kYV96YXBmaWxlX291dCB6YXBmaWxlOwogIHN0cnVjdCBjb2RhX3phcGRpcl9vdXQgemFwZGlyOwogIHN0cnVjdCBjb2RhX3B1cmdlZmlkX291dCBwdXJnZWZpZDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IGNvZGFfcmVwbGFjZV9vdXQgcmVwbGFjZTsKIH07Ci0KICNkZWZpbmUgUElPQ1BBUk1fTUFTSyAweDAwMDBmZmZmCiBzdHJ1Y3QgVmljZUlvY3RsIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdm9pZCBfX3VzZXIgKmluOwogIHZvaWQgX191c2VyICpvdXQ7CiAgdV9zaG9ydCBpbl9zaXplOwogIHVfc2hvcnQgb3V0X3NpemU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKLQogc3RydWN0IFBpb2N0bERhdGEgewogIGNvbnN0IGNoYXIgX191c2VyICpwYXRoOwogIGludCBmb2xsb3c7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCBWaWNlSW9jdGwgdmk7CiB9OwotCiAjZGVmaW5lIENPREFfQ09OVFJPTCAiLkNPTlRST0wiCiAjZGVmaW5lIENPREFfQ09OVFJPTExFTiA4CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBDVExfSU5PIC0xCi0KICNkZWZpbmUgQ09EQV9NT1VOVF9WRVJTSU9OIDEKLQogc3RydWN0IGNvZGFfbW91bnRfZGF0YSB7CiAgaW50IHZlcnNpb247CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGludCBmZDsKIH07Ci0KICNlbmRpZgotCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvY29kYV9mc19pLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvY29kYV9mc19pLmgKaW5kZXggMjhiMGU1OS4uZTgwYzgxOSAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2NvZGFfZnNfaS5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9jb2RhX2ZzX2kuaApAQCAtNyw5ICs3LDE1IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfTElOVVhfQ09EQV9GU19JCiAjZGVmaW5lIF9MSU5VWF9DT0RBX0ZTX0kKLQogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvY29tcGF0LmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvY29tcGF0LmgKaW5kZXggZDMwYjU1MC4uODZkYTczZSAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2NvbXBhdC5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9jb21wYXQuaApAQCAtNyw5ICs3LDE1IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfTElOVVhfQ09NUEFUX0gKICNkZWZpbmUgX0xJTlVYX0NPTVBBVF9ICi0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2NvbXBpbGVyLWdjYy5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2NvbXBpbGVyLWdjYy5oCmluZGV4IDBkZDRhNjIuLjEwNjQ4NjggMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9jb21waWxlci1nY2MuaAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvY29tcGlsZXItZ2NjLmgKQEAgLTcsMTYgKzcsMjMgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjZGVmaW5lIGJhcnJpZXIoKSBfX2FzbV9fIF9fdm9sYXRpbGVfXygiIjogOiA6Im1lbW9yeSIpCi0KICNkZWZpbmUgUkVMT0NfSElERShwdHIsIG9mZikgICAoeyB1bnNpZ25lZCBsb25nIF9fcHRyOyAgIF9fYXNtX18gKCIiIDogIj1yIihfX3B0cikgOiAiMCIocHRyKSk7ICAgKHR5cGVvZihwdHIpKSAoX19wdHIgKyAob2ZmKSk7IH0pCi0KICNkZWZpbmUgaW5saW5lIGlubGluZSBfX2F0dHJpYnV0ZV9fKChhbHdheXNfaW5saW5lKSkKICNkZWZpbmUgX19pbmxpbmVfXyBfX2lubGluZV9fIF9fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19pbmxpbmUgX19pbmxpbmUgX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpCiAjZGVmaW5lIF9fZGVwcmVjYXRlZCBfX2F0dHJpYnV0ZV9fKChkZXByZWNhdGVkKSkKICNkZWZpbmUgbm9pbmxpbmUgX19hdHRyaWJ1dGVfXygobm9pbmxpbmUpKQogI2RlZmluZSBfX2F0dHJpYnV0ZV9wdXJlX18gX19hdHRyaWJ1dGVfXygocHVyZSkpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX2F0dHJpYnV0ZV9jb25zdF9fIF9fYXR0cmlidXRlX18oKF9fY29uc3RfXykpCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvY29tcGlsZXIuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9jb21waWxlci5oCmluZGV4IDQwNTVlMzMuLjFkOTEzYjcgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9jb21waWxlci5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9jb21waWxlci5oCkBAIC03LDMyICs3LDM5IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfX0xJTlVYX0NPTVBJTEVSX0gKICNkZWZpbmUgX19MSU5VWF9DT01QSUxFUl9ICi0KICNpZm5kZWYgX19BU1NFTUJMWV9fCi0KICNkZWZpbmUgX191c2VyCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX2tlcm5lbAogI2RlZmluZSBfX3NhZmUKICNkZWZpbmUgX19mb3JjZQogI2RlZmluZSBfX25vY2FzdAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19pb21lbQogI2RlZmluZSBfX2Noa191c2VyX3B0cih4KSAodm9pZCkwCiAjZGVmaW5lIF9fY2hrX2lvX3B0cih4KSAodm9pZCkwCiAjZGVmaW5lIF9fYnVpbHRpbl93YXJuaW5nKHgsIHkuLi4pICgxKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19hY3F1aXJlcyh4KQogI2RlZmluZSBfX3JlbGVhc2VzKHgpCiAjZGVmaW5lIF9fYWNxdWlyZSh4KSAodm9pZCkwCiAjZGVmaW5lIF9fcmVsZWFzZSh4KSAodm9pZCkwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX2NvbmRfbG9jayh4KSAoeCkKLQogI2VuZGlmCi0KICNpZm5kZWYgX19hdHRyaWJ1dGVfY29uc3RfXwotI2RlZmluZSBfX2F0dHJpYnV0ZV9jb25zdF9fICAKKyNkZWZpbmUgX19hdHRyaWJ1dGVfY29uc3RfXworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlbmRpZgotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9jb21wbGV0aW9uLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvY29tcGxldGlvbi5oCmluZGV4IGVlMTgyMTEuLmQ2N2QxMGEgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9jb21wbGV0aW9uLmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2NvbXBsZXRpb24uaApAQCAtNywyNiArNywyOCBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX19MSU5VWF9DT01QTEVUSU9OX0gKICNkZWZpbmUgX19MSU5VWF9DT01QTEVUSU9OX0gKLQogI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KLQogc3RydWN0IGNvbXBsZXRpb24geworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBpbnQgZG9uZTsKICB3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0OwogfTsKLQogI2RlZmluZSBDT01QTEVUSU9OX0lOSVRJQUxJWkVSKHdvcmspICAgeyAwLCBfX1dBSVRfUVVFVUVfSEVBRF9JTklUSUFMSVpFUigod29yaykud2FpdCkgfQotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBDT01QTEVUSU9OX0lOSVRJQUxJWkVSX09OU1RBQ0sod29yaykgICAoeyBpbml0X2NvbXBsZXRpb24oJndvcmspOyB3b3JrOyB9KQotCiAjZGVmaW5lIERFQ0xBUkVfQ09NUExFVElPTih3b3JrKSAgIHN0cnVjdCBjb21wbGV0aW9uIHdvcmsgPSBDT01QTEVUSU9OX0lOSVRJQUxJWkVSKHdvcmspCi0KICNkZWZpbmUgREVDTEFSRV9DT01QTEVUSU9OX09OU1RBQ0sod29yaykgREVDTEFSRV9DT01QTEVUSU9OKHdvcmspCi0KICNkZWZpbmUgSU5JVF9DT01QTEVUSU9OKHgpICgoeCkuZG9uZSA9IDApCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9jb25maWcuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9jb25maWcuaAppbmRleCA3YWExMDU2Li5kNzI5MjUxIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvY29uZmlnLmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2NvbmZpZy5oCkBAIC03LDExICs3LDE3IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfTElOVVhfQ09ORklHX0gKICNkZWZpbmUgX0xJTlVYX0NPTkZJR19ICi0KICNpbmNsdWRlIDxsaW51eC9hdXRvY29uZi5oPgotCiAjZW5kaWYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvY29uc29sZV9zdHJ1Y3QuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9jb25zb2xlX3N0cnVjdC5oCmluZGV4IDUwZTRjYmUuLjI2NDljN2IgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9jb25zb2xlX3N0cnVjdC5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9jb25zb2xlX3N0cnVjdC5oCkBAIC03LDExNSArNywxMjggQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaW5jbHVkZSA8bGludXgvd2FpdC5oPgogI2luY2x1ZGUgPGxpbnV4L3Z0Lmg+Ci0KIHN0cnVjdCB2dF9zdHJ1Y3Q7Ci0KICNkZWZpbmUgTlBBUiAxNgotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IHZjX2RhdGEgewogIHVuc2lnbmVkIHNob3J0IHZjX251bTsKICB1bnNpZ25lZCBpbnQgdmNfY29sczsKICB1bnNpZ25lZCBpbnQgdmNfcm93czsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgaW50IHZjX3NpemVfcm93OwogIHVuc2lnbmVkIGludCB2Y19zY2FuX2xpbmVzOwogIHVuc2lnbmVkIGxvbmcgdmNfb3JpZ2luOwogIHVuc2lnbmVkIGxvbmcgdmNfc2NyX2VuZDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgbG9uZyB2Y192aXNpYmxlX29yaWdpbjsKICB1bnNpZ25lZCBpbnQgdmNfdG9wLCB2Y19ib3R0b207CiAgY29uc3Qgc3RydWN0IGNvbnN3ICp2Y19zdzsKICB1bnNpZ25lZCBzaG9ydCAqdmNfc2NyZWVuYnVmOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBpbnQgdmNfc2NyZWVuYnVmX3NpemU7CiAgdW5zaWduZWQgY2hhciB2Y19tb2RlOwotCiAgdW5zaWduZWQgY2hhciB2Y19hdHRyOwogIHVuc2lnbmVkIGNoYXIgdmNfZGVmX2NvbG9yOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBjaGFyIHZjX2NvbG9yOwogIHVuc2lnbmVkIGNoYXIgdmNfc19jb2xvcjsKICB1bnNpZ25lZCBjaGFyIHZjX3VsY29sb3I7CiAgdW5zaWduZWQgY2hhciB2Y19oYWxmY29sb3I7Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgaW50IHZjX2N1cnNvcl90eXBlOwogIHVuc2lnbmVkIHNob3J0IHZjX2NvbXBsZW1lbnRfbWFzazsKICB1bnNpZ25lZCBzaG9ydCB2Y19zX2NvbXBsZW1lbnRfbWFzazsKICB1bnNpZ25lZCBpbnQgdmNfeCwgdmNfeTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgaW50IHZjX3NhdmVkX3gsIHZjX3NhdmVkX3k7CiAgdW5zaWduZWQgbG9uZyB2Y19wb3M7Ci0KICB1bnNpZ25lZCBzaG9ydCB2Y19oaV9mb250X21hc2s7CiAgc3RydWN0IGNvbnNvbGVfZm9udCB2Y19mb250OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBzaG9ydCB2Y192aWRlb19lcmFzZV9jaGFyOwotCiAgdW5zaWduZWQgaW50IHZjX3N0YXRlOwogIHVuc2lnbmVkIGludCB2Y19ucGFyLHZjX3BhcltOUEFSXTsKICBzdHJ1Y3QgdHR5X3N0cnVjdCAqdmNfdHR5OwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCB2dF9tb2RlIHZ0X21vZGU7CiAgaW50IHZ0X3BpZDsKICBpbnQgdnRfbmV3dnQ7CiAgd2FpdF9xdWV1ZV9oZWFkX3QgcGFzdGVfd2FpdDsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBpbnQgdmNfY2hhcnNldCA6IDE7CiAgdW5zaWduZWQgaW50IHZjX3NfY2hhcnNldCA6IDE7CiAgdW5zaWduZWQgaW50IHZjX2Rpc3BfY3RybCA6IDE7CiAgdW5zaWduZWQgaW50IHZjX3RvZ2dsZV9tZXRhIDogMTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgaW50IHZjX2RlY3Njbm0gOiAxOwogIHVuc2lnbmVkIGludCB2Y19kZWNvbSA6IDE7CiAgdW5zaWduZWQgaW50IHZjX2RlY2F3bSA6IDE7CiAgdW5zaWduZWQgaW50IHZjX2RlY2NtIDogMTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgaW50IHZjX2RlY2ltIDogMTsKICB1bnNpZ25lZCBpbnQgdmNfZGVjY29sbSA6IDE7Ci0KICB1bnNpZ25lZCBpbnQgdmNfaW50ZW5zaXR5IDogMjsKICB1bnNpZ25lZCBpbnQgdmNfdW5kZXJsaW5lIDogMTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgaW50IHZjX2JsaW5rIDogMTsKICB1bnNpZ25lZCBpbnQgdmNfcmV2ZXJzZSA6IDE7CiAgdW5zaWduZWQgaW50IHZjX3NfaW50ZW5zaXR5IDogMjsKICB1bnNpZ25lZCBpbnQgdmNfc191bmRlcmxpbmUgOiAxOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBpbnQgdmNfc19ibGluayA6IDE7CiAgdW5zaWduZWQgaW50IHZjX3NfcmV2ZXJzZSA6IDE7Ci0KICB1bnNpZ25lZCBpbnQgdmNfcXVlcyA6IDE7CiAgdW5zaWduZWQgaW50IHZjX25lZWRfd3JhcCA6IDE7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGludCB2Y19jYW5fZG9fY29sb3IgOiAxOwogIHVuc2lnbmVkIGludCB2Y19yZXBvcnRfbW91c2UgOiAyOwogIHVuc2lnbmVkIGludCB2Y19rbWFsbG9jZWQgOiAxOwogIHVuc2lnbmVkIGNoYXIgdmNfdXRmIDogMTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgY2hhciB2Y191dGZfY291bnQ7CiAgaW50IHZjX3V0Zl9jaGFyOwogIHVuc2lnbmVkIGludCB2Y190YWJfc3RvcFs4XTsKICB1bnNpZ25lZCBjaGFyIHZjX3BhbGV0dGVbMTYqM107CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIHNob3J0ICogdmNfdHJhbnNsYXRlOwogIHVuc2lnbmVkIGNoYXIgdmNfRzBfY2hhcnNldDsKICB1bnNpZ25lZCBjaGFyIHZjX0cxX2NoYXJzZXQ7CiAgdW5zaWduZWQgY2hhciB2Y19zYXZlZF9HMDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgY2hhciB2Y19zYXZlZF9HMTsKICB1bnNpZ25lZCBpbnQgdmNfYmVsbF9waXRjaDsKICB1bnNpZ25lZCBpbnQgdmNfYmVsbF9kdXJhdGlvbjsKICBzdHJ1Y3QgdmNfZGF0YSAqKnZjX2Rpc3BsYXlfZmc7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGxvbmcgdmNfdW5pX3BhZ2VkaXI7CiAgdW5zaWduZWQgbG9uZyAqdmNfdW5pX3BhZ2VkaXJfbG9jOwotCiB9OwotCiBzdHJ1Y3QgdmMgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgdmNfZGF0YSAqZDsKLQogfTsKLQogI2RlZmluZSBDVVJfREVGIDAKICNkZWZpbmUgQ1VSX05PTkUgMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQ1VSX1VOREVSTElORSAyCiAjZGVmaW5lIENVUl9MT1dFUl9USElSRCAzCiAjZGVmaW5lIENVUl9MT1dFUl9IQUxGIDQKICNkZWZpbmUgQ1VSX1RXT19USElSRFMgNQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQ1VSX0JMT0NLIDYKICNkZWZpbmUgQ1VSX0hXTUFTSyAweDBmCiAjZGVmaW5lIENVUl9TV01BU0sgMHhmZmYwCi0KICNkZWZpbmUgQ1VSX0RFRkFVTFQgQ1VSX1VOREVSTElORQotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBDT05fSVNfVklTSUJMRShjb25wKSAoKmNvbnAtPnZjX2Rpc3BsYXlfZmcgPT0gY29ucCkKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9jcGNhcF9hdWRpby5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2NwY2FwX2F1ZGlvLmgKaW5kZXggYTU5NTUwZi4uZGY4ZTI0OSAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2NwY2FwX2F1ZGlvLmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2NwY2FwX2F1ZGlvLmgKQEAgLTcsNTkgKzcsNTcgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9DUENBUF9BVURJT19ICiAjZGVmaW5lIF9DUENBUF9BVURJT19ICi0KICNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgotCiAjZGVmaW5lIENQQ0FQX0FVRElPX01BR0lDICdjJwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBDUENBUF9BVURJT19PVVRfU1BFQUtFUiAwCiAjZGVmaW5lIENQQ0FQX0FVRElPX09VVF9IRUFEU0VUIDEKICNkZWZpbmUgQ1BDQVBfQVVESU9fT1VUX0hFQURTRVRfQU5EX1NQRUFLRVIgMgogI2RlZmluZSBDUENBUF9BVURJT19PVVRfU1RBTkRCWSAzCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBDUENBUF9BVURJT19PVVRfQU5MR19ET0NLX0hFQURTRVQgNAogI2RlZmluZSBDUENBUF9BVURJT19PVVRfTUFYIDQKLQogc3RydWN0IGNwY2FwX2F1ZGlvX3N0cmVhbSB7CiAgdW5zaWduZWQgaWQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGludCBvbjsKIH07Ci0KICNkZWZpbmUgQ1BDQVBfQVVESU9fT1VUX1NFVF9PVVRQVVQgX0lPVyhDUENBUF9BVURJT19NQUdJQywgMCwgICBjb25zdCBzdHJ1Y3QgY3BjYXBfYXVkaW9fc3RyZWFtICopCi0KICNkZWZpbmUgQ1BDQVBfQVVESU9fT1VUX1ZPTF9NSU4gMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQ1BDQVBfQVVESU9fT1VUX1ZPTF9NQVggMTUKLQogI2RlZmluZSBDUENBUF9BVURJT19PVVRfU0VUX1ZPTFVNRSBfSU9XKENQQ0FQX0FVRElPX01BR0lDLCAxLCB1bnNpZ25lZCBpbnQpCi0KICNkZWZpbmUgQ1BDQVBfQVVESU9fT1VUX0dFVF9PVVRQVVQgICBfSU9SKENQQ0FQX0FVRElPX01BR0lDLCAyLCBzdHJ1Y3QgY3BjYXBfYXVkaW9fc3RyZWFtICopCiAjZGVmaW5lIENQQ0FQX0FVRElPX09VVF9HRVRfVk9MVU1FICAgX0lPUihDUENBUF9BVURJT19NQUdJQywgMywgdW5zaWduZWQgaW50ICopCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIENQQ0FQX0FVRElPX0lOX01JQzEgMAogI2RlZmluZSBDUENBUF9BVURJT19JTl9NSUMyIDEKICNkZWZpbmUgQ1BDQVBfQVVESU9fSU5fU1RBTkRCWSAyCiAjZGVmaW5lIENQQ0FQX0FVRElPX0lOX01BWCAyCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIENQQ0FQX0FVRElPX0lOX1NFVF9JTlBVVCBfSU9XKENQQ0FQX0FVRElPX01BR0lDLCA0LCAgIGNvbnN0IHN0cnVjdCBjcGNhcF9hdWRpb19zdHJlYW0gKikKLQogI2RlZmluZSBDUENBUF9BVURJT19JTl9HRVRfSU5QVVQgX0lPUihDUENBUF9BVURJT19NQUdJQywgNSwgICBzdHJ1Y3QgY3BjYXBfYXVkaW9fc3RyZWFtICopCi0KICNkZWZpbmUgQ1BDQVBfQVVESU9fSU5fVk9MX01JTiAwCiAjZGVmaW5lIENQQ0FQX0FVRElPX0lOX1ZPTF9NQVggMzEKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQ1BDQVBfQVVESU9fSU5fU0VUX1ZPTFVNRSBfSU9XKENQQ0FQX0FVRElPX01BR0lDLCA2LCB1bnNpZ25lZCBpbnQpCi0KICNkZWZpbmUgQ1BDQVBfQVVESU9fSU5fR0VUX1ZPTFVNRSBfSU9SKENQQ0FQX0FVRElPX01BR0lDLCA3LCB1bnNpZ25lZCBpbnQgKikKLQogI2RlZmluZSBDUENBUF9BVURJT19PVVRfR0VUX1JBVEUgX0lPUihDUENBUF9BVURJT19NQUdJQywgOCwgdW5zaWduZWQgaW50ICopCiAjZGVmaW5lIENQQ0FQX0FVRElPX09VVF9TRVRfUkFURSBfSU9XKENQQ0FQX0FVRElPX01BR0lDLCA5LCB1bnNpZ25lZCBpbnQpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBDUENBUF9BVURJT19JTl9HRVRfUkFURSBfSU9SKENQQ0FQX0FVRElPX01BR0lDLCAxMCwgdW5zaWduZWQgaW50ICopCiAjZGVmaW5lIENQQ0FQX0FVRElPX0lOX1NFVF9SQVRFIF9JT1coQ1BDQVBfQVVESU9fTUFHSUMsIDExLCB1bnNpZ25lZCBpbnQpCi0KICNkZWZpbmUgQ1BDQVBfQVVESU9fU0VUX0JMVUVUT09USF9CWVBBU1MgX0lPVyhDUENBUF9BVURJT19NQUdJQywgMTIsIHVuc2lnbmVkIGludCkKLQogI2VuZGlmCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvY3B1LmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvY3B1LmgKaW5kZXggZjdlMzg4OS4uZTkxNTE1YiAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2NwdS5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9jcHUuaApAQCAtNywzMCArNywzNyBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX0xJTlVYX0NQVV9IXwogI2RlZmluZSBfTElOVVhfQ1BVX0hfCi0KICNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KICNpbmNsdWRlIDxsaW51eC9ub2RlLmg+CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CiAjaW5jbHVkZSA8bGludXgvY3B1bWFzay5oPgogI2luY2x1ZGUgPGFzbS9zZW1hcGhvcmUuaD4KLQogc3RydWN0IGNwdSB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGludCBub2RlX2lkOwogIGludCBub19jb250cm9sOwogIHN0cnVjdCBzeXNfZGV2aWNlIHN5c2RldjsKIH07Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2s7Ci0KICNkZWZpbmUgbG9ja19jcHVfaG90cGx1ZygpIGRvIHsgfSB3aGlsZSAoMCkKICNkZWZpbmUgdW5sb2NrX2NwdV9ob3RwbHVnKCkgZG8geyB9IHdoaWxlICgwKQogI2RlZmluZSBsb2NrX2NwdV9ob3RwbHVnX2ludGVycnVwdGlibGUoKSAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBob3RjcHVfbm90aWZpZXIoZm4sIHByaSkgZG8geyB9IHdoaWxlICgwKQogI2RlZmluZSByZWdpc3Rlcl9ob3RjcHVfbm90aWZpZXIobmIpIGRvIHsgfSB3aGlsZSAoMCkKICNkZWZpbmUgdW5yZWdpc3Rlcl9ob3RjcHVfbm90aWZpZXIobmIpIGRvIHsgfSB3aGlsZSAoMCkKLQogI2VuZGlmCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2NwdW1hc2suaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9jcHVtYXNrLmgKaW5kZXggNTQxOTQwYS4uMDRjYjgzOSAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2NwdW1hc2suaAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvY3B1bWFzay5oCkBAIC03LDgxICs3LDk4IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfX0xJTlVYX0NQVU1BU0tfSAogI2RlZmluZSBfX0xJTlVYX0NQVU1BU0tfSAotCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNpbmNsdWRlIDxsaW51eC9iaXRtYXAuaD4KLQogdHlwZWRlZiBzdHJ1Y3QgeyBERUNMQVJFX0JJVE1BUChiaXRzLCBOUl9DUFVTKTsgfSBjcHVtYXNrX3Q7Ci0KICNkZWZpbmUgY3B1X3NldChjcHUsIGRzdCkgX19jcHVfc2V0KChjcHUpLCAmKGRzdCkpCiAjZGVmaW5lIGNwdV9jbGVhcihjcHUsIGRzdCkgX19jcHVfY2xlYXIoKGNwdSksICYoZHN0KSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIGNwdXNfc2V0YWxsKGRzdCkgX19jcHVzX3NldGFsbCgmKGRzdCksIE5SX0NQVVMpCiAjZGVmaW5lIGNwdXNfY2xlYXIoZHN0KSBfX2NwdXNfY2xlYXIoJihkc3QpLCBOUl9DUFVTKQogI2RlZmluZSBjcHVfaXNzZXQoY3B1LCBjcHVtYXNrKSB0ZXN0X2JpdCgoY3B1KSwgKGNwdW1hc2spLmJpdHMpCiAjZGVmaW5lIGNwdV90ZXN0X2FuZF9zZXQoY3B1LCBjcHVtYXNrKSBfX2NwdV90ZXN0X2FuZF9zZXQoKGNwdSksICYoY3B1bWFzaykpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBjcHVzX2FuZChkc3QsIHNyYzEsIHNyYzIpIF9fY3B1c19hbmQoJihkc3QpLCAmKHNyYzEpLCAmKHNyYzIpLCBOUl9DUFVTKQogI2RlZmluZSBjcHVzX29yKGRzdCwgc3JjMSwgc3JjMikgX19jcHVzX29yKCYoZHN0KSwgJihzcmMxKSwgJihzcmMyKSwgTlJfQ1BVUykKICNkZWZpbmUgY3B1c194b3IoZHN0LCBzcmMxLCBzcmMyKSBfX2NwdXNfeG9yKCYoZHN0KSwgJihzcmMxKSwgJihzcmMyKSwgTlJfQ1BVUykKICNkZWZpbmUgY3B1c19hbmRub3QoZHN0LCBzcmMxLCBzcmMyKSAgIF9fY3B1c19hbmRub3QoJihkc3QpLCAmKHNyYzEpLCAmKHNyYzIpLCBOUl9DUFVTKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgY3B1c19jb21wbGVtZW50KGRzdCwgc3JjKSBfX2NwdXNfY29tcGxlbWVudCgmKGRzdCksICYoc3JjKSwgTlJfQ1BVUykKICNkZWZpbmUgY3B1c19lcXVhbChzcmMxLCBzcmMyKSBfX2NwdXNfZXF1YWwoJihzcmMxKSwgJihzcmMyKSwgTlJfQ1BVUykKICNkZWZpbmUgY3B1c19pbnRlcnNlY3RzKHNyYzEsIHNyYzIpIF9fY3B1c19pbnRlcnNlY3RzKCYoc3JjMSksICYoc3JjMiksIE5SX0NQVVMpCiAjZGVmaW5lIGNwdXNfc3Vic2V0KHNyYzEsIHNyYzIpIF9fY3B1c19zdWJzZXQoJihzcmMxKSwgJihzcmMyKSwgTlJfQ1BVUykKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIGNwdXNfZW1wdHkoc3JjKSBfX2NwdXNfZW1wdHkoJihzcmMpLCBOUl9DUFVTKQogI2RlZmluZSBjcHVzX2Z1bGwoY3B1bWFzaykgX19jcHVzX2Z1bGwoJihjcHVtYXNrKSwgTlJfQ1BVUykKICNkZWZpbmUgY3B1c193ZWlnaHQoY3B1bWFzaykgX19jcHVzX3dlaWdodCgmKGNwdW1hc2spLCBOUl9DUFVTKQogI2RlZmluZSBjcHVzX3NoaWZ0X3JpZ2h0KGRzdCwgc3JjLCBuKSAgIF9fY3B1c19zaGlmdF9yaWdodCgmKGRzdCksICYoc3JjKSwgKG4pLCBOUl9DUFVTKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgY3B1c19zaGlmdF9sZWZ0KGRzdCwgc3JjLCBuKSAgIF9fY3B1c19zaGlmdF9sZWZ0KCYoZHN0KSwgJihzcmMpLCAobiksIE5SX0NQVVMpCiAjZGVmaW5lIGZpcnN0X2NwdShzcmMpIDAKICNkZWZpbmUgbmV4dF9jcHUobiwgc3JjKSAxCiAjZGVmaW5lIGNwdW1hc2tfb2ZfY3B1KGNwdSkgICh7ICAgdHlwZW9mKF91bnVzZWRfY3B1bWFza19hcmdfKSBtOyAgIGlmIChzaXplb2YobSkgPT0gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKSB7ICAgbS5iaXRzWzBdID0gMVVMPDwoY3B1KTsgICB9IGVsc2UgeyAgIGNwdXNfY2xlYXIobSk7ICAgY3B1X3NldCgoY3B1KSwgbSk7ICAgfSAgIG07ICB9KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQ1BVX01BU0tfTEFTVF9XT1JEIEJJVE1BUF9MQVNUX1dPUkRfTUFTSyhOUl9DUFVTKQogI2lmIE5SX0NQVVMgPD0gQklUU19QRVJfTE9ORwogI2RlZmluZSBDUFVfTUFTS19BTEwgIChjcHVtYXNrX3QpIHsgeyAgIFtCSVRTX1RPX0xPTkdTKE5SX0NQVVMpLTFdID0gQ1BVX01BU0tfTEFTVF9XT1JEICB9IH0KICNlbHNlCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBDUFVfTUFTS19BTEwgIChjcHVtYXNrX3QpIHsgeyAgIFswIC4uLiBCSVRTX1RPX0xPTkdTKE5SX0NQVVMpLTJdID0gfjBVTCwgICBbQklUU19UT19MT05HUyhOUl9DUFVTKS0xXSA9IENQVV9NQVNLX0xBU1RfV09SRCAgfSB9CiAjZW5kaWYKICNkZWZpbmUgQ1BVX01BU0tfTk9ORSAgKGNwdW1hc2tfdCkgeyB7ICAgWzAgLi4uIEJJVFNfVE9fTE9OR1MoTlJfQ1BVUyktMV0gPSAwVUwgIH0gfQogI2RlZmluZSBDUFVfTUFTS19DUFUwICAoY3B1bWFza190KSB7IHsgICBbMF0gPSAxVUwgIH0gfQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgY3B1c19hZGRyKHNyYykgKChzcmMpLmJpdHMpCiAjZGVmaW5lIGNwdW1hc2tfc2NucHJpbnRmKGJ1ZiwgbGVuLCBzcmMpICAgX19jcHVtYXNrX3NjbnByaW50ZigoYnVmKSwgKGxlbiksICYoc3JjKSwgTlJfQ1BVUykKICNkZWZpbmUgY3B1bWFza19wYXJzZSh1YnVmLCB1bGVuLCBkc3QpICAgX19jcHVtYXNrX3BhcnNlKCh1YnVmKSwgKHVsZW4pLCAmKGRzdCksIE5SX0NQVVMpCiAjZGVmaW5lIGNwdWxpc3Rfc2NucHJpbnRmKGJ1ZiwgbGVuLCBzcmMpICAgX19jcHVsaXN0X3NjbnByaW50ZigoYnVmKSwgKGxlbiksICYoc3JjKSwgTlJfQ1BVUykKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIGNwdWxpc3RfcGFyc2UoYnVmLCBkc3QpIF9fY3B1bGlzdF9wYXJzZSgoYnVmKSwgJihkc3QpLCBOUl9DUFVTKQogI2RlZmluZSBjcHVfcmVtYXAob2xkYml0LCBvbGQsIG5ldykgICBfX2NwdV9yZW1hcCgob2xkYml0KSwgJihvbGQpLCAmKG5ldyksIE5SX0NQVVMpCiAjZGVmaW5lIGNwdXNfcmVtYXAoZHN0LCBzcmMsIG9sZCwgbmV3KSAgIF9fY3B1c19yZW1hcCgmKGRzdCksICYoc3JjKSwgJihvbGQpLCAmKG5ldyksIE5SX0NQVVMpCiAjaWYgTlJfQ1BVUyA+IDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIGZvcl9lYWNoX2NwdV9tYXNrKGNwdSwgbWFzaykgICBmb3IgKChjcHUpID0gZmlyc3RfY3B1KG1hc2spOyAgIChjcHUpIDwgTlJfQ1BVUzsgICAoY3B1KSA9IG5leHRfY3B1KChjcHUpLCAobWFzaykpKQogI2Vsc2UKICNkZWZpbmUgZm9yX2VhY2hfY3B1X21hc2soY3B1LCBtYXNrKSAgIGZvciAoKGNwdSkgPSAwOyAoY3B1KSA8IDE7IChjcHUpKyssICh2b2lkKW1hc2spCiAjZW5kaWYKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNpZiBOUl9DUFVTID4gMQogI2RlZmluZSBudW1fb25saW5lX2NwdXMoKSBjcHVzX3dlaWdodChjcHVfb25saW5lX21hcCkKICNkZWZpbmUgbnVtX3Bvc3NpYmxlX2NwdXMoKSBjcHVzX3dlaWdodChjcHVfcG9zc2libGVfbWFwKQogI2RlZmluZSBudW1fcHJlc2VudF9jcHVzKCkgY3B1c193ZWlnaHQoY3B1X3ByZXNlbnRfbWFwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgY3B1X29ubGluZShjcHUpIGNwdV9pc3NldCgoY3B1KSwgY3B1X29ubGluZV9tYXApCiAjZGVmaW5lIGNwdV9wb3NzaWJsZShjcHUpIGNwdV9pc3NldCgoY3B1KSwgY3B1X3Bvc3NpYmxlX21hcCkKICNkZWZpbmUgY3B1X3ByZXNlbnQoY3B1KSBjcHVfaXNzZXQoKGNwdSksIGNwdV9wcmVzZW50X21hcCkKICNlbHNlCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBudW1fb25saW5lX2NwdXMoKSAxCiAjZGVmaW5lIG51bV9wb3NzaWJsZV9jcHVzKCkgMQogI2RlZmluZSBudW1fcHJlc2VudF9jcHVzKCkgMQogI2RlZmluZSBjcHVfb25saW5lKGNwdSkgKChjcHUpID09IDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBjcHVfcG9zc2libGUoY3B1KSAoKGNwdSkgPT0gMCkKICNkZWZpbmUgY3B1X3ByZXNlbnQoY3B1KSAoKGNwdSkgPT0gMCkKICNlbmRpZgotCiAjZGVmaW5lIGhpZ2hlc3RfcG9zc2libGVfcHJvY2Vzc29yX2lkKCkgMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgYW55X29ubGluZV9jcHUobWFzaykgMAotCiAjZGVmaW5lIGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIGZvcl9lYWNoX2NwdV9tYXNrKChjcHUpLCBjcHVfcG9zc2libGVfbWFwKQogI2RlZmluZSBmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkgZm9yX2VhY2hfY3B1X21hc2soKGNwdSksIGNwdV9vbmxpbmVfbWFwKQogI2RlZmluZSBmb3JfZWFjaF9wcmVzZW50X2NwdShjcHUpIGZvcl9lYWNoX2NwdV9tYXNrKChjcHUpLCBjcHVfcHJlc2VudF9tYXApCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9jdHlwZS5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2N0eXBlLmgKaW5kZXggNDY0NGQxMi4uODY5YWYzZCAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2N0eXBlLmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2N0eXBlLmgKQEAgLTcsMzcgKzcsNDUgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9MSU5VWF9DVFlQRV9ICiAjZGVmaW5lIF9MSU5VWF9DVFlQRV9ICi0KLSNkZWZpbmUgX1UgMHgwMSAgCi0jZGVmaW5lIF9MIDB4MDIgIAotI2RlZmluZSBfRCAweDA0ICAKLSNkZWZpbmUgX0MgMHgwOCAgCi0jZGVmaW5lIF9QIDB4MTAgIAotI2RlZmluZSBfUyAweDIwICAKLSNkZWZpbmUgX1ggMHg0MCAgCi0jZGVmaW5lIF9TUCAweDgwICAKLQorI2RlZmluZSBfVSAweDAxCisjZGVmaW5lIF9MIDB4MDIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIF9EIDB4MDQKKyNkZWZpbmUgX0MgMHgwOAorI2RlZmluZSBfUCAweDEwCisjZGVmaW5lIF9TIDB4MjAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIF9YIDB4NDAKKyNkZWZpbmUgX1NQIDB4ODAKICNkZWZpbmUgX19pc21hc2soeCkgKF9jdHlwZVsoaW50KSh1bnNpZ25lZCBjaGFyKSh4KV0pCi0KICNkZWZpbmUgaXNhbG51bShjKSAoKF9faXNtYXNrKGMpJihfVXxfTHxfRCkpICE9IDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBpc2FscGhhKGMpICgoX19pc21hc2soYykmKF9VfF9MKSkgIT0gMCkKICNkZWZpbmUgaXNjbnRybChjKSAoKF9faXNtYXNrKGMpJihfQykpICE9IDApCiAjZGVmaW5lIGlzZGlnaXQoYykgKChfX2lzbWFzayhjKSYoX0QpKSAhPSAwKQogI2RlZmluZSBpc2dyYXBoKGMpICgoX19pc21hc2soYykmKF9QfF9VfF9MfF9EKSkgIT0gMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIGlzbG93ZXIoYykgKChfX2lzbWFzayhjKSYoX0wpKSAhPSAwKQogI2RlZmluZSBpc3ByaW50KGMpICgoX19pc21hc2soYykmKF9QfF9VfF9MfF9EfF9TUCkpICE9IDApCiAjZGVmaW5lIGlzcHVuY3QoYykgKChfX2lzbWFzayhjKSYoX1ApKSAhPSAwKQogI2RlZmluZSBpc3NwYWNlKGMpICgoX19pc21hc2soYykmKF9TKSkgIT0gMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIGlzdXBwZXIoYykgKChfX2lzbWFzayhjKSYoX1UpKSAhPSAwKQogI2RlZmluZSBpc3hkaWdpdChjKSAoKF9faXNtYXNrKGMpJihfRHxfWCkpICE9IDApCi0KICNkZWZpbmUgaXNhc2NpaShjKSAoKCh1bnNpZ25lZCBjaGFyKShjKSk8PTB4N2YpCiAjZGVmaW5lIHRvYXNjaWkoYykgKCgodW5zaWduZWQgY2hhcikoYykpJjB4N2YpCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIHRvbG93ZXIoYykgX190b2xvd2VyKGMpCiAjZGVmaW5lIHRvdXBwZXIoYykgX190b3VwcGVyKGMpCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9kY2NwLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvZGNjcC5oCmluZGV4IDVlMzM3NzcuLmFiNTk2NWQgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9kY2NwLmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2RjY3AuaApAQCAtNywxMjkgKzcsMTY0IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfTElOVVhfRENDUF9ICiAjZGVmaW5lIF9MSU5VWF9EQ0NQX0gKLQogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IGRjY3BfaGRyIHsKICBfX2JlMTYgZGNjcGhfc3BvcnQsCiAgZGNjcGhfZHBvcnQ7CiAgX191OCBkY2NwaF9kb2ZmOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fQklURklFTEQKICBfX3U4IGRjY3BoX2NzY292OjQsCiAgZGNjcGhfY2N2YWw6NDsKICNlbGlmIGRlZmluZWQoX19CSUdfRU5ESUFOX0JJVEZJRUxEKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IGRjY3BoX2NjdmFsOjQsCiAgZGNjcGhfY3Njb3Y6NDsKICNlbHNlCiAjZXJyb3IgIkFkanVzdCB5b3VyIDxhc20vYnl0ZW9yZGVyLmg+IGRlZmluZXMiCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2VuZGlmCiAgX191MTYgZGNjcGhfY2hlY2tzdW07CiAjaWZkZWYgX19MSVRUTEVfRU5ESUFOX0JJVEZJRUxECiAgX191OCBkY2NwaF94OjEsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGRjY3BoX3R5cGU6NCwKICBkY2NwaF9yZXNlcnZlZDozOwogI2VsaWYgZGVmaW5lZChfX0JJR19FTkRJQU5fQklURklFTEQpCiAgX191OCBkY2NwaF9yZXNlcnZlZDozLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBkY2NwaF90eXBlOjQsCiAgZGNjcGhfeDoxOwogI2Vsc2UKICNlcnJvciAiQWRqdXN0IHlvdXIgPGFzbS9ieXRlb3JkZXIuaD4gZGVmaW5lcyIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZW5kaWYKICBfX3U4IGRjY3BoX3NlcTI7CiAgX19iZTE2IGRjY3BoX3NlcTsKIH07Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgZGNjcF9oZHJfZXh0IHsKICBfX2JlMzIgZGNjcGhfc2VxX2xvdzsKIH07Ci0KIHN0cnVjdCBkY2NwX2hkcl9yZXF1ZXN0IHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX19iZTMyIGRjY3BoX3JlcV9zZXJ2aWNlOwogfTsKLQogc3RydWN0IGRjY3BfaGRyX2Fja19iaXRzIHsKICBfX2JlMTYgZGNjcGhfcmVzZXJ2ZWQxOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX2JlMTYgZGNjcGhfYWNrX25yX2hpZ2g7CiAgX19iZTMyIGRjY3BoX2Fja19ucl9sb3c7CiB9OwotCiBzdHJ1Y3QgZGNjcF9oZHJfcmVzcG9uc2UgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgZGNjcF9oZHJfYWNrX2JpdHMgZGNjcGhfcmVzcF9hY2s7CiAgX19iZTMyIGRjY3BoX3Jlc3Bfc2VydmljZTsKIH07Ci0KIHN0cnVjdCBkY2NwX2hkcl9yZXNldCB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCBkY2NwX2hkcl9hY2tfYml0cyBkY2NwaF9yZXNldF9hY2s7CiAgX191OCBkY2NwaF9yZXNldF9jb2RlLAogIGRjY3BoX3Jlc2V0X2RhdGFbM107CiB9OwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogZW51bSBkY2NwX3BrdF90eXBlIHsKICBEQ0NQX1BLVF9SRVFVRVNUID0gMCwKICBEQ0NQX1BLVF9SRVNQT05TRSwKICBEQ0NQX1BLVF9EQVRBLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBEQ0NQX1BLVF9BQ0ssCiAgRENDUF9QS1RfREFUQUFDSywKICBEQ0NQX1BLVF9DTE9TRVJFUSwKICBEQ0NQX1BLVF9DTE9TRSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgRENDUF9QS1RfUkVTRVQsCiAgRENDUF9QS1RfU1lOQywKICBEQ0NQX1BLVF9TWU5DQUNLLAogIERDQ1BfUEtUX0lOVkFMSUQsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKLQogI2RlZmluZSBEQ0NQX05SX1BLVF9UWVBFUyBEQ0NQX1BLVF9JTlZBTElECi0KK2VudW0gZGNjcF9yZXNldF9jb2RlcyB7CisgRENDUF9SRVNFVF9DT0RFX1VOU1BFQ0lGSUVEID0gMCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgRENDUF9SRVNFVF9DT0RFX0NMT1NFRCwKKyBEQ0NQX1JFU0VUX0NPREVfQUJPUlRFRCwKKyBEQ0NQX1JFU0VUX0NPREVfTk9fQ09OTkVDVElPTiwKKyBEQ0NQX1JFU0VUX0NPREVfUEFDS0VUX0VSUk9SLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBEQ0NQX1JFU0VUX0NPREVfT1BUSU9OX0VSUk9SLAorIERDQ1BfUkVTRVRfQ09ERV9NQU5EQVRPUllfRVJST1IsCisgRENDUF9SRVNFVF9DT0RFX0NPTk5FQ1RJT05fUkVGVVNFRCwKKyBEQ0NQX1JFU0VUX0NPREVfQkFEX1NFUlZJQ0VfQ09ERSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgRENDUF9SRVNFVF9DT0RFX1RPT19CVVNZLAorIERDQ1BfUkVTRVRfQ09ERV9CQURfSU5JVF9DT09LSUUsCisgRENDUF9SRVNFVF9DT0RFX0FHR1JFU1NJT05fUEVOQUxUWSwKK307CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogZW51bSB7CiAgRENDUE9fUEFERElORyA9IDAsCiAgRENDUE9fTUFOREFUT1JZID0gMSwKICBEQ0NQT19NSU5fUkVTRVJWRUQgPSAzLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBEQ0NQT19NQVhfUkVTRVJWRUQgPSAzMSwKICBEQ0NQT19DSEFOR0VfTCA9IDMyLAogIERDQ1BPX0NPTkZJUk1fTCA9IDMzLAogIERDQ1BPX0NIQU5HRV9SID0gMzQsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIERDQ1BPX0NPTkZJUk1fUiA9IDM1LAogIERDQ1BPX05EUF9DT1VOVCA9IDM3LAogIERDQ1BPX0FDS19WRUNUT1JfMCA9IDM4LAogIERDQ1BPX0FDS19WRUNUT1JfMSA9IDM5LAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBEQ0NQT19USU1FU1RBTVAgPSA0MSwKICBEQ0NQT19USU1FU1RBTVBfRUNITyA9IDQyLAogIERDQ1BPX0VMQVBTRURfVElNRSA9IDQzLAogIERDQ1BPX01BWCA9IDQ1LAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBEQ0NQT19NSU5fQ0NJRF9TUEVDSUZJQyA9IDEyOCwKICBEQ0NQT19NQVhfQ0NJRF9TUEVDSUZJQyA9IDI1NSwKIH07Ci0KIGVudW0geworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBEQ0NQRl9SRVNFUlZFRCA9IDAsCiAgRENDUEZfQ0NJRCA9IDEsCiAgRENDUEZfU0VRVUVOQ0VfV0lORE9XID0gMywKICBEQ0NQRl9BQ0tfUkFUSU8gPSA1LAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBEQ0NQRl9TRU5EX0FDS19WRUNUT1IgPSA2LAogIERDQ1BGX1NFTkRfTkRQX0NPVU5UID0gNywKLQogIERDQ1BGX01JTl9DQ0lEX1NQRUNJRklDID0gMTI4LAogIERDQ1BGX01BWF9DQ0lEX1NQRUNJRklDID0gMjU1LAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07Ci0KIHN0cnVjdCBkY2NwX3NvX2ZlYXQgewogIF9fdTggZGNjcHNmX2ZlYXQ7CiAgX191OCAqZGNjcHNmX3ZhbDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191OCBkY2Nwc2ZfbGVuOwogfTsKLQogI2RlZmluZSBEQ0NQX1NPQ0tPUFRfUEFDS0VUX1NJWkUgMQogI2RlZmluZSBEQ0NQX1NPQ0tPUFRfU0VSVklDRSAyCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBEQ0NQX1NPQ0tPUFRfQ0hBTkdFX0wgMwogI2RlZmluZSBEQ0NQX1NPQ0tPUFRfQ0hBTkdFX1IgNAogI2RlZmluZSBEQ0NQX1NPQ0tPUFRfQ0NJRF9SWF9JTkZPIDEyOAogI2RlZmluZSBEQ0NQX1NPQ0tPUFRfQ0NJRF9UWF9JTkZPIDE5MgotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBEQ0NQX1NFUlZJQ0VfTElTVF9NQVhfTEVOIDMyCi0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2RlYnVnX2xvY2tzLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvZGVidWdfbG9ja3MuaAppbmRleCAyZDU1ZmNkLi5hMjlhY2MzIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvZGVidWdfbG9ja3MuaAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvZGVidWdfbG9ja3MuaApAQCAtNywyMCArNywyMyBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX19MSU5VWF9ERUJVR19MT0NLSU5HX0gKICNkZWZpbmUgX19MSU5VWF9ERUJVR19MT0NLSU5HX0gKLQogc3RydWN0IHRhc2tfc3RydWN0OwotCiAjZGVmaW5lIF9SRVRfSVBfICh1bnNpZ25lZCBsb25nKV9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX1RISVNfSVBfICh7IF9fbGFiZWxfXyBfX2hlcmU7IF9faGVyZTogKHVuc2lnbmVkIGxvbmcpJiZfX2hlcmU7IH0pCi0KICNkZWZpbmUgREVCVUdfTE9DS1NfV0FSTl9PTihjKSAgKHsgICBpbnQgX19yZXQgPSAwOyAgICAgaWYgKHVubGlrZWx5KGMpKSB7ICAgaWYgKGRlYnVnX2xvY2tzX29mZigpKSAgIFdBUk5fT04oMSk7ICAgX19yZXQgPSAxOyAgIH0gICBfX3JldDsgIH0pCi0KICNkZWZpbmUgU01QX0RFQlVHX0xPQ0tTX1dBUk5fT04oYykgZG8geyB9IHdoaWxlICgwKQotCiAjZGVmaW5lIGxvY2tpbmdfc2VsZnRlc3QoKSBkbyB7IH0gd2hpbGUgKDApCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9kZWxheS5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2RlbGF5LmgKaW5kZXggZTAzMmI2Zi4uYTZiYTI1MCAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2RlbGF5LmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2RlbGF5LmgKQEAgLTcsMjMgKzcsMjggQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9MSU5VWF9ERUxBWV9ICiAjZGVmaW5lIF9MSU5VWF9ERUxBWV9ICi0KICNpbmNsdWRlIDxhc20vZGVsYXkuaD4KLQogI2lmbmRlZiBNQVhfVURFTEFZX01TCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNQVhfVURFTEFZX01TIDUKICNlbmRpZgotCiAjaWZuZGVmIG1kZWxheQogI2RlZmluZSBtZGVsYXkobikgKCAgKF9fYnVpbHRpbl9jb25zdGFudF9wKG4pICYmIChuKTw9TUFYX1VERUxBWV9NUykgPyB1ZGVsYXkoKG4pKjEwMDApIDogICAoe3Vuc2lnbmVkIGxvbmcgX19tcz0obik7IHdoaWxlIChfX21zLS0pIHVkZWxheSgxMDAwKTt9KSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZW5kaWYKLQogI2lmbmRlZiBuZGVsYXkKICNkZWZpbmUgbmRlbGF5KHgpIHVkZWxheSgoKHgpKzk5OSkvMTAwMCkKICNlbmRpZgotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvZGV2aWNlLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvZGV2aWNlLmgKaW5kZXggNjQxOTMyMi4uYWE1ZWNlNiAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2RldmljZS5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9kZXZpY2UuaApAQCAtNywyMTYgKzcsMjE4IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfREVWSUNFX0hfCiAjZGVmaW5lIF9ERVZJQ0VfSF8KLQogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgogI2luY2x1ZGUgPGxpbnV4L2tvYmplY3QuaD4KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjaW5jbHVkZSA8bGludXgva2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjaW5jbHVkZSA8bGludXgvcG0uaD4KICNpbmNsdWRlIDxhc20vc2VtYXBob3JlLmg+CiAjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgotCiAjZGVmaW5lIERFVklDRV9OQU1FX1NJWkUgNTAKLSNkZWZpbmUgREVWSUNFX05BTUVfSEFMRiBfX3N0cmluZ2lmeSgyMCkgIAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgREVWSUNFX05BTUVfSEFMRiBfX3N0cmluZ2lmeSgyMCkKICNkZWZpbmUgREVWSUNFX0lEX1NJWkUgMzIKICNkZWZpbmUgQlVTX0lEX1NJWkUgS09CSl9OQU1FX0xFTgotCiBzdHJ1Y3QgZGV2aWNlOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBkZXZpY2VfZHJpdmVyOwogc3RydWN0IGNsYXNzOwogc3RydWN0IGNsYXNzX2RldmljZTsKLQogc3RydWN0IGJ1c190eXBlIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgY29uc3QgY2hhciAqIG5hbWU7Ci0KICBzdHJ1Y3Qgc3Vic3lzdGVtIHN1YnN5czsKICBzdHJ1Y3Qga3NldCBkcml2ZXJzOwogIHN0cnVjdCBrc2V0IGRldmljZXM7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCBrbGlzdCBrbGlzdF9kZXZpY2VzOwogIHN0cnVjdCBrbGlzdCBrbGlzdF9kcml2ZXJzOwotCiAgc3RydWN0IGJ1c19hdHRyaWJ1dGUgKiBidXNfYXR0cnM7CiAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKiBkZXZfYXR0cnM7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCBkcml2ZXJfYXR0cmlidXRlICogZHJ2X2F0dHJzOwotCiAgaW50ICgqbWF0Y2gpKHN0cnVjdCBkZXZpY2UgKiBkZXYsIHN0cnVjdCBkZXZpY2VfZHJpdmVyICogZHJ2KTsKICBpbnQgKCp1ZXZlbnQpKHN0cnVjdCBkZXZpY2UgKmRldiwgY2hhciAqKmVudnAsCiAgaW50IG51bV9lbnZwLCBjaGFyICpidWZmZXIsIGludCBidWZmZXJfc2l6ZSk7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGludCAoKnByb2JlKShzdHJ1Y3QgZGV2aWNlICogZGV2KTsKICBpbnQgKCpyZW1vdmUpKHN0cnVjdCBkZXZpY2UgKiBkZXYpOwogIHZvaWQgKCpzaHV0ZG93bikoc3RydWN0IGRldmljZSAqIGRldik7CiAgaW50ICgqc3VzcGVuZCkoc3RydWN0IGRldmljZSAqIGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgaW50ICgqcmVzdW1lKShzdHJ1Y3QgZGV2aWNlICogZGV2KTsKIH07Ci0KIHN0cnVjdCBkZXZpY2UgKiBidXNfZmluZF9kZXZpY2Uoc3RydWN0IGJ1c190eXBlICpidXMsIHN0cnVjdCBkZXZpY2UgKnN0YXJ0LAogIHZvaWQgKmRhdGEsIGludCAoKm1hdGNoKShzdHJ1Y3QgZGV2aWNlICosIHZvaWQgKikpOwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IGJ1c19hdHRyaWJ1dGUgewogIHN0cnVjdCBhdHRyaWJ1dGUgYXR0cjsKICBzc2l6ZV90ICgqc2hvdykoc3RydWN0IGJ1c190eXBlICosIGNoYXIgKiBidWYpOwogIHNzaXplX3QgKCpzdG9yZSkoc3RydWN0IGJ1c190eXBlICosIGNvbnN0IGNoYXIgKiBidWYsIHNpemVfdCBjb3VudCk7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKLQogI2RlZmluZSBCVVNfQVRUUihfbmFtZSxfbW9kZSxfc2hvdyxfc3RvcmUpICBzdHJ1Y3QgYnVzX2F0dHJpYnV0ZSBidXNfYXR0cl8jI19uYW1lID0gX19BVFRSKF9uYW1lLF9tb2RlLF9zaG93LF9zdG9yZSkKLQogc3RydWN0IGRldmljZV9kcml2ZXIgewogIGNvbnN0IGNoYXIgKiBuYW1lOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgYnVzX3R5cGUgKiBidXM7Ci0KICBzdHJ1Y3QgY29tcGxldGlvbiB1bmxvYWRlZDsKICBzdHJ1Y3Qga29iamVjdCBrb2JqOwogIHN0cnVjdCBrbGlzdCBrbGlzdF9kZXZpY2VzOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3Qga2xpc3Rfbm9kZSBrbm9kZV9idXM7Ci0KICBzdHJ1Y3QgbW9kdWxlICogb3duZXI7Ci0KICBpbnQgKCpwcm9iZSkgKHN0cnVjdCBkZXZpY2UgKiBkZXYpOwogIGludCAoKnJlbW92ZSkgKHN0cnVjdCBkZXZpY2UgKiBkZXYpOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB2b2lkICgqc2h1dGRvd24pIChzdHJ1Y3QgZGV2aWNlICogZGV2KTsKICBpbnQgKCpzdXNwZW5kKSAoc3RydWN0IGRldmljZSAqIGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKTsKICBpbnQgKCpyZXN1bWUpIChzdHJ1Y3QgZGV2aWNlICogZGV2KTsKIH07Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgZHJpdmVyX2F0dHJpYnV0ZSB7CiAgc3RydWN0IGF0dHJpYnV0ZSBhdHRyOwogIHNzaXplX3QgKCpzaG93KShzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqLCBjaGFyICogYnVmKTsKICBzc2l6ZV90ICgqc3RvcmUpKHN0cnVjdCBkZXZpY2VfZHJpdmVyICosIGNvbnN0IGNoYXIgKiBidWYsIHNpemVfdCBjb3VudCk7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKLQogI2RlZmluZSBEUklWRVJfQVRUUihfbmFtZSxfbW9kZSxfc2hvdyxfc3RvcmUpICBzdHJ1Y3QgZHJpdmVyX2F0dHJpYnV0ZSBkcml2ZXJfYXR0cl8jI19uYW1lID0gX19BVFRSKF9uYW1lLF9tb2RlLF9zaG93LF9zdG9yZSkKLQogc3RydWN0IGRldmljZSAqIGRyaXZlcl9maW5kX2RldmljZShzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2LAogIHN0cnVjdCBkZXZpY2UgKnN0YXJ0LCB2b2lkICpkYXRhLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBpbnQgKCptYXRjaCkoc3RydWN0IGRldmljZSAqLCB2b2lkICopKTsKLQogc3RydWN0IGNsYXNzIHsKICBjb25zdCBjaGFyICogbmFtZTsKICBzdHJ1Y3QgbW9kdWxlICogb3duZXI7Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IHN1YnN5c3RlbSBzdWJzeXM7CiAgc3RydWN0IGxpc3RfaGVhZCBjaGlsZHJlbjsKICBzdHJ1Y3QgbGlzdF9oZWFkIGRldmljZXM7CiAgc3RydWN0IGxpc3RfaGVhZCBpbnRlcmZhY2VzOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3Qgc2VtYXBob3JlIHNlbTsKLQogIHN0cnVjdCBjbGFzc19hdHRyaWJ1dGUgKiBjbGFzc19hdHRyczsKICBzdHJ1Y3QgY2xhc3NfZGV2aWNlX2F0dHJpYnV0ZSAqIGNsYXNzX2Rldl9hdHRyczsKLQogIGludCAoKnVldmVudCkoc3RydWN0IGNsYXNzX2RldmljZSAqZGV2LCBjaGFyICoqZW52cCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgaW50IG51bV9lbnZwLCBjaGFyICpidWZmZXIsIGludCBidWZmZXJfc2l6ZSk7Ci0KICB2b2lkICgqcmVsZWFzZSkoc3RydWN0IGNsYXNzX2RldmljZSAqZGV2KTsKICB2b2lkICgqY2xhc3NfcmVsZWFzZSkoc3RydWN0IGNsYXNzICpjbGFzcyk7CiB9OwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IGNsYXNzX2F0dHJpYnV0ZSB7CiAgc3RydWN0IGF0dHJpYnV0ZSBhdHRyOwogIHNzaXplX3QgKCpzaG93KShzdHJ1Y3QgY2xhc3MgKiwgY2hhciAqIGJ1Zik7CiAgc3NpemVfdCAoKnN0b3JlKShzdHJ1Y3QgY2xhc3MgKiwgY29uc3QgY2hhciAqIGJ1Ziwgc2l6ZV90IGNvdW50KTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwotCi0jZGVmaW5lIENMQVNTX0FUVFIoX25hbWUsX21vZGUsX3Nob3csX3N0b3JlKSAgc3RydWN0IGNsYXNzX2F0dHJpYnV0ZSBjbGFzc19hdHRyXyMjX25hbWUgPSBfX0FUVFIoX25hbWUsX21vZGUsX3Nob3csX3N0b3JlKSAKLQorI2RlZmluZSBDTEFTU19BVFRSKF9uYW1lLF9tb2RlLF9zaG93LF9zdG9yZSkgIHN0cnVjdCBjbGFzc19hdHRyaWJ1dGUgY2xhc3NfYXR0cl8jI19uYW1lID0gX19BVFRSKF9uYW1lLF9tb2RlLF9zaG93LF9zdG9yZSkKIHN0cnVjdCBjbGFzc19kZXZpY2VfYXR0cmlidXRlIHsKICBzdHJ1Y3QgYXR0cmlidXRlIGF0dHI7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHNzaXplX3QgKCpzaG93KShzdHJ1Y3QgY2xhc3NfZGV2aWNlICosIGNoYXIgKiBidWYpOwogIHNzaXplX3QgKCpzdG9yZSkoc3RydWN0IGNsYXNzX2RldmljZSAqLCBjb25zdCBjaGFyICogYnVmLCBzaXplX3QgY291bnQpOwogfTsKLQogI2RlZmluZSBDTEFTU19ERVZJQ0VfQVRUUihfbmFtZSxfbW9kZSxfc2hvdyxfc3RvcmUpICBzdHJ1Y3QgY2xhc3NfZGV2aWNlX2F0dHJpYnV0ZSBjbGFzc19kZXZpY2VfYXR0cl8jI19uYW1lID0gICBfX0FUVFIoX25hbWUsX21vZGUsX3Nob3csX3N0b3JlKQotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IGNsYXNzX2RldmljZSB7CiAgc3RydWN0IGxpc3RfaGVhZCBub2RlOwotCiAgc3RydWN0IGtvYmplY3Qga29iajsKICBzdHJ1Y3QgY2xhc3MgKiBjbGFzczsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgZGV2X3QgZGV2dDsKICBzdHJ1Y3QgY2xhc3NfZGV2aWNlX2F0dHJpYnV0ZSAqZGV2dF9hdHRyOwogIHN0cnVjdCBjbGFzc19kZXZpY2VfYXR0cmlidXRlIHVldmVudF9hdHRyOwogIHN0cnVjdCBkZXZpY2UgKiBkZXY7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHZvaWQgKiBjbGFzc19kYXRhOwogIHN0cnVjdCBjbGFzc19kZXZpY2UgKnBhcmVudDsKICBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwICoqIGdyb3VwczsKLQogIHZvaWQgKCpyZWxlYXNlKShzdHJ1Y3QgY2xhc3NfZGV2aWNlICpkZXYpOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBpbnQgKCp1ZXZlbnQpKHN0cnVjdCBjbGFzc19kZXZpY2UgKmRldiwgY2hhciAqKmVudnAsCiAgaW50IG51bV9lbnZwLCBjaGFyICpidWZmZXIsIGludCBidWZmZXJfc2l6ZSk7CiAgY2hhciBjbGFzc19pZFtCVVNfSURfU0laRV07CiB9OwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IGNsYXNzX2ludGVyZmFjZSB7CiAgc3RydWN0IGxpc3RfaGVhZCBub2RlOwogIHN0cnVjdCBjbGFzcyAqY2xhc3M7Ci0KICBpbnQgKCphZGQpIChzdHJ1Y3QgY2xhc3NfZGV2aWNlICosIHN0cnVjdCBjbGFzc19pbnRlcmZhY2UgKik7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHZvaWQgKCpyZW1vdmUpIChzdHJ1Y3QgY2xhc3NfZGV2aWNlICosIHN0cnVjdCBjbGFzc19pbnRlcmZhY2UgKik7CiB9OwotCiBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSB7CiAgc3RydWN0IGF0dHJpYnV0ZSBhdHRyOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzc2l6ZV90ICgqc2hvdykoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKICBjaGFyICpidWYpOwogIHNzaXplX3QgKCpzdG9yZSkoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCk7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKLQogI2RlZmluZSBERVZJQ0VfQVRUUihfbmFtZSxfbW9kZSxfc2hvdyxfc3RvcmUpICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBkZXZfYXR0cl8jI19uYW1lID0gX19BVFRSKF9uYW1lLF9tb2RlLF9zaG93LF9zdG9yZSkKLQogc3RydWN0IGRldmljZSB7CiAgc3RydWN0IGtsaXN0IGtsaXN0X2NoaWxkcmVuOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3Qga2xpc3Rfbm9kZSBrbm9kZV9wYXJlbnQ7CiAgc3RydWN0IGtsaXN0X25vZGUga25vZGVfZHJpdmVyOwogIHN0cnVjdCBrbGlzdF9ub2RlIGtub2RlX2J1czsKICBzdHJ1Y3QgZGV2aWNlICogcGFyZW50OwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCBrb2JqZWN0IGtvYmo7CiAgY2hhciBidXNfaWRbQlVTX0lEX1NJWkVdOwogIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIHVldmVudF9hdHRyOwogIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpkZXZ0X2F0dHI7Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IHNlbWFwaG9yZSBzZW07Ci0KICBzdHJ1Y3QgYnVzX3R5cGUgKiBidXM7CiAgc3RydWN0IGRldmljZV9kcml2ZXIgKmRyaXZlcjsKICB2b2lkICpkcml2ZXJfZGF0YTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdm9pZCAqcGxhdGZvcm1fZGF0YTsKICB2b2lkICpmaXJtd2FyZV9kYXRhOwogIHN0cnVjdCBkZXZfcG1faW5mbyBwb3dlcjsKLQogIHU2NCAqZG1hX21hc2s7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHU2NCBjb2hlcmVudF9kbWFfbWFzazsKLQogIHN0cnVjdCBsaXN0X2hlYWQgZG1hX3Bvb2xzOwotCiAgc3RydWN0IGRtYV9jb2hlcmVudF9tZW0gKmRtYV9tZW07Ci0KICBzdHJ1Y3QgbGlzdF9oZWFkIG5vZGU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCBjbGFzcyAqY2xhc3M7CiAgZGV2X3QgZGV2dDsKLQogIHZvaWQgKCpyZWxlYXNlKShzdHJ1Y3QgZGV2aWNlICogZGV2KTsKIH07Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIGRldl9wcmludGsobGV2ZWwsIGRldiwgZm9ybWF0LCBhcmcuLi4pICAgcHJpbnRrKGxldmVsICIlcyAlczogIiBmb3JtYXQgLCBkZXZfZHJpdmVyX3N0cmluZyhkZXYpICwgKGRldiktPmJ1c19pZCAsICMjIGFyZykKLQogI2lmZGVmIERFQlVHCiAjZGVmaW5lIGRldl9kYmcoZGV2LCBmb3JtYXQsIGFyZy4uLikgICBkZXZfcHJpbnRrKEtFUk5fREVCVUcgLCBkZXYgLCBmb3JtYXQgLCAjIyBhcmcpCiAjZWxzZQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgZGV2X2RiZyhkZXYsIGZvcm1hdCwgYXJnLi4uKSBkbyB7ICh2b2lkKShkZXYpOyB9IHdoaWxlICgwKQogI2VuZGlmCi0KICNkZWZpbmUgZGV2X2VycihkZXYsIGZvcm1hdCwgYXJnLi4uKSAgIGRldl9wcmludGsoS0VSTl9FUlIgLCBkZXYgLCBmb3JtYXQgLCAjIyBhcmcpCiAjZGVmaW5lIGRldl9pbmZvKGRldiwgZm9ybWF0LCBhcmcuLi4pICAgZGV2X3ByaW50ayhLRVJOX0lORk8gLCBkZXYgLCBmb3JtYXQgLCAjIyBhcmcpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBkZXZfd2FybihkZXYsIGZvcm1hdCwgYXJnLi4uKSAgIGRldl9wcmludGsoS0VSTl9XQVJOSU5HICwgZGV2ICwgZm9ybWF0ICwgIyMgYXJnKQogI2RlZmluZSBkZXZfbm90aWNlKGRldiwgZm9ybWF0LCBhcmcuLi4pICAgZGV2X3ByaW50ayhLRVJOX05PVElDRSAsIGRldiAsIGZvcm1hdCAsICMjIGFyZykKLQogI2RlZmluZSBNT0RVTEVfQUxJQVNfQ0hBUkRFVihtYWpvcixtaW5vcikgICBNT0RVTEVfQUxJQVMoImNoYXItbWFqb3ItIiBfX3N0cmluZ2lmeShtYWpvcikgIi0iIF9fc3RyaW5naWZ5KG1pbm9yKSkKICNkZWZpbmUgTU9EVUxFX0FMSUFTX0NIQVJERVZfTUFKT1IobWFqb3IpICAgTU9EVUxFX0FMSUFTKCJjaGFyLW1ham9yLSIgX19zdHJpbmdpZnkobWFqb3IpICItKiIpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvZGlyZW50LmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvZGlyZW50LmgKaW5kZXggMmRhY2UxOC4uYmEzNTAxMSAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2RpcmVudC5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9kaXJlbnQuaApAQCAtNywyNCArNywzMiBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX0xJTlVYX0RJUkVOVF9ICiAjZGVmaW5lIF9MSU5VWF9ESVJFTlRfSAotCiBzdHJ1Y3QgZGlyZW50IHsKICBsb25nIGRfaW5vOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX2tlcm5lbF9vZmZfdCBkX29mZjsKICB1bnNpZ25lZCBzaG9ydCBkX3JlY2xlbjsKICBjaGFyIGRfbmFtZVsyNTZdOwogfTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBkaXJlbnQ2NCB7CiAgX191NjQgZF9pbm87CiAgX19zNjQgZF9vZmY7CiAgdW5zaWduZWQgc2hvcnQgZF9yZWNsZW47CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGNoYXIgZF90eXBlOwogIGNoYXIgZF9uYW1lWzI1Nl07CiB9OwotCiAjZW5kaWYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvZG0taW9jdGwuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9kbS1pb2N0bC5oCmluZGV4IGVhZDc3NDQuLjhkNGYyOGYgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9kbS1pb2N0bC5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9kbS1pb2N0bC5oCkBAIC03LDE0MCArNywxMzMgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9MSU5VWF9ETV9JT0NUTF9WNF9ICiAjZGVmaW5lIF9MSU5VWF9ETV9JT0NUTF9WNF9ICi0KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotCi0jZGVmaW5lIERNX0RJUiAibWFwcGVyIiAgCisjZGVmaW5lIERNX0RJUiAibWFwcGVyIgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRE1fTUFYX1RZUEVfTkFNRSAxNgogI2RlZmluZSBETV9OQU1FX0xFTiAxMjgKICNkZWZpbmUgRE1fVVVJRF9MRU4gMTI5Ci0KIHN0cnVjdCBkbV9pb2N0bCB7Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdWludDMyX3QgdmVyc2lvblszXTsKICB1aW50MzJfdCBkYXRhX3NpemU7Ci0KICB1aW50MzJfdCBkYXRhX3N0YXJ0OwotCiAgdWludDMyX3QgdGFyZ2V0X2NvdW50OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBpbnQzMl90IG9wZW5fY291bnQ7CiAgdWludDMyX3QgZmxhZ3M7CiAgdWludDMyX3QgZXZlbnRfbnI7CiAgdWludDMyX3QgcGFkZGluZzsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1aW50NjRfdCBkZXY7Ci0KICBjaGFyIG5hbWVbRE1fTkFNRV9MRU5dOwogIGNoYXIgdXVpZFtETV9VVUlEX0xFTl07CiAgY2hhciBkYXRhWzddOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07Ci0KIHN0cnVjdCBkbV90YXJnZXRfc3BlYyB7CiAgdWludDY0X3Qgc2VjdG9yX3N0YXJ0OwogIHVpbnQ2NF90IGxlbmd0aDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgaW50MzJfdCBzdGF0dXM7Ci0KICB1aW50MzJfdCBuZXh0OwotCiAgY2hhciB0YXJnZXRfdHlwZVtETV9NQVhfVFlQRV9OQU1FXTsKLQogfTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBkbV90YXJnZXRfZGVwcyB7CiAgdWludDMyX3QgY291bnQ7CiAgdWludDMyX3QgcGFkZGluZzsKICB1aW50NjRfdCBkZXZbMF07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKLQogc3RydWN0IGRtX25hbWVfbGlzdCB7CiAgdWludDY0X3QgZGV2OwogIHVpbnQzMl90IG5leHQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGNoYXIgbmFtZVswXTsKIH07Ci0KIHN0cnVjdCBkbV90YXJnZXRfdmVyc2lvbnMgewogIHVpbnQzMl90IG5leHQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVpbnQzMl90IHZlcnNpb25bM107Ci0KICBjaGFyIG5hbWVbMF07CiB9OwotCiBzdHJ1Y3QgZG1fdGFyZ2V0X21zZyB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVpbnQ2NF90IHNlY3RvcjsKLQogIGNoYXIgbWVzc2FnZVswXTsKIH07Ci0KIGVudW0gewotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIERNX1ZFUlNJT05fQ01EID0gMCwKICBETV9SRU1PVkVfQUxMX0NNRCwKICBETV9MSVNUX0RFVklDRVNfQ01ELAotCiAgRE1fREVWX0NSRUFURV9DTUQsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIERNX0RFVl9SRU1PVkVfQ01ELAogIERNX0RFVl9SRU5BTUVfQ01ELAogIERNX0RFVl9TVVNQRU5EX0NNRCwKICBETV9ERVZfU1RBVFVTX0NNRCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgRE1fREVWX1dBSVRfQ01ELAotCiAgRE1fVEFCTEVfTE9BRF9DTUQsCiAgRE1fVEFCTEVfQ0xFQVJfQ01ELAogIERNX1RBQkxFX0RFUFNfQ01ELAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBETV9UQUJMRV9TVEFUVVNfQ01ELAotCiAgRE1fTElTVF9WRVJTSU9OU19DTUQsCiAgRE1fVEFSR0VUX01TR19DTUQsCiAgRE1fREVWX1NFVF9HRU9NRVRSWV9DTUQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwotCiAjZGVmaW5lIERNX0lPQ1RMIDB4ZmQKLQogI2RlZmluZSBETV9WRVJTSU9OIF9JT1dSKERNX0lPQ1RMLCBETV9WRVJTSU9OX0NNRCwgc3RydWN0IGRtX2lvY3RsKQogI2RlZmluZSBETV9SRU1PVkVfQUxMIF9JT1dSKERNX0lPQ1RMLCBETV9SRU1PVkVfQUxMX0NNRCwgc3RydWN0IGRtX2lvY3RsKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRE1fTElTVF9ERVZJQ0VTIF9JT1dSKERNX0lPQ1RMLCBETV9MSVNUX0RFVklDRVNfQ01ELCBzdHJ1Y3QgZG1faW9jdGwpCi0KICNkZWZpbmUgRE1fREVWX0NSRUFURSBfSU9XUihETV9JT0NUTCwgRE1fREVWX0NSRUFURV9DTUQsIHN0cnVjdCBkbV9pb2N0bCkKICNkZWZpbmUgRE1fREVWX1JFTU9WRSBfSU9XUihETV9JT0NUTCwgRE1fREVWX1JFTU9WRV9DTUQsIHN0cnVjdCBkbV9pb2N0bCkKICNkZWZpbmUgRE1fREVWX1JFTkFNRSBfSU9XUihETV9JT0NUTCwgRE1fREVWX1JFTkFNRV9DTUQsIHN0cnVjdCBkbV9pb2N0bCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIERNX0RFVl9TVVNQRU5EIF9JT1dSKERNX0lPQ1RMLCBETV9ERVZfU1VTUEVORF9DTUQsIHN0cnVjdCBkbV9pb2N0bCkKICNkZWZpbmUgRE1fREVWX1NUQVRVUyBfSU9XUihETV9JT0NUTCwgRE1fREVWX1NUQVRVU19DTUQsIHN0cnVjdCBkbV9pb2N0bCkKICNkZWZpbmUgRE1fREVWX1dBSVQgX0lPV1IoRE1fSU9DVEwsIERNX0RFVl9XQUlUX0NNRCwgc3RydWN0IGRtX2lvY3RsKQotCiAjZGVmaW5lIERNX1RBQkxFX0xPQUQgX0lPV1IoRE1fSU9DVEwsIERNX1RBQkxFX0xPQURfQ01ELCBzdHJ1Y3QgZG1faW9jdGwpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBETV9UQUJMRV9DTEVBUiBfSU9XUihETV9JT0NUTCwgRE1fVEFCTEVfQ0xFQVJfQ01ELCBzdHJ1Y3QgZG1faW9jdGwpCiAjZGVmaW5lIERNX1RBQkxFX0RFUFMgX0lPV1IoRE1fSU9DVEwsIERNX1RBQkxFX0RFUFNfQ01ELCBzdHJ1Y3QgZG1faW9jdGwpCiAjZGVmaW5lIERNX1RBQkxFX1NUQVRVUyBfSU9XUihETV9JT0NUTCwgRE1fVEFCTEVfU1RBVFVTX0NNRCwgc3RydWN0IGRtX2lvY3RsKQotCiAjZGVmaW5lIERNX0xJU1RfVkVSU0lPTlMgX0lPV1IoRE1fSU9DVEwsIERNX0xJU1RfVkVSU0lPTlNfQ01ELCBzdHJ1Y3QgZG1faW9jdGwpCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIERNX1RBUkdFVF9NU0cgX0lPV1IoRE1fSU9DVEwsIERNX1RBUkdFVF9NU0dfQ01ELCBzdHJ1Y3QgZG1faW9jdGwpCiAjZGVmaW5lIERNX0RFVl9TRVRfR0VPTUVUUlkgX0lPV1IoRE1fSU9DVEwsIERNX0RFVl9TRVRfR0VPTUVUUllfQ01ELCBzdHJ1Y3QgZG1faW9jdGwpCi0KICNkZWZpbmUgRE1fVkVSU0lPTl9NQUpPUiA0CiAjZGVmaW5lIERNX1ZFUlNJT05fTUlOT1IgMTQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIERNX1ZFUlNJT05fUEFUQ0hMRVZFTCAwCiAjZGVmaW5lIERNX1ZFUlNJT05fRVhUUkEgIi1pb2N0bCAoMjAwOC0wNC0yMykiCi0KLSNkZWZpbmUgRE1fUkVBRE9OTFlfRkxBRyAoMSA8PCAwKSAgCi0jZGVmaW5lIERNX1NVU1BFTkRfRkxBRyAoMSA8PCAxKSAgCi0jZGVmaW5lIERNX1BFUlNJU1RFTlRfREVWX0ZMQUcgKDEgPDwgMykgIAotCi0jZGVmaW5lIERNX1NUQVRVU19UQUJMRV9GTEFHICgxIDw8IDQpICAKLQotI2RlZmluZSBETV9BQ1RJVkVfUFJFU0VOVF9GTEFHICgxIDw8IDUpICAKLSNkZWZpbmUgRE1fSU5BQ1RJVkVfUFJFU0VOVF9GTEFHICgxIDw8IDYpICAKLQotI2RlZmluZSBETV9CVUZGRVJfRlVMTF9GTEFHICgxIDw8IDgpICAKLQotI2RlZmluZSBETV9TS0lQX0JER0VUX0ZMQUcgKDEgPDwgOSkgIAotCi0jZGVmaW5lIERNX1NLSVBfTE9DS0ZTX0ZMQUcgKDEgPDwgMTApICAKLQotI2RlZmluZSBETV9OT0ZMVVNIX0ZMQUcgKDEgPDwgMTEpICAKLQorI2RlZmluZSBETV9SRUFET05MWV9GTEFHICgxIDw8IDApCisjZGVmaW5lIERNX1NVU1BFTkRfRkxBRyAoMSA8PCAxKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgRE1fUEVSU0lTVEVOVF9ERVZfRkxBRyAoMSA8PCAzKQorI2RlZmluZSBETV9TVEFUVVNfVEFCTEVfRkxBRyAoMSA8PCA0KQorI2RlZmluZSBETV9BQ1RJVkVfUFJFU0VOVF9GTEFHICgxIDw8IDUpCisjZGVmaW5lIERNX0lOQUNUSVZFX1BSRVNFTlRfRkxBRyAoMSA8PCA2KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgRE1fQlVGRkVSX0ZVTExfRkxBRyAoMSA8PCA4KQorI2RlZmluZSBETV9TS0lQX0JER0VUX0ZMQUcgKDEgPDwgOSkKKyNkZWZpbmUgRE1fU0tJUF9MT0NLRlNfRkxBRyAoMSA8PCAxMCkKKyNkZWZpbmUgRE1fTk9GTFVTSF9GTEFHICgxIDw8IDExKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2RtYS1tYXBwaW5nLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvZG1hLW1hcHBpbmcuaAppbmRleCA2NDMyMjU5Li42ZTc4MDU4IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvZG1hLW1hcHBpbmcuaAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvZG1hLW1hcHBpbmcuaApAQCAtNyw0MiArNyw0OSBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX0FTTV9MSU5VWF9ETUFfTUFQUElOR19ICiAjZGVmaW5lIF9BU01fTElOVVhfRE1BX01BUFBJTkdfSAotCiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZXJyLmg+Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiB7CiAgRE1BX0JJRElSRUNUSU9OQUwgPSAwLAogIERNQV9UT19ERVZJQ0UgPSAxLAogIERNQV9GUk9NX0RFVklDRSA9IDIsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIERNQV9OT05FID0gMywKIH07Ci0KICNkZWZpbmUgRE1BXzY0QklUX01BU0sgMHhmZmZmZmZmZmZmZmZmZmZmVUxMCiAjZGVmaW5lIERNQV80OEJJVF9NQVNLIDB4MDAwMGZmZmZmZmZmZmZmZlVMTAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRE1BXzQwQklUX01BU0sgMHgwMDAwMDBmZmZmZmZmZmZmVUxMCiAjZGVmaW5lIERNQV8zOUJJVF9NQVNLIDB4MDAwMDAwN2ZmZmZmZmZmZlVMTAogI2RlZmluZSBETUFfMzJCSVRfTUFTSyAweDAwMDAwMDAwZmZmZmZmZmZVTEwKICNkZWZpbmUgRE1BXzMxQklUX01BU0sgMHgwMDAwMDAwMDdmZmZmZmZmVUxMCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBETUFfMzBCSVRfTUFTSyAweDAwMDAwMDAwM2ZmZmZmZmZVTEwKICNkZWZpbmUgRE1BXzI5QklUX01BU0sgMHgwMDAwMDAwMDFmZmZmZmZmVUxMCiAjZGVmaW5lIERNQV8yOEJJVF9NQVNLIDB4MDAwMDAwMDAwZmZmZmZmZlVMTAogI2RlZmluZSBETUFfMjRCSVRfTUFTSyAweDAwMDAwMDAwMDBmZmZmZmZVTEwKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNpbmNsdWRlIDxhc20vZG1hLW1hcHBpbmcuaD4KLQogI2RlZmluZSBkbWFfc3luY19zaW5nbGUgZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUKICNkZWZpbmUgZG1hX3N5bmNfc2cgZG1hX3N5bmNfc2dfZm9yX2NwdQotCiAjZGVmaW5lIERNQV9NRU1PUllfTUFQIDB4MDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIERNQV9NRU1PUllfSU8gMHgwMgogI2RlZmluZSBETUFfTUVNT1JZX0lOQ0xVREVTX0NISUxEUkVOIDB4MDQKICNkZWZpbmUgRE1BX01FTU9SWV9FWENMVVNJVkUgMHgwOAotCiAjaWZuZGVmIEFSQ0hfSEFTX0RNQV9ERUNMQVJFX0NPSEVSRU5UX01FTU9SWQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlbmRpZgogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvZG1hZW5naW5lLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvZG1hZW5naW5lLmgKaW5kZXggNTQ5ZmVhOS4uNzIwMjdlZCAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2RtYWVuZ2luZS5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9kbWFlbmdpbmUuaApAQCAtNyw5ICs3LDE1IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBETUFFTkdJTkVfSAogI2RlZmluZSBETUFFTkdJTkVfSAotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9lZnNfZGlyLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvZWZzX2Rpci5oCmluZGV4IDViZTI3NjIuLjk4YTViYTcgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9lZnNfZGlyLmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2Vmc19kaXIuaApAQCAtNywzOSArNyw0MCBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX19FRlNfRElSX0hfXwogI2RlZmluZSBfX0VGU19ESVJfSF9fCi0KICNkZWZpbmUgRUZTX0RJUkJTSVpFX0JJVFMgRUZTX0JMT0NLU0laRV9CSVRTCiAjZGVmaW5lIEVGU19ESVJCU0laRSAoMSA8PCBFRlNfRElSQlNJWkVfQklUUykKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBlZnNfZGVudHJ5IHsKICBfX2JlMzIgaW5vZGU7CiAgdW5zaWduZWQgY2hhciBuYW1lbGVuOwogIGNoYXIgbmFtZVszXTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwotCiAjZGVmaW5lIEVGU19ERU5UU0laRSAoc2l6ZW9mKHN0cnVjdCBlZnNfZGVudHJ5KSAtIDMgKyAxKQogI2RlZmluZSBFRlNfTUFYTkFNRUxFTiAoKDEgPDwgKHNpemVvZihjaGFyKSAqIDgpKSAtIDEpCi0KICNkZWZpbmUgRUZTX0RJUkJMS19IRUFERVJTSVpFIDQKLSNkZWZpbmUgRUZTX0RJUkJMS19NQUdJQyAweGJlZWYgIAotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBFRlNfRElSQkxLX01BR0lDIDB4YmVlZgogc3RydWN0IGVmc19kaXIgewogIF9fYmUxNiBtYWdpYzsKICB1bnNpZ25lZCBjaGFyIGZpcnN0dXNlZDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgY2hhciBzbG90czsKLQogIHVuc2lnbmVkIGNoYXIgc3BhY2VbRUZTX0RJUkJTSVpFIC0gRUZTX0RJUkJMS19IRUFERVJTSVpFXTsKIH07Ci0KICNkZWZpbmUgRUZTX01BWEVOVFMgICAoKEVGU19ESVJCU0laRSAtIEVGU19ESVJCTEtfSEVBREVSU0laRSkgLyAgIChFRlNfREVOVFNJWkUgKyBzaXplb2YoY2hhcikpKQotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBFRlNfU0xPVEFUKGRpciwgc2xvdCkgRUZTX1JFQUxPRkYoKGRpciktPnNwYWNlW3Nsb3RdKQotCiAjZGVmaW5lIEVGU19SRUFMT0ZGKG9mZnNldCkgKChvZmZzZXQgPDwgMSkpCi0KICNlbmRpZgotCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvZWZzX2ZzX2kuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9lZnNfZnNfaS5oCmluZGV4IDZkODhkMjguLjlkMjgyZTQgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9lZnNfZnNfaS5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9lZnNfZnNfaS5oCkBAIC03LDU3ICs3LDY1IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfX0VGU19GU19JX0hfXwogI2RlZmluZSBfX0VGU19GU19JX0hfXwotCiB0eXBlZGVmIGludDMyX3QgZWZzX2Jsb2NrX3Q7CiB0eXBlZGVmIHVpbnQzMl90IGVmc19pbm9fdDsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRUZTX0RJUkVDVEVYVEVOVFMgMTIKLQogdHlwZWRlZiB1bmlvbiBleHRlbnRfdSB7CiAgdW5zaWduZWQgY2hhciByYXdbOF07CiAgc3RydWN0IGV4dGVudF9zIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgaW50IGV4X21hZ2ljOjg7CiAgdW5zaWduZWQgaW50IGV4X2JuOjI0OwogIHVuc2lnbmVkIGludCBleF9sZW5ndGg6ODsKICB1bnNpZ25lZCBpbnQgZXhfb2Zmc2V0OjI0OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB9IGNvb2tlZDsKIH0gZWZzX2V4dGVudDsKLQogdHlwZWRlZiBzdHJ1Y3QgZWRldnMgewogIF9fYmUxNiBvZGV2OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX2JlMzIgbmRldjsKIH0gZWZzX2RldnM7Ci0KIHN0cnVjdCBlZnNfZGlub2RlIHsKICBfX2JlMTYgZGlfbW9kZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX19iZTE2IGRpX25saW5rOwogIF9fYmUxNiBkaV91aWQ7CiAgX19iZTE2IGRpX2dpZDsKICBfX2JlMzIgZGlfc2l6ZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX19iZTMyIGRpX2F0aW1lOwogIF9fYmUzMiBkaV9tdGltZTsKICBfX2JlMzIgZGlfY3RpbWU7CiAgX19iZTMyIGRpX2dlbjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX19iZTE2IGRpX251bWV4dGVudHM7CiAgdV9jaGFyIGRpX3ZlcnNpb247CiAgdV9jaGFyIGRpX3NwYXJlOwogIHVuaW9uIGRpX2FkZHIgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBlZnNfZXh0ZW50IGRpX2V4dGVudHNbRUZTX0RJUkVDVEVYVEVOVFNdOwogIGVmc19kZXZzIGRpX2RldjsKICB9IGRpX3U7CiB9OwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IGVmc19pbm9kZV9pbmZvIHsKICBpbnQgbnVtZXh0ZW50czsKICBpbnQgbGFzdGV4dGVudDsKLQogIGVmc19leHRlbnQgZXh0ZW50c1tFRlNfRElSRUNURVhURU5UU107CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCBpbm9kZSB2ZnNfaW5vZGU7CiB9OwotCiAjZW5kaWYKLQpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2Vmc19mc19zYi5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2Vmc19mc19zYi5oCmluZGV4IGY3OTYwYzAuLjA5NGRiNzYgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9lZnNfZnNfc2IuaAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvZWZzX2ZzX3NiLmgKQEAgLTcsNTUgKzcsNjQgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9fRUZTX0ZTX1NCX0hfXwogI2RlZmluZSBfX0VGU19GU19TQl9IX18KLQogI2RlZmluZSBFRlNfU1VQRVJfTUFHSUMgMHg0MTRBNTMKLQogI2RlZmluZSBFRlNfTUFHSUMgMHgwNzI5NTkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEVGU19ORVdNQUdJQyAweDA3Mjk1YQotCiAjZGVmaW5lIElTX0VGU19NQUdJQyh4KSAoKHggPT0gRUZTX01BR0lDKSB8fCAoeCA9PSBFRlNfTkVXTUFHSUMpKQotCiAjZGVmaW5lIEVGU19TVVBFUiAxCiAjZGVmaW5lIEVGU19ST09USU5PREUgMgotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IGVmc19zdXBlciB7CiAgX19iZTMyIGZzX3NpemU7CiAgX19iZTMyIGZzX2ZpcnN0Y2c7CiAgX19iZTMyIGZzX2NnZnNpemU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fYmUxNiBmc19jZ2lzaXplOwogIF9fYmUxNiBmc19zZWN0b3JzOwogIF9fYmUxNiBmc19oZWFkczsKICBfX2JlMTYgZnNfbmNnOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX2JlMTYgZnNfZGlydHk7CiAgX19iZTMyIGZzX3RpbWU7CiAgX19iZTMyIGZzX21hZ2ljOwogIGNoYXIgZnNfZm5hbWVbNl07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGNoYXIgZnNfZnBhY2tbNl07CiAgX19iZTMyIGZzX2Jtc2l6ZTsKICBfX2JlMzIgZnNfdGZyZWU7CiAgX19iZTMyIGZzX3Rpbm9kZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX19iZTMyIGZzX2JtYmxvY2s7CiAgX19iZTMyIGZzX3JlcGxzYjsKICBfX2JlMzIgZnNfbGFzdGlhbGxvYzsKICBjaGFyIGZzX3NwYXJlWzIwXTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX19iZTMyIGZzX2NoZWNrc3VtOwogfTsKLQogc3RydWN0IGVmc19zYl9pbmZvIHsKICBfX3UzMiBmc19tYWdpYzsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgZnNfc3RhcnQ7CiAgX191MzIgZmlyc3RfYmxvY2s7CiAgX191MzIgdG90YWxfYmxvY2tzOwogIF9fdTMyIGdyb3VwX3NpemU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGRhdGFfZnJlZTsKICBfX3UzMiBpbm9kZV9mcmVlOwogIF9fdTE2IGlub2RlX2Jsb2NrczsKICBfX3UxNiB0b3RhbF9ncm91cHM7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKLQogI2VuZGlmCi0KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9lbGV2YXRvci5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2VsZXZhdG9yLmgKaW5kZXggMmU3OWNlOS4uMzhjNjAyMyAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2VsZXZhdG9yLmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2VsZXZhdG9yLmgKQEAgLTcsMTAzICs3LDEwNSBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX0xJTlVYX0VMRVZBVE9SX0gKICNkZWZpbmUgX0xJTlVYX0VMRVZBVE9SX0gKLQogdHlwZWRlZiBpbnQgKGVsZXZhdG9yX21lcmdlX2ZuKSAocmVxdWVzdF9xdWV1ZV90ICosIHN0cnVjdCByZXF1ZXN0ICoqLAogIHN0cnVjdCBiaW8gKik7Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB0eXBlZGVmIHZvaWQgKGVsZXZhdG9yX21lcmdlX3JlcV9mbikgKHJlcXVlc3RfcXVldWVfdCAqLCBzdHJ1Y3QgcmVxdWVzdCAqLCBzdHJ1Y3QgcmVxdWVzdCAqKTsKLQogdHlwZWRlZiB2b2lkIChlbGV2YXRvcl9tZXJnZWRfZm4pIChyZXF1ZXN0X3F1ZXVlX3QgKiwgc3RydWN0IHJlcXVlc3QgKik7Ci0KIHR5cGVkZWYgaW50IChlbGV2YXRvcl9kaXNwYXRjaF9mbikgKHJlcXVlc3RfcXVldWVfdCAqLCBpbnQpOwotCiB0eXBlZGVmIHZvaWQgKGVsZXZhdG9yX2FkZF9yZXFfZm4pIChyZXF1ZXN0X3F1ZXVlX3QgKiwgc3RydWN0IHJlcXVlc3QgKik7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogdHlwZWRlZiBpbnQgKGVsZXZhdG9yX3F1ZXVlX2VtcHR5X2ZuKSAocmVxdWVzdF9xdWV1ZV90ICopOwogdHlwZWRlZiBzdHJ1Y3QgcmVxdWVzdCAqKGVsZXZhdG9yX3JlcXVlc3RfbGlzdF9mbikgKHJlcXVlc3RfcXVldWVfdCAqLCBzdHJ1Y3QgcmVxdWVzdCAqKTsKIHR5cGVkZWYgdm9pZCAoZWxldmF0b3JfY29tcGxldGVkX3JlcV9mbikgKHJlcXVlc3RfcXVldWVfdCAqLCBzdHJ1Y3QgcmVxdWVzdCAqKTsKIHR5cGVkZWYgaW50IChlbGV2YXRvcl9tYXlfcXVldWVfZm4pIChyZXF1ZXN0X3F1ZXVlX3QgKiwgaW50LCBzdHJ1Y3QgYmlvICopOwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogdHlwZWRlZiBpbnQgKGVsZXZhdG9yX3NldF9yZXFfZm4pIChyZXF1ZXN0X3F1ZXVlX3QgKiwgc3RydWN0IHJlcXVlc3QgKiwgc3RydWN0IGJpbyAqLCBnZnBfdCk7CiB0eXBlZGVmIHZvaWQgKGVsZXZhdG9yX3B1dF9yZXFfZm4pIChyZXF1ZXN0X3F1ZXVlX3QgKiwgc3RydWN0IHJlcXVlc3QgKik7CiB0eXBlZGVmIHZvaWQgKGVsZXZhdG9yX2FjdGl2YXRlX3JlcV9mbikgKHJlcXVlc3RfcXVldWVfdCAqLCBzdHJ1Y3QgcmVxdWVzdCAqKTsKIHR5cGVkZWYgdm9pZCAoZWxldmF0b3JfZGVhY3RpdmF0ZV9yZXFfZm4pIChyZXF1ZXN0X3F1ZXVlX3QgKiwgc3RydWN0IHJlcXVlc3QgKik7Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB0eXBlZGVmIHZvaWQgKihlbGV2YXRvcl9pbml0X2ZuKSAocmVxdWVzdF9xdWV1ZV90ICosIGVsZXZhdG9yX3QgKik7CiB0eXBlZGVmIHZvaWQgKGVsZXZhdG9yX2V4aXRfZm4pIChlbGV2YXRvcl90ICopOwotCiBzdHJ1Y3QgZWxldmF0b3Jfb3BzCiB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGVsZXZhdG9yX21lcmdlX2ZuICplbGV2YXRvcl9tZXJnZV9mbjsKICBlbGV2YXRvcl9tZXJnZWRfZm4gKmVsZXZhdG9yX21lcmdlZF9mbjsKICBlbGV2YXRvcl9tZXJnZV9yZXFfZm4gKmVsZXZhdG9yX21lcmdlX3JlcV9mbjsKLQogIGVsZXZhdG9yX2Rpc3BhdGNoX2ZuICplbGV2YXRvcl9kaXNwYXRjaF9mbjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgZWxldmF0b3JfYWRkX3JlcV9mbiAqZWxldmF0b3JfYWRkX3JlcV9mbjsKICBlbGV2YXRvcl9hY3RpdmF0ZV9yZXFfZm4gKmVsZXZhdG9yX2FjdGl2YXRlX3JlcV9mbjsKICBlbGV2YXRvcl9kZWFjdGl2YXRlX3JlcV9mbiAqZWxldmF0b3JfZGVhY3RpdmF0ZV9yZXFfZm47Ci0KICBlbGV2YXRvcl9xdWV1ZV9lbXB0eV9mbiAqZWxldmF0b3JfcXVldWVfZW1wdHlfZm47CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGVsZXZhdG9yX2NvbXBsZXRlZF9yZXFfZm4gKmVsZXZhdG9yX2NvbXBsZXRlZF9yZXFfZm47Ci0KICBlbGV2YXRvcl9yZXF1ZXN0X2xpc3RfZm4gKmVsZXZhdG9yX2Zvcm1lcl9yZXFfZm47CiAgZWxldmF0b3JfcmVxdWVzdF9saXN0X2ZuICplbGV2YXRvcl9sYXR0ZXJfcmVxX2ZuOwotCiAgZWxldmF0b3Jfc2V0X3JlcV9mbiAqZWxldmF0b3Jfc2V0X3JlcV9mbjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgZWxldmF0b3JfcHV0X3JlcV9mbiAqZWxldmF0b3JfcHV0X3JlcV9mbjsKLQogIGVsZXZhdG9yX21heV9xdWV1ZV9mbiAqZWxldmF0b3JfbWF5X3F1ZXVlX2ZuOwotCiAgZWxldmF0b3JfaW5pdF9mbiAqZWxldmF0b3JfaW5pdF9mbjsKICBlbGV2YXRvcl9leGl0X2ZuICplbGV2YXRvcl9leGl0X2ZuOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB2b2lkICgqdHJpbSkoc3RydWN0IGlvX2NvbnRleHQgKik7CiB9OwotCiAjZGVmaW5lIEVMVl9OQU1FX01BWCAoMTYpCi0KIHN0cnVjdCBlbHZfZnNfZW50cnkgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgYXR0cmlidXRlIGF0dHI7CiAgc3NpemVfdCAoKnNob3cpKGVsZXZhdG9yX3QgKiwgY2hhciAqKTsKICBzc2l6ZV90ICgqc3RvcmUpKGVsZXZhdG9yX3QgKiwgY29uc3QgY2hhciAqLCBzaXplX3QpOwogfTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBlbGV2YXRvcl90eXBlCiB7CiAgc3RydWN0IGxpc3RfaGVhZCBsaXN0OwogIHN0cnVjdCBlbGV2YXRvcl9vcHMgb3BzOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgZWxldmF0b3JfdHlwZSAqZWxldmF0b3JfdHlwZTsKICBzdHJ1Y3QgZWx2X2ZzX2VudHJ5ICplbGV2YXRvcl9hdHRyczsKICBjaGFyIGVsZXZhdG9yX25hbWVbRUxWX05BTUVfTUFYXTsKICBzdHJ1Y3QgbW9kdWxlICplbGV2YXRvcl9vd25lcjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwotCiBzdHJ1Y3QgZWxldmF0b3JfcXVldWUKIHsKICBzdHJ1Y3QgZWxldmF0b3Jfb3BzICpvcHM7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHZvaWQgKmVsZXZhdG9yX2RhdGE7CiAgc3RydWN0IGtvYmplY3Qga29iajsKICBzdHJ1Y3QgZWxldmF0b3JfdHlwZSAqZWxldmF0b3JfdHlwZTsKICBzdHJ1Y3QgbXV0ZXggc3lzZnNfbG9jazsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwotCiAjZGVmaW5lIEVMRVZBVE9SX05PX01FUkdFIDAKICNkZWZpbmUgRUxFVkFUT1JfRlJPTlRfTUVSR0UgMQogI2RlZmluZSBFTEVWQVRPUl9CQUNLX01FUkdFIDIKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRUxFVkFUT1JfSU5TRVJUX0ZST05UIDEKICNkZWZpbmUgRUxFVkFUT1JfSU5TRVJUX0JBQ0sgMgogI2RlZmluZSBFTEVWQVRPUl9JTlNFUlRfU09SVCAzCiAjZGVmaW5lIEVMRVZBVE9SX0lOU0VSVF9SRVFVRVVFIDQKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIGVudW0gewogIEVMVl9NUVVFVUVfTUFZLAogIEVMVl9NUVVFVUVfTk8sCiAgRUxWX01RVUVVRV9NVVNULAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07Ci0KICNkZWZpbmUgcnFfZW5kX3NlY3RvcihycSkgKChycSktPnNlY3RvciArIChycSktPm5yX3NlY3RvcnMpCi0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2VsZi1lbS5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2VsZi1lbS5oCmluZGV4IGUxNTFmZGYuLmYxZTRlNDcgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9lbGYtZW0uaAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvZWxmLWVtLmgKQEAgLTcsNDUgKzcsNTIgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9MSU5VWF9FTEZfRU1fSAogI2RlZmluZSBfTElOVVhfRUxGX0VNX0gKLQogI2RlZmluZSBFTV9OT05FIDAKICNkZWZpbmUgRU1fTTMyIDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEVNX1NQQVJDIDIKICNkZWZpbmUgRU1fMzg2IDMKICNkZWZpbmUgRU1fNjhLIDQKICNkZWZpbmUgRU1fODhLIDUKLSNkZWZpbmUgRU1fNDg2IDYgIAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgRU1fNDg2IDYKICNkZWZpbmUgRU1fODYwIDcKLSNkZWZpbmUgRU1fTUlQUyA4ICAKLQotI2RlZmluZSBFTV9NSVBTX1JTM19MRSAxMCAgCi0jZGVmaW5lIEVNX01JUFNfUlM0X0JFIDEwICAKLQotI2RlZmluZSBFTV9QQVJJU0MgMTUgIAotI2RlZmluZSBFTV9TUEFSQzMyUExVUyAxOCAgCi0jZGVmaW5lIEVNX1BQQyAyMCAgCi0jZGVmaW5lIEVNX1BQQzY0IDIxICAKLSNkZWZpbmUgRU1fU0ggNDIgIAotI2RlZmluZSBFTV9TUEFSQ1Y5IDQzICAKLSNkZWZpbmUgRU1fSUFfNjQgNTAgIAotI2RlZmluZSBFTV9YODZfNjQgNjIgIAotI2RlZmluZSBFTV9TMzkwIDIyICAKLSNkZWZpbmUgRU1fQ1JJUyA3NiAgCi0jZGVmaW5lIEVNX1Y4NTAgODcgIAotI2RlZmluZSBFTV9NMzJSIDg4ICAKLSNkZWZpbmUgRU1fSDhfMzAwIDQ2ICAKLSNkZWZpbmUgRU1fRlJWIDB4NTQ0MSAgCi0KKyNkZWZpbmUgRU1fTUlQUyA4CisjZGVmaW5lIEVNX01JUFNfUlMzX0xFIDEwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBFTV9NSVBTX1JTNF9CRSAxMAorI2RlZmluZSBFTV9QQVJJU0MgMTUKKyNkZWZpbmUgRU1fU1BBUkMzMlBMVVMgMTgKKyNkZWZpbmUgRU1fUFBDIDIwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBFTV9QUEM2NCAyMQorI2RlZmluZSBFTV9TSCA0MgorI2RlZmluZSBFTV9TUEFSQ1Y5IDQzCisjZGVmaW5lIEVNX0lBXzY0IDUwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBFTV9YODZfNjQgNjIKKyNkZWZpbmUgRU1fUzM5MCAyMgorI2RlZmluZSBFTV9DUklTIDc2CisjZGVmaW5lIEVNX1Y4NTAgODcKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEVNX00zMlIgODgKKyNkZWZpbmUgRU1fSDhfMzAwIDQ2CisjZGVmaW5lIEVNX0ZSViAweDU0NDEKICNkZWZpbmUgRU1fQUxQSEEgMHg5MDI2Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEVNX0NZR05VU19WODUwIDB4OTA4MAotCiAjZGVmaW5lIEVNX0NZR05VU19NMzJSIDB4OTA0MQotCiAjZGVmaW5lIEVNX1MzOTBfT0xEIDB4QTM5MAotCiAjZW5kaWYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvZWxmLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvZWxmLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYxNmI0MzkuLjAwMDAwMDAKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2VsZi5oCisrKyAvZGV2L251bGwKQEAgLTEsMzYxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoqKgotICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgotICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KLSAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAotICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCi0gKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KLSAqKioKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSNpZm5kZWYgX0xJTlVYX0VMRl9ICi0jZGVmaW5lIF9MSU5VWF9FTEZfSAotCi0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9hdXh2ZWMuaD4KLSNpbmNsdWRlIDxsaW51eC9lbGYtZW0uaD4KLSNpbmNsdWRlIDxhc20vZWxmLmg+Ci0KLSNpZm5kZWYgZWxmX3JlYWRfaW1wbGllc19leGVjCi0KLSNkZWZpbmUgZWxmX3JlYWRfaW1wbGllc19leGVjKGV4LCBoYXZlX3B0X2dudV9zdGFjaykgMAotI2VuZGlmCi0KLXR5cGVkZWYgX191MzIgRWxmMzJfQWRkcjsKLXR5cGVkZWYgX191MTYgRWxmMzJfSGFsZjsKLXR5cGVkZWYgX191MzIgRWxmMzJfT2ZmOwotdHlwZWRlZiBfX3MzMiBFbGYzMl9Td29yZDsKLXR5cGVkZWYgX191MzIgRWxmMzJfV29yZDsKLQotdHlwZWRlZiBfX3U2NCBFbGY2NF9BZGRyOwotdHlwZWRlZiBfX3UxNiBFbGY2NF9IYWxmOwotdHlwZWRlZiBfX3MxNiBFbGY2NF9TSGFsZjsKLXR5cGVkZWYgX191NjQgRWxmNjRfT2ZmOwotdHlwZWRlZiBfX3MzMiBFbGY2NF9Td29yZDsKLXR5cGVkZWYgX191MzIgRWxmNjRfV29yZDsKLXR5cGVkZWYgX191NjQgRWxmNjRfWHdvcmQ7Ci10eXBlZGVmIF9fczY0IEVsZjY0X1N4d29yZDsKLQotI2RlZmluZSBQVF9OVUxMIDAKLSNkZWZpbmUgUFRfTE9BRCAxCi0jZGVmaW5lIFBUX0RZTkFNSUMgMgotI2RlZmluZSBQVF9JTlRFUlAgMwotI2RlZmluZSBQVF9OT1RFIDQKLSNkZWZpbmUgUFRfU0hMSUIgNQotI2RlZmluZSBQVF9QSERSIDYKLSNkZWZpbmUgUFRfVExTIDcgIAotI2RlZmluZSBQVF9MT09TIDB4NjAwMDAwMDAgIAotI2RlZmluZSBQVF9ISU9TIDB4NmZmZmZmZmYgIAotI2RlZmluZSBQVF9MT1BST0MgMHg3MDAwMDAwMAotI2RlZmluZSBQVF9ISVBST0MgMHg3ZmZmZmZmZgotI2RlZmluZSBQVF9HTlVfRUhfRlJBTUUgMHg2NDc0ZTU1MAotCi0jZGVmaW5lIFBUX0dOVV9TVEFDSyAoUFRfTE9PUyArIDB4NDc0ZTU1MSkKLQotI2RlZmluZSBFVF9OT05FIDAKLSNkZWZpbmUgRVRfUkVMIDEKLSNkZWZpbmUgRVRfRVhFQyAyCi0jZGVmaW5lIEVUX0RZTiAzCi0jZGVmaW5lIEVUX0NPUkUgNAotI2RlZmluZSBFVF9MT1BST0MgMHhmZjAwCi0jZGVmaW5lIEVUX0hJUFJPQyAweGZmZmYKLQotI2RlZmluZSBEVF9OVUxMIDAKLSNkZWZpbmUgRFRfTkVFREVEIDEKLSNkZWZpbmUgRFRfUExUUkVMU1ogMgotI2RlZmluZSBEVF9QTFRHT1QgMwotI2RlZmluZSBEVF9IQVNIIDQKLSNkZWZpbmUgRFRfU1RSVEFCIDUKLSNkZWZpbmUgRFRfU1lNVEFCIDYKLSNkZWZpbmUgRFRfUkVMQSA3Ci0jZGVmaW5lIERUX1JFTEFTWiA4Ci0jZGVmaW5lIERUX1JFTEFFTlQgOQotI2RlZmluZSBEVF9TVFJTWiAxMAotI2RlZmluZSBEVF9TWU1FTlQgMTEKLSNkZWZpbmUgRFRfSU5JVCAxMgotI2RlZmluZSBEVF9GSU5JIDEzCi0jZGVmaW5lIERUX1NPTkFNRSAxNAotI2RlZmluZSBEVF9SUEFUSCAxNQotI2RlZmluZSBEVF9TWU1CT0xJQyAxNgotI2RlZmluZSBEVF9SRUwgMTcKLSNkZWZpbmUgRFRfUkVMU1ogMTgKLSNkZWZpbmUgRFRfUkVMRU5UIDE5Ci0jZGVmaW5lIERUX1BMVFJFTCAyMAotI2RlZmluZSBEVF9ERUJVRyAyMQotI2RlZmluZSBEVF9URVhUUkVMIDIyCi0jZGVmaW5lIERUX0pNUFJFTCAyMwotI2RlZmluZSBEVF9MT1BST0MgMHg3MDAwMDAwMAotI2RlZmluZSBEVF9ISVBST0MgMHg3ZmZmZmZmZgotCi0jZGVmaW5lIFNUQl9MT0NBTCAwCi0jZGVmaW5lIFNUQl9HTE9CQUwgMQotI2RlZmluZSBTVEJfV0VBSyAyCi0KLSNkZWZpbmUgU1RUX05PVFlQRSAwCi0jZGVmaW5lIFNUVF9PQkpFQ1QgMQotI2RlZmluZSBTVFRfRlVOQyAyCi0jZGVmaW5lIFNUVF9TRUNUSU9OIDMKLSNkZWZpbmUgU1RUX0ZJTEUgNAotI2RlZmluZSBTVFRfQ09NTU9OIDUKLSNkZWZpbmUgU1RUX1RMUyA2Ci0KLSNkZWZpbmUgRUxGX1NUX0JJTkQoeCkgKCh4KSA+PiA0KQotI2RlZmluZSBFTEZfU1RfVFlQRSh4KSAoKCh1bnNpZ25lZCBpbnQpIHgpICYgMHhmKQotI2RlZmluZSBFTEYzMl9TVF9CSU5EKHgpIEVMRl9TVF9CSU5EKHgpCi0jZGVmaW5lIEVMRjMyX1NUX1RZUEUoeCkgRUxGX1NUX1RZUEUoeCkKLSNkZWZpbmUgRUxGNjRfU1RfQklORCh4KSBFTEZfU1RfQklORCh4KQotI2RlZmluZSBFTEY2NF9TVF9UWVBFKHgpIEVMRl9TVF9UWVBFKHgpCi0KLXR5cGVkZWYgc3RydWN0IGR5bmFtaWN7Ci0gRWxmMzJfU3dvcmQgZF90YWc7Ci0gdW5pb257Ci0gRWxmMzJfU3dvcmQgZF92YWw7Ci0gRWxmMzJfQWRkciBkX3B0cjsKLSB9IGRfdW47Ci19IEVsZjMyX0R5bjsKLQotdHlwZWRlZiBzdHJ1Y3QgewotIEVsZjY0X1N4d29yZCBkX3RhZzsKLSB1bmlvbiB7Ci0gRWxmNjRfWHdvcmQgZF92YWw7Ci0gRWxmNjRfQWRkciBkX3B0cjsKLSB9IGRfdW47Ci19IEVsZjY0X0R5bjsKLQotI2RlZmluZSBFTEYzMl9SX1NZTSh4KSAoKHgpID4+IDgpCi0jZGVmaW5lIEVMRjMyX1JfVFlQRSh4KSAoKHgpICYgMHhmZikKLQotI2RlZmluZSBFTEY2NF9SX1NZTShpKSAoKGkpID4+IDMyKQotI2RlZmluZSBFTEY2NF9SX1RZUEUoaSkgKChpKSAmIDB4ZmZmZmZmZmYpCi0KLXR5cGVkZWYgc3RydWN0IGVsZjMyX3JlbCB7Ci0gRWxmMzJfQWRkciByX29mZnNldDsKLSBFbGYzMl9Xb3JkIHJfaW5mbzsKLX0gRWxmMzJfUmVsOwotCi10eXBlZGVmIHN0cnVjdCBlbGY2NF9yZWwgewotIEVsZjY0X0FkZHIgcl9vZmZzZXQ7Ci0gRWxmNjRfWHdvcmQgcl9pbmZvOwotfSBFbGY2NF9SZWw7Ci0KLXR5cGVkZWYgc3RydWN0IGVsZjMyX3JlbGF7Ci0gRWxmMzJfQWRkciByX29mZnNldDsKLSBFbGYzMl9Xb3JkIHJfaW5mbzsKLSBFbGYzMl9Td29yZCByX2FkZGVuZDsKLX0gRWxmMzJfUmVsYTsKLQotdHlwZWRlZiBzdHJ1Y3QgZWxmNjRfcmVsYSB7Ci0gRWxmNjRfQWRkciByX29mZnNldDsKLSBFbGY2NF9Yd29yZCByX2luZm87Ci0gRWxmNjRfU3h3b3JkIHJfYWRkZW5kOwotfSBFbGY2NF9SZWxhOwotCi10eXBlZGVmIHN0cnVjdCBlbGYzMl9zeW17Ci0gRWxmMzJfV29yZCBzdF9uYW1lOwotIEVsZjMyX0FkZHIgc3RfdmFsdWU7Ci0gRWxmMzJfV29yZCBzdF9zaXplOwotIHVuc2lnbmVkIGNoYXIgc3RfaW5mbzsKLSB1bnNpZ25lZCBjaGFyIHN0X290aGVyOwotIEVsZjMyX0hhbGYgc3Rfc2huZHg7Ci19IEVsZjMyX1N5bTsKLQotdHlwZWRlZiBzdHJ1Y3QgZWxmNjRfc3ltIHsKLSBFbGY2NF9Xb3JkIHN0X25hbWU7Ci0gdW5zaWduZWQgY2hhciBzdF9pbmZvOwotIHVuc2lnbmVkIGNoYXIgc3Rfb3RoZXI7Ci0gRWxmNjRfSGFsZiBzdF9zaG5keDsKLSBFbGY2NF9BZGRyIHN0X3ZhbHVlOwotIEVsZjY0X1h3b3JkIHN0X3NpemU7Ci19IEVsZjY0X1N5bTsKLQotI2RlZmluZSBFSV9OSURFTlQgMTYKLQotdHlwZWRlZiBzdHJ1Y3QgZWxmMzJfaGRyewotIHVuc2lnbmVkIGNoYXIgZV9pZGVudFtFSV9OSURFTlRdOwotIEVsZjMyX0hhbGYgZV90eXBlOwotIEVsZjMyX0hhbGYgZV9tYWNoaW5lOwotIEVsZjMyX1dvcmQgZV92ZXJzaW9uOwotIEVsZjMyX0FkZHIgZV9lbnRyeTsKLSBFbGYzMl9PZmYgZV9waG9mZjsKLSBFbGYzMl9PZmYgZV9zaG9mZjsKLSBFbGYzMl9Xb3JkIGVfZmxhZ3M7Ci0gRWxmMzJfSGFsZiBlX2Voc2l6ZTsKLSBFbGYzMl9IYWxmIGVfcGhlbnRzaXplOwotIEVsZjMyX0hhbGYgZV9waG51bTsKLSBFbGYzMl9IYWxmIGVfc2hlbnRzaXplOwotIEVsZjMyX0hhbGYgZV9zaG51bTsKLSBFbGYzMl9IYWxmIGVfc2hzdHJuZHg7Ci19IEVsZjMyX0VoZHI7Ci0KLXR5cGVkZWYgc3RydWN0IGVsZjY0X2hkciB7Ci0gdW5zaWduZWQgY2hhciBlX2lkZW50WzE2XTsKLSBFbGY2NF9IYWxmIGVfdHlwZTsKLSBFbGY2NF9IYWxmIGVfbWFjaGluZTsKLSBFbGY2NF9Xb3JkIGVfdmVyc2lvbjsKLSBFbGY2NF9BZGRyIGVfZW50cnk7Ci0gRWxmNjRfT2ZmIGVfcGhvZmY7Ci0gRWxmNjRfT2ZmIGVfc2hvZmY7Ci0gRWxmNjRfV29yZCBlX2ZsYWdzOwotIEVsZjY0X0hhbGYgZV9laHNpemU7Ci0gRWxmNjRfSGFsZiBlX3BoZW50c2l6ZTsKLSBFbGY2NF9IYWxmIGVfcGhudW07Ci0gRWxmNjRfSGFsZiBlX3NoZW50c2l6ZTsKLSBFbGY2NF9IYWxmIGVfc2hudW07Ci0gRWxmNjRfSGFsZiBlX3Noc3RybmR4OwotfSBFbGY2NF9FaGRyOwotCi0jZGVmaW5lIFBGX1IgMHg0Ci0jZGVmaW5lIFBGX1cgMHgyCi0jZGVmaW5lIFBGX1ggMHgxCi0KLXR5cGVkZWYgc3RydWN0IGVsZjMyX3BoZHJ7Ci0gRWxmMzJfV29yZCBwX3R5cGU7Ci0gRWxmMzJfT2ZmIHBfb2Zmc2V0OwotIEVsZjMyX0FkZHIgcF92YWRkcjsKLSBFbGYzMl9BZGRyIHBfcGFkZHI7Ci0gRWxmMzJfV29yZCBwX2ZpbGVzejsKLSBFbGYzMl9Xb3JkIHBfbWVtc3o7Ci0gRWxmMzJfV29yZCBwX2ZsYWdzOwotIEVsZjMyX1dvcmQgcF9hbGlnbjsKLX0gRWxmMzJfUGhkcjsKLQotdHlwZWRlZiBzdHJ1Y3QgZWxmNjRfcGhkciB7Ci0gRWxmNjRfV29yZCBwX3R5cGU7Ci0gRWxmNjRfV29yZCBwX2ZsYWdzOwotIEVsZjY0X09mZiBwX29mZnNldDsKLSBFbGY2NF9BZGRyIHBfdmFkZHI7Ci0gRWxmNjRfQWRkciBwX3BhZGRyOwotIEVsZjY0X1h3b3JkIHBfZmlsZXN6OwotIEVsZjY0X1h3b3JkIHBfbWVtc3o7Ci0gRWxmNjRfWHdvcmQgcF9hbGlnbjsKLX0gRWxmNjRfUGhkcjsKLQotI2RlZmluZSBTSFRfTlVMTCAwCi0jZGVmaW5lIFNIVF9QUk9HQklUUyAxCi0jZGVmaW5lIFNIVF9TWU1UQUIgMgotI2RlZmluZSBTSFRfU1RSVEFCIDMKLSNkZWZpbmUgU0hUX1JFTEEgNAotI2RlZmluZSBTSFRfSEFTSCA1Ci0jZGVmaW5lIFNIVF9EWU5BTUlDIDYKLSNkZWZpbmUgU0hUX05PVEUgNwotI2RlZmluZSBTSFRfTk9CSVRTIDgKLSNkZWZpbmUgU0hUX1JFTCA5Ci0jZGVmaW5lIFNIVF9TSExJQiAxMAotI2RlZmluZSBTSFRfRFlOU1lNIDExCi0jZGVmaW5lIFNIVF9OVU0gMTIKLSNkZWZpbmUgU0hUX0xPUFJPQyAweDcwMDAwMDAwCi0jZGVmaW5lIFNIVF9ISVBST0MgMHg3ZmZmZmZmZgotI2RlZmluZSBTSFRfTE9VU0VSIDB4ODAwMDAwMDAKLSNkZWZpbmUgU0hUX0hJVVNFUiAweGZmZmZmZmZmCi0KLSNkZWZpbmUgU0hGX1dSSVRFIDB4MQotI2RlZmluZSBTSEZfQUxMT0MgMHgyCi0jZGVmaW5lIFNIRl9FWEVDSU5TVFIgMHg0Ci0jZGVmaW5lIFNIRl9NQVNLUFJPQyAweGYwMDAwMDAwCi0KLSNkZWZpbmUgU0hOX1VOREVGIDAKLSNkZWZpbmUgU0hOX0xPUkVTRVJWRSAweGZmMDAKLSNkZWZpbmUgU0hOX0xPUFJPQyAweGZmMDAKLSNkZWZpbmUgU0hOX0hJUFJPQyAweGZmMWYKLSNkZWZpbmUgU0hOX0FCUyAweGZmZjEKLSNkZWZpbmUgU0hOX0NPTU1PTiAweGZmZjIKLSNkZWZpbmUgU0hOX0hJUkVTRVJWRSAweGZmZmYKLQotdHlwZWRlZiBzdHJ1Y3QgewotIEVsZjMyX1dvcmQgc2hfbmFtZTsKLSBFbGYzMl9Xb3JkIHNoX3R5cGU7Ci0gRWxmMzJfV29yZCBzaF9mbGFnczsKLSBFbGYzMl9BZGRyIHNoX2FkZHI7Ci0gRWxmMzJfT2ZmIHNoX29mZnNldDsKLSBFbGYzMl9Xb3JkIHNoX3NpemU7Ci0gRWxmMzJfV29yZCBzaF9saW5rOwotIEVsZjMyX1dvcmQgc2hfaW5mbzsKLSBFbGYzMl9Xb3JkIHNoX2FkZHJhbGlnbjsKLSBFbGYzMl9Xb3JkIHNoX2VudHNpemU7Ci19IEVsZjMyX1NoZHI7Ci0KLXR5cGVkZWYgc3RydWN0IGVsZjY0X3NoZHIgewotIEVsZjY0X1dvcmQgc2hfbmFtZTsKLSBFbGY2NF9Xb3JkIHNoX3R5cGU7Ci0gRWxmNjRfWHdvcmQgc2hfZmxhZ3M7Ci0gRWxmNjRfQWRkciBzaF9hZGRyOwotIEVsZjY0X09mZiBzaF9vZmZzZXQ7Ci0gRWxmNjRfWHdvcmQgc2hfc2l6ZTsKLSBFbGY2NF9Xb3JkIHNoX2xpbms7Ci0gRWxmNjRfV29yZCBzaF9pbmZvOwotIEVsZjY0X1h3b3JkIHNoX2FkZHJhbGlnbjsKLSBFbGY2NF9Yd29yZCBzaF9lbnRzaXplOwotfSBFbGY2NF9TaGRyOwotCi0jZGVmaW5lIEVJX01BRzAgMCAgCi0jZGVmaW5lIEVJX01BRzEgMQotI2RlZmluZSBFSV9NQUcyIDIKLSNkZWZpbmUgRUlfTUFHMyAzCi0jZGVmaW5lIEVJX0NMQVNTIDQKLSNkZWZpbmUgRUlfREFUQSA1Ci0jZGVmaW5lIEVJX1ZFUlNJT04gNgotI2RlZmluZSBFSV9PU0FCSSA3Ci0jZGVmaW5lIEVJX1BBRCA4Ci0KLSNkZWZpbmUgRUxGTUFHMCAweDdmICAKLSNkZWZpbmUgRUxGTUFHMSAnRScKLSNkZWZpbmUgRUxGTUFHMiAnTCcKLSNkZWZpbmUgRUxGTUFHMyAnRicKLSNkZWZpbmUgRUxGTUFHICJcMTc3RUxGIgotI2RlZmluZSBTRUxGTUFHIDQKLQotI2RlZmluZSBFTEZDTEFTU05PTkUgMCAgCi0jZGVmaW5lIEVMRkNMQVNTMzIgMQotI2RlZmluZSBFTEZDTEFTUzY0IDIKLSNkZWZpbmUgRUxGQ0xBU1NOVU0gMwotCi0jZGVmaW5lIEVMRkRBVEFOT05FIDAgIAotI2RlZmluZSBFTEZEQVRBMkxTQiAxCi0jZGVmaW5lIEVMRkRBVEEyTVNCIDIKLQotI2RlZmluZSBFVl9OT05FIDAgIAotI2RlZmluZSBFVl9DVVJSRU5UIDEKLSNkZWZpbmUgRVZfTlVNIDIKLQotI2RlZmluZSBFTEZPU0FCSV9OT05FIDAKLSNkZWZpbmUgRUxGT1NBQklfTElOVVggMwotCi0jaWZuZGVmIEVMRl9PU0FCSQotI2RlZmluZSBFTEZfT1NBQkkgRUxGT1NBQklfTk9ORQotI2VuZGlmCi0KLSNkZWZpbmUgTlRfUFJTVEFUVVMgMQotI2RlZmluZSBOVF9QUkZQUkVHIDIKLSNkZWZpbmUgTlRfUFJQU0lORk8gMwotI2RlZmluZSBOVF9UQVNLU1RSVUNUIDQKLSNkZWZpbmUgTlRfQVVYViA2Ci0jZGVmaW5lIE5UX1BSWEZQUkVHIDB4NDZlNjJiN2YgIAotCi10eXBlZGVmIHN0cnVjdCBlbGYzMl9ub3RlIHsKLSBFbGYzMl9Xb3JkIG5fbmFtZXN6OwotIEVsZjMyX1dvcmQgbl9kZXNjc3o7Ci0gRWxmMzJfV29yZCBuX3R5cGU7Ci19IEVsZjMyX05oZHI7Ci0KLXR5cGVkZWYgc3RydWN0IGVsZjY0X25vdGUgewotIEVsZjY0X1dvcmQgbl9uYW1lc3o7Ci0gRWxmNjRfV29yZCBuX2Rlc2NzejsKLSBFbGY2NF9Xb3JkIG5fdHlwZTsKLX0gRWxmNjRfTmhkcjsKLQotI2lmIEVMRl9DTEFTUyA9PSBFTEZDTEFTUzMyCi0KLSNkZWZpbmUgZWxmaGRyIGVsZjMyX2hkcgotI2RlZmluZSBlbGZfcGhkciBlbGYzMl9waGRyCi0jZGVmaW5lIGVsZl9ub3RlIGVsZjMyX25vdGUKLQotI2Vsc2UKLQotI2RlZmluZSBlbGZoZHIgZWxmNjRfaGRyCi0jZGVmaW5lIGVsZl9waGRyIGVsZjY0X3BoZHIKLSNkZWZpbmUgZWxmX25vdGUgZWxmNjRfbm90ZQotCi0jZW5kaWYKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvZXJyLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvZXJyLmgKaW5kZXggMWFhNGY5Yi4uYWUwY2YzYyAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2Vyci5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9lcnIuaApAQCAtNywxNyArNywyMyBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX0xJTlVYX0VSUl9ICiAjZGVmaW5lIF9MSU5VWF9FUlJfSAotCiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KLQogI2luY2x1ZGUgPGFzbS9lcnJuby5oPgotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNQVhfRVJSTk8gNDA5NQotCisjaWZuZGVmIF9fQVNTRU1CTFlfXwogI2RlZmluZSBJU19FUlJfVkFMVUUoeCkgdW5saWtlbHkoKHgpID49ICh1bnNpZ25lZCBsb25nKS1NQVhfRVJSTk8pCi0KKyNlbmRpZgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2Vycm5vLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvZXJybm8uaAppbmRleCA3MmVlNjQyLi45ZWNmOGQzIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvZXJybm8uaAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvZXJybm8uaApAQCAtNywxMSArNywxNyBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX0xJTlVYX0VSUk5PX0gKICNkZWZpbmUgX0xJTlVYX0VSUk5PX0gKLQogI2luY2x1ZGUgPGFzbS9lcnJuby5oPgotCiAjZW5kaWYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvZXJycXVldWUuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9lcnJxdWV1ZS5oCmluZGV4IDAzYjJlNDIuLjQ1NzQ0ZmEgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9lcnJxdWV1ZS5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9lcnJxdWV1ZS5oCkBAIC03LDI3ICs3LDM0IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfTElOVVhfRVJSUVVFVUVfSAogI2RlZmluZSBfTElOVVhfRVJSUVVFVUVfSCAxCi0KIHN0cnVjdCBzb2NrX2V4dGVuZGVkX2VycgogeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBlZV9lcnJubzsKICBfX3U4IGVlX29yaWdpbjsKICBfX3U4IGVlX3R5cGU7CiAgX191OCBlZV9jb2RlOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IGVlX3BhZDsKICBfX3UzMiBlZV9pbmZvOwogIF9fdTMyIGVlX2RhdGE7CiB9OwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTT19FRV9PUklHSU5fTk9ORSAwCiAjZGVmaW5lIFNPX0VFX09SSUdJTl9MT0NBTCAxCiAjZGVmaW5lIFNPX0VFX09SSUdJTl9JQ01QIDIKICNkZWZpbmUgU09fRUVfT1JJR0lOX0lDTVA2IDMKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU09fRUVfT0ZGRU5ERVIoZWUpICgoc3RydWN0IHNvY2thZGRyKikoKGVlKSsxKSkKLQogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvZXRoZXJkZXZpY2UuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9ldGhlcmRldmljZS5oCmluZGV4IGQwODdlOGYuLjI2MDI5OTUgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9ldGhlcmRldmljZS5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9ldGhlcmRldmljZS5oCkBAIC03LDEzICs3LDE5IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfTElOVVhfRVRIRVJERVZJQ0VfSAogI2RlZmluZSBfTElOVVhfRVRIRVJERVZJQ0VfSAotCiAjaW5jbHVkZSA8bGludXgvaWZfZXRoZXIuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjaW5jbHVkZSA8bGludXgvcmFuZG9tLmg+Ci0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2V0aHRvb2wuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9ldGh0b29sLmgKaW5kZXggN2E1YjNjZC4uZjEyZDFhOCAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2V0aHRvb2wuaAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvZXRodG9vbC5oCkBAIC03LDMxNSArNywzMzkgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9MSU5VWF9FVEhUT09MX0gKICNkZWZpbmUgX0xJTlVYX0VUSFRPT0xfSAotCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLQogc3RydWN0IGV0aHRvb2xfY21kIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgY21kOwogIF9fdTMyIHN1cHBvcnRlZDsKICBfX3UzMiBhZHZlcnRpc2luZzsKICBfX3UxNiBzcGVlZDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191OCBkdXBsZXg7CiAgX191OCBwb3J0OwogIF9fdTggcGh5X2FkZHJlc3M7CiAgX191OCB0cmFuc2NlaXZlcjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191OCBhdXRvbmVnOwogIF9fdTMyIG1heHR4cGt0OwogIF9fdTMyIG1heHJ4cGt0OwogIF9fdTE2IHNwZWVkX2hpOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UxNiByZXNlcnZlZDI7CiAgX191MzIgcmVzZXJ2ZWRbM107CiB9OwotCiAjZGVmaW5lIEVUSFRPT0xfQlVTSU5GT19MRU4gMzIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgZXRodG9vbF9kcnZpbmZvIHsKICBfX3UzMiBjbWQ7CiAgY2hhciBkcml2ZXJbMzJdOwogIGNoYXIgdmVyc2lvblszMl07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGNoYXIgZndfdmVyc2lvblszMl07CiAgY2hhciBidXNfaW5mb1tFVEhUT09MX0JVU0lORk9fTEVOXTsKICBjaGFyIHJlc2VydmVkMVszMl07CiAgY2hhciByZXNlcnZlZDJbMTJdOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBuX3ByaXZfZmxhZ3M7CiAgX191MzIgbl9zdGF0czsKICBfX3UzMiB0ZXN0aW5mb19sZW47CiAgX191MzIgZWVkdW1wX2xlbjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgcmVnZHVtcF9sZW47CiB9OwotCQkJCQkJCQkJCQkJCQkJCQogI2RlZmluZSBTT1BBU1NfTUFYIDYKLQogc3RydWN0IGV0aHRvb2xfd29saW5mbyB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGNtZDsKICBfX3UzMiBzdXBwb3J0ZWQ7CiAgX191MzIgd29sb3B0czsKICBfX3U4IHNvcGFzc1tTT1BBU1NfTUFYXTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwotCiBzdHJ1Y3QgZXRodG9vbF92YWx1ZSB7CiAgX191MzIgY21kOwogIF9fdTMyIGRhdGE7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKLQogc3RydWN0IGV0aHRvb2xfcmVncyB7CiAgX191MzIgY21kOwogIF9fdTMyIHZlcnNpb247CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGxlbjsKICBfX3U4IGRhdGFbMF07CiB9OwotCiBzdHJ1Y3QgZXRodG9vbF9lZXByb20geworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBjbWQ7CiAgX191MzIgbWFnaWM7CiAgX191MzIgb2Zmc2V0OwogIF9fdTMyIGxlbjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191OCBkYXRhWzBdOwogfTsKLQogc3RydWN0IGV0aHRvb2xfY29hbGVzY2UgewogIF9fdTMyIGNtZDsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiByeF9jb2FsZXNjZV91c2VjczsKLQogIF9fdTMyIHJ4X21heF9jb2FsZXNjZWRfZnJhbWVzOwotCiAgX191MzIgcnhfY29hbGVzY2VfdXNlY3NfaXJxOwogIF9fdTMyIHJ4X21heF9jb2FsZXNjZWRfZnJhbWVzX2lycTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiB0eF9jb2FsZXNjZV91c2VjczsKLQogIF9fdTMyIHR4X21heF9jb2FsZXNjZWRfZnJhbWVzOwotCiAgX191MzIgdHhfY29hbGVzY2VfdXNlY3NfaXJxOwogIF9fdTMyIHR4X21heF9jb2FsZXNjZWRfZnJhbWVzX2lycTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBzdGF0c19ibG9ja19jb2FsZXNjZV91c2VjczsKLQogIF9fdTMyIHVzZV9hZGFwdGl2ZV9yeF9jb2FsZXNjZTsKICBfX3UzMiB1c2VfYWRhcHRpdmVfdHhfY29hbGVzY2U7Ci0KICBfX3UzMiBwa3RfcmF0ZV9sb3c7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHJ4X2NvYWxlc2NlX3VzZWNzX2xvdzsKICBfX3UzMiByeF9tYXhfY29hbGVzY2VkX2ZyYW1lc19sb3c7CiAgX191MzIgdHhfY29hbGVzY2VfdXNlY3NfbG93OwogIF9fdTMyIHR4X21heF9jb2FsZXNjZWRfZnJhbWVzX2xvdzsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBwa3RfcmF0ZV9oaWdoOwogIF9fdTMyIHJ4X2NvYWxlc2NlX3VzZWNzX2hpZ2g7CiAgX191MzIgcnhfbWF4X2NvYWxlc2NlZF9mcmFtZXNfaGlnaDsKICBfX3UzMiB0eF9jb2FsZXNjZV91c2Vjc19oaWdoOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiB0eF9tYXhfY29hbGVzY2VkX2ZyYW1lc19oaWdoOwotCiAgX191MzIgcmF0ZV9zYW1wbGVfaW50ZXJ2YWw7CiB9OwotCiBzdHJ1Y3QgZXRodG9vbF9yaW5ncGFyYW0geworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBjbWQ7Ci0KICBfX3UzMiByeF9tYXhfcGVuZGluZzsKICBfX3UzMiByeF9taW5pX21heF9wZW5kaW5nOwogIF9fdTMyIHJ4X2p1bWJvX21heF9wZW5kaW5nOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiB0eF9tYXhfcGVuZGluZzsKLQogIF9fdTMyIHJ4X3BlbmRpbmc7CiAgX191MzIgcnhfbWluaV9wZW5kaW5nOwogIF9fdTMyIHJ4X2p1bWJvX3BlbmRpbmc7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHR4X3BlbmRpbmc7CiB9OwotCiBzdHJ1Y3QgZXRodG9vbF9wYXVzZXBhcmFtIHsKICBfX3UzMiBjbWQ7Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgYXV0b25lZzsKICBfX3UzMiByeF9wYXVzZTsKICBfX3UzMiB0eF9wYXVzZTsKIH07Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEVUSF9HU1RSSU5HX0xFTiAzMgogZW51bSBldGh0b29sX3N0cmluZ3NldCB7CiAgRVRIX1NTX1RFU1QgPSAwLAogIEVUSF9TU19TVEFUUywKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgRVRIX1NTX1BSSVZfRkxBR1MsCiB9OwotCiBzdHJ1Y3QgZXRodG9vbF9nc3RyaW5ncyB7CiAgX191MzIgY21kOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBzdHJpbmdfc2V0OwogIF9fdTMyIGxlbjsKICBfX3U4IGRhdGFbMF07CiB9OwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogZW51bSBldGh0b29sX3Rlc3RfZmxhZ3MgewogIEVUSF9URVNUX0ZMX09GRkxJTkUgPSAoMSA8PCAwKSwKICBFVEhfVEVTVF9GTF9GQUlMRUQgPSAoMSA8PCAxKSwKIH07Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgZXRodG9vbF90ZXN0IHsKICBfX3UzMiBjbWQ7CiAgX191MzIgZmxhZ3M7CiAgX191MzIgcmVzZXJ2ZWQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGxlbjsKICBfX3U2NCBkYXRhWzBdOwogfTsKLQogc3RydWN0IGV0aHRvb2xfc3RhdHMgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBjbWQ7CiAgX191MzIgbl9zdGF0czsKICBfX3U2NCBkYXRhWzBdOwogfTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBldGh0b29sX3Blcm1fYWRkciB7CiAgX191MzIgY21kOwogIF9fdTMyIHNpemU7CiAgX191OCBkYXRhWzBdOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07Ci0KIGVudW0gZXRodG9vbF9mbGFncyB7CiAgRVRIX0ZMQUdfTFJPID0gKDEgPDwgMTUpLAogfTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBldGh0b29sX3J4bmZjIHsKICBfX3UzMiBjbWQ7CiAgX191MzIgZmxvd190eXBlOwogIF9fdTY0IGRhdGE7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKLQotI2RlZmluZSBFVEhUT09MX0dTRVQgMHgwMDAwMDAwMSAgCi0jZGVmaW5lIEVUSFRPT0xfU1NFVCAweDAwMDAwMDAyICAKLSNkZWZpbmUgRVRIVE9PTF9HRFJWSU5GTyAweDAwMDAwMDAzICAKLSNkZWZpbmUgRVRIVE9PTF9HUkVHUyAweDAwMDAwMDA0ICAKLSNkZWZpbmUgRVRIVE9PTF9HV09MIDB4MDAwMDAwMDUgIAotI2RlZmluZSBFVEhUT09MX1NXT0wgMHgwMDAwMDAwNiAgCi0jZGVmaW5lIEVUSFRPT0xfR01TR0xWTCAweDAwMDAwMDA3ICAKLSNkZWZpbmUgRVRIVE9PTF9TTVNHTFZMIDB4MDAwMDAwMDggIAotI2RlZmluZSBFVEhUT09MX05XQVlfUlNUIDB4MDAwMDAwMDkgIAotI2RlZmluZSBFVEhUT09MX0dMSU5LIDB4MDAwMDAwMGEgIAotI2RlZmluZSBFVEhUT09MX0dFRVBST00gMHgwMDAwMDAwYiAgCi0jZGVmaW5lIEVUSFRPT0xfU0VFUFJPTSAweDAwMDAwMDBjICAKLSNkZWZpbmUgRVRIVE9PTF9HQ09BTEVTQ0UgMHgwMDAwMDAwZSAgCi0jZGVmaW5lIEVUSFRPT0xfU0NPQUxFU0NFIDB4MDAwMDAwMGYgIAotI2RlZmluZSBFVEhUT09MX0dSSU5HUEFSQU0gMHgwMDAwMDAxMCAgCi0jZGVmaW5lIEVUSFRPT0xfU1JJTkdQQVJBTSAweDAwMDAwMDExICAKLSNkZWZpbmUgRVRIVE9PTF9HUEFVU0VQQVJBTSAweDAwMDAwMDEyICAKLSNkZWZpbmUgRVRIVE9PTF9TUEFVU0VQQVJBTSAweDAwMDAwMDEzICAKLSNkZWZpbmUgRVRIVE9PTF9HUlhDU1VNIDB4MDAwMDAwMTQgIAotI2RlZmluZSBFVEhUT09MX1NSWENTVU0gMHgwMDAwMDAxNSAgCi0jZGVmaW5lIEVUSFRPT0xfR1RYQ1NVTSAweDAwMDAwMDE2ICAKLSNkZWZpbmUgRVRIVE9PTF9TVFhDU1VNIDB4MDAwMDAwMTcgIAotI2RlZmluZSBFVEhUT09MX0dTRyAweDAwMDAwMDE4ICAKLSNkZWZpbmUgRVRIVE9PTF9TU0cgMHgwMDAwMDAxOSAgCi0jZGVmaW5lIEVUSFRPT0xfVEVTVCAweDAwMDAwMDFhICAKLSNkZWZpbmUgRVRIVE9PTF9HU1RSSU5HUyAweDAwMDAwMDFiICAKLSNkZWZpbmUgRVRIVE9PTF9QSFlTX0lEIDB4MDAwMDAwMWMgIAotI2RlZmluZSBFVEhUT09MX0dTVEFUUyAweDAwMDAwMDFkICAKLSNkZWZpbmUgRVRIVE9PTF9HVFNPIDB4MDAwMDAwMWUgIAotI2RlZmluZSBFVEhUT09MX1NUU08gMHgwMDAwMDAxZiAgCi0jZGVmaW5lIEVUSFRPT0xfR1BFUk1BRERSIDB4MDAwMDAwMjAgIAotI2RlZmluZSBFVEhUT09MX0dVRk8gMHgwMDAwMDAyMSAgCi0jZGVmaW5lIEVUSFRPT0xfU1VGTyAweDAwMDAwMDIyICAKLSNkZWZpbmUgRVRIVE9PTF9HR1NPIDB4MDAwMDAwMjMgIAotI2RlZmluZSBFVEhUT09MX1NHU08gMHgwMDAwMDAyNCAgCi0jZGVmaW5lIEVUSFRPT0xfR0ZMQUdTIDB4MDAwMDAwMjUgIAotI2RlZmluZSBFVEhUT09MX1NGTEFHUyAweDAwMDAwMDI2ICAKLSNkZWZpbmUgRVRIVE9PTF9HUEZMQUdTIDB4MDAwMDAwMjcgIAotI2RlZmluZSBFVEhUT09MX1NQRkxBR1MgMHgwMDAwMDAyOCAgCi0KLSNkZWZpbmUgRVRIVE9PTF9HUlhGSCAweDAwMDAwMDI5ICAKLSNkZWZpbmUgRVRIVE9PTF9TUlhGSCAweDAwMDAwMDJhICAKLSNkZWZpbmUgRVRIVE9PTF9HR1JPIDB4MDAwMDAwMmIgIAotI2RlZmluZSBFVEhUT09MX1NHUk8gMHgwMDAwMDAyYyAgCi0KKyNkZWZpbmUgRVRIVE9PTF9HU0VUIDB4MDAwMDAwMDEKKyNkZWZpbmUgRVRIVE9PTF9TU0VUIDB4MDAwMDAwMDIKKyNkZWZpbmUgRVRIVE9PTF9HRFJWSU5GTyAweDAwMDAwMDAzCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBFVEhUT09MX0dSRUdTIDB4MDAwMDAwMDQKKyNkZWZpbmUgRVRIVE9PTF9HV09MIDB4MDAwMDAwMDUKKyNkZWZpbmUgRVRIVE9PTF9TV09MIDB4MDAwMDAwMDYKKyNkZWZpbmUgRVRIVE9PTF9HTVNHTFZMIDB4MDAwMDAwMDcKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEVUSFRPT0xfU01TR0xWTCAweDAwMDAwMDA4CisjZGVmaW5lIEVUSFRPT0xfTldBWV9SU1QgMHgwMDAwMDAwOQorI2RlZmluZSBFVEhUT09MX0dMSU5LIDB4MDAwMDAwMGEKKyNkZWZpbmUgRVRIVE9PTF9HRUVQUk9NIDB4MDAwMDAwMGIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEVUSFRPT0xfU0VFUFJPTSAweDAwMDAwMDBjCisjZGVmaW5lIEVUSFRPT0xfR0NPQUxFU0NFIDB4MDAwMDAwMGUKKyNkZWZpbmUgRVRIVE9PTF9TQ09BTEVTQ0UgMHgwMDAwMDAwZgorI2RlZmluZSBFVEhUT09MX0dSSU5HUEFSQU0gMHgwMDAwMDAxMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgRVRIVE9PTF9TUklOR1BBUkFNIDB4MDAwMDAwMTEKKyNkZWZpbmUgRVRIVE9PTF9HUEFVU0VQQVJBTSAweDAwMDAwMDEyCisjZGVmaW5lIEVUSFRPT0xfU1BBVVNFUEFSQU0gMHgwMDAwMDAxMworI2RlZmluZSBFVEhUT09MX0dSWENTVU0gMHgwMDAwMDAxNAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgRVRIVE9PTF9TUlhDU1VNIDB4MDAwMDAwMTUKKyNkZWZpbmUgRVRIVE9PTF9HVFhDU1VNIDB4MDAwMDAwMTYKKyNkZWZpbmUgRVRIVE9PTF9TVFhDU1VNIDB4MDAwMDAwMTcKKyNkZWZpbmUgRVRIVE9PTF9HU0cgMHgwMDAwMDAxOAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgRVRIVE9PTF9TU0cgMHgwMDAwMDAxOQorI2RlZmluZSBFVEhUT09MX1RFU1QgMHgwMDAwMDAxYQorI2RlZmluZSBFVEhUT09MX0dTVFJJTkdTIDB4MDAwMDAwMWIKKyNkZWZpbmUgRVRIVE9PTF9QSFlTX0lEIDB4MDAwMDAwMWMKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEVUSFRPT0xfR1NUQVRTIDB4MDAwMDAwMWQKKyNkZWZpbmUgRVRIVE9PTF9HVFNPIDB4MDAwMDAwMWUKKyNkZWZpbmUgRVRIVE9PTF9TVFNPIDB4MDAwMDAwMWYKKyNkZWZpbmUgRVRIVE9PTF9HUEVSTUFERFIgMHgwMDAwMDAyMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgRVRIVE9PTF9HVUZPIDB4MDAwMDAwMjEKKyNkZWZpbmUgRVRIVE9PTF9TVUZPIDB4MDAwMDAwMjIKKyNkZWZpbmUgRVRIVE9PTF9HR1NPIDB4MDAwMDAwMjMKKyNkZWZpbmUgRVRIVE9PTF9TR1NPIDB4MDAwMDAwMjQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEVUSFRPT0xfR0ZMQUdTIDB4MDAwMDAwMjUKKyNkZWZpbmUgRVRIVE9PTF9TRkxBR1MgMHgwMDAwMDAyNgorI2RlZmluZSBFVEhUT09MX0dQRkxBR1MgMHgwMDAwMDAyNworI2RlZmluZSBFVEhUT09MX1NQRkxBR1MgMHgwMDAwMDAyOAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgRVRIVE9PTF9HUlhGSCAweDAwMDAwMDI5CisjZGVmaW5lIEVUSFRPT0xfU1JYRkggMHgwMDAwMDAyYQorI2RlZmluZSBFVEhUT09MX0dHUk8gMHgwMDAwMDAyYgorI2RlZmluZSBFVEhUT09MX1NHUk8gMHgwMDAwMDAyYworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU1BBUkNfRVRIX0dTRVQgRVRIVE9PTF9HU0VUCiAjZGVmaW5lIFNQQVJDX0VUSF9TU0VUIEVUSFRPT0xfU1NFVAotCiAjZGVmaW5lIFNVUFBPUlRFRF8xMGJhc2VUX0hhbGYgKDEgPDwgMCkKICNkZWZpbmUgU1VQUE9SVEVEXzEwYmFzZVRfRnVsbCAoMSA8PCAxKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU1VQUE9SVEVEXzEwMGJhc2VUX0hhbGYgKDEgPDwgMikKICNkZWZpbmUgU1VQUE9SVEVEXzEwMGJhc2VUX0Z1bGwgKDEgPDwgMykKICNkZWZpbmUgU1VQUE9SVEVEXzEwMDBiYXNlVF9IYWxmICgxIDw8IDQpCiAjZGVmaW5lIFNVUFBPUlRFRF8xMDAwYmFzZVRfRnVsbCAoMSA8PCA1KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU1VQUE9SVEVEX0F1dG9uZWcgKDEgPDwgNikKICNkZWZpbmUgU1VQUE9SVEVEX1RQICgxIDw8IDcpCiAjZGVmaW5lIFNVUFBPUlRFRF9BVUkgKDEgPDwgOCkKICNkZWZpbmUgU1VQUE9SVEVEX01JSSAoMSA8PCA5KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU1VQUE9SVEVEX0ZJQlJFICgxIDw8IDEwKQogI2RlZmluZSBTVVBQT1JURURfQk5DICgxIDw8IDExKQogI2RlZmluZSBTVVBQT1JURURfMTAwMDBiYXNlVF9GdWxsICgxIDw8IDEyKQogI2RlZmluZSBTVVBQT1JURURfUGF1c2UgKDEgPDwgMTMpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTVVBQT1JURURfQXN5bV9QYXVzZSAoMSA8PCAxNCkKICNkZWZpbmUgU1VQUE9SVEVEXzI1MDBiYXNlWF9GdWxsICgxIDw8IDE1KQotCiAjZGVmaW5lIEFEVkVSVElTRURfMTBiYXNlVF9IYWxmICgxIDw8IDApCiAjZGVmaW5lIEFEVkVSVElTRURfMTBiYXNlVF9GdWxsICgxIDw8IDEpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBRFZFUlRJU0VEXzEwMGJhc2VUX0hhbGYgKDEgPDwgMikKICNkZWZpbmUgQURWRVJUSVNFRF8xMDBiYXNlVF9GdWxsICgxIDw8IDMpCiAjZGVmaW5lIEFEVkVSVElTRURfMTAwMGJhc2VUX0hhbGYgKDEgPDwgNCkKICNkZWZpbmUgQURWRVJUSVNFRF8xMDAwYmFzZVRfRnVsbCAoMSA8PCA1KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQURWRVJUSVNFRF9BdXRvbmVnICgxIDw8IDYpCiAjZGVmaW5lIEFEVkVSVElTRURfVFAgKDEgPDwgNykKICNkZWZpbmUgQURWRVJUSVNFRF9BVUkgKDEgPDwgOCkKICNkZWZpbmUgQURWRVJUSVNFRF9NSUkgKDEgPDwgOSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFEVkVSVElTRURfRklCUkUgKDEgPDwgMTApCiAjZGVmaW5lIEFEVkVSVElTRURfQk5DICgxIDw8IDExKQogI2RlZmluZSBBRFZFUlRJU0VEXzEwMDAwYmFzZVRfRnVsbCAoMSA8PCAxMikKICNkZWZpbmUgQURWRVJUSVNFRF9QYXVzZSAoMSA8PCAxMykKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFEVkVSVElTRURfQXN5bV9QYXVzZSAoMSA8PCAxNCkKICNkZWZpbmUgQURWRVJUSVNFRF8yNTAwYmFzZVhfRnVsbCAoMSA8PCAxNSkKLQogI2RlZmluZSBTUEVFRF8xMCAxMAogI2RlZmluZSBTUEVFRF8xMDAgMTAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTUEVFRF8xMDAwIDEwMDAKICNkZWZpbmUgU1BFRURfMjUwMCAyNTAwCiAjZGVmaW5lIFNQRUVEXzEwMDAwIDEwMDAwCi0KICNkZWZpbmUgRFVQTEVYX0hBTEYgMHgwMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRFVQTEVYX0ZVTEwgMHgwMQotCiAjZGVmaW5lIFBPUlRfVFAgMHgwMAogI2RlZmluZSBQT1JUX0FVSSAweDAxCiAjZGVmaW5lIFBPUlRfTUlJIDB4MDIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBPUlRfRklCUkUgMHgwMwogI2RlZmluZSBQT1JUX0JOQyAweDA0Ci0KICNkZWZpbmUgWENWUl9JTlRFUk5BTCAweDAwCiAjZGVmaW5lIFhDVlJfRVhURVJOQUwgMHgwMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgWENWUl9EVU1NWTEgMHgwMgogI2RlZmluZSBYQ1ZSX0RVTU1ZMiAweDAzCiAjZGVmaW5lIFhDVlJfRFVNTVkzIDB4MDQKLQogI2RlZmluZSBBVVRPTkVHX0RJU0FCTEUgMHgwMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQVVUT05FR19FTkFCTEUgMHgwMQotCiAjZGVmaW5lIFdBS0VfUEhZICgxIDw8IDApCiAjZGVmaW5lIFdBS0VfVUNBU1QgKDEgPDwgMSkKICNkZWZpbmUgV0FLRV9NQ0FTVCAoMSA8PCAyKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgV0FLRV9CQ0FTVCAoMSA8PCAzKQogI2RlZmluZSBXQUtFX0FSUCAoMSA8PCA0KQogI2RlZmluZSBXQUtFX01BR0lDICgxIDw8IDUpCi0jZGVmaW5lIFdBS0VfTUFHSUNTRUNVUkUgKDEgPDwgNikgIAotCisjZGVmaW5lIFdBS0VfTUFHSUNTRUNVUkUgKDEgPDwgNikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFRDUF9WNF9GTE9XIDB4MDEKICNkZWZpbmUgVURQX1Y0X0ZMT1cgMHgwMgogI2RlZmluZSBTQ1RQX1Y0X0ZMT1cgMHgwMwogI2RlZmluZSBBSF9FU1BfVjRfRkxPVyAweDA0CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBUQ1BfVjZfRkxPVyAweDA1CiAjZGVmaW5lIFVEUF9WNl9GTE9XIDB4MDYKICNkZWZpbmUgU0NUUF9WNl9GTE9XIDB4MDcKICNkZWZpbmUgQUhfRVNQX1Y2X0ZMT1cgMHgwOAotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBSWEhfREVWX1BPUlQgKDEgPDwgMCkKICNkZWZpbmUgUlhIX0wyREEgKDEgPDwgMSkKICNkZWZpbmUgUlhIX1ZMQU4gKDEgPDwgMikKICNkZWZpbmUgUlhIX0wzX1BST1RPICgxIDw8IDMpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBSWEhfSVBfU1JDICgxIDw8IDQpCiAjZGVmaW5lIFJYSF9JUF9EU1QgKDEgPDwgNSkKLSNkZWZpbmUgUlhIX0w0X0JfMF8xICgxIDw8IDYpICAKLSNkZWZpbmUgUlhIX0w0X0JfMl8zICgxIDw8IDcpICAKKyNkZWZpbmUgUlhIX0w0X0JfMF8xICgxIDw8IDYpCisjZGVmaW5lIFJYSF9MNF9CXzJfMyAoMSA8PCA3KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUlhIX0RJU0NBUkQgKDEgPDwgMzEpCi0KICNlbmRpZgotCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvZXh0Ml9mcy5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2V4dDJfZnMuaAppbmRleCBjMjFiMDlhLi5lOGM1YmE5IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvZXh0Ml9mcy5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9leHQyX2ZzLmgKQEAgLTcsMzcyICs3LDQwNSBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX0xJTlVYX0VYVDJfRlNfSAogI2RlZmluZSBfTElOVVhfRVhUMl9GU19ICi0KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotCiAjdW5kZWYgRVhUMkZTX0RFQlVHCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEVYVDJfUFJFQUxMT0NBVEUKICNkZWZpbmUgRVhUMl9ERUZBVUxUX1BSRUFMTE9DX0JMT0NLUyA4Ci0KICNkZWZpbmUgRVhUMkZTX0RBVEUgIjk1LzA4LzA5IgogI2RlZmluZSBFWFQyRlNfVkVSU0lPTiAiMC41YiIKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNpZmRlZiBFWFQyRlNfREVCVUcKICNkZWZpbmUgZXh0Ml9kZWJ1ZyhmLCBhLi4uKSB7ICAgcHJpbnRrICgiRVhUMi1mcyBERUJVRyAoJXMsICVkKTogJXM6IiwgICBfX0ZJTEVfXywgX19MSU5FX18sIF9fRlVOQ1RJT05fXyk7ICAgcHJpbnRrIChmLCAjIyBhKTsgICB9CiAjZWxzZQotI2RlZmluZSBleHQyX2RlYnVnKGYsIGEuLi4pICAKKyNkZWZpbmUgZXh0Ml9kZWJ1ZyhmLCBhLi4uKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlbmRpZgotCi0jZGVmaW5lIEVYVDJfQkFEX0lOTyAxICAKLSNkZWZpbmUgRVhUMl9ST09UX0lOTyAyICAKLSNkZWZpbmUgRVhUMl9CT09UX0xPQURFUl9JTk8gNSAgCi0jZGVmaW5lIEVYVDJfVU5ERUxfRElSX0lOTyA2ICAKLQorI2RlZmluZSBFWFQyX0JBRF9JTk8gMQorI2RlZmluZSBFWFQyX1JPT1RfSU5PIDIKKyNkZWZpbmUgRVhUMl9CT09UX0xPQURFUl9JTk8gNQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgRVhUMl9VTkRFTF9ESVJfSU5PIDYKICNkZWZpbmUgRVhUMl9HT09EX09MRF9GSVJTVF9JTk8gMTEKLQogI2RlZmluZSBFWFQyX1NVUEVSX01BR0lDIDB4RUY1MwotCiAjZGVmaW5lIEVYVDJfU0Ioc2IpIChzYikKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRVhUMl9MSU5LX01BWCAzMjAwMAotCiAjZGVmaW5lIEVYVDJfTUlOX0JMT0NLX1NJWkUgMTAyNAogI2RlZmluZSBFWFQyX01BWF9CTE9DS19TSVpFIDQwOTYKICNkZWZpbmUgRVhUMl9NSU5fQkxPQ0tfTE9HX1NJWkUgMTAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEVYVDJfQkxPQ0tfU0laRShzKSAoRVhUMl9NSU5fQkxPQ0tfU0laRSA8PCAocyktPnNfbG9nX2Jsb2NrX3NpemUpCiAjZGVmaW5lIEVYVDJfQUREUl9QRVJfQkxPQ0socykgKEVYVDJfQkxPQ0tfU0laRShzKSAvIHNpemVvZiAoX191MzIpKQogI2RlZmluZSBFWFQyX0JMT0NLX1NJWkVfQklUUyhzKSAoKHMpLT5zX2xvZ19ibG9ja19zaXplICsgMTApCiAjZGVmaW5lIEVYVDJfSU5PREVfU0laRShzKSAoKChzKS0+c19yZXZfbGV2ZWwgPT0gRVhUMl9HT09EX09MRF9SRVYpID8gICBFWFQyX0dPT0RfT0xEX0lOT0RFX1NJWkUgOiAgIChzKS0+c19pbm9kZV9zaXplKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRVhUMl9GSVJTVF9JTk8ocykgKCgocyktPnNfcmV2X2xldmVsID09IEVYVDJfR09PRF9PTERfUkVWKSA/ICAgRVhUMl9HT09EX09MRF9GSVJTVF9JTk8gOiAgIChzKS0+c19maXJzdF9pbm8pCi0KICNkZWZpbmUgRVhUMl9NSU5fRlJBR19TSVpFIDEwMjQKICNkZWZpbmUgRVhUMl9NQVhfRlJBR19TSVpFIDQwOTYKICNkZWZpbmUgRVhUMl9NSU5fRlJBR19MT0dfU0laRSAxMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRVhUMl9GUkFHX1NJWkUocykgKEVYVDJfTUlOX0ZSQUdfU0laRSA8PCAocyktPnNfbG9nX2ZyYWdfc2l6ZSkKICNkZWZpbmUgRVhUMl9GUkFHU19QRVJfQkxPQ0socykgKEVYVDJfQkxPQ0tfU0laRShzKSAvIEVYVDJfRlJBR19TSVpFKHMpKQotCiBzdHJ1Y3QgZXh0Ml9ncm91cF9kZXNjCiB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fbGUzMiBiZ19ibG9ja19iaXRtYXA7CiAgX19sZTMyIGJnX2lub2RlX2JpdG1hcDsKICBfX2xlMzIgYmdfaW5vZGVfdGFibGU7CiAgX19sZTE2IGJnX2ZyZWVfYmxvY2tzX2NvdW50OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX2xlMTYgYmdfZnJlZV9pbm9kZXNfY291bnQ7CiAgX19sZTE2IGJnX3VzZWRfZGlyc19jb3VudDsKICBfX2xlMTYgYmdfcGFkOwogIF9fbGUzMiBiZ19yZXNlcnZlZFszXTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwotCiAjZGVmaW5lIEVYVDJfQkxPQ0tTX1BFUl9HUk9VUChzKSAoKHMpLT5zX2Jsb2Nrc19wZXJfZ3JvdXApCiAjZGVmaW5lIEVYVDJfREVTQ19QRVJfQkxPQ0socykgKEVYVDJfQkxPQ0tfU0laRShzKSAvIHNpemVvZiAoc3RydWN0IGV4dDJfZ3JvdXBfZGVzYykpCiAjZGVmaW5lIEVYVDJfSU5PREVTX1BFUl9HUk9VUChzKSAoKHMpLT5zX2lub2Rlc19wZXJfZ3JvdXApCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEVYVDJfTkRJUl9CTE9DS1MgMTIKICNkZWZpbmUgRVhUMl9JTkRfQkxPQ0sgRVhUMl9ORElSX0JMT0NLUwogI2RlZmluZSBFWFQyX0RJTkRfQkxPQ0sgKEVYVDJfSU5EX0JMT0NLICsgMSkKICNkZWZpbmUgRVhUMl9USU5EX0JMT0NLIChFWFQyX0RJTkRfQkxPQ0sgKyAxKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRVhUMl9OX0JMT0NLUyAoRVhUMl9USU5EX0JMT0NLICsgMSkKLQotI2RlZmluZSBFWFQyX1NFQ1JNX0ZMIDB4MDAwMDAwMDEgIAotI2RlZmluZSBFWFQyX1VOUk1fRkwgMHgwMDAwMDAwMiAgCi0jZGVmaW5lIEVYVDJfQ09NUFJfRkwgMHgwMDAwMDAwNCAgCi0jZGVmaW5lIEVYVDJfU1lOQ19GTCAweDAwMDAwMDA4ICAKLSNkZWZpbmUgRVhUMl9JTU1VVEFCTEVfRkwgMHgwMDAwMDAxMCAgCi0jZGVmaW5lIEVYVDJfQVBQRU5EX0ZMIDB4MDAwMDAwMjAgIAotI2RlZmluZSBFWFQyX05PRFVNUF9GTCAweDAwMDAwMDQwICAKLSNkZWZpbmUgRVhUMl9OT0FUSU1FX0ZMIDB4MDAwMDAwODAgIAotCisjZGVmaW5lIEVYVDJfU0VDUk1fRkwgMHgwMDAwMDAwMQorI2RlZmluZSBFWFQyX1VOUk1fRkwgMHgwMDAwMDAwMgorI2RlZmluZSBFWFQyX0NPTVBSX0ZMIDB4MDAwMDAwMDQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEVYVDJfU1lOQ19GTCAweDAwMDAwMDA4CisjZGVmaW5lIEVYVDJfSU1NVVRBQkxFX0ZMIDB4MDAwMDAwMTAKKyNkZWZpbmUgRVhUMl9BUFBFTkRfRkwgMHgwMDAwMDAyMAorI2RlZmluZSBFWFQyX05PRFVNUF9GTCAweDAwMDAwMDQwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBFWFQyX05PQVRJTUVfRkwgMHgwMDAwMDA4MAogI2RlZmluZSBFWFQyX0RJUlRZX0ZMIDB4MDAwMDAxMDAKLSNkZWZpbmUgRVhUMl9DT01QUkJMS19GTCAweDAwMDAwMjAwICAKLSNkZWZpbmUgRVhUMl9OT0NPTVBfRkwgMHgwMDAwMDQwMCAgCi0jZGVmaW5lIEVYVDJfRUNPTVBSX0ZMIDB4MDAwMDA4MDAgIAotCi0jZGVmaW5lIEVYVDJfQlRSRUVfRkwgMHgwMDAwMTAwMCAgCi0jZGVmaW5lIEVYVDJfSU5ERVhfRkwgMHgwMDAwMTAwMCAgCi0jZGVmaW5lIEVYVDJfSU1BR0lDX0ZMIDB4MDAwMDIwMDAgIAotI2RlZmluZSBFWFQyX0pPVVJOQUxfREFUQV9GTCAweDAwMDA0MDAwICAKLSNkZWZpbmUgRVhUMl9OT1RBSUxfRkwgMHgwMDAwODAwMCAgCi0jZGVmaW5lIEVYVDJfRElSU1lOQ19GTCAweDAwMDEwMDAwICAKLSNkZWZpbmUgRVhUMl9UT1BESVJfRkwgMHgwMDAyMDAwMCAgCi0jZGVmaW5lIEVYVDJfUkVTRVJWRURfRkwgMHg4MDAwMDAwMCAgCi0KLSNkZWZpbmUgRVhUMl9GTF9VU0VSX1ZJU0lCTEUgMHgwMDAzREZGRiAgCi0jZGVmaW5lIEVYVDJfRkxfVVNFUl9NT0RJRklBQkxFIDB4MDAwMzgwRkYgIAotCisjZGVmaW5lIEVYVDJfQ09NUFJCTEtfRkwgMHgwMDAwMDIwMAorI2RlZmluZSBFWFQyX05PQ09NUF9GTCAweDAwMDAwNDAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBFWFQyX0VDT01QUl9GTCAweDAwMDAwODAwCisjZGVmaW5lIEVYVDJfQlRSRUVfRkwgMHgwMDAwMTAwMAorI2RlZmluZSBFWFQyX0lOREVYX0ZMIDB4MDAwMDEwMDAKKyNkZWZpbmUgRVhUMl9JTUFHSUNfRkwgMHgwMDAwMjAwMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgRVhUMl9KT1VSTkFMX0RBVEFfRkwgMHgwMDAwNDAwMAorI2RlZmluZSBFWFQyX05PVEFJTF9GTCAweDAwMDA4MDAwCisjZGVmaW5lIEVYVDJfRElSU1lOQ19GTCAweDAwMDEwMDAwCisjZGVmaW5lIEVYVDJfVE9QRElSX0ZMIDB4MDAwMjAwMDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEVYVDJfUkVTRVJWRURfRkwgMHg4MDAwMDAwMAorI2RlZmluZSBFWFQyX0ZMX1VTRVJfVklTSUJMRSAweDAwMDNERkZGCisjZGVmaW5lIEVYVDJfRkxfVVNFUl9NT0RJRklBQkxFIDB4MDAwMzgwRkYKICNkZWZpbmUgRVhUMl9JT0NfR0VURkxBR1MgX0lPUignZicsIDEsIGxvbmcpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBFWFQyX0lPQ19TRVRGTEFHUyBfSU9XKCdmJywgMiwgbG9uZykKICNkZWZpbmUgRVhUMl9JT0NfR0VUVkVSU0lPTiBfSU9SKCd2JywgMSwgbG9uZykKICNkZWZpbmUgRVhUMl9JT0NfU0VUVkVSU0lPTiBfSU9XKCd2JywgMiwgbG9uZykKLQogc3RydWN0IGV4dDJfaW5vZGUgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX2xlMTYgaV9tb2RlOwogIF9fbGUxNiBpX3VpZDsKICBfX2xlMzIgaV9zaXplOwogIF9fbGUzMiBpX2F0aW1lOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX2xlMzIgaV9jdGltZTsKICBfX2xlMzIgaV9tdGltZTsKICBfX2xlMzIgaV9kdGltZTsKICBfX2xlMTYgaV9naWQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fbGUxNiBpX2xpbmtzX2NvdW50OwogIF9fbGUzMiBpX2Jsb2NrczsKICBfX2xlMzIgaV9mbGFnczsKICB1bmlvbiB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCB7CiAgX19sZTMyIGxfaV9yZXNlcnZlZDE7CiAgfSBsaW51eDE7CiAgc3RydWN0IHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX19sZTMyIGhfaV90cmFuc2xhdG9yOwogIH0gaHVyZDE7CiAgc3RydWN0IHsKICBfX2xlMzIgbV9pX3Jlc2VydmVkMTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgfSBtYXNpeDE7CiAgfSBvc2QxOwogIF9fbGUzMiBpX2Jsb2NrW0VYVDJfTl9CTE9DS1NdOwogIF9fbGUzMiBpX2dlbmVyYXRpb247CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fbGUzMiBpX2ZpbGVfYWNsOwogIF9fbGUzMiBpX2Rpcl9hY2w7CiAgX19sZTMyIGlfZmFkZHI7CiAgdW5pb24geworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgewogIF9fdTggbF9pX2ZyYWc7CiAgX191OCBsX2lfZnNpemU7CiAgX191MTYgaV9wYWQxOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX2xlMTYgbF9pX3VpZF9oaWdoOwogIF9fbGUxNiBsX2lfZ2lkX2hpZ2g7CiAgX191MzIgbF9pX3Jlc2VydmVkMjsKICB9IGxpbnV4MjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IHsKICBfX3U4IGhfaV9mcmFnOwogIF9fdTggaF9pX2ZzaXplOwogIF9fbGUxNiBoX2lfbW9kZV9oaWdoOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX2xlMTYgaF9pX3VpZF9oaWdoOwogIF9fbGUxNiBoX2lfZ2lkX2hpZ2g7CiAgX19sZTMyIGhfaV9hdXRob3I7CiAgfSBodXJkMjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IHsKICBfX3U4IG1faV9mcmFnOwogIF9fdTggbV9pX2ZzaXplOwogIF9fdTE2IG1fcGFkMTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgbV9pX3Jlc2VydmVkMlsyXTsKICB9IG1hc2l4MjsKICB9IG9zZDI7CiB9OwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBpX3NpemVfaGlnaCBpX2Rpcl9hY2wKLQogI2lmZGVmIF9fbGludXhfXwogI2RlZmluZSBpX3Jlc2VydmVkMSBvc2QxLmxpbnV4MS5sX2lfcmVzZXJ2ZWQxCiAjZGVmaW5lIGlfZnJhZyBvc2QyLmxpbnV4Mi5sX2lfZnJhZworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgaV9mc2l6ZSBvc2QyLmxpbnV4Mi5sX2lfZnNpemUKICNkZWZpbmUgaV91aWRfbG93IGlfdWlkCiAjZGVmaW5lIGlfZ2lkX2xvdyBpX2dpZAogI2RlZmluZSBpX3VpZF9oaWdoIG9zZDIubGludXgyLmxfaV91aWRfaGlnaAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgaV9naWRfaGlnaCBvc2QyLmxpbnV4Mi5sX2lfZ2lkX2hpZ2gKICNkZWZpbmUgaV9yZXNlcnZlZDIgb3NkMi5saW51eDIubF9pX3Jlc2VydmVkMgogI2VuZGlmCi0KICNpZmRlZiBfX2h1cmRfXworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgaV90cmFuc2xhdG9yIG9zZDEuaHVyZDEuaF9pX3RyYW5zbGF0b3IKICNkZWZpbmUgaV9mcmFnIG9zZDIuaHVyZDIuaF9pX2ZyYWc7CiAjZGVmaW5lIGlfZnNpemUgb3NkMi5odXJkMi5oX2lfZnNpemU7CiAjZGVmaW5lIGlfdWlkX2hpZ2ggb3NkMi5odXJkMi5oX2lfdWlkX2hpZ2gKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIGlfZ2lkX2hpZ2ggb3NkMi5odXJkMi5oX2lfZ2lkX2hpZ2gKICNkZWZpbmUgaV9hdXRob3Igb3NkMi5odXJkMi5oX2lfYXV0aG9yCiAjZW5kaWYKLQogI2lmZGVmIF9fbWFzaXhfXworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgaV9yZXNlcnZlZDEgb3NkMS5tYXNpeDEubV9pX3Jlc2VydmVkMQogI2RlZmluZSBpX2ZyYWcgb3NkMi5tYXNpeDIubV9pX2ZyYWcKICNkZWZpbmUgaV9mc2l6ZSBvc2QyLm1hc2l4Mi5tX2lfZnNpemUKICNkZWZpbmUgaV9yZXNlcnZlZDIgb3NkMi5tYXNpeDIubV9pX3Jlc2VydmVkMgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlbmRpZgotCi0jZGVmaW5lIEVYVDJfVkFMSURfRlMgMHgwMDAxICAKLSNkZWZpbmUgRVhUMl9FUlJPUl9GUyAweDAwMDIgIAotCi0jZGVmaW5lIEVYVDJfTU9VTlRfQ0hFQ0sgMHgwMDAwMDEgIAotI2RlZmluZSBFWFQyX01PVU5UX09MREFMTE9DIDB4MDAwMDAyICAKLSNkZWZpbmUgRVhUMl9NT1VOVF9HUlBJRCAweDAwMDAwNCAgCi0jZGVmaW5lIEVYVDJfTU9VTlRfREVCVUcgMHgwMDAwMDggIAotI2RlZmluZSBFWFQyX01PVU5UX0VSUk9SU19DT05UIDB4MDAwMDEwICAKLSNkZWZpbmUgRVhUMl9NT1VOVF9FUlJPUlNfUk8gMHgwMDAwMjAgIAotI2RlZmluZSBFWFQyX01PVU5UX0VSUk9SU19QQU5JQyAweDAwMDA0MCAgCi0jZGVmaW5lIEVYVDJfTU9VTlRfTUlOSVhfREYgMHgwMDAwODAgIAotI2RlZmluZSBFWFQyX01PVU5UX05PQkggMHgwMDAxMDAgIAotI2RlZmluZSBFWFQyX01PVU5UX05PX1VJRDMyIDB4MDAwMjAwICAKLSNkZWZpbmUgRVhUMl9NT1VOVF9YQVRUUl9VU0VSIDB4MDA0MDAwICAKLSNkZWZpbmUgRVhUMl9NT1VOVF9QT1NJWF9BQ0wgMHgwMDgwMDAgIAotI2RlZmluZSBFWFQyX01PVU5UX1hJUCAweDAxMDAwMCAgCi0jZGVmaW5lIEVYVDJfTU9VTlRfVVNSUVVPVEEgMHgwMjAwMDAgIAotI2RlZmluZSBFWFQyX01PVU5UX0dSUFFVT1RBIDB4MDQwMDAwICAKLQorI2RlZmluZSBFWFQyX1ZBTElEX0ZTIDB4MDAwMQorI2RlZmluZSBFWFQyX0VSUk9SX0ZTIDB4MDAwMgorI2RlZmluZSBFWFQyX01PVU5UX0NIRUNLIDB4MDAwMDAxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBFWFQyX01PVU5UX09MREFMTE9DIDB4MDAwMDAyCisjZGVmaW5lIEVYVDJfTU9VTlRfR1JQSUQgMHgwMDAwMDQKKyNkZWZpbmUgRVhUMl9NT1VOVF9ERUJVRyAweDAwMDAwOAorI2RlZmluZSBFWFQyX01PVU5UX0VSUk9SU19DT05UIDB4MDAwMDEwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBFWFQyX01PVU5UX0VSUk9SU19STyAweDAwMDAyMAorI2RlZmluZSBFWFQyX01PVU5UX0VSUk9SU19QQU5JQyAweDAwMDA0MAorI2RlZmluZSBFWFQyX01PVU5UX01JTklYX0RGIDB4MDAwMDgwCisjZGVmaW5lIEVYVDJfTU9VTlRfTk9CSCAweDAwMDEwMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgRVhUMl9NT1VOVF9OT19VSUQzMiAweDAwMDIwMAorI2RlZmluZSBFWFQyX01PVU5UX1hBVFRSX1VTRVIgMHgwMDQwMDAKKyNkZWZpbmUgRVhUMl9NT1VOVF9QT1NJWF9BQ0wgMHgwMDgwMDAKKyNkZWZpbmUgRVhUMl9NT1VOVF9YSVAgMHgwMTAwMDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEVYVDJfTU9VTlRfVVNSUVVPVEEgMHgwMjAwMDAKKyNkZWZpbmUgRVhUMl9NT1VOVF9HUlBRVU9UQSAweDA0MDAwMAogI2RlZmluZSBjbGVhcl9vcHQobywgb3B0KSBvICY9IH5FWFQyX01PVU5UXyMjb3B0CiAjZGVmaW5lIHNldF9vcHQobywgb3B0KSBvIHw9IEVYVDJfTU9VTlRfIyNvcHQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIHRlc3Rfb3B0KHNiLCBvcHQpIChFWFQyX1NCKHNiKS0+c19tb3VudF9vcHQgJiAgIEVYVDJfTU9VTlRfIyNvcHQpCi0KLSNkZWZpbmUgRVhUMl9ERkxfTUFYX01OVF9DT1VOVCAyMCAgCi0jZGVmaW5lIEVYVDJfREZMX0NIRUNLSU5URVJWQUwgMCAgCi0KLSNkZWZpbmUgRVhUMl9FUlJPUlNfQ09OVElOVUUgMSAgCi0jZGVmaW5lIEVYVDJfRVJST1JTX1JPIDIgIAotI2RlZmluZSBFWFQyX0VSUk9SU19QQU5JQyAzICAKKyNkZWZpbmUgRVhUMl9ERkxfTUFYX01OVF9DT1VOVCAyMAorI2RlZmluZSBFWFQyX0RGTF9DSEVDS0lOVEVSVkFMIDAKKyNkZWZpbmUgRVhUMl9FUlJPUlNfQ09OVElOVUUgMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgRVhUMl9FUlJPUlNfUk8gMgorI2RlZmluZSBFWFQyX0VSUk9SU19QQU5JQyAzCiAjZGVmaW5lIEVYVDJfRVJST1JTX0RFRkFVTFQgRVhUMl9FUlJPUlNfQ09OVElOVUUKLQogc3RydWN0IGV4dDJfc3VwZXJfYmxvY2sgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX2xlMzIgc19pbm9kZXNfY291bnQ7CiAgX19sZTMyIHNfYmxvY2tzX2NvdW50OwogIF9fbGUzMiBzX3JfYmxvY2tzX2NvdW50OwogIF9fbGUzMiBzX2ZyZWVfYmxvY2tzX2NvdW50OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX2xlMzIgc19mcmVlX2lub2Rlc19jb3VudDsKICBfX2xlMzIgc19maXJzdF9kYXRhX2Jsb2NrOwogIF9fbGUzMiBzX2xvZ19ibG9ja19zaXplOwogIF9fbGUzMiBzX2xvZ19mcmFnX3NpemU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fbGUzMiBzX2Jsb2Nrc19wZXJfZ3JvdXA7CiAgX19sZTMyIHNfZnJhZ3NfcGVyX2dyb3VwOwogIF9fbGUzMiBzX2lub2Rlc19wZXJfZ3JvdXA7CiAgX19sZTMyIHNfbXRpbWU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fbGUzMiBzX3d0aW1lOwogIF9fbGUxNiBzX21udF9jb3VudDsKICBfX2xlMTYgc19tYXhfbW50X2NvdW50OwogIF9fbGUxNiBzX21hZ2ljOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX2xlMTYgc19zdGF0ZTsKICBfX2xlMTYgc19lcnJvcnM7CiAgX19sZTE2IHNfbWlub3JfcmV2X2xldmVsOwogIF9fbGUzMiBzX2xhc3RjaGVjazsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX19sZTMyIHNfY2hlY2tpbnRlcnZhbDsKICBfX2xlMzIgc19jcmVhdG9yX29zOwogIF9fbGUzMiBzX3Jldl9sZXZlbDsKICBfX2xlMTYgc19kZWZfcmVzdWlkOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX2xlMTYgc19kZWZfcmVzZ2lkOwotCiAgX19sZTMyIHNfZmlyc3RfaW5vOwogIF9fbGUxNiBzX2lub2RlX3NpemU7CiAgX19sZTE2IHNfYmxvY2tfZ3JvdXBfbnI7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fbGUzMiBzX2ZlYXR1cmVfY29tcGF0OwogIF9fbGUzMiBzX2ZlYXR1cmVfaW5jb21wYXQ7CiAgX19sZTMyIHNfZmVhdHVyZV9yb19jb21wYXQ7CiAgX191OCBzX3V1aWRbMTZdOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBjaGFyIHNfdm9sdW1lX25hbWVbMTZdOwogIGNoYXIgc19sYXN0X21vdW50ZWRbNjRdOwogIF9fbGUzMiBzX2FsZ29yaXRobV91c2FnZV9iaXRtYXA7Ci0KICBfX3U4IHNfcHJlYWxsb2NfYmxvY2tzOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IHNfcHJlYWxsb2NfZGlyX2Jsb2NrczsKICBfX3UxNiBzX3BhZGRpbmcxOwotCiAgX191OCBzX2pvdXJuYWxfdXVpZFsxNl07CiAgX191MzIgc19qb3VybmFsX2ludW07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHNfam91cm5hbF9kZXY7CiAgX191MzIgc19sYXN0X29ycGhhbjsKICBfX3UzMiBzX2hhc2hfc2VlZFs0XTsKICBfX3U4IHNfZGVmX2hhc2hfdmVyc2lvbjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191OCBzX3Jlc2VydmVkX2NoYXJfcGFkOwogIF9fdTE2IHNfcmVzZXJ2ZWRfd29yZF9wYWQ7CiAgX19sZTMyIHNfZGVmYXVsdF9tb3VudF9vcHRzOwogIF9fbGUzMiBzX2ZpcnN0X21ldGFfYmc7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHNfcmVzZXJ2ZWRbMTkwXTsKIH07Ci0KICNkZWZpbmUgRVhUMl9PU19MSU5VWCAwCiAjZGVmaW5lIEVYVDJfT1NfSFVSRCAxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBFWFQyX09TX01BU0lYIDIKICNkZWZpbmUgRVhUMl9PU19GUkVFQlNEIDMKICNkZWZpbmUgRVhUMl9PU19MSVRFUyA0Ci0KLSNkZWZpbmUgRVhUMl9HT09EX09MRF9SRVYgMCAgCi0jZGVmaW5lIEVYVDJfRFlOQU1JQ19SRVYgMSAgCi0KKyNkZWZpbmUgRVhUMl9HT09EX09MRF9SRVYgMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgRVhUMl9EWU5BTUlDX1JFViAxCiAjZGVmaW5lIEVYVDJfQ1VSUkVOVF9SRVYgRVhUMl9HT09EX09MRF9SRVYKICNkZWZpbmUgRVhUMl9NQVhfU1VQUF9SRVYgRVhUMl9EWU5BTUlDX1JFVgotCiAjZGVmaW5lIEVYVDJfR09PRF9PTERfSU5PREVfU0laRSAxMjgKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRVhUMl9IQVNfQ09NUEFUX0ZFQVRVUkUoc2IsbWFzaykgICAoIEVYVDJfU0Ioc2IpLT5zX2VzLT5zX2ZlYXR1cmVfY29tcGF0ICYgY3B1X3RvX2xlMzIobWFzaykgKQogI2RlZmluZSBFWFQyX0hBU19ST19DT01QQVRfRkVBVFVSRShzYixtYXNrKSAgICggRVhUMl9TQihzYiktPnNfZXMtPnNfZmVhdHVyZV9yb19jb21wYXQgJiBjcHVfdG9fbGUzMihtYXNrKSApCiAjZGVmaW5lIEVYVDJfSEFTX0lOQ09NUEFUX0ZFQVRVUkUoc2IsbWFzaykgICAoIEVYVDJfU0Ioc2IpLT5zX2VzLT5zX2ZlYXR1cmVfaW5jb21wYXQgJiBjcHVfdG9fbGUzMihtYXNrKSApCiAjZGVmaW5lIEVYVDJfU0VUX0NPTVBBVF9GRUFUVVJFKHNiLG1hc2spICAgRVhUMl9TQihzYiktPnNfZXMtPnNfZmVhdHVyZV9jb21wYXQgfD0gY3B1X3RvX2xlMzIobWFzaykKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEVYVDJfU0VUX1JPX0NPTVBBVF9GRUFUVVJFKHNiLG1hc2spICAgRVhUMl9TQihzYiktPnNfZXMtPnNfZmVhdHVyZV9yb19jb21wYXQgfD0gY3B1X3RvX2xlMzIobWFzaykKICNkZWZpbmUgRVhUMl9TRVRfSU5DT01QQVRfRkVBVFVSRShzYixtYXNrKSAgIEVYVDJfU0Ioc2IpLT5zX2VzLT5zX2ZlYXR1cmVfaW5jb21wYXQgfD0gY3B1X3RvX2xlMzIobWFzaykKICNkZWZpbmUgRVhUMl9DTEVBUl9DT01QQVRfRkVBVFVSRShzYixtYXNrKSAgIEVYVDJfU0Ioc2IpLT5zX2VzLT5zX2ZlYXR1cmVfY29tcGF0ICY9IH5jcHVfdG9fbGUzMihtYXNrKQogI2RlZmluZSBFWFQyX0NMRUFSX1JPX0NPTVBBVF9GRUFUVVJFKHNiLG1hc2spICAgRVhUMl9TQihzYiktPnNfZXMtPnNfZmVhdHVyZV9yb19jb21wYXQgJj0gfmNwdV90b19sZTMyKG1hc2spCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBFWFQyX0NMRUFSX0lOQ09NUEFUX0ZFQVRVUkUoc2IsbWFzaykgICBFWFQyX1NCKHNiKS0+c19lcy0+c19mZWF0dXJlX2luY29tcGF0ICY9IH5jcHVfdG9fbGUzMihtYXNrKQotCiAjZGVmaW5lIEVYVDJfRkVBVFVSRV9DT01QQVRfRElSX1BSRUFMTE9DIDB4MDAwMQogI2RlZmluZSBFWFQyX0ZFQVRVUkVfQ09NUEFUX0lNQUdJQ19JTk9ERVMgMHgwMDAyCiAjZGVmaW5lIEVYVDNfRkVBVFVSRV9DT01QQVRfSEFTX0pPVVJOQUwgMHgwMDA0CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBFWFQyX0ZFQVRVUkVfQ09NUEFUX0VYVF9BVFRSIDB4MDAwOAogI2RlZmluZSBFWFQyX0ZFQVRVUkVfQ09NUEFUX1JFU0laRV9JTk8gMHgwMDEwCiAjZGVmaW5lIEVYVDJfRkVBVFVSRV9DT01QQVRfRElSX0lOREVYIDB4MDAyMAogI2RlZmluZSBFWFQyX0ZFQVRVUkVfQ09NUEFUX0FOWSAweGZmZmZmZmZmCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEVYVDJfRkVBVFVSRV9ST19DT01QQVRfU1BBUlNFX1NVUEVSIDB4MDAwMQogI2RlZmluZSBFWFQyX0ZFQVRVUkVfUk9fQ09NUEFUX0xBUkdFX0ZJTEUgMHgwMDAyCiAjZGVmaW5lIEVYVDJfRkVBVFVSRV9ST19DT01QQVRfQlRSRUVfRElSIDB4MDAwNAogI2RlZmluZSBFWFQyX0ZFQVRVUkVfUk9fQ09NUEFUX0FOWSAweGZmZmZmZmZmCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEVYVDJfRkVBVFVSRV9JTkNPTVBBVF9DT01QUkVTU0lPTiAweDAwMDEKICNkZWZpbmUgRVhUMl9GRUFUVVJFX0lOQ09NUEFUX0ZJTEVUWVBFIDB4MDAwMgogI2RlZmluZSBFWFQzX0ZFQVRVUkVfSU5DT01QQVRfUkVDT1ZFUiAweDAwMDQKICNkZWZpbmUgRVhUM19GRUFUVVJFX0lOQ09NUEFUX0pPVVJOQUxfREVWIDB4MDAwOAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRVhUMl9GRUFUVVJFX0lOQ09NUEFUX01FVEFfQkcgMHgwMDEwCiAjZGVmaW5lIEVYVDJfRkVBVFVSRV9JTkNPTVBBVF9BTlkgMHhmZmZmZmZmZgotCiAjZGVmaW5lIEVYVDJfRkVBVFVSRV9DT01QQVRfU1VQUCBFWFQyX0ZFQVRVUkVfQ09NUEFUX0VYVF9BVFRSCiAjZGVmaW5lIEVYVDJfRkVBVFVSRV9JTkNPTVBBVF9TVVBQIChFWFQyX0ZFQVRVUkVfSU5DT01QQVRfRklMRVRZUEV8ICAgRVhUMl9GRUFUVVJFX0lOQ09NUEFUX01FVEFfQkcpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBFWFQyX0ZFQVRVUkVfUk9fQ09NUEFUX1NVUFAgKEVYVDJfRkVBVFVSRV9ST19DT01QQVRfU1BBUlNFX1NVUEVSfCAgIEVYVDJfRkVBVFVSRV9ST19DT01QQVRfTEFSR0VfRklMRXwgICBFWFQyX0ZFQVRVUkVfUk9fQ09NUEFUX0JUUkVFX0RJUikKICNkZWZpbmUgRVhUMl9GRUFUVVJFX1JPX0NPTVBBVF9VTlNVUFBPUlRFRCB+RVhUMl9GRUFUVVJFX1JPX0NPTVBBVF9TVVBQCiAjZGVmaW5lIEVYVDJfRkVBVFVSRV9JTkNPTVBBVF9VTlNVUFBPUlRFRCB+RVhUMl9GRUFUVVJFX0lOQ09NUEFUX1NVUFAKLQogI2RlZmluZSBFWFQyX0RFRl9SRVNVSUQgMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRVhUMl9ERUZfUkVTR0lEIDAKLQogI2RlZmluZSBFWFQyX0RFRk1fREVCVUcgMHgwMDAxCiAjZGVmaW5lIEVYVDJfREVGTV9CU0RHUk9VUFMgMHgwMDAyCiAjZGVmaW5lIEVYVDJfREVGTV9YQVRUUl9VU0VSIDB4MDAwNAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRVhUMl9ERUZNX0FDTCAweDAwMDgKICNkZWZpbmUgRVhUMl9ERUZNX1VJRDE2IDB4MDAxMAotCi0jZGVmaW5lIEVYVDNfREVGTV9KTU9ERSAweDAwNjAgCisjZGVmaW5lIEVYVDNfREVGTV9KTU9ERSAweDAwNjAKICNkZWZpbmUgRVhUM19ERUZNX0pNT0RFX0RBVEEgMHgwMDIwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBFWFQzX0RFRk1fSk1PREVfT1JERVJFRCAweDAwNDAKICNkZWZpbmUgRVhUM19ERUZNX0pNT0RFX1dCQUNLIDB4MDA2MAotCiAjZGVmaW5lIEVYVDJfTkFNRV9MRU4gMjU1Ci0KIHN0cnVjdCBleHQyX2Rpcl9lbnRyeSB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fbGUzMiBpbm9kZTsKICBfX2xlMTYgcmVjX2xlbjsKICBfX2xlMTYgbmFtZV9sZW47CiAgY2hhciBuYW1lW0VYVDJfTkFNRV9MRU5dOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07Ci0KIHN0cnVjdCBleHQyX2Rpcl9lbnRyeV8yIHsKICBfX2xlMzIgaW5vZGU7CiAgX19sZTE2IHJlY19sZW47CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTggbmFtZV9sZW47CiAgX191OCBmaWxlX3R5cGU7CiAgY2hhciBuYW1lW0VYVDJfTkFNRV9MRU5dOwogfTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIGVudW0gewogIEVYVDJfRlRfVU5LTk9XTiwKICBFWFQyX0ZUX1JFR19GSUxFLAogIEVYVDJfRlRfRElSLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBFWFQyX0ZUX0NIUkRFViwKICBFWFQyX0ZUX0JMS0RFViwKICBFWFQyX0ZUX0ZJRk8sCiAgRVhUMl9GVF9TT0NLLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBFWFQyX0ZUX1NZTUxJTkssCiAgRVhUMl9GVF9NQVgKIH07Ci0KICNkZWZpbmUgRVhUMl9ESVJfUEFEIDQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEVYVDJfRElSX1JPVU5EIChFWFQyX0RJUl9QQUQgLSAxKQogI2RlZmluZSBFWFQyX0RJUl9SRUNfTEVOKG5hbWVfbGVuKSAoKChuYW1lX2xlbikgKyA4ICsgRVhUMl9ESVJfUk9VTkQpICYgICB+RVhUMl9ESVJfUk9VTkQpCi0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2V4dDNfZnMuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9leHQzX2ZzLmgKaW5kZXggODAxNmZkMS4uNjkwNDRmZCAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2V4dDNfZnMuaAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvZXh0M19mcy5oCkBAIC03LDQ0MiArNyw0NzggQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9MSU5VWF9FWFQzX0ZTX0gKICNkZWZpbmUgX0xJTlVYX0VYVDNfRlNfSAotCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLQogI3VuZGVmIEVYVDNGU19ERUJVRwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBFWFQzX0RFRkFVTFRfUkVTRVJWRV9CTE9DS1MgOAotCiAjZGVmaW5lIEVYVDNfTUFYX1JFU0VSVkVfQkxPQ0tTIDEwMjcKICNkZWZpbmUgRVhUM19SRVNFUlZFX1dJTkRPV19OT1RfQUxMT0NBVEVEIDAKLQogI2RlZmluZSBDT05GSUdfRVhUM19JTkRFWAotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2lmZGVmIEVYVDNGU19ERUJVRwogI2RlZmluZSBleHQzX2RlYnVnKGYsIGEuLi4pICAgZG8geyAgIHByaW50ayAoS0VSTl9ERUJVRyAiRVhUMy1mcyBERUJVRyAoJXMsICVkKTogJXM6IiwgICBfX0ZJTEVfXywgX19MSU5FX18sIF9fRlVOQ1RJT05fXyk7ICAgcHJpbnRrIChLRVJOX0RFQlVHIGYsICMjIGEpOyAgIH0gd2hpbGUgKDApCiAjZWxzZQogI2RlZmluZSBleHQzX2RlYnVnKGYsIGEuLi4pIGRvIHt9IHdoaWxlICgwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlbmRpZgotCi0jZGVmaW5lIEVYVDNfQkFEX0lOTyAxICAKLSNkZWZpbmUgRVhUM19ST09UX0lOTyAyICAKLSNkZWZpbmUgRVhUM19CT09UX0xPQURFUl9JTk8gNSAgCi0jZGVmaW5lIEVYVDNfVU5ERUxfRElSX0lOTyA2ICAKLSNkZWZpbmUgRVhUM19SRVNJWkVfSU5PIDcgIAotI2RlZmluZSBFWFQzX0pPVVJOQUxfSU5PIDggIAotCisjZGVmaW5lIEVYVDNfQkFEX0lOTyAxCisjZGVmaW5lIEVYVDNfUk9PVF9JTk8gMgorI2RlZmluZSBFWFQzX0JPT1RfTE9BREVSX0lOTyA1CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBFWFQzX1VOREVMX0RJUl9JTk8gNgorI2RlZmluZSBFWFQzX1JFU0laRV9JTk8gNworI2RlZmluZSBFWFQzX0pPVVJOQUxfSU5PIDgKICNkZWZpbmUgRVhUM19HT09EX09MRF9GSVJTVF9JTk8gMTEKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRVhUM19TVVBFUl9NQUdJQyAweEVGNTMKLQogI2RlZmluZSBFWFQzX0xJTktfTUFYIDMyMDAwCi0KICNkZWZpbmUgRVhUM19NSU5fQkxPQ0tfU0laRSAxMDI0CiAjZGVmaW5lIEVYVDNfTUFYX0JMT0NLX1NJWkUgNDA5NgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRVhUM19NSU5fQkxPQ0tfTE9HX1NJWkUgMTAKICNkZWZpbmUgRVhUM19CTE9DS19TSVpFKHMpIChFWFQzX01JTl9CTE9DS19TSVpFIDw8IChzKS0+c19sb2dfYmxvY2tfc2l6ZSkKICNkZWZpbmUgRVhUM19BRERSX1BFUl9CTE9DSyhzKSAoRVhUM19CTE9DS19TSVpFKHMpIC8gc2l6ZW9mIChfX3UzMikpCiAjZGVmaW5lIEVYVDNfQkxPQ0tfU0laRV9CSVRTKHMpICgocyktPnNfbG9nX2Jsb2NrX3NpemUgKyAxMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEVYVDNfSU5PREVfU0laRShzKSAoKChzKS0+c19yZXZfbGV2ZWwgPT0gRVhUM19HT09EX09MRF9SRVYpID8gICBFWFQzX0dPT0RfT0xEX0lOT0RFX1NJWkUgOiAgIChzKS0+c19pbm9kZV9zaXplKQogI2RlZmluZSBFWFQzX0ZJUlNUX0lOTyhzKSAoKChzKS0+c19yZXZfbGV2ZWwgPT0gRVhUM19HT09EX09MRF9SRVYpID8gICBFWFQzX0dPT0RfT0xEX0ZJUlNUX0lOTyA6ICAgKHMpLT5zX2ZpcnN0X2lubykKLQogI2RlZmluZSBFWFQzX01JTl9GUkFHX1NJWkUgMTAyNAogI2RlZmluZSBFWFQzX01BWF9GUkFHX1NJWkUgNDA5NgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRVhUM19NSU5fRlJBR19MT0dfU0laRSAxMAogI2RlZmluZSBFWFQzX0ZSQUdfU0laRShzKSAoRVhUM19NSU5fRlJBR19TSVpFIDw8IChzKS0+c19sb2dfZnJhZ19zaXplKQogI2RlZmluZSBFWFQzX0ZSQUdTX1BFUl9CTE9DSyhzKSAoRVhUM19CTE9DS19TSVpFKHMpIC8gRVhUM19GUkFHX1NJWkUocykpCi0KIHN0cnVjdCBleHQzX2dyb3VwX2Rlc2MKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB7CiAgX19sZTMyIGJnX2Jsb2NrX2JpdG1hcDsKICBfX2xlMzIgYmdfaW5vZGVfYml0bWFwOwogIF9fbGUzMiBiZ19pbm9kZV90YWJsZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX19sZTE2IGJnX2ZyZWVfYmxvY2tzX2NvdW50OwogIF9fbGUxNiBiZ19mcmVlX2lub2Rlc19jb3VudDsKICBfX2xlMTYgYmdfdXNlZF9kaXJzX2NvdW50OwogIF9fdTE2IGJnX3BhZDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX19sZTMyIGJnX3Jlc2VydmVkWzNdOwogfTsKLQogI2RlZmluZSBFWFQzX0JMT0NLU19QRVJfR1JPVVAocykgKChzKS0+c19ibG9ja3NfcGVyX2dyb3VwKQogI2RlZmluZSBFWFQzX0RFU0NfUEVSX0JMT0NLKHMpIChFWFQzX0JMT0NLX1NJWkUocykgLyBzaXplb2YgKHN0cnVjdCBleHQzX2dyb3VwX2Rlc2MpKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRVhUM19JTk9ERVNfUEVSX0dST1VQKHMpICgocyktPnNfaW5vZGVzX3Blcl9ncm91cCkKLQogI2RlZmluZSBFWFQzX05ESVJfQkxPQ0tTIDEyCiAjZGVmaW5lIEVYVDNfSU5EX0JMT0NLIEVYVDNfTkRJUl9CTE9DS1MKICNkZWZpbmUgRVhUM19ESU5EX0JMT0NLIChFWFQzX0lORF9CTE9DSyArIDEpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBFWFQzX1RJTkRfQkxPQ0sgKEVYVDNfRElORF9CTE9DSyArIDEpCiAjZGVmaW5lIEVYVDNfTl9CTE9DS1MgKEVYVDNfVElORF9CTE9DSyArIDEpCi0KLSNkZWZpbmUgRVhUM19TRUNSTV9GTCAweDAwMDAwMDAxICAKLSNkZWZpbmUgRVhUM19VTlJNX0ZMIDB4MDAwMDAwMDIgIAotI2RlZmluZSBFWFQzX0NPTVBSX0ZMIDB4MDAwMDAwMDQgIAotI2RlZmluZSBFWFQzX1NZTkNfRkwgMHgwMDAwMDAwOCAgCi0jZGVmaW5lIEVYVDNfSU1NVVRBQkxFX0ZMIDB4MDAwMDAwMTAgIAotI2RlZmluZSBFWFQzX0FQUEVORF9GTCAweDAwMDAwMDIwICAKLSNkZWZpbmUgRVhUM19OT0RVTVBfRkwgMHgwMDAwMDA0MCAgCi0jZGVmaW5lIEVYVDNfTk9BVElNRV9GTCAweDAwMDAwMDgwICAKLQorI2RlZmluZSBFWFQzX1NFQ1JNX0ZMIDB4MDAwMDAwMDEKKyNkZWZpbmUgRVhUM19VTlJNX0ZMIDB4MDAwMDAwMDIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEVYVDNfQ09NUFJfRkwgMHgwMDAwMDAwNAorI2RlZmluZSBFWFQzX1NZTkNfRkwgMHgwMDAwMDAwOAorI2RlZmluZSBFWFQzX0lNTVVUQUJMRV9GTCAweDAwMDAwMDEwCisjZGVmaW5lIEVYVDNfQVBQRU5EX0ZMIDB4MDAwMDAwMjAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEVYVDNfTk9EVU1QX0ZMIDB4MDAwMDAwNDAKKyNkZWZpbmUgRVhUM19OT0FUSU1FX0ZMIDB4MDAwMDAwODAKICNkZWZpbmUgRVhUM19ESVJUWV9GTCAweDAwMDAwMTAwCi0jZGVmaW5lIEVYVDNfQ09NUFJCTEtfRkwgMHgwMDAwMDIwMCAgCi0jZGVmaW5lIEVYVDNfTk9DT01QUl9GTCAweDAwMDAwNDAwICAKLSNkZWZpbmUgRVhUM19FQ09NUFJfRkwgMHgwMDAwMDgwMCAgCi0KLSNkZWZpbmUgRVhUM19JTkRFWF9GTCAweDAwMDAxMDAwICAKLSNkZWZpbmUgRVhUM19JTUFHSUNfRkwgMHgwMDAwMjAwMCAgCi0jZGVmaW5lIEVYVDNfSk9VUk5BTF9EQVRBX0ZMIDB4MDAwMDQwMDAgIAotI2RlZmluZSBFWFQzX05PVEFJTF9GTCAweDAwMDA4MDAwICAKLSNkZWZpbmUgRVhUM19ESVJTWU5DX0ZMIDB4MDAwMTAwMDAgIAotI2RlZmluZSBFWFQzX1RPUERJUl9GTCAweDAwMDIwMDAwICAKLSNkZWZpbmUgRVhUM19SRVNFUlZFRF9GTCAweDgwMDAwMDAwICAKLQotI2RlZmluZSBFWFQzX0ZMX1VTRVJfVklTSUJMRSAweDAwMDNERkZGICAKLSNkZWZpbmUgRVhUM19GTF9VU0VSX01PRElGSUFCTEUgMHgwMDAzODBGRiAgCi0KLSNkZWZpbmUgRVhUM19TVEFURV9KREFUQSAweDAwMDAwMDAxICAKLSNkZWZpbmUgRVhUM19TVEFURV9ORVcgMHgwMDAwMDAwMiAgCi0jZGVmaW5lIEVYVDNfU1RBVEVfWEFUVFIgMHgwMDAwMDAwNCAgCi0KKyNkZWZpbmUgRVhUM19DT01QUkJMS19GTCAweDAwMDAwMjAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBFWFQzX05PQ09NUFJfRkwgMHgwMDAwMDQwMAorI2RlZmluZSBFWFQzX0VDT01QUl9GTCAweDAwMDAwODAwCisjZGVmaW5lIEVYVDNfSU5ERVhfRkwgMHgwMDAwMTAwMAorI2RlZmluZSBFWFQzX0lNQUdJQ19GTCAweDAwMDAyMDAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBFWFQzX0pPVVJOQUxfREFUQV9GTCAweDAwMDA0MDAwCisjZGVmaW5lIEVYVDNfTk9UQUlMX0ZMIDB4MDAwMDgwMDAKKyNkZWZpbmUgRVhUM19ESVJTWU5DX0ZMIDB4MDAwMTAwMDAKKyNkZWZpbmUgRVhUM19UT1BESVJfRkwgMHgwMDAyMDAwMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgRVhUM19SRVNFUlZFRF9GTCAweDgwMDAwMDAwCisjZGVmaW5lIEVYVDNfRkxfVVNFUl9WSVNJQkxFIDB4MDAwM0RGRkYKKyNkZWZpbmUgRVhUM19GTF9VU0VSX01PRElGSUFCTEUgMHgwMDAzODBGRgorI2RlZmluZSBFWFQzX1NUQVRFX0pEQVRBIDB4MDAwMDAwMDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEVYVDNfU1RBVEVfTkVXIDB4MDAwMDAwMDIKKyNkZWZpbmUgRVhUM19TVEFURV9YQVRUUiAweDAwMDAwMDA0CiBzdHJ1Y3QgZXh0M19uZXdfZ3JvdXBfaW5wdXQgewogIF9fdTMyIGdyb3VwOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBibG9ja19iaXRtYXA7CiAgX191MzIgaW5vZGVfYml0bWFwOwogIF9fdTMyIGlub2RlX3RhYmxlOwogIF9fdTMyIGJsb2Nrc19jb3VudDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MTYgcmVzZXJ2ZWRfYmxvY2tzOwogIF9fdTE2IHVudXNlZDsKIH07Ci0KIHN0cnVjdCBleHQzX25ld19ncm91cF9kYXRhIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgZ3JvdXA7CiAgX191MzIgYmxvY2tfYml0bWFwOwogIF9fdTMyIGlub2RlX2JpdG1hcDsKICBfX3UzMiBpbm9kZV90YWJsZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgYmxvY2tzX2NvdW50OwogIF9fdTE2IHJlc2VydmVkX2Jsb2NrczsKICBfX3UxNiB1bnVzZWQ7CiAgX191MzIgZnJlZV9ibG9ja3NfY291bnQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKLQogI2RlZmluZSBFWFQzX0lPQ19HRVRGTEFHUyBfSU9SKCdmJywgMSwgbG9uZykKICNkZWZpbmUgRVhUM19JT0NfU0VURkxBR1MgX0lPVygnZicsIDIsIGxvbmcpCiAjZGVmaW5lIEVYVDNfSU9DX0dFVFZFUlNJT04gX0lPUignZicsIDMsIGxvbmcpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBFWFQzX0lPQ19TRVRWRVJTSU9OIF9JT1coJ2YnLCA0LCBsb25nKQogI2RlZmluZSBFWFQzX0lPQ19HUk9VUF9FWFRFTkQgX0lPVygnZicsIDcsIHVuc2lnbmVkIGxvbmcpCiAjZGVmaW5lIEVYVDNfSU9DX0dST1VQX0FERCBfSU9XKCdmJywgOCxzdHJ1Y3QgZXh0M19uZXdfZ3JvdXBfaW5wdXQpCiAjZGVmaW5lIEVYVDNfSU9DX0dFVFZFUlNJT05fT0xEIF9JT1IoJ3YnLCAxLCBsb25nKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRVhUM19JT0NfU0VUVkVSU0lPTl9PTEQgX0lPVygndicsIDIsIGxvbmcpCiAjZGVmaW5lIEVYVDNfSU9DX0dFVFJTVlNaIF9JT1IoJ2YnLCA1LCBsb25nKQogI2RlZmluZSBFWFQzX0lPQ19TRVRSU1ZTWiBfSU9XKCdmJywgNiwgbG9uZykKLQogc3RydWN0IGV4dDNfbW91bnRfb3B0aW9ucyB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGxvbmcgc19tb3VudF9vcHQ7CiAgdWlkX3Qgc19yZXN1aWQ7CiAgZ2lkX3Qgc19yZXNnaWQ7CiAgdW5zaWduZWQgbG9uZyBzX2NvbW1pdF9pbnRlcnZhbDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwotCiBzdHJ1Y3QgZXh0M19pbm9kZSB7CiAgX19sZTE2IGlfbW9kZTsKICBfX2xlMTYgaV91aWQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fbGUzMiBpX3NpemU7CiAgX19sZTMyIGlfYXRpbWU7CiAgX19sZTMyIGlfY3RpbWU7CiAgX19sZTMyIGlfbXRpbWU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fbGUzMiBpX2R0aW1lOwogIF9fbGUxNiBpX2dpZDsKICBfX2xlMTYgaV9saW5rc19jb3VudDsKICBfX2xlMzIgaV9ibG9ja3M7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fbGUzMiBpX2ZsYWdzOwogIHVuaW9uIHsKICBzdHJ1Y3QgewogIF9fdTMyIGxfaV9yZXNlcnZlZDE7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIH0gbGludXgxOwogIHN0cnVjdCB7CiAgX191MzIgaF9pX3RyYW5zbGF0b3I7CiAgfSBodXJkMTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IHsKICBfX3UzMiBtX2lfcmVzZXJ2ZWQxOwogIH0gbWFzaXgxOwogIH0gb3NkMTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX19sZTMyIGlfYmxvY2tbRVhUM19OX0JMT0NLU107CiAgX19sZTMyIGlfZ2VuZXJhdGlvbjsKICBfX2xlMzIgaV9maWxlX2FjbDsKICBfX2xlMzIgaV9kaXJfYWNsOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX2xlMzIgaV9mYWRkcjsKICB1bmlvbiB7CiAgc3RydWN0IHsKICBfX3U4IGxfaV9mcmFnOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IGxfaV9mc2l6ZTsKICBfX3UxNiBpX3BhZDE7CiAgX19sZTE2IGxfaV91aWRfaGlnaDsKICBfX2xlMTYgbF9pX2dpZF9oaWdoOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBsX2lfcmVzZXJ2ZWQyOwogIH0gbGludXgyOwogIHN0cnVjdCB7CiAgX191OCBoX2lfZnJhZzsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191OCBoX2lfZnNpemU7CiAgX191MTYgaF9pX21vZGVfaGlnaDsKICBfX3UxNiBoX2lfdWlkX2hpZ2g7CiAgX191MTYgaF9pX2dpZF9oaWdoOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBoX2lfYXV0aG9yOwogIH0gaHVyZDI7CiAgc3RydWN0IHsKICBfX3U4IG1faV9mcmFnOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IG1faV9mc2l6ZTsKICBfX3UxNiBtX3BhZDE7CiAgX191MzIgbV9pX3Jlc2VydmVkMlsyXTsKICB9IG1hc2l4MjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgfSBvc2QyOwogIF9fbGUxNiBpX2V4dHJhX2lzaXplOwogIF9fbGUxNiBpX3BhZDE7CiB9OwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBpX3NpemVfaGlnaCBpX2Rpcl9hY2wKLQogI2lmZGVmIF9fbGludXhfXwogI2RlZmluZSBpX3Jlc2VydmVkMSBvc2QxLmxpbnV4MS5sX2lfcmVzZXJ2ZWQxCiAjZGVmaW5lIGlfZnJhZyBvc2QyLmxpbnV4Mi5sX2lfZnJhZworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgaV9mc2l6ZSBvc2QyLmxpbnV4Mi5sX2lfZnNpemUKICNkZWZpbmUgaV91aWRfbG93IGlfdWlkCiAjZGVmaW5lIGlfZ2lkX2xvdyBpX2dpZAogI2RlZmluZSBpX3VpZF9oaWdoIG9zZDIubGludXgyLmxfaV91aWRfaGlnaAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgaV9naWRfaGlnaCBvc2QyLmxpbnV4Mi5sX2lfZ2lkX2hpZ2gKICNkZWZpbmUgaV9yZXNlcnZlZDIgb3NkMi5saW51eDIubF9pX3Jlc2VydmVkMgotCiAjZWxpZiBkZWZpbmVkKF9fR05VX18pCi0KICNkZWZpbmUgaV90cmFuc2xhdG9yIG9zZDEuaHVyZDEuaF9pX3RyYW5zbGF0b3IKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIGlfZnJhZyBvc2QyLmh1cmQyLmhfaV9mcmFnOwogI2RlZmluZSBpX2ZzaXplIG9zZDIuaHVyZDIuaF9pX2ZzaXplOwogI2RlZmluZSBpX3VpZF9oaWdoIG9zZDIuaHVyZDIuaF9pX3VpZF9oaWdoCiAjZGVmaW5lIGlfZ2lkX2hpZ2ggb3NkMi5odXJkMi5oX2lfZ2lkX2hpZ2gKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIGlfYXV0aG9yIG9zZDIuaHVyZDIuaF9pX2F1dGhvcgotCiAjZWxpZiBkZWZpbmVkKF9fbWFzaXhfXykKLQogI2RlZmluZSBpX3Jlc2VydmVkMSBvc2QxLm1hc2l4MS5tX2lfcmVzZXJ2ZWQxCiAjZGVmaW5lIGlfZnJhZyBvc2QyLm1hc2l4Mi5tX2lfZnJhZworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgaV9mc2l6ZSBvc2QyLm1hc2l4Mi5tX2lfZnNpemUKICNkZWZpbmUgaV9yZXNlcnZlZDIgb3NkMi5tYXNpeDIubV9pX3Jlc2VydmVkMgotCiAjZW5kaWYKLQotI2RlZmluZSBFWFQzX1ZBTElEX0ZTIDB4MDAwMSAgCi0jZGVmaW5lIEVYVDNfRVJST1JfRlMgMHgwMDAyICAKLSNkZWZpbmUgRVhUM19PUlBIQU5fRlMgMHgwMDA0ICAKLQotI2RlZmluZSBFWFQzX01PVU5UX0NIRUNLIDB4MDAwMDEgIAotI2RlZmluZSBFWFQzX01PVU5UX09MREFMTE9DIDB4MDAwMDIgIAotI2RlZmluZSBFWFQzX01PVU5UX0dSUElEIDB4MDAwMDQgIAotI2RlZmluZSBFWFQzX01PVU5UX0RFQlVHIDB4MDAwMDggIAotI2RlZmluZSBFWFQzX01PVU5UX0VSUk9SU19DT05UIDB4MDAwMTAgIAotI2RlZmluZSBFWFQzX01PVU5UX0VSUk9SU19STyAweDAwMDIwICAKLSNkZWZpbmUgRVhUM19NT1VOVF9FUlJPUlNfUEFOSUMgMHgwMDA0MCAgCi0jZGVmaW5lIEVYVDNfTU9VTlRfTUlOSVhfREYgMHgwMDA4MCAgCi0jZGVmaW5lIEVYVDNfTU9VTlRfTk9MT0FEIDB4MDAxMDAgIAotI2RlZmluZSBFWFQzX01PVU5UX0FCT1JUIDB4MDAyMDAgIAotI2RlZmluZSBFWFQzX01PVU5UX0RBVEFfRkxBR1MgMHgwMEMwMCAgCi0jZGVmaW5lIEVYVDNfTU9VTlRfSk9VUk5BTF9EQVRBIDB4MDA0MDAgIAotI2RlZmluZSBFWFQzX01PVU5UX09SREVSRURfREFUQSAweDAwODAwICAKLSNkZWZpbmUgRVhUM19NT1VOVF9XUklURUJBQ0tfREFUQSAweDAwQzAwICAKLSNkZWZpbmUgRVhUM19NT1VOVF9VUERBVEVfSk9VUk5BTCAweDAxMDAwICAKLSNkZWZpbmUgRVhUM19NT1VOVF9OT19VSUQzMiAweDAyMDAwICAKLSNkZWZpbmUgRVhUM19NT1VOVF9YQVRUUl9VU0VSIDB4MDQwMDAgIAotI2RlZmluZSBFWFQzX01PVU5UX1BPU0lYX0FDTCAweDA4MDAwICAKLSNkZWZpbmUgRVhUM19NT1VOVF9SRVNFUlZBVElPTiAweDEwMDAwICAKLSNkZWZpbmUgRVhUM19NT1VOVF9CQVJSSUVSIDB4MjAwMDAgIAotI2RlZmluZSBFWFQzX01PVU5UX05PQkggMHg0MDAwMCAgCi0jZGVmaW5lIEVYVDNfTU9VTlRfUVVPVEEgMHg4MDAwMCAgCi0jZGVmaW5lIEVYVDNfTU9VTlRfVVNSUVVPVEEgMHgxMDAwMDAgIAotI2RlZmluZSBFWFQzX01PVU5UX0dSUFFVT1RBIDB4MjAwMDAwICAKLQorI2RlZmluZSBFWFQzX1ZBTElEX0ZTIDB4MDAwMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgRVhUM19FUlJPUl9GUyAweDAwMDIKKyNkZWZpbmUgRVhUM19PUlBIQU5fRlMgMHgwMDA0CisjZGVmaW5lIEVYVDNfTU9VTlRfQ0hFQ0sgMHgwMDAwMQorI2RlZmluZSBFWFQzX01PVU5UX09MREFMTE9DIDB4MDAwMDIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEVYVDNfTU9VTlRfR1JQSUQgMHgwMDAwNAorI2RlZmluZSBFWFQzX01PVU5UX0RFQlVHIDB4MDAwMDgKKyNkZWZpbmUgRVhUM19NT1VOVF9FUlJPUlNfQ09OVCAweDAwMDEwCisjZGVmaW5lIEVYVDNfTU9VTlRfRVJST1JTX1JPIDB4MDAwMjAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEVYVDNfTU9VTlRfRVJST1JTX1BBTklDIDB4MDAwNDAKKyNkZWZpbmUgRVhUM19NT1VOVF9NSU5JWF9ERiAweDAwMDgwCisjZGVmaW5lIEVYVDNfTU9VTlRfTk9MT0FEIDB4MDAxMDAKKyNkZWZpbmUgRVhUM19NT1VOVF9BQk9SVCAweDAwMjAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBFWFQzX01PVU5UX0RBVEFfRkxBR1MgMHgwMEMwMAorI2RlZmluZSBFWFQzX01PVU5UX0pPVVJOQUxfREFUQSAweDAwNDAwCisjZGVmaW5lIEVYVDNfTU9VTlRfT1JERVJFRF9EQVRBIDB4MDA4MDAKKyNkZWZpbmUgRVhUM19NT1VOVF9XUklURUJBQ0tfREFUQSAweDAwQzAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBFWFQzX01PVU5UX1VQREFURV9KT1VSTkFMIDB4MDEwMDAKKyNkZWZpbmUgRVhUM19NT1VOVF9OT19VSUQzMiAweDAyMDAwCisjZGVmaW5lIEVYVDNfTU9VTlRfWEFUVFJfVVNFUiAweDA0MDAwCisjZGVmaW5lIEVYVDNfTU9VTlRfUE9TSVhfQUNMIDB4MDgwMDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEVYVDNfTU9VTlRfUkVTRVJWQVRJT04gMHgxMDAwMAorI2RlZmluZSBFWFQzX01PVU5UX0JBUlJJRVIgMHgyMDAwMAorI2RlZmluZSBFWFQzX01PVU5UX05PQkggMHg0MDAwMAorI2RlZmluZSBFWFQzX01PVU5UX1FVT1RBIDB4ODAwMDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEVYVDNfTU9VTlRfVVNSUVVPVEEgMHgxMDAwMDAKKyNkZWZpbmUgRVhUM19NT1VOVF9HUlBRVU9UQSAweDIwMDAwMAogI2lmbmRlZiBfTElOVVhfRVhUMl9GU19ICiAjZGVmaW5lIGNsZWFyX29wdChvLCBvcHQpIG8gJj0gfkVYVDNfTU9VTlRfIyNvcHQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIHNldF9vcHQobywgb3B0KSBvIHw9IEVYVDNfTU9VTlRfIyNvcHQKICNkZWZpbmUgdGVzdF9vcHQoc2IsIG9wdCkgKEVYVDNfU0Ioc2IpLT5zX21vdW50X29wdCAmICAgRVhUM19NT1VOVF8jI29wdCkKICNlbHNlCiAjZGVmaW5lIEVYVDJfTU9VTlRfTk9MT0FEIEVYVDNfTU9VTlRfTk9MT0FECisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBFWFQyX01PVU5UX0FCT1JUIEVYVDNfTU9VTlRfQUJPUlQKICNkZWZpbmUgRVhUMl9NT1VOVF9EQVRBX0ZMQUdTIEVYVDNfTU9VTlRfREFUQV9GTEFHUwogI2VuZGlmCi0KICNkZWZpbmUgZXh0M19zZXRfYml0IGV4dDJfc2V0X2JpdAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgZXh0M19zZXRfYml0X2F0b21pYyBleHQyX3NldF9iaXRfYXRvbWljCiAjZGVmaW5lIGV4dDNfY2xlYXJfYml0IGV4dDJfY2xlYXJfYml0CiAjZGVmaW5lIGV4dDNfY2xlYXJfYml0X2F0b21pYyBleHQyX2NsZWFyX2JpdF9hdG9taWMKICNkZWZpbmUgZXh0M190ZXN0X2JpdCBleHQyX3Rlc3RfYml0CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBleHQzX2ZpbmRfZmlyc3RfemVyb19iaXQgZXh0Ml9maW5kX2ZpcnN0X3plcm9fYml0CiAjZGVmaW5lIGV4dDNfZmluZF9uZXh0X3plcm9fYml0IGV4dDJfZmluZF9uZXh0X3plcm9fYml0Ci0KLSNkZWZpbmUgRVhUM19ERkxfTUFYX01OVF9DT1VOVCAyMCAgCi0jZGVmaW5lIEVYVDNfREZMX0NIRUNLSU5URVJWQUwgMCAgCi0KLSNkZWZpbmUgRVhUM19FUlJPUlNfQ09OVElOVUUgMSAgCi0jZGVmaW5lIEVYVDNfRVJST1JTX1JPIDIgIAotI2RlZmluZSBFWFQzX0VSUk9SU19QQU5JQyAzICAKKyNkZWZpbmUgRVhUM19ERkxfTUFYX01OVF9DT1VOVCAyMAorI2RlZmluZSBFWFQzX0RGTF9DSEVDS0lOVEVSVkFMIDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEVYVDNfRVJST1JTX0NPTlRJTlVFIDEKKyNkZWZpbmUgRVhUM19FUlJPUlNfUk8gMgorI2RlZmluZSBFWFQzX0VSUk9SU19QQU5JQyAzCiAjZGVmaW5lIEVYVDNfRVJST1JTX0RFRkFVTFQgRVhUM19FUlJPUlNfQ09OVElOVUUKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBleHQzX3N1cGVyX2Jsb2NrIHsKICAgX19sZTMyIHNfaW5vZGVzX2NvdW50OwogIF9fbGUzMiBzX2Jsb2Nrc19jb3VudDsKICBfX2xlMzIgc19yX2Jsb2Nrc19jb3VudDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX19sZTMyIHNfZnJlZV9ibG9ja3NfY291bnQ7CiAgIF9fbGUzMiBzX2ZyZWVfaW5vZGVzX2NvdW50OwogIF9fbGUzMiBzX2ZpcnN0X2RhdGFfYmxvY2s7CiAgX19sZTMyIHNfbG9nX2Jsb2NrX3NpemU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fbGUzMiBzX2xvZ19mcmFnX3NpemU7CiAgIF9fbGUzMiBzX2Jsb2Nrc19wZXJfZ3JvdXA7CiAgX19sZTMyIHNfZnJhZ3NfcGVyX2dyb3VwOwogIF9fbGUzMiBzX2lub2Rlc19wZXJfZ3JvdXA7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fbGUzMiBzX210aW1lOwogICBfX2xlMzIgc193dGltZTsKICBfX2xlMTYgc19tbnRfY291bnQ7CiAgX19sZTE2IHNfbWF4X21udF9jb3VudDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX19sZTE2IHNfbWFnaWM7CiAgX19sZTE2IHNfc3RhdGU7CiAgX19sZTE2IHNfZXJyb3JzOwogIF9fbGUxNiBzX21pbm9yX3Jldl9sZXZlbDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgIF9fbGUzMiBzX2xhc3RjaGVjazsKICBfX2xlMzIgc19jaGVja2ludGVydmFsOwogIF9fbGUzMiBzX2NyZWF0b3Jfb3M7CiAgX19sZTMyIHNfcmV2X2xldmVsOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICAgX19sZTE2IHNfZGVmX3Jlc3VpZDsKICBfX2xlMTYgc19kZWZfcmVzZ2lkOwotCiAgX19sZTMyIHNfZmlyc3RfaW5vOwogIF9fbGUxNiBzX2lub2RlX3NpemU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fbGUxNiBzX2Jsb2NrX2dyb3VwX25yOwogIF9fbGUzMiBzX2ZlYXR1cmVfY29tcGF0OwogICBfX2xlMzIgc19mZWF0dXJlX2luY29tcGF0OwogIF9fbGUzMiBzX2ZlYXR1cmVfcm9fY29tcGF0OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICAgX191OCBzX3V1aWRbMTZdOwogICBjaGFyIHNfdm9sdW1lX25hbWVbMTZdOwogICBjaGFyIHNfbGFzdF9tb3VudGVkWzY0XTsKICAgX19sZTMyIHNfYWxnb3JpdGhtX3VzYWdlX2JpdG1hcDsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IHNfcHJlYWxsb2NfYmxvY2tzOwogIF9fdTggc19wcmVhbGxvY19kaXJfYmxvY2tzOwogIF9fdTE2IHNfcmVzZXJ2ZWRfZ2R0X2Jsb2NrczsKLQogICBfX3U4IHNfam91cm5hbF91dWlkWzE2XTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgIF9fbGUzMiBzX2pvdXJuYWxfaW51bTsKICBfX2xlMzIgc19qb3VybmFsX2RldjsKICBfX2xlMzIgc19sYXN0X29ycGhhbjsKICBfX2xlMzIgc19oYXNoX3NlZWRbNF07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTggc19kZWZfaGFzaF92ZXJzaW9uOwogIF9fdTggc19yZXNlcnZlZF9jaGFyX3BhZDsKICBfX3UxNiBzX3Jlc2VydmVkX3dvcmRfcGFkOwogIF9fbGUzMiBzX2RlZmF1bHRfbW91bnRfb3B0czsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX19sZTMyIHNfZmlyc3RfbWV0YV9iZzsKICBfX3UzMiBzX3Jlc2VydmVkWzE5MF07CiB9OwotCiAjZGVmaW5lIEVYVDNfU0Ioc2IpIChzYikKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTkVYVF9PUlBIQU4oaW5vZGUpIEVYVDNfSShpbm9kZSktPmlfZHRpbWUKLQogI2RlZmluZSBFWFQzX09TX0xJTlVYIDAKICNkZWZpbmUgRVhUM19PU19IVVJEIDEKICNkZWZpbmUgRVhUM19PU19NQVNJWCAyCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBFWFQzX09TX0ZSRUVCU0QgMwogI2RlZmluZSBFWFQzX09TX0xJVEVTIDQKLQotI2RlZmluZSBFWFQzX0dPT0RfT0xEX1JFViAwICAKLSNkZWZpbmUgRVhUM19EWU5BTUlDX1JFViAxICAKLQorI2RlZmluZSBFWFQzX0dPT0RfT0xEX1JFViAwCisjZGVmaW5lIEVYVDNfRFlOQU1JQ19SRVYgMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRVhUM19DVVJSRU5UX1JFViBFWFQzX0dPT0RfT0xEX1JFVgogI2RlZmluZSBFWFQzX01BWF9TVVBQX1JFViBFWFQzX0RZTkFNSUNfUkVWCi0KICNkZWZpbmUgRVhUM19HT09EX09MRF9JTk9ERV9TSVpFIDEyOAotCiAjZGVmaW5lIEVYVDNfSEFTX0NPTVBBVF9GRUFUVVJFKHNiLG1hc2spICAgKCBFWFQzX1NCKHNiKS0+c19lcy0+c19mZWF0dXJlX2NvbXBhdCAmIGNwdV90b19sZTMyKG1hc2spICkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEVYVDNfSEFTX1JPX0NPTVBBVF9GRUFUVVJFKHNiLG1hc2spICAgKCBFWFQzX1NCKHNiKS0+c19lcy0+c19mZWF0dXJlX3JvX2NvbXBhdCAmIGNwdV90b19sZTMyKG1hc2spICkKICNkZWZpbmUgRVhUM19IQVNfSU5DT01QQVRfRkVBVFVSRShzYixtYXNrKSAgICggRVhUM19TQihzYiktPnNfZXMtPnNfZmVhdHVyZV9pbmNvbXBhdCAmIGNwdV90b19sZTMyKG1hc2spICkKICNkZWZpbmUgRVhUM19TRVRfQ09NUEFUX0ZFQVRVUkUoc2IsbWFzaykgICBFWFQzX1NCKHNiKS0+c19lcy0+c19mZWF0dXJlX2NvbXBhdCB8PSBjcHVfdG9fbGUzMihtYXNrKQogI2RlZmluZSBFWFQzX1NFVF9ST19DT01QQVRfRkVBVFVSRShzYixtYXNrKSAgIEVYVDNfU0Ioc2IpLT5zX2VzLT5zX2ZlYXR1cmVfcm9fY29tcGF0IHw9IGNwdV90b19sZTMyKG1hc2spCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBFWFQzX1NFVF9JTkNPTVBBVF9GRUFUVVJFKHNiLG1hc2spICAgRVhUM19TQihzYiktPnNfZXMtPnNfZmVhdHVyZV9pbmNvbXBhdCB8PSBjcHVfdG9fbGUzMihtYXNrKQogI2RlZmluZSBFWFQzX0NMRUFSX0NPTVBBVF9GRUFUVVJFKHNiLG1hc2spICAgRVhUM19TQihzYiktPnNfZXMtPnNfZmVhdHVyZV9jb21wYXQgJj0gfmNwdV90b19sZTMyKG1hc2spCiAjZGVmaW5lIEVYVDNfQ0xFQVJfUk9fQ09NUEFUX0ZFQVRVUkUoc2IsbWFzaykgICBFWFQzX1NCKHNiKS0+c19lcy0+c19mZWF0dXJlX3JvX2NvbXBhdCAmPSB+Y3B1X3RvX2xlMzIobWFzaykKICNkZWZpbmUgRVhUM19DTEVBUl9JTkNPTVBBVF9GRUFUVVJFKHNiLG1hc2spICAgRVhUM19TQihzYiktPnNfZXMtPnNfZmVhdHVyZV9pbmNvbXBhdCAmPSB+Y3B1X3RvX2xlMzIobWFzaykKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRVhUM19GRUFUVVJFX0NPTVBBVF9ESVJfUFJFQUxMT0MgMHgwMDAxCiAjZGVmaW5lIEVYVDNfRkVBVFVSRV9DT01QQVRfSU1BR0lDX0lOT0RFUyAweDAwMDIKICNkZWZpbmUgRVhUM19GRUFUVVJFX0NPTVBBVF9IQVNfSk9VUk5BTCAweDAwMDQKICNkZWZpbmUgRVhUM19GRUFUVVJFX0NPTVBBVF9FWFRfQVRUUiAweDAwMDgKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEVYVDNfRkVBVFVSRV9DT01QQVRfUkVTSVpFX0lOT0RFIDB4MDAxMAogI2RlZmluZSBFWFQzX0ZFQVRVUkVfQ09NUEFUX0RJUl9JTkRFWCAweDAwMjAKLQogI2RlZmluZSBFWFQzX0ZFQVRVUkVfUk9fQ09NUEFUX1NQQVJTRV9TVVBFUiAweDAwMDEKICNkZWZpbmUgRVhUM19GRUFUVVJFX1JPX0NPTVBBVF9MQVJHRV9GSUxFIDB4MDAwMgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRVhUM19GRUFUVVJFX1JPX0NPTVBBVF9CVFJFRV9ESVIgMHgwMDA0Ci0KICNkZWZpbmUgRVhUM19GRUFUVVJFX0lOQ09NUEFUX0NPTVBSRVNTSU9OIDB4MDAwMQogI2RlZmluZSBFWFQzX0ZFQVRVUkVfSU5DT01QQVRfRklMRVRZUEUgMHgwMDAyCi0jZGVmaW5lIEVYVDNfRkVBVFVSRV9JTkNPTVBBVF9SRUNPVkVSIDB4MDAwNCAgCi0jZGVmaW5lIEVYVDNfRkVBVFVSRV9JTkNPTVBBVF9KT1VSTkFMX0RFViAweDAwMDggIAorI2RlZmluZSBFWFQzX0ZFQVRVUkVfSU5DT01QQVRfUkVDT1ZFUiAweDAwMDQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEVYVDNfRkVBVFVSRV9JTkNPTVBBVF9KT1VSTkFMX0RFViAweDAwMDgKICNkZWZpbmUgRVhUM19GRUFUVVJFX0lOQ09NUEFUX01FVEFfQkcgMHgwMDEwCi0KICNkZWZpbmUgRVhUM19GRUFUVVJFX0NPTVBBVF9TVVBQIEVYVDJfRkVBVFVSRV9DT01QQVRfRVhUX0FUVFIKICNkZWZpbmUgRVhUM19GRUFUVVJFX0lOQ09NUEFUX1NVUFAgKEVYVDNfRkVBVFVSRV9JTkNPTVBBVF9GSUxFVFlQRXwgICBFWFQzX0ZFQVRVUkVfSU5DT01QQVRfUkVDT1ZFUnwgICBFWFQzX0ZFQVRVUkVfSU5DT01QQVRfTUVUQV9CRykKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEVYVDNfRkVBVFVSRV9ST19DT01QQVRfU1VQUCAoRVhUM19GRUFUVVJFX1JPX0NPTVBBVF9TUEFSU0VfU1VQRVJ8ICAgRVhUM19GRUFUVVJFX1JPX0NPTVBBVF9MQVJHRV9GSUxFfCAgIEVYVDNfRkVBVFVSRV9ST19DT01QQVRfQlRSRUVfRElSKQotCiAjZGVmaW5lIEVYVDNfREVGX1JFU1VJRCAwCiAjZGVmaW5lIEVYVDNfREVGX1JFU0dJRCAwCi0KICNkZWZpbmUgRVhUM19ERUZNX0RFQlVHIDB4MDAwMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRVhUM19ERUZNX0JTREdST1VQUyAweDAwMDIKICNkZWZpbmUgRVhUM19ERUZNX1hBVFRSX1VTRVIgMHgwMDA0CiAjZGVmaW5lIEVYVDNfREVGTV9BQ0wgMHgwMDA4CiAjZGVmaW5lIEVYVDNfREVGTV9VSUQxNiAweDAwMTAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEVYVDNfREVGTV9KTU9ERSAweDAwNjAKICNkZWZpbmUgRVhUM19ERUZNX0pNT0RFX0RBVEEgMHgwMDIwCiAjZGVmaW5lIEVYVDNfREVGTV9KTU9ERV9PUkRFUkVEIDB4MDA0MAogI2RlZmluZSBFWFQzX0RFRk1fSk1PREVfV0JBQ0sgMHgwMDYwCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEVYVDNfTkFNRV9MRU4gMjU1Ci0KIHN0cnVjdCBleHQzX2Rpcl9lbnRyeSB7CiAgX19sZTMyIGlub2RlOwogIF9fbGUxNiByZWNfbGVuOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX2xlMTYgbmFtZV9sZW47CiAgY2hhciBuYW1lW0VYVDNfTkFNRV9MRU5dOwogfTsKLQogc3RydWN0IGV4dDNfZGlyX2VudHJ5XzIgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX2xlMzIgaW5vZGU7CiAgX19sZTE2IHJlY19sZW47CiAgX191OCBuYW1lX2xlbjsKICBfX3U4IGZpbGVfdHlwZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgY2hhciBuYW1lW0VYVDNfTkFNRV9MRU5dOwogfTsKLQogI2RlZmluZSBFWFQzX0ZUX1VOS05PV04gMAogI2RlZmluZSBFWFQzX0ZUX1JFR19GSUxFIDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEVYVDNfRlRfRElSIDIKICNkZWZpbmUgRVhUM19GVF9DSFJERVYgMwogI2RlZmluZSBFWFQzX0ZUX0JMS0RFViA0CiAjZGVmaW5lIEVYVDNfRlRfRklGTyA1CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBFWFQzX0ZUX1NPQ0sgNgogI2RlZmluZSBFWFQzX0ZUX1NZTUxJTksgNwotCiAjZGVmaW5lIEVYVDNfRlRfTUFYIDgKLQogI2RlZmluZSBFWFQzX0RJUl9QQUQgNAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRVhUM19ESVJfUk9VTkQgKEVYVDNfRElSX1BBRCAtIDEpCiAjZGVmaW5lIEVYVDNfRElSX1JFQ19MRU4obmFtZV9sZW4pICgoKG5hbWVfbGVuKSArIDggKyBFWFQzX0RJUl9ST1VORCkgJiAgIH5FWFQzX0RJUl9ST1VORCkKLQogI2RlZmluZSBpc19keChkaXIpIDAKICNkZWZpbmUgRVhUM19ESVJfTElOS19NQVgoZGlyKSAoKGRpciktPmlfbmxpbmsgPj0gRVhUM19MSU5LX01BWCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEVYVDNfRElSX0xJTktfRU1QVFkoZGlyKSAoKGRpciktPmlfbmxpbmsgPT0gMikKLQogI2RlZmluZSBEWF9IQVNIX0xFR0FDWSAwCiAjZGVmaW5lIERYX0hBU0hfSEFMRl9NRDQgMQogI2RlZmluZSBEWF9IQVNIX1RFQSAyCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9mYWR2aXNlLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvZmFkdmlzZS5oCmluZGV4IDI1YTBhNGMuLjNjZmE1OTggMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9mYWR2aXNlLmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2ZhZHZpc2UuaApAQCAtNywyMiArNywyOSBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgRkFEVklTRV9IX0lOQ0xVREVECiAjZGVmaW5lIEZBRFZJU0VfSF9JTkNMVURFRAotCi0jZGVmaW5lIFBPU0lYX0ZBRFZfTk9STUFMIDAgIAotI2RlZmluZSBQT1NJWF9GQURWX1JBTkRPTSAxICAKLSNkZWZpbmUgUE9TSVhfRkFEVl9TRVFVRU5USUFMIDIgIAotI2RlZmluZSBQT1NJWF9GQURWX1dJTExORUVEIDMgIAotCisjZGVmaW5lIFBPU0lYX0ZBRFZfTk9STUFMIDAKKyNkZWZpbmUgUE9TSVhfRkFEVl9SQU5ET00gMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgUE9TSVhfRkFEVl9TRVFVRU5USUFMIDIKKyNkZWZpbmUgUE9TSVhfRkFEVl9XSUxMTkVFRCAzCiAjaWZkZWYgX19zMzkweF9fCi0jZGVmaW5lIFBPU0lYX0ZBRFZfRE9OVE5FRUQgNiAgCi0jZGVmaW5lIFBPU0lYX0ZBRFZfTk9SRVVTRSA3ICAKKyNkZWZpbmUgUE9TSVhfRkFEVl9ET05UTkVFRCA2CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBQT1NJWF9GQURWX05PUkVVU0UgNwogI2Vsc2UKLSNkZWZpbmUgUE9TSVhfRkFEVl9ET05UTkVFRCA0ICAKLSNkZWZpbmUgUE9TSVhfRkFEVl9OT1JFVVNFIDUgIAorI2RlZmluZSBQT1NJWF9GQURWX0RPTlRORUVEIDQKKyNkZWZpbmUgUE9TSVhfRkFEVl9OT1JFVVNFIDUKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZW5kaWYKLQogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvZmIuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9mYi5oCm9sZCBtb2RlIDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKaW5kZXggNmZkMzQ2OC4uYzM2NzZiNgotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvZmIuaAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvZmIuaApAQCAtMjEsNyArMjEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBGQl9NQVggMzIgIAorI2RlZmluZSBGQl9NQVggMzIKICNkZWZpbmUgRkJJT0dFVF9WU0NSRUVOSU5GTyAweDQ2MDAKICNkZWZpbmUgRkJJT1BVVF9WU0NSRUVOSU5GTyAweDQ2MDEKICNkZWZpbmUgRkJJT0dFVF9GU0NSRUVOSU5GTyAweDQ2MDIKQEAgLTMzLDcgKzMzLDcgQEAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEZCSU9HRVRfQ09OMkZCTUFQIDB4NDYwRgogI2RlZmluZSBGQklPUFVUX0NPTjJGQk1BUCAweDQ2MTAKLSNkZWZpbmUgRkJJT0JMQU5LIDB4NDYxMSAgCisjZGVmaW5lIEZCSU9CTEFOSyAweDQ2MTEKICNkZWZpbmUgRkJJT0dFVF9WQkxBTksgX0lPUignRicsIDB4MTIsIHN0cnVjdCBmYl92YmxhbmspCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBGQklPX0FMTE9DIDB4NDYxMwpAQCAtNDQsMTU5ICs0NCwxNjQgQEAKICNkZWZpbmUgRkJJT1BVVF9NT0RFSU5GTyAweDQ2MTcKICNkZWZpbmUgRkJJT0dFVF9ESVNQSU5GTyAweDQ2MTgKICNkZWZpbmUgRkJJT19XQUlURk9SVlNZTkMgX0lPVygnRicsIDB4MjAsIF9fdTMyKQotI2RlZmluZSBGQl9UWVBFX1BBQ0tFRF9QSVhFTFMgMCAgCisjZGVmaW5lIEZCX1RZUEVfUEFDS0VEX1BJWEVMUyAwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBGQl9UWVBFX1BMQU5FUyAxICAKLSNkZWZpbmUgRkJfVFlQRV9JTlRFUkxFQVZFRF9QTEFORVMgMiAgCi0jZGVmaW5lIEZCX1RZUEVfVEVYVCAzICAKLSNkZWZpbmUgRkJfVFlQRV9WR0FfUExBTkVTIDQgIAorI2RlZmluZSBGQl9UWVBFX1BMQU5FUyAxCisjZGVmaW5lIEZCX1RZUEVfSU5URVJMRUFWRURfUExBTkVTIDIKKyNkZWZpbmUgRkJfVFlQRV9URVhUIDMKKyNkZWZpbmUgRkJfVFlQRV9WR0FfUExBTkVTIDQKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIEZCX0FVWF9URVhUX01EQSAwICAKLSNkZWZpbmUgRkJfQVVYX1RFWFRfQ0dBIDEgIAotI2RlZmluZSBGQl9BVVhfVEVYVF9TM19NTUlPIDIgIAotI2RlZmluZSBGQl9BVVhfVEVYVF9NR0FfU1RFUDE2IDMgIAorI2RlZmluZSBGQl9UWVBFX0ZPVVJDQyA1CisjZGVmaW5lIEZCX0FVWF9URVhUX01EQSAwCisjZGVmaW5lIEZCX0FVWF9URVhUX0NHQSAxCisjZGVmaW5lIEZCX0FVWF9URVhUX1MzX01NSU8gMgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgRkJfQVVYX1RFWFRfTUdBX1NURVA4IDQgIAotI2RlZmluZSBGQl9BVVhfVEVYVF9TVkdBX0dST1VQIDggIAotI2RlZmluZSBGQl9BVVhfVEVYVF9TVkdBX01BU0sgNyAgCi0jZGVmaW5lIEZCX0FVWF9URVhUX1NWR0FfU1RFUDIgOCAgCisjZGVmaW5lIEZCX0FVWF9URVhUX01HQV9TVEVQMTYgMworI2RlZmluZSBGQl9BVVhfVEVYVF9NR0FfU1RFUDggNAorI2RlZmluZSBGQl9BVVhfVEVYVF9TVkdBX0dST1VQIDgKKyNkZWZpbmUgRkJfQVVYX1RFWFRfU1ZHQV9NQVNLIDcKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIEZCX0FVWF9URVhUX1NWR0FfU1RFUDQgOSAgCi0jZGVmaW5lIEZCX0FVWF9URVhUX1NWR0FfU1RFUDggMTAgIAotI2RlZmluZSBGQl9BVVhfVEVYVF9TVkdBX1NURVAxNiAxMSAgCi0jZGVmaW5lIEZCX0FVWF9URVhUX1NWR0FfTEFTVCAxNSAgCisjZGVmaW5lIEZCX0FVWF9URVhUX1NWR0FfU1RFUDIgOAorI2RlZmluZSBGQl9BVVhfVEVYVF9TVkdBX1NURVA0IDkKKyNkZWZpbmUgRkJfQVVYX1RFWFRfU1ZHQV9TVEVQOCAxMAorI2RlZmluZSBGQl9BVVhfVEVYVF9TVkdBX1NURVAxNiAxMQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgRkJfQVVYX1ZHQV9QTEFORVNfVkdBNCAwICAKLSNkZWZpbmUgRkJfQVVYX1ZHQV9QTEFORVNfQ0ZCNCAxICAKLSNkZWZpbmUgRkJfQVVYX1ZHQV9QTEFORVNfQ0ZCOCAyICAKLSNkZWZpbmUgRkJfVklTVUFMX01PTk8wMSAwICAKKyNkZWZpbmUgRkJfQVVYX1RFWFRfU1ZHQV9MQVNUIDE1CisjZGVmaW5lIEZCX0FVWF9WR0FfUExBTkVTX1ZHQTQgMAorI2RlZmluZSBGQl9BVVhfVkdBX1BMQU5FU19DRkI0IDEKKyNkZWZpbmUgRkJfQVVYX1ZHQV9QTEFORVNfQ0ZCOCAyCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBGQl9WSVNVQUxfTU9OTzEwIDEgIAotI2RlZmluZSBGQl9WSVNVQUxfVFJVRUNPTE9SIDIgIAotI2RlZmluZSBGQl9WSVNVQUxfUFNFVURPQ09MT1IgMyAgCi0jZGVmaW5lIEZCX1ZJU1VBTF9ESVJFQ1RDT0xPUiA0ICAKKyNkZWZpbmUgRkJfVklTVUFMX01PTk8wMSAwCisjZGVmaW5lIEZCX1ZJU1VBTF9NT05PMTAgMQorI2RlZmluZSBGQl9WSVNVQUxfVFJVRUNPTE9SIDIKKyNkZWZpbmUgRkJfVklTVUFMX1BTRVVET0NPTE9SIDMKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIEZCX1ZJU1VBTF9TVEFUSUNfUFNFVURPQ09MT1IgNSAgCi0jZGVmaW5lIEZCX0FDQ0VMX05PTkUgMCAgCi0jZGVmaW5lIEZCX0FDQ0VMX0FUQVJJQkxJVFQgMSAgCi0jZGVmaW5lIEZCX0FDQ0VMX0FNSUdBQkxJVFQgMiAgCisjZGVmaW5lIEZCX1ZJU1VBTF9ESVJFQ1RDT0xPUiA0CisjZGVmaW5lIEZCX1ZJU1VBTF9TVEFUSUNfUFNFVURPQ09MT1IgNQorI2RlZmluZSBGQl9WSVNVQUxfRk9VUkNDIDYKKyNkZWZpbmUgRkJfQUNDRUxfTk9ORSAwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBGQl9BQ0NFTF9TM19UUklPNjQgMyAgCi0jZGVmaW5lIEZCX0FDQ0VMX05DUl83N0MzMkJMVCA0ICAKLSNkZWZpbmUgRkJfQUNDRUxfUzNfVklSR0UgNSAgCi0jZGVmaW5lIEZCX0FDQ0VMX0FUSV9NQUNINjRHWCA2ICAKKyNkZWZpbmUgRkJfQUNDRUxfQVRBUklCTElUVCAxCisjZGVmaW5lIEZCX0FDQ0VMX0FNSUdBQkxJVFQgMgorI2RlZmluZSBGQl9BQ0NFTF9TM19UUklPNjQgMworI2RlZmluZSBGQl9BQ0NFTF9OQ1JfNzdDMzJCTFQgNAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgRkJfQUNDRUxfREVDX1RHQSA3ICAKLSNkZWZpbmUgRkJfQUNDRUxfQVRJX01BQ0g2NENUIDggIAotI2RlZmluZSBGQl9BQ0NFTF9BVElfTUFDSDY0VlQgOSAgCi0jZGVmaW5lIEZCX0FDQ0VMX0FUSV9NQUNINjRHVCAxMCAgCisjZGVmaW5lIEZCX0FDQ0VMX1MzX1ZJUkdFIDUKKyNkZWZpbmUgRkJfQUNDRUxfQVRJX01BQ0g2NEdYIDYKKyNkZWZpbmUgRkJfQUNDRUxfREVDX1RHQSA3CisjZGVmaW5lIEZCX0FDQ0VMX0FUSV9NQUNINjRDVCA4CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBGQl9BQ0NFTF9TVU5fQ1JFQVRPUiAxMSAgCi0jZGVmaW5lIEZCX0FDQ0VMX1NVTl9DR1NJWCAxMiAgCi0jZGVmaW5lIEZCX0FDQ0VMX1NVTl9MRU8gMTMgIAotI2RlZmluZSBGQl9BQ0NFTF9JTVNfVFdJTlRVUkJPIDE0ICAKKyNkZWZpbmUgRkJfQUNDRUxfQVRJX01BQ0g2NFZUIDkKKyNkZWZpbmUgRkJfQUNDRUxfQVRJX01BQ0g2NEdUIDEwCisjZGVmaW5lIEZCX0FDQ0VMX1NVTl9DUkVBVE9SIDExCisjZGVmaW5lIEZCX0FDQ0VMX1NVTl9DR1NJWCAxMgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgRkJfQUNDRUxfM0RMQUJTX1BFUk1FRElBMiAxNSAgCi0jZGVmaW5lIEZCX0FDQ0VMX01BVFJPWF9NR0EyMDY0VyAxNiAgCi0jZGVmaW5lIEZCX0FDQ0VMX01BVFJPWF9NR0ExMDY0U0cgMTcgIAotI2RlZmluZSBGQl9BQ0NFTF9NQVRST1hfTUdBMjE2NFcgMTggIAorI2RlZmluZSBGQl9BQ0NFTF9TVU5fTEVPIDEzCisjZGVmaW5lIEZCX0FDQ0VMX0lNU19UV0lOVFVSQk8gMTQKKyNkZWZpbmUgRkJfQUNDRUxfM0RMQUJTX1BFUk1FRElBMiAxNQorI2RlZmluZSBGQl9BQ0NFTF9NQVRST1hfTUdBMjA2NFcgMTYKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIEZCX0FDQ0VMX01BVFJPWF9NR0EyMTY0V19BR1AgMTkgIAotI2RlZmluZSBGQl9BQ0NFTF9NQVRST1hfTUdBRzEwMCAyMCAgCi0jZGVmaW5lIEZCX0FDQ0VMX01BVFJPWF9NR0FHMjAwIDIxICAKLSNkZWZpbmUgRkJfQUNDRUxfU1VOX0NHMTQgMjIgIAorI2RlZmluZSBGQl9BQ0NFTF9NQVRST1hfTUdBMTA2NFNHIDE3CisjZGVmaW5lIEZCX0FDQ0VMX01BVFJPWF9NR0EyMTY0VyAxOAorI2RlZmluZSBGQl9BQ0NFTF9NQVRST1hfTUdBMjE2NFdfQUdQIDE5CisjZGVmaW5lIEZCX0FDQ0VMX01BVFJPWF9NR0FHMTAwIDIwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBGQl9BQ0NFTF9TVU5fQldUV08gMjMgIAotI2RlZmluZSBGQl9BQ0NFTF9TVU5fQ0dUSFJFRSAyNCAgCi0jZGVmaW5lIEZCX0FDQ0VMX1NVTl9UQ1ggMjUgIAotI2RlZmluZSBGQl9BQ0NFTF9NQVRST1hfTUdBRzQwMCAyNiAgCisjZGVmaW5lIEZCX0FDQ0VMX01BVFJPWF9NR0FHMjAwIDIxCisjZGVmaW5lIEZCX0FDQ0VMX1NVTl9DRzE0IDIyCisjZGVmaW5lIEZCX0FDQ0VMX1NVTl9CV1RXTyAyMworI2RlZmluZSBGQl9BQ0NFTF9TVU5fQ0dUSFJFRSAyNAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgRkJfQUNDRUxfTlYzIDI3ICAKLSNkZWZpbmUgRkJfQUNDRUxfTlY0IDI4ICAKLSNkZWZpbmUgRkJfQUNDRUxfTlY1IDI5ICAKLSNkZWZpbmUgRkJfQUNDRUxfQ1RfNjU1NXggMzAgIAorI2RlZmluZSBGQl9BQ0NFTF9TVU5fVENYIDI1CisjZGVmaW5lIEZCX0FDQ0VMX01BVFJPWF9NR0FHNDAwIDI2CisjZGVmaW5lIEZCX0FDQ0VMX05WMyAyNworI2RlZmluZSBGQl9BQ0NFTF9OVjQgMjgKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIEZCX0FDQ0VMXzNERlhfQkFOU0hFRSAzMSAgCi0jZGVmaW5lIEZCX0FDQ0VMX0FUSV9SQUdFMTI4IDMyICAKLSNkZWZpbmUgRkJfQUNDRUxfSUdTX0NZQkVSMjAwMCAzMyAgCi0jZGVmaW5lIEZCX0FDQ0VMX0lHU19DWUJFUjIwMTAgMzQgIAorI2RlZmluZSBGQl9BQ0NFTF9OVjUgMjkKKyNkZWZpbmUgRkJfQUNDRUxfQ1RfNjU1NXggMzAKKyNkZWZpbmUgRkJfQUNDRUxfM0RGWF9CQU5TSEVFIDMxCisjZGVmaW5lIEZCX0FDQ0VMX0FUSV9SQUdFMTI4IDMyCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBGQl9BQ0NFTF9JR1NfQ1lCRVI1MDAwIDM1ICAKLSNkZWZpbmUgRkJfQUNDRUxfU0lTX0dMQU1PVVIgMzYgIAotI2RlZmluZSBGQl9BQ0NFTF8zRExBQlNfUEVSTUVESUEzIDM3ICAKLSNkZWZpbmUgRkJfQUNDRUxfQVRJX1JBREVPTiAzOCAgCisjZGVmaW5lIEZCX0FDQ0VMX0lHU19DWUJFUjIwMDAgMzMKKyNkZWZpbmUgRkJfQUNDRUxfSUdTX0NZQkVSMjAxMCAzNAorI2RlZmluZSBGQl9BQ0NFTF9JR1NfQ1lCRVI1MDAwIDM1CisjZGVmaW5lIEZCX0FDQ0VMX1NJU19HTEFNT1VSIDM2CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBGQl9BQ0NFTF9JODEwIDM5ICAKLSNkZWZpbmUgRkJfQUNDRUxfU0lTX0dMQU1PVVJfMiA0MCAgCi0jZGVmaW5lIEZCX0FDQ0VMX1NJU19YQUJSRSA0MSAgCi0jZGVmaW5lIEZCX0FDQ0VMX0k4MzAgNDIgIAorI2RlZmluZSBGQl9BQ0NFTF8zRExBQlNfUEVSTUVESUEzIDM3CisjZGVmaW5lIEZCX0FDQ0VMX0FUSV9SQURFT04gMzgKKyNkZWZpbmUgRkJfQUNDRUxfSTgxMCAzOQorI2RlZmluZSBGQl9BQ0NFTF9TSVNfR0xBTU9VUl8yIDQwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBGQl9BQ0NFTF9OVl8xMCA0MyAgCi0jZGVmaW5lIEZCX0FDQ0VMX05WXzIwIDQ0ICAKLSNkZWZpbmUgRkJfQUNDRUxfTlZfMzAgNDUgIAotI2RlZmluZSBGQl9BQ0NFTF9OVl80MCA0NiAgCisjZGVmaW5lIEZCX0FDQ0VMX1NJU19YQUJSRSA0MQorI2RlZmluZSBGQl9BQ0NFTF9JODMwIDQyCisjZGVmaW5lIEZCX0FDQ0VMX05WXzEwIDQzCisjZGVmaW5lIEZCX0FDQ0VMX05WXzIwIDQ0CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBGQl9BQ0NFTF9YR0lfVk9MQVJJX1YgNDcgIAotI2RlZmluZSBGQl9BQ0NFTF9YR0lfVk9MQVJJX1ogNDggIAotI2RlZmluZSBGQl9BQ0NFTF9PTUFQMTYxMCA0OSAgCi0jZGVmaW5lIEZCX0FDQ0VMX1RSSURFTlRfVEdVSSA1MCAgCisjZGVmaW5lIEZCX0FDQ0VMX05WXzMwIDQ1CisjZGVmaW5lIEZCX0FDQ0VMX05WXzQwIDQ2CisjZGVmaW5lIEZCX0FDQ0VMX1hHSV9WT0xBUklfViA0NworI2RlZmluZSBGQl9BQ0NFTF9YR0lfVk9MQVJJX1ogNDgKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIEZCX0FDQ0VMX1RSSURFTlRfM0RJTUFHRSA1MSAgCi0jZGVmaW5lIEZCX0FDQ0VMX1RSSURFTlRfQkxBREUzRCA1MiAgCi0jZGVmaW5lIEZCX0FDQ0VMX1RSSURFTlRfQkxBREVYUCA1MyAgCi0jZGVmaW5lIEZCX0FDQ0VMX0NJUlJVU19BTFBJTkUgNTMgIAorI2RlZmluZSBGQl9BQ0NFTF9PTUFQMTYxMCA0OQorI2RlZmluZSBGQl9BQ0NFTF9UUklERU5UX1RHVUkgNTAKKyNkZWZpbmUgRkJfQUNDRUxfVFJJREVOVF8zRElNQUdFIDUxCisjZGVmaW5lIEZCX0FDQ0VMX1RSSURFTlRfQkxBREUzRCA1MgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgRkJfQUNDRUxfTkVPTUFHSUNfTk0yMDcwIDkwICAKLSNkZWZpbmUgRkJfQUNDRUxfTkVPTUFHSUNfTk0yMDkwIDkxICAKLSNkZWZpbmUgRkJfQUNDRUxfTkVPTUFHSUNfTk0yMDkzIDkyICAKLSNkZWZpbmUgRkJfQUNDRUxfTkVPTUFHSUNfTk0yMDk3IDkzICAKKyNkZWZpbmUgRkJfQUNDRUxfVFJJREVOVF9CTEFERVhQIDUzCisjZGVmaW5lIEZCX0FDQ0VMX0NJUlJVU19BTFBJTkUgNTMKKyNkZWZpbmUgRkJfQUNDRUxfTkVPTUFHSUNfTk0yMDcwIDkwCisjZGVmaW5lIEZCX0FDQ0VMX05FT01BR0lDX05NMjA5MCA5MQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgRkJfQUNDRUxfTkVPTUFHSUNfTk0yMTYwIDk0ICAKLSNkZWZpbmUgRkJfQUNDRUxfTkVPTUFHSUNfTk0yMjAwIDk1ICAKLSNkZWZpbmUgRkJfQUNDRUxfTkVPTUFHSUNfTk0yMjMwIDk2ICAKLSNkZWZpbmUgRkJfQUNDRUxfTkVPTUFHSUNfTk0yMzYwIDk3ICAKKyNkZWZpbmUgRkJfQUNDRUxfTkVPTUFHSUNfTk0yMDkzIDkyCisjZGVmaW5lIEZCX0FDQ0VMX05FT01BR0lDX05NMjA5NyA5MworI2RlZmluZSBGQl9BQ0NFTF9ORU9NQUdJQ19OTTIxNjAgOTQKKyNkZWZpbmUgRkJfQUNDRUxfTkVPTUFHSUNfTk0yMjAwIDk1CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBGQl9BQ0NFTF9ORU9NQUdJQ19OTTIzODAgOTggIAotI2RlZmluZSBGQl9BQ0NFTF9QWEEzWFggOTkgIAotI2RlZmluZSBGQl9BQ0NFTF9TQVZBR0U0IDB4ODAgIAotI2RlZmluZSBGQl9BQ0NFTF9TQVZBR0UzRCAweDgxICAKKyNkZWZpbmUgRkJfQUNDRUxfTkVPTUFHSUNfTk0yMjMwIDk2CisjZGVmaW5lIEZCX0FDQ0VMX05FT01BR0lDX05NMjM2MCA5NworI2RlZmluZSBGQl9BQ0NFTF9ORU9NQUdJQ19OTTIzODAgOTgKKyNkZWZpbmUgRkJfQUNDRUxfUFhBM1hYIDk5CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBGQl9BQ0NFTF9TQVZBR0UzRF9NViAweDgyICAKLSNkZWZpbmUgRkJfQUNDRUxfU0FWQUdFMjAwMCAweDgzICAKLSNkZWZpbmUgRkJfQUNDRUxfU0FWQUdFX01YX01WIDB4ODQgIAotI2RlZmluZSBGQl9BQ0NFTF9TQVZBR0VfTVggMHg4NSAgCisjZGVmaW5lIEZCX0FDQ0VMX1NBVkFHRTQgMHg4MAorI2RlZmluZSBGQl9BQ0NFTF9TQVZBR0UzRCAweDgxCisjZGVmaW5lIEZCX0FDQ0VMX1NBVkFHRTNEX01WIDB4ODIKKyNkZWZpbmUgRkJfQUNDRUxfU0FWQUdFMjAwMCAweDgzCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBGQl9BQ0NFTF9TQVZBR0VfSVhfTVYgMHg4NiAgCi0jZGVmaW5lIEZCX0FDQ0VMX1NBVkFHRV9JWCAweDg3ICAKLSNkZWZpbmUgRkJfQUNDRUxfUFJPU0FWQUdFX1BNIDB4ODggIAotI2RlZmluZSBGQl9BQ0NFTF9QUk9TQVZBR0VfS00gMHg4OSAgCisjZGVmaW5lIEZCX0FDQ0VMX1NBVkFHRV9NWF9NViAweDg0CisjZGVmaW5lIEZCX0FDQ0VMX1NBVkFHRV9NWCAweDg1CisjZGVmaW5lIEZCX0FDQ0VMX1NBVkFHRV9JWF9NViAweDg2CisjZGVmaW5lIEZCX0FDQ0VMX1NBVkFHRV9JWCAweDg3CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBGQl9BQ0NFTF9TM1RXSVNURVJfUCAweDhhICAKLSNkZWZpbmUgRkJfQUNDRUxfUzNUV0lTVEVSX0sgMHg4YiAgCi0jZGVmaW5lIEZCX0FDQ0VMX1NVUEVSU0FWQUdFIDB4OGMgIAotI2RlZmluZSBGQl9BQ0NFTF9QUk9TQVZBR0VfRERSIDB4OGQgIAorI2RlZmluZSBGQl9BQ0NFTF9QUk9TQVZBR0VfUE0gMHg4OAorI2RlZmluZSBGQl9BQ0NFTF9QUk9TQVZBR0VfS00gMHg4OQorI2RlZmluZSBGQl9BQ0NFTF9TM1RXSVNURVJfUCAweDhhCisjZGVmaW5lIEZCX0FDQ0VMX1MzVFdJU1RFUl9LIDB4OGIKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIEZCX0FDQ0VMX1BST1NBVkFHRV9ERFJLIDB4OGUgIAotI2RlZmluZSBGQl9BQ0NFTF9QVVYzX1VOSUdGWCAweGEwICAKKyNkZWZpbmUgRkJfQUNDRUxfU1VQRVJTQVZBR0UgMHg4YworI2RlZmluZSBGQl9BQ0NFTF9QUk9TQVZBR0VfRERSIDB4OGQKKyNkZWZpbmUgRkJfQUNDRUxfUFJPU0FWQUdFX0REUksgMHg4ZQorI2RlZmluZSBGQl9BQ0NFTF9QVVYzX1VOSUdGWCAweGEwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBGQl9DQVBfRk9VUkNDIDEKIHN0cnVjdCBmYl9maXhfc2NyZWVuaW5mbyB7CiAgY2hhciBpZFsxNl07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGxvbmcgc21lbV9zdGFydDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgc21lbV9sZW47CiAgX191MzIgdHlwZTsKICBfX3UzMiB0eXBlX2F1eDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgdmlzdWFsOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UxNiB4cGFuc3RlcDsKICBfX3UxNiB5cGFuc3RlcDsKICBfX3UxNiB5d3JhcHN0ZXA7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGxpbmVfbGVuZ3RoOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBsb25nIG1taW9fc3RhcnQ7CiAgX191MzIgbW1pb19sZW47CiAgX191MzIgYWNjZWw7CisgX191MTYgY2FwYWJpbGl0aWVzOwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSBfX3UxNiByZXNlcnZlZFszXTsKKyBfX3UxNiByZXNlcnZlZFsyXTsKIH07CiBzdHJ1Y3QgZmJfYml0ZmllbGQgewogIF9fdTMyIG9mZnNldDsKQEAgLTIwNCwxOTQgKzIwOSwxOTcgQEAKICBfX3UzMiBsZW5ndGg7CiAgX191MzIgbXNiX3JpZ2h0OwogfTsKLSNkZWZpbmUgRkJfTk9OU1REX0hBTSAxICAKKyNkZWZpbmUgRkJfTk9OU1REX0hBTSAxCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBGQl9OT05TVERfUkVWX1BJWF9JTl9CIDIgIAotI2RlZmluZSBGQl9BQ1RJVkFURV9OT1cgMCAgCi0jZGVmaW5lIEZCX0FDVElWQVRFX05YVE9QRU4gMSAgCi0jZGVmaW5lIEZCX0FDVElWQVRFX1RFU1QgMiAgCisjZGVmaW5lIEZCX05PTlNURF9SRVZfUElYX0lOX0IgMgorI2RlZmluZSBGQl9BQ1RJVkFURV9OT1cgMAorI2RlZmluZSBGQl9BQ1RJVkFURV9OWFRPUEVOIDEKKyNkZWZpbmUgRkJfQUNUSVZBVEVfVEVTVCAyCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBGQl9BQ1RJVkFURV9NQVNLIDE1Ci0jZGVmaW5lIEZCX0FDVElWQVRFX1ZCTCAxNiAgCi0jZGVmaW5lIEZCX0NIQU5HRV9DTUFQX1ZCTCAzMiAgCi0jZGVmaW5lIEZCX0FDVElWQVRFX0FMTCA2NCAgCisjZGVmaW5lIEZCX0FDVElWQVRFX1ZCTCAxNgorI2RlZmluZSBGQl9DSEFOR0VfQ01BUF9WQkwgMzIKKyNkZWZpbmUgRkJfQUNUSVZBVEVfQUxMIDY0CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBGQl9BQ1RJVkFURV9GT1JDRSAxMjggIAotI2RlZmluZSBGQl9BQ1RJVkFURV9JTlZfTU9ERSAyNTYgIAotI2RlZmluZSBGQl9BQ0NFTEZfVEVYVCAxICAKLSNkZWZpbmUgRkJfU1lOQ19IT1JfSElHSF9BQ1QgMSAgCisjZGVmaW5lIEZCX0FDVElWQVRFX0ZPUkNFIDEyOAorI2RlZmluZSBGQl9BQ1RJVkFURV9JTlZfTU9ERSAyNTYKKyNkZWZpbmUgRkJfQUNDRUxGX1RFWFQgMQorI2RlZmluZSBGQl9TWU5DX0hPUl9ISUdIX0FDVCAxCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBGQl9TWU5DX1ZFUlRfSElHSF9BQ1QgMiAgCi0jZGVmaW5lIEZCX1NZTkNfRVhUIDQgIAotI2RlZmluZSBGQl9TWU5DX0NPTVBfSElHSF9BQ1QgOCAgCi0jZGVmaW5lIEZCX1NZTkNfQlJPQURDQVNUIDE2ICAKKyNkZWZpbmUgRkJfU1lOQ19WRVJUX0hJR0hfQUNUIDIKKyNkZWZpbmUgRkJfU1lOQ19FWFQgNAorI2RlZmluZSBGQl9TWU5DX0NPTVBfSElHSF9BQ1QgOAorI2RlZmluZSBGQl9TWU5DX0JST0FEQ0FTVCAxNgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgRkJfU1lOQ19PTl9HUkVFTiAzMiAgCi0jZGVmaW5lIEZCX1ZNT0RFX05PTklOVEVSTEFDRUQgMCAgCi0jZGVmaW5lIEZCX1ZNT0RFX0lOVEVSTEFDRUQgMSAgCi0jZGVmaW5lIEZCX1ZNT0RFX0RPVUJMRSAyICAKKyNkZWZpbmUgRkJfU1lOQ19PTl9HUkVFTiAzMgorI2RlZmluZSBGQl9WTU9ERV9OT05JTlRFUkxBQ0VEIDAKKyNkZWZpbmUgRkJfVk1PREVfSU5URVJMQUNFRCAxCisjZGVmaW5lIEZCX1ZNT0RFX0RPVUJMRSAyCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBGQl9WTU9ERV9PRERfRkxEX0ZJUlNUIDQgIAorI2RlZmluZSBGQl9WTU9ERV9PRERfRkxEX0ZJUlNUIDQKICNkZWZpbmUgRkJfVk1PREVfTUFTSyAyNTUKLSNkZWZpbmUgRkJfVk1PREVfWVdSQVAgMjU2ICAKLSNkZWZpbmUgRkJfVk1PREVfU01PT1RIX1hQQU4gNTEyICAKKyNkZWZpbmUgRkJfVk1PREVfWVdSQVAgMjU2CisjZGVmaW5lIEZCX1ZNT0RFX1NNT09USF9YUEFOIDUxMgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgRkJfVk1PREVfQ09OVVBEQVRFIDUxMiAgCisjZGVmaW5lIEZCX1ZNT0RFX0NPTlVQREFURSA1MTIKICNkZWZpbmUgRkJfRkxBR19SQVRJT180XzMgNjQKICNkZWZpbmUgRkJfRkxBR19SQVRJT18xNl85IDEyOAogI2RlZmluZSBGQl9GTEFHX1BJWEVMX1JFUEVBVCAyNTYKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEZCX0ZMQUdfUFJFRkVSUkVEIDUxMgorI2RlZmluZSBGQl9GTEFHX0hXX0NBUEFCTEUgMTAyNAogI2RlZmluZSBGQl9ST1RBVEVfVVIgMAogI2RlZmluZSBGQl9ST1RBVEVfQ1cgMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRkJfUk9UQVRFX1VEIDIKICNkZWZpbmUgRkJfUk9UQVRFX0NDVyAzCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQSUNPUzJLSFooYSkgKDEwMDAwMDAwMDBVTC8oYSkpCiAjZGVmaW5lIEtIWjJQSUNPUyhhKSAoMTAwMDAwMDAwMFVMLyhhKSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gewogIF9fdTMyIHhyZXM7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHlyZXM7CiAgX191MzIgeHJlc192aXJ0dWFsOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiB5cmVzX3ZpcnR1YWw7CiAgX191MzIgeG9mZnNldDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgeW9mZnNldDsKICBfX3UzMiBiaXRzX3Blcl9waXhlbDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgZ3JheXNjYWxlOwogIHN0cnVjdCBmYl9iaXRmaWVsZCByZWQ7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCBmYl9iaXRmaWVsZCBncmVlbjsKICBzdHJ1Y3QgZmJfYml0ZmllbGQgYmx1ZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IGZiX2JpdGZpZWxkIHRyYW5zcDsKICBfX3UzMiBub25zdGQ7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGFjdGl2YXRlOwogIF9fdTMyIGhlaWdodDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgd2lkdGg7CiAgX191MzIgYWNjZWxfZmxhZ3M7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHBpeGNsb2NrOwogIF9fdTMyIGxlZnRfbWFyZ2luOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiByaWdodF9tYXJnaW47CiAgX191MzIgdXBwZXJfbWFyZ2luOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBsb3dlcl9tYXJnaW47CiAgX191MzIgaHN5bmNfbGVuOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiB2c3luY19sZW47CiAgX191MzIgc3luYzsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgdm1vZGU7CiAgX191MzIgcm90YXRlOwotIF9fdTMyIHJlc2VydmVkWzVdOwotfTsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MzIgY29sb3JzcGFjZTsKKyBfX3UzMiByZXNlcnZlZFs0XTsKK307CiBzdHJ1Y3QgZmJfY21hcCB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHN0YXJ0OwogIF9fdTMyIGxlbjsKICBfX3UxNiAqcmVkOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UxNiAqZ3JlZW47CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTE2ICpibHVlOwogIF9fdTE2ICp0cmFuc3A7CiB9OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBmYl9jb24yZmJtYXAgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBjb25zb2xlOwogIF9fdTMyIGZyYW1lYnVmZmVyOwogfTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFZFU0FfTk9fQkxBTktJTkcgMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVkVTQV9WU1lOQ19TVVNQRU5EIDEKICNkZWZpbmUgVkVTQV9IU1lOQ19TVVNQRU5EIDIKICNkZWZpbmUgVkVTQV9QT1dFUkRPV04gMwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIGVudW0geworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBGQl9CTEFOS19VTkJMQU5LID0gVkVTQV9OT19CTEFOS0lORywKICBGQl9CTEFOS19OT1JNQUwgPSBWRVNBX05PX0JMQU5LSU5HICsgMSwKICBGQl9CTEFOS19WU1lOQ19TVVNQRU5EID0gVkVTQV9WU1lOQ19TVVNQRU5EICsgMSwKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgRkJfQkxBTktfSFNZTkNfU1VTUEVORCA9IFZFU0FfSFNZTkNfU1VTUEVORCArIDEsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIEZCX0JMQU5LX1BPV0VSRE9XTiA9IFZFU0FfUE9XRVJET1dOICsgMQogfTsKLSNkZWZpbmUgRkJfVkJMQU5LX1ZCTEFOS0lORyAweDAwMSAgCisjZGVmaW5lIEZCX1ZCTEFOS19WQkxBTktJTkcgMHgwMDEKKyNkZWZpbmUgRkJfVkJMQU5LX0hCTEFOS0lORyAweDAwMgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgRkJfVkJMQU5LX0hCTEFOS0lORyAweDAwMiAgCi0jZGVmaW5lIEZCX1ZCTEFOS19IQVZFX1ZCTEFOSyAweDAwNCAgCi0jZGVmaW5lIEZCX1ZCTEFOS19IQVZFX0hCTEFOSyAweDAwOCAgCi0jZGVmaW5lIEZCX1ZCTEFOS19IQVZFX0NPVU5UIDB4MDEwICAKKyNkZWZpbmUgRkJfVkJMQU5LX0hBVkVfVkJMQU5LIDB4MDA0CisjZGVmaW5lIEZCX1ZCTEFOS19IQVZFX0hCTEFOSyAweDAwOAorI2RlZmluZSBGQl9WQkxBTktfSEFWRV9DT1VOVCAweDAxMAorI2RlZmluZSBGQl9WQkxBTktfSEFWRV9WQ09VTlQgMHgwMjAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIEZCX1ZCTEFOS19IQVZFX1ZDT1VOVCAweDAyMCAgCi0jZGVmaW5lIEZCX1ZCTEFOS19IQVZFX0hDT1VOVCAweDA0MCAgCi0jZGVmaW5lIEZCX1ZCTEFOS19WU1lOQ0lORyAweDA4MCAgCi0jZGVmaW5lIEZCX1ZCTEFOS19IQVZFX1ZTWU5DIDB4MTAwICAKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEZCX1ZCTEFOS19IQVZFX0hDT1VOVCAweDA0MAorI2RlZmluZSBGQl9WQkxBTktfVlNZTkNJTkcgMHgwODAKKyNkZWZpbmUgRkJfVkJMQU5LX0hBVkVfVlNZTkMgMHgxMDAKIHN0cnVjdCBmYl92YmxhbmsgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBmbGFnczsKICBfX3UzMiBjb3VudDsKICBfX3UzMiB2Y291bnQ7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGhjb3VudDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgcmVzZXJ2ZWRbNF07CiB9OwogI2RlZmluZSBST1BfQ09QWSAwCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBST1BfWE9SIDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgZmJfY29weWFyZWEgewogIF9fdTMyIGR4OwogIF9fdTMyIGR5OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiB3aWR0aDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgaGVpZ2h0OwogIF9fdTMyIHN4OwogIF9fdTMyIHN5OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IGZiX2ZpbGxyZWN0IHsKICBfX3UzMiBkeDsKICBfX3UzMiBkeTsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgd2lkdGg7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGhlaWdodDsKICBfX3UzMiBjb2xvcjsKICBfX3UzMiByb3A7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgZmJfaW1hZ2UgewogIF9fdTMyIGR4OwogIF9fdTMyIGR5OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiB3aWR0aDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgaGVpZ2h0OwogIF9fdTMyIGZnX2NvbG9yOwogIF9fdTMyIGJnX2NvbG9yOwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IGRlcHRoOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBjb25zdCBjaGFyICpkYXRhOwogIHN0cnVjdCBmYl9jbWFwIGNtYXA7CiB9OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRkJfQ1VSX1NFVElNQUdFIDB4MDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEZCX0NVUl9TRVRQT1MgMHgwMgogI2RlZmluZSBGQl9DVVJfU0VUSE9UIDB4MDQKICNkZWZpbmUgRkJfQ1VSX1NFVENNQVAgMHgwOAotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRkJfQ1VSX1NFVFNIQVBFIDB4MTAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEZCX0NVUl9TRVRTSVpFIDB4MjAKICNkZWZpbmUgRkJfQ1VSX1NFVEFMTCAweEZGCiBzdHJ1Y3QgZmJjdXJwb3MgewotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UxNiB4LCB5OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiBzdHJ1Y3QgZmJfY3Vyc29yIHsKICBfX3UxNiBzZXQ7Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTE2IGVuYWJsZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MTYgcm9wOwogIGNvbnN0IGNoYXIgKm1hc2s7CiAgc3RydWN0IGZiY3VycG9zIGhvdDsKLS8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IGZiX2ltYWdlIGltYWdlOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiAjZW5kaWYKLQpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2ZjbnRsLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvZmNudGwuaAppbmRleCAzMjNlODdhLi42M2Q0ZWIxIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvZmNudGwuaAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvZmNudGwuaApAQCAtNywyOSArNywzNCBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX0xJTlVYX0ZDTlRMX0gKICNkZWZpbmUgX0xJTlVYX0ZDTlRMX0gKLQogI2luY2x1ZGUgPGFzbS9mY250bC5oPgotCiAjZGVmaW5lIEZfU0VUTEVBU0UgKEZfTElOVVhfU1BFQ0lGSUNfQkFTRSswKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRl9HRVRMRUFTRSAoRl9MSU5VWF9TUEVDSUZJQ19CQVNFKzEpCi0KICNkZWZpbmUgRl9OT1RJRlkgKEZfTElOVVhfU1BFQ0lGSUNfQkFTRSsyKQotCi0jZGVmaW5lIEROX0FDQ0VTUyAweDAwMDAwMDAxICAKLSNkZWZpbmUgRE5fTU9ESUZZIDB4MDAwMDAwMDIgIAotI2RlZmluZSBETl9DUkVBVEUgMHgwMDAwMDAwNCAgCi0jZGVmaW5lIEROX0RFTEVURSAweDAwMDAwMDA4ICAKLSNkZWZpbmUgRE5fUkVOQU1FIDB4MDAwMDAwMTAgIAotI2RlZmluZSBETl9BVFRSSUIgMHgwMDAwMDAyMCAgCi0jZGVmaW5lIEROX01VTFRJU0hPVCAweDgwMDAwMDAwICAKLQotI2RlZmluZSBBVF9GRENXRCAtMTAwICAKLSNkZWZpbmUgQVRfU1lNTElOS19OT0ZPTExPVyAweDEwMCAgCi0jZGVmaW5lIEFUX1JFTU9WRURJUiAweDIwMCAgCi0jZGVmaW5lIEFUX1NZTUxJTktfRk9MTE9XIDB4NDAwICAKLQorI2RlZmluZSBETl9BQ0NFU1MgMHgwMDAwMDAwMQorI2RlZmluZSBETl9NT0RJRlkgMHgwMDAwMDAwMgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgRE5fQ1JFQVRFIDB4MDAwMDAwMDQKKyNkZWZpbmUgRE5fREVMRVRFIDB4MDAwMDAwMDgKKyNkZWZpbmUgRE5fUkVOQU1FIDB4MDAwMDAwMTAKKyNkZWZpbmUgRE5fQVRUUklCIDB4MDAwMDAwMjAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEROX01VTFRJU0hPVCAweDgwMDAwMDAwCisjZGVmaW5lIEFUX0ZEQ1dEIC0xMDAKKyNkZWZpbmUgQVRfU1lNTElOS19OT0ZPTExPVyAweDEwMAorI2RlZmluZSBBVF9SRU1PVkVESVIgMHgyMDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEFUX1NZTUxJTktfRk9MTE9XIDB4NDAwCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9mZC5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2ZkLmgKaW5kZXggZjNiZWRkMS4uMTJjNzE0ZiAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2ZkLmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2ZkLmgKQEAgLTcsMjUyICs3LDI0MyBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX0xJTlVYX0ZEX0gKICNkZWZpbmUgX0xJTlVYX0ZEX0gKLQogI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBmbG9wcHlfc3RydWN0IHsKICB1bnNpZ25lZCBpbnQgc2l6ZSwKICBzZWN0LAogIGhlYWQsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHRyYWNrLAogIHN0cmV0Y2g7CiAjZGVmaW5lIEZEX1NUUkVUQ0ggMQogI2RlZmluZSBGRF9TV0FQU0lERVMgMgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRkRfWkVST0JBU0VEIDQKLQogIHVuc2lnbmVkIGNoYXIgZ2FwLAotCiAgcmF0ZSwKICNkZWZpbmUgRkRfMk0gMHg0CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBGRF9TSVpFQ09ERU1BU0sgMHgzOAogI2RlZmluZSBGRF9TSVpFQ09ERShmbG9wcHkpICgoKCgoZmxvcHB5KS0+cmF0ZSZGRF9TSVpFQ09ERU1BU0spPj4gMykrIDIpICU4KQogI2RlZmluZSBGRF9TRUNUU0laRShmbG9wcHkpICggKGZsb3BweSktPnJhdGUgJiBGRF8yTSA/ICAgNTEyIDogMTI4IDw8IEZEX1NJWkVDT0RFKGZsb3BweSkgKQogI2RlZmluZSBGRF9QRVJQIDB4NDAKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzcGVjMSwKICBmbXRfZ2FwOwogIGNvbnN0IGNoYXIgKiBuYW1lOwogfTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRkRDTFJQUk0gX0lPKDIsIDB4NDEpCi0KLSNkZWZpbmUgRkRTRVRQUk0gX0lPVygyLCAweDQyLCBzdHJ1Y3QgZmxvcHB5X3N0cnVjdCkgCisjZGVmaW5lIEZEU0VUUFJNIF9JT1coMiwgMHg0Miwgc3RydWN0IGZsb3BweV9zdHJ1Y3QpCiAjZGVmaW5lIEZEU0VUTUVESUFQUk0gRkRTRVRQUk0KLQotI2RlZmluZSBGRERFRlBSTSBfSU9XKDIsIDB4NDMsIHN0cnVjdCBmbG9wcHlfc3RydWN0KSAKKyNkZWZpbmUgRkRERUZQUk0gX0lPVygyLCAweDQzLCBzdHJ1Y3QgZmxvcHB5X3N0cnVjdCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEZER0VUUFJNIF9JT1IoMiwgMHgwNCwgc3RydWN0IGZsb3BweV9zdHJ1Y3QpCiAjZGVmaW5lIEZEREVGTUVESUFQUk0gRkRERUZQUk0KICNkZWZpbmUgRkRHRVRNRURJQVBSTSBGREdFVFBSTQotCiAjZGVmaW5lIEZETVNHT04gX0lPKDIsMHg0NSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEZETVNHT0ZGIF9JTygyLDB4NDYpCi0KLSNkZWZpbmUgRkRfRklMTF9CWVRFIDB4RjYgIAotCisjZGVmaW5lIEZEX0ZJTExfQllURSAweEY2CiBzdHJ1Y3QgZm9ybWF0X2Rlc2NyIHsKICB1bnNpZ25lZCBpbnQgZGV2aWNlLGhlYWQsdHJhY2s7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKLQogI2RlZmluZSBGREZNVEJFRyBfSU8oMiwweDQ3KQotCiAjZGVmaW5lIEZERk1UVFJLIF9JT1coMiwweDQ4LCBzdHJ1Y3QgZm9ybWF0X2Rlc2NyKQotCiAjZGVmaW5lIEZERk1URU5EIF9JTygyLDB4NDkpCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgZmxvcHB5X21heF9lcnJvcnMgewogIHVuc2lnbmVkIGludAogIGFib3J0LAogIHJlYWRfdHJhY2ssCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHJlc2V0LAogIHJlY2FsLAotCiAgcmVwb3J0aW5nOwotCiB9OwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBGRFNFVEVNU0dUUkVTSCBfSU8oMiwweDRhKQotCiAjZGVmaW5lIEZERkxVU0ggX0lPKDIsMHg0YikKLQogI2RlZmluZSBGRFNFVE1BWEVSUlMgX0lPVygyLCAweDRjLCBzdHJ1Y3QgZmxvcHB5X21heF9lcnJvcnMpCiAjZGVmaW5lIEZER0VUTUFYRVJSUyBfSU9SKDIsIDB4MGUsIHN0cnVjdCBmbG9wcHlfbWF4X2Vycm9ycykKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHR5cGVkZWYgY2hhciBmbG9wcHlfZHJpdmVfbmFtZVsxNl07CiAjZGVmaW5lIEZER0VURFJWVFlQIF9JT1IoMiwgMHgwZiwgZmxvcHB5X2RyaXZlX25hbWUpCi0KIHN0cnVjdCBmbG9wcHlfZHJpdmVfcGFyYW1zIHsKICBzaWduZWQgY2hhciBjbW9zOwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGxvbmcgbWF4X2R0cjsKICB1bnNpZ25lZCBsb25nIGhsdDsKICB1bnNpZ25lZCBsb25nIGh1dDsKICB1bnNpZ25lZCBsb25nIHNydDsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBsb25nIHNwaW51cDsKICB1bnNpZ25lZCBsb25nIHNwaW5kb3duOwogIHVuc2lnbmVkIGNoYXIgc3BpbmRvd25fb2Zmc2V0OwogIHVuc2lnbmVkIGNoYXIgc2VsZWN0X2RlbGF5OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBjaGFyIHJwczsKICB1bnNpZ25lZCBjaGFyIHRyYWNrczsKICB1bnNpZ25lZCBsb25nIHRpbWVvdXQ7Ci0KICB1bnNpZ25lZCBjaGFyIGludGVybGVhdmVfc2VjdDsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgZmxvcHB5X21heF9lcnJvcnMgbWF4X2Vycm9yczsKLQogIGNoYXIgZmxhZ3M7Ci0KICNkZWZpbmUgRlREX01TRyAweDEwCiAjZGVmaW5lIEZEX0JST0tFTl9EQ0wgMHgyMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRkRfREVCVUcgMHgwMgogI2RlZmluZSBGRF9TSUxFTlRfRENMX0NMRUFSIDB4NAotI2RlZmluZSBGRF9JTlZFUlRFRF9EQ0wgMHg4MCAgCi0KKyNkZWZpbmUgRkRfSU5WRVJURURfRENMIDB4ODAKICBjaGFyIHJlYWRfdHJhY2s7Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc2hvcnQgYXV0b2RldGVjdFs4XTsKLQogIGludCBjaGVja2ZyZXE7CiAgaW50IG5hdGl2ZV9mb3JtYXQ7CiB9OwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogZW51bSB7CiAgRkRfTkVFRF9UV0FERExFX0JJVCwKICBGRF9WRVJJRllfQklULAogIEZEX0RJU0tfTkVXQ0hBTkdFX0JJVCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgRkRfVU5VU0VEX0JJVCwKICBGRF9ESVNLX0NIQU5HRURfQklULAogIEZEX0RJU0tfV1JJVEFCTEVfQklUCiB9OwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBGRFNFVERSVlBSTSBfSU9XKDIsIDB4OTAsIHN0cnVjdCBmbG9wcHlfZHJpdmVfcGFyYW1zKQogI2RlZmluZSBGREdFVERSVlBSTSBfSU9SKDIsIDB4MTEsIHN0cnVjdCBmbG9wcHlfZHJpdmVfcGFyYW1zKQotCiBzdHJ1Y3QgZmxvcHB5X2RyaXZlX3N0cnVjdCB7CiAgdW5zaWduZWQgbG9uZyBmbGFnczsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRkRfTkVFRF9UV0FERExFICgxIDw8IEZEX05FRURfVFdBRERMRV9CSVQpCiAjZGVmaW5lIEZEX1ZFUklGWSAoMSA8PCBGRF9WRVJJRllfQklUKQogI2RlZmluZSBGRF9ESVNLX05FV0NIQU5HRSAoMSA8PCBGRF9ESVNLX05FV0NIQU5HRV9CSVQpCiAjZGVmaW5lIEZEX0RJU0tfQ0hBTkdFRCAoMSA8PCBGRF9ESVNLX0NIQU5HRURfQklUKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRkRfRElTS19XUklUQUJMRSAoMSA8PCBGRF9ESVNLX1dSSVRBQkxFX0JJVCkKLQogIHVuc2lnbmVkIGxvbmcgc3BpbnVwX2RhdGU7CiAgdW5zaWduZWQgbG9uZyBzZWxlY3RfZGF0ZTsKICB1bnNpZ25lZCBsb25nIGZpcnN0X3JlYWRfZGF0ZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc2hvcnQgcHJvYmVkX2Zvcm1hdDsKICBzaG9ydCB0cmFjazsKICBzaG9ydCBtYXhibG9jazsKICBzaG9ydCBtYXh0cmFjazsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgaW50IGdlbmVyYXRpb247Ci0KICBpbnQga2VlcF9kYXRhOwotCiAgaW50IGZkX3JlZjsKICBpbnQgZmRfZGV2aWNlOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBsb25nIGxhc3RfY2hlY2tlZDsKLQogIGNoYXIgKmRtYWJ1ZjsKICBpbnQgYnVmYmxvY2tzOwogfTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRkRHRVREUlZTVEFUIF9JT1IoMiwgMHgxMiwgc3RydWN0IGZsb3BweV9kcml2ZV9zdHJ1Y3QpCiAjZGVmaW5lIEZEUE9MTERSVlNUQVQgX0lPUigyLCAweDEzLCBzdHJ1Y3QgZmxvcHB5X2RyaXZlX3N0cnVjdCkKLQogZW51bSByZXNldF9tb2RlIHsKICBGRF9SRVNFVF9JRl9ORUVERUQsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIEZEX1JFU0VUX0lGX1JBV0NNRCwKICBGRF9SRVNFVF9BTFdBWVMKIH07CiAjZGVmaW5lIEZEUkVTRVQgX0lPKDIsIDB4NTQpCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgZmxvcHB5X2ZkY19zdGF0ZSB7CiAgaW50IHNwZWMxOwogIGludCBzcGVjMjsKICBpbnQgZHRyOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBjaGFyIHZlcnNpb247CiAgdW5zaWduZWQgY2hhciBkb3I7CiAgdW5zaWduZWQgbG9uZyBhZGRyZXNzOwogIHVuc2lnbmVkIGludCByYXdjbWQ6MjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgaW50IHJlc2V0OjE7CiAgdW5zaWduZWQgaW50IG5lZWRfY29uZmlndXJlOjE7CiAgdW5zaWduZWQgaW50IHBlcnBfbW9kZToyOwogIHVuc2lnbmVkIGludCBoYXNfZmlmbzoxOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBpbnQgZHJpdmVyX3ZlcnNpb247CiAjZGVmaW5lIEZEX0RSSVZFUl9WRVJTSU9OIDB4MTAwCi0KICB1bnNpZ25lZCBjaGFyIHRyYWNrWzRdOwotCiB9OwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBGREdFVEZEQ1NUQVQgX0lPUigyLCAweDE1LCBzdHJ1Y3QgZmxvcHB5X2ZkY19zdGF0ZSkKLQogc3RydWN0IGZsb3BweV93cml0ZV9lcnJvcnMgewotCiAgdW5zaWduZWQgaW50IHdyaXRlX2Vycm9yczsKLQogIHVuc2lnbmVkIGxvbmcgZmlyc3RfZXJyb3Jfc2VjdG9yOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBpbnQgZmlyc3RfZXJyb3JfZ2VuZXJhdGlvbjsKICB1bnNpZ25lZCBsb25nIGxhc3RfZXJyb3Jfc2VjdG9yOwogIGludCBsYXN0X2Vycm9yX2dlbmVyYXRpb247Ci0KICB1bnNpZ25lZCBpbnQgYmFkbmVzczsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwotCiAjZGVmaW5lIEZEV0VSUk9SQ0xSIF9JTygyLCAweDU2KQotCiAjZGVmaW5lIEZEV0VSUk9SR0VUIF9JT1IoMiwgMHgxNywgc3RydWN0IGZsb3BweV93cml0ZV9lcnJvcnMpCi0KICNkZWZpbmUgRkRIQVZFQkFUQ0hFRFJBV0NNRAotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IGZsb3BweV9yYXdfY21kIHsKICB1bnNpZ25lZCBpbnQgZmxhZ3M7CiAjZGVmaW5lIEZEX1JBV19SRUFEIDEKICNkZWZpbmUgRkRfUkFXX1dSSVRFIDIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEZEX1JBV19OT19NT1RPUiA0Ci0jZGVmaW5lIEZEX1JBV19ESVNLX0NIQU5HRSA0ICAKLSNkZWZpbmUgRkRfUkFXX0lOVFIgOCAgCi0jZGVmaW5lIEZEX1JBV19TUElOIDB4MTAgIAotI2RlZmluZSBGRF9SQVdfTk9fTU9UT1JfQUZURVIgMHgyMCAgCi0jZGVmaW5lIEZEX1JBV19ORUVEX0RJU0sgMHg0MCAgCi0jZGVmaW5lIEZEX1JBV19ORUVEX1NFRUsgMHg4MCAgCi0KLSNkZWZpbmUgRkRfUkFXX01PUkUgMHgxMDAgIAotI2RlZmluZSBGRF9SQVdfU1RPUF9JRl9GQUlMVVJFIDB4MjAwICAKLSNkZWZpbmUgRkRfUkFXX1NUT1BfSUZfU1VDQ0VTUyAweDQwMCAgCi0jZGVmaW5lIEZEX1JBV19TT0ZURkFJTFVSRSAweDgwMCAgCi0KLSNkZWZpbmUgRkRfUkFXX0ZBSUxVUkUgMHgxMDAwMCAgCi0jZGVmaW5lIEZEX1JBV19IQVJERkFJTFVSRSAweDIwMDAwICAKLQorI2RlZmluZSBGRF9SQVdfRElTS19DSEFOR0UgNAorI2RlZmluZSBGRF9SQVdfSU5UUiA4CisjZGVmaW5lIEZEX1JBV19TUElOIDB4MTAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEZEX1JBV19OT19NT1RPUl9BRlRFUiAweDIwCisjZGVmaW5lIEZEX1JBV19ORUVEX0RJU0sgMHg0MAorI2RlZmluZSBGRF9SQVdfTkVFRF9TRUVLIDB4ODAKKyNkZWZpbmUgRkRfUkFXX01PUkUgMHgxMDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEZEX1JBV19TVE9QX0lGX0ZBSUxVUkUgMHgyMDAKKyNkZWZpbmUgRkRfUkFXX1NUT1BfSUZfU1VDQ0VTUyAweDQwMAorI2RlZmluZSBGRF9SQVdfU09GVEZBSUxVUkUgMHg4MDAKKyNkZWZpbmUgRkRfUkFXX0ZBSUxVUkUgMHgxMDAwMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgRkRfUkFXX0hBUkRGQUlMVVJFIDB4MjAwMDAKICB2b2lkIF9fdXNlciAqZGF0YTsKICBjaGFyICprZXJuZWxfZGF0YTsKICBzdHJ1Y3QgZmxvcHB5X3Jhd19jbWQgKm5leHQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGxvbmcgbGVuZ3RoOwogIGxvbmcgcGh5c19sZW5ndGg7CiAgaW50IGJ1ZmZlcl9sZW5ndGg7Ci0KICB1bnNpZ25lZCBjaGFyIHJhdGU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGNoYXIgY21kX2NvdW50OwogIHVuc2lnbmVkIGNoYXIgY21kWzE2XTsKICB1bnNpZ25lZCBjaGFyIHJlcGx5X2NvdW50OwogIHVuc2lnbmVkIGNoYXIgcmVwbHlbMTZdOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBpbnQgdHJhY2s7CiAgaW50IHJlc3VsdGNvZGU7Ci0KICBpbnQgcmVzZXJ2ZWQxOwogIGludCByZXNlcnZlZDI7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKLQogI2RlZmluZSBGRFJBV0NNRCBfSU8oMiwgMHg1OCkKLQogI2RlZmluZSBGRFRXQURETEUgX0lPKDIsIDB4NTkpCi0KICNkZWZpbmUgRkRFSkVDVCBfSU8oMiwgMHg1YSkKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2ZpbGUuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9maWxlLmgKaW5kZXggODdlNTcwYi4uNTUyNzY4ZSAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2ZpbGUuaAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvZmlsZS5oCkBAIC03LDU4ICs3LDYwIEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfX0xJTlVYX0ZJTEVfSAogI2RlZmluZSBfX0xJTlVYX0ZJTEVfSAotCiAjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgogI2luY2x1ZGUgPGxpbnV4L3Bvc2l4X3R5cGVzLmg+CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9yY3VwZGF0ZS5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE5SX09QRU5fREVGQVVMVCBCSVRTX1BFUl9MT05HCi0KIHN0cnVjdCBlbWJlZGRlZF9mZF9zZXQgewogIHVuc2lnbmVkIGxvbmcgZmRzX2JpdHNbMV07CiB9OwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBFTUJFRERFRF9GRF9TRVRfU0laRSAoQklUU19QRVJfQllURSAqIHNpemVvZihzdHJ1Y3QgZW1iZWRkZWRfZmRfc2V0KSkKLQogc3RydWN0IGZkdGFibGUgewogIHVuc2lnbmVkIGludCBtYXhfZmRzOwogIGludCBtYXhfZmRzZXQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCBmaWxlICoqIGZkOwogIGZkX3NldCAqY2xvc2Vfb25fZXhlYzsKICBmZF9zZXQgKm9wZW5fZmRzOwogIHN0cnVjdCByY3VfaGVhZCByY3U7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCBmaWxlc19zdHJ1Y3QgKmZyZWVfZmlsZXM7CiAgc3RydWN0IGZkdGFibGUgKm5leHQ7CiB9OwotCiBzdHJ1Y3QgZmlsZXNfc3RydWN0IHsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBhdG9taWNfdCBjb3VudDsKICBzdHJ1Y3QgZmR0YWJsZSAqZmR0OwogIHN0cnVjdCBmZHRhYmxlIGZkdGFiOwotCiAgc3BpbmxvY2tfdCBmaWxlX2xvY2sgX19fX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgaW50IG5leHRfZmQ7CiAgc3RydWN0IGVtYmVkZGVkX2ZkX3NldCBjbG9zZV9vbl9leGVjX2luaXQ7CiAgc3RydWN0IGVtYmVkZGVkX2ZkX3NldCBvcGVuX2Zkc19pbml0OwogIHN0cnVjdCBmaWxlICogZmRfYXJyYXlbTlJfT1BFTl9ERUZBVUxUXTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwotCiAjZGVmaW5lIGZpbGVzX2ZkdGFibGUoZmlsZXMpIChyY3VfZGVyZWZlcmVuY2UoKGZpbGVzKS0+ZmR0KSkKLQogc3RydWN0IGttZW1fY2FjaGU7Ci0KICNkZWZpbmUgZmNoZWNrKGZkKSBmY2hlY2tfZmlsZXMoY3VycmVudC0+ZmlsZXMsIGZkKQotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IHRhc2tfc3RydWN0OwotCiBzdHJ1Y3QgZmlsZXNfc3RydWN0ICpnZXRfZmlsZXNfc3RydWN0KHN0cnVjdCB0YXNrX3N0cnVjdCAqKTsKLQogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvZmlsdGVyLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvZmlsdGVyLmgKaW5kZXggZTg1OGEwZi4uZTViMmU5NSAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2ZpbHRlci5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9maWx0ZXIuaApAQCAtNyw5OCArNywxMTggQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9fTElOVVhfRklMVEVSX0hfXwogI2RlZmluZSBfX0xJTlVYX0ZJTFRFUl9IX18KLQogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQlBGX01BSk9SX1ZFUlNJT04gMQogI2RlZmluZSBCUEZfTUlOT1JfVkVSU0lPTiAxCi0KLXN0cnVjdCBzb2NrX2ZpbHRlcgoteworc3RydWN0IHNvY2tfZmlsdGVyIHsKICBfX3UxNiBjb2RlOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IGp0OwogIF9fdTggamY7CiAgX191MzIgazsKIH07Ci0KLXN0cnVjdCBzb2NrX2Zwcm9nCi17CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworc3RydWN0IHNvY2tfZnByb2cgewogIHVuc2lnbmVkIHNob3J0IGxlbjsKICBzdHJ1Y3Qgc29ja19maWx0ZXIgX191c2VyICpmaWx0ZXI7CiB9OwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBCUEZfQ0xBU1MoY29kZSkgKChjb2RlKSAmIDB4MDcpCiAjZGVmaW5lIEJQRl9MRCAweDAwCiAjZGVmaW5lIEJQRl9MRFggMHgwMQogI2RlZmluZSBCUEZfU1QgMHgwMgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQlBGX1NUWCAweDAzCiAjZGVmaW5lIEJQRl9BTFUgMHgwNAogI2RlZmluZSBCUEZfSk1QIDB4MDUKICNkZWZpbmUgQlBGX1JFVCAweDA2CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBCUEZfTUlTQyAweDA3Ci0KICNkZWZpbmUgQlBGX1NJWkUoY29kZSkgKChjb2RlKSAmIDB4MTgpCiAjZGVmaW5lIEJQRl9XIDB4MDAKICNkZWZpbmUgQlBGX0ggMHgwOAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQlBGX0IgMHgxMAogI2RlZmluZSBCUEZfTU9ERShjb2RlKSAoKGNvZGUpICYgMHhlMCkKICNkZWZpbmUgQlBGX0lNTSAweDAwCiAjZGVmaW5lIEJQRl9BQlMgMHgyMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQlBGX0lORCAweDQwCiAjZGVmaW5lIEJQRl9NRU0gMHg2MAogI2RlZmluZSBCUEZfTEVOIDB4ODAKICNkZWZpbmUgQlBGX01TSCAweGEwCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEJQRl9PUChjb2RlKSAoKGNvZGUpICYgMHhmMCkKICNkZWZpbmUgQlBGX0FERCAweDAwCiAjZGVmaW5lIEJQRl9TVUIgMHgxMAogI2RlZmluZSBCUEZfTVVMIDB4MjAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEJQRl9ESVYgMHgzMAogI2RlZmluZSBCUEZfT1IgMHg0MAogI2RlZmluZSBCUEZfQU5EIDB4NTAKICNkZWZpbmUgQlBGX0xTSCAweDYwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBCUEZfUlNIIDB4NzAKICNkZWZpbmUgQlBGX05FRyAweDgwCiAjZGVmaW5lIEJQRl9KQSAweDAwCiAjZGVmaW5lIEJQRl9KRVEgMHgxMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQlBGX0pHVCAweDIwCiAjZGVmaW5lIEJQRl9KR0UgMHgzMAogI2RlZmluZSBCUEZfSlNFVCAweDQwCiAjZGVmaW5lIEJQRl9TUkMoY29kZSkgKChjb2RlKSAmIDB4MDgpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBCUEZfSyAweDAwCiAjZGVmaW5lIEJQRl9YIDB4MDgKLQogI2RlZmluZSBCUEZfUlZBTChjb2RlKSAoKGNvZGUpICYgMHgxOCkKICNkZWZpbmUgQlBGX0EgMHgxMAotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBCUEZfTUlTQ09QKGNvZGUpICgoY29kZSkgJiAweGY4KQogI2RlZmluZSBCUEZfVEFYIDB4MDAKICNkZWZpbmUgQlBGX1RYQSAweDgwCi0KICNpZm5kZWYgQlBGX01BWElOU05TCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBCUEZfTUFYSU5TTlMgNDA5NgogI2VuZGlmCi0KICNpZm5kZWYgQlBGX1NUTVQKICNkZWZpbmUgQlBGX1NUTVQoY29kZSwgaykgeyAodW5zaWduZWQgc2hvcnQpKGNvZGUpLCAwLCAwLCBrIH0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZW5kaWYKICNpZm5kZWYgQlBGX0pVTVAKICNkZWZpbmUgQlBGX0pVTVAoY29kZSwgaywganQsIGpmKSB7ICh1bnNpZ25lZCBzaG9ydCkoY29kZSksIGp0LCBqZiwgayB9CiAjZW5kaWYKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQlBGX01FTVdPUkRTIDE2Ci0KICNkZWZpbmUgU0tGX0FEX09GRiAoLTB4MTAwMCkKICNkZWZpbmUgU0tGX0FEX1BST1RPQ09MIDAKICNkZWZpbmUgU0tGX0FEX1BLVFRZUEUgNAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU0tGX0FEX0lGSU5ERVggOAotI2RlZmluZSBTS0ZfQURfTUFYIDEyCisjZGVmaW5lIFNLRl9BRF9OTEFUVFIgMTIKKyNkZWZpbmUgU0tGX0FEX05MQVRUUl9ORVNUIDE2CisjZGVmaW5lIFNLRl9BRF9NQVJLIDIwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBTS0ZfQURfUVVFVUUgMjQKKyNkZWZpbmUgU0tGX0FEX0hBVFlQRSAyOAorI2RlZmluZSBTS0ZfQURfUlhIQVNIIDMyCisjZGVmaW5lIFNLRl9BRF9DUFUgMzYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFNLRl9BRF9BTFVfWE9SX1ggNDAKKyNkZWZpbmUgU0tGX0FEX01BWCA0NAogI2RlZmluZSBTS0ZfTkVUX09GRiAoLTB4MTAwMDAwKQogI2RlZmluZSBTS0ZfTExfT0ZGICgtMHgyMDAwMDApCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9mcy5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2ZzLmgKaW5kZXggOGQzNzViNS4uNTM4ZDBlNCAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2ZzLmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2ZzLmgKQEAgLTcsMTU2ICs3LDI3MyBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX0xJTlVYX0ZTX0gKICNkZWZpbmUgX0xJTlVYX0ZTX0gKLQogI2luY2x1ZGUgPGxpbnV4L2xpbWl0cy5oPgogI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjaW5jbHVkZSA8bGludXgvYmxrX3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICN1bmRlZiBOUl9PUEVOCi0jZGVmaW5lIE5SX09QRU4gKDEwMjQqMTAyNCkgIAotI2RlZmluZSBJTlJfT1BFTiAxMDI0ICAKLQorI2RlZmluZSBJTlJfT1BFTl9DVVIgMTAyNAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgSU5SX09QRU5fTUFYIDQwOTYKICNkZWZpbmUgQkxPQ0tfU0laRV9CSVRTIDEwCiAjZGVmaW5lIEJMT0NLX1NJWkUgKDE8PEJMT0NLX1NJWkVfQklUUykKLQotI2RlZmluZSBTRUVLX1NFVCAwICAKLSNkZWZpbmUgU0VFS19DVVIgMSAgCi0jZGVmaW5lIFNFRUtfRU5EIDIgIAotCi1zdHJ1Y3QgZmlsZXNfc3RhdF9zdHJ1Y3QgewotIGludCBucl9maWxlczsKLSBpbnQgbnJfZnJlZV9maWxlczsKLSBpbnQgbWF4X2ZpbGVzOworI2RlZmluZSBTRUVLX1NFVCAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBTRUVLX0NVUiAxCisjZGVmaW5lIFNFRUtfRU5EIDIKKyNkZWZpbmUgU0VFS19EQVRBIDMKKyNkZWZpbmUgU0VFS19IT0xFIDQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFNFRUtfTUFYIFNFRUtfSE9MRQorc3RydWN0IGZzdHJpbV9yYW5nZSB7CisgX191NjQgc3RhcnQ7CisgX191NjQgbGVuOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3U2NCBtaW5sZW47CiB9OwotCitzdHJ1Y3QgZmlsZXNfc3RhdF9zdHJ1Y3QgeworIHVuc2lnbmVkIGxvbmcgbnJfZmlsZXM7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIHVuc2lnbmVkIGxvbmcgbnJfZnJlZV9maWxlczsKKyB1bnNpZ25lZCBsb25nIG1heF9maWxlczsKK307CiBzdHJ1Y3QgaW5vZGVzX3N0YXRfdCB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGludCBucl9pbm9kZXM7CiAgaW50IG5yX3VudXNlZDsKICBpbnQgZHVtbXlbNV07CiB9OwotCi0jZGVmaW5lIE5SX0ZJTEUgODE5MiAgCi0KLSNkZWZpbmUgTUFZX0VYRUMgMQotI2RlZmluZSBNQVlfV1JJVEUgMgotI2RlZmluZSBNQVlfUkVBRCA0Ci0jZGVmaW5lIE1BWV9BUFBFTkQgOAotCi0jZGVmaW5lIEZNT0RFX1JFQUQgMQotI2RlZmluZSBGTU9ERV9XUklURSAyCi0KLSNkZWZpbmUgRk1PREVfTFNFRUsgNAotI2RlZmluZSBGTU9ERV9QUkVBRCA4Ci0jZGVmaW5lIEZNT0RFX1BXUklURSBGTU9ERV9QUkVBRCAgCi0KLSNkZWZpbmUgRk1PREVfRVhFQyAxNgotCi0jZGVmaW5lIFJXX01BU0sgMQotI2RlZmluZSBSV0FfTUFTSyAyCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBOUl9GSUxFIDgxOTIKKyNkZWZpbmUgTUFZX0VYRUMgMHgwMDAwMDAwMQorI2RlZmluZSBNQVlfV1JJVEUgMHgwMDAwMDAwMgorI2RlZmluZSBNQVlfUkVBRCAweDAwMDAwMDA0CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBNQVlfQVBQRU5EIDB4MDAwMDAwMDgKKyNkZWZpbmUgTUFZX0FDQ0VTUyAweDAwMDAwMDEwCisjZGVmaW5lIE1BWV9PUEVOIDB4MDAwMDAwMjAKKyNkZWZpbmUgTUFZX0NIRElSIDB4MDAwMDAwNDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIE1BWV9OT1RfQkxPQ0sgMHgwMDAwMDA4MAorI2RlZmluZSBGTU9ERV9SRUFEICgoX19mb3JjZSBmbW9kZV90KTB4MSkKKyNkZWZpbmUgRk1PREVfV1JJVEUgKChfX2ZvcmNlIGZtb2RlX3QpMHgyKQorI2RlZmluZSBGTU9ERV9MU0VFSyAoKF9fZm9yY2UgZm1vZGVfdCkweDQpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBGTU9ERV9QUkVBRCAoKF9fZm9yY2UgZm1vZGVfdCkweDgpCisjZGVmaW5lIEZNT0RFX1BXUklURSAoKF9fZm9yY2UgZm1vZGVfdCkweDEwKQorI2RlZmluZSBGTU9ERV9FWEVDICgoX19mb3JjZSBmbW9kZV90KTB4MjApCisjZGVmaW5lIEZNT0RFX05ERUxBWSAoKF9fZm9yY2UgZm1vZGVfdCkweDQwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgRk1PREVfRVhDTCAoKF9fZm9yY2UgZm1vZGVfdCkweDgwKQorI2RlZmluZSBGTU9ERV9XUklURV9JT0NUTCAoKF9fZm9yY2UgZm1vZGVfdCkweDEwMCkKKyNkZWZpbmUgRk1PREVfMzJCSVRIQVNIICgoX19mb3JjZSBmbW9kZV90KTB4MjAwKQorI2RlZmluZSBGTU9ERV82NEJJVEhBU0ggKChfX2ZvcmNlIGZtb2RlX3QpMHg0MDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBGTU9ERV9OT0NNVElNRSAoKF9fZm9yY2UgZm1vZGVfdCkweDgwMCkKKyNkZWZpbmUgRk1PREVfUkFORE9NICgoX19mb3JjZSBmbW9kZV90KTB4MTAwMCkKKyNkZWZpbmUgRk1PREVfVU5TSUdORURfT0ZGU0VUICgoX19mb3JjZSBmbW9kZV90KTB4MjAwMCkKKyNkZWZpbmUgRk1PREVfUEFUSCAoKF9fZm9yY2UgZm1vZGVfdCkweDQwMDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBGTU9ERV9OT05PVElGWSAoKF9fZm9yY2UgZm1vZGVfdCkweDEwMDAwMDApCisjZGVmaW5lIFJXX01BU0sgUkVRX1dSSVRFCisjZGVmaW5lIFJXQV9NQVNLIFJFUV9SQUhFQUQKICNkZWZpbmUgUkVBRCAwCi0jZGVmaW5lIFdSSVRFIDEKLSNkZWZpbmUgUkVBREEgMiAgCi0jZGVmaW5lIFNXUklURSAzICAKLSNkZWZpbmUgU1BFQ0lBTCA0ICAKLSNkZWZpbmUgUkVBRF9TWU5DIChSRUFEIHwgKDEgPDwgQklPX1JXX1NZTkMpKQotI2RlZmluZSBXUklURV9TWU5DIChXUklURSB8ICgxIDw8IEJJT19SV19TWU5DKSkKLSNkZWZpbmUgV1JJVEVfQkFSUklFUiAoKDEgPDwgQklPX1JXKSB8ICgxIDw8IEJJT19SV19CQVJSSUVSKSkKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgV1JJVEUgUldfTUFTSworI2RlZmluZSBSRUFEQSBSV0FfTUFTSworI2RlZmluZSBSRUFEX1NZTkMgKFJFQUQgfCBSRVFfU1lOQykKKyNkZWZpbmUgV1JJVEVfU1lOQyAoV1JJVEUgfCBSRVFfU1lOQyB8IFJFUV9OT0lETEUpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBXUklURV9PRElSRUNUIChXUklURSB8IFJFUV9TWU5DKQorI2RlZmluZSBXUklURV9GTFVTSCAoV1JJVEUgfCBSRVFfU1lOQyB8IFJFUV9OT0lETEUgfCBSRVFfRkxVU0gpCisjZGVmaW5lIFdSSVRFX0ZVQSAoV1JJVEUgfCBSRVFfU1lOQyB8IFJFUV9OT0lETEUgfCBSRVFfRlVBKQorI2RlZmluZSBXUklURV9GTFVTSF9GVUEgKFdSSVRFIHwgUkVRX1NZTkMgfCBSRVFfTk9JRExFIHwgUkVRX0ZMVVNIIHwgUkVRX0ZVQSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNFTF9JTiAxCiAjZGVmaW5lIFNFTF9PVVQgMgogI2RlZmluZSBTRUxfRVggNAotCi0jZGVmaW5lIEZTX1JFUVVJUkVTX0RFViAxIAorI2RlZmluZSBGU19SRVFVSVJFU19ERVYgMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRlNfQklOQVJZX01PVU5UREFUQSAyCi0jZGVmaW5lIEZTX1JFVkFMX0RPVCAxNjM4NCAgCi0jZGVmaW5lIEZTX09ERF9SRU5BTUUgMzI3NjggIAotCi0jZGVmaW5lIE1TX1JET05MWSAxICAKLSNkZWZpbmUgTVNfTk9TVUlEIDIgIAotI2RlZmluZSBNU19OT0RFViA0ICAKLSNkZWZpbmUgTVNfTk9FWEVDIDggIAotI2RlZmluZSBNU19TWU5DSFJPTk9VUyAxNiAgCi0jZGVmaW5lIE1TX1JFTU9VTlQgMzIgIAotI2RlZmluZSBNU19NQU5ETE9DSyA2NCAgCi0jZGVmaW5lIE1TX0RJUlNZTkMgMTI4ICAKLSNkZWZpbmUgTVNfTk9BVElNRSAxMDI0ICAKLSNkZWZpbmUgTVNfTk9ESVJBVElNRSAyMDQ4ICAKKyNkZWZpbmUgRlNfSEFTX1NVQlRZUEUgNAorI2RlZmluZSBGU19SRVZBTF9ET1QgMTYzODQKKyNkZWZpbmUgRlNfUkVOQU1FX0RPRVNfRF9NT1ZFIDMyNzY4CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBNU19SRE9OTFkgMQorI2RlZmluZSBNU19OT1NVSUQgMgorI2RlZmluZSBNU19OT0RFViA0CisjZGVmaW5lIE1TX05PRVhFQyA4CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBNU19TWU5DSFJPTk9VUyAxNgorI2RlZmluZSBNU19SRU1PVU5UIDMyCisjZGVmaW5lIE1TX01BTkRMT0NLIDY0CisjZGVmaW5lIE1TX0RJUlNZTkMgMTI4CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBNU19OT0FUSU1FIDEwMjQKKyNkZWZpbmUgTVNfTk9ESVJBVElNRSAyMDQ4CiAjZGVmaW5lIE1TX0JJTkQgNDA5NgogI2RlZmluZSBNU19NT1ZFIDgxOTIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1TX1JFQyAxNjM4NAotI2RlZmluZSBNU19WRVJCT1NFIDMyNzY4ICAKKyNkZWZpbmUgTVNfVkVSQk9TRSAzMjc2OAogI2RlZmluZSBNU19TSUxFTlQgMzI3NjgKLSNkZWZpbmUgTVNfUE9TSVhBQ0wgKDE8PDE2KSAgCi0jZGVmaW5lIE1TX1VOQklOREFCTEUgKDE8PDE3KSAgCi0jZGVmaW5lIE1TX1BSSVZBVEUgKDE8PDE4KSAgCi0jZGVmaW5lIE1TX1NMQVZFICgxPDwxOSkgIAotI2RlZmluZSBNU19TSEFSRUQgKDE8PDIwKSAgCisjZGVmaW5lIE1TX1BPU0lYQUNMICgxPDwxNikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIE1TX1VOQklOREFCTEUgKDE8PDE3KQorI2RlZmluZSBNU19QUklWQVRFICgxPDwxOCkKKyNkZWZpbmUgTVNfU0xBVkUgKDE8PDE5KQorI2RlZmluZSBNU19TSEFSRUQgKDE8PDIwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgTVNfUkVMQVRJTUUgKDE8PDIxKQorI2RlZmluZSBNU19LRVJOTU9VTlQgKDE8PDIyKQorI2RlZmluZSBNU19JX1ZFUlNJT04gKDE8PDIzKQorI2RlZmluZSBNU19TVFJJQ1RBVElNRSAoMTw8MjQpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBNU19OT1NFQyAoMTw8MjgpCisjZGVmaW5lIE1TX0JPUk4gKDE8PDI5KQogI2RlZmluZSBNU19BQ1RJVkUgKDE8PDMwKQogI2RlZmluZSBNU19OT1VTRVIgKDE8PDMxKQotCi0jZGVmaW5lIE1TX1JNVF9NQVNLIChNU19SRE9OTFl8TVNfU1lOQ0hST05PVVN8TVNfTUFORExPQ0spCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIE1TX1JNVF9NQVNLIChNU19SRE9OTFl8TVNfU1lOQ0hST05PVVN8TVNfTUFORExPQ0t8TVNfSV9WRVJTSU9OKQogI2RlZmluZSBNU19NR0NfVkFMIDB4QzBFRDAwMDAKICNkZWZpbmUgTVNfTUdDX01TSyAweGZmZmYwMDAwCi0KLSNkZWZpbmUgU19TWU5DIDEgIAotI2RlZmluZSBTX05PQVRJTUUgMiAgCi0jZGVmaW5lIFNfQVBQRU5EIDQgIAotI2RlZmluZSBTX0lNTVVUQUJMRSA4ICAKLSNkZWZpbmUgU19ERUFEIDE2ICAKLSNkZWZpbmUgU19OT1FVT1RBIDMyICAKLSNkZWZpbmUgU19ESVJTWU5DIDY0ICAKLSNkZWZpbmUgU19OT0NNVElNRSAxMjggIAotI2RlZmluZSBTX1NXQVBGSUxFIDI1NiAgCi0jZGVmaW5lIFNfUFJJVkFURSA1MTIgIAotCisjZGVmaW5lIFNfU1lOQyAxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBTX05PQVRJTUUgMgorI2RlZmluZSBTX0FQUEVORCA0CisjZGVmaW5lIFNfSU1NVVRBQkxFIDgKKyNkZWZpbmUgU19ERUFEIDE2CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBTX05PUVVPVEEgMzIKKyNkZWZpbmUgU19ESVJTWU5DIDY0CisjZGVmaW5lIFNfTk9DTVRJTUUgMTI4CisjZGVmaW5lIFNfU1dBUEZJTEUgMjU2CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBTX1BSSVZBVEUgNTEyCisjZGVmaW5lIFNfSU1BIDEwMjQKKyNkZWZpbmUgU19BVVRPTU9VTlQgMjA0OAorI2RlZmluZSBTX05PU0VDIDQwOTYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fSVNfRkxHKGlub2RlLGZsZykgKChpbm9kZSktPmlfc2ItPnNfZmxhZ3MgJiAoZmxnKSkKLQogI2RlZmluZSBJU19SRE9OTFkoaW5vZGUpICgoaW5vZGUpLT5pX3NiLT5zX2ZsYWdzICYgTVNfUkRPTkxZKQogI2RlZmluZSBJU19TWU5DKGlub2RlKSAoX19JU19GTEcoaW5vZGUsIE1TX1NZTkNIUk9OT1VTKSB8fCAgICgoaW5vZGUpLT5pX2ZsYWdzICYgU19TWU5DKSkKICNkZWZpbmUgSVNfRElSU1lOQyhpbm9kZSkgKF9fSVNfRkxHKGlub2RlLCBNU19TWU5DSFJPTk9VU3xNU19ESVJTWU5DKSB8fCAgICgoaW5vZGUpLT5pX2ZsYWdzICYgKFNfU1lOQ3xTX0RJUlNZTkMpKSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIElTX01BTkRMT0NLKGlub2RlKSBfX0lTX0ZMRyhpbm9kZSwgTVNfTUFORExPQ0spCi0KKyNkZWZpbmUgSVNfTk9BVElNRShpbm9kZSkgX19JU19GTEcoaW5vZGUsIE1TX1JET05MWXxNU19OT0FUSU1FKQorI2RlZmluZSBJU19JX1ZFUlNJT04oaW5vZGUpIF9fSVNfRkxHKGlub2RlLCBNU19JX1ZFUlNJT04pCiAjZGVmaW5lIElTX05PUVVPVEEoaW5vZGUpICgoaW5vZGUpLT5pX2ZsYWdzICYgU19OT1FVT1RBKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSVNfQVBQRU5EKGlub2RlKSAoKGlub2RlKS0+aV9mbGFncyAmIFNfQVBQRU5EKQogI2RlZmluZSBJU19JTU1VVEFCTEUoaW5vZGUpICgoaW5vZGUpLT5pX2ZsYWdzICYgU19JTU1VVEFCTEUpCiAjZGVmaW5lIElTX1BPU0lYQUNMKGlub2RlKSBfX0lTX0ZMRyhpbm9kZSwgTVNfUE9TSVhBQ0wpCi0KICNkZWZpbmUgSVNfREVBRERJUihpbm9kZSkgKChpbm9kZSktPmlfZmxhZ3MgJiBTX0RFQUQpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJU19OT0NNVElNRShpbm9kZSkgKChpbm9kZSktPmlfZmxhZ3MgJiBTX05PQ01USU1FKQogI2RlZmluZSBJU19TV0FQRklMRShpbm9kZSkgKChpbm9kZSktPmlfZmxhZ3MgJiBTX1NXQVBGSUxFKQogI2RlZmluZSBJU19QUklWQVRFKGlub2RlKSAoKGlub2RlKS0+aV9mbGFncyAmIFNfUFJJVkFURSkKLQotI2RlZmluZSBCTEtST1NFVCBfSU8oMHgxMiw5MykgIAotI2RlZmluZSBCTEtST0dFVCBfSU8oMHgxMiw5NCkgIAotI2RlZmluZSBCTEtSUlBBUlQgX0lPKDB4MTIsOTUpICAKLSNkZWZpbmUgQkxLR0VUU0laRSBfSU8oMHgxMiw5NikgIAotI2RlZmluZSBCTEtGTFNCVUYgX0lPKDB4MTIsOTcpICAKLSNkZWZpbmUgQkxLUkFTRVQgX0lPKDB4MTIsOTgpICAKLSNkZWZpbmUgQkxLUkFHRVQgX0lPKDB4MTIsOTkpICAKLSNkZWZpbmUgQkxLRlJBU0VUIF9JTygweDEyLDEwMCkgCi0jZGVmaW5lIEJMS0ZSQUdFVCBfSU8oMHgxMiwxMDEpIAotI2RlZmluZSBCTEtTRUNUU0VUIF9JTygweDEyLDEwMikgCi0jZGVmaW5lIEJMS1NFQ1RHRVQgX0lPKDB4MTIsMTAzKSAKLSNkZWZpbmUgQkxLU1NaR0VUIF9JTygweDEyLDEwNCkgCi0KKyNkZWZpbmUgSVNfSU1BKGlub2RlKSAoKGlub2RlKS0+aV9mbGFncyAmIFNfSU1BKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgSVNfQVVUT01PVU5UKGlub2RlKSAoKGlub2RlKS0+aV9mbGFncyAmIFNfQVVUT01PVU5UKQorI2RlZmluZSBJU19OT1NFQyhpbm9kZSkgKChpbm9kZSktPmlfZmxhZ3MgJiBTX05PU0VDKQorI2RlZmluZSBCTEtST1NFVCBfSU8oMHgxMiw5MykKKyNkZWZpbmUgQkxLUk9HRVQgX0lPKDB4MTIsOTQpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBCTEtSUlBBUlQgX0lPKDB4MTIsOTUpCisjZGVmaW5lIEJMS0dFVFNJWkUgX0lPKDB4MTIsOTYpCisjZGVmaW5lIEJMS0ZMU0JVRiBfSU8oMHgxMiw5NykKKyNkZWZpbmUgQkxLUkFTRVQgX0lPKDB4MTIsOTgpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBCTEtSQUdFVCBfSU8oMHgxMiw5OSkKKyNkZWZpbmUgQkxLRlJBU0VUIF9JTygweDEyLDEwMCkKKyNkZWZpbmUgQkxLRlJBR0VUIF9JTygweDEyLDEwMSkKKyNkZWZpbmUgQkxLU0VDVFNFVCBfSU8oMHgxMiwxMDIpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBCTEtTRUNUR0VUIF9JTygweDEyLDEwMykKKyNkZWZpbmUgQkxLU1NaR0VUIF9JTygweDEyLDEwNCkKICNkZWZpbmUgQkxLQlNaR0VUIF9JT1IoMHgxMiwxMTIsc2l6ZV90KQogI2RlZmluZSBCTEtCU1pTRVQgX0lPVygweDEyLDExMyxzaXplX3QpCi0jZGVmaW5lIEJMS0dFVFNJWkU2NCBfSU9SKDB4MTIsMTE0LHNpemVfdCkgIAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgQkxLR0VUU0laRTY0IF9JT1IoMHgxMiwxMTQsc2l6ZV90KQogI2RlZmluZSBCTEtUUkFDRVNFVFVQIF9JT1dSKDB4MTIsMTE1LHN0cnVjdCBibGtfdXNlcl90cmFjZV9zZXR1cCkKICNkZWZpbmUgQkxLVFJBQ0VTVEFSVCBfSU8oMHgxMiwxMTYpCiAjZGVmaW5lIEJMS1RSQUNFU1RPUCBfSU8oMHgxMiwxMTcpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBCTEtUUkFDRVRFQVJET1dOIF9JTygweDEyLDExOCkKLQotI2RlZmluZSBCTUFQX0lPQ1RMIDEgIAotI2RlZmluZSBGSUJNQVAgX0lPKDB4MDAsMSkgIAotI2RlZmluZSBGSUdFVEJTWiBfSU8oMHgwMCwyKSAgCi0KKyNkZWZpbmUgQkxLRElTQ0FSRCBfSU8oMHgxMiwxMTkpCisjZGVmaW5lIEJMS0lPTUlOIF9JTygweDEyLDEyMCkKKyNkZWZpbmUgQkxLSU9PUFQgX0lPKDB4MTIsMTIxKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgQkxLQUxJR05PRkYgX0lPKDB4MTIsMTIyKQorI2RlZmluZSBCTEtQQlNaR0VUIF9JTygweDEyLDEyMykKKyNkZWZpbmUgQkxLRElTQ0FSRFpFUk9FUyBfSU8oMHgxMiwxMjQpCisjZGVmaW5lIEJMS1NFQ0RJU0NBUkQgX0lPKDB4MTIsMTI1KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgQkxLUk9UQVRJT05BTCBfSU8oMHgxMiwxMjYpCisjZGVmaW5lIEJNQVBfSU9DVEwgMQorI2RlZmluZSBGSUJNQVAgX0lPKDB4MDAsMSkKKyNkZWZpbmUgRklHRVRCU1ogX0lPKDB4MDAsMikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEZJRlJFRVpFIF9JT1dSKCdYJywgMTE5LCBpbnQpCisjZGVmaW5lIEZJVEhBVyBfSU9XUignWCcsIDEyMCwgaW50KQorI2RlZmluZSBGSVRSSU0gX0lPV1IoJ1gnLCAxMjEsIHN0cnVjdCBmc3RyaW1fcmFuZ2UpCisjZGVmaW5lIEZTX0lPQ19HRVRGTEFHUyBfSU9SKCdmJywgMSwgbG9uZykKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEZTX0lPQ19TRVRGTEFHUyBfSU9XKCdmJywgMiwgbG9uZykKKyNkZWZpbmUgRlNfSU9DX0dFVFZFUlNJT04gX0lPUigndicsIDEsIGxvbmcpCisjZGVmaW5lIEZTX0lPQ19TRVRWRVJTSU9OIF9JT1coJ3YnLCAyLCBsb25nKQorI2RlZmluZSBGU19JT0NfRklFTUFQIF9JT1dSKCdmJywgMTEsIHN0cnVjdCBmaWVtYXApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBGU19JT0MzMl9HRVRGTEFHUyBfSU9SKCdmJywgMSwgaW50KQorI2RlZmluZSBGU19JT0MzMl9TRVRGTEFHUyBfSU9XKCdmJywgMiwgaW50KQorI2RlZmluZSBGU19JT0MzMl9HRVRWRVJTSU9OIF9JT1IoJ3YnLCAxLCBpbnQpCisjZGVmaW5lIEZTX0lPQzMyX1NFVFZFUlNJT04gX0lPVygndicsIDIsIGludCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEZTX1NFQ1JNX0ZMIDB4MDAwMDAwMDEKKyNkZWZpbmUgRlNfVU5STV9GTCAweDAwMDAwMDAyCisjZGVmaW5lIEZTX0NPTVBSX0ZMIDB4MDAwMDAwMDQKKyNkZWZpbmUgRlNfU1lOQ19GTCAweDAwMDAwMDA4CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBGU19JTU1VVEFCTEVfRkwgMHgwMDAwMDAxMAorI2RlZmluZSBGU19BUFBFTkRfRkwgMHgwMDAwMDAyMAorI2RlZmluZSBGU19OT0RVTVBfRkwgMHgwMDAwMDA0MAorI2RlZmluZSBGU19OT0FUSU1FX0ZMIDB4MDAwMDAwODAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEZTX0RJUlRZX0ZMIDB4MDAwMDAxMDAKKyNkZWZpbmUgRlNfQ09NUFJCTEtfRkwgMHgwMDAwMDIwMAorI2RlZmluZSBGU19OT0NPTVBfRkwgMHgwMDAwMDQwMAorI2RlZmluZSBGU19FQ09NUFJfRkwgMHgwMDAwMDgwMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgRlNfQlRSRUVfRkwgMHgwMDAwMTAwMAorI2RlZmluZSBGU19JTkRFWF9GTCAweDAwMDAxMDAwCisjZGVmaW5lIEZTX0lNQUdJQ19GTCAweDAwMDAyMDAwCisjZGVmaW5lIEZTX0pPVVJOQUxfREFUQV9GTCAweDAwMDA0MDAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBGU19OT1RBSUxfRkwgMHgwMDAwODAwMAorI2RlZmluZSBGU19ESVJTWU5DX0ZMIDB4MDAwMTAwMDAKKyNkZWZpbmUgRlNfVE9QRElSX0ZMIDB4MDAwMjAwMDAKKyNkZWZpbmUgRlNfRVhURU5UX0ZMIDB4MDAwODAwMDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEZTX0RJUkVDVElPX0ZMIDB4MDAxMDAwMDAKKyNkZWZpbmUgRlNfTk9DT1dfRkwgMHgwMDgwMDAwMAorI2RlZmluZSBGU19SRVNFUlZFRF9GTCAweDgwMDAwMDAwCisjZGVmaW5lIEZTX0ZMX1VTRVJfVklTSUJMRSAweDAwMDNERkZGCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBGU19GTF9VU0VSX01PRElGSUFCTEUgMHgwMDAzODBGRgogI2RlZmluZSBTWU5DX0ZJTEVfUkFOR0VfV0FJVF9CRUZPUkUgMQogI2RlZmluZSBTWU5DX0ZJTEVfUkFOR0VfV1JJVEUgMgogI2RlZmluZSBTWU5DX0ZJTEVfUkFOR0VfV0FJVF9BRlRFUiA0Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9mdGFwZS5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2Z0YXBlLmgKaW5kZXggYmIxNTI3Yy4uZmE3MGJhYSAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2Z0YXBlLmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2Z0YXBlLmgKQEAgLTcsNDUgKzcsNTQgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9GVEFQRV9ICiAjZGVmaW5lIF9GVEFQRV9ICi0KICNkZWZpbmUgRlRBUEVfVkVSU0lPTiAiZnRhcGUgdjMuMDRkIDI1LzExLzk3IgotCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjaW5jbHVkZSA8bGludXgvbXRpby5oPgotCi0jZGVmaW5lIEZUX1NFQ1RPUih4KSAoeCsxKSAgCisjZGVmaW5lIEZUX1NFQ1RPUih4KSAoeCsxKQogI2RlZmluZSBGVF9TRUNUT1JfU0laRSAxMDI0CiAjZGVmaW5lIEZUX1NFQ1RPUlNfUEVSX1NFR01FTlQgMzIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEZUX0VDQ19TRUNUT1JTIDMKICNkZWZpbmUgRlRfU0VHTUVOVF9TSVpFICgoRlRfU0VDVE9SU19QRVJfU0VHTUVOVCAtIEZUX0VDQ19TRUNUT1JTKSAqIEZUX1NFQ1RPUl9TSVpFKQogI2RlZmluZSBGVF9CVUZGX1NJWkUgKEZUX1NFQ1RPUlNfUEVSX1NFR01FTlQgKiBGVF9TRUNUT1JfU0laRSkKLQogI2RlZmluZSBGVEFQRV9TRUxfQSAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBGVEFQRV9TRUxfQiAxCiAjZGVmaW5lIEZUQVBFX1NFTF9DIDIKICNkZWZpbmUgRlRBUEVfU0VMX0QgMwogI2RlZmluZSBGVEFQRV9TRUxfTUFTSyAzCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBGVEFQRV9TRUwodW5pdCkgKCh1bml0KSAmIEZUQVBFX1NFTF9NQVNLKQotI2RlZmluZSBGVEFQRV9OT19SRVdJTkQgNCAgCi0KKyNkZWZpbmUgRlRBUEVfTk9fUkVXSU5EIDQKIHR5cGVkZWYgdW5pb24gewogIHN0cnVjdCB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTggZXJyb3I7CiAgX191OCBjb21tYW5kOwogIH0gZXJyb3I7CiAgbG9uZyBzcGFjZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9IGZ0X2RyaXZlX2Vycm9yOwogdHlwZWRlZiB1bmlvbiB7CiAgc3RydWN0IHsKICBfX3U4IGRyaXZlX3N0YXR1czsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191OCBkcml2ZV9jb25maWc7CiAgX191OCB0YXBlX3N0YXR1czsKICB9IHN0YXR1czsKICBsb25nIHNwYWNlOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH0gZnRfZHJpdmVfc3RhdHVzOwotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9mdXRleC5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2Z1dGV4LmgKaW5kZXggMzBmOWU1OS4uNDYyZGM4MyAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2Z1dGV4LmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2Z1dGV4LmgKQEAgLTcsNTUgKzcsNTkgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9MSU5VWF9GVVRFWF9ICiAjZGVmaW5lIF9MSU5VWF9GVVRFWF9ICi0KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgotCiAjZGVmaW5lIEZVVEVYX1dBSVQgMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRlVURVhfV0FLRSAxCiAjZGVmaW5lIEZVVEVYX0ZEIDIKICNkZWZpbmUgRlVURVhfUkVRVUVVRSAzCiAjZGVmaW5lIEZVVEVYX0NNUF9SRVFVRVVFIDQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEZVVEVYX1dBS0VfT1AgNQogI2RlZmluZSBGVVRFWF9MT0NLX1BJIDYKICNkZWZpbmUgRlVURVhfVU5MT0NLX1BJIDcKICNkZWZpbmUgRlVURVhfVFJZTE9DS19QSSA4Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3Qgcm9idXN0X2xpc3QgewogIHN0cnVjdCByb2J1c3RfbGlzdCBfX3VzZXIgKm5leHQ7CiB9OwotCiBzdHJ1Y3Qgcm9idXN0X2xpc3RfaGVhZCB7Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IHJvYnVzdF9saXN0IGxpc3Q7Ci0KICBsb25nIGZ1dGV4X29mZnNldDsKLQogIHN0cnVjdCByb2J1c3RfbGlzdCBfX3VzZXIgKmxpc3Rfb3BfcGVuZGluZzsKIH07Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEZVVEVYX1dBSVRFUlMgMHg4MDAwMDAwMAotCiAjZGVmaW5lIEZVVEVYX09XTkVSX0RJRUQgMHg0MDAwMDAwMAotCiAjZGVmaW5lIEZVVEVYX1RJRF9NQVNLIDB4M2ZmZmZmZmYKLQogI2RlZmluZSBST0JVU1RfTElTVF9MSU1JVCAyMDQ4Ci0KLSNkZWZpbmUgRlVURVhfT1BfU0VUIDAgIAotI2RlZmluZSBGVVRFWF9PUF9BREQgMSAgCi0jZGVmaW5lIEZVVEVYX09QX09SIDIgIAotI2RlZmluZSBGVVRFWF9PUF9BTkROIDMgIAotI2RlZmluZSBGVVRFWF9PUF9YT1IgNCAgCi0jZGVmaW5lIEZVVEVYX09QX09QQVJHX1NISUZUIDggIAotI2RlZmluZSBGVVRFWF9PUF9DTVBfRVEgMCAgCi0jZGVmaW5lIEZVVEVYX09QX0NNUF9ORSAxICAKLSNkZWZpbmUgRlVURVhfT1BfQ01QX0xUIDIgIAotI2RlZmluZSBGVVRFWF9PUF9DTVBfTEUgMyAgCi0jZGVmaW5lIEZVVEVYX09QX0NNUF9HVCA0ICAKLSNkZWZpbmUgRlVURVhfT1BfQ01QX0dFIDUgIAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgRlVURVhfT1BfU0VUIDAKKyNkZWZpbmUgRlVURVhfT1BfQUREIDEKKyNkZWZpbmUgRlVURVhfT1BfT1IgMgorI2RlZmluZSBGVVRFWF9PUF9BTkROIDMKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEZVVEVYX09QX1hPUiA0CisjZGVmaW5lIEZVVEVYX09QX09QQVJHX1NISUZUIDgKKyNkZWZpbmUgRlVURVhfT1BfQ01QX0VRIDAKKyNkZWZpbmUgRlVURVhfT1BfQ01QX05FIDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEZVVEVYX09QX0NNUF9MVCAyCisjZGVmaW5lIEZVVEVYX09QX0NNUF9MRSAzCisjZGVmaW5lIEZVVEVYX09QX0NNUF9HVCA0CisjZGVmaW5lIEZVVEVYX09QX0NNUF9HRSA1CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBGVVRFWF9PUChvcCwgb3BhcmcsIGNtcCwgY21wYXJnKSAgICgoKG9wICYgMHhmKSA8PCAyOCkgfCAoKGNtcCAmIDB4ZikgPDwgMjQpICAgfCAoKG9wYXJnICYgMHhmZmYpIDw8IDEyKSB8IChjbXBhcmcgJiAweGZmZikpCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9nZW5ldGxpbmsuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9nZW5ldGxpbmsuaAppbmRleCBiYzYwNDJjLi5mODZjZTA1IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvZ2VuZXRsaW5rLmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2dlbmV0bGluay5oCkBAIC0yMSw3ICsyMSw3IEBACiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRsaW5rLmg+CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBHRU5MX05BTVNJWiAxNiAgCisjZGVmaW5lIEdFTkxfTkFNU0laIDE2CiAjZGVmaW5lIEdFTkxfTUlOX0lEIE5MTVNHX01JTl9UWVBFCiAjZGVmaW5lIEdFTkxfTUFYX0lEIDEwMjMKIHN0cnVjdCBnZW5sbXNnaGRyIHsKQEAgLTkxLDQgKzkxLDMgQEAKICNkZWZpbmUgQ1RSTF9BVFRSX01DQVNUX0dSUF9NQVggKF9fQ1RSTF9BVFRSX01DQVNUX0dSUF9NQVggLSAxKQogI2VuZGlmCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvZ2VuaGQuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9nZW5oZC5oCmluZGV4IGEzYTM5MjQuLmU3MzI2ZDQgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9nZW5oZC5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9nZW5oZC5oCkBAIC03LDQ5ICs3LDU1IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfTElOVVhfR0VOSERfSAogI2RlZmluZSBfTElOVVhfR0VOSERfSAotCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLQogZW51bSB7Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgRE9TX0VYVEVOREVEX1BBUlRJVElPTiA9IDUsCiAgTElOVVhfRVhURU5ERURfUEFSVElUSU9OID0gMHg4NSwKICBXSU45OF9FWFRFTkRFRF9QQVJUSVRJT04gPSAweDBmLAotCiAgTElOVVhfU1dBUF9QQVJUSVRJT04gPSAweDgyLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBMSU5VWF9SQUlEX1BBUlRJVElPTiA9IDB4ZmQsCi0KICBTT0xBUklTX1g4Nl9QQVJUSVRJT04gPSBMSU5VWF9TV0FQX1BBUlRJVElPTiwKICBORVdfU09MQVJJU19YODZfUEFSVElUSU9OID0gMHhiZiwKLQogIERNNl9BVVgxUEFSVElUSU9OID0gMHg1MSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgRE02X0FVWDNQQVJUSVRJT04gPSAweDUzLAogIERNNl9QQVJUSVRJT04gPSAweDU0LAogIEVaRF9QQVJUSVRJT04gPSAweDU1LAotCiAgRlJFRUJTRF9QQVJUSVRJT04gPSAweGE1LAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBPUEVOQlNEX1BBUlRJVElPTiA9IDB4YTYsCiAgTkVUQlNEX1BBUlRJVElPTiA9IDB4YTksCiAgQlNESV9QQVJUSVRJT04gPSAweGI3LAogIE1JTklYX1BBUlRJVElPTiA9IDB4ODEsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFVOSVhXQVJFX1BBUlRJVElPTiA9IDB4NjMsCiB9OwotCiBzdHJ1Y3QgcGFydGl0aW9uIHsKICB1bnNpZ25lZCBjaGFyIGJvb3RfaW5kOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBjaGFyIGhlYWQ7CiAgdW5zaWduZWQgY2hhciBzZWN0b3I7CiAgdW5zaWduZWQgY2hhciBjeWw7CiAgdW5zaWduZWQgY2hhciBzeXNfaW5kOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBjaGFyIGVuZF9oZWFkOwogIHVuc2lnbmVkIGNoYXIgZW5kX3NlY3RvcjsKICB1bnNpZ25lZCBjaGFyIGVuZF9jeWw7CiAgdW5zaWduZWQgaW50IHN0YXJ0X3NlY3Q7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGludCBucl9zZWN0czsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Ci0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2dlbmxvY2suaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9nZW5sb2NrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzdmNjVkYwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9nZW5sb2NrLmgKQEAgLTAsMCArMSw0NSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfR0VOTE9DS19IXworI2RlZmluZSBfR0VOTE9DS19IXworI2RlZmluZSBHRU5MT0NLX1VOTE9DSyAwCisjZGVmaW5lIEdFTkxPQ0tfV1JMT0NLIDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEdFTkxPQ0tfUkRMT0NLIDIKKyNkZWZpbmUgR0VOTE9DS19OT0JMT0NLICgxIDw8IDApCisjZGVmaW5lIEdFTkxPQ0tfV1JJVEVfVE9fUkVBRCAoMSA8PCAxKQorc3RydWN0IGdlbmxvY2tfbG9jayB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIGludCBmZDsKKyBpbnQgb3A7CisgaW50IGZsYWdzOworIGludCB0aW1lb3V0OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK307CisjZGVmaW5lIEdFTkxPQ0tfSU9DX01BR0lDICdHJworI2RlZmluZSBHRU5MT0NLX0lPQ19ORVcgX0lPKEdFTkxPQ0tfSU9DX01BR0lDLCAwKQorI2RlZmluZSBHRU5MT0NLX0lPQ19FWFBPUlQgX0lPUihHRU5MT0NLX0lPQ19NQUdJQywgMSwgICBzdHJ1Y3QgZ2VubG9ja19sb2NrKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgR0VOTE9DS19JT0NfQVRUQUNIIF9JT1coR0VOTE9DS19JT0NfTUFHSUMsIDIsICAgc3RydWN0IGdlbmxvY2tfbG9jaykKKyNkZWZpbmUgR0VOTE9DS19JT0NfTE9DSyBfSU9XKEdFTkxPQ0tfSU9DX01BR0lDLCAzLCAgIHN0cnVjdCBnZW5sb2NrX2xvY2spCisjZGVmaW5lIEdFTkxPQ0tfSU9DX1JFTEVBU0UgX0lPKEdFTkxPQ0tfSU9DX01BR0lDLCA0KQorI2RlZmluZSBHRU5MT0NLX0lPQ19XQUlUIF9JT1coR0VOTE9DS19JT0NfTUFHSUMsIDUsICAgc3RydWN0IGdlbmxvY2tfbG9jaykKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEdFTkxPQ0tfSU9DX0RSRUFETE9DSyBfSU9XKEdFTkxPQ0tfSU9DX01BR0lDLCA2LCAgIHN0cnVjdCBnZW5sb2NrX2xvY2spCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9nZnAuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9nZnAuaAppbmRleCAwYTU5ZmU5Li4zYTlmYzIxIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvZ2ZwLmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2dmcC5oCkBAIC03LDcwICs3LDczIEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfX0xJTlVYX0dGUF9ICiAjZGVmaW5lIF9fTElOVVhfR0ZQX0gKLQogI2luY2x1ZGUgPGxpbnV4L21tem9uZS5oPgogI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+Ci0KIHN0cnVjdCB2bV9hcmVhX3N0cnVjdDsKLQogI2RlZmluZSBfX0dGUF9ETUEgKChfX2ZvcmNlIGdmcF90KTB4MDF1KQogI2RlZmluZSBfX0dGUF9ISUdITUVNICgoX19mb3JjZSBnZnBfdCkweDAydSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjaWYgQklUU19QRVJfTE9ORyA8IDY0Ci0jZGVmaW5lIF9fR0ZQX0RNQTMyICgoX19mb3JjZSBnZnBfdCkweDAwKSAgCisjZGVmaW5lIF9fR0ZQX0RNQTMyICgoX19mb3JjZSBnZnBfdCkweDAwKQogI2Vsc2UKLSNkZWZpbmUgX19HRlBfRE1BMzIgKChfX2ZvcmNlIGdmcF90KTB4MDQpICAKKyNkZWZpbmUgX19HRlBfRE1BMzIgKChfX2ZvcmNlIGdmcF90KTB4MDQpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2VuZGlmCi0KLSNkZWZpbmUgX19HRlBfV0FJVCAoKF9fZm9yY2UgZ2ZwX3QpMHgxMHUpICAKLSNkZWZpbmUgX19HRlBfSElHSCAoKF9fZm9yY2UgZ2ZwX3QpMHgyMHUpICAKLSNkZWZpbmUgX19HRlBfSU8gKChfX2ZvcmNlIGdmcF90KTB4NDB1KSAgCi0jZGVmaW5lIF9fR0ZQX0ZTICgoX19mb3JjZSBnZnBfdCkweDgwdSkgIAotI2RlZmluZSBfX0dGUF9DT0xEICgoX19mb3JjZSBnZnBfdCkweDEwMHUpICAKLSNkZWZpbmUgX19HRlBfTk9XQVJOICgoX19mb3JjZSBnZnBfdCkweDIwMHUpICAKLSNkZWZpbmUgX19HRlBfUkVQRUFUICgoX19mb3JjZSBnZnBfdCkweDQwMHUpICAKLSNkZWZpbmUgX19HRlBfTk9GQUlMICgoX19mb3JjZSBnZnBfdCkweDgwMHUpICAKLSNkZWZpbmUgX19HRlBfTk9SRVRSWSAoKF9fZm9yY2UgZ2ZwX3QpMHgxMDAwdSkgCi0jZGVmaW5lIF9fR0ZQX05PX0dST1cgKChfX2ZvcmNlIGdmcF90KTB4MjAwMHUpIAotI2RlZmluZSBfX0dGUF9DT01QICgoX19mb3JjZSBnZnBfdCkweDQwMDB1KSAKLSNkZWZpbmUgX19HRlBfWkVSTyAoKF9fZm9yY2UgZ2ZwX3QpMHg4MDAwdSkgCi0jZGVmaW5lIF9fR0ZQX05PTUVNQUxMT0MgKChfX2ZvcmNlIGdmcF90KTB4MTAwMDB1KSAgCi0jZGVmaW5lIF9fR0ZQX0hBUkRXQUxMICgoX19mb3JjZSBnZnBfdCkweDIwMDAwdSkgIAotCi0jZGVmaW5lIF9fR0ZQX0JJVFNfU0hJRlQgMjAgIAorI2RlZmluZSBfX0dGUF9XQUlUICgoX19mb3JjZSBnZnBfdCkweDEwdSkKKyNkZWZpbmUgX19HRlBfSElHSCAoKF9fZm9yY2UgZ2ZwX3QpMHgyMHUpCisjZGVmaW5lIF9fR0ZQX0lPICgoX19mb3JjZSBnZnBfdCkweDQwdSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIF9fR0ZQX0ZTICgoX19mb3JjZSBnZnBfdCkweDgwdSkKKyNkZWZpbmUgX19HRlBfQ09MRCAoKF9fZm9yY2UgZ2ZwX3QpMHgxMDB1KQorI2RlZmluZSBfX0dGUF9OT1dBUk4gKChfX2ZvcmNlIGdmcF90KTB4MjAwdSkKKyNkZWZpbmUgX19HRlBfUkVQRUFUICgoX19mb3JjZSBnZnBfdCkweDQwMHUpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBfX0dGUF9OT0ZBSUwgKChfX2ZvcmNlIGdmcF90KTB4ODAwdSkKKyNkZWZpbmUgX19HRlBfTk9SRVRSWSAoKF9fZm9yY2UgZ2ZwX3QpMHgxMDAwdSkKKyNkZWZpbmUgX19HRlBfTk9fR1JPVyAoKF9fZm9yY2UgZ2ZwX3QpMHgyMDAwdSkKKyNkZWZpbmUgX19HRlBfQ09NUCAoKF9fZm9yY2UgZ2ZwX3QpMHg0MDAwdSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIF9fR0ZQX1pFUk8gKChfX2ZvcmNlIGdmcF90KTB4ODAwMHUpCisjZGVmaW5lIF9fR0ZQX05PTUVNQUxMT0MgKChfX2ZvcmNlIGdmcF90KTB4MTAwMDB1KQorI2RlZmluZSBfX0dGUF9IQVJEV0FMTCAoKF9fZm9yY2UgZ2ZwX3QpMHgyMDAwMHUpCisjZGVmaW5lIF9fR0ZQX0JJVFNfU0hJRlQgMjAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fR0ZQX0JJVFNfTUFTSyAoKF9fZm9yY2UgZ2ZwX3QpKCgxIDw8IF9fR0ZQX0JJVFNfU0hJRlQpIC0gMSkpCi0KICNkZWZpbmUgR0ZQX0xFVkVMX01BU0sgKF9fR0ZQX1dBSVR8X19HRlBfSElHSHxfX0dGUF9JT3xfX0dGUF9GU3wgICBfX0dGUF9DT0xEfF9fR0ZQX05PV0FSTnxfX0dGUF9SRVBFQVR8ICAgX19HRlBfTk9GQUlMfF9fR0ZQX05PUkVUUll8X19HRlBfTk9fR1JPV3xfX0dGUF9DT01QfCAgIF9fR0ZQX05PTUVNQUxMT0N8X19HRlBfSEFSRFdBTEwpCi0KICNkZWZpbmUgR0ZQX05PV0FJVCAoR0ZQX0FUT01JQyAmIH5fX0dGUF9ISUdIKQotCiAjZGVmaW5lIEdGUF9BVE9NSUMgKF9fR0ZQX0hJR0gpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBHRlBfTk9JTyAoX19HRlBfV0FJVCkKICNkZWZpbmUgR0ZQX05PRlMgKF9fR0ZQX1dBSVQgfCBfX0dGUF9JTykKICNkZWZpbmUgR0ZQX0tFUk5FTCAoX19HRlBfV0FJVCB8IF9fR0ZQX0lPIHwgX19HRlBfRlMpCiAjZGVmaW5lIEdGUF9VU0VSIChfX0dGUF9XQUlUIHwgX19HRlBfSU8gfCBfX0dGUF9GUyB8IF9fR0ZQX0hBUkRXQUxMKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgR0ZQX0hJR0hVU0VSIChfX0dGUF9XQUlUIHwgX19HRlBfSU8gfCBfX0dGUF9GUyB8IF9fR0ZQX0hBUkRXQUxMIHwgICBfX0dGUF9ISUdITUVNKQotCiAjZGVmaW5lIEdGUF9ETUEgX19HRlBfRE1BCi0KICNkZWZpbmUgR0ZQX0RNQTMyIF9fR0ZQX0RNQTMyCi0KICNpZm5kZWYgSEFWRV9BUkNIX0ZSRUVfUEFHRQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlbmRpZgotCiAjZGVmaW5lIGFsbG9jX3BhZ2VzKGdmcF9tYXNrLCBvcmRlcikgICBhbGxvY19wYWdlc19ub2RlKG51bWFfbm9kZV9pZCgpLCBnZnBfbWFzaywgb3JkZXIpCiAjZGVmaW5lIGFsbG9jX3BhZ2Vfdm1hKGdmcF9tYXNrLCB2bWEsIGFkZHIpIGFsbG9jX3BhZ2VzKGdmcF9tYXNrLCAwKQogI2RlZmluZSBhbGxvY19wYWdlKGdmcF9tYXNrKSBhbGxvY19wYWdlcyhnZnBfbWFzaywgMCkKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19nZXRfZnJlZV9wYWdlKGdmcF9tYXNrKSAgIF9fZ2V0X2ZyZWVfcGFnZXMoKGdmcF9tYXNrKSwwKQotCiAjZGVmaW5lIF9fZ2V0X2RtYV9wYWdlcyhnZnBfbWFzaywgb3JkZXIpICAgX19nZXRfZnJlZV9wYWdlcygoZ2ZwX21hc2spIHwgR0ZQX0RNQSwob3JkZXIpKQotCiAjZGVmaW5lIF9fZnJlZV9wYWdlKHBhZ2UpIF9fZnJlZV9wYWdlcygocGFnZSksIDApCiAjZGVmaW5lIGZyZWVfcGFnZShhZGRyKSBmcmVlX3BhZ2VzKChhZGRyKSwwKQotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvaGFyZGlycS5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2hhcmRpcnEuaAppbmRleCBjMDU2NmIwLi45MGFkOTliIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvaGFyZGlycS5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9oYXJkaXJxLmgKQEAgLTcsNjcgKzcsNjcgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIExJTlVYX0hBUkRJUlFfSAogI2RlZmluZSBMSU5VWF9IQVJESVJRX0gKLQogI2luY2x1ZGUgPGxpbnV4L3ByZWVtcHQuaD4KICNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNpbmNsdWRlIDxsaW51eC9sb2NrZGVwLmg+CiAjaW5jbHVkZSA8YXNtL2hhcmRpcnEuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+Ci0KICNkZWZpbmUgUFJFRU1QVF9CSVRTIDgKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNPRlRJUlFfQklUUyA4Ci0KICNpZm5kZWYgSEFSRElSUV9CSVRTCiAjZGVmaW5lIEhBUkRJUlFfQklUUyAxMgotCiAjaWYgMSA8PCBIQVJESVJRX0JJVFMgPCBOUl9JUlFTCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2Vycm9yIEhBUkRJUlFfQklUUyBpcyB0b28gbG93IQogI2VuZGlmCiAjZW5kaWYKLQogI2RlZmluZSBQUkVFTVBUX1NISUZUIDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNPRlRJUlFfU0hJRlQgKFBSRUVNUFRfU0hJRlQgKyBQUkVFTVBUX0JJVFMpCiAjZGVmaW5lIEhBUkRJUlFfU0hJRlQgKFNPRlRJUlFfU0hJRlQgKyBTT0ZUSVJRX0JJVFMpCi0KICNkZWZpbmUgX19JUlFfTUFTSyh4KSAoKDFVTCA8PCAoeCkpLTEpCi0KICNkZWZpbmUgUFJFRU1QVF9NQVNLIChfX0lSUV9NQVNLKFBSRUVNUFRfQklUUykgPDwgUFJFRU1QVF9TSElGVCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNPRlRJUlFfTUFTSyAoX19JUlFfTUFTSyhTT0ZUSVJRX0JJVFMpIDw8IFNPRlRJUlFfU0hJRlQpCiAjZGVmaW5lIEhBUkRJUlFfTUFTSyAoX19JUlFfTUFTSyhIQVJESVJRX0JJVFMpIDw8IEhBUkRJUlFfU0hJRlQpCi0KICNkZWZpbmUgUFJFRU1QVF9PRkZTRVQgKDFVTCA8PCBQUkVFTVBUX1NISUZUKQogI2RlZmluZSBTT0ZUSVJRX09GRlNFVCAoMVVMIDw8IFNPRlRJUlFfU0hJRlQpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBIQVJESVJRX09GRlNFVCAoMVVMIDw8IEhBUkRJUlFfU0hJRlQpCi0KICNpZiBQUkVFTVBUX0FDVElWRSA8IDEgPDwgSEFSRElSUV9TSElGVCArIEhBUkRJUlFfQklUUwogI2Vycm9yIFBSRUVNUFRfQUNUSVZFIGlzIHRvbyBsb3chCiAjZW5kaWYKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgaGFyZGlycV9jb3VudCgpIChwcmVlbXB0X2NvdW50KCkgJiBIQVJESVJRX01BU0spCiAjZGVmaW5lIHNvZnRpcnFfY291bnQoKSAocHJlZW1wdF9jb3VudCgpICYgU09GVElSUV9NQVNLKQogI2RlZmluZSBpcnFfY291bnQoKSAocHJlZW1wdF9jb3VudCgpICYgKEhBUkRJUlFfTUFTSyB8IFNPRlRJUlFfTUFTSykpCi0KICNkZWZpbmUgaW5faXJxKCkgKGhhcmRpcnFfY291bnQoKSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIGluX3NvZnRpcnEoKSAoc29mdGlycV9jb3VudCgpKQogI2RlZmluZSBpbl9pbnRlcnJ1cHQoKSAoaXJxX2NvdW50KCkpCi0KICNkZWZpbmUgaW5fYXRvbWljKCkgKChwcmVlbXB0X2NvdW50KCkgJiB+UFJFRU1QVF9BQ1RJVkUpICE9IDApCi0KICNkZWZpbmUgcHJlZW1wdGlibGUoKSAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJUlFfRVhJVF9PRkZTRVQgSEFSRElSUV9PRkZTRVQKLQogI2RlZmluZSBzeW5jaHJvbml6ZV9pcnEoaXJxKSBiYXJyaWVyKCkKLQogc3RydWN0IHRhc2tfc3RydWN0OwotCiAjZGVmaW5lIGlycV9lbnRlcigpICAgZG8geyAgIGFjY291bnRfc3lzdGVtX3Z0aW1lKGN1cnJlbnQpOyAgIGFkZF9wcmVlbXB0X2NvdW50KEhBUkRJUlFfT0ZGU0VUKTsgICB0cmFjZV9oYXJkaXJxX2VudGVyKCk7ICAgfSB3aGlsZSAoMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9faXJxX2V4aXQoKSAgIGRvIHsgICB0cmFjZV9oYXJkaXJxX2V4aXQoKTsgICBhY2NvdW50X3N5c3RlbV92dGltZShjdXJyZW50KTsgICBzdWJfcHJlZW1wdF9jb3VudChIQVJESVJRX09GRlNFVCk7ICAgfSB3aGlsZSAoMCkKLQogI2RlZmluZSBubWlfZW50ZXIoKSBkbyB7IGxvY2tkZXBfb2ZmKCk7IGlycV9lbnRlcigpOyB9IHdoaWxlICgwKQogI2RlZmluZSBubWlfZXhpdCgpIGRvIHsgX19pcnFfZXhpdCgpOyBsb2NrZGVwX29uKCk7IH0gd2hpbGUgKDApCi0KICNlbmRpZgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9oZGxjL2lvY3RsLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvaGRsYy9pb2N0bC5oCmluZGV4IGMxNWE2N2YuLmFkMTQ0MmMgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9oZGxjL2lvY3RsLmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2hkbGMvaW9jdGwuaApAQCAtNyw1MSArNyw1OSBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX19IRExDX0lPQ1RMX0hfXwogI2RlZmluZSBfX0hETENfSU9DVExfSF9fCi0KIHR5cGVkZWYgc3RydWN0IHsKICB1bnNpZ25lZCBpbnQgY2xvY2tfcmF0ZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgaW50IGNsb2NrX3R5cGU7CiAgdW5zaWduZWQgc2hvcnQgbG9vcGJhY2s7CiB9IHN5bmNfc2VyaWFsX3NldHRpbmdzOwotCiB0eXBlZGVmIHN0cnVjdCB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGludCBjbG9ja19yYXRlOwogIHVuc2lnbmVkIGludCBjbG9ja190eXBlOwogIHVuc2lnbmVkIHNob3J0IGxvb3BiYWNrOwogIHVuc2lnbmVkIGludCBzbG90X21hcDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9IHRlMV9zZXR0aW5nczsKLQogdHlwZWRlZiBzdHJ1Y3QgewogIHVuc2lnbmVkIHNob3J0IGVuY29kaW5nOwogIHVuc2lnbmVkIHNob3J0IHBhcml0eTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9IHJhd19oZGxjX3Byb3RvOwotCiB0eXBlZGVmIHN0cnVjdCB7CiAgdW5zaWduZWQgaW50IHQzOTE7CiAgdW5zaWduZWQgaW50IHQzOTI7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGludCBuMzkxOwogIHVuc2lnbmVkIGludCBuMzkyOwogIHVuc2lnbmVkIGludCBuMzkzOwogIHVuc2lnbmVkIHNob3J0IGxtaTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgc2hvcnQgZGNlOwogfSBmcl9wcm90bzsKLQogdHlwZWRlZiBzdHJ1Y3QgewogIHVuc2lnbmVkIGludCBkbGNpOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH0gZnJfcHJvdG9fcHZjOwotCiB0eXBlZGVmIHN0cnVjdCB7CiAgdW5zaWduZWQgaW50IGRsY2k7CiAgY2hhciBtYXN0ZXJbSUZOQU1TSVpdOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH1mcl9wcm90b19wdmNfaW5mbzsKLQogdHlwZWRlZiBzdHJ1Y3QgewogIHVuc2lnbmVkIGludCBpbnRlcnZhbDsKICB1bnNpZ25lZCBpbnQgdGltZW91dDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9IGNpc2NvX3Byb3RvOwotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9oZHJlZy5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2hkcmVnLmgKaW5kZXggYTY4NGVlOS4uNTY1NDhmNCAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2hkcmVnLmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2hkcmVnLmgKQEAgLTcsNDI2ICs3LDQ3NSBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX0xJTlVYX0hEUkVHX0gKICNkZWZpbmUgX0xJTlVYX0hEUkVHX0gKLQogI2RlZmluZSBIRElPX0RSSVZFX0NNRF9IRFJfU0laRSAoNCAqIHNpemVvZih1OCkpCiAjZGVmaW5lIEhESU9fRFJJVkVfSE9CX0hEUl9TSVpFICg4ICogc2l6ZW9mKHU4KSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEhESU9fRFJJVkVfVEFTS19IRFJfU0laRSAoOCAqIHNpemVvZih1OCkpCi0KICNkZWZpbmUgSURFX0RSSVZFX1RBU0tfSU5WQUxJRCAtMQogI2RlZmluZSBJREVfRFJJVkVfVEFTS19OT19EQVRBIDAKICNkZWZpbmUgSURFX0RSSVZFX1RBU0tfU0VUX1hGRVIgMQotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJREVfRFJJVkVfVEFTS19JTiAyCi0KICNkZWZpbmUgSURFX0RSSVZFX1RBU0tfT1VUIDMKICNkZWZpbmUgSURFX0RSSVZFX1RBU0tfUkFXX1dSSVRFIDQKLQogI2RlZmluZSBJREVfVEFTS0ZJTEVfU1REX0lOX0ZMQUdTIDB4RkUKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIElERV9IT0JfU1REX0lOX0ZMQUdTIDB4M0MKICNkZWZpbmUgSURFX1RBU0tGSUxFX1NURF9PVVRfRkxBR1MgMHhGRQogI2RlZmluZSBJREVfSE9CX1NURF9PVVRfRkxBR1MgMHgzQwotCiB0eXBlZGVmIHVuc2lnbmVkIGNoYXIgdGFza19pb3JlZ190OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBzYXRhX2lvcmVnX3Q7Ci0KIHR5cGVkZWYgdW5pb24gaWRlX3JlZ192YWxpZF9zIHsKICB1bnNpZ25lZCBhbGwgOiAxNjsKICBzdHJ1Y3QgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBkYXRhIDogMTsKICB1bnNpZ25lZCBlcnJvcl9mZWF0dXJlIDogMTsKICB1bnNpZ25lZCBzZWN0b3IgOiAxOwogIHVuc2lnbmVkIG5zZWN0b3IgOiAxOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBsY3lsIDogMTsKICB1bnNpZ25lZCBoY3lsIDogMTsKICB1bnNpZ25lZCBzZWxlY3QgOiAxOwogIHVuc2lnbmVkIHN0YXR1c19jb21tYW5kIDogMTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBkYXRhX2hvYiA6IDE7CiAgdW5zaWduZWQgZXJyb3JfZmVhdHVyZV9ob2IgOiAxOwogIHVuc2lnbmVkIHNlY3Rvcl9ob2IgOiAxOwogIHVuc2lnbmVkIG5zZWN0b3JfaG9iIDogMTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgbGN5bF9ob2IgOiAxOwogIHVuc2lnbmVkIGhjeWxfaG9iIDogMTsKICB1bnNpZ25lZCBzZWxlY3RfaG9iIDogMTsKICB1bnNpZ25lZCBjb250cm9sX2hvYiA6IDE7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIH0gYjsKIH0gaWRlX3JlZ192YWxpZF90OwotCiB0eXBlZGVmIHN0cnVjdCBpZGVfdGFza19yZXF1ZXN0X3MgewogIHRhc2tfaW9yZWdfdCBpb19wb3J0c1s4XTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdGFza19pb3JlZ190IGhvYl9wb3J0c1s4XTsKICBpZGVfcmVnX3ZhbGlkX3Qgb3V0X2ZsYWdzOwogIGlkZV9yZWdfdmFsaWRfdCBpbl9mbGFnczsKICBpbnQgZGF0YV9waGFzZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgaW50IHJlcV9jbWQ7CiAgdW5zaWduZWQgbG9uZyBvdXRfc2l6ZTsKICB1bnNpZ25lZCBsb25nIGluX3NpemU7CiB9IGlkZV90YXNrX3JlcXVlc3RfdDsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHR5cGVkZWYgc3RydWN0IGlkZV9pb2N0bF9yZXF1ZXN0X3MgewogIGlkZV90YXNrX3JlcXVlc3RfdCAqdGFza19yZXF1ZXN0OwogIHVuc2lnbmVkIGNoYXIgKm91dF9idWZmZXI7CiAgdW5zaWduZWQgY2hhciAqaW5fYnVmZmVyOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH0gaWRlX2lvY3RsX3JlcXVlc3RfdDsKLQogc3RydWN0IGhkX2RyaXZlX2NtZF9oZHIgewogIHRhc2tfaW9yZWdfdCBjb21tYW5kOwogIHRhc2tfaW9yZWdfdCBzZWN0b3JfbnVtYmVyOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB0YXNrX2lvcmVnX3QgZmVhdHVyZTsKICB0YXNrX2lvcmVnX3Qgc2VjdG9yX2NvdW50OwogfTsKLQogdHlwZWRlZiBzdHJ1Y3QgaGRfZHJpdmVfdGFza19oZHIgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB0YXNrX2lvcmVnX3QgZGF0YTsKICB0YXNrX2lvcmVnX3QgZmVhdHVyZTsKICB0YXNrX2lvcmVnX3Qgc2VjdG9yX2NvdW50OwogIHRhc2tfaW9yZWdfdCBzZWN0b3JfbnVtYmVyOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB0YXNrX2lvcmVnX3QgbG93X2N5bGluZGVyOwogIHRhc2tfaW9yZWdfdCBoaWdoX2N5bGluZGVyOwogIHRhc2tfaW9yZWdfdCBkZXZpY2VfaGVhZDsKICB0YXNrX2lvcmVnX3QgY29tbWFuZDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9IHRhc2tfc3RydWN0X3Q7Ci0KIHR5cGVkZWYgc3RydWN0IGhkX2RyaXZlX2hvYl9oZHIgewogIHRhc2tfaW9yZWdfdCBkYXRhOwogIHRhc2tfaW9yZWdfdCBmZWF0dXJlOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB0YXNrX2lvcmVnX3Qgc2VjdG9yX2NvdW50OwogIHRhc2tfaW9yZWdfdCBzZWN0b3JfbnVtYmVyOwogIHRhc2tfaW9yZWdfdCBsb3dfY3lsaW5kZXI7CiAgdGFza19pb3JlZ190IGhpZ2hfY3lsaW5kZXI7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHRhc2tfaW9yZWdfdCBkZXZpY2VfaGVhZDsKICB0YXNrX2lvcmVnX3QgY29udHJvbDsKIH0gaG9iX3N0cnVjdF90OwotCiAjZGVmaW5lIFRBU0tGSUxFX0lOVkFMSUQgMHg3ZmZmCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBUQVNLRklMRV80OCAweDgwMDAKLQogI2RlZmluZSBUQVNLRklMRV9OT19EQVRBIDB4MDAwMAotCiAjZGVmaW5lIFRBU0tGSUxFX0lOIDB4MDAwMQogI2RlZmluZSBUQVNLRklMRV9NVUxUSV9JTiAweDAwMDIKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVEFTS0ZJTEVfT1VUIDB4MDAwNAogI2RlZmluZSBUQVNLRklMRV9NVUxUSV9PVVQgMHgwMDA4CiAjZGVmaW5lIFRBU0tGSUxFX0lOX09VVCAweDAwMTAKLQogI2RlZmluZSBUQVNLRklMRV9JTl9ETUEgMHgwMDIwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBUQVNLRklMRV9PVVRfRE1BIDB4MDA0MAogI2RlZmluZSBUQVNLRklMRV9JTl9ETUFRIDB4MDA4MAogI2RlZmluZSBUQVNLRklMRV9PVVRfRE1BUSAweDAxMDAKLQogI2RlZmluZSBUQVNLRklMRV9QX0lOIDB4MDIwMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVEFTS0ZJTEVfUF9PVVQgMHgwNDAwCiAjZGVmaW5lIFRBU0tGSUxFX1BfSU5fRE1BIDB4MDgwMAogI2RlZmluZSBUQVNLRklMRV9QX09VVF9ETUEgMHgxMDAwCiAjZGVmaW5lIFRBU0tGSUxFX1BfSU5fRE1BUSAweDIwMDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFRBU0tGSUxFX1BfT1VUX0RNQVEgMHg0MDAwCi0KICNkZWZpbmUgV0lOX05PUCAweDAwCi0KLSNkZWZpbmUgQ0ZBX1JFUV9FWFRfRVJST1JfQ09ERSAweDAzICAKLQotI2RlZmluZSBXSU5fU1JTVCAweDA4ICAKKyNkZWZpbmUgQ0ZBX1JFUV9FWFRfRVJST1JfQ09ERSAweDAzCisjZGVmaW5lIFdJTl9TUlNUIDB4MDgKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFdJTl9ERVZJQ0VfUkVTRVQgMHgwOAotCiAjZGVmaW5lIFdJTl9SRUNBTCAweDEwCiAjZGVmaW5lIFdJTl9SRVNUT1JFIFdJTl9SRUNBTAotCi0jZGVmaW5lIFdJTl9SRUFEIDB4MjAgIAotI2RlZmluZSBXSU5fUkVBRF9PTkNFIDB4MjEgIAotI2RlZmluZSBXSU5fUkVBRF9MT05HIDB4MjIgIAotI2RlZmluZSBXSU5fUkVBRF9MT05HX09OQ0UgMHgyMyAgCi0jZGVmaW5lIFdJTl9SRUFEX0VYVCAweDI0ICAKLSNkZWZpbmUgV0lOX1JFQURETUFfRVhUIDB4MjUgIAotI2RlZmluZSBXSU5fUkVBRERNQV9RVUVVRURfRVhUIDB4MjYgIAotI2RlZmluZSBXSU5fUkVBRF9OQVRJVkVfTUFYX0VYVCAweDI3ICAKLQotI2RlZmluZSBXSU5fTVVMVFJFQURfRVhUIDB4MjkgIAotCi0jZGVmaW5lIFdJTl9XUklURSAweDMwICAKLSNkZWZpbmUgV0lOX1dSSVRFX09OQ0UgMHgzMSAgCi0jZGVmaW5lIFdJTl9XUklURV9MT05HIDB4MzIgIAotI2RlZmluZSBXSU5fV1JJVEVfTE9OR19PTkNFIDB4MzMgIAotI2RlZmluZSBXSU5fV1JJVEVfRVhUIDB4MzQgIAotI2RlZmluZSBXSU5fV1JJVEVETUFfRVhUIDB4MzUgIAotI2RlZmluZSBXSU5fV1JJVEVETUFfUVVFVUVEX0VYVCAweDM2ICAKLSNkZWZpbmUgV0lOX1NFVF9NQVhfRVhUIDB4MzcgIAotI2RlZmluZSBDRkFfV1JJVEVfU0VDVF9XT19FUkFTRSAweDM4ICAKLSNkZWZpbmUgV0lOX01VTFRXUklURV9FWFQgMHgzOSAgCi0KLSNkZWZpbmUgV0lOX1dSSVRFX1ZFUklGWSAweDNDICAKLQotI2RlZmluZSBXSU5fVkVSSUZZIDB4NDAgIAotI2RlZmluZSBXSU5fVkVSSUZZX09OQ0UgMHg0MSAgCi0jZGVmaW5lIFdJTl9WRVJJRllfRVhUIDB4NDIgIAotCisjZGVmaW5lIFdJTl9SRUFEIDB4MjAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFdJTl9SRUFEX09OQ0UgMHgyMQorI2RlZmluZSBXSU5fUkVBRF9MT05HIDB4MjIKKyNkZWZpbmUgV0lOX1JFQURfTE9OR19PTkNFIDB4MjMKKyNkZWZpbmUgV0lOX1JFQURfRVhUIDB4MjQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFdJTl9SRUFERE1BX0VYVCAweDI1CisjZGVmaW5lIFdJTl9SRUFERE1BX1FVRVVFRF9FWFQgMHgyNgorI2RlZmluZSBXSU5fUkVBRF9OQVRJVkVfTUFYX0VYVCAweDI3CisjZGVmaW5lIFdJTl9NVUxUUkVBRF9FWFQgMHgyOQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgV0lOX1dSSVRFIDB4MzAKKyNkZWZpbmUgV0lOX1dSSVRFX09OQ0UgMHgzMQorI2RlZmluZSBXSU5fV1JJVEVfTE9ORyAweDMyCisjZGVmaW5lIFdJTl9XUklURV9MT05HX09OQ0UgMHgzMworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgV0lOX1dSSVRFX0VYVCAweDM0CisjZGVmaW5lIFdJTl9XUklURURNQV9FWFQgMHgzNQorI2RlZmluZSBXSU5fV1JJVEVETUFfUVVFVUVEX0VYVCAweDM2CisjZGVmaW5lIFdJTl9TRVRfTUFYX0VYVCAweDM3CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBDRkFfV1JJVEVfU0VDVF9XT19FUkFTRSAweDM4CisjZGVmaW5lIFdJTl9NVUxUV1JJVEVfRVhUIDB4MzkKKyNkZWZpbmUgV0lOX1dSSVRFX1ZFUklGWSAweDNDCisjZGVmaW5lIFdJTl9WRVJJRlkgMHg0MAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgV0lOX1ZFUklGWV9PTkNFIDB4NDEKKyNkZWZpbmUgV0lOX1ZFUklGWV9FWFQgMHg0MgogI2RlZmluZSBXSU5fRk9STUFUIDB4NTAKLQogI2RlZmluZSBXSU5fSU5JVCAweDYwCi0KLSNkZWZpbmUgV0lOX1NFRUsgMHg3MCAgCi0KLSNkZWZpbmUgQ0ZBX1RSQU5TTEFURV9TRUNUT1IgMHg4NyAgCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBXSU5fU0VFSyAweDcwCisjZGVmaW5lIENGQV9UUkFOU0xBVEVfU0VDVE9SIDB4ODcKICNkZWZpbmUgV0lOX0RJQUdOT1NFIDB4OTAKLSNkZWZpbmUgV0lOX1NQRUNJRlkgMHg5MSAgCisjZGVmaW5lIFdJTl9TUEVDSUZZIDB4OTEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFdJTl9ET1dOTE9BRF9NSUNST0NPREUgMHg5MgogI2RlZmluZSBXSU5fU1RBTkRCWU5PVzIgMHg5NAogI2RlZmluZSBXSU5fU1RBTkRCWTIgMHg5NgogI2RlZmluZSBXSU5fU0VUSURMRTIgMHg5NworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgV0lOX0NIRUNLUE9XRVJNT0RFMiAweDk4CiAjZGVmaW5lIFdJTl9TTEVFUE5PVzIgMHg5OQotCi0jZGVmaW5lIFdJTl9QQUNLRVRDTUQgMHhBMCAgCi0jZGVmaW5lIFdJTl9QSURFTlRJRlkgMHhBMSAgCisjZGVmaW5lIFdJTl9QQUNLRVRDTUQgMHhBMAorI2RlZmluZSBXSU5fUElERU5USUZZIDB4QTEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFdJTl9RVUVVRURfU0VSVklDRSAweEEyCi0jZGVmaW5lIFdJTl9TTUFSVCAweEIwICAKKyNkZWZpbmUgV0lOX1NNQVJUIDB4QjAKICNkZWZpbmUgQ0ZBX0VSQVNFX1NFQ1RPUlMgMHhDMAotI2RlZmluZSBXSU5fTVVMVFJFQUQgMHhDNCAgCi0jZGVmaW5lIFdJTl9NVUxUV1JJVEUgMHhDNSAgCi0jZGVmaW5lIFdJTl9TRVRNVUxUIDB4QzYgIAotI2RlZmluZSBXSU5fUkVBRERNQV9RVUVVRUQgMHhDNyAgCi0jZGVmaW5lIFdJTl9SRUFERE1BIDB4QzggIAotI2RlZmluZSBXSU5fUkVBRERNQV9PTkNFIDB4QzkgIAotI2RlZmluZSBXSU5fV1JJVEVETUEgMHhDQSAgCi0jZGVmaW5lIFdJTl9XUklURURNQV9PTkNFIDB4Q0IgIAotI2RlZmluZSBXSU5fV1JJVEVETUFfUVVFVUVEIDB4Q0MgIAotI2RlZmluZSBDRkFfV1JJVEVfTVVMVElfV09fRVJBU0UgMHhDRCAgCisjZGVmaW5lIFdJTl9NVUxUUkVBRCAweEM0CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBXSU5fTVVMVFdSSVRFIDB4QzUKKyNkZWZpbmUgV0lOX1NFVE1VTFQgMHhDNgorI2RlZmluZSBXSU5fUkVBRERNQV9RVUVVRUQgMHhDNworI2RlZmluZSBXSU5fUkVBRERNQSAweEM4CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBXSU5fUkVBRERNQV9PTkNFIDB4QzkKKyNkZWZpbmUgV0lOX1dSSVRFRE1BIDB4Q0EKKyNkZWZpbmUgV0lOX1dSSVRFRE1BX09OQ0UgMHhDQgorI2RlZmluZSBXSU5fV1JJVEVETUFfUVVFVUVEIDB4Q0MKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIENGQV9XUklURV9NVUxUSV9XT19FUkFTRSAweENECiAjZGVmaW5lIFdJTl9HRVRNRURJQVNUQVRVUyAweERBCi0jZGVmaW5lIFdJTl9BQ0tNRURJQUNIQU5HRSAweERCICAKKyNkZWZpbmUgV0lOX0FDS01FRElBQ0hBTkdFIDB4REIKICNkZWZpbmUgV0lOX1BPU1RCT09UIDB4REMKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFdJTl9QUkVCT09UIDB4REQKLSNkZWZpbmUgV0lOX0RPT1JMT0NLIDB4REUgIAotI2RlZmluZSBXSU5fRE9PUlVOTE9DSyAweERGICAKKyNkZWZpbmUgV0lOX0RPT1JMT0NLIDB4REUKKyNkZWZpbmUgV0lOX0RPT1JVTkxPQ0sgMHhERgogI2RlZmluZSBXSU5fU1RBTkRCWU5PVzEgMHhFMAotI2RlZmluZSBXSU5fSURMRUlNTUVESUFURSAweEUxICAKLSNkZWZpbmUgV0lOX1NUQU5EQlkgMHhFMiAgCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBXSU5fSURMRUlNTUVESUFURSAweEUxCisjZGVmaW5lIFdJTl9TVEFOREJZIDB4RTIKICNkZWZpbmUgV0lOX1NFVElETEUxIDB4RTMKLSNkZWZpbmUgV0lOX1JFQURfQlVGRkVSIDB4RTQgIAorI2RlZmluZSBXSU5fUkVBRF9CVUZGRVIgMHhFNAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgV0lOX0NIRUNLUE9XRVJNT0RFMSAweEU1CiAjZGVmaW5lIFdJTl9TTEVFUE5PVzEgMHhFNgogI2RlZmluZSBXSU5fRkxVU0hfQ0FDSEUgMHhFNwotI2RlZmluZSBXSU5fV1JJVEVfQlVGRkVSIDB4RTggIAotI2RlZmluZSBXSU5fV1JJVEVfU0FNRSAweEU5ICAKLQotI2RlZmluZSBXSU5fRkxVU0hfQ0FDSEVfRVhUIDB4RUEgIAotI2RlZmluZSBXSU5fSURFTlRJRlkgMHhFQyAgCisjZGVmaW5lIFdJTl9XUklURV9CVUZGRVIgMHhFOAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgV0lOX1dSSVRFX1NBTUUgMHhFOQorI2RlZmluZSBXSU5fRkxVU0hfQ0FDSEVfRVhUIDB4RUEKKyNkZWZpbmUgV0lOX0lERU5USUZZIDB4RUMKICNkZWZpbmUgV0lOX01FRElBRUpFQ1QgMHhFRAotI2RlZmluZSBXSU5fSURFTlRJRllfRE1BIDB4RUUgIAotI2RlZmluZSBXSU5fU0VURkVBVFVSRVMgMHhFRiAgCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBXSU5fSURFTlRJRllfRE1BIDB4RUUKKyNkZWZpbmUgV0lOX1NFVEZFQVRVUkVTIDB4RUYKICNkZWZpbmUgRVhBQllURV9FTkFCTEVfTkVTVCAweEYwCiAjZGVmaW5lIFdJTl9TRUNVUklUWV9TRVRfUEFTUyAweEYxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBXSU5fU0VDVVJJVFlfVU5MT0NLIDB4RjIKICNkZWZpbmUgV0lOX1NFQ1VSSVRZX0VSQVNFX1BSRVBBUkUgMHhGMwogI2RlZmluZSBXSU5fU0VDVVJJVFlfRVJBU0VfVU5JVCAweEY0CiAjZGVmaW5lIFdJTl9TRUNVUklUWV9GUkVFWkVfTE9DSyAweEY1CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBXSU5fU0VDVVJJVFlfRElTQUJMRSAweEY2Ci0jZGVmaW5lIFdJTl9SRUFEX05BVElWRV9NQVggMHhGOCAgCisjZGVmaW5lIFdJTl9SRUFEX05BVElWRV9NQVggMHhGOAogI2RlZmluZSBXSU5fU0VUX01BWCAweEY5CiAjZGVmaW5lIERJU0FCTEVfU0VBR0FURSAweEZCCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNNQVJUX1JFQURfVkFMVUVTIDB4RDAKICNkZWZpbmUgU01BUlRfUkVBRF9USFJFU0hPTERTIDB4RDEKICNkZWZpbmUgU01BUlRfQVVUT1NBVkUgMHhEMgogI2RlZmluZSBTTUFSVF9TQVZFIDB4RDMKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNNQVJUX0lNTUVESUFURV9PRkZMSU5FIDB4RDQKICNkZWZpbmUgU01BUlRfUkVBRF9MT0dfU0VDVE9SIDB4RDUKICNkZWZpbmUgU01BUlRfV1JJVEVfTE9HX1NFQ1RPUiAweEQ2CiAjZGVmaW5lIFNNQVJUX1dSSVRFX1RIUkVTSE9MRFMgMHhENworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU01BUlRfRU5BQkxFIDB4RDgKICNkZWZpbmUgU01BUlRfRElTQUJMRSAweEQ5CiAjZGVmaW5lIFNNQVJUX1NUQVRVUyAweERBCiAjZGVmaW5lIFNNQVJUX0FVVE9fT0ZGTElORSAweERCCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNNQVJUX0xDWUxfUEFTUyAweDRGCiAjZGVmaW5lIFNNQVJUX0hDWUxfUEFTUyAweEMyCi0KLSNkZWZpbmUgU0VURkVBVFVSRVNfRU5fOEJJVCAweDAxICAKLSNkZWZpbmUgU0VURkVBVFVSRVNfRU5fV0NBQ0hFIDB4MDIgIAotI2RlZmluZSBTRVRGRUFUVVJFU19ESVNfREVGRUNUIDB4MDQgIAotI2RlZmluZSBTRVRGRUFUVVJFU19FTl9BUE0gMHgwNSAgCi0jZGVmaW5lIFNFVEZFQVRVUkVTX0VOX1NBTUVfUiAweDIyICAKLSNkZWZpbmUgU0VURkVBVFVSRVNfRElTX01TTiAweDMxICAKLSNkZWZpbmUgU0VURkVBVFVSRVNfRElTX1JFVFJZIDB4MzMgIAotI2RlZmluZSBTRVRGRUFUVVJFU19FTl9BQU0gMHg0MiAgCi0jZGVmaW5lIFNFVEZFQVRVUkVTX1JXX0xPTkcgMHg0NCAgCi0jZGVmaW5lIFNFVEZFQVRVUkVTX1NFVF9DQUNIRSAweDU0ICAKLSNkZWZpbmUgU0VURkVBVFVSRVNfRElTX1JMQSAweDU1ICAKLSNkZWZpbmUgU0VURkVBVFVSRVNfRU5fUkkgMHg1RCAgCi0jZGVmaW5lIFNFVEZFQVRVUkVTX0VOX1NJIDB4NUUgIAotI2RlZmluZSBTRVRGRUFUVVJFU19ESVNfUlBPRCAweDY2ICAKLSNkZWZpbmUgU0VURkVBVFVSRVNfRElTX0VDQyAweDc3ICAKLSNkZWZpbmUgU0VURkVBVFVSRVNfRElTXzhCSVQgMHg4MSAgCi0jZGVmaW5lIFNFVEZFQVRVUkVTX0RJU19XQ0FDSEUgMHg4MiAgCi0jZGVmaW5lIFNFVEZFQVRVUkVTX0VOX0RFRkVDVCAweDg0ICAKLSNkZWZpbmUgU0VURkVBVFVSRVNfRElTX0FQTSAweDg1ICAKLSNkZWZpbmUgU0VURkVBVFVSRVNfRU5fRUNDIDB4ODggIAotI2RlZmluZSBTRVRGRUFUVVJFU19FTl9NU04gMHg5NSAgCi0jZGVmaW5lIFNFVEZFQVRVUkVTX0VOX1JFVFJZIDB4OTkgIAotI2RlZmluZSBTRVRGRUFUVVJFU19FTl9STEEgMHhBQSAgCi0jZGVmaW5lIFNFVEZFQVRVUkVTX1BSRUZFVENIIDB4QUIgIAotI2RlZmluZSBTRVRGRUFUVVJFU19FTl9SRVNUIDB4QUMgIAotI2RlZmluZSBTRVRGRUFUVVJFU180Ql9SV19MT05HIDB4QkIgIAotI2RlZmluZSBTRVRGRUFUVVJFU19ESVNfQUFNIDB4QzIgIAotI2RlZmluZSBTRVRGRUFUVVJFU19FTl9SUE9EIDB4Q0MgIAotI2RlZmluZSBTRVRGRUFUVVJFU19ESVNfUkkgMHhERCAgCi0jZGVmaW5lIFNFVEZFQVRVUkVTX0VOX1NBTUVfTSAweEREICAKLSNkZWZpbmUgU0VURkVBVFVSRVNfRElTX1NJIDB4REUgIAotCisjZGVmaW5lIFNFVEZFQVRVUkVTX0VOXzhCSVQgMHgwMQorI2RlZmluZSBTRVRGRUFUVVJFU19FTl9XQ0FDSEUgMHgwMgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgU0VURkVBVFVSRVNfRElTX0RFRkVDVCAweDA0CisjZGVmaW5lIFNFVEZFQVRVUkVTX0VOX0FQTSAweDA1CisjZGVmaW5lIFNFVEZFQVRVUkVTX0VOX1NBTUVfUiAweDIyCisjZGVmaW5lIFNFVEZFQVRVUkVTX0RJU19NU04gMHgzMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgU0VURkVBVFVSRVNfRElTX1JFVFJZIDB4MzMKKyNkZWZpbmUgU0VURkVBVFVSRVNfRU5fQUFNIDB4NDIKKyNkZWZpbmUgU0VURkVBVFVSRVNfUldfTE9ORyAweDQ0CisjZGVmaW5lIFNFVEZFQVRVUkVTX1NFVF9DQUNIRSAweDU0CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBTRVRGRUFUVVJFU19ESVNfUkxBIDB4NTUKKyNkZWZpbmUgU0VURkVBVFVSRVNfRU5fUkkgMHg1RAorI2RlZmluZSBTRVRGRUFUVVJFU19FTl9TSSAweDVFCisjZGVmaW5lIFNFVEZFQVRVUkVTX0RJU19SUE9EIDB4NjYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFNFVEZFQVRVUkVTX0RJU19FQ0MgMHg3NworI2RlZmluZSBTRVRGRUFUVVJFU19ESVNfOEJJVCAweDgxCisjZGVmaW5lIFNFVEZFQVRVUkVTX0RJU19XQ0FDSEUgMHg4MgorI2RlZmluZSBTRVRGRUFUVVJFU19FTl9ERUZFQ1QgMHg4NAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgU0VURkVBVFVSRVNfRElTX0FQTSAweDg1CisjZGVmaW5lIFNFVEZFQVRVUkVTX0VOX0VDQyAweDg4CisjZGVmaW5lIFNFVEZFQVRVUkVTX0VOX01TTiAweDk1CisjZGVmaW5lIFNFVEZFQVRVUkVTX0VOX1JFVFJZIDB4OTkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFNFVEZFQVRVUkVTX0VOX1JMQSAweEFBCisjZGVmaW5lIFNFVEZFQVRVUkVTX1BSRUZFVENIIDB4QUIKKyNkZWZpbmUgU0VURkVBVFVSRVNfRU5fUkVTVCAweEFDCisjZGVmaW5lIFNFVEZFQVRVUkVTXzRCX1JXX0xPTkcgMHhCQgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgU0VURkVBVFVSRVNfRElTX0FBTSAweEMyCisjZGVmaW5lIFNFVEZFQVRVUkVTX0VOX1JQT0QgMHhDQworI2RlZmluZSBTRVRGRUFUVVJFU19ESVNfUkkgMHhERAorI2RlZmluZSBTRVRGRUFUVVJFU19FTl9TQU1FX00gMHhERAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgU0VURkVBVFVSRVNfRElTX1NJIDB4REUKICNkZWZpbmUgU0VDVVJJVFlfU0VUX1BBU1NXT1JEIDB4QkEKICNkZWZpbmUgU0VDVVJJVFlfVU5MT0NLIDB4QkIKICNkZWZpbmUgU0VDVVJJVFlfRVJBU0VfUFJFUEFSRSAweEJDCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTRUNVUklUWV9FUkFTRV9VTklUIDB4QkQKICNkZWZpbmUgU0VDVVJJVFlfRlJFRVpFX0xPQ0sgMHhCRQogI2RlZmluZSBTRUNVUklUWV9ESVNBQkxFX1BBU1NXT1JEIDB4QkYKLQogc3RydWN0IGhkX2dlb21ldHJ5IHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgY2hhciBoZWFkczsKICB1bnNpZ25lZCBjaGFyIHNlY3RvcnM7CiAgdW5zaWduZWQgc2hvcnQgY3lsaW5kZXJzOwogIHVuc2lnbmVkIGxvbmcgc3RhcnQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKLQotI2RlZmluZSBIRElPX0dFVEdFTyAweDAzMDEgIAotI2RlZmluZSBIRElPX0dFVF9VTk1BU0tJTlRSIDB4MDMwMiAgCi0jZGVmaW5lIEhESU9fR0VUX01VTFRDT1VOVCAweDAzMDQgIAotI2RlZmluZSBIRElPX0dFVF9RRE1BIDB4MDMwNSAgCi0KLSNkZWZpbmUgSERJT19TRVRfWEZFUiAweDAzMDYgIAotCi0jZGVmaW5lIEhESU9fT0JTT0xFVEVfSURFTlRJVFkgMHgwMzA3ICAKLSNkZWZpbmUgSERJT19HRVRfS0VFUFNFVFRJTkdTIDB4MDMwOCAgCi0jZGVmaW5lIEhESU9fR0VUXzMyQklUIDB4MDMwOSAgCi0jZGVmaW5lIEhESU9fR0VUX05PV0VSUiAweDAzMGEgIAotI2RlZmluZSBIRElPX0dFVF9ETUEgMHgwMzBiICAKLSNkZWZpbmUgSERJT19HRVRfTklDRSAweDAzMGMgIAotI2RlZmluZSBIRElPX0dFVF9JREVOVElUWSAweDAzMGQgIAotI2RlZmluZSBIRElPX0dFVF9XQ0FDSEUgMHgwMzBlICAKLSNkZWZpbmUgSERJT19HRVRfQUNPVVNUSUMgMHgwMzBmICAKLSNkZWZpbmUgSERJT19HRVRfQUREUkVTUyAweDAzMTAgIAotCi0jZGVmaW5lIEhESU9fR0VUX0JVU1NUQVRFIDB4MDMxYSAgCi0jZGVmaW5lIEhESU9fVFJJU1RBVEVfSFdJRiAweDAzMWIgIAotI2RlZmluZSBIRElPX0RSSVZFX1JFU0VUIDB4MDMxYyAgCi0jZGVmaW5lIEhESU9fRFJJVkVfVEFTS0ZJTEUgMHgwMzFkICAKLSNkZWZpbmUgSERJT19EUklWRV9UQVNLIDB4MDMxZSAgCi0jZGVmaW5lIEhESU9fRFJJVkVfQ01EIDB4MDMxZiAgCisjZGVmaW5lIEhESU9fR0VUR0VPIDB4MDMwMQorI2RlZmluZSBIRElPX0dFVF9VTk1BU0tJTlRSIDB4MDMwMgorI2RlZmluZSBIRElPX0dFVF9NVUxUQ09VTlQgMHgwMzA0CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBIRElPX0dFVF9RRE1BIDB4MDMwNQorI2RlZmluZSBIRElPX1NFVF9YRkVSIDB4MDMwNgorI2RlZmluZSBIRElPX09CU09MRVRFX0lERU5USVRZIDB4MDMwNworI2RlZmluZSBIRElPX0dFVF9LRUVQU0VUVElOR1MgMHgwMzA4CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBIRElPX0dFVF8zMkJJVCAweDAzMDkKKyNkZWZpbmUgSERJT19HRVRfTk9XRVJSIDB4MDMwYQorI2RlZmluZSBIRElPX0dFVF9ETUEgMHgwMzBiCisjZGVmaW5lIEhESU9fR0VUX05JQ0UgMHgwMzBjCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBIRElPX0dFVF9JREVOVElUWSAweDAzMGQKKyNkZWZpbmUgSERJT19HRVRfV0NBQ0hFIDB4MDMwZQorI2RlZmluZSBIRElPX0dFVF9BQ09VU1RJQyAweDAzMGYKKyNkZWZpbmUgSERJT19HRVRfQUREUkVTUyAweDAzMTAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEhESU9fR0VUX0JVU1NUQVRFIDB4MDMxYQorI2RlZmluZSBIRElPX1RSSVNUQVRFX0hXSUYgMHgwMzFiCisjZGVmaW5lIEhESU9fRFJJVkVfUkVTRVQgMHgwMzFjCisjZGVmaW5lIEhESU9fRFJJVkVfVEFTS0ZJTEUgMHgwMzFkCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBIRElPX0RSSVZFX1RBU0sgMHgwMzFlCisjZGVmaW5lIEhESU9fRFJJVkVfQ01EIDB4MDMxZgogI2RlZmluZSBIRElPX0RSSVZFX0NNRF9BRUIgSERJT19EUklWRV9UQVNLCi0KLSNkZWZpbmUgSERJT19TRVRfTVVMVENPVU5UIDB4MDMyMSAgCi0jZGVmaW5lIEhESU9fU0VUX1VOTUFTS0lOVFIgMHgwMzIyICAKLSNkZWZpbmUgSERJT19TRVRfS0VFUFNFVFRJTkdTIDB4MDMyMyAgCi0jZGVmaW5lIEhESU9fU0VUXzMyQklUIDB4MDMyNCAgCi0jZGVmaW5lIEhESU9fU0VUX05PV0VSUiAweDAzMjUgIAotI2RlZmluZSBIRElPX1NFVF9ETUEgMHgwMzI2ICAKLSNkZWZpbmUgSERJT19TRVRfUElPX01PREUgMHgwMzI3ICAKLSNkZWZpbmUgSERJT19TQ0FOX0hXSUYgMHgwMzI4ICAKLSNkZWZpbmUgSERJT19TRVRfTklDRSAweDAzMjkgIAotI2RlZmluZSBIRElPX1VOUkVHSVNURVJfSFdJRiAweDAzMmEgIAotI2RlZmluZSBIRElPX1NFVF9XQ0FDSEUgMHgwMzJiICAKLSNkZWZpbmUgSERJT19TRVRfQUNPVVNUSUMgMHgwMzJjICAKLSNkZWZpbmUgSERJT19TRVRfQlVTU1RBVEUgMHgwMzJkICAKLSNkZWZpbmUgSERJT19TRVRfUURNQSAweDAzMmUgIAotI2RlZmluZSBIRElPX1NFVF9BRERSRVNTIDB4MDMyZiAgCi0KKyNkZWZpbmUgSERJT19TRVRfTVVMVENPVU5UIDB4MDMyMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgSERJT19TRVRfVU5NQVNLSU5UUiAweDAzMjIKKyNkZWZpbmUgSERJT19TRVRfS0VFUFNFVFRJTkdTIDB4MDMyMworI2RlZmluZSBIRElPX1NFVF8zMkJJVCAweDAzMjQKKyNkZWZpbmUgSERJT19TRVRfTk9XRVJSIDB4MDMyNQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgSERJT19TRVRfRE1BIDB4MDMyNgorI2RlZmluZSBIRElPX1NFVF9QSU9fTU9ERSAweDAzMjcKKyNkZWZpbmUgSERJT19TQ0FOX0hXSUYgMHgwMzI4CisjZGVmaW5lIEhESU9fU0VUX05JQ0UgMHgwMzI5CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBIRElPX1VOUkVHSVNURVJfSFdJRiAweDAzMmEKKyNkZWZpbmUgSERJT19TRVRfV0NBQ0hFIDB4MDMyYgorI2RlZmluZSBIRElPX1NFVF9BQ09VU1RJQyAweDAzMmMKKyNkZWZpbmUgSERJT19TRVRfQlVTU1RBVEUgMHgwMzJkCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBIRElPX1NFVF9RRE1BIDB4MDMyZQorI2RlZmluZSBIRElPX1NFVF9BRERSRVNTIDB4MDMyZgogZW51bSB7CiAgQlVTU1RBVEVfT0ZGID0gMCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQlVTU1RBVEVfT04sCiAgQlVTU1RBVEVfVFJJU1RBVEUKIH07Ci0KICNkZWZpbmUgX19ORVdfSERfRFJJVkVfSUQKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBoZF9kcml2ZWlkIHsKICB1bnNpZ25lZCBzaG9ydCBjb25maWc7CiAgdW5zaWduZWQgc2hvcnQgY3lsczsKICB1bnNpZ25lZCBzaG9ydCByZXNlcnZlZDI7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIHNob3J0IGhlYWRzOwogIHVuc2lnbmVkIHNob3J0IHRyYWNrX2J5dGVzOwogIHVuc2lnbmVkIHNob3J0IHNlY3Rvcl9ieXRlczsKICB1bnNpZ25lZCBzaG9ydCBzZWN0b3JzOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBzaG9ydCB2ZW5kb3IwOwogIHVuc2lnbmVkIHNob3J0IHZlbmRvcjE7CiAgdW5zaWduZWQgc2hvcnQgdmVuZG9yMjsKICB1bnNpZ25lZCBjaGFyIHNlcmlhbF9ub1syMF07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIHNob3J0IGJ1Zl90eXBlOwogIHVuc2lnbmVkIHNob3J0IGJ1Zl9zaXplOwogIHVuc2lnbmVkIHNob3J0IGVjY19ieXRlczsKICB1bnNpZ25lZCBjaGFyIGZ3X3Jldls4XTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgY2hhciBtb2RlbFs0MF07CiAgdW5zaWduZWQgY2hhciBtYXhfbXVsdHNlY3Q7CiAgdW5zaWduZWQgY2hhciB2ZW5kb3IzOwogIHVuc2lnbmVkIHNob3J0IGR3b3JkX2lvOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBjaGFyIHZlbmRvcjQ7CiAgdW5zaWduZWQgY2hhciBjYXBhYmlsaXR5OwogIHVuc2lnbmVkIHNob3J0IHJlc2VydmVkNTA7CiAgdW5zaWduZWQgY2hhciB2ZW5kb3I1OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBjaGFyIHRQSU87CiAgdW5zaWduZWQgY2hhciB2ZW5kb3I2OwogIHVuc2lnbmVkIGNoYXIgdERNQTsKICB1bnNpZ25lZCBzaG9ydCBmaWVsZF92YWxpZDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgc2hvcnQgY3VyX2N5bHM7CiAgdW5zaWduZWQgc2hvcnQgY3VyX2hlYWRzOwogIHVuc2lnbmVkIHNob3J0IGN1cl9zZWN0b3JzOwogIHVuc2lnbmVkIHNob3J0IGN1cl9jYXBhY2l0eTA7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIHNob3J0IGN1cl9jYXBhY2l0eTE7CiAgdW5zaWduZWQgY2hhciBtdWx0c2VjdDsKICB1bnNpZ25lZCBjaGFyIG11bHRzZWN0X3ZhbGlkOwogIHVuc2lnbmVkIGludCBsYmFfY2FwYWNpdHk7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIHNob3J0IGRtYV8xd29yZDsKICB1bnNpZ25lZCBzaG9ydCBkbWFfbXdvcmQ7CiAgdW5zaWduZWQgc2hvcnQgZWlkZV9waW9fbW9kZXM7CiAgdW5zaWduZWQgc2hvcnQgZWlkZV9kbWFfbWluOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBzaG9ydCBlaWRlX2RtYV90aW1lOwogIHVuc2lnbmVkIHNob3J0IGVpZGVfcGlvOwogIHVuc2lnbmVkIHNob3J0IGVpZGVfcGlvX2lvcmR5OwogIHVuc2lnbmVkIHNob3J0IHdvcmRzNjlfNzBbMl07Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgc2hvcnQgd29yZHM3MV83NFs0XTsKICB1bnNpZ25lZCBzaG9ydCBxdWV1ZV9kZXB0aDsKICB1bnNpZ25lZCBzaG9ydCB3b3Jkczc2Xzc5WzRdOwogIHVuc2lnbmVkIHNob3J0IG1ham9yX3Jldl9udW07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIHNob3J0IG1pbm9yX3Jldl9udW07CiAgdW5zaWduZWQgc2hvcnQgY29tbWFuZF9zZXRfMTsKICB1bnNpZ25lZCBzaG9ydCBjb21tYW5kX3NldF8yOwogIHVuc2lnbmVkIHNob3J0IGNmc3NlOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBzaG9ydCBjZnNfZW5hYmxlXzE7CiAgdW5zaWduZWQgc2hvcnQgY2ZzX2VuYWJsZV8yOwogIHVuc2lnbmVkIHNob3J0IGNzZl9kZWZhdWx0OwogIHVuc2lnbmVkIHNob3J0IGRtYV91bHRyYTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgc2hvcnQgdHJzZXVjOwogIHVuc2lnbmVkIHNob3J0IHRyc0V1YzsKICB1bnNpZ25lZCBzaG9ydCBDdXJBUE12YWx1ZXM7CiAgdW5zaWduZWQgc2hvcnQgbXByYzsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgc2hvcnQgaHdfY29uZmlnOwogIHVuc2lnbmVkIHNob3J0IGFjb3VzdGljOwogIHVuc2lnbmVkIHNob3J0IG1zcnFzOwogIHVuc2lnbmVkIHNob3J0IHN4ZmVydDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgc2hvcnQgc2FsOwogIHVuc2lnbmVkIGludCBzcGc7CiAgdW5zaWduZWQgbG9uZyBsb25nIGxiYV9jYXBhY2l0eV8yOwogIHVuc2lnbmVkIHNob3J0IHdvcmRzMTA0XzEyNVsyMl07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIHNob3J0IGxhc3RfbHVuOwogIHVuc2lnbmVkIHNob3J0IHdvcmQxMjc7CiAgdW5zaWduZWQgc2hvcnQgZGxmOwogIHVuc2lnbmVkIHNob3J0IGNzZm87CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIHNob3J0IHdvcmRzMTMwXzE1NVsyNl07CiAgdW5zaWduZWQgc2hvcnQgd29yZDE1NjsKICB1bnNpZ25lZCBzaG9ydCB3b3JkczE1N18xNTlbM107CiAgdW5zaWduZWQgc2hvcnQgY2ZhX3Bvd2VyOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBzaG9ydCB3b3JkczE2MV8xNzVbMTVdOwogIHVuc2lnbmVkIHNob3J0IHdvcmRzMTc2XzIwNVszMF07CiAgdW5zaWduZWQgc2hvcnQgd29yZHMyMDZfMjU0WzQ5XTsKICB1bnNpZ25lZCBzaG9ydCBpbnRlZ3JpdHlfd29yZDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwotCi0jZGVmaW5lIElERV9OSUNFX0RTQ19PVkVSTEFQICgwKSAgCi0jZGVmaW5lIElERV9OSUNFX0FUQVBJX09WRVJMQVAgKDEpICAKLSNkZWZpbmUgSURFX05JQ0VfMCAoMikgIAotI2RlZmluZSBJREVfTklDRV8xICgzKSAgCi0jZGVmaW5lIElERV9OSUNFXzIgKDQpICAKLQorI2RlZmluZSBJREVfTklDRV9EU0NfT1ZFUkxBUCAoMCkKKyNkZWZpbmUgSURFX05JQ0VfQVRBUElfT1ZFUkxBUCAoMSkKKyNkZWZpbmUgSURFX05JQ0VfMCAoMikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIElERV9OSUNFXzEgKDMpCisjZGVmaW5lIElERV9OSUNFXzIgKDQpCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9oZHNtYXJ0LmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvaGRzbWFydC5oCmluZGV4IDZjYmM2NTMuLmQ3ZjZkZTcgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9oZHNtYXJ0LmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2hkc21hcnQuaApAQCAtNywxMDggKzcsMTI1IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfTElOVVhfSERTTUFSVF9ICiAjZGVmaW5lIF9MSU5VWF9IRFNNQVJUX0gKLQogI2RlZmluZSBPRkZMSU5FX0ZVTExfU0NBTiAwCiAjZGVmaW5lIFNIT1JUX1NFTEZfVEVTVCAxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBFWFRFTkRfU0VMRl9URVNUIDIKICNkZWZpbmUgU0hPUlRfQ0FQVElWRV9TRUxGX1RFU1QgMTI5CiAjZGVmaW5lIEVYVEVORF9DQVBUSVZFX1NFTEZfVEVTVCAxMzAKLQogdHlwZWRlZiBzdHJ1Y3QgYXRhX3NtYXJ0X2F0dHJpYnV0ZV9zIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgY2hhciBpZDsKICB1bnNpZ25lZCBzaG9ydCBzdGF0dXNfZmxhZzsKICB1bnNpZ25lZCBjaGFyIG5vcm1hbGl6ZWQ7CiAgdW5zaWduZWQgY2hhciB3b3JzZV9ub3JtYWw7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGNoYXIgcmF3WzZdOwogIHVuc2lnbmVkIGNoYXIgcmVzZXJ2OwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgYXRhX3NtYXJ0X2F0dHJpYnV0ZV90OwotCiB0eXBlZGVmIHN0cnVjdCBhdGFfc21hcnRfdmFsdWVzX3MgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBzaG9ydCByZXZudW1iZXI7CiAgYXRhX3NtYXJ0X2F0dHJpYnV0ZV90IHZlbmRvcl9hdHRyaWJ1dGVzIFszMF07CiAgdW5zaWduZWQgY2hhciBvZmZsaW5lX2RhdGFfY29sbGVjdGlvbl9zdGF0dXM7CiAgdW5zaWduZWQgY2hhciBzZWxmX3Rlc3RfZXhlY19zdGF0dXM7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIHNob3J0IHRvdGFsX3RpbWVfdG9fY29tcGxldGVfb2ZmX2xpbmU7CiAgdW5zaWduZWQgY2hhciB2ZW5kb3Jfc3BlY2lmaWNfMzY2OwogIHVuc2lnbmVkIGNoYXIgb2ZmbGluZV9kYXRhX2NvbGxlY3Rpb25fY2FwYWJpbGl0eTsKICB1bnNpZ25lZCBzaG9ydCBzbWFydF9jYXBhYmlsaXR5OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBjaGFyIGVycm9ybG9nX2NhcGFiaWxpdHk7CiAgdW5zaWduZWQgY2hhciB2ZW5kb3Jfc3BlY2lmaWNfMzcxOwogIHVuc2lnbmVkIGNoYXIgc2hvcnRfdGVzdF9jb21wbGV0aW9uX3RpbWU7CiAgdW5zaWduZWQgY2hhciBleHRlbmRfdGVzdF9jb21wbGV0aW9uX3RpbWU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGNoYXIgcmVzZXJ2ZWRfMzc0XzM4NSBbMTJdOwogIHVuc2lnbmVkIGNoYXIgdmVuZG9yX3NwZWNpZmljXzM4Nl81MDkgWzEyNV07CiAgdW5zaWduZWQgY2hhciBjaGtzdW07CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBhdGFfc21hcnRfdmFsdWVzX3Q7Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB0eXBlZGVmIHN0cnVjdCBhdGFfc21hcnRfdGhyZXNob2xkX2VudHJ5X3MgewogIHVuc2lnbmVkIGNoYXIgaWQ7CiAgdW5zaWduZWQgY2hhciBub3JtYWxpemVkX3RocmVzaG9sZDsKICB1bnNpZ25lZCBjaGFyIHJlc2VydmVkWzEwXTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBhdGFfc21hcnRfdGhyZXNob2xkX2VudHJ5X3Q7Ci0KIHR5cGVkZWYgc3RydWN0IGF0YV9zbWFydF90aHJlc2hvbGRzX3MgewogIHVuc2lnbmVkIHNob3J0IHJldm51bWJlcjsKICBhdGFfc21hcnRfdGhyZXNob2xkX2VudHJ5X3QgdGhyZXNfZW50cmllc1szMF07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGNoYXIgcmVzZXJ2ZWRbMTQ5XTsKICB1bnNpZ25lZCBjaGFyIGNoa3N1bTsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIGF0YV9zbWFydF90aHJlc2hvbGRzX3Q7Ci0KIHR5cGVkZWYgc3RydWN0IGF0YV9zbWFydF9lcnJvcmxvZ19jb21tYW5kX3N0cnVjdF9zIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgY2hhciBkZXZpY2Vjb250cm9scmVnOwogIHVuc2lnbmVkIGNoYXIgZmVhdHVyZXNyZWc7CiAgdW5zaWduZWQgY2hhciBzZWN0b3JfY291bnQ7CiAgdW5zaWduZWQgY2hhciBzZWN0b3JfbnVtYmVyOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBjaGFyIGN5bGluZGVyX2xvdzsKICB1bnNpZ25lZCBjaGFyIGN5bGluZGVyX2hpZ2g7CiAgdW5zaWduZWQgY2hhciBkcml2ZV9oZWFkOwogIHVuc2lnbmVkIGNoYXIgY29tbWFuZHJlZzsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgaW50IHRpbWVzdGFtcDsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIGF0YV9zbWFydF9lcnJvcmxvZ19jb21tYW5kX3N0cnVjdF90OwotCiB0eXBlZGVmIHN0cnVjdCBhdGFfc21hcnRfZXJyb3Jsb2dfZXJyb3Jfc3RydWN0X3MgewogIHVuc2lnbmVkIGNoYXIgZXJyb3JfY29uZGl0aW9uOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBjaGFyIGV4dGVuZGVkX2Vycm9yWzE0XTsKICB1bnNpZ25lZCBjaGFyIHN0YXRlOwogIHVuc2lnbmVkIHNob3J0IHRpbWVzdGFtcDsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIGF0YV9zbWFydF9lcnJvcmxvZ19lcnJvcl9zdHJ1Y3RfdDsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHR5cGVkZWYgc3RydWN0IGF0YV9zbWFydF9lcnJvcmxvZ19zdHJ1Y3RfcyB7CiAgYXRhX3NtYXJ0X2Vycm9ybG9nX2NvbW1hbmRfc3RydWN0X3QgY29tbWFuZHNbNl07CiAgYXRhX3NtYXJ0X2Vycm9ybG9nX2Vycm9yX3N0cnVjdF90IGVycm9yX3N0cnVjdDsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIGF0YV9zbWFydF9lcnJvcmxvZ19zdHJ1Y3RfdDsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHR5cGVkZWYgc3RydWN0IGF0YV9zbWFydF9lcnJvcmxvZ19zIHsKICB1bnNpZ25lZCBjaGFyIHJldm51bWJlcjsKICB1bnNpZ25lZCBjaGFyIGVycm9yX2xvZ19wb2ludGVyOwogIGF0YV9zbWFydF9lcnJvcmxvZ19zdHJ1Y3RfdCBlcnJvcmxvZ19zdHJ1Y3RbNV07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIHNob3J0IGF0YV9lcnJvcl9jb3VudDsKICB1bnNpZ25lZCBzaG9ydCBub25fZmF0YWxfY291bnQ7CiAgdW5zaWduZWQgc2hvcnQgZHJpdmVfdGltZW91dF9jb3VudDsKICB1bnNpZ25lZCBjaGFyIHJlc2VydmVkWzUzXTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgY2hhciBjaGtzdW07CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBhdGFfc21hcnRfZXJyb3Jsb2dfdDsKLQogdHlwZWRlZiBzdHJ1Y3QgYXRhX3NtYXJ0X3NlbGZ0ZXN0bG9nX3N0cnVjdF9zIHsKICB1bnNpZ25lZCBjaGFyIHNlbGZ0ZXN0bnVtYmVyOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBjaGFyIHNlbGZ0ZXN0c3RhdHVzOwogIHVuc2lnbmVkIHNob3J0IHRpbWVzdGFtcDsKICB1bnNpZ25lZCBjaGFyIHNlbGZ0ZXN0ZmFpbHVyZWNoZWNrcG9pbnQ7CiAgdW5zaWduZWQgaW50IGxiYWZpcnN0ZmFpbHVyZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgY2hhciB2ZW5kb3JzcGVjaWZpY1sxNV07CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBhdGFfc21hcnRfc2VsZnRlc3Rsb2dfc3RydWN0X3Q7Ci0KIHR5cGVkZWYgc3RydWN0IGF0YV9zbWFydF9zZWxmdGVzdGxvZ19zIHsKICB1bnNpZ25lZCBzaG9ydCByZXZudW1iZXI7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGF0YV9zbWFydF9zZWxmdGVzdGxvZ19zdHJ1Y3RfdCBzZWxmdGVzdF9zdHJ1Y3RbMjFdOwogIHVuc2lnbmVkIGNoYXIgdmVuZG9yc3BlY2lmaWNbMl07CiAgdW5zaWduZWQgY2hhciBtb3N0cmVjZW50dGVzdDsKICB1bnNpZ25lZCBjaGFyIHJlc2V2ZXJlZFsyXTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgY2hhciBjaGtzdW07CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBhdGFfc21hcnRfc2VsZnRlc3Rsb2dfdDsKLQogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvaGlkLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvaGlkLmgKaW5kZXggNDUwZGIxOS4uZGZkNmFjYiAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2hpZC5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9oaWQuaApAQCAtNywzMCArNywzMyBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX19ISURfSAogI2RlZmluZSBfX0hJRF9ICi0KICNkZWZpbmUgVVNCX0lOVEVSRkFDRV9DTEFTU19ISUQgMwotCiAjZGVmaW5lIFVTQl9JTlRFUkZBQ0VfU1VCQ0xBU1NfQk9PVCAxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBVU0JfSU5URVJGQUNFX1BST1RPQ09MX0tFWUJPQVJEIDEKICNkZWZpbmUgVVNCX0lOVEVSRkFDRV9QUk9UT0NPTF9NT1VTRSAyCi0KICNkZWZpbmUgSElEX1JFUV9HRVRfUkVQT1JUIDB4MDEKICNkZWZpbmUgSElEX1JFUV9HRVRfSURMRSAweDAyCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBISURfUkVRX0dFVF9QUk9UT0NPTCAweDAzCiAjZGVmaW5lIEhJRF9SRVFfU0VUX1JFUE9SVCAweDA5CiAjZGVmaW5lIEhJRF9SRVFfU0VUX0lETEUgMHgwQQogI2RlZmluZSBISURfUkVRX1NFVF9QUk9UT0NPTCAweDBCCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEhJRF9EVF9ISUQgKFVTQl9UWVBFX0NMQVNTIHwgMHgwMSkKICNkZWZpbmUgSElEX0RUX1JFUE9SVCAoVVNCX1RZUEVfQ0xBU1MgfCAweDAyKQogI2RlZmluZSBISURfRFRfUEhZU0lDQUwgKFVTQl9UWVBFX0NMQVNTIHwgMHgwMykKLQogI2RlZmluZSBISURfTUFYX0RFU0NSSVBUT1JfU0laRSA0MDk2Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZW5kaWYKLQotCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvaGlkcmF3LmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvaGlkcmF3LmgKaW5kZXggMDY4MWVjZS4uYzc3NmNlNSAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2hpZHJhdy5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9oaWRyYXcuaApAQCAtNywzNSArNywzOSBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX0hJRFJBV19ICiAjZGVmaW5lIF9ISURSQVdfSAotCiAjaW5jbHVkZSA8bGludXgvaGlkLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBoaWRyYXdfcmVwb3J0X2Rlc2NyaXB0b3IgewogIF9fdTMyIHNpemU7CiAgX191OCB2YWx1ZVtISURfTUFYX0RFU0NSSVBUT1JfU0laRV07CiB9OwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IGhpZHJhd19kZXZpbmZvIHsKICBfX3UzMiBidXN0eXBlOwogIF9fczE2IHZlbmRvcjsKICBfX3MxNiBwcm9kdWN0OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07Ci0KICNkZWZpbmUgSElESU9DR1JERVNDU0laRSBfSU9SKCdIJywgMHgwMSwgaW50KQogI2RlZmluZSBISURJT0NHUkRFU0MgX0lPUignSCcsIDB4MDIsIHN0cnVjdCBoaWRyYXdfcmVwb3J0X2Rlc2NyaXB0b3IpCiAjZGVmaW5lIEhJRElPQ0dSQVdJTkZPIF9JT1IoJ0gnLCAweDAzLCBzdHJ1Y3QgaGlkcmF3X2RldmluZm8pCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBISURJT0NHUkFXTkFNRShsZW4pIF9JT0MoX0lPQ19SRUFELCAnSCcsIDB4MDQsIGxlbikKICNkZWZpbmUgSElESU9DR1JBV1BIWVMobGVuKSBfSU9DKF9JT0NfUkVBRCwgJ0gnLCAweDA1LCBsZW4pCi0KICNkZWZpbmUgSElEUkFXX0ZJUlNUX01JTk9SIDAKICNkZWZpbmUgSElEUkFXX01BWF9ERVZJQ0VTIDY0Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEhJRFJBV19CVUZGRVJfU0laRSA2NAotCiAjZW5kaWYKLQpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2hpZ2htZW0uaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9oaWdobWVtLmgKaW5kZXggZDRhMzRjYS4uODg0MzVjOCAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2hpZ2htZW0uaAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvaGlnaG1lbS5oCkBAIC03LDI1ICs3LDMzIEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfTElOVVhfSElHSE1FTV9ICiAjZGVmaW5lIF9MSU5VWF9ISUdITUVNX0gKLQogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgotCiAjaWZuZGVmIEFSQ0hfSEFTX0ZMVVNIX0FOT05fUEFHRQogI2VuZGlmCiAjaWZuZGVmIEFSQ0hfSEFTX0ZMVVNIX0tFUk5FTF9EQ0FDSEVfUEFHRQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlbmRpZgogI2RlZmluZSBrdW5tYXAocGFnZSkgZG8geyAodm9pZCkgKHBhZ2UpOyB9IHdoaWxlICgwKQogI2RlZmluZSBrbWFwX2F0b21pYyhwYWdlLCBpZHgpIHBhZ2VfYWRkcmVzcyhwYWdlKQogI2RlZmluZSBrdW5tYXBfYXRvbWljKGFkZHIsIGlkeCkgZG8geyB9IHdoaWxlICgwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUga21hcF9hdG9taWNfcGZuKHBmbiwgaWR4KSBwYWdlX2FkZHJlc3MocGZuX3RvX3BhZ2UocGZuKSkKICNkZWZpbmUga21hcF9hdG9taWNfdG9fcGFnZShwdHIpIHZpcnRfdG9fcGFnZShwdHIpCiAjaWZuZGVmIF9fSEFWRV9BUkNIX0FMTE9DX1pFUk9FRF9VU0VSX0hJR0hQQUdFCiAjZW5kaWYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9oaWwuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9oaWwuaAppbmRleCBhMGIzYjk3Li4yYjFmMDc5IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvaGlsLmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2hpbC5oCkBAIC03LDI1MCArNywyNzAgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9ISUxfSF8KICNkZWZpbmUgX0hJTF9IXwotCiAjaW5jbHVkZSA8YXNtL3R5cGVzLmg+Ci0KICNkZWZpbmUgSElMX0NMT0NLIDhNSFoKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEhJTF9FSzFfQ0xPQ0sgMzBIWgogI2RlZmluZSBISUxfRUsyX0NMT0NLIDYwSFoKLQotI2RlZmluZSBISUxfVElNRU9VVF9ERVYgNSAgCi0jZGVmaW5lIEhJTF9USU1FT1VUX0RFVlMgMTAgIAotI2RlZmluZSBISUxfVElNRU9VVF9OT1JFU1AgMTAgIAotI2RlZmluZSBISUxfVElNRU9VVF9ERVZTX0RBVEEgMTYgIAotI2RlZmluZSBISUxfVElNRU9VVF9TRUxGVEVTVCAyMDAgIAotCisjZGVmaW5lIEhJTF9USU1FT1VUX0RFViA1CisjZGVmaW5lIEhJTF9USU1FT1VUX0RFVlMgMTAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEhJTF9USU1FT1VUX05PUkVTUCAxMAorI2RlZmluZSBISUxfVElNRU9VVF9ERVZTX0RBVEEgMTYKKyNkZWZpbmUgSElMX1RJTUVPVVRfU0VMRlRFU1QgMjAwCiAjZGVmaW5lIEhJTF9XSVJFX1BBQ0tFVF9MRU4gMTUKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBlbnVtIGhpbF93aXJlX2JpdHBvcyB7CiAgSElMX1dJUkVfU1RBUlQgPSAwLAogIEhJTF9XSVJFX0FERFIyLAogIEhJTF9XSVJFX0FERFIxLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBISUxfV0lSRV9BRERSMCwKICBISUxfV0lSRV9DT01NQU5ELAogIEhJTF9XSVJFX0RBVEE3LAogIEhJTF9XSVJFX0RBVEE2LAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBISUxfV0lSRV9EQVRBNSwKICBISUxfV0lSRV9EQVRBNCwKICBISUxfV0lSRV9EQVRBMywKICBISUxfV0lSRV9EQVRBMiwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgSElMX1dJUkVfREFUQTEsCiAgSElMX1dJUkVfREFUQTAsCiAgSElMX1dJUkVfUEFSSVRZLAogIEhJTF9XSVJFX1NUT1AKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwotCiBlbnVtIGhpbF9wa3RfYml0cG9zIHsKICBISUxfUEtUX0NNRCA9IDB4MDAwMDA4MDAsCiAgSElMX1BLVF9BRERSMiA9IDB4MDAwMDA0MDAsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIEhJTF9QS1RfQUREUjEgPSAweDAwMDAwMjAwLAogIEhJTF9QS1RfQUREUjAgPSAweDAwMDAwMTAwLAogIEhJTF9QS1RfQUREUl9NQVNLID0gMHgwMDAwMDcwMCwKICBISUxfUEtUX0FERFJfU0hJRlQgPSA4LAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBISUxfUEtUX0RBVEE3ID0gMHgwMDAwMDA4MCwKICBISUxfUEtUX0RBVEE2ID0gMHgwMDAwMDA0MCwKICBISUxfUEtUX0RBVEE1ID0gMHgwMDAwMDAyMCwKICBISUxfUEtUX0RBVEE0ID0gMHgwMDAwMDAxMCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgSElMX1BLVF9EQVRBMyA9IDB4MDAwMDAwMDgsCiAgSElMX1BLVF9EQVRBMiA9IDB4MDAwMDAwMDQsCiAgSElMX1BLVF9EQVRBMSA9IDB4MDAwMDAwMDIsCiAgSElMX1BLVF9EQVRBMCA9IDB4MDAwMDAwMDEsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIEhJTF9QS1RfREFUQV9NQVNLID0gMHgwMDAwMDBGRiwKICBISUxfUEtUX0RBVEFfU0hJRlQgPSAwCiB9OwotCiBlbnVtIGhpbF9lcnJvcl9iaXRwb3MgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBISUxfRVJSX09CID0gMHgwMDAwMDgwMCwKICBISUxfRVJSX0lOVCA9IDB4MDAwMTAwMDAsCiAgSElMX0VSUl9OTUkgPSAweDAwMDIwMDAwLAogIEhJTF9FUlJfTEVSUiA9IDB4MDAwNDAwMDAsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIEhJTF9FUlJfUEVSUiA9IDB4MDEwMDAwMDAsCiAgSElMX0VSUl9GRVJSID0gMHgwMjAwMDAwMCwKICBISUxfRVJSX0ZPRiA9IDB4MDQwMDAwMDAKIH07Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBlbnVtIGhpbF9jb250cm9sX2JpdHBvcyB7CiAgSElMX0NUUkxfVEVTVCA9IDB4MDAwMTAwMDAsCiAgSElMX0NUUkxfSVBGID0gMHgwMDA0MDAwMCwKICBISUxfQ1RSTF9BUEUgPSAweDAyMDAwMDAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKLQotI2RlZmluZSBISUxfRE9fQUxURVJfQ1RSTCAweDQwMDAwMDAwICAKLSNkZWZpbmUgSElMX0NUUkxfT05MWSAweGMwMDAwMDAwICAKLQorI2RlZmluZSBISUxfRE9fQUxURVJfQ1RSTCAweDQwMDAwMDAwCisjZGVmaW5lIEhJTF9DVFJMX09OTFkgMHhjMDAwMDAwMAogdHlwZWRlZiB1MzIgaGlsX3BhY2tldDsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIGVudW0gaGlsX2NvbW1hbmQgewogIEhJTF9DTURfSUZDID0gMHgwMCwKICBISUxfQ01EX0VQVCA9IDB4MDEsCiAgSElMX0NNRF9FTEIgPSAweDAyLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBISUxfQ01EX0lERCA9IDB4MDMsCiAgSElMX0NNRF9EU1IgPSAweDA0LAogIEhJTF9DTURfUFNUID0gMHgwNSwKICBISUxfQ01EX1JSRyA9IDB4MDYsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIEhJTF9DTURfV1JHID0gMHgwNywKICBISUxfQ01EX0FDRiA9IDB4MDgsCiAgSElMX0NNRElEX0FDRiA9IDB4MDcsCiAgSElMX0NNRF9QT0wgPSAweDEwLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBISUxfQ01EQ1RfUE9MID0gMHgwZiwKICBISUxfQ01EX1JQTCA9IDB4MjAsCiAgSElMX0NNRENUX1JQTCA9IDB4MGYsCiAgSElMX0NNRF9STk0gPSAweDMwLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBISUxfQ01EX1JTVCA9IDB4MzEsCiAgSElMX0NNRF9FWEQgPSAweDMyLAogIEhJTF9DTURfUlNDID0gMHgzMywKLQogIEhJTF9DTURfREtBID0gMHgzZCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgSElMX0NNRF9FSzEgPSAweDNlLAogIEhJTF9DTURfRUsyID0gMHgzZiwKICBISUxfQ01EX1BSMSA9IDB4NDAsCiAgSElMX0NNRF9QUjIgPSAweDQxLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBISUxfQ01EX1BSMyA9IDB4NDIsCiAgSElMX0NNRF9QUjQgPSAweDQzLAogIEhJTF9DTURfUFI1ID0gMHg0NCwKICBISUxfQ01EX1BSNiA9IDB4NDUsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIEhJTF9DTURfUFI3ID0gMHg0NiwKICBISUxfQ01EX1BSTSA9IDB4NDcsCiAgSElMX0NNRF9BSzEgPSAweDQ4LAogIEhJTF9DTURfQUsyID0gMHg0OSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgSElMX0NNRF9BSzMgPSAweDRhLAogIEhJTF9DTURfQUs0ID0gMHg0YiwKICBISUxfQ01EX0FLNSA9IDB4NGMsCiAgSElMX0NNRF9BSzYgPSAweDRkLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBISUxfQ01EX0FLNyA9IDB4NGUsCiAgSElMX0NNRF9BQ0sgPSAweDRmLAotCiAgSElMX0NNRF9SSU8gPSAweGZhLAogIEhJTF9DTURfU0hSID0gMHhmYiwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgSElMX0NNRF9URVIgPSAweGZjLAogIEhJTF9DTURfQ0FFID0gMHhmZCwKICBISUxfQ01EX0RIUiA9IDB4ZmUsCi0KIH07Ci0KLSNkZWZpbmUgSElMX0lERF9ESURfVFlQRV9NQVNLIDB4ZTAgIAotI2RlZmluZSBISUxfSUREX0RJRF9UWVBFX0tCX0lOVEVHUkFMIDB4YTAgIAotI2RlZmluZSBISUxfSUREX0RJRF9UWVBFX0tCX0lURiAweGMwICAKLSNkZWZpbmUgSElMX0lERF9ESURfVFlQRV9LQl9SU1ZEIDB4ZTAgIAotI2RlZmluZSBISUxfSUREX0RJRF9UWVBFX0tCX0xBTkdfTUFTSyAweDFmICAKLSNkZWZpbmUgSElMX0lERF9ESURfS0JMQU5HX1VTRV9FU0QgMHgwMCAgCi0jZGVmaW5lIEhJTF9JRERfRElEX1RZUEVfQUJTIDB4ODAgIAotI2RlZmluZSBISUxfSUREX0RJRF9BQlNfUlNWRDFfTUFTSyAweGY4ICAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEhJTF9JRERfRElEX1RZUEVfTUFTSyAweGUwCisjZGVmaW5lIEhJTF9JRERfRElEX1RZUEVfS0JfSU5URUdSQUwgMHhhMAorI2RlZmluZSBISUxfSUREX0RJRF9UWVBFX0tCX0lURiAweGMwCisjZGVmaW5lIEhJTF9JRERfRElEX1RZUEVfS0JfUlNWRCAweGUwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBISUxfSUREX0RJRF9UWVBFX0tCX0xBTkdfTUFTSyAweDFmCisjZGVmaW5lIEhJTF9JRERfRElEX0tCTEFOR19VU0VfRVNEIDB4MDAKKyNkZWZpbmUgSElMX0lERF9ESURfVFlQRV9BQlMgMHg4MAorI2RlZmluZSBISUxfSUREX0RJRF9BQlNfUlNWRDFfTUFTSyAweGY4CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBISUxfSUREX0RJRF9BQlNfUlNWRDEgMHg5OAotI2RlZmluZSBISUxfSUREX0RJRF9BQlNfVEFCTEVUX01BU0sgMHhmOCAgCisjZGVmaW5lIEhJTF9JRERfRElEX0FCU19UQUJMRVRfTUFTSyAweGY4CiAjZGVmaW5lIEhJTF9JRERfRElEX0FCU19UQUJMRVQgMHg5MAotI2RlZmluZSBISUxfSUREX0RJRF9BQlNfVFNDUkVFTl9NQVNLIDB4ZmMgIAorI2RlZmluZSBISUxfSUREX0RJRF9BQlNfVFNDUkVFTl9NQVNLIDB4ZmMKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEhJTF9JRERfRElEX0FCU19UU0NSRUVOIDB4OGMKLSNkZWZpbmUgSElMX0lERF9ESURfQUJTX1JTVkQyX01BU0sgMHhmYyAgCisjZGVmaW5lIEhJTF9JRERfRElEX0FCU19SU1ZEMl9NQVNLIDB4ZmMKICNkZWZpbmUgSElMX0lERF9ESURfQUJTX1JTVkQyIDB4ODgKLSNkZWZpbmUgSElMX0lERF9ESURfQUJTX1JTVkQzX01BU0sgMHhmYyAgCisjZGVmaW5lIEhJTF9JRERfRElEX0FCU19SU1ZEM19NQVNLIDB4ZmMKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEhJTF9JRERfRElEX0FCU19SU1ZEMyAweDgwCi0jZGVmaW5lIEhJTF9JRERfRElEX1RZUEVfUkVMIDB4NjAgIAotI2RlZmluZSBISUxfSUREX0RJRF9SRUxfUlNWRDFfTUFTSyAweGYwICAKKyNkZWZpbmUgSElMX0lERF9ESURfVFlQRV9SRUwgMHg2MAorI2RlZmluZSBISUxfSUREX0RJRF9SRUxfUlNWRDFfTUFTSyAweGYwCiAjZGVmaW5lIEhJTF9JRERfRElEX1JFTF9SU1ZEMSAweDcwCi0jZGVmaW5lIEhJTF9JRERfRElEX1JFTF9SU1ZEMl9NQVNLIDB4ZmMgIAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgSElMX0lERF9ESURfUkVMX1JTVkQyX01BU0sgMHhmYwogI2RlZmluZSBISUxfSUREX0RJRF9SRUxfUlNWRDIgMHg2YwotI2RlZmluZSBISUxfSUREX0RJRF9SRUxfTU9VU0VfTUFTSyAweGZjICAKKyNkZWZpbmUgSElMX0lERF9ESURfUkVMX01PVVNFX01BU0sgMHhmYwogI2RlZmluZSBISUxfSUREX0RJRF9SRUxfTU9VU0UgMHg2OAotI2RlZmluZSBISUxfSUREX0RJRF9SRUxfUVVBRF9NQVNLIDB4ZjggIAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgSElMX0lERF9ESURfUkVMX1FVQURfTUFTSyAweGY4CiAjZGVmaW5lIEhJTF9JRERfRElEX1JFTF9RVUFEIDB4NjAKLSNkZWZpbmUgSElMX0lERF9ESURfVFlQRV9DSEFSIDB4NDAgIAotI2RlZmluZSBISUxfSUREX0RJRF9DSEFSX0JBUkNPREVfTUFTSyAweGZjICAKKyNkZWZpbmUgSElMX0lERF9ESURfVFlQRV9DSEFSIDB4NDAKKyNkZWZpbmUgSElMX0lERF9ESURfQ0hBUl9CQVJDT0RFX01BU0sgMHhmYworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSElMX0lERF9ESURfQ0hBUl9CQVJDT0RFIDB4NWMKLSNkZWZpbmUgSElMX0lERF9ESURfQ0hBUl9SU1ZEMV9NQVNLIDB4ZmMgIAorI2RlZmluZSBISUxfSUREX0RJRF9DSEFSX1JTVkQxX01BU0sgMHhmYwogI2RlZmluZSBISUxfSUREX0RJRF9DSEFSX1JTVkQxIDB4NTgKLSNkZWZpbmUgSElMX0lERF9ESURfQ0hBUl9SU1ZEMl9NQVNLIDB4ZjggIAorI2RlZmluZSBISUxfSUREX0RJRF9DSEFSX1JTVkQyX01BU0sgMHhmOAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSElMX0lERF9ESURfQ0hBUl9SU1ZEMiAweDUwCi0jZGVmaW5lIEhJTF9JRERfRElEX0NIQVJfUlNWRDNfTUFTSyAweGYwICAKKyNkZWZpbmUgSElMX0lERF9ESURfQ0hBUl9SU1ZEM19NQVNLIDB4ZjAKICNkZWZpbmUgSElMX0lERF9ESURfQ0hBUl9SU1ZEMyAweDQwCi0jZGVmaW5lIEhJTF9JRERfRElEX1RZUEVfT1RIRVIgMHgyMCAgCi0jZGVmaW5lIEhJTF9JRERfRElEX09USEVSX1JTVkQxX01BU0sgMHhmMCAgCisjZGVmaW5lIEhJTF9JRERfRElEX1RZUEVfT1RIRVIgMHgyMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgSElMX0lERF9ESURfT1RIRVJfUlNWRDFfTUFTSyAweGYwCiAjZGVmaW5lIEhJTF9JRERfRElEX09USEVSX1JTVkQxIDB4MzAKLSNkZWZpbmUgSElMX0lERF9ESURfT1RIRVJfQkFSQ09ERV9NQVNLIDB4ZmMgIAorI2RlZmluZSBISUxfSUREX0RJRF9PVEhFUl9CQVJDT0RFX01BU0sgMHhmYwogI2RlZmluZSBISUxfSUREX0RJRF9PVEhFUl9CQVJDT0RFIDB4MmMKLSNkZWZpbmUgSElMX0lERF9ESURfT1RIRVJfUlNWRDJfTUFTSyAweGZjICAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEhJTF9JRERfRElEX09USEVSX1JTVkQyX01BU0sgMHhmYwogI2RlZmluZSBISUxfSUREX0RJRF9PVEhFUl9SU1ZEMiAweDI4Ci0jZGVmaW5lIEhJTF9JRERfRElEX09USEVSX1JTVkQzX01BU0sgMHhmOCAgCisjZGVmaW5lIEhJTF9JRERfRElEX09USEVSX1JTVkQzX01BU0sgMHhmOAogI2RlZmluZSBISUxfSUREX0RJRF9PVEhFUl9SU1ZEMyAweDIwCi0jZGVmaW5lIEhJTF9JRERfRElEX1RZUEVfS0VZUEFEIDB4MDAgIAotCi0jZGVmaW5lIEhJTF9JRERfSEVBREVSX0FYU0VUX01BU0sgMHgwMyAgCi0jZGVmaW5lIEhJTF9JRERfSEVBREVSX1JTQyAweDA0ICAKLSNkZWZpbmUgSElMX0lERF9IRUFERVJfRVhEIDB4MDggIAotI2RlZmluZSBISUxfSUREX0hFQURFUl9JT0QgMHgxMCAgCi0jZGVmaW5lIEhJTF9JRERfSEVBREVSXzE2QklUIDB4MjAgIAotI2RlZmluZSBISUxfSUREX0hFQURFUl9BQlMgMHg0MCAgCi0jZGVmaW5lIEhJTF9JRERfSEVBREVSXzJYX0FYSVMgMHg4MCAgCi0KLSNkZWZpbmUgSElMX0lERF9JT0RfTkJVVFRPTl9NQVNLIDB4MDcgIAotI2RlZmluZSBISUxfSUREX0lPRF9QUk9YSU1JVFkgMHgwOCAgCi0jZGVmaW5lIEhJTF9JRERfSU9EX1BST01QVF9NQVNLIDB4NzAgIAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgSElMX0lERF9ESURfVFlQRV9LRVlQQUQgMHgwMAorI2RlZmluZSBISUxfSUREX0hFQURFUl9BWFNFVF9NQVNLIDB4MDMKKyNkZWZpbmUgSElMX0lERF9IRUFERVJfUlNDIDB4MDQKKyNkZWZpbmUgSElMX0lERF9IRUFERVJfRVhEIDB4MDgKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEhJTF9JRERfSEVBREVSX0lPRCAweDEwCisjZGVmaW5lIEhJTF9JRERfSEVBREVSXzE2QklUIDB4MjAKKyNkZWZpbmUgSElMX0lERF9IRUFERVJfQUJTIDB4NDAKKyNkZWZpbmUgSElMX0lERF9IRUFERVJfMlhfQVhJUyAweDgwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBISUxfSUREX0lPRF9OQlVUVE9OX01BU0sgMHgwNworI2RlZmluZSBISUxfSUREX0lPRF9QUk9YSU1JVFkgMHgwOAorI2RlZmluZSBISUxfSUREX0lPRF9QUk9NUFRfTUFTSyAweDcwCiAjZGVmaW5lIEhJTF9JRERfSU9EX1BST01QVF9TSElGVCA0Ci0jZGVmaW5lIEhJTF9JRERfSU9EX1BST01QVCAweDgwICAKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgSElMX0lERF9JT0RfUFJPTVBUIDB4ODAKICNkZWZpbmUgSElMX0lERF9OVU1fQVhFU19QRVJfU0VUKGhlYWRlcl9wYWNrZXQpICAoKGhlYWRlcl9wYWNrZXQpICYgSElMX0lERF9IRUFERVJfQVhTRVRfTUFTSykKLQogI2RlZmluZSBISUxfSUREX05VTV9BWFNFVFMoaGVhZGVyX3BhY2tldCkgICgyIC0gISgoaGVhZGVyX3BhY2tldCkgJiBISUxfSUREX0hFQURFUl8yWF9BWElTKSkKLQogI2RlZmluZSBISUxfSUREX0xFTihoZWFkZXJfcGFja2V0KSAgKCg0IC0gIShoZWFkZXJfcGFja2V0ICYgSElMX0lERF9IRUFERVJfSU9EKSAtICAgMiAqICEoSElMX0lERF9OVU1fQVhFU19QRVJfU0VUKGhlYWRlcl9wYWNrZXQpKSkgKyAgIDIgKiBISUxfSUREX05VTV9BWEVTX1BFUl9TRVQoaGVhZGVyX3BhY2tldCkgKiAgICEhKChoZWFkZXJfcGFja2V0KSAmIEhJTF9JRERfSEVBREVSX0FCUykpCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEhJTF9JRERfQVhJU19DT1VOVFNfUEVSX00oaGVhZGVyX3B0cikgICghKEhJTF9JRERfTlVNX0FYU0VUUygqKGhlYWRlcl9wdHIpKSkgPyAtMSA6ICAoKCgqKGhlYWRlcl9wdHIgKyAxKSAmIEhJTF9QS1RfREFUQV9NQVNLKSArICAgKCgqKGhlYWRlcl9wdHIgKyAyKSAmIEhJTF9QS1RfREFUQV9NQVNLKSkgPDwgOCkgICogKCgqKGhlYWRlcl9wdHIpICYgSElMX0lERF9IRUFERVJfMTZCSVQpID8gMTAwIDogMSkpKQotCiAjZGVmaW5lIEhJTF9JRERfQVhJU19NQVgoaGVhZGVyX3B0ciwgX19heG51bSkgICgoISgqKGhlYWRlcl9wdHIpICYgSElMX0lERF9IRUFERVJfQUJTKSB8fCAgIChISUxfSUREX05VTV9BWEVTX1BFUl9TRVQoKihoZWFkZXJfcHRyKSkgPD0gX19heG51bSkpID8gMCA6ICAgKChISUxfUEtUX0RBVEFfTUFTSyAmICooKGhlYWRlcl9wdHIpICsgMyArIDIgKiBfX2F4bnVtKSkgKyAgICgoSElMX1BLVF9EQVRBX01BU0sgJiAqKChoZWFkZXJfcHRyKSArIDQgKyAyICogX19heG51bSkpIDw8IDgpKSkKLQogI2RlZmluZSBISUxfSUREX0lPRChoZWFkZXJfcHRyKSAgKCooaGVhZGVyX3B0ciArIEhJTF9JRERfTEVOKCgqaGVhZGVyX3B0cikpIC0gMSkpCi0KICNkZWZpbmUgSElMX0lERF9IQVNfR0VOX1BST01QVChoZWFkZXJfcHRyKSAgKCgqaGVhZGVyX3B0ciAmIEhJTF9JRERfSEVBREVSX0lPRCkgJiYgICAoSElMX0lERF9JT0QoaGVhZGVyX3B0cikgJiBISUxfSUREX0lPRF9QUk9NUFQpKQotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBISUxfSUREX0hBU19HRU5fUFJPWElNSVRZKGhlYWRlcl9wdHIpICAoKCpoZWFkZXJfcHRyICYgSElMX0lERF9IRUFERVJfSU9EKSAmJiAgIChISUxfSUREX0lPRChoZWFkZXJfcHRyKSAmIEhJTF9JRERfSU9EX1BST1hJTUlUWSkpCi0KICNkZWZpbmUgSElMX0lERF9OVU1fQlVUVE9OUyhoZWFkZXJfcHRyKSAgKCgqaGVhZGVyX3B0ciAmIEhJTF9JRERfSEVBREVSX0lPRCkgPyAgIChISUxfSUREX0lPRChoZWFkZXJfcHRyKSAmIEhJTF9JRERfSU9EX05CVVRUT05fTUFTSykgOiAwKQotCiAjZGVmaW5lIEhJTF9JRERfTlVNX1BST01QVFMoaGVhZGVyX3B0cikgICgoKmhlYWRlcl9wdHIgJiBISUxfSUREX0hFQURFUl9JT0QpID8gICAoKEhJTF9JRERfSU9EKGhlYWRlcl9wdHIpICYgSElMX0lERF9JT0RfTlBST01QVF9NQVNLKSAgID4+IEhJTF9JRERfSU9EX1BST01QVF9TSElGVCkgOiAwKQotCi0jZGVmaW5lIEhJTF9FWERfSEVBREVSX1dSRyAweDAzICAKLSNkZWZpbmUgSElMX0VYRF9IRUFERVJfV1JHX1RZUEUxIDB4MDEgIAotI2RlZmluZSBISUxfRVhEX0hFQURFUl9XUkdfVFlQRTIgMHgwMiAgCi0jZGVmaW5lIEhJTF9FWERfSEVBREVSX1JSRyAweDA0ICAKLSNkZWZpbmUgSElMX0VYRF9IRUFERVJfUk5NIDB4MTAgIAotI2RlZmluZSBISUxfRVhEX0hFQURFUl9SU1QgMHgyMCAgCi0jZGVmaW5lIEhJTF9FWERfSEVBREVSX0xPQ0FMRSAweDQwICAKLQorI2RlZmluZSBISUxfRVhEX0hFQURFUl9XUkcgMHgwMworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgSElMX0VYRF9IRUFERVJfV1JHX1RZUEUxIDB4MDEKKyNkZWZpbmUgSElMX0VYRF9IRUFERVJfV1JHX1RZUEUyIDB4MDIKKyNkZWZpbmUgSElMX0VYRF9IRUFERVJfUlJHIDB4MDQKKyNkZWZpbmUgSElMX0VYRF9IRUFERVJfUk5NIDB4MTAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEhJTF9FWERfSEVBREVSX1JTVCAweDIwCisjZGVmaW5lIEhJTF9FWERfSEVBREVSX0xPQ0FMRSAweDQwCiAjZGVmaW5lIEhJTF9FWERfTlVNX1JSRyhoZWFkZXJfcHRyKSAgKCgqaGVhZGVyX3B0ciAmIEhJTF9FWERfSEVBREVSX1JSRykgPyAgICgqKGhlYWRlcl9wdHIgKyAxKSAmIEhJTF9QS1RfREFUQV9NQVNLKSA6IDApCi0KICNkZWZpbmUgSElMX0VYRF9OVU1fV1dHKGhlYWRlcl9wdHIpICAoKCpoZWFkZXJfcHRyICYgSElMX0VYRF9IRUFERVJfV1JHKSA/ICAgKCooaGVhZGVyX3B0ciArIDIgLSAhKCpoZWFkZXJfcHRyICYgSElMX0VYRF9IRUFERVJfUlJHKSkgJiAgIEhJTF9QS1RfREFUQV9NQVNLKSA6IDApCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEhJTF9FWERfTEVOKGhlYWRlcl9wdHIpICAoISEoKmhlYWRlcl9wdHIgJiBISUxfRVhEX0hFQURFUl9SUkcpICsgICAhISgqaGVhZGVyX3B0ciAmIEhJTF9FWERfSEVBREVSX1dSRykgKyAgICEhKCpoZWFkZXJfcHRyICYgSElMX0VYRF9IRUFERVJfTE9DQUxFKSArICAgMiAqICEhKCpoZWFkZXJfcHRyICYgSElMX0VYRF9IRUFERVJfV1JHX1RZUEUyKSArIDEpCi0KICNkZWZpbmUgSElMX0VYRF9MT0NBTEUoaGVhZGVyX3B0cikgICghKCpoZWFkZXJfcHRyICYgSElMX0VYRF9IRUFERVJfTE9DQUxFKSA/IC0xIDogICAoKihoZWFkZXJfcHRyICsgSElMX0VYRF9MRU4oaGVhZGVyX3B0cikgLSAxKSAmIEhJTF9QS1RfREFUQV9NQVNLKSkKLQogI2RlZmluZSBISUxfRVhEX1dSR19UWVBFMl9MRU4oaGVhZGVyX3B0cikgICghKCpoZWFkZXJfcHRyICYgSElMX0VYRF9IRUFERVJfV1JHX1RZUEUyKSA/IC0xIDogICAoKihoZWFkZXJfcHRyICsgSElMX0VYRF9MRU4oaGVhZGVyX3B0cikgLSAyIC0gICAhISgqaGVhZGVyX3B0ciAmIEhJTF9FWERfSEVBREVSX0xPQ0FMRSkpICYgSElMX1BLVF9EQVRBX01BU0spICsgICAoKCooaGVhZGVyX3B0ciArIEhJTF9FWERfTEVOKGhlYWRlcl9wdHIpIC0gMSAtICAgISEoKmhlYWRlcl9wdHIgJiBISUxfRVhEX0hFQURFUl9MT0NBTEUpKSAmIEhJTF9QS1RfREFUQV9NQVNLKSA8PCA4KSkKLQogI2RlZmluZSBISUxfTE9DQUxFX01BWCAweDFmCi0KLSNkZWZpbmUgSElMX0xPQ0FMRV9NQVAgICIiLCAgICAiIiwgICAgIiIsICAgICJzd2lzcy5mcmVuY2giLCAgICAicG9ydHVndWVzZSIsICAgICJhcmFiaWMiLCAgICAiaGVicmV3IiwgICAgImVuZ2xpc2guY2FuYWRpYW4iLCAgICAidHVya2lzaCIsICAgICJncmVlayIsICAgICJ0aGFpIiwgICAgIml0YWxpYW4iLCAgICAia29yZWFuIiwgICAgImR1dGNoIiwgICAgInN3ZWRpc2giLCAgICAiZ2VybWFuIiwgICAgImNoaW5lc2UiLCAgICAiY2hpbmVzZSIsICAgICJzd2lzcy5mcmVuY2giLCAgICAic3BhbmlzaCIsICAgICJzd2lzcy5nZXJtYW4iLCAgICAiZmxlbWlzaCIsICAgICJmaW5uaXNoIiwgICAgImVuZ2xpc2gudWsiLCAgICAiZnJlbmNoLmNhbmFkaWFuIiwgICAgInN3aXNzLmdlcm1hbiIsICAgICJub3J3ZWdpYW4iLCAgICAiZnJlbmNoIiwgICAgImRhbmlzaCIsICAgICJqYXBhbmVzZSIsICAgICJzcGFuaXNoIiwgICAiZW5nbGlzaC51cyIgICAgCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEhJTF9MT0NBTEVfTUFQICAiIiwgICAgIiIsICAgICIiLCAgICAic3dpc3MuZnJlbmNoIiwgICAgInBvcnR1Z3Vlc2UiLCAgICAiYXJhYmljIiwgICAgImhlYnJldyIsICAgICJlbmdsaXNoLmNhbmFkaWFuIiwgICAgInR1cmtpc2giLCAgICAiZ3JlZWsiLCAgICAidGhhaSIsICAgICJpdGFsaWFuIiwgICAgImtvcmVhbiIsICAgICJkdXRjaCIsICAgICJzd2VkaXNoIiwgICAgImdlcm1hbiIsICAgICJjaGluZXNlIiwgICAgImNoaW5lc2UiLCAgICAic3dpc3MuZnJlbmNoIiwgICAgInNwYW5pc2giLCAgICAic3dpc3MuZ2VybWFuIiwgICAgImZsZW1pc2giLCAgICAiZmlubmlzaCIsICAgICJlbmdsaXNoLnVrIiwgICAgImZyZW5jaC5jYW5hZGlhbiIsICAgICJzd2lzcy5nZXJtYW4iLCAgICAibm9yd2VnaWFuIiwgICAgImZyZW5jaCIsICAgICJkYW5pc2giLCAgICAiamFwYW5lc2UiLCAgICAic3BhbmlzaCIsICAgImVuZ2xpc2gudXMiCiAjZGVmaW5lIEhJTF9LRVlDT0RFU19TRVQxX1RCTFNJWkUgMTI4CiAjZGVmaW5lIEhJTF9LRVlDT0RFU19TRVQxICAgS0VZXzUsIEtFWV9SRVNFUlZFRCwgS0VZX1JJR0hUQUxULCBLRVlfTEVGVEFMVCwgICBLRVlfUklHSFRTSElGVCwgS0VZX0xFRlRTSElGVCwgS0VZX0xFRlRDVFJMLCBLRVlfU1lTUlEsICAgS0VZX0tQNCwgS0VZX0tQOCwgS0VZX0tQNSwgS0VZX0tQOSwgICBLRVlfS1A2LCBLRVlfS1A3LCBLRVlfS1BDT01NQSwgS0VZX0tQRU5URVIsICAgS0VZX0tQMSwgS0VZX0tQU0xBU0gsIEtFWV9LUDIsIEtFWV9LUFBMVVMsICAgS0VZX0tQMywgS0VZX0tQQVNURVJJU0ssIEtFWV9LUDAsIEtFWV9LUE1JTlVTLCAgIEtFWV9CLCBLRVlfViwgS0VZX0MsIEtFWV9YLCAgIEtFWV9aLCBLRVlfUkVTRVJWRUQsIEtFWV9SRVNFUlZFRCwgS0VZX0VTQywgICBLRVlfNiwgS0VZX0YxMCwgS0VZXzMsIEtFWV9GMTEsICAgS0VZX0tQRE9ULCBLRVlfRjksIEtFWV9UQUIgICwgS0VZX0YxMiwgICBLRVlfSCwgS0VZX0csIEtFWV9GLCBLRVlfRCwgICBLRVlfUywgS0VZX0EsIEtFWV9SRVNFUlZFRCwgS0VZX0NBUFNMT0NLLCAgIEtFWV9VLCBLRVlfWSwgS0VZX1QsIEtFWV9SLCAgIEtFWV9FLCBLRVlfVywgS0VZX1EsIEtFWV9UQUIsICAgS0VZXzcsIEtFWV82LCBLRVlfNSwgS0VZXzQsICAgS0VZXzMsIEtFWV8yLCBLRVlfMSwgS0VZX0dSQVZFLCAgIEtFWV9GMTMsIEtFWV9GMTQsIEtFWV9GMTUsIEtFWV9GMTYsICAgS0VZX0YxNywgS0VZX0YxOCwgS0VZX0YxOSwgS0VZX0YyMCwgICBLRVlfTUVOVSwgS0VZX0Y0LCBLRVlfRjMsIEtFWV9GMiwgICBLRVlfRjEsIEtFWV9WT0xVTUVVUCwgS0VZX1NUT1AsIEtFWV9TRU5ERklMRSwgICBLRVlfU1lTUlEsIEtFWV9GNSwgS0VZX0Y2LCBLRVlfRjcsICAgS0VZX0Y4LCBLRVlfVk9MVU1FRE9XTiwgS0VZX0RFTF9FT0wsIEtFWV9ERUxfRU9TLCAgIEtFWV84LCBLRVlfOSwgS0VZXzAsIEtFWV9NSU5VUywgICBLRVlfRVFVQUwsIEtFWV9CQUNLU1BBQ0UsIEtFWV9JTlNfTElORSwgS0VZX0RFTF9MSU5FLCAgIEtFWV9JLCBLRVlfTywgS0VZX1AsIEtFWV9MRUZUQlJBQ0UsICAgS0VZX1JJR0hUQlJBQ0UsIEtFWV9CQUNLU0xBU0gsIEtFWV9JTlNFUlQsIEtFWV9ERUxFVEUsICAgS0VZX0osIEtFWV9LLCBLRVlfTCwgS0VZX1NFTUlDT0xPTiwgICBLRVlfQVBPU1RST1BIRSwgS0VZX0VOVEVSLCBLRVlfSE9NRSwgS0VZX1BBR0VVUCwgICBLRVlfTSwgS0VZX0NPTU1BLCBLRVlfRE9ULCBLRVlfU0xBU0gsICAgS0VZX0JBQ0tTTEFTSCwgS0VZX1NFTEVDVCwgS0VZXzEwMk5ELCBLRVlfUEFHRURPV04sICAgS0VZX04sIEtFWV9TUEFDRSwgS0VZX05FWFQsIEtFWV9SRVNFUlZFRCwgICBLRVlfTEVGVCwgS0VZX0RPV04sIEtFWV9VUCwgS0VZX1JJR0hUCi0KICNkZWZpbmUgSElMX0tFWUNPREVTX1NFVDNfVEJMU0laRSAxMjgKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEhJTF9LRVlDT0RFU19TRVQzICAgS0VZX1JFU0VSVkVELCBLRVlfRVNDLCBLRVlfMSwgS0VZXzIsICAgS0VZXzMsIEtFWV80LCBLRVlfNSwgS0VZXzYsICAgS0VZXzcsIEtFWV84LCBLRVlfOSwgS0VZXzAsICAgS0VZX01JTlVTLCBLRVlfRVFVQUwsIEtFWV9CQUNLU1BBQ0UsIEtFWV9UQUIsICAgS0VZX1EsIEtFWV9XLCBLRVlfRSwgS0VZX1IsICAgS0VZX1QsIEtFWV9ZLCBLRVlfVSwgS0VZX0ksICAgS0VZX08sIEtFWV9QLCBLRVlfTEVGVEJSQUNFLCBLRVlfUklHSFRCUkFDRSwgICBLRVlfRU5URVIsIEtFWV9MRUZUQ1RSTCwgS0VZX0EsIEtFWV9TLCAgIEtFWV9ELCBLRVlfRiwgS0VZX0csIEtFWV9ILCAgIEtFWV9KLCBLRVlfSywgS0VZX0wsIEtFWV9TRU1JQ09MT04sICAgS0VZX0FQT1NUUk9QSEUsS0VZX0dSQVZFLCBLRVlfTEVGVFNISUZULCBLRVlfQkFDS1NMQVNILCAgIEtFWV9aLCBLRVlfWCwgS0VZX0MsIEtFWV9WLCAgIEtFWV9CLCBLRVlfTiwgS0VZX00sIEtFWV9DT01NQSwgICBLRVlfRE9ULCBLRVlfU0xBU0gsIEtFWV9SSUdIVFNISUZULCBLRVlfS1BBU1RFUklTSywgICBLRVlfTEVGVEFMVCwgS0VZX1NQQUNFLCBLRVlfQ0FQU0xPQ0ssIEtFWV9GMSwgICBLRVlfRjIsIEtFWV9GMywgS0VZX0Y0LCBLRVlfRjUsICAgS0VZX0Y2LCBLRVlfRjcsIEtFWV9GOCwgS0VZX0Y5LCAgIEtFWV9GMTAsIEtFWV9OVU1MT0NLLCBLRVlfU0NST0xMTE9DSywgS0VZX0tQNywgICBLRVlfS1A4LCBLRVlfS1A5LCBLRVlfS1BNSU5VUywgS0VZX0tQNCwgICBLRVlfS1A1LCBLRVlfS1A2LCBLRVlfS1BQTFVTLCBLRVlfS1AxLCAgIEtFWV9LUDIsIEtFWV9LUDMsIEtFWV9LUDAsIEtFWV9LUERPVCwgICBLRVlfU1lTUlEsIEtFWV9SRVNFUlZFRCwgS0VZX1JFU0VSVkVELCBLRVlfUkVTRVJWRUQsICAgS0VZX1JFU0VSVkVELCBLRVlfUkVTRVJWRUQsIEtFWV9SRVNFUlZFRCwgS0VZX1JFU0VSVkVELCAgIEtFWV9SRVNFUlZFRCwgS0VZX1JFU0VSVkVELCBLRVlfUkVTRVJWRUQsIEtFWV9SRVNFUlZFRCwgICBLRVlfVVAsIEtFWV9MRUZULCBLRVlfRE9XTiwgS0VZX1JJR0hULCAgIEtFWV9IT01FLCBLRVlfUEFHRVVQLCBLRVlfRU5ELCBLRVlfUEFHRURPV04sICAgS0VZX0lOU0VSVCwgS0VZX0RFTEVURSwgS0VZXzEwMk5ELCBLRVlfUkVTRVJWRUQsICAgS0VZX1JFU0VSVkVELCBLRVlfUkVTRVJWRUQsIEtFWV9SRVNFUlZFRCwgS0VZX1JFU0VSVkVELCAgIEtFWV9GMSwgS0VZX0YyLCBLRVlfRjMsIEtFWV9GNCwgICBLRVlfRjUsIEtFWV9GNiwgS0VZX0Y3LCBLRVlfRjgsICAgS0VZX1JFU0VSVkVELCBLRVlfUkVTRVJWRUQsIEtFWV9SRVNFUlZFRCwgS0VZX1JFU0VSVkVELCAgIEtFWV9SRVNFUlZFRCwgS0VZX1JFU0VSVkVELCBLRVlfUkVTRVJWRUQsIEtFWV9SRVNFUlZFRAotCi0jZGVmaW5lIEhJTF9QT0xfTlVNX0FYRVNfTUFTSyAweDAzICAKLSNkZWZpbmUgSElMX1BPTF9DVFMgMHgwNCAgCi0jZGVmaW5lIEhJTF9QT0xfU1RBVFVTX1BFTkRJTkcgMHgwOCAgCi0jZGVmaW5lIEhJTF9QT0xfQ0hBUlRZUEVfTUFTSyAweDcwICAKLSNkZWZpbmUgSElMX1BPTF9DSEFSVFlQRV9OT05FIDB4MDAgIAotI2RlZmluZSBISUxfUE9MX0NIQVJUWVBFX1JTVkQxIDB4MTAgIAotI2RlZmluZSBISUxfUE9MX0NIQVJUWVBFX0FTQ0lJIDB4MjAgIAotI2RlZmluZSBISUxfUE9MX0NIQVJUWVBFX0JJTkFSWSAweDMwICAKLSNkZWZpbmUgSElMX1BPTF9DSEFSVFlQRV9TRVQxIDB4NDAgIAotI2RlZmluZSBISUxfUE9MX0NIQVJUWVBFX1JTVkQyIDB4NTAgIAotI2RlZmluZSBISUxfUE9MX0NIQVJUWVBFX1NFVDIgMHg2MCAgCi0jZGVmaW5lIEhJTF9QT0xfQ0hBUlRZUEVfU0VUMyAweDcwICAKLSNkZWZpbmUgSElMX1BPTF9BWElTX0FMVCAweDgwICAKLQorI2RlZmluZSBISUxfUE9MX05VTV9BWEVTX01BU0sgMHgwMworI2RlZmluZSBISUxfUE9MX0NUUyAweDA0CisjZGVmaW5lIEhJTF9QT0xfU1RBVFVTX1BFTkRJTkcgMHgwOAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgSElMX1BPTF9DSEFSVFlQRV9NQVNLIDB4NzAKKyNkZWZpbmUgSElMX1BPTF9DSEFSVFlQRV9OT05FIDB4MDAKKyNkZWZpbmUgSElMX1BPTF9DSEFSVFlQRV9SU1ZEMSAweDEwCisjZGVmaW5lIEhJTF9QT0xfQ0hBUlRZUEVfQVNDSUkgMHgyMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgSElMX1BPTF9DSEFSVFlQRV9CSU5BUlkgMHgzMAorI2RlZmluZSBISUxfUE9MX0NIQVJUWVBFX1NFVDEgMHg0MAorI2RlZmluZSBISUxfUE9MX0NIQVJUWVBFX1JTVkQyIDB4NTAKKyNkZWZpbmUgSElMX1BPTF9DSEFSVFlQRV9TRVQyIDB4NjAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEhJTF9QT0xfQ0hBUlRZUEVfU0VUMyAweDcwCisjZGVmaW5lIEhJTF9QT0xfQVhJU19BTFQgMHg4MAogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvaTJjLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvaTJjLmgKaW5kZXggOTUxM2ZjNi4uNDkwMmYyNCAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2kyYy5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9pMmMuaApAQCAtNyw4OSArNyw5NSBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX0xJTlVYX0kyQ19ICiAjZGVmaW5lIF9MSU5VWF9JMkNfSAotCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLQogc3RydWN0IGkyY19tc2cgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UxNiBhZGRyOwogIF9fdTE2IGZsYWdzOwotI2RlZmluZSBJMkNfTV9URU4gMHgxMCAgCisjZGVmaW5lIEkyQ19NX1RFTiAweDEwCiAjZGVmaW5lIEkyQ19NX1JEIDB4MDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEkyQ19NX05PU1RBUlQgMHg0MDAwCiAjZGVmaW5lIEkyQ19NX1JFVl9ESVJfQUREUiAweDIwMDAKICNkZWZpbmUgSTJDX01fSUdOT1JFX05BSyAweDEwMDAKICNkZWZpbmUgSTJDX01fTk9fUkRfQUNLIDB4MDgwMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UxNiBsZW47CiAgX191OCAqYnVmOwogfTsKLQogI2RlZmluZSBJMkNfRlVOQ19JMkMgMHgwMDAwMDAwMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSTJDX0ZVTkNfMTBCSVRfQUREUiAweDAwMDAwMDAyCi0jZGVmaW5lIEkyQ19GVU5DX1BST1RPQ09MX01BTkdMSU5HIDB4MDAwMDAwMDQgIAotI2RlZmluZSBJMkNfRlVOQ19TTUJVU19IV1BFQ19DQUxDIDB4MDAwMDAwMDggIAotI2RlZmluZSBJMkNfRlVOQ19TTUJVU19CTE9DS19QUk9DX0NBTEwgMHgwMDAwODAwMCAgCi0jZGVmaW5lIEkyQ19GVU5DX1NNQlVTX1FVSUNLIDB4MDAwMTAwMDAgCi0jZGVmaW5lIEkyQ19GVU5DX1NNQlVTX1JFQURfQllURSAweDAwMDIwMDAwIAotI2RlZmluZSBJMkNfRlVOQ19TTUJVU19XUklURV9CWVRFIDB4MDAwNDAwMDAgCi0jZGVmaW5lIEkyQ19GVU5DX1NNQlVTX1JFQURfQllURV9EQVRBIDB4MDAwODAwMDAgCi0jZGVmaW5lIEkyQ19GVU5DX1NNQlVTX1dSSVRFX0JZVEVfREFUQSAweDAwMTAwMDAwIAotI2RlZmluZSBJMkNfRlVOQ19TTUJVU19SRUFEX1dPUkRfREFUQSAweDAwMjAwMDAwIAotI2RlZmluZSBJMkNfRlVOQ19TTUJVU19XUklURV9XT1JEX0RBVEEgMHgwMDQwMDAwMCAKLSNkZWZpbmUgSTJDX0ZVTkNfU01CVVNfUFJPQ19DQUxMIDB4MDA4MDAwMDAgCi0jZGVmaW5lIEkyQ19GVU5DX1NNQlVTX1JFQURfQkxPQ0tfREFUQSAweDAxMDAwMDAwIAotI2RlZmluZSBJMkNfRlVOQ19TTUJVU19XUklURV9CTE9DS19EQVRBIDB4MDIwMDAwMDAgCi0jZGVmaW5lIEkyQ19GVU5DX1NNQlVTX1JFQURfSTJDX0JMT0NLIDB4MDQwMDAwMDAgIAotI2RlZmluZSBJMkNfRlVOQ19TTUJVU19XUklURV9JMkNfQkxPQ0sgMHgwODAwMDAwMCAgCi0jZGVmaW5lIEkyQ19GVU5DX1NNQlVTX1JFQURfSTJDX0JMT0NLXzIgMHgxMDAwMDAwMCAgCi0jZGVmaW5lIEkyQ19GVU5DX1NNQlVTX1dSSVRFX0kyQ19CTE9DS18yIDB4MjAwMDAwMDAgIAotCisjZGVmaW5lIEkyQ19GVU5DX1BST1RPQ09MX01BTkdMSU5HIDB4MDAwMDAwMDQKKyNkZWZpbmUgSTJDX0ZVTkNfU01CVVNfSFdQRUNfQ0FMQyAweDAwMDAwMDA4CisjZGVmaW5lIEkyQ19GVU5DX1NNQlVTX0JMT0NLX1BST0NfQ0FMTCAweDAwMDA4MDAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBJMkNfRlVOQ19TTUJVU19RVUlDSyAweDAwMDEwMDAwCisjZGVmaW5lIEkyQ19GVU5DX1NNQlVTX1JFQURfQllURSAweDAwMDIwMDAwCisjZGVmaW5lIEkyQ19GVU5DX1NNQlVTX1dSSVRFX0JZVEUgMHgwMDA0MDAwMAorI2RlZmluZSBJMkNfRlVOQ19TTUJVU19SRUFEX0JZVEVfREFUQSAweDAwMDgwMDAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBJMkNfRlVOQ19TTUJVU19XUklURV9CWVRFX0RBVEEgMHgwMDEwMDAwMAorI2RlZmluZSBJMkNfRlVOQ19TTUJVU19SRUFEX1dPUkRfREFUQSAweDAwMjAwMDAwCisjZGVmaW5lIEkyQ19GVU5DX1NNQlVTX1dSSVRFX1dPUkRfREFUQSAweDAwNDAwMDAwCisjZGVmaW5lIEkyQ19GVU5DX1NNQlVTX1BST0NfQ0FMTCAweDAwODAwMDAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBJMkNfRlVOQ19TTUJVU19SRUFEX0JMT0NLX0RBVEEgMHgwMTAwMDAwMAorI2RlZmluZSBJMkNfRlVOQ19TTUJVU19XUklURV9CTE9DS19EQVRBIDB4MDIwMDAwMDAKKyNkZWZpbmUgSTJDX0ZVTkNfU01CVVNfUkVBRF9JMkNfQkxPQ0sgMHgwNDAwMDAwMAorI2RlZmluZSBJMkNfRlVOQ19TTUJVU19XUklURV9JMkNfQkxPQ0sgMHgwODAwMDAwMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgSTJDX0ZVTkNfU01CVVNfUkVBRF9JMkNfQkxPQ0tfMiAweDEwMDAwMDAwCisjZGVmaW5lIEkyQ19GVU5DX1NNQlVTX1dSSVRFX0kyQ19CTE9DS18yIDB4MjAwMDAwMDAKICNkZWZpbmUgSTJDX0ZVTkNfU01CVVNfQllURSAoSTJDX0ZVTkNfU01CVVNfUkVBRF9CWVRFIHwgICBJMkNfRlVOQ19TTUJVU19XUklURV9CWVRFKQogI2RlZmluZSBJMkNfRlVOQ19TTUJVU19CWVRFX0RBVEEgKEkyQ19GVU5DX1NNQlVTX1JFQURfQllURV9EQVRBIHwgICBJMkNfRlVOQ19TTUJVU19XUklURV9CWVRFX0RBVEEpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJMkNfRlVOQ19TTUJVU19XT1JEX0RBVEEgKEkyQ19GVU5DX1NNQlVTX1JFQURfV09SRF9EQVRBIHwgICBJMkNfRlVOQ19TTUJVU19XUklURV9XT1JEX0RBVEEpCiAjZGVmaW5lIEkyQ19GVU5DX1NNQlVTX0JMT0NLX0RBVEEgKEkyQ19GVU5DX1NNQlVTX1JFQURfQkxPQ0tfREFUQSB8ICAgSTJDX0ZVTkNfU01CVVNfV1JJVEVfQkxPQ0tfREFUQSkKICNkZWZpbmUgSTJDX0ZVTkNfU01CVVNfSTJDX0JMT0NLIChJMkNfRlVOQ19TTUJVU19SRUFEX0kyQ19CTE9DSyB8ICAgSTJDX0ZVTkNfU01CVVNfV1JJVEVfSTJDX0JMT0NLKQogI2RlZmluZSBJMkNfRlVOQ19TTUJVU19JMkNfQkxPQ0tfMiAoSTJDX0ZVTkNfU01CVVNfUkVBRF9JMkNfQkxPQ0tfMiB8ICAgSTJDX0ZVTkNfU01CVVNfV1JJVEVfSTJDX0JMT0NLXzIpCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEkyQ19GVU5DX1NNQlVTX0VNVUwgKEkyQ19GVU5DX1NNQlVTX1FVSUNLIHwgICBJMkNfRlVOQ19TTUJVU19CWVRFIHwgICBJMkNfRlVOQ19TTUJVU19CWVRFX0RBVEEgfCAgIEkyQ19GVU5DX1NNQlVTX1dPUkRfREFUQSB8ICAgSTJDX0ZVTkNfU01CVVNfUFJPQ19DQUxMIHwgICBJMkNfRlVOQ19TTUJVU19XUklURV9CTE9DS19EQVRBIHwgICBJMkNfRlVOQ19TTUJVU19JMkNfQkxPQ0spCi0KLSNkZWZpbmUgSTJDX1NNQlVTX0JMT0NLX01BWCAzMiAgIAorI2RlZmluZSBJMkNfU01CVVNfQkxPQ0tfTUFYIDMyCiB1bmlvbiBpMmNfc21idXNfZGF0YSB7CiAgX191OCBieXRlOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UxNiB3b3JkOwogIF9fdTggYmxvY2tbSTJDX1NNQlVTX0JMT0NLX01BWCArIDJdOwotCiB9OwotCiAjZGVmaW5lIEkyQ19TTUJVU19SRUFEIDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEkyQ19TTUJVU19XUklURSAwCi0KICNkZWZpbmUgSTJDX1NNQlVTX1FVSUNLIDAKICNkZWZpbmUgSTJDX1NNQlVTX0JZVEUgMQotI2RlZmluZSBJMkNfU01CVVNfQllURV9EQVRBIDIgCisjZGVmaW5lIEkyQ19TTUJVU19CWVRFX0RBVEEgMgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSTJDX1NNQlVTX1dPUkRfREFUQSAzCiAjZGVmaW5lIEkyQ19TTUJVU19QUk9DX0NBTEwgNAogI2RlZmluZSBJMkNfU01CVVNfQkxPQ0tfREFUQSA1CiAjZGVmaW5lIEkyQ19TTUJVU19JMkNfQkxPQ0tfREFUQSA2Ci0jZGVmaW5lIEkyQ19TTUJVU19CTE9DS19QUk9DX0NBTEwgNyAgCi0KLSNkZWZpbmUgSTJDX1JFVFJJRVMgMHgwNzAxICAKLQotI2RlZmluZSBJMkNfVElNRU9VVCAweDA3MDIgIAotCi0jZGVmaW5lIEkyQ19TTEFWRSAweDA3MDMgIAotCi0jZGVmaW5lIEkyQ19TTEFWRV9GT1JDRSAweDA3MDYgIAotCi0jZGVmaW5lIEkyQ19URU5CSVQgMHgwNzA0ICAKLQotI2RlZmluZSBJMkNfRlVOQ1MgMHgwNzA1ICAKLSNkZWZpbmUgSTJDX1JEV1IgMHgwNzA3ICAKLSNkZWZpbmUgSTJDX1BFQyAweDA3MDggIAotCi0jZGVmaW5lIEkyQ19TTUJVUyAweDA3MjAgIAotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBJMkNfU01CVVNfQkxPQ0tfUFJPQ19DQUxMIDcKKyNkZWZpbmUgSTJDX1JFVFJJRVMgMHgwNzAxCisjZGVmaW5lIEkyQ19USU1FT1VUIDB4MDcwMgorI2RlZmluZSBJMkNfU0xBVkUgMHgwNzAzCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBJMkNfU0xBVkVfRk9SQ0UgMHgwNzA2CisjZGVmaW5lIEkyQ19URU5CSVQgMHgwNzA0CisjZGVmaW5lIEkyQ19GVU5DUyAweDA3MDUKKyNkZWZpbmUgSTJDX1JEV1IgMHgwNzA3CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBJMkNfUEVDIDB4MDcwOAorI2RlZmluZSBJMkNfU01CVVMgMHgwNzIwCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9pY21wLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvaWNtcC5oCmluZGV4IGM1YjU4YmIuLmQxNjZlOTcgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9pY21wLmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2ljbXAuaApAQCAtNyw3NSArNyw4OCBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX0xJTlVYX0lDTVBfSAogI2RlZmluZSBfTElOVVhfSUNNUF9ICi0KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotCi0jZGVmaW5lIElDTVBfRUNIT1JFUExZIDAgIAotI2RlZmluZSBJQ01QX0RFU1RfVU5SRUFDSCAzICAKLSNkZWZpbmUgSUNNUF9TT1VSQ0VfUVVFTkNIIDQgIAotI2RlZmluZSBJQ01QX1JFRElSRUNUIDUgIAotI2RlZmluZSBJQ01QX0VDSE8gOCAgCi0jZGVmaW5lIElDTVBfVElNRV9FWENFRURFRCAxMSAgCi0jZGVmaW5lIElDTVBfUEFSQU1FVEVSUFJPQiAxMiAgCi0jZGVmaW5lIElDTVBfVElNRVNUQU1QIDEzICAKLSNkZWZpbmUgSUNNUF9USU1FU1RBTVBSRVBMWSAxNCAgCi0jZGVmaW5lIElDTVBfSU5GT19SRVFVRVNUIDE1ICAKLSNkZWZpbmUgSUNNUF9JTkZPX1JFUExZIDE2ICAKLSNkZWZpbmUgSUNNUF9BRERSRVNTIDE3ICAKLSNkZWZpbmUgSUNNUF9BRERSRVNTUkVQTFkgMTggIAorI2RlZmluZSBJQ01QX0VDSE9SRVBMWSAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBJQ01QX0RFU1RfVU5SRUFDSCAzCisjZGVmaW5lIElDTVBfU09VUkNFX1FVRU5DSCA0CisjZGVmaW5lIElDTVBfUkVESVJFQ1QgNQorI2RlZmluZSBJQ01QX0VDSE8gOAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgSUNNUF9USU1FX0VYQ0VFREVEIDExCisjZGVmaW5lIElDTVBfUEFSQU1FVEVSUFJPQiAxMgorI2RlZmluZSBJQ01QX1RJTUVTVEFNUCAxMworI2RlZmluZSBJQ01QX1RJTUVTVEFNUFJFUExZIDE0CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBJQ01QX0lORk9fUkVRVUVTVCAxNQorI2RlZmluZSBJQ01QX0lORk9fUkVQTFkgMTYKKyNkZWZpbmUgSUNNUF9BRERSRVNTIDE3CisjZGVmaW5lIElDTVBfQUREUkVTU1JFUExZIDE4CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBOUl9JQ01QX1RZUEVTIDE4Ci0KLSNkZWZpbmUgSUNNUF9ORVRfVU5SRUFDSCAwICAKLSNkZWZpbmUgSUNNUF9IT1NUX1VOUkVBQ0ggMSAgCi0jZGVmaW5lIElDTVBfUFJPVF9VTlJFQUNIIDIgIAotI2RlZmluZSBJQ01QX1BPUlRfVU5SRUFDSCAzICAKLSNkZWZpbmUgSUNNUF9GUkFHX05FRURFRCA0ICAKLSNkZWZpbmUgSUNNUF9TUl9GQUlMRUQgNSAgCisjZGVmaW5lIElDTVBfTkVUX1VOUkVBQ0ggMAorI2RlZmluZSBJQ01QX0hPU1RfVU5SRUFDSCAxCisjZGVmaW5lIElDTVBfUFJPVF9VTlJFQUNIIDIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIElDTVBfUE9SVF9VTlJFQUNIIDMKKyNkZWZpbmUgSUNNUF9GUkFHX05FRURFRCA0CisjZGVmaW5lIElDTVBfU1JfRkFJTEVEIDUKICNkZWZpbmUgSUNNUF9ORVRfVU5LTk9XTiA2CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJQ01QX0hPU1RfVU5LTk9XTiA3CiAjZGVmaW5lIElDTVBfSE9TVF9JU09MQVRFRCA4CiAjZGVmaW5lIElDTVBfTkVUX0FOTyA5CiAjZGVmaW5lIElDTVBfSE9TVF9BTk8gMTAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIElDTVBfTkVUX1VOUl9UT1MgMTEKICNkZWZpbmUgSUNNUF9IT1NUX1VOUl9UT1MgMTIKLSNkZWZpbmUgSUNNUF9QS1RfRklMVEVSRUQgMTMgIAotI2RlZmluZSBJQ01QX1BSRUNfVklPTEFUSU9OIDE0ICAKLSNkZWZpbmUgSUNNUF9QUkVDX0NVVE9GRiAxNSAgCi0jZGVmaW5lIE5SX0lDTVBfVU5SRUFDSCAxNSAgCi0KLSNkZWZpbmUgSUNNUF9SRURJUl9ORVQgMCAgCi0jZGVmaW5lIElDTVBfUkVESVJfSE9TVCAxICAKLSNkZWZpbmUgSUNNUF9SRURJUl9ORVRUT1MgMiAgCi0jZGVmaW5lIElDTVBfUkVESVJfSE9TVFRPUyAzICAKLQotI2RlZmluZSBJQ01QX0VYQ19UVEwgMCAgCi0jZGVmaW5lIElDTVBfRVhDX0ZSQUdUSU1FIDEgIAotCisjZGVmaW5lIElDTVBfUEtUX0ZJTFRFUkVEIDEzCisjZGVmaW5lIElDTVBfUFJFQ19WSU9MQVRJT04gMTQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIElDTVBfUFJFQ19DVVRPRkYgMTUKKyNkZWZpbmUgTlJfSUNNUF9VTlJFQUNIIDE1CisjZGVmaW5lIElDTVBfUkVESVJfTkVUIDAKKyNkZWZpbmUgSUNNUF9SRURJUl9IT1NUIDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIElDTVBfUkVESVJfTkVUVE9TIDIKKyNkZWZpbmUgSUNNUF9SRURJUl9IT1NUVE9TIDMKKyNkZWZpbmUgSUNNUF9FWENfVFRMIDAKKyNkZWZpbmUgSUNNUF9FWENfRlJBR1RJTUUgMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBpY21waGRyIHsKICBfX3U4IHR5cGU7CiAgX191OCBjb2RlOwogIF9fdTE2IGNoZWNrc3VtOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bmlvbiB7CiAgc3RydWN0IHsKICBfX3UxNiBpZDsKICBfX3UxNiBzZXF1ZW5jZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgfSBlY2hvOwogIF9fdTMyIGdhdGV3YXk7CiAgc3RydWN0IHsKLSBfX3UxNiBfX3VudXNlZF9maWVsZDsKKyBfX3UxNiBfX2xpbnV4X3VudXNlZDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MTYgbXR1OwogIH0gZnJhZzsKICB9IHVuOwogfTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSUNNUF9GSUxURVIgMQotCiBzdHJ1Y3QgaWNtcF9maWx0ZXIgewogIF9fdTMyIGRhdGE7CiB9OwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvaWNtcHY2LmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvaWNtcHY2LmgKaW5kZXggZDFiZThjZC4uZjgyNzU1NCAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2ljbXB2Ni5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9pY21wdjYuaApAQCAtNywxNDYgKzcsMTU1IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfTElOVVhfSUNNUFY2X0gKICNkZWZpbmUgX0xJTlVYX0lDTVBWNl9ICi0KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBpY21wNmhkciB7Ci0KICBfX3U4IGljbXA2X3R5cGU7CiAgX191OCBpY21wNl9jb2RlOwogIF9fc3VtMTYgaWNtcDZfY2tzdW07Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5pb24gewogIF9fYmUzMiB1bl9kYXRhMzJbMV07CiAgX19iZTE2IHVuX2RhdGExNlsyXTsKICBfX3U4IHVuX2RhdGE4WzRdOwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCBpY21wdjZfZWNobyB7CiAgX19iZTE2IGlkZW50aWZpZXI7CiAgX19iZTE2IHNlcXVlbmNlOwogIH0gdV9lY2hvOwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCBpY21wdjZfbmRfYWR2dCB7CiAjaWZkZWYgX19MSVRUTEVfRU5ESUFOX0JJVEZJRUxECiAgX191MzIgcmVzZXJ2ZWQ6NSwKICBvdmVycmlkZToxLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzb2xpY2l0ZWQ6MSwKICByb3V0ZXI6MSwKICByZXNlcnZlZDI6MjQ7CiAjZWxpZiBkZWZpbmVkKF9fQklHX0VORElBTl9CSVRGSUVMRCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgcm91dGVyOjEsCiAgc29saWNpdGVkOjEsCiAgb3ZlcnJpZGU6MSwKICByZXNlcnZlZDoyOTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZWxzZQogI2Vycm9yICJQbGVhc2UgZml4IDxhc20vYnl0ZW9yZGVyLmg+IgogI2VuZGlmCiAgfSB1X25kX2FkdnQ7Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IGljbXB2Nl9uZF9yYSB7CiAgX191OCBob3BfbGltaXQ7CiAjaWZkZWYgX19MSVRUTEVfRU5ESUFOX0JJVEZJRUxECiAgX191OCByZXNlcnZlZDozLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICByb3V0ZXJfcHJlZjoyLAogIGhvbWVfYWdlbnQ6MSwKICBvdGhlcjoxLAogIG1hbmFnZWQ6MTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlbGlmIGRlZmluZWQoX19CSUdfRU5ESUFOX0JJVEZJRUxEKQogIF9fdTggbWFuYWdlZDoxLAogIG90aGVyOjEsCiAgaG9tZV9hZ2VudDoxLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICByb3V0ZXJfcHJlZjoyLAogIHJlc2VydmVkOjM7CiAjZWxzZQogI2Vycm9yICJQbGVhc2UgZml4IDxhc20vYnl0ZW9yZGVyLmg+IgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlbmRpZgogIF9fYmUxNiBydF9saWZldGltZTsKICB9IHVfbmRfcmE7Ci0KICB9IGljbXA2X2RhdGF1bjsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgaWNtcDZfaWRlbnRpZmllciBpY21wNl9kYXRhdW4udV9lY2hvLmlkZW50aWZpZXIKICNkZWZpbmUgaWNtcDZfc2VxdWVuY2UgaWNtcDZfZGF0YXVuLnVfZWNoby5zZXF1ZW5jZQogI2RlZmluZSBpY21wNl9wb2ludGVyIGljbXA2X2RhdGF1bi51bl9kYXRhMzJbMF0KICNkZWZpbmUgaWNtcDZfbXR1IGljbXA2X2RhdGF1bi51bl9kYXRhMzJbMF0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIGljbXA2X3VudXNlZCBpY21wNl9kYXRhdW4udW5fZGF0YTMyWzBdCiAjZGVmaW5lIGljbXA2X21heGRlbGF5IGljbXA2X2RhdGF1bi51bl9kYXRhMTZbMF0KICNkZWZpbmUgaWNtcDZfcm91dGVyIGljbXA2X2RhdGF1bi51X25kX2FkdnQucm91dGVyCiAjZGVmaW5lIGljbXA2X3NvbGljaXRlZCBpY21wNl9kYXRhdW4udV9uZF9hZHZ0LnNvbGljaXRlZAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgaWNtcDZfb3ZlcnJpZGUgaWNtcDZfZGF0YXVuLnVfbmRfYWR2dC5vdmVycmlkZQogI2RlZmluZSBpY21wNl9uZGlzY3Jlc2VydmVkIGljbXA2X2RhdGF1bi51X25kX2FkdnQucmVzZXJ2ZWQKICNkZWZpbmUgaWNtcDZfaG9wX2xpbWl0IGljbXA2X2RhdGF1bi51X25kX3JhLmhvcF9saW1pdAogI2RlZmluZSBpY21wNl9hZGRyY29uZl9tYW5hZ2VkIGljbXA2X2RhdGF1bi51X25kX3JhLm1hbmFnZWQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIGljbXA2X2FkZHJjb25mX290aGVyIGljbXA2X2RhdGF1bi51X25kX3JhLm90aGVyCiAjZGVmaW5lIGljbXA2X3J0X2xpZmV0aW1lIGljbXA2X2RhdGF1bi51X25kX3JhLnJ0X2xpZmV0aW1lCiAjZGVmaW5lIGljbXA2X3JvdXRlcl9wcmVmIGljbXA2X2RhdGF1bi51X25kX3JhLnJvdXRlcl9wcmVmCiB9OwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJQ01QVjZfUk9VVEVSX1BSRUZfTE9XIDB4MwogI2RlZmluZSBJQ01QVjZfUk9VVEVSX1BSRUZfTUVESVVNIDB4MAogI2RlZmluZSBJQ01QVjZfUk9VVEVSX1BSRUZfSElHSCAweDEKICNkZWZpbmUgSUNNUFY2X1JPVVRFUl9QUkVGX0lOVkFMSUQgMHgyCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIElDTVBWNl9ERVNUX1VOUkVBQ0ggMQogI2RlZmluZSBJQ01QVjZfUEtUX1RPT0JJRyAyCiAjZGVmaW5lIElDTVBWNl9USU1FX0VYQ0VFRCAzCiAjZGVmaW5lIElDTVBWNl9QQVJBTVBST0IgNAotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJQ01QVjZfSU5GT01TR19NQVNLIDB4ODAKLQogI2RlZmluZSBJQ01QVjZfRUNIT19SRVFVRVNUIDEyOAogI2RlZmluZSBJQ01QVjZfRUNIT19SRVBMWSAxMjkKICNkZWZpbmUgSUNNUFY2X01HTV9RVUVSWSAxMzAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIElDTVBWNl9NR01fUkVQT1JUIDEzMQogI2RlZmluZSBJQ01QVjZfTUdNX1JFRFVDVElPTiAxMzIKLQogI2RlZmluZSBJQ01QVjZfTklfUVVFUlkgMTM5CiAjZGVmaW5lIElDTVBWNl9OSV9SRVBMWSAxNDAKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSUNNUFY2X01MRDJfUkVQT1JUIDE0MwotCiAjZGVmaW5lIElDTVBWNl9ESEFBRF9SRVFVRVNUIDE0NAogI2RlZmluZSBJQ01QVjZfREhBQURfUkVQTFkgMTQ1CiAjZGVmaW5lIElDTVBWNl9NT0JJTEVfUFJFRklYX1NPTCAxNDYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIElDTVBWNl9NT0JJTEVfUFJFRklYX0FEViAxNDcKLQogI2RlZmluZSBJQ01QVjZfTk9ST1VURSAwCiAjZGVmaW5lIElDTVBWNl9BRE1fUFJPSElCSVRFRCAxCiAjZGVmaW5lIElDTVBWNl9OT1RfTkVJR0hCT1VSIDIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIElDTVBWNl9BRERSX1VOUkVBQ0ggMwogI2RlZmluZSBJQ01QVjZfUE9SVF9VTlJFQUNIIDQKLQogI2RlZmluZSBJQ01QVjZfRVhDX0hPUExJTUlUIDAKICNkZWZpbmUgSUNNUFY2X0VYQ19GUkFHVElNRSAxCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIElDTVBWNl9IRFJfRklFTEQgMAogI2RlZmluZSBJQ01QVjZfVU5LX05FWFRIRFIgMQogI2RlZmluZSBJQ01QVjZfVU5LX09QVElPTiAyCi0KICNkZWZpbmUgSUNNUFY2X0ZJTFRFUiAxCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIElDTVBWNl9GSUxURVJfQkxPQ0sgMQogI2RlZmluZSBJQ01QVjZfRklMVEVSX1BBU1MgMgogI2RlZmluZSBJQ01QVjZfRklMVEVSX0JMT0NLT1RIRVJTIDMKICNkZWZpbmUgSUNNUFY2X0ZJTFRFUl9QQVNTT05MWSA0Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgaWNtcDZfZmlsdGVyIHsKICBfX3UzMiBkYXRhWzhdOwogfTsKLQogI2RlZmluZSBNTEQyX01PREVfSVNfSU5DTFVERSAxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNTEQyX01PREVfSVNfRVhDTFVERSAyCiAjZGVmaW5lIE1MRDJfQ0hBTkdFX1RPX0lOQ0xVREUgMwogI2RlZmluZSBNTEQyX0NIQU5HRV9UT19FWENMVURFIDQKICNkZWZpbmUgTUxEMl9BTExPV19ORVdfU09VUkNFUyA1CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNTEQyX0JMT0NLX09MRF9TT1VSQ0VTIDYKLQogI2RlZmluZSBNTEQyX0FMTF9NQ1JfSU5JVCB7IHsgeyAweGZmLDB4MDIsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwweDE2IH0gfSB9Ci0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2lkbGVfc3RhdHNfZGV2aWNlLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvaWRsZV9zdGF0c19kZXZpY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OWE5NmFjCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2lkbGVfc3RhdHNfZGV2aWNlLmgKQEAgLTAsMCArMSw1OCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX0FSQ0hfQVJNX01BQ0hfTVNNX0lETEVfU1RBVFNfREVWSUNFX0gKKyNkZWZpbmUgX19BUkNIX0FSTV9NQUNIX01TTV9JRExFX1NUQVRTX0RFVklDRV9ICisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgTVNNX0lETEVfU1RBVFNfRVZFTlRfTk9ORSAwCisjZGVmaW5lIE1TTV9JRExFX1NUQVRTX0VWRU5UX0JVU1lfVElNRVJfRVhQSVJFRCAxCisjZGVmaW5lIE1TTV9JRExFX1NUQVRTX0VWRU5UX0JVU1lfVElNRVJfRVhQSVJFRF9SRVNFVCAyCisjZGVmaW5lIE1TTV9JRExFX1NUQVRTX0VWRU5UX0NPTExFQ1RJT05fTkVBUkxZX0ZVTEwgNAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgTVNNX0lETEVfU1RBVFNfRVZFTlRfQ09MTEVDVElPTl9GVUxMIDgKKyNkZWZpbmUgTVNNX0lETEVfU1RBVFNfRVZFTlRfSURMRV9USU1FUl9FWFBJUkVEIDE2CisjZGVmaW5lIE1TTV9JRExFX1NUQVRTX05SX01BWF9JTlRFUlZBTFMgMjAwCitzdHJ1Y3QgbXNtX2lkbGVfcHVsc2UgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3M2NCBidXN5X3N0YXJ0X3RpbWU7CisgX191MzIgYnVzeV9pbnRlcnZhbDsKKyBfX3UzMiB3YWl0X2ludGVydmFsOworfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCitzdHJ1Y3QgbXNtX2lkbGVfcmVhZF9zdGF0cyB7CisgX191MzIgZXZlbnQ7CisgX19zNjQgcmV0dXJuX3RpbWVzdGFtcDsKKyBfX3UzMiBidXN5X3RpbWVyX3JlbWFpbmluZzsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MzIgbnJfY29sbGVjdGVkOworIHN0cnVjdCBtc21faWRsZV9wdWxzZSBwdWxzZV9jaGFpbltNU01fSURMRV9TVEFUU19OUl9NQVhfSU5URVJWQUxTXTsKK307CitzdHJ1Y3QgbXNtX2lkbGVfd3JpdGVfc3RhdHMgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UzMiBidXN5X3RpbWVyOworIF9fdTMyIG5leHRfYnVzeV90aW1lcjsKKyBfX3UzMiBtYXhfc2FtcGxlczsKK307CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBNU01fSURMRV9TVEFUU19JT0NfTUFHSUMgMHhEOAorI2RlZmluZSBNU01fSURMRV9TVEFUU19JT0NfUkVBRF9TVEFUUyAgIF9JT1dSKE1TTV9JRExFX1NUQVRTX0lPQ19NQUdJQywgMSwgc3RydWN0IG1zbV9pZGxlX3JlYWRfc3RhdHMpCisjZGVmaW5lIE1TTV9JRExFX1NUQVRTX0lPQ19XUklURV9TVEFUUyAgIF9JT1dSKE1TTV9JRExFX1NUQVRTX0lPQ19NQUdJQywgMiwgc3RydWN0IG1zbV9pZGxlX3dyaXRlX3N0YXRzKQorI2VuZGlmCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2lmLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvaWYuaAppbmRleCA3ZGI0ODg4Li44ZmM2ZDg4IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvaWYuaAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvaWYuaApAQCAtNywxNzggKzcsMTk1IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfTElOVVhfSUZfSAogI2RlZmluZSBfTElOVVhfSUZfSAotCi0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4gIAotI2luY2x1ZGUgPGxpbnV4L3NvY2tldC5oPiAgCi0jaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4gIAotCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9zb2NrZXQuaD4KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KICNkZWZpbmUgSUZOQU1TSVogMTYKICNkZWZpbmUgSUZBTElBU1ogMjU2CiAjaW5jbHVkZSA8bGludXgvaGRsYy9pb2N0bC5oPgotCi0jZGVmaW5lIElGRl9VUCAweDEgIAotI2RlZmluZSBJRkZfQlJPQURDQVNUIDB4MiAgCi0jZGVmaW5lIElGRl9ERUJVRyAweDQgIAotI2RlZmluZSBJRkZfTE9PUEJBQ0sgMHg4ICAKLSNkZWZpbmUgSUZGX1BPSU5UT1BPSU5UIDB4MTAgIAotI2RlZmluZSBJRkZfTk9UUkFJTEVSUyAweDIwICAKLSNkZWZpbmUgSUZGX1JVTk5JTkcgMHg0MCAgCi0jZGVmaW5lIElGRl9OT0FSUCAweDgwICAKLSNkZWZpbmUgSUZGX1BST01JU0MgMHgxMDAgIAotI2RlZmluZSBJRkZfQUxMTVVMVEkgMHgyMDAgIAotCi0jZGVmaW5lIElGRl9NQVNURVIgMHg0MDAgIAotI2RlZmluZSBJRkZfU0xBVkUgMHg4MDAgIAotCi0jZGVmaW5lIElGRl9NVUxUSUNBU1QgMHgxMDAwICAKLQotI2RlZmluZSBJRkZfUE9SVFNFTCAweDIwMDAgIAotI2RlZmluZSBJRkZfQVVUT01FRElBIDB4NDAwMCAgCi0jZGVmaW5lIElGRl9EWU5BTUlDIDB4ODAwMCAgCi0KLSNkZWZpbmUgSUZGX0xPV0VSX1VQIDB4MTAwMDAgIAotI2RlZmluZSBJRkZfRE9STUFOVCAweDIwMDAwICAKLQotI2RlZmluZSBJRkZfRUNITyAweDQwMDAwICAKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgSUZGX1VQIDB4MQorI2RlZmluZSBJRkZfQlJPQURDQVNUIDB4MgorI2RlZmluZSBJRkZfREVCVUcgMHg0CisjZGVmaW5lIElGRl9MT09QQkFDSyAweDgKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIElGRl9QT0lOVE9QT0lOVCAweDEwCisjZGVmaW5lIElGRl9OT1RSQUlMRVJTIDB4MjAKKyNkZWZpbmUgSUZGX1JVTk5JTkcgMHg0MAorI2RlZmluZSBJRkZfTk9BUlAgMHg4MAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgSUZGX1BST01JU0MgMHgxMDAKKyNkZWZpbmUgSUZGX0FMTE1VTFRJIDB4MjAwCisjZGVmaW5lIElGRl9NQVNURVIgMHg0MDAKKyNkZWZpbmUgSUZGX1NMQVZFIDB4ODAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBJRkZfTVVMVElDQVNUIDB4MTAwMAorI2RlZmluZSBJRkZfUE9SVFNFTCAweDIwMDAKKyNkZWZpbmUgSUZGX0FVVE9NRURJQSAweDQwMDAKKyNkZWZpbmUgSUZGX0RZTkFNSUMgMHg4MDAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBJRkZfTE9XRVJfVVAgMHgxMDAwMAorI2RlZmluZSBJRkZfRE9STUFOVCAweDIwMDAwCisjZGVmaW5lIElGRl9FQ0hPIDB4NDAwMDAKICNkZWZpbmUgSUZGX1ZPTEFUSUxFIChJRkZfTE9PUEJBQ0t8SUZGX1BPSU5UT1BPSU5UfElGRl9CUk9BRENBU1R8SUZGX0VDSE98ICBJRkZfTUFTVEVSfElGRl9TTEFWRXxJRkZfUlVOTklOR3xJRkZfTE9XRVJfVVB8SUZGX0RPUk1BTlQpCi0KLSNkZWZpbmUgSUZGXzgwMl8xUV9WTEFOIDB4MSAgCi0jZGVmaW5lIElGRl9FQlJJREdFIDB4MiAgCi0jZGVmaW5lIElGRl9TTEFWRV9JTkFDVElWRSAweDQgIAotI2RlZmluZSBJRkZfTUFTVEVSXzgwMjNBRCAweDggIAotI2RlZmluZSBJRkZfTUFTVEVSX0FMQiAweDEwICAKLSNkZWZpbmUgSUZGX0JPTkRJTkcgMHgyMCAgCi0jZGVmaW5lIElGRl9TTEFWRV9ORUVEQVJQIDB4NDAgIAotI2RlZmluZSBJRkZfSVNBVEFQIDB4ODAgIAotI2RlZmluZSBJRkZfTUFTVEVSX0FSUE1PTiAweDEwMCAgCi0jZGVmaW5lIElGRl9XQU5fSERMQyAweDIwMCAgCi0jZGVmaW5lIElGRl9YTUlUX0RTVF9SRUxFQVNFIDB4NDAwICAKLSNkZWZpbmUgSUZGX0RPTlRfQlJJREdFIDB4ODAwICAKLSNkZWZpbmUgSUZGX0lOX05FVFBPTEwgMHgxMDAwICAKLSNkZWZpbmUgSUZGX0RJU0FCTEVfTkVUUE9MTCAweDIwMDAgIAotCi0jZGVmaW5lIElGX0dFVF9JRkFDRSAweDAwMDEgIAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgSUZGXzgwMl8xUV9WTEFOIDB4MQorI2RlZmluZSBJRkZfRUJSSURHRSAweDIKKyNkZWZpbmUgSUZGX1NMQVZFX0lOQUNUSVZFIDB4NAorI2RlZmluZSBJRkZfTUFTVEVSXzgwMjNBRCAweDgKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIElGRl9NQVNURVJfQUxCIDB4MTAKKyNkZWZpbmUgSUZGX0JPTkRJTkcgMHgyMAorI2RlZmluZSBJRkZfU0xBVkVfTkVFREFSUCAweDQwCisjZGVmaW5lIElGRl9JU0FUQVAgMHg4MAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgSUZGX01BU1RFUl9BUlBNT04gMHgxMDAKKyNkZWZpbmUgSUZGX1dBTl9IRExDIDB4MjAwCisjZGVmaW5lIElGRl9YTUlUX0RTVF9SRUxFQVNFIDB4NDAwCisjZGVmaW5lIElGRl9ET05UX0JSSURHRSAweDgwMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgSUZGX0lOX05FVFBPTEwgMHgxMDAwCisjZGVmaW5lIElGRl9ESVNBQkxFX05FVFBPTEwgMHgyMDAwCisjZGVmaW5lIElGX0dFVF9JRkFDRSAweDAwMDEKICNkZWZpbmUgSUZfR0VUX1BST1RPIDB4MDAwMgotCi0jZGVmaW5lIElGX0lGQUNFX1YzNSAweDEwMDAgIAotI2RlZmluZSBJRl9JRkFDRV9WMjQgMHgxMDAxICAKLSNkZWZpbmUgSUZfSUZBQ0VfWDIxIDB4MTAwMiAgCi0jZGVmaW5lIElGX0lGQUNFX1QxIDB4MTAwMyAgCi0jZGVmaW5lIElGX0lGQUNFX0UxIDB4MTAwNCAgCi0jZGVmaW5lIElGX0lGQUNFX1NZTkNfU0VSSUFMIDB4MTAwNSAgCi0jZGVmaW5lIElGX0lGQUNFX1gyMUQgMHgxMDA2ICAKLQotI2RlZmluZSBJRl9QUk9UT19IRExDIDB4MjAwMCAgCi0jZGVmaW5lIElGX1BST1RPX1BQUCAweDIwMDEgIAotI2RlZmluZSBJRl9QUk9UT19DSVNDTyAweDIwMDIgIAotI2RlZmluZSBJRl9QUk9UT19GUiAweDIwMDMgIAotI2RlZmluZSBJRl9QUk9UT19GUl9BRERfUFZDIDB4MjAwNCAgCi0jZGVmaW5lIElGX1BST1RPX0ZSX0RFTF9QVkMgMHgyMDA1ICAKLSNkZWZpbmUgSUZfUFJPVE9fWDI1IDB4MjAwNiAgCi0jZGVmaW5lIElGX1BST1RPX0hETENfRVRIIDB4MjAwNyAgCi0jZGVmaW5lIElGX1BST1RPX0ZSX0FERF9FVEhfUFZDIDB4MjAwOCAgCi0jZGVmaW5lIElGX1BST1RPX0ZSX0RFTF9FVEhfUFZDIDB4MjAwOSAgCi0jZGVmaW5lIElGX1BST1RPX0ZSX1BWQyAweDIwMEEgIAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgSUZfSUZBQ0VfVjM1IDB4MTAwMAorI2RlZmluZSBJRl9JRkFDRV9WMjQgMHgxMDAxCisjZGVmaW5lIElGX0lGQUNFX1gyMSAweDEwMDIKKyNkZWZpbmUgSUZfSUZBQ0VfVDEgMHgxMDAzCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBJRl9JRkFDRV9FMSAweDEwMDQKKyNkZWZpbmUgSUZfSUZBQ0VfU1lOQ19TRVJJQUwgMHgxMDA1CisjZGVmaW5lIElGX0lGQUNFX1gyMUQgMHgxMDA2CisjZGVmaW5lIElGX1BST1RPX0hETEMgMHgyMDAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBJRl9QUk9UT19QUFAgMHgyMDAxCisjZGVmaW5lIElGX1BST1RPX0NJU0NPIDB4MjAwMgorI2RlZmluZSBJRl9QUk9UT19GUiAweDIwMDMKKyNkZWZpbmUgSUZfUFJPVE9fRlJfQUREX1BWQyAweDIwMDQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIElGX1BST1RPX0ZSX0RFTF9QVkMgMHgyMDA1CisjZGVmaW5lIElGX1BST1RPX1gyNSAweDIwMDYKKyNkZWZpbmUgSUZfUFJPVE9fSERMQ19FVEggMHgyMDA3CisjZGVmaW5lIElGX1BST1RPX0ZSX0FERF9FVEhfUFZDIDB4MjAwOAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgSUZfUFJPVE9fRlJfREVMX0VUSF9QVkMgMHgyMDA5CisjZGVmaW5lIElGX1BST1RPX0ZSX1BWQyAweDIwMEEKICNkZWZpbmUgSUZfUFJPVE9fRlJfRVRIX1BWQyAweDIwMEIKLSNkZWZpbmUgSUZfUFJPVE9fUkFXIDB4MjAwQyAgCi0KKyNkZWZpbmUgSUZfUFJPVE9fUkFXIDB4MjAwQworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIGVudW0gewogIElGX09QRVJfVU5LTk9XTiwKICBJRl9PUEVSX05PVFBSRVNFTlQsCiAgSUZfT1BFUl9ET1dOLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBJRl9PUEVSX0xPV0VSTEFZRVJET1dOLAogIElGX09QRVJfVEVTVElORywKICBJRl9PUEVSX0RPUk1BTlQsCiAgSUZfT1BFUl9VUCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwotCiBlbnVtIHsKICBJRl9MSU5LX01PREVfREVGQVVMVCwKICBJRl9MSU5LX01PREVfRE9STUFOVCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwotCiBzdHJ1Y3QgaWZtYXAgewogIHVuc2lnbmVkIGxvbmcgbWVtX3N0YXJ0OwogIHVuc2lnbmVkIGxvbmcgbWVtX2VuZDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgc2hvcnQgYmFzZV9hZGRyOwogIHVuc2lnbmVkIGNoYXIgaXJxOwogIHVuc2lnbmVkIGNoYXIgZG1hOwogIHVuc2lnbmVkIGNoYXIgcG9ydDsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07Ci0KIHN0cnVjdCBpZl9zZXR0aW5ncyB7CiAgdW5zaWduZWQgaW50IHR5cGU7CiAgdW5zaWduZWQgaW50IHNpemU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuaW9uIHsKLQogIHJhd19oZGxjX3Byb3RvIF9fdXNlciAqcmF3X2hkbGM7CiAgY2lzY29fcHJvdG8gX191c2VyICpjaXNjbzsKICBmcl9wcm90byBfX3VzZXIgKmZyOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBmcl9wcm90b19wdmMgX191c2VyICpmcl9wdmM7CiAgZnJfcHJvdG9fcHZjX2luZm8gX191c2VyICpmcl9wdmNfaW5mbzsKLQogIHN5bmNfc2VyaWFsX3NldHRpbmdzIF9fdXNlciAqc3luYzsKICB0ZTFfc2V0dGluZ3MgX191c2VyICp0ZTE7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIH0gaWZzX2lmc3U7CiB9OwotCiBzdHJ1Y3QgaWZyZXEgewogI2RlZmluZSBJRkhXQUREUkxFTiA2CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuaW9uCiAgewogIGNoYXIgaWZybl9uYW1lW0lGTkFNU0laXTsKICB9IGlmcl9pZnJuOwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuaW9uIHsKICBzdHJ1Y3Qgc29ja2FkZHIgaWZydV9hZGRyOwogIHN0cnVjdCBzb2NrYWRkciBpZnJ1X2RzdGFkZHI7CiAgc3RydWN0IHNvY2thZGRyIGlmcnVfYnJvYWRhZGRyOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3Qgc29ja2FkZHIgaWZydV9uZXRtYXNrOwogIHN0cnVjdCBzb2NrYWRkciBpZnJ1X2h3YWRkcjsKICBzaG9ydCBpZnJ1X2ZsYWdzOwogIGludCBpZnJ1X2l2YWx1ZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgaW50IGlmcnVfbXR1OwogIHN0cnVjdCBpZm1hcCBpZnJ1X21hcDsKICBjaGFyIGlmcnVfc2xhdmVbSUZOQU1TSVpdOwogIGNoYXIgaWZydV9uZXduYW1lW0lGTkFNU0laXTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdm9pZCBfX3VzZXIgKiBpZnJ1X2RhdGE7CiAgc3RydWN0IGlmX3NldHRpbmdzIGlmcnVfc2V0dGluZ3M7CiAgfSBpZnJfaWZydTsKIH07Ci0KLSNkZWZpbmUgaWZyX25hbWUgaWZyX2lmcm4uaWZybl9uYW1lICAKLSNkZWZpbmUgaWZyX2h3YWRkciBpZnJfaWZydS5pZnJ1X2h3YWRkciAgCi0jZGVmaW5lIGlmcl9hZGRyIGlmcl9pZnJ1LmlmcnVfYWRkciAgCi0jZGVmaW5lIGlmcl9kc3RhZGRyIGlmcl9pZnJ1LmlmcnVfZHN0YWRkciAgCi0jZGVmaW5lIGlmcl9icm9hZGFkZHIgaWZyX2lmcnUuaWZydV9icm9hZGFkZHIgIAotI2RlZmluZSBpZnJfbmV0bWFzayBpZnJfaWZydS5pZnJ1X25ldG1hc2sgIAotI2RlZmluZSBpZnJfZmxhZ3MgaWZyX2lmcnUuaWZydV9mbGFncyAgCi0jZGVmaW5lIGlmcl9tZXRyaWMgaWZyX2lmcnUuaWZydV9pdmFsdWUgIAotI2RlZmluZSBpZnJfbXR1IGlmcl9pZnJ1LmlmcnVfbXR1ICAKLSNkZWZpbmUgaWZyX21hcCBpZnJfaWZydS5pZnJ1X21hcCAgCi0jZGVmaW5lIGlmcl9zbGF2ZSBpZnJfaWZydS5pZnJ1X3NsYXZlICAKLSNkZWZpbmUgaWZyX2RhdGEgaWZyX2lmcnUuaWZydV9kYXRhICAKLSNkZWZpbmUgaWZyX2lmaW5kZXggaWZyX2lmcnUuaWZydV9pdmFsdWUgIAotI2RlZmluZSBpZnJfYmFuZHdpZHRoIGlmcl9pZnJ1LmlmcnVfaXZhbHVlICAKLSNkZWZpbmUgaWZyX3FsZW4gaWZyX2lmcnUuaWZydV9pdmFsdWUgIAotI2RlZmluZSBpZnJfbmV3bmFtZSBpZnJfaWZydS5pZnJ1X25ld25hbWUgIAotI2RlZmluZSBpZnJfc2V0dGluZ3MgaWZyX2lmcnUuaWZydV9zZXR0aW5ncyAgCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIGlmcl9uYW1lIGlmcl9pZnJuLmlmcm5fbmFtZQorI2RlZmluZSBpZnJfaHdhZGRyIGlmcl9pZnJ1LmlmcnVfaHdhZGRyCisjZGVmaW5lIGlmcl9hZGRyIGlmcl9pZnJ1LmlmcnVfYWRkcgorI2RlZmluZSBpZnJfZHN0YWRkciBpZnJfaWZydS5pZnJ1X2RzdGFkZHIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIGlmcl9icm9hZGFkZHIgaWZyX2lmcnUuaWZydV9icm9hZGFkZHIKKyNkZWZpbmUgaWZyX25ldG1hc2sgaWZyX2lmcnUuaWZydV9uZXRtYXNrCisjZGVmaW5lIGlmcl9mbGFncyBpZnJfaWZydS5pZnJ1X2ZsYWdzCisjZGVmaW5lIGlmcl9tZXRyaWMgaWZyX2lmcnUuaWZydV9pdmFsdWUKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIGlmcl9tdHUgaWZyX2lmcnUuaWZydV9tdHUKKyNkZWZpbmUgaWZyX21hcCBpZnJfaWZydS5pZnJ1X21hcAorI2RlZmluZSBpZnJfc2xhdmUgaWZyX2lmcnUuaWZydV9zbGF2ZQorI2RlZmluZSBpZnJfZGF0YSBpZnJfaWZydS5pZnJ1X2RhdGEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIGlmcl9pZmluZGV4IGlmcl9pZnJ1LmlmcnVfaXZhbHVlCisjZGVmaW5lIGlmcl9iYW5kd2lkdGggaWZyX2lmcnUuaWZydV9pdmFsdWUKKyNkZWZpbmUgaWZyX3FsZW4gaWZyX2lmcnUuaWZydV9pdmFsdWUKKyNkZWZpbmUgaWZyX25ld25hbWUgaWZyX2lmcnUuaWZydV9uZXduYW1lCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBpZnJfc2V0dGluZ3MgaWZyX2lmcnUuaWZydV9zZXR0aW5ncwogc3RydWN0IGlmY29uZiB7CiAgaW50IGlmY19sZW47CiAgdW5pb24geworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBjaGFyIF9fdXNlciAqaWZjdV9idWY7CiAgc3RydWN0IGlmcmVxIF9fdXNlciAqaWZjdV9yZXE7CiAgfSBpZmNfaWZjdTsKIH07Ci0jZGVmaW5lIGlmY19idWYgaWZjX2lmY3UuaWZjdV9idWYgIAotI2RlZmluZSBpZmNfcmVxIGlmY19pZmN1LmlmY3VfcmVxICAKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgaWZjX2J1ZiBpZmNfaWZjdS5pZmN1X2J1ZgorI2RlZmluZSBpZmNfcmVxIGlmY19pZmN1LmlmY3VfcmVxCiAjZW5kaWYKLQpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2lmX2FkZHIuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9pZl9hZGRyLmgKaW5kZXggOWMxZmExNS4uMDU1MTdhMiAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2lmX2FkZHIuaAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvaWZfYWRkci5oCkBAIC03LDU4ICs3LDY3IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfX0xJTlVYX0lGX0FERFJfSAogI2RlZmluZSBfX0xJTlVYX0lGX0FERFJfSAotCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRsaW5rLmg+Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgaWZhZGRybXNnCiB7CiAgX191OCBpZmFfZmFtaWx5OwogIF9fdTggaWZhX3ByZWZpeGxlbjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191OCBpZmFfZmxhZ3M7CiAgX191OCBpZmFfc2NvcGU7CiAgX191MzIgaWZhX2luZGV4OwogfTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIGVudW0KIHsKICBJRkFfVU5TUEVDLAogIElGQV9BRERSRVNTLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBJRkFfTE9DQUwsCiAgSUZBX0xBQkVMLAogIElGQV9CUk9BRENBU1QsCiAgSUZBX0FOWUNBU1QsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIElGQV9DQUNIRUlORk8sCiAgSUZBX01VTFRJQ0FTVCwKICBfX0lGQV9NQVgsCiB9OwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJRkFfTUFYIChfX0lGQV9NQVggLSAxKQotCiAjZGVmaW5lIElGQV9GX1NFQ09OREFSWSAweDAxCiAjZGVmaW5lIElGQV9GX1RFTVBPUkFSWSBJRkFfRl9TRUNPTkRBUlkKLQogI2RlZmluZSBJRkFfRl9OT0RBRCAweDAyCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJRkFfRl9PUFRJTUlTVElDIDB4MDQKICNkZWZpbmUgSUZBX0ZfREFERkFJTEVEIDB4MDgKICNkZWZpbmUgSUZBX0ZfSE9NRUFERFJFU1MgMHgxMAogI2RlZmluZSBJRkFfRl9ERVBSRUNBVEVEIDB4MjAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIElGQV9GX1RFTlRBVElWRSAweDQwCiAjZGVmaW5lIElGQV9GX1BFUk1BTkVOVCAweDgwCi0KIHN0cnVjdCBpZmFfY2FjaGVpbmZvCiB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGlmYV9wcmVmZXJlZDsKICBfX3UzMiBpZmFfdmFsaWQ7CiAgX191MzIgY3N0YW1wOwogIF9fdTMyIHRzdGFtcDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwotCiAjZGVmaW5lIElGQV9SVEEocikgKChzdHJ1Y3QgcnRhdHRyKikoKChjaGFyKikocikpICsgTkxNU0dfQUxJR04oc2l6ZW9mKHN0cnVjdCBpZmFkZHJtc2cpKSkpCiAjZGVmaW5lIElGQV9QQVlMT0FEKG4pIE5MTVNHX1BBWUxPQUQobixzaXplb2Yoc3RydWN0IGlmYWRkcm1zZykpCi0KICNlbmRpZgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9pZl9hbGcuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9pZl9hbGcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNWYxNjFjCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2lmX2FsZy5oCkBAIC0wLDAgKzEsNDMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0xJTlVYX0lGX0FMR19ICisjZGVmaW5lIF9MSU5VWF9JRl9BTEdfSAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CitzdHJ1Y3Qgc29ja2FkZHJfYWxnIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MTYgc2FsZ19mYW1pbHk7CisgX191OCBzYWxnX3R5cGVbMTRdOworIF9fdTMyIHNhbGdfZmVhdDsKKyBfX3UzMiBzYWxnX21hc2s7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTggc2FsZ19uYW1lWzY0XTsKK307CitzdHJ1Y3QgYWZfYWxnX2l2IHsKKyBfX3UzMiBpdmxlbjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191OCBpdlswXTsKK307CisjZGVmaW5lIEFMR19TRVRfS0VZIDEKKyNkZWZpbmUgQUxHX1NFVF9JViAyCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBBTEdfU0VUX09QIDMKKyNkZWZpbmUgQUxHX09QX0RFQ1JZUFQgMAorI2RlZmluZSBBTEdfT1BfRU5DUllQVCAxCisjZW5kaWYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvaWZfYXJjbmV0LmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvaWZfYXJjbmV0LmgKaW5kZXggYTFhZDg3Ny4uYWZiYmFlNiAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2lmX2FyY25ldC5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9pZl9hcmNuZXQuaApAQCAtNyw4OCArNyw5NyBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX0xJTlVYX0lGX0FSQ05FVF9ICiAjZGVmaW5lIF9MSU5VWF9JRl9BUkNORVRfSAotCiAjaW5jbHVkZSA8bGludXgvaWZfZXRoZXIuaD4KLQotI2RlZmluZSBBUkNfUF9JUCAyMTIgIAotI2RlZmluZSBBUkNfUF9JUFY2IDE5NiAgCi0jZGVmaW5lIEFSQ19QX0FSUCAyMTMgIAotI2RlZmluZSBBUkNfUF9SQVJQIDIxNCAgCi0jZGVmaW5lIEFSQ19QX0lQWCAyNTAgIAotI2RlZmluZSBBUkNfUF9OT1ZFTExfRUMgMjM2ICAKLQotI2RlZmluZSBBUkNfUF9JUF9SRkMxMDUxIDI0MCAgCi0jZGVmaW5lIEFSQ19QX0FSUF9SRkMxMDUxIDI0MSAgCi0KLSNkZWZpbmUgQVJDX1BfRVRIRVIgMjMyICAKLQotI2RlZmluZSBBUkNfUF9EQVRBUE9JTlRfQk9PVCAwICAKKyNkZWZpbmUgQVJDX1BfSVAgMjEyCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBBUkNfUF9JUFY2IDE5NgorI2RlZmluZSBBUkNfUF9BUlAgMjEzCisjZGVmaW5lIEFSQ19QX1JBUlAgMjE0CisjZGVmaW5lIEFSQ19QX0lQWCAyNTAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEFSQ19QX05PVkVMTF9FQyAyMzYKKyNkZWZpbmUgQVJDX1BfSVBfUkZDMTA1MSAyNDAKKyNkZWZpbmUgQVJDX1BfQVJQX1JGQzEwNTEgMjQxCisjZGVmaW5lIEFSQ19QX0VUSEVSIDIzMgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgQVJDX1BfREFUQVBPSU5UX0JPT1QgMAogI2RlZmluZSBBUkNfUF9EQVRBUE9JTlRfTU9VTlQgMQotI2RlZmluZSBBUkNfUF9QT1dFUkxBTl9CRUFDT04gOCAgCi0jZGVmaW5lIEFSQ19QX1BPV0VSTEFOX0JFQUNPTjIgMjQzICAKLSNkZWZpbmUgQVJDX1BfTEFOU09GVCAyNTEgIAorI2RlZmluZSBBUkNfUF9QT1dFUkxBTl9CRUFDT04gOAorI2RlZmluZSBBUkNfUF9QT1dFUkxBTl9CRUFDT04yIDI0MworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgQVJDX1BfTEFOU09GVCAyNTEKICNkZWZpbmUgQVJDX1BfQVRBTEsgMHhERAotCiAjZGVmaW5lIEFSQ05FVF9BTEVOIDEKLQogc3RydWN0IGFyY19yZmMxMjAxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogewogIHVpbnQ4X3QgcHJvdG87CiAgdWludDhfdCBzcGxpdF9mbGFnOwogIHVpbnQxNl90IHNlcXVlbmNlOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1aW50OF90IHBheWxvYWRbMF07CiB9OwogI2RlZmluZSBSRkMxMjAxX0hEUl9TSVpFIDQKLQogc3RydWN0IGFyY19yZmMxMDUxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogewogIHVpbnQ4X3QgcHJvdG87CiAgdWludDhfdCBwYXlsb2FkWzBdOwogfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFJGQzEwNTFfSERSX1NJWkUgMQotCiBzdHJ1Y3QgYXJjX2V0aF9lbmNhcAogewogIHVpbnQ4X3QgcHJvdG87CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCBldGhoZHIgZXRoOwogIHVpbnQ4X3QgcGF5bG9hZFswXTsKIH07CiAjZGVmaW5lIEVUSF9FTkNBUF9IRFJfU0laRSAxNAotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IGFyY19jYXAKIHsKICB1aW50OF90IHByb3RvOwogIHVpbnQ4X3QgY29va2llW3NpemVvZihpbnQpXTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5pb24gewogIHVpbnQ4X3QgYWNrOwogIHVpbnQ4X3QgcmF3WzBdOwogIH0gbWVzOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07Ci0KIHN0cnVjdCBhcmNfaGFyZHdhcmUKIHsKICB1aW50OF90IHNvdXJjZSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgZGVzdCwKICBvZmZzZXRbMl07CiB9OwogI2RlZmluZSBBUkNfSERSX1NJWkUgNAotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IGFyY2hkcgogewotCiAgc3RydWN0IGFyY19oYXJkd2FyZSBoYXJkOwotCiAgdW5pb24geworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgYXJjX3JmYzEyMDEgcmZjMTIwMTsKICBzdHJ1Y3QgYXJjX3JmYzEwNTEgcmZjMTA1MTsKICBzdHJ1Y3QgYXJjX2V0aF9lbmNhcCBldGhfZW5jYXA7CiAgc3RydWN0IGFyY19jYXAgY2FwOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1aW50OF90IHJhd1swXTsKICB9IHNvZnQ7CiB9OwotCiAjZW5kaWYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvaWZfYXJwLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvaWZfYXJwLmgKaW5kZXggZDhhNDAwMS4uMjM2NTlmMCAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2lmX2FycC5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9pZl9hcnAuaApAQCAtNywxMTkgKzcsMTM0IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfTElOVVhfSUZfQVJQX0gKICNkZWZpbmUgX0xJTlVYX0lGX0FSUF9ICi0KICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KLQotI2RlZmluZSBBUlBIUkRfTkVUUk9NIDAgIAotI2RlZmluZSBBUlBIUkRfRVRIRVIgMSAgCi0jZGVmaW5lIEFSUEhSRF9FRVRIRVIgMiAgCi0jZGVmaW5lIEFSUEhSRF9BWDI1IDMgIAotI2RlZmluZSBBUlBIUkRfUFJPTkVUIDQgIAotI2RlZmluZSBBUlBIUkRfQ0hBT1MgNSAgCi0jZGVmaW5lIEFSUEhSRF9JRUVFODAyIDYgIAotI2RlZmluZSBBUlBIUkRfQVJDTkVUIDcgIAotI2RlZmluZSBBUlBIUkRfQVBQTEVUTEsgOCAgCi0jZGVmaW5lIEFSUEhSRF9ETENJIDE1ICAKLSNkZWZpbmUgQVJQSFJEX0FUTSAxOSAgCi0jZGVmaW5lIEFSUEhSRF9NRVRSSUNPTSAyMyAgCi0jZGVmaW5lIEFSUEhSRF9JRUVFMTM5NCAyNCAgCi0jZGVmaW5lIEFSUEhSRF9FVUk2NCAyNyAgCi0jZGVmaW5lIEFSUEhSRF9JTkZJTklCQU5EIDMyICAKLQorI2RlZmluZSBBUlBIUkRfTkVUUk9NIDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEFSUEhSRF9FVEhFUiAxCisjZGVmaW5lIEFSUEhSRF9FRVRIRVIgMgorI2RlZmluZSBBUlBIUkRfQVgyNSAzCisjZGVmaW5lIEFSUEhSRF9QUk9ORVQgNAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgQVJQSFJEX0NIQU9TIDUKKyNkZWZpbmUgQVJQSFJEX0lFRUU4MDIgNgorI2RlZmluZSBBUlBIUkRfQVJDTkVUIDcKKyNkZWZpbmUgQVJQSFJEX0FQUExFVExLIDgKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEFSUEhSRF9ETENJIDE1CisjZGVmaW5lIEFSUEhSRF9BVE0gMTkKKyNkZWZpbmUgQVJQSFJEX01FVFJJQ09NIDIzCisjZGVmaW5lIEFSUEhSRF9JRUVFMTM5NCAyNAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgQVJQSFJEX0VVSTY0IDI3CisjZGVmaW5lIEFSUEhSRF9JTkZJTklCQU5EIDMyCiAjZGVmaW5lIEFSUEhSRF9TTElQIDI1NgogI2RlZmluZSBBUlBIUkRfQ1NMSVAgMjU3CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBUlBIUkRfU0xJUDYgMjU4CiAjZGVmaW5lIEFSUEhSRF9DU0xJUDYgMjU5Ci0jZGVmaW5lIEFSUEhSRF9SU1JWRCAyNjAgIAorI2RlZmluZSBBUlBIUkRfUlNSVkQgMjYwCiAjZGVmaW5lIEFSUEhSRF9BREFQVCAyNjQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFSUEhSRF9ST1NFIDI3MAotI2RlZmluZSBBUlBIUkRfWDI1IDI3MSAgCi0jZGVmaW5lIEFSUEhSRF9IV1gyNSAyNzIgIAotI2RlZmluZSBBUlBIUkRfQ0FOIDI4MCAgCisjZGVmaW5lIEFSUEhSRF9YMjUgMjcxCisjZGVmaW5lIEFSUEhSRF9IV1gyNSAyNzIKKyNkZWZpbmUgQVJQSFJEX0NBTiAyODAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFSUEhSRF9QUFAgNTEyCi0jZGVmaW5lIEFSUEhSRF9DSVNDTyA1MTMgIAorI2RlZmluZSBBUlBIUkRfQ0lTQ08gNTEzCiAjZGVmaW5lIEFSUEhSRF9IRExDIEFSUEhSRF9DSVNDTwotI2RlZmluZSBBUlBIUkRfTEFQQiA1MTYgIAotI2RlZmluZSBBUlBIUkRfRERDTVAgNTE3ICAKLSNkZWZpbmUgQVJQSFJEX1JBV0hETEMgNTE4ICAKLQotI2RlZmluZSBBUlBIUkRfVFVOTkVMIDc2OCAgCi0jZGVmaW5lIEFSUEhSRF9UVU5ORUw2IDc2OSAgCi0jZGVmaW5lIEFSUEhSRF9GUkFEIDc3MCAgCi0jZGVmaW5lIEFSUEhSRF9TS0lQIDc3MSAgCi0jZGVmaW5lIEFSUEhSRF9MT09QQkFDSyA3NzIgIAotI2RlZmluZSBBUlBIUkRfTE9DQUxUTEsgNzczICAKLSNkZWZpbmUgQVJQSFJEX0ZEREkgNzc0ICAKLSNkZWZpbmUgQVJQSFJEX0JJRiA3NzUgIAotI2RlZmluZSBBUlBIUkRfU0lUIDc3NiAgCi0jZGVmaW5lIEFSUEhSRF9JUEREUCA3NzcgIAotI2RlZmluZSBBUlBIUkRfSVBHUkUgNzc4ICAKLSNkZWZpbmUgQVJQSFJEX1BJTVJFRyA3NzkgIAotI2RlZmluZSBBUlBIUkRfSElQUEkgNzgwICAKLSNkZWZpbmUgQVJQSFJEX0FTSCA3ODEgIAotI2RlZmluZSBBUlBIUkRfRUNPTkVUIDc4MiAgCi0jZGVmaW5lIEFSUEhSRF9JUkRBIDc4MyAgCi0KLSNkZWZpbmUgQVJQSFJEX0ZDUFAgNzg0ICAKLSNkZWZpbmUgQVJQSFJEX0ZDQUwgNzg1ICAKLSNkZWZpbmUgQVJQSFJEX0ZDUEwgNzg2ICAKLSNkZWZpbmUgQVJQSFJEX0ZDRkFCUklDIDc4NyAgCi0KLSNkZWZpbmUgQVJQSFJEX0lFRUU4MDJfVFIgODAwICAKLSNkZWZpbmUgQVJQSFJEX0lFRUU4MDIxMSA4MDEgIAotI2RlZmluZSBBUlBIUkRfSUVFRTgwMjExX1BSSVNNIDgwMiAgCi0jZGVmaW5lIEFSUEhSRF9JRUVFODAyMTFfUkFESU9UQVAgODAzICAKKyNkZWZpbmUgQVJQSFJEX0xBUEIgNTE2CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBBUlBIUkRfRERDTVAgNTE3CisjZGVmaW5lIEFSUEhSRF9SQVdIRExDIDUxOAorI2RlZmluZSBBUlBIUkRfVFVOTkVMIDc2OAorI2RlZmluZSBBUlBIUkRfVFVOTkVMNiA3NjkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEFSUEhSRF9GUkFEIDc3MAorI2RlZmluZSBBUlBIUkRfU0tJUCA3NzEKKyNkZWZpbmUgQVJQSFJEX0xPT1BCQUNLIDc3MgorI2RlZmluZSBBUlBIUkRfTE9DQUxUTEsgNzczCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBBUlBIUkRfRkRESSA3NzQKKyNkZWZpbmUgQVJQSFJEX0JJRiA3NzUKKyNkZWZpbmUgQVJQSFJEX1NJVCA3NzYKKyNkZWZpbmUgQVJQSFJEX0lQRERQIDc3NworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgQVJQSFJEX0lQR1JFIDc3OAorI2RlZmluZSBBUlBIUkRfUElNUkVHIDc3OQorI2RlZmluZSBBUlBIUkRfSElQUEkgNzgwCisjZGVmaW5lIEFSUEhSRF9BU0ggNzgxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBBUlBIUkRfRUNPTkVUIDc4MgorI2RlZmluZSBBUlBIUkRfSVJEQSA3ODMKKyNkZWZpbmUgQVJQSFJEX0ZDUFAgNzg0CisjZGVmaW5lIEFSUEhSRF9GQ0FMIDc4NQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgQVJQSFJEX0ZDUEwgNzg2CisjZGVmaW5lIEFSUEhSRF9GQ0ZBQlJJQyA3ODcKKyNkZWZpbmUgQVJQSFJEX0lFRUU4MDJfVFIgODAwCisjZGVmaW5lIEFSUEhSRF9JRUVFODAyMTEgODAxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBBUlBIUkRfSUVFRTgwMjExX1BSSVNNIDgwMgorI2RlZmluZSBBUlBIUkRfSUVFRTgwMjExX1JBRElPVEFQIDgwMwogI2RlZmluZSBBUlBIUkRfSUVFRTgwMjE1NCA4MDQKLQotI2RlZmluZSBBUlBIUkRfUEhPTkVUIDgyMCAgCi0jZGVmaW5lIEFSUEhSRF9QSE9ORVRfUElQRSA4MjEgIAotI2RlZmluZSBBUlBIUkRfQ0FJRiA4MjIgIAotCi0jZGVmaW5lIEFSUEhSRF9WT0lEIDB4RkZGRiAgCi0jZGVmaW5lIEFSUEhSRF9OT05FIDB4RkZGRSAgCi0KLSNkZWZpbmUgQVJQT1BfUkVRVUVTVCAxICAKLSNkZWZpbmUgQVJQT1BfUkVQTFkgMiAgCi0jZGVmaW5lIEFSUE9QX1JSRVFVRVNUIDMgIAotI2RlZmluZSBBUlBPUF9SUkVQTFkgNCAgCi0jZGVmaW5lIEFSUE9QX0luUkVRVUVTVCA4ICAKLSNkZWZpbmUgQVJQT1BfSW5SRVBMWSA5ICAKLSNkZWZpbmUgQVJQT1BfTkFLIDEwICAKLQorI2RlZmluZSBBUlBIUkRfUEhPTkVUIDgyMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgQVJQSFJEX1BIT05FVF9QSVBFIDgyMQorI2RlZmluZSBBUlBIUkRfQ0FJRiA4MjIKKyNkZWZpbmUgQVJQSFJEX1ZPSUQgMHhGRkZGCisjZGVmaW5lIEFSUEhSRF9OT05FIDB4RkZGRQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgQVJQT1BfUkVRVUVTVCAxCisjZGVmaW5lIEFSUE9QX1JFUExZIDIKKyNkZWZpbmUgQVJQT1BfUlJFUVVFU1QgMworI2RlZmluZSBBUlBPUF9SUkVQTFkgNAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgQVJQT1BfSW5SRVFVRVNUIDgKKyNkZWZpbmUgQVJQT1BfSW5SRVBMWSA5CisjZGVmaW5lIEFSUE9QX05BSyAxMAogc3RydWN0IGFycHJlcSB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCBzb2NrYWRkciBhcnBfcGE7CiAgc3RydWN0IHNvY2thZGRyIGFycF9oYTsKICBpbnQgYXJwX2ZsYWdzOwogIHN0cnVjdCBzb2NrYWRkciBhcnBfbmV0bWFzazsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgY2hhciBhcnBfZGV2WzE2XTsKIH07Ci0KIHN0cnVjdCBhcnByZXFfb2xkIHsKICBzdHJ1Y3Qgc29ja2FkZHIgYXJwX3BhOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3Qgc29ja2FkZHIgYXJwX2hhOwogIGludCBhcnBfZmxhZ3M7CiAgc3RydWN0IHNvY2thZGRyIGFycF9uZXRtYXNrOwogfTsKLQotI2RlZmluZSBBVEZfQ09NIDB4MDIgIAotI2RlZmluZSBBVEZfUEVSTSAweDA0ICAKLSNkZWZpbmUgQVRGX1BVQkwgMHgwOCAgCi0jZGVmaW5lIEFURl9VU0VUUkFJTEVSUyAweDEwICAKLSNkZWZpbmUgQVRGX05FVE1BU0sgMHgyMCAgCi0jZGVmaW5lIEFURl9ET05UUFVCIDB4NDAgIAotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBBVEZfQ09NIDB4MDIKKyNkZWZpbmUgQVRGX1BFUk0gMHgwNAorI2RlZmluZSBBVEZfUFVCTCAweDA4CisjZGVmaW5lIEFURl9VU0VUUkFJTEVSUyAweDEwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBBVEZfTkVUTUFTSyAweDIwCisjZGVmaW5lIEFURl9ET05UUFVCIDB4NDAKIHN0cnVjdCBhcnBoZHIgewogIF9fYmUxNiBhcl9ocmQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fYmUxNiBhcl9wcm87CiAgdW5zaWduZWQgY2hhciBhcl9obG47CiAgdW5zaWduZWQgY2hhciBhcl9wbG47CiAgX19iZTE2IGFyX29wOwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKLQogI2VuZGlmCi0KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9pZl9icmlkZ2UuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9pZl9icmlkZ2UuaAppbmRleCA5M2Y5NDk0Li5hNzcxZmQ3IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvaWZfYnJpZGdlLmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2lmX2JyaWRnZS5oCkBAIC03LDk0ICs3LDExMiBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX0xJTlVYX0lGX0JSSURHRV9ICiAjZGVmaW5lIF9MSU5VWF9JRl9CUklER0VfSAotCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLQogI2RlZmluZSBTWVNGU19CUklER0VfQVRUUiAiYnJpZGdlIgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU1lTRlNfQlJJREdFX0ZEQiAiYnJmb3J3YXJkIgogI2RlZmluZSBTWVNGU19CUklER0VfUE9SVF9TVUJESVIgImJyaWYiCiAjZGVmaW5lIFNZU0ZTX0JSSURHRV9QT1JUX0FUVFIgImJycG9ydCIKICNkZWZpbmUgU1lTRlNfQlJJREdFX1BPUlRfTElOSyAiYnJpZGdlIgotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBCUkNUTF9WRVJTSU9OIDEKLQogI2RlZmluZSBCUkNUTF9HRVRfVkVSU0lPTiAwCiAjZGVmaW5lIEJSQ1RMX0dFVF9CUklER0VTIDEKICNkZWZpbmUgQlJDVExfQUREX0JSSURHRSAyCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBCUkNUTF9ERUxfQlJJREdFIDMKICNkZWZpbmUgQlJDVExfQUREX0lGIDQKICNkZWZpbmUgQlJDVExfREVMX0lGIDUKICNkZWZpbmUgQlJDVExfR0VUX0JSSURHRV9JTkZPIDYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEJSQ1RMX0dFVF9QT1JUX0xJU1QgNwogI2RlZmluZSBCUkNUTF9TRVRfQlJJREdFX0ZPUldBUkRfREVMQVkgOAogI2RlZmluZSBCUkNUTF9TRVRfQlJJREdFX0hFTExPX1RJTUUgOQogI2RlZmluZSBCUkNUTF9TRVRfQlJJREdFX01BWF9BR0UgMTAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEJSQ1RMX1NFVF9BR0VJTkdfVElNRSAxMQogI2RlZmluZSBCUkNUTF9TRVRfR0NfSU5URVJWQUwgMTIKICNkZWZpbmUgQlJDVExfR0VUX1BPUlRfSU5GTyAxMwogI2RlZmluZSBCUkNUTF9TRVRfQlJJREdFX1NUUF9TVEFURSAxNAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQlJDVExfU0VUX0JSSURHRV9QUklPUklUWSAxNQogI2RlZmluZSBCUkNUTF9TRVRfUE9SVF9QUklPUklUWSAxNgogI2RlZmluZSBCUkNUTF9TRVRfUEFUSF9DT1NUIDE3CiAjZGVmaW5lIEJSQ1RMX0dFVF9GREJfRU5UUklFUyAxOAotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBCUl9TVEFURV9ESVNBQkxFRCAwCiAjZGVmaW5lIEJSX1NUQVRFX0xJU1RFTklORyAxCiAjZGVmaW5lIEJSX1NUQVRFX0xFQVJOSU5HIDIKICNkZWZpbmUgQlJfU1RBVEVfRk9SV0FSRElORyAzCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBCUl9TVEFURV9CTE9DS0lORyA0Ci0KIHN0cnVjdCBfX2JyaWRnZV9pbmZvCiB7CiAgX191NjQgZGVzaWduYXRlZF9yb290OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U2NCBicmlkZ2VfaWQ7CiAgX191MzIgcm9vdF9wYXRoX2Nvc3Q7CiAgX191MzIgbWF4X2FnZTsKICBfX3UzMiBoZWxsb190aW1lOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBmb3J3YXJkX2RlbGF5OwogIF9fdTMyIGJyaWRnZV9tYXhfYWdlOwogIF9fdTMyIGJyaWRnZV9oZWxsb190aW1lOwogIF9fdTMyIGJyaWRnZV9mb3J3YXJkX2RlbGF5OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IHRvcG9sb2d5X2NoYW5nZTsKICBfX3U4IHRvcG9sb2d5X2NoYW5nZV9kZXRlY3RlZDsKICBfX3U4IHJvb3RfcG9ydDsKICBfX3U4IHN0cF9lbmFibGVkOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBhZ2VpbmdfdGltZTsKICBfX3UzMiBnY19pbnRlcnZhbDsKICBfX3UzMiBoZWxsb190aW1lcl92YWx1ZTsKICBfX3UzMiB0Y25fdGltZXJfdmFsdWU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHRvcG9sb2d5X2NoYW5nZV90aW1lcl92YWx1ZTsKICBfX3UzMiBnY190aW1lcl92YWx1ZTsKIH07Ci0KIHN0cnVjdCBfX3BvcnRfaW5mbworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHsKICBfX3U2NCBkZXNpZ25hdGVkX3Jvb3Q7CiAgX191NjQgZGVzaWduYXRlZF9icmlkZ2U7CiAgX191MTYgcG9ydF9pZDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MTYgZGVzaWduYXRlZF9wb3J0OwogIF9fdTMyIHBhdGhfY29zdDsKICBfX3UzMiBkZXNpZ25hdGVkX2Nvc3Q7CiAgX191OCBzdGF0ZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191OCB0b3BfY2hhbmdlX2FjazsKICBfX3U4IGNvbmZpZ19wZW5kaW5nOwogIF9fdTggdW51c2VkMDsKICBfX3UzMiBtZXNzYWdlX2FnZV90aW1lcl92YWx1ZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgZm9yd2FyZF9kZWxheV90aW1lcl92YWx1ZTsKICBfX3UzMiBob2xkX3RpbWVyX3ZhbHVlOwogfTsKLQogc3RydWN0IF9fZmRiX2VudHJ5CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogewogIF9fdTggbWFjX2FkZHJbNl07CiAgX191OCBwb3J0X25vOwogIF9fdTggaXNfbG9jYWw7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGFnZWluZ190aW1lcl92YWx1ZTsKICBfX3UzMiB1bnVzZWQ7CiB9OwotCiAjZW5kaWYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvaWZfZXRoZXIuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9pZl9ldGhlci5oCmluZGV4IDdlMjM1YTUuLjkxMTNiMDcgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9pZl9ldGhlci5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9pZl9ldGhlci5oCkBAIC03LDg5ICs3LDEwOSBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX0xJTlVYX0lGX0VUSEVSX0gKICNkZWZpbmUgX0xJTlVYX0lGX0VUSEVSX0gKLQogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0KLSNkZWZpbmUgRVRIX0FMRU4gNiAgCi0jZGVmaW5lIEVUSF9ITEVOIDE0ICAKLSNkZWZpbmUgRVRIX1pMRU4gNjAgIAotI2RlZmluZSBFVEhfREFUQV9MRU4gMTUwMCAgCi0jZGVmaW5lIEVUSF9GUkFNRV9MRU4gMTUxNCAgCi0jZGVmaW5lIEVUSF9GQ1NfTEVOIDQgIAotCi0jZGVmaW5lIEVUSF9QX0xPT1AgMHgwMDYwICAKLSNkZWZpbmUgRVRIX1BfUFVQIDB4MDIwMCAgCi0jZGVmaW5lIEVUSF9QX1BVUEFUIDB4MDIwMSAgCi0jZGVmaW5lIEVUSF9QX0lQIDB4MDgwMCAgCi0jZGVmaW5lIEVUSF9QX1gyNSAweDA4MDUgIAotI2RlZmluZSBFVEhfUF9BUlAgMHgwODA2ICAKLSNkZWZpbmUgRVRIX1BfQlBRIDB4MDhGRiAgCi0jZGVmaW5lIEVUSF9QX0lFRUVQVVAgMHgwYTAwICAKLSNkZWZpbmUgRVRIX1BfSUVFRVBVUEFUIDB4MGEwMSAgCi0jZGVmaW5lIEVUSF9QX0RFQyAweDYwMDAgIAotI2RlZmluZSBFVEhfUF9ETkFfREwgMHg2MDAxICAKLSNkZWZpbmUgRVRIX1BfRE5BX1JDIDB4NjAwMiAgCi0jZGVmaW5lIEVUSF9QX0ROQV9SVCAweDYwMDMgIAotI2RlZmluZSBFVEhfUF9MQVQgMHg2MDA0ICAKLSNkZWZpbmUgRVRIX1BfRElBRyAweDYwMDUgIAotI2RlZmluZSBFVEhfUF9DVVNUIDB4NjAwNiAgCi0jZGVmaW5lIEVUSF9QX1NDQSAweDYwMDcgIAotI2RlZmluZSBFVEhfUF9URUIgMHg2NTU4ICAKLSNkZWZpbmUgRVRIX1BfUkFSUCAweDgwMzUgIAotI2RlZmluZSBFVEhfUF9BVEFMSyAweDgwOUIgIAotI2RlZmluZSBFVEhfUF9BQVJQIDB4ODBGMyAgCi0jZGVmaW5lIEVUSF9QXzgwMjFRIDB4ODEwMCAgCi0jZGVmaW5lIEVUSF9QX0lQWCAweDgxMzcgIAotI2RlZmluZSBFVEhfUF9JUFY2IDB4ODZERCAgCi0jZGVmaW5lIEVUSF9QX1BBVVNFIDB4ODgwOCAgCi0jZGVmaW5lIEVUSF9QX1NMT1cgMHg4ODA5ICAKLSNkZWZpbmUgRVRIX1BfV0NDUCAweDg4M0UgIAotI2RlZmluZSBFVEhfUF9QUFBfRElTQyAweDg4NjMgIAotI2RlZmluZSBFVEhfUF9QUFBfU0VTIDB4ODg2NCAgCi0jZGVmaW5lIEVUSF9QX01QTFNfVUMgMHg4ODQ3ICAKLSNkZWZpbmUgRVRIX1BfTVBMU19NQyAweDg4NDggIAotI2RlZmluZSBFVEhfUF9BVE1NUE9BIDB4ODg0YyAgCi0jZGVmaW5lIEVUSF9QX0FUTUZBVEUgMHg4ODg0ICAKLSNkZWZpbmUgRVRIX1BfUEFFIDB4ODg4RSAgCi0jZGVmaW5lIEVUSF9QX0FPRSAweDg4QTIgIAotI2RlZmluZSBFVEhfUF9USVBDIDB4ODhDQSAgCi0jZGVmaW5lIEVUSF9QXzE1ODggMHg4OEY3ICAKLSNkZWZpbmUgRVRIX1BfRkNPRSAweDg5MDYgIAotI2RlZmluZSBFVEhfUF9GSVAgMHg4OTE0ICAKLSNkZWZpbmUgRVRIX1BfRURTQSAweERBREEgIAotCi0jZGVmaW5lIEVUSF9QXzgwMl8zIDB4MDAwMSAgCi0jZGVmaW5lIEVUSF9QX0FYMjUgMHgwMDAyICAKLSNkZWZpbmUgRVRIX1BfQUxMIDB4MDAwMyAgCi0jZGVmaW5lIEVUSF9QXzgwMl8yIDB4MDAwNCAgCi0jZGVmaW5lIEVUSF9QX1NOQVAgMHgwMDA1ICAKLSNkZWZpbmUgRVRIX1BfRERDTVAgMHgwMDA2ICAKLSNkZWZpbmUgRVRIX1BfV0FOX1BQUCAweDAwMDcgIAotI2RlZmluZSBFVEhfUF9QUFBfTVAgMHgwMDA4ICAKLSNkZWZpbmUgRVRIX1BfTE9DQUxUQUxLIDB4MDAwOSAgCi0jZGVmaW5lIEVUSF9QX0NBTiAweDAwMEMgIAotI2RlZmluZSBFVEhfUF9QUFBUQUxLIDB4MDAxMCAgCi0jZGVmaW5lIEVUSF9QX1RSXzgwMl8yIDB4MDAxMSAgCi0jZGVmaW5lIEVUSF9QX01PQklURVggMHgwMDE1ICAKLSNkZWZpbmUgRVRIX1BfQ09OVFJPTCAweDAwMTYgIAotI2RlZmluZSBFVEhfUF9JUkRBIDB4MDAxNyAgCi0jZGVmaW5lIEVUSF9QX0VDT05FVCAweDAwMTggIAotI2RlZmluZSBFVEhfUF9IRExDIDB4MDAxOSAgCi0jZGVmaW5lIEVUSF9QX0FSQ05FVCAweDAwMUEgIAotI2RlZmluZSBFVEhfUF9EU0EgMHgwMDFCICAKLSNkZWZpbmUgRVRIX1BfVFJBSUxFUiAweDAwMUMgIAotI2RlZmluZSBFVEhfUF9QSE9ORVQgMHgwMEY1ICAKLSNkZWZpbmUgRVRIX1BfSUVFRTgwMjE1NCAweDAwRjYgIAotI2RlZmluZSBFVEhfUF9DQUlGIDB4MDBGNyAgCi0KKyNkZWZpbmUgRVRIX0FMRU4gNgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgRVRIX0hMRU4gMTQKKyNkZWZpbmUgRVRIX1pMRU4gNjAKKyNkZWZpbmUgRVRIX0RBVEFfTEVOIDE1MDAKKyNkZWZpbmUgRVRIX0ZSQU1FX0xFTiAxNTE0CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBFVEhfRkNTX0xFTiA0CisjZGVmaW5lIEVUSF9QX0xPT1AgMHgwMDYwCisjZGVmaW5lIEVUSF9QX1BVUCAweDAyMDAKKyNkZWZpbmUgRVRIX1BfUFVQQVQgMHgwMjAxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBFVEhfUF9JUCAweDA4MDAKKyNkZWZpbmUgRVRIX1BfWDI1IDB4MDgwNQorI2RlZmluZSBFVEhfUF9BUlAgMHgwODA2CisjZGVmaW5lIEVUSF9QX0JQUSAweDA4RkYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEVUSF9QX0lFRUVQVVAgMHgwYTAwCisjZGVmaW5lIEVUSF9QX0lFRUVQVVBBVCAweDBhMDEKKyNkZWZpbmUgRVRIX1BfREVDIDB4NjAwMAorI2RlZmluZSBFVEhfUF9ETkFfREwgMHg2MDAxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBFVEhfUF9ETkFfUkMgMHg2MDAyCisjZGVmaW5lIEVUSF9QX0ROQV9SVCAweDYwMDMKKyNkZWZpbmUgRVRIX1BfTEFUIDB4NjAwNAorI2RlZmluZSBFVEhfUF9ESUFHIDB4NjAwNQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgRVRIX1BfQ1VTVCAweDYwMDYKKyNkZWZpbmUgRVRIX1BfU0NBIDB4NjAwNworI2RlZmluZSBFVEhfUF9URUIgMHg2NTU4CisjZGVmaW5lIEVUSF9QX1JBUlAgMHg4MDM1CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBFVEhfUF9BVEFMSyAweDgwOUIKKyNkZWZpbmUgRVRIX1BfQUFSUCAweDgwRjMKKyNkZWZpbmUgRVRIX1BfODAyMVEgMHg4MTAwCisjZGVmaW5lIEVUSF9QX0lQWCAweDgxMzcKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEVUSF9QX0lQVjYgMHg4NkRECisjZGVmaW5lIEVUSF9QX1BBVVNFIDB4ODgwOAorI2RlZmluZSBFVEhfUF9TTE9XIDB4ODgwOQorI2RlZmluZSBFVEhfUF9XQ0NQIDB4ODgzRQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgRVRIX1BfUFBQX0RJU0MgMHg4ODYzCisjZGVmaW5lIEVUSF9QX1BQUF9TRVMgMHg4ODY0CisjZGVmaW5lIEVUSF9QX01QTFNfVUMgMHg4ODQ3CisjZGVmaW5lIEVUSF9QX01QTFNfTUMgMHg4ODQ4CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBFVEhfUF9BVE1NUE9BIDB4ODg0YworI2RlZmluZSBFVEhfUF9BVE1GQVRFIDB4ODg4NAorI2RlZmluZSBFVEhfUF9QQUUgMHg4ODhFCisjZGVmaW5lIEVUSF9QX0FPRSAweDg4QTIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEVUSF9QX1RJUEMgMHg4OENBCisjZGVmaW5lIEVUSF9QXzE1ODggMHg4OEY3CisjZGVmaW5lIEVUSF9QX0ZDT0UgMHg4OTA2CisjZGVmaW5lIEVUSF9QX0ZJUCAweDg5MTQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEVUSF9QX0VEU0EgMHhEQURBCisjZGVmaW5lIEVUSF9QXzgwMl8zIDB4MDAwMQorI2RlZmluZSBFVEhfUF9BWDI1IDB4MDAwMgorI2RlZmluZSBFVEhfUF9BTEwgMHgwMDAzCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBFVEhfUF84MDJfMiAweDAwMDQKKyNkZWZpbmUgRVRIX1BfU05BUCAweDAwMDUKKyNkZWZpbmUgRVRIX1BfRERDTVAgMHgwMDA2CisjZGVmaW5lIEVUSF9QX1dBTl9QUFAgMHgwMDA3CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBFVEhfUF9QUFBfTVAgMHgwMDA4CisjZGVmaW5lIEVUSF9QX0xPQ0FMVEFMSyAweDAwMDkKKyNkZWZpbmUgRVRIX1BfQ0FOIDB4MDAwQworI2RlZmluZSBFVEhfUF9QUFBUQUxLIDB4MDAxMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgRVRIX1BfVFJfODAyXzIgMHgwMDExCisjZGVmaW5lIEVUSF9QX01PQklURVggMHgwMDE1CisjZGVmaW5lIEVUSF9QX0NPTlRST0wgMHgwMDE2CisjZGVmaW5lIEVUSF9QX0lSREEgMHgwMDE3CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBFVEhfUF9FQ09ORVQgMHgwMDE4CisjZGVmaW5lIEVUSF9QX0hETEMgMHgwMDE5CisjZGVmaW5lIEVUSF9QX0FSQ05FVCAweDAwMUEKKyNkZWZpbmUgRVRIX1BfRFNBIDB4MDAxQgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgRVRIX1BfVFJBSUxFUiAweDAwMUMKKyNkZWZpbmUgRVRIX1BfUEhPTkVUIDB4MDBGNQorI2RlZmluZSBFVEhfUF9JRUVFODAyMTU0IDB4MDBGNgorI2RlZmluZSBFVEhfUF9DQUlGIDB4MDBGNworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBldGhoZHIgewogIHVuc2lnbmVkIGNoYXIgaF9kZXN0W0VUSF9BTEVOXTsKICB1bnNpZ25lZCBjaGFyIGhfc291cmNlW0VUSF9BTEVOXTsKICBfX2JlMTYgaF9wcm90bzsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9pZl9mYy5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2lmX2ZjLmgKaW5kZXggYTZhNDdiNC4uZmMwN2FlMCAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2lmX2ZjLmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2lmX2ZjLmgKQEAgLTcsMjkgKzcsMzUgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9MSU5VWF9JRl9GQ19ICiAjZGVmaW5lIF9MSU5VWF9JRl9GQ19ICi0KLSNkZWZpbmUgRkNfQUxFTiA2ICAKKyNkZWZpbmUgRkNfQUxFTiA2CiAjZGVmaW5lIEZDX0hMRU4gKHNpemVvZihzdHJ1Y3QgZmNoX2hkcikrc2l6ZW9mKHN0cnVjdCBmY2xsYykpCi0jZGVmaW5lIEZDX0lEX0xFTiAzICAKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgRkNfSURfTEVOIDMKICNkZWZpbmUgRVhURU5ERURfU0FQIDB4QUEKICNkZWZpbmUgVUlfQ01EIDB4MDMKLQogc3RydWN0IGZjaF9oZHIgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IGRhZGRyW0ZDX0FMRU5dOwogIF9fdTggc2FkZHJbRkNfQUxFTl07CiB9OwotCiBzdHJ1Y3QgZmNsbGMgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IGRzYXA7CiAgX191OCBzc2FwOwogIF9fdTggbGxjOwogIF9fdTggcHJvdGlkWzNdOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX2JlMTYgZXRoZXJ0eXBlOwogfTsKLQogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvaWZfZmRkaS5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2lmX2ZkZGkuaAppbmRleCBmNTk0OTJmLi5mYTZjNzYyIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvaWZfZmRkaS5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9pZl9mZGRpLmgKQEAgLTcsNzcgKzcsOTIgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9MSU5VWF9JRl9GRERJX0gKICNkZWZpbmUgX0xJTlVYX0lGX0ZERElfSAotCi0jZGVmaW5lIEZERElfS19BTEVOIDYgIAotI2RlZmluZSBGRERJX0tfODAyMl9ITEVOIDE2ICAKLSNkZWZpbmUgRkRESV9LX1NOQVBfSExFTiAyMSAgCi0jZGVmaW5lIEZERElfS184MDIyX1pMRU4gMTYgIAotI2RlZmluZSBGRERJX0tfU05BUF9aTEVOIDIxICAKLSNkZWZpbmUgRkRESV9LXzgwMjJfRExFTiA0NDc1ICAKLSNkZWZpbmUgRkRESV9LX1NOQVBfRExFTiA0NDcwICAKLSNkZWZpbmUgRkRESV9LX0xMQ19aTEVOIDEzICAKLSNkZWZpbmUgRkRESV9LX0xMQ19MRU4gNDQ5MSAgCi0KLSNkZWZpbmUgRkRESV9GQ19LX1ZPSUQgMHgwMCAKLSNkZWZpbmUgRkRESV9GQ19LX05PTl9SRVNUUklDVEVEX1RPS0VOIDB4ODAgCi0jZGVmaW5lIEZERElfRkNfS19SRVNUUklDVEVEX1RPS0VOIDB4QzAgCisjZGVmaW5lIEZERElfS19BTEVOIDYKKyNkZWZpbmUgRkRESV9LXzgwMjJfSExFTiAxNgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgRkRESV9LX1NOQVBfSExFTiAyMQorI2RlZmluZSBGRERJX0tfODAyMl9aTEVOIDE2CisjZGVmaW5lIEZERElfS19TTkFQX1pMRU4gMjEKKyNkZWZpbmUgRkRESV9LXzgwMjJfRExFTiA0NDc1CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBGRERJX0tfU05BUF9ETEVOIDQ0NzAKKyNkZWZpbmUgRkRESV9LX0xMQ19aTEVOIDEzCisjZGVmaW5lIEZERElfS19MTENfTEVOIDQ0OTEKKyNkZWZpbmUgRkRESV9GQ19LX1ZPSUQgMHgwMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgRkRESV9GQ19LX05PTl9SRVNUUklDVEVEX1RPS0VOIDB4ODAKKyNkZWZpbmUgRkRESV9GQ19LX1JFU1RSSUNURURfVE9LRU4gMHhDMAogI2RlZmluZSBGRERJX0ZDX0tfU01UX01JTiAweDQxCiAjZGVmaW5lIEZERElfRkNfS19TTVRfTUFYIDB4NEYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEZERElfRkNfS19NQUNfTUlOIDB4QzEKLSNkZWZpbmUgRkRESV9GQ19LX01BQ19NQVggMHhDRiAKKyNkZWZpbmUgRkRESV9GQ19LX01BQ19NQVggMHhDRgogI2RlZmluZSBGRERJX0ZDX0tfQVNZTkNfTExDX01JTiAweDUwCiAjZGVmaW5lIEZERElfRkNfS19BU1lOQ19MTENfREVGIDB4NTQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEZERElfRkNfS19BU1lOQ19MTENfTUFYIDB4NUYKICNkZWZpbmUgRkRESV9GQ19LX1NZTkNfTExDX01JTiAweEQwCiAjZGVmaW5lIEZERElfRkNfS19TWU5DX0xMQ19NQVggMHhENwogI2RlZmluZSBGRERJX0ZDX0tfSU1QTEVNRU5UT1JfTUlOIDB4NjAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEZERElfRkNfS19JTVBMRU1FTlRPUl9NQVggMHg2RgogI2RlZmluZSBGRERJX0ZDX0tfUkVTRVJWRURfTUlOIDB4NzAKICNkZWZpbmUgRkRESV9GQ19LX1JFU0VSVkVEX01BWCAweDdGCi0KICNkZWZpbmUgRkRESV9FWFRFTkRFRF9TQVAgMHhBQQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRkRESV9VSV9DTUQgMHgwMwotCiBzdHJ1Y3QgZmRkaV84MDIyXzFfaGRyCiAgewogIF9fdTggZHNhcDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191OCBzc2FwOwogIF9fdTggY3RybDsKICB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQogc3RydWN0IGZkZGlfODAyMl8yX2hkcgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB7CiAgX191OCBkc2FwOwogIF9fdTggc3NhcDsKICBfX3U4IGN0cmxfMTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191OCBjdHJsXzI7CiAgfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KICNkZWZpbmUgRkRESV9LX09VSV9MRU4gMwogc3RydWN0IGZkZGlfc25hcF9oZHIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgewogIF9fdTggZHNhcDsKICBfX3U4IHNzYXA7CiAgX191OCBjdHJsOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IG91aVtGRERJX0tfT1VJX0xFTl07CiAgX19iZTE2IGV0aGVydHlwZTsKICB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQogc3RydWN0IGZkZGloZHIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgewogIF9fdTggZmM7CiAgX191OCBkYWRkcltGRERJX0tfQUxFTl07CiAgX191OCBzYWRkcltGRERJX0tfQUxFTl07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuaW9uCiAgewogIHN0cnVjdCBmZGRpXzgwMjJfMV9oZHIgbGxjXzgwMjJfMTsKICBzdHJ1Y3QgZmRkaV84MDIyXzJfaGRyIGxsY184MDIyXzI7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCBmZGRpX3NuYXBfaGRyIGxsY19zbmFwOwogIH0gaGRyOwogIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCiAjZW5kaWYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvaWZfaGlwcGkuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9pZl9oaXBwaS5oCmluZGV4IDUyZDM2ZjYuLmI0NTk2Y2UgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9pZl9oaXBwaS5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9pZl9oaXBwaS5oCkBAIC03LDkzICs3LDEwNyBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX0xJTlVYX0lGX0hJUFBJX0gKICNkZWZpbmUgX0xJTlVYX0lGX0hJUFBJX0gKLQogI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KLQotI2RlZmluZSBISVBQSV9BTEVOIDYgIAorI2RlZmluZSBISVBQSV9BTEVOIDYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEhJUFBJX0hMRU4gc2l6ZW9mKHN0cnVjdCBoaXBwaV9oZHIpCi0jZGVmaW5lIEhJUFBJX1pMRU4gMCAgCi0jZGVmaW5lIEhJUFBJX0RBVEFfTEVOIDY1MjgwICAKKyNkZWZpbmUgSElQUElfWkxFTiAwCisjZGVmaW5lIEhJUFBJX0RBVEFfTEVOIDY1MjgwCiAjZGVmaW5lIEhJUFBJX0ZSQU1FX0xFTiAoSElQUElfREFUQV9MRU4gKyBISVBQSV9ITEVOKQotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBISVBQSV9FWFRFTkRFRF9TQVAgMHhBQQogI2RlZmluZSBISVBQSV9VSV9DTUQgMHgwMwotCiBzdHJ1Y3QgaGlwbmV0X3N0YXRpc3RpY3MKIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgaW50IHJ4X3BhY2tldHM7CiAgaW50IHR4X3BhY2tldHM7CiAgaW50IHJ4X2Vycm9yczsKICBpbnQgdHhfZXJyb3JzOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBpbnQgcnhfZHJvcHBlZDsKICBpbnQgdHhfZHJvcHBlZDsKLQogIGludCByeF9sZW5ndGhfZXJyb3JzOwogIGludCByeF9vdmVyX2Vycm9yczsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgaW50IHJ4X2NyY19lcnJvcnM7CiAgaW50IHJ4X2ZyYW1lX2Vycm9yczsKICBpbnQgcnhfZmlmb19lcnJvcnM7CiAgaW50IHJ4X21pc3NlZF9lcnJvcnM7Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgaW50IHR4X2Fib3J0ZWRfZXJyb3JzOwogIGludCB0eF9jYXJyaWVyX2Vycm9yczsKICBpbnQgdHhfZmlmb19lcnJvcnM7CiAgaW50IHR4X2hlYXJ0YmVhdF9lcnJvcnM7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGludCB0eF93aW5kb3dfZXJyb3JzOwogfTsKLQogc3RydWN0IGhpcHBpX2ZwX2hkcgogeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX2JlMzIgZml4ZWQ7CiAgX19iZTMyIGQyX3NpemU7CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQogc3RydWN0IGhpcHBpX2xlX2hkcgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHsKICNpZmRlZiBfX0JJR19FTkRJQU5fQklURklFTEQKICBfX3U4IGZjOjM7CiAgX191OCBkb3VibGVfd2lkZToxOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IG1lc3NhZ2VfdHlwZTo0OwogI2VsaWYgZGVmaW5lZChfX0xJVFRMRV9FTkRJQU5fQklURklFTEQpCiAgX191OCBtZXNzYWdlX3R5cGU6NDsKICBfX3U4IGRvdWJsZV93aWRlOjE7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTggZmM6MzsKICNlbmRpZgogIF9fdTggZGVzdF9zd2l0Y2hfYWRkclszXTsKICNpZmRlZiBfX0JJR19FTkRJQU5fQklURklFTEQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191OCBkZXN0X2FkZHJfdHlwZTo0LAogIHNyY19hZGRyX3R5cGU6NDsKICNlbGlmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOX0JJVEZJRUxEKQogIF9fdTggc3JjX2FkZHJfdHlwZTo0LAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBkZXN0X2FkZHJfdHlwZTo0OwogI2VuZGlmCiAgX191OCBzcmNfc3dpdGNoX2FkZHJbM107CiAgX191MTYgcmVzZXJ2ZWQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTggZGFkZHJbSElQUElfQUxFTl07CiAgX191MTYgbG9jYWxseV9hZG1pbmlzdGVyZWQ7CiAgX191OCBzYWRkcltISVBQSV9BTEVOXTsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBISVBQSV9PVUlfTEVOIDMKLQogc3RydWN0IGhpcHBpX3NuYXBfaGRyCiB7CiAgX191OCBkc2FwOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IHNzYXA7CiAgX191OCBjdHJsOwogIF9fdTggb3VpW0hJUFBJX09VSV9MRU5dOwogIF9fYmUxNiBldGhlcnR5cGU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KIHN0cnVjdCBoaXBwaV9oZHIKIHsKICBzdHJ1Y3QgaGlwcGlfZnBfaGRyIGZwOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgaGlwcGlfbGVfaGRyIGxlOwogIHN0cnVjdCBoaXBwaV9zbmFwX2hkciBzbmFwOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KICNlbmRpZgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9pZl9saW5rLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvaWZfbGluay5oCmluZGV4IDRiODM3NjAuLmRmODViMmEgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9pZl9saW5rLmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2lmX2xpbmsuaApAQCAtNywyOTYgKzcsMzE4IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfTElOVVhfSUZfTElOS19ICiAjZGVmaW5lIF9MSU5VWF9JRl9MSU5LX0gKLQogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0bGluay5oPgotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IHJ0bmxfbGlua19zdGF0cyB7CiAgX191MzIgcnhfcGFja2V0czsKICBfX3UzMiB0eF9wYWNrZXRzOwogIF9fdTMyIHJ4X2J5dGVzOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiB0eF9ieXRlczsKICBfX3UzMiByeF9lcnJvcnM7CiAgX191MzIgdHhfZXJyb3JzOwogIF9fdTMyIHJ4X2Ryb3BwZWQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHR4X2Ryb3BwZWQ7CiAgX191MzIgbXVsdGljYXN0OwogIF9fdTMyIGNvbGxpc2lvbnM7Ci0KICBfX3UzMiByeF9sZW5ndGhfZXJyb3JzOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiByeF9vdmVyX2Vycm9yczsKICBfX3UzMiByeF9jcmNfZXJyb3JzOwogIF9fdTMyIHJ4X2ZyYW1lX2Vycm9yczsKICBfX3UzMiByeF9maWZvX2Vycm9yczsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgcnhfbWlzc2VkX2Vycm9yczsKLQogIF9fdTMyIHR4X2Fib3J0ZWRfZXJyb3JzOwogIF9fdTMyIHR4X2NhcnJpZXJfZXJyb3JzOwogIF9fdTMyIHR4X2ZpZm9fZXJyb3JzOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiB0eF9oZWFydGJlYXRfZXJyb3JzOwogIF9fdTMyIHR4X3dpbmRvd19lcnJvcnM7Ci0KICBfX3UzMiByeF9jb21wcmVzc2VkOwogIF9fdTMyIHR4X2NvbXByZXNzZWQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKLQogc3RydWN0IHJ0bmxfbGlua19zdGF0czY0IHsKICBfX3U2NCByeF9wYWNrZXRzOwogIF9fdTY0IHR4X3BhY2tldHM7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTY0IHJ4X2J5dGVzOwogIF9fdTY0IHR4X2J5dGVzOwogIF9fdTY0IHJ4X2Vycm9yczsKICBfX3U2NCB0eF9lcnJvcnM7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTY0IHJ4X2Ryb3BwZWQ7CiAgX191NjQgdHhfZHJvcHBlZDsKICBfX3U2NCBtdWx0aWNhc3Q7CiAgX191NjQgY29sbGlzaW9uczsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U2NCByeF9sZW5ndGhfZXJyb3JzOwogIF9fdTY0IHJ4X292ZXJfZXJyb3JzOwogIF9fdTY0IHJ4X2NyY19lcnJvcnM7CiAgX191NjQgcnhfZnJhbWVfZXJyb3JzOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U2NCByeF9maWZvX2Vycm9yczsKICBfX3U2NCByeF9taXNzZWRfZXJyb3JzOwotCiAgX191NjQgdHhfYWJvcnRlZF9lcnJvcnM7CiAgX191NjQgdHhfY2Fycmllcl9lcnJvcnM7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTY0IHR4X2ZpZm9fZXJyb3JzOwogIF9fdTY0IHR4X2hlYXJ0YmVhdF9lcnJvcnM7CiAgX191NjQgdHhfd2luZG93X2Vycm9yczsKLQogIF9fdTY0IHJ4X2NvbXByZXNzZWQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTY0IHR4X2NvbXByZXNzZWQ7CiB9OwotCiBzdHJ1Y3QgcnRubF9saW5rX2lmbWFwIHsKICBfX3U2NCBtZW1fc3RhcnQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTY0IG1lbV9lbmQ7CiAgX191NjQgYmFzZV9hZGRyOwogIF9fdTE2IGlycTsKICBfX3U4IGRtYTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191OCBwb3J0OwogfTsKLQogZW51bSB7CiAgSUZMQV9VTlNQRUMsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIElGTEFfQUREUkVTUywKICBJRkxBX0JST0FEQ0FTVCwKICBJRkxBX0lGTkFNRSwKICBJRkxBX01UVSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgSUZMQV9MSU5LLAogIElGTEFfUURJU0MsCiAgSUZMQV9TVEFUUywKICBJRkxBX0NPU1QsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJRkxBX0NPU1QgSUZMQV9DT1NUCiAgSUZMQV9QUklPUklUWSwKICNkZWZpbmUgSUZMQV9QUklPUklUWSBJRkxBX1BSSU9SSVRZCiAgSUZMQV9NQVNURVIsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJRkxBX01BU1RFUiBJRkxBX01BU1RFUgogIElGTEFfV0lSRUxFU1MsCiAjZGVmaW5lIElGTEFfV0lSRUxFU1MgSUZMQV9XSVJFTEVTUwogIElGTEFfUFJPVElORk8sCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJRkxBX1BST1RJTkZPIElGTEFfUFJPVElORk8KICBJRkxBX1RYUUxFTiwKICNkZWZpbmUgSUZMQV9UWFFMRU4gSUZMQV9UWFFMRU4KICBJRkxBX01BUCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIElGTEFfTUFQIElGTEFfTUFQCiAgSUZMQV9XRUlHSFQsCiAjZGVmaW5lIElGTEFfV0VJR0hUIElGTEFfV0VJR0hUCiAgSUZMQV9PUEVSU1RBVEUsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIElGTEFfTElOS01PREUsCiAgSUZMQV9MSU5LSU5GTywKICNkZWZpbmUgSUZMQV9MSU5LSU5GTyBJRkxBX0xJTktJTkZPCiAgSUZMQV9ORVRfTlNfUElELAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBJRkxBX0lGQUxJQVMsCiAgSUZMQV9OVU1fVkYsCiAgSUZMQV9WRklORk9fTElTVCwKICBJRkxBX1NUQVRTNjQsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIElGTEFfVkZfUE9SVFMsCiAgSUZMQV9QT1JUX1NFTEYsCiAgX19JRkxBX01BWAogfTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSUZMQV9NQVggKF9fSUZMQV9NQVggLSAxKQotCiAjZGVmaW5lIElGTEFfUlRBKHIpICgoc3RydWN0IHJ0YXR0ciopKCgoY2hhciopKHIpKSArIE5MTVNHX0FMSUdOKHNpemVvZihzdHJ1Y3QgaWZpbmZvbXNnKSkpKQogI2RlZmluZSBJRkxBX1BBWUxPQUQobikgTkxNU0dfUEFZTE9BRChuLHNpemVvZihzdHJ1Y3QgaWZpbmZvbXNnKSkKLQogZW51bSB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIElGTEFfSU5FVDZfVU5TUEVDLAogIElGTEFfSU5FVDZfRkxBR1MsCiAgSUZMQV9JTkVUNl9DT05GLAogIElGTEFfSU5FVDZfU1RBVFMsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIElGTEFfSU5FVDZfTUNBU1QsCiAgSUZMQV9JTkVUNl9DQUNIRUlORk8sCiAgSUZMQV9JTkVUNl9JQ01QNlNUQVRTLAogIF9fSUZMQV9JTkVUNl9NQVgKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwotCiAjZGVmaW5lIElGTEFfSU5FVDZfTUFYIChfX0lGTEFfSU5FVDZfTUFYIC0gMSkKLQogc3RydWN0IGlmbGFfY2FjaGVpbmZvIHsKICBfX3UzMiBtYXhfcmVhc21fbGVuOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiB0c3RhbXA7CiAgX191MzIgcmVhY2hhYmxlX3RpbWU7CiAgX191MzIgcmV0cmFuc190aW1lOwogfTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIGVudW0gewogIElGTEFfSU5GT19VTlNQRUMsCiAgSUZMQV9JTkZPX0tJTkQsCiAgSUZMQV9JTkZPX0RBVEEsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIElGTEFfSU5GT19YU1RBVFMsCiAgX19JRkxBX0lORk9fTUFYLAogfTsKLQogI2RlZmluZSBJRkxBX0lORk9fTUFYIChfX0lGTEFfSU5GT19NQVggLSAxKQotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogZW51bSB7CiAgSUZMQV9WTEFOX1VOU1BFQywKICBJRkxBX1ZMQU5fSUQsCiAgSUZMQV9WTEFOX0ZMQUdTLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBJRkxBX1ZMQU5fRUdSRVNTX1FPUywKICBJRkxBX1ZMQU5fSU5HUkVTU19RT1MsCiAgX19JRkxBX1ZMQU5fTUFYLAogfTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSUZMQV9WTEFOX01BWCAoX19JRkxBX1ZMQU5fTUFYIC0gMSkKLQogc3RydWN0IGlmbGFfdmxhbl9mbGFncyB7CiAgX191MzIgZmxhZ3M7CiAgX191MzIgbWFzazsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwotCiBlbnVtIHsKICBJRkxBX1ZMQU5fUU9TX1VOU1BFQywKICBJRkxBX1ZMQU5fUU9TX01BUFBJTkcsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fSUZMQV9WTEFOX1FPU19NQVgKIH07Ci0KICNkZWZpbmUgSUZMQV9WTEFOX1FPU19NQVggKF9fSUZMQV9WTEFOX1FPU19NQVggLSAxKQotCiBzdHJ1Y3QgaWZsYV92bGFuX3Fvc19tYXBwaW5nIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgZnJvbTsKICBfX3UzMiB0bzsKIH07Ci0KIGVudW0geworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBJRkxBX01BQ1ZMQU5fVU5TUEVDLAogIElGTEFfTUFDVkxBTl9NT0RFLAogIF9fSUZMQV9NQUNWTEFOX01BWCwKIH07Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIElGTEFfTUFDVkxBTl9NQVggKF9fSUZMQV9NQUNWTEFOX01BWCAtIDEpCi0KIGVudW0gbWFjdmxhbl9tb2RlIHsKICBNQUNWTEFOX01PREVfUFJJVkFURSA9IDEsCiAgTUFDVkxBTl9NT0RFX1ZFUEEgPSAyLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBNQUNWTEFOX01PREVfQlJJREdFID0gNCwKIH07Ci0KIGVudW0gewogIElGTEFfVkZfSU5GT19VTlNQRUMsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIElGTEFfVkZfSU5GTywKICBfX0lGTEFfVkZfSU5GT19NQVgsCiB9OwotCiAjZGVmaW5lIElGTEFfVkZfSU5GT19NQVggKF9fSUZMQV9WRl9JTkZPX01BWCAtIDEpCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBlbnVtIHsKICBJRkxBX1ZGX1VOU1BFQywKICBJRkxBX1ZGX01BQywKICBJRkxBX1ZGX1ZMQU4sCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIElGTEFfVkZfVFhfUkFURSwKICBfX0lGTEFfVkZfTUFYLAogfTsKLQogI2RlZmluZSBJRkxBX1ZGX01BWCAoX19JRkxBX1ZGX01BWCAtIDEpCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgaWZsYV92Zl9tYWMgewogIF9fdTMyIHZmOwogIF9fdTggbWFjWzMyXTsKIH07Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgaWZsYV92Zl92bGFuIHsKICBfX3UzMiB2ZjsKICBfX3UzMiB2bGFuOwogIF9fdTMyIHFvczsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwotCiBzdHJ1Y3QgaWZsYV92Zl90eF9yYXRlIHsKICBfX3UzMiB2ZjsKICBfX3UzMiByYXRlOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07Ci0KIHN0cnVjdCBpZmxhX3ZmX2luZm8gewogIF9fdTMyIHZmOwogIF9fdTggbWFjWzMyXTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgdmxhbjsKICBfX3UzMiBxb3M7CiAgX191MzIgdHhfcmF0ZTsKIH07Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBlbnVtIHsKICBJRkxBX1ZGX1BPUlRfVU5TUEVDLAogIElGTEFfVkZfUE9SVCwKICBfX0lGTEFfVkZfUE9SVF9NQVgsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKLQogI2RlZmluZSBJRkxBX1ZGX1BPUlRfTUFYIChfX0lGTEFfVkZfUE9SVF9NQVggLSAxKQotCiBlbnVtIHsKICBJRkxBX1BPUlRfVU5TUEVDLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBJRkxBX1BPUlRfVkYsCiAgSUZMQV9QT1JUX1BST0ZJTEUsCiAgSUZMQV9QT1JUX1ZTSV9UWVBFLAogIElGTEFfUE9SVF9JTlNUQU5DRV9VVUlELAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBJRkxBX1BPUlRfSE9TVF9VVUlELAogIElGTEFfUE9SVF9SRVFVRVNULAogIElGTEFfUE9SVF9SRVNQT05TRSwKICBfX0lGTEFfUE9SVF9NQVgsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKLQogI2RlZmluZSBJRkxBX1BPUlRfTUFYIChfX0lGTEFfUE9SVF9NQVggLSAxKQotCiAjZGVmaW5lIFBPUlRfUFJPRklMRV9NQVggNDAKICNkZWZpbmUgUE9SVF9VVUlEX01BWCAxNgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUE9SVF9TRUxGX1ZGIC0xCi0KIGVudW0gewogIFBPUlRfUkVRVUVTVF9QUkVBU1NPQ0lBVEUgPSAwLAogIFBPUlRfUkVRVUVTVF9QUkVBU1NPQ0lBVEVfUlIsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFBPUlRfUkVRVUVTVF9BU1NPQ0lBVEUsCiAgUE9SVF9SRVFVRVNUX0RJU0FTU09DSUFURSwKIH07Ci0KIGVudW0geworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBQT1JUX1ZEUF9SRVNQT05TRV9TVUNDRVNTID0gMCwKICBQT1JUX1ZEUF9SRVNQT05TRV9JTlZBTElEX0ZPUk1BVCwKICBQT1JUX1ZEUF9SRVNQT05TRV9JTlNVRkZJQ0lFTlRfUkVTT1VSQ0VTLAogIFBPUlRfVkRQX1JFU1BPTlNFX1VOVVNFRF9WVElELAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBQT1JUX1ZEUF9SRVNQT05TRV9WVElEX1ZJT0xBVElPTiwKICBQT1JUX1ZEUF9SRVNQT05TRV9WVElEX1ZFUlNJT05fVklPQUxUSU9OLAogIFBPUlRfVkRQX1JFU1BPTlNFX09VVF9PRl9TWU5DLAotCiAgUE9SVF9QUk9GSUxFX1JFU1BPTlNFX1NVQ0NFU1MgPSAweDEwMCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgUE9SVF9QUk9GSUxFX1JFU1BPTlNFX0lOUFJPR1JFU1MsCiAgUE9SVF9QUk9GSUxFX1JFU1BPTlNFX0lOVkFMSUQsCiAgUE9SVF9QUk9GSUxFX1JFU1BPTlNFX0JBRFNUQVRFLAogIFBPUlRfUFJPRklMRV9SRVNQT05TRV9JTlNVRkZJQ0lFTlRfUkVTT1VSQ0VTLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBQT1JUX1BST0ZJTEVfUkVTUE9OU0VfRVJST1IsCiB9OwotCiBzdHJ1Y3QgaWZsYV9wb3J0X3ZzaSB7CiAgX191OCB2c2lfbWdyX2lkOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IHZzaV90eXBlX2lkWzNdOwogIF9fdTggdnNpX3R5cGVfdmVyc2lvbjsKICBfX3U4IHBhZFszXTsKIH07Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZW5kaWYKLQpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2lmX3BhY2tldC5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2lmX3BhY2tldC5oCmluZGV4IDFhYTNiZWEuLmM1MjhjZGYgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9pZl9wYWNrZXQuaAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvaWZfcGFja2V0LmgKQEAgLTcsOTAgKzcsMTAyIEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfX0xJTlVYX0lGX1BBQ0tFVF9ICiAjZGVmaW5lIF9fTElOVVhfSUZfUEFDS0VUX0gKLQogc3RydWN0IHNvY2thZGRyX3BrdAogeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBzaG9ydCBzcGt0X2ZhbWlseTsKICB1bnNpZ25lZCBjaGFyIHNwa3RfZGV2aWNlWzE0XTsKICB1bnNpZ25lZCBzaG9ydCBzcGt0X3Byb3RvY29sOwogfTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBzb2NrYWRkcl9sbAogewogIHVuc2lnbmVkIHNob3J0IHNsbF9mYW1pbHk7CiAgdW5zaWduZWQgc2hvcnQgc2xsX3Byb3RvY29sOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBpbnQgc2xsX2lmaW5kZXg7CiAgdW5zaWduZWQgc2hvcnQgc2xsX2hhdHlwZTsKICB1bnNpZ25lZCBjaGFyIHNsbF9wa3R0eXBlOwogIHVuc2lnbmVkIGNoYXIgc2xsX2hhbGVuOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBjaGFyIHNsbF9hZGRyWzhdOwogfTsKLQotI2RlZmluZSBQQUNLRVRfSE9TVCAwICAKLSNkZWZpbmUgUEFDS0VUX0JST0FEQ0FTVCAxICAKLSNkZWZpbmUgUEFDS0VUX01VTFRJQ0FTVCAyICAKLSNkZWZpbmUgUEFDS0VUX09USEVSSE9TVCAzICAKLSNkZWZpbmUgUEFDS0VUX09VVEdPSU5HIDQgIAotCi0jZGVmaW5lIFBBQ0tFVF9MT09QQkFDSyA1ICAKLSNkZWZpbmUgUEFDS0VUX0ZBU1RST1VURSA2ICAKLQorI2RlZmluZSBQQUNLRVRfSE9TVCAwCisjZGVmaW5lIFBBQ0tFVF9CUk9BRENBU1QgMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgUEFDS0VUX01VTFRJQ0FTVCAyCisjZGVmaW5lIFBBQ0tFVF9PVEhFUkhPU1QgMworI2RlZmluZSBQQUNLRVRfT1VUR09JTkcgNAorI2RlZmluZSBQQUNLRVRfTE9PUEJBQ0sgNQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgUEFDS0VUX0ZBU1RST1VURSA2CiAjZGVmaW5lIFBBQ0tFVF9BRERfTUVNQkVSU0hJUCAxCiAjZGVmaW5lIFBBQ0tFVF9EUk9QX01FTUJFUlNISVAgMgogI2RlZmluZSBQQUNLRVRfUkVDVl9PVVRQVVQgMwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQUNLRVRfUlhfUklORyA1CiAjZGVmaW5lIFBBQ0tFVF9TVEFUSVNUSUNTIDYKICNkZWZpbmUgUEFDS0VUX0NPUFlfVEhSRVNIIDcKLQogc3RydWN0IHRwYWNrZXRfc3RhdHMKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB7CiAgdW5zaWduZWQgaW50IHRwX3BhY2tldHM7CiAgdW5zaWduZWQgaW50IHRwX2Ryb3BzOwogfTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCB0cGFja2V0X2hkcgogewogIHVuc2lnbmVkIGxvbmcgdHBfc3RhdHVzOwogI2RlZmluZSBUUF9TVEFUVVNfS0VSTkVMIDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFRQX1NUQVRVU19VU0VSIDEKICNkZWZpbmUgVFBfU1RBVFVTX0NPUFkgMgogI2RlZmluZSBUUF9TVEFUVVNfTE9TSU5HIDQKICNkZWZpbmUgVFBfU1RBVFVTX0NTVU1OT1RSRUFEWSA4CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGludCB0cF9sZW47CiAgdW5zaWduZWQgaW50IHRwX3NuYXBsZW47CiAgdW5zaWduZWQgc2hvcnQgdHBfbWFjOwogIHVuc2lnbmVkIHNob3J0IHRwX25ldDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgaW50IHRwX3NlYzsKICB1bnNpZ25lZCBpbnQgdHBfdXNlYzsKIH07Ci0KICNkZWZpbmUgVFBBQ0tFVF9BTElHTk1FTlQgMTYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFRQQUNLRVRfQUxJR04oeCkgKCgoeCkrVFBBQ0tFVF9BTElHTk1FTlQtMSkmfihUUEFDS0VUX0FMSUdOTUVOVC0xKSkKICNkZWZpbmUgVFBBQ0tFVF9IRFJMRU4gKFRQQUNLRVRfQUxJR04oc2l6ZW9mKHN0cnVjdCB0cGFja2V0X2hkcikpICsgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9sbCkpCi0KIHN0cnVjdCB0cGFja2V0X3JlcQogeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBpbnQgdHBfYmxvY2tfc2l6ZTsKICB1bnNpZ25lZCBpbnQgdHBfYmxvY2tfbnI7CiAgdW5zaWduZWQgaW50IHRwX2ZyYW1lX3NpemU7CiAgdW5zaWduZWQgaW50IHRwX2ZyYW1lX25yOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07Ci0KIHN0cnVjdCBwYWNrZXRfbXJlcQogewogIGludCBtcl9pZmluZGV4OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBzaG9ydCBtcl90eXBlOwogIHVuc2lnbmVkIHNob3J0IG1yX2FsZW47CiAgdW5zaWduZWQgY2hhciBtcl9hZGRyZXNzWzhdOwogfTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUEFDS0VUX01SX01VTFRJQ0FTVCAwCiAjZGVmaW5lIFBBQ0tFVF9NUl9QUk9NSVNDIDEKICNkZWZpbmUgUEFDS0VUX01SX0FMTE1VTFRJIDIKLQogI2VuZGlmCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2lmX3BwcC5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2lmX3BwcC5oCmluZGV4IDlmMzVjOTcuLjIwNjI3YzYgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9pZl9wcHAuaAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvaWZfcHBwLmgKQEAgLTcsMTEwICs3LDEyNyBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX0lGX1BQUF9IXwogI2RlZmluZSBfSUZfUFBQX0hfCi0KICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgotCi0jZGVmaW5lIFBQUF9NVFUgMTUwMCAgCi0jZGVmaW5lIFBQUF9NQVhNUlUgNjUwMDAgIAotI2RlZmluZSBQUk9UT19JUFggMHgwMDJiICAKLSNkZWZpbmUgUFJPVE9fRE5BX1JUIDB4MDAyNyAgCi0KLSNkZWZpbmUgU0NfQ09NUF9QUk9UIDB4MDAwMDAwMDEgIAotI2RlZmluZSBTQ19DT01QX0FDIDB4MDAwMDAwMDIgIAotI2RlZmluZSBTQ19DT01QX1RDUCAweDAwMDAwMDA0ICAKLSNkZWZpbmUgU0NfTk9fVENQX0NDSUQgMHgwMDAwMDAwOCAgCi0jZGVmaW5lIFNDX1JFSl9DT01QX0FDIDB4MDAwMDAwMTAgIAotI2RlZmluZSBTQ19SRUpfQ09NUF9UQ1AgMHgwMDAwMDAyMCAgCi0jZGVmaW5lIFNDX0NDUF9PUEVOIDB4MDAwMDAwNDAgIAotI2RlZmluZSBTQ19DQ1BfVVAgMHgwMDAwMDA4MCAgCi0jZGVmaW5lIFNDX0VOQUJMRV9JUCAweDAwMDAwMTAwICAKLSNkZWZpbmUgU0NfTE9PUF9UUkFGRklDIDB4MDAwMDAyMDAgIAotI2RlZmluZSBTQ19NVUxUSUxJTksgMHgwMDAwMDQwMCAgCi0jZGVmaW5lIFNDX01QX1NIT1JUU0VRIDB4MDAwMDA4MDAgIAotI2RlZmluZSBTQ19DT01QX1JVTiAweDAwMDAxMDAwICAKLSNkZWZpbmUgU0NfREVDT01QX1JVTiAweDAwMDAyMDAwICAKLSNkZWZpbmUgU0NfTVBfWFNIT1JUU0VRIDB4MDAwMDQwMDAgIAotI2RlZmluZSBTQ19ERUJVRyAweDAwMDEwMDAwICAKLSNkZWZpbmUgU0NfTE9HX0lOUEtUIDB4MDAwMjAwMDAgIAotI2RlZmluZSBTQ19MT0dfT1VUUEtUIDB4MDAwNDAwMDAgIAotI2RlZmluZSBTQ19MT0dfUkFXSU4gMHgwMDA4MDAwMCAgCi0jZGVmaW5lIFNDX0xPR19GTFVTSCAweDAwMTAwMDAwICAKLSNkZWZpbmUgU0NfU1lOQyAweDAwMjAwMDAwICAKLSNkZWZpbmUgU0NfTVVTVF9DT01QIDB4MDA0MDAwMDAgIAotI2RlZmluZSBTQ19NQVNLIDB4MGY2MDBmZmYgIAotCi0jZGVmaW5lIFNDX1hNSVRfQlVTWSAweDEwMDAwMDAwICAKLSNkZWZpbmUgU0NfUkNWX09ERFAgMHgwODAwMDAwMCAgCi0jZGVmaW5lIFNDX1JDVl9FVk5QIDB4MDQwMDAwMDAgIAotI2RlZmluZSBTQ19SQ1ZfQjdfMSAweDAyMDAwMDAwICAKLSNkZWZpbmUgU0NfUkNWX0I3XzAgMHgwMTAwMDAwMCAgCi0jZGVmaW5lIFNDX0RDX0ZFUlJPUiAweDAwODAwMDAwICAKLSNkZWZpbmUgU0NfRENfRVJST1IgMHgwMDQwMDAwMCAgCi0KKyNkZWZpbmUgUFBQX01UVSAxNTAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBQUFBfTUFYTVJVIDY1MDAwCisjZGVmaW5lIFBST1RPX0lQWCAweDAwMmIKKyNkZWZpbmUgUFJPVE9fRE5BX1JUIDB4MDAyNworI2RlZmluZSBTQ19DT01QX1BST1QgMHgwMDAwMDAwMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgU0NfQ09NUF9BQyAweDAwMDAwMDAyCisjZGVmaW5lIFNDX0NPTVBfVENQIDB4MDAwMDAwMDQKKyNkZWZpbmUgU0NfTk9fVENQX0NDSUQgMHgwMDAwMDAwOAorI2RlZmluZSBTQ19SRUpfQ09NUF9BQyAweDAwMDAwMDEwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBTQ19SRUpfQ09NUF9UQ1AgMHgwMDAwMDAyMAorI2RlZmluZSBTQ19DQ1BfT1BFTiAweDAwMDAwMDQwCisjZGVmaW5lIFNDX0NDUF9VUCAweDAwMDAwMDgwCisjZGVmaW5lIFNDX0VOQUJMRV9JUCAweDAwMDAwMTAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBTQ19MT09QX1RSQUZGSUMgMHgwMDAwMDIwMAorI2RlZmluZSBTQ19NVUxUSUxJTksgMHgwMDAwMDQwMAorI2RlZmluZSBTQ19NUF9TSE9SVFNFUSAweDAwMDAwODAwCisjZGVmaW5lIFNDX0NPTVBfUlVOIDB4MDAwMDEwMDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFNDX0RFQ09NUF9SVU4gMHgwMDAwMjAwMAorI2RlZmluZSBTQ19NUF9YU0hPUlRTRVEgMHgwMDAwNDAwMAorI2RlZmluZSBTQ19ERUJVRyAweDAwMDEwMDAwCisjZGVmaW5lIFNDX0xPR19JTlBLVCAweDAwMDIwMDAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBTQ19MT0dfT1VUUEtUIDB4MDAwNDAwMDAKKyNkZWZpbmUgU0NfTE9HX1JBV0lOIDB4MDAwODAwMDAKKyNkZWZpbmUgU0NfTE9HX0ZMVVNIIDB4MDAxMDAwMDAKKyNkZWZpbmUgU0NfU1lOQyAweDAwMjAwMDAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBTQ19NVVNUX0NPTVAgMHgwMDQwMDAwMAorI2RlZmluZSBTQ19NQVNLIDB4MGY2MDBmZmYKKyNkZWZpbmUgU0NfWE1JVF9CVVNZIDB4MTAwMDAwMDAKKyNkZWZpbmUgU0NfUkNWX09ERFAgMHgwODAwMDAwMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgU0NfUkNWX0VWTlAgMHgwNDAwMDAwMAorI2RlZmluZSBTQ19SQ1ZfQjdfMSAweDAyMDAwMDAwCisjZGVmaW5lIFNDX1JDVl9CN18wIDB4MDEwMDAwMDAKKyNkZWZpbmUgU0NfRENfRkVSUk9SIDB4MDA4MDAwMDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFNDX0RDX0VSUk9SIDB4MDA0MDAwMDAKIHN0cnVjdCBucGlvY3RsIHsKICBpbnQgcHJvdG9jb2w7CiAgZW51bSBOUG1vZGUgbW9kZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwotCiBzdHJ1Y3QgcHBwX29wdGlvbl9kYXRhIHsKICBfX3U4IF9fdXNlciAqcHRyOwogIF9fdTMyIGxlbmd0aDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgaW50IHRyYW5zbWl0OwogfTsKLQogc3RydWN0IGlmcHBwc3RhdHNyZXEgewogIHN0cnVjdCBpZnJlcSBiOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgcHBwX3N0YXRzIHN0YXRzOwogfTsKLQogc3RydWN0IGlmcHBwY3N0YXRzcmVxIHsKICBzdHJ1Y3QgaWZyZXEgYjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IHBwcF9jb21wX3N0YXRzIHN0YXRzOwogfTsKLQogI2RlZmluZSBpZnJfX25hbWUgYi5pZnJfaWZybi5pZnJuX25hbWUKICNkZWZpbmUgc3RhdHNfcHRyIGIuaWZyX2lmcnUuaWZydV9kYXRhCi0KLSNkZWZpbmUgUFBQSU9DR0ZMQUdTIF9JT1IoJ3QnLCA5MCwgaW50KSAgCi0jZGVmaW5lIFBQUElPQ1NGTEFHUyBfSU9XKCd0JywgODksIGludCkgIAotI2RlZmluZSBQUFBJT0NHQVNZTkNNQVAgX0lPUigndCcsIDg4LCBpbnQpICAKLSNkZWZpbmUgUFBQSU9DU0FTWU5DTUFQIF9JT1coJ3QnLCA4NywgaW50KSAgCi0jZGVmaW5lIFBQUElPQ0dVTklUIF9JT1IoJ3QnLCA4NiwgaW50KSAgCi0jZGVmaW5lIFBQUElPQ0dSQVNZTkNNQVAgX0lPUigndCcsIDg1LCBpbnQpICAKLSNkZWZpbmUgUFBQSU9DU1JBU1lOQ01BUCBfSU9XKCd0JywgODQsIGludCkgIAotI2RlZmluZSBQUFBJT0NHTVJVIF9JT1IoJ3QnLCA4MywgaW50KSAgCi0jZGVmaW5lIFBQUElPQ1NNUlUgX0lPVygndCcsIDgyLCBpbnQpICAKLSNkZWZpbmUgUFBQSU9DU01BWENJRCBfSU9XKCd0JywgODEsIGludCkgIAotI2RlZmluZSBQUFBJT0NHWEFTWU5DTUFQIF9JT1IoJ3QnLCA4MCwgZXh0X2FjY20pICAKLSNkZWZpbmUgUFBQSU9DU1hBU1lOQ01BUCBfSU9XKCd0JywgNzksIGV4dF9hY2NtKSAgCi0jZGVmaW5lIFBQUElPQ1hGRVJVTklUIF9JTygndCcsIDc4KSAgCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBQUFBJT0NHRkxBR1MgX0lPUigndCcsIDkwLCBpbnQpCisjZGVmaW5lIFBQUElPQ1NGTEFHUyBfSU9XKCd0JywgODksIGludCkKKyNkZWZpbmUgUFBQSU9DR0FTWU5DTUFQIF9JT1IoJ3QnLCA4OCwgaW50KQorI2RlZmluZSBQUFBJT0NTQVNZTkNNQVAgX0lPVygndCcsIDg3LCBpbnQpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBQUFBJT0NHVU5JVCBfSU9SKCd0JywgODYsIGludCkKKyNkZWZpbmUgUFBQSU9DR1JBU1lOQ01BUCBfSU9SKCd0JywgODUsIGludCkKKyNkZWZpbmUgUFBQSU9DU1JBU1lOQ01BUCBfSU9XKCd0JywgODQsIGludCkKKyNkZWZpbmUgUFBQSU9DR01SVSBfSU9SKCd0JywgODMsIGludCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFBQUElPQ1NNUlUgX0lPVygndCcsIDgyLCBpbnQpCisjZGVmaW5lIFBQUElPQ1NNQVhDSUQgX0lPVygndCcsIDgxLCBpbnQpCisjZGVmaW5lIFBQUElPQ0dYQVNZTkNNQVAgX0lPUigndCcsIDgwLCBleHRfYWNjbSkKKyNkZWZpbmUgUFBQSU9DU1hBU1lOQ01BUCBfSU9XKCd0JywgNzksIGV4dF9hY2NtKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgUFBQSU9DWEZFUlVOSVQgX0lPKCd0JywgNzgpCiAjZGVmaW5lIFBQUElPQ1NDT01QUkVTUyBfSU9XKCd0JywgNzcsIHN0cnVjdCBwcHBfb3B0aW9uX2RhdGEpCi0jZGVmaW5lIFBQUElPQ0dOUE1PREUgX0lPV1IoJ3QnLCA3Niwgc3RydWN0IG5waW9jdGwpICAKLSNkZWZpbmUgUFBQSU9DU05QTU9ERSBfSU9XKCd0JywgNzUsIHN0cnVjdCBucGlvY3RsKSAgCi0jZGVmaW5lIFBQUElPQ1NQQVNTIF9JT1coJ3QnLCA3MSwgc3RydWN0IHNvY2tfZnByb2cpICAKLSNkZWZpbmUgUFBQSU9DU0FDVElWRSBfSU9XKCd0JywgNzAsIHN0cnVjdCBzb2NrX2Zwcm9nKSAgCi0jZGVmaW5lIFBQUElPQ0dERUJVRyBfSU9SKCd0JywgNjUsIGludCkgIAotI2RlZmluZSBQUFBJT0NTREVCVUcgX0lPVygndCcsIDY0LCBpbnQpICAKLSNkZWZpbmUgUFBQSU9DR0lETEUgX0lPUigndCcsIDYzLCBzdHJ1Y3QgcHBwX2lkbGUpICAKLSNkZWZpbmUgUFBQSU9DTkVXVU5JVCBfSU9XUigndCcsIDYyLCBpbnQpICAKLSNkZWZpbmUgUFBQSU9DQVRUQUNIIF9JT1coJ3QnLCA2MSwgaW50KSAgCi0jZGVmaW5lIFBQUElPQ0RFVEFDSCBfSU9XKCd0JywgNjAsIGludCkgIAotI2RlZmluZSBQUFBJT0NTTVJSVSBfSU9XKCd0JywgNTksIGludCkgIAotI2RlZmluZSBQUFBJT0NDT05ORUNUIF9JT1coJ3QnLCA1OCwgaW50KSAgCi0jZGVmaW5lIFBQUElPQ0RJU0NPTk4gX0lPKCd0JywgNTcpICAKLSNkZWZpbmUgUFBQSU9DQVRUQ0hBTiBfSU9XKCd0JywgNTYsIGludCkgIAotI2RlZmluZSBQUFBJT0NHQ0hBTiBfSU9SKCd0JywgNTUsIGludCkgIAotCisjZGVmaW5lIFBQUElPQ0dOUE1PREUgX0lPV1IoJ3QnLCA3Niwgc3RydWN0IG5waW9jdGwpCisjZGVmaW5lIFBQUElPQ1NOUE1PREUgX0lPVygndCcsIDc1LCBzdHJ1Y3QgbnBpb2N0bCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFBQUElPQ1NQQVNTIF9JT1coJ3QnLCA3MSwgc3RydWN0IHNvY2tfZnByb2cpCisjZGVmaW5lIFBQUElPQ1NBQ1RJVkUgX0lPVygndCcsIDcwLCBzdHJ1Y3Qgc29ja19mcHJvZykKKyNkZWZpbmUgUFBQSU9DR0RFQlVHIF9JT1IoJ3QnLCA2NSwgaW50KQorI2RlZmluZSBQUFBJT0NTREVCVUcgX0lPVygndCcsIDY0LCBpbnQpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBQUFBJT0NHSURMRSBfSU9SKCd0JywgNjMsIHN0cnVjdCBwcHBfaWRsZSkKKyNkZWZpbmUgUFBQSU9DTkVXVU5JVCBfSU9XUigndCcsIDYyLCBpbnQpCisjZGVmaW5lIFBQUElPQ0FUVEFDSCBfSU9XKCd0JywgNjEsIGludCkKKyNkZWZpbmUgUFBQSU9DREVUQUNIIF9JT1coJ3QnLCA2MCwgaW50KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgUFBQSU9DU01SUlUgX0lPVygndCcsIDU5LCBpbnQpCisjZGVmaW5lIFBQUElPQ0NPTk5FQ1QgX0lPVygndCcsIDU4LCBpbnQpCisjZGVmaW5lIFBQUElPQ0RJU0NPTk4gX0lPKCd0JywgNTcpCisjZGVmaW5lIFBQUElPQ0FUVENIQU4gX0lPVygndCcsIDU2LCBpbnQpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBQUFBJT0NHQ0hBTiBfSU9SKCd0JywgNTUsIGludCkKICNkZWZpbmUgU0lPQ0dQUFBTVEFUUyAoU0lPQ0RFVlBSSVZBVEUgKyAwKQotI2RlZmluZSBTSU9DR1BQUFZFUiAoU0lPQ0RFVlBSSVZBVEUgKyAxKSAgCisjZGVmaW5lIFNJT0NHUFBQVkVSIChTSU9DREVWUFJJVkFURSArIDEpCiAjZGVmaW5lIFNJT0NHUFBQQ1NUQVRTIChTSU9DREVWUFJJVkFURSArIDIpCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjaWZuZGVmIGlmcl9tdHUKICNkZWZpbmUgaWZyX210dSBpZnJfaWZydS5pZnJ1X21ldHJpYwogI2VuZGlmCi0KICNlbmRpZgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9pZl9wcHBveC5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2lmX3BwcG94LmgKaW5kZXggNDdlZDIyZS4uMjY1MzRkNyAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2lmX3BwcG94LmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2lmX3BwcG94LmgKQEAgLTQyLDggKzQyLDggQEAKICBzdHJ1Y3QgaW5fYWRkciBzaW5fYWRkcjsKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwotI2RlZmluZSBQWF9QUk9UT19PRSAwICAKLSNkZWZpbmUgUFhfUFJPVE9fT0wyVFAgMSAgCisjZGVmaW5lIFBYX1BST1RPX09FIDAKKyNkZWZpbmUgUFhfUFJPVE9fT0wyVFAgMQogI2RlZmluZSBQWF9QUk9UT19QUFRQIDIKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBYX1BST1RPX09MQUMgMwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2lmX3RyLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvaWZfdHIuaAppbmRleCA3ZDYzMTlhLi40YjE2YzAyIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvaWZfdHIuaAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvaWZfdHIuaApAQCAtNyw3MCArNyw4MiBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX0xJTlVYX0lGX1RSX0gKICNkZWZpbmUgX0xJTlVYX0lGX1RSX0gKLQotI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4gIAotCi0jZGVmaW5lIFRSX0FMRU4gNiAgCisjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgorI2RlZmluZSBUUl9BTEVOIDYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFRSX0hMRU4gKHNpemVvZihzdHJ1Y3QgdHJoX2hkcikrc2l6ZW9mKHN0cnVjdCB0cmxsYykpCiAjZGVmaW5lIEFDIDB4MTAKICNkZWZpbmUgTExDX0ZSQU1FIDB4NDAKLQogI2RlZmluZSBFWFRFTkRFRF9TQVAgMHhBQQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVUlfQ01EIDB4MDMKLQogc3RydWN0IHRyaF9oZHIgewogIF9fdTggYWM7CiAgX191OCBmYzsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191OCBkYWRkcltUUl9BTEVOXTsKICBfX3U4IHNhZGRyW1RSX0FMRU5dOwogIF9fYmUxNiByY2Y7CiAgX19iZTE2IHJzZWdbOF07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKLQogc3RydWN0IHRybGxjIHsKICBfX3U4IGRzYXA7CiAgX191OCBzc2FwOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IGxsYzsKICBfX3U4IHByb3RpZFszXTsKICBfX2JlMTYgZXRoZXJ0eXBlOwogfTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCB0cl9zdGF0aXN0aWNzIHsKICB1bnNpZ25lZCBsb25nIHJ4X3BhY2tldHM7CiAgdW5zaWduZWQgbG9uZyB0eF9wYWNrZXRzOwogIHVuc2lnbmVkIGxvbmcgcnhfYnl0ZXM7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGxvbmcgdHhfYnl0ZXM7CiAgdW5zaWduZWQgbG9uZyByeF9lcnJvcnM7CiAgdW5zaWduZWQgbG9uZyB0eF9lcnJvcnM7CiAgdW5zaWduZWQgbG9uZyByeF9kcm9wcGVkOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBsb25nIHR4X2Ryb3BwZWQ7CiAgdW5zaWduZWQgbG9uZyBtdWx0aWNhc3Q7CiAgdW5zaWduZWQgbG9uZyB0cmFuc21pdF9jb2xsaXNpb247Ci0KICB1bnNpZ25lZCBsb25nIGxpbmVfZXJyb3JzOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBsb25nIGludGVybmFsX2Vycm9yczsKICB1bnNpZ25lZCBsb25nIGJ1cnN0X2Vycm9yczsKICB1bnNpZ25lZCBsb25nIEFfQ19lcnJvcnM7CiAgdW5zaWduZWQgbG9uZyBhYm9ydF9kZWxpbWl0ZXJzOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBsb25nIGxvc3RfZnJhbWVzOwogIHVuc2lnbmVkIGxvbmcgcmVjdl9jb25nZXN0X2NvdW50OwogIHVuc2lnbmVkIGxvbmcgZnJhbWVfY29waWVkX2Vycm9yczsKICB1bnNpZ25lZCBsb25nIGZyZXF1ZW5jeV9lcnJvcnM7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGxvbmcgdG9rZW5fZXJyb3JzOwogIHVuc2lnbmVkIGxvbmcgZHVtbXkxOwogfTsKLQogI2RlZmluZSBUUl9SSUkgMHg4MAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVFJfUkNGX0RJUl9CSVQgMHg4MAogI2RlZmluZSBUUl9SQ0ZfTEVOX01BU0sgMHgxZjAwCi0jZGVmaW5lIFRSX1JDRl9CUk9BRENBU1QgMHg4MDAwICAKLSNkZWZpbmUgVFJfUkNGX0xJTUlURURfQlJPQURDQVNUIDB4QzAwMCAgCisjZGVmaW5lIFRSX1JDRl9CUk9BRENBU1QgMHg4MDAwCisjZGVmaW5lIFRSX1JDRl9MSU1JVEVEX0JST0FEQ0FTVCAweEMwMDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFRSX1JDRl9GUkFNRTJLIDB4MjAKICNkZWZpbmUgVFJfUkNGX0JST0FEQ0FTVF9NQVNLIDB4QzAwMAogI2RlZmluZSBUUl9NQVhSSUZMRU4gMTgKLQogI2VuZGlmCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2lmX3R1bi5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2lmX3R1bi5oCmluZGV4IDllZDQ5ZjEuLjNiNTQ4MzMgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9pZl90dW4uaAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvaWZfdHVuLmgKQEAgLTcsNzEgKzcsODAgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9fSUZfVFVOX0gKICNkZWZpbmUgX19JRl9UVU5fSAotCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9pZl9ldGhlci5oPgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNpbmNsdWRlIDxsaW51eC9maWx0ZXIuaD4KLQogI2RlZmluZSBUVU5fUkVBRFFfU0laRSA1MDAKLQotI2RlZmluZSBUVU5fVFVOX0RFViAweDAwMDEgCisjZGVmaW5lIFRVTl9UVU5fREVWIDB4MDAwMQogI2RlZmluZSBUVU5fVEFQX0RFViAweDAwMDIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFRVTl9UWVBFX01BU0sgMHgwMDBmCi0KICNkZWZpbmUgVFVOX0ZBU1lOQyAweDAwMTAKICNkZWZpbmUgVFVOX05PQ0hFQ0tTVU0gMHgwMDIwCiAjZGVmaW5lIFRVTl9OT19QSSAweDAwNDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFRVTl9PTkVfUVVFVUUgMHgwMDgwCi0jZGVmaW5lIFRVTl9QRVJTSVNUIDB4MDEwMCAKKyNkZWZpbmUgVFVOX1BFUlNJU1QgMHgwMTAwCiAjZGVmaW5lIFRVTl9WTkVUX0hEUiAweDAyMDAKLQotI2RlZmluZSBUVU5TRVROT0NTVU0gX0lPVygnVCcsIDIwMCwgaW50KSAKLSNkZWZpbmUgVFVOU0VUREVCVUcgX0lPVygnVCcsIDIwMSwgaW50KSAKLSNkZWZpbmUgVFVOU0VUSUZGIF9JT1coJ1QnLCAyMDIsIGludCkgCi0jZGVmaW5lIFRVTlNFVFBFUlNJU1QgX0lPVygnVCcsIDIwMywgaW50KSAKKyNkZWZpbmUgVFVOU0VUTk9DU1VNIF9JT1coJ1QnLCAyMDAsIGludCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRVTlNFVERFQlVHIF9JT1coJ1QnLCAyMDEsIGludCkKKyNkZWZpbmUgVFVOU0VUSUZGIF9JT1coJ1QnLCAyMDIsIGludCkKKyNkZWZpbmUgVFVOU0VUUEVSU0lTVCBfSU9XKCdUJywgMjAzLCBpbnQpCiAjZGVmaW5lIFRVTlNFVE9XTkVSIF9JT1coJ1QnLCAyMDQsIGludCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFRVTlNFVExJTksgX0lPVygnVCcsIDIwNSwgaW50KQogI2RlZmluZSBUVU5TRVRHUk9VUCBfSU9XKCdUJywgMjA2LCBpbnQpCiAjZGVmaW5lIFRVTkdFVEZFQVRVUkVTIF9JT1IoJ1QnLCAyMDcsIHVuc2lnbmVkIGludCkKICNkZWZpbmUgVFVOU0VUT0ZGTE9BRCBfSU9XKCdUJywgMjA4LCB1bnNpZ25lZCBpbnQpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBUVU5TRVRUWEZJTFRFUiBfSU9XKCdUJywgMjA5LCB1bnNpZ25lZCBpbnQpCiAjZGVmaW5lIFRVTkdFVElGRiBfSU9SKCdUJywgMjEwLCB1bnNpZ25lZCBpbnQpCiAjZGVmaW5lIFRVTkdFVFNOREJVRiBfSU9SKCdUJywgMjExLCBpbnQpCiAjZGVmaW5lIFRVTlNFVFNOREJVRiBfSU9XKCdUJywgMjEyLCBpbnQpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBUVU5BVFRBQ0hGSUxURVIgX0lPVygnVCcsIDIxMywgc3RydWN0IHNvY2tfZnByb2cpCiAjZGVmaW5lIFRVTkRFVEFDSEZJTFRFUiBfSU9XKCdUJywgMjE0LCBzdHJ1Y3Qgc29ja19mcHJvZykKICNkZWZpbmUgVFVOR0VUVk5FVEhEUlNaIF9JT1IoJ1QnLCAyMTUsIGludCkKICNkZWZpbmUgVFVOU0VUVk5FVEhEUlNaIF9JT1coJ1QnLCAyMTYsIGludCkKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSUZGX1RVTiAweDAwMDEKICNkZWZpbmUgSUZGX1RBUCAweDAwMDIKICNkZWZpbmUgSUZGX05PX1BJIDB4MTAwMAogI2RlZmluZSBJRkZfT05FX1FVRVVFIDB4MjAwMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSUZGX1ZORVRfSERSIDB4NDAwMAogI2RlZmluZSBJRkZfVFVOX0VYQ0wgMHg4MDAwCi0KLSNkZWZpbmUgVFVOX0ZfQ1NVTSAweDAxICAKLSNkZWZpbmUgVFVOX0ZfVFNPNCAweDAyICAKLSNkZWZpbmUgVFVOX0ZfVFNPNiAweDA0ICAKLSNkZWZpbmUgVFVOX0ZfVFNPX0VDTiAweDA4ICAKLSNkZWZpbmUgVFVOX0ZfVUZPIDB4MTAgIAotCisjZGVmaW5lIFRVTl9GX0NTVU0gMHgwMQorI2RlZmluZSBUVU5fRl9UU080IDB4MDIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRVTl9GX1RTTzYgMHgwNAorI2RlZmluZSBUVU5fRl9UU09fRUNOIDB4MDgKKyNkZWZpbmUgVFVOX0ZfVUZPIDB4MTAKICNkZWZpbmUgVFVOX1BLVF9TVFJJUCAweDAwMDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgdHVuX3BpIHsKICBfX3UxNiBmbGFnczsKICBfX2JlMTYgcHJvdG87CiB9OwotCi0jZGVmaW5lIFRVTl9GTFRfQUxMTVVMVEkgMHgwMDAxICAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRVTl9GTFRfQUxMTVVMVEkgMHgwMDAxCiBzdHJ1Y3QgdHVuX2ZpbHRlciB7CiAgX191MTYgZmxhZ3M7CiAgX191MTYgY291bnQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTggYWRkclswXVtFVEhfQUxFTl07CiB9OwotCiAjZW5kaWYKLQpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2lmX3ZsYW4uaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9pZl92bGFuLmgKaW5kZXggYWIzYjE3NC4uYzYwNGI4MSAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2lmX3ZsYW4uaAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvaWZfdmxhbi5oCkBAIC03LDUzICs3LDYyIEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfTElOVVhfSUZfVkxBTl9IXwogI2RlZmluZSBfTElOVVhfSUZfVkxBTl9IXwotCiBlbnVtIHZsYW5faW9jdGxfY21kcyB7CiAgQUREX1ZMQU5fQ01ELAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBERUxfVkxBTl9DTUQsCiAgU0VUX1ZMQU5fSU5HUkVTU19QUklPUklUWV9DTUQsCiAgU0VUX1ZMQU5fRUdSRVNTX1BSSU9SSVRZX0NNRCwKICBHRVRfVkxBTl9JTkdSRVNTX1BSSU9SSVRZX0NNRCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgR0VUX1ZMQU5fRUdSRVNTX1BSSU9SSVRZX0NNRCwKICBTRVRfVkxBTl9OQU1FX1RZUEVfQ01ELAogIFNFVF9WTEFOX0ZMQUdfQ01ELAogIEdFVF9WTEFOX1JFQUxERVZfTkFNRV9DTUQsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIEdFVF9WTEFOX1ZJRF9DTUQKIH07Ci0KIGVudW0gdmxhbl9mbGFncyB7CiAgVkxBTl9GTEFHX1JFT1JERVJfSERSID0gMHgxLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBWTEFOX0ZMQUdfR1ZSUCA9IDB4MiwKICBWTEFOX0ZMQUdfTE9PU0VfQklORElORyA9IDB4NCwKIH07Ci0KIGVudW0gdmxhbl9uYW1lX3R5cGVzIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVkxBTl9OQU1FX1RZUEVfUExVU19WSUQsCiAgVkxBTl9OQU1FX1RZUEVfUkFXX1BMVVNfVklELAogIFZMQU5fTkFNRV9UWVBFX1BMVVNfVklEX05PX1BBRCwKICBWTEFOX05BTUVfVFlQRV9SQVdfUExVU19WSURfTk9fUEFELAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBWTEFOX05BTUVfVFlQRV9ISUdIRVNUCiB9OwotCiBzdHJ1Y3Qgdmxhbl9pb2N0bF9hcmdzIHsKICBpbnQgY21kOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBjaGFyIGRldmljZTFbMjRdOwotCiAgdW5pb24gewogIGNoYXIgZGV2aWNlMlsyNF07CiAgaW50IFZJRDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgaW50IHNrYl9wcmlvcml0eTsKICB1bnNpZ25lZCBpbnQgbmFtZV90eXBlOwogIHVuc2lnbmVkIGludCBiaW5kX3R5cGU7CiAgdW5zaWduZWQgaW50IGZsYWc7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIH0gdTsKLQogIHNob3J0IHZsYW5fcW9zOwogfTsKLQogI2VuZGlmCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvaW4uaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9pbi5oCmluZGV4IDg5NGUyZGEuLmY5YTljN2YgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9pbi5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9pbi5oCkBAIC03LDIwNSArNywyMTQgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9MSU5VWF9JTl9ICiAjZGVmaW5lIF9MSU5VWF9JTl9ICi0KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NvY2tldC5oPgotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogZW51bSB7CiAgSVBQUk9UT19JUCA9IDAsCiAgSVBQUk9UT19JQ01QID0gMSwKICBJUFBST1RPX0lHTVAgPSAyLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBJUFBST1RPX0lQSVAgPSA0LAogIElQUFJPVE9fVENQID0gNiwKICBJUFBST1RPX0VHUCA9IDgsCiAgSVBQUk9UT19QVVAgPSAxMiwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgSVBQUk9UT19VRFAgPSAxNywKICBJUFBST1RPX0lEUCA9IDIyLAogIElQUFJPVE9fRENDUCA9IDMzLAogIElQUFJPVE9fUlNWUCA9IDQ2LAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBJUFBST1RPX0dSRSA9IDQ3LAotCiAgSVBQUk9UT19JUFY2ID0gNDEsCi0KICBJUFBST1RPX0VTUCA9IDUwLAogIElQUFJPVE9fQUggPSA1MSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgSVBQUk9UT19QSU0gPSAxMDMsCi0KICBJUFBST1RPX0NPTVAgPSAxMDgsCiAgSVBQUk9UT19TQ1RQID0gMTMyLAotCiAgSVBQUk9UT19SQVcgPSAyNTUsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIElQUFJPVE9fTUFYCiB9OwotCiBzdHJ1Y3QgaW5fYWRkciB7CiAgX191MzIgc19hZGRyOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07Ci0KICNkZWZpbmUgSVBfVE9TIDEKICNkZWZpbmUgSVBfVFRMIDIKICNkZWZpbmUgSVBfSERSSU5DTCAzCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJUF9PUFRJT05TIDQKICNkZWZpbmUgSVBfUk9VVEVSX0FMRVJUIDUKICNkZWZpbmUgSVBfUkVDVk9QVFMgNgogI2RlZmluZSBJUF9SRVRPUFRTIDcKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIElQX1BLVElORk8gOAogI2RlZmluZSBJUF9QS1RPUFRJT05TIDkKICNkZWZpbmUgSVBfTVRVX0RJU0NPVkVSIDEwCiAjZGVmaW5lIElQX1JFQ1ZFUlIgMTEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIElQX1JFQ1ZUVEwgMTIKICNkZWZpbmUgSVBfUkVDVlRPUyAxMwogI2RlZmluZSBJUF9NVFUgMTQKICNkZWZpbmUgSVBfRlJFRUJJTkQgMTUKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIElQX0lQU0VDX1BPTElDWSAxNgogI2RlZmluZSBJUF9YRlJNX1BPTElDWSAxNwogI2RlZmluZSBJUF9QQVNTU0VDIDE4Ci0KICNkZWZpbmUgSVBfUkVDVlJFVE9QVFMgSVBfUkVUT1BUUwotCi0jZGVmaW5lIElQX1BNVFVESVNDX0RPTlQgMCAgCi0jZGVmaW5lIElQX1BNVFVESVNDX1dBTlQgMSAgCi0jZGVmaW5lIElQX1BNVFVESVNDX0RPIDIgIAotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBJUF9QTVRVRElTQ19ET05UIDAKKyNkZWZpbmUgSVBfUE1UVURJU0NfV0FOVCAxCisjZGVmaW5lIElQX1BNVFVESVNDX0RPIDIKICNkZWZpbmUgSVBfTVVMVElDQVNUX0lGIDMyCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJUF9NVUxUSUNBU1RfVFRMIDMzCiAjZGVmaW5lIElQX01VTFRJQ0FTVF9MT09QIDM0CiAjZGVmaW5lIElQX0FERF9NRU1CRVJTSElQIDM1CiAjZGVmaW5lIElQX0RST1BfTUVNQkVSU0hJUCAzNgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSVBfVU5CTE9DS19TT1VSQ0UgMzcKICNkZWZpbmUgSVBfQkxPQ0tfU09VUkNFIDM4CiAjZGVmaW5lIElQX0FERF9TT1VSQ0VfTUVNQkVSU0hJUCAzOQogI2RlZmluZSBJUF9EUk9QX1NPVVJDRV9NRU1CRVJTSElQIDQwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJUF9NU0ZJTFRFUiA0MQogI2RlZmluZSBNQ0FTVF9KT0lOX0dST1VQIDQyCiAjZGVmaW5lIE1DQVNUX0JMT0NLX1NPVVJDRSA0MwogI2RlZmluZSBNQ0FTVF9VTkJMT0NLX1NPVVJDRSA0NAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTUNBU1RfTEVBVkVfR1JPVVAgNDUKICNkZWZpbmUgTUNBU1RfSk9JTl9TT1VSQ0VfR1JPVVAgNDYKICNkZWZpbmUgTUNBU1RfTEVBVkVfU09VUkNFX0dST1VQIDQ3CiAjZGVmaW5lIE1DQVNUX01TRklMVEVSIDQ4Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1DQVNUX0VYQ0xVREUgMAogI2RlZmluZSBNQ0FTVF9JTkNMVURFIDEKLQogI2RlZmluZSBJUF9ERUZBVUxUX01VTFRJQ0FTVF9UVEwgMQogI2RlZmluZSBJUF9ERUZBVUxUX01VTFRJQ0FTVF9MT09QIDEKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBpcF9tcmVxCiB7CiAgc3RydWN0IGluX2FkZHIgaW1yX211bHRpYWRkcjsKICBzdHJ1Y3QgaW5fYWRkciBpbXJfaW50ZXJmYWNlOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07Ci0KIHN0cnVjdCBpcF9tcmVxbgogewogIHN0cnVjdCBpbl9hZGRyIGltcl9tdWx0aWFkZHI7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCBpbl9hZGRyIGltcl9hZGRyZXNzOwogIGludCBpbXJfaWZpbmRleDsKIH07Ci0KIHN0cnVjdCBpcF9tcmVxX3NvdXJjZSB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGltcl9tdWx0aWFkZHI7CiAgX191MzIgaW1yX2ludGVyZmFjZTsKICBfX3UzMiBpbXJfc291cmNlYWRkcjsKIH07Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgaXBfbXNmaWx0ZXIgewogIF9fdTMyIGltc2ZfbXVsdGlhZGRyOwogIF9fdTMyIGltc2ZfaW50ZXJmYWNlOwogIF9fdTMyIGltc2ZfZm1vZGU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGltc2ZfbnVtc3JjOwogIF9fdTMyIGltc2Zfc2xpc3RbMV07CiB9OwotCiAjZGVmaW5lIElQX01TRklMVEVSX1NJWkUobnVtc3JjKSAgIChzaXplb2Yoc3RydWN0IGlwX21zZmlsdGVyKSAtIHNpemVvZihfX3UzMikgICArIChudW1zcmMpICogc2l6ZW9mKF9fdTMyKSkKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBncm91cF9yZXEKIHsKICBfX3UzMiBncl9pbnRlcmZhY2U7CiAgc3RydWN0IF9fa2VybmVsX3NvY2thZGRyX3N0b3JhZ2UgZ3JfZ3JvdXA7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKLQogc3RydWN0IGdyb3VwX3NvdXJjZV9yZXEKIHsKICBfX3UzMiBnc3JfaW50ZXJmYWNlOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgX19rZXJuZWxfc29ja2FkZHJfc3RvcmFnZSBnc3JfZ3JvdXA7CiAgc3RydWN0IF9fa2VybmVsX3NvY2thZGRyX3N0b3JhZ2UgZ3NyX3NvdXJjZTsKIH07Ci0KIHN0cnVjdCBncm91cF9maWx0ZXIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB7CiAgX191MzIgZ2ZfaW50ZXJmYWNlOwogIHN0cnVjdCBfX2tlcm5lbF9zb2NrYWRkcl9zdG9yYWdlIGdmX2dyb3VwOwogIF9fdTMyIGdmX2Ztb2RlOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBnZl9udW1zcmM7CiAgc3RydWN0IF9fa2VybmVsX3NvY2thZGRyX3N0b3JhZ2UgZ2Zfc2xpc3RbMV07CiB9OwotCiAjZGVmaW5lIEdST1VQX0ZJTFRFUl9TSVpFKG51bXNyYykgICAoc2l6ZW9mKHN0cnVjdCBncm91cF9maWx0ZXIpIC0gc2l6ZW9mKHN0cnVjdCBfX2tlcm5lbF9zb2NrYWRkcl9zdG9yYWdlKSAgICsgKG51bXNyYykgKiBzaXplb2Yoc3RydWN0IF9fa2VybmVsX3NvY2thZGRyX3N0b3JhZ2UpKQotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IGluX3BrdGluZm8KIHsKICBpbnQgaXBpX2lmaW5kZXg7CiAgc3RydWN0IGluX2FkZHIgaXBpX3NwZWNfZHN0OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgaW5fYWRkciBpcGlfYWRkcjsKIH07Ci0KLSNkZWZpbmUgX19TT0NLX1NJWkVfXyAxNiAgCisjZGVmaW5lIF9fU09DS19TSVpFX18gMTYKIHN0cnVjdCBzb2NrYWRkcl9pbiB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHNhX2ZhbWlseV90IHNpbl9mYW1pbHk7CiAgdW5zaWduZWQgc2hvcnQgaW50IHNpbl9wb3J0OwogIHN0cnVjdCBpbl9hZGRyIHNpbl9hZGRyOwotCiAgdW5zaWduZWQgY2hhciBfX3BhZFtfX1NPQ0tfU0laRV9fIC0gc2l6ZW9mKHNob3J0IGludCkgLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzaXplb2YodW5zaWduZWQgc2hvcnQgaW50KSAtIHNpemVvZihzdHJ1Y3QgaW5fYWRkcildOwogfTsKLSNkZWZpbmUgc2luX3plcm8gX19wYWQgIAotCisjZGVmaW5lIHNpbl96ZXJvIF9fcGFkCiAjZGVmaW5lIElOX0NMQVNTQShhKSAoKCgobG9uZyBpbnQpIChhKSkgJiAweDgwMDAwMDAwKSA9PSAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSU5fQ0xBU1NBX05FVCAweGZmMDAwMDAwCiAjZGVmaW5lIElOX0NMQVNTQV9OU0hJRlQgMjQKICNkZWZpbmUgSU5fQ0xBU1NBX0hPU1QgKDB4ZmZmZmZmZmYgJiB+SU5fQ0xBU1NBX05FVCkKICNkZWZpbmUgSU5fQ0xBU1NBX01BWCAxMjgKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSU5fQ0xBU1NCKGEpICgoKChsb25nIGludCkgKGEpKSAmIDB4YzAwMDAwMDApID09IDB4ODAwMDAwMDApCiAjZGVmaW5lIElOX0NMQVNTQl9ORVQgMHhmZmZmMDAwMAogI2RlZmluZSBJTl9DTEFTU0JfTlNISUZUIDE2CiAjZGVmaW5lIElOX0NMQVNTQl9IT1NUICgweGZmZmZmZmZmICYgfklOX0NMQVNTQl9ORVQpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJTl9DTEFTU0JfTUFYIDY1NTM2Ci0KICNkZWZpbmUgSU5fQ0xBU1NDKGEpICgoKChsb25nIGludCkgKGEpKSAmIDB4ZTAwMDAwMDApID09IDB4YzAwMDAwMDApCiAjZGVmaW5lIElOX0NMQVNTQ19ORVQgMHhmZmZmZmYwMAogI2RlZmluZSBJTl9DTEFTU0NfTlNISUZUIDgKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIElOX0NMQVNTQ19IT1NUICgweGZmZmZmZmZmICYgfklOX0NMQVNTQ19ORVQpCi0KICNkZWZpbmUgSU5fQ0xBU1NEKGEpICgoKChsb25nIGludCkgKGEpKSAmIDB4ZjAwMDAwMDApID09IDB4ZTAwMDAwMDApCiAjZGVmaW5lIElOX01VTFRJQ0FTVChhKSBJTl9DTEFTU0QoYSkKICNkZWZpbmUgSU5fTVVMVElDQVNUX05FVCAweEYwMDAwMDAwCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIElOX0VYUEVSSU1FTlRBTChhKSAoKCgobG9uZyBpbnQpIChhKSkgJiAweGYwMDAwMDAwKSA9PSAweGYwMDAwMDAwKQogI2RlZmluZSBJTl9CQURDTEFTUyhhKSBJTl9FWFBFUklNRU5UQUwoKGEpKQotCiAjZGVmaW5lIElOQUREUl9BTlkgKCh1bnNpZ25lZCBsb25nIGludCkgMHgwMDAwMDAwMCkKLQogI2RlZmluZSBJTkFERFJfQlJPQURDQVNUICgodW5zaWduZWQgbG9uZyBpbnQpIDB4ZmZmZmZmZmYpCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIElOQUREUl9OT05FICgodW5zaWduZWQgbG9uZyBpbnQpIDB4ZmZmZmZmZmYpCi0KICNkZWZpbmUgSU5fTE9PUEJBQ0tORVQgMTI3Ci0KLSNkZWZpbmUgSU5BRERSX0xPT1BCQUNLIDB4N2YwMDAwMDEgIAorI2RlZmluZSBJTkFERFJfTE9PUEJBQ0sgMHg3ZjAwMDAwMQogI2RlZmluZSBJTl9MT09QQkFDSyhhKSAoKCgobG9uZyBpbnQpIChhKSkgJiAweGZmMDAwMDAwKSA9PSAweDdmMDAwMDAwKQotCi0jZGVmaW5lIElOQUREUl9VTlNQRUNfR1JPVVAgMHhlMDAwMDAwMFUgIAotI2RlZmluZSBJTkFERFJfQUxMSE9TVFNfR1JPVVAgMHhlMDAwMDAwMVUgIAotI2RlZmluZSBJTkFERFJfQUxMUlRSU19HUk9VUCAweGUwMDAwMDAyVSAgCi0jZGVmaW5lIElOQUREUl9NQVhfTE9DQUxfR1JPVVAgMHhlMDAwMDBmZlUgIAotCi0jaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPiAKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgSU5BRERSX1VOU1BFQ19HUk9VUCAweGUwMDAwMDAwVQorI2RlZmluZSBJTkFERFJfQUxMSE9TVFNfR1JPVVAgMHhlMDAwMDAwMVUKKyNkZWZpbmUgSU5BRERSX0FMTFJUUlNfR1JPVVAgMHhlMDAwMDAwMlUKKyNkZWZpbmUgSU5BRERSX01BWF9MT0NBTF9HUk9VUCAweGUwMDAwMGZmVQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9pbjYuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9pbjYuaAppbmRleCBkMTQ4ZGZkLi5mNzg1NDE3IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvaW42LmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2luNi5oCkBAIC03LDE2OSArNywxODIgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9MSU5VWF9JTjZfSAogI2RlZmluZSBfTElOVVhfSU42X0gKLQogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0KIHN0cnVjdCBpbjZfYWRkciB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuaW9uIHsKICBfX3U4IHU2X2FkZHI4WzE2XTsKICBfX2JlMTYgdTZfYWRkcjE2WzhdOwogIF9fYmUzMiB1Nl9hZGRyMzJbNF07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIH0gaW42X3U7CiAjZGVmaW5lIHM2X2FkZHIgaW42X3UudTZfYWRkcjgKICNkZWZpbmUgczZfYWRkcjE2IGluNl91LnU2X2FkZHIxNgogI2RlZmluZSBzNl9hZGRyMzIgaW42X3UudTZfYWRkcjMyCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKLQogc3RydWN0IHNvY2thZGRyX2luNiB7CiAgdW5zaWduZWQgc2hvcnQgaW50IHNpbjZfZmFtaWx5OwogIF9fYmUxNiBzaW42X3BvcnQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fYmUzMiBzaW42X2Zsb3dpbmZvOwogIHN0cnVjdCBpbjZfYWRkciBzaW42X2FkZHI7CiAgX191MzIgc2luNl9zY29wZV9pZDsKIH07Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgaXB2Nl9tcmVxIHsKLQogIHN0cnVjdCBpbjZfYWRkciBpcHY2bXJfbXVsdGlhZGRyOwotCiAgaW50IGlwdjZtcl9pZmluZGV4OwogfTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgaXB2Nm1yX2FjYWRkciBpcHY2bXJfbXVsdGlhZGRyCi0KIHN0cnVjdCBpbjZfZmxvd2xhYmVsX3JlcSB7CiAgc3RydWN0IGluNl9hZGRyIGZscl9kc3Q7CiAgX19iZTMyIGZscl9sYWJlbDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191OCBmbHJfYWN0aW9uOwogIF9fdTggZmxyX3NoYXJlOwogIF9fdTE2IGZscl9mbGFnczsKICBfX3UxNiBmbHJfZXhwaXJlczsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MTYgZmxyX2xpbmdlcjsKICBfX3UzMiBfX2Zscl9wYWQ7Ci0KIH07Ci0KICNkZWZpbmUgSVBWNl9GTF9BX0dFVCAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJUFY2X0ZMX0FfUFVUIDEKICNkZWZpbmUgSVBWNl9GTF9BX1JFTkVXIDIKLQogI2RlZmluZSBJUFY2X0ZMX0ZfQ1JFQVRFIDEKICNkZWZpbmUgSVBWNl9GTF9GX0VYQ0wgMgotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJUFY2X0ZMX1NfTk9ORSAwCiAjZGVmaW5lIElQVjZfRkxfU19FWENMIDEKICNkZWZpbmUgSVBWNl9GTF9TX1BST0NFU1MgMgogI2RlZmluZSBJUFY2X0ZMX1NfVVNFUiAzCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJUFY2X0ZMX1NfQU5ZIDI1NQotCiAjZGVmaW5lIElQVjZfRkxPV0lORk9fRkxPV0xBQkVMIDB4MDAwZmZmZmYKICNkZWZpbmUgSVBWNl9GTE9XSU5GT19QUklPUklUWSAweDBmZjAwMDAwCi0KICNkZWZpbmUgSVBWNl9QUklPUklUWV9VTkNIQVJBQ1RFUklaRUQgMHgwMDAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJUFY2X1BSSU9SSVRZX0ZJTExFUiAweDAxMDAKICNkZWZpbmUgSVBWNl9QUklPUklUWV9VTkFUVEVOREVEIDB4MDIwMAogI2RlZmluZSBJUFY2X1BSSU9SSVRZX1JFU0VSVkVEMSAweDAzMDAKICNkZWZpbmUgSVBWNl9QUklPUklUWV9CVUxLIDB4MDQwMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSVBWNl9QUklPUklUWV9SRVNFUlZFRDIgMHgwNTAwCiAjZGVmaW5lIElQVjZfUFJJT1JJVFlfSU5URVJBQ1RJVkUgMHgwNjAwCiAjZGVmaW5lIElQVjZfUFJJT1JJVFlfQ09OVFJPTCAweDA3MDAKICNkZWZpbmUgSVBWNl9QUklPUklUWV84IDB4MDgwMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSVBWNl9QUklPUklUWV85IDB4MDkwMAogI2RlZmluZSBJUFY2X1BSSU9SSVRZXzEwIDB4MGEwMAogI2RlZmluZSBJUFY2X1BSSU9SSVRZXzExIDB4MGIwMAogI2RlZmluZSBJUFY2X1BSSU9SSVRZXzEyIDB4MGMwMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSVBWNl9QUklPUklUWV8xMyAweDBkMDAKICNkZWZpbmUgSVBWNl9QUklPUklUWV8xNCAweDBlMDAKICNkZWZpbmUgSVBWNl9QUklPUklUWV8xNSAweDBmMDAKLQotI2RlZmluZSBJUFBST1RPX0hPUE9QVFMgMCAgCi0jZGVmaW5lIElQUFJPVE9fUk9VVElORyA0MyAgCi0jZGVmaW5lIElQUFJPVE9fRlJBR01FTlQgNDQgIAotI2RlZmluZSBJUFBST1RPX0lDTVBWNiA1OCAgCi0jZGVmaW5lIElQUFJPVE9fTk9ORSA1OSAgCi0jZGVmaW5lIElQUFJPVE9fRFNUT1BUUyA2MCAgCi0jZGVmaW5lIElQUFJPVE9fTUggMTM1ICAKLQorI2RlZmluZSBJUFBST1RPX0hPUE9QVFMgMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgSVBQUk9UT19ST1VUSU5HIDQzCisjZGVmaW5lIElQUFJPVE9fRlJBR01FTlQgNDQKKyNkZWZpbmUgSVBQUk9UT19JQ01QVjYgNTgKKyNkZWZpbmUgSVBQUk9UT19OT05FIDU5CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBJUFBST1RPX0RTVE9QVFMgNjAKKyNkZWZpbmUgSVBQUk9UT19NSCAxMzUKICNkZWZpbmUgSVBWNl9UTFZfUEFEMCAwCiAjZGVmaW5lIElQVjZfVExWX1BBRE4gMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSVBWNl9UTFZfUk9VVEVSQUxFUlQgNQogI2RlZmluZSBJUFY2X1RMVl9KVU1CTyAxOTQKLSNkZWZpbmUgSVBWNl9UTFZfSEFPIDIwMSAgCi0KKyNkZWZpbmUgSVBWNl9UTFZfSEFPIDIwMQogI2RlZmluZSBJUFY2X0FERFJGT1JNIDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIElQVjZfMjI5MlBLVElORk8gMgogI2RlZmluZSBJUFY2XzIyOTJIT1BPUFRTIDMKICNkZWZpbmUgSVBWNl8yMjkyRFNUT1BUUyA0CiAjZGVmaW5lIElQVjZfMjI5MlJUSERSIDUKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIElQVjZfMjI5MlBLVE9QVElPTlMgNgogI2RlZmluZSBJUFY2X0NIRUNLU1VNIDcKICNkZWZpbmUgSVBWNl8yMjkySE9QTElNSVQgOAogI2RlZmluZSBJUFY2X05FWFRIT1AgOQotI2RlZmluZSBJUFY2X0FVVEhIRFIgMTAgIAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgSVBWNl9BVVRISERSIDEwCiAjZGVmaW5lIElQVjZfRkxPV0lORk8gMTEKLQogI2RlZmluZSBJUFY2X1VOSUNBU1RfSE9QUyAxNgogI2RlZmluZSBJUFY2X01VTFRJQ0FTVF9JRiAxNworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSVBWNl9NVUxUSUNBU1RfSE9QUyAxOAogI2RlZmluZSBJUFY2X01VTFRJQ0FTVF9MT09QIDE5CiAjZGVmaW5lIElQVjZfQUREX01FTUJFUlNISVAgMjAKICNkZWZpbmUgSVBWNl9EUk9QX01FTUJFUlNISVAgMjEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIElQVjZfUk9VVEVSX0FMRVJUIDIyCiAjZGVmaW5lIElQVjZfTVRVX0RJU0NPVkVSIDIzCiAjZGVmaW5lIElQVjZfTVRVIDI0CiAjZGVmaW5lIElQVjZfUkVDVkVSUiAyNQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSVBWNl9WNk9OTFkgMjYKICNkZWZpbmUgSVBWNl9KT0lOX0FOWUNBU1QgMjcKICNkZWZpbmUgSVBWNl9MRUFWRV9BTllDQVNUIDI4Ci0KICNkZWZpbmUgSVBWNl9QTVRVRElTQ19ET05UIDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIElQVjZfUE1UVURJU0NfV0FOVCAxCiAjZGVmaW5lIElQVjZfUE1UVURJU0NfRE8gMgogI2RlZmluZSBJUFY2X1BNVFVESVNDX1BST0JFIDMKLQogI2RlZmluZSBJUFY2X0ZMT1dMQUJFTF9NR1IgMzIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIElQVjZfRkxPV0lORk9fU0VORCAzMwotCiAjZGVmaW5lIElQVjZfSVBTRUNfUE9MSUNZIDM0CiAjZGVmaW5lIElQVjZfWEZSTV9QT0xJQ1kgMzUKLQogI2RlZmluZSBJUFY2X1JFQ1ZQS1RJTkZPIDQ5CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJUFY2X1BLVElORk8gNTAKICNkZWZpbmUgSVBWNl9SRUNWSE9QTElNSVQgNTEKICNkZWZpbmUgSVBWNl9IT1BMSU1JVCA1MgogI2RlZmluZSBJUFY2X1JFQ1ZIT1BPUFRTIDUzCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJUFY2X0hPUE9QVFMgNTQKICNkZWZpbmUgSVBWNl9SVEhEUkRTVE9QVFMgNTUKICNkZWZpbmUgSVBWNl9SRUNWUlRIRFIgNTYKICNkZWZpbmUgSVBWNl9SVEhEUiA1NworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSVBWNl9SRUNWRFNUT1BUUyA1OAogI2RlZmluZSBJUFY2X0RTVE9QVFMgNTkKICNkZWZpbmUgSVBWNl9SRUNWUEFUSE1UVSA2MAogI2RlZmluZSBJUFY2X1BBVEhNVFUgNjEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIElQVjZfRE9OVEZSQUcgNjIKLQogI2RlZmluZSBJUFY2X1JFQ1ZUQ0xBU1MgNjYKICNkZWZpbmUgSVBWNl9UQ0xBU1MgNjcKLQogI2RlZmluZSBJUFY2X0FERFJfUFJFRkVSRU5DRVMgNzIKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSVBWNl9QUkVGRVJfU1JDX1RNUCAweDAwMDEKICNkZWZpbmUgSVBWNl9QUkVGRVJfU1JDX1BVQkxJQyAweDAwMDIKICNkZWZpbmUgSVBWNl9QUkVGRVJfU1JDX1BVQlRNUF9ERUZBVUxUIDB4MDEwMAogI2RlZmluZSBJUFY2X1BSRUZFUl9TUkNfQ09BIDB4MDAwNAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSVBWNl9QUkVGRVJfU1JDX0hPTUUgMHgwNDAwCiAjZGVmaW5lIElQVjZfUFJFRkVSX1NSQ19DR0EgMHgwMDA4CiAjZGVmaW5lIElQVjZfUFJFRkVSX1NSQ19OT05DR0EgMHgwODAwCi0KICNkZWZpbmUgSVBWNl9NSU5IT1BDT1VOVCA3MwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJUFY2X09SSUdEU1RBRERSIDc0CiAjZGVmaW5lIElQVjZfUkVDVk9SSUdEU1RBRERSIElQVjZfT1JJR0RTVEFERFIKICNkZWZpbmUgSVBWNl9UUkFOU1BBUkVOVCA3NQotCiAjZW5kaWYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvaW5fcm91dGUuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9pbl9yb3V0ZS5oCmluZGV4IDM0ZTE0ZDYuLjUwOTEzYTkgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9pbl9yb3V0ZS5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9pbl9yb3V0ZS5oCkBAIC03LDM1ICs3LDM5IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfTElOVVhfSU5fUk9VVEVfSAogI2RlZmluZSBfTElOVVhfSU5fUk9VVEVfSAotCiAjZGVmaW5lIFJUQ0ZfREVBRCBSVE5IX0ZfREVBRAogI2RlZmluZSBSVENGX09OTElOSyBSVE5IX0ZfT05MSU5LCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFJUQ0ZfTk9QTVRVRElTQyBSVE1fRl9OT1BNVFVESVNDCi0KICNkZWZpbmUgUlRDRl9OT1RJRlkgMHgwMDAxMDAwMAotI2RlZmluZSBSVENGX0RJUkVDVERTVCAweDAwMDIwMDAwICAKKyNkZWZpbmUgUlRDRl9ESVJFQ1REU1QgMHgwMDAyMDAwMAogI2RlZmluZSBSVENGX1JFRElSRUNURUQgMHgwMDA0MDAwMAotI2RlZmluZSBSVENGX1RQUk9YWSAweDAwMDgwMDAwICAKLQotI2RlZmluZSBSVENGX0ZBU1QgMHgwMDIwMDAwMCAgCi0jZGVmaW5lIFJUQ0ZfTUFTUSAweDAwNDAwMDAwICAKLSNkZWZpbmUgUlRDRl9TTkFUIDB4MDA4MDAwMDAgIAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgUlRDRl9UUFJPWFkgMHgwMDA4MDAwMAorI2RlZmluZSBSVENGX0ZBU1QgMHgwMDIwMDAwMAorI2RlZmluZSBSVENGX01BU1EgMHgwMDQwMDAwMAorI2RlZmluZSBSVENGX1NOQVQgMHgwMDgwMDAwMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUlRDRl9ET1JFRElSRUNUIDB4MDEwMDAwMDAKICNkZWZpbmUgUlRDRl9ESVJFQ1RTUkMgMHgwNDAwMDAwMAogI2RlZmluZSBSVENGX0ROQVQgMHgwODAwMDAwMAogI2RlZmluZSBSVENGX0JST0FEQ0FTVCAweDEwMDAwMDAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBSVENGX01VTFRJQ0FTVCAweDIwMDAwMDAwCi0jZGVmaW5lIFJUQ0ZfUkVKRUNUIDB4NDAwMDAwMDAgIAorI2RlZmluZSBSVENGX1JFSkVDVCAweDQwMDAwMDAwCiAjZGVmaW5lIFJUQ0ZfTE9DQUwgMHg4MDAwMDAwMAotCiAjZGVmaW5lIFJUQ0ZfTkFUIChSVENGX0ROQVR8UlRDRl9TTkFUKQotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBSVF9UT1ModG9zKSAoKHRvcykmSVBUT1NfVE9TX01BU0spCi0KICNlbmRpZgotCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvaW5pdC5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2luaXQuaAppbmRleCA4NDZjNGViLi40MjM1ZWZiIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvaW5pdC5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9pbml0LmgKQEAgLTcsMTMxICs3LDEyMiBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX0xJTlVYX0lOSVRfSAogI2RlZmluZSBfTElOVVhfSU5JVF9ICi0KICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgotCiAjZGVmaW5lIF9faW5pdCBfX2F0dHJpYnV0ZV9fICgoX19zZWN0aW9uX18gKCIuaW5pdC50ZXh0IikpKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19pbml0ZGF0YSBfX2F0dHJpYnV0ZV9fICgoX19zZWN0aW9uX18gKCIuaW5pdC5kYXRhIikpKQogI2RlZmluZSBfX2V4aXRkYXRhIF9fYXR0cmlidXRlX18gKChfX3NlY3Rpb25fXygiLmV4aXQuZGF0YSIpKSkKICNkZWZpbmUgX19leGl0X2NhbGwgX19hdHRyaWJ1dGVfdXNlZF9fIF9fYXR0cmlidXRlX18gKChfX3NlY3Rpb25fXyAoIi5leGl0Y2FsbC5leGl0IikpKQotCiAjaWZkZWYgTU9EVUxFCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX2V4aXQgX19hdHRyaWJ1dGVfXyAoKF9fc2VjdGlvbl9fKCIuZXhpdC50ZXh0IikpKQogI2Vsc2UKICNkZWZpbmUgX19leGl0IF9fYXR0cmlidXRlX3VzZWRfXyBfX2F0dHJpYnV0ZV9fICgoX19zZWN0aW9uX18oIi5leGl0LnRleHQiKSkpCiAjZW5kaWYKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19JTklUIC5zZWN0aW9uICIuaW5pdC50ZXh0IiwiYXgiCiAjZGVmaW5lIF9fRklOSVQgLnByZXZpb3VzCiAjZGVmaW5lIF9fSU5JVERBVEEgLnNlY3Rpb24gIi5pbml0LmRhdGEiLCJhdyIKLQogI2lmbmRlZiBfX0FTU0VNQkxZX18KLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHR5cGVkZWYgaW50ICgqaW5pdGNhbGxfdCkodm9pZCk7CiB0eXBlZGVmIHZvaWQgKCpleGl0Y2FsbF90KSh2b2lkKTsKLQogI2VuZGlmCi0KICNpZm5kZWYgTU9EVUxFCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwotCiAjZGVmaW5lIF9fZGVmaW5lX2luaXRjYWxsKGxldmVsLGZuKSAgIHN0YXRpYyBpbml0Y2FsbF90IF9faW5pdGNhbGxfIyNmbiBfX2F0dHJpYnV0ZV91c2VkX18gICBfX2F0dHJpYnV0ZV9fKChfX3NlY3Rpb25fXygiLmluaXRjYWxsIiBsZXZlbCAiLmluaXQiKSkpID0gZm4KLQogI2RlZmluZSBjb3JlX2luaXRjYWxsKGZuKSBfX2RlZmluZV9pbml0Y2FsbCgiMSIsZm4pCiAjZGVmaW5lIHBvc3Rjb3JlX2luaXRjYWxsKGZuKSBfX2RlZmluZV9pbml0Y2FsbCgiMiIsZm4pCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBhcmNoX2luaXRjYWxsKGZuKSBfX2RlZmluZV9pbml0Y2FsbCgiMyIsZm4pCiAjZGVmaW5lIHN1YnN5c19pbml0Y2FsbChmbikgX19kZWZpbmVfaW5pdGNhbGwoIjQiLGZuKQogI2RlZmluZSBmc19pbml0Y2FsbChmbikgX19kZWZpbmVfaW5pdGNhbGwoIjUiLGZuKQogI2RlZmluZSBkZXZpY2VfaW5pdGNhbGwoZm4pIF9fZGVmaW5lX2luaXRjYWxsKCI2IixmbikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIGxhdGVfaW5pdGNhbGwoZm4pIF9fZGVmaW5lX2luaXRjYWxsKCI3IixmbikKLQogI2RlZmluZSBfX2luaXRjYWxsKGZuKSBkZXZpY2VfaW5pdGNhbGwoZm4pCi0KICNkZWZpbmUgX19leGl0Y2FsbChmbikgICBzdGF0aWMgZXhpdGNhbGxfdCBfX2V4aXRjYWxsXyMjZm4gX19leGl0X2NhbGwgPSBmbgotCiAjZGVmaW5lIGNvbnNvbGVfaW5pdGNhbGwoZm4pICAgc3RhdGljIGluaXRjYWxsX3QgX19pbml0Y2FsbF8jI2ZuICAgX19hdHRyaWJ1dGVfdXNlZF9fIF9fYXR0cmlidXRlX18oKF9fc2VjdGlvbl9fKCIuY29uX2luaXRjYWxsLmluaXQiKSkpPWZuCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIHNlY3VyaXR5X2luaXRjYWxsKGZuKSAgIHN0YXRpYyBpbml0Y2FsbF90IF9faW5pdGNhbGxfIyNmbiAgIF9fYXR0cmlidXRlX3VzZWRfXyBfX2F0dHJpYnV0ZV9fKChfX3NlY3Rpb25fXygiLnNlY3VyaXR5X2luaXRjYWxsLmluaXQiKSkpID0gZm4KLQogc3RydWN0IG9ic19rZXJuZWxfcGFyYW0gewogIGNvbnN0IGNoYXIgKnN0cjsKICBpbnQgKCpzZXR1cF9mdW5jKShjaGFyICopOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBpbnQgZWFybHk7CiB9OwotCiAjZGVmaW5lIF9fc2V0dXBfcGFyYW0oc3RyLCB1bmlxdWVfaWQsIGZuLCBlYXJseSkgICBzdGF0aWMgY2hhciBfX3NldHVwX3N0cl8jI3VuaXF1ZV9pZFtdIF9faW5pdGRhdGEgPSBzdHI7ICAgc3RhdGljIHN0cnVjdCBvYnNfa2VybmVsX3BhcmFtIF9fc2V0dXBfIyN1bmlxdWVfaWQgICBfX2F0dHJpYnV0ZV91c2VkX18gICBfX2F0dHJpYnV0ZV9fKChfX3NlY3Rpb25fXygiLmluaXQuc2V0dXAiKSkpICAgX19hdHRyaWJ1dGVfXygoYWxpZ25lZCgoc2l6ZW9mKGxvbmcpKSkpKSAgID0geyBfX3NldHVwX3N0cl8jI3VuaXF1ZV9pZCwgZm4sIGVhcmx5IH0KLQogI2RlZmluZSBfX3NldHVwX251bGxfcGFyYW0oc3RyLCB1bmlxdWVfaWQpICAgX19zZXR1cF9wYXJhbShzdHIsIHVuaXF1ZV9pZCwgTlVMTCwgMCkKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19zZXR1cChzdHIsIGZuKSAgIF9fc2V0dXBfcGFyYW0oc3RyLCBmbiwgZm4sIDApCi0KICNkZWZpbmUgX19vYnNvbGV0ZV9zZXR1cChzdHIpICAgX19zZXR1cF9udWxsX3BhcmFtKHN0ciwgX19MSU5FX18pCi0KICNkZWZpbmUgZWFybHlfcGFyYW0oc3RyLCBmbikgICBfX3NldHVwX3BhcmFtKHN0ciwgZm4sIGZuLCAxKQotCiAjZW5kaWYKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgbW9kdWxlX2luaXQoeCkgX19pbml0Y2FsbCh4KTsKLQogI2RlZmluZSBtb2R1bGVfZXhpdCh4KSBfX2V4aXRjYWxsKHgpOwotCiAjZWxzZQotCiAjZGVmaW5lIGNvcmVfaW5pdGNhbGwoZm4pIG1vZHVsZV9pbml0KGZuKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgcG9zdGNvcmVfaW5pdGNhbGwoZm4pIG1vZHVsZV9pbml0KGZuKQogI2RlZmluZSBhcmNoX2luaXRjYWxsKGZuKSBtb2R1bGVfaW5pdChmbikKICNkZWZpbmUgc3Vic3lzX2luaXRjYWxsKGZuKSBtb2R1bGVfaW5pdChmbikKICNkZWZpbmUgZnNfaW5pdGNhbGwoZm4pIG1vZHVsZV9pbml0KGZuKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgZGV2aWNlX2luaXRjYWxsKGZuKSBtb2R1bGVfaW5pdChmbikKICNkZWZpbmUgbGF0ZV9pbml0Y2FsbChmbikgbW9kdWxlX2luaXQoZm4pCi0KICNkZWZpbmUgc2VjdXJpdHlfaW5pdGNhbGwoZm4pIG1vZHVsZV9pbml0KGZuKQotCiAjZGVmaW5lIG1vZHVsZV9pbml0KGluaXRmbikgICBzdGF0aWMgaW5saW5lIGluaXRjYWxsX3QgX19pbml0dGVzdCh2b2lkKSAgIHsgcmV0dXJuIGluaXRmbjsgfSAgIGludCBpbml0X21vZHVsZSh2b2lkKSBfX2F0dHJpYnV0ZV9fKChhbGlhcygjaW5pdGZuKSkpOwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBtb2R1bGVfZXhpdChleGl0Zm4pICAgc3RhdGljIGlubGluZSBleGl0Y2FsbF90IF9fZXhpdHRlc3Qodm9pZCkgICB7IHJldHVybiBleGl0Zm47IH0gICB2b2lkIGNsZWFudXBfbW9kdWxlKHZvaWQpIF9fYXR0cmlidXRlX18oKGFsaWFzKCNleGl0Zm4pKSk7Ci0KLSNkZWZpbmUgX19zZXR1cF9wYXJhbShzdHIsIHVuaXF1ZV9pZCwgZm4pICAKLSNkZWZpbmUgX19zZXR1cF9udWxsX3BhcmFtKHN0ciwgdW5pcXVlX2lkKSAgCi0jZGVmaW5lIF9fc2V0dXAoc3RyLCBmdW5jKSAgCi0jZGVmaW5lIF9fb2Jzb2xldGVfc2V0dXAoc3RyKSAgCisjZGVmaW5lIF9fc2V0dXBfcGFyYW0oc3RyLCB1bmlxdWVfaWQsIGZuKQorI2RlZmluZSBfX3NldHVwX251bGxfcGFyYW0oc3RyLCB1bmlxdWVfaWQpCisjZGVmaW5lIF9fc2V0dXAoc3RyLCBmdW5jKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgX19vYnNvbGV0ZV9zZXR1cChzdHIpCiAjZW5kaWYKLQogI2RlZmluZSBfX25vc2F2ZWRhdGEgX19hdHRyaWJ1dGVfXyAoKF9fc2VjdGlvbl9fICgiLmRhdGEubm9zYXZlIikpKQotCiAjZGVmaW5lIF9faW5pdF9vcl9tb2R1bGUgX19pbml0CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX2luaXRkYXRhX29yX21vZHVsZSBfX2luaXRkYXRhCi0KICNkZWZpbmUgX19kZXZpbml0IF9faW5pdAogI2RlZmluZSBfX2RldmluaXRkYXRhIF9faW5pdGRhdGEKICNkZWZpbmUgX19kZXZleGl0IF9fZXhpdAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19kZXZleGl0ZGF0YSBfX2V4aXRkYXRhCi0KICNkZWZpbmUgX19jcHVpbml0IF9faW5pdAogI2RlZmluZSBfX2NwdWluaXRkYXRhIF9faW5pdGRhdGEKICNkZWZpbmUgX19jcHVleGl0IF9fZXhpdAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19jcHVleGl0ZGF0YSBfX2V4aXRkYXRhCi0KICNkZWZpbmUgX19tZW1pbml0IF9faW5pdAogI2RlZmluZSBfX21lbWluaXRkYXRhIF9faW5pdGRhdGEKICNkZWZpbmUgX19tZW1leGl0IF9fZXhpdAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19tZW1leGl0ZGF0YSBfX2V4aXRkYXRhCi0KICNpZmRlZiBNT0RVTEUKICNkZWZpbmUgX19kZXZleGl0X3AoeCkgeAogI2Vsc2UKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fZGV2ZXhpdF9wKHgpIE5VTEwKICNlbmRpZgotCiAjaWZkZWYgTU9EVUxFCiAjZGVmaW5lIF9fZXhpdF9wKHgpIHgKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZWxzZQogI2RlZmluZSBfX2V4aXRfcCh4KSBOVUxMCiAjZW5kaWYKLQogI2VuZGlmCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2lub3RpZnkuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9pbm90aWZ5LmgKaW5kZXggZGI1MzQxNy4uYmY1MzA5ZiAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2lub3RpZnkuaAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvaW5vdGlmeS5oCkBAIC03LDQ3ICs3LDU0IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfTElOVVhfSU5PVElGWV9ICiAjZGVmaW5lIF9MSU5VWF9JTk9USUZZX0gKLQogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0KIHN0cnVjdCBpbm90aWZ5X2V2ZW50IHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX19zMzIgd2Q7CiAgX191MzIgbWFzazsKICBfX3UzMiBjb29raWU7CiAgX191MzIgbGVuOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBjaGFyIG5hbWVbMF07CiB9OwotCi0jZGVmaW5lIElOX0FDQ0VTUyAweDAwMDAwMDAxICAKLSNkZWZpbmUgSU5fTU9ESUZZIDB4MDAwMDAwMDIgIAotI2RlZmluZSBJTl9BVFRSSUIgMHgwMDAwMDAwNCAgCi0jZGVmaW5lIElOX0NMT1NFX1dSSVRFIDB4MDAwMDAwMDggIAotI2RlZmluZSBJTl9DTE9TRV9OT1dSSVRFIDB4MDAwMDAwMTAgIAotI2RlZmluZSBJTl9PUEVOIDB4MDAwMDAwMjAgIAotI2RlZmluZSBJTl9NT1ZFRF9GUk9NIDB4MDAwMDAwNDAgIAotI2RlZmluZSBJTl9NT1ZFRF9UTyAweDAwMDAwMDgwICAKLSNkZWZpbmUgSU5fQ1JFQVRFIDB4MDAwMDAxMDAgIAotI2RlZmluZSBJTl9ERUxFVEUgMHgwMDAwMDIwMCAgCi0jZGVmaW5lIElOX0RFTEVURV9TRUxGIDB4MDAwMDA0MDAgIAotI2RlZmluZSBJTl9NT1ZFX1NFTEYgMHgwMDAwMDgwMCAgCi0KLSNkZWZpbmUgSU5fVU5NT1VOVCAweDAwMDAyMDAwICAKLSNkZWZpbmUgSU5fUV9PVkVSRkxPVyAweDAwMDA0MDAwICAKLSNkZWZpbmUgSU5fSUdOT1JFRCAweDAwMDA4MDAwICAKLQotI2RlZmluZSBJTl9DTE9TRSAoSU5fQ0xPU0VfV1JJVEUgfCBJTl9DTE9TRV9OT1dSSVRFKSAgCi0jZGVmaW5lIElOX01PVkUgKElOX01PVkVEX0ZST00gfCBJTl9NT1ZFRF9UTykgIAotCi0jZGVmaW5lIElOX09OTFlESVIgMHgwMTAwMDAwMCAgCi0jZGVmaW5lIElOX0RPTlRfRk9MTE9XIDB4MDIwMDAwMDAgIAotI2RlZmluZSBJTl9NQVNLX0FERCAweDIwMDAwMDAwICAKLSNkZWZpbmUgSU5fSVNESVIgMHg0MDAwMDAwMCAgCi0jZGVmaW5lIElOX09ORVNIT1QgMHg4MDAwMDAwMCAgCi0KKyNkZWZpbmUgSU5fQUNDRVNTIDB4MDAwMDAwMDEKKyNkZWZpbmUgSU5fTU9ESUZZIDB4MDAwMDAwMDIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIElOX0FUVFJJQiAweDAwMDAwMDA0CisjZGVmaW5lIElOX0NMT1NFX1dSSVRFIDB4MDAwMDAwMDgKKyNkZWZpbmUgSU5fQ0xPU0VfTk9XUklURSAweDAwMDAwMDEwCisjZGVmaW5lIElOX09QRU4gMHgwMDAwMDAyMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgSU5fTU9WRURfRlJPTSAweDAwMDAwMDQwCisjZGVmaW5lIElOX01PVkVEX1RPIDB4MDAwMDAwODAKKyNkZWZpbmUgSU5fQ1JFQVRFIDB4MDAwMDAxMDAKKyNkZWZpbmUgSU5fREVMRVRFIDB4MDAwMDAyMDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIElOX0RFTEVURV9TRUxGIDB4MDAwMDA0MDAKKyNkZWZpbmUgSU5fTU9WRV9TRUxGIDB4MDAwMDA4MDAKKyNkZWZpbmUgSU5fVU5NT1VOVCAweDAwMDAyMDAwCisjZGVmaW5lIElOX1FfT1ZFUkZMT1cgMHgwMDAwNDAwMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgSU5fSUdOT1JFRCAweDAwMDA4MDAwCisjZGVmaW5lIElOX0NMT1NFIChJTl9DTE9TRV9XUklURSB8IElOX0NMT1NFX05PV1JJVEUpCisjZGVmaW5lIElOX01PVkUgKElOX01PVkVEX0ZST00gfCBJTl9NT1ZFRF9UTykKKyNkZWZpbmUgSU5fT05MWURJUiAweDAxMDAwMDAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBJTl9ET05UX0ZPTExPVyAweDAyMDAwMDAwCisjZGVmaW5lIElOX01BU0tfQUREIDB4MjAwMDAwMDAKKyNkZWZpbmUgSU5fSVNESVIgMHg0MDAwMDAwMAorI2RlZmluZSBJTl9PTkVTSE9UIDB4ODAwMDAwMDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIElOX0FMTF9FVkVOVFMgKElOX0FDQ0VTUyB8IElOX01PRElGWSB8IElOX0FUVFJJQiB8IElOX0NMT1NFX1dSSVRFIHwgICBJTl9DTE9TRV9OT1dSSVRFIHwgSU5fT1BFTiB8IElOX01PVkVEX0ZST00gfCAgIElOX01PVkVEX1RPIHwgSU5fREVMRVRFIHwgSU5fQ1JFQVRFIHwgSU5fREVMRVRFX1NFTEYgfCAgIElOX01PVkVfU0VMRikKLQogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvaW5wdXQuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9pbnB1dC5oCmluZGV4IDQwNDVlYjAuLjhhNzZkMmEgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9pbnB1dC5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9pbnB1dC5oCkBAIC0yMCw3OTYgKzIwLDEwMDIgQEAKICNkZWZpbmUgX0lOUFVUX0gKICNpbmNsdWRlIDxzeXMvdGltZS5oPgogI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogc3RydWN0IGlucHV0X2V2ZW50IHsKICBzdHJ1Y3QgdGltZXZhbCB0aW1lOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UxNiB0eXBlOwogIF9fdTE2IGNvZGU7CiAgX19zMzIgdmFsdWU7CiB9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRVZfVkVSU0lPTiAweDAxMDAwMQogc3RydWN0IGlucHV0X2lkIHsKICBfX3UxNiBidXN0eXBlOwogIF9fdTE2IHZlbmRvcjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MTYgcHJvZHVjdDsKICBfX3UxNiB2ZXJzaW9uOwogfTsKIHN0cnVjdCBpbnB1dF9hYnNpbmZvIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX19zMzIgdmFsdWU7CiAgX19zMzIgbWluaW11bTsKICBfX3MzMiBtYXhpbXVtOwogIF9fczMyIGZ1eno7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fczMyIGZsYXQ7CiAgX19zMzIgcmVzb2x1dGlvbjsKIH07CiBzdHJ1Y3QgaW5wdXRfa2V5bWFwX2VudHJ5IHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIElOUFVUX0tFWU1BUF9CWV9JTkRFWCAoMSA8PCAwKQogIF9fdTggZmxhZ3M7CiAgX191OCBsZW47CiAgX191MTYgaW5kZXg7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGtleWNvZGU7CiAgX191OCBzY2FuY29kZVszMl07CiB9OwogI2RlZmluZSBFVklPQ0dWRVJTSU9OIF9JT1IoJ0UnLCAweDAxLCBpbnQpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBFVklPQ0dJRCBfSU9SKCdFJywgMHgwMiwgc3RydWN0IGlucHV0X2lkKQogI2RlZmluZSBFVklPQ0dSRVAgX0lPUignRScsIDB4MDMsIHVuc2lnbmVkIGludFsyXSkKICNkZWZpbmUgRVZJT0NTUkVQIF9JT1coJ0UnLCAweDAzLCB1bnNpZ25lZCBpbnRbMl0pCiAjZGVmaW5lIEVWSU9DR0tFWUNPREUgX0lPUignRScsIDB4MDQsIHVuc2lnbmVkIGludFsyXSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEVWSU9DR0tFWUNPREVfVjIgX0lPUignRScsIDB4MDQsIHN0cnVjdCBpbnB1dF9rZXltYXBfZW50cnkpCiAjZGVmaW5lIEVWSU9DU0tFWUNPREUgX0lPVygnRScsIDB4MDQsIHVuc2lnbmVkIGludFsyXSkKICNkZWZpbmUgRVZJT0NTS0VZQ09ERV9WMiBfSU9XKCdFJywgMHgwNCwgc3RydWN0IGlucHV0X2tleW1hcF9lbnRyeSkKICNkZWZpbmUgRVZJT0NHTkFNRShsZW4pIF9JT0MoX0lPQ19SRUFELCAnRScsIDB4MDYsIGxlbikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEVWSU9DR1BIWVMobGVuKSBfSU9DKF9JT0NfUkVBRCwgJ0UnLCAweDA3LCBsZW4pCiAjZGVmaW5lIEVWSU9DR1VOSVEobGVuKSBfSU9DKF9JT0NfUkVBRCwgJ0UnLCAweDA4LCBsZW4pCiAjZGVmaW5lIEVWSU9DR1BST1AobGVuKSBfSU9DKF9JT0NfUkVBRCwgJ0UnLCAweDA5LCBsZW4pCisjZGVmaW5lIEVWSU9DR01UU0xPVFMobGVuKSBfSU9DKF9JT0NfUkVBRCwgJ0UnLCAweDBhLCBsZW4pCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBFVklPQ0dLRVkobGVuKSBfSU9DKF9JT0NfUkVBRCwgJ0UnLCAweDE4LCBsZW4pCiAjZGVmaW5lIEVWSU9DR0xFRChsZW4pIF9JT0MoX0lPQ19SRUFELCAnRScsIDB4MTksIGxlbikKICNkZWZpbmUgRVZJT0NHU05EKGxlbikgX0lPQyhfSU9DX1JFQUQsICdFJywgMHgxYSwgbGVuKQogI2RlZmluZSBFVklPQ0dTVyhsZW4pIF9JT0MoX0lPQ19SRUFELCAnRScsIDB4MWIsIGxlbikKLSNkZWZpbmUgRVZJT0NHQklUKGV2LGxlbikgX0lPQyhfSU9DX1JFQUQsICdFJywgMHgyMCArIGV2LCBsZW4pCi0jZGVmaW5lIEVWSU9DR0FCUyhhYnMpIF9JT1IoJ0UnLCAweDQwICsgYWJzLCBzdHJ1Y3QgaW5wdXRfYWJzaW5mbykKLSNkZWZpbmUgRVZJT0NTQUJTKGFicykgX0lPVygnRScsIDB4YzAgKyBhYnMsIHN0cnVjdCBpbnB1dF9hYnNpbmZvKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgRVZJT0NHQklUKGV2LGxlbikgX0lPQyhfSU9DX1JFQUQsICdFJywgMHgyMCArIChldiksIGxlbikKKyNkZWZpbmUgRVZJT0NHQUJTKGFicykgX0lPUignRScsIDB4NDAgKyAoYWJzKSwgc3RydWN0IGlucHV0X2Fic2luZm8pCisjZGVmaW5lIEVWSU9DU0FCUyhhYnMpIF9JT1coJ0UnLCAweGMwICsgKGFicyksIHN0cnVjdCBpbnB1dF9hYnNpbmZvKQogI2RlZmluZSBFVklPQ1NGRiBfSU9DKF9JT0NfV1JJVEUsICdFJywgMHg4MCwgc2l6ZW9mKHN0cnVjdCBmZl9lZmZlY3QpKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRVZJT0NSTUZGIF9JT1coJ0UnLCAweDgxLCBpbnQpCiAjZGVmaW5lIEVWSU9DR0VGRkVDVFMgX0lPUignRScsIDB4ODQsIGludCkKICNkZWZpbmUgRVZJT0NHUkFCIF9JT1coJ0UnLCAweDkwLCBpbnQpCisjZGVmaW5lIEVWSU9DR1NVU1BFTkRCTE9DSyBfSU9SKCdFJywgMHg5MSwgaW50KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgRVZJT0NTU1VTUEVOREJMT0NLIF9JT1coJ0UnLCAweDkxLCBpbnQpCisjZGVmaW5lIEVWSU9DU0NMT0NLSUQgX0lPVygnRScsIDB4YTAsIGludCkKICNkZWZpbmUgSU5QVVRfUFJPUF9QT0lOVEVSIDB4MDAKICNkZWZpbmUgSU5QVVRfUFJPUF9ESVJFQ1QgMHgwMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSU5QVVRfUFJPUF9CVVRUT05QQUQgMHgwMgogI2RlZmluZSBJTlBVVF9QUk9QX1NFTUlfTVQgMHgwMwogI2RlZmluZSBJTlBVVF9QUk9QX01BWCAweDFmCiAjZGVmaW5lIElOUFVUX1BST1BfQ05UIChJTlBVVF9QUk9QX01BWCArIDEpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBFVl9TWU4gMHgwMAogI2RlZmluZSBFVl9LRVkgMHgwMQogI2RlZmluZSBFVl9SRUwgMHgwMgogI2RlZmluZSBFVl9BQlMgMHgwMworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRVZfTVNDIDB4MDQKICNkZWZpbmUgRVZfU1cgMHgwNQogI2RlZmluZSBFVl9MRUQgMHgxMQogI2RlZmluZSBFVl9TTkQgMHgxMgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRVZfUkVQIDB4MTQKICNkZWZpbmUgRVZfRkYgMHgxNQogI2RlZmluZSBFVl9QV1IgMHgxNgogI2RlZmluZSBFVl9GRl9TVEFUVVMgMHgxNworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRVZfTUFYIDB4MWYKICNkZWZpbmUgRVZfQ05UIChFVl9NQVgrMSkKICNkZWZpbmUgU1lOX1JFUE9SVCAwCiAjZGVmaW5lIFNZTl9DT05GSUcgMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU1lOX01UX1JFUE9SVCAyCiAjZGVmaW5lIFNZTl9EUk9QUEVEIDMKICNkZWZpbmUgS0VZX1JFU0VSVkVEIDAKICNkZWZpbmUgS0VZX0VTQyAxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLRVlfMSAyCiAjZGVmaW5lIEtFWV8yIDMKICNkZWZpbmUgS0VZXzMgNAogI2RlZmluZSBLRVlfNCA1CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLRVlfNSA2CiAjZGVmaW5lIEtFWV82IDcKICNkZWZpbmUgS0VZXzcgOAogI2RlZmluZSBLRVlfOCA5CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLRVlfOSAxMAogI2RlZmluZSBLRVlfMCAxMQogI2RlZmluZSBLRVlfTUlOVVMgMTIKICNkZWZpbmUgS0VZX0VRVUFMIDEzCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLRVlfQkFDS1NQQUNFIDE0CiAjZGVmaW5lIEtFWV9UQUIgMTUKICNkZWZpbmUgS0VZX1EgMTYKICNkZWZpbmUgS0VZX1cgMTcKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtFWV9FIDE4CiAjZGVmaW5lIEtFWV9SIDE5CiAjZGVmaW5lIEtFWV9UIDIwCiAjZGVmaW5lIEtFWV9ZIDIxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLRVlfVSAyMgogI2RlZmluZSBLRVlfSSAyMwogI2RlZmluZSBLRVlfTyAyNAogI2RlZmluZSBLRVlfUCAyNQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS0VZX0xFRlRCUkFDRSAyNgogI2RlZmluZSBLRVlfUklHSFRCUkFDRSAyNwogI2RlZmluZSBLRVlfRU5URVIgMjgKICNkZWZpbmUgS0VZX0xFRlRDVFJMIDI5CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLRVlfQSAzMAogI2RlZmluZSBLRVlfUyAzMQogI2RlZmluZSBLRVlfRCAzMgogI2RlZmluZSBLRVlfRiAzMworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS0VZX0cgMzQKICNkZWZpbmUgS0VZX0ggMzUKICNkZWZpbmUgS0VZX0ogMzYKICNkZWZpbmUgS0VZX0sgMzcKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtFWV9MIDM4CiAjZGVmaW5lIEtFWV9TRU1JQ09MT04gMzkKICNkZWZpbmUgS0VZX0FQT1NUUk9QSEUgNDAKICNkZWZpbmUgS0VZX0dSQVZFIDQxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLRVlfTEVGVFNISUZUIDQyCiAjZGVmaW5lIEtFWV9CQUNLU0xBU0ggNDMKICNkZWZpbmUgS0VZX1ogNDQKICNkZWZpbmUgS0VZX1ggNDUKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtFWV9DIDQ2CiAjZGVmaW5lIEtFWV9WIDQ3CiAjZGVmaW5lIEtFWV9CIDQ4CiAjZGVmaW5lIEtFWV9OIDQ5CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLRVlfTSA1MAogI2RlZmluZSBLRVlfQ09NTUEgNTEKICNkZWZpbmUgS0VZX0RPVCA1MgogI2RlZmluZSBLRVlfU0xBU0ggNTMKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtFWV9SSUdIVFNISUZUIDU0CiAjZGVmaW5lIEtFWV9LUEFTVEVSSVNLIDU1CiAjZGVmaW5lIEtFWV9MRUZUQUxUIDU2CiAjZGVmaW5lIEtFWV9TUEFDRSA1NworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS0VZX0NBUFNMT0NLIDU4CiAjZGVmaW5lIEtFWV9GMSA1OQogI2RlZmluZSBLRVlfRjIgNjAKICNkZWZpbmUgS0VZX0YzIDYxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLRVlfRjQgNjIKICNkZWZpbmUgS0VZX0Y1IDYzCiAjZGVmaW5lIEtFWV9GNiA2NAogI2RlZmluZSBLRVlfRjcgNjUKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtFWV9GOCA2NgogI2RlZmluZSBLRVlfRjkgNjcKICNkZWZpbmUgS0VZX0YxMCA2OAogI2RlZmluZSBLRVlfTlVNTE9DSyA2OQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS0VZX1NDUk9MTExPQ0sgNzAKICNkZWZpbmUgS0VZX0tQNyA3MQogI2RlZmluZSBLRVlfS1A4IDcyCiAjZGVmaW5lIEtFWV9LUDkgNzMKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtFWV9LUE1JTlVTIDc0CiAjZGVmaW5lIEtFWV9LUDQgNzUKICNkZWZpbmUgS0VZX0tQNSA3NgogI2RlZmluZSBLRVlfS1A2IDc3CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLRVlfS1BQTFVTIDc4CiAjZGVmaW5lIEtFWV9LUDEgNzkKICNkZWZpbmUgS0VZX0tQMiA4MAogI2RlZmluZSBLRVlfS1AzIDgxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLRVlfS1AwIDgyCiAjZGVmaW5lIEtFWV9LUERPVCA4MwogI2RlZmluZSBLRVlfWkVOS0FLVUhBTktBS1UgODUKICNkZWZpbmUgS0VZXzEwMk5EIDg2CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLRVlfRjExIDg3CiAjZGVmaW5lIEtFWV9GMTIgODgKICNkZWZpbmUgS0VZX1JPIDg5CiAjZGVmaW5lIEtFWV9LQVRBS0FOQSA5MAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS0VZX0hJUkFHQU5BIDkxCiAjZGVmaW5lIEtFWV9IRU5LQU4gOTIKICNkZWZpbmUgS0VZX0tBVEFLQU5BSElSQUdBTkEgOTMKICNkZWZpbmUgS0VZX01VSEVOS0FOIDk0CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLRVlfS1BKUENPTU1BIDk1CiAjZGVmaW5lIEtFWV9LUEVOVEVSIDk2CiAjZGVmaW5lIEtFWV9SSUdIVENUUkwgOTcKICNkZWZpbmUgS0VZX0tQU0xBU0ggOTgKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtFWV9TWVNSUSA5OQogI2RlZmluZSBLRVlfUklHSFRBTFQgMTAwCiAjZGVmaW5lIEtFWV9MSU5FRkVFRCAxMDEKICNkZWZpbmUgS0VZX0hPTUUgMTAyCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLRVlfVVAgMTAzCiAjZGVmaW5lIEtFWV9QQUdFVVAgMTA0CiAjZGVmaW5lIEtFWV9MRUZUIDEwNQogI2RlZmluZSBLRVlfUklHSFQgMTA2CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLRVlfRU5EIDEwNwogI2RlZmluZSBLRVlfRE9XTiAxMDgKICNkZWZpbmUgS0VZX1BBR0VET1dOIDEwOQogI2RlZmluZSBLRVlfSU5TRVJUIDExMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS0VZX0RFTEVURSAxMTEKICNkZWZpbmUgS0VZX01BQ1JPIDExMgogI2RlZmluZSBLRVlfTVVURSAxMTMKICNkZWZpbmUgS0VZX1ZPTFVNRURPV04gMTE0CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLRVlfVk9MVU1FVVAgMTE1CiAjZGVmaW5lIEtFWV9QT1dFUiAxMTYKICNkZWZpbmUgS0VZX0tQRVFVQUwgMTE3CiAjZGVmaW5lIEtFWV9LUFBMVVNNSU5VUyAxMTgKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtFWV9QQVVTRSAxMTkKICNkZWZpbmUgS0VZX1NDQUxFIDEyMAogI2RlZmluZSBLRVlfS1BDT01NQSAxMjEKICNkZWZpbmUgS0VZX0hBTkdFVUwgMTIyCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLRVlfSEFOR1VFTCBLRVlfSEFOR0VVTAogI2RlZmluZSBLRVlfSEFOSkEgMTIzCiAjZGVmaW5lIEtFWV9ZRU4gMTI0CiAjZGVmaW5lIEtFWV9MRUZUTUVUQSAxMjUKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtFWV9SSUdIVE1FVEEgMTI2CiAjZGVmaW5lIEtFWV9DT01QT1NFIDEyNwogI2RlZmluZSBLRVlfU1RPUCAxMjgKICNkZWZpbmUgS0VZX0FHQUlOIDEyOQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS0VZX1BST1BTIDEzMAogI2RlZmluZSBLRVlfVU5ETyAxMzEKICNkZWZpbmUgS0VZX0ZST05UIDEzMgogI2RlZmluZSBLRVlfQ09QWSAxMzMKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtFWV9PUEVOIDEzNAogI2RlZmluZSBLRVlfUEFTVEUgMTM1CiAjZGVmaW5lIEtFWV9GSU5EIDEzNgogI2RlZmluZSBLRVlfQ1VUIDEzNworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS0VZX0hFTFAgMTM4CiAjZGVmaW5lIEtFWV9NRU5VIDEzOQogI2RlZmluZSBLRVlfQ0FMQyAxNDAKICNkZWZpbmUgS0VZX1NFVFVQIDE0MQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS0VZX1NMRUVQIDE0MgogI2RlZmluZSBLRVlfV0FLRVVQIDE0MwogI2RlZmluZSBLRVlfRklMRSAxNDQKICNkZWZpbmUgS0VZX1NFTkRGSUxFIDE0NQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS0VZX0RFTEVURUZJTEUgMTQ2CiAjZGVmaW5lIEtFWV9YRkVSIDE0NwogI2RlZmluZSBLRVlfUFJPRzEgMTQ4CiAjZGVmaW5lIEtFWV9QUk9HMiAxNDkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtFWV9XV1cgMTUwCiAjZGVmaW5lIEtFWV9NU0RPUyAxNTEKICNkZWZpbmUgS0VZX0NPRkZFRSAxNTIKICNkZWZpbmUgS0VZX1NDUkVFTkxPQ0sgS0VZX0NPRkZFRQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS0VZX0RJUkVDVElPTiAxNTMKICNkZWZpbmUgS0VZX0NZQ0xFV0lORE9XUyAxNTQKICNkZWZpbmUgS0VZX01BSUwgMTU1CiAjZGVmaW5lIEtFWV9CT09LTUFSS1MgMTU2CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLRVlfQ09NUFVURVIgMTU3CiAjZGVmaW5lIEtFWV9CQUNLIDE1OAogI2RlZmluZSBLRVlfRk9SV0FSRCAxNTkKICNkZWZpbmUgS0VZX0NMT1NFQ0QgMTYwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLRVlfRUpFQ1RDRCAxNjEKICNkZWZpbmUgS0VZX0VKRUNUQ0xPU0VDRCAxNjIKICNkZWZpbmUgS0VZX05FWFRTT05HIDE2MwogI2RlZmluZSBLRVlfUExBWVBBVVNFIDE2NAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS0VZX1BSRVZJT1VTU09ORyAxNjUKICNkZWZpbmUgS0VZX1NUT1BDRCAxNjYKICNkZWZpbmUgS0VZX1JFQ09SRCAxNjcKICNkZWZpbmUgS0VZX1JFV0lORCAxNjgKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtFWV9QSE9ORSAxNjkKICNkZWZpbmUgS0VZX0lTTyAxNzAKICNkZWZpbmUgS0VZX0NPTkZJRyAxNzEKICNkZWZpbmUgS0VZX0hPTUVQQUdFIDE3MgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS0VZX1JFRlJFU0ggMTczCiAjZGVmaW5lIEtFWV9FWElUIDE3NAogI2RlZmluZSBLRVlfTU9WRSAxNzUKICNkZWZpbmUgS0VZX0VESVQgMTc2CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLRVlfU0NST0xMVVAgMTc3CiAjZGVmaW5lIEtFWV9TQ1JPTExET1dOIDE3OAogI2RlZmluZSBLRVlfS1BMRUZUUEFSRU4gMTc5CiAjZGVmaW5lIEtFWV9LUFJJR0hUUEFSRU4gMTgwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLRVlfTkVXIDE4MQogI2RlZmluZSBLRVlfUkVETyAxODIKICNkZWZpbmUgS0VZX0YxMyAxODMKICNkZWZpbmUgS0VZX0YxNCAxODQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtFWV9GMTUgMTg1CiAjZGVmaW5lIEtFWV9GMTYgMTg2CiAjZGVmaW5lIEtFWV9GMTcgMTg3CiAjZGVmaW5lIEtFWV9GMTggMTg4CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLRVlfRjE5IDE4OQogI2RlZmluZSBLRVlfRjIwIDE5MAogI2RlZmluZSBLRVlfRjIxIDE5MQogI2RlZmluZSBLRVlfRjIyIDE5MgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS0VZX0YyMyAxOTMKICNkZWZpbmUgS0VZX0YyNCAxOTQKICNkZWZpbmUgS0VZX1BMQVlDRCAyMDAKICNkZWZpbmUgS0VZX1BBVVNFQ0QgMjAxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLRVlfUFJPRzMgMjAyCiAjZGVmaW5lIEtFWV9QUk9HNCAyMDMKICNkZWZpbmUgS0VZX0RBU0hCT0FSRCAyMDQKICNkZWZpbmUgS0VZX1NVU1BFTkQgMjA1CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLRVlfQ0xPU0UgMjA2CiAjZGVmaW5lIEtFWV9QTEFZIDIwNwogI2RlZmluZSBLRVlfRkFTVEZPUldBUkQgMjA4CiAjZGVmaW5lIEtFWV9CQVNTQk9PU1QgMjA5CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLRVlfUFJJTlQgMjEwCiAjZGVmaW5lIEtFWV9IUCAyMTEKICNkZWZpbmUgS0VZX0NBTUVSQSAyMTIKICNkZWZpbmUgS0VZX1NPVU5EIDIxMworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS0VZX1FVRVNUSU9OIDIxNAogI2RlZmluZSBLRVlfRU1BSUwgMjE1CiAjZGVmaW5lIEtFWV9DSEFUIDIxNgogI2RlZmluZSBLRVlfU0VBUkNIIDIxNworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS0VZX0NPTk5FQ1QgMjE4CiAjZGVmaW5lIEtFWV9GSU5BTkNFIDIxOQogI2RlZmluZSBLRVlfU1BPUlQgMjIwCiAjZGVmaW5lIEtFWV9TSE9QIDIyMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS0VZX0FMVEVSQVNFIDIyMgogI2RlZmluZSBLRVlfQ0FOQ0VMIDIyMwogI2RlZmluZSBLRVlfQlJJR0hUTkVTU0RPV04gMjI0CiAjZGVmaW5lIEtFWV9CUklHSFRORVNTVVAgMjI1CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLRVlfTUVESUEgMjI2CiAjZGVmaW5lIEtFWV9TV0lUQ0hWSURFT01PREUgMjI3CiAjZGVmaW5lIEtFWV9LQkRJTExVTVRPR0dMRSAyMjgKICNkZWZpbmUgS0VZX0tCRElMTFVNRE9XTiAyMjkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtFWV9LQkRJTExVTVVQIDIzMAogI2RlZmluZSBLRVlfU0VORCAyMzEKICNkZWZpbmUgS0VZX1JFUExZIDIzMgogI2RlZmluZSBLRVlfRk9SV0FSRE1BSUwgMjMzCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLRVlfU0FWRSAyMzQKICNkZWZpbmUgS0VZX0RPQ1VNRU5UUyAyMzUKICNkZWZpbmUgS0VZX0JBVFRFUlkgMjM2CiAjZGVmaW5lIEtFWV9CTFVFVE9PVEggMjM3CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLRVlfV0xBTiAyMzgKICNkZWZpbmUgS0VZX1VXQiAyMzkKICNkZWZpbmUgS0VZX1VOS05PV04gMjQwCiAjZGVmaW5lIEtFWV9WSURFT19ORVhUIDI0MQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS0VZX1ZJREVPX1BSRVYgMjQyCiAjZGVmaW5lIEtFWV9CUklHSFRORVNTX0NZQ0xFIDI0MwogI2RlZmluZSBLRVlfQlJJR0hUTkVTU19aRVJPIDI0NAogI2RlZmluZSBLRVlfRElTUExBWV9PRkYgMjQ1CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLRVlfV0lNQVggMjQ2CiAjZGVmaW5lIEtFWV9SRktJTEwgMjQ3CisjZGVmaW5lIEtFWV9NSUNNVVRFIDI0OAogI2RlZmluZSBCVE5fTUlTQyAweDEwMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQlROXzAgMHgxMDAKICNkZWZpbmUgQlROXzEgMHgxMDEKICNkZWZpbmUgQlROXzIgMHgxMDIKICNkZWZpbmUgQlROXzMgMHgxMDMKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEJUTl80IDB4MTA0CiAjZGVmaW5lIEJUTl81IDB4MTA1CiAjZGVmaW5lIEJUTl82IDB4MTA2CiAjZGVmaW5lIEJUTl83IDB4MTA3CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBCVE5fOCAweDEwOAogI2RlZmluZSBCVE5fOSAweDEwOQogI2RlZmluZSBCVE5fTU9VU0UgMHgxMTAKICNkZWZpbmUgQlROX0xFRlQgMHgxMTAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEJUTl9SSUdIVCAweDExMQogI2RlZmluZSBCVE5fTUlERExFIDB4MTEyCiAjZGVmaW5lIEJUTl9TSURFIDB4MTEzCiAjZGVmaW5lIEJUTl9FWFRSQSAweDExNAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQlROX0ZPUldBUkQgMHgxMTUKICNkZWZpbmUgQlROX0JBQ0sgMHgxMTYKICNkZWZpbmUgQlROX1RBU0sgMHgxMTcKICNkZWZpbmUgQlROX0pPWVNUSUNLIDB4MTIwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBCVE5fVFJJR0dFUiAweDEyMAogI2RlZmluZSBCVE5fVEhVTUIgMHgxMjEKICNkZWZpbmUgQlROX1RIVU1CMiAweDEyMgogI2RlZmluZSBCVE5fVE9QIDB4MTIzCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBCVE5fVE9QMiAweDEyNAogI2RlZmluZSBCVE5fUElOS0lFIDB4MTI1CiAjZGVmaW5lIEJUTl9CQVNFIDB4MTI2CiAjZGVmaW5lIEJUTl9CQVNFMiAweDEyNworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQlROX0JBU0UzIDB4MTI4CiAjZGVmaW5lIEJUTl9CQVNFNCAweDEyOQogI2RlZmluZSBCVE5fQkFTRTUgMHgxMmEKICNkZWZpbmUgQlROX0JBU0U2IDB4MTJiCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBCVE5fREVBRCAweDEyZgogI2RlZmluZSBCVE5fR0FNRVBBRCAweDEzMAogI2RlZmluZSBCVE5fQSAweDEzMAogI2RlZmluZSBCVE5fQiAweDEzMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQlROX0MgMHgxMzIKICNkZWZpbmUgQlROX1ggMHgxMzMKICNkZWZpbmUgQlROX1kgMHgxMzQKICNkZWZpbmUgQlROX1ogMHgxMzUKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEJUTl9UTCAweDEzNgogI2RlZmluZSBCVE5fVFIgMHgxMzcKICNkZWZpbmUgQlROX1RMMiAweDEzOAogI2RlZmluZSBCVE5fVFIyIDB4MTM5CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBCVE5fU0VMRUNUIDB4MTNhCiAjZGVmaW5lIEJUTl9TVEFSVCAweDEzYgogI2RlZmluZSBCVE5fTU9ERSAweDEzYwogI2RlZmluZSBCVE5fVEhVTUJMIDB4MTNkCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBCVE5fVEhVTUJSIDB4MTNlCiAjZGVmaW5lIEJUTl9ESUdJIDB4MTQwCiAjZGVmaW5lIEJUTl9UT09MX1BFTiAweDE0MAogI2RlZmluZSBCVE5fVE9PTF9SVUJCRVIgMHgxNDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEJUTl9UT09MX0JSVVNIIDB4MTQyCiAjZGVmaW5lIEJUTl9UT09MX1BFTkNJTCAweDE0MwogI2RlZmluZSBCVE5fVE9PTF9BSVJCUlVTSCAweDE0NAogI2RlZmluZSBCVE5fVE9PTF9GSU5HRVIgMHgxNDUKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEJUTl9UT09MX01PVVNFIDB4MTQ2CiAjZGVmaW5lIEJUTl9UT09MX0xFTlMgMHgxNDcKKyNkZWZpbmUgQlROX1RPT0xfUVVJTlRUQVAgMHgxNDgKICNkZWZpbmUgQlROX1RPVUNIIDB4MTRhCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBCVE5fU1RZTFVTIDB4MTRiCiAjZGVmaW5lIEJUTl9TVFlMVVMyIDB4MTRjCiAjZGVmaW5lIEJUTl9UT09MX0RPVUJMRVRBUCAweDE0ZAogI2RlZmluZSBCVE5fVE9PTF9UUklQTEVUQVAgMHgxNGUKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEJUTl9UT09MX1FVQURUQVAgMHgxNGYKICNkZWZpbmUgQlROX1dIRUVMIDB4MTUwCiAjZGVmaW5lIEJUTl9HRUFSX0RPV04gMHgxNTAKICNkZWZpbmUgQlROX0dFQVJfVVAgMHgxNTEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtFWV9PSyAweDE2MAogI2RlZmluZSBLRVlfU0VMRUNUIDB4MTYxCiAjZGVmaW5lIEtFWV9HT1RPIDB4MTYyCiAjZGVmaW5lIEtFWV9DTEVBUiAweDE2MworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS0VZX1BPV0VSMiAweDE2NAogI2RlZmluZSBLRVlfT1BUSU9OIDB4MTY1CiAjZGVmaW5lIEtFWV9JTkZPIDB4MTY2CiAjZGVmaW5lIEtFWV9USU1FIDB4MTY3CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLRVlfVkVORE9SIDB4MTY4CiAjZGVmaW5lIEtFWV9BUkNISVZFIDB4MTY5CiAjZGVmaW5lIEtFWV9QUk9HUkFNIDB4MTZhCiAjZGVmaW5lIEtFWV9DSEFOTkVMIDB4MTZiCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLRVlfRkFWT1JJVEVTIDB4MTZjCiAjZGVmaW5lIEtFWV9FUEcgMHgxNmQKICNkZWZpbmUgS0VZX1BWUiAweDE2ZQogI2RlZmluZSBLRVlfTUhQIDB4MTZmCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLRVlfTEFOR1VBR0UgMHgxNzAKICNkZWZpbmUgS0VZX1RJVExFIDB4MTcxCiAjZGVmaW5lIEtFWV9TVUJUSVRMRSAweDE3MgogI2RlZmluZSBLRVlfQU5HTEUgMHgxNzMKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtFWV9aT09NIDB4MTc0CiAjZGVmaW5lIEtFWV9NT0RFIDB4MTc1CiAjZGVmaW5lIEtFWV9LRVlCT0FSRCAweDE3NgogI2RlZmluZSBLRVlfU0NSRUVOIDB4MTc3CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLRVlfUEMgMHgxNzgKICNkZWZpbmUgS0VZX1RWIDB4MTc5CiAjZGVmaW5lIEtFWV9UVjIgMHgxN2EKICNkZWZpbmUgS0VZX1ZDUiAweDE3YgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS0VZX1ZDUjIgMHgxN2MKICNkZWZpbmUgS0VZX1NBVCAweDE3ZAogI2RlZmluZSBLRVlfU0FUMiAweDE3ZQogI2RlZmluZSBLRVlfQ0QgMHgxN2YKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtFWV9UQVBFIDB4MTgwCiAjZGVmaW5lIEtFWV9SQURJTyAweDE4MQogI2RlZmluZSBLRVlfVFVORVIgMHgxODIKICNkZWZpbmUgS0VZX1BMQVlFUiAweDE4MworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS0VZX1RFWFQgMHgxODQKICNkZWZpbmUgS0VZX0RWRCAweDE4NQogI2RlZmluZSBLRVlfQVVYIDB4MTg2CiAjZGVmaW5lIEtFWV9NUDMgMHgxODcKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtFWV9BVURJTyAweDE4OAogI2RlZmluZSBLRVlfVklERU8gMHgxODkKICNkZWZpbmUgS0VZX0RJUkVDVE9SWSAweDE4YQogI2RlZmluZSBLRVlfTElTVCAweDE4YgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS0VZX01FTU8gMHgxOGMKICNkZWZpbmUgS0VZX0NBTEVOREFSIDB4MThkCiAjZGVmaW5lIEtFWV9SRUQgMHgxOGUKICNkZWZpbmUgS0VZX0dSRUVOIDB4MThmCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLRVlfWUVMTE9XIDB4MTkwCiAjZGVmaW5lIEtFWV9CTFVFIDB4MTkxCiAjZGVmaW5lIEtFWV9DSEFOTkVMVVAgMHgxOTIKICNkZWZpbmUgS0VZX0NIQU5ORUxET1dOIDB4MTkzCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLRVlfRklSU1QgMHgxOTQKICNkZWZpbmUgS0VZX0xBU1QgMHgxOTUKICNkZWZpbmUgS0VZX0FCIDB4MTk2CiAjZGVmaW5lIEtFWV9ORVhUIDB4MTk3CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLRVlfUkVTVEFSVCAweDE5OAogI2RlZmluZSBLRVlfU0xPVyAweDE5OQogI2RlZmluZSBLRVlfU0hVRkZMRSAweDE5YQogI2RlZmluZSBLRVlfQlJFQUsgMHgxOWIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtFWV9QUkVWSU9VUyAweDE5YwogI2RlZmluZSBLRVlfRElHSVRTIDB4MTlkCiAjZGVmaW5lIEtFWV9URUVOIDB4MTllCiAjZGVmaW5lIEtFWV9UV0VOIDB4MTlmCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLRVlfVklERU9QSE9ORSAweDFhMAogI2RlZmluZSBLRVlfR0FNRVMgMHgxYTEKICNkZWZpbmUgS0VZX1pPT01JTiAweDFhMgogI2RlZmluZSBLRVlfWk9PTU9VVCAweDFhMworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS0VZX1pPT01SRVNFVCAweDFhNAogI2RlZmluZSBLRVlfV09SRFBST0NFU1NPUiAweDFhNQogI2RlZmluZSBLRVlfRURJVE9SIDB4MWE2CiAjZGVmaW5lIEtFWV9TUFJFQURTSEVFVCAweDFhNworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS0VZX0dSQVBISUNTRURJVE9SIDB4MWE4CiAjZGVmaW5lIEtFWV9QUkVTRU5UQVRJT04gMHgxYTkKICNkZWZpbmUgS0VZX0RBVEFCQVNFIDB4MWFhCiAjZGVmaW5lIEtFWV9ORVdTIDB4MWFiCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLRVlfVk9JQ0VNQUlMIDB4MWFjCiAjZGVmaW5lIEtFWV9BRERSRVNTQk9PSyAweDFhZAogI2RlZmluZSBLRVlfTUVTU0VOR0VSIDB4MWFlCiAjZGVmaW5lIEtFWV9ESVNQTEFZVE9HR0xFIDB4MWFmCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLRVlfU1BFTExDSEVDSyAweDFiMAogI2RlZmluZSBLRVlfTE9HT0ZGIDB4MWIxCiAjZGVmaW5lIEtFWV9ET0xMQVIgMHgxYjIKICNkZWZpbmUgS0VZX0VVUk8gMHgxYjMKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtFWV9GUkFNRUJBQ0sgMHgxYjQKICNkZWZpbmUgS0VZX0ZSQU1FRk9SV0FSRCAweDFiNQogI2RlZmluZSBLRVlfQ09OVEVYVF9NRU5VIDB4MWI2CiAjZGVmaW5lIEtFWV9NRURJQV9SRVBFQVQgMHgxYjcKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtFWV8xMENIQU5ORUxTVVAgMHgxYjgKICNkZWZpbmUgS0VZXzEwQ0hBTk5FTFNET1dOIDB4MWI5CiAjZGVmaW5lIEtFWV9JTUFHRVMgMHgxYmEKICNkZWZpbmUgS0VZX0RFTF9FT0wgMHgxYzAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtFWV9ERUxfRU9TIDB4MWMxCiAjZGVmaW5lIEtFWV9JTlNfTElORSAweDFjMgogI2RlZmluZSBLRVlfREVMX0xJTkUgMHgxYzMKICNkZWZpbmUgS0VZX0ZOIDB4MWQwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLRVlfRk5fRVNDIDB4MWQxCiAjZGVmaW5lIEtFWV9GTl9GMSAweDFkMgogI2RlZmluZSBLRVlfRk5fRjIgMHgxZDMKICNkZWZpbmUgS0VZX0ZOX0YzIDB4MWQ0CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLRVlfRk5fRjQgMHgxZDUKICNkZWZpbmUgS0VZX0ZOX0Y1IDB4MWQ2CiAjZGVmaW5lIEtFWV9GTl9GNiAweDFkNwogI2RlZmluZSBLRVlfRk5fRjcgMHgxZDgKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtFWV9GTl9GOCAweDFkOQogI2RlZmluZSBLRVlfRk5fRjkgMHgxZGEKICNkZWZpbmUgS0VZX0ZOX0YxMCAweDFkYgogI2RlZmluZSBLRVlfRk5fRjExIDB4MWRjCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLRVlfRk5fRjEyIDB4MWRkCiAjZGVmaW5lIEtFWV9GTl8xIDB4MWRlCiAjZGVmaW5lIEtFWV9GTl8yIDB4MWRmCiAjZGVmaW5lIEtFWV9GTl9EIDB4MWUwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLRVlfRk5fRSAweDFlMQogI2RlZmluZSBLRVlfRk5fRiAweDFlMgogI2RlZmluZSBLRVlfRk5fUyAweDFlMwogI2RlZmluZSBLRVlfRk5fQiAweDFlNAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS0VZX0JSTF9ET1QxIDB4MWYxCiAjZGVmaW5lIEtFWV9CUkxfRE9UMiAweDFmMgogI2RlZmluZSBLRVlfQlJMX0RPVDMgMHgxZjMKICNkZWZpbmUgS0VZX0JSTF9ET1Q0IDB4MWY0CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLRVlfQlJMX0RPVDUgMHgxZjUKICNkZWZpbmUgS0VZX0JSTF9ET1Q2IDB4MWY2CiAjZGVmaW5lIEtFWV9CUkxfRE9UNyAweDFmNwogI2RlZmluZSBLRVlfQlJMX0RPVDggMHgxZjgKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtFWV9CUkxfRE9UOSAweDFmOQogI2RlZmluZSBLRVlfQlJMX0RPVDEwIDB4MWZhCiAjZGVmaW5lIEtFWV9OVU1FUklDXzAgMHgyMDAKICNkZWZpbmUgS0VZX05VTUVSSUNfMSAweDIwMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS0VZX05VTUVSSUNfMiAweDIwMgogI2RlZmluZSBLRVlfTlVNRVJJQ18zIDB4MjAzCiAjZGVmaW5lIEtFWV9OVU1FUklDXzQgMHgyMDQKICNkZWZpbmUgS0VZX05VTUVSSUNfNSAweDIwNQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS0VZX05VTUVSSUNfNiAweDIwNgogI2RlZmluZSBLRVlfTlVNRVJJQ183IDB4MjA3CiAjZGVmaW5lIEtFWV9OVU1FUklDXzggMHgyMDgKICNkZWZpbmUgS0VZX05VTUVSSUNfOSAweDIwOQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS0VZX05VTUVSSUNfU1RBUiAweDIwYQogI2RlZmluZSBLRVlfTlVNRVJJQ19QT1VORCAweDIwYgogI2RlZmluZSBLRVlfQ0FNRVJBX0ZPQ1VTIDB4MjEwCiAjZGVmaW5lIEtFWV9XUFNfQlVUVE9OIDB4MjExCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLRVlfVE9VQ0hQQURfVE9HR0xFIDB4MjEyCiAjZGVmaW5lIEtFWV9UT1VDSFBBRF9PTiAweDIxMwogI2RlZmluZSBLRVlfVE9VQ0hQQURfT0ZGIDB4MjE0CiAjZGVmaW5lIEtFWV9DQU1FUkFfWk9PTUlOIDB4MjE1CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLRVlfQ0FNRVJBX1pPT01PVVQgMHgyMTYKICNkZWZpbmUgS0VZX0NBTUVSQV9VUCAweDIxNwogI2RlZmluZSBLRVlfQ0FNRVJBX0RPV04gMHgyMTgKICNkZWZpbmUgS0VZX0NBTUVSQV9MRUZUIDB4MjE5CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLRVlfQ0FNRVJBX1JJR0hUIDB4MjFhCiAjZGVmaW5lIEJUTl9UUklHR0VSX0hBUFBZIDB4MmMwCiAjZGVmaW5lIEJUTl9UUklHR0VSX0hBUFBZMSAweDJjMAogI2RlZmluZSBCVE5fVFJJR0dFUl9IQVBQWTIgMHgyYzEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEJUTl9UUklHR0VSX0hBUFBZMyAweDJjMgogI2RlZmluZSBCVE5fVFJJR0dFUl9IQVBQWTQgMHgyYzMKICNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFk1IDB4MmM0CiAjZGVmaW5lIEJUTl9UUklHR0VSX0hBUFBZNiAweDJjNQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFk3IDB4MmM2CiAjZGVmaW5lIEJUTl9UUklHR0VSX0hBUFBZOCAweDJjNwogI2RlZmluZSBCVE5fVFJJR0dFUl9IQVBQWTkgMHgyYzgKICNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkxMCAweDJjOQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkxMSAweDJjYQogI2RlZmluZSBCVE5fVFJJR0dFUl9IQVBQWTEyIDB4MmNiCiAjZGVmaW5lIEJUTl9UUklHR0VSX0hBUFBZMTMgMHgyY2MKICNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkxNCAweDJjZAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkxNSAweDJjZQogI2RlZmluZSBCVE5fVFJJR0dFUl9IQVBQWTE2IDB4MmNmCiAjZGVmaW5lIEJUTl9UUklHR0VSX0hBUFBZMTcgMHgyZDAKICNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkxOCAweDJkMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkxOSAweDJkMgogI2RlZmluZSBCVE5fVFJJR0dFUl9IQVBQWTIwIDB4MmQzCiAjZGVmaW5lIEJUTl9UUklHR0VSX0hBUFBZMjEgMHgyZDQKICNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkyMiAweDJkNQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkyMyAweDJkNgogI2RlZmluZSBCVE5fVFJJR0dFUl9IQVBQWTI0IDB4MmQ3CiAjZGVmaW5lIEJUTl9UUklHR0VSX0hBUFBZMjUgMHgyZDgKICNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkyNiAweDJkOQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkyNyAweDJkYQogI2RlZmluZSBCVE5fVFJJR0dFUl9IQVBQWTI4IDB4MmRiCiAjZGVmaW5lIEJUTl9UUklHR0VSX0hBUFBZMjkgMHgyZGMKICNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkzMCAweDJkZAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkzMSAweDJkZQogI2RlZmluZSBCVE5fVFJJR0dFUl9IQVBQWTMyIDB4MmRmCiAjZGVmaW5lIEJUTl9UUklHR0VSX0hBUFBZMzMgMHgyZTAKICNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkzNCAweDJlMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkzNSAweDJlMgogI2RlZmluZSBCVE5fVFJJR0dFUl9IQVBQWTM2IDB4MmUzCiAjZGVmaW5lIEJUTl9UUklHR0VSX0hBUFBZMzcgMHgyZTQKICNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkzOCAweDJlNQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQlROX1RSSUdHRVJfSEFQUFkzOSAweDJlNgogI2RlZmluZSBCVE5fVFJJR0dFUl9IQVBQWTQwIDB4MmU3CiAjZGVmaW5lIEtFWV9NSU5fSU5URVJFU1RJTkcgS0VZX01VVEUKICNkZWZpbmUgS0VZX01BWCAweDJmZgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS0VZX0NOVCAoS0VZX01BWCsxKQogI2RlZmluZSBSRUxfWCAweDAwCiAjZGVmaW5lIFJFTF9ZIDB4MDEKICNkZWZpbmUgUkVMX1ogMHgwMgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUkVMX1JYIDB4MDMKICNkZWZpbmUgUkVMX1JZIDB4MDQKICNkZWZpbmUgUkVMX1JaIDB4MDUKICNkZWZpbmUgUkVMX0hXSEVFTCAweDA2CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBSRUxfRElBTCAweDA3CiAjZGVmaW5lIFJFTF9XSEVFTCAweDA4CiAjZGVmaW5lIFJFTF9NSVNDIDB4MDkKICNkZWZpbmUgUkVMX01BWCAweDBmCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBSRUxfQ05UIChSRUxfTUFYKzEpCiAjZGVmaW5lIEFCU19YIDB4MDAKICNkZWZpbmUgQUJTX1kgMHgwMQogI2RlZmluZSBBQlNfWiAweDAyCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBQlNfUlggMHgwMwogI2RlZmluZSBBQlNfUlkgMHgwNAogI2RlZmluZSBBQlNfUlogMHgwNQogI2RlZmluZSBBQlNfVEhST1RUTEUgMHgwNgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQUJTX1JVRERFUiAweDA3CiAjZGVmaW5lIEFCU19XSEVFTCAweDA4CiAjZGVmaW5lIEFCU19HQVMgMHgwOQogI2RlZmluZSBBQlNfQlJBS0UgMHgwYQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQUJTX0hBVDBYIDB4MTAKICNkZWZpbmUgQUJTX0hBVDBZIDB4MTEKICNkZWZpbmUgQUJTX0hBVDFYIDB4MTIKICNkZWZpbmUgQUJTX0hBVDFZIDB4MTMKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFCU19IQVQyWCAweDE0CiAjZGVmaW5lIEFCU19IQVQyWSAweDE1CiAjZGVmaW5lIEFCU19IQVQzWCAweDE2CiAjZGVmaW5lIEFCU19IQVQzWSAweDE3CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBQlNfUFJFU1NVUkUgMHgxOAogI2RlZmluZSBBQlNfRElTVEFOQ0UgMHgxOQogI2RlZmluZSBBQlNfVElMVF9YIDB4MWEKICNkZWZpbmUgQUJTX1RJTFRfWSAweDFiCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBQlNfVE9PTF9XSURUSCAweDFjCiAjZGVmaW5lIEFCU19WT0xVTUUgMHgyMAogI2RlZmluZSBBQlNfTUlTQyAweDI4CiAjZGVmaW5lIEFCU19NVF9TTE9UIDB4MmYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFCU19NVF9UT1VDSF9NQUpPUiAweDMwCiAjZGVmaW5lIEFCU19NVF9UT1VDSF9NSU5PUiAweDMxCiAjZGVmaW5lIEFCU19NVF9XSURUSF9NQUpPUiAweDMyCiAjZGVmaW5lIEFCU19NVF9XSURUSF9NSU5PUiAweDMzCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBQlNfTVRfT1JJRU5UQVRJT04gMHgzNAogI2RlZmluZSBBQlNfTVRfUE9TSVRJT05fWCAweDM1CiAjZGVmaW5lIEFCU19NVF9QT1NJVElPTl9ZIDB4MzYKICNkZWZpbmUgQUJTX01UX1RPT0xfVFlQRSAweDM3CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBQlNfTVRfQkxPQl9JRCAweDM4CiAjZGVmaW5lIEFCU19NVF9UUkFDS0lOR19JRCAweDM5CiAjZGVmaW5lIEFCU19NVF9QUkVTU1VSRSAweDNhCiAjZGVmaW5lIEFCU19NVF9ESVNUQU5DRSAweDNiCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBQlNfTUFYIDB4M2YKICNkZWZpbmUgQUJTX0NOVCAoQUJTX01BWCsxKQogI2RlZmluZSBTV19MSUQgMHgwMAogI2RlZmluZSBTV19UQUJMRVRfTU9ERSAweDAxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTV19IRUFEUEhPTkVfSU5TRVJUIDB4MDIKICNkZWZpbmUgU1dfUkZLSUxMX0FMTCAweDAzCiAjZGVmaW5lIFNXX1JBRElPIFNXX1JGS0lMTF9BTEwKICNkZWZpbmUgU1dfTUlDUk9QSE9ORV9JTlNFUlQgMHgwNAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU1dfRE9DSyAweDA1CiAjZGVmaW5lIFNXX0xJTkVPVVRfSU5TRVJUIDB4MDYKICNkZWZpbmUgU1dfSkFDS19QSFlTSUNBTF9JTlNFUlQgMHgwNwogI2RlZmluZSBTV19WSURFT09VVF9JTlNFUlQgMHgwOAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU1dfQ0FNRVJBX0xFTlNfQ09WRVIgMHgwOQogI2RlZmluZSBTV19LRVlQQURfU0xJREUgMHgwYQogI2RlZmluZSBTV19GUk9OVF9QUk9YSU1JVFkgMHgwYgogI2RlZmluZSBTV19ST1RBVEVfTE9DSyAweDBjCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBTV19MSU5FSU5fSU5TRVJUIDB4MGQKICNkZWZpbmUgU1dfTUFYIDB4MGYKICNkZWZpbmUgU1dfQ05UIChTV19NQVgrMSkKICNkZWZpbmUgTVNDX1NFUklBTCAweDAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNU0NfUFVMU0VMRUQgMHgwMQogI2RlZmluZSBNU0NfR0VTVFVSRSAweDAyCiAjZGVmaW5lIE1TQ19SQVcgMHgwMwogI2RlZmluZSBNU0NfU0NBTiAweDA0CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNU0NfTUFYIDB4MDcKICNkZWZpbmUgTVNDX0NOVCAoTVNDX01BWCsxKQogI2RlZmluZSBMRURfTlVNTCAweDAwCiAjZGVmaW5lIExFRF9DQVBTTCAweDAxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBMRURfU0NST0xMTCAweDAyCiAjZGVmaW5lIExFRF9DT01QT1NFIDB4MDMKICNkZWZpbmUgTEVEX0tBTkEgMHgwNAogI2RlZmluZSBMRURfU0xFRVAgMHgwNQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTEVEX1NVU1BFTkQgMHgwNgogI2RlZmluZSBMRURfTVVURSAweDA3CiAjZGVmaW5lIExFRF9NSVNDIDB4MDgKICNkZWZpbmUgTEVEX01BSUwgMHgwOQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTEVEX0NIQVJHSU5HIDB4MGEKICNkZWZpbmUgTEVEX01BWCAweDBmCiAjZGVmaW5lIExFRF9DTlQgKExFRF9NQVgrMSkKICNkZWZpbmUgUkVQX0RFTEFZIDB4MDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFJFUF9QRVJJT0QgMHgwMQogI2RlZmluZSBSRVBfTUFYIDB4MDEKICNkZWZpbmUgUkVQX0NOVCAoUkVQX01BWCsxKQogI2RlZmluZSBTTkRfQ0xJQ0sgMHgwMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU05EX0JFTEwgMHgwMQogI2RlZmluZSBTTkRfVE9ORSAweDAyCiAjZGVmaW5lIFNORF9NQVggMHgwNwogI2RlZmluZSBTTkRfQ05UIChTTkRfTUFYKzEpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJRF9CVVMgMAogI2RlZmluZSBJRF9WRU5ET1IgMQogI2RlZmluZSBJRF9QUk9EVUNUIDIKICNkZWZpbmUgSURfVkVSU0lPTiAzCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBCVVNfUENJIDB4MDEKICNkZWZpbmUgQlVTX0lTQVBOUCAweDAyCiAjZGVmaW5lIEJVU19VU0IgMHgwMwogI2RlZmluZSBCVVNfSElMIDB4MDQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEJVU19CTFVFVE9PVEggMHgwNQogI2RlZmluZSBCVVNfVklSVFVBTCAweDA2CiAjZGVmaW5lIEJVU19JU0EgMHgxMAogI2RlZmluZSBCVVNfSTgwNDIgMHgxMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQlVTX1hUS0JEIDB4MTIKICNkZWZpbmUgQlVTX1JTMjMyIDB4MTMKICNkZWZpbmUgQlVTX0dBTUVQT1JUIDB4MTQKICNkZWZpbmUgQlVTX1BBUlBPUlQgMHgxNQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQlVTX0FNSUdBIDB4MTYKICNkZWZpbmUgQlVTX0FEQiAweDE3CiAjZGVmaW5lIEJVU19JMkMgMHgxOAogI2RlZmluZSBCVVNfSE9TVCAweDE5CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBCVVNfR1NDIDB4MUEKICNkZWZpbmUgQlVTX0FUQVJJIDB4MUIKICNkZWZpbmUgQlVTX1NQSSAweDFDCiAjZGVmaW5lIE1UX1RPT0xfRklOR0VSIDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1UX1RPT0xfUEVOIDEKICNkZWZpbmUgTVRfVE9PTF9NQVggMQogI2RlZmluZSBGRl9TVEFUVVNfU1RPUFBFRCAweDAwCiAjZGVmaW5lIEZGX1NUQVRVU19QTEFZSU5HIDB4MDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEZGX1NUQVRVU19NQVggMHgwMQogc3RydWN0IGZmX3JlcGxheSB7CiAgX191MTYgbGVuZ3RoOwogIF9fdTE2IGRlbGF5OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiBzdHJ1Y3QgZmZfdHJpZ2dlciB7CiAgX191MTYgYnV0dG9uOwogIF9fdTE2IGludGVydmFsOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiBzdHJ1Y3QgZmZfZW52ZWxvcGUgewogIF9fdTE2IGF0dGFja19sZW5ndGg7CiAgX191MTYgYXR0YWNrX2xldmVsOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UxNiBmYWRlX2xlbmd0aDsKICBfX3UxNiBmYWRlX2xldmVsOwogfTsKIHN0cnVjdCBmZl9jb25zdGFudF9lZmZlY3QgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3MxNiBsZXZlbDsKICBzdHJ1Y3QgZmZfZW52ZWxvcGUgZW52ZWxvcGU7CiB9Owogc3RydWN0IGZmX3JhbXBfZWZmZWN0IHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX19zMTYgc3RhcnRfbGV2ZWw7CiAgX19zMTYgZW5kX2xldmVsOwogIHN0cnVjdCBmZl9lbnZlbG9wZSBlbnZlbG9wZTsKIH07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IGZmX2NvbmRpdGlvbl9lZmZlY3QgewogIF9fdTE2IHJpZ2h0X3NhdHVyYXRpb247CiAgX191MTYgbGVmdF9zYXR1cmF0aW9uOwogIF9fczE2IHJpZ2h0X2NvZWZmOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3MxNiBsZWZ0X2NvZWZmOwogIF9fdTE2IGRlYWRiYW5kOwogIF9fczE2IGNlbnRlcjsKIH07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IGZmX3BlcmlvZGljX2VmZmVjdCB7CiAgX191MTYgd2F2ZWZvcm07CiAgX191MTYgcGVyaW9kOwogIF9fczE2IG1hZ25pdHVkZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX19zMTYgb2Zmc2V0OwogIF9fdTE2IHBoYXNlOwogIHN0cnVjdCBmZl9lbnZlbG9wZSBlbnZlbG9wZTsKICBfX3UzMiBjdXN0b21fbGVuOwotIF9fczE2ICpjdXN0b21fZGF0YTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX19zMTYgX191c2VyICpjdXN0b21fZGF0YTsKIH07CiBzdHJ1Y3QgZmZfcnVtYmxlX2VmZmVjdCB7CiAgX191MTYgc3Ryb25nX21hZ25pdHVkZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MTYgd2Vha19tYWduaXR1ZGU7CiB9Owogc3RydWN0IGZmX2VmZmVjdCB7CiAgX191MTYgdHlwZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX19zMTYgaWQ7CiAgX191MTYgZGlyZWN0aW9uOwogIHN0cnVjdCBmZl90cmlnZ2VyIHRyaWdnZXI7CiAgc3RydWN0IGZmX3JlcGxheSByZXBsYXk7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuaW9uIHsKICBzdHJ1Y3QgZmZfY29uc3RhbnRfZWZmZWN0IGNvbnN0YW50OwogIHN0cnVjdCBmZl9yYW1wX2VmZmVjdCByYW1wOwogIHN0cnVjdCBmZl9wZXJpb2RpY19lZmZlY3QgcGVyaW9kaWM7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCBmZl9jb25kaXRpb25fZWZmZWN0IGNvbmRpdGlvblsyXTsKICBzdHJ1Y3QgZmZfcnVtYmxlX2VmZmVjdCBydW1ibGU7CiAgfSB1OwogfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEZGX1JVTUJMRSAweDUwCiAjZGVmaW5lIEZGX1BFUklPRElDIDB4NTEKICNkZWZpbmUgRkZfQ09OU1RBTlQgMHg1MgogI2RlZmluZSBGRl9TUFJJTkcgMHg1MworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRkZfRlJJQ1RJT04gMHg1NAogI2RlZmluZSBGRl9EQU1QRVIgMHg1NQogI2RlZmluZSBGRl9JTkVSVElBIDB4NTYKICNkZWZpbmUgRkZfUkFNUCAweDU3CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBGRl9FRkZFQ1RfTUlOIEZGX1JVTUJMRQogI2RlZmluZSBGRl9FRkZFQ1RfTUFYIEZGX1JBTVAKICNkZWZpbmUgRkZfU1FVQVJFIDB4NTgKICNkZWZpbmUgRkZfVFJJQU5HTEUgMHg1OQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRkZfU0lORSAweDVhCiAjZGVmaW5lIEZGX1NBV19VUCAweDViCiAjZGVmaW5lIEZGX1NBV19ET1dOIDB4NWMKICNkZWZpbmUgRkZfQ1VTVE9NIDB4NWQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEZGX1dBVkVGT1JNX01JTiBGRl9TUVVBUkUKICNkZWZpbmUgRkZfV0FWRUZPUk1fTUFYIEZGX0NVU1RPTQogI2RlZmluZSBGRl9HQUlOIDB4NjAKICNkZWZpbmUgRkZfQVVUT0NFTlRFUiAweDYxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBGRl9NQVggMHg3ZgogI2RlZmluZSBGRl9DTlQgKEZGX01BWCsxKQogI2VuZGlmCi0KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9pbnRlcnJ1cHQuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9pbnRlcnJ1cHQuaAppbmRleCBmNDg1OTJmLi43YWM4ZDVkIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvaW50ZXJydXB0LmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2ludGVycnVwdC5oCkBAIC03LDExNSArNywxMjUgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9MSU5VWF9JTlRFUlJVUFRfSAogI2RlZmluZSBfTElOVVhfSU5URVJSVVBUX0gKLQogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CiAjaW5jbHVkZSA8bGludXgvcHJlZW1wdC5oPgogI2luY2x1ZGUgPGxpbnV4L2NwdW1hc2suaD4KICNpbmNsdWRlIDxsaW51eC9pcnFyZXR1cm4uaD4KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjaW5jbHVkZSA8bGludXgvaGFyZGlycS5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvaXJxZmxhZ3MuaD4KICNpbmNsdWRlIDxhc20vYXRvbWljLmg+CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+Ci0KICNkZWZpbmUgSVJRRl9UUklHR0VSX05PTkUgMHgwMDAwMDAwMAogI2RlZmluZSBJUlFGX1RSSUdHRVJfUklTSU5HIDB4MDAwMDAwMDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIElSUUZfVFJJR0dFUl9GQUxMSU5HIDB4MDAwMDAwMDIKICNkZWZpbmUgSVJRRl9UUklHR0VSX0hJR0ggMHgwMDAwMDAwNAogI2RlZmluZSBJUlFGX1RSSUdHRVJfTE9XIDB4MDAwMDAwMDgKICNkZWZpbmUgSVJRRl9UUklHR0VSX01BU0sgKElSUUZfVFJJR0dFUl9ISUdIIHwgSVJRRl9UUklHR0VSX0xPVyB8ICAgSVJRRl9UUklHR0VSX1JJU0lORyB8IElSUUZfVFJJR0dFUl9GQUxMSU5HKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSVJRRl9UUklHR0VSX1BST0JFIDB4MDAwMDAwMTAKLQogI2RlZmluZSBJUlFGX0RJU0FCTEVEIDB4MDAwMDAwMjAKICNkZWZpbmUgSVJRRl9TQU1QTEVfUkFORE9NIDB4MDAwMDAwNDAKICNkZWZpbmUgSVJRRl9TSEFSRUQgMHgwMDAwMDA4MAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSVJRRl9QUk9CRV9TSEFSRUQgMHgwMDAwMDEwMAogI2RlZmluZSBJUlFGX1RJTUVSIDB4MDAwMDAyMDAKICNkZWZpbmUgSVJRRl9QRVJDUFUgMHgwMDAwMDQwMAotCiAjZGVmaW5lIFNBX0lOVEVSUlVQVCBJUlFGX0RJU0FCTEVECisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTQV9TQU1QTEVfUkFORE9NIElSUUZfU0FNUExFX1JBTkRPTQogI2RlZmluZSBTQV9TSElSUSBJUlFGX1NIQVJFRAogI2RlZmluZSBTQV9QUk9CRUlSUSBJUlFGX1BST0JFX1NIQVJFRAogI2RlZmluZSBTQV9QRVJDUFUgSVJRRl9QRVJDUFUKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU0FfVFJJR0dFUl9MT1cgSVJRRl9UUklHR0VSX0xPVwogI2RlZmluZSBTQV9UUklHR0VSX0hJR0ggSVJRRl9UUklHR0VSX0hJR0gKICNkZWZpbmUgU0FfVFJJR0dFUl9GQUxMSU5HIElSUUZfVFJJR0dFUl9GQUxMSU5HCiAjZGVmaW5lIFNBX1RSSUdHRVJfUklTSU5HIElSUUZfVFJJR0dFUl9SSVNJTkcKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNBX1RSSUdHRVJfTUFTSyBJUlFGX1RSSUdHRVJfTUFTSwotCiBzdHJ1Y3QgaXJxYWN0aW9uIHsKICBpcnFyZXR1cm5fdCAoKmhhbmRsZXIpKGludCwgdm9pZCAqLCBzdHJ1Y3QgcHRfcmVncyAqKTsKICB1bnNpZ25lZCBsb25nIGZsYWdzOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBjcHVtYXNrX3QgbWFzazsKICBjb25zdCBjaGFyICpuYW1lOwogIHZvaWQgKmRldl9pZDsKICBzdHJ1Y3QgaXJxYWN0aW9uICpuZXh0OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBpbnQgaXJxOwogIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqZGlyOwogfTsKLQogI2RlZmluZSBsb2NhbF9pcnFfZW5hYmxlX2luX2hhcmRpcnEoKSBsb2NhbF9pcnFfZW5hYmxlKCkKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgZGlzYWJsZV9pcnFfbm9zeW5jX2xvY2tkZXAoaXJxKSBkaXNhYmxlX2lycV9ub3N5bmMoaXJxKQogI2RlZmluZSBkaXNhYmxlX2lycV9sb2NrZGVwKGlycSkgZGlzYWJsZV9pcnEoaXJxKQogI2RlZmluZSBlbmFibGVfaXJxX2xvY2tkZXAoaXJxKSBlbmFibGVfaXJxKGlycSkKLQogI2lmbmRlZiBfX0FSQ0hfU0VUX1NPRlRJUlFfUEVORElORworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgc2V0X3NvZnRpcnFfcGVuZGluZyh4KSAobG9jYWxfc29mdGlycV9wZW5kaW5nKCkgPSAoeCkpCiAjZGVmaW5lIG9yX3NvZnRpcnFfcGVuZGluZyh4KSAobG9jYWxfc29mdGlycV9wZW5kaW5nKCkgfD0gKHgpKQogI2VuZGlmCi0KICNkZWZpbmUgc2F2ZV9mbGFncyh4KSBzYXZlX2ZsYWdzKCZ4KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgc2F2ZV9hbmRfY2xpKHgpIHNhdmVfYW5kX2NsaSgmeCkKLQogZW51bQogewogIEhJX1NPRlRJUlE9MCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVElNRVJfU09GVElSUSwKICBORVRfVFhfU09GVElSUSwKICBORVRfUlhfU09GVElSUSwKICBCTE9DS19TT0ZUSVJRLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBUQVNLTEVUX1NPRlRJUlEKIH07Ci0KIHN0cnVjdCBzb2Z0aXJxX2FjdGlvbgogeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB2b2lkICgqYWN0aW9uKShzdHJ1Y3Qgc29mdGlycV9hY3Rpb24gKik7CiAgdm9pZCAqZGF0YTsKIH07Ci0KICNkZWZpbmUgX19yYWlzZV9zb2Z0aXJxX2lycW9mZihucikgZG8geyBvcl9zb2Z0aXJxX3BlbmRpbmcoMVVMIDw8IChucikpOyB9IHdoaWxlICgwKQotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IHRhc2tsZXRfc3RydWN0CiB7CiAgc3RydWN0IHRhc2tsZXRfc3RydWN0ICpuZXh0OwogIHVuc2lnbmVkIGxvbmcgc3RhdGU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGF0b21pY190IGNvdW50OwogIHZvaWQgKCpmdW5jKSh1bnNpZ25lZCBsb25nKTsKICB1bnNpZ25lZCBsb25nIGRhdGE7CiB9OwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBERUNMQVJFX1RBU0tMRVQobmFtZSwgZnVuYywgZGF0YSkgIHN0cnVjdCB0YXNrbGV0X3N0cnVjdCBuYW1lID0geyBOVUxMLCAwLCBBVE9NSUNfSU5JVCgwKSwgZnVuYywgZGF0YSB9Ci0KICNkZWZpbmUgREVDTEFSRV9UQVNLTEVUX0RJU0FCTEVEKG5hbWUsIGZ1bmMsIGRhdGEpICBzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgbmFtZSA9IHsgTlVMTCwgMCwgQVRPTUlDX0lOSVQoMSksIGZ1bmMsIGRhdGEgfQotCiBlbnVtCiB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFRBU0tMRVRfU1RBVEVfU0NIRUQsCiAgVEFTS0xFVF9TVEFURV9SVU4KIH07Ci0KICNkZWZpbmUgdGFza2xldF90cnlsb2NrKHQpIDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIHRhc2tsZXRfdW5sb2NrX3dhaXQodCkgZG8geyB9IHdoaWxlICgwKQogI2RlZmluZSB0YXNrbGV0X3VubG9jayh0KSBkbyB7IH0gd2hpbGUgKDApCi0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2lvY3RsLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvaW9jdGwuaAppbmRleCA5ZWZiZWFiLi4zMzdkOTA5IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvaW9jdGwuaAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvaW9jdGwuaApAQCAtNywxMiArNywxNyBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX0xJTlVYX0lPQ1RMX0gKICNkZWZpbmUgX0xJTlVYX0lPQ1RMX0gKLQogI2luY2x1ZGUgPGFzbS9pb2N0bC5oPgotCiAjZW5kaWYKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9pb24uaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9pb24uaAppbmRleCBhYzhiMjY0Li5mMTg5MzlkIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvaW9uLmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2lvbi5oCkBAIC0yNyw0MSArMjcsNDUgQEAKICBJT05fSEVBUF9UWVBFX0NBUlZFT1VULAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBJT05fSEVBUF9UWVBFX0NVU1RPTSwKLSBJT05fTlVNX0hFQVBTLAorIElPTl9OVU1fSEVBUFMgPSAxNiwKIH07CiAjZGVmaW5lIElPTl9IRUFQX1NZU1RFTV9NQVNLICgxIDw8IElPTl9IRUFQX1RZUEVfU1lTVEVNKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSU9OX0hFQVBfU1lTVEVNX0NPTlRJR19NQVNLICgxIDw8IElPTl9IRUFQX1RZUEVfU1lTVEVNX0NPTlRJRykKICNkZWZpbmUgSU9OX0hFQVBfQ0FSVkVPVVRfTUFTSyAoMSA8PCBJT05fSEVBUF9UWVBFX0NBUlZFT1VUKQorI2RlZmluZSBJT05fRkxBR19DQUNIRUQgMQorI2RlZmluZSBJT05fRkxBR19DQUNIRURfTkVFRFNfU1lOQyAyCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IGlvbl9hbGxvY2F0aW9uX2RhdGEgewogIHNpemVfdCBsZW47Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHNpemVfdCBhbGlnbjsKKyB1bnNpZ25lZCBpbnQgaGVhcF9tYXNrOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBpbnQgZmxhZ3M7CiAgc3RydWN0IGlvbl9oYW5kbGUgKmhhbmRsZTsKIH07Ci0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IGlvbl9mZF9kYXRhIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IGlvbl9oYW5kbGUgKmhhbmRsZTsKICBpbnQgZmQ7CiB9OwotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBpb25faGFuZGxlX2RhdGEgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgaW9uX2hhbmRsZSAqaGFuZGxlOwogfTsKIHN0cnVjdCBpb25fY3VzdG9tX2RhdGEgewotLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBpbnQgY21kOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBsb25nIGFyZzsKIH07CiAjZGVmaW5lIElPTl9JT0NfTUFHSUMgJ0knCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJT05fSU9DX0FMTE9DIF9JT1dSKElPTl9JT0NfTUFHSUMsIDAsICAgc3RydWN0IGlvbl9hbGxvY2F0aW9uX2RhdGEpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJT05fSU9DX0ZSRUUgX0lPV1IoSU9OX0lPQ19NQUdJQywgMSwgc3RydWN0IGlvbl9oYW5kbGVfZGF0YSkKICNkZWZpbmUgSU9OX0lPQ19NQVAgX0lPV1IoSU9OX0lPQ19NQUdJQywgMiwgc3RydWN0IGlvbl9mZF9kYXRhKQogI2RlZmluZSBJT05fSU9DX1NIQVJFIF9JT1dSKElPTl9JT0NfTUFHSUMsIDQsIHN0cnVjdCBpb25fZmRfZGF0YSkKKyNkZWZpbmUgSU9OX0lPQ19JTVBPUlQgX0lPV1IoSU9OX0lPQ19NQUdJQywgNSwgc3RydWN0IGlvbl9mZF9kYXRhKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgSU9OX0lPQ19JTVBPUlQgX0lPV1IoSU9OX0lPQ19NQUdJQywgNSwgaW50KQorI2RlZmluZSBJT05fSU9DX1NZTkMgX0lPV1IoSU9OX0lPQ19NQUdJQywgNywgc3RydWN0IGlvbl9mZF9kYXRhKQogI2RlZmluZSBJT05fSU9DX0NVU1RPTSBfSU9XUihJT05fSU9DX01BR0lDLCA2LCBzdHJ1Y3QgaW9uX2N1c3RvbV9kYXRhKQogI2VuZGlmCi0KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9pb3BvcnQuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9pb3BvcnQuaAppbmRleCBiMjA4MWZjLi41MTY5OGQyIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvaW9wb3J0LmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2lvcG9ydC5oCkBAIC03LDg5ICs3LDk3IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfTElOVVhfSU9QT1JUX0gKICNkZWZpbmUgX0xJTlVYX0lPUE9SVF9ICi0KICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgcmVzb3VyY2UgewogIHJlc291cmNlX3NpemVfdCBzdGFydDsKICByZXNvdXJjZV9zaXplX3QgZW5kOwogIGNvbnN0IGNoYXIgKm5hbWU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAgc3RydWN0IHJlc291cmNlICpwYXJlbnQsICpzaWJsaW5nLCAqY2hpbGQ7CiB9OwotCiBzdHJ1Y3QgcmVzb3VyY2VfbGlzdCB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCByZXNvdXJjZV9saXN0ICpuZXh0OwogIHN0cnVjdCByZXNvdXJjZSAqcmVzOwogIHN0cnVjdCBwY2lfZGV2ICpkZXY7CiB9OwotCi0jZGVmaW5lIElPUkVTT1VSQ0VfQklUUyAweDAwMDAwMGZmICAKLQotI2RlZmluZSBJT1JFU09VUkNFX0lPIDB4MDAwMDAxMDAgIAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgSU9SRVNPVVJDRV9CSVRTIDB4MDAwMDAwZmYKKyNkZWZpbmUgSU9SRVNPVVJDRV9JTyAweDAwMDAwMTAwCiAjZGVmaW5lIElPUkVTT1VSQ0VfTUVNIDB4MDAwMDAyMDAKICNkZWZpbmUgSU9SRVNPVVJDRV9JUlEgMHgwMDAwMDQwMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSU9SRVNPVVJDRV9ETUEgMHgwMDAwMDgwMAotCi0jZGVmaW5lIElPUkVTT1VSQ0VfUFJFRkVUQ0ggMHgwMDAwMTAwMCAgCisjZGVmaW5lIElPUkVTT1VSQ0VfUFJFRkVUQ0ggMHgwMDAwMTAwMAogI2RlZmluZSBJT1JFU09VUkNFX1JFQURPTkxZIDB4MDAwMDIwMDAKICNkZWZpbmUgSU9SRVNPVVJDRV9DQUNIRUFCTEUgMHgwMDAwNDAwMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSU9SRVNPVVJDRV9SQU5HRUxFTkdUSCAweDAwMDA4MDAwCiAjZGVmaW5lIElPUkVTT1VSQ0VfU0hBRE9XQUJMRSAweDAwMDEwMDAwCiAjZGVmaW5lIElPUkVTT1VSQ0VfQlVTX0hBU19WR0EgMHgwMDA4MDAwMAotCiAjZGVmaW5lIElPUkVTT1VSQ0VfRElTQUJMRUQgMHgxMDAwMDAwMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSU9SRVNPVVJDRV9VTlNFVCAweDIwMDAwMDAwCiAjZGVmaW5lIElPUkVTT1VSQ0VfQVVUTyAweDQwMDAwMDAwCi0jZGVmaW5lIElPUkVTT1VSQ0VfQlVTWSAweDgwMDAwMDAwICAKLQorI2RlZmluZSBJT1JFU09VUkNFX0JVU1kgMHg4MDAwMDAwMAogI2RlZmluZSBJT1JFU09VUkNFX0lSUV9ISUdIRURHRSAoMTw8MCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIElPUkVTT1VSQ0VfSVJRX0xPV0VER0UgKDE8PDEpCiAjZGVmaW5lIElPUkVTT1VSQ0VfSVJRX0hJR0hMRVZFTCAoMTw8MikKICNkZWZpbmUgSU9SRVNPVVJDRV9JUlFfTE9XTEVWRUwgKDE8PDMpCiAjZGVmaW5lIElPUkVTT1VSQ0VfSVJRX1NIQVJFQUJMRSAoMTw8NCkKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSU9SRVNPVVJDRV9ETUFfVFlQRV9NQVNLICgzPDwwKQogI2RlZmluZSBJT1JFU09VUkNFX0RNQV84QklUICgwPDwwKQogI2RlZmluZSBJT1JFU09VUkNFX0RNQV84QU5EMTZCSVQgKDE8PDApCiAjZGVmaW5lIElPUkVTT1VSQ0VfRE1BXzE2QklUICgyPDwwKQotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJT1JFU09VUkNFX0RNQV9NQVNURVIgKDE8PDIpCiAjZGVmaW5lIElPUkVTT1VSQ0VfRE1BX0JZVEUgKDE8PDMpCiAjZGVmaW5lIElPUkVTT1VSQ0VfRE1BX1dPUkQgKDE8PDQpCi0KICNkZWZpbmUgSU9SRVNPVVJDRV9ETUFfU1BFRURfTUFTSyAoMzw8NikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIElPUkVTT1VSQ0VfRE1BX0NPTVBBVElCTEUgKDA8PDYpCiAjZGVmaW5lIElPUkVTT1VSQ0VfRE1BX1RZUEVBICgxPDw2KQogI2RlZmluZSBJT1JFU09VUkNFX0RNQV9UWVBFQiAoMjw8NikKICNkZWZpbmUgSU9SRVNPVVJDRV9ETUFfVFlQRUYgKDM8PDYpCi0KLSNkZWZpbmUgSU9SRVNPVVJDRV9NRU1fV1JJVEVBQkxFICgxPDwwKSAgCi0jZGVmaW5lIElPUkVTT1VSQ0VfTUVNX0NBQ0hFQUJMRSAoMTw8MSkgIAotI2RlZmluZSBJT1JFU09VUkNFX01FTV9SQU5HRUxFTkdUSCAoMTw8MikgIAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgSU9SRVNPVVJDRV9NRU1fV1JJVEVBQkxFICgxPDwwKQorI2RlZmluZSBJT1JFU09VUkNFX01FTV9DQUNIRUFCTEUgKDE8PDEpCisjZGVmaW5lIElPUkVTT1VSQ0VfTUVNX1JBTkdFTEVOR1RIICgxPDwyKQogI2RlZmluZSBJT1JFU09VUkNFX01FTV9UWVBFX01BU0sgKDM8PDMpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJT1JFU09VUkNFX01FTV84QklUICgwPDwzKQogI2RlZmluZSBJT1JFU09VUkNFX01FTV8xNkJJVCAoMTw8MykKICNkZWZpbmUgSU9SRVNPVVJDRV9NRU1fOEFORDE2QklUICgyPDwzKQogI2RlZmluZSBJT1JFU09VUkNFX01FTV8zMkJJVCAoMzw8MykKLSNkZWZpbmUgSU9SRVNPVVJDRV9NRU1fU0hBRE9XQUJMRSAoMTw8NSkgIAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgSU9SRVNPVVJDRV9NRU1fU0hBRE9XQUJMRSAoMTw8NSkKICNkZWZpbmUgSU9SRVNPVVJDRV9NRU1fRVhQQU5TSU9OUk9NICgxPDw2KQotCi0jZGVmaW5lIElPUkVTT1VSQ0VfUk9NX0VOQUJMRSAoMTw8MCkgIAotI2RlZmluZSBJT1JFU09VUkNFX1JPTV9TSEFET1cgKDE8PDEpICAKLSNkZWZpbmUgSU9SRVNPVVJDRV9ST01fQ09QWSAoMTw8MikgIAotCisjZGVmaW5lIElPUkVTT1VSQ0VfUk9NX0VOQUJMRSAoMTw8MCkKKyNkZWZpbmUgSU9SRVNPVVJDRV9ST01fU0hBRE9XICgxPDwxKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgSU9SRVNPVVJDRV9ST01fQ09QWSAoMTw8MikKICNkZWZpbmUgcmVxdWVzdF9yZWdpb24oc3RhcnQsbixuYW1lKSBfX3JlcXVlc3RfcmVnaW9uKCZpb3BvcnRfcmVzb3VyY2UsIChzdGFydCksIChuKSwgKG5hbWUpKQogI2RlZmluZSByZXF1ZXN0X21lbV9yZWdpb24oc3RhcnQsbixuYW1lKSBfX3JlcXVlc3RfcmVnaW9uKCZpb21lbV9yZXNvdXJjZSwgKHN0YXJ0KSwgKG4pLCAobmFtZSkpCiAjZGVmaW5lIHJlbmFtZV9yZWdpb24ocmVnaW9uLCBuZXduYW1lKSBkbyB7IChyZWdpb24pLT5uYW1lID0gKG5ld25hbWUpOyB9IHdoaWxlICgwKQotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSByZWxlYXNlX3JlZ2lvbihzdGFydCxuKSBfX3JlbGVhc2VfcmVnaW9uKCZpb3BvcnRfcmVzb3VyY2UsIChzdGFydCksIChuKSkKICNkZWZpbmUgY2hlY2tfbWVtX3JlZ2lvbihzdGFydCxuKSBfX2NoZWNrX3JlZ2lvbigmaW9tZW1fcmVzb3VyY2UsIChzdGFydCksIChuKSkKICNkZWZpbmUgcmVsZWFzZV9tZW1fcmVnaW9uKHN0YXJ0LG4pIF9fcmVsZWFzZV9yZWdpb24oJmlvbWVtX3Jlc291cmNlLCAoc3RhcnQpLCAobikpCi0KICNlbmRpZgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9pb3ByaW8uaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9pb3ByaW8uaAppbmRleCBhMGE1ZDQ4Li5jN2Y5MzEwIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvaW9wcmlvLmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2lvcHJpby5oCkBAIC03LDM4ICs3LDQyIEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBJT1BSSU9fSAogI2RlZmluZSBJT1BSSU9fSAotCiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLQogI2RlZmluZSBJT1BSSU9fQklUUyAoMTYpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJT1BSSU9fQ0xBU1NfU0hJRlQgKDEzKQogI2RlZmluZSBJT1BSSU9fUFJJT19NQVNLICgoMVVMIDw8IElPUFJJT19DTEFTU19TSElGVCkgLSAxKQotCiAjZGVmaW5lIElPUFJJT19QUklPX0NMQVNTKG1hc2spICgobWFzaykgPj4gSU9QUklPX0NMQVNTX1NISUZUKQogI2RlZmluZSBJT1BSSU9fUFJJT19EQVRBKG1hc2spICgobWFzaykgJiBJT1BSSU9fUFJJT19NQVNLKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSU9QUklPX1BSSU9fVkFMVUUoY2xhc3MsIGRhdGEpICgoKGNsYXNzKSA8PCBJT1BSSU9fQ0xBU1NfU0hJRlQpIHwgZGF0YSkKLQogI2RlZmluZSBpb3ByaW9fdmFsaWQobWFzaykgKElPUFJJT19QUklPX0NMQVNTKChtYXNrKSkgIT0gSU9QUklPX0NMQVNTX05PTkUpCi0KIGVudW0gewogIElPUFJJT19DTEFTU19OT05FLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBJT1BSSU9fQ0xBU1NfUlQsCiAgSU9QUklPX0NMQVNTX0JFLAogIElPUFJJT19DTEFTU19JRExFLAogfTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSU9QUklPX0JFX05SICg4KQotCiBlbnVtIHsKICBJT1BSSU9fV0hPX1BST0NFU1MgPSAxLAogIElPUFJJT19XSE9fUEdSUCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgSU9QUklPX1dIT19VU0VSLAogfTsKLQogI2RlZmluZSBJT1BSSU9fTk9STSAoNCkKLQogI2VuZGlmCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2lwLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvaXAuaAppbmRleCAwNDA3ODlkLi4xNmVjYjIzIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvaXAuaAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvaXAuaApAQCAtNywxMTIgKzcsMTI3IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfTElOVVhfSVBfSAogI2RlZmluZSBfTElOVVhfSVBfSAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJUFRPU19UT1NfTUFTSyAweDFFCiAjZGVmaW5lIElQVE9TX1RPUyh0b3MpICgodG9zKSZJUFRPU19UT1NfTUFTSykKICNkZWZpbmUgSVBUT1NfTE9XREVMQVkgMHgxMAogI2RlZmluZSBJUFRPU19USFJPVUdIUFVUIDB4MDgKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIElQVE9TX1JFTElBQklMSVRZIDB4MDQKICNkZWZpbmUgSVBUT1NfTUlOQ09TVCAweDAyCi0KICNkZWZpbmUgSVBUT1NfUFJFQ19NQVNLIDB4RTAKICNkZWZpbmUgSVBUT1NfUFJFQyh0b3MpICgodG9zKSZJUFRPU19QUkVDX01BU0spCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJUFRPU19QUkVDX05FVENPTlRST0wgMHhlMAogI2RlZmluZSBJUFRPU19QUkVDX0lOVEVSTkVUQ09OVFJPTCAweGMwCiAjZGVmaW5lIElQVE9TX1BSRUNfQ1JJVElDX0VDUCAweGEwCiAjZGVmaW5lIElQVE9TX1BSRUNfRkxBU0hPVkVSUklERSAweDgwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJUFRPU19QUkVDX0ZMQVNIIDB4NjAKICNkZWZpbmUgSVBUT1NfUFJFQ19JTU1FRElBVEUgMHg0MAogI2RlZmluZSBJUFRPU19QUkVDX1BSSU9SSVRZIDB4MjAKICNkZWZpbmUgSVBUT1NfUFJFQ19ST1VUSU5FIDB4MDAKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSVBPUFRfQ09QWSAweDgwCiAjZGVmaW5lIElQT1BUX0NMQVNTX01BU0sgMHg2MAogI2RlZmluZSBJUE9QVF9OVU1CRVJfTUFTSyAweDFmCi0KICNkZWZpbmUgSVBPUFRfQ09QSUVEKG8pICgobykmSVBPUFRfQ09QWSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIElQT1BUX0NMQVNTKG8pICgobykmSVBPUFRfQ0xBU1NfTUFTSykKICNkZWZpbmUgSVBPUFRfTlVNQkVSKG8pICgobykmSVBPUFRfTlVNQkVSX01BU0spCi0KICNkZWZpbmUgSVBPUFRfQ09OVFJPTCAweDAwCiAjZGVmaW5lIElQT1BUX1JFU0VSVkVEMSAweDIwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJUE9QVF9NRUFTVVJFTUVOVCAweDQwCiAjZGVmaW5lIElQT1BUX1JFU0VSVkVEMiAweDYwCi0KICNkZWZpbmUgSVBPUFRfRU5EICgwIHxJUE9QVF9DT05UUk9MKQogI2RlZmluZSBJUE9QVF9OT09QICgxIHxJUE9QVF9DT05UUk9MKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSVBPUFRfU0VDICgyIHxJUE9QVF9DT05UUk9MfElQT1BUX0NPUFkpCiAjZGVmaW5lIElQT1BUX0xTUlIgKDMgfElQT1BUX0NPTlRST0x8SVBPUFRfQ09QWSkKICNkZWZpbmUgSVBPUFRfVElNRVNUQU1QICg0IHxJUE9QVF9NRUFTVVJFTUVOVCkKICNkZWZpbmUgSVBPUFRfUlIgKDcgfElQT1BUX0NPTlRST0wpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJUE9QVF9TSUQgKDggfElQT1BUX0NPTlRST0x8SVBPUFRfQ09QWSkKICNkZWZpbmUgSVBPUFRfU1NSUiAoOSB8SVBPUFRfQ09OVFJPTHxJUE9QVF9DT1BZKQogI2RlZmluZSBJUE9QVF9SQSAoMjB8SVBPUFRfQ09OVFJPTHxJUE9QVF9DT1BZKQotCiAjZGVmaW5lIElQVkVSU0lPTiA0CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNQVhUVEwgMjU1CiAjZGVmaW5lIElQREVGVFRMIDY0Ci0KICNkZWZpbmUgSVBPUFRfT1BUVkFMIDAKICNkZWZpbmUgSVBPUFRfT0xFTiAxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJUE9QVF9PRkZTRVQgMgogI2RlZmluZSBJUE9QVF9NSU5PRkYgNAogI2RlZmluZSBNQVhfSVBPUFRMRU4gNDAKICNkZWZpbmUgSVBPUFRfTk9QIElQT1BUX05PT1AKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIElQT1BUX0VPTCBJUE9QVF9FTkQKICNkZWZpbmUgSVBPUFRfVFMgSVBPUFRfVElNRVNUQU1QCi0KLSNkZWZpbmUgSVBPUFRfVFNfVFNPTkxZIDAgIAotI2RlZmluZSBJUE9QVF9UU19UU0FOREFERFIgMSAgCi0jZGVmaW5lIElQT1BUX1RTX1BSRVNQRUMgMyAgCi0KKyNkZWZpbmUgSVBPUFRfVFNfVFNPTkxZIDAKKyNkZWZpbmUgSVBPUFRfVFNfVFNBTkRBRERSIDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIElQT1BUX1RTX1BSRVNQRUMgMwogc3RydWN0IGlwaGRyIHsKICNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fQklURklFTEQKICBfX3U4IGlobDo0LAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB2ZXJzaW9uOjQ7CiAjZWxpZiBkZWZpbmVkIChfX0JJR19FTkRJQU5fQklURklFTEQpCiAgX191OCB2ZXJzaW9uOjQsCiAgaWhsOjQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2Vsc2UKICNlcnJvciAiUGxlYXNlIGZpeCA8YXNtL2J5dGVvcmRlci5oPiIKICNlbmRpZgogIF9fdTggdG9zOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX2JlMTYgdG90X2xlbjsKICBfX2JlMTYgaWQ7CiAgX19iZTE2IGZyYWdfb2ZmOwogIF9fdTggdHRsOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IHByb3RvY29sOwogIF9fdTE2IGNoZWNrOwogIF9fYmUzMiBzYWRkcjsKICBfX2JlMzIgZGFkZHI7Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwotCiBzdHJ1Y3QgaXBfYXV0aF9oZHIgewogIF9fdTggbmV4dGhkcjsKICBfX3U4IGhkcmxlbjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MTYgcmVzZXJ2ZWQ7CiAgX191MzIgc3BpOwogIF9fdTMyIHNlcV9ubzsKICBfX3U4IGF1dGhfZGF0YVswXTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwotCiBzdHJ1Y3QgaXBfZXNwX2hkciB7CiAgX191MzIgc3BpOwogIF9fdTMyIHNlcV9ubzsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191OCBlbmNfZGF0YVswXTsKIH07Ci0KIHN0cnVjdCBpcF9jb21wX2hkciB7CiAgX191OCBuZXh0aGRyOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IGZsYWdzOwogIF9fdTE2IGNwaTsKIH07Ci0KICNlbmRpZgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9pcGMuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9pcGMuaAppbmRleCA1NDc2NmQ1Li40NWNkOTIzIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvaXBjLmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2lwYy5oCkBAIC03LDQyICs3LDQ1IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfTElOVVhfSVBDX0gKICNkZWZpbmUgX0xJTlVYX0lQQ19ICi0KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotCi0jZGVmaW5lIElQQ19QUklWQVRFICgoX19rZXJuZWxfa2V5X3QpIDApIAotCisjZGVmaW5lIElQQ19QUklWQVRFICgoX19rZXJuZWxfa2V5X3QpIDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IGlwY19wZXJtCiB7CiAgX19rZXJuZWxfa2V5X3Qga2V5OwogIF9fa2VybmVsX3VpZF90IHVpZDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX19rZXJuZWxfZ2lkX3QgZ2lkOwogIF9fa2VybmVsX3VpZF90IGN1aWQ7CiAgX19rZXJuZWxfZ2lkX3QgY2dpZDsKICBfX2tlcm5lbF9tb2RlX3QgbW9kZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgc2hvcnQgc2VxOwogfTsKLQogI2luY2x1ZGUgPGFzbS9pcGNidWYuaD4KLQotI2RlZmluZSBJUENfQ1JFQVQgMDAwMDEwMDAgIAotI2RlZmluZSBJUENfRVhDTCAwMDAwMjAwMCAgCi0jZGVmaW5lIElQQ19OT1dBSVQgMDAwMDQwMDAgIAotCi0jZGVmaW5lIElQQ19ESVBDIDAwMDEwMDAwICAKLSNkZWZpbmUgSVBDX09XTiAwMDAyMDAwMCAgCi0KLSNkZWZpbmUgSVBDX1JNSUQgMCAgCi0jZGVmaW5lIElQQ19TRVQgMSAgCi0jZGVmaW5lIElQQ19TVEFUIDIgIAotI2RlZmluZSBJUENfSU5GTyAzICAKLQotI2RlZmluZSBJUENfT0xEIDAgIAotI2RlZmluZSBJUENfNjQgMHgwMTAwICAKLQorI2RlZmluZSBJUENfQ1JFQVQgMDAwMDEwMDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIElQQ19FWENMIDAwMDAyMDAwCisjZGVmaW5lIElQQ19OT1dBSVQgMDAwMDQwMDAKKyNkZWZpbmUgSVBDX0RJUEMgMDAwMTAwMDAKKyNkZWZpbmUgSVBDX09XTiAwMDAyMDAwMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgSVBDX1JNSUQgMAorI2RlZmluZSBJUENfU0VUIDEKKyNkZWZpbmUgSVBDX1NUQVQgMgorI2RlZmluZSBJUENfSU5GTyAzCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBJUENfT0xEIDAKKyNkZWZpbmUgSVBDXzY0IDB4MDEwMAogI2VuZGlmCi0KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9pcG1pX21zZ2RlZnMuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9pcG1pX21zZ2RlZnMuaAppbmRleCAyNDdkNTYzLi5lMmExNjc0IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvaXBtaV9tc2dkZWZzLmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2lwbWlfbXNnZGVmcy5oCkBAIC03LDYzICs3LDczIEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfX0xJTlVYX0lQTUlfTVNHREVGU19ICiAjZGVmaW5lIF9fTElOVVhfSVBNSV9NU0dERUZTX0gKLQogI2RlZmluZSBJUE1JX05FVEZOX1NFTlNPUl9FVkVOVF9SRVFVRVNUIDB4MDQKICNkZWZpbmUgSVBNSV9ORVRGTl9TRU5TT1JfRVZFTlRfUkVTUE9OU0UgMHgwNQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSVBNSV9HRVRfRVZFTlRfUkVDRUlWRVJfQ01EIDB4MDEKLQogI2RlZmluZSBJUE1JX05FVEZOX0FQUF9SRVFVRVNUIDB4MDYKICNkZWZpbmUgSVBNSV9ORVRGTl9BUFBfUkVTUE9OU0UgMHgwNwogI2RlZmluZSBJUE1JX0dFVF9ERVZJQ0VfSURfQ01EIDB4MDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIElQTUlfQ0xFQVJfTVNHX0ZMQUdTX0NNRCAweDMwCiAjZGVmaW5lIElQTUlfR0VUX0RFVklDRV9HVUlEX0NNRCAweDA4CiAjZGVmaW5lIElQTUlfR0VUX01TR19GTEFHU19DTUQgMHgzMQogI2RlZmluZSBJUE1JX1NFTkRfTVNHX0NNRCAweDM0CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJUE1JX0dFVF9NU0dfQ01EIDB4MzMKICNkZWZpbmUgSVBNSV9TRVRfQk1DX0dMT0JBTF9FTkFCTEVTX0NNRCAweDJlCiAjZGVmaW5lIElQTUlfR0VUX0JNQ19HTE9CQUxfRU5BQkxFU19DTUQgMHgyZgogI2RlZmluZSBJUE1JX1JFQURfRVZFTlRfTVNHX0JVRkZFUl9DTUQgMHgzNQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSVBNSV9HRVRfQ0hBTk5FTF9JTkZPX0NNRCAweDQyCi0KICNkZWZpbmUgSVBNSV9ORVRGTl9TVE9SQUdFX1JFUVVFU1QgMHgwYQogI2RlZmluZSBJUE1JX05FVEZOX1NUT1JBR0VfUkVTUE9OU0UgMHgwYgogI2RlZmluZSBJUE1JX0FERF9TRUxfRU5UUllfQ01EIDB4NDQKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSVBNSV9CTUNfU0xBVkVfQUREUiAweDIwCi0KLSNkZWZpbmUgSVBNSV9NQVhfTVNHX0xFTkdUSCAyNzIgIAotCisjZGVmaW5lIElQTUlfTUFYX01TR19MRU5HVEggMjcyCiAjZGVmaW5lIElQTUlfQ0NfTk9fRVJST1IgMHgwMAogI2RlZmluZSBJUE1JX05PREVfQlVTWV9FUlIgMHhjMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSVBNSV9JTlZBTElEX0NPTU1BTkRfRVJSIDB4YzEKICNkZWZpbmUgSVBNSV9FUlJfTVNHX1RSVU5DQVRFRCAweGM2CiAjZGVmaW5lIElQTUlfTE9TVF9BUkJJVFJBVElPTl9FUlIgMHg4MQogI2RlZmluZSBJUE1JX0VSUl9VTlNQRUNJRklFRCAweGZmCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIElQTUlfQ0hBTk5FTF9QUk9UT0NPTF9JUE1CIDEKICNkZWZpbmUgSVBNSV9DSEFOTkVMX1BST1RPQ09MX0lDTUIgMgogI2RlZmluZSBJUE1JX0NIQU5ORUxfUFJPVE9DT0xfU01CVVMgNAogI2RlZmluZSBJUE1JX0NIQU5ORUxfUFJPVE9DT0xfS0NTIDUKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIElQTUlfQ0hBTk5FTF9QUk9UT0NPTF9TTUlDIDYKICNkZWZpbmUgSVBNSV9DSEFOTkVMX1BST1RPQ09MX0JUMTAgNwogI2RlZmluZSBJUE1JX0NIQU5ORUxfUFJPVE9DT0xfQlQxNSA4CiAjZGVmaW5lIElQTUlfQ0hBTk5FTF9QUk9UT0NPTF9UTU9ERSA5Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIElQTUlfQ0hBTk5FTF9NRURJVU1fSVBNQiAxCiAjZGVmaW5lIElQTUlfQ0hBTk5FTF9NRURJVU1fSUNNQjEwIDIKICNkZWZpbmUgSVBNSV9DSEFOTkVMX01FRElVTV9JQ01CMDkgMwogI2RlZmluZSBJUE1JX0NIQU5ORUxfTUVESVVNXzgwMjNMQU4gNAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSVBNSV9DSEFOTkVMX01FRElVTV9BU1lOQyA1CiAjZGVmaW5lIElQTUlfQ0hBTk5FTF9NRURJVU1fT1RIRVJfTEFOIDYKICNkZWZpbmUgSVBNSV9DSEFOTkVMX01FRElVTV9QQ0lfU01CVVMgNwogI2RlZmluZSBJUE1JX0NIQU5ORUxfTUVESVVNX1NNQlVTMSA4CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJUE1JX0NIQU5ORUxfTUVESVVNX1NNQlVTMiA5CiAjZGVmaW5lIElQTUlfQ0hBTk5FTF9NRURJVU1fVVNCMSAxMAogI2RlZmluZSBJUE1JX0NIQU5ORUxfTUVESVVNX1VTQjIgMTEKICNkZWZpbmUgSVBNSV9DSEFOTkVMX01FRElVTV9TWVNJTlRGIDEyCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9pcG1pX3NtaS5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2lwbWlfc21pLmgKaW5kZXggNTZjYzIxMC4uODMzNWQ1MyAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2lwbWlfc21pLmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2lwbWlfc21pLmgKQEAgLTcsNzMgKzcsNzQgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9fTElOVVhfSVBNSV9TTUlfSAogI2RlZmluZSBfX0xJTlVYX0lQTUlfU01JX0gKLQogI2luY2x1ZGUgPGxpbnV4L2lwbWlfbXNnZGVmcy5oPgogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvaXBtaV9zbWkuaD4KLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHR5cGVkZWYgc3RydWN0IGlwbWlfc21pICppcG1pX3NtaV90OwotCiBzdHJ1Y3QgaXBtaV9zbWlfbXNnCiB7CiAgc3RydWN0IGxpc3RfaGVhZCBsaW5rOwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGxvbmcgbXNnaWQ7CiAgdm9pZCAqdXNlcl9kYXRhOwotCiAgaW50IGRhdGFfc2l6ZTsKICB1bnNpZ25lZCBjaGFyIGRhdGFbSVBNSV9NQVhfTVNHX0xFTkdUSF07Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgaW50IHJzcF9zaXplOwogIHVuc2lnbmVkIGNoYXIgcnNwW0lQTUlfTUFYX01TR19MRU5HVEhdOwotCiAgdm9pZCAoKmRvbmUpKHN0cnVjdCBpcG1pX3NtaV9tc2cgKm1zZyk7CiB9OwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IGlwbWlfc21pX2hhbmRsZXJzCiB7CiAgc3RydWN0IG1vZHVsZSAqb3duZXI7Ci0KICBpbnQgKCpzdGFydF9wcm9jZXNzaW5nKSh2b2lkICpzZW5kX2luZm8sCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGlwbWlfc21pX3QgbmV3X2ludGYpOwotCiAgdm9pZCAoKnNlbmRlcikodm9pZCAqc2VuZF9pbmZvLAogIHN0cnVjdCBpcG1pX3NtaV9tc2cgKm1zZywKICBpbnQgcHJpb3JpdHkpOwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHZvaWQgKCpyZXF1ZXN0X2V2ZW50cykodm9pZCAqc2VuZF9pbmZvKTsKLQogIHZvaWQgKCpzZXRfcnVuX3RvX2NvbXBsZXRpb24pKHZvaWQgKnNlbmRfaW5mbywgaW50IHJ1bl90b19jb21wbGV0aW9uKTsKLQogIHZvaWQgKCpwb2xsKSh2b2lkICpzZW5kX2luZm8pOwotCiAgaW50ICgqaW5jX3VzZWNvdW50KSh2b2lkICpzZW5kX2luZm8pOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB2b2lkICgqZGVjX3VzZWNvdW50KSh2b2lkICpzZW5kX2luZm8pOwogfTsKLQogc3RydWN0IGlwbWlfZGV2aWNlX2lkIHsKICB1bnNpZ25lZCBjaGFyIGRldmljZV9pZDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgY2hhciBkZXZpY2VfcmV2aXNpb247CiAgdW5zaWduZWQgY2hhciBmaXJtd2FyZV9yZXZpc2lvbl8xOwogIHVuc2lnbmVkIGNoYXIgZmlybXdhcmVfcmV2aXNpb25fMjsKICB1bnNpZ25lZCBjaGFyIGlwbWlfdmVyc2lvbjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgY2hhciBhZGRpdGlvbmFsX2RldmljZV9zdXBwb3J0OwogIHVuc2lnbmVkIGludCBtYW51ZmFjdHVyZXJfaWQ7CiAgdW5zaWduZWQgaW50IHByb2R1Y3RfaWQ7CiAgdW5zaWduZWQgY2hhciBhdXhfZmlybXdhcmVfcmV2aXNpb25bNF07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGludCBhdXhfZmlybXdhcmVfcmV2aXNpb25fc2V0IDogMTsKIH07Ci0KICNkZWZpbmUgaXBtaV92ZXJzaW9uX21ham9yKHYpICgodiktPmlwbWlfdmVyc2lvbiAmIDB4ZikKICNkZWZpbmUgaXBtaV92ZXJzaW9uX21pbm9yKHYpICgodiktPmlwbWlfdmVyc2lvbiA+PiA0KQotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IGlwbWlfc21pX21zZyAqaXBtaV9hbGxvY19zbWlfbXNnKHZvaWQpOwotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9pcHNlYy5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2lwc2VjLmgKaW5kZXggNTZhY2FmYS4uZTk3NThlYiAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2lwc2VjLmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2lwc2VjLmgKQEAgLTcsNTAgKzcsNTcgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9MSU5VWF9JUFNFQ19ICiAjZGVmaW5lIF9MSU5VWF9JUFNFQ19ICi0KICNpbmNsdWRlIDxsaW51eC9wZmtleXYyLmg+Ci0KICNkZWZpbmUgSVBTRUNfUE9SVF9BTlkgMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSVBTRUNfVUxQUk9UT19BTlkgMjU1CiAjZGVmaW5lIElQU0VDX1BST1RPX0FOWSAyNTUKLQogZW51bSB7CiAgSVBTRUNfTU9ERV9BTlkgPSAwLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBJUFNFQ19NT0RFX1RSQU5TUE9SVCA9IDEsCiAgSVBTRUNfTU9ERV9UVU5ORUwgPSAyLAogIElQU0VDX01PREVfQkVFVCA9IDMKIH07Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBlbnVtIHsKICBJUFNFQ19ESVJfQU5ZID0gMCwKICBJUFNFQ19ESVJfSU5CT1VORCA9IDEsCiAgSVBTRUNfRElSX09VVEJPVU5EID0gMiwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgSVBTRUNfRElSX0ZXRCA9IDMsCiAgSVBTRUNfRElSX01BWCA9IDQsCiAgSVBTRUNfRElSX0lOVkFMSUQgPSA1CiB9OwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogZW51bSB7CiAgSVBTRUNfUE9MSUNZX0RJU0NBUkQgPSAwLAogIElQU0VDX1BPTElDWV9OT05FID0gMSwKICBJUFNFQ19QT0xJQ1lfSVBTRUMgPSAyLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBJUFNFQ19QT0xJQ1lfRU5UUlVTVCA9IDMsCiAgSVBTRUNfUE9MSUNZX0JZUEFTUyA9IDQKIH07Ci0KIGVudW0geworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBJUFNFQ19MRVZFTF9ERUZBVUxUID0gMCwKICBJUFNFQ19MRVZFTF9VU0UgPSAxLAogIElQU0VDX0xFVkVMX1JFUVVJUkUgPSAyLAogIElQU0VDX0xFVkVMX1VOSVFVRSA9IDMKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwotCiAjZGVmaW5lIElQU0VDX01BTlVBTF9SRVFJRF9NQVggMHgzZmZmCi0KICNkZWZpbmUgSVBTRUNfUkVQTEFZV1NJWkUgMzIKLQogI2VuZGlmCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2lwdjYuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9pcHY2LmgKaW5kZXggZjRlZTlhMS4uMWU1ZjYxOCAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2lwdjYuaAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvaXB2Ni5oCkBAIC03LDEyNyArNywxMzggQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9JUFY2X0gKICNkZWZpbmUgX0lQVjZfSAotCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9pbjYuaD4KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgotCiAjZGVmaW5lIElQVjZfTUlOX01UVSAxMjgwCi0KIHN0cnVjdCBpbjZfcGt0aW5mbyB7CiAgc3RydWN0IGluNl9hZGRyIGlwaTZfYWRkcjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgaW50IGlwaTZfaWZpbmRleDsKIH07Ci0KIHN0cnVjdCBpcDZfbXR1aW5mbyB7CiAgc3RydWN0IHNvY2thZGRyX2luNiBpcDZtX2FkZHI7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGlwNm1fbXR1OwogfTsKLQogc3RydWN0IGluNl9pZnJlcSB7CiAgc3RydWN0IGluNl9hZGRyIGlmcjZfYWRkcjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgaWZyNl9wcmVmaXhsZW47CiAgaW50IGlmcjZfaWZpbmRleDsKIH07Ci0KLSNkZWZpbmUgSVBWNl9TUkNSVF9TVFJJQ1QgMHgwMSAgCi0jZGVmaW5lIElQVjZfU1JDUlRfVFlQRV8wIDAgIAotI2RlZmluZSBJUFY2X1NSQ1JUX1RZUEVfMiAyICAKLQorI2RlZmluZSBJUFY2X1NSQ1JUX1NUUklDVCAweDAxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBJUFY2X1NSQ1JUX1RZUEVfMCAwCisjZGVmaW5lIElQVjZfU1JDUlRfVFlQRV8yIDIKIHN0cnVjdCBpcHY2X3J0X2hkciB7CiAgX191OCBuZXh0aGRyOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IGhkcmxlbjsKICBfX3U4IHR5cGU7CiAgX191OCBzZWdtZW50c19sZWZ0OwotCiB9OwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IGlwdjZfb3B0X2hkciB7CiAgX191OCBuZXh0aGRyOwogIF9fdTggaGRybGVuOwotCiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBpcHY2X2Rlc3RvcHRfaGRyIGlwdjZfb3B0X2hkcgogI2RlZmluZSBpcHY2X2hvcG9wdF9oZHIgaXB2Nl9vcHRfaGRyCi0KIHN0cnVjdCBydDBfaGRyIHsKICBzdHJ1Y3QgaXB2Nl9ydF9oZHIgcnRfaGRyOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiByZXNlcnZlZDsKICBzdHJ1Y3QgaW42X2FkZHIgYWRkclswXTsKLQogI2RlZmluZSBydDBfdHlwZSBydF9oZHIudHlwZQogfTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBydDJfaGRyIHsKICBzdHJ1Y3QgaXB2Nl9ydF9oZHIgcnRfaGRyOwogIF9fdTMyIHJlc2VydmVkOwogIHN0cnVjdCBpbjZfYWRkciBhZGRyOwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBydDJfdHlwZSBydF9oZHIudHlwZQogfTsKLQogc3RydWN0IGlwdjZfZGVzdG9wdF9oYW8gewogIF9fdTggdHlwZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191OCBsZW5ndGg7CiAgc3RydWN0IGluNl9hZGRyIGFkZHI7CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwotCiBzdHJ1Y3QgaXB2NmhkciB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2lmZGVmIF9fTElUVExFX0VORElBTl9CSVRGSUVMRAogIF9fdTggcHJpb3JpdHk6NCwKICB2ZXJzaW9uOjQ7CiAjZWxpZiBkZWZpbmVkKF9fQklHX0VORElBTl9CSVRGSUVMRCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191OCB2ZXJzaW9uOjQsCiAgcHJpb3JpdHk6NDsKICNlbHNlCiAjZXJyb3IgIlBsZWFzZSBmaXggPGFzbS9ieXRlb3JkZXIuaD4iCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2VuZGlmCiAgX191OCBmbG93X2xibFszXTsKLQogIF9fYmUxNiBwYXlsb2FkX2xlbjsKICBfX3U4IG5leHRoZHI7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTggaG9wX2xpbWl0OwotCiAgc3RydWN0IGluNl9hZGRyIHNhZGRyOwogIHN0cnVjdCBpbjZfYWRkciBkYWRkcjsKIH07Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBlbnVtIHsKICBERVZDT05GX0ZPUldBUkRJTkcgPSAwLAogIERFVkNPTkZfSE9QTElNSVQsCiAgREVWQ09ORl9NVFU2LAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBERVZDT05GX0FDQ0VQVF9SQSwKICBERVZDT05GX0FDQ0VQVF9SRURJUkVDVFMsCiAgREVWQ09ORl9BVVRPQ09ORiwKICBERVZDT05GX0RBRF9UUkFOU01JVFMsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIERFVkNPTkZfUlRSX1NPTElDSVRTLAogIERFVkNPTkZfUlRSX1NPTElDSVRfSU5URVJWQUwsCiAgREVWQ09ORl9SVFJfU09MSUNJVF9ERUxBWSwKICBERVZDT05GX1VTRV9URU1QQUREUiwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgREVWQ09ORl9URU1QX1ZBTElEX0xGVCwKICBERVZDT05GX1RFTVBfUFJFRkVSRURfTEZULAogIERFVkNPTkZfUkVHRU5fTUFYX1JFVFJZLAogIERFVkNPTkZfTUFYX0RFU1lOQ19GQUNUT1IsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIERFVkNPTkZfTUFYX0FERFJFU1NFUywKICBERVZDT05GX0ZPUkNFX01MRF9WRVJTSU9OLAogIERFVkNPTkZfQUNDRVBUX1JBX0RFRlJUUiwKICBERVZDT05GX0FDQ0VQVF9SQV9QSU5GTywKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgREVWQ09ORl9BQ0NFUFRfUkFfUlRSX1BSRUYsCiAgREVWQ09ORl9SVFJfUFJPQkVfSU5URVJWQUwsCiAgREVWQ09ORl9BQ0NFUFRfUkFfUlRfSU5GT19NQVhfUExFTiwKICBERVZDT05GX1BST1hZX05EUCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgREVWQ09ORl9PUFRJTUlTVElDX0RBRCwKICBERVZDT05GX0FDQ0VQVF9TT1VSQ0VfUk9VVEUsCiAgREVWQ09ORl9NQ19GT1JXQVJESU5HLAogIERFVkNPTkZfRElTQUJMRV9JUFY2LAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBERVZDT05GX0FDQ0VQVF9EQUQsCiAgREVWQ09ORl9GT1JDRV9UTExBTywKICBERVZDT05GX01BWAogfTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2lwdjZfcm91dGUuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9pcHY2X3JvdXRlLmgKaW5kZXggMzc5MWU4Ny4uNWUxZWIxMCAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2lwdjZfcm91dGUuaAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvaXB2Nl9yb3V0ZS5oCkBAIC03LDQ5ICs3LDU0IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfTElOVVhfSVBWNl9ST1VURV9ICiAjZGVmaW5lIF9MSU5VWF9JUFY2X1JPVVRFX0gKLQogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0KLSNkZWZpbmUgUlRGX0RFRkFVTFQgMHgwMDAxMDAwMCAgCi0jZGVmaW5lIFJURl9BTExPTkxJTksgMHgwMDAyMDAwMCAgCi0jZGVmaW5lIFJURl9BRERSQ09ORiAweDAwMDQwMDAwICAKLSNkZWZpbmUgUlRGX1BSRUZJWF9SVCAweDAwMDgwMDAwICAKLSNkZWZpbmUgUlRGX0FOWUNBU1QgMHgwMDEwMDAwMCAgCi0KLSNkZWZpbmUgUlRGX05PTkVYVEhPUCAweDAwMjAwMDAwICAKKyNkZWZpbmUgUlRGX0RFRkFVTFQgMHgwMDAxMDAwMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgUlRGX0FMTE9OTElOSyAweDAwMDIwMDAwCisjZGVmaW5lIFJURl9BRERSQ09ORiAweDAwMDQwMDAwCisjZGVmaW5lIFJURl9QUkVGSVhfUlQgMHgwMDA4MDAwMAorI2RlZmluZSBSVEZfQU5ZQ0FTVCAweDAwMTAwMDAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBSVEZfTk9ORVhUSE9QIDB4MDAyMDAwMDAKICNkZWZpbmUgUlRGX0VYUElSRVMgMHgwMDQwMDAwMAotCi0jZGVmaW5lIFJURl9ST1VURUlORk8gMHgwMDgwMDAwMCAgCi0KLSNkZWZpbmUgUlRGX0NBQ0hFIDB4MDEwMDAwMDAgIAotI2RlZmluZSBSVEZfRkxPVyAweDAyMDAwMDAwICAKLSNkZWZpbmUgUlRGX1BPTElDWSAweDA0MDAwMDAwICAKLQorI2RlZmluZSBSVEZfUk9VVEVJTkZPIDB4MDA4MDAwMDAKKyNkZWZpbmUgUlRGX0NBQ0hFIDB4MDEwMDAwMDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFJURl9GTE9XIDB4MDIwMDAwMDAKKyNkZWZpbmUgUlRGX1BPTElDWSAweDA0MDAwMDAwCiAjZGVmaW5lIFJURl9QUkVGKHByZWYpICgocHJlZikgPDwgMjcpCiAjZGVmaW5lIFJURl9QUkVGX01BU0sgMHgxODAwMDAwMAotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBSVEZfTE9DQUwgMHg4MDAwMDAwMAotCiBzdHJ1Y3QgaW42X3J0bXNnIHsKICBzdHJ1Y3QgaW42X2FkZHIgcnRtc2dfZHN0OwogIHN0cnVjdCBpbjZfYWRkciBydG1zZ19zcmM7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCBpbjZfYWRkciBydG1zZ19nYXRld2F5OwogIF9fdTMyIHJ0bXNnX3R5cGU7CiAgX191MTYgcnRtc2dfZHN0X2xlbjsKICBfX3UxNiBydG1zZ19zcmNfbGVuOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBydG1zZ19tZXRyaWM7CiAgdW5zaWduZWQgbG9uZyBydG1zZ19pbmZvOwogIF9fdTMyIHJ0bXNnX2ZsYWdzOwogIGludCBydG1zZ19pZmluZGV4OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07Ci0KICNkZWZpbmUgUlRNU0dfTkVXREVWSUNFIDB4MTEKICNkZWZpbmUgUlRNU0dfREVMREVWSUNFIDB4MTIKICNkZWZpbmUgUlRNU0dfTkVXUk9VVEUgMHgyMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUlRNU0dfREVMUk9VVEUgMHgyMgotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9pcHguaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9pcHguaAppbmRleCBmZjY3NWU5Li4wZjg1ZTVjIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvaXB4LmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2lweC5oCkBAIC03LDcyICs3LDg3IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfSVBYX0hfCiAjZGVmaW5lIF9JUFhfSF8KICNpbmNsdWRlIDxsaW51eC9zb2NraW9zLmg+CiAjaW5jbHVkZSA8bGludXgvc29ja2V0Lmg+CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJUFhfTk9ERV9MRU4gNgogI2RlZmluZSBJUFhfTVRVIDU3NgotCiBzdHJ1Y3Qgc29ja2FkZHJfaXB4IHsKICBzYV9mYW1pbHlfdCBzaXB4X2ZhbWlseTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MTYgc2lweF9wb3J0OwogIF9fdTMyIHNpcHhfbmV0d29yazsKICB1bnNpZ25lZCBjaGFyIHNpcHhfbm9kZVtJUFhfTk9ERV9MRU5dOwogIF9fdTggc2lweF90eXBlOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBjaGFyIHNpcHhfemVybzsKIH07Ci0KICNkZWZpbmUgc2lweF9zcGVjaWFsIHNpcHhfcG9ydAogI2RlZmluZSBzaXB4X2FjdGlvbiBzaXB4X3plcm8KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIElQWF9ETFRJVEYgMAogI2RlZmluZSBJUFhfQ1JUSVRGIDEKLQogc3RydWN0IGlweF9yb3V0ZV9kZWZpbml0aW9uIHsKICBfX3UzMiBpcHhfbmV0d29yazsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgaXB4X3JvdXRlcl9uZXR3b3JrOwogIHVuc2lnbmVkIGNoYXIgaXB4X3JvdXRlcl9ub2RlW0lQWF9OT0RFX0xFTl07CiB9OwotCiBzdHJ1Y3QgaXB4X2ludGVyZmFjZV9kZWZpbml0aW9uIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgaXB4X25ldHdvcms7CiAgdW5zaWduZWQgY2hhciBpcHhfZGV2aWNlWzE2XTsKICB1bnNpZ25lZCBjaGFyIGlweF9kbGlua190eXBlOwogI2RlZmluZSBJUFhfRlJBTUVfTk9ORSAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJUFhfRlJBTUVfU05BUCAxCiAjZGVmaW5lIElQWF9GUkFNRV84MDIyIDIKICNkZWZpbmUgSVBYX0ZSQU1FX0VUSEVSSUkgMwogI2RlZmluZSBJUFhfRlJBTUVfODAyMyA0Ci0jZGVmaW5lIElQWF9GUkFNRV9UUl84MDIyIDUgIAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgSVBYX0ZSQU1FX1RSXzgwMjIgNQogIHVuc2lnbmVkIGNoYXIgaXB4X3NwZWNpYWw7CiAjZGVmaW5lIElQWF9TUEVDSUFMX05PTkUgMAogI2RlZmluZSBJUFhfUFJJTUFSWSAxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJUFhfSU5URVJOQUwgMgogIHVuc2lnbmVkIGNoYXIgaXB4X25vZGVbSVBYX05PREVfTEVOXTsKIH07Ci0KIHN0cnVjdCBpcHhfY29uZmlnX2RhdGEgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBjaGFyIGlweGNmZ19hdXRvX3NlbGVjdF9wcmltYXJ5OwogIHVuc2lnbmVkIGNoYXIgaXB4Y2ZnX2F1dG9fY3JlYXRlX2ludGVyZmFjZXM7CiB9OwotCiBzdHJ1Y3QgaXB4X3JvdXRlX2RlZiB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGlweF9uZXR3b3JrOwogIF9fdTMyIGlweF9yb3V0ZXJfbmV0d29yazsKICNkZWZpbmUgSVBYX1JPVVRFX05PX1JPVVRFUiAwCiAgdW5zaWduZWQgY2hhciBpcHhfcm91dGVyX25vZGVbSVBYX05PREVfTEVOXTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgY2hhciBpcHhfZGV2aWNlWzE2XTsKICB1bnNpZ25lZCBzaG9ydCBpcHhfZmxhZ3M7CiAjZGVmaW5lIElQWF9SVF9TTkFQIDgKICNkZWZpbmUgSVBYX1JUXzgwMjIgNAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSVBYX1JUX0JMVUVCT09LIDIKICNkZWZpbmUgSVBYX1JUX1JPVVRFRCAxCiB9OwotCiAjZGVmaW5lIFNJT0NBSVBYSVRGQ1JUIChTSU9DUFJPVE9QUklWQVRFKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU0lPQ0FJUFhQUklTTFQgKFNJT0NQUk9UT1BSSVZBVEUgKyAxKQogI2RlZmluZSBTSU9DSVBYQ0ZHREFUQSAoU0lPQ1BST1RPUFJJVkFURSArIDIpCiAjZGVmaW5lIFNJT0NJUFhOQ1BDT05OIChTSU9DUFJPVE9QUklWQVRFICsgMykKICNlbmRpZgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9pcnEuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9pcnEuaAppbmRleCAzOGY1ZGI3Li44NmQ3MjZlIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvaXJxLmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2lycS5oCkBAIC03LDk0ICs3LDEwMyBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX0xJTlVYX0lSUV9ICiAjZGVmaW5lIF9MSU5VWF9JUlFfSAotCiAjaW5jbHVkZSA8bGludXgvc21wLmg+Ci0KICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2luY2x1ZGUgPGxpbnV4L2NhY2hlLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+CiAjaW5jbHVkZSA8bGludXgvaXJxcmV0dXJuLmg+Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KLQotI2RlZmluZSBJUlFfVFlQRV9OT05FIDB4MDAwMDAwMDAgIAotI2RlZmluZSBJUlFfVFlQRV9FREdFX1JJU0lORyAweDAwMDAwMDAxICAKLSNkZWZpbmUgSVJRX1RZUEVfRURHRV9GQUxMSU5HIDB4MDAwMDAwMDIgIAorI2RlZmluZSBJUlFfVFlQRV9OT05FIDB4MDAwMDAwMDAKKyNkZWZpbmUgSVJRX1RZUEVfRURHRV9SSVNJTkcgMHgwMDAwMDAwMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgSVJRX1RZUEVfRURHRV9GQUxMSU5HIDB4MDAwMDAwMDIKICNkZWZpbmUgSVJRX1RZUEVfRURHRV9CT1RIIChJUlFfVFlQRV9FREdFX0ZBTExJTkcgfCBJUlFfVFlQRV9FREdFX1JJU0lORykKLSNkZWZpbmUgSVJRX1RZUEVfTEVWRUxfSElHSCAweDAwMDAwMDA0ICAKLSNkZWZpbmUgSVJRX1RZUEVfTEVWRUxfTE9XIDB4MDAwMDAwMDggIAotI2RlZmluZSBJUlFfVFlQRV9TRU5TRV9NQVNLIDB4MDAwMDAwMGYgIAotI2RlZmluZSBJUlFfVFlQRV9QUk9CRSAweDAwMDAwMDEwICAKLQotI2RlZmluZSBJUlFfSU5QUk9HUkVTUyAweDAwMDEwMDAwICAKLSNkZWZpbmUgSVJRX0RJU0FCTEVEIDB4MDAwMjAwMDAgIAotI2RlZmluZSBJUlFfUEVORElORyAweDAwMDQwMDAwICAKLSNkZWZpbmUgSVJRX1JFUExBWSAweDAwMDgwMDAwICAKLSNkZWZpbmUgSVJRX0FVVE9ERVRFQ1QgMHgwMDEwMDAwMCAgCi0jZGVmaW5lIElSUV9XQUlUSU5HIDB4MDAyMDAwMDAgIAotI2RlZmluZSBJUlFfTEVWRUwgMHgwMDQwMDAwMCAgCi0jZGVmaW5lIElSUV9NQVNLRUQgMHgwMDgwMDAwMCAgCi0jZGVmaW5lIElSUV9QRVJfQ1BVIDB4MDEwMDAwMDAgIAorI2RlZmluZSBJUlFfVFlQRV9MRVZFTF9ISUdIIDB4MDAwMDAwMDQKKyNkZWZpbmUgSVJRX1RZUEVfTEVWRUxfTE9XIDB4MDAwMDAwMDgKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIElSUV9UWVBFX1NFTlNFX01BU0sgMHgwMDAwMDAwZgorI2RlZmluZSBJUlFfVFlQRV9QUk9CRSAweDAwMDAwMDEwCisjZGVmaW5lIElSUV9JTlBST0dSRVNTIDB4MDAwMTAwMDAKKyNkZWZpbmUgSVJRX0RJU0FCTEVEIDB4MDAwMjAwMDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIElSUV9QRU5ESU5HIDB4MDAwNDAwMDAKKyNkZWZpbmUgSVJRX1JFUExBWSAweDAwMDgwMDAwCisjZGVmaW5lIElSUV9BVVRPREVURUNUIDB4MDAxMDAwMDAKKyNkZWZpbmUgSVJRX1dBSVRJTkcgMHgwMDIwMDAwMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgSVJRX0xFVkVMIDB4MDA0MDAwMDAKKyNkZWZpbmUgSVJRX01BU0tFRCAweDAwODAwMDAwCisjZGVmaW5lIElSUV9QRVJfQ1BVIDB4MDEwMDAwMDAKICNkZWZpbmUgQ0hFQ0tfSVJRX1BFUl9DUFUodmFyKSAwCi0KLSNkZWZpbmUgSVJRX05PUFJPQkUgMHgwMjAwMDAwMCAgCi0jZGVmaW5lIElSUV9OT1JFUVVFU1QgMHgwNDAwMDAwMCAgCi0jZGVmaW5lIElSUV9OT0FVVE9FTiAweDA4MDAwMDAwICAKLSNkZWZpbmUgSVJRX0RFTEFZRURfRElTQUJMRSAweDEwMDAwMDAwICAKLSNkZWZpbmUgSVJRX1dBS0VVUCAweDIwMDAwMDAwICAKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgSVJRX05PUFJPQkUgMHgwMjAwMDAwMAorI2RlZmluZSBJUlFfTk9SRVFVRVNUIDB4MDQwMDAwMDAKKyNkZWZpbmUgSVJRX05PQVVUT0VOIDB4MDgwMDAwMDAKKyNkZWZpbmUgSVJRX0RFTEFZRURfRElTQUJMRSAweDEwMDAwMDAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBJUlFfV0FLRVVQIDB4MjAwMDAwMDAKIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeTsKLQogc3RydWN0IGlycV9jaGlwIHsKICBjb25zdCBjaGFyICpuYW1lOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBpbnQgKCpzdGFydHVwKSh1bnNpZ25lZCBpbnQgaXJxKTsKICB2b2lkICgqc2h1dGRvd24pKHVuc2lnbmVkIGludCBpcnEpOwogIHZvaWQgKCplbmFibGUpKHVuc2lnbmVkIGludCBpcnEpOwogIHZvaWQgKCpkaXNhYmxlKSh1bnNpZ25lZCBpbnQgaXJxKTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB2b2lkICgqYWNrKSh1bnNpZ25lZCBpbnQgaXJxKTsKICB2b2lkICgqbWFzaykodW5zaWduZWQgaW50IGlycSk7CiAgdm9pZCAoKm1hc2tfYWNrKSh1bnNpZ25lZCBpbnQgaXJxKTsKICB2b2lkICgqdW5tYXNrKSh1bnNpZ25lZCBpbnQgaXJxKTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdm9pZCAoKmVvaSkodW5zaWduZWQgaW50IGlycSk7Ci0KICB2b2lkICgqZW5kKSh1bnNpZ25lZCBpbnQgaXJxKTsKICB2b2lkICgqc2V0X2FmZmluaXR5KSh1bnNpZ25lZCBpbnQgaXJxLCBjcHVtYXNrX3QgZGVzdCk7CiAgaW50ICgqcmV0cmlnZ2VyKSh1bnNpZ25lZCBpbnQgaXJxKTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgaW50ICgqc2V0X3R5cGUpKHVuc2lnbmVkIGludCBpcnEsIHVuc2lnbmVkIGludCBmbG93X3R5cGUpOwogIGludCAoKnNldF93YWtlKSh1bnNpZ25lZCBpbnQgaXJxLCB1bnNpZ25lZCBpbnQgb24pOwotCiAgY29uc3QgY2hhciAqdHlwZW5hbWU7CiB9OwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IGlycV9kZXNjIHsKICB2b2lkIGZhc3RjYWxsICgqaGFuZGxlX2lycSkodW5zaWduZWQgaW50IGlycSwKICBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MsCiAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgaXJxX2NoaXAgKmNoaXA7CiAgdm9pZCAqaGFuZGxlcl9kYXRhOwogIHZvaWQgKmNoaXBfZGF0YTsKICBzdHJ1Y3QgaXJxYWN0aW9uICphY3Rpb247CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGludCBzdGF0dXM7Ci0KICB1bnNpZ25lZCBpbnQgZGVwdGg7CiAgdW5zaWduZWQgaW50IHdha2VfZGVwdGg7CiAgdW5zaWduZWQgaW50IGlycV9jb3VudDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgaW50IGlycXNfdW5oYW5kbGVkOwogIHNwaW5sb2NrX3QgbG9jazsKIH0gX19fX2NhY2hlbGluZV9hbGlnbmVkOwotCiAjZGVmaW5lIGh3X2ludGVycnVwdF90eXBlIGlycV9jaGlwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogdHlwZWRlZiBzdHJ1Y3QgaXJxX2NoaXAgaHdfaXJxX2NvbnRyb2xsZXI7CiAjZGVmaW5lIG5vX2lycV90eXBlIG5vX2lycV9jaGlwCiB0eXBlZGVmIHN0cnVjdCBpcnFfZGVzYyBpcnFfZGVzY190OwotCiAjaW5jbHVkZSA8YXNtL2h3X2lycS5oPgotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvaXJxX2NwdXN0YXQuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9pcnFfY3B1c3RhdC5oCmluZGV4IDM1NDBhNGEuLmYyNjgzZDUgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9pcnFfY3B1c3RhdC5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9pcnFfY3B1c3RhdC5oCkBAIC03LDE4ICs3LDIyIEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfX2lycV9jcHVzdGF0X2gKICNkZWZpbmUgX19pcnFfY3B1c3RhdF9oCi0KICNpZm5kZWYgX19BUkNIX0lSUV9TVEFUCi0KICNkZWZpbmUgX19JUlFfU1RBVChjcHUsIG1lbWJlcikgKGlycV9zdGF0W2NwdV0ubWVtYmVyKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlbmRpZgotCiAjZGVmaW5lIGxvY2FsX3NvZnRpcnFfcGVuZGluZygpICAgX19JUlFfU1RBVChzbXBfcHJvY2Vzc29yX2lkKCksIF9fc29mdGlycV9wZW5kaW5nKQotCi0jZGVmaW5lIG5taV9jb3VudChjcHUpIF9fSVJRX1NUQVQoKGNwdSksIF9fbm1pX2NvdW50KSAgCi0KKyNkZWZpbmUgbm1pX2NvdW50KGNwdSkgX19JUlFfU1RBVCgoY3B1KSwgX19ubWlfY291bnQpCiAjZW5kaWYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvaXJxZmxhZ3MuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9pcnFmbGFncy5oCmluZGV4IDFiZjNmOTAuLmFmM2FlZTkgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9pcnFmbGFncy5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9pcnFmbGFncy5oCkBAIC03LDI4ICs3LDM3IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfTElOVVhfVFJBQ0VfSVJRRkxBR1NfSAogI2RlZmluZSBfTElOVVhfVFJBQ0VfSVJRRkxBR1NfSAotCiAjZGVmaW5lIHRyYWNlX2hhcmRpcnFzX29uKCkgZG8geyB9IHdoaWxlICgwKQogI2RlZmluZSB0cmFjZV9oYXJkaXJxc19vZmYoKSBkbyB7IH0gd2hpbGUgKDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSB0cmFjZV9zb2Z0aXJxc19vbihpcCkgZG8geyB9IHdoaWxlICgwKQogI2RlZmluZSB0cmFjZV9zb2Z0aXJxc19vZmYoaXApIGRvIHsgfSB3aGlsZSAoMCkKICNkZWZpbmUgdHJhY2VfaGFyZGlycV9jb250ZXh0KHApIDAKICNkZWZpbmUgdHJhY2Vfc29mdGlycV9jb250ZXh0KHApIDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIHRyYWNlX2hhcmRpcnFzX2VuYWJsZWQocCkgMAogI2RlZmluZSB0cmFjZV9zb2Z0aXJxc19lbmFibGVkKHApIDAKICNkZWZpbmUgdHJhY2VfaGFyZGlycV9lbnRlcigpIGRvIHsgfSB3aGlsZSAoMCkKICNkZWZpbmUgdHJhY2VfaGFyZGlycV9leGl0KCkgZG8geyB9IHdoaWxlICgwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgdHJhY2Vfc29mdGlycV9lbnRlcigpIGRvIHsgfSB3aGlsZSAoMCkKICNkZWZpbmUgdHJhY2Vfc29mdGlycV9leGl0KCkgZG8geyB9IHdoaWxlICgwKQogI2RlZmluZSBJTklUX1RSQUNFX0lSUUZMQUdTCi0KICNkZWZpbmUgcmF3X2xvY2FsX2lycV9kaXNhYmxlKCkgbG9jYWxfaXJxX2Rpc2FibGUoKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgcmF3X2xvY2FsX2lycV9lbmFibGUoKSBsb2NhbF9pcnFfZW5hYmxlKCkKICNkZWZpbmUgcmF3X2xvY2FsX2lycV9zYXZlKGZsYWdzKSBsb2NhbF9pcnFfc2F2ZShmbGFncykKICNkZWZpbmUgcmF3X2xvY2FsX2lycV9yZXN0b3JlKGZsYWdzKSBsb2NhbF9pcnFfcmVzdG9yZShmbGFncykKLQogI2VuZGlmCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2lycXJldHVybi5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2lycXJldHVybi5oCmluZGV4IGUzN2Y0MzAuLjE0MjAxYmYgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9pcnFyZXR1cm4uaAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvaXJxcmV0dXJuLmgKQEAgLTcsMTUgKzcsMjAgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9MSU5VWF9JUlFSRVRVUk5fSAogI2RlZmluZSBfTElOVVhfSVJRUkVUVVJOX0gKLQogdHlwZWRlZiBpbnQgaXJxcmV0dXJuX3Q7Ci0KICNkZWZpbmUgSVJRX05PTkUgKDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJUlFfSEFORExFRCAoMSkKICNkZWZpbmUgSVJRX1JFVFZBTCh4KSAoKHgpICE9IDApCi0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2piZC5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2piZC5oCmluZGV4IDdiYTc2NmMuLjIwY2M3MzMgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9qYmQuaAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvamJkLmgKQEAgLTcsMTEyICs3LDEwNyBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX0xJTlVYX0pCRF9ICiAjZGVmaW5lIF9MSU5VWF9KQkRfSAotCiAjaW5jbHVkZSAiamZzX2NvbXBhdC5oIgogI2RlZmluZSBKRlNfREVCVUcKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIGpmc19kZWJ1ZyBqYmRfZGVidWcKLQogI2RlZmluZSBqb3VybmFsX29vbV9yZXRyeSAxCi0KICN1bmRlZiBKQkRfUEFSQU5PSURfSU9GQUlMCi0KICNkZWZpbmUgSkJEX0RFRkFVTFRfTUFYX0NPTU1JVF9BR0UgNQotCi0jZGVmaW5lIGpiZF9kZWJ1ZyhmLCBhLi4uKSAgCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIGpiZF9kZWJ1ZyhmLCBhLi4uKQogI2RlZmluZSBqYmRfa21hbGxvYyhzaXplLCBmbGFncykgICBfX2piZF9rbWFsbG9jKF9fRlVOQ1RJT05fXywgKHNpemUpLCAoZmxhZ3MpLCBqb3VybmFsX29vbV9yZXRyeSkKICNkZWZpbmUgamJkX3JlcF9rbWFsbG9jKHNpemUsIGZsYWdzKSAgIF9famJkX2ttYWxsb2MoX19GVU5DVElPTl9fLCAoc2l6ZSksIChmbGFncyksIDEpCi0KICNkZWZpbmUgSkZTX01JTl9KT1VSTkFMX0JMT0NLUyAxMDI0Ci0KLSNkZWZpbmUgSkZTX01BR0lDX05VTUJFUiAweGMwM2IzOTk4VSAgCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEpGU19NQUdJQ19OVU1CRVIgMHhjMDNiMzk5OFUKICNkZWZpbmUgSkZTX0RFU0NSSVBUT1JfQkxPQ0sgMQogI2RlZmluZSBKRlNfQ09NTUlUX0JMT0NLIDIKICNkZWZpbmUgSkZTX1NVUEVSQkxPQ0tfVjEgMworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSkZTX1NVUEVSQkxPQ0tfVjIgNAogI2RlZmluZSBKRlNfUkVWT0tFX0JMT0NLIDUKLQogdHlwZWRlZiBzdHJ1Y3Qgam91cm5hbF9oZWFkZXJfcwogeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX2JlMzIgaF9tYWdpYzsKICBfX2JlMzIgaF9ibG9ja3R5cGU7CiAgX19iZTMyIGhfc2VxdWVuY2U7CiB9IGpvdXJuYWxfaGVhZGVyX3Q7Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB0eXBlZGVmIHN0cnVjdCBqb3VybmFsX2Jsb2NrX3RhZ19zCiB7CiAgX19iZTMyIHRfYmxvY2tucjsKICBfX2JlMzIgdF9mbGFnczsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9IGpvdXJuYWxfYmxvY2tfdGFnX3Q7Ci0KIHR5cGVkZWYgc3RydWN0IGpvdXJuYWxfcmV2b2tlX2hlYWRlcl9zCiB7CiAgam91cm5hbF9oZWFkZXJfdCByX2hlYWRlcjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX19iZTMyIHJfY291bnQ7CiB9IGpvdXJuYWxfcmV2b2tlX2hlYWRlcl90OwotCi0jZGVmaW5lIEpGU19GTEFHX0VTQ0FQRSAxICAKLSNkZWZpbmUgSkZTX0ZMQUdfU0FNRV9VVUlEIDIgIAotI2RlZmluZSBKRlNfRkxBR19ERUxFVEVEIDQgIAotI2RlZmluZSBKRlNfRkxBR19MQVNUX1RBRyA4ICAKLQorI2RlZmluZSBKRlNfRkxBR19FU0NBUEUgMQorI2RlZmluZSBKRlNfRkxBR19TQU1FX1VVSUQgMgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgSkZTX0ZMQUdfREVMRVRFRCA0CisjZGVmaW5lIEpGU19GTEFHX0xBU1RfVEFHIDgKIHR5cGVkZWYgc3RydWN0IGpvdXJuYWxfc3VwZXJibG9ja19zCiB7Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgam91cm5hbF9oZWFkZXJfdCBzX2hlYWRlcjsKLQogIF9fYmUzMiBzX2Jsb2Nrc2l6ZTsKICBfX2JlMzIgc19tYXhsZW47CiAgX19iZTMyIHNfZmlyc3Q7Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX19iZTMyIHNfc2VxdWVuY2U7CiAgX19iZTMyIHNfc3RhcnQ7Ci0KICBfX2JlMzIgc19lcnJubzsKLQogIF9fYmUzMiBzX2ZlYXR1cmVfY29tcGF0OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX2JlMzIgc19mZWF0dXJlX2luY29tcGF0OwogIF9fYmUzMiBzX2ZlYXR1cmVfcm9fY29tcGF0OwotCiAgX191OCBzX3V1aWRbMTZdOwotCiAgX19iZTMyIHNfbnJfdXNlcnM7Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX19iZTMyIHNfZHluc3VwZXI7Ci0KICBfX2JlMzIgc19tYXhfdHJhbnNhY3Rpb247CiAgX19iZTMyIHNfbWF4X3RyYW5zX2RhdGE7Ci0KICBfX3UzMiBzX3BhZGRpbmdbNDRdOwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTggc191c2Vyc1sxNio0OF07Ci0KIH0gam91cm5hbF9zdXBlcmJsb2NrX3Q7Ci0KICNkZWZpbmUgSkZTX0hBU19DT01QQVRfRkVBVFVSRShqLG1hc2spICAgKChqKS0+al9mb3JtYXRfdmVyc2lvbiA+PSAyICYmICAgKChqKS0+al9zdXBlcmJsb2NrLT5zX2ZlYXR1cmVfY29tcGF0ICYgY3B1X3RvX2JlMzIoKG1hc2spKSkpCiAjZGVmaW5lIEpGU19IQVNfUk9fQ09NUEFUX0ZFQVRVUkUoaixtYXNrKSAgICgoaiktPmpfZm9ybWF0X3ZlcnNpb24gPj0gMiAmJiAgICgoaiktPmpfc3VwZXJibG9jay0+c19mZWF0dXJlX3JvX2NvbXBhdCAmIGNwdV90b19iZTMyKChtYXNrKSkpKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSkZTX0hBU19JTkNPTVBBVF9GRUFUVVJFKGosbWFzaykgICAoKGopLT5qX2Zvcm1hdF92ZXJzaW9uID49IDIgJiYgICAoKGopLT5qX3N1cGVyYmxvY2stPnNfZmVhdHVyZV9pbmNvbXBhdCAmIGNwdV90b19iZTMyKChtYXNrKSkpKQotCiAjZGVmaW5lIEpGU19GRUFUVVJFX0lOQ09NUEFUX1JFVk9LRSAweDAwMDAwMDAxCi0KICNkZWZpbmUgSkZTX0tOT1dOX0NPTVBBVF9GRUFUVVJFUyAwCiAjZGVmaW5lIEpGU19LTk9XTl9ST0NPTVBBVF9GRUFUVVJFUyAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBKRlNfS05PV05fSU5DT01QQVRfRkVBVFVSRVMgSkZTX0ZFQVRVUkVfSU5DT01QQVRfUkVWT0tFCi0KLSNkZWZpbmUgQkpfTm9uZSAwICAKLSNkZWZpbmUgQkpfU3luY0RhdGEgMSAgCi0jZGVmaW5lIEJKX01ldGFkYXRhIDIgIAotI2RlZmluZSBCSl9Gb3JnZXQgMyAgCi0jZGVmaW5lIEJKX0lPIDQgIAotI2RlZmluZSBCSl9TaGFkb3cgNSAgCi0jZGVmaW5lIEJKX0xvZ0N0bCA2ICAKLSNkZWZpbmUgQkpfUmVzZXJ2ZWQgNyAgCi0jZGVmaW5lIEJKX0xvY2tlZCA4ICAKKyNkZWZpbmUgQkpfTm9uZSAwCisjZGVmaW5lIEJKX1N5bmNEYXRhIDEKKyNkZWZpbmUgQkpfTWV0YWRhdGEgMgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgQkpfRm9yZ2V0IDMKKyNkZWZpbmUgQkpfSU8gNAorI2RlZmluZSBCSl9TaGFkb3cgNQorI2RlZmluZSBCSl9Mb2dDdGwgNgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgQkpfUmVzZXJ2ZWQgNworI2RlZmluZSBCSl9Mb2NrZWQgOAogI2RlZmluZSBCSl9UeXBlcyA5Ci0KICNlbmRpZgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9qaWZmaWVzLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvamlmZmllcy5oCmluZGV4IDg2YjcwNWIuLmMyMjFiZjQgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9qaWZmaWVzLmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2ppZmZpZXMuaApAQCAtNywxMDkgKzcsMTI0IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfTElOVVhfSklGRklFU19ICiAjZGVmaW5lIF9MSU5VWF9KSUZGSUVTX0gKLQogI2luY2x1ZGUgPGxpbnV4L2NhbGM2NC5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KICNpbmNsdWRlIDxsaW51eC90aW1leC5oPgotI2luY2x1ZGUgPGFzbS9wYXJhbS5oPiAgCi0KKyNpbmNsdWRlIDxhc20vcGFyYW0uaD4KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjaWYgSFogPj0gKDEyICYmIEhaIDwgMjQpCiAjZGVmaW5lIFNISUZUX0haIDQKICNlbGlmIEhaID49IDI0ICYmIEhaIDwgNDgKICNkZWZpbmUgU0hJRlRfSFogNQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlbGlmIEhaID49IDQ4ICYmIEhaIDwgOTYKICNkZWZpbmUgU0hJRlRfSFogNgogI2VsaWYgSFogPj0gOTYgJiYgSFogPCAxOTIKICNkZWZpbmUgU0hJRlRfSFogNworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlbGlmIEhaID49IDE5MiAmJiBIWiA8IDM4NAogI2RlZmluZSBTSElGVF9IWiA4CiAjZWxpZiBIWiA+PSAzODQgJiYgSFogPCA3NjgKICNkZWZpbmUgU0hJRlRfSFogOQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlbGlmIEhaID49IDc2OCAmJiBIWiA8IDE1MzYKICNkZWZpbmUgU0hJRlRfSFogMTAKICNlbHNlCiAjZXJyb3IgWW91IGxvc2UuCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2VuZGlmCi0KLSNkZWZpbmUgTEFUQ0ggKChDTE9DS19USUNLX1JBVEUgKyBIWi8yKSAvIEhaKSAgCi0KKyNkZWZpbmUgTEFUQ0ggKChDTE9DS19USUNLX1JBVEUgKyBIWi8yKSAvIEhaKQogI2RlZmluZSBMQVRDSF9IUEVUICgoSFBFVF9USUNLX1JBVEUgKyBIWi8yKSAvIEhaKQotCiAjZGVmaW5lIFNIX0RJVihOT00sREVOLExTSCkgKCAoKChOT00pIC8gKERFTikpIDw8IChMU0gpKSAgICsgKCgoKE5PTSkgJSAoREVOKSkgPDwgKExTSCkpICsgKERFTikgLyAyKSAvIChERU4pKQotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBQ1RIWiAoU0hfRElWIChDTE9DS19USUNLX1JBVEUsIExBVENILCA4KSkKLQogI2RlZmluZSBBQ1RIWl9IUEVUIChTSF9ESVYgKEhQRVRfVElDS19SQVRFLCBMQVRDSF9IUEVULCA4KSkKLQogI2RlZmluZSBUSUNLX05TRUMgKFNIX0RJViAoMTAwMDAwMFVMICogMTAwMCwgQUNUSFosIDgpKQotCiAjZGVmaW5lIFRJQ0tfTlNFQ19IUEVUIChTSF9ESVYoMTAwMDAwMFVMICogMTAwMCwgQUNUSFpfSFBFVCwgOCkpCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFRJQ0tfVVNFQyAoKDEwMDAwMDBVTCArIFVTRVJfSFovMikgLyBVU0VSX0haKQotCiAjZGVmaW5lIFRJQ0tfVVNFQ19UT19OU0VDKFRVU0VDKSAoU0hfRElWIChUVVNFQyAqIFVTRVJfSFogKiAxMDAwLCBBQ1RIWiwgOCkpCi0KICNkZWZpbmUgX19qaWZmeV9kYXRhIF9fYXR0cmlidXRlX18oKHNlY3Rpb24oIi5kYXRhIikpKQotCiAjaWYgQklUU19QRVJfTE9ORyA8IDY0Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZWxzZQogI2VuZGlmCiAjZGVmaW5lIHRpbWVfYWZ0ZXIoYSxiKSAgICh0eXBlY2hlY2sodW5zaWduZWQgbG9uZywgYSkgJiYgICB0eXBlY2hlY2sodW5zaWduZWQgbG9uZywgYikgJiYgICAoKGxvbmcpKGIpIC0gKGxvbmcpKGEpIDwgMCkpCiAjZGVmaW5lIHRpbWVfYmVmb3JlKGEsYikgdGltZV9hZnRlcihiLGEpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSB0aW1lX2FmdGVyX2VxKGEsYikgICAodHlwZWNoZWNrKHVuc2lnbmVkIGxvbmcsIGEpICYmICAgdHlwZWNoZWNrKHVuc2lnbmVkIGxvbmcsIGIpICYmICAgKChsb25nKShhKSAtIChsb25nKShiKSA+PSAwKSkKICNkZWZpbmUgdGltZV9iZWZvcmVfZXEoYSxiKSB0aW1lX2FmdGVyX2VxKGIsYSkKICNkZWZpbmUgSU5JVElBTF9KSUZGSUVTICgodW5zaWduZWQgbG9uZykodW5zaWduZWQgaW50KSAoLTMwMCpIWikpCiAjZGVmaW5lIE1BWF9KSUZGWV9PRkZTRVQgKCh+MFVMID4+IDEpLTEpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTRUNfSklGRklFX1NDICgzMSAtIFNISUZUX0haKQogI2lmICEoKE5TRUNfUEVSX1NFQyA8PCAyKSAvIFRJQ0tfTlNFQyA8PCBTRUNfSklGRklFX1NDIC0gMiAmIDB4ODAwMDAwMDApCiAjdW5kZWYgU0VDX0pJRkZJRV9TQwogI2RlZmluZSBTRUNfSklGRklFX1NDICgzMiAtIFNISUZUX0haKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlbmRpZgogI2RlZmluZSBOU0VDX0pJRkZJRV9TQyAoU0VDX0pJRkZJRV9TQyArIDI5KQogI2RlZmluZSBVU0VDX0pJRkZJRV9TQyAoU0VDX0pJRkZJRV9TQyArIDE5KQogI2RlZmluZSBTRUNfQ09OVkVSU0lPTiAoKHVuc2lnbmVkIGxvbmcpKCgoKHU2NClOU0VDX1BFUl9TRUMgPDwgU0VDX0pJRkZJRV9TQykgKyAgVElDS19OU0VDIC0xKSAvICh1NjQpVElDS19OU0VDKSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE5TRUNfQ09OVkVSU0lPTiAoKHVuc2lnbmVkIGxvbmcpKCgoKHU2NCkxIDw8IE5TRUNfSklGRklFX1NDKSArICBUSUNLX05TRUMgLTEpIC8gKHU2NClUSUNLX05TRUMpKQogI2RlZmluZSBVU0VDX0NPTlZFUlNJT04gICAoKHVuc2lnbmVkIGxvbmcpKCgoKHU2NClOU0VDX1BFUl9VU0VDIDw8IFVTRUNfSklGRklFX1NDKSArICBUSUNLX05TRUMgLTEpIC8gKHU2NClUSUNLX05TRUMpKQogI2RlZmluZSBVU0VDX1JPVU5EICh1NjQpKCgodTY0KTEgPDwgVVNFQ19KSUZGSUVfU0MpIC0gMSkKICNpZiBCSVRTX1BFUl9MT05HIDwgNjQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1BWF9TRUNfSU5fSklGRklFUyAgIChsb25nKSgodTY0KSgodTY0KU1BWF9KSUZGWV9PRkZTRVQgKiBUSUNLX05TRUMpIC8gTlNFQ19QRVJfU0VDKQogI2Vsc2UKICNkZWZpbmUgTUFYX1NFQ19JTl9KSUZGSUVTICAgKFNIX0RJVigoTUFYX0pJRkZZX09GRlNFVCA+PiBTRUNfSklGRklFX1NDKSAqIFRJQ0tfTlNFQywgTlNFQ19QRVJfU0VDLCAxKSAtIDEpCiAjZW5kaWYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjaWYgSFogPD0gKE1TRUNfUEVSX1NFQyAmJiAhKE1TRUNfUEVSX1NFQyAlIEhaKSkKICNlbGlmIEhaID4gTVNFQ19QRVJfU0VDICYmICEoSFogJSBNU0VDX1BFUl9TRUMpCiAjZWxzZQogI2VuZGlmCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2lmIEhaIDw9IChVU0VDX1BFUl9TRUMgJiYgIShVU0VDX1BFUl9TRUMgJSBIWikpCiAjZWxpZiBIWiA+IFVTRUNfUEVSX1NFQyAmJiAhKEhaICUgVVNFQ19QRVJfU0VDKQogI2Vsc2UKICNlbmRpZgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNpZiBIWiA8PSAoTVNFQ19QRVJfU0VDICYmICEoTVNFQ19QRVJfU0VDICUgSFopKQogI2VsaWYgSFogPiBNU0VDX1BFUl9TRUMgJiYgIShIWiAlIE1TRUNfUEVSX1NFQykKICNlbHNlCiAjZW5kaWYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjaWYgSFogPD0gKFVTRUNfUEVSX1NFQyAmJiAhKFVTRUNfUEVSX1NFQyAlIEhaKSkKICNlbGlmIEhaID4gVVNFQ19QRVJfU0VDICYmICEoSFogJSBVU0VDX1BFUl9TRUMpCiAjZWxzZQogI2VuZGlmCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2lmIFRJQ0tfTlNFQyAlIE5TRUNfUEVSX1NFQyAvIFVTRVJfSFogPT0gMAogI2Vsc2UKICNlbmRpZgogI2lmIEhaICUgVVNFUl9IWiA9PSAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2Vsc2UKICNlbmRpZgogI2lmIFRJQ0tfTlNFQyAlIE5TRUNfUEVSX1NFQyAvIFVTRVJfSFogPT0gMAogI2Vsc2UKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZW5kaWYKICNpZiBOU0VDX1BFUl9TRUMgJSBVU0VSX0haID09IDAKICNlbGlmIChVU0VSX0haICUgNTEyKSA9PSAwCiAjZWxzZQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlbmRpZgogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgva2QuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9rZC5oCmluZGV4IDE1NDFkZGYuLjA4MzM1ZGYgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9rZC5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9rZC5oCkBAIC03LDE3MCArNywxNzkgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9MSU5VWF9LRF9ICiAjZGVmaW5lIF9MSU5VWF9LRF9ICiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgotCi0jZGVmaW5lIEdJT19GT05UIDB4NEI2MCAgCi0jZGVmaW5lIFBJT19GT05UIDB4NEI2MSAgCi0KLSNkZWZpbmUgR0lPX0ZPTlRYIDB4NEI2QiAgCi0jZGVmaW5lIFBJT19GT05UWCAweDRCNkMgIAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgR0lPX0ZPTlQgMHg0QjYwCisjZGVmaW5lIFBJT19GT05UIDB4NEI2MQorI2RlZmluZSBHSU9fRk9OVFggMHg0QjZCCisjZGVmaW5lIFBJT19GT05UWCAweDRCNkMKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgY29uc29sZWZvbnRkZXNjIHsKICB1bnNpZ25lZCBzaG9ydCBjaGFyY291bnQ7CiAgdW5zaWduZWQgc2hvcnQgY2hhcmhlaWdodDsKICBjaGFyIF9fdXNlciAqY2hhcmRhdGE7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKLQotI2RlZmluZSBQSU9fRk9OVFJFU0VUIDB4NEI2RCAgCi0KLSNkZWZpbmUgR0lPX0NNQVAgMHg0QjcwICAKLSNkZWZpbmUgUElPX0NNQVAgMHg0QjcxICAKLQotI2RlZmluZSBLSU9DU09VTkQgMHg0QjJGICAKLSNkZWZpbmUgS0RNS1RPTkUgMHg0QjMwICAKLQotI2RlZmluZSBLREdFVExFRCAweDRCMzEgIAotI2RlZmluZSBLRFNFVExFRCAweDRCMzIgIAotI2RlZmluZSBMRURfU0NSIDB4MDEgIAotI2RlZmluZSBMRURfTlVNIDB4MDIgIAotI2RlZmluZSBMRURfQ0FQIDB4MDQgIAotCi0jZGVmaW5lIEtER0tCVFlQRSAweDRCMzMgIAorI2RlZmluZSBQSU9fRk9OVFJFU0VUIDB4NEI2RAorI2RlZmluZSBHSU9fQ01BUCAweDRCNzAKKyNkZWZpbmUgUElPX0NNQVAgMHg0QjcxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBLSU9DU09VTkQgMHg0QjJGCisjZGVmaW5lIEtETUtUT05FIDB4NEIzMAorI2RlZmluZSBLREdFVExFRCAweDRCMzEKKyNkZWZpbmUgS0RTRVRMRUQgMHg0QjMyCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBMRURfU0NSIDB4MDEKKyNkZWZpbmUgTEVEX05VTSAweDAyCisjZGVmaW5lIExFRF9DQVAgMHgwNAorI2RlZmluZSBLREdLQlRZUEUgMHg0QjMzCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLQl84NCAweDAxCi0jZGVmaW5lIEtCXzEwMSAweDAyICAKKyNkZWZpbmUgS0JfMTAxIDB4MDIKICNkZWZpbmUgS0JfT1RIRVIgMHgwMwotCi0jZGVmaW5lIEtEQURESU8gMHg0QjM0ICAKLSNkZWZpbmUgS0RERUxJTyAweDRCMzUgIAotI2RlZmluZSBLREVOQUJJTyAweDRCMzYgIAotI2RlZmluZSBLRERJU0FCSU8gMHg0QjM3ICAKLQotI2RlZmluZSBLRFNFVE1PREUgMHg0QjNBICAKKyNkZWZpbmUgS0RBRERJTyAweDRCMzQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEtEREVMSU8gMHg0QjM1CisjZGVmaW5lIEtERU5BQklPIDB4NEIzNgorI2RlZmluZSBLRERJU0FCSU8gMHg0QjM3CisjZGVmaW5lIEtEU0VUTU9ERSAweDRCM0EKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtEX1RFWFQgMHgwMAogI2RlZmluZSBLRF9HUkFQSElDUyAweDAxCi0jZGVmaW5lIEtEX1RFWFQwIDB4MDIgIAotI2RlZmluZSBLRF9URVhUMSAweDAzICAKLSNkZWZpbmUgS0RHRVRNT0RFIDB4NEIzQiAgCi0KLSNkZWZpbmUgS0RNQVBESVNQIDB4NEIzQyAgCi0jZGVmaW5lIEtEVU5NQVBESVNQIDB4NEIzRCAgCi0KKyNkZWZpbmUgS0RfVEVYVDAgMHgwMgorI2RlZmluZSBLRF9URVhUMSAweDAzCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBLREdFVE1PREUgMHg0QjNCCisjZGVmaW5lIEtETUFQRElTUCAweDRCM0MKKyNkZWZpbmUgS0RVTk1BUERJU1AgMHg0QjNECiB0eXBlZGVmIGNoYXIgc2Nybm1hcF90OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRV9UQUJTWiAyNTYKLSNkZWZpbmUgR0lPX1NDUk5NQVAgMHg0QjQwICAKLSNkZWZpbmUgUElPX1NDUk5NQVAgMHg0QjQxICAKLSNkZWZpbmUgR0lPX1VOSVNDUk5NQVAgMHg0QjY5ICAKLSNkZWZpbmUgUElPX1VOSVNDUk5NQVAgMHg0QjZBICAKLQotI2RlZmluZSBHSU9fVU5JTUFQIDB4NEI2NiAgCisjZGVmaW5lIEdJT19TQ1JOTUFQIDB4NEI0MAorI2RlZmluZSBQSU9fU0NSTk1BUCAweDRCNDEKKyNkZWZpbmUgR0lPX1VOSVNDUk5NQVAgMHg0QjY5CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBQSU9fVU5JU0NSTk1BUCAweDRCNkEKKyNkZWZpbmUgR0lPX1VOSU1BUCAweDRCNjYKIHN0cnVjdCB1bmlwYWlyIHsKICB1bnNpZ25lZCBzaG9ydCB1bmljb2RlOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBzaG9ydCBmb250cG9zOwogfTsKIHN0cnVjdCB1bmltYXBkZXNjIHsKICB1bnNpZ25lZCBzaG9ydCBlbnRyeV9jdDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IHVuaXBhaXIgX191c2VyICplbnRyaWVzOwogfTsKLSNkZWZpbmUgUElPX1VOSU1BUCAweDRCNjcgIAotI2RlZmluZSBQSU9fVU5JTUFQQ0xSIDB4NEI2OCAgCisjZGVmaW5lIFBJT19VTklNQVAgMHg0QjY3CisjZGVmaW5lIFBJT19VTklNQVBDTFIgMHg0QjY4CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IHVuaW1hcGluaXQgewogIHVuc2lnbmVkIHNob3J0IGFkdmlzZWRfaGFzaHNpemU7CiAgdW5zaWduZWQgc2hvcnQgYWR2aXNlZF9oYXNoc3RlcDsKICB1bnNpZ25lZCBzaG9ydCBhZHZpc2VkX2hhc2hsZXZlbDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwotCi0jZGVmaW5lIFVOSV9ESVJFQ1RfQkFTRSAweEYwMDAgIAotI2RlZmluZSBVTklfRElSRUNUX01BU0sgMHgwMUZGICAKLQorI2RlZmluZSBVTklfRElSRUNUX0JBU0UgMHhGMDAwCisjZGVmaW5lIFVOSV9ESVJFQ1RfTUFTSyAweDAxRkYKICNkZWZpbmUgS19SQVcgMHgwMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS19YTEFURSAweDAxCiAjZGVmaW5lIEtfTUVESVVNUkFXIDB4MDIKICNkZWZpbmUgS19VTklDT0RFIDB4MDMKLSNkZWZpbmUgS0RHS0JNT0RFIDB4NEI0NCAgCi0jZGVmaW5lIEtEU0tCTU9ERSAweDRCNDUgIAotCisjZGVmaW5lIEtER0tCTU9ERSAweDRCNDQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEtEU0tCTU9ERSAweDRCNDUKICNkZWZpbmUgS19NRVRBQklUIDB4MDMKICNkZWZpbmUgS19FU0NQUkVGSVggMHgwNAotI2RlZmluZSBLREdLQk1FVEEgMHg0QjYyICAKLSNkZWZpbmUgS0RTS0JNRVRBIDB4NEI2MyAgCi0KKyNkZWZpbmUgS0RHS0JNRVRBIDB4NEI2MgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgS0RTS0JNRVRBIDB4NEI2MwogI2RlZmluZSBLX1NDUk9MTExPQ0sgMHgwMQogI2RlZmluZSBLX05VTUxPQ0sgMHgwMgogI2RlZmluZSBLX0NBUFNMT0NLIDB4MDQKLSNkZWZpbmUgS0RHS0JMRUQgMHg0QjY0ICAKLSNkZWZpbmUgS0RTS0JMRUQgMHg0QjY1ICAKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgS0RHS0JMRUQgMHg0QjY0CisjZGVmaW5lIEtEU0tCTEVEIDB4NEI2NQogc3RydWN0IGtiZW50cnkgewogIHVuc2lnbmVkIGNoYXIga2JfdGFibGU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGNoYXIga2JfaW5kZXg7CiAgdW5zaWduZWQgc2hvcnQga2JfdmFsdWU7CiB9OwogI2RlZmluZSBLX05PUk1UQUIgMHgwMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS19TSElGVFRBQiAweDAxCiAjZGVmaW5lIEtfQUxUVEFCIDB4MDIKICNkZWZpbmUgS19BTFRTSElGVFRBQiAweDAzCi0KLSNkZWZpbmUgS0RHS0JFTlQgMHg0QjQ2ICAKLSNkZWZpbmUgS0RTS0JFTlQgMHg0QjQ3ICAKLQorI2RlZmluZSBLREdLQkVOVCAweDRCNDYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEtEU0tCRU5UIDB4NEI0Nwogc3RydWN0IGtic2VudHJ5IHsKICB1bnNpZ25lZCBjaGFyIGtiX2Z1bmM7CiAgdW5zaWduZWQgY2hhciBrYl9zdHJpbmdbNTEyXTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwotI2RlZmluZSBLREdLQlNFTlQgMHg0QjQ4ICAKLSNkZWZpbmUgS0RTS0JTRU5UIDB4NEI0OSAgCi0KKyNkZWZpbmUgS0RHS0JTRU5UIDB4NEI0OAorI2RlZmluZSBLRFNLQlNFTlQgMHg0QjQ5CiBzdHJ1Y3Qga2JkaWFjciB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGNoYXIgZGlhY3IsIGJhc2UsIHJlc3VsdDsKIH07CiBzdHJ1Y3Qga2JkaWFjcnMgewogIHVuc2lnbmVkIGludCBrYl9jbnQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCBrYmRpYWNyIGtiZGlhY3JbMjU2XTsKIH07Ci0jZGVmaW5lIEtER0tCRElBQ1IgMHg0QjRBICAKLSNkZWZpbmUgS0RTS0JESUFDUiAweDRCNEIgIAotCisjZGVmaW5lIEtER0tCRElBQ1IgMHg0QjRBCisjZGVmaW5lIEtEU0tCRElBQ1IgMHg0QjRCCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IGtia2V5Y29kZSB7CiAgdW5zaWduZWQgaW50IHNjYW5jb2RlLCBrZXljb2RlOwogfTsKLSNkZWZpbmUgS0RHRVRLRVlDT0RFIDB4NEI0QyAgCi0jZGVmaW5lIEtEU0VUS0VZQ09ERSAweDRCNEQgIAotCi0jZGVmaW5lIEtEU0lHQUNDRVBUIDB4NEI0RSAgCi0KKyNkZWZpbmUgS0RHRVRLRVlDT0RFIDB4NEI0QworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgS0RTRVRLRVlDT0RFIDB4NEI0RAorI2RlZmluZSBLRFNJR0FDQ0VQVCAweDRCNEUKIHN0cnVjdCBrYmRfcmVwZWF0IHsKICBpbnQgZGVsYXk7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGludCBwZXJpb2Q7Ci0KIH07Ci0KLSNkZWZpbmUgS0RLQkRSRVAgMHg0QjUyICAKLQotI2RlZmluZSBLREZPTlRPUCAweDRCNzIgIAotCisjZGVmaW5lIEtES0JEUkVQIDB4NEI1MgorI2RlZmluZSBLREZPTlRPUCAweDRCNzIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgY29uc29sZV9mb250X29wIHsKICB1bnNpZ25lZCBpbnQgb3A7CiAgdW5zaWduZWQgaW50IGZsYWdzOwogIHVuc2lnbmVkIGludCB3aWR0aCwgaGVpZ2h0OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBpbnQgY2hhcmNvdW50OwogIHVuc2lnbmVkIGNoYXIgX191c2VyICpkYXRhOwogfTsKLQogc3RydWN0IGNvbnNvbGVfZm9udCB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGludCB3aWR0aCwgaGVpZ2h0OwogIHVuc2lnbmVkIGludCBjaGFyY291bnQ7CiAgdW5zaWduZWQgY2hhciAqZGF0YTsKIH07Ci0KLSNkZWZpbmUgS0RfRk9OVF9PUF9TRVQgMCAgCi0jZGVmaW5lIEtEX0ZPTlRfT1BfR0VUIDEgIAotI2RlZmluZSBLRF9GT05UX09QX1NFVF9ERUZBVUxUIDIgIAotI2RlZmluZSBLRF9GT05UX09QX0NPUFkgMyAgCi0KLSNkZWZpbmUgS0RfRk9OVF9GTEFHX0RPTlRfUkVDQUxDIDEgIAotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBLRF9GT05UX09QX1NFVCAwCisjZGVmaW5lIEtEX0ZPTlRfT1BfR0VUIDEKKyNkZWZpbmUgS0RfRk9OVF9PUF9TRVRfREVGQVVMVCAyCisjZGVmaW5lIEtEX0ZPTlRfT1BfQ09QWSAzCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBLRF9GT05UX0ZMQUdfRE9OVF9SRUNBTEMgMQogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgva2Rldl90LmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgva2Rldl90LmgKaW5kZXggNTE3ZjljMy4uMTAxMGIwOSAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2tkZXZfdC5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9rZGV2X3QuaApAQCAtNywxMiArNywxOSBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX0xJTlVYX0tERVZfVF9ICiAjZGVmaW5lIF9MSU5VWF9LREVWX1RfSAotCiAjZGVmaW5lIE1BSk9SKGRldikgKChkZXYpPj44KQogI2RlZmluZSBNSU5PUihkZXYpICgoZGV2KSAmIDB4ZmYpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNS0RFVihtYSxtaSkgKChtYSk8PDggfCAobWkpKQogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgva2VybmVsLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgva2VybmVsLmgKaW5kZXggOTY4MmU0Ny4uNjA4ZjMxZSAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2tlcm5lbC5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9rZXJuZWwuaApAQCAtNywzMyArNyw0MCBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX0xJTlVYX0tFUk5FTF9ICiAjZGVmaW5lIF9MSU5VWF9LRVJORUxfSAotCiAjZGVmaW5lIFNJX0xPQURfU0hJRlQgMTYKIHN0cnVjdCBzeXNpbmZvIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgbG9uZyB1cHRpbWU7CiAgdW5zaWduZWQgbG9uZyBsb2Fkc1szXTsKICB1bnNpZ25lZCBsb25nIHRvdGFscmFtOwogIHVuc2lnbmVkIGxvbmcgZnJlZXJhbTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgbG9uZyBzaGFyZWRyYW07CiAgdW5zaWduZWQgbG9uZyBidWZmZXJyYW07CiAgdW5zaWduZWQgbG9uZyB0b3RhbHN3YXA7CiAgdW5zaWduZWQgbG9uZyBmcmVlc3dhcDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgc2hvcnQgcHJvY3M7CiAgdW5zaWduZWQgc2hvcnQgcGFkOwogIHVuc2lnbmVkIGxvbmcgdG90YWxoaWdoOwogIHVuc2lnbmVkIGxvbmcgZnJlZWhpZ2g7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGludCBtZW1fdW5pdDsKICBjaGFyIF9mWzIwLTIqc2l6ZW9mKGxvbmcpLXNpemVvZihpbnQpXTsKIH07Ci0KICNkZWZpbmUgQlVJTERfQlVHX09OKGNvbmRpdGlvbikgKCh2b2lkKXNpemVvZihjaGFyWzEgLSAyKiEhKGNvbmRpdGlvbildKSkKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQlVJTERfQlVHX09OX1pFUk8oZSkgKHNpemVvZihjaGFyWzEgLSAyICogISEoZSldKSAtIDEpCi0KICNkZWZpbmUgX19GVU5DVElPTl9fIChfX2Z1bmNfXykKLQogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgva2VybmVsX3N0YXQuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9rZXJuZWxfc3RhdC5oCmluZGV4IGYzMzM3MzYuLmM1MjRlNDcgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9rZXJuZWxfc3RhdC5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9rZXJuZWxfc3RhdC5oCkBAIC03LDM2ICs3LDQzIEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfTElOVVhfS0VSTkVMX1NUQVRfSAogI2RlZmluZSBfTElOVVhfS0VSTkVMX1NUQVRfSAotCiAjaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CiAjaW5jbHVkZSA8bGludXgvcGVyY3B1Lmg+CiAjaW5jbHVkZSA8bGludXgvY3B1bWFzay5oPgogI2luY2x1ZGUgPGFzbS9jcHV0aW1lLmg+Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgY3B1X3VzYWdlX3N0YXQgewogIGNwdXRpbWU2NF90IHVzZXI7CiAgY3B1dGltZTY0X3QgbmljZTsKICBjcHV0aW1lNjRfdCBzeXN0ZW07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGNwdXRpbWU2NF90IHNvZnRpcnE7CiAgY3B1dGltZTY0X3QgaXJxOwogIGNwdXRpbWU2NF90IGlkbGU7CiAgY3B1dGltZTY0X3QgaW93YWl0OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBjcHV0aW1lNjRfdCBzdGVhbDsKIH07Ci0KIHN0cnVjdCBrZXJuZWxfc3RhdCB7CiAgc3RydWN0IGNwdV91c2FnZV9zdGF0IGNwdXN0YXQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGludCBpcnFzW05SX0lSUVNdOwogfTsKLQogI2RlZmluZSBrc3RhdF9jcHUoY3B1KSBwZXJfY3B1KGtzdGF0LCBjcHUpCi0KICNkZWZpbmUga3N0YXRfdGhpc19jcHUgX19nZXRfY3B1X3Zhcihrc3RhdCkKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2tlcm5lbGNhcGkuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9rZXJuZWxjYXBpLmgKaW5kZXggNDYzOGIwYS4uOTI1YjliYiAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2tlcm5lbGNhcGkuaAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgva2VybmVsY2FwaS5oCkBAIC03LDM1ICs3LDQyIEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfX0tFUk5FTENBUElfSF9fCiAjZGVmaW5lIF9fS0VSTkVMQ0FQSV9IX18KLQotI2RlZmluZSBDQVBJX01BWEFQUEwgMjQwICAKLSNkZWZpbmUgQ0FQSV9NQVhDT05UUiAzMiAgCisjZGVmaW5lIENBUElfTUFYQVBQTCAyNDAKKyNkZWZpbmUgQ0FQSV9NQVhDT05UUiAzMgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQ0FQSV9NQVhEQVRBV0lORE9XIDgKLQogdHlwZWRlZiBzdHJ1Y3Qga2NhcGlfZmxhZ2RlZiB7CiAgaW50IGNvbnRyOwogIGludCBmbGFnOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH0ga2NhcGlfZmxhZ2RlZjsKLQogdHlwZWRlZiBzdHJ1Y3Qga2NhcGlfY2FyZGRlZiB7CiAgY2hhciBkcml2ZXJbMzJdOwogIHVuc2lnbmVkIGludCBwb3J0OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBpcnE7CiAgdW5zaWduZWQgaW50IG1lbWJhc2U7CiAgaW50IGNhcmRucjsKIH0ga2NhcGlfY2FyZGRlZjsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS0NBUElfQ01EX1RSQUNFIDEwCi0jZGVmaW5lIEtDQVBJX0NNRF9BRERDQVJEIDExICAKLQorI2RlZmluZSBLQ0FQSV9DTURfQUREQ0FSRCAxMQogI2RlZmluZSBLQ0FQSV9UUkFDRV9PRkYgMAogI2RlZmluZSBLQ0FQSV9UUkFDRV9TSE9SVF9OT19EQVRBIDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtDQVBJX1RSQUNFX0ZVTExfTk9fREFUQSAyCiAjZGVmaW5lIEtDQVBJX1RSQUNFX1NIT1JUIDMKICNkZWZpbmUgS0NBUElfVFJBQ0VfRlVMTCA0Ci0KICNlbmRpZgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9rZXhlYy5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2tleGVjLmgKaW5kZXggNDAwNDY0Ni4uMWRmZTA3YyAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2tleGVjLmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2tleGVjLmgKQEAgLTcsMTEgKzcsMTggQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIExJTlVYX0tFWEVDX0gKICNkZWZpbmUgTElOVVhfS0VYRUNfSAotCiBzdHJ1Y3QgcHRfcmVnczsKIHN0cnVjdCB0YXNrX3N0cnVjdDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9rZXkuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9rZXkuaAppbmRleCA1YzQ4NWQ3Li45MzBiZDdlIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgva2V5LmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2tleS5oCkBAIC03LDE1ICs3LDIyIEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfTElOVVhfS0VZX0gKICNkZWZpbmUgX0xJTlVYX0tFWV9ICi0KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjaW5jbHVkZSA8bGludXgvcmJ0cmVlLmg+CiAjaW5jbHVkZSA8bGludXgvcmN1cGRhdGUuaD4KICNpbmNsdWRlIDxhc20vYXRvbWljLmg+Ci0KICNlbmRpZgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9rZXlib2FyZC5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2tleWJvYXJkLmgKaW5kZXggMjVlMDk0NS4uYTRiN2UyYiAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2tleWJvYXJkLmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2tleWJvYXJkLmgKQEAgLTcsNDQwICs3LDUyNCBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX19MSU5VWF9LRVlCT0FSRF9ICiAjZGVmaW5lIF9fTElOVVhfS0VZQk9BUkRfSAotCiAjaW5jbHVkZSA8bGludXgvd2FpdC5oPgotCiAjZGVmaW5lIEtHX1NISUZUIDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtHX0NUUkwgMgogI2RlZmluZSBLR19BTFQgMwogI2RlZmluZSBLR19BTFRHUiAxCiAjZGVmaW5lIEtHX1NISUZUTCA0CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLR19LQU5BU0hJRlQgNAogI2RlZmluZSBLR19TSElGVFIgNQogI2RlZmluZSBLR19DVFJMTCA2CiAjZGVmaW5lIEtHX0NUUkxSIDcKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtHX0NBUFNTSElGVCA4Ci0KICNkZWZpbmUgTlJfU0hJRlQgOQotCiAjZGVmaW5lIE5SX0tFWVMgMjU2CiAjZGVmaW5lIE1BWF9OUl9LRVlNQVBTIDI1NgotCi0jZGVmaW5lIE1BWF9OUl9PRl9VU0VSX0tFWU1BUFMgMjU2ICAKLQotI2RlZmluZSBNQVhfTlJfRlVOQyAyNTYgIAotCi0jZGVmaW5lIEtUX0xBVElOIDAgIAotI2RlZmluZSBLVF9MRVRURVIgMTEgIAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgTUFYX05SX09GX1VTRVJfS0VZTUFQUyAyNTYKKyNkZWZpbmUgTUFYX05SX0ZVTkMgMjU2CisjZGVmaW5lIEtUX0xBVElOIDAKKyNkZWZpbmUgS1RfTEVUVEVSIDExCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLVF9GTiAxCiAjZGVmaW5lIEtUX1NQRUMgMgogI2RlZmluZSBLVF9QQUQgMwogI2RlZmluZSBLVF9ERUFEIDQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtUX0NPTlMgNQogI2RlZmluZSBLVF9DVVIgNgogI2RlZmluZSBLVF9TSElGVCA3CiAjZGVmaW5lIEtUX01FVEEgOAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS1RfQVNDSUkgOQogI2RlZmluZSBLVF9MT0NLIDEwCiAjZGVmaW5lIEtUX1NMT0NLIDEyCiAjZGVmaW5lIEtUX0JSTCAxNAotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLKHQsdikgKCgodCk8PDgpfCh2KSkKICNkZWZpbmUgS1RZUCh4KSAoKHgpID4+IDgpCiAjZGVmaW5lIEtWQUwoeCkgKCh4KSAmIDB4ZmYpCi0KICNkZWZpbmUgS19GMSBLKEtUX0ZOLDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLX0YyIEsoS1RfRk4sMSkKICNkZWZpbmUgS19GMyBLKEtUX0ZOLDIpCiAjZGVmaW5lIEtfRjQgSyhLVF9GTiwzKQogI2RlZmluZSBLX0Y1IEsoS1RfRk4sNCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtfRjYgSyhLVF9GTiw1KQogI2RlZmluZSBLX0Y3IEsoS1RfRk4sNikKICNkZWZpbmUgS19GOCBLKEtUX0ZOLDcpCiAjZGVmaW5lIEtfRjkgSyhLVF9GTiw4KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS19GMTAgSyhLVF9GTiw5KQogI2RlZmluZSBLX0YxMSBLKEtUX0ZOLDEwKQogI2RlZmluZSBLX0YxMiBLKEtUX0ZOLDExKQogI2RlZmluZSBLX0YxMyBLKEtUX0ZOLDEyKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS19GMTQgSyhLVF9GTiwxMykKICNkZWZpbmUgS19GMTUgSyhLVF9GTiwxNCkKICNkZWZpbmUgS19GMTYgSyhLVF9GTiwxNSkKICNkZWZpbmUgS19GMTcgSyhLVF9GTiwxNikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtfRjE4IEsoS1RfRk4sMTcpCiAjZGVmaW5lIEtfRjE5IEsoS1RfRk4sMTgpCiAjZGVmaW5lIEtfRjIwIEsoS1RfRk4sMTkpCiAjZGVmaW5lIEtfRklORCBLKEtUX0ZOLDIwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS19JTlNFUlQgSyhLVF9GTiwyMSkKICNkZWZpbmUgS19SRU1PVkUgSyhLVF9GTiwyMikKICNkZWZpbmUgS19TRUxFQ1QgSyhLVF9GTiwyMykKLSNkZWZpbmUgS19QR1VQIEsoS1RfRk4sMjQpICAKLSNkZWZpbmUgS19QR0ROIEsoS1RfRk4sMjUpICAKKyNkZWZpbmUgS19QR1VQIEsoS1RfRk4sMjQpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBLX1BHRE4gSyhLVF9GTiwyNSkKICNkZWZpbmUgS19NQUNSTyBLKEtUX0ZOLDI2KQogI2RlZmluZSBLX0hFTFAgSyhLVF9GTiwyNykKICNkZWZpbmUgS19ETyBLKEtUX0ZOLDI4KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS19QQVVTRSBLKEtUX0ZOLDI5KQogI2RlZmluZSBLX0YyMSBLKEtUX0ZOLDMwKQogI2RlZmluZSBLX0YyMiBLKEtUX0ZOLDMxKQogI2RlZmluZSBLX0YyMyBLKEtUX0ZOLDMyKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS19GMjQgSyhLVF9GTiwzMykKICNkZWZpbmUgS19GMjUgSyhLVF9GTiwzNCkKICNkZWZpbmUgS19GMjYgSyhLVF9GTiwzNSkKICNkZWZpbmUgS19GMjcgSyhLVF9GTiwzNikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtfRjI4IEsoS1RfRk4sMzcpCiAjZGVmaW5lIEtfRjI5IEsoS1RfRk4sMzgpCiAjZGVmaW5lIEtfRjMwIEsoS1RfRk4sMzkpCiAjZGVmaW5lIEtfRjMxIEsoS1RfRk4sNDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLX0YzMiBLKEtUX0ZOLDQxKQogI2RlZmluZSBLX0YzMyBLKEtUX0ZOLDQyKQogI2RlZmluZSBLX0YzNCBLKEtUX0ZOLDQzKQogI2RlZmluZSBLX0YzNSBLKEtUX0ZOLDQ0KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS19GMzYgSyhLVF9GTiw0NSkKICNkZWZpbmUgS19GMzcgSyhLVF9GTiw0NikKICNkZWZpbmUgS19GMzggSyhLVF9GTiw0NykKICNkZWZpbmUgS19GMzkgSyhLVF9GTiw0OCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtfRjQwIEsoS1RfRk4sNDkpCiAjZGVmaW5lIEtfRjQxIEsoS1RfRk4sNTApCiAjZGVmaW5lIEtfRjQyIEsoS1RfRk4sNTEpCiAjZGVmaW5lIEtfRjQzIEsoS1RfRk4sNTIpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLX0Y0NCBLKEtUX0ZOLDUzKQogI2RlZmluZSBLX0Y0NSBLKEtUX0ZOLDU0KQogI2RlZmluZSBLX0Y0NiBLKEtUX0ZOLDU1KQogI2RlZmluZSBLX0Y0NyBLKEtUX0ZOLDU2KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS19GNDggSyhLVF9GTiw1NykKICNkZWZpbmUgS19GNDkgSyhLVF9GTiw1OCkKICNkZWZpbmUgS19GNTAgSyhLVF9GTiw1OSkKICNkZWZpbmUgS19GNTEgSyhLVF9GTiw2MCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtfRjUyIEsoS1RfRk4sNjEpCiAjZGVmaW5lIEtfRjUzIEsoS1RfRk4sNjIpCiAjZGVmaW5lIEtfRjU0IEsoS1RfRk4sNjMpCiAjZGVmaW5lIEtfRjU1IEsoS1RfRk4sNjQpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLX0Y1NiBLKEtUX0ZOLDY1KQogI2RlZmluZSBLX0Y1NyBLKEtUX0ZOLDY2KQogI2RlZmluZSBLX0Y1OCBLKEtUX0ZOLDY3KQogI2RlZmluZSBLX0Y1OSBLKEtUX0ZOLDY4KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS19GNjAgSyhLVF9GTiw2OSkKICNkZWZpbmUgS19GNjEgSyhLVF9GTiw3MCkKICNkZWZpbmUgS19GNjIgSyhLVF9GTiw3MSkKICNkZWZpbmUgS19GNjMgSyhLVF9GTiw3MikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtfRjY0IEsoS1RfRk4sNzMpCiAjZGVmaW5lIEtfRjY1IEsoS1RfRk4sNzQpCiAjZGVmaW5lIEtfRjY2IEsoS1RfRk4sNzUpCiAjZGVmaW5lIEtfRjY3IEsoS1RfRk4sNzYpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLX0Y2OCBLKEtUX0ZOLDc3KQogI2RlZmluZSBLX0Y2OSBLKEtUX0ZOLDc4KQogI2RlZmluZSBLX0Y3MCBLKEtUX0ZOLDc5KQogI2RlZmluZSBLX0Y3MSBLKEtUX0ZOLDgwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS19GNzIgSyhLVF9GTiw4MSkKICNkZWZpbmUgS19GNzMgSyhLVF9GTiw4MikKICNkZWZpbmUgS19GNzQgSyhLVF9GTiw4MykKICNkZWZpbmUgS19GNzUgSyhLVF9GTiw4NCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtfRjc2IEsoS1RfRk4sODUpCiAjZGVmaW5lIEtfRjc3IEsoS1RfRk4sODYpCiAjZGVmaW5lIEtfRjc4IEsoS1RfRk4sODcpCiAjZGVmaW5lIEtfRjc5IEsoS1RfRk4sODgpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLX0Y4MCBLKEtUX0ZOLDg5KQogI2RlZmluZSBLX0Y4MSBLKEtUX0ZOLDkwKQogI2RlZmluZSBLX0Y4MiBLKEtUX0ZOLDkxKQogI2RlZmluZSBLX0Y4MyBLKEtUX0ZOLDkyKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS19GODQgSyhLVF9GTiw5MykKICNkZWZpbmUgS19GODUgSyhLVF9GTiw5NCkKICNkZWZpbmUgS19GODYgSyhLVF9GTiw5NSkKICNkZWZpbmUgS19GODcgSyhLVF9GTiw5NikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtfRjg4IEsoS1RfRk4sOTcpCiAjZGVmaW5lIEtfRjg5IEsoS1RfRk4sOTgpCiAjZGVmaW5lIEtfRjkwIEsoS1RfRk4sOTkpCiAjZGVmaW5lIEtfRjkxIEsoS1RfRk4sMTAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS19GOTIgSyhLVF9GTiwxMDEpCiAjZGVmaW5lIEtfRjkzIEsoS1RfRk4sMTAyKQogI2RlZmluZSBLX0Y5NCBLKEtUX0ZOLDEwMykKICNkZWZpbmUgS19GOTUgSyhLVF9GTiwxMDQpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLX0Y5NiBLKEtUX0ZOLDEwNSkKICNkZWZpbmUgS19GOTcgSyhLVF9GTiwxMDYpCiAjZGVmaW5lIEtfRjk4IEsoS1RfRk4sMTA3KQogI2RlZmluZSBLX0Y5OSBLKEtUX0ZOLDEwOCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtfRjEwMCBLKEtUX0ZOLDEwOSkKICNkZWZpbmUgS19GMTAxIEsoS1RfRk4sMTEwKQogI2RlZmluZSBLX0YxMDIgSyhLVF9GTiwxMTEpCiAjZGVmaW5lIEtfRjEwMyBLKEtUX0ZOLDExMikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtfRjEwNCBLKEtUX0ZOLDExMykKICNkZWZpbmUgS19GMTA1IEsoS1RfRk4sMTE0KQogI2RlZmluZSBLX0YxMDYgSyhLVF9GTiwxMTUpCiAjZGVmaW5lIEtfRjEwNyBLKEtUX0ZOLDExNikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtfRjEwOCBLKEtUX0ZOLDExNykKICNkZWZpbmUgS19GMTA5IEsoS1RfRk4sMTE4KQogI2RlZmluZSBLX0YxMTAgSyhLVF9GTiwxMTkpCiAjZGVmaW5lIEtfRjExMSBLKEtUX0ZOLDEyMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtfRjExMiBLKEtUX0ZOLDEyMSkKICNkZWZpbmUgS19GMTEzIEsoS1RfRk4sMTIyKQogI2RlZmluZSBLX0YxMTQgSyhLVF9GTiwxMjMpCiAjZGVmaW5lIEtfRjExNSBLKEtUX0ZOLDEyNCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtfRjExNiBLKEtUX0ZOLDEyNSkKICNkZWZpbmUgS19GMTE3IEsoS1RfRk4sMTI2KQogI2RlZmluZSBLX0YxMTggSyhLVF9GTiwxMjcpCiAjZGVmaW5lIEtfRjExOSBLKEtUX0ZOLDEyOCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtfRjEyMCBLKEtUX0ZOLDEyOSkKICNkZWZpbmUgS19GMTIxIEsoS1RfRk4sMTMwKQogI2RlZmluZSBLX0YxMjIgSyhLVF9GTiwxMzEpCiAjZGVmaW5lIEtfRjEyMyBLKEtUX0ZOLDEzMikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtfRjEyNCBLKEtUX0ZOLDEzMykKICNkZWZpbmUgS19GMTI1IEsoS1RfRk4sMTM0KQogI2RlZmluZSBLX0YxMjYgSyhLVF9GTiwxMzUpCiAjZGVmaW5lIEtfRjEyNyBLKEtUX0ZOLDEzNikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtfRjEyOCBLKEtUX0ZOLDEzNykKICNkZWZpbmUgS19GMTI5IEsoS1RfRk4sMTM4KQogI2RlZmluZSBLX0YxMzAgSyhLVF9GTiwxMzkpCiAjZGVmaW5lIEtfRjEzMSBLKEtUX0ZOLDE0MCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtfRjEzMiBLKEtUX0ZOLDE0MSkKICNkZWZpbmUgS19GMTMzIEsoS1RfRk4sMTQyKQogI2RlZmluZSBLX0YxMzQgSyhLVF9GTiwxNDMpCiAjZGVmaW5lIEtfRjEzNSBLKEtUX0ZOLDE0NCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtfRjEzNiBLKEtUX0ZOLDE0NSkKICNkZWZpbmUgS19GMTM3IEsoS1RfRk4sMTQ2KQogI2RlZmluZSBLX0YxMzggSyhLVF9GTiwxNDcpCiAjZGVmaW5lIEtfRjEzOSBLKEtUX0ZOLDE0OCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtfRjE0MCBLKEtUX0ZOLDE0OSkKICNkZWZpbmUgS19GMTQxIEsoS1RfRk4sMTUwKQogI2RlZmluZSBLX0YxNDIgSyhLVF9GTiwxNTEpCiAjZGVmaW5lIEtfRjE0MyBLKEtUX0ZOLDE1MikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtfRjE0NCBLKEtUX0ZOLDE1MykKICNkZWZpbmUgS19GMTQ1IEsoS1RfRk4sMTU0KQogI2RlZmluZSBLX0YxNDYgSyhLVF9GTiwxNTUpCiAjZGVmaW5lIEtfRjE0NyBLKEtUX0ZOLDE1NikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtfRjE0OCBLKEtUX0ZOLDE1NykKICNkZWZpbmUgS19GMTQ5IEsoS1RfRk4sMTU4KQogI2RlZmluZSBLX0YxNTAgSyhLVF9GTiwxNTkpCiAjZGVmaW5lIEtfRjE1MSBLKEtUX0ZOLDE2MCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtfRjE1MiBLKEtUX0ZOLDE2MSkKICNkZWZpbmUgS19GMTUzIEsoS1RfRk4sMTYyKQogI2RlZmluZSBLX0YxNTQgSyhLVF9GTiwxNjMpCiAjZGVmaW5lIEtfRjE1NSBLKEtUX0ZOLDE2NCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtfRjE1NiBLKEtUX0ZOLDE2NSkKICNkZWZpbmUgS19GMTU3IEsoS1RfRk4sMTY2KQogI2RlZmluZSBLX0YxNTggSyhLVF9GTiwxNjcpCiAjZGVmaW5lIEtfRjE1OSBLKEtUX0ZOLDE2OCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtfRjE2MCBLKEtUX0ZOLDE2OSkKICNkZWZpbmUgS19GMTYxIEsoS1RfRk4sMTcwKQogI2RlZmluZSBLX0YxNjIgSyhLVF9GTiwxNzEpCiAjZGVmaW5lIEtfRjE2MyBLKEtUX0ZOLDE3MikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtfRjE2NCBLKEtUX0ZOLDE3MykKICNkZWZpbmUgS19GMTY1IEsoS1RfRk4sMTc0KQogI2RlZmluZSBLX0YxNjYgSyhLVF9GTiwxNzUpCiAjZGVmaW5lIEtfRjE2NyBLKEtUX0ZOLDE3NikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtfRjE2OCBLKEtUX0ZOLDE3NykKICNkZWZpbmUgS19GMTY5IEsoS1RfRk4sMTc4KQogI2RlZmluZSBLX0YxNzAgSyhLVF9GTiwxNzkpCiAjZGVmaW5lIEtfRjE3MSBLKEtUX0ZOLDE4MCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtfRjE3MiBLKEtUX0ZOLDE4MSkKICNkZWZpbmUgS19GMTczIEsoS1RfRk4sMTgyKQogI2RlZmluZSBLX0YxNzQgSyhLVF9GTiwxODMpCiAjZGVmaW5lIEtfRjE3NSBLKEtUX0ZOLDE4NCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtfRjE3NiBLKEtUX0ZOLDE4NSkKICNkZWZpbmUgS19GMTc3IEsoS1RfRk4sMTg2KQogI2RlZmluZSBLX0YxNzggSyhLVF9GTiwxODcpCiAjZGVmaW5lIEtfRjE3OSBLKEtUX0ZOLDE4OCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtfRjE4MCBLKEtUX0ZOLDE4OSkKICNkZWZpbmUgS19GMTgxIEsoS1RfRk4sMTkwKQogI2RlZmluZSBLX0YxODIgSyhLVF9GTiwxOTEpCiAjZGVmaW5lIEtfRjE4MyBLKEtUX0ZOLDE5MikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtfRjE4NCBLKEtUX0ZOLDE5MykKICNkZWZpbmUgS19GMTg1IEsoS1RfRk4sMTk0KQogI2RlZmluZSBLX0YxODYgSyhLVF9GTiwxOTUpCiAjZGVmaW5lIEtfRjE4NyBLKEtUX0ZOLDE5NikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtfRjE4OCBLKEtUX0ZOLDE5NykKICNkZWZpbmUgS19GMTg5IEsoS1RfRk4sMTk4KQogI2RlZmluZSBLX0YxOTAgSyhLVF9GTiwxOTkpCiAjZGVmaW5lIEtfRjE5MSBLKEtUX0ZOLDIwMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtfRjE5MiBLKEtUX0ZOLDIwMSkKICNkZWZpbmUgS19GMTkzIEsoS1RfRk4sMjAyKQogI2RlZmluZSBLX0YxOTQgSyhLVF9GTiwyMDMpCiAjZGVmaW5lIEtfRjE5NSBLKEtUX0ZOLDIwNCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtfRjE5NiBLKEtUX0ZOLDIwNSkKICNkZWZpbmUgS19GMTk3IEsoS1RfRk4sMjA2KQogI2RlZmluZSBLX0YxOTggSyhLVF9GTiwyMDcpCiAjZGVmaW5lIEtfRjE5OSBLKEtUX0ZOLDIwOCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtfRjIwMCBLKEtUX0ZOLDIwOSkKICNkZWZpbmUgS19GMjAxIEsoS1RfRk4sMjEwKQogI2RlZmluZSBLX0YyMDIgSyhLVF9GTiwyMTEpCiAjZGVmaW5lIEtfRjIwMyBLKEtUX0ZOLDIxMikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtfRjIwNCBLKEtUX0ZOLDIxMykKICNkZWZpbmUgS19GMjA1IEsoS1RfRk4sMjE0KQogI2RlZmluZSBLX0YyMDYgSyhLVF9GTiwyMTUpCiAjZGVmaW5lIEtfRjIwNyBLKEtUX0ZOLDIxNikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtfRjIwOCBLKEtUX0ZOLDIxNykKICNkZWZpbmUgS19GMjA5IEsoS1RfRk4sMjE4KQogI2RlZmluZSBLX0YyMTAgSyhLVF9GTiwyMTkpCiAjZGVmaW5lIEtfRjIxMSBLKEtUX0ZOLDIyMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtfRjIxMiBLKEtUX0ZOLDIyMSkKICNkZWZpbmUgS19GMjEzIEsoS1RfRk4sMjIyKQogI2RlZmluZSBLX0YyMTQgSyhLVF9GTiwyMjMpCiAjZGVmaW5lIEtfRjIxNSBLKEtUX0ZOLDIyNCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtfRjIxNiBLKEtUX0ZOLDIyNSkKICNkZWZpbmUgS19GMjE3IEsoS1RfRk4sMjI2KQogI2RlZmluZSBLX0YyMTggSyhLVF9GTiwyMjcpCiAjZGVmaW5lIEtfRjIxOSBLKEtUX0ZOLDIyOCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtfRjIyMCBLKEtUX0ZOLDIyOSkKICNkZWZpbmUgS19GMjIxIEsoS1RfRk4sMjMwKQogI2RlZmluZSBLX0YyMjIgSyhLVF9GTiwyMzEpCiAjZGVmaW5lIEtfRjIyMyBLKEtUX0ZOLDIzMikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtfRjIyNCBLKEtUX0ZOLDIzMykKICNkZWZpbmUgS19GMjI1IEsoS1RfRk4sMjM0KQogI2RlZmluZSBLX0YyMjYgSyhLVF9GTiwyMzUpCiAjZGVmaW5lIEtfRjIyNyBLKEtUX0ZOLDIzNikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtfRjIyOCBLKEtUX0ZOLDIzNykKICNkZWZpbmUgS19GMjI5IEsoS1RfRk4sMjM4KQogI2RlZmluZSBLX0YyMzAgSyhLVF9GTiwyMzkpCiAjZGVmaW5lIEtfRjIzMSBLKEtUX0ZOLDI0MCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtfRjIzMiBLKEtUX0ZOLDI0MSkKICNkZWZpbmUgS19GMjMzIEsoS1RfRk4sMjQyKQogI2RlZmluZSBLX0YyMzQgSyhLVF9GTiwyNDMpCiAjZGVmaW5lIEtfRjIzNSBLKEtUX0ZOLDI0NCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtfRjIzNiBLKEtUX0ZOLDI0NSkKICNkZWZpbmUgS19GMjM3IEsoS1RfRk4sMjQ2KQogI2RlZmluZSBLX0YyMzggSyhLVF9GTiwyNDcpCiAjZGVmaW5lIEtfRjIzOSBLKEtUX0ZOLDI0OCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtfRjI0MCBLKEtUX0ZOLDI0OSkKICNkZWZpbmUgS19GMjQxIEsoS1RfRk4sMjUwKQogI2RlZmluZSBLX0YyNDIgSyhLVF9GTiwyNTEpCiAjZGVmaW5lIEtfRjI0MyBLKEtUX0ZOLDI1MikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtfRjI0NCBLKEtUX0ZOLDI1MykKICNkZWZpbmUgS19GMjQ1IEsoS1RfRk4sMjU0KQogI2RlZmluZSBLX1VORE8gSyhLVF9GTiwyNTUpCi0KICNkZWZpbmUgS19IT0xFIEsoS1RfU1BFQywwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS19FTlRFUiBLKEtUX1NQRUMsMSkKICNkZWZpbmUgS19TSF9SRUdTIEsoS1RfU1BFQywyKQogI2RlZmluZSBLX1NIX01FTSBLKEtUX1NQRUMsMykKICNkZWZpbmUgS19TSF9TVEFUIEsoS1RfU1BFQyw0KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS19CUkVBSyBLKEtUX1NQRUMsNSkKICNkZWZpbmUgS19DT05TIEsoS1RfU1BFQyw2KQogI2RlZmluZSBLX0NBUFMgSyhLVF9TUEVDLDcpCiAjZGVmaW5lIEtfTlVNIEsoS1RfU1BFQyw4KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS19IT0xEIEsoS1RfU1BFQyw5KQogI2RlZmluZSBLX1NDUk9MTEZPUlcgSyhLVF9TUEVDLDEwKQogI2RlZmluZSBLX1NDUk9MTEJBQ0sgSyhLVF9TUEVDLDExKQogI2RlZmluZSBLX0JPT1QgSyhLVF9TUEVDLDEyKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS19DQVBTT04gSyhLVF9TUEVDLDEzKQogI2RlZmluZSBLX0NPTVBPU0UgSyhLVF9TUEVDLDE0KQogI2RlZmluZSBLX1NBSyBLKEtUX1NQRUMsMTUpCiAjZGVmaW5lIEtfREVDUkNPTlNPTEUgSyhLVF9TUEVDLDE2KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS19JTkNSQ09OU09MRSBLKEtUX1NQRUMsMTcpCiAjZGVmaW5lIEtfU1BBV05DT05TT0xFIEsoS1RfU1BFQywxOCkKICNkZWZpbmUgS19CQVJFTlVNTE9DSyBLKEtUX1NQRUMsMTkpCi0KLSNkZWZpbmUgS19BTExPQ0FURUQgSyhLVF9TUEVDLDEyNikgIAotI2RlZmluZSBLX05PU1VDSE1BUCBLKEtUX1NQRUMsMTI3KSAgCi0KKyNkZWZpbmUgS19BTExPQ0FURUQgSyhLVF9TUEVDLDEyNikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEtfTk9TVUNITUFQIEsoS1RfU1BFQywxMjcpCiAjZGVmaW5lIEtfUDAgSyhLVF9QQUQsMCkKICNkZWZpbmUgS19QMSBLKEtUX1BBRCwxKQogI2RlZmluZSBLX1AyIEsoS1RfUEFELDIpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLX1AzIEsoS1RfUEFELDMpCiAjZGVmaW5lIEtfUDQgSyhLVF9QQUQsNCkKICNkZWZpbmUgS19QNSBLKEtUX1BBRCw1KQogI2RlZmluZSBLX1A2IEsoS1RfUEFELDYpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLX1A3IEsoS1RfUEFELDcpCiAjZGVmaW5lIEtfUDggSyhLVF9QQUQsOCkKICNkZWZpbmUgS19QOSBLKEtUX1BBRCw5KQotI2RlZmluZSBLX1BQTFVTIEsoS1RfUEFELDEwKSAgCi0jZGVmaW5lIEtfUE1JTlVTIEsoS1RfUEFELDExKSAgCi0jZGVmaW5lIEtfUFNUQVIgSyhLVF9QQUQsMTIpICAKLSNkZWZpbmUgS19QU0xBU0ggSyhLVF9QQUQsMTMpICAKLSNkZWZpbmUgS19QRU5URVIgSyhLVF9QQUQsMTQpICAKLSNkZWZpbmUgS19QQ09NTUEgSyhLVF9QQUQsMTUpICAKLSNkZWZpbmUgS19QRE9UIEsoS1RfUEFELDE2KSAgCi0jZGVmaW5lIEtfUFBMVVNNSU5VUyBLKEtUX1BBRCwxNykgIAotI2RlZmluZSBLX1BQQVJFTkwgSyhLVF9QQUQsMTgpICAKLSNkZWZpbmUgS19QUEFSRU5SIEsoS1RfUEFELDE5KSAgCi0KKyNkZWZpbmUgS19QUExVUyBLKEtUX1BBRCwxMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEtfUE1JTlVTIEsoS1RfUEFELDExKQorI2RlZmluZSBLX1BTVEFSIEsoS1RfUEFELDEyKQorI2RlZmluZSBLX1BTTEFTSCBLKEtUX1BBRCwxMykKKyNkZWZpbmUgS19QRU5URVIgSyhLVF9QQUQsMTQpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBLX1BDT01NQSBLKEtUX1BBRCwxNSkKKyNkZWZpbmUgS19QRE9UIEsoS1RfUEFELDE2KQorI2RlZmluZSBLX1BQTFVTTUlOVVMgSyhLVF9QQUQsMTcpCisjZGVmaW5lIEtfUFBBUkVOTCBLKEtUX1BBRCwxOCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEtfUFBBUkVOUiBLKEtUX1BBRCwxOSkKICNkZWZpbmUgTlJfUEFEIDIwCi0KICNkZWZpbmUgS19ER1JBVkUgSyhLVF9ERUFELDApCiAjZGVmaW5lIEtfREFDVVRFIEsoS1RfREVBRCwxKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS19EQ0lSQ00gSyhLVF9ERUFELDIpCiAjZGVmaW5lIEtfRFRJTERFIEsoS1RfREVBRCwzKQogI2RlZmluZSBLX0RESUVSRSBLKEtUX0RFQUQsNCkKICNkZWZpbmUgS19EQ0VESUwgSyhLVF9ERUFELDUpCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE5SX0RFQUQgNgotCiAjZGVmaW5lIEtfRE9XTiBLKEtUX0NVUiwwKQogI2RlZmluZSBLX0xFRlQgSyhLVF9DVVIsMSkKICNkZWZpbmUgS19SSUdIVCBLKEtUX0NVUiwyKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS19VUCBLKEtUX0NVUiwzKQotCiAjZGVmaW5lIEtfU0hJRlQgSyhLVF9TSElGVCxLR19TSElGVCkKICNkZWZpbmUgS19DVFJMIEsoS1RfU0hJRlQsS0dfQ1RSTCkKICNkZWZpbmUgS19BTFQgSyhLVF9TSElGVCxLR19BTFQpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLX0FMVEdSIEsoS1RfU0hJRlQsS0dfQUxUR1IpCiAjZGVmaW5lIEtfU0hJRlRMIEsoS1RfU0hJRlQsS0dfU0hJRlRMKQogI2RlZmluZSBLX1NISUZUUiBLKEtUX1NISUZULEtHX1NISUZUUikKICNkZWZpbmUgS19DVFJMTCBLKEtUX1NISUZULEtHX0NUUkxMKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS19DVFJMUiBLKEtUX1NISUZULEtHX0NUUkxSKQogI2RlZmluZSBLX0NBUFNTSElGVCBLKEtUX1NISUZULEtHX0NBUFNTSElGVCkKLQogI2RlZmluZSBLX0FTQzAgSyhLVF9BU0NJSSwwKQogI2RlZmluZSBLX0FTQzEgSyhLVF9BU0NJSSwxKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS19BU0MyIEsoS1RfQVNDSUksMikKICNkZWZpbmUgS19BU0MzIEsoS1RfQVNDSUksMykKICNkZWZpbmUgS19BU0M0IEsoS1RfQVNDSUksNCkKICNkZWZpbmUgS19BU0M1IEsoS1RfQVNDSUksNSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtfQVNDNiBLKEtUX0FTQ0lJLDYpCiAjZGVmaW5lIEtfQVNDNyBLKEtUX0FTQ0lJLDcpCiAjZGVmaW5lIEtfQVNDOCBLKEtUX0FTQ0lJLDgpCiAjZGVmaW5lIEtfQVNDOSBLKEtUX0FTQ0lJLDkpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLX0hFWDAgSyhLVF9BU0NJSSwxMCkKICNkZWZpbmUgS19IRVgxIEsoS1RfQVNDSUksMTEpCiAjZGVmaW5lIEtfSEVYMiBLKEtUX0FTQ0lJLDEyKQogI2RlZmluZSBLX0hFWDMgSyhLVF9BU0NJSSwxMykKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtfSEVYNCBLKEtUX0FTQ0lJLDE0KQogI2RlZmluZSBLX0hFWDUgSyhLVF9BU0NJSSwxNSkKICNkZWZpbmUgS19IRVg2IEsoS1RfQVNDSUksMTYpCiAjZGVmaW5lIEtfSEVYNyBLKEtUX0FTQ0lJLDE3KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS19IRVg4IEsoS1RfQVNDSUksMTgpCiAjZGVmaW5lIEtfSEVYOSBLKEtUX0FTQ0lJLDE5KQogI2RlZmluZSBLX0hFWGEgSyhLVF9BU0NJSSwyMCkKICNkZWZpbmUgS19IRVhiIEsoS1RfQVNDSUksMjEpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLX0hFWGMgSyhLVF9BU0NJSSwyMikKICNkZWZpbmUgS19IRVhkIEsoS1RfQVNDSUksMjMpCiAjZGVmaW5lIEtfSEVYZSBLKEtUX0FTQ0lJLDI0KQogI2RlZmluZSBLX0hFWGYgSyhLVF9BU0NJSSwyNSkKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTlJfQVNDSUkgMjYKLQogI2RlZmluZSBLX1NISUZUTE9DSyBLKEtUX0xPQ0ssS0dfU0hJRlQpCiAjZGVmaW5lIEtfQ1RSTExPQ0sgSyhLVF9MT0NLLEtHX0NUUkwpCiAjZGVmaW5lIEtfQUxUTE9DSyBLKEtUX0xPQ0ssS0dfQUxUKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS19BTFRHUkxPQ0sgSyhLVF9MT0NLLEtHX0FMVEdSKQogI2RlZmluZSBLX1NISUZUTExPQ0sgSyhLVF9MT0NLLEtHX1NISUZUTCkKICNkZWZpbmUgS19TSElGVFJMT0NLIEsoS1RfTE9DSyxLR19TSElGVFIpCiAjZGVmaW5lIEtfQ1RSTExMT0NLIEsoS1RfTE9DSyxLR19DVFJMTCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtfQ1RSTFJMT0NLIEsoS1RfTE9DSyxLR19DVFJMUikKLQogI2RlZmluZSBLX1NISUZUX1NMT0NLIEsoS1RfU0xPQ0ssS0dfU0hJRlQpCiAjZGVmaW5lIEtfQ1RSTF9TTE9DSyBLKEtUX1NMT0NLLEtHX0NUUkwpCiAjZGVmaW5lIEtfQUxUX1NMT0NLIEsoS1RfU0xPQ0ssS0dfQUxUKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS19BTFRHUl9TTE9DSyBLKEtUX1NMT0NLLEtHX0FMVEdSKQogI2RlZmluZSBLX1NISUZUTF9TTE9DSyBLKEtUX1NMT0NLLEtHX1NISUZUTCkKICNkZWZpbmUgS19TSElGVFJfU0xPQ0sgSyhLVF9TTE9DSyxLR19TSElGVFIpCiAjZGVmaW5lIEtfQ1RSTExfU0xPQ0sgSyhLVF9TTE9DSyxLR19DVFJMTCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtfQ1RSTFJfU0xPQ0sgSyhLVF9TTE9DSyxLR19DVFJMUikKLQogI2RlZmluZSBOUl9MT0NLIDgKLQogI2RlZmluZSBLX0JSTF9CTEFOSyBLKEtUX0JSTCwgMCkKICNkZWZpbmUgS19CUkxfRE9UMSBLKEtUX0JSTCwgMSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtfQlJMX0RPVDIgSyhLVF9CUkwsIDIpCiAjZGVmaW5lIEtfQlJMX0RPVDMgSyhLVF9CUkwsIDMpCiAjZGVmaW5lIEtfQlJMX0RPVDQgSyhLVF9CUkwsIDQpCiAjZGVmaW5lIEtfQlJMX0RPVDUgSyhLVF9CUkwsIDUpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLX0JSTF9ET1Q2IEsoS1RfQlJMLCA2KQogI2RlZmluZSBLX0JSTF9ET1Q3IEsoS1RfQlJMLCA3KQogI2RlZmluZSBLX0JSTF9ET1Q4IEsoS1RfQlJMLCA4KQotCiAjZGVmaW5lIE5SX0JSTCA5Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1BWF9ESUFDUiAyNTYKICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2tleWNob3JkLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgva2V5Y2hvcmQuaAppbmRleCA5MTQ4NDMxLi5hNTZjNjIyIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgva2V5Y2hvcmQuaAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgva2V5Y2hvcmQuaApAQCAtNywyNCArNywyNSBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX19MSU5VWF9LRVlDSE9SRF9IXwogI2RlZmluZSBfX0xJTlVYX0tFWUNIT1JEX0hfCi0KICNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgotCiAjZGVmaW5lIEtFWUNIT1JEX1ZFUlNJT04gMQotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IGlucHV0X2tleWNob3JkIHsKLQogIF9fdTE2IHZlcnNpb247Ci0KICBfX3UxNiBpZDsKLQogIF9fdTE2IGNvdW50OwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTE2IGtleWNvZGVzW107CiB9OwotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9rbGlzdC5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2tsaXN0LmgKaW5kZXggMGRmMDE0Zi4uM2FmYmMyMSAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2tsaXN0LmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2tsaXN0LmgKQEAgLTcsMzUgKzcsNDMgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9MSU5VWF9LTElTVF9ICiAjZGVmaW5lIF9MSU5VWF9LTElTVF9ICi0KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjaW5jbHVkZSA8bGludXgva3JlZi5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KLQogc3RydWN0IGtsaXN0X25vZGU7CiBzdHJ1Y3Qga2xpc3QgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzcGlubG9ja190IGtfbG9jazsKICBzdHJ1Y3QgbGlzdF9oZWFkIGtfbGlzdDsKICB2b2lkICgqZ2V0KShzdHJ1Y3Qga2xpc3Rfbm9kZSAqKTsKICB2b2lkICgqcHV0KShzdHJ1Y3Qga2xpc3Rfbm9kZSAqKTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwotCiBzdHJ1Y3Qga2xpc3Rfbm9kZSB7CiAgc3RydWN0IGtsaXN0ICogbl9rbGlzdDsKICBzdHJ1Y3QgbGlzdF9oZWFkIG5fbm9kZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IGtyZWYgbl9yZWY7CiAgc3RydWN0IGNvbXBsZXRpb24gbl9yZW1vdmVkOwogfTsKLQogc3RydWN0IGtsaXN0X2l0ZXIgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3Qga2xpc3QgKiBpX2tsaXN0OwogIHN0cnVjdCBsaXN0X2hlYWQgKiBpX2hlYWQ7CiAgc3RydWN0IGtsaXN0X25vZGUgKiBpX2N1cjsKIH07Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9rbW9kLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgva21vZC5oCmluZGV4IGQyNDQ1NmQuLmE1NjEyNjEgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9rbW9kLmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2ttb2QuaApAQCAtNywxNyArNywyMyBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX19MSU5VWF9LTU9EX0hfXwogI2RlZmluZSBfX0xJTlVYX0tNT0RfSF9fCi0KICNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgotCiAjZGVmaW5lIEtNT0RfUEFUSF9MRU4gMjU2Ci0KICNkZWZpbmUgdHJ5X3RoZW5fcmVxdWVzdF9tb2R1bGUoeCwgbW9kLi4uKSAoKHgpID86IChyZXF1ZXN0X21vZHVsZShtb2QpLCAoeCkpKQotCitzdHJ1Y3Qga2V5OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2tvYmplY3QuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9rb2JqZWN0LmgKaW5kZXggYzYxYTk1MC4uOTNjNjA2YiAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2tvYmplY3QuaAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgva29iamVjdC5oCkBAIC03LDkgKzcsMTUgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9LT0JKRUNUX0hfCiAjZGVmaW5lIF9LT0JKRUNUX0hfCi0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2tyZWYuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9rcmVmLmgKaW5kZXggZWUwMmI3Zi4uOGM0MDQ5MyAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2tyZWYuaAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgva3JlZi5oCkBAIC03LDkgKzcsMTUgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9LUkVGX0hfCiAjZGVmaW5lIF9LUkVGX0hfCi0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2t0aW1lLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgva3RpbWUuaAppbmRleCAzNGY4ZjBmLi5kM2YxNjdmIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgva3RpbWUuaAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgva3RpbWUuaApAQCAtNyw0NiArNyw1MyBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX0xJTlVYX0tUSU1FX0gKICNkZWZpbmUgX0xJTlVYX0tUSU1FX0gKLQogI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KICNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB0eXBlZGVmIHVuaW9uIHsKICBzNjQgdHY2NDsKICNpZiBCSVRTX1BFUl9MT05HICE9ICg2NCAmJiAhZGVmaW5lZChDT05GSUdfS1RJTUVfU0NBTEFSKSkKICBzdHJ1Y3QgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNpZmRlZiBfX0JJR19FTkRJQU4KICBzMzIgc2VjLCBuc2VjOwogI2Vsc2UKICBzMzIgbnNlYywgc2VjOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlbmRpZgogIH0gdHY7CiAjZW5kaWYKIH0ga3RpbWVfdDsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS1RJTUVfTUFYICgoczY0KX4oKHU2NCkxIDw8IDYzKSkKICNkZWZpbmUgS1RJTUVfU0VDX01BWCAoS1RJTUVfTUFYIC8gTlNFQ19QRVJfU0VDKQotCiAjaWYgQklUU19QRVJfTE9ORyA9PSA2NAotCiAjaWYgQklUU19QRVJfTE9ORyA9PSA2NAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlbmRpZgogI2RlZmluZSBrdGltZV9zdWIobGhzLCByaHMpICAgKHsgKGt0aW1lX3QpeyAudHY2NCA9IChsaHMpLnR2NjQgLSAocmhzKS50djY0IH07IH0pCiAjZGVmaW5lIGt0aW1lX2FkZChsaHMsIHJocykgICAoeyAoa3RpbWVfdCl7IC50djY0ID0gKGxocykudHY2NCArIChyaHMpLnR2NjQgfTsgfSkKICNkZWZpbmUga3RpbWVfYWRkX25zKGt0LCBuc3ZhbCkgICAoeyAoa3RpbWVfdCl7IC50djY0ID0gKGt0KS50djY0ICsgKG5zdmFsKSB9OyB9KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUga3RpbWVfdG9fdGltZXNwZWMoa3QpIG5zX3RvX3RpbWVzcGVjKChrdCkudHY2NCkKICNkZWZpbmUga3RpbWVfdG9fdGltZXZhbChrdCkgbnNfdG9fdGltZXZhbCgoa3QpLnR2NjQpCiAjZGVmaW5lIGt0aW1lX3RvX25zKGt0KSAoKGt0KS50djY0KQogI2Vsc2UKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlbmRpZgogI2RlZmluZSBLVElNRV9SRUFMVElNRV9SRVMgKGt0aW1lX3QpeyAudHY2NCA9IFRJQ0tfTlNFQyB9CiAjZGVmaW5lIEtUSU1FX01PTk9UT05JQ19SRVMgKGt0aW1lX3QpeyAudHY2NCA9IFRJQ0tfTlNFQyB9Ci0KICNkZWZpbmUga3RpbWVfZ2V0X3JlYWxfdHModHMpIGdldG5zdGltZW9mZGF5KHRzKQotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgva3h0ZjkuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9reHRmOS5oCmluZGV4IDkxNDEzNjQuLjk2MmY1MDEgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9reHRmOS5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9reHRmOS5oCkBAIC03LDY0ICs3LDcwIEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfX0tYVEY5X0hfXwogI2RlZmluZSBfX0tYVEY5X0hfXwotCi0jaW5jbHVkZSA8bGludXgvaW9jdGwuaD4gIAotCisjaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KICNkZWZpbmUgS1hURjlfSU9DVExfQkFTRSA3NwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBLWFRGOV9JT0NUTF9TRVRfREVMQVkgX0lPVyhLWFRGOV9JT0NUTF9CQVNFLCAwLCBpbnQpCiAjZGVmaW5lIEtYVEY5X0lPQ1RMX0dFVF9ERUxBWSBfSU9SKEtYVEY5X0lPQ1RMX0JBU0UsIDEsIGludCkKICNkZWZpbmUgS1hURjlfSU9DVExfU0VUX0VOQUJMRSBfSU9XKEtYVEY5X0lPQ1RMX0JBU0UsIDIsIGludCkKICNkZWZpbmUgS1hURjlfSU9DVExfR0VUX0VOQUJMRSBfSU9SKEtYVEY5X0lPQ1RMX0JBU0UsIDMsIGludCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtYVEY5X0lPQ1RMX1NFVF9HX1JBTkdFIF9JT1coS1hURjlfSU9DVExfQkFTRSwgNCwgaW50KQotCiAjZGVmaW5lIEtYVEY5X0lPQ1RMX1NFVF9USUxUX0VOQUJMRSBfSU9XKEtYVEY5X0lPQ1RMX0JBU0UsIDUsIGludCkKICNkZWZpbmUgS1hURjlfSU9DVExfU0VUX1RBUF9FTkFCTEUgX0lPVyhLWFRGOV9JT0NUTF9CQVNFLCA2LCBpbnQpCiAjZGVmaW5lIEtYVEY5X0lPQ1RMX1NFVF9XQUtFX0VOQUJMRSBfSU9XKEtYVEY5X0lPQ1RMX0JBU0UsIDcsIGludCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtYVEY5X0lPQ1RMX1NFVF9QTV9NT0RFIF9JT1coS1hURjlfSU9DVExfQkFTRSwgOCwgaW50KQogI2RlZmluZSBLWFRGOV9JT0NUTF9TRUxGX1RFU1QgX0lPVyhLWFRGOV9JT0NUTF9CQVNFLCA5LCBpbnQpCiAjZGVmaW5lIEtYVEY5X0lPQ1RMX1NFVF9TRU5TSVRJVklUWSBfSU9XKEtYVEY5X0lPQ1RMX0JBU0UsIDEwLCBpbnQpCi0KICNkZWZpbmUgUkVTXzEyQklUIDB4NDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEtYVEY5X0dfMkcgMHgwMAogI2RlZmluZSBLWFRGOV9HXzRHIDB4MDgKICNkZWZpbmUgS1hURjlfR184RyAweDEwCi0jZGVmaW5lIFRQRSAweDAxICAKLSNkZWZpbmUgV1VGRSAweDAyICAKLSNkZWZpbmUgVERURSAweDA0ICAKLQotI2RlZmluZSBPVFAxXzYgMHgwMCAgCisjZGVmaW5lIFRQRSAweDAxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBXVUZFIDB4MDIKKyNkZWZpbmUgVERURSAweDA0CisjZGVmaW5lIE9UUDFfNiAweDAwCiAjZGVmaW5lIE9UUDZfMyAweDIwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBPVFAxMl81IDB4NDAKICNkZWZpbmUgT1RQNTAgMHg2MAotI2RlZmluZSBPV1VGMjUgMHgwMCAgCisjZGVmaW5lIE9XVUYyNSAweDAwCiAjZGVmaW5lIE9XVUY1MCAweDAxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBPV1VGMTAwIDB4MDIKICNkZWZpbmUgT1dVRjIwMCAweDAzCi0jZGVmaW5lIE9URFQ1MCAweDAwICAKKyNkZWZpbmUgT1REVDUwIDB4MDAKICNkZWZpbmUgT1REVDEwMCAweDA0CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBPVERUMjAwIDB4MDgKICNkZWZpbmUgT1REVDQwMCAweDBDCi0KLSNkZWZpbmUgSUVOIDB4MjAgIAotI2RlZmluZSBJRUEgMHgxMCAgCi0jZGVmaW5lIElFTCAweDA4ICAKLSNkZWZpbmUgSUVVIDB4MDQgIAotCi0jZGVmaW5lIE9EUjgwMCAweDA2ICAKKyNkZWZpbmUgSUVOIDB4MjAKKyNkZWZpbmUgSUVBIDB4MTAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIElFTCAweDA4CisjZGVmaW5lIElFVSAweDA0CisjZGVmaW5lIE9EUjgwMCAweDA2CiAjZGVmaW5lIE9EUjQwMCAweDA1CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBPRFIyMDAgMHgwNAogI2RlZmluZSBPRFIxMDAgMHgwMwogI2RlZmluZSBPRFI1MCAweDAyCiAjZGVmaW5lIE9EUjI1IDB4MDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE9EUjEyXzUgMHgwMAotCiAjZGVmaW5lIFNFTlNJVElWSVRZX1JFR1MgMHgwNwotCiAjZW5kaWYKLQotCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbDNnNDIwMGQuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9sM2c0MjAwZC5oCmluZGV4IDBhMGY4Y2QuLjE5ZWMyYzEgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9sM2c0MjAwZC5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9sM2c0MjAwZC5oCkBAIC03LDIxICs3LDI0IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfX0wzRzQyMDBEX0hfXwogI2RlZmluZSBfX0wzRzQyMDBEX0hfXwotCi0jaW5jbHVkZSA8bGludXgvaW9jdGwuaD4gIAotCisjaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KICNkZWZpbmUgTDNHNDIwMERfTkFNRSAibDNnNDIwMGQiCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEwzRzQyMDBEX0lPQ1RMX0JBU0UgNzcKLQogI2RlZmluZSBMM0c0MjAwRF9JT0NUTF9TRVRfREVMQVkgX0lPVyhMM0c0MjAwRF9JT0NUTF9CQVNFLCAwLCBpbnQpCiAjZGVmaW5lIEwzRzQyMDBEX0lPQ1RMX0dFVF9ERUxBWSBfSU9SKEwzRzQyMDBEX0lPQ1RMX0JBU0UsIDEsIGludCkKICNkZWZpbmUgTDNHNDIwMERfSU9DVExfU0VUX0VOQUJMRSBfSU9XKEwzRzQyMDBEX0lPQ1RMX0JBU0UsIDIsIGludCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEwzRzQyMDBEX0lPQ1RMX0dFVF9FTkFCTEUgX0lPUihMM0c0MjAwRF9JT0NUTF9CQVNFLCAzLCBpbnQpCi0KICNlbmRpZgotCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbGlnaHRzZW5zb3IuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9saWdodHNlbnNvci5oCmluZGV4IDcwMjU3ZWQuLmYwZjcxNzAgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9saWdodHNlbnNvci5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9saWdodHNlbnNvci5oCkBAIC03LDE4ICs3LDIyIEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfX0xJTlVYX0xJR0hUU0VOU09SX0gKICNkZWZpbmUgX19MSU5VWF9MSUdIVFNFTlNPUl9ICi0KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIExJR0hUU0VOU09SX0lPQ1RMX01BR0lDICdsJwotCiAjZGVmaW5lIExJR0hUU0VOU09SX0lPQ1RMX0dFVF9FTkFCTEVEIF9JT1IoTElHSFRTRU5TT1JfSU9DVExfTUFHSUMsIDEsIGludCAqKQogI2RlZmluZSBMSUdIVFNFTlNPUl9JT0NUTF9FTkFCTEUgX0lPVyhMSUdIVFNFTlNPUl9JT0NUTF9NQUdJQywgMiwgaW50ICopCi0KICNlbmRpZgotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2xpbWl0cy5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2xpbWl0cy5oCmluZGV4IDU1NjVlMzAuLmM2M2IyYTIgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9saW1pdHMuaAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbGltaXRzLmgKQEAgLTcsMjcgKzcsMzQgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9MSU5VWF9MSU1JVFNfSAogI2RlZmluZSBfTElOVVhfTElNSVRTX0gKLQogI2RlZmluZSBOUl9PUEVOIDEwMjQKLQotI2RlZmluZSBOR1JPVVBTX01BWCA2NTUzNiAgCi0jZGVmaW5lIEFSR19NQVggMTMxMDcyICAKLSNkZWZpbmUgQ0hJTERfTUFYIDk5OSAgCi0jZGVmaW5lIE9QRU5fTUFYIDI1NiAgCi0jZGVmaW5lIExJTktfTUFYIDEyNyAgCi0jZGVmaW5lIE1BWF9DQU5PTiAyNTUgIAotI2RlZmluZSBNQVhfSU5QVVQgMjU1ICAKLSNkZWZpbmUgTkFNRV9NQVggMjU1ICAKLSNkZWZpbmUgUEFUSF9NQVggNDA5NiAgCi0jZGVmaW5lIFBJUEVfQlVGIDQwOTYgIAotI2RlZmluZSBYQVRUUl9OQU1FX01BWCAyNTUgIAotI2RlZmluZSBYQVRUUl9TSVpFX01BWCA2NTUzNiAgCi0jZGVmaW5lIFhBVFRSX0xJU1RfTUFYIDY1NTM2ICAKLQorI2RlZmluZSBOR1JPVVBTX01BWCA2NTUzNgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgQVJHX01BWCAxMzEwNzIKKyNkZWZpbmUgQ0hJTERfTUFYIDk5OQorI2RlZmluZSBPUEVOX01BWCAyNTYKKyNkZWZpbmUgTElOS19NQVggMTI3CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBNQVhfQ0FOT04gMjU1CisjZGVmaW5lIE1BWF9JTlBVVCAyNTUKKyNkZWZpbmUgTkFNRV9NQVggMjU1CisjZGVmaW5lIFBBVEhfTUFYIDQwOTYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFBJUEVfQlVGIDQwOTYKKyNkZWZpbmUgWEFUVFJfTkFNRV9NQVggMjU1CisjZGVmaW5lIFhBVFRSX1NJWkVfTUFYIDY1NTM2CisjZGVmaW5lIFhBVFRSX0xJU1RfTUFYIDY1NTM2CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBSVFNJR19NQVggMzIKLQogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbGlua2FnZS5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2xpbmthZ2UuaAppbmRleCBlMDE5NGJjLi5iMmY0YjhiIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbGlua2FnZS5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9saW5rYWdlLmgKQEAgLTcsNjAgKzcsNjIgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9MSU5VWF9MSU5LQUdFX0gKICNkZWZpbmUgX0xJTlVYX0xJTktBR0VfSAotCiAjaW5jbHVkZSA8YXNtL2xpbmthZ2UuaD4KLQogI2lmZGVmIF9fY3BsdXNwbHVzCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBDUFBfQVNNTElOS0FHRSBleHRlcm4gIkMiCiAjZWxzZQogI2RlZmluZSBDUFBfQVNNTElOS0FHRQogI2VuZGlmCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjaWZuZGVmIGFzbWxpbmthZ2UKICNkZWZpbmUgYXNtbGlua2FnZSBDUFBfQVNNTElOS0FHRQogI2VuZGlmCi0KICNpZm5kZWYgcHJldmVudF90YWlsX2NhbGwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIHByZXZlbnRfdGFpbF9jYWxsKHJldCkgZG8geyB9IHdoaWxlICgwKQogI2VuZGlmCi0KICNpZm5kZWYgX19BTElHTgogI2RlZmluZSBfX0FMSUdOIC5hbGlnbiA0LDB4OTAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fQUxJR05fU1RSICIuYWxpZ24gNCwweDkwIgogI2VuZGlmCi0KICNpZmRlZiBfX0FTU0VNQkxZX18KLQogI2RlZmluZSBBTElHTiBfX0FMSUdOCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBTElHTl9TVFIgX19BTElHTl9TVFIKLQogI2lmbmRlZiBFTlRSWQogI2RlZmluZSBFTlRSWShuYW1lKSAgIC5nbG9ibCBuYW1lOyAgIEFMSUdOOyAgIG5hbWU6CiAjZW5kaWYKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgS1BST0JFX0VOVFJZKG5hbWUpICAgLnNlY3Rpb24gLmtwcm9iZXMudGV4dCwgImF4IjsgICBFTlRSWShuYW1lKQotCiAjaWZuZGVmIEVORAogI2RlZmluZSBFTkQobmFtZSkgICAuc2l6ZSBuYW1lLCAuLW5hbWUKICNlbmRpZgotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2lmbmRlZiBFTkRQUk9DCiAjZGVmaW5lIEVORFBST0MobmFtZSkgICAudHlwZSBuYW1lLCBAZnVuY3Rpb247ICAgRU5EKG5hbWUpCiAjZW5kaWYKLQogI2VuZGlmCi0KLSNkZWZpbmUgTk9SRVRfVFlQRSAgCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBOT1JFVF9UWVBFCiAjZGVmaW5lIEFUVFJJQl9OT1JFVCBfX2F0dHJpYnV0ZV9fKChub3JldHVybikpCiAjZGVmaW5lIE5PUkVUX0FORCBub3JldHVybiwKLQogI2lmbmRlZiBGQVNUQ0FMTAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRkFTVENBTEwoeCkgeAogI2RlZmluZSBmYXN0Y2FsbAogI2VuZGlmCi0KICNlbmRpZgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9saXMzMzFkbGguaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9saXMzMzFkbGguaAppbmRleCA0OWQxYjEyLi41NTEwNTQ2IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbGlzMzMxZGxoLmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2xpczMzMWRsaC5oCkBAIC03LDI0ICs3LDI4IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfX0xJUzMzMURMSF9IX18KICNkZWZpbmUgX19MSVMzMzFETEhfSF9fCi0KLSNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPiAgCi0KKyNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgogI2RlZmluZSBMSVMzMzFETEhfSU9DVExfQkFTRSA3NwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBMSVMzMzFETEhfSU9DVExfU0VUX0RFTEFZIF9JT1coTElTMzMxRExIX0lPQ1RMX0JBU0UsIDAsIGludCkKICNkZWZpbmUgTElTMzMxRExIX0lPQ1RMX0dFVF9ERUxBWSBfSU9SKExJUzMzMURMSF9JT0NUTF9CQVNFLCAxLCBpbnQpCiAjZGVmaW5lIExJUzMzMURMSF9JT0NUTF9TRVRfRU5BQkxFIF9JT1coTElTMzMxRExIX0lPQ1RMX0JBU0UsIDIsIGludCkKICNkZWZpbmUgTElTMzMxRExIX0lPQ1RMX0dFVF9FTkFCTEUgX0lPUihMSVMzMzFETEhfSU9DVExfQkFTRSwgMywgaW50KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTElTMzMxRExIX0lPQ1RMX1NFVF9HX1JBTkdFIF9JT1coTElTMzMxRExIX0lPQ1RMX0JBU0UsIDQsIGludCkKLQogI2RlZmluZSBMSVMzMzFETEhfR18yRyAweDAwCiAjZGVmaW5lIExJUzMzMURMSF9HXzRHIDB4MTAKICNkZWZpbmUgTElTMzMxRExIX0dfOEcgMHgzMAotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2VuZGlmCi0KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9saXN0LmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbGlzdC5oCmluZGV4IGQxNzg3MWQuLjAzYzUyM2YgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9saXN0LmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2xpc3QuaApAQCAtNywxMCArNywxNyBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX0xJTlVYX0xJU1RfSAogI2RlZmluZSBfTElOVVhfTElTVF9ICi0KICN3YXJuaW5nICJkb24ndCBpbmNsdWRlIGtlcm5lbCBoZWFkZXJzIGluIHVzZXJzcGFjZSIKICNlbmRpZgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9sb2NrZC9ubG0uaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9sb2NrZC9ubG0uaAppbmRleCBkNWQ0NGZlLi5lMTM0YzExIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbG9ja2QvbmxtLmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2xvY2tkL25sbS5oCkBAIC03LDQ0ICs3LDU0IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBMSU5VWF9MT0NLRF9OTE1fSAogI2RlZmluZSBMSU5VWF9MT0NLRF9OTE1fSAotCiAjZGVmaW5lIE5MTV9PRkZTRVRfTUFYICgoczMyKSAweDdmZmZmZmZmKQogI2RlZmluZSBOTE00X09GRlNFVF9NQVggKChzNjQpICgofih1NjQpMCkgPj4gMSkpCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBlbnVtIHsKICBOTE1fTENLX0dSQU5URUQgPSAwLAogIE5MTV9MQ0tfREVOSUVEID0gMSwKICBOTE1fTENLX0RFTklFRF9OT0xPQ0tTID0gMiwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkxNX0xDS19CTE9DS0VEID0gMywKICBOTE1fTENLX0RFTklFRF9HUkFDRV9QRVJJT0QgPSA0LAogfTsKLQogI2RlZmluZSBOTE1fUFJPR1JBTSAxMDAwMjEKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTkxNUFJPQ19OVUxMIDAKICNkZWZpbmUgTkxNUFJPQ19URVNUIDEKICNkZWZpbmUgTkxNUFJPQ19MT0NLIDIKICNkZWZpbmUgTkxNUFJPQ19DQU5DRUwgMworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTkxNUFJPQ19VTkxPQ0sgNAogI2RlZmluZSBOTE1QUk9DX0dSQU5URUQgNQogI2RlZmluZSBOTE1QUk9DX1RFU1RfTVNHIDYKICNkZWZpbmUgTkxNUFJPQ19MT0NLX01TRyA3CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBOTE1QUk9DX0NBTkNFTF9NU0cgOAogI2RlZmluZSBOTE1QUk9DX1VOTE9DS19NU0cgOQogI2RlZmluZSBOTE1QUk9DX0dSQU5URURfTVNHIDEwCiAjZGVmaW5lIE5MTVBST0NfVEVTVF9SRVMgMTEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE5MTVBST0NfTE9DS19SRVMgMTIKICNkZWZpbmUgTkxNUFJPQ19DQU5DRUxfUkVTIDEzCiAjZGVmaW5lIE5MTVBST0NfVU5MT0NLX1JFUyAxNAogI2RlZmluZSBOTE1QUk9DX0dSQU5URURfUkVTIDE1Ci0jZGVmaW5lIE5MTVBST0NfTlNNX05PVElGWSAxNiAgCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBOTE1QUk9DX05TTV9OT1RJRlkgMTYKICNkZWZpbmUgTkxNUFJPQ19TSEFSRSAyMAogI2RlZmluZSBOTE1QUk9DX1VOU0hBUkUgMjEKICNkZWZpbmUgTkxNUFJPQ19OTV9MT0NLIDIyCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBOTE1QUk9DX0ZSRUVfQUxMIDIzCi0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2xvY2tkL3hkci5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2xvY2tkL3hkci5oCmluZGV4IDc1ZDAzMDguLjJiYWM1OGUgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9sb2NrZC94ZHIuaAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbG9ja2QveGRyLmgKQEAgLTcsNjcgKzcsNzUgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIExPQ0tEX1hEUl9ICiAjZGVmaW5lIExPQ0tEX1hEUl9ICi0KICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L25mcy5oPgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNpbmNsdWRlIDxsaW51eC9zdW5ycGMveGRyLmg+Ci0KICNkZWZpbmUgTkxNX01BWENPT0tJRUxFTiAzMgogI2RlZmluZSBOTE1fTUFYU1RSTEVOIDEwMjQKLQogI2RlZmluZSBubG1fZ3JhbnRlZCBfX2NvbnN0YW50X2h0b25sKE5MTV9MQ0tfR1JBTlRFRCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIG5sbV9sY2tfZGVuaWVkIF9fY29uc3RhbnRfaHRvbmwoTkxNX0xDS19ERU5JRUQpCiAjZGVmaW5lIG5sbV9sY2tfZGVuaWVkX25vbG9ja3MgX19jb25zdGFudF9odG9ubChOTE1fTENLX0RFTklFRF9OT0xPQ0tTKQogI2RlZmluZSBubG1fbGNrX2Jsb2NrZWQgX19jb25zdGFudF9odG9ubChOTE1fTENLX0JMT0NLRUQpCiAjZGVmaW5lIG5sbV9sY2tfZGVuaWVkX2dyYWNlX3BlcmlvZCBfX2NvbnN0YW50X2h0b25sKE5MTV9MQ0tfREVOSUVEX0dSQUNFX1BFUklPRCkKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBubG1fbG9jayB7CiAgY2hhciAqIGNhbGxlcjsKICBpbnQgbGVuOwogIHN0cnVjdCBuZnNfZmggZmg7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCB4ZHJfbmV0b2JqIG9oOwogIHUzMiBzdmlkOwogIHN0cnVjdCBmaWxlX2xvY2sgZmw7CiB9OwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IG5sbV9jb29raWUKIHsKICB1bnNpZ25lZCBjaGFyIGRhdGFbTkxNX01BWENPT0tJRUxFTl07CiAgdW5zaWduZWQgaW50IGxlbjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwotCiBzdHJ1Y3QgbmxtX2FyZ3MgewogIHN0cnVjdCBubG1fY29va2llIGNvb2tpZTsKICBzdHJ1Y3QgbmxtX2xvY2sgbG9jazsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdTMyIGJsb2NrOwogIHUzMiByZWNsYWltOwogIHUzMiBzdGF0ZTsKICB1MzIgbW9uaXRvcjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdTMyIGZzbV9hY2Nlc3M7CiAgdTMyIGZzbV9tb2RlOwogfTsKLQogdHlwZWRlZiBzdHJ1Y3QgbmxtX2FyZ3MgbmxtX2FyZ3M7Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgbmxtX3JlcyB7CiAgc3RydWN0IG5sbV9jb29raWUgY29va2llOwogIHUzMiBzdGF0dXM7CiAgc3RydWN0IG5sbV9sb2NrIGxvY2s7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKLQogc3RydWN0IG5sbV9yZWJvb3QgewogIGNoYXIgKiBtb247CiAgaW50IGxlbjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdTMyIHN0YXRlOwogIHUzMiBhZGRyOwogIHUzMiB2ZXJzOwogIHUzMiBwcm90bzsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwotCiAjZGVmaW5lIE5MTVNWQ19YRFJTSVpFIHNpemVvZihzdHJ1Y3QgbmxtX2FyZ3MpCi0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2xvY2tkZXAuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9sb2NrZGVwLmgKaW5kZXggZjVlODYzNC4uYzZkNmU0ZiAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2xvY2tkZXAuaAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbG9ja2RlcC5oCkBAIC03LDQ2ICs3LDUyIEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfX0xJTlVYX0xPQ0tERVBfSAogI2RlZmluZSBfX0xJTlVYX0xPQ0tERVBfSAotCiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjaW5jbHVkZSA8bGludXgvZGVidWdfbG9ja3MuaD4KICNpbmNsdWRlIDxsaW51eC9zdGFja3RyYWNlLmg+Ci0KICNkZWZpbmUgbG9ja19hY3F1aXJlKGwsIHMsIHQsIHIsIGMsIGkpIGRvIHsgfSB3aGlsZSAoMCkKICNkZWZpbmUgbG9ja19yZWxlYXNlKGwsIG4sIGkpIGRvIHsgfSB3aGlsZSAoMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIGxvY2tkZXBfaW5pdCgpIGRvIHsgfSB3aGlsZSAoMCkKICNkZWZpbmUgbG9ja2RlcF9pbmZvKCkgZG8geyB9IHdoaWxlICgwKQogI2RlZmluZSBsb2NrZGVwX2luaXRfbWFwKGxvY2ssIG5hbWUsIGtleSkgZG8geyAodm9pZCkoa2V5KTsgfSB3aGlsZSAoMCkKICNkZWZpbmUgbG9ja2RlcF9zZXRfY2xhc3MobG9jaywga2V5KSBkbyB7ICh2b2lkKShrZXkpOyB9IHdoaWxlICgwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgbG9ja2RlcF9zZXRfY2xhc3NfYW5kX25hbWUobG9jaywga2V5LCBuYW1lKSAgIGRvIHsgKHZvaWQpKGtleSk7IH0gd2hpbGUgKDApCiAjZGVmaW5lIElOSVRfTE9DS0RFUAogI2RlZmluZSBsb2NrZGVwX3Jlc2V0KCkgZG8geyBkZWJ1Z19sb2NrcyA9IDE7IH0gd2hpbGUgKDApCiAjZGVmaW5lIGxvY2tkZXBfZnJlZV9rZXlfcmFuZ2Uoc3RhcnQsIHNpemUpIGRvIHsgfSB3aGlsZSAoMCkKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK3N0cnVjdCBsb2NrX2NsYXNzX2tleSB7IH07CiAjZGVmaW5lIGVhcmx5X2luaXRfaXJxX2xvY2tfY2xhc3MoKSBkbyB7IH0gd2hpbGUgKDApCi0KICNkZWZpbmUgZWFybHlfYm9vdF9pcnFzX29mZigpIGRvIHsgfSB3aGlsZSAoMCkKICNkZWZpbmUgZWFybHlfYm9vdF9pcnFzX29uKCkgZG8geyB9IHdoaWxlICgwKQotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTSU5HTEVfREVQVEhfTkVTVElORyAxCi0KICNkZWZpbmUgc3Bpbl9hY3F1aXJlKGwsIHMsIHQsIGkpIGRvIHsgfSB3aGlsZSAoMCkKICNkZWZpbmUgc3Bpbl9yZWxlYXNlKGwsIG4sIGkpIGRvIHsgfSB3aGlsZSAoMCkKLQogI2RlZmluZSByd2xvY2tfYWNxdWlyZShsLCBzLCB0LCBpKSBkbyB7IH0gd2hpbGUgKDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSByd2xvY2tfYWNxdWlyZV9yZWFkKGwsIHMsIHQsIGkpIGRvIHsgfSB3aGlsZSAoMCkKICNkZWZpbmUgcndsb2NrX3JlbGVhc2UobCwgbiwgaSkgZG8geyB9IHdoaWxlICgwKQotCiAjZGVmaW5lIG11dGV4X2FjcXVpcmUobCwgcywgdCwgaSkgZG8geyB9IHdoaWxlICgwKQogI2RlZmluZSBtdXRleF9yZWxlYXNlKGwsIG4sIGkpIGRvIHsgfSB3aGlsZSAoMCkKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgcndzZW1fYWNxdWlyZShsLCBzLCB0LCBpKSBkbyB7IH0gd2hpbGUgKDApCiAjZGVmaW5lIHJ3c2VtX2FjcXVpcmVfcmVhZChsLCBzLCB0LCBpKSBkbyB7IH0gd2hpbGUgKDApCiAjZGVmaW5lIHJ3c2VtX3JlbGVhc2UobCwgbiwgaSkgZG8geyB9IHdoaWxlICgwKQotCiAjZW5kaWYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbG9vcC5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2xvb3AuaAppbmRleCA5Y2RmZDM4Li5kNjZmMWRiIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbG9vcC5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9sb29wLmgKQEAgLTcsNzEgKzcsODQgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9MSU5VWF9MT09QX0gKICNkZWZpbmUgX0xJTlVYX0xPT1BfSAotCiAjZGVmaW5lIExPX05BTUVfU0laRSA2NAogI2RlZmluZSBMT19LRVlfU0laRSAzMgotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogZW51bSB7CiAgTE9fRkxBR1NfUkVBRF9PTkxZID0gMSwKICBMT19GTEFHU19VU0VfQU9QUyA9IDIsCiB9OwotCi0jaW5jbHVkZSA8YXNtL3Bvc2l4X3R5cGVzLmg+ICAKLSNpbmNsdWRlIDxhc20vdHlwZXMuaD4gIAotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2luY2x1ZGUgPGFzbS9wb3NpeF90eXBlcy5oPgorI2luY2x1ZGUgPGFzbS90eXBlcy5oPgogc3RydWN0IGxvb3BfaW5mbyB7CiAgaW50IGxvX251bWJlcjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX19rZXJuZWxfb2xkX2Rldl90IGxvX2RldmljZTsKICB1bnNpZ25lZCBsb25nIGxvX2lub2RlOwogIF9fa2VybmVsX29sZF9kZXZfdCBsb19yZGV2aWNlOwogIGludCBsb19vZmZzZXQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGludCBsb19lbmNyeXB0X3R5cGU7CiAgaW50IGxvX2VuY3J5cHRfa2V5X3NpemU7CiAgaW50IGxvX2ZsYWdzOwogIGNoYXIgbG9fbmFtZVtMT19OQU1FX1NJWkVdOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBjaGFyIGxvX2VuY3J5cHRfa2V5W0xPX0tFWV9TSVpFXTsKICB1bnNpZ25lZCBsb25nIGxvX2luaXRbMl07CiAgY2hhciByZXNlcnZlZFs0XTsKIH07Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgbG9vcF9pbmZvNjQgewogIF9fdTY0IGxvX2RldmljZTsKICBfX3U2NCBsb19pbm9kZTsKICBfX3U2NCBsb19yZGV2aWNlOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U2NCBsb19vZmZzZXQ7CiAgX191NjQgbG9fc2l6ZWxpbWl0OwogIF9fdTMyIGxvX251bWJlcjsKICBfX3UzMiBsb19lbmNyeXB0X3R5cGU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGxvX2VuY3J5cHRfa2V5X3NpemU7CiAgX191MzIgbG9fZmxhZ3M7CiAgX191OCBsb19maWxlX25hbWVbTE9fTkFNRV9TSVpFXTsKICBfX3U4IGxvX2NyeXB0X25hbWVbTE9fTkFNRV9TSVpFXTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191OCBsb19lbmNyeXB0X2tleVtMT19LRVlfU0laRV07CiAgX191NjQgbG9faW5pdFsyXTsKIH07Ci0KICNkZWZpbmUgTE9fQ1JZUFRfTk9ORSAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBMT19DUllQVF9YT1IgMQogI2RlZmluZSBMT19DUllQVF9ERVMgMgotI2RlZmluZSBMT19DUllQVF9GSVNIMiAzICAKKyNkZWZpbmUgTE9fQ1JZUFRfRklTSDIgMwogI2RlZmluZSBMT19DUllQVF9CTE9XIDQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIExPX0NSWVBUX0NBU1QxMjggNQogI2RlZmluZSBMT19DUllQVF9JREVBIDYKICNkZWZpbmUgTE9fQ1JZUFRfRFVNTVkgOQogI2RlZmluZSBMT19DUllQVF9TS0lQSkFDSyAxMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTE9fQ1JZUFRfQ1JZUFRPQVBJIDE4CiAjZGVmaW5lIE1BWF9MT19DUllQVCAyMAotCiAjZGVmaW5lIExPT1BfU0VUX0ZEIDB4NEMwMAogI2RlZmluZSBMT09QX0NMUl9GRCAweDRDMDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIExPT1BfU0VUX1NUQVRVUyAweDRDMDIKICNkZWZpbmUgTE9PUF9HRVRfU1RBVFVTIDB4NEMwMwogI2RlZmluZSBMT09QX1NFVF9TVEFUVVM2NCAweDRDMDQKICNkZWZpbmUgTE9PUF9HRVRfU1RBVFVTNjQgMHg0QzA1CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBMT09QX0NIQU5HRV9GRCAweDRDMDYKLQogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbWFnaWMuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9tYWdpYy5oCmluZGV4IGM5NGY5Y2UuLjA0ZDQwNDYgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9tYWdpYy5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9tYWdpYy5oCkBAIC03LDQ5ICs3LDU4IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfX0xJTlVYX01BR0lDX0hfXwogI2RlZmluZSBfX0xJTlVYX01BR0lDX0hfXwotCiAjZGVmaW5lIEFERlNfU1VQRVJfTUFHSUMgMHhhZGY1CiAjZGVmaW5lIEFGRlNfU1VQRVJfTUFHSUMgMHhhZGZmCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBRlNfU1VQRVJfTUFHSUMgMHg1MzQ2NDE0RgogI2RlZmluZSBBVVRPRlNfU1VQRVJfTUFHSUMgMHgwMTg3CiAjZGVmaW5lIENPREFfU1VQRVJfTUFHSUMgMHg3Mzc1NzI0NQorI2RlZmluZSBERUJVR0ZTX01BR0lDIDB4NjQ2MjY3MjAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEVGU19TVVBFUl9NQUdJQyAweDQxNEE1MwogI2RlZmluZSBFWFQyX1NVUEVSX01BR0lDIDB4RUY1MwogI2RlZmluZSBFWFQzX1NVUEVSX01BR0lDIDB4RUY1MwogI2RlZmluZSBFWFQ0X1NVUEVSX01BR0lDIDB4RUY1MworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSFBGU19TVVBFUl9NQUdJQyAweGY5OTVlODQ5CiAjZGVmaW5lIElTT0ZTX1NVUEVSX01BR0lDIDB4OTY2MAogI2RlZmluZSBKRkZTMl9TVVBFUl9NQUdJQyAweDcyYjYKICNkZWZpbmUgQU5PTl9JTk9ERV9GU19NQUdJQyAweDA5MDQxOTM0Ci0KLSNkZWZpbmUgTUlOSVhfU1VQRVJfTUFHSUMgMHgxMzdGICAKLSNkZWZpbmUgTUlOSVhfU1VQRVJfTUFHSUMyIDB4MTM4RiAgCi0jZGVmaW5lIE1JTklYMl9TVVBFUl9NQUdJQyAweDI0NjggIAotI2RlZmluZSBNSU5JWDJfU1VQRVJfTUFHSUMyIDB4MjQ3OCAgCi0jZGVmaW5lIE1JTklYM19TVVBFUl9NQUdJQyAweDRkNWEgIAotCi0jZGVmaW5lIE1TRE9TX1NVUEVSX01BR0lDIDB4NGQ0NCAgCi0jZGVmaW5lIE5DUF9TVVBFUl9NQUdJQyAweDU2NGMgIAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgTUlOSVhfU1VQRVJfTUFHSUMgMHgxMzdGCisjZGVmaW5lIE1JTklYX1NVUEVSX01BR0lDMiAweDEzOEYKKyNkZWZpbmUgTUlOSVgyX1NVUEVSX01BR0lDIDB4MjQ2OAorI2RlZmluZSBNSU5JWDJfU1VQRVJfTUFHSUMyIDB4MjQ3OAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgTUlOSVgzX1NVUEVSX01BR0lDIDB4NGQ1YQorI2RlZmluZSBNU0RPU19TVVBFUl9NQUdJQyAweDRkNDQKKyNkZWZpbmUgTkNQX1NVUEVSX01BR0lDIDB4NTY0YwogI2RlZmluZSBORlNfU1VQRVJfTUFHSUMgMHg2OTY5CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBPUEVOUFJPTV9TVVBFUl9NQUdJQyAweDlmYTEKICNkZWZpbmUgUFJPQ19TVVBFUl9NQUdJQyAweDlmYTAKLSNkZWZpbmUgUU5YNF9TVVBFUl9NQUdJQyAweDAwMmYgIAotCi0jZGVmaW5lIFJFSVNFUkZTX1NVUEVSX01BR0lDIDB4NTI2NTQ5NzMgIAotCisjZGVmaW5lIFFOWDRfU1VQRVJfTUFHSUMgMHgwMDJmCisjZGVmaW5lIFJFSVNFUkZTX1NVUEVSX01BR0lDIDB4NTI2NTQ5NzMKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFJFSVNFUkZTX1NVUEVSX01BR0lDX1NUUklORyAiUmVJc0VyRnMiCiAjZGVmaW5lIFJFSVNFUjJGU19TVVBFUl9NQUdJQ19TVFJJTkcgIlJlSXNFcjJGcyIKICNkZWZpbmUgUkVJU0VSMkZTX0pSX1NVUEVSX01BR0lDX1NUUklORyAiUmVJc0VyM0ZzIgotCiAjZGVmaW5lIFNNQl9TVVBFUl9NQUdJQyAweDUxN0IKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFVTQkRFVklDRV9TVVBFUl9NQUdJQyAweDlmYTIKICNkZWZpbmUgQ0dST1VQX1NVUEVSX01BR0lDIDB4MjdlMGViCi0KICNkZWZpbmUgRlVURVhGU19TVVBFUl9NQUdJQyAweEJBRDFERUEKICNkZWZpbmUgSU5PVElGWUZTX1NVUEVSX01BR0lDIDB4MkJBRDFERUEKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L21ham9yLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbWFqb3IuaAppbmRleCBlNDJkNjk4Li4wMGUzYmNkIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbWFqb3IuaAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbWFqb3IuaApAQCAtNywxNjkgKzcsMTgzIEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfTElOVVhfTUFKT1JfSAogI2RlZmluZSBfTElOVVhfTUFKT1JfSAotCiAjZGVmaW5lIFVOTkFNRURfTUFKT1IgMAogI2RlZmluZSBNRU1fTUFKT1IgMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUkFNRElTS19NQUpPUiAxCiAjZGVmaW5lIEZMT1BQWV9NQUpPUiAyCiAjZGVmaW5lIFBUWV9NQVNURVJfTUFKT1IgMgogI2RlZmluZSBJREUwX01BSk9SIDMKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEhEX01BSk9SIElERTBfTUFKT1IKICNkZWZpbmUgUFRZX1NMQVZFX01BSk9SIDMKICNkZWZpbmUgVFRZX01BSk9SIDQKICNkZWZpbmUgVFRZQVVYX01BSk9SIDUKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIExQX01BSk9SIDYKICNkZWZpbmUgVkNTX01BSk9SIDcKICNkZWZpbmUgTE9PUF9NQUpPUiA3CiAjZGVmaW5lIFNDU0lfRElTSzBfTUFKT1IgOAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU0NTSV9UQVBFX01BSk9SIDkKICNkZWZpbmUgTURfTUFKT1IgOQogI2RlZmluZSBNSVNDX01BSk9SIDEwCiAjZGVmaW5lIFNDU0lfQ0RST01fTUFKT1IgMTEKLSNkZWZpbmUgTVVYX01BSk9SIDExICAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIE1VWF9NQUpPUiAxMQogI2RlZmluZSBYVF9ESVNLX01BSk9SIDEzCiAjZGVmaW5lIElOUFVUX01BSk9SIDEzCiAjZGVmaW5lIFNPVU5EX01BSk9SIDE0CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBDRFUzMUFfQ0RST01fTUFKT1IgMTUKICNkZWZpbmUgSk9ZU1RJQ0tfTUFKT1IgMTUKICNkZWZpbmUgR09MRFNUQVJfQ0RST01fTUFKT1IgMTYKICNkZWZpbmUgT1BUSUNTX0NEUk9NX01BSk9SIDE3CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTQU5ZT19DRFJPTV9NQUpPUiAxOAogI2RlZmluZSBDWUNMQURFU19NQUpPUiAxOQogI2RlZmluZSBDWUNMQURFU0FVWF9NQUpPUiAyMAogI2RlZmluZSBNSVRTVU1JX1hfQ0RST01fTUFKT1IgMjAKLSNkZWZpbmUgTUZNX0FDT1JOX01BSk9SIDIxICAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIE1GTV9BQ09STl9NQUpPUiAyMQogI2RlZmluZSBTQ1NJX0dFTkVSSUNfTUFKT1IgMjEKICNkZWZpbmUgSURFMV9NQUpPUiAyMgogI2RlZmluZSBESUdJQ1VfTUFKT1IgMjIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIERJR0lfTUFKT1IgMjMKICNkZWZpbmUgTUlUU1VNSV9DRFJPTV9NQUpPUiAyMwogI2RlZmluZSBDRFU1MzVfQ0RST01fTUFKT1IgMjQKICNkZWZpbmUgU1RMX1NFUklBTE1BSk9SIDI0CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNQVRTVVNISVRBX0NEUk9NX01BSk9SIDI1CiAjZGVmaW5lIFNUTF9DQUxMT1VUTUFKT1IgMjUKICNkZWZpbmUgTUFUU1VTSElUQV9DRFJPTTJfTUFKT1IgMjYKICNkZWZpbmUgUUlDMTE3X1RBUEVfTUFKT1IgMjcKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1BVFNVU0hJVEFfQ0RST00zX01BSk9SIDI3CiAjZGVmaW5lIE1BVFNVU0hJVEFfQ0RST000X01BSk9SIDI4CiAjZGVmaW5lIFNUTF9TSU9NRU1NQUpPUiAyOAogI2RlZmluZSBBQ1NJX01BSk9SIDI4CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBWlRFQ0hfQ0RST01fTUFKT1IgMjkKLSNkZWZpbmUgR1JBUEhERVZfTUFKT1IgMjkgIAorI2RlZmluZSBHUkFQSERFVl9NQUpPUiAyOQogI2RlZmluZSBDTTIwNl9DRFJPTV9NQUpPUiAzMgogI2RlZmluZSBJREUyX01BSk9SIDMzCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJREUzX01BSk9SIDM0CiAjZGVmaW5lIFo4NTMwX01BSk9SIDM0Ci0jZGVmaW5lIFhQUkFNX01BSk9SIDM1ICAKKyNkZWZpbmUgWFBSQU1fTUFKT1IgMzUKICNkZWZpbmUgTkVUTElOS19NQUpPUiAzNgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUFMyRVNESV9NQUpPUiAzNgogI2RlZmluZSBJREVUQVBFX01BSk9SIDM3CiAjZGVmaW5lIFoyUkFNX01BSk9SIDM3Ci0jZGVmaW5lIEFQQkxPQ0tfTUFKT1IgMzggIAotI2RlZmluZSBERFZfTUFKT1IgMzkgIAotI2RlZmluZSBOQkRfTUFKT1IgNDMgIAorI2RlZmluZSBBUEJMT0NLX01BSk9SIDM4CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBERFZfTUFKT1IgMzkKKyNkZWZpbmUgTkJEX01BSk9SIDQzCiAjZGVmaW5lIFJJU0NPTThfTk9STUFMX01BSk9SIDQ4Ci0jZGVmaW5lIERBQzk2MF9NQUpPUiA0OCAgCisjZGVmaW5lIERBQzk2MF9NQUpPUiA0OAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUklTQ09NOF9DQUxMT1VUX01BSk9SIDQ5CiAjZGVmaW5lIE1LSVNTX01BSk9SIDU1Ci0jZGVmaW5lIERTUDU2S19NQUpPUiA1NSAgCi0KKyNkZWZpbmUgRFNQNTZLX01BSk9SIDU1CiAjZGVmaW5lIElERTRfTUFKT1IgNTYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIElERTVfTUFKT1IgNTcKLQogI2RlZmluZSBTQ1NJX0RJU0sxX01BSk9SIDY1CiAjZGVmaW5lIFNDU0lfRElTSzJfTUFKT1IgNjYKICNkZWZpbmUgU0NTSV9ESVNLM19NQUpPUiA2NworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU0NTSV9ESVNLNF9NQUpPUiA2OAogI2RlZmluZSBTQ1NJX0RJU0s1X01BSk9SIDY5CiAjZGVmaW5lIFNDU0lfRElTSzZfTUFKT1IgNzAKICNkZWZpbmUgU0NTSV9ESVNLN19NQUpPUiA3MQotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBDT01QQVFfU01BUlQyX01BSk9SIDcyCiAjZGVmaW5lIENPTVBBUV9TTUFSVDJfTUFKT1IxIDczCiAjZGVmaW5lIENPTVBBUV9TTUFSVDJfTUFKT1IyIDc0CiAjZGVmaW5lIENPTVBBUV9TTUFSVDJfTUFKT1IzIDc1CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBDT01QQVFfU01BUlQyX01BSk9SNCA3NgogI2RlZmluZSBDT01QQVFfU01BUlQyX01BSk9SNSA3NwogI2RlZmluZSBDT01QQVFfU01BUlQyX01BSk9SNiA3OAogI2RlZmluZSBDT01QQVFfU01BUlQyX01BSk9SNyA3OQotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTUEVDSUFMSVhfTk9STUFMX01BSk9SIDc1CiAjZGVmaW5lIFNQRUNJQUxJWF9DQUxMT1VUX01BSk9SIDc2Ci0KICNkZWZpbmUgQVVST1JBX01BSk9SIDc5Ci0KLSNkZWZpbmUgSTJPX01BSk9SIDgwICAKLQotI2RlZmluZSBTSE1JUV9NQUpPUiA4NSAgCisjZGVmaW5lIEkyT19NQUpPUiA4MAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgU0hNSVFfTUFKT1IgODUKICNkZWZpbmUgU0NTSV9DSEFOR0VSX01BSk9SIDg2Ci0KICNkZWZpbmUgSURFNl9NQUpPUiA4OAogI2RlZmluZSBJREU3X01BSk9SIDg5CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJREU4X01BSk9SIDkwCiAjZGVmaW5lIElERTlfTUFKT1IgOTEKLQogI2RlZmluZSBEQVNEX01BSk9SIDk0Ci0KICNkZWZpbmUgTURJU0tfTUFKT1IgOTUKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVUJEX01BSk9SIDk4Ci0KICNkZWZpbmUgUFBfTUFKT1IgOTkKICNkZWZpbmUgSlNGRF9NQUpPUiA5OQotCiAjZGVmaW5lIFBIT05FX01BSk9SIDEwMAotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBDT01QQVFfQ0lTU19NQUpPUiAxMDQKICNkZWZpbmUgQ09NUEFRX0NJU1NfTUFKT1IxIDEwNQogI2RlZmluZSBDT01QQVFfQ0lTU19NQUpPUjIgMTA2CiAjZGVmaW5lIENPTVBBUV9DSVNTX01BSk9SMyAxMDcKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIENPTVBBUV9DSVNTX01BSk9SNCAxMDgKICNkZWZpbmUgQ09NUEFRX0NJU1NfTUFKT1I1IDEwOQogI2RlZmluZSBDT01QQVFfQ0lTU19NQUpPUjYgMTEwCiAjZGVmaW5lIENPTVBBUV9DSVNTX01BSk9SNyAxMTEKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVklPREFTRF9NQUpPUiAxMTIKICNkZWZpbmUgVklPQ0RfTUFKT1IgMTEzCi0KICNkZWZpbmUgQVRBUkFJRF9NQUpPUiAxMTQKLQogI2RlZmluZSBTQ1NJX0RJU0s4X01BSk9SIDEyOAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU0NTSV9ESVNLOV9NQUpPUiAxMjkKICNkZWZpbmUgU0NTSV9ESVNLMTBfTUFKT1IgMTMwCiAjZGVmaW5lIFNDU0lfRElTSzExX01BSk9SIDEzMQogI2RlZmluZSBTQ1NJX0RJU0sxMl9NQUpPUiAxMzIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNDU0lfRElTSzEzX01BSk9SIDEzMwogI2RlZmluZSBTQ1NJX0RJU0sxNF9NQUpPUiAxMzQKICNkZWZpbmUgU0NTSV9ESVNLMTVfTUFKT1IgMTM1Ci0KICNkZWZpbmUgVU5JWDk4X1BUWV9NQVNURVJfTUFKT1IgMTI4CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBVTklYOThfUFRZX01BSk9SX0NPVU5UIDgKICNkZWZpbmUgVU5JWDk4X1BUWV9TTEFWRV9NQUpPUiAoVU5JWDk4X1BUWV9NQVNURVJfTUFKT1IrVU5JWDk4X1BUWV9NQUpPUl9DT1VOVCkKLQogI2RlZmluZSBSVEZfTUFKT1IgMTUwCiAjZGVmaW5lIFJBV19NQUpPUiAxNjIKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVVNCX0FDTV9NQUpPUiAxNjYKICNkZWZpbmUgVVNCX0FDTV9BVVhfTUFKT1IgMTY3CiAjZGVmaW5lIFVTQl9DSEFSX01BSk9SIDE4MAotCi0jZGVmaW5lIFZYVk1fTUFKT1IgMTk5ICAKLSNkZWZpbmUgVlhTUEVDX01BSk9SIDIwMCAgCi0jZGVmaW5lIFZYRE1QX01BSk9SIDIwMSAgCi0KKyNkZWZpbmUgVlhWTV9NQUpPUiAxOTkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFZYU1BFQ19NQUpPUiAyMDAKKyNkZWZpbmUgVlhETVBfTUFKT1IgMjAxCiAjZGVmaW5lIE1TUl9NQUpPUiAyMDIKICNkZWZpbmUgQ1BVSURfTUFKT1IgMjAzCi0KLSNkZWZpbmUgT1NTVF9NQUpPUiAyMDYgIAotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBPU1NUX01BSk9SIDIwNgogI2RlZmluZSBJQk1fVFRZMzI3MF9NQUpPUiAyMjcKICNkZWZpbmUgSUJNX0ZTMzI3MF9NQUpPUiAyMjgKLQogI2RlZmluZSBWSU9UQVBFX01BSk9SIDIzMAotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbWF4OTYzNS5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L21heDk2MzUuaAppbmRleCBlNjk2ZmE5Li41NjMxMDBlIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbWF4OTYzNS5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9tYXg5NjM1LmgKQEAgLTcsMTcgKzcsMjIgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9MSU5VWF9NQVg5NjM1X0hfXwogI2RlZmluZSBfTElOVVhfTUFYOTYzNV9IX18KLQogI2RlZmluZSBNQVg5NjM1X05BTUUgIk1BWDk2MzVfYWxzIgogI2RlZmluZSBGT1BTX01BWDk2MzVfTkFNRSAiTUFYOTYzNSIKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTUFYOTYzNV9JTyAweEEzCi0KICNkZWZpbmUgTUFYOTYzNV9JT0NUTF9HRVRfRU5BQkxFIF9JT1IoTUFYOTYzNV9JTywgMHgwMCwgY2hhcikKICNkZWZpbmUgTUFYOTYzNV9JT0NUTF9TRVRfRU5BQkxFIF9JT1coTUFYOTYzNV9JTywgMHgwMSwgY2hhcikKLQogI2VuZGlmCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L21jMTQ2ODE4cnRjLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbWMxNDY4MThydGMuaAppbmRleCA3NDQzNmVhLi5hNGExNjY0IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbWMxNDY4MThydGMuaAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbWMxNDY4MThydGMuaApAQCAtNyw3MyArNyw3NCBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX01DMTQ2ODE4UlRDX0gKICNkZWZpbmUgX01DMTQ2ODE4UlRDX0gKLQogI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGxpbnV4L3J0Yy5oPiAgCi0jaW5jbHVkZSA8YXNtL21jMTQ2ODE4cnRjLmg+ICAKLQorI2luY2x1ZGUgPGxpbnV4L3J0Yy5oPgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNpbmNsdWRlIDxhc20vbWMxNDY4MThydGMuaD4KICNkZWZpbmUgUlRDX1NFQ09ORFMgMAogI2RlZmluZSBSVENfU0VDT05EU19BTEFSTSAxCiAjZGVmaW5lIFJUQ19NSU5VVEVTIDIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFJUQ19NSU5VVEVTX0FMQVJNIDMKICNkZWZpbmUgUlRDX0hPVVJTIDQKICNkZWZpbmUgUlRDX0hPVVJTX0FMQVJNIDUKLQogI2RlZmluZSBSVENfQUxBUk1fRE9OVF9DQVJFIDB4QzAKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUlRDX0RBWV9PRl9XRUVLIDYKICNkZWZpbmUgUlRDX0RBWV9PRl9NT05USCA3CiAjZGVmaW5lIFJUQ19NT05USCA4CiAjZGVmaW5lIFJUQ19ZRUFSIDkKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUlRDX1JFR19BIDEwCiAjZGVmaW5lIFJUQ19SRUdfQiAxMQogI2RlZmluZSBSVENfUkVHX0MgMTIKICNkZWZpbmUgUlRDX1JFR19EIDEzCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFJUQ19GUkVRX1NFTEVDVCBSVENfUkVHX0EKLQogI2RlZmluZSBSVENfVUlQIDB4ODAKICNkZWZpbmUgUlRDX0RJVl9DVEwgMHg3MAotCiAjZGVmaW5lIFJUQ19SRUZfQ0xDS180TUhaIDB4MDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFJUQ19SRUZfQ0xDS18xTUhaIDB4MTAKICNkZWZpbmUgUlRDX1JFRl9DTENLXzMyS0haIDB4MjAKLQogI2RlZmluZSBSVENfRElWX1JFU0VUMSAweDYwCiAjZGVmaW5lIFJUQ19ESVZfUkVTRVQyIDB4NzAKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUlRDX1JBVEVfU0VMRUNUIDB4MEYKLQogI2RlZmluZSBSVENfQ09OVFJPTCBSVENfUkVHX0IKLSNkZWZpbmUgUlRDX1NFVCAweDgwICAKLSNkZWZpbmUgUlRDX1BJRSAweDQwICAKLSNkZWZpbmUgUlRDX0FJRSAweDIwICAKLSNkZWZpbmUgUlRDX1VJRSAweDEwICAKLSNkZWZpbmUgUlRDX1NRV0UgMHgwOCAgCi0jZGVmaW5lIFJUQ19ETV9CSU5BUlkgMHgwNCAgCi0jZGVmaW5lIFJUQ18yNEggMHgwMiAgCi0jZGVmaW5lIFJUQ19EU1RfRU4gMHgwMSAgCi0KKyNkZWZpbmUgUlRDX1NFVCAweDgwCisjZGVmaW5lIFJUQ19QSUUgMHg0MAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgUlRDX0FJRSAweDIwCisjZGVmaW5lIFJUQ19VSUUgMHgxMAorI2RlZmluZSBSVENfU1FXRSAweDA4CisjZGVmaW5lIFJUQ19ETV9CSU5BUlkgMHgwNAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgUlRDXzI0SCAweDAyCisjZGVmaW5lIFJUQ19EU1RfRU4gMHgwMQogI2RlZmluZSBSVENfSU5UUl9GTEFHUyBSVENfUkVHX0MKLQotI2RlZmluZSBSVENfSVJRRiAweDgwICAKKyNkZWZpbmUgUlRDX0lSUUYgMHg4MAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUlRDX1BGIDB4NDAKICNkZWZpbmUgUlRDX0FGIDB4MjAKICNkZWZpbmUgUlRDX1VGIDB4MTAKLQogI2RlZmluZSBSVENfVkFMSUQgUlRDX1JFR19ECi0jZGVmaW5lIFJUQ19WUlQgMHg4MCAgCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFJUQ19WUlQgMHg4MAogI2lmbmRlZiBBUkNIX1JUQ19MT0NBVElPTgotCiAjZGVmaW5lIFJUQ19JT19FWFRFTlQgMHg4Ci0jZGVmaW5lIFJUQ19JT01BUFBFRCAxICAKLQorI2RlZmluZSBSVENfSU9NQVBQRUQgMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlbmRpZgotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9tY2EuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9tY2EuaAppbmRleCBkZmJmYzJhLi40ODg2MDNmIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbWNhLmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L21jYS5oCkBAIC03LDY4ICs3LDczIEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfTElOVVhfTUNBX0gKICNkZWZpbmUgX0xJTlVYX01DQV9ICi0KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KLQogI2RlZmluZSBNQ0FfYnVzIDAKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHR5cGVkZWYgaW50ICgqTUNBX1Byb2NGbikoY2hhciogYnVmLCBpbnQgc2xvdCwgdm9pZCogZGV2KTsKLQogZW51bSBNQ0FfQWRhcHRlclN0YXR1cyB7CiAgTUNBX0FEQVBURVJfTk9STUFMID0gMCwKICBNQ0FfQURBUFRFUl9OT05FID0gMSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTUNBX0FEQVBURVJfRElTQUJMRUQgPSAyLAogIE1DQV9BREFQVEVSX0VSUk9SID0gMwogfTsKLQogc3RydWN0IG1jYV9kZXZpY2UgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1NjQgZG1hX21hc2s7CiAgaW50IHBvc19pZDsKICBpbnQgc2xvdDsKLQogIGludCBpbmRleDsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBpbnQgZHJpdmVyX2xvYWRlZDsKLQogIHVuc2lnbmVkIGNoYXIgcG9zWzhdOwotCiAgc2hvcnQgcG9zX3JlZ2lzdGVyOwotCiAgZW51bSBNQ0FfQWRhcHRlclN0YXR1cyBzdGF0dXM7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCBkZXZpY2UgZGV2OwogIGNoYXIgbmFtZVszMl07CiB9OwogI2RlZmluZSB0b19tY2FfZGV2aWNlKG1kZXYpIGNvbnRhaW5lcl9vZihtZGV2LCBzdHJ1Y3QgbWNhX2RldmljZSwgZGV2KQotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IG1jYV9idXNfYWNjZXNzb3JfZnVuY3Rpb25zIHsKICB1bnNpZ25lZCBjaGFyICgqbWNhX3JlYWRfcG9zKShzdHJ1Y3QgbWNhX2RldmljZSAqLCBpbnQgcmVnKTsKICB2b2lkICgqbWNhX3dyaXRlX3Bvcykoc3RydWN0IG1jYV9kZXZpY2UgKiwgaW50IHJlZywKICB1bnNpZ25lZCBjaGFyIGJ5dGUpOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBpbnQgKCptY2FfdHJhbnNmb3JtX2lycSkoc3RydWN0IG1jYV9kZXZpY2UgKiwgaW50IGlycSk7CiAgaW50ICgqbWNhX3RyYW5zZm9ybV9pb3BvcnQpKHN0cnVjdCBtY2FfZGV2aWNlICosCiAgaW50IHJlZ2lvbik7CiAgdm9pZCAqICgqbWNhX3RyYW5zZm9ybV9tZW1vcnkpKHN0cnVjdCBtY2FfZGV2aWNlICosCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHZvaWQgKm1lbW9yeSk7CiB9OwotCiBzdHJ1Y3QgbWNhX2J1cyB7CiAgdTY0IGRlZmF1bHRfZG1hX21hc2s7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGludCBudW1iZXI7CiAgc3RydWN0IG1jYV9idXNfYWNjZXNzb3JfZnVuY3Rpb25zIGY7CiAgc3RydWN0IGRldmljZSBkZXY7CiAgY2hhciBuYW1lWzMyXTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwogI2RlZmluZSB0b19tY2FfYnVzKG1kZXYpIGNvbnRhaW5lcl9vZihtZGV2LCBzdHJ1Y3QgbWNhX2J1cywgZGV2KQotCiBzdHJ1Y3QgbWNhX2RyaXZlciB7CiAgY29uc3Qgc2hvcnQgKmlkX3RhYmxlOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB2b2lkICpkcml2ZXJfZGF0YTsKICBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBkcml2ZXI7CiB9OwogI2RlZmluZSB0b19tY2FfZHJpdmVyKG1kcml2ZXIpIGNvbnRhaW5lcl9vZihtZHJpdmVyLCBzdHJ1Y3QgbWNhX2RyaXZlciwgZHJpdmVyKQotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbWVkaWEuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9tZWRpYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxMzc3MWQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbWVkaWEuaApAQCAtMCwwICsxLDEyNSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX0xJTlVYX01FRElBX0gKKyNkZWZpbmUgX19MSU5VWF9NRURJQV9ICisjaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisjZGVmaW5lIE1FRElBX0FQSV9WRVJTSU9OIEtFUk5FTF9WRVJTSU9OKDAsIDEsIDApCitzdHJ1Y3QgbWVkaWFfZGV2aWNlX2luZm8geworIGNoYXIgZHJpdmVyWzE2XTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgY2hhciBtb2RlbFszMl07CisgY2hhciBzZXJpYWxbNDBdOworIGNoYXIgYnVzX2luZm9bMzJdOworIF9fdTMyIG1lZGlhX3ZlcnNpb247CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTMyIGh3X3JldmlzaW9uOworIF9fdTMyIGRyaXZlcl92ZXJzaW9uOworIF9fdTMyIHJlc2VydmVkWzMxXTsKK307CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBNRURJQV9FTlRfSURfRkxBR19ORVhUICgxIDw8IDMxKQorI2RlZmluZSBNRURJQV9FTlRfVFlQRV9TSElGVCAxNgorI2RlZmluZSBNRURJQV9FTlRfVFlQRV9NQVNLIDB4MDBmZjAwMDAKKyNkZWZpbmUgTUVESUFfRU5UX1NVQlRZUEVfTUFTSyAweDAwMDBmZmZmCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBNRURJQV9FTlRfVF9ERVZOT0RFICgxIDw8IE1FRElBX0VOVF9UWVBFX1NISUZUKQorI2RlZmluZSBNRURJQV9FTlRfVF9ERVZOT0RFX1Y0TCAoTUVESUFfRU5UX1RfREVWTk9ERSArIDEpCisjZGVmaW5lIE1FRElBX0VOVF9UX0RFVk5PREVfRkIgKE1FRElBX0VOVF9UX0RFVk5PREUgKyAyKQorI2RlZmluZSBNRURJQV9FTlRfVF9ERVZOT0RFX0FMU0EgKE1FRElBX0VOVF9UX0RFVk5PREUgKyAzKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgTUVESUFfRU5UX1RfREVWTk9ERV9EVkIgKE1FRElBX0VOVF9UX0RFVk5PREUgKyA0KQorI2RlZmluZSBNRURJQV9FTlRfVF9WNEwyX1NVQkRFViAoMiA8PCBNRURJQV9FTlRfVFlQRV9TSElGVCkKKyNkZWZpbmUgTUVESUFfRU5UX1RfVjRMMl9TVUJERVZfU0VOU09SIChNRURJQV9FTlRfVF9WNEwyX1NVQkRFViArIDEpCisjZGVmaW5lIE1FRElBX0VOVF9UX1Y0TDJfU1VCREVWX0ZMQVNIIChNRURJQV9FTlRfVF9WNEwyX1NVQkRFViArIDIpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBNRURJQV9FTlRfVF9WNEwyX1NVQkRFVl9MRU5TIChNRURJQV9FTlRfVF9WNEwyX1NVQkRFViArIDMpCisjZGVmaW5lIE1FRElBX0VOVF9GTF9ERUZBVUxUICgxIDw8IDApCitzdHJ1Y3QgbWVkaWFfZW50aXR5X2Rlc2MgeworIF9fdTMyIGlkOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBjaGFyIG5hbWVbMzJdOworIF9fdTMyIHR5cGU7CisgX191MzIgcmV2aXNpb247CisgX191MzIgZmxhZ3M7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTMyIGdyb3VwX2lkOworIF9fdTE2IHBhZHM7CisgX191MTYgbGlua3M7CisgX191MzIgcmVzZXJ2ZWRbNF07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIHVuaW9uIHsKKyBzdHJ1Y3QgeworIF9fdTMyIG1ham9yOworIF9fdTMyIG1pbm9yOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyB9IHY0bDsKKyBzdHJ1Y3QgeworIF9fdTMyIG1ham9yOworIF9fdTMyIG1pbm9yOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyB9IGZiOworIHN0cnVjdCB7CisgX191MzIgY2FyZDsKKyBfX3UzMiBkZXZpY2U7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTMyIHN1YmRldmljZTsKKyB9IGFsc2E7CisgaW50IGR2YjsKKyBfX3U4IHJhd1sxODRdOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyB9OworfTsKKyNkZWZpbmUgTUVESUFfUEFEX0ZMX1NJTksgKDEgPDwgMCkKKyNkZWZpbmUgTUVESUFfUEFEX0ZMX1NPVVJDRSAoMSA8PCAxKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK3N0cnVjdCBtZWRpYV9wYWRfZGVzYyB7CisgX191MzIgZW50aXR5OworIF9fdTE2IGluZGV4OworIF9fdTMyIGZsYWdzOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UzMiByZXNlcnZlZFsyXTsKK307CisjZGVmaW5lIE1FRElBX0xOS19GTF9FTkFCTEVEICgxIDw8IDApCisjZGVmaW5lIE1FRElBX0xOS19GTF9JTU1VVEFCTEUgKDEgPDwgMSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIE1FRElBX0xOS19GTF9EWU5BTUlDICgxIDw8IDIpCitzdHJ1Y3QgbWVkaWFfbGlua19kZXNjIHsKKyBzdHJ1Y3QgbWVkaWFfcGFkX2Rlc2Mgc291cmNlOworIHN0cnVjdCBtZWRpYV9wYWRfZGVzYyBzaW5rOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UzMiBmbGFnczsKKyBfX3UzMiByZXNlcnZlZFsyXTsKK307CitzdHJ1Y3QgbWVkaWFfbGlua3NfZW51bSB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTMyIGVudGl0eTsKKyBzdHJ1Y3QgbWVkaWFfcGFkX2Rlc2MgX191c2VyICpwYWRzOworIHN0cnVjdCBtZWRpYV9saW5rX2Rlc2MgX191c2VyICpsaW5rczsKKyBfX3UzMiByZXNlcnZlZFs0XTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCit9OworI2RlZmluZSBNRURJQV9JT0NfREVWSUNFX0lORk8gX0lPV1IoJ3wnLCAweDAwLCBzdHJ1Y3QgbWVkaWFfZGV2aWNlX2luZm8pCisjZGVmaW5lIE1FRElBX0lPQ19FTlVNX0VOVElUSUVTIF9JT1dSKCd8JywgMHgwMSwgc3RydWN0IG1lZGlhX2VudGl0eV9kZXNjKQorI2RlZmluZSBNRURJQV9JT0NfRU5VTV9MSU5LUyBfSU9XUignfCcsIDB4MDIsIHN0cnVjdCBtZWRpYV9saW5rc19lbnVtKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgTUVESUFfSU9DX1NFVFVQX0xJTksgX0lPV1IoJ3wnLCAweDAzLCBzdHJ1Y3QgbWVkaWFfbGlua19kZXNjKQorI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbWVtcG9saWN5LmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbWVtcG9saWN5LmgKaW5kZXggNmI3YjJkNC4uMGRmZDZkNCAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L21lbXBvbGljeS5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9tZW1wb2xpY3kuaApAQCAtNywyNiArNywzMCBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX0xJTlVYX01FTVBPTElDWV9ICiAjZGVmaW5lIF9MSU5VWF9NRU1QT0xJQ1lfSCAxCi0KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgotCiAjZGVmaW5lIE1QT0xfREVGQVVMVCAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNUE9MX1BSRUZFUlJFRCAxCiAjZGVmaW5lIE1QT0xfQklORCAyCiAjZGVmaW5lIE1QT0xfSU5URVJMRUFWRSAzCi0KICNkZWZpbmUgTVBPTF9NQVggTVBPTF9JTlRFUkxFQVZFCi0KLSNkZWZpbmUgTVBPTF9GX05PREUgKDE8PDApICAKLSNkZWZpbmUgTVBPTF9GX0FERFIgKDE8PDEpICAKLQotI2RlZmluZSBNUE9MX01GX1NUUklDVCAoMTw8MCkgIAotI2RlZmluZSBNUE9MX01GX01PVkUgKDE8PDEpICAKLSNkZWZpbmUgTVBPTF9NRl9NT1ZFX0FMTCAoMTw8MikgIAotI2RlZmluZSBNUE9MX01GX0lOVEVSTkFMICgxPDwzKSAgCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIE1QT0xfRl9OT0RFICgxPDwwKQorI2RlZmluZSBNUE9MX0ZfQUREUiAoMTw8MSkKKyNkZWZpbmUgTVBPTF9NRl9TVFJJQ1QgKDE8PDApCisjZGVmaW5lIE1QT0xfTUZfTU9WRSAoMTw8MSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIE1QT0xfTUZfTU9WRV9BTEwgKDE8PDIpCisjZGVmaW5lIE1QT0xfTUZfSU5URVJOQUwgKDE8PDMpCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9tZW1wb29sLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbWVtcG9vbC5oCmluZGV4IGZhMjQzMmIuLjUwZGJhZDIgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9tZW1wb29sLmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L21lbXBvb2wuaApAQCAtNywyOCArNywzMyBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX0xJTlVYX01FTVBPT0xfSAogI2RlZmluZSBfTElOVVhfTUVNUE9PTF9ICi0KICNpbmNsdWRlIDxsaW51eC93YWl0Lmg+Ci0KIHN0cnVjdCBrbWVtX2NhY2hlOwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogdHlwZWRlZiB2b2lkICogKG1lbXBvb2xfYWxsb2NfdCkoZ2ZwX3QgZ2ZwX21hc2ssIHZvaWQgKnBvb2xfZGF0YSk7CiB0eXBlZGVmIHZvaWQgKG1lbXBvb2xfZnJlZV90KSh2b2lkICplbGVtZW50LCB2b2lkICpwb29sX2RhdGEpOwotCiB0eXBlZGVmIHN0cnVjdCBtZW1wb29sX3MgewogIHNwaW5sb2NrX3QgbG9jazsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgaW50IG1pbl9ucjsKICBpbnQgY3Vycl9ucjsKICB2b2lkICoqZWxlbWVudHM7Ci0KICB2b2lkICpwb29sX2RhdGE7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIG1lbXBvb2xfYWxsb2NfdCAqYWxsb2M7CiAgbWVtcG9vbF9mcmVlX3QgKmZyZWU7CiAgd2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdDsKIH0gbWVtcG9vbF90OwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbWZkL3RpbXBhbmktYXVkaW8uaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9tZmQvdGltcGFuaS1hdWRpby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyMDZiZTIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbWZkL3RpbXBhbmktYXVkaW8uaApAQCAtMCwwICsxLDQ1OTkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19MSU5VWF9NRkRfVElNUEFOSV9BVURJT19ICisjZGVmaW5lIF9fTElOVVhfTUZEX1RJTVBBTklfQVVESU9fSAorI2RlZmluZSBUSU1QQU5JX0FfTVJFRiAoMHgzKQorI2RlZmluZSBUSU1QQU5JX01SRUZfUldDICJSVyIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfTVJFRl9QT1IgMHhlMgorI2RlZmluZSBUSU1QQU5JX01SRUZfUyAwCisjZGVmaW5lIFRJTVBBTklfTVJFRl9NIDB4RkYKKyNkZWZpbmUgVElNUEFOSV9NUkVGX01SRUZfQkdfRU5fUyA3CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX01SRUZfTVJFRl9CR19FTl9NIDB4ODAKKyNkZWZpbmUgVElNUEFOSV9NUkVGX01SRUZfQkdfRU5fRU5BQkxFIDB4MAorI2RlZmluZSBUSU1QQU5JX01SRUZfTVJFRl9CR19FTl9ESVNBQkxFIDB4MQorI2RlZmluZSBUSU1QQU5JX01SRUZfTVJFRl9CR19SRUZfQ1VSX0VOX1MgNgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9NUkVGX01SRUZfQkdfUkVGX0NVUl9FTl9NIDB4NDAKKyNkZWZpbmUgVElNUEFOSV9NUkVGX01SRUZfQkdfUkVGX0NVUl9FTl9FTkFCTEVfTk9STUFMX09QIDB4MAorI2RlZmluZSBUSU1QQU5JX01SRUZfTVJFRl9CR19SRUZfQ1VSX0VOX0RJU0FCTEUgMHgxCisjZGVmaW5lIFRJTVBBTklfTVJFRl9NUkVGXzIwMEtfTU9ERV9FTl9TIDUKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfTVJFRl9NUkVGXzIwMEtfTU9ERV9FTl9NIDB4MjAKKyNkZWZpbmUgVElNUEFOSV9NUkVGX01SRUZfMjAwS19NT0RFX0VOX0VOQUJMRSAweDAKKyNkZWZpbmUgVElNUEFOSV9NUkVGX01SRUZfMjAwS19NT0RFX0VOX0RJU0FCTEUgMHgxCisjZGVmaW5lIFRJTVBBTklfTVJFRl9NUkVGX1BSRV9DSEFSR0VfRU5fUyA0CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX01SRUZfTVJFRl9QUkVfQ0hBUkdFX0VOX00gMHgxMAorI2RlZmluZSBUSU1QQU5JX01SRUZfTVJFRl9QUkVfQ0hBUkdFX0VOX0RJU0FCTEUgMHgwCisjZGVmaW5lIFRJTVBBTklfTVJFRl9NUkVGX1BSRV9DSEFSR0VfRU5fRU5BQkxFIDB4MQorI2RlZmluZSBUSU1QQU5JX01SRUZfTVJFRl8xMDBVQV9DVVJfQ09OTl9TIDMKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfTVJFRl9NUkVGXzEwMFVBX0NVUl9DT05OX00gMHg4CisjZGVmaW5lIFRJTVBBTklfTVJFRl9NUkVGXzEwMFVBX0NVUl9DT05OX09OX0NISVBfUkVTSVNUT1JfTk9STUFMX09QIDB4MAorI2RlZmluZSBUSU1QQU5JX01SRUZfTVJFRl8xMDBVQV9DVVJfQ09OTl9BVEVTVCAweDEKKyNkZWZpbmUgVElNUEFOSV9NUkVGX01SRUZfUFRBVF9DVVJSRU5UX1MgMgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9NUkVGX01SRUZfUFRBVF9DVVJSRU5UX00gMHg0CisjZGVmaW5lIFRJTVBBTklfTVJFRl9NUkVGX1BUQVRfQ1VSUkVOVF9WXzEwVUFfUFRBVF9OT1JNQUxfT1AgMHgwCisjZGVmaW5lIFRJTVBBTklfTVJFRl9NUkVGX1BUQVRfQ1VSUkVOVF9WXzVVQV9QVEFUX0JJQVNfQ1VSUkVOVCAweDEKKyNkZWZpbmUgVElNUEFOSV9NUkVGX01SRUZfNDAwS19NT0RFX0VOX1MgMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9NUkVGX01SRUZfNDAwS19NT0RFX0VOX00gMHgyCisjZGVmaW5lIFRJTVBBTklfTVJFRl9NUkVGXzQwMEtfTU9ERV9FTl9FTkFCTEUgMHgwCisjZGVmaW5lIFRJTVBBTklfTVJFRl9NUkVGXzQwMEtfTU9ERV9FTl9ESVNBQkxFIDB4MQorI2RlZmluZSBUSU1QQU5JX01SRUZfUkVTRVJWRURfUyAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX01SRUZfUkVTRVJWRURfTSAweDEKKyNkZWZpbmUgVElNUEFOSV9BX0NEQUNfSURBQ19SRUZfQ1VSICgweDQpCisjZGVmaW5lIFRJTVBBTklfQ0RBQ19JREFDX1JFRl9DVVJfUldDICJSVyIKKyNkZWZpbmUgVElNUEFOSV9DREFDX0lEQUNfUkVGX0NVUl9QT1IgMHg4YworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9DREFDX0lEQUNfUkVGX0NVUl9TIDAKKyNkZWZpbmUgVElNUEFOSV9DREFDX0lEQUNfUkVGX0NVUl9NIDB4RkYKKyNkZWZpbmUgVElNUEFOSV9DREFDX0lEQUNfUkVGX0NVUl9DREFDX1JFRl9CVUZGX0NVUl9TIDUKKyNkZWZpbmUgVElNUEFOSV9DREFDX0lEQUNfUkVGX0NVUl9DREFDX1JFRl9CVUZGX0NVUl9NIDB4RTAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQ0RBQ19JREFDX1JFRl9DVVJfQ0RBQ19SRUZfQlVGRl9DVVJfVl80VUEgMHgwCisjZGVmaW5lIFRJTVBBTklfQ0RBQ19JREFDX1JFRl9DVVJfQ0RBQ19SRUZfQlVGRl9DVVJfVl82VUEgMHgxCisjZGVmaW5lIFRJTVBBTklfQ0RBQ19JREFDX1JFRl9DVVJfQ0RBQ19SRUZfQlVGRl9DVVJfVl84VUEgMHgyCisjZGVmaW5lIFRJTVBBTklfQ0RBQ19JREFDX1JFRl9DVVJfQ0RBQ19SRUZfQlVGRl9DVVJfVl85VUEgMHgzCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX0NEQUNfSURBQ19SRUZfQ1VSX0NEQUNfUkVGX0JVRkZfQ1VSX1ZfMTBVQV9OT1JNQUxfT1AgMHg0CisjZGVmaW5lIFRJTVBBTklfQ0RBQ19JREFDX1JFRl9DVVJfQ0RBQ19SRUZfQlVGRl9DVVJfVl8xMVVBIDB4NQorI2RlZmluZSBUSU1QQU5JX0NEQUNfSURBQ19SRUZfQ1VSX0NEQUNfUkVGX0JVRkZfQ1VSX1ZfMTNVQSAweDYKKyNkZWZpbmUgVElNUEFOSV9DREFDX0lEQUNfUkVGX0NVUl9DREFDX1JFRl9CVUZGX0NVUl9WXzE1VUEgMHg3CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX0NEQUNfSURBQ19SRUZfQ1VSX0NEQUNfQklBU19DVVJfUyAyCisjZGVmaW5lIFRJTVBBTklfQ0RBQ19JREFDX1JFRl9DVVJfQ0RBQ19CSUFTX0NVUl9NIDB4MUMKKyNkZWZpbmUgVElNUEFOSV9DREFDX0lEQUNfUkVGX0NVUl9DREFDX0JJQVNfQ1VSX1ZfOF81VUEgMHgwCisjZGVmaW5lIFRJTVBBTklfQ0RBQ19JREFDX1JFRl9DVVJfQ0RBQ19CSUFTX0NVUl9WXzlfMFVBIDB4MQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9DREFDX0lEQUNfUkVGX0NVUl9DREFDX0JJQVNfQ1VSX1ZfOV81VUEgMHgyCisjZGVmaW5lIFRJTVBBTklfQ0RBQ19JREFDX1JFRl9DVVJfQ0RBQ19CSUFTX0NVUl9WXzEwXzBVQV9OT1JNQUxfT1AgMHgzCisjZGVmaW5lIFRJTVBBTklfQ0RBQ19JREFDX1JFRl9DVVJfQ0RBQ19CSUFTX0NVUl9WXzEwXzVVQSAweDQKKyNkZWZpbmUgVElNUEFOSV9DREFDX0lEQUNfUkVGX0NVUl9DREFDX0JJQVNfQ1VSX1ZfMTFfMFVBIDB4NQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9DREFDX0lEQUNfUkVGX0NVUl9DREFDX0JJQVNfQ1VSX1ZfMTFfNVVBIDB4NgorI2RlZmluZSBUSU1QQU5JX0NEQUNfSURBQ19SRUZfQ1VSX0NEQUNfQklBU19DVVJfVl8xMl8wVUEgMHg3CisjZGVmaW5lIFRJTVBBTklfQ0RBQ19JREFDX1JFRl9DVVJfSURBQ19SRUZfQ1VSX1MgMAorI2RlZmluZSBUSU1QQU5JX0NEQUNfSURBQ19SRUZfQ1VSX0lEQUNfUkVGX0NVUl9NIDB4MworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9DREFDX0lEQUNfUkVGX0NVUl9JREFDX1JFRl9DVVJfVl8yVUEgMHgwCisjZGVmaW5lIFRJTVBBTklfQ0RBQ19JREFDX1JFRl9DVVJfSURBQ19SRUZfQ1VSX1ZfM1VBIDB4MQorI2RlZmluZSBUSU1QQU5JX0NEQUNfSURBQ19SRUZfQ1VSX0lEQUNfUkVGX0NVUl9WXzVVQV9OT1JNQUxfT1AgMHgyCisjZGVmaW5lIFRJTVBBTklfQ0RBQ19JREFDX1JFRl9DVVJfSURBQ19SRUZfQ1VSX1ZfOFVBIDB4MworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9BX1RYQURDMTJfUkVGX0NVUlIgKDB4NSkKKyNkZWZpbmUgVElNUEFOSV9UWEFEQzEyX1JFRl9DVVJSX1JXQyAiUlciCisjZGVmaW5lIFRJTVBBTklfVFhBREMxMl9SRUZfQ1VSUl9QT1IgMHhhMAorI2RlZmluZSBUSU1QQU5JX1RYQURDMTJfUkVGX0NVUlJfUyAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX1RYQURDMTJfUkVGX0NVUlJfTSAweEZGCisjZGVmaW5lIFRJTVBBTklfVFhBREMxMl9SRUZfQ1VSUl9UWEFEQzFfUkVGX0JVRkZfQ1VSX1MgNgorI2RlZmluZSBUSU1QQU5JX1RYQURDMTJfUkVGX0NVUlJfVFhBREMxX1JFRl9CVUZGX0NVUl9NIDB4QzAKKyNkZWZpbmUgVElNUEFOSV9UWEFEQzEyX1JFRl9DVVJSX1RYQURDMV9SRUZfQlVGRl9DVVJfVl81MFVBIDB4MAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9UWEFEQzEyX1JFRl9DVVJSX1RYQURDMV9SRUZfQlVGRl9DVVJfVl80NVVBIDB4MQorI2RlZmluZSBUSU1QQU5JX1RYQURDMTJfUkVGX0NVUlJfVFhBREMxX1JFRl9CVUZGX0NVUl9WXzQwVUFfTk9STUFMX09QIDB4MgorI2RlZmluZSBUSU1QQU5JX1RYQURDMTJfUkVGX0NVUlJfVFhBREMxX1JFRl9CVUZGX0NVUl9WXzM1VUEgMHgzCisjZGVmaW5lIFRJTVBBTklfVFhBREMxMl9SRUZfQ1VSUl9UWEFEQzJfUkVGX0JVRkZfQ1VSX1MgNAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9UWEFEQzEyX1JFRl9DVVJSX1RYQURDMl9SRUZfQlVGRl9DVVJfTSAweDMwCisjZGVmaW5lIFRJTVBBTklfVFhBREMxMl9SRUZfQ1VSUl9UWEFEQzJfUkVGX0JVRkZfQ1VSX1ZfNTBVQSAweDAKKyNkZWZpbmUgVElNUEFOSV9UWEFEQzEyX1JFRl9DVVJSX1RYQURDMl9SRUZfQlVGRl9DVVJfVl80NVVBIDB4MQorI2RlZmluZSBUSU1QQU5JX1RYQURDMTJfUkVGX0NVUlJfVFhBREMyX1JFRl9CVUZGX0NVUl9WXzQwVUFfTk9STUFMX09QIDB4MgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9UWEFEQzEyX1JFRl9DVVJSX1RYQURDMl9SRUZfQlVGRl9DVVJfVl8zNVVBIDB4MworI2RlZmluZSBUSU1QQU5JX1RYQURDMTJfUkVGX0NVUlJfUkVTRVJWRURfUyAwCisjZGVmaW5lIFRJTVBBTklfVFhBREMxMl9SRUZfQ1VSUl9SRVNFUlZFRF9NIDB4RgorI2RlZmluZSBUSU1QQU5JX0FfVFhBREMzX0VOICgweDkpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX1RYQURDM19FTl9SV0MgIlJXIgorI2RlZmluZSBUSU1QQU5JX1RYQURDM19FTl9QT1IgMAorI2RlZmluZSBUSU1QQU5JX1RYQURDM19FTl9TIDAKKyNkZWZpbmUgVElNUEFOSV9UWEFEQzNfRU5fTSAweEZGCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX1RYQURDM19FTl9UWEFEQzNfUkVGX0VOX1MgNworI2RlZmluZSBUSU1QQU5JX1RYQURDM19FTl9UWEFEQzNfUkVGX0VOX00gMHg4MAorI2RlZmluZSBUSU1QQU5JX1RYQURDM19FTl9UWEFEQzNfUkVGX0VOX0RJU0FCTEUgMHgwCisjZGVmaW5lIFRJTVBBTklfVFhBREMzX0VOX1RYQURDM19SRUZfRU5fRU5BQkxFIDB4MQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9UWEFEQzNfRU5fVFhBREMzX0RBQ19SRUZfQ1VSX0NPTVBFTlNBVElPTl9FTl9TIDYKKyNkZWZpbmUgVElNUEFOSV9UWEFEQzNfRU5fVFhBREMzX0RBQ19SRUZfQ1VSX0NPTVBFTlNBVElPTl9FTl9NIDB4NDAKKyNkZWZpbmUgVElNUEFOSV9UWEFEQzNfRU5fVFhBREMzX0RBQ19SRUZfQ1VSX0NPTVBFTlNBVElPTl9FTl9ESVNBQkxFIDB4MAorI2RlZmluZSBUSU1QQU5JX1RYQURDM19FTl9UWEFEQzNfREFDX1JFRl9DVVJfQ09NUEVOU0FUSU9OX0VOX0VOQUJMRSAweDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfVFhBREMzX0VOX1RYQURDM19PVEExX0VOX1MgNQorI2RlZmluZSBUSU1QQU5JX1RYQURDM19FTl9UWEFEQzNfT1RBMV9FTl9NIDB4MjAKKyNkZWZpbmUgVElNUEFOSV9UWEFEQzNfRU5fVFhBREMzX09UQTFfRU5fRElTQUJMRSAweDAKKyNkZWZpbmUgVElNUEFOSV9UWEFEQzNfRU5fVFhBREMzX09UQTFfRU5fRU5BQkxFIDB4MQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9UWEFEQzNfRU5fVFhBREMzX09UQTJfRU5fUyA0CisjZGVmaW5lIFRJTVBBTklfVFhBREMzX0VOX1RYQURDM19PVEEyX0VOX00gMHgxMAorI2RlZmluZSBUSU1QQU5JX1RYQURDM19FTl9UWEFEQzNfT1RBMl9FTl9ESVNBQkxFIDB4MAorI2RlZmluZSBUSU1QQU5JX1RYQURDM19FTl9UWEFEQzNfT1RBMl9FTl9FTkFCTEUgMHgxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX1RYQURDM19FTl9UWEFEQzNfQ09NUF9FTl9TIDMKKyNkZWZpbmUgVElNUEFOSV9UWEFEQzNfRU5fVFhBREMzX0NPTVBfRU5fTSAweDgKKyNkZWZpbmUgVElNUEFOSV9UWEFEQzNfRU5fVFhBREMzX0NPTVBfRU5fRElTQUJMRSAweDAKKyNkZWZpbmUgVElNUEFOSV9UWEFEQzNfRU5fVFhBREMzX0NPTVBfRU5fRU5BQkxFIDB4MQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9UWEFEQzNfRU5fVFhBREMzX0RFTV9FTl9TIDIKKyNkZWZpbmUgVElNUEFOSV9UWEFEQzNfRU5fVFhBREMzX0RFTV9FTl9NIDB4NAorI2RlZmluZSBUSU1QQU5JX1RYQURDM19FTl9UWEFEQzNfREVNX0VOX0RJU0FCTEUgMHgwCisjZGVmaW5lIFRJTVBBTklfVFhBREMzX0VOX1RYQURDM19ERU1fRU5fRU5BQkxFIDB4MQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9UWEFEQzNfRU5fVFhBREMzX0RFTV9FUlJPUl9ERVRfRU5fUyAxCisjZGVmaW5lIFRJTVBBTklfVFhBREMzX0VOX1RYQURDM19ERU1fRVJST1JfREVUX0VOX00gMHgyCisjZGVmaW5lIFRJTVBBTklfVFhBREMzX0VOX1RYQURDM19ERU1fRVJST1JfREVUX0VOX0RJU0FCTEUgMHgwCisjZGVmaW5lIFRJTVBBTklfVFhBREMzX0VOX1RYQURDM19ERU1fRVJST1JfREVUX0VOX0VOQUJMRSAweDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfVFhBREMzX0VOX1JFU0VSVkVEX1MgMAorI2RlZmluZSBUSU1QQU5JX1RYQURDM19FTl9SRVNFUlZFRF9NIDB4MQorI2RlZmluZSBUSU1QQU5JX0FfVFhBREM0X0VOICgweEEpCisjZGVmaW5lIFRJTVBBTklfVFhBREM0X0VOX1JXQyAiUlciCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX1RYQURDNF9FTl9QT1IgMAorI2RlZmluZSBUSU1QQU5JX1RYQURDNF9FTl9TIDAKKyNkZWZpbmUgVElNUEFOSV9UWEFEQzRfRU5fTSAweEZGCisjZGVmaW5lIFRJTVBBTklfVFhBREM0X0VOX1RYQURDNF9SRUZfRU5fUyA3CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX1RYQURDNF9FTl9UWEFEQzRfUkVGX0VOX00gMHg4MAorI2RlZmluZSBUSU1QQU5JX1RYQURDNF9FTl9UWEFEQzRfUkVGX0VOX0RJU0FCTEUgMHgwCisjZGVmaW5lIFRJTVBBTklfVFhBREM0X0VOX1RYQURDNF9SRUZfRU5fRU5BQkxFIDB4MQorI2RlZmluZSBUSU1QQU5JX1RYQURDNF9FTl9UWEFEQzRfREFDX1JFRl9DVVJfQ09NUEVOU0FUSU9OX0VOX1MgNgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9UWEFEQzRfRU5fVFhBREM0X0RBQ19SRUZfQ1VSX0NPTVBFTlNBVElPTl9FTl9NIDB4NDAKKyNkZWZpbmUgVElNUEFOSV9UWEFEQzRfRU5fVFhBREM0X0RBQ19SRUZfQ1VSX0NPTVBFTlNBVElPTl9FTl9ESVNBQkxFIDB4MAorI2RlZmluZSBUSU1QQU5JX1RYQURDNF9FTl9UWEFEQzRfREFDX1JFRl9DVVJfQ09NUEVOU0FUSU9OX0VOX0VOQUJMRSAweDEKKyNkZWZpbmUgVElNUEFOSV9UWEFEQzRfRU5fVFhBREM0X09UQTFfRU5fUyA1CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX1RYQURDNF9FTl9UWEFEQzRfT1RBMV9FTl9NIDB4MjAKKyNkZWZpbmUgVElNUEFOSV9UWEFEQzRfRU5fVFhBREM0X09UQTFfRU5fRElTQUJMRSAweDAKKyNkZWZpbmUgVElNUEFOSV9UWEFEQzRfRU5fVFhBREM0X09UQTFfRU5fRU5BQkxFIDB4MQorI2RlZmluZSBUSU1QQU5JX1RYQURDNF9FTl9UWEFEQzRfT1RBMl9FTl9TIDQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfVFhBREM0X0VOX1RYQURDNF9PVEEyX0VOX00gMHgxMAorI2RlZmluZSBUSU1QQU5JX1RYQURDNF9FTl9UWEFEQzRfT1RBMl9FTl9ESVNBQkxFIDB4MAorI2RlZmluZSBUSU1QQU5JX1RYQURDNF9FTl9UWEFEQzRfT1RBMl9FTl9FTkFCTEUgMHgxCisjZGVmaW5lIFRJTVBBTklfVFhBREM0X0VOX1RYQURDNF9DT01QX0VOX1MgMworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9UWEFEQzRfRU5fVFhBREM0X0NPTVBfRU5fTSAweDgKKyNkZWZpbmUgVElNUEFOSV9UWEFEQzRfRU5fVFhBREM0X0NPTVBfRU5fRElTQUJMRSAweDAKKyNkZWZpbmUgVElNUEFOSV9UWEFEQzRfRU5fVFhBREM0X0NPTVBfRU5fRU5BQkxFIDB4MQorI2RlZmluZSBUSU1QQU5JX1RYQURDNF9FTl9UWEFEQzRfREVNX0VOX1MgMgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9UWEFEQzRfRU5fVFhBREM0X0RFTV9FTl9NIDB4NAorI2RlZmluZSBUSU1QQU5JX1RYQURDNF9FTl9UWEFEQzRfREVNX0VOX0RJU0FCTEUgMHgwCisjZGVmaW5lIFRJTVBBTklfVFhBREM0X0VOX1RYQURDNF9ERU1fRU5fRU5BQkxFIDB4MQorI2RlZmluZSBUSU1QQU5JX1RYQURDNF9FTl9UWEFEQzRfREVNX0VSUk9SX0RFVF9FTl9TIDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfVFhBREM0X0VOX1RYQURDNF9ERU1fRVJST1JfREVUX0VOX00gMHgyCisjZGVmaW5lIFRJTVBBTklfVFhBREM0X0VOX1RYQURDNF9ERU1fRVJST1JfREVUX0VOX0RJU0FCTEUgMHgwCisjZGVmaW5lIFRJTVBBTklfVFhBREM0X0VOX1RYQURDNF9ERU1fRVJST1JfREVUX0VOX0VOQUJMRSAweDEKKyNkZWZpbmUgVElNUEFOSV9UWEFEQzRfRU5fUkVTRVJWRURfUyAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX1RYQURDNF9FTl9SRVNFUlZFRF9NIDB4MQorI2RlZmluZSBUSU1QQU5JX0FfQ09ERUNfVFhBRENfU1RBVFVTX1JFR0lTVEVSXzEgKDB4QikKKyNkZWZpbmUgVElNUEFOSV9DT0RFQ19UWEFEQ19TVEFUVVNfUkVHSVNURVJfMV9SV0MgIlIiCisjZGVmaW5lIFRJTVBBTklfQ09ERUNfVFhBRENfU1RBVFVTX1JFR0lTVEVSXzFfUE9SIDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQ09ERUNfVFhBRENfU1RBVFVTX1JFR0lTVEVSXzFfUyAwCisjZGVmaW5lIFRJTVBBTklfQ09ERUNfVFhBRENfU1RBVFVTX1JFR0lTVEVSXzFfTSAweEZGCisjZGVmaW5lIFRJTVBBTklfQ09ERUNfVFhBRENfU1RBVFVTX1JFR0lTVEVSXzFfVFhBREMxX0RFTV9FUlJPUl9TIDcKKyNkZWZpbmUgVElNUEFOSV9DT0RFQ19UWEFEQ19TVEFUVVNfUkVHSVNURVJfMV9UWEFEQzFfREVNX0VSUk9SX00gMHg4MAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9DT0RFQ19UWEFEQ19TVEFUVVNfUkVHSVNURVJfMV9UWEFEQzJfREVNX0VSUk9SX1MgNgorI2RlZmluZSBUSU1QQU5JX0NPREVDX1RYQURDX1NUQVRVU19SRUdJU1RFUl8xX1RYQURDMl9ERU1fRVJST1JfTSAweDQwCisjZGVmaW5lIFRJTVBBTklfQ09ERUNfVFhBRENfU1RBVFVTX1JFR0lTVEVSXzFfVFhBREMzX0RFTV9FUlJPUl9TIDUKKyNkZWZpbmUgVElNUEFOSV9DT0RFQ19UWEFEQ19TVEFUVVNfUkVHSVNURVJfMV9UWEFEQzNfREVNX0VSUk9SX00gMHgyMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9DT0RFQ19UWEFEQ19TVEFUVVNfUkVHSVNURVJfMV9UWEFEQzRfREVNX0VSUk9SX1MgNAorI2RlZmluZSBUSU1QQU5JX0NPREVDX1RYQURDX1NUQVRVU19SRUdJU1RFUl8xX1RYQURDNF9ERU1fRVJST1JfTSAweDEwCisjZGVmaW5lIFRJTVBBTklfQ09ERUNfVFhBRENfU1RBVFVTX1JFR0lTVEVSXzFfUkVTRVJWRURfUyAwCisjZGVmaW5lIFRJTVBBTklfQ09ERUNfVFhBRENfU1RBVFVTX1JFR0lTVEVSXzFfUkVTRVJWRURfTSAweEYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQV9UWEZFMSAoMHhEKQorI2RlZmluZSBUSU1QQU5JX1RYRkUxX1JXQyAiUlciCisjZGVmaW5lIFRJTVBBTklfVFhGRTFfUE9SIDAKKyNkZWZpbmUgVElNUEFOSV9UWEZFMV9TIDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfVFhGRTFfTSAweEZGCisjZGVmaW5lIFRJTVBBTklfVFhGRTFfVFhGRTFfRU5fUyA3CisjZGVmaW5lIFRJTVBBTklfVFhGRTFfVFhGRTFfRU5fTSAweDgwCisjZGVmaW5lIFRJTVBBTklfVFhGRTFfVFhGRTFfRU5fRElTQUJMRSAweDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfVFhGRTFfVFhGRTFfRU5fRU5BQkxFIDB4MQorI2RlZmluZSBUSU1QQU5JX1RYRkUxX1RYRkUxX0dBSU5fUyA1CisjZGVmaW5lIFRJTVBBTklfVFhGRTFfVFhGRTFfR0FJTl9NIDB4NjAKKyNkZWZpbmUgVElNUEFOSV9UWEZFMV9UWEZFMV9HQUlOX1ZfMERCIDB4MAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9UWEZFMV9UWEZFMV9HQUlOX1ZfNF81REIgMHgxCisjZGVmaW5lIFRJTVBBTklfVFhGRTFfVFhGRTFfR0FJTl9WXzI0REJfMSAweDIKKyNkZWZpbmUgVElNUEFOSV9UWEZFMV9UWEZFMV9HQUlOX1ZfMjREQl8yIDB4MworI2RlZmluZSBUSU1QQU5JX1RYRkUxX1RYRkUxX0lOX01JQzFfQ09OTl9TIDQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfVFhGRTFfVFhGRTFfSU5fTUlDMV9DT05OX00gMHgxMAorI2RlZmluZSBUSU1QQU5JX1RYRkUxX1RYRkUxX0lOX01JQzFfQ09OTl9OT19DT05ORUNUIDB4MAorI2RlZmluZSBUSU1QQU5JX1RYRkUxX1RYRkUxX0lOX01JQzFfQ09OTl9DT05ORUNUIDB4MQorI2RlZmluZSBUSU1QQU5JX1RYRkUxX1RYRkUxX0lOX01JQzJfQ09OTl9TIDMKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfVFhGRTFfVFhGRTFfSU5fTUlDMl9DT05OX00gMHg4CisjZGVmaW5lIFRJTVBBTklfVFhGRTFfVFhGRTFfSU5fTUlDMl9DT05OX05PX0NPTk5FQ1QgMHgwCisjZGVmaW5lIFRJTVBBTklfVFhGRTFfVFhGRTFfSU5fTUlDMl9DT05OX0NPTk5FQ1QgMHgxCisjZGVmaW5lIFRJTVBBTklfVFhGRTFfVFhGRTFfSU5fTElORV9JX0xfQ09OTl9TIDIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfVFhGRTFfVFhGRTFfSU5fTElORV9JX0xfQ09OTl9NIDB4NAorI2RlZmluZSBUSU1QQU5JX1RYRkUxX1RYRkUxX0lOX0xJTkVfSV9MX0NPTk5fTk9fQ09OTkVDVCAweDAKKyNkZWZpbmUgVElNUEFOSV9UWEZFMV9UWEZFMV9JTl9MSU5FX0lfTF9DT05OX0NPTk5FQ1QgMHgxCisjZGVmaW5lIFRJTVBBTklfVFhGRTFfVFhGRTFfSU5fTElORV9JX1JfQ09OTl9TIDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfVFhGRTFfVFhGRTFfSU5fTElORV9JX1JfQ09OTl9NIDB4MgorI2RlZmluZSBUSU1QQU5JX1RYRkUxX1RYRkUxX0lOX0xJTkVfSV9SX0NPTk5fTk9fQ09OTkVDVCAweDAKKyNkZWZpbmUgVElNUEFOSV9UWEZFMV9UWEZFMV9JTl9MSU5FX0lfUl9DT05OX0NPTk5FQ1QgMHgxCisjZGVmaW5lIFRJTVBBTklfVFhGRTFfVFhGRTFfSU5fQVVYSV9DT05OX1MgMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9UWEZFMV9UWEZFMV9JTl9BVVhJX0NPTk5fTSAweDEKKyNkZWZpbmUgVElNUEFOSV9UWEZFMV9UWEZFMV9JTl9BVVhJX0NPTk5fTk9fQ09OTkVDVCAweDAKKyNkZWZpbmUgVElNUEFOSV9UWEZFMV9UWEZFMV9JTl9BVVhJX0NPTk5fQ09OTkVDVCAweDEKKyNkZWZpbmUgVElNUEFOSV9BX1RYRkUyICgweEUpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX1RYRkUyX1JXQyAiUlciCisjZGVmaW5lIFRJTVBBTklfVFhGRTJfUE9SIDAKKyNkZWZpbmUgVElNUEFOSV9UWEZFMl9TIDAKKyNkZWZpbmUgVElNUEFOSV9UWEZFMl9NIDB4RkYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfVFhGRTJfVFhGRTJfRU5fUyA3CisjZGVmaW5lIFRJTVBBTklfVFhGRTJfVFhGRTJfRU5fTSAweDgwCisjZGVmaW5lIFRJTVBBTklfVFhGRTJfVFhGRTJfRU5fRElTQUJMRSAweDAKKyNkZWZpbmUgVElNUEFOSV9UWEZFMl9UWEZFMl9FTl9FTkFCTEUgMHgxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX1RYRkUyX1RYRkUyX0dBSU5fUyA1CisjZGVmaW5lIFRJTVBBTklfVFhGRTJfVFhGRTJfR0FJTl9NIDB4NjAKKyNkZWZpbmUgVElNUEFOSV9UWEZFMl9UWEZFMl9HQUlOX1ZfMERCIDB4MAorI2RlZmluZSBUSU1QQU5JX1RYRkUyX1RYRkUyX0dBSU5fVl80XzVEQiAweDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfVFhGRTJfVFhGRTJfR0FJTl9WXzI0REJfMSAweDIKKyNkZWZpbmUgVElNUEFOSV9UWEZFMl9UWEZFMl9HQUlOX1ZfMjREQl8yIDB4MworI2RlZmluZSBUSU1QQU5JX1RYRkUyX1RYRkUyX0lOX01JQzFfQ09OTl9TIDQKKyNkZWZpbmUgVElNUEFOSV9UWEZFMl9UWEZFMl9JTl9NSUMxX0NPTk5fTSAweDEwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX1RYRkUyX1RYRkUyX0lOX01JQzFfQ09OTl9OT19DT05ORUNUIDB4MAorI2RlZmluZSBUSU1QQU5JX1RYRkUyX1RYRkUyX0lOX01JQzFfQ09OTl9DT05ORUNUIDB4MQorI2RlZmluZSBUSU1QQU5JX1RYRkUyX1RYRkUyX0lOX01JQzJfQ09OTl9TIDMKKyNkZWZpbmUgVElNUEFOSV9UWEZFMl9UWEZFMl9JTl9NSUMyX0NPTk5fTSAweDgKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfVFhGRTJfVFhGRTJfSU5fTUlDMl9DT05OX05PX0NPTk5FQ1QgMHgwCisjZGVmaW5lIFRJTVBBTklfVFhGRTJfVFhGRTJfSU5fTUlDMl9DT05OX0NPTk5FQ1QgMHgxCisjZGVmaW5lIFRJTVBBTklfVFhGRTJfVFhGRTJfSU5fTElORV9JX0xfQ09OTl9TIDIKKyNkZWZpbmUgVElNUEFOSV9UWEZFMl9UWEZFMl9JTl9MSU5FX0lfTF9DT05OX00gMHg0CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX1RYRkUyX1RYRkUyX0lOX0xJTkVfSV9MX0NPTk5fTk9fQ09OTkVDVCAweDAKKyNkZWZpbmUgVElNUEFOSV9UWEZFMl9UWEZFMl9JTl9MSU5FX0lfTF9DT05OX0NPTk5FQ1QgMHgxCisjZGVmaW5lIFRJTVBBTklfVFhGRTJfVFhGRTJfSU5fTElORV9JX1JfQ09OTl9TIDEKKyNkZWZpbmUgVElNUEFOSV9UWEZFMl9UWEZFMl9JTl9MSU5FX0lfUl9DT05OX00gMHgyCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX1RYRkUyX1RYRkUyX0lOX0xJTkVfSV9SX0NPTk5fTk9fQ09OTkVDVCAweDAKKyNkZWZpbmUgVElNUEFOSV9UWEZFMl9UWEZFMl9JTl9MSU5FX0lfUl9DT05OX0NPTk5FQ1QgMHgxCisjZGVmaW5lIFRJTVBBTklfVFhGRTJfVFhGRTJfSU5fQVVYSV9DT05OX1MgMAorI2RlZmluZSBUSU1QQU5JX1RYRkUyX1RYRkUyX0lOX0FVWElfQ09OTl9NIDB4MQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9UWEZFMl9UWEZFMl9JTl9BVVhJX0NPTk5fTk9fQ09OTkVDVCAweDAKKyNkZWZpbmUgVElNUEFOSV9UWEZFMl9UWEZFMl9JTl9BVVhJX0NPTk5fQ09OTkVDVCAweDEKKyNkZWZpbmUgVElNUEFOSV9BX1RYRkUxMl9BVEVTVCAoMHhGKQorI2RlZmluZSBUSU1QQU5JX1RYRkUxMl9BVEVTVF9SV0MgIlJXIgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9UWEZFMTJfQVRFU1RfUE9SIDAKKyNkZWZpbmUgVElNUEFOSV9UWEZFMTJfQVRFU1RfUyAwCisjZGVmaW5lIFRJTVBBTklfVFhGRTEyX0FURVNUX00gMHhGRgorI2RlZmluZSBUSU1QQU5JX1RYRkUxMl9BVEVTVF9UWEZFMV9PVVRfU0hPUlRfVE9fVklDTV9FTl9TIDcKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfVFhGRTEyX0FURVNUX1RYRkUxX09VVF9TSE9SVF9UT19WSUNNX0VOX00gMHg4MAorI2RlZmluZSBUSU1QQU5JX1RYRkUxMl9BVEVTVF9UWEZFMV9PVVRfU0hPUlRfVE9fVklDTV9FTl9ESVNBQkxFIDB4MAorI2RlZmluZSBUSU1QQU5JX1RYRkUxMl9BVEVTVF9UWEZFMV9PVVRfU0hPUlRfVE9fVklDTV9FTl9FTkFCTEUgMHgxCisjZGVmaW5lIFRJTVBBTklfVFhGRTEyX0FURVNUX1RYRkUxX0JZUEFTU19FTl9TIDYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfVFhGRTEyX0FURVNUX1RYRkUxX0JZUEFTU19FTl9NIDB4NDAKKyNkZWZpbmUgVElNUEFOSV9UWEZFMTJfQVRFU1RfVFhGRTFfQllQQVNTX0VOX0RJU0FCTEUgMHgwCisjZGVmaW5lIFRJTVBBTklfVFhGRTEyX0FURVNUX1RYRkUxX0JZUEFTU19FTl9FTkFCTEUgMHgxCisjZGVmaW5lIFRJTVBBTklfVFhGRTEyX0FURVNUX1RYRkUxX0NNT1VUX0FURVNUX0NPTk5fUyA1CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX1RYRkUxMl9BVEVTVF9UWEZFMV9DTU9VVF9BVEVTVF9DT05OX00gMHgyMAorI2RlZmluZSBUSU1QQU5JX1RYRkUxMl9BVEVTVF9UWEZFMV9DTU9VVF9BVEVTVF9DT05OX05PX0NPTk5FQ1QgMHgwCisjZGVmaW5lIFRJTVBBTklfVFhGRTEyX0FURVNUX1RYRkUxX0NNT1VUX0FURVNUX0NPTk5fQ09OTkVDVCAweDEKKyNkZWZpbmUgVElNUEFOSV9UWEZFMTJfQVRFU1RfVFhGRTFfT1VUX0FURVNUX0NPTk5fUyA0CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX1RYRkUxMl9BVEVTVF9UWEZFMV9PVVRfQVRFU1RfQ09OTl9NIDB4MTAKKyNkZWZpbmUgVElNUEFOSV9UWEZFMTJfQVRFU1RfVFhGRTFfT1VUX0FURVNUX0NPTk5fTk9fQ09OTkVDVCAweDAKKyNkZWZpbmUgVElNUEFOSV9UWEZFMTJfQVRFU1RfVFhGRTFfT1VUX0FURVNUX0NPTk5fQ09OTkVDVCAweDEKKyNkZWZpbmUgVElNUEFOSV9UWEZFMTJfQVRFU1RfVFhGRTJfT1VUX1NIT1JUX1RPX1ZJQ01fRU5fUyAzCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX1RYRkUxMl9BVEVTVF9UWEZFMl9PVVRfU0hPUlRfVE9fVklDTV9FTl9NIDB4OAorI2RlZmluZSBUSU1QQU5JX1RYRkUxMl9BVEVTVF9UWEZFMl9PVVRfU0hPUlRfVE9fVklDTV9FTl9ESVNBQkxFIDB4MAorI2RlZmluZSBUSU1QQU5JX1RYRkUxMl9BVEVTVF9UWEZFMl9PVVRfU0hPUlRfVE9fVklDTV9FTl9FTkFCTEUgMHgxCisjZGVmaW5lIFRJTVBBTklfVFhGRTEyX0FURVNUX1RYRkUyX0JZUEFTU19FTl9TIDIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfVFhGRTEyX0FURVNUX1RYRkUyX0JZUEFTU19FTl9NIDB4NAorI2RlZmluZSBUSU1QQU5JX1RYRkUxMl9BVEVTVF9UWEZFMl9CWVBBU1NfRU5fRElTQUJMRSAweDAKKyNkZWZpbmUgVElNUEFOSV9UWEZFMTJfQVRFU1RfVFhGRTJfQllQQVNTX0VOX0VOQUJMRSAweDEKKyNkZWZpbmUgVElNUEFOSV9UWEZFMTJfQVRFU1RfVFhGRTJfQ01PVVRfQVRFU1RfQ09OTl9TIDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfVFhGRTEyX0FURVNUX1RYRkUyX0NNT1VUX0FURVNUX0NPTk5fTSAweDIKKyNkZWZpbmUgVElNUEFOSV9UWEZFMTJfQVRFU1RfVFhGRTJfQ01PVVRfQVRFU1RfQ09OTl9OT19DT05ORUNUIDB4MAorI2RlZmluZSBUSU1QQU5JX1RYRkUxMl9BVEVTVF9UWEZFMl9DTU9VVF9BVEVTVF9DT05OX0NPTk5FQ1QgMHgxCisjZGVmaW5lIFRJTVBBTklfVFhGRTEyX0FURVNUX1RYRkUyX09VVF9BVEVTVF9DT05OX1MgMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9UWEZFMTJfQVRFU1RfVFhGRTJfT1VUX0FURVNUX0NPTk5fTSAweDEKKyNkZWZpbmUgVElNUEFOSV9UWEZFMTJfQVRFU1RfVFhGRTJfT1VUX0FURVNUX0NPTk5fTk9fQ09OTkVDVCAweDAKKyNkZWZpbmUgVElNUEFOSV9UWEZFMTJfQVRFU1RfVFhGRTJfT1VUX0FURVNUX0NPTk5fQ09OTkVDVCAweDEKKyNkZWZpbmUgVElNUEFOSV9BX1RYRkVfQ0xUICgweDEwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9UWEZFX0NMVF9SV0MgIlJXIgorI2RlZmluZSBUSU1QQU5JX1RYRkVfQ0xUX1BPUiAweDY4CisjZGVmaW5lIFRJTVBBTklfVFhGRV9DTFRfUyAwCisjZGVmaW5lIFRJTVBBTklfVFhGRV9DTFRfTSAweEZGCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX1RYRkVfQ0xUX1RYRkVfT1VUX0NNX1ZPTFRfUyA1CisjZGVmaW5lIFRJTVBBTklfVFhGRV9DTFRfVFhGRV9PVVRfQ01fVk9MVF9NIDB4RTAKKyNkZWZpbmUgVElNUEFOSV9UWEZFX0NMVF9UWEZFX09VVF9DTV9WT0xUX1ZfMV8xMjVWIDB4MAorI2RlZmluZSBUSU1QQU5JX1RYRkVfQ0xUX1RYRkVfT1VUX0NNX1ZPTFRfVl8xXzEwMFYgMHgxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX1RYRkVfQ0xUX1RYRkVfT1VUX0NNX1ZPTFRfVl8xXzA3NVYgMHgyCisjZGVmaW5lIFRJTVBBTklfVFhGRV9DTFRfVFhGRV9PVVRfQ01fVk9MVF9WXzFfMDUwVl9OT1JNQUxfT1AgMHgzCisjZGVmaW5lIFRJTVBBTklfVFhGRV9DTFRfVFhGRV9PVVRfQ01fVk9MVF9WXzFfMDI1ViAweDQKKyNkZWZpbmUgVElNUEFOSV9UWEZFX0NMVF9UWEZFX09VVF9DTV9WT0xUX1ZfMV8wMDBWIDB4NQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9UWEZFX0NMVF9UWEZFX09VVF9DTV9WT0xUX1ZfMF85NzVWIDB4NgorI2RlZmluZSBUSU1QQU5JX1RYRkVfQ0xUX1RYRkVfT1VUX0NNX1ZPTFRfVl8wXzk1MFYgMHg3CisjZGVmaW5lIFRJTVBBTklfVFhGRV9DTFRfVFhGRV9CSUFTX0NVUl9TIDMKKyNkZWZpbmUgVElNUEFOSV9UWEZFX0NMVF9UWEZFX0JJQVNfQ1VSX00gMHgxOAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9UWEZFX0NMVF9UWEZFX0JJQVNfQ1VSX1ZfM1VBIDB4MAorI2RlZmluZSBUSU1QQU5JX1RYRkVfQ0xUX1RYRkVfQklBU19DVVJfVl80VUFfTk9STUFMX09QIDB4MQorI2RlZmluZSBUSU1QQU5JX1RYRkVfQ0xUX1RYRkVfQklBU19DVVJfVl82VUEgMHgyCisjZGVmaW5lIFRJTVBBTklfVFhGRV9DTFRfVFhGRV9CSUFTX0NVUl9WXzhVQSAweDMKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfVFhGRV9DTFRfUkVTRVJWRURfUyAwCisjZGVmaW5lIFRJTVBBTklfVFhGRV9DTFRfUkVTRVJWRURfTSAweDcKKyNkZWZpbmUgVElNUEFOSV9BX1RYQURDMV9FTiAoMHgxMSkKKyNkZWZpbmUgVElNUEFOSV9UWEFEQzFfRU5fUldDICJSVyIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfVFhBREMxX0VOX1BPUiAwCisjZGVmaW5lIFRJTVBBTklfVFhBREMxX0VOX1MgMAorI2RlZmluZSBUSU1QQU5JX1RYQURDMV9FTl9NIDB4RkYKKyNkZWZpbmUgVElNUEFOSV9UWEFEQzFfRU5fVFhBREMxX1JFRl9FTl9TIDcKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfVFhBREMxX0VOX1RYQURDMV9SRUZfRU5fTSAweDgwCisjZGVmaW5lIFRJTVBBTklfVFhBREMxX0VOX1RYQURDMV9SRUZfRU5fRElTQUJMRSAweDAKKyNkZWZpbmUgVElNUEFOSV9UWEFEQzFfRU5fVFhBREMxX1JFRl9FTl9FTkFCTEUgMHgxCisjZGVmaW5lIFRJTVBBTklfVFhBREMxX0VOX1RYQURDMV9EQUNfUkVGX0NVUl9DT01QRU5TQVRJT05fRU5fUyA2CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX1RYQURDMV9FTl9UWEFEQzFfREFDX1JFRl9DVVJfQ09NUEVOU0FUSU9OX0VOX00gMHg0MAorI2RlZmluZSBUSU1QQU5JX1RYQURDMV9FTl9UWEFEQzFfREFDX1JFRl9DVVJfQ09NUEVOU0FUSU9OX0VOX0RJU0FCTEUgMHgwCisjZGVmaW5lIFRJTVBBTklfVFhBREMxX0VOX1RYQURDMV9EQUNfUkVGX0NVUl9DT01QRU5TQVRJT05fRU5fRU5BQkxFIDB4MQorI2RlZmluZSBUSU1QQU5JX1RYQURDMV9FTl9UWEFEQzFfT1RBMV9FTl9TIDUKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfVFhBREMxX0VOX1RYQURDMV9PVEExX0VOX00gMHgyMAorI2RlZmluZSBUSU1QQU5JX1RYQURDMV9FTl9UWEFEQzFfT1RBMV9FTl9ESVNBQkxFIDB4MAorI2RlZmluZSBUSU1QQU5JX1RYQURDMV9FTl9UWEFEQzFfT1RBMV9FTl9FTkFCTEUgMHgxCisjZGVmaW5lIFRJTVBBTklfVFhBREMxX0VOX1RYQURDMV9PVEEyX0VOX1MgNAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9UWEFEQzFfRU5fVFhBREMxX09UQTJfRU5fTSAweDEwCisjZGVmaW5lIFRJTVBBTklfVFhBREMxX0VOX1RYQURDMV9PVEEyX0VOX0RJU0FCTEUgMHgwCisjZGVmaW5lIFRJTVBBTklfVFhBREMxX0VOX1RYQURDMV9PVEEyX0VOX0VOQUJMRSAweDEKKyNkZWZpbmUgVElNUEFOSV9UWEFEQzFfRU5fVFhBREMxX0NPTVBfRU5fUyAzCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX1RYQURDMV9FTl9UWEFEQzFfQ09NUF9FTl9NIDB4OAorI2RlZmluZSBUSU1QQU5JX1RYQURDMV9FTl9UWEFEQzFfQ09NUF9FTl9ESVNBQkxFIDB4MAorI2RlZmluZSBUSU1QQU5JX1RYQURDMV9FTl9UWEFEQzFfQ09NUF9FTl9FTkFCTEUgMHgxCisjZGVmaW5lIFRJTVBBTklfVFhBREMxX0VOX1RYQURDMV9ERU1fRU5fUyAyCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX1RYQURDMV9FTl9UWEFEQzFfREVNX0VOX00gMHg0CisjZGVmaW5lIFRJTVBBTklfVFhBREMxX0VOX1RYQURDMV9ERU1fRU5fRElTQUJMRSAweDAKKyNkZWZpbmUgVElNUEFOSV9UWEFEQzFfRU5fVFhBREMxX0RFTV9FTl9FTkFCTEUgMHgxCisjZGVmaW5lIFRJTVBBTklfVFhBREMxX0VOX1RYQURDMV9ERU1fRVJST1JfREVUX0VOX1MgMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9UWEFEQzFfRU5fVFhBREMxX0RFTV9FUlJPUl9ERVRfRU5fTSAweDIKKyNkZWZpbmUgVElNUEFOSV9UWEFEQzFfRU5fVFhBREMxX0RFTV9FUlJPUl9ERVRfRU5fRElTQUJMRSAweDAKKyNkZWZpbmUgVElNUEFOSV9UWEFEQzFfRU5fVFhBREMxX0RFTV9FUlJPUl9ERVRfRU5fRU5BQkxFIDB4MQorI2RlZmluZSBUSU1QQU5JX1RYQURDMV9FTl9SRVNFUlZFRF9TIDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfVFhBREMxX0VOX1JFU0VSVkVEX00gMHgxCisjZGVmaW5lIFRJTVBBTklfQV9UWEFEQzJfRU4gKDB4MTIpCisjZGVmaW5lIFRJTVBBTklfVFhBREMyX0VOX1JXQyAiUlciCisjZGVmaW5lIFRJTVBBTklfVFhBREMyX0VOX1BPUiAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX1RYQURDMl9FTl9TIDAKKyNkZWZpbmUgVElNUEFOSV9UWEFEQzJfRU5fTSAweEZGCisjZGVmaW5lIFRJTVBBTklfVFhBREMyX0VOX1RYQURDMl9SRUZfRU5fUyA3CisjZGVmaW5lIFRJTVBBTklfVFhBREMyX0VOX1RYQURDMl9SRUZfRU5fTSAweDgwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX1RYQURDMl9FTl9UWEFEQzJfUkVGX0VOX0RJU0FCTEUgMHgwCisjZGVmaW5lIFRJTVBBTklfVFhBREMyX0VOX1RYQURDMl9SRUZfRU5fRU5BQkxFIDB4MQorI2RlZmluZSBUSU1QQU5JX1RYQURDMl9FTl9UWEFEQzJfREFDX1JFRl9DVVJfQ09NUEVOU0FUSU9OX0VOX1MgNgorI2RlZmluZSBUSU1QQU5JX1RYQURDMl9FTl9UWEFEQzJfREFDX1JFRl9DVVJfQ09NUEVOU0FUSU9OX0VOX00gMHg0MAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9UWEFEQzJfRU5fVFhBREMyX0RBQ19SRUZfQ1VSX0NPTVBFTlNBVElPTl9FTl9ESVNBQkxFIDB4MAorI2RlZmluZSBUSU1QQU5JX1RYQURDMl9FTl9UWEFEQzJfREFDX1JFRl9DVVJfQ09NUEVOU0FUSU9OX0VOX0VOQUJMRSAweDEKKyNkZWZpbmUgVElNUEFOSV9UWEFEQzJfRU5fVFhBREMyX09UQTFfRU5fUyA1CisjZGVmaW5lIFRJTVBBTklfVFhBREMyX0VOX1RYQURDMl9PVEExX0VOX00gMHgyMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9UWEFEQzJfRU5fVFhBREMyX09UQTFfRU5fRElTQUJMRSAweDAKKyNkZWZpbmUgVElNUEFOSV9UWEFEQzJfRU5fVFhBREMyX09UQTFfRU5fRU5BQkxFIDB4MQorI2RlZmluZSBUSU1QQU5JX1RYQURDMl9FTl9UWEFEQzJfT1RBMl9FTl9TIDQKKyNkZWZpbmUgVElNUEFOSV9UWEFEQzJfRU5fVFhBREMyX09UQTJfRU5fTSAweDEwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX1RYQURDMl9FTl9UWEFEQzJfT1RBMl9FTl9ESVNBQkxFIDB4MAorI2RlZmluZSBUSU1QQU5JX1RYQURDMl9FTl9UWEFEQzJfT1RBMl9FTl9FTkFCTEUgMHgxCisjZGVmaW5lIFRJTVBBTklfVFhBREMyX0VOX1RYQURDMl9DT01QX0VOX1MgMworI2RlZmluZSBUSU1QQU5JX1RYQURDMl9FTl9UWEFEQzJfQ09NUF9FTl9NIDB4OAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9UWEFEQzJfRU5fVFhBREMyX0NPTVBfRU5fRElTQUJMRSAweDAKKyNkZWZpbmUgVElNUEFOSV9UWEFEQzJfRU5fVFhBREMyX0NPTVBfRU5fRU5BQkxFIDB4MQorI2RlZmluZSBUSU1QQU5JX1RYQURDMl9FTl9UWEFEQzJfREVNX0VOX1MgMgorI2RlZmluZSBUSU1QQU5JX1RYQURDMl9FTl9UWEFEQzJfREVNX0VOX00gMHg0CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX1RYQURDMl9FTl9UWEFEQzJfREVNX0VOX0RJU0FCTEUgMHgwCisjZGVmaW5lIFRJTVBBTklfVFhBREMyX0VOX1RYQURDMl9ERU1fRU5fRU5BQkxFIDB4MQorI2RlZmluZSBUSU1QQU5JX1RYQURDMl9FTl9UWEFEQzJfREVNX0VSUk9SX0RFVF9FTl9TIDEKKyNkZWZpbmUgVElNUEFOSV9UWEFEQzJfRU5fVFhBREMyX0RFTV9FUlJPUl9ERVRfRU5fTSAweDIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfVFhBREMyX0VOX1RYQURDMl9ERU1fRVJST1JfREVUX0VOX0RJU0FCTEUgMHgwCisjZGVmaW5lIFRJTVBBTklfVFhBREMyX0VOX1RYQURDMl9ERU1fRVJST1JfREVUX0VOX0VOQUJMRSAweDEKKyNkZWZpbmUgVElNUEFOSV9UWEFEQzJfRU5fUkVTRVJWRURfUyAwCisjZGVmaW5lIFRJTVBBTklfVFhBREMyX0VOX1JFU0VSVkVEX00gMHgxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX0FfVFhBRENfQ1RMICgweDEzKQorI2RlZmluZSBUSU1QQU5JX1RYQURDX0NUTF9SV0MgIlJXIgorI2RlZmluZSBUSU1QQU5JX1RYQURDX0NUTF9QT1IgMHg1OAorI2RlZmluZSBUSU1QQU5JX1RYQURDX0NUTF9TIDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfVFhBRENfQ1RMX00gMHhGRgorI2RlZmluZSBUSU1QQU5JX1RYQURDX0NUTF9UWEFEQ19EQUNfUkVGX0REQV9BTVBfQklBU19DVVJfUyA2CisjZGVmaW5lIFRJTVBBTklfVFhBRENfQ1RMX1RYQURDX0RBQ19SRUZfRERBX0FNUF9CSUFTX0NVUl9NIDB4QzAKKyNkZWZpbmUgVElNUEFOSV9UWEFEQ19DVExfVFhBRENfREFDX1JFRl9EREFfQU1QX0JJQVNfQ1VSX1ZfNVVBIDB4MAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9UWEFEQ19DVExfVFhBRENfREFDX1JFRl9EREFfQU1QX0JJQVNfQ1VSX1ZfMTBVQV9OT1JNQUxfT1AgMHgxCisjZGVmaW5lIFRJTVBBTklfVFhBRENfQ1RMX1RYQURDX0RBQ19SRUZfRERBX0FNUF9CSUFTX0NVUl9WXzE1VUEgMHgyCisjZGVmaW5lIFRJTVBBTklfVFhBRENfQ1RMX1RYQURDX0RBQ19SRUZfRERBX0FNUF9CSUFTX0NVUl9WXzIwVUEgMHgzCisjZGVmaW5lIFRJTVBBTklfVFhBRENfQ1RMX1RYQURDX0RBQ19SRUZfU1JDX0ZPTExPV0VSX0JJQVNfQ1VSX1MgNAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9UWEFEQ19DVExfVFhBRENfREFDX1JFRl9TUkNfRk9MTE9XRVJfQklBU19DVVJfTSAweDMwCisjZGVmaW5lIFRJTVBBTklfVFhBRENfQ1RMX1RYQURDX0RBQ19SRUZfU1JDX0ZPTExPV0VSX0JJQVNfQ1VSX1ZfNDBVQSAweDAKKyNkZWZpbmUgVElNUEFOSV9UWEFEQ19DVExfVFhBRENfREFDX1JFRl9TUkNfRk9MTE9XRVJfQklBU19DVVJfVl84MFVBIDB4MQorI2RlZmluZSBUSU1QQU5JX1RYQURDX0NUTF9UWEFEQ19EQUNfUkVGX1NSQ19GT0xMT1dFUl9CSUFTX0NVUl9WXzEyMFVBIDB4MgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9UWEFEQ19DVExfVFhBRENfREFDX1JFRl9TUkNfRk9MTE9XRVJfQklBU19DVVJfVl8xNjBVQSAweDMKKyNkZWZpbmUgVElNUEFOSV9UWEFEQ19DVExfVFhBRENfREFDX1JFRl9WT0xUX1MgMgorI2RlZmluZSBUSU1QQU5JX1RYQURDX0NUTF9UWEFEQ19EQUNfUkVGX1ZPTFRfTSAweEMKKyNkZWZpbmUgVElNUEFOSV9UWEFEQ19DVExfVFhBRENfREFDX1JFRl9WT0xUX1ZfMV84ViAweDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfVFhBRENfQ1RMX1RYQURDX0RBQ19SRUZfVk9MVF9WXzFfN1YgMHgxCisjZGVmaW5lIFRJTVBBTklfVFhBRENfQ1RMX1RYQURDX0RBQ19SRUZfVk9MVF9WXzFfNlZfTk9STUFMX09QIDB4MgorI2RlZmluZSBUSU1QQU5JX1RYQURDX0NUTF9UWEFEQ19EQUNfUkVGX1ZPTFRfVl8xXzVWIDB4MworI2RlZmluZSBUSU1QQU5JX1RYQURDX0NUTF9UWEFEQ19WUkVGTUlEX0JJQVNfQ1VSX1MgMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9UWEFEQ19DVExfVFhBRENfVlJFRk1JRF9CSUFTX0NVUl9NIDB4MworI2RlZmluZSBUSU1QQU5JX1RYQURDX0NUTF9UWEFEQ19WUkVGTUlEX0JJQVNfQ1VSX1ZfMjBVQV9OT1JNQUxfT1AgMHgwCisjZGVmaW5lIFRJTVBBTklfVFhBRENfQ1RMX1RYQURDX1ZSRUZNSURfQklBU19DVVJfVl80MFVBIDB4MQorI2RlZmluZSBUSU1QQU5JX1RYQURDX0NUTF9UWEFEQ19WUkVGTUlEX0JJQVNfQ1VSX1ZfODBVQSAweDIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfVFhBRENfQ1RMX1RYQURDX1ZSRUZNSURfQklBU19DVVJfVl8xNjBVQSAweDMKKyNkZWZpbmUgVElNUEFOSV9BX1RYQURDX0NUTDIgKDB4MTQpCisjZGVmaW5lIFRJTVBBTklfVFhBRENfQ1RMMl9SV0MgIlJXIgorI2RlZmluZSBUSU1QQU5JX1RYQURDX0NUTDJfUE9SIDB4NjQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfVFhBRENfQ1RMMl9TIDAKKyNkZWZpbmUgVElNUEFOSV9UWEFEQ19DVEwyX00gMHhGRgorI2RlZmluZSBUSU1QQU5JX1RYQURDX0NUTDJfVFhBRENfQ09NUF9USFJFU0hfVk9MVF9TIDYKKyNkZWZpbmUgVElNUEFOSV9UWEFEQ19DVEwyX1RYQURDX0NPTVBfVEhSRVNIX1ZPTFRfTSAweEMwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX1RYQURDX0NUTDJfVFhBRENfQ09NUF9USFJFU0hfVk9MVF9WXzMzM01WIDB4MAorI2RlZmluZSBUSU1QQU5JX1RYQURDX0NUTDJfVFhBRENfQ09NUF9USFJFU0hfVk9MVF9WXzM1Nk1WX05PUk1BTF9PUCAweDEKKyNkZWZpbmUgVElNUEFOSV9UWEFEQ19DVEwyX1RYQURDX0NPTVBfVEhSRVNIX1ZPTFRfVl8zNzhNViAweDIKKyNkZWZpbmUgVElNUEFOSV9UWEFEQ19DVEwyX1RYQURDX0NPTVBfVEhSRVNIX1ZPTFRfVl80MDBNViAweDMKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfVFhBRENfQ1RMMl9UWEFEQ19WSUNNX1JFRl9CVUZGX0JJQVNfQ1VSX1MgNAorI2RlZmluZSBUSU1QQU5JX1RYQURDX0NUTDJfVFhBRENfVklDTV9SRUZfQlVGRl9CSUFTX0NVUl9NIDB4MzAKKyNkZWZpbmUgVElNUEFOSV9UWEFEQ19DVEwyX1RYQURDX1ZJQ01fUkVGX0JVRkZfQklBU19DVVJfVl81MFVBIDB4MAorI2RlZmluZSBUSU1QQU5JX1RYQURDX0NUTDJfVFhBRENfVklDTV9SRUZfQlVGRl9CSUFTX0NVUl9WXzEwMFVBIDB4MQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9UWEFEQ19DVEwyX1RYQURDX1ZJQ01fUkVGX0JVRkZfQklBU19DVVJfVl8yMDBVQV9OT1JNQUxfT1AgMHgyCisjZGVmaW5lIFRJTVBBTklfVFhBRENfQ1RMMl9UWEFEQ19WSUNNX1JFRl9CVUZGX0JJQVNfQ1VSX1ZfNDAwVUEgMHgzCisjZGVmaW5lIFRJTVBBTklfVFhBRENfQ1RMMl9UWEFEQ19WSUNNX1JFRl9CVUZGX09VVF9WT0xUX1MgMgorI2RlZmluZSBUSU1QQU5JX1RYQURDX0NUTDJfVFhBRENfVklDTV9SRUZfQlVGRl9PVVRfVk9MVF9NIDB4QworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9UWEFEQ19DVEwyX1RYQURDX1ZJQ01fUkVGX0JVRkZfT1VUX1ZPTFRfVl8xXzFWIDB4MAorI2RlZmluZSBUSU1QQU5JX1RYQURDX0NUTDJfVFhBRENfVklDTV9SRUZfQlVGRl9PVVRfVk9MVF9WXzFfMTVWX05PUk1BTF9PUCAweDEKKyNkZWZpbmUgVElNUEFOSV9UWEFEQ19DVEwyX1RYQURDX1ZJQ01fUkVGX0JVRkZfT1VUX1ZPTFRfVl8xXzJWIDB4MgorI2RlZmluZSBUSU1QQU5JX1RYQURDX0NUTDJfVFhBRENfVklDTV9SRUZfQlVGRl9PVVRfVk9MVF9WXzFfMjVWIDB4MworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9UWEFEQ19DVEwyX1RYQURDX1ZPQ01fQlVGRkVSX0JJQVNfQ1VSX1MgMQorI2RlZmluZSBUSU1QQU5JX1RYQURDX0NUTDJfVFhBRENfVk9DTV9CVUZGRVJfQklBU19DVVJfTSAweDIKKyNkZWZpbmUgVElNUEFOSV9UWEFEQ19DVEwyX1RYQURDX1ZPQ01fQlVGRkVSX0JJQVNfQ1VSX1ZfNTBVQV9OT1JNQUxfT1AgMHgwCisjZGVmaW5lIFRJTVBBTklfVFhBRENfQ1RMMl9UWEFEQ19WT0NNX0JVRkZFUl9CSUFTX0NVUl9WXzEwMFVBIDB4MQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9UWEFEQ19DVEwyX1RYQURDX0RJR19PVVRfRU5fUyAwCisjZGVmaW5lIFRJTVBBTklfVFhBRENfQ1RMMl9UWEFEQ19ESUdfT1VUX0VOX00gMHgxCisjZGVmaW5lIFRJTVBBTklfVFhBRENfQ1RMMl9UWEFEQ19ESUdfT1VUX0VOX0RJU0FCTEUgMHgwCisjZGVmaW5lIFRJTVBBTklfVFhBRENfQ1RMMl9UWEFEQ19ESUdfT1VUX0VOX0VOQUJMRV9OT1JNQUxfT1AgMHgxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX0FfVFhBRENfQ1RMMyAoMHgxNSkKKyNkZWZpbmUgVElNUEFOSV9UWEFEQ19DVEwzX1JXQyAiUlciCisjZGVmaW5lIFRJTVBBTklfVFhBRENfQ1RMM19QT1IgMHg2NAorI2RlZmluZSBUSU1QQU5JX1RYQURDX0NUTDNfUyAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX1RYQURDX0NUTDNfTSAweEZGCisjZGVmaW5lIFRJTVBBTklfVFhBRENfQ1RMM19UWEFEQ19WT0NNX1JFRl9CVUZGX1ZPTFRfUyA2CisjZGVmaW5lIFRJTVBBTklfVFhBRENfQ1RMM19UWEFEQ19WT0NNX1JFRl9CVUZGX1ZPTFRfTSAweEMwCisjZGVmaW5lIFRJTVBBTklfVFhBRENfQ1RMM19UWEFEQ19WT0NNX1JFRl9CVUZGX1ZPTFRfVl8wXzg1ViAweDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfVFhBRENfQ1RMM19UWEFEQ19WT0NNX1JFRl9CVUZGX1ZPTFRfVl8wXzkwVl9OT1JNQUxfT1AgMHgxCisjZGVmaW5lIFRJTVBBTklfVFhBRENfQ1RMM19UWEFEQ19WT0NNX1JFRl9CVUZGX1ZPTFRfVl8wXzk1ViAweDIKKyNkZWZpbmUgVElNUEFOSV9UWEFEQ19DVEwzX1RYQURDX1ZPQ01fUkVGX0JVRkZfVk9MVF9WXzFfMDBWIDB4MworI2RlZmluZSBUSU1QQU5JX1RYQURDX0NUTDNfVFhBRENfT1RBMV9CSUFTX0NVUl9TIDQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfVFhBRENfQ1RMM19UWEFEQ19PVEExX0JJQVNfQ1VSX00gMHgzMAorI2RlZmluZSBUSU1QQU5JX1RYQURDX0NUTDNfVFhBRENfT1RBMV9CSUFTX0NVUl9WXzEwVUEgMHgwCisjZGVmaW5lIFRJTVBBTklfVFhBRENfQ1RMM19UWEFEQ19PVEExX0JJQVNfQ1VSX1ZfMTVVQSAweDEKKyNkZWZpbmUgVElNUEFOSV9UWEFEQ19DVEwzX1RYQURDX09UQTFfQklBU19DVVJfVl8yMFVBX05PUk1BTF9PUCAweDIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfVFhBRENfQ1RMM19UWEFEQ19PVEExX0JJQVNfQ1VSX1ZfMjVVQSAweDMKKyNkZWZpbmUgVElNUEFOSV9UWEFEQ19DVEwzX1RYQURDX09UQTJfQklBU19DVVJfUyAyCisjZGVmaW5lIFRJTVBBTklfVFhBRENfQ1RMM19UWEFEQ19PVEEyX0JJQVNfQ1VSX00gMHhDCisjZGVmaW5lIFRJTVBBTklfVFhBRENfQ1RMM19UWEFEQ19PVEEyX0JJQVNfQ1VSX1ZfNVVBIDB4MAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9UWEFEQ19DVEwzX1RYQURDX09UQTJfQklBU19DVVJfVl8xMFVBX05PUk1BTF9PUCAweDEKKyNkZWZpbmUgVElNUEFOSV9UWEFEQ19DVEwzX1RYQURDX09UQTJfQklBU19DVVJfVl8xNVVBIDB4MgorI2RlZmluZSBUSU1QQU5JX1RYQURDX0NUTDNfVFhBRENfT1RBMl9CSUFTX0NVUl9WXzIwVUEgMHgzCisjZGVmaW5lIFRJTVBBTklfVFhBRENfQ1RMM19UWEFEQ19DT01QX0JJQVNfQ1VSX1MgMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9UWEFEQ19DVEwzX1RYQURDX0NPTVBfQklBU19DVVJfTSAweDIKKyNkZWZpbmUgVElNUEFOSV9UWEFEQ19DVEwzX1RYQURDX0NPTVBfQklBU19DVVJfVl81VUFfTk9STUFMX09QIDB4MAorI2RlZmluZSBUSU1QQU5JX1RYQURDX0NUTDNfVFhBRENfQ09NUF9CSUFTX0NVUl9WXzEwVUEgMHgxCisjZGVmaW5lIFRJTVBBTklfVFhBRENfQ1RMM19SRVNFUlZFRF9TIDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfVFhBRENfQ1RMM19SRVNFUlZFRF9NIDB4MQorI2RlZmluZSBUSU1QQU5JX0FfVFhBRENfQ0hPUF9DVEwgKDB4MTYpCisjZGVmaW5lIFRJTVBBTklfVFhBRENfQ0hPUF9DVExfUldDICJSVyIKKyNkZWZpbmUgVElNUEFOSV9UWEFEQ19DSE9QX0NUTF9QT1IgMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9UWEFEQ19DSE9QX0NUTF9TIDAKKyNkZWZpbmUgVElNUEFOSV9UWEFEQ19DSE9QX0NUTF9NIDB4RkYKKyNkZWZpbmUgVElNUEFOSV9UWEFEQ19DSE9QX0NUTF9UWEFEQ19DSE9QX0VOX1MgNworI2RlZmluZSBUSU1QQU5JX1RYQURDX0NIT1BfQ1RMX1RYQURDX0NIT1BfRU5fTSAweDgwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX1RYQURDX0NIT1BfQ1RMX1RYQURDX0NIT1BfRU5fRElTQUJMRSAweDAKKyNkZWZpbmUgVElNUEFOSV9UWEFEQ19DSE9QX0NUTF9UWEFEQ19DSE9QX0VOX0VOQUJMRSAweDEKKyNkZWZpbmUgVElNUEFOSV9UWEFEQ19DSE9QX0NUTF9UWEFEQ19DSE9QX0RJVl9SQVRJT19TIDQKKyNkZWZpbmUgVElNUEFOSV9UWEFEQ19DSE9QX0NUTF9UWEFEQ19DSE9QX0RJVl9SQVRJT19NIDB4NzAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfVFhBRENfQ0hPUF9DVExfVFhBRENfQ0hPUF9ESVZfUkFUSU9fVl8yX05PUk1BTF9PUCAweDAKKyNkZWZpbmUgVElNUEFOSV9UWEFEQ19DSE9QX0NUTF9UWEFEQ19DSE9QX0RJVl9SQVRJT19WXzQgMHgxCisjZGVmaW5lIFRJTVBBTklfVFhBRENfQ0hPUF9DVExfVFhBRENfQ0hPUF9ESVZfUkFUSU9fVl84IDB4MgorI2RlZmluZSBUSU1QQU5JX1RYQURDX0NIT1BfQ1RMX1RYQURDX0NIT1BfRElWX1JBVElPX1ZfMTYgMHgzCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX1RYQURDX0NIT1BfQ1RMX1RYQURDX0NIT1BfRElWX1JBVElPX1ZfMzIgMHg0CisjZGVmaW5lIFRJTVBBTklfVFhBRENfQ0hPUF9DVExfVFhBRENfQ0hPUF9ESVZfUkFUSU9fVl82NCAweDUKKyNkZWZpbmUgVElNUEFOSV9UWEFEQ19DSE9QX0NUTF9UWEFEQ19DSE9QX0RJVl9SQVRJT19WXzEyOCAweDYKKyNkZWZpbmUgVElNUEFOSV9UWEFEQ19DSE9QX0NUTF9UWEFEQ19DSE9QX0RJVl9SQVRJT19WXzI1NiAweDcKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfVFhBRENfQ0hPUF9DVExfVFhBRENfQ0hPUF9TVEFURV9SRVNFVF9TIDMKKyNkZWZpbmUgVElNUEFOSV9UWEFEQ19DSE9QX0NUTF9UWEFEQ19DSE9QX1NUQVRFX1JFU0VUX00gMHg4CisjZGVmaW5lIFRJTVBBTklfVFhBRENfQ0hPUF9DVExfVFhBRENfQ0hPUF9TVEFURV9SRVNFVF9OT1JNQUxfT1AgMHgwCisjZGVmaW5lIFRJTVBBTklfVFhBRENfQ0hPUF9DVExfVFhBRENfQ0hPUF9TVEFURV9SRVNFVF9SRVNFVF9DSE9QIDB4MQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9UWEFEQ19DSE9QX0NUTF9UWEFEQ19DSE9QX0NMS19QSEFTRV9TRUxfUyAyCisjZGVmaW5lIFRJTVBBTklfVFhBRENfQ0hPUF9DVExfVFhBRENfQ0hPUF9DTEtfUEhBU0VfU0VMX00gMHg0CisjZGVmaW5lIFRJTVBBTklfVFhBRENfQ0hPUF9DVExfVFhBRENfQ0hPUF9DTEtfUEhBU0VfU0VMX0ZBTExJTkdfRURHRV9DSzEgMHgwCisjZGVmaW5lIFRJTVBBTklfVFhBRENfQ0hPUF9DVExfVFhBRENfQ0hPUF9DTEtfUEhBU0VfU0VMX0ZBTExJTkdfRURHRV9DSzIgMHgxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX1RYQURDX0NIT1BfQ1RMX1JFU0VSVkVEX1MgMAorI2RlZmluZSBUSU1QQU5JX1RYQURDX0NIT1BfQ1RMX1JFU0VSVkVEX00gMHgzCisjZGVmaW5lIFRJTVBBTklfQV9UWEZFMyAoMHgxOCkKKyNkZWZpbmUgVElNUEFOSV9UWEZFM19SV0MgIlJXIgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9UWEZFM19QT1IgMAorI2RlZmluZSBUSU1QQU5JX1RYRkUzX1MgMAorI2RlZmluZSBUSU1QQU5JX1RYRkUzX00gMHhGRgorI2RlZmluZSBUSU1QQU5JX1RYRkUzX1RYRkUzX0VOX1MgNworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9UWEZFM19UWEZFM19FTl9NIDB4ODAKKyNkZWZpbmUgVElNUEFOSV9UWEZFM19UWEZFM19FTl9ESVNBQkxFIDB4MAorI2RlZmluZSBUSU1QQU5JX1RYRkUzX1RYRkUzX0VOX0VOQUJMRSAweDEKKyNkZWZpbmUgVElNUEFOSV9UWEZFM19UWEZFM19HQUlOX1MgNQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9UWEZFM19UWEZFM19HQUlOX00gMHg2MAorI2RlZmluZSBUSU1QQU5JX1RYRkUzX1RYRkUzX0dBSU5fVl8wREIgMHgwCisjZGVmaW5lIFRJTVBBTklfVFhGRTNfVFhGRTNfR0FJTl9WXzRfNURCIDB4MQorI2RlZmluZSBUSU1QQU5JX1RYRkUzX1RYRkUzX0dBSU5fVl8yNERCXzEgMHgyCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX1RYRkUzX1RYRkUzX0dBSU5fVl8yNERCXzIgMHgzCisjZGVmaW5lIFRJTVBBTklfVFhGRTNfUkVTRVJWRURfMV9TIDIKKyNkZWZpbmUgVElNUEFOSV9UWEZFM19SRVNFUlZFRF8xX00gMHgxQworI2RlZmluZSBUSU1QQU5JX1RYRkUzX1RYRkUzX0lOX0NPTk5fUyAxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX1RYRkUzX1RYRkUzX0lOX0NPTk5fTSAweDIKKyNkZWZpbmUgVElNUEFOSV9UWEZFM19UWEZFM19JTl9DT05OX05PX0NPTk5FQ1QgMHgwCisjZGVmaW5lIFRJTVBBTklfVFhGRTNfVFhGRTNfSU5fQ09OTl9MSU5FX0lOX0wgMHgxCisjZGVmaW5lIFRJTVBBTklfVFhGRTNfUkVTRVJWRURfMl9TIDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfVFhGRTNfUkVTRVJWRURfMl9NIDB4MQorI2RlZmluZSBUSU1QQU5JX0FfVFhGRTQgKDB4MTkpCisjZGVmaW5lIFRJTVBBTklfVFhGRTRfUldDICJSVyIKKyNkZWZpbmUgVElNUEFOSV9UWEZFNF9QT1IgMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9UWEZFNF9TIDAKKyNkZWZpbmUgVElNUEFOSV9UWEZFNF9NIDB4RkYKKyNkZWZpbmUgVElNUEFOSV9UWEZFNF9UWEZFNF9FTl9TIDcKKyNkZWZpbmUgVElNUEFOSV9UWEZFNF9UWEZFNF9FTl9NIDB4ODAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfVFhGRTRfVFhGRTRfRU5fRElTQUJMRSAweDAKKyNkZWZpbmUgVElNUEFOSV9UWEZFNF9UWEZFNF9FTl9FTkFCTEUgMHgxCisjZGVmaW5lIFRJTVBBTklfVFhGRTRfVFhGRTRfR0FJTl9TIDUKKyNkZWZpbmUgVElNUEFOSV9UWEZFNF9UWEZFNF9HQUlOX00gMHg2MAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9UWEZFNF9UWEZFNF9HQUlOX1ZfMERCIDB4MAorI2RlZmluZSBUSU1QQU5JX1RYRkU0X1RYRkU0X0dBSU5fVl80XzVEQiAweDEKKyNkZWZpbmUgVElNUEFOSV9UWEZFNF9UWEZFNF9HQUlOX1ZfMjREQl8xIDB4MgorI2RlZmluZSBUSU1QQU5JX1RYRkU0X1RYRkU0X0dBSU5fVl8yNERCXzIgMHgzCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX1RYRkU0X1JFU0VSVkVEXzFfUyAyCisjZGVmaW5lIFRJTVBBTklfVFhGRTRfUkVTRVJWRURfMV9NIDB4MUMKKyNkZWZpbmUgVElNUEFOSV9UWEZFNF9UWEZFNF9JTl9DT05OX1MgMQorI2RlZmluZSBUSU1QQU5JX1RYRkU0X1RYRkU0X0lOX0NPTk5fTSAweDIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfVFhGRTRfVFhGRTRfSU5fQ09OTl9OT19DT05ORUNUIDB4MAorI2RlZmluZSBUSU1QQU5JX1RYRkU0X1RYRkU0X0lOX0NPTk5fTElORV9JTl9SIDB4MQorI2RlZmluZSBUSU1QQU5JX1RYRkU0X1JFU0VSVkVEXzJfUyAwCisjZGVmaW5lIFRJTVBBTklfVFhGRTRfUkVTRVJWRURfMl9NIDB4MQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9BX1RYRkUzX0FURVNUICgweDFBKQorI2RlZmluZSBUSU1QQU5JX1RYRkUzX0FURVNUX1JXQyAiUlciCisjZGVmaW5lIFRJTVBBTklfVFhGRTNfQVRFU1RfUE9SIDAKKyNkZWZpbmUgVElNUEFOSV9UWEZFM19BVEVTVF9TIDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfVFhGRTNfQVRFU1RfTSAweEZGCisjZGVmaW5lIFRJTVBBTklfVFhGRTNfQVRFU1RfVFhGRTNfT1VUX1NIT1JUX1RPX1ZJQ01fRU5fUyA3CisjZGVmaW5lIFRJTVBBTklfVFhGRTNfQVRFU1RfVFhGRTNfT1VUX1NIT1JUX1RPX1ZJQ01fRU5fTSAweDgwCisjZGVmaW5lIFRJTVBBTklfVFhGRTNfQVRFU1RfVFhGRTNfT1VUX1NIT1JUX1RPX1ZJQ01fRU5fRElTQUJMRSAweDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfVFhGRTNfQVRFU1RfVFhGRTNfT1VUX1NIT1JUX1RPX1ZJQ01fRU5fRU5BQkxFIDB4MQorI2RlZmluZSBUSU1QQU5JX1RYRkUzX0FURVNUX1RYRkUzX0JZUEFTU19FTl9TIDYKKyNkZWZpbmUgVElNUEFOSV9UWEZFM19BVEVTVF9UWEZFM19CWVBBU1NfRU5fTSAweDQwCisjZGVmaW5lIFRJTVBBTklfVFhGRTNfQVRFU1RfVFhGRTNfQllQQVNTX0VOX0RJU0FCTEUgMHgwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX1RYRkUzX0FURVNUX1RYRkUzX0JZUEFTU19FTl9FTkFCTEUgMHgxCisjZGVmaW5lIFRJTVBBTklfVFhGRTNfQVRFU1RfVFhGRTNfQ01PVVRfQVRFU1RfQ09OTl9TIDUKKyNkZWZpbmUgVElNUEFOSV9UWEZFM19BVEVTVF9UWEZFM19DTU9VVF9BVEVTVF9DT05OX00gMHgyMAorI2RlZmluZSBUSU1QQU5JX1RYRkUzX0FURVNUX1RYRkUzX0NNT1VUX0FURVNUX0NPTk5fTk9fQ09OTkVDVCAweDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfVFhGRTNfQVRFU1RfVFhGRTNfQ01PVVRfQVRFU1RfQ09OTl9DT05ORUNUIDB4MQorI2RlZmluZSBUSU1QQU5JX1RYRkUzX0FURVNUX1RYRkUzX09VVF9BVEVTVF9DT05OX1MgNAorI2RlZmluZSBUSU1QQU5JX1RYRkUzX0FURVNUX1RYRkUzX09VVF9BVEVTVF9DT05OX00gMHgxMAorI2RlZmluZSBUSU1QQU5JX1RYRkUzX0FURVNUX1RYRkUzX09VVF9BVEVTVF9DT05OX05PX0NPTk5FQ1QgMHgwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX1RYRkUzX0FURVNUX1RYRkUzX09VVF9BVEVTVF9DT05OX0NPTk5FQ1QgMHgxCisjZGVmaW5lIFRJTVBBTklfVFhGRTNfQVRFU1RfVFhGRTRfT1VUX1NIT1JUX1RPX1ZJQ01fRU5fUyAzCisjZGVmaW5lIFRJTVBBTklfVFhGRTNfQVRFU1RfVFhGRTRfT1VUX1NIT1JUX1RPX1ZJQ01fRU5fTSAweDgKKyNkZWZpbmUgVElNUEFOSV9UWEZFM19BVEVTVF9UWEZFNF9PVVRfU0hPUlRfVE9fVklDTV9FTl9ESVNBQkxFIDB4MAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9UWEZFM19BVEVTVF9UWEZFNF9PVVRfU0hPUlRfVE9fVklDTV9FTl9FTkFCTEUgMHgxCisjZGVmaW5lIFRJTVBBTklfVFhGRTNfQVRFU1RfVFhGRTRfQllQQVNTX0VOX1MgMgorI2RlZmluZSBUSU1QQU5JX1RYRkUzX0FURVNUX1RYRkU0X0JZUEFTU19FTl9NIDB4NAorI2RlZmluZSBUSU1QQU5JX1RYRkUzX0FURVNUX1RYRkU0X0JZUEFTU19FTl9ESVNBQkxFIDB4MAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9UWEZFM19BVEVTVF9UWEZFNF9CWVBBU1NfRU5fRU5BQkxFIDB4MQorI2RlZmluZSBUSU1QQU5JX1RYRkUzX0FURVNUX1RYRkU0X0NNT1VUX0FURVNUX0NPTk5fUyAxCisjZGVmaW5lIFRJTVBBTklfVFhGRTNfQVRFU1RfVFhGRTRfQ01PVVRfQVRFU1RfQ09OTl9NIDB4MgorI2RlZmluZSBUSU1QQU5JX1RYRkUzX0FURVNUX1RYRkU0X0NNT1VUX0FURVNUX0NPTk5fTk9fQ09OTkVDVCAweDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfVFhGRTNfQVRFU1RfVFhGRTRfQ01PVVRfQVRFU1RfQ09OTl9DT05ORUNUIDB4MQorI2RlZmluZSBUSU1QQU5JX1RYRkUzX0FURVNUX1RYRkU0X09VVF9BVEVTVF9DT05OX1MgMAorI2RlZmluZSBUSU1QQU5JX1RYRkUzX0FURVNUX1RYRkU0X09VVF9BVEVTVF9DT05OX00gMHgxCisjZGVmaW5lIFRJTVBBTklfVFhGRTNfQVRFU1RfVFhGRTRfT1VUX0FURVNUX0NPTk5fTk9fQ09OTkVDVCAweDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfVFhGRTNfQVRFU1RfVFhGRTRfT1VUX0FURVNUX0NPTk5fQ09OTkVDVCAweDEKKyNkZWZpbmUgVElNUEFOSV9BX1RYRkVfRElGRl9TRSAoMHgxQikKKyNkZWZpbmUgVElNUEFOSV9UWEZFX0RJRkZfU0VfUldDICJSVyIKKyNkZWZpbmUgVElNUEFOSV9UWEZFX0RJRkZfU0VfUE9SIDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfVFhGRV9ESUZGX1NFX1MgMAorI2RlZmluZSBUSU1QQU5JX1RYRkVfRElGRl9TRV9NIDB4RkYKKyNkZWZpbmUgVElNUEFOSV9UWEZFX0RJRkZfU0VfUkVTRVJWRURfUyA0CisjZGVmaW5lIFRJTVBBTklfVFhGRV9ESUZGX1NFX1JFU0VSVkVEX00gMHhGMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9UWEZFX0RJRkZfU0VfVFhBREMxX0lOX01PREVfUyAzCisjZGVmaW5lIFRJTVBBTklfVFhGRV9ESUZGX1NFX1RYQURDMV9JTl9NT0RFX00gMHg4CisjZGVmaW5lIFRJTVBBTklfVFhGRV9ESUZGX1NFX1RYQURDMV9JTl9NT0RFX0RJRkYgMHgwCisjZGVmaW5lIFRJTVBBTklfVFhGRV9ESUZGX1NFX1RYQURDMV9JTl9NT0RFX1NJTkdMRV9FTkRFRCAweDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfVFhGRV9ESUZGX1NFX1RYQURDMl9JTl9NT0RFX1MgMgorI2RlZmluZSBUSU1QQU5JX1RYRkVfRElGRl9TRV9UWEFEQzJfSU5fTU9ERV9NIDB4NAorI2RlZmluZSBUSU1QQU5JX1RYRkVfRElGRl9TRV9UWEFEQzJfSU5fTU9ERV9ESUZGIDB4MAorI2RlZmluZSBUSU1QQU5JX1RYRkVfRElGRl9TRV9UWEFEQzJfSU5fTU9ERV9TSU5HTEVfRU5ERUQgMHgxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX1RYRkVfRElGRl9TRV9UWEFEQzNfSU5fTU9ERV9TIDEKKyNkZWZpbmUgVElNUEFOSV9UWEZFX0RJRkZfU0VfVFhBREMzX0lOX01PREVfTSAweDIKKyNkZWZpbmUgVElNUEFOSV9UWEZFX0RJRkZfU0VfVFhBREMzX0lOX01PREVfRElGRiAweDAKKyNkZWZpbmUgVElNUEFOSV9UWEZFX0RJRkZfU0VfVFhBREMzX0lOX01PREVfU0lOR0xFX0VOREVEIDB4MQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9UWEZFX0RJRkZfU0VfVFhBREM0X0lOX01PREVfUyAwCisjZGVmaW5lIFRJTVBBTklfVFhGRV9ESUZGX1NFX1RYQURDNF9JTl9NT0RFX00gMHgxCisjZGVmaW5lIFRJTVBBTklfVFhGRV9ESUZGX1NFX1RYQURDNF9JTl9NT0RFX0RJRkYgMHgwCisjZGVmaW5lIFRJTVBBTklfVFhGRV9ESUZGX1NFX1RYQURDNF9JTl9NT0RFX1NJTkdMRV9FTkRFRCAweDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQV9DREFDX1JYX0NMS19DVEwgKDB4MjApCisjZGVmaW5lIFRJTVBBTklfQ0RBQ19SWF9DTEtfQ1RMX1JXQyAiUlciCisjZGVmaW5lIFRJTVBBTklfQ0RBQ19SWF9DTEtfQ1RMX1BPUiAweDk4CisjZGVmaW5lIFRJTVBBTklfQ0RBQ19SWF9DTEtfQ1RMX1MgMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9DREFDX1JYX0NMS19DVExfTSAweEZGCisjZGVmaW5lIFRJTVBBTklfQ0RBQ19SWF9DTEtfQ1RMX0NEQUNfUkVTRVRfUFVMU0VfR0VOX0VOX1MgNworI2RlZmluZSBUSU1QQU5JX0NEQUNfUlhfQ0xLX0NUTF9DREFDX1JFU0VUX1BVTFNFX0dFTl9FTl9NIDB4ODAKKyNkZWZpbmUgVElNUEFOSV9DREFDX1JYX0NMS19DVExfQ0RBQ19SRVNFVF9QVUxTRV9HRU5fRU5fRElTQUJMRSAweDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQ0RBQ19SWF9DTEtfQ1RMX0NEQUNfUkVTRVRfUFVMU0VfR0VOX0VOX0VOQUJMRV9OT1JNQUxfT1AgMHgxCisjZGVmaW5lIFRJTVBBTklfQ0RBQ19SWF9DTEtfQ1RMX0NEQUNfRVhURVJOQUxfQ1RSTF9FTl9TIDYKKyNkZWZpbmUgVElNUEFOSV9DREFDX1JYX0NMS19DVExfQ0RBQ19FWFRFUk5BTF9DVFJMX0VOX00gMHg0MAorI2RlZmluZSBUSU1QQU5JX0NEQUNfUlhfQ0xLX0NUTF9DREFDX0VYVEVSTkFMX0NUUkxfRU5fRElTQUJMRV9OT1JNQUxfT1AgMHgwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX0NEQUNfUlhfQ0xLX0NUTF9DREFDX0VYVEVSTkFMX0NUUkxfRU5fRU5BQkxFIDB4MQorI2RlZmluZSBUSU1QQU5JX0NEQUNfUlhfQ0xLX0NUTF9DREFDX0VYVEVSTkFMX0RFTEFZX1MgMgorI2RlZmluZSBUSU1QQU5JX0NEQUNfUlhfQ0xLX0NUTF9DREFDX0VYVEVSTkFMX0RFTEFZX00gMHgzQworI2RlZmluZSBUSU1QQU5JX0NEQUNfUlhfQ0xLX0NUTF9DREFDX0VYVEVSTkFMX0RFTEFZX1ZfNk5TIDB4MAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9DREFDX1JYX0NMS19DVExfQ0RBQ19FWFRFUk5BTF9ERUxBWV9WXzhfNE5TIDB4MQorI2RlZmluZSBUSU1QQU5JX0NEQUNfUlhfQ0xLX0NUTF9DREFDX0VYVEVSTkFMX0RFTEFZX1ZfMTBfOE5TIDB4MgorI2RlZmluZSBUSU1QQU5JX0NEQUNfUlhfQ0xLX0NUTF9DREFDX0VYVEVSTkFMX0RFTEFZX1ZfMTNfMk5TIDB4MworI2RlZmluZSBUSU1QQU5JX0NEQUNfUlhfQ0xLX0NUTF9DREFDX0VYVEVSTkFMX0RFTEFZX1ZfMTVfNk5TIDB4NAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9DREFDX1JYX0NMS19DVExfQ0RBQ19FWFRFUk5BTF9ERUxBWV9WXzE4TlMgMHg1CisjZGVmaW5lIFRJTVBBTklfQ0RBQ19SWF9DTEtfQ1RMX0NEQUNfRVhURVJOQUxfREVMQVlfVl8yMF80TlNfTk9STUFMX09QIDB4NgorI2RlZmluZSBUSU1QQU5JX0NEQUNfUlhfQ0xLX0NUTF9DREFDX0VYVEVSTkFMX0RFTEFZX1ZfMjJfOE5TIDB4NworI2RlZmluZSBUSU1QQU5JX0NEQUNfUlhfQ0xLX0NUTF9DREFDX0VYVEVSTkFMX0RFTEFZX1ZfMjVfMk5TIDB4OAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9DREFDX1JYX0NMS19DVExfQ0RBQ19FWFRFUk5BTF9ERUxBWV9WXzI3XzZOUyAweDkKKyNkZWZpbmUgVElNUEFOSV9DREFDX1JYX0NMS19DVExfQ0RBQ19FWFRFUk5BTF9ERUxBWV9WXzMwTlMgMHhBCisjZGVmaW5lIFRJTVBBTklfQ0RBQ19SWF9DTEtfQ1RMX0NEQUNfRVhURVJOQUxfREVMQVlfVl8zMl80TlMgMHhCCisjZGVmaW5lIFRJTVBBTklfQ0RBQ19SWF9DTEtfQ1RMX0NEQUNfRVhURVJOQUxfREVMQVlfVl8zNF84TlMgMHhDCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX0NEQUNfUlhfQ0xLX0NUTF9DREFDX0VYVEVSTkFMX0RFTEFZX1ZfMzdfMk5TIDB4RAorI2RlZmluZSBUSU1QQU5JX0NEQUNfUlhfQ0xLX0NUTF9DREFDX0VYVEVSTkFMX0RFTEFZX1ZfMzlfNk5TIDB4RQorI2RlZmluZSBUSU1QQU5JX0NEQUNfUlhfQ0xLX0NUTF9DREFDX0VYVEVSTkFMX0RFTEFZX1ZfNDJOUyAweEYKKyNkZWZpbmUgVElNUEFOSV9DREFDX1JYX0NMS19DVExfQ0RBQ19GRl9SRVNFVF9TIDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQ0RBQ19SWF9DTEtfQ1RMX0NEQUNfRkZfUkVTRVRfTSAweDIKKyNkZWZpbmUgVElNUEFOSV9DREFDX1JYX0NMS19DVExfQ0RBQ19GRl9SRVNFVF9FTkFCTEUgMHgxCisjZGVmaW5lIFRJTVBBTklfQ0RBQ19SWF9DTEtfQ1RMX0NEQUNfRkZfUkVTRVRfRElTQUJMRSAweDAKKyNkZWZpbmUgVElNUEFOSV9DREFDX1JYX0NMS19DVExfQ0RBQ19SRVNFVF9QVUxTRV9HRU5fQVRFU1RfQ09OTl9TIDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQ0RBQ19SWF9DTEtfQ1RMX0NEQUNfUkVTRVRfUFVMU0VfR0VOX0FURVNUX0NPTk5fTSAweDEKKyNkZWZpbmUgVElNUEFOSV9DREFDX1JYX0NMS19DVExfQ0RBQ19SRVNFVF9QVUxTRV9HRU5fQVRFU1RfQ09OTl9OT19DT05ORUNUIDB4MAorI2RlZmluZSBUSU1QQU5JX0NEQUNfUlhfQ0xLX0NUTF9DREFDX1JFU0VUX1BVTFNFX0dFTl9BVEVTVF9DT05OX0NPTk5FQ1QgMHgxCisjZGVmaW5lIFRJTVBBTklfQV9DREFDX0JVRkZfQ1RMICgweDIxKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9DREFDX0JVRkZfQ1RMX1JXQyAiUlciCisjZGVmaW5lIFRJTVBBTklfQ0RBQ19CVUZGX0NUTF9QT1IgMHg2MAorI2RlZmluZSBUSU1QQU5JX0NEQUNfQlVGRl9DVExfUyAwCisjZGVmaW5lIFRJTVBBTklfQ0RBQ19CVUZGX0NUTF9NIDB4RkYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQ0RBQ19CVUZGX0NUTF9DREFDX0RNX0JVRkZfQ1VSX1MgNQorI2RlZmluZSBUSU1QQU5JX0NEQUNfQlVGRl9DVExfQ0RBQ19ETV9CVUZGX0NVUl9NIDB4RTAKKyNkZWZpbmUgVElNUEFOSV9DREFDX0JVRkZfQ1RMX0NEQUNfRE1fQlVGRl9DVVJfVl80MFVBIDB4MAorI2RlZmluZSBUSU1QQU5JX0NEQUNfQlVGRl9DVExfQ0RBQ19ETV9CVUZGX0NVUl9WXzYwVUFfTk9STUFMX09QIDB4MQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9DREFDX0JVRkZfQ1RMX0NEQUNfRE1fQlVGRl9DVVJfVl84MFVBIDB4MgorI2RlZmluZSBUSU1QQU5JX0NEQUNfQlVGRl9DVExfQ0RBQ19ETV9CVUZGX0NVUl9WXzEwMFVBIDB4MworI2RlZmluZSBUSU1QQU5JX0NEQUNfQlVGRl9DVExfQ0RBQ19ETV9CVUZGX0NVUl9WXzEyMFVBIDB4NAorI2RlZmluZSBUSU1QQU5JX0NEQUNfQlVGRl9DVExfQ0RBQ19ETV9CVUZGX0NVUl9WXzE0MFVBIDB4NQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9DREFDX0JVRkZfQ1RMX0NEQUNfRE1fQlVGRl9DVVJfVl8xNjBVQSAweDYKKyNkZWZpbmUgVElNUEFOSV9DREFDX0JVRkZfQ1RMX0NEQUNfRE1fQlVGRl9DVVJfVl8xODBVQSAweDcKKyNkZWZpbmUgVElNUEFOSV9DREFDX0JVRkZfQ1RMX0NEQUNfQ01fQlVGRl9DVVJfUyAzCisjZGVmaW5lIFRJTVBBTklfQ0RBQ19CVUZGX0NUTF9DREFDX0NNX0JVRkZfQ1VSX00gMHgxOAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9DREFDX0JVRkZfQ1RMX0NEQUNfQ01fQlVGRl9DVVJfVl8yMFVBIDB4MAorI2RlZmluZSBUSU1QQU5JX0NEQUNfQlVGRl9DVExfQ0RBQ19DTV9CVUZGX0NVUl9WXzMwVUFfTk9STUFMX09QIDB4MQorI2RlZmluZSBUSU1QQU5JX0NEQUNfQlVGRl9DVExfQ0RBQ19DTV9CVUZGX0NVUl9WXzQwVUEgMHgyCisjZGVmaW5lIFRJTVBBTklfQ0RBQ19CVUZGX0NUTF9DREFDX0NNX0JVRkZfQ1VSX1ZfNTBVQSAweDMKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQ0RBQ19CVUZGX0NUTF9DREFDX1JFRl9CVUZGX09UQV9CSUFTX0NVUl9TIDEKKyNkZWZpbmUgVElNUEFOSV9DREFDX0JVRkZfQ1RMX0NEQUNfUkVGX0JVRkZfT1RBX0JJQVNfQ1VSX00gMHg2CisjZGVmaW5lIFRJTVBBTklfQ0RBQ19CVUZGX0NUTF9DREFDX1JFRl9CVUZGX09UQV9CSUFTX0NVUl9WXzVVQV81VUEgMHgwCisjZGVmaW5lIFRJTVBBTklfQ0RBQ19CVUZGX0NUTF9DREFDX1JFRl9CVUZGX09UQV9CSUFTX0NVUl9WXzVVQV8xMFVBIDB4MQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9DREFDX0JVRkZfQ1RMX0NEQUNfUkVGX0JVRkZfT1RBX0JJQVNfQ1VSX1ZfMTBVQV81VUEgMHgyCisjZGVmaW5lIFRJTVBBTklfQ0RBQ19CVUZGX0NUTF9DREFDX1JFRl9CVUZGX09UQV9CSUFTX0NVUl9WXzEwVUFfMTBVQSAweDMKKyNkZWZpbmUgVElNUEFOSV9DREFDX0JVRkZfQ1RMX0NEQUNfVkNPTV9TT1VSQ0VfUyAwCisjZGVmaW5lIFRJTVBBTklfQ0RBQ19CVUZGX0NUTF9DREFDX1ZDT01fU09VUkNFX00gMHgxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX0NEQUNfQlVGRl9DVExfQ0RBQ19WQ09NX1NPVVJDRV9DVVJSRU5UX1RPX1ZDT01fTk9STUFMX09QIDB4MAorI2RlZmluZSBUSU1QQU5JX0NEQUNfQlVGRl9DVExfQ0RBQ19WQ09NX1NPVVJDRV9NQVNURVJfQklBU19UT19WQ09NIDB4MQorI2RlZmluZSBUSU1QQU5JX0FfQ0RBQ19SRUZfQ1RMMSAoMHgyMikKKyNkZWZpbmUgVElNUEFOSV9DREFDX1JFRl9DVEwxX1JXQyAiUlciCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX0NEQUNfUkVGX0NUTDFfUE9SIDB4ZTEKKyNkZWZpbmUgVElNUEFOSV9DREFDX1JFRl9DVEwxX1MgMAorI2RlZmluZSBUSU1QQU5JX0NEQUNfUkVGX0NUTDFfTSAweEZGCisjZGVmaW5lIFRJTVBBTklfQ0RBQ19SRUZfQ1RMMV9DREFDX0RBQ0hfVk9MVF9TIDUKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQ0RBQ19SRUZfQ1RMMV9DREFDX0RBQ0hfVk9MVF9NIDB4RTAKKyNkZWZpbmUgVElNUEFOSV9DREFDX1JFRl9DVEwxX0NEQUNfREFDSF9WT0xUX1ZfMV84ViAweDAKKyNkZWZpbmUgVElNUEFOSV9DREFDX1JFRl9DVEwxX0NEQUNfREFDSF9WT0xUX1ZfMV84MjVWIDB4MQorI2RlZmluZSBUSU1QQU5JX0NEQUNfUkVGX0NUTDFfQ0RBQ19EQUNIX1ZPTFRfVl8xXzg1ViAweDIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQ0RBQ19SRUZfQ1RMMV9DREFDX0RBQ0hfVk9MVF9WXzFfOVYgMHgzCisjZGVmaW5lIFRJTVBBTklfQ0RBQ19SRUZfQ1RMMV9DREFDX0RBQ0hfVk9MVF9WXzFfOTI1ViAweDQKKyNkZWZpbmUgVElNUEFOSV9DREFDX1JFRl9DVEwxX0NEQUNfREFDSF9WT0xUX1ZfMV85NVZfTk9STUFMX09QIDB4NQorI2RlZmluZSBUSU1QQU5JX0NEQUNfUkVGX0NUTDFfQ0RBQ19EQUNIX1ZPTFRfVl8xXzk3NSAweDYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQ0RBQ19SRUZfQ1RMMV9DREFDX0RBQ0hfVk9MVF9WXzJfMFYgMHg3CisjZGVmaW5lIFRJTVBBTklfQ0RBQ19SRUZfQ1RMMV9DREFDX0RBQ0xfVk9MVF9TIDIKKyNkZWZpbmUgVElNUEFOSV9DREFDX1JFRl9DVEwxX0NEQUNfREFDTF9WT0xUX00gMHgxQworI2RlZmluZSBUSU1QQU5JX0NEQUNfUkVGX0NUTDFfQ0RBQ19EQUNMX1ZPTFRfVl8wXzFWIDB4MAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9DREFDX1JFRl9DVEwxX0NEQUNfREFDTF9WT0xUX1ZfMF8xMjVWIDB4MQorI2RlZmluZSBUSU1QQU5JX0NEQUNfUkVGX0NUTDFfQ0RBQ19EQUNMX1ZPTFRfVl8wXzE1Vl9OT1JNQUxfT1AgMHgyCisjZGVmaW5lIFRJTVBBTklfQ0RBQ19SRUZfQ1RMMV9DREFDX0RBQ0xfVk9MVF9WXzBfMTc1ViAweDMKKyNkZWZpbmUgVElNUEFOSV9DREFDX1JFRl9DVEwxX0NEQUNfREFDTF9WT0xUX1ZfMF8yViAweDQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQ0RBQ19SRUZfQ1RMMV9DREFDX0RBQ0xfVk9MVF9WXzBfMjVWIDB4NQorI2RlZmluZSBUSU1QQU5JX0NEQUNfUkVGX0NUTDFfQ0RBQ19EQUNMX1ZPTFRfVl8wXzI3NVYgMHg2CisjZGVmaW5lIFRJTVBBTklfQ0RBQ19SRUZfQ1RMMV9DREFDX0RBQ0xfVk9MVF9WXzBfM1YgMHg3CisjZGVmaW5lIFRJTVBBTklfQ0RBQ19SRUZfQ1RMMV9DREFDX0NNX1ZPTFRfUyAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX0NEQUNfUkVGX0NUTDFfQ0RBQ19DTV9WT0xUX00gMHgzCisjZGVmaW5lIFRJTVBBTklfQ0RBQ19SRUZfQ1RMMV9DREFDX0NNX1ZPTFRfVl8xXzAyNVYgMHgwCisjZGVmaW5lIFRJTVBBTklfQ0RBQ19SRUZfQ1RMMV9DREFDX0NNX1ZPTFRfVl8xXzA1Vl9OT1JNQUxfT1AgMHgxCisjZGVmaW5lIFRJTVBBTklfQ0RBQ19SRUZfQ1RMMV9DREFDX0NNX1ZPTFRfVl8xXzA3NVYgMHgyCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX0NEQUNfUkVGX0NUTDFfQ0RBQ19DTV9WT0xUX1ZfMV8xViAweDMKKyNkZWZpbmUgVElNUEFOSV9BX0lEQUNfRFdBX0ZJUl9DVEwgKDB4MjMpCisjZGVmaW5lIFRJTVBBTklfSURBQ19EV0FfRklSX0NUTF9SV0MgIlJXIgorI2RlZmluZSBUSU1QQU5JX0lEQUNfRFdBX0ZJUl9DVExfUE9SIDB4MjgKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfSURBQ19EV0FfRklSX0NUTF9TIDAKKyNkZWZpbmUgVElNUEFOSV9JREFDX0RXQV9GSVJfQ1RMX00gMHhGRgorI2RlZmluZSBUSU1QQU5JX0lEQUNfRFdBX0ZJUl9DVExfSURBQ19DTEtfTk9OX09MX1RJTUVfUyA3CisjZGVmaW5lIFRJTVBBTklfSURBQ19EV0FfRklSX0NUTF9JREFDX0NMS19OT05fT0xfVElNRV9NIDB4ODAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfSURBQ19EV0FfRklSX0NUTF9JREFDX0NMS19OT05fT0xfVElNRV9OT1JNQUxfT1AgMHgwCisjZGVmaW5lIFRJTVBBTklfSURBQ19EV0FfRklSX0NUTF9JREFDX0NMS19OT05fT0xfVElNRV9WXzE1MFBTRUNfUkVEVUNUSU9OIDB4MQorI2RlZmluZSBUSU1QQU5JX0lEQUNfRFdBX0ZJUl9DVExfSURBQ19GSVJfUyA0CisjZGVmaW5lIFRJTVBBTklfSURBQ19EV0FfRklSX0NUTF9JREFDX0ZJUl9NIDB4NzAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfSURBQ19EV0FfRklSX0NUTF9JREFDX0ZJUl9GSVIwIDB4MAorI2RlZmluZSBUSU1QQU5JX0lEQUNfRFdBX0ZJUl9DVExfSURBQ19GSVJfRklSMSAweDEKKyNkZWZpbmUgVElNUEFOSV9JREFDX0RXQV9GSVJfQ1RMX0lEQUNfRklSX0ZJUjIgMHgyCisjZGVmaW5lIFRJTVBBTklfSURBQ19EV0FfRklSX0NUTF9JREFDX0ZJUl9GSVIzIDB4MworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9JREFDX0RXQV9GSVJfQ1RMX0lEQUNfRklSX0ZJUjQgMHg0CisjZGVmaW5lIFRJTVBBTklfSURBQ19EV0FfRklSX0NUTF9JREFDX0VOX1NPVVJDRV9TIDMKKyNkZWZpbmUgVElNUEFOSV9JREFDX0RXQV9GSVJfQ1RMX0lEQUNfRU5fU09VUkNFX00gMHg4CisjZGVmaW5lIFRJTVBBTklfSURBQ19EV0FfRklSX0NUTF9JREFDX0VOX1NPVVJDRV9JTlRFUk5BTF9OT1JNQUxfT1AgMHgxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX0lEQUNfRFdBX0ZJUl9DVExfSURBQ19FTl9TT1VSQ0VfRVhURVJOQUwgMHgwCisjZGVmaW5lIFRJTVBBTklfSURBQ19EV0FfRklSX0NUTF9SRVNFUlZFRF9TIDAKKyNkZWZpbmUgVElNUEFOSV9JREFDX0RXQV9GSVJfQ1RMX1JFU0VSVkVEX00gMHg3CisjZGVmaW5lIFRJTVBBTklfQV9DREFDX1JFRl9DVEwyICgweDI0KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9DREFDX1JFRl9DVEwyX1JXQyAiUlciCisjZGVmaW5lIFRJTVBBTklfQ0RBQ19SRUZfQ1RMMl9QT1IgMHhjCisjZGVmaW5lIFRJTVBBTklfQ0RBQ19SRUZfQ1RMMl9TIDAKKyNkZWZpbmUgVElNUEFOSV9DREFDX1JFRl9DVEwyX00gMHhGRgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9DREFDX1JFRl9DVEwyX1JFU0VSVkVEXzFfUyA3CisjZGVmaW5lIFRJTVBBTklfQ0RBQ19SRUZfQ1RMMl9SRVNFUlZFRF8xX00gMHg4MAorI2RlZmluZSBUSU1QQU5JX0NEQUNfUkVGX0NUTDJfQ0RBQ19MX0VOX1MgNgorI2RlZmluZSBUSU1QQU5JX0NEQUNfUkVGX0NUTDJfQ0RBQ19MX0VOX00gMHg0MAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9DREFDX1JFRl9DVEwyX0NEQUNfTF9FTl9ESVNBQkxFIDB4MAorI2RlZmluZSBUSU1QQU5JX0NEQUNfUkVGX0NUTDJfQ0RBQ19MX0VOX0VOQUJMRSAweDEKKyNkZWZpbmUgVElNUEFOSV9DREFDX1JFRl9DVEwyX0NEQUNfUl9FTl9TIDUKKyNkZWZpbmUgVElNUEFOSV9DREFDX1JFRl9DVEwyX0NEQUNfUl9FTl9NIDB4MjAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQ0RBQ19SRUZfQ1RMMl9DREFDX1JfRU5fRElTQUJMRSAweDAKKyNkZWZpbmUgVElNUEFOSV9DREFDX1JFRl9DVEwyX0NEQUNfUl9FTl9FTkFCTEUgMHgxCisjZGVmaW5lIFRJTVBBTklfQ0RBQ19SRUZfQ1RMMl9SRVNFUlZFRF8yX1MgNAorI2RlZmluZSBUSU1QQU5JX0NEQUNfUkVGX0NUTDJfUkVTRVJWRURfMl9NIDB4MTAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQ0RBQ19SRUZfQ1RMMl9DREFDX0RXQV9SWF9GSUxURVJfVElNSU5HX1MgMgorI2RlZmluZSBUSU1QQU5JX0NEQUNfUkVGX0NUTDJfQ0RBQ19EV0FfUlhfRklMVEVSX1RJTUlOR19NIDB4QworI2RlZmluZSBUSU1QQU5JX0NEQUNfUkVGX0NUTDJfQ0RBQ19EV0FfUlhfRklMVEVSX1RJTUlOR19DTEtfU1lOQ19DSzExREJBUiAweDEKKyNkZWZpbmUgVElNUEFOSV9DREFDX1JFRl9DVEwyX0NEQUNfRFdBX1JYX0ZJTFRFUl9USU1JTkdfQ0xLX1NZTkNfQ0syMSAweDMKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQ0RBQ19SRUZfQ1RMMl9DREFDX09TUl9TIDAKKyNkZWZpbmUgVElNUEFOSV9DREFDX1JFRl9DVEwyX0NEQUNfT1NSX00gMHgzCisjZGVmaW5lIFRJTVBBTklfQ0RBQ19SRUZfQ1RMMl9DREFDX09TUl9WXzI1NiAweDAKKyNkZWZpbmUgVElNUEFOSV9DREFDX1JFRl9DVEwyX0NEQUNfT1NSX1ZfMTI4IDB4MQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9DREFDX1JFRl9DVEwyX0NEQUNfT1NSX1ZfNjQgMHgzCisjZGVmaW5lIFRJTVBBTklfQV9DREFDX0NUTDEgKDB4MjUpCisjZGVmaW5lIFRJTVBBTklfQ0RBQ19DVEwxX1JXQyAiUlciCisjZGVmaW5lIFRJTVBBTklfQ0RBQ19DVEwxX1BPUiAweGIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQ0RBQ19DVEwxX1MgMAorI2RlZmluZSBUSU1QQU5JX0NEQUNfQ1RMMV9NIDB4RkYKKyNkZWZpbmUgVElNUEFOSV9DREFDX0NUTDFfUkVTRVJWRURfUyA2CisjZGVmaW5lIFRJTVBBTklfQ0RBQ19DVEwxX1JFU0VSVkVEX00gMHhDMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9DREFDX0NUTDFfQ0RBQ19MX09VVF9TSE9SVF9FTl9TIDUKKyNkZWZpbmUgVElNUEFOSV9DREFDX0NUTDFfQ0RBQ19MX09VVF9TSE9SVF9FTl9NIDB4MjAKKyNkZWZpbmUgVElNUEFOSV9DREFDX0NUTDFfQ0RBQ19MX09VVF9TSE9SVF9FTl9ESVNBQkxFIDB4MAorI2RlZmluZSBUSU1QQU5JX0NEQUNfQ1RMMV9DREFDX0xfT1VUX1NIT1JUX0VOX0VOQUJMRSAweDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQ0RBQ19DVEwxX0NEQUNfUl9PVVRfU0hPUlRfRU5fUyA0CisjZGVmaW5lIFRJTVBBTklfQ0RBQ19DVEwxX0NEQUNfUl9PVVRfU0hPUlRfRU5fTSAweDEwCisjZGVmaW5lIFRJTVBBTklfQ0RBQ19DVEwxX0NEQUNfUl9PVVRfU0hPUlRfRU5fRElTQUJMRSAweDAKKyNkZWZpbmUgVElNUEFOSV9DREFDX0NUTDFfQ0RBQ19SX09VVF9TSE9SVF9FTl9FTkFCTEUgMHgxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX0NEQUNfQ1RMMV9DREFDX1JFRl9SRVNJU1RPUl9WT0xUX1MgMgorI2RlZmluZSBUSU1QQU5JX0NEQUNfQ1RMMV9DREFDX1JFRl9SRVNJU1RPUl9WT0xUX00gMHhDCisjZGVmaW5lIFRJTVBBTklfQ0RBQ19DVEwxX0NEQUNfUkVGX1JFU0lTVE9SX1ZPTFRfVl8xXzBWIDB4MAorI2RlZmluZSBUSU1QQU5JX0NEQUNfQ1RMMV9DREFDX1JFRl9SRVNJU1RPUl9WT0xUX1ZfMV8wMjVWIDB4MQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9DREFDX0NUTDFfQ0RBQ19SRUZfUkVTSVNUT1JfVk9MVF9WXzFfMDVWX05PUk1BTF9PUCAweDIKKyNkZWZpbmUgVElNUEFOSV9DREFDX0NUTDFfQ0RBQ19SRUZfUkVTSVNUT1JfVk9MVF9WXzFfMDc1MlYgMHgzCisjZGVmaW5lIFRJTVBBTklfQ0RBQ19DVEwxX0NEQUNfU0FNUF9DQVBfUkVTRVRfRU5fUyAxCisjZGVmaW5lIFRJTVBBTklfQ0RBQ19DVEwxX0NEQUNfU0FNUF9DQVBfUkVTRVRfRU5fTSAweDIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQ0RBQ19DVEwxX0NEQUNfU0FNUF9DQVBfUkVTRVRfRU5fRElTQUJMRSAweDAKKyNkZWZpbmUgVElNUEFOSV9DREFDX0NUTDFfQ0RBQ19TQU1QX0NBUF9SRVNFVF9FTl9FTkFCTEVfTk9STUFMX09QIDB4MQorI2RlZmluZSBUSU1QQU5JX0NEQUNfQ1RMMV9DREFDX1JFU0VUX1NPVVJDRV9TIDAKKyNkZWZpbmUgVElNUEFOSV9DREFDX0NUTDFfQ0RBQ19SRVNFVF9TT1VSQ0VfTSAweDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQ0RBQ19DVEwxX0NEQUNfUkVTRVRfU09VUkNFX0lOVEVSTkFMX05PUk1BTF9PUCAweDEKKyNkZWZpbmUgVElNUEFOSV9DREFDX0NUTDFfQ0RBQ19SRVNFVF9TT1VSQ0VfRVhURVJOQUxfUkVHSVNURVJfUkVTRVQgMHgwCisjZGVmaW5lIFRJTVBBTklfQV9DREFDX0NUTDIgKDB4MjYpCisjZGVmaW5lIFRJTVBBTklfQ0RBQ19DVEwyX1JXQyAiUlciCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX0NEQUNfQ1RMMl9QT1IgMHhkMAorI2RlZmluZSBUSU1QQU5JX0NEQUNfQ1RMMl9TIDAKKyNkZWZpbmUgVElNUEFOSV9DREFDX0NUTDJfTSAweEZGCisjZGVmaW5lIFRJTVBBTklfQ0RBQ19DVEwyX0NEQUNfT1RBX0JJQVNfUyA1CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX0NEQUNfQ1RMMl9DREFDX09UQV9CSUFTX00gMHhFMAorI2RlZmluZSBUSU1QQU5JX0NEQUNfQ1RMMl9DREFDX09UQV9CSUFTX1ZfMTBVQSAweDAKKyNkZWZpbmUgVElNUEFOSV9DREFDX0NUTDJfQ0RBQ19PVEFfQklBU19WXzhfNzVVQSAweDEKKyNkZWZpbmUgVElNUEFOSV9DREFDX0NUTDJfQ0RBQ19PVEFfQklBU19WXzdfNVVBIDB4MgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9DREFDX0NUTDJfQ0RBQ19PVEFfQklBU19WXzZfMjVVQSAweDMKKyNkZWZpbmUgVElNUEFOSV9DREFDX0NUTDJfQ0RBQ19PVEFfQklBU19WXzVVQSAweDQKKyNkZWZpbmUgVElNUEFOSV9DREFDX0NUTDJfQ0RBQ19PVEFfQklBU19WXzNfNzVVQSAweDUKKyNkZWZpbmUgVElNUEFOSV9DREFDX0NUTDJfQ0RBQ19PVEFfQklBU19WXzJfNVVBX05PUk1BTF9PUCAweDYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQ0RBQ19DVEwyX0NEQUNfT1RBX0JJQVNfVl8xXzI1VUEgMHg3CisjZGVmaW5lIFRJTVBBTklfQ0RBQ19DVEwyX0NEQUNfUkVGX0JVRkZfT1RBX0JJQVNfUyAyCisjZGVmaW5lIFRJTVBBTklfQ0RBQ19DVEwyX0NEQUNfUkVGX0JVRkZfT1RBX0JJQVNfTSAweDFDCisjZGVmaW5lIFRJTVBBTklfQ0RBQ19DVEwyX0NEQUNfUkVGX0JVRkZfT1RBX0JJQVNfVl8xMFVBIDB4MAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9DREFDX0NUTDJfQ0RBQ19SRUZfQlVGRl9PVEFfQklBU19WXzhfNzVVQSAweDEKKyNkZWZpbmUgVElNUEFOSV9DREFDX0NUTDJfQ0RBQ19SRUZfQlVGRl9PVEFfQklBU19WXzdfNVVBIDB4MgorI2RlZmluZSBUSU1QQU5JX0NEQUNfQ1RMMl9DREFDX1JFRl9CVUZGX09UQV9CSUFTX1ZfNl8yNVVBIDB4MworI2RlZmluZSBUSU1QQU5JX0NEQUNfQ1RMMl9DREFDX1JFRl9CVUZGX09UQV9CSUFTX1ZfNVVBX05PUk1BTF9PUCAweDQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQ0RBQ19DVEwyX0NEQUNfUkVGX0JVRkZfT1RBX0JJQVNfVl8zXzc1VUEgMHg1CisjZGVmaW5lIFRJTVBBTklfQ0RBQ19DVEwyX0NEQUNfUkVGX0JVRkZfT1RBX0JJQVNfVl8yXzVVQSAweDYKKyNkZWZpbmUgVElNUEFOSV9DREFDX0NUTDJfQ0RBQ19SRUZfQlVGRl9PVEFfQklBU19WXzFfMjVVQSAweDcKKyNkZWZpbmUgVElNUEFOSV9DREFDX0NUTDJfQ0RBQ19SRVNFVF9QVUxTRV9HRU5fVVBEQVRFX1JBVEVfUyAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX0NEQUNfQ1RMMl9DREFDX1JFU0VUX1BVTFNFX0dFTl9VUERBVEVfUkFURV9NIDB4MworI2RlZmluZSBUSU1QQU5JX0NEQUNfQ1RMMl9DREFDX1JFU0VUX1BVTFNFX0dFTl9VUERBVEVfUkFURV9GUyAweDAKKyNkZWZpbmUgVElNUEFOSV9DREFDX0NUTDJfQ0RBQ19SRVNFVF9QVUxTRV9HRU5fVVBEQVRFX1JBVEVfRlNfQllfOCAweDEKKyNkZWZpbmUgVElNUEFOSV9DREFDX0NUTDJfQ0RBQ19SRVNFVF9QVUxTRV9HRU5fVVBEQVRFX1JBVEVfRlNfQllfMTYgMHgyCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX0FfSURBQ19MX0NUTCAoMHgyOCkKKyNkZWZpbmUgVElNUEFOSV9JREFDX0xfQ1RMX1JXQyAiUlciCisjZGVmaW5lIFRJTVBBTklfSURBQ19MX0NUTF9QT1IgMHhlCisjZGVmaW5lIFRJTVBBTklfSURBQ19MX0NUTF9TIDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfSURBQ19MX0NUTF9NIDB4RkYKKyNkZWZpbmUgVElNUEFOSV9JREFDX0xfQ1RMX0lEQUNfTF9FTl9TIDcKKyNkZWZpbmUgVElNUEFOSV9JREFDX0xfQ1RMX0lEQUNfTF9FTl9NIDB4ODAKKyNkZWZpbmUgVElNUEFOSV9JREFDX0xfQ1RMX0lEQUNfTF9FTl9ESVNBQkxFIDB4MAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9JREFDX0xfQ1RMX0lEQUNfTF9FTl9FTkFCTEUgMHgxCisjZGVmaW5lIFRJTVBBTklfSURBQ19MX0NUTF9JREFDX0xfUkVGX1NFTF9TIDUKKyNkZWZpbmUgVElNUEFOSV9JREFDX0xfQ1RMX0lEQUNfTF9SRUZfU0VMX00gMHg2MAorI2RlZmluZSBUSU1QQU5JX0lEQUNfTF9DVExfSURBQ19MX1JFRl9TRUxfR1JPVU5EIDB4MAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9JREFDX0xfQ1RMX0lEQUNfTF9SRUZfU0VMX0lCSUFTX1hfUl9SRUYgMHgxCisjZGVmaW5lIFRJTVBBTklfSURBQ19MX0NUTF9JREFDX0xfUkVGX1NFTF9CR19WT0xUQUdFX05PUk1BTF9PUCAweDIKKyNkZWZpbmUgVElNUEFOSV9JREFDX0xfQ1RMX0lEQUNfTF9SRUZfU0VMX1ZERF9CWV8yIDB4MworI2RlZmluZSBUSU1QQU5JX0lEQUNfTF9DVExfSURBQ19MX0dBSU5fUyAzCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX0lEQUNfTF9DVExfSURBQ19MX0dBSU5fTSAweDE4CisjZGVmaW5lIFRJTVBBTklfSURBQ19MX0NUTF9JREFDX0xfR0FJTl9ORUdfMV81REIgMHgwCisjZGVmaW5lIFRJTVBBTklfSURBQ19MX0NUTF9JREFDX0xfR0FJTl9WXzBfMERCX05PUk1BTF9PUCAweDEKKyNkZWZpbmUgVElNUEFOSV9JREFDX0xfQ1RMX0lEQUNfTF9HQUlOX1BPU18xXzVEQiAweDIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfSURBQ19MX0NUTF9JREFDX0xfR0FJTl9QT1NfM18wREIgMHgzCisjZGVmaW5lIFRJTVBBTklfSURBQ19MX0NUTF9JREFDX0xfTE9XX1JFU0lTVEFOQ0VfUyAyCisjZGVmaW5lIFRJTVBBTklfSURBQ19MX0NUTF9JREFDX0xfTE9XX1JFU0lTVEFOQ0VfTSAweDQKKyNkZWZpbmUgVElNUEFOSV9JREFDX0xfQ1RMX0lEQUNfTF9MT1dfUkVTSVNUQU5DRV9WXzMwSyAweDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfSURBQ19MX0NUTF9JREFDX0xfTE9XX1JFU0lTVEFOQ0VfVl8xMEtfTk9STUFMX09QIDB4MQorI2RlZmluZSBUSU1QQU5JX0lEQUNfTF9DVExfSURBQ19MX1NZTkNfRU5fUyAxCisjZGVmaW5lIFRJTVBBTklfSURBQ19MX0NUTF9JREFDX0xfU1lOQ19FTl9NIDB4MgorI2RlZmluZSBUSU1QQU5JX0lEQUNfTF9DVExfSURBQ19MX1NZTkNfRU5fQVNZTkNIUk9OT1VTTFkgMHgwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX0lEQUNfTF9DVExfSURBQ19MX1NZTkNfRU5fRU5BQkxFX05PUk1BTF9PUCAweDEKKyNkZWZpbmUgVElNUEFOSV9JREFDX0xfQ1RMX0lEQUNfTF9SRVBMSUNBX0JJQVNfUyAwCisjZGVmaW5lIFRJTVBBTklfSURBQ19MX0NUTF9JREFDX0xfUkVQTElDQV9CSUFTX00gMHgxCisjZGVmaW5lIFRJTVBBTklfSURBQ19MX0NUTF9JREFDX0xfUkVQTElDQV9CSUFTX1JFUExJQ0FfQklBU19OT1JNQUxfT1AgMHgwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX0lEQUNfTF9DVExfSURBQ19MX1JFUExJQ0FfQklBU19TRVJWT19MT09QX0JJQVMgMHgxCisjZGVmaW5lIFRJTVBBTklfQV9JREFDX1JfQ1RMICgweDI5KQorI2RlZmluZSBUSU1QQU5JX0lEQUNfUl9DVExfUldDICJSVyIKKyNkZWZpbmUgVElNUEFOSV9JREFDX1JfQ1RMX1BPUiAweGUKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfSURBQ19SX0NUTF9TIDAKKyNkZWZpbmUgVElNUEFOSV9JREFDX1JfQ1RMX00gMHhGRgorI2RlZmluZSBUSU1QQU5JX0lEQUNfUl9DVExfSURBQ19SX0VOX1MgNworI2RlZmluZSBUSU1QQU5JX0lEQUNfUl9DVExfSURBQ19SX0VOX00gMHg4MAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9JREFDX1JfQ1RMX0lEQUNfUl9FTl9ESVNBQkxFRCAweDAKKyNkZWZpbmUgVElNUEFOSV9JREFDX1JfQ1RMX0lEQUNfUl9FTl9FTkFCTEVEIDB4MQorI2RlZmluZSBUSU1QQU5JX0lEQUNfUl9DVExfSURBQ19SX1JFRl9TRUxfUyA1CisjZGVmaW5lIFRJTVBBTklfSURBQ19SX0NUTF9JREFDX1JfUkVGX1NFTF9NIDB4NjAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfSURBQ19SX0NUTF9JREFDX1JfUkVGX1NFTF9HUk9VTkQgMHgwCisjZGVmaW5lIFRJTVBBTklfSURBQ19SX0NUTF9JREFDX1JfUkVGX1NFTF9JQklBU19YX1JfUkVGIDB4MQorI2RlZmluZSBUSU1QQU5JX0lEQUNfUl9DVExfSURBQ19SX1JFRl9TRUxfQkdfVk9MVEFHRV9OT1JNQUxfT1AgMHgyCisjZGVmaW5lIFRJTVBBTklfSURBQ19SX0NUTF9JREFDX1JfUkVGX1NFTF9WRERfQllfMiAweDMKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfSURBQ19SX0NUTF9JREFDX1JfR0FJTl9TIDMKKyNkZWZpbmUgVElNUEFOSV9JREFDX1JfQ1RMX0lEQUNfUl9HQUlOX00gMHgxOAorI2RlZmluZSBUSU1QQU5JX0lEQUNfUl9DVExfSURBQ19SX0dBSU5fTkVHXzFfNURCIDB4MAorI2RlZmluZSBUSU1QQU5JX0lEQUNfUl9DVExfSURBQ19SX0dBSU5fVl8wXzBEQl9OT1JNQUxfT1AgMHgxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX0lEQUNfUl9DVExfSURBQ19SX0dBSU5fUE9TXzFfNURCIDB4MgorI2RlZmluZSBUSU1QQU5JX0lEQUNfUl9DVExfSURBQ19SX0dBSU5fUE9TXzNfMERCIDB4MworI2RlZmluZSBUSU1QQU5JX0lEQUNfUl9DVExfSURBQ19SX0xPV19SRVNJU1RBTkNFX1MgMgorI2RlZmluZSBUSU1QQU5JX0lEQUNfUl9DVExfSURBQ19SX0xPV19SRVNJU1RBTkNFX00gMHg0CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX0lEQUNfUl9DVExfSURBQ19SX0xPV19SRVNJU1RBTkNFX1ZfMzBLIDB4MAorI2RlZmluZSBUSU1QQU5JX0lEQUNfUl9DVExfSURBQ19SX0xPV19SRVNJU1RBTkNFX1ZfMTBLX05PUk1BTF9PUCAweDEKKyNkZWZpbmUgVElNUEFOSV9JREFDX1JfQ1RMX0lEQUNfUl9TWU5DX0VOX1MgMQorI2RlZmluZSBUSU1QQU5JX0lEQUNfUl9DVExfSURBQ19SX1NZTkNfRU5fTSAweDIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfSURBQ19SX0NUTF9JREFDX1JfU1lOQ19FTl9BU1lOQ0hST05PVVNMWSAweDAKKyNkZWZpbmUgVElNUEFOSV9JREFDX1JfQ1RMX0lEQUNfUl9TWU5DX0VOX0VOQUJMRV9OT1JNQUxfT1AgMHgxCisjZGVmaW5lIFRJTVBBTklfSURBQ19SX0NUTF9JREFDX1JfUkVQTElDQV9CSUFTX1MgMAorI2RlZmluZSBUSU1QQU5JX0lEQUNfUl9DVExfSURBQ19SX1JFUExJQ0FfQklBU19NIDB4MQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9JREFDX1JfQ1RMX0lEQUNfUl9SRVBMSUNBX0JJQVNfUkVQTElDQV9CSUFTX05PUk1BTF9PUCAweDAKKyNkZWZpbmUgVElNUEFOSV9JREFDX1JfQ1RMX0lEQUNfUl9SRVBMSUNBX0JJQVNfU0VSVk9fTE9PUF9CSUFTIDB4MQorI2RlZmluZSBUSU1QQU5JX0FfUEFfTUFTVEVSX0JJQVMgKDB4MkQpCisjZGVmaW5lIFRJTVBBTklfUEFfTUFTVEVSX0JJQVNfUldDICJSVyIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfUEFfTUFTVEVSX0JJQVNfUE9SIDB4NmYKKyNkZWZpbmUgVElNUEFOSV9QQV9NQVNURVJfQklBU19TIDAKKyNkZWZpbmUgVElNUEFOSV9QQV9NQVNURVJfQklBU19NIDB4RkYKKyNkZWZpbmUgVElNUEFOSV9QQV9NQVNURVJfQklBU19MSU5FX01BU1RFUl9CSUFTX0NVUl9TIDUKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfUEFfTUFTVEVSX0JJQVNfTElORV9NQVNURVJfQklBU19DVVJfTSAweEUwCisjZGVmaW5lIFRJTVBBTklfUEFfTUFTVEVSX0JJQVNfTElORV9NQVNURVJfQklBU19DVVJfVl8xN181VUEgMHgwCisjZGVmaW5lIFRJTVBBTklfUEFfTUFTVEVSX0JJQVNfTElORV9NQVNURVJfQklBU19DVVJfVl8xNV8wVUEgMHgxCisjZGVmaW5lIFRJTVBBTklfUEFfTUFTVEVSX0JJQVNfTElORV9NQVNURVJfQklBU19DVVJfVl8xMl81VUEgMHgyCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX1BBX01BU1RFUl9CSUFTX0xJTkVfTUFTVEVSX0JJQVNfQ1VSX1ZfMTBfMFVBIDB4MworI2RlZmluZSBUSU1QQU5JX1BBX01BU1RFUl9CSUFTX0xJTkVfTUFTVEVSX0JJQVNfQ1VSX1ZfN181VUEgMHg0CisjZGVmaW5lIFRJTVBBTklfUEFfTUFTVEVSX0JJQVNfTElORV9NQVNURVJfQklBU19DVVJfVl81XzBVQSAweDUKKyNkZWZpbmUgVElNUEFOSV9QQV9NQVNURVJfQklBU19MSU5FX01BU1RFUl9CSUFTX0NVUl9WXzJfNVVBIDB4NgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9QQV9NQVNURVJfQklBU19MSU5FX01BU1RFUl9CSUFTX0NVUl9WXzBfMFVBIDB4NworI2RlZmluZSBUSU1QQU5JX1BBX01BU1RFUl9CSUFTX0hQSF9NQVNURVJfQklBU19DVVJfUyAyCisjZGVmaW5lIFRJTVBBTklfUEFfTUFTVEVSX0JJQVNfSFBIX01BU1RFUl9CSUFTX0NVUl9NIDB4MUMKKyNkZWZpbmUgVElNUEFOSV9QQV9NQVNURVJfQklBU19IUEhfTUFTVEVSX0JJQVNfQ1VSX1ZfMTdfNVVBIDB4MAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9QQV9NQVNURVJfQklBU19IUEhfTUFTVEVSX0JJQVNfQ1VSX1ZfMTVfMFVBIDB4MQorI2RlZmluZSBUSU1QQU5JX1BBX01BU1RFUl9CSUFTX0hQSF9NQVNURVJfQklBU19DVVJfVl8xMl81VUEgMHgyCisjZGVmaW5lIFRJTVBBTklfUEFfTUFTVEVSX0JJQVNfSFBIX01BU1RFUl9CSUFTX0NVUl9WXzEwXzBVQSAweDMKKyNkZWZpbmUgVElNUEFOSV9QQV9NQVNURVJfQklBU19IUEhfTUFTVEVSX0JJQVNfQ1VSX1ZfN181VUEgMHg0CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX1BBX01BU1RFUl9CSUFTX0hQSF9NQVNURVJfQklBU19DVVJfVl81XzBVQSAweDUKKyNkZWZpbmUgVElNUEFOSV9QQV9NQVNURVJfQklBU19IUEhfTUFTVEVSX0JJQVNfQ1VSX1ZfMl81VUEgMHg2CisjZGVmaW5lIFRJTVBBTklfUEFfTUFTVEVSX0JJQVNfSFBIX01BU1RFUl9CSUFTX0NVUl9WXzBfMFVBIDB4NworI2RlZmluZSBUSU1QQU5JX1BBX01BU1RFUl9CSUFTX0NMQVNTRF9SRUZfQlVGX01BU1RFUl9CSUFTX0NVUl9TIDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfUEFfTUFTVEVSX0JJQVNfQ0xBU1NEX1JFRl9CVUZfTUFTVEVSX0JJQVNfQ1VSX00gMHgzCisjZGVmaW5lIFRJTVBBTklfUEFfTUFTVEVSX0JJQVNfQ0xBU1NEX1JFRl9CVUZfTUFTVEVSX0JJQVNfQ1VSX1ZfNl8yNVVBIDB4MAorI2RlZmluZSBUSU1QQU5JX1BBX01BU1RFUl9CSUFTX0NMQVNTRF9SRUZfQlVGX01BU1RFUl9CSUFTX0NVUl9WXzVfMFVBIDB4MQorI2RlZmluZSBUSU1QQU5JX1BBX01BU1RFUl9CSUFTX0NMQVNTRF9SRUZfQlVGX01BU1RFUl9CSUFTX0NVUl9WXzNfNzVVQSAweDIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfUEFfTUFTVEVSX0JJQVNfQ0xBU1NEX1JFRl9CVUZfTUFTVEVSX0JJQVNfQ1VSX1ZfMl81VUEgMHgzCisjZGVmaW5lIFRJTVBBTklfQV9QQV9DTEFTU0RfQklBUyAoMHgyRSkKKyNkZWZpbmUgVElNUEFOSV9QQV9DTEFTU0RfQklBU19SV0MgIlJXIgorI2RlZmluZSBUSU1QQU5JX1BBX0NMQVNTRF9CSUFTX1BPUiAweDU1CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX1BBX0NMQVNTRF9CSUFTX1MgMAorI2RlZmluZSBUSU1QQU5JX1BBX0NMQVNTRF9CSUFTX00gMHhGRgorI2RlZmluZSBUSU1QQU5JX1BBX0NMQVNTRF9CSUFTX0NMQVNTRF9DT01QX0JJQVNfQ1VSX1MgNgorI2RlZmluZSBUSU1QQU5JX1BBX0NMQVNTRF9CSUFTX0NMQVNTRF9DT01QX0JJQVNfQ1VSX00gMHhDMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9QQV9DTEFTU0RfQklBU19DTEFTU0RfQ09NUF9CSUFTX0NVUl9WXzZfMjVVQSAweDAKKyNkZWZpbmUgVElNUEFOSV9QQV9DTEFTU0RfQklBU19DTEFTU0RfQ09NUF9CSUFTX0NVUl9WXzVfMFVBIDB4MQorI2RlZmluZSBUSU1QQU5JX1BBX0NMQVNTRF9CSUFTX0NMQVNTRF9DT01QX0JJQVNfQ1VSX1ZfM183NVVBIDB4MgorI2RlZmluZSBUSU1QQU5JX1BBX0NMQVNTRF9CSUFTX0NMQVNTRF9DT01QX0JJQVNfQ1VSX1ZfMl81VUEgMHgzCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX1BBX0NMQVNTRF9CSUFTX0NMQVNTRF9PVEExX0JJQVNfQ1VSX1MgNAorI2RlZmluZSBUSU1QQU5JX1BBX0NMQVNTRF9CSUFTX0NMQVNTRF9PVEExX0JJQVNfQ1VSX00gMHgzMAorI2RlZmluZSBUSU1QQU5JX1BBX0NMQVNTRF9CSUFTX0NMQVNTRF9PVEExX0JJQVNfQ1VSX1ZfNl8yNVVBIDB4MAorI2RlZmluZSBUSU1QQU5JX1BBX0NMQVNTRF9CSUFTX0NMQVNTRF9PVEExX0JJQVNfQ1VSX1ZfNV8wVSAweDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfUEFfQ0xBU1NEX0JJQVNfQ0xBU1NEX09UQTFfQklBU19DVVJfVl8zXzc1VUEgMHgyCisjZGVmaW5lIFRJTVBBTklfUEFfQ0xBU1NEX0JJQVNfQ0xBU1NEX09UQTFfQklBU19DVVJfVl8yXzVVQSAweDMKKyNkZWZpbmUgVElNUEFOSV9QQV9DTEFTU0RfQklBU19DTEFTU0RfT1RBMl9CSUFTX0NVUl9TIDIKKyNkZWZpbmUgVElNUEFOSV9QQV9DTEFTU0RfQklBU19DTEFTU0RfT1RBMl9CSUFTX0NVUl9NIDB4QworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9QQV9DTEFTU0RfQklBU19DTEFTU0RfT1RBMl9CSUFTX0NVUl9WXzZfMjVVQSAweDAKKyNkZWZpbmUgVElNUEFOSV9QQV9DTEFTU0RfQklBU19DTEFTU0RfT1RBMl9CSUFTX0NVUl9WXzVfMFVBIDB4MQorI2RlZmluZSBUSU1QQU5JX1BBX0NMQVNTRF9CSUFTX0NMQVNTRF9PVEEyX0JJQVNfQ1VSX1ZfM183NVVBIDB4MgorI2RlZmluZSBUSU1QQU5JX1BBX0NMQVNTRF9CSUFTX0NMQVNTRF9PVEEyX0JJQVNfQ1VSX1ZfMl81VUEgMHgzCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX1BBX0NMQVNTRF9CSUFTX0NMQVNTRF9PQ1BfQklBU19DVVJfUyAwCisjZGVmaW5lIFRJTVBBTklfUEFfQ0xBU1NEX0JJQVNfQ0xBU1NEX09DUF9CSUFTX0NVUl9NIDB4MworI2RlZmluZSBUSU1QQU5JX1BBX0NMQVNTRF9CSUFTX0NMQVNTRF9PQ1BfQklBU19DVVJfVl82XzI1VUEgMHgwCisjZGVmaW5lIFRJTVBBTklfUEFfQ0xBU1NEX0JJQVNfQ0xBU1NEX09DUF9CSUFTX0NVUl9WXzVfMFVBIDB4MQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9QQV9DTEFTU0RfQklBU19DTEFTU0RfT0NQX0JJQVNfQ1VSX1ZfM183NVVBIDB4MgorI2RlZmluZSBUSU1QQU5JX1BBX0NMQVNTRF9CSUFTX0NMQVNTRF9PQ1BfQklBU19DVVJfVl8yXzVVQSAweDMKKyNkZWZpbmUgVElNUEFOSV9BX0FVWFBHQV9DVVIgKDB4MkYpCisjZGVmaW5lIFRJTVBBTklfQVVYUEdBX0NVUl9SV0MgIlJXIgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9BVVhQR0FfQ1VSX1BPUiAweDQ0CisjZGVmaW5lIFRJTVBBTklfQVVYUEdBX0NVUl9TIDAKKyNkZWZpbmUgVElNUEFOSV9BVVhQR0FfQ1VSX00gMHhGRgorI2RlZmluZSBUSU1QQU5JX0FVWFBHQV9DVVJfQVVYUEdBX1BNT1NBQl9DVVJfUyA0CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX0FVWFBHQV9DVVJfQVVYUEdBX1BNT1NBQl9DVVJfTSAweEYwCisjZGVmaW5lIFRJTVBBTklfQVVYUEdBX0NVUl9BVVhQR0FfUE1PU0FCX0NVUl9WXzBVQSAweDAKKyNkZWZpbmUgVElNUEFOSV9BVVhQR0FfQ1VSX0FVWFBHQV9QTU9TQUJfQ1VSX1ZfMF8zMTI1VUEgMHgxCisjZGVmaW5lIFRJTVBBTklfQVVYUEdBX0NVUl9BVVhQR0FfUE1PU0FCX0NVUl9WXzBfNjI1VUEgMHgyCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX0FVWFBHQV9DVVJfQVVYUEdBX1BNT1NBQl9DVVJfVl8wXzkzNzVVQSAweDMKKyNkZWZpbmUgVElNUEFOSV9BVVhQR0FfQ1VSX0FVWFBHQV9QTU9TQUJfQ1VSX1ZfMV8yNVVBIDB4NAorI2RlZmluZSBUSU1QQU5JX0FVWFBHQV9DVVJfQVVYUEdBX1BNT1NBQl9DVVJfVl8xXzU2MjVVQSAweDUKKyNkZWZpbmUgVElNUEFOSV9BVVhQR0FfQ1VSX0FVWFBHQV9QTU9TQUJfQ1VSX1ZfMV84NzVVQSAweDYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQVVYUEdBX0NVUl9BVVhQR0FfUE1PU0FCX0NVUl9WXzJfMTg3NVVBIDB4NworI2RlZmluZSBUSU1QQU5JX0FVWFBHQV9DVVJfQVVYUEdBX1BNT1NBQl9DVVJfVl8yXzVVQSAweDgKKyNkZWZpbmUgVElNUEFOSV9BVVhQR0FfQ1VSX0FVWFBHQV9QTU9TQUJfQ1VSX1ZfMl84MTI1VUEgMHg5CisjZGVmaW5lIFRJTVBBTklfQVVYUEdBX0NVUl9BVVhQR0FfUE1PU0FCX0NVUl9WXzNfMTI1VUEgMHhBCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX0FVWFBHQV9DVVJfQVVYUEdBX1BNT1NBQl9DVVJfVl8zXzQzNzVVQSAweEIKKyNkZWZpbmUgVElNUEFOSV9BVVhQR0FfQ1VSX0FVWFBHQV9QTU9TQUJfQ1VSX1ZfM183NVVBIDB4QworI2RlZmluZSBUSU1QQU5JX0FVWFBHQV9DVVJfQVVYUEdBX1BNT1NBQl9DVVJfVl80XzA2MjVVQSAweEQKKyNkZWZpbmUgVElNUEFOSV9BVVhQR0FfQ1VSX0FVWFBHQV9QTU9TQUJfQ1VSX1ZfNF8zNzVVQSAweEUKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQVVYUEdBX0NVUl9BVVhQR0FfUE1PU0FCX0NVUl9WXzRfNjg3NVVBIDB4RgorI2RlZmluZSBUSU1QQU5JX0FVWFBHQV9DVVJfQVVYUEdBX05NT1NBQl9DVVJfUyAwCisjZGVmaW5lIFRJTVBBTklfQVVYUEdBX0NVUl9BVVhQR0FfTk1PU0FCX0NVUl9NIDB4RgorI2RlZmluZSBUSU1QQU5JX0FVWFBHQV9DVVJfQVVYUEdBX05NT1NBQl9DVVJfVl8wVUEgMHgwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX0FVWFBHQV9DVVJfQVVYUEdBX05NT1NBQl9DVVJfVl8wXzMxMjVVQSAweDEKKyNkZWZpbmUgVElNUEFOSV9BVVhQR0FfQ1VSX0FVWFBHQV9OTU9TQUJfQ1VSX1ZfMF82MjVVQSAweDIKKyNkZWZpbmUgVElNUEFOSV9BVVhQR0FfQ1VSX0FVWFBHQV9OTU9TQUJfQ1VSX1ZfMF85Mzc1VUEgMHgzCisjZGVmaW5lIFRJTVBBTklfQVVYUEdBX0NVUl9BVVhQR0FfTk1PU0FCX0NVUl9WXzFfMjVVQSAweDQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQVVYUEdBX0NVUl9BVVhQR0FfTk1PU0FCX0NVUl9WXzFfNTYyNVVBIDB4NQorI2RlZmluZSBUSU1QQU5JX0FVWFBHQV9DVVJfQVVYUEdBX05NT1NBQl9DVVJfVl8xXzg3NVVBIDB4NgorI2RlZmluZSBUSU1QQU5JX0FVWFBHQV9DVVJfQVVYUEdBX05NT1NBQl9DVVJfVl8yXzE4NzVVQSAweDcKKyNkZWZpbmUgVElNUEFOSV9BVVhQR0FfQ1VSX0FVWFBHQV9OTU9TQUJfQ1VSX1ZfMl81VUEgMHg4CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX0FVWFBHQV9DVVJfQVVYUEdBX05NT1NBQl9DVVJfVl8yXzgxMjVVQSAweDkKKyNkZWZpbmUgVElNUEFOSV9BVVhQR0FfQ1VSX0FVWFBHQV9OTU9TQUJfQ1VSX1ZfM18xMjVVQSAweEEKKyNkZWZpbmUgVElNUEFOSV9BVVhQR0FfQ1VSX0FVWFBHQV9OTU9TQUJfQ1VSX1ZfM180Mzc1VUEgMHhCCisjZGVmaW5lIFRJTVBBTklfQVVYUEdBX0NVUl9BVVhQR0FfTk1PU0FCX0NVUl9WXzNfNzVVQSAweEMKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQVVYUEdBX0NVUl9BVVhQR0FfTk1PU0FCX0NVUl9WXzRfMDYyNVVBIDB4RAorI2RlZmluZSBUSU1QQU5JX0FVWFBHQV9DVVJfQVVYUEdBX05NT1NBQl9DVVJfVl80XzM3NVVBIDB4RQorI2RlZmluZSBUSU1QQU5JX0FVWFBHQV9DVVJfQVVYUEdBX05NT1NBQl9DVVJfVl80XzY4NzVVQSAweEYKKyNkZWZpbmUgVElNUEFOSV9BX0FVWFBHQV9DTSAoMHgzMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQVVYUEdBX0NNX1JXQyAiUlciCisjZGVmaW5lIFRJTVBBTklfQVVYUEdBX0NNX1BPUiAweDkyCisjZGVmaW5lIFRJTVBBTklfQVVYUEdBX0NNX1MgMAorI2RlZmluZSBUSU1QQU5JX0FVWFBHQV9DTV9NIDB4RkYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQVVYUEdBX0NNX0FVWFBHQV9SX0NNX0RJRkZfUEFJUl9UQUlMX0NVUl9TIDUKKyNkZWZpbmUgVElNUEFOSV9BVVhQR0FfQ01fQVVYUEdBX1JfQ01fRElGRl9QQUlSX1RBSUxfQ1VSX00gMHhFMAorI2RlZmluZSBUSU1QQU5JX0FVWFBHQV9DTV9BVVhQR0FfUl9DTV9ESUZGX1BBSVJfVEFJTF9DVVJfVl83XzVVQSAweDAKKyNkZWZpbmUgVElNUEFOSV9BVVhQR0FfQ01fQVVYUEdBX1JfQ01fRElGRl9QQUlSX1RBSUxfQ1VSX1ZfN185MjVVQSAweDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQVVYUEdBX0NNX0FVWFBHQV9SX0NNX0RJRkZfUEFJUl9UQUlMX0NVUl9WXzhfNzVVQSAweDIKKyNkZWZpbmUgVElNUEFOSV9BVVhQR0FfQ01fQVVYUEdBX1JfQ01fRElGRl9QQUlSX1RBSUxfQ1VSX1ZfOV8zNzVVQSAweDMKKyNkZWZpbmUgVElNUEFOSV9BVVhQR0FfQ01fQVVYUEdBX1JfQ01fRElGRl9QQUlSX1RBSUxfQ1VSX1ZfMTBVQSAweDQKKyNkZWZpbmUgVElNUEFOSV9BVVhQR0FfQ01fQVVYUEdBX1JfQ01fRElGRl9QQUlSX1RBSUxfQ1VSX1ZfMTBfNjI1VUEgMHg1CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX0FVWFBHQV9DTV9BVVhQR0FfUl9DTV9ESUZGX1BBSVJfVEFJTF9DVVJfVl8xMV8yNVVBIDB4NgorI2RlZmluZSBUSU1QQU5JX0FVWFBHQV9DTV9BVVhQR0FfUl9DTV9ESUZGX1BBSVJfVEFJTF9DVVJfVl8xMV84NzVVQSAweDcKKyNkZWZpbmUgVElNUEFOSV9BVVhQR0FfQ01fQVVYUEdBX0xfQ01fRElGRl9QQUlSX1RBSUxfQ1VSX1MgMgorI2RlZmluZSBUSU1QQU5JX0FVWFBHQV9DTV9BVVhQR0FfTF9DTV9ESUZGX1BBSVJfVEFJTF9DVVJfTSAweDFDCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX0FVWFBHQV9DTV9BVVhQR0FfTF9DTV9ESUZGX1BBSVJfVEFJTF9DVVJfVl83XzVVQSAweDAKKyNkZWZpbmUgVElNUEFOSV9BVVhQR0FfQ01fQVVYUEdBX0xfQ01fRElGRl9QQUlSX1RBSUxfQ1VSX1ZfN185MjVVQSAweDEKKyNkZWZpbmUgVElNUEFOSV9BVVhQR0FfQ01fQVVYUEdBX0xfQ01fRElGRl9QQUlSX1RBSUxfQ1VSX1ZfOF83NVVBIDB4MgorI2RlZmluZSBUSU1QQU5JX0FVWFBHQV9DTV9BVVhQR0FfTF9DTV9ESUZGX1BBSVJfVEFJTF9DVVJfVl85XzM3NVVBIDB4MworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9BVVhQR0FfQ01fQVVYUEdBX0xfQ01fRElGRl9QQUlSX1RBSUxfQ1VSX1ZfMTBVQSAweDQKKyNkZWZpbmUgVElNUEFOSV9BVVhQR0FfQ01fQVVYUEdBX0xfQ01fRElGRl9QQUlSX1RBSUxfQ1VSX1ZfMTBfNjI1VUEgMHg1CisjZGVmaW5lIFRJTVBBTklfQVVYUEdBX0NNX0FVWFBHQV9MX0NNX0RJRkZfUEFJUl9UQUlMX0NVUl9WXzExXzI1VUEgMHg2CisjZGVmaW5lIFRJTVBBTklfQVVYUEdBX0NNX0FVWFBHQV9MX0NNX0RJRkZfUEFJUl9UQUlMX0NVUl9WXzExXzg3NVVBIDB4NworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9BVVhQR0FfQ01fQVVYUEdBX1IyUl9DTV9TIDEKKyNkZWZpbmUgVElNUEFOSV9BVVhQR0FfQ01fQVVYUEdBX1IyUl9DTV9NIDB4MgorI2RlZmluZSBUSU1QQU5JX0FVWFBHQV9DTV9BVVhQR0FfUjJSX0NNX1ZDTUlfVE9fUjJSX0NNIDB4MQorI2RlZmluZSBUSU1QQU5JX0FVWFBHQV9DTV9BVVhQR0FfUjJSX0NNX1IyUl9DTV9GTE9BVElORyAweDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQVVYUEdBX0NNX0FVWFBHQV9WQ01fUkVGX0dFTl9TIDAKKyNkZWZpbmUgVElNUEFOSV9BVVhQR0FfQ01fQVVYUEdBX1ZDTV9SRUZfR0VOX00gMHgxCisjZGVmaW5lIFRJTVBBTklfQVVYUEdBX0NNX0FVWFBHQV9WQ01fUkVGX0dFTl9HRU5fVkNNX0xPQ0FMTFkgMHgxCisjZGVmaW5lIFRJTVBBTklfQVVYUEdBX0NNX0FVWFBHQV9WQ01fUkVGX0dFTl9CR19WQ00gMHgwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX0FfUEFfSFBIX0VBUlBBX01TVEJfRU4gKDB4MzEpCisjZGVmaW5lIFRJTVBBTklfUEFfSFBIX0VBUlBBX01TVEJfRU5fUldDICJSVyIKKyNkZWZpbmUgVElNUEFOSV9QQV9IUEhfRUFSUEFfTVNUQl9FTl9QT1IgMHg0CisjZGVmaW5lIFRJTVBBTklfUEFfSFBIX0VBUlBBX01TVEJfRU5fUyAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX1BBX0hQSF9FQVJQQV9NU1RCX0VOX00gMHhGRgorI2RlZmluZSBUSU1QQU5JX1BBX0hQSF9FQVJQQV9NU1RCX0VOX0hQSF9MX0VOX1MgNworI2RlZmluZSBUSU1QQU5JX1BBX0hQSF9FQVJQQV9NU1RCX0VOX0hQSF9MX0VOX00gMHg4MAorI2RlZmluZSBUSU1QQU5JX1BBX0hQSF9FQVJQQV9NU1RCX0VOX0hQSF9MX0VOX0VOQUJMRSAweDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfUEFfSFBIX0VBUlBBX01TVEJfRU5fSFBIX0xfRU5fRElTQUJMRSAweDAKKyNkZWZpbmUgVElNUEFOSV9QQV9IUEhfRUFSUEFfTVNUQl9FTl9IUEhfTF9CSUFTX0VOX1MgNgorI2RlZmluZSBUSU1QQU5JX1BBX0hQSF9FQVJQQV9NU1RCX0VOX0hQSF9MX0JJQVNfRU5fTSAweDQwCisjZGVmaW5lIFRJTVBBTklfUEFfSFBIX0VBUlBBX01TVEJfRU5fSFBIX0xfQklBU19FTl9FTkFCTEUgMHgxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX1BBX0hQSF9FQVJQQV9NU1RCX0VOX0hQSF9MX0JJQVNfRU5fRElTQUJMRSAweDAKKyNkZWZpbmUgVElNUEFOSV9QQV9IUEhfRUFSUEFfTVNUQl9FTl9IUEhfUl9FTl9TIDUKKyNkZWZpbmUgVElNUEFOSV9QQV9IUEhfRUFSUEFfTVNUQl9FTl9IUEhfUl9FTl9NIDB4MjAKKyNkZWZpbmUgVElNUEFOSV9QQV9IUEhfRUFSUEFfTVNUQl9FTl9IUEhfUl9FTl9FTkFCTEUgMHgxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX1BBX0hQSF9FQVJQQV9NU1RCX0VOX0hQSF9SX0VOX0RJU0FCTEUgMHgwCisjZGVmaW5lIFRJTVBBTklfUEFfSFBIX0VBUlBBX01TVEJfRU5fSFBIX1JfQklBU19FTl9TIDQKKyNkZWZpbmUgVElNUEFOSV9QQV9IUEhfRUFSUEFfTVNUQl9FTl9IUEhfUl9CSUFTX0VOX00gMHgxMAorI2RlZmluZSBUSU1QQU5JX1BBX0hQSF9FQVJQQV9NU1RCX0VOX0hQSF9SX0JJQVNfRU5fRU5BQkxFIDB4MQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9QQV9IUEhfRUFSUEFfTVNUQl9FTl9IUEhfUl9CSUFTX0VOX0RJU0FCTEUgMHgwCisjZGVmaW5lIFRJTVBBTklfUEFfSFBIX0VBUlBBX01TVEJfRU5fSFBIX1ZDTV9CVUZGRVJfRU5fUyAzCisjZGVmaW5lIFRJTVBBTklfUEFfSFBIX0VBUlBBX01TVEJfRU5fSFBIX1ZDTV9CVUZGRVJfRU5fTSAweDgKKyNkZWZpbmUgVElNUEFOSV9QQV9IUEhfRUFSUEFfTVNUQl9FTl9IUEhfVkNNX0JVRkZFUl9FTl9FTkFCTEUgMHgxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX1BBX0hQSF9FQVJQQV9NU1RCX0VOX0hQSF9WQ01fQlVGRkVSX0VOX0RJU0FCTEUgMHgwCisjZGVmaW5lIFRJTVBBTklfUEFfSFBIX0VBUlBBX01TVEJfRU5fSFBIX0NBUExFU1NfTU9ERV9TIDIKKyNkZWZpbmUgVElNUEFOSV9QQV9IUEhfRUFSUEFfTVNUQl9FTl9IUEhfQ0FQTEVTU19NT0RFX00gMHg0CisjZGVmaW5lIFRJTVBBTklfUEFfSFBIX0VBUlBBX01TVEJfRU5fSFBIX0NBUExFU1NfTU9ERV9DQVBMRVNTIDB4MQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9QQV9IUEhfRUFSUEFfTVNUQl9FTl9IUEhfQ0FQTEVTU19NT0RFX0xFR0FDWSAweDAKKyNkZWZpbmUgVElNUEFOSV9QQV9IUEhfRUFSUEFfTVNUQl9FTl9FQVJQQV9FTl9TIDEKKyNkZWZpbmUgVElNUEFOSV9QQV9IUEhfRUFSUEFfTVNUQl9FTl9FQVJQQV9FTl9NIDB4MgorI2RlZmluZSBUSU1QQU5JX1BBX0hQSF9FQVJQQV9NU1RCX0VOX0VBUlBBX0VOX0VOQUJMRSAweDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfUEFfSFBIX0VBUlBBX01TVEJfRU5fRUFSUEFfRU5fRElTQUJMRSAweDAKKyNkZWZpbmUgVElNUEFOSV9QQV9IUEhfRUFSUEFfTVNUQl9FTl9QQV9NQVNURVJfQklBU19FTl9TIDAKKyNkZWZpbmUgVElNUEFOSV9QQV9IUEhfRUFSUEFfTVNUQl9FTl9QQV9NQVNURVJfQklBU19FTl9NIDB4MQorI2RlZmluZSBUSU1QQU5JX1BBX0hQSF9FQVJQQV9NU1RCX0VOX1BBX01BU1RFUl9CSUFTX0VOX0VOQUJMRSAweDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfUEFfSFBIX0VBUlBBX01TVEJfRU5fUEFfTUFTVEVSX0JJQVNfRU5fRElTQUJMRSAweDAKKyNkZWZpbmUgVElNUEFOSV9BX1BBX0xJTkVfQVVYT19FTiAoMHgzMikKKyNkZWZpbmUgVElNUEFOSV9QQV9MSU5FX0FVWE9fRU5fUldDICJSVyIKKyNkZWZpbmUgVElNUEFOSV9QQV9MSU5FX0FVWE9fRU5fUE9SIDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfUEFfTElORV9BVVhPX0VOX1MgMAorI2RlZmluZSBUSU1QQU5JX1BBX0xJTkVfQVVYT19FTl9NIDB4RkYKKyNkZWZpbmUgVElNUEFOSV9QQV9MSU5FX0FVWE9fRU5fTElORV9MX0VOX1MgNworI2RlZmluZSBUSU1QQU5JX1BBX0xJTkVfQVVYT19FTl9MSU5FX0xfRU5fTSAweDgwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX1BBX0xJTkVfQVVYT19FTl9MSU5FX0xfRU5fRU5BQkxFIDB4MQorI2RlZmluZSBUSU1QQU5JX1BBX0xJTkVfQVVYT19FTl9MSU5FX0xfRU5fRElTQUJMRSAweDAKKyNkZWZpbmUgVElNUEFOSV9QQV9MSU5FX0FVWE9fRU5fTElORV9MX0JJQVNfRU5fUyA2CisjZGVmaW5lIFRJTVBBTklfUEFfTElORV9BVVhPX0VOX0xJTkVfTF9CSUFTX0VOX00gMHg0MAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9QQV9MSU5FX0FVWE9fRU5fTElORV9MX0JJQVNfRU5fRU5BQkxFIDB4MQorI2RlZmluZSBUSU1QQU5JX1BBX0xJTkVfQVVYT19FTl9MSU5FX0xfQklBU19FTl9ESVNBQkxFIDB4MAorI2RlZmluZSBUSU1QQU5JX1BBX0xJTkVfQVVYT19FTl9MSU5FX1JfRU5fUyA1CisjZGVmaW5lIFRJTVBBTklfUEFfTElORV9BVVhPX0VOX0xJTkVfUl9FTl9NIDB4MjAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfUEFfTElORV9BVVhPX0VOX0xJTkVfUl9FTl9FTkFCTEUgMHgxCisjZGVmaW5lIFRJTVBBTklfUEFfTElORV9BVVhPX0VOX0xJTkVfUl9FTl9ESVNBQkxFIDB4MAorI2RlZmluZSBUSU1QQU5JX1BBX0xJTkVfQVVYT19FTl9MSU5FX1JfQklBU19FTl9TIDQKKyNkZWZpbmUgVElNUEFOSV9QQV9MSU5FX0FVWE9fRU5fTElORV9SX0JJQVNfRU5fTSAweDEwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX1BBX0xJTkVfQVVYT19FTl9MSU5FX1JfQklBU19FTl9FTkFCTEUgMHgxCisjZGVmaW5lIFRJTVBBTklfUEFfTElORV9BVVhPX0VOX0xJTkVfUl9CSUFTX0VOX0RJU0FCTEUgMHgwCisjZGVmaW5lIFRJTVBBTklfUEFfTElORV9BVVhPX0VOX0xJTkVfVkNNX0JVRkZFUl9FTl9TIDMKKyNkZWZpbmUgVElNUEFOSV9QQV9MSU5FX0FVWE9fRU5fTElORV9WQ01fQlVGRkVSX0VOX00gMHg4CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX1BBX0xJTkVfQVVYT19FTl9MSU5FX1ZDTV9CVUZGRVJfRU5fRU5BQkxFIDB4MQorI2RlZmluZSBUSU1QQU5JX1BBX0xJTkVfQVVYT19FTl9MSU5FX1ZDTV9CVUZGRVJfRU5fRElTQUJMRSAweDAKKyNkZWZpbmUgVElNUEFOSV9QQV9MSU5FX0FVWE9fRU5fQVVYT1VUX0VOX1MgMgorI2RlZmluZSBUSU1QQU5JX1BBX0xJTkVfQVVYT19FTl9BVVhPVVRfRU5fTSAweDQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfUEFfTElORV9BVVhPX0VOX0FVWE9VVF9FTl9FTkFCTEUgMHgxCisjZGVmaW5lIFRJTVBBTklfUEFfTElORV9BVVhPX0VOX0FVWE9VVF9FTl9ESVNBQkxFIDB4MAorI2RlZmluZSBUSU1QQU5JX1BBX0xJTkVfQVVYT19FTl9BVVhPVVRfQklBU19FTl9TIDEKKyNkZWZpbmUgVElNUEFOSV9QQV9MSU5FX0FVWE9fRU5fQVVYT1VUX0JJQVNfRU5fTSAweDIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfUEFfTElORV9BVVhPX0VOX0FVWE9VVF9CSUFTX0VOX0VOQUJMRSAweDEKKyNkZWZpbmUgVElNUEFOSV9QQV9MSU5FX0FVWE9fRU5fQVVYT1VUX0JJQVNfRU5fRElTQUJMRSAweDAKKyNkZWZpbmUgVElNUEFOSV9QQV9MSU5FX0FVWE9fRU5fQVVYT1VUX1ZDTV9CVUZGRVJfRU5fUyAwCisjZGVmaW5lIFRJTVBBTklfUEFfTElORV9BVVhPX0VOX0FVWE9VVF9WQ01fQlVGRkVSX0VOX00gMHgxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX1BBX0xJTkVfQVVYT19FTl9BVVhPVVRfVkNNX0JVRkZFUl9FTl9FTkFCTEUgMHgxCisjZGVmaW5lIFRJTVBBTklfUEFfTElORV9BVVhPX0VOX0FVWE9VVF9WQ01fQlVGRkVSX0VOX0RJU0FCTEUgMHgwCisjZGVmaW5lIFRJTVBBTklfQV9QQV9DTEFTU0RfQVVYUEdBX0VOICgweDMzKQorI2RlZmluZSBUSU1QQU5JX1BBX0NMQVNTRF9BVVhQR0FfRU5fUldDICJSVyIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfUEFfQ0xBU1NEX0FVWFBHQV9FTl9QT1IgMAorI2RlZmluZSBUSU1QQU5JX1BBX0NMQVNTRF9BVVhQR0FfRU5fUyAwCisjZGVmaW5lIFRJTVBBTklfUEFfQ0xBU1NEX0FVWFBHQV9FTl9NIDB4RkYKKyNkZWZpbmUgVElNUEFOSV9QQV9DTEFTU0RfQVVYUEdBX0VOX0FVWFBHQV9MX01VVEVfUyA3CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX1BBX0NMQVNTRF9BVVhQR0FfRU5fQVVYUEdBX0xfTVVURV9NIDB4ODAKKyNkZWZpbmUgVElNUEFOSV9QQV9DTEFTU0RfQVVYUEdBX0VOX0FVWFBHQV9MX01VVEVfTVVURSAweDEKKyNkZWZpbmUgVElNUEFOSV9QQV9DTEFTU0RfQVVYUEdBX0VOX0FVWFBHQV9MX01VVEVfVU5NVVRFIDB4MAorI2RlZmluZSBUSU1QQU5JX1BBX0NMQVNTRF9BVVhQR0FfRU5fQVVYUEdBX1JfTVVURV9TIDYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfUEFfQ0xBU1NEX0FVWFBHQV9FTl9BVVhQR0FfUl9NVVRFX00gMHg0MAorI2RlZmluZSBUSU1QQU5JX1BBX0NMQVNTRF9BVVhQR0FfRU5fQVVYUEdBX1JfTVVURV9NVVRFIDB4MQorI2RlZmluZSBUSU1QQU5JX1BBX0NMQVNTRF9BVVhQR0FfRU5fQVVYUEdBX1JfTVVURV9VTk1VVEUgMHgwCisjZGVmaW5lIFRJTVBBTklfUEFfQ0xBU1NEX0FVWFBHQV9FTl9BVVhQR0FfTF9FTl9TIDUKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfUEFfQ0xBU1NEX0FVWFBHQV9FTl9BVVhQR0FfTF9FTl9NIDB4MjAKKyNkZWZpbmUgVElNUEFOSV9QQV9DTEFTU0RfQVVYUEdBX0VOX0FVWFBHQV9MX0VOX0RJU0FCTEUgMHgwCisjZGVmaW5lIFRJTVBBTklfUEFfQ0xBU1NEX0FVWFBHQV9FTl9BVVhQR0FfTF9FTl9FTkFCTEUgMHgxCisjZGVmaW5lIFRJTVBBTklfUEFfQ0xBU1NEX0FVWFBHQV9FTl9BVVhQR0FfUl9FTl9TIDQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfUEFfQ0xBU1NEX0FVWFBHQV9FTl9BVVhQR0FfUl9FTl9NIDB4MTAKKyNkZWZpbmUgVElNUEFOSV9QQV9DTEFTU0RfQVVYUEdBX0VOX0FVWFBHQV9SX0VOX0RJU0FCTEUgMHgwCisjZGVmaW5lIFRJTVBBTklfUEFfQ0xBU1NEX0FVWFBHQV9FTl9BVVhQR0FfUl9FTl9FTkFCTEUgMHgxCisjZGVmaW5lIFRJTVBBTklfUEFfQ0xBU1NEX0FVWFBHQV9FTl9DTEFTU0RfTF9SRUZfRU5fUyAzCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX1BBX0NMQVNTRF9BVVhQR0FfRU5fQ0xBU1NEX0xfUkVGX0VOX00gMHg4CisjZGVmaW5lIFRJTVBBTklfUEFfQ0xBU1NEX0FVWFBHQV9FTl9DTEFTU0RfTF9SRUZfRU5fRElTQUJMRSAweDAKKyNkZWZpbmUgVElNUEFOSV9QQV9DTEFTU0RfQVVYUEdBX0VOX0NMQVNTRF9MX1JFRl9FTl9FTkFCTEUgMHgxCisjZGVmaW5lIFRJTVBBTklfUEFfQ0xBU1NEX0FVWFBHQV9FTl9DTEFTU0RfTF9FTl9TIDIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfUEFfQ0xBU1NEX0FVWFBHQV9FTl9DTEFTU0RfTF9FTl9NIDB4NAorI2RlZmluZSBUSU1QQU5JX1BBX0NMQVNTRF9BVVhQR0FfRU5fQ0xBU1NEX0xfRU5fRElTQUJMRSAweDAKKyNkZWZpbmUgVElNUEFOSV9QQV9DTEFTU0RfQVVYUEdBX0VOX0NMQVNTRF9MX0VOX0VOQUJMRSAweDEKKyNkZWZpbmUgVElNUEFOSV9QQV9DTEFTU0RfQVVYUEdBX0VOX0NMQVNTRF9SX1JFRl9FTl9TIDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfUEFfQ0xBU1NEX0FVWFBHQV9FTl9DTEFTU0RfUl9SRUZfRU5fTSAweDIKKyNkZWZpbmUgVElNUEFOSV9QQV9DTEFTU0RfQVVYUEdBX0VOX0NMQVNTRF9SX1JFRl9FTl9ESVNBQkxFIDB4MAorI2RlZmluZSBUSU1QQU5JX1BBX0NMQVNTRF9BVVhQR0FfRU5fQ0xBU1NEX1JfUkVGX0VOX0VOQUJMRSAweDEKKyNkZWZpbmUgVElNUEFOSV9QQV9DTEFTU0RfQVVYUEdBX0VOX0NMQVNTRF9SX0VOX1MgMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9QQV9DTEFTU0RfQVVYUEdBX0VOX0NMQVNTRF9SX0VOX00gMHgxCisjZGVmaW5lIFRJTVBBTklfUEFfQ0xBU1NEX0FVWFBHQV9FTl9DTEFTU0RfUl9FTl9ESVNBQkxFIDB4MAorI2RlZmluZSBUSU1QQU5JX1BBX0NMQVNTRF9BVVhQR0FfRU5fQ0xBU1NEX1JfRU5fRU5BQkxFIDB4MQorI2RlZmluZSBUSU1QQU5JX0FfUEFfTElORV9MX0dBSU4gKDB4MzQpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX1BBX0xJTkVfTF9HQUlOX1JXQyAiUlciCisjZGVmaW5lIFRJTVBBTklfUEFfTElORV9MX0dBSU5fUE9SIDB4YWMKKyNkZWZpbmUgVElNUEFOSV9QQV9MSU5FX0xfR0FJTl9TIDAKKyNkZWZpbmUgVElNUEFOSV9QQV9MSU5FX0xfR0FJTl9NIDB4RkYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfUEFfTElORV9MX0dBSU5fTElORV9MX0dBSU5fUyAyCisjZGVmaW5lIFRJTVBBTklfUEFfTElORV9MX0dBSU5fTElORV9MX0dBSU5fTSAweEZDCisjZGVmaW5lIFRJTVBBTklfUEFfTElORV9MX0dBSU5fTElORV9MX0dBSU5fUE9TXzFfNSAweDAKKyNkZWZpbmUgVElNUEFOSV9QQV9MSU5FX0xfR0FJTl9MSU5FX0xfR0FJTl9QT1NfMF8wIDB4MQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9QQV9MSU5FX0xfR0FJTl9MSU5FX0xfR0FJTl9ORUdfMV81IDB4MgorI2RlZmluZSBUSU1QQU5JX1BBX0xJTkVfTF9HQUlOX0xJTkVfTF9HQUlOX05FR18zXzAgMHgzCisjZGVmaW5lIFRJTVBBTklfUEFfTElORV9MX0dBSU5fTElORV9MX0dBSU5fTkVHXzRfNSAweDQKKyNkZWZpbmUgVElNUEFOSV9QQV9MSU5FX0xfR0FJTl9MSU5FX0xfR0FJTl9ORUdfNl8wIDB4NQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9QQV9MSU5FX0xfR0FJTl9MSU5FX0xfR0FJTl9ORUdfN181IDB4NgorI2RlZmluZSBUSU1QQU5JX1BBX0xJTkVfTF9HQUlOX0xJTkVfTF9HQUlOX05FR185XzAgMHg3CisjZGVmaW5lIFRJTVBBTklfUEFfTElORV9MX0dBSU5fTElORV9MX0dBSU5fTkVHXzEwXzUgMHg4CisjZGVmaW5lIFRJTVBBTklfUEFfTElORV9MX0dBSU5fTElORV9MX0dBSU5fTkVHXzEyXzAgMHg5CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX1BBX0xJTkVfTF9HQUlOX0xJTkVfTF9HQUlOX05FR18xM181IDB4QQorI2RlZmluZSBUSU1QQU5JX1BBX0xJTkVfTF9HQUlOX0xJTkVfTF9HQUlOX05FR18xNV8wIDB4QgorI2RlZmluZSBUSU1QQU5JX1BBX0xJTkVfTF9HQUlOX0xJTkVfTF9HQUlOX05FR18xNl81IDB4QworI2RlZmluZSBUSU1QQU5JX1BBX0xJTkVfTF9HQUlOX0xJTkVfTF9HQUlOX05FR18xOF8wIDB4RAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9QQV9MSU5FX0xfR0FJTl9MSU5FX0xfR0FJTl9ORUdfMTlfNSAweEUKKyNkZWZpbmUgVElNUEFOSV9QQV9MSU5FX0xfR0FJTl9MSU5FX0xfR0FJTl9ORUdfMjFfMCAweEYKKyNkZWZpbmUgVElNUEFOSV9QQV9MSU5FX0xfR0FJTl9MSU5FX0xfR0FJTl9ORUdfMjJfNSAweDEwCisjZGVmaW5lIFRJTVBBTklfUEFfTElORV9MX0dBSU5fTElORV9MX0dBSU5fTkVHXzI0XzAgMHgxMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9QQV9MSU5FX0xfR0FJTl9MSU5FX0xfR0FJTl9ORUdfMjVfNSAweDEyCisjZGVmaW5lIFRJTVBBTklfUEFfTElORV9MX0dBSU5fTElORV9MX0dBSU5fTkVHXzI3XzAgMHgxMworI2RlZmluZSBUSU1QQU5JX1BBX0xJTkVfTF9HQUlOX0xJTkVfTF9HQUlOX05FR18yOF81IDB4MTQKKyNkZWZpbmUgVElNUEFOSV9QQV9MSU5FX0xfR0FJTl9MSU5FX0xfR0FJTl9ORUdfMzBfMCAweDE1CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX1BBX0xJTkVfTF9HQUlOX0xJTkVfTF9HQUlOX05FR18zMV81IDB4MTYKKyNkZWZpbmUgVElNUEFOSV9QQV9MSU5FX0xfR0FJTl9MSU5FX0xfR0FJTl9ORUdfMzNfMCAweDE3CisjZGVmaW5lIFRJTVBBTklfUEFfTElORV9MX0dBSU5fTElORV9MX0dBSU5fTkVHXzM0XzUgMHgxOAorI2RlZmluZSBUSU1QQU5JX1BBX0xJTkVfTF9HQUlOX0xJTkVfTF9HQUlOX05FR18zNl8wIDB4MTkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfUEFfTElORV9MX0dBSU5fTElORV9MX0dBSU5fTkVHXzM3XzUgMHgxQQorI2RlZmluZSBUSU1QQU5JX1BBX0xJTkVfTF9HQUlOX0xJTkVfTF9HQUlOX05FR18zOV8wIDB4MUIKKyNkZWZpbmUgVElNUEFOSV9QQV9MSU5FX0xfR0FJTl9MSU5FX0xfR0FJTl9ORUdfNDBfNSAweDFDCisjZGVmaW5lIFRJTVBBTklfUEFfTElORV9MX0dBSU5fTElORV9MX0dBSU5fTkVHXzQyXzAgMHgxRAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9QQV9MSU5FX0xfR0FJTl9MSU5FX0xfR0FJTl9ORUdfNDNfNSAweDFFCisjZGVmaW5lIFRJTVBBTklfUEFfTElORV9MX0dBSU5fTElORV9MX0dBSU5fTkVHXzQ1XzAgMHgxRgorI2RlZmluZSBUSU1QQU5JX1BBX0xJTkVfTF9HQUlOX0xJTkVfTF9HQUlOX05FR180Nl81IDB4MjAKKyNkZWZpbmUgVElNUEFOSV9QQV9MSU5FX0xfR0FJTl9MSU5FX0xfR0FJTl9ORUdfNDhfMCAweDIxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX1BBX0xJTkVfTF9HQUlOX0xJTkVfTF9HQUlOX05FR180OV81IDB4MjIKKyNkZWZpbmUgVElNUEFOSV9QQV9MSU5FX0xfR0FJTl9MSU5FX0xfR0FJTl9ORUdfNTFfMCAweDIzCisjZGVmaW5lIFRJTVBBTklfUEFfTElORV9MX0dBSU5fTElORV9MX0dBSU5fTkVHXzUyXzUgMHgyNAorI2RlZmluZSBUSU1QQU5JX1BBX0xJTkVfTF9HQUlOX0xJTkVfTF9HQUlOX05FR181NF8wIDB4MjUKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfUEFfTElORV9MX0dBSU5fTElORV9MX0dBSU5fTkVHXzU1XzUgMHgyNgorI2RlZmluZSBUSU1QQU5JX1BBX0xJTkVfTF9HQUlOX0xJTkVfTF9HQUlOX05FR181N18wIDB4MjcKKyNkZWZpbmUgVElNUEFOSV9QQV9MSU5FX0xfR0FJTl9MSU5FX0xfR0FJTl9ORUdfNThfNSAweDI4CisjZGVmaW5lIFRJTVBBTklfUEFfTElORV9MX0dBSU5fTElORV9MX0dBSU5fTkVHXzYwXzAgMHgyOQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9QQV9MSU5FX0xfR0FJTl9MSU5FX0xfR0FJTl9ORUdfNjFfNSAweDJBCisjZGVmaW5lIFRJTVBBTklfUEFfTElORV9MX0dBSU5fTElORV9MX0dBSU5fTkVHXzYzXzAgMHgyQgorI2RlZmluZSBUSU1QQU5JX1BBX0xJTkVfTF9HQUlOX1JFU0VSVkVEX1MgMAorI2RlZmluZSBUSU1QQU5JX1BBX0xJTkVfTF9HQUlOX1JFU0VSVkVEX00gMHgzCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX0FfUEFfTElORV9SX0dBSU4gKDB4MzUpCisjZGVmaW5lIFRJTVBBTklfUEFfTElORV9SX0dBSU5fUldDICJSVyIKKyNkZWZpbmUgVElNUEFOSV9QQV9MSU5FX1JfR0FJTl9QT1IgMHhhYworI2RlZmluZSBUSU1QQU5JX1BBX0xJTkVfUl9HQUlOX1MgMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9QQV9MSU5FX1JfR0FJTl9NIDB4RkYKKyNkZWZpbmUgVElNUEFOSV9QQV9MSU5FX1JfR0FJTl9MSU5FX1JfR0FJTl9TIDIKKyNkZWZpbmUgVElNUEFOSV9QQV9MSU5FX1JfR0FJTl9MSU5FX1JfR0FJTl9NIDB4RkMKKyNkZWZpbmUgVElNUEFOSV9QQV9MSU5FX1JfR0FJTl9MSU5FX1JfR0FJTl9QT1NfMV81IDB4MAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9QQV9MSU5FX1JfR0FJTl9MSU5FX1JfR0FJTl9QT1NfMF8wIDB4MQorI2RlZmluZSBUSU1QQU5JX1BBX0xJTkVfUl9HQUlOX0xJTkVfUl9HQUlOX05FR18xXzUgMHgyCisjZGVmaW5lIFRJTVBBTklfUEFfTElORV9SX0dBSU5fTElORV9SX0dBSU5fTkVHXzNfMCAweDMKKyNkZWZpbmUgVElNUEFOSV9QQV9MSU5FX1JfR0FJTl9MSU5FX1JfR0FJTl9ORUdfNF81IDB4NAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9QQV9MSU5FX1JfR0FJTl9MSU5FX1JfR0FJTl9ORUdfNl8wIDB4NQorI2RlZmluZSBUSU1QQU5JX1BBX0xJTkVfUl9HQUlOX0xJTkVfUl9HQUlOX05FR183XzUgMHg2CisjZGVmaW5lIFRJTVBBTklfUEFfTElORV9SX0dBSU5fTElORV9SX0dBSU5fTkVHXzlfMCAweDcKKyNkZWZpbmUgVElNUEFOSV9QQV9MSU5FX1JfR0FJTl9MSU5FX1JfR0FJTl9ORUdfMTBfNSAweDgKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfUEFfTElORV9SX0dBSU5fTElORV9SX0dBSU5fTkVHXzEyXzAgMHg5CisjZGVmaW5lIFRJTVBBTklfUEFfTElORV9SX0dBSU5fTElORV9SX0dBSU5fTkVHXzEzXzUgMHhBCisjZGVmaW5lIFRJTVBBTklfUEFfTElORV9SX0dBSU5fTElORV9SX0dBSU5fTkVHXzE1XzAgMHhCCisjZGVmaW5lIFRJTVBBTklfUEFfTElORV9SX0dBSU5fTElORV9SX0dBSU5fTkVHXzE2XzUgMHhDCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX1BBX0xJTkVfUl9HQUlOX0xJTkVfUl9HQUlOX05FR18xOF8wIDB4RAorI2RlZmluZSBUSU1QQU5JX1BBX0xJTkVfUl9HQUlOX0xJTkVfUl9HQUlOX05FR18xOV81IDB4RQorI2RlZmluZSBUSU1QQU5JX1BBX0xJTkVfUl9HQUlOX0xJTkVfUl9HQUlOX05FR18yMV8wIDB4RgorI2RlZmluZSBUSU1QQU5JX1BBX0xJTkVfUl9HQUlOX0xJTkVfUl9HQUlOX05FR18yMl81IDB4MTAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfUEFfTElORV9SX0dBSU5fTElORV9SX0dBSU5fTkVHXzI0XzAgMHgxMQorI2RlZmluZSBUSU1QQU5JX1BBX0xJTkVfUl9HQUlOX0xJTkVfUl9HQUlOX05FR18yNV81IDB4MTIKKyNkZWZpbmUgVElNUEFOSV9QQV9MSU5FX1JfR0FJTl9MSU5FX1JfR0FJTl9ORUdfMjdfMCAweDEzCisjZGVmaW5lIFRJTVBBTklfUEFfTElORV9SX0dBSU5fTElORV9SX0dBSU5fTkVHXzI4XzUgMHgxNAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9QQV9MSU5FX1JfR0FJTl9MSU5FX1JfR0FJTl9ORUdfMzBfMCAweDE1CisjZGVmaW5lIFRJTVBBTklfUEFfTElORV9SX0dBSU5fTElORV9SX0dBSU5fTkVHXzMxXzUgMHgxNgorI2RlZmluZSBUSU1QQU5JX1BBX0xJTkVfUl9HQUlOX0xJTkVfUl9HQUlOX05FR18zM18wIDB4MTcKKyNkZWZpbmUgVElNUEFOSV9QQV9MSU5FX1JfR0FJTl9MSU5FX1JfR0FJTl9ORUdfMzRfNSAweDE4CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX1BBX0xJTkVfUl9HQUlOX0xJTkVfUl9HQUlOX05FR18zNl8wIDB4MTkKKyNkZWZpbmUgVElNUEFOSV9QQV9MSU5FX1JfR0FJTl9MSU5FX1JfR0FJTl9ORUdfMzdfNSAweDFBCisjZGVmaW5lIFRJTVBBTklfUEFfTElORV9SX0dBSU5fTElORV9SX0dBSU5fTkVHXzM5XzAgMHgxQgorI2RlZmluZSBUSU1QQU5JX1BBX0xJTkVfUl9HQUlOX0xJTkVfUl9HQUlOX05FR180MF81IDB4MUMKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfUEFfTElORV9SX0dBSU5fTElORV9SX0dBSU5fTkVHXzQyXzAgMHgxRAorI2RlZmluZSBUSU1QQU5JX1BBX0xJTkVfUl9HQUlOX0xJTkVfUl9HQUlOX05FR180M181IDB4MUUKKyNkZWZpbmUgVElNUEFOSV9QQV9MSU5FX1JfR0FJTl9MSU5FX1JfR0FJTl9ORUdfNDVfMCAweDFGCisjZGVmaW5lIFRJTVBBTklfUEFfTElORV9SX0dBSU5fTElORV9SX0dBSU5fTkVHXzQ2XzUgMHgyMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9QQV9MSU5FX1JfR0FJTl9MSU5FX1JfR0FJTl9ORUdfNDhfMCAweDIxCisjZGVmaW5lIFRJTVBBTklfUEFfTElORV9SX0dBSU5fTElORV9SX0dBSU5fTkVHXzQ5XzUgMHgyMgorI2RlZmluZSBUSU1QQU5JX1BBX0xJTkVfUl9HQUlOX0xJTkVfUl9HQUlOX05FR181MV8wIDB4MjMKKyNkZWZpbmUgVElNUEFOSV9QQV9MSU5FX1JfR0FJTl9MSU5FX1JfR0FJTl9ORUdfNTJfNSAweDI0CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX1BBX0xJTkVfUl9HQUlOX0xJTkVfUl9HQUlOX05FR181NF8wIDB4MjUKKyNkZWZpbmUgVElNUEFOSV9QQV9MSU5FX1JfR0FJTl9MSU5FX1JfR0FJTl9ORUdfNTVfNSAweDI2CisjZGVmaW5lIFRJTVBBTklfUEFfTElORV9SX0dBSU5fTElORV9SX0dBSU5fTkVHXzU3XzAgMHgyNworI2RlZmluZSBUSU1QQU5JX1BBX0xJTkVfUl9HQUlOX0xJTkVfUl9HQUlOX05FR181OF81IDB4MjgKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfUEFfTElORV9SX0dBSU5fTElORV9SX0dBSU5fTkVHXzYwXzAgMHgyOQorI2RlZmluZSBUSU1QQU5JX1BBX0xJTkVfUl9HQUlOX0xJTkVfUl9HQUlOX05FR182MV81IDB4MkEKKyNkZWZpbmUgVElNUEFOSV9QQV9MSU5FX1JfR0FJTl9MSU5FX1JfR0FJTl9ORUdfNjNfMCAweDJCCisjZGVmaW5lIFRJTVBBTklfUEFfTElORV9SX0dBSU5fUkVTRVJWRURfUyAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX1BBX0xJTkVfUl9HQUlOX1JFU0VSVkVEX00gMHgzCisjZGVmaW5lIFRJTVBBTklfQV9QQV9IUEhfTF9HQUlOICgweDM2KQorI2RlZmluZSBUSU1QQU5JX1BBX0hQSF9MX0dBSU5fUldDICJSVyIKKyNkZWZpbmUgVElNUEFOSV9QQV9IUEhfTF9HQUlOX1BPUiAweGFlCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX1BBX0hQSF9MX0dBSU5fUyAwCisjZGVmaW5lIFRJTVBBTklfUEFfSFBIX0xfR0FJTl9NIDB4RkYKKyNkZWZpbmUgVElNUEFOSV9QQV9IUEhfTF9HQUlOX0hQSF9MX0dBSU5fUyAyCisjZGVmaW5lIFRJTVBBTklfUEFfSFBIX0xfR0FJTl9IUEhfTF9HQUlOX00gMHhGQworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9QQV9IUEhfTF9HQUlOX0hQSF9MX0dBSU5fUE9TXzFfNSAweDAKKyNkZWZpbmUgVElNUEFOSV9QQV9IUEhfTF9HQUlOX0hQSF9MX0dBSU5fUE9TXzBfMCAweDEKKyNkZWZpbmUgVElNUEFOSV9QQV9IUEhfTF9HQUlOX0hQSF9MX0dBSU5fTkVHXzFfNSAweDIKKyNkZWZpbmUgVElNUEFOSV9QQV9IUEhfTF9HQUlOX0hQSF9MX0dBSU5fTkVHXzNfMCAweDMKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfUEFfSFBIX0xfR0FJTl9IUEhfTF9HQUlOX05FR180XzUgMHg0CisjZGVmaW5lIFRJTVBBTklfUEFfSFBIX0xfR0FJTl9IUEhfTF9HQUlOX05FR182XzAgMHg1CisjZGVmaW5lIFRJTVBBTklfUEFfSFBIX0xfR0FJTl9IUEhfTF9HQUlOX05FR183XzUgMHg2CisjZGVmaW5lIFRJTVBBTklfUEFfSFBIX0xfR0FJTl9IUEhfTF9HQUlOX05FR185XzAgMHg3CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX1BBX0hQSF9MX0dBSU5fSFBIX0xfR0FJTl9ORUdfMTBfNSAweDgKKyNkZWZpbmUgVElNUEFOSV9QQV9IUEhfTF9HQUlOX0hQSF9MX0dBSU5fTkVHXzEyXzAgMHg5CisjZGVmaW5lIFRJTVBBTklfUEFfSFBIX0xfR0FJTl9IUEhfTF9HQUlOX05FR18xM181IDB4QQorI2RlZmluZSBUSU1QQU5JX1BBX0hQSF9MX0dBSU5fSFBIX0xfR0FJTl9ORUdfMTVfMCAweEIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfUEFfSFBIX0xfR0FJTl9IUEhfTF9HQUlOX05FR18xNl81IDB4QworI2RlZmluZSBUSU1QQU5JX1BBX0hQSF9MX0dBSU5fSFBIX0xfR0FJTl9ORUdfMThfMCAweEQKKyNkZWZpbmUgVElNUEFOSV9QQV9IUEhfTF9HQUlOX0hQSF9MX0dBSU5fTkVHXzE5XzUgMHhFCisjZGVmaW5lIFRJTVBBTklfUEFfSFBIX0xfR0FJTl9IUEhfTF9HQUlOX05FR18yMV8wIDB4RgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9QQV9IUEhfTF9HQUlOX0hQSF9MX0dBSU5fTkVHXzIyXzUgMHgxMAorI2RlZmluZSBUSU1QQU5JX1BBX0hQSF9MX0dBSU5fSFBIX0xfR0FJTl9ORUdfMjRfMCAweDExCisjZGVmaW5lIFRJTVBBTklfUEFfSFBIX0xfR0FJTl9IUEhfTF9HQUlOX05FR18yNV81IDB4MTIKKyNkZWZpbmUgVElNUEFOSV9QQV9IUEhfTF9HQUlOX0hQSF9MX0dBSU5fTkVHXzI3XzAgMHgxMworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9QQV9IUEhfTF9HQUlOX0hQSF9MX0dBSU5fTkVHXzI4XzUgMHgxNAorI2RlZmluZSBUSU1QQU5JX1BBX0hQSF9MX0dBSU5fSFBIX0xfR0FJTl9ORUdfMzBfMCAweDE1CisjZGVmaW5lIFRJTVBBTklfUEFfSFBIX0xfR0FJTl9IUEhfTF9HQUlOX05FR18zMV81IDB4MTYKKyNkZWZpbmUgVElNUEFOSV9QQV9IUEhfTF9HQUlOX0hQSF9MX0dBSU5fTkVHXzMzXzAgMHgxNworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9QQV9IUEhfTF9HQUlOX0hQSF9MX0dBSU5fTkVHXzM0XzUgMHgxOAorI2RlZmluZSBUSU1QQU5JX1BBX0hQSF9MX0dBSU5fSFBIX0xfR0FJTl9ORUdfMzZfMCAweDE5CisjZGVmaW5lIFRJTVBBTklfUEFfSFBIX0xfR0FJTl9IUEhfTF9HQUlOX05FR18zN181IDB4MUEKKyNkZWZpbmUgVElNUEFOSV9QQV9IUEhfTF9HQUlOX0hQSF9MX0dBSU5fTkVHXzM5XzAgMHgxQgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9QQV9IUEhfTF9HQUlOX0hQSF9MX0dBSU5fTkVHXzQwXzUgMHgxQworI2RlZmluZSBUSU1QQU5JX1BBX0hQSF9MX0dBSU5fSFBIX0xfR0FJTl9ORUdfNDJfMCAweDFECisjZGVmaW5lIFRJTVBBTklfUEFfSFBIX0xfR0FJTl9IUEhfTF9HQUlOX05FR180M181IDB4MUUKKyNkZWZpbmUgVElNUEFOSV9QQV9IUEhfTF9HQUlOX0hQSF9MX0dBSU5fTkVHXzQ1XzAgMHgxRgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9QQV9IUEhfTF9HQUlOX0hQSF9MX0dBSU5fTkVHXzQ2XzUgMHgyMAorI2RlZmluZSBUSU1QQU5JX1BBX0hQSF9MX0dBSU5fSFBIX0xfR0FJTl9ORUdfNDhfMCAweDIxCisjZGVmaW5lIFRJTVBBTklfUEFfSFBIX0xfR0FJTl9IUEhfTF9HQUlOX05FR180OV81IDB4MjIKKyNkZWZpbmUgVElNUEFOSV9QQV9IUEhfTF9HQUlOX0hQSF9MX0dBSU5fTkVHXzUxXzAgMHgyMworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9QQV9IUEhfTF9HQUlOX0hQSF9MX0dBSU5fTkVHXzUyXzUgMHgyNAorI2RlZmluZSBUSU1QQU5JX1BBX0hQSF9MX0dBSU5fSFBIX0xfR0FJTl9ORUdfNTRfMCAweDI1CisjZGVmaW5lIFRJTVBBTklfUEFfSFBIX0xfR0FJTl9IUEhfTF9HQUlOX05FR181NV81IDB4MjYKKyNkZWZpbmUgVElNUEFOSV9QQV9IUEhfTF9HQUlOX0hQSF9MX0dBSU5fTkVHXzU3XzAgMHgyNworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9QQV9IUEhfTF9HQUlOX0hQSF9MX0dBSU5fTkVHXzU4XzUgMHgyOAorI2RlZmluZSBUSU1QQU5JX1BBX0hQSF9MX0dBSU5fSFBIX0xfR0FJTl9ORUdfNjBfMCAweDI5CisjZGVmaW5lIFRJTVBBTklfUEFfSFBIX0xfR0FJTl9IUEhfTF9HQUlOX05FR182MV81IDB4MkEKKyNkZWZpbmUgVElNUEFOSV9QQV9IUEhfTF9HQUlOX0hQSF9MX0dBSU5fTkVHXzYzXzAgMHgyQgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9QQV9IUEhfTF9HQUlOX0hQSF9MX01VVEVfUyAxCisjZGVmaW5lIFRJTVBBTklfUEFfSFBIX0xfR0FJTl9IUEhfTF9NVVRFX00gMHgyCisjZGVmaW5lIFRJTVBBTklfUEFfSFBIX0xfR0FJTl9IUEhfTF9NVVRFX01VVEUgMHgxCisjZGVmaW5lIFRJTVBBTklfUEFfSFBIX0xfR0FJTl9IUEhfTF9NVVRFX1VOTVVURSAweDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfUEFfSFBIX0xfR0FJTl9SRVNFUlZFRF9TIDAKKyNkZWZpbmUgVElNUEFOSV9QQV9IUEhfTF9HQUlOX1JFU0VSVkVEX00gMHgxCisjZGVmaW5lIFRJTVBBTklfQV9QQV9IUEhfUl9HQUlOICgweDM3KQorI2RlZmluZSBUSU1QQU5JX1BBX0hQSF9SX0dBSU5fUldDICJSVyIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfUEFfSFBIX1JfR0FJTl9QT1IgMHhhZQorI2RlZmluZSBUSU1QQU5JX1BBX0hQSF9SX0dBSU5fUyAwCisjZGVmaW5lIFRJTVBBTklfUEFfSFBIX1JfR0FJTl9NIDB4RkYKKyNkZWZpbmUgVElNUEFOSV9QQV9IUEhfUl9HQUlOX0hQSF9SX0dBSU5fUyAyCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX1BBX0hQSF9SX0dBSU5fSFBIX1JfR0FJTl9NIDB4RkMKKyNkZWZpbmUgVElNUEFOSV9QQV9IUEhfUl9HQUlOX0hQSF9SX0dBSU5fUE9TXzFfNSAweDAKKyNkZWZpbmUgVElNUEFOSV9QQV9IUEhfUl9HQUlOX0hQSF9SX0dBSU5fUE9TXzBfMCAweDEKKyNkZWZpbmUgVElNUEFOSV9QQV9IUEhfUl9HQUlOX0hQSF9SX0dBSU5fTkVHXzFfNSAweDIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfUEFfSFBIX1JfR0FJTl9IUEhfUl9HQUlOX05FR18zXzAgMHgzCisjZGVmaW5lIFRJTVBBTklfUEFfSFBIX1JfR0FJTl9IUEhfUl9HQUlOX05FR180XzUgMHg0CisjZGVmaW5lIFRJTVBBTklfUEFfSFBIX1JfR0FJTl9IUEhfUl9HQUlOX05FR182XzAgMHg1CisjZGVmaW5lIFRJTVBBTklfUEFfSFBIX1JfR0FJTl9IUEhfUl9HQUlOX05FR183XzUgMHg2CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX1BBX0hQSF9SX0dBSU5fSFBIX1JfR0FJTl9ORUdfOV8wIDB4NworI2RlZmluZSBUSU1QQU5JX1BBX0hQSF9SX0dBSU5fSFBIX1JfR0FJTl9ORUdfMTBfNSAweDgKKyNkZWZpbmUgVElNUEFOSV9QQV9IUEhfUl9HQUlOX0hQSF9SX0dBSU5fTkVHXzEyXzAgMHg5CisjZGVmaW5lIFRJTVBBTklfUEFfSFBIX1JfR0FJTl9IUEhfUl9HQUlOX05FR18xM181IDB4QQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9QQV9IUEhfUl9HQUlOX0hQSF9SX0dBSU5fTkVHXzE1XzAgMHhCCisjZGVmaW5lIFRJTVBBTklfUEFfSFBIX1JfR0FJTl9IUEhfUl9HQUlOX05FR18xNl81IDB4QworI2RlZmluZSBUSU1QQU5JX1BBX0hQSF9SX0dBSU5fSFBIX1JfR0FJTl9ORUdfMThfMCAweEQKKyNkZWZpbmUgVElNUEFOSV9QQV9IUEhfUl9HQUlOX0hQSF9SX0dBSU5fTkVHXzE5XzUgMHhFCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX1BBX0hQSF9SX0dBSU5fSFBIX1JfR0FJTl9ORUdfMjFfMCAweEYKKyNkZWZpbmUgVElNUEFOSV9QQV9IUEhfUl9HQUlOX0hQSF9SX0dBSU5fTkVHXzIyXzUgMHgxMAorI2RlZmluZSBUSU1QQU5JX1BBX0hQSF9SX0dBSU5fSFBIX1JfR0FJTl9ORUdfMjRfMCAweDExCisjZGVmaW5lIFRJTVBBTklfUEFfSFBIX1JfR0FJTl9IUEhfUl9HQUlOX05FR18yNV81IDB4MTIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfUEFfSFBIX1JfR0FJTl9IUEhfUl9HQUlOX05FR18yN18wIDB4MTMKKyNkZWZpbmUgVElNUEFOSV9QQV9IUEhfUl9HQUlOX0hQSF9SX0dBSU5fTkVHXzI4XzUgMHgxNAorI2RlZmluZSBUSU1QQU5JX1BBX0hQSF9SX0dBSU5fSFBIX1JfR0FJTl9ORUdfMzBfMCAweDE1CisjZGVmaW5lIFRJTVBBTklfUEFfSFBIX1JfR0FJTl9IUEhfUl9HQUlOX05FR18zMV81IDB4MTYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfUEFfSFBIX1JfR0FJTl9IUEhfUl9HQUlOX05FR18zM18wIDB4MTcKKyNkZWZpbmUgVElNUEFOSV9QQV9IUEhfUl9HQUlOX0hQSF9SX0dBSU5fTkVHXzM0XzUgMHgxOAorI2RlZmluZSBUSU1QQU5JX1BBX0hQSF9SX0dBSU5fSFBIX1JfR0FJTl9ORUdfMzZfMCAweDE5CisjZGVmaW5lIFRJTVBBTklfUEFfSFBIX1JfR0FJTl9IUEhfUl9HQUlOX05FR18zN181IDB4MUEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfUEFfSFBIX1JfR0FJTl9IUEhfUl9HQUlOX05FR18zOV8wIDB4MUIKKyNkZWZpbmUgVElNUEFOSV9QQV9IUEhfUl9HQUlOX0hQSF9SX0dBSU5fTkVHXzQwXzUgMHgxQworI2RlZmluZSBUSU1QQU5JX1BBX0hQSF9SX0dBSU5fSFBIX1JfR0FJTl9ORUdfNDJfMCAweDFECisjZGVmaW5lIFRJTVBBTklfUEFfSFBIX1JfR0FJTl9IUEhfUl9HQUlOX05FR180M181IDB4MUUKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfUEFfSFBIX1JfR0FJTl9IUEhfUl9HQUlOX05FR180NV8wIDB4MUYKKyNkZWZpbmUgVElNUEFOSV9QQV9IUEhfUl9HQUlOX0hQSF9SX0dBSU5fTkVHXzQ2XzUgMHgyMAorI2RlZmluZSBUSU1QQU5JX1BBX0hQSF9SX0dBSU5fSFBIX1JfR0FJTl9ORUdfNDhfMCAweDIxCisjZGVmaW5lIFRJTVBBTklfUEFfSFBIX1JfR0FJTl9IUEhfUl9HQUlOX05FR180OV81IDB4MjIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfUEFfSFBIX1JfR0FJTl9IUEhfUl9HQUlOX05FR181MV8wIDB4MjMKKyNkZWZpbmUgVElNUEFOSV9QQV9IUEhfUl9HQUlOX0hQSF9SX0dBSU5fTkVHXzUyXzUgMHgyNAorI2RlZmluZSBUSU1QQU5JX1BBX0hQSF9SX0dBSU5fSFBIX1JfR0FJTl9ORUdfNTRfMCAweDI1CisjZGVmaW5lIFRJTVBBTklfUEFfSFBIX1JfR0FJTl9IUEhfUl9HQUlOX05FR181NV81IDB4MjYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfUEFfSFBIX1JfR0FJTl9IUEhfUl9HQUlOX05FR181N18wIDB4MjcKKyNkZWZpbmUgVElNUEFOSV9QQV9IUEhfUl9HQUlOX0hQSF9SX0dBSU5fTkVHXzU4XzUgMHgyOAorI2RlZmluZSBUSU1QQU5JX1BBX0hQSF9SX0dBSU5fSFBIX1JfR0FJTl9ORUdfNjBfMCAweDI5CisjZGVmaW5lIFRJTVBBTklfUEFfSFBIX1JfR0FJTl9IUEhfUl9HQUlOX05FR182MV81IDB4MkEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfUEFfSFBIX1JfR0FJTl9IUEhfUl9HQUlOX05FR182M18wIDB4MkIKKyNkZWZpbmUgVElNUEFOSV9QQV9IUEhfUl9HQUlOX0hQSF9SX01VVEVfUyAxCisjZGVmaW5lIFRJTVBBTklfUEFfSFBIX1JfR0FJTl9IUEhfUl9NVVRFX00gMHgyCisjZGVmaW5lIFRJTVBBTklfUEFfSFBIX1JfR0FJTl9IUEhfUl9NVVRFX01VVEUgMHgxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX1BBX0hQSF9SX0dBSU5fSFBIX1JfTVVURV9VTk1VVEUgMHgwCisjZGVmaW5lIFRJTVBBTklfUEFfSFBIX1JfR0FJTl9SRVNFUlZFRF9TIDAKKyNkZWZpbmUgVElNUEFOSV9QQV9IUEhfUl9HQUlOX1JFU0VSVkVEX00gMHgxCisjZGVmaW5lIFRJTVBBTklfQV9BVVhQR0FfTFJfR0FJTiAoMHgzOCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQVVYUEdBX0xSX0dBSU5fUldDICJSVyIKKyNkZWZpbmUgVElNUEFOSV9BVVhQR0FfTFJfR0FJTl9QT1IgMHhhYQorI2RlZmluZSBUSU1QQU5JX0FVWFBHQV9MUl9HQUlOX1MgMAorI2RlZmluZSBUSU1QQU5JX0FVWFBHQV9MUl9HQUlOX00gMHhGRgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9BVVhQR0FfTFJfR0FJTl9BVVhQR0FfTF9HQUlOX1MgNAorI2RlZmluZSBUSU1QQU5JX0FVWFBHQV9MUl9HQUlOX0FVWFBHQV9MX0dBSU5fTSAweEYwCisjZGVmaW5lIFRJTVBBTklfQVVYUEdBX0xSX0dBSU5fQVVYUEdBX0xfR0FJTl9ORUdfMzBEQiAweDAKKyNkZWZpbmUgVElNUEFOSV9BVVhQR0FfTFJfR0FJTl9BVVhQR0FfTF9HQUlOX05FR18yN0RCIDB4MQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9BVVhQR0FfTFJfR0FJTl9BVVhQR0FfTF9HQUlOX05FR18yNERCIDB4MgorI2RlZmluZSBUSU1QQU5JX0FVWFBHQV9MUl9HQUlOX0FVWFBHQV9MX0dBSU5fTkVHXzIxREIgMHgzCisjZGVmaW5lIFRJTVBBTklfQVVYUEdBX0xSX0dBSU5fQVVYUEdBX0xfR0FJTl9ORUdfMThEQiAweDQKKyNkZWZpbmUgVElNUEFOSV9BVVhQR0FfTFJfR0FJTl9BVVhQR0FfTF9HQUlOX05FR18xNURCIDB4NQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9BVVhQR0FfTFJfR0FJTl9BVVhQR0FfTF9HQUlOX05FR18xMkRCIDB4NgorI2RlZmluZSBUSU1QQU5JX0FVWFBHQV9MUl9HQUlOX0FVWFBHQV9MX0dBSU5fTkVHXzlfMERCIDB4NworI2RlZmluZSBUSU1QQU5JX0FVWFBHQV9MUl9HQUlOX0FVWFBHQV9MX0dBSU5fTkVHXzZfMERCIDB4OAorI2RlZmluZSBUSU1QQU5JX0FVWFBHQV9MUl9HQUlOX0FVWFBHQV9MX0dBSU5fTkVHXzNfMERCIDB4OQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9BVVhQR0FfTFJfR0FJTl9BVVhQR0FfTF9HQUlOX1BPU18wXzBEQiAweEEKKyNkZWZpbmUgVElNUEFOSV9BVVhQR0FfTFJfR0FJTl9BVVhQR0FfTF9HQUlOX1BPU18zXzBEQiAweEIKKyNkZWZpbmUgVElNUEFOSV9BVVhQR0FfTFJfR0FJTl9BVVhQR0FfTF9HQUlOX1BPU182XzBEQiAweEMKKyNkZWZpbmUgVElNUEFOSV9BVVhQR0FfTFJfR0FJTl9BVVhQR0FfTF9HQUlOX1BPU185XzBEQiAweEQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQVVYUEdBX0xSX0dBSU5fQVVYUEdBX0xfR0FJTl9QT1NfMTJfMERCXzEgMHhFCisjZGVmaW5lIFRJTVBBTklfQVVYUEdBX0xSX0dBSU5fQVVYUEdBX0xfR0FJTl9QT1NfMTJfMERCXzIgMHhGCisjZGVmaW5lIFRJTVBBTklfQVVYUEdBX0xSX0dBSU5fQVVYUEdBX1JfR0FJTl9TIDAKKyNkZWZpbmUgVElNUEFOSV9BVVhQR0FfTFJfR0FJTl9BVVhQR0FfUl9HQUlOX00gMHhGCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX0FVWFBHQV9MUl9HQUlOX0FVWFBHQV9SX0dBSU5fTkVHXzMwREIgMHgwCisjZGVmaW5lIFRJTVBBTklfQVVYUEdBX0xSX0dBSU5fQVVYUEdBX1JfR0FJTl9ORUdfMjdEQiAweDEKKyNkZWZpbmUgVElNUEFOSV9BVVhQR0FfTFJfR0FJTl9BVVhQR0FfUl9HQUlOX05FR18yNERCIDB4MgorI2RlZmluZSBUSU1QQU5JX0FVWFBHQV9MUl9HQUlOX0FVWFBHQV9SX0dBSU5fTkVHXzIxREIgMHgzCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX0FVWFBHQV9MUl9HQUlOX0FVWFBHQV9SX0dBSU5fTkVHXzE4REIgMHg0CisjZGVmaW5lIFRJTVBBTklfQVVYUEdBX0xSX0dBSU5fQVVYUEdBX1JfR0FJTl9ORUdfMTVEQiAweDUKKyNkZWZpbmUgVElNUEFOSV9BVVhQR0FfTFJfR0FJTl9BVVhQR0FfUl9HQUlOX05FR18xMkRCIDB4NgorI2RlZmluZSBUSU1QQU5JX0FVWFBHQV9MUl9HQUlOX0FVWFBHQV9SX0dBSU5fTkVHXzlfMERCIDB4NworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9BVVhQR0FfTFJfR0FJTl9BVVhQR0FfUl9HQUlOX05FR182XzBEQiAweDgKKyNkZWZpbmUgVElNUEFOSV9BVVhQR0FfTFJfR0FJTl9BVVhQR0FfUl9HQUlOX05FR18zXzBEQiAweDkKKyNkZWZpbmUgVElNUEFOSV9BVVhQR0FfTFJfR0FJTl9BVVhQR0FfUl9HQUlOX1BPU18wXzBEQiAweEEKKyNkZWZpbmUgVElNUEFOSV9BVVhQR0FfTFJfR0FJTl9BVVhQR0FfUl9HQUlOX1BPU18zXzBEQiAweEIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQVVYUEdBX0xSX0dBSU5fQVVYUEdBX1JfR0FJTl9QT1NfNl8wREIgMHhDCisjZGVmaW5lIFRJTVBBTklfQVVYUEdBX0xSX0dBSU5fQVVYUEdBX1JfR0FJTl9QT1NfOV8wREIgMHhECisjZGVmaW5lIFRJTVBBTklfQVVYUEdBX0xSX0dBSU5fQVVYUEdBX1JfR0FJTl9QT1NfMTJfMERCXzEgMHhFCisjZGVmaW5lIFRJTVBBTklfQVVYUEdBX0xSX0dBSU5fQVVYUEdBX1JfR0FJTl9QT1NfMTJfMERCXzIgMHhGCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX0FfUEFfQVVYT19FQVJQQV9DT05OICgweDM5KQorI2RlZmluZSBUSU1QQU5JX1BBX0FVWE9fRUFSUEFfQ09OTl9SV0MgIlJXIgorI2RlZmluZSBUSU1QQU5JX1BBX0FVWE9fRUFSUEFfQ09OTl9QT1IgMAorI2RlZmluZSBUSU1QQU5JX1BBX0FVWE9fRUFSUEFfQ09OTl9TIDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfUEFfQVVYT19FQVJQQV9DT05OX00gMHhGRgorI2RlZmluZSBUSU1QQU5JX1BBX0FVWE9fRUFSUEFfQ09OTl9BVVhPVVRfQVVYUEdBX0xfQ09OTl9TIDcKKyNkZWZpbmUgVElNUEFOSV9QQV9BVVhPX0VBUlBBX0NPTk5fQVVYT1VUX0FVWFBHQV9MX0NPTk5fTSAweDgwCisjZGVmaW5lIFRJTVBBTklfUEFfQVVYT19FQVJQQV9DT05OX0FVWE9VVF9BVVhQR0FfTF9DT05OX05PX0NPTk5FQ1QgMHgwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX1BBX0FVWE9fRUFSUEFfQ09OTl9BVVhPVVRfQVVYUEdBX0xfQ09OTl9DT05ORUNUIDB4MQorI2RlZmluZSBUSU1QQU5JX1BBX0FVWE9fRUFSUEFfQ09OTl9BVVhPVVRfSURBQ19MX0NPTk5fUyA2CisjZGVmaW5lIFRJTVBBTklfUEFfQVVYT19FQVJQQV9DT05OX0FVWE9VVF9JREFDX0xfQ09OTl9NIDB4NDAKKyNkZWZpbmUgVElNUEFOSV9QQV9BVVhPX0VBUlBBX0NPTk5fQVVYT1VUX0lEQUNfTF9DT05OX05PX0NPTk5FQ1QgMHgwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX1BBX0FVWE9fRUFSUEFfQ09OTl9BVVhPVVRfSURBQ19MX0NPTk5fQ09OTkVDVCAweDEKKyNkZWZpbmUgVElNUEFOSV9QQV9BVVhPX0VBUlBBX0NPTk5fQVVYT1VUX0NEQUNfTF9DT05OX1MgNQorI2RlZmluZSBUSU1QQU5JX1BBX0FVWE9fRUFSUEFfQ09OTl9BVVhPVVRfQ0RBQ19MX0NPTk5fTSAweDIwCisjZGVmaW5lIFRJTVBBTklfUEFfQVVYT19FQVJQQV9DT05OX0FVWE9VVF9DREFDX0xfQ09OTl9OT19DT05ORUNUIDB4MAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9QQV9BVVhPX0VBUlBBX0NPTk5fQVVYT1VUX0NEQUNfTF9DT05OX0NPTk5FQ1QgMHgxCisjZGVmaW5lIFRJTVBBTklfUEFfQVVYT19FQVJQQV9DT05OX1JFU0VSVkVEX1MgNAorI2RlZmluZSBUSU1QQU5JX1BBX0FVWE9fRUFSUEFfQ09OTl9SRVNFUlZFRF9NIDB4MTAKKyNkZWZpbmUgVElNUEFOSV9QQV9BVVhPX0VBUlBBX0NPTk5fRUFSUEFfR0FJTl9TIDMKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfUEFfQVVYT19FQVJQQV9DT05OX0VBUlBBX0dBSU5fTSAweDgKKyNkZWZpbmUgVElNUEFOSV9QQV9BVVhPX0VBUlBBX0NPTk5fRUFSUEFfR0FJTl9WXzNfNTJEQiAweDEKKyNkZWZpbmUgVElNUEFOSV9QQV9BVVhPX0VBUlBBX0NPTk5fRUFSUEFfR0FJTl9WXzJfMDJEQiAweDAKKyNkZWZpbmUgVElNUEFOSV9QQV9BVVhPX0VBUlBBX0NPTk5fRUFSUEFfQVVYUEdBX0xfQ09OTl9TIDIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfUEFfQVVYT19FQVJQQV9DT05OX0VBUlBBX0FVWFBHQV9MX0NPTk5fTSAweDQKKyNkZWZpbmUgVElNUEFOSV9QQV9BVVhPX0VBUlBBX0NPTk5fRUFSUEFfQVVYUEdBX0xfQ09OTl9OT19DT05ORUNUIDB4MAorI2RlZmluZSBUSU1QQU5JX1BBX0FVWE9fRUFSUEFfQ09OTl9FQVJQQV9BVVhQR0FfTF9DT05OX0NPTk5FQ1QgMHgxCisjZGVmaW5lIFRJTVBBTklfUEFfQVVYT19FQVJQQV9DT05OX0VBUlBBX0lEQUNfTF9DT05OX1MgMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9QQV9BVVhPX0VBUlBBX0NPTk5fRUFSUEFfSURBQ19MX0NPTk5fTSAweDIKKyNkZWZpbmUgVElNUEFOSV9QQV9BVVhPX0VBUlBBX0NPTk5fRUFSUEFfSURBQ19MX0NPTk5fTk9fQ09OTkVDVCAweDAKKyNkZWZpbmUgVElNUEFOSV9QQV9BVVhPX0VBUlBBX0NPTk5fRUFSUEFfSURBQ19MX0NPTk5fQ09OTkVDVCAweDEKKyNkZWZpbmUgVElNUEFOSV9QQV9BVVhPX0VBUlBBX0NPTk5fRUFSUEFfQ0RBQ19MX0NPTk5fUyAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX1BBX0FVWE9fRUFSUEFfQ09OTl9FQVJQQV9DREFDX0xfQ09OTl9NIDB4MQorI2RlZmluZSBUSU1QQU5JX1BBX0FVWE9fRUFSUEFfQ09OTl9FQVJQQV9DREFDX0xfQ09OTl9OT19DT05ORUNUIDB4MAorI2RlZmluZSBUSU1QQU5JX1BBX0FVWE9fRUFSUEFfQ09OTl9FQVJQQV9DREFDX0xfQ09OTl9DT05ORUNUIDB4MQorI2RlZmluZSBUSU1QQU5JX0FfUEFfTElORV9TVF9DT05OICgweDNBKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9QQV9MSU5FX1NUX0NPTk5fUldDICJSVyIKKyNkZWZpbmUgVElNUEFOSV9QQV9MSU5FX1NUX0NPTk5fUE9SIDAKKyNkZWZpbmUgVElNUEFOSV9QQV9MSU5FX1NUX0NPTk5fUyAwCisjZGVmaW5lIFRJTVBBTklfUEFfTElORV9TVF9DT05OX00gMHhGRgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9QQV9MSU5FX1NUX0NPTk5fTElORV9MX0FVWFBHQV9MX0NPTk5fUyA3CisjZGVmaW5lIFRJTVBBTklfUEFfTElORV9TVF9DT05OX0xJTkVfTF9BVVhQR0FfTF9DT05OX00gMHg4MAorI2RlZmluZSBUSU1QQU5JX1BBX0xJTkVfU1RfQ09OTl9MSU5FX0xfQVVYUEdBX0xfQ09OTl9OT19DT05ORUNUIDB4MAorI2RlZmluZSBUSU1QQU5JX1BBX0xJTkVfU1RfQ09OTl9MSU5FX0xfQVVYUEdBX0xfQ09OTl9DT05ORUNUIDB4MQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9QQV9MSU5FX1NUX0NPTk5fTElORV9MX0lEQUNfTF9DT05OX1MgNgorI2RlZmluZSBUSU1QQU5JX1BBX0xJTkVfU1RfQ09OTl9MSU5FX0xfSURBQ19MX0NPTk5fTSAweDQwCisjZGVmaW5lIFRJTVBBTklfUEFfTElORV9TVF9DT05OX0xJTkVfTF9JREFDX0xfQ09OTl9OT19DT05ORUNUIDB4MAorI2RlZmluZSBUSU1QQU5JX1BBX0xJTkVfU1RfQ09OTl9MSU5FX0xfSURBQ19MX0NPTk5fQ09OTkVDVCAweDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfUEFfTElORV9TVF9DT05OX0xJTkVfTF9DREFDX0xfQ09OTl9TIDUKKyNkZWZpbmUgVElNUEFOSV9QQV9MSU5FX1NUX0NPTk5fTElORV9MX0NEQUNfTF9DT05OX00gMHgyMAorI2RlZmluZSBUSU1QQU5JX1BBX0xJTkVfU1RfQ09OTl9MSU5FX0xfQ0RBQ19MX0NPTk5fTk9fQ09OTkVDVCAweDAKKyNkZWZpbmUgVElNUEFOSV9QQV9MSU5FX1NUX0NPTk5fTElORV9MX0NEQUNfTF9DT05OX0NPTk5FQ1QgMHgxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX1BBX0xJTkVfU1RfQ09OTl9MSU5FX1JfQVVYUEdBX1JfQ09OTl9TIDQKKyNkZWZpbmUgVElNUEFOSV9QQV9MSU5FX1NUX0NPTk5fTElORV9SX0FVWFBHQV9SX0NPTk5fTSAweDEwCisjZGVmaW5lIFRJTVBBTklfUEFfTElORV9TVF9DT05OX0xJTkVfUl9BVVhQR0FfUl9DT05OX05PX0NPTk5FQ1QgMHgwCisjZGVmaW5lIFRJTVBBTklfUEFfTElORV9TVF9DT05OX0xJTkVfUl9BVVhQR0FfUl9DT05OX0NPTk5FQ1QgMHgxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX1BBX0xJTkVfU1RfQ09OTl9MSU5FX1JfSURBQ19SX0NPTk5fUyAzCisjZGVmaW5lIFRJTVBBTklfUEFfTElORV9TVF9DT05OX0xJTkVfUl9JREFDX1JfQ09OTl9NIDB4OAorI2RlZmluZSBUSU1QQU5JX1BBX0xJTkVfU1RfQ09OTl9MSU5FX1JfSURBQ19SX0NPTk5fTk9fQ09OTkVDVCAweDAKKyNkZWZpbmUgVElNUEFOSV9QQV9MSU5FX1NUX0NPTk5fTElORV9SX0lEQUNfUl9DT05OX0NPTk5FQ1QgMHgxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX1BBX0xJTkVfU1RfQ09OTl9MSU5FX1JfQ0RBQ19SX0NPTk5fUyAyCisjZGVmaW5lIFRJTVBBTklfUEFfTElORV9TVF9DT05OX0xJTkVfUl9DREFDX1JfQ09OTl9NIDB4NAorI2RlZmluZSBUSU1QQU5JX1BBX0xJTkVfU1RfQ09OTl9MSU5FX1JfQ0RBQ19SX0NPTk5fTk9fQ09OTkVDVCAweDAKKyNkZWZpbmUgVElNUEFOSV9QQV9MSU5FX1NUX0NPTk5fTElORV9SX0NEQUNfUl9DT05OX0NPTk5FQ1QgMHgxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX1BBX0xJTkVfU1RfQ09OTl9BVVhQR0FfTF9WQ01fQUREX0NVUlJfUyAwCisjZGVmaW5lIFRJTVBBTklfUEFfTElORV9TVF9DT05OX0FVWFBHQV9MX1ZDTV9BRERfQ1VSUl9NIDB4MworI2RlZmluZSBUSU1QQU5JX1BBX0xJTkVfU1RfQ09OTl9BVVhQR0FfTF9WQ01fQUREX0NVUlJfTk9ORSAweDAKKyNkZWZpbmUgVElNUEFOSV9QQV9MSU5FX1NUX0NPTk5fQVVYUEdBX0xfVkNNX0FERF9DVVJSX1ZfMV8yNVVBIDB4MQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9QQV9MSU5FX1NUX0NPTk5fQVVYUEdBX0xfVkNNX0FERF9DVVJSX1ZfMl81VUEgMHgyCisjZGVmaW5lIFRJTVBBTklfUEFfTElORV9TVF9DT05OX0FVWFBHQV9MX1ZDTV9BRERfQ1VSUl9WXzNfNzVVQSAweDMKKyNkZWZpbmUgVElNUEFOSV9BX1BBX0xJTkVfTU9OT19DT05OICgweDNCKQorI2RlZmluZSBUSU1QQU5JX1BBX0xJTkVfTU9OT19DT05OX1JXQyAiUlciCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX1BBX0xJTkVfTU9OT19DT05OX1BPUiAwCisjZGVmaW5lIFRJTVBBTklfUEFfTElORV9NT05PX0NPTk5fUyAwCisjZGVmaW5lIFRJTVBBTklfUEFfTElORV9NT05PX0NPTk5fTSAweEZGCisjZGVmaW5lIFRJTVBBTklfUEFfTElORV9NT05PX0NPTk5fTElORV9SX0FVWFBHQV9MX0NPTk5fUyA3CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX1BBX0xJTkVfTU9OT19DT05OX0xJTkVfUl9BVVhQR0FfTF9DT05OX00gMHg4MAorI2RlZmluZSBUSU1QQU5JX1BBX0xJTkVfTU9OT19DT05OX0xJTkVfUl9BVVhQR0FfTF9DT05OX05PX0NPTk5FQ1QgMHgwCisjZGVmaW5lIFRJTVBBTklfUEFfTElORV9NT05PX0NPTk5fTElORV9SX0FVWFBHQV9MX0NPTk5fQ09OTkVDVCAweDEKKyNkZWZpbmUgVElNUEFOSV9QQV9MSU5FX01PTk9fQ09OTl9MSU5FX1JfSURBQ19MX0NPTk5fUyA2CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX1BBX0xJTkVfTU9OT19DT05OX0xJTkVfUl9JREFDX0xfQ09OTl9NIDB4NDAKKyNkZWZpbmUgVElNUEFOSV9QQV9MSU5FX01PTk9fQ09OTl9MSU5FX1JfSURBQ19MX0NPTk5fTk9fQ09OTkVDVCAweDAKKyNkZWZpbmUgVElNUEFOSV9QQV9MSU5FX01PTk9fQ09OTl9MSU5FX1JfSURBQ19MX0NPTk5fQ09OTkVDVCAweDEKKyNkZWZpbmUgVElNUEFOSV9QQV9MSU5FX01PTk9fQ09OTl9MSU5FX1JfQ0RBQ19MX0NPTk5fUyA1CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX1BBX0xJTkVfTU9OT19DT05OX0xJTkVfUl9DREFDX0xfQ09OTl9NIDB4MjAKKyNkZWZpbmUgVElNUEFOSV9QQV9MSU5FX01PTk9fQ09OTl9MSU5FX1JfQ0RBQ19MX0NPTk5fTk9fQ09OTkVDVCAweDAKKyNkZWZpbmUgVElNUEFOSV9QQV9MSU5FX01PTk9fQ09OTl9MSU5FX1JfQ0RBQ19MX0NPTk5fQ09OTkVDVCAweDEKKyNkZWZpbmUgVElNUEFOSV9QQV9MSU5FX01PTk9fQ09OTl9MSU5FX1JfQVVYUEdBX0xfSU5WX0NPTk5fUyA0CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX1BBX0xJTkVfTU9OT19DT05OX0xJTkVfUl9BVVhQR0FfTF9JTlZfQ09OTl9NIDB4MTAKKyNkZWZpbmUgVElNUEFOSV9QQV9MSU5FX01PTk9fQ09OTl9MSU5FX1JfQVVYUEdBX0xfSU5WX0NPTk5fTk9fQ09OTkVDVCAweDAKKyNkZWZpbmUgVElNUEFOSV9QQV9MSU5FX01PTk9fQ09OTl9MSU5FX1JfQVVYUEdBX0xfSU5WX0NPTk5fQ09OTkVDVCAweDEKKyNkZWZpbmUgVElNUEFOSV9QQV9MSU5FX01PTk9fQ09OTl9MSU5FX1JfSURBQ19MX0lOVl9DT05OX1MgMworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9QQV9MSU5FX01PTk9fQ09OTl9MSU5FX1JfSURBQ19MX0lOVl9DT05OX00gMHg4CisjZGVmaW5lIFRJTVBBTklfUEFfTElORV9NT05PX0NPTk5fTElORV9SX0lEQUNfTF9JTlZfQ09OTl9OT19DT05ORUNUIDB4MAorI2RlZmluZSBUSU1QQU5JX1BBX0xJTkVfTU9OT19DT05OX0xJTkVfUl9JREFDX0xfSU5WX0NPTk5fQ09OTkVDVCAweDEKKyNkZWZpbmUgVElNUEFOSV9QQV9MSU5FX01PTk9fQ09OTl9MSU5FX1JfQ0RBQ19MX0lOVl9DT05OX1MgMgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9QQV9MSU5FX01PTk9fQ09OTl9MSU5FX1JfQ0RBQ19MX0lOVl9DT05OX00gMHg0CisjZGVmaW5lIFRJTVBBTklfUEFfTElORV9NT05PX0NPTk5fTElORV9SX0NEQUNfTF9JTlZfQ09OTl9OT19DT05ORUNUIDB4MAorI2RlZmluZSBUSU1QQU5JX1BBX0xJTkVfTU9OT19DT05OX0xJTkVfUl9DREFDX0xfSU5WX0NPTk5fQ09OTkVDVCAweDEKKyNkZWZpbmUgVElNUEFOSV9QQV9MSU5FX01PTk9fQ09OTl9BVVhQR0FfUl9WQ01fQUREX0NVUlJfUyAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX1BBX0xJTkVfTU9OT19DT05OX0FVWFBHQV9SX1ZDTV9BRERfQ1VSUl9NIDB4MworI2RlZmluZSBUSU1QQU5JX1BBX0xJTkVfTU9OT19DT05OX0FVWFBHQV9SX1ZDTV9BRERfQ1VSUl9OT05FIDB4MAorI2RlZmluZSBUSU1QQU5JX1BBX0xJTkVfTU9OT19DT05OX0FVWFBHQV9SX1ZDTV9BRERfQ1VSUl9WXzFfMjVVQSAweDEKKyNkZWZpbmUgVElNUEFOSV9QQV9MSU5FX01PTk9fQ09OTl9BVVhQR0FfUl9WQ01fQUREX0NVUlJfVl8yXzVVQSAweDIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfUEFfTElORV9NT05PX0NPTk5fQVVYUEdBX1JfVkNNX0FERF9DVVJSX1ZfM183NVVBIDB4MworI2RlZmluZSBUSU1QQU5JX0FfUEFfSFBIX1NUX0NPTk4gKDB4M0MpCisjZGVmaW5lIFRJTVBBTklfUEFfSFBIX1NUX0NPTk5fUldDICJSVyIKKyNkZWZpbmUgVElNUEFOSV9QQV9IUEhfU1RfQ09OTl9QT1IgMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9QQV9IUEhfU1RfQ09OTl9TIDAKKyNkZWZpbmUgVElNUEFOSV9QQV9IUEhfU1RfQ09OTl9NIDB4RkYKKyNkZWZpbmUgVElNUEFOSV9QQV9IUEhfU1RfQ09OTl9IUEhfTF9BVVhQR0FfTF9DT05OX1MgNworI2RlZmluZSBUSU1QQU5JX1BBX0hQSF9TVF9DT05OX0hQSF9MX0FVWFBHQV9MX0NPTk5fTSAweDgwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX1BBX0hQSF9TVF9DT05OX0hQSF9MX0FVWFBHQV9MX0NPTk5fTk9fQ09OTkVDVCAweDAKKyNkZWZpbmUgVElNUEFOSV9QQV9IUEhfU1RfQ09OTl9IUEhfTF9BVVhQR0FfTF9DT05OX0NPTk5FQ1QgMHgxCisjZGVmaW5lIFRJTVBBTklfUEFfSFBIX1NUX0NPTk5fSFBIX0xfSURBQ19MX0NPTk5fUyA2CisjZGVmaW5lIFRJTVBBTklfUEFfSFBIX1NUX0NPTk5fSFBIX0xfSURBQ19MX0NPTk5fTSAweDQwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX1BBX0hQSF9TVF9DT05OX0hQSF9MX0lEQUNfTF9DT05OX05PX0NPTk5FQ1QgMHgwCisjZGVmaW5lIFRJTVBBTklfUEFfSFBIX1NUX0NPTk5fSFBIX0xfSURBQ19MX0NPTk5fQ09OTkVDVCAweDEKKyNkZWZpbmUgVElNUEFOSV9QQV9IUEhfU1RfQ09OTl9IUEhfTF9DREFDX0xfQ09OTl9TIDUKKyNkZWZpbmUgVElNUEFOSV9QQV9IUEhfU1RfQ09OTl9IUEhfTF9DREFDX0xfQ09OTl9NIDB4MjAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfUEFfSFBIX1NUX0NPTk5fSFBIX0xfQ0RBQ19MX0NPTk5fTk9fQ09OTkVDVCAweDAKKyNkZWZpbmUgVElNUEFOSV9QQV9IUEhfU1RfQ09OTl9IUEhfTF9DREFDX0xfQ09OTl9DT05ORUNUIDB4MQorI2RlZmluZSBUSU1QQU5JX1BBX0hQSF9TVF9DT05OX0hQSF9SX0FVWFBHQV9SX0NPTk5fUyA0CisjZGVmaW5lIFRJTVBBTklfUEFfSFBIX1NUX0NPTk5fSFBIX1JfQVVYUEdBX1JfQ09OTl9NIDB4MTAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfUEFfSFBIX1NUX0NPTk5fSFBIX1JfQVVYUEdBX1JfQ09OTl9OT19DT05ORUNUIDB4MAorI2RlZmluZSBUSU1QQU5JX1BBX0hQSF9TVF9DT05OX0hQSF9SX0FVWFBHQV9SX0NPTk5fQ09OTkVDVCAweDEKKyNkZWZpbmUgVElNUEFOSV9QQV9IUEhfU1RfQ09OTl9IUEhfUl9JREFDX1JfQ09OTl9TIDMKKyNkZWZpbmUgVElNUEFOSV9QQV9IUEhfU1RfQ09OTl9IUEhfUl9JREFDX1JfQ09OTl9NIDB4OAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9QQV9IUEhfU1RfQ09OTl9IUEhfUl9JREFDX1JfQ09OTl9OT19DT05ORUNUIDB4MAorI2RlZmluZSBUSU1QQU5JX1BBX0hQSF9TVF9DT05OX0hQSF9SX0lEQUNfUl9DT05OX0NPTk5FQ1QgMHgxCisjZGVmaW5lIFRJTVBBTklfUEFfSFBIX1NUX0NPTk5fSFBIX1JfQ0RBQ19SX0NPTk5fUyAyCisjZGVmaW5lIFRJTVBBTklfUEFfSFBIX1NUX0NPTk5fSFBIX1JfQ0RBQ19SX0NPTk5fTSAweDQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfUEFfSFBIX1NUX0NPTk5fSFBIX1JfQ0RBQ19SX0NPTk5fTk9fQ09OTkVDVCAweDAKKyNkZWZpbmUgVElNUEFOSV9QQV9IUEhfU1RfQ09OTl9IUEhfUl9DREFDX1JfQ09OTl9DT05ORUNUIDB4MQorI2RlZmluZSBUSU1QQU5JX1BBX0hQSF9TVF9DT05OX0hQSF9MX1JBTVBfR0VOX0VOX1MgMQorI2RlZmluZSBUSU1QQU5JX1BBX0hQSF9TVF9DT05OX0hQSF9MX1JBTVBfR0VOX0VOX00gMHgyCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX1BBX0hQSF9TVF9DT05OX0hQSF9MX1JBTVBfR0VOX0VOX0RJU0FCTEUgMHgxCisjZGVmaW5lIFRJTVBBTklfUEFfSFBIX1NUX0NPTk5fSFBIX0xfUkFNUF9HRU5fRU5fRU5BQkxFIDB4MAorI2RlZmluZSBUSU1QQU5JX1BBX0hQSF9TVF9DT05OX0hQSF9SX1JBTVBfR0VOX0VOX1MgMAorI2RlZmluZSBUSU1QQU5JX1BBX0hQSF9TVF9DT05OX0hQSF9SX1JBTVBfR0VOX0VOX00gMHgxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX1BBX0hQSF9TVF9DT05OX0hQSF9SX1JBTVBfR0VOX0VOX0RJU0FCTEUgMHgxCisjZGVmaW5lIFRJTVBBTklfUEFfSFBIX1NUX0NPTk5fSFBIX1JfUkFNUF9HRU5fRU5fRU5BQkxFIDB4MAorI2RlZmluZSBUSU1QQU5JX0FfUEFfSFBIX01PTk9fQ09OTiAoMHgzRCkKKyNkZWZpbmUgVElNUEFOSV9QQV9IUEhfTU9OT19DT05OX1JXQyAiUlciCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX1BBX0hQSF9NT05PX0NPTk5fUE9SIDAKKyNkZWZpbmUgVElNUEFOSV9QQV9IUEhfTU9OT19DT05OX1MgMAorI2RlZmluZSBUSU1QQU5JX1BBX0hQSF9NT05PX0NPTk5fTSAweEZGCisjZGVmaW5lIFRJTVBBTklfUEFfSFBIX01PTk9fQ09OTl9IUEhfUl9BVVhQR0FfTF9DT05OX1MgNworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9QQV9IUEhfTU9OT19DT05OX0hQSF9SX0FVWFBHQV9MX0NPTk5fTSAweDgwCisjZGVmaW5lIFRJTVBBTklfUEFfSFBIX01PTk9fQ09OTl9IUEhfUl9BVVhQR0FfTF9DT05OX05PX0NPTk5FQ1QgMHgwCisjZGVmaW5lIFRJTVBBTklfUEFfSFBIX01PTk9fQ09OTl9IUEhfUl9BVVhQR0FfTF9DT05OX0NPTk5FQ1QgMHgxCisjZGVmaW5lIFRJTVBBTklfUEFfSFBIX01PTk9fQ09OTl9IUEhfUl9JREFDX0xfQ09OTl9TIDYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfUEFfSFBIX01PTk9fQ09OTl9IUEhfUl9JREFDX0xfQ09OTl9NIDB4NDAKKyNkZWZpbmUgVElNUEFOSV9QQV9IUEhfTU9OT19DT05OX0hQSF9SX0lEQUNfTF9DT05OX05PX0NPTk5FQ1QgMHgwCisjZGVmaW5lIFRJTVBBTklfUEFfSFBIX01PTk9fQ09OTl9IUEhfUl9JREFDX0xfQ09OTl9DT05ORUNUIDB4MQorI2RlZmluZSBUSU1QQU5JX1BBX0hQSF9NT05PX0NPTk5fSFBIX1JfQ0RBQ19MX0NPTk5fUyA1CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX1BBX0hQSF9NT05PX0NPTk5fSFBIX1JfQ0RBQ19MX0NPTk5fTSAweDIwCisjZGVmaW5lIFRJTVBBTklfUEFfSFBIX01PTk9fQ09OTl9IUEhfUl9DREFDX0xfQ09OTl9OT19DT05ORUNUIDB4MAorI2RlZmluZSBUSU1QQU5JX1BBX0hQSF9NT05PX0NPTk5fSFBIX1JfQ0RBQ19MX0NPTk5fQ09OTkVDVCAweDEKKyNkZWZpbmUgVElNUEFOSV9QQV9IUEhfTU9OT19DT05OX0hQSF9SX0FVWFBHQV9MX0lOVl9DT05OX1MgNAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9QQV9IUEhfTU9OT19DT05OX0hQSF9SX0FVWFBHQV9MX0lOVl9DT05OX00gMHgxMAorI2RlZmluZSBUSU1QQU5JX1BBX0hQSF9NT05PX0NPTk5fSFBIX1JfQVVYUEdBX0xfSU5WX0NPTk5fTk9fQ09OTkVDVCAweDAKKyNkZWZpbmUgVElNUEFOSV9QQV9IUEhfTU9OT19DT05OX0hQSF9SX0FVWFBHQV9MX0lOVl9DT05OX0NPTk5FQ1QgMHgxCisjZGVmaW5lIFRJTVBBTklfUEFfSFBIX01PTk9fQ09OTl9IUEhfUl9JREFDX0xfSU5WX0NPTk5fUyAzCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX1BBX0hQSF9NT05PX0NPTk5fSFBIX1JfSURBQ19MX0lOVl9DT05OX00gMHg4CisjZGVmaW5lIFRJTVBBTklfUEFfSFBIX01PTk9fQ09OTl9IUEhfUl9JREFDX0xfSU5WX0NPTk5fTk9fQ09OTkVDVCAweDAKKyNkZWZpbmUgVElNUEFOSV9QQV9IUEhfTU9OT19DT05OX0hQSF9SX0lEQUNfTF9JTlZfQ09OTl9DT05ORUNUIDB4MQorI2RlZmluZSBUSU1QQU5JX1BBX0hQSF9NT05PX0NPTk5fSFBIX1JfQ0RBQ19MX0lOVl9DT05OX1MgMgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9QQV9IUEhfTU9OT19DT05OX0hQSF9SX0NEQUNfTF9JTlZfQ09OTl9NIDB4NAorI2RlZmluZSBUSU1QQU5JX1BBX0hQSF9NT05PX0NPTk5fSFBIX1JfQ0RBQ19MX0lOVl9DT05OX05PX0NPTk5FQ1QgMHgwCisjZGVmaW5lIFRJTVBBTklfUEFfSFBIX01PTk9fQ09OTl9IUEhfUl9DREFDX0xfSU5WX0NPTk5fQ09OTkVDVCAweDEKKyNkZWZpbmUgVElNUEFOSV9QQV9IUEhfTU9OT19DT05OX1JFU0VSVkVEX1MgMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9QQV9IUEhfTU9OT19DT05OX1JFU0VSVkVEX00gMHgzCisjZGVmaW5lIFRJTVBBTklfQV9QQV9DTEFTU0RfQ09OTiAoMHgzRSkKKyNkZWZpbmUgVElNUEFOSV9QQV9DTEFTU0RfQ09OTl9SV0MgIlJXIgorI2RlZmluZSBUSU1QQU5JX1BBX0NMQVNTRF9DT05OX1BPUiAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX1BBX0NMQVNTRF9DT05OX1MgMAorI2RlZmluZSBUSU1QQU5JX1BBX0NMQVNTRF9DT05OX00gMHhGRgorI2RlZmluZSBUSU1QQU5JX1BBX0NMQVNTRF9DT05OX0NMQVNTRF9DREFDX0NPTk5fUyA3CisjZGVmaW5lIFRJTVBBTklfUEFfQ0xBU1NEX0NPTk5fQ0xBU1NEX0NEQUNfQ09OTl9NIDB4ODAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfUEFfQ0xBU1NEX0NPTk5fQ0xBU1NEX0NEQUNfQ09OTl9OT19DT05ORUNUIDB4MAorI2RlZmluZSBUSU1QQU5JX1BBX0NMQVNTRF9DT05OX0NMQVNTRF9DREFDX0NPTk5fQ09OTkVDVCAweDEKKyNkZWZpbmUgVElNUEFOSV9QQV9DTEFTU0RfQ09OTl9DTEFTU0RfSURBQ19DT05OX1MgNgorI2RlZmluZSBUSU1QQU5JX1BBX0NMQVNTRF9DT05OX0NMQVNTRF9JREFDX0NPTk5fTSAweDQwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX1BBX0NMQVNTRF9DT05OX0NMQVNTRF9JREFDX0NPTk5fTk9fQ09OTkVDVCAweDAKKyNkZWZpbmUgVElNUEFOSV9QQV9DTEFTU0RfQ09OTl9DTEFTU0RfSURBQ19DT05OX0NPTk5FQ1QgMHgxCisjZGVmaW5lIFRJTVBBTklfUEFfQ0xBU1NEX0NPTk5fQ0xBU1NEX0FVWFBHQV9DT05OX1MgNQorI2RlZmluZSBUSU1QQU5JX1BBX0NMQVNTRF9DT05OX0NMQVNTRF9BVVhQR0FfQ09OTl9NIDB4MjAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfUEFfQ0xBU1NEX0NPTk5fQ0xBU1NEX0FVWFBHQV9DT05OX05PX0NPTk5FQ1QgMHgwCisjZGVmaW5lIFRJTVBBTklfUEFfQ0xBU1NEX0NPTk5fQ0xBU1NEX0FVWFBHQV9DT05OX0NPTk5FQ1QgMHgxCisjZGVmaW5lIFRJTVBBTklfUEFfQ0xBU1NEX0NPTk5fQ0xBU1NEX1BBX01PREVfUyA0CisjZGVmaW5lIFRJTVBBTklfUEFfQ0xBU1NEX0NPTk5fQ0xBU1NEX1BBX01PREVfTSAweDEwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX1BBX0NMQVNTRF9DT05OX0NMQVNTRF9QQV9NT0RFX01PTk9fRElGRiAweDEKKyNkZWZpbmUgVElNUEFOSV9QQV9DTEFTU0RfQ09OTl9DTEFTU0RfUEFfTU9ERV9TVEVSRU8gMHgwCisjZGVmaW5lIFRJTVBBTklfUEFfQ0xBU1NEX0NPTk5fUkVTRVJWRURfUyAwCisjZGVmaW5lIFRJTVBBTklfUEFfQ0xBU1NEX0NPTk5fUkVTRVJWRURfTSAweEYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQV9QQV9DTlBfQ1RMICgweDNGKQorI2RlZmluZSBUSU1QQU5JX1BBX0NOUF9DVExfUldDICJSVyIKKyNkZWZpbmUgVElNUEFOSV9QQV9DTlBfQ1RMX1BPUiAweDA3CisjZGVmaW5lIFRJTVBBTklfUEFfQ05QX0NUTF9TIDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfUEFfQ05QX0NUTF9NIDB4RkYKKyNkZWZpbmUgVElNUEFOSV9QQV9DTlBfQ1RMX0NOUF9SQU1QX0dFTl9DVVJSRU5UX1MgNgorI2RlZmluZSBUSU1QQU5JX1BBX0NOUF9DVExfQ05QX1JBTVBfR0VOX0NVUlJFTlRfTSAweEMwCisjZGVmaW5lIFRJTVBBTklfUEFfQ05QX0NUTF9DTlBfUkFNUF9HRU5fQ1VSUkVOVF9WXzFfNzVfTkEgMHgwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX1BBX0NOUF9DVExfQ05QX1JBTVBfR0VOX0NVUlJFTlRfVl8zXzVfTkFfTk9STUFMX09QIDB4MQorI2RlZmluZSBUSU1QQU5JX1BBX0NOUF9DVExfQ05QX1JBTVBfR0VOX0NVUlJFTlRfVl81XzI1X05BIDB4MgorI2RlZmluZSBUSU1QQU5JX1BBX0NOUF9DVExfQ05QX1JBTVBfR0VOX0NVUlJFTlRfVl8xMF9OQSAweDMKKyNkZWZpbmUgVElNUEFOSV9QQV9DTlBfQ1RMX1JFU0VSVkVEX1MgNAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9QQV9DTlBfQ1RMX1JFU0VSVkVEX00gMHgzMAorI2RlZmluZSBUSU1QQU5JX1BBX0NOUF9DVExfQ0xBU1NEX1NVUFBMWV9EVU1QX0NJUkNVSVRfRU5fUyAzCisjZGVmaW5lIFRJTVBBTklfUEFfQ05QX0NUTF9DTEFTU0RfU1VQUExZX0RVTVBfQ0lSQ1VJVF9FTl9NIDB4OAorI2RlZmluZSBUSU1QQU5JX1BBX0NOUF9DVExfQ0xBU1NEX1NVUFBMWV9EVU1QX0NJUkNVSVRfRU5fRElTQUJMRSAweDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfUEFfQ05QX0NUTF9DTEFTU0RfU1VQUExZX0RVTVBfQ0lSQ1VJVF9FTl9FTkFCTEUgMHgxCisjZGVmaW5lIFRJTVBBTklfUEFfQ05QX0NUTF9DTEFTU0RfU1VQUExZX0RVTVBfVEhSRVNIX1MgMAorI2RlZmluZSBUSU1QQU5JX1BBX0NOUF9DVExfQ0xBU1NEX1NVUFBMWV9EVU1QX1RIUkVTSF9NIDB4NworI2RlZmluZSBUSU1QQU5JX1BBX0NOUF9DVExfQ0xBU1NEX1NVUFBMWV9EVU1QX1RIUkVTSF9WXzJfMjIwX1YgMHgwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX1BBX0NOUF9DVExfQ0xBU1NEX1NVUFBMWV9EVU1QX1RIUkVTSF9WXzJfMjQzX1YgMHgxCisjZGVmaW5lIFRJTVBBTklfUEFfQ05QX0NUTF9DTEFTU0RfU1VQUExZX0RVTVBfVEhSRVNIX1ZfMl8yNjZfViAweDIKKyNkZWZpbmUgVElNUEFOSV9QQV9DTlBfQ1RMX0NMQVNTRF9TVVBQTFlfRFVNUF9USFJFU0hfVl8yXzI5MF9WIDB4MworI2RlZmluZSBUSU1QQU5JX1BBX0NOUF9DVExfQ0xBU1NEX1NVUFBMWV9EVU1QX1RIUkVTSF9WXzJfMzQxX1YgMHg0CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX1BBX0NOUF9DVExfQ0xBU1NEX1NVUFBMWV9EVU1QX1RIUkVTSF9WXzJfMzM5X1YgMHg1CisjZGVmaW5lIFRJTVBBTklfUEFfQ05QX0NUTF9DTEFTU0RfU1VQUExZX0RVTVBfVEhSRVNIX1ZfMl8zNjVfViAweDYKKyNkZWZpbmUgVElNUEFOSV9QQV9DTlBfQ1RMX0NMQVNTRF9TVVBQTFlfRFVNUF9USFJFU0hfVl8yXzM5MV9WIDB4NworI2RlZmluZSBUSU1QQU5JX0FfUEFfQ0xBU1NEX0xfQ1RMICgweDQwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9QQV9DTEFTU0RfTF9DVExfUldDICJSVyIKKyNkZWZpbmUgVElNUEFOSV9QQV9DTEFTU0RfTF9DVExfUE9SIDB4MDgKKyNkZWZpbmUgVElNUEFOSV9QQV9DTEFTU0RfTF9DVExfUyAwCisjZGVmaW5lIFRJTVBBTklfUEFfQ0xBU1NEX0xfQ1RMX00gMHhGRgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9QQV9DTEFTU0RfTF9DVExfUkVTRVJWRURfUyA2CisjZGVmaW5lIFRJTVBBTklfUEFfQ0xBU1NEX0xfQ1RMX1JFU0VSVkVEX00gMHhDMAorI2RlZmluZSBUSU1QQU5JX1BBX0NMQVNTRF9MX0NUTF9DTEFTU0RfTF9MT0dJQ19SRVNFVF9TIDUKKyNkZWZpbmUgVElNUEFOSV9QQV9DTEFTU0RfTF9DVExfQ0xBU1NEX0xfTE9HSUNfUkVTRVRfTSAweDIwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX1BBX0NMQVNTRF9MX0NUTF9DTEFTU0RfTF9MT0dJQ19SRVNFVF9OT1JNQUxfT1AgMHgwCisjZGVmaW5lIFRJTVBBTklfUEFfQ0xBU1NEX0xfQ1RMX0NMQVNTRF9MX0xPR0lDX1JFU0VUX1JFU0VUX1BBX0xPR0lDIDB4MQorI2RlZmluZSBUSU1QQU5JX1BBX0NMQVNTRF9MX0NUTF9DTEFTU0RfTF9JTlRfUkVTRVRfUyA0CisjZGVmaW5lIFRJTVBBTklfUEFfQ0xBU1NEX0xfQ1RMX0NMQVNTRF9MX0lOVF9SRVNFVF9NIDB4MTAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfUEFfQ0xBU1NEX0xfQ1RMX0NMQVNTRF9MX0lOVF9SRVNFVF9OT1JNQUxfT1AgMHgwCisjZGVmaW5lIFRJTVBBTklfUEFfQ0xBU1NEX0xfQ1RMX0NMQVNTRF9MX0lOVF9SRVNFVF9ESVNDSEFSR0VfQ0FQUyAweDEKKyNkZWZpbmUgVElNUEFOSV9QQV9DTEFTU0RfTF9DVExfQ0xBU1NEX0xfUkVGX1NFTF9TIDIKKyNkZWZpbmUgVElNUEFOSV9QQV9DTEFTU0RfTF9DVExfQ0xBU1NEX0xfUkVGX1NFTF9NIDB4QworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9QQV9DTEFTU0RfTF9DVExfQ0xBU1NEX0xfUkVGX1NFTF9HTkQgMHgwCisjZGVmaW5lIFRJTVBBTklfUEFfQ0xBU1NEX0xfQ1RMX0NMQVNTRF9MX1JFRl9TRUxfSUJJQVNfWF9SX1JFRiAweDEKKyNkZWZpbmUgVElNUEFOSV9QQV9DTEFTU0RfTF9DVExfQ0xBU1NEX0xfUkVGX1NFTF9CR19WT0xUQUdFIDB4MgorI2RlZmluZSBUSU1QQU5JX1BBX0NMQVNTRF9MX0NUTF9DTEFTU0RfTF9SRUZfU0VMX1ZERF9CWV8yIDB4MworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9QQV9DTEFTU0RfTF9DVExfQ0xBU1NEX0xfUEFfRk9SQ0VfMV9TIDEKKyNkZWZpbmUgVElNUEFOSV9QQV9DTEFTU0RfTF9DVExfQ0xBU1NEX0xfUEFfRk9SQ0VfMV9NIDB4MgorI2RlZmluZSBUSU1QQU5JX1BBX0NMQVNTRF9MX0NUTF9DTEFTU0RfTF9QQV9GT1JDRV8xX05PUk1BTF9PUCAweDAKKyNkZWZpbmUgVElNUEFOSV9QQV9DTEFTU0RfTF9DVExfQ0xBU1NEX0xfUEFfRk9SQ0VfMV9QQV9PVVRfVE9fVkREIDB4MQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9QQV9DTEFTU0RfTF9DVExfQ0xBU1NEX0xfUEFfRk9SQ0VfMF9TIDAKKyNkZWZpbmUgVElNUEFOSV9QQV9DTEFTU0RfTF9DVExfQ0xBU1NEX0xfUEFfRk9SQ0VfMF9NIDB4MQorI2RlZmluZSBUSU1QQU5JX1BBX0NMQVNTRF9MX0NUTF9DTEFTU0RfTF9QQV9GT1JDRV8wX05PUk1BTF9PUCAweDAKKyNkZWZpbmUgVElNUEFOSV9QQV9DTEFTU0RfTF9DVExfQ0xBU1NEX0xfUEFfRk9SQ0VfMF9QQV9PVVRfVE9fR05EIDB4MQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9BX1BBX0NMQVNTRF9SX0NUTCAoMHg0MSkKKyNkZWZpbmUgVElNUEFOSV9QQV9DTEFTU0RfUl9DVExfUldDICJSVyIKKyNkZWZpbmUgVElNUEFOSV9QQV9DTEFTU0RfUl9DVExfUE9SIDB4MDgKKyNkZWZpbmUgVElNUEFOSV9QQV9DTEFTU0RfUl9DVExfUyAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX1BBX0NMQVNTRF9SX0NUTF9NIDB4RkYKKyNkZWZpbmUgVElNUEFOSV9QQV9DTEFTU0RfUl9DVExfUkVTRVJWRURfUyA2CisjZGVmaW5lIFRJTVBBTklfUEFfQ0xBU1NEX1JfQ1RMX1JFU0VSVkVEX00gMHhDMAorI2RlZmluZSBUSU1QQU5JX1BBX0NMQVNTRF9SX0NUTF9DTEFTU0RfUl9MT0dJQ19SRVNFVF9TIDUKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfUEFfQ0xBU1NEX1JfQ1RMX0NMQVNTRF9SX0xPR0lDX1JFU0VUX00gMHgyMAorI2RlZmluZSBUSU1QQU5JX1BBX0NMQVNTRF9SX0NUTF9DTEFTU0RfUl9MT0dJQ19SRVNFVF9OT1JNQUxfT1AgMHgwCisjZGVmaW5lIFRJTVBBTklfUEFfQ0xBU1NEX1JfQ1RMX0NMQVNTRF9SX0xPR0lDX1JFU0VUX1JFU0VUX1BBX0xPR0lDIDB4MQorI2RlZmluZSBUSU1QQU5JX1BBX0NMQVNTRF9SX0NUTF9DTEFTU0RfUl9JTlRfUkVTRVRfUyA0CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX1BBX0NMQVNTRF9SX0NUTF9DTEFTU0RfUl9JTlRfUkVTRVRfTSAweDEwCisjZGVmaW5lIFRJTVBBTklfUEFfQ0xBU1NEX1JfQ1RMX0NMQVNTRF9SX0lOVF9SRVNFVF9OT1JNQUxfT1AgMHgwCisjZGVmaW5lIFRJTVBBTklfUEFfQ0xBU1NEX1JfQ1RMX0NMQVNTRF9SX0lOVF9SRVNFVF9ESVNDSEFSR0VfQ0FQUyAweDEKKyNkZWZpbmUgVElNUEFOSV9QQV9DTEFTU0RfUl9DVExfQ0xBU1NEX1JfUkVGX1NFTF9TIDIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfUEFfQ0xBU1NEX1JfQ1RMX0NMQVNTRF9SX1JFRl9TRUxfTSAweEMKKyNkZWZpbmUgVElNUEFOSV9QQV9DTEFTU0RfUl9DVExfQ0xBU1NEX1JfUkVGX1NFTF9HTkQgMHgwCisjZGVmaW5lIFRJTVBBTklfUEFfQ0xBU1NEX1JfQ1RMX0NMQVNTRF9SX1JFRl9TRUxfSUJJQVNfWF9SX1JFRiAweDEKKyNkZWZpbmUgVElNUEFOSV9QQV9DTEFTU0RfUl9DVExfQ0xBU1NEX1JfUkVGX1NFTF9CR19WT0xUQUdFIDB4MgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9QQV9DTEFTU0RfUl9DVExfQ0xBU1NEX1JfUkVGX1NFTF9WRERfQllfMiAweDMKKyNkZWZpbmUgVElNUEFOSV9QQV9DTEFTU0RfUl9DVExfQ0xBU1NEX1JfUEFfRk9SQ0VfMV9TIDEKKyNkZWZpbmUgVElNUEFOSV9QQV9DTEFTU0RfUl9DVExfQ0xBU1NEX1JfUEFfRk9SQ0VfMV9NIDB4MgorI2RlZmluZSBUSU1QQU5JX1BBX0NMQVNTRF9SX0NUTF9DTEFTU0RfUl9QQV9GT1JDRV8xX05PUk1BTF9PUCAweDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfUEFfQ0xBU1NEX1JfQ1RMX0NMQVNTRF9SX1BBX0ZPUkNFXzFfUEFfT1VUX1RPX1ZERCAweDEKKyNkZWZpbmUgVElNUEFOSV9QQV9DTEFTU0RfUl9DVExfQ0xBU1NEX1JfUEFfRk9SQ0VfMF9TIDAKKyNkZWZpbmUgVElNUEFOSV9QQV9DTEFTU0RfUl9DVExfQ0xBU1NEX1JfUEFfRk9SQ0VfMF9NIDB4MQorI2RlZmluZSBUSU1QQU5JX1BBX0NMQVNTRF9SX0NUTF9DTEFTU0RfUl9QQV9GT1JDRV8wX05PUk1BTF9PUCAweDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfUEFfQ0xBU1NEX1JfQ1RMX0NMQVNTRF9SX1BBX0ZPUkNFXzBfUEFfT1VUX1RPX0dORCAweDEKKyNkZWZpbmUgVElNUEFOSV9BX1BBX0NMQVNTRF9JTlQyX0NUTCAoMHg0MikKKyNkZWZpbmUgVElNUEFOSV9QQV9DTEFTU0RfSU5UMl9DVExfUldDICJSVyIKKyNkZWZpbmUgVElNUEFOSV9QQV9DTEFTU0RfSU5UMl9DVExfUE9SIDB4YjAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfUEFfQ0xBU1NEX0lOVDJfQ1RMX1MgMAorI2RlZmluZSBUSU1QQU5JX1BBX0NMQVNTRF9JTlQyX0NUTF9NIDB4RkYKKyNkZWZpbmUgVElNUEFOSV9QQV9DTEFTU0RfSU5UMl9DVExfQ0xBU1NEX0xfSU5UMl9DRkJfUyA2CisjZGVmaW5lIFRJTVBBTklfUEFfQ0xBU1NEX0lOVDJfQ1RMX0NMQVNTRF9MX0lOVDJfQ0ZCX00gMHhDMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9QQV9DTEFTU0RfSU5UMl9DVExfQ0xBU1NEX0xfSU5UMl9DRkJfVl81XzBQRiAweDAKKyNkZWZpbmUgVElNUEFOSV9QQV9DTEFTU0RfSU5UMl9DVExfQ0xBU1NEX0xfSU5UMl9DRkJfVl83XzVQRiAweDEKKyNkZWZpbmUgVElNUEFOSV9QQV9DTEFTU0RfSU5UMl9DVExfQ0xBU1NEX0xfSU5UMl9DRkJfVl8xMFBGIDB4MgorI2RlZmluZSBUSU1QQU5JX1BBX0NMQVNTRF9JTlQyX0NUTF9DTEFTU0RfTF9JTlQyX0NGQl9WXzE1UEYgMHgzCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX1BBX0NMQVNTRF9JTlQyX0NUTF9DTEFTU0RfTF9JTlQyX1JJTl9TIDQKKyNkZWZpbmUgVElNUEFOSV9QQV9DTEFTU0RfSU5UMl9DVExfQ0xBU1NEX0xfSU5UMl9SSU5fTSAweDMwCisjZGVmaW5lIFRJTVBBTklfUEFfQ0xBU1NEX0lOVDJfQ1RMX0NMQVNTRF9MX0lOVDJfUklOX1ZfMTAwSyAweDAKKyNkZWZpbmUgVElNUEFOSV9QQV9DTEFTU0RfSU5UMl9DVExfQ0xBU1NEX0xfSU5UMl9SSU5fVl8xNTBLIDB4MQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9QQV9DTEFTU0RfSU5UMl9DVExfQ0xBU1NEX0xfSU5UMl9SSU5fVl8xNzVLIDB4MgorI2RlZmluZSBUSU1QQU5JX1BBX0NMQVNTRF9JTlQyX0NUTF9DTEFTU0RfTF9JTlQyX1JJTl9WXzIwMEsgMHgzCisjZGVmaW5lIFRJTVBBTklfUEFfQ0xBU1NEX0lOVDJfQ1RMX0NMQVNTRF9SX0lOVDJfQ0ZCX1MgMgorI2RlZmluZSBUSU1QQU5JX1BBX0NMQVNTRF9JTlQyX0NUTF9DTEFTU0RfUl9JTlQyX0NGQl9NIDB4QworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9QQV9DTEFTU0RfSU5UMl9DVExfQ0xBU1NEX1JfSU5UMl9DRkJfVl81XzBQRiAweDAKKyNkZWZpbmUgVElNUEFOSV9QQV9DTEFTU0RfSU5UMl9DVExfQ0xBU1NEX1JfSU5UMl9DRkJfVl83XzVQRiAweDEKKyNkZWZpbmUgVElNUEFOSV9QQV9DTEFTU0RfSU5UMl9DVExfQ0xBU1NEX1JfSU5UMl9DRkJfVl8xMFBGIDB4MgorI2RlZmluZSBUSU1QQU5JX1BBX0NMQVNTRF9JTlQyX0NUTF9DTEFTU0RfUl9JTlQyX0NGQl9WXzE1UEYgMHgzCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX1BBX0NMQVNTRF9JTlQyX0NUTF9DTEFTU0RfUl9JTlQyX1JJTl9TIDAKKyNkZWZpbmUgVElNUEFOSV9QQV9DTEFTU0RfSU5UMl9DVExfQ0xBU1NEX1JfSU5UMl9SSU5fTSAweDMKKyNkZWZpbmUgVElNUEFOSV9QQV9DTEFTU0RfSU5UMl9DVExfQ0xBU1NEX1JfSU5UMl9SSU5fVl8xMDBLIDB4MAorI2RlZmluZSBUSU1QQU5JX1BBX0NMQVNTRF9JTlQyX0NUTF9DTEFTU0RfUl9JTlQyX1JJTl9WXzE1MEsgMHgxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX1BBX0NMQVNTRF9JTlQyX0NUTF9DTEFTU0RfUl9JTlQyX1JJTl9WXzE3NUsgMHgyCisjZGVmaW5lIFRJTVBBTklfUEFfQ0xBU1NEX0lOVDJfQ1RMX0NMQVNTRF9SX0lOVDJfUklOX1ZfMjAwSyAweDMKKyNkZWZpbmUgVElNUEFOSV9BX1BBX0hQSF9MX09DUF9DTEtfQ1RMICgweDQzKQorI2RlZmluZSBUSU1QQU5JX1BBX0hQSF9MX09DUF9DTEtfQ1RMX1JXQyAiUlciCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX1BBX0hQSF9MX09DUF9DTEtfQ1RMX1BPUiAweGYyCisjZGVmaW5lIFRJTVBBTklfUEFfSFBIX0xfT0NQX0NMS19DVExfUyAwCisjZGVmaW5lIFRJTVBBTklfUEFfSFBIX0xfT0NQX0NMS19DVExfTSAweEZGCisjZGVmaW5lIFRJTVBBTklfUEFfSFBIX0xfT0NQX0NMS19DVExfSFBIX0xfT0NQX0NBUlJJRVJfRElWXzJfRU5fUyA3CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX1BBX0hQSF9MX09DUF9DTEtfQ1RMX0hQSF9MX09DUF9DQVJSSUVSX0RJVl8yX0VOX00gMHg4MAorI2RlZmluZSBUSU1QQU5JX1BBX0hQSF9MX09DUF9DTEtfQ1RMX0hQSF9MX09DUF9DQVJSSUVSX0RJVl8yX0VOX0VOQUJMRSAweDEKKyNkZWZpbmUgVElNUEFOSV9QQV9IUEhfTF9PQ1BfQ0xLX0NUTF9IUEhfTF9PQ1BfQ0FSUklFUl9ESVZfMl9FTl9ESVNBQkxFIDB4MAorI2RlZmluZSBUSU1QQU5JX1BBX0hQSF9MX09DUF9DTEtfQ1RMX0hQSF9MX09DUF9DQVJSSUVSX1BST0dfRElWX0VOX1MgNgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9QQV9IUEhfTF9PQ1BfQ0xLX0NUTF9IUEhfTF9PQ1BfQ0FSUklFUl9QUk9HX0RJVl9FTl9NIDB4NDAKKyNkZWZpbmUgVElNUEFOSV9QQV9IUEhfTF9PQ1BfQ0xLX0NUTF9IUEhfTF9PQ1BfQ0FSUklFUl9QUk9HX0RJVl9FTl9FTkFCTEUgMHgxCisjZGVmaW5lIFRJTVBBTklfUEFfSFBIX0xfT0NQX0NMS19DVExfSFBIX0xfT0NQX0NBUlJJRVJfUFJPR19ESVZfRU5fRElTQUJMRSAweDAKKyNkZWZpbmUgVElNUEFOSV9QQV9IUEhfTF9PQ1BfQ0xLX0NUTF9IUEhfTF9PQ1BfQ0FSUklFUl9QUk9HX0RJVl9SQVRJT19TIDQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfUEFfSFBIX0xfT0NQX0NMS19DVExfSFBIX0xfT0NQX0NBUlJJRVJfUFJPR19ESVZfUkFUSU9fTSAweDMwCisjZGVmaW5lIFRJTVBBTklfUEFfSFBIX0xfT0NQX0NMS19DVExfSFBIX0xfT0NQX0NBUlJJRVJfUFJPR19ESVZfUkFUSU9fRElWMiAweDAKKyNkZWZpbmUgVElNUEFOSV9QQV9IUEhfTF9PQ1BfQ0xLX0NUTF9IUEhfTF9PQ1BfQ0FSUklFUl9QUk9HX0RJVl9SQVRJT19ESVY0IDB4MQorI2RlZmluZSBUSU1QQU5JX1BBX0hQSF9MX09DUF9DTEtfQ1RMX0hQSF9MX09DUF9DQVJSSUVSX1BST0dfRElWX1JBVElPX0RJVjYgMHgyCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX1BBX0hQSF9MX09DUF9DTEtfQ1RMX0hQSF9MX09DUF9DQVJSSUVSX1BST0dfRElWX1JBVElPX0RJVjggMHgzCisjZGVmaW5lIFRJTVBBTklfUEFfSFBIX0xfT0NQX0NMS19DVExfSFBIX0xfT0NQX0NMS19TRUxfTEVGVF9TIDMKKyNkZWZpbmUgVElNUEFOSV9QQV9IUEhfTF9PQ1BfQ0xLX0NUTF9IUEhfTF9PQ1BfQ0xLX1NFTF9MRUZUX00gMHg4CisjZGVmaW5lIFRJTVBBTklfUEFfSFBIX0xfT0NQX0NMS19DVExfSFBIX0xfT0NQX0NMS19TRUxfTEVGVF9DTEtfRlJPTV9DSF8yIDB4MQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9QQV9IUEhfTF9PQ1BfQ0xLX0NUTF9IUEhfTF9PQ1BfQ0xLX1NFTF9MRUZUX0NMS19GUk9NX0NIXzEgMHgwCisjZGVmaW5lIFRJTVBBTklfUEFfSFBIX0xfT0NQX0NMS19DVExfSFBIX0xfT0NQX1RJTUVSX0RJVl8yX0VOX1MgMgorI2RlZmluZSBUSU1QQU5JX1BBX0hQSF9MX09DUF9DTEtfQ1RMX0hQSF9MX09DUF9USU1FUl9ESVZfMl9FTl9NIDB4NAorI2RlZmluZSBUSU1QQU5JX1BBX0hQSF9MX09DUF9DTEtfQ1RMX0hQSF9MX09DUF9USU1FUl9ESVZfMl9FTl9FTkFCTEUgMHgxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX1BBX0hQSF9MX09DUF9DTEtfQ1RMX0hQSF9MX09DUF9USU1FUl9ESVZfMl9FTl9ESVNBQkxFIDB4MAorI2RlZmluZSBUSU1QQU5JX1BBX0hQSF9MX09DUF9DTEtfQ1RMX0hQSF9MX09DUF9USU1FUl9ESVZfUkFUSU9fUyAwCisjZGVmaW5lIFRJTVBBTklfUEFfSFBIX0xfT0NQX0NMS19DVExfSFBIX0xfT0NQX1RJTUVSX0RJVl9SQVRJT19NIDB4MworI2RlZmluZSBUSU1QQU5JX1BBX0hQSF9MX09DUF9DTEtfQ1RMX0hQSF9MX09DUF9USU1FUl9ESVZfUkFUSU9fRElWX0JZXzQgMHgwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX1BBX0hQSF9MX09DUF9DTEtfQ1RMX0hQSF9MX09DUF9USU1FUl9ESVZfUkFUSU9fRElWX0JZXzggMHgxCisjZGVmaW5lIFRJTVBBTklfUEFfSFBIX0xfT0NQX0NMS19DVExfSFBIX0xfT0NQX1RJTUVSX0RJVl9SQVRJT19ESVZfQllfMTIgMHgyCisjZGVmaW5lIFRJTVBBTklfUEFfSFBIX0xfT0NQX0NMS19DVExfSFBIX0xfT0NQX1RJTUVSX0RJVl9SQVRJT19ESVZfQllfMTYgMHgzCisjZGVmaW5lIFRJTVBBTklfQV9QQV9DTEFTU0RfTF9TV19DVEwgKDB4NDQpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX1BBX0NMQVNTRF9MX1NXX0NUTF9SV0MgIlJXIgorI2RlZmluZSBUSU1QQU5JX1BBX0NMQVNTRF9MX1NXX0NUTF9QT1IgMHgzNworI2RlZmluZSBUSU1QQU5JX1BBX0NMQVNTRF9MX1NXX0NUTF9TIDAKKyNkZWZpbmUgVElNUEFOSV9QQV9DTEFTU0RfTF9TV19DVExfTSAweEZGCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX1BBX0NMQVNTRF9MX1NXX0NUTF9DTEFTU0RfTF9CUkVBS19CRUZPUkVfTUFLRV9ERUxBWV9TIDYKKyNkZWZpbmUgVElNUEFOSV9QQV9DTEFTU0RfTF9TV19DVExfQ0xBU1NEX0xfQlJFQUtfQkVGT1JFX01BS0VfREVMQVlfTSAweEMwCisjZGVmaW5lIFRJTVBBTklfUEFfQ0xBU1NEX0xfU1dfQ1RMX0NMQVNTRF9MX0JSRUFLX0JFRk9SRV9NQUtFX0RFTEFZX1ZfMSAweDAKKyNkZWZpbmUgVElNUEFOSV9QQV9DTEFTU0RfTF9TV19DVExfQ0xBU1NEX0xfQlJFQUtfQkVGT1JFX01BS0VfREVMQVlfVl8yIDB4MQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9QQV9DTEFTU0RfTF9TV19DVExfQ0xBU1NEX0xfQlJFQUtfQkVGT1JFX01BS0VfREVMQVlfVl8zIDB4MgorI2RlZmluZSBUSU1QQU5JX1BBX0NMQVNTRF9MX1NXX0NUTF9DTEFTU0RfTF9CUkVBS19CRUZPUkVfTUFLRV9ERUxBWV9WXzQgMHgzCisjZGVmaW5lIFRJTVBBTklfUEFfQ0xBU1NEX0xfU1dfQ1RMX0NMQVNTRF9MX09VVF9EUklWRV9TVFJFTl9TIDQKKyNkZWZpbmUgVElNUEFOSV9QQV9DTEFTU0RfTF9TV19DVExfQ0xBU1NEX0xfT1VUX0RSSVZFX1NUUkVOX00gMHgzMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9QQV9DTEFTU0RfTF9TV19DVExfQ0xBU1NEX0xfT1VUX0RSSVZFX1NUUkVOX1ZfM19PRl82X1VOSVRTIDB4MAorI2RlZmluZSBUSU1QQU5JX1BBX0NMQVNTRF9MX1NXX0NUTF9DTEFTU0RfTF9PVVRfRFJJVkVfU1RSRU5fVl80X09GXzZfVU5JVFMgMHgxCisjZGVmaW5lIFRJTVBBTklfUEFfQ0xBU1NEX0xfU1dfQ1RMX0NMQVNTRF9MX09VVF9EUklWRV9TVFJFTl9WXzVfT0ZfNl9VTklUUyAweDIKKyNkZWZpbmUgVElNUEFOSV9QQV9DTEFTU0RfTF9TV19DVExfQ0xBU1NEX0xfT1VUX0RSSVZFX1NUUkVOX1ZfNl9PRl82X1VOSVRTIDB4MworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9QQV9DTEFTU0RfTF9TV19DVExfUkVTRVJWRURfUyAzCisjZGVmaW5lIFRJTVBBTklfUEFfQ0xBU1NEX0xfU1dfQ1RMX1JFU0VSVkVEX00gMHg4CisjZGVmaW5lIFRJTVBBTklfUEFfQ0xBU1NEX0xfU1dfQ1RMX0NMQVNTRF9MX0NEQUNfQllQQVNTX0NBUF9FTl9TIDIKKyNkZWZpbmUgVElNUEFOSV9QQV9DTEFTU0RfTF9TV19DVExfQ0xBU1NEX0xfQ0RBQ19CWVBBU1NfQ0FQX0VOX00gMHg0CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX1BBX0NMQVNTRF9MX1NXX0NUTF9DTEFTU0RfTF9DREFDX0JZUEFTU19DQVBfRU5fRElTQUJMRSAweDAKKyNkZWZpbmUgVElNUEFOSV9QQV9DTEFTU0RfTF9TV19DVExfQ0xBU1NEX0xfQ0RBQ19CWVBBU1NfQ0FQX0VOX0VOQUJMRSAweDEKKyNkZWZpbmUgVElNUEFOSV9QQV9DTEFTU0RfTF9TV19DVExfQ0xBU1NEX0xfQ0RBQ19OT05fT1ZFUkxBUF9FTl9TIDEKKyNkZWZpbmUgVElNUEFOSV9QQV9DTEFTU0RfTF9TV19DVExfQ0xBU1NEX0xfQ0RBQ19OT05fT1ZFUkxBUF9FTl9NIDB4MgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9QQV9DTEFTU0RfTF9TV19DVExfQ0xBU1NEX0xfQ0RBQ19OT05fT1ZFUkxBUF9FTl9ESVNBQkxFIDB4MAorI2RlZmluZSBUSU1QQU5JX1BBX0NMQVNTRF9MX1NXX0NUTF9DTEFTU0RfTF9DREFDX05PTl9PVkVSTEFQX0VOX0VOQUJMRSAweDEKKyNkZWZpbmUgVElNUEFOSV9QQV9DTEFTU0RfTF9TV19DVExfQ0xBU1NEX0xfQ0RBQ19TV0lUQ0hfTU9ERV9TIDAKKyNkZWZpbmUgVElNUEFOSV9QQV9DTEFTU0RfTF9TV19DVExfQ0xBU1NEX0xfQ0RBQ19TV0lUQ0hfTU9ERV9NIDB4MQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9QQV9DTEFTU0RfTF9TV19DVExfQ0xBU1NEX0xfQ0RBQ19TV0lUQ0hfTU9ERV9QT1dFUl9HUk9VTkQgMHgwCisjZGVmaW5lIFRJTVBBTklfUEFfQ0xBU1NEX0xfU1dfQ1RMX0NMQVNTRF9MX0NEQUNfU1dJVENIX01PREVfUlNUX01JRFBPSU5UIDB4MQorI2RlZmluZSBUSU1QQU5JX0FfUEFfQ0xBU1NEX0xfT0NQMSAoMHg0NSkKKyNkZWZpbmUgVElNUEFOSV9QQV9DTEFTU0RfTF9PQ1AxX1JXQyAiUlciCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX1BBX0NMQVNTRF9MX09DUDFfUE9SIDB4ZmYKKyNkZWZpbmUgVElNUEFOSV9QQV9DTEFTU0RfTF9PQ1AxX1MgMAorI2RlZmluZSBUSU1QQU5JX1BBX0NMQVNTRF9MX09DUDFfTSAweEZGCisjZGVmaW5lIFRJTVBBTklfUEFfQ0xBU1NEX0xfT0NQMV9DTEFTU0RfTF9PQ1BfRU5fUyA3CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX1BBX0NMQVNTRF9MX09DUDFfQ0xBU1NEX0xfT0NQX0VOX00gMHg4MAorI2RlZmluZSBUSU1QQU5JX1BBX0NMQVNTRF9MX09DUDFfQ0xBU1NEX0xfT0NQX0VOX0RJU0FCTEUgMHgwCisjZGVmaW5lIFRJTVBBTklfUEFfQ0xBU1NEX0xfT0NQMV9DTEFTU0RfTF9PQ1BfRU5fRU5BQkxFIDB4MQorI2RlZmluZSBUSU1QQU5JX1BBX0NMQVNTRF9MX09DUDFfQ0xBU1NEX0xfT0NQX0xPQ0tfUyA2CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX1BBX0NMQVNTRF9MX09DUDFfQ0xBU1NEX0xfT0NQX0xPQ0tfTSAweDQwCisjZGVmaW5lIFRJTVBBTklfUEFfQ0xBU1NEX0xfT0NQMV9DTEFTU0RfTF9PQ1BfTE9DS19ORVZFUl9MT0NLUyAweDAKKyNkZWZpbmUgVElNUEFOSV9QQV9DTEFTU0RfTF9PQ1AxX0NMQVNTRF9MX09DUF9MT0NLX0xPQ0tTIDB4MQorI2RlZmluZSBUSU1QQU5JX1BBX0NMQVNTRF9MX09DUDFfT0NQX0NVUl9USFJFU0hfUyA0CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX1BBX0NMQVNTRF9MX09DUDFfT0NQX0NVUl9USFJFU0hfTSAweDMwCisjZGVmaW5lIFRJTVBBTklfUEFfQ0xBU1NEX0xfT0NQMV9PQ1BfQ1VSX1RIUkVTSF9WXzEwME1BXzgzXzNNQV82Nl83TUFfNTBNQSAweDAKKyNkZWZpbmUgVElNUEFOSV9QQV9DTEFTU0RfTF9PQ1AxX09DUF9DVVJfVEhSRVNIX1ZfMTMzTUFfMTExTUFfODhfN01BXzY2XzdNQSAweDEKKyNkZWZpbmUgVElNUEFOSV9QQV9DTEFTU0RfTF9PQ1AxX09DUF9DVVJfVEhSRVNIX1ZfMTY2TUFfMTM4TUFfMTExTUFfODNfM01BIDB4MgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9QQV9DTEFTU0RfTF9PQ1AxX09DUF9DVVJfVEhSRVNIX1ZfMjAwTUFfMTY2TUFfMTMzTUFfMTAwTUEgMHgzCisjZGVmaW5lIFRJTVBBTklfUEFfQ0xBU1NEX0xfT0NQMV9DTEFTU0RfTF9PQ1BfTlVNX0NPTk5fQVRURU1QVFNfUyAwCisjZGVmaW5lIFRJTVBBTklfUEFfQ0xBU1NEX0xfT0NQMV9DTEFTU0RfTF9PQ1BfTlVNX0NPTk5fQVRURU1QVFNfTSAweEYKKyNkZWZpbmUgVElNUEFOSV9QQV9DTEFTU0RfTF9PQ1AxX0NMQVNTRF9MX09DUF9OVU1fQ09OTl9BVFRFTVBUU19WXzEgMHgxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX1BBX0NMQVNTRF9MX09DUDFfQ0xBU1NEX0xfT0NQX05VTV9DT05OX0FUVEVNUFRTX1ZfMiAweDIKKyNkZWZpbmUgVElNUEFOSV9QQV9DTEFTU0RfTF9PQ1AxX0NMQVNTRF9MX09DUF9OVU1fQ09OTl9BVFRFTVBUU19WXzMgMHgzCisjZGVmaW5lIFRJTVBBTklfUEFfQ0xBU1NEX0xfT0NQMV9DTEFTU0RfTF9PQ1BfTlVNX0NPTk5fQVRURU1QVFNfVl80IDB4NAorI2RlZmluZSBUSU1QQU5JX1BBX0NMQVNTRF9MX09DUDFfQ0xBU1NEX0xfT0NQX05VTV9DT05OX0FUVEVNUFRTX1ZfNSAweDUKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfUEFfQ0xBU1NEX0xfT0NQMV9DTEFTU0RfTF9PQ1BfTlVNX0NPTk5fQVRURU1QVFNfVl82IDB4NgorI2RlZmluZSBUSU1QQU5JX1BBX0NMQVNTRF9MX09DUDFfQ0xBU1NEX0xfT0NQX05VTV9DT05OX0FUVEVNUFRTX1ZfNyAweDcKKyNkZWZpbmUgVElNUEFOSV9QQV9DTEFTU0RfTF9PQ1AxX0NMQVNTRF9MX09DUF9OVU1fQ09OTl9BVFRFTVBUU19WXzggMHg4CisjZGVmaW5lIFRJTVBBTklfUEFfQ0xBU1NEX0xfT0NQMV9DTEFTU0RfTF9PQ1BfTlVNX0NPTk5fQVRURU1QVFNfVl85IDB4OQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9QQV9DTEFTU0RfTF9PQ1AxX0NMQVNTRF9MX09DUF9OVU1fQ09OTl9BVFRFTVBUU19WXzEwIDB4QQorI2RlZmluZSBUSU1QQU5JX1BBX0NMQVNTRF9MX09DUDFfQ0xBU1NEX0xfT0NQX05VTV9DT05OX0FUVEVNUFRTX1ZfMTEgMHhCCisjZGVmaW5lIFRJTVBBTklfUEFfQ0xBU1NEX0xfT0NQMV9DTEFTU0RfTF9PQ1BfTlVNX0NPTk5fQVRURU1QVFNfVl8xMiAweEMKKyNkZWZpbmUgVElNUEFOSV9QQV9DTEFTU0RfTF9PQ1AxX0NMQVNTRF9MX09DUF9OVU1fQ09OTl9BVFRFTVBUU19WXzEzIDB4RAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9QQV9DTEFTU0RfTF9PQ1AxX0NMQVNTRF9MX09DUF9OVU1fQ09OTl9BVFRFTVBUU19WXzE0IDB4RQorI2RlZmluZSBUSU1QQU5JX1BBX0NMQVNTRF9MX09DUDFfQ0xBU1NEX0xfT0NQX05VTV9DT05OX0FUVEVNUFRTX1ZfMTUgMHhGCisjZGVmaW5lIFRJTVBBTklfQV9QQV9DTEFTU0RfTF9PQ1AyICgweDQ2KQorI2RlZmluZSBUSU1QQU5JX1BBX0NMQVNTRF9MX09DUDJfUldDICJSVyIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfUEFfQ0xBU1NEX0xfT0NQMl9QT1IgMHg3NworI2RlZmluZSBUSU1QQU5JX1BBX0NMQVNTRF9MX09DUDJfUyAwCisjZGVmaW5lIFRJTVBBTklfUEFfQ0xBU1NEX0xfT0NQMl9NIDB4RkYKKyNkZWZpbmUgVElNUEFOSV9QQV9DTEFTU0RfTF9PQ1AyX0NMQVNTRF9MX09DUF9PQ1BfV0FJVF9DTlRfUyA0CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX1BBX0NMQVNTRF9MX09DUDJfQ0xBU1NEX0xfT0NQX09DUF9XQUlUX0NOVF9NIDB4RjAKKyNkZWZpbmUgVElNUEFOSV9QQV9DTEFTU0RfTF9PQ1AyX0NMQVNTRF9MX09DUF9PQ1BfV0FJVF9DTlRfVl8yNTUgMHgwCisjZGVmaW5lIFRJTVBBTklfUEFfQ0xBU1NEX0xfT0NQMl9DTEFTU0RfTF9PQ1BfT0NQX1dBSVRfQ05UX1ZfNTExIDB4MQorI2RlZmluZSBUSU1QQU5JX1BBX0NMQVNTRF9MX09DUDJfQ0xBU1NEX0xfT0NQX09DUF9XQUlUX0NOVF9WXzc2NyAweDIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfUEFfQ0xBU1NEX0xfT0NQMl9DTEFTU0RfTF9PQ1BfT0NQX1dBSVRfQ05UX1ZfMTAyMyAweDMKKyNkZWZpbmUgVElNUEFOSV9QQV9DTEFTU0RfTF9PQ1AyX0NMQVNTRF9MX09DUF9PQ1BfV0FJVF9DTlRfVl8xMjc5IDB4NAorI2RlZmluZSBUSU1QQU5JX1BBX0NMQVNTRF9MX09DUDJfQ0xBU1NEX0xfT0NQX09DUF9XQUlUX0NOVF9WXzE1MzUgMHg1CisjZGVmaW5lIFRJTVBBTklfUEFfQ0xBU1NEX0xfT0NQMl9DTEFTU0RfTF9PQ1BfT0NQX1dBSVRfQ05UX1ZfMTc5MSAweDYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfUEFfQ0xBU1NEX0xfT0NQMl9DTEFTU0RfTF9PQ1BfT0NQX1dBSVRfQ05UX1ZfMjA0NyAweDcKKyNkZWZpbmUgVElNUEFOSV9QQV9DTEFTU0RfTF9PQ1AyX0NMQVNTRF9MX09DUF9PQ1BfV0FJVF9DTlRfVl8yMzAzIDB4OAorI2RlZmluZSBUSU1QQU5JX1BBX0NMQVNTRF9MX09DUDJfQ0xBU1NEX0xfT0NQX09DUF9XQUlUX0NOVF9WXzI1NTkgMHg5CisjZGVmaW5lIFRJTVBBTklfUEFfQ0xBU1NEX0xfT0NQMl9DTEFTU0RfTF9PQ1BfT0NQX1dBSVRfQ05UX1ZfMjgxNSAweEEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfUEFfQ0xBU1NEX0xfT0NQMl9DTEFTU0RfTF9PQ1BfT0NQX1dBSVRfQ05UX1ZfMzA3MSAweEIKKyNkZWZpbmUgVElNUEFOSV9QQV9DTEFTU0RfTF9PQ1AyX0NMQVNTRF9MX09DUF9PQ1BfV0FJVF9DTlRfVl8zMzI3IDB4QworI2RlZmluZSBUSU1QQU5JX1BBX0NMQVNTRF9MX09DUDJfQ0xBU1NEX0xfT0NQX09DUF9XQUlUX0NOVF9WXzM1ODMgMHhECisjZGVmaW5lIFRJTVBBTklfUEFfQ0xBU1NEX0xfT0NQMl9DTEFTU0RfTF9PQ1BfT0NQX1dBSVRfQ05UX1ZfMzgzOSAweEUKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfUEFfQ0xBU1NEX0xfT0NQMl9DTEFTU0RfTF9PQ1BfT0NQX1dBSVRfQ05UX1ZfNDA5NSAweEYKKyNkZWZpbmUgVElNUEFOSV9QQV9DTEFTU0RfTF9PQ1AyX0NMQVNTRF9MX09DUF9PQ1BfUlVOX0NOVF9TIDAKKyNkZWZpbmUgVElNUEFOSV9QQV9DTEFTU0RfTF9PQ1AyX0NMQVNTRF9MX09DUF9PQ1BfUlVOX0NOVF9NIDB4RgorI2RlZmluZSBUSU1QQU5JX1BBX0NMQVNTRF9MX09DUDJfQ0xBU1NEX0xfT0NQX09DUF9SVU5fQ05UX1ZfMjU1IDB4MAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9QQV9DTEFTU0RfTF9PQ1AyX0NMQVNTRF9MX09DUF9PQ1BfUlVOX0NOVF9WXzUxMSAweDEKKyNkZWZpbmUgVElNUEFOSV9QQV9DTEFTU0RfTF9PQ1AyX0NMQVNTRF9MX09DUF9PQ1BfUlVOX0NOVF9WXzc2NyAweDIKKyNkZWZpbmUgVElNUEFOSV9QQV9DTEFTU0RfTF9PQ1AyX0NMQVNTRF9MX09DUF9PQ1BfUlVOX0NOVF9WXzEwMjMgMHgzCisjZGVmaW5lIFRJTVBBTklfUEFfQ0xBU1NEX0xfT0NQMl9DTEFTU0RfTF9PQ1BfT0NQX1JVTl9DTlRfVl8xMjc5IDB4NAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9QQV9DTEFTU0RfTF9PQ1AyX0NMQVNTRF9MX09DUF9PQ1BfUlVOX0NOVF9WXzE1MzUgMHg1CisjZGVmaW5lIFRJTVBBTklfUEFfQ0xBU1NEX0xfT0NQMl9DTEFTU0RfTF9PQ1BfT0NQX1JVTl9DTlRfVl8xNzkxIDB4NgorI2RlZmluZSBUSU1QQU5JX1BBX0NMQVNTRF9MX09DUDJfQ0xBU1NEX0xfT0NQX09DUF9SVU5fQ05UX1ZfMjA0NyAweDcKKyNkZWZpbmUgVElNUEFOSV9QQV9DTEFTU0RfTF9PQ1AyX0NMQVNTRF9MX09DUF9PQ1BfUlVOX0NOVF9WXzIzMDMgMHg4CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX1BBX0NMQVNTRF9MX09DUDJfQ0xBU1NEX0xfT0NQX09DUF9SVU5fQ05UX1ZfMjU1OSAweDkKKyNkZWZpbmUgVElNUEFOSV9QQV9DTEFTU0RfTF9PQ1AyX0NMQVNTRF9MX09DUF9PQ1BfUlVOX0NOVF9WXzI4MTUgMHhBCisjZGVmaW5lIFRJTVBBTklfUEFfQ0xBU1NEX0xfT0NQMl9DTEFTU0RfTF9PQ1BfT0NQX1JVTl9DTlRfVl8zMDcxIDB4QgorI2RlZmluZSBUSU1QQU5JX1BBX0NMQVNTRF9MX09DUDJfQ0xBU1NEX0xfT0NQX09DUF9SVU5fQ05UX1ZfMzMyNyAweEMKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfUEFfQ0xBU1NEX0xfT0NQMl9DTEFTU0RfTF9PQ1BfT0NQX1JVTl9DTlRfVl8zNTgzIDB4RAorI2RlZmluZSBUSU1QQU5JX1BBX0NMQVNTRF9MX09DUDJfQ0xBU1NEX0xfT0NQX09DUF9SVU5fQ05UX1ZfMzgzOSAweEUKKyNkZWZpbmUgVElNUEFOSV9QQV9DTEFTU0RfTF9PQ1AyX0NMQVNTRF9MX09DUF9PQ1BfUlVOX0NOVF9WXzQwOTUgMHhGCisjZGVmaW5lIFRJTVBBTklfQV9QQV9IUEhfUl9PQ1BfQ0xLX0NUTCAoMHg0NykKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfUEFfSFBIX1JfT0NQX0NMS19DVExfUldDICJSVyIKKyNkZWZpbmUgVElNUEFOSV9QQV9IUEhfUl9PQ1BfQ0xLX0NUTF9QT1IgMHhmMgorI2RlZmluZSBUSU1QQU5JX1BBX0hQSF9SX09DUF9DTEtfQ1RMX1MgMAorI2RlZmluZSBUSU1QQU5JX1BBX0hQSF9SX09DUF9DTEtfQ1RMX00gMHhGRgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9QQV9IUEhfUl9PQ1BfQ0xLX0NUTF9IUEhfUl9PQ1BfQ0FSUklFUl9ESVZfMl9FTl9TIDcKKyNkZWZpbmUgVElNUEFOSV9QQV9IUEhfUl9PQ1BfQ0xLX0NUTF9IUEhfUl9PQ1BfQ0FSUklFUl9ESVZfMl9FTl9NIDB4ODAKKyNkZWZpbmUgVElNUEFOSV9QQV9IUEhfUl9PQ1BfQ0xLX0NUTF9IUEhfUl9PQ1BfQ0FSUklFUl9ESVZfMl9FTl9FTkFCTEUgMHgxCisjZGVmaW5lIFRJTVBBTklfUEFfSFBIX1JfT0NQX0NMS19DVExfSFBIX1JfT0NQX0NBUlJJRVJfRElWXzJfRU5fRElTQUJMRSAweDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfUEFfSFBIX1JfT0NQX0NMS19DVExfSFBIX1JfT0NQX0NBUlJJRVJfUFJPR19ESVZfRU5fUyA2CisjZGVmaW5lIFRJTVBBTklfUEFfSFBIX1JfT0NQX0NMS19DVExfSFBIX1JfT0NQX0NBUlJJRVJfUFJPR19ESVZfRU5fTSAweDQwCisjZGVmaW5lIFRJTVBBTklfUEFfSFBIX1JfT0NQX0NMS19DVExfSFBIX1JfT0NQX0NBUlJJRVJfUFJPR19ESVZfRU5fRU5BQkxFIDB4MQorI2RlZmluZSBUSU1QQU5JX1BBX0hQSF9SX09DUF9DTEtfQ1RMX0hQSF9SX09DUF9DQVJSSUVSX1BST0dfRElWX0VOX0RJU0FCTEUgMHgwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX1BBX0hQSF9SX09DUF9DTEtfQ1RMX0hQSF9SX09DUF9DQVJSSUVSX1BST0dfRElWX1JBVElPX1MgNAorI2RlZmluZSBUSU1QQU5JX1BBX0hQSF9SX09DUF9DTEtfQ1RMX0hQSF9SX09DUF9DQVJSSUVSX1BST0dfRElWX1JBVElPX00gMHgzMAorI2RlZmluZSBUSU1QQU5JX1BBX0hQSF9SX09DUF9DTEtfQ1RMX0hQSF9SX09DUF9DQVJSSUVSX1BST0dfRElWX1JBVElPX0RJVjIgMHgwCisjZGVmaW5lIFRJTVBBTklfUEFfSFBIX1JfT0NQX0NMS19DVExfSFBIX1JfT0NQX0NBUlJJRVJfUFJPR19ESVZfUkFUSU9fRElWNCAweDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfUEFfSFBIX1JfT0NQX0NMS19DVExfSFBIX1JfT0NQX0NBUlJJRVJfUFJPR19ESVZfUkFUSU9fRElWNiAweDIKKyNkZWZpbmUgVElNUEFOSV9QQV9IUEhfUl9PQ1BfQ0xLX0NUTF9IUEhfUl9PQ1BfQ0FSUklFUl9QUk9HX0RJVl9SQVRJT19ESVY4IDB4MworI2RlZmluZSBUSU1QQU5JX1BBX0hQSF9SX09DUF9DTEtfQ1RMX0hQSF9SX09DUF9DTEtfU0VMX1JJR0hUX1MgMworI2RlZmluZSBUSU1QQU5JX1BBX0hQSF9SX09DUF9DTEtfQ1RMX0hQSF9SX09DUF9DTEtfU0VMX1JJR0hUX00gMHg4CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX1BBX0hQSF9SX09DUF9DTEtfQ1RMX0hQSF9SX09DUF9DTEtfU0VMX1JJR0hUX0NMS19GUk9NX0NIXzIgMHgxCisjZGVmaW5lIFRJTVBBTklfUEFfSFBIX1JfT0NQX0NMS19DVExfSFBIX1JfT0NQX0NMS19TRUxfUklHSFRfQ0xLX0ZST01fQ0hfMSAweDAKKyNkZWZpbmUgVElNUEFOSV9QQV9IUEhfUl9PQ1BfQ0xLX0NUTF9IUEhfUl9PQ1BfVElNRVJfRElWXzJfRU5fUyAyCisjZGVmaW5lIFRJTVBBTklfUEFfSFBIX1JfT0NQX0NMS19DVExfSFBIX1JfT0NQX1RJTUVSX0RJVl8yX0VOX00gMHg0CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX1BBX0hQSF9SX09DUF9DTEtfQ1RMX0hQSF9SX09DUF9USU1FUl9ESVZfMl9FTl9FTkFCTEUgMHgxCisjZGVmaW5lIFRJTVBBTklfUEFfSFBIX1JfT0NQX0NMS19DVExfSFBIX1JfT0NQX1RJTUVSX0RJVl8yX0VOX0RJU0FCTEUgMHgwCisjZGVmaW5lIFRJTVBBTklfUEFfSFBIX1JfT0NQX0NMS19DVExfSFBIX1JfT0NQX1RJTUVSX0RJVl9SQVRJT19TIDAKKyNkZWZpbmUgVElNUEFOSV9QQV9IUEhfUl9PQ1BfQ0xLX0NUTF9IUEhfUl9PQ1BfVElNRVJfRElWX1JBVElPX00gMHgzCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX1BBX0hQSF9SX09DUF9DTEtfQ1RMX0hQSF9SX09DUF9USU1FUl9ESVZfUkFUSU9fRElWX0JZXzQgMHgwCisjZGVmaW5lIFRJTVBBTklfUEFfSFBIX1JfT0NQX0NMS19DVExfSFBIX1JfT0NQX1RJTUVSX0RJVl9SQVRJT19ESVZfQllfOCAweDEKKyNkZWZpbmUgVElNUEFOSV9QQV9IUEhfUl9PQ1BfQ0xLX0NUTF9IUEhfUl9PQ1BfVElNRVJfRElWX1JBVElPX0RJVl9CWV8xMiAweDIKKyNkZWZpbmUgVElNUEFOSV9QQV9IUEhfUl9PQ1BfQ0xLX0NUTF9IUEhfUl9PQ1BfVElNRVJfRElWX1JBVElPX0RJVl9CWV8xNiAweDMKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQV9QQV9DTEFTU0RfUl9TV19DVEwgKDB4NDgpCisjZGVmaW5lIFRJTVBBTklfUEFfQ0xBU1NEX1JfU1dfQ1RMX1JXQyAiUlciCisjZGVmaW5lIFRJTVBBTklfUEFfQ0xBU1NEX1JfU1dfQ1RMX1BPUiAweDM3CisjZGVmaW5lIFRJTVBBTklfUEFfQ0xBU1NEX1JfU1dfQ1RMX1MgMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9QQV9DTEFTU0RfUl9TV19DVExfTSAweEZGCisjZGVmaW5lIFRJTVBBTklfUEFfQ0xBU1NEX1JfU1dfQ1RMX0NMQVNTRF9SX0JSRUFLX0JFRk9SRV9NQUtFX0RFTEFZX1MgNgorI2RlZmluZSBUSU1QQU5JX1BBX0NMQVNTRF9SX1NXX0NUTF9DTEFTU0RfUl9CUkVBS19CRUZPUkVfTUFLRV9ERUxBWV9NIDB4QzAKKyNkZWZpbmUgVElNUEFOSV9QQV9DTEFTU0RfUl9TV19DVExfQ0xBU1NEX1JfQlJFQUtfQkVGT1JFX01BS0VfREVMQVlfVl8xIDB4MAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9QQV9DTEFTU0RfUl9TV19DVExfQ0xBU1NEX1JfQlJFQUtfQkVGT1JFX01BS0VfREVMQVlfVl8yIDB4MQorI2RlZmluZSBUSU1QQU5JX1BBX0NMQVNTRF9SX1NXX0NUTF9DTEFTU0RfUl9CUkVBS19CRUZPUkVfTUFLRV9ERUxBWV9WXzMgMHgyCisjZGVmaW5lIFRJTVBBTklfUEFfQ0xBU1NEX1JfU1dfQ1RMX0NMQVNTRF9SX0JSRUFLX0JFRk9SRV9NQUtFX0RFTEFZX1ZfNCAweDMKKyNkZWZpbmUgVElNUEFOSV9QQV9DTEFTU0RfUl9TV19DVExfQ0xBU1NEX1JfT1VUX0RSSVZFX1NUUkVOX1MgNAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9QQV9DTEFTU0RfUl9TV19DVExfQ0xBU1NEX1JfT1VUX0RSSVZFX1NUUkVOX00gMHgzMAorI2RlZmluZSBUSU1QQU5JX1BBX0NMQVNTRF9SX1NXX0NUTF9DTEFTU0RfUl9PVVRfRFJJVkVfU1RSRU5fVl8zX09GXzZfVU5JVFMgMHgwCisjZGVmaW5lIFRJTVBBTklfUEFfQ0xBU1NEX1JfU1dfQ1RMX0NMQVNTRF9SX09VVF9EUklWRV9TVFJFTl9WXzRfT0ZfNl9VTklUUyAweDEKKyNkZWZpbmUgVElNUEFOSV9QQV9DTEFTU0RfUl9TV19DVExfQ0xBU1NEX1JfT1VUX0RSSVZFX1NUUkVOX1ZfNV9PRl82X1VOSVRTIDB4MgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9QQV9DTEFTU0RfUl9TV19DVExfQ0xBU1NEX1JfT1VUX0RSSVZFX1NUUkVOX1ZfNl9PRl82X1VOSVRTIDB4MworI2RlZmluZSBUSU1QQU5JX1BBX0NMQVNTRF9SX1NXX0NUTF9SRVNFUlZFRF9TIDMKKyNkZWZpbmUgVElNUEFOSV9QQV9DTEFTU0RfUl9TV19DVExfUkVTRVJWRURfTSAweDgKKyNkZWZpbmUgVElNUEFOSV9QQV9DTEFTU0RfUl9TV19DVExfQ0xBU1NEX1JfQ0RBQ19CWVBBU1NfQ0FQX0VOX1MgMgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9QQV9DTEFTU0RfUl9TV19DVExfQ0xBU1NEX1JfQ0RBQ19CWVBBU1NfQ0FQX0VOX00gMHg0CisjZGVmaW5lIFRJTVBBTklfUEFfQ0xBU1NEX1JfU1dfQ1RMX0NMQVNTRF9SX0NEQUNfQllQQVNTX0NBUF9FTl9ESVNBQkxFIDB4MAorI2RlZmluZSBUSU1QQU5JX1BBX0NMQVNTRF9SX1NXX0NUTF9DTEFTU0RfUl9DREFDX0JZUEFTU19DQVBfRU5fRU5BQkxFIDB4MQorI2RlZmluZSBUSU1QQU5JX1BBX0NMQVNTRF9SX1NXX0NUTF9DTEFTU0RfUl9DREFDX05PTl9PVkVSTEFQX0VOX1MgMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9QQV9DTEFTU0RfUl9TV19DVExfQ0xBU1NEX1JfQ0RBQ19OT05fT1ZFUkxBUF9FTl9NIDB4MgorI2RlZmluZSBUSU1QQU5JX1BBX0NMQVNTRF9SX1NXX0NUTF9DTEFTU0RfUl9DREFDX05PTl9PVkVSTEFQX0VOX0RJU0FCTEUgMHgwCisjZGVmaW5lIFRJTVBBTklfUEFfQ0xBU1NEX1JfU1dfQ1RMX0NMQVNTRF9SX0NEQUNfTk9OX09WRVJMQVBfRU5fRU5BQkxFIDB4MQorI2RlZmluZSBUSU1QQU5JX1BBX0NMQVNTRF9SX1NXX0NUTF9DTEFTU0RfUl9DREFDX1NXSVRDSF9NT0RFX1MgMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9QQV9DTEFTU0RfUl9TV19DVExfQ0xBU1NEX1JfQ0RBQ19TV0lUQ0hfTU9ERV9NIDB4MQorI2RlZmluZSBUSU1QQU5JX1BBX0NMQVNTRF9SX1NXX0NUTF9DTEFTU0RfUl9DREFDX1NXSVRDSF9NT0RFX1BPV0VSX0dST1VORCAweDAKKyNkZWZpbmUgVElNUEFOSV9QQV9DTEFTU0RfUl9TV19DVExfQ0xBU1NEX1JfQ0RBQ19TV0lUQ0hfTU9ERV9SU1RfTUlEUE9JTlQgMHgxCisjZGVmaW5lIFRJTVBBTklfQV9QQV9DTEFTU0RfUl9PQ1AxICgweDQ5KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9QQV9DTEFTU0RfUl9PQ1AxX1JXQyAiUlciCisjZGVmaW5lIFRJTVBBTklfUEFfQ0xBU1NEX1JfT0NQMV9QT1IgMHhmZgorI2RlZmluZSBUSU1QQU5JX1BBX0NMQVNTRF9SX09DUDFfUyAwCisjZGVmaW5lIFRJTVBBTklfUEFfQ0xBU1NEX1JfT0NQMV9NIDB4RkYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfUEFfQ0xBU1NEX1JfT0NQMV9DTEFTU0RfUl9PQ1BfRU5fUyA3CisjZGVmaW5lIFRJTVBBTklfUEFfQ0xBU1NEX1JfT0NQMV9DTEFTU0RfUl9PQ1BfRU5fTSAweDgwCisjZGVmaW5lIFRJTVBBTklfUEFfQ0xBU1NEX1JfT0NQMV9DTEFTU0RfUl9PQ1BfRU5fRElTQUJMRSAweDAKKyNkZWZpbmUgVElNUEFOSV9QQV9DTEFTU0RfUl9PQ1AxX0NMQVNTRF9SX09DUF9FTl9FTkFCTEUgMHgxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX1BBX0NMQVNTRF9SX09DUDFfQ0xBU1NEX1JfT0NQX0xPQ0tfUyA2CisjZGVmaW5lIFRJTVBBTklfUEFfQ0xBU1NEX1JfT0NQMV9DTEFTU0RfUl9PQ1BfTE9DS19NIDB4NDAKKyNkZWZpbmUgVElNUEFOSV9QQV9DTEFTU0RfUl9PQ1AxX0NMQVNTRF9SX09DUF9MT0NLX05FVkVSX0xPQ0tTIDB4MAorI2RlZmluZSBUSU1QQU5JX1BBX0NMQVNTRF9SX09DUDFfQ0xBU1NEX1JfT0NQX0xPQ0tfTE9DS1MgMHgxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX1BBX0NMQVNTRF9SX09DUDFfT0NQX0NVUl9USFJFU0hfUyA0CisjZGVmaW5lIFRJTVBBTklfUEFfQ0xBU1NEX1JfT0NQMV9PQ1BfQ1VSX1RIUkVTSF9NIDB4MzAKKyNkZWZpbmUgVElNUEFOSV9QQV9DTEFTU0RfUl9PQ1AxX09DUF9DVVJfVEhSRVNIX1ZfMTAwTUFfODNfM01BXzY2XzdNQV81ME1BIDB4MAorI2RlZmluZSBUSU1QQU5JX1BBX0NMQVNTRF9SX09DUDFfT0NQX0NVUl9USFJFU0hfVl8xMzNNQV8xMTFNQV84OF83TUFfNjZfN01BIDB4MQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9QQV9DTEFTU0RfUl9PQ1AxX09DUF9DVVJfVEhSRVNIX1ZfMTY2TUFfMTM4TUFfMTExTUFfODNfM01BIDB4MgorI2RlZmluZSBUSU1QQU5JX1BBX0NMQVNTRF9SX09DUDFfT0NQX0NVUl9USFJFU0hfVl8yMDBNQV8xNjZNQV8xMzNNQV8xMDBNQSAweDMKKyNkZWZpbmUgVElNUEFOSV9QQV9DTEFTU0RfUl9PQ1AxX0NMQVNTRF9SX09DUF9OVU1fQ09OTl9BVFRFTVBUU19TIDAKKyNkZWZpbmUgVElNUEFOSV9QQV9DTEFTU0RfUl9PQ1AxX0NMQVNTRF9SX09DUF9OVU1fQ09OTl9BVFRFTVBUU19NIDB4RgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9QQV9DTEFTU0RfUl9PQ1AxX0NMQVNTRF9SX09DUF9OVU1fQ09OTl9BVFRFTVBUU19WXzEgMHgxCisjZGVmaW5lIFRJTVBBTklfUEFfQ0xBU1NEX1JfT0NQMV9DTEFTU0RfUl9PQ1BfTlVNX0NPTk5fQVRURU1QVFNfVl8yIDB4MgorI2RlZmluZSBUSU1QQU5JX1BBX0NMQVNTRF9SX09DUDFfQ0xBU1NEX1JfT0NQX05VTV9DT05OX0FUVEVNUFRTX1ZfMyAweDMKKyNkZWZpbmUgVElNUEFOSV9QQV9DTEFTU0RfUl9PQ1AxX0NMQVNTRF9SX09DUF9OVU1fQ09OTl9BVFRFTVBUU19WXzQgMHg0CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX1BBX0NMQVNTRF9SX09DUDFfQ0xBU1NEX1JfT0NQX05VTV9DT05OX0FUVEVNUFRTX1ZfNSAweDUKKyNkZWZpbmUgVElNUEFOSV9QQV9DTEFTU0RfUl9PQ1AxX0NMQVNTRF9SX09DUF9OVU1fQ09OTl9BVFRFTVBUU19WXzYgMHg2CisjZGVmaW5lIFRJTVBBTklfUEFfQ0xBU1NEX1JfT0NQMV9DTEFTU0RfUl9PQ1BfTlVNX0NPTk5fQVRURU1QVFNfVl83IDB4NworI2RlZmluZSBUSU1QQU5JX1BBX0NMQVNTRF9SX09DUDFfQ0xBU1NEX1JfT0NQX05VTV9DT05OX0FUVEVNUFRTX1ZfOCAweDgKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfUEFfQ0xBU1NEX1JfT0NQMV9DTEFTU0RfUl9PQ1BfTlVNX0NPTk5fQVRURU1QVFNfVl85IDB4OQorI2RlZmluZSBUSU1QQU5JX1BBX0NMQVNTRF9SX09DUDFfQ0xBU1NEX1JfT0NQX05VTV9DT05OX0FUVEVNUFRTX1ZfMTAgMHhBCisjZGVmaW5lIFRJTVBBTklfUEFfQ0xBU1NEX1JfT0NQMV9DTEFTU0RfUl9PQ1BfTlVNX0NPTk5fQVRURU1QVFNfVl8xMSAweEIKKyNkZWZpbmUgVElNUEFOSV9QQV9DTEFTU0RfUl9PQ1AxX0NMQVNTRF9SX09DUF9OVU1fQ09OTl9BVFRFTVBUU19WXzEyIDB4QworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9QQV9DTEFTU0RfUl9PQ1AxX0NMQVNTRF9SX09DUF9OVU1fQ09OTl9BVFRFTVBUU19WXzEzIDB4RAorI2RlZmluZSBUSU1QQU5JX1BBX0NMQVNTRF9SX09DUDFfQ0xBU1NEX1JfT0NQX05VTV9DT05OX0FUVEVNUFRTX1ZfMTQgMHhFCisjZGVmaW5lIFRJTVBBTklfUEFfQ0xBU1NEX1JfT0NQMV9DTEFTU0RfUl9PQ1BfTlVNX0NPTk5fQVRURU1QVFNfVl8xNSAweEYKKyNkZWZpbmUgVElNUEFOSV9BX1BBX0NMQVNTRF9SX09DUDIgKDB4NEEpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX1BBX0NMQVNTRF9SX09DUDJfUldDICJSVyIKKyNkZWZpbmUgVElNUEFOSV9QQV9DTEFTU0RfUl9PQ1AyX1BPUiAweDc3CisjZGVmaW5lIFRJTVBBTklfUEFfQ0xBU1NEX1JfT0NQMl9TIDAKKyNkZWZpbmUgVElNUEFOSV9QQV9DTEFTU0RfUl9PQ1AyX00gMHhGRgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9QQV9DTEFTU0RfUl9PQ1AyX0NMQVNTRF9SX09DUF9PQ1BfV0FJVF9DTlRfUyA0CisjZGVmaW5lIFRJTVBBTklfUEFfQ0xBU1NEX1JfT0NQMl9DTEFTU0RfUl9PQ1BfT0NQX1dBSVRfQ05UX00gMHhGMAorI2RlZmluZSBUSU1QQU5JX1BBX0NMQVNTRF9SX09DUDJfQ0xBU1NEX1JfT0NQX09DUF9XQUlUX0NOVF9WXzI1NSAweDAKKyNkZWZpbmUgVElNUEFOSV9QQV9DTEFTU0RfUl9PQ1AyX0NMQVNTRF9SX09DUF9PQ1BfV0FJVF9DTlRfVl81MTEgMHgxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX1BBX0NMQVNTRF9SX09DUDJfQ0xBU1NEX1JfT0NQX09DUF9XQUlUX0NOVF9WXzc2NyAweDIKKyNkZWZpbmUgVElNUEFOSV9QQV9DTEFTU0RfUl9PQ1AyX0NMQVNTRF9SX09DUF9PQ1BfV0FJVF9DTlRfVl8xMDIzIDB4MworI2RlZmluZSBUSU1QQU5JX1BBX0NMQVNTRF9SX09DUDJfQ0xBU1NEX1JfT0NQX09DUF9XQUlUX0NOVF9WXzEyNzkgMHg0CisjZGVmaW5lIFRJTVBBTklfUEFfQ0xBU1NEX1JfT0NQMl9DTEFTU0RfUl9PQ1BfT0NQX1dBSVRfQ05UX1ZfMTUzNSAweDUKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfUEFfQ0xBU1NEX1JfT0NQMl9DTEFTU0RfUl9PQ1BfT0NQX1dBSVRfQ05UX1ZfMTc5MSAweDYKKyNkZWZpbmUgVElNUEFOSV9QQV9DTEFTU0RfUl9PQ1AyX0NMQVNTRF9SX09DUF9PQ1BfV0FJVF9DTlRfVl8yMDQ3IDB4NworI2RlZmluZSBUSU1QQU5JX1BBX0NMQVNTRF9SX09DUDJfQ0xBU1NEX1JfT0NQX09DUF9XQUlUX0NOVF9WXzIzMDMgMHg4CisjZGVmaW5lIFRJTVBBTklfUEFfQ0xBU1NEX1JfT0NQMl9DTEFTU0RfUl9PQ1BfT0NQX1dBSVRfQ05UX1ZfMjU1OSAweDkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfUEFfQ0xBU1NEX1JfT0NQMl9DTEFTU0RfUl9PQ1BfT0NQX1dBSVRfQ05UX1ZfMjgxNSAweEEKKyNkZWZpbmUgVElNUEFOSV9QQV9DTEFTU0RfUl9PQ1AyX0NMQVNTRF9SX09DUF9PQ1BfV0FJVF9DTlRfVl8zMDcxIDB4QgorI2RlZmluZSBUSU1QQU5JX1BBX0NMQVNTRF9SX09DUDJfQ0xBU1NEX1JfT0NQX09DUF9XQUlUX0NOVF9WXzMzMjcgMHhDCisjZGVmaW5lIFRJTVBBTklfUEFfQ0xBU1NEX1JfT0NQMl9DTEFTU0RfUl9PQ1BfT0NQX1dBSVRfQ05UX1ZfMzU4MyAweEQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfUEFfQ0xBU1NEX1JfT0NQMl9DTEFTU0RfUl9PQ1BfT0NQX1dBSVRfQ05UX1ZfMzgzOSAweEUKKyNkZWZpbmUgVElNUEFOSV9QQV9DTEFTU0RfUl9PQ1AyX0NMQVNTRF9SX09DUF9PQ1BfV0FJVF9DTlRfVl80MDk1IDB4RgorI2RlZmluZSBUSU1QQU5JX1BBX0NMQVNTRF9SX09DUDJfQ0xBU1NEX1JfT0NQX09DUF9SVU5fQ05UX1MgMAorI2RlZmluZSBUSU1QQU5JX1BBX0NMQVNTRF9SX09DUDJfQ0xBU1NEX1JfT0NQX09DUF9SVU5fQ05UX00gMHhGCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX1BBX0NMQVNTRF9SX09DUDJfQ0xBU1NEX1JfT0NQX09DUF9SVU5fQ05UX1ZfMjU1IDB4MAorI2RlZmluZSBUSU1QQU5JX1BBX0NMQVNTRF9SX09DUDJfQ0xBU1NEX1JfT0NQX09DUF9SVU5fQ05UX1ZfNTExIDB4MQorI2RlZmluZSBUSU1QQU5JX1BBX0NMQVNTRF9SX09DUDJfQ0xBU1NEX1JfT0NQX09DUF9SVU5fQ05UX1ZfNzY3IDB4MgorI2RlZmluZSBUSU1QQU5JX1BBX0NMQVNTRF9SX09DUDJfQ0xBU1NEX1JfT0NQX09DUF9SVU5fQ05UX1ZfMTAyMyAweDMKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfUEFfQ0xBU1NEX1JfT0NQMl9DTEFTU0RfUl9PQ1BfT0NQX1JVTl9DTlRfVl8xMjc5IDB4NAorI2RlZmluZSBUSU1QQU5JX1BBX0NMQVNTRF9SX09DUDJfQ0xBU1NEX1JfT0NQX09DUF9SVU5fQ05UX1ZfMTUzNSAweDUKKyNkZWZpbmUgVElNUEFOSV9QQV9DTEFTU0RfUl9PQ1AyX0NMQVNTRF9SX09DUF9PQ1BfUlVOX0NOVF9WXzE3OTEgMHg2CisjZGVmaW5lIFRJTVBBTklfUEFfQ0xBU1NEX1JfT0NQMl9DTEFTU0RfUl9PQ1BfT0NQX1JVTl9DTlRfVl8yMDQ3IDB4NworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9QQV9DTEFTU0RfUl9PQ1AyX0NMQVNTRF9SX09DUF9PQ1BfUlVOX0NOVF9WXzIzMDMgMHg4CisjZGVmaW5lIFRJTVBBTklfUEFfQ0xBU1NEX1JfT0NQMl9DTEFTU0RfUl9PQ1BfT0NQX1JVTl9DTlRfVl8yNTU5IDB4OQorI2RlZmluZSBUSU1QQU5JX1BBX0NMQVNTRF9SX09DUDJfQ0xBU1NEX1JfT0NQX09DUF9SVU5fQ05UX1ZfMjgxNSAweEEKKyNkZWZpbmUgVElNUEFOSV9QQV9DTEFTU0RfUl9PQ1AyX0NMQVNTRF9SX09DUF9PQ1BfUlVOX0NOVF9WXzMwNzEgMHhCCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX1BBX0NMQVNTRF9SX09DUDJfQ0xBU1NEX1JfT0NQX09DUF9SVU5fQ05UX1ZfMzMyNyAweEMKKyNkZWZpbmUgVElNUEFOSV9QQV9DTEFTU0RfUl9PQ1AyX0NMQVNTRF9SX09DUF9PQ1BfUlVOX0NOVF9WXzM1ODMgMHhECisjZGVmaW5lIFRJTVBBTklfUEFfQ0xBU1NEX1JfT0NQMl9DTEFTU0RfUl9PQ1BfT0NQX1JVTl9DTlRfVl8zODM5IDB4RQorI2RlZmluZSBUSU1QQU5JX1BBX0NMQVNTRF9SX09DUDJfQ0xBU1NEX1JfT0NQX09DUF9SVU5fQ05UX1ZfNDA5NSAweEYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQV9QQV9IUEhfQ1RMMSAoMHg0QikKKyNkZWZpbmUgVElNUEFOSV9QQV9IUEhfQ1RMMV9SV0MgIlJXIgorI2RlZmluZSBUSU1QQU5JX1BBX0hQSF9DVEwxX1BPUiAweDQ0CisjZGVmaW5lIFRJTVBBTklfUEFfSFBIX0NUTDFfUyAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX1BBX0hQSF9DVEwxX00gMHhGRgorI2RlZmluZSBUSU1QQU5JX1BBX0hQSF9DVEwxX0hQSF9HTTNfQklBU19TIDQKKyNkZWZpbmUgVElNUEFOSV9QQV9IUEhfQ1RMMV9IUEhfR00zX0JJQVNfTSAweEYwCisjZGVmaW5lIFRJTVBBTklfUEFfSFBIX0NUTDFfSFBIX0dNM19CSUFTX1ZfNDAwUEVSIDB4MQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9QQV9IUEhfQ1RMMV9IUEhfR00zX0JJQVNfVl8yMDBQRVIgMHgyCisjZGVmaW5lIFRJTVBBTklfUEFfSFBIX0NUTDFfSFBIX0dNM19CSUFTX1ZfMTMzUEVSIDB4MworI2RlZmluZSBUSU1QQU5JX1BBX0hQSF9DVEwxX0hQSF9HTTNfQklBU19WXzEwMFBFUiAweDQKKyNkZWZpbmUgVElNUEFOSV9QQV9IUEhfQ1RMMV9IUEhfR00zX0JJQVNfVl82NlBFUiAweDYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfUEFfSFBIX0NUTDFfSFBIX0dNM19CSUFTX1ZfNTBQRVIgMHg4CisjZGVmaW5lIFRJTVBBTklfUEFfSFBIX0NUTDFfSFBIX0dNM19CSUFTX1ZfMzNQRVIgMHhDCisjZGVmaW5lIFRJTVBBTklfUEFfSFBIX0NUTDFfSFBIX1NIT1JUX0NJUkNVSVRfREVUX0VOX1MgMworI2RlZmluZSBUSU1QQU5JX1BBX0hQSF9DVEwxX0hQSF9TSE9SVF9DSVJDVUlUX0RFVF9FTl9NIDB4OAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9QQV9IUEhfQ1RMMV9IUEhfU0hPUlRfQ0lSQ1VJVF9ERVRfRU5fRElTQUJMRSAweDAKKyNkZWZpbmUgVElNUEFOSV9QQV9IUEhfQ1RMMV9IUEhfU0hPUlRfQ0lSQ1VJVF9ERVRfRU5fRU5BQkxFIDB4MQorI2RlZmluZSBUSU1QQU5JX1BBX0hQSF9DVEwxX0hQSF9TSE9SVF9DSVJDVUlUX0NVUl9MSU1JVF9TIDAKKyNkZWZpbmUgVElNUEFOSV9QQV9IUEhfQ1RMMV9IUEhfU0hPUlRfQ0lSQ1VJVF9DVVJfTElNSVRfTSAweDcKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfUEFfSFBIX0NUTDFfSFBIX1NIT1JUX0NJUkNVSVRfQ1VSX0xJTUlUX1ZfMzAwTUEgMHgwCisjZGVmaW5lIFRJTVBBTklfUEFfSFBIX0NUTDFfSFBIX1NIT1JUX0NJUkNVSVRfQ1VSX0xJTUlUX1ZfMzUwTUEgMHgyCisjZGVmaW5lIFRJTVBBTklfUEFfSFBIX0NUTDFfSFBIX1NIT1JUX0NJUkNVSVRfQ1VSX0xJTUlUX1ZfMzY1TUEgMHgzCisjZGVmaW5lIFRJTVBBTklfUEFfSFBIX0NUTDFfSFBIX1NIT1JUX0NJUkNVSVRfQ1VSX0xJTUlUX1ZfMTUwTUEgMHg0CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX1BBX0hQSF9DVEwxX0hQSF9TSE9SVF9DSVJDVUlUX0NVUl9MSU1JVF9WXzE5ME1BIDB4NgorI2RlZmluZSBUSU1QQU5JX1BBX0hQSF9DVEwxX0hQSF9TSE9SVF9DSVJDVUlUX0NVUl9MSU1JVF9WXzIyME1BIDB4NworI2RlZmluZSBUSU1QQU5JX0FfUEFfSFBIX0NUTDIgKDB4NEMpCisjZGVmaW5lIFRJTVBBTklfUEFfSFBIX0NUTDJfUldDICJSVyIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfUEFfSFBIX0NUTDJfUE9SIDB4QzgKKyNkZWZpbmUgVElNUEFOSV9QQV9IUEhfQ1RMMl9TIDAKKyNkZWZpbmUgVElNUEFOSV9QQV9IUEhfQ1RMMl9NIDB4RkYKKyNkZWZpbmUgVElNUEFOSV9QQV9IUEhfQ1RMMl9IUEhfU1dfVk5FR19DVExfUyA3CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX1BBX0hQSF9DVEwyX0hQSF9TV19WTkVHX0NUTF9NIDB4ODAKKyNkZWZpbmUgVElNUEFOSV9QQV9IUEhfQ1RMMl9IUEhfU1dfVk5FR19DVExfVk5FRyAweDEKKyNkZWZpbmUgVElNUEFOSV9QQV9IUEhfQ1RMMl9IUEhfU1dfVk5FR19DVExfVlNTIDB4MAorI2RlZmluZSBUSU1QQU5JX1BBX0hQSF9DVEwyX0hQSF9WTkVHX1BTX0dBSU5fUyA2CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX1BBX0hQSF9DVEwyX0hQSF9WTkVHX1BTX0dBSU5fTSAweDQwCisjZGVmaW5lIFRJTVBBTklfUEFfSFBIX0NUTDJfSFBIX1ZORUdfUFNfR0FJTl9WXzFfNSAweDEKKyNkZWZpbmUgVElNUEFOSV9QQV9IUEhfQ1RMMl9IUEhfVk5FR19QU19HQUlOX1ZfMl81IDB4MAorI2RlZmluZSBUSU1QQU5JX1BBX0hQSF9DVEwyX0hQSF9QU19GSUxURVJfRU5fUyA1CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX1BBX0hQSF9DVEwyX0hQSF9QU19GSUxURVJfRU5fTSAweDIwCisjZGVmaW5lIFRJTVBBTklfUEFfSFBIX0NUTDJfSFBIX1BTX0ZJTFRFUl9FTl9FTkFCTEUgMHgxCisjZGVmaW5lIFRJTVBBTklfUEFfSFBIX0NUTDJfSFBIX1BTX0ZJTFRFUl9FTl9ESVNBQkxFIDB4MAorI2RlZmluZSBUSU1QQU5JX1BBX0hQSF9DVEwyX0hQSF9PQ1BfRU5fUyA0CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX1BBX0hQSF9DVEwyX0hQSF9PQ1BfRU5fTSAweDEwCisjZGVmaW5lIFRJTVBBTklfUEFfSFBIX0NUTDJfSFBIX09DUF9FTl9FTkFCTEUgMHgxCisjZGVmaW5lIFRJTVBBTklfUEFfSFBIX0NUTDJfSFBIX09DUF9FTl9ESVNBQkxFIDB4MAorI2RlZmluZSBUSU1QQU5JX1BBX0hQSF9DVEwyX0hQSF9WUkVGX1NFTF9TIDIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfUEFfSFBIX0NUTDJfSFBIX1ZSRUZfU0VMX00gMHhDCisjZGVmaW5lIFRJTVBBTklfUEFfSFBIX0NUTDJfSFBIX1ZSRUZfU0VMX0dST1VORCAweDAKKyNkZWZpbmUgVElNUEFOSV9QQV9IUEhfQ1RMMl9IUEhfVlJFRl9TRUxfSUJJQVNfT05fUkVTSVNUT1IgMHgxCisjZGVmaW5lIFRJTVBBTklfUEFfSFBIX0NUTDJfSFBIX1ZSRUZfU0VMX0JHIDB4MgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9QQV9IUEhfQ1RMMl9IUEhfVlJFRl9TRUxfQVZERF9CWV8yIDB4MworI2RlZmluZSBUSU1QQU5JX1BBX0hQSF9DVEwyX0hQSF9PVVRfU0hVTlRfRU5fUyAxCisjZGVmaW5lIFRJTVBBTklfUEFfSFBIX0NUTDJfSFBIX09VVF9TSFVOVF9FTl9NIDB4MgorI2RlZmluZSBUSU1QQU5JX1BBX0hQSF9DVEwyX0hQSF9PVVRfU0hVTlRfRU5fRElTQUJMRSAweDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfUEFfSFBIX0NUTDJfSFBIX09VVF9TSFVOVF9FTl9FTkFCTEUgMHgxCisjZGVmaW5lIFRJTVBBTklfUEFfSFBIX0NUTDJfUkVTRVJWRURfUyAwCisjZGVmaW5lIFRJTVBBTklfUEFfSFBIX0NUTDJfUkVTRVJWRURfTSAweDEKKyNkZWZpbmUgVElNUEFOSV9BX1BBX0xJTkVfQVVYT19DVEwgKDB4NEQpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX1BBX0xJTkVfQVVYT19DVExfUldDICJSVyIKKyNkZWZpbmUgVElNUEFOSV9QQV9MSU5FX0FVWE9fQ1RMX1BPUiAweDIKKyNkZWZpbmUgVElNUEFOSV9QQV9MSU5FX0FVWE9fQ1RMX1MgMAorI2RlZmluZSBUSU1QQU5JX1BBX0xJTkVfQVVYT19DVExfTSAweEZGCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX1BBX0xJTkVfQVVYT19DVExfTElORU9fQVVYT19SQU1QR0VOX0NOVF9TIDYKKyNkZWZpbmUgVElNUEFOSV9QQV9MSU5FX0FVWE9fQ1RMX0xJTkVPX0FVWE9fUkFNUEdFTl9DTlRfTSAweEMwCisjZGVmaW5lIFRJTVBBTklfUEFfTElORV9BVVhPX0NUTF9MSU5FT19BVVhPX1JBTVBHRU5fQ05UX1ZfMV83NU5BIDB4MAorI2RlZmluZSBUSU1QQU5JX1BBX0xJTkVfQVVYT19DVExfTElORU9fQVVYT19SQU1QR0VOX0NOVF9WXzNfNU5BIDB4MQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9QQV9MSU5FX0FVWE9fQ1RMX0xJTkVPX0FVWE9fUkFNUEdFTl9DTlRfVl81XzI1TkEgMHgyCisjZGVmaW5lIFRJTVBBTklfUEFfTElORV9BVVhPX0NUTF9MSU5FT19BVVhPX1JBTVBHRU5fQ05UX1ZfMTBOQSAweDMKKyNkZWZpbmUgVElNUEFOSV9QQV9MSU5FX0FVWE9fQ1RMX0xJTkVPX0xfQklBU19DVVJfUyA0CisjZGVmaW5lIFRJTVBBTklfUEFfTElORV9BVVhPX0NUTF9MSU5FT19MX0JJQVNfQ1VSX00gMHgzMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9QQV9MSU5FX0FVWE9fQ1RMX0xJTkVPX0xfQklBU19DVVJfVl82MFVBIDB4MAorI2RlZmluZSBUSU1QQU5JX1BBX0xJTkVfQVVYT19DVExfTElORU9fTF9CSUFTX0NVUl9WXzMwVUFfMSAweDEKKyNkZWZpbmUgVElNUEFOSV9QQV9MSU5FX0FVWE9fQ1RMX0xJTkVPX0xfQklBU19DVVJfVl8zMFVBXzIgMHgyCisjZGVmaW5lIFRJTVBBTklfUEFfTElORV9BVVhPX0NUTF9MSU5FT19MX0JJQVNfQ1VSX1ZfMTVVQSAweDMKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfUEFfTElORV9BVVhPX0NUTF9MSU5FT19SX0JJQVNfQ1VSX1MgMgorI2RlZmluZSBUSU1QQU5JX1BBX0xJTkVfQVVYT19DVExfTElORU9fUl9CSUFTX0NVUl9NIDB4QworI2RlZmluZSBUSU1QQU5JX1BBX0xJTkVfQVVYT19DVExfTElORU9fUl9CSUFTX0NVUl9WXzYwVUEgMHgwCisjZGVmaW5lIFRJTVBBTklfUEFfTElORV9BVVhPX0NUTF9MSU5FT19SX0JJQVNfQ1VSX1ZfMzBVQV8xIDB4MQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9QQV9MSU5FX0FVWE9fQ1RMX0xJTkVPX1JfQklBU19DVVJfVl8zMFVBXzIgMHgyCisjZGVmaW5lIFRJTVBBTklfUEFfTElORV9BVVhPX0NUTF9MSU5FT19SX0JJQVNfQ1VSX1ZfMTVVQSAweDMKKyNkZWZpbmUgVElNUEFOSV9QQV9MSU5FX0FVWE9fQ1RMX0xJTkVPX0FVWE9fQ01fUkVGX1NFTF9TIDAKKyNkZWZpbmUgVElNUEFOSV9QQV9MSU5FX0FVWE9fQ1RMX0xJTkVPX0FVWE9fQ01fUkVGX1NFTF9NIDB4MworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9QQV9MSU5FX0FVWE9fQ1RMX0xJTkVPX0FVWE9fQ01fUkVGX1NFTF9WU1NBIDB4MAorI2RlZmluZSBUSU1QQU5JX1BBX0xJTkVfQVVYT19DVExfTElORU9fQVVYT19DTV9SRUZfU0VMX0JHIDB4MgorI2RlZmluZSBUSU1QQU5JX1BBX0xJTkVfQVVYT19DVExfTElORU9fQVVYT19DTV9SRUZfU0VMX1ZEREFfQllfMiAweDMKKyNkZWZpbmUgVElNUEFOSV9BX1BBX0FVWE9fRUFSUEFfQ1RMICgweDRFKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9QQV9BVVhPX0VBUlBBX0NUTF9SV0MgIlJXIgorI2RlZmluZSBUSU1QQU5JX1BBX0FVWE9fRUFSUEFfQ1RMX1BPUiAweGUKKyNkZWZpbmUgVElNUEFOSV9QQV9BVVhPX0VBUlBBX0NUTF9TIDAKKyNkZWZpbmUgVElNUEFOSV9QQV9BVVhPX0VBUlBBX0NUTF9NIDB4RkYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfUEFfQVVYT19FQVJQQV9DVExfUkVTRVJWRURfUyA2CisjZGVmaW5lIFRJTVBBTklfUEFfQVVYT19FQVJQQV9DVExfUkVTRVJWRURfTSAweEMwCisjZGVmaW5lIFRJTVBBTklfUEFfQVVYT19FQVJQQV9DVExfQVVYT19CSUFTX0NVUl9TIDQKKyNkZWZpbmUgVElNUEFOSV9QQV9BVVhPX0VBUlBBX0NUTF9BVVhPX0JJQVNfQ1VSX00gMHgzMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9QQV9BVVhPX0VBUlBBX0NUTF9BVVhPX0JJQVNfQ1VSX1ZfNjBVQSAweDAKKyNkZWZpbmUgVElNUEFOSV9QQV9BVVhPX0VBUlBBX0NUTF9BVVhPX0JJQVNfQ1VSX1ZfMzBVQSAweDEKKyNkZWZpbmUgVElNUEFOSV9QQV9BVVhPX0VBUlBBX0NUTF9BVVhPX0JJQVNfQ1VSX1ZfMzBVQV9TQU1FX0FTXzAxIDB4MgorI2RlZmluZSBUSU1QQU5JX1BBX0FVWE9fRUFSUEFfQ1RMX0FVWE9fQklBU19DVVJfVl8xNVVBIDB4MworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9QQV9BVVhPX0VBUlBBX0NUTF9BVVhPX0dBSU5fUyAzCisjZGVmaW5lIFRJTVBBTklfUEFfQVVYT19FQVJQQV9DVExfQVVYT19HQUlOX00gMHg4CisjZGVmaW5lIFRJTVBBTklfUEFfQVVYT19FQVJQQV9DVExfQVVYT19HQUlOX05FR180XzVEQiAweDEKKyNkZWZpbmUgVElNUEFOSV9QQV9BVVhPX0VBUlBBX0NUTF9BVVhPX0dBSU5fTkVHXzNfMERCIDB4MAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9QQV9BVVhPX0VBUlBBX0NUTF9FQVJQQV9NQVNURVJfQklBU19DVVJfUyAxCisjZGVmaW5lIFRJTVBBTklfUEFfQVVYT19FQVJQQV9DVExfRUFSUEFfTUFTVEVSX0JJQVNfQ1VSX00gMHg2CisjZGVmaW5lIFRJTVBBTklfUEFfQVVYT19FQVJQQV9DVExfRUFSUEFfTUFTVEVSX0JJQVNfQ1VSX1ZfMTJfNVVBIDB4MAorI2RlZmluZSBUSU1QQU5JX1BBX0FVWE9fRUFSUEFfQ1RMX0VBUlBBX01BU1RFUl9CSUFTX0NVUl9WXzEwXzBVQSAweDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfUEFfQVVYT19FQVJQQV9DVExfRUFSUEFfTUFTVEVSX0JJQVNfQ1VSX1ZfN181VUEgMHgyCisjZGVmaW5lIFRJTVBBTklfUEFfQVVYT19FQVJQQV9DVExfRUFSUEFfTUFTVEVSX0JJQVNfQ1VSX1ZfNV8wVUEgMHgzCisjZGVmaW5lIFRJTVBBTklfUEFfQVVYT19FQVJQQV9DVExfRUFSUEFfVkNNX1NPVVJDRV9TIDAKKyNkZWZpbmUgVElNUEFOSV9QQV9BVVhPX0VBUlBBX0NUTF9FQVJQQV9WQ01fU09VUkNFX00gMHgxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX1BBX0FVWE9fRUFSUEFfQ1RMX0VBUlBBX1ZDTV9TT1VSQ0VfQkcgMHgxCisjZGVmaW5lIFRJTVBBTklfUEFfQVVYT19FQVJQQV9DVExfRUFSUEFfVkNNX1NPVVJDRV9MT0NBTF9WQ00gMHgwCisjZGVmaW5lIFRJTVBBTklfQV9QQV9FQVJPX0NUTCAoMHg0RikKKyNkZWZpbmUgVElNUEFOSV9QQV9FQVJPX0NUTF9SV0MgIlJXIgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9QQV9FQVJPX0NUTF9QT1IgMHgwCisjZGVmaW5lIFRJTVBBTklfUEFfRUFST19DVExfUyAwCisjZGVmaW5lIFRJTVBBTklfUEFfRUFST19DVExfTSAweEZGCisjZGVmaW5lIFRJTVBBTklfUEFfRUFST19DVExfRUFSUEFfU1RBUlRVUF9TIDcKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfUEFfRUFST19DVExfRUFSUEFfU1RBUlRVUF9NIDB4ODAKKyNkZWZpbmUgVElNUEFOSV9QQV9FQVJPX0NUTF9FQVJQQV9TVEFSVFVQX05PUk1BTF9PUCAweDAKKyNkZWZpbmUgVElNUEFOSV9QQV9FQVJPX0NUTF9FQVJQQV9TVEFSVFVQX0NPTk5FQ1RfSU5QVVRTX1RPX0dST1VORCAweDEKKyNkZWZpbmUgVElNUEFOSV9QQV9FQVJPX0NUTF9FQVJQQV9CWVBBU1NfSU5QVVRfQ01fUyA2CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX1BBX0VBUk9fQ1RMX0VBUlBBX0JZUEFTU19JTlBVVF9DTV9NIDB4NDAKKyNkZWZpbmUgVElNUEFOSV9QQV9FQVJPX0NUTF9FQVJQQV9CWVBBU1NfSU5QVVRfQ01fTk9fQllQQVNTIDB4MAorI2RlZmluZSBUSU1QQU5JX1BBX0VBUk9fQ1RMX0VBUlBBX0JZUEFTU19JTlBVVF9DTV9CWVBBU1MgMHgxCisjZGVmaW5lIFRJTVBBTklfUEFfRUFST19DVExfRUFSUEFfTk1PU19CSUFTX0NVUl9TIDMKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfUEFfRUFST19DVExfRUFSUEFfTk1PU19CSUFTX0NVUl9NIDB4MzgKKyNkZWZpbmUgVElNUEFOSV9QQV9FQVJPX0NUTF9FQVJQQV9OTU9TX0JJQVNfQ1VSX1ZfMjEzVUEgMHgwCisjZGVmaW5lIFRJTVBBTklfUEFfRUFST19DVExfRUFSUEFfTk1PU19CSUFTX0NVUl9WXzI4MFVBIDB4MQorI2RlZmluZSBUSU1QQU5JX1BBX0VBUk9fQ1RMX0VBUlBBX05NT1NfQklBU19DVVJfVl80MDhVQV8xIDB4MgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9QQV9FQVJPX0NUTF9FQVJQQV9OTU9TX0JJQVNfQ1VSX1ZfNzgwVUFfMSAweDMKKyNkZWZpbmUgVElNUEFOSV9QQV9FQVJPX0NUTF9FQVJQQV9OTU9TX0JJQVNfQ1VSX1ZfNDA4VUFfMiAweDQKKyNkZWZpbmUgVElNUEFOSV9QQV9FQVJPX0NUTF9FQVJQQV9OTU9TX0JJQVNfQ1VSX1ZfNTMwVUEgMHg1CisjZGVmaW5lIFRJTVBBTklfUEFfRUFST19DVExfRUFSUEFfTk1PU19CSUFTX0NVUl9WXzc4MFVBXzIgMHg2CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX1BBX0VBUk9fQ1RMX0VBUlBBX05NT1NfQklBU19DVVJfVl8xNDgwVUEgMHg3CisjZGVmaW5lIFRJTVBBTklfUEFfRUFST19DVExfRUFSUEFfUE1PU19CSUFTX0NVUl9TIDAKKyNkZWZpbmUgVElNUEFOSV9QQV9FQVJPX0NUTF9FQVJQQV9QTU9TX0JJQVNfQ1VSX00gMHg3CisjZGVmaW5lIFRJTVBBTklfUEFfRUFST19DVExfRUFSUEFfUE1PU19CSUFTX0NVUl9WXzIxM1VBIDB4MAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9QQV9FQVJPX0NUTF9FQVJQQV9QTU9TX0JJQVNfQ1VSX1ZfMjgwVUEgMHgxCisjZGVmaW5lIFRJTVBBTklfUEFfRUFST19DVExfRUFSUEFfUE1PU19CSUFTX0NVUl9WXzQwOFVBXzEgMHgyCisjZGVmaW5lIFRJTVBBTklfUEFfRUFST19DVExfRUFSUEFfUE1PU19CSUFTX0NVUl9WXzc4MFVBXzEgMHgzCisjZGVmaW5lIFRJTVBBTklfUEFfRUFST19DVExfRUFSUEFfUE1PU19CSUFTX0NVUl9WXzQwOFVBXzIgMHg0CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX1BBX0VBUk9fQ1RMX0VBUlBBX1BNT1NfQklBU19DVVJfVl81MzBVQSAweDUKKyNkZWZpbmUgVElNUEFOSV9QQV9FQVJPX0NUTF9FQVJQQV9QTU9TX0JJQVNfQ1VSX1ZfNzgwVUFfMiAweDYKKyNkZWZpbmUgVElNUEFOSV9QQV9FQVJPX0NUTF9FQVJQQV9QTU9TX0JJQVNfQ1VSX1ZfMTQ4MFVBIDB4NworI2RlZmluZSBUSU1QQU5JX0FfUEFfTUFTVEVSX0JJQVNfQ1VSICgweDUwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9QQV9NQVNURVJfQklBU19DVVJfUldDICJSVyIKKyNkZWZpbmUgVElNUEFOSV9QQV9NQVNURVJfQklBU19DVVJfUE9SIDB4ZWEKKyNkZWZpbmUgVElNUEFOSV9QQV9NQVNURVJfQklBU19DVVJfUyAwCisjZGVmaW5lIFRJTVBBTklfUEFfTUFTVEVSX0JJQVNfQ1VSX00gMHhGRgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9QQV9NQVNURVJfQklBU19DVVJfUkFNUEdFTl9NQVNURVJfQklBU19DVVJfUyA3CisjZGVmaW5lIFRJTVBBTklfUEFfTUFTVEVSX0JJQVNfQ1VSX1JBTVBHRU5fTUFTVEVSX0JJQVNfQ1VSX00gMHg4MAorI2RlZmluZSBUSU1QQU5JX1BBX01BU1RFUl9CSUFTX0NVUl9SQU1QR0VOX01BU1RFUl9CSUFTX0NVUl9WXzJfNVVBIDB4MQorI2RlZmluZSBUSU1QQU5JX1BBX01BU1RFUl9CSUFTX0NVUl9SQU1QR0VOX01BU1RFUl9CSUFTX0NVUl9WXzVVQSAweDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfUEFfTUFTVEVSX0JJQVNfQ1VSX0FVWFBHQV9CSUFTX0NVUl9TIDUKKyNkZWZpbmUgVElNUEFOSV9QQV9NQVNURVJfQklBU19DVVJfQVVYUEdBX0JJQVNfQ1VSX00gMHg2MAorI2RlZmluZSBUSU1QQU5JX1BBX01BU1RFUl9CSUFTX0NVUl9BVVhQR0FfQklBU19DVVJfVl8xMFVBIDB4MAorI2RlZmluZSBUSU1QQU5JX1BBX01BU1RFUl9CSUFTX0NVUl9BVVhQR0FfQklBU19DVVJfVl83XzVVQSAweDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfUEFfTUFTVEVSX0JJQVNfQ1VSX0FVWFBHQV9CSUFTX0NVUl9WXzVfMFVBIDB4MgorI2RlZmluZSBUSU1QQU5JX1BBX01BU1RFUl9CSUFTX0NVUl9BVVhQR0FfQklBU19DVVJfVl8yXzVVQSAweDMKKyNkZWZpbmUgVElNUEFOSV9QQV9NQVNURVJfQklBU19DVVJfSFBIX1ZDTV9CVUZGX0JJQVNfQ1VSUl9TIDMKKyNkZWZpbmUgVElNUEFOSV9QQV9NQVNURVJfQklBU19DVVJfSFBIX1ZDTV9CVUZGX0JJQVNfQ1VSUl9NIDB4MTgKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfUEFfTUFTVEVSX0JJQVNfQ1VSX0hQSF9WQ01fQlVGRl9CSUFTX0NVUlJfVl82XzI1VUEgMHgwCisjZGVmaW5lIFRJTVBBTklfUEFfTUFTVEVSX0JJQVNfQ1VSX0hQSF9WQ01fQlVGRl9CSUFTX0NVUlJfVl81XzBVQSAweDEKKyNkZWZpbmUgVElNUEFOSV9QQV9NQVNURVJfQklBU19DVVJfSFBIX1ZDTV9CVUZGX0JJQVNfQ1VSUl9WXzNfNzVVQSAweDIKKyNkZWZpbmUgVElNUEFOSV9QQV9NQVNURVJfQklBU19DVVJfSFBIX1ZDTV9CVUZGX0JJQVNfQ1VSUl9WXzJfNVVBIDB4MworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9QQV9NQVNURVJfQklBU19DVVJfTElORV9WQ01fQlVGRl9CSUFTX0NVUlJfUyAxCisjZGVmaW5lIFRJTVBBTklfUEFfTUFTVEVSX0JJQVNfQ1VSX0xJTkVfVkNNX0JVRkZfQklBU19DVVJSX00gMHg2CisjZGVmaW5lIFRJTVBBTklfUEFfTUFTVEVSX0JJQVNfQ1VSX0xJTkVfVkNNX0JVRkZfQklBU19DVVJSX1ZfNl8yNVVBIDB4MAorI2RlZmluZSBUSU1QQU5JX1BBX01BU1RFUl9CSUFTX0NVUl9MSU5FX1ZDTV9CVUZGX0JJQVNfQ1VSUl9WXzVfMFVBIDB4MQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9QQV9NQVNURVJfQklBU19DVVJfTElORV9WQ01fQlVGRl9CSUFTX0NVUlJfVl8zXzc1VUEgMHgyCisjZGVmaW5lIFRJTVBBTklfUEFfTUFTVEVSX0JJQVNfQ1VSX0xJTkVfVkNNX0JVRkZfQklBU19DVVJSX1ZfMl81VUEgMHgzCisjZGVmaW5lIFRJTVBBTklfUEFfTUFTVEVSX0JJQVNfQ1VSX1JFU0VSVkVEX1MgMAorI2RlZmluZSBUSU1QQU5JX1BBX01BU1RFUl9CSUFTX0NVUl9SRVNFUlZFRF9NIDB4MQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9BX1BBX0NMQVNTRF9TQ19TVEFUVVMgKDB4NTEpCisjZGVmaW5lIFRJTVBBTklfUEFfQ0xBU1NEX1NDX1NUQVRVU19SV0MgIlIiCisjZGVmaW5lIFRJTVBBTklfUEFfQ0xBU1NEX1NDX1NUQVRVU19QT1IgMAorI2RlZmluZSBUSU1QQU5JX1BBX0NMQVNTRF9TQ19TVEFUVVNfUyAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX1BBX0NMQVNTRF9TQ19TVEFUVVNfTSAweEZGCisjZGVmaW5lIFRJTVBBTklfUEFfQ0xBU1NEX1NDX1NUQVRVU19DTEFTU0RfTF9TQ19ERVRfUyA3CisjZGVmaW5lIFRJTVBBTklfUEFfQ0xBU1NEX1NDX1NUQVRVU19DTEFTU0RfTF9TQ19ERVRfTSAweDgwCisjZGVmaW5lIFRJTVBBTklfUEFfQ0xBU1NEX1NDX1NUQVRVU19DTEFTU0RfTF9TQ19ERVRfTk9STUFMX09QIDB4MAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9QQV9DTEFTU0RfU0NfU1RBVFVTX0NMQVNTRF9MX1NDX0RFVF9TQ19ERVQgMHgxCisjZGVmaW5lIFRJTVBBTklfUEFfQ0xBU1NEX1NDX1NUQVRVU19DTEFTU0RfTF9QV1JfU1RBR0VfSElfWl9TIDYKKyNkZWZpbmUgVElNUEFOSV9QQV9DTEFTU0RfU0NfU1RBVFVTX0NMQVNTRF9MX1BXUl9TVEFHRV9ISV9aX00gMHg0MAorI2RlZmluZSBUSU1QQU5JX1BBX0NMQVNTRF9TQ19TVEFUVVNfQ0xBU1NEX0xfUFdSX1NUQUdFX0hJX1pfTk9STUFMX09QIDB4MAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9QQV9DTEFTU0RfU0NfU1RBVFVTX0NMQVNTRF9MX1BXUl9TVEFHRV9ISV9aX1BPV0VSX1NUQUdFX09GRiAweDEKKyNkZWZpbmUgVElNUEFOSV9QQV9DTEFTU0RfU0NfU1RBVFVTX1JFU0VSVkVEXzFfUyA0CisjZGVmaW5lIFRJTVBBTklfUEFfQ0xBU1NEX1NDX1NUQVRVU19SRVNFUlZFRF8xX00gMHgzMAorI2RlZmluZSBUSU1QQU5JX1BBX0NMQVNTRF9TQ19TVEFUVVNfQ0xBU1NEX1JfU0NfREVUX1MgMworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9QQV9DTEFTU0RfU0NfU1RBVFVTX0NMQVNTRF9SX1NDX0RFVF9NIDB4OAorI2RlZmluZSBUSU1QQU5JX1BBX0NMQVNTRF9TQ19TVEFUVVNfQ0xBU1NEX1JfU0NfREVUX05PUk1BTF9PUCAweDAKKyNkZWZpbmUgVElNUEFOSV9QQV9DTEFTU0RfU0NfU1RBVFVTX0NMQVNTRF9SX1NDX0RFVF9TQ19ERVQgMHgxCisjZGVmaW5lIFRJTVBBTklfUEFfQ0xBU1NEX1NDX1NUQVRVU19DTEFTU0RfUl9QV1JfU1RBR0VfSElfWl9TIDIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfUEFfQ0xBU1NEX1NDX1NUQVRVU19DTEFTU0RfUl9QV1JfU1RBR0VfSElfWl9NIDB4NAorI2RlZmluZSBUSU1QQU5JX1BBX0NMQVNTRF9TQ19TVEFUVVNfQ0xBU1NEX1JfUFdSX1NUQUdFX0hJX1pfTk9STUFMX09QIDB4MAorI2RlZmluZSBUSU1QQU5JX1BBX0NMQVNTRF9TQ19TVEFUVVNfQ0xBU1NEX1JfUFdSX1NUQUdFX0hJX1pfUE9XRVJfU1RBR0VfT0ZGIDB4MQorI2RlZmluZSBUSU1QQU5JX1BBX0NMQVNTRF9TQ19TVEFUVVNfUkVTRVJWRURfMl9TIDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfUEFfQ0xBU1NEX1NDX1NUQVRVU19SRVNFUlZFRF8yX00gMHgyCisjZGVmaW5lIFRJTVBBTklfUEFfQ0xBU1NEX1NDX1NUQVRVU19SRVNFUlZFRF9TIDAKKyNkZWZpbmUgVElNUEFOSV9QQV9DTEFTU0RfU0NfU1RBVFVTX1JFU0VSVkVEX00gMHgxCisjZGVmaW5lIFRJTVBBTklfQV9QQV9IUEhfU0NfU1RBVFVTICgweDUyKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9QQV9IUEhfU0NfU1RBVFVTX1JXQyAiUiIKKyNkZWZpbmUgVElNUEFOSV9QQV9IUEhfU0NfU1RBVFVTX1BPUiAwCisjZGVmaW5lIFRJTVBBTklfUEFfSFBIX1NDX1NUQVRVU19TIDAKKyNkZWZpbmUgVElNUEFOSV9QQV9IUEhfU0NfU1RBVFVTX00gMHhGRgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9QQV9IUEhfU0NfU1RBVFVTX0hQSF9MX1NDX0RFVF9TIDcKKyNkZWZpbmUgVElNUEFOSV9QQV9IUEhfU0NfU1RBVFVTX0hQSF9MX1NDX0RFVF9NIDB4ODAKKyNkZWZpbmUgVElNUEFOSV9QQV9IUEhfU0NfU1RBVFVTX0hQSF9MX1NDX0RFVF9OT1JNQUxfT1AgMHgwCisjZGVmaW5lIFRJTVBBTklfUEFfSFBIX1NDX1NUQVRVU19IUEhfTF9TQ19ERVRfU0NfREVUIDB4MQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9QQV9IUEhfU0NfU1RBVFVTX1JFU0VSVkVEXzFfUyA0CisjZGVmaW5lIFRJTVBBTklfUEFfSFBIX1NDX1NUQVRVU19SRVNFUlZFRF8xX00gMHg3MAorI2RlZmluZSBUSU1QQU5JX1BBX0hQSF9TQ19TVEFUVVNfSFBIX1JfU0NfREVUX1MgMworI2RlZmluZSBUSU1QQU5JX1BBX0hQSF9TQ19TVEFUVVNfSFBIX1JfU0NfREVUX00gMHg4CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX1BBX0hQSF9TQ19TVEFUVVNfSFBIX1JfU0NfREVUX05PUk1BTF9PUCAweDAKKyNkZWZpbmUgVElNUEFOSV9QQV9IUEhfU0NfU1RBVFVTX0hQSF9SX1NDX0RFVF9TQ19ERVQgMHgxCisjZGVmaW5lIFRJTVBBTklfUEFfSFBIX1NDX1NUQVRVU19SRVNFUlZFRF8yX1MgMgorI2RlZmluZSBUSU1QQU5JX1BBX0hQSF9TQ19TVEFUVVNfUkVTRVJWRURfMl9NIDB4NAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9QQV9IUEhfU0NfU1RBVFVTX1JFU0VSVkVEX1MgMAorI2RlZmluZSBUSU1QQU5JX1BBX0hQSF9TQ19TVEFUVVNfUkVTRVJWRURfTSAweDMKKyNkZWZpbmUgVElNUEFOSV9BX0FURVNUX0VOICgweDUzKQorI2RlZmluZSBUSU1QQU5JX0FURVNUX0VOX1JXQyAiUlciCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX0FURVNUX0VOX1BPUiAwCisjZGVmaW5lIFRJTVBBTklfQVRFU1RfRU5fUyAwCisjZGVmaW5lIFRJTVBBTklfQVRFU1RfRU5fTSAweEZGCisjZGVmaW5lIFRJTVBBTklfQVRFU1RfRU5fQVRFU1RfRU5fUyA3CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX0FURVNUX0VOX0FURVNUX0VOX00gMHg4MAorI2RlZmluZSBUSU1QQU5JX0FURVNUX0VOX0FURVNUX0VOX0RJU0FCTEUgMHgwCisjZGVmaW5lIFRJTVBBTklfQVRFU1RfRU5fQVRFU1RfRU5fRU5BQkxFIDB4MQorI2RlZmluZSBUSU1QQU5JX0FURVNUX0VOX1JFU0VSVkVEX1MgMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9BVEVTVF9FTl9SRVNFUlZFRF9NIDB4N0YKKyNkZWZpbmUgVElNUEFOSV9BX0FURVNUX1RTSEtBREMgKDB4NTQpCisjZGVmaW5lIFRJTVBBTklfQVRFU1RfVFNIS0FEQ19SV0MgIlJXIgorI2RlZmluZSBUSU1QQU5JX0FURVNUX1RTSEtBRENfUE9SIDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQVRFU1RfVFNIS0FEQ19TIDAKKyNkZWZpbmUgVElNUEFOSV9BVEVTVF9UU0hLQURDX00gMHhGRgorI2RlZmluZSBUSU1QQU5JX0FURVNUX1RTSEtBRENfUkVTRVJWRURfUyA0CisjZGVmaW5lIFRJTVBBTklfQVRFU1RfVFNIS0FEQ19SRVNFUlZFRF9NIDB4RjAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQVRFU1RfVFNIS0FEQ19BVEVTVF9UU0FEQ19BTl9DT05OX1MgMgorI2RlZmluZSBUSU1QQU5JX0FURVNUX1RTSEtBRENfQVRFU1RfVFNBRENfQU5fQ09OTl9NIDB4QworI2RlZmluZSBUSU1QQU5JX0FURVNUX1RTSEtBRENfQVRFU1RfVFNBRENfQU5fQ09OTl9OT19DT05ORUNUIDB4MAorI2RlZmluZSBUSU1QQU5JX0FURVNUX1RTSEtBRENfQVRFU1RfVFNBRENfQU5fQ09OTl9NVVgxIDB4MQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9BVEVTVF9UU0hLQURDX0FURVNUX1RTQURDX0FOX0NPTk5fTVVYMiAweDIKKyNkZWZpbmUgVElNUEFOSV9BVEVTVF9UU0hLQURDX0FURVNUX1RTQURDX0FOX0NPTk5fTVVYMyAweDMKKyNkZWZpbmUgVElNUEFOSV9BVEVTVF9UU0hLQURDX0FURVNUX1RTQURDX0RJR19DT05OX1MgMAorI2RlZmluZSBUSU1QQU5JX0FURVNUX1RTSEtBRENfQVRFU1RfVFNBRENfRElHX0NPTk5fTSAweDMKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQVRFU1RfVFNIS0FEQ19BVEVTVF9UU0FEQ19ESUdfQ09OTl9OT19DT05ORUNUIDB4MAorI2RlZmluZSBUSU1QQU5JX0FURVNUX1RTSEtBRENfQVRFU1RfVFNBRENfRElHX0NPTk5fTVVYMSAweDEKKyNkZWZpbmUgVElNUEFOSV9BVEVTVF9UU0hLQURDX0FURVNUX1RTQURDX0RJR19DT05OX01VWDIgMHgyCisjZGVmaW5lIFRJTVBBTklfQVRFU1RfVFNIS0FEQ19BVEVTVF9UU0FEQ19ESUdfQ09OTl9NVVgzIDB4MworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9BX0FURVNUX1RYQURDMTMgKDB4NTUpCisjZGVmaW5lIFRJTVBBTklfQVRFU1RfVFhBREMxM19SV0MgIlJXIgorI2RlZmluZSBUSU1QQU5JX0FURVNUX1RYQURDMTNfUE9SIDAKKyNkZWZpbmUgVElNUEFOSV9BVEVTVF9UWEFEQzEzX1MgMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9BVEVTVF9UWEFEQzEzX00gMHhGRgorI2RlZmluZSBUSU1QQU5JX0FURVNUX1RYQURDMTNfUkVTRVJWRURfUyA3CisjZGVmaW5lIFRJTVBBTklfQVRFU1RfVFhBREMxM19SRVNFUlZFRF9NIDB4ODAKKyNkZWZpbmUgVElNUEFOSV9BVEVTVF9UWEFEQzEzX0FURVNUX1NFTF9MX1MgNgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9BVEVTVF9UWEFEQzEzX0FURVNUX1NFTF9MX00gMHg0MAorI2RlZmluZSBUSU1QQU5JX0FURVNUX1RYQURDMTNfQVRFU1RfU0VMX0xfVFhBREMxIDB4MAorI2RlZmluZSBUSU1QQU5JX0FURVNUX1RYQURDMTNfQVRFU1RfU0VMX0xfVFhBREMzIDB4MQorI2RlZmluZSBUSU1QQU5JX0FURVNUX1RYQURDMTNfQVRFU1QxX1RYQURDMTNfQ09OTl9TIDMKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQVRFU1RfVFhBREMxM19BVEVTVDFfVFhBREMxM19DT05OX00gMHgzOAorI2RlZmluZSBUSU1QQU5JX0FURVNUX1RYQURDMTNfQVRFU1QxX1RYQURDMTNfQ09OTl9OT19DT05ORUNUIDB4MAorI2RlZmluZSBUSU1QQU5JX0FURVNUX1RYQURDMTNfQVRFU1QxX1RYQURDMTNfQ09OTl9JQ01QMV9UT19BVEVTVDEgMHgxCisjZGVmaW5lIFRJTVBBTklfQVRFU1RfVFhBREMxM19BVEVTVDFfVFhBREMxM19DT05OX0lPVEEyX1RPX0FURVNUMSAweDIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQVRFU1RfVFhBREMxM19BVEVTVDFfVFhBREMxM19DT05OX0lPVEExX1RPX0FURVNUMSAweDMKKyNkZWZpbmUgVElNUEFOSV9BVEVTVF9UWEFEQzEzX0FURVNUMV9UWEFEQzEzX0NPTk5fVklDTV9UT19BVEVTVDEgMHg0CisjZGVmaW5lIFRJTVBBTklfQVRFU1RfVFhBREMxM19BVEVTVDFfVFhBREMxM19DT05OX1ZUSF9QX1RPX0FURVNUMSAweDUKKyNkZWZpbmUgVElNUEFOSV9BVEVTVF9UWEFEQzEzX0FURVNUMV9UWEFEQzEzX0NPTk5fVlJFRlBfVE9fQVRFU1QxIDB4NgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9BVEVTVF9UWEFEQzEzX0FURVNUMl9UWEFEQzEzX0NPTk5fUyAwCisjZGVmaW5lIFRJTVBBTklfQVRFU1RfVFhBREMxM19BVEVTVDJfVFhBREMxM19DT05OX00gMHg3CisjZGVmaW5lIFRJTVBBTklfQVRFU1RfVFhBREMxM19BVEVTVDJfVFhBREMxM19DT05OX05PX0NPTk5FQ1QgMHgwCisjZGVmaW5lIFRJTVBBTklfQVRFU1RfVFhBREMxM19BVEVTVDJfVFhBREMxM19DT05OX0lEQUNSRUZfVE9fQVRFU1QyIDB4MQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9BVEVTVF9UWEFEQzEzX0FURVNUMl9UWEFEQzEzX0NPTk5fSUJfMTBVX1RPX0FURVNUMiAweDIKKyNkZWZpbmUgVElNUEFOSV9BVEVTVF9UWEFEQzEzX0FURVNUMl9UWEFEQzEzX0NPTk5fVlJFRk1JRF9UT19BVEVTVDIgMHgzCisjZGVmaW5lIFRJTVBBTklfQVRFU1RfVFhBREMxM19BVEVTVDJfVFhBREMxM19DT05OX1ZPQ01fVE9fQVRFU1QyIDB4NAorI2RlZmluZSBUSU1QQU5JX0FURVNUX1RYQURDMTNfQVRFU1QyX1RYQURDMTNfQ09OTl9WVEhfTl9UT19BVEVTVDIgMHg1CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX0FURVNUX1RYQURDMTNfQVRFU1QyX1RYQURDMTNfQ09OTl9WUkVGTl9UT19BVEVTVDIgMHg2CisjZGVmaW5lIFRJTVBBTklfQV9BVEVTVF9UWEFEQzI0ICgweDU2KQorI2RlZmluZSBUSU1QQU5JX0FURVNUX1RYQURDMjRfUldDICJSVyIKKyNkZWZpbmUgVElNUEFOSV9BVEVTVF9UWEFEQzI0X1BPUiAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX0FURVNUX1RYQURDMjRfUyAwCisjZGVmaW5lIFRJTVBBTklfQVRFU1RfVFhBREMyNF9NIDB4RkYKKyNkZWZpbmUgVElNUEFOSV9BVEVTVF9UWEFEQzI0X1JFU0VSVkVEX1MgNworI2RlZmluZSBUSU1QQU5JX0FURVNUX1RYQURDMjRfUkVTRVJWRURfTSAweDgwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX0FURVNUX1RYQURDMjRfQVRFU1RfU0VMX1JfUyA2CisjZGVmaW5lIFRJTVBBTklfQVRFU1RfVFhBREMyNF9BVEVTVF9TRUxfUl9NIDB4NDAKKyNkZWZpbmUgVElNUEFOSV9BVEVTVF9UWEFEQzI0X0FURVNUX1NFTF9SX1RYQURDMSAweDAKKyNkZWZpbmUgVElNUEFOSV9BVEVTVF9UWEFEQzI0X0FURVNUX1NFTF9SX1RYQURDMyAweDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQVRFU1RfVFhBREMyNF9BVEVTVDFfVFhBREMyNF9DT05OX1MgMworI2RlZmluZSBUSU1QQU5JX0FURVNUX1RYQURDMjRfQVRFU1QxX1RYQURDMjRfQ09OTl9NIDB4MzgKKyNkZWZpbmUgVElNUEFOSV9BVEVTVF9UWEFEQzI0X0FURVNUMV9UWEFEQzI0X0NPTk5fTk9fQ09OTkVDVCAweDAKKyNkZWZpbmUgVElNUEFOSV9BVEVTVF9UWEFEQzI0X0FURVNUMV9UWEFEQzI0X0NPTk5fSUNNUDFfVE9fQVRFU1QxIDB4MQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9BVEVTVF9UWEFEQzI0X0FURVNUMV9UWEFEQzI0X0NPTk5fSU9UQTJfVE9fQVRFU1QxIDB4MgorI2RlZmluZSBUSU1QQU5JX0FURVNUX1RYQURDMjRfQVRFU1QxX1RYQURDMjRfQ09OTl9JT1RBMV9UT19BVEVTVDEgMHgzCisjZGVmaW5lIFRJTVBBTklfQVRFU1RfVFhBREMyNF9BVEVTVDFfVFhBREMyNF9DT05OX1ZJQ01fVE9fQVRFU1QxIDB4NAorI2RlZmluZSBUSU1QQU5JX0FURVNUX1RYQURDMjRfQVRFU1QxX1RYQURDMjRfQ09OTl9WVEhfUF9UT19BVEVTVDEgMHg1CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX0FURVNUX1RYQURDMjRfQVRFU1QxX1RYQURDMjRfQ09OTl9WUkVGUF9UT19BVEVTVDEgMHg2CisjZGVmaW5lIFRJTVBBTklfQVRFU1RfVFhBREMyNF9BVEVTVDJfVFhBREMyNF9DT05OX1MgMAorI2RlZmluZSBUSU1QQU5JX0FURVNUX1RYQURDMjRfQVRFU1QyX1RYQURDMjRfQ09OTl9NIDB4NworI2RlZmluZSBUSU1QQU5JX0FURVNUX1RYQURDMjRfQVRFU1QyX1RYQURDMjRfQ09OTl9OT19DT05ORUNUIDB4MAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9BVEVTVF9UWEFEQzI0X0FURVNUMl9UWEFEQzI0X0NPTk5fSURBQ1JFRl9UT19BVEVTVDIgMHgxCisjZGVmaW5lIFRJTVBBTklfQVRFU1RfVFhBREMyNF9BVEVTVDJfVFhBREMyNF9DT05OX0lCXzEwVV9UT19BVEVTVDIgMHgyCisjZGVmaW5lIFRJTVBBTklfQVRFU1RfVFhBREMyNF9BVEVTVDJfVFhBREMyNF9DT05OX1ZSRUZNSURfVE9fQVRFU1QyIDB4MworI2RlZmluZSBUSU1QQU5JX0FURVNUX1RYQURDMjRfQVRFU1QyX1RYQURDMjRfQ09OTl9WT0NNX1RPX0FURVNUMiAweDQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQVRFU1RfVFhBREMyNF9BVEVTVDJfVFhBREMyNF9DT05OX1ZUSF9OX1RPX0FURVNUMiAweDUKKyNkZWZpbmUgVElNUEFOSV9BVEVTVF9UWEFEQzI0X0FURVNUMl9UWEFEQzI0X0NPTk5fVlJFRk5fVE9fQVRFU1QyIDB4NgorI2RlZmluZSBUSU1QQU5JX0FfQVRFU1RfQVVYUEdBICgweDU3KQorI2RlZmluZSBUSU1QQU5JX0FURVNUX0FVWFBHQV9SV0MgIlJXIgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9BVEVTVF9BVVhQR0FfUE9SIDAKKyNkZWZpbmUgVElNUEFOSV9BVEVTVF9BVVhQR0FfUyAwCisjZGVmaW5lIFRJTVBBTklfQVRFU1RfQVVYUEdBX00gMHhGRgorI2RlZmluZSBUSU1QQU5JX0FURVNUX0FVWFBHQV9BVEVTVDFfQVVYUEdBX0lOVF9WQ01fQ09OTl9TIDcKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQVRFU1RfQVVYUEdBX0FURVNUMV9BVVhQR0FfSU5UX1ZDTV9DT05OX00gMHg4MAorI2RlZmluZSBUSU1QQU5JX0FURVNUX0FVWFBHQV9BVEVTVDFfQVVYUEdBX0lOVF9WQ01fQ09OTl9OT19DT05ORUNUIDB4MAorI2RlZmluZSBUSU1QQU5JX0FURVNUX0FVWFBHQV9BVEVTVDFfQVVYUEdBX0lOVF9WQ01fQ09OTl9DT05ORUNUIDB4MQorI2RlZmluZSBUSU1QQU5JX0FURVNUX0FVWFBHQV9BVEVTVF9BVVhQR0FfVkNNSV9WRERfQ09OTl9TIDYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQVRFU1RfQVVYUEdBX0FURVNUX0FVWFBHQV9WQ01JX1ZERF9DT05OX00gMHg0MAorI2RlZmluZSBUSU1QQU5JX0FURVNUX0FVWFBHQV9BVEVTVF9BVVhQR0FfVkNNSV9WRERfQ09OTl9OT19DT05ORUNUIDB4MAorI2RlZmluZSBUSU1QQU5JX0FURVNUX0FVWFBHQV9BVEVTVF9BVVhQR0FfVkNNSV9WRERfQ09OTl9DT05ORUNUIDB4MQorI2RlZmluZSBUSU1QQU5JX0FURVNUX0FVWFBHQV9BVEVTVF9BVVhQR0FfVkNNT19SX0xfQ09OTl9TIDUKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQVRFU1RfQVVYUEdBX0FURVNUX0FVWFBHQV9WQ01PX1JfTF9DT05OX00gMHgyMAorI2RlZmluZSBUSU1QQU5JX0FURVNUX0FVWFBHQV9BVEVTVF9BVVhQR0FfVkNNT19SX0xfQ09OTl9OT19DT05ORUNUIDB4MAorI2RlZmluZSBUSU1QQU5JX0FURVNUX0FVWFBHQV9BVEVTVF9BVVhQR0FfVkNNT19SX0xfQ09OTl9DT05ORUNUIDB4MQorI2RlZmluZSBUSU1QQU5JX0FURVNUX0FVWFBHQV9BVEVTVF9BVVhQR0FfUl9DT05OX1MgNAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9BVEVTVF9BVVhQR0FfQVRFU1RfQVVYUEdBX1JfQ09OTl9NIDB4MTAKKyNkZWZpbmUgVElNUEFOSV9BVEVTVF9BVVhQR0FfQVRFU1RfQVVYUEdBX1JfQ09OTl9OT19DT05ORUNUIDB4MAorI2RlZmluZSBUSU1QQU5JX0FURVNUX0FVWFBHQV9BVEVTVF9BVVhQR0FfUl9DT05OX0NPTk5FQ1QgMHgxCisjZGVmaW5lIFRJTVBBTklfQVRFU1RfQVVYUEdBX0FURVNUX0FVWFBHQV9MX0NPTk5fUyAzCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX0FURVNUX0FVWFBHQV9BVEVTVF9BVVhQR0FfTF9DT05OX00gMHg4CisjZGVmaW5lIFRJTVBBTklfQVRFU1RfQVVYUEdBX0FURVNUX0FVWFBHQV9MX0NPTk5fTk9fQ09OTkVDVCAweDAKKyNkZWZpbmUgVElNUEFOSV9BVEVTVF9BVVhQR0FfQVRFU1RfQVVYUEdBX0xfQ09OTl9DT05ORUNUIDB4MQorI2RlZmluZSBUSU1QQU5JX0FURVNUX0FVWFBHQV9SRVNFUlZFRF9TIDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQVRFU1RfQVVYUEdBX1JFU0VSVkVEX00gMHg3CisjZGVmaW5lIFRJTVBBTklfQV9BVEVTVF9DREFDICgweDU4KQorI2RlZmluZSBUSU1QQU5JX0FURVNUX0NEQUNfUldDICJSVyIKKyNkZWZpbmUgVElNUEFOSV9BVEVTVF9DREFDX1BPUiAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX0FURVNUX0NEQUNfUyAwCisjZGVmaW5lIFRJTVBBTklfQVRFU1RfQ0RBQ19NIDB4RkYKKyNkZWZpbmUgVElNUEFOSV9BVEVTVF9DREFDX0FURVNUX0NEQUNfRFdBX0lOX0NPTk5fUyA3CisjZGVmaW5lIFRJTVBBTklfQVRFU1RfQ0RBQ19BVEVTVF9DREFDX0RXQV9JTl9DT05OX00gMHg4MAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9BVEVTVF9DREFDX0FURVNUX0NEQUNfRFdBX0lOX0NPTk5fTk9fQ09OTkVDVCAweDAKKyNkZWZpbmUgVElNUEFOSV9BVEVTVF9DREFDX0FURVNUX0NEQUNfRFdBX0lOX0NPTk5fQ09OTkVDVCAweDEKKyNkZWZpbmUgVElNUEFOSV9BVEVTVF9DREFDX0FURVNUX0NEQUNfRFdBX09VVF9DT05OX1MgNgorI2RlZmluZSBUSU1QQU5JX0FURVNUX0NEQUNfQVRFU1RfQ0RBQ19EV0FfT1VUX0NPTk5fTSAweDQwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX0FURVNUX0NEQUNfQVRFU1RfQ0RBQ19EV0FfT1VUX0NPTk5fTk9fQ09OTkVDVCAweDAKKyNkZWZpbmUgVElNUEFOSV9BVEVTVF9DREFDX0FURVNUX0NEQUNfRFdBX09VVF9DT05OX0NPTk5FQ1QgMHgxCisjZGVmaW5lIFRJTVBBTklfQVRFU1RfQ0RBQ19BVEVTVF9GSUxURVJfTF9PVVRfQ09OTl9TIDUKKyNkZWZpbmUgVElNUEFOSV9BVEVTVF9DREFDX0FURVNUX0ZJTFRFUl9MX09VVF9DT05OX00gMHgyMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9BVEVTVF9DREFDX0FURVNUX0ZJTFRFUl9MX09VVF9DT05OX05PX0NPTk5FQ1QgMHgwCisjZGVmaW5lIFRJTVBBTklfQVRFU1RfQ0RBQ19BVEVTVF9GSUxURVJfTF9PVVRfQ09OTl9DT05ORUNUIDB4MQorI2RlZmluZSBUSU1QQU5JX0FURVNUX0NEQUNfQVRFU1RfRklMVEVSX1JfT1VUX0NPTk5fUyA0CisjZGVmaW5lIFRJTVBBTklfQVRFU1RfQ0RBQ19BVEVTVF9GSUxURVJfUl9PVVRfQ09OTl9NIDB4MTAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQVRFU1RfQ0RBQ19BVEVTVF9GSUxURVJfUl9PVVRfQ09OTl9OT19DT05ORUNUIDB4MAorI2RlZmluZSBUSU1QQU5JX0FURVNUX0NEQUNfQVRFU1RfRklMVEVSX1JfT1VUX0NPTk5fQ09OTkVDVCAweDEKKyNkZWZpbmUgVElNUEFOSV9BVEVTVF9DREFDX0FURVNUX0NEQUNfTF9DT05OX1MgMgorI2RlZmluZSBUSU1QQU5JX0FURVNUX0NEQUNfQVRFU1RfQ0RBQ19MX0NPTk5fTSAweEMKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQVRFU1RfQ0RBQ19BVEVTVF9DREFDX0xfQ09OTl9OT19DT05ORUNUIDB4MAorI2RlZmluZSBUSU1QQU5JX0FURVNUX0NEQUNfQVRFU1RfQ0RBQ19MX0NPTk5fVEVTVDEgMHgxCisjZGVmaW5lIFRJTVBBTklfQVRFU1RfQ0RBQ19BVEVTVF9DREFDX0xfQ09OTl9URVNUMiAweDIKKyNkZWZpbmUgVElNUEFOSV9BVEVTVF9DREFDX0FURVNUX0NEQUNfTF9DT05OX1RFU1QzIDB4MworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9BVEVTVF9DREFDX0FURVNUX0NEQUNfUl9DT05OX1MgMAorI2RlZmluZSBUSU1QQU5JX0FURVNUX0NEQUNfQVRFU1RfQ0RBQ19SX0NPTk5fTSAweDMKKyNkZWZpbmUgVElNUEFOSV9BVEVTVF9DREFDX0FURVNUX0NEQUNfUl9DT05OX05PX0NPTk5FQ1QgMHgwCisjZGVmaW5lIFRJTVBBTklfQVRFU1RfQ0RBQ19BVEVTVF9DREFDX1JfQ09OTl9URVNUMSAweDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQVRFU1RfQ0RBQ19BVEVTVF9DREFDX1JfQ09OTl9URVNUMiAweDIKKyNkZWZpbmUgVElNUEFOSV9BVEVTVF9DREFDX0FURVNUX0NEQUNfUl9DT05OX1RFU1QzIDB4MworI2RlZmluZSBUSU1QQU5JX0FfQVRFU1RfSURBQyAoMHg1OSkKKyNkZWZpbmUgVElNUEFOSV9BVEVTVF9JREFDX1JXQyAiUlciCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX0FURVNUX0lEQUNfUE9SIDAKKyNkZWZpbmUgVElNUEFOSV9BVEVTVF9JREFDX1MgMAorI2RlZmluZSBUSU1QQU5JX0FURVNUX0lEQUNfTSAweEZGCisjZGVmaW5lIFRJTVBBTklfQVRFU1RfSURBQ19BVEVTVDFfTFJfQ09OTl9TIDcKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQVRFU1RfSURBQ19BVEVTVDFfTFJfQ09OTl9NIDB4ODAKKyNkZWZpbmUgVElNUEFOSV9BVEVTVF9JREFDX0FURVNUMV9MUl9DT05OX1JJR0hUIDB4MQorI2RlZmluZSBUSU1QQU5JX0FURVNUX0lEQUNfQVRFU1QxX0xSX0NPTk5fTEVGVCAweDAKKyNkZWZpbmUgVElNUEFOSV9BVEVTVF9JREFDX0FURVNUMV9DT05OX1MgNAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9BVEVTVF9JREFDX0FURVNUMV9DT05OX00gMHg3MAorI2RlZmluZSBUSU1QQU5JX0FURVNUX0lEQUNfQVRFU1QxX0NPTk5fSURBQ19ORUdfT1VUIDB4NworI2RlZmluZSBUSU1QQU5JX0FURVNUX0lEQUNfQVRFU1QxX0NPTk5fQ1RfRklMVEVSX1BPU19PVVQgMHg2CisjZGVmaW5lIFRJTVBBTklfQVRFU1RfSURBQ19BVEVTVDFfQ09OTl9DVF9GSUxURVJfSUJJQVMgMHg1CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX0FURVNUX0lEQUNfQVRFU1QxX0NPTk5fTk9fQ09OTkVDVF8xIDB4NAorI2RlZmluZSBUSU1QQU5JX0FURVNUX0lEQUNfQVRFU1QxX0NPTk5fTk9fQ09OTkVDVF8yIDB4MworI2RlZmluZSBUSU1QQU5JX0FURVNUX0lEQUNfQVRFU1QxX0NPTk5fTk9fQ09OTkVDVF8zIDB4MgorI2RlZmluZSBUSU1QQU5JX0FURVNUX0lEQUNfQVRFU1QxX0NPTk5fTk9fQ09OTkVDVF80IDB4MQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9BVEVTVF9JREFDX0FURVNUMV9DT05OX05PX0NPTk5FQ1RfNSAweDAKKyNkZWZpbmUgVElNUEFOSV9BVEVTVF9JREFDX0FURVNUMl9MUl9DT05OX1MgMworI2RlZmluZSBUSU1QQU5JX0FURVNUX0lEQUNfQVRFU1QyX0xSX0NPTk5fTSAweDgKKyNkZWZpbmUgVElNUEFOSV9BVEVTVF9JREFDX0FURVNUMl9MUl9DT05OX1JJR0hUIDB4MQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9BVEVTVF9JREFDX0FURVNUMl9MUl9DT05OX0xFRlQgMHgwCisjZGVmaW5lIFRJTVBBTklfQVRFU1RfSURBQ19BVEVTVDJfQ09OTl9TIDAKKyNkZWZpbmUgVElNUEFOSV9BVEVTVF9JREFDX0FURVNUMl9DT05OX00gMHg3CisjZGVmaW5lIFRJTVBBTklfQVRFU1RfSURBQ19BVEVTVDJfQ09OTl9JREFDX1BPU19PVVQgMHg3CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX0FURVNUX0lEQUNfQVRFU1QyX0NPTk5fQ1RfRklMVEVSX05FR19PVVQgMHg2CisjZGVmaW5lIFRJTVBBTklfQVRFU1RfSURBQ19BVEVTVDJfQ09OTl9JREFDX0lCSUFTIDB4NQorI2RlZmluZSBUSU1QQU5JX0FURVNUX0lEQUNfQVRFU1QyX0NPTk5fTk9fQ09OTkVDVF8xIDB4NAorI2RlZmluZSBUSU1QQU5JX0FURVNUX0lEQUNfQVRFU1QyX0NPTk5fTk9fQ09OTkVDVF8yIDB4MworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9BVEVTVF9JREFDX0FURVNUMl9DT05OX05PX0NPTk5FQ1RfMyAweDIKKyNkZWZpbmUgVElNUEFOSV9BVEVTVF9JREFDX0FURVNUMl9DT05OX05PX0NPTk5FQ1RfNCAweDEKKyNkZWZpbmUgVElNUEFOSV9BVEVTVF9JREFDX0FURVNUMl9DT05OX05PX0NPTk5FQ1RfNSAweDAKKyNkZWZpbmUgVElNUEFOSV9BX0FURVNUX1BBMSAoMHg1QSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQVRFU1RfUEExX1JXQyAiUlciCisjZGVmaW5lIFRJTVBBTklfQVRFU1RfUEExX1BPUiAwCisjZGVmaW5lIFRJTVBBTklfQVRFU1RfUEExX1MgMAorI2RlZmluZSBUSU1QQU5JX0FURVNUX1BBMV9NIDB4RkYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQVRFU1RfUEExX0FURVNUX0VBUlBBX0ZTVl9OUF9DT05OX1MgNworI2RlZmluZSBUSU1QQU5JX0FURVNUX1BBMV9BVEVTVF9FQVJQQV9GU1ZfTlBfQ09OTl9NIDB4ODAKKyNkZWZpbmUgVElNUEFOSV9BVEVTVF9QQTFfQVRFU1RfRUFSUEFfRlNWX05QX0NPTk5fTk9fQ09OTkVDVCAweDAKKyNkZWZpbmUgVElNUEFOSV9BVEVTVF9QQTFfQVRFU1RfRUFSUEFfRlNWX05QX0NPTk5fRU4gMHgxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX0FURVNUX1BBMV9BVEVTVF9FQVJQQV9OQ0FTQ19OTUlSUl9DT05OX1MgNgorI2RlZmluZSBUSU1QQU5JX0FURVNUX1BBMV9BVEVTVF9FQVJQQV9OQ0FTQ19OTUlSUl9DT05OX00gMHg0MAorI2RlZmluZSBUSU1QQU5JX0FURVNUX1BBMV9BVEVTVF9FQVJQQV9OQ0FTQ19OTUlSUl9DT05OX05PX0NPTk5FQ1QgMHgwCisjZGVmaW5lIFRJTVBBTklfQVRFU1RfUEExX0FURVNUX0VBUlBBX05DQVNDX05NSVJSX0NPTk5fRU4gMHgxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX0FURVNUX1BBMV9BVEVTVF9FQVJQQV9OTUlSUl9QQ0FTQ19DT05OX1MgNQorI2RlZmluZSBUSU1QQU5JX0FURVNUX1BBMV9BVEVTVF9FQVJQQV9OTUlSUl9QQ0FTQ19DT05OX00gMHgyMAorI2RlZmluZSBUSU1QQU5JX0FURVNUX1BBMV9BVEVTVF9FQVJQQV9OTUlSUl9QQ0FTQ19DT05OX05PX0NPTk5FQ1QgMHgwCisjZGVmaW5lIFRJTVBBTklfQVRFU1RfUEExX0FURVNUX0VBUlBBX05NSVJSX1BDQVNDX0NPTk5fRU4gMHgxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX0FURVNUX1BBMV9BVEVTVF9FQVJQQV9WQ01fUFRBSUwxX0NPTk5fUyA0CisjZGVmaW5lIFRJTVBBTklfQVRFU1RfUEExX0FURVNUX0VBUlBBX1ZDTV9QVEFJTDFfQ09OTl9NIDB4MTAKKyNkZWZpbmUgVElNUEFOSV9BVEVTVF9QQTFfQVRFU1RfRUFSUEFfVkNNX1BUQUlMMV9DT05OX05PX0NPTk5FQ1QgMHgwCisjZGVmaW5lIFRJTVBBTklfQVRFU1RfUEExX0FURVNUX0VBUlBBX1ZDTV9QVEFJTDFfQ09OTl9FTiAweDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQVRFU1RfUEExX0FURVNUX0VBUlBBX0lCVEVTVF9WU1MyUDJfQ09OTl9TIDMKKyNkZWZpbmUgVElNUEFOSV9BVEVTVF9QQTFfQVRFU1RfRUFSUEFfSUJURVNUX1ZTUzJQMl9DT05OX00gMHg4CisjZGVmaW5lIFRJTVBBTklfQVRFU1RfUEExX0FURVNUX0VBUlBBX0lCVEVTVF9WU1MyUDJfQ09OTl9OT19DT05ORUNUIDB4MAorI2RlZmluZSBUSU1QQU5JX0FURVNUX1BBMV9BVEVTVF9FQVJQQV9JQlRFU1RfVlNTMlAyX0NPTk5fRU4gMHgxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX0FURVNUX1BBMV9BVEVTVF9FQVJQQV9JVEVTVDFfSVRFU1QyX0NPTk5fUyAyCisjZGVmaW5lIFRJTVBBTklfQVRFU1RfUEExX0FURVNUX0VBUlBBX0lURVNUMV9JVEVTVDJfQ09OTl9NIDB4NAorI2RlZmluZSBUSU1QQU5JX0FURVNUX1BBMV9BVEVTVF9FQVJQQV9JVEVTVDFfSVRFU1QyX0NPTk5fTk9fQ09OTkVDVCAweDAKKyNkZWZpbmUgVElNUEFOSV9BVEVTVF9QQTFfQVRFU1RfRUFSUEFfSVRFU1QxX0lURVNUMl9DT05OX0VOIDB4MQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9BVEVTVF9QQTFfQVRFU1RfQ0xBU1NEX0NMS19HQVRJTkdfUyAxCisjZGVmaW5lIFRJTVBBTklfQVRFU1RfUEExX0FURVNUX0NMQVNTRF9DTEtfR0FUSU5HX00gMHgyCisjZGVmaW5lIFRJTVBBTklfQVRFU1RfUEExX0FURVNUX0NMQVNTRF9DTEtfR0FUSU5HX1BBU1MgMHgwCisjZGVmaW5lIFRJTVBBTklfQVRFU1RfUEExX0FURVNUX0NMQVNTRF9DTEtfR0FUSU5HX0dBVEUgMHgxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX0FURVNUX1BBMV9BVEVTVDJfSFBIX1ZDTV9DT05OX1MgMAorI2RlZmluZSBUSU1QQU5JX0FURVNUX1BBMV9BVEVTVDJfSFBIX1ZDTV9DT05OX00gMHgxCisjZGVmaW5lIFRJTVBBTklfQVRFU1RfUEExX0FURVNUMl9IUEhfVkNNX0NPTk5fTk9fQ09OTkVDVCAweDAKKyNkZWZpbmUgVElNUEFOSV9BVEVTVF9QQTFfQVRFU1QyX0hQSF9WQ01fQ09OTl9DT05ORUNUIDB4MQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9BX0FURVNUX0NMQVNTRCAoMHg1QikKKyNkZWZpbmUgVElNUEFOSV9BVEVTVF9DTEFTU0RfUldDICJSVyIKKyNkZWZpbmUgVElNUEFOSV9BVEVTVF9DTEFTU0RfUE9SIDAKKyNkZWZpbmUgVElNUEFOSV9BVEVTVF9DTEFTU0RfUyAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX0FURVNUX0NMQVNTRF9NIDB4RkYKKyNkZWZpbmUgVElNUEFOSV9BVEVTVF9DTEFTU0RfQ0xBU1NEX0FURVNUMV9DT05OX1MgNAorI2RlZmluZSBUSU1QQU5JX0FURVNUX0NMQVNTRF9DTEFTU0RfQVRFU1QxX0NPTk5fTSAweEYwCisjZGVmaW5lIFRJTVBBTklfQVRFU1RfQ0xBU1NEX0NMQVNTRF9BVEVTVDFfQ09OTl9OT19DT05ORUNUXzEgMHgwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX0FURVNUX0NMQVNTRF9DTEFTU0RfQVRFU1QxX0NPTk5fTF9TQ19PQ1AgMHgxCisjZGVmaW5lIFRJTVBBTklfQVRFU1RfQ0xBU1NEX0NMQVNTRF9BVEVTVDFfQ09OTl9MX0NEQUNfQ0xLIDB4MgorI2RlZmluZSBUSU1QQU5JX0FURVNUX0NMQVNTRF9DTEFTU0RfQVRFU1QxX0NPTk5fTF9QT1NfQ0RBQyAweDMKKyNkZWZpbmUgVElNUEFOSV9BVEVTVF9DTEFTU0RfQ0xBU1NEX0FURVNUMV9DT05OX0xfQlJFQUtfQkVGT1JFX01BS0VfT1VUX0NQIDB4NAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9BVEVTVF9DTEFTU0RfQ0xBU1NEX0FURVNUMV9DT05OX0xfQ09NUF9PVVQgMHg1CisjZGVmaW5lIFRJTVBBTklfQVRFU1RfQ0xBU1NEX0NMQVNTRF9BVEVTVDFfQ09OTl9MX0lOVDJfUE9TX09VVCAweDYKKyNkZWZpbmUgVElNUEFOSV9BVEVTVF9DTEFTU0RfQ0xBU1NEX0FURVNUMV9DT05OX0xfSU5UMV9QT1NfT1VUIDB4NworI2RlZmluZSBUSU1QQU5JX0FURVNUX0NMQVNTRF9DTEFTU0RfQVRFU1QxX0NPTk5fTk9fQ09OTkVDVF8yIDB4OAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9BVEVTVF9DTEFTU0RfQ0xBU1NEX0FURVNUMV9DT05OX1JfU0NfT0NQX1NJR05BTCAweDkKKyNkZWZpbmUgVElNUEFOSV9BVEVTVF9DTEFTU0RfQ0xBU1NEX0FURVNUMV9DT05OX1JfQ0RBQ19DTEsgMHhBCisjZGVmaW5lIFRJTVBBTklfQVRFU1RfQ0xBU1NEX0NMQVNTRF9BVEVTVDFfQ09OTl9SX1BPU19DREFDIDB4QgorI2RlZmluZSBUSU1QQU5JX0FURVNUX0NMQVNTRF9DTEFTU0RfQVRFU1QxX0NPTk5fUl9CUkVBS19CRUZPUkVfTUFLRV9PVVRfQ1AgMHhDCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX0FURVNUX0NMQVNTRF9DTEFTU0RfQVRFU1QxX0NPTk5fUl9DT01QX09VVCAweEQKKyNkZWZpbmUgVElNUEFOSV9BVEVTVF9DTEFTU0RfQ0xBU1NEX0FURVNUMV9DT05OX1JfSU5UMl9QT1NfT1VUIDB4RQorI2RlZmluZSBUSU1QQU5JX0FURVNUX0NMQVNTRF9DTEFTU0RfQVRFU1QxX0NPTk5fUl9JTlQxX1BPU19PVVQgMHhGCisjZGVmaW5lIFRJTVBBTklfQVRFU1RfQ0xBU1NEX0NMQVNTRF9BVEVTVDJfQ09OTl9TIDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQVRFU1RfQ0xBU1NEX0NMQVNTRF9BVEVTVDJfQ09OTl9NIDB4RgorI2RlZmluZSBUSU1QQU5JX0FURVNUX0NMQVNTRF9DTEFTU0RfQVRFU1QyX0NPTk5fTk9fQ09OTkVDVF8xIDB4MAorI2RlZmluZSBUSU1QQU5JX0FURVNUX0NMQVNTRF9DTEFTU0RfQVRFU1QyX0NPTk5fTF9ISV9aX09DUCAweDEKKyNkZWZpbmUgVElNUEFOSV9BVEVTVF9DTEFTU0RfQ0xBU1NEX0FURVNUMl9DT05OX0xfT0NQX0NMT0NLIDB4MgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9BVEVTVF9DTEFTU0RfQ0xBU1NEX0FURVNUMl9DT05OX0xfTkVHX0NEQUMgMHgzCisjZGVmaW5lIFRJTVBBTklfQVRFU1RfQ0xBU1NEX0NMQVNTRF9BVEVTVDJfQ09OTl9MX0JSRUFLX0JFRk9SRV9NQUtFX09VVF9DTiAweDQKKyNkZWZpbmUgVElNUEFOSV9BVEVTVF9DTEFTU0RfQ0xBU1NEX0FURVNUMl9DT05OX0xfQ01fQlVGRl9PVVQgMHg1CisjZGVmaW5lIFRJTVBBTklfQVRFU1RfQ0xBU1NEX0NMQVNTRF9BVEVTVDJfQ09OTl9MX0lOVDJfTkVHX09VVCAweDYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQVRFU1RfQ0xBU1NEX0NMQVNTRF9BVEVTVDJfQ09OTl9MX0lOVDFfTkVHX09VVCAweDcKKyNkZWZpbmUgVElNUEFOSV9BVEVTVF9DTEFTU0RfQ0xBU1NEX0FURVNUMl9DT05OX05PX0NPTk5FQ1RfMiAweDgKKyNkZWZpbmUgVElNUEFOSV9BVEVTVF9DTEFTU0RfQ0xBU1NEX0FURVNUMl9DT05OX1JfSElfWl9PQ1AgMHg5CisjZGVmaW5lIFRJTVBBTklfQVRFU1RfQ0xBU1NEX0NMQVNTRF9BVEVTVDJfQ09OTl9SX09DUF9DTE9DSyAweEEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQVRFU1RfQ0xBU1NEX0NMQVNTRF9BVEVTVDJfQ09OTl9SX05FR0FUSVZFX0NEQUMgMHhCCisjZGVmaW5lIFRJTVBBTklfQVRFU1RfQ0xBU1NEX0NMQVNTRF9BVEVTVDJfQ09OTl9SX0JSRUFLX0JFRk9SRV9NQUtFX09VVF9DTiAweEMKKyNkZWZpbmUgVElNUEFOSV9BVEVTVF9DTEFTU0RfQ0xBU1NEX0FURVNUMl9DT05OX1JfQ01fQlVGRl9PVVQgMHhECisjZGVmaW5lIFRJTVBBTklfQVRFU1RfQ0xBU1NEX0NMQVNTRF9BVEVTVDJfQ09OTl9SX0lOVFIyX05FR19PVVQgMHhFCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX0FURVNUX0NMQVNTRF9DTEFTU0RfQVRFU1QyX0NPTk5fUl9JTlQxX05FR19PVVQgMHhGCisjZGVmaW5lIFRJTVBBTklfQV9BVEVTVF9MSU5FT19BVVhPICgweDVDKQorI2RlZmluZSBUSU1QQU5JX0FURVNUX0xJTkVPX0FVWE9fUldDICJSVyIKKyNkZWZpbmUgVElNUEFOSV9BVEVTVF9MSU5FT19BVVhPX1BPUiAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX0FURVNUX0xJTkVPX0FVWE9fUyAwCisjZGVmaW5lIFRJTVBBTklfQVRFU1RfTElORU9fQVVYT19NIDB4RkYKKyNkZWZpbmUgVElNUEFOSV9BVEVTVF9MSU5FT19BVVhPX0FURVNUX0xJTkVPX0FVWE9fRU5fUyA3CisjZGVmaW5lIFRJTVBBTklfQVRFU1RfTElORU9fQVVYT19BVEVTVF9MSU5FT19BVVhPX0VOX00gMHg4MAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9BVEVTVF9MSU5FT19BVVhPX0FURVNUX0xJTkVPX0FVWE9fRU5fRElTQUJMRSAweDAKKyNkZWZpbmUgVElNUEFOSV9BVEVTVF9MSU5FT19BVVhPX0FURVNUX0xJTkVPX0FVWE9fRU5fRU5BQkxFIDB4MQorI2RlZmluZSBUSU1QQU5JX0FURVNUX0xJTkVPX0FVWE9fQVRFU1RfTElORU9fQVVYT19WQ01fQ09OTl9TIDYKKyNkZWZpbmUgVElNUEFOSV9BVEVTVF9MSU5FT19BVVhPX0FURVNUX0xJTkVPX0FVWE9fVkNNX0NPTk5fTSAweDQwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX0FURVNUX0xJTkVPX0FVWE9fQVRFU1RfTElORU9fQVVYT19WQ01fQ09OTl9OT19DT05ORUNUIDB4MAorI2RlZmluZSBUSU1QQU5JX0FURVNUX0xJTkVPX0FVWE9fQVRFU1RfTElORU9fQVVYT19WQ01fQ09OTl9DT05ORUNUIDB4MQorI2RlZmluZSBUSU1QQU5JX0FURVNUX0xJTkVPX0FVWE9fQVRFU1RfTElORU9fTF9OUkVGSU5fU1RHMU9QX0NPTk5fUyA1CisjZGVmaW5lIFRJTVBBTklfQVRFU1RfTElORU9fQVVYT19BVEVTVF9MSU5FT19MX05SRUZJTl9TVEcxT1BfQ09OTl9NIDB4MjAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQVRFU1RfTElORU9fQVVYT19BVEVTVF9MSU5FT19MX05SRUZJTl9TVEcxT1BfQ09OTl9OT19DT05ORUNUIDB4MAorI2RlZmluZSBUSU1QQU5JX0FURVNUX0xJTkVPX0FVWE9fQVRFU1RfTElORU9fTF9OUkVGSU5fU1RHMU9QX0NPTk5fRU4gMHgxCisjZGVmaW5lIFRJTVBBTklfQVRFU1RfTElORU9fQVVYT19BVEVTVF9MSU5FT19MX05NT1NfUE1PU19DT05OX1MgNAorI2RlZmluZSBUSU1QQU5JX0FURVNUX0xJTkVPX0FVWE9fQVRFU1RfTElORU9fTF9OTU9TX1BNT1NfQ09OTl9NIDB4MTAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQVRFU1RfTElORU9fQVVYT19BVEVTVF9MSU5FT19MX05NT1NfUE1PU19DT05OX05PX0NPTk5FQ1QgMHgwCisjZGVmaW5lIFRJTVBBTklfQVRFU1RfTElORU9fQVVYT19BVEVTVF9MSU5FT19MX05NT1NfUE1PU19DT05OX0VOIDAxCisjZGVmaW5lIFRJTVBBTklfQVRFU1RfTElORU9fQVVYT19BVEVTVF9MSU5FT19SX05SRUZJTl9TVEcxT1BfQ09OTl9TIDMKKyNkZWZpbmUgVElNUEFOSV9BVEVTVF9MSU5FT19BVVhPX0FURVNUX0xJTkVPX1JfTlJFRklOX1NURzFPUF9DT05OX00gMHg4CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX0FURVNUX0xJTkVPX0FVWE9fQVRFU1RfTElORU9fUl9OUkVGSU5fU1RHMU9QX0NPTk5fTk9fQ09OTkVDVCAweDAKKyNkZWZpbmUgVElNUEFOSV9BVEVTVF9MSU5FT19BVVhPX0FURVNUX0xJTkVPX1JfTlJFRklOX1NURzFPUF9DT05OX0VOIDAxCisjZGVmaW5lIFRJTVBBTklfQVRFU1RfTElORU9fQVVYT19BVEVTVF9MSU5FT19SX05NT1NfUE1PU19DT05OX1MgMgorI2RlZmluZSBUSU1QQU5JX0FURVNUX0xJTkVPX0FVWE9fQVRFU1RfTElORU9fUl9OTU9TX1BNT1NfQ09OTl9NIDB4NAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9BVEVTVF9MSU5FT19BVVhPX0FURVNUX0xJTkVPX1JfTk1PU19QTU9TX0NPTk5fRElTQUJMRSAweDAKKyNkZWZpbmUgVElNUEFOSV9BVEVTVF9MSU5FT19BVVhPX0FURVNUX0xJTkVPX1JfTk1PU19QTU9TX0NPTk5fRU4gMHgxCisjZGVmaW5lIFRJTVBBTklfQVRFU1RfTElORU9fQVVYT19BVEVTVF9BVVhPX05SRUZJTl9TVEcxT1BfQ09OTl9TIDEKKyNkZWZpbmUgVElNUEFOSV9BVEVTVF9MSU5FT19BVVhPX0FURVNUX0FVWE9fTlJFRklOX1NURzFPUF9DT05OX00gMHgyCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX0FURVNUX0xJTkVPX0FVWE9fQVRFU1RfQVVYT19OUkVGSU5fU1RHMU9QX0NPTk5fRElTQUJMRSAweDAKKyNkZWZpbmUgVElNUEFOSV9BVEVTVF9MSU5FT19BVVhPX0FURVNUX0FVWE9fTlJFRklOX1NURzFPUF9DT05OX0VOIDB4MQorI2RlZmluZSBUSU1QQU5JX0FURVNUX0xJTkVPX0FVWE9fQVRFU1RfQVVYT19OTU9TX1BNT1NfQ09OTl9TIDAKKyNkZWZpbmUgVElNUEFOSV9BVEVTVF9MSU5FT19BVVhPX0FURVNUX0FVWE9fTk1PU19QTU9TX0NPTk5fTSAweDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQVRFU1RfTElORU9fQVVYT19BVEVTVF9BVVhPX05NT1NfUE1PU19DT05OX0RJU0FCTEUgMHgwCisjZGVmaW5lIFRJTVBBTklfQVRFU1RfTElORU9fQVVYT19BVEVTVF9BVVhPX05NT1NfUE1PU19DT05OX0VOIDB4MQorI2RlZmluZSBUSU1QQU5JX0FfQ0RDX1JFU0VUX0NUTCAoMHg4MCkKKyNkZWZpbmUgVElNUEFOSV9DRENfUkVTRVRfQ1RMX1JXQyAiUlciCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX0NEQ19SRVNFVF9DVExfUE9SIDAKKyNkZWZpbmUgVElNUEFOSV9DRENfUkVTRVRfQ1RMX1MgMAorI2RlZmluZSBUSU1QQU5JX0NEQ19SRVNFVF9DVExfTSAweDdGCisjZGVmaW5lIFRJTVBBTklfQ0RDX1JFU0VUX0NUTF9BUkJfU09GVF9SRVNFVF9TIDYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQ0RDX1JFU0VUX0NUTF9BUkJfU09GVF9SRVNFVF9NIDB4NDAKKyNkZWZpbmUgVElNUEFOSV9DRENfUkVTRVRfQ1RMX1RYMl9TT0ZUX1JFU0VUX1JfUyA1CisjZGVmaW5lIFRJTVBBTklfQ0RDX1JFU0VUX0NUTF9UWDJfU09GVF9SRVNFVF9SX00gMHgyMAorI2RlZmluZSBUSU1QQU5JX0NEQ19SRVNFVF9DVExfVFgyX1NPRlRfUkVTRVRfTF9TIDQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQ0RDX1JFU0VUX0NUTF9UWDJfU09GVF9SRVNFVF9MX00gMHgxMAorI2RlZmluZSBUSU1QQU5JX0NEQ19SRVNFVF9DVExfUlgyX1NPRlRfUkVTRVRfUyAzCisjZGVmaW5lIFRJTVBBTklfQ0RDX1JFU0VUX0NUTF9SWDJfU09GVF9SRVNFVF9NIDB4OAorI2RlZmluZSBUSU1QQU5JX0NEQ19SRVNFVF9DVExfVFgxX1NPRlRfUkVTRVRfUl9TIDIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQ0RDX1JFU0VUX0NUTF9UWDFfU09GVF9SRVNFVF9SX00gMHg0CisjZGVmaW5lIFRJTVBBTklfQ0RDX1JFU0VUX0NUTF9SWDFfU09GVF9SRVNFVF9TIDEKKyNkZWZpbmUgVElNUEFOSV9DRENfUkVTRVRfQ1RMX1JYMV9TT0ZUX1JFU0VUX00gMHgyCisjZGVmaW5lIFRJTVBBTklfQ0RDX1JFU0VUX0NUTF9UWDFfU09GVF9SRVNFVF9MX1MgMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9DRENfUkVTRVRfQ1RMX1RYMV9TT0ZUX1JFU0VUX0xfTSAweDEKKyNkZWZpbmUgVElNUEFOSV9BX0NEQ19SWDFfQ1RMICgweDgxKQorI2RlZmluZSBUSU1QQU5JX0NEQ19SWDFfQ1RMX1JXQyAiUlciCisjZGVmaW5lIFRJTVBBTklfQ0RDX1JYMV9DVExfUE9SIDB4YworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9DRENfUlgxX0NUTF9TIDAKKyNkZWZpbmUgVElNUEFOSV9DRENfUlgxX0NUTF9NIDB4M0YKKyNkZWZpbmUgVElNUEFOSV9DRENfUlgxX0NUTF9TSURFVE9ORV9FTjFfUl9TIDUKKyNkZWZpbmUgVElNUEFOSV9DRENfUlgxX0NUTF9TSURFVE9ORV9FTjFfUl9NIDB4MjAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQ0RDX1JYMV9DVExfU0lERVRPTkVfRU4xX0xfUyA0CisjZGVmaW5lIFRJTVBBTklfQ0RDX1JYMV9DVExfU0lERVRPTkVfRU4xX0xfTSAweDEwCisjZGVmaW5lIFRJTVBBTklfQ0RDX1JYMV9DVExfUlgxX1JBVEVfUyAyCisjZGVmaW5lIFRJTVBBTklfQ0RDX1JYMV9DVExfUlgxX1JBVEVfTSAweEMKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQ0RDX1JYMV9DVExfUlgxX1JBVEVfT1NSXzI1NiAweDMKKyNkZWZpbmUgVElNUEFOSV9DRENfUlgxX0NUTF9SWDFfUkFURV9PU1JfMTI4IDB4MQorI2RlZmluZSBUSU1QQU5JX0NEQ19SWDFfQ1RMX1JYMV9SQVRFX09TUl82NCAweDAKKyNkZWZpbmUgVElNUEFOSV9DRENfUlgxX0NUTF9SWDFfSTJTX1JBVEVfUyAxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX0NEQ19SWDFfQ1RMX1JYMV9JMlNfUkFURV9NIDB4MgorI2RlZmluZSBUSU1QQU5JX0NEQ19SWDFfQ1RMX1JYMV9JMlNfUkFURV9CUl8zMiAweDEKKyNkZWZpbmUgVElNUEFOSV9DRENfUlgxX0NUTF9SWDFfSTJTX1JBVEVfQlJfNjQgMHgwCisjZGVmaW5lIFRJTVBBTklfQ0RDX1JYMV9DVExfUlgxX0kyU19NT0RFX1MgMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9DRENfUlgxX0NUTF9SWDFfSTJTX01PREVfTSAweDEKKyNkZWZpbmUgVElNUEFOSV9DRENfUlgxX0NUTF9SWDFfSTJTX01PREVfTUFTVEVSIDB4MQorI2RlZmluZSBUSU1QQU5JX0NEQ19SWDFfQ1RMX1JYMV9JMlNfTU9ERV9TTEFWRSAweDAKKyNkZWZpbmUgVElNUEFOSV9BX0NEQ19UWF9JMlNfQ1RMICgweDgyKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9DRENfVFhfSTJTX0NUTF9SV0MgIlJXIgorI2RlZmluZSBUSU1QQU5JX0NEQ19UWF9JMlNfQ1RMX1BPUiAweGMKKyNkZWZpbmUgVElNUEFOSV9DRENfVFhfSTJTX0NUTF9TIDAKKyNkZWZpbmUgVElNUEFOSV9DRENfVFhfSTJTX0NUTF9NIDB4M0YKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQ0RDX1RYX0kyU19DVExfVFgyX0kyU19TRF9PRV9TIDUKKyNkZWZpbmUgVElNUEFOSV9DRENfVFhfSTJTX0NUTF9UWDJfSTJTX1NEX09FX00gMHgyMAorI2RlZmluZSBUSU1QQU5JX0NEQ19UWF9JMlNfQ1RMX1RYMV9JMlNfU0RfT0VfUyA0CisjZGVmaW5lIFRJTVBBTklfQ0RDX1RYX0kyU19DVExfVFgxX0kyU19TRF9PRV9NIDB4MTAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQ0RDX1RYX0kyU19DVExfVFhfUkFURV9TIDIKKyNkZWZpbmUgVElNUEFOSV9DRENfVFhfSTJTX0NUTF9UWF9SQVRFX00gMHhDCisjZGVmaW5lIFRJTVBBTklfQ0RDX1RYX0kyU19DVExfVFhfUkFURV9PU1JfMjU2IDB4MworI2RlZmluZSBUSU1QQU5JX0NEQ19UWF9JMlNfQ1RMX1RYX1JBVEVfT1NSXzEyOCAweDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQ0RDX1RYX0kyU19DVExfVFhfUkFURV9PU1JfNjQgMHgwCisjZGVmaW5lIFRJTVBBTklfQ0RDX1RYX0kyU19DVExfVFhfSTJTX1JBVEVfUyAxCisjZGVmaW5lIFRJTVBBTklfQ0RDX1RYX0kyU19DVExfVFhfSTJTX1JBVEVfTSAweDIKKyNkZWZpbmUgVElNUEFOSV9DRENfVFhfSTJTX0NUTF9UWF9JMlNfUkFURV9CUl8zMiAweDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQ0RDX1RYX0kyU19DVExfVFhfSTJTX1JBVEVfQlJfNjQgMHgwCisjZGVmaW5lIFRJTVBBTklfQ0RDX1RYX0kyU19DVExfVFhfSTJTX01PREVfUyAwCisjZGVmaW5lIFRJTVBBTklfQ0RDX1RYX0kyU19DVExfVFhfSTJTX01PREVfTSAweDEKKyNkZWZpbmUgVElNUEFOSV9DRENfVFhfSTJTX0NUTF9UWF9JMlNfTU9ERV9NQVNURVIgMHgxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX0NEQ19UWF9JMlNfQ1RMX1RYX0kyU19NT0RFX1NMQVZFIDB4MAorI2RlZmluZSBUSU1QQU5JX0FfQ0RDX0NIX0NUTCAoMHg4MykKKyNkZWZpbmUgVElNUEFOSV9DRENfQ0hfQ1RMX1JXQyAiUlciCisjZGVmaW5lIFRJTVBBTklfQ0RDX0NIX0NUTF9QT1IgMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9DRENfQ0hfQ1RMX1MgMAorI2RlZmluZSBUSU1QQU5JX0NEQ19DSF9DVExfTSAweEZGCisjZGVmaW5lIFRJTVBBTklfQ0RDX0NIX0NUTF9UWDJfRU5fUl9TIDcKKyNkZWZpbmUgVElNUEFOSV9DRENfQ0hfQ1RMX1RYMl9FTl9SX00gMHg4MAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9DRENfQ0hfQ1RMX1RYMl9FTl9MX1MgNgorI2RlZmluZSBUSU1QQU5JX0NEQ19DSF9DVExfVFgyX0VOX0xfTSAweDQwCisjZGVmaW5lIFRJTVBBTklfQ0RDX0NIX0NUTF9SWDJfRU5fUl9TIDUKKyNkZWZpbmUgVElNUEFOSV9DRENfQ0hfQ1RMX1JYMl9FTl9SX00gMHgyMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9DRENfQ0hfQ1RMX1JYMl9FTl9MX1MgNAorI2RlZmluZSBUSU1QQU5JX0NEQ19DSF9DVExfUlgyX0VOX0xfTSAweDEwCisjZGVmaW5lIFRJTVBBTklfQ0RDX0NIX0NUTF9UWDFfRU5fUl9TIDMKKyNkZWZpbmUgVElNUEFOSV9DRENfQ0hfQ1RMX1RYMV9FTl9SX00gMHg4CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX0NEQ19DSF9DVExfVFgxX0VOX0xfUyAyCisjZGVmaW5lIFRJTVBBTklfQ0RDX0NIX0NUTF9UWDFfRU5fTF9NIDB4NAorI2RlZmluZSBUSU1QQU5JX0NEQ19DSF9DVExfUlgxX0VOX1JfUyAxCisjZGVmaW5lIFRJTVBBTklfQ0RDX0NIX0NUTF9SWDFfRU5fUl9NIDB4MgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9DRENfQ0hfQ1RMX1JYMV9FTl9MX1MgMAorI2RlZmluZSBUSU1QQU5JX0NEQ19DSF9DVExfUlgxX0VOX0xfTSAweDEKKyNkZWZpbmUgVElNUEFOSV9BX0NEQ19SWDFMRyAoMHg4NCkKKyNkZWZpbmUgVElNUEFOSV9DRENfUlgxTEdfUldDICJSVyIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQ0RDX1JYMUxHX1BPUiAweGFjCisjZGVmaW5lIFRJTVBBTklfQ0RDX1JYMUxHX1MgMAorI2RlZmluZSBUSU1QQU5JX0NEQ19SWDFMR19NIDB4RkYKKyNkZWZpbmUgVElNUEFOSV9DRENfUlgxTEdfR0FJTl9TIDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQ0RDX1JYMUxHX0dBSU5fTSAweEZGCisjZGVmaW5lIFRJTVBBTklfQV9DRENfUlgxUkcgKDB4ODUpCisjZGVmaW5lIFRJTVBBTklfQ0RDX1JYMVJHX1JXQyAiUlciCisjZGVmaW5lIFRJTVBBTklfQ0RDX1JYMVJHX1BPUiAweGFjCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX0NEQ19SWDFSR19TIDAKKyNkZWZpbmUgVElNUEFOSV9DRENfUlgxUkdfTSAweEZGCisjZGVmaW5lIFRJTVBBTklfQ0RDX1JYMVJHX0dBSU5fUyAwCisjZGVmaW5lIFRJTVBBTklfQ0RDX1JYMVJHX0dBSU5fTSAweEZGCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX0FfQ0RDX1RYMUxHICgweDg2KQorI2RlZmluZSBUSU1QQU5JX0NEQ19UWDFMR19SV0MgIlJXIgorI2RlZmluZSBUSU1QQU5JX0NEQ19UWDFMR19QT1IgMHhhYworI2RlZmluZSBUSU1QQU5JX0NEQ19UWDFMR19TIDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQ0RDX1RYMUxHX00gMHhGRgorI2RlZmluZSBUSU1QQU5JX0NEQ19UWDFMR19HQUlOX1MgMAorI2RlZmluZSBUSU1QQU5JX0NEQ19UWDFMR19HQUlOX00gMHhGRgorI2RlZmluZSBUSU1QQU5JX0FfQ0RDX1RYMVJHICgweDg3KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9DRENfVFgxUkdfUldDICJSVyIKKyNkZWZpbmUgVElNUEFOSV9DRENfVFgxUkdfUE9SIDB4YWMKKyNkZWZpbmUgVElNUEFOSV9DRENfVFgxUkdfUyAwCisjZGVmaW5lIFRJTVBBTklfQ0RDX1RYMVJHX00gMHhGRgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9DRENfVFgxUkdfR0FJTl9TIDAKKyNkZWZpbmUgVElNUEFOSV9DRENfVFgxUkdfR0FJTl9NIDB4RkYKKyNkZWZpbmUgVElNUEFOSV9BX0NEQ19SWF9QR0FfVElNRVIgKDB4ODgpCisjZGVmaW5lIFRJTVBBTklfQ0RDX1JYX1BHQV9USU1FUl9SV0MgIlJXIgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9DRENfUlhfUEdBX1RJTUVSX1BPUiAweGZmCisjZGVmaW5lIFRJTVBBTklfQ0RDX1JYX1BHQV9USU1FUl9TIDAKKyNkZWZpbmUgVElNUEFOSV9DRENfUlhfUEdBX1RJTUVSX00gMHhGRgorI2RlZmluZSBUSU1QQU5JX0NEQ19SWF9QR0FfVElNRVJfVElNRVJfVkFMX1MgMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9DRENfUlhfUEdBX1RJTUVSX1RJTUVSX1ZBTF9NIDB4RkYKKyNkZWZpbmUgVElNUEFOSV9BX0NEQ19UWF9QR0FfVElNRVIgKDB4ODkpCisjZGVmaW5lIFRJTVBBTklfQ0RDX1RYX1BHQV9USU1FUl9SV0MgIlJXIgorI2RlZmluZSBUSU1QQU5JX0NEQ19UWF9QR0FfVElNRVJfUE9SIDB4ZmYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQ0RDX1RYX1BHQV9USU1FUl9TIDAKKyNkZWZpbmUgVElNUEFOSV9DRENfVFhfUEdBX1RJTUVSX00gMHhGRgorI2RlZmluZSBUSU1QQU5JX0NEQ19UWF9QR0FfVElNRVJfVElNRVJfVkFMX1MgMAorI2RlZmluZSBUSU1QQU5JX0NEQ19UWF9QR0FfVElNRVJfVElNRVJfVkFMX00gMHhGRgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9BX0NEQ19HQ1RMMSAoMHg4QSkKKyNkZWZpbmUgVElNUEFOSV9DRENfR0NUTDFfUldDICJSVyIKKyNkZWZpbmUgVElNUEFOSV9DRENfR0NUTDFfUE9SIDB4MzMKKyNkZWZpbmUgVElNUEFOSV9DRENfR0NUTDFfUyAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX0NEQ19HQ1RMMV9NIDB4RkYKKyNkZWZpbmUgVElNUEFOSV9DRENfR0NUTDFfVFgxX1BHQV9VUERBVEVfUl9TIDcKKyNkZWZpbmUgVElNUEFOSV9DRENfR0NUTDFfVFgxX1BHQV9VUERBVEVfUl9NIDB4ODAKKyNkZWZpbmUgVElNUEFOSV9DRENfR0NUTDFfVFgxX1BHQV9VUERBVEVfTF9TIDYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQ0RDX0dDVEwxX1RYMV9QR0FfVVBEQVRFX0xfTSAweDQwCisjZGVmaW5lIFRJTVBBTklfQ0RDX0dDVEwxX1RYMV9QR0FfTVVURV9FTl9SX1MgNQorI2RlZmluZSBUSU1QQU5JX0NEQ19HQ1RMMV9UWDFfUEdBX01VVEVfRU5fUl9NIDB4MjAKKyNkZWZpbmUgVElNUEFOSV9DRENfR0NUTDFfVFgxX1BHQV9NVVRFX0VOX0xfUyA0CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX0NEQ19HQ1RMMV9UWDFfUEdBX01VVEVfRU5fTF9NIDB4MTAKKyNkZWZpbmUgVElNUEFOSV9DRENfR0NUTDFfUlgxX1BHQV9VUERBVEVfUl9TIDMKKyNkZWZpbmUgVElNUEFOSV9DRENfR0NUTDFfUlgxX1BHQV9VUERBVEVfUl9NIDB4OAorI2RlZmluZSBUSU1QQU5JX0NEQ19HQ1RMMV9SWDFfUEdBX1VQREFURV9MX1MgMgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9DRENfR0NUTDFfUlgxX1BHQV9VUERBVEVfTF9NIDB4NAorI2RlZmluZSBUSU1QQU5JX0NEQ19HQ1RMMV9SWDFfUEdBX01VVEVfRU5fUl9TIDEKKyNkZWZpbmUgVElNUEFOSV9DRENfR0NUTDFfUlgxX1BHQV9NVVRFX0VOX1JfTSAweDIKKyNkZWZpbmUgVElNUEFOSV9DRENfR0NUTDFfUlgxX1BHQV9NVVRFX0VOX0xfUyAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX0NEQ19HQ1RMMV9SWDFfUEdBX01VVEVfRU5fTF9NIDB4MQorI2RlZmluZSBUSU1QQU5JX0FfQ0RDX1RYMUxfU1RHICgweDhCKQorI2RlZmluZSBUSU1QQU5JX0NEQ19UWDFMX1NUR19SV0MgIlJXIgorI2RlZmluZSBUSU1QQU5JX0NEQ19UWDFMX1NUR19QT1IgMHhhYworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9DRENfVFgxTF9TVEdfUyAwCisjZGVmaW5lIFRJTVBBTklfQ0RDX1RYMUxfU1RHX00gMHhGRgorI2RlZmluZSBUSU1QQU5JX0NEQ19UWDFMX1NUR19HQUlOX1MgMAorI2RlZmluZSBUSU1QQU5JX0NEQ19UWDFMX1NUR19HQUlOX00gMHhGRgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9BX0NEQ19TVF9DVEwgKDB4OEMpCisjZGVmaW5lIFRJTVBBTklfQ0RDX1NUX0NUTF9SV0MgIlJXIgorI2RlZmluZSBUSU1QQU5JX0NEQ19TVF9DVExfUE9SIDB4NTUKKyNkZWZpbmUgVElNUEFOSV9DRENfU1RfQ1RMX1MgMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9DRENfU1RfQ1RMX00gMHhGRgorI2RlZmluZSBUSU1QQU5JX0NEQ19TVF9DVExfVFgyX1JfU0lERVRPTkVfVVBEQVRFX1MgNworI2RlZmluZSBUSU1QQU5JX0NEQ19TVF9DVExfVFgyX1JfU0lERVRPTkVfVVBEQVRFX00gMHg4MAorI2RlZmluZSBUSU1QQU5JX0NEQ19TVF9DVExfVFgyX1JfU0lERVRPTkVfTVVURV9FTl9TIDYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQ0RDX1NUX0NUTF9UWDJfUl9TSURFVE9ORV9NVVRFX0VOX00gMHg0MAorI2RlZmluZSBUSU1QQU5JX0NEQ19TVF9DVExfVFgyX0xfU0lERVRPTkVfVVBEQVRFX1MgNQorI2RlZmluZSBUSU1QQU5JX0NEQ19TVF9DVExfVFgyX0xfU0lERVRPTkVfVVBEQVRFX00gMHgyMAorI2RlZmluZSBUSU1QQU5JX0NEQ19TVF9DVExfVFgyX0xfU0lERVRPTkVfTVVURV9FTl9TIDQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQ0RDX1NUX0NUTF9UWDJfTF9TSURFVE9ORV9NVVRFX0VOX00gMHgxMAorI2RlZmluZSBUSU1QQU5JX0NEQ19TVF9DVExfVFgxX1JfU0lERVRPTkVfVVBEQVRFX1MgMworI2RlZmluZSBUSU1QQU5JX0NEQ19TVF9DVExfVFgxX1JfU0lERVRPTkVfVVBEQVRFX00gMHg4CisjZGVmaW5lIFRJTVBBTklfQ0RDX1NUX0NUTF9UWDFfUl9TSURFVE9ORV9NVVRFX0VOX1MgMgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9DRENfU1RfQ1RMX1RYMV9SX1NJREVUT05FX01VVEVfRU5fTSAweDQKKyNkZWZpbmUgVElNUEFOSV9DRENfU1RfQ1RMX1RYMV9MX1NJREVUT05FX1VQREFURV9TIDEKKyNkZWZpbmUgVElNUEFOSV9DRENfU1RfQ1RMX1RYMV9MX1NJREVUT05FX1VQREFURV9NIDB4MgorI2RlZmluZSBUSU1QQU5JX0NEQ19TVF9DVExfVFgxX0xfU0lERVRPTkVfTVVURV9FTl9TIDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQ0RDX1NUX0NUTF9UWDFfTF9TSURFVE9ORV9NVVRFX0VOX00gMHgxCisjZGVmaW5lIFRJTVBBTklfQV9DRENfUlgxTF9EQ09GRlNFVCAoMHg4RCkKKyNkZWZpbmUgVElNUEFOSV9DRENfUlgxTF9EQ09GRlNFVF9SV0MgIlJXIgorI2RlZmluZSBUSU1QQU5JX0NEQ19SWDFMX0RDT0ZGU0VUX1BPUiAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX0NEQ19SWDFMX0RDT0ZGU0VUX1MgMAorI2RlZmluZSBUSU1QQU5JX0NEQ19SWDFMX0RDT0ZGU0VUX00gMHhGRgorI2RlZmluZSBUSU1QQU5JX0NEQ19SWDFMX0RDT0ZGU0VUX09GRlNFVF9TIDAKKyNkZWZpbmUgVElNUEFOSV9DRENfUlgxTF9EQ09GRlNFVF9PRkZTRVRfTSAweEZGCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX0FfQ0RDX1JYMVJfRENPRkZTRVQgKDB4OEUpCisjZGVmaW5lIFRJTVBBTklfQ0RDX1JYMVJfRENPRkZTRVRfUldDICJSVyIKKyNkZWZpbmUgVElNUEFOSV9DRENfUlgxUl9EQ09GRlNFVF9QT1IgMAorI2RlZmluZSBUSU1QQU5JX0NEQ19SWDFSX0RDT0ZGU0VUX1MgMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9DRENfUlgxUl9EQ09GRlNFVF9NIDB4RkYKKyNkZWZpbmUgVElNUEFOSV9DRENfUlgxUl9EQ09GRlNFVF9PRkZTRVRfUyAwCisjZGVmaW5lIFRJTVBBTklfQ0RDX1JYMVJfRENPRkZTRVRfT0ZGU0VUX00gMHhGRgorI2RlZmluZSBUSU1QQU5JX0FfQ0RDX0JZUEFTU19DVEwxICgweDhGKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9DRENfQllQQVNTX0NUTDFfUldDICJSVyIKKyNkZWZpbmUgVElNUEFOSV9DRENfQllQQVNTX0NUTDFfUE9SIDB4MgorI2RlZmluZSBUSU1QQU5JX0NEQ19CWVBBU1NfQ1RMMV9TIDAKKyNkZWZpbmUgVElNUEFOSV9DRENfQllQQVNTX0NUTDFfTSAweEYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQ0RDX0JZUEFTU19DVEwxX0RJVEhFUl9CUF9TIDMKKyNkZWZpbmUgVElNUEFOSV9DRENfQllQQVNTX0NUTDFfRElUSEVSX0JQX00gMHg4CisjZGVmaW5lIFRJTVBBTklfQ0RDX0JZUEFTU19DVEwxX0RJVEhFUl9TSEFQRV9TRUxfUyAyCisjZGVmaW5lIFRJTVBBTklfQ0RDX0JZUEFTU19DVEwxX0RJVEhFUl9TSEFQRV9TRUxfTSAweDQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQ0RDX0JZUEFTU19DVEwxX0RJVEhFUl9ETFlfU0VMX1MgMQorI2RlZmluZSBUSU1QQU5JX0NEQ19CWVBBU1NfQ1RMMV9ESVRIRVJfRExZX1NFTF9NIDB4MgorI2RlZmluZSBUSU1QQU5JX0NEQ19CWVBBU1NfQ1RMMV9SWDFfSFBGX0JQX1MgMAorI2RlZmluZSBUSU1QQU5JX0NEQ19CWVBBU1NfQ1RMMV9SWDFfSFBGX0JQX00gMHgxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX0FfQ0RDX1BETV9DT05GSUcgKDB4OTApCisjZGVmaW5lIFRJTVBBTklfQ0RDX1BETV9DT05GSUdfUldDICJSVyIKKyNkZWZpbmUgVElNUEFOSV9DRENfUERNX0NPTkZJR19QT1IgMAorI2RlZmluZSBUSU1QQU5JX0NEQ19QRE1fQ09ORklHX1MgMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9DRENfUERNX0NPTkZJR19NIDB4RgorI2RlZmluZSBUSU1QQU5JX0NEQ19QRE1fQ09ORklHX1BETV9TRUxfUyAwCisjZGVmaW5lIFRJTVBBTklfQ0RDX1BETV9DT05GSUdfUERNX1NFTF9NIDB4RgorI2RlZmluZSBUSU1QQU5JX0FfQ0RDX1RFU1RNT0RFMSAoMHg5MSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQ0RDX1RFU1RNT0RFMV9SV0MgIlJXIgorI2RlZmluZSBUSU1QQU5JX0NEQ19URVNUTU9ERTFfUE9SIDAKKyNkZWZpbmUgVElNUEFOSV9DRENfVEVTVE1PREUxX1MgMAorI2RlZmluZSBUSU1QQU5JX0NEQ19URVNUTU9ERTFfTSAweDNGCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX0NEQ19URVNUTU9ERTFfQ09NUF9JMkNfVEVTVF9FTl9TIDUKKyNkZWZpbmUgVElNUEFOSV9DRENfVEVTVE1PREUxX0NPTVBfSTJDX1RFU1RfRU5fTSAweDIwCisjZGVmaW5lIFRJTVBBTklfQ0RDX1RFU1RNT0RFMV9SWDFfVEVTVF9FTl9SX1MgNAorI2RlZmluZSBUSU1QQU5JX0NEQ19URVNUTU9ERTFfUlgxX1RFU1RfRU5fUl9NIDB4MTAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQ0RDX1RFU1RNT0RFMV9SWDFfVEVTVF9FTl9MX1MgMworI2RlZmluZSBUSU1QQU5JX0NEQ19URVNUTU9ERTFfUlgxX1RFU1RfRU5fTF9NIDB4OAorI2RlZmluZSBUSU1QQU5JX0NEQ19URVNUTU9ERTFfVFgxX1RFU1RfRU5fUl9TIDIKKyNkZWZpbmUgVElNUEFOSV9DRENfVEVTVE1PREUxX1RYMV9URVNUX0VOX1JfTSAweDQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQ0RDX1RFU1RNT0RFMV9UWDFfVEVTVF9FTl9MX1MgMQorI2RlZmluZSBUSU1QQU5JX0NEQ19URVNUTU9ERTFfVFgxX1RFU1RfRU5fTF9NIDB4MgorI2RlZmluZSBUSU1QQU5JX0NEQ19URVNUTU9ERTFfQV9MT09QQkFDS19FTjFfUyAwCisjZGVmaW5lIFRJTVBBTklfQ0RDX1RFU1RNT0RFMV9BX0xPT1BCQUNLX0VOMV9NIDB4MQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9BX0NEQ19ETUlDX0NMS19DVEwgKDB4OTIpCisjZGVmaW5lIFRJTVBBTklfQ0RDX0RNSUNfQ0xLX0NUTF9SV0MgIlJXIgorI2RlZmluZSBUSU1QQU5JX0NEQ19ETUlDX0NMS19DVExfUE9SIDAKKyNkZWZpbmUgVElNUEFOSV9DRENfRE1JQ19DTEtfQ1RMX1MgMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9DRENfRE1JQ19DTEtfQ1RMX00gMHgzRgorI2RlZmluZSBUSU1QQU5JX0NEQ19ETUlDX0NMS19DVExfRE1JQ19NQ0xLX0RJVl9TRUxfUyAzCisjZGVmaW5lIFRJTVBBTklfQ0RDX0RNSUNfQ0xLX0NUTF9ETUlDX01DTEtfRElWX1NFTF9NIDB4MzgKKyNkZWZpbmUgVElNUEFOSV9DRENfRE1JQ19DTEtfQ1RMX0RNSUNfTUNMS19ESVZfU0VMX0RJVl82IDB4NAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9DRENfRE1JQ19DTEtfQ1RMX0RNSUNfTUNMS19ESVZfU0VMX0RJVl80IDB4MworI2RlZmluZSBUSU1QQU5JX0NEQ19ETUlDX0NMS19DVExfRE1JQ19NQ0xLX0RJVl9TRUxfRElWXzMgMHgyCisjZGVmaW5lIFRJTVBBTklfQ0RDX0RNSUNfQ0xLX0NUTF9ETUlDX01DTEtfRElWX1NFTF9ESVZfMiAweDEKKyNkZWZpbmUgVElNUEFOSV9DRENfRE1JQ19DTEtfQ1RMX0RNSUNfTUNMS19ESVZfU0VMX0RJVl8xIDB4MAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9DRENfRE1JQ19DTEtfQ1RMX0RNSUNfTUNMS19TRUxfUyAxCisjZGVmaW5lIFRJTVBBTklfQ0RDX0RNSUNfQ0xLX0NUTF9ETUlDX01DTEtfU0VMX00gMHg2CisjZGVmaW5lIFRJTVBBTklfQ0RDX0RNSUNfQ0xLX0NUTF9ETUlDX01DTEtfU0VMX1JYX01DTEsyIDB4MgorI2RlZmluZSBUSU1QQU5JX0NEQ19ETUlDX0NMS19DVExfRE1JQ19NQ0xLX1NFTF9SWF9NQ0xLMSAweDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQ0RDX0RNSUNfQ0xLX0NUTF9ETUlDX01DTEtfU0VMX1RYX01DTEsgMHgwCisjZGVmaW5lIFRJTVBBTklfQ0RDX0RNSUNfQ0xLX0NUTF9ETUlDX0NMS19FTl9TIDAKKyNkZWZpbmUgVElNUEFOSV9DRENfRE1JQ19DTEtfQ1RMX0RNSUNfQ0xLX0VOX00gMHgxCisjZGVmaW5lIFRJTVBBTklfQV9DRENfQURDMTJfQ0xLX0NUTCAoMHg5MykKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQ0RDX0FEQzEyX0NMS19DVExfUldDICJSVyIKKyNkZWZpbmUgVElNUEFOSV9DRENfQURDMTJfQ0xLX0NUTF9QT1IgMAorI2RlZmluZSBUSU1QQU5JX0NEQ19BREMxMl9DTEtfQ1RMX1MgMAorI2RlZmluZSBUSU1QQU5JX0NEQ19BREMxMl9DTEtfQ1RMX00gMHhGRgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9DRENfQURDMTJfQ0xLX0NUTF9UWDFfTUNMS19TRUxfUyA2CisjZGVmaW5lIFRJTVBBTklfQ0RDX0FEQzEyX0NMS19DVExfVFgxX01DTEtfU0VMX00gMHhDMAorI2RlZmluZSBUSU1QQU5JX0NEQ19BREMxMl9DTEtfQ1RMX1RYMV9NQ0xLX1NFTF9SWF9NQ0xLMiAweDIKKyNkZWZpbmUgVElNUEFOSV9DRENfQURDMTJfQ0xLX0NUTF9UWDFfTUNMS19TRUxfUlhfTUNMSzEgMHgxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX0NEQ19BREMxMl9DTEtfQ1RMX1RYMV9NQ0xLX1NFTF9UWF9NQ0xLIDB4MAorI2RlZmluZSBUSU1QQU5JX0NEQ19BREMxMl9DTEtfQ1RMX1RYMV9NQ0xLX0RJVl9TRUxfUl9TIDMKKyNkZWZpbmUgVElNUEFOSV9DRENfQURDMTJfQ0xLX0NUTF9UWDFfTUNMS19ESVZfU0VMX1JfTSAweDM4CisjZGVmaW5lIFRJTVBBTklfQ0RDX0FEQzEyX0NMS19DVExfVFgxX01DTEtfRElWX1NFTF9SX0RJVl82IDB4NAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9DRENfQURDMTJfQ0xLX0NUTF9UWDFfTUNMS19ESVZfU0VMX1JfRElWXzQgMHgzCisjZGVmaW5lIFRJTVBBTklfQ0RDX0FEQzEyX0NMS19DVExfVFgxX01DTEtfRElWX1NFTF9SX0RJVl8zIDB4MgorI2RlZmluZSBUSU1QQU5JX0NEQ19BREMxMl9DTEtfQ1RMX1RYMV9NQ0xLX0RJVl9TRUxfUl9ESVZfMiAweDEKKyNkZWZpbmUgVElNUEFOSV9DRENfQURDMTJfQ0xLX0NUTF9UWDFfTUNMS19ESVZfU0VMX1JfRElWXzEgMHgwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX0NEQ19BREMxMl9DTEtfQ1RMX1RYMV9NQ0xLX0RJVl9TRUxfTF9TIDAKKyNkZWZpbmUgVElNUEFOSV9DRENfQURDMTJfQ0xLX0NUTF9UWDFfTUNMS19ESVZfU0VMX0xfTSAweDcKKyNkZWZpbmUgVElNUEFOSV9DRENfQURDMTJfQ0xLX0NUTF9UWDFfTUNMS19ESVZfU0VMX0xfRElWXzYgMHg0CisjZGVmaW5lIFRJTVBBTklfQ0RDX0FEQzEyX0NMS19DVExfVFgxX01DTEtfRElWX1NFTF9MX0RJVl80IDB4MworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9DRENfQURDMTJfQ0xLX0NUTF9UWDFfTUNMS19ESVZfU0VMX0xfRElWXzMgMHgyCisjZGVmaW5lIFRJTVBBTklfQ0RDX0FEQzEyX0NMS19DVExfVFgxX01DTEtfRElWX1NFTF9MX0RJVl8yIDB4MQorI2RlZmluZSBUSU1QQU5JX0NEQ19BREMxMl9DTEtfQ1RMX1RYMV9NQ0xLX0RJVl9TRUxfTF9ESVZfMSAweDAKKyNkZWZpbmUgVElNUEFOSV9BX0NEQ19UWDFfQ1RMICgweDk0KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9DRENfVFgxX0NUTF9SV0MgIlJXIgorI2RlZmluZSBUSU1QQU5JX0NEQ19UWDFfQ1RMX1BPUiAweDFiCisjZGVmaW5lIFRJTVBBTklfQ0RDX1RYMV9DVExfUyAwCisjZGVmaW5lIFRJTVBBTklfQ0RDX1RYMV9DVExfTSAweDNGCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX0NEQ19UWDFfQ1RMX1RYMV9ETUlDX1NFTF9SX1MgNQorI2RlZmluZSBUSU1QQU5JX0NEQ19UWDFfQ1RMX1RYMV9ETUlDX1NFTF9SX00gMHgyMAorI2RlZmluZSBUSU1QQU5JX0NEQ19UWDFfQ1RMX1RYMV9SQVRFX1JfUyAzCisjZGVmaW5lIFRJTVBBTklfQ0RDX1RYMV9DVExfVFgxX1JBVEVfUl9NIDB4MTgKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQ0RDX1RYMV9DVExfVFgxX1JBVEVfUl9PU1JfMjU2IDB4MworI2RlZmluZSBUSU1QQU5JX0NEQ19UWDFfQ1RMX1RYMV9SQVRFX1JfT1NSXzEyOCAweDEKKyNkZWZpbmUgVElNUEFOSV9DRENfVFgxX0NUTF9UWDFfUkFURV9SX09TUl82NCAweDAKKyNkZWZpbmUgVElNUEFOSV9DRENfVFgxX0NUTF9UWDFfRE1JQ19TRUxfTF9TIDIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQ0RDX1RYMV9DVExfVFgxX0RNSUNfU0VMX0xfTSAweDQKKyNkZWZpbmUgVElNUEFOSV9DRENfVFgxX0NUTF9UWDFfUkFURV9MX1MgMAorI2RlZmluZSBUSU1QQU5JX0NEQ19UWDFfQ1RMX1RYMV9SQVRFX0xfTSAweDMKKyNkZWZpbmUgVElNUEFOSV9DRENfVFgxX0NUTF9UWDFfUkFURV9MX09TUl8yNTYgMHgzCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX0NEQ19UWDFfQ1RMX1RYMV9SQVRFX0xfT1NSXzEyOCAweDEKKyNkZWZpbmUgVElNUEFOSV9DRENfVFgxX0NUTF9UWDFfUkFURV9MX09TUl82NCAweDAKKyNkZWZpbmUgVElNUEFOSV9BX0NEQ19BREMzNF9DTEtfQ1RMICgweDk1KQorI2RlZmluZSBUSU1QQU5JX0NEQ19BREMzNF9DTEtfQ1RMX1JXQyAiUlciCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX0NEQ19BREMzNF9DTEtfQ1RMX1BPUiAwCisjZGVmaW5lIFRJTVBBTklfQ0RDX0FEQzM0X0NMS19DVExfUyAwCisjZGVmaW5lIFRJTVBBTklfQ0RDX0FEQzM0X0NMS19DVExfTSAweEZGCisjZGVmaW5lIFRJTVBBTklfQ0RDX0FEQzM0X0NMS19DVExfVFgyX01DTEtfU0VMX1MgNgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9DRENfQURDMzRfQ0xLX0NUTF9UWDJfTUNMS19TRUxfTSAweEMwCisjZGVmaW5lIFRJTVBBTklfQ0RDX0FEQzM0X0NMS19DVExfVFgyX01DTEtfU0VMX1JYX01DTEsyIDB4MgorI2RlZmluZSBUSU1QQU5JX0NEQ19BREMzNF9DTEtfQ1RMX1RYMl9NQ0xLX1NFTF9SWF9NQ0xLMSAweDEKKyNkZWZpbmUgVElNUEFOSV9DRENfQURDMzRfQ0xLX0NUTF9UWDJfTUNMS19TRUxfVFhfTUNMSyAweDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQ0RDX0FEQzM0X0NMS19DVExfVFgyX01DTEtfRElWX1NFTF9SX1MgMworI2RlZmluZSBUSU1QQU5JX0NEQ19BREMzNF9DTEtfQ1RMX1RYMl9NQ0xLX0RJVl9TRUxfUl9NIDB4MzgKKyNkZWZpbmUgVElNUEFOSV9DRENfQURDMzRfQ0xLX0NUTF9UWDJfTUNMS19ESVZfU0VMX1JfRElWXzYgMHg0CisjZGVmaW5lIFRJTVBBTklfQ0RDX0FEQzM0X0NMS19DVExfVFgyX01DTEtfRElWX1NFTF9SX0RJVl80IDB4MworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9DRENfQURDMzRfQ0xLX0NUTF9UWDJfTUNMS19ESVZfU0VMX1JfRElWXzMgMHgyCisjZGVmaW5lIFRJTVBBTklfQ0RDX0FEQzM0X0NMS19DVExfVFgyX01DTEtfRElWX1NFTF9SX0RJVl8yIDB4MQorI2RlZmluZSBUSU1QQU5JX0NEQ19BREMzNF9DTEtfQ1RMX1RYMl9NQ0xLX0RJVl9TRUxfUl9ESVZfMSAweDAKKyNkZWZpbmUgVElNUEFOSV9DRENfQURDMzRfQ0xLX0NUTF9UWDJfTUNMS19ESVZfU0VMX0xfUyAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX0NEQ19BREMzNF9DTEtfQ1RMX1RYMl9NQ0xLX0RJVl9TRUxfTF9NIDB4NworI2RlZmluZSBUSU1QQU5JX0NEQ19BREMzNF9DTEtfQ1RMX1RYMl9NQ0xLX0RJVl9TRUxfTF9ESVZfNiAweDQKKyNkZWZpbmUgVElNUEFOSV9DRENfQURDMzRfQ0xLX0NUTF9UWDJfTUNMS19ESVZfU0VMX0xfRElWXzQgMHgzCisjZGVmaW5lIFRJTVBBTklfQ0RDX0FEQzM0X0NMS19DVExfVFgyX01DTEtfRElWX1NFTF9MX0RJVl8zIDB4MgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9DRENfQURDMzRfQ0xLX0NUTF9UWDJfTUNMS19ESVZfU0VMX0xfRElWXzIgMHgxCisjZGVmaW5lIFRJTVBBTklfQ0RDX0FEQzM0X0NMS19DVExfVFgyX01DTEtfRElWX1NFTF9MX0RJVl8xIDB4MAorI2RlZmluZSBUSU1QQU5JX0FfQ0RDX1RYMl9DVEwgKDB4OTYpCisjZGVmaW5lIFRJTVBBTklfQ0RDX1RYMl9DVExfUldDICJSVyIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQ0RDX1RYMl9DVExfUE9SIDB4MWIKKyNkZWZpbmUgVElNUEFOSV9DRENfVFgyX0NUTF9TIDAKKyNkZWZpbmUgVElNUEFOSV9DRENfVFgyX0NUTF9NIDB4M0YKKyNkZWZpbmUgVElNUEFOSV9DRENfVFgyX0NUTF9UWDJfRE1JQ19TRUxfUl9TIDUKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQ0RDX1RYMl9DVExfVFgyX0RNSUNfU0VMX1JfTSAweDIwCisjZGVmaW5lIFRJTVBBTklfQ0RDX1RYMl9DVExfVFgyX1JBVEVfUl9TIDMKKyNkZWZpbmUgVElNUEFOSV9DRENfVFgyX0NUTF9UWDJfUkFURV9SX00gMHgxOAorI2RlZmluZSBUSU1QQU5JX0NEQ19UWDJfQ1RMX1RYMl9SQVRFX1JfT1NSXzI1NiAweDMKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQ0RDX1RYMl9DVExfVFgyX1JBVEVfUl9PU1JfMTI4IDB4MQorI2RlZmluZSBUSU1QQU5JX0NEQ19UWDJfQ1RMX1RYMl9SQVRFX1JfT1NSXzY0IDB4MAorI2RlZmluZSBUSU1QQU5JX0NEQ19UWDJfQ1RMX1RYMl9ETUlDX1NFTF9MX1MgMgorI2RlZmluZSBUSU1QQU5JX0NEQ19UWDJfQ1RMX1RYMl9ETUlDX1NFTF9MX00gMHg0CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX0NEQ19UWDJfQ1RMX1RYMl9SQVRFX0xfUyAwCisjZGVmaW5lIFRJTVBBTklfQ0RDX1RYMl9DVExfVFgyX1JBVEVfTF9NIDB4MworI2RlZmluZSBUSU1QQU5JX0NEQ19UWDJfQ1RMX1RYMl9SQVRFX0xfT1NSXzI1NiAweDMKKyNkZWZpbmUgVElNUEFOSV9DRENfVFgyX0NUTF9UWDJfUkFURV9MX09TUl8xMjggMHgxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX0NEQ19UWDJfQ1RMX1RYMl9SQVRFX0xfT1NSXzY0IDB4MAorI2RlZmluZSBUSU1QQU5JX0FfQ0RDX1JYMV9DTEtfQ1RMICgweDk3KQorI2RlZmluZSBUSU1QQU5JX0NEQ19SWDFfQ0xLX0NUTF9SV0MgIlJXIgorI2RlZmluZSBUSU1QQU5JX0NEQ19SWDFfQ0xLX0NUTF9QT1IgMHgxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX0NEQ19SWDFfQ0xLX0NUTF9TIDAKKyNkZWZpbmUgVElNUEFOSV9DRENfUlgxX0NMS19DVExfTSAweDFGCisjZGVmaW5lIFRJTVBBTklfQ0RDX1JYMV9DTEtfQ1RMX1JYMV9NQ0xLX0RJVl9TRUxfUyAyCisjZGVmaW5lIFRJTVBBTklfQ0RDX1JYMV9DTEtfQ1RMX1JYMV9NQ0xLX0RJVl9TRUxfTSAweDFDCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX0NEQ19SWDFfQ0xLX0NUTF9SWDFfTUNMS19ESVZfU0VMX0RJVl82IDB4NAorI2RlZmluZSBUSU1QQU5JX0NEQ19SWDFfQ0xLX0NUTF9SWDFfTUNMS19ESVZfU0VMX0RJVl80IDB4MworI2RlZmluZSBUSU1QQU5JX0NEQ19SWDFfQ0xLX0NUTF9SWDFfTUNMS19ESVZfU0VMX0RJVl8zIDB4MgorI2RlZmluZSBUSU1QQU5JX0NEQ19SWDFfQ0xLX0NUTF9SWDFfTUNMS19ESVZfU0VMX0RJVl8yIDB4MQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9DRENfUlgxX0NMS19DVExfUlgxX01DTEtfRElWX1NFTF9ESVZfMSAweDAKKyNkZWZpbmUgVElNUEFOSV9DRENfUlgxX0NMS19DVExfUlgxX01DTEtfU0VMX1MgMAorI2RlZmluZSBUSU1QQU5JX0NEQ19SWDFfQ0xLX0NUTF9SWDFfTUNMS19TRUxfTSAweDMKKyNkZWZpbmUgVElNUEFOSV9DRENfUlgxX0NMS19DVExfUlgxX01DTEtfU0VMX1JYX01DTEsyIDB4MgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9DRENfUlgxX0NMS19DVExfUlgxX01DTEtfU0VMX1JYX01DTEsxIDB4MQorI2RlZmluZSBUSU1QQU5JX0NEQ19SWDFfQ0xLX0NUTF9SWDFfTUNMS19TRUxfVFhfTUNMSyAweDAKKyNkZWZpbmUgVElNUEFOSV9BX0NEQ19SWDJfQ0xLX0NUTCAoMHg5OCkKKyNkZWZpbmUgVElNUEFOSV9DRENfUlgyX0NMS19DVExfUldDICJSVyIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQ0RDX1JYMl9DTEtfQ1RMX1BPUiAweDIKKyNkZWZpbmUgVElNUEFOSV9DRENfUlgyX0NMS19DVExfUyAwCisjZGVmaW5lIFRJTVBBTklfQ0RDX1JYMl9DTEtfQ1RMX00gMHgxRgorI2RlZmluZSBUSU1QQU5JX0NEQ19SWDJfQ0xLX0NUTF9SWDJfTUNMS19ESVZfU0VMX1MgMgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9DRENfUlgyX0NMS19DVExfUlgyX01DTEtfRElWX1NFTF9NIDB4MUMKKyNkZWZpbmUgVElNUEFOSV9DRENfUlgyX0NMS19DVExfUlgyX01DTEtfRElWX1NFTF9ESVZfNiAweDQKKyNkZWZpbmUgVElNUEFOSV9DRENfUlgyX0NMS19DVExfUlgyX01DTEtfRElWX1NFTF9ESVZfNCAweDMKKyNkZWZpbmUgVElNUEFOSV9DRENfUlgyX0NMS19DVExfUlgyX01DTEtfRElWX1NFTF9ESVZfMyAweDIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQ0RDX1JYMl9DTEtfQ1RMX1JYMl9NQ0xLX0RJVl9TRUxfRElWXzIgMHgxCisjZGVmaW5lIFRJTVBBTklfQ0RDX1JYMl9DTEtfQ1RMX1JYMl9NQ0xLX0RJVl9TRUxfRElWXzEgMHgwCisjZGVmaW5lIFRJTVBBTklfQ0RDX1JYMl9DTEtfQ1RMX1JYMl9NQ0xLX1NFTF9TIDAKKyNkZWZpbmUgVElNUEFOSV9DRENfUlgyX0NMS19DVExfUlgyX01DTEtfU0VMX00gMHgzCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX0NEQ19SWDJfQ0xLX0NUTF9SWDJfTUNMS19TRUxfUlhfTUNMSzIgMHgyCisjZGVmaW5lIFRJTVBBTklfQ0RDX1JYMl9DTEtfQ1RMX1JYMl9NQ0xLX1NFTF9SWF9NQ0xLMSAweDEKKyNkZWZpbmUgVElNUEFOSV9DRENfUlgyX0NMS19DVExfUlgyX01DTEtfU0VMX1RYX01DTEsgMHgwCisjZGVmaW5lIFRJTVBBTklfQV9DRENfREVDX0FEQ19TRUwgKDB4OTkpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX0NEQ19ERUNfQURDX1NFTF9SV0MgIlJXIgorI2RlZmluZSBUSU1QQU5JX0NEQ19ERUNfQURDX1NFTF9QT1IgMAorI2RlZmluZSBUSU1QQU5JX0NEQ19ERUNfQURDX1NFTF9TIDAKKyNkZWZpbmUgVElNUEFOSV9DRENfREVDX0FEQ19TRUxfTSAweEZGCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX0NEQ19ERUNfQURDX1NFTF9UWDJfQURDX1NFTF9SX1MgNgorI2RlZmluZSBUSU1QQU5JX0NEQ19ERUNfQURDX1NFTF9UWDJfQURDX1NFTF9SX00gMHhDMAorI2RlZmluZSBUSU1QQU5JX0NEQ19ERUNfQURDX1NFTF9UWDJfQURDX1NFTF9SX0FEQzQgMHgzCisjZGVmaW5lIFRJTVBBTklfQ0RDX0RFQ19BRENfU0VMX1RYMl9BRENfU0VMX1JfQURDMyAweDIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQ0RDX0RFQ19BRENfU0VMX1RYMl9BRENfU0VMX1JfQURDMiAweDEKKyNkZWZpbmUgVElNUEFOSV9DRENfREVDX0FEQ19TRUxfVFgyX0FEQ19TRUxfUl9BREMxIDB4MAorI2RlZmluZSBUSU1QQU5JX0NEQ19ERUNfQURDX1NFTF9UWDJfQURDX1NFTF9MX1MgNAorI2RlZmluZSBUSU1QQU5JX0NEQ19ERUNfQURDX1NFTF9UWDJfQURDX1NFTF9MX00gMHgzMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9DRENfREVDX0FEQ19TRUxfVFgyX0FEQ19TRUxfTF9BREM0IDB4MworI2RlZmluZSBUSU1QQU5JX0NEQ19ERUNfQURDX1NFTF9UWDJfQURDX1NFTF9MX0FEQzMgMHgyCisjZGVmaW5lIFRJTVBBTklfQ0RDX0RFQ19BRENfU0VMX1RYMl9BRENfU0VMX0xfQURDMiAweDEKKyNkZWZpbmUgVElNUEFOSV9DRENfREVDX0FEQ19TRUxfVFgyX0FEQ19TRUxfTF9BREMxIDB4MAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9DRENfREVDX0FEQ19TRUxfVFgxX0FEQ19TRUxfUl9TIDIKKyNkZWZpbmUgVElNUEFOSV9DRENfREVDX0FEQ19TRUxfVFgxX0FEQ19TRUxfUl9NIDB4QworI2RlZmluZSBUSU1QQU5JX0NEQ19ERUNfQURDX1NFTF9UWDFfQURDX1NFTF9SX0FEQzQgMHgzCisjZGVmaW5lIFRJTVBBTklfQ0RDX0RFQ19BRENfU0VMX1RYMV9BRENfU0VMX1JfQURDMyAweDIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQ0RDX0RFQ19BRENfU0VMX1RYMV9BRENfU0VMX1JfQURDMiAweDEKKyNkZWZpbmUgVElNUEFOSV9DRENfREVDX0FEQ19TRUxfVFgxX0FEQ19TRUxfUl9BREMxIDB4MAorI2RlZmluZSBUSU1QQU5JX0NEQ19ERUNfQURDX1NFTF9UWDFfQURDX1NFTF9MX1MgMAorI2RlZmluZSBUSU1QQU5JX0NEQ19ERUNfQURDX1NFTF9UWDFfQURDX1NFTF9MX00gMHgzCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX0NEQ19ERUNfQURDX1NFTF9UWDFfQURDX1NFTF9MX0FEQzQgMHgzCisjZGVmaW5lIFRJTVBBTklfQ0RDX0RFQ19BRENfU0VMX1RYMV9BRENfU0VMX0xfQURDMyAweDIKKyNkZWZpbmUgVElNUEFOSV9DRENfREVDX0FEQ19TRUxfVFgxX0FEQ19TRUxfTF9BREMyIDB4MQorI2RlZmluZSBUSU1QQU5JX0NEQ19ERUNfQURDX1NFTF9UWDFfQURDX1NFTF9MX0FEQzEgMHgwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX0FfQ0RDX0FOQ19JTlBVVF9NVVggKDB4OUEpCisjZGVmaW5lIFRJTVBBTklfQ0RDX0FOQ19JTlBVVF9NVVhfUldDICJSVyIKKyNkZWZpbmUgVElNUEFOSV9DRENfQU5DX0lOUFVUX01VWF9QT1IgMAorI2RlZmluZSBUSU1QQU5JX0NEQ19BTkNfSU5QVVRfTVVYX1MgMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9DRENfQU5DX0lOUFVUX01VWF9NIDB4RkYKKyNkZWZpbmUgVElNUEFOSV9DRENfQU5DX0lOUFVUX01VWF9BTkMyX0FEQ19TRUxfUyA2CisjZGVmaW5lIFRJTVBBTklfQ0RDX0FOQ19JTlBVVF9NVVhfQU5DMl9BRENfU0VMX00gMHhDMAorI2RlZmluZSBUSU1QQU5JX0NEQ19BTkNfSU5QVVRfTVVYX0FOQzJfQURDX1NFTF9BX0NEQ19UWDJET1IgMHgzCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX0NEQ19BTkNfSU5QVVRfTVVYX0FOQzJfQURDX1NFTF9BX0NEQ19UWDJET0wgMHgyCisjZGVmaW5lIFRJTVBBTklfQ0RDX0FOQ19JTlBVVF9NVVhfQU5DMl9BRENfU0VMX0FfQ0RDX1RYMURPUiAweDEKKyNkZWZpbmUgVElNUEFOSV9DRENfQU5DX0lOUFVUX01VWF9BTkMyX0FEQ19TRUxfQV9DRENfVFgxRE9MIDB4MAorI2RlZmluZSBUSU1QQU5JX0NEQ19BTkNfSU5QVVRfTVVYX0FOQzJfRE1JQ19TRUxfUyA0CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX0NEQ19BTkNfSU5QVVRfTVVYX0FOQzJfRE1JQ19TRUxfTSAweDMwCisjZGVmaW5lIFRJTVBBTklfQ0RDX0FOQ19JTlBVVF9NVVhfQU5DMl9ETUlDX1NFTF9NSUMyX0RJTl9SIDB4MworI2RlZmluZSBUSU1QQU5JX0NEQ19BTkNfSU5QVVRfTVVYX0FOQzJfRE1JQ19TRUxfTUlDMl9ESU5fTCAweDIKKyNkZWZpbmUgVElNUEFOSV9DRENfQU5DX0lOUFVUX01VWF9BTkMyX0RNSUNfU0VMX01JQzFfRElOX1IgMHgxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX0NEQ19BTkNfSU5QVVRfTVVYX0FOQzJfRE1JQ19TRUxfTUlDMV9ESU5fTCAweDAKKyNkZWZpbmUgVElNUEFOSV9DRENfQU5DX0lOUFVUX01VWF9BTkMxX0FEQ19TRUxfUyAyCisjZGVmaW5lIFRJTVBBTklfQ0RDX0FOQ19JTlBVVF9NVVhfQU5DMV9BRENfU0VMX00gMHhDCisjZGVmaW5lIFRJTVBBTklfQ0RDX0FOQ19JTlBVVF9NVVhfQU5DMV9BRENfU0VMX0FfQ0RDX1RYMkRPUiAweDMKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQ0RDX0FOQ19JTlBVVF9NVVhfQU5DMV9BRENfU0VMX0FfQ0RDX1RYMkRPTCAweDIKKyNkZWZpbmUgVElNUEFOSV9DRENfQU5DX0lOUFVUX01VWF9BTkMxX0FEQ19TRUxfQV9DRENfVFgxRE9SIDB4MQorI2RlZmluZSBUSU1QQU5JX0NEQ19BTkNfSU5QVVRfTVVYX0FOQzFfQURDX1NFTF9BX0NEQ19UWDFET0wgMHgwCisjZGVmaW5lIFRJTVBBTklfQ0RDX0FOQ19JTlBVVF9NVVhfQU5DMV9ETUlDX1NFTF9TIDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQ0RDX0FOQ19JTlBVVF9NVVhfQU5DMV9ETUlDX1NFTF9NIDB4MworI2RlZmluZSBUSU1QQU5JX0NEQ19BTkNfSU5QVVRfTVVYX0FOQzFfRE1JQ19TRUxfTUlDMl9ESU5fUiAweDMKKyNkZWZpbmUgVElNUEFOSV9DRENfQU5DX0lOUFVUX01VWF9BTkMxX0RNSUNfU0VMX01JQzJfRElOX0wgMHgyCisjZGVmaW5lIFRJTVBBTklfQ0RDX0FOQ19JTlBVVF9NVVhfQU5DMV9ETUlDX1NFTF9NSUMxX0RJTl9SIDB4MQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9DRENfQU5DX0lOUFVUX01VWF9BTkMxX0RNSUNfU0VMX01JQzFfRElOX0wgMHgwCisjZGVmaW5lIFRJTVBBTklfQV9DRENfQU5DX1JYX0NMS19OU19TRUwgKDB4OUIpCisjZGVmaW5lIFRJTVBBTklfQ0RDX0FOQ19SWF9DTEtfTlNfU0VMX1JXQyAiUlciCisjZGVmaW5lIFRJTVBBTklfQ0RDX0FOQ19SWF9DTEtfTlNfU0VMX1BPUiAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX0NEQ19BTkNfUlhfQ0xLX05TX1NFTF9TIDAKKyNkZWZpbmUgVElNUEFOSV9DRENfQU5DX1JYX0NMS19OU19TRUxfTSAweDEKKyNkZWZpbmUgVElNUEFOSV9DRENfQU5DX1JYX0NMS19OU19TRUxfQU5DX1JYX0NMS19OU19TRUxfUyAwCisjZGVmaW5lIFRJTVBBTklfQ0RDX0FOQ19SWF9DTEtfTlNfU0VMX0FOQ19SWF9DTEtfTlNfU0VMX00gMHgxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX0FfQ0RDX0FOQ19GQl9UVU5FX1NFTCAoMHg5QykKKyNkZWZpbmUgVElNUEFOSV9DRENfQU5DX0ZCX1RVTkVfU0VMX1JXQyAiUlciCisjZGVmaW5lIFRJTVBBTklfQ0RDX0FOQ19GQl9UVU5FX1NFTF9QT1IgMAorI2RlZmluZSBUSU1QQU5JX0NEQ19BTkNfRkJfVFVORV9TRUxfUyAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX0NEQ19BTkNfRkJfVFVORV9TRUxfTSAweDMKKyNkZWZpbmUgVElNUEFOSV9DRENfQU5DX0ZCX1RVTkVfU0VMX0FOQzJfRkJfQURDX1NFTF9TIDEKKyNkZWZpbmUgVElNUEFOSV9DRENfQU5DX0ZCX1RVTkVfU0VMX0FOQzJfRkJfQURDX1NFTF9NIDB4MgorI2RlZmluZSBUSU1QQU5JX0NEQ19BTkNfRkJfVFVORV9TRUxfQU5DMl9GQl9BRENfU0VMX0ZCX1RVTkVfRU4gMHgxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX0NEQ19BTkNfRkJfVFVORV9TRUxfQU5DMl9GQl9BRENfU0VMX0ZCX1RVTkVfRElTIDB4MAorI2RlZmluZSBUSU1QQU5JX0NEQ19BTkNfRkJfVFVORV9TRUxfQU5DMV9GQl9BRENfU0VMX1MgMAorI2RlZmluZSBUSU1QQU5JX0NEQ19BTkNfRkJfVFVORV9TRUxfQU5DMV9GQl9BRENfU0VMX00gMHgxCisjZGVmaW5lIFRJTVBBTklfQ0RDX0FOQ19GQl9UVU5FX1NFTF9BTkMxX0ZCX0FEQ19TRUxfRkJfVFVORV9FTiAweDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQ0RDX0FOQ19GQl9UVU5FX1NFTF9BTkMxX0ZCX0FEQ19TRUxfRkJfVFVORV9ESVMgMHgwCisjZGVmaW5lIFRJTVBBTklfQV9DTEtfRElWX1NZTkNfQ1RMICgweDlFKQorI2RlZmluZSBUSU1QQU5JX0NMS19ESVZfU1lOQ19DVExfUldDICJSVyIKKyNkZWZpbmUgVElNUEFOSV9DTEtfRElWX1NZTkNfQ1RMX1BPUiAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX0NMS19ESVZfU1lOQ19DVExfUyAwCisjZGVmaW5lIFRJTVBBTklfQ0xLX0RJVl9TWU5DX0NUTF9NIDB4MworI2RlZmluZSBUSU1QQU5JX0NMS19ESVZfU1lOQ19DVExfR0xCTF9ESVZfU1lOQ19TIDEKKyNkZWZpbmUgVElNUEFOSV9DTEtfRElWX1NZTkNfQ1RMX0dMQkxfRElWX1NZTkNfTSAweDIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQ0xLX0RJVl9TWU5DX0NUTF9UWF9ESVZfU1lOQ19TIDAKKyNkZWZpbmUgVElNUEFOSV9DTEtfRElWX1NZTkNfQ1RMX1RYX0RJVl9TWU5DX00gMHgxCisjZGVmaW5lIFRJTVBBTklfQV9DRENfQURDX0NMS19FTiAoMHg5RikKKyNkZWZpbmUgVElNUEFOSV9DRENfQURDX0NMS19FTl9SV0MgIlJXIgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9DRENfQURDX0NMS19FTl9QT1IgMAorI2RlZmluZSBUSU1QQU5JX0NEQ19BRENfQ0xLX0VOX1MgMAorI2RlZmluZSBUSU1QQU5JX0NEQ19BRENfQ0xLX0VOX00gMHhGCisjZGVmaW5lIFRJTVBBTklfQ0RDX0FEQ19DTEtfRU5fQV9UWDJfUl9FTl9TIDMKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQ0RDX0FEQ19DTEtfRU5fQV9UWDJfUl9FTl9NIDB4OAorI2RlZmluZSBUSU1QQU5JX0NEQ19BRENfQ0xLX0VOX0FfVFgyX0xfRU5fUyAyCisjZGVmaW5lIFRJTVBBTklfQ0RDX0FEQ19DTEtfRU5fQV9UWDJfTF9FTl9NIDB4NAorI2RlZmluZSBUSU1QQU5JX0NEQ19BRENfQ0xLX0VOX0FfVFgxX1JfRU5fUyAxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX0NEQ19BRENfQ0xLX0VOX0FfVFgxX1JfRU5fTSAweDIKKyNkZWZpbmUgVElNUEFOSV9DRENfQURDX0NMS19FTl9BX1RYMV9MX0VOX1MgMAorI2RlZmluZSBUSU1QQU5JX0NEQ19BRENfQ0xLX0VOX0FfVFgxX0xfRU5fTSAweDEKKyNkZWZpbmUgVElNUEFOSV9BX0NEQ19TVF9NSVhJTkcgKDB4QTApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX0NEQ19TVF9NSVhJTkdfUldDICJSVyIKKyNkZWZpbmUgVElNUEFOSV9DRENfU1RfTUlYSU5HX1BPUiAwCisjZGVmaW5lIFRJTVBBTklfQ0RDX1NUX01JWElOR19TIDAKKyNkZWZpbmUgVElNUEFOSV9DRENfU1RfTUlYSU5HX00gMHhGCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX0NEQ19TVF9NSVhJTkdfVFgyX1JfUyAzCisjZGVmaW5lIFRJTVBBTklfQ0RDX1NUX01JWElOR19UWDJfUl9NIDB4OAorI2RlZmluZSBUSU1QQU5JX0NEQ19TVF9NSVhJTkdfVFgyX0xfUyAyCisjZGVmaW5lIFRJTVBBTklfQ0RDX1NUX01JWElOR19UWDJfTF9NIDB4NAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9DRENfU1RfTUlYSU5HX1RYMV9SX1MgMQorI2RlZmluZSBUSU1QQU5JX0NEQ19TVF9NSVhJTkdfVFgxX1JfTSAweDIKKyNkZWZpbmUgVElNUEFOSV9DRENfU1RfTUlYSU5HX1RYMV9MX1MgMAorI2RlZmluZSBUSU1QQU5JX0NEQ19TVF9NSVhJTkdfVFgxX0xfTSAweDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQV9DRENfUlgyX0NUTCAoMHhBMSkKKyNkZWZpbmUgVElNUEFOSV9DRENfUlgyX0NUTF9SV0MgIlJXIgorI2RlZmluZSBUSU1QQU5JX0NEQ19SWDJfQ1RMX1BPUiAweGMKKyNkZWZpbmUgVElNUEFOSV9DRENfUlgyX0NUTF9TIDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQ0RDX1JYMl9DVExfTSAweDNGCisjZGVmaW5lIFRJTVBBTklfQ0RDX1JYMl9DVExfU0lERVRPTkVfRU4yX1JfUyA1CisjZGVmaW5lIFRJTVBBTklfQ0RDX1JYMl9DVExfU0lERVRPTkVfRU4yX1JfTSAweDIwCisjZGVmaW5lIFRJTVBBTklfQ0RDX1JYMl9DVExfU0lERVRPTkVfRU4yX0xfUyA0CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX0NEQ19SWDJfQ1RMX1NJREVUT05FX0VOMl9MX00gMHgxMAorI2RlZmluZSBUSU1QQU5JX0NEQ19SWDJfQ1RMX1JYMl9SQVRFX1MgMgorI2RlZmluZSBUSU1QQU5JX0NEQ19SWDJfQ1RMX1JYMl9SQVRFX00gMHhDCisjZGVmaW5lIFRJTVBBTklfQ0RDX1JYMl9DVExfUlgyX1JBVEVfT1NSXzI1NiAweDMKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQ0RDX1JYMl9DVExfUlgyX1JBVEVfT1NSXzEyOCAweDEKKyNkZWZpbmUgVElNUEFOSV9DRENfUlgyX0NUTF9SWDJfUkFURV9PU1JfNjQgMHgwCisjZGVmaW5lIFRJTVBBTklfQ0RDX1JYMl9DVExfUlgyX0kyU19SQVRFX1MgMQorI2RlZmluZSBUSU1QQU5JX0NEQ19SWDJfQ1RMX1JYMl9JMlNfUkFURV9NIDB4MgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9DRENfUlgyX0NUTF9SWDJfSTJTX1JBVEVfQlJfMzIgMHgxCisjZGVmaW5lIFRJTVBBTklfQ0RDX1JYMl9DVExfUlgyX0kyU19SQVRFX0JSXzY0IDB4MAorI2RlZmluZSBUSU1QQU5JX0NEQ19SWDJfQ1RMX1JYMl9JMlNfTU9ERV9TIDAKKyNkZWZpbmUgVElNUEFOSV9DRENfUlgyX0NUTF9SWDJfSTJTX01PREVfTSAweDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQ0RDX1JYMl9DVExfUlgyX0kyU19NT0RFX01BU1RFUiAweDEKKyNkZWZpbmUgVElNUEFOSV9DRENfUlgyX0NUTF9SWDJfSTJTX01PREVfU0xBVkUgMHgwCisjZGVmaW5lIFRJTVBBTklfQV9DRENfQVJCX0NMS19FTiAoMHhBMikKKyNkZWZpbmUgVElNUEFOSV9DRENfQVJCX0NMS19FTl9SV0MgIlJXIgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9DRENfQVJCX0NMS19FTl9QT1IgMAorI2RlZmluZSBUSU1QQU5JX0NEQ19BUkJfQ0xLX0VOX1MgMAorI2RlZmluZSBUSU1QQU5JX0NEQ19BUkJfQ0xLX0VOX00gMHgxCisjZGVmaW5lIFRJTVBBTklfQ0RDX0FSQl9DTEtfRU5fQVJCX0NMS19FTl9TIDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQ0RDX0FSQl9DTEtfRU5fQVJCX0NMS19FTl9NIDB4MQorI2RlZmluZSBUSU1QQU5JX0FfQ0RDX0kyU19DVEwyICgweEEzKQorI2RlZmluZSBUSU1QQU5JX0NEQ19JMlNfQ1RMMl9SV0MgIlJXIgorI2RlZmluZSBUSU1QQU5JX0NEQ19JMlNfQ1RMMl9QT1IgMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9DRENfSTJTX0NUTDJfUyAwCisjZGVmaW5lIFRJTVBBTklfQ0RDX0kyU19DVEwyX00gMHgzRgorI2RlZmluZSBUSU1QQU5JX0NEQ19JMlNfQ1RMMl9UWF9JMlNfQ0xLX1NFTF9TIDMKKyNkZWZpbmUgVElNUEFOSV9DRENfSTJTX0NUTDJfVFhfSTJTX0NMS19TRUxfTSAweDM4CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX0NEQ19JMlNfQ1RMMl9UWF9JMlNfQ0xLX1NFTF9DTEtfRE1JQyAweDQKKyNkZWZpbmUgVElNUEFOSV9DRENfSTJTX0NUTDJfVFhfSTJTX0NMS19TRUxfQ0xLX1RYMl9SIDB4MworI2RlZmluZSBUSU1QQU5JX0NEQ19JMlNfQ1RMMl9UWF9JMlNfQ0xLX1NFTF9DTEtfVFgyX0wgMHgyCisjZGVmaW5lIFRJTVBBTklfQ0RDX0kyU19DVEwyX1RYX0kyU19DTEtfU0VMX0NMS19UWDFfUiAweDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQ0RDX0kyU19DVEwyX1RYX0kyU19DTEtfU0VMX0NMS19UWDFfTCAweDAKKyNkZWZpbmUgVElNUEFOSV9DRENfSTJTX0NUTDJfUlgyX0kyU0NMS19FTl9TIDIKKyNkZWZpbmUgVElNUEFOSV9DRENfSTJTX0NUTDJfUlgyX0kyU0NMS19FTl9NIDB4NAorI2RlZmluZSBUSU1QQU5JX0NEQ19JMlNfQ1RMMl9SWDFfSTJTQ0xLX0VOX1MgMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9DRENfSTJTX0NUTDJfUlgxX0kyU0NMS19FTl9NIDB4MgorI2RlZmluZSBUSU1QQU5JX0NEQ19JMlNfQ1RMMl9UWF9JMlNDTEtfRU5fUyAwCisjZGVmaW5lIFRJTVBBTklfQ0RDX0kyU19DVEwyX1RYX0kyU0NMS19FTl9NIDB4MQorI2RlZmluZSBUSU1QQU5JX0FfQ0RDX1JYMkxHICgweEE0KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9DRENfUlgyTEdfUldDICJSVyIKKyNkZWZpbmUgVElNUEFOSV9DRENfUlgyTEdfUE9SIDB4YWMKKyNkZWZpbmUgVElNUEFOSV9DRENfUlgyTEdfUyAwCisjZGVmaW5lIFRJTVBBTklfQ0RDX1JYMkxHX00gMHhGRgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9DRENfUlgyTEdfR0FJTl9TIDAKKyNkZWZpbmUgVElNUEFOSV9DRENfUlgyTEdfR0FJTl9NIDB4RkYKKyNkZWZpbmUgVElNUEFOSV9BX0NEQ19SWDJSRyAoMHhBNSkKKyNkZWZpbmUgVElNUEFOSV9DRENfUlgyUkdfUldDICJSVyIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQ0RDX1JYMlJHX1BPUiAweGFjCisjZGVmaW5lIFRJTVBBTklfQ0RDX1JYMlJHX1MgMAorI2RlZmluZSBUSU1QQU5JX0NEQ19SWDJSR19NIDB4RkYKKyNkZWZpbmUgVElNUEFOSV9DRENfUlgyUkdfR0FJTl9TIDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQ0RDX1JYMlJHX0dBSU5fTSAweEZGCisjZGVmaW5lIFRJTVBBTklfQV9DRENfVFgyTEcgKDB4QTYpCisjZGVmaW5lIFRJTVBBTklfQ0RDX1RYMkxHX1JXQyAiUlciCisjZGVmaW5lIFRJTVBBTklfQ0RDX1RYMkxHX1BPUiAweGFjCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX0NEQ19UWDJMR19TIDAKKyNkZWZpbmUgVElNUEFOSV9DRENfVFgyTEdfTSAweEZGCisjZGVmaW5lIFRJTVBBTklfQ0RDX1RYMkxHX0dBSU5fUyAwCisjZGVmaW5lIFRJTVBBTklfQ0RDX1RYMkxHX0dBSU5fTSAweEZGCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX0FfQ0RDX1RYMlJHICgweEE3KQorI2RlZmluZSBUSU1QQU5JX0NEQ19UWDJSR19SV0MgIlJXIgorI2RlZmluZSBUSU1QQU5JX0NEQ19UWDJSR19QT1IgMHhhYworI2RlZmluZSBUSU1QQU5JX0NEQ19UWDJSR19TIDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQ0RDX1RYMlJHX00gMHhGRgorI2RlZmluZSBUSU1QQU5JX0NEQ19UWDJSR19HQUlOX1MgMAorI2RlZmluZSBUSU1QQU5JX0NEQ19UWDJSR19HQUlOX00gMHhGRgorI2RlZmluZSBUSU1QQU5JX0FfQ0RDX0RNSUNfTVVYICgweEE4KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9DRENfRE1JQ19NVVhfUldDICJSVyIKKyNkZWZpbmUgVElNUEFOSV9DRENfRE1JQ19NVVhfUE9SIDAKKyNkZWZpbmUgVElNUEFOSV9DRENfRE1JQ19NVVhfUyAwCisjZGVmaW5lIFRJTVBBTklfQ0RDX0RNSUNfTVVYX00gMHhGRgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9DRENfRE1JQ19NVVhfVFgyX0RNSUNfTVVYX1NFTF9SX1MgNgorI2RlZmluZSBUSU1QQU5JX0NEQ19ETUlDX01VWF9UWDJfRE1JQ19NVVhfU0VMX1JfTSAweEMwCisjZGVmaW5lIFRJTVBBTklfQ0RDX0RNSUNfTVVYX1RYMl9ETUlDX01VWF9TRUxfUl9NSUMyX0RJTl9SIDB4MworI2RlZmluZSBUSU1QQU5JX0NEQ19ETUlDX01VWF9UWDJfRE1JQ19NVVhfU0VMX1JfTUlDMl9ESU5fTCAweDIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQ0RDX0RNSUNfTVVYX1RYMl9ETUlDX01VWF9TRUxfUl9NSUMxX0RJTl9SIDB4MQorI2RlZmluZSBUSU1QQU5JX0NEQ19ETUlDX01VWF9UWDJfRE1JQ19NVVhfU0VMX1JfTUlDMV9ESU5fTCAweDAKKyNkZWZpbmUgVElNUEFOSV9DRENfRE1JQ19NVVhfVFgyX0RNSUNfTVVYX1NFTF9MX1MgNAorI2RlZmluZSBUSU1QQU5JX0NEQ19ETUlDX01VWF9UWDJfRE1JQ19NVVhfU0VMX0xfTSAweDMwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX0NEQ19ETUlDX01VWF9UWDJfRE1JQ19NVVhfU0VMX0xfTUlDMl9ESU5fUiAweDMKKyNkZWZpbmUgVElNUEFOSV9DRENfRE1JQ19NVVhfVFgyX0RNSUNfTVVYX1NFTF9MX01JQzJfRElOX0wgMHgyCisjZGVmaW5lIFRJTVBBTklfQ0RDX0RNSUNfTVVYX1RYMl9ETUlDX01VWF9TRUxfTF9NSUMxX0RJTl9SIDB4MQorI2RlZmluZSBUSU1QQU5JX0NEQ19ETUlDX01VWF9UWDJfRE1JQ19NVVhfU0VMX0xfTUlDMV9ESU5fTCAweDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQ0RDX0RNSUNfTVVYX1RYMV9ETUlDX01VWF9TRUxfUl9TIDIKKyNkZWZpbmUgVElNUEFOSV9DRENfRE1JQ19NVVhfVFgxX0RNSUNfTVVYX1NFTF9SX00gMHhDCisjZGVmaW5lIFRJTVBBTklfQ0RDX0RNSUNfTVVYX1RYMV9ETUlDX01VWF9TRUxfUl9NSUMyX0RJTl9SIDB4MworI2RlZmluZSBUSU1QQU5JX0NEQ19ETUlDX01VWF9UWDFfRE1JQ19NVVhfU0VMX1JfTUlDMl9ESU5fTCAweDIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQ0RDX0RNSUNfTVVYX1RYMV9ETUlDX01VWF9TRUxfUl9NSUMxX0RJTl9SIDB4MQorI2RlZmluZSBUSU1QQU5JX0NEQ19ETUlDX01VWF9UWDFfRE1JQ19NVVhfU0VMX1JfTUlDMV9ESU5fTCAweDAKKyNkZWZpbmUgVElNUEFOSV9DRENfRE1JQ19NVVhfVFgxX0RNSUNfTVVYX1NFTF9MX1MgMAorI2RlZmluZSBUSU1QQU5JX0NEQ19ETUlDX01VWF9UWDFfRE1JQ19NVVhfU0VMX0xfTSAweDMKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQ0RDX0RNSUNfTVVYX1RYMV9ETUlDX01VWF9TRUxfTF9NSUMyX0RJTl9SIDB4MworI2RlZmluZSBUSU1QQU5JX0NEQ19ETUlDX01VWF9UWDFfRE1JQ19NVVhfU0VMX0xfTUlDMl9ESU5fTCAweDIKKyNkZWZpbmUgVElNUEFOSV9DRENfRE1JQ19NVVhfVFgxX0RNSUNfTVVYX1NFTF9MX01JQzFfRElOX1IgMHgxCisjZGVmaW5lIFRJTVBBTklfQ0RDX0RNSUNfTVVYX1RYMV9ETUlDX01VWF9TRUxfTF9NSUMxX0RJTl9MIDB4MAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9BX0NEQ19BUkJfQ0xLX0NUTCAoMHhBOSkKKyNkZWZpbmUgVElNUEFOSV9DRENfQVJCX0NMS19DVExfUldDICJSVyIKKyNkZWZpbmUgVElNUEFOSV9DRENfQVJCX0NMS19DVExfUE9SIDAKKyNkZWZpbmUgVElNUEFOSV9DRENfQVJCX0NMS19DVExfUyAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX0NEQ19BUkJfQ0xLX0NUTF9NIDB4MworI2RlZmluZSBUSU1QQU5JX0NEQ19BUkJfQ0xLX0NUTF9BUkJfQ0xLX1NFTF9TIDAKKyNkZWZpbmUgVElNUEFOSV9DRENfQVJCX0NMS19DVExfQVJCX0NMS19TRUxfTSAweDMKKyNkZWZpbmUgVElNUEFOSV9DRENfQVJCX0NMS19DVExfQVJCX0NMS19TRUxfVFhfTUNMSyAweDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQ0RDX0FSQl9DTEtfQ1RMX0FSQl9DTEtfU0VMX1JYX01DTEsxIDB4MQorI2RlZmluZSBUSU1QQU5JX0NEQ19BUkJfQ0xLX0NUTF9BUkJfQ0xLX1NFTF9SWF9NQ0xLMiAweDIKKyNkZWZpbmUgVElNUEFOSV9DRENfQVJCX0NMS19DVExfQVJCX0NMS19TRUxfVENYTyAweDMKKyNkZWZpbmUgVElNUEFOSV9BX0NEQ19HQ1RMMiAoMHhBQSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQ0RDX0dDVEwyX1JXQyAiUlciCisjZGVmaW5lIFRJTVBBTklfQ0RDX0dDVEwyX1BPUiAweDMzCisjZGVmaW5lIFRJTVBBTklfQ0RDX0dDVEwyX1MgMAorI2RlZmluZSBUSU1QQU5JX0NEQ19HQ1RMMl9NIDB4RkYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQ0RDX0dDVEwyX1RYMl9QR0FfVVBEQVRFX1JfUyA3CisjZGVmaW5lIFRJTVBBTklfQ0RDX0dDVEwyX1RYMl9QR0FfVVBEQVRFX1JfTSAweDgwCisjZGVmaW5lIFRJTVBBTklfQ0RDX0dDVEwyX1RYMl9QR0FfVVBEQVRFX0xfUyA2CisjZGVmaW5lIFRJTVBBTklfQ0RDX0dDVEwyX1RYMl9QR0FfVVBEQVRFX0xfTSAweDQwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX0NEQ19HQ1RMMl9UWDJfUEdBX01VVEVfRU5fUl9TIDUKKyNkZWZpbmUgVElNUEFOSV9DRENfR0NUTDJfVFgyX1BHQV9NVVRFX0VOX1JfTSAweDIwCisjZGVmaW5lIFRJTVBBTklfQ0RDX0dDVEwyX1RYMl9QR0FfTVVURV9FTl9MX1MgNAorI2RlZmluZSBUSU1QQU5JX0NEQ19HQ1RMMl9UWDJfUEdBX01VVEVfRU5fTF9NIDB4MTAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQ0RDX0dDVEwyX1JYMl9QR0FfVVBEQVRFX1JfUyAzCisjZGVmaW5lIFRJTVBBTklfQ0RDX0dDVEwyX1JYMl9QR0FfVVBEQVRFX1JfTSAweDgKKyNkZWZpbmUgVElNUEFOSV9DRENfR0NUTDJfUlgyX1BHQV9VUERBVEVfTF9TIDIKKyNkZWZpbmUgVElNUEFOSV9DRENfR0NUTDJfUlgyX1BHQV9VUERBVEVfTF9NIDB4NAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9DRENfR0NUTDJfUlgyX1BHQV9NVVRFX0VOX1JfUyAxCisjZGVmaW5lIFRJTVBBTklfQ0RDX0dDVEwyX1JYMl9QR0FfTVVURV9FTl9SX00gMHgyCisjZGVmaW5lIFRJTVBBTklfQ0RDX0dDVEwyX1JYMl9QR0FfTVVURV9FTl9MX1MgMAorI2RlZmluZSBUSU1QQU5JX0NEQ19HQ1RMMl9SWDJfUEdBX01VVEVfRU5fTF9NIDB4MQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9BX0NEQ19CWVBBU1NfQ1RMMiAoMHhBQikKKyNkZWZpbmUgVElNUEFOSV9DRENfQllQQVNTX0NUTDJfUldDICJSVyIKKyNkZWZpbmUgVElNUEFOSV9DRENfQllQQVNTX0NUTDJfUE9SIDB4MkQKKyNkZWZpbmUgVElNUEFOSV9DRENfQllQQVNTX0NUTDJfUyAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX0NEQ19CWVBBU1NfQ1RMMl9NIDB4M0YKKyNkZWZpbmUgVElNUEFOSV9DRENfQllQQVNTX0NUTDJfVFgxX0RNSUNfR0FJTl9CUF9SX1MgNQorI2RlZmluZSBUSU1QQU5JX0NEQ19CWVBBU1NfQ1RMMl9UWDFfRE1JQ19HQUlOX0JQX1JfTSAweDIwCisjZGVmaW5lIFRJTVBBTklfQ0RDX0JZUEFTU19DVEwyX1RYMV9BRENfR0FJTl9CUF9SX1MgNAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9DRENfQllQQVNTX0NUTDJfVFgxX0FEQ19HQUlOX0JQX1JfTSAweDEwCisjZGVmaW5lIFRJTVBBTklfQ0RDX0JZUEFTU19DVEwyX1RYMV9IUEZfQlBfUl9TIDMKKyNkZWZpbmUgVElNUEFOSV9DRENfQllQQVNTX0NUTDJfVFgxX0hQRl9CUF9SX00gMHg4CisjZGVmaW5lIFRJTVBBTklfQ0RDX0JZUEFTU19DVEwyX1RYMV9ETUlDX0dBSU5fQlBfTF9TIDIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQ0RDX0JZUEFTU19DVEwyX1RYMV9ETUlDX0dBSU5fQlBfTF9NIDB4NAorI2RlZmluZSBUSU1QQU5JX0NEQ19CWVBBU1NfQ1RMMl9UWDFfQURDX0dBSU5fQlBfTF9TIDEKKyNkZWZpbmUgVElNUEFOSV9DRENfQllQQVNTX0NUTDJfVFgxX0FEQ19HQUlOX0JQX0xfTSAweDIKKyNkZWZpbmUgVElNUEFOSV9DRENfQllQQVNTX0NUTDJfVFgxX0hQRl9CUF9MX1MgMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9DRENfQllQQVNTX0NUTDJfVFgxX0hQRl9CUF9MX00gMHgxCisjZGVmaW5lIFRJTVBBTklfQV9DRENfQllQQVNTX0NUTDMgKDB4QUMpCisjZGVmaW5lIFRJTVBBTklfQ0RDX0JZUEFTU19DVEwzX1JXQyAiUlciCisjZGVmaW5lIFRJTVBBTklfQ0RDX0JZUEFTU19DVEwzX1BPUiAweDJECisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX0NEQ19CWVBBU1NfQ1RMM19TIDAKKyNkZWZpbmUgVElNUEFOSV9DRENfQllQQVNTX0NUTDNfTSAweDNGCisjZGVmaW5lIFRJTVBBTklfQ0RDX0JZUEFTU19DVEwzX1RYMl9ETUlDX0dBSU5fQlBfUl9TIDUKKyNkZWZpbmUgVElNUEFOSV9DRENfQllQQVNTX0NUTDNfVFgyX0RNSUNfR0FJTl9CUF9SX00gMHgyMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9DRENfQllQQVNTX0NUTDNfVFgyX0FEQ19HQUlOX0JQX1JfUyA0CisjZGVmaW5lIFRJTVBBTklfQ0RDX0JZUEFTU19DVEwzX1RYMl9BRENfR0FJTl9CUF9SX00gMHgxMAorI2RlZmluZSBUSU1QQU5JX0NEQ19CWVBBU1NfQ1RMM19UWDJfSFBGX0JQX1JfUyAzCisjZGVmaW5lIFRJTVBBTklfQ0RDX0JZUEFTU19DVEwzX1RYMl9IUEZfQlBfUl9NIDB4OAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9DRENfQllQQVNTX0NUTDNfVFgyX0RNSUNfR0FJTl9CUF9MX1MgMgorI2RlZmluZSBUSU1QQU5JX0NEQ19CWVBBU1NfQ1RMM19UWDJfRE1JQ19HQUlOX0JQX0xfTSAweDQKKyNkZWZpbmUgVElNUEFOSV9DRENfQllQQVNTX0NUTDNfVFgyX0FEQ19HQUlOX0JQX0xfUyAxCisjZGVmaW5lIFRJTVBBTklfQ0RDX0JZUEFTU19DVEwzX1RYMl9BRENfR0FJTl9CUF9MX00gMHgyCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX0NEQ19CWVBBU1NfQ1RMM19UWDJfSFBGX0JQX0xfUyAwCisjZGVmaW5lIFRJTVBBTklfQ0RDX0JZUEFTU19DVEwzX1RYMl9IUEZfQlBfTF9NIDB4MQorI2RlZmluZSBUSU1QQU5JX0FfQ0RDX0JZUEFTU19DVEw0ICgweEFEKQorI2RlZmluZSBUSU1QQU5JX0NEQ19CWVBBU1NfQ1RMNF9SV0MgIlJXIgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9DRENfQllQQVNTX0NUTDRfUE9SIDB4MgorI2RlZmluZSBUSU1QQU5JX0NEQ19CWVBBU1NfQ1RMNF9TIDAKKyNkZWZpbmUgVElNUEFOSV9DRENfQllQQVNTX0NUTDRfTSAweEYKKyNkZWZpbmUgVElNUEFOSV9DRENfQllQQVNTX0NUTDRfRElUSEVSX0JQX1MgMworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9DRENfQllQQVNTX0NUTDRfRElUSEVSX0JQX00gMHg4CisjZGVmaW5lIFRJTVBBTklfQ0RDX0JZUEFTU19DVEw0X0RJVEhFUl9TSEFQRV9TRUxfUyAyCisjZGVmaW5lIFRJTVBBTklfQ0RDX0JZUEFTU19DVEw0X0RJVEhFUl9TSEFQRV9TRUxfTSAweDQKKyNkZWZpbmUgVElNUEFOSV9DRENfQllQQVNTX0NUTDRfRElUSEVSX0RMWV9TRUxfUyAxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX0NEQ19CWVBBU1NfQ1RMNF9ESVRIRVJfRExZX1NFTF9NIDB4MgorI2RlZmluZSBUSU1QQU5JX0NEQ19CWVBBU1NfQ1RMNF9SWDJfSFBGX0JQX1MgMAorI2RlZmluZSBUSU1QQU5JX0NEQ19CWVBBU1NfQ1RMNF9SWDJfSFBGX0JQX00gMHgxCisjZGVmaW5lIFRJTVBBTklfQV9DRENfUlgyTF9EQ09GRlNFVCAoMHhBRSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQ0RDX1JYMkxfRENPRkZTRVRfUldDICJSVyIKKyNkZWZpbmUgVElNUEFOSV9DRENfUlgyTF9EQ09GRlNFVF9QT1IgMAorI2RlZmluZSBUSU1QQU5JX0NEQ19SWDJMX0RDT0ZGU0VUX1MgMAorI2RlZmluZSBUSU1QQU5JX0NEQ19SWDJMX0RDT0ZGU0VUX00gMHhGRgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9DRENfUlgyTF9EQ09GRlNFVF9PRkZTRVRfUyAwCisjZGVmaW5lIFRJTVBBTklfQ0RDX1JYMkxfRENPRkZTRVRfT0ZGU0VUX00gMHhGRgorI2RlZmluZSBUSU1QQU5JX0FfQ0RDX1JYMlJfRENPRkZTRVQgKDB4QUYpCisjZGVmaW5lIFRJTVBBTklfQ0RDX1JYMlJfRENPRkZTRVRfUldDICJSVyIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQ0RDX1JYMlJfRENPRkZTRVRfUE9SIDAKKyNkZWZpbmUgVElNUEFOSV9DRENfUlgyUl9EQ09GRlNFVF9TIDAKKyNkZWZpbmUgVElNUEFOSV9DRENfUlgyUl9EQ09GRlNFVF9NIDB4RkYKKyNkZWZpbmUgVElNUEFOSV9DRENfUlgyUl9EQ09GRlNFVF9PRkZTRVRfUyAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX0NEQ19SWDJSX0RDT0ZGU0VUX09GRlNFVF9NIDB4RkYKKyNkZWZpbmUgVElNUEFOSV9BX0NEQ19SWF9NSVhfQ1RMICgweEIwKQorI2RlZmluZSBUSU1QQU5JX0NEQ19SWF9NSVhfQ1RMX1JXQyAiUlciCisjZGVmaW5lIFRJTVBBTklfQ0RDX1JYX01JWF9DVExfUE9SIDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQ0RDX1JYX01JWF9DVExfUyAwCisjZGVmaW5lIFRJTVBBTklfQ0RDX1JYX01JWF9DVExfTSAweDMKKyNkZWZpbmUgVElNUEFOSV9DRENfUlhfTUlYX0NUTF9SWDJUTzFfRU5fUyAxCisjZGVmaW5lIFRJTVBBTklfQ0RDX1JYX01JWF9DVExfUlgyVE8xX0VOX00gMHgyCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX0NEQ19SWF9NSVhfQ1RMX1JYMVRPMl9FTl9TIDAKKyNkZWZpbmUgVElNUEFOSV9DRENfUlhfTUlYX0NUTF9SWDFUTzJfRU5fTSAweDEKKyNkZWZpbmUgVElNUEFOSV9BX0NEQ19TUEFSRV9DVEwgKDB4QjEpCisjZGVmaW5lIFRJTVBBTklfQ0RDX1NQQVJFX0NUTF9SV0MgIlJXIgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9DRENfU1BBUkVfQ1RMX1BPUiAwCisjZGVmaW5lIFRJTVBBTklfQ0RDX1NQQVJFX0NUTF9TIDAKKyNkZWZpbmUgVElNUEFOSV9DRENfU1BBUkVfQ1RMX00gMHhGRgorI2RlZmluZSBUSU1QQU5JX0NEQ19TUEFSRV9DVExfQ0RDX1NQQVJFX1MgMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9DRENfU1BBUkVfQ1RMX0NEQ19TUEFSRV9NIDB4RkYKKyNkZWZpbmUgVElNUEFOSV9BX0NEQ19URVNUTU9ERTIgKDB4QjIpCisjZGVmaW5lIFRJTVBBTklfQ0RDX1RFU1RNT0RFMl9SV0MgIlJXIgorI2RlZmluZSBUSU1QQU5JX0NEQ19URVNUTU9ERTJfUE9SIDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQ0RDX1RFU1RNT0RFMl9TIDAKKyNkZWZpbmUgVElNUEFOSV9DRENfVEVTVE1PREUyX00gMHgxRgorI2RlZmluZSBUSU1QQU5JX0NEQ19URVNUTU9ERTJfUlgyX1RFU1RfRU5fUl9TIDQKKyNkZWZpbmUgVElNUEFOSV9DRENfVEVTVE1PREUyX1JYMl9URVNUX0VOX1JfTSAweDEwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX0NEQ19URVNUTU9ERTJfUlgyX1RFU1RfRU5fTF9TIDMKKyNkZWZpbmUgVElNUEFOSV9DRENfVEVTVE1PREUyX1JYMl9URVNUX0VOX0xfTSAweDgKKyNkZWZpbmUgVElNUEFOSV9DRENfVEVTVE1PREUyX1RYMl9URVNUX0VOX1JfUyAyCisjZGVmaW5lIFRJTVBBTklfQ0RDX1RFU1RNT0RFMl9UWDJfVEVTVF9FTl9SX00gMHg0CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX0NEQ19URVNUTU9ERTJfVFgyX1RFU1RfRU5fTF9TIDEKKyNkZWZpbmUgVElNUEFOSV9DRENfVEVTVE1PREUyX1RYMl9URVNUX0VOX0xfTSAweDIKKyNkZWZpbmUgVElNUEFOSV9DRENfVEVTVE1PREUyX0FfTE9PUEJBQ0tfRU4yX1MgMAorI2RlZmluZSBUSU1QQU5JX0NEQ19URVNUTU9ERTJfQV9MT09QQkFDS19FTjJfTSAweDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQV9DRENfUERNX09FICgweEIzKQorI2RlZmluZSBUSU1QQU5JX0NEQ19QRE1fT0VfUldDICJSVyIKKyNkZWZpbmUgVElNUEFOSV9DRENfUERNX09FX1BPUiAwCisjZGVmaW5lIFRJTVBBTklfQ0RDX1BETV9PRV9TIDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQ0RDX1BETV9PRV9NIDB4M0YKKyNkZWZpbmUgVElNUEFOSV9DRENfUERNX09FX1BETV8yM18yMF9PRV9TIDUKKyNkZWZpbmUgVElNUEFOSV9DRENfUERNX09FX1BETV8yM18yMF9PRV9NIDB4MjAKKyNkZWZpbmUgVElNUEFOSV9DRENfUERNX09FX1BETV8xOV8xNl9PRV9TIDQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQ0RDX1BETV9PRV9QRE1fMTlfMTZfT0VfTSAweDEwCisjZGVmaW5lIFRJTVBBTklfQ0RDX1BETV9PRV9QRE1fMTVfMTJfT0VfUyAzCisjZGVmaW5lIFRJTVBBTklfQ0RDX1BETV9PRV9QRE1fMTVfMTJfT0VfTSAweDgKKyNkZWZpbmUgVElNUEFOSV9DRENfUERNX09FX1BETV8xMV84X09FX1MgMgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9DRENfUERNX09FX1BETV8xMV84X09FX00gMHg0CisjZGVmaW5lIFRJTVBBTklfQ0RDX1BETV9PRV9QRE1fN180X09FX1MgMQorI2RlZmluZSBUSU1QQU5JX0NEQ19QRE1fT0VfUERNXzdfNF9PRV9NIDB4MgorI2RlZmluZSBUSU1QQU5JX0NEQ19QRE1fT0VfUERNXzNfMF9PRV9TIDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQ0RDX1BETV9PRV9QRE1fM18wX09FX00gMHgxCisjZGVmaW5lIFRJTVBBTklfQV9DRENfVFgxUl9TVEcgKDB4QjQpCisjZGVmaW5lIFRJTVBBTklfQ0RDX1RYMVJfU1RHX1JXQyAiUlciCisjZGVmaW5lIFRJTVBBTklfQ0RDX1RYMVJfU1RHX1BPUiAweGFjCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX0NEQ19UWDFSX1NUR19TIDAKKyNkZWZpbmUgVElNUEFOSV9DRENfVFgxUl9TVEdfTSAweEZGCisjZGVmaW5lIFRJTVBBTklfQ0RDX1RYMVJfU1RHX0dBSU5fUyAwCisjZGVmaW5lIFRJTVBBTklfQ0RDX1RYMVJfU1RHX0dBSU5fTSAweEZGCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX0FfQ0RDX1RYMkxfU1RHICgweEI1KQorI2RlZmluZSBUSU1QQU5JX0NEQ19UWDJMX1NUR19SV0MgIlJXIgorI2RlZmluZSBUSU1QQU5JX0NEQ19UWDJMX1NUR19QT1IgMHhhYworI2RlZmluZSBUSU1QQU5JX0NEQ19UWDJMX1NUR19TIDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQ0RDX1RYMkxfU1RHX00gMHhGRgorI2RlZmluZSBUSU1QQU5JX0NEQ19UWDJMX1NUR19HQUlOX1MgMAorI2RlZmluZSBUSU1QQU5JX0NEQ19UWDJMX1NUR19HQUlOX00gMHhGRgorI2RlZmluZSBUSU1QQU5JX0FfQ0RDX1RYMlJfU1RHICgweEI2KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9DRENfVFgyUl9TVEdfUldDICJSVyIKKyNkZWZpbmUgVElNUEFOSV9DRENfVFgyUl9TVEdfUE9SIDB4YWMKKyNkZWZpbmUgVElNUEFOSV9DRENfVFgyUl9TVEdfUyAwCisjZGVmaW5lIFRJTVBBTklfQ0RDX1RYMlJfU1RHX00gMHhGRgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9DRENfVFgyUl9TVEdfR0FJTl9TIDAKKyNkZWZpbmUgVElNUEFOSV9DRENfVFgyUl9TVEdfR0FJTl9NIDB4RkYKKyNkZWZpbmUgVElNUEFOSV9BX0NEQ19BUkJfQllQQVNTX0NUTCAoMHhCNykKKyNkZWZpbmUgVElNUEFOSV9DRENfQVJCX0JZUEFTU19DVExfUldDICJSVyIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQ0RDX0FSQl9CWVBBU1NfQ1RMX1BPUiAwCisjZGVmaW5lIFRJTVBBTklfQ0RDX0FSQl9CWVBBU1NfQ1RMX1MgMAorI2RlZmluZSBUSU1QQU5JX0NEQ19BUkJfQllQQVNTX0NUTF9NIDB4MQorI2RlZmluZSBUSU1QQU5JX0NEQ19BUkJfQllQQVNTX0NUTF9BUkJfQllQQVNTX0VOX1MgMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9DRENfQVJCX0JZUEFTU19DVExfQVJCX0JZUEFTU19FTl9NIDB4MQorI2RlZmluZSBUSU1QQU5JX0NEQ19BUkJfQllQQVNTX0NUTF9BUkJfQllQQVNTX0VOX0JZUEFTUyAweDEKKyNkZWZpbmUgVElNUEFOSV9DRENfQVJCX0JZUEFTU19DVExfQVJCX0JZUEFTU19FTl9OT19CWVBBU1MgMHgwCisjZGVmaW5lIFRJTVBBTklfQV9DRENfQU5DMV9DVEwxICgweEMwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9DRENfQU5DMV9DVEwxX1JXQyAiUlciCisjZGVmaW5lIFRJTVBBTklfQ0RDX0FOQzFfQ1RMMV9QT1IgMAorI2RlZmluZSBUSU1QQU5JX0NEQ19BTkMxX0NUTDFfUyAwCisjZGVmaW5lIFRJTVBBTklfQ0RDX0FOQzFfQ1RMMV9NIDB4M0YKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQ0RDX0FOQzFfQ1RMMV9BTkMxX0ZGX09VVF9ESVNfUyA1CisjZGVmaW5lIFRJTVBBTklfQ0RDX0FOQzFfQ1RMMV9BTkMxX0ZGX09VVF9ESVNfTSAweDIwCisjZGVmaW5lIFRJTVBBTklfQ0RDX0FOQzFfQ1RMMV9BTkMxX0ZGX09VVF9ESVNfRkZfT1VUX0RJUyAweDEKKyNkZWZpbmUgVElNUEFOSV9DRENfQU5DMV9DVEwxX0FOQzFfRkZfT1VUX0RJU19GRl9PVVRfRU4gMHgwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX0NEQ19BTkMxX0NUTDFfQU5DMV9BRENfRE1JQ19TRUxfUyA0CisjZGVmaW5lIFRJTVBBTklfQ0RDX0FOQzFfQ1RMMV9BTkMxX0FEQ19ETUlDX1NFTF9NIDB4MTAKKyNkZWZpbmUgVElNUEFOSV9DRENfQU5DMV9DVEwxX0FOQzFfQURDX0RNSUNfU0VMX0RNSUMgMHgxCisjZGVmaW5lIFRJTVBBTklfQ0RDX0FOQzFfQ1RMMV9BTkMxX0FEQ19ETUlDX1NFTF9BREMgMHgwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX0NEQ19BTkMxX0NUTDFfQU5DMV9MUl9FTl9TIDMKKyNkZWZpbmUgVElNUEFOSV9DRENfQU5DMV9DVEwxX0FOQzFfTFJfRU5fTSAweDgKKyNkZWZpbmUgVElNUEFOSV9DRENfQU5DMV9DVEwxX0FOQzFfTFJfRU5fTFJfTUlYX0VOIDB4MQorI2RlZmluZSBUSU1QQU5JX0NEQ19BTkMxX0NUTDFfQU5DMV9MUl9FTl9MUl9NSVhfRElTIDB4MAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9DRENfQU5DMV9DVEwxX0FOQzFfRkJfRU5fUyAyCisjZGVmaW5lIFRJTVBBTklfQ0RDX0FOQzFfQ1RMMV9BTkMxX0ZCX0VOX00gMHg0CisjZGVmaW5lIFRJTVBBTklfQ0RDX0FOQzFfQ1RMMV9BTkMxX0ZCX0VOX0ZCX01JWF9FTiAweDEKKyNkZWZpbmUgVElNUEFOSV9DRENfQU5DMV9DVEwxX0FOQzFfRkJfRU5fRkJfTUlYX0RJUyAweDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQ0RDX0FOQzFfQ1RMMV9BTkMxX0VOX1MgMQorI2RlZmluZSBUSU1QQU5JX0NEQ19BTkMxX0NUTDFfQU5DMV9FTl9NIDB4MgorI2RlZmluZSBUSU1QQU5JX0NEQ19BTkMxX0NUTDFfQU5DMV9FTl9BTkNfRU4gMHgxCisjZGVmaW5lIFRJTVBBTklfQ0RDX0FOQzFfQ1RMMV9BTkMxX0VOX0FOQ19ESVMgMHgwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX0NEQ19BTkMxX0NUTDFfQU5DMV9TT0ZUX1JFU0VUX1MgMAorI2RlZmluZSBUSU1QQU5JX0NEQ19BTkMxX0NUTDFfQU5DMV9TT0ZUX1JFU0VUX00gMHgxCisjZGVmaW5lIFRJTVBBTklfQ0RDX0FOQzFfQ1RMMV9BTkMxX1NPRlRfUkVTRVRfQU5DX1JFU0VUIDB4MQorI2RlZmluZSBUSU1QQU5JX0NEQ19BTkMxX0NUTDFfQU5DMV9TT0ZUX1JFU0VUX0FOQ19BQ1RJVkUgMHgwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX0FfQ0RDX0FOQzFfQ1RMMiAoMHhDMSkKKyNkZWZpbmUgVElNUEFOSV9DRENfQU5DMV9DVEwyX1JXQyAiUlciCisjZGVmaW5lIFRJTVBBTklfQ0RDX0FOQzFfQ1RMMl9QT1IgMAorI2RlZmluZSBUSU1QQU5JX0NEQ19BTkMxX0NUTDJfUyAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX0NEQ19BTkMxX0NUTDJfTSAweDFGCisjZGVmaW5lIFRJTVBBTklfQ0RDX0FOQzFfQ1RMMl9BTkMxX0ZSRVFfU0VMX1MgMAorI2RlZmluZSBUSU1QQU5JX0NEQ19BTkMxX0NUTDJfQU5DMV9GUkVRX1NFTF9NIDB4MUYKKyNkZWZpbmUgVElNUEFOSV9BX0NEQ19BTkMxX0ZGX0ZCX1NISUZUICgweEMyKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9DRENfQU5DMV9GRl9GQl9TSElGVF9SV0MgIlJXIgorI2RlZmluZSBUSU1QQU5JX0NEQ19BTkMxX0ZGX0ZCX1NISUZUX1BPUiAwCisjZGVmaW5lIFRJTVBBTklfQ0RDX0FOQzFfRkZfRkJfU0hJRlRfUyAwCisjZGVmaW5lIFRJTVBBTklfQ0RDX0FOQzFfRkZfRkJfU0hJRlRfTSAweEZGCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX0NEQ19BTkMxX0ZGX0ZCX1NISUZUX0FOQzFfRkJfTFBGX1NISUZUX1MgNAorI2RlZmluZSBUSU1QQU5JX0NEQ19BTkMxX0ZGX0ZCX1NISUZUX0FOQzFfRkJfTFBGX1NISUZUX00gMHhGMAorI2RlZmluZSBUSU1QQU5JX0NEQ19BTkMxX0ZGX0ZCX1NISUZUX0FOQzFfRkZfTFBGX1NISUZUX1MgMAorI2RlZmluZSBUSU1QQU5JX0NEQ19BTkMxX0ZGX0ZCX1NISUZUX0FOQzFfRkZfTFBGX1NISUZUX00gMHhGCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX0FfQ0RDX0FOQzFfUlhfTlMgKDB4QzMpCisjZGVmaW5lIFRJTVBBTklfQ0RDX0FOQzFfUlhfTlNfUldDICJSVyIKKyNkZWZpbmUgVElNUEFOSV9DRENfQU5DMV9SWF9OU19QT1IgMHgxCisjZGVmaW5lIFRJTVBBTklfQ0RDX0FOQzFfUlhfTlNfUyAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX0NEQ19BTkMxX1JYX05TX00gMHg3CisjZGVmaW5lIFRJTVBBTklfQ0RDX0FOQzFfUlhfTlNfQU5DMV9ESVRIRVJfQlBfUyAyCisjZGVmaW5lIFRJTVBBTklfQ0RDX0FOQzFfUlhfTlNfQU5DMV9ESVRIRVJfQlBfTSAweDQKKyNkZWZpbmUgVElNUEFOSV9DRENfQU5DMV9SWF9OU19BTkMxX0RJVEhFUl9TSEFQRV9TRUxfUyAxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX0NEQ19BTkMxX1JYX05TX0FOQzFfRElUSEVSX1NIQVBFX1NFTF9NIDB4MgorI2RlZmluZSBUSU1QQU5JX0NEQ19BTkMxX1JYX05TX0FOQzFfRElUSEVSX0RMWV9TRUxfUyAwCisjZGVmaW5lIFRJTVBBTklfQ0RDX0FOQzFfUlhfTlNfQU5DMV9ESVRIRVJfRExZX1NFTF9NIDB4MQorI2RlZmluZSBUSU1QQU5JX0FfQ0RDX0FOQzFfU1BBUkUgKDB4QzQpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX0NEQ19BTkMxX1NQQVJFX1JXQyAiUlciCisjZGVmaW5lIFRJTVBBTklfQ0RDX0FOQzFfU1BBUkVfUE9SIDAKKyNkZWZpbmUgVElNUEFOSV9DRENfQU5DMV9TUEFSRV9TIDAKKyNkZWZpbmUgVElNUEFOSV9DRENfQU5DMV9TUEFSRV9NIDB4RkYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQ0RDX0FOQzFfU1BBUkVfQU5DMV9TUEFSRV9TIDAKKyNkZWZpbmUgVElNUEFOSV9DRENfQU5DMV9TUEFSRV9BTkMxX1NQQVJFX00gMHhGRgorI2RlZmluZSBUSU1QQU5JX0FfQ0RDX0FOQzFfSUlSX0NPRUZGX1BUUiAoMHhDNSkKKyNkZWZpbmUgVElNUEFOSV9DRENfQU5DMV9JSVJfQ09FRkZfUFRSX1JXQyAiUlciCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX0NEQ19BTkMxX0lJUl9DT0VGRl9QVFJfUE9SIDAKKyNkZWZpbmUgVElNUEFOSV9DRENfQU5DMV9JSVJfQ09FRkZfUFRSX1MgMAorI2RlZmluZSBUSU1QQU5JX0NEQ19BTkMxX0lJUl9DT0VGRl9QVFJfTSAweDFGCisjZGVmaW5lIFRJTVBBTklfQ0RDX0FOQzFfSUlSX0NPRUZGX1BUUl9BTkMxX0lJUl9DT0VGRl9QVFJfUyAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX0NEQ19BTkMxX0lJUl9DT0VGRl9QVFJfQU5DMV9JSVJfQ09FRkZfUFRSX00gMHgxRgorI2RlZmluZSBUSU1QQU5JX0FfQ0RDX0FOQzFfSUlSX0NPRUZGX01TQiAoMHhDNikKKyNkZWZpbmUgVElNUEFOSV9DRENfQU5DMV9JSVJfQ09FRkZfTVNCX1JXQyAiUlciCisjZGVmaW5lIFRJTVBBTklfQ0RDX0FOQzFfSUlSX0NPRUZGX01TQl9QT1IgMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9DRENfQU5DMV9JSVJfQ09FRkZfTVNCX1MgMAorI2RlZmluZSBUSU1QQU5JX0NEQ19BTkMxX0lJUl9DT0VGRl9NU0JfTSAweDEKKyNkZWZpbmUgVElNUEFOSV9DRENfQU5DMV9JSVJfQ09FRkZfTVNCX0FOQzFfSUlSX0NPRUZGX01TQl9TIDAKKyNkZWZpbmUgVElNUEFOSV9DRENfQU5DMV9JSVJfQ09FRkZfTVNCX0FOQzFfSUlSX0NPRUZGX01TQl9NIDB4MQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9BX0NEQ19BTkMxX0lJUl9DT0VGRl9MU0IgKDB4QzcpCisjZGVmaW5lIFRJTVBBTklfQ0RDX0FOQzFfSUlSX0NPRUZGX0xTQl9SV0MgIlJXIgorI2RlZmluZSBUSU1QQU5JX0NEQ19BTkMxX0lJUl9DT0VGRl9MU0JfUE9SIDAKKyNkZWZpbmUgVElNUEFOSV9DRENfQU5DMV9JSVJfQ09FRkZfTFNCX1MgMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9DRENfQU5DMV9JSVJfQ09FRkZfTFNCX00gMHhGRgorI2RlZmluZSBUSU1QQU5JX0NEQ19BTkMxX0lJUl9DT0VGRl9MU0JfQU5DMV9JSVJfQ09FRkZfTFNCX1MgMAorI2RlZmluZSBUSU1QQU5JX0NEQ19BTkMxX0lJUl9DT0VGRl9MU0JfQU5DMV9JSVJfQ09FRkZfTFNCX00gMHhGRgorI2RlZmluZSBUSU1QQU5JX0FfQ0RDX0FOQzFfSUlSX0NPRUZGX0NUTCAoMHhDOCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQ0RDX0FOQzFfSUlSX0NPRUZGX0NUTF9SV0MgIlJXIgorI2RlZmluZSBUSU1QQU5JX0NEQ19BTkMxX0lJUl9DT0VGRl9DVExfUE9SIDAKKyNkZWZpbmUgVElNUEFOSV9DRENfQU5DMV9JSVJfQ09FRkZfQ1RMX1MgMAorI2RlZmluZSBUSU1QQU5JX0NEQ19BTkMxX0lJUl9DT0VGRl9DVExfTSAweDMKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQ0RDX0FOQzFfSUlSX0NPRUZGX0NUTF9BTkMxX0lJUl9DT0VGRl9BREFQVElWRV9TIDEKKyNkZWZpbmUgVElNUEFOSV9DRENfQU5DMV9JSVJfQ09FRkZfQ1RMX0FOQzFfSUlSX0NPRUZGX0FEQVBUSVZFX00gMHgyCisjZGVmaW5lIFRJTVBBTklfQ0RDX0FOQzFfSUlSX0NPRUZGX0NUTF9BTkMxX0lJUl9DT0VGRl9BREFQVElWRV9BREFQVElWRSAweDEKKyNkZWZpbmUgVElNUEFOSV9DRENfQU5DMV9JSVJfQ09FRkZfQ1RMX0FOQzFfSUlSX0NPRUZGX0FEQVBUSVZFX05PTl9BREFQVElWRSAweDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQ0RDX0FOQzFfSUlSX0NPRUZGX0NUTF9BTkMxX0lJUl9DT0VGRl9FTl9TIDAKKyNkZWZpbmUgVElNUEFOSV9DRENfQU5DMV9JSVJfQ09FRkZfQ1RMX0FOQzFfSUlSX0NPRUZGX0VOX00gMHgxCisjZGVmaW5lIFRJTVBBTklfQ0RDX0FOQzFfSUlSX0NPRUZGX0NUTF9BTkMxX0lJUl9DT0VGRl9FTl9VUERBVEUgMHgxCisjZGVmaW5lIFRJTVBBTklfQ0RDX0FOQzFfSUlSX0NPRUZGX0NUTF9BTkMxX0lJUl9DT0VGRl9FTl9OT19VUERBVEUgMHgwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX0FfQ0RDX0FOQzFfTFBGX0NPRUZGX1BUUiAoMHhDOSkKKyNkZWZpbmUgVElNUEFOSV9DRENfQU5DMV9MUEZfQ09FRkZfUFRSX1JXQyAiUlciCisjZGVmaW5lIFRJTVBBTklfQ0RDX0FOQzFfTFBGX0NPRUZGX1BUUl9QT1IgMAorI2RlZmluZSBUSU1QQU5JX0NEQ19BTkMxX0xQRl9DT0VGRl9QVFJfUyAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX0NEQ19BTkMxX0xQRl9DT0VGRl9QVFJfTSAweEYKKyNkZWZpbmUgVElNUEFOSV9DRENfQU5DMV9MUEZfQ09FRkZfUFRSX0FOQzFfTFBGX0NPRUZGX1BUUl9TIDAKKyNkZWZpbmUgVElNUEFOSV9DRENfQU5DMV9MUEZfQ09FRkZfUFRSX0FOQzFfTFBGX0NPRUZGX1BUUl9NIDB4RgorI2RlZmluZSBUSU1QQU5JX0FfQ0RDX0FOQzFfTFBGX0NPRUZGX01TQiAoMHhDQSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQ0RDX0FOQzFfTFBGX0NPRUZGX01TQl9SV0MgIlJXIgorI2RlZmluZSBUSU1QQU5JX0NEQ19BTkMxX0xQRl9DT0VGRl9NU0JfUE9SIDAKKyNkZWZpbmUgVElNUEFOSV9DRENfQU5DMV9MUEZfQ09FRkZfTVNCX1MgMAorI2RlZmluZSBUSU1QQU5JX0NEQ19BTkMxX0xQRl9DT0VGRl9NU0JfTSAweEYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQ0RDX0FOQzFfTFBGX0NPRUZGX01TQl9BTkMxX0xQRl9DT0VGRl9NU0JfUyAwCisjZGVmaW5lIFRJTVBBTklfQ0RDX0FOQzFfTFBGX0NPRUZGX01TQl9BTkMxX0xQRl9DT0VGRl9NU0JfTSAweEYKKyNkZWZpbmUgVElNUEFOSV9BX0NEQ19BTkMxX0xQRl9DT0VGRl9MU0IgKDB4Q0IpCisjZGVmaW5lIFRJTVBBTklfQ0RDX0FOQzFfTFBGX0NPRUZGX0xTQl9SV0MgIlJXIgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9DRENfQU5DMV9MUEZfQ09FRkZfTFNCX1BPUiAwCisjZGVmaW5lIFRJTVBBTklfQ0RDX0FOQzFfTFBGX0NPRUZGX0xTQl9TIDAKKyNkZWZpbmUgVElNUEFOSV9DRENfQU5DMV9MUEZfQ09FRkZfTFNCX00gMHhGRgorI2RlZmluZSBUSU1QQU5JX0NEQ19BTkMxX0xQRl9DT0VGRl9MU0JfQU5DMV9MUEZfQ09FRkZfTFNCX1MgMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9DRENfQU5DMV9MUEZfQ09FRkZfTFNCX0FOQzFfTFBGX0NPRUZGX0xTQl9NIDB4RkYKKyNkZWZpbmUgVElNUEFOSV9BX0NEQ19BTkMxX1NDQUxFX1BUUiAoMHhDQykKKyNkZWZpbmUgVElNUEFOSV9DRENfQU5DMV9TQ0FMRV9QVFJfUldDICJSVyIKKyNkZWZpbmUgVElNUEFOSV9DRENfQU5DMV9TQ0FMRV9QVFJfUE9SIDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQ0RDX0FOQzFfU0NBTEVfUFRSX1MgMAorI2RlZmluZSBUSU1QQU5JX0NEQ19BTkMxX1NDQUxFX1BUUl9NIDB4NworI2RlZmluZSBUSU1QQU5JX0NEQ19BTkMxX1NDQUxFX1BUUl9BTkMxX1NDQUxFX1BUUl9TIDAKKyNkZWZpbmUgVElNUEFOSV9DRENfQU5DMV9TQ0FMRV9QVFJfQU5DMV9TQ0FMRV9QVFJfTSAweDcKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQV9DRENfQU5DMV9TQ0FMRSAoMHhDRCkKKyNkZWZpbmUgVElNUEFOSV9DRENfQU5DMV9TQ0FMRV9SV0MgIlJXIgorI2RlZmluZSBUSU1QQU5JX0NEQ19BTkMxX1NDQUxFX1BPUiAwCisjZGVmaW5lIFRJTVBBTklfQ0RDX0FOQzFfU0NBTEVfUyAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX0NEQ19BTkMxX1NDQUxFX00gMHhGRgorI2RlZmluZSBUSU1QQU5JX0NEQ19BTkMxX1NDQUxFX0FOQzFfU0NBTEVfUyAwCisjZGVmaW5lIFRJTVBBTklfQ0RDX0FOQzFfU0NBTEVfQU5DMV9TQ0FMRV9NIDB4RkYKKyNkZWZpbmUgVElNUEFOSV9BX0NEQ19BTkMxX0RFQlVHICgweENFKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9DRENfQU5DMV9ERUJVR19SV0MgIlJXIgorI2RlZmluZSBUSU1QQU5JX0NEQ19BTkMxX0RFQlVHX1BPUiAwCisjZGVmaW5lIFRJTVBBTklfQ0RDX0FOQzFfREVCVUdfUyAwCisjZGVmaW5lIFRJTVBBTklfQ0RDX0FOQzFfREVCVUdfTSAweEYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQ0RDX0FOQzFfREVCVUdfQU5DMV9ERUJVR19TRUxfUyAwCisjZGVmaW5lIFRJTVBBTklfQ0RDX0FOQzFfREVCVUdfQU5DMV9ERUJVR19TRUxfTSAweEYKKyNkZWZpbmUgVElNUEFOSV9BX0NEQ19BTkMyX0NUTDEgKDB4RDApCisjZGVmaW5lIFRJTVBBTklfQ0RDX0FOQzJfQ1RMMV9SV0MgIlJXIgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9DRENfQU5DMl9DVEwxX1BPUiAwCisjZGVmaW5lIFRJTVBBTklfQ0RDX0FOQzJfQ1RMMV9TIDAKKyNkZWZpbmUgVElNUEFOSV9DRENfQU5DMl9DVEwxX00gMHgzRgorI2RlZmluZSBUSU1QQU5JX0NEQ19BTkMyX0NUTDFfQU5DMl9GRl9PVVRfRElTX1MgNQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9DRENfQU5DMl9DVEwxX0FOQzJfRkZfT1VUX0RJU19NIDB4MjAKKyNkZWZpbmUgVElNUEFOSV9DRENfQU5DMl9DVEwxX0FOQzJfRkZfT1VUX0RJU19GRl9PVVRfRElTIDB4MQorI2RlZmluZSBUSU1QQU5JX0NEQ19BTkMyX0NUTDFfQU5DMl9GRl9PVVRfRElTX0ZGX09VVF9FTiAweDAKKyNkZWZpbmUgVElNUEFOSV9DRENfQU5DMl9DVEwxX0FOQzJfQURDX0RNSUNfU0VMX1MgNAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9DRENfQU5DMl9DVEwxX0FOQzJfQURDX0RNSUNfU0VMX00gMHgxMAorI2RlZmluZSBUSU1QQU5JX0NEQ19BTkMyX0NUTDFfQU5DMl9BRENfRE1JQ19TRUxfRE1JQyAweDEKKyNkZWZpbmUgVElNUEFOSV9DRENfQU5DMl9DVEwxX0FOQzJfQURDX0RNSUNfU0VMX0FEQyAweDAKKyNkZWZpbmUgVElNUEFOSV9DRENfQU5DMl9DVEwxX0FOQzJfTFJfRU5fUyAzCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX0NEQ19BTkMyX0NUTDFfQU5DMl9MUl9FTl9NIDB4OAorI2RlZmluZSBUSU1QQU5JX0NEQ19BTkMyX0NUTDFfQU5DMl9MUl9FTl9MUl9NSVhfRU4gMHgxCisjZGVmaW5lIFRJTVBBTklfQ0RDX0FOQzJfQ1RMMV9BTkMyX0xSX0VOX0xSX01JWF9ESVMgMHgwCisjZGVmaW5lIFRJTVBBTklfQ0RDX0FOQzJfQ1RMMV9BTkMyX0ZCX0VOX1MgMgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9DRENfQU5DMl9DVEwxX0FOQzJfRkJfRU5fTSAweDQKKyNkZWZpbmUgVElNUEFOSV9DRENfQU5DMl9DVEwxX0FOQzJfRkJfRU5fRkJfTUlYX0VOIDB4MQorI2RlZmluZSBUSU1QQU5JX0NEQ19BTkMyX0NUTDFfQU5DMl9GQl9FTl9GQl9NSVhfRElTIDB4MAorI2RlZmluZSBUSU1QQU5JX0NEQ19BTkMyX0NUTDFfQU5DMl9FTl9TIDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQ0RDX0FOQzJfQ1RMMV9BTkMyX0VOX00gMHgyCisjZGVmaW5lIFRJTVBBTklfQ0RDX0FOQzJfQ1RMMV9BTkMyX0VOX0FOQ19FTiAweDEKKyNkZWZpbmUgVElNUEFOSV9DRENfQU5DMl9DVEwxX0FOQzJfRU5fQU5DX0RJUyAweDAKKyNkZWZpbmUgVElNUEFOSV9DRENfQU5DMl9DVEwxX0FOQzJfU09GVF9SRVNFVF9TIDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQ0RDX0FOQzJfQ1RMMV9BTkMyX1NPRlRfUkVTRVRfTSAweDEKKyNkZWZpbmUgVElNUEFOSV9DRENfQU5DMl9DVEwxX0FOQzJfU09GVF9SRVNFVF9BTkNfUkVTRVQgMHgxCisjZGVmaW5lIFRJTVBBTklfQ0RDX0FOQzJfQ1RMMV9BTkMyX1NPRlRfUkVTRVRfQU5DX0FDVElWRSAweDAKKyNkZWZpbmUgVElNUEFOSV9BX0NEQ19BTkMyX0NUTDIgKDB4RDEpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX0NEQ19BTkMyX0NUTDJfUldDICJSVyIKKyNkZWZpbmUgVElNUEFOSV9DRENfQU5DMl9DVEwyX1BPUiAwCisjZGVmaW5lIFRJTVBBTklfQ0RDX0FOQzJfQ1RMMl9TIDAKKyNkZWZpbmUgVElNUEFOSV9DRENfQU5DMl9DVEwyX00gMHgxRgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9DRENfQU5DMl9DVEwyX0FOQzJfRlJFUV9TRUxfUyAwCisjZGVmaW5lIFRJTVBBTklfQ0RDX0FOQzJfQ1RMMl9BTkMyX0ZSRVFfU0VMX00gMHgxRgorI2RlZmluZSBUSU1QQU5JX0FfQ0RDX0FOQzJfRkZfRkJfU0hJRlQgKDB4RDIpCisjZGVmaW5lIFRJTVBBTklfQ0RDX0FOQzJfRkZfRkJfU0hJRlRfUldDICJSVyIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQ0RDX0FOQzJfRkZfRkJfU0hJRlRfUE9SIDAKKyNkZWZpbmUgVElNUEFOSV9DRENfQU5DMl9GRl9GQl9TSElGVF9TIDAKKyNkZWZpbmUgVElNUEFOSV9DRENfQU5DMl9GRl9GQl9TSElGVF9NIDB4RkYKKyNkZWZpbmUgVElNUEFOSV9DRENfQU5DMl9GRl9GQl9TSElGVF9BTkMyX0ZCX0xQRl9TSElGVF9TIDQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQ0RDX0FOQzJfRkZfRkJfU0hJRlRfQU5DMl9GQl9MUEZfU0hJRlRfTSAweEYwCisjZGVmaW5lIFRJTVBBTklfQ0RDX0FOQzJfRkZfRkJfU0hJRlRfQU5DMl9GRl9MUEZfU0hJRlRfUyAwCisjZGVmaW5lIFRJTVBBTklfQ0RDX0FOQzJfRkZfRkJfU0hJRlRfQU5DMl9GRl9MUEZfU0hJRlRfTSAweEYKKyNkZWZpbmUgVElNUEFOSV9BX0NEQ19BTkMyX1JYX05TICgweEQzKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9DRENfQU5DMl9SWF9OU19SV0MgIlJXIgorI2RlZmluZSBUSU1QQU5JX0NEQ19BTkMyX1JYX05TX1BPUiAweDEKKyNkZWZpbmUgVElNUEFOSV9DRENfQU5DMl9SWF9OU19TIDAKKyNkZWZpbmUgVElNUEFOSV9DRENfQU5DMl9SWF9OU19NIDB4NworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9DRENfQU5DMl9SWF9OU19BTkMyX0RJVEhFUl9CUF9TIDIKKyNkZWZpbmUgVElNUEFOSV9DRENfQU5DMl9SWF9OU19BTkMyX0RJVEhFUl9CUF9NIDB4NAorI2RlZmluZSBUSU1QQU5JX0NEQ19BTkMyX1JYX05TX0FOQzJfRElUSEVSX1NIQVBFX1NFTF9TIDEKKyNkZWZpbmUgVElNUEFOSV9DRENfQU5DMl9SWF9OU19BTkMyX0RJVEhFUl9TSEFQRV9TRUxfTSAweDIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQ0RDX0FOQzJfUlhfTlNfQU5DMl9ESVRIRVJfRExZX1NFTF9TIDAKKyNkZWZpbmUgVElNUEFOSV9DRENfQU5DMl9SWF9OU19BTkMyX0RJVEhFUl9ETFlfU0VMX00gMHgxCisjZGVmaW5lIFRJTVBBTklfQV9DRENfQU5DMl9TUEFSRSAoMHhENCkKKyNkZWZpbmUgVElNUEFOSV9DRENfQU5DMl9TUEFSRV9SV0MgIlJXIgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9DRENfQU5DMl9TUEFSRV9QT1IgMAorI2RlZmluZSBUSU1QQU5JX0NEQ19BTkMyX1NQQVJFX1MgMAorI2RlZmluZSBUSU1QQU5JX0NEQ19BTkMyX1NQQVJFX00gMHhGRgorI2RlZmluZSBUSU1QQU5JX0NEQ19BTkMyX1NQQVJFX0FOQzJfU1BBUkVfUyAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX0NEQ19BTkMyX1NQQVJFX0FOQzJfU1BBUkVfTSAweEZGCisjZGVmaW5lIFRJTVBBTklfQV9DRENfQU5DMl9JSVJfQ09FRkZfUFRSICgweEQ1KQorI2RlZmluZSBUSU1QQU5JX0NEQ19BTkMyX0lJUl9DT0VGRl9QVFJfUldDICJSVyIKKyNkZWZpbmUgVElNUEFOSV9DRENfQU5DMl9JSVJfQ09FRkZfUFRSX1BPUiAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX0NEQ19BTkMyX0lJUl9DT0VGRl9QVFJfUyAwCisjZGVmaW5lIFRJTVBBTklfQ0RDX0FOQzJfSUlSX0NPRUZGX1BUUl9NIDB4MUYKKyNkZWZpbmUgVElNUEFOSV9DRENfQU5DMl9JSVJfQ09FRkZfUFRSX0FOQzJfSUlSX0NPRUZGX1BUUl9TIDAKKyNkZWZpbmUgVElNUEFOSV9DRENfQU5DMl9JSVJfQ09FRkZfUFRSX0FOQzJfSUlSX0NPRUZGX1BUUl9NIDB4MUYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQV9DRENfQU5DMl9JSVJfQ09FRkZfTVNCICgweEQ2KQorI2RlZmluZSBUSU1QQU5JX0NEQ19BTkMyX0lJUl9DT0VGRl9NU0JfUldDICJSVyIKKyNkZWZpbmUgVElNUEFOSV9DRENfQU5DMl9JSVJfQ09FRkZfTVNCX1BPUiAwCisjZGVmaW5lIFRJTVBBTklfQ0RDX0FOQzJfSUlSX0NPRUZGX01TQl9TIDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQ0RDX0FOQzJfSUlSX0NPRUZGX01TQl9NIDB4MQorI2RlZmluZSBUSU1QQU5JX0NEQ19BTkMyX0lJUl9DT0VGRl9NU0JfQU5DMl9JSVJfQ09FRkZfTVNCX1MgMAorI2RlZmluZSBUSU1QQU5JX0NEQ19BTkMyX0lJUl9DT0VGRl9NU0JfQU5DMl9JSVJfQ09FRkZfTVNCX00gMHgxCisjZGVmaW5lIFRJTVBBTklfQV9DRENfQU5DMl9JSVJfQ09FRkZfTFNCICgweEQ3KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9DRENfQU5DMl9JSVJfQ09FRkZfTFNCX1JXQyAiUlciCisjZGVmaW5lIFRJTVBBTklfQ0RDX0FOQzJfSUlSX0NPRUZGX0xTQl9QT1IgMAorI2RlZmluZSBUSU1QQU5JX0NEQ19BTkMyX0lJUl9DT0VGRl9MU0JfUyAwCisjZGVmaW5lIFRJTVBBTklfQ0RDX0FOQzJfSUlSX0NPRUZGX0xTQl9NIDB4RkYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQ0RDX0FOQzJfSUlSX0NPRUZGX0xTQl9BTkMyX0lJUl9DT0VGRl9MU0JfUyAwCisjZGVmaW5lIFRJTVBBTklfQ0RDX0FOQzJfSUlSX0NPRUZGX0xTQl9BTkMyX0lJUl9DT0VGRl9MU0JfTSAweEZGCisjZGVmaW5lIFRJTVBBTklfQV9DRENfQU5DMl9JSVJfQ09FRkZfQ1RMICgweEQ4KQorI2RlZmluZSBUSU1QQU5JX0NEQ19BTkMyX0lJUl9DT0VGRl9DVExfUldDICJSVyIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQ0RDX0FOQzJfSUlSX0NPRUZGX0NUTF9QT1IgMAorI2RlZmluZSBUSU1QQU5JX0NEQ19BTkMyX0lJUl9DT0VGRl9DVExfUyAwCisjZGVmaW5lIFRJTVBBTklfQ0RDX0FOQzJfSUlSX0NPRUZGX0NUTF9NIDB4MworI2RlZmluZSBUSU1QQU5JX0NEQ19BTkMyX0lJUl9DT0VGRl9DVExfQU5DMl9JSVJfQ09FRkZfQURBUFRJVkVfUyAxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX0NEQ19BTkMyX0lJUl9DT0VGRl9DVExfQU5DMl9JSVJfQ09FRkZfQURBUFRJVkVfTSAweDIKKyNkZWZpbmUgVElNUEFOSV9DRENfQU5DMl9JSVJfQ09FRkZfQ1RMX0FOQzJfSUlSX0NPRUZGX0FEQVBUSVZFX0FEQVBUSVZFIDB4MQorI2RlZmluZSBUSU1QQU5JX0NEQ19BTkMyX0lJUl9DT0VGRl9DVExfQU5DMl9JSVJfQ09FRkZfQURBUFRJVkVfTk9OX0FEQVBUSVZFIDB4MAorI2RlZmluZSBUSU1QQU5JX0NEQ19BTkMyX0lJUl9DT0VGRl9DVExfQU5DMl9JSVJfQ09FRkZfRU5fUyAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX0NEQ19BTkMyX0lJUl9DT0VGRl9DVExfQU5DMl9JSVJfQ09FRkZfRU5fTSAweDEKKyNkZWZpbmUgVElNUEFOSV9DRENfQU5DMl9JSVJfQ09FRkZfQ1RMX0FOQzJfSUlSX0NPRUZGX0VOX1VQREFURSAweDEKKyNkZWZpbmUgVElNUEFOSV9DRENfQU5DMl9JSVJfQ09FRkZfQ1RMX0FOQzJfSUlSX0NPRUZGX0VOX05PX1VQREFURSAweDAKKyNkZWZpbmUgVElNUEFOSV9BX0NEQ19BTkMyX0xQRl9DT0VGRl9QVFIgKDB4RDkpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX0NEQ19BTkMyX0xQRl9DT0VGRl9QVFJfUldDICJSVyIKKyNkZWZpbmUgVElNUEFOSV9DRENfQU5DMl9MUEZfQ09FRkZfUFRSX1BPUiAwCisjZGVmaW5lIFRJTVBBTklfQ0RDX0FOQzJfTFBGX0NPRUZGX1BUUl9TIDAKKyNkZWZpbmUgVElNUEFOSV9DRENfQU5DMl9MUEZfQ09FRkZfUFRSX00gMHhGCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX0NEQ19BTkMyX0xQRl9DT0VGRl9QVFJfQU5DMl9MUEZfQ09FRkZfUFRSX1MgMAorI2RlZmluZSBUSU1QQU5JX0NEQ19BTkMyX0xQRl9DT0VGRl9QVFJfQU5DMl9MUEZfQ09FRkZfUFRSX00gMHhGCisjZGVmaW5lIFRJTVBBTklfQV9DRENfQU5DMl9MUEZfQ09FRkZfTVNCICgweERBKQorI2RlZmluZSBUSU1QQU5JX0NEQ19BTkMyX0xQRl9DT0VGRl9NU0JfUldDICJSVyIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQ0RDX0FOQzJfTFBGX0NPRUZGX01TQl9QT1IgMAorI2RlZmluZSBUSU1QQU5JX0NEQ19BTkMyX0xQRl9DT0VGRl9NU0JfUyAwCisjZGVmaW5lIFRJTVBBTklfQ0RDX0FOQzJfTFBGX0NPRUZGX01TQl9NIDB4RgorI2RlZmluZSBUSU1QQU5JX0NEQ19BTkMyX0xQRl9DT0VGRl9NU0JfQU5DMl9MUEZfQ09FRkZfTVNCX1MgMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9DRENfQU5DMl9MUEZfQ09FRkZfTVNCX0FOQzJfTFBGX0NPRUZGX01TQl9NIDB4RgorI2RlZmluZSBUSU1QQU5JX0FfQ0RDX0FOQzJfTFBGX0NPRUZGX0xTQiAoMHhEQikKKyNkZWZpbmUgVElNUEFOSV9DRENfQU5DMl9MUEZfQ09FRkZfTFNCX1JXQyAiUlciCisjZGVmaW5lIFRJTVBBTklfQ0RDX0FOQzJfTFBGX0NPRUZGX0xTQl9QT1IgMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9DRENfQU5DMl9MUEZfQ09FRkZfTFNCX1MgMAorI2RlZmluZSBUSU1QQU5JX0NEQ19BTkMyX0xQRl9DT0VGRl9MU0JfTSAweEZGCisjZGVmaW5lIFRJTVBBTklfQ0RDX0FOQzJfTFBGX0NPRUZGX0xTQl9BTkMyX0xQRl9DT0VGRl9MU0JfUyAwCisjZGVmaW5lIFRJTVBBTklfQ0RDX0FOQzJfTFBGX0NPRUZGX0xTQl9BTkMyX0xQRl9DT0VGRl9MU0JfTSAweEZGCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX0FfQ0RDX0FOQzJfU0NBTEVfUFRSICgweERDKQorI2RlZmluZSBUSU1QQU5JX0NEQ19BTkMyX1NDQUxFX1BUUl9SV0MgIlJXIgorI2RlZmluZSBUSU1QQU5JX0NEQ19BTkMyX1NDQUxFX1BUUl9QT1IgMAorI2RlZmluZSBUSU1QQU5JX0NEQ19BTkMyX1NDQUxFX1BUUl9TIDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQ0RDX0FOQzJfU0NBTEVfUFRSX00gMHg3CisjZGVmaW5lIFRJTVBBTklfQ0RDX0FOQzJfU0NBTEVfUFRSX0FOQzJfU0NBTEVfUFRSX1MgMAorI2RlZmluZSBUSU1QQU5JX0NEQ19BTkMyX1NDQUxFX1BUUl9BTkMyX1NDQUxFX1BUUl9NIDB4NworI2RlZmluZSBUSU1QQU5JX0FfQ0RDX0FOQzJfU0NBTEUgKDB4REQpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX0NEQ19BTkMyX1NDQUxFX1JXQyAiUlciCisjZGVmaW5lIFRJTVBBTklfQ0RDX0FOQzJfU0NBTEVfUE9SIDAKKyNkZWZpbmUgVElNUEFOSV9DRENfQU5DMl9TQ0FMRV9TIDAKKyNkZWZpbmUgVElNUEFOSV9DRENfQU5DMl9TQ0FMRV9NIDB4RkYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQ0RDX0FOQzJfU0NBTEVfQU5DMl9TQ0FMRV9TIDAKKyNkZWZpbmUgVElNUEFOSV9DRENfQU5DMl9TQ0FMRV9BTkMyX1NDQUxFX00gMHhGRgorI2RlZmluZSBUSU1QQU5JX0FfQ0RDX0FOQzJfREVCVUcgKDB4REUpCisjZGVmaW5lIFRJTVBBTklfQ0RDX0FOQzJfREVCVUdfUldDICJSVyIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQ0RDX0FOQzJfREVCVUdfUE9SIDAKKyNkZWZpbmUgVElNUEFOSV9DRENfQU5DMl9ERUJVR19TIDAKKyNkZWZpbmUgVElNUEFOSV9DRENfQU5DMl9ERUJVR19NIDB4RgorI2RlZmluZSBUSU1QQU5JX0NEQ19BTkMyX0RFQlVHX0FOQzJfREVCVUdfU0VMX1MgMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9DRENfQU5DMl9ERUJVR19BTkMyX0RFQlVHX1NFTF9NIDB4RgorI2RlZmluZSBUSU1QQU5JX0FfQ0RDX0xJTkVfTF9BVk9MICgweEUwKQorI2RlZmluZSBUSU1QQU5JX0NEQ19MSU5FX0xfQVZPTF9SV0MgIlJXIgorI2RlZmluZSBUSU1QQU5JX0NEQ19MSU5FX0xfQVZPTF9QT1IgMHhhYworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9DRENfTElORV9MX0FWT0xfUyAwCisjZGVmaW5lIFRJTVBBTklfQ0RDX0xJTkVfTF9BVk9MX00gMHhGRgorI2RlZmluZSBUSU1QQU5JX0NEQ19MSU5FX0xfQVZPTF9VU0VSX0dBSU5fUyAyCisjZGVmaW5lIFRJTVBBTklfQ0RDX0xJTkVfTF9BVk9MX1VTRVJfR0FJTl9NIDB4RkMKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQ0RDX0xJTkVfTF9BVk9MX0RVTU1ZX1MgMAorI2RlZmluZSBUSU1QQU5JX0NEQ19MSU5FX0xfQVZPTF9EVU1NWV9NIDB4MworI2RlZmluZSBUSU1QQU5JX0FfQ0RDX0xJTkVfUl9BVk9MICgweEUxKQorI2RlZmluZSBUSU1QQU5JX0NEQ19MSU5FX1JfQVZPTF9SV0MgIlJXIgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9DRENfTElORV9SX0FWT0xfUE9SIDB4YWMKKyNkZWZpbmUgVElNUEFOSV9DRENfTElORV9SX0FWT0xfUyAwCisjZGVmaW5lIFRJTVBBTklfQ0RDX0xJTkVfUl9BVk9MX00gMHhGRgorI2RlZmluZSBUSU1QQU5JX0NEQ19MSU5FX1JfQVZPTF9VU0VSX0dBSU5fUyAyCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX0NEQ19MSU5FX1JfQVZPTF9VU0VSX0dBSU5fTSAweEZDCisjZGVmaW5lIFRJTVBBTklfQ0RDX0xJTkVfUl9BVk9MX0RVTU1ZX1MgMAorI2RlZmluZSBUSU1QQU5JX0NEQ19MSU5FX1JfQVZPTF9EVU1NWV9NIDB4MworI2RlZmluZSBUSU1QQU5JX0FfQ0RDX0hQSF9MX0FWT0wgKDB4RTIpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX0NEQ19IUEhfTF9BVk9MX1JXQyAiUlciCisjZGVmaW5lIFRJTVBBTklfQ0RDX0hQSF9MX0FWT0xfUE9SIDB4YWUKKyNkZWZpbmUgVElNUEFOSV9DRENfSFBIX0xfQVZPTF9TIDAKKyNkZWZpbmUgVElNUEFOSV9DRENfSFBIX0xfQVZPTF9NIDB4RkYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQ0RDX0hQSF9MX0FWT0xfVVNFUl9HQUlOX1MgMgorI2RlZmluZSBUSU1QQU5JX0NEQ19IUEhfTF9BVk9MX1VTRVJfR0FJTl9NIDB4RkMKKyNkZWZpbmUgVElNUEFOSV9DRENfSFBIX0xfQVZPTF9NVVRFX1MgMQorI2RlZmluZSBUSU1QQU5JX0NEQ19IUEhfTF9BVk9MX01VVEVfTSAweDIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQ0RDX0hQSF9MX0FWT0xfTVVURV9NVVRFIDB4MQorI2RlZmluZSBUSU1QQU5JX0NEQ19IUEhfTF9BVk9MX01VVEVfVU5NVVRFIDB4MAorI2RlZmluZSBUSU1QQU5JX0NEQ19IUEhfTF9BVk9MX0RVTU1ZX1MgMAorI2RlZmluZSBUSU1QQU5JX0NEQ19IUEhfTF9BVk9MX0RVTU1ZX00gMHgxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX0FfQ0RDX0hQSF9SX0FWT0wgKDB4RTMpCisjZGVmaW5lIFRJTVBBTklfQ0RDX0hQSF9SX0FWT0xfUldDICJSVyIKKyNkZWZpbmUgVElNUEFOSV9DRENfSFBIX1JfQVZPTF9QT1IgMHhhZQorI2RlZmluZSBUSU1QQU5JX0NEQ19IUEhfUl9BVk9MX1MgMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9DRENfSFBIX1JfQVZPTF9NIDB4RkYKKyNkZWZpbmUgVElNUEFOSV9DRENfSFBIX1JfQVZPTF9VU0VSX0dBSU5fUyAyCisjZGVmaW5lIFRJTVBBTklfQ0RDX0hQSF9SX0FWT0xfVVNFUl9HQUlOX00gMHhGQworI2RlZmluZSBUSU1QQU5JX0NEQ19IUEhfUl9BVk9MX01VVEVfUyAxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX0NEQ19IUEhfUl9BVk9MX01VVEVfTSAweDIKKyNkZWZpbmUgVElNUEFOSV9DRENfSFBIX1JfQVZPTF9NVVRFX01VVEUgMHgxCisjZGVmaW5lIFRJTVBBTklfQ0RDX0hQSF9SX0FWT0xfTVVURV9VTk1VVEUgMHgwCisjZGVmaW5lIFRJTVBBTklfQ0RDX0hQSF9SX0FWT0xfRFVNTVlfUyAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX0NEQ19IUEhfUl9BVk9MX0RVTU1ZX00gMHgxCisjZGVmaW5lIFRJTVBBTklfQV9DRENfQ09NUF9DVEwxICgweEU0KQorI2RlZmluZSBUSU1QQU5JX0NEQ19DT01QX0NUTDFfUldDICJSVyIKKyNkZWZpbmUgVElNUEFOSV9DRENfQ09NUF9DVEwxX1BPUiAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX0NEQ19DT01QX0NUTDFfUyAwCisjZGVmaW5lIFRJTVBBTklfQ0RDX0NPTVBfQ1RMMV9NIDB4RkYKKyNkZWZpbmUgVElNUEFOSV9DRENfQ09NUF9DVEwxX0xPX0NMS19FTl9TIDcKKyNkZWZpbmUgVElNUEFOSV9DRENfQ09NUF9DVEwxX0xPX0NMS19FTl9NIDB4ODAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQ0RDX0NPTVBfQ1RMMV9IUEhfQ0xLX0VOX1MgNgorI2RlZmluZSBUSU1QQU5JX0NEQ19DT01QX0NUTDFfSFBIX0NMS19FTl9NIDB4NDAKKyNkZWZpbmUgVElNUEFOSV9DRENfQ09NUF9DVEwxX0xPX1NPRlRfUkVTRVRfUyA1CisjZGVmaW5lIFRJTVBBTklfQ0RDX0NPTVBfQ1RMMV9MT19TT0ZUX1JFU0VUX00gMHgyMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9DRENfQ09NUF9DVEwxX0hQSF9TT0ZUX1JFU0VUX1MgNAorI2RlZmluZSBUSU1QQU5JX0NEQ19DT01QX0NUTDFfSFBIX1NPRlRfUkVTRVRfTSAweDEwCisjZGVmaW5lIFRJTVBBTklfQ0RDX0NPTVBfQ1RMMV9MT19SX0VOX1MgMworI2RlZmluZSBUSU1QQU5JX0NEQ19DT01QX0NUTDFfTE9fUl9FTl9NIDB4OAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9DRENfQ09NUF9DVEwxX0xPX0xfRU5fUyAyCisjZGVmaW5lIFRJTVBBTklfQ0RDX0NPTVBfQ1RMMV9MT19MX0VOX00gMHg0CisjZGVmaW5lIFRJTVBBTklfQ0RDX0NPTVBfQ1RMMV9IUEhfUl9FTl9TIDEKKyNkZWZpbmUgVElNUEFOSV9DRENfQ09NUF9DVEwxX0hQSF9SX0VOX00gMHgyCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX0NEQ19DT01QX0NUTDFfSFBIX0xfRU5fUyAwCisjZGVmaW5lIFRJTVBBTklfQ0RDX0NPTVBfQ1RMMV9IUEhfTF9FTl9NIDB4MQorI2RlZmluZSBUSU1QQU5JX0FfQ0RDX0NPTVBfQ1RMMiAoMHhFNSkKKyNkZWZpbmUgVElNUEFOSV9DRENfQ09NUF9DVEwyX1JXQyAiUlciCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX0NEQ19DT01QX0NUTDJfUE9SIDB4ZQorI2RlZmluZSBUSU1QQU5JX0NEQ19DT01QX0NUTDJfUyAwCisjZGVmaW5lIFRJTVBBTklfQ0RDX0NPTVBfQ1RMMl9NIDB4RgorI2RlZmluZSBUSU1QQU5JX0NEQ19DT01QX0NUTDJfTElORU9VVF9JTl9NVVhfUyAyCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX0NEQ19DT01QX0NUTDJfTElORU9VVF9JTl9NVVhfTSAweEMKKyNkZWZpbmUgVElNUEFOSV9DRENfQ09NUF9DVEwyX0hQSF9JTl9NVVhfUyAwCisjZGVmaW5lIFRJTVBBTklfQ0RDX0NPTVBfQ1RMMl9IUEhfSU5fTVVYX00gMHgzCisjZGVmaW5lIFRJTVBBTklfQV9DRENfQ09NUF9QRUFLX01FVEVSICgweEU2KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9DRENfQ09NUF9QRUFLX01FVEVSX1JXQyAiUlciCisjZGVmaW5lIFRJTVBBTklfQ0RDX0NPTVBfUEVBS19NRVRFUl9QT1IgMHg5CisjZGVmaW5lIFRJTVBBTklfQ0RDX0NPTVBfUEVBS19NRVRFUl9TIDAKKyNkZWZpbmUgVElNUEFOSV9DRENfQ09NUF9QRUFLX01FVEVSX00gMHhGCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX0NEQ19DT01QX1BFQUtfTUVURVJfVElNRV9PVVRfUyAwCisjZGVmaW5lIFRJTVBBTklfQ0RDX0NPTVBfUEVBS19NRVRFUl9USU1FX09VVF9NIDB4RgorI2RlZmluZSBUSU1QQU5JX0FfQ0RDX0NPTVBfTEVWRUxfTUVURVJfQ1RMMSAoMHhFNykKKyNkZWZpbmUgVElNUEFOSV9DRENfQ09NUF9MRVZFTF9NRVRFUl9DVEwxX1JXQyAiUlciCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX0NEQ19DT01QX0xFVkVMX01FVEVSX0NUTDFfUE9SIDB4NworI2RlZmluZSBUSU1QQU5JX0NEQ19DT01QX0xFVkVMX01FVEVSX0NUTDFfUyAwCisjZGVmaW5lIFRJTVBBTklfQ0RDX0NPTVBfTEVWRUxfTUVURVJfQ1RMMV9NIDB4RgorI2RlZmluZSBUSU1QQU5JX0NEQ19DT01QX0xFVkVMX01FVEVSX0NUTDFfRElWX0ZBQ1RPUl9TIDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQ0RDX0NPTVBfTEVWRUxfTUVURVJfQ1RMMV9ESVZfRkFDVE9SX00gMHhGCisjZGVmaW5lIFRJTVBBTklfQV9DRENfQ09NUF9MRVZFTF9NRVRFUl9DVEwyICgweEU4KQorI2RlZmluZSBUSU1QQU5JX0NEQ19DT01QX0xFVkVMX01FVEVSX0NUTDJfUldDICJSVyIKKyNkZWZpbmUgVElNUEFOSV9DRENfQ09NUF9MRVZFTF9NRVRFUl9DVEwyX1BPUiAweDI4CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX0NEQ19DT01QX0xFVkVMX01FVEVSX0NUTDJfUyAwCisjZGVmaW5lIFRJTVBBTklfQ0RDX0NPTVBfTEVWRUxfTUVURVJfQ1RMMl9NIDB4RkYKKyNkZWZpbmUgVElNUEFOSV9DRENfQ09NUF9MRVZFTF9NRVRFUl9DVEwyX1JFU0FNUExFX1JBVEVfUyAwCisjZGVmaW5lIFRJTVBBTklfQ0RDX0NPTVBfTEVWRUxfTUVURVJfQ1RMMl9SRVNBTVBMRV9SQVRFX00gMHhGRgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9BX0NEQ19DT01QX1pPTkVfU0VMRUNUICgweEU5KQorI2RlZmluZSBUSU1QQU5JX0NEQ19DT01QX1pPTkVfU0VMRUNUX1JXQyAiUlciCisjZGVmaW5lIFRJTVBBTklfQ0RDX0NPTVBfWk9ORV9TRUxFQ1RfUE9SIDB4M2IKKyNkZWZpbmUgVElNUEFOSV9DRENfQ09NUF9aT05FX1NFTEVDVF9TIDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQ0RDX0NPTVBfWk9ORV9TRUxFQ1RfTSAweDdGCisjZGVmaW5lIFRJTVBBTklfQ0RDX0NPTVBfWk9ORV9TRUxFQ1RfRU5UUllfUyAzCisjZGVmaW5lIFRJTVBBTklfQ0RDX0NPTVBfWk9ORV9TRUxFQ1RfRU5UUllfTSAweDc4CisjZGVmaW5lIFRJTVBBTklfQ0RDX0NPTVBfWk9ORV9TRUxFQ1RfU0hJRlRfUyAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX0NEQ19DT01QX1pPTkVfU0VMRUNUX1NISUZUX00gMHg3CisjZGVmaW5lIFRJTVBBTklfQV9DRENfQ09NUF9aQ19NU0IgKDB4RUEpCisjZGVmaW5lIFRJTVBBTklfQ0RDX0NPTVBfWkNfTVNCX1JXQyAiUlciCisjZGVmaW5lIFRJTVBBTklfQ0RDX0NPTVBfWkNfTVNCX1BPUiAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX0NEQ19DT01QX1pDX01TQl9TIDAKKyNkZWZpbmUgVElNUEFOSV9DRENfQ09NUF9aQ19NU0JfTSAweDcKKyNkZWZpbmUgVElNUEFOSV9DRENfQ09NUF9aQ19NU0JfREVUX1dJTkRPV19TIDAKKyNkZWZpbmUgVElNUEFOSV9DRENfQ09NUF9aQ19NU0JfREVUX1dJTkRPV19NIDB4NworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9BX0NEQ19DT01QX1pDX0xTQiAoMHhFQikKKyNkZWZpbmUgVElNUEFOSV9DRENfQ09NUF9aQ19MU0JfUldDICJSVyIKKyNkZWZpbmUgVElNUEFOSV9DRENfQ09NUF9aQ19MU0JfUE9SIDB4MWYKKyNkZWZpbmUgVElNUEFOSV9DRENfQ09NUF9aQ19MU0JfUyAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUSU1QQU5JX0NEQ19DT01QX1pDX0xTQl9NIDB4RkYKKyNkZWZpbmUgVElNUEFOSV9DRENfQ09NUF9aQ19MU0JfREVUX1dJTkRPV19TIDAKKyNkZWZpbmUgVElNUEFOSV9DRENfQ09NUF9aQ19MU0JfREVUX1dJTkRPV19NIDB4RkYKKyNkZWZpbmUgVElNUEFOSV9BX0NEQ19DT01QX1NIVVRfRE9XTiAoMHhFQykKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQ0RDX0NPTVBfU0hVVF9ET1dOX1JXQyAiUlciCisjZGVmaW5lIFRJTVBBTklfQ0RDX0NPTVBfU0hVVF9ET1dOX1BPUiAweDFiCisjZGVmaW5lIFRJTVBBTklfQ0RDX0NPTVBfU0hVVF9ET1dOX1MgMAorI2RlZmluZSBUSU1QQU5JX0NEQ19DT01QX1NIVVRfRE9XTl9NIDB4M0YKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQ0RDX0NPTVBfU0hVVF9ET1dOX0hQSF9USU1FT1VUX1MgMworI2RlZmluZSBUSU1QQU5JX0NEQ19DT01QX1NIVVRfRE9XTl9IUEhfVElNRU9VVF9NIDB4MzgKKyNkZWZpbmUgVElNUEFOSV9DRENfQ09NUF9TSFVUX0RPV05fTE9fVElNRU9VVF9TIDAKKyNkZWZpbmUgVElNUEFOSV9DRENfQ09NUF9TSFVUX0RPV05fTE9fVElNRU9VVF9NIDB4NworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9BX0NEQ19DT01QX1NIVVRfRE9XTl9TVEFUVVMgKDB4RUQpCisjZGVmaW5lIFRJTVBBTklfQ0RDX0NPTVBfU0hVVF9ET1dOX1NUQVRVU19SV0MgIlJXIgorI2RlZmluZSBUSU1QQU5JX0NEQ19DT01QX1NIVVRfRE9XTl9TVEFUVVNfUE9SIDAKKyNkZWZpbmUgVElNUEFOSV9DRENfQ09NUF9TSFVUX0RPV05fU1RBVFVTX1MgMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9DRENfQ09NUF9TSFVUX0RPV05fU1RBVFVTX00gMHhGCisjZGVmaW5lIFRJTVBBTklfQ0RDX0NPTVBfU0hVVF9ET1dOX1NUQVRVU19MT19SX1MgMworI2RlZmluZSBUSU1QQU5JX0NEQ19DT01QX1NIVVRfRE9XTl9TVEFUVVNfTE9fUl9NIDB4OAorI2RlZmluZSBUSU1QQU5JX0NEQ19DT01QX1NIVVRfRE9XTl9TVEFUVVNfTE9fTF9TIDIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQ0RDX0NPTVBfU0hVVF9ET1dOX1NUQVRVU19MT19MX00gMHg0CisjZGVmaW5lIFRJTVBBTklfQ0RDX0NPTVBfU0hVVF9ET1dOX1NUQVRVU19IUEhfUl9TIDEKKyNkZWZpbmUgVElNUEFOSV9DRENfQ09NUF9TSFVUX0RPV05fU1RBVFVTX0hQSF9SX00gMHgyCisjZGVmaW5lIFRJTVBBTklfQ0RDX0NPTVBfU0hVVF9ET1dOX1NUQVRVU19IUEhfTF9TIDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTVBBTklfQ0RDX0NPTVBfU0hVVF9ET1dOX1NUQVRVU19IUEhfTF9NIDB4MQorI2RlZmluZSBUSU1QQU5JX0FfQ0RDX0NPTVBfSEFMVCAoMHhFRSkKKyNkZWZpbmUgVElNUEFOSV9DRENfQ09NUF9IQUxUX1JXQyAiUlciCisjZGVmaW5lIFRJTVBBTklfQ0RDX0NPTVBfSEFMVF9QT1IgMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNUEFOSV9DRENfQ09NUF9IQUxUX1MgMAorI2RlZmluZSBUSU1QQU5JX0NEQ19DT01QX0hBTFRfTSAweDEKKyNkZWZpbmUgVElNUEFOSV9DRENfQ09NUF9IQUxUX0NPTVBBTkRFUl9IQUxUX1MgMAorI2RlZmluZSBUSU1QQU5JX0NEQ19DT01QX0hBTFRfQ09NUEFOREVSX0hBTFRfTSAweDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9tZmQvd2NkOXh4eC93Y2Q5MzEwX3JlZ2lzdGVycy5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L21mZC93Y2Q5eHh4L3djZDkzMTBfcmVnaXN0ZXJzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODAzNTYyYgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9tZmQvd2NkOXh4eC93Y2Q5MzEwX3JlZ2lzdGVycy5oCkBAIC0wLDAgKzEsMTM4MCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBUQUJMQV9DT0RFQ19ESUdJVEFMX0gKKyNkZWZpbmUgVEFCTEFfQ09ERUNfRElHSVRBTF9ICisjaW5jbHVkZSA8bGludXgvbWZkL3djZDl4eHgvd2NkOXh4eF9yZWdpc3RlcnMuaD4KKyNkZWZpbmUgVEFCTEFfQV9DSElQX0NUTCBXQ0Q5WFhYX0FfQ0hJUF9DVEwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRBQkxBX0FfQ0hJUF9DVExfX1BPUiBXQ0Q5WFhYX0FfQ0hJUF9DVExfX1BPUgorI2RlZmluZSBUQUJMQV9BX0NISVBfU1RBVFVTIFdDRDlYWFhfQV9DSElQX1NUQVRVUworI2RlZmluZSBUQUJMQV9BX0NISVBfU1RBVFVTX19QT1IgV0NEOVhYWF9BX0NISVBfU1RBVFVTX19QT1IKKyNkZWZpbmUgVEFCTEFfQV9DSElQX0lEX0JZVEVfMCBXQ0Q5WFhYX0FfQ0hJUF9JRF9CWVRFXzAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRBQkxBX0FfQ0hJUF9JRF9CWVRFXzBfX1BPUiBXQ0Q5WFhYX0FfQ0hJUF9JRF9CWVRFXzBfX1BPUgorI2RlZmluZSBUQUJMQV9BX0NISVBfSURfQllURV8xIFdDRDlYWFhfQV9DSElQX0lEX0JZVEVfMQorI2RlZmluZSBUQUJMQV9BX0NISVBfSURfQllURV8xX19QT1IgV0NEOVhYWF9BX0NISVBfSURfQllURV8xX19QT1IKKyNkZWZpbmUgVEFCTEFfQV9DSElQX0lEX0JZVEVfMiBXQ0Q5WFhYX0FfQ0hJUF9JRF9CWVRFXzIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRBQkxBX0FfQ0hJUF9JRF9CWVRFXzJfX1BPUiBXQ0Q5WFhYX0FfQ0hJUF9JRF9CWVRFXzJfX1BPUgorI2RlZmluZSBUQUJMQV9BX0NISVBfSURfQllURV8zIFdDRDlYWFhfQV9DSElQX0lEX0JZVEVfMworI2RlZmluZSBUQUJMQV9BX0NISVBfSURfQllURV8zX19QT1IgV0NEOVhYWF9BX0NISVBfSURfQllURV8zX19QT1IKKyNkZWZpbmUgVEFCTEFfQV9DSElQX1ZFUlNJT04gV0NEOVhYWF9BX0NISVBfVkVSU0lPTgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVEFCTEFfQV9DSElQX1ZFUlNJT05fX1BPUiBXQ0Q5WFhYX0FfQ0hJUF9WRVJTSU9OX19QT1IKKyNkZWZpbmUgVEFCTEFfQV9TQl9WRVJTSU9OIFdDRDlYWFhfQV9TQl9WRVJTSU9OCisjZGVmaW5lIFRBQkxBX0FfU0JfVkVSU0lPTl9fUE9SIFdDRDlYWFhfQV9TQl9WRVJTSU9OX19QT1IKKyNkZWZpbmUgVEFCTEFfQV9TTEFWRV9JRF8xIFdDRDlYWFhfQV9TTEFWRV9JRF8xCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUQUJMQV9BX1NMQVZFX0lEXzFfX1BPUiBXQ0Q5WFhYX0FfU0xBVkVfSURfMV9fUE9SCisjZGVmaW5lIFRBQkxBX0FfU0xBVkVfSURfMiBXQ0Q5WFhYX0FfU0xBVkVfSURfMgorI2RlZmluZSBUQUJMQV9BX1NMQVZFX0lEXzJfX1BPUiBXQ0Q5WFhYX0FfU0xBVkVfSURfMl9fUE9SCisjZGVmaW5lIFRBQkxBX0FfU0xBVkVfSURfMyBXQ0Q5WFhYX0FfU0xBVkVfSURfMworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVEFCTEFfQV9TTEFWRV9JRF8zX19QT1IgV0NEOVhYWF9BX1NMQVZFX0lEXzNfX1BPUgorI2RlZmluZSBUQUJMQV9BX1BJTl9DVExfT0UwICgweDEwKQorI2RlZmluZSBUQUJMQV9BX1BJTl9DVExfT0UwX19QT1IgKDB4MDAwMDAwMDApCisjZGVmaW5lIFRBQkxBX0FfUElOX0NUTF9PRTEgKDB4MTEpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUQUJMQV9BX1BJTl9DVExfT0UxX19QT1IgKDB4MDAwMDAwMDApCisjZGVmaW5lIFRBQkxBX0FfUElOX0NUTF9EQVRBMCAoMHgxMikKKyNkZWZpbmUgVEFCTEFfQV9QSU5fQ1RMX0RBVEEwX19QT1IgKDB4MDAwMDAwMDApCisjZGVmaW5lIFRBQkxBX0FfUElOX0NUTF9EQVRBMSAoMHgxMykKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRBQkxBX0FfUElOX0NUTF9EQVRBMV9fUE9SICgweDAwMDAwMDAwKQorI2RlZmluZSBUQUJMQV9BX0hEUklWRV9HRU5FUklDICgweDE4KQorI2RlZmluZSBUQUJMQV9BX0hEUklWRV9HRU5FUklDX19QT1IgKDB4MDAwMDAwMDApCisjZGVmaW5lIFRBQkxBX0FfSERSSVZFX09WRVJSSURFICgweDE5KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVEFCTEFfQV9IRFJJVkVfT1ZFUlJJREVfX1BPUiAoMHgwMDAwMDAwOCkKKyNkZWZpbmUgVEFCTEFfQV9BTkFfQ1NSX1dBSVRfU1RBVEUgKDB4MjApCisjZGVmaW5lIFRBQkxBX0FfQU5BX0NTUl9XQUlUX1NUQVRFX19QT1IgKDB4MDAwMDAwNDQpCisjZGVmaW5lIFRBQkxBX0FfUFJPQ0VTU19NT05JVE9SX0NUTDAgKDB4NDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUQUJMQV9BX1BST0NFU1NfTU9OSVRPUl9DVEwwX19QT1IgKDB4MDAwMDAwODApCisjZGVmaW5lIFRBQkxBX0FfUFJPQ0VTU19NT05JVE9SX0NUTDEgKDB4NDEpCisjZGVmaW5lIFRBQkxBX0FfUFJPQ0VTU19NT05JVE9SX0NUTDFfX1BPUiAoMHgwMDAwMDAwMCkKKyNkZWZpbmUgVEFCTEFfQV9QUk9DRVNTX01PTklUT1JfQ1RMMiAoMHg0MikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRBQkxBX0FfUFJPQ0VTU19NT05JVE9SX0NUTDJfX1BPUiAoMHgwMDAwMDAwMCkKKyNkZWZpbmUgVEFCTEFfQV9QUk9DRVNTX01PTklUT1JfQ1RMMyAoMHg0MykKKyNkZWZpbmUgVEFCTEFfQV9QUk9DRVNTX01PTklUT1JfQ1RMM19fUE9SICgweDAwMDAwMDAxKQorI2RlZmluZSBUQUJMQV9BX1FGVVNFX0NUTCAoMHg0OCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRBQkxBX0FfUUZVU0VfQ1RMX19QT1IgKDB4MDAwMDAwMDApCisjZGVmaW5lIFRBQkxBX0FfUUZVU0VfU1RBVFVTICgweDQ5KQorI2RlZmluZSBUQUJMQV9BX1FGVVNFX1NUQVRVU19fUE9SICgweDAwMDAwMDAwKQorI2RlZmluZSBUQUJMQV9BX1FGVVNFX0RBVEFfT1VUMCAoMHg0QSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRBQkxBX0FfUUZVU0VfREFUQV9PVVQwX19QT1IgKDB4MDAwMDAwMDApCisjZGVmaW5lIFRBQkxBX0FfUUZVU0VfREFUQV9PVVQxICgweDRCKQorI2RlZmluZSBUQUJMQV9BX1FGVVNFX0RBVEFfT1VUMV9fUE9SICgweDAwMDAwMDAwKQorI2RlZmluZSBUQUJMQV9BX1FGVVNFX0RBVEFfT1VUMiAoMHg0QykKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRBQkxBX0FfUUZVU0VfREFUQV9PVVQyX19QT1IgKDB4MDAwMDAwMDApCisjZGVmaW5lIFRBQkxBX0FfUUZVU0VfREFUQV9PVVQzICgweDREKQorI2RlZmluZSBUQUJMQV9BX1FGVVNFX0RBVEFfT1VUM19fUE9SICgweDAwMDAwMDAwKQorI2RlZmluZSBUQUJMQV9BX0NEQ19DVEwgV0NEOVhYWF9BX0NEQ19DVEwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRBQkxBX0FfQ0RDX0NUTF9fUE9SIFdDRDlYWFhfQV9DRENfQ1RMX19QT1IKKyNkZWZpbmUgVEFCTEFfQV9MRUFLQUdFX0NUTCBXQ0Q5WFhYX0FfTEVBS0FHRV9DVEwKKyNkZWZpbmUgVEFCTEFfQV9MRUFLQUdFX0NUTF9fUE9SIFdDRDlYWFhfQV9MRUFLQUdFX0NUTF9fUE9SCisjZGVmaW5lIFRBQkxBX0FfSU5UUl9NT0RFICgweDkwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVEFCTEFfQV9JTlRSX01PREVfX1BPUiAoMHgwMDAwMDAwMCkKKyNkZWZpbmUgVEFCTEFfQV9JTlRSX01BU0swICgweDk0KQorI2RlZmluZSBUQUJMQV9BX0lOVFJfTUFTSzBfX1BPUiAoMHgwMDAwMDBmZikKKyNkZWZpbmUgVEFCTEFfQV9JTlRSX01BU0sxICgweDk1KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVEFCTEFfQV9JTlRSX01BU0sxX19QT1IgKDB4MDAwMDAwZmYpCisjZGVmaW5lIFRBQkxBX0FfSU5UUl9NQVNLMiAoMHg5NikKKyNkZWZpbmUgVEFCTEFfQV9JTlRSX01BU0syX19QT1IgKDB4MDAwMDAwZmYpCisjZGVmaW5lIFRBQkxBX0FfSU5UUl9TVEFUVVMwICgweDk4KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVEFCTEFfQV9JTlRSX1NUQVRVUzBfX1BPUiAoMHgwMDAwMDAwMCkKKyNkZWZpbmUgVEFCTEFfQV9JTlRSX1NUQVRVUzEgKDB4OTkpCisjZGVmaW5lIFRBQkxBX0FfSU5UUl9TVEFUVVMxX19QT1IgKDB4MDAwMDAwMDApCisjZGVmaW5lIFRBQkxBX0FfSU5UUl9TVEFUVVMyICgweDlBKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVEFCTEFfQV9JTlRSX1NUQVRVUzJfX1BPUiAoMHgwMDAwMDAwMCkKKyNkZWZpbmUgVEFCTEFfQV9JTlRSX0NMRUFSMCAoMHg5QykKKyNkZWZpbmUgVEFCTEFfQV9JTlRSX0NMRUFSMF9fUE9SICgweDAwMDAwMDAwKQorI2RlZmluZSBUQUJMQV9BX0lOVFJfQ0xFQVIxICgweDlEKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVEFCTEFfQV9JTlRSX0NMRUFSMV9fUE9SICgweDAwMDAwMDAwKQorI2RlZmluZSBUQUJMQV9BX0lOVFJfQ0xFQVIyICgweDlFKQorI2RlZmluZSBUQUJMQV9BX0lOVFJfQ0xFQVIyX19QT1IgKDB4MDAwMDAwMDApCisjZGVmaW5lIFRBQkxBX0FfSU5UUl9MRVZFTDAgKDB4QTApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUQUJMQV9BX0lOVFJfTEVWRUwwX19QT1IgKDB4MDAwMDAwMDEpCisjZGVmaW5lIFRBQkxBX0FfSU5UUl9MRVZFTDEgKDB4QTEpCisjZGVmaW5lIFRBQkxBX0FfSU5UUl9MRVZFTDFfX1BPUiAoMHgwMDAwMDAwMCkKKyNkZWZpbmUgVEFCTEFfQV9JTlRSX0xFVkVMMiAoMHhBMikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRBQkxBX0FfSU5UUl9MRVZFTDJfX1BPUiAoMHgwMDAwMDAwMCkKKyNkZWZpbmUgVEFCTEFfQV9JTlRSX1RFU1QwICgweEE0KQorI2RlZmluZSBUQUJMQV9BX0lOVFJfVEVTVDBfX1BPUiAoMHgwMDAwMDAwMCkKKyNkZWZpbmUgVEFCTEFfQV9JTlRSX1RFU1QxICgweEE1KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVEFCTEFfQV9JTlRSX1RFU1QxX19QT1IgKDB4MDAwMDAwMDApCisjZGVmaW5lIFRBQkxBX0FfSU5UUl9URVNUMiAoMHhBNikKKyNkZWZpbmUgVEFCTEFfQV9JTlRSX1RFU1QyX19QT1IgKDB4MDAwMDAwMDApCisjZGVmaW5lIFRBQkxBX0FfSU5UUl9TRVQwICgweEE4KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVEFCTEFfQV9JTlRSX1NFVDBfX1BPUiAoMHgwMDAwMDAwMCkKKyNkZWZpbmUgVEFCTEFfQV9JTlRSX1NFVDEgKDB4QTkpCisjZGVmaW5lIFRBQkxBX0FfSU5UUl9TRVQxX19QT1IgKDB4MDAwMDAwMDApCisjZGVmaW5lIFRBQkxBX0FfSU5UUl9TRVQyICgweEFBKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVEFCTEFfQV9JTlRSX1NFVDJfX1BPUiAoMHgwMDAwMDAwMCkKKyNkZWZpbmUgVEFCTEFfQV9DRENfVFhfSTJTX1NDS19NT0RFICgweEMwKQorI2RlZmluZSBUQUJMQV9BX0NEQ19UWF9JMlNfU0NLX01PREVfX1BPUiAoMHgwMDAwMDAwMCkKKyNkZWZpbmUgVEFCTEFfQV9DRENfVFhfSTJTX1dTX01PREUgKDB4QzEpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUQUJMQV9BX0NEQ19UWF9JMlNfV1NfTU9ERV9fUE9SICgweDAwMDAwMDAwKQorI2RlZmluZSBUQUJMQV9BX0NEQ19ETUlDX0RBVEEwX01PREUgKDB4QzQpCisjZGVmaW5lIFRBQkxBX0FfQ0RDX0RNSUNfREFUQTBfTU9ERV9fUE9SICgweDAwMDAwMDAwKQorI2RlZmluZSBUQUJMQV9BX0NEQ19ETUlDX0NMSzBfTU9ERSAoMHhDNSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRBQkxBX0FfQ0RDX0RNSUNfQ0xLMF9NT0RFX19QT1IgKDB4MDAwMDAwMDApCisjZGVmaW5lIFRBQkxBX0FfQ0RDX0RNSUNfREFUQTFfTU9ERSAoMHhDNikKKyNkZWZpbmUgVEFCTEFfQV9DRENfRE1JQ19EQVRBMV9NT0RFX19QT1IgKDB4MDAwMDAwMDApCisjZGVmaW5lIFRBQkxBX0FfQ0RDX0RNSUNfQ0xLMV9NT0RFICgweEM3KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVEFCTEFfQV9DRENfRE1JQ19DTEsxX01PREVfX1BPUiAoMHgwMDAwMDAwMCkKKyNkZWZpbmUgVEFCTEFfQV9DRENfUlhfSTJTX1NDS19NT0RFICgweEM4KQorI2RlZmluZSBUQUJMQV9BX0NEQ19SWF9JMlNfU0NLX01PREVfX1BPUiAoMHgwMDAwMDAwMCkKKyNkZWZpbmUgVEFCTEFfQV9DRENfUlhfSTJTX1dTX01PREUgKDB4QzkpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUQUJMQV9BX0NEQ19SWF9JMlNfV1NfTU9ERV9fUE9SICgweDAwMDAwMDAwKQorI2RlZmluZSBUQUJMQV9BX0NEQ19ETUlDX0RBVEEyX01PREUgKDB4Q0EpCisjZGVmaW5lIFRBQkxBX0FfQ0RDX0RNSUNfREFUQTJfTU9ERV9fUE9SICgweDAwMDAwMDAwKQorI2RlZmluZSBUQUJMQV9BX0NEQ19ETUlDX0NMSzJfTU9ERSAoMHhDQikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRBQkxBX0FfQ0RDX0RNSUNfQ0xLMl9NT0RFX19QT1IgKDB4MDAwMDAwMDApCisjZGVmaW5lIFRBQkxBX0FfQ0RDX0lOVFJfTU9ERSAoMHhDQykKKyNkZWZpbmUgVEFCTEFfQV9DRENfSU5UUl9NT0RFX19QT1IgKDB4MDAwMDAwMDApCisjZGVmaW5lIFRBQkxBX0FfQklBU19SRUZfQ1RMICgweDAxMDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUQUJMQV9BX0JJQVNfUkVGX0NUTF9fUE9SICgweDAwMDAwMDFDKQorI2RlZmluZSBUQUJMQV9BX0JJQVNfQ0VOVFJBTF9CR19DVEwgKDB4MDEwMSkKKyNkZWZpbmUgVEFCTEFfQV9CSUFTX0NFTlRSQUxfQkdfQ1RMX19QT1IgKDB4MDAwMDAwNTApCisjZGVmaW5lIFRBQkxBX0FfQklBU19QUkVDSFJHX0NUTCAoMHgwMTAyKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVEFCTEFfQV9CSUFTX1BSRUNIUkdfQ1RMX19QT1IgKDB4MDAwMDAwMDcpCisjZGVmaW5lIFRBQkxBX0FfQklBU19DVVJSX0NUTF8xICgweDAxMDMpCisjZGVmaW5lIFRBQkxBX0FfQklBU19DVVJSX0NUTF8xX19QT1IgKDB4MDAwMDAwNTIpCisjZGVmaW5lIFRBQkxBX0FfQklBU19DVVJSX0NUTF8yICgweDAxMDQpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUQUJMQV9BX0JJQVNfQ1VSUl9DVExfMl9fUE9SICgweDAwMDAwMDAwKQorI2RlZmluZSBUQUJMQV9BX0JJQVNfQ09ORklHX01PREVfQkdfQ1RMICgweDAxMDUpCisjZGVmaW5lIFRBQkxBX0FfQklBU19DT05GSUdfTU9ERV9CR19DVExfX1BPUiAoMHgwMDAwMDAxNikKKyNkZWZpbmUgVEFCTEFfQV9CSUFTX0JHX1NUQVRVUyAoMHgwMTA2KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVEFCTEFfQV9CSUFTX0JHX1NUQVRVU19fUE9SICgweDAwMDAwMDAwKQorI2RlZmluZSBUQUJMQV9BX0NMS19CVUZGX0VOMSAoMHgwMTA4KQorI2RlZmluZSBUQUJMQV9BX0NMS19CVUZGX0VOMV9fUE9SICgweDAwMDAwMDA0KQorI2RlZmluZSBUQUJMQV9BX0NMS19CVUZGX0VOMiAoMHgwMTA5KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVEFCTEFfQV9DTEtfQlVGRl9FTjJfX1BPUiAoMHgwMDAwMDAwMikKKyNkZWZpbmUgVEFCTEFfQV9MRE9fSF9NT0RFXzEgKDB4MDExMCkKKyNkZWZpbmUgVEFCTEFfQV9MRE9fSF9NT0RFXzFfX1BPUiAoMHgwMDAwMDA2NSkKKyNkZWZpbmUgVEFCTEFfQV9MRE9fSF9NT0RFXzIgKDB4MDExMSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRBQkxBX0FfTERPX0hfTU9ERV8yX19QT1IgKDB4MDAwMDAwQTgpCisjZGVmaW5lIFRBQkxBX0FfTERPX0hfTE9PUF9DVEwgKDB4MDExMikKKyNkZWZpbmUgVEFCTEFfQV9MRE9fSF9MT09QX0NUTF9fUE9SICgweDAwMDAwMDZCKQorI2RlZmluZSBUQUJMQV9BX0xET19IX0NPTVBfMSAoMHgwMTEzKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVEFCTEFfQV9MRE9fSF9DT01QXzFfX1BPUiAoMHgwMDAwMDA4NCkKKyNkZWZpbmUgVEFCTEFfQV9MRE9fSF9DT01QXzIgKDB4MDExNCkKKyNkZWZpbmUgVEFCTEFfQV9MRE9fSF9DT01QXzJfX1BPUiAoMHgwMDAwMDBFMCkKKyNkZWZpbmUgVEFCTEFfQV9MRE9fSF9CSUFTXzEgKDB4MDExNSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRBQkxBX0FfTERPX0hfQklBU18xX19QT1IgKDB4MDAwMDAwNkQpCisjZGVmaW5lIFRBQkxBX0FfTERPX0hfQklBU18yICgweDAxMTYpCisjZGVmaW5lIFRBQkxBX0FfTERPX0hfQklBU18yX19QT1IgKDB4MDAwMDAwQTUpCisjZGVmaW5lIFRBQkxBX0FfTERPX0hfQklBU18zICgweDAxMTcpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUQUJMQV9BX0xET19IX0JJQVNfM19fUE9SICgweDAwMDAwMDYwKQorI2RlZmluZSBUQUJMQV9BX0xET19MX01PREVfMSAoMHgwMTE4KQorI2RlZmluZSBUQUJMQV9BX0xET19MX01PREVfMV9fUE9SICgweDAwMDAwMDI4KQorI2RlZmluZSBUQUJMQV9BX0xET19MX01PREVfMiAoMHgwMTE5KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVEFCTEFfQV9MRE9fTF9NT0RFXzJfX1BPUiAoMHgwMDAwMDBBOCkKKyNkZWZpbmUgVEFCTEFfQV9MRE9fTF9MT09QX0NUTCAoMHgwMTFBKQorI2RlZmluZSBUQUJMQV9BX0xET19MX0xPT1BfQ1RMX19QT1IgKDB4MDAwMDAwNkQpCisjZGVmaW5lIFRBQkxBX0FfTERPX0xfQ09NUF8xICgweDAxMUIpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUQUJMQV9BX0xET19MX0NPTVBfMV9fUE9SICgweDAwMDAwMDMxKQorI2RlZmluZSBUQUJMQV9BX0xET19MX0NPTVBfMiAoMHgwMTFDKQorI2RlZmluZSBUQUJMQV9BX0xET19MX0NPTVBfMl9fUE9SICgweDAwMDAwMEEwKQorI2RlZmluZSBUQUJMQV9BX0xET19MX0JJQVNfMSAoMHgwMTFEKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVEFCTEFfQV9MRE9fTF9CSUFTXzFfX1BPUiAoMHgwMDAwMDA2RCkKKyNkZWZpbmUgVEFCTEFfQV9MRE9fTF9CSUFTXzIgKDB4MDExRSkKKyNkZWZpbmUgVEFCTEFfQV9MRE9fTF9CSUFTXzJfX1BPUiAoMHgwMDAwMDA2NSkKKyNkZWZpbmUgVEFCTEFfQV9MRE9fTF9CSUFTXzMgKDB4MDExRikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRBQkxBX0FfTERPX0xfQklBU18zX19QT1IgKDB4MDAwMDAwNTApCisjZGVmaW5lIFRBQkxBX0FfTUlDQl9DRklMVF8xX0NUTCAoMHgwMTI4KQorI2RlZmluZSBUQUJMQV9BX01JQ0JfQ0ZJTFRfMV9DVExfX1BPUiAoMHgwMDAwMDA0MCkKKyNkZWZpbmUgVEFCTEFfQV9NSUNCX0NGSUxUXzFfVkFMICgweDAxMjkpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUQUJMQV9BX01JQ0JfQ0ZJTFRfMV9WQUxfX1BPUiAoMHgwMDAwMDA4MCkKKyNkZWZpbmUgVEFCTEFfQV9NSUNCX0NGSUxUXzFfUFJFQ0hSRyAoMHgwMTJBKQorI2RlZmluZSBUQUJMQV9BX01JQ0JfQ0ZJTFRfMV9QUkVDSFJHX19QT1IgKDB4MDAwMDAwMzgpCisjZGVmaW5lIFRBQkxBX0FfTUlDQl8xX0NUTCAoMHgwMTJCKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVEFCTEFfQV9NSUNCXzFfQ1RMX19QT1IgKDB4MDAwMDAwMTYpCisjZGVmaW5lIFRBQkxBX0FfTUlDQl8xX0lOVF9SQklBUyAoMHgwMTJDKQorI2RlZmluZSBUQUJMQV9BX01JQ0JfMV9JTlRfUkJJQVNfX1BPUiAoMHgwMDAwMDAwMCkKKyNkZWZpbmUgVEFCTEFfQV9NSUNCXzFfTUJIQyAoMHgwMTJEKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVEFCTEFfQV9NSUNCXzFfTUJIQ19fUE9SICgweDAwMDAwMDAxKQorI2RlZmluZSBUQUJMQV9BX01JQ0JfQ0ZJTFRfMl9DVEwgKDB4MDEyRSkKKyNkZWZpbmUgVEFCTEFfQV9NSUNCX0NGSUxUXzJfQ1RMX19QT1IgKDB4MDAwMDAwNDApCisjZGVmaW5lIFRBQkxBX0FfTUlDQl9DRklMVF8yX1ZBTCAoMHgwMTJGKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVEFCTEFfQV9NSUNCX0NGSUxUXzJfVkFMX19QT1IgKDB4MDAwMDAwODApCisjZGVmaW5lIFRBQkxBX0FfTUlDQl9DRklMVF8yX1BSRUNIUkcgKDB4MDEzMCkKKyNkZWZpbmUgVEFCTEFfQV9NSUNCX0NGSUxUXzJfUFJFQ0hSR19fUE9SICgweDAwMDAwMDM4KQorI2RlZmluZSBUQUJMQV9BX01JQ0JfMl9DVEwgKDB4MDEzMSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRBQkxBX0FfTUlDQl8yX0NUTF9fUE9SICgweDAwMDAwMDE2KQorI2RlZmluZSBUQUJMQV9BX01JQ0JfMl9JTlRfUkJJQVMgKDB4MDEzMikKKyNkZWZpbmUgVEFCTEFfQV9NSUNCXzJfSU5UX1JCSUFTX19QT1IgKDB4MDAwMDAwMDApCisjZGVmaW5lIFRBQkxBX0FfTUlDQl8yX01CSEMgKDB4MDEzMykKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRBQkxBX0FfTUlDQl8yX01CSENfX1BPUiAoMHgwMDAwMDAwMCkKKyNkZWZpbmUgVEFCTEFfQV9NSUNCX0NGSUxUXzNfQ1RMICgweDAxMzQpCisjZGVmaW5lIFRBQkxBX0FfTUlDQl9DRklMVF8zX0NUTF9fUE9SICgweDAwMDAwMDQwKQorI2RlZmluZSBUQUJMQV9BX01JQ0JfQ0ZJTFRfM19WQUwgKDB4MDEzNSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRBQkxBX0FfTUlDQl9DRklMVF8zX1ZBTF9fUE9SICgweDAwMDAwMDgwKQorI2RlZmluZSBUQUJMQV9BX01JQ0JfQ0ZJTFRfM19QUkVDSFJHICgweDAxMzYpCisjZGVmaW5lIFRBQkxBX0FfTUlDQl9DRklMVF8zX1BSRUNIUkdfX1BPUiAoMHgwMDAwMDAzOCkKKyNkZWZpbmUgVEFCTEFfQV9NSUNCXzNfQ1RMICgweDAxMzcpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUQUJMQV9BX01JQ0JfM19DVExfX1BPUiAoMHgwMDAwMDAxNikKKyNkZWZpbmUgVEFCTEFfQV9NSUNCXzNfSU5UX1JCSUFTICgweDAxMzgpCisjZGVmaW5lIFRBQkxBX0FfTUlDQl8zX0lOVF9SQklBU19fUE9SICgweDAwMDAwMDAwKQorI2RlZmluZSBUQUJMQV9BX01JQ0JfM19NQkhDICgweDAxMzkpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUQUJMQV9BX01JQ0JfM19NQkhDX19QT1IgKDB4MDAwMDAwMDApCisjZGVmaW5lIFRBQkxBXzFfQV9NSUNCXzRfQ1RMICgweDAxM0EpCisjZGVmaW5lIFRBQkxBXzJfQV9NSUNCXzRfQ1RMICgweDAxM0QpCisjZGVmaW5lIFRBQkxBX0FfTUlDQl80X0NUTF9fUE9SICgweDAwMDAwMDE2KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVEFCTEFfMV9BX01JQ0JfNF9JTlRfUkJJQVMgKDB4MDEzQikKKyNkZWZpbmUgVEFCTEFfMl9BX01JQ0JfNF9JTlRfUkJJQVMgKDB4MDEzRSkKKyNkZWZpbmUgVEFCTEFfQV9NSUNCXzRfSU5UX1JCSUFTX19QT1IgKDB4MDAwMDAwMDApCisjZGVmaW5lIFRBQkxBXzFfQV9NSUNCXzRfTUJIQyAoMHgwMTNDKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVEFCTEFfMl9BX01JQ0JfNF9NQkhDICgweDAxM0YpCisjZGVmaW5lIFRBQkxBX0FfTUlDQl80X01CSENfX1BPUiAoMHgwMDAwMDAwMSkKKyNkZWZpbmUgVEFCTEFfQV9UWF9DT01fQklBUyAoMHgwMTRDKQorI2RlZmluZSBUQUJMQV9BX1RYX0NPTV9CSUFTX19QT1IgKDB4MDAwMDAwRTApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUQUJMQV9BX01CSENfU0NBTElOR19NVVhfMSAoMHgwMTRFKQorI2RlZmluZSBUQUJMQV9BX01CSENfU0NBTElOR19NVVhfMV9fUE9SICgweDAwMDAwMDAwKQorI2RlZmluZSBUQUJMQV9BX01CSENfU0NBTElOR19NVVhfMiAoMHgwMTRGKQorI2RlZmluZSBUQUJMQV9BX01CSENfU0NBTElOR19NVVhfMl9fUE9SICgweDAwMDAwMDgwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVEFCTEFfQV9UWF9TVVBfU1dJVENIX0NUUkxfMSAoMHgwMTUxKQorI2RlZmluZSBUQUJMQV9BX1RYX1NVUF9TV0lUQ0hfQ1RSTF8xX19QT1IgKDB4MDAwMDAwMDApCisjZGVmaW5lIFRBQkxBX0FfVFhfU1VQX1NXSVRDSF9DVFJMXzIgKDB4MDE1MikKKyNkZWZpbmUgVEFCTEFfQV9UWF9TVVBfU1dJVENIX0NUUkxfMl9fUE9SICgweDAwMDAwMDgwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVEFCTEFfQV9UWF8xXzJfRU4gKDB4MDE1MykKKyNkZWZpbmUgVEFCTEFfQV9UWF8xXzJfRU5fX1BPUiAoMHgwMDAwMDAwMCkKKyNkZWZpbmUgVEFCTEFfQV9UWF8xXzJfVEVTVF9FTiAoMHgwMTU0KQorI2RlZmluZSBUQUJMQV9BX1RYXzFfMl9URVNUX0VOX19QT1IgKDB4MDAwMDAwQ0MpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUQUJMQV9BX1RYXzFfMl9BRENfQ0gxICgweDAxNTUpCisjZGVmaW5lIFRBQkxBX0FfVFhfMV8yX0FEQ19DSDFfX1BPUiAoMHgwMDAwMDA0NCkKKyNkZWZpbmUgVEFCTEFfQV9UWF8xXzJfQURDX0NIMiAoMHgwMTU2KQorI2RlZmluZSBUQUJMQV9BX1RYXzFfMl9BRENfQ0gyX19QT1IgKDB4MDAwMDAwNDQpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUQUJMQV9BX1RYXzFfMl9BVEVTVF9SRUZDVFJMICgweDAxNTcpCisjZGVmaW5lIFRBQkxBX0FfVFhfMV8yX0FURVNUX1JFRkNUUkxfX1BPUiAoMHgwMDAwMDAwMCkKKyNkZWZpbmUgVEFCTEFfQV9UWF8xXzJfVEVTVF9DVEwgKDB4MDE1OCkKKyNkZWZpbmUgVEFCTEFfQV9UWF8xXzJfVEVTVF9DVExfX1BPUiAoMHgwMDAwMDAzOCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRBQkxBX0FfVFhfMV8yX1RFU1RfQkxPQ0tfRU4gKDB4MDE1OSkKKyNkZWZpbmUgVEFCTEFfQV9UWF8xXzJfVEVTVF9CTE9DS19FTl9fUE9SICgweDAwMDAwMEZGKQorI2RlZmluZSBUQUJMQV9BX1RYXzFfMl9UWEZFX0NMS0RJViAoMHgwMTVBKQorI2RlZmluZSBUQUJMQV9BX1RYXzFfMl9UWEZFX0NMS0RJVl9fUE9SICgweDAwMDAwMEVFKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVEFCTEFfQV9UWF8xXzJfU0FSX0VSUl9DSDEgKDB4MDE1QikKKyNkZWZpbmUgVEFCTEFfQV9UWF8xXzJfU0FSX0VSUl9DSDFfX1BPUiAoMHgwMDAwMDAwMCkKKyNkZWZpbmUgVEFCTEFfQV9UWF8xXzJfU0FSX0VSUl9DSDIgKDB4MDE1QykKKyNkZWZpbmUgVEFCTEFfQV9UWF8xXzJfU0FSX0VSUl9DSDJfX1BPUiAoMHgwMDAwMDAwMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRBQkxBX0FfVFhfM180X0VOICgweDAxNUQpCisjZGVmaW5lIFRBQkxBX0FfVFhfM180X0VOX19QT1IgKDB4MDAwMDAwMDApCisjZGVmaW5lIFRBQkxBX0FfVFhfM180X1RFU1RfRU4gKDB4MDE1RSkKKyNkZWZpbmUgVEFCTEFfQV9UWF8zXzRfVEVTVF9FTl9fUE9SICgweDAwMDAwMENDKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVEFCTEFfQV9UWF8zXzRfQURDX0NIMyAoMHgwMTVGKQorI2RlZmluZSBUQUJMQV9BX1RYXzNfNF9BRENfQ0gzX19QT1IgKDB4MDAwMDAwNDQpCisjZGVmaW5lIFRBQkxBX0FfVFhfM180X0FEQ19DSDQgKDB4MDE2MCkKKyNkZWZpbmUgVEFCTEFfQV9UWF8zXzRfQURDX0NINF9fUE9SICgweDAwMDAwMDQ0KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVEFCTEFfQV9UWF8zXzRfQVRFU1RfUkVGQ1RSTCAoMHgwMTYxKQorI2RlZmluZSBUQUJMQV9BX1RYXzNfNF9BVEVTVF9SRUZDVFJMX19QT1IgKDB4MDAwMDAwMDApCisjZGVmaW5lIFRBQkxBX0FfVFhfM180X1RFU1RfQ1RMICgweDAxNjIpCisjZGVmaW5lIFRBQkxBX0FfVFhfM180X1RFU1RfQ1RMX19QT1IgKDB4MDAwMDAwMzgpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUQUJMQV9BX1RYXzNfNF9URVNUX0JMT0NLX0VOICgweDAxNjMpCisjZGVmaW5lIFRBQkxBX0FfVFhfM180X1RFU1RfQkxPQ0tfRU5fX1BPUiAoMHgwMDAwMDBGRikKKyNkZWZpbmUgVEFCTEFfQV9UWF8zXzRfVFhGRV9DS0RJViAoMHgwMTY0KQorI2RlZmluZSBUQUJMQV9BX1RYXzNfNF9UWEZFX0NLRElWX19QT1IgKDB4MDAwMDAwRUUpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUQUJMQV9BX1RYXzNfNF9TQVJfRVJSX0NIMyAoMHgwMTY1KQorI2RlZmluZSBUQUJMQV9BX1RYXzNfNF9TQVJfRVJSX0NIM19fUE9SICgweDAwMDAwMDAwKQorI2RlZmluZSBUQUJMQV9BX1RYXzNfNF9TQVJfRVJSX0NINCAoMHgwMTY2KQorI2RlZmluZSBUQUJMQV9BX1RYXzNfNF9TQVJfRVJSX0NINF9fUE9SICgweDAwMDAwMDAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVEFCTEFfQV9UWF81XzZfRU4gKDB4MDE2NykKKyNkZWZpbmUgVEFCTEFfQV9UWF81XzZfRU5fX1BPUiAoMHgwMDAwMDAxMSkKKyNkZWZpbmUgVEFCTEFfQV9UWF81XzZfVEVTVF9FTiAoMHgwMTY4KQorI2RlZmluZSBUQUJMQV9BX1RYXzVfNl9URVNUX0VOX19QT1IgKDB4MDAwMDAwQ0MpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUQUJMQV9BX1RYXzVfNl9BRENfQ0g1ICgweDAxNjkpCisjZGVmaW5lIFRBQkxBX0FfVFhfNV82X0FEQ19DSDVfX1BPUiAoMHgwMDAwMDA0NCkKKyNkZWZpbmUgVEFCTEFfQV9UWF81XzZfQURDX0NINiAoMHgwMTZBKQorI2RlZmluZSBUQUJMQV9BX1RYXzVfNl9BRENfQ0g2X19QT1IgKDB4MDAwMDAwNDQpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUQUJMQV9BX1RYXzVfNl9BVEVTVF9SRUZDVFJMICgweDAxNkIpCisjZGVmaW5lIFRBQkxBX0FfVFhfNV82X0FURVNUX1JFRkNUUkxfX1BPUiAoMHgwMDAwMDAwMCkKKyNkZWZpbmUgVEFCTEFfQV9UWF81XzZfVEVTVF9DVEwgKDB4MDE2QykKKyNkZWZpbmUgVEFCTEFfQV9UWF81XzZfVEVTVF9DVExfX1BPUiAoMHgwMDAwMDAzOCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRBQkxBX0FfVFhfNV82X1RFU1RfQkxPQ0tfRU4gKDB4MDE2RCkKKyNkZWZpbmUgVEFCTEFfQV9UWF81XzZfVEVTVF9CTE9DS19FTl9fUE9SICgweDAwMDAwMEZGKQorI2RlZmluZSBUQUJMQV9BX1RYXzVfNl9UWEZFX0NLRElWICgweDAxNkUpCisjZGVmaW5lIFRBQkxBX0FfVFhfNV82X1RYRkVfQ0tESVZfX1BPUiAoMHgwMDAwMDBFRSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRBQkxBX0FfVFhfNV82X1NBUl9FUlJfQ0g1ICgweDAxNkYpCisjZGVmaW5lIFRBQkxBX0FfVFhfNV82X1NBUl9FUlJfQ0g1X19QT1IgKDB4MDAwMDAwMDApCisjZGVmaW5lIFRBQkxBX0FfVFhfNV82X1NBUl9FUlJfQ0g2ICgweDAxNzApCisjZGVmaW5lIFRBQkxBX0FfVFhfNV82X1NBUl9FUlJfQ0g2X19QT1IgKDB4MDAwMDAwMDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUQUJMQV9BX1RYXzdfTUJIQ19FTiAoMHgwMTcxKQorI2RlZmluZSBUQUJMQV9BX1RYXzdfTUJIQ19FTl9fUE9SICgweDAwMDAwMDBDKQorI2RlZmluZSBUQUJMQV9BX1RYXzdfTUJIQ19BVEVTVF9SRUZDVFJMICgweDAxNzIpCisjZGVmaW5lIFRBQkxBX0FfVFhfN19NQkhDX0FURVNUX1JFRkNUUkxfX1BPUiAoMHgwMDAwMDAwMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRBQkxBX0FfVFhfN19NQkhDX0FEQyAoMHgwMTczKQorI2RlZmluZSBUQUJMQV9BX1RYXzdfTUJIQ19BRENfX1BPUiAoMHgwMDAwMDA0NCkKKyNkZWZpbmUgVEFCTEFfQV9UWF83X01CSENfVEVTVF9DVEwgKDB4MDE3NCkKKyNkZWZpbmUgVEFCTEFfQV9UWF83X01CSENfVEVTVF9DVExfX1BPUiAoMHgwMDAwMDAzOCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRBQkxBX0FfVFhfN19NQkhDX1NBUl9FUlIgKDB4MDE3NSkKKyNkZWZpbmUgVEFCTEFfQV9UWF83X01CSENfU0FSX0VSUl9fUE9SICgweDAwMDAwMDAwKQorI2RlZmluZSBUQUJMQV9BX1RYXzdfVFhGRV9DTEtESVYgKDB4MDE3NikKKyNkZWZpbmUgVEFCTEFfQV9UWF83X1RYRkVfQ0xLRElWX19QT1IgKDB4MDAwMDAwMUMpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUQUJMQV9BX0FVWF9DT01fQ1RMICgweDAxODApCisjZGVmaW5lIFRBQkxBX0FfQVVYX0NPTV9DVExfX1BPUiAoMHgwMDAwMDAzNCkKKyNkZWZpbmUgVEFCTEFfQV9BVVhfQ09NX0FURVNUICgweDAxODEpCisjZGVmaW5lIFRBQkxBX0FfQVVYX0NPTV9BVEVTVF9fUE9SICgweDAwMDAwMDAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVEFCTEFfQV9BVVhfTF9FTiAoMHgwMTgyKQorI2RlZmluZSBUQUJMQV9BX0FVWF9MX0VOX19QT1IgKDB4MDAwMDAwMDApCisjZGVmaW5lIFRBQkxBX0FfQVVYX0xfR0FJTiAoMHgwMTgzKQorI2RlZmluZSBUQUJMQV9BX0FVWF9MX0dBSU5fX1BPUiAoMHgwMDAwMDAxRikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRBQkxBX0FfQVVYX0xfUEFfQ09OTiAoMHgwMTg0KQorI2RlZmluZSBUQUJMQV9BX0FVWF9MX1BBX0NPTk5fX1BPUiAoMHgwMDAwMDAwMCkKKyNkZWZpbmUgVEFCTEFfQV9BVVhfTF9QQV9DT05OX0lOViAoMHgwMTg1KQorI2RlZmluZSBUQUJMQV9BX0FVWF9MX1BBX0NPTk5fSU5WX19QT1IgKDB4MDAwMDAwMDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUQUJMQV9BX0FVWF9SX0VOICgweDAxODYpCisjZGVmaW5lIFRBQkxBX0FfQVVYX1JfRU5fX1BPUiAoMHgwMDAwMDAwMCkKKyNkZWZpbmUgVEFCTEFfQV9BVVhfUl9HQUlOICgweDAxODcpCisjZGVmaW5lIFRBQkxBX0FfQVVYX1JfR0FJTl9fUE9SICgweDAwMDAwMDFGKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVEFCTEFfQV9BVVhfUl9QQV9DT05OICgweDAxODgpCisjZGVmaW5lIFRBQkxBX0FfQVVYX1JfUEFfQ09OTl9fUE9SICgweDAwMDAwMDAwKQorI2RlZmluZSBUQUJMQV9BX0FVWF9SX1BBX0NPTk5fSU5WICgweDAxODkpCisjZGVmaW5lIFRBQkxBX0FfQVVYX1JfUEFfQ09OTl9JTlZfX1BPUiAoMHgwMDAwMDAwMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRBQkxBX0FfQ1BfRU4gKDB4MDE5MikKKyNkZWZpbmUgVEFCTEFfQV9DUF9FTl9fUE9SICgweDAwMDAwMEU2KQorI2RlZmluZSBUQUJMQV9BX0NQX0NMSyAoMHgwMTkzKQorI2RlZmluZSBUQUJMQV9BX0NQX0NMS19fUE9SICgweDAwMDAwMDI5KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVEFCTEFfQV9DUF9TVEFUSUMgKDB4MDE5NCkKKyNkZWZpbmUgVEFCTEFfQV9DUF9TVEFUSUNfX1BPUiAoMHgwMDAwMDAxMCkKKyNkZWZpbmUgVEFCTEFfQV9DUF9EQ0MxICgweDAxOTUpCisjZGVmaW5lIFRBQkxBX0FfQ1BfRENDMV9fUE9SICgweDAwMDAwMDUyKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVEFCTEFfQV9DUF9EQ0MzICgweDAxOTYpCisjZGVmaW5lIFRBQkxBX0FfQ1BfRENDM19fUE9SICgweDAwMDAwMDAxKQorI2RlZmluZSBUQUJMQV9BX0NQX0FURVNUICgweDAxOTcpCisjZGVmaW5lIFRBQkxBX0FfQ1BfQVRFU1RfX1BPUiAoMHgwMDAwMDAwMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRBQkxBX0FfQ1BfRFRFU1QgKDB4MDE5OCkKKyNkZWZpbmUgVEFCTEFfQV9DUF9EVEVTVF9fUE9SICgweDAwMDAwMDAwKQorI2RlZmluZSBUQUJMQV9BX1JYX0NPTV9USU1FUl9ESVYgKDB4MDE5RSkKKyNkZWZpbmUgVEFCTEFfQV9SWF9DT01fVElNRVJfRElWX19QT1IgKDB4MDAwMDAwRTgpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUQUJMQV9BX1JYX0NPTV9PQ1BfQ1RMICgweDAxOUYpCisjZGVmaW5lIFRBQkxBX0FfUlhfQ09NX09DUF9DVExfX1BPUiAoMHgwMDAwMDAxRikKKyNkZWZpbmUgVEFCTEFfQV9SWF9DT01fT0NQX0NPVU5UICgweDAxQTApCisjZGVmaW5lIFRBQkxBX0FfUlhfQ09NX09DUF9DT1VOVF9fUE9SICgweDAwMDAwMDc3KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVEFCTEFfQV9SWF9DT01fREFDX0NUTCAoMHgwMUExKQorI2RlZmluZSBUQUJMQV9BX1JYX0NPTV9EQUNfQ1RMX19QT1IgKDB4MDAwMDAwMDApCisjZGVmaW5lIFRBQkxBX0FfUlhfQ09NX0JJQVMgKDB4MDFBMikKKyNkZWZpbmUgVEFCTEFfQV9SWF9DT01fQklBU19fUE9SICgweDAwMDAwMDAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVEFCTEFfQV9SWF9IUEhfQklBU19QQSAoMHgwMUE2KQorI2RlZmluZSBUQUJMQV9BX1JYX0hQSF9CSUFTX1BBX19QT1IgKDB4MDAwMDAwQUEpCisjZGVmaW5lIFRBQkxBX0FfUlhfSFBIX0JJQVNfTERPICgweDAxQTcpCisjZGVmaW5lIFRBQkxBX0FfUlhfSFBIX0JJQVNfTERPX19QT1IgKDB4MDAwMDAwODYpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUQUJMQV9BX1JYX0hQSF9CSUFTX0NOUCAoMHgwMUE4KQorI2RlZmluZSBUQUJMQV9BX1JYX0hQSF9CSUFTX0NOUF9fUE9SICgweDAwMDAwMDhBKQorI2RlZmluZSBUQUJMQV9BX1JYX0hQSF9CSUFTX1dHICgweDAxQTkpCisjZGVmaW5lIFRBQkxBX0FfUlhfSFBIX0JJQVNfV0dfX1BPUiAoMHgwMDAwMDA2MCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRBQkxBX0FfUlhfSFBIX09DUF9DVEwgKDB4MDFBQSkKKyNkZWZpbmUgVEFCTEFfQV9SWF9IUEhfT0NQX0NUTF9fUE9SICgweDAwMDAwMEU4KQorI2RlZmluZSBUQUJMQV9BX1JYX0hQSF9DTlBfRU4gKDB4MDFBQikKKyNkZWZpbmUgVEFCTEFfQV9SWF9IUEhfQ05QX0VOX19QT1IgKDB4MDAwMDAwODApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUQUJMQV9BX1JYX0hQSF9DTlBfV0dfQ1RMICgweDAxQUMpCisjZGVmaW5lIFRBQkxBX0FfUlhfSFBIX0NOUF9XR19DVExfX1BPUiAoMHgwMDAwMDBEQykKKyNkZWZpbmUgVEFCTEFfQV9SWF9IUEhfQ05QX1dHX1RJTUUgKDB4MDFBRCkKKyNkZWZpbmUgVEFCTEFfQV9SWF9IUEhfQ05QX1dHX1RJTUVfX1BPUiAoMHgwMDAwMDAyOCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRBQkxBX0FfUlhfSFBIX0xfR0FJTiAoMHgwMUFFKQorI2RlZmluZSBUQUJMQV9BX1JYX0hQSF9MX0dBSU5fX1BPUiAoMHgwMDAwMDAwMCkKKyNkZWZpbmUgVEFCTEFfQV9SWF9IUEhfTF9URVNUICgweDAxQUYpCisjZGVmaW5lIFRBQkxBX0FfUlhfSFBIX0xfVEVTVF9fUE9SICgweDAwMDAwMDAxKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVEFCTEFfQV9SWF9IUEhfTF9QQV9DVEwgKDB4MDFCMCkKKyNkZWZpbmUgVEFCTEFfQV9SWF9IUEhfTF9QQV9DVExfX1BPUiAoMHgwMDAwMDA0MCkKKyNkZWZpbmUgVEFCTEFfQV9SWF9IUEhfTF9EQUNfQ1RMICgweDAxQjEpCisjZGVmaW5lIFRBQkxBX0FfUlhfSFBIX0xfREFDX0NUTF9fUE9SICgweDAwMDAwMDAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVEFCTEFfQV9SWF9IUEhfTF9BVEVTVCAoMHgwMUIyKQorI2RlZmluZSBUQUJMQV9BX1JYX0hQSF9MX0FURVNUX19QT1IgKDB4MDAwMDAwMDApCisjZGVmaW5lIFRBQkxBX0FfUlhfSFBIX0xfU1RBVFVTICgweDAxQjMpCisjZGVmaW5lIFRBQkxBX0FfUlhfSFBIX0xfU1RBVFVTX19QT1IgKDB4MDAwMDAwMDQpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUQUJMQV9BX1JYX0hQSF9SX0dBSU4gKDB4MDFCNCkKKyNkZWZpbmUgVEFCTEFfQV9SWF9IUEhfUl9HQUlOX19QT1IgKDB4MDAwMDAwMDApCisjZGVmaW5lIFRBQkxBX0FfUlhfSFBIX1JfVEVTVCAoMHgwMUI1KQorI2RlZmluZSBUQUJMQV9BX1JYX0hQSF9SX1RFU1RfX1BPUiAoMHgwMDAwMDAwMSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRBQkxBX0FfUlhfSFBIX1JfUEFfQ1RMICgweDAxQjYpCisjZGVmaW5lIFRBQkxBX0FfUlhfSFBIX1JfUEFfQ1RMX19QT1IgKDB4MDAwMDAwNDApCisjZGVmaW5lIFRBQkxBX0FfUlhfSFBIX1JfREFDX0NUTCAoMHgwMUI3KQorI2RlZmluZSBUQUJMQV9BX1JYX0hQSF9SX0RBQ19DVExfX1BPUiAoMHgwMDAwMDAwMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRBQkxBX0FfUlhfSFBIX1JfQVRFU1QgKDB4MDFCOCkKKyNkZWZpbmUgVEFCTEFfQV9SWF9IUEhfUl9BVEVTVF9fUE9SICgweDAwMDAwMDAwKQorI2RlZmluZSBUQUJMQV9BX1JYX0hQSF9SX1NUQVRVUyAoMHgwMUI5KQorI2RlZmluZSBUQUJMQV9BX1JYX0hQSF9SX1NUQVRVU19fUE9SICgweDAwMDAwMDA0KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVEFCTEFfQV9SWF9FQVJfQklBU19QQSAoMHgwMUJBKQorI2RlZmluZSBUQUJMQV9BX1JYX0VBUl9CSUFTX1BBX19QT1IgKDB4MDAwMDAwQUEpCisjZGVmaW5lIFRBQkxBX0FfUlhfRUFSX0JJQVNfQ01CVUZGICgweDAxQkIpCisjZGVmaW5lIFRBQkxBX0FfUlhfRUFSX0JJQVNfQ01CVUZGX19QT1IgKDB4MDAwMDAwQTApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUQUJMQV9BX1JYX0VBUl9FTiAoMHgwMUJDKQorI2RlZmluZSBUQUJMQV9BX1JYX0VBUl9FTl9fUE9SICgweDAwMDAwMDAwKQorI2RlZmluZSBUQUJMQV9BX1JYX0VBUl9HQUlOICgweDAxQkQpCisjZGVmaW5lIFRBQkxBX0FfUlhfRUFSX0dBSU5fX1BPUiAoMHgwMDAwMDAwOCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRBQkxBX0FfUlhfRUFSX0NNQlVGRiAoMHgwMUJFKQorI2RlZmluZSBUQUJMQV9BX1JYX0VBUl9DTUJVRkZfX1BPUiAoMHgwMDAwMDAwMCkKKyNkZWZpbmUgVEFCTEFfQV9SWF9FQVJfSUNUTCAoMHgwMUJGKQorI2RlZmluZSBUQUJMQV9BX1JYX0VBUl9JQ1RMX19QT1IgKDB4MDAwMDAwNDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUQUJMQV9BX1JYX0VBUl9DQ09NUCAoMHgwMUMwKQorI2RlZmluZSBUQUJMQV9BX1JYX0VBUl9DQ09NUF9fUE9SICgweDAwMDAwMDA4KQorI2RlZmluZSBUQUJMQV9BX1JYX0VBUl9WQ00gKDB4MDFDMSkKKyNkZWZpbmUgVEFCTEFfQV9SWF9FQVJfVkNNX19QT1IgKDB4MDAwMDAwMDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUQUJMQV9BX1JYX0VBUl9DTlAgKDB4MDFDMikKKyNkZWZpbmUgVEFCTEFfQV9SWF9FQVJfQ05QX19QT1IgKDB4MDAwMDAwODApCisjZGVmaW5lIFRBQkxBX0FfUlhfRUFSX0FURVNUICgweDAxQzMpCisjZGVmaW5lIFRBQkxBX0FfUlhfRUFSX0FURVNUX19QT1IgKDB4MDAwMDAwMDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUQUJMQV9BX1JYX0VBUl9TVEFUVVMgKDB4MDFDNSkKKyNkZWZpbmUgVEFCTEFfQV9SWF9FQVJfU1RBVFVTX19QT1IgKDB4MDAwMDAwMDQpCisjZGVmaW5lIFRBQkxBX0FfUlhfTElORV9CSUFTX1BBICgweDAxQzYpCisjZGVmaW5lIFRBQkxBX0FfUlhfTElORV9CSUFTX1BBX19QT1IgKDB4MDAwMDAwQUEpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUQUJMQV9BX1JYX0xJTkVfQklBU19EQUMgKDB4MDFDNykKKyNkZWZpbmUgVEFCTEFfQV9SWF9MSU5FX0JJQVNfREFDX19QT1IgKDB4MDAwMDAwQTApCisjZGVmaW5lIFRBQkxBX0FfUlhfTElORV9CSUFTX0NOUCAoMHgwMUM4KQorI2RlZmluZSBUQUJMQV9BX1JYX0xJTkVfQklBU19DTlBfX1BPUiAoMHgwMDAwMDAzQSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRBQkxBX0FfUlhfTElORV9DT00gKDB4MDFDOSkKKyNkZWZpbmUgVEFCTEFfQV9SWF9MSU5FX0NPTV9fUE9SICgweDAwMDAwMDAwKQorI2RlZmluZSBUQUJMQV9BX1JYX0xJTkVfQ05QX0VOICgweDAxQ0EpCisjZGVmaW5lIFRBQkxBX0FfUlhfTElORV9DTlBfRU5fX1BPUiAoMHgwMDAwMDA4MCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRBQkxBX0FfUlhfTElORV9DTlBfV0dfQ1RMICgweDAxQ0IpCisjZGVmaW5lIFRBQkxBX0FfUlhfTElORV9DTlBfV0dfQ1RMX19QT1IgKDB4MDAwMDAwMUMpCisjZGVmaW5lIFRBQkxBX0FfUlhfTElORV9DTlBfV0dfVElNRSAoMHgwMUNDKQorI2RlZmluZSBUQUJMQV9BX1JYX0xJTkVfQ05QX1dHX1RJTUVfX1BPUiAoMHgwMDAwMDA2NCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRBQkxBX0FfUlhfTElORV8xX0dBSU4gKDB4MDFDRCkKKyNkZWZpbmUgVEFCTEFfQV9SWF9MSU5FXzFfR0FJTl9fUE9SICgweDAwMDAwMDAwKQorI2RlZmluZSBUQUJMQV9BX1JYX0xJTkVfMV9URVNUICgweDAxQ0UpCisjZGVmaW5lIFRBQkxBX0FfUlhfTElORV8xX1RFU1RfX1BPUiAoMHgwMDAwMDAwMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRBQkxBX0FfUlhfTElORV8xX0RBQ19DVEwgKDB4MDFDRikKKyNkZWZpbmUgVEFCTEFfQV9SWF9MSU5FXzFfREFDX0NUTF9fUE9SICgweDAwMDAwMDBDKQorI2RlZmluZSBUQUJMQV9BX1JYX0xJTkVfMV9TVEFUVVMgKDB4MDFEMCkKKyNkZWZpbmUgVEFCTEFfQV9SWF9MSU5FXzFfU1RBVFVTX19QT1IgKDB4MDAwMDAwMDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUQUJMQV9BX1JYX0xJTkVfMl9HQUlOICgweDAxRDEpCisjZGVmaW5lIFRBQkxBX0FfUlhfTElORV8yX0dBSU5fX1BPUiAoMHgwMDAwMDAwMCkKKyNkZWZpbmUgVEFCTEFfQV9SWF9MSU5FXzJfVEVTVCAoMHgwMUQyKQorI2RlZmluZSBUQUJMQV9BX1JYX0xJTkVfMl9URVNUX19QT1IgKDB4MDAwMDAwMDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUQUJMQV9BX1JYX0xJTkVfMl9EQUNfQ1RMICgweDAxRDMpCisjZGVmaW5lIFRBQkxBX0FfUlhfTElORV8yX0RBQ19DVExfX1BPUiAoMHgwMDAwMDAwQykKKyNkZWZpbmUgVEFCTEFfQV9SWF9MSU5FXzJfU1RBVFVTICgweDAxRDQpCisjZGVmaW5lIFRBQkxBX0FfUlhfTElORV8yX1NUQVRVU19fUE9SICgweDAwMDAwMDAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVEFCTEFfQV9SWF9MSU5FXzNfR0FJTiAoMHgwMUQ1KQorI2RlZmluZSBUQUJMQV9BX1JYX0xJTkVfM19HQUlOX19QT1IgKDB4MDAwMDAwMDApCisjZGVmaW5lIFRBQkxBX0FfUlhfTElORV8zX1RFU1QgKDB4MDFENikKKyNkZWZpbmUgVEFCTEFfQV9SWF9MSU5FXzNfVEVTVF9fUE9SICgweDAwMDAwMDAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVEFCTEFfQV9SWF9MSU5FXzNfREFDX0NUTCAoMHgwMUQ3KQorI2RlZmluZSBUQUJMQV9BX1JYX0xJTkVfM19EQUNfQ1RMX19QT1IgKDB4MDAwMDAwMEMpCisjZGVmaW5lIFRBQkxBX0FfUlhfTElORV8zX1NUQVRVUyAoMHgwMUQ4KQorI2RlZmluZSBUQUJMQV9BX1JYX0xJTkVfM19TVEFUVVNfX1BPUiAoMHgwMDAwMDAwMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRBQkxBX0FfUlhfTElORV80X0dBSU4gKDB4MDFEOSkKKyNkZWZpbmUgVEFCTEFfQV9SWF9MSU5FXzRfR0FJTl9fUE9SICgweDAwMDAwMDAwKQorI2RlZmluZSBUQUJMQV9BX1JYX0xJTkVfNF9URVNUICgweDAxREEpCisjZGVmaW5lIFRBQkxBX0FfUlhfTElORV80X1RFU1RfX1BPUiAoMHgwMDAwMDAwMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRBQkxBX0FfUlhfTElORV80X0RBQ19DVEwgKDB4MDFEQikKKyNkZWZpbmUgVEFCTEFfQV9SWF9MSU5FXzRfREFDX0NUTF9fUE9SICgweDAwMDAwMDBDKQorI2RlZmluZSBUQUJMQV9BX1JYX0xJTkVfNF9TVEFUVVMgKDB4MDFEQykKKyNkZWZpbmUgVEFCTEFfQV9SWF9MSU5FXzRfU1RBVFVTX19QT1IgKDB4MDAwMDAwMDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUQUJMQV9BX1JYX0xJTkVfNV9HQUlOICgweDAxREQpCisjZGVmaW5lIFRBQkxBX0FfUlhfTElORV81X0dBSU5fX1BPUiAoMHgwMDAwMDAwMCkKKyNkZWZpbmUgVEFCTEFfQV9SWF9MSU5FXzVfVEVTVCAoMHgwMURFKQorI2RlZmluZSBUQUJMQV9BX1JYX0xJTkVfNV9URVNUX19QT1IgKDB4MDAwMDAwMDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUQUJMQV9BX1JYX0xJTkVfNV9EQUNfQ1RMICgweDAxREYpCisjZGVmaW5lIFRBQkxBX0FfUlhfTElORV81X0RBQ19DVExfX1BPUiAoMHgwMDAwMDAwQykKKyNkZWZpbmUgVEFCTEFfQV9SWF9MSU5FXzVfU1RBVFVTICgweDAxRTApCisjZGVmaW5lIFRBQkxBX0FfUlhfTElORV81X1NUQVRVU19fUE9SICgweDAwMDAwMDAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVEFCTEFfQV9SWF9MSU5FX0NOUF9EQkcgKDB4MDFFQykKKyNkZWZpbmUgVEFCTEFfQV9SWF9MSU5FX0NOUF9EQkdfX1BPUiAoMHgwMDAwMDAwMCkKKyNkZWZpbmUgVEFCTEFfQV9NQkhDX0hQSCAoMHgwMUVEKQorI2RlZmluZSBUQUJMQV9BX01CSENfSFBIX19QT1IgKDB4MDAwMDAwNDgpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUQUJMQV9BX0NPTkZJR19NT0RFX0ZSRVEgKDB4MDFGNykKKyNkZWZpbmUgVEFCTEFfQV9DT05GSUdfTU9ERV9GUkVRX19QT1IgKDB4MDAwMDAwNDcpCisjZGVmaW5lIFRBQkxBX0FfQ09ORklHX01PREVfVEVTVCAoMHgwMUY4KQorI2RlZmluZSBUQUJMQV9BX0NPTkZJR19NT0RFX1RFU1RfX1BPUiAoMHgwMDAwMDAwQSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRBQkxBX0FfQ09ORklHX01PREVfU1RBVFVTICgweDAxRjkpCisjZGVmaW5lIFRBQkxBX0FfQ09ORklHX01PREVfU1RBVFVTX19QT1IgKDB4MDAwMDAwMUMpCisjZGVmaW5lIFRBQkxBX0FfQ09ORklHX01PREVfVFVORVIgKDB4MDFGQSkKKyNkZWZpbmUgVEFCTEFfQV9DT05GSUdfTU9ERV9UVU5FUl9fUE9SICgweDAwMDAwMDAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVEFCTEFfQV9DRENfQU5DMV9DVEwgKDB4MDAwMDAyMDApCisjZGVmaW5lIFRBQkxBX0FfQ0RDX0FOQzFfQ1RMX19QT1IgKDB4MDAwMDAwMDApCisjZGVmaW5lIFRBQkxBX0FfQ0RDX0FOQzJfQ1RMICgweDAwMDAwMjgwKQorI2RlZmluZSBUQUJMQV9BX0NEQ19BTkMyX0NUTF9fUE9SICgweDAwMDAwMDAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVEFCTEFfQV9DRENfQU5DMV9TSElGVCAoMHgwMDAwMDIwMSkKKyNkZWZpbmUgVEFCTEFfQV9DRENfQU5DMV9TSElGVF9fUE9SICgweDAwMDAwMDAwKQorI2RlZmluZSBUQUJMQV9BX0NEQ19BTkMyX1NISUZUICgweDAwMDAwMjgxKQorI2RlZmluZSBUQUJMQV9BX0NEQ19BTkMyX1NISUZUX19QT1IgKDB4MDAwMDAwMDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUQUJMQV9BX0NEQ19BTkMxX0ZJTFQxX0IxX0NUTCAoMHgwMDAwMDIwMikKKyNkZWZpbmUgVEFCTEFfQV9DRENfQU5DMV9GSUxUMV9CMV9DVExfX1BPUiAoMHgwMDAwMDAwMCkKKyNkZWZpbmUgVEFCTEFfQV9DRENfQU5DMl9GSUxUMV9CMV9DVEwgKDB4MDAwMDAyODIpCisjZGVmaW5lIFRBQkxBX0FfQ0RDX0FOQzJfRklMVDFfQjFfQ1RMX19QT1IgKDB4MDAwMDAwMDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUQUJMQV9BX0NEQ19BTkMxX0ZJTFQxX0IyX0NUTCAoMHgwMDAwMDIwMykKKyNkZWZpbmUgVEFCTEFfQV9DRENfQU5DMV9GSUxUMV9CMl9DVExfX1BPUiAoMHgwMDAwMDAwMCkKKyNkZWZpbmUgVEFCTEFfQV9DRENfQU5DMl9GSUxUMV9CMl9DVEwgKDB4MDAwMDAyODMpCisjZGVmaW5lIFRBQkxBX0FfQ0RDX0FOQzJfRklMVDFfQjJfQ1RMX19QT1IgKDB4MDAwMDAwMDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUQUJMQV9BX0NEQ19BTkMxX0ZJTFQxX0IzX0NUTCAoMHgwMDAwMDIwNCkKKyNkZWZpbmUgVEFCTEFfQV9DRENfQU5DMV9GSUxUMV9CM19DVExfX1BPUiAoMHgwMDAwMDAwMCkKKyNkZWZpbmUgVEFCTEFfQV9DRENfQU5DMl9GSUxUMV9CM19DVEwgKDB4MDAwMDAyODQpCisjZGVmaW5lIFRBQkxBX0FfQ0RDX0FOQzJfRklMVDFfQjNfQ1RMX19QT1IgKDB4MDAwMDAwMDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUQUJMQV9BX0NEQ19BTkMxX0ZJTFQxX0I0X0NUTCAoMHgwMDAwMDIwNSkKKyNkZWZpbmUgVEFCTEFfQV9DRENfQU5DMV9GSUxUMV9CNF9DVExfX1BPUiAoMHgwMDAwMDAwMCkKKyNkZWZpbmUgVEFCTEFfQV9DRENfQU5DMl9GSUxUMV9CNF9DVEwgKDB4MDAwMDAyODUpCisjZGVmaW5lIFRBQkxBX0FfQ0RDX0FOQzJfRklMVDFfQjRfQ1RMX19QT1IgKDB4MDAwMDAwMDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUQUJMQV9BX0NEQ19BTkMxX0ZJTFQyX0IxX0NUTCAoMHgwMDAwMDIwNikKKyNkZWZpbmUgVEFCTEFfQV9DRENfQU5DMV9GSUxUMl9CMV9DVExfX1BPUiAoMHgwMDAwMDAwMCkKKyNkZWZpbmUgVEFCTEFfQV9DRENfQU5DMl9GSUxUMl9CMV9DVEwgKDB4MDAwMDAyODYpCisjZGVmaW5lIFRBQkxBX0FfQ0RDX0FOQzJfRklMVDJfQjFfQ1RMX19QT1IgKDB4MDAwMDAwMDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUQUJMQV9BX0NEQ19BTkMxX0ZJTFQyX0IyX0NUTCAoMHgwMDAwMDIwNykKKyNkZWZpbmUgVEFCTEFfQV9DRENfQU5DMV9GSUxUMl9CMl9DVExfX1BPUiAoMHgwMDAwMDAwMCkKKyNkZWZpbmUgVEFCTEFfQV9DRENfQU5DMl9GSUxUMl9CMl9DVEwgKDB4MDAwMDAyODcpCisjZGVmaW5lIFRBQkxBX0FfQ0RDX0FOQzJfRklMVDJfQjJfQ1RMX19QT1IgKDB4MDAwMDAwMDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUQUJMQV9BX0NEQ19BTkMxX0ZJTFQyX0IzX0NUTCAoMHgwMDAwMDIwOCkKKyNkZWZpbmUgVEFCTEFfQV9DRENfQU5DMV9GSUxUMl9CM19DVExfX1BPUiAoMHgwMDAwMDAwMCkKKyNkZWZpbmUgVEFCTEFfQV9DRENfQU5DMl9GSUxUMl9CM19DVEwgKDB4MDAwMDAyODgpCisjZGVmaW5lIFRBQkxBX0FfQ0RDX0FOQzJfRklMVDJfQjNfQ1RMX19QT1IgKDB4MDAwMDAwMDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUQUJMQV9BX0NEQ19BTkMxX1NQQVJFICgweDAwMDAwMjA5KQorI2RlZmluZSBUQUJMQV9BX0NEQ19BTkMxX1NQQVJFX19QT1IgKDB4MDAwMDAwMDApCisjZGVmaW5lIFRBQkxBX0FfQ0RDX0FOQzJfU1BBUkUgKDB4MDAwMDAyODkpCisjZGVmaW5lIFRBQkxBX0FfQ0RDX0FOQzJfU1BBUkVfX1BPUiAoMHgwMDAwMDAwMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRBQkxBX0FfQ0RDX0FOQzFfRklMVDNfQ1RMICgweDAwMDAwMjBBKQorI2RlZmluZSBUQUJMQV9BX0NEQ19BTkMxX0ZJTFQzX0NUTF9fUE9SICgweDAwMDAwMDAwKQorI2RlZmluZSBUQUJMQV9BX0NEQ19BTkMyX0ZJTFQzX0NUTCAoMHgwMDAwMDI4QSkKKyNkZWZpbmUgVEFCTEFfQV9DRENfQU5DMl9GSUxUM19DVExfX1BPUiAoMHgwMDAwMDAwMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRBQkxBX0FfQ0RDX0FOQzFfRklMVDRfQ1RMICgweDAwMDAwMjBCKQorI2RlZmluZSBUQUJMQV9BX0NEQ19BTkMxX0ZJTFQ0X0NUTF9fUE9SICgweDAwMDAwMDAwKQorI2RlZmluZSBUQUJMQV9BX0NEQ19BTkMyX0ZJTFQ0X0NUTCAoMHgwMDAwMDI4QikKKyNkZWZpbmUgVEFCTEFfQV9DRENfQU5DMl9GSUxUNF9DVExfX1BPUiAoMHgwMDAwMDAwMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRBQkxBX0FfQ0RDX1RYMV9WT0xfQ1RMX1RJTUVSICgweDAwMDAwMjIwKQorI2RlZmluZSBUQUJMQV9BX0NEQ19UWDFfVk9MX0NUTF9USU1FUl9fUE9SICgweDAwMDAwMDAwKQorI2RlZmluZSBUQUJMQV9BX0NEQ19UWDJfVk9MX0NUTF9USU1FUiAoMHgwMDAwMDIyOCkKKyNkZWZpbmUgVEFCTEFfQV9DRENfVFgyX1ZPTF9DVExfVElNRVJfX1BPUiAoMHgwMDAwMDAwMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRBQkxBX0FfQ0RDX1RYM19WT0xfQ1RMX1RJTUVSICgweDAwMDAwMjMwKQorI2RlZmluZSBUQUJMQV9BX0NEQ19UWDNfVk9MX0NUTF9USU1FUl9fUE9SICgweDAwMDAwMDAwKQorI2RlZmluZSBUQUJMQV9BX0NEQ19UWDRfVk9MX0NUTF9USU1FUiAoMHgwMDAwMDIzOCkKKyNkZWZpbmUgVEFCTEFfQV9DRENfVFg0X1ZPTF9DVExfVElNRVJfX1BPUiAoMHgwMDAwMDAwMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRBQkxBX0FfQ0RDX1RYNV9WT0xfQ1RMX1RJTUVSICgweDAwMDAwMjQwKQorI2RlZmluZSBUQUJMQV9BX0NEQ19UWDVfVk9MX0NUTF9USU1FUl9fUE9SICgweDAwMDAwMDAwKQorI2RlZmluZSBUQUJMQV9BX0NEQ19UWDZfVk9MX0NUTF9USU1FUiAoMHgwMDAwMDI0OCkKKyNkZWZpbmUgVEFCTEFfQV9DRENfVFg2X1ZPTF9DVExfVElNRVJfX1BPUiAoMHgwMDAwMDAwMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRBQkxBX0FfQ0RDX1RYN19WT0xfQ1RMX1RJTUVSICgweDAwMDAwMjUwKQorI2RlZmluZSBUQUJMQV9BX0NEQ19UWDdfVk9MX0NUTF9USU1FUl9fUE9SICgweDAwMDAwMDAwKQorI2RlZmluZSBUQUJMQV9BX0NEQ19UWDhfVk9MX0NUTF9USU1FUiAoMHgwMDAwMDI1OCkKKyNkZWZpbmUgVEFCTEFfQV9DRENfVFg4X1ZPTF9DVExfVElNRVJfX1BPUiAoMHgwMDAwMDAwMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRBQkxBX0FfQ0RDX1RYOV9WT0xfQ1RMX1RJTUVSICgweDAwMDAwMjYwKQorI2RlZmluZSBUQUJMQV9BX0NEQ19UWDlfVk9MX0NUTF9USU1FUl9fUE9SICgweDAwMDAwMDAwKQorI2RlZmluZSBUQUJMQV9BX0NEQ19UWDEwX1ZPTF9DVExfVElNRVIgKDB4MDAwMDAyNjgpCisjZGVmaW5lIFRBQkxBX0FfQ0RDX1RYMTBfVk9MX0NUTF9USU1FUl9fUE9SICgweDAwMDAwMDAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVEFCTEFfQV9DRENfVFgxX1ZPTF9DVExfR0FJTiAoMHgwMDAwMDIyMSkKKyNkZWZpbmUgVEFCTEFfQV9DRENfVFgxX1ZPTF9DVExfR0FJTl9fUE9SICgweDAwMDAwMDAwKQorI2RlZmluZSBUQUJMQV9BX0NEQ19UWDJfVk9MX0NUTF9HQUlOICgweDAwMDAwMjI5KQorI2RlZmluZSBUQUJMQV9BX0NEQ19UWDJfVk9MX0NUTF9HQUlOX19QT1IgKDB4MDAwMDAwMDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUQUJMQV9BX0NEQ19UWDNfVk9MX0NUTF9HQUlOICgweDAwMDAwMjMxKQorI2RlZmluZSBUQUJMQV9BX0NEQ19UWDNfVk9MX0NUTF9HQUlOX19QT1IgKDB4MDAwMDAwMDApCisjZGVmaW5lIFRBQkxBX0FfQ0RDX1RYNF9WT0xfQ1RMX0dBSU4gKDB4MDAwMDAyMzkpCisjZGVmaW5lIFRBQkxBX0FfQ0RDX1RYNF9WT0xfQ1RMX0dBSU5fX1BPUiAoMHgwMDAwMDAwMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRBQkxBX0FfQ0RDX1RYNV9WT0xfQ1RMX0dBSU4gKDB4MDAwMDAyNDEpCisjZGVmaW5lIFRBQkxBX0FfQ0RDX1RYNV9WT0xfQ1RMX0dBSU5fX1BPUiAoMHgwMDAwMDAwMCkKKyNkZWZpbmUgVEFCTEFfQV9DRENfVFg2X1ZPTF9DVExfR0FJTiAoMHgwMDAwMDI0OSkKKyNkZWZpbmUgVEFCTEFfQV9DRENfVFg2X1ZPTF9DVExfR0FJTl9fUE9SICgweDAwMDAwMDAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVEFCTEFfQV9DRENfVFg3X1ZPTF9DVExfR0FJTiAoMHgwMDAwMDI1MSkKKyNkZWZpbmUgVEFCTEFfQV9DRENfVFg3X1ZPTF9DVExfR0FJTl9fUE9SICgweDAwMDAwMDAwKQorI2RlZmluZSBUQUJMQV9BX0NEQ19UWDhfVk9MX0NUTF9HQUlOICgweDAwMDAwMjU5KQorI2RlZmluZSBUQUJMQV9BX0NEQ19UWDhfVk9MX0NUTF9HQUlOX19QT1IgKDB4MDAwMDAwMDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUQUJMQV9BX0NEQ19UWDlfVk9MX0NUTF9HQUlOICgweDAwMDAwMjYxKQorI2RlZmluZSBUQUJMQV9BX0NEQ19UWDlfVk9MX0NUTF9HQUlOX19QT1IgKDB4MDAwMDAwMDApCisjZGVmaW5lIFRBQkxBX0FfQ0RDX1RYMTBfVk9MX0NUTF9HQUlOICgweDAwMDAwMjY5KQorI2RlZmluZSBUQUJMQV9BX0NEQ19UWDEwX1ZPTF9DVExfR0FJTl9fUE9SICgweDAwMDAwMDAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVEFCTEFfQV9DRENfVFgxX1ZPTF9DVExfQ0ZHICgweDAwMDAwMjIyKQorI2RlZmluZSBUQUJMQV9BX0NEQ19UWDFfVk9MX0NUTF9DRkdfX1BPUiAoMHgwMDAwMDAwMCkKKyNkZWZpbmUgVEFCTEFfQV9DRENfVFgyX1ZPTF9DVExfQ0ZHICgweDAwMDAwMjJBKQorI2RlZmluZSBUQUJMQV9BX0NEQ19UWDJfVk9MX0NUTF9DRkdfX1BPUiAoMHgwMDAwMDAwMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRBQkxBX0FfQ0RDX1RYM19WT0xfQ1RMX0NGRyAoMHgwMDAwMDIzMikKKyNkZWZpbmUgVEFCTEFfQV9DRENfVFgzX1ZPTF9DVExfQ0ZHX19QT1IgKDB4MDAwMDAwMDApCisjZGVmaW5lIFRBQkxBX0FfQ0RDX1RYNF9WT0xfQ1RMX0NGRyAoMHgwMDAwMDIzQSkKKyNkZWZpbmUgVEFCTEFfQV9DRENfVFg0X1ZPTF9DVExfQ0ZHX19QT1IgKDB4MDAwMDAwMDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUQUJMQV9BX0NEQ19UWDVfVk9MX0NUTF9DRkcgKDB4MDAwMDAyNDIpCisjZGVmaW5lIFRBQkxBX0FfQ0RDX1RYNV9WT0xfQ1RMX0NGR19fUE9SICgweDAwMDAwMDAwKQorI2RlZmluZSBUQUJMQV9BX0NEQ19UWDZfVk9MX0NUTF9DRkcgKDB4MDAwMDAyNEEpCisjZGVmaW5lIFRBQkxBX0FfQ0RDX1RYNl9WT0xfQ1RMX0NGR19fUE9SICgweDAwMDAwMDAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVEFCTEFfQV9DRENfVFg3X1ZPTF9DVExfQ0ZHICgweDAwMDAwMjUyKQorI2RlZmluZSBUQUJMQV9BX0NEQ19UWDdfVk9MX0NUTF9DRkdfX1BPUiAoMHgwMDAwMDAwMCkKKyNkZWZpbmUgVEFCTEFfQV9DRENfVFg4X1ZPTF9DVExfQ0ZHICgweDAwMDAwMjVBKQorI2RlZmluZSBUQUJMQV9BX0NEQ19UWDhfVk9MX0NUTF9DRkdfX1BPUiAoMHgwMDAwMDAwMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRBQkxBX0FfQ0RDX1RYOV9WT0xfQ1RMX0NGRyAoMHgwMDAwMDI2MikKKyNkZWZpbmUgVEFCTEFfQV9DRENfVFg5X1ZPTF9DVExfQ0ZHX19QT1IgKDB4MDAwMDAwMDApCisjZGVmaW5lIFRBQkxBX0FfQ0RDX1RYMTBfVk9MX0NUTF9DRkcgKDB4MDAwMDAyNkEpCisjZGVmaW5lIFRBQkxBX0FfQ0RDX1RYMTBfVk9MX0NUTF9DRkdfX1BPUiAoMHgwMDAwMDAwMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRBQkxBX0FfQ0RDX1RYMV9NVVhfQ1RMICgweDAwMDAwMjIzKQorI2RlZmluZSBUQUJMQV9BX0NEQ19UWDFfTVVYX0NUTF9fUE9SICgweDAwMDAwMDA4KQorI2RlZmluZSBUQUJMQV9BX0NEQ19UWDJfTVVYX0NUTCAoMHgwMDAwMDIyQikKKyNkZWZpbmUgVEFCTEFfQV9DRENfVFgyX01VWF9DVExfX1BPUiAoMHgwMDAwMDAwOCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRBQkxBX0FfQ0RDX1RYM19NVVhfQ1RMICgweDAwMDAwMjMzKQorI2RlZmluZSBUQUJMQV9BX0NEQ19UWDNfTVVYX0NUTF9fUE9SICgweDAwMDAwMDA4KQorI2RlZmluZSBUQUJMQV9BX0NEQ19UWDRfTVVYX0NUTCAoMHgwMDAwMDIzQikKKyNkZWZpbmUgVEFCTEFfQV9DRENfVFg0X01VWF9DVExfX1BPUiAoMHgwMDAwMDAwOCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRBQkxBX0FfQ0RDX1RYNV9NVVhfQ1RMICgweDAwMDAwMjQzKQorI2RlZmluZSBUQUJMQV9BX0NEQ19UWDVfTVVYX0NUTF9fUE9SICgweDAwMDAwMDA4KQorI2RlZmluZSBUQUJMQV9BX0NEQ19UWDZfTVVYX0NUTCAoMHgwMDAwMDI0QikKKyNkZWZpbmUgVEFCTEFfQV9DRENfVFg2X01VWF9DVExfX1BPUiAoMHgwMDAwMDAwOCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRBQkxBX0FfQ0RDX1RYN19NVVhfQ1RMICgweDAwMDAwMjUzKQorI2RlZmluZSBUQUJMQV9BX0NEQ19UWDdfTVVYX0NUTF9fUE9SICgweDAwMDAwMDA4KQorI2RlZmluZSBUQUJMQV9BX0NEQ19UWDhfTVVYX0NUTCAoMHgwMDAwMDI1QikKKyNkZWZpbmUgVEFCTEFfQV9DRENfVFg4X01VWF9DVExfX1BPUiAoMHgwMDAwMDAwOCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRBQkxBX0FfQ0RDX1RYOV9NVVhfQ1RMICgweDAwMDAwMjYzKQorI2RlZmluZSBUQUJMQV9BX0NEQ19UWDlfTVVYX0NUTF9fUE9SICgweDAwMDAwMDA4KQorI2RlZmluZSBUQUJMQV9BX0NEQ19UWDEwX01VWF9DVEwgKDB4MDAwMDAyNkIpCisjZGVmaW5lIFRBQkxBX0FfQ0RDX1RYMTBfTVVYX0NUTF9fUE9SICgweDAwMDAwMDA4KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVEFCTEFfQV9DRENfVFgxX0NMS19GU19DVEwgKDB4MDAwMDAyMjQpCisjZGVmaW5lIFRBQkxBX0FfQ0RDX1RYMV9DTEtfRlNfQ1RMX19QT1IgKDB4MDAwMDAwMDMpCisjZGVmaW5lIFRBQkxBX0FfQ0RDX1RYMl9DTEtfRlNfQ1RMICgweDAwMDAwMjJDKQorI2RlZmluZSBUQUJMQV9BX0NEQ19UWDJfQ0xLX0ZTX0NUTF9fUE9SICgweDAwMDAwMDAzKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVEFCTEFfQV9DRENfVFgzX0NMS19GU19DVEwgKDB4MDAwMDAyMzQpCisjZGVmaW5lIFRBQkxBX0FfQ0RDX1RYM19DTEtfRlNfQ1RMX19QT1IgKDB4MDAwMDAwMDMpCisjZGVmaW5lIFRBQkxBX0FfQ0RDX1RYNF9DTEtfRlNfQ1RMICgweDAwMDAwMjNDKQorI2RlZmluZSBUQUJMQV9BX0NEQ19UWDRfQ0xLX0ZTX0NUTF9fUE9SICgweDAwMDAwMDAzKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVEFCTEFfQV9DRENfVFg1X0NMS19GU19DVEwgKDB4MDAwMDAyNDQpCisjZGVmaW5lIFRBQkxBX0FfQ0RDX1RYNV9DTEtfRlNfQ1RMX19QT1IgKDB4MDAwMDAwMDMpCisjZGVmaW5lIFRBQkxBX0FfQ0RDX1RYNl9DTEtfRlNfQ1RMICgweDAwMDAwMjRDKQorI2RlZmluZSBUQUJMQV9BX0NEQ19UWDZfQ0xLX0ZTX0NUTF9fUE9SICgweDAwMDAwMDAzKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVEFCTEFfQV9DRENfVFg3X0NMS19GU19DVEwgKDB4MDAwMDAyNTQpCisjZGVmaW5lIFRBQkxBX0FfQ0RDX1RYN19DTEtfRlNfQ1RMX19QT1IgKDB4MDAwMDAwMDMpCisjZGVmaW5lIFRBQkxBX0FfQ0RDX1RYOF9DTEtfRlNfQ1RMICgweDAwMDAwMjVDKQorI2RlZmluZSBUQUJMQV9BX0NEQ19UWDhfQ0xLX0ZTX0NUTF9fUE9SICgweDAwMDAwMDAzKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVEFCTEFfQV9DRENfVFg5X0NMS19GU19DVEwgKDB4MDAwMDAyNjQpCisjZGVmaW5lIFRBQkxBX0FfQ0RDX1RYOV9DTEtfRlNfQ1RMX19QT1IgKDB4MDAwMDAwMDMpCisjZGVmaW5lIFRBQkxBX0FfQ0RDX1RYMTBfQ0xLX0ZTX0NUTCAoMHgwMDAwMDI2QykKKyNkZWZpbmUgVEFCTEFfQV9DRENfVFgxMF9DTEtfRlNfQ1RMX19QT1IgKDB4MDAwMDAwMDMpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUQUJMQV9BX0NEQ19UWDFfRE1JQ19DVEwgKDB4MDAwMDAyMjUpCisjZGVmaW5lIFRBQkxBX0FfQ0RDX1RYMV9ETUlDX0NUTF9fUE9SICgweDAwMDAwMDAwKQorI2RlZmluZSBUQUJMQV9BX0NEQ19UWDJfRE1JQ19DVEwgKDB4MDAwMDAyMkQpCisjZGVmaW5lIFRBQkxBX0FfQ0RDX1RYMl9ETUlDX0NUTF9fUE9SICgweDAwMDAwMDAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVEFCTEFfQV9DRENfVFgzX0RNSUNfQ1RMICgweDAwMDAwMjM1KQorI2RlZmluZSBUQUJMQV9BX0NEQ19UWDNfRE1JQ19DVExfX1BPUiAoMHgwMDAwMDAwMCkKKyNkZWZpbmUgVEFCTEFfQV9DRENfVFg0X0RNSUNfQ1RMICgweDAwMDAwMjNEKQorI2RlZmluZSBUQUJMQV9BX0NEQ19UWDRfRE1JQ19DVExfX1BPUiAoMHgwMDAwMDAwMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRBQkxBX0FfQ0RDX1RYNV9ETUlDX0NUTCAoMHgwMDAwMDI0NSkKKyNkZWZpbmUgVEFCTEFfQV9DRENfVFg1X0RNSUNfQ1RMX19QT1IgKDB4MDAwMDAwMDApCisjZGVmaW5lIFRBQkxBX0FfQ0RDX1RYNl9ETUlDX0NUTCAoMHgwMDAwMDI0RCkKKyNkZWZpbmUgVEFCTEFfQV9DRENfVFg2X0RNSUNfQ1RMX19QT1IgKDB4MDAwMDAwMDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUQUJMQV9BX0NEQ19UWDdfRE1JQ19DVEwgKDB4MDAwMDAyNTUpCisjZGVmaW5lIFRBQkxBX0FfQ0RDX1RYN19ETUlDX0NUTF9fUE9SICgweDAwMDAwMDAwKQorI2RlZmluZSBUQUJMQV9BX0NEQ19UWDhfRE1JQ19DVEwgKDB4MDAwMDAyNUQpCisjZGVmaW5lIFRBQkxBX0FfQ0RDX1RYOF9ETUlDX0NUTF9fUE9SICgweDAwMDAwMDAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVEFCTEFfQV9DRENfVFg5X0RNSUNfQ1RMICgweDAwMDAwMjY1KQorI2RlZmluZSBUQUJMQV9BX0NEQ19UWDlfRE1JQ19DVExfX1BPUiAoMHgwMDAwMDAwMCkKKyNkZWZpbmUgVEFCTEFfQV9DRENfVFgxMF9ETUlDX0NUTCAoMHgwMDAwMDI2RCkKKyNkZWZpbmUgVEFCTEFfQV9DRENfVFgxMF9ETUlDX0NUTF9fUE9SICgweDAwMDAwMDAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVEFCTEFfQV9DRENfU1JDMV9QREFfQ0ZHICgweDAwMDAwMkEwKQorI2RlZmluZSBUQUJMQV9BX0NEQ19TUkMxX1BEQV9DRkdfX1BPUiAoMHgwMDAwMDAwMCkKKyNkZWZpbmUgVEFCTEFfQV9DRENfU1JDMl9QREFfQ0ZHICgweDAwMDAwMkE4KQorI2RlZmluZSBUQUJMQV9BX0NEQ19TUkMyX1BEQV9DRkdfX1BPUiAoMHgwMDAwMDAwMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRBQkxBX0FfQ0RDX1NSQzFfRlNfQ1RMICgweDAwMDAwMkExKQorI2RlZmluZSBUQUJMQV9BX0NEQ19TUkMxX0ZTX0NUTF9fUE9SICgweDAwMDAwMDFiKQorI2RlZmluZSBUQUJMQV9BX0NEQ19TUkMyX0ZTX0NUTCAoMHgwMDAwMDJBOSkKKyNkZWZpbmUgVEFCTEFfQV9DRENfU1JDMl9GU19DVExfX1BPUiAoMHgwMDAwMDAxYikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRBQkxBX0FfQ0RDX1JYMV9CMV9DVEwgKDB4MDAwMDAyQjApCisjZGVmaW5lIFRBQkxBX0FfQ0RDX1JYMV9CMV9DVExfX1BPUiAoMHgwMDAwMDAwMCkKKyNkZWZpbmUgVEFCTEFfQV9DRENfUlgyX0IxX0NUTCAoMHgwMDAwMDJCOCkKKyNkZWZpbmUgVEFCTEFfQV9DRENfUlgyX0IxX0NUTF9fUE9SICgweDAwMDAwMDAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVEFCTEFfQV9DRENfUlgzX0IxX0NUTCAoMHgwMDAwMDJDMCkKKyNkZWZpbmUgVEFCTEFfQV9DRENfUlgzX0IxX0NUTF9fUE9SICgweDAwMDAwMDAwKQorI2RlZmluZSBUQUJMQV9BX0NEQ19SWDRfQjFfQ1RMICgweDAwMDAwMkM4KQorI2RlZmluZSBUQUJMQV9BX0NEQ19SWDRfQjFfQ1RMX19QT1IgKDB4MDAwMDAwMDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUQUJMQV9BX0NEQ19SWDVfQjFfQ1RMICgweDAwMDAwMkQwKQorI2RlZmluZSBUQUJMQV9BX0NEQ19SWDVfQjFfQ1RMX19QT1IgKDB4MDAwMDAwMDApCisjZGVmaW5lIFRBQkxBX0FfQ0RDX1JYNl9CMV9DVEwgKDB4MDAwMDAyRDgpCisjZGVmaW5lIFRBQkxBX0FfQ0RDX1JYNl9CMV9DVExfX1BPUiAoMHgwMDAwMDAwMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRBQkxBX0FfQ0RDX1JYN19CMV9DVEwgKDB4MDAwMDAyRTApCisjZGVmaW5lIFRBQkxBX0FfQ0RDX1JYN19CMV9DVExfX1BPUiAoMHgwMDAwMDAwMCkKKyNkZWZpbmUgVEFCTEFfQV9DRENfUlgxX0IyX0NUTCAoMHgwMDAwMDJCMSkKKyNkZWZpbmUgVEFCTEFfQV9DRENfUlgxX0IyX0NUTF9fUE9SICgweDAwMDAwMDAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVEFCTEFfQV9DRENfUlgyX0IyX0NUTCAoMHgwMDAwMDJCOSkKKyNkZWZpbmUgVEFCTEFfQV9DRENfUlgyX0IyX0NUTF9fUE9SICgweDAwMDAwMDAwKQorI2RlZmluZSBUQUJMQV9BX0NEQ19SWDNfQjJfQ1RMICgweDAwMDAwMkMxKQorI2RlZmluZSBUQUJMQV9BX0NEQ19SWDNfQjJfQ1RMX19QT1IgKDB4MDAwMDAwMDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUQUJMQV9BX0NEQ19SWDRfQjJfQ1RMICgweDAwMDAwMkM5KQorI2RlZmluZSBUQUJMQV9BX0NEQ19SWDRfQjJfQ1RMX19QT1IgKDB4MDAwMDAwMDApCisjZGVmaW5lIFRBQkxBX0FfQ0RDX1JYNV9CMl9DVEwgKDB4MDAwMDAyRDEpCisjZGVmaW5lIFRBQkxBX0FfQ0RDX1JYNV9CMl9DVExfX1BPUiAoMHgwMDAwMDAwMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRBQkxBX0FfQ0RDX1JYNl9CMl9DVEwgKDB4MDAwMDAyRDkpCisjZGVmaW5lIFRBQkxBX0FfQ0RDX1JYNl9CMl9DVExfX1BPUiAoMHgwMDAwMDAwMCkKKyNkZWZpbmUgVEFCTEFfQV9DRENfUlg3X0IyX0NUTCAoMHgwMDAwMDJFMSkKKyNkZWZpbmUgVEFCTEFfQV9DRENfUlg3X0IyX0NUTF9fUE9SICgweDAwMDAwMDAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVEFCTEFfQV9DRENfUlgxX0IzX0NUTCAoMHgwMDAwMDJCMikKKyNkZWZpbmUgVEFCTEFfQV9DRENfUlgxX0IzX0NUTF9fUE9SICgweDAwMDAwMDAwKQorI2RlZmluZSBUQUJMQV9BX0NEQ19SWDJfQjNfQ1RMICgweDAwMDAwMkJBKQorI2RlZmluZSBUQUJMQV9BX0NEQ19SWDJfQjNfQ1RMX19QT1IgKDB4MDAwMDAwMDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUQUJMQV9BX0NEQ19SWDNfQjNfQ1RMICgweDAwMDAwMkMyKQorI2RlZmluZSBUQUJMQV9BX0NEQ19SWDNfQjNfQ1RMX19QT1IgKDB4MDAwMDAwMDApCisjZGVmaW5lIFRBQkxBX0FfQ0RDX1JYNF9CM19DVEwgKDB4MDAwMDAyQ0EpCisjZGVmaW5lIFRBQkxBX0FfQ0RDX1JYNF9CM19DVExfX1BPUiAoMHgwMDAwMDAwMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRBQkxBX0FfQ0RDX1JYNV9CM19DVEwgKDB4MDAwMDAyRDIpCisjZGVmaW5lIFRBQkxBX0FfQ0RDX1JYNV9CM19DVExfX1BPUiAoMHgwMDAwMDAwMCkKKyNkZWZpbmUgVEFCTEFfQV9DRENfUlg2X0IzX0NUTCAoMHgwMDAwMDJEQSkKKyNkZWZpbmUgVEFCTEFfQV9DRENfUlg2X0IzX0NUTF9fUE9SICgweDAwMDAwMDAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVEFCTEFfQV9DRENfUlg3X0IzX0NUTCAoMHgwMDAwMDJFMikKKyNkZWZpbmUgVEFCTEFfQV9DRENfUlg3X0IzX0NUTF9fUE9SICgweDAwMDAwMDAwKQorI2RlZmluZSBUQUJMQV9BX0NEQ19SWDFfQjRfQ1RMICgweDAwMDAwMkIzKQorI2RlZmluZSBUQUJMQV9BX0NEQ19SWDFfQjRfQ1RMX19QT1IgKDB4MDAwMDAwMDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUQUJMQV9BX0NEQ19SWDJfQjRfQ1RMICgweDAwMDAwMkJCKQorI2RlZmluZSBUQUJMQV9BX0NEQ19SWDJfQjRfQ1RMX19QT1IgKDB4MDAwMDAwMDApCisjZGVmaW5lIFRBQkxBX0FfQ0RDX1JYM19CNF9DVEwgKDB4MDAwMDAyQzMpCisjZGVmaW5lIFRBQkxBX0FfQ0RDX1JYM19CNF9DVExfX1BPUiAoMHgwMDAwMDAwMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRBQkxBX0FfQ0RDX1JYNF9CNF9DVEwgKDB4MDAwMDAyQ0IpCisjZGVmaW5lIFRBQkxBX0FfQ0RDX1JYNF9CNF9DVExfX1BPUiAoMHgwMDAwMDAwMCkKKyNkZWZpbmUgVEFCTEFfQV9DRENfUlg1X0I0X0NUTCAoMHgwMDAwMDJEMykKKyNkZWZpbmUgVEFCTEFfQV9DRENfUlg1X0I0X0NUTF9fUE9SICgweDAwMDAwMDAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVEFCTEFfQV9DRENfUlg2X0I0X0NUTCAoMHgwMDAwMDJEQikKKyNkZWZpbmUgVEFCTEFfQV9DRENfUlg2X0I0X0NUTF9fUE9SICgweDAwMDAwMDAwKQorI2RlZmluZSBUQUJMQV9BX0NEQ19SWDdfQjRfQ1RMICgweDAwMDAwMkUzKQorI2RlZmluZSBUQUJMQV9BX0NEQ19SWDdfQjRfQ1RMX19QT1IgKDB4MDAwMDAwMDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUQUJMQV9BX0NEQ19SWDFfQjVfQ1RMICgweDAwMDAwMkI0KQorI2RlZmluZSBUQUJMQV9BX0NEQ19SWDFfQjVfQ1RMX19QT1IgKDB4MDAwMDAwNjApCisjZGVmaW5lIFRBQkxBX0FfQ0RDX1JYMl9CNV9DVEwgKDB4MDAwMDAyQkMpCisjZGVmaW5lIFRBQkxBX0FfQ0RDX1JYMl9CNV9DVExfX1BPUiAoMHgwMDAwMDA2MCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRBQkxBX0FfQ0RDX1JYM19CNV9DVEwgKDB4MDAwMDAyQzQpCisjZGVmaW5lIFRBQkxBX0FfQ0RDX1JYM19CNV9DVExfX1BPUiAoMHgwMDAwMDA2MCkKKyNkZWZpbmUgVEFCTEFfQV9DRENfUlg0X0I1X0NUTCAoMHgwMDAwMDJDQykKKyNkZWZpbmUgVEFCTEFfQV9DRENfUlg0X0I1X0NUTF9fUE9SICgweDAwMDAwMDYwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVEFCTEFfQV9DRENfUlg1X0I1X0NUTCAoMHgwMDAwMDJENCkKKyNkZWZpbmUgVEFCTEFfQV9DRENfUlg1X0I1X0NUTF9fUE9SICgweDAwMDAwMDYwKQorI2RlZmluZSBUQUJMQV9BX0NEQ19SWDZfQjVfQ1RMICgweDAwMDAwMkRDKQorI2RlZmluZSBUQUJMQV9BX0NEQ19SWDZfQjVfQ1RMX19QT1IgKDB4MDAwMDAwNjApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUQUJMQV9BX0NEQ19SWDdfQjVfQ1RMICgweDAwMDAwMkU0KQorI2RlZmluZSBUQUJMQV9BX0NEQ19SWDdfQjVfQ1RMX19QT1IgKDB4MDAwMDAwNjApCisjZGVmaW5lIFRBQkxBX0FfQ0RDX1JYMV9CNl9DVEwgKDB4MDAwMDAyQjUpCisjZGVmaW5lIFRBQkxBX0FfQ0RDX1JYMV9CNl9DVExfX1BPUiAoMHgwMDAwMDAwMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRBQkxBX0FfQ0RDX1JYMl9CNl9DVEwgKDB4MDAwMDAyQkQpCisjZGVmaW5lIFRBQkxBX0FfQ0RDX1JYMl9CNl9DVExfX1BPUiAoMHgwMDAwMDAwMCkKKyNkZWZpbmUgVEFCTEFfQV9DRENfUlgzX0I2X0NUTCAoMHgwMDAwMDJDNSkKKyNkZWZpbmUgVEFCTEFfQV9DRENfUlgzX0I2X0NUTF9fUE9SICgweDAwMDAwMDAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVEFCTEFfQV9DRENfUlg0X0I2X0NUTCAoMHgwMDAwMDJDRCkKKyNkZWZpbmUgVEFCTEFfQV9DRENfUlg0X0I2X0NUTF9fUE9SICgweDAwMDAwMDAwKQorI2RlZmluZSBUQUJMQV9BX0NEQ19SWDVfQjZfQ1RMICgweDAwMDAwMkQ1KQorI2RlZmluZSBUQUJMQV9BX0NEQ19SWDVfQjZfQ1RMX19QT1IgKDB4MDAwMDAwMDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUQUJMQV9BX0NEQ19SWDZfQjZfQ1RMICgweDAwMDAwMkREKQorI2RlZmluZSBUQUJMQV9BX0NEQ19SWDZfQjZfQ1RMX19QT1IgKDB4MDAwMDAwMDApCisjZGVmaW5lIFRBQkxBX0FfQ0RDX1JYN19CNl9DVEwgKDB4MDAwMDAyRTUpCisjZGVmaW5lIFRBQkxBX0FfQ0RDX1JYN19CNl9DVExfX1BPUiAoMHgwMDAwMDAwMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRBQkxBX0FfQ0RDX1JYMV9WT0xfQ1RMX0IxX0NUTCAoMHgwMDAwMDJCNikKKyNkZWZpbmUgVEFCTEFfQV9DRENfUlgxX1ZPTF9DVExfQjFfQ1RMX19QT1IgKDB4MDAwMDAwMDApCisjZGVmaW5lIFRBQkxBX0FfQ0RDX1JYMl9WT0xfQ1RMX0IxX0NUTCAoMHgwMDAwMDJCRSkKKyNkZWZpbmUgVEFCTEFfQV9DRENfUlgyX1ZPTF9DVExfQjFfQ1RMX19QT1IgKDB4MDAwMDAwMDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUQUJMQV9BX0NEQ19SWDNfVk9MX0NUTF9CMV9DVEwgKDB4MDAwMDAyQzYpCisjZGVmaW5lIFRBQkxBX0FfQ0RDX1JYM19WT0xfQ1RMX0IxX0NUTF9fUE9SICgweDAwMDAwMDAwKQorI2RlZmluZSBUQUJMQV9BX0NEQ19SWDRfVk9MX0NUTF9CMV9DVEwgKDB4MDAwMDAyQ0UpCisjZGVmaW5lIFRBQkxBX0FfQ0RDX1JYNF9WT0xfQ1RMX0IxX0NUTF9fUE9SICgweDAwMDAwMDAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVEFCTEFfQV9DRENfUlg1X1ZPTF9DVExfQjFfQ1RMICgweDAwMDAwMkQ2KQorI2RlZmluZSBUQUJMQV9BX0NEQ19SWDVfVk9MX0NUTF9CMV9DVExfX1BPUiAoMHgwMDAwMDAwMCkKKyNkZWZpbmUgVEFCTEFfQV9DRENfUlg2X1ZPTF9DVExfQjFfQ1RMICgweDAwMDAwMkRFKQorI2RlZmluZSBUQUJMQV9BX0NEQ19SWDZfVk9MX0NUTF9CMV9DVExfX1BPUiAoMHgwMDAwMDAwMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRBQkxBX0FfQ0RDX1JYN19WT0xfQ1RMX0IxX0NUTCAoMHgwMDAwMDJFNikKKyNkZWZpbmUgVEFCTEFfQV9DRENfUlg3X1ZPTF9DVExfQjFfQ1RMX19QT1IgKDB4MDAwMDAwMDApCisjZGVmaW5lIFRBQkxBX0FfQ0RDX1JYMV9WT0xfQ1RMX0IyX0NUTCAoMHgwMDAwMDJCNykKKyNkZWZpbmUgVEFCTEFfQV9DRENfUlgxX1ZPTF9DVExfQjJfQ1RMX19QT1IgKDB4MDAwMDAwMDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUQUJMQV9BX0NEQ19SWDJfVk9MX0NUTF9CMl9DVEwgKDB4MDAwMDAyQkYpCisjZGVmaW5lIFRBQkxBX0FfQ0RDX1JYMl9WT0xfQ1RMX0IyX0NUTF9fUE9SICgweDAwMDAwMDAwKQorI2RlZmluZSBUQUJMQV9BX0NEQ19SWDNfVk9MX0NUTF9CMl9DVEwgKDB4MDAwMDAyQzcpCisjZGVmaW5lIFRBQkxBX0FfQ0RDX1JYM19WT0xfQ1RMX0IyX0NUTF9fUE9SICgweDAwMDAwMDAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVEFCTEFfQV9DRENfUlg0X1ZPTF9DVExfQjJfQ1RMICgweDAwMDAwMkNGKQorI2RlZmluZSBUQUJMQV9BX0NEQ19SWDRfVk9MX0NUTF9CMl9DVExfX1BPUiAoMHgwMDAwMDAwMCkKKyNkZWZpbmUgVEFCTEFfQV9DRENfUlg1X1ZPTF9DVExfQjJfQ1RMICgweDAwMDAwMkQ3KQorI2RlZmluZSBUQUJMQV9BX0NEQ19SWDVfVk9MX0NUTF9CMl9DVExfX1BPUiAoMHgwMDAwMDAwMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRBQkxBX0FfQ0RDX1JYNl9WT0xfQ1RMX0IyX0NUTCAoMHgwMDAwMDJERikKKyNkZWZpbmUgVEFCTEFfQV9DRENfUlg2X1ZPTF9DVExfQjJfQ1RMX19QT1IgKDB4MDAwMDAwMDApCisjZGVmaW5lIFRBQkxBX0FfQ0RDX1JYN19WT0xfQ1RMX0IyX0NUTCAoMHgwMDAwMDJFNykKKyNkZWZpbmUgVEFCTEFfQV9DRENfUlg3X1ZPTF9DVExfQjJfQ1RMX19QT1IgKDB4MDAwMDAwMDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUQUJMQV9BX0NEQ19DTEtfQU5DX1JFU0VUX0NUTCAoMHgwMDAwMDMwMCkKKyNkZWZpbmUgVEFCTEFfQV9DRENfQ0xLX0FOQ19SRVNFVF9DVExfX1BPUiAoMHgwMDAwMDAwMCkKKyNkZWZpbmUgVEFCTEFfQV9DRENfQ0xLX1JYX1JFU0VUX0NUTCAoMHgwMDAwMDMwMSkKKyNkZWZpbmUgVEFCTEFfQV9DRENfQ0xLX1JYX1JFU0VUX0NUTF9fUE9SICgweDAwMDAwMDAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVEFCTEFfQV9DRENfQ0xLX1RYX1JFU0VUX0IxX0NUTCAoMHgwMDAwMDMwMikKKyNkZWZpbmUgVEFCTEFfQV9DRENfQ0xLX1RYX1JFU0VUX0IxX0NUTF9fUE9SICgweDAwMDAwMDAwKQorI2RlZmluZSBUQUJMQV9BX0NEQ19DTEtfVFhfUkVTRVRfQjJfQ1RMICgweDAwMDAwMzAzKQorI2RlZmluZSBUQUJMQV9BX0NEQ19DTEtfVFhfUkVTRVRfQjJfQ1RMX19QT1IgKDB4MDAwMDAwMDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUQUJMQV9BX0NEQ19DTEtfRE1JQ19DVEwgKDB4MDAwMDAzMDQpCisjZGVmaW5lIFRBQkxBX0FfQ0RDX0NMS19ETUlDX0NUTF9fUE9SICgweDAwMDAwMDAwKQorI2RlZmluZSBUQUJMQV9BX0NEQ19DTEtfUlhfSTJTX0NUTCAoMHgwMDAwMDMwNSkKKyNkZWZpbmUgVEFCTEFfQV9DRENfQ0xLX1JYX0kyU19DVExfX1BPUiAoMHgwMDAwMDAwMykKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRBQkxBX0FfQ0RDX0NMS19UWF9JMlNfQ1RMICgweDAwMDAwMzA2KQorI2RlZmluZSBUQUJMQV9BX0NEQ19DTEtfVFhfSTJTX0NUTF9fUE9SICgweDAwMDAwMDAzKQorI2RlZmluZSBUQUJMQV9BX0NEQ19DTEtfT1RIUl9SRVNFVF9DVEwgKDB4MDAwMDAzMDcpCisjZGVmaW5lIFRBQkxBX0FfQ0RDX0NMS19PVEhSX1JFU0VUX0NUTF9fUE9SICgweDAwMDAwMDAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVEFCTEFfQV9DRENfQ0xLX1RYX0NMS19FTl9CMV9DVEwgKDB4MDAwMDAzMDgpCisjZGVmaW5lIFRBQkxBX0FfQ0RDX0NMS19UWF9DTEtfRU5fQjFfQ1RMX19QT1IgKDB4MDAwMDAwMDApCisjZGVmaW5lIFRBQkxBX0FfQ0RDX0NMS19UWF9DTEtfRU5fQjJfQ1RMICgweDAwMDAwMzA5KQorI2RlZmluZSBUQUJMQV9BX0NEQ19DTEtfVFhfQ0xLX0VOX0IyX0NUTF9fUE9SICgweDAwMDAwMDAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVEFCTEFfQV9DRENfQ0xLX09USFJfQ1RMICgweDAwMDAwMzBBKQorI2RlZmluZSBUQUJMQV9BX0NEQ19DTEtfT1RIUl9DVExfX1BPUiAoMHgwMDAwMDAwMCkKKyNkZWZpbmUgVEFCTEFfQV9DRENfQ0xLX1JEQUNfQ0xLX0VOX0NUTCAoMHgwMDAwMDMwQikKKyNkZWZpbmUgVEFCTEFfQV9DRENfQ0xLX1JEQUNfQ0xLX0VOX0NUTF9fUE9SICgweDAwMDAwMDAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVEFCTEFfQV9DRENfQ0xLX0FOQ19DTEtfRU5fQ1RMICgweDAwMDAwMzBDKQorI2RlZmluZSBUQUJMQV9BX0NEQ19DTEtfQU5DX0NMS19FTl9DVExfX1BPUiAoMHgwMDAwMDAwMCkKKyNkZWZpbmUgVEFCTEFfQV9DRENfQ0xLX1JYX0IxX0NUTCAoMHgwMDAwMDMwRCkKKyNkZWZpbmUgVEFCTEFfQV9DRENfQ0xLX1JYX0IxX0NUTF9fUE9SICgweDAwMDAwMDAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVEFCTEFfQV9DRENfQ0xLX1JYX0IyX0NUTCAoMHgwMDAwMDMwRSkKKyNkZWZpbmUgVEFCTEFfQV9DRENfQ0xLX1JYX0IyX0NUTF9fUE9SICgweDAwMDAwMDAwKQorI2RlZmluZSBUQUJMQV9BX0NEQ19DTEtfTUNMS19DVEwgKDB4MDAwMDAzMEYpCisjZGVmaW5lIFRBQkxBX0FfQ0RDX0NMS19NQ0xLX0NUTF9fUE9SICgweDAwMDAwMDAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVEFCTEFfQV9DRENfQ0xLX1BETV9DVEwgKDB4MDAwMDAzMTApCisjZGVmaW5lIFRBQkxBX0FfQ0RDX0NMS19QRE1fQ1RMX19QT1IgKDB4MDAwMDAwMDApCisjZGVmaW5lIFRBQkxBX0FfQ0RDX0NMS19TRF9DVEwgKDB4MDAwMDAzMTEpCisjZGVmaW5lIFRBQkxBX0FfQ0RDX0NMS19TRF9DVExfX1BPUiAoMHgwMDAwMDAwMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRBQkxBX0FfQ0RDX0NMU0dfRlJFUV9USFJFU0hfQjFfQ1RMICgweDAwMDAwMzIwKQorI2RlZmluZSBUQUJMQV9BX0NEQ19DTFNHX0ZSRVFfVEhSRVNIX0IxX0NUTF9fUE9SICgweDAwMDAwMDA3KQorI2RlZmluZSBUQUJMQV9BX0NEQ19DTFNHX0ZSRVFfVEhSRVNIX0IyX0NUTCAoMHgwMDAwMDMyMSkKKyNkZWZpbmUgVEFCTEFfQV9DRENfQ0xTR19GUkVRX1RIUkVTSF9CMl9DVExfX1BPUiAoMHgwMDAwMDAxMykKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRBQkxBX0FfQ0RDX0NMU0dfRlJFUV9USFJFU0hfQjNfQ1RMICgweDAwMDAwMzIyKQorI2RlZmluZSBUQUJMQV9BX0NEQ19DTFNHX0ZSRVFfVEhSRVNIX0IzX0NUTF9fUE9SICgweDAwMDAwMDUzKQorI2RlZmluZSBUQUJMQV9BX0NEQ19DTFNHX0ZSRVFfVEhSRVNIX0I0X0NUTCAoMHgwMDAwMDMyMykKKyNkZWZpbmUgVEFCTEFfQV9DRENfQ0xTR19GUkVRX1RIUkVTSF9CNF9DVExfX1BPUiAoMHgwMDAwMDA3ZikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRBQkxBX0FfQ0RDX0NMU0dfR0FJTl9USFJFU0hfQ1RMICgweDAwMDAwMzI0KQorI2RlZmluZSBUQUJMQV9BX0NEQ19DTFNHX0dBSU5fVEhSRVNIX0NUTF9fUE9SICgweDAwMDAwMDI2KQorI2RlZmluZSBUQUJMQV9BX0NEQ19DTFNHX1RJTUVSX0IxX0NGRyAoMHgwMDAwMDMyNSkKKyNkZWZpbmUgVEFCTEFfQV9DRENfQ0xTR19USU1FUl9CMV9DRkdfX1BPUiAoMHgwMDAwMDAwYSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRBQkxBX0FfQ0RDX0NMU0dfVElNRVJfQjJfQ0ZHICgweDAwMDAwMzI2KQorI2RlZmluZSBUQUJMQV9BX0NEQ19DTFNHX1RJTUVSX0IyX0NGR19fUE9SICgweDAwMDAwMDAwKQorI2RlZmluZSBUQUJMQV9BX0NEQ19DTFNHX0NUTCAoMHgwMDAwMDMyNykKKyNkZWZpbmUgVEFCTEFfQV9DRENfQ0xTR19DVExfX1BPUiAoMHgwMDAwMDAxMykKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRBQkxBX0FfQ0RDX0lJUjFfR0FJTl9CMV9DVEwgKDB4MDAwMDAzNDApCisjZGVmaW5lIFRBQkxBX0FfQ0RDX0lJUjFfR0FJTl9CMV9DVExfX1BPUiAoMHgwMDAwMDAwMCkKKyNkZWZpbmUgVEFCTEFfQV9DRENfSUlSMl9HQUlOX0IxX0NUTCAoMHgwMDAwMDM1MCkKKyNkZWZpbmUgVEFCTEFfQV9DRENfSUlSMl9HQUlOX0IxX0NUTF9fUE9SICgweDAwMDAwMDAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVEFCTEFfQV9DRENfSUlSMV9HQUlOX0IyX0NUTCAoMHgwMDAwMDM0MSkKKyNkZWZpbmUgVEFCTEFfQV9DRENfSUlSMV9HQUlOX0IyX0NUTF9fUE9SICgweDAwMDAwMDAwKQorI2RlZmluZSBUQUJMQV9BX0NEQ19JSVIyX0dBSU5fQjJfQ1RMICgweDAwMDAwMzUxKQorI2RlZmluZSBUQUJMQV9BX0NEQ19JSVIyX0dBSU5fQjJfQ1RMX19QT1IgKDB4MDAwMDAwMDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUQUJMQV9BX0NEQ19JSVIxX0dBSU5fQjNfQ1RMICgweDAwMDAwMzQyKQorI2RlZmluZSBUQUJMQV9BX0NEQ19JSVIxX0dBSU5fQjNfQ1RMX19QT1IgKDB4MDAwMDAwMDApCisjZGVmaW5lIFRBQkxBX0FfQ0RDX0lJUjJfR0FJTl9CM19DVEwgKDB4MDAwMDAzNTIpCisjZGVmaW5lIFRBQkxBX0FfQ0RDX0lJUjJfR0FJTl9CM19DVExfX1BPUiAoMHgwMDAwMDAwMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRBQkxBX0FfQ0RDX0lJUjFfR0FJTl9CNF9DVEwgKDB4MDAwMDAzNDMpCisjZGVmaW5lIFRBQkxBX0FfQ0RDX0lJUjFfR0FJTl9CNF9DVExfX1BPUiAoMHgwMDAwMDAwMCkKKyNkZWZpbmUgVEFCTEFfQV9DRENfSUlSMl9HQUlOX0I0X0NUTCAoMHgwMDAwMDM1MykKKyNkZWZpbmUgVEFCTEFfQV9DRENfSUlSMl9HQUlOX0I0X0NUTF9fUE9SICgweDAwMDAwMDAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVEFCTEFfQV9DRENfSUlSMV9HQUlOX0I1X0NUTCAoMHgwMDAwMDM0NCkKKyNkZWZpbmUgVEFCTEFfQV9DRENfSUlSMV9HQUlOX0I1X0NUTF9fUE9SICgweDAwMDAwMDAwKQorI2RlZmluZSBUQUJMQV9BX0NEQ19JSVIyX0dBSU5fQjVfQ1RMICgweDAwMDAwMzU0KQorI2RlZmluZSBUQUJMQV9BX0NEQ19JSVIyX0dBSU5fQjVfQ1RMX19QT1IgKDB4MDAwMDAwMDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUQUJMQV9BX0NEQ19JSVIxX0dBSU5fQjZfQ1RMICgweDAwMDAwMzQ1KQorI2RlZmluZSBUQUJMQV9BX0NEQ19JSVIxX0dBSU5fQjZfQ1RMX19QT1IgKDB4MDAwMDAwMDApCisjZGVmaW5lIFRBQkxBX0FfQ0RDX0lJUjJfR0FJTl9CNl9DVEwgKDB4MDAwMDAzNTUpCisjZGVmaW5lIFRBQkxBX0FfQ0RDX0lJUjJfR0FJTl9CNl9DVExfX1BPUiAoMHgwMDAwMDAwMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRBQkxBX0FfQ0RDX0lJUjFfR0FJTl9CN19DVEwgKDB4MDAwMDAzNDYpCisjZGVmaW5lIFRBQkxBX0FfQ0RDX0lJUjFfR0FJTl9CN19DVExfX1BPUiAoMHgwMDAwMDAwMCkKKyNkZWZpbmUgVEFCTEFfQV9DRENfSUlSMl9HQUlOX0I3X0NUTCAoMHgwMDAwMDM1NikKKyNkZWZpbmUgVEFCTEFfQV9DRENfSUlSMl9HQUlOX0I3X0NUTF9fUE9SICgweDAwMDAwMDAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVEFCTEFfQV9DRENfSUlSMV9HQUlOX0I4X0NUTCAoMHgwMDAwMDM0NykKKyNkZWZpbmUgVEFCTEFfQV9DRENfSUlSMV9HQUlOX0I4X0NUTF9fUE9SICgweDAwMDAwMDAwKQorI2RlZmluZSBUQUJMQV9BX0NEQ19JSVIyX0dBSU5fQjhfQ1RMICgweDAwMDAwMzU3KQorI2RlZmluZSBUQUJMQV9BX0NEQ19JSVIyX0dBSU5fQjhfQ1RMX19QT1IgKDB4MDAwMDAwMDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUQUJMQV9BX0NEQ19JSVIxX0NUTCAoMHgwMDAwMDM0OCkKKyNkZWZpbmUgVEFCTEFfQV9DRENfSUlSMV9DVExfX1BPUiAoMHgwMDAwMDAwMCkKKyNkZWZpbmUgVEFCTEFfQV9DRENfSUlSMl9DVEwgKDB4MDAwMDAzNTgpCisjZGVmaW5lIFRBQkxBX0FfQ0RDX0lJUjJfQ1RMX19QT1IgKDB4MDAwMDAwMDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUQUJMQV9BX0NEQ19JSVIxX0dBSU5fVElNRVJfQ1RMICgweDAwMDAwMzQ5KQorI2RlZmluZSBUQUJMQV9BX0NEQ19JSVIxX0dBSU5fVElNRVJfQ1RMX19QT1IgKDB4MDAwMDAwMDApCisjZGVmaW5lIFRBQkxBX0FfQ0RDX0lJUjJfR0FJTl9USU1FUl9DVEwgKDB4MDAwMDAzNTkpCisjZGVmaW5lIFRBQkxBX0FfQ0RDX0lJUjJfR0FJTl9USU1FUl9DVExfX1BPUiAoMHgwMDAwMDAwMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRBQkxBX0FfQ0RDX0lJUjFfQ09FRl9CMV9DVEwgKDB4MDAwMDAzNEEpCisjZGVmaW5lIFRBQkxBX0FfQ0RDX0lJUjFfQ09FRl9CMV9DVExfX1BPUiAoMHgwMDAwMDAwMCkKKyNkZWZpbmUgVEFCTEFfQV9DRENfSUlSMl9DT0VGX0IxX0NUTCAoMHgwMDAwMDM1QSkKKyNkZWZpbmUgVEFCTEFfQV9DRENfSUlSMl9DT0VGX0IxX0NUTF9fUE9SICgweDAwMDAwMDAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVEFCTEFfQV9DRENfSUlSMV9DT0VGX0IyX0NUTCAoMHgwMDAwMDM0QikKKyNkZWZpbmUgVEFCTEFfQV9DRENfSUlSMV9DT0VGX0IyX0NUTF9fUE9SICgweDAwMDAwMDAwKQorI2RlZmluZSBUQUJMQV9BX0NEQ19JSVIyX0NPRUZfQjJfQ1RMICgweDAwMDAwMzVCKQorI2RlZmluZSBUQUJMQV9BX0NEQ19JSVIyX0NPRUZfQjJfQ1RMX19QT1IgKDB4MDAwMDAwMDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUQUJMQV9BX0NEQ19JSVIxX0NPRUZfQjNfQ1RMICgweDAwMDAwMzRDKQorI2RlZmluZSBUQUJMQV9BX0NEQ19JSVIxX0NPRUZfQjNfQ1RMX19QT1IgKDB4MDAwMDAwMDApCisjZGVmaW5lIFRBQkxBX0FfQ0RDX0lJUjJfQ09FRl9CM19DVEwgKDB4MDAwMDAzNUMpCisjZGVmaW5lIFRBQkxBX0FfQ0RDX0lJUjJfQ09FRl9CM19DVExfX1BPUiAoMHgwMDAwMDAwMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRBQkxBX0FfQ0RDX0lJUjFfQ09FRl9CNF9DVEwgKDB4MDAwMDAzNEQpCisjZGVmaW5lIFRBQkxBX0FfQ0RDX0lJUjFfQ09FRl9CNF9DVExfX1BPUiAoMHgwMDAwMDAwMCkKKyNkZWZpbmUgVEFCTEFfQV9DRENfSUlSMl9DT0VGX0I0X0NUTCAoMHgwMDAwMDM1RCkKKyNkZWZpbmUgVEFCTEFfQV9DRENfSUlSMl9DT0VGX0I0X0NUTF9fUE9SICgweDAwMDAwMDAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVEFCTEFfQV9DRENfSUlSMV9DT0VGX0I1X0NUTCAoMHgwMDAwMDM0RSkKKyNkZWZpbmUgVEFCTEFfQV9DRENfSUlSMV9DT0VGX0I1X0NUTF9fUE9SICgweDAwMDAwMDAwKQorI2RlZmluZSBUQUJMQV9BX0NEQ19JSVIyX0NPRUZfQjVfQ1RMICgweDAwMDAwMzVFKQorI2RlZmluZSBUQUJMQV9BX0NEQ19JSVIyX0NPRUZfQjVfQ1RMX19QT1IgKDB4MDAwMDAwMDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUQUJMQV9BX0NEQ19UT1BfR0FJTl9VUERBVEUgKDB4MDAwMDAzNjApCisjZGVmaW5lIFRBQkxBX0FfQ0RDX1RPUF9HQUlOX1VQREFURV9fUE9SICgweDAwMDAwMDAwKQorI2RlZmluZSBUQUJMQV9BX0NEQ19ERUJVR19CMV9DVEwgKDB4MDAwMDAzNjgpCisjZGVmaW5lIFRBQkxBX0FfQ0RDX0RFQlVHX0IxX0NUTF9fUE9SICgweDAwMDAwMDAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVEFCTEFfQV9DRENfREVCVUdfQjJfQ1RMICgweDAwMDAwMzY5KQorI2RlZmluZSBUQUJMQV9BX0NEQ19ERUJVR19CMl9DVExfX1BPUiAoMHgwMDAwMDAwMCkKKyNkZWZpbmUgVEFCTEFfQV9DRENfREVCVUdfQjNfQ1RMICgweDAwMDAwMzZBKQorI2RlZmluZSBUQUJMQV9BX0NEQ19ERUJVR19CM19DVExfX1BPUiAoMHgwMDAwMDAwMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRBQkxBX0FfQ0RDX0RFQlVHX0I0X0NUTCAoMHgwMDAwMDM2QikKKyNkZWZpbmUgVEFCTEFfQV9DRENfREVCVUdfQjRfQ1RMX19QT1IgKDB4MDAwMDAwMDApCisjZGVmaW5lIFRBQkxBX0FfQ0RDX0RFQlVHX0I1X0NUTCAoMHgwMDAwMDM2QykKKyNkZWZpbmUgVEFCTEFfQV9DRENfREVCVUdfQjVfQ1RMX19QT1IgKDB4MDAwMDAwMDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUQUJMQV9BX0NEQ19ERUJVR19CNl9DVEwgKDB4MDAwMDAzNkQpCisjZGVmaW5lIFRBQkxBX0FfQ0RDX0RFQlVHX0I2X0NUTF9fUE9SICgweDAwMDAwMDAwKQorI2RlZmluZSBUQUJMQV9BX0NEQ19DT01QMV9CMV9DVEwgKDB4MDAwMDAzNzApCisjZGVmaW5lIFRBQkxBX0FfQ0RDX0NPTVAxX0IxX0NUTF9fUE9SICgweDAwMDAwMDAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVEFCTEFfQV9DRENfQ09NUDFfQjJfQ1RMICgweDAwMDAwMzcxKQorI2RlZmluZSBUQUJMQV9BX0NEQ19DT01QMV9CMl9DVExfX1BPUiAoMHgwMDAwMDAwMCkKKyNkZWZpbmUgVEFCTEFfQV9DRENfQ09NUDFfQjNfQ1RMICgweDAwMDAwMzcyKQorI2RlZmluZSBUQUJMQV9BX0NEQ19DT01QMV9CM19DVExfX1BPUiAoMHgwMDAwMDAwMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRBQkxBX0FfQ0RDX0NPTVAxX0I0X0NUTCAoMHgwMDAwMDM3MykKKyNkZWZpbmUgVEFCTEFfQV9DRENfQ09NUDFfQjRfQ1RMX19QT1IgKDB4MDAwMDAwMDApCisjZGVmaW5lIFRBQkxBX0FfQ0RDX0NPTVAxX0I1X0NUTCAoMHgwMDAwMDM3NCkKKyNkZWZpbmUgVEFCTEFfQV9DRENfQ09NUDFfQjVfQ1RMX19QT1IgKDB4MDAwMDAwMDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUQUJMQV9BX0NEQ19DT01QMV9CNl9DVEwgKDB4MDAwMDAzNzUpCisjZGVmaW5lIFRBQkxBX0FfQ0RDX0NPTVAxX0I2X0NUTF9fUE9SICgweDAwMDAwMDAwKQorI2RlZmluZSBUQUJMQV9BX0NEQ19DT01QMV9TSFVUX0RPV05fU1RBVFVTICgweDAwMDAwMzc2KQorI2RlZmluZSBUQUJMQV9BX0NEQ19DT01QMV9TSFVUX0RPV05fU1RBVFVTX19QT1IgKDB4MDAwMDAwMDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUQUJMQV9BX0NEQ19DT01QMV9GU19DRkcgKDB4MDAwMDAzNzcpCisjZGVmaW5lIFRBQkxBX0FfQ0RDX0NPTVAxX0ZTX0NGR19fUE9SICgweDAwMDAwMDAwKQorI2RlZmluZSBUQUJMQV9BX0NEQ19DT01QMl9CMV9DVEwgKDB4MDAwMDAzNzgpCisjZGVmaW5lIFRBQkxBX0FfQ0RDX0NPTVAyX0IxX0NUTF9fUE9SICgweDAwMDAwMDAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVEFCTEFfQV9DRENfQ09NUDJfQjJfQ1RMICgweDAwMDAwMzc5KQorI2RlZmluZSBUQUJMQV9BX0NEQ19DT01QMl9CMl9DVExfX1BPUiAoMHgwMDAwMDAwMCkKKyNkZWZpbmUgVEFCTEFfQV9DRENfQ09NUDJfQjNfQ1RMICgweDAwMDAwMzdBKQorI2RlZmluZSBUQUJMQV9BX0NEQ19DT01QMl9CM19DVExfX1BPUiAoMHgwMDAwMDAwMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRBQkxBX0FfQ0RDX0NPTVAyX0I0X0NUTCAoMHgwMDAwMDM3QikKKyNkZWZpbmUgVEFCTEFfQV9DRENfQ09NUDJfQjRfQ1RMX19QT1IgKDB4MDAwMDAwMDApCisjZGVmaW5lIFRBQkxBX0FfQ0RDX0NPTVAyX0I1X0NUTCAoMHgwMDAwMDM3QykKKyNkZWZpbmUgVEFCTEFfQV9DRENfQ09NUDJfQjVfQ1RMX19QT1IgKDB4MDAwMDAwMDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUQUJMQV9BX0NEQ19DT01QMl9CNl9DVEwgKDB4MDAwMDAzN0QpCisjZGVmaW5lIFRBQkxBX0FfQ0RDX0NPTVAyX0I2X0NUTF9fUE9SICgweDAwMDAwMDAwKQorI2RlZmluZSBUQUJMQV9BX0NEQ19DT01QMl9TSFVUX0RPV05fU1RBVFVTICgweDAwMDAwMzdFKQorI2RlZmluZSBUQUJMQV9BX0NEQ19DT01QMl9TSFVUX0RPV05fU1RBVFVTX19QT1IgKDB4MDAwMDAwMDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUQUJMQV9BX0NEQ19DT01QMl9GU19DRkcgKDB4MDAwMDAzN0YpCisjZGVmaW5lIFRBQkxBX0FfQ0RDX0NPTVAyX0ZTX0NGR19fUE9SICgweDAwMDAwMDAwKQorI2RlZmluZSBUQUJMQV9BX0NEQ19DT05OX1JYMV9CMV9DVEwgKDB4MDAwMDAzODApCisjZGVmaW5lIFRBQkxBX0FfQ0RDX0NPTk5fUlgxX0IxX0NUTF9fUE9SICgweDAwMDAwMDAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVEFCTEFfQV9DRENfQ09OTl9SWDFfQjJfQ1RMICgweDAwMDAwMzgxKQorI2RlZmluZSBUQUJMQV9BX0NEQ19DT05OX1JYMV9CMl9DVExfX1BPUiAoMHgwMDAwMDAwMCkKKyNkZWZpbmUgVEFCTEFfQV9DRENfQ09OTl9SWDFfQjNfQ1RMICgweDAwMDAwMzgyKQorI2RlZmluZSBUQUJMQV9BX0NEQ19DT05OX1JYMV9CM19DVExfX1BPUiAoMHgwMDAwMDAwMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRBQkxBX0FfQ0RDX0NPTk5fUlgyX0IxX0NUTCAoMHgwMDAwMDM4MykKKyNkZWZpbmUgVEFCTEFfQV9DRENfQ09OTl9SWDJfQjFfQ1RMX19QT1IgKDB4MDAwMDAwMDApCisjZGVmaW5lIFRBQkxBX0FfQ0RDX0NPTk5fUlgyX0IyX0NUTCAoMHgwMDAwMDM4NCkKKyNkZWZpbmUgVEFCTEFfQV9DRENfQ09OTl9SWDJfQjJfQ1RMX19QT1IgKDB4MDAwMDAwMDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUQUJMQV9BX0NEQ19DT05OX1JYMl9CM19DVEwgKDB4MDAwMDAzODUpCisjZGVmaW5lIFRBQkxBX0FfQ0RDX0NPTk5fUlgyX0IzX0NUTF9fUE9SICgweDAwMDAwMDAwKQorI2RlZmluZSBUQUJMQV9BX0NEQ19DT05OX1JYM19CMV9DVEwgKDB4MDAwMDAzODYpCisjZGVmaW5lIFRBQkxBX0FfQ0RDX0NPTk5fUlgzX0IxX0NUTF9fUE9SICgweDAwMDAwMDAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVEFCTEFfQV9DRENfQ09OTl9SWDNfQjJfQ1RMICgweDAwMDAwMzg3KQorI2RlZmluZSBUQUJMQV9BX0NEQ19DT05OX1JYM19CMl9DVExfX1BPUiAoMHgwMDAwMDAwMCkKKyNkZWZpbmUgVEFCTEFfQV9DRENfQ09OTl9SWDNfQjNfQ1RMICgweDAwMDAwMzg4KQorI2RlZmluZSBUQUJMQV9BX0NEQ19DT05OX1JYM19CM19DVExfX1BPUiAoMHgwMDAwMDAwMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRBQkxBX0FfQ0RDX0NPTk5fUlg0X0IxX0NUTCAoMHgwMDAwMDM4OSkKKyNkZWZpbmUgVEFCTEFfQV9DRENfQ09OTl9SWDRfQjFfQ1RMX19QT1IgKDB4MDAwMDAwMDApCisjZGVmaW5lIFRBQkxBX0FfQ0RDX0NPTk5fUlg0X0IyX0NUTCAoMHgwMDAwMDM4QSkKKyNkZWZpbmUgVEFCTEFfQV9DRENfQ09OTl9SWDRfQjJfQ1RMX19QT1IgKDB4MDAwMDAwMDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUQUJMQV9BX0NEQ19DT05OX1JYNV9CMV9DVEwgKDB4MDAwMDAzOEIpCisjZGVmaW5lIFRBQkxBX0FfQ0RDX0NPTk5fUlg1X0IxX0NUTF9fUE9SICgweDAwMDAwMDAwKQorI2RlZmluZSBUQUJMQV9BX0NEQ19DT05OX1JYNV9CMl9DVEwgKDB4MDAwMDAzOEMpCisjZGVmaW5lIFRBQkxBX0FfQ0RDX0NPTk5fUlg1X0IyX0NUTF9fUE9SICgweDAwMDAwMDAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVEFCTEFfQV9DRENfQ09OTl9SWDZfQjFfQ1RMICgweDAwMDAwMzhEKQorI2RlZmluZSBUQUJMQV9BX0NEQ19DT05OX1JYNl9CMV9DVExfX1BPUiAoMHgwMDAwMDAwMCkKKyNkZWZpbmUgVEFCTEFfQV9DRENfQ09OTl9SWDZfQjJfQ1RMICgweDAwMDAwMzhFKQorI2RlZmluZSBUQUJMQV9BX0NEQ19DT05OX1JYNl9CMl9DVExfX1BPUiAoMHgwMDAwMDAwMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRBQkxBX0FfQ0RDX0NPTk5fUlg3X0IxX0NUTCAoMHgwMDAwMDM4RikKKyNkZWZpbmUgVEFCTEFfQV9DRENfQ09OTl9SWDdfQjFfQ1RMX19QT1IgKDB4MDAwMDAwMDApCisjZGVmaW5lIFRBQkxBX0FfQ0RDX0NPTk5fUlg3X0IyX0NUTCAoMHgwMDAwMDM5MCkKKyNkZWZpbmUgVEFCTEFfQV9DRENfQ09OTl9SWDdfQjJfQ1RMX19QT1IgKDB4MDAwMDAwMDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUQUJMQV9BX0NEQ19DT05OX0FOQ19CMV9DVEwgKDB4MDAwMDAzOTEpCisjZGVmaW5lIFRBQkxBX0FfQ0RDX0NPTk5fQU5DX0IxX0NUTF9fUE9SICgweDAwMDAwMDAwKQorI2RlZmluZSBUQUJMQV9BX0NEQ19DT05OX0FOQ19CMl9DVEwgKDB4MDAwMDAzOTIpCisjZGVmaW5lIFRBQkxBX0FfQ0RDX0NPTk5fQU5DX0IyX0NUTF9fUE9SICgweDAwMDAwMDAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVEFCTEFfQV9DRENfQ09OTl9UWF9CMV9DVEwgKDB4MDAwMDAzOTMpCisjZGVmaW5lIFRBQkxBX0FfQ0RDX0NPTk5fVFhfQjFfQ1RMX19QT1IgKDB4MDAwMDAwMDApCisjZGVmaW5lIFRBQkxBX0FfQ0RDX0NPTk5fVFhfQjJfQ1RMICgweDAwMDAwMzk0KQorI2RlZmluZSBUQUJMQV9BX0NEQ19DT05OX1RYX0IyX0NUTF9fUE9SICgweDAwMDAwMDAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVEFCTEFfQV9DRENfQ09OTl9UWF9CM19DVEwgKDB4MDAwMDAzOTUpCisjZGVmaW5lIFRBQkxBX0FfQ0RDX0NPTk5fVFhfQjNfQ1RMX19QT1IgKDB4MDAwMDAwMDApCisjZGVmaW5lIFRBQkxBX0FfQ0RDX0NPTk5fVFhfQjRfQ1RMICgweDAwMDAwMzk2KQorI2RlZmluZSBUQUJMQV9BX0NEQ19DT05OX1RYX0I0X0NUTF9fUE9SICgweDAwMDAwMDAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVEFCTEFfQV9DRENfQ09OTl9FUTFfQjFfQ1RMICgweDAwMDAwMzk3KQorI2RlZmluZSBUQUJMQV9BX0NEQ19DT05OX0VRMV9CMV9DVExfX1BPUiAoMHgwMDAwMDAwMCkKKyNkZWZpbmUgVEFCTEFfQV9DRENfQ09OTl9FUTFfQjJfQ1RMICgweDAwMDAwMzk4KQorI2RlZmluZSBUQUJMQV9BX0NEQ19DT05OX0VRMV9CMl9DVExfX1BPUiAoMHgwMDAwMDAwMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRBQkxBX0FfQ0RDX0NPTk5fRVExX0IzX0NUTCAoMHgwMDAwMDM5OSkKKyNkZWZpbmUgVEFCTEFfQV9DRENfQ09OTl9FUTFfQjNfQ1RMX19QT1IgKDB4MDAwMDAwMDApCisjZGVmaW5lIFRBQkxBX0FfQ0RDX0NPTk5fRVExX0I0X0NUTCAoMHgwMDAwMDM5QSkKKyNkZWZpbmUgVEFCTEFfQV9DRENfQ09OTl9FUTFfQjRfQ1RMX19QT1IgKDB4MDAwMDAwMDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUQUJMQV9BX0NEQ19DT05OX0VRMl9CMV9DVEwgKDB4MDAwMDAzOUIpCisjZGVmaW5lIFRBQkxBX0FfQ0RDX0NPTk5fRVEyX0IxX0NUTF9fUE9SICgweDAwMDAwMDAwKQorI2RlZmluZSBUQUJMQV9BX0NEQ19DT05OX0VRMl9CMl9DVEwgKDB4MDAwMDAzOUMpCisjZGVmaW5lIFRBQkxBX0FfQ0RDX0NPTk5fRVEyX0IyX0NUTF9fUE9SICgweDAwMDAwMDAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVEFCTEFfQV9DRENfQ09OTl9FUTJfQjNfQ1RMICgweDAwMDAwMzlEKQorI2RlZmluZSBUQUJMQV9BX0NEQ19DT05OX0VRMl9CM19DVExfX1BPUiAoMHgwMDAwMDAwMCkKKyNkZWZpbmUgVEFCTEFfQV9DRENfQ09OTl9FUTJfQjRfQ1RMICgweDAwMDAwMzlFKQorI2RlZmluZSBUQUJMQV9BX0NEQ19DT05OX0VRMl9CNF9DVExfX1BPUiAoMHgwMDAwMDAwMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRBQkxBX0FfQ0RDX0NPTk5fU1JDMV9CMV9DVEwgKDB4MDAwMDAzOUYpCisjZGVmaW5lIFRBQkxBX0FfQ0RDX0NPTk5fU1JDMV9CMV9DVExfX1BPUiAoMHgwMDAwMDAwMCkKKyNkZWZpbmUgVEFCTEFfQV9DRENfQ09OTl9TUkMxX0IyX0NUTCAoMHgwMDAwMDNBMCkKKyNkZWZpbmUgVEFCTEFfQV9DRENfQ09OTl9TUkMxX0IyX0NUTF9fUE9SICgweDAwMDAwMDAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVEFCTEFfQV9DRENfQ09OTl9TUkMyX0IxX0NUTCAoMHgwMDAwMDNBMSkKKyNkZWZpbmUgVEFCTEFfQV9DRENfQ09OTl9TUkMyX0IxX0NUTF9fUE9SICgweDAwMDAwMDAwKQorI2RlZmluZSBUQUJMQV9BX0NEQ19DT05OX1NSQzJfQjJfQ1RMICgweDAwMDAwM0EyKQorI2RlZmluZSBUQUJMQV9BX0NEQ19DT05OX1NSQzJfQjJfQ1RMX19QT1IgKDB4MDAwMDAwMDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUQUJMQV9BX0NEQ19DT05OX1RYX1NCX0IxX0NUTCAoMHgwMDAwMDNBMykKKyNkZWZpbmUgVEFCTEFfQV9DRENfQ09OTl9UWF9TQl9CMV9DVExfX1BPUiAoMHgwMDAwMDAwMCkKKyNkZWZpbmUgVEFCTEFfQV9DRENfQ09OTl9UWF9TQl9CMl9DVEwgKDB4MDAwMDAzQTQpCisjZGVmaW5lIFRBQkxBX0FfQ0RDX0NPTk5fVFhfU0JfQjJfQ1RMX19QT1IgKDB4MDAwMDAwMDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUQUJMQV9BX0NEQ19DT05OX1RYX1NCX0IzX0NUTCAoMHgwMDAwMDNBNSkKKyNkZWZpbmUgVEFCTEFfQV9DRENfQ09OTl9UWF9TQl9CM19DVExfX1BPUiAoMHgwMDAwMDAwMCkKKyNkZWZpbmUgVEFCTEFfQV9DRENfQ09OTl9UWF9TQl9CNF9DVEwgKDB4MDAwMDAzQTYpCisjZGVmaW5lIFRBQkxBX0FfQ0RDX0NPTk5fVFhfU0JfQjRfQ1RMX19QT1IgKDB4MDAwMDAwMDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUQUJMQV9BX0NEQ19DT05OX1RYX1NCX0I1X0NUTCAoMHgwMDAwMDNBNykKKyNkZWZpbmUgVEFCTEFfQV9DRENfQ09OTl9UWF9TQl9CNV9DVExfX1BPUiAoMHgwMDAwMDAwMCkKKyNkZWZpbmUgVEFCTEFfQV9DRENfQ09OTl9UWF9TQl9CNl9DVEwgKDB4MDAwMDAzQTgpCisjZGVmaW5lIFRBQkxBX0FfQ0RDX0NPTk5fVFhfU0JfQjZfQ1RMX19QT1IgKDB4MDAwMDAwMDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUQUJMQV9BX0NEQ19DT05OX1RYX1NCX0I3X0NUTCAoMHgwMDAwMDNBOSkKKyNkZWZpbmUgVEFCTEFfQV9DRENfQ09OTl9UWF9TQl9CN19DVExfX1BPUiAoMHgwMDAwMDAwMCkKKyNkZWZpbmUgVEFCTEFfQV9DRENfQ09OTl9UWF9TQl9COF9DVEwgKDB4MDAwMDAzQUEpCisjZGVmaW5lIFRBQkxBX0FfQ0RDX0NPTk5fVFhfU0JfQjhfQ1RMX19QT1IgKDB4MDAwMDAwMDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUQUJMQV9BX0NEQ19DT05OX1RYX1NCX0I5X0NUTCAoMHgwMDAwMDNBQikKKyNkZWZpbmUgVEFCTEFfQV9DRENfQ09OTl9UWF9TQl9COV9DVExfX1BPUiAoMHgwMDAwMDAwMCkKKyNkZWZpbmUgVEFCTEFfQV9DRENfQ09OTl9UWF9TQl9CMTBfQ1RMICgweDAwMDAwM0FDKQorI2RlZmluZSBUQUJMQV9BX0NEQ19DT05OX1RYX1NCX0IxMF9DVExfX1BPUiAoMHgwMDAwMDAwMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRBQkxBX0FfQ0RDX0NPTk5fVFhfU0JfQjExX0NUTCAoMHgwMDAwMDNBRCkKKyNkZWZpbmUgVEFCTEFfQV9DRENfQ09OTl9UWF9TQl9CMTFfQ1RMX19QT1IgKDB4MDAwMDAwMDApCisjZGVmaW5lIFRBQkxBX0FfQ0RDX0NPTk5fUlhfU0JfQjFfQ1RMICgweDAwMDAwM0FFKQorI2RlZmluZSBUQUJMQV9BX0NEQ19DT05OX1JYX1NCX0IxX0NUTF9fUE9SICgweDAwMDAwMDAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVEFCTEFfQV9DRENfQ09OTl9SWF9TQl9CMl9DVEwgKDB4MDAwMDAzQUYpCisjZGVmaW5lIFRBQkxBX0FfQ0RDX0NPTk5fUlhfU0JfQjJfQ1RMX19QT1IgKDB4MDAwMDAwMDApCisjZGVmaW5lIFRBQkxBX0FfQ0RDX0NPTk5fQ0xTR19DVEwgKDB4MDAwMDAzQjApCisjZGVmaW5lIFRBQkxBX0FfQ0RDX0NPTk5fQ0xTR19DVExfX1BPUiAoMHgwMDAwMDAwMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRBQkxBX0FfQ0RDX0NPTk5fU1BBUkUgKDB4MDAwMDAzQjEpCisjZGVmaW5lIFRBQkxBX0FfQ0RDX0NPTk5fU1BBUkVfX1BPUiAoMHgwMDAwMDAwMCkKKyNkZWZpbmUgVEFCTEFfQV9DRENfTUJIQ19FTl9DVEwgKDB4MDAwMDAzQzApCisjZGVmaW5lIFRBQkxBX0FfQ0RDX01CSENfRU5fQ1RMX19QT1IgKDB4MDAwMDAwMDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUQUJMQV9BX0NEQ19NQkhDX0ZFQVRVUkVfQjFfQ0ZHICgweDAwMDAwM0MxKQorI2RlZmluZSBUQUJMQV9BX0NEQ19NQkhDX0ZFQVRVUkVfQjFfQ0ZHX19QT1IgKDB4MDAwMDAwMDApCisjZGVmaW5lIFRBQkxBX0FfQ0RDX01CSENfRkVBVFVSRV9CMl9DRkcgKDB4MDAwMDAzQzIpCisjZGVmaW5lIFRBQkxBX0FfQ0RDX01CSENfRkVBVFVSRV9CMl9DRkdfX1BPUiAoMHgwMDAwMDAwNikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRBQkxBX0FfQ0RDX01CSENfVElNRVJfQjFfQ1RMICgweDAwMDAwM0MzKQorI2RlZmluZSBUQUJMQV9BX0NEQ19NQkhDX1RJTUVSX0IxX0NUTF9fUE9SICgweDAwMDAwMDAzKQorI2RlZmluZSBUQUJMQV9BX0NEQ19NQkhDX1RJTUVSX0IyX0NUTCAoMHgwMDAwMDNDNCkKKyNkZWZpbmUgVEFCTEFfQV9DRENfTUJIQ19USU1FUl9CMl9DVExfX1BPUiAoMHgwMDAwMDAwOSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRBQkxBX0FfQ0RDX01CSENfVElNRVJfQjNfQ1RMICgweDAwMDAwM0M1KQorI2RlZmluZSBUQUJMQV9BX0NEQ19NQkhDX1RJTUVSX0IzX0NUTF9fUE9SICgweDAwMDAwMDFlKQorI2RlZmluZSBUQUJMQV9BX0NEQ19NQkhDX1RJTUVSX0I0X0NUTCAoMHgwMDAwMDNDNikKKyNkZWZpbmUgVEFCTEFfQV9DRENfTUJIQ19USU1FUl9CNF9DVExfX1BPUiAoMHgwMDAwMDA0NSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRBQkxBX0FfQ0RDX01CSENfVElNRVJfQjVfQ1RMICgweDAwMDAwM0M3KQorI2RlZmluZSBUQUJMQV9BX0NEQ19NQkhDX1RJTUVSX0I1X0NUTF9fUE9SICgweDAwMDAwMDA0KQorI2RlZmluZSBUQUJMQV9BX0NEQ19NQkhDX1RJTUVSX0I2X0NUTCAoMHgwMDAwMDNDOCkKKyNkZWZpbmUgVEFCTEFfQV9DRENfTUJIQ19USU1FUl9CNl9DVExfX1BPUiAoMHgwMDAwMDA3OCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRBQkxBX0FfQ0RDX01CSENfQjFfU1RBVFVTICgweDAwMDAwM0M5KQorI2RlZmluZSBUQUJMQV9BX0NEQ19NQkhDX0IxX1NUQVRVU19fUE9SICgweDAwMDAwMDAwKQorI2RlZmluZSBUQUJMQV9BX0NEQ19NQkhDX0IyX1NUQVRVUyAoMHgwMDAwMDNDQSkKKyNkZWZpbmUgVEFCTEFfQV9DRENfTUJIQ19CMl9TVEFUVVNfX1BPUiAoMHgwMDAwMDAwMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRBQkxBX0FfQ0RDX01CSENfQjNfU1RBVFVTICgweDAwMDAwM0NCKQorI2RlZmluZSBUQUJMQV9BX0NEQ19NQkhDX0IzX1NUQVRVU19fUE9SICgweDAwMDAwMDAwKQorI2RlZmluZSBUQUJMQV9BX0NEQ19NQkhDX0I0X1NUQVRVUyAoMHgwMDAwMDNDQykKKyNkZWZpbmUgVEFCTEFfQV9DRENfTUJIQ19CNF9TVEFUVVNfX1BPUiAoMHgwMDAwMDAwMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRBQkxBX0FfQ0RDX01CSENfQjVfU1RBVFVTICgweDAwMDAwM0NEKQorI2RlZmluZSBUQUJMQV9BX0NEQ19NQkhDX0I1X1NUQVRVU19fUE9SICgweDAwMDAwMDAwKQorI2RlZmluZSBUQUJMQV9BX0NEQ19NQkhDX0IxX0NUTCAoMHgwMDAwMDNDRSkKKyNkZWZpbmUgVEFCTEFfQV9DRENfTUJIQ19CMV9DVExfX1BPUiAoMHgwMDAwMDBjMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRBQkxBX0FfQ0RDX01CSENfQjJfQ1RMICgweDAwMDAwM0NGKQorI2RlZmluZSBUQUJMQV9BX0NEQ19NQkhDX0IyX0NUTF9fUE9SICgweDAwMDAwMDVkKQorI2RlZmluZSBUQUJMQV9BX0NEQ19NQkhDX1ZPTFRfQjFfQ1RMICgweDAwMDAwM0QwKQorI2RlZmluZSBUQUJMQV9BX0NEQ19NQkhDX1ZPTFRfQjFfQ1RMX19QT1IgKDB4MDAwMDAwMDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUQUJMQV9BX0NEQ19NQkhDX1ZPTFRfQjJfQ1RMICgweDAwMDAwM0QxKQorI2RlZmluZSBUQUJMQV9BX0NEQ19NQkhDX1ZPTFRfQjJfQ1RMX19QT1IgKDB4MDAwMDAwMDApCisjZGVmaW5lIFRBQkxBX0FfQ0RDX01CSENfVk9MVF9CM19DVEwgKDB4MDAwMDAzRDIpCisjZGVmaW5lIFRBQkxBX0FfQ0RDX01CSENfVk9MVF9CM19DVExfX1BPUiAoMHgwMDAwMDAwMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRBQkxBX0FfQ0RDX01CSENfVk9MVF9CNF9DVEwgKDB4MDAwMDAzRDMpCisjZGVmaW5lIFRBQkxBX0FfQ0RDX01CSENfVk9MVF9CNF9DVExfX1BPUiAoMHgwMDAwMDAwMCkKKyNkZWZpbmUgVEFCTEFfQV9DRENfTUJIQ19WT0xUX0I1X0NUTCAoMHgwMDAwMDNENCkKKyNkZWZpbmUgVEFCTEFfQV9DRENfTUJIQ19WT0xUX0I1X0NUTF9fUE9SICgweDAwMDAwMDAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVEFCTEFfQV9DRENfTUJIQ19WT0xUX0I2X0NUTCAoMHgwMDAwMDNENSkKKyNkZWZpbmUgVEFCTEFfQV9DRENfTUJIQ19WT0xUX0I2X0NUTF9fUE9SICgweDAwMDAwMDAwKQorI2RlZmluZSBUQUJMQV9BX0NEQ19NQkhDX1ZPTFRfQjdfQ1RMICgweDAwMDAwM0Q2KQorI2RlZmluZSBUQUJMQV9BX0NEQ19NQkhDX1ZPTFRfQjdfQ1RMX19QT1IgKDB4MDAwMDAwZmYpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUQUJMQV9BX0NEQ19NQkhDX1ZPTFRfQjhfQ1RMICgweDAwMDAwM0Q3KQorI2RlZmluZSBUQUJMQV9BX0NEQ19NQkhDX1ZPTFRfQjhfQ1RMX19QT1IgKDB4MDAwMDAwMDcpCisjZGVmaW5lIFRBQkxBX0FfQ0RDX01CSENfVk9MVF9COV9DVEwgKDB4MDAwMDAzRDgpCisjZGVmaW5lIFRBQkxBX0FfQ0RDX01CSENfVk9MVF9COV9DVExfX1BPUiAoMHgwMDAwMDBmZikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRBQkxBX0FfQ0RDX01CSENfVk9MVF9CMTBfQ1RMICgweDAwMDAwM0Q5KQorI2RlZmluZSBUQUJMQV9BX0NEQ19NQkhDX1ZPTFRfQjEwX0NUTF9fUE9SICgweDAwMDAwMDdmKQorI2RlZmluZSBUQUJMQV9BX0NEQ19NQkhDX1ZPTFRfQjExX0NUTCAoMHgwMDAwMDNEQSkKKyNkZWZpbmUgVEFCTEFfQV9DRENfTUJIQ19WT0xUX0IxMV9DVExfX1BPUiAoMHgwMDAwMDAwMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRBQkxBX0FfQ0RDX01CSENfVk9MVF9CMTJfQ1RMICgweDAwMDAwM0RCKQorI2RlZmluZSBUQUJMQV9BX0NEQ19NQkhDX1ZPTFRfQjEyX0NUTF9fUE9SICgweDAwMDAwMDgwKQorI2RlZmluZSBUQUJMQV9BX0NEQ19NQkhDX0NMS19DVEwgKDB4MDAwMDAzREMpCisjZGVmaW5lIFRBQkxBX0FfQ0RDX01CSENfQ0xLX0NUTF9fUE9SICgweDAwMDAwMDAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVEFCTEFfQV9DRENfTUJIQ19JTlRfQ1RMICgweDAwMDAwM0REKQorI2RlZmluZSBUQUJMQV9BX0NEQ19NQkhDX0lOVF9DVExfX1BPUiAoMHgwMDAwMDAwMCkKKyNkZWZpbmUgVEFCTEFfQV9DRENfTUJIQ19ERUJVR19DVEwgKDB4MDAwMDAzREUpCisjZGVmaW5lIFRBQkxBX0FfQ0RDX01CSENfREVCVUdfQ1RMX19QT1IgKDB4MDAwMDAwMDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUQUJMQV9BX0NEQ19NQkhDX1NQQVJFICgweDAwMDAwM0RGKQorI2RlZmluZSBUQUJMQV9BX0NEQ19NQkhDX1NQQVJFX19QT1IgKDB4MDAwMDAwMDApCisjZGVmaW5lIFRBQkxBX1NMSU1fUEdEX1BPUlRfSU5UX0VOMCAoMHgzMCkKKyNkZWZpbmUgVEFCTEFfU0xJTV9QR0RfUE9SVF9JTlRfU1RBVFVTMCAoMHgzNCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRBQkxBX1NMSU1fUEdEX1BPUlRfSU5UX0NMUjAgKDB4MzgpCisjZGVmaW5lIFRBQkxBX1NMSU1fUEdEX1BPUlRfSU5UX1NPVVJDRTAgKDB4NjApCisjZGVmaW5lIFRBQkxBX1BBQ0tFRF9SRUdfU0laRSBzaXplb2YodTMyKQorI2RlZmluZSBUQUJMQV9DT0RFQ19QQUNLX0VOVFJZKHJlZywgbWFzaywgdmFsKSAoKHZhbCAmIDB4ZmYpfCAgKChtYXNrICYgMHhmZikgPDwgOCl8KChyZWcgJiAweGZmZmYpIDw8IDE2KSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRBQkxBX0NPREVDX1VOUEFDS19FTlRSWShwYWNrZWQsIHJlZywgbWFzaywgdmFsKSAgIGRvIHsgICAoKHJlZykgPSAoKHBhY2tlZCA+PiAxNikgJiAoMHhmZmZmKSkpOyAgICgobWFzaykgPSAoKHBhY2tlZCA+PiA4KSAmICgweGZmKSkpOyAgICgodmFsKSA9ICgocGFja2VkKSAmICgweGZmKSkpOyAgIH0gd2hpbGUgKDApOworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbWZkL3djZDl4eHgvd2NkOXh4eF9yZWdpc3RlcnMuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9tZmQvd2NkOXh4eC93Y2Q5eHh4X3JlZ2lzdGVycy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkYTkzZGQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbWZkL3djZDl4eHgvd2NkOXh4eF9yZWdpc3RlcnMuaApAQCAtMCwwICsxLDU0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIFdDRDlYWFhfQ09ERUNfRElHSVRBTF9ICisjZGVmaW5lIFdDRDlYWFhfQ09ERUNfRElHSVRBTF9ICisjZGVmaW5lIFdDRDlYWFhfQV9DSElQX0NUTCAoMHgwMCkKKyNkZWZpbmUgV0NEOVhYWF9BX0NISVBfQ1RMX19QT1IgKDB4MDAwMDAwMDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBXQ0Q5WFhYX0FfQ0hJUF9TVEFUVVMgKDB4MDEpCisjZGVmaW5lIFdDRDlYWFhfQV9DSElQX1NUQVRVU19fUE9SICgweDAwMDAwMDAwKQorI2RlZmluZSBXQ0Q5WFhYX0FfQ0hJUF9JRF9CWVRFXzAgKDB4MDQpCisjZGVmaW5lIFdDRDlYWFhfQV9DSElQX0lEX0JZVEVfMF9fUE9SICgweDAwMDAwMDAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgV0NEOVhYWF9BX0NISVBfSURfQllURV8xICgweDA1KQorI2RlZmluZSBXQ0Q5WFhYX0FfQ0hJUF9JRF9CWVRFXzFfX1BPUiAoMHgwMDAwMDAwMCkKKyNkZWZpbmUgV0NEOVhYWF9BX0NISVBfSURfQllURV8yICgweDA2KQorI2RlZmluZSBXQ0Q5WFhYX0FfQ0hJUF9JRF9CWVRFXzJfX1BPUiAoMHgwMDAwMDAwMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFdDRDlYWFhfQV9DSElQX0lEX0JZVEVfMyAoMHgwNykKKyNkZWZpbmUgV0NEOVhYWF9BX0NISVBfSURfQllURV8zX19QT1IgKDB4MDAwMDAwMDEpCisjZGVmaW5lIFdDRDlYWFhfQV9DSElQX1ZFUlNJT04gKDB4MDgpCisjZGVmaW5lIFdDRDlYWFhfQV9DSElQX1ZFUlNJT05fX1BPUiAoMHgwMDAwMDAyMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFdDRDlYWFhfQV9TQl9WRVJTSU9OICgweDA5KQorI2RlZmluZSBXQ0Q5WFhYX0FfU0JfVkVSU0lPTl9fUE9SICgweDAwMDAwMDEwKQorI2RlZmluZSBXQ0Q5WFhYX0FfU0xBVkVfSURfMSAoMHgwQykKKyNkZWZpbmUgV0NEOVhYWF9BX1NMQVZFX0lEXzFfX1BPUiAoMHgwMDAwMDA3NykKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFdDRDlYWFhfQV9TTEFWRV9JRF8yICgweDBEKQorI2RlZmluZSBXQ0Q5WFhYX0FfU0xBVkVfSURfMl9fUE9SICgweDAwMDAwMDY2KQorI2RlZmluZSBXQ0Q5WFhYX0FfU0xBVkVfSURfMyAoMHgwRSkKKyNkZWZpbmUgV0NEOVhYWF9BX1NMQVZFX0lEXzNfX1BPUiAoMHgwMDAwMDA1NSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFdDRDlYWFhfQV9DRENfQ1RMICgweDgwKQorI2RlZmluZSBXQ0Q5WFhYX0FfQ0RDX0NUTF9fUE9SICgweDAwMDAwMDAwKQorI2RlZmluZSBXQ0Q5WFhYX0FfTEVBS0FHRV9DVEwgKDB4ODgpCisjZGVmaW5lIFdDRDlYWFhfQV9MRUFLQUdFX0NUTF9fUE9SICgweDAwMDAwMDA0KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L21pc2NkZXZpY2UuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9taXNjZGV2aWNlLmgKaW5kZXggNDU3OTYwYS4uNTJiMjIwMiAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L21pc2NkZXZpY2UuaAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbWlzY2RldmljZS5oCkBAIC03LDUxICs3LDYwIEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfTElOVVhfTUlTQ0RFVklDRV9ICiAjZGVmaW5lIF9MSU5VWF9NSVNDREVWSUNFX0gKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9tYWpvci5oPgotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQU01PVVNFX01JTk9SIDEKICNkZWZpbmUgTVNfQlVTTU9VU0VfTUlOT1IgMgogI2RlZmluZSBBVElYTF9CVVNNT1VTRV9NSU5PUiAzCi0KICNkZWZpbmUgQVRBUklNT1VTRV9NSU5PUiA1CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTVU5fTU9VU0VfTUlOT1IgNgogI2RlZmluZSBBUE9MTE9fTU9VU0VfTUlOT1IgNwogI2RlZmluZSBQQzExMFBBRF9NSU5PUiA5Ci0KLSNkZWZpbmUgV0FUQ0hET0dfTUlOT1IgMTMwICAKLSNkZWZpbmUgVEVNUF9NSU5PUiAxMzEgIAorI2RlZmluZSBXQVRDSERPR19NSU5PUiAxMzAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRFTVBfTUlOT1IgMTMxCiAjZGVmaW5lIFJUQ19NSU5PUiAxMzUKLSNkZWZpbmUgRUZJX1JUQ19NSU5PUiAxMzYgIAorI2RlZmluZSBFRklfUlRDX01JTk9SIDEzNgogI2RlZmluZSBTVU5fT1BFTlBST01fTUlOT1IgMTM5Ci0jZGVmaW5lIERNQVBJX01JTk9SIDE0MCAgCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBETUFQSV9NSU5PUiAxNDAKICNkZWZpbmUgTlZSQU1fTUlOT1IgMTQ0CiAjZGVmaW5lIFNHSV9NTVRJTUVSIDE1MwogI2RlZmluZSBTVE9SRV9RVUVVRV9NSU5PUiAxNTUKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEkyT19NSU5PUiAxNjYKICNkZWZpbmUgTUlDUk9DT0RFX01JTk9SIDE4NAotI2RlZmluZSBNV0FWRV9NSU5PUiAyMTkgIAorI2RlZmluZSBNV0FWRV9NSU5PUiAyMTkKICNkZWZpbmUgTVBUX01JTk9SIDIyMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTUlTQ19EWU5BTUlDX01JTk9SIDI1NQotCiAjZGVmaW5lIFRVTl9NSU5PUiAyMDAKICNkZWZpbmUgSFBFVF9NSU5PUiAyMjgKLQogc3RydWN0IGRldmljZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgY2xhc3NfZGV2aWNlOwotCiBzdHJ1Y3QgbWlzY2RldmljZSB7CiAgaW50IG1pbm9yOwogIGNvbnN0IGNoYXIgKm5hbWU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgKmZvcHM7CiAgc3RydWN0IGxpc3RfaGVhZCBsaXN0OwogIHN0cnVjdCBkZXZpY2UgKmRldjsKICBzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjbGFzczsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwotCiAjZGVmaW5lIE1PRFVMRV9BTElBU19NSVNDREVWKG1pbm9yKSAgIE1PRFVMRV9BTElBUygiY2hhci1tYWpvci0iIF9fc3RyaW5naWZ5KE1JU0NfTUFKT1IpICAgIi0iIF9fc3RyaW5naWZ5KG1pbm9yKSkKICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L21tLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbW0uaAppbmRleCBmZWEyOTNiLi42MzhkMTFiIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbW0uaAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbW0uaApAQCAtNywxMyArNywxOSBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX0xJTlVYX01NX0gKICNkZWZpbmUgX0xJTlVYX01NX0gKLQogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjaW5jbHVkZSA8bGludXgvY2FwYWJpbGl0eS5oPgotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9tbWMvY2FyZC5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L21tYy9jYXJkLmgKaW5kZXggOTRhZmUyMS4uYzhjZDE4MCAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L21tYy9jYXJkLmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L21tYy9jYXJkLmgKQEAgLTcsOTQgKzcsMTA4IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBMSU5VWF9NTUNfQ0FSRF9ICiAjZGVmaW5lIExJTlVYX01NQ19DQVJEX0gKLQogI2luY2x1ZGUgPGxpbnV4L21tYy9tbWMuaD4KLQogc3RydWN0IG1tY19jaWQgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBpbnQgbWFuZmlkOwogIGNoYXIgcHJvZF9uYW1lWzhdOwogIHVuc2lnbmVkIGludCBzZXJpYWw7CiAgdW5zaWduZWQgc2hvcnQgb2VtaWQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIHNob3J0IHllYXI7CiAgdW5zaWduZWQgY2hhciBod3JldjsKICB1bnNpZ25lZCBjaGFyIGZ3cmV2OwogIHVuc2lnbmVkIGNoYXIgbW9udGg7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKLQogc3RydWN0IG1tY19jc2QgewogIHVuc2lnbmVkIGNoYXIgbW1jYV92c247CiAgdW5zaWduZWQgc2hvcnQgY21kY2xhc3M7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIHNob3J0IHRhY2NfY2xrczsKICB1bnNpZ25lZCBpbnQgdGFjY19uczsKICB1bnNpZ25lZCBpbnQgcjJ3X2ZhY3RvcjsKICB1bnNpZ25lZCBpbnQgbWF4X2R0cjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgaW50IHJlYWRfYmxrYml0czsKICB1bnNpZ25lZCBpbnQgd3JpdGVfYmxrYml0czsKICB1bnNpZ25lZCBpbnQgY2FwYWNpdHk7CiAgdW5zaWduZWQgaW50IHJlYWRfcGFydGlhbDoxLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICByZWFkX21pc2FsaWduOjEsCiAgd3JpdGVfcGFydGlhbDoxLAogIHdyaXRlX21pc2FsaWduOjE7CiB9OwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IHNkX3NjciB7CiAgdW5zaWduZWQgY2hhciBzZGFfdnNuOwogIHVuc2lnbmVkIGNoYXIgYnVzX3dpZHRoczsKICNkZWZpbmUgU0RfU0NSX0JVU19XSURUSF8xICgxPDwwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU0RfU0NSX0JVU19XSURUSF80ICgxPDwyKQogfTsKLQogc3RydWN0IG1tY19ob3N0OwotCiBzdHJ1Y3QgbW1jX2NhcmQgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgbGlzdF9oZWFkIG5vZGU7CiAgc3RydWN0IG1tY19ob3N0ICpob3N0OwogIHN0cnVjdCBkZXZpY2UgZGV2OwogIHVuc2lnbmVkIGludCByY2E7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGludCBzdGF0ZTsKLSNkZWZpbmUgTU1DX1NUQVRFX1BSRVNFTlQgKDE8PDApICAKLSNkZWZpbmUgTU1DX1NUQVRFX0RFQUQgKDE8PDEpICAKLSNkZWZpbmUgTU1DX1NUQVRFX0JBRCAoMTw8MikgIAotI2RlZmluZSBNTUNfU1RBVEVfU0RDQVJEICgxPDwzKSAgCi0jZGVmaW5lIE1NQ19TVEFURV9SRUFET05MWSAoMTw8NCkgIAorI2RlZmluZSBNTUNfU1RBVEVfUFJFU0VOVCAoMTw8MCkKKyNkZWZpbmUgTU1DX1NUQVRFX0RFQUQgKDE8PDEpCisjZGVmaW5lIE1NQ19TVEFURV9CQUQgKDE8PDIpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBNTUNfU1RBVEVfU0RDQVJEICgxPDwzKQorI2RlZmluZSBNTUNfU1RBVEVfUkVBRE9OTFkgKDE8PDQpCiAgdTMyIHJhd19jaWRbNF07CiAgdTMyIHJhd19jc2RbNF07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHUzMiByYXdfc2NyWzJdOwogIHN0cnVjdCBtbWNfY2lkIGNpZDsKICBzdHJ1Y3QgbW1jX2NzZCBjc2Q7CiAgc3RydWN0IHNkX3NjciBzY3I7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKLQogI2RlZmluZSBtbWNfY2FyZF9wcmVzZW50KGMpICgoYyktPnN0YXRlICYgTU1DX1NUQVRFX1BSRVNFTlQpCiAjZGVmaW5lIG1tY19jYXJkX2RlYWQoYykgKChjKS0+c3RhdGUgJiBNTUNfU1RBVEVfREVBRCkKICNkZWZpbmUgbW1jX2NhcmRfYmFkKGMpICgoYyktPnN0YXRlICYgTU1DX1NUQVRFX0JBRCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIG1tY19jYXJkX3NkKGMpICgoYyktPnN0YXRlICYgTU1DX1NUQVRFX1NEQ0FSRCkKICNkZWZpbmUgbW1jX2NhcmRfcmVhZG9ubHkoYykgKChjKS0+c3RhdGUgJiBNTUNfU1RBVEVfUkVBRE9OTFkpCi0KICNkZWZpbmUgbW1jX2NhcmRfc2V0X3ByZXNlbnQoYykgKChjKS0+c3RhdGUgfD0gTU1DX1NUQVRFX1BSRVNFTlQpCiAjZGVmaW5lIG1tY19jYXJkX3NldF9kZWFkKGMpICgoYyktPnN0YXRlIHw9IE1NQ19TVEFURV9ERUFEKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgbW1jX2NhcmRfc2V0X2JhZChjKSAoKGMpLT5zdGF0ZSB8PSBNTUNfU1RBVEVfQkFEKQogI2RlZmluZSBtbWNfY2FyZF9zZXRfc2QoYykgKChjKS0+c3RhdGUgfD0gTU1DX1NUQVRFX1NEQ0FSRCkKICNkZWZpbmUgbW1jX2NhcmRfc2V0X3JlYWRvbmx5KGMpICgoYyktPnN0YXRlIHw9IE1NQ19TVEFURV9SRUFET05MWSkKLQogI2RlZmluZSBtbWNfY2FyZF9uYW1lKGMpICgoYyktPmNpZC5wcm9kX25hbWUpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBtbWNfY2FyZF9pZChjKSAoKGMpLT5kZXYuYnVzX2lkKQotCiAjZGVmaW5lIG1tY19saXN0X3RvX2NhcmQobCkgY29udGFpbmVyX29mKGwsIHN0cnVjdCBtbWNfY2FyZCwgbm9kZSkKICNkZWZpbmUgbW1jX2dldF9kcnZkYXRhKGMpIGRldl9nZXRfZHJ2ZGF0YSgmKGMpLT5kZXYpCiAjZGVmaW5lIG1tY19zZXRfZHJ2ZGF0YShjLGQpIGRldl9zZXRfZHJ2ZGF0YSgmKGMpLT5kZXYsIGQpCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgbW1jX2RyaXZlciB7CiAgc3RydWN0IGRldmljZV9kcml2ZXIgZHJ2OwogIGludCAoKnByb2JlKShzdHJ1Y3QgbW1jX2NhcmQgKik7CiAgdm9pZCAoKnJlbW92ZSkoc3RydWN0IG1tY19jYXJkICopOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBpbnQgKCpzdXNwZW5kKShzdHJ1Y3QgbW1jX2NhcmQgKiwgcG1fbWVzc2FnZV90KTsKICBpbnQgKCpyZXN1bWUpKHN0cnVjdCBtbWNfY2FyZCAqKTsKIH07Ci0KICNkZWZpbmUgbW1jX2NhcmRfcmVsZWFzZV9ob3N0KGMpIG1tY19yZWxlYXNlX2hvc3QoKGMpLT5ob3N0KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L21tYy9ob3N0LmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbW1jL2hvc3QuaAppbmRleCA5NDMzNjI2Li44NzM1MmU1IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbW1jL2hvc3QuaAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbW1jL2hvc3QuaApAQCAtNywxMTQgKzcsMTE1IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBMSU5VWF9NTUNfSE9TVF9ICiAjZGVmaW5lIExJTlVYX01NQ19IT1NUX0gKLQogI2luY2x1ZGUgPGxpbnV4L21tYy9tbWMuaD4KLQogc3RydWN0IG1tY19pb3MgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBpbnQgY2xvY2s7CiAgdW5zaWduZWQgc2hvcnQgdmRkOwotCiAjZGVmaW5lIE1NQ19WRERfMTUwIDAKICNkZWZpbmUgTU1DX1ZERF8xNTUgMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTU1DX1ZERF8xNjAgMgogI2RlZmluZSBNTUNfVkREXzE2NSAzCiAjZGVmaW5lIE1NQ19WRERfMTcwIDQKICNkZWZpbmUgTU1DX1ZERF8xODAgNQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTU1DX1ZERF8xOTAgNgogI2RlZmluZSBNTUNfVkREXzIwMCA3CiAjZGVmaW5lIE1NQ19WRERfMjEwIDgKICNkZWZpbmUgTU1DX1ZERF8yMjAgOQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTU1DX1ZERF8yMzAgMTAKICNkZWZpbmUgTU1DX1ZERF8yNDAgMTEKICNkZWZpbmUgTU1DX1ZERF8yNTAgMTIKICNkZWZpbmUgTU1DX1ZERF8yNjAgMTMKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1NQ19WRERfMjcwIDE0CiAjZGVmaW5lIE1NQ19WRERfMjgwIDE1CiAjZGVmaW5lIE1NQ19WRERfMjkwIDE2CiAjZGVmaW5lIE1NQ19WRERfMzAwIDE3CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNTUNfVkREXzMxMCAxOAogI2RlZmluZSBNTUNfVkREXzMyMCAxOQogI2RlZmluZSBNTUNfVkREXzMzMCAyMAogI2RlZmluZSBNTUNfVkREXzM0MCAyMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTU1DX1ZERF8zNTAgMjIKICNkZWZpbmUgTU1DX1ZERF8zNjAgMjMKLQogIHVuc2lnbmVkIGNoYXIgYnVzX21vZGU7Ci0KICNkZWZpbmUgTU1DX0JVU01PREVfT1BFTkRSQUlOIDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1NQ19CVVNNT0RFX1BVU0hQVUxMIDIKLQogIHVuc2lnbmVkIGNoYXIgY2hpcF9zZWxlY3Q7Ci0KICNkZWZpbmUgTU1DX0NTX0RPTlRDQVJFIDAKICNkZWZpbmUgTU1DX0NTX0hJR0ggMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTU1DX0NTX0xPVyAyCi0KICB1bnNpZ25lZCBjaGFyIHBvd2VyX21vZGU7Ci0KICNkZWZpbmUgTU1DX1BPV0VSX09GRiAwCiAjZGVmaW5lIE1NQ19QT1dFUl9VUCAxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNTUNfUE9XRVJfT04gMgotCiAgdW5zaWduZWQgY2hhciBidXNfd2lkdGg7Ci0KICNkZWZpbmUgTU1DX0JVU19XSURUSF8xIDAKICNkZWZpbmUgTU1DX0JVU19XSURUSF80IDIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwotCiBzdHJ1Y3QgbW1jX2hvc3Rfb3BzIHsKICB2b2lkICgqcmVxdWVzdCkoc3RydWN0IG1tY19ob3N0ICpob3N0LCBzdHJ1Y3QgbW1jX3JlcXVlc3QgKnJlcSk7CiAgdm9pZCAoKnNldF9pb3MpKHN0cnVjdCBtbWNfaG9zdCAqaG9zdCwgc3RydWN0IG1tY19pb3MgKmlvcyk7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGludCAoKmdldF9ybykoc3RydWN0IG1tY19ob3N0ICpob3N0KTsKIH07Ci0KIHN0cnVjdCBtbWNfY2FyZDsKIHN0cnVjdCBkZXZpY2U7Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgbW1jX2hvc3QgewogIHN0cnVjdCBkZXZpY2UgKmRldjsKICBzdHJ1Y3QgY2xhc3NfZGV2aWNlIGNsYXNzX2RldjsKICBpbnQgaW5kZXg7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGNvbnN0IHN0cnVjdCBtbWNfaG9zdF9vcHMgKm9wczsKICB1bnNpZ25lZCBpbnQgZl9taW47CiAgdW5zaWduZWQgaW50IGZfbWF4OwogIHUzMiBvY3JfYXZhaWw7Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgbG9uZyBjYXBzOwotCi0jZGVmaW5lIE1NQ19DQVBfNF9CSVRfREFUQSAoMSA8PCAwKSAgCi0KKyNkZWZpbmUgTU1DX0NBUF80X0JJVF9EQVRBICgxIDw8IDApCiAgdW5zaWduZWQgaW50IG1heF9zZWdfc2l6ZTsKICB1bnNpZ25lZCBzaG9ydCBtYXhfaHdfc2VnczsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgc2hvcnQgbWF4X3BoeXNfc2VnczsKICB1bnNpZ25lZCBzaG9ydCBtYXhfc2VjdG9yczsKICB1bnNpZ25lZCBzaG9ydCB1bnVzZWQ7Ci0KICBzdHJ1Y3QgbW1jX2lvcyBpb3M7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHUzMiBvY3I7Ci0KICB1bnNpZ25lZCBpbnQgbW9kZTsKICNkZWZpbmUgTU1DX01PREVfTU1DIDAKICNkZWZpbmUgTU1DX01PREVfU0QgMQotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCBsaXN0X2hlYWQgY2FyZHM7Ci0KICB3YWl0X3F1ZXVlX2hlYWRfdCB3cTsKICBzcGlubG9ja190IGxvY2s7CiAgc3RydWN0IG1tY19jYXJkICpjYXJkX2J1c3k7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCBtbWNfY2FyZCAqY2FyZF9zZWxlY3RlZDsKLQogIHN0cnVjdCB3b3JrX3N0cnVjdCBkZXRlY3Q7Ci0KICB1bnNpZ25lZCBsb25nIHByaXZhdGVbMF0gX19fX2NhY2hlbGluZV9hbGlnbmVkOwogfTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgbW1jX2Rldih4KSAoKHgpLT5kZXYpCiAjZGVmaW5lIG1tY19ob3N0bmFtZSh4KSAoKHgpLT5jbGFzc19kZXYuY2xhc3NfaWQpCi0KICNlbmRpZgotCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbW1jL21tYy5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L21tYy9tbWMuaAppbmRleCAwODk3MTRjLi5iYjkwMTI0IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbW1jL21tYy5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9tbWMvbW1jLmgKQEAgLTcsOTMgKzcsOTkgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIE1NQ19ICiAjZGVmaW5lIE1NQ19ICi0KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgotCiBzdHJ1Y3QgcmVxdWVzdDsKIHN0cnVjdCBtbWNfZGF0YTsKIHN0cnVjdCBtbWNfcmVxdWVzdDsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBtbWNfY29tbWFuZCB7CiAgdTMyIG9wY29kZTsKICB1MzIgYXJnOwogIHUzMiByZXNwWzRdOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBpbnQgZmxhZ3M7CiAjZGVmaW5lIE1NQ19SU1BfUFJFU0VOVCAoMSA8PCAwKQotI2RlZmluZSBNTUNfUlNQXzEzNiAoMSA8PCAxKSAgCi0jZGVmaW5lIE1NQ19SU1BfQ1JDICgxIDw8IDIpICAKLSNkZWZpbmUgTU1DX1JTUF9CVVNZICgxIDw8IDMpICAKLSNkZWZpbmUgTU1DX1JTUF9PUENPREUgKDEgPDwgNCkgIAotI2RlZmluZSBNTUNfQ01EX01BU0sgKDMgPDwgNSkgIAorI2RlZmluZSBNTUNfUlNQXzEzNiAoMSA8PCAxKQorI2RlZmluZSBNTUNfUlNQX0NSQyAoMSA8PCAyKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgTU1DX1JTUF9CVVNZICgxIDw8IDMpCisjZGVmaW5lIE1NQ19SU1BfT1BDT0RFICgxIDw8IDQpCisjZGVmaW5lIE1NQ19DTURfTUFTSyAoMyA8PCA1KQogI2RlZmluZSBNTUNfQ01EX0FDICgwIDw8IDUpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNTUNfQ01EX0FEVEMgKDEgPDwgNSkKICNkZWZpbmUgTU1DX0NNRF9CQyAoMiA8PCA1KQogI2RlZmluZSBNTUNfQ01EX0JDUiAoMyA8PCA1KQotCiAjZGVmaW5lIE1NQ19SU1BfTk9ORSAoMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1NQ19SU1BfUjEgKE1NQ19SU1BfUFJFU0VOVHxNTUNfUlNQX0NSQ3xNTUNfUlNQX09QQ09ERSkKICNkZWZpbmUgTU1DX1JTUF9SMUIgKE1NQ19SU1BfUFJFU0VOVHxNTUNfUlNQX0NSQ3xNTUNfUlNQX09QQ09ERXxNTUNfUlNQX0JVU1kpCiAjZGVmaW5lIE1NQ19SU1BfUjIgKE1NQ19SU1BfUFJFU0VOVHxNTUNfUlNQXzEzNnxNTUNfUlNQX0NSQykKICNkZWZpbmUgTU1DX1JTUF9SMyAoTU1DX1JTUF9QUkVTRU5UKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTU1DX1JTUF9SNiAoTU1DX1JTUF9QUkVTRU5UfE1NQ19SU1BfQ1JDKQotCiAjZGVmaW5lIG1tY19yZXNwX3R5cGUoY21kKSAoKGNtZCktPmZsYWdzICYgKE1NQ19SU1BfUFJFU0VOVHxNTUNfUlNQXzEzNnxNTUNfUlNQX0NSQ3xNTUNfUlNQX0JVU1l8TU1DX1JTUF9PUENPREUpKQotCiAjZGVmaW5lIG1tY19jbWRfdHlwZShjbWQpICgoY21kKS0+ZmxhZ3MgJiBNTUNfQ01EX01BU0spCi0KICB1bnNpZ25lZCBpbnQgcmV0cmllczsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgaW50IGVycm9yOwotCiAjZGVmaW5lIE1NQ19FUlJfTk9ORSAwCiAjZGVmaW5lIE1NQ19FUlJfVElNRU9VVCAxCiAjZGVmaW5lIE1NQ19FUlJfQkFEQ1JDIDIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1NQ19FUlJfRklGTyAzCiAjZGVmaW5lIE1NQ19FUlJfRkFJTEVEIDQKICNkZWZpbmUgTU1DX0VSUl9JTlZBTElEIDUKLQogIHN0cnVjdCBtbWNfZGF0YSAqZGF0YTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IG1tY19yZXF1ZXN0ICptcnE7CiB9OwotCiBzdHJ1Y3QgbW1jX2RhdGEgewogIHVuc2lnbmVkIGludCB0aW1lb3V0X25zOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBpbnQgdGltZW91dF9jbGtzOwogIHVuc2lnbmVkIGludCBibGtzel9iaXRzOwogIHVuc2lnbmVkIGludCBibGtzejsKICB1bnNpZ25lZCBpbnQgYmxvY2tzOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBpbnQgZXJyb3I7CiAgdW5zaWduZWQgaW50IGZsYWdzOwotCiAjZGVmaW5lIE1NQ19EQVRBX1dSSVRFICgxIDw8IDgpCiAjZGVmaW5lIE1NQ19EQVRBX1JFQUQgKDEgPDwgOSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1NQ19EQVRBX1NUUkVBTSAoMSA8PCAxMCkKICNkZWZpbmUgTU1DX0RBVEFfTVVMVEkgKDEgPDwgMTEpCi0KICB1bnNpZ25lZCBpbnQgYnl0ZXNfeGZlcmVkOwotCiAgc3RydWN0IG1tY19jb21tYW5kICpzdG9wOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgbW1jX3JlcXVlc3QgKm1ycTsKLQogIHVuc2lnbmVkIGludCBzZ19sZW47CiAgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKIH07Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgbW1jX3JlcXVlc3QgewogIHN0cnVjdCBtbWNfY29tbWFuZCAqY21kOwogIHN0cnVjdCBtbWNfZGF0YSAqZGF0YTsKICBzdHJ1Y3QgbW1jX2NvbW1hbmQgKnN0b3A7Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdm9pZCAqZG9uZV9kYXRhOwogIHZvaWQgKCpkb25lKShzdHJ1Y3QgbW1jX3JlcXVlc3QgKik7CiB9OwotCiBzdHJ1Y3QgbW1jX2hvc3Q7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IG1tY19jYXJkOwotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9tbXpvbmUuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9tbXpvbmUuaAppbmRleCBhODEzODJlLi40Mjk2MDU4IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbW16b25lLmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L21tem9uZS5oCkBAIC03LDkgKzcsMTUgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9MSU5VWF9NTVpPTkVfSAogI2RlZmluZSBfTElOVVhfTU1aT05FX0gKLQogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbW9kX2RldmljZXRhYmxlLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbW9kX2RldmljZXRhYmxlLmgKaW5kZXggYTNjMWRlOC4uMDQ3MGQ4OCAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L21vZF9kZXZpY2V0YWJsZS5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9tb2RfZGV2aWNldGFibGUuaApAQCAtNywyMDMgKzcsMjA4IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBMSU5VWF9NT0RfREVWSUNFVEFCTEVfSAogI2RlZmluZSBMSU5VWF9NT0RfREVWSUNFVEFCTEVfSAotCiAjZGVmaW5lIFBDSV9BTllfSUQgKH4wKQotCiBzdHJ1Y3QgcGNpX2RldmljZV9pZCB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHZlbmRvciwgZGV2aWNlOwogIF9fdTMyIHN1YnZlbmRvciwgc3ViZGV2aWNlOwogIF9fdTMyIGNsYXNzLCBjbGFzc19tYXNrOwogIGtlcm5lbF91bG9uZ190IGRyaXZlcl9kYXRhOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07Ci0KICNkZWZpbmUgSUVFRTEzOTRfTUFUQ0hfVkVORE9SX0lEIDB4MDAwMQogI2RlZmluZSBJRUVFMTM5NF9NQVRDSF9NT0RFTF9JRCAweDAwMDIKICNkZWZpbmUgSUVFRTEzOTRfTUFUQ0hfU1BFQ0lGSUVSX0lEIDB4MDAwNAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSUVFRTEzOTRfTUFUQ0hfVkVSU0lPTiAweDAwMDgKLQogc3RydWN0IGllZWUxMzk0X2RldmljZV9pZCB7CiAgX191MzIgbWF0Y2hfZmxhZ3M7CiAgX191MzIgdmVuZG9yX2lkOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBtb2RlbF9pZDsKICBfX3UzMiBzcGVjaWZpZXJfaWQ7CiAgX191MzIgdmVyc2lvbjsKICBrZXJuZWxfdWxvbmdfdCBkcml2ZXJfZGF0YQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKHNpemVvZihrZXJuZWxfdWxvbmdfdCkpKSk7CiB9OwotCiBzdHJ1Y3QgdXNiX2RldmljZV9pZCB7Ci0KICBfX3UxNiBtYXRjaF9mbGFnczsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UxNiBpZFZlbmRvcjsKICBfX3UxNiBpZFByb2R1Y3Q7CiAgX191MTYgYmNkRGV2aWNlX2xvOwogIF9fdTE2IGJjZERldmljZV9oaTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IGJEZXZpY2VDbGFzczsKICBfX3U4IGJEZXZpY2VTdWJDbGFzczsKICBfX3U4IGJEZXZpY2VQcm90b2NvbDsKLQogIF9fdTggYkludGVyZmFjZUNsYXNzOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IGJJbnRlcmZhY2VTdWJDbGFzczsKICBfX3U4IGJJbnRlcmZhY2VQcm90b2NvbDsKLQogIGtlcm5lbF91bG9uZ190IGRyaXZlcl9pbmZvOwogfTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVVNCX0RFVklDRV9JRF9NQVRDSF9WRU5ET1IgMHgwMDAxCiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfTUFUQ0hfUFJPRFVDVCAweDAwMDIKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZfTE8gMHgwMDA0CiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWX0hJIDB4MDAwOAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZfQ0xBU1MgMHgwMDEwCiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWX1NVQkNMQVNTIDB4MDAyMAogI2RlZmluZSBVU0JfREVWSUNFX0lEX01BVENIX0RFVl9QUk9UT0NPTCAweDAwNDAKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9NQVRDSF9JTlRfQ0xBU1MgMHgwMDgwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBVU0JfREVWSUNFX0lEX01BVENIX0lOVF9TVUJDTEFTUyAweDAxMDAKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9NQVRDSF9JTlRfUFJPVE9DT0wgMHgwMjAwCi0KIHN0cnVjdCBjY3dfZGV2aWNlX2lkIHsKICBfX3UxNiBtYXRjaF9mbGFnczsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UxNiBjdV90eXBlOwogIF9fdTE2IGRldl90eXBlOwogIF9fdTggY3VfbW9kZWw7CiAgX191OCBkZXZfbW9kZWw7Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAga2VybmVsX3Vsb25nX3QgZHJpdmVyX2luZm87CiB9OwotCiAjZGVmaW5lIENDV19ERVZJQ0VfSURfTUFUQ0hfQ1VfVFlQRSAweDAxCiAjZGVmaW5lIENDV19ERVZJQ0VfSURfTUFUQ0hfQ1VfTU9ERUwgMHgwMgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQ0NXX0RFVklDRV9JRF9NQVRDSF9ERVZJQ0VfVFlQRSAweDA0CiAjZGVmaW5lIENDV19ERVZJQ0VfSURfTUFUQ0hfREVWSUNFX01PREVMIDB4MDgKLQogI2RlZmluZSBQTlBfSURfTEVOIDgKICNkZWZpbmUgUE5QX01BWF9ERVZJQ0VTIDgKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBwbnBfZGV2aWNlX2lkIHsKICBfX3U4IGlkW1BOUF9JRF9MRU5dOwogIGtlcm5lbF91bG9uZ190IGRyaXZlcl9kYXRhOwogfTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBwbnBfY2FyZF9kZXZpY2VfaWQgewogIF9fdTggaWRbUE5QX0lEX0xFTl07CiAga2VybmVsX3Vsb25nX3QgZHJpdmVyX2RhdGE7CiAgc3RydWN0IHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191OCBpZFtQTlBfSURfTEVOXTsKICB9IGRldnNbUE5QX01BWF9ERVZJQ0VTXTsKIH07Ci0KICNkZWZpbmUgU0VSSU9fQU5ZIDB4ZmYKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBzZXJpb19kZXZpY2VfaWQgewogIF9fdTggdHlwZTsKICBfX3U4IGV4dHJhOwogIF9fdTggaWQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTggcHJvdG87CiB9OwotCiBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkCiB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGNoYXIgbmFtZVszMl07CiAgY2hhciB0eXBlWzMyXTsKICBjaGFyIGNvbXBhdGlibGVbMTI4XTsKICBrZXJuZWxfdWxvbmdfdCBkYXRhOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07Ci0KIHN0cnVjdCB2aW9fZGV2aWNlX2lkIHsKICBjaGFyIHR5cGVbMzJdOwogIGNoYXIgY29tcGF0WzMyXTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwotCiBzdHJ1Y3QgcGNtY2lhX2RldmljZV9pZCB7CiAgX191MTYgbWF0Y2hfZmxhZ3M7Ci0KICBfX3UxNiBtYW5mX2lkOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UxNiBjYXJkX2lkOwotCiAgX191OCBmdW5jX2lkOwotCiAgX191OCBmdW5jdGlvbjsKLQogIF9fdTggZGV2aWNlX25vOwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHByb2RfaWRfaGFzaFs0XQogIF9fYXR0cmlidXRlX18oKGFsaWduZWQoc2l6ZW9mKF9fdTMyKSkpKTsKLQogIGtlcm5lbF91bG9uZ190IHByb2RfaWRbNF0KICBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKHNpemVvZihrZXJuZWxfdWxvbmdfdCkpKSk7Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAga2VybmVsX3Vsb25nX3QgZHJpdmVyX2luZm87CiAga2VybmVsX3Vsb25nX3QgY2lzZmlsZTsKIH07Ci0KICNkZWZpbmUgUENNQ0lBX0RFVl9JRF9NQVRDSF9NQU5GX0lEIDB4MDAwMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENNQ0lBX0RFVl9JRF9NQVRDSF9DQVJEX0lEIDB4MDAwMgogI2RlZmluZSBQQ01DSUFfREVWX0lEX01BVENIX0ZVTkNfSUQgMHgwMDA0CiAjZGVmaW5lIFBDTUNJQV9ERVZfSURfTUFUQ0hfRlVOQ1RJT04gMHgwMDA4CiAjZGVmaW5lIFBDTUNJQV9ERVZfSURfTUFUQ0hfUFJPRF9JRDEgMHgwMDEwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ01DSUFfREVWX0lEX01BVENIX1BST0RfSUQyIDB4MDAyMAogI2RlZmluZSBQQ01DSUFfREVWX0lEX01BVENIX1BST0RfSUQzIDB4MDA0MAogI2RlZmluZSBQQ01DSUFfREVWX0lEX01BVENIX1BST0RfSUQ0IDB4MDA4MAogI2RlZmluZSBQQ01DSUFfREVWX0lEX01BVENIX0RFVklDRV9OTyAweDAxMDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDTUNJQV9ERVZfSURfTUFUQ0hfRkFLRV9DSVMgMHgwMjAwCiAjZGVmaW5lIFBDTUNJQV9ERVZfSURfTUFUQ0hfQU5PTllNT1VTIDB4MDQwMAotCiBzdHJ1Y3QgaTJjX2RldmljZV9pZCB7CiAgX191MTYgaWQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKLQogI2RlZmluZSBJTlBVVF9ERVZJQ0VfSURfRVZfTUFYIDB4MWYKICNkZWZpbmUgSU5QVVRfREVWSUNFX0lEX0tFWV9NQVggMHgxZmYKICNkZWZpbmUgSU5QVVRfREVWSUNFX0lEX1JFTF9NQVggMHgwZgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSU5QVVRfREVWSUNFX0lEX0FCU19NQVggMHgzZgogI2RlZmluZSBJTlBVVF9ERVZJQ0VfSURfTVNDX01BWCAweDA3CiAjZGVmaW5lIElOUFVUX0RFVklDRV9JRF9MRURfTUFYIDB4MGYKICNkZWZpbmUgSU5QVVRfREVWSUNFX0lEX1NORF9NQVggMHgwNworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSU5QVVRfREVWSUNFX0lEX0ZGX01BWCAweDdmCiAjZGVmaW5lIElOUFVUX0RFVklDRV9JRF9TV19NQVggMHgwZgotCiAjZGVmaW5lIElOUFVUX0RFVklDRV9JRF9NQVRDSF9CVVMgMQogI2RlZmluZSBJTlBVVF9ERVZJQ0VfSURfTUFUQ0hfVkVORE9SIDIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIElOUFVUX0RFVklDRV9JRF9NQVRDSF9QUk9EVUNUIDQKICNkZWZpbmUgSU5QVVRfREVWSUNFX0lEX01BVENIX1ZFUlNJT04gOAotCiAjZGVmaW5lIElOUFVUX0RFVklDRV9JRF9NQVRDSF9FVkJJVCAweDAwMTAKICNkZWZpbmUgSU5QVVRfREVWSUNFX0lEX01BVENIX0tFWUJJVCAweDAwMjAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIElOUFVUX0RFVklDRV9JRF9NQVRDSF9SRUxCSVQgMHgwMDQwCiAjZGVmaW5lIElOUFVUX0RFVklDRV9JRF9NQVRDSF9BQlNCSVQgMHgwMDgwCiAjZGVmaW5lIElOUFVUX0RFVklDRV9JRF9NQVRDSF9NU0NJVCAweDAxMDAKICNkZWZpbmUgSU5QVVRfREVWSUNFX0lEX01BVENIX0xFREJJVCAweDAyMDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIElOUFVUX0RFVklDRV9JRF9NQVRDSF9TTkRCSVQgMHgwNDAwCiAjZGVmaW5lIElOUFVUX0RFVklDRV9JRF9NQVRDSF9GRkJJVCAweDA4MDAKICNkZWZpbmUgSU5QVVRfREVWSUNFX0lEX01BVENIX1NXQklUIDB4MTAwMAotCiBzdHJ1Y3QgaW5wdXRfZGV2aWNlX2lkIHsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBrZXJuZWxfdWxvbmdfdCBmbGFnczsKLQogIF9fdTE2IGJ1c3R5cGU7CiAgX191MTYgdmVuZG9yOwogIF9fdTE2IHByb2R1Y3Q7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTE2IHZlcnNpb247Ci0KICBrZXJuZWxfdWxvbmdfdCBldmJpdFtJTlBVVF9ERVZJQ0VfSURfRVZfTUFYIC8gQklUU19QRVJfTE9ORyArIDFdOwogIGtlcm5lbF91bG9uZ190IGtleWJpdFtJTlBVVF9ERVZJQ0VfSURfS0VZX01BWCAvIEJJVFNfUEVSX0xPTkcgKyAxXTsKICBrZXJuZWxfdWxvbmdfdCByZWxiaXRbSU5QVVRfREVWSUNFX0lEX1JFTF9NQVggLyBCSVRTX1BFUl9MT05HICsgMV07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGtlcm5lbF91bG9uZ190IGFic2JpdFtJTlBVVF9ERVZJQ0VfSURfQUJTX01BWCAvIEJJVFNfUEVSX0xPTkcgKyAxXTsKICBrZXJuZWxfdWxvbmdfdCBtc2NiaXRbSU5QVVRfREVWSUNFX0lEX01TQ19NQVggLyBCSVRTX1BFUl9MT05HICsgMV07CiAga2VybmVsX3Vsb25nX3QgbGVkYml0W0lOUFVUX0RFVklDRV9JRF9MRURfTUFYIC8gQklUU19QRVJfTE9ORyArIDFdOwogIGtlcm5lbF91bG9uZ190IHNuZGJpdFtJTlBVVF9ERVZJQ0VfSURfU05EX01BWCAvIEJJVFNfUEVSX0xPTkcgKyAxXTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAga2VybmVsX3Vsb25nX3QgZmZiaXRbSU5QVVRfREVWSUNFX0lEX0ZGX01BWCAvIEJJVFNfUEVSX0xPTkcgKyAxXTsKICBrZXJuZWxfdWxvbmdfdCBzd2JpdFtJTlBVVF9ERVZJQ0VfSURfU1dfTUFYIC8gQklUU19QRVJfTE9ORyArIDFdOwotCiAga2VybmVsX3Vsb25nX3QgZHJpdmVyX2luZm87CiB9OwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbW9kdWxlLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbW9kdWxlLmgKaW5kZXggM2M0NDljNi4uMDBhNDFjMiAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L21vZHVsZS5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9tb2R1bGUuaApAQCAtNywxMDggKzcsMTA5IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfTElOVVhfTU9EVUxFX0gKICNkZWZpbmUgX0xJTlVYX01PRFVMRV9ICi0KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9zdGF0Lmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KICNpbmNsdWRlIDxsaW51eC9jYWNoZS5oPgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNpbmNsdWRlIDxsaW51eC9rbW9kLmg+CiAjaW5jbHVkZSA8bGludXgvZWxmLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5naWZ5Lmg+CiAjaW5jbHVkZSA8bGludXgva29iamVjdC5oPgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgogI2luY2x1ZGUgPGFzbS9sb2NhbC5oPgotCiAjaW5jbHVkZSA8YXNtL21vZHVsZS5oPgotCiAjZGVmaW5lIE1PRFVMRV9TVVBQT1JURURfREVWSUNFKG5hbWUpCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjaWZuZGVmIE1PRFVMRV9TWU1CT0xfUFJFRklYCiAjZGVmaW5lIE1PRFVMRV9TWU1CT0xfUFJFRklYICIiCiAjZW5kaWYKLQogI2RlZmluZSBNT0RVTEVfTkFNRV9MRU4gKDY0IC0gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKQotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IGtlcm5lbF9zeW1ib2wKIHsKICB1bnNpZ25lZCBsb25nIHZhbHVlOwogIGNvbnN0IGNoYXIgKm5hbWU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKLQogc3RydWN0IG1vZHZlcnNpb25faW5mbwogewogIHVuc2lnbmVkIGxvbmcgY3JjOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBjaGFyIG5hbWVbTU9EVUxFX05BTUVfTEVOXTsKIH07Ci0KIHN0cnVjdCBtb2R1bGU7Ci0KIHN0cnVjdCBtb2R1bGVfYXR0cmlidXRlIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IGF0dHJpYnV0ZSBhdHRyOwogIHNzaXplX3QgKCpzaG93KShzdHJ1Y3QgbW9kdWxlX2F0dHJpYnV0ZSAqLCBzdHJ1Y3QgbW9kdWxlICosIGNoYXIgKik7CiAgc3NpemVfdCAoKnN0b3JlKShzdHJ1Y3QgbW9kdWxlX2F0dHJpYnV0ZSAqLCBzdHJ1Y3QgbW9kdWxlICosCiAgY29uc3QgY2hhciAqLCBzaXplX3QgY291bnQpOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB2b2lkICgqc2V0dXApKHN0cnVjdCBtb2R1bGUgKiwgY29uc3QgY2hhciAqKTsKICBpbnQgKCp0ZXN0KShzdHJ1Y3QgbW9kdWxlICopOwogIHZvaWQgKCpmcmVlKShzdHJ1Y3QgbW9kdWxlICopOwogfTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBtb2R1bGVfa29iamVjdAogewogIHN0cnVjdCBrb2JqZWN0IGtvYmo7CiAgc3RydWN0IG1vZHVsZSAqbW9kOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07Ci0KIHN0cnVjdCBleGNlcHRpb25fdGFibGVfZW50cnk7Ci0KICNpZmRlZiBNT0RVTEUKICNkZWZpbmUgTU9EVUxFX0dFTkVSSUNfVEFCTEUoZ3R5cGUsbmFtZSkgIGV4dGVybiBjb25zdCBzdHJ1Y3QgZ3R5cGUjI19pZCBfX21vZF8jI2d0eXBlIyNfdGFibGUgICBfX2F0dHJpYnV0ZV9fICgodW51c2VkLCBhbGlhcyhfX3N0cmluZ2lmeShuYW1lKSkpKQotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBUSElTX01PRFVMRSAoJl9fdGhpc19tb2R1bGUpCiAjZWxzZQogI2RlZmluZSBNT0RVTEVfR0VORVJJQ19UQUJMRShndHlwZSxuYW1lKQogI2RlZmluZSBUSElTX01PRFVMRSAoKHN0cnVjdCBtb2R1bGUgKikwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlbmRpZgotCiAjZGVmaW5lIE1PRFVMRV9JTkZPKHRhZywgaW5mbykgX19NT0RVTEVfSU5GTyh0YWcsIHRhZywgaW5mbykKLQogI2RlZmluZSBNT0RVTEVfQUxJQVMoX2FsaWFzKSBNT0RVTEVfSU5GTyhhbGlhcywgX2FsaWFzKQotCiAjZGVmaW5lIE1PRFVMRV9MSUNFTlNFKF9saWNlbnNlKSBNT0RVTEVfSU5GTyhsaWNlbnNlLCBfbGljZW5zZSkKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTU9EVUxFX0FVVEhPUihfYXV0aG9yKSBNT0RVTEVfSU5GTyhhdXRob3IsIF9hdXRob3IpCi0KICNkZWZpbmUgTU9EVUxFX0RFU0NSSVBUSU9OKF9kZXNjcmlwdGlvbikgTU9EVUxFX0lORk8oZGVzY3JpcHRpb24sIF9kZXNjcmlwdGlvbikKLQogI2RlZmluZSBNT0RVTEVfUEFSTV9ERVNDKF9wYXJtLCBkZXNjKSAgIF9fTU9EVUxFX0lORk8ocGFybSwgX3Bhcm0sICNfcGFybSAiOiIgZGVzYykKLQogI2RlZmluZSBNT0RVTEVfREVWSUNFX1RBQkxFKHR5cGUsbmFtZSkgICBNT0RVTEVfR0VORVJJQ19UQUJMRSh0eXBlIyNfZGV2aWNlLG5hbWUpCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1PRFVMRV9WRVJTSU9OKF92ZXJzaW9uKSBNT0RVTEVfSU5GTyh2ZXJzaW9uLCBfdmVyc2lvbikKLQogc3RydWN0IG5vdGlmaWVyX2Jsb2NrOwotCiAjZGVmaW5lIEVYUE9SVF9TWU1CT0woc3ltKQogI2RlZmluZSBFWFBPUlRfU1lNQk9MX0dQTChzeW0pCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBFWFBPUlRfU1lNQk9MX0dQTF9GVVRVUkUoc3ltKQogI2RlZmluZSBFWFBPUlRfVU5VU0VEX1NZTUJPTChzeW0pCiAjZGVmaW5lIEVYUE9SVF9VTlVTRURfU1lNQk9MX0dQTChzeW0pCi0KICNkZWZpbmUgc3ltYm9sX2dldCh4KSAoeyBleHRlcm4gdHlwZW9mKHgpIHggX19hdHRyaWJ1dGVfXygod2VhaykpOyAmKHgpOyB9KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgc3ltYm9sX3B1dCh4KSBkbyB7IH0gd2hpbGUoMCkKICNkZWZpbmUgc3ltYm9sX3B1dF9hZGRyKHgpIGRvIHsgfSB3aGlsZSgwKQogI2RlZmluZSBtb2R1bGVfbmFtZShtb2QpICJrZXJuZWwiCiAjZGVmaW5lIF9fdW5zYWZlKG1vZCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIG1vZHVsZV9wdXRfYW5kX2V4aXQoY29kZSkgZG9fZXhpdChjb2RlKQotCitzdHJ1Y3QgZGV2aWNlX2RyaXZlcjsKIHN0cnVjdCBtb2R1bGU7Ci0KICNkZWZpbmUgc3ltYm9sX3JlcXVlc3QoeCkgdHJ5X3RoZW5fcmVxdWVzdF9tb2R1bGUoc3ltYm9sX2dldCh4KSwgInN5bWJvbDoiICN4KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19NT0RVTEVfU1RSSU5HKHgpIF9fc3RyaW5naWZ5KHgpCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9tb2R1bGVwYXJhbS5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L21vZHVsZXBhcmFtLmgKaW5kZXggYjQ2ZGRkNi4uYTU2NzdhYSAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L21vZHVsZXBhcmFtLmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L21vZHVsZXBhcmFtLmgKQEAgLTcsOTUgKzcsODggQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9MSU5VWF9NT0RVTEVfUEFSQU1TX0gKICNkZWZpbmUgX0xJTlVYX01PRFVMRV9QQVJBTVNfSAotCiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZ2lmeS5oPgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLQogI2lmZGVmIE1PRFVMRQotI2RlZmluZSBNT0RVTEVfUEFSQU1fUFJFRklYICAKKyNkZWZpbmUgTU9EVUxFX1BBUkFNX1BSRUZJWAogI2Vsc2UKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1PRFVMRV9QQVJBTV9QUkVGSVggS0JVSUxEX01PRE5BTUUgIi4iCiAjZW5kaWYKLQogI2lmZGVmIE1PRFVMRQogI2RlZmluZSBfX19tb2R1bGVfY2F0KGEsYikgX19tb2RfICMjIGEgIyMgYgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19tb2R1bGVfY2F0KGEsYikgX19fbW9kdWxlX2NhdChhLGIpCiAjZGVmaW5lIF9fTU9EVUxFX0lORk8odGFnLCBuYW1lLCBpbmZvKSAgc3RhdGljIGNvbnN0IGNoYXIgX19tb2R1bGVfY2F0KG5hbWUsX19MSU5FX18pW10gICBfX2F0dHJpYnV0ZV91c2VkX18gICBfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCIubW9kaW5mbyIpLHVudXNlZCkpID0gX19zdHJpbmdpZnkodGFnKSAiPSIgaW5mbwogI2Vsc2UKICNkZWZpbmUgX19NT0RVTEVfSU5GTyh0YWcsIG5hbWUsIGluZm8pCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2VuZGlmCiAjZGVmaW5lIF9fTU9EVUxFX1BBUk1fVFlQRShuYW1lLCBfdHlwZSkgICBfX01PRFVMRV9JTkZPKHBhcm10eXBlLCBuYW1lIyN0eXBlLCAjbmFtZSAiOiIgX3R5cGUpCi0KIHN0cnVjdCBrZXJuZWxfcGFyYW07Ci0KIHR5cGVkZWYgaW50ICgqcGFyYW1fc2V0X2ZuKShjb25zdCBjaGFyICp2YWwsIHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHR5cGVkZWYgaW50ICgqcGFyYW1fZ2V0X2ZuKShjaGFyICpidWZmZXIsIHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKTsKLQogc3RydWN0IGtlcm5lbF9wYXJhbSB7CiAgY29uc3QgY2hhciAqbmFtZTsKICB1bnNpZ25lZCBpbnQgcGVybTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgcGFyYW1fc2V0X2ZuIHNldDsKICBwYXJhbV9nZXRfZm4gZ2V0OwogIHZvaWQgKmFyZzsKIH07Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3Qga3BhcmFtX3N0cmluZyB7CiAgdW5zaWduZWQgaW50IG1heGxlbjsKICBjaGFyICpzdHJpbmc7CiB9OwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IGtwYXJhbV9hcnJheQogewogIHVuc2lnbmVkIGludCBtYXg7CiAgdW5zaWduZWQgaW50ICpudW07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHBhcmFtX3NldF9mbiBzZXQ7CiAgcGFyYW1fZ2V0X2ZuIGdldDsKICB1bnNpZ25lZCBpbnQgZWxlbXNpemU7CiAgdm9pZCAqZWxlbTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwotCiAjZGVmaW5lIF9fbW9kdWxlX3BhcmFtX2NhbGwocHJlZml4LCBuYW1lLCBzZXQsIGdldCwgYXJnLCBwZXJtKSAgIHN0YXRpYyBjaGFyIF9fcGFyYW1fc3RyXyMjbmFtZVtdID0gcHJlZml4ICNuYW1lOyAgIHN0YXRpYyBzdHJ1Y3Qga2VybmVsX3BhcmFtIGNvbnN0IF9fcGFyYW1fIyNuYW1lICAgX19hdHRyaWJ1dGVfdXNlZF9fICAgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCxfX3NlY3Rpb25fXyAoIl9fcGFyYW0iKSxhbGlnbmVkKHNpemVvZih2b2lkICopKSkpICAgPSB7IF9fcGFyYW1fc3RyXyMjbmFtZSwgcGVybSwgc2V0LCBnZXQsIGFyZyB9Ci0KICNkZWZpbmUgbW9kdWxlX3BhcmFtX2NhbGwobmFtZSwgc2V0LCBnZXQsIGFyZywgcGVybSkgICBfX21vZHVsZV9wYXJhbV9jYWxsKE1PRFVMRV9QQVJBTV9QUkVGSVgsIG5hbWUsIHNldCwgZ2V0LCBhcmcsIHBlcm0pCi0KICNkZWZpbmUgbW9kdWxlX3BhcmFtX25hbWVkKG5hbWUsIHZhbHVlLCB0eXBlLCBwZXJtKSAgIHBhcmFtX2NoZWNrXyMjdHlwZShuYW1lLCAmKHZhbHVlKSk7ICAgbW9kdWxlX3BhcmFtX2NhbGwobmFtZSwgcGFyYW1fc2V0XyMjdHlwZSwgcGFyYW1fZ2V0XyMjdHlwZSwgJnZhbHVlLCBwZXJtKTsgICBfX01PRFVMRV9QQVJNX1RZUEUobmFtZSwgI3R5cGUpCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIG1vZHVsZV9wYXJhbShuYW1lLCB0eXBlLCBwZXJtKSAgIG1vZHVsZV9wYXJhbV9uYW1lZChuYW1lLCBuYW1lLCB0eXBlLCBwZXJtKQotCiAjZGVmaW5lIG1vZHVsZV9wYXJhbV9zdHJpbmcobmFtZSwgc3RyaW5nLCBsZW4sIHBlcm0pICAgc3RhdGljIHN0cnVjdCBrcGFyYW1fc3RyaW5nIF9fcGFyYW1fc3RyaW5nXyMjbmFtZSAgID0geyBsZW4sIHN0cmluZyB9OyAgIG1vZHVsZV9wYXJhbV9jYWxsKG5hbWUsIHBhcmFtX3NldF9jb3B5c3RyaW5nLCBwYXJhbV9nZXRfc3RyaW5nLCAgICZfX3BhcmFtX3N0cmluZ18jI25hbWUsIHBlcm0pOyAgIF9fTU9EVUxFX1BBUk1fVFlQRShuYW1lLCAic3RyaW5nIikKLQogI2RlZmluZSBfX3BhcmFtX2NoZWNrKG5hbWUsIHAsIHR5cGUpICAgc3RhdGljIGlubGluZSB0eXBlICpfX2NoZWNrXyMjbmFtZSh2b2lkKSB7IHJldHVybihwKTsgfQotCiAjZGVmaW5lIHBhcmFtX2NoZWNrX2J5dGUobmFtZSwgcCkgX19wYXJhbV9jaGVjayhuYW1lLCBwLCB1bnNpZ25lZCBjaGFyKQotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBwYXJhbV9jaGVja19zaG9ydChuYW1lLCBwKSBfX3BhcmFtX2NoZWNrKG5hbWUsIHAsIHNob3J0KQotCiAjZGVmaW5lIHBhcmFtX2NoZWNrX3VzaG9ydChuYW1lLCBwKSBfX3BhcmFtX2NoZWNrKG5hbWUsIHAsIHVuc2lnbmVkIHNob3J0KQotCiAjZGVmaW5lIHBhcmFtX2NoZWNrX2ludChuYW1lLCBwKSBfX3BhcmFtX2NoZWNrKG5hbWUsIHAsIGludCkKLQogI2RlZmluZSBwYXJhbV9jaGVja191aW50KG5hbWUsIHApIF9fcGFyYW1fY2hlY2sobmFtZSwgcCwgdW5zaWduZWQgaW50KQotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBwYXJhbV9jaGVja19sb25nKG5hbWUsIHApIF9fcGFyYW1fY2hlY2sobmFtZSwgcCwgbG9uZykKLQogI2RlZmluZSBwYXJhbV9jaGVja191bG9uZyhuYW1lLCBwKSBfX3BhcmFtX2NoZWNrKG5hbWUsIHAsIHVuc2lnbmVkIGxvbmcpCi0KICNkZWZpbmUgcGFyYW1fY2hlY2tfY2hhcnAobmFtZSwgcCkgX19wYXJhbV9jaGVjayhuYW1lLCBwLCBjaGFyICopCi0KICNkZWZpbmUgcGFyYW1fY2hlY2tfYm9vbChuYW1lLCBwKSBfX3BhcmFtX2NoZWNrKG5hbWUsIHAsIGludCkKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgcGFyYW1fY2hlY2tfaW52Ym9vbChuYW1lLCBwKSBfX3BhcmFtX2NoZWNrKG5hbWUsIHAsIGludCkKLQogI2RlZmluZSBtb2R1bGVfcGFyYW1fYXJyYXlfbmFtZWQobmFtZSwgYXJyYXksIHR5cGUsIG51bXAsIHBlcm0pICAgc3RhdGljIHN0cnVjdCBrcGFyYW1fYXJyYXkgX19wYXJhbV9hcnJfIyNuYW1lICAgPSB7IEFSUkFZX1NJWkUoYXJyYXkpLCBudW1wLCBwYXJhbV9zZXRfIyN0eXBlLCBwYXJhbV9nZXRfIyN0eXBlLCAgc2l6ZW9mKGFycmF5WzBdKSwgYXJyYXkgfTsgICBtb2R1bGVfcGFyYW1fY2FsbChuYW1lLCBwYXJhbV9hcnJheV9zZXQsIHBhcmFtX2FycmF5X2dldCwgICAmX19wYXJhbV9hcnJfIyNuYW1lLCBwZXJtKTsgICBfX01PRFVMRV9QQVJNX1RZUEUobmFtZSwgImFycmF5IG9mICIgI3R5cGUpCi0KICNkZWZpbmUgbW9kdWxlX3BhcmFtX2FycmF5KG5hbWUsIHR5cGUsIG51bXAsIHBlcm0pICAgbW9kdWxlX3BhcmFtX2FycmF5X25hbWVkKG5hbWUsIG5hbWUsIHR5cGUsIG51bXAsIHBlcm0pCi0KIHN0cnVjdCBtb2R1bGU7Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9tb3VudC5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L21vdW50LmgKaW5kZXggZWU0NzZlMC4uMjY5NGM4YyAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L21vdW50LmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L21vdW50LmgKQEAgLTcsNiArNywxMyBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX0xJTlVYX01PVU5UX0gKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9tcm91dGU2LmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbXJvdXRlNi5oCmluZGV4IDJiMTUxYjkuLmYyMzRhNjIgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9tcm91dGU2LmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L21yb3V0ZTYuaApAQCAtNyw5OCArNywxMDggQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9fTElOVVhfTVJPVVRFNl9ICiAjZGVmaW5lIF9fTElOVVhfTVJPVVRFNl9ICi0KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NvY2tpb3MuaD4KLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTVJUNl9CQVNFIDIwMAotI2RlZmluZSBNUlQ2X0lOSVQgKE1SVDZfQkFTRSkgIAotI2RlZmluZSBNUlQ2X0RPTkUgKE1SVDZfQkFTRSsxKSAgCi0jZGVmaW5lIE1SVDZfQUREX01JRiAoTVJUNl9CQVNFKzIpICAKLSNkZWZpbmUgTVJUNl9ERUxfTUlGIChNUlQ2X0JBU0UrMykgIAotI2RlZmluZSBNUlQ2X0FERF9NRkMgKE1SVDZfQkFTRSs0KSAgCi0jZGVmaW5lIE1SVDZfREVMX01GQyAoTVJUNl9CQVNFKzUpICAKLSNkZWZpbmUgTVJUNl9WRVJTSU9OIChNUlQ2X0JBU0UrNikgIAotI2RlZmluZSBNUlQ2X0FTU0VSVCAoTVJUNl9CQVNFKzcpICAKLSNkZWZpbmUgTVJUNl9QSU0gKE1SVDZfQkFTRSs4KSAgCi0jZGVmaW5lIE1SVDZfVEFCTEUgKE1SVDZfQkFTRSs5KSAgCi0KLSNkZWZpbmUgU0lPQ0dFVE1JRkNOVF9JTjYgU0lPQ1BST1RPUFJJVkFURSAgCisjZGVmaW5lIE1SVDZfSU5JVCAoTVJUNl9CQVNFKQorI2RlZmluZSBNUlQ2X0RPTkUgKE1SVDZfQkFTRSsxKQorI2RlZmluZSBNUlQ2X0FERF9NSUYgKE1SVDZfQkFTRSsyKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgTVJUNl9ERUxfTUlGIChNUlQ2X0JBU0UrMykKKyNkZWZpbmUgTVJUNl9BRERfTUZDIChNUlQ2X0JBU0UrNCkKKyNkZWZpbmUgTVJUNl9ERUxfTUZDIChNUlQ2X0JBU0UrNSkKKyNkZWZpbmUgTVJUNl9WRVJTSU9OIChNUlQ2X0JBU0UrNikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIE1SVDZfQVNTRVJUIChNUlQ2X0JBU0UrNykKKyNkZWZpbmUgTVJUNl9QSU0gKE1SVDZfQkFTRSs4KQorI2RlZmluZSBNUlQ2X1RBQkxFIChNUlQ2X0JBU0UrOSkKKyNkZWZpbmUgU0lPQ0dFVE1JRkNOVF9JTjYgU0lPQ1BST1RPUFJJVkFURQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU0lPQ0dFVFNHQ05UX0lONiAoU0lPQ1BST1RPUFJJVkFURSsxKQogI2RlZmluZSBTSU9DR0VUUlBGIChTSU9DUFJPVE9QUklWQVRFKzIpCi0KICNkZWZpbmUgTUFYTUlGUyAzMgogdHlwZWRlZiB1bnNpZ25lZCBsb25nIG1pZmJpdG1hcF90OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHR5cGVkZWYgdW5zaWduZWQgc2hvcnQgbWlmaV90OwogI2RlZmluZSBBTExfTUlGUyAoKG1pZmlfdCkoLTEpKQotCiAjaWZuZGVmIElGX1NFVFNJWkUKICNkZWZpbmUgSUZfU0VUU0laRSAyNTYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZW5kaWYKLQogdHlwZWRlZiBfX3UzMiBpZl9tYXNrOwotI2RlZmluZSBOSUZCSVRTIChzaXplb2YoaWZfbWFzaykgKiA4KSAgCi0KKyNkZWZpbmUgTklGQklUUyAoc2l6ZW9mKGlmX21hc2spICogOCkKICNpZm5kZWYgRElWX1JPVU5EX1VQCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBESVZfUk9VTkRfVVAoeCx5KSAoKCh4KSArICgoeSkgLSAxKSkgLyAoeSkpCiAjZW5kaWYKLQogdHlwZWRlZiBzdHJ1Y3QgaWZfc2V0IHsKICBpZl9tYXNrIGlmc19iaXRzW0RJVl9ST1VORF9VUChJRl9TRVRTSVpFLCBOSUZCSVRTKV07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfSBpZl9zZXQ7Ci0KICNkZWZpbmUgSUZfU0VUKG4sIHApICgocCktPmlmc19iaXRzWyhuKS9OSUZCSVRTXSB8PSAoMSA8PCAoKG4pICUgTklGQklUUykpKQogI2RlZmluZSBJRl9DTFIobiwgcCkgKChwKS0+aWZzX2JpdHNbKG4pL05JRkJJVFNdICY9IH4oMSA8PCAoKG4pICUgTklGQklUUykpKQogI2RlZmluZSBJRl9JU1NFVChuLCBwKSAoKHApLT5pZnNfYml0c1sobikvTklGQklUU10gJiAoMSA8PCAoKG4pICUgTklGQklUUykpKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSUZfQ09QWShmLCB0KSBiY29weShmLCB0LCBzaXplb2YoKihmKSkpCiAjZGVmaW5lIElGX1pFUk8ocCkgYnplcm8ocCwgc2l6ZW9mKCoocCkpKQotCiBzdHJ1Y3QgbWlmNmN0bCB7CiAgbWlmaV90IG1pZjZjX21pZmk7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGNoYXIgbWlmNmNfZmxhZ3M7CiAgdW5zaWduZWQgY2hhciB2aWZjX3RocmVzaG9sZDsKICBfX3UxNiBtaWY2Y19waWZpOwogIHVuc2lnbmVkIGludCB2aWZjX3JhdGVfbGltaXQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKLQotI2RlZmluZSBNSUZGX1JFR0lTVEVSIDB4MSAgCi0KKyNkZWZpbmUgTUlGRl9SRUdJU1RFUiAweDEKIHN0cnVjdCBtZjZjY3RsIHsKICBzdHJ1Y3Qgc29ja2FkZHJfaW42IG1mNmNjX29yaWdpbjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IHNvY2thZGRyX2luNiBtZjZjY19tY2FzdGdycDsKICBtaWZpX3QgbWY2Y2NfcGFyZW50OwogIHN0cnVjdCBpZl9zZXQgbWY2Y2NfaWZzZXQ7CiB9OwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IHNpb2Nfc2dfcmVxNiB7CiAgc3RydWN0IHNvY2thZGRyX2luNiBzcmM7CiAgc3RydWN0IHNvY2thZGRyX2luNiBncnA7CiAgdW5zaWduZWQgbG9uZyBwa3RjbnQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGxvbmcgYnl0ZWNudDsKICB1bnNpZ25lZCBsb25nIHdyb25nX2lmOwogfTsKLQogc3RydWN0IHNpb2NfbWlmX3JlcTYgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBtaWZpX3QgbWlmaTsKICB1bnNpZ25lZCBsb25nIGljb3VudDsKICB1bnNpZ25lZCBsb25nIG9jb3VudDsKICB1bnNpZ25lZCBsb25nIGlieXRlczsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgbG9uZyBvYnl0ZXM7CiB9OwotCiBzdHJ1Y3QgbXJ0Nm1zZyB7CiAjZGVmaW5lIE1SVDZNU0dfTk9DQUNIRSAxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNUlQ2TVNHX1dST05HTUlGIDIKLSNkZWZpbmUgTVJUNk1TR19XSE9MRVBLVCAzICAKKyNkZWZpbmUgTVJUNk1TR19XSE9MRVBLVCAzCiAgX191OCBpbTZfbWJ6OwogIF9fdTggaW02X21zZ3R5cGU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTE2IGltNl9taWY7CiAgX191MzIgaW02X3BhZDsKICBzdHJ1Y3QgaW42X2FkZHIgaW02X3NyYywgaW02X2RzdDsKIH07Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9tc2Rvc19mcy5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L21zZG9zX2ZzLmgKaW5kZXggNWE0ZWIwYS4uZDg4NWU1MiAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L21zZG9zX2ZzLmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L21zZG9zX2ZzLmgKQEAgLTcsMTc0ICs3LDE4NCBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX0xJTlVYX01TRE9TX0ZTX0gKICNkZWZpbmUgX0xJTlVYX01TRE9TX0ZTX0gKLQogI2luY2x1ZGUgPGxpbnV4L21hZ2ljLmg+Ci0KICNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+Ci0KLSNkZWZpbmUgU0VDVE9SX1NJWkUgNTEyICAKLSNkZWZpbmUgU0VDVE9SX0JJVFMgOSAgCi0jZGVmaW5lIE1TRE9TX0RQQiAoTVNET1NfRFBTKSAgCi0jZGVmaW5lIE1TRE9TX0RQQl9CSVRTIDQgIAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgU0VDVE9SX1NJWkUgNTEyCisjZGVmaW5lIFNFQ1RPUl9CSVRTIDkKKyNkZWZpbmUgTVNET1NfRFBCIChNU0RPU19EUFMpCisjZGVmaW5lIE1TRE9TX0RQQl9CSVRTIDQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1TRE9TX0RQUyAoU0VDVE9SX1NJWkUgLyBzaXplb2Yoc3RydWN0IG1zZG9zX2Rpcl9lbnRyeSkpCi0jZGVmaW5lIE1TRE9TX0RQU19CSVRTIDQgIAorI2RlZmluZSBNU0RPU19EUFNfQklUUyA0CiAjZGVmaW5lIENGX0xFX1codikgbGUxNl90b19jcHUodikKICNkZWZpbmUgQ0ZfTEVfTCh2KSBsZTMyX3RvX2NwdSh2KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQ1RfTEVfVyh2KSBjcHVfdG9fbGUxNih2KQogI2RlZmluZSBDVF9MRV9MKHYpIGNwdV90b19sZTMyKHYpCi0KLSNkZWZpbmUgTVNET1NfUk9PVF9JTk8gMSAgCi0jZGVmaW5lIE1TRE9TX0RJUl9CSVRTIDUgIAotCisjZGVmaW5lIE1TRE9TX1JPT1RfSU5PIDEKKyNkZWZpbmUgTVNET1NfRElSX0JJVFMgNQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRkFUX01BWF9ESVJfRU5UUklFUyAoNjU1MzYpCiAjZGVmaW5lIEZBVF9NQVhfRElSX1NJWkUgKEZBVF9NQVhfRElSX0VOVFJJRVMgPDwgTVNET1NfRElSX0JJVFMpCi0KLSNkZWZpbmUgQVRUUl9OT05FIDAgIAotI2RlZmluZSBBVFRSX1JPIDEgIAotI2RlZmluZSBBVFRSX0hJRERFTiAyICAKLSNkZWZpbmUgQVRUUl9TWVMgNCAgCi0jZGVmaW5lIEFUVFJfVk9MVU1FIDggIAotI2RlZmluZSBBVFRSX0RJUiAxNiAgCi0jZGVmaW5lIEFUVFJfQVJDSCAzMiAgCi0KKyNkZWZpbmUgQVRUUl9OT05FIDAKKyNkZWZpbmUgQVRUUl9STyAxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBBVFRSX0hJRERFTiAyCisjZGVmaW5lIEFUVFJfU1lTIDQKKyNkZWZpbmUgQVRUUl9WT0xVTUUgOAorI2RlZmluZSBBVFRSX0RJUiAxNgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgQVRUUl9BUkNIIDMyCiAjZGVmaW5lIEFUVFJfVU5VU0VEIChBVFRSX1ZPTFVNRSB8IEFUVFJfQVJDSCB8IEFUVFJfU1lTIHwgQVRUUl9ISURERU4pCi0KICNkZWZpbmUgQVRUUl9FWFQgKEFUVFJfUk8gfCBBVFRSX0hJRERFTiB8IEFUVFJfU1lTIHwgQVRUUl9WT0xVTUUpCi0KLSNkZWZpbmUgQ0FTRV9MT1dFUl9CQVNFIDggIAotI2RlZmluZSBDQVNFX0xPV0VSX0VYVCAxNiAgCi0KLSNkZWZpbmUgREVMRVRFRF9GTEFHIDB4ZTUgIAorI2RlZmluZSBDQVNFX0xPV0VSX0JBU0UgOAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgQ0FTRV9MT1dFUl9FWFQgMTYKKyNkZWZpbmUgREVMRVRFRF9GTEFHIDB4ZTUKICNkZWZpbmUgSVNfRlJFRShuKSAoISoobikgfHwgKihuKSA9PSBERUxFVEVEX0ZMQUcpCi0KICNkZWZpbmUgTVNET1NfVkFMSURfTU9ERSAoU19JRlJFRyB8IFNfSUZESVIgfCBTX0lSV1hVIHwgU19JUldYRyB8IFNfSVJXWE8pCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1TRE9TX01LTU9ERShhLCBtKSAobSAmIChhICYgQVRUUl9STyA/IFNfSVJVR098U19JWFVHTyA6IFNfSVJXWFVHTykpCi0KLSNkZWZpbmUgTVNET1NfTkFNRSAxMSAgCi0jZGVmaW5lIE1TRE9TX0xPTkdOQU1FIDI1NiAgCi0jZGVmaW5lIE1TRE9TX1NMT1RTIDIxICAKLSNkZWZpbmUgTVNET1NfRE9UICIuICAgICAgICAgICIgIAotI2RlZmluZSBNU0RPU19ET1RET1QgIi4uICAgICAgICAgIiAgCi0KKyNkZWZpbmUgTVNET1NfTkFNRSAxMQorI2RlZmluZSBNU0RPU19MT05HTkFNRSAyNTYKKyNkZWZpbmUgTVNET1NfU0xPVFMgMjEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIE1TRE9TX0RPVCAiLiAgICAgICAgICAiCisjZGVmaW5lIE1TRE9TX0RPVERPVCAiLi4gICAgICAgICAiCiAjZGVmaW5lIEZBVF9WQUxJRF9NRURJQSh4KSAoKDB4RjggPD0gKHgpICYmICh4KSA8PSAweEZGKSB8fCAoeCkgPT0gMHhGMCkKICNkZWZpbmUgRkFUX0ZJUlNUX0VOVChzLCB4KSAoKE1TRE9TX1NCKHMpLT5mYXRfYml0cyA9PSAzMiA/IDB4MEZGRkZGMDAgOiAgIE1TRE9TX1NCKHMpLT5mYXRfYml0cyA9PSAxNiA/IDB4RkYwMCA6IDB4RjAwKSB8ICh4KSkKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRkFUX1NUQVJUX0VOVCAyCi0KICNkZWZpbmUgTUFYX0ZBVDEyIDB4RkY0CiAjZGVmaW5lIE1BWF9GQVQxNiAweEZGRjQKICNkZWZpbmUgTUFYX0ZBVDMyIDB4MEZGRkZGRjYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1BWF9GQVQocykgKE1TRE9TX1NCKHMpLT5mYXRfYml0cyA9PSAzMiA/IE1BWF9GQVQzMiA6ICAgTVNET1NfU0IocyktPmZhdF9iaXRzID09IDE2ID8gTUFYX0ZBVDE2IDogTUFYX0ZBVDEyKQotCiAjZGVmaW5lIEJBRF9GQVQxMiAweEZGNwogI2RlZmluZSBCQURfRkFUMTYgMHhGRkY3CiAjZGVmaW5lIEJBRF9GQVQzMiAweDBGRkZGRkY3Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEVPRl9GQVQxMiAweEZGRgogI2RlZmluZSBFT0ZfRkFUMTYgMHhGRkZGCiAjZGVmaW5lIEVPRl9GQVQzMiAweDBGRkZGRkZGCi0KICNkZWZpbmUgRkFUX0VOVF9GUkVFICgwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRkFUX0VOVF9CQUQgKEJBRF9GQVQzMikKICNkZWZpbmUgRkFUX0VOVF9FT0YgKEVPRl9GQVQzMikKLQogI2RlZmluZSBGQVRfRlNJTkZPX1NJRzEgMHg0MTYxNTI1MgogI2RlZmluZSBGQVRfRlNJTkZPX1NJRzIgMHg2MTQxNzI3MgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSVNfRlNJTkZPKHgpIChsZTMyX3RvX2NwdSgoeCktPnNpZ25hdHVyZTEpID09IEZBVF9GU0lORk9fU0lHMSAgICYmIGxlMzJfdG9fY3B1KCh4KS0+c2lnbmF0dXJlMikgPT0gRkFUX0ZTSU5GT19TSUcyKQotCiAjZGVmaW5lIFZGQVRfSU9DVExfUkVBRERJUl9CT1RIIF9JT1IoJ3InLCAxLCBzdHJ1Y3QgZGlyZW50IFsyXSkKICNkZWZpbmUgVkZBVF9JT0NUTF9SRUFERElSX1NIT1JUIF9JT1IoJ3InLCAyLCBzdHJ1Y3QgZGlyZW50IFsyXSkKLQogI2RlZmluZSBGQVRfSU9DVExfR0VUX0FUVFJJQlVURVMgX0lPUigncicsIDB4MTAsIF9fdTMyKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRkFUX0lPQ1RMX1NFVF9BVFRSSUJVVEVTIF9JT1coJ3InLCAweDExLCBfX3UzMikKICNkZWZpbmUgVkZBVF9JT0NUTF9HRVRfVk9MVU1FX0lEIF9JT1IoJ3InLCAweDEyLCBfX3UzMikKLQotI2RlZmluZSBWRkFUX1NGTl9ESVNQTEFZX0xPV0VSIDB4MDAwMSAgCi0jZGVmaW5lIFZGQVRfU0ZOX0RJU1BMQVlfV0lOOTUgMHgwMDAyICAKLSNkZWZpbmUgVkZBVF9TRk5fRElTUExBWV9XSU5OVCAweDAwMDQgIAotI2RlZmluZSBWRkFUX1NGTl9DUkVBVEVfV0lOOTUgMHgwMTAwICAKLSNkZWZpbmUgVkZBVF9TRk5fQ1JFQVRFX1dJTk5UIDB4MDIwMCAgCi0KKyNkZWZpbmUgVkZBVF9TRk5fRElTUExBWV9MT1dFUiAweDAwMDEKKyNkZWZpbmUgVkZBVF9TRk5fRElTUExBWV9XSU45NSAweDAwMDIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFZGQVRfU0ZOX0RJU1BMQVlfV0lOTlQgMHgwMDA0CisjZGVmaW5lIFZGQVRfU0ZOX0NSRUFURV9XSU45NSAweDAxMDAKKyNkZWZpbmUgVkZBVF9TRk5fQ1JFQVRFX1dJTk5UIDB4MDIwMAogc3RydWN0IGZhdF9ib290X3NlY3RvciB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTggaWdub3JlZFszXTsKICBfX3U4IHN5c3RlbV9pZFs4XTsKICBfX3U4IHNlY3Rvcl9zaXplWzJdOwogIF9fdTggc2VjX3Blcl9jbHVzOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX2xlMTYgcmVzZXJ2ZWQ7CiAgX191OCBmYXRzOwogIF9fdTggZGlyX2VudHJpZXNbMl07CiAgX191OCBzZWN0b3JzWzJdOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IG1lZGlhOwogIF9fbGUxNiBmYXRfbGVuZ3RoOwogIF9fbGUxNiBzZWNzX3RyYWNrOwogIF9fbGUxNiBoZWFkczsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX19sZTMyIGhpZGRlbjsKICBfX2xlMzIgdG90YWxfc2VjdDsKLQogIF9fbGUzMiBmYXQzMl9sZW5ndGg7CiAgX19sZTE2IGZsYWdzOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IHZlcnNpb25bMl07CiAgX19sZTMyIHJvb3RfY2x1c3RlcjsKICBfX2xlMTYgaW5mb19zZWN0b3I7CiAgX19sZTE2IGJhY2t1cF9ib290OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX2xlMTYgcmVzZXJ2ZWQyWzZdOwogfTsKLQogc3RydWN0IGZhdF9ib290X2ZzaW5mbyB7CiAgX19sZTMyIHNpZ25hdHVyZTE7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fbGUzMiByZXNlcnZlZDFbMTIwXTsKICBfX2xlMzIgc2lnbmF0dXJlMjsKICBfX2xlMzIgZnJlZV9jbHVzdGVyczsKICBfX2xlMzIgbmV4dF9jbHVzdGVyOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX2xlMzIgcmVzZXJ2ZWQyWzRdOwogfTsKLQogc3RydWN0IGZhdF9ib290X2JzeCB7CiAgX191OCBkcml2ZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191OCByZXNlcnZlZDE7CiAgX191OCBzaWduYXR1cmU7CiAgX191OCB2b2xfaWRbNF07CiAgX191OCB2b2xfbGFiZWxbMTFdOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IHR5cGVbOF07CiB9OwotI2RlZmluZSBGQVQxNl9CU1hfT0ZGU0VUIDM2ICAKLSNkZWZpbmUgRkFUMzJfQlNYX09GRlNFVCA2NCAgCi0KKyNkZWZpbmUgRkFUMTZfQlNYX09GRlNFVCAzNgorI2RlZmluZSBGQVQzMl9CU1hfT0ZGU0VUIDY0CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IG1zZG9zX2Rpcl9lbnRyeSB7CiAgX191OCBuYW1lW01TRE9TX05BTUVdOwogIF9fdTggYXR0cjsKICBfX3U4IGxjYXNlOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IGN0aW1lX2NzOwogIF9fbGUxNiBjdGltZTsKICBfX2xlMTYgY2RhdGU7CiAgX19sZTE2IGFkYXRlOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX2xlMTYgc3RhcnRoaTsKICBfX2xlMTYgdGltZSxkYXRlLHN0YXJ0OwogIF9fbGUzMiBzaXplOwogfTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBtc2Rvc19kaXJfc2xvdCB7CiAgX191OCBpZDsKICBfX3U4IG5hbWUwXzRbMTBdOwogIF9fdTggYXR0cjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191OCByZXNlcnZlZDsKICBfX3U4IGFsaWFzX2NoZWNrc3VtOwogIF9fdTggbmFtZTVfMTBbMTJdOwogIF9fbGUxNiBzdGFydDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191OCBuYW1lMTFfMTJbNF07CiB9OwotCiBzdHJ1Y3QgZmF0X3Nsb3RfaW5mbyB7CiAgbG9mZl90IGlfcG9zOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBsb2ZmX3Qgc2xvdF9vZmY7CiAgaW50IG5yX3Nsb3RzOwogIHN0cnVjdCBtc2Rvc19kaXJfZW50cnkgKmRlOwogIHN0cnVjdCBidWZmZXJfaGVhZCAqYmg7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKLQogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbXNnLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbXNnLmgKaW5kZXggMjU0ZjFlOS4uN2NiOWUzNiAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L21zZy5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9tc2cuaApAQCAtNyw2MiArNyw3MCBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX0xJTlVYX01TR19ICiAjZGVmaW5lIF9MSU5VWF9NU0dfSAotCiAjaW5jbHVkZSA8bGludXgvaXBjLmg+Ci0KICNkZWZpbmUgTVNHX1NUQVQgMTEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1TR19JTkZPIDEyCi0KLSNkZWZpbmUgTVNHX05PRVJST1IgMDEwMDAwICAKLSNkZWZpbmUgTVNHX0VYQ0VQVCAwMjAwMDAgIAotCisjZGVmaW5lIE1TR19OT0VSUk9SIDAxMDAwMAorI2RlZmluZSBNU0dfRVhDRVBUIDAyMDAwMAogc3RydWN0IG1zcWlkX2RzIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IGlwY19wZXJtIG1zZ19wZXJtOwogIHN0cnVjdCBtc2cgKm1zZ19maXJzdDsKICBzdHJ1Y3QgbXNnICptc2dfbGFzdDsKICBfX2tlcm5lbF90aW1lX3QgbXNnX3N0aW1lOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX2tlcm5lbF90aW1lX3QgbXNnX3J0aW1lOwogIF9fa2VybmVsX3RpbWVfdCBtc2dfY3RpbWU7CiAgdW5zaWduZWQgbG9uZyBtc2dfbGNieXRlczsKICB1bnNpZ25lZCBsb25nIG1zZ19scWJ5dGVzOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBzaG9ydCBtc2dfY2J5dGVzOwogIHVuc2lnbmVkIHNob3J0IG1zZ19xbnVtOwogIHVuc2lnbmVkIHNob3J0IG1zZ19xYnl0ZXM7CiAgX19rZXJuZWxfaXBjX3BpZF90IG1zZ19sc3BpZDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX19rZXJuZWxfaXBjX3BpZF90IG1zZ19scnBpZDsKIH07Ci0KICNpbmNsdWRlIDxhc20vbXNnYnVmLmg+Ci0KIHN0cnVjdCBtc2didWYgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBsb25nIG10eXBlOwogIGNoYXIgbXRleHRbMV07CiB9OwotCiBzdHJ1Y3QgbXNnaW5mbyB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGludCBtc2dwb29sOwogIGludCBtc2dtYXA7CiAgaW50IG1zZ21heDsKICBpbnQgbXNnbW5iOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBpbnQgbXNnbW5pOwogIGludCBtc2dzc3o7CiAgaW50IG1zZ3RxbDsKICB1bnNpZ25lZCBzaG9ydCBtc2dzZWc7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKLQotI2RlZmluZSBNU0dNTkkgMTYgICAgCi0jZGVmaW5lIE1TR01BWCA4MTkyICAgIAotI2RlZmluZSBNU0dNTkIgMTYzODQgICAgCi0KLSNkZWZpbmUgTVNHUE9PTCAoTVNHTU5JKk1TR01OQi8xMDI0KSAgCi0jZGVmaW5lIE1TR1RRTCBNU0dNTkIgIAotI2RlZmluZSBNU0dNQVAgTVNHTU5CICAKLSNkZWZpbmUgTVNHU1NaIDE2ICAKLSNkZWZpbmUgX19NU0dTRUcgKChNU0dQT09MKjEwMjQpLyBNU0dTU1opICAKKyNkZWZpbmUgTVNHTU5JIDE2CisjZGVmaW5lIE1TR01BWCA4MTkyCisjZGVmaW5lIE1TR01OQiAxNjM4NAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgTVNHUE9PTCAoTVNHTU5JKk1TR01OQi8xMDI0KQorI2RlZmluZSBNU0dUUUwgTVNHTU5CCisjZGVmaW5lIE1TR01BUCBNU0dNTkIKKyNkZWZpbmUgTVNHU1NaIDE2CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBfX01TR1NFRyAoKE1TR1BPT0wqMTAyNCkvIE1TR1NTWikKICNkZWZpbmUgTVNHU0VHIChfX01TR1NFRyA8PSAweGZmZmYgPyBfX01TR1NFRyA6IDB4ZmZmZikKLQogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbXNtX2Fkc3AuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9tc21fYWRzcC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMTM4YTVkLi4wMDAwMDAwCi0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9tc21fYWRzcC5oCisrKyAvZGV2L251bGwKQEAgLTEsNjMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKioqCi0gKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCi0gKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bwotICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCi0gKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKLSAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgotICoqKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotI2lmbmRlZiBfX0xJTlVYX01TTV9BRFNQX0gKLSNkZWZpbmUgX19MSU5VWF9NU01fQURTUF9ICi0KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+Ci0KLSNkZWZpbmUgQURTUF9JT0NUTF9NQUdJQyAncScKLQotc3RydWN0IGFkc3BfY29tbWFuZF90IHsKLSB1aW50MTZfdCBxdWV1ZTsKLSB1aW50MzJfdCBsZW47Ci0gdWludDhfdCAqZGF0YTsKLX07Ci0KLXN0cnVjdCBhZHNwX2V2ZW50X3QgewotIHVpbnQxNl90IHR5cGU7Ci0gdWludDMyX3QgdGltZW91dF9tczsKLSB1aW50MTZfdCBtc2dfaWQ7Ci0gdWludDE2X3QgZmxhZ3M7Ci0gdWludDMyX3QgbGVuOwotIHVpbnQ4X3QgKmRhdGE7Ci19OwotCi0jZGVmaW5lIEFEU1BfSU9DVExfRU5BQkxFIF9JT1IoQURTUF9JT0NUTF9NQUdJQywgMSwgdW5zaWduZWQpCi0KLSNkZWZpbmUgQURTUF9JT0NUTF9ESVNBQkxFIF9JT1IoQURTUF9JT0NUTF9NQUdJQywgMiwgdW5zaWduZWQpCi0KLSNkZWZpbmUgQURTUF9JT0NUTF9ESVNBQkxFX0FDSyBfSU9SKEFEU1BfSU9DVExfTUFHSUMsIDMsIHVuc2lnbmVkKQotCi0jZGVmaW5lIEFEU1BfSU9DVExfV1JJVEVfQ09NTUFORCBfSU9SKEFEU1BfSU9DVExfTUFHSUMsIDQsIHN0cnVjdCBhZHNwX2NvbW1hbmRfdCAqKQotCi0jZGVmaW5lIEFEU1BfSU9DVExfR0VUX0VWRU5UIF9JT1dSKEFEU1BfSU9DVExfTUFHSUMsIDUsIHN0cnVjdCBhZHNwX2V2ZW50X2RhdGFfdCAqKQotCi0jZGVmaW5lIEFEU1BfSU9DVExfU0VUX0NMS1JBVEUgX0lPUihBRFNQX0lPQ1RMX01BR0lDLCA2LCB1bnNpZ25lZCkKLQotI2RlZmluZSBBRFNQX0lPQ1RMX0RJU0FCTEVfRVZFTlRfUlNQIF9JT1IoQURTUF9JT0NUTF9NQUdJQywgMTAsIHVuc2lnbmVkKQotCi1zdHJ1Y3QgYWRzcF9wbWVtX2luZm8gewotIGludCBmZDsKLSB2b2lkICp2YWRkcjsKLX07Ci0KLSNkZWZpbmUgQURTUF9JT0NUTF9SRUdJU1RFUl9QTUVNIF9JT1coQURTUF9JT0NUTF9NQUdJQywgMTMsIHVuc2lnbmVkKQotCi0jZGVmaW5lIEFEU1BfSU9DVExfVU5SRUdJU1RFUl9QTUVNIF9JT1coQURTUF9JT0NUTF9NQUdJQywgMTQsIHVuc2lnbmVkKQotCi0jZGVmaW5lIEFEU1BfSU9DVExfQUJPUlRfRVZFTlRfUkVBRCBfSU9XKEFEU1BfSU9DVExfTUFHSUMsIDE1LCB1bnNpZ25lZCkKLQotI2RlZmluZSBBRFNQX0lPQ1RMX0xJTktfVEFTSyBfSU9XKEFEU1BfSU9DVExfTUFHSUMsIDE2LCB1bnNpZ25lZCkKLQotI2VuZGlmCi0KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9tc21fYXVkaW8uaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9tc21fYXVkaW8uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWVkNTkwMS4uMDAwMDAwMAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbXNtX2F1ZGlvLmgKKysrIC9kZXYvbnVsbApAQCAtMSw4NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqKioKLSAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKLSAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCi0gKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKLSAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAotICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCi0gKioqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0jaWZuZGVmIF9fTElOVVhfTVNNX0FVRElPX0gKLSNkZWZpbmUgX19MSU5VWF9NU01fQVVESU9fSAotCi0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgotI2luY2x1ZGUgPGFzbS9zaXplcy5oPgotCi0jZGVmaW5lIEFVRElPX0lPQ1RMX01BR0lDICdhJwotCi0jZGVmaW5lIEFVRElPX1NUQVJUIF9JT1coQVVESU9fSU9DVExfTUFHSUMsIDAsIHVuc2lnbmVkKQotI2RlZmluZSBBVURJT19TVE9QIF9JT1coQVVESU9fSU9DVExfTUFHSUMsIDEsIHVuc2lnbmVkKQotI2RlZmluZSBBVURJT19GTFVTSCBfSU9XKEFVRElPX0lPQ1RMX01BR0lDLCAyLCB1bnNpZ25lZCkKLSNkZWZpbmUgQVVESU9fR0VUX0NPTkZJRyBfSU9SKEFVRElPX0lPQ1RMX01BR0lDLCAzLCB1bnNpZ25lZCkKLSNkZWZpbmUgQVVESU9fU0VUX0NPTkZJRyBfSU9XKEFVRElPX0lPQ1RMX01BR0lDLCA0LCB1bnNpZ25lZCkKLSNkZWZpbmUgQVVESU9fR0VUX1NUQVRTIF9JT1IoQVVESU9fSU9DVExfTUFHSUMsIDUsIHVuc2lnbmVkKQotI2RlZmluZSBBVURJT19FTkFCTEVfQVVEUFAgX0lPVyhBVURJT19JT0NUTF9NQUdJQywgNiwgdW5zaWduZWQpCi0jZGVmaW5lIEFVRElPX1NFVF9BRFJDIF9JT1coQVVESU9fSU9DVExfTUFHSUMsIDcsIHVuc2lnbmVkKQotI2RlZmluZSBBVURJT19TRVRfRVEgX0lPVyhBVURJT19JT0NUTF9NQUdJQywgOCwgdW5zaWduZWQpCi0jZGVmaW5lIEFVRElPX1NFVF9SWF9JSVIgX0lPVyhBVURJT19JT0NUTF9NQUdJQywgOSwgdW5zaWduZWQpCi0jZGVmaW5lIEFVRElPX1NFVF9WT0xVTUUgX0lPVyhBVURJT19JT0NUTF9NQUdJQywgMTAsIHVuc2lnbmVkKQotI2RlZmluZSBBVURJT19FTkFCTEVfQVVEUFJFIF9JT1coQVVESU9fSU9DVExfTUFHSUMsIDExLCB1bnNpZ25lZCkKLSNkZWZpbmUgQVVESU9fU0VUX0FHQyBfSU9XKEFVRElPX0lPQ1RMX01BR0lDLCAxMiwgdW5zaWduZWQpCi0jZGVmaW5lIEFVRElPX1NFVF9OUyBfSU9XKEFVRElPX0lPQ1RMX01BR0lDLCAxMywgdW5zaWduZWQpCi0jZGVmaW5lIEFVRElPX1NFVF9UWF9JSVIgX0lPVyhBVURJT19JT0NUTF9NQUdJQywgMTQsIHVuc2lnbmVkKQotCi1zdHJ1Y3QgbXNtX2F1ZGlvX2NvbmZpZyB7Ci0gdWludDMyX3QgYnVmZmVyX3NpemU7Ci0gdWludDMyX3QgYnVmZmVyX2NvdW50OwotIHVpbnQzMl90IGNoYW5uZWxfY291bnQ7Ci0gdWludDMyX3Qgc2FtcGxlX3JhdGU7Ci0gdWludDMyX3QgdHlwZTsKLSB1aW50MzJfdCB1bnVzZWRbM107Ci19OwotCi1zdHJ1Y3QgbXNtX2F1ZGlvX3N0YXRzIHsKLSB1aW50MzJfdCBieXRlX2NvdW50OwotIHVpbnQzMl90IHNhbXBsZV9jb3VudDsKLSB1aW50MzJfdCB1bnVzZWRbMl07Ci19OwotCi0jZGVmaW5lIFNORF9JT0NUTF9NQUdJQyAncycKLQotI2RlZmluZSBTTkRfTVVURV9VTk1VVEVEIDAKLSNkZWZpbmUgU05EX01VVEVfTVVURUQgMQotCi1zdHJ1Y3QgbXNtX3NuZF9kZXZpY2VfY29uZmlnIHsKLSB1aW50MzJfdCBkZXZpY2U7Ci0gdWludDMyX3QgZWFyX211dGU7Ci0gdWludDMyX3QgbWljX211dGU7Ci19OwotCi0jZGVmaW5lIFNORF9TRVRfREVWSUNFIF9JT1coU05EX0lPQ1RMX01BR0lDLCAyLCBzdHJ1Y3QgbXNtX2RldmljZV9jb25maWcgKikKLQotI2RlZmluZSBTTkRfTUVUSE9EX1ZPSUNFIDAKLQotc3RydWN0IG1zbV9zbmRfdm9sdW1lX2NvbmZpZyB7Ci0gdWludDMyX3QgZGV2aWNlOwotIHVpbnQzMl90IG1ldGhvZDsKLSB1aW50MzJfdCB2b2x1bWU7Ci19OwotCi0jZGVmaW5lIFNORF9TRVRfVk9MVU1FIF9JT1coU05EX0lPQ1RMX01BR0lDLCAzLCBzdHJ1Y3QgbXNtX3NuZF92b2x1bWVfY29uZmlnICopCi0KLSNkZWZpbmUgU05EX0dFVF9OVU1fRU5EUE9JTlRTIF9JT1IoU05EX0lPQ1RMX01BR0lDLCA0LCB1bnNpZ25lZCAqKQotCi1zdHJ1Y3QgbXNtX3NuZF9lbmRwb2ludCB7Ci0gaW50IGlkOwotIGNoYXIgbmFtZVs2NF07Ci19OwotCi0jZGVmaW5lIFNORF9HRVRfRU5EUE9JTlQgX0lPV1IoU05EX0lPQ1RMX01BR0lDLCA1LCBzdHJ1Y3QgbXNtX3NuZF9lbmRwb2ludCAqKQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9tc21faHczZC5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L21zbV9odzNkLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNkMDUxMDYuLjAwMDAwMDAKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L21zbV9odzNkLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqKioKLSAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKLSAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCi0gKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKLSAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAotICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCi0gKioqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0jaWZuZGVmIF9NU01fSFczRF9IXwotI2RlZmluZSBfTVNNX0hXM0RfSF8KLQotI2luY2x1ZGUgPGxpbnV4L2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KLQotc3RydWN0IGh3M2RfcmVnaW9uOwotCi0jZGVmaW5lIEhXM0RfSU9DVExfTUFHSUMgJ2gnCi0jZGVmaW5lIEhXM0RfV0FJVF9GT1JfUkVWT0tFIF9JTyhIVzNEX0lPQ1RMX01BR0lDLCAweDgwKQotI2RlZmluZSBIVzNEX1dBSVRfRk9SX0lOVEVSUlVQVCBfSU8oSFczRF9JT0NUTF9NQUdJQywgMHg4MSkKLSNkZWZpbmUgSFczRF9HRVRfUkVHSU9OUyAgIF9JT1IoSFczRF9JT0NUTF9NQUdJQywgMHg4Miwgc3RydWN0IGh3M2RfcmVnaW9uICopCi0KLSNkZWZpbmUgSFczRF9SRUdJT05fT0ZGU0VUKGlkKSAoKCgodWludDMyX3QpKGlkKSkgJiAweGYpIDw8IDI4KQotI2RlZmluZSBIVzNEX1JFR0lPTl9JRChhZGRyKSAoKCh1aW50MzJfdCkoYWRkcikgPj4gMjgpICYgMHhmKQotI2RlZmluZSBIVzNEX09GRlNFVF9JTl9SRUdJT04oYWRkcikgKCh1aW50MzJfdCkoYWRkcikgJiB+KDB4ZlVMIDw8IDI4KSkKLQotZW51bSB7Ci0gSFczRF9FQkkgPSAwLAotIEhXM0RfU01JID0gMSwKLSBIVzNEX1JFR1MgPSAyLAotCi0gSFczRF9OVU1fUkVHSU9OUyA9IEhXM0RfUkVHUyArIDEsCi19OwotCi1zdHJ1Y3QgaHczZF9yZWdpb24gewotIHVuc2lnbmVkIGxvbmcgcGh5czsKLSB1bnNpZ25lZCBsb25nIG1hcF9vZmZzZXQ7Ci0gdW5zaWduZWQgbG9uZyBsZW47Ci19OwotCi0jZW5kaWYKLQpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L21zbV9rZ3NsLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbXNtX2tnc2wuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjU0MzUyMi4uMDAwMDAwMAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbXNtX2tnc2wuaAorKysgL2Rldi9udWxsCkBAIC0xLDIwNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqKioKLSAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKLSAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCi0gKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKLSAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAotICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCi0gKioqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0jaWZuZGVmIF9NU01fS0dTTF9ICi0jZGVmaW5lIF9NU01fS0dTTF9ICi0KLSNkZWZpbmUgS0dTTF9DT05URVhUX1NBVkVfR01FTSAxCi0jZGVmaW5lIEtHU0xfQ09OVEVYVF9OT19HTUVNX0FMTE9DIDIKLQotI2RlZmluZSBLR1NMX0ZMQUdTX05PUk1BTE1PREUgMHgwMDAwMDAwMAotI2RlZmluZSBLR1NMX0ZMQUdTX1NBRkVNT0RFIDB4MDAwMDAwMDEKLSNkZWZpbmUgS0dTTF9GTEFHU19JTklUSUFMSVpFRDAgMHgwMDAwMDAwMgotI2RlZmluZSBLR1NMX0ZMQUdTX0lOSVRJQUxJWkVEIDB4MDAwMDAwMDQKLSNkZWZpbmUgS0dTTF9GTEFHU19TVEFSVEVEIDB4MDAwMDAwMDgKLSNkZWZpbmUgS0dTTF9GTEFHU19BQ1RJVkUgMHgwMDAwMDAxMAotI2RlZmluZSBLR1NMX0ZMQUdTX1JFU0VSVkVEMCAweDAwMDAwMDIwCi0jZGVmaW5lIEtHU0xfRkxBR1NfUkVTRVJWRUQxIDB4MDAwMDAwNDAKLSNkZWZpbmUgS0dTTF9GTEFHU19SRVNFUlZFRDIgMHgwMDAwMDA4MAotCi1lbnVtIGtnc2xfZGV2aWNlaWQgewotIEtHU0xfREVWSUNFX0FOWSA9IDB4MDAwMDAwMDAsCi0gS0dTTF9ERVZJQ0VfWUFNQVRPID0gMHgwMDAwMDAwMSwKLSBLR1NMX0RFVklDRV9HMTIgPSAweDAwMDAwMDAyLAotIEtHU0xfREVWSUNFX01BWCA9IDB4MDAwMDAwMDIKLX07Ci0KLXN0cnVjdCBrZ3NsX2RldmluZm8gewotCi0gdW5zaWduZWQgaW50IGRldmljZV9pZDsKLQotIHVuc2lnbmVkIGludCBjaGlwX2lkOwotIHVuc2lnbmVkIGludCBtbXVfZW5hYmxlZDsKLSB1bnNpZ25lZCBpbnQgZ21lbV9ncHViYXNlYWRkcjsKLQotIHVuc2lnbmVkIGludCBnbWVtX2hvc3RiYXNlYWRkcjsKLSB1bnNpZ25lZCBpbnQgZ21lbV9zaXplYnl0ZXM7Ci19OwotCi1zdHJ1Y3Qga2dzbF9kZXZtZW1zdG9yZSB7Ci0gdm9sYXRpbGUgdW5zaWduZWQgaW50IHNvcHRpbWVzdGFtcDsKLSB1bnNpZ25lZCBpbnQgc2J6OwotIHZvbGF0aWxlIHVuc2lnbmVkIGludCBlb3B0aW1lc3RhbXA7Ci0gdW5zaWduZWQgaW50IHNiejI7Ci0gdm9sYXRpbGUgdW5zaWduZWQgaW50IHRzX2NtcF9lbmFibGU7Ci0gdW5zaWduZWQgaW50IHNiejM7Ci0gdm9sYXRpbGUgdW5zaWduZWQgaW50IHJlZl93YWl0X3RzOwotIHVuc2lnbmVkIGludCBzYno0OwotfTsKLQotI2RlZmluZSBLR1NMX0RFVklDRV9NRU1TVE9SRV9PRkZTRVQoZmllbGQpICAgb2Zmc2V0b2Yoc3RydWN0IGtnc2xfZGV2bWVtc3RvcmUsIGZpZWxkKQotCi1lbnVtIGtnc2xfdGltZXN0YW1wX3R5cGUgewotIEtHU0xfVElNRVNUQU1QX0NPTlNVTUVEID0gMHgwMDAwMDAwMSwKLSBLR1NMX1RJTUVTVEFNUF9SRVRJUkVEID0gMHgwMDAwMDAwMiwKLSBLR1NMX1RJTUVTVEFNUF9NQVggPSAweDAwMDAwMDAyLAotfTsKLQotZW51bSBrZ3NsX3Byb3BlcnR5X3R5cGUgewotIEtHU0xfUFJPUF9ERVZJQ0VfSU5GTyA9IDB4MDAwMDAwMDEsCi0gS0dTTF9QUk9QX0RFVklDRV9TSEFET1cgPSAweDAwMDAwMDAyLAotIEtHU0xfUFJPUF9ERVZJQ0VfUE9XRVIgPSAweDAwMDAwMDAzLAotIEtHU0xfUFJPUF9TSE1FTSA9IDB4MDAwMDAwMDQsCi0gS0dTTF9QUk9QX1NITUVNX0FQRVJUVVJFUyA9IDB4MDAwMDAwMDUsCi0gS0dTTF9QUk9QX01NVV9FTkFCTEUgPSAweDAwMDAwMDA2LAotIEtHU0xfUFJPUF9JTlRFUlJVUFRfV0FJVFMgPSAweDAwMDAwMDA3LAotfTsKLQotc3RydWN0IGtnc2xfc2hhZG93cHJvcCB7Ci0gdW5zaWduZWQgaW50IGdwdWFkZHI7Ci0gdW5zaWduZWQgaW50IHNpemU7Ci0gdW5zaWduZWQgaW50IGZsYWdzOwotfTsKLQotI2RlZmluZSBLR1NMX0lPQ19UWVBFIDB4MDkKLQotc3RydWN0IGtnc2xfZGV2aWNlX2dldHByb3BlcnR5IHsKLSB1bnNpZ25lZCBpbnQgdHlwZTsKLSB2b2lkICp2YWx1ZTsKLSB1bnNpZ25lZCBpbnQgc2l6ZWJ5dGVzOwotfTsKLQotI2RlZmluZSBJT0NUTF9LR1NMX0RFVklDRV9HRVRQUk9QRVJUWSAgIF9JT1dSKEtHU0xfSU9DX1RZUEUsIDB4Miwgc3RydWN0IGtnc2xfZGV2aWNlX2dldHByb3BlcnR5KQotCi1zdHJ1Y3Qga2dzbF9kZXZpY2VfcmVncmVhZCB7Ci0gdW5zaWduZWQgaW50IG9mZnNldHdvcmRzOwotIHVuc2lnbmVkIGludCB2YWx1ZTsKLX07Ci0KLSNkZWZpbmUgSU9DVExfS0dTTF9ERVZJQ0VfUkVHUkVBRCAgIF9JT1dSKEtHU0xfSU9DX1RZUEUsIDB4Mywgc3RydWN0IGtnc2xfZGV2aWNlX3JlZ3JlYWQpCi0KLXN0cnVjdCBrZ3NsX2RldmljZV93YWl0dGltZXN0YW1wIHsKLSB1bnNpZ25lZCBpbnQgdGltZXN0YW1wOwotIHVuc2lnbmVkIGludCB0aW1lb3V0OwotfTsKLQotI2RlZmluZSBJT0NUTF9LR1NMX0RFVklDRV9XQUlUVElNRVNUQU1QICAgX0lPVyhLR1NMX0lPQ19UWVBFLCAweDYsIHN0cnVjdCBrZ3NsX2RldmljZV93YWl0dGltZXN0YW1wKQotCi1zdHJ1Y3Qga2dzbF9yaW5nYnVmZmVyX2lzc3VlaWJjbWRzIHsKLSB1bnNpZ25lZCBpbnQgZHJhd2N0eHRfaWQ7Ci0gdW5zaWduZWQgaW50IGliYWRkcjsKLSB1bnNpZ25lZCBpbnQgc2l6ZWR3b3JkczsKLSB1bnNpZ25lZCBpbnQgdGltZXN0YW1wOwotIHVuc2lnbmVkIGludCBmbGFnczsKLX07Ci0KLSNkZWZpbmUgSU9DVExfS0dTTF9SSU5HQlVGRkVSX0lTU1VFSUJDTURTICAgX0lPV1IoS0dTTF9JT0NfVFlQRSwgMHgxMCwgc3RydWN0IGtnc2xfcmluZ2J1ZmZlcl9pc3N1ZWliY21kcykKLQotc3RydWN0IGtnc2xfY21kc3RyZWFtX3JlYWR0aW1lc3RhbXAgewotIHVuc2lnbmVkIGludCB0eXBlOwotIHVuc2lnbmVkIGludCB0aW1lc3RhbXA7Ci19OwotCi0jZGVmaW5lIElPQ1RMX0tHU0xfQ01EU1RSRUFNX1JFQURUSU1FU1RBTVAgICBfSU9SKEtHU0xfSU9DX1RZUEUsIDB4MTEsIHN0cnVjdCBrZ3NsX2NtZHN0cmVhbV9yZWFkdGltZXN0YW1wKQotCi1zdHJ1Y3Qga2dzbF9jbWRzdHJlYW1fZnJlZW1lbW9udGltZXN0YW1wIHsKLSB1bnNpZ25lZCBpbnQgZ3B1YWRkcjsKLSB1bnNpZ25lZCBpbnQgdHlwZTsKLSB1bnNpZ25lZCBpbnQgdGltZXN0YW1wOwotfTsKLQotI2RlZmluZSBJT0NUTF9LR1NMX0NNRFNUUkVBTV9GUkVFTUVNT05USU1FU1RBTVAgICBfSU9SKEtHU0xfSU9DX1RZUEUsIDB4MTIsIHN0cnVjdCBrZ3NsX2NtZHN0cmVhbV9mcmVlbWVtb250aW1lc3RhbXApCi0KLXN0cnVjdCBrZ3NsX2RyYXdjdHh0X2NyZWF0ZSB7Ci0gdW5zaWduZWQgaW50IGZsYWdzOwotIHVuc2lnbmVkIGludCBkcmF3Y3R4dF9pZDsKLX07Ci0KLSNkZWZpbmUgSU9DVExfS0dTTF9EUkFXQ1RYVF9DUkVBVEUgICBfSU9XUihLR1NMX0lPQ19UWVBFLCAweDEzLCBzdHJ1Y3Qga2dzbF9kcmF3Y3R4dF9jcmVhdGUpCi0KLXN0cnVjdCBrZ3NsX2RyYXdjdHh0X2Rlc3Ryb3kgewotIHVuc2lnbmVkIGludCBkcmF3Y3R4dF9pZDsKLX07Ci0KLSNkZWZpbmUgSU9DVExfS0dTTF9EUkFXQ1RYVF9ERVNUUk9ZICAgX0lPVyhLR1NMX0lPQ19UWVBFLCAweDE0LCBzdHJ1Y3Qga2dzbF9kcmF3Y3R4dF9kZXN0cm95KQotCi1zdHJ1Y3Qga2dzbF9zaGFyZWRtZW1fZnJvbV9wbWVtIHsKLSBpbnQgcG1lbV9mZDsKLSB1bnNpZ25lZCBpbnQgZ3B1YWRkcjsKLSB1bnNpZ25lZCBpbnQgbGVuOwotIHVuc2lnbmVkIGludCBvZmZzZXQ7Ci19OwotCi0jZGVmaW5lIElPQ1RMX0tHU0xfU0hBUkVETUVNX0ZST01fUE1FTSAgIF9JT1dSKEtHU0xfSU9DX1RZUEUsIDB4MjAsIHN0cnVjdCBrZ3NsX3NoYXJlZG1lbV9mcm9tX3BtZW0pCi0KLXN0cnVjdCBrZ3NsX3NoYXJlZG1lbV9mcmVlIHsKLSB1bnNpZ25lZCBpbnQgZ3B1YWRkcjsKLX07Ci0KLSNkZWZpbmUgSU9DVExfS0dTTF9TSEFSRURNRU1fRlJFRSAgIF9JT1coS0dTTF9JT0NfVFlQRSwgMHgyMSwgc3RydWN0IGtnc2xfc2hhcmVkbWVtX2ZyZWUpCi0KLXN0cnVjdCBrZ3NsX2dtZW1fZGVzYyB7Ci0gdW5zaWduZWQgaW50IHg7Ci0gdW5zaWduZWQgaW50IHk7Ci0gdW5zaWduZWQgaW50IHdpZHRoOwotIHVuc2lnbmVkIGludCBoZWlnaHQ7Ci0gdW5zaWduZWQgaW50IHBpdGNoOwotfTsKLQotc3RydWN0IGtnc2xfYnVmZmVyX2Rlc2MgewotIHZvaWQgKmhvc3RwdHI7Ci0gdW5zaWduZWQgaW50IGdwdWFkZHI7Ci0gaW50IHNpemU7Ci0gdW5zaWduZWQgaW50IGZvcm1hdDsKLSB1bnNpZ25lZCBpbnQgcGl0Y2g7Ci0gdW5zaWduZWQgaW50IGVuYWJsZWQ7Ci19OwotCi1zdHJ1Y3Qga2dzbF9iaW5kX2dtZW1fc2hhZG93IHsKLSB1bnNpZ25lZCBpbnQgZHJhd2N0eHRfaWQ7Ci0gc3RydWN0IGtnc2xfZ21lbV9kZXNjIGdtZW1fZGVzYzsKLSB1bnNpZ25lZCBpbnQgc2hhZG93X3g7Ci0gdW5zaWduZWQgaW50IHNoYWRvd195OwotIHN0cnVjdCBrZ3NsX2J1ZmZlcl9kZXNjIHNoYWRvd19idWZmZXI7Ci0gdW5zaWduZWQgaW50IGJ1ZmZlcl9pZDsKLX07Ci0KLSNkZWZpbmUgSU9DVExfS0dTTF9EUkFXQ1RYVF9CSU5EX0dNRU1fU0hBRE9XICAgX0lPVyhLR1NMX0lPQ19UWVBFLCAweDIyLCBzdHJ1Y3Qga2dzbF9iaW5kX2dtZW1fc2hhZG93KQotCi1zdHJ1Y3Qga2dzbF9zaGFyZWRtZW1fZnJvbV92bWFsbG9jIHsKLSB1bnNpZ25lZCBpbnQgZ3B1YWRkcjsKLSB1bnNpZ25lZCBpbnQgaG9zdHB0cjsKLQotIGludCBmb3JjZV9ub19sb3dfd2F0ZXJtYXJrOwotfTsKLQotI2RlZmluZSBJT0NUTF9LR1NMX1NIQVJFRE1FTV9GUk9NX1ZNQUxMT0MgICBfSU9XUihLR1NMX0lPQ19UWVBFLCAweDIzLCBzdHJ1Y3Qga2dzbF9zaGFyZWRtZW1fZnJvbV92bWFsbG9jKQotCi0jZGVmaW5lIElPQ1RMX0tHU0xfU0hBUkVETUVNX0ZMVVNIX0NBQ0hFICAgX0lPVyhLR1NMX0lPQ19UWVBFLCAweDI0LCBzdHJ1Y3Qga2dzbF9zaGFyZWRtZW1fZnJlZSkKLQotc3RydWN0IGtnc2xfZHJhd2N0eHRfc2V0X2Jpbl9iYXNlX29mZnNldCB7Ci0gdW5zaWduZWQgaW50IGRyYXdjdHh0X2lkOwotIHVuc2lnbmVkIGludCBvZmZzZXQ7Ci19OwotCi0jZGVmaW5lIElPQ1RMX0tHU0xfRFJBV0NUWFRfU0VUX0JJTl9CQVNFX09GRlNFVCAgIF9JT1coS0dTTF9JT0NfVFlQRSwgMHgyNSwgc3RydWN0IGtnc2xfZHJhd2N0eHRfc2V0X2Jpbl9iYXNlX29mZnNldCkKLQotI2VuZGlmCi0KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9tc21fbWRwLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbXNtX21kcC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMzU1MjE4Li4wMDAwMDAwCi0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9tc21fbWRwLmgKKysrIC9kZXYvbnVsbApAQCAtMSw4NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqKioKLSAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKLSAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCi0gKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKLSAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAotICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCi0gKioqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0jaWZuZGVmIF9NU01fTURQX0hfCi0jZGVmaW5lIF9NU01fTURQX0hfCi0KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotCi0jZGVmaW5lIE1TTUZCX0lPQ1RMX01BR0lDICdtJwotI2RlZmluZSBNU01GQl9HUlBfRElTUCBfSU9XKE1TTUZCX0lPQ1RMX01BR0lDLCAxLCB1bnNpZ25lZCBpbnQpCi0jZGVmaW5lIE1TTUZCX0JMSVQgX0lPVyhNU01GQl9JT0NUTF9NQUdJQywgMiwgdW5zaWduZWQgaW50KQotCi1lbnVtIHsKLSBNRFBfUkdCXzU2NSwKLSBNRFBfWFJHQl84ODg4LAotIE1EUF9ZX0NCQ1JfSDJWMiwKLSBNRFBfQVJHQl84ODg4LAotIE1EUF9SR0JfODg4LAotIE1EUF9ZX0NSQ0JfSDJWMiwKLSBNRFBfWUNSWUNCX0gyVjEsCi0gTURQX1lfQ1JDQl9IMlYxLAotIE1EUF9ZX0NCQ1JfSDJWMSwKLSBNRFBfUkdCQV84ODg4LAotIE1EUF9CR1JBXzg4ODgsCi0gTURQX1JHQlhfODg4OCwKLSBNRFBfSU1HVFlQRV9MSU1JVAotfTsKLQotZW51bSB7Ci0gUE1FTV9JTUcsCi0gRkJfSU1HLAotfTsKLQotI2RlZmluZSBNRFBfUk9UX05PUCAwCi0jZGVmaW5lIE1EUF9GTElQX0xSIDB4MQotI2RlZmluZSBNRFBfRkxJUF9VRCAweDIKLSNkZWZpbmUgTURQX1JPVF85MCAweDQKLSNkZWZpbmUgTURQX1JPVF8xODAgKE1EUF9GTElQX1VEfE1EUF9GTElQX0xSKQotI2RlZmluZSBNRFBfUk9UXzI3MCAoTURQX1JPVF85MHxNRFBfRkxJUF9VRHxNRFBfRkxJUF9MUikKLSNkZWZpbmUgTURQX0RJVEhFUiAweDgKLSNkZWZpbmUgTURQX0JMVVIgMHgxMAotI2RlZmluZSBNRFBfQkxFTkRfRkdfUFJFTVVMVCAweDIwMDAwCi0KLSNkZWZpbmUgTURQX1RSQU5TUF9OT1AgMHhmZmZmZmZmZgotI2RlZmluZSBNRFBfQUxQSEFfTk9QIDB4ZmYKLQotc3RydWN0IG1kcF9yZWN0IHsKLSB1aW50MzJfdCB4OwotIHVpbnQzMl90IHk7Ci0gdWludDMyX3QgdzsKLSB1aW50MzJfdCBoOwotfTsKLQotc3RydWN0IG1kcF9pbWcgewotIHVpbnQzMl90IHdpZHRoOwotIHVpbnQzMl90IGhlaWdodDsKLSB1aW50MzJfdCBmb3JtYXQ7Ci0gdWludDMyX3Qgb2Zmc2V0OwotIGludCBtZW1vcnlfaWQ7Ci19OwotCi1zdHJ1Y3QgbWRwX2JsaXRfcmVxIHsKLSBzdHJ1Y3QgbWRwX2ltZyBzcmM7Ci0gc3RydWN0IG1kcF9pbWcgZHN0OwotIHN0cnVjdCBtZHBfcmVjdCBzcmNfcmVjdDsKLSBzdHJ1Y3QgbWRwX3JlY3QgZHN0X3JlY3Q7Ci0gdWludDMyX3QgYWxwaGE7Ci0gdWludDMyX3QgdHJhbnNwX21hc2s7Ci0gdWludDMyX3QgZmxhZ3M7Ci19OwotCi1zdHJ1Y3QgbWRwX2JsaXRfcmVxX2xpc3QgewotIHVpbnQzMl90IGNvdW50OwotIHN0cnVjdCBtZHBfYmxpdF9yZXEgcmVxW107Ci19OwotCi0jZW5kaWYKLQpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L21zbV9xNnZkZWMuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9tc21fcTZ2ZGVjLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAxODJiZmIuLjAwMDAwMDAKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L21zbV9xNnZkZWMuaAorKysgL2Rldi9udWxsCkBAIC0xLDIxMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqKioKLSAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKLSAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCi0gKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKLSAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAotICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCi0gKioqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0jaWZuZGVmIF9NU01fVkRFQ19IXwotI2RlZmluZSBfTVNNX1ZERUNfSF8KLQotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0KLSNkZWZpbmUgVkRFQ19JT0NUTF9NQUdJQyAndicKLQotI2RlZmluZSBWREVDX0lPQ1RMX0lOSVRJQUxJWkUgX0lPV1IoVkRFQ19JT0NUTF9NQUdJQywgMSwgc3RydWN0IHZkZWNfaW5pdCkKLSNkZWZpbmUgVkRFQ19JT0NUTF9TRVRCVUZGRVJTIF9JT1coVkRFQ19JT0NUTF9NQUdJQywgMiwgc3RydWN0IHZkZWNfYnVmZmVyKQotI2RlZmluZSBWREVDX0lPQ1RMX1FVRVVFIF9JT1dSKFZERUNfSU9DVExfTUFHSUMsIDMsICAgc3RydWN0IHZkZWNfaW5wdXRfYnVmKQotI2RlZmluZSBWREVDX0lPQ1RMX1JFVVNFRlJBTUVCVUZGRVIgX0lPVyhWREVDX0lPQ1RMX01BR0lDLCA0LCB1bnNpZ25lZCBpbnQpCi0jZGVmaW5lIFZERUNfSU9DVExfRkxVU0ggX0lPVyhWREVDX0lPQ1RMX01BR0lDLCA1LCB1bnNpZ25lZCBpbnQpCi0jZGVmaW5lIFZERUNfSU9DVExfRU9TIF9JTyhWREVDX0lPQ1RMX01BR0lDLCA2KQotI2RlZmluZSBWREVDX0lPQ1RMX0dFVE1TRyBfSU9SKFZERUNfSU9DVExfTUFHSUMsIDcsIHN0cnVjdCB2ZGVjX21zZykKLSNkZWZpbmUgVkRFQ19JT0NUTF9DTE9TRSBfSU8oVkRFQ19JT0NUTF9NQUdJQywgOCkKLSNkZWZpbmUgVkRFQ19JT0NUTF9GUkVFQlVGRkVSUyBfSU9XKFZERUNfSU9DVExfTUFHSUMsIDksIHN0cnVjdCB2ZGVjX2J1Zl9pbmZvKQotI2RlZmluZSBWREVDX0lPQ1RMX0dFVERFQ0FUVFJJQlVURVMgX0lPUihWREVDX0lPQ1RMX01BR0lDLCAxMCwgICBzdHJ1Y3QgdmRlY19kZWNfYXR0cmlidXRlcykKLQotZW51bSB7Ci0gVkRFQ19GUkFNRV9ERUNPREVfT0ssCi0gVkRFQ19GUkFNRV9ERUNPREVfRVJSLAotIFZERUNfRkFUQUxfRVJSLAotIFZERUNfRkxVU0hfRklOSVNILAotIFZERUNfRU9TLAotIFZERUNfRlJBTUVfRkxVU0gsCi0gVkRFQ19TVFJFQU1fU1dJVENILAotIFZERUNfU1VTUEVORF9GSU5JU0gsCi0gVkRFQ19CVUZGRVJfQ09OU1VNRUQKLX07Ci0KLWVudW0gewotIFZERUNfRkxVU0hfSU5QVVQsCi0gVkRFQ19GTFVTSF9PVVRQVVQsCi0gVkRFQ19GTFVTSF9BTEwKLX07Ci0KLWVudW0gewotIFZERUNfQlVGRkVSX1RZUEVfSU5QVVQsCi0gVkRFQ19CVUZGRVJfVFlQRV9PVVRQVVQsCi0gVkRFQ19CVUZGRVJfVFlQRV9JTlRFUk5BTDEsCi0gVkRFQ19CVUZGRVJfVFlQRV9JTlRFUk5BTDIsCi19OwotCi1lbnVtIHsKLSBWREVDX1FVRVVFX1NVQ0NFU1MsCi0gVkRFQ19RVUVVRV9GQUlMRUQsCi0gVkRFQ19RVUVVRV9CQURTVEFURSwKLX07Ci0KLXN0cnVjdCB2ZGVjX2lucHV0X2J1Zl9pbmZvIHsKLSB1MzIgb2Zmc2V0OwotIHUzMiBkYXRhOwotIHUzMiBzaXplOwotIGludCB0aW1lc3RhbXBfbG87Ci0gaW50IHRpbWVzdGFtcF9oaTsKLSBpbnQgYXZzeW5jX3N0YXRlOwotIHUzMiBmbGFnczsKLX07Ci0KLXN0cnVjdCB2ZGVjX2J1Zl9kZXNjIHsKLSB1MzIgYnVmc2l6ZTsKLSB1MzIgbnVtX21pbl9idWZmZXJzOwotIHUzMiBudW1fbWF4X2J1ZmZlcnM7Ci19OwotCi1zdHJ1Y3QgdmRlY19idWZfcmVxIHsKLSB1MzIgbWF4X2lucHV0X3F1ZXVlX3NpemU7Ci0gc3RydWN0IHZkZWNfYnVmX2Rlc2MgaW5wdXQ7Ci0gc3RydWN0IHZkZWNfYnVmX2Rlc2Mgb3V0cHV0OwotIHN0cnVjdCB2ZGVjX2J1Zl9kZXNjIGRlY19yZXExOwotIHN0cnVjdCB2ZGVjX2J1Zl9kZXNjIGRlY19yZXEyOwotfTsKLQotc3RydWN0IHZkZWNfcmVnaW9uX2luZm8gewotIHUzMiBzcmNfaWQ7Ci0gdTMyIG9mZnNldDsKLSB1MzIgc2l6ZTsKLX07Ci0KLXN0cnVjdCB2ZGVjX2NvbmZpZyB7Ci0gdTMyIGZvdXJjYzsKLSB1MzIgd2lkdGg7Ci0gdTMyIGhlaWdodDsKLSB1MzIgb3JkZXI7Ci0gdTMyIG5vdGlmeV9lbmFibGU7Ci0gdTMyIHZjMV9yb3diYXNlOwotIHUzMiBoMjY0X3N0YXJ0Y29kZV9kZXRlY3Q7Ci0gdTMyIGgyNjRfbmFsX2xlbl9zaXplOwotIHUzMiBwb3N0cHJvY19mbGFnOwotIHUzMiBmcnVjX2VuYWJsZTsKLSB1MzIgcmVzZXJ2ZWQ7Ci19OwotCi1zdHJ1Y3QgdmRlY192YzFfcGFuc2Nhbl9yZWdpb25zIHsKLSBpbnQgbnVtOwotIGludCB3aWR0aFs0XTsKLSBpbnQgaGVpZ2h0WzRdOwotIGludCB4b2Zmc2V0WzRdOwotIGludCB5b2Zmc2V0WzRdOwotfTsKLQotc3RydWN0IHZkZWNfY3JvcHBpbmdfd2luZG93IHsKLSB1MzIgeDE7Ci0gdTMyIHkxOwotIHUzMiB4MjsKLSB1MzIgeTI7Ci19OwotCi1zdHJ1Y3QgdmRlY19mcmFtZV9pbmZvIHsKLSB1MzIgc3RhdHVzOwotIHUzMiBvZmZzZXQ7Ci0gdTMyIGRhdGExOwotIHUzMiBkYXRhMjsKLSBpbnQgdGltZXN0YW1wX2xvOwotIGludCB0aW1lc3RhbXBfaGk7Ci0gaW50IGNhbF90aW1lc3RhbXBfbG87Ci0gaW50IGNhbF90aW1lc3RhbXBfaGk7Ci0gdTMyIGRlY193aWR0aDsKLSB1MzIgZGVjX2hlaWdodDsKLSBzdHJ1Y3QgdmRlY19jcm9wcGluZ193aW5kb3cgY3dpbjsKLSB1MzIgcGljdHVyZV90eXBlWzJdOwotIHUzMiBwaWN0dXJlX2Zvcm1hdDsKLSB1MzIgdmMxX3JhbmdlWTsKLSB1MzIgdmMxX3JhbmdlVVY7Ci0gdTMyIHBpY3R1cmVfcmVzb2x1dGlvbjsKLSB1MzIgZnJhbWVfZGlzcF9yZXBlYXQ7Ci0gdTMyIHJlcGVhdF9maXJzdF9maWVsZDsKLSB1MzIgdG9wX2ZpZWxkX2ZpcnN0OwotIHUzMiBpbnRlcmZyYW1lX2ludGVycDsKLSBzdHJ1Y3QgdmRlY192YzFfcGFuc2Nhbl9yZWdpb25zIHBhbnNjYW47Ci0gdTMyIGNvbmNlYWxlZF9tYWNibGtfbnVtOwotIHUzMiBmbGFnczsKLSB1MzIgcGVyZm9ybWFuY2Vfc3RhdHM7Ci0gdTMyIGRhdGEzOwotfTsKLQotc3RydWN0IHZkZWNfYnVmX2luZm8gewotIHUzMiBidWZfdHlwZTsKLSBzdHJ1Y3QgdmRlY19yZWdpb25faW5mbyByZWdpb247Ci0gdTMyIG51bV9idWY7Ci0gdTMyIGlzbGFzdDsKLX07Ci0KLXN0cnVjdCB2ZGVjX2J1ZmZlciB7Ci0gdTMyIHBtZW1faWQ7Ci0gc3RydWN0IHZkZWNfYnVmX2luZm8gYnVmOwotfTsKLQotc3RydWN0IHZkZWNfc2VxdWVuY2UgewotIHU4ICpoZWFkZXI7Ci0gdTMyIGxlbjsKLX07Ci0KLXN0cnVjdCB2ZGVjX2NvbmZpZ19zcHMgewotIHN0cnVjdCB2ZGVjX2NvbmZpZyBjZmc7Ci0gc3RydWN0IHZkZWNfc2VxdWVuY2Ugc2VxOwotfTsKLQotI2RlZmluZSBWREVDX01TR19SRVVTRUlOUFVUQlVGRkVSIDEKLSNkZWZpbmUgVkRFQ19NU0dfRlJBTUVET05FIDIKLQotc3RydWN0IHZkZWNfbXNnIHsKLSB1MzIgaWQ7Ci0KLSB1bmlvbiB7Ci0KLSB1MzIgYnVmX2lkOwotCi0gc3RydWN0IHZkZWNfZnJhbWVfaW5mbyB2ZnJfaW5mbzsKLSB9OwotfTsKLQotc3RydWN0IHZkZWNfaW5pdCB7Ci0gc3RydWN0IHZkZWNfY29uZmlnX3NwcyBzcHNfY2ZnOwotIHN0cnVjdCB2ZGVjX2J1Zl9yZXEgKmJ1Zl9yZXE7Ci19OwotCi1zdHJ1Y3QgdmRlY19pbnB1dF9idWYgewotIHUzMiBwbWVtX2lkOwotIHN0cnVjdCB2ZGVjX2lucHV0X2J1Zl9pbmZvIGJ1ZmZlcjsKLSBzdHJ1Y3QgdmRlY19xdWV1ZV9zdGF0dXMgKnF1ZXVlX3N0YXR1czsKLX07Ci0KLXN0cnVjdCB2ZGVjX3F1ZXVlX3N0YXR1cyB7Ci0gdTMyIHN0YXR1czsKLX07Ci0KLXN0cnVjdCB2ZGVjX2RlY19hdHRyaWJ1dGVzIHsKLSB1MzIgZm91cmNjOwotIHUzMiBwcm9maWxlOwotIHUzMiBsZXZlbDsKLSB1MzIgZGVjX3BpY193aWR0aDsKLSB1MzIgZGVjX3BpY19oZWlnaHQ7Ci0gc3RydWN0IHZkZWNfYnVmX2Rlc2MgaW5wdXQ7Ci0gc3RydWN0IHZkZWNfYnVmX2Rlc2Mgb3V0cHV0OwotIHN0cnVjdCB2ZGVjX2J1Zl9kZXNjIGRlY19yZXExOwotIHN0cnVjdCB2ZGVjX2J1Zl9kZXNjIGRlY19yZXEyOwotfTsKLQotI2VuZGlmCi0KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9tc21fcTZ2ZW5jLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbXNtX3E2dmVuYy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCBkYmUxMThhLi4wMDAwMDAwCi0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9tc21fcTZ2ZW5jLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyOTQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKioqCi0gKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCi0gKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bwotICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCi0gKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKLSAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgotICoqKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotI2lmbmRlZiBfTVNNX1ZFTkNfSF8KLSNkZWZpbmUgX01TTV9WRU5DX0hfCi0KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotCi0jZGVmaW5lIFZFTkNfTUFYX1JFQ09OX0JVRkZFUlMgMgotCi0jZGVmaW5lIFZFTkNfRkxBR19FT1MgMHgwMDAwMDAwMQotI2RlZmluZSBWRU5DX0ZMQUdfRU5EX09GX0ZSQU1FIDB4MDAwMDAwMTAKLSNkZWZpbmUgVkVOQ19GTEFHX1NZTkNfRlJBTUUgMHgwMDAwMDAyMAotI2RlZmluZSBWRU5DX0ZMQUdfRVhUUkFfREFUQSAweDAwMDAwMDQwCi0jZGVmaW5lIFZFTkNfRkxBR19DT0RFQ19DT05GSUcgMHgwMDAwMDA4MAotCi1lbnVtIHZlbmNfZmx1c2hfdHlwZSB7Ci0gVkVOQ19GTFVTSF9JTlBVVCwKLSBWRU5DX0ZMVVNIX09VVFBVVCwKLSBWRU5DX0ZMVVNIX0FMTAotfTsKLQotZW51bSB2ZW5jX3N0YXRlX3R5cGUgewotIFZFTkNfU1RBVEVfUEFVU0UgPSAweDEsCi0gVkVOQ19TVEFURV9TVEFSVCA9IDB4MiwKLSBWRU5DX1NUQVRFX1NUT1AgPSAweDQKLX07Ci0KLWVudW0gdmVuY19ldmVudF90eXBlX2VudW0gewotIFZFTkNfRVZFTlRfU1RBUlRfU1RBVFVTLAotIFZFTkNfRVZFTlRfU1RPUF9TVEFUVVMsCi0gVkVOQ19FVkVOVF9TVVNQRU5EX1NUQVRVUywKLSBWRU5DX0VWRU5UX1JFU1VNRV9TVEFUVVMsCi0gVkVOQ19FVkVOVF9GTFVTSF9TVEFUVVMsCi0gVkVOQ19FVkVOVF9SRUxFQVNFX0lOUFVULAotIFZFTkNfRVZFTlRfREVMSVZFUl9PVVRQVVQsCi0gVkVOQ19FVkVOVF9VTktOT1dOX1NUQVRVUwotfTsKLQotZW51bSB2ZW5jX3N0YXR1c19jb2RlIHsKLSBWRU5DX1NUQVRVU19TVUNDRVNTLAotIFZFTkNfU1RBVFVTX0VSUk9SLAotIFZFTkNfU1RBVFVTX0lOVkFMSURfU1RBVEUsCi0gVkVOQ19TVEFUVVNfRkxVU0hJTkcsCi0gVkVOQ19TVEFUVVNfSU5WQUxJRF9QQVJBTSwKLSBWRU5DX1NUQVRVU19DTURfUVVFVUVfRlVMTCwKLSBWRU5DX1NUQVRVU19DUklUSUNBTCwKLSBWRU5DX1NUQVRVU19JTlNVRkZJQ0lFTlRfUkVTT1VSQ0VTLAotIFZFTkNfU1RBVFVTX1RJTUVPVVQKLX07Ci0KLWVudW0gdmVuY19tc2dfY29kZSB7Ci0gVkVOQ19NU0dfSU5ESUNBVElPTiwKLSBWRU5DX01TR19JTlBVVF9CVUZGRVJfRE9ORSwKLSBWRU5DX01TR19PVVRQVVRfQlVGRkVSX0RPTkUsCi0gVkVOQ19NU0dfTkVFRF9PVVRQVVRfQlVGRkVSLAotIFZFTkNfTVNHX0ZMVVNILAotIFZFTkNfTVNHX1NUQVJULAotIFZFTkNfTVNHX1NUT1AsCi0gVkVOQ19NU0dfUEFVU0UsCi0gVkVOQ19NU0dfUkVTVU1FLAotIFZFTkNfTVNHX1NUT1BfUkVBRElOR19NU0cKLX07Ci0KLWVudW0gdmVuY19lcnJvcl9jb2RlIHsKLSBWRU5DX1NfU1VDQ0VTUywKLSBWRU5DX1NfRUZBSUwsCi0gVkVOQ19TX0VGQVRBTCwKLSBWRU5DX1NfRUJBRFBBUkFNLAotIFZFTkNfU19FSU5WQUxTVEFURSwKLSBWRU5DX1NfRU5PU1dSRVMsCi0gVkVOQ19TX0VOT0hXUkVTLAotIFZFTkNfU19FQlVGRlJFUSwKLSBWRU5DX1NfRUlOVkFMQ01ELAotIFZFTkNfU19FVElNRU9VVCwKLSBWRU5DX1NfRU5PUkVBVE1QVCwKLSBWRU5DX1NfRU5PUFJFUkVRLAotIFZFTkNfU19FQ01EUUZVTEwsCi0gVkVOQ19TX0VOT1RTVVBQLAotIFZFTkNfU19FTk9USU1QTCwKLSBWRU5DX1NfRU5PVFBNRU0sCi0gVkVOQ19TX0VGTFVTSEVELAotIFZFTkNfU19FSU5TVUZCVUYsCi0gVkVOQ19TX0VTQU1FU1RBVEUsCi0gVkVOQ19TX0VJTlZBTFRSQU5TCi19OwotCi1lbnVtIHZlbmNfbWVtX3JlZ2lvbl9lbnVtIHsKLSBWRU5DX1BNRU1fRUJJMSwKLSBWRU5DX1BNRU1fU01JCi19OwotCi1zdHJ1Y3QgdmVuY19idWZfdHlwZSB7Ci0gdW5zaWduZWQgaW50IHJlZ2lvbjsKLSB1bnNpZ25lZCBpbnQgcGh5czsKLSB1bnNpZ25lZCBpbnQgc2l6ZTsKLSBpbnQgb2Zmc2V0OwotfTsKLQotc3RydWN0IHZlbmNfcXBfcmFuZ2UgewotIHVuc2lnbmVkIGludCBtaW5fcXA7Ci0gdW5zaWduZWQgaW50IG1heF9xcDsKLX07Ci0KLXN0cnVjdCB2ZW5jX2ZyYW1lX3JhdGUgewotIHVuc2lnbmVkIGludCBmcmFtZV9yYXRlX251bTsKLSB1bnNpZ25lZCBpbnQgZnJhbWVfcmF0ZV9kZW47Ci19OwotCi1zdHJ1Y3QgdmVuY19zbGljZV9pbmZvIHsKLSB1bnNpZ25lZCBpbnQgc2xpY2VfbW9kZTsKLSB1bnNpZ25lZCBpbnQgdW5pdHNfcGVyX3NsaWNlOwotfTsKLQotc3RydWN0IHZlbmNfZXh0cmFfZGF0YSB7Ci0gdW5zaWduZWQgaW50IHNsaWNlX2V4dHJhX2RhdGFfZmxhZzsKLSB1bnNpZ25lZCBpbnQgc2xpY2VfY2xpZW50X2RhdGExOwotIHVuc2lnbmVkIGludCBzbGljZV9jbGllbnRfZGF0YTI7Ci0gdW5zaWduZWQgaW50IHNsaWNlX2NsaWVudF9kYXRhMzsKLSB1bnNpZ25lZCBpbnQgbm9uZV9leHRyYV9kYXRhX2ZsYWc7Ci0gdW5zaWduZWQgaW50IG5vbmVfY2xpZW50X2RhdGExOwotIHVuc2lnbmVkIGludCBub25lX2NsaWVudF9kYXRhMjsKLSB1bnNpZ25lZCBpbnQgbm9uZV9jbGllbnRfZGF0YTM7Ci19OwotCi1zdHJ1Y3QgdmVuY19jb21tb25fY29uZmlnIHsKLSB1bnNpZ25lZCBpbnQgc3RhbmRhcmQ7Ci0gdW5zaWduZWQgaW50IGlucHV0X2ZyYW1lX2hlaWdodDsKLSB1bnNpZ25lZCBpbnQgaW5wdXRfZnJhbWVfd2lkdGg7Ci0gdW5zaWduZWQgaW50IG91dHB1dF9mcmFtZV9oZWlnaHQ7Ci0gdW5zaWduZWQgaW50IG91dHB1dF9mcmFtZV93aWR0aDsKLSB1bnNpZ25lZCBpbnQgcm90YXRpb25fYW5nbGU7Ci0gdW5zaWduZWQgaW50IGludHJhX3BlcmlvZDsKLSB1bnNpZ25lZCBpbnQgcmF0ZV9jb250cm9sOwotIHN0cnVjdCB2ZW5jX2ZyYW1lX3JhdGUgZnJhbWVfcmF0ZTsKLSB1bnNpZ25lZCBpbnQgYml0cmF0ZTsKLSBzdHJ1Y3QgdmVuY19xcF9yYW5nZSBxcF9yYW5nZTsKLSB1bnNpZ25lZCBpbnQgaWZyYW1lX3FwOwotIHVuc2lnbmVkIGludCBwZnJhbWVfcXA7Ci0gc3RydWN0IHZlbmNfc2xpY2VfaW5mbyBzbGljZV9jb25maWc7Ci0gc3RydWN0IHZlbmNfZXh0cmFfZGF0YSBleHRyYV9kYXRhOwotfTsKLQotc3RydWN0IHZlbmNfbm9uaW9fYnVmX2NvbmZpZyB7Ci0gc3RydWN0IHZlbmNfYnVmX3R5cGUgcmVjb25fYnVmMTsKLSBzdHJ1Y3QgdmVuY19idWZfdHlwZSByZWNvbl9idWYyOwotIHN0cnVjdCB2ZW5jX2J1Zl90eXBlIHdiX2J1ZjsKLSBzdHJ1Y3QgdmVuY19idWZfdHlwZSBjbWRfYnVmOwotIHN0cnVjdCB2ZW5jX2J1Zl90eXBlIHZsY19idWY7Ci19OwotCi1zdHJ1Y3QgdmVuY19tcGVnNF9jb25maWcgewotIHVuc2lnbmVkIGludCBwcm9maWxlOwotIHVuc2lnbmVkIGludCBsZXZlbDsKLSB1bnNpZ25lZCBpbnQgdGltZV9yZXNvbHV0aW9uOwotIHVuc2lnbmVkIGludCBhY19wcmVkaWN0aW9uOwotIHVuc2lnbmVkIGludCBoZWNfaW50ZXJ2YWw7Ci0gdW5zaWduZWQgaW50IGRhdGFfcGFydGl0aW9uOwotIHVuc2lnbmVkIGludCBzaG9ydF9oZWFkZXI7Ci0gdW5zaWduZWQgaW50IHJ2bGNfZW5hYmxlOwotfTsKLQotc3RydWN0IHZlbmNfaDI2M19jb25maWcgewotIHVuc2lnbmVkIGludCBwcm9maWxlOwotIHVuc2lnbmVkIGludCBsZXZlbDsKLX07Ci0KLXN0cnVjdCB2ZW5jX2gyNjRfY29uZmlnIHsKLSB1bnNpZ25lZCBpbnQgcHJvZmlsZTsKLSB1bnNpZ25lZCBpbnQgbGV2ZWw7Ci0gdW5zaWduZWQgaW50IG1heF9uYWw7Ci0gdW5zaWduZWQgaW50IGlkcl9wZXJpb2Q7Ci19OwotCi1zdHJ1Y3QgdmVuY19wbWVtIHsKLSBpbnQgc3JjOwotIGludCBmZDsKLSB1bnNpZ25lZCBpbnQgb2Zmc2V0OwotIHZvaWQgKnZpcnQ7Ci0gdm9pZCAqcGh5czsKLSB1bnNpZ25lZCBpbnQgc2l6ZTsKLX07Ci0KLXN0cnVjdCB2ZW5jX2J1ZmZlciB7Ci0gdW5zaWduZWQgY2hhciAqcHRyX2J1ZmZlcjsKLSB1bnNpZ25lZCBpbnQgc2l6ZTsKLSB1bnNpZ25lZCBpbnQgbGVuOwotIHVuc2lnbmVkIGludCBvZmZzZXQ7Ci0gbG9uZyBsb25nIHRpbWVfc3RhbXA7Ci0gdW5zaWduZWQgaW50IGZsYWdzOwotIHVuc2lnbmVkIGludCBjbGllbnRfZGF0YTsKLQotfTsKLQotc3RydWN0IHZlbmNfYnVmZmVycyB7Ci0gc3RydWN0IHZlbmNfcG1lbSByZWNvbl9idWZbVkVOQ19NQVhfUkVDT05fQlVGRkVSU107Ci0gc3RydWN0IHZlbmNfcG1lbSB3Yl9idWY7Ci0gc3RydWN0IHZlbmNfcG1lbSBjbWRfYnVmOwotIHN0cnVjdCB2ZW5jX3BtZW0gdmxjX2J1ZjsKLX07Ci0KLXN0cnVjdCB2ZW5jX2J1ZmZlcl9mbHVzaCB7Ci0gdW5zaWduZWQgaW50IGZsdXNoX21vZGU7Ci19OwotCi11bmlvbiB2ZW5jX21zZ19kYXRhIHsKLSBzdHJ1Y3QgdmVuY19idWZmZXIgYnVmOwotIHN0cnVjdCB2ZW5jX2J1ZmZlcl9mbHVzaCBmbHVzaF9yZXQ7Ci0KLX07Ci0KLXN0cnVjdCB2ZW5jX21zZyB7Ci0gdW5zaWduZWQgaW50IHN0YXR1c19jb2RlOwotIHVuc2lnbmVkIGludCBtc2dfY29kZTsKLSB1bmlvbiB2ZW5jX21zZ19kYXRhIG1zZ19kYXRhOwotIHVuc2lnbmVkIGludCBtc2dfZGF0YV9zaXplOwotfTsKLQotdW5pb24gdmVuY19jb2RlY19jb25maWcgewotIHN0cnVjdCB2ZW5jX21wZWc0X2NvbmZpZyBtcGVnNF9wYXJhbXM7Ci0gc3RydWN0IHZlbmNfaDI2M19jb25maWcgaDI2M19wYXJhbXM7Ci0gc3RydWN0IHZlbmNfaDI2NF9jb25maWcgaDI2NF9wYXJhbXM7Ci19OwotCi1zdHJ1Y3QgdmVuY19xNl9jb25maWcgewotIHN0cnVjdCB2ZW5jX2NvbW1vbl9jb25maWcgY29uZmlnX3BhcmFtczsKLSB1bmlvbiB2ZW5jX2NvZGVjX2NvbmZpZyBjb2RlY19wYXJhbXM7Ci0gc3RydWN0IHZlbmNfbm9uaW9fYnVmX2NvbmZpZyBidWZfcGFyYW1zOwotIHZvaWQgKmNhbGxiYWNrX2V2ZW50OwotfTsKLQotc3RydWN0IHZlbmNfaGRyX2NvbmZpZyB7Ci0gc3RydWN0IHZlbmNfY29tbW9uX2NvbmZpZyBjb25maWdfcGFyYW1zOwotIHVuaW9uIHZlbmNfY29kZWNfY29uZmlnIGNvZGVjX3BhcmFtczsKLX07Ci0KLXN0cnVjdCB2ZW5jX2luaXRfY29uZmlnIHsKLSBzdHJ1Y3QgdmVuY19xNl9jb25maWcgcTZfY29uZmlnOwotIHN0cnVjdCB2ZW5jX2J1ZmZlcnMgcTZfYnVmczsKLX07Ci0KLXN0cnVjdCB2ZW5jX3NlcV9jb25maWcgewotIGludCBzaXplOwotIHN0cnVjdCB2ZW5jX3BtZW0gYnVmOwotIHN0cnVjdCB2ZW5jX3E2X2NvbmZpZyBxNl9jb25maWc7Ci19OwotCi0jZGVmaW5lIFZFTkNfSU9DVExfTUFHSUMgJ1YnCi0KLSNkZWZpbmUgVkVOQ19JT0NUTF9DTURfUkVBRF9ORVhUX01TRyAgIF9JT1dSKFZFTkNfSU9DVExfTUFHSUMsIDEsIHN0cnVjdCB2ZW5jX21zZykKLQotI2RlZmluZSBWRU5DX0lPQ1RMX0NNRF9TVE9QX1JFQURfTVNHIF9JTyhWRU5DX0lPQ1RMX01BR0lDLCAyKQotCi0jZGVmaW5lIFZFTkNfSU9DVExfU0VUX0lOUFVUX0JVRkZFUiAgIF9JT1coVkVOQ19JT0NUTF9NQUdJQywgMywgc3RydWN0IHZlbmNfcG1lbSkKLQotI2RlZmluZSBWRU5DX0lPQ1RMX1NFVF9PVVRQVVRfQlVGRkVSICAgX0lPVyhWRU5DX0lPQ1RMX01BR0lDLCA0LCBzdHJ1Y3QgdmVuY19wbWVtKQotCi0jZGVmaW5lIFZFTkNfSU9DVExfQ01EX1NUQVJUIF9JT1coVkVOQ19JT0NUTF9NQUdJQywgNSwgc3RydWN0IHZlbmNfaW5pdF9jb25maWcpCi0KLSNkZWZpbmUgVkVOQ19JT0NUTF9DTURfRU5DT0RFX0ZSQU1FICAgX0lPVyhWRU5DX0lPQ1RMX01BR0lDLCA2LCBzdHJ1Y3QgdmVuY19idWZmZXIpCi0KLSNkZWZpbmUgVkVOQ19JT0NUTF9DTURfRklMTF9PVVRQVVRfQlVGRkVSICAgX0lPVyhWRU5DX0lPQ1RMX01BR0lDLCA3LCBzdHJ1Y3QgdmVuY19idWZmZXIpCi0KLSNkZWZpbmUgVkVOQ19JT0NUTF9DTURfRkxVU0ggICBfSU9XKFZFTkNfSU9DVExfTUFHSUMsIDgsIHN0cnVjdCB2ZW5jX2J1ZmZlcl9mbHVzaCkKLQotI2RlZmluZSBWRU5DX0lPQ1RMX0NNRF9QQVVTRSBfSU8oVkVOQ19JT0NUTF9NQUdJQywgOSkKLQotI2RlZmluZSBWRU5DX0lPQ1RMX0NNRF9SRVNVTUUgX0lPKFZFTkNfSU9DVExfTUFHSUMsIDEwKQotCi0jZGVmaW5lIFZFTkNfSU9DVExfQ01EX1NUT1AgX0lPKFZFTkNfSU9DVExfTUFHSUMsIDExKQotCi0jZGVmaW5lIFZFTkNfSU9DVExfU0VUX0lOVFJBX1BFUklPRCAgIF9JT1coVkVOQ19JT0NUTF9NQUdJQywgMTIsIGludCkKLQotI2RlZmluZSBWRU5DX0lPQ1RMX0NNRF9SRVFVRVNUX0lGUkFNRSBfSU8oVkVOQ19JT0NUTF9NQUdJQywgMTMpCi0KLSNkZWZpbmUgVkVOQ19JT0NUTF9HRVRfU0VRVUVOQ0VfSERSICAgX0lPV1IoVkVOQ19JT0NUTF9NQUdJQywgMTQsIHN0cnVjdCB2ZW5jX3NlcV9jb25maWcpCi0KLSNkZWZpbmUgVkVOQ19JT0NUTF9TRVRfSU5UUkFfUkVGUkVTSCAgIF9JT1coVkVOQ19JT0NUTF9NQUdJQywgMTUsIGludCkKLQotI2RlZmluZSBWRU5DX0lPQ1RMX1NFVF9GUkFNRV9SQVRFICAgX0lPVyhWRU5DX0lPQ1RMX01BR0lDLCAxNiwgc3RydWN0IHZlbmNfZnJhbWVfcmF0ZSkKLQotI2RlZmluZSBWRU5DX0lPQ1RMX1NFVF9UQVJHRVRfQklUUkFURSAgIF9JT1coVkVOQ19JT0NUTF9NQUdJQywgMTcsIGludCkKLQotI2RlZmluZSBWRU5DX0lPQ1RMX1NFVF9RUF9SQU5HRSAgIF9JT1coVkVOQ19JT0NUTF9NQUdJQywgMTgsIHN0cnVjdCB2ZW5jX3FwX3JhbmdlKQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9tc21fdmlkY19kZWMuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9tc21fdmlkY19kZWMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjA4MzdhNy4uMDAwMDAwMAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbXNtX3ZpZGNfZGVjLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0NjAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKioqCi0gKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCi0gKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bwotICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCi0gKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKLSAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgotICoqKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotI2lmbmRlZiBfTVNNX1ZJRENfREVDX0hfCi0jZGVmaW5lIF9NU01fVklEQ19ERUNfSF8KLQotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KLQotI2RlZmluZSBWREVDX1NfQkFTRSAweDQwMDAwMDAwCi0KLSNkZWZpbmUgVkRFQ19TX1NVQ0NFU1MgKFZERUNfU19CQVNFKQotCi0jZGVmaW5lIFZERUNfU19FRkFJTCAoVkRFQ19TX0JBU0UgKyAxKQotCi0jZGVmaW5lIFZERUNfU19FRkFUQUwgKFZERUNfU19CQVNFICsgMikKLQotI2RlZmluZSBWREVDX1NfRUJBRFBBUkFNIChWREVDX1NfQkFTRSArIDMpCi0KLSNkZWZpbmUgVkRFQ19TX0VJTlZBTFNUQVRFIChWREVDX1NfQkFTRSArIDQpCi0KLSNkZWZpbmUgVkRFQ19TX0VOT1NXUkVTIChWREVDX1NfQkFTRSArIDUpCi0KLSNkZWZpbmUgVkRFQ19TX0VOT0hXUkVTIChWREVDX1NfQkFTRSArIDYpCi0KLSNkZWZpbmUgVkRFQ19TX0VJTlZBTENNRCAoVkRFQ19TX0JBU0UgKyA3KQotCi0jZGVmaW5lIFZERUNfU19FVElNRU9VVCAoVkRFQ19TX0JBU0UgKyA4KQotCi0jZGVmaW5lIFZERUNfU19FTk9QUkVSRVEgKFZERUNfU19CQVNFICsgOSkKLQotI2RlZmluZSBWREVDX1NfRUNNRFFGVUxMIChWREVDX1NfQkFTRSArIDEwKQotCi0jZGVmaW5lIFZERUNfU19FTk9UU1VQUCAoVkRFQ19TX0JBU0UgKyAxMSkKLQotI2RlZmluZSBWREVDX1NfRU5PVElNUEwgKFZERUNfU19CQVNFICsgMTIpCi0KLSNkZWZpbmUgVkRFQ19TX0JVU1kgKFZERUNfU19CQVNFICsgMTMpCi0KLSNkZWZpbmUgVkRFQ19JTlRGX1ZFUiAxCi0jZGVmaW5lIFZERUNfTVNHX0JBU0UgMHgwMDAwMDAwCi0KLSNkZWZpbmUgVkRFQ19NU0dfSU5WQUxJRCAoVkRFQ19NU0dfQkFTRSArIDApCi0jZGVmaW5lIFZERUNfTVNHX1JFU1BfSU5QVVRfQlVGRkVSX0RPTkUgKFZERUNfTVNHX0JBU0UgKyAxKQotI2RlZmluZSBWREVDX01TR19SRVNQX09VVFBVVF9CVUZGRVJfRE9ORSAoVkRFQ19NU0dfQkFTRSArIDIpCi0jZGVmaW5lIFZERUNfTVNHX1JFU1BfSU5QVVRfRkxVU0hFRCAoVkRFQ19NU0dfQkFTRSArIDMpCi0jZGVmaW5lIFZERUNfTVNHX1JFU1BfT1VUUFVUX0ZMVVNIRUQgKFZERUNfTVNHX0JBU0UgKyA0KQotI2RlZmluZSBWREVDX01TR19SRVNQX0ZMVVNIX0lOUFVUX0RPTkUgKFZERUNfTVNHX0JBU0UgKyA1KQotI2RlZmluZSBWREVDX01TR19SRVNQX0ZMVVNIX09VVFBVVF9ET05FIChWREVDX01TR19CQVNFICsgNikKLSNkZWZpbmUgVkRFQ19NU0dfUkVTUF9TVEFSVF9ET05FIChWREVDX01TR19CQVNFICsgNykKLSNkZWZpbmUgVkRFQ19NU0dfUkVTUF9TVE9QX0RPTkUgKFZERUNfTVNHX0JBU0UgKyA4KQotI2RlZmluZSBWREVDX01TR19SRVNQX1BBVVNFX0RPTkUgKFZERUNfTVNHX0JBU0UgKyA5KQotI2RlZmluZSBWREVDX01TR19SRVNQX1JFU1VNRV9ET05FIChWREVDX01TR19CQVNFICsgMTApCi0jZGVmaW5lIFZERUNfTVNHX1JFU1BfUkVTT1VSQ0VfTE9BREVEIChWREVDX01TR19CQVNFICsgMTEpCi0jZGVmaW5lIFZERUNfRVZUX1JFU09VUkNFU19MT1NUIChWREVDX01TR19CQVNFICsgMTIpCi0jZGVmaW5lIFZERUNfTVNHX0VWVF9DT05GSUdfQ0hBTkdFRCAoVkRFQ19NU0dfQkFTRSArIDEzKQotI2RlZmluZSBWREVDX01TR19FVlRfSFdfRVJST1IgKFZERUNfTVNHX0JBU0UgKyAxNCkKLQotI2RlZmluZSBWREVDX0JVRkZFUkZMQUdfRU9TIDB4MDAwMDAwMDEKLSNkZWZpbmUgVkRFQ19CVUZGRVJGTEFHX0RFQ09ERU9OTFkgMHgwMDAwMDAwNAotI2RlZmluZSBWREVDX0JVRkZFUkZMQUdfREFUQUNPUlJVUFQgMHgwMDAwMDAwOAotI2RlZmluZSBWREVDX0JVRkZFUkZMQUdfRU5ET0ZGUkFNRSAweDAwMDAwMDEwCi0jZGVmaW5lIFZERUNfQlVGRkVSRkxBR19TWU5DRlJBTUUgMHgwMDAwMDAyMAotI2RlZmluZSBWREVDX0JVRkZFUkZMQUdfRVhUUkFEQVRBIDB4MDAwMDAwNDAKLSNkZWZpbmUgVkRFQ19CVUZGRVJGTEFHX0NPREVDQ09ORklHIDB4MDAwMDAwODAKLQotI2RlZmluZSBWREVDX0VYVFJBREFUQV9RUCAweDAwMDAwMDAxCi0jZGVmaW5lIFZERUNfRVhUUkFEQVRBX1NFSSAweDAwMDAwMDAyCi0jZGVmaW5lIFZERUNfRVhUUkFEQVRBX1ZVSSAweDAwMDAwMDA0Ci0jZGVmaW5lIFZERUNfRVhUUkFEQVRBX01CX0VSUk9SX01BUCAweDAwMDAwMDA4Ci0KLSNkZWZpbmUgVkRFQ19DTURCQVNFIDB4ODAwCi0jZGVmaW5lIFZERUNfQ01EX1NFVF9JTlRGX1ZFUlNJT04gKFZERUNfQ01EQkFTRSkKLQotI2RlZmluZSBWREVDX0lPQ1RMX01BR0lDICd2JwotCi1zdHJ1Y3QgdmRlY19pb2N0bF9tc2cgewotIHZvaWQgKmlucHV0cGFyYW07Ci0gdm9pZCAqb3V0cHV0cGFyYW07Ci19OwotCi0jZGVmaW5lIFZERUNfSU9DVExfR0VUX1BST0ZJTEVfTEVWRUxfU1VQUE9SVEVEICAgX0lPV1IoVkRFQ19JT0NUTF9NQUdJQywgMCwgc3RydWN0IHZkZWNfaW9jdGxfbXNnKQotCi0jZGVmaW5lIFZERUNfSU9DVExfR0VUX0lOVEVSTEFDRV9GT1JNQVQgICBfSU9SKFZERUNfSU9DVExfTUFHSUMsIDEsIHN0cnVjdCB2ZGVjX2lvY3RsX21zZykKLQotI2RlZmluZSBWREVDX0lPQ1RMX0dFVF9DVVJSRU5UX1BST0ZJTEVfTEVWRUwgICBfSU9XUihWREVDX0lPQ1RMX01BR0lDLCAyLCBzdHJ1Y3QgdmRlY19pb2N0bF9tc2cpCi0KLSNkZWZpbmUgVkRFQ19JT0NUTF9TRVRfT1VUUFVUX0ZPUk1BVCAgIF9JT1dSKFZERUNfSU9DVExfTUFHSUMsIDMsIHN0cnVjdCB2ZGVjX2lvY3RsX21zZykKLSNkZWZpbmUgVkRFQ19JT0NUTF9HRVRfT1VUUFVUX0ZPUk1BVCAgIF9JT1dSKFZERUNfSU9DVExfTUFHSUMsIDQsIHN0cnVjdCB2ZGVjX2lvY3RsX21zZykKLQotI2RlZmluZSBWREVDX0lPQ1RMX1NFVF9DT0RFQyAgIF9JT1coVkRFQ19JT0NUTF9NQUdJQywgNSwgc3RydWN0IHZkZWNfaW9jdGxfbXNnKQotI2RlZmluZSBWREVDX0lPQ1RMX0dFVF9DT0RFQyAgIF9JT1IoVkRFQ19JT0NUTF9NQUdJQywgNiwgc3RydWN0IHZkZWNfaW9jdGxfbXNnKQotCi0jZGVmaW5lIFZERUNfSU9DVExfU0VUX1BJQ1JFUyAgIF9JT1coVkRFQ19JT0NUTF9NQUdJQywgNywgc3RydWN0IHZkZWNfaW9jdGxfbXNnKQotI2RlZmluZSBWREVDX0lPQ1RMX0dFVF9QSUNSRVMgICBfSU9SKFZERUNfSU9DVExfTUFHSUMsIDgsIHN0cnVjdCB2ZGVjX2lvY3RsX21zZykKLQotI2RlZmluZSBWREVDX0lPQ1RMX1NFVF9FWFRSQURBVEEgICBfSU9XKFZERUNfSU9DVExfTUFHSUMsIDksIHN0cnVjdCB2ZGVjX2lvY3RsX21zZykKLSNkZWZpbmUgVkRFQ19JT0NUTF9HRVRfRVhUUkFEQVRBICAgX0lPUihWREVDX0lPQ1RMX01BR0lDLCAxMCwgc3RydWN0IHZkZWNfaW9jdGxfbXNnKQotCi0jZGVmaW5lIFZERUNfSU9DVExfU0VUX1NFUVVFTkNFX0hFQURFUiAgIF9JT1coVkRFQ19JT0NUTF9NQUdJQywgMTEsIHN0cnVjdCB2ZGVjX2lvY3RsX21zZykKLQotI2RlZmluZSBWREVDX0lPQ1RMX1NFVF9CVUZGRVJfUkVRICAgX0lPVyhWREVDX0lPQ1RMX01BR0lDLCAxMiwgc3RydWN0IHZkZWNfaW9jdGxfbXNnKQotI2RlZmluZSBWREVDX0lPQ1RMX0dFVF9CVUZGRVJfUkVRICAgX0lPUihWREVDX0lPQ1RMX01BR0lDLCAxMywgc3RydWN0IHZkZWNfaW9jdGxfbXNnKQotCi0jZGVmaW5lIFZERUNfSU9DVExfQUxMT0NBVEVfQlVGRkVSICAgX0lPV1IoVkRFQ19JT0NUTF9NQUdJQywgMTQsIHN0cnVjdCB2ZGVjX2lvY3RsX21zZykKLQotI2RlZmluZSBWREVDX0lPQ1RMX0ZSRUVfQlVGRkVSICAgX0lPVyhWREVDX0lPQ1RMX01BR0lDLCAxNSwgc3RydWN0IHZkZWNfaW9jdGxfbXNnKQotCi0jZGVmaW5lIFZERUNfSU9DVExfU0VUX0JVRkZFUiAgIF9JT1coVkRFQ19JT0NUTF9NQUdJQywgMTYsIHN0cnVjdCB2ZGVjX2lvY3RsX21zZykKLQotI2RlZmluZSBWREVDX0lPQ1RMX0ZJTExfT1VUUFVUX0JVRkZFUiAgIF9JT1coVkRFQ19JT0NUTF9NQUdJQywgMTcsIHN0cnVjdCB2ZGVjX2lvY3RsX21zZykKLQotI2RlZmluZSBWREVDX0lPQ1RMX0RFQ09ERV9GUkFNRSAgIF9JT1coVkRFQ19JT0NUTF9NQUdJQywgMTgsIHN0cnVjdCB2ZGVjX2lvY3RsX21zZykKLQotI2RlZmluZSBWREVDX0lPQ1RMX0xPQURfUkVTT1VSQ0VTIF9JTyhWREVDX0lPQ1RMX01BR0lDLCAxOSkKLSNkZWZpbmUgVkRFQ19JT0NUTF9DTURfU1RBUlQgX0lPKFZERUNfSU9DVExfTUFHSUMsIDIwKQotI2RlZmluZSBWREVDX0lPQ1RMX0NNRF9TVE9QIF9JTyhWREVDX0lPQ1RMX01BR0lDLCAyMSkKLSNkZWZpbmUgVkRFQ19JT0NUTF9DTURfUEFVU0UgX0lPKFZERUNfSU9DVExfTUFHSUMsIDIyKQotI2RlZmluZSBWREVDX0lPQ1RMX0NNRF9SRVNVTUUgX0lPKFZERUNfSU9DVExfTUFHSUMsIDIzKQotCi0jZGVmaW5lIFZERUNfSU9DVExfQ01EX0ZMVVNIIF9JT1coVkRFQ19JT0NUTF9NQUdJQywgMjQsIHN0cnVjdCB2ZGVjX2lvY3RsX21zZykKLQotI2RlZmluZSBWREVDX0lPQ1RMX0dFVF9ORVhUX01TRyAgIF9JT1IoVkRFQ19JT0NUTF9NQUdJQywgMjUsIHN0cnVjdCB2ZGVjX2lvY3RsX21zZykKLQotI2RlZmluZSBWREVDX0lPQ1RMX1NUT1BfTkVYVF9NU0cgX0lPKFZERUNfSU9DVExfTUFHSUMsIDI2KQotCi0jZGVmaW5lIFZERUNfSU9DVExfR0VUX05VTUJFUl9JTlNUQU5DRVMgICBfSU9SKFZERUNfSU9DVExfTUFHSUMsIDI3LCBzdHJ1Y3QgdmRlY19pb2N0bF9tc2cpCi0KLWVudW0gdmRlY19waWN0dXJlIHsKLSBQSUNUVVJFX1RZUEVfSSwKLSBQSUNUVVJFX1RZUEVfUCwKLSBQSUNUVVJFX1RZUEVfQiwKLSBQSUNUVVJFX1RZUEVfQkksCi0gUElDVFVSRV9UWVBFX1NLSVAsCi0gUElDVFVSRV9UWVBFX1VOS05PV04KLX07Ci0KLWVudW0gdmRlY19idWZmZXIgewotIFZERUNfQlVGRkVSX1RZUEVfSU5QVVQsCi0gVkRFQ19CVUZGRVJfVFlQRV9PVVRQVVQKLX07Ci0KLXN0cnVjdCB2ZGVjX2FsbG9jYXRvcnByb3BlcnR5IHsKLSBlbnVtIHZkZWNfYnVmZmVyIGJ1ZmZlcl90eXBlOwotIHVpbnQzMl90IG1pbmNvdW50OwotIHVpbnQzMl90IG1heGNvdW50OwotIHVpbnQzMl90IGFjdHVhbGNvdW50OwotIHVpbnQzMl90IGJ1ZmZlcl9zaXplOwotIHVpbnQzMl90IGFsaWdubWVudDsKLSB1aW50MzJfdCBidWZfcG9vbGlkOwotfTsKLQotc3RydWN0IHZkZWNfYnVmZmVycGF5bG9hZCB7Ci0gdWludDhfdCAqYnVmZmVyYWRkcjsKLSB1aW50MzJfdCBidWZmZXJfbGVuOwotIGludCBwbWVtX2ZkOwotIHVpbnQzMl90IG9mZnNldDsKLSB1aW50MzJfdCBtbWFwZWRfc2l6ZTsKLX07Ci0KLXN0cnVjdCB2ZGVjX3NldGJ1ZmZlcl9jbWQgewotIGVudW0gdmRlY19idWZmZXIgYnVmZmVyX3R5cGU7Ci0gc3RydWN0IHZkZWNfYnVmZmVycGF5bG9hZCBidWZmZXI7Ci19OwotCi1zdHJ1Y3QgdmRlY19maWxsYnVmZmVyX2NtZCB7Ci0gc3RydWN0IHZkZWNfYnVmZmVycGF5bG9hZCBidWZmZXI7Ci0gdm9pZCAqY2xpZW50X2RhdGE7Ci19OwotCi1lbnVtIHZkZWNfYnVmZmVyZmx1c2ggewotIFZERUNfRkxVU0hfVFlQRV9JTlBVVCwKLSBWREVDX0ZMVVNIX1RZUEVfT1VUUFVULAotIFZERUNfRkxVU0hfVFlQRV9BTEwKLX07Ci0KLWVudW0gdmRlY19jb2RlYyB7Ci0gVkRFQ19DT0RFQ1RZUEVfSDI2NCA9IDB4MSwKLSBWREVDX0NPREVDVFlQRV9IMjYzID0gMHgyLAotIFZERUNfQ09ERUNUWVBFX01QRUc0ID0gMHgzLAotIFZERUNfQ09ERUNUWVBFX0RJVlhfMyA9IDB4NCwKLSBWREVDX0NPREVDVFlQRV9ESVZYXzQgPSAweDUsCi0gVkRFQ19DT0RFQ1RZUEVfRElWWF81ID0gMHg2LAotIFZERUNfQ09ERUNUWVBFX0RJVlhfNiA9IDB4NywKLSBWREVDX0NPREVDVFlQRV9YVklEID0gMHg4LAotIFZERUNfQ09ERUNUWVBFX01QRUcxID0gMHg5LAotIFZERUNfQ09ERUNUWVBFX01QRUcyID0gMHhhLAotIFZERUNfQ09ERUNUWVBFX1ZDMSA9IDB4YiwKLSBWREVDX0NPREVDVFlQRV9WQzFfUkNWID0gMHhjCi19OwotCi1lbnVtIHZkZWNfbXBlZzJfcHJvZmlsZSB7Ci0gVkRFQ19NUEVHMlByb2ZpbGVTaW1wbGUgPSAweDEsCi0gVkRFQ19NUEVHMlByb2ZpbGVNYWluID0gMHgyLAotIFZERUNfTVBFRzJQcm9maWxlNDIyID0gMHg0LAotIFZERUNfTVBFRzJQcm9maWxlU05SID0gMHg4LAotIFZERUNfTVBFRzJQcm9maWxlU3BhdGlhbCA9IDB4MTAsCi0gVkRFQ19NUEVHMlByb2ZpbGVIaWdoID0gMHgyMCwKLSBWREVDX01QRUcyUHJvZmlsZUtocm9ub3NFeHRlbnNpb25zID0gMHg2RjAwMDAwMCwKLSBWREVDX01QRUcyUHJvZmlsZVZlbmRvclN0YXJ0VW51c2VkID0gMHg3RjAwMDAwMCwKLSBWREVDX01QRUcyUHJvZmlsZU1heCA9IDB4N0ZGRkZGRkYKLX07Ci0KLWVudW0gdmRlY19tcGVnMl9sZXZlbCB7Ci0KLSBWREVDX01QRUcyTGV2ZWxMTCA9IDB4MSwKLSBWREVDX01QRUcyTGV2ZWxNTCA9IDB4MiwKLSBWREVDX01QRUcyTGV2ZWxIMTQgPSAweDQsCi0gVkRFQ19NUEVHMkxldmVsSEwgPSAweDgsCi0gVkRFQ19NUEVHMkxldmVsS2hyb25vc0V4dGVuc2lvbnMgPSAweDZGMDAwMDAwLAotIFZERUNfTVBFRzJMZXZlbFZlbmRvclN0YXJ0VW51c2VkID0gMHg3RjAwMDAwMCwKLSBWREVDX01QRUcyTGV2ZWxNYXggPSAweDdGRkZGRkZGCi19OwotCi1lbnVtIHZkZWNfbXBlZzRfcHJvZmlsZSB7Ci0gVkRFQ19NUEVHNFByb2ZpbGVTaW1wbGUgPSAweDAxLAotIFZERUNfTVBFRzRQcm9maWxlU2ltcGxlU2NhbGFibGUgPSAweDAyLAotIFZERUNfTVBFRzRQcm9maWxlQ29yZSA9IDB4MDQsCi0gVkRFQ19NUEVHNFByb2ZpbGVNYWluID0gMHgwOCwKLSBWREVDX01QRUc0UHJvZmlsZU5iaXQgPSAweDEwLAotIFZERUNfTVBFRzRQcm9maWxlU2NhbGFibGVUZXh0dXJlID0gMHgyMCwKLSBWREVDX01QRUc0UHJvZmlsZVNpbXBsZUZhY2UgPSAweDQwLAotIFZERUNfTVBFRzRQcm9maWxlU2ltcGxlRkJBID0gMHg4MCwKLSBWREVDX01QRUc0UHJvZmlsZUJhc2ljQW5pbWF0ZWQgPSAweDEwMCwKLSBWREVDX01QRUc0UHJvZmlsZUh5YnJpZCA9IDB4MjAwLAotIFZERUNfTVBFRzRQcm9maWxlQWR2YW5jZWRSZWFsVGltZSA9IDB4NDAwLAotIFZERUNfTVBFRzRQcm9maWxlQ29yZVNjYWxhYmxlID0gMHg4MDAsCi0gVkRFQ19NUEVHNFByb2ZpbGVBZHZhbmNlZENvZGluZyA9IDB4MTAwMCwKLSBWREVDX01QRUc0UHJvZmlsZUFkdmFuY2VkQ29yZSA9IDB4MjAwMCwKLSBWREVDX01QRUc0UHJvZmlsZUFkdmFuY2VkU2NhbGFibGUgPSAweDQwMDAsCi0gVkRFQ19NUEVHNFByb2ZpbGVBZHZhbmNlZFNpbXBsZSA9IDB4ODAwMCwKLSBWREVDX01QRUc0UHJvZmlsZUtocm9ub3NFeHRlbnNpb25zID0gMHg2RjAwMDAwMCwKLSBWREVDX01QRUc0UHJvZmlsZVZlbmRvclN0YXJ0VW51c2VkID0gMHg3RjAwMDAwMCwKLSBWREVDX01QRUc0UHJvZmlsZU1heCA9IDB4N0ZGRkZGRkYKLX07Ci0KLWVudW0gdmRlY19tcGVnNF9sZXZlbCB7Ci0gVkRFQ19NUEVHNExldmVsMCA9IDB4MDEsCi0gVkRFQ19NUEVHNExldmVsMGIgPSAweDAyLAotIFZERUNfTVBFRzRMZXZlbDEgPSAweDA0LAotIFZERUNfTVBFRzRMZXZlbDIgPSAweDA4LAotIFZERUNfTVBFRzRMZXZlbDMgPSAweDEwLAotIFZERUNfTVBFRzRMZXZlbDQgPSAweDIwLAotIFZERUNfTVBFRzRMZXZlbDRhID0gMHg0MCwKLSBWREVDX01QRUc0TGV2ZWw1ID0gMHg4MCwKLSBWREVDX01QRUc0TGV2ZWxLaHJvbm9zRXh0ZW5zaW9ucyA9IDB4NkYwMDAwMDAsCi0gVkRFQ19NUEVHNExldmVsVmVuZG9yU3RhcnRVbnVzZWQgPSAweDdGMDAwMDAwLAotIFZERUNfTVBFRzRMZXZlbE1heCA9IDB4N0ZGRkZGRkYKLX07Ci0KLWVudW0gdmRlY19hdmNfcHJvZmlsZSB7Ci0gVkRFQ19BVkNQcm9maWxlQmFzZWxpbmUgPSAweDAxLAotIFZERUNfQVZDUHJvZmlsZU1haW4gPSAweDAyLAotIFZERUNfQVZDUHJvZmlsZUV4dGVuZGVkID0gMHgwNCwKLSBWREVDX0FWQ1Byb2ZpbGVIaWdoID0gMHgwOCwKLSBWREVDX0FWQ1Byb2ZpbGVIaWdoMTAgPSAweDEwLAotIFZERUNfQVZDUHJvZmlsZUhpZ2g0MjIgPSAweDIwLAotIFZERUNfQVZDUHJvZmlsZUhpZ2g0NDQgPSAweDQwLAotIFZERUNfQVZDUHJvZmlsZUtocm9ub3NFeHRlbnNpb25zID0gMHg2RjAwMDAwMCwKLSBWREVDX0FWQ1Byb2ZpbGVWZW5kb3JTdGFydFVudXNlZCA9IDB4N0YwMDAwMDAsCi0gVkRFQ19BVkNQcm9maWxlTWF4ID0gMHg3RkZGRkZGRgotfTsKLQotZW51bSB2ZGVjX2F2Y19sZXZlbCB7Ci0gVkRFQ19BVkNMZXZlbDEgPSAweDAxLAotIFZERUNfQVZDTGV2ZWwxYiA9IDB4MDIsCi0gVkRFQ19BVkNMZXZlbDExID0gMHgwNCwKLSBWREVDX0FWQ0xldmVsMTIgPSAweDA4LAotIFZERUNfQVZDTGV2ZWwxMyA9IDB4MTAsCi0gVkRFQ19BVkNMZXZlbDIgPSAweDIwLAotIFZERUNfQVZDTGV2ZWwyMSA9IDB4NDAsCi0gVkRFQ19BVkNMZXZlbDIyID0gMHg4MCwKLSBWREVDX0FWQ0xldmVsMyA9IDB4MTAwLAotIFZERUNfQVZDTGV2ZWwzMSA9IDB4MjAwLAotIFZERUNfQVZDTGV2ZWwzMiA9IDB4NDAwLAotIFZERUNfQVZDTGV2ZWw0ID0gMHg4MDAsCi0gVkRFQ19BVkNMZXZlbDQxID0gMHgxMDAwLAotIFZERUNfQVZDTGV2ZWw0MiA9IDB4MjAwMCwKLSBWREVDX0FWQ0xldmVsNSA9IDB4NDAwMCwKLSBWREVDX0FWQ0xldmVsNTEgPSAweDgwMDAsCi0gVkRFQ19BVkNMZXZlbEtocm9ub3NFeHRlbnNpb25zID0gMHg2RjAwMDAwMCwKLSBWREVDX0FWQ0xldmVsVmVuZG9yU3RhcnRVbnVzZWQgPSAweDdGMDAwMDAwLAotIFZERUNfQVZDTGV2ZWxNYXggPSAweDdGRkZGRkZGCi19OwotCi1lbnVtIHZkZWNfZGl2eF9wcm9maWxlIHsKLSBWREVDX0RJVlhQcm9maWxlX3FNb2JpbGUgPSAweDAxLAotIFZERUNfRElWWFByb2ZpbGVfTW9iaWxlID0gMHgwMiwKLSBWREVDX0RJVlhQcm9maWxlX0hEID0gMHgwNCwKLSBWREVDX0RJVlhQcm9maWxlX0hhbmRoZWxkID0gMHgwOCwKLSBWREVDX0RJVlhQcm9maWxlX1BvcnRhYmxlID0gMHgxMCwKLSBWREVDX0RJVlhQcm9maWxlX0hvbWVUaGVhdGVyID0gMHgyMAotfTsKLQotZW51bSB2ZGVjX3h2aWRfcHJvZmlsZSB7Ci0gVkRFQ19YVklEUHJvZmlsZV9TaW1wbGUgPSAweDEsCi0gVkRFQ19YVklEUHJvZmlsZV9BZHZhbmNlZF9SZWFsdGltZV9TaW1wbGUgPSAweDIsCi0gVkRFQ19YVklEUHJvZmlsZV9BZHZhbmNlZF9TaW1wbGUgPSAweDQKLX07Ci0KLWVudW0gdmRlY194dmlkX2xldmVsIHsKLSBWREVDX1hWSURfTEVWRUxfU19MMCA9IDB4MSwKLSBWREVDX1hWSURfTEVWRUxfU19MMSA9IDB4MiwKLSBWREVDX1hWSURfTEVWRUxfU19MMiA9IDB4NCwKLSBWREVDX1hWSURfTEVWRUxfU19MMyA9IDB4OCwKLSBWREVDX1hWSURfTEVWRUxfQVJUU19MMSA9IDB4MTAsCi0gVkRFQ19YVklEX0xFVkVMX0FSVFNfTDIgPSAweDIwLAotIFZERUNfWFZJRF9MRVZFTF9BUlRTX0wzID0gMHg0MCwKLSBWREVDX1hWSURfTEVWRUxfQVJUU19MNCA9IDB4ODAsCi0gVkRFQ19YVklEX0xFVkVMX0FTX0wwID0gMHgxMDAsCi0gVkRFQ19YVklEX0xFVkVMX0FTX0wxID0gMHgyMDAsCi0gVkRFQ19YVklEX0xFVkVMX0FTX0wyID0gMHg0MDAsCi0gVkRFQ19YVklEX0xFVkVMX0FTX0wzID0gMHg4MDAsCi0gVkRFQ19YVklEX0xFVkVMX0FTX0w0ID0gMHgxMDAwCi19OwotCi1lbnVtIHZkZWNfaDI2M3Byb2ZpbGUgewotIFZERUNfSDI2M1Byb2ZpbGVCYXNlbGluZSA9IDB4MDEsCi0gVkRFQ19IMjYzUHJvZmlsZUgzMjBDb2RpbmcgPSAweDAyLAotIFZERUNfSDI2M1Byb2ZpbGVCYWNrd2FyZENvbXBhdGlibGUgPSAweDA0LAotIFZERUNfSDI2M1Byb2ZpbGVJU1dWMiA9IDB4MDgsCi0gVkRFQ19IMjYzUHJvZmlsZUlTV1YzID0gMHgxMCwKLSBWREVDX0gyNjNQcm9maWxlSGlnaENvbXByZXNzaW9uID0gMHgyMCwKLSBWREVDX0gyNjNQcm9maWxlSW50ZXJuZXQgPSAweDQwLAotIFZERUNfSDI2M1Byb2ZpbGVJbnRlcmxhY2UgPSAweDgwLAotIFZERUNfSDI2M1Byb2ZpbGVIaWdoTGF0ZW5jeSA9IDB4MTAwLAotIFZERUNfSDI2M1Byb2ZpbGVLaHJvbm9zRXh0ZW5zaW9ucyA9IDB4NkYwMDAwMDAsCi0gVkRFQ19IMjYzUHJvZmlsZVZlbmRvclN0YXJ0VW51c2VkID0gMHg3RjAwMDAwMCwKLSBWREVDX0gyNjNQcm9maWxlTWF4ID0gMHg3RkZGRkZGRgotfTsKLQotZW51bSB2ZGVjX2gyNjNsZXZlbCB7Ci0gVkRFQ19IMjYzTGV2ZWwxMCA9IDB4MDEsCi0gVkRFQ19IMjYzTGV2ZWwyMCA9IDB4MDIsCi0gVkRFQ19IMjYzTGV2ZWwzMCA9IDB4MDQsCi0gVkRFQ19IMjYzTGV2ZWw0MCA9IDB4MDgsCi0gVkRFQ19IMjYzTGV2ZWw0NSA9IDB4MTAsCi0gVkRFQ19IMjYzTGV2ZWw1MCA9IDB4MjAsCi0gVkRFQ19IMjYzTGV2ZWw2MCA9IDB4NDAsCi0gVkRFQ19IMjYzTGV2ZWw3MCA9IDB4ODAsCi0gVkRFQ19IMjYzTGV2ZWxLaHJvbm9zRXh0ZW5zaW9ucyA9IDB4NkYwMDAwMDAsCi0gVkRFQ19IMjYzTGV2ZWxWZW5kb3JTdGFydFVudXNlZCA9IDB4N0YwMDAwMDAsCi0gVkRFQ19IMjYzTGV2ZWxNYXggPSAweDdGRkZGRkZGCi19OwotCi1lbnVtIHZkZWNfd212X2Zvcm1hdCB7Ci0gVkRFQ19XTVZGb3JtYXRVbnVzZWQgPSAweDAxLAotIFZERUNfV01WRm9ybWF0NyA9IDB4MDIsCi0gVkRFQ19XTVZGb3JtYXQ4ID0gMHgwNCwKLSBWREVDX1dNVkZvcm1hdDkgPSAweDA4LAotIFZERUNfV01GRm9ybWF0S2hyb25vc0V4dGVuc2lvbnMgPSAweDZGMDAwMDAwLAotIFZERUNfV01GRm9ybWF0VmVuZG9yU3RhcnRVbnVzZWQgPSAweDdGMDAwMDAwLAotIFZERUNfV01WRm9ybWF0TWF4ID0gMHg3RkZGRkZGRgotfTsKLQotZW51bSB2ZGVjX3ZjMV9wcm9maWxlIHsKLSBWREVDX1ZDMVByb2ZpbGVTaW1wbGUgPSAweDEsCi0gVkRFQ19WQzFQcm9maWxlTWFpbiA9IDB4MiwKLSBWREVDX1ZDMVByb2ZpbGVBZHZhbmNlZCA9IDB4NAotfTsKLQotZW51bSB2ZGVjX3ZjMV9sZXZlbCB7Ci0gVkRFQ19WQzFfTEVWRUxfU19Mb3cgPSAweDEsCi0gVkRFQ19WQzFfTEVWRUxfU19NZWRpdW0gPSAweDIsCi0gVkRFQ19WQzFfTEVWRUxfTV9Mb3cgPSAweDQsCi0gVkRFQ19WQzFfTEVWRUxfTV9NZWRpdW0gPSAweDgsCi0gVkRFQ19WQzFfTEVWRUxfTV9IaWdoID0gMHgxMCwKLSBWREVDX1ZDMV9MRVZFTF9BX0wwID0gMHgyMCwKLSBWREVDX1ZDMV9MRVZFTF9BX0wxID0gMHg0MCwKLSBWREVDX1ZDMV9MRVZFTF9BX0wyID0gMHg4MCwKLSBWREVDX1ZDMV9MRVZFTF9BX0wzID0gMHgxMDAsCi0gVkRFQ19WQzFfTEVWRUxfQV9MNCA9IDB4MjAwCi19OwotCi1zdHJ1Y3QgdmRlY19wcm9maWxlX2xldmVsIHsKLSB1aW50MzJfdCBwcm9maWxlczsKLSB1aW50MzJfdCBsZXZlbHM7Ci19OwotCi1lbnVtIHZkZWNfaW50ZXJsYWNlZF9mb3JtYXQgewotIFZERUNfSW50ZXJsYWNlRnJhbWVQcm9ncmVzc2l2ZSA9IDB4MSwKLSBWREVDX0ludGVybGFjZUludGVybGVhdmVGcmFtZVRvcEZpZWxkRmlyc3QgPSAweDIsCi0gVkRFQ19JbnRlcmxhY2VJbnRlcmxlYXZlRnJhbWVCb3R0b21GaWVsZEZpcnN0ID0gMHg0Ci19OwotCi1lbnVtIHZkZWNfb3V0cHV0X2Zyb21hdCB7Ci0gVkRFQ19ZVVZfRk9STUFUX05WMTIgPSAweDEsCi0gVkRFQ19ZVVZfRk9STUFUX1RJTEVfNHgyID0gMHgyCi19OwotCi1zdHJ1Y3QgdmRlY19waWNzaXplIHsKLSB1aW50MzJfdCBmcmFtZV93aWR0aDsKLSB1aW50MzJfdCBmcmFtZV9oZWlnaHQ7Ci0gdWludDMyX3Qgc3RyaWRlOwotIHVpbnQzMl90IHNjYW5fbGluZXM7Ci19OwotCi1zdHJ1Y3QgdmRlY19zZXFoZWFkZXIgewotIHVpbnQ4X3QgKnB0cl9zZXFoZWFkZXI7Ci0gdWludDMyX3Qgc2VxX2hlYWRlcl9sZW47Ci0gaW50IHBtZW1fZmQ7Ci0gdWludDMyX3QgcG1lbV9vZmZzZXQ7Ci19OwotCi1zdHJ1Y3QgdmRlY19tYmVycm9yIHsKLSB1aW50OF90ICpwdHJfZXJyb3JtYXA7Ci0gdWludDMyX3QgZXJyX21hcHNpemU7Ci19OwotCi1zdHJ1Y3QgdmRlY19pbnB1dF9mcmFtZWluZm8gewotIHVpbnQ4X3QgKmJ1ZmZlcmFkZHI7Ci0gdWludDMyX3Qgb2Zmc2V0OwotIHVpbnQzMl90IGRhdGFsZW47Ci0gdWludDMyX3QgZmxhZ3M7Ci0gaW50NjRfdCB0aW1lc3RhbXA7Ci0gdm9pZCAqY2xpZW50X2RhdGE7Ci0gaW50IHBtZW1fZmQ7Ci0gdWludDMyX3QgcG1lbV9vZmZzZXQ7Ci19OwotCi1zdHJ1Y3QgdmRlY19mcmFtZXNpemUgewotIHVpbnQzMl90IGxlZnQ7Ci0gdWludDMyX3QgdG9wOwotIHVpbnQzMl90IHJpZ2h0OwotIHVpbnQzMl90IGJvdHRvbTsKLX07Ci0KLXN0cnVjdCB2ZGVjX291dHB1dF9mcmFtZWluZm8gewotIHVpbnQ4X3QgKnBoeV9hZGRyOwotIHVpbnQ4X3QgKmJ1ZmZlcmFkZHI7Ci0gdWludDMyX3Qgb2Zmc2V0OwotIHVpbnQzMl90IGxlbjsKLSB1aW50MzJfdCBmbGFnczsKLSBpbnQ2NF90IHRpbWVfc3RhbXA7Ci0gdm9pZCAqY2xpZW50X2RhdGE7Ci0gdm9pZCAqaW5wdXRfZnJhbWVfY2xpZW50ZGF0YTsKLSBzdHJ1Y3QgdmRlY19mcmFtZXNpemUgZnJhbWVzaXplOwotfTsKLQotdW5pb24gdmRlY19tc2dkYXRhIHsKLSBzdHJ1Y3QgdmRlY19vdXRwdXRfZnJhbWVpbmZvIG91dHB1dF9mcmFtZTsKLSB2b2lkICppbnB1dF9mcmFtZV9jbGllbnRkYXRhOwotfTsKLQotc3RydWN0IHZkZWNfbXNnaW5mbyB7Ci0gdWludDMyX3Qgc3RhdHVzX2NvZGU7Ci0gdWludDMyX3QgbXNnY29kZTsKLSB1bmlvbiB2ZGVjX21zZ2RhdGEgbXNnZGF0YTsKLSB1aW50MzJfdCBtc2dkYXRhc2l6ZTsKLX07Ci0jZW5kaWYKLQpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L21zbV92aWRjX2VuYy5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L21zbV92aWRjX2VuYy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NTQzN2EyLi4wMDAwMDAwCi0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9tc21fdmlkY19lbmMuaAorKysgL2Rldi9udWxsCkBAIC0xLDQwMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqKioKLSAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKLSAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCi0gKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKLSAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAotICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCi0gKioqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0jaWZuZGVmIF9NU01fVklEQ19FTkNfSF8KLSNkZWZpbmUgX01TTV9WSURDX0VOQ19IXwotCi0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgotCi0jZGVmaW5lIFZFTl9TX0JBU0UgMHgwMDAwMDAwMAotI2RlZmluZSBWRU5fU19TVUNDRVNTIChWRU5fU19CQVNFKSAKLSNkZWZpbmUgVkVOX1NfRUZBSUwgKFZFTl9TX0JBU0UrMSkgCi0jZGVmaW5lIFZFTl9TX0VGQVRBTCAoVkVOX1NfQkFTRSsyKSAKLSNkZWZpbmUgVkVOX1NfRUJBRFBBUkFNIChWRU5fU19CQVNFKzMpIAotCi0jZGVmaW5lIFZFTl9TX0VJTlZBTFNUQVRFIChWRU5fU19CQVNFKzQpCi0jZGVmaW5lIFZFTl9TX0VOT1NXUkVTIChWRU5fU19CQVNFKzUpIAotI2RlZmluZSBWRU5fU19FTk9IV1JFUyAoVkVOX1NfQkFTRSs2KSAKLSNkZWZpbmUgVkVOX1NfRUJVRkZSRVEgKFZFTl9TX0JBU0UrNykgCi0jZGVmaW5lIFZFTl9TX0VJTlZBTENNRCAoVkVOX1NfQkFTRSs4KSAKLSNkZWZpbmUgVkVOX1NfRVRJTUVPVVQgKFZFTl9TX0JBU0UrOSkgCi0KLSNkZWZpbmUgVkVOX1NfRU5PUkVBVE1QVCAoVkVOX1NfQkFTRSsxMCkKLSNkZWZpbmUgVkVOX1NfRU5PUFJFUkVRIChWRU5fU19CQVNFKzExKSAKLSNkZWZpbmUgVkVOX1NfRUNNRFFGVUxMIChWRU5fU19CQVNFKzEyKSAKLSNkZWZpbmUgVkVOX1NfRU5PVFNVUFAgKFZFTl9TX0JBU0UrMTMpIAotI2RlZmluZSBWRU5fU19FTk9USU1QTCAoVkVOX1NfQkFTRSsxNCkgCi0jZGVmaW5lIFZFTl9TX0VOT1RQTUVNIChWRU5fU19CQVNFKzE1KSAKLSNkZWZpbmUgVkVOX1NfRUZMVVNIRUQgKFZFTl9TX0JBU0UrMTYpIAotI2RlZmluZSBWRU5fU19FSU5TVUZCVUYgKFZFTl9TX0JBU0UrMTcpIAotI2RlZmluZSBWRU5fU19FU0FNRVNUQVRFIChWRU5fU19CQVNFKzE4KQotI2RlZmluZSBWRU5fU19FSU5WQUxUUkFOUyAoVkVOX1NfQkFTRSsxOSkKLQotI2RlZmluZSBWRU5fSU5URl9WRVIgMQotCi0jZGVmaW5lIFZFTl9NU0dfSU5ESUNBVElPTiAwCi0jZGVmaW5lIFZFTl9NU0dfSU5QVVRfQlVGRkVSX0RPTkUgMQotI2RlZmluZSBWRU5fTVNHX09VVFBVVF9CVUZGRVJfRE9ORSAyCi0jZGVmaW5lIFZFTl9NU0dfTkVFRF9PVVRQVVRfQlVGRkVSIDMKLSNkZWZpbmUgVkVOX01TR19GTFVTSF9JTlBVVF9ET05FIDQKLSNkZWZpbmUgVkVOX01TR19GTFVTSF9PVVBVVF9ET05FIDUKLSNkZWZpbmUgVkVOX01TR19TVEFSVCA2Ci0jZGVmaW5lIFZFTl9NU0dfU1RPUCA3Ci0jZGVmaW5lIFZFTl9NU0dfUEFVU0UgOAotI2RlZmluZSBWRU5fTVNHX1JFU1VNRSA5Ci0jZGVmaW5lIFZFTl9NU0dfU1RPUF9SRUFESU5HX01TRyAxMAotCi0jZGVmaW5lIFZFTl9CVUZGTEFHX0VPUyAweDAwMDAwMDAxCi0jZGVmaW5lIFZFTl9CVUZGTEFHX0VORE9GRlJBTUUgMHgwMDAwMDAxMAotI2RlZmluZSBWRU5fQlVGRkxBR19TWU5DRlJBTUUgMHgwMDAwMDAyMAotI2RlZmluZSBWRU5fQlVGRkxBR19FWFRSQURBVEEgMHgwMDAwMDA0MAotI2RlZmluZSBWRU5fQlVGRkxBR19DT0RFQ0NPTkZJRyAweDAwMDAwMDgwCi0KLSNkZWZpbmUgVkVOX0ZSQU1FX1RZUEVfSSAxIAotI2RlZmluZSBWRU5fRlJBTUVfVFlQRV9QIDIgCi0jZGVmaW5lIFZFTl9GUkFNRV9UWVBFX0IgMyAKLQotI2RlZmluZSBWRU5fQ09ERUNfTVBFRzQgMSAKLSNkZWZpbmUgVkVOX0NPREVDX0gyNjQgMiAKLSNkZWZpbmUgVkVOX0NPREVDX0gyNjMgMyAKLQotI2RlZmluZSBWRU5fUFJPRklMRV9NUEVHNF9TUCAxIAotI2RlZmluZSBWRU5fUFJPRklMRV9NUEVHNF9BU1AgMiAKLSNkZWZpbmUgVkVOX1BST0ZJTEVfSDI2NF9CQVNFTElORSAzIAotI2RlZmluZSBWRU5fUFJPRklMRV9IMjY0X01BSU4gNCAKLSNkZWZpbmUgVkVOX1BST0ZJTEVfSDI2NF9ISUdIIDUgCi0jZGVmaW5lIFZFTl9QUk9GSUxFX0gyNjNfQkFTRUxJTkUgNiAKLQotI2RlZmluZSBWRU5fTEVWRUxfTVBFRzRfMCAweDEgCi0jZGVmaW5lIFZFTl9MRVZFTF9NUEVHNF8xIDB4MiAKLSNkZWZpbmUgVkVOX0xFVkVMX01QRUc0XzIgMHgzIAotI2RlZmluZSBWRU5fTEVWRUxfTVBFRzRfMyAweDQgCi0jZGVmaW5lIFZFTl9MRVZFTF9NUEVHNF80IDB4NSAKLSNkZWZpbmUgVkVOX0xFVkVMX01QRUc0XzUgMHg2IAotI2RlZmluZSBWRU5fTEVWRUxfTVBFRzRfM2IgMHg3IAotI2RlZmluZSBWRU5fTEVWRUxfTVBFRzRfNiAweDggCi0KLSNkZWZpbmUgVkVOX0xFVkVMX0gyNjRfMSAweDkgCi0jZGVmaW5lIFZFTl9MRVZFTF9IMjY0XzFiIDB4QSAKLSNkZWZpbmUgVkVOX0xFVkVMX0gyNjRfMXAxIDB4QiAKLSNkZWZpbmUgVkVOX0xFVkVMX0gyNjRfMXAyIDB4QyAKLSNkZWZpbmUgVkVOX0xFVkVMX0gyNjRfMXAzIDB4RCAKLSNkZWZpbmUgVkVOX0xFVkVMX0gyNjRfMiAweEUgCi0jZGVmaW5lIFZFTl9MRVZFTF9IMjY0XzJwMSAweEYgCi0jZGVmaW5lIFZFTl9MRVZFTF9IMjY0XzJwMiAweDEwIAotI2RlZmluZSBWRU5fTEVWRUxfSDI2NF8zIDB4MTEgCi0jZGVmaW5lIFZFTl9MRVZFTF9IMjY0XzNwMSAweDEyIAotCi0jZGVmaW5lIFZFTl9MRVZFTF9IMjYzXzEwIDB4MTMgCi0jZGVmaW5lIFZFTl9MRVZFTF9IMjYzXzIwIDB4MTQgCi0jZGVmaW5lIFZFTl9MRVZFTF9IMjYzXzMwIDB4MTUgCi0jZGVmaW5lIFZFTl9MRVZFTF9IMjYzXzQwIDB4MTYgCi0jZGVmaW5lIFZFTl9MRVZFTF9IMjYzXzQ1IDB4MTcgCi0jZGVmaW5lIFZFTl9MRVZFTF9IMjYzXzUwIDB4MTggCi0jZGVmaW5lIFZFTl9MRVZFTF9IMjYzXzYwIDB4MTkgCi0jZGVmaW5lIFZFTl9MRVZFTF9IMjYzXzcwIDB4MUEgCi0KLSNkZWZpbmUgVkVOX0VOVFJPUFlfTU9ERUxfQ0FWTEMgMQotI2RlZmluZSBWRU5fRU5UUk9QWV9NT0RFTF9DQUJBQyAyCi0KLSNkZWZpbmUgVkVOX0NBQkFDX01PREVMXzAgMSAKLSNkZWZpbmUgVkVOX0NBQkFDX01PREVMXzEgMiAKLSNkZWZpbmUgVkVOX0NBQkFDX01PREVMXzIgMyAKLQotI2RlZmluZSBWRU5fREJfRElTQUJMRSAxIAotI2RlZmluZSBWRU5fREJfQUxMX0JMS0dfQk5EUlkgMiAKLSNkZWZpbmUgVkVOX0RCX1NLSVBfU0xJQ0VfQk5EUlkgMyAKLQotI2RlZmluZSBWRU5fTVNMSUNFX09GRiAxCi0jZGVmaW5lIFZFTl9NU0xJQ0VfQ05UX01CIDIgIAotI2RlZmluZSBWRU5fTVNMSUNFX0NOVF9CWVRFIDMgIAotI2RlZmluZSBWRU5fTVNMSUNFX0dPQiA0ICAKLQotI2RlZmluZSBWRU5fUkNfT0ZGIDEKLSNkZWZpbmUgVkVOX1JDX1ZCUl9WRlIgMgotI2RlZmluZSBWRU5fUkNfVkJSX0NGUiAzCi0jZGVmaW5lIFZFTl9SQ19DQlJfVkZSIDQKLQotI2RlZmluZSBWRU5fRkxVU0hfSU5QVVQgMQotI2RlZmluZSBWRU5fRkxVU0hfT1VUUFVUIDIKLSNkZWZpbmUgVkVOX0ZMVVNIX0FMTCAzCi0KLSNkZWZpbmUgVkVOX0lOUFVURk1UX05WMTIgMSAKLSNkZWZpbmUgVkVOX0lOUFVURk1UX05WMjEgMiAKLQotI2RlZmluZSBWRU5fUk9UQVRJT05fMCAxIAotI2RlZmluZSBWRU5fUk9UQVRJT05fOTAgMiAKLSNkZWZpbmUgVkVOX1JPVEFUSU9OXzE4MCAzIAotI2RlZmluZSBWRU5fUk9UQVRJT05fMjcwIDQgCi0KLSNkZWZpbmUgVkVOX1RJTUVPVVRfSU5GSU5JVEUgMHhmZmZmZmZmZgotCi0jZGVmaW5lIFZFTl9JUl9PRkYgMQotI2RlZmluZSBWRU5fSVJfQ1lDTElDIDIKLSNkZWZpbmUgVkVOX0lSX1JBTkRPTSAzCi0KLSNkZWZpbmUgVkVOX0lPQ1RMQkFTRV9ORU5DIDB4ODAwCi0KLSNkZWZpbmUgVkVOX0lPQ1RMQkFTRV9FTkMgMHg4NTAKLQotc3RydWN0IHZlbmNfaW9jdGxfbXNnewotIHZvaWQgKmlucHV0cGFyYW07Ci0gdm9pZCAqb3V0cHV0cGFyYW07Ci19OwotCi0jZGVmaW5lIFZFTl9JT0NUTF9TRVRfSU5URl9WRVJTSU9OICAgX0lPVyhWRU5fSU9DVExCQVNFX05FTkMsIDAsIHN0cnVjdCB2ZW5jX2lvY3RsX21zZykKLQotI2RlZmluZSBWRU5fSU9DVExfQ01EX1JFQURfTkVYVF9NU0cgICBfSU9XUihWRU5fSU9DVExCQVNFX05FTkMsIDEsIHN0cnVjdCB2ZW5jX2lvY3RsX21zZykKLQotI2RlZmluZSBWRU5fSU9DVExfQ01EX1NUT1BfUkVBRF9NU0cgX0lPKFZFTl9JT0NUTEJBU0VfTkVOQywgMikKLQotI2RlZmluZSBWRU5fSU9DVExfU0VUX0lOUFVUX0JVRkZFUl9SRVEgICBfSU9XKFZFTl9JT0NUTEJBU0VfTkVOQywgMywgc3RydWN0IHZlbmNfaW9jdGxfbXNnKQotI2RlZmluZSBWRU5fSU9DVExfR0VUX0lOUFVUX0JVRkZFUl9SRVEgICBfSU9SKFZFTl9JT0NUTEJBU0VfTkVOQywgNCwgc3RydWN0IHZlbmNfaW9jdGxfbXNnKQotCi0jZGVmaW5lIFZFTl9JT0NUTF9DTURfQUxMT0NfSU5QVVRfQlVGRkVSICAgX0lPVyhWRU5fSU9DVExCQVNFX05FTkMsIDUsIHN0cnVjdCB2ZW5jX2lvY3RsX21zZykKLQotI2RlZmluZSBWRU5fSU9DVExfU0VUX0lOUFVUX0JVRkZFUiAgIF9JT1coVkVOX0lPQ1RMQkFTRV9ORU5DLCA2LCBzdHJ1Y3QgdmVuY19pb2N0bF9tc2cpCi0KLSNkZWZpbmUgVkVOX0lPQ1RMX0NNRF9GUkVFX0lOUFVUX0JVRkZFUiAgIF9JT1coVkVOX0lPQ1RMQkFTRV9ORU5DLCA3LCBzdHJ1Y3QgdmVuY19pb2N0bF9tc2cpCi0KLSNkZWZpbmUgVkVOX0lPQ1RMX1NFVF9PVVRQVVRfQlVGRkVSX1JFUSAgIF9JT1coVkVOX0lPQ1RMQkFTRV9ORU5DLCA4LCBzdHJ1Y3QgdmVuY19pb2N0bF9tc2cpCi0jZGVmaW5lIFZFTl9JT0NUTF9HRVRfT1VUUFVUX0JVRkZFUl9SRVEgICBfSU9SKFZFTl9JT0NUTEJBU0VfTkVOQywgOSwgc3RydWN0IHZlbmNfaW9jdGxfbXNnKQotCi0jZGVmaW5lIFZFTl9JT0NUTF9DTURfQUxMT0NfT1VUUFVUX0JVRkZFUiAgIF9JT1coVkVOX0lPQ1RMQkFTRV9ORU5DLCAxMCwgc3RydWN0IHZlbmNfaW9jdGxfbXNnKQotCi0jZGVmaW5lIFZFTl9JT0NUTF9TRVRfT1VUUFVUX0JVRkZFUiAgIF9JT1coVkVOX0lPQ1RMQkFTRV9ORU5DLCAxMSwgc3RydWN0IHZlbmNfaW9jdGxfbXNnKQotCi0jZGVmaW5lIFZFTl9JT0NUTF9DTURfRlJFRV9PVVRQVVRfQlVGRkVSICAgX0lPVyhWRU5fSU9DVExCQVNFX05FTkMsIDEyLCBzdHJ1Y3QgdmVuY19pb2N0bF9tc2cpCi0KLSNkZWZpbmUgVkVOX0lPQ1RMX0NNRF9TVEFSVCBfSU8oVkVOX0lPQ1RMQkFTRV9ORU5DLCAxMykKLQotI2RlZmluZSBWRU5fSU9DVExfQ01EX0VOQ09ERV9GUkFNRSAgIF9JT1coVkVOX0lPQ1RMQkFTRV9ORU5DLCAxNCwgc3RydWN0IHZlbmNfaW9jdGxfbXNnKQotCi0jZGVmaW5lIFZFTl9JT0NUTF9DTURfRklMTF9PVVRQVVRfQlVGRkVSICAgX0lPVyhWRU5fSU9DVExCQVNFX05FTkMsIDE1LCBzdHJ1Y3QgdmVuY19pb2N0bF9tc2cpCi0KLSNkZWZpbmUgVkVOX0lPQ1RMX0NNRF9GTFVTSCAgIF9JT1coVkVOX0lPQ1RMQkFTRV9ORU5DLCAxNiwgc3RydWN0IHZlbmNfaW9jdGxfbXNnKQotCi0jZGVmaW5lIFZFTl9JT0NUTF9DTURfUEFVU0UgX0lPKFZFTl9JT0NUTEJBU0VfTkVOQywgMTcpCi0KLSNkZWZpbmUgVkVOX0lPQ1RMX0NNRF9SRVNVTUUgX0lPKFZFTl9JT0NUTEJBU0VfTkVOQywgMTgpCi0KLSNkZWZpbmUgVkVOX0lPQ1RMX0NNRF9TVE9QIF9JTyhWRU5fSU9DVExCQVNFX05FTkMsIDE5KQotCi0jZGVmaW5lIFZFTl9JT0NUTF9TRVRfQkFTRV9DRkcgICBfSU9XKFZFTl9JT0NUTEJBU0VfRU5DLCAxLCBzdHJ1Y3QgdmVuY19pb2N0bF9tc2cpCi0jZGVmaW5lIFZFTl9JT0NUTF9HRVRfQkFTRV9DRkcgICBfSU9SKFZFTl9JT0NUTEJBU0VfRU5DLCAyLCBzdHJ1Y3QgdmVuY19pb2N0bF9tc2cpCi0KLSNkZWZpbmUgVkVOX0lPQ1RMX1NFVF9MSVZFX01PREUgICBfSU9XKFZFTl9JT0NUTEJBU0VfRU5DLCAzLCBzdHJ1Y3QgdmVuY19pb2N0bF9tc2cpCi0jZGVmaW5lIFZFTl9JT0NUTF9HRVRfTElWRV9NT0RFICAgX0lPUihWRU5fSU9DVExCQVNFX0VOQywgNCwgc3RydWN0IHZlbmNfaW9jdGxfbXNnKQotCi0jZGVmaW5lIFZFTl9JT0NUTF9TRVRfQ09ERUNfUFJPRklMRSAgIF9JT1coVkVOX0lPQ1RMQkFTRV9FTkMsIDUsIHN0cnVjdCB2ZW5jX2lvY3RsX21zZykKLSNkZWZpbmUgVkVOX0lPQ1RMX0dFVF9DT0RFQ19QUk9GSUxFICAgX0lPUihWRU5fSU9DVExCQVNFX0VOQywgNiwgc3RydWN0IHZlbmNfaW9jdGxfbXNnKQotCi0jZGVmaW5lIFZFTl9JT0NUTF9TRVRfUFJPRklMRV9MRVZFTCAgIF9JT1coVkVOX0lPQ1RMQkFTRV9FTkMsIDcsIHN0cnVjdCB2ZW5jX2lvY3RsX21zZykKLQotI2RlZmluZSBWRU5fSU9DVExfR0VUX1BST0ZJTEVfTEVWRUwgICBfSU9SKFZFTl9JT0NUTEJBU0VfRU5DLCA4LCBzdHJ1Y3QgdmVuY19pb2N0bF9tc2cpCi0KLSNkZWZpbmUgVkVOX0lPQ1RMX1NFVF9TSE9SVF9IRFIgICBfSU9XKFZFTl9JT0NUTEJBU0VfRU5DLCA5LCBzdHJ1Y3QgdmVuY19pb2N0bF9tc2cpCi0jZGVmaW5lIFZFTl9JT0NUTF9HRVRfU0hPUlRfSERSICAgX0lPUihWRU5fSU9DVExCQVNFX0VOQywgMTAsIHN0cnVjdCB2ZW5jX2lvY3RsX21zZykKLQotI2RlZmluZSBWRU5fSU9DVExfU0VUX1NFU1NJT05fUVAgICBfSU9XKFZFTl9JT0NUTEJBU0VfRU5DLCAxMSwgc3RydWN0IHZlbmNfaW9jdGxfbXNnKQotI2RlZmluZSBWRU5fSU9DVExfR0VUX1NFU1NJT05fUVAgICBfSU9SKFZFTl9JT0NUTEJBU0VfRU5DLCAxMiwgc3RydWN0IHZlbmNfaW9jdGxfbXNnKQotCi0jZGVmaW5lIFZFTl9JT0NUTF9TRVRfSU5UUkFfUEVSSU9EICAgX0lPVyhWRU5fSU9DVExCQVNFX0VOQywgMTMsIHN0cnVjdCB2ZW5jX2lvY3RsX21zZykKLSNkZWZpbmUgVkVOX0lPQ1RMX0dFVF9JTlRSQV9QRVJJT0QgICBfSU9SKFZFTl9JT0NUTEJBU0VfRU5DLCAxNCwgc3RydWN0IHZlbmNfaW9jdGxfbXNnKQotCi0jZGVmaW5lIFZFTl9JT0NUTF9DTURfUkVRVUVTVF9JRlJBTUUgX0lPKFZFTl9JT0NUTEJBU0VfRU5DLCAxNSkKLQotI2RlZmluZSBWRU5fSU9DVExfR0VUX0NBUEFCSUxJVFkgICBfSU9SKFZFTl9JT0NUTEJBU0VfRU5DLCAxNiwgc3RydWN0IHZlbmNfaW9jdGxfbXNnKQotCi0jZGVmaW5lIFZFTl9JT0NUTF9HRVRfU0VRVUVOQ0VfSERSICAgX0lPUihWRU5fSU9DVExCQVNFX0VOQywgMTcsIHN0cnVjdCB2ZW5jX2lvY3RsX21zZykKLQotI2RlZmluZSBWRU5fSU9DVExfU0VUX0VOVFJPUFlfQ0ZHICAgX0lPVyhWRU5fSU9DVExCQVNFX0VOQywgMTgsIHN0cnVjdCB2ZW5jX2lvY3RsX21zZykKLSNkZWZpbmUgVkVOX0lPQ1RMX0dFVF9FTlRST1BZX0NGRyAgIF9JT1IoVkVOX0lPQ1RMQkFTRV9FTkMsIDE5LCBzdHJ1Y3QgdmVuY19pb2N0bF9tc2cpCi0KLSNkZWZpbmUgVkVOX0lPQ1RMX1NFVF9ERUJMT0NLSU5HX0NGRyAgIF9JT1coVkVOX0lPQ1RMQkFTRV9FTkMsIDIwLCBzdHJ1Y3QgdmVuY19pb2N0bF9tc2cpCi0jZGVmaW5lIFZFTl9JT0NUTF9HRVRfREVCTE9DS0lOR19DRkcgICBfSU9SKFZFTl9JT0NUTEJBU0VfRU5DLCAyMSwgc3RydWN0IHZlbmNfaW9jdGxfbXNnKQotCi0jZGVmaW5lIFZFTl9JT0NUTF9TRVRfSU5UUkFfUkVGUkVTSCAgIF9JT1coVkVOX0lPQ1RMQkFTRV9FTkMsIDIyLCBzdHJ1Y3QgdmVuY19pb2N0bF9tc2cpCi0jZGVmaW5lIFZFTl9JT0NUTF9HRVRfSU5UUkFfUkVGUkVTSCAgIF9JT1IoVkVOX0lPQ1RMQkFTRV9FTkMsIDIzLCBzdHJ1Y3QgdmVuY19pb2N0bF9tc2cpCi0KLSNkZWZpbmUgVkVOX0lPQ1RMX1NFVF9NVUxUSV9TTElDRV9DRkcgICBfSU9XKFZFTl9JT0NUTEJBU0VfRU5DLCAyNCwgc3RydWN0IHZlbmNfaW9jdGxfbXNnKQotI2RlZmluZSBWRU5fSU9DVExfR0VUX01VTFRJX1NMSUNFX0NGRyAgIF9JT1IoVkVOX0lPQ1RMQkFTRV9FTkMsIDI1LCBzdHJ1Y3QgdmVuY19pb2N0bF9tc2cpCi0KLSNkZWZpbmUgVkVOX0lPQ1RMX1NFVF9SQVRFX0NUUkxfQ0ZHICAgX0lPVyhWRU5fSU9DVExCQVNFX0VOQywgMjYsIHN0cnVjdCB2ZW5jX2lvY3RsX21zZykKLSNkZWZpbmUgVkVOX0lPQ1RMX0dFVF9SQVRFX0NUUkxfQ0ZHICAgX0lPUihWRU5fSU9DVExCQVNFX0VOQywgMjcsIHN0cnVjdCB2ZW5jX2lvY3RsX21zZykKLQotI2RlZmluZSBWRU5fSU9DVExfU0VUX1ZPUF9USU1JTkdfQ0ZHICAgX0lPVyhWRU5fSU9DVExCQVNFX0VOQywgMjgsIHN0cnVjdCB2ZW5jX2lvY3RsX21zZykKLSNkZWZpbmUgVkVOX0lPQ1RMX0dFVF9WT1BfVElNSU5HX0NGRyAgIF9JT1IoVkVOX0lPQ1RMQkFTRV9FTkMsIDI5LCBzdHJ1Y3QgdmVuY19pb2N0bF9tc2cpCi0KLSNkZWZpbmUgVkVOX0lPQ1RMX1NFVF9GUkFNRV9SQVRFICAgX0lPVyhWRU5fSU9DVExCQVNFX0VOQywgMzAsIHN0cnVjdCB2ZW5jX2lvY3RsX21zZykKLSNkZWZpbmUgVkVOX0lPQ1RMX0dFVF9GUkFNRV9SQVRFICAgX0lPUihWRU5fSU9DVExCQVNFX0VOQywgMzEsIHN0cnVjdCB2ZW5jX2lvY3RsX21zZykKLQotI2RlZmluZSBWRU5fSU9DVExfU0VUX1RBUkdFVF9CSVRSQVRFICAgX0lPVyhWRU5fSU9DVExCQVNFX0VOQywgMzIsIHN0cnVjdCB2ZW5jX2lvY3RsX21zZykKLSNkZWZpbmUgVkVOX0lPQ1RMX0dFVF9UQVJHRVRfQklUUkFURSAgIF9JT1IoVkVOX0lPQ1RMQkFTRV9FTkMsIDMzLCBzdHJ1Y3QgdmVuY19pb2N0bF9tc2cpCi0KLSNkZWZpbmUgVkVOX0lPQ1RMX1NFVF9ST1RBVElPTiAgIF9JT1coVkVOX0lPQ1RMQkFTRV9FTkMsIDM0LCBzdHJ1Y3QgdmVuY19pb2N0bF9tc2cpCi0jZGVmaW5lIFZFTl9JT0NUTF9HRVRfUk9UQVRJT04gICBfSU9SKFZFTl9JT0NUTEJBU0VfRU5DLCAzNSwgc3RydWN0IHZlbmNfaW9jdGxfbXNnKQotCi0jZGVmaW5lIFZFTl9JT0NUTF9TRVRfSEVDICAgX0lPVyhWRU5fSU9DVExCQVNFX0VOQywgMzYsIHN0cnVjdCB2ZW5jX2lvY3RsX21zZykKLSNkZWZpbmUgVkVOX0lPQ1RMX0dFVF9IRUMgICBfSU9SKFZFTl9JT0NUTEJBU0VfRU5DLCAzNywgc3RydWN0IHZlbmNfaW9jdGxfbXNnKQotCi0jZGVmaW5lIFZFTl9JT0NUTF9TRVRfREFUQV9QQVJUSVRJT04gICBfSU9XKFZFTl9JT0NUTEJBU0VfRU5DLCAzOCwgc3RydWN0IHZlbmNfaW9jdGxfbXNnKQotI2RlZmluZSBWRU5fSU9DVExfR0VUX0RBVEFfUEFSVElUSU9OICAgX0lPUihWRU5fSU9DVExCQVNFX0VOQywgMzksIHN0cnVjdCB2ZW5jX2lvY3RsX21zZykKLQotI2RlZmluZSBWRU5fSU9DVExfU0VUX1JWTEMgICBfSU9XKFZFTl9JT0NUTEJBU0VfRU5DLCA0MCwgc3RydWN0IHZlbmNfaW9jdGxfbXNnKQotI2RlZmluZSBWRU5fSU9DVExfR0VUX1JWTEMgICBfSU9SKFZFTl9JT0NUTEJBU0VfRU5DLCA0MSwgc3RydWN0IHZlbmNfaW9jdGxfbXNnKQotCi0jZGVmaW5lIFZFTl9JT0NUTF9TRVRfQUNfUFJFRElDVElPTiAgIF9JT1coVkVOX0lPQ1RMQkFTRV9FTkMsIDQyLCBzdHJ1Y3QgdmVuY19pb2N0bF9tc2cpCi0jZGVmaW5lIFZFTl9JT0NUTF9HRVRfQUNfUFJFRElDVElPTiAgIF9JT1IoVkVOX0lPQ1RMQkFTRV9FTkMsIDQzLCBzdHJ1Y3QgdmVuY19pb2N0bF9tc2cpCi0KLSNkZWZpbmUgVkVOX0lPQ1RMX1NFVF9RUF9SQU5HRSAgIF9JT1coVkVOX0lPQ1RMQkFTRV9FTkMsIDQ0LCBzdHJ1Y3QgdmVuY19pb2N0bF9tc2cpCi0jZGVmaW5lIFZFTl9JT0NUTF9HRVRfUVBfUkFOR0UgICBfSU9SKFZFTl9JT0NUTEJBU0VfRU5DLCA0NSwgc3RydWN0IHZlbmNfaW9jdGxfbXNnKQotCi1zdHJ1Y3QgdmVuY19zd2l0Y2h7Ci0gdW5zaWduZWQgY2hhciBzdGF0dXM7Ci19OwotCi1zdHJ1Y3QgdmVuY19hbGxvY2F0b3Jwcm9wZXJ0eXsKLSB1bnNpZ25lZCBsb25nIG1pbmNvdW50OwotIHVuc2lnbmVkIGxvbmcgbWF4Y291bnQ7Ci0gdW5zaWduZWQgbG9uZyBhY3R1YWxjb3VudDsKLSB1bnNpZ25lZCBsb25nIGRhdGFzaXplOwotIHVuc2lnbmVkIGxvbmcgc3VmZml4c2l6ZTsKLSB1bnNpZ25lZCBsb25nIGFsaWdubWVudDsKLSB1bnNpZ25lZCBsb25nIGJ1ZnBvb2xpZDsKLX07Ci0KLXN0cnVjdCB2ZW5jX2J1ZmZlcnBheWxvYWR7Ci0gdW5zaWduZWQgY2hhciAqcGJ1ZmZlcjsKLSB1bnNpZ25lZCBsb25nIG5zaXplOwotIGludCBmZDsKLSB1bnNpZ25lZCBpbnQgb2Zmc2V0OwotIHVuc2lnbmVkIGludCBtYXBlZF9zaXplOwotIHVuc2lnbmVkIGxvbmcgZmlsbGVkX2xlbjsKLX07Ci0KLXN0cnVjdCB2ZW5jX2J1ZmZlcnsKLSB1bnNpZ25lZCBjaGFyICpwdHJidWZmZXI7Ci0gdW5zaWduZWQgbG9uZyBzaXplOwotIHVuc2lnbmVkIGxvbmcgbGVuOwotIHVuc2lnbmVkIGxvbmcgb2Zmc2V0OwotIGxvbmcgbG9uZyB0aW1lc3RhbXA7Ci0gdW5zaWduZWQgbG9uZyBmbGFnczsKLSB2b2lkICpjbGllbnRkYXRhOwotfTsKLQotc3RydWN0IHZlbmNfYmFzZWNmZ3sKLSB1bnNpZ25lZCBsb25nIGlucHV0X3dpZHRoOwotIHVuc2lnbmVkIGxvbmcgaW5wdXRfaGVpZ2h0OwotIHVuc2lnbmVkIGxvbmcgZHZzX3dpZHRoOwotIHVuc2lnbmVkIGxvbmcgZHZzX2hlaWdodDsKLSB1bnNpZ25lZCBsb25nIGNvZGVjdHlwZTsKLSB1bnNpZ25lZCBsb25nIGZwc19udW07Ci0gdW5zaWduZWQgbG9uZyBmcHNfZGVuOwotIHVuc2lnbmVkIGxvbmcgdGFyZ2V0Yml0cmF0ZTsKLSB1bnNpZ25lZCBsb25nIGlucHV0Zm9ybWF0OwotfTsKLQotc3RydWN0IHZlbmNfcHJvZmlsZXsKLSB1bnNpZ25lZCBsb25nIHByb2ZpbGU7Ci19Owotc3RydWN0IHZlbl9wcm9maWxlbGV2ZWx7Ci0gdW5zaWduZWQgbG9uZyBsZXZlbDsKLX07Ci0KLXN0cnVjdCB2ZW5jX3Nlc3Npb25xcHsKLSB1bnNpZ25lZCBsb25nIGlmcmFtZXFwOwotIHVuc2lnbmVkIGxvbmcgcGZyYW1xcDsKLX07Ci0KLXN0cnVjdCB2ZW5jX3FwcmFuZ2V7Ci0gdW5zaWduZWQgbG9uZyBtYXhxcDsKLSB1bnNpZ25lZCBsb25nIG1pbnFwOwotfTsKLXN0cnVjdCB2ZW5jX2ludHJhcGVyaW9kewotIHVuc2lnbmVkIGxvbmcgbnVtX3BmcmFtZXM7Ci19Owotc3RydWN0IHZlbmNfc2VxaGVhZGVyewotIHVuc2lnbmVkIGNoYXIgKmhkcmJ1ZnB0cjsKLSB1bnNpZ25lZCBsb25nIGJ1ZnNpemU7Ci0gdW5zaWduZWQgbG9uZyBoZHJsZW47Ci19OwotCi1zdHJ1Y3QgdmVuY19jYXBhYmlsaXR5ewotIHVuc2lnbmVkIGxvbmcgY29kZWNfdHlwZXM7Ci0gdW5zaWduZWQgbG9uZyBtYXhmcmFtZV93aWR0aDsKLSB1bnNpZ25lZCBsb25nIG1heGZyYW1lX2hlaWdodDsKLSB1bnNpZ25lZCBsb25nIG1heHRhcmdldF9iaXRyYXRlOwotIHVuc2lnbmVkIGxvbmcgbWF4ZnJhbWVfcmF0ZTsKLSB1bnNpZ25lZCBsb25nIGlucHV0X2Zvcm1hdHM7Ci0gdW5zaWduZWQgY2hhciBkdnM7Ci19OwotCi1zdHJ1Y3QgdmVuY19lbnRyb3B5Y2ZnewotIHVuc2lnbmVkIGxvbmdlbnRyb3B5c2VsOwotIHVuc2lnbmVkIGxvbmcgY2FiYWNtb2RlbDsKLX07Ci0KLXN0cnVjdCB2ZW5jX2RiY2ZnewotIHVuc2lnbmVkIGxvbmcgZGJfbW9kZTsKLSB1bnNpZ25lZCBsb25nIHNsaWNlYWxwaGFfb2Zmc2V0OwotIHVuc2lnbmVkIGxvbmcgc2xpY2ViZXRhX29mZnNldDsKLX07Ci0KLXN0cnVjdCB2ZW5jX2ludHJhcmVmcmVzaHsKLSB1bnNpZ25lZCBsb25nIGlybW9kZTsKLSB1bnNpZ25lZCBsb25nIG1iY291bnQ7Ci19OwotCi1zdHJ1Y3QgdmVuY19tdWx0aWNsaWNlY2ZnewotIHVuc2lnbmVkIGxvbmcgbXNsaWNlX21vZGU7Ci0gdW5zaWduZWQgbG9uZyBtc2xpY2Vfc2l6ZTsKLX07Ci0KLXN0cnVjdCB2ZW5jX2J1ZmZlcmZsdXNoewotIHVuc2lnbmVkIGxvbmcgZmx1c2hfbW9kZTsKLX07Ci0KLXN0cnVjdCB2ZW5jX3JhdGVjdHJsY2ZnewotIHVuc2lnbmVkIGxvbmcgcmNtb2RlOwotfTsKLQotc3RydWN0IHZlbmNfdm9wdGltaW5nY2ZnewotIHVuc2lnbmVkIGxvbmcgdm9wdGltZV9yZXNvbHV0aW9uOwotfTsKLXN0cnVjdCB2ZW5jX2ZyYW1lcmF0ZXsKLSB1bnNpZ25lZCBsb25nIGZwc19kZW5vbWluYXRvcjsKLSB1bnNpZ25lZCBsb25nIGZwc19udW1lcmF0b3I7Ci19OwotCi1zdHJ1Y3QgdmVuY190YXJnZXRiaXRyYXRlewotIHVuc2lnbmVkIGxvbmcgdGFyZ2V0X2JpdHJhdGU7Ci19OwotCi1zdHJ1Y3QgdmVuY19yb3RhdGlvbnsKLSB1bnNpZ25lZCBsb25nIHJvdGF0aW9uOwotfTsKLQotc3RydWN0IHZlbmNfdGltZW91dHsKLSB1bnNpZ25lZCBsb25nIG1pbGxpc2VjOwotfTsKLQotc3RydWN0IHZlbmNfaGVhZGVyZXh0ZW5zaW9uewotIHVuc2lnbmVkIGxvbmcgaGVhZGVyX2V4dGVuc2lvbjsKLX07Ci0KLXN0cnVjdCB2ZW5jX21zZ3sKLSB1bnNpZ25lZCBsb25nIHN0YXR1c2NvZGU7Ci0gdW5zaWduZWQgbG9uZyBtc2djb2RlOwotIHN0cnVjdCB2ZW5jX2J1ZmZlciBidWY7Ci0gdW5zaWduZWQgbG9uZyBtc2dkYXRhX3NpemU7Ci19OwotI2VuZGlmCi0KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9tdDl0MDEzLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbXQ5dDAxMy5oCmluZGV4IDgyMWVmMjEuLmQ2NDBkZWUgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9tdDl0MDEzLmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L210OXQwMTMuaApAQCAtNywxMDUgKzcsOTkgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIENBTUVSQV9NVDlUMDEzX0gKICNkZWZpbmUgQ0FNRVJBX01UOVQwMTNfSAogI2luY2x1ZGUgPGxpbnV4L2NkZXYuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgogI2luY2x1ZGUgPGFzbS9zaXplcy5oPgotCiAjZGVmaW5lIE1UOVQwMTNfSTJDX0lPQ1RMX01BR0lDICdtJwotCiAjZGVmaW5lIE1UOVQwMTNfSTJDX0lPQ1RMX1cgICBfSU9XKE1UOVQwMTNfSTJDX0lPQ1RMX01BR0lDLCAwLCB1bnNpZ25lZCkKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTVQ5VDAxM19JMkNfSU9DVExfUiAgIF9JT1IoTVQ5VDAxM19JMkNfSU9DVExfTUFHSUMsIDEsIHVuc2lnbmVkKQotCiAjZGVmaW5lIE1UOVQwMTNfSTJDX0lPQ1RMX0FGX1cgICBfSU9XKE1UOVQwMTNfSTJDX0lPQ1RMX01BR0lDLCAyLCB1bnNpZ25lZCkKLQogI2RlZmluZSBNVDlUMDEzX0kyQ19JT0NUTF9DQU1JRl9QQURfUkVHX1JFU0VUICAgX0lPKE1UOVQwMTNfSTJDX0lPQ1RMX01BR0lDLCAzKQotCiAjZGVmaW5lIE1UOVQwMTNfSTJDX0lPQ1RMX0NBTUlGX1BBRF9SRUdfUkVTRVRfMiAgIF9JTyhNVDlUMDEzX0kyQ19JT0NUTF9NQUdJQywgNCkKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQ0FNRVJBX0NPTkZJR1VSRV9HUElPUyAgIF9JTyhNVDlUMDEzX0kyQ19JT0NUTF9NQUdJQywgNykKLQogI2RlZmluZSBDQU1FUkFfVU5DT05GSUdVUkVfR1BJT1MgICBfSU8oTVQ5VDAxM19JMkNfSU9DVExfTUFHSUMsIDgpCi0KICNkZWZpbmUgQ0FNRVJBX0xFTlNfUE9XRVJfT04gICBfSU8oTVQ5VDAxM19JMkNfSU9DVExfTUFHSUMsIDkpCi0KICNkZWZpbmUgQ0FNRVJBX0xFTlNfUE9XRVJfT0ZGICAgX0lPKE1UOVQwMTNfSTJDX0lPQ1RMX01BR0lDLCAxMCkKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTVQ5VDAxM19JMkNfSU9DVExfQ0FNSUZfQVBQU19SRVNFVCAgIF9JTyhNVDlUMDEzX0kyQ19JT0NUTF9NQUdJQywgMTEpCi0KLSNkZWZpbmUgQ0FNSU9fVkZFX01EQ19DTEsgMSAgCi0jZGVmaW5lIENBTUlPX01EQ19DTEsgMiAgCi0jZGVmaW5lIENBTUlPX1ZGRV9DTEsgMyAgCi0KKyNkZWZpbmUgQ0FNSU9fVkZFX01EQ19DTEsgMQorI2RlZmluZSBDQU1JT19NRENfQ0xLIDIKKyNkZWZpbmUgQ0FNSU9fVkZFX0NMSyAzCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNVDlUMDEzX0kyQ19JT0NUTF9DTEtfRU5BQkxFICAgX0lPVyhNVDlUMDEzX0kyQ19JT0NUTF9NQUdJQywgMTIsIHVuc2lnbmVkKQotCiAjZGVmaW5lIE1UOVQwMTNfSTJDX0lPQ1RMX0NMS19ESVNBQkxFICAgX0lPVyhNVDlUMDEzX0kyQ19JT0NUTF9NQUdJQywgMTMsIHVuc2lnbmVkKQotCiAjZGVmaW5lIE1UOVQwMTNfSTJDX0lPQ1RMX0NMS19TRUxFQ1QgICBfSU9XKE1UOVQwMTNfSTJDX0lPQ1RMX01BR0lDLCAxNCwgdW5zaWduZWQpCi0KICNkZWZpbmUgTVQ5VDAxM19JMkNfSU9DVExfQ0xLX0ZSRVFfUFJPRyAgIF9JT1coTVQ5VDAxM19JMkNfSU9DVExfTUFHSUMsIDE1LCB1bnNpZ25lZCkKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQ0FNU0VOU09SX1JFR19JTklUIDA8PDAKICNkZWZpbmUgQ0FNU0VOU09SX1JFR19VUERBVEVfUEVSSU9ESUMgMTw8MAogI2RlZmluZSBDQU1TRU5TT1JfVFlQRV9QUkVWSUVXIDA8PDEKICNkZWZpbmUgQ0FNU0VOU09SX1RZUEVfU05BUFNIT1QgMTw8MQotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNVDlUMDEzX0kyQ19JT0NUTF9TRU5TT1JfU0VUVElORyAgIF9JT1coTVQ5VDAxM19JMkNfSU9DVExfTUFHSUMsIDE2LCB1aW50MzJfdCkKLQogc3RydWN0IG10OXQwMTNfcmVnX3N0cnVjdAogewogIHVpbnQxNl90IHZ0X3BpeF9jbGtfZGl2OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1aW50MTZfdCB2dF9zeXNfY2xrX2RpdjsKICB1aW50MTZfdCBwcmVfcGxsX2Nsa19kaXY7CiAgdWludDE2X3QgcGxsX211bHRpcGxpZXI7CiAgdWludDE2X3Qgb3BfcGl4X2Nsa19kaXY7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVpbnQxNl90IG9wX3N5c19jbGtfZGl2OwogIHVpbnQxNl90IHNjYWxlX207CiAgdWludDE2X3Qgcm93X3NwZWVkOwogIHVpbnQxNl90IHhfYWRkcl9zdGFydDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdWludDE2X3QgeF9hZGRyX2VuZDsKICB1aW50MTZfdCB5X2FkZHJfc3RhcnQ7CiAgdWludDE2X3QgeV9hZGRyX2VuZDsKICB1aW50MTZfdCByZWFkX21vZGU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVpbnQxNl90IHhfb3V0cHV0X3NpemUgOwogIHVpbnQxNl90IHlfb3V0cHV0X3NpemU7CiAgdWludDE2X3QgbGluZV9sZW5ndGhfcGNrOwogIHVpbnQxNl90IGZyYW1lX2xlbmd0aF9saW5lczsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdWludDE2X3QgY29hcnNlX2ludGVncmF0aW9uX3RpbWU7CiAgdWludDE2X3QgZmluZV9pbnRlZ3JhdGlvbl90aW1lOwogfTsKLQogc3RydWN0IG10OXQwMTNfcmVnX3BhdCB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCBtdDl0MDEzX3JlZ19zdHJ1Y3QgcmVnWzJdOwogfTsKLQogI2RlZmluZSBNVDlUMDEzX0kyQ19JT0NUTF9HRVRfUkVHSVNURVJTICAgX0lPUihNVDlUMDEzX0kyQ19JT0NUTF9NQUdJQywgMTcsIHN0cnVjdCBtdDl0MDEzX3JlZ19wYXQgKikKLQogc3RydWN0IG10OXQwMTNfZXhwb3N1cmVfZ2FpbiB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVpbnQxNl90IGdhaW47CiAgdWludDE2X3QgbGluZTsKICB1aW50MzJfdCBtb2RlOwogfTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTVQ5VDAxM19JMkNfSU9DVExfRVhQT1NVUkVfR0FJTiAgIF9JT1coTVQ5VDAxM19JMkNfSU9DVExfTUFHSUMsIDE4LCBzdHJ1Y3QgZXhwb3N1cmVfZ2FpbiAqKQotCiAjZGVmaW5lIE1UOVQwMTNfSTJDX0lPQ1RMX01PVkVfRk9DVVMgICBfSU9XKE1UOVQwMTNfSTJDX0lPQ1RMX01BR0lDLCAxOSwgdWludDMyX3QpCi0KICNkZWZpbmUgTVQ5VDAxM19JMkNfSU9DVExfU0VUX0RFRkFVTFRfRk9DVVMgICBfSU9XKE1UOVQwMTNfSTJDX0lPQ1RMX01BR0lDLCAyMCwgdWludDMyX3QpCi0KICNkZWZpbmUgTVQ5VDAxM19JMkNfSU9DVExfUE9XRVJfRE9XTiAgIF9JTyhNVDlUMDEzX0kyQ19JT0NUTF9NQUdJQywgMjEpCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgbXQ5dDAxM19pbml0IHsKICBpbnQgcHJldmlldzsKICB1aW50MTZfdCBjaGlwaWQ7CiB9OwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNVDlUMDEzX0kyQ19JT0NUTF9JTklUICAgX0lPV1IoTVQ5VDAxM19JMkNfSU9DVExfTUFHSUMsIDIyLCBzdHJ1Y3QgbXQ5dDAxM19pbml0ICopCi0KICNlbmRpZgotCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbXRkL2JibS5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L210ZC9iYm0uaAppbmRleCBlMzExYjIzLi5jZGUzOTAzIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbXRkL2JibS5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9tdGQvYmJtLmgKQEAgLTcsNjkgKzcsNjQgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9fTElOVVhfTVREX0JCTV9ICiAjZGVmaW5lIF9fTElOVVhfTVREX0JCTV9ICi0KICNkZWZpbmUgTkFORF9NQVhfQ0hJUFMgOAotCiBzdHJ1Y3QgbmFuZF9iYnRfZGVzY3IgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBpbnQgb3B0aW9uczsKICBpbnQgcGFnZXNbTkFORF9NQVhfQ0hJUFNdOwogIGludCBvZmZzOwogIGludCB2ZXJvZmZzOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1aW50OF90IHZlcnNpb25bTkFORF9NQVhfQ0hJUFNdOwogIGludCBsZW47CiAgaW50IG1heGJsb2NrczsKICBpbnQgcmVzZXJ2ZWRfYmxvY2tfY29kZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdWludDhfdCAqcGF0dGVybjsKIH07Ci0KICNkZWZpbmUgTkFORF9CQlRfTlJCSVRTX01TSyAweDAwMDAwMDBGCiAjZGVmaW5lIE5BTkRfQkJUXzFCSVQgMHgwMDAwMDAwMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTkFORF9CQlRfMkJJVCAweDAwMDAwMDAyCiAjZGVmaW5lIE5BTkRfQkJUXzRCSVQgMHgwMDAwMDAwNAogI2RlZmluZSBOQU5EX0JCVF84QklUIDB4MDAwMDAwMDgKLQogI2RlZmluZSBOQU5EX0JCVF9MQVNUQkxPQ0sgMHgwMDAwMDAxMAotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBOQU5EX0JCVF9BQlNQQUdFIDB4MDAwMDAwMjAKLQogI2RlZmluZSBOQU5EX0JCVF9TRUFSQ0ggMHgwMDAwMDA0MAotCiAjZGVmaW5lIE5BTkRfQkJUX1BFUkNISVAgMHgwMDAwMDA4MAotCiAjZGVmaW5lIE5BTkRfQkJUX1ZFUlNJT04gMHgwMDAwMDEwMAotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBOQU5EX0JCVF9DUkVBVEUgMHgwMDAwMDIwMAotCiAjZGVmaW5lIE5BTkRfQkJUX1NDQU5BTExQQUdFUyAweDAwMDAwNDAwCi0KICNkZWZpbmUgTkFORF9CQlRfU0NBTkVNUFRZIDB4MDAwMDA4MDAKLQogI2RlZmluZSBOQU5EX0JCVF9XUklURSAweDAwMDAxMDAwCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE5BTkRfQkJUX1NBVkVDT05URU5UIDB4MDAwMDIwMDAKLQogI2RlZmluZSBOQU5EX0JCVF9TQ0FOMk5EUEFHRSAweDAwMDA0MDAwCi0KICNkZWZpbmUgTkFORF9CQlRfU0NBTl9NQVhCTE9DS1MgNAotCiAjZGVmaW5lIE9ORU5BTkRfQkFEQkxPQ0tfUE9TIDAKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBiYm1faW5mbyB7CiAgaW50IGJidF9lcmFzZV9zaGlmdDsKICBpbnQgYmFkYmxvY2twb3M7CiAgaW50IG9wdGlvbnM7Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdWludDhfdCAqYmJ0OwotCiAgaW50ICgqaXNiYWRfYmJ0KShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IG9mcywgaW50IGFsbG93YmJ0KTsKLQogIHN0cnVjdCBuYW5kX2JidF9kZXNjciAqYmFkYmxvY2tfcGF0dGVybjsKLQogIHZvaWQgKnByaXY7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKLQogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbXRkL2Jsa3RyYW5zLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbXRkL2Jsa3RyYW5zLmgKaW5kZXggN2M0MDcyNC4uZTI1ODY5OCAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L210ZC9ibGt0cmFucy5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9tdGQvYmxrdHJhbnMuaApAQCAtNyw1NyArNyw2MiBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX19NVERfVFJBTlNfSF9fCiAjZGVmaW5lIF9fTVREX1RSQU5TX0hfXwotCiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KLQogc3RydWN0IGhkX2dlb21ldHJ5OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBtdGRfaW5mbzsKIHN0cnVjdCBtdGRfYmxrdHJhbnNfb3BzOwogc3RydWN0IGZpbGU7CiBzdHJ1Y3QgaW5vZGU7Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgbXRkX2Jsa3RyYW5zX2RldiB7CiAgc3RydWN0IG10ZF9ibGt0cmFuc19vcHMgKnRyOwogIHN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKICBzdHJ1Y3QgbXRkX2luZm8gKm10ZDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IG11dGV4IGxvY2s7CiAgaW50IGRldm51bTsKICBpbnQgYmxrc2l6ZTsKICB1bnNpZ25lZCBsb25nIHNpemU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGludCByZWFkb25seTsKICB2b2lkICpibGtjb3JlX3ByaXY7CiB9OwotCiBzdHJ1Y3QgYmxrY29yZV9wcml2OwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IG10ZF9ibGt0cmFuc19vcHMgewogIGNoYXIgKm5hbWU7CiAgaW50IG1ham9yOwogIGludCBwYXJ0X2JpdHM7Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgaW50ICgqcmVhZHNlY3QpKHN0cnVjdCBtdGRfYmxrdHJhbnNfZGV2ICpkZXYsCiAgdW5zaWduZWQgbG9uZyBibG9jaywgY2hhciAqYnVmZmVyKTsKICBpbnQgKCp3cml0ZXNlY3QpKHN0cnVjdCBtdGRfYmxrdHJhbnNfZGV2ICpkZXYsCiAgdW5zaWduZWQgbG9uZyBibG9jaywgY2hhciAqYnVmZmVyKTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBpbnQgKCpnZXRnZW8pKHN0cnVjdCBtdGRfYmxrdHJhbnNfZGV2ICpkZXYsIHN0cnVjdCBoZF9nZW9tZXRyeSAqZ2VvKTsKICBpbnQgKCpmbHVzaCkoc3RydWN0IG10ZF9ibGt0cmFuc19kZXYgKmRldik7Ci0KICBpbnQgKCpvcGVuKShzdHJ1Y3QgbXRkX2Jsa3RyYW5zX2RldiAqZGV2KTsKICBpbnQgKCpyZWxlYXNlKShzdHJ1Y3QgbXRkX2Jsa3RyYW5zX2RldiAqZGV2KTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB2b2lkICgqYWRkX210ZCkoc3RydWN0IG10ZF9ibGt0cmFuc19vcHMgKnRyLCBzdHJ1Y3QgbXRkX2luZm8gKm10ZCk7CiAgdm9pZCAoKnJlbW92ZV9kZXYpKHN0cnVjdCBtdGRfYmxrdHJhbnNfZGV2ICpkZXYpOwotCiAgc3RydWN0IGxpc3RfaGVhZCBkZXZzOwogIHN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IG1vZHVsZSAqb3duZXI7Ci0KICBzdHJ1Y3QgbXRkX2Jsa2NvcmVfcHJpdiAqYmxrY29yZV9wcml2OwogfTsKLQogI2VuZGlmCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L210ZC9jZmkuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9tdGQvY2ZpLmgKaW5kZXggZDdmMWJhMS4uMjA5NTJjYSAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L210ZC9jZmkuaAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbXRkL2NmaS5oCkBAIC03LDE4MSArNywyMzMgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9fTVREX0NGSV9IX18KICNkZWZpbmUgX19NVERfQ0ZJX0hfXwotCiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvZmxhc2hjaGlwLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL21hcC5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9jZmlfZW5kaWFuLmg+Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIGNmaV9pbnRlcmxlYXZlX2lzXzEoY2ZpKSAoMCkKLQogI2RlZmluZSBjZmlfaW50ZXJsZWF2ZV9pc18yKGNmaSkgKDApCi0KICNkZWZpbmUgY2ZpX2ludGVybGVhdmVfaXNfNChjZmkpICgwKQotCiAjZGVmaW5lIGNmaV9pbnRlcmxlYXZlX2lzXzgoY2ZpKSAoMCkKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQ0ZJX0RFVklDRVRZUEVfWDggKDggLyA4KQogI2RlZmluZSBDRklfREVWSUNFVFlQRV9YMTYgKDE2IC8gOCkKICNkZWZpbmUgQ0ZJX0RFVklDRVRZUEVfWDMyICgzMiAvIDgpCiAjZGVmaW5lIENGSV9ERVZJQ0VUWVBFX1g2NCAoNjQgLyA4KQotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworc3RydWN0IGNmaV9pZGVudCB7CisgdWludDhfdCBxcnlbM107CisgdWludDE2X3QgUF9JRDsKKyB1aW50MTZfdCBQX0FEUjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgdWludDE2X3QgQV9JRDsKKyB1aW50MTZfdCBBX0FEUjsKKyB1aW50OF90IFZjY01pbjsKKyB1aW50OF90IFZjY01heDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgdWludDhfdCBWcHBNaW47CisgdWludDhfdCBWcHBNYXg7CisgdWludDhfdCBXb3JkV3JpdGVUaW1lb3V0VHlwOworIHVpbnQ4X3QgQnVmV3JpdGVUaW1lb3V0VHlwOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyB1aW50OF90IEJsb2NrRXJhc2VUaW1lb3V0VHlwOworIHVpbnQ4X3QgQ2hpcEVyYXNlVGltZW91dFR5cDsKKyB1aW50OF90IFdvcmRXcml0ZVRpbWVvdXRNYXg7CisgdWludDhfdCBCdWZXcml0ZVRpbWVvdXRNYXg7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIHVpbnQ4X3QgQmxvY2tFcmFzZVRpbWVvdXRNYXg7CisgdWludDhfdCBDaGlwRXJhc2VUaW1lb3V0TWF4OworIHVpbnQ4X3QgRGV2U2l6ZTsKKyB1aW50MTZfdCBJbnRlcmZhY2VEZXNjOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyB1aW50MTZfdCBNYXhCdWZXcml0ZVNpemU7CisgdWludDhfdCBOdW1FcmFzZVJlZ2lvbnM7CisgdWludDMyX3QgRXJhc2VSZWdpb25JbmZvWzBdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgY2ZpX2V4dHF1ZXJ5IHsKICB1aW50OF90IHByaVszXTsKICB1aW50OF90IE1ham9yVmVyc2lvbjsKICB1aW50OF90IE1pbm9yVmVyc2lvbjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwotCiBzdHJ1Y3QgY2ZpX3ByaV9pbnRlbGV4dCB7CiAgdWludDhfdCBwcmlbM107CiAgdWludDhfdCBNYWpvclZlcnNpb247CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVpbnQ4X3QgTWlub3JWZXJzaW9uOwogIHVpbnQzMl90IEZlYXR1cmVTdXBwb3J0OwogIHVpbnQ4X3QgU3VzcGVuZENtZFN1cHBvcnQ7CiAgdWludDE2X3QgQmxrU3RhdHVzUmVnTWFzazsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdWludDhfdCBWY2NPcHRpbWFsOwogIHVpbnQ4X3QgVnBwT3B0aW1hbDsKICB1aW50OF90IE51bVByb3RlY3Rpb25GaWVsZHM7CiAgdWludDE2X3QgUHJvdFJlZ0FkZHI7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVpbnQ4X3QgRmFjdFByb3RSZWdTaXplOwogIHVpbnQ4X3QgVXNlclByb3RSZWdTaXplOwogIHVpbnQ4X3QgZXh0cmFbMF07CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IGNmaV9pbnRlbGV4dF9vdHBpbmZvIHsKICB1aW50MzJfdCBQcm90UmVnQWRkcjsKICB1aW50MTZfdCBGYWN0R3JvdXBzOwogIHVpbnQ4X3QgRmFjdFByb3RSZWdTaXplOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1aW50MTZfdCBVc2VyR3JvdXBzOwogIHVpbnQ4X3QgVXNlclByb3RSZWdTaXplOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKLQogc3RydWN0IGNmaV9pbnRlbGV4dF9ibG9ja2luZm8geworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1aW50MTZfdCBOdW1JZGVudEJsb2NrczsKICB1aW50MTZfdCBCbG9ja1NpemU7CiAgdWludDE2X3QgTWluQmxvY2tFcmFzZUN5Y2xlczsKICB1aW50OF90IEJpdHNQZXJDZWxsOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1aW50OF90IEJsb2NrQ2FwOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKLQogc3RydWN0IGNmaV9pbnRlbGV4dF9yZWdpb25pbmZvIHsKICB1aW50MTZfdCBOdW1JZGVudFBhcnRpdGlvbnM7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVpbnQ4X3QgTnVtT3BBbGxvd2VkOwogIHVpbnQ4X3QgTnVtT3BBbGxvd2VkU2ltUHJvZ01vZGU7CiAgdWludDhfdCBOdW1PcEFsbG93ZWRTaW1FcmFNb2RlOwogIHVpbnQ4X3QgTnVtQmxvY2tUeXBlczsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IGNmaV9pbnRlbGV4dF9ibG9ja2luZm8gQmxvY2tUeXBlc1sxXTsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Ci0KIHN0cnVjdCBjZmlfaW50ZWxleHRfcHJvZ3JhbW1pbmdfcmVnaW9uaW5mbyB7CiAgdWludDhfdCBQcm9nUmVnU2hpZnQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVpbnQ4X3QgUmVzZXJ2ZWQxOwogIHVpbnQ4X3QgQ29udHJvbFZhbGlkOwogIHVpbnQ4X3QgUmVzZXJ2ZWQyOwogIHVpbnQ4X3QgQ29udHJvbEludmFsaWQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVpbnQ4X3QgUmVzZXJ2ZWQzOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKLQogc3RydWN0IGNmaV9wcmlfYW1kc3RkIHsKICB1aW50OF90IHByaVszXTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdWludDhfdCBNYWpvclZlcnNpb247CiAgdWludDhfdCBNaW5vclZlcnNpb247CiAgdWludDhfdCBTaWxpY29uUmV2aXNpb247CiAgdWludDhfdCBFcmFzZVN1c3BlbmQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVpbnQ4X3QgQmxrUHJvdDsKICB1aW50OF90IFRtcEJsa1VucHJvdGVjdDsKICB1aW50OF90IEJsa1Byb3RVbnByb3Q7CiAgdWludDhfdCBTaW11bHRhbmVvdXNPcHM7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVpbnQ4X3QgQnVyc3RNb2RlOwogIHVpbnQ4X3QgUGFnZU1vZGU7CiAgdWludDhfdCBWcHBNaW47CiAgdWludDhfdCBWcHBNYXg7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVpbnQ4X3QgVG9wQm90dG9tOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKLQogc3RydWN0IGNmaV9wcmlfYXRtZWwgewogIHVpbnQ4X3QgcHJpWzNdOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1aW50OF90IE1ham9yVmVyc2lvbjsKICB1aW50OF90IE1pbm9yVmVyc2lvbjsKICB1aW50OF90IEZlYXR1cmVzOwogIHVpbnQ4X3QgQm90dG9tQm9vdDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdWludDhfdCBCdXJzdE1vZGU7CiAgdWludDhfdCBQYWdlTW9kZTsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Ci0KIHN0cnVjdCBjZmlfcHJpX3F1ZXJ5IHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdWludDhfdCBOdW1GaWVsZHM7CiAgdWludDMyX3QgUHJvdEZpZWxkWzFdOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKLQogc3RydWN0IGNmaV9icmlfcXVlcnkgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1aW50OF90IFBhZ2VNb2RlUmVhZENhcDsKICB1aW50OF90IE51bUZpZWxkczsKICB1aW50MzJfdCBDb25mRmllbGRbMV07CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQX0lEX05PTkUgMHgwMDAwCiAjZGVmaW5lIFBfSURfSU5URUxfRVhUIDB4MDAwMQogI2RlZmluZSBQX0lEX0FNRF9TVEQgMHgwMDAyCiAjZGVmaW5lIFBfSURfSU5URUxfU1REIDB4MDAwMworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUF9JRF9BTURfRVhUIDB4MDAwNAogI2RlZmluZSBQX0lEX1dJTkJPTkQgMHgwMDA2CiAjZGVmaW5lIFBfSURfU1RfQURWIDB4MDAyMAogI2RlZmluZSBQX0lEX01JVFNVQklTSElfU1REIDB4MDEwMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUF9JRF9NSVRTVUJJU0hJX0VYVCAweDAxMDEKICNkZWZpbmUgUF9JRF9TU1RfUEFHRSAweDAxMDIKICNkZWZpbmUgUF9JRF9JTlRFTF9QRVJGT1JNQU5DRSAweDAyMDAKICNkZWZpbmUgUF9JRF9JTlRFTF9EQVRBIDB4MDIxMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUF9JRF9SRVNFUlZFRCAweGZmZmYKLQogI2RlZmluZSBDRklfTU9ERV9DRkkgMQogI2RlZmluZSBDRklfTU9ERV9KRURFQyAwCi0KIHN0cnVjdCBjZmlfcHJpdmF0ZSB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVpbnQxNl90IGNtZHNldDsKICB2b2lkICpjbWRzZXRfcHJpdjsKICBpbnQgaW50ZXJsZWF2ZTsKICBpbnQgZGV2aWNlX3R5cGU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGludCBjZmlfbW9kZTsKICBpbnQgYWRkcl91bmxvY2sxOwogIGludCBhZGRyX3VubG9jazI7CiAgc3RydWN0IG10ZF9pbmZvICooKmNtZHNldF9zZXR1cCkoc3RydWN0IG1hcF9pbmZvICopOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgY2ZpX2lkZW50ICpjZmlxOwogIGludCBtZnIsIGlkOwogIGludCBudW1jaGlwczsKICB1bnNpZ25lZCBsb25nIGNoaXBzaGlmdDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgY29uc3QgY2hhciAqaW1fbmFtZTsKICBzdHJ1Y3QgZmxjaGlwIGNoaXBzWzBdOwogfTsKLQogI2lmIEJJVFNfUEVSX0xPTkcgPj0gNjQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZW5kaWYKICNkZWZpbmUgQ01EKHgpIGNmaV9idWlsZF9jbWQoKHgpLCBtYXAsIGNmaSkKICNpZiBCSVRTX1BFUl9MT05HID49IDY0CiAjZW5kaWYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1FUkdFU1RBVFVTKHgpIGNmaV9tZXJnZV9zdGF0dXMoKHgpLCBtYXAsIGNmaSkKLQorc3RydWN0IGNmaV9leHRxdWVyeSAqY2ZpX3JlYWRfcHJpKHN0cnVjdCBtYXBfaW5mbyAqbWFwLCB1aW50MTZfdCBhZHIsIHVpbnQxNl90IHNpemUsCisgY29uc3QgY2hhciogbmFtZSk7CiBzdHJ1Y3QgY2ZpX2ZpeHVwIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdWludDE2X3QgbWZyOwogIHVpbnQxNl90IGlkOwogIHZvaWQgKCpmaXh1cCkoc3RydWN0IG10ZF9pbmZvICptdGQsIHZvaWQqIHBhcmFtKTsKICB2b2lkKiBwYXJhbTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwotCiAjZGVmaW5lIENGSV9NRlJfQU5ZIDB4ZmZmZgogI2RlZmluZSBDRklfSURfQU5ZIDB4ZmZmZgotCiAjZGVmaW5lIENGSV9NRlJfQU1EIDB4MDAwMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQ0ZJX01GUl9BVE1FTCAweDAwMUYKLSNkZWZpbmUgQ0ZJX01GUl9TVCAweDAwMjAgIAotCisjZGVmaW5lIENGSV9NRlJfU1QgMHgwMDIwCiB0eXBlZGVmIGludCAoKnZhcnNpemVfZnJvYl90KShzdHJ1Y3QgbWFwX2luZm8gKm1hcCwgc3RydWN0IGZsY2hpcCAqY2hpcCwKICB1bnNpZ25lZCBsb25nIGFkciwgaW50IGxlbiwgdm9pZCAqdGh1bmspOwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbXRkL2NmaV9lbmRpYW4uaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9tdGQvY2ZpX2VuZGlhbi5oCmluZGV4IDQ1MjA5MWUuLjQ2YWI1ZGMgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9tdGQvY2ZpX2VuZGlhbi5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9tdGQvY2ZpX2VuZGlhbi5oCkBAIC03LDM5ICs3LDUyIEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KLQogI2RlZmluZSBDRklfSE9TVF9FTkRJQU4KLQogI2lmZGVmIENGSV9MSVRUTEVfRU5ESUFOCiAjZGVmaW5lIGNwdV90b19jZmk4KHgpICh4KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgY2ZpOF90b19jcHUoeCkgKHgpCiAjZGVmaW5lIGNwdV90b19jZmkxNih4KSBjcHVfdG9fbGUxNih4KQogI2RlZmluZSBjcHVfdG9fY2ZpMzIoeCkgY3B1X3RvX2xlMzIoeCkKICNkZWZpbmUgY3B1X3RvX2NmaTY0KHgpIGNwdV90b19sZTY0KHgpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBjZmkxNl90b19jcHUoeCkgbGUxNl90b19jcHUoeCkKICNkZWZpbmUgY2ZpMzJfdG9fY3B1KHgpIGxlMzJfdG9fY3B1KHgpCiAjZGVmaW5lIGNmaTY0X3RvX2NwdSh4KSBsZTY0X3RvX2NwdSh4KQogI2VsaWYgZGVmaW5lZCAoQ0ZJX0JJR19FTkRJQU4pCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBjcHVfdG9fY2ZpOCh4KSAoeCkKICNkZWZpbmUgY2ZpOF90b19jcHUoeCkgKHgpCiAjZGVmaW5lIGNwdV90b19jZmkxNih4KSBjcHVfdG9fYmUxNih4KQogI2RlZmluZSBjcHVfdG9fY2ZpMzIoeCkgY3B1X3RvX2JlMzIoeCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIGNwdV90b19jZmk2NCh4KSBjcHVfdG9fYmU2NCh4KQogI2RlZmluZSBjZmkxNl90b19jcHUoeCkgYmUxNl90b19jcHUoeCkKICNkZWZpbmUgY2ZpMzJfdG9fY3B1KHgpIGJlMzJfdG9fY3B1KHgpCiAjZGVmaW5lIGNmaTY0X3RvX2NwdSh4KSBiZTY0X3RvX2NwdSh4KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlbGlmIGRlZmluZWQgKENGSV9IT1NUX0VORElBTikKICNkZWZpbmUgY3B1X3RvX2NmaTgoeCkgKHgpCiAjZGVmaW5lIGNmaThfdG9fY3B1KHgpICh4KQogI2RlZmluZSBjcHVfdG9fY2ZpMTYoeCkgKHgpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBjcHVfdG9fY2ZpMzIoeCkgKHgpCiAjZGVmaW5lIGNwdV90b19jZmk2NCh4KSAoeCkKICNkZWZpbmUgY2ZpMTZfdG9fY3B1KHgpICh4KQogI2RlZmluZSBjZmkzMl90b19jcHUoeCkgKHgpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBjZmk2NF90b19jcHUoeCkgKHgpCiAjZWxzZQogI2Vycm9yIE5vIENGSSBlbmRpYW5uZXNzIGRlZmluZWQKICNlbmRpZgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9tdGQvY29tcGF0bWFjLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbXRkL2NvbXBhdG1hYy5oCmluZGV4IDE0M2Y0NmEuLjI0OTA0Y2UgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9tdGQvY29tcGF0bWFjLmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L210ZC9jb21wYXRtYWMuaApAQCAtNyw5ICs3LDE1IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfX0xJTlVYX01URF9DT01QQVRNQUNfSF9fCiAjZGVmaW5lIF9fTElOVVhfTVREX0NPTVBBVE1BQ19IX18KLQogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbXRkL2ZsYXNoY2hpcC5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L210ZC9mbGFzaGNoaXAuaAppbmRleCBlNDQxMDQ4Li45MWVhZWE4IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbXRkL2ZsYXNoY2hpcC5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9tdGQvZmxhc2hjaGlwLmgKQEAgLTcsNjIgKzcsNzIgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9fTVREX0ZMQVNIQ0hJUF9IX18KICNkZWZpbmUgX19NVERfRkxBU0hDSElQX0hfXwotCiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLQogdHlwZWRlZiBlbnVtIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgRkxfUkVBRFksCiAgRkxfU1RBVFVTLAogIEZMX0NGSV9RVUVSWSwKICBGTF9KRURFQ19RVUVSWSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgRkxfRVJBU0lORywKICBGTF9FUkFTRV9TVVNQRU5ESU5HLAogIEZMX0VSQVNFX1NVU1BFTkRFRCwKICBGTF9XUklUSU5HLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBGTF9XUklUSU5HX1RPX0JVRkZFUiwKICBGTF9PVFBfV1JJVEUsCiAgRkxfV1JJVEVfU1VTUEVORElORywKICBGTF9XUklURV9TVVNQRU5ERUQsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIEZMX1BNX1NVU1BFTkRFRCwKICBGTF9TWU5DSU5HLAogIEZMX1VOTE9BRElORywKICBGTF9MT0NLSU5HLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBGTF9VTkxPQ0tJTkcsCiAgRkxfUE9JTlQsCiAgRkxfWElQX1dISUxFX0VSQVNJTkcsCiAgRkxfWElQX1dISUxFX1dSSVRJTkcsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIEZMX1VOS05PV04KIH0gZmxzdGF0ZV90OwotCiBzdHJ1Y3QgZmxjaGlwIHsKICB1bnNpZ25lZCBsb25nIHN0YXJ0OwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGludCByZWZfcG9pbnRfY291bnRlcjsKICBmbHN0YXRlX3Qgc3RhdGU7CiAgZmxzdGF0ZV90IG9sZHN0YXRlOwotCiAgdW5zaWduZWQgaW50IHdyaXRlX3N1c3BlbmRlZDoxOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBpbnQgZXJhc2Vfc3VzcGVuZGVkOjE7CiAgdW5zaWduZWQgbG9uZyBpbl9wcm9ncmVzc19ibG9ja19hZGRyOwotCiAgc3BpbmxvY2tfdCAqbXV0ZXg7CiAgc3BpbmxvY2tfdCBfc3BpbmxvY2s7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHdhaXRfcXVldWVfaGVhZF90IHdxOwogIGludCB3b3JkX3dyaXRlX3RpbWU7CiAgaW50IGJ1ZmZlcl93cml0ZV90aW1lOwogIGludCBlcmFzZV90aW1lOwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHZvaWQgKnByaXY7CiB9OwotCiBzdHJ1Y3QgZmxjaGlwX3NoYXJlZCB7CiAgc3BpbmxvY2tfdCBsb2NrOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgZmxjaGlwICp3cml0aW5nOwogIHN0cnVjdCBmbGNoaXAgKmVyYXNpbmc7CiB9OwotCiAjZW5kaWYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbXRkL21hcC5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L210ZC9tYXAuaAppbmRleCA4NzEyNGJjLi44MDM3NzJmIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbXRkL21hcC5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9tdGQvbWFwLmgKQEAgLTcsOTYgKzcsMTAwIEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfX0xJTlVYX01URF9NQVBfSF9fCiAjZGVmaW5lIF9fTElOVVhfTVREX01BUF9IX18KLQogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KLQogI2luY2x1ZGUgPGxpbnV4L210ZC9jb21wYXRtYWMuaD4KLQogI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2luY2x1ZGUgPGFzbS9pby5oPgotCiAjZGVmaW5lIG1hcF9iYW5rd2lkdGhfaXNfMShtYXApICgwKQotCiAjZGVmaW5lIG1hcF9iYW5rd2lkdGhfaXNfMihtYXApICgwKQotCiAjZGVmaW5lIG1hcF9iYW5rd2lkdGhfaXNfNChtYXApICgwKQotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBtYXBfY2FsY193b3JkcyhtYXApICgobWFwX2Jhbmt3aWR0aChtYXApICsgKHNpemVvZih1bnNpZ25lZCBsb25nKS0xKSkvIHNpemVvZih1bnNpZ25lZCBsb25nKSkKLQogI2RlZmluZSBtYXBfYmFua3dpZHRoX2lzXzgobWFwKSAoMCkKLQogI2RlZmluZSBtYXBfYmFua3dpZHRoX2lzXzE2KG1hcCkgKDApCi0KICNkZWZpbmUgbWFwX2Jhbmt3aWR0aF9pc18zMihtYXApICgwKQotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2lmbmRlZiBtYXBfYmFua3dpZHRoCiAjZXJyb3IgIk5vIGJ1cyB3aWR0aCBzdXBwb3J0ZWQuIFdoYXQncyB0aGUgcG9pbnQ/IgogI2VuZGlmCi0KICNkZWZpbmUgTUFYX01BUF9MT05HUyAoICgoTUFYX01BUF9CQU5LV0lEVEgqOCkgKyBCSVRTX1BFUl9MT05HIC0gMSkgLyBCSVRTX1BFUl9MT05HICkKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK3R5cGVkZWYgdW5pb24geworIHVuc2lnbmVkIGxvbmcgeFtNQVhfTUFQX0xPTkdTXTsKK30gbWFwX3dvcmQ7CiBzdHJ1Y3QgbWFwX2luZm8geworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBjaGFyICpuYW1lOwogIHVuc2lnbmVkIGxvbmcgc2l6ZTsKICB1bnNpZ25lZCBsb25nIHBoeXM7CiAjZGVmaW5lIE5PX1hJUCAoLTFVTCkKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB2b2lkIF9faW9tZW0gKnZpcnQ7CiAgdm9pZCAqY2FjaGVkOwotCiAgaW50IGJhbmt3aWR0aDsKLQogIHZvaWQgKCppbnZhbF9jYWNoZSkoc3RydWN0IG1hcF9pbmZvICosIHVuc2lnbmVkIGxvbmcsIHNzaXplX3QpOwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHZvaWQgKCpzZXRfdnBwKShzdHJ1Y3QgbWFwX2luZm8gKiwgaW50KTsKLQogIHVuc2lnbmVkIGxvbmcgbWFwX3ByaXZfMTsKICB1bnNpZ25lZCBsb25nIG1hcF9wcml2XzI7CiAgdm9pZCAqZmxkcnZfcHJpdjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IG10ZF9jaGlwX2RyaXZlciAqZmxkcnY7CiB9OwotCiBzdHJ1Y3QgbXRkX2NoaXBfZHJpdmVyIHsKICBzdHJ1Y3QgbXRkX2luZm8gKigqcHJvYmUpKHN0cnVjdCBtYXBfaW5mbyAqbWFwKTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdm9pZCAoKmRlc3Ryb3kpKHN0cnVjdCBtdGRfaW5mbyAqKTsKICBzdHJ1Y3QgbW9kdWxlICptb2R1bGU7CiAgY2hhciAqbmFtZTsKICBzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKLQogc3RydWN0IG10ZF9pbmZvICpkb19tYXBfcHJvYmUoY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IG1hcF9pbmZvICptYXApOwotCiAjZGVmaW5lIEVOQUJMRV9WUFAobWFwKSBkbyB7IGlmKG1hcC0+c2V0X3ZwcCkgbWFwLT5zZXRfdnBwKG1hcCwgMSk7IH0gd2hpbGUoMCkKICNkZWZpbmUgRElTQUJMRV9WUFAobWFwKSBkbyB7IGlmKG1hcC0+c2V0X3ZwcCkgbWFwLT5zZXRfdnBwKG1hcCwgMCk7IH0gd2hpbGUoMCkKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSU5WQUxJREFURV9DQUNIRURfUkFOR0UobWFwLCBmcm9tLCBzaXplKSAgIGRvIHsgaWYobWFwLT5pbnZhbF9jYWNoZSkgbWFwLT5pbnZhbF9jYWNoZShtYXAsIGZyb20sIHNpemUpOyB9IHdoaWxlKDApCi0KICNkZWZpbmUgbWFwX3dvcmRfYW5kZXF1YWwobSwgYSwgYiwgeikgbWFwX3dvcmRfZXF1YWwobSwgeiwgbWFwX3dvcmRfYW5kKG0sIGEsIGIpKQogI2lmIEJJVFNfUEVSX0xPTkcgPj0gNjQKICNlbmRpZgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNpZmRlZiBfX0xJVFRMRV9FTkRJQU4KICNlbHNlCiAjZW5kaWYKICNpZiBCSVRTX1BFUl9MT05HIDwgNjQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1BUF9GRl9MSU1JVCA0CiAjZWxzZQogI2RlZmluZSBNQVBfRkZfTElNSVQgOAogI2VuZGlmCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2lmIEJJVFNfUEVSX0xPTkcgPj0gNjQKICNlbmRpZgogI2lmIEJJVFNfUEVSX0xPTkcgPj0gNjQKICNlbmRpZgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgbWFwX3JlYWQobWFwLCBvZnMpIGlubGluZV9tYXBfcmVhZChtYXAsIG9mcykKICNkZWZpbmUgbWFwX2NvcHlfZnJvbShtYXAsIHRvLCBmcm9tLCBsZW4pIGlubGluZV9tYXBfY29weV9mcm9tKG1hcCwgdG8sIGZyb20sIGxlbikKICNkZWZpbmUgbWFwX3dyaXRlKG1hcCwgZGF0dW0sIG9mcykgaW5saW5lX21hcF93cml0ZShtYXAsIGRhdHVtLCBvZnMpCiAjZGVmaW5lIG1hcF9jb3B5X3RvKG1hcCwgdG8sIGZyb20sIGxlbikgaW5saW5lX21hcF9jb3B5X3RvKG1hcCwgdG8sIGZyb20sIGxlbikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIHNpbXBsZV9tYXBfaW5pdChtYXApIEJVR19PTighbWFwX2Jhbmt3aWR0aF9zdXBwb3J0ZWQoKG1hcCktPmJhbmt3aWR0aCkpCiAjZGVmaW5lIG1hcF9pc19saW5lYXIobWFwKSAoeyAodm9pZCkobWFwKTsgMTsgfSkKICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L210ZC9tdGQuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9tdGQvbXRkLmgKaW5kZXggMzAwODEzYy4uZDI0NzJjZiAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L210ZC9tdGQuaAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbXRkL210ZC5oCkBAIC03LDE0NyArNywxNDUgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9fTVREX01URF9IX18KICNkZWZpbmUgX19NVERfTVREX0hfXwotCiAjZXJyb3IgVGhpcyBpcyBhIGtlcm5lbCBoZWFkZXIuIFBlcmhhcHMgaW5jbHVkZSBtdGQtdXNlci5oIGluc3RlYWQ/Ci0KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC91aW8uaD4KICNpbmNsdWRlIDxsaW51eC9ub3RpZmllci5oPgotCiAjaW5jbHVkZSA8bGludXgvbXRkL2NvbXBhdG1hYy5oPgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNpbmNsdWRlIDxtdGQvbXRkLWFiaS5oPgotCiAjZGVmaW5lIE1URF9DSEFSX01BSk9SIDkwCiAjZGVmaW5lIE1URF9CTE9DS19NQUpPUiAzMQogI2RlZmluZSBNQVhfTVREX0RFVklDRVMgMTYKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTVREX0VSQVNFX1BFTkRJTkcgMHgwMQogI2RlZmluZSBNVERfRVJBU0lORyAweDAyCiAjZGVmaW5lIE1URF9FUkFTRV9TVVNQRU5EIDB4MDQKICNkZWZpbmUgTVREX0VSQVNFX0RPTkUgMHgwOAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTVREX0VSQVNFX0ZBSUxFRCAweDEwCi0KIHN0cnVjdCBlcmFzZV9pbmZvIHsKICBzdHJ1Y3QgbXRkX2luZm8gKm10ZDsKICB1X2ludDMyX3QgYWRkcjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdV9pbnQzMl90IGxlbjsKICB1X2ludDMyX3QgZmFpbF9hZGRyOwogIHVfbG9uZyB0aW1lOwogIHVfbG9uZyByZXRyaWVzOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1X2ludCBkZXY7CiAgdV9pbnQgY2VsbDsKICB2b2lkICgqY2FsbGJhY2spIChzdHJ1Y3QgZXJhc2VfaW5mbyAqc2VsZik7CiAgdV9sb25nIHByaXY7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVfY2hhciBzdGF0ZTsKICBzdHJ1Y3QgZXJhc2VfaW5mbyAqbmV4dDsKIH07Ci0KIHN0cnVjdCBtdGRfZXJhc2VfcmVnaW9uX2luZm8geworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1X2ludDMyX3Qgb2Zmc2V0OwogIHVfaW50MzJfdCBlcmFzZXNpemU7CiAgdV9pbnQzMl90IG51bWJsb2NrczsKIH07Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB0eXBlZGVmIGVudW0gewogIE1URF9PT0JfUExBQ0UsCiAgTVREX09PQl9BVVRPLAogIE1URF9PT0JfUkFXLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH0gbXRkX29vYl9tb2RlX3Q7Ci0KIHN0cnVjdCBtdGRfb29iX29wcyB7CiAgbXRkX29vYl9tb2RlX3QgbW9kZTsKICBzaXplX3QgbGVuOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzaXplX3QgcmV0bGVuOwogIHNpemVfdCBvb2JsZW47CiAgdWludDMyX3Qgb29ib2ZmczsKICB1aW50OF90ICpkYXRidWY7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVpbnQ4X3QgKm9vYmJ1ZjsKIH07Ci0KIHN0cnVjdCBtdGRfaW5mbyB7CiAgdV9jaGFyIHR5cGU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVfaW50MzJfdCBmbGFnczsKICB1X2ludDMyX3Qgc2l6ZTsKLQogIHVfaW50MzJfdCBlcmFzZXNpemU7Ci0KICB1X2ludDMyX3Qgd3JpdGVzaXplOwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVfaW50MzJfdCBvb2JzaXplOwogIHVfaW50MzJfdCBlY2N0eXBlOwogIHVfaW50MzJfdCBlY2NzaXplOwotCiAjZGVmaW5lIE1URF9QUk9HUkVHSU9OX0NUUkxNT0RFX1ZBTElEKG10ZCkgKG10ZCktPm9vYnNpemUKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1URF9QUk9HUkVHSU9OX0NUUkxNT0RFX0lOVkFMSUQobXRkKSAobXRkKS0+ZWNjdHlwZQotCiAgY2hhciAqbmFtZTsKICBpbnQgaW5kZXg7Ci0KICBzdHJ1Y3QgbmFuZF9lY2NsYXlvdXQgKmVjY2xheW91dDsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBpbnQgbnVtZXJhc2VyZWdpb25zOwogIHN0cnVjdCBtdGRfZXJhc2VfcmVnaW9uX2luZm8gKmVyYXNlcmVnaW9uczsKLQogIHVfaW50MzJfdCBiYW5rX3NpemU7Ci0KICBpbnQgKCplcmFzZSkgKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBzdHJ1Y3QgZXJhc2VfaW5mbyAqaW5zdHIpOwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGludCAoKnBvaW50KSAoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBmcm9tLCBzaXplX3QgbGVuLCBzaXplX3QgKnJldGxlbiwgdV9jaGFyICoqbXRkYnVmKTsKLQogIHZvaWQgKCp1bnBvaW50KSAoc3RydWN0IG10ZF9pbmZvICptdGQsIHVfY2hhciAqIGFkZHIsIGxvZmZfdCBmcm9tLCBzaXplX3QgbGVuKTsKLQogIGludCAoKnJlYWQpIChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IGZyb20sIHNpemVfdCBsZW4sIHNpemVfdCAqcmV0bGVuLCB1X2NoYXIgKmJ1Zik7CiAgaW50ICgqd3JpdGUpIChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IHRvLCBzaXplX3QgbGVuLCBzaXplX3QgKnJldGxlbiwgY29uc3QgdV9jaGFyICpidWYpOwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGludCAoKnJlYWRfb29iKSAoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBmcm9tLAogIHN0cnVjdCBtdGRfb29iX29wcyAqb3BzKTsKICBpbnQgKCp3cml0ZV9vb2IpIChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IHRvLAogIHN0cnVjdCBtdGRfb29iX29wcyAqb3BzKTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBpbnQgKCpnZXRfZmFjdF9wcm90X2luZm8pIChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgc3RydWN0IG90cF9pbmZvICpidWYsIHNpemVfdCBsZW4pOwogIGludCAoKnJlYWRfZmFjdF9wcm90X3JlZykgKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3QgZnJvbSwgc2l6ZV90IGxlbiwgc2l6ZV90ICpyZXRsZW4sIHVfY2hhciAqYnVmKTsKICBpbnQgKCpnZXRfdXNlcl9wcm90X2luZm8pIChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgc3RydWN0IG90cF9pbmZvICpidWYsIHNpemVfdCBsZW4pOwogIGludCAoKnJlYWRfdXNlcl9wcm90X3JlZykgKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3QgZnJvbSwgc2l6ZV90IGxlbiwgc2l6ZV90ICpyZXRsZW4sIHVfY2hhciAqYnVmKTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgaW50ICgqd3JpdGVfdXNlcl9wcm90X3JlZykgKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3QgZnJvbSwgc2l6ZV90IGxlbiwgc2l6ZV90ICpyZXRsZW4sIHVfY2hhciAqYnVmKTsKICBpbnQgKCpsb2NrX3VzZXJfcHJvdF9yZWcpIChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IGZyb20sIHNpemVfdCBsZW4pOwotCiAgaW50ICgqd3JpdGV2KSAoc3RydWN0IG10ZF9pbmZvICptdGQsIGNvbnN0IHN0cnVjdCBrdmVjICp2ZWNzLCB1bnNpZ25lZCBsb25nIGNvdW50LCBsb2ZmX3QgdG8sIHNpemVfdCAqcmV0bGVuKTsKLQogIHZvaWQgKCpzeW5jKSAoc3RydWN0IG10ZF9pbmZvICptdGQpOwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGludCAoKmxvY2spIChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IG9mcywgc2l6ZV90IGxlbik7CiAgaW50ICgqdW5sb2NrKSAoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBvZnMsIHNpemVfdCBsZW4pOwotCiAgaW50ICgqc3VzcGVuZCkgKHN0cnVjdCBtdGRfaW5mbyAqbXRkKTsKICB2b2lkICgqcmVzdW1lKSAoc3RydWN0IG10ZF9pbmZvICptdGQpOwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGludCAoKmJsb2NrX2lzYmFkKSAoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBvZnMpOwogIGludCAoKmJsb2NrX21hcmtiYWQpIChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IG9mcyk7Ci0KICBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgcmVib290X25vdGlmaWVyOwotCiAgc3RydWN0IG10ZF9lY2Nfc3RhdHMgZWNjX3N0YXRzOwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHZvaWQgKnByaXY7Ci0KICBzdHJ1Y3QgbW9kdWxlICpvd25lcjsKICBpbnQgdXNlY291bnQ7CiB9OwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IG10ZF9ub3RpZmllciB7CiAgdm9pZCAoKmFkZCkoc3RydWN0IG10ZF9pbmZvICptdGQpOwogIHZvaWQgKCpyZW1vdmUpKHN0cnVjdCBtdGRfaW5mbyAqbXRkKTsKICBzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKLQotI2RlZmluZSBNVERfREVCVUdfTEVWRUwwICgwKSAgCi0jZGVmaW5lIE1URF9ERUJVR19MRVZFTDEgKDEpICAKLSNkZWZpbmUgTVREX0RFQlVHX0xFVkVMMiAoMikgIAotI2RlZmluZSBNVERfREVCVUdfTEVWRUwzICgzKSAgCisjZGVmaW5lIE1URF9ERUJVR19MRVZFTDAgKDApCisjZGVmaW5lIE1URF9ERUJVR19MRVZFTDEgKDEpCisjZGVmaW5lIE1URF9ERUJVR19MRVZFTDIgKDIpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBNVERfREVCVUdfTEVWRUwzICgzKQogI2RlZmluZSBERUJVRyhuLCBhcmdzLi4uKSBkbyB7IH0gd2hpbGUoMCkKICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L210ZC9uYW5kLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbXRkL25hbmQuaAppbmRleCAzNmU5ZmI0Li5jYjliMTNhIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbXRkL25hbmQuaAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbXRkL25hbmQuaApAQCAtNywzMTMgKzcsMzA4IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfX0xJTlVYX01URF9OQU5EX0gKICNkZWZpbmUgX19MSU5VWF9NVERfTkFORF9ICi0KICNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgotCiBzdHJ1Y3QgbXRkX2luZm87Ci0KICNkZWZpbmUgTkFORF9NQVhfQ0hJUFMgOAotCiAjZGVmaW5lIE5BTkRfTUFYX09PQlNJWkUgNjQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE5BTkRfTUFYX1BBR0VTSVpFIDIwNDgKLQogI2RlZmluZSBOQU5EX05DRSAweDAxCi0KICNkZWZpbmUgTkFORF9DTEUgMHgwMgotCiAjZGVmaW5lIE5BTkRfQUxFIDB4MDQKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTkFORF9DVFJMX0NMRSAoTkFORF9OQ0UgfCBOQU5EX0NMRSkKICNkZWZpbmUgTkFORF9DVFJMX0FMRSAoTkFORF9OQ0UgfCBOQU5EX0FMRSkKICNkZWZpbmUgTkFORF9DVFJMX0NIQU5HRSAweDgwCi0KICNkZWZpbmUgTkFORF9DTURfUkVBRDAgMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTkFORF9DTURfUkVBRDEgMQogI2RlZmluZSBOQU5EX0NNRF9STkRPVVQgNQogI2RlZmluZSBOQU5EX0NNRF9QQUdFUFJPRyAweDEwCiAjZGVmaW5lIE5BTkRfQ01EX1JFQURPT0IgMHg1MAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTkFORF9DTURfRVJBU0UxIDB4NjAKICNkZWZpbmUgTkFORF9DTURfU1RBVFVTIDB4NzAKICNkZWZpbmUgTkFORF9DTURfU1RBVFVTX01VTFRJIDB4NzEKICNkZWZpbmUgTkFORF9DTURfU0VRSU4gMHg4MAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTkFORF9DTURfUk5ESU4gMHg4NQogI2RlZmluZSBOQU5EX0NNRF9SRUFESUQgMHg5MAogI2RlZmluZSBOQU5EX0NNRF9FUkFTRTIgMHhkMAogI2RlZmluZSBOQU5EX0NNRF9SRVNFVCAweGZmCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE5BTkRfQ01EX1JFQURTVEFSVCAweDMwCiAjZGVmaW5lIE5BTkRfQ01EX1JORE9VVFNUQVJUIDB4RTAKICNkZWZpbmUgTkFORF9DTURfQ0FDSEVEUFJPRyAweDE1Ci0KICNkZWZpbmUgTkFORF9DTURfREVQTEVURTEgMHgxMDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE5BTkRfQ01EX0RFUExFVEUyIDB4MzgKICNkZWZpbmUgTkFORF9DTURfU1RBVFVTX01VTFRJIDB4NzEKICNkZWZpbmUgTkFORF9DTURfU1RBVFVTX0VSUk9SIDB4NzIKLQogI2RlZmluZSBOQU5EX0NNRF9TVEFUVVNfRVJST1IwIDB4NzMKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE5BTkRfQ01EX1NUQVRVU19FUlJPUjEgMHg3NAogI2RlZmluZSBOQU5EX0NNRF9TVEFUVVNfRVJST1IyIDB4NzUKICNkZWZpbmUgTkFORF9DTURfU1RBVFVTX0VSUk9SMyAweDc2CiAjZGVmaW5lIE5BTkRfQ01EX1NUQVRVU19SRVNFVCAweDdmCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBOQU5EX0NNRF9TVEFUVVNfQ0xFQVIgMHhmZgotCiAjZGVmaW5lIE5BTkRfQ01EX05PTkUgLTEKLQogI2RlZmluZSBOQU5EX1NUQVRVU19GQUlMIDB4MDEKICNkZWZpbmUgTkFORF9TVEFUVVNfRkFJTF9OMSAweDAyCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBOQU5EX1NUQVRVU19UUlVFX1JFQURZIDB4MjAKICNkZWZpbmUgTkFORF9TVEFUVVNfUkVBRFkgMHg0MAogI2RlZmluZSBOQU5EX1NUQVRVU19XUCAweDgwCi0KIHR5cGVkZWYgZW51bSB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5BTkRfRUNDX05PTkUsCiAgTkFORF9FQ0NfU09GVCwKICBOQU5EX0VDQ19IVywKICBOQU5EX0VDQ19IV19TWU5EUk9NRSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9IG5hbmRfZWNjX21vZGVzX3Q7Ci0KICNkZWZpbmUgTkFORF9FQ0NfUkVBRCAwCi0KICNkZWZpbmUgTkFORF9FQ0NfV1JJVEUgMQotCiAjZGVmaW5lIE5BTkRfRUNDX1JFQURTWU4gMgotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBOQU5EX0dFVF9ERVZJQ0UgMHg4MAotCiAjZGVmaW5lIE5BTkRfTk9fQVVUT0lOQ1IgMHgwMDAwMDAwMQotCiAjZGVmaW5lIE5BTkRfQlVTV0lEVEhfMTYgMHgwMDAwMDAwMgotCiAjZGVmaW5lIE5BTkRfTk9fUEFERElORyAweDAwMDAwMDA0Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE5BTkRfQ0FDSEVQUkcgMHgwMDAwMDAwOAotCiAjZGVmaW5lIE5BTkRfQ09QWUJBQ0sgMHgwMDAwMDAxMAotCiAjZGVmaW5lIE5BTkRfSVNfQU5EIDB4MDAwMDAwMjAKLQogI2RlZmluZSBOQU5EXzRQQUdFX0FSUkFZIDB4MDAwMDAwNDAKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQkJUX0FVVE9fUkVGUkVTSCAweDAwMDAwMDgwCi0KICNkZWZpbmUgTkFORF9OT19SRUFEUkRZIDB4MDAwMDAxMDAKLQogI2RlZmluZSBOQU5EX1NBTVNVTkdfTFBfT1BUSU9OUyAgIChOQU5EX05PX1BBRERJTkcgfCBOQU5EX0NBQ0hFUFJHIHwgTkFORF9DT1BZQkFDSykKLQogI2RlZmluZSBOQU5EX0NBTkFVVE9JTkNSKGNoaXApICghKGNoaXAtPm9wdGlvbnMgJiBOQU5EX05PX0FVVE9JTkNSKSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE5BTkRfTVVTVF9QQUQoY2hpcCkgKCEoY2hpcC0+b3B0aW9ucyAmIE5BTkRfTk9fUEFERElORykpCiAjZGVmaW5lIE5BTkRfSEFTX0NBQ0hFUFJPRyhjaGlwKSAoKGNoaXAtPm9wdGlvbnMgJiBOQU5EX0NBQ0hFUFJHKSkKICNkZWZpbmUgTkFORF9IQVNfQ09QWUJBQ0soY2hpcCkgKChjaGlwLT5vcHRpb25zICYgTkFORF9DT1BZQkFDSykpCi0KICNkZWZpbmUgTkFORF9DSElQT1BUSU9OU19NU0sgKDB4MDAwMGZmZmYgJiB+TkFORF9OT19BVVRPSU5DUikKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTkFORF9VU0VfRkxBU0hfQkJUIDB4MDAwMTAwMDAKLQogI2RlZmluZSBOQU5EX1NLSVBfQkJUU0NBTiAweDAwMDIwMDAwCi0KICNkZWZpbmUgTkFORF9DT05UUk9MTEVSX0FMTE9DIDB4ODAwMDAwMDAKLQogdHlwZWRlZiBlbnVtIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgRkxfUkVBRFksCiAgRkxfUkVBRElORywKICBGTF9XUklUSU5HLAogIEZMX0VSQVNJTkcsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIEZMX1NZTkNJTkcsCiAgRkxfQ0FDSEVEUFJHLAogIEZMX1BNX1NVU1BFTkRFRCwKIH0gbmFuZF9zdGF0ZV90OwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IG5hbmRfY2hpcDsKLQogc3RydWN0IG5hbmRfaHdfY29udHJvbCB7CiAgc3BpbmxvY2tfdCBsb2NrOwogIHN0cnVjdCBuYW5kX2NoaXAgKmFjdGl2ZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgd2FpdF9xdWV1ZV9oZWFkX3Qgd3E7CiB9OwotCiBzdHJ1Y3QgbmFuZF9lY2NfY3RybCB7CiAgbmFuZF9lY2NfbW9kZXNfdCBtb2RlOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBpbnQgc3RlcHM7CiAgaW50IHNpemU7CiAgaW50IGJ5dGVzOwogIGludCB0b3RhbDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgaW50IHByZXBhZDsKICBpbnQgcG9zdHBhZDsKICBzdHJ1Y3QgbmFuZF9lY2NsYXlvdXQgKmxheW91dDsKICB2b2lkICgqaHdjdGwpKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgbW9kZSk7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGludCAoKmNhbGN1bGF0ZSkoc3RydWN0IG10ZF9pbmZvICptdGQsCiAgY29uc3QgdWludDhfdCAqZGF0LAogIHVpbnQ4X3QgKmVjY19jb2RlKTsKICBpbnQgKCpjb3JyZWN0KShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgdWludDhfdCAqZGF0LAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1aW50OF90ICpyZWFkX2VjYywKICB1aW50OF90ICpjYWxjX2VjYyk7CiAgaW50ICgqcmVhZF9wYWdlKShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwKICBzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1aW50OF90ICpidWYpOwogIHZvaWQgKCp3cml0ZV9wYWdlKShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwKICBzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwLAogIGNvbnN0IHVpbnQ4X3QgKmJ1Zik7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGludCAoKnJlYWRfb29iKShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwKICBzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwLAogIGludCBwYWdlLAogIGludCBzbmRjbWQpOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBpbnQgKCp3cml0ZV9vb2IpKHN0cnVjdCBtdGRfaW5mbyAqbXRkLAogIHN0cnVjdCBuYW5kX2NoaXAgKmNoaXAsCiAgaW50IHBhZ2UpOwogfTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBuYW5kX2J1ZmZlcnMgewogIHVpbnQ4X3QgZWNjY2FsY1tOQU5EX01BWF9PT0JTSVpFXTsKICB1aW50OF90IGVjY2NvZGVbTkFORF9NQVhfT09CU0laRV07CiAgdWludDhfdCBvb2J3YnVmW05BTkRfTUFYX09PQlNJWkVdOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1aW50OF90IGRhdGFidWZbTkFORF9NQVhfUEFHRVNJWkVdOwogIHVpbnQ4X3Qgb29icmJ1ZltOQU5EX01BWF9PT0JTSVpFXTsKIH07Ci0KIHN0cnVjdCBuYW5kX2NoaXAgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB2b2lkIF9faW9tZW0gKklPX0FERFJfUjsKICB2b2lkIF9faW9tZW0gKklPX0FERFJfVzsKLQogIHVpbnQ4X3QgKCpyZWFkX2J5dGUpKHN0cnVjdCBtdGRfaW5mbyAqbXRkKTsKICB1MTYgKCpyZWFkX3dvcmQpKHN0cnVjdCBtdGRfaW5mbyAqbXRkKTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdm9pZCAoKndyaXRlX2J1Zikoc3RydWN0IG10ZF9pbmZvICptdGQsIGNvbnN0IHVpbnQ4X3QgKmJ1ZiwgaW50IGxlbik7CiAgdm9pZCAoKnJlYWRfYnVmKShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgdWludDhfdCAqYnVmLCBpbnQgbGVuKTsKICBpbnQgKCp2ZXJpZnlfYnVmKShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgY29uc3QgdWludDhfdCAqYnVmLCBpbnQgbGVuKTsKICB2b2lkICgqc2VsZWN0X2NoaXApKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgY2hpcCk7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGludCAoKmJsb2NrX2JhZCkoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBvZnMsIGludCBnZXRjaGlwKTsKICBpbnQgKCpibG9ja19tYXJrYmFkKShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IG9mcyk7CiAgdm9pZCAoKmNtZF9jdHJsKShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IGRhdCwKICB1bnNpZ25lZCBpbnQgY3RybCk7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGludCAoKmRldl9yZWFkeSkoc3RydWN0IG10ZF9pbmZvICptdGQpOwogIHZvaWQgKCpjbWRmdW5jKShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgdW5zaWduZWQgY29tbWFuZCwgaW50IGNvbHVtbiwgaW50IHBhZ2VfYWRkcik7CiAgaW50ICgqd2FpdGZ1bmMpKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzKTsKICB2b2lkICgqZXJhc2VfY21kKShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IHBhZ2UpOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBpbnQgKCpzY2FuX2JidCkoc3RydWN0IG10ZF9pbmZvICptdGQpOwogIGludCAoKmVycnN0YXQpKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzLCBpbnQgc3RhdGUsIGludCBzdGF0dXMsIGludCBwYWdlKTsKLQogIGludCBjaGlwX2RlbGF5OwogIHVuc2lnbmVkIGludCBvcHRpb25zOwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGludCBwYWdlX3NoaWZ0OwogIGludCBwaHlzX2VyYXNlX3NoaWZ0OwogIGludCBiYnRfZXJhc2Vfc2hpZnQ7CiAgaW50IGNoaXBfc2hpZnQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGludCBudW1jaGlwczsKICB1bnNpZ25lZCBsb25nIGNoaXBzaXplOwogIGludCBwYWdlbWFzazsKICBpbnQgcGFnZWJ1ZjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgaW50IGJhZGJsb2NrcG9zOwotCiAgbmFuZF9zdGF0ZV90IHN0YXRlOwotCiAgdWludDhfdCAqb29iX3BvaTsKICBzdHJ1Y3QgbmFuZF9od19jb250cm9sICpjb250cm9sbGVyOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgbmFuZF9lY2NsYXlvdXQgKmVjY2xheW91dDsKLQogIHN0cnVjdCBuYW5kX2VjY19jdHJsIGVjYzsKICBzdHJ1Y3QgbmFuZF9idWZmZXJzIGJ1ZmZlcnM7CiAgc3RydWN0IG5hbmRfaHdfY29udHJvbCBod2NvbnRyb2w7Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IG10ZF9vb2Jfb3BzIG9wczsKLQogIHVpbnQ4X3QgKmJidDsKICBzdHJ1Y3QgbmFuZF9iYnRfZGVzY3IgKmJidF90ZDsKICBzdHJ1Y3QgbmFuZF9iYnRfZGVzY3IgKmJidF9tZDsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgbmFuZF9iYnRfZGVzY3IgKmJhZGJsb2NrX3BhdHRlcm47Ci0KICB2b2lkICpwcml2OwogfTsKLQogI2RlZmluZSBOQU5EX01GUl9UT1NISUJBIDB4OTgKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE5BTkRfTUZSX1NBTVNVTkcgMHhlYwogI2RlZmluZSBOQU5EX01GUl9GVUpJVFNVIDB4MDQKICNkZWZpbmUgTkFORF9NRlJfTkFUSU9OQUwgMHg4ZgogI2RlZmluZSBOQU5EX01GUl9SRU5FU0FTIDB4MDcKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE5BTkRfTUZSX1NUTUlDUk8gMHgyMAogI2RlZmluZSBOQU5EX01GUl9IWU5JWCAweGFkCi0KIHN0cnVjdCBuYW5kX2ZsYXNoX2RldiB7CiAgY2hhciAqbmFtZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgaW50IGlkOwogIHVuc2lnbmVkIGxvbmcgcGFnZXNpemU7CiAgdW5zaWduZWQgbG9uZyBjaGlwc2l6ZTsKICB1bnNpZ25lZCBsb25nIGVyYXNlc2l6ZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgbG9uZyBvcHRpb25zOwogfTsKLQogc3RydWN0IG5hbmRfbWFudWZhY3R1cmVycyB7CiAgaW50IGlkOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBjaGFyICogbmFtZTsKIH07Ci0KIHN0cnVjdCBuYW5kX2JidF9kZXNjciB7CiAgaW50IG9wdGlvbnM7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGludCBwYWdlc1tOQU5EX01BWF9DSElQU107CiAgaW50IG9mZnM7CiAgaW50IHZlcm9mZnM7CiAgdWludDhfdCB2ZXJzaW9uW05BTkRfTUFYX0NISVBTXTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgaW50IGxlbjsKICBpbnQgbWF4YmxvY2tzOwogIGludCByZXNlcnZlZF9ibG9ja19jb2RlOwogIHVpbnQ4X3QgKnBhdHRlcm47CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKLQogI2RlZmluZSBOQU5EX0JCVF9OUkJJVFNfTVNLIDB4MDAwMDAwMEYKICNkZWZpbmUgTkFORF9CQlRfMUJJVCAweDAwMDAwMDAxCiAjZGVmaW5lIE5BTkRfQkJUXzJCSVQgMHgwMDAwMDAwMgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTkFORF9CQlRfNEJJVCAweDAwMDAwMDA0CiAjZGVmaW5lIE5BTkRfQkJUXzhCSVQgMHgwMDAwMDAwOAotCiAjZGVmaW5lIE5BTkRfQkJUX0xBU1RCTE9DSyAweDAwMDAwMDEwCi0KICNkZWZpbmUgTkFORF9CQlRfQUJTUEFHRSAweDAwMDAwMDIwCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE5BTkRfQkJUX1NFQVJDSCAweDAwMDAwMDQwCi0KICNkZWZpbmUgTkFORF9CQlRfUEVSQ0hJUCAweDAwMDAwMDgwCi0KICNkZWZpbmUgTkFORF9CQlRfVkVSU0lPTiAweDAwMDAwMTAwCi0KICNkZWZpbmUgTkFORF9CQlRfQ1JFQVRFIDB4MDAwMDAyMDAKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTkFORF9CQlRfU0NBTkFMTFBBR0VTIDB4MDAwMDA0MDAKLQogI2RlZmluZSBOQU5EX0JCVF9TQ0FORU1QVFkgMHgwMDAwMDgwMAotCiAjZGVmaW5lIE5BTkRfQkJUX1dSSVRFIDB4MDAwMDEwMDAKLQogI2RlZmluZSBOQU5EX0JCVF9TQVZFQ09OVEVOVCAweDAwMDAyMDAwCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE5BTkRfQkJUX1NDQU4yTkRQQUdFIDB4MDAwMDQwMDAKLQogI2RlZmluZSBOQU5EX0JCVF9TQ0FOX01BWEJMT0NLUyA0Ci0KICNkZWZpbmUgTkFORF9TTUFMTF9CQURCTE9DS19QT1MgNQogI2RlZmluZSBOQU5EX0xBUkdFX0JBREJMT0NLX1BPUyAwCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgcGxhdGZvcm1fbmFuZF9jaGlwIHsKICBpbnQgbnJfY2hpcHM7CiAgaW50IGNoaXBfb2Zmc2V0OwogIGludCBucl9wYXJ0aXRpb25zOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiAqcGFydGl0aW9uczsKICBzdHJ1Y3QgbmFuZF9lY2NsYXlvdXQgKmVjY2xheW91dDsKICBpbnQgY2hpcF9kZWxheTsKICB1bnNpZ25lZCBpbnQgb3B0aW9uczsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdm9pZCAqcHJpdjsKIH07Ci0KIHN0cnVjdCBwbGF0Zm9ybV9uYW5kX2N0cmwgewogIHZvaWQgKCpod2NvbnRyb2wpKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgY21kKTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgaW50ICgqZGV2X3JlYWR5KShzdHJ1Y3QgbXRkX2luZm8gKm10ZCk7CiAgdm9pZCAoKnNlbGVjdF9jaGlwKShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IGNoaXApOwogIHZvaWQgKnByaXY7CiB9OwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbXRkL25hbmRfZWNjLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbXRkL25hbmRfZWNjLmgKaW5kZXggM2U4MTdmNC4uZTdkYmUxYSAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L210ZC9uYW5kX2VjYy5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9tdGQvbmFuZF9lY2MuaApAQCAtNywxMSArNywxNyBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX19NVERfTkFORF9FQ0NfSF9fCiAjZGVmaW5lIF9fTVREX05BTkRfRUNDX0hfXwotCiBzdHJ1Y3QgbXRkX2luZm87Ci0KICNlbmRpZgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9tdGQvbmZ0bC5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L210ZC9uZnRsLmgKaW5kZXggZGE3MzIwZS4uNmZjNDIzZSAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L210ZC9uZnRsLmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L210ZC9uZnRsLmgKQEAgLTcsNDkgKzcsNTggQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9fTVREX05GVExfSF9fCiAjZGVmaW5lIF9fTVREX05GVExfSF9fCi0KICNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL2Jsa3RyYW5zLmg+Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjaW5jbHVkZSA8bXRkL25mdGwtdXNlci5oPgotCi0jZGVmaW5lIEJMT0NLX05JTCAweGZmZmYgIAotI2RlZmluZSBCTE9DS19GUkVFIDB4ZmZmZSAgCi0jZGVmaW5lIEJMT0NLX05PVEVYUExPUkVEIDB4ZmZmZCAgCi0jZGVmaW5lIEJMT0NLX1JFU0VSVkVEIDB4ZmZmYyAgCi0KKyNkZWZpbmUgQkxPQ0tfTklMIDB4ZmZmZgorI2RlZmluZSBCTE9DS19GUkVFIDB4ZmZmZQorI2RlZmluZSBCTE9DS19OT1RFWFBMT1JFRCAweGZmZmQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEJMT0NLX1JFU0VSVkVEIDB4ZmZmYwogc3RydWN0IE5GVExyZWNvcmQgewogIHN0cnVjdCBtdGRfYmxrdHJhbnNfZGV2IG1iZDsKICBfX3UxNiBNZWRpYVVuaXQsIFNwYXJlTWVkaWFVbml0OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBFcmFzZVNpemU7CiAgc3RydWN0IE5GVExNZWRpYUhlYWRlciBNZWRpYUhkcjsKICBpbnQgdXNlY291bnQ7CiAgdW5zaWduZWQgY2hhciBoZWFkczsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgY2hhciBzZWN0b3JzOwogIHVuc2lnbmVkIHNob3J0IGN5bGluZGVyczsKICBfX3UxNiBudW12dW5pdHM7CiAgX191MTYgbGFzdEVVTjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MTYgbnVtZnJlZUVVTnM7CiAgX191MTYgTGFzdEZyZWVFVU47CiAgaW50IGhlYWQsc2VjdCxjeWw7CiAgX191MTYgKkVVTnRhYmxlOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UxNiAqUmVwbFVuaXRUYWJsZTsKICB1bnNpZ25lZCBpbnQgbmJfYmxvY2tzOwogIHVuc2lnbmVkIGludCBuYl9ib290X2Jsb2NrczsKICBzdHJ1Y3QgZXJhc2VfaW5mbyBpbnN0cjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IG5hbmRfZWNjbGF5b3V0IG9vYmluZm87CiB9OwotCiAjaWZuZGVmIE5GVExfTUFKT1IKICNkZWZpbmUgTkZUTF9NQUpPUiA5MworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlbmRpZgotCiAjZGVmaW5lIE1BWF9ORlRMUyAxNgogI2RlZmluZSBNQVhfU0VDVE9SU19QRVJfVU5JVCA2NAogI2RlZmluZSBORlRMX1BBUlROX0JJVFMgNAotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbXRkL29uZW5hbmRfcmVncy5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L210ZC9vbmVuYW5kX3JlZ3MuaAppbmRleCBhMzljNzhmLi42NjJmZmM5IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbXRkL29uZW5hbmRfcmVncy5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9tdGQvb25lbmFuZF9yZWdzLmgKQEAgLTcsMTM3ICs3LDE1MCBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX19PTkVOQU5EX1JFR19ICiAjZGVmaW5lIF9fT05FTkFORF9SRUdfSAotCiAjZGVmaW5lIE9ORU5BTkRfTUVNT1JZX01BUCh4KSAoKHgpIDw8IDEpCi0KICNkZWZpbmUgT05FTkFORF9CT09UUkFNIE9ORU5BTkRfTUVNT1JZX01BUCgweDAwMDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBPTkVOQU5EX0RBVEFSQU0gT05FTkFORF9NRU1PUllfTUFQKDB4MDIwMCkKICNkZWZpbmUgT05FTkFORF9TUEFSRVJBTSBPTkVOQU5EX01FTU9SWV9NQVAoMHg4MDEwKQotCiAjZGVmaW5lIE9ORU5BTkRfUkVHX01BTlVGQUNUVVJFUl9JRCBPTkVOQU5EX01FTU9SWV9NQVAoMHhGMDAwKQogI2RlZmluZSBPTkVOQU5EX1JFR19ERVZJQ0VfSUQgT05FTkFORF9NRU1PUllfTUFQKDB4RjAwMSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE9ORU5BTkRfUkVHX1ZFUlNJT05fSUQgT05FTkFORF9NRU1PUllfTUFQKDB4RjAwMikKICNkZWZpbmUgT05FTkFORF9SRUdfREFUQV9CVUZGRVJfU0laRSBPTkVOQU5EX01FTU9SWV9NQVAoMHhGMDAzKQogI2RlZmluZSBPTkVOQU5EX1JFR19CT09UX0JVRkZFUl9TSVpFIE9ORU5BTkRfTUVNT1JZX01BUCgweEYwMDQpCiAjZGVmaW5lIE9ORU5BTkRfUkVHX05VTV9CVUZGRVJTIE9ORU5BTkRfTUVNT1JZX01BUCgweEYwMDUpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBPTkVOQU5EX1JFR19URUNITk9MT0dZIE9ORU5BTkRfTUVNT1JZX01BUCgweEYwMDYpCi0KICNkZWZpbmUgT05FTkFORF9SRUdfU1RBUlRfQUREUkVTUzEgT05FTkFORF9NRU1PUllfTUFQKDB4RjEwMCkKICNkZWZpbmUgT05FTkFORF9SRUdfU1RBUlRfQUREUkVTUzIgT05FTkFORF9NRU1PUllfTUFQKDB4RjEwMSkKICNkZWZpbmUgT05FTkFORF9SRUdfU1RBUlRfQUREUkVTUzMgT05FTkFORF9NRU1PUllfTUFQKDB4RjEwMikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE9ORU5BTkRfUkVHX1NUQVJUX0FERFJFU1M0IE9ORU5BTkRfTUVNT1JZX01BUCgweEYxMDMpCiAjZGVmaW5lIE9ORU5BTkRfUkVHX1NUQVJUX0FERFJFU1M1IE9ORU5BTkRfTUVNT1JZX01BUCgweEYxMDQpCiAjZGVmaW5lIE9ORU5BTkRfUkVHX1NUQVJUX0FERFJFU1M2IE9ORU5BTkRfTUVNT1JZX01BUCgweEYxMDUpCiAjZGVmaW5lIE9ORU5BTkRfUkVHX1NUQVJUX0FERFJFU1M3IE9ORU5BTkRfTUVNT1JZX01BUCgweEYxMDYpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBPTkVOQU5EX1JFR19TVEFSVF9BRERSRVNTOCBPTkVOQU5EX01FTU9SWV9NQVAoMHhGMTA3KQotCiAjZGVmaW5lIE9ORU5BTkRfUkVHX1NUQVJUX0JVRkZFUiBPTkVOQU5EX01FTU9SWV9NQVAoMHhGMjAwKQogI2RlZmluZSBPTkVOQU5EX1JFR19DT01NQU5EIE9ORU5BTkRfTUVNT1JZX01BUCgweEYyMjApCiAjZGVmaW5lIE9ORU5BTkRfUkVHX1NZU19DRkcxIE9ORU5BTkRfTUVNT1JZX01BUCgweEYyMjEpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBPTkVOQU5EX1JFR19TWVNfQ0ZHMiBPTkVOQU5EX01FTU9SWV9NQVAoMHhGMjIyKQogI2RlZmluZSBPTkVOQU5EX1JFR19DVFJMX1NUQVRVUyBPTkVOQU5EX01FTU9SWV9NQVAoMHhGMjQwKQogI2RlZmluZSBPTkVOQU5EX1JFR19JTlRFUlJVUFQgT05FTkFORF9NRU1PUllfTUFQKDB4RjI0MSkKICNkZWZpbmUgT05FTkFORF9SRUdfU1RBUlRfQkxPQ0tfQUREUkVTUyBPTkVOQU5EX01FTU9SWV9NQVAoMHhGMjRDKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgT05FTkFORF9SRUdfRU5EX0JMT0NLX0FERFJFU1MgT05FTkFORF9NRU1PUllfTUFQKDB4RjI0RCkKICNkZWZpbmUgT05FTkFORF9SRUdfV1BfU1RBVFVTIE9ORU5BTkRfTUVNT1JZX01BUCgweEYyNEUpCi0KICNkZWZpbmUgT05FTkFORF9SRUdfRUNDX1NUQVRVUyBPTkVOQU5EX01FTU9SWV9NQVAoMHhGRjAwKQogI2RlZmluZSBPTkVOQU5EX1JFR19FQ0NfTTAgT05FTkFORF9NRU1PUllfTUFQKDB4RkYwMSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE9ORU5BTkRfUkVHX0VDQ19TMCBPTkVOQU5EX01FTU9SWV9NQVAoMHhGRjAyKQogI2RlZmluZSBPTkVOQU5EX1JFR19FQ0NfTTEgT05FTkFORF9NRU1PUllfTUFQKDB4RkYwMykKICNkZWZpbmUgT05FTkFORF9SRUdfRUNDX1MxIE9ORU5BTkRfTUVNT1JZX01BUCgweEZGMDQpCiAjZGVmaW5lIE9ORU5BTkRfUkVHX0VDQ19NMiBPTkVOQU5EX01FTU9SWV9NQVAoMHhGRjA1KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgT05FTkFORF9SRUdfRUNDX1MyIE9ORU5BTkRfTUVNT1JZX01BUCgweEZGMDYpCiAjZGVmaW5lIE9ORU5BTkRfUkVHX0VDQ19NMyBPTkVOQU5EX01FTU9SWV9NQVAoMHhGRjA3KQogI2RlZmluZSBPTkVOQU5EX1JFR19FQ0NfUzMgT05FTkFORF9NRU1PUllfTUFQKDB4RkYwOCkKLQogI2RlZmluZSBPTkVOQU5EX0RFVklDRV9ERU5TSVRZX1NISUZUICg0KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgT05FTkFORF9ERVZJQ0VfSVNfRERQICgxIDw8IDMpCiAjZGVmaW5lIE9ORU5BTkRfREVWSUNFX0lTX0RFTVVYICgxIDw8IDIpCiAjZGVmaW5lIE9ORU5BTkRfREVWSUNFX1ZDQ19NQVNLICgweDMpCi0KICNkZWZpbmUgT05FTkFORF9ERVZJQ0VfREVOU0lUWV81MTJNYiAoMHgwMDIpCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE9ORU5BTkRfVkVSU0lPTl9QUk9DRVNTX1NISUZUICg4KQotCiAjZGVmaW5lIE9ORU5BTkRfRERQX1NISUZUICgxNSkKLQogI2RlZmluZSBPTkVOQU5EX0ZQQV9NQVNLICgweDNmKQogI2RlZmluZSBPTkVOQU5EX0ZQQV9TSElGVCAoMikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE9ORU5BTkRfRlNBX01BU0sgKDB4MDMpCi0KICNkZWZpbmUgT05FTkFORF9CU0FfTUFTSyAoMHgwMykKICNkZWZpbmUgT05FTkFORF9CU0FfU0hJRlQgKDgpCiAjZGVmaW5lIE9ORU5BTkRfQlNBX0JPT1RSQU0gKDAgPDwgMikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE9ORU5BTkRfQlNBX0RBVEFSQU0wICgyIDw8IDIpCiAjZGVmaW5lIE9ORU5BTkRfQlNBX0RBVEFSQU0xICgzIDw8IDIpCiAjZGVmaW5lIE9ORU5BTkRfQlNDX01BU0sgKDB4MDMpCi0KICNkZWZpbmUgT05FTkFORF9DTURfUkVBRCAoMHgwMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE9ORU5BTkRfQ01EX1JFQURPT0IgKDB4MTMpCiAjZGVmaW5lIE9ORU5BTkRfQ01EX1BST0cgKDB4ODApCiAjZGVmaW5lIE9ORU5BTkRfQ01EX1BST0dPT0IgKDB4MUEpCiAjZGVmaW5lIE9ORU5BTkRfQ01EX1VOTE9DSyAoMHgyMykKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE9ORU5BTkRfQ01EX0xPQ0sgKDB4MkEpCiAjZGVmaW5lIE9ORU5BTkRfQ01EX0xPQ0tfVElHSFQgKDB4MkMpCiAjZGVmaW5lIE9ORU5BTkRfQ01EX0VSQVNFICgweDk0KQogI2RlZmluZSBPTkVOQU5EX0NNRF9SRVNFVCAoMHhGMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE9ORU5BTkRfQ01EX09UUF9BQ0NFU1MgKDB4NjUpCiAjZGVmaW5lIE9ORU5BTkRfQ01EX1JFQURJRCAoMHg5MCkKLQogI2RlZmluZSBPTkVOQU5EX0NNRF9CVUZGRVJSQU0gKDB4MTk3OCkKLQogI2RlZmluZSBPTkVOQU5EX1NZU19DRkcxX1NZTkNfUkVBRCAoMSA8PCAxNSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE9ORU5BTkRfU1lTX0NGRzFfQlJMXzcgKDcgPDwgMTIpCiAjZGVmaW5lIE9ORU5BTkRfU1lTX0NGRzFfQlJMXzYgKDYgPDwgMTIpCiAjZGVmaW5lIE9ORU5BTkRfU1lTX0NGRzFfQlJMXzUgKDUgPDwgMTIpCiAjZGVmaW5lIE9ORU5BTkRfU1lTX0NGRzFfQlJMXzQgKDQgPDwgMTIpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBPTkVOQU5EX1NZU19DRkcxX0JSTF8zICgzIDw8IDEyKQogI2RlZmluZSBPTkVOQU5EX1NZU19DRkcxX0JSTF8xMCAoMiA8PCAxMikKICNkZWZpbmUgT05FTkFORF9TWVNfQ0ZHMV9CUkxfOSAoMSA8PCAxMikKICNkZWZpbmUgT05FTkFORF9TWVNfQ0ZHMV9CUkxfOCAoMCA8PCAxMikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE9ORU5BTkRfU1lTX0NGRzFfQlJMX1NISUZUICgxMikKICNkZWZpbmUgT05FTkFORF9TWVNfQ0ZHMV9CTF8zMiAoNCA8PCA5KQogI2RlZmluZSBPTkVOQU5EX1NZU19DRkcxX0JMXzE2ICgzIDw8IDkpCiAjZGVmaW5lIE9ORU5BTkRfU1lTX0NGRzFfQkxfOCAoMiA8PCA5KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgT05FTkFORF9TWVNfQ0ZHMV9CTF80ICgxIDw8IDkpCiAjZGVmaW5lIE9ORU5BTkRfU1lTX0NGRzFfQkxfQ09OVCAoMCA8PCA5KQogI2RlZmluZSBPTkVOQU5EX1NZU19DRkcxX0JMX1NISUZUICg5KQogI2RlZmluZSBPTkVOQU5EX1NZU19DRkcxX05PX0VDQyAoMSA8PCA4KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgT05FTkFORF9TWVNfQ0ZHMV9SRFkgKDEgPDwgNykKICNkZWZpbmUgT05FTkFORF9TWVNfQ0ZHMV9JTlQgKDEgPDwgNikKICNkZWZpbmUgT05FTkFORF9TWVNfQ0ZHMV9JT0JFICgxIDw8IDUpCiAjZGVmaW5lIE9ORU5BTkRfU1lTX0NGRzFfUkRZX0NPTkYgKDEgPDwgNCkKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgT05FTkFORF9DVFJMX09OR08gKDEgPDwgMTUpCiAjZGVmaW5lIE9ORU5BTkRfQ1RSTF9MT0NLICgxIDw8IDE0KQogI2RlZmluZSBPTkVOQU5EX0NUUkxfTE9BRCAoMSA8PCAxMykKICNkZWZpbmUgT05FTkFORF9DVFJMX1BST0dSQU0gKDEgPDwgMTIpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBPTkVOQU5EX0NUUkxfRVJBU0UgKDEgPDwgMTEpCiAjZGVmaW5lIE9ORU5BTkRfQ1RSTF9FUlJPUiAoMSA8PCAxMCkKICNkZWZpbmUgT05FTkFORF9DVFJMX1JTVEIgKDEgPDwgNykKICNkZWZpbmUgT05FTkFORF9DVFJMX09UUF9MICgxIDw8IDYpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBPTkVOQU5EX0NUUkxfT1RQX0JMICgxIDw8IDUpCi0KICNkZWZpbmUgT05FTkFORF9JTlRfTUFTVEVSICgxIDw8IDE1KQogI2RlZmluZSBPTkVOQU5EX0lOVF9SRUFEICgxIDw8IDcpCiAjZGVmaW5lIE9ORU5BTkRfSU5UX1dSSVRFICgxIDw8IDYpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBPTkVOQU5EX0lOVF9FUkFTRSAoMSA8PCA1KQogI2RlZmluZSBPTkVOQU5EX0lOVF9SRVNFVCAoMSA8PCA0KQogI2RlZmluZSBPTkVOQU5EX0lOVF9DTEVBUiAoMCA8PCAwKQotCiAjZGVmaW5lIE9ORU5BTkRfV1BfVVMgKDEgPDwgMikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE9ORU5BTkRfV1BfTFMgKDEgPDwgMSkKICNkZWZpbmUgT05FTkFORF9XUF9MVFMgKDEgPDwgMCkKLQogI2RlZmluZSBPTkVOQU5EX0VDQ18xQklUICgxIDw8IDApCiAjZGVmaW5lIE9ORU5BTkRfRUNDXzJCSVQgKDEgPDwgMSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE9ORU5BTkRfRUNDXzJCSVRfQUxMICgweEFBQUEpCi0KICNkZWZpbmUgT05FTkFORF9PVFBfTE9DS19PRkZTRVQgKDE0KQotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9tdGQvcGFydGl0aW9ucy5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L210ZC9wYXJ0aXRpb25zLmgKaW5kZXggYWViMTVlMS4uYzFmMTA2ZSAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L210ZC9wYXJ0aXRpb25zLmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L210ZC9wYXJ0aXRpb25zLmgKQEAgLTcsMzQgKzcsMzkgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIE1URF9QQVJUSVRJT05TX0gKICNkZWZpbmUgTVREX1BBUlRJVElPTlNfSAotCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLQogc3RydWN0IG10ZF9wYXJ0aXRpb24geworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBjaGFyICpuYW1lOwogIHVfaW50MzJfdCBzaXplOwogIHVfaW50MzJfdCBvZmZzZXQ7CiAgdV9pbnQzMl90IG1hc2tfZmxhZ3M7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCBuYW5kX2VjY2xheW91dCAqZWNjbGF5b3V0OwogIHN0cnVjdCBtdGRfaW5mbyAqKm10ZHA7CiB9OwotCiAjZGVmaW5lIE1URFBBUlRfT0ZTX05YVEJMSyAoLTIpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNVERQQVJUX09GU19BUFBFTkQgKC0xKQogI2RlZmluZSBNVERQQVJUX1NJWl9GVUxMICgwKQotCiBzdHJ1Y3QgbXRkX3BhcnRfcGFyc2VyIHsKICBzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCBtb2R1bGUgKm93bmVyOwogIGNvbnN0IGNoYXIgKm5hbWU7CiAgaW50ICgqcGFyc2VfZm4pKHN0cnVjdCBtdGRfaW5mbyAqLCBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiAqKiwgdW5zaWduZWQgbG9uZyk7CiB9OwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBwdXRfcGFydGl0aW9uX3BhcnNlcihwKSBkbyB7IG1vZHVsZV9wdXQoKHApLT5vd25lcik7IH0gd2hpbGUoMCkKLQogI2VuZGlmCi0KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9tdGlvLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbXRpby5oCmluZGV4IDQ3YTZlMmIuLjliNDNhMmQgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9tdGlvLmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L210aW8uaApAQCAtNywyNTMgKzcsMjcyIEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfTElOVVhfTVRJT19ICiAjZGVmaW5lIF9MSU5VWF9NVElPX0gKLQogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjaW5jbHVkZSA8bGludXgvcWljMTE3Lmg+Ci0KIHN0cnVjdCBtdG9wIHsKICBzaG9ydCBtdF9vcDsKICBpbnQgbXRfY291bnQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKLQotI2RlZmluZSBNVFJFU0VUIDAgIAotI2RlZmluZSBNVEZTRiAxICAKLSNkZWZpbmUgTVRCU0YgMiAgCi0jZGVmaW5lIE1URlNSIDMgIAotI2RlZmluZSBNVEJTUiA0ICAKLSNkZWZpbmUgTVRXRU9GIDUgIAotI2RlZmluZSBNVFJFVyA2ICAKLSNkZWZpbmUgTVRPRkZMIDcgIAotI2RlZmluZSBNVE5PUCA4ICAKLSNkZWZpbmUgTVRSRVRFTiA5ICAKLSNkZWZpbmUgTVRCU0ZNIDEwICAKLSNkZWZpbmUgTVRGU0ZNIDExICAKLSNkZWZpbmUgTVRFT00gMTIgIAotI2RlZmluZSBNVEVSQVNFIDEzICAKLQotI2RlZmluZSBNVFJBUzEgMTQgIAotI2RlZmluZSBNVFJBUzIgMTUgIAotI2RlZmluZSBNVFJBUzMgMTYgIAotCi0jZGVmaW5lIE1UU0VUQkxLIDIwICAKLSNkZWZpbmUgTVRTRVRERU5TSVRZIDIxICAKLSNkZWZpbmUgTVRTRUVLIDIyICAKLSNkZWZpbmUgTVRURUxMIDIzICAKLSNkZWZpbmUgTVRTRVREUlZCVUZGRVIgMjQgIAotCi0jZGVmaW5lIE1URlNTIDI1ICAKLSNkZWZpbmUgTVRCU1MgMjYgIAotI2RlZmluZSBNVFdTTSAyNyAgCi0KLSNkZWZpbmUgTVRMT0NLIDI4ICAKLSNkZWZpbmUgTVRVTkxPQ0sgMjkgIAotI2RlZmluZSBNVExPQUQgMzAgIAotI2RlZmluZSBNVFVOTE9BRCAzMSAgCi0jZGVmaW5lIE1UQ09NUFJFU1NJT04gMzIgCi0jZGVmaW5lIE1UU0VUUEFSVCAzMyAgCi0jZGVmaW5lIE1UTUtQQVJUIDM0ICAKLQorI2RlZmluZSBNVFJFU0VUIDAKKyNkZWZpbmUgTVRGU0YgMQorI2RlZmluZSBNVEJTRiAyCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBNVEZTUiAzCisjZGVmaW5lIE1UQlNSIDQKKyNkZWZpbmUgTVRXRU9GIDUKKyNkZWZpbmUgTVRSRVcgNgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgTVRPRkZMIDcKKyNkZWZpbmUgTVROT1AgOAorI2RlZmluZSBNVFJFVEVOIDkKKyNkZWZpbmUgTVRCU0ZNIDEwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBNVEZTRk0gMTEKKyNkZWZpbmUgTVRFT00gMTIKKyNkZWZpbmUgTVRFUkFTRSAxMworI2RlZmluZSBNVFJBUzEgMTQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIE1UUkFTMiAxNQorI2RlZmluZSBNVFJBUzMgMTYKKyNkZWZpbmUgTVRTRVRCTEsgMjAKKyNkZWZpbmUgTVRTRVRERU5TSVRZIDIxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBNVFNFRUsgMjIKKyNkZWZpbmUgTVRURUxMIDIzCisjZGVmaW5lIE1UU0VURFJWQlVGRkVSIDI0CisjZGVmaW5lIE1URlNTIDI1CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBNVEJTUyAyNgorI2RlZmluZSBNVFdTTSAyNworI2RlZmluZSBNVExPQ0sgMjgKKyNkZWZpbmUgTVRVTkxPQ0sgMjkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIE1UTE9BRCAzMAorI2RlZmluZSBNVFVOTE9BRCAzMQorI2RlZmluZSBNVENPTVBSRVNTSU9OIDMyCisjZGVmaW5lIE1UU0VUUEFSVCAzMworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgTVRNS1BBUlQgMzQKIHN0cnVjdCBtdGdldCB7CiAgbG9uZyBtdF90eXBlOwogIGxvbmcgbXRfcmVzaWQ7Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgbG9uZyBtdF9kc3JlZzsKICBsb25nIG10X2dzdGF0OwogIGxvbmcgbXRfZXJyZWc7Ci0KICBfX2tlcm5lbF9kYWRkcl90IG10X2ZpbGVubzsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX19rZXJuZWxfZGFkZHJfdCBtdF9ibGtubzsKIH07Ci0KICNkZWZpbmUgTVRfSVNVTktOT1dOIDB4MDEKLSNkZWZpbmUgTVRfSVNRSUMwMiAweDAyICAKLSNkZWZpbmUgTVRfSVNXVDUxNTAgMHgwMyAgCi0jZGVmaW5lIE1UX0lTQVJDSElWRV81OTQ1TDIgMHgwNCAgCi0jZGVmaW5lIE1UX0lTQ01TSjUwMCAweDA1ICAKLSNkZWZpbmUgTVRfSVNUREMzNjEwIDB4MDYgIAotI2RlZmluZSBNVF9JU0FSQ0hJVkVfVlA2MEkgMHgwNyAgCi0jZGVmaW5lIE1UX0lTQVJDSElWRV8yMTUwTCAweDA4ICAKLSNkZWZpbmUgTVRfSVNBUkNISVZFXzIwNjBMIDB4MDkgIAotI2RlZmluZSBNVF9JU0FSQ0hJVkVTQzQ5OSAweDBBICAKLSNkZWZpbmUgTVRfSVNRSUMwMl9BTExfRkVBVFVSRVMgMHgwRiAgCi0jZGVmaW5lIE1UX0lTV1Q1MDk5RUVOMjQgMHgxMSAgCi0jZGVmaW5lIE1UX0lTVEVBQ19NVDJTVCAweDEyICAKLSNkZWZpbmUgTVRfSVNFVkVSRVhfRlQ0MEEgMHgzMiAgCi0jZGVmaW5lIE1UX0lTRERTMSAweDUxICAKLSNkZWZpbmUgTVRfSVNERFMyIDB4NTIgIAotI2RlZmluZSBNVF9JU09OU1RSRUFNX1NDIDB4NjEgIAotI2RlZmluZSBNVF9JU1NDU0kxIDB4NzEgIAotI2RlZmluZSBNVF9JU1NDU0kyIDB4NzIgIAotCi0jZGVmaW5lIE1UX0lTRlRBUEVfVU5LTk9XTiAweDgwMDAwMCAgCisjZGVmaW5lIE1UX0lTUUlDMDIgMHgwMgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgTVRfSVNXVDUxNTAgMHgwMworI2RlZmluZSBNVF9JU0FSQ0hJVkVfNTk0NUwyIDB4MDQKKyNkZWZpbmUgTVRfSVNDTVNKNTAwIDB4MDUKKyNkZWZpbmUgTVRfSVNUREMzNjEwIDB4MDYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIE1UX0lTQVJDSElWRV9WUDYwSSAweDA3CisjZGVmaW5lIE1UX0lTQVJDSElWRV8yMTUwTCAweDA4CisjZGVmaW5lIE1UX0lTQVJDSElWRV8yMDYwTCAweDA5CisjZGVmaW5lIE1UX0lTQVJDSElWRVNDNDk5IDB4MEEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIE1UX0lTUUlDMDJfQUxMX0ZFQVRVUkVTIDB4MEYKKyNkZWZpbmUgTVRfSVNXVDUwOTlFRU4yNCAweDExCisjZGVmaW5lIE1UX0lTVEVBQ19NVDJTVCAweDEyCisjZGVmaW5lIE1UX0lTRVZFUkVYX0ZUNDBBIDB4MzIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIE1UX0lTRERTMSAweDUxCisjZGVmaW5lIE1UX0lTRERTMiAweDUyCisjZGVmaW5lIE1UX0lTT05TVFJFQU1fU0MgMHg2MQorI2RlZmluZSBNVF9JU1NDU0kxIDB4NzEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIE1UX0lTU0NTSTIgMHg3MgorI2RlZmluZSBNVF9JU0ZUQVBFX1VOS05PV04gMHg4MDAwMDAKICNkZWZpbmUgTVRfSVNGVEFQRV9GTEFHIDB4ODAwMDAwCi0KIHN0cnVjdCBtdF90YXBlX2luZm8geworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBsb25nIHRfdHlwZTsKICBjaGFyICp0X25hbWU7CiB9OwotCiAjZGVmaW5lIE1UX1RBUEVfSU5GTyB7ICAge01UX0lTVU5LTk9XTiwgIlVua25vd24gdHlwZSBvZiB0YXBlIGRldmljZSJ9LCAgIHtNVF9JU1FJQzAyLCAiR2VuZXJpYyBRSUMtMDIgdGFwZSBzdHJlYW1lciJ9LCAgIHtNVF9JU1dUNTE1MCwgIldhbmd0ZWsgNTE1MCwgUUlDLTE1MCJ9LCAgIHtNVF9JU0FSQ0hJVkVfNTk0NUwyLCAiQXJjaGl2ZSA1OTQ1TC0yIn0sICAge01UX0lTQ01TSjUwMCwgIkNNUyBKdW1ibyA1MDAifSwgICB7TVRfSVNUREMzNjEwLCAiVGFuZGJlcmcgVERDIDM2MTAsIFFJQy0yNCJ9LCAgIHtNVF9JU0FSQ0hJVkVfVlA2MEksICJBcmNoaXZlIFZQNjBpLCBRSUMtMDIifSwgICB7TVRfSVNBUkNISVZFXzIxNTBMLCAiQXJjaGl2ZSBWaXBlciAyMTUwTCJ9LCAgIHtNVF9JU0FSQ0hJVkVfMjA2MEwsICJBcmNoaXZlIFZpcGVyIDIwNjBMIn0sICAge01UX0lTQVJDSElWRVNDNDk5LCAiQXJjaGl2ZSBTQy00OTkgUUlDLTM2IGNvbnRyb2xsZXIifSwgICB7TVRfSVNRSUMwMl9BTExfRkVBVFVSRVMsICJHZW5lcmljIFFJQy0wMiB0YXBlLCBhbGwgZmVhdHVyZXMifSwgICB7TVRfSVNXVDUwOTlFRU4yNCwgIldhbmd0ZWsgNTA5OS1lZW4yNCwgNjBNQiJ9LCAgIHtNVF9JU1RFQUNfTVQyU1QsICJUZWFjIE1ULTJTVCAxNTVtYiBkYXRhIGNhc3NldHRlIGRyaXZlIn0sICAge01UX0lTRVZFUkVYX0ZUNDBBLCAiRXZlcmV4IEZUNDBBLCBRSUMtNDAifSwgICB7TVRfSVNPTlNUUkVBTV9TQywgIk9uU3RyZWFtIFNDLSwgREktLCBEUC0sIG9yIFVTQiB0YXBlIGRyaXZlIn0sICAge01UX0lTU0NTSTEsICJHZW5lcmljIFNDU0ktMSB0YXBlIn0sICAge01UX0lTU0NTSTIsICJHZW5lcmljIFNDU0ktMiB0YXBlIn0sICAgezAsIE5VTEx9ICB9Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgbXRwb3MgewogIGxvbmcgbXRfYmxrbm87CiB9OwotCiBzdHJ1Y3QgbXR2b2xpbmZvIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgaW50IG10X3ZvbG5vOwogIHVuc2lnbmVkIGludCBtdF9ibGtzejsKICB1bnNpZ25lZCBpbnQgbXRfcmF3c2l6ZTsKICB1bnNpZ25lZCBpbnQgbXRfc2l6ZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgaW50IG10X2NtcHI6MTsKIH07Ci0KICNkZWZpbmUgTVRfRlRfUkRfU0lOR0xFIDAKICNkZWZpbmUgTVRfRlRfUkRfQUhFQUQgMQotI2RlZmluZSBNVF9GVF9XUl9BU1lOQyAwICAKLSNkZWZpbmUgTVRfRlRfV1JfTVVMVEkgMSAgCi0jZGVmaW5lIE1UX0ZUX1dSX1NJTkdMRSAyICAKLSNkZWZpbmUgTVRfRlRfV1JfREVMRVRFIDMgIAotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBNVF9GVF9XUl9BU1lOQyAwCisjZGVmaW5lIE1UX0ZUX1dSX01VTFRJIDEKKyNkZWZpbmUgTVRfRlRfV1JfU0lOR0xFIDIKKyNkZWZpbmUgTVRfRlRfV1JfREVMRVRFIDMKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgbXRmdHNlZwogewogIHVuc2lnbmVkIG10X3NlZ25vOwogIHVuc2lnbmVkIG10X21vZGU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGludCBtdF9yZXN1bHQ7CiAgdm9pZCBfX3VzZXIgKm10X2RhdGE7CiB9OwotCiBzdHJ1Y3QgbXR0YXBlc2l6ZSB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGxvbmcgbXRfY2FwYWNpdHk7CiAgdW5zaWduZWQgbG9uZyBtdF91c2VkOwogfTsKLQotI2RlZmluZSBGVEZNVF9TRVRfUEFSTVMgMSAgCi0jZGVmaW5lIEZURk1UX0dFVF9QQVJNUyAyICAKLSNkZWZpbmUgRlRGTVRfRk9STUFUX1RSQUNLIDMgIAotI2RlZmluZSBGVEZNVF9TVEFUVVMgNCAgCi0jZGVmaW5lIEZURk1UX1ZFUklGWSA1ICAKLQorI2RlZmluZSBGVEZNVF9TRVRfUEFSTVMgMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgRlRGTVRfR0VUX1BBUk1TIDIKKyNkZWZpbmUgRlRGTVRfRk9STUFUX1RSQUNLIDMKKyNkZWZpbmUgRlRGTVRfU1RBVFVTIDQKKyNkZWZpbmUgRlRGTVRfVkVSSUZZIDUKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgZnRmbXRwYXJtcyB7CiAgdW5zaWduZWQgY2hhciBmdF9xaWNzdGQ7CiAgdW5zaWduZWQgY2hhciBmdF9mbXRjb2RlOwogIHVuc2lnbmVkIGNoYXIgZnRfZmhtOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBjaGFyIGZ0X2Z0bTsKICB1bnNpZ25lZCBzaG9ydCBmdF9zcHQ7CiAgdW5zaWduZWQgc2hvcnQgZnRfdHBjOwogfTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBmdGZtdHRyYWNrIHsKICB1bnNpZ25lZCBpbnQgZnRfdHJhY2s7CiAgdW5zaWduZWQgY2hhciBmdF9nYXAzOwogfTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBmdGZtdHN0YXR1cyB7CiAgdW5zaWduZWQgaW50IGZ0X3NlZ21lbnQ7CiB9OwotCiBzdHJ1Y3QgZnRmbXR2ZXJpZnkgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBpbnQgZnRfc2VnbWVudDsKICB1bnNpZ25lZCBsb25nIGZ0X2JzbTsKIH07Ci0KIHN0cnVjdCBtdGZ0Zm9ybWF0IHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgaW50IGZtdF9vcDsKICB1bmlvbiBmbXRfYXJnIHsKICBzdHJ1Y3QgZnRmbXRwYXJtcyBmbXRfcGFybXM7CiAgc3RydWN0IGZ0Zm10dHJhY2sgZm10X3RyYWNrOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgZnRmbXRzdGF0dXMgZm10X3N0YXR1czsKICBzdHJ1Y3QgZnRmbXR2ZXJpZnkgZm10X3ZlcmlmeTsKICB9IGZtdF9hcmc7CiB9OwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IG10ZnRjbWQgewogIHVuc2lnbmVkIGludCBmdF93YWl0X2JlZm9yZTsKICBxaWMxMTdfY21kX3QgZnRfY21kOwogIHVuc2lnbmVkIGNoYXIgZnRfcGFybV9jbnQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGNoYXIgZnRfcGFybXNbM107CiAgdW5zaWduZWQgaW50IGZ0X3Jlc3VsdF9iaXRzOwogIHVuc2lnbmVkIGludCBmdF9yZXN1bHQ7CiAgdW5zaWduZWQgaW50IGZ0X3dhaXRfYWZ0ZXI7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGludCBmdF9zdGF0dXM7CiAgaW50IGZ0X2Vycm9yOwogfTsKLQotI2RlZmluZSBNVElPQ1RPUCBfSU9XKCdtJywgMSwgc3RydWN0IG10b3ApICAKLSNkZWZpbmUgTVRJT0NHRVQgX0lPUignbScsIDIsIHN0cnVjdCBtdGdldCkgIAotI2RlZmluZSBNVElPQ1BPUyBfSU9SKCdtJywgMywgc3RydWN0IG10cG9zKSAgCi0KLSNkZWZpbmUgTVRJT0NHRVRDT05GSUcgX0lPUignbScsIDQsIHN0cnVjdCBtdGNvbmZpZ2luZm8pICAKLSNkZWZpbmUgTVRJT0NTRVRDT05GSUcgX0lPVygnbScsIDUsIHN0cnVjdCBtdGNvbmZpZ2luZm8pICAKLQotI2RlZmluZSBNVElPQ1JERlRTRUcgX0lPV1IoJ20nLCA2LCBzdHJ1Y3QgbXRmdHNlZykgIAotI2RlZmluZSBNVElPQ1dSRlRTRUcgX0lPV1IoJ20nLCA3LCBzdHJ1Y3QgbXRmdHNlZykgIAotI2RlZmluZSBNVElPQ1ZPTElORk8gX0lPUignbScsIDgsIHN0cnVjdCBtdHZvbGluZm8pICAKLSNkZWZpbmUgTVRJT0NHRVRTSVpFIF9JT1IoJ20nLCA5LCBzdHJ1Y3QgbXR0YXBlc2l6ZSkgCi0jZGVmaW5lIE1USU9DRlRGT1JNQVQgX0lPV1IoJ20nLCAxMCwgc3RydWN0IG10ZnRmb3JtYXQpICAKLSNkZWZpbmUgTVRJT0NGVENNRCBfSU9XUignbScsIDExLCBzdHJ1Y3QgbXRmdGNtZCkgIAotCisjZGVmaW5lIE1USU9DVE9QIF9JT1coJ20nLCAxLCBzdHJ1Y3QgbXRvcCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIE1USU9DR0VUIF9JT1IoJ20nLCAyLCBzdHJ1Y3QgbXRnZXQpCisjZGVmaW5lIE1USU9DUE9TIF9JT1IoJ20nLCAzLCBzdHJ1Y3QgbXRwb3MpCisjZGVmaW5lIE1USU9DR0VUQ09ORklHIF9JT1IoJ20nLCA0LCBzdHJ1Y3QgbXRjb25maWdpbmZvKQorI2RlZmluZSBNVElPQ1NFVENPTkZJRyBfSU9XKCdtJywgNSwgc3RydWN0IG10Y29uZmlnaW5mbykKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIE1USU9DUkRGVFNFRyBfSU9XUignbScsIDYsIHN0cnVjdCBtdGZ0c2VnKQorI2RlZmluZSBNVElPQ1dSRlRTRUcgX0lPV1IoJ20nLCA3LCBzdHJ1Y3QgbXRmdHNlZykKKyNkZWZpbmUgTVRJT0NWT0xJTkZPIF9JT1IoJ20nLCA4LCBzdHJ1Y3QgbXR2b2xpbmZvKQorI2RlZmluZSBNVElPQ0dFVFNJWkUgX0lPUignbScsIDksIHN0cnVjdCBtdHRhcGVzaXplKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgTVRJT0NGVEZPUk1BVCBfSU9XUignbScsIDEwLCBzdHJ1Y3QgbXRmdGZvcm1hdCkKKyNkZWZpbmUgTVRJT0NGVENNRCBfSU9XUignbScsIDExLCBzdHJ1Y3QgbXRmdGNtZCkKICNkZWZpbmUgR01UX0VPRih4KSAoKHgpICYgMHg4MDAwMDAwMCkKICNkZWZpbmUgR01UX0JPVCh4KSAoKHgpICYgMHg0MDAwMDAwMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEdNVF9FT1QoeCkgKCh4KSAmIDB4MjAwMDAwMDApCi0jZGVmaW5lIEdNVF9TTSh4KSAoKHgpICYgMHgxMDAwMDAwMCkgIAotI2RlZmluZSBHTVRfRU9EKHgpICgoeCkgJiAweDA4MDAwMDAwKSAgCisjZGVmaW5lIEdNVF9TTSh4KSAoKHgpICYgMHgxMDAwMDAwMCkKKyNkZWZpbmUgR01UX0VPRCh4KSAoKHgpICYgMHgwODAwMDAwMCkKICNkZWZpbmUgR01UX1dSX1BST1QoeCkgKCh4KSAmIDB4MDQwMDAwMDApCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEdNVF9PTkxJTkUoeCkgKCh4KSAmIDB4MDEwMDAwMDApCiAjZGVmaW5lIEdNVF9EXzYyNTAoeCkgKCh4KSAmIDB4MDA4MDAwMDApCiAjZGVmaW5lIEdNVF9EXzE2MDAoeCkgKCh4KSAmIDB4MDA0MDAwMDApCiAjZGVmaW5lIEdNVF9EXzgwMCh4KSAoKHgpICYgMHgwMDIwMDAwMCkKLQotI2RlZmluZSBHTVRfRFJfT1BFTih4KSAoKHgpICYgMHgwMDA0MDAwMCkgIAotCi0jZGVmaW5lIEdNVF9JTV9SRVBfRU4oeCkgKCh4KSAmIDB4MDAwMTAwMDApICAKLSNkZWZpbmUgR01UX0NMTih4KSAoKHgpICYgMHgwMDAwODAwMCkgIAotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBHTVRfRFJfT1BFTih4KSAoKHgpICYgMHgwMDA0MDAwMCkKKyNkZWZpbmUgR01UX0lNX1JFUF9FTih4KSAoKHgpICYgMHgwMDAxMDAwMCkKKyNkZWZpbmUgR01UX0NMTih4KSAoKHgpICYgMHgwMDAwODAwMCkKICNkZWZpbmUgTVRfU1RfQkxLU0laRV9TSElGVCAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNVF9TVF9CTEtTSVpFX01BU0sgMHhmZmZmZmYKICNkZWZpbmUgTVRfU1RfREVOU0lUWV9TSElGVCAyNAogI2RlZmluZSBNVF9TVF9ERU5TSVRZX01BU0sgMHhmZjAwMDAwMAotCiAjZGVmaW5lIE1UX1NUX1NPRlRFUlJfU0hJRlQgMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTVRfU1RfU09GVEVSUl9NQVNLIDB4ZmZmZgotCiAjZGVmaW5lIE1UX1NUX09QVElPTlMgMHhmMDAwMDAwMAogI2RlZmluZSBNVF9TVF9CT09MRUFOUyAweDEwMDAwMDAwCiAjZGVmaW5lIE1UX1NUX1NFVEJPT0xFQU5TIDB4MzAwMDAwMDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1UX1NUX0NMRUFSQk9PTEVBTlMgMHg0MDAwMDAwMAogI2RlZmluZSBNVF9TVF9XUklURV9USFJFU0hPTEQgMHgyMDAwMDAwMAogI2RlZmluZSBNVF9TVF9ERUZfQkxLU0laRSAweDUwMDAwMDAwCiAjZGVmaW5lIE1UX1NUX0RFRl9PUFRJT05TIDB4NjAwMDAwMDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1UX1NUX1RJTUVPVVRTIDB4NzAwMDAwMDAKICNkZWZpbmUgTVRfU1RfU0VUX1RJTUVPVVQgKE1UX1NUX1RJTUVPVVRTIHwgMHgwMDAwMDApCiAjZGVmaW5lIE1UX1NUX1NFVF9MT05HX1RJTUVPVVQgKE1UX1NUX1RJTUVPVVRTIHwgMHgxMDAwMDApCiAjZGVmaW5lIE1UX1NUX1NFVF9DTE4gMHg4MDAwMDAwMAotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNVF9TVF9CVUZGRVJfV1JJVEVTIDB4MQogI2RlZmluZSBNVF9TVF9BU1lOQ19XUklURVMgMHgyCiAjZGVmaW5lIE1UX1NUX1JFQURfQUhFQUQgMHg0CiAjZGVmaW5lIE1UX1NUX0RFQlVHR0lORyAweDgKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1UX1NUX1RXT19GTSAweDEwCiAjZGVmaW5lIE1UX1NUX0ZBU1RfTVRFT00gMHgyMAogI2RlZmluZSBNVF9TVF9BVVRPX0xPQ0sgMHg0MAogI2RlZmluZSBNVF9TVF9ERUZfV1JJVEVTIDB4ODAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1UX1NUX0NBTl9CU1IgMHgxMDAKICNkZWZpbmUgTVRfU1RfTk9fQkxLTElNUyAweDIwMAogI2RlZmluZSBNVF9TVF9DQU5fUEFSVElUSU9OUyAweDQwMAogI2RlZmluZSBNVF9TVF9TQ1NJMkxPR0lDQUwgMHg4MDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1UX1NUX1NZU1YgMHgxMDAwCiAjZGVmaW5lIE1UX1NUX05PV0FJVCAweDIwMDAKLQogI2RlZmluZSBNVF9TVF9DTEVBUl9ERUZBVUxUIDB4ZmZmZmYKICNkZWZpbmUgTVRfU1RfREVGX0RFTlNJVFkgKE1UX1NUX0RFRl9PUFRJT05TIHwgMHgxMDAwMDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNVF9TVF9ERUZfQ09NUFJFU1NJT04gKE1UX1NUX0RFRl9PUFRJT05TIHwgMHgyMDAwMDApCiAjZGVmaW5lIE1UX1NUX0RFRl9EUlZCVUZGRVIgKE1UX1NUX0RFRl9PUFRJT05TIHwgMHgzMDAwMDApCi0KICNkZWZpbmUgTVRfU1RfSFBMT0FERVJfT0ZGU0VUIDEwMDAwCi0KICNlbmRpZgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9tdXRleC1kZWJ1Zy5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L211dGV4LWRlYnVnLmgKaW5kZXggNzA2NTYxMC4uNWQ4OGY3NSAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L211dGV4LWRlYnVnLmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L211dGV4LWRlYnVnLmgKQEAgLTcsMTYgKzcsMjAgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9fTElOVVhfTVVURVhfREVCVUdfSAogI2RlZmluZSBfX0xJTlVYX01VVEVYX0RFQlVHX0gKLQogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KICNpbmNsdWRlIDxsaW51eC9sb2NrZGVwLmg+Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fREVCVUdfTVVURVhfSU5JVElBTElaRVIobG9ja25hbWUpICAgLCAubWFnaWMgPSAmbG9ja25hbWUKLQogI2RlZmluZSBtdXRleF9pbml0KG11dGV4KSAgZG8geyAgIHN0YXRpYyBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgX19rZXk7ICAgICBfX211dGV4X2luaXQoKG11dGV4KSwgI211dGV4LCAmX19rZXkpOyAgfSB3aGlsZSAoMCkKLQogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbXV0ZXguaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9tdXRleC5oCmluZGV4IDRiMzNhOGEuLmU3NGMwNDggMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9tdXRleC5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9tdXRleC5oCkBAIC03LDQwICs3LDQyIEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfX0xJTlVYX01VVEVYX0gKICNkZWZpbmUgX19MSU5VWF9NVVRFWF9ICi0KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2tfdHlwZXMuaD4KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgogI2luY2x1ZGUgPGxpbnV4L2xvY2tkZXAuaD4KLQogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KLQogc3RydWN0IG11dGV4IHsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBhdG9taWNfdCBjb3VudDsKICBzcGlubG9ja190IHdhaXRfbG9jazsKICBzdHJ1Y3QgbGlzdF9oZWFkIHdhaXRfbGlzdDsKIH07Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgbXV0ZXhfd2FpdGVyIHsKICBzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CiAgc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrOwogfTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19ERUJVR19NVVRFWF9JTklUSUFMSVpFUihsb2NrbmFtZSkKICNkZWZpbmUgbXV0ZXhfaW5pdChtdXRleCkgIGRvIHsgICBzdGF0aWMgc3RydWN0IGxvY2tfY2xhc3Nfa2V5IF9fa2V5OyAgICAgX19tdXRleF9pbml0KChtdXRleCksICNtdXRleCwgJl9fa2V5KTsgIH0gd2hpbGUgKDApCiAjZGVmaW5lIG11dGV4X2Rlc3Ryb3kobXV0ZXgpIGRvIHsgfSB3aGlsZSAoMCkKLQogI2RlZmluZSBfX0RFUF9NQVBfTVVURVhfSU5JVElBTElaRVIobG9ja25hbWUpCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fTVVURVhfSU5JVElBTElaRVIobG9ja25hbWUpICAgeyAuY291bnQgPSBBVE9NSUNfSU5JVCgxKSAgICwgLndhaXRfbG9jayA9IFNQSU5fTE9DS19VTkxPQ0tFRCAgICwgLndhaXRfbGlzdCA9IExJU1RfSEVBRF9JTklUKGxvY2tuYW1lLndhaXRfbGlzdCkgICBfX0RFQlVHX01VVEVYX0lOSVRJQUxJWkVSKGxvY2tuYW1lKSAgIF9fREVQX01BUF9NVVRFWF9JTklUSUFMSVpFUihsb2NrbmFtZSkgfQotCiAjZGVmaW5lIERFRklORV9NVVRFWChtdXRleG5hbWUpICAgc3RydWN0IG11dGV4IG11dGV4bmFtZSA9IF9fTVVURVhfSU5JVElBTElaRVIobXV0ZXhuYW1lKQotCiAjZGVmaW5lIG11dGV4X2xvY2tfbmVzdGVkKGxvY2ssIHN1YmNsYXNzKSBtdXRleF9sb2NrKGxvY2spCi0KICNlbmRpZgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uY3AuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uY3AuaAppbmRleCAwOTEyMjBhLi5lMmNkN2Q0IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmNwLmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25jcC5oCkBAIC03LDE4NyArNywyMTIgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9MSU5VWF9OQ1BfSAogI2RlZmluZSBfTElOVVhfTkNQX0gKLQogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0KICNkZWZpbmUgTkNQX1BUWVBFICgweDExKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTkNQX1BPUlQgKDB4MDQ1MSkKLQogI2RlZmluZSBOQ1BfQUxMT0NfU0xPVF9SRVFVRVNUICgweDExMTEpCiAjZGVmaW5lIE5DUF9SRVFVRVNUICgweDIyMjIpCiAjZGVmaW5lIE5DUF9ERUFMTE9DX1NMT1RfUkVRVUVTVCAoMHg1NTU1KQotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IG5jcF9yZXF1ZXN0X2hlYWRlciB7CiAgX191MTYgdHlwZTsKICBfX3U4IHNlcXVlbmNlOwogIF9fdTggY29ubl9sb3c7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTggdGFzazsKICBfX3U4IGNvbm5faGlnaDsKICBfX3U4IGZ1bmN0aW9uOwogIF9fdTggZGF0YVswXTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwotCiAjZGVmaW5lIE5DUF9SRVBMWSAoMHgzMzMzKQogI2RlZmluZSBOQ1BfV0FUQ0hET0cgKDB4M0UzRSkKICNkZWZpbmUgTkNQX1BPU0lUSVZFX0FDSyAoMHg5OTk5KQotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IG5jcF9yZXBseV9oZWFkZXIgewogIF9fdTE2IHR5cGU7CiAgX191OCBzZXF1ZW5jZTsKICBfX3U4IGNvbm5fbG93OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IHRhc2s7CiAgX191OCBjb25uX2hpZ2g7CiAgX191OCBjb21wbGV0aW9uX2NvZGU7CiAgX191OCBjb25uZWN0aW9uX3N0YXRlOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IGRhdGFbMF07CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwotCiAjZGVmaW5lIE5DUF9WT0xOQU1FX0xFTiAoMTYpCiAjZGVmaW5lIE5DUF9OVU1CRVJfT0ZfVk9MVU1FUyAoMjU2KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBuY3Bfdm9sdW1lX2luZm8gewogIF9fdTMyIHRvdGFsX2Jsb2NrczsKICBfX3UzMiBmcmVlX2Jsb2NrczsKICBfX3UzMiBwdXJnZWFibGVfYmxvY2tzOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBub3RfeWV0X3B1cmdlYWJsZV9ibG9ja3M7CiAgX191MzIgdG90YWxfZGlyX2VudHJpZXM7CiAgX191MzIgYXZhaWxhYmxlX2Rpcl9lbnRyaWVzOwogIF9fdTggc2VjdG9yc19wZXJfYmxvY2s7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGNoYXIgdm9sdW1lX25hbWVbTkNQX1ZPTE5BTUVfTEVOICsgMV07CiB9OwotCiAjZGVmaW5lIEFSX1JFQUQgKGNwdV90b19sZTE2KDEpKQogI2RlZmluZSBBUl9XUklURSAoY3B1X3RvX2xlMTYoMikpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBUl9FWENMVVNJVkUgKGNwdV90b19sZTE2KDB4MjApKQotCiAjZGVmaW5lIE5DUF9GSUxFX0lEX0xFTiA2Ci0KICNkZWZpbmUgTldfTlNfRE9TIDAKICNkZWZpbmUgTldfTlNfTUFDIDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE5XX05TX05GUyAyCiAjZGVmaW5lIE5XX05TX0ZUQU0gMwogI2RlZmluZSBOV19OU19PUzIgNAotCiAjZGVmaW5lIFJJTV9OQU1FIChjcHVfdG9fbGUzMigxKSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFJJTV9TUEFDRV9BTExPQ0FURUQgKGNwdV90b19sZTMyKDIpKQogI2RlZmluZSBSSU1fQVRUUklCVVRFUyAoY3B1X3RvX2xlMzIoNCkpCiAjZGVmaW5lIFJJTV9EQVRBX1NJWkUgKGNwdV90b19sZTMyKDgpKQogI2RlZmluZSBSSU1fVE9UQUxfU0laRSAoY3B1X3RvX2xlMzIoMHgxMCkpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBSSU1fRVhUX0FUVFJfSU5GTyAoY3B1X3RvX2xlMzIoMHgyMCkpCiAjZGVmaW5lIFJJTV9BUkNISVZFIChjcHVfdG9fbGUzMigweDQwKSkKICNkZWZpbmUgUklNX01PRElGWSAoY3B1X3RvX2xlMzIoMHg4MCkpCiAjZGVmaW5lIFJJTV9DUkVBVElPTiAoY3B1X3RvX2xlMzIoMHgxMDApKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUklNX09XTklOR19OQU1FU1BBQ0UgKGNwdV90b19sZTMyKDB4MjAwKSkKICNkZWZpbmUgUklNX0RJUkVDVE9SWSAoY3B1X3RvX2xlMzIoMHg0MDApKQogI2RlZmluZSBSSU1fUklHSFRTIChjcHVfdG9fbGUzMigweDgwMCkpCiAjZGVmaW5lIFJJTV9BTEwgKGNwdV90b19sZTMyKDB4RkZGKSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFJJTV9DT01QUkVTU0VEX0lORk8gKGNwdV90b19sZTMyKDB4ODAwMDAwMDApKQotCiAjZGVmaW5lIE5TSUJNX05GU19OQU1FIDB4MDAwMQogI2RlZmluZSBOU0lCTV9ORlNfTU9ERSAweDAwMDIKICNkZWZpbmUgTlNJQk1fTkZTX0dJRCAweDAwMDQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE5TSUJNX05GU19OTElOS1MgMHgwMDA4CiAjZGVmaW5lIE5TSUJNX05GU19SREVWIDB4MDAxMAogI2RlZmluZSBOU0lCTV9ORlNfTElOSyAweDAwMjAKICNkZWZpbmUgTlNJQk1fTkZTX0NSRUFURUQgMHgwMDQwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBOU0lCTV9ORlNfVUlEIDB4MDA4MAogI2RlZmluZSBOU0lCTV9ORlNfQUNTRkxBRyAweDAxMDAKICNkZWZpbmUgTlNJQk1fTkZTX01ZRkxBRyAweDAyMDAKLQogI2RlZmluZSBPQ19NT0RFX09QRU4gMHgwMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgT0NfTU9ERV9UUlVOQ0FURSAweDAyCiAjZGVmaW5lIE9DX01PREVfUkVQTEFDRSAweDAyCiAjZGVmaW5lIE9DX01PREVfQ1JFQVRFIDB4MDgKLQogI2RlZmluZSBPQ19BQ1RJT05fTk9ORSAweDAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBPQ19BQ1RJT05fT1BFTiAweDAxCiAjZGVmaW5lIE9DX0FDVElPTl9DUkVBVEUgMHgwMgogI2RlZmluZSBPQ19BQ1RJT05fVFJVTkNBVEUgMHgwNAogI2RlZmluZSBPQ19BQ1RJT05fUkVQTEFDRSAweDA0Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjaWZuZGVmIEFSX1JFQURfT05MWQogI2RlZmluZSBBUl9SRUFEX09OTFkgMHgwMDAxCiAjZGVmaW5lIEFSX1dSSVRFX09OTFkgMHgwMDAyCiAjZGVmaW5lIEFSX0RFTllfUkVBRCAweDAwMDQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFSX0RFTllfV1JJVEUgMHgwMDA4CiAjZGVmaW5lIEFSX0NPTVBBVElCSUxJVFkgMHgwMDEwCiAjZGVmaW5lIEFSX1dSSVRFX1RIUk9VR0ggMHgwMDQwCiAjZGVmaW5lIEFSX09QRU5fQ09NUFJFU1NFRCAweDAxMDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZW5kaWYKLQogc3RydWN0IG53X25mc19pbmZvIHsKICBfX3UzMiBtb2RlOwogIF9fdTMyIHJkZXY7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKLQogc3RydWN0IG53X2luZm9fc3RydWN0IHsKICBfX3UzMiBzcGFjZUFsbG9jOwogIF9fbGUzMiBhdHRyaWJ1dGVzOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UxNiBmbGFnczsKICBfX2xlMzIgZGF0YVN0cmVhbVNpemU7CiAgX19sZTMyIHRvdGFsU3RyZWFtU2l6ZTsKICBfX3UxNiBudW1iZXJPZlN0cmVhbXM7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fbGUxNiBjcmVhdGlvblRpbWU7CiAgX19sZTE2IGNyZWF0aW9uRGF0ZTsKICBfX3UzMiBjcmVhdG9ySUQ7CiAgX19sZTE2IG1vZGlmeVRpbWU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fbGUxNiBtb2RpZnlEYXRlOwogIF9fdTMyIG1vZGlmaWVySUQ7CiAgX19sZTE2IGxhc3RBY2Nlc3NEYXRlOwogIF9fdTE2IGFyY2hpdmVUaW1lOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UxNiBhcmNoaXZlRGF0ZTsKICBfX3UzMiBhcmNoaXZlcklEOwogIF9fdTE2IGluaGVyaXRlZFJpZ2h0c01hc2s7CiAgX19sZTMyIGRpckVudE51bTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX19sZTMyIERvc0Rpck51bTsKICBfX3UzMiB2b2xOdW1iZXI7CiAgX191MzIgRUFEYXRhU2l6ZTsKICBfX3UzMiBFQUtleUNvdW50OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBFQUtleVNpemU7CiAgX191MzIgTlNDcmVhdG9yOwogIF9fdTggbmFtZUxlbjsKICBfX3U4IGVudHJ5TmFtZVsyNTZdOwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKLQogI2RlZmluZSBETV9BVFRSSUJVVEVTIChjcHVfdG9fbGUzMigweDAyKSkKICNkZWZpbmUgRE1fQ1JFQVRFX0RBVEUgKGNwdV90b19sZTMyKDB4MDQpKQogI2RlZmluZSBETV9DUkVBVEVfVElNRSAoY3B1X3RvX2xlMzIoMHgwOCkpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBETV9DUkVBVE9SX0lEIChjcHVfdG9fbGUzMigweDEwKSkKICNkZWZpbmUgRE1fQVJDSElWRV9EQVRFIChjcHVfdG9fbGUzMigweDIwKSkKICNkZWZpbmUgRE1fQVJDSElWRV9USU1FIChjcHVfdG9fbGUzMigweDQwKSkKICNkZWZpbmUgRE1fQVJDSElWRVJfSUQgKGNwdV90b19sZTMyKDB4ODApKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRE1fTU9ESUZZX0RBVEUgKGNwdV90b19sZTMyKDB4MDEwMCkpCiAjZGVmaW5lIERNX01PRElGWV9USU1FIChjcHVfdG9fbGUzMigweDAyMDApKQogI2RlZmluZSBETV9NT0RJRklFUl9JRCAoY3B1X3RvX2xlMzIoMHgwNDAwKSkKICNkZWZpbmUgRE1fTEFTVF9BQ0NFU1NfREFURSAoY3B1X3RvX2xlMzIoMHgwODAwKSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIERNX0lOSEVSSVRFRF9SSUdIVFNfTUFTSyAoY3B1X3RvX2xlMzIoMHgxMDAwKSkKICNkZWZpbmUgRE1fTUFYSU1VTV9TUEFDRSAoY3B1X3RvX2xlMzIoMHgyMDAwKSkKLQogc3RydWN0IG53X21vZGlmeV9kb3NfaW5mbyB7CiAgX19sZTMyIGF0dHJpYnV0ZXM7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fbGUxNiBjcmVhdGlvbkRhdGU7CiAgX19sZTE2IGNyZWF0aW9uVGltZTsKICBfX3UzMiBjcmVhdG9ySUQ7CiAgX19sZTE2IG1vZGlmeURhdGU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fbGUxNiBtb2RpZnlUaW1lOwogIF9fdTMyIG1vZGlmaWVySUQ7CiAgX191MTYgYXJjaGl2ZURhdGU7CiAgX191MTYgYXJjaGl2ZVRpbWU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGFyY2hpdmVySUQ7CiAgX19sZTE2IGxhc3RBY2Nlc3NEYXRlOwogIF9fdTE2IGluaGVyaXRhbmNlR3JhbnRNYXNrOwogIF9fdTE2IGluaGVyaXRhbmNlUmV2b2tlTWFzazsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgbWF4aW11bVNwYWNlOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKLQogc3RydWN0IG53X3NlYXJjaF9zZXF1ZW5jZSB7CiAgX191OCB2b2xOdW1iZXI7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGRpckJhc2U7CiAgX191MzIgc2VxdWVuY2U7CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwotCiAjZW5kaWYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmNwX21vdW50LmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmNwX21vdW50LmgKaW5kZXggMjA0ODY5Zi4uZWUzZTg0ZiAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25jcF9tb3VudC5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uY3BfbW91bnQuaApAQCAtNyw2MyArNyw2NSBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX0xJTlVYX05DUF9NT1VOVF9ICiAjZGVmaW5lIF9MSU5VWF9OQ1BfTU9VTlRfSAotCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9uY3AuaD4KLQotI2RlZmluZSBOQ1BfTU9VTlRfVkVSU0lPTiAzICAKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgTkNQX01PVU5UX1ZFUlNJT04gMwogI2RlZmluZSBOQ1BfTU9VTlRfU09GVCAweDAwMDEKICNkZWZpbmUgTkNQX01PVU5UX0lOVFIgMHgwMDAyCi0jZGVmaW5lIE5DUF9NT1VOVF9TVFJPTkcgMHgwMDA0ICAKLSNkZWZpbmUgTkNQX01PVU5UX05PX09TMiAweDAwMDggIAotI2RlZmluZSBOQ1BfTU9VTlRfTk9fTkZTIDB4MDAxMCAgCisjZGVmaW5lIE5DUF9NT1VOVF9TVFJPTkcgMHgwMDA0CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBOQ1BfTU9VTlRfTk9fT1MyIDB4MDAwOAorI2RlZmluZSBOQ1BfTU9VTlRfTk9fTkZTIDB4MDAxMAogI2RlZmluZSBOQ1BfTU9VTlRfRVhUUkFTIDB4MDAyMAotI2RlZmluZSBOQ1BfTU9VTlRfU1lNTElOS1MgMHgwMDQwICAKLSNkZWZpbmUgTkNQX01PVU5UX05GU19FWFRSQVMgMHgwMDgwICAKLQorI2RlZmluZSBOQ1BfTU9VTlRfU1lNTElOS1MgMHgwMDQwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBOQ1BfTU9VTlRfTkZTX0VYVFJBUyAweDAwODAKIHN0cnVjdCBuY3BfbW91bnRfZGF0YSB7CiAgaW50IHZlcnNpb247CiAgdW5zaWduZWQgaW50IG5jcF9mZDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX19rZXJuZWxfdWlkX3QgbW91bnRlZF91aWQ7CiAgX19rZXJuZWxfcGlkX3Qgd2RvZ19waWQ7Ci0KICB1bnNpZ25lZCBjaGFyIG1vdW50ZWRfdm9sW05DUF9WT0xOQU1FX0xFTiArIDFdOwogIHVuc2lnbmVkIGludCB0aW1lX291dDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgaW50IHJldHJ5X2NvdW50OwogIHVuc2lnbmVkIGludCBmbGFnczsKLQogIF9fa2VybmVsX3VpZF90IHVpZDsKICBfX2tlcm5lbF9naWRfdCBnaWQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fa2VybmVsX21vZGVfdCBmaWxlX21vZGU7CiAgX19rZXJuZWxfbW9kZV90IGRpcl9tb2RlOwogfTsKLQotI2RlZmluZSBOQ1BfTU9VTlRfVkVSU0lPTl9WNCAoNCkgIAotCisjZGVmaW5lIE5DUF9NT1VOVF9WRVJTSU9OX1Y0ICg0KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBuY3BfbW91bnRfZGF0YV92NCB7CiAgaW50IHZlcnNpb247CiAgdW5zaWduZWQgbG9uZyBmbGFnczsKLQogIHVuc2lnbmVkIGxvbmcgbW91bnRlZF91aWQ7Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgbG9uZyB3ZG9nX3BpZDsKLQogIHVuc2lnbmVkIGludCBuY3BfZmQ7CiAgdW5zaWduZWQgaW50IHRpbWVfb3V0OwogIHVuc2lnbmVkIGludCByZXRyeV9jb3VudDsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBsb25nIHVpZDsKICB1bnNpZ25lZCBsb25nIGdpZDsKLQogIHVuc2lnbmVkIGxvbmcgZmlsZV9tb2RlOwogIHVuc2lnbmVkIGxvbmcgZGlyX21vZGU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKLQotI2RlZmluZSBOQ1BfTU9VTlRfVkVSU0lPTl9WNSAoNSkgIAotCisjZGVmaW5lIE5DUF9NT1VOVF9WRVJTSU9OX1Y1ICg1KQogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmNwX25vLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmNwX25vLmgKaW5kZXggOWFmZWQ2OC4uYmRjZDRkYyAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25jcF9uby5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uY3Bfbm8uaApAQCAtNywyMyArNywzMiBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX05DUF9OTwogI2RlZmluZSBfTkNQX05PCi0KICNkZWZpbmUgYVJPTkxZIChfX2NvbnN0YW50X2NwdV90b19sZTMyKDEpKQogI2RlZmluZSBhSElEREVOIChfX2NvbnN0YW50X2NwdV90b19sZTMyKDIpKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgYVNZU1RFTSAoX19jb25zdGFudF9jcHVfdG9fbGUzMig0KSkKICNkZWZpbmUgYUVYRUNVVEUgKF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoOCkpCiAjZGVmaW5lIGFESVIgKF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMHgxMCkpCiAjZGVmaW5lIGFBUkNIIChfX2NvbnN0YW50X2NwdV90b19sZTMyKDB4MjApKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgYVNIQVJFRCAoX19jb25zdGFudF9jcHVfdG9fbGUzMigweDgwKSkKICNkZWZpbmUgYURPTlRTVUJBTExPQ0FURSAoX19jb25zdGFudF9jcHVfdG9fbGUzMigxTDw8MTEpKQogI2RlZmluZSBhVFJBTlNBQ1RJT05BTCAoX19jb25zdGFudF9jcHVfdG9fbGUzMigxTDw8MTIpKQogI2RlZmluZSBhUFVSR0UgKF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMUw8PDE2KSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIGFSRU5BTUVJTkhJQklUIChfX2NvbnN0YW50X2NwdV90b19sZTMyKDFMPDwxNykpCiAjZGVmaW5lIGFERUxFVEVJTkhJQklUIChfX2NvbnN0YW50X2NwdV90b19sZTMyKDFMPDwxOCkpCiAjZGVmaW5lIGFET05UQ09NUFJFU1MgKF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMUw8PDI3KSkKLQogI2VuZGlmCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25laWdoYm91ci5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25laWdoYm91ci5oCmluZGV4IDIxODlhZjAuLmE1OWU2OWMgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZWlnaGJvdXIuaAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmVpZ2hib3VyLmgKQEAgLTcsMTI3ICs3LDE0NyBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX19MSU5VWF9ORUlHSEJPVVJfSAogI2RlZmluZSBfX0xJTlVYX05FSUdIQk9VUl9ICi0KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGxpbmsuaD4KLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBuZG1zZwogewogIF9fdTggbmRtX2ZhbWlseTsKICBfX3U4IG5kbV9wYWQxOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UxNiBuZG1fcGFkMjsKICBfX3MzMiBuZG1faWZpbmRleDsKICBfX3UxNiBuZG1fc3RhdGU7CiAgX191OCBuZG1fZmxhZ3M7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTggbmRtX3R5cGU7CiB9OwotCiBlbnVtCiB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5EQV9VTlNQRUMsCiAgTkRBX0RTVCwKICBOREFfTExBRERSLAogIE5EQV9DQUNIRUlORk8sCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5EQV9QUk9CRVMsCiAgX19OREFfTUFYCiB9OwotCiAjZGVmaW5lIE5EQV9NQVggKF9fTkRBX01BWCAtIDEpCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE5URl9VU0UgMHgwMQotI2RlZmluZSBOVEZfUFJPWFkgMHgwOCAgCisjZGVmaW5lIE5URl9QUk9YWSAweDA4CiAjZGVmaW5lIE5URl9ST1VURVIgMHg4MAotCiAjZGVmaW5lIE5VRF9JTkNPTVBMRVRFIDB4MDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE5VRF9SRUFDSEFCTEUgMHgwMgogI2RlZmluZSBOVURfU1RBTEUgMHgwNAogI2RlZmluZSBOVURfREVMQVkgMHgwOAogI2RlZmluZSBOVURfUFJPQkUgMHgxMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTlVEX0ZBSUxFRCAweDIwCi0KICNkZWZpbmUgTlVEX05PQVJQIDB4NDAKICNkZWZpbmUgTlVEX1BFUk1BTkVOVCAweDgwCiAjZGVmaW5lIE5VRF9OT05FIDB4MDAKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBuZGFfY2FjaGVpbmZvCiB7CiAgX191MzIgbmRtX2NvbmZpcm1lZDsKICBfX3UzMiBuZG1fdXNlZDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgbmRtX3VwZGF0ZWQ7CiAgX191MzIgbmRtX3JlZmNudDsKIH07Ci0KIHN0cnVjdCBuZHRfc3RhdHMKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB7CiAgX191NjQgbmR0c19hbGxvY3M7CiAgX191NjQgbmR0c19kZXN0cm95czsKICBfX3U2NCBuZHRzX2hhc2hfZ3Jvd3M7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTY0IG5kdHNfcmVzX2ZhaWxlZDsKICBfX3U2NCBuZHRzX2xvb2t1cHM7CiAgX191NjQgbmR0c19oaXRzOwogIF9fdTY0IG5kdHNfcmN2X3Byb2Jlc19tY2FzdDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191NjQgbmR0c19yY3ZfcHJvYmVzX3VjYXN0OwogIF9fdTY0IG5kdHNfcGVyaW9kaWNfZ2NfcnVuczsKICBfX3U2NCBuZHRzX2ZvcmNlZF9nY19ydW5zOwogfTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIGVudW0gewogIE5EVFBBX1VOU1BFQywKICBORFRQQV9JRklOREVYLAogIE5EVFBBX1JFRkNOVCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkRUUEFfUkVBQ0hBQkxFX1RJTUUsCiAgTkRUUEFfQkFTRV9SRUFDSEFCTEVfVElNRSwKICBORFRQQV9SRVRSQU5TX1RJTUUsCiAgTkRUUEFfR0NfU1RBTEVUSU1FLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBORFRQQV9ERUxBWV9QUk9CRV9USU1FLAogIE5EVFBBX1FVRVVFX0xFTiwKICBORFRQQV9BUFBfUFJPQkVTLAogIE5EVFBBX1VDQVNUX1BST0JFUywKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkRUUEFfTUNBU1RfUFJPQkVTLAogIE5EVFBBX0FOWUNBU1RfREVMQVksCiAgTkRUUEFfUFJPWFlfREVMQVksCiAgTkRUUEFfUFJPWFlfUUxFTiwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkRUUEFfTE9DS1RJTUUsCiAgX19ORFRQQV9NQVgKIH07CiAjZGVmaW5lIE5EVFBBX01BWCAoX19ORFRQQV9NQVggLSAxKQotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IG5kdG1zZwogewogIF9fdTggbmR0bV9mYW1pbHk7CiAgX191OCBuZHRtX3BhZDE7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTE2IG5kdG1fcGFkMjsKIH07Ci0KIHN0cnVjdCBuZHRfY29uZmlnCiB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTE2IG5kdGNfa2V5X2xlbjsKICBfX3UxNiBuZHRjX2VudHJ5X3NpemU7CiAgX191MzIgbmR0Y19lbnRyaWVzOwogIF9fdTMyIG5kdGNfbGFzdF9mbHVzaDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgbmR0Y19sYXN0X3JhbmQ7CiAgX191MzIgbmR0Y19oYXNoX3JuZDsKICBfX3UzMiBuZHRjX2hhc2hfbWFzazsKICBfX3UzMiBuZHRjX2hhc2hfY2hhaW5fZ2M7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIG5kdGNfcHJveHlfcWxlbjsKIH07Ci0KIGVudW0gewogIE5EVEFfVU5TUEVDLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBORFRBX05BTUUsCiAgTkRUQV9USFJFU0gxLAogIE5EVEFfVEhSRVNIMiwKICBORFRBX1RIUkVTSDMsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5EVEFfQ09ORklHLAogIE5EVEFfUEFSTVMsCiAgTkRUQV9TVEFUUywKICBORFRBX0dDX0lOVEVSVkFMLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX05EVEFfTUFYCiB9OwogI2RlZmluZSBORFRBX01BWCAoX19ORFRBX01BWCAtIDEpCi0KICNlbmRpZgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXQuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXQuaAppbmRleCAyOWZjYTJjLi5hMDdkZTY2IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0LmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldC5oCkBAIC03LDQ1ICs3LDUzIEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfTElOVVhfTkVUX0gKICNkZWZpbmUgX0xJTlVYX05FVF9ICi0KICNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CiAjaW5jbHVkZSA8YXNtL3NvY2tldC5oPgotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IHBvbGxfdGFibGVfc3RydWN0Owogc3RydWN0IGlub2RlOwotCi0jZGVmaW5lIE5QUk9UTyAzMiAgCi0KLSNkZWZpbmUgU1lTX1NPQ0tFVCAxICAKLSNkZWZpbmUgU1lTX0JJTkQgMiAgCi0jZGVmaW5lIFNZU19DT05ORUNUIDMgIAotI2RlZmluZSBTWVNfTElTVEVOIDQgIAotI2RlZmluZSBTWVNfQUNDRVBUIDUgIAotI2RlZmluZSBTWVNfR0VUU09DS05BTUUgNiAgCi0jZGVmaW5lIFNZU19HRVRQRUVSTkFNRSA3ICAKLSNkZWZpbmUgU1lTX1NPQ0tFVFBBSVIgOCAgCi0jZGVmaW5lIFNZU19TRU5EIDkgIAotI2RlZmluZSBTWVNfUkVDViAxMCAgCi0jZGVmaW5lIFNZU19TRU5EVE8gMTEgIAotI2RlZmluZSBTWVNfUkVDVkZST00gMTIgIAotI2RlZmluZSBTWVNfU0hVVERPV04gMTMgIAotI2RlZmluZSBTWVNfU0VUU09DS09QVCAxNCAgCi0jZGVmaW5lIFNZU19HRVRTT0NLT1BUIDE1ICAKLSNkZWZpbmUgU1lTX1NFTkRNU0cgMTYgIAotI2RlZmluZSBTWVNfUkVDVk1TRyAxNyAgCi0KKyNkZWZpbmUgTlBST1RPIDMyCisjZGVmaW5lIFNZU19TT0NLRVQgMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgU1lTX0JJTkQgMgorI2RlZmluZSBTWVNfQ09OTkVDVCAzCisjZGVmaW5lIFNZU19MSVNURU4gNAorI2RlZmluZSBTWVNfQUNDRVBUIDUKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFNZU19HRVRTT0NLTkFNRSA2CisjZGVmaW5lIFNZU19HRVRQRUVSTkFNRSA3CisjZGVmaW5lIFNZU19TT0NLRVRQQUlSIDgKKyNkZWZpbmUgU1lTX1NFTkQgOQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgU1lTX1JFQ1YgMTAKKyNkZWZpbmUgU1lTX1NFTkRUTyAxMQorI2RlZmluZSBTWVNfUkVDVkZST00gMTIKKyNkZWZpbmUgU1lTX1NIVVRET1dOIDEzCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBTWVNfU0VUU09DS09QVCAxNAorI2RlZmluZSBTWVNfR0VUU09DS09QVCAxNQorI2RlZmluZSBTWVNfU0VORE1TRyAxNgorI2RlZmluZSBTWVNfUkVDVk1TRyAxNworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHR5cGVkZWYgZW51bSB7CiAgU1NfRlJFRSA9IDAsCiAgU1NfVU5DT05ORUNURUQsCiAgU1NfQ09OTkVDVElORywKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgU1NfQ09OTkVDVEVELAogIFNTX0RJU0NPTk5FQ1RJTkcKIH0gc29ja2V0X3N0YXRlOwotCi0jZGVmaW5lIF9fU09fQUNDRVBUQ09OICgxIDw8IDE2KSAgCi0KKyNkZWZpbmUgX19TT19BQ0NFUFRDT04gKDEgPDwgMTYpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZGV2aWNlLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZGV2aWNlLmgKaW5kZXggNTRiNThmMS4uN2M2MzYxNiAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGRldmljZS5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRkZXZpY2UuaApAQCAtNyw2MyArNyw3MCBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX0xJTlVYX05FVERFVklDRV9ICiAjZGVmaW5lIF9MSU5VWF9ORVRERVZJQ0VfSAotCiAjaW5jbHVkZSA8bGludXgvaWYuaD4KICNpbmNsdWRlIDxsaW51eC9pZl9ldGhlci5oPgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNpbmNsdWRlIDxsaW51eC9pZl9wYWNrZXQuaD4KLQotI2RlZmluZSBNQVhfQUREUl9MRU4gMzIgIAotCi0jZGVmaW5lIE5FVERFVl9UWF9PSyAwICAKLSNkZWZpbmUgTkVUREVWX1RYX0JVU1kgMSAgCi0jZGVmaW5lIE5FVERFVl9UWF9MT0NLRUQgLTEgIAotCisjZGVmaW5lIE1BWF9BRERSX0xFTiAzMgorI2RlZmluZSBORVRERVZfVFhfT0sgMAorI2RlZmluZSBORVRERVZfVFhfQlVTWSAxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBORVRERVZfVFhfTE9DS0VEIC0xCiAjZGVmaW5lIExMX01BWF9IRUFERVIgMzIKLQogI2RlZmluZSBNQVhfSEVBREVSIExMX01BWF9IRUFERVIKLQogc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB7CiAgdW5zaWduZWQgbG9uZyByeF9wYWNrZXRzOwogIHVuc2lnbmVkIGxvbmcgdHhfcGFja2V0czsKICB1bnNpZ25lZCBsb25nIHJ4X2J5dGVzOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBsb25nIHR4X2J5dGVzOwogIHVuc2lnbmVkIGxvbmcgcnhfZXJyb3JzOwogIHVuc2lnbmVkIGxvbmcgdHhfZXJyb3JzOwogIHVuc2lnbmVkIGxvbmcgcnhfZHJvcHBlZDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgbG9uZyB0eF9kcm9wcGVkOwogIHVuc2lnbmVkIGxvbmcgbXVsdGljYXN0OwogIHVuc2lnbmVkIGxvbmcgY29sbGlzaW9uczsKLQogIHVuc2lnbmVkIGxvbmcgcnhfbGVuZ3RoX2Vycm9yczsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgbG9uZyByeF9vdmVyX2Vycm9yczsKICB1bnNpZ25lZCBsb25nIHJ4X2NyY19lcnJvcnM7CiAgdW5zaWduZWQgbG9uZyByeF9mcmFtZV9lcnJvcnM7CiAgdW5zaWduZWQgbG9uZyByeF9maWZvX2Vycm9yczsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgbG9uZyByeF9taXNzZWRfZXJyb3JzOwotCiAgdW5zaWduZWQgbG9uZyB0eF9hYm9ydGVkX2Vycm9yczsKICB1bnNpZ25lZCBsb25nIHR4X2NhcnJpZXJfZXJyb3JzOwogIHVuc2lnbmVkIGxvbmcgdHhfZmlmb19lcnJvcnM7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGxvbmcgdHhfaGVhcnRiZWF0X2Vycm9yczsKICB1bnNpZ25lZCBsb25nIHR4X3dpbmRvd19lcnJvcnM7Ci0KICB1bnNpZ25lZCBsb25nIHJ4X2NvbXByZXNzZWQ7CiAgdW5zaWduZWQgbG9uZyB0eF9jb21wcmVzc2VkOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07Ci0KIGVudW0gewogIElGX1BPUlRfVU5LTk9XTiA9IDAsCiAgSUZfUE9SVF8xMEJBU0UyLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBJRl9QT1JUXzEwQkFTRVQsCiAgSUZfUE9SVF9BVUksCiAgSUZfUE9SVF8xMDBCQVNFVCwKICBJRl9QT1JUXzEwMEJBU0VUWCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgSUZfUE9SVF8xMDBCQVNFRlgKIH07Ci0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlci5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlci5oCmluZGV4IGNlOGQzOTQuLmQ1OGQxMzEgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXIuaAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyLmgKQEAgLTY5LDQgKzY5LDMgQEAKICBzdHJ1Y3QgaW42X2FkZHIgaW42OwogfTsKICNlbmRpZgotCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb21tb24uaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvbW1vbi5oCmluZGV4IDY5MTc3ZmMuLjE5Njg1MWUgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvbW1vbi5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvbW1vbi5oCkBAIC03LDEwOCArNyw5NyBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX05GX0NPTk5UUkFDS19DT01NT05fSAogI2RlZmluZSBfTkZfQ09OTlRSQUNLX0NPTU1PTl9ICi0KIGVudW0gaXBfY29ubnRyYWNrX2luZm8KIHsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBJUF9DVF9FU1RBQkxJU0hFRCwKLQogIElQX0NUX1JFTEFURUQsCi0KICBJUF9DVF9ORVcsCi0KICBJUF9DVF9JU19SRVBMWSwKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBJUF9DVF9OVU1CRVIgPSBJUF9DVF9JU19SRVBMWSAqIDIgLSAxCiB9OwotCiBlbnVtIGlwX2Nvbm50cmFja19zdGF0dXMgewotCiAgSVBTX0VYUEVDVEVEX0JJVCA9IDAsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIElQU19FWFBFQ1RFRCA9ICgxIDw8IElQU19FWFBFQ1RFRF9CSVQpLAotCiAgSVBTX1NFRU5fUkVQTFlfQklUID0gMSwKICBJUFNfU0VFTl9SRVBMWSA9ICgxIDw8IElQU19TRUVOX1JFUExZX0JJVCksCi0KICBJUFNfQVNTVVJFRF9CSVQgPSAyLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBJUFNfQVNTVVJFRCA9ICgxIDw8IElQU19BU1NVUkVEX0JJVCksCi0KICBJUFNfQ09ORklSTUVEX0JJVCA9IDMsCiAgSVBTX0NPTkZJUk1FRCA9ICgxIDw8IElQU19DT05GSVJNRURfQklUKSwKLQogIElQU19TUkNfTkFUX0JJVCA9IDQsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIElQU19TUkNfTkFUID0gKDEgPDwgSVBTX1NSQ19OQVRfQklUKSwKLQogIElQU19EU1RfTkFUX0JJVCA9IDUsCiAgSVBTX0RTVF9OQVQgPSAoMSA8PCBJUFNfRFNUX05BVF9CSVQpLAotCiAgSVBTX05BVF9NQVNLID0gKElQU19EU1RfTkFUIHwgSVBTX1NSQ19OQVQpLAotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIElQU19TRVFfQURKVVNUX0JJVCA9IDYsCiAgSVBTX1NFUV9BREpVU1QgPSAoMSA8PCBJUFNfU0VRX0FESlVTVF9CSVQpLAotCiAgSVBTX1NSQ19OQVRfRE9ORV9CSVQgPSA3LAogIElQU19TUkNfTkFUX0RPTkUgPSAoMSA8PCBJUFNfU1JDX05BVF9ET05FX0JJVCksCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgSVBTX0RTVF9OQVRfRE9ORV9CSVQgPSA4LAogIElQU19EU1RfTkFUX0RPTkUgPSAoMSA8PCBJUFNfRFNUX05BVF9ET05FX0JJVCksCi0KICBJUFNfTkFUX0RPTkVfTUFTSyA9IChJUFNfRFNUX05BVF9ET05FIHwgSVBTX1NSQ19OQVRfRE9ORSksCi0KICBJUFNfRFlJTkdfQklUID0gOSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgSVBTX0RZSU5HID0gKDEgPDwgSVBTX0RZSU5HX0JJVCksCi0KICBJUFNfRklYRURfVElNRU9VVF9CSVQgPSAxMCwKICBJUFNfRklYRURfVElNRU9VVCA9ICgxIDw8IElQU19GSVhFRF9USU1FT1VUX0JJVCksCiB9OwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogZW51bSBpcF9jb25udHJhY2tfZXZlbnRzCiB7Ci0KICBJUENUX05FV19CSVQgPSAwLAogIElQQ1RfTkVXID0gKDEgPDwgSVBDVF9ORVdfQklUKSwKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBJUENUX1JFTEFURURfQklUID0gMSwKICBJUENUX1JFTEFURUQgPSAoMSA8PCBJUENUX1JFTEFURURfQklUKSwKLQogIElQQ1RfREVTVFJPWV9CSVQgPSAyLAogIElQQ1RfREVTVFJPWSA9ICgxIDw8IElQQ1RfREVTVFJPWV9CSVQpLAotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIElQQ1RfUkVGUkVTSF9CSVQgPSAzLAogIElQQ1RfUkVGUkVTSCA9ICgxIDw8IElQQ1RfUkVGUkVTSF9CSVQpLAotCiAgSVBDVF9TVEFUVVNfQklUID0gNCwKICBJUENUX1NUQVRVUyA9ICgxIDw8IElQQ1RfU1RBVFVTX0JJVCksCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgSVBDVF9QUk9UT0lORk9fQklUID0gNSwKICBJUENUX1BST1RPSU5GTyA9ICgxIDw8IElQQ1RfUFJPVE9JTkZPX0JJVCksCi0KICBJUENUX1BST1RPSU5GT19WT0xBVElMRV9CSVQgPSA2LAogIElQQ1RfUFJPVE9JTkZPX1ZPTEFUSUxFID0gKDEgPDwgSVBDVF9QUk9UT0lORk9fVk9MQVRJTEVfQklUKSwKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBJUENUX0hFTFBFUl9CSVQgPSA3LAogIElQQ1RfSEVMUEVSID0gKDEgPDwgSVBDVF9IRUxQRVJfQklUKSwKLQogIElQQ1RfSEVMUElORk9fQklUID0gOCwKICBJUENUX0hFTFBJTkZPID0gKDEgPDwgSVBDVF9IRUxQSU5GT19CSVQpLAotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIElQQ1RfSEVMUElORk9fVk9MQVRJTEVfQklUID0gOSwKICBJUENUX0hFTFBJTkZPX1ZPTEFUSUxFID0gKDEgPDwgSVBDVF9IRUxQSU5GT19WT0xBVElMRV9CSVQpLAotCiAgSVBDVF9OQVRJTkZPX0JJVCA9IDEwLAogIElQQ1RfTkFUSU5GTyA9ICgxIDw8IElQQ1RfTkFUSU5GT19CSVQpLAotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIElQQ1RfQ09VTlRFUl9GSUxMSU5HX0JJVCA9IDExLAogIElQQ1RfQ09VTlRFUl9GSUxMSU5HID0gKDEgPDwgSVBDVF9DT1VOVEVSX0ZJTExJTkdfQklUKSwKIH07Ci0KIGVudW0gaXBfY29ubnRyYWNrX2V4cGVjdF9ldmVudHMgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBJUEVYUF9ORVdfQklUID0gMCwKICBJUEVYUF9ORVcgPSAoMSA8PCBJUEVYUF9ORVdfQklUKSwKIH07Ci0KICNlbmRpZgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2Z0cC5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfZnRwLmgKaW5kZXggZmY4MTVhNy4uOGZkNjgyNyAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfZnRwLmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfZnRwLmgKQEAgLTcsMjEgKzcsMjQgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9ORl9DT05OVFJBQ0tfRlRQX0gKICNkZWZpbmUgX05GX0NPTk5UUkFDS19GVFBfSAotCiBlbnVtIGlwX2N0X2Z0cF90eXBlCiB7Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgSVBfQ1RfRlRQX1BPUlQsCi0KICBJUF9DVF9GVFBfUEFTViwKLQogIElQX0NUX0ZUUF9FUFJULAotCiAgSVBfQ1RfRlRQX0VQU1YsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKLQogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zY3RwLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zY3RwLmgKaW5kZXggMTU3NjhiMi4uOTBmMWY1MyAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2N0cC5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NjdHAuaApAQCAtNywzMSArNywzOCBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX05GX0NPTk5UUkFDS19TQ1RQX0gKICNkZWZpbmUgX05GX0NPTk5UUkFDS19TQ1RQX0gKLQogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfdHVwbGVfY29tbW9uLmg+Ci0KIGVudW0gc2N0cF9jb25udHJhY2sgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBTQ1RQX0NPTk5UUkFDS19OT05FLAogIFNDVFBfQ09OTlRSQUNLX0NMT1NFRCwKICBTQ1RQX0NPTk5UUkFDS19DT09LSUVfV0FJVCwKICBTQ1RQX0NPTk5UUkFDS19DT09LSUVfRUNIT0VELAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBTQ1RQX0NPTk5UUkFDS19FU1RBQkxJU0hFRCwKICBTQ1RQX0NPTk5UUkFDS19TSFVURE9XTl9TRU5ULAogIFNDVFBfQ09OTlRSQUNLX1NIVVRET1dOX1JFQ0QsCiAgU0NUUF9DT05OVFJBQ0tfU0hVVERPV05fQUNLX1NFTlQsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFNDVFBfQ09OTlRSQUNLX01BWAogfTsKLQogc3RydWN0IGlwX2N0X3NjdHAKIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgZW51bSBzY3RwX2Nvbm50cmFjayBzdGF0ZTsKLQogIHVfaW50MzJfdCB2dGFnW0lQX0NUX0RJUl9NQVhdOwogIHVfaW50MzJfdCB0dGFnW0lQX0NUX0RJUl9NQVhdOwogfTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGNwLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190Y3AuaAppbmRleCAyMjdmOTAyLi5iMzRmYmQ0IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190Y3AuaAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190Y3AuaApAQCAtNywzMCArNywzNyBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX05GX0NPTk5UUkFDS19UQ1BfSAogI2RlZmluZSBfTkZfQ09OTlRSQUNLX1RDUF9ICi0KIGVudW0gdGNwX2Nvbm50cmFjayB7CiAgVENQX0NPTk5UUkFDS19OT05FLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBUQ1BfQ09OTlRSQUNLX1NZTl9TRU5ULAogIFRDUF9DT05OVFJBQ0tfU1lOX1JFQ1YsCiAgVENQX0NPTk5UUkFDS19FU1RBQkxJU0hFRCwKICBUQ1BfQ09OTlRSQUNLX0ZJTl9XQUlULAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBUQ1BfQ09OTlRSQUNLX0NMT1NFX1dBSVQsCiAgVENQX0NPTk5UUkFDS19MQVNUX0FDSywKICBUQ1BfQ09OTlRSQUNLX1RJTUVfV0FJVCwKICBUQ1BfQ09OTlRSQUNLX0NMT1NFLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBUQ1BfQ09OTlRSQUNLX0xJU1RFTiwKICBUQ1BfQ09OTlRSQUNLX01BWCwKICBUQ1BfQ09OTlRSQUNLX0lHTk9SRQogfTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSVBfQ1RfVENQX0ZMQUdfV0lORE9XX1NDQUxFIDB4MDEKLQogI2RlZmluZSBJUF9DVF9UQ1BfRkxBR19TQUNLX1BFUk0gMHgwMgotCiAjZGVmaW5lIElQX0NUX1RDUF9GTEFHX0NMT1NFX0lOSVQgMHgwMwotCiAjZW5kaWYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190dXBsZV9jb21tb24uaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3R1cGxlX2NvbW1vbi5oCmluZGV4IGYyODI1NDMuLmFhMzA0MDUgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3R1cGxlX2NvbW1vbi5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3R1cGxlX2NvbW1vbi5oCkBAIC03LDE4ICs3LDI0IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfTkZfQ09OTlRSQUNLX1RVUExFX0NPTU1PTl9ICiAjZGVmaW5lIF9ORl9DT05OVFJBQ0tfVFVQTEVfQ09NTU9OX0gKLQogZW51bSBpcF9jb25udHJhY2tfZGlyCiB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIElQX0NUX0RJUl9PUklHSU5BTCwKICBJUF9DVF9ESVJfUkVQTFksCiAgSVBfQ1RfRElSX01BWAogfTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQ1RJTkZPMkRJUihjdGluZm8pICgoY3RpbmZvKSA+PSBJUF9DVF9JU19SRVBMWSA/IElQX0NUX0RJUl9SRVBMWSA6IElQX0NUX0RJUl9PUklHSU5BTCkKLQogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyL25mbmV0bGluay5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlci9uZm5ldGxpbmsuaAppbmRleCA0NTQ0Y2FiLi4xNTg5NzQ1IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyL25mbmV0bGluay5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXIvbmZuZXRsaW5rLmgKQEAgLTcsNzggKzcsODkgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9ORk5FVExJTktfSAogI2RlZmluZSBfTkZORVRMSU5LX0gKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotCiAjZGVmaW5lIE5GX05FVExJTktfQ09OTlRSQUNLX05FVyAweDAwMDAwMDAxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBORl9ORVRMSU5LX0NPTk5UUkFDS19VUERBVEUgMHgwMDAwMDAwMgogI2RlZmluZSBORl9ORVRMSU5LX0NPTk5UUkFDS19ERVNUUk9ZIDB4MDAwMDAwMDQKICNkZWZpbmUgTkZfTkVUTElOS19DT05OVFJBQ0tfRVhQX05FVyAweDAwMDAwMDA4CiAjZGVmaW5lIE5GX05FVExJTktfQ09OTlRSQUNLX0VYUF9VUERBVEUgMHgwMDAwMDAxMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTkZfTkVUTElOS19DT05OVFJBQ0tfRVhQX0RFU1RST1kgMHgwMDAwMDAyMAotCiBlbnVtIG5mbmV0bGlua19ncm91cHMgewogIE5GTkxHUlBfTk9ORSwKICNkZWZpbmUgTkZOTEdSUF9OT05FIE5GTkxHUlBfTk9ORQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBORk5MR1JQX0NPTk5UUkFDS19ORVcsCiAjZGVmaW5lIE5GTkxHUlBfQ09OTlRSQUNLX05FVyBORk5MR1JQX0NPTk5UUkFDS19ORVcKICBORk5MR1JQX0NPTk5UUkFDS19VUERBVEUsCiAjZGVmaW5lIE5GTkxHUlBfQ09OTlRSQUNLX1VQREFURSBORk5MR1JQX0NPTk5UUkFDS19VUERBVEUKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkZOTEdSUF9DT05OVFJBQ0tfREVTVFJPWSwKICNkZWZpbmUgTkZOTEdSUF9DT05OVFJBQ0tfREVTVFJPWSBORk5MR1JQX0NPTk5UUkFDS19ERVNUUk9ZCiAgTkZOTEdSUF9DT05OVFJBQ0tfRVhQX05FVywKICNkZWZpbmUgTkZOTEdSUF9DT05OVFJBQ0tfRVhQX05FVyBORk5MR1JQX0NPTk5UUkFDS19FWFBfTkVXCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5GTkxHUlBfQ09OTlRSQUNLX0VYUF9VUERBVEUsCiAjZGVmaW5lIE5GTkxHUlBfQ09OTlRSQUNLX0VYUF9VUERBVEUgTkZOTEdSUF9DT05OVFJBQ0tfRVhQX1VQREFURQogIE5GTkxHUlBfQ09OTlRSQUNLX0VYUF9ERVNUUk9ZLAogI2RlZmluZSBORk5MR1JQX0NPTk5UUkFDS19FWFBfREVTVFJPWSBORk5MR1JQX0NPTk5UUkFDS19FWFBfREVTVFJPWQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX05GTkxHUlBfTUFYLAogfTsKICNkZWZpbmUgTkZOTEdSUF9NQVggKF9fTkZOTEdSUF9NQVggLSAxKQotCiBzdHJ1Y3QgbmZhdHRyCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogewogIHVfaW50MTZfdCBuZmFfbGVuOwogIHVfaW50MTZfdCBuZmFfdHlwZTsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBORk5MX05GQV9ORVNUIDB4ODAwMAogI2RlZmluZSBORkFfVFlQRShhdHRyKSAoKGF0dHIpLT5uZmFfdHlwZSAmIDB4N2ZmZikKLQogI2RlZmluZSBORkFfQUxJR05UTyA0CiAjZGVmaW5lIE5GQV9BTElHTihsZW4pICgoKGxlbikgKyBORkFfQUxJR05UTyAtIDEpICYgfihORkFfQUxJR05UTyAtIDEpKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTkZBX09LKG5mYSxsZW4pICgobGVuKSA+IDAgJiYgKG5mYSktPm5mYV9sZW4gPj0gc2l6ZW9mKHN0cnVjdCBuZmF0dHIpICAgJiYgKG5mYSktPm5mYV9sZW4gPD0gKGxlbikpCiAjZGVmaW5lIE5GQV9ORVhUKG5mYSxhdHRybGVuKSAoKGF0dHJsZW4pIC09IE5GQV9BTElHTigobmZhKS0+bmZhX2xlbiksICAgKHN0cnVjdCBuZmF0dHIgKikoKChjaGFyICopKG5mYSkpICsgTkZBX0FMSUdOKChuZmEpLT5uZmFfbGVuKSkpCiAjZGVmaW5lIE5GQV9MRU5HVEgobGVuKSAoTkZBX0FMSUdOKHNpemVvZihzdHJ1Y3QgbmZhdHRyKSkgKyAobGVuKSkKICNkZWZpbmUgTkZBX1NQQUNFKGxlbikgTkZBX0FMSUdOKE5GQV9MRU5HVEgobGVuKSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE5GQV9EQVRBKG5mYSkgKCh2b2lkICopKCgoY2hhciAqKShuZmEpKSArIE5GQV9MRU5HVEgoMCkpKQogI2RlZmluZSBORkFfUEFZTE9BRChuZmEpICgoaW50KSgobmZhKS0+bmZhX2xlbikgLSBORkFfTEVOR1RIKDApKQogI2RlZmluZSBORkFfTkVTVChza2IsIHR5cGUpICAoeyBzdHJ1Y3QgbmZhdHRyICpfX3N0YXJ0ID0gKHN0cnVjdCBuZmF0dHIgKikgKHNrYiktPnRhaWw7ICAgTkZBX1BVVChza2IsIChORk5MX05GQV9ORVNUIHwgdHlwZSksIDAsIE5VTEwpOyAgIF9fc3RhcnQ7IH0pCiAjZGVmaW5lIE5GQV9ORVNUX0VORChza2IsIHN0YXJ0KSAgKHsgKHN0YXJ0KS0+bmZhX2xlbiA9ICgoc2tiKS0+dGFpbCAtICh1bnNpZ25lZCBjaGFyICopIChzdGFydCkpOyAgIChza2IpLT5sZW47IH0pCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBORkFfTkVTVF9DQU5DRUwoc2tiLCBzdGFydCkgICh7IGlmIChzdGFydCkgICBza2JfdHJpbShza2IsICh1bnNpZ25lZCBjaGFyICopIChzdGFydCkgLSAoc2tiKS0+ZGF0YSk7ICAgLTE7IH0pCi0KIHN0cnVjdCBuZmdlbm1zZyB7CiAgdV9pbnQ4X3QgbmZnZW5fZmFtaWx5OwogIHVfaW50OF90IHZlcnNpb247CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVfaW50MTZfdCByZXNfaWQ7CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQogI2RlZmluZSBORk5FVExJTktfVjAgMAotCiAjZGVmaW5lIE5GTV9ORkEobikgKChzdHJ1Y3QgbmZhdHRyICopKCgoY2hhciAqKShuKSkgICArIE5MTVNHX0FMSUdOKHNpemVvZihzdHJ1Y3QgbmZnZW5tc2cpKSkpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBORk1fUEFZTE9BRChuKSBOTE1TR19QQVlMT0FEKG4sIHNpemVvZihzdHJ1Y3QgbmZnZW5tc2cpKQotCiAjZGVmaW5lIE5GTkxfU1VCU1lTX0lEKHgpICgoeCAmIDB4ZmYwMCkgPj4gOCkKICNkZWZpbmUgTkZOTF9NU0dfVFlQRSh4KSAoeCAmIDB4MDBmZikKLQogI2RlZmluZSBORk5MX1NVQlNZU19OT05FIDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE5GTkxfU1VCU1lTX0NUTkVUTElOSyAxCiAjZGVmaW5lIE5GTkxfU1VCU1lTX0NUTkVUTElOS19FWFAgMgogI2RlZmluZSBORk5MX1NVQlNZU19RVUVVRSAzCiAjZGVmaW5lIE5GTkxfU1VCU1lTX1VMT0cgNAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTkZOTF9TVUJTWVNfQ09VTlQgNQotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2Nvbm50cmFjay5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlci9uZm5ldGxpbmtfY29ubnRyYWNrLmgKaW5kZXggMGIxYjM1Ni4uMTA0NzNlZiAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlci9uZm5ldGxpbmtfY29ubnRyYWNrLmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlci9uZm5ldGxpbmtfY29ubnRyYWNrLmgKQEAgLTQ2LDcgKzQ2LDcgQEAKICBDVEFfSEVMUCwKICBDVEFfTkFUX1NSQywKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIENUQV9OQVQgQ1RBX05BVF9TUkMgIAorI2RlZmluZSBDVEFfTkFUIENUQV9OQVRfU1JDCiAgQ1RBX1RJTUVPVVQsCiAgQ1RBX01BUkssCiAgQ1RBX0NPVU5URVJTX09SSUcsCkBAIC0yMDksNCArMjA5LDMgQEAKIH07CiAjZGVmaW5lIENUQV9IRUxQX01BWCAoX19DVEFfSEVMUF9NQVggLSAxKQogI2VuZGlmCi0KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXIveF90YWJsZXMuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXIveF90YWJsZXMuaAppbmRleCAyMzQxODFmLi42M2I3NWVhIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyL3hfdGFibGVzLmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlci94X3RhYmxlcy5oCkBAIC03LDExOSArNywxMTMgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9YX1RBQkxFU19ICiAjZGVmaW5lIF9YX1RBQkxFU19ICi0KICNkZWZpbmUgWFRfRlVOQ1RJT05fTUFYTkFNRUxFTiAzMAogI2RlZmluZSBYVF9UQUJMRV9NQVhOQU1FTEVOIDMyCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgeHRfZW50cnlfbWF0Y2gKIHsKICB1bmlvbiB7CiAgc3RydWN0IHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdV9pbnQxNl90IG1hdGNoX3NpemU7Ci0KICBjaGFyIG5hbWVbWFRfRlVOQ1RJT05fTUFYTkFNRUxFTi0xXTsKLQogIHVfaW50OF90IHJldmlzaW9uOwogIH0gdXNlcjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IHsKICB1X2ludDE2X3QgbWF0Y2hfc2l6ZTsKLQogIHN0cnVjdCB4dF9tYXRjaCAqbWF0Y2g7CiAgfSBrZXJuZWw7Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdV9pbnQxNl90IG1hdGNoX3NpemU7CiAgfSB1OwotCiAgdW5zaWduZWQgY2hhciBkYXRhWzBdOwogfTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCB4dF9lbnRyeV90YXJnZXQKIHsKICB1bmlvbiB7CiAgc3RydWN0IHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdV9pbnQxNl90IHRhcmdldF9zaXplOwotCiAgY2hhciBuYW1lW1hUX0ZVTkNUSU9OX01BWE5BTUVMRU4tMV07Ci0KICB1X2ludDhfdCByZXZpc2lvbjsKICB9IHVzZXI7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCB7CiAgdV9pbnQxNl90IHRhcmdldF9zaXplOwotCiAgc3RydWN0IHh0X3RhcmdldCAqdGFyZ2V0OwogIH0ga2VybmVsOwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVfaW50MTZfdCB0YXJnZXRfc2l6ZTsKICB9IHU7Ci0KICB1bnNpZ25lZCBjaGFyIGRhdGFbMF07CiB9OwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IHh0X3N0YW5kYXJkX3RhcmdldAogewogIHN0cnVjdCB4dF9lbnRyeV90YXJnZXQgdGFyZ2V0OwogIGludCB2ZXJkaWN0OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07Ci0KIHN0cnVjdCB4dF9nZXRfcmV2aXNpb24KIHsKICBjaGFyIG5hbWVbWFRfRlVOQ1RJT05fTUFYTkFNRUxFTi0xXTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1X2ludDhfdCByZXZpc2lvbjsKIH07Ci0KICNkZWZpbmUgWFRfQ09OVElOVUUgMHhGRkZGRkZGRgotCiAjZGVmaW5lIFhUX1JFVFVSTiAoLU5GX1JFUEVBVCAtIDEpCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgX3h0X2FsaWduCiB7CiAgdV9pbnQ4X3QgdTg7CiAgdV9pbnQxNl90IHUxNjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdV9pbnQzMl90IHUzMjsKICB1X2ludDY0X3QgdTY0OwogfTsKLQogI2RlZmluZSBYVF9BTElHTihzKSAoKChzKSArIChfX2FsaWdub2ZfXyhzdHJ1Y3QgX3h0X2FsaWduKS0xKSkgICAmIH4oX19hbGlnbm9mX18oc3RydWN0IF94dF9hbGlnbiktMSkpCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFhUX1NUQU5EQVJEX1RBUkdFVCAiIgotCiAjZGVmaW5lIFhUX0VSUk9SX1RBUkdFVCAiRVJST1IiCi0KLSNkZWZpbmUgWFRfQkFTRV9DVEwgNjQgIAotCisjZGVmaW5lIFhUX0JBU0VfQ1RMIDY0CiAjZGVmaW5lIFhUX1NPX1NFVF9SRVBMQUNFIChYVF9CQVNFX0NUTCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFhUX1NPX1NFVF9BRERfQ09VTlRFUlMgKFhUX0JBU0VfQ1RMICsgMSkKICNkZWZpbmUgWFRfU09fU0VUX01BWCBYVF9TT19TRVRfQUREX0NPVU5URVJTCi0KICNkZWZpbmUgWFRfU09fR0VUX0lORk8gKFhUX0JBU0VfQ1RMKQogI2RlZmluZSBYVF9TT19HRVRfRU5UUklFUyAoWFRfQkFTRV9DVEwgKyAxKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgWFRfU09fR0VUX1JFVklTSU9OX01BVENIIChYVF9CQVNFX0NUTCArIDIpCiAjZGVmaW5lIFhUX1NPX0dFVF9SRVZJU0lPTl9UQVJHRVQgKFhUX0JBU0VfQ1RMICsgMykKICNkZWZpbmUgWFRfU09fR0VUX01BWCBYVF9TT19HRVRfUkVWSVNJT05fVEFSR0VUCi0KICNkZWZpbmUgU0VUX0NPVU5URVIoYyxiLHApIGRvIHsgKGMpLmJjbnQgPSAoYik7IChjKS5wY250ID0gKHApOyB9IHdoaWxlKDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBRERfQ09VTlRFUihjLGIscCkgZG8geyAoYykuYmNudCArPSAoYik7IChjKS5wY250ICs9IChwKTsgfSB3aGlsZSgwKQotCiBzdHJ1Y3QgeHRfY291bnRlcnMKIHsKICB1X2ludDY0X3QgcGNudCwgYmNudDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwotCiBzdHJ1Y3QgeHRfY291bnRlcnNfaW5mbwogewotCiAgY2hhciBuYW1lW1hUX1RBQkxFX01BWE5BTUVMRU5dOwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGludCBudW1fY291bnRlcnM7Ci0KICBzdHJ1Y3QgeHRfY291bnRlcnMgY291bnRlcnNbMF07CiB9OwotCi0jZGVmaW5lIFhUX0lOVl9QUk9UTyAweDQwICAKLQorI2RlZmluZSBYVF9JTlZfUFJPVE8gMHg0MAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlci94dF9DTEFTU0lGWS5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlci94dF9DTEFTU0lGWS5oCmluZGV4IDFlOWY2MWUuLjhkNTVkN2YgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXIveHRfQ0xBU1NJRlkuaAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyL3h0X0NMQVNTSUZZLmgKQEAgLTcsMTMgKzcsMTkgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9YVF9DTEFTU0lGWV9ICiAjZGVmaW5lIF9YVF9DTEFTU0lGWV9ICi0KIHN0cnVjdCB4dF9jbGFzc2lmeV90YXJnZXRfaW5mbyB7CiAgdV9pbnQzMl90IHByaW9yaXR5OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07Ci0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlci94dF9DT05OTUFSSy5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlci94dF9DT05OTUFSSy5oCmluZGV4IDFiMzBlZWIuLjBhMmFjNDAgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXIveHRfQ09OTk1BUksuaAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyL3h0X0NPTk5NQVJLLmgKQEAgLTcsMjEgKzcsMjggQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9YVF9DT05OTUFSS19IX3RhcmdldAogI2RlZmluZSBfWFRfQ09OTk1BUktfSF90YXJnZXQKLQogZW51bSB7CiAgWFRfQ09OTk1BUktfU0VUID0gMCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgWFRfQ09OTk1BUktfU0FWRSwKICBYVF9DT05OTUFSS19SRVNUT1JFCiB9OwotCiBzdHJ1Y3QgeHRfY29ubm1hcmtfdGFyZ2V0X2luZm8geworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBsb25nIG1hcms7CiAgdW5zaWduZWQgbG9uZyBtYXNrOwogIHVfaW50OF90IG1vZGU7CiB9OwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyL3h0X0NPTk5TRUNNQVJLLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyL3h0X0NPTk5TRUNNQVJLLmgKaW5kZXggNWUxNmIyZS4uNzIwOTc2NiAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlci94dF9DT05OU0VDTUFSSy5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXIveHRfQ09OTlNFQ01BUksuaApAQCAtNywxOCArNywyNCBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX1hUX0NPTk5TRUNNQVJLX0hfdGFyZ2V0CiAjZGVmaW5lIF9YVF9DT05OU0VDTUFSS19IX3RhcmdldAotCiBlbnVtIHsKICBDT05OU0VDTUFSS19TQVZFID0gMSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQ09OTlNFQ01BUktfUkVTVE9SRSwKIH07Ci0KIHN0cnVjdCB4dF9jb25uc2VjbWFya190YXJnZXRfaW5mbyB7CiAgdV9pbnQ4X3QgbW9kZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXIveHRfSURMRVRJTUVSLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyL3h0X0lETEVUSU1FUi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhOThmMjAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyL3h0X0lETEVUSU1FUi5oCkBAIC0wLDAgKzEsMzUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX1hUX0lETEVUSU1FUl9ICisjZGVmaW5lIF9YVF9JRExFVElNRVJfSAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjZGVmaW5lIE1BWF9JRExFVElNRVJfTEFCRUxfU0laRSAyOAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgTkxNU0dfTUFYX1NJWkUgNjQKKyNkZWZpbmUgTkxfRVZFTlRfVFlQRV9JTkFDVElWRSAwCisjZGVmaW5lIE5MX0VWRU5UX1RZUEVfQUNUSVZFIDEKK3N0cnVjdCBpZGxldGltZXJfdGdfaW5mbyB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTMyIHRpbWVvdXQ7CisgY2hhciBsYWJlbFtNQVhfSURMRVRJTUVSX0xBQkVMX1NJWkVdOworIF9fdTggc2VuZF9ubF9tc2c7Cisgc3RydWN0IGlkbGV0aW1lcl90ZyAqdGltZXIgX19hdHRyaWJ1dGVfXygoYWxpZ25lZCg4KSkpOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK307CisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXIveHRfTUFSSy5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlci94dF9NQVJLLmgKaW5kZXggZjU4Yzk3Yy4uZDU1ODBiYyAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlci94dF9NQVJLLmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlci94dF9NQVJLLmgKQEAgLTcsMjQgKzcsMzAgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9YVF9NQVJLX0hfdGFyZ2V0CiAjZGVmaW5lIF9YVF9NQVJLX0hfdGFyZ2V0Ci0KIHN0cnVjdCB4dF9tYXJrX3RhcmdldF9pbmZvIHsKICB1bnNpZ25lZCBsb25nIG1hcms7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKLQogZW51bSB7CiAgWFRfTUFSS19TRVQ9MCwKICBYVF9NQVJLX0FORCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgWFRfTUFSS19PUiwKIH07Ci0KIHN0cnVjdCB4dF9tYXJrX3RhcmdldF9pbmZvX3YxIHsKICB1bnNpZ25lZCBsb25nIG1hcms7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVfaW50OF90IG1vZGU7CiB9OwotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXIveHRfTkZRVUVVRS5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlci94dF9ORlFVRVVFLmgKaW5kZXggMWYwY2FjYi4uYjRmNDMwYyAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlci94dF9ORlFVRVVFLmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlci94dF9ORlFVRVVFLmgKQEAgLTcsMTMgKzcsMTkgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9YVF9ORlFfVEFSR0VUX0gKICNkZWZpbmUgX1hUX05GUV9UQVJHRVRfSAotCiBzdHJ1Y3QgeHRfTkZRX2luZm8gewogIHVfaW50MTZfdCBxdWV1ZW51bTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXIveHRfU0VDTUFSSy5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlci94dF9TRUNNQVJLLmgKaW5kZXggYTkxZDMyYy4uZWFkNmM5NSAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlci94dF9TRUNNQVJLLmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlci94dF9TRUNNQVJLLmgKQEAgLTcsMjQgKzcsMzAgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9YVF9TRUNNQVJLX0hfdGFyZ2V0CiAjZGVmaW5lIF9YVF9TRUNNQVJLX0hfdGFyZ2V0Ci0KLSNkZWZpbmUgU0VDTUFSS19NT0RFX1NFTCAweDAxICAKKyNkZWZpbmUgU0VDTUFSS19NT0RFX1NFTCAweDAxCiAjZGVmaW5lIFNFQ01BUktfU0VMQ1RYX01BWCAyNTYKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCB4dF9zZWNtYXJrX3RhcmdldF9zZWxpbnV4X2luZm8gewogIHVfaW50MzJfdCBzZWxzaWQ7CiAgY2hhciBzZWxjdHhbU0VDTUFSS19TRUxDVFhfTUFYXTsKIH07Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgeHRfc2VjbWFya190YXJnZXRfaW5mbyB7CiAgdV9pbnQ4X3QgbW9kZTsKICB1bmlvbiB7CiAgc3RydWN0IHh0X3NlY21hcmtfdGFyZ2V0X3NlbGludXhfaW5mbyBzZWw7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIH0gdTsKIH07Ci0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlci94dF9jb21tZW50LmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyL3h0X2NvbW1lbnQuaAppbmRleCA2ZWEyNmZjLi5lODI1OTA3IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyL3h0X2NvbW1lbnQuaAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyL3h0X2NvbW1lbnQuaApAQCAtNywxNSArNywyMCBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX1hUX0NPTU1FTlRfSAogI2RlZmluZSBfWFRfQ09NTUVOVF9ICi0KICNkZWZpbmUgWFRfTUFYX0NPTU1FTlRfTEVOIDI1NgotCiBzdHJ1Y3QgeHRfY29tbWVudF9pbmZvIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgY2hhciBjb21tZW50W1hUX01BWF9DT01NRU5UX0xFTl07CiB9OwotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXIveHRfY29ubmJ5dGVzLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyL3h0X2Nvbm5ieXRlcy5oCmluZGV4IDhjYzgwZTEuLmRhMmUzNjEgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXIveHRfY29ubmJ5dGVzLmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlci94dF9jb25uYnl0ZXMuaApAQCAtNywzMCArNywzOSBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX1hUX0NPTk5CWVRFU19ICiAjZGVmaW5lIF9YVF9DT05OQllURVNfSAotCiBlbnVtIHh0X2Nvbm5ieXRlc193aGF0IHsKICBYVF9DT05OQllURVNfUEtUUywKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgWFRfQ09OTkJZVEVTX0JZVEVTLAogIFhUX0NPTk5CWVRFU19BVkdQS1QsCiB9OwotCiBlbnVtIHh0X2Nvbm5ieXRlc19kaXJlY3Rpb24geworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBYVF9DT05OQllURVNfRElSX09SSUdJTkFMLAogIFhUX0NPTk5CWVRFU19ESVJfUkVQTFksCiAgWFRfQ09OTkJZVEVTX0RJUl9CT1RILAogfTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCB4dF9jb25uYnl0ZXNfaW5mbwogewogIHN0cnVjdCB7CiAgYWxpZ25lZF91NjQgZnJvbTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgYWxpZ25lZF91NjQgdG87CiAgfSBjb3VudDsKICB1X2ludDhfdCB3aGF0OwogIHVfaW50OF90IGRpcmVjdGlvbjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyL3h0X2Nvbm5tYXJrLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyL3h0X2Nvbm5tYXJrLmgKaW5kZXggMDIxZTAzYS4uZjAyYmQ4ZSAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlci94dF9jb25ubWFyay5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXIveHRfY29ubm1hcmsuaApAQCAtNywxNCArNywyMCBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX1hUX0NPTk5NQVJLX0gKICNkZWZpbmUgX1hUX0NPTk5NQVJLX0gKLQogc3RydWN0IHh0X2Nvbm5tYXJrX2luZm8gewogIHVuc2lnbmVkIGxvbmcgbWFyaywgbWFzazsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdV9pbnQ4X3QgaW52ZXJ0OwogfTsKLQogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyL3h0X2Nvbm50cmFjay5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlci94dF9jb25udHJhY2suaAppbmRleCBhYTliZGUyLi41YTAzMmM2IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyL3h0X2Nvbm50cmFjay5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXIveHRfY29ubnRyYWNrLmgKQEAgLTcsNjAgKzcsNjUgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9YVF9DT05OVFJBQ0tfSAogI2RlZmluZSBfWFRfQ09OTlRSQUNLX0gKLQogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfdHVwbGVfY29tbW9uLmg+CiAjaW5jbHVkZSA8bGludXgvaW4uaD4KLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgWFRfQ09OTlRSQUNLX1NUQVRFX0JJVChjdGluZm8pICgxIDw8ICgoY3RpbmZvKSVJUF9DVF9JU19SRVBMWSsxKSkKICNkZWZpbmUgWFRfQ09OTlRSQUNLX1NUQVRFX0lOVkFMSUQgKDEgPDwgMCkKLQogI2RlZmluZSBYVF9DT05OVFJBQ0tfU1RBVEVfU05BVCAoMSA8PCAoSVBfQ1RfTlVNQkVSICsgMSkpCiAjZGVmaW5lIFhUX0NPTk5UUkFDS19TVEFURV9ETkFUICgxIDw8IChJUF9DVF9OVU1CRVIgKyAyKSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFhUX0NPTk5UUkFDS19TVEFURV9VTlRSQUNLRUQgKDEgPDwgKElQX0NUX05VTUJFUiArIDMpKQotCiAjZGVmaW5lIFhUX0NPTk5UUkFDS19TVEFURSAweDAxCiAjZGVmaW5lIFhUX0NPTk5UUkFDS19QUk9UTyAweDAyCiAjZGVmaW5lIFhUX0NPTk5UUkFDS19PUklHU1JDIDB4MDQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFhUX0NPTk5UUkFDS19PUklHRFNUIDB4MDgKICNkZWZpbmUgWFRfQ09OTlRSQUNLX1JFUExTUkMgMHgxMAogI2RlZmluZSBYVF9DT05OVFJBQ0tfUkVQTERTVCAweDIwCiAjZGVmaW5lIFhUX0NPTk5UUkFDS19TVEFUVVMgMHg0MAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgWFRfQ09OTlRSQUNLX0VYUElSRVMgMHg4MAotCiBzdHJ1Y3QgaXBfY29ubnRyYWNrX29sZF90dXBsZQogewogIHN0cnVjdCB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGlwOwogIHVuaW9uIHsKICBfX3UxNiBhbGw7CiAgfSB1OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB9IHNyYzsKLQogIHN0cnVjdCB7CiAgX191MzIgaXA7CiAgdW5pb24geworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UxNiBhbGw7CiAgfSB1OwotCiAgX191MTYgcHJvdG9udW07CiAgfSBkc3Q7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKLQogc3RydWN0IHh0X2Nvbm50cmFja19pbmZvCiB7CiAgdW5zaWduZWQgaW50IHN0YXRlbWFzaywgc3RhdHVzbWFzazsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgaXBfY29ubnRyYWNrX29sZF90dXBsZSB0dXBsZVtJUF9DVF9ESVJfTUFYXTsKICBzdHJ1Y3QgaW5fYWRkciBzaXBtc2tbSVBfQ1RfRElSX01BWF0sIGRpcG1za1tJUF9DVF9ESVJfTUFYXTsKLQogIHVuc2lnbmVkIGxvbmcgZXhwaXJlc19taW4sIGV4cGlyZXNfbWF4OwotCiAgdV9pbnQ4X3QgZmxhZ3M7Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdV9pbnQ4X3QgaW52ZmxhZ3M7CiB9OwogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyL3h0X2RjY3AuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXIveHRfZGNjcC5oCmluZGV4IDhhMTBlNjcuLjFhNGZlYTAgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXIveHRfZGNjcC5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXIveHRfZGNjcC5oCkBAIC03LDI4ICs3LDMyIEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfWFRfRENDUF9IXwogI2RlZmluZSBfWFRfRENDUF9IXwotCiAjZGVmaW5lIFhUX0RDQ1BfU1JDX1BPUlRTIDB4MDEKICNkZWZpbmUgWFRfRENDUF9ERVNUX1BPUlRTIDB4MDIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFhUX0RDQ1BfVFlQRSAweDA0CiAjZGVmaW5lIFhUX0RDQ1BfT1BUSU9OIDB4MDgKLQogI2RlZmluZSBYVF9EQ0NQX1ZBTElEX0ZMQUdTIDB4MGYKLQogc3RydWN0IHh0X2RjY3BfaW5mbyB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVfaW50MTZfdCBkcHRzWzJdOwogIHVfaW50MTZfdCBzcHRzWzJdOwotCiAgdV9pbnQxNl90IGZsYWdzOwogIHVfaW50MTZfdCBpbnZmbGFnczsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1X2ludDE2X3QgdHlwZW1hc2s7CiAgdV9pbnQ4X3Qgb3B0aW9uOwogfTsKLQogI2VuZGlmCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyL3h0X2VzcC5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlci94dF9lc3AuaAppbmRleCAxNzVjNDdlLi5jMmZkYjQzIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyL3h0X2VzcC5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXIveHRfZXNwLmgKQEAgLTcsMTggKzcsMjQgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9YVF9FU1BfSAogI2RlZmluZSBfWFRfRVNQX0gKLQogc3RydWN0IHh0X2VzcAogeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1X2ludDMyX3Qgc3Bpc1syXTsKICB1X2ludDhfdCBpbnZmbGFnczsKIH07Ci0KLSNkZWZpbmUgWFRfRVNQX0lOVl9TUEkgMHgwMSAgCi0jZGVmaW5lIFhUX0VTUF9JTlZfTUFTSyAweDAxICAKLQorI2RlZmluZSBYVF9FU1BfSU5WX1NQSSAweDAxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBYVF9FU1BfSU5WX01BU0sgMHgwMQogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyL3h0X2hlbHBlci5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlci94dF9oZWxwZXIuaAppbmRleCA2ZmZhNDUxLi43ODU2NjNlIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyL3h0X2hlbHBlci5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXIveHRfaGVscGVyLmgKQEAgLTcsMTMgKzcsMjAgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9YVF9IRUxQRVJfSAogI2RlZmluZSBfWFRfSEVMUEVSX0gKLQogc3RydWN0IHh0X2hlbHBlcl9pbmZvIHsKICBpbnQgaW52ZXJ0OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBjaGFyIG5hbWVbMzBdOwogfTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlci94dF9sZW5ndGguaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXIveHRfbGVuZ3RoLmgKaW5kZXggMTJkYjZjNy4uNTFiMmE4OCAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlci94dF9sZW5ndGguaAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyL3h0X2xlbmd0aC5oCkBAIC03LDE0ICs3LDIwIEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfWFRfTEVOR1RIX0gKICNkZWZpbmUgX1hUX0xFTkdUSF9ICi0KIHN0cnVjdCB4dF9sZW5ndGhfaW5mbyB7CiAgdV9pbnQxNl90IG1pbiwgbWF4OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1X2ludDhfdCBpbnZlcnQ7CiB9OwotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXIveHRfbGltaXQuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXIveHRfbGltaXQuaAppbmRleCBmOWZiMzdmLi5kOWI1MTkxIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyL3h0X2xpbWl0LmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlci94dF9saW1pdC5oCkBAIC03LDIxICs3LDI3IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfWFRfUkFURV9ICiAjZGVmaW5lIF9YVF9SQVRFX0gKLQogI2RlZmluZSBYVF9MSU1JVF9TQ0FMRSAxMDAwMAotCiBzdHJ1Y3QgeHRfcmF0ZWluZm8geworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1X2ludDMyX3QgYXZnOwogIHVfaW50MzJfdCBidXJzdDsKLQogIHVuc2lnbmVkIGxvbmcgcHJldjsKICB1X2ludDMyX3QgY3JlZGl0OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1X2ludDMyX3QgY3JlZGl0X2NhcCwgY29zdDsKLQogIHN0cnVjdCB4dF9yYXRlaW5mbyAqbWFzdGVyOwogfTsKICNlbmRpZgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXIveHRfbWFjLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyL3h0X21hYy5oCmluZGV4IDI0NzNhYWIuLjEyYzU4NGMgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXIveHRfbWFjLmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlci94dF9tYWMuaApAQCAtNywxMyArNywyMCBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX1hUX01BQ19ICiAjZGVmaW5lIF9YVF9NQUNfSAotCiBzdHJ1Y3QgeHRfbWFjX2luZm8gewogIHVuc2lnbmVkIGNoYXIgc3JjYWRkcltFVEhfQUxFTl07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGludCBpbnZlcnQ7CiB9OwogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyL3h0X21hcmsuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXIveHRfbWFyay5oCmluZGV4IDY5Njk5ZGYuLmYwNjQ2MmIgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXIveHRfbWFyay5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXIveHRfbWFyay5oCkBAIC03LDE0ICs3LDIwIEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfWFRfTUFSS19ICiAjZGVmaW5lIF9YVF9NQVJLX0gKLQogc3RydWN0IHh0X21hcmtfaW5mbyB7CiAgdW5zaWduZWQgbG9uZyBtYXJrLCBtYXNrOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1X2ludDhfdCBpbnZlcnQ7CiB9OwotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXIveHRfbXVsdGlwb3J0LmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyL3h0X211bHRpcG9ydC5oCmluZGV4IGYxNzk3OWEuLmNlOGY0MjUgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXIveHRfbXVsdGlwb3J0LmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlci94dF9tdWx0aXBvcnQuaApAQCAtNywzNCArNyw0MiBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX1hUX01VTFRJUE9SVF9ICiAjZGVmaW5lIF9YVF9NVUxUSVBPUlRfSAotCiBlbnVtIHh0X211bHRpcG9ydF9mbGFncwogeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBYVF9NVUxUSVBPUlRfU09VUkNFLAogIFhUX01VTFRJUE9SVF9ERVNUSU5BVElPTiwKICBYVF9NVUxUSVBPUlRfRUlUSEVSCiB9OwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBYVF9NVUxUSV9QT1JUUyAxNQotCiBzdHJ1Y3QgeHRfbXVsdGlwb3J0CiB7CiAgdV9pbnQ4X3QgZmxhZ3M7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVfaW50OF90IGNvdW50OwogIHVfaW50MTZfdCBwb3J0c1tYVF9NVUxUSV9QT1JUU107CiB9OwotCiBzdHJ1Y3QgeHRfbXVsdGlwb3J0X3YxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogewogIHVfaW50OF90IGZsYWdzOwogIHVfaW50OF90IGNvdW50OwogIHVfaW50MTZfdCBwb3J0c1tYVF9NVUxUSV9QT1JUU107CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVfaW50OF90IHBmbGFnc1tYVF9NVUxUSV9QT1JUU107CiAgdV9pbnQ4X3QgaW52ZXJ0OwogfTsKLQogI2VuZGlmCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlci94dF9waHlzZGV2LmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyL3h0X3BoeXNkZXYuaAppbmRleCBkMGNhMDMyLi4xZDg1MDA4IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyL3h0X3BoeXNkZXYuaAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyL3h0X3BoeXNkZXYuaApAQCAtNywyNSArNywzMyBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX1hUX1BIWVNERVZfSAogI2RlZmluZSBfWFRfUEhZU0RFVl9ICi0KICNkZWZpbmUgWFRfUEhZU0RFVl9PUF9JTiAweDAxCiAjZGVmaW5lIFhUX1BIWVNERVZfT1BfT1VUIDB4MDIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFhUX1BIWVNERVZfT1BfQlJJREdFRCAweDA0CiAjZGVmaW5lIFhUX1BIWVNERVZfT1BfSVNJTiAweDA4CiAjZGVmaW5lIFhUX1BIWVNERVZfT1BfSVNPVVQgMHgxMAogI2RlZmluZSBYVF9QSFlTREVWX09QX01BU0sgKDB4MjAgLSAxKQotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IHh0X3BoeXNkZXZfaW5mbyB7CiAgY2hhciBwaHlzaW5kZXZbSUZOQU1TSVpdOwogIGNoYXIgaW5fbWFza1tJRk5BTVNJWl07CiAgY2hhciBwaHlzb3V0ZGV2W0lGTkFNU0laXTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgY2hhciBvdXRfbWFza1tJRk5BTVNJWl07CiAgdV9pbnQ4X3QgaW52ZXJ0OwogIHVfaW50OF90IGJpdG1hc2s7CiB9OwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyL3h0X3BrdHR5cGUuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXIveHRfcGt0dHlwZS5oCmluZGV4IDMyNTI3YjguLjVlZjEyNTYgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXIveHRfcGt0dHlwZS5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXIveHRfcGt0dHlwZS5oCkBAIC03LDEzICs3LDIwIEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfWFRfUEtUVFlQRV9ICiAjZGVmaW5lIF9YVF9QS1RUWVBFX0gKLQogc3RydWN0IHh0X3BrdHR5cGVfaW5mbyB7CiAgaW50IHBrdHR5cGU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGludCBpbnZlcnQ7CiB9OwogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyL3h0X3F1b3RhLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyL3h0X3F1b3RhLmgKaW5kZXggZDM0NzUyZC4uZmU0NjcyMSAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlci94dF9xdW90YS5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXIveHRfcXVvdGEuaApAQCAtNywyMSArNywyOCBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX1hUX1FVT1RBX0gKICNkZWZpbmUgX1hUX1FVT1RBX0gKLQogZW51bSB4dF9xdW90YV9mbGFncyB7CiAgWFRfUVVPVEFfSU5WRVJUID0gMHgxLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiAjZGVmaW5lIFhUX1FVT1RBX01BU0sgMHgxCi0KIHN0cnVjdCB4dF9xdW90YV9pbmZvIHsKICB1X2ludDMyX3QgZmxhZ3M7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVfaW50MzJfdCBwYWQ7CiAgYWxpZ25lZF91NjQgcXVvdGE7CiAgc3RydWN0IHh0X3F1b3RhX2luZm8gKm1hc3RlcjsKIH07Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXIveHRfcmVhbG0uaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXIveHRfcmVhbG0uaAppbmRleCAxYTJhM2NmLi45M2U2YjlhIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyL3h0X3JlYWxtLmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlci94dF9yZWFsbS5oCkBAIC03LDE1ICs3LDIyIEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfWFRfUkVBTE1fSAogI2RlZmluZSBfWFRfUkVBTE1fSAotCiBzdHJ1Y3QgeHRfcmVhbG1faW5mbyB7CiAgdV9pbnQzMl90IGlkOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1X2ludDMyX3QgbWFzazsKICB1X2ludDhfdCBpbnZlcnQ7CiB9OwotCiAjZW5kaWYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyL3h0X3NjdHAuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXIveHRfc2N0cC5oCmluZGV4IGY3OWMzYjYuLmQ5ZDVmNTUgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXIveHRfc2N0cC5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXIveHRfc2N0cC5oCkBAIC03LDYyICs3LDU3IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfWFRfU0NUUF9IXwogI2RlZmluZSBfWFRfU0NUUF9IXwotCiAjZGVmaW5lIFhUX1NDVFBfU1JDX1BPUlRTIDB4MDEKICNkZWZpbmUgWFRfU0NUUF9ERVNUX1BPUlRTIDB4MDIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFhUX1NDVFBfQ0hVTktfVFlQRVMgMHgwNAotCiAjZGVmaW5lIFhUX1NDVFBfVkFMSURfRkxBR1MgMHgwNwotCiAjZGVmaW5lIEVMRU1DT1VOVCh4KSAoc2l6ZW9mKHgpL3NpemVvZih4WzBdKSkKLQogc3RydWN0IHh0X3NjdHBfZmxhZ19pbmZvIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdV9pbnQ4X3QgY2h1bmt0eXBlOwogIHVfaW50OF90IGZsYWc7CiAgdV9pbnQ4X3QgZmxhZ19tYXNrOwogfTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgWFRfTlVNX1NDVFBfRkxBR1MgNAotCiBzdHJ1Y3QgeHRfc2N0cF9pbmZvIHsKICB1X2ludDE2X3QgZHB0c1syXTsKICB1X2ludDE2X3Qgc3B0c1syXTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1X2ludDMyX3QgY2h1bmttYXBbMjU2IC8gc2l6ZW9mICh1X2ludDMyX3QpXTsKLQotI2RlZmluZSBTQ1RQX0NIVU5LX01BVENIX0FOWSAweDAxICAKLSNkZWZpbmUgU0NUUF9DSFVOS19NQVRDSF9BTEwgMHgwMiAgCi0jZGVmaW5lIFNDVFBfQ0hVTktfTUFUQ0hfT05MWSAweDA0ICAKLQorI2RlZmluZSBTQ1RQX0NIVU5LX01BVENIX0FOWSAweDAxCisjZGVmaW5lIFNDVFBfQ0hVTktfTUFUQ0hfQUxMIDB4MDIKKyNkZWZpbmUgU0NUUF9DSFVOS19NQVRDSF9PTkxZIDB4MDQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdV9pbnQzMl90IGNodW5rX21hdGNoX3R5cGU7CiAgc3RydWN0IHh0X3NjdHBfZmxhZ19pbmZvIGZsYWdfaW5mb1tYVF9OVU1fU0NUUF9GTEFHU107CiAgaW50IGZsYWdfY291bnQ7Ci0KICB1X2ludDMyX3QgZmxhZ3M7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVfaW50MzJfdCBpbnZmbGFnczsKIH07Ci0KICNkZWZpbmUgYnl0ZXModHlwZSkgKHNpemVvZih0eXBlKSAqIDgpCi0KICNkZWZpbmUgU0NUUF9DSFVOS01BUF9TRVQoY2h1bmttYXAsIHR5cGUpICAgZG8geyAgIGNodW5rbWFwW3R5cGUgLyBieXRlcyh1X2ludDMyX3QpXSB8PSAgIDEgPDwgKHR5cGUgJSBieXRlcyh1X2ludDMyX3QpKTsgICB9IHdoaWxlICgwKQotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTQ1RQX0NIVU5LTUFQX0NMRUFSKGNodW5rbWFwLCB0eXBlKSAgIGRvIHsgICBjaHVua21hcFt0eXBlIC8gYnl0ZXModV9pbnQzMl90KV0gJj0gICB+KDEgPDwgKHR5cGUgJSBieXRlcyh1X2ludDMyX3QpKSk7ICAgfSB3aGlsZSAoMCkKLQogI2RlZmluZSBTQ1RQX0NIVU5LTUFQX0lTX1NFVChjaHVua21hcCwgdHlwZSkgICh7ICAgKGNodW5rbWFwW3R5cGUgLyBieXRlcyAodV9pbnQzMl90KV0gJiAgICgxIDw8ICh0eXBlICUgYnl0ZXMgKHVfaW50MzJfdCkpKSkgPyAxOiAwOyAgfSkKLQogI2RlZmluZSBTQ1RQX0NIVU5LTUFQX1JFU0VUKGNodW5rbWFwKSAgIGRvIHsgICBpbnQgaTsgICBmb3IgKGkgPSAwOyBpIDwgRUxFTUNPVU5UKGNodW5rbWFwKTsgaSsrKSAgIGNodW5rbWFwW2ldID0gMDsgICB9IHdoaWxlICgwKQotCiAjZGVmaW5lIFNDVFBfQ0hVTktNQVBfU0VUX0FMTChjaHVua21hcCkgICBkbyB7ICAgaW50IGk7ICAgZm9yIChpID0gMDsgaSA8IEVMRU1DT1VOVChjaHVua21hcCk7IGkrKykgICBjaHVua21hcFtpXSA9IH4wOyAgIH0gd2hpbGUgKDApCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNDVFBfQ0hVTktNQVBfQ09QWShkZXN0bWFwLCBzcmNtYXApICAgZG8geyAgIGludCBpOyAgIGZvciAoaSA9IDA7IGkgPCBFTEVNQ09VTlQoY2h1bmttYXApOyBpKyspICAgZGVzdG1hcFtpXSA9IHNyY21hcFtpXTsgICB9IHdoaWxlICgwKQotCiAjZGVmaW5lIFNDVFBfQ0hVTktNQVBfSVNfQ0xFQVIoY2h1bmttYXApICAoeyAgIGludCBpOyAgIGludCBmbGFnID0gMTsgICBmb3IgKGkgPSAwOyBpIDwgRUxFTUNPVU5UKGNodW5rbWFwKTsgaSsrKSB7ICAgaWYgKGNodW5rbWFwW2ldKSB7ICAgZmxhZyA9IDA7ICAgYnJlYWs7ICAgfSAgIH0gICBmbGFnOyAgfSkKLQogI2RlZmluZSBTQ1RQX0NIVU5LTUFQX0lTX0FMTF9TRVQoY2h1bmttYXApICAoeyAgIGludCBpOyAgIGludCBmbGFnID0gMTsgICBmb3IgKGkgPSAwOyBpIDwgRUxFTUNPVU5UKGNodW5rbWFwKTsgaSsrKSB7ICAgaWYgKGNodW5rbWFwW2ldICE9IH4wKSB7ICAgZmxhZyA9IDA7ICAgYnJlYWs7ICAgfSAgIH0gICBmbGFnOyAgfSkKLQogI2VuZGlmCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyL3h0X3N0YXRlLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyL3h0X3N0YXRlLmgKaW5kZXggNjc1NDc3Ni4uNzE0NGQyYiAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlci94dF9zdGF0ZS5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXIveHRfc3RhdGUuaApAQCAtNywxOCArNywyNCBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX1hUX1NUQVRFX0gKICNkZWZpbmUgX1hUX1NUQVRFX0gKLQogI2RlZmluZSBYVF9TVEFURV9CSVQoY3RpbmZvKSAoMSA8PCAoKGN0aW5mbyklSVBfQ1RfSVNfUkVQTFkrMSkpCiAjZGVmaW5lIFhUX1NUQVRFX0lOVkFMSUQgKDEgPDwgMCkKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgWFRfU1RBVEVfVU5UUkFDS0VEICgxIDw8IChJUF9DVF9OVU1CRVIgKyAxKSkKLQogc3RydWN0IHh0X3N0YXRlX2luZm8KIHsKICB1bnNpZ25lZCBpbnQgc3RhdGVtYXNrOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXIveHRfc3RhdGlzdGljLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyL3h0X3N0YXRpc3RpYy5oCmluZGV4IDk5OWIwYTEuLmMwOTg0OTIgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXIveHRfc3RhdGlzdGljLmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlci94dF9zdGF0aXN0aWMuaApAQCAtNywzNyArNyw0NyBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX1hUX1NUQVRJU1RJQ19ICiAjZGVmaW5lIF9YVF9TVEFUSVNUSUNfSAotCiBlbnVtIHh0X3N0YXRpc3RpY19tb2RlIHsKICBYVF9TVEFUSVNUSUNfTU9ERV9SQU5ET00sCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFhUX1NUQVRJU1RJQ19NT0RFX05USCwKICBfX1hUX1NUQVRJU1RJQ19NT0RFX01BWAogfTsKICNkZWZpbmUgWFRfU1RBVElTVElDX01PREVfTUFYIChfX1hUX1NUQVRJU1RJQ19NT0RFX01BWCAtIDEpCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBlbnVtIHh0X3N0YXRpc3RpY19mbGFncyB7CiAgWFRfU1RBVElTVElDX0lOVkVSVCA9IDB4MSwKIH07CiAjZGVmaW5lIFhUX1NUQVRJU1RJQ19NQVNLIDB4MQotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IHh0X3N0YXRpc3RpY19pbmZvIHsKICB1X2ludDE2X3QgbW9kZTsKICB1X2ludDE2X3QgZmxhZ3M7CiAgdW5pb24geworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgewogIHVfaW50MzJfdCBwcm9iYWJpbGl0eTsKICB9IHJhbmRvbTsKICBzdHJ1Y3QgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1X2ludDMyX3QgZXZlcnk7CiAgdV9pbnQzMl90IHBhY2tldDsKICB1X2ludDMyX3QgY291bnQ7CiAgfSBudGg7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIH0gdTsKICBzdHJ1Y3QgeHRfc3RhdGlzdGljX2luZm8gKm1hc3RlciBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDgpKSk7CiB9OwotCiAjZW5kaWYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyL3h0X3N0cmluZy5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlci94dF9zdHJpbmcuaAppbmRleCBhMDEwMThmLi4zZDM0ZjRjIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyL3h0X3N0cmluZy5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXIveHRfc3RyaW5nLmgKQEAgLTcsMjMgKzcsMzAgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9YVF9TVFJJTkdfSAogI2RlZmluZSBfWFRfU1RSSU5HX0gKLQogI2RlZmluZSBYVF9TVFJJTkdfTUFYX1BBVFRFUk5fU0laRSAxMjgKICNkZWZpbmUgWFRfU1RSSU5HX01BWF9BTEdPX05BTUVfU0laRSAxNgotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IHh0X3N0cmluZ19pbmZvCiB7CiAgdV9pbnQxNl90IGZyb21fb2Zmc2V0OwogIHVfaW50MTZfdCB0b19vZmZzZXQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGNoYXIgYWxnb1tYVF9TVFJJTkdfTUFYX0FMR09fTkFNRV9TSVpFXTsKICBjaGFyIHBhdHRlcm5bWFRfU1RSSU5HX01BWF9QQVRURVJOX1NJWkVdOwogIHVfaW50OF90IHBhdGxlbjsKICB1X2ludDhfdCBpbnZlcnQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCB0c19jb25maWcgX19hdHRyaWJ1dGVfXygoYWxpZ25lZCg4KSkpICpjb25maWc7CiB9OwotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXIveHRfdGNwbXNzLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyL3h0X3RjcG1zcy5oCmluZGV4IDMzZGUwZWUuLjgyMzNlYTkgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXIveHRfdGNwbXNzLmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlci94dF90Y3Btc3MuaApAQCAtNywxNCArNywyMCBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX1hUX1RDUE1TU19NQVRDSF9ICiAjZGVmaW5lIF9YVF9UQ1BNU1NfTUFUQ0hfSAotCiBzdHJ1Y3QgeHRfdGNwbXNzX21hdGNoX2luZm8gewogIHVfaW50MTZfdCBtc3NfbWluLCBtc3NfbWF4OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1X2ludDhfdCBpbnZlcnQ7CiB9OwotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXIveHRfdGNwdWRwLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyL3h0X3RjcHVkcC5oCmluZGV4IDQ3NmZmZmIuLjU0ZjY3ZjkgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXIveHRfdGNwdWRwLmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlci94dF90Y3B1ZHAuaApAQCAtNywzNiArNyw0NCBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX1hUX1RDUFVEUF9ICiAjZGVmaW5lIF9YVF9UQ1BVRFBfSAotCiBzdHJ1Y3QgeHRfdGNwCiB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVfaW50MTZfdCBzcHRzWzJdOwogIHVfaW50MTZfdCBkcHRzWzJdOwogIHVfaW50OF90IG9wdGlvbjsKICB1X2ludDhfdCBmbGdfbWFzazsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdV9pbnQ4X3QgZmxnX2NtcDsKICB1X2ludDhfdCBpbnZmbGFnczsKIH07Ci0KLSNkZWZpbmUgWFRfVENQX0lOVl9TUkNQVCAweDAxICAKLSNkZWZpbmUgWFRfVENQX0lOVl9EU1RQVCAweDAyICAKLSNkZWZpbmUgWFRfVENQX0lOVl9GTEFHUyAweDA0ICAKLSNkZWZpbmUgWFRfVENQX0lOVl9PUFRJT04gMHgwOCAgCi0jZGVmaW5lIFhUX1RDUF9JTlZfTUFTSyAweDBGICAKLQorI2RlZmluZSBYVF9UQ1BfSU5WX1NSQ1BUIDB4MDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFhUX1RDUF9JTlZfRFNUUFQgMHgwMgorI2RlZmluZSBYVF9UQ1BfSU5WX0ZMQUdTIDB4MDQKKyNkZWZpbmUgWFRfVENQX0lOVl9PUFRJT04gMHgwOAorI2RlZmluZSBYVF9UQ1BfSU5WX01BU0sgMHgwRgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCB4dF91ZHAKIHsKICB1X2ludDE2X3Qgc3B0c1syXTsKICB1X2ludDE2X3QgZHB0c1syXTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdV9pbnQ4X3QgaW52ZmxhZ3M7CiB9OwotCi0jZGVmaW5lIFhUX1VEUF9JTlZfU1JDUFQgMHgwMSAgCi0jZGVmaW5lIFhUX1VEUF9JTlZfRFNUUFQgMHgwMiAgCi0jZGVmaW5lIFhUX1VEUF9JTlZfTUFTSyAweDAzICAKLQorI2RlZmluZSBYVF9VRFBfSU5WX1NSQ1BUIDB4MDEKKyNkZWZpbmUgWFRfVURQX0lOVl9EU1RQVCAweDAyCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBYVF9VRFBfSU5WX01BU0sgMHgwMwogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2FycC5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9hcnAuaAppbmRleCAwODU2OWRiLi41MjFiOTUxIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2FycC5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfYXJwLmgKQEAgLTcsMTggKzcsMjMgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9fTElOVVhfQVJQX05FVEZJTFRFUl9ICiAjZGVmaW5lIF9fTElOVVhfQVJQX05FVEZJTFRFUl9ICi0KICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIuaD4KLQogI2RlZmluZSBORl9BUlAgMAotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBORl9BUlBfSU4gMAogI2RlZmluZSBORl9BUlBfT1VUIDEKICNkZWZpbmUgTkZfQVJQX0ZPUldBUkQgMgogI2RlZmluZSBORl9BUlBfTlVNSE9PS1MgMwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2FycC9hcnBfdGFibGVzLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2FycC9hcnBfdGFibGVzLmgKaW5kZXggNjY1YTM0Ny4uMTM3NzE5ZCAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9hcnAvYXJwX3RhYmxlcy5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfYXJwL2FycF90YWJsZXMuaApAQCAtNywxNTMgKzcsMTI5IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfQVJQVEFCTEVTX0gKICNkZWZpbmUgX0FSUFRBQkxFU19ICi0KICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9hcnAuaD4KLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIveF90YWJsZXMuaD4KLQogI2RlZmluZSBBUlBUX0ZVTkNUSU9OX01BWE5BTUVMRU4gWFRfRlVOQ1RJT05fTUFYTkFNRUxFTgogI2RlZmluZSBBUlBUX1RBQkxFX01BWE5BTUVMRU4gWFRfVEFCTEVfTUFYTkFNRUxFTgogI2RlZmluZSBhcnB0X3RhcmdldCB4dF90YXJnZXQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIGFycHRfdGFibGUgeHRfdGFibGUKLQogI2RlZmluZSBBUlBUX0RFVl9BRERSX0xFTl9NQVggMTYKLQogc3RydWN0IGFycHRfZGV2YWRkcl9pbmZvIHsKICBjaGFyIGFkZHJbQVJQVF9ERVZfQUREUl9MRU5fTUFYXTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgY2hhciBtYXNrW0FSUFRfREVWX0FERFJfTEVOX01BWF07CiB9OwotCiBzdHJ1Y3QgYXJwdF9hcnAgewotCiAgc3RydWN0IGluX2FkZHIgc3JjLCB0Z3Q7Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IGluX2FkZHIgc21zaywgdG1zazsKLQogIHVfaW50OF90IGFyaGxuLCBhcmhsbl9tYXNrOwogIHN0cnVjdCBhcnB0X2RldmFkZHJfaW5mbyBzcmNfZGV2YWRkcjsKICBzdHJ1Y3QgYXJwdF9kZXZhZGRyX2luZm8gdGd0X2RldmFkZHI7Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdV9pbnQxNl90IGFycG9wLCBhcnBvcF9tYXNrOwotCiAgdV9pbnQxNl90IGFyaHJkLCBhcmhyZF9tYXNrOwogIHVfaW50MTZfdCBhcnBybywgYXJwcm9fbWFzazsKLQogIGNoYXIgaW5pZmFjZVtJRk5BTVNJWl0sIG91dGlmYWNlW0lGTkFNU0laXTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgY2hhciBpbmlmYWNlX21hc2tbSUZOQU1TSVpdLCBvdXRpZmFjZV9tYXNrW0lGTkFNU0laXTsKLQogIHVfaW50OF90IGZsYWdzOwotCiAgdV9pbnQxNl90IGludmZsYWdzOwogfTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgYXJwdF9lbnRyeV90YXJnZXQgeHRfZW50cnlfdGFyZ2V0CiAjZGVmaW5lIGFycHRfc3RhbmRhcmRfdGFyZ2V0IHh0X3N0YW5kYXJkX3RhcmdldAotCi0jZGVmaW5lIEFSUFRfRl9NQVNLIDB4MDAgIAotCi0jZGVmaW5lIEFSUFRfSU5WX1ZJQV9JTiAweDAwMDEgIAotI2RlZmluZSBBUlBUX0lOVl9WSUFfT1VUIDB4MDAwMiAgCi0jZGVmaW5lIEFSUFRfSU5WX1NSQ0lQIDB4MDAwNCAgCi0jZGVmaW5lIEFSUFRfSU5WX1RHVElQIDB4MDAwOCAgCi0jZGVmaW5lIEFSUFRfSU5WX1NSQ0RFVkFERFIgMHgwMDEwICAKLSNkZWZpbmUgQVJQVF9JTlZfVEdUREVWQUREUiAweDAwMjAgIAotI2RlZmluZSBBUlBUX0lOVl9BUlBPUCAweDAwNDAgIAotI2RlZmluZSBBUlBUX0lOVl9BUlBIUkQgMHgwMDgwICAKLSNkZWZpbmUgQVJQVF9JTlZfQVJQUFJPIDB4MDEwMCAgCi0jZGVmaW5lIEFSUFRfSU5WX0FSUEhMTiAweDAyMDAgIAotI2RlZmluZSBBUlBUX0lOVl9NQVNLIDB4MDNGRiAgCi0KKyNkZWZpbmUgQVJQVF9GX01BU0sgMHgwMAorI2RlZmluZSBBUlBUX0lOVl9WSUFfSU4gMHgwMDAxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBBUlBUX0lOVl9WSUFfT1VUIDB4MDAwMgorI2RlZmluZSBBUlBUX0lOVl9TUkNJUCAweDAwMDQKKyNkZWZpbmUgQVJQVF9JTlZfVEdUSVAgMHgwMDA4CisjZGVmaW5lIEFSUFRfSU5WX1NSQ0RFVkFERFIgMHgwMDEwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBBUlBUX0lOVl9UR1RERVZBRERSIDB4MDAyMAorI2RlZmluZSBBUlBUX0lOVl9BUlBPUCAweDAwNDAKKyNkZWZpbmUgQVJQVF9JTlZfQVJQSFJEIDB4MDA4MAorI2RlZmluZSBBUlBUX0lOVl9BUlBQUk8gMHgwMTAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBBUlBUX0lOVl9BUlBITE4gMHgwMjAwCisjZGVmaW5lIEFSUFRfSU5WX01BU0sgMHgwM0ZGCiBzdHJ1Y3QgYXJwdF9lbnRyeQogeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgYXJwdF9hcnAgYXJwOwotCiAgdV9pbnQxNl90IHRhcmdldF9vZmZzZXQ7Ci0KICB1X2ludDE2X3QgbmV4dF9vZmZzZXQ7Ci0KICB1bnNpZ25lZCBpbnQgY29tZWZyb207Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IHh0X2NvdW50ZXJzIGNvdW50ZXJzOwotCiAgdW5zaWduZWQgY2hhciBlbGVtc1swXTsKIH07Ci0KICNkZWZpbmUgQVJQVF9DVExfT0ZGU0VUIDMyCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBUlBUX0JBU0VfQ1RMIChYVF9CQVNFX0NUTCtBUlBUX0NUTF9PRkZTRVQpCi0KICNkZWZpbmUgQVJQVF9TT19TRVRfUkVQTEFDRSAoWFRfU09fU0VUX1JFUExBQ0UrQVJQVF9DVExfT0ZGU0VUKQogI2RlZmluZSBBUlBUX1NPX1NFVF9BRERfQ09VTlRFUlMgKFhUX1NPX1NFVF9BRERfQ09VTlRFUlMrQVJQVF9DVExfT0ZGU0VUKQogI2RlZmluZSBBUlBUX1NPX1NFVF9NQVggKFhUX1NPX1NFVF9NQVgrQVJQVF9DVExfT0ZGU0VUKQotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBUlBUX1NPX0dFVF9JTkZPIChYVF9TT19HRVRfSU5GTytBUlBUX0NUTF9PRkZTRVQpCiAjZGVmaW5lIEFSUFRfU09fR0VUX0VOVFJJRVMgKFhUX1NPX0dFVF9FTlRSSUVTK0FSUFRfQ1RMX09GRlNFVCkKLQogI2RlZmluZSBBUlBUX1NPX0dFVF9SRVZJU0lPTl9UQVJHRVQgKFhUX1NPX0dFVF9SRVZJU0lPTl9UQVJHRVQrQVJQVF9DVExfT0ZGU0VUKQogI2RlZmluZSBBUlBUX1NPX0dFVF9NQVggKFhUX1NPX0dFVF9SRVZJU0lPTl9UQVJHRVQrQVJQVF9DVExfT0ZGU0VUKQotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBUlBUX0NPTlRJTlVFIFhUX0NPTlRJTlVFCi0KICNkZWZpbmUgQVJQVF9SRVRVUk4gWFRfUkVUVVJOCi0KIHN0cnVjdCBhcnB0X2dldGluZm8KIHsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBjaGFyIG5hbWVbQVJQVF9UQUJMRV9NQVhOQU1FTEVOXTsKLQogIHVuc2lnbmVkIGludCB2YWxpZF9ob29rczsKLQogIHVuc2lnbmVkIGludCBob29rX2VudHJ5W05GX0FSUF9OVU1IT09LU107Ci0KICB1bnNpZ25lZCBpbnQgdW5kZXJmbG93W05GX0FSUF9OVU1IT09LU107Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgaW50IG51bV9lbnRyaWVzOwotCiAgdW5zaWduZWQgaW50IHNpemU7CiB9OwotCiBzdHJ1Y3QgYXJwdF9yZXBsYWNlCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogewotCiAgY2hhciBuYW1lW0FSUFRfVEFCTEVfTUFYTkFNRUxFTl07Ci0KICB1bnNpZ25lZCBpbnQgdmFsaWRfaG9va3M7Ci0KICB1bnNpZ25lZCBpbnQgbnVtX2VudHJpZXM7Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgaW50IHNpemU7Ci0KICB1bnNpZ25lZCBpbnQgaG9va19lbnRyeVtORl9BUlBfTlVNSE9PS1NdOwotCiAgdW5zaWduZWQgaW50IHVuZGVyZmxvd1tORl9BUlBfTlVNSE9PS1NdOwotCiAgdW5zaWduZWQgaW50IG51bV9jb3VudGVyczsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgeHRfY291bnRlcnMgX191c2VyICpjb3VudGVyczsKLQogIHN0cnVjdCBhcnB0X2VudHJ5IGVudHJpZXNbMF07CiB9OwotCiAjZGVmaW5lIGFycHRfY291bnRlcnNfaW5mbyB4dF9jb3VudGVyc19pbmZvCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgYXJwdF9nZXRfZW50cmllcwogewotCiAgY2hhciBuYW1lW0FSUFRfVEFCTEVfTUFYTkFNRUxFTl07Ci0KICB1bnNpZ25lZCBpbnQgc2l6ZTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgYXJwdF9lbnRyeSBlbnRyeXRhYmxlWzBdOwogfTsKLQogI2RlZmluZSBBUlBUX1NUQU5EQVJEX1RBUkdFVCBYVF9TVEFOREFSRF9UQVJHRVQKLQogI2RlZmluZSBBUlBUX0VSUk9SX1RBUkdFVCBYVF9FUlJPUl9UQVJHRVQKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQVJQVF9FTlRSWV9JVEVSQVRFKGVudHJpZXMsIHNpemUsIGZuLCBhcmdzLi4uKSAgKHsgICB1bnNpZ25lZCBpbnQgX19pOyAgIGludCBfX3JldCA9IDA7ICAgc3RydWN0IGFycHRfZW50cnkgKl9fZW50cnk7ICAgICBmb3IgKF9faSA9IDA7IF9faSA8IChzaXplKTsgX19pICs9IF9fZW50cnktPm5leHRfb2Zmc2V0KSB7ICAgX19lbnRyeSA9ICh2b2lkICopKGVudHJpZXMpICsgX19pOyAgICAgX19yZXQgPSBmbihfX2VudHJ5ICwgIyMgYXJncyk7ICAgaWYgKF9fcmV0ICE9IDApICAgYnJlYWs7ICAgfSAgIF9fcmV0OyAgfSkKICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9icmlkZ2UuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfYnJpZGdlLmgKaW5kZXggMjJjY2E1NS4uZTZkMzhlMSAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9icmlkZ2UuaAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2JyaWRnZS5oCkBAIC03LDI0ICs3LDI1IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfX0xJTlVYX0JSSURHRV9ORVRGSUxURVJfSAogI2RlZmluZSBfX0xJTlVYX0JSSURHRV9ORVRGSUxURVJfSAotCiAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyLmg+Ci0KICNkZWZpbmUgTkZfQlJfUFJFX1JPVVRJTkcgMAotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBORl9CUl9MT0NBTF9JTiAxCi0KICNkZWZpbmUgTkZfQlJfRk9SV0FSRCAyCi0KICNkZWZpbmUgTkZfQlJfTE9DQUxfT1VUIDMKLQogI2RlZmluZSBORl9CUl9QT1NUX1JPVVRJTkcgNAotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBORl9CUl9CUk9VVElORyA1CiAjZGVmaW5lIE5GX0JSX05VTUhPT0tTIDYKLQogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjQuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2NC5oCmluZGV4IDE3ZmQ0NTEuLjMwYzViM2QgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2NC5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2NC5oCkBAIC03LDY3ICs3LDYzIEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfX0xJTlVYX0lQX05FVEZJTFRFUl9ICiAjZGVmaW5lIF9fTElOVVhfSVBfTkVURklMVEVSX0gKLQogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci5oPgotCiAjZGVmaW5lIE5GQ19JUF9TUkMgMHgwMDAxCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE5GQ19JUF9EU1QgMHgwMDAyCi0KICNkZWZpbmUgTkZDX0lQX0lGX0lOIDB4MDAwNAotCiAjZGVmaW5lIE5GQ19JUF9JRl9PVVQgMHgwMDA4Ci0KICNkZWZpbmUgTkZDX0lQX1RPUyAweDAwMTAKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTkZDX0lQX1BST1RPIDB4MDAyMAotCiAjZGVmaW5lIE5GQ19JUF9PUFRJT05TIDB4MDA0MAotCiAjZGVmaW5lIE5GQ19JUF9GUkFHIDB4MDA4MAotCiAjZGVmaW5lIE5GQ19JUF9UQ1BGTEFHUyAweDAxMDAKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTkZDX0lQX1NSQ19QVCAweDAyMDAKLQogI2RlZmluZSBORkNfSVBfRFNUX1BUIDB4MDQwMAotCiAjZGVmaW5lIE5GQ19JUF9QUk9UT19VTktOT1dOIDB4MjAwMAotCiAjZGVmaW5lIE5GX0lQX1BSRV9ST1VUSU5HIDAKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTkZfSVBfTE9DQUxfSU4gMQotCiAjZGVmaW5lIE5GX0lQX0ZPUldBUkQgMgotCiAjZGVmaW5lIE5GX0lQX0xPQ0FMX09VVCAzCi0KICNkZWZpbmUgTkZfSVBfUE9TVF9ST1VUSU5HIDQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE5GX0lQX05VTUhPT0tTIDUKLQogZW51bSBuZl9pcF9ob29rX3ByaW9yaXRpZXMgewogIE5GX0lQX1BSSV9GSVJTVCA9IElOVF9NSU4sCiAgTkZfSVBfUFJJX0NPTk5UUkFDS19ERUZSQUcgPSAtNDAwLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBORl9JUF9QUklfUkFXID0gLTMwMCwKICBORl9JUF9QUklfU0VMSU5VWF9GSVJTVCA9IC0yMjUsCiAgTkZfSVBfUFJJX0NPTk5UUkFDSyA9IC0yMDAsCiAgTkZfSVBfUFJJX0JSSURHRV9TQUJPVEFHRV9GT1JXQVJEID0gLTE3NSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkZfSVBfUFJJX01BTkdMRSA9IC0xNTAsCiAgTkZfSVBfUFJJX05BVF9EU1QgPSAtMTAwLAogIE5GX0lQX1BSSV9CUklER0VfU0FCT1RBR0VfTE9DQUxfT1VUID0gLTUwLAogIE5GX0lQX1BSSV9GSUxURVIgPSAwLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBORl9JUF9QUklfTkFUX1NSQyA9IDEwMCwKICBORl9JUF9QUklfU0VMSU5VWF9MQVNUID0gMjI1LAogIE5GX0lQX1BSSV9DT05OVFJBQ0tfSEVMUEVSID0gSU5UX01BWCAtIDIsCiAgTkZfSVBfUFJJX05BVF9TRVFfQURKVVNUID0gSU5UX01BWCAtIDEsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5GX0lQX1BSSV9DT05OVFJBQ0tfQ09ORklSTSA9IElOVF9NQVgsCiAgTkZfSVBfUFJJX0xBU1QgPSBJTlRfTUFYLAogfTsKLQogI2RlZmluZSBTT19PUklHSU5BTF9EU1QgODAKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwX2Nvbm50cmFjay5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwX2Nvbm50cmFjay5oCmluZGV4IGVmNTVhNjEuLjRkZGViYTQgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9jb25udHJhY2suaAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfY29ubnRyYWNrLmgKQEAgLTcsMTEgKzcsMTcgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9JUF9DT05OVFJBQ0tfSAogI2RlZmluZSBfSVBfQ09OTlRSQUNLX0gKLQogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29tbW9uLmg+Ci0KICNlbmRpZgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9jb25udHJhY2tfdHVwbGUuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9jb25udHJhY2tfdHVwbGUuaAppbmRleCAwYzk2YmFmLi44MzU4NDI1IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfY29ubnRyYWNrX3R1cGxlLmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwX2Nvbm50cmFja190dXBsZS5oCkBAIC03LDc1ICs3LDgzIEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfSVBfQ09OTlRSQUNLX1RVUExFX0gKICNkZWZpbmUgX0lQX0NPTk5UUkFDS19UVVBMRV9ICi0KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfdHVwbGVfY29tbW9uLmg+Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB1bmlvbiBpcF9jb25udHJhY2tfbWFuaXBfcHJvdG8KIHsKLQogIHVfaW50MTZfdCBhbGw7Ci0KICBzdHJ1Y3QgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX2JlMTYgcG9ydDsKICB9IHRjcDsKICBzdHJ1Y3QgewogIHVfaW50MTZfdCBwb3J0OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB9IHVkcDsKICBzdHJ1Y3QgewogIHVfaW50MTZfdCBpZDsKICB9IGljbXA7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCB7CiAgdV9pbnQxNl90IHBvcnQ7CiAgfSBzY3RwOwogIHN0cnVjdCB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fYmUxNiBrZXk7CiAgfSBncmU7CiB9OwotCiBzdHJ1Y3QgaXBfY29ubnRyYWNrX21hbmlwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogewogIHVfaW50MzJfdCBpcDsKICB1bmlvbiBpcF9jb25udHJhY2tfbWFuaXBfcHJvdG8gdTsKIH07Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgaXBfY29ubnRyYWNrX3R1cGxlCiB7CiAgc3RydWN0IGlwX2Nvbm50cmFja19tYW5pcCBzcmM7Ci0KICBzdHJ1Y3QgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1X2ludDMyX3QgaXA7CiAgdW5pb24gewotCiAgdV9pbnQxNl90IGFsbDsKLQogIHN0cnVjdCB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVfaW50MTZfdCBwb3J0OwogIH0gdGNwOwogIHN0cnVjdCB7CiAgdV9pbnQxNl90IHBvcnQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIH0gdWRwOwogIHN0cnVjdCB7CiAgdV9pbnQ4X3QgdHlwZSwgY29kZTsKICB9IGljbXA7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCB7CiAgdV9pbnQxNl90IHBvcnQ7CiAgfSBzY3RwOwogIHN0cnVjdCB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fYmUxNiBrZXk7CiAgfSBncmU7CiAgfSB1OwotCiAgdV9pbnQ4X3QgcHJvdG9udW07Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdV9pbnQ4X3QgZGlyOwogIH0gZHN0OwogfTsKLQogI2RlZmluZSBJUF9DVF9UVVBMRV9VX0JMQU5LKHR1cGxlKSAgIGRvIHsgICAodHVwbGUpLT5zcmMudS5hbGwgPSAwOyAgICh0dXBsZSktPmRzdC51LmFsbCA9IDA7ICAgfSB3aGlsZSAoMCkKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwX25hdC5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwX25hdC5oCmluZGV4IDdkYjlkYTMuLjg4ZDA0ZTUgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9uYXQuaAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfbmF0LmgKQEAgLTcsNDkgKzcsNDkgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9JUF9OQVRfSAogI2RlZmluZSBfSVBfTkFUX0gKICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfaXB2NC5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0L2lwX2Nvbm50cmFja190dXBsZS5oPgotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJUF9OQVRfTUFQUElOR19UWVBFX01BWF9OQU1FTEVOIDE2Ci0KIGVudW0gaXBfbmF0X21hbmlwX3R5cGUKIHsKICBJUF9OQVRfTUFOSVBfU1JDLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBJUF9OQVRfTUFOSVBfRFNUCiB9OwotCiAjZGVmaW5lIEhPT0syTUFOSVAoaG9va251bSkgKChob29rbnVtKSAhPSBORl9JUF9QT1NUX1JPVVRJTkcgJiYgKGhvb2tudW0pICE9IE5GX0lQX0xPQ0FMX0lOKQotCiAjZGVmaW5lIElQX05BVF9SQU5HRV9NQVBfSVBTIDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIElQX05BVF9SQU5HRV9QUk9UT19TUEVDSUZJRUQgMgotCiBzdHJ1Y3QgaXBfbmF0X3NlcSB7Ci0KICB1X2ludDMyX3QgY29ycmVjdGlvbl9wb3M7Ci0KICBpbnQxNl90IG9mZnNldF9iZWZvcmUsIG9mZnNldF9hZnRlcjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwotCiBzdHJ1Y3QgaXBfbmF0X3JhbmdlCiB7Ci0KICB1bnNpZ25lZCBpbnQgZmxhZ3M7Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdV9pbnQzMl90IG1pbl9pcCwgbWF4X2lwOwotCiAgdW5pb24gaXBfY29ubnRyYWNrX21hbmlwX3Byb3RvIG1pbiwgbWF4OwogfTsKLQogc3RydWN0IGlwX25hdF9tdWx0aV9yYW5nZV9jb21wYXQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB7CiAgdW5zaWduZWQgaW50IHJhbmdlc2l6ZTsKLQogIHN0cnVjdCBpcF9uYXRfcmFuZ2UgcmFuZ2VbMV07CiB9OwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBpcF9uYXRfbXVsdGlfcmFuZ2UgaXBfbmF0X211bHRpX3JhbmdlX2NvbXBhdAogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfbmF0X3J1bGUuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9uYXRfcnVsZS5oCmluZGV4IGI5ZGIwYjAuLjE5MjNiZTcgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9uYXRfcnVsZS5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9uYXRfcnVsZS5oCkBAIC03LDEyICs3LDE5IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfSVBfTkFUX1JVTEVfSAogI2RlZmluZSBfSVBfTkFUX1JVTEVfSAogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0L2lwX2Nvbm50cmFjay5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0L2lwX3RhYmxlcy5oPgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9uYXQuaD4KLQogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfcXVldWUuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9xdWV1ZS5oCmluZGV4IDVkMTdhNTQuLmJmNWEzODcgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9xdWV1ZS5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9xdWV1ZS5oCkBAIC03LDU5ICs3LDY5IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfSVBfUVVFVUVfSAogI2RlZmluZSBfSVBfUVVFVUVfSAotCiAjaW5jbHVkZSA8bmV0L2lmLmg+Ci0KIHR5cGVkZWYgc3RydWN0IGlwcV9wYWNrZXRfbXNnIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgbG9uZyBwYWNrZXRfaWQ7CiAgdW5zaWduZWQgbG9uZyBtYXJrOwogIGxvbmcgdGltZXN0YW1wX3NlYzsKICBsb25nIHRpbWVzdGFtcF91c2VjOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBpbnQgaG9vazsKICBjaGFyIGluZGV2X25hbWVbSUZOQU1TSVpdOwogIGNoYXIgb3V0ZGV2X25hbWVbSUZOQU1TSVpdOwogIHVuc2lnbmVkIHNob3J0IGh3X3Byb3RvY29sOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBzaG9ydCBod190eXBlOwogIHVuc2lnbmVkIGNoYXIgaHdfYWRkcmxlbjsKICB1bnNpZ25lZCBjaGFyIGh3X2FkZHJbOF07CiAgc2l6ZV90IGRhdGFfbGVuOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBjaGFyIHBheWxvYWRbMF07CiB9IGlwcV9wYWNrZXRfbXNnX3Q7Ci0KIHR5cGVkZWYgc3RydWN0IGlwcV9tb2RlX21zZyB7CiAgdW5zaWduZWQgY2hhciB2YWx1ZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc2l6ZV90IHJhbmdlOwogfSBpcHFfbW9kZV9tc2dfdDsKLQogdHlwZWRlZiBzdHJ1Y3QgaXBxX3ZlcmRpY3RfbXNnIHsKICB1bnNpZ25lZCBpbnQgdmFsdWU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGxvbmcgaWQ7CiAgc2l6ZV90IGRhdGFfbGVuOwogIHVuc2lnbmVkIGNoYXIgcGF5bG9hZFswXTsKIH0gaXBxX3ZlcmRpY3RfbXNnX3Q7Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB0eXBlZGVmIHN0cnVjdCBpcHFfcGVlcl9tc2cgewogIHVuaW9uIHsKICBpcHFfdmVyZGljdF9tc2dfdCB2ZXJkaWN0OwogIGlwcV9tb2RlX21zZ190IG1vZGU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIH0gbXNnOwogfSBpcHFfcGVlcl9tc2dfdDsKLQogZW51bSB7CiAgSVBRX0NPUFlfTk9ORSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgSVBRX0NPUFlfTUVUQSwKICBJUFFfQ09QWV9QQUNLRVQKIH07CiAjZGVmaW5lIElQUV9DT1BZX01BWCBJUFFfQ09QWV9QQUNLRVQKLQotI2RlZmluZSBJUFFNX0JBU0UgMHgxMCAgCi0jZGVmaW5lIElQUU1fTU9ERSAoSVBRTV9CQVNFICsgMSkgIAotI2RlZmluZSBJUFFNX1ZFUkRJQ1QgKElQUU1fQkFTRSArIDIpICAgCi0jZGVmaW5lIElQUU1fUEFDS0VUIChJUFFNX0JBU0UgKyAzKSAgCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBJUFFNX0JBU0UgMHgxMAorI2RlZmluZSBJUFFNX01PREUgKElQUU1fQkFTRSArIDEpCisjZGVmaW5lIElQUU1fVkVSRElDVCAoSVBRTV9CQVNFICsgMikKKyNkZWZpbmUgSVBRTV9QQUNLRVQgKElQUU1fQkFTRSArIDMpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJUFFNX01BWCAoSVBRTV9CQVNFICsgNCkKLQogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfdGFibGVzLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfdGFibGVzLmgKaW5kZXggYWE0ODMwNS4uNmY3NTQxNiAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwX3RhYmxlcy5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcF90YWJsZXMuaApAQCAtNywxNzQgKzcsMTUyIEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfSVBUQUJMRVNfSAogI2RlZmluZSBfSVBUQUJMRVNfSAotCiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfaXB2NC5oPgotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci94X3RhYmxlcy5oPgotCiAjZGVmaW5lIElQVF9GVU5DVElPTl9NQVhOQU1FTEVOIFhUX0ZVTkNUSU9OX01BWE5BTUVMRU4KLSNkZWZpbmUgSVBUX1RBQkxFX01BWE5BTUVMRU4gWFRfRlVOQ1RJT05fTUFYTkFNRUxFTgorI2RlZmluZSBJUFRfVEFCTEVfTUFYTkFNRUxFTiBYVF9UQUJMRV9NQVhOQU1FTEVOCiAjZGVmaW5lIGlwdF9tYXRjaCB4dF9tYXRjaAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgaXB0X3RhcmdldCB4dF90YXJnZXQKICNkZWZpbmUgaXB0X3RhYmxlIHh0X3RhYmxlCiAjZGVmaW5lIGlwdF9nZXRfcmV2aXNpb24geHRfZ2V0X3JldmlzaW9uCi0KIHN0cnVjdCBpcHRfaXAgewotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCBpbl9hZGRyIHNyYywgZHN0OwotCiAgc3RydWN0IGluX2FkZHIgc21zaywgZG1zazsKICBjaGFyIGluaWZhY2VbSUZOQU1TSVpdLCBvdXRpZmFjZVtJRk5BTVNJWl07CiAgdW5zaWduZWQgY2hhciBpbmlmYWNlX21hc2tbSUZOQU1TSVpdLCBvdXRpZmFjZV9tYXNrW0lGTkFNU0laXTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1X2ludDE2X3QgcHJvdG87Ci0KICB1X2ludDhfdCBmbGFnczsKLQogIHVfaW50OF90IGludmZsYWdzOwogfTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgaXB0X2VudHJ5X21hdGNoIHh0X2VudHJ5X21hdGNoCiAjZGVmaW5lIGlwdF9lbnRyeV90YXJnZXQgeHRfZW50cnlfdGFyZ2V0CiAjZGVmaW5lIGlwdF9zdGFuZGFyZF90YXJnZXQgeHRfc3RhbmRhcmRfdGFyZ2V0Ci0KICNkZWZpbmUgaXB0X2NvdW50ZXJzIHh0X2NvdW50ZXJzCi0KLSNkZWZpbmUgSVBUX0ZfRlJBRyAweDAxICAKLSNkZWZpbmUgSVBUX0ZfR09UTyAweDAyICAKLSNkZWZpbmUgSVBUX0ZfTUFTSyAweDAzICAKLQotI2RlZmluZSBJUFRfSU5WX1ZJQV9JTiAweDAxICAKLSNkZWZpbmUgSVBUX0lOVl9WSUFfT1VUIDB4MDIgIAotI2RlZmluZSBJUFRfSU5WX1RPUyAweDA0ICAKLSNkZWZpbmUgSVBUX0lOVl9TUkNJUCAweDA4ICAKLSNkZWZpbmUgSVBUX0lOVl9EU1RJUCAweDEwICAKLSNkZWZpbmUgSVBUX0lOVl9GUkFHIDB4MjAgIAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgSVBUX0ZfRlJBRyAweDAxCisjZGVmaW5lIElQVF9GX0dPVE8gMHgwMgorI2RlZmluZSBJUFRfRl9NQVNLIDB4MDMKKyNkZWZpbmUgSVBUX0lOVl9WSUFfSU4gMHgwMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgSVBUX0lOVl9WSUFfT1VUIDB4MDIKKyNkZWZpbmUgSVBUX0lOVl9UT1MgMHgwNAorI2RlZmluZSBJUFRfSU5WX1NSQ0lQIDB4MDgKKyNkZWZpbmUgSVBUX0lOVl9EU1RJUCAweDEwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBJUFRfSU5WX0ZSQUcgMHgyMAogI2RlZmluZSBJUFRfSU5WX1BST1RPIFhUX0lOVl9QUk9UTwotI2RlZmluZSBJUFRfSU5WX01BU0sgMHg3RiAgCi0KKyNkZWZpbmUgSVBUX0lOVl9NQVNLIDB4N0YKIHN0cnVjdCBpcHRfZW50cnkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB7CiAgc3RydWN0IGlwdF9pcCBpcDsKLQogIHVuc2lnbmVkIGludCBuZmNhY2hlOwotCiAgdV9pbnQxNl90IHRhcmdldF9vZmZzZXQ7Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdV9pbnQxNl90IG5leHRfb2Zmc2V0OwotCiAgdW5zaWduZWQgaW50IGNvbWVmcm9tOwotCiAgc3RydWN0IHh0X2NvdW50ZXJzIGNvdW50ZXJzOwotCiAgdW5zaWduZWQgY2hhciBlbGVtc1swXTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwotCiAjZGVmaW5lIElQVF9CQVNFX0NUTCBYVF9CQVNFX0NUTAotCiAjZGVmaW5lIElQVF9TT19TRVRfUkVQTEFDRSBYVF9TT19TRVRfUkVQTEFDRQogI2RlZmluZSBJUFRfU09fU0VUX0FERF9DT1VOVEVSUyBYVF9TT19TRVRfQUREX0NPVU5URVJTCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJUFRfU09fU0VUX01BWCBYVF9TT19TRVRfTUFYCi0KICNkZWZpbmUgSVBUX1NPX0dFVF9JTkZPIFhUX1NPX0dFVF9JTkZPCiAjZGVmaW5lIElQVF9TT19HRVRfRU5UUklFUyBYVF9TT19HRVRfRU5UUklFUwogI2RlZmluZSBJUFRfU09fR0VUX1JFVklTSU9OX01BVENIIFhUX1NPX0dFVF9SRVZJU0lPTl9NQVRDSAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSVBUX1NPX0dFVF9SRVZJU0lPTl9UQVJHRVQgWFRfU09fR0VUX1JFVklTSU9OX1RBUkdFVAogI2RlZmluZSBJUFRfU09fR0VUX01BWCBYVF9TT19HRVRfUkVWSVNJT05fVEFSR0VUCi0KICNkZWZpbmUgSVBUX0NPTlRJTlVFIFhUX0NPTlRJTlVFCiAjZGVmaW5lIElQVF9SRVRVUk4gWFRfUkVUVVJOCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL3h0X3RjcHVkcC5oPgogI2RlZmluZSBpcHRfdWRwIHh0X3VkcAogI2RlZmluZSBpcHRfdGNwIHh0X3RjcAotCiAjZGVmaW5lIElQVF9UQ1BfSU5WX1NSQ1BUIFhUX1RDUF9JTlZfU1JDUFQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIElQVF9UQ1BfSU5WX0RTVFBUIFhUX1RDUF9JTlZfRFNUUFQKICNkZWZpbmUgSVBUX1RDUF9JTlZfRkxBR1MgWFRfVENQX0lOVl9GTEFHUwogI2RlZmluZSBJUFRfVENQX0lOVl9PUFRJT04gWFRfVENQX0lOVl9PUFRJT04KICNkZWZpbmUgSVBUX1RDUF9JTlZfTUFTSyBYVF9UQ1BfSU5WX01BU0sKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSVBUX1VEUF9JTlZfU1JDUFQgWFRfVURQX0lOVl9TUkNQVAogI2RlZmluZSBJUFRfVURQX0lOVl9EU1RQVCBYVF9VRFBfSU5WX0RTVFBUCiAjZGVmaW5lIElQVF9VRFBfSU5WX01BU0sgWFRfVURQX0lOVl9NQVNLCi0KIHN0cnVjdCBpcHRfaWNtcAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHsKICB1X2ludDhfdCB0eXBlOwogIHVfaW50OF90IGNvZGVbMl07CiAgdV9pbnQ4X3QgaW52ZmxhZ3M7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKLQotI2RlZmluZSBJUFRfSUNNUF9JTlYgMHgwMSAgCi0KKyNkZWZpbmUgSVBUX0lDTVBfSU5WIDB4MDEKIHN0cnVjdCBpcHRfZ2V0aW5mbwogewotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGNoYXIgbmFtZVtJUFRfVEFCTEVfTUFYTkFNRUxFTl07Ci0KICB1bnNpZ25lZCBpbnQgdmFsaWRfaG9va3M7Ci0KICB1bnNpZ25lZCBpbnQgaG9va19lbnRyeVtORl9JUF9OVU1IT09LU107Ci0KICB1bnNpZ25lZCBpbnQgdW5kZXJmbG93W05GX0lQX05VTUhPT0tTXTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBpbnQgbnVtX2VudHJpZXM7Ci0KICB1bnNpZ25lZCBpbnQgc2l6ZTsKIH07Ci0KIHN0cnVjdCBpcHRfcmVwbGFjZQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHsKLQogIGNoYXIgbmFtZVtJUFRfVEFCTEVfTUFYTkFNRUxFTl07Ci0KICB1bnNpZ25lZCBpbnQgdmFsaWRfaG9va3M7Ci0KICB1bnNpZ25lZCBpbnQgbnVtX2VudHJpZXM7Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgaW50IHNpemU7Ci0KICB1bnNpZ25lZCBpbnQgaG9va19lbnRyeVtORl9JUF9OVU1IT09LU107Ci0KICB1bnNpZ25lZCBpbnQgdW5kZXJmbG93W05GX0lQX05VTUhPT0tTXTsKLQogIHVuc2lnbmVkIGludCBudW1fY291bnRlcnM7Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IHh0X2NvdW50ZXJzIF9fdXNlciAqY291bnRlcnM7Ci0KICBzdHJ1Y3QgaXB0X2VudHJ5IGVudHJpZXNbMF07CiB9OwotCiAjZGVmaW5lIGlwdF9jb3VudGVyc19pbmZvIHh0X2NvdW50ZXJzX2luZm8KLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBpcHRfZ2V0X2VudHJpZXMKIHsKLQogIGNoYXIgbmFtZVtJUFRfVEFCTEVfTUFYTkFNRUxFTl07Ci0KICB1bnNpZ25lZCBpbnQgc2l6ZTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgaXB0X2VudHJ5IGVudHJ5dGFibGVbMF07CiB9OwotCiAjZGVmaW5lIElQVF9TVEFOREFSRF9UQVJHRVQgWFRfU1RBTkRBUkRfVEFSR0VUCi0KICNkZWZpbmUgSVBUX0VSUk9SX1RBUkdFVCBYVF9FUlJPUl9UQVJHRVQKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0YXRpYyBfX2lubGluZV9fIHN0cnVjdCBpcHRfZW50cnlfdGFyZ2V0ICoKIGlwdF9nZXRfdGFyZ2V0KHN0cnVjdCBpcHRfZW50cnkgKmUpCiB7CiAgcmV0dXJuICh2b2lkICopZSArIGUtPnRhcmdldF9vZmZzZXQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfQotCiAjZGVmaW5lIElQVF9NQVRDSF9JVEVSQVRFKGUsIGZuLCBhcmdzLi4uKSAgKHsgICB1bnNpZ25lZCBpbnQgX19pOyAgIGludCBfX3JldCA9IDA7ICAgc3RydWN0IGlwdF9lbnRyeV9tYXRjaCAqX19tYXRjaDsgICAgIGZvciAoX19pID0gc2l6ZW9mKHN0cnVjdCBpcHRfZW50cnkpOyAgIF9faSA8IChlKS0+dGFyZ2V0X29mZnNldDsgICBfX2kgKz0gX19tYXRjaC0+dS5tYXRjaF9zaXplKSB7ICAgX19tYXRjaCA9ICh2b2lkICopKGUpICsgX19pOyAgICAgX19yZXQgPSBmbihfX21hdGNoICwgIyMgYXJncyk7ICAgaWYgKF9fcmV0ICE9IDApICAgYnJlYWs7ICAgfSAgIF9fcmV0OyAgfSkKLQogI2RlZmluZSBJUFRfRU5UUllfSVRFUkFURShlbnRyaWVzLCBzaXplLCBmbiwgYXJncy4uLikgICh7ICAgdW5zaWduZWQgaW50IF9faTsgICBpbnQgX19yZXQgPSAwOyAgIHN0cnVjdCBpcHRfZW50cnkgKl9fZW50cnk7ICAgICBmb3IgKF9faSA9IDA7IF9faSA8IChzaXplKTsgX19pICs9IF9fZW50cnktPm5leHRfb2Zmc2V0KSB7ICAgX19lbnRyeSA9ICh2b2lkICopKGVudHJpZXMpICsgX19pOyAgICAgX19yZXQgPSBmbihfX2VudHJ5ICwgIyMgYXJncyk7ICAgaWYgKF9fcmV0ICE9IDApICAgYnJlYWs7ICAgfSAgIF9fcmV0OyAgfSkKLQogI2VuZGlmCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9DTEFTU0lGWS5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9DTEFTU0lGWS5oCmluZGV4IGE3MzhlZGQuLjY3MGE1OTcgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfQ0xBU1NJRlkuaAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X0NMQVNTSUZZLmgKQEAgLTcsMTIgKzcsMTggQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9JUFRfQ0xBU1NJRllfSAogI2RlZmluZSBfSVBUX0NMQVNTSUZZX0gKLQogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci94dF9DTEFTU0lGWS5oPgogI2RlZmluZSBpcHRfY2xhc3NpZnlfdGFyZ2V0X2luZm8geHRfY2xhc3NpZnlfdGFyZ2V0X2luZm8KLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9EU0NQLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X0RTQ1AuaAppbmRleCAwMjcxZmIyLi41MTViYTZiIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X0RTQ1AuaAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X0RTQ1AuaApAQCAtNywxNCArNywyMCBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX0lQVF9EU0NQX1RBUkdFVF9ICiAjZGVmaW5lIF9JUFRfRFNDUF9UQVJHRVRfSAogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9kc2NwLmg+Ci0KIHN0cnVjdCBpcHRfRFNDUF9pbmZvIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdV9pbnQ4X3QgZHNjcDsKIH07Ci0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9FQ04uaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfRUNOLmgKaW5kZXggNjdjMTZmZS4uMmEzZDY1MiAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9FQ04uaAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X0VDTi5oCkBAIC03LDI4ICs3LDM0IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfSVBUX0VDTl9UQVJHRVRfSAogI2RlZmluZSBfSVBUX0VDTl9UQVJHRVRfSAogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9EU0NQLmg+Ci0KICNkZWZpbmUgSVBUX0VDTl9JUF9NQVNLICh+SVBUX0RTQ1BfTUFTSykKLQotI2RlZmluZSBJUFRfRUNOX09QX1NFVF9JUCAweDAxICAKLSNkZWZpbmUgSVBUX0VDTl9PUF9TRVRfRUNFIDB4MTAgIAotI2RlZmluZSBJUFRfRUNOX09QX1NFVF9DV1IgMHgyMCAgCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIElQVF9FQ05fT1BfU0VUX0lQIDB4MDEKKyNkZWZpbmUgSVBUX0VDTl9PUF9TRVRfRUNFIDB4MTAKKyNkZWZpbmUgSVBUX0VDTl9PUF9TRVRfQ1dSIDB4MjAKICNkZWZpbmUgSVBUX0VDTl9PUF9NQVNLIDB4Y2UKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBpcHRfRUNOX2luZm8gewogIHVfaW50OF90IG9wZXJhdGlvbjsKICB1X2ludDhfdCBpcF9lY3Q7CiAgdW5pb24geworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgewogIHVfaW50OF90IGVjZToxLCBjd3I6MTsKICB9IHRjcDsKICB9IHByb3RvOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07Ci0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9MT0cuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfTE9HLmgKaW5kZXggZGQ2ZmQxYi4uNjY1Mzg2MyAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9MT0cuaAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X0xPRy5oCkBAIC03LDIyICs3LDI5IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfSVBUX0xPR19ICiAjZGVmaW5lIF9JUFRfTE9HX0gKLQotI2RlZmluZSBJUFRfTE9HX1RDUFNFUSAweDAxICAKLSNkZWZpbmUgSVBUX0xPR19UQ1BPUFQgMHgwMiAgCi0jZGVmaW5lIElQVF9MT0dfSVBPUFQgMHgwNCAgCi0jZGVmaW5lIElQVF9MT0dfVUlEIDB4MDggIAotI2RlZmluZSBJUFRfTE9HX05GTE9HIDB4MTAgIAorI2RlZmluZSBJUFRfTE9HX1RDUFNFUSAweDAxCisjZGVmaW5lIElQVF9MT0dfVENQT1BUIDB4MDIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIElQVF9MT0dfSVBPUFQgMHgwNAorI2RlZmluZSBJUFRfTE9HX1VJRCAweDA4CisjZGVmaW5lIElQVF9MT0dfTkZMT0cgMHgxMAogI2RlZmluZSBJUFRfTE9HX01BU0sgMHgxZgotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IGlwdF9sb2dfaW5mbyB7CiAgdW5zaWduZWQgY2hhciBsZXZlbDsKICB1bnNpZ25lZCBjaGFyIGxvZ2ZsYWdzOwogIGNoYXIgcHJlZml4WzMwXTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfTkZRVUVVRS5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9ORlFVRVVFLmgKaW5kZXggMjdhYzRhNS4uNzI4M2FiNyAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9ORlFVRVVFLmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9ORlFVRVVFLmgKQEAgLTcsMTMgKzcsMTggQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9JUFRfTkZRX1RBUkdFVF9ICiAjZGVmaW5lIF9JUFRfTkZRX1RBUkdFVF9ICi0KICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIveHRfTkZRVUVVRS5oPgotCiAjZGVmaW5lIGlwdF9ORlFfaW5mbyB4dF9ORlFfaW5mbwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X1JFSkVDVC5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9SRUpFQ1QuaAppbmRleCBkM2MzOTY1Li5kMTMzYjcxIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X1JFSkVDVC5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfUkVKRUNULmgKQEAgLTcsMjUgKzcsMzMgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9JUFRfUkVKRUNUX0gKICNkZWZpbmUgX0lQVF9SRUpFQ1RfSAotCiBlbnVtIGlwdF9yZWplY3Rfd2l0aCB7CiAgSVBUX0lDTVBfTkVUX1VOUkVBQ0hBQkxFLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBJUFRfSUNNUF9IT1NUX1VOUkVBQ0hBQkxFLAogIElQVF9JQ01QX1BST1RfVU5SRUFDSEFCTEUsCiAgSVBUX0lDTVBfUE9SVF9VTlJFQUNIQUJMRSwKICBJUFRfSUNNUF9FQ0hPUkVQTFksCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIElQVF9JQ01QX05FVF9QUk9ISUJJVEVELAogIElQVF9JQ01QX0hPU1RfUFJPSElCSVRFRCwKICBJUFRfVENQX1JFU0VULAogIElQVF9JQ01QX0FETUlOX1BST0hJQklURUQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwotCiBzdHJ1Y3QgaXB0X3JlamVjdF9pbmZvIHsKICBlbnVtIGlwdF9yZWplY3Rfd2l0aCB3aXRoOwogfTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9UQ1BNU1MuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfVENQTVNTLmgKaW5kZXggZTkyNGYzNy4uMTAyZGVkNSAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9UQ1BNU1MuaAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X1RDUE1TUy5oCkBAIC03LDE1ICs3LDIwIEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfSVBUX1RDUE1TU19ICiAjZGVmaW5lIF9JUFRfVENQTVNTX0gKLQogc3RydWN0IGlwdF90Y3Btc3NfaW5mbyB7CiAgdV9pbnQxNl90IG1zczsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwotCiAjZGVmaW5lIElQVF9UQ1BNU1NfQ0xBTVBfUE1UVSAweGZmZmYKLQogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X1RPUy5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9UT1MuaAppbmRleCAxY2MyMTE2Li5kMDg0MmZhIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X1RPUy5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfVE9TLmgKQEAgLTcsMTcgKzcsMjMgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9JUFRfVE9TX0hfdGFyZ2V0CiAjZGVmaW5lIF9JUFRfVE9TX0hfdGFyZ2V0Ci0KICNpZm5kZWYgSVBUT1NfTk9STUFMU1ZDCiAjZGVmaW5lIElQVE9TX05PUk1BTFNWQyAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2VuZGlmCi0KIHN0cnVjdCBpcHRfdG9zX3RhcmdldF9pbmZvIHsKICB1X2ludDhfdCB0b3M7CiB9OwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X1RUTC5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9UVEwuaAppbmRleCBmOWU5OGFmLi42OWY1ZDg2IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X1RUTC5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfVFRMLmgKQEAgLTcsMjIgKzcsMjggQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9JUFRfVFRMX0gKICNkZWZpbmUgX0lQVF9UVExfSAotCiBlbnVtIHsKICBJUFRfVFRMX1NFVCA9IDAsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIElQVF9UVExfSU5DLAogIElQVF9UVExfREVDCiB9OwotCiAjZGVmaW5lIElQVF9UVExfTUFYTU9ERSBJUFRfVFRMX0RFQwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IGlwdF9UVExfaW5mbyB7CiAgdV9pbnQ4X3QgbW9kZTsKICB1X2ludDhfdCB0dGw7CiB9OwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X1VMT0cuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfVUxPRy5oCmluZGV4IDk1MTFjYjguLjhlOGY1NzIgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfVUxPRy5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfVUxPRy5oCkBAIC03LDQyICs3LDQ5IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfSVBUX1VMT0dfSAogI2RlZmluZSBfSVBUX1VMT0dfSAotCiAjaWZuZGVmIE5FVExJTktfTkZMT0cKICNkZWZpbmUgTkVUTElOS19ORkxPRyA1CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2VuZGlmCi0KICNkZWZpbmUgVUxPR19ERUZBVUxUX05MR1JPVVAgMQogI2RlZmluZSBVTE9HX0RFRkFVTFRfUVRIUkVTSE9MRCAxCi0KICNkZWZpbmUgVUxPR19NQUNfTEVOIDgwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBVTE9HX1BSRUZJWF9MRU4gMzIKLQogI2RlZmluZSBVTE9HX01BWF9RTEVOIDUwCi0KIHN0cnVjdCBpcHRfdWxvZ19pbmZvIHsKICB1bnNpZ25lZCBpbnQgbmxfZ3JvdXA7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHNpemVfdCBjb3B5X3JhbmdlOwogIHNpemVfdCBxdGhyZXNob2xkOwogIGNoYXIgcHJlZml4W1VMT0dfUFJFRklYX0xFTl07CiB9OwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogdHlwZWRlZiBzdHJ1Y3QgdWxvZ19wYWNrZXRfbXNnIHsKICB1bnNpZ25lZCBsb25nIG1hcms7CiAgbG9uZyB0aW1lc3RhbXBfc2VjOwogIGxvbmcgdGltZXN0YW1wX3VzZWM7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGludCBob29rOwogIGNoYXIgaW5kZXZfbmFtZVtJRk5BTVNJWl07CiAgY2hhciBvdXRkZXZfbmFtZVtJRk5BTVNJWl07CiAgc2l6ZV90IGRhdGFfbGVuOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBjaGFyIHByZWZpeFtVTE9HX1BSRUZJWF9MRU5dOwogIHVuc2lnbmVkIGNoYXIgbWFjX2xlbjsKICB1bnNpZ25lZCBjaGFyIG1hY1tVTE9HX01BQ19MRU5dOwogIHVuc2lnbmVkIGNoYXIgcGF5bG9hZFswXTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9IHVsb2dfcGFja2V0X21zZ190OwotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfYWRkcnR5cGUuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfYWRkcnR5cGUuaAppbmRleCA1MjAzYjMyLi4yNzYwYWZjIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X2FkZHJ0eXBlLmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9hZGRydHlwZS5oCkBAIC03LDE2ICs3LDIzIEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfSVBUX0FERFJUWVBFX0gKICNkZWZpbmUgX0lQVF9BRERSVFlQRV9ICi0KIHN0cnVjdCBpcHRfYWRkcnR5cGVfaW5mbyB7CiAgdV9pbnQxNl90IHNvdXJjZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdV9pbnQxNl90IGRlc3Q7CiAgdV9pbnQzMl90IGludmVydF9zb3VyY2U7CiAgdV9pbnQzMl90IGludmVydF9kZXN0OwogfTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9haC5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9haC5oCmluZGV4IDExOTgzZTIuLmY2YTgxYjggMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfYWguaAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X2FoLmgKQEAgLTcsMTggKzcsMjQgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9JUFRfQUhfSAogI2RlZmluZSBfSVBUX0FIX0gKLQogc3RydWN0IGlwdF9haAogeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1X2ludDMyX3Qgc3Bpc1syXTsKICB1X2ludDhfdCBpbnZmbGFnczsKIH07Ci0KLSNkZWZpbmUgSVBUX0FIX0lOVl9TUEkgMHgwMSAgCi0jZGVmaW5lIElQVF9BSF9JTlZfTUFTSyAweDAxICAKLQorI2RlZmluZSBJUFRfQUhfSU5WX1NQSSAweDAxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBJUFRfQUhfSU5WX01BU0sgMHgwMQogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X2NvbW1lbnQuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfY29tbWVudC5oCmluZGV4IGRiZDc1MDcuLjlkZDBhZWQgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfY29tbWVudC5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfY29tbWVudC5oCkBAIC03LDE1ICs3LDE5IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfSVBUX0NPTU1FTlRfSAogI2RlZmluZSBfSVBUX0NPTU1FTlRfSAotCiAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL3h0X2NvbW1lbnQuaD4KLQogI2RlZmluZSBJUFRfTUFYX0NPTU1FTlRfTEVOIFhUX01BWF9DT01NRU5UX0xFTgotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBpcHRfY29tbWVudF9pbmZvIHh0X2NvbW1lbnRfaW5mbwotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfY29ubmJ5dGVzLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X2Nvbm5ieXRlcy5oCmluZGV4IDhhZTE5YzUuLmUwMTRhMjMgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfY29ubmJ5dGVzLmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9jb25uYnl0ZXMuaApAQCAtNywyMyArNywyOCBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX0lQVF9DT05OQllURVNfSAogI2RlZmluZSBfSVBUX0NPTk5CWVRFU19ICi0KICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIveHRfY29ubmJ5dGVzLmg+CiAjZGVmaW5lIGlwdF9jb25uYnl0ZXNfd2hhdCB4dF9jb25uYnl0ZXNfd2hhdAotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJUFRfQ09OTkJZVEVTX1BLVFMgWFRfQ09OTkJZVEVTX1BLVFMKICNkZWZpbmUgSVBUX0NPTk5CWVRFU19CWVRFUyBYVF9DT05OQllURVNfQllURVMKICNkZWZpbmUgSVBUX0NPTk5CWVRFU19BVkdQS1QgWFRfQ09OTkJZVEVTX0FWR1BLVAotCiAjZGVmaW5lIGlwdF9jb25uYnl0ZXNfZGlyZWN0aW9uIHh0X2Nvbm5ieXRlc19kaXJlY3Rpb24KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIElQVF9DT05OQllURVNfRElSX09SSUdJTkFMIFhUX0NPTk5CWVRFU19ESVJfT1JJR0lOQUwKICNkZWZpbmUgSVBUX0NPTk5CWVRFU19ESVJfUkVQTFkgWFRfQ09OTkJZVEVTX0RJUl9SRVBMWQogI2RlZmluZSBJUFRfQ09OTkJZVEVTX0RJUl9CT1RIIFhUX0NPTk5CWVRFU19ESVJfQk9USAotCiAjZGVmaW5lIGlwdF9jb25uYnl0ZXNfaW5mbyB4dF9jb25uYnl0ZXNfaW5mbwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X2RjY3AuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfZGNjcC5oCmluZGV4IGMxMjEyYzkuLmQ2MTQ1MjEgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfZGNjcC5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfZGNjcC5oCkBAIC03LDIwICs3LDI0IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfSVBUX0RDQ1BfSF8KICNkZWZpbmUgX0lQVF9EQ0NQX0hfCi0KICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIveHRfZGNjcC5oPgogI2RlZmluZSBJUFRfRENDUF9TUkNfUE9SVFMgWFRfRENDUF9TUkNfUE9SVFMKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIElQVF9EQ0NQX0RFU1RfUE9SVFMgWFRfRENDUF9ERVNUX1BPUlRTCiAjZGVmaW5lIElQVF9EQ0NQX1RZUEUgWFRfRENDUF9UWVBFCiAjZGVmaW5lIElQVF9EQ0NQX09QVElPTiBYVF9EQ0NQX09QVElPTgotCiAjZGVmaW5lIElQVF9EQ0NQX1ZBTElEX0ZMQUdTIFhUX0RDQ1BfVkFMSURfRkxBR1MKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgaXB0X2RjY3BfaW5mbyB4dF9kY2NwX2luZm8KLQogI2VuZGlmCi0KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfZHNjcF8uaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfZHNjcF8uaAppbmRleCBhYmE4ODYxLi4wYWE2Zjg3IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X2RzY3BfLmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9kc2NwXy5oCkBAIC03LDE4ICs3LDI0IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfSVBUX0RTQ1BfSAogI2RlZmluZSBfSVBUX0RTQ1BfSAotCi0jZGVmaW5lIElQVF9EU0NQX01BU0sgMHhmYyAgCisjZGVmaW5lIElQVF9EU0NQX01BU0sgMHhmYwogI2RlZmluZSBJUFRfRFNDUF9TSElGVCAyCi0jZGVmaW5lIElQVF9EU0NQX01BWCAweDNmICAKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgSVBUX0RTQ1BfTUFYIDB4M2YKIHN0cnVjdCBpcHRfZHNjcF9pbmZvIHsKICB1X2ludDhfdCBkc2NwOwogIHVfaW50OF90IGludmVydDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfZXNwLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X2VzcC5oCmluZGV4IDQ5NDdlN2UuLjM4YmZmZmEgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfZXNwLmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9lc3AuaApAQCAtNywxNSArNywyMCBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX0lQVF9FU1BfSAogI2RlZmluZSBfSVBUX0VTUF9ICi0KICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIveHRfZXNwLmg+Ci0KICNkZWZpbmUgaXB0X2VzcCB4dF9lc3AKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIElQVF9FU1BfSU5WX1NQSSBYVF9FU1BfSU5WX1NQSQogI2RlZmluZSBJUFRfRVNQX0lOVl9NQVNLIFhUX0VTUF9JTlZfTUFTSwotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfaGFzaGxpbWl0LmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X2hhc2hsaW1pdC5oCmluZGV4IGFkYzFmNDEuLjM5YTJjMDggMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfaGFzaGxpbWl0LmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9oYXNobGltaXQuaApAQCAtNywzOSArNyw0NSBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX0lQVF9IQVNITElNSVRfSAogI2RlZmluZSBfSVBUX0hBU0hMSU1JVF9ICi0KICNkZWZpbmUgSVBUX0hBU0hMSU1JVF9TQ0FMRSAxMDAwMAotCiBzdHJ1Y3QgaXB0X2hhc2hsaW1pdF9odGFibGU7Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIElQVF9IQVNITElNSVRfSEFTSF9ESVAgMHgwMDAxCiAjZGVmaW5lIElQVF9IQVNITElNSVRfSEFTSF9EUFQgMHgwMDAyCiAjZGVmaW5lIElQVF9IQVNITElNSVRfSEFTSF9TSVAgMHgwMDA0CiAjZGVmaW5lIElQVF9IQVNITElNSVRfSEFTSF9TUFQgMHgwMDA4Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgaGFzaGxpbWl0X2NmZyB7CiAgdV9pbnQzMl90IG1vZGU7CiAgdV9pbnQzMl90IGF2ZzsKICB1X2ludDMyX3QgYnVyc3Q7Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdV9pbnQzMl90IHNpemU7CiAgdV9pbnQzMl90IG1heDsKICB1X2ludDMyX3QgZ2NfaW50ZXJ2YWw7CiAgdV9pbnQzMl90IGV4cGlyZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwotCiBzdHJ1Y3QgaXB0X2hhc2hsaW1pdF9pbmZvIHsKICBjaGFyIG5hbWUgW0lGTkFNU0laXTsKICBzdHJ1Y3QgaGFzaGxpbWl0X2NmZyBjZmc7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCBpcHRfaGFzaGxpbWl0X2h0YWJsZSAqaGluZm87Ci0KICB1bmlvbiB7CiAgdm9pZCAqcHRyOwogIHN0cnVjdCBpcHRfaGFzaGxpbWl0X2luZm8gKm1hc3RlcjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgfSB1OwogfTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9oZWxwZXIuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfaGVscGVyLmgKaW5kZXggNTc2YWRkOS4uNzkxNTYwOSAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9oZWxwZXIuaAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X2hlbHBlci5oCkBAIC03LDEyICs3LDE4IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfSVBUX0hFTFBFUl9ICiAjZGVmaW5lIF9JUFRfSEVMUEVSX0gKLQogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci94dF9oZWxwZXIuaD4KICNkZWZpbmUgaXB0X2hlbHBlcl9pbmZvIHh0X2hlbHBlcl9pbmZvCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfaXByYW5nZS5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9pcHJhbmdlLmgKaW5kZXggYjRkZDYwMy4uYmQyYjc1NSAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9pcHJhbmdlLmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9pcHJhbmdlLmgKQEAgLTcsMjcgKzcsMzIgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9JUFRfSVBSQU5HRV9ICiAjZGVmaW5lIF9JUFRfSVBSQU5HRV9ICi0KLSNkZWZpbmUgSVBSQU5HRV9TUkMgMHgwMSAgCi0jZGVmaW5lIElQUkFOR0VfRFNUIDB4MDIgIAotI2RlZmluZSBJUFJBTkdFX1NSQ19JTlYgMHgxMCAgCi0jZGVmaW5lIElQUkFOR0VfRFNUX0lOViAweDIwICAKLQorI2RlZmluZSBJUFJBTkdFX1NSQyAweDAxCisjZGVmaW5lIElQUkFOR0VfRFNUIDB4MDIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIElQUkFOR0VfU1JDX0lOViAweDEwCisjZGVmaW5lIElQUkFOR0VfRFNUX0lOViAweDIwCiBzdHJ1Y3QgaXB0X2lwcmFuZ2UgewotCiAgdV9pbnQzMl90IG1pbl9pcCwgbWF4X2lwOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07Ci0KIHN0cnVjdCBpcHRfaXByYW5nZV9pbmZvCiB7CiAgc3RydWN0IGlwdF9pcHJhbmdlIHNyYzsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IGlwdF9pcHJhbmdlIGRzdDsKLQogIHVfaW50OF90IGZsYWdzOwogfTsKLQogI2VuZGlmCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9sZW5ndGguaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfbGVuZ3RoLmgKaW5kZXggOTYxMDg1OS4uMzczOTYzNyAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9sZW5ndGguaAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X2xlbmd0aC5oCkBAIC03LDEyICs3LDE4IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfSVBUX0xFTkdUSF9ICiAjZGVmaW5lIF9JUFRfTEVOR1RIX0gKLQogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci94dF9sZW5ndGguaD4KICNkZWZpbmUgaXB0X2xlbmd0aF9pbmZvIHh0X2xlbmd0aF9pbmZvCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfbWFjLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X21hYy5oCmluZGV4IDg5Mzc4YTMuLjhjOGY1ZDAgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfbWFjLmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9tYWMuaApAQCAtNywxMiArNywxOCBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX0lQVF9NQUNfSAogI2RlZmluZSBfSVBUX01BQ19ICi0KICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIveHRfbWFjLmg+CiAjZGVmaW5lIGlwdF9tYWNfaW5mbyB4dF9tYWNfaW5mbwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X293bmVyLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X293bmVyLmgKaW5kZXggOGI3NDJiMS4uMTA4OTcxNiAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9vd25lci5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfb3duZXIuaApAQCAtNywyNCArNywzMiBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX0lQVF9PV05FUl9ICiAjZGVmaW5lIF9JUFRfT1dORVJfSAotCiAjZGVmaW5lIElQVF9PV05FUl9VSUQgMHgwMQogI2RlZmluZSBJUFRfT1dORVJfR0lEIDB4MDIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIElQVF9PV05FUl9QSUQgMHgwNAogI2RlZmluZSBJUFRfT1dORVJfU0lEIDB4MDgKICNkZWZpbmUgSVBUX09XTkVSX0NPTU0gMHgxMAotCiBzdHJ1Y3QgaXB0X293bmVyX2luZm8geworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1aWRfdCB1aWQ7CiAgZ2lkX3QgZ2lkOwogIHBpZF90IHBpZDsKICBwaWRfdCBzaWQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGNoYXIgY29tbVsxNl07CiAgdV9pbnQ4X3QgbWF0Y2gsIGludmVydDsKIH07Ci0KICNlbmRpZgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfcGh5c2Rldi5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9waHlzZGV2LmgKaW5kZXggNzkxY2YwMi4uZDAxMDg2OCAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9waHlzZGV2LmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9waHlzZGV2LmgKQEAgLTcsMjAgKzcsMjUgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9JUFRfUEhZU0RFVl9ICiAjZGVmaW5lIF9JUFRfUEhZU0RFVl9ICi0KICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIveHRfcGh5c2Rldi5oPgotCiAjZGVmaW5lIElQVF9QSFlTREVWX09QX0lOIFhUX1BIWVNERVZfT1BfSU4KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIElQVF9QSFlTREVWX09QX09VVCBYVF9QSFlTREVWX09QX09VVAogI2RlZmluZSBJUFRfUEhZU0RFVl9PUF9CUklER0VEIFhUX1BIWVNERVZfT1BfQlJJREdFRAogI2RlZmluZSBJUFRfUEhZU0RFVl9PUF9JU0lOIFhUX1BIWVNERVZfT1BfSVNJTgogI2RlZmluZSBJUFRfUEhZU0RFVl9PUF9JU09VVCBYVF9QSFlTREVWX09QX0lTT1VUCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJUFRfUEhZU0RFVl9PUF9NQVNLIFhUX1BIWVNERVZfT1BfTUFTSwotCiAjZGVmaW5lIGlwdF9waHlzZGV2X2luZm8geHRfcGh5c2Rldl9pbmZvCi0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9wa3R0eXBlLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X3BrdHR5cGUuaAppbmRleCBmYmIyMGIxLi5kNTllNzc4IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X3BrdHR5cGUuaAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X3BrdHR5cGUuaApAQCAtNywxMiArNywxOCBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX0lQVF9QS1RUWVBFX0gKICNkZWZpbmUgX0lQVF9QS1RUWVBFX0gKLQogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci94dF9wa3R0eXBlLmg+CiAjZGVmaW5lIGlwdF9wa3R0eXBlX2luZm8geHRfcGt0dHlwZV9pbmZvCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfcmVhbG0uaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfcmVhbG0uaAppbmRleCA5YjgwZmFhLi5mMGYwMGViIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X3JlYWxtLmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9yZWFsbS5oCkBAIC03LDEyICs3LDE4IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfSVBUX1JFQUxNX0gKICNkZWZpbmUgX0lQVF9SRUFMTV9ICi0KICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIveHRfcmVhbG0uaD4KICNkZWZpbmUgaXB0X3JlYWxtX2luZm8geHRfcmVhbG1faW5mbwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X3JlY2VudC5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9yZWNlbnQuaAppbmRleCA0NTE3MmJkLi5jMjk1NzdhIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X3JlY2VudC5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfcmVjZW50LmgKQEAgLTcsMzIgKzcsMzggQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9JUFRfUkVDRU5UX0gKICNkZWZpbmUgX0lQVF9SRUNFTlRfSAotCiAjZGVmaW5lIFJFQ0VOVF9OQU1FICJpcHRfcmVjZW50IgogI2RlZmluZSBSRUNFTlRfVkVSICJ2MC4zLjEiCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIElQVF9SRUNFTlRfQ0hFQ0sgMQogI2RlZmluZSBJUFRfUkVDRU5UX1NFVCAyCiAjZGVmaW5lIElQVF9SRUNFTlRfVVBEQVRFIDQKICNkZWZpbmUgSVBUX1JFQ0VOVF9SRU1PVkUgOAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSVBUX1JFQ0VOVF9UVEwgMTYKLQogI2RlZmluZSBJUFRfUkVDRU5UX1NPVVJDRSAwCiAjZGVmaW5lIElQVF9SRUNFTlRfREVTVCAxCi0KICNkZWZpbmUgSVBUX1JFQ0VOVF9OQU1FX0xFTiAyMDAKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBpcHRfcmVjZW50X2luZm8gewogIHVfaW50MzJfdCBzZWNvbmRzOwogIHVfaW50MzJfdCBoaXRfY291bnQ7CiAgdV9pbnQ4X3QgY2hlY2tfc2V0OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1X2ludDhfdCBpbnZlcnQ7CiAgY2hhciBuYW1lW0lQVF9SRUNFTlRfTkFNRV9MRU5dOwogIHVfaW50OF90IHNpZGU7CiB9OwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X3NjdHAuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfc2N0cC5oCmluZGV4IDIwZjMwMWYuLjhhMDI4MmIgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfc2N0cC5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfc2N0cC5oCkBAIC03LDYwICs3LDU1IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfSVBUX1NDVFBfSF8KICNkZWZpbmUgX0lQVF9TQ1RQX0hfCi0KICNkZWZpbmUgSVBUX1NDVFBfU1JDX1BPUlRTIDB4MDEKICNkZWZpbmUgSVBUX1NDVFBfREVTVF9QT1JUUyAweDAyCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJUFRfU0NUUF9DSFVOS19UWVBFUyAweDA0Ci0KICNkZWZpbmUgSVBUX1NDVFBfVkFMSURfRkxBR1MgMHgwNwotCiBzdHJ1Y3QgaXB0X3NjdHBfZmxhZ19pbmZvIHsKICB1X2ludDhfdCBjaHVua3R5cGU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVfaW50OF90IGZsYWc7CiAgdV9pbnQ4X3QgZmxhZ19tYXNrOwogfTsKLQogI2RlZmluZSBJUFRfTlVNX1NDVFBfRkxBR1MgNAotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IGlwdF9zY3RwX2luZm8gewogIHVfaW50MTZfdCBkcHRzWzJdOwogIHVfaW50MTZfdCBzcHRzWzJdOwotCiAgdV9pbnQzMl90IGNodW5rbWFwWzI1NiAvIHNpemVvZiAodV9pbnQzMl90KV07Ci0KLSNkZWZpbmUgU0NUUF9DSFVOS19NQVRDSF9BTlkgMHgwMSAgCi0jZGVmaW5lIFNDVFBfQ0hVTktfTUFUQ0hfQUxMIDB4MDIgIAotI2RlZmluZSBTQ1RQX0NIVU5LX01BVENIX09OTFkgMHgwNCAgCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFNDVFBfQ0hVTktfTUFUQ0hfQU5ZIDB4MDEKKyNkZWZpbmUgU0NUUF9DSFVOS19NQVRDSF9BTEwgMHgwMgorI2RlZmluZSBTQ1RQX0NIVU5LX01BVENIX09OTFkgMHgwNAogIHVfaW50MzJfdCBjaHVua19tYXRjaF90eXBlOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgaXB0X3NjdHBfZmxhZ19pbmZvIGZsYWdfaW5mb1tJUFRfTlVNX1NDVFBfRkxBR1NdOwogIGludCBmbGFnX2NvdW50OwotCiAgdV9pbnQzMl90IGZsYWdzOwogIHVfaW50MzJfdCBpbnZmbGFnczsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwotCiAjZGVmaW5lIGJ5dGVzKHR5cGUpIChzaXplb2YodHlwZSkgKiA4KQotCiAjZGVmaW5lIFNDVFBfQ0hVTktNQVBfU0VUKGNodW5rbWFwLCB0eXBlKSAgIGRvIHsgICBjaHVua21hcFt0eXBlIC8gYnl0ZXModV9pbnQzMl90KV0gfD0gICAxIDw8ICh0eXBlICUgYnl0ZXModV9pbnQzMl90KSk7ICAgfSB3aGlsZSAoMCkKLQogI2RlZmluZSBTQ1RQX0NIVU5LTUFQX0NMRUFSKGNodW5rbWFwLCB0eXBlKSAgIGRvIHsgICBjaHVua21hcFt0eXBlIC8gYnl0ZXModV9pbnQzMl90KV0gJj0gICB+KDEgPDwgKHR5cGUgJSBieXRlcyh1X2ludDMyX3QpKSk7ICAgfSB3aGlsZSAoMCkKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU0NUUF9DSFVOS01BUF9JU19TRVQoY2h1bmttYXAsIHR5cGUpICAoeyAgIChjaHVua21hcFt0eXBlIC8gYnl0ZXMgKHVfaW50MzJfdCldICYgICAoMSA8PCAodHlwZSAlIGJ5dGVzICh1X2ludDMyX3QpKSkpID8gMTogMDsgIH0pCi0KICNkZWZpbmUgU0NUUF9DSFVOS01BUF9SRVNFVChjaHVua21hcCkgICBkbyB7ICAgaW50IGk7ICAgZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoY2h1bmttYXApOyBpKyspICAgY2h1bmttYXBbaV0gPSAwOyAgIH0gd2hpbGUgKDApCi0KICNkZWZpbmUgU0NUUF9DSFVOS01BUF9TRVRfQUxMKGNodW5rbWFwKSAgIGRvIHsgICBpbnQgaTsgICBmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjaHVua21hcCk7IGkrKykgICBjaHVua21hcFtpXSA9IH4wOyAgIH0gd2hpbGUgKDApCi0KICNkZWZpbmUgU0NUUF9DSFVOS01BUF9DT1BZKGRlc3RtYXAsIHNyY21hcCkgICBkbyB7ICAgaW50IGk7ICAgZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoY2h1bmttYXApOyBpKyspICAgZGVzdG1hcFtpXSA9IHNyY21hcFtpXTsgICB9IHdoaWxlICgwKQotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTQ1RQX0NIVU5LTUFQX0lTX0NMRUFSKGNodW5rbWFwKSAgKHsgICBpbnQgaTsgICBpbnQgZmxhZyA9IDE7ICAgZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoY2h1bmttYXApOyBpKyspIHsgICBpZiAoY2h1bmttYXBbaV0pIHsgICBmbGFnID0gMDsgICBicmVhazsgICB9ICAgfSAgIGZsYWc7ICB9KQotCiAjZGVmaW5lIFNDVFBfQ0hVTktNQVBfSVNfQUxMX1NFVChjaHVua21hcCkgICh7ICAgaW50IGk7ICAgaW50IGZsYWcgPSAxOyAgIGZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGNodW5rbWFwKTsgaSsrKSB7ICAgaWYgKGNodW5rbWFwW2ldICE9IH4wKSB7ICAgZmxhZyA9IDA7ICAgYnJlYWs7ICAgfSAgIH0gICBmbGFnOyAgfSkKLQogI2VuZGlmCi0KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfc3RhdGUuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfc3RhdGUuaAppbmRleCBiZDUxOTkwLi4zOTA5ZGVmIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X3N0YXRlLmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9zdGF0ZS5oCkBAIC03LDE4ICs3LDIyIEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfSVBUX1NUQVRFX0gKICNkZWZpbmUgX0lQVF9TVEFURV9ICi0KICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIveHRfc3RhdGUuaD4KLQogI2RlZmluZSBJUFRfU1RBVEVfQklUIFhUX1NUQVRFX0JJVAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSVBUX1NUQVRFX0lOVkFMSUQgWFRfU1RBVEVfSU5WQUxJRAotCiAjZGVmaW5lIElQVF9TVEFURV9VTlRSQUNLRUQgWFRfU1RBVEVfVU5UUkFDS0VECi0KICNkZWZpbmUgaXB0X3N0YXRlX2luZm8geHRfc3RhdGVfaW5mbwotCiAjZW5kaWYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X3N0cmluZy5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9zdHJpbmcuaAppbmRleCA2MDkyM2RkLi4yNjEzZWY1IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X3N0cmluZy5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfc3RyaW5nLmgKQEAgLTcsMTUgKzcsMjAgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9JUFRfU1RSSU5HX0gKICNkZWZpbmUgX0lQVF9TVFJJTkdfSAotCiAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL3h0X3N0cmluZy5oPgotCiAjZGVmaW5lIElQVF9TVFJJTkdfTUFYX1BBVFRFUk5fU0laRSBYVF9TVFJJTkdfTUFYX1BBVFRFUk5fU0laRQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSVBUX1NUUklOR19NQVhfQUxHT19OQU1FX1NJWkUgWFRfU1RSSU5HX01BWF9BTEdPX05BTUVfU0laRQogI2RlZmluZSBpcHRfc3RyaW5nX2luZm8geHRfc3RyaW5nX2luZm8KLQogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X3Rvc18uaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfdG9zXy5oCmluZGV4IDc4OWNlMjIuLmMyOGFkNjMgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfdG9zXy5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfdG9zXy5oCkBAIC03LDE4ICs3LDI0IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfSVBUX1RPU19ICiAjZGVmaW5lIF9JUFRfVE9TX0gKLQogc3RydWN0IGlwdF90b3NfaW5mbyB7CiAgdV9pbnQ4X3QgdG9zOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1X2ludDhfdCBpbnZlcnQ7CiB9OwotCiAjaWZuZGVmIElQVE9TX05PUk1BTFNWQwogI2RlZmluZSBJUFRPU19OT1JNQUxTVkMgMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlbmRpZgotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2Ni5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY2LmgKaW5kZXggY2UyZjEyYy4uOGZhYjBjOSAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY2LmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY2LmgKQEAgLTcsNjEgKzcsNTcgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9fTElOVVhfSVA2X05FVEZJTFRFUl9ICiAjZGVmaW5lIF9fTElOVVhfSVA2X05FVEZJTFRFUl9ICi0KICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIuaD4KLQogI2RlZmluZSBORkNfSVA2X1NSQyAweDAwMDEKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTkZDX0lQNl9EU1QgMHgwMDAyCi0KICNkZWZpbmUgTkZDX0lQNl9JRl9JTiAweDAwMDQKLQogI2RlZmluZSBORkNfSVA2X0lGX09VVCAweDAwMDgKLQogI2RlZmluZSBORkNfSVA2X1RPUyAweDAwMTAKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTkZDX0lQNl9QUk9UTyAweDAwMjAKLQogI2RlZmluZSBORkNfSVA2X09QVElPTlMgMHgwMDQwCi0KICNkZWZpbmUgTkZDX0lQNl9GUkFHIDB4MDA4MAotCiAjZGVmaW5lIE5GQ19JUDZfVENQRkxBR1MgMHgwMTAwCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE5GQ19JUDZfU1JDX1BUIDB4MDIwMAotCiAjZGVmaW5lIE5GQ19JUDZfRFNUX1BUIDB4MDQwMAotCiAjZGVmaW5lIE5GQ19JUDZfUFJPVE9fVU5LTk9XTiAweDIwMDAKLQogI2RlZmluZSBORl9JUDZfUFJFX1JPVVRJTkcgMAotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBORl9JUDZfTE9DQUxfSU4gMQotCiAjZGVmaW5lIE5GX0lQNl9GT1JXQVJEIDIKLQogI2RlZmluZSBORl9JUDZfTE9DQUxfT1VUIDMKLQogI2RlZmluZSBORl9JUDZfUE9TVF9ST1VUSU5HIDQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE5GX0lQNl9OVU1IT09LUyA1Ci0KIGVudW0gbmZfaXA2X2hvb2tfcHJpb3JpdGllcyB7CiAgTkZfSVA2X1BSSV9GSVJTVCA9IElOVF9NSU4sCiAgTkZfSVA2X1BSSV9DT05OVFJBQ0tfREVGUkFHID0gLTQwMCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkZfSVA2X1BSSV9SQVcgPSAtMzAwLAogIE5GX0lQNl9QUklfU0VMSU5VWF9GSVJTVCA9IC0yMjUsCiAgTkZfSVA2X1BSSV9DT05OVFJBQ0sgPSAtMjAwLAogIE5GX0lQNl9QUklfTUFOR0xFID0gLTE1MCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkZfSVA2X1BSSV9OQVRfRFNUID0gLTEwMCwKICBORl9JUDZfUFJJX0ZJTFRFUiA9IDAsCiAgTkZfSVA2X1BSSV9TRUNVUklUWSA9IDUwLAogIE5GX0lQNl9QUklfTkFUX1NSQyA9IDEwMCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkZfSVA2X1BSSV9TRUxJTlVYX0xBU1QgPSAyMjUsCiAgTkZfSVA2X1BSSV9MQVNUID0gSU5UX01BWCwKIH07Ci0KICNlbmRpZgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2Ni9pcDZfdGFibGVzLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2X3RhYmxlcy5oCmluZGV4IGQ3NmE1MjkuLmI4ZGEyYTMgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2Ni9pcDZfdGFibGVzLmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY2L2lwNl90YWJsZXMuaApAQCAtNywxODEgKzcsMTU0IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfSVA2X1RBQkxFU19ICiAjZGVmaW5lIF9JUDZfVEFCTEVTX0gKLQogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjYuaD4KLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIveF90YWJsZXMuaD4KLQogI2RlZmluZSBJUDZUX0ZVTkNUSU9OX01BWE5BTUVMRU4gWFRfRlVOQ1RJT05fTUFYTkFNRUxFTgogI2RlZmluZSBJUDZUX1RBQkxFX01BWE5BTUVMRU4gWFRfVEFCTEVfTUFYTkFNRUxFTgotCiAjZGVmaW5lIGlwNnRfbWF0Y2ggeHRfbWF0Y2gKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIGlwNnRfdGFyZ2V0IHh0X3RhcmdldAogI2RlZmluZSBpcDZ0X3RhYmxlIHh0X3RhYmxlCiAjZGVmaW5lIGlwNnRfZ2V0X3JldmlzaW9uIHh0X2dldF9yZXZpc2lvbgotCiBzdHJ1Y3QgaXA2dF9pcDYgewotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCBpbjZfYWRkciBzcmMsIGRzdDsKLQogIHN0cnVjdCBpbjZfYWRkciBzbXNrLCBkbXNrOwogIGNoYXIgaW5pZmFjZVtJRk5BTVNJWl0sIG91dGlmYWNlW0lGTkFNU0laXTsKICB1bnNpZ25lZCBjaGFyIGluaWZhY2VfbWFza1tJRk5BTVNJWl0sIG91dGlmYWNlX21hc2tbSUZOQU1TSVpdOwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVfaW50MTZfdCBwcm90bzsKLQogIHVfaW50OF90IHRvczsKLQogIHVfaW50OF90IGZsYWdzOwotCiAgdV9pbnQ4X3QgaW52ZmxhZ3M7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKLQogI2RlZmluZSBpcDZ0X2VudHJ5X21hdGNoIHh0X2VudHJ5X21hdGNoCiAjZGVmaW5lIGlwNnRfZW50cnlfdGFyZ2V0IHh0X2VudHJ5X3RhcmdldAogI2RlZmluZSBpcDZ0X3N0YW5kYXJkX3RhcmdldCB4dF9zdGFuZGFyZF90YXJnZXQKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgaXA2dF9jb3VudGVycyB4dF9jb3VudGVycwotCi0jZGVmaW5lIElQNlRfRl9QUk9UTyAweDAxICAKLSNkZWZpbmUgSVA2VF9GX1RPUyAweDAyICAKLSNkZWZpbmUgSVA2VF9GX0dPVE8gMHgwNCAgCi0jZGVmaW5lIElQNlRfRl9NQVNLIDB4MDcgIAotCi0jZGVmaW5lIElQNlRfSU5WX1ZJQV9JTiAweDAxICAKLSNkZWZpbmUgSVA2VF9JTlZfVklBX09VVCAweDAyICAKLSNkZWZpbmUgSVA2VF9JTlZfVE9TIDB4MDQgIAotI2RlZmluZSBJUDZUX0lOVl9TUkNJUCAweDA4ICAKLSNkZWZpbmUgSVA2VF9JTlZfRFNUSVAgMHgxMCAgCi0jZGVmaW5lIElQNlRfSU5WX0ZSQUcgMHgyMCAgCisjZGVmaW5lIElQNlRfRl9QUk9UTyAweDAxCisjZGVmaW5lIElQNlRfRl9UT1MgMHgwMgorI2RlZmluZSBJUDZUX0ZfR09UTyAweDA0CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBJUDZUX0ZfTUFTSyAweDA3CisjZGVmaW5lIElQNlRfSU5WX1ZJQV9JTiAweDAxCisjZGVmaW5lIElQNlRfSU5WX1ZJQV9PVVQgMHgwMgorI2RlZmluZSBJUDZUX0lOVl9UT1MgMHgwNAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgSVA2VF9JTlZfU1JDSVAgMHgwOAorI2RlZmluZSBJUDZUX0lOVl9EU1RJUCAweDEwCisjZGVmaW5lIElQNlRfSU5WX0ZSQUcgMHgyMAogI2RlZmluZSBJUDZUX0lOVl9QUk9UTyBYVF9JTlZfUFJPVE8KLSNkZWZpbmUgSVA2VF9JTlZfTUFTSyAweDdGICAKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgSVA2VF9JTlZfTUFTSyAweDdGCiBzdHJ1Y3QgaXA2dF9lbnRyeQogewogIHN0cnVjdCBpcDZ0X2lwNiBpcHY2OwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGludCBuZmNhY2hlOwotCiAgdV9pbnQxNl90IHRhcmdldF9vZmZzZXQ7Ci0KICB1X2ludDE2X3QgbmV4dF9vZmZzZXQ7Ci0KICB1bnNpZ25lZCBpbnQgY29tZWZyb207Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IHh0X2NvdW50ZXJzIGNvdW50ZXJzOwotCiAgdW5zaWduZWQgY2hhciBlbGVtc1swXTsKIH07Ci0KICNkZWZpbmUgSVA2VF9CQVNFX0NUTCBYVF9CQVNFX0NUTAotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJUDZUX1NPX1NFVF9SRVBMQUNFIFhUX1NPX1NFVF9SRVBMQUNFCiAjZGVmaW5lIElQNlRfU09fU0VUX0FERF9DT1VOVEVSUyBYVF9TT19TRVRfQUREX0NPVU5URVJTCiAjZGVmaW5lIElQNlRfU09fU0VUX01BWCBYVF9TT19TRVRfTUFYCi0KICNkZWZpbmUgSVA2VF9TT19HRVRfSU5GTyBYVF9TT19HRVRfSU5GTworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSVA2VF9TT19HRVRfRU5UUklFUyBYVF9TT19HRVRfRU5UUklFUwogI2RlZmluZSBJUDZUX1NPX0dFVF9SRVZJU0lPTl9NQVRDSCBYVF9TT19HRVRfUkVWSVNJT05fTUFUQ0gKICNkZWZpbmUgSVA2VF9TT19HRVRfUkVWSVNJT05fVEFSR0VUIFhUX1NPX0dFVF9SRVZJU0lPTl9UQVJHRVQKICNkZWZpbmUgSVA2VF9TT19HRVRfTUFYIFhUX1NPX0dFVF9SRVZJU0lPTl9UQVJHRVQKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSVA2VF9DT05USU5VRSBYVF9DT05USU5VRQotCiAjZGVmaW5lIElQNlRfUkVUVVJOIFhUX1JFVFVSTgotCiAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL3h0X3RjcHVkcC5oPgotCiAjZGVmaW5lIGlwNnRfdGNwIHh0X3RjcAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgaXA2dF91ZHAgeHRfdWRwCi0KICNkZWZpbmUgSVA2VF9UQ1BfSU5WX1NSQ1BUIFhUX1RDUF9JTlZfU1JDUFQKICNkZWZpbmUgSVA2VF9UQ1BfSU5WX0RTVFBUIFhUX1RDUF9JTlZfRFNUUFQKICNkZWZpbmUgSVA2VF9UQ1BfSU5WX0ZMQUdTIFhUX1RDUF9JTlZfRkxBR1MKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIElQNlRfVENQX0lOVl9PUFRJT04gWFRfVENQX0lOVl9PUFRJT04KICNkZWZpbmUgSVA2VF9UQ1BfSU5WX01BU0sgWFRfVENQX0lOVl9NQVNLCi0KICNkZWZpbmUgSVA2VF9VRFBfSU5WX1NSQ1BUIFhUX1VEUF9JTlZfU1JDUFQKICNkZWZpbmUgSVA2VF9VRFBfSU5WX0RTVFBUIFhUX1VEUF9JTlZfRFNUUFQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIElQNlRfVURQX0lOVl9NQVNLIFhUX1VEUF9JTlZfTUFTSwotCiBzdHJ1Y3QgaXA2dF9pY21wCiB7CiAgdV9pbnQ4X3QgdHlwZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdV9pbnQ4X3QgY29kZVsyXTsKICB1X2ludDhfdCBpbnZmbGFnczsKIH07Ci0KLSNkZWZpbmUgSVA2VF9JQ01QX0lOViAweDAxICAKLQorI2RlZmluZSBJUDZUX0lDTVBfSU5WIDB4MDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgaXA2dF9nZXRpbmZvCiB7Ci0KICBjaGFyIG5hbWVbSVA2VF9UQUJMRV9NQVhOQU1FTEVOXTsKLQogIHVuc2lnbmVkIGludCB2YWxpZF9ob29rczsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBpbnQgaG9va19lbnRyeVtORl9JUDZfTlVNSE9PS1NdOwotCiAgdW5zaWduZWQgaW50IHVuZGVyZmxvd1tORl9JUDZfTlVNSE9PS1NdOwotCiAgdW5zaWduZWQgaW50IG51bV9lbnRyaWVzOwotCiAgdW5zaWduZWQgaW50IHNpemU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKLQogc3RydWN0IGlwNnRfcmVwbGFjZQogewotCiAgY2hhciBuYW1lW0lQNlRfVEFCTEVfTUFYTkFNRUxFTl07Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgaW50IHZhbGlkX2hvb2tzOwotCiAgdW5zaWduZWQgaW50IG51bV9lbnRyaWVzOwotCiAgdW5zaWduZWQgaW50IHNpemU7Ci0KICB1bnNpZ25lZCBpbnQgaG9va19lbnRyeVtORl9JUDZfTlVNSE9PS1NdOwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGludCB1bmRlcmZsb3dbTkZfSVA2X05VTUhPT0tTXTsKLQogIHVuc2lnbmVkIGludCBudW1fY291bnRlcnM7Ci0KICBzdHJ1Y3QgeHRfY291bnRlcnMgX191c2VyICpjb3VudGVyczsKLQogIHN0cnVjdCBpcDZ0X2VudHJ5IGVudHJpZXNbMF07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKLQogI2RlZmluZSBpcDZ0X2NvdW50ZXJzX2luZm8geHRfY291bnRlcnNfaW5mbwotCiBzdHJ1Y3QgaXA2dF9nZXRfZW50cmllcwogewotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGNoYXIgbmFtZVtJUDZUX1RBQkxFX01BWE5BTUVMRU5dOwotCiAgdW5zaWduZWQgaW50IHNpemU7Ci0KICBzdHJ1Y3QgaXA2dF9lbnRyeSBlbnRyeXRhYmxlWzBdOwogfTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSVA2VF9TVEFOREFSRF9UQVJHRVQgWFRfU1RBTkRBUkRfVEFSR0VUCi0KICNkZWZpbmUgSVA2VF9FUlJPUl9UQVJHRVQgWFRfRVJST1JfVEFSR0VUCi0KIHN0YXRpYyBfX2lubGluZV9fIHN0cnVjdCBpcDZ0X2VudHJ5X3RhcmdldCAqCiBpcDZ0X2dldF90YXJnZXQoc3RydWN0IGlwNnRfZW50cnkgKmUpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogewogIHJldHVybiAodm9pZCAqKWUgKyBlLT50YXJnZXRfb2Zmc2V0OwogfQotCiAjZGVmaW5lIElQNlRfTUFUQ0hfSVRFUkFURShlLCBmbiwgYXJncy4uLikgICh7ICAgdW5zaWduZWQgaW50IF9faTsgICBpbnQgX19yZXQgPSAwOyAgIHN0cnVjdCBpcDZ0X2VudHJ5X21hdGNoICpfX207ICAgICBmb3IgKF9faSA9IHNpemVvZihzdHJ1Y3QgaXA2dF9lbnRyeSk7ICAgX19pIDwgKGUpLT50YXJnZXRfb2Zmc2V0OyAgIF9faSArPSBfX20tPnUubWF0Y2hfc2l6ZSkgeyAgIF9fbSA9ICh2b2lkICopKGUpICsgX19pOyAgICAgX19yZXQgPSBmbihfX20gLCAjIyBhcmdzKTsgICBpZiAoX19yZXQgIT0gMCkgICBicmVhazsgICB9ICAgX19yZXQ7ICB9KQotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJUDZUX0VOVFJZX0lURVJBVEUoZW50cmllcywgc2l6ZSwgZm4sIGFyZ3MuLi4pICAoeyAgIHVuc2lnbmVkIGludCBfX2k7ICAgaW50IF9fcmV0ID0gMDsgICBzdHJ1Y3QgaXA2dF9lbnRyeSAqX19lOyAgICAgZm9yIChfX2kgPSAwOyBfX2kgPCAoc2l6ZSk7IF9faSArPSBfX2UtPm5leHRfb2Zmc2V0KSB7ICAgX19lID0gKHZvaWQgKikoZW50cmllcykgKyBfX2k7ICAgICBfX3JldCA9IGZuKF9fZSAsICMjIGFyZ3MpOyAgIGlmIChfX3JldCAhPSAwKSAgIGJyZWFrOyAgIH0gICBfX3JldDsgIH0pCi0KICNlbmRpZgotCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2dF9ITC5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY2L2lwNnRfSEwuaAppbmRleCAxMDcxZmY5Li5jYTkzM2UwIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2dF9ITC5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2Ni9pcDZ0X0hMLmgKQEAgLTcsMjIgKzcsMjggQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9JUDZUX0hMX0gKICNkZWZpbmUgX0lQNlRfSExfSAotCiBlbnVtIHsKICBJUDZUX0hMX1NFVCA9IDAsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIElQNlRfSExfSU5DLAogIElQNlRfSExfREVDCiB9OwotCiAjZGVmaW5lIElQNlRfSExfTUFYTU9ERSBJUDZUX0hMX0RFQwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IGlwNnRfSExfaW5mbyB7CiAgdV9pbnQ4X3QgbW9kZTsKICB1X2ludDhfdCBob3BfbGltaXQ7CiB9OwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2dF9MT0cuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2Ni9pcDZ0X0xPRy5oCmluZGV4IDM0NGMxMzMuLmIxMmEzOGMgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2Ni9pcDZ0X0xPRy5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2Ni9pcDZ0X0xPRy5oCkBAIC03LDIyICs3LDI5IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfSVA2VF9MT0dfSAogI2RlZmluZSBfSVA2VF9MT0dfSAotCi0jZGVmaW5lIElQNlRfTE9HX1RDUFNFUSAweDAxICAKLSNkZWZpbmUgSVA2VF9MT0dfVENQT1BUIDB4MDIgIAotI2RlZmluZSBJUDZUX0xPR19JUE9QVCAweDA0ICAKLSNkZWZpbmUgSVA2VF9MT0dfVUlEIDB4MDggIAotI2RlZmluZSBJUDZUX0xPR19ORkxPRyAweDEwICAKKyNkZWZpbmUgSVA2VF9MT0dfVENQU0VRIDB4MDEKKyNkZWZpbmUgSVA2VF9MT0dfVENQT1BUIDB4MDIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIElQNlRfTE9HX0lQT1BUIDB4MDQKKyNkZWZpbmUgSVA2VF9MT0dfVUlEIDB4MDgKKyNkZWZpbmUgSVA2VF9MT0dfTkZMT0cgMHgxMAogI2RlZmluZSBJUDZUX0xPR19NQVNLIDB4MWYKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBpcDZ0X2xvZ19pbmZvIHsKICB1bnNpZ25lZCBjaGFyIGxldmVsOwogIHVuc2lnbmVkIGNoYXIgbG9nZmxhZ3M7CiAgY2hhciBwcmVmaXhbMzBdOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07Ci0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY2L2lwNnRfUkVKRUNULmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2dF9SRUpFQ1QuaAppbmRleCBiMTAxYzg1Li43Nzg3NzFhIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2dF9SRUpFQ1QuaAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2dF9SRUpFQ1QuaApAQCAtNywyMyArNywzMCBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX0lQNlRfUkVKRUNUX0gKICNkZWZpbmUgX0lQNlRfUkVKRUNUX0gKLQogZW51bSBpcDZ0X3JlamVjdF93aXRoIHsKICBJUDZUX0lDTVA2X05PX1JPVVRFLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBJUDZUX0lDTVA2X0FETV9QUk9ISUJJVEVELAogIElQNlRfSUNNUDZfTk9UX05FSUdIQk9VUiwKICBJUDZUX0lDTVA2X0FERFJfVU5SRUFDSCwKICBJUDZUX0lDTVA2X1BPUlRfVU5SRUFDSCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgSVA2VF9JQ01QNl9FQ0hPUkVQTFksCiAgSVA2VF9UQ1BfUkVTRVQKIH07Ci0KIHN0cnVjdCBpcDZ0X3JlamVjdF9pbmZvIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdV9pbnQzMl90IHdpdGg7CiB9OwotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2Ni9pcDZ0X2FoLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2dF9haC5oCmluZGV4IDcxMTBkZjUuLmI1NjRmMDIgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2Ni9pcDZ0X2FoLmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY2L2lwNnRfYWguaApAQCAtNywyNSArNywzMiBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX0lQNlRfQUhfSAogI2RlZmluZSBfSVA2VF9BSF9ICi0KIHN0cnVjdCBpcDZ0X2FoCiB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVfaW50MzJfdCBzcGlzWzJdOwogIHVfaW50MzJfdCBoZHJsZW47CiAgdV9pbnQ4X3QgaGRycmVzOwogIHVfaW50OF90IGludmZsYWdzOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07Ci0KICNkZWZpbmUgSVA2VF9BSF9TUEkgMHgwMQogI2RlZmluZSBJUDZUX0FIX0xFTiAweDAyCiAjZGVmaW5lIElQNlRfQUhfUkVTIDB4MDQKLQotI2RlZmluZSBJUDZUX0FIX0lOVl9TUEkgMHgwMSAgCi0jZGVmaW5lIElQNlRfQUhfSU5WX0xFTiAweDAyICAKLSNkZWZpbmUgSVA2VF9BSF9JTlZfTUFTSyAweDAzICAKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgSVA2VF9BSF9JTlZfU1BJIDB4MDEKKyNkZWZpbmUgSVA2VF9BSF9JTlZfTEVOIDB4MDIKKyNkZWZpbmUgSVA2VF9BSF9JTlZfTUFTSyAweDAzCiAjZW5kaWYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2dF9lc3AuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2Ni9pcDZ0X2VzcC5oCmluZGV4IDBhYTc1NTYuLjhjYTgzODggMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2Ni9pcDZ0X2VzcC5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2Ni9pcDZ0X2VzcC5oCkBAIC03LDE1ICs3LDIwIEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfSVA2VF9FU1BfSAogI2RlZmluZSBfSVA2VF9FU1BfSAotCiAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL3h0X2VzcC5oPgotCiAjZGVmaW5lIGlwNnRfZXNwIHh0X2VzcAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSVA2VF9FU1BfSU5WX1NQSSBYVF9FU1BfSU5WX1NQSQogI2RlZmluZSBJUDZUX0VTUF9JTlZfTUFTSyBYVF9FU1BfSU5WX01BU0sKLQogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2dF9mcmFnLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2dF9mcmFnLmgKaW5kZXggMTM0ZDZiYi4uY2IwYzY4ZCAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY2L2lwNnRfZnJhZy5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2Ni9pcDZ0X2ZyYWcuaApAQCAtNywyOCArNywzNSBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX0lQNlRfRlJBR19ICiAjZGVmaW5lIF9JUDZUX0ZSQUdfSAotCiBzdHJ1Y3QgaXA2dF9mcmFnCiB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVfaW50MzJfdCBpZHNbMl07CiAgdV9pbnQzMl90IGhkcmxlbjsKICB1X2ludDhfdCBmbGFnczsKICB1X2ludDhfdCBpbnZmbGFnczsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwotCiAjZGVmaW5lIElQNlRfRlJBR19JRFMgMHgwMQogI2RlZmluZSBJUDZUX0ZSQUdfTEVOIDB4MDIKICNkZWZpbmUgSVA2VF9GUkFHX1JFUyAweDA0CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJUDZUX0ZSQUdfRlNUIDB4MDgKICNkZWZpbmUgSVA2VF9GUkFHX01GIDB4MTAKICNkZWZpbmUgSVA2VF9GUkFHX05NRiAweDIwCi0KLSNkZWZpbmUgSVA2VF9GUkFHX0lOVl9JRFMgMHgwMSAgCi0jZGVmaW5lIElQNlRfRlJBR19JTlZfTEVOIDB4MDIgIAotI2RlZmluZSBJUDZUX0ZSQUdfSU5WX01BU0sgMHgwMyAgCi0KKyNkZWZpbmUgSVA2VF9GUkFHX0lOVl9JRFMgMHgwMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgSVA2VF9GUkFHX0lOVl9MRU4gMHgwMgorI2RlZmluZSBJUDZUX0ZSQUdfSU5WX01BU0sgMHgwMwogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2dF9obC5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY2L2lwNnRfaGwuaAppbmRleCBlMDE0NGQyLi42OTg2YWRjIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2dF9obC5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2Ni9pcDZ0X2hsLmgKQEAgLTcsMjEgKzcsMjggQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9JUDZUX0hMX0gKICNkZWZpbmUgX0lQNlRfSExfSAotCiBlbnVtIHsKICBJUDZUX0hMX0VRID0gMCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgSVA2VF9ITF9ORSwKICBJUDZUX0hMX0xULAogIElQNlRfSExfR1QsCiB9OwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IGlwNnRfaGxfaW5mbyB7CiAgdV9pbnQ4X3QgbW9kZTsKICB1X2ludDhfdCBob3BfbGltaXQ7CiB9OwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2dF9pcHY2aGVhZGVyLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2dF9pcHY2aGVhZGVyLmgKaW5kZXggN2U4M2ViYy4uY2Y2YjY4OCAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY2L2lwNnRfaXB2NmhlYWRlci5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2Ni9pcDZ0X2lwdjZoZWFkZXIuaApAQCAtNywyNSArNywzMyBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX19JUFY2SEVBREVSX0gKICNkZWZpbmUgX19JUFY2SEVBREVSX0gKLQogc3RydWN0IGlwNnRfaXB2NmhlYWRlcl9pbmZvCiB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVfaW50OF90IG1hdGNoZmxhZ3M7CiAgdV9pbnQ4X3QgaW52ZmxhZ3M7CiAgdV9pbnQ4X3QgbW9kZWZsYWc7CiB9OwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNQVNLX0hPUE9QVFMgMTI4CiAjZGVmaW5lIE1BU0tfRFNUT1BUUyA2NAogI2RlZmluZSBNQVNLX1JPVVRJTkcgMzIKICNkZWZpbmUgTUFTS19GUkFHTUVOVCAxNgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTUFTS19BSCA4CiAjZGVmaW5lIE1BU0tfRVNQIDQKICNkZWZpbmUgTUFTS19OT05FIDIKICNkZWZpbmUgTUFTS19QUk9UTyAxCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2Ni9pcDZ0X2xlbmd0aC5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY2L2lwNnRfbGVuZ3RoLmgKaW5kZXggZmRjNGM1Zi4uZmZhZGIzZiAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY2L2lwNnRfbGVuZ3RoLmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY2L2lwNnRfbGVuZ3RoLmgKQEAgLTcsMTMgKzcsMTggQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9JUDZUX0xFTkdUSF9ICiAjZGVmaW5lIF9JUDZUX0xFTkdUSF9ICi0KICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIveHRfbGVuZ3RoLmg+CiAjZGVmaW5lIGlwNnRfbGVuZ3RoX2luZm8geHRfbGVuZ3RoX2luZm8KLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlbmRpZgotCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2dF9tYWMuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2Ni9pcDZ0X21hYy5oCmluZGV4IDU4ZTYwMjMuLjg1ZTg1NjEgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2Ni9pcDZ0X21hYy5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2Ni9pcDZ0X21hYy5oCkBAIC03LDEyICs3LDE4IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfSVA2VF9NQUNfSAogI2RlZmluZSBfSVA2VF9NQUNfSAotCiAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL3h0X21hYy5oPgogI2RlZmluZSBpcDZ0X21hY19pbmZvIHh0X21hY19pbmZvCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2Ni9pcDZ0X29wdHMuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2Ni9pcDZ0X29wdHMuaAppbmRleCAxZDlkYjljLi43NzdhMmRkIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2dF9vcHRzLmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY2L2lwNnRfb3B0cy5oCkBAIC03LDI3ICs3LDMzIEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfSVA2VF9PUFRTX0gKICNkZWZpbmUgX0lQNlRfT1BUU19ICi0KICNkZWZpbmUgSVA2VF9PUFRTX09QVFNOUiAxNgotCiBzdHJ1Y3QgaXA2dF9vcHRzCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogewogIHVfaW50MzJfdCBoZHJsZW47CiAgdV9pbnQ4X3QgZmxhZ3M7CiAgdV9pbnQ4X3QgaW52ZmxhZ3M7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVfaW50MTZfdCBvcHRzW0lQNlRfT1BUU19PUFRTTlJdOwogIHVfaW50OF90IG9wdHNucjsKIH07Ci0KICNkZWZpbmUgSVA2VF9PUFRTX0xFTiAweDAxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJUDZUX09QVFNfT1BUUyAweDAyCiAjZGVmaW5lIElQNlRfT1BUU19OU1RSSUNUIDB4MDQKLQotI2RlZmluZSBJUDZUX09QVFNfSU5WX0xFTiAweDAxICAKLSNkZWZpbmUgSVA2VF9PUFRTX0lOVl9NQVNLIDB4MDEgIAotCisjZGVmaW5lIElQNlRfT1BUU19JTlZfTEVOIDB4MDEKKyNkZWZpbmUgSVA2VF9PUFRTX0lOVl9NQVNLIDB4MDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2Ni9pcDZ0X293bmVyLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2dF9vd25lci5oCmluZGV4IGE2MTI2YjQuLmI2N2NlZmUgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2Ni9pcDZ0X293bmVyLmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY2L2lwNnRfb3duZXIuaApAQCAtNywyMiArNywyOSBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX0lQNlRfT1dORVJfSAogI2RlZmluZSBfSVA2VF9PV05FUl9ICi0KICNkZWZpbmUgSVA2VF9PV05FUl9VSUQgMHgwMQogI2RlZmluZSBJUDZUX09XTkVSX0dJRCAweDAyCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJUDZUX09XTkVSX1BJRCAweDA0CiAjZGVmaW5lIElQNlRfT1dORVJfU0lEIDB4MDgKLQogc3RydWN0IGlwNnRfb3duZXJfaW5mbyB7CiAgdWlkX3QgdWlkOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBnaWRfdCBnaWQ7CiAgcGlkX3QgcGlkOwogIHBpZF90IHNpZDsKICB1X2ludDhfdCBtYXRjaCwgaW52ZXJ0OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07Ci0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY2L2lwNnRfcGh5c2Rldi5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY2L2lwNnRfcGh5c2Rldi5oCmluZGV4IDY1N2UyZmIuLjRjMzQyNTEgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2Ni9pcDZ0X3BoeXNkZXYuaAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2dF9waHlzZGV2LmgKQEAgLTcsMjAgKzcsMjUgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9JUDZUX1BIWVNERVZfSAogI2RlZmluZSBfSVA2VF9QSFlTREVWX0gKLQogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci94dF9waHlzZGV2Lmg+Ci0KICNkZWZpbmUgSVA2VF9QSFlTREVWX09QX0lOIFhUX1BIWVNERVZfT1BfSU4KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIElQNlRfUEhZU0RFVl9PUF9PVVQgWFRfUEhZU0RFVl9PUF9PVVQKICNkZWZpbmUgSVA2VF9QSFlTREVWX09QX0JSSURHRUQgWFRfUEhZU0RFVl9PUF9CUklER0VECiAjZGVmaW5lIElQNlRfUEhZU0RFVl9PUF9JU0lOIFhUX1BIWVNERVZfT1BfSVNJTgogI2RlZmluZSBJUDZUX1BIWVNERVZfT1BfSVNPVVQgWFRfUEhZU0RFVl9PUF9JU09VVAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSVA2VF9QSFlTREVWX09QX01BU0sgWFRfUEhZU0RFVl9PUF9NQVNLCi0KICNkZWZpbmUgaXA2dF9waHlzZGV2X2luZm8geHRfcGh5c2Rldl9pbmZvCi0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY2L2lwNnRfcnQuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2Ni9pcDZ0X3J0LmgKaW5kZXggMjc0YTdlZS4uNDcxMzgyMSAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY2L2lwNnRfcnQuaAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2dF9ydC5oCkBAIC03LDM1ICs3LDQzIEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfSVA2VF9SVF9ICiAjZGVmaW5lIF9JUDZUX1JUX0gKLQogI2RlZmluZSBJUDZUX1JUX0hPUFMgMTYKLQogc3RydWN0IGlwNnRfcnQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB7CiAgdV9pbnQzMl90IHJ0X3R5cGU7CiAgdV9pbnQzMl90IHNlZ3NsZWZ0WzJdOwogIHVfaW50MzJfdCBoZHJsZW47CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVfaW50OF90IGZsYWdzOwogIHVfaW50OF90IGludmZsYWdzOwogIHN0cnVjdCBpbjZfYWRkciBhZGRyc1tJUDZUX1JUX0hPUFNdOwogIHVfaW50OF90IGFkZHJucjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwotCiAjZGVmaW5lIElQNlRfUlRfVFlQIDB4MDEKICNkZWZpbmUgSVA2VF9SVF9TR1MgMHgwMgogI2RlZmluZSBJUDZUX1JUX0xFTiAweDA0CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJUDZUX1JUX1JFUyAweDA4CiAjZGVmaW5lIElQNlRfUlRfRlNUX01BU0sgMHgzMAogI2RlZmluZSBJUDZUX1JUX0ZTVCAweDEwCiAjZGVmaW5lIElQNlRfUlRfRlNUX05TVFJJQ1QgMHgyMAotCi0jZGVmaW5lIElQNlRfUlRfSU5WX1RZUCAweDAxICAKLSNkZWZpbmUgSVA2VF9SVF9JTlZfU0dTIDB4MDIgIAotI2RlZmluZSBJUDZUX1JUX0lOVl9MRU4gMHgwNCAgCi0jZGVmaW5lIElQNlRfUlRfSU5WX01BU0sgMHgwNyAgCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIElQNlRfUlRfSU5WX1RZUCAweDAxCisjZGVmaW5lIElQNlRfUlRfSU5WX1NHUyAweDAyCisjZGVmaW5lIElQNlRfUlRfSU5WX0xFTiAweDA0CisjZGVmaW5lIElQNlRfUlRfSU5WX01BU0sgMHgwNworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGxpbmsuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRsaW5rLmgKaW5kZXggNzVlODg5YS4uYjcwMDA4NiAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGxpbmsuaAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0bGluay5oCkBAIC03LDEyNCArNywxMjggQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9fTElOVVhfTkVUTElOS19ICiAjZGVmaW5lIF9fTElOVVhfTkVUTElOS19ICi0KLSNpbmNsdWRlIDxsaW51eC9zb2NrZXQuaD4gIAorI2luY2x1ZGUgPGxpbnV4L3NvY2tldC5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0KLSNkZWZpbmUgTkVUTElOS19ST1VURSAwICAKLSNkZWZpbmUgTkVUTElOS19VTlVTRUQgMSAgCi0jZGVmaW5lIE5FVExJTktfVVNFUlNPQ0sgMiAgCi0jZGVmaW5lIE5FVExJTktfRklSRVdBTEwgMyAgCi0jZGVmaW5lIE5FVExJTktfSU5FVF9ESUFHIDQgIAotI2RlZmluZSBORVRMSU5LX05GTE9HIDUgIAotI2RlZmluZSBORVRMSU5LX1hGUk0gNiAgCi0jZGVmaW5lIE5FVExJTktfU0VMSU5VWCA3ICAKLSNkZWZpbmUgTkVUTElOS19JU0NTSSA4ICAKLSNkZWZpbmUgTkVUTElOS19BVURJVCA5ICAKLSNkZWZpbmUgTkVUTElOS19GSUJfTE9PS1VQIDEwIAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgTkVUTElOS19ST1VURSAwCisjZGVmaW5lIE5FVExJTktfVU5VU0VEIDEKKyNkZWZpbmUgTkVUTElOS19VU0VSU09DSyAyCisjZGVmaW5lIE5FVExJTktfRklSRVdBTEwgMworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgTkVUTElOS19JTkVUX0RJQUcgNAorI2RlZmluZSBORVRMSU5LX05GTE9HIDUKKyNkZWZpbmUgTkVUTElOS19YRlJNIDYKKyNkZWZpbmUgTkVUTElOS19TRUxJTlVYIDcKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIE5FVExJTktfSVNDU0kgOAorI2RlZmluZSBORVRMSU5LX0FVRElUIDkKKyNkZWZpbmUgTkVUTElOS19GSUJfTE9PS1VQIDEwCiAjZGVmaW5lIE5FVExJTktfQ09OTkVDVE9SIDExCi0jZGVmaW5lIE5FVExJTktfTkVURklMVEVSIDEyICAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIE5FVExJTktfTkVURklMVEVSIDEyCiAjZGVmaW5lIE5FVExJTktfSVA2X0ZXIDEzCi0jZGVmaW5lIE5FVExJTktfRE5SVE1TRyAxNCAgCi0jZGVmaW5lIE5FVExJTktfS09CSkVDVF9VRVZFTlQgMTUgIAorI2RlZmluZSBORVRMSU5LX0ROUlRNU0cgMTQKKyNkZWZpbmUgTkVUTElOS19LT0JKRUNUX1VFVkVOVCAxNQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTkVUTElOS19HRU5FUklDIDE2Ci0KLSNkZWZpbmUgTkVUTElOS19TQ1NJVFJBTlNQT1JUIDE4ICAKKyNkZWZpbmUgTkVUTElOS19TQ1NJVFJBTlNQT1JUIDE4CiAjZGVmaW5lIE5FVExJTktfRUNSWVBURlMgMTkKLQotI2RlZmluZSBNQVhfTElOS1MgMzIgCi0KLXN0cnVjdCBuZXQ7Ci0KLXN0cnVjdCBzb2NrYWRkcl9ubAoteworI2RlZmluZSBORVRMSU5LX1JETUEgMjAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIE5FVExJTktfSURMRVRJTUVSIDIxCisjZGVmaW5lIE1BWF9MSU5LUyAzMgorc3RydWN0IHNvY2thZGRyX25sIHsKICBzYV9mYW1pbHlfdCBubF9mYW1pbHk7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIHNob3J0IG5sX3BhZDsKICBfX3UzMiBubF9waWQ7CiAgX191MzIgbmxfZ3JvdXBzOwogfTsKLQotc3RydWN0IG5sbXNnaGRyCi17CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworc3RydWN0IG5sbXNnaGRyIHsKICBfX3UzMiBubG1zZ19sZW47CiAgX191MTYgbmxtc2dfdHlwZTsKICBfX3UxNiBubG1zZ19mbGFnczsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgbmxtc2dfc2VxOwogIF9fdTMyIG5sbXNnX3BpZDsKIH07Ci0KLSNkZWZpbmUgTkxNX0ZfUkVRVUVTVCAxICAKLSNkZWZpbmUgTkxNX0ZfTVVMVEkgMiAgCi0jZGVmaW5lIE5MTV9GX0FDSyA0ICAKLSNkZWZpbmUgTkxNX0ZfRUNITyA4ICAKLQotI2RlZmluZSBOTE1fRl9ST09UIDB4MTAwICAKLSNkZWZpbmUgTkxNX0ZfTUFUQ0ggMHgyMDAgIAotI2RlZmluZSBOTE1fRl9BVE9NSUMgMHg0MDAgIAorI2RlZmluZSBOTE1fRl9SRVFVRVNUIDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIE5MTV9GX01VTFRJIDIKKyNkZWZpbmUgTkxNX0ZfQUNLIDQKKyNkZWZpbmUgTkxNX0ZfRUNITyA4CisjZGVmaW5lIE5MTV9GX1JPT1QgMHgxMDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIE5MTV9GX01BVENIIDB4MjAwCisjZGVmaW5lIE5MTV9GX0FUT01JQyAweDQwMAogI2RlZmluZSBOTE1fRl9EVU1QIChOTE1fRl9ST09UfE5MTV9GX01BVENIKQotCi0jZGVmaW5lIE5MTV9GX1JFUExBQ0UgMHgxMDAgIAotI2RlZmluZSBOTE1fRl9FWENMIDB4MjAwICAKLSNkZWZpbmUgTkxNX0ZfQ1JFQVRFIDB4NDAwICAKLSNkZWZpbmUgTkxNX0ZfQVBQRU5EIDB4ODAwICAKLQotI2RlZmluZSBOTE1TR19BTElHTlRPIDQKKyNkZWZpbmUgTkxNX0ZfUkVQTEFDRSAweDEwMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgTkxNX0ZfRVhDTCAweDIwMAorI2RlZmluZSBOTE1fRl9DUkVBVEUgMHg0MDAKKyNkZWZpbmUgTkxNX0ZfQVBQRU5EIDB4ODAwCisjZGVmaW5lIE5MTVNHX0FMSUdOVE8gNFUKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE5MTVNHX0FMSUdOKGxlbikgKCAoKGxlbikrTkxNU0dfQUxJR05UTy0xKSAmIH4oTkxNU0dfQUxJR05UTy0xKSApCiAjZGVmaW5lIE5MTVNHX0hEUkxFTiAoKGludCkgTkxNU0dfQUxJR04oc2l6ZW9mKHN0cnVjdCBubG1zZ2hkcikpKQogI2RlZmluZSBOTE1TR19MRU5HVEgobGVuKSAoKGxlbikrTkxNU0dfQUxJR04oTkxNU0dfSERSTEVOKSkKICNkZWZpbmUgTkxNU0dfU1BBQ0UobGVuKSBOTE1TR19BTElHTihOTE1TR19MRU5HVEgobGVuKSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE5MTVNHX0RBVEEobmxoKSAoKHZvaWQqKSgoKGNoYXIqKW5saCkgKyBOTE1TR19MRU5HVEgoMCkpKQogI2RlZmluZSBOTE1TR19ORVhUKG5saCxsZW4pICgobGVuKSAtPSBOTE1TR19BTElHTigobmxoKS0+bmxtc2dfbGVuKSwgICAoc3RydWN0IG5sbXNnaGRyKikoKChjaGFyKikobmxoKSkgKyBOTE1TR19BTElHTigobmxoKS0+bmxtc2dfbGVuKSkpCiAjZGVmaW5lIE5MTVNHX09LKG5saCxsZW4pICgobGVuKSA+PSAoaW50KXNpemVvZihzdHJ1Y3Qgbmxtc2doZHIpICYmICAgKG5saCktPm5sbXNnX2xlbiA+PSBzaXplb2Yoc3RydWN0IG5sbXNnaGRyKSAmJiAgIChubGgpLT5ubG1zZ19sZW4gPD0gKGxlbikpCiAjZGVmaW5lIE5MTVNHX1BBWUxPQUQobmxoLGxlbikgKChubGgpLT5ubG1zZ19sZW4gLSBOTE1TR19TUEFDRSgobGVuKSkpCi0KLSNkZWZpbmUgTkxNU0dfTk9PUCAweDEgIAotI2RlZmluZSBOTE1TR19FUlJPUiAweDIgIAotI2RlZmluZSBOTE1TR19ET05FIDB4MyAgCi0jZGVmaW5lIE5MTVNHX09WRVJSVU4gMHg0ICAKLQotI2RlZmluZSBOTE1TR19NSU5fVFlQRSAweDEwICAKLQotc3RydWN0IG5sbXNnZXJyCi17CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBOTE1TR19OT09QIDB4MQorI2RlZmluZSBOTE1TR19FUlJPUiAweDIKKyNkZWZpbmUgTkxNU0dfRE9ORSAweDMKKyNkZWZpbmUgTkxNU0dfT1ZFUlJVTiAweDQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIE5MTVNHX01JTl9UWVBFIDB4MTAKK3N0cnVjdCBubG1zZ2VyciB7CiAgaW50IGVycm9yOwogIHN0cnVjdCBubG1zZ2hkciBtc2c7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKLQogI2RlZmluZSBORVRMSU5LX0FERF9NRU1CRVJTSElQIDEKICNkZWZpbmUgTkVUTElOS19EUk9QX01FTUJFUlNISVAgMgogI2RlZmluZSBORVRMSU5LX1BLVElORk8gMworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTkVUTElOS19CUk9BRENBU1RfRVJST1IgNAogI2RlZmluZSBORVRMSU5LX05PX0VOT0JVRlMgNQotCi1zdHJ1Y3QgbmxfcGt0aW5mbwoteworc3RydWN0IG5sX3BrdGluZm8gewogIF9fdTMyIGdyb3VwOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07Ci0KLSNkZWZpbmUgTkVUX01BSk9SIDM2ICAKLQorI2RlZmluZSBORVRfTUFKT1IgMzYKIGVudW0gewogIE5FVExJTktfVU5DT05ORUNURUQgPSAwLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBORVRMSU5LX0NPTk5FQ1RFRCwKIH07Ci0KLXN0cnVjdCBubGF0dHIKLXsKK3N0cnVjdCBubGF0dHIgewogIF9fdTE2IG5sYV9sZW47CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTE2IG5sYV90eXBlOwogfTsKLQogI2RlZmluZSBOTEFfRl9ORVNURUQgKDEgPDwgMTUpCiAjZGVmaW5lIE5MQV9GX05FVF9CWVRFT1JERVIgKDEgPDwgMTQpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBOTEFfVFlQRV9NQVNLIH4oTkxBX0ZfTkVTVEVEIHwgTkxBX0ZfTkVUX0JZVEVPUkRFUikKLQogI2RlZmluZSBOTEFfQUxJR05UTyA0CiAjZGVmaW5lIE5MQV9BTElHTihsZW4pICgoKGxlbikgKyBOTEFfQUxJR05UTyAtIDEpICYgfihOTEFfQUxJR05UTyAtIDEpKQogI2RlZmluZSBOTEFfSERSTEVOICgoaW50KSBOTEFfQUxJR04oc2l6ZW9mKHN0cnVjdCBubGF0dHIpKSkKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25mcy5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25mcy5oCmluZGV4IGQ5NGRjOWYuLjEwYjU5ZjkgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZnMuaAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmZzLmgKQEAgLTcsMTE4ICs3LDE0NyBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX0xJTlVYX05GU19ICiAjZGVmaW5lIF9MSU5VWF9ORlNfSAotCiAjZGVmaW5lIE5GU19QUk9HUkFNIDEwMDAwMwogI2RlZmluZSBORlNfUE9SVCAyMDQ5CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBORlNfTUFYREFUQSA4MTkyCiAjZGVmaW5lIE5GU19NQVhQQVRITEVOIDEwMjQKICNkZWZpbmUgTkZTX01BWE5BTUxFTiAyNTUKICNkZWZpbmUgTkZTX01BWEdST1VQUyAxNgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTkZTX0ZIU0laRSAzMgogI2RlZmluZSBORlNfQ09PS0lFU0laRSA0CiAjZGVmaW5lIE5GU19GSUZPX0RFViAoLTEpCiAjZGVmaW5lIE5GU01PREVfRk1UIDAxNzAwMDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE5GU01PREVfRElSIDAwNDAwMDAKICNkZWZpbmUgTkZTTU9ERV9DSFIgMDAyMDAwMAogI2RlZmluZSBORlNNT0RFX0JMSyAwMDYwMDAwCiAjZGVmaW5lIE5GU01PREVfUkVHIDAxMDAwMDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE5GU01PREVfTE5LIDAxMjAwMDAKICNkZWZpbmUgTkZTTU9ERV9TT0NLIDAxNDAwMDAKICNkZWZpbmUgTkZTTU9ERV9GSUZPIDAwMTAwMDAKLQogI2RlZmluZSBORlNfTU5UX1BST0dSQU0gMTAwMDA1CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBORlNfTU5UX1BPUlQgNjI3Ci0KICBlbnVtIG5mc19zdGF0IHsKICBORlNfT0sgPSAwLAogIE5GU0VSUl9QRVJNID0gMSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkZTRVJSX05PRU5UID0gMiwKICBORlNFUlJfSU8gPSA1LAogIE5GU0VSUl9OWElPID0gNiwKICBORlNFUlJfRUFHQUlOID0gMTEsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5GU0VSUl9BQ0NFUyA9IDEzLAogIE5GU0VSUl9FWElTVCA9IDE3LAogIE5GU0VSUl9YREVWID0gMTgsCiAgTkZTRVJSX05PREVWID0gMTksCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5GU0VSUl9OT1RESVIgPSAyMCwKICBORlNFUlJfSVNESVIgPSAyMSwKICBORlNFUlJfSU5WQUwgPSAyMiwKICBORlNFUlJfRkJJRyA9IDI3LAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBORlNFUlJfTk9TUEMgPSAyOCwKICBORlNFUlJfUk9GUyA9IDMwLAogIE5GU0VSUl9NTElOSyA9IDMxLAogIE5GU0VSUl9PUE5PVFNVUFAgPSA0NSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkZTRVJSX05BTUVUT09MT05HID0gNjMsCiAgTkZTRVJSX05PVEVNUFRZID0gNjYsCiAgTkZTRVJSX0RRVU9UID0gNjksCiAgTkZTRVJSX1NUQUxFID0gNzAsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5GU0VSUl9SRU1PVEUgPSA3MSwKICBORlNFUlJfV0ZMVVNIID0gOTksCiAgTkZTRVJSX0JBREhBTkRMRSA9IDEwMDAxLAogIE5GU0VSUl9OT1RfU1lOQyA9IDEwMDAyLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBORlNFUlJfQkFEX0NPT0tJRSA9IDEwMDAzLAogIE5GU0VSUl9OT1RTVVBQID0gMTAwMDQsCiAgTkZTRVJSX1RPT1NNQUxMID0gMTAwMDUsCiAgTkZTRVJSX1NFUlZFUkZBVUxUID0gMTAwMDYsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5GU0VSUl9CQURUWVBFID0gMTAwMDcsCiAgTkZTRVJSX0pVS0VCT1ggPSAxMDAwOCwKICBORlNFUlJfU0FNRSA9IDEwMDA5LAogIE5GU0VSUl9ERU5JRUQgPSAxMDAxMCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkZTRVJSX0VYUElSRUQgPSAxMDAxMSwKICBORlNFUlJfTE9DS0VEID0gMTAwMTIsCiAgTkZTRVJSX0dSQUNFID0gMTAwMTMsCiAgTkZTRVJSX0ZIRVhQSVJFRCA9IDEwMDE0LAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBORlNFUlJfU0hBUkVfREVOSUVEID0gMTAwMTUsCiAgTkZTRVJSX1dST05HU0VDID0gMTAwMTYsCiAgTkZTRVJSX0NMSURfSU5VU0UgPSAxMDAxNywKICBORlNFUlJfUkVTT1VSQ0UgPSAxMDAxOCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkZTRVJSX01PVkVEID0gMTAwMTksCiAgTkZTRVJSX05PRklMRUhBTkRMRSA9IDEwMDIwLAogIE5GU0VSUl9NSU5PUl9WRVJTX01JU01BVENIID0gMTAwMjEsCiAgTkZTRVJSX1NUQUxFX0NMSUVOVElEID0gMTAwMjIsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5GU0VSUl9TVEFMRV9TVEFURUlEID0gMTAwMjMsCiAgTkZTRVJSX09MRF9TVEFURUlEID0gMTAwMjQsCiAgTkZTRVJSX0JBRF9TVEFURUlEID0gMTAwMjUsCiAgTkZTRVJSX0JBRF9TRVFJRCA9IDEwMDI2LAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBORlNFUlJfTk9UX1NBTUUgPSAxMDAyNywKICBORlNFUlJfTE9DS19SQU5HRSA9IDEwMDI4LAogIE5GU0VSUl9TWU1MSU5LID0gMTAwMjksCiAgTkZTRVJSX1JFU1RPUkVGSCA9IDEwMDMwLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBORlNFUlJfTEVBU0VfTU9WRUQgPSAxMDAzMSwKICBORlNFUlJfQVRUUk5PVFNVUFAgPSAxMDAzMiwKICBORlNFUlJfTk9fR1JBQ0UgPSAxMDAzMywKICBORlNFUlJfUkVDTEFJTV9CQUQgPSAxMDAzNCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkZTRVJSX1JFQ0xBSU1fQ09ORkxJQ1QgPSAxMDAzNSwKICBORlNFUlJfQkFEX1hEUiA9IDEwMDM2LAogIE5GU0VSUl9MT0NLU19IRUxEID0gMTAwMzcsCiAgTkZTRVJSX09QRU5NT0RFID0gMTAwMzgsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5GU0VSUl9CQURPV05FUiA9IDEwMDM5LAogIE5GU0VSUl9CQURDSEFSID0gMTAwNDAsCiAgTkZTRVJSX0JBRE5BTUUgPSAxMDA0MSwKICBORlNFUlJfQkFEX1JBTkdFID0gMTAwNDIsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5GU0VSUl9MT0NLX05PVFNVUFAgPSAxMDA0MywKICBORlNFUlJfT1BfSUxMRUdBTCA9IDEwMDQ0LAogIE5GU0VSUl9ERUFETE9DSyA9IDEwMDQ1LAogIE5GU0VSUl9GSUxFX09QRU4gPSAxMDA0NiwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkZTRVJSX0FETUlOX1JFVk9LRUQgPSAxMDA0NywKICBORlNFUlJfQ0JfUEFUSF9ET1dOID0gMTAwNDgsCiAgTkZTRVJSX1JFUExBWV9NRSA9IDEwMDQ5CiB9OwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogZW51bSBuZnNfZnR5cGUgewogIE5GTk9OID0gMCwKICBORlJFRyA9IDEsCiAgTkZESVIgPSAyLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBORkJMSyA9IDMsCiAgTkZDSFIgPSA0LAogIE5GTE5LID0gNSwKICBORlNPQ0sgPSA2LAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBORkJBRCA9IDcsCiAgTkZGSUZPID0gOAogfTsKLQogI2VuZGlmCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25mczIuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZnMyLmgKaW5kZXggMWJiNWRmMi4uMGY2ZmNmOCAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25mczIuaAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmZzMi5oCkBAIC03LDY5ICs3LDg0IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfTElOVVhfTkZTMl9ICiAjZGVmaW5lIF9MSU5VWF9ORlMyX0gKLQogI2RlZmluZSBORlMyX1BPUlQgMjA0OQogI2RlZmluZSBORlMyX01BWERBVEEgODE5MgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTkZTMl9NQVhQQVRITEVOIDEwMjQKICNkZWZpbmUgTkZTMl9NQVhOQU1MRU4gMjU1CiAjZGVmaW5lIE5GUzJfTUFYR1JPVVBTIDE2CiAjZGVmaW5lIE5GUzJfRkhTSVpFIDMyCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBORlMyX0NPT0tJRVNJWkUgNAogI2RlZmluZSBORlMyX0ZJRk9fREVWICgtMSkKICNkZWZpbmUgTkZTMk1PREVfRk1UIDAxNzAwMDAKICNkZWZpbmUgTkZTMk1PREVfRElSIDAwNDAwMDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE5GUzJNT0RFX0NIUiAwMDIwMDAwCiAjZGVmaW5lIE5GUzJNT0RFX0JMSyAwMDYwMDAwCiAjZGVmaW5lIE5GUzJNT0RFX1JFRyAwMTAwMDAwCiAjZGVmaW5lIE5GUzJNT0RFX0xOSyAwMTIwMDAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBORlMyTU9ERV9TT0NLIDAxNDAwMDAKICNkZWZpbmUgTkZTMk1PREVfRklGTyAwMDEwMDAwCi0KIGVudW0gbmZzMl9mdHlwZSB7CiAgTkYyTk9OID0gMCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkYyUkVHID0gMSwKICBORjJESVIgPSAyLAogIE5GMkJMSyA9IDMsCiAgTkYyQ0hSID0gNCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkYyTE5LID0gNSwKICBORjJTT0NLID0gNiwKICBORjJCQUQgPSA3LAogIE5GMkZJRk8gPSA4CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKLQogc3RydWN0IG5mczJfZmggewogIGNoYXIgZGF0YVtORlMyX0ZIU0laRV07CiB9OwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBORlMyX1ZFUlNJT04gMgogI2RlZmluZSBORlNQUk9DX05VTEwgMAogI2RlZmluZSBORlNQUk9DX0dFVEFUVFIgMQogI2RlZmluZSBORlNQUk9DX1NFVEFUVFIgMgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTkZTUFJPQ19ST09UIDMKICNkZWZpbmUgTkZTUFJPQ19MT09LVVAgNAogI2RlZmluZSBORlNQUk9DX1JFQURMSU5LIDUKICNkZWZpbmUgTkZTUFJPQ19SRUFEIDYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE5GU1BST0NfV1JJVEVDQUNIRSA3CiAjZGVmaW5lIE5GU1BST0NfV1JJVEUgOAogI2RlZmluZSBORlNQUk9DX0NSRUFURSA5CiAjZGVmaW5lIE5GU1BST0NfUkVNT1ZFIDEwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBORlNQUk9DX1JFTkFNRSAxMQogI2RlZmluZSBORlNQUk9DX0xJTksgMTIKICNkZWZpbmUgTkZTUFJPQ19TWU1MSU5LIDEzCiAjZGVmaW5lIE5GU1BST0NfTUtESVIgMTQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE5GU1BST0NfUk1ESVIgMTUKICNkZWZpbmUgTkZTUFJPQ19SRUFERElSIDE2CiAjZGVmaW5lIE5GU1BST0NfU1RBVEZTIDE3Ci0KICNkZWZpbmUgTkZTX01OVF9QUk9HUkFNIDEwMDAwNQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTkZTX01OVF9WRVJTSU9OIDEKICNkZWZpbmUgTU5UUFJPQ19OVUxMIDAKICNkZWZpbmUgTU5UUFJPQ19NTlQgMQogI2RlZmluZSBNTlRQUk9DX1VNTlQgMworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTU5UUFJPQ19VTU5UQUxMIDQKLQogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmZzMy5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25mczMuaAppbmRleCA4MzAzNDU5Li42YmFjOTlkIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmZzMy5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZnMzLmgKQEAgLTcsMTAyICs3LDExOCBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX0xJTlVYX05GUzNfSAogI2RlZmluZSBfTElOVVhfTkZTM19ICi0KICNkZWZpbmUgTkZTM19QT1JUIDIwNDkKICNkZWZpbmUgTkZTM19NQVhEQVRBIDMyNzY4CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBORlMzX01BWFBBVEhMRU4gUEFUSF9NQVgKICNkZWZpbmUgTkZTM19NQVhOQU1MRU4gTkFNRV9NQVgKICNkZWZpbmUgTkZTM19NQVhHUk9VUFMgMTYKICNkZWZpbmUgTkZTM19GSFNJWkUgNjQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE5GUzNfQ09PS0lFU0laRSA0CiAjZGVmaW5lIE5GUzNfRklGT19ERVYgKC0xKQogI2RlZmluZSBORlMzTU9ERV9GTVQgMDE3MDAwMAogI2RlZmluZSBORlMzTU9ERV9ESVIgMDA0MDAwMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTkZTM01PREVfQ0hSIDAwMjAwMDAKICNkZWZpbmUgTkZTM01PREVfQkxLIDAwNjAwMDAKICNkZWZpbmUgTkZTM01PREVfUkVHIDAxMDAwMDAKICNkZWZpbmUgTkZTM01PREVfTE5LIDAxMjAwMDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE5GUzNNT0RFX1NPQ0sgMDE0MDAwMAogI2RlZmluZSBORlMzTU9ERV9GSUZPIDAwMTAwMDAKLQogI2RlZmluZSBORlMzX0FDQ0VTU19SRUFEIDB4MDAwMQogI2RlZmluZSBORlMzX0FDQ0VTU19MT09LVVAgMHgwMDAyCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBORlMzX0FDQ0VTU19NT0RJRlkgMHgwMDA0CiAjZGVmaW5lIE5GUzNfQUNDRVNTX0VYVEVORCAweDAwMDgKICNkZWZpbmUgTkZTM19BQ0NFU1NfREVMRVRFIDB4MDAxMAogI2RlZmluZSBORlMzX0FDQ0VTU19FWEVDVVRFIDB4MDAyMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTkZTM19BQ0NFU1NfRlVMTCAweDAwM2YKLQogZW51bSBuZnMzX2NyZWF0ZW1vZGUgewogIE5GUzNfQ1JFQVRFX1VOQ0hFQ0tFRCA9IDAsCiAgTkZTM19DUkVBVEVfR1VBUkRFRCA9IDEsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5GUzNfQ1JFQVRFX0VYQ0xVU0lWRSA9IDIKIH07Ci0KICNkZWZpbmUgTkZTM19GU0ZfTElOSyAweDAwMDEKICNkZWZpbmUgTkZTM19GU0ZfU1lNTElOSyAweDAwMDIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE5GUzNfRlNGX0hPTU9HRU5FT1VTIDB4MDAwOAogI2RlZmluZSBORlMzX0ZTRl9DQU5TRVRUSU1FIDB4MDAxMAotCiAjZGVmaW5lIE5GUzNfRlNGX0RFRkFVTFQgMHgwMDFCCiAjZGVmaW5lIE5GUzNfRlNGX0JJTExZQk9ZIDB4MDAxOAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTkZTM19GU0ZfUkVBRE9OTFkgMHgwMDA4Ci0KIGVudW0gbmZzM19mdHlwZSB7CiAgTkYzTk9OID0gMCwKICBORjNSRUcgPSAxLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBORjNESVIgPSAyLAogIE5GM0JMSyA9IDMsCiAgTkYzQ0hSID0gNCwKICBORjNMTksgPSA1LAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBORjNTT0NLID0gNiwKICBORjNGSUZPID0gNywKICBORjNCQUQgPSA4CiB9OwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IG5mczNfZmggewogIHVuc2lnbmVkIHNob3J0IHNpemU7CiAgdW5zaWduZWQgY2hhciBkYXRhW05GUzNfRkhTSVpFXTsKIH07Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE5GUzNfVkVSU0lPTiAzCiAjZGVmaW5lIE5GUzNQUk9DX05VTEwgMAogI2RlZmluZSBORlMzUFJPQ19HRVRBVFRSIDEKICNkZWZpbmUgTkZTM1BST0NfU0VUQVRUUiAyCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBORlMzUFJPQ19MT09LVVAgMwogI2RlZmluZSBORlMzUFJPQ19BQ0NFU1MgNAogI2RlZmluZSBORlMzUFJPQ19SRUFETElOSyA1CiAjZGVmaW5lIE5GUzNQUk9DX1JFQUQgNgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTkZTM1BST0NfV1JJVEUgNwogI2RlZmluZSBORlMzUFJPQ19DUkVBVEUgOAogI2RlZmluZSBORlMzUFJPQ19NS0RJUiA5CiAjZGVmaW5lIE5GUzNQUk9DX1NZTUxJTksgMTAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE5GUzNQUk9DX01LTk9EIDExCiAjZGVmaW5lIE5GUzNQUk9DX1JFTU9WRSAxMgogI2RlZmluZSBORlMzUFJPQ19STURJUiAxMwogI2RlZmluZSBORlMzUFJPQ19SRU5BTUUgMTQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE5GUzNQUk9DX0xJTksgMTUKICNkZWZpbmUgTkZTM1BST0NfUkVBRERJUiAxNgogI2RlZmluZSBORlMzUFJPQ19SRUFERElSUExVUyAxNwogI2RlZmluZSBORlMzUFJPQ19GU1NUQVQgMTgKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE5GUzNQUk9DX0ZTSU5GTyAxOQogI2RlZmluZSBORlMzUFJPQ19QQVRIQ09ORiAyMAogI2RlZmluZSBORlMzUFJPQ19DT01NSVQgMjEKLQogI2RlZmluZSBORlNfTU5UM19QUk9HUkFNIDEwMDAwNQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTkZTX01OVDNfVkVSU0lPTiAzCiAjZGVmaW5lIE1PVU5UUFJPQzNfTlVMTCAwCiAjZGVmaW5lIE1PVU5UUFJPQzNfTU5UIDEKICNkZWZpbmUgTU9VTlRQUk9DM19VTU5UIDMKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1PVU5UUFJPQzNfVU1OVEFMTCA0Ci0KICNpZmRlZiBORlNfTkVFRF9LRVJORUxfVFlQRVMKLQogI2RlZmluZSBORlMzX1BPU1RfT1BfQVRUUl9XT1JEUyAyMgotCiAjZW5kaWYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZnM0LmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmZzNC5oCmluZGV4IDJlOTVlNDUuLmY3NDA0YzAgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZnM0LmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25mczQuaApAQCAtNyw5MyArNywxMDQgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9MSU5VWF9ORlM0X0gKICNkZWZpbmUgX0xJTlVYX05GUzRfSAotCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLQogI2RlZmluZSBORlM0X1ZFUklGSUVSX1NJWkUgOAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTkZTNF9GSFNJWkUgMTI4CiAjZGVmaW5lIE5GUzRfTUFYUEFUSExFTiBQQVRIX01BWAogI2RlZmluZSBORlM0X01BWE5BTUxFTiBOQU1FX01BWAotCiAjZGVmaW5lIE5GUzRfQUNDRVNTX1JFQUQgMHgwMDAxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBORlM0X0FDQ0VTU19MT09LVVAgMHgwMDAyCiAjZGVmaW5lIE5GUzRfQUNDRVNTX01PRElGWSAweDAwMDQKICNkZWZpbmUgTkZTNF9BQ0NFU1NfRVhURU5EIDB4MDAwOAogI2RlZmluZSBORlM0X0FDQ0VTU19ERUxFVEUgMHgwMDEwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBORlM0X0FDQ0VTU19FWEVDVVRFIDB4MDAyMAotCiAjZGVmaW5lIE5GUzRfRkhfUEVSU0lTVEVOVCAweDAwMDAKICNkZWZpbmUgTkZTNF9GSF9OT0VYUElSRV9XSVRIX09QRU4gMHgwMDAxCiAjZGVmaW5lIE5GUzRfRkhfVk9MQVRJTEVfQU5ZIDB4MDAwMgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTkZTNF9GSF9WT0xfTUlHUkFUSU9OIDB4MDAwNAogI2RlZmluZSBORlM0X0ZIX1ZPTF9SRU5BTUUgMHgwMDA4Ci0KICNkZWZpbmUgTkZTNF9PUEVOX1JFU1VMVF9DT05GSVJNIDB4MDAwMgogI2RlZmluZSBORlM0X09QRU5fUkVTVUxUX0xPQ0tUWVBFX1BPU0lYIDB4MDAwNAotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBORlM0X1NIQVJFX0FDQ0VTU19SRUFEIDB4MDAwMQogI2RlZmluZSBORlM0X1NIQVJFX0FDQ0VTU19XUklURSAweDAwMDIKICNkZWZpbmUgTkZTNF9TSEFSRV9BQ0NFU1NfQk9USCAweDAwMDMKICNkZWZpbmUgTkZTNF9TSEFSRV9ERU5ZX1JFQUQgMHgwMDAxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBORlM0X1NIQVJFX0RFTllfV1JJVEUgMHgwMDAyCiAjZGVmaW5lIE5GUzRfU0hBUkVfREVOWV9CT1RIIDB4MDAwMwotCiAjZGVmaW5lIE5GUzRfU0VUX1RPX1NFUlZFUl9USU1FIDAKICNkZWZpbmUgTkZTNF9TRVRfVE9fQ0xJRU5UX1RJTUUgMQotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBORlM0X0FDRV9BQ0NFU1NfQUxMT1dFRF9BQ0VfVFlQRSAwCiAjZGVmaW5lIE5GUzRfQUNFX0FDQ0VTU19ERU5JRURfQUNFX1RZUEUgMQogI2RlZmluZSBORlM0X0FDRV9TWVNURU1fQVVESVRfQUNFX1RZUEUgMgogI2RlZmluZSBORlM0X0FDRV9TWVNURU1fQUxBUk1fQUNFX1RZUEUgMwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBQ0w0X1NVUFBPUlRfQUxMT1dfQUNMIDB4MDEKICNkZWZpbmUgQUNMNF9TVVBQT1JUX0RFTllfQUNMIDB4MDIKICNkZWZpbmUgQUNMNF9TVVBQT1JUX0FVRElUX0FDTCAweDA0CiAjZGVmaW5lIEFDTDRfU1VQUE9SVF9BTEFSTV9BQ0wgMHgwOAotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBORlM0X0FDRV9GSUxFX0lOSEVSSVRfQUNFIDB4MDAwMDAwMDEKICNkZWZpbmUgTkZTNF9BQ0VfRElSRUNUT1JZX0lOSEVSSVRfQUNFIDB4MDAwMDAwMDIKICNkZWZpbmUgTkZTNF9BQ0VfTk9fUFJPUEFHQVRFX0lOSEVSSVRfQUNFIDB4MDAwMDAwMDQKICNkZWZpbmUgTkZTNF9BQ0VfSU5IRVJJVF9PTkxZX0FDRSAweDAwMDAwMDA4CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBORlM0X0FDRV9TVUNDRVNTRlVMX0FDQ0VTU19BQ0VfRkxBRyAweDAwMDAwMDEwCiAjZGVmaW5lIE5GUzRfQUNFX0ZBSUxFRF9BQ0NFU1NfQUNFX0ZMQUcgMHgwMDAwMDAyMAogI2RlZmluZSBORlM0X0FDRV9JREVOVElGSUVSX0dST1VQIDB4MDAwMDAwNDAKICNkZWZpbmUgTkZTNF9BQ0VfT1dORVIgMHgwMDAwMDA4MAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTkZTNF9BQ0VfR1JPVVAgMHgwMDAwMDEwMAogI2RlZmluZSBORlM0X0FDRV9FVkVSWU9ORSAweDAwMDAwMjAwCi0KICNkZWZpbmUgTkZTNF9BQ0VfUkVBRF9EQVRBIDB4MDAwMDAwMDEKICNkZWZpbmUgTkZTNF9BQ0VfTElTVF9ESVJFQ1RPUlkgMHgwMDAwMDAwMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTkZTNF9BQ0VfV1JJVEVfREFUQSAweDAwMDAwMDAyCiAjZGVmaW5lIE5GUzRfQUNFX0FERF9GSUxFIDB4MDAwMDAwMDIKICNkZWZpbmUgTkZTNF9BQ0VfQVBQRU5EX0RBVEEgMHgwMDAwMDAwNAogI2RlZmluZSBORlM0X0FDRV9BRERfU1VCRElSRUNUT1JZIDB4MDAwMDAwMDQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE5GUzRfQUNFX1JFQURfTkFNRURfQVRUUlMgMHgwMDAwMDAwOAogI2RlZmluZSBORlM0X0FDRV9XUklURV9OQU1FRF9BVFRSUyAweDAwMDAwMDEwCiAjZGVmaW5lIE5GUzRfQUNFX0VYRUNVVEUgMHgwMDAwMDAyMAogI2RlZmluZSBORlM0X0FDRV9ERUxFVEVfQ0hJTEQgMHgwMDAwMDA0MAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTkZTNF9BQ0VfUkVBRF9BVFRSSUJVVEVTIDB4MDAwMDAwODAKICNkZWZpbmUgTkZTNF9BQ0VfV1JJVEVfQVRUUklCVVRFUyAweDAwMDAwMTAwCiAjZGVmaW5lIE5GUzRfQUNFX0RFTEVURSAweDAwMDEwMDAwCiAjZGVmaW5lIE5GUzRfQUNFX1JFQURfQUNMIDB4MDAwMjAwMDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE5GUzRfQUNFX1dSSVRFX0FDTCAweDAwMDQwMDAwCiAjZGVmaW5lIE5GUzRfQUNFX1dSSVRFX09XTkVSIDB4MDAwODAwMDAKICNkZWZpbmUgTkZTNF9BQ0VfU1lOQ0hST05JWkUgMHgwMDEwMDAwMAogI2RlZmluZSBORlM0X0FDRV9HRU5FUklDX1JFQUQgMHgwMDEyMDA4MQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTkZTNF9BQ0VfR0VORVJJQ19XUklURSAweDAwMTYwMTA2CiAjZGVmaW5lIE5GUzRfQUNFX0dFTkVSSUNfRVhFQ1VURSAweDAwMTIwMEEwCiAjZGVmaW5lIE5GUzRfQUNFX01BU0tfQUxMIDB4MDAxRjAxRkYKLQogZW51bSBuZnM0X2FjbF93aG90eXBlIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkZTNF9BQ0xfV0hPX05BTUVEID0gMCwKICBORlM0X0FDTF9XSE9fT1dORVIsCiAgTkZTNF9BQ0xfV0hPX0dST1VQLAogIE5GUzRfQUNMX1dIT19FVkVSWU9ORSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwotCiAjZW5kaWYKLQpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25mc194ZHIuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZnNfeGRyLmgKaW5kZXggNDhmZTI2Mi4uNGRkZWNkNyAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25mc194ZHIuaAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmZzX3hkci5oCkBAIC03LDU1MCArNyw2NDIgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9MSU5VWF9ORlNfWERSX0gKICNkZWZpbmUgX0xJTlVYX05GU19YRFJfSAotCiAjaW5jbHVkZSA8bGludXgvc3VucnBjL3hwcnQuaD4KICNpbmNsdWRlIDxsaW51eC9uZnNhY2wuaD4KLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTkZTX01BWF9GSUxFX0lPX1NJWkUgKDEwNDg1NzZVKQogI2RlZmluZSBORlNfREVGX0ZJTEVfSU9fU0laRSAoNDA5NlUpCiAjZGVmaW5lIE5GU19NSU5fRklMRV9JT19TSVpFICgxMDI0VSkKLQogc3RydWN0IG5mc19mc2lkIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdWludDY0X3QgbWFqb3I7CiAgdWludDY0X3QgbWlub3I7CiB9OwotCi0jZGVmaW5lIE5GU19BVFRSX1dDQyAweDAwMDEgIAotI2RlZmluZSBORlNfQVRUUl9GQVRUUiAweDAwMDIgIAotI2RlZmluZSBORlNfQVRUUl9GQVRUUl9WMyAweDAwMDQgIAotI2RlZmluZSBORlNfQVRUUl9GQVRUUl9WNCAweDAwMDggIAotI2RlZmluZSBORlNfQVRUUl9GQVRUUl9WNF9SRUZFUlJBTCAweDAwMTAgIAotCitzdHJ1Y3QgbmZzX2ZhdHRyIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgdW5zaWduZWQgc2hvcnQgdmFsaWQ7CisgX191NjQgcHJlX3NpemU7Cisgc3RydWN0IHRpbWVzcGVjIHByZV9tdGltZTsKKyBzdHJ1Y3QgdGltZXNwZWMgcHJlX2N0aW1lOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBlbnVtIG5mc19mdHlwZSB0eXBlOworIF9fdTMyIG1vZGU7CisgX191MzIgbmxpbms7CisgX191MzIgdWlkOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UzMiBnaWQ7CisgX191NjQgc2l6ZTsKKyB1bmlvbiB7Cisgc3RydWN0IHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MzIgYmxvY2tzaXplOworIF9fdTMyIGJsb2NrczsKKyB9IG5mczI7Cisgc3RydWN0IHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191NjQgdXNlZDsKKyB9IG5mczM7CisgfSBkdTsKKyBkZXZfdCByZGV2OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBzdHJ1Y3QgbmZzX2ZzaWQgZnNpZDsKKyBfX3U2NCBmaWxlaWQ7Cisgc3RydWN0IHRpbWVzcGVjIGF0aW1lOworIHN0cnVjdCB0aW1lc3BlYyBtdGltZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgc3RydWN0IHRpbWVzcGVjIGN0aW1lOworIF9fdTMyIGJpdG1hcFsyXTsKKyBfX3U2NCBjaGFuZ2VfYXR0cjsKKyBfX3U2NCBwcmVfY2hhbmdlX2F0dHI7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIHVuc2lnbmVkIGxvbmcgdGltZV9zdGFydDsKK307CisjZGVmaW5lIE5GU19BVFRSX1dDQyAweDAwMDEKKyNkZWZpbmUgTkZTX0FUVFJfRkFUVFIgMHgwMDAyCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBORlNfQVRUUl9GQVRUUl9WMyAweDAwMDQKKyNkZWZpbmUgTkZTX0FUVFJfRkFUVFJfVjQgMHgwMDA4CisjZGVmaW5lIE5GU19BVFRSX0ZBVFRSX1Y0X1JFRkVSUkFMIDB4MDAxMAogc3RydWN0IG5mc19mc2luZm8geworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgbmZzX2ZhdHRyICpmYXR0cjsKICBfX3UzMiBydG1heDsKICBfX3UzMiBydHByZWY7CiAgX191MzIgcnRtdWx0OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiB3dG1heDsKICBfX3UzMiB3dHByZWY7CiAgX191MzIgd3RtdWx0OwogIF9fdTMyIGR0cHJlZjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191NjQgbWF4ZmlsZXNpemU7CiAgX191MzIgbGVhc2VfdGltZTsKIH07Ci0KIHN0cnVjdCBuZnNfZnNzdGF0IHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IG5mc19mYXR0ciAqZmF0dHI7CiAgX191NjQgdGJ5dGVzOwogIF9fdTY0IGZieXRlczsKICBfX3U2NCBhYnl0ZXM7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTY0IHRmaWxlczsKICBfX3U2NCBmZmlsZXM7CiAgX191NjQgYWZpbGVzOwogfTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBuZnMyX2Zzc3RhdCB7CiAgX191MzIgdHNpemU7CiAgX191MzIgYnNpemU7CiAgX191MzIgYmxvY2tzOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBiZnJlZTsKICBfX3UzMiBiYXZhaWw7CiB9OwotCiBzdHJ1Y3QgbmZzX3BhdGhjb25mIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IG5mc19mYXR0ciAqZmF0dHI7CiAgX191MzIgbWF4X2xpbms7CiAgX191MzIgbWF4X25hbWVsZW47CiB9OwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IG5mczRfY2hhbmdlX2luZm8gewogIHUzMiBhdG9taWM7CiAgdTY0IGJlZm9yZTsKICB1NjQgYWZ0ZXI7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKLQogc3RydWN0IG5mc19zZXFpZDsKLQogc3RydWN0IG5mc19vcGVuYXJncyB7CiAgY29uc3Qgc3RydWN0IG5mc19maCAqIGZoOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgbmZzX3NlcWlkICogc2VxaWQ7CiAgaW50IG9wZW5fZmxhZ3M7CiAgX191NjQgY2xpZW50aWQ7CiAgX191MzIgaWQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuaW9uIHsKICBzdHJ1Y3QgaWF0dHIgKiBhdHRyczsKICBuZnM0X3ZlcmlmaWVyIHZlcmlmaWVyOwogIG5mczRfc3RhdGVpZCBkZWxlZ2F0aW9uOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBpbnQgZGVsZWdhdGlvbl90eXBlOwogIH0gdTsKICBjb25zdCBzdHJ1Y3QgcXN0ciAqIG5hbWU7CiAgY29uc3Qgc3RydWN0IG5mc19zZXJ2ZXIgKnNlcnZlcjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgY29uc3QgdTMyICogYml0bWFzazsKICBfX3UzMiBjbGFpbTsKIH07Ci0KIHN0cnVjdCBuZnNfb3BlbnJlcyB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIG5mczRfc3RhdGVpZCBzdGF0ZWlkOwogIHN0cnVjdCBuZnNfZmggZmg7CiAgc3RydWN0IG5mczRfY2hhbmdlX2luZm8gY2luZm87CiAgX191MzIgcmZsYWdzOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgbmZzX2ZhdHRyICogZl9hdHRyOwogIHN0cnVjdCBuZnNfZmF0dHIgKiBkaXJfYXR0cjsKICBjb25zdCBzdHJ1Y3QgbmZzX3NlcnZlciAqc2VydmVyOwogIGludCBkZWxlZ2F0aW9uX3R5cGU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIG5mczRfc3RhdGVpZCBkZWxlZ2F0aW9uOwogIF9fdTMyIGRvX3JlY2FsbDsKICBfX3U2NCBtYXhzaXplOwogfTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBuZnNfb3Blbl9jb25maXJtYXJncyB7CiAgY29uc3Qgc3RydWN0IG5mc19maCAqIGZoOwogIG5mczRfc3RhdGVpZCAqIHN0YXRlaWQ7CiAgc3RydWN0IG5mc19zZXFpZCAqIHNlcWlkOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07Ci0KIHN0cnVjdCBuZnNfb3Blbl9jb25maXJtcmVzIHsKICBuZnM0X3N0YXRlaWQgc3RhdGVpZDsKIH07Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgbmZzX2Nsb3NlYXJncyB7CiAgc3RydWN0IG5mc19maCAqIGZoOwogIG5mczRfc3RhdGVpZCAqIHN0YXRlaWQ7CiAgc3RydWN0IG5mc19zZXFpZCAqIHNlcWlkOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBpbnQgb3Blbl9mbGFnczsKICBjb25zdCB1MzIgKiBiaXRtYXNrOwogfTsKLQogc3RydWN0IG5mc19jbG9zZXJlcyB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIG5mczRfc3RhdGVpZCBzdGF0ZWlkOwogIHN0cnVjdCBuZnNfZmF0dHIgKiBmYXR0cjsKICBjb25zdCBzdHJ1Y3QgbmZzX3NlcnZlciAqc2VydmVyOwogfTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBuZnNfbG93bmVyIHsKICBfX3U2NCBjbGllbnRpZDsKICB1MzIgaWQ7CiB9OwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IG5mc19sb2NrX2FyZ3MgewogIHN0cnVjdCBuZnNfZmggKiBmaDsKICBzdHJ1Y3QgZmlsZV9sb2NrICogZmw7CiAgc3RydWN0IG5mc19zZXFpZCAqIGxvY2tfc2VxaWQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIG5mczRfc3RhdGVpZCAqIGxvY2tfc3RhdGVpZDsKICBzdHJ1Y3QgbmZzX3NlcWlkICogb3Blbl9zZXFpZDsKICBuZnM0X3N0YXRlaWQgKiBvcGVuX3N0YXRlaWQ7CiAgc3RydWN0IG5mc19sb3duZXIgbG9ja19vd25lcjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgY2hhciBibG9jayA6IDE7CiAgdW5zaWduZWQgY2hhciByZWNsYWltIDogMTsKICB1bnNpZ25lZCBjaGFyIG5ld19sb2NrX293bmVyIDogMTsKIH07Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgbmZzX2xvY2tfcmVzIHsKICBuZnM0X3N0YXRlaWQgc3RhdGVpZDsKIH07Ci0KIHN0cnVjdCBuZnNfbG9ja3VfYXJncyB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCBuZnNfZmggKiBmaDsKICBzdHJ1Y3QgZmlsZV9sb2NrICogZmw7CiAgc3RydWN0IG5mc19zZXFpZCAqIHNlcWlkOwogIG5mczRfc3RhdGVpZCAqIHN0YXRlaWQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKLQogc3RydWN0IG5mc19sb2NrdV9yZXMgewogIG5mczRfc3RhdGVpZCBzdGF0ZWlkOwogfTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBuZnNfbG9ja3RfYXJncyB7CiAgc3RydWN0IG5mc19maCAqIGZoOwogIHN0cnVjdCBmaWxlX2xvY2sgKiBmbDsKICBzdHJ1Y3QgbmZzX2xvd25lciBsb2NrX293bmVyOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07Ci0KIHN0cnVjdCBuZnNfbG9ja3RfcmVzIHsKICBzdHJ1Y3QgZmlsZV9sb2NrICogZGVuaWVkOwogfTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBuZnM0X2RlbGVncmV0dXJuYXJncyB7CiAgY29uc3Qgc3RydWN0IG5mc19maCAqZmhhbmRsZTsKICBjb25zdCBuZnM0X3N0YXRlaWQgKnN0YXRlaWQ7CiAgY29uc3QgdTMyICogYml0bWFzazsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwotCiBzdHJ1Y3QgbmZzNF9kZWxlZ3JldHVybnJlcyB7CiAgc3RydWN0IG5mc19mYXR0ciAqIGZhdHRyOwogIGNvbnN0IHN0cnVjdCBuZnNfc2VydmVyICpzZXJ2ZXI7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKLQogc3RydWN0IG5mc19yZWFkYXJncyB7CiAgc3RydWN0IG5mc19maCAqIGZoOwogIHN0cnVjdCBuZnNfb3Blbl9jb250ZXh0ICpjb250ZXh0OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U2NCBvZmZzZXQ7CiAgX191MzIgY291bnQ7CiAgdW5zaWduZWQgaW50IHBnYmFzZTsKICBzdHJ1Y3QgcGFnZSAqKiBwYWdlczsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwotCiBzdHJ1Y3QgbmZzX3JlYWRyZXMgewogIHN0cnVjdCBuZnNfZmF0dHIgKiBmYXR0cjsKICBfX3UzMiBjb3VudDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgaW50IGVvZjsKIH07Ci0KIHN0cnVjdCBuZnNfd3JpdGVhcmdzIHsKICBzdHJ1Y3QgbmZzX2ZoICogZmg7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCBuZnNfb3Blbl9jb250ZXh0ICpjb250ZXh0OwogIF9fdTY0IG9mZnNldDsKICBfX3UzMiBjb3VudDsKICBlbnVtIG5mczNfc3RhYmxlX2hvdyBzdGFibGU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGludCBwZ2Jhc2U7CiAgc3RydWN0IHBhZ2UgKiogcGFnZXM7CiAgY29uc3QgdTMyICogYml0bWFzazsKIH07Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgbmZzX3dyaXRldmVyZiB7CiAgZW51bSBuZnMzX3N0YWJsZV9ob3cgY29tbWl0dGVkOwogIF9fdTMyIHZlcmlmaWVyWzJdOwogfTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBuZnNfd3JpdGVyZXMgewogIHN0cnVjdCBuZnNfZmF0dHIgKiBmYXR0cjsKICBzdHJ1Y3QgbmZzX3dyaXRldmVyZiAqIHZlcmY7CiAgX191MzIgY291bnQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGNvbnN0IHN0cnVjdCBuZnNfc2VydmVyICpzZXJ2ZXI7CiB9OwotCiBzdHJ1Y3QgbmZzX2VudHJ5IHsKICBfX3U2NCBpbm87CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTY0IGNvb2tpZSwKICBwcmV2X2Nvb2tpZTsKICBjb25zdCBjaGFyICogbmFtZTsKICB1bnNpZ25lZCBpbnQgbGVuOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBpbnQgZW9mOwogIHN0cnVjdCBuZnNfZmggKiBmaDsKICBzdHJ1Y3QgbmZzX2ZhdHRyICogZmF0dHI7CiB9OwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IG5mc19zYXR0cmFyZ3MgewogIHN0cnVjdCBuZnNfZmggKiBmaDsKICBzdHJ1Y3QgaWF0dHIgKiBzYXR0cjsKIH07Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgbmZzX2Rpcm9wYXJncyB7CiAgc3RydWN0IG5mc19maCAqIGZoOwogIGNvbnN0IGNoYXIgKiBuYW1lOwogIHVuc2lnbmVkIGludCBsZW47CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKLQogc3RydWN0IG5mc19jcmVhdGVhcmdzIHsKICBzdHJ1Y3QgbmZzX2ZoICogZmg7CiAgY29uc3QgY2hhciAqIG5hbWU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGludCBsZW47CiAgc3RydWN0IGlhdHRyICogc2F0dHI7CiB9OwotCiBzdHJ1Y3QgbmZzX3JlbmFtZWFyZ3MgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgbmZzX2ZoICogZnJvbWZoOwogIGNvbnN0IGNoYXIgKiBmcm9tbmFtZTsKICB1bnNpZ25lZCBpbnQgZnJvbWxlbjsKICBzdHJ1Y3QgbmZzX2ZoICogdG9maDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgY29uc3QgY2hhciAqIHRvbmFtZTsKICB1bnNpZ25lZCBpbnQgdG9sZW47CiB9OwotCiBzdHJ1Y3QgbmZzX3NldGF0dHJhcmdzIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IG5mc19maCAqIGZoOwogIG5mczRfc3RhdGVpZCBzdGF0ZWlkOwogIHN0cnVjdCBpYXR0ciAqIGlhcDsKICBjb25zdCBzdHJ1Y3QgbmZzX3NlcnZlciAqIHNlcnZlcjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgY29uc3QgdTMyICogYml0bWFzazsKIH07Ci0KIHN0cnVjdCBuZnNfc2V0YWNsYXJncyB7CiAgc3RydWN0IG5mc19maCAqIGZoOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzaXplX3QgYWNsX2xlbjsKICB1bnNpZ25lZCBpbnQgYWNsX3BnYmFzZTsKICBzdHJ1Y3QgcGFnZSAqKiBhY2xfcGFnZXM7CiB9OwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IG5mc19nZXRhY2xhcmdzIHsKICBzdHJ1Y3QgbmZzX2ZoICogZmg7CiAgc2l6ZV90IGFjbF9sZW47CiAgdW5zaWduZWQgaW50IGFjbF9wZ2Jhc2U7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCBwYWdlICoqIGFjbF9wYWdlczsKIH07Ci0KIHN0cnVjdCBuZnNfc2V0YXR0cnJlcyB7CiAgc3RydWN0IG5mc19mYXR0ciAqIGZhdHRyOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBjb25zdCBzdHJ1Y3QgbmZzX3NlcnZlciAqIHNlcnZlcjsKIH07Ci0KIHN0cnVjdCBuZnNfbGlua2FyZ3MgewogIHN0cnVjdCBuZnNfZmggKiBmcm9tZmg7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCBuZnNfZmggKiB0b2ZoOwogIGNvbnN0IGNoYXIgKiB0b25hbWU7CiAgdW5zaWduZWQgaW50IHRvbGVuOwogfTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBuZnNfc3ltbGlua2FyZ3MgewogIHN0cnVjdCBuZnNfZmggKiBmcm9tZmg7CiAgY29uc3QgY2hhciAqIGZyb21uYW1lOwogIHVuc2lnbmVkIGludCBmcm9tbGVuOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBjb25zdCBjaGFyICogdG9wYXRoOwogIHVuc2lnbmVkIGludCB0b2xlbjsKICBzdHJ1Y3QgaWF0dHIgKiBzYXR0cjsKIH07Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgbmZzX3JlYWRkaXJhcmdzIHsKICBzdHJ1Y3QgbmZzX2ZoICogZmg7CiAgX191MzIgY29va2llOwogIHVuc2lnbmVkIGludCBjb3VudDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IHBhZ2UgKiogcGFnZXM7CiB9OwotCiBzdHJ1Y3QgbmZzM19nZXRhY2xhcmdzIHsKICBzdHJ1Y3QgbmZzX2ZoICogZmg7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGludCBtYXNrOwogIHN0cnVjdCBwYWdlICoqIHBhZ2VzOwogfTsKLQogc3RydWN0IG5mczNfc2V0YWNsYXJncyB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCBpbm9kZSAqIGlub2RlOwogIGludCBtYXNrOwogIHN0cnVjdCBwb3NpeF9hY2wgKiBhY2xfYWNjZXNzOwogIHN0cnVjdCBwb3NpeF9hY2wgKiBhY2xfZGVmYXVsdDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IHBhZ2UgKiogcGFnZXM7CiB9OwotCiBzdHJ1Y3QgbmZzX2Rpcm9wb2sgewogIHN0cnVjdCBuZnNfZmggKiBmaDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IG5mc19mYXR0ciAqIGZhdHRyOwogfTsKLQogc3RydWN0IG5mc19yZWFkbGlua2FyZ3MgewogIHN0cnVjdCBuZnNfZmggKiBmaDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgaW50IHBnYmFzZTsKICB1bnNpZ25lZCBpbnQgcGdsZW47CiAgc3RydWN0IHBhZ2UgKiogcGFnZXM7CiB9OwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IG5mczNfc2F0dHJhcmdzIHsKICBzdHJ1Y3QgbmZzX2ZoICogZmg7CiAgc3RydWN0IGlhdHRyICogc2F0dHI7CiAgdW5zaWduZWQgaW50IGd1YXJkOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgdGltZXNwZWMgZ3VhcmR0aW1lOwogfTsKLQogc3RydWN0IG5mczNfZGlyb3BhcmdzIHsKICBzdHJ1Y3QgbmZzX2ZoICogZmg7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGNvbnN0IGNoYXIgKiBuYW1lOwogIHVuc2lnbmVkIGludCBsZW47CiB9OwotCiBzdHJ1Y3QgbmZzM19hY2Nlc3NhcmdzIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IG5mc19maCAqIGZoOwogIF9fdTMyIGFjY2VzczsKIH07Ci0KIHN0cnVjdCBuZnMzX2NyZWF0ZWFyZ3MgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgbmZzX2ZoICogZmg7CiAgY29uc3QgY2hhciAqIG5hbWU7CiAgdW5zaWduZWQgaW50IGxlbjsKICBzdHJ1Y3QgaWF0dHIgKiBzYXR0cjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgZW51bSBuZnMzX2NyZWF0ZW1vZGUgY3JlYXRlbW9kZTsKICBfX3UzMiB2ZXJpZmllclsyXTsKIH07Ci0KIHN0cnVjdCBuZnMzX21rZGlyYXJncyB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCBuZnNfZmggKiBmaDsKICBjb25zdCBjaGFyICogbmFtZTsKICB1bnNpZ25lZCBpbnQgbGVuOwogIHN0cnVjdCBpYXR0ciAqIHNhdHRyOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07Ci0KIHN0cnVjdCBuZnMzX3N5bWxpbmthcmdzIHsKICBzdHJ1Y3QgbmZzX2ZoICogZnJvbWZoOwogIGNvbnN0IGNoYXIgKiBmcm9tbmFtZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgaW50IGZyb21sZW47CiAgY29uc3QgY2hhciAqIHRvcGF0aDsKICB1bnNpZ25lZCBpbnQgdG9sZW47CiAgc3RydWN0IGlhdHRyICogc2F0dHI7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKLQogc3RydWN0IG5mczNfbWtub2RhcmdzIHsKICBzdHJ1Y3QgbmZzX2ZoICogZmg7CiAgY29uc3QgY2hhciAqIG5hbWU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGludCBsZW47CiAgZW51bSBuZnMzX2Z0eXBlIHR5cGU7CiAgc3RydWN0IGlhdHRyICogc2F0dHI7CiAgZGV2X3QgcmRldjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwotCiBzdHJ1Y3QgbmZzM19yZW5hbWVhcmdzIHsKICBzdHJ1Y3QgbmZzX2ZoICogZnJvbWZoOwogIGNvbnN0IGNoYXIgKiBmcm9tbmFtZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgaW50IGZyb21sZW47CiAgc3RydWN0IG5mc19maCAqIHRvZmg7CiAgY29uc3QgY2hhciAqIHRvbmFtZTsKICB1bnNpZ25lZCBpbnQgdG9sZW47CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKLQogc3RydWN0IG5mczNfbGlua2FyZ3MgewogIHN0cnVjdCBuZnNfZmggKiBmcm9tZmg7CiAgc3RydWN0IG5mc19maCAqIHRvZmg7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGNvbnN0IGNoYXIgKiB0b25hbWU7CiAgdW5zaWduZWQgaW50IHRvbGVuOwogfTsKLQogc3RydWN0IG5mczNfcmVhZGRpcmFyZ3MgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgbmZzX2ZoICogZmg7CiAgX191NjQgY29va2llOwogIF9fdTMyIHZlcmZbMl07CiAgaW50IHBsdXM7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGludCBjb3VudDsKICBzdHJ1Y3QgcGFnZSAqKiBwYWdlczsKIH07Ci0KIHN0cnVjdCBuZnMzX2Rpcm9wcmVzIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IG5mc19mYXR0ciAqIGRpcl9hdHRyOwogIHN0cnVjdCBuZnNfZmggKiBmaDsKICBzdHJ1Y3QgbmZzX2ZhdHRyICogZmF0dHI7CiB9OwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IG5mczNfYWNjZXNzcmVzIHsKICBzdHJ1Y3QgbmZzX2ZhdHRyICogZmF0dHI7CiAgX191MzIgYWNjZXNzOwogfTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBuZnMzX3JlYWRsaW5rYXJncyB7CiAgc3RydWN0IG5mc19maCAqIGZoOwogIHVuc2lnbmVkIGludCBwZ2Jhc2U7CiAgdW5zaWduZWQgaW50IHBnbGVuOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgcGFnZSAqKiBwYWdlczsKIH07Ci0KIHN0cnVjdCBuZnMzX3JlbmFtZXJlcyB7CiAgc3RydWN0IG5mc19mYXR0ciAqIGZyb21hdHRyOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgbmZzX2ZhdHRyICogdG9hdHRyOwogfTsKLQogc3RydWN0IG5mczNfbGlua3JlcyB7CiAgc3RydWN0IG5mc19mYXR0ciAqIGRpcl9hdHRyOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgbmZzX2ZhdHRyICogZmF0dHI7CiB9OwotCiBzdHJ1Y3QgbmZzM19yZWFkZGlycmVzIHsKICBzdHJ1Y3QgbmZzX2ZhdHRyICogZGlyX2F0dHI7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyICogdmVyZjsKICBpbnQgcGx1czsKIH07Ci0KIHN0cnVjdCBuZnMzX2dldGFjbHJlcyB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCBuZnNfZmF0dHIgKiBmYXR0cjsKICBpbnQgbWFzazsKICB1bnNpZ25lZCBpbnQgYWNsX2FjY2Vzc19jb3VudDsKICB1bnNpZ25lZCBpbnQgYWNsX2RlZmF1bHRfY291bnQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCBwb3NpeF9hY2wgKiBhY2xfYWNjZXNzOwogIHN0cnVjdCBwb3NpeF9hY2wgKiBhY2xfZGVmYXVsdDsKIH07Ci0KIHN0cnVjdCBuZnNfcGFnZTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTkZTX1BBR0VWRUNfU0laRSAoOFUpCi0KIHN0cnVjdCBuZnNfcmVhZF9kYXRhIHsKICBpbnQgZmxhZ3M7CiAgc3RydWN0IHJwY190YXNrIHRhc2s7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCBpbm9kZSAqaW5vZGU7CiAgc3RydWN0IHJwY19jcmVkICpjcmVkOwogIHN0cnVjdCBuZnNfZmF0dHIgZmF0dHI7CiAgc3RydWN0IGxpc3RfaGVhZCBwYWdlczsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IG5mc19wYWdlICpyZXE7CiAgc3RydWN0IHBhZ2UgKipwYWdldmVjOwogIHVuc2lnbmVkIGludCBucGFnZXM7CiAgc3RydWN0IG5mc19yZWFkYXJncyBhcmdzOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgbmZzX3JlYWRyZXMgcmVzOwogIHN0cnVjdCBwYWdlICpwYWdlX2FycmF5W05GU19QQUdFVkVDX1NJWkVdOwogfTsKLQogc3RydWN0IG5mc193cml0ZV9kYXRhIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgaW50IGZsYWdzOwogIHN0cnVjdCBycGNfdGFzayB0YXNrOwogIHN0cnVjdCBpbm9kZSAqaW5vZGU7CiAgc3RydWN0IHJwY19jcmVkICpjcmVkOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgbmZzX2ZhdHRyIGZhdHRyOwogIHN0cnVjdCBuZnNfd3JpdGV2ZXJmIHZlcmY7CiAgc3RydWN0IGxpc3RfaGVhZCBwYWdlczsKICBzdHJ1Y3QgbmZzX3BhZ2UgKnJlcTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IHBhZ2UgKipwYWdldmVjOwogIHVuc2lnbmVkIGludCBucGFnZXM7CiAgc3RydWN0IG5mc193cml0ZWFyZ3MgYXJnczsKICBzdHJ1Y3QgbmZzX3dyaXRlcmVzIHJlczsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IHBhZ2UgKnBhZ2VfYXJyYXlbTkZTX1BBR0VWRUNfU0laRV07CiB9OwotCiBzdHJ1Y3QgbmZzX2FjY2Vzc19lbnRyeTsKLQogc3RydWN0IG5mc19ycGNfb3BzIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgaW50IHZlcnNpb247CiAgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zICpkZW50cnlfb3BzOwogIHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zICpkaXJfaW5vZGVfb3BzOwogIHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zICpmaWxlX2lub2RlX29wczsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBpbnQgKCpnZXRyb290KSAoc3RydWN0IG5mc19zZXJ2ZXIgKiwgc3RydWN0IG5mc19maCAqLAogIHN0cnVjdCBuZnNfZnNpbmZvICopOwogIGludCAoKmdldGF0dHIpIChzdHJ1Y3QgbmZzX3NlcnZlciAqLCBzdHJ1Y3QgbmZzX2ZoICosCiAgc3RydWN0IG5mc19mYXR0ciAqKTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgaW50ICgqc2V0YXR0cikgKHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IG5mc19mYXR0ciAqLAogIHN0cnVjdCBpYXR0ciAqKTsKICBpbnQgKCpsb29rdXApIChzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IHFzdHIgKiwKICBzdHJ1Y3QgbmZzX2ZoICosIHN0cnVjdCBuZnNfZmF0dHIgKik7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGludCAoKmFjY2VzcykgKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgbmZzX2FjY2Vzc19lbnRyeSAqKTsKICBpbnQgKCpyZWFkbGluaykoc3RydWN0IGlub2RlICosIHN0cnVjdCBwYWdlICosIHVuc2lnbmVkIGludCwKICB1bnNpZ25lZCBpbnQpOwogIGludCAoKnJlYWQpIChzdHJ1Y3QgbmZzX3JlYWRfZGF0YSAqKTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgaW50ICgqd3JpdGUpIChzdHJ1Y3QgbmZzX3dyaXRlX2RhdGEgKik7CiAgaW50ICgqY29tbWl0KSAoc3RydWN0IG5mc193cml0ZV9kYXRhICopOwogIGludCAoKmNyZWF0ZSkgKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZGVudHJ5ICosCiAgc3RydWN0IGlhdHRyICosIGludCwgc3RydWN0IG5hbWVpZGF0YSAqKTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgaW50ICgqcmVtb3ZlKSAoc3RydWN0IGlub2RlICosIHN0cnVjdCBxc3RyICopOwogIGludCAoKnVubGlua19zZXR1cCkgKHN0cnVjdCBycGNfbWVzc2FnZSAqLAogIHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IHFzdHIgKik7CiAgaW50ICgqdW5saW5rX2RvbmUpIChzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCBycGNfdGFzayAqKTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgaW50ICgqcmVuYW1lKSAoc3RydWN0IGlub2RlICosIHN0cnVjdCBxc3RyICosCiAgc3RydWN0IGlub2RlICosIHN0cnVjdCBxc3RyICopOwogIGludCAoKmxpbmspIChzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGlub2RlICosIHN0cnVjdCBxc3RyICopOwogIGludCAoKnN5bWxpbmspIChzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IHFzdHIgKiwgc3RydWN0IHFzdHIgKiwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IGlhdHRyICosIHN0cnVjdCBuZnNfZmggKiwKICBzdHJ1Y3QgbmZzX2ZhdHRyICopOwogIGludCAoKm1rZGlyKSAoc3RydWN0IGlub2RlICosIHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IGlhdHRyICopOwogIGludCAoKnJtZGlyKSAoc3RydWN0IGlub2RlICosIHN0cnVjdCBxc3RyICopOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBpbnQgKCpyZWFkZGlyKSAoc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3QgcnBjX2NyZWQgKiwKICB1NjQsIHN0cnVjdCBwYWdlICosIHVuc2lnbmVkIGludCwgaW50KTsKICBpbnQgKCpta25vZCkgKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCBpYXR0ciAqLAogIGRldl90KTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgaW50ICgqc3RhdGZzKSAoc3RydWN0IG5mc19zZXJ2ZXIgKiwgc3RydWN0IG5mc19maCAqLAogIHN0cnVjdCBuZnNfZnNzdGF0ICopOwogIGludCAoKmZzaW5mbykgKHN0cnVjdCBuZnNfc2VydmVyICosIHN0cnVjdCBuZnNfZmggKiwKICBzdHJ1Y3QgbmZzX2ZzaW5mbyAqKTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgaW50ICgqcGF0aGNvbmYpIChzdHJ1Y3QgbmZzX3NlcnZlciAqLCBzdHJ1Y3QgbmZzX2ZoICosCiAgc3RydWN0IG5mc19wYXRoY29uZiAqKTsKICB1MzIgKiAoKmRlY29kZV9kaXJlbnQpKHUzMiAqLCBzdHJ1Y3QgbmZzX2VudHJ5ICosIGludCBwbHVzKTsKICB2b2lkICgqcmVhZF9zZXR1cCkgKHN0cnVjdCBuZnNfcmVhZF9kYXRhICopOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBpbnQgKCpyZWFkX2RvbmUpIChzdHJ1Y3QgcnBjX3Rhc2sgKiwgc3RydWN0IG5mc19yZWFkX2RhdGEgKik7CiAgdm9pZCAoKndyaXRlX3NldHVwKSAoc3RydWN0IG5mc193cml0ZV9kYXRhICosIGludCBob3cpOwogIGludCAoKndyaXRlX2RvbmUpIChzdHJ1Y3QgcnBjX3Rhc2sgKiwgc3RydWN0IG5mc193cml0ZV9kYXRhICopOwogIHZvaWQgKCpjb21taXRfc2V0dXApIChzdHJ1Y3QgbmZzX3dyaXRlX2RhdGEgKiwgaW50IGhvdyk7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGludCAoKmNvbW1pdF9kb25lKSAoc3RydWN0IHJwY190YXNrICosIHN0cnVjdCBuZnNfd3JpdGVfZGF0YSAqKTsKICBpbnQgKCpmaWxlX29wZW4pIChzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGZpbGUgKik7CiAgaW50ICgqZmlsZV9yZWxlYXNlKSAoc3RydWN0IGlub2RlICosIHN0cnVjdCBmaWxlICopOwogIGludCAoKmxvY2spKHN0cnVjdCBmaWxlICosIGludCwgc3RydWN0IGZpbGVfbG9jayAqKTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdm9pZCAoKmNsZWFyX2FjbF9jYWNoZSkoc3RydWN0IGlub2RlICopOwogfTsKLQogI2RlZmluZSBORlNfQ0FMTChvcCwgaW5vZGUsIGFyZ3MpIE5GU19QUk9UTyhpbm9kZSktPm9wIGFyZ3MKLQogI2VuZGlmCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25mc2FjbC5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25mc2FjbC5oCmluZGV4IDdkZDk1YWIuLjY3NTQ3MWEgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZnNhY2wuaAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmZzYWNsLmgKQEAgLTcsMjYgKzcsMzAgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9fTElOVVhfTkZTQUNMX0gKICNkZWZpbmUgX19MSU5VWF9ORlNBQ0xfSAotCiAjZGVmaW5lIE5GU19BQ0xfUFJPR1JBTSAxMDAyMjcKLQogI2RlZmluZSBBQ0xQUk9DMl9HRVRBQ0wgMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQUNMUFJPQzJfU0VUQUNMIDIKICNkZWZpbmUgQUNMUFJPQzJfR0VUQVRUUiAzCiAjZGVmaW5lIEFDTFBST0MyX0FDQ0VTUyA0Ci0KICNkZWZpbmUgQUNMUFJPQzNfR0VUQUNMIDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFDTFBST0MzX1NFVEFDTCAyCi0KICNkZWZpbmUgTkZTX0FDTCAweDAwMDEKICNkZWZpbmUgTkZTX0FDTENOVCAweDAwMDIKICNkZWZpbmUgTkZTX0RGQUNMIDB4MDAwNAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTkZTX0RGQUNMQ05UIDB4MDAwOAotCiAjZGVmaW5lIE5GU19BQ0xfREVGQVVMVCAweDEwMDAKLQogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmZzZC9hdXRoLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmZzZC9hdXRoLmgKaW5kZXggZjg0MGYwZS4uYTZkNmZlYyAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25mc2QvYXV0aC5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZnNkL2F1dGguaApAQCAtNyw5ICs3LDE1IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBMSU5VWF9ORlNEX0FVVEhfSAogI2RlZmluZSBMSU5VWF9ORlNEX0FVVEhfSAotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZnNkL2NvbnN0LmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmZzZC9jb25zdC5oCmluZGV4IGMzNDU1MDguLjY1OGE1ZDIgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZnNkL2NvbnN0LmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25mc2QvY29uc3QuaApAQCAtNywxOCArNywyMyBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX0xJTlVYX05GU0RfQ09OU1RfSAogI2RlZmluZSBfTElOVVhfTkZTRF9DT05TVF9ICi0KICNpbmNsdWRlIDxsaW51eC9uZnMuaD4KICNpbmNsdWRlIDxsaW51eC9uZnMyLmg+CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2luY2x1ZGUgPGxpbnV4L25mczMuaD4KICNpbmNsdWRlIDxsaW51eC9uZnM0Lmg+Ci0KICNkZWZpbmUgTkZTU1ZDX01BWFZFUlMgMwotCiAjZGVmaW5lIE5GU1NWQ19NQVhCTEtTSVpFICgzMioxMDI0KQotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmZzZC9kZWJ1Zy5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25mc2QvZGVidWcuaAppbmRleCA5YjkwZjA1Li43YWRkN2ZkIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmZzZC9kZWJ1Zy5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZnNkL2RlYnVnLmgKQEAgLTcsMjggKzcsMzUgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIExJTlVYX05GU0RfREVCVUdfSAogI2RlZmluZSBMSU5VWF9ORlNEX0RFQlVHX0gKLQogI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy9kZWJ1Zy5oPgotCiAjaWZkZWYgUlBDX0RFQlVHCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBORlNEX0RFQlVHIDEKICNlbmRpZgotCiAjZGVmaW5lIE5GU0REQkdfU09DSyAweDAwMDEKICNkZWZpbmUgTkZTRERCR19GSCAweDAwMDIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE5GU0REQkdfRVhQT1JUIDB4MDAwNAogI2RlZmluZSBORlNEREJHX1NWQyAweDAwMDgKICNkZWZpbmUgTkZTRERCR19QUk9DIDB4MDAxMAogI2RlZmluZSBORlNEREJHX0ZJTEVPUCAweDAwMjAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE5GU0REQkdfQVVUSCAweDAwNDAKICNkZWZpbmUgTkZTRERCR19SRVBDQUNIRSAweDAwODAKICNkZWZpbmUgTkZTRERCR19YRFIgMHgwMTAwCiAjZGVmaW5lIE5GU0REQkdfTE9DS0QgMHgwMjAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBORlNEREJHX0FMTCAweDdGRkYKICNkZWZpbmUgTkZTRERCR19OT0NIQU5HRSAweEZGRkYKLQogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmZzZC9leHBvcnQuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZnNkL2V4cG9ydC5oCmluZGV4IDkzMjI3NGYuLmJjNzFiODIgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZnNkL2V4cG9ydC5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZnNkL2V4cG9ydC5oCkBAIC03LDMyICs3LDM4IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBORlNEX0VYUE9SVF9ICiAjZGVmaW5lIE5GU0RfRVhQT1JUX0gKLQogI2luY2x1ZGUgPGFzbS90eXBlcy5oPgotCiAjZGVmaW5lIE5GU0NMTlRfSURNQVggMTAyNAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTkZTQ0xOVF9BRERSTUFYIDE2CiAjZGVmaW5lIE5GU0NMTlRfS0VZTUFYIDMyCi0KICNkZWZpbmUgTkZTRVhQX1JFQURPTkxZIDB4MDAwMQogI2RlZmluZSBORlNFWFBfSU5TRUNVUkVfUE9SVCAweDAwMDIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE5GU0VYUF9ST09UU1FVQVNIIDB4MDAwNAogI2RlZmluZSBORlNFWFBfQUxMU1FVQVNIIDB4MDAwOAogI2RlZmluZSBORlNFWFBfQVNZTkMgMHgwMDEwCiAjZGVmaW5lIE5GU0VYUF9HQVRIRVJFRF9XUklURVMgMHgwMDIwCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE5GU0VYUF9OT0hJREUgMHgwMjAwCiAjZGVmaW5lIE5GU0VYUF9OT1NVQlRSRUVDSEVDSyAweDA0MDAKLSNkZWZpbmUgTkZTRVhQX05PQVVUSE5MTSAweDA4MDAgIAotI2RlZmluZSBORlNFWFBfTVNORlMgMHgxMDAwICAKKyNkZWZpbmUgTkZTRVhQX05PQVVUSE5MTSAweDA4MDAKKyNkZWZpbmUgTkZTRVhQX01TTkZTIDB4MTAwMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTkZTRVhQX0ZTSUQgMHgyMDAwCiAjZGVmaW5lIE5GU0VYUF9DUk9TU01PVU5UIDB4NDAwMAotI2RlZmluZSBORlNFWFBfTk9BQ0wgMHg4MDAwICAKKyNkZWZpbmUgTkZTRVhQX05PQUNMIDB4ODAwMAogI2RlZmluZSBORlNFWFBfQUxMRkxBR1MgMHhGRTNGCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZW5kaWYKLQpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25mc2QvaW50ZXJmYWNlLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmZzZC9pbnRlcmZhY2UuaAppbmRleCAzYzM5NDZhLi5jOWI4MWMxIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmZzZC9pbnRlcmZhY2UuaAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmZzZC9pbnRlcmZhY2UuaApAQCAtNyw5ICs3LDE1IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBMSU5VWF9ORlNEX0lOVEVSRkFDRV9ICiAjZGVmaW5lIExJTlVYX05GU0RfSU5URVJGQUNFX0gKLQogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmZzZC9uZnNmaC5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25mc2QvbmZzZmguaAppbmRleCAxMzQ1MGQyLi4xNTJiMmM2IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmZzZC9uZnNmaC5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZnNkL25mc2ZoLmgKQEAgLTcsNTYgKzcsNjUgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9MSU5VWF9ORlNEX0ZIX0gKICNkZWZpbmUgX0xJTlVYX05GU0RfRkhfSAotCiAjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvbmZzZC9jb25zdC5oPgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNpbmNsdWRlIDxsaW51eC9uZnNkL2RlYnVnLmg+Ci0KIHN0cnVjdCBuZnNfZmhiYXNlX29sZCB7CiAgX191MzIgZmJfZGNvb2tpZTsKICBfX3UzMiBmYl9pbm87CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGZiX2RpcmlubzsKICBfX3UzMiBmYl9kZXY7CiAgX191MzIgZmJfeGRldjsKICBfX3UzMiBmYl94aW5vOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBmYl9nZW5lcmF0aW9uOwogfTsKLQogc3RydWN0IG5mc19maGJhc2VfbmV3IHsKICBfX3U4IGZiX3ZlcnNpb247CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTggZmJfYXV0aF90eXBlOwogIF9fdTggZmJfZnNpZF90eXBlOwogIF9fdTggZmJfZmlsZWlkX3R5cGU7CiAgX191MzIgZmJfYXV0aFsxXTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07Ci0KIHN0cnVjdCBrbmZzZF9maCB7CiAgdW5zaWduZWQgaW50IGZoX3NpemU7CiAgdW5pb24geworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgbmZzX2ZoYmFzZV9vbGQgZmhfb2xkOwogIF9fdTMyIGZoX3BhZFtORlM0X0ZIU0laRS80XTsKICBzdHJ1Y3QgbmZzX2ZoYmFzZV9uZXcgZmhfbmV3OwogIH0gZmhfYmFzZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwotCiAjZGVmaW5lIG9maF9kY29va2llIGZoX2Jhc2UuZmhfb2xkLmZiX2Rjb29raWUKICNkZWZpbmUgb2ZoX2lubyBmaF9iYXNlLmZoX29sZC5mYl9pbm8KICNkZWZpbmUgb2ZoX2RpcmlubyBmaF9iYXNlLmZoX29sZC5mYl9kaXJpbm8KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIG9maF9kZXYgZmhfYmFzZS5maF9vbGQuZmJfZGV2CiAjZGVmaW5lIG9maF94ZGV2IGZoX2Jhc2UuZmhfb2xkLmZiX3hkZXYKICNkZWZpbmUgb2ZoX3hpbm8gZmhfYmFzZS5maF9vbGQuZmJfeGlubwogI2RlZmluZSBvZmhfZ2VuZXJhdGlvbiBmaF9iYXNlLmZoX29sZC5mYl9nZW5lcmF0aW9uCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIGZoX3ZlcnNpb24gZmhfYmFzZS5maF9uZXcuZmJfdmVyc2lvbgogI2RlZmluZSBmaF9mc2lkX3R5cGUgZmhfYmFzZS5maF9uZXcuZmJfZnNpZF90eXBlCiAjZGVmaW5lIGZoX2F1dGhfdHlwZSBmaF9iYXNlLmZoX25ldy5mYl9hdXRoX3R5cGUKICNkZWZpbmUgZmhfZmlsZWlkX3R5cGUgZmhfYmFzZS5maF9uZXcuZmJfZmlsZWlkX3R5cGUKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIGZoX2F1dGggZmhfYmFzZS5maF9uZXcuZmJfYXV0aAogI2RlZmluZSBmaF9mc2lkIGZoX2Jhc2UuZmhfbmV3LmZiX2F1dGgKLQogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmZzZC9zdGF0cy5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25mc2Qvc3RhdHMuaAppbmRleCA2NDdlNjVjLi40NmIwYzAyIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmZzZC9zdGF0cy5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZnNkL3N0YXRzLmgKQEAgLTcsMzIgKzcsMzkgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIExJTlVYX05GU0RfU1RBVFNfSAogI2RlZmluZSBMSU5VWF9ORlNEX1NUQVRTX0gKLQogI2luY2x1ZGUgPGxpbnV4L25mczQuaD4KLQogc3RydWN0IG5mc2Rfc3RhdHMgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBpbnQgcmNoaXRzOwogIHVuc2lnbmVkIGludCByY21pc3NlczsKICB1bnNpZ25lZCBpbnQgcmNub2NhY2hlOwogIHVuc2lnbmVkIGludCBmaF9zdGFsZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgaW50IGZoX2xvb2t1cDsKICB1bnNpZ25lZCBpbnQgZmhfYW5vbjsKICB1bnNpZ25lZCBpbnQgZmhfbm9jYWNoZV9kaXI7CiAgdW5zaWduZWQgaW50IGZoX25vY2FjaGVfbm9uZGlyOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBpbnQgaW9fcmVhZDsKICB1bnNpZ25lZCBpbnQgaW9fd3JpdGU7CiAgdW5zaWduZWQgaW50IHRoX2NudDsKICB1bnNpZ25lZCBpbnQgdGhfdXNhZ2VbMTBdOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBpbnQgdGhfZnVsbGNudDsKICB1bnNpZ25lZCBpbnQgcmFfc2l6ZTsKICB1bnNpZ25lZCBpbnQgcmFfZGVwdGhbMTFdOwotCiB9OwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBORlNEX1VTQUdFX1dSQVAgKEhaKjEwMDAwMDApCi0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25mc2QveGRyLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmZzZC94ZHIuaAppbmRleCBmOTQ5NjFkLi43YTljYTU2IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmZzZC94ZHIuaAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmZzZC94ZHIuaApAQCAtNywxMzUgKzcsMTQ3IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBMSU5VWF9ORlNEX0gKICNkZWZpbmUgTElOVVhfTkZTRF9ICi0KICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L3Zmcy5oPgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNpbmNsdWRlIDxsaW51eC9uZnMuaD4KLQogc3RydWN0IG5mc2RfZmhhbmRsZSB7CiAgc3RydWN0IHN2Y19maCBmaDsKIH07Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgbmZzZF9zYXR0cmFyZ3MgewogIHN0cnVjdCBzdmNfZmggZmg7CiAgc3RydWN0IGlhdHRyIGF0dHJzOwogfTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBuZnNkX2Rpcm9wYXJncyB7CiAgc3RydWN0IHN2Y19maCBmaDsKICBjaGFyICogbmFtZTsKICBpbnQgbGVuOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07Ci0KIHN0cnVjdCBuZnNkX3JlYWRhcmdzIHsKICBzdHJ1Y3Qgc3ZjX2ZoIGZoOwogIF9fdTMyIG9mZnNldDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgY291bnQ7CiAgc3RydWN0IGt2ZWMgdmVjW1JQQ1NWQ19NQVhQQUdFU107CiAgaW50IHZsZW47CiB9OwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IG5mc2Rfd3JpdGVhcmdzIHsKICBzdmNfZmggZmg7CiAgX191MzIgb2Zmc2V0OwogIGludCBsZW47CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCBrdmVjIHZlY1tSUENTVkNfTUFYUEFHRVNdOwogIGludCB2bGVuOwogfTsKLQogc3RydWN0IG5mc2RfY3JlYXRlYXJncyB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCBzdmNfZmggZmg7CiAgY2hhciAqIG5hbWU7CiAgaW50IGxlbjsKICBzdHJ1Y3QgaWF0dHIgYXR0cnM7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKLQogc3RydWN0IG5mc2RfcmVuYW1lYXJncyB7CiAgc3RydWN0IHN2Y19maCBmZmg7CiAgY2hhciAqIGZuYW1lOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBpbnQgZmxlbjsKICBzdHJ1Y3Qgc3ZjX2ZoIHRmaDsKICBjaGFyICogdG5hbWU7CiAgaW50IHRsZW47CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKLQogc3RydWN0IG5mc2RfcmVhZGxpbmthcmdzIHsKICBzdHJ1Y3Qgc3ZjX2ZoIGZoOwogIGNoYXIgKiBidWZmZXI7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKLQogc3RydWN0IG5mc2RfbGlua2FyZ3MgewogIHN0cnVjdCBzdmNfZmggZmZoOwogIHN0cnVjdCBzdmNfZmggdGZoOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBjaGFyICogdG5hbWU7CiAgaW50IHRsZW47CiB9OwotCiBzdHJ1Y3QgbmZzZF9zeW1saW5rYXJncyB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCBzdmNfZmggZmZoOwogIGNoYXIgKiBmbmFtZTsKICBpbnQgZmxlbjsKICBjaGFyICogdG5hbWU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGludCB0bGVuOwogIHN0cnVjdCBpYXR0ciBhdHRyczsKIH07Ci0KIHN0cnVjdCBuZnNkX3JlYWRkaXJhcmdzIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IHN2Y19maCBmaDsKICBfX3UzMiBjb29raWU7CiAgX191MzIgY291bnQ7CiAgdTMyICogYnVmZmVyOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07Ci0KIHN0cnVjdCBuZnNkX2F0dHJzdGF0IHsKICBzdHJ1Y3Qgc3ZjX2ZoIGZoOwogIHN0cnVjdCBrc3RhdCBzdGF0OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07Ci0KIHN0cnVjdCBuZnNkX2Rpcm9wcmVzIHsKICBzdHJ1Y3Qgc3ZjX2ZoIGZoOwogIHN0cnVjdCBrc3RhdCBzdGF0OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07Ci0KIHN0cnVjdCBuZnNkX3JlYWRsaW5rcmVzIHsKICBpbnQgbGVuOwogfTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBuZnNkX3JlYWRyZXMgewogIHN0cnVjdCBzdmNfZmggZmg7CiAgdW5zaWduZWQgbG9uZyBjb3VudDsKICBzdHJ1Y3Qga3N0YXQgc3RhdDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwotCiBzdHJ1Y3QgbmZzZF9yZWFkZGlycmVzIHsKICBpbnQgY291bnQ7Ci0KICBzdHJ1Y3QgcmVhZGRpcl9jZCBjb21tb247CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHUzMiAqIGJ1ZmZlcjsKICBpbnQgYnVmbGVuOwogIHUzMiAqIG9mZnNldDsKIH07Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgbmZzZF9zdGF0ZnNyZXMgewogIHN0cnVjdCBrc3RhdGZzIHN0YXRzOwogfTsKLQogdW5pb24gbmZzZF94ZHJzdG9yZSB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCBuZnNkX3NhdHRyYXJncyBzYXR0cjsKICBzdHJ1Y3QgbmZzZF9kaXJvcGFyZ3MgZGlyb3A7CiAgc3RydWN0IG5mc2RfcmVhZGFyZ3MgcmVhZDsKICBzdHJ1Y3QgbmZzZF93cml0ZWFyZ3Mgd3JpdGU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCBuZnNkX2NyZWF0ZWFyZ3MgY3JlYXRlOwogIHN0cnVjdCBuZnNkX3JlbmFtZWFyZ3MgcmVuYW1lOwogIHN0cnVjdCBuZnNkX2xpbmthcmdzIGxpbms7CiAgc3RydWN0IG5mc2Rfc3ltbGlua2FyZ3Mgc3ltbGluazsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IG5mc2RfcmVhZGRpcmFyZ3MgcmVhZGRpcjsKIH07Ci0KICNkZWZpbmUgTkZTMl9TVkNfWERSU0laRSBzaXplb2YodW5pb24gbmZzZF94ZHJzdG9yZSkKLQogI2VuZGlmCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25vZGUuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9ub2RlLmgKaW5kZXggYjMzYmZmYy4uOWNjOGNiNCAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25vZGUuaAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbm9kZS5oCkBAIC03LDE3ICs3LDIzIEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfTElOVVhfTk9ERV9IXwogI2RlZmluZSBfTElOVVhfTk9ERV9IXwotCiAjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvY3B1bWFzay5oPgotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IG5vZGUgewogIHN0cnVjdCBzeXNfZGV2aWNlIHN5c2RldjsKIH07Ci0KICNkZWZpbmUgdG9fbm9kZShzeXNfZGV2aWNlKSBjb250YWluZXJfb2Yoc3lzX2RldmljZSwgc3RydWN0IG5vZGUsIHN5c2RldikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9ub2RlbWFzay5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25vZGVtYXNrLmgKaW5kZXggNGVjODYzMi4uMDE1ODAxOCAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25vZGVtYXNrLmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25vZGVtYXNrLmgKQEAgLTcsODMgKzcsOTkgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9fTElOVVhfTk9ERU1BU0tfSAogI2RlZmluZSBfX0xJTlVYX05PREVNQVNLX0gKLQogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjaW5jbHVkZSA8bGludXgvYml0bWFwLmg+CiAjaW5jbHVkZSA8bGludXgvbnVtYS5oPgotCiB0eXBlZGVmIHN0cnVjdCB7IERFQ0xBUkVfQklUTUFQKGJpdHMsIE1BWF9OVU1OT0RFUyk7IH0gbm9kZW1hc2tfdDsKLQogI2RlZmluZSBub2RlX3NldChub2RlLCBkc3QpIF9fbm9kZV9zZXQoKG5vZGUpLCAmKGRzdCkpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBub2RlX2NsZWFyKG5vZGUsIGRzdCkgX19ub2RlX2NsZWFyKChub2RlKSwgJihkc3QpKQogI2RlZmluZSBub2Rlc19zZXRhbGwoZHN0KSBfX25vZGVzX3NldGFsbCgmKGRzdCksIE1BWF9OVU1OT0RFUykKICNkZWZpbmUgbm9kZXNfY2xlYXIoZHN0KSBfX25vZGVzX2NsZWFyKCYoZHN0KSwgTUFYX05VTU5PREVTKQogI2RlZmluZSBub2RlX2lzc2V0KG5vZGUsIG5vZGVtYXNrKSB0ZXN0X2JpdCgobm9kZSksIChub2RlbWFzaykuYml0cykKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIG5vZGVfdGVzdF9hbmRfc2V0KG5vZGUsIG5vZGVtYXNrKSAgIF9fbm9kZV90ZXN0X2FuZF9zZXQoKG5vZGUpLCAmKG5vZGVtYXNrKSkKICNkZWZpbmUgbm9kZXNfYW5kKGRzdCwgc3JjMSwgc3JjMikgICBfX25vZGVzX2FuZCgmKGRzdCksICYoc3JjMSksICYoc3JjMiksIE1BWF9OVU1OT0RFUykKICNkZWZpbmUgbm9kZXNfb3IoZHN0LCBzcmMxLCBzcmMyKSAgIF9fbm9kZXNfb3IoJihkc3QpLCAmKHNyYzEpLCAmKHNyYzIpLCBNQVhfTlVNTk9ERVMpCiAjZGVmaW5lIG5vZGVzX3hvcihkc3QsIHNyYzEsIHNyYzIpICAgX19ub2Rlc194b3IoJihkc3QpLCAmKHNyYzEpLCAmKHNyYzIpLCBNQVhfTlVNTk9ERVMpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBub2Rlc19hbmRub3QoZHN0LCBzcmMxLCBzcmMyKSAgIF9fbm9kZXNfYW5kbm90KCYoZHN0KSwgJihzcmMxKSwgJihzcmMyKSwgTUFYX05VTU5PREVTKQogI2RlZmluZSBub2Rlc19jb21wbGVtZW50KGRzdCwgc3JjKSAgIF9fbm9kZXNfY29tcGxlbWVudCgmKGRzdCksICYoc3JjKSwgTUFYX05VTU5PREVTKQogI2RlZmluZSBub2Rlc19lcXVhbChzcmMxLCBzcmMyKSAgIF9fbm9kZXNfZXF1YWwoJihzcmMxKSwgJihzcmMyKSwgTUFYX05VTU5PREVTKQogI2RlZmluZSBub2Rlc19pbnRlcnNlY3RzKHNyYzEsIHNyYzIpICAgX19ub2Rlc19pbnRlcnNlY3RzKCYoc3JjMSksICYoc3JjMiksIE1BWF9OVU1OT0RFUykKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIG5vZGVzX3N1YnNldChzcmMxLCBzcmMyKSAgIF9fbm9kZXNfc3Vic2V0KCYoc3JjMSksICYoc3JjMiksIE1BWF9OVU1OT0RFUykKICNkZWZpbmUgbm9kZXNfZW1wdHkoc3JjKSBfX25vZGVzX2VtcHR5KCYoc3JjKSwgTUFYX05VTU5PREVTKQogI2RlZmluZSBub2Rlc19mdWxsKG5vZGVtYXNrKSBfX25vZGVzX2Z1bGwoJihub2RlbWFzayksIE1BWF9OVU1OT0RFUykKICNkZWZpbmUgbm9kZXNfd2VpZ2h0KG5vZGVtYXNrKSBfX25vZGVzX3dlaWdodCgmKG5vZGVtYXNrKSwgTUFYX05VTU5PREVTKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgbm9kZXNfc2hpZnRfcmlnaHQoZHN0LCBzcmMsIG4pICAgX19ub2Rlc19zaGlmdF9yaWdodCgmKGRzdCksICYoc3JjKSwgKG4pLCBNQVhfTlVNTk9ERVMpCiAjZGVmaW5lIG5vZGVzX3NoaWZ0X2xlZnQoZHN0LCBzcmMsIG4pICAgX19ub2Rlc19zaGlmdF9sZWZ0KCYoZHN0KSwgJihzcmMpLCAobiksIE1BWF9OVU1OT0RFUykKICNkZWZpbmUgZmlyc3Rfbm9kZShzcmMpIF9fZmlyc3Rfbm9kZSgmKHNyYykpCiAjZGVmaW5lIG5leHRfbm9kZShuLCBzcmMpIF9fbmV4dF9ub2RlKChuKSwgJihzcmMpKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgbm9kZW1hc2tfb2Zfbm9kZShub2RlKSAgKHsgICB0eXBlb2YoX3VudXNlZF9ub2RlbWFza19hcmdfKSBtOyAgIGlmIChzaXplb2YobSkgPT0gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKSB7ICAgbS5iaXRzWzBdID0gMVVMPDwobm9kZSk7ICAgfSBlbHNlIHsgICBub2Rlc19jbGVhcihtKTsgICBub2RlX3NldCgobm9kZSksIG0pOyAgIH0gICBtOyAgfSkKICNkZWZpbmUgZmlyc3RfdW5zZXRfbm9kZShtYXNrKSBfX2ZpcnN0X3Vuc2V0X25vZGUoJihtYXNrKSkKICNkZWZpbmUgTk9ERV9NQVNLX0xBU1RfV09SRCBCSVRNQVBfTEFTVF9XT1JEX01BU0soTUFYX05VTU5PREVTKQogI2lmIE1BWF9OVU1OT0RFUyA8PSBCSVRTX1BFUl9MT05HCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBOT0RFX01BU0tfQUxMICAoKG5vZGVtYXNrX3QpIHsgeyAgIFtCSVRTX1RPX0xPTkdTKE1BWF9OVU1OT0RFUyktMV0gPSBOT0RFX01BU0tfTEFTVF9XT1JEICB9IH0pCiAjZWxzZQogI2RlZmluZSBOT0RFX01BU0tfQUxMICAoKG5vZGVtYXNrX3QpIHsgeyAgIFswIC4uLiBCSVRTX1RPX0xPTkdTKE1BWF9OVU1OT0RFUyktMl0gPSB+MFVMLCAgIFtCSVRTX1RPX0xPTkdTKE1BWF9OVU1OT0RFUyktMV0gPSBOT0RFX01BU0tfTEFTVF9XT1JEICB9IH0pCiAjZW5kaWYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE5PREVfTUFTS19OT05FICAoKG5vZGVtYXNrX3QpIHsgeyAgIFswIC4uLiBCSVRTX1RPX0xPTkdTKE1BWF9OVU1OT0RFUyktMV0gPSAwVUwgIH0gfSkKICNkZWZpbmUgbm9kZXNfYWRkcihzcmMpICgoc3JjKS5iaXRzKQogI2RlZmluZSBub2RlbWFza19zY25wcmludGYoYnVmLCBsZW4sIHNyYykgICBfX25vZGVtYXNrX3NjbnByaW50ZigoYnVmKSwgKGxlbiksICYoc3JjKSwgTUFYX05VTU5PREVTKQogI2RlZmluZSBub2RlbWFza19wYXJzZSh1YnVmLCB1bGVuLCBkc3QpICAgX19ub2RlbWFza19wYXJzZSgodWJ1ZiksICh1bGVuKSwgJihkc3QpLCBNQVhfTlVNTk9ERVMpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBub2RlbGlzdF9zY25wcmludGYoYnVmLCBsZW4sIHNyYykgICBfX25vZGVsaXN0X3NjbnByaW50ZigoYnVmKSwgKGxlbiksICYoc3JjKSwgTUFYX05VTU5PREVTKQogI2RlZmluZSBub2RlbGlzdF9wYXJzZShidWYsIGRzdCkgX19ub2RlbGlzdF9wYXJzZSgoYnVmKSwgJihkc3QpLCBNQVhfTlVNTk9ERVMpCiAjZGVmaW5lIG5vZGVfcmVtYXAob2xkYml0LCBvbGQsIG5ldykgICBfX25vZGVfcmVtYXAoKG9sZGJpdCksICYob2xkKSwgJihuZXcpLCBNQVhfTlVNTk9ERVMpCiAjZGVmaW5lIG5vZGVzX3JlbWFwKGRzdCwgc3JjLCBvbGQsIG5ldykgICBfX25vZGVzX3JlbWFwKCYoZHN0KSwgJihzcmMpLCAmKG9sZCksICYobmV3KSwgTUFYX05VTU5PREVTKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNpZiBNQVhfTlVNTk9ERVMgPiAxCiAjZGVmaW5lIGZvcl9lYWNoX25vZGVfbWFzayhub2RlLCBtYXNrKSAgIGZvciAoKG5vZGUpID0gZmlyc3Rfbm9kZShtYXNrKTsgICAobm9kZSkgPCBNQVhfTlVNTk9ERVM7ICAgKG5vZGUpID0gbmV4dF9ub2RlKChub2RlKSwgKG1hc2spKSkKICNlbHNlCiAjZGVmaW5lIGZvcl9lYWNoX25vZGVfbWFzayhub2RlLCBtYXNrKSAgIGlmICghbm9kZXNfZW1wdHkobWFzaykpICAgZm9yICgobm9kZSkgPSAwOyAobm9kZSkgPCAxOyAobm9kZSkrKykKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZW5kaWYKLQogI2lmIE1BWF9OVU1OT0RFUyA+IDEKICNkZWZpbmUgbnVtX29ubGluZV9ub2RlcygpIG5vZGVzX3dlaWdodChub2RlX29ubGluZV9tYXApCiAjZGVmaW5lIG51bV9wb3NzaWJsZV9ub2RlcygpIG5vZGVzX3dlaWdodChub2RlX3Bvc3NpYmxlX21hcCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIG5vZGVfb25saW5lKG5vZGUpIG5vZGVfaXNzZXQoKG5vZGUpLCBub2RlX29ubGluZV9tYXApCiAjZGVmaW5lIG5vZGVfcG9zc2libGUobm9kZSkgbm9kZV9pc3NldCgobm9kZSksIG5vZGVfcG9zc2libGVfbWFwKQogI2RlZmluZSBmaXJzdF9vbmxpbmVfbm9kZSBmaXJzdF9ub2RlKG5vZGVfb25saW5lX21hcCkKICNkZWZpbmUgbmV4dF9vbmxpbmVfbm9kZShuaWQpIG5leHRfbm9kZSgobmlkKSwgbm9kZV9vbmxpbmVfbWFwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlbHNlCiAjZGVmaW5lIG51bV9vbmxpbmVfbm9kZXMoKSAxCiAjZGVmaW5lIG51bV9wb3NzaWJsZV9ub2RlcygpIDEKICNkZWZpbmUgbm9kZV9vbmxpbmUobm9kZSkgKChub2RlKSA9PSAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgbm9kZV9wb3NzaWJsZShub2RlKSAoKG5vZGUpID09IDApCiAjZGVmaW5lIGZpcnN0X29ubGluZV9ub2RlIDAKICNkZWZpbmUgbmV4dF9vbmxpbmVfbm9kZShuaWQpIChNQVhfTlVNTk9ERVMpCiAjZW5kaWYKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgYW55X29ubGluZV9ub2RlKG1hc2spICAoeyAgIGludCBub2RlOyAgIGZvcl9lYWNoX25vZGVfbWFzayhub2RlLCAobWFzaykpICAgaWYgKG5vZGVfb25saW5lKG5vZGUpKSAgIGJyZWFrOyAgIG5vZGU7ICB9KQotCiAjZGVmaW5lIG5vZGVfc2V0X29ubGluZShub2RlKSBzZXRfYml0KChub2RlKSwgbm9kZV9vbmxpbmVfbWFwLmJpdHMpCiAjZGVmaW5lIG5vZGVfc2V0X29mZmxpbmUobm9kZSkgY2xlYXJfYml0KChub2RlKSwgbm9kZV9vbmxpbmVfbWFwLmJpdHMpCi0KICNkZWZpbmUgZm9yX2VhY2hfbm9kZShub2RlKSBmb3JfZWFjaF9ub2RlX21hc2soKG5vZGUpLCBub2RlX3Bvc3NpYmxlX21hcCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIGZvcl9lYWNoX29ubGluZV9ub2RlKG5vZGUpIGZvcl9lYWNoX25vZGVfbWFzaygobm9kZSksIG5vZGVfb25saW5lX21hcCkKLQogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbm90aWZpZXIuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9ub3RpZmllci5oCmluZGV4IGYxZmM0NjEuLjA4MGQ3OTYgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9ub3RpZmllci5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9ub3RpZmllci5oCkBAIC03LDQ0ICs3LDUwIEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfTElOVVhfTk9USUZJRVJfSAogI2RlZmluZSBfTElOVVhfTk9USUZJRVJfSAogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjaW5jbHVkZSA8bGludXgvcndzZW0uaD4KLQogc3RydWN0IG5vdGlmaWVyX2Jsb2NrIHsKICBpbnQgKCpub3RpZmllcl9jYWxsKShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKiwgdW5zaWduZWQgbG9uZywgdm9pZCAqKTsKICBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5leHQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGludCBwcmlvcml0eTsKIH07Ci0KIHN0cnVjdCBhdG9taWNfbm90aWZpZXJfaGVhZCB7CiAgc3BpbmxvY2tfdCBsb2NrOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKmhlYWQ7CiB9OwotCiBzdHJ1Y3QgYmxvY2tpbmdfbm90aWZpZXJfaGVhZCB7CiAgc3RydWN0IHJ3X3NlbWFwaG9yZSByd3NlbTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpoZWFkOwogfTsKLQogc3RydWN0IHJhd19ub3RpZmllcl9oZWFkIHsKICBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKmhlYWQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKLQogI2RlZmluZSBBVE9NSUNfSU5JVF9OT1RJRklFUl9IRUFEKG5hbWUpIGRvIHsgICBzcGluX2xvY2tfaW5pdCgmKG5hbWUpLT5sb2NrKTsgICAobmFtZSktPmhlYWQgPSBOVUxMOyAgIH0gd2hpbGUgKDApCiAjZGVmaW5lIEJMT0NLSU5HX0lOSVRfTk9USUZJRVJfSEVBRChuYW1lKSBkbyB7ICAgaW5pdF9yd3NlbSgmKG5hbWUpLT5yd3NlbSk7ICAgKG5hbWUpLT5oZWFkID0gTlVMTDsgICB9IHdoaWxlICgwKQogI2RlZmluZSBSQVdfSU5JVF9OT1RJRklFUl9IRUFEKG5hbWUpIGRvIHsgICAobmFtZSktPmhlYWQgPSBOVUxMOyAgIH0gd2hpbGUgKDApCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFUT01JQ19OT1RJRklFUl9JTklUKG5hbWUpIHsgICAubG9jayA9IF9fU1BJTl9MT0NLX1VOTE9DS0VEKG5hbWUubG9jayksICAgLmhlYWQgPSBOVUxMIH0KICNkZWZpbmUgQkxPQ0tJTkdfTk9USUZJRVJfSU5JVChuYW1lKSB7ICAgLnJ3c2VtID0gX19SV1NFTV9JTklUSUFMSVpFUigobmFtZSkucndzZW0pLCAgIC5oZWFkID0gTlVMTCB9CiAjZGVmaW5lIFJBV19OT1RJRklFUl9JTklUKG5hbWUpIHsgICAuaGVhZCA9IE5VTEwgfQotCiAjZGVmaW5lIEFUT01JQ19OT1RJRklFUl9IRUFEKG5hbWUpICAgc3RydWN0IGF0b21pY19ub3RpZmllcl9oZWFkIG5hbWUgPSAgIEFUT01JQ19OT1RJRklFUl9JTklUKG5hbWUpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBCTE9DS0lOR19OT1RJRklFUl9IRUFEKG5hbWUpICAgc3RydWN0IGJsb2NraW5nX25vdGlmaWVyX2hlYWQgbmFtZSA9ICAgQkxPQ0tJTkdfTk9USUZJRVJfSU5JVChuYW1lKQogI2RlZmluZSBSQVdfTk9USUZJRVJfSEVBRChuYW1lKSAgIHN0cnVjdCByYXdfbm90aWZpZXJfaGVhZCBuYW1lID0gICBSQVdfTk9USUZJRVJfSU5JVChuYW1lKQotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9udW1hLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbnVtYS5oCmluZGV4IGY1ZDY2ZjUuLjY5NGQ2MGMgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9udW1hLmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L251bWEuaApAQCAtNywxMyArNywxOCBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX0xJTlVYX05VTUFfSAogI2RlZmluZSBfTElOVVhfTlVNQV9ICi0KICNkZWZpbmUgTk9ERVNfU0hJRlQgMAotCiAjZGVmaW5lIE1BWF9OVU1OT0RFUyAoMSA8PCBOT0RFU19TSElGVCkKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L252aGRjcC5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L252aGRjcC5oCmluZGV4IGQyMWVhNTUuLjU3Njg5NmEgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9udmhkY3AuaAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbnZoZGNwLmgKQEAgLTI3LDE0ICsyNywxNCBAQAogI2RlZmluZSBURUdSQV9OVkhEQ1BfRkxBR19BS1NWIDB4MDAwMgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVEVHUkFfTlZIRENQX0ZMQUdfQktTViAweDAwMDQKLSNkZWZpbmUgVEVHUkFfTlZIRENQX0ZMQUdfQlNUQVRVUyAweDAwMDggIAotI2RlZmluZSBURUdSQV9OVkhEQ1BfRkxBR19DTiAweDAwMTAgIAotI2RlZmluZSBURUdSQV9OVkhEQ1BfRkxBR19DS1NWIDB4MDAyMCAgCisjZGVmaW5lIFRFR1JBX05WSERDUF9GTEFHX0JTVEFUVVMgMHgwMDA4CisjZGVmaW5lIFRFR1JBX05WSERDUF9GTEFHX0NOIDB4MDAxMAorI2RlZmluZSBURUdSQV9OVkhEQ1BfRkxBR19DS1NWIDB4MDAyMAogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgVEVHUkFfTlZIRENQX0ZMQUdfREtTViAweDAwNDAgIAotI2RlZmluZSBURUdSQV9OVkhEQ1BfRkxBR19LUCAweDAwODAgIAotI2RlZmluZSBURUdSQV9OVkhEQ1BfRkxBR19TIDB4MDEwMCAgCi0jZGVmaW5lIFRFR1JBX05WSERDUF9GTEFHX0NTIDB4MDIwMCAgCisjZGVmaW5lIFRFR1JBX05WSERDUF9GTEFHX0RLU1YgMHgwMDQwCisjZGVmaW5lIFRFR1JBX05WSERDUF9GTEFHX0tQIDB4MDA4MAorI2RlZmluZSBURUdSQV9OVkhEQ1BfRkxBR19TIDB4MDEwMAorI2RlZmluZSBURUdSQV9OVkhEQ1BfRkxBR19DUyAweDAyMDAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFRFR1JBX05WSERDUF9GTEFHX1YgMHgwNDAwCiAjZGVmaW5lIFRFR1JBX05WSERDUF9GTEFHX01QIDB4MDgwMApAQCAtODIsNCArODIsMyBAQAogI2RlZmluZSBURUdSQUlPX05WSERDUF9SRU5FR09USUFURSBfSU8oJ0YnLCAweDc1KQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlbmRpZgotCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbnZyYW0uaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9udnJhbS5oCmluZGV4IGIzNThiZGIuLjg0OTZmNzkgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9udnJhbS5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9udnJhbS5oCkBAIC03LDE4ICs3LDIyIEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfTElOVVhfTlZSQU1fSAogI2RlZmluZSBfTElOVVhfTlZSQU1fSAotCiAjaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KLQotI2RlZmluZSBOVlJBTV9JTklUIF9JTygncCcsIDB4NDApICAKLSNkZWZpbmUgTlZSQU1fU0VUQ0tTIF9JTygncCcsIDB4NDEpICAKLQorI2RlZmluZSBOVlJBTV9JTklUIF9JTygncCcsIDB4NDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBOVlJBTV9TRVRDS1MgX0lPKCdwJywgMHg0MSkKICNkZWZpbmUgTlZSQU1fRklSU1RfQllURSAxNAotCiAjZGVmaW5lIE5WUkFNX09GRlNFVCh4KSAoKHgpLU5WUkFNX0ZJUlNUX0JZVEUpCi0KICNlbmRpZgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9vbWFwX2NzbWkuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9vbWFwX2NzbWkuaAppbmRleCA2YTI4ZDNkLi4wN2RjODU2IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvb21hcF9jc21pLmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L29tYXBfY3NtaS5oCkBAIC03LDE3ICs3LDIzIEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfT01BUF9DU01JX0hfCiAjZGVmaW5lIF9PTUFQX0NTTUlfSF8KLQogI2luY2x1ZGUgPGFzbS9pb2N0bC5oPgotCiAjZGVmaW5lIE9NQVBfQ1NNSV9UVFlfRU5BQkxFX0FDSyBfSU8oJ2MnLCAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgT01BUF9DU01JX1RUWV9ESVNBQkxFX0FDSyBfSU8oJ2MnLCAxKQogI2RlZmluZSBPTUFQX0NTTUlfVFRZX1JFQURfVU5BQ0tFRCBfSU9SKCdjJywgMiwgaW50KQogI2RlZmluZSBPTUFQX0NTTUlfVFRZX0FDSyBfSU9XKCdjJywgMywgaW50KQogI2RlZmluZSBPTUFQX0NTTUlfVFRZX1dBS0VVUF9BTkRfQUNLIF9JT1coJ2MnLCA0LCBpbnQpCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9vbWFwX2lvbi5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L29tYXBfaW9uLmgKaW5kZXggMjE2NTMzZS4uNjVhZjkxNCAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L29tYXBfaW9uLmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L29tYXBfaW9uLmgKQEAgLTU3LDQgKzU3LDMgQEAKIH07CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2VuZGlmCi0KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9wYWdlbWFwLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvcGFnZW1hcC5oCmluZGV4IDhkZDM5N2QuLmM5MWU3OGIgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9wYWdlbWFwLmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3BhZ2VtYXAuaApAQCAtNywyNyArNywzNSBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX0xJTlVYX1BBR0VNQVBfSAogI2RlZmluZSBfTElOVVhfUEFHRU1BUF9ICi0KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9oaWdobWVtLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNpbmNsdWRlIDxsaW51eC9nZnAuaD4KLQotI2RlZmluZSBBU19FSU8gKF9fR0ZQX0JJVFNfU0hJRlQgKyAwKSAgCi0jZGVmaW5lIEFTX0VOT1NQQyAoX19HRlBfQklUU19TSElGVCArIDEpICAKLQorI2RlZmluZSBBU19FSU8gKF9fR0ZQX0JJVFNfU0hJRlQgKyAwKQorI2RlZmluZSBBU19FTk9TUEMgKF9fR0ZQX0JJVFNfU0hJRlQgKyAxKQogI2RlZmluZSBQQUdFX0NBQ0hFX1NISUZUIFBBR0VfU0hJRlQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBBR0VfQ0FDSEVfU0laRSBQQUdFX1NJWkUKICNkZWZpbmUgUEFHRV9DQUNIRV9NQVNLIFBBR0VfTUFTSwogI2RlZmluZSBQQUdFX0NBQ0hFX0FMSUdOKGFkZHIpICgoKGFkZHIpK1BBR0VfQ0FDSEVfU0laRS0xKSZQQUdFX0NBQ0hFX01BU0spCiAjZGVmaW5lIHBhZ2VfY2FjaGVfZ2V0KHBhZ2UpIGdldF9wYWdlKHBhZ2UpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBwYWdlX2NhY2hlX3JlbGVhc2UocGFnZSkgcHV0X3BhZ2UocGFnZSkKLQordHlwZWRlZiBpbnQgZmlsbGVyX3Qodm9pZCAqLCBzdHJ1Y3QgcGFnZSAqKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3BhcmFtLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvcGFyYW0uaAppbmRleCA0NTY2OTVkLi41NjljOWRkIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvcGFyYW0uaAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvcGFyYW0uaApAQCAtNywxMSArNywxNyBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX0xJTlVYX1BBUkFNX0gKICNkZWZpbmUgX0xJTlVYX1BBUkFNX0gKLQogI2luY2x1ZGUgPGFzbS9wYXJhbS5oPgotCiAjZW5kaWYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvcGF0Y2hrZXkuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9wYXRjaGtleS5oCmluZGV4IGZkZjg2Y2UuLmRjOTQ5NDkgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9wYXRjaGtleS5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9wYXRjaGtleS5oCkBAIC03LDI1ICs3LDMyIEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfTElOVVhfUEFUQ0hLRVlfSF9JTkRJUkVDVAogI2Vycm9yICJwYXRjaGtleS5oIGluY2x1ZGVkIGRpcmVjdGx5IgogI2VuZGlmCi0KICNpZm5kZWYgX0xJTlVYX1BBVENIS0VZX0gKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9MSU5VWF9QQVRDSEtFWV9ICi0KICNpbmNsdWRlIDxlbmRpYW4uaD4KLQogI2lmZGVmIF9fQllURV9PUkRFUgogI2lmIF9fQllURV9PUkRFUiA9PSBfX0JJR19FTkRJQU4KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9QQVRDSEtFWShpZCkgKDB4ZmQwMHxpZCkKICNlbGlmIF9fQllURV9PUkRFUiA9PSBfX0xJVFRMRV9FTkRJQU4KICNkZWZpbmUgX1BBVENIS0VZKGlkKSAoKGlkPDw4KXwweDAwZmQpCiAjZWxzZQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlcnJvciAiY291bGQgbm90IGRldGVybWluZSBieXRlIG9yZGVyIgogI2VuZGlmCiAjZW5kaWYKLQogI2VuZGlmCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3BjaS5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3BjaS5oCmluZGV4IDE2NWRlYjQuLjQ4NDg3YTggMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9wY2kuaAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvcGNpLmgKQEAgLTcsMjMgKzcsMjggQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIExJTlVYX1BDSV9ICiAjZGVmaW5lIExJTlVYX1BDSV9ICi0KICNpbmNsdWRlIDxsaW51eC9wY2lfcmVncy5oPgotCiAjaW5jbHVkZSA8bGludXgvcGNpX2lkcy5oPgotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfREVWRk4oc2xvdCxmdW5jKSAoKCgoc2xvdCkgJiAweDFmKSA8PCAzKSB8ICgoZnVuYykgJiAweDA3KSkKICNkZWZpbmUgUENJX1NMT1QoZGV2Zm4pICgoKGRldmZuKSA+PiAzKSAmIDB4MWYpCiAjZGVmaW5lIFBDSV9GVU5DKGRldmZuKSAoKGRldmZuKSAmIDB4MDcpCi0KICNkZWZpbmUgUENJSU9DX0JBU0UgKCdQJyA8PCAyNCB8ICdDJyA8PCAxNiB8ICdJJyA8PCA4KQotI2RlZmluZSBQQ0lJT0NfQ09OVFJPTExFUiAoUENJSU9DX0JBU0UgfCAweDAwKSAgCi0jZGVmaW5lIFBDSUlPQ19NTUFQX0lTX0lPIChQQ0lJT0NfQkFTRSB8IDB4MDEpICAKLSNkZWZpbmUgUENJSU9DX01NQVBfSVNfTUVNIChQQ0lJT0NfQkFTRSB8IDB4MDIpICAKLSNkZWZpbmUgUENJSU9DX1dSSVRFX0NPTUJJTkUgKFBDSUlPQ19CQVNFIHwgMHgwMykgIAotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBQQ0lJT0NfQ09OVFJPTExFUiAoUENJSU9DX0JBU0UgfCAweDAwKQorI2RlZmluZSBQQ0lJT0NfTU1BUF9JU19JTyAoUENJSU9DX0JBU0UgfCAweDAxKQorI2RlZmluZSBQQ0lJT0NfTU1BUF9JU19NRU0gKFBDSUlPQ19CQVNFIHwgMHgwMikKKyNkZWZpbmUgUENJSU9DX1dSSVRFX0NPTUJJTkUgKFBDSUlPQ19CQVNFIHwgMHgwMykKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9wY2lfaWRzLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvcGNpX2lkcy5oCmluZGV4IGVjNWFkZmIuLjY1MTE4M2MgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9wY2lfaWRzLmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3BjaV9pZHMuaApAQCAtNywyMjY0ICs3LDI1NDcgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjZGVmaW5lIFBDSV9DTEFTU19OT1RfREVGSU5FRCAweDAwMDAKICNkZWZpbmUgUENJX0NMQVNTX05PVF9ERUZJTkVEX1ZHQSAweDAwMDEKLQogI2RlZmluZSBQQ0lfQkFTRV9DTEFTU19TVE9SQUdFIDB4MDEKICNkZWZpbmUgUENJX0NMQVNTX1NUT1JBR0VfU0NTSSAweDAxMDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9DTEFTU19TVE9SQUdFX0lERSAweDAxMDEKICNkZWZpbmUgUENJX0NMQVNTX1NUT1JBR0VfRkxPUFBZIDB4MDEwMgogI2RlZmluZSBQQ0lfQ0xBU1NfU1RPUkFHRV9JUEkgMHgwMTAzCiAjZGVmaW5lIFBDSV9DTEFTU19TVE9SQUdFX1JBSUQgMHgwMTA0CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfQ0xBU1NfU1RPUkFHRV9TQVMgMHgwMTA3CiAjZGVmaW5lIFBDSV9DTEFTU19TVE9SQUdFX09USEVSIDB4MDE4MAotCiAjZGVmaW5lIFBDSV9CQVNFX0NMQVNTX05FVFdPUksgMHgwMgogI2RlZmluZSBQQ0lfQ0xBU1NfTkVUV09SS19FVEhFUk5FVCAweDAyMDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9DTEFTU19ORVRXT1JLX1RPS0VOX1JJTkcgMHgwMjAxCiAjZGVmaW5lIFBDSV9DTEFTU19ORVRXT1JLX0ZEREkgMHgwMjAyCiAjZGVmaW5lIFBDSV9DTEFTU19ORVRXT1JLX0FUTSAweDAyMDMKICNkZWZpbmUgUENJX0NMQVNTX05FVFdPUktfT1RIRVIgMHgwMjgwCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9CQVNFX0NMQVNTX0RJU1BMQVkgMHgwMwogI2RlZmluZSBQQ0lfQ0xBU1NfRElTUExBWV9WR0EgMHgwMzAwCiAjZGVmaW5lIFBDSV9DTEFTU19ESVNQTEFZX1hHQSAweDAzMDEKICNkZWZpbmUgUENJX0NMQVNTX0RJU1BMQVlfM0QgMHgwMzAyCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfQ0xBU1NfRElTUExBWV9PVEhFUiAweDAzODAKLQogI2RlZmluZSBQQ0lfQkFTRV9DTEFTU19NVUxUSU1FRElBIDB4MDQKICNkZWZpbmUgUENJX0NMQVNTX01VTFRJTUVESUFfVklERU8gMHgwNDAwCiAjZGVmaW5lIFBDSV9DTEFTU19NVUxUSU1FRElBX0FVRElPIDB4MDQwMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0NMQVNTX01VTFRJTUVESUFfUEhPTkUgMHgwNDAyCiAjZGVmaW5lIFBDSV9DTEFTU19NVUxUSU1FRElBX09USEVSIDB4MDQ4MAotCiAjZGVmaW5lIFBDSV9CQVNFX0NMQVNTX01FTU9SWSAweDA1CiAjZGVmaW5lIFBDSV9DTEFTU19NRU1PUllfUkFNIDB4MDUwMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0NMQVNTX01FTU9SWV9GTEFTSCAweDA1MDEKICNkZWZpbmUgUENJX0NMQVNTX01FTU9SWV9PVEhFUiAweDA1ODAKLQogI2RlZmluZSBQQ0lfQkFTRV9DTEFTU19CUklER0UgMHgwNgogI2RlZmluZSBQQ0lfQ0xBU1NfQlJJREdFX0hPU1QgMHgwNjAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfQ0xBU1NfQlJJREdFX0lTQSAweDA2MDEKICNkZWZpbmUgUENJX0NMQVNTX0JSSURHRV9FSVNBIDB4MDYwMgogI2RlZmluZSBQQ0lfQ0xBU1NfQlJJREdFX01DIDB4MDYwMwogI2RlZmluZSBQQ0lfQ0xBU1NfQlJJREdFX1BDSSAweDA2MDQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9DTEFTU19CUklER0VfUENNQ0lBIDB4MDYwNQogI2RlZmluZSBQQ0lfQ0xBU1NfQlJJREdFX05VQlVTIDB4MDYwNgogI2RlZmluZSBQQ0lfQ0xBU1NfQlJJREdFX0NBUkRCVVMgMHgwNjA3CiAjZGVmaW5lIFBDSV9DTEFTU19CUklER0VfUkFDRVdBWSAweDA2MDgKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9DTEFTU19CUklER0VfT1RIRVIgMHgwNjgwCi0KICNkZWZpbmUgUENJX0JBU0VfQ0xBU1NfQ09NTVVOSUNBVElPTiAweDA3CiAjZGVmaW5lIFBDSV9DTEFTU19DT01NVU5JQ0FUSU9OX1NFUklBTCAweDA3MDAKICNkZWZpbmUgUENJX0NMQVNTX0NPTU1VTklDQVRJT05fUEFSQUxMRUwgMHgwNzAxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfQ0xBU1NfQ09NTVVOSUNBVElPTl9NVUxUSVNFUklBTCAweDA3MDIKICNkZWZpbmUgUENJX0NMQVNTX0NPTU1VTklDQVRJT05fTU9ERU0gMHgwNzAzCiAjZGVmaW5lIFBDSV9DTEFTU19DT01NVU5JQ0FUSU9OX09USEVSIDB4MDc4MAotCiAjZGVmaW5lIFBDSV9CQVNFX0NMQVNTX1NZU1RFTSAweDA4CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfQ0xBU1NfU1lTVEVNX1BJQyAweDA4MDAKICNkZWZpbmUgUENJX0NMQVNTX1NZU1RFTV9QSUNfSU9BUElDIDB4MDgwMDEwCiAjZGVmaW5lIFBDSV9DTEFTU19TWVNURU1fUElDX0lPWEFQSUMgMHgwODAwMjAKICNkZWZpbmUgUENJX0NMQVNTX1NZU1RFTV9ETUEgMHgwODAxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfQ0xBU1NfU1lTVEVNX1RJTUVSIDB4MDgwMgogI2RlZmluZSBQQ0lfQ0xBU1NfU1lTVEVNX1JUQyAweDA4MDMKICNkZWZpbmUgUENJX0NMQVNTX1NZU1RFTV9QQ0lfSE9UUExVRyAweDA4MDQKICNkZWZpbmUgUENJX0NMQVNTX1NZU1RFTV9TREhDSSAweDA4MDUKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9DTEFTU19TWVNURU1fT1RIRVIgMHgwODgwCi0KICNkZWZpbmUgUENJX0JBU0VfQ0xBU1NfSU5QVVQgMHgwOQogI2RlZmluZSBQQ0lfQ0xBU1NfSU5QVVRfS0VZQk9BUkQgMHgwOTAwCiAjZGVmaW5lIFBDSV9DTEFTU19JTlBVVF9QRU4gMHgwOTAxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfQ0xBU1NfSU5QVVRfTU9VU0UgMHgwOTAyCiAjZGVmaW5lIFBDSV9DTEFTU19JTlBVVF9TQ0FOTkVSIDB4MDkwMwogI2RlZmluZSBQQ0lfQ0xBU1NfSU5QVVRfR0FNRVBPUlQgMHgwOTA0CiAjZGVmaW5lIFBDSV9DTEFTU19JTlBVVF9PVEhFUiAweDA5ODAKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0JBU0VfQ0xBU1NfRE9DS0lORyAweDBhCiAjZGVmaW5lIFBDSV9DTEFTU19ET0NLSU5HX0dFTkVSSUMgMHgwYTAwCiAjZGVmaW5lIFBDSV9DTEFTU19ET0NLSU5HX09USEVSIDB4MGE4MAotCiAjZGVmaW5lIFBDSV9CQVNFX0NMQVNTX1BST0NFU1NPUiAweDBiCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfQ0xBU1NfUFJPQ0VTU09SXzM4NiAweDBiMDAKICNkZWZpbmUgUENJX0NMQVNTX1BST0NFU1NPUl80ODYgMHgwYjAxCiAjZGVmaW5lIFBDSV9DTEFTU19QUk9DRVNTT1JfUEVOVElVTSAweDBiMDIKICNkZWZpbmUgUENJX0NMQVNTX1BST0NFU1NPUl9BTFBIQSAweDBiMTAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9DTEFTU19QUk9DRVNTT1JfUE9XRVJQQyAweDBiMjAKICNkZWZpbmUgUENJX0NMQVNTX1BST0NFU1NPUl9NSVBTIDB4MGIzMAogI2RlZmluZSBQQ0lfQ0xBU1NfUFJPQ0VTU09SX0NPIDB4MGI0MAotCiAjZGVmaW5lIFBDSV9CQVNFX0NMQVNTX1NFUklBTCAweDBjCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfQ0xBU1NfU0VSSUFMX0ZJUkVXSVJFIDB4MGMwMAogI2RlZmluZSBQQ0lfQ0xBU1NfU0VSSUFMX0FDQ0VTUyAweDBjMDEKICNkZWZpbmUgUENJX0NMQVNTX1NFUklBTF9TU0EgMHgwYzAyCiAjZGVmaW5lIFBDSV9DTEFTU19TRVJJQUxfVVNCIDB4MGMwMworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0NMQVNTX1NFUklBTF9VU0JfVUhDSSAweDBjMDMwMAogI2RlZmluZSBQQ0lfQ0xBU1NfU0VSSUFMX1VTQl9PSENJIDB4MGMwMzEwCiAjZGVmaW5lIFBDSV9DTEFTU19TRVJJQUxfVVNCX0VIQ0kgMHgwYzAzMjAKICNkZWZpbmUgUENJX0NMQVNTX1NFUklBTF9GSUJFUiAweDBjMDQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9DTEFTU19TRVJJQUxfU01CVVMgMHgwYzA1Ci0KICNkZWZpbmUgUENJX0JBU0VfQ0xBU1NfSU5URUxMSUdFTlQgMHgwZQogI2RlZmluZSBQQ0lfQ0xBU1NfSU5URUxMSUdFTlRfSTJPIDB4MGUwMAotCiAjZGVmaW5lIFBDSV9CQVNFX0NMQVNTX1NBVEVMTElURSAweDBmCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfQ0xBU1NfU0FURUxMSVRFX1RWIDB4MGYwMAogI2RlZmluZSBQQ0lfQ0xBU1NfU0FURUxMSVRFX0FVRElPIDB4MGYwMQogI2RlZmluZSBQQ0lfQ0xBU1NfU0FURUxMSVRFX1ZPSUNFIDB4MGYwMwogI2RlZmluZSBQQ0lfQ0xBU1NfU0FURUxMSVRFX0RBVEEgMHgwZjA0Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9CQVNFX0NMQVNTX0NSWVBUIDB4MTAKICNkZWZpbmUgUENJX0NMQVNTX0NSWVBUX05FVFdPUksgMHgxMDAwCiAjZGVmaW5lIFBDSV9DTEFTU19DUllQVF9FTlRFUlRBSU5NRU5UIDB4MTAwMQogI2RlZmluZSBQQ0lfQ0xBU1NfQ1JZUFRfT1RIRVIgMHgxMDgwCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9CQVNFX0NMQVNTX1NJR05BTF9QUk9DRVNTSU5HIDB4MTEKICNkZWZpbmUgUENJX0NMQVNTX1NQX0RQSU8gMHgxMTAwCiAjZGVmaW5lIFBDSV9DTEFTU19TUF9PVEhFUiAweDExODAKLQogI2RlZmluZSBQQ0lfQ0xBU1NfT1RIRVJTIDB4ZmYKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX1ZFTkRPUl9JRF9EWU5BTElOSyAweDA2NzUKICNkZWZpbmUgUENJX0RFVklDRV9JRF9EWU5BTElOS19JUzY0UEggMHgxNzAyCi0KICNkZWZpbmUgUENJX1ZFTkRPUl9JRF9CRVJLT00gMHgwODcxCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQkVSS09NX0ExVCAweGZmYTEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQkVSS09NX1RfQ09OQ0VQVCAweGZmYTIKICNkZWZpbmUgUENJX0RFVklDRV9JRF9CRVJLT01fQTRUIDB4ZmZhNAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0JFUktPTV9TQ0lURUxfUVVBRFJPIDB4ZmZhOAotCiAjZGVmaW5lIFBDSV9WRU5ET1JfSURfQ09NUEFRIDB4MGUxMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0RFVklDRV9JRF9DT01QQVFfVE9LRU5SSU5HIDB4MDUwOAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0NPTVBBUV9UQUNIWU9OIDB4YTBmYwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0NPTVBBUV9TTUFSVDJQIDB4YWUxMAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0NPTVBBUV9ORVRFTDEwMCAweGFlMzIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQ09NUEFRX05FVEVMMTAgMHhhZTM0CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQ09NUEFRX1RSSUZMRVhfSURFIDB4YWUzMwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0NPTVBBUV9ORVRGTEVYM0kgMHhhZTM1CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQ09NUEFRX05FVEVMMTAwRCAweGFlNDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQ09NUEFRX05FVEVMMTAwUEkgMHhhZTQzCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQ09NUEFRX05FVEVMMTAwSSAweGIwMTEKICNkZWZpbmUgUENJX0RFVklDRV9JRF9DT01QQVFfQ0lTUyAweGIwNjAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9DT01QQVFfQ0lTU0IgMHhiMTc4CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0NPTVBBUV9DSVNTQyAweDQ2CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQ09NUEFRX1RIVU5ERVIgMHhmMTMwCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQ09NUEFRX05FVEZMRVgzQiAweGYxNTAKLQogI2RlZmluZSBQQ0lfVkVORE9SX0lEX05DUiAweDEwMDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9WRU5ET1JfSURfTFNJX0xPR0lDIDB4MTAwMAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX05DUl81M0M4MTAgMHgwMDAxCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTkNSXzUzQzgyMCAweDAwMDIKICNkZWZpbmUgUENJX0RFVklDRV9JRF9OQ1JfNTNDODI1IDB4MDAwMworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0RFVklDRV9JRF9OQ1JfNTNDODE1IDB4MDAwNAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0xTSV81M0M4MTBBUCAweDAwMDUKICNkZWZpbmUgUENJX0RFVklDRV9JRF9OQ1JfNTNDODYwIDB4MDAwNgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0xTSV81M0MxNTEwIDB4MDAwYQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0RFVklDRV9JRF9OQ1JfNTNDODk2IDB4MDAwYgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX05DUl81M0M4OTUgMHgwMDBjCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTkNSXzUzQzg4NSAweDAwMGQKICNkZWZpbmUgUENJX0RFVklDRV9JRF9OQ1JfNTNDODc1IDB4MDAwZgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0RFVklDRV9JRF9OQ1JfNTNDMTUxMCAweDAwMTAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9MU0lfNTNDODk1QSAweDAwMTIKICNkZWZpbmUgUENJX0RFVklDRV9JRF9MU0lfNTNDODc1QSAweDAwMTMKICNkZWZpbmUgUENJX0RFVklDRV9JRF9MU0lfNTNDMTAxMF8zMyAweDAwMjAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTFNJXzUzQzEwMTBfNjYgMHgwMDIxCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTFNJXzUzQzEwMzAgMHgwMDMwCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTFNJXzEwMzBfNTNDMTAzNSAweDAwMzIKICNkZWZpbmUgUENJX0RFVklDRV9JRF9MU0lfNTNDMTAzNSAweDAwNDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTkNSXzUzQzg3NUogMHgwMDhmCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTFNJX0ZDOTA5IDB4MDYyMQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0xTSV9GQzkyOSAweDA2MjIKICNkZWZpbmUgUENJX0RFVklDRV9JRF9MU0lfRkM5MjlfTEFOIDB4MDYyMworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0RFVklDRV9JRF9MU0lfRkM5MTkgMHgwNjI0CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTFNJX0ZDOTE5X0xBTiAweDA2MjUKICNkZWZpbmUgUENJX0RFVklDRV9JRF9MU0lfRkM5MjlYIDB4MDYyNgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0xTSV9GQzkzOVggMHgwNjQyCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0xTSV9GQzk0OVggMHgwNjQwCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTFNJX0ZDOTQ5RVMgMHgwNjQ2CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTFNJX0ZDOTE5WCAweDA2MjgKICNkZWZpbmUgUENJX0RFVklDRV9JRF9OQ1JfWUVMTE9XRklOIDB4MDcwMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0RFVklDRV9JRF9MU0lfNjFDMTAyIDB4MDkwMQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0xTSV82M0M4MTUgMHgxMDAwCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTFNJX1NBUzEwNjQgMHgwMDUwCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTFNJX1NBUzEwNjRSIDB4MDQxMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0RFVklDRV9JRF9MU0lfU0FTMTA2NiAweDAwNUUKICNkZWZpbmUgUENJX0RFVklDRV9JRF9MU0lfU0FTMTA2OCAweDAwNTQKICNkZWZpbmUgUENJX0RFVklDRV9JRF9MU0lfU0FTMTA2NEEgMHgwMDVDCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTFNJX1NBUzEwNjRFIDB4MDA1NgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0RFVklDRV9JRF9MU0lfU0FTMTA2NkUgMHgwMDVBCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTFNJX1NBUzEwNjhFIDB4MDA1OAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0xTSV9TQVMxMDc4IDB4MDA2MAotCiAjZGVmaW5lIFBDSV9WRU5ET1JfSURfQVRJIDB4MTAwMgotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV82ODgwMCAweDQxNTgKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfMjE1Q1QyMjIgMHg0MzU0CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJXzIxMDg4OENYIDB4NDM1OAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV8yMTVFVDIyMiAweDQ1NTQKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfMjE1R0IgMHg0NzQyCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJXzIxNUdEIDB4NDc0NAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV8yMTVHSSAweDQ3NDkKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfMjE1R1AgMHg0NzUwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV8yMTVHUSAweDQ3NTEKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfMjE1WEwgMHg0NzUyCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJXzIxNUdUIDB4NDc1NAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV8yMTVHVEIgMHg0NzU1CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV8yMTVfSVYgMHg0NzU2CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJXzIxNV9JVyAweDQ3NTcKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfMjE1X0laIDB4NDc1QQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV8yMTA4ODhHWCAweDQ3NTgKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJXzIxNV9MQiAweDRjNDIKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfMjE1X0xEIDB4NGM0NAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV8yMTVfTEcgMHg0YzQ3CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJXzIxNV9MSSAweDRjNDkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJXzIxNV9MTSAweDRjNEQKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfMjE1X0xOIDB4NGM0RQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV8yMTVfTFIgMHg0YzUyCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJXzIxNV9MUyAweDRjNTMKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJXzI2NF9MVCAweDRjNTQKLQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV8yNjRWVCAweDU2NTQKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfMjY0VlUgMHg1NjU1CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJXzI2NFZWIDB4NTY1NgotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9SQUdFMTI4X1JFIDB4NTI0NQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9SQUdFMTI4X1JGIDB4NTI0NgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9SQUdFMTI4X1JHIDB4NTI0NwotCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX1JBR0UxMjhfUksgMHg1MjRiCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9SQUdFMTI4X1JMIDB4NTI0YwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9SQUdFMTI4X1NFIDB4NTM0NQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9SQUdFMTI4X1NGIDB4NTM0NgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9SQUdFMTI4X1NHIDB4NTM0NworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfUkFHRTEyOF9TSCAweDUzNDgKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfUkFHRTEyOF9TSyAweDUzNGIKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfUkFHRTEyOF9TTCAweDUzNGMKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfUkFHRTEyOF9TTSAweDUzNGQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX1JBR0UxMjhfU04gMHg1MzRlCi0KICNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfUkFHRTEyOF9URiAweDU0NDYKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfUkFHRTEyOF9UTCAweDU0NGMKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfUkFHRTEyOF9UUiAweDU0NTIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX1JBR0UxMjhfVFMgMHg1NDUzCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX1JBR0UxMjhfVFQgMHg1NDU0CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX1JBR0UxMjhfVFUgMHg1NDU1Ci0KICNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfUkFHRTEyOF9MRSAweDRjNDUKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX1JBR0UxMjhfTEYgMHg0YzQ2Ci0KICNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfUkFHRTEyOF9NRiAweDRkNDYKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfUkFHRTEyOF9NTCAweDRkNGMKLQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9SQUdFMTI4X1BBIDB4NTA0MQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfUkFHRTEyOF9QQiAweDUwNDIKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfUkFHRTEyOF9QQyAweDUwNDMKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfUkFHRTEyOF9QRCAweDUwNDQKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfUkFHRTEyOF9QRSAweDUwNDUKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX1JBR0UxMjhfUEYgMHg1MDQ2Ci0KICNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfUkFHRTEyOF9QRyAweDUwNDcKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfUkFHRTEyOF9QSCAweDUwNDgKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfUkFHRTEyOF9QSSAweDUwNDkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX1JBR0UxMjhfUEogMHg1MDRBCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX1JBR0UxMjhfUEsgMHg1MDRCCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX1JBR0UxMjhfUEwgMHg1MDRDCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX1JBR0UxMjhfUE0gMHg1MDRECisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9SQUdFMTI4X1BOIDB4NTA0RQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9SQUdFMTI4X1BPIDB4NTA0RgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9SQUdFMTI4X1BQIDB4NTA1MAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9SQUdFMTI4X1BRIDB4NTA1MQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfUkFHRTEyOF9QUiAweDUwNTIKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfUkFHRTEyOF9QUyAweDUwNTMKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfUkFHRTEyOF9QVCAweDUwNTQKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfUkFHRTEyOF9QVSAweDUwNTUKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX1JBR0UxMjhfUFYgMHg1MDU2CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX1JBR0UxMjhfUFcgMHg1MDU3CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX1JBR0UxMjhfUFggMHg1MDU4Ci0KICNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfUkFERU9OX1FEIDB4NTE0NAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfUkFERU9OX1FFIDB4NTE0NQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9SQURFT05fUUYgMHg1MTQ2CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX1JBREVPTl9RRyAweDUxNDcKLQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9SQURFT05fUVkgMHg1MTU5CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9SQURFT05fUVogMHg1MTVhCi0KICNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfUkFERU9OX1FMIDB4NTE0YwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9SQURFT05fUU4gMHg1MTRlCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX1JBREVPTl9RTyAweDUxNGYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX1JBREVPTl9RbCAweDUxNmMKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfUkFERU9OX0JCIDB4NDI0MgotCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX1JBREVPTl9RTSAweDUxNGQKLQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9SQURFT05fUVcgMHg1MTU3CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9SQURFT05fUVggMHg1MTU4Ci0KICNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfUkFERU9OX0lkIDB4NDk2NAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9SQURFT05fSWUgMHg0OTY1CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX1JBREVPTl9JZiAweDQ5NjYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX1JBREVPTl9JZyAweDQ5NjcKLQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9SQURFT05fWWEgMHg1OTYxCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX1JBREVPTl9ZZCAweDU5NjQKLQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9SQURFT05fTkQgMHg0ZTQ0CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9SQURFT05fTkUgMHg0ZTQ1CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX1JBREVPTl9ORiAweDRlNDYKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfUkFERU9OX05HIDB4NGU0NwotCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX1JBREVPTl9MWSAweDRjNTkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX1JBREVPTl9MWiAweDRjNWEKLQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9SQURFT05fTFcgMHg0YzU3CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX1JBREVPTl9MWCAweDRjNTgKLQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9SQURFT05fTGQgMHg0YzY0CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9SQURFT05fTGUgMHg0YzY1CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX1JBREVPTl9MZiAweDRjNjYKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfUkFERU9OX0xnIDB4NGM2NwotCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX1JTMTAwIDB4Y2FiMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfUlMyMDAgMHhjYWIyCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX1JTMjAwX0IgMHhjYmIyCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX1JTMjUwIDB4Y2FiMwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9SUzMwMF8xMDAgMHg1ODMwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9SUzMwMF8xMzMgMHg1ODMxCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX1JTMzAwXzE2NiAweDU4MzIKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfUlMzMDBfMjAwIDB4NTgzMwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9SUzM1MF8xMDAgMHg3ODMwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9SUzM1MF8xMzMgMHg3ODMxCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX1JTMzUwXzE2NiAweDc4MzIKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfUlMzNTBfMjAwIDB4NzgzMwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9SUzQwMF8xMDAgMHg1YTMwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9SUzQwMF8xMzMgMHg1YTMxCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX1JTNDAwXzE2NiAweDVhMzIKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfUlM0MDBfMjAwIDB4NWEzMwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9SUzQ4MCAweDU5NTAKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfSVhQMjAwX0lERSAweDQzNDkKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfSVhQMjAwX1NNQlVTIDB4NDM1MwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9JWFAzMDBfU01CVVMgMHg0MzYzCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX0lYUDMwMF9JREUgMHg0MzY5CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9JWFAzMDBfU0FUQSAweDQzNmUKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfSVhQNDAwX1NNQlVTIDB4NDM3MgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9JWFA0MDBfSURFIDB4NDM3NgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9JWFA0MDBfU0FUQSAweDQzNzkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX0lYUDQwMF9TQVRBMiAweDQzN2EKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfSVhQNjAwX1NBVEEgMHg0MzgwCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX0lYUDYwMF9TUkFJRCAweDQzODEKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfSVhQNjAwX0lERSAweDQzOGMKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX1ZFTkRPUl9JRF9WTFNJIDB4MTAwNAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZMU0lfODJDNTkyIDB4MDAwNQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZMU0lfODJDNTkzIDB4MDAwNgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZMU0lfODJDNTk0IDB4MDAwNworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0RFVklDRV9JRF9WTFNJXzgyQzU5NyAweDAwMDkKICNkZWZpbmUgUENJX0RFVklDRV9JRF9WTFNJXzgyQzU0MSAweDAwMGMKICNkZWZpbmUgUENJX0RFVklDRV9JRF9WTFNJXzgyQzU0MyAweDAwMGQKICNkZWZpbmUgUENJX0RFVklDRV9JRF9WTFNJXzgyQzUzMiAweDAxMDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVkxTSV84MkM1MzQgMHgwMTAyCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVkxTSV84MkM1MzUgMHgwMTA0CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVkxTSV84MkMxNDcgMHgwMTA1CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVkxTSV9WQVM5NjAxMSAweDA3MDIKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX1ZFTkRPUl9JRF9BREwgMHgxMDA1CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQURMXzIzMDEgMHgyMzAxCi0KICNkZWZpbmUgUENJX1ZFTkRPUl9JRF9OUyAweDEwMGIKICNkZWZpbmUgUENJX0RFVklDRV9JRF9OU184NzQxNSAweDAwMDIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlNfODc1NjBfTElPIDB4MDAwZQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX05TXzg3NTYwX1VTQiAweDAwMTIKICNkZWZpbmUgUENJX0RFVklDRV9JRF9OU184MzgxNSAweDAwMjAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9OU184MzgyMCAweDAwMjIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlNfQ1M1NTM1X0lTQSAweDAwMmIKICNkZWZpbmUgUENJX0RFVklDRV9JRF9OU19DUzU1MzVfSURFIDB4MDAyZAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX05TX0NTNTUzNV9BVURJTyAweDAwMmUKICNkZWZpbmUgUENJX0RFVklDRV9JRF9OU19DUzU1MzVfVVNCIDB4MDAyZgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0RFVklDRV9JRF9OU19DUzU1MzVfVklERU8gMHgwMDMwCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlNfU0FUVVJOIDB4MDAzNQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX05TX1NDeDIwMF9CUklER0UgMHgwNTAwCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlNfU0N4MjAwX1NNSSAweDA1MDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlNfU0N4MjAwX0lERSAweDA1MDIKICNkZWZpbmUgUENJX0RFVklDRV9JRF9OU19TQ3gyMDBfQVVESU8gMHgwNTAzCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlNfU0N4MjAwX1ZJREVPIDB4MDUwNAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX05TX1NDeDIwMF9YQlVTIDB4MDUwNQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0RFVklDRV9JRF9OU19TQzExMDBfQlJJREdFIDB4MDUxMAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX05TX1NDMTEwMF9TTUkgMHgwNTExCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlNfU0MxMTAwX1hCVVMgMHgwNTE1CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlNfODc0MTAgMHhkMDAxCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlNfQ1M1NTM1X0hPU1RfQlJJREdFIDB4MDAyOAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX05TX0NTNTUzNV9JU0FfQlJJREdFIDB4MDAyYgotCiAjZGVmaW5lIFBDSV9WRU5ET1JfSURfVFNFTkcgMHgxMDBjCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVFNFTkdfVzMyUF8yIDB4MzIwMgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0RFVklDRV9JRF9UU0VOR19XMzJQX2IgMHgzMjA1CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVFNFTkdfVzMyUF9jIDB4MzIwNgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RTRU5HX1czMlBfZCAweDMyMDcKICNkZWZpbmUgUENJX0RFVklDRV9JRF9UU0VOR19FVDYwMDAgMHgzMjA4Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9WRU5ET1JfSURfV0VJVEVLIDB4MTAwZQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1dFSVRFS19QOTAwMCAweDkwMDEKICNkZWZpbmUgUENJX0RFVklDRV9JRF9XRUlURUtfUDkxMDAgMHg5MTAwCi0KICNkZWZpbmUgUENJX1ZFTkRPUl9JRF9ERUMgMHgxMDExCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0RFQ19CUkQgMHgwMDAxCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfREVDX1RVTElQIDB4MDAwMgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0RFQ19UR0EgMHgwMDA0CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfREVDX1RVTElQX0ZBU1QgMHgwMDA5CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0RFQ19UR0EyIDB4MDAwRAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0RFQ19GRERJIDB4MDAwRgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0RFQ19UVUxJUF9QTFVTIDB4MDAxNAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0RFQ18yMTE0MiAweDAwMTkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfREVDXzIxMDUyIDB4MDAyMQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0RFQ18yMTE1MCAweDAwMjIKICNkZWZpbmUgUENJX0RFVklDRV9JRF9ERUNfMjExNTIgMHgwMDI0CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfREVDXzIxMTUzIDB4MDAyNQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0RFVklDRV9JRF9ERUNfMjExNTQgMHgwMDI2CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfREVDXzIxMjg1IDB4MTA2NQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0NPTVBBUV80MlhYIDB4MDA0NgotCiAjZGVmaW5lIFBDSV9WRU5ET1JfSURfQ0lSUlVTIDB4MTAxMworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0RFVklDRV9JRF9DSVJSVVNfNzU0OCAweDAwMzgKICNkZWZpbmUgUENJX0RFVklDRV9JRF9DSVJSVVNfNTQzMCAweDAwYTAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9DSVJSVVNfNTQzNF80IDB4MDBhNAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0NJUlJVU181NDM0XzggMHgwMGE4CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0NJUlJVU181NDM2IDB4MDBhYwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0NJUlJVU181NDQ2IDB4MDBiOAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0NJUlJVU181NDgwIDB4MDBiYwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0NJUlJVU181NDYyIDB4MDBkMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0RFVklDRV9JRF9DSVJSVVNfNTQ2NCAweDAwZDQKICNkZWZpbmUgUENJX0RFVklDRV9JRF9DSVJSVVNfNTQ2NSAweDAwZDYKICNkZWZpbmUgUENJX0RFVklDRV9JRF9DSVJSVVNfNjcyOSAweDExMDAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9DSVJSVVNfNjgzMiAweDExMTAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQ0lSUlVTXzc1NDMgMHgxMjAyCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQ0lSUlVTXzQ2MTAgMHg2MDAxCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQ0lSUlVTXzQ2MTIgMHg2MDAzCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQ0lSUlVTXzQ2MTUgMHg2MDA0Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9WRU5ET1JfSURfSUJNIDB4MTAxNAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lCTV9UUiAweDAwMTgKICNkZWZpbmUgUENJX0RFVklDRV9JRF9JQk1fVFJfV0FLRSAweDAwM2UKICNkZWZpbmUgUENJX0RFVklDRV9JRF9JQk1fQ1BDNzEwX1BDSTY0IDB4MDBmYworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0RFVklDRV9JRF9JQk1fU05JUEUgMHgwMTgwCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSUJNX0NJVFJJTkUgMHgwMjhDCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSUJNX0dFTVNUT05FIDB4QjE2NgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lCTV9PQlNJRElBTiAweDAyQkQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSUJNX0lDT01fREVWX0lEXzEgMHgwMDMxCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSUJNX0lDT01fREVWX0lEXzIgMHgwMjE5CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSUJNX0lDT01fVjJfVFdPX1BPUlRTX1JWWCAweDAyMUEKICNkZWZpbmUgUENJX0RFVklDRV9JRF9JQk1fSUNPTV9WMl9PTkVfUE9SVF9SVlhfT05FX1BPUlRfTURNIDB4MDI1MQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0RFVklDRV9JRF9JQk1fSUNPTV9GT1VSX1BPUlRfTU9ERUwgMHgyNTIKLQotI2RlZmluZSBQQ0lfVkVORE9SX0lEX0NPTVBFWDIgMHgxMDFhICAKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9DT01QRVgyIDB4MTAxYQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0NPTVBFWDJfMTAwVkcgMHgwMDA1Ci0KICNkZWZpbmUgUENJX1ZFTkRPUl9JRF9XRCAweDEwMWMKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfV0RfOTBDIDB4YzI0YQotCiAjZGVmaW5lIFBDSV9WRU5ET1JfSURfQU1JIDB4MTAxZQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNSV9NRUdBUkFJRDMgMHgxOTYwCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQU1JX01FR0FSQUlEIDB4OTAxMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0RFVklDRV9JRF9BTUlfTUVHQVJBSUQyIDB4OTA2MAotCiAjZGVmaW5lIFBDSV9WRU5ET1JfSURfQU1EIDB4MTAyMgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF9LOF9OQiAweDExMDAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfTEFOQ0UgMHgyMDAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF9MQU5DRV9IT01FIDB4MjAwMQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF9TQ1NJIDB4MjAyMAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF9TRVJFTkFERSAweDM2YzAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfRkVfR0FURV83MDA2IDB4NzAwNgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfRkVfR0FURV83MDA3IDB4NzAwNwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF9GRV9HQVRFXzcwMEMgMHg3MDBDCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQU1EX0ZFX0dBVEVfNzAwRSAweDcwMEUKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfQ09CUkFfNzQwMSAweDc0MDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQU1EX1ZJUEVSXzc0MDkgMHg3NDA5CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQU1EX1ZJUEVSXzc0MEIgMHg3NDBCCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQU1EX1ZJUEVSXzc0MTAgMHg3NDEwCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQU1EX1ZJUEVSXzc0MTEgMHg3NDExCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF9WSVBFUl83NDEzIDB4NzQxMwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF9WSVBFUl83NDQwIDB4NzQ0MAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF9PUFVTXzc0NDEgMHg3NDQxCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQU1EX09QVVNfNzQ0MyAweDc0NDMKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQU1EX1ZJUEVSXzc0NDMgMHg3NDQzCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQU1EX09QVVNfNzQ0NSAweDc0NDUKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfODExMV9MUEMgMHg3NDY4CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQU1EXzgxMTFfSURFIDB4NzQ2OQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfODExMV9TTUJVUzIgMHg3NDZhCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQU1EXzgxMTFfU01CVVMgMHg3NDZiCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQU1EXzgxMTFfQVVESU8gMHg3NDZkCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQU1EXzgxNTFfMCAweDc0NTQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQU1EXzgxMzFfQlJJREdFIDB4NzQ1MAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF84MTMxX0FQSUMgMHg3NDUxCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQU1EX0NTNTUzNl9JU0EgMHgyMDkwCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQU1EX0NTNTUzNl9GTEFTSCAweDIwOTEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQU1EX0NTNTUzNl9BVURJTyAweDIwOTMKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfQ1M1NTM2X09IQyAweDIwOTQKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfQ1M1NTM2X0VIQyAweDIwOTUKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfQ1M1NTM2X1VEQyAweDIwOTYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQU1EX0NTNTUzNl9VT0MgMHgyMDk3CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQU1EX0NTNTUzNl9JREUgMHgyMDlBCi0KICNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfTFhfVklERU8gMHgyMDgxCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQU1EX0xYX0FFUyAweDIwODIKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX1ZFTkRPUl9JRF9UUklERU5UIDB4MTAyMwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RSSURFTlRfNERXQVZFX0RYIDB4MjAwMAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RSSURFTlRfNERXQVZFX05YIDB4MjAwMQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RSSURFTlRfOTMyMCAweDkzMjAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVFJJREVOVF85Mzg4IDB4OTM4OAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RSSURFTlRfOTM5NyAweDkzOTcKICNkZWZpbmUgUENJX0RFVklDRV9JRF9UUklERU5UXzkzOUEgMHg5MzlBCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVFJJREVOVF85NTIwIDB4OTUyMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0RFVklDRV9JRF9UUklERU5UXzk1MjUgMHg5NTI1CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVFJJREVOVF85NDIwIDB4OTQyMAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RSSURFTlRfOTQ0MCAweDk0NDAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9UUklERU5UXzk2NjAgMHg5NjYwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RSSURFTlRfOTc1MCAweDk3NTAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9UUklERU5UXzk4NTAgMHg5ODUwCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVFJJREVOVF85ODgwIDB4OTg4MAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RSSURFTlRfODQwMCAweDg0MDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVFJJREVOVF84NDIwIDB4ODQyMAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RSSURFTlRfODUwMCAweDg1MDAKLQogI2RlZmluZSBQQ0lfVkVORE9SX0lEX0FJIDB4MTAyNQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FJX00xNDM1IDB4MTQzNQotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfVkVORE9SX0lEX0RFTEwgMHgxMDI4CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfREVMTF9SQUNJSUkgMHgwMDA4CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfREVMTF9SQUM0IDB4MDAxMgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0RFTExfUEVSQzUgMHgwMDE1Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9WRU5ET1JfSURfTUFUUk9YIDB4MTAyQgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX01BVFJPWF9NR0FfMiAweDA1MTgKICNkZWZpbmUgUENJX0RFVklDRV9JRF9NQVRST1hfTUlMIDB4MDUxOQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX01BVFJPWF9NWVMgMHgwNTFBCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX01BVFJPWF9NSUxfMiAweDA1MWIKICNkZWZpbmUgUENJX0RFVklDRV9JRF9NQVRST1hfTVlTX0FHUCAweDA1MWUKICNkZWZpbmUgUENJX0RFVklDRV9JRF9NQVRST1hfTUlMXzJfQUdQIDB4MDUxZgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX01BVFJPWF9NR0FfSU1QIDB4MGQxMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0RFVklDRV9JRF9NQVRST1hfRzEwMF9NTSAweDEwMDAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9NQVRST1hfRzEwMF9BR1AgMHgxMDAxCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTUFUUk9YX0cyMDBfUENJIDB4MDUyMAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX01BVFJPWF9HMjAwX0FHUCAweDA1MjEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTUFUUk9YX0c0MDAgMHgwNTI1CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTUFUUk9YX0c1NTAgMHgyNTI3CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTUFUUk9YX1ZJQSAweDQ1MzYKLQogI2RlZmluZSBQQ0lfVkVORE9SX0lEX0NUIDB4MTAyYworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0RFVklDRV9JRF9DVF82OTAwMCAweDAwYzAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9DVF82NTU0NSAweDAwZDgKICNkZWZpbmUgUENJX0RFVklDRV9JRF9DVF82NTU0OCAweDAwZGMKICNkZWZpbmUgUENJX0RFVklDRV9JRF9DVF82NTU1MCAweDAwZTAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQ1RfNjU1NTQgMHgwMGU0CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQ1RfNjU1NTUgMHgwMGU1Ci0KICNkZWZpbmUgUENJX1ZFTkRPUl9JRF9NSVJPIDB4MTAzMQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX01JUk9fMzYwNTAgMHg1NjAxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX01JUk9fREMxMFBMVVMgMHg3ZWZlCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTUlST19EQzMwUExVUyAweGQ4MDEKLQogI2RlZmluZSBQQ0lfVkVORE9SX0lEX05FQyAweDEwMzMKLSNkZWZpbmUgUENJX0RFVklDRV9JRF9ORUNfQ0JVU18xIDB4MDAwMSAgCi0jZGVmaW5lIFBDSV9ERVZJQ0VfSURfTkVDX0xPQ0FMIDB4MDAwMiAgCi0jZGVmaW5lIFBDSV9ERVZJQ0VfSURfTkVDX0FUTSAweDAwMDMgIAotI2RlZmluZSBQQ0lfREVWSUNFX0lEX05FQ19SNDAwMCAweDAwMDQgIAotI2RlZmluZSBQQ0lfREVWSUNFX0lEX05FQ180ODYgMHgwMDA1ICAKLSNkZWZpbmUgUENJX0RFVklDRV9JRF9ORUNfQUNDRUxfMSAweDAwMDYgIAotI2RlZmluZSBQQ0lfREVWSUNFX0lEX05FQ19VWEJVUyAweDAwMDcgIAotI2RlZmluZSBQQ0lfREVWSUNFX0lEX05FQ19BQ0NFTF8yIDB4MDAwOCAgCi0jZGVmaW5lIFBDSV9ERVZJQ0VfSURfTkVDX0dSQVBIIDB4MDAwOSAgCi0jZGVmaW5lIFBDSV9ERVZJQ0VfSURfTkVDX1ZMIDB4MDAxNiAgCi0jZGVmaW5lIFBDSV9ERVZJQ0VfSURfTkVDX1NUQVJBTFBIQTIgMHgwMDJjICAKLSNkZWZpbmUgUENJX0RFVklDRV9JRF9ORUNfQ0JVU18yIDB4MDAyZCAgCi0jZGVmaW5lIFBDSV9ERVZJQ0VfSURfTkVDX1VTQiAweDAwMzUgIAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05FQ19DQlVTXzEgMHgwMDAxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBQQ0lfREVWSUNFX0lEX05FQ19MT0NBTCAweDAwMDIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9ORUNfQVRNIDB4MDAwMworI2RlZmluZSBQQ0lfREVWSUNFX0lEX05FQ19SNDAwMCAweDAwMDQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9ORUNfNDg2IDB4MDAwNQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgUENJX0RFVklDRV9JRF9ORUNfQUNDRUxfMSAweDAwMDYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9ORUNfVVhCVVMgMHgwMDA3CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTkVDX0FDQ0VMXzIgMHgwMDA4CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTkVDX0dSQVBIIDB4MDAwOQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgUENJX0RFVklDRV9JRF9ORUNfVkwgMHgwMDE2CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTkVDX1NUQVJBTFBIQTIgMHgwMDJjCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTkVDX0NCVVNfMiAweDAwMmQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9ORUNfVVNCIDB4MDAzNQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0RFVklDRV9JRF9ORUNfQ0JVU18zIDB4MDAzYgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX05FQ19OQVBDQ0FSRCAweDAwM2UKLSNkZWZpbmUgUENJX0RFVklDRV9JRF9ORUNfUENYMiAweDAwNDYgIAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05FQ19QQ1gyIDB4MDA0NgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX05FQ19OSUxFNCAweDAwNWEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTkVDX1ZSQzU0NzYgMHgwMDliCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTkVDX1ZSQzQxNzMgMHgwMGE1CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTkVDX1ZSQzU0NzdfQUM5NyAweDAwYTYKLSNkZWZpbmUgUENJX0RFVklDRV9JRF9ORUNfUEM5ODIxQ1MwMSAweDgwMGMgIAotI2RlZmluZSBQQ0lfREVWSUNFX0lEX05FQ19QQzk4MjFOUkIwNiAweDgwMGQgIAotCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTkVDX1BDOTgyMUNTMDEgMHg4MDBjCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBQQ0lfREVWSUNFX0lEX05FQ19QQzk4MjFOUkIwNiAweDgwMGQKICNkZWZpbmUgUENJX1ZFTkRPUl9JRF9GRCAweDEwMzYKICNkZWZpbmUgUENJX0RFVklDRV9JRF9GRF8zNkM3MCAweDAwMDAKLQogI2RlZmluZSBQQ0lfVkVORE9SX0lEX1NJIDB4MTAzOQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0RFVklDRV9JRF9TSV81NTkxX0FHUCAweDAwMDEKICNkZWZpbmUgUENJX0RFVklDRV9JRF9TSV82MjAyIDB4MDAwMgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJXzUwMyAweDAwMDgKICNkZWZpbmUgUENJX0RFVklDRV9JRF9TSV9BQ1BJIDB4MDAwOQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0RFVklDRV9JRF9TSV9TTUJVUyAweDAwMTYKICNkZWZpbmUgUENJX0RFVklDRV9JRF9TSV9MUEMgMHgwMDE4CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0lfNTU5N19WR0EgMHgwMjAwCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0lfNjIwNSAweDAyMDUKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0lfNTAxIDB4MDQwNgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJXzQ5NiAweDA0OTYKICNkZWZpbmUgUENJX0RFVklDRV9JRF9TSV8zMDAgMHgwMzAwCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0lfMzE1SCAweDAzMTAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0lfMzE1IDB4MDMxNQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJXzMxNVBSTyAweDAzMjUKICNkZWZpbmUgUENJX0RFVklDRV9JRF9TSV81MzAgMHgwNTMwCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0lfNTQwIDB4MDU0MAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0RFVklDRV9JRF9TSV81NTAgMHgwNTUwCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0lfNTQwX1ZHQSAweDUzMDAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9TSV81NTBfVkdBIDB4NTMxNQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJXzYyMCAweDA2MjAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0lfNjMwIDB4MDYzMAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJXzYzMyAweDA2MzMKICNkZWZpbmUgUENJX0RFVklDRV9JRF9TSV82MzUgMHgwNjM1CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0lfNjQwIDB4MDY0MAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0RFVklDRV9JRF9TSV82NDUgMHgwNjQ1CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0lfNjQ2IDB4MDY0NgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJXzY0OCAweDA2NDgKICNkZWZpbmUgUENJX0RFVklDRV9JRF9TSV82NTAgMHgwNjUwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJXzY1MSAweDA2NTEKICNkZWZpbmUgUENJX0RFVklDRV9JRF9TSV82NTUgMHgwNjU1CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0lfNjYxIDB4MDY2MQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJXzczMCAweDA3MzAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0lfNzMzIDB4MDczMwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJXzYzMF9WR0EgMHg2MzAwCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0lfNzM1IDB4MDczNQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJXzc0MCAweDA3NDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0lfNzQxIDB4MDc0MQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJXzc0NSAweDA3NDUKICNkZWZpbmUgUENJX0RFVklDRV9JRF9TSV83NDYgMHgwNzQ2CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0lfNzU1IDB4MDc1NQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0RFVklDRV9JRF9TSV83NjAgMHgwNzYwCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0lfOTAwIDB4MDkwMAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJXzk2MSAweDA5NjEKICNkZWZpbmUgUENJX0RFVklDRV9JRF9TSV85NjIgMHgwOTYyCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJXzk2MyAweDA5NjMKICNkZWZpbmUgUENJX0RFVklDRV9JRF9TSV85NjUgMHgwOTY1CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0lfOTY2IDB4MDk2NgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJXzk2OCAweDA5NjgKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0lfNTUxMSAweDU1MTEKICNkZWZpbmUgUENJX0RFVklDRV9JRF9TSV81NTEzIDB4NTUxMwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJXzU1MTcgMHg1NTE3CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0lfNTUxOCAweDU1MTgKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0lfNTU3MSAweDU1NzEKICNkZWZpbmUgUENJX0RFVklDRV9JRF9TSV81NTgxIDB4NTU4MQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJXzU1ODIgMHg1NTgyCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0lfNTU5MSAweDU1OTEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0lfNTU5NiAweDU1OTYKICNkZWZpbmUgUENJX0RFVklDRV9JRF9TSV81NTk3IDB4NTU5NwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJXzU1OTggMHg1NTk4CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0lfNTYwMCAweDU2MDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0lfNzAxMiAweDcwMTIKICNkZWZpbmUgUENJX0RFVklDRV9JRF9TSV83MDEzIDB4NzAxMwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJXzcwMTYgMHg3MDE2CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0lfNzAxOCAweDcwMTgKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX1ZFTkRPUl9JRF9IUCAweDEwM2MKICNkZWZpbmUgUENJX0RFVklDRV9JRF9IUF9WSVNVQUxJWkVfRUcgMHgxMDA1CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSFBfVklTVUFMSVpFX0ZYNiAweDEwMDYKICNkZWZpbmUgUENJX0RFVklDRV9JRF9IUF9WSVNVQUxJWkVfRlg0IDB4MTAwOAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0RFVklDRV9JRF9IUF9WSVNVQUxJWkVfRlgyIDB4MTAwYQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0hQX1RBQ0hZT04gMHgxMDI4CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSFBfVEFDSExJVEUgMHgxMDI5CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSFBfSjI1ODVBIDB4MTAzMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0RFVklDRV9JRF9IUF9KMjU4NUIgMHgxMDMxCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSFBfSjI5NzNBIDB4MTA0MAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0hQX0oyOTcwQSAweDEwNDIKICNkZWZpbmUgUENJX0RFVklDRV9JRF9IUF9ESVZBIDB4MTA0OAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0RFVklDRV9JRF9IUF9ESVZBX1RPU0NBMSAweDEwNDkKICNkZWZpbmUgUENJX0RFVklDRV9JRF9IUF9ESVZBX1RPU0NBMiAweDEwNEEKICNkZWZpbmUgUENJX0RFVklDRV9JRF9IUF9ESVZBX01BRVNUUk8gMHgxMDRCCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSFBfUkVPX0lPQyAweDEwZjEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSFBfVklTVUFMSVpFX0ZYRSAweDEwOGIKICNkZWZpbmUgUENJX0RFVklDRV9JRF9IUF9ESVZBX0hBTEZET01FIDB4MTIyMwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0hQX0RJVkFfS0VZU1RPTkUgMHgxMjI2CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSFBfRElWQV9QT1dFUkJBUiAweDEyMjcKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSFBfWlgxX0lPQyAweDEyMmEKICNkZWZpbmUgUENJX0RFVklDRV9JRF9IUF9QQ0lYX0xCQSAweDEyMmUKICNkZWZpbmUgUENJX0RFVklDRV9JRF9IUF9TWDEwMDBfSU9DIDB4MTI3YwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0hQX0RJVkFfRVZFUkVTVCAweDEyODIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSFBfRElWQV9BVVggMHgxMjkwCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSFBfRElWQV9STVAzIDB4MTMwMQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0hQX0RJVkFfSFVSUklDQU5FIDB4MTMyYQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0hQX0NJU1NBIDB4MzIyMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0RFVklDRV9JRF9IUF9DSVNTQyAweDMyMzAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9IUF9DSVNTRCAweDMyMzgKICNkZWZpbmUgUENJX0RFVklDRV9JRF9IUF9aWDJfSU9DIDB4NDAzMQotCiAjZGVmaW5lIFBDSV9WRU5ET1JfSURfUENURUNIIDB4MTA0MgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0RFVklDRV9JRF9QQ1RFQ0hfUloxMDAwIDB4MTAwMAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1BDVEVDSF9SWjEwMDEgMHgxMDAxCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUENURUNIX1NBTVVSQUlfSURFIDB4MzAyMAotCiAjZGVmaW5lIFBDSV9WRU5ET1JfSURfQVNVU1RFSyAweDEwNDMKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVNVU1RFS18wNjc1IDB4MDY3NQotCiAjZGVmaW5lIFBDSV9WRU5ET1JfSURfRFBUIDB4MTA0NAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0RQVCAweGE0MDAKLQogI2RlZmluZSBQQ0lfVkVORE9SX0lEX09QVEkgMHgxMDQ1CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX09QVElfODJDNTU4IDB4YzU1OAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX09QVElfODJDNjIxIDB4YzYyMQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX09QVElfODJDNzAwIDB4YzcwMAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX09QVElfODJDODI1IDB4ZDU2OAotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfVkVORE9SX0lEX0VMU0EgMHgxMDQ4CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfRUxTQV9NSUNST0xJTksgMHgxMDAwCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfRUxTQV9RUzMwMDAgMHgzMDAwCi0KICNkZWZpbmUgUENJX1ZFTkRPUl9JRF9CVVNMT0dJQyAweDEwNEIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQlVTTE9HSUNfTVVMVElNQVNURVJfTkMgMHgwMTQwCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQlVTTE9HSUNfTVVMVElNQVNURVIgMHgxMDQwCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQlVTTE9HSUNfRkxBU0hQT0lOVCAweDgxMzAKLQogI2RlZmluZSBQQ0lfVkVORE9SX0lEX1RJIDB4MTA0YworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0RFVklDRV9JRF9USV9UVlA0MDIwIDB4M2QwNwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJXzQ0NTAgMHg4MDExCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElfWFgyMV9YWDExIDB4ODAzMQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJX1hYMjFfWFgxMV9TRCAweDgwMzQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElfWDUxNSAweDgwMzYKICNkZWZpbmUgUENJX0RFVklDRV9JRF9USV9YWDEyIDB4ODAzOQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJXzExMzAgMHhhYzEyCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElfMTAzMSAweGFjMTMKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElfMTEzMSAweGFjMTUKICNkZWZpbmUgUENJX0RFVklDRV9JRF9USV8xMjUwIDB4YWMxNgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJXzEyMjAgMHhhYzE3CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElfMTIyMSAweGFjMTkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElfMTIxMCAweGFjMWEKICNkZWZpbmUgUENJX0RFVklDRV9JRF9USV8xNDUwIDB4YWMxYgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJXzEyMjUgMHhhYzFjCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElfMTI1MUEgMHhhYzFkCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJXzEyMTEgMHhhYzFlCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElfMTI1MUIgMHhhYzFmCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElfNDQxMCAweGFjNDEKICNkZWZpbmUgUENJX0RFVklDRV9JRF9USV80NDUxIDB4YWM0MgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0RFVklDRV9JRF9USV80NTEwIDB4YWM0NAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJXzQ1MjAgMHhhYzQ2CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElfNzUxMCAweGFjNDcKICNkZWZpbmUgUENJX0RFVklDRV9JRF9USV83NjEwIDB4YWM0OAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0RFVklDRV9JRF9USV83NDEwIDB4YWM0OQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJXzE0MTAgMHhhYzUwCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElfMTQyMCAweGFjNTEKICNkZWZpbmUgUENJX0RFVklDRV9JRF9USV8xNDUxQSAweGFjNTIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElfMTYyMCAweGFjNTQKICNkZWZpbmUgUENJX0RFVklDRV9JRF9USV8xNTIwIDB4YWM1NQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJXzE1MTAgMHhhYzU2CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElfWDYyMCAweGFjOGQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElfWDQyMCAweGFjOGUKLQogI2RlZmluZSBQQ0lfVkVORE9SX0lEX1NPTlkgMHgxMDRkCi0KICNkZWZpbmUgUENJX1ZFTkRPUl9JRF9XSU5CT05EMiAweDEwNTAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9XSU5CT05EMl84OUM5NDBGIDB4NWE1YQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0RFVklDRV9JRF9XSU5CT05EMl82NjkyIDB4NjY5MgotCiAjZGVmaW5lIFBDSV9WRU5ET1JfSURfQU5JR01BIDB4MTA1MQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FOSUdNQV9NQzE0NTU3NSAweDAxMDAKLQogI2RlZmluZSBQQ0lfVkVORE9SX0lEX0VGQVIgMHgxMDU1CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0VGQVJfU0xDOTBFNjZfMSAweDkxMzAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9FRkFSX1NMQzkwRTY2XzMgMHg5NDYzCi0KICNkZWZpbmUgUENJX1ZFTkRPUl9JRF9NT1RPUk9MQSAweDEwNTcKICNkZWZpbmUgUENJX0RFVklDRV9JRF9NT1RPUk9MQV9NUEMxMDUgMHgwMDAxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX01PVE9ST0xBX01QQzEwNiAweDAwMDIKICNkZWZpbmUgUENJX0RFVklDRV9JRF9NT1RPUk9MQV9NUEMxMDcgMHgwMDA0CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTU9UT1JPTEFfUkFWRU4gMHg0ODAxCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTU9UT1JPTEFfRkFMQ09OIDB4NDgwMgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0RFVklDRV9JRF9NT1RPUk9MQV9IQVdLIDB4NDgwMwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX01PVE9ST0xBX0hBUlJJRVIgMHg0ODBiCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTU9UT1JPTEFfTVBDNTIwMCAweDU4MDMKICNkZWZpbmUgUENJX0RFVklDRV9JRF9NT1RPUk9MQV9NUEM1MjAwQiAweDU4MDkKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX1ZFTkRPUl9JRF9QUk9NSVNFIDB4MTA1YQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1BST01JU0VfMjAyNjUgMHgwZDMwCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUFJPTUlTRV8yMDI2NyAweDRkMzAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9QUk9NSVNFXzIwMjQ2IDB4NGQzMworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0RFVklDRV9JRF9QUk9NSVNFXzIwMjYyIDB4NGQzOAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1BST01JU0VfMjAyNjMgMHgwRDM4CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUFJPTUlTRV8yMDI2OCAweDRkNjgKICNkZWZpbmUgUENJX0RFVklDRV9JRF9QUk9NSVNFXzIwMjY5IDB4NGQ2OQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0RFVklDRV9JRF9QUk9NSVNFXzIwMjcwIDB4NjI2OAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1BST01JU0VfMjAyNzEgMHg2MjY5CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUFJPTUlTRV8yMDI3NSAweDEyNzUKICNkZWZpbmUgUENJX0RFVklDRV9JRF9QUk9NSVNFXzIwMjc2IDB4NTI3NQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0RFVklDRV9JRF9QUk9NSVNFXzIwMjc3IDB4NzI3NQotCiAjZGVmaW5lIFBDSV9WRU5ET1JfSURfVU1DIDB4MTA2MAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1VNQ19VTTg2NzNGIDB4MDEwMQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1VNQ19VTTg4ODZCRiAweDY3M2EKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVU1DX1VNODg4NkEgMHg4ODZhCi0KICNkZWZpbmUgUENJX1ZFTkRPUl9JRF9NWUxFWCAweDEwNjkKICNkZWZpbmUgUENJX0RFVklDRV9JRF9NWUxFWF9EQUM5NjBfUCAweDAwMDEKICNkZWZpbmUgUENJX0RFVklDRV9JRF9NWUxFWF9EQUM5NjBfUEQgMHgwMDAyCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX01ZTEVYX0RBQzk2MF9QRyAweDAwMTAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9NWUxFWF9EQUM5NjBfTEEgMHgwMDIwCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTVlMRVhfREFDOTYwX0xQIDB4MDA1MAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX01ZTEVYX0RBQzk2MF9CQSAweEJBNTYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTVlMRVhfREFDOTYwX0dFTSAweEIxNjYKLQogI2RlZmluZSBQQ0lfVkVORE9SX0lEX0FQUExFIDB4MTA2YgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FQUExFX0JBTkRJVCAweDAwMDEKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BUFBMRV9IWURSQSAweDAwMGUKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVBQTEVfVU5JX05fRlcgMHgwMDE4CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVBQTEVfVU5JX05fQUdQIDB4MDAyMAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FQUExFX1VOSV9OX0dNQUMgMHgwMDIxCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVBQTEVfVU5JX05fR01BQ1AgMHgwMDI0CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FQUExFX1VOSV9OX0FHUF9QIDB4MDAyNwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FQUExFX1VOSV9OX0FHUDE1IDB4MDAyZAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FQUExFX1VOSV9OX1BDSTE1IDB4MDAyZQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FQUExFX1VOSV9OX0dNQUMyIDB4MDAzMgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0RFVklDRV9JRF9BUFBMRV9VTklfTl9BVEEgMHgwMDMzCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVBQTEVfVU5JX05fQUdQMiAweDAwMzQKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BUFBMRV9JUElEX0FUQTEwMCAweDAwM2IKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BUFBMRV9LMl9BVEExMDAgMHgwMDQzCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FQUExFX1UzX0FHUCAweDAwNGIKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BUFBMRV9LMl9HTUFDIDB4MDA0YwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FQUExFX1NIX0FUQSAweDAwNTAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BUFBMRV9TSF9TVU5HRU0gMHgwMDUxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FQUExFX1UzTF9BR1AgMHgwMDU4CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVBQTEVfVTNIX0FHUCAweDAwNTkKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BUFBMRV9JUElEMl9BR1AgMHgwMDY2CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVBQTEVfSVBJRDJfQVRBIDB4MDA2OQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0RFVklDRV9JRF9BUFBMRV9JUElEMl9GVyAweDAwNmEKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BUFBMRV9JUElEMl9HTUFDIDB4MDA2YgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FQUExFX1RJR09OMyAweDE2NDUKLQogI2RlZmluZSBQQ0lfVkVORE9SX0lEX1lBTUFIQSAweDEwNzMKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfWUFNQUhBXzcyNCAweDAwMDQKICNkZWZpbmUgUENJX0RFVklDRV9JRF9ZQU1BSEFfNzI0RiAweDAwMGQKICNkZWZpbmUgUENJX0RFVklDRV9JRF9ZQU1BSEFfNzQwIDB4MDAwYQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1lBTUFIQV83NDBDIDB4MDAwYworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0RFVklDRV9JRF9ZQU1BSEFfNzQ0IDB4MDAxMAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1lBTUFIQV83NTQgMHgwMDEyCi0KICNkZWZpbmUgUENJX1ZFTkRPUl9JRF9RTE9HSUMgMHgxMDc3CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUUxPR0lDX0lTUDEwMTYwIDB4MTAxNgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0RFVklDRV9JRF9RTE9HSUNfSVNQMTAyMCAweDEwMjAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9RTE9HSUNfSVNQMTA4MCAweDEwODAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9RTE9HSUNfSVNQMTIxNjAgMHgxMjE2CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUUxPR0lDX0lTUDEyNDAgMHgxMjQwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1FMT0dJQ19JU1AxMjgwIDB4MTI4MAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1FMT0dJQ19JU1AyMTAwIDB4MjEwMAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1FMT0dJQ19JU1AyMjAwIDB4MjIwMAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1FMT0dJQ19JU1AyMzAwIDB4MjMwMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0RFVklDRV9JRF9RTE9HSUNfSVNQMjMxMiAweDIzMTIKICNkZWZpbmUgUENJX0RFVklDRV9JRF9RTE9HSUNfSVNQMjMyMiAweDIzMjIKICNkZWZpbmUgUENJX0RFVklDRV9JRF9RTE9HSUNfSVNQNjMxMiAweDYzMTIKICNkZWZpbmUgUENJX0RFVklDRV9JRF9RTE9HSUNfSVNQNjMyMiAweDYzMjIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUUxPR0lDX0lTUDI0MjIgMHgyNDIyCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUUxPR0lDX0lTUDI0MzIgMHgyNDMyCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUUxPR0lDX0lTUDI1MTIgMHgyNTEyCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUUxPR0lDX0lTUDI1MjIgMHgyNTIyCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1FMT0dJQ19JU1A1NDIyIDB4NTQyMgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1FMT0dJQ19JU1A1NDMyIDB4NTQzMgotCiAjZGVmaW5lIFBDSV9WRU5ET1JfSURfQ1lSSVggMHgxMDc4CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQ1lSSVhfNTUxMCAweDAwMDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQ1lSSVhfUENJX01BU1RFUiAweDAwMDEKICNkZWZpbmUgUENJX0RFVklDRV9JRF9DWVJJWF81NTIwIDB4MDAwMgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0NZUklYXzU1MzBfTEVHQUNZIDB4MDEwMAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0NZUklYXzU1MzBfSURFIDB4MDEwMgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0RFVklDRV9JRF9DWVJJWF81NTMwX0FVRElPIDB4MDEwMwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0NZUklYXzU1MzBfVklERU8gMHgwMTA0Ci0KICNkZWZpbmUgUENJX1ZFTkRPUl9JRF9DT05UQVEgMHgxMDgwCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQ09OVEFRXzgyQzY5MyAweGM2OTMKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX1ZFTkRPUl9JRF9PTElDT00gMHgxMDhkCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfT0xJQ09NX09DMjMyNSAweDAwMTIKICNkZWZpbmUgUENJX0RFVklDRV9JRF9PTElDT01fT0MyMTgzIDB4MDAxMwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX09MSUNPTV9PQzIzMjYgMHgwMDE0Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9WRU5ET1JfSURfU1VOIDB4MTA4ZQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NVTl9FQlVTIDB4MTAwMAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NVTl9IQVBQWU1FQUwgMHgxMDAxCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU1VOX1JJT19FQlVTIDB4MTEwMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0RFVklDRV9JRF9TVU5fUklPX0dFTSAweDExMDEKICNkZWZpbmUgUENJX0RFVklDRV9JRF9TVU5fUklPXzEzOTQgMHgxMTAyCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU1VOX1JJT19VU0IgMHgxMTAzCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU1VOX0dFTSAweDJiYWQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU1VOX1NJTUJBIDB4NTAwMAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NVTl9QQk0gMHg4MDAwCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU1VOX1NDSElaTyAweDgwMDEKICNkZWZpbmUgUENJX0RFVklDRV9JRF9TVU5fU0FCUkUgMHhhMDAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NVTl9IVU1NSU5HQklSRCAweGEwMDEKICNkZWZpbmUgUENJX0RFVklDRV9JRF9TVU5fVE9NQVRJTExPIDB4YTgwMQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NVTl9DQVNTSU5JIDB4YWJiYQotCiAjZGVmaW5lIFBDSV9WRU5ET1JfSURfQ01EIDB4MTA5NQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0RFVklDRV9JRF9DTURfNjQzIDB4MDY0MwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0NNRF82NDYgMHgwNjQ2CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQ01EXzY0OCAweDA2NDgKICNkZWZpbmUgUENJX0RFVklDRV9JRF9DTURfNjQ5IDB4MDY0OQotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJSV82ODAgMHgwNjgwCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0lJXzMxMTIgMHgzMTEyCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0lJXzEyMTBTQSAweDAyNDAKLQogI2RlZmluZSBQQ0lfVkVORE9SX0lEX0JST09LVFJFRSAweDEwOWUKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQlJPT0tUUkVFXzg3OCAweDA4NzgKICNkZWZpbmUgUENJX0RFVklDRV9JRF9CUk9PS1RSRUVfODc5IDB4MDg3OQotCiAjZGVmaW5lIFBDSV9WRU5ET1JfSURfU0dJIDB4MTBhOQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NHSV9JT0MzIDB4MDAwMworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0RFVklDRV9JRF9TR0lfSU9DNCAweDEwMGEKICNkZWZpbmUgUENJX1ZFTkRPUl9JRF9TR0lfTElUSElVTSAweDEwMDIKLQogI2RlZmluZSBQQ0lfVkVORE9SX0lEX1dJTkJPTkQgMHgxMGFkCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfV0lOQk9ORF84MkMxMDUgMHgwMTA1CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1dJTkJPTkRfODNDNTUzIDB4MDU2NQotCiAjZGVmaW5lIFBDSV9WRU5ET1JfSURfUExYIDB4MTBiNQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1BMWF9SNjg1IDB4MTAzMAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1BMWF9ST01VTFVTIDB4MTA2YQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0RFVklDRV9JRF9QTFhfU1BDT004MDAgMHgxMDc2CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUExYXzEwNzcgMHgxMDc3CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUExYX1NQQ09NMjAwIDB4MTEwMwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1BMWF9ESklOTl9JVE9PIDB4MTE1MQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0RFVklDRV9JRF9QTFhfUjc1MyAweDExNTIKICNkZWZpbmUgUENJX0RFVklDRV9JRF9QTFhfT0xJVEVDIDB4MTE4NwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1BMWF9QQ0kyMDBTWU4gMHgzMTk2CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUExYXzkwNTAgMHg5MDUwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1BMWF85MDgwIDB4OTA4MAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1BMWF9HVEVLX1NFUklBTDIgMHhhMDAxCi0KICNkZWZpbmUgUENJX1ZFTkRPUl9JRF9NQURHRSAweDEwYjYKICNkZWZpbmUgUENJX0RFVklDRV9JRF9NQURHRV9NSzIgMHgwMDAyCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9WRU5ET1JfSURfM0NPTSAweDEwYjcKICNkZWZpbmUgUENJX0RFVklDRV9JRF8zQ09NXzNDOTg1IDB4MDAwMQogI2RlZmluZSBQQ0lfREVWSUNFX0lEXzNDT01fM0M5NDAgMHgxNzAwCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfM0NPTV8zQzMzOSAweDMzOTAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfM0NPTV8zQzM1OSAweDM1OTAKICNkZWZpbmUgUENJX0RFVklDRV9JRF8zQ09NXzNDOTQwQiAweDgwZWIKICNkZWZpbmUgUENJX0RFVklDRV9JRF8zQ09NXzNDUjk5MCAweDk5MDAKICNkZWZpbmUgUENJX0RFVklDRV9JRF8zQ09NXzNDUjk5MF9UWF85NSAweDk5MDIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfM0NPTV8zQ1I5OTBfVFhfOTcgMHg5OTAzCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfM0NPTV8zQ1I5OTBCIDB4OTkwNAogI2RlZmluZSBQQ0lfREVWSUNFX0lEXzNDT01fM0NSOTkwX0ZYIDB4OTkwNQogI2RlZmluZSBQQ0lfREVWSUNFX0lEXzNDT01fM0NSOTkwU1ZSOTUgMHg5OTA4CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfREVWSUNFX0lEXzNDT01fM0NSOTkwU1ZSOTcgMHg5OTA5CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfM0NPTV8zQ1I5OTBTVlIgMHg5OTBhCi0KICNkZWZpbmUgUENJX1ZFTkRPUl9JRF9BTCAweDEwYjkKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BTF9NMTUzMyAweDE1MzMKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQUxfTTE1MzUgMHgxNTM1CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQUxfTTE1NDEgMHgxNTQxCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQUxfTTE1NjMgMHgxNTYzCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQUxfTTE2MjEgMHgxNjIxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FMX00xNjMxIDB4MTYzMQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FMX00xNjMyIDB4MTYzMgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FMX00xNjQxIDB4MTY0MQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FMX00xNjQ0IDB4MTY0NAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0RFVklDRV9JRF9BTF9NMTY0NyAweDE2NDcKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BTF9NMTY1MSAweDE2NTEKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BTF9NMTY3MSAweDE2NzEKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BTF9NMTY4MSAweDE2ODEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQUxfTTE2ODMgMHgxNjgzCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQUxfTTE2ODkgMHgxNjg5CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQUxfTTUyMTkgMHg1MjE5CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQUxfTTUyMjggMHg1MjI4CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FMX001MjI5IDB4NTIyOQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FMX001NDUxIDB4NTQ1MQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FMX003MTAxIDB4NzEwMQotCiAjZGVmaW5lIFBDSV9WRU5ET1JfSURfTkVPTUFHSUMgMHgxMGM4CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX05FT01BR0lDX05NMjU2QVZfQVVESU8gMHg4MDA1CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTkVPTUFHSUNfTk0yNTZaWF9BVURJTyAweDgwMDYKICNkZWZpbmUgUENJX0RFVklDRV9JRF9ORU9NQUdJQ19OTTI1NlhMX1BMVVNfQVVESU8gMHg4MDE2Ci0KICNkZWZpbmUgUENJX1ZFTkRPUl9JRF9UQ09OUkFEIDB4MTBkYQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0RFVklDRV9JRF9UQ09OUkFEX1RPS0VOUklORyAweDA1MDgKLQogI2RlZmluZSBQQ0lfVkVORE9SX0lEX05WSURJQSAweDEwZGUKICNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfVE5UIDB4MDAyMAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9UTlQyIDB4MDAyOAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfVVROVDIgMHgwMDI5CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX1ROVF9VTktOT1dOIDB4MDAyYQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9WVE5UMiAweDAwMkMKICNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfVVZUTlQyIDB4MDAyRAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfTkZPUkNFX01DUDA0X1NNQlVTIDB4MDAzNAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9ORk9SQ0VfTUNQMDRfSURFIDB4MDAzNQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9ORk9SQ0VfTUNQMDRfU0FUQSAweDAwMzYKICNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzEwIDB4MDAzNworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzExIDB4MDAzOAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9ORk9SQ0VfTUNQMDRfU0FUQTIgMHgwMDNlCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX0dFRk9SQ0VfNjgwMF9VTFRSQSAweDAwNDAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfR0VGT1JDRV82ODAwIDB4MDA0MQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfR0VGT1JDRV82ODAwX0xFIDB4MDA0MgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9HRUZPUkNFXzY4MDBfR1QgMHgwMDQ1CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX1FVQURST19GWF80MDAwIDB4MDA0RQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9ORk9SQ0U0X1NNQlVTIDB4MDA1MgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfTkZPUkNFX0NLODA0X0lERSAweDAwNTMKICNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfTkZPUkNFX0NLODA0X1NBVEEgMHgwMDU0CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX05GT1JDRV9DSzgwNF9TQVRBMiAweDAwNTUKICNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzggMHgwMDU2CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfOSAweDAwNTcKICNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfQ0s4MDRfQVVESU8gMHgwMDU5CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX0NLODA0X1BDSUUgMHgwMDVkCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX05GT1JDRTJfU01CVVMgMHgwMDY0CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9ORk9SQ0UyX0lERSAweDAwNjUKICNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzIgMHgwMDY2CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX01DUDJfTU9ERU0gMHgwMDY5CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX01DUDJfQVVESU8gMHgwMDZhCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9ORk9SQ0UyU19TTUJVUyAweDAwODQKICNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfTkZPUkNFMlNfSURFIDB4MDA4NQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfNCAweDAwODYKICNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfTUNQMlNfTU9ERU0gMHgwMDg5CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9DSzhfQVVESU8gMHgwMDhhCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX05WRU5FVF81IDB4MDA4YwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9ORk9SQ0UyU19TQVRBIDB4MDA4ZQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9HRUZPUkNFXzc4MDBfR1QgMHgwMDkwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9HRUZPUkNFXzc4MDBfR1RYIDB4MDA5MQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9HRUZPUkNFX0dPXzc4MDAgMHgwMDk4CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX0dFRk9SQ0VfR09fNzgwMF9HVFggMHgwMDk5CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX0lUTlQyIDB4MDBBMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0RFVklDRV9JRF9HRUZPUkNFXzY4MDBBIDB4MDBjMQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0dFRk9SQ0VfNjgwMEFfTEUgMHgwMGMyCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfR0VGT1JDRV9HT182ODAwIDB4MDBjOAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0dFRk9SQ0VfR09fNjgwMF9VTFRSQSAweDAwYzkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUVVBRFJPX0ZYX0dPMTQwMCAweDAwY2MKICNkZWZpbmUgUENJX0RFVklDRV9JRF9RVUFEUk9fRlhfMTQwMCAweDAwY2UKICNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfTkZPUkNFMyAweDAwZDEKICNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfTkZPUkNFM19TTUJVUyAweDAwZDQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX05GT1JDRTNfSURFIDB4MDBkNQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfMyAweDAwZDYKICNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfTUNQM19NT0RFTSAweDAwZDkKICNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfTUNQM19BVURJTyAweDAwZGEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX05WRU5FVF83IDB4MDBkZgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9ORk9SQ0UzUyAweDAwZTEKICNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfTkZPUkNFM1NfU0FUQSAweDAwZTMKICNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfTkZPUkNFM1NfU01CVVMgMHgwMGU0CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9ORk9SQ0UzU19JREUgMHgwMGU1CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX05WRU5FVF82IDB4MDBlNgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9DSzhTX0FVRElPIDB4MDBlYQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9ORk9SQ0UzU19TQVRBMiAweDAwZWUKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSUVfREVWSUNFX0lEX05WSURJQV9HRUZPUkNFXzY4MDBfQUxUMSAweDAwZjAKICNkZWZpbmUgUENJRV9ERVZJQ0VfSURfTlZJRElBX0dFRk9SQ0VfNjYwMF9BTFQxIDB4MDBmMQogI2RlZmluZSBQQ0lFX0RFVklDRV9JRF9OVklESUFfR0VGT1JDRV82NjAwX0FMVDIgMHgwMGYyCiAjZGVmaW5lIFBDSUVfREVWSUNFX0lEX05WSURJQV9HRUZPUkNFXzYyMDBfQUxUMSAweDAwZjMKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSUVfREVWSUNFX0lEX05WSURJQV9HRUZPUkNFXzY4MDBfR1QgMHgwMGY5CiAjZGVmaW5lIFBDSUVfREVWSUNFX0lEX05WSURJQV9RVUFEUk9fTlZTMjgwIDB4MDBmZAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9HRUZPUkNFX1NEUiAweDAxMDAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfR0VGT1JDRV9ERFIgMHgwMTAxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9RVUFEUk8gMHgwMTAzCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX0dFRk9SQ0UyX01YIDB4MDExMAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9HRUZPUkNFMl9NWDIgMHgwMTExCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX0dFRk9SQ0UyX0dPIDB4MDExMgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfUVVBRFJPMl9NWFIgMHgwMTEzCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX0dFRk9SQ0VfNjYwMF9HVCAweDAxNDAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfR0VGT1JDRV82NjAwIDB4MDE0MQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9HRUZPUkNFXzY2MTBfWEwgMHgwMTQ1CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9RVUFEUk9fRlhfNTQwIDB4MDE0RQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9HRUZPUkNFXzYyMDAgMHgwMTRGCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX0dFRk9SQ0UyX0dUUyAweDAxNTAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfR0VGT1JDRTJfR1RTMiAweDAxNTEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX0dFRk9SQ0UyX1VMVFJBIDB4MDE1MgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9RVUFEUk8yX1BSTyAweDAxNTMKICNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfR0VGT1JDRV82MjAwX1RVUkJPQ0FDSEUgMHgwMTYxCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX0dFRk9SQ0VfR09fNjIwMCAweDAxNjQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX0dFRk9SQ0VfR09fNjI1MCAweDAxNjYKICNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfR0VGT1JDRV9HT182MjAwXzEgMHgwMTY3CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX0dFRk9SQ0VfR09fNjI1MF8xIDB4MDE2OAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9HRUZPUkNFNF9NWF80NjAgMHgwMTcwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9HRUZPUkNFNF9NWF80NDAgMHgwMTcxCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX0dFRk9SQ0U0X01YXzQyMCAweDAxNzIKICNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfR0VGT1JDRTRfTVhfNDQwX1NFIDB4MDE3MwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9HRUZPUkNFNF80NDBfR08gMHgwMTc0CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9HRUZPUkNFNF80MjBfR08gMHgwMTc1CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX0dFRk9SQ0U0XzQyMF9HT19NMzIgMHgwMTc2CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX0dFRk9SQ0U0XzQ2MF9HTyAweDAxNzcKICNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfUVVBRFJPNF81MDBYR0wgMHgwMTc4CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9HRUZPUkNFNF80NDBfR09fTTY0IDB4MDE3OQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9RVUFEUk80XzIwMCAweDAxN0EKICNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfUVVBRFJPNF81NTBYR0wgMHgwMTdCCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX1FVQURSTzRfNTAwX0dPR0wgMHgwMTdDCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9HRUZPUkNFNF80MTBfR09fTTE2IDB4MDE3RAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9HRUZPUkNFNF9NWF80NDBfOFggMHgwMTgxCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX0dFRk9SQ0U0X01YXzQ0MFNFXzhYIDB4MDE4MgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9HRUZPUkNFNF9NWF80MjBfOFggMHgwMTgzCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9HRUZPUkNFNF9NWF80MDAwIDB4MDE4NQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9HRUZPUkNFNF80NDhfR08gMHgwMTg2CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX0dFRk9SQ0U0XzQ4OF9HTyAweDAxODcKICNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfUVVBRFJPNF81ODBfWEdMIDB4MDE4OAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfR0VGT1JDRTRfTVhfTUFDIDB4MDE4OQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9RVUFEUk80XzI4MF9OVlMgMHgwMThBCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX1FVQURSTzRfMzgwX1hHTCAweDAxOEIKICNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfSUdFRk9SQ0UyIDB4MDFhMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfTkZPUkNFIDB4MDFhNAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9NQ1AxX0FVRElPIDB4MDFiMQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9ORk9SQ0VfU01CVVMgMHgwMWI0CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX05GT1JDRV9JREUgMHgwMWJjCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9NQ1AxX01PREVNIDB4MDFjMQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfMSAweDAxYzMKICNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfTkZPUkNFMiAweDAxZTAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfR0VGT1JDRTMgMHgwMjAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9HRUZPUkNFM18xIDB4MDIwMQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9HRUZPUkNFM18yIDB4MDIwMgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9RVUFEUk9fRERDIDB4MDIwMwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9HRUZPUkNFXzY4MDBCIDB4MDIxMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfR0VGT1JDRV82ODAwQl9MRSAweDAyMTIKICNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfR0VGT1JDRV82ODAwQl9HVCAweDAyMTUKICNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfR0VGT1JDRTRfVElfNDYwMCAweDAyNTAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfR0VGT1JDRTRfVElfNDQwMCAweDAyNTEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX0dFRk9SQ0U0X1RJXzQyMDAgMHgwMjUzCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX1FVQURSTzRfOTAwWEdMIDB4MDI1OAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9RVUFEUk80Xzc1MFhHTCAweDAyNTkKICNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfUVVBRFJPNF83MDBYR0wgMHgwMjVCCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9ORk9SQ0VfTUNQNTFfU01CVVMgMHgwMjY0CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX05GT1JDRV9NQ1A1MV9JREUgMHgwMjY1CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX05GT1JDRV9NQ1A1MV9TQVRBIDB4MDI2NgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9ORk9SQ0VfTUNQNTFfU0FUQTIgMHgwMjY3CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9ORk9SQ0VfTUNQNTVfU01CVVMgMHgwMzY4CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX05GT1JDRV9NQ1A1NV9JREUgMHgwMzZFCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX05GT1JDRV9NQ1A1NV9TQVRBIDB4MDM3RQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9ORk9SQ0VfTUNQNTVfU0FUQTIgMHgwMzdGCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfMTIgMHgwMjY4CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX05WRU5FVF8xMyAweDAyNjkKICNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfR0VGT1JDRTRfVElfNDgwMCAweDAyODAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfR0VGT1JDRTRfVElfNDgwMF84WCAweDAyODEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX0dFRk9SQ0U0X1RJXzQ4MDBTRSAweDAyODIKICNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfR0VGT1JDRTRfNDIwMF9HTyAweDAyODYKICNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfUVVBRFJPNF85ODBfWEdMIDB4MDI4OAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9RVUFEUk80Xzc4MF9YR0wgMHgwMjg5CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9RVUFEUk80XzcwMF9HT0dMIDB4MDI4QwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9HRUZPUkNFX0ZYXzU4MDBfVUxUUkEgMHgwMzAxCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX0dFRk9SQ0VfRlhfNTgwMCAweDAzMDIKICNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfUVVBRFJPX0ZYXzIwMDAgMHgwMzA4CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9RVUFEUk9fRlhfMTAwMCAweDAzMDkKICNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfR0VGT1JDRV9GWF81NjAwX1VMVFJBIDB4MDMxMQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9HRUZPUkNFX0ZYXzU2MDAgMHgwMzEyCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX0dFRk9SQ0VfRlhfNTYwMFNFIDB4MDMxNAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfR0VGT1JDRV9GWF9HTzU2MDAgMHgwMzFBCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX0dFRk9SQ0VfRlhfR081NjUwIDB4MDMxQgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9RVUFEUk9fRlhfR083MDAgMHgwMzFDCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX0dFRk9SQ0VfRlhfNTIwMCAweDAzMjAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX0dFRk9SQ0VfRlhfNTIwMF9VTFRSQSAweDAzMjEKICNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfR0VGT1JDRV9GWF81MjAwXzEgMHgwMzIyCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX0dFRk9SQ0VfRlhfNTIwMFNFIDB4MDMyMwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9HRUZPUkNFX0ZYX0dPNTIwMCAweDAzMjQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX0dFRk9SQ0VfRlhfR081MjUwIDB4MDMyNQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9HRUZPUkNFX0ZYXzU1MDAgMHgwMzI2CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX0dFRk9SQ0VfRlhfNTEwMCAweDAzMjcKICNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfR0VGT1JDRV9GWF9HTzUyNTBfMzIgMHgwMzI4CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9HRUZPUkNFX0ZYX0dPXzUyMDAgMHgwMzI5CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX1FVQURST19OVlNfMjgwX1BDSSAweDAzMkEKICNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfUVVBRFJPX0ZYXzUwMCAweDAzMkIKICNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfR0VGT1JDRV9GWF9HTzUzMDAgMHgwMzJDCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9HRUZPUkNFX0ZYX0dPNTEwMCAweDAzMkQKICNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfR0VGT1JDRV9GWF81OTAwX1VMVFJBIDB4MDMzMAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9HRUZPUkNFX0ZYXzU5MDAgMHgwMzMxCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX0dFRk9SQ0VfRlhfNTkwMFhUIDB4MDMzMgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfR0VGT1JDRV9GWF81OTUwX1VMVFJBIDB4MDMzMwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9HRUZPUkNFX0ZYXzU5MDBaVCAweDAzMzQKICNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfUVVBRFJPX0ZYXzMwMDAgMHgwMzM4CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX1FVQURST19GWF83MDAgMHgwMzNGCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9HRUZPUkNFX0ZYXzU3MDBfVUxUUkEgMHgwMzQxCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX0dFRk9SQ0VfRlhfNTcwMCAweDAzNDIKICNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfR0VGT1JDRV9GWF81NzAwTEUgMHgwMzQzCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX0dFRk9SQ0VfRlhfNTcwMFZFIDB4MDM0NAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfR0VGT1JDRV9GWF9HTzU3MDBfMSAweDAzNDcKICNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfR0VGT1JDRV9GWF9HTzU3MDBfMiAweDAzNDgKICNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfUVVBRFJPX0ZYX0dPMTAwMCAweDAzNEMKICNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfUVVBRFJPX0ZYXzExMDAgMHgwMzRFCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfMTQgMHgwMzcyCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX05WRU5FVF8xNSAweDAzNzMKICNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzE2IDB4MDNFNQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfMTcgMHgwM0U2CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9ORk9SQ0VfTUNQNjFfU0FUQSAweDAzRTcKICNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfTkZPUkNFX01DUDYxX0lERSAweDAzRUMKICNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzE4IDB4MDNFRQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfMTkgMHgwM0VGCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9ORk9SQ0VfTUNQNjFfU0FUQTIgMHgwM0Y2CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX05GT1JDRV9NQ1A2MV9TQVRBMyAweDAzRjcKICNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfTkZPUkNFX01DUDY1X0lERSAweDA0NDgKICNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzIwIDB4MDQ1MAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzIxIDB4MDQ1MQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfMjIgMHgwNDUyCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX05WRU5FVF8yMyAweDA0NTMKLQogI2RlZmluZSBQQ0lfVkVORE9SX0lEX0lNUyAweDEwZTAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU1TX1RUMTI4IDB4OTEyOAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lNU19UVDNEIDB4OTEzNQotCiAjZGVmaW5lIFBDSV9WRU5ET1JfSURfSU5URVJHIDB4MTBlYQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVSR18xNjgyIDB4MTY4MgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFUkdfMjAwMCAweDIwMDAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFUkdfMjAxMCAweDIwMTAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFUkdfNTAwMCAweDUwMDAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFUkdfNTA1MCAweDUwNTAKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX1ZFTkRPUl9JRF9SRUFMVEVLIDB4MTBlYwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1JFQUxURUtfODEzOSAweDgxMzkKLQogI2RlZmluZSBQQ0lfVkVORE9SX0lEX1hJTElOWCAweDEwZWUKICNkZWZpbmUgUENJX0RFVklDRV9JRF9STUVfRElHSTk2IDB4M2ZjMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0RFVklDRV9JRF9STUVfRElHSTk2XzggMHgzZmMxCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUk1FX0RJR0k5Nl84X1BSTyAweDNmYzIKICNkZWZpbmUgUENJX0RFVklDRV9JRF9STUVfRElHSTk2XzhfUEFEX09SX1BTVCAweDNmYzMKICNkZWZpbmUgUENJX0RFVklDRV9JRF9YSUxJTlhfSEFNTUVSRkFMTF9EU1AgMHgzZmM1CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1hJTElOWF9IQU1NRVJGQUxMX0RTUF9NQURJIDB4M2ZjNgotCiAjZGVmaW5lIFBDSV9WRU5ET1JfSURfSU5JVCAweDExMDEKLQotI2RlZmluZSBQQ0lfVkVORE9SX0lEX0NSRUFUSVZFIDB4MTEwMiAgCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfQ1JFQVRJVkUgMHgxMTAyCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQ1JFQVRJVkVfRU1VMTBLMSAweDAwMDIKLQotI2RlZmluZSBQQ0lfVkVORE9SX0lEX0VDVElWQSAweDExMDIgIAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9FQ1RJVkEgMHgxMTAyCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfRUNUSVZBX0VWMTkzOCAweDg5MzgKLQogI2RlZmluZSBQQ0lfVkVORE9SX0lEX1RUSSAweDExMDMKICNkZWZpbmUgUENJX0RFVklDRV9JRF9UVElfSFBUMzQzIDB4MDAwMworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0RFVklDRV9JRF9UVElfSFBUMzY2IDB4MDAwNAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RUSV9IUFQzNzIgMHgwMDA1CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVFRJX0hQVDMwMiAweDAwMDYKICNkZWZpbmUgUENJX0RFVklDRV9JRF9UVElfSFBUMzcxIDB4MDAwNworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0RFVklDRV9JRF9UVElfSFBUMzc0IDB4MDAwOAotI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RUSV9IUFQzNzJOIDB4MDAwOSAgCi0KKyNkZWZpbmUgUENJX0RFVklDRV9JRF9UVElfSFBUMzcyTiAweDAwMDkKICNkZWZpbmUgUENJX1ZFTkRPUl9JRF9WSUEgMHgxMTA2CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVklBXzg3NjNfMCAweDAxOTgKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVklBXzgzODBfMCAweDAyMDQKICNkZWZpbmUgUENJX0RFVklDRV9JRF9WSUFfMzIzOF8wIDB4MDIzOAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZJQV9QVDg4MCAweDAyNTgKICNkZWZpbmUgUENJX0RFVklDRV9JRF9WSUFfUFQ4ODBVTFRSQSAweDAzMDgKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVklBX1BYOFgwXzAgMHgwMjU5CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVklBXzMyNjlfMCAweDAyNjkKICNkZWZpbmUgUENJX0RFVklDRV9JRF9WSUFfSzhUODAwUFJPXzAgMHgwMjgyCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVklBXzMyOTZfMCAweDAyOTYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVklBXzgzNjNfMCAweDAzMDUKICNkZWZpbmUgUENJX0RFVklDRV9JRF9WSUFfUDRNODAwQ0UgMHgwMzE0CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVklBXzgzNzFfMCAweDAzOTEKICNkZWZpbmUgUENJX0RFVklDRV9JRF9WSUFfODUwMV8wIDB4MDUwMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0RFVklDRV9JRF9WSUFfODJDNTYxIDB4MDU2MQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZJQV84MkM1ODZfMSAweDA1NzEKICNkZWZpbmUgUENJX0RFVklDRV9JRF9WSUFfODJDNTc2IDB4MDU3NgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZJQV9TQVRBX0VJREUgMHgwNTgxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZJQV84MkM1ODZfMCAweDA1ODYKICNkZWZpbmUgUENJX0RFVklDRV9JRF9WSUFfODJDNTk2IDB4MDU5NgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZJQV84MkM1OTdfMCAweDA1OTcKICNkZWZpbmUgUENJX0RFVklDRV9JRF9WSUFfODJDNTk4XzAgMHgwNTk4CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZJQV84NjAxXzAgMHgwNjAxCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVklBXzg2MDVfMCAweDA2MDUKICNkZWZpbmUgUENJX0RFVklDRV9JRF9WSUFfODJDNjg2IDB4MDY4NgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZJQV84MkM2OTFfMCAweDA2OTEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVklBXzgyQzU3Nl8xIDB4MTU3MQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZJQV84MkM1ODZfMiAweDMwMzgKICNkZWZpbmUgUENJX0RFVklDRV9JRF9WSUFfODJDNTg2XzMgMHgzMDQwCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVklBXzgyQzU5Nl8zIDB4MzA1MAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0RFVklDRV9JRF9WSUFfODJDNTk2Ql8zIDB4MzA1MQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZJQV84MkM2ODZfNCAweDMwNTcKICNkZWZpbmUgUENJX0RFVklDRV9JRF9WSUFfODJDNjg2XzUgMHgzMDU4CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVklBXzgyMzNfNSAweDMwNTkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVklBXzgyMzNfMCAweDMwNzQKICNkZWZpbmUgUENJX0RFVklDRV9JRF9WSUFfODYzM18wIDB4MzA5MQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZJQV84MzY3XzAgMHgzMDk5CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVklBXzg2NTNfMCAweDMxMDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVklBXzg2MjIgMHgzMTAyCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVklBXzgyMzVfVVNCXzIgMHgzMTA0CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVklBXzgyMzNDXzAgMHgzMTA5CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVklBXzgzNjEgMHgzMTEyCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZJQV9YTTI2NiAweDMxMTYKICNkZWZpbmUgUENJX0RFVklDRV9JRF9WSUFfNjEyWCAweDMxMTkKICNkZWZpbmUgUENJX0RFVklDRV9JRF9WSUFfODYyWF8wIDB4MzEyMwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZJQV84NzUzXzAgMHgzMTI4CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZJQV84MjMzQSAweDMxNDcKICNkZWZpbmUgUENJX0RFVklDRV9JRF9WSUFfODcwM181MV8wIDB4MzE0OAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZJQV84MjM3X1NBVEEgMHgzMTQ5CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVklBX1hOMjY2IDB4MzE1NgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0RFVklDRV9JRF9WSUFfNjQxMCAweDMxNjQKICNkZWZpbmUgUENJX0RFVklDRV9JRF9WSUFfODc1NENfMCAweDMxNjgKICNkZWZpbmUgUENJX0RFVklDRV9JRF9WSUFfODIzNSAweDMxNzcKICNkZWZpbmUgUENJX0RFVklDRV9JRF9WSUFfODM4NV8wIDB4MzE4OAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0RFVklDRV9JRF9WSUFfODM3N18wIDB4MzE4OQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZJQV84Mzc4XzAgMHgzMjA1CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVklBXzg3ODNfMCAweDMyMDgKICNkZWZpbmUgUENJX0RFVklDRV9JRF9WSUFfODIzNyAweDMyMjcKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVklBXzgyNTEgMHgzMjg3CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVklBXzgyMzdBIDB4MzMzNwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZJQV84MjMxIDB4ODIzMQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZJQV84MjMxXzQgMHg4MjM1CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZJQV84MzY1XzEgMHg4MzA1CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVklBX0NYNzAwIDB4ODMyNAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZJQV84MzcxXzEgMHg4MzkxCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVklBXzgyQzU5OF8xIDB4ODU5OAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0RFVklDRV9JRF9WSUFfODM4WF8xIDB4QjE4OAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZJQV84M184N1hYXzEgMHhCMTk4Ci0KICNkZWZpbmUgUENJX1ZFTkRPUl9JRF9TSUVNRU5TIDB4MTEwQQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJRU1FTlNfRFNDQzQgMHgyMTAyCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9WRU5ET1JfSURfVk9SVEVYIDB4MTExOQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZPUlRFWF9HRFQ2MHgwIDB4MDAwMAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZPUlRFWF9HRFQ2MDAwQiAweDAwMDEKICNkZWZpbmUgUENJX0RFVklDRV9JRF9WT1JURVhfR0RUNngxMCAweDAwMDIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVk9SVEVYX0dEVDZ4MjAgMHgwMDAzCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVk9SVEVYX0dEVDY1MzAgMHgwMDA0CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVk9SVEVYX0dEVDY1NTAgMHgwMDA1CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVk9SVEVYX0dEVDZ4MTcgMHgwMDA2CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZPUlRFWF9HRFQ2eDI3IDB4MDAwNwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZPUlRFWF9HRFQ2NTM3IDB4MDAwOAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZPUlRFWF9HRFQ2NTU3IDB4MDAwOQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZPUlRFWF9HRFQ2eDE1IDB4MDAwYQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0RFVklDRV9JRF9WT1JURVhfR0RUNngyNSAweDAwMGIKICNkZWZpbmUgUENJX0RFVklDRV9JRF9WT1JURVhfR0RUNjUzNSAweDAwMGMKICNkZWZpbmUgUENJX0RFVklDRV9JRF9WT1JURVhfR0RUNjU1NSAweDAwMGQKICNkZWZpbmUgUENJX0RFVklDRV9JRF9WT1JURVhfR0RUNngxN1JQIDB4MDEwMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0RFVklDRV9JRF9WT1JURVhfR0RUNngyN1JQIDB4MDEwMQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZPUlRFWF9HRFQ2NTM3UlAgMHgwMTAyCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVk9SVEVYX0dEVDY1NTdSUCAweDAxMDMKICNkZWZpbmUgUENJX0RFVklDRV9JRF9WT1JURVhfR0RUNngxMVJQIDB4MDEwNAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0RFVklDRV9JRF9WT1JURVhfR0RUNngyMVJQIDB4MDEwNQotCiAjZGVmaW5lIFBDSV9WRU5ET1JfSURfRUYgMHgxMTFhCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfRUZfQVRNX0ZQR0EgMHgwMDAwCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfRUZfQVRNX0FTSUMgMHgwMDAyCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfVkVORE9SX0lEX0VGX0FUTV9MQU5BSTIgMHgwMDAzCiAjZGVmaW5lIFBDSV9WRU5ET1JfSURfRUZfQVRNX0xBTkFJSEIgMHgwMDA1Ci0KICNkZWZpbmUgUENJX1ZFTkRPUl9JRF9JRFQgMHgxMTFkCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSURUX0lEVDc3MjAxIDB4MDAwMQotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfVkVORE9SX0lEX0ZPUkUgMHgxMTI3CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfRk9SRV9QQ0EyMDBFIDB4MDMwMAotCiAjZGVmaW5lIFBDSV9WRU5ET1JfSURfUEhJTElQUyAweDExMzEKICNkZWZpbmUgUENJX0RFVklDRV9JRF9QSElMSVBTX1NBQTcxNDYgMHg3MTQ2CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1BISUxJUFNfU0FBOTczMCAweDk3MzAKLQogI2RlZmluZSBQQ0lfVkVORE9SX0lEX0VJQ09OIDB4MTEzMwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0VJQ09OX0RJVkEyMCAweGUwMDIKICNkZWZpbmUgUENJX0RFVklDRV9JRF9FSUNPTl9ESVZBMjBfVSAweGUwMDQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfRUlDT05fRElWQTIwMSAweGUwMDUKICNkZWZpbmUgUENJX0RFVklDRV9JRF9FSUNPTl9ESVZBMjAyIDB4ZTAwYgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0VJQ09OX01BRVNUUkEgMHhlMDEwCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfRUlDT05fTUFFU1RSQVEgMHhlMDEyCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0VJQ09OX01BRVNUUkFRX1UgMHhlMDEzCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfRUlDT05fTUFFU1RSQVAgMHhlMDE0Ci0KICNkZWZpbmUgUENJX1ZFTkRPUl9JRF9aSUFURUNIIDB4MTEzOAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1pJQVRFQ0hfNTU1MF9IQyAweDU1NTAKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX1ZFTkRPUl9JRF9TWVNLT05ORUNUIDB4MTE0OAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NZU0tPTk5FQ1RfVFIgMHg0MjAwCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU1lTS09OTkVDVF9HRSAweDQzMDAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9TWVNLT05ORUNUX1lVIDB4NDMyMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0RFVklDRV9JRF9TWVNLT05ORUNUXzlEWFggMHg0NDAwCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU1lTS09OTkVDVF85TVhYIDB4NDUwMAotCiAjZGVmaW5lIFBDSV9WRU5ET1JfSURfRElHSSAweDExNGYKICNkZWZpbmUgUENJX0RFVklDRV9JRF9ESUdJX0RGX01fSU9NMl9FIDB4MDA3MAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0RFVklDRV9JRF9ESUdJX0RGX01fRSAweDAwNzEKICNkZWZpbmUgUENJX0RFVklDRV9JRF9ESUdJX0RGX01fSU9NMl9BIDB4MDA3MgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0RJR0lfREZfTV9BIDB4MDA3MwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX05FT18yREI5IDB4MDBDOAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0RFVklDRV9JRF9ORU9fMkRCOVBSSSAweDAwQzkKICNkZWZpbmUgUENJX0RFVklDRV9JRF9ORU9fMlJKNDUgMHgwMENBCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTkVPXzJSSjQ1UFJJIDB4MDBDQgotCiAjZGVmaW5lIFBDSV9WRU5ET1JfSURfWElSQ09NIDB4MTE1ZAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0RFVklDRV9JRF9YSVJDT01fUkJNNTZHIDB4MDEwMQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1hJUkNPTV9YMzIwMV9NRE0gMHgwMTAzCi0KICNkZWZpbmUgUENJX1ZFTkRPUl9JRF9TRVJWRVJXT1JLUyAweDExNjYKICNkZWZpbmUgUENJX0RFVklDRV9JRF9TRVJWRVJXT1JLU19IRSAweDAwMDgKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0VSVkVSV09SS1NfTEUgMHgwMDA5CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0VSVkVSV09SS1NfR0NOQl9MRSAweDAwMTcKICNkZWZpbmUgUENJX0RFVklDRV9JRF9TRVJWRVJXT1JLU19FUEIgMHgwMTAzCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0VSVkVSV09SS1NfT1NCNCAweDAyMDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0VSVkVSV09SS1NfQ1NCNSAweDAyMDEKICNkZWZpbmUgUENJX0RFVklDRV9JRF9TRVJWRVJXT1JLU19DU0I2IDB4MDIwMwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NFUlZFUldPUktTX0hUMTAwMFNCIDB4MDIwNQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NFUlZFUldPUktTX09TQjRJREUgMHgwMjExCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NFUlZFUldPUktTX0NTQjVJREUgMHgwMjEyCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0VSVkVSV09SS1NfQ1NCNklERSAweDAyMTMKICNkZWZpbmUgUENJX0RFVklDRV9JRF9TRVJWRVJXT1JLU19IVDEwMDBJREUgMHgwMjE0CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0VSVkVSV09SS1NfQ1NCNklERTIgMHgwMjE3CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NFUlZFUldPUktTX0NTQjZMUEMgMHgwMjI3Ci0KICNkZWZpbmUgUENJX1ZFTkRPUl9JRF9TQkUgMHgxMTc2CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0JFX1dBTlhMMTAwIDB4MDMwMQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NCRV9XQU5YTDIwMCAweDAzMDIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0JFX1dBTlhMNDAwIDB4MDEwNAotCiAjZGVmaW5lIFBDSV9WRU5ET1JfSURfVE9TSElCQSAweDExNzkKICNkZWZpbmUgUENJX0RFVklDRV9JRF9UT1NISUJBX1BJQ0NPTE8gMHgwMTAyCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVE9TSElCQV9QSUNDT0xPXzEgMHgwMTAzCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RPU0hJQkFfUElDQ09MT18yIDB4MDEwNQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RPU0hJQkFfVE9QSUM5NSAweDA2MGEKICNkZWZpbmUgUENJX0RFVklDRV9JRF9UT1NISUJBX1RPUElDOTcgMHgwNjBmCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVE9TSElCQV9UT1BJQzEwMCAweDA2MTcKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX1ZFTkRPUl9JRF9UT1NISUJBXzIgMHgxMDJmCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVE9TSElCQV9UQzM1ODE1Q0YgMHgwMDMwCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVE9TSElCQV9UQzg2QzAwMV9NSVNDIDB4MDEwOAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RPU0hJQkFfU1BJREVSX05FVCAweDAxYjMKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX1ZFTkRPUl9JRF9SSUNPSCAweDExODAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9SSUNPSF9STDVDNDY1IDB4MDQ2NQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1JJQ09IX1JMNUM0NjYgMHgwNDY2CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUklDT0hfUkw1QzQ3NSAweDA0NzUKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUklDT0hfUkw1QzQ3NiAweDA0NzYKICNkZWZpbmUgUENJX0RFVklDRV9JRF9SSUNPSF9STDVDNDc4IDB4MDQ3OAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1JJQ09IX1I1QzgyMiAweDA4MjIKLQogI2RlZmluZSBQQ0lfVkVORE9SX0lEX0RMSU5LIDB4MTE4NgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0RFVklDRV9JRF9ETElOS19ER0U1MTBUIDB4NGMwMAotCiAjZGVmaW5lIFBDSV9WRU5ET1JfSURfQVJUT1AgMHgxMTkxCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVJUT1BfQVRQODUwVUYgMHgwMDA1CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVJUT1BfQVRQODYwIDB4MDAwNgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0RFVklDRV9JRF9BUlRPUF9BVFA4NjBSIDB4MDAwNwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FSVE9QX0FUUDg2NSAweDAwMDgKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BUlRPUF9BVFA4NjVSIDB4MDAwOQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FSVE9QX0FFQzc2MTAgMHg4MDAyCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FSVE9QX0FFQzc2MTJVVyAweDgwMTAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BUlRPUF9BRUM3NjEyVSAweDgwMjAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BUlRPUF9BRUM3NjEyUyAweDgwMzAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BUlRPUF9BRUM3NjEyRCAweDgwNDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVJUT1BfQUVDNzYxMlNVVyAweDgwNTAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BUlRPUF84MDYwIDB4ODA2MAotCiAjZGVmaW5lIFBDSV9WRU5ET1JfSURfWkVJVE5FVCAweDExOTMKICNkZWZpbmUgUENJX0RFVklDRV9JRF9aRUlUTkVUXzEyMjEgMHgwMDAxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1pFSVRORVRfMTIyNSAweDAwMDIKLQogI2RlZmluZSBQQ0lfVkVORE9SX0lEX0ZVSklUU1VfTUUgMHgxMTllCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfRlVKSVRTVV9GUzE1NSAweDAwMDEKICNkZWZpbmUgUENJX0RFVklDRV9JRF9GVUpJVFNVX0ZTNTAgMHgwMDAzCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9TVUJWRU5ET1JfSURfS0VZU1BBTiAweDExYTkKICNkZWZpbmUgUENJX1NVQkRFVklDRV9JRF9LRVlTUEFOX1NYMiAweDUzMzQKLQogI2RlZmluZSBQQ0lfVkVORE9SX0lEX01BUlZFTEwgMHgxMWFiCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTUFSVkVMTF9HVDY0MTExIDB4NDE0NgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0RFVklDRV9JRF9NQVJWRUxMX0dUNjQyNjAgMHg2NDMwCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTUFSVkVMTF9NVjY0MzYwIDB4NjQ2MAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX01BUlZFTExfTVY2NDQ2MCAweDY0ODAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9NQVJWRUxMX0dUOTYxMDAgMHg5NjUyCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX01BUlZFTExfR1Q5NjEwMEEgMHg5NjUzCi0KICNkZWZpbmUgUENJX1ZFTkRPUl9JRF9WMyAweDExYjAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9WM19WOTYwIDB4MDAwMQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1YzX1YzNTEgMHgwMDAyCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9WRU5ET1JfSURfQVRUIDB4MTFjMQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUVF9WRU5VU19NT0RFTSAweDQ4MAotCiAjZGVmaW5lIFBDSV9WRU5ET1JfSURfU1BFQ0lBTElYIDB4MTFjYgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NQRUNJQUxJWF9JTzggMHgyMDAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NQRUNJQUxJWF9SSU8gMHg4MDAwCiAjZGVmaW5lIFBDSV9TVUJERVZJQ0VfSURfU1BFQ0lBTElYX1NQRUVENCAweGEwMDQKLQogI2RlZmluZSBQQ0lfVkVORE9SX0lEX0FOQUxPR19ERVZJQ0VTIDB4MTFkNAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FEMTg4OUpTIDB4MTg4OQotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NFR0FfQkJBIDB4MTIzNAotCiAjZGVmaW5lIFBDSV9WRU5ET1JfSURfWk9SQU4gMHgxMWRlCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfWk9SQU5fMzYwNTcgMHg2MDU3CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfWk9SQU5fMzYxMjAgMHg2MTIwCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9WRU5ET1JfSURfQ09NUEVYIDB4MTFmNgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0NPTVBFWF9FTkVUMTAwVkc0IDB4MDExMgotCiAjZGVmaW5lIFBDSV9WRU5ET1JfSURfUlAgMHgxMWZlCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUlAzMklOVEYgMHgwMDAxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1JQOElOVEYgMHgwMDAyCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUlAxNklOVEYgMHgwMDAzCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUlA0UVVBRCAweDAwMDQKICNkZWZpbmUgUENJX0RFVklDRV9JRF9SUDhPQ1RBIDB4MDAwNQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0RFVklDRV9JRF9SUDhKIDB4MDAwNgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1JQNEogMHgwMDA3Ci0jZGVmaW5lIFBDSV9ERVZJQ0VfSURfUlA4U05JIDB4MDAwOCAKLSNkZWZpbmUgUENJX0RFVklDRV9JRF9SUDE2U05JIDB4MDAwOSAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9SUDhTTkkgMHgwMDA4CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUlAxNlNOSSAweDAwMDkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUlBQNCAweDAwMEEKICNkZWZpbmUgUENJX0RFVklDRV9JRF9SUFA4IDB4MDAwQgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1JQNE0gMHgwMDBECiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUlAyXzIzMiAweDAwMEUKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUlAyXzQyMiAweDAwMEYKICNkZWZpbmUgUENJX0RFVklDRV9JRF9VUlAzMklOVEYgMHgwODAxCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVVJQOElOVEYgMHgwODAyCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVVJQMTZJTlRGIDB4MDgwMworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0RFVklDRV9JRF9VUlA4T0NUQSAweDA4MDUKLSNkZWZpbmUgUENJX0RFVklDRV9JRF9VUENJX1JNM184UE9SVCAweDA4MEMgCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVVBDSV9STTNfOFBPUlQgMHgwODBDCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVVBDSV9STTNfNFBPUlQgMHgwODBECi0jZGVmaW5lIFBDSV9ERVZJQ0VfSURfQ1JQMTZJTlRGIDB4MDkwMyAKLQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0NSUDE2SU5URiAweDA5MDMKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9WRU5ET1JfSURfQ1lDTEFERVMgMHgxMjBlCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQ1lDTE9NX1lfTG8gMHgwMTAwCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQ1lDTE9NX1lfSGkgMHgwMTAxCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQ1lDTE9NXzRZX0xvIDB4MDEwMgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0RFVklDRV9JRF9DWUNMT01fNFlfSGkgMHgwMTAzCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQ1lDTE9NXzhZX0xvIDB4MDEwNAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0NZQ0xPTV84WV9IaSAweDAxMDUKICNkZWZpbmUgUENJX0RFVklDRV9JRF9DWUNMT01fWl9MbyAweDAyMDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQ1lDTE9NX1pfSGkgMHgwMjAxCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUEMzMDBfUlhfMiAweDAzMDAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9QQzMwMF9SWF8xIDB4MDMwMQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1BDMzAwX1RFXzIgMHgwMzEwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1BDMzAwX1RFXzEgMHgwMzExCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUEMzMDBfVEVfTV8yIDB4MDMyMAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1BDMzAwX1RFX01fMSAweDAzMjEKLQogI2RlZmluZSBQQ0lfVkVORE9SX0lEX0VTU0VOVElBTCAweDEyMGYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfRVNTRU5USUFMX1JPQURSVU5ORVIgMHgwMDAxCi0KICNkZWZpbmUgUENJX1ZFTkRPUl9JRF9PMiAweDEyMTcKICNkZWZpbmUgUENJX0RFVklDRV9JRF9PMl82NzI5IDB4NjcyOQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX08yXzY3MzAgMHg2NzNhCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX08yXzY4MzIgMHg2ODMyCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTzJfNjgzNiAweDY4MzYKLQogI2RlZmluZSBQQ0lfVkVORE9SX0lEXzNERlggMHgxMjFhCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfM0RGWF9WT09ET08gMHgwMDAxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfREVWSUNFX0lEXzNERlhfVk9PRE9PMiAweDAwMDIKICNkZWZpbmUgUENJX0RFVklDRV9JRF8zREZYX0JBTlNIRUUgMHgwMDAzCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfM0RGWF9WT09ET08zIDB4MDAwNQogI2RlZmluZSBQQ0lfREVWSUNFX0lEXzNERlhfVk9PRE9PNSAweDAwMDkKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX1ZFTkRPUl9JRF9BVk0gMHgxMjQ0CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVZNX0IxIDB4MDcwMAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FWTV9DNCAweDA4MDAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BVk1fQTEgMHgwYTAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FWTV9BMV9WMiAweDBlMDAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BVk1fQzIgMHgxMTAwCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVZNX1QxIDB4MTIwMAotCiAjZGVmaW5lIFBDSV9WRU5ET1JfSURfU1RBTExJT04gMHgxMjRkCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9WRU5ET1JfSURfQVQgMHgxMjU5CiAjZGVmaW5lIFBDSV9TVUJERVZJQ0VfSURfQVRfMjcwMEZYIDB4MjcwMQogI2RlZmluZSBQQ0lfU1VCREVWSUNFX0lEX0FUXzI3MDFGWCAweDI3MDMKLQogI2RlZmluZSBQQ0lfVkVORE9SX0lEX0VTUyAweDEyNWQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfRVNTX0VTUzE5NjggMHgxOTY4CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfRVNTX0VTUzE5NzggMHgxOTc4CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfRVNTX0FMTEVHUk9fMSAweDE5ODgKICNkZWZpbmUgUENJX0RFVklDRV9JRF9FU1NfQUxMRUdSTyAweDE5ODkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfRVNTX0NBTllPTjNEXzJMRSAweDE5OTAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9FU1NfQ0FOWU9OM0RfMiAweDE5OTIKICNkZWZpbmUgUENJX0RFVklDRV9JRF9FU1NfTUFFU1RSTzMgMHgxOTk4CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfRVNTX01BRVNUUk8zXzEgMHgxOTk5CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0VTU19NQUVTVFJPM19IVyAweDE5OWEKICNkZWZpbmUgUENJX0RFVklDRV9JRF9FU1NfTUFFU1RSTzNfMiAweDE5OWIKLQogI2RlZmluZSBQQ0lfVkVORE9SX0lEX1NBVFNBR0VNIDB4MTI2NwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NBVFNBR0VNX05JQ0NZIDB4MTAxNgotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfVkVORE9SX0lEX0VOU09OSVEgMHgxMjc0CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfRU5TT05JUV9DVDU4ODAgMHg1ODgwCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfRU5TT05JUV9FUzEzNzAgMHg1MDAwCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfRU5TT05JUV9FUzEzNzEgMHgxMzcxCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9WRU5ET1JfSURfVFJBTlNNRVRBIDB4MTI3OQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0VGRklDRU9OIDB4MDA2MAotCiAjZGVmaW5lIFBDSV9WRU5ET1JfSURfUk9DS1dFTEwgMHgxMjdBCi0KICNkZWZpbmUgUENJX1ZFTkRPUl9JRF9JVEUgMHgxMjgzCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lURV9JVDgxNzJHIDB4ODE3MgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lURV9JVDgxNzJHX0FVRElPIDB4MDgwMQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lURV84MjExIDB4ODIxMQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lURV84MjEyIDB4ODIxMgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0RFVklDRV9JRF9JVEVfODg3MiAweDg4NzIKICNkZWZpbmUgUENJX0RFVklDRV9JRF9JVEVfSVQ4MzMwR18wIDB4ZTg4NgotCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfRVNTX0VTUzAxMDAgMHgwMTAwCi0KICNkZWZpbmUgUENJX1ZFTkRPUl9JRF9BTFRFT04gMHgxMmFlCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9TVUJWRU5ET1JfSURfQ09OTkVDVF9URUNIIDB4MTJjNAogI2RlZmluZSBQQ0lfU1VCREVWSUNFX0lEX0NPTk5FQ1RfVEVDSF9CSDhfMjMyIDB4MDAwMQogI2RlZmluZSBQQ0lfU1VCREVWSUNFX0lEX0NPTk5FQ1RfVEVDSF9CSDRfMjMyIDB4MDAwMgogI2RlZmluZSBQQ0lfU1VCREVWSUNFX0lEX0NPTk5FQ1RfVEVDSF9CSDJfMjMyIDB4MDAwMworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX1NVQkRFVklDRV9JRF9DT05ORUNUX1RFQ0hfQkg4XzQ4NSAweDAwMDQKICNkZWZpbmUgUENJX1NVQkRFVklDRV9JRF9DT05ORUNUX1RFQ0hfQkg4XzQ4NV80XzQgMHgwMDA1CiAjZGVmaW5lIFBDSV9TVUJERVZJQ0VfSURfQ09OTkVDVF9URUNIX0JINF80ODUgMHgwMDA2CiAjZGVmaW5lIFBDSV9TVUJERVZJQ0VfSURfQ09OTkVDVF9URUNIX0JINF80ODVfMl8yIDB4MDAwNworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX1NVQkRFVklDRV9JRF9DT05ORUNUX1RFQ0hfQkgyXzQ4NSAweDAwMDgKICNkZWZpbmUgUENJX1NVQkRFVklDRV9JRF9DT05ORUNUX1RFQ0hfQkg4XzQ4NV8yXzYgMHgwMDA5CiAjZGVmaW5lIFBDSV9TVUJERVZJQ0VfSURfQ09OTkVDVF9URUNIX0JIMDgxMTAxVjEgMHgwMDBBCiAjZGVmaW5lIFBDSV9TVUJERVZJQ0VfSURfQ09OTkVDVF9URUNIX0JIMDQxMTAxVjEgMHgwMDBCCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfU1VCREVWSUNFX0lEX0NPTk5FQ1RfVEVDSF9CSDJfMjBNSFogMHgwMDBDCiAjZGVmaW5lIFBDSV9TVUJERVZJQ0VfSURfQ09OTkVDVF9URUNIX0JIMl9QVE0gMHgwMDBECiAjZGVmaW5lIFBDSV9TVUJERVZJQ0VfSURfQ09OTkVDVF9URUNIX05UOTYwUENJIDB4MDEwMAogI2RlZmluZSBQQ0lfU1VCREVWSUNFX0lEX0NPTk5FQ1RfVEVDSF9USVRBTl8yIDB4MDIwMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX1NVQkRFVklDRV9JRF9DT05ORUNUX1RFQ0hfVElUQU5fNCAweDAyMDIKICNkZWZpbmUgUENJX1NVQkRFVklDRV9JRF9DT05ORUNUX1RFQ0hfUENJX1VBUlRfMl8yMzIgMHgwMzAwCiAjZGVmaW5lIFBDSV9TVUJERVZJQ0VfSURfQ09OTkVDVF9URUNIX1BDSV9VQVJUXzRfMjMyIDB4MDMwMQogI2RlZmluZSBQQ0lfU1VCREVWSUNFX0lEX0NPTk5FQ1RfVEVDSF9QQ0lfVUFSVF84XzIzMiAweDAzMDIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9TVUJERVZJQ0VfSURfQ09OTkVDVF9URUNIX1BDSV9VQVJUXzFfMSAweDAzMTAKICNkZWZpbmUgUENJX1NVQkRFVklDRV9JRF9DT05ORUNUX1RFQ0hfUENJX1VBUlRfMl8yIDB4MDMxMQogI2RlZmluZSBQQ0lfU1VCREVWSUNFX0lEX0NPTk5FQ1RfVEVDSF9QQ0lfVUFSVF80XzQgMHgwMzEyCiAjZGVmaW5lIFBDSV9TVUJERVZJQ0VfSURfQ09OTkVDVF9URUNIX1BDSV9VQVJUXzIgMHgwMzIwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfU1VCREVWSUNFX0lEX0NPTk5FQ1RfVEVDSF9QQ0lfVUFSVF80IDB4MDMyMQogI2RlZmluZSBQQ0lfU1VCREVWSUNFX0lEX0NPTk5FQ1RfVEVDSF9QQ0lfVUFSVF84IDB4MDMyMgogI2RlZmluZSBQQ0lfU1VCREVWSUNFX0lEX0NPTk5FQ1RfVEVDSF9QQ0lfVUFSVF8yXzQ4NSAweDAzMzAKICNkZWZpbmUgUENJX1NVQkRFVklDRV9JRF9DT05ORUNUX1RFQ0hfUENJX1VBUlRfNF80ODUgMHgwMzMxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfU1VCREVWSUNFX0lEX0NPTk5FQ1RfVEVDSF9QQ0lfVUFSVF84XzQ4NSAweDAzMzIKLQogI2RlZmluZSBQQ0lfVkVORE9SX0lEX05WSURJQV9TR1MgMHgxMmQyCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX1NHU19SSVZBMTI4IDB4MDAxOAotCiAjZGVmaW5lIFBDSV9TVUJWRU5ET1JfSURfQ0hBU0VfUENJRkFTVCAweDEyRTAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9TVUJERVZJQ0VfSURfQ0hBU0VfUENJRkFTVDQgMHgwMDMxCiAjZGVmaW5lIFBDSV9TVUJERVZJQ0VfSURfQ0hBU0VfUENJRkFTVDggMHgwMDIxCiAjZGVmaW5lIFBDSV9TVUJERVZJQ0VfSURfQ0hBU0VfUENJRkFTVDE2IDB4MDAxMQogI2RlZmluZSBQQ0lfU1VCREVWSUNFX0lEX0NIQVNFX1BDSUZBU1QxNkZNQyAweDAwNDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9TVUJWRU5ET1JfSURfQ0hBU0VfUENJUkFTIDB4MTI0RAogI2RlZmluZSBQQ0lfU1VCREVWSUNFX0lEX0NIQVNFX1BDSVJBUzQgMHhGMDAxCiAjZGVmaW5lIFBDSV9TVUJERVZJQ0VfSURfQ0hBU0VfUENJUkFTOCAweEYwMTAKLQogI2RlZmluZSBQQ0lfVkVORE9SX0lEX0FVUkVBTCAweDEyZWIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVVSRUFMX1ZPUlRFWF8xIDB4MDAwMQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FVUkVBTF9WT1JURVhfMiAweDAwMDIKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BVVJFQUxfQURWQU5UQUdFIDB4MDAwMwotCiAjZGVmaW5lIFBDSV9WRU5ET1JfSURfRUxFQ1RST05JQ0RFU0lHTkdNQkggMHgxMmY4CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0xNTF8zM1IxMCAweDhhMDIKLQogI2RlZmluZSBQQ0lfVkVORE9SX0lEX1NJSUcgMHgxMzFmCiAjZGVmaW5lIFBDSV9TVUJWRU5ET1JfSURfU0lJRyAweDEzMWYKICNkZWZpbmUgUENJX0RFVklDRV9JRF9TSUlHXzFTXzEweF81NTAgMHgxMDAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJSUdfMVNfMTB4XzY1MCAweDEwMDEKICNkZWZpbmUgUENJX0RFVklDRV9JRF9TSUlHXzFTXzEweF84NTAgMHgxMDAyCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0lJR18xUzFQXzEweF81NTAgMHgxMDEwCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0lJR18xUzFQXzEweF82NTAgMHgxMDExCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJSUdfMVMxUF8xMHhfODUwIDB4MTAxMgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJSUdfMVBfMTB4IDB4MTAyMAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJSUdfMlBfMTB4IDB4MTAyMQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJSUdfMlNfMTB4XzU1MCAweDEwMzAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0lJR18yU18xMHhfNjUwIDB4MTAzMQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJSUdfMlNfMTB4Xzg1MCAweDEwMzIKICNkZWZpbmUgUENJX0RFVklDRV9JRF9TSUlHXzJTMVBfMTB4XzU1MCAweDEwMzQKICNkZWZpbmUgUENJX0RFVklDRV9JRF9TSUlHXzJTMVBfMTB4XzY1MCAweDEwMzUKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0lJR18yUzFQXzEweF84NTAgMHgxMDM2CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0lJR180U18xMHhfNTUwIDB4MTA1MAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJSUdfNFNfMTB4XzY1MCAweDEwNTEKICNkZWZpbmUgUENJX0RFVklDRV9JRF9TSUlHXzRTXzEweF84NTAgMHgxMDUyCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJSUdfMVNfMjB4XzU1MCAweDIwMDAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9TSUlHXzFTXzIweF82NTAgMHgyMDAxCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0lJR18xU18yMHhfODUwIDB4MjAwMgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJSUdfMVBfMjB4IDB4MjAyMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0RFVklDRV9JRF9TSUlHXzJQXzIweCAweDIwMjEKICNkZWZpbmUgUENJX0RFVklDRV9JRF9TSUlHXzJTXzIweF81NTAgMHgyMDMwCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0lJR18yU18yMHhfNjUwIDB4MjAzMQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJSUdfMlNfMjB4Xzg1MCAweDIwMzIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0lJR18yUDFTXzIweF81NTAgMHgyMDQwCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0lJR18yUDFTXzIweF82NTAgMHgyMDQxCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0lJR18yUDFTXzIweF84NTAgMHgyMDQyCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0lJR18xUzFQXzIweF81NTAgMHgyMDEwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJSUdfMVMxUF8yMHhfNjUwIDB4MjAxMQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJSUdfMVMxUF8yMHhfODUwIDB4MjAxMgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJSUdfNFNfMjB4XzU1MCAweDIwNTAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9TSUlHXzRTXzIweF82NTAgMHgyMDUxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJSUdfNFNfMjB4Xzg1MCAweDIwNTIKICNkZWZpbmUgUENJX0RFVklDRV9JRF9TSUlHXzJTMVBfMjB4XzU1MCAweDIwNjAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9TSUlHXzJTMVBfMjB4XzY1MCAweDIwNjEKICNkZWZpbmUgUENJX0RFVklDRV9JRF9TSUlHXzJTMVBfMjB4Xzg1MCAweDIwNjIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0lJR184U18yMHhfNTUwIDB4MjA4MAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJSUdfOFNfMjB4XzY1MCAweDIwODEKICNkZWZpbmUgUENJX0RFVklDRV9JRF9TSUlHXzhTXzIweF84NTAgMHgyMDgyCiAjZGVmaW5lIFBDSV9TVUJERVZJQ0VfSURfU0lJR19RVUFSVEVUX1NFUklBTCAweDIwNTAKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX1ZFTkRPUl9JRF9SQURJU1lTIDB4MTMzMQotCiAjZGVmaW5lIFBDSV9WRU5ET1JfSURfRE9NRVggMHgxMzRhCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfRE9NRVhfRE1YMzE5MUQgMHgwMDAxCi0KICNkZWZpbmUgUENJX1ZFTkRPUl9JRF9JTlRBU0hJRUxEIDB4MTM1YQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRBU0hJRUxEX0lTMjAwIDB4MGQ4MAotCiAjZGVmaW5lIFBDSV9WRU5ET1JfSURfUVVBVEVDSCAweDEzNUMKICNkZWZpbmUgUENJX0RFVklDRV9JRF9RVUFURUNIX1FTQzEwMCAweDAwMTAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9RVUFURUNIX0RTQzEwMCAweDAwMjAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUVVBVEVDSF9FU0MxMDBEIDB4MDA1MAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1FVQVRFQ0hfRVNDMTAwTSAweDAwNjAKLQogI2RlZmluZSBQQ0lfVkVORE9SX0lEX1NFQUxFVkVMIDB4MTM1ZQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NFQUxFVkVMX1U1MzAgMHg3MTAxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NFQUxFVkVMX1VDT01NMiAweDcyMDEKICNkZWZpbmUgUENJX0RFVklDRV9JRF9TRUFMRVZFTF9VQ09NTTQyMiAweDc0MDIKICNkZWZpbmUgUENJX0RFVklDRV9JRF9TRUFMRVZFTF9VQ09NTTIzMiAweDcyMDIKICNkZWZpbmUgUENJX0RFVklDRV9JRF9TRUFMRVZFTF9DT01NNCAweDc0MDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0VBTEVWRUxfQ09NTTggMHg3ODAxCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0VBTEVWRUxfVUNPTU04IDB4NzgwNAotCiAjZGVmaW5lIFBDSV9WRU5ET1JfSURfSFlQRVJDT1BFIDB4MTM2NQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0hZUEVSQ09QRV9QTFggMHg5MDUwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfU1VCREVWSUNFX0lEX0hZUEVSQ09QRV9PTERfRVJHTyAweDAxMDQKICNkZWZpbmUgUENJX1NVQkRFVklDRV9JRF9IWVBFUkNPUEVfRVJHTyAweDAxMDYKICNkZWZpbmUgUENJX1NVQkRFVklDRV9JRF9IWVBFUkNPUEVfTUVUUk8gMHgwMTA3CiAjZGVmaW5lIFBDSV9TVUJERVZJQ0VfSURfSFlQRVJDT1BFX0NIQU1QMiAweDAxMDgKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX1ZFTkRPUl9JRF9LQVdBU0FLSSAweDEzNmIKICNkZWZpbmUgUENJX0RFVklDRV9JRF9NQ0hJUF9LTDVBNzIwMDIgMHhmZjAxCi0KICNkZWZpbmUgUENJX1ZFTkRPUl9JRF9DTkVUIDB4MTM3MQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0NORVRfR0lHQUNBUkQgMHg0MzRlCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9WRU5ET1JfSURfTE1DIDB4MTM3NgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0xNQ19IU1NJIDB4MDAwMwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0xNQ19EUzMgMHgwMDA0CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTE1DX1NTSSAweDAwMDUKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTE1DX1QxIDB4MDAwNgotCiAjZGVmaW5lIFBDSV9WRU5ET1JfSURfTkVUR0VBUiAweDEzODUKICNkZWZpbmUgUENJX0RFVklDRV9JRF9ORVRHRUFSX0dBNjIwIDB4NjIwYQotCiAjZGVmaW5lIFBDSV9WRU5ET1JfSURfQVBQTElDT00gMHgxMzg5CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FQUExJQ09NX1BDSUdFTkVSSUMgMHgwMDAxCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVBQTElDT01fUENJMjAwMElCU19DQU4gMHgwMDAyCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVBQTElDT01fUENJMjAwMFBGQiAweDAwMDMKLQogI2RlZmluZSBQQ0lfVkVORE9SX0lEX01PWEEgMHgxMzkzCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX01PWEFfUkM3MDAwIDB4MDAwMQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX01PWEFfQ1AxMDIgMHgxMDIwCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTU9YQV9DUDEwMlVMIDB4MTAyMQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX01PWEFfQ1AxMDJVIDB4MTAyMgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0RFVklDRV9JRF9NT1hBX0MxMDQgMHgxMDQwCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTU9YQV9DUDEwNFUgMHgxMDQxCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTU9YQV9DUDEwNEpVIDB4MTA0MgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX01PWEFfQ1QxMTQgMHgxMTQwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX01PWEFfQ1AxMTQgMHgxMTQxCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTU9YQV9DUDExOFUgMHgxMTgwCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTU9YQV9DUDEzMiAweDEzMjAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9NT1hBX0NQMTMyVSAweDEzMjEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTU9YQV9DUDEzNFUgMHgxMzQwCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTU9YQV9DMTY4IDB4MTY4MAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX01PWEFfQ1AxNjhVIDB4MTY4MQotCiAjZGVmaW5lIFBDSV9WRU5ET1JfSURfQ0NEIDB4MTM5NworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0RFVklDRV9JRF9DQ0RfMkJEMCAweDJiZDAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9DQ0RfQjAwMCAweGIwMDAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9DQ0RfQjAwNiAweGIwMDYKICNkZWZpbmUgUENJX0RFVklDRV9JRF9DQ0RfQjAwNyAweGIwMDcKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQ0NEX0IwMDggMHhiMDA4CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQ0NEX0IwMDkgMHhiMDA5CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQ0NEX0IwMEEgMHhiMDBhCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQ0NEX0IwMEIgMHhiMDBiCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0NDRF9CMDBDIDB4YjAwYwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0NDRF9CMTAwIDB4YjEwMAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0NDRF9CNzAwIDB4YjcwMAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0NDRF9CNzAxIDB4YjcwMQotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfVkVORE9SX0lEX0VYQVIgMHgxM2E4CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfRVhBUl9YUjE3QzE1MiAweDAxNTIKICNkZWZpbmUgUENJX0RFVklDRV9JRF9FWEFSX1hSMTdDMTU0IDB4MDE1NAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0VYQVJfWFIxN0MxNTggMHgwMTU4Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9WRU5ET1JfSURfTUlDUk9HQVRFIDB4MTNjMAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX01JQ1JPR0FURV9VU0MgMHgwMDEwCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTUlDUk9HQVRFX1NDQSAweDAwMzAKLQogI2RlZmluZSBQQ0lfVkVORE9SX0lEXzNXQVJFIDB4MTNDMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0RFVklDRV9JRF8zV0FSRV8xMDAwIDB4MTAwMAogI2RlZmluZSBQQ0lfREVWSUNFX0lEXzNXQVJFXzcwMDAgMHgxMDAxCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfM1dBUkVfOTAwMCAweDEwMDIKLQogI2RlZmluZSBQQ0lfVkVORE9SX0lEX0lPTUVHQSAweDEzY2EKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU9NRUdBX0JVWiAweDQyMzEKLQogI2RlZmluZSBQQ0lfVkVORE9SX0lEX0FCT0NPTSAweDEzRDEKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BQk9DT01fMkJEMSAweDJCRDEKLQogI2RlZmluZSBQQ0lfVkVORE9SX0lEX0NNRURJQSAweDEzZjYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQ01FRElBX0NNODMzOEEgMHgwMTAwCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQ01FRElBX0NNODMzOEIgMHgwMTAxCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQ01FRElBX0NNODczOCAweDAxMTEKICNkZWZpbmUgUENJX0RFVklDRV9JRF9DTUVESUFfQ004NzM4QiAweDAxMTIKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX1ZFTkRPUl9JRF9MQVZBIDB4MTQwNwotI2RlZmluZSBQQ0lfREVWSUNFX0lEX0xBVkFfRFNFUklBTCAweDAxMDAgIAotI2RlZmluZSBQQ0lfREVWSUNFX0lEX0xBVkFfUVVBVFJPX0EgMHgwMTAxICAKLSNkZWZpbmUgUENJX0RFVklDRV9JRF9MQVZBX1FVQVRST19CIDB4MDEwMiAgCi0jZGVmaW5lIFBDSV9ERVZJQ0VfSURfTEFWQV9PQ1RPX0EgMHgwMTgwICAKLSNkZWZpbmUgUENJX0RFVklDRV9JRF9MQVZBX09DVE9fQiAweDAxODEgIAotI2RlZmluZSBQQ0lfREVWSUNFX0lEX0xBVkFfUE9SVF9QTFVTIDB4MDIwMCAgCi0jZGVmaW5lIFBDSV9ERVZJQ0VfSURfTEFWQV9RVUFEX0EgMHgwMjAxICAKLSNkZWZpbmUgUENJX0RFVklDRV9JRF9MQVZBX1FVQURfQiAweDAyMDIgIAotI2RlZmluZSBQQ0lfREVWSUNFX0lEX0xBVkFfU1NFUklBTCAweDA1MDAgIAotI2RlZmluZSBQQ0lfREVWSUNFX0lEX0xBVkFfUE9SVF82NTAgMHgwNjAwICAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9MQVZBX0RTRVJJQUwgMHgwMTAwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTEFWQV9RVUFUUk9fQSAweDAxMDEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9MQVZBX1FVQVRST19CIDB4MDEwMgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgUENJX0RFVklDRV9JRF9MQVZBX09DVE9fQSAweDAxODAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9MQVZBX09DVE9fQiAweDAxODEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9MQVZBX1BPUlRfUExVUyAweDAyMDAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9MQVZBX1FVQURfQSAweDAyMDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTEFWQV9RVUFEX0IgMHgwMjAyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTEFWQV9TU0VSSUFMIDB4MDUwMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0xBVkFfUE9SVF82NTAgMHgwNjAwCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTEFWQV9QQVJBTExFTCAweDgwMDAKLSNkZWZpbmUgUENJX0RFVklDRV9JRF9MQVZBX0RVQUxfUEFSX0EgMHg4MDAyICAKLSNkZWZpbmUgUENJX0RFVklDRV9JRF9MQVZBX0RVQUxfUEFSX0IgMHg4MDAzICAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTEFWQV9EVUFMX1BBUl9BIDB4ODAwMgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0xBVkFfRFVBTF9QQVJfQiAweDgwMDMKICNkZWZpbmUgUENJX0RFVklDRV9JRF9MQVZBX0JPQ0FfSU9QUEFSIDB4ODgwMAotCiAjZGVmaW5lIFBDSV9WRU5ET1JfSURfVElNRURJQSAweDE0MDkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElNRURJQV8xODg5IDB4NzE2OAotCiAjZGVmaW5lIFBDSV9WRU5ET1JfSURfSUNFIDB4MTQxMgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lDRV8xNzEyIDB4MTcxMgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZUMTcyNCAweDE3MjQKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX1ZFTkRPUl9JRF9PWFNFTUkgMHgxNDE1CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfT1hTRU1JXzEyUENJODQwIDB4ODQwMwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX09YU0VNSV8xNlBDSTk1NCAweDk1MDEKICNkZWZpbmUgUENJX0RFVklDRV9JRF9PWFNFTUlfMTZQQ0k5NU4gMHg5NTExCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX09YU0VNSV8xNlBDSTk1NFBQIDB4OTUxMwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX09YU0VNSV8xNlBDSTk1MiAweDk1MjEKLQogI2RlZmluZSBQQ0lfVkVORE9SX0lEX1NBTVNVTkcgMHgxNDRkCi0KICNkZWZpbmUgUENJX1ZFTkRPUl9JRF9NWVJJQ09NIDB4MTRjMQotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfVkVORE9SX0lEX1RJVEFOIDB4MTREMgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJVEFOXzAxMEwgMHg4MDAxCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElUQU5fMTAwTCAweDgwMTAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9USVRBTl8xMTBMIDB4ODAxMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0RFVklDRV9JRF9USVRBTl8yMDBMIDB4ODAyMAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJVEFOXzIxMEwgMHg4MDIxCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElUQU5fNDAwTCAweDgwNDAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9USVRBTl84MDBMIDB4ODA4MAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0RFVklDRV9JRF9USVRBTl8xMDAgMHhBMDAxCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElUQU5fMjAwIDB4QTAwNQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJVEFOXzQwMCAweEEwMDMKICNkZWZpbmUgUENJX0RFVklDRV9JRF9USVRBTl84MDBCIDB4QTAwNAotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfVkVORE9SX0lEX1BBTkFDT00gMHgxNGQ0CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUEFOQUNPTV9RVUFETU9ERU0gMHgwNDAwCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUEFOQUNPTV9EVUFMTU9ERU0gMHgwNDAyCi0KICNkZWZpbmUgUENJX1ZFTkRPUl9JRF9BRkFWTEFCIDB4MTRkYgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0RFVklDRV9JRF9BRkFWTEFCX1AwMjggMHgyMTgwCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQUZBVkxBQl9QMDMwIDB4MjE4MgogI2RlZmluZSBQQ0lfU1VCREVWSUNFX0lEX0FGQVZMQUJfUDA2MSAweDIxNTAKLQogI2RlZmluZSBQQ0lfVkVORE9SX0lEX0JST0FEQ09NIDB4MTRlNAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0RFVklDRV9JRF9USUdPTjNfNTc1MiAweDE2MDAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9USUdPTjNfNTc1Mk0gMHgxNjAxCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElHT04zXzU3MDAgMHgxNjQ0CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElHT04zXzU3MDEgMHgxNjQ1CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJR09OM181NzAyIDB4MTY0NgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJR09OM181NzAzIDB4MTY0NwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJR09OM181NzA0IDB4MTY0OAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJR09OM181NzA0U18yIDB4MTY0OQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0RFVklDRV9JRF9OWDJfNTcwNiAweDE2NGEKICNkZWZpbmUgUENJX0RFVklDRV9JRF9OWDJfNTcwOCAweDE2NGMKICNkZWZpbmUgUENJX0RFVklDRV9JRF9USUdPTjNfNTcwMkZFIDB4MTY0ZAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJR09OM181NzA1IDB4MTY1MworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0RFVklDRV9JRF9USUdPTjNfNTcwNV8yIDB4MTY1NAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJR09OM181NzIwIDB4MTY1OAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJR09OM181NzIxIDB4MTY1OQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJR09OM181NzA1TSAweDE2NWQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElHT04zXzU3MDVNXzIgMHgxNjVlCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElHT04zXzU3MTQgMHgxNjY4CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElHT04zXzU3MTRTIDB4MTY2OQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJR09OM181NzgwIDB4MTY2YQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0RFVklDRV9JRF9USUdPTjNfNTc4MFMgMHgxNjZiCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElHT04zXzU3MDVGIDB4MTY2ZQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJR09OM181NzU0TSAweDE2NzIKICNkZWZpbmUgUENJX0RFVklDRV9JRF9USUdPTjNfNTc1NU0gMHgxNjczCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJR09OM181NzUwIDB4MTY3NgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJR09OM181NzUxIDB4MTY3NwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJR09OM181NzE1IDB4MTY3OAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJR09OM181NzE1UyAweDE2NzkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElHT04zXzU3NTQgMHgxNjdhCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElHT04zXzU3NTUgMHgxNjdiCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElHT04zXzU3NTBNIDB4MTY3YwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJR09OM181NzUxTSAweDE2N2QKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElHT04zXzU3NTFGIDB4MTY3ZQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJR09OM181Nzg3TSAweDE2OTMKICNkZWZpbmUgUENJX0RFVklDRV9JRF9USUdPTjNfNTc4MiAweDE2OTYKICNkZWZpbmUgUENJX0RFVklDRV9JRF9USUdPTjNfNTc4NiAweDE2OWEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElHT04zXzU3ODcgMHgxNjliCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElHT04zXzU3ODggMHgxNjljCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElHT04zXzU3ODkgMHgxNjlkCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElHT04zXzU3MDJYIDB4MTZhNgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0RFVklDRV9JRF9USUdPTjNfNTcwM1ggMHgxNmE3CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElHT04zXzU3MDRTIDB4MTZhOAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX05YMl81NzA2UyAweDE2YWEKICNkZWZpbmUgUENJX0RFVklDRV9JRF9OWDJfNTcwOFMgMHgxNmFjCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJR09OM181NzAyQTMgMHgxNmM2CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElHT04zXzU3MDNBMyAweDE2YzcKICNkZWZpbmUgUENJX0RFVklDRV9JRF9USUdPTjNfNTc4MSAweDE2ZGQKICNkZWZpbmUgUENJX0RFVklDRV9JRF9USUdPTjNfNTc1MyAweDE2ZjcKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElHT04zXzU3NTNNIDB4MTZmZAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJR09OM181NzUzRiAweDE2ZmUKICNkZWZpbmUgUENJX0RFVklDRV9JRF9USUdPTjNfNTkwMSAweDE3MGQKICNkZWZpbmUgUENJX0RFVklDRV9JRF9CQ000NDAxQjEgMHgxNzBjCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJR09OM181OTAxXzIgMHgxNzBlCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQkNNNDQwMSAweDQ0MDEKICNkZWZpbmUgUENJX0RFVklDRV9JRF9CQ000NDAxQjAgMHg0NDAyCi0KICNkZWZpbmUgUENJX1ZFTkRPUl9JRF9UT1BJQyAweDE1MWYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVE9QSUNfVFA1NjAgMHgwMDAwCi0KICNkZWZpbmUgUENJX1ZFTkRPUl9JRF9FTkUgMHgxNTI0CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfRU5FXzEyMTEgMHgxMjExCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfRU5FXzEyMjUgMHgxMjI1CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0VORV8xNDEwIDB4MTQxMAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0VORV83MTAgMHgxNDExCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfRU5FXzcxMiAweDE0MTIKICNkZWZpbmUgUENJX0RFVklDRV9JRF9FTkVfMTQyMCAweDE0MjAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfRU5FXzcyMCAweDE0MjEKICNkZWZpbmUgUENJX0RFVklDRV9JRF9FTkVfNzIyIDB4MTQyMgotCiAjZGVmaW5lIFBDSV9WRU5ET1JfSURfQ0hFTFNJTyAweDE0MjUKLQogI2RlZmluZSBQQ0lfVkVORE9SX0lEX1NZQkEgMHgxNTkyCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NZQkFfMlBfRVBQIDB4MDc4MgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NZQkFfMVBfRUNQIDB4MDc4MwotCiAjZGVmaW5lIFBDSV9WRU5ET1JfSURfTU9SRVRPTiAweDE1YWEKICNkZWZpbmUgUENJX0RFVklDRV9JRF9SQVNURUxfMlBPUlQgMHgyMDAwCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9WRU5ET1JfSURfWk9MVFJJWCAweDE1YjAKLSNkZWZpbmUgUENJX0RFVklDRV9JRF9aT0xUUklYXzJCRDAgMHgyYmQwIAotCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfWk9MVFJJWF8yQkQwIDB4MmJkMAogI2RlZmluZSBQQ0lfVkVORE9SX0lEX01FTExBTk9YIDB4MTViMwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX01FTExBTk9YX1RBVk9SIDB4NWE0NAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0RFVklDRV9JRF9NRUxMQU5PWF9UQVZPUl9CUklER0UgMHg1YTQ2CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTUVMTEFOT1hfQVJCRUxfQ09NUEFUIDB4NjI3OAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX01FTExBTk9YX0FSQkVMIDB4NjI4MgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX01FTExBTk9YX1NJTkFJX09MRCAweDVlOGMKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTUVMTEFOT1hfU0lOQUkgMHg2Mjc0Ci0KICNkZWZpbmUgUENJX1ZFTkRPUl9JRF9QREMgMHgxNWU5Ci0KICNkZWZpbmUgUENJX1ZFTkRPUl9JRF9GQVJTSVRFIDB4MTYxOQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0ZBUlNJVEVfVDJQIDB4MDQwMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0RFVklDRV9JRF9GQVJTSVRFX1Q0UCAweDA0NDAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9GQVJTSVRFX1QxVSAweDA2MTAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9GQVJTSVRFX1QyVSAweDA2MjAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9GQVJTSVRFX1Q0VSAweDA2NDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfRkFSU0lURV9URTEgMHgxNjEwCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfRkFSU0lURV9URTFDIDB4MTYxMgotCiAjZGVmaW5lIFBDSV9WRU5ET1JfSURfU0lCWVRFIDB4MTY2ZAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0JDTTEyNTBfSFQgMHgwMDAyCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9WRU5ET1JfSURfTkVUQ0VMTCAweDE2OWMKICNkZWZpbmUgUENJX0RFVklDRV9JRF9SRVZPTFVUSU9OIDB4MDA0NAotCiAjZGVmaW5lIFBDSV9WRU5ET1JfSURfVklURVNTRSAweDE3MjUKICNkZWZpbmUgUENJX0RFVklDRV9JRF9WSVRFU1NFX1ZTQzcxNzQgMHg3MTc0Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9WRU5ET1JfSURfTElOS1NZUyAweDE3MzcKICNkZWZpbmUgUENJX0RFVklDRV9JRF9MSU5LU1lTX0VHMTA2NCAweDEwNjQKLQogI2RlZmluZSBQQ0lfVkVORE9SX0lEX0FMVElNQSAweDE3M2IKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BTFRJTUFfQUMxMDAwIDB4MDNlOAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0RFVklDRV9JRF9BTFRJTUFfQUMxMDAxIDB4MDNlOQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FMVElNQV9BQzkxMDAgMHgwM2VhCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQUxUSU1BX0FDMTAwMyAweDAzZWIKLQogI2RlZmluZSBQQ0lfVkVORE9SX0lEX1MySU8gMHgxN2Q1CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1MySU9fV0lOIDB4NTczMQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1MySU9fVU5JIDB4NTgzMQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0hFUkNfV0lOIDB4NTczMgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0hFUkNfVU5JIDB4NTgzMgotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfVkVORE9SX0lEX1NJVEVDT00gMHgxODJkCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0lURUNPTV9EQzEwNVYyIDB4MzA2OQotCiAjZGVmaW5lIFBDSV9WRU5ET1JfSURfVE9QU1BJTiAweDE4NjcKLQogI2RlZmluZSBQQ0lfVkVORE9SX0lEX1RESSAweDE5MkUKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVERJX0VIQ0kgMHgwMTAxCi0KICNkZWZpbmUgUENJX1ZFTkRPUl9JRF9KTUlDUk9OIDB4MTk3QgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0pNSUNST05fSk1CMzYwIDB4MjM2MAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0pNSUNST05fSk1CMzYxIDB4MjM2MQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0RFVklDRV9JRF9KTUlDUk9OX0pNQjM2MyAweDIzNjMKICNkZWZpbmUgUENJX0RFVklDRV9JRF9KTUlDUk9OX0pNQjM2NSAweDIzNjUKICNkZWZpbmUgUENJX0RFVklDRV9JRF9KTUlDUk9OX0pNQjM2NiAweDIzNjYKICNkZWZpbmUgUENJX0RFVklDRV9JRF9KTUlDUk9OX0pNQjM2OCAweDIzNjgKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX1ZFTkRPUl9JRF9URUtSQU0gMHgxZGUxCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVEVLUkFNX0RDMjkwIDB4ZGMyOQotCiAjZGVmaW5lIFBDSV9WRU5ET1JfSURfSElOVCAweDMzODgKICNkZWZpbmUgUENJX0RFVklDRV9JRF9ISU5UX1ZYUFJPSUlfSURFIDB4ODAxMwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfVkVORE9SX0lEXzNETEFCUyAweDNkM2QKICNkZWZpbmUgUENJX0RFVklDRV9JRF8zRExBQlNfUEVSTUVESUEyIDB4MDAwNwogI2RlZmluZSBQQ0lfREVWSUNFX0lEXzNETEFCU19QRVJNRURJQTJWIDB4MDAwOQotCiAjZGVmaW5lIFBDSV9WRU5ET1JfSURfQUtTIDB4NDE2YworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0RFVklDRV9JRF9BS1NfQUxBRERJTkNBUkQgMHgwMTAwCi0KICNkZWZpbmUgUENJX1ZFTkRPUl9JRF9TMyAweDUzMzMKICNkZWZpbmUgUENJX0RFVklDRV9JRF9TM19UUklPIDB4ODgxMQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1MzXzg2OCAweDg4ODAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUzNfOTY4IDB4ODhmMAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1MzX1NBVkFHRTQgMHg4YTI1CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUzNfUFJPU0FWQUdFOCAweDhkMDQKICNkZWZpbmUgUENJX0RFVklDRV9JRF9TM19TT05JQ1ZJQkVTIDB4Y2EwMAotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfVkVORE9SX0lEX0RVTk9SRCAweDU1NDQKICNkZWZpbmUgUENJX0RFVklDRV9JRF9EVU5PUkRfSTMwMDAgMHgwMDAxCi0KICNkZWZpbmUgUENJX1ZFTkRPUl9JRF9EQ0kgMHg2NjY2CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfRENJX1BDQ09NNCAweDAwMDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfRENJX1BDQ09NOCAweDAwMDIKICNkZWZpbmUgUENJX0RFVklDRV9JRF9EQ0lfUENDT00yIDB4MDAwNAotCiAjZGVmaW5lIFBDSV9WRU5ET1JfSURfSU5URUwgMHg4MDg2CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfRUVTU0MgMHgwMDA4CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX1BYSERfMCAweDAzMjAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9QWEhEXzEgMHgwMzIxCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfUFhIXzAgMHgwMzI5CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfUFhIXzEgMHgwMzJBCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX1BYSFYgMHgwMzJDCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODIzNzUgMHgwNDgyCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI0MjQgMHgwNDgzCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODIzNzggMHgwNDg0CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0k5NjAgMHgwOTYwCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfSTk2MFJNIDB4MDk2MgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODE1X01DIDB4MTEzMAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODE1X0NHQyAweDExMzIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODIwOTJBQV8wIDB4MTIyMQotI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzc1MDVfMCAweDI1NTAgCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfNzUwNV8wIDB4MjU1MAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzcyMDVfMCAweDI1NWQKICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjQzNyAweDEyMmQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODIzNzFGQl8wIDB4MTIyZQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyMzcxRkJfMSAweDEyMzAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjM3MU1YIDB4MTIzNAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyNDQxIDB4MTIzNworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjM4MEZCIDB4MTI0YgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyNDM5IDB4MTI1MAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgwOTYwX1JQIDB4MTk2MAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODQwX0hCIDB4MWEyMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84Mjg0NV9IQiAweDFhMzAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9JT0FUIDB4MWEzOAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODAxQUFfMCAweDI0MTAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjgwMUFBXzEgMHgyNDExCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODAxQUFfMyAweDI0MTMKICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjgwMUFBXzUgMHgyNDE1CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4MDFBQV82IDB4MjQxNgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODAxQUFfOCAweDI0MTgKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4MDFBQl8wIDB4MjQyMAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODAxQUJfMSAweDI0MjEKICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjgwMUFCXzMgMHgyNDIzCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4MDFBQl81IDB4MjQyNQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjgwMUFCXzYgMHgyNDI2CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4MDFBQl84IDB4MjQyOAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODAxQkFfMCAweDI0NDAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjgwMUJBXzIgMHgyNDQzCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODAxQkFfNCAweDI0NDUKICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjgwMUJBXzYgMHgyNDQ4CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4MDFCQV84IDB4MjQ0YQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODAxQkFfOSAweDI0NGIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4MDFCQV8xMCAweDI0NGMKICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjgwMUJBXzExIDB4MjQ0ZQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODAxRV8wIDB4MjQ1MAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODAxRV8xMSAweDI0NWIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4MDFDQV8wIDB4MjQ4MAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODAxQ0FfMyAweDI0ODMKICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjgwMUNBXzUgMHgyNDg1CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4MDFDQV82IDB4MjQ4NgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjgwMUNBXzEwIDB4MjQ4YQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODAxQ0FfMTEgMHgyNDhiCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4MDFDQV8xMiAweDI0OGMKICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjgwMURCXzAgMHgyNGMwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODAxREJfMSAweDI0YzEKICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjgwMURCXzMgMHgyNGMzCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4MDFEQl81IDB4MjRjNQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODAxREJfNiAweDI0YzYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4MDFEQl85IDB4MjRjOQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODAxREJfMTAgMHgyNGNhCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4MDFEQl8xMSAweDI0Y2IKICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjgwMURCXzEyIDB4MjRjYworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjgwMUVCXzAgMHgyNGQwCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4MDFFQl8xIDB4MjRkMQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODAxRUJfMyAweDI0ZDMKICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjgwMUVCXzUgMHgyNGQ1CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODAxRUJfNiAweDI0ZDYKICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjgwMUVCXzExIDB4MjRkYgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODAxRUJfMTMgMHgyNGRkCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfRVNCXzEgMHgyNWExCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0VTQl8yIDB4MjVhMgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0VTQl80IDB4MjVhNAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0VTQl81IDB4MjVhNgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0VTQl85IDB4MjVhYgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjgyMF9IQiAweDI1MDAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjgyMF9VUF9IQiAweDI1MDEKICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84Mjg1MF9IQiAweDI1MzAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84Mjg2MF9IQiAweDI1MzEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfRTc1MDFfTUNIIDB4MjU0YwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODQ1R19IQiAweDI1NjAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84Mjg0NUdfSUcgMHgyNTYyCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4NjVfSEIgMHgyNTcwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODY1X0lHIDB4MjU3MgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODc1X0hCIDB4MjU3OAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyOTE1R19IQiAweDI1ODAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjkxNUdfSUcgMHgyNTgyCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyOTE1R01fSEIgMHgyNTkwCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI5MTVHTV9JRyAweDI1OTIKICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84Mjk0NUdfSEIgMHgyNzcwCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI5NDVHX0lHIDB4Mjc3MgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84Mjk0NUdNX0hCIDB4MjdBMAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyOTQ1R01fSUcgMHgyN0EyCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfSUNINl8wIDB4MjY0MAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0lDSDZfMSAweDI2NDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfSUNINl8yIDB4MjY0MgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0lDSDZfMTYgMHgyNjZhCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfSUNINl8xNyAweDI2NmQKICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9JQ0g2XzE4IDB4MjY2ZQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9JQ0g2XzE5IDB4MjY2ZgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0VTQjJfMCAweDI2NzAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9FU0IyXzE0IDB4MjY5OAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0VTQjJfMTcgMHgyNjliCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0VTQjJfMTggMHgyNjllCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfSUNIN18wIDB4MjdiOAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0lDSDdfMSAweDI3YjkKICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9JQ0g3XzMwIDB4MjdiMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9JQ0g3XzMxIDB4MjdiZAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0lDSDdfMTcgMHgyN2RhCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfSUNIN18xOSAweDI3ZGQKICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9JQ0g3XzIwIDB4MjdkZQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9JQ0g3XzIxIDB4MjdkZgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0lDSDhfMCAweDI4MTAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9JQ0g4XzEgMHgyODExCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfSUNIOF8yIDB4MjgxMgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9JQ0g4XzMgMHgyODE0CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfSUNIOF80IDB4MjgxNQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0lDSDhfNSAweDI4M2UKICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9JQ0g4XzYgMHgyODUwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODU1UE1fSEIgMHgzMzQwCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4MzBfSEIgMHgzNTc1CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4MzBfQ0dDIDB4MzU3NwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODU1R01fSEIgMHgzNTgwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODU1R01fSUcgMHgzNTgyCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfRTc1MjBfTUNIIDB4MzU5MAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0U3MzIwX01DSCAweDM1OTIKICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9NQ0hfUEEgMHgzNTk1CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX01DSF9QQTEgMHgzNTk2CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfTUNIX1BCIDB4MzU5NwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX01DSF9QQjEgMHgzNTk4CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfTUNIX1BDIDB4MzU5OQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9NQ0hfUEMxIDB4MzU5YQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0U3NTI1X01DSCAweDM1OWUKICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjM3MVNCXzAgMHg3MDAwCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODIzNzFTQl8xIDB4NzAxMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjM3MVNCXzIgMHg3MDIwCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI0MzdWWCAweDcwMzAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjQzOVRYIDB4NzEwMAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyMzcxQUJfMCAweDcxMTAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODIzNzFBQiAweDcxMTEKICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjM3MUFCXzIgMHg3MTEyCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODIzNzFBQl8zIDB4NzExMwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODEwX01DMSAweDcxMjAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4MTBfSUcxIDB4NzEyMQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODEwX01DMyAweDcxMjIKICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjgxMF9JRzMgMHg3MTIzCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4MTBFX01DIDB4NzEyNAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjgxMEVfSUcgMHg3MTI1CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI0NDNMWF8wIDB4NzE4MAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyNDQzTFhfMSAweDcxODEKICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjQ0M0JYXzAgMHg3MTkwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyNDQzQlhfMSAweDcxOTEKICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjQ0M0JYXzIgMHg3MTkyCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfNDQwTVggMHg3MTk1CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfNDQwTVhfNiAweDcxOTYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI0NDNNWF8wIDB4NzE5OAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyNDQzTVhfMSAweDcxOTkKICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjQ0M01YXzMgMHg3MTliCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI0NDNHWF8wIDB4NzFhMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjQ0M0dYXzIgMHg3MWEyCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODIzNzJGQl8xIDB4NzYwMQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyNDU0R1ggMHg4NGM0CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI0NTBHWCAweDg0YzUKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI0NTFOWCAweDg0Y2EKICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjQ1NE5YIDB4ODRjYgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzg0NDYwR1ggMHg4NGVhCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfSVhQNFhYIDB4ODUwMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9JWFAyODAwIDB4OTAwNAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX1MyMTE1MkJCIDB4YjE1MgotCiAjZGVmaW5lIFBDSV9WRU5ET1JfSURfU0NBTEVNUCAweDg2ODYKICNkZWZpbmUgUENJX0RFVklDRV9JRF9TQ0FMRU1QX1ZTTVBfQ1RMIDB4MTAxMAotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfVkVORE9SX0lEX0NPTVBVVE9ORSAweDhlMGUKICNkZWZpbmUgUENJX0RFVklDRV9JRF9DT01QVVRPTkVfSVAyRVggMHgwMjkxCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQ09NUFVUT05FX1BHIDB4MDMwMgogI2RlZmluZSBQQ0lfU1VCVkVORE9SX0lEX0NPTVBVVE9ORSAweDhlMGUKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9TVUJERVZJQ0VfSURfQ09NUFVUT05FX1BHNCAweDAwMDEKICNkZWZpbmUgUENJX1NVQkRFVklDRV9JRF9DT01QVVRPTkVfUEc4IDB4MDAwMgogI2RlZmluZSBQQ0lfU1VCREVWSUNFX0lEX0NPTVBVVE9ORV9QRzYgMHgwMDAzCi0KICNkZWZpbmUgUENJX1ZFTkRPUl9JRF9LVEkgMHg4ZTJlCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9WRU5ET1JfSURfQURBUFRFQyAweDkwMDQKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BREFQVEVDXzc4MTAgMHgxMDc4CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQURBUFRFQ183ODIxIDB4MjE3OAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FEQVBURUNfMzg2MDIgMHgzODYwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FEQVBURUNfNzg1MCAweDUwNzgKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BREFQVEVDXzc4NTUgMHg1NTc4CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQURBUFRFQ18zODYwIDB4NjAzOAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FEQVBURUNfMTQ4MEEgMHg2MDc1CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FEQVBURUNfNzg2MCAweDYwNzgKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BREFQVEVDXzc4NjEgMHg2MTc4CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQURBUFRFQ183ODcwIDB4NzA3OAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FEQVBURUNfNzg3MSAweDcxNzgKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQURBUFRFQ183ODcyIDB4NzI3OAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FEQVBURUNfNzg3MyAweDczNzgKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BREFQVEVDXzc4NzQgMHg3NDc4CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQURBUFRFQ183ODk1IDB4Nzg5NQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0RFVklDRV9JRF9BREFQVEVDXzc4ODAgMHg4MDc4CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQURBUFRFQ183ODgxIDB4ODE3OAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FEQVBURUNfNzg4MiAweDgyNzgKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BREFQVEVDXzc4ODMgMHg4Mzc4CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FEQVBURUNfNzg4NCAweDg0NzgKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BREFQVEVDXzc4ODUgMHg4NTc4CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQURBUFRFQ183ODg2IDB4ODY3OAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FEQVBURUNfNzg4NyAweDg3NzgKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQURBUFRFQ183ODg4IDB4ODg3OAotCiAjZGVmaW5lIFBDSV9WRU5ET1JfSURfQURBUFRFQzIgMHg5MDA1CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQURBUFRFQzJfMjk0MFUyIDB4MDAxMAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FEQVBURUMyXzI5MzBVMiAweDAwMTEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQURBUFRFQzJfNzg5MEIgMHgwMDEzCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQURBUFRFQzJfNzg5MCAweDAwMWYKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BREFQVEVDMl8zOTQwVTIgMHgwMDUwCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQURBUFRFQzJfMzk1MFUyRCAweDAwNTEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQURBUFRFQzJfNzg5NiAweDAwNWYKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BREFQVEVDMl83ODkyQSAweDAwODAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BREFQVEVDMl83ODkyQiAweDAwODEKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BREFQVEVDMl83ODkyRCAweDAwODMKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQURBUFRFQzJfNzg5MlAgMHgwMDhmCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQURBUFRFQzJfNzg5OUEgMHgwMGMwCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQURBUFRFQzJfNzg5OUIgMHgwMGMxCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQURBUFRFQzJfNzg5OUQgMHgwMGMzCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FEQVBURUMyXzc4OTlQIDB4MDBjZgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FEQVBURUMyX09CU0lESUFOIDB4MDUwMAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FEQVBURUMyX1NDQU1QIDB4MDUwMwotCiAjZGVmaW5lIFBDSV9WRU5ET1JfSURfSE9MVEVLIDB4OTQxMgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0RFVklDRV9JRF9IT0xURUtfNjU2NSAweDY1NjUKLQogI2RlZmluZSBQQ0lfVkVORE9SX0lEX05FVE1PUyAweDk3MTAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9ORVRNT1NfOTcwNSAweDk3MDUKICNkZWZpbmUgUENJX0RFVklDRV9JRF9ORVRNT1NfOTcxNSAweDk3MTUKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTkVUTU9TXzk3MzUgMHg5NzM1CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTkVUTU9TXzk3NDUgMHg5NzQ1CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTkVUTU9TXzk3NTUgMHg5NzU1CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTkVUTU9TXzk4MDUgMHg5ODA1CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX05FVE1PU185ODE1IDB4OTgxNQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX05FVE1PU185ODM1IDB4OTgzNQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX05FVE1PU185ODQ1IDB4OTg0NQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX05FVE1PU185ODU1IDB4OTg1NQotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfU1VCVkVORE9SX0lEX0VYU1lTIDB4ZDg0ZAogI2RlZmluZSBQQ0lfU1VCREVWSUNFX0lEX0VYU1lTXzQwMTQgMHg0MDE0CiAjZGVmaW5lIFBDSV9TVUJERVZJQ0VfSURfRVhTWVNfNDA1NSAweDQwNTUKLQogI2RlZmluZSBQQ0lfVkVORE9SX0lEX1RJR0VSSkVUIDB4ZTE1OQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0RFVklDRV9JRF9USUdFUkpFVF8zMDAgMHgwMDAxCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElHRVJKRVRfMTAwIDB4MDAwMgotCiAjZGVmaW5lIFBDSV9WRU5ET1JfSURfVFRURUNIIDB4MDM1NwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RUVEVDSF9NQzMyMiAweDAwMEEKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX1ZFTkRPUl9JRF9YSUxJTlhfUk1FIDB4ZWE2MAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1JNRV9ESUdJMzIgMHg5ODk2CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUk1FX0RJR0kzMl9QUk8gMHg5ODk3CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUk1FX0RJR0kzMl84IDB4OTg5OAotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3BjaV9yZWdzLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvcGNpX3JlZ3MuaAppbmRleCA5M2EyMWJlLi43YTNmN2U2IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvcGNpX3JlZ3MuaAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvcGNpX3JlZ3MuaApAQCAtNyw0MTYgKzcsNDc3IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBMSU5VWF9QQ0lfUkVHU19ICiAjZGVmaW5lIExJTlVYX1BDSV9SRUdTX0gKLQotI2RlZmluZSBQQ0lfVkVORE9SX0lEIDB4MDAgIAotI2RlZmluZSBQQ0lfREVWSUNFX0lEIDB4MDIgIAotI2RlZmluZSBQQ0lfQ09NTUFORCAweDA0ICAKLSNkZWZpbmUgUENJX0NPTU1BTkRfSU8gMHgxICAKLSNkZWZpbmUgUENJX0NPTU1BTkRfTUVNT1JZIDB4MiAgCi0jZGVmaW5lIFBDSV9DT01NQU5EX01BU1RFUiAweDQgIAotI2RlZmluZSBQQ0lfQ09NTUFORF9TUEVDSUFMIDB4OCAgCi0jZGVmaW5lIFBDSV9DT01NQU5EX0lOVkFMSURBVEUgMHgxMCAgCi0jZGVmaW5lIFBDSV9DT01NQU5EX1ZHQV9QQUxFVFRFIDB4MjAgIAotI2RlZmluZSBQQ0lfQ09NTUFORF9QQVJJVFkgMHg0MCAgCi0jZGVmaW5lIFBDSV9DT01NQU5EX1dBSVQgMHg4MCAgCi0jZGVmaW5lIFBDSV9DT01NQU5EX1NFUlIgMHgxMDAgIAotI2RlZmluZSBQQ0lfQ09NTUFORF9GQVNUX0JBQ0sgMHgyMDAgIAotI2RlZmluZSBQQ0lfQ09NTUFORF9JTlRYX0RJU0FCTEUgMHg0MDAgIAotCi0jZGVmaW5lIFBDSV9TVEFUVVMgMHgwNiAgCi0jZGVmaW5lIFBDSV9TVEFUVVNfQ0FQX0xJU1QgMHgxMCAgCi0jZGVmaW5lIFBDSV9TVEFUVVNfNjZNSFogMHgyMCAgCi0jZGVmaW5lIFBDSV9TVEFUVVNfVURGIDB4NDAgIAotI2RlZmluZSBQQ0lfU1RBVFVTX0ZBU1RfQkFDSyAweDgwICAKLSNkZWZpbmUgUENJX1NUQVRVU19QQVJJVFkgMHgxMDAgIAotI2RlZmluZSBQQ0lfU1RBVFVTX0RFVlNFTF9NQVNLIDB4NjAwICAKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRCAweDAwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSUQgMHgwMgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgUENJX0NPTU1BTkQgMHgwNAorI2RlZmluZSBQQ0lfQ09NTUFORF9JTyAweDEKKyNkZWZpbmUgUENJX0NPTU1BTkRfTUVNT1JZIDB4MgorI2RlZmluZSBQQ0lfQ09NTUFORF9NQVNURVIgMHg0CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBQQ0lfQ09NTUFORF9TUEVDSUFMIDB4OAorI2RlZmluZSBQQ0lfQ09NTUFORF9JTlZBTElEQVRFIDB4MTAKKyNkZWZpbmUgUENJX0NPTU1BTkRfVkdBX1BBTEVUVEUgMHgyMAorI2RlZmluZSBQQ0lfQ09NTUFORF9QQVJJVFkgMHg0MAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgUENJX0NPTU1BTkRfV0FJVCAweDgwCisjZGVmaW5lIFBDSV9DT01NQU5EX1NFUlIgMHgxMDAKKyNkZWZpbmUgUENJX0NPTU1BTkRfRkFTVF9CQUNLIDB4MjAwCisjZGVmaW5lIFBDSV9DT01NQU5EX0lOVFhfRElTQUJMRSAweDQwMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgUENJX1NUQVRVUyAweDA2CisjZGVmaW5lIFBDSV9TVEFUVVNfQ0FQX0xJU1QgMHgxMAorI2RlZmluZSBQQ0lfU1RBVFVTXzY2TUhaIDB4MjAKKyNkZWZpbmUgUENJX1NUQVRVU19VREYgMHg0MAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgUENJX1NUQVRVU19GQVNUX0JBQ0sgMHg4MAorI2RlZmluZSBQQ0lfU1RBVFVTX1BBUklUWSAweDEwMAorI2RlZmluZSBQQ0lfU1RBVFVTX0RFVlNFTF9NQVNLIDB4NjAwCiAjZGVmaW5lIFBDSV9TVEFUVVNfREVWU0VMX0ZBU1QgMHgwMDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9TVEFUVVNfREVWU0VMX01FRElVTSAweDIwMAogI2RlZmluZSBQQ0lfU1RBVFVTX0RFVlNFTF9TTE9XIDB4NDAwCi0jZGVmaW5lIFBDSV9TVEFUVVNfU0lHX1RBUkdFVF9BQk9SVCAweDgwMCAgCi0jZGVmaW5lIFBDSV9TVEFUVVNfUkVDX1RBUkdFVF9BQk9SVCAweDEwMDAgIAotI2RlZmluZSBQQ0lfU1RBVFVTX1JFQ19NQVNURVJfQUJPUlQgMHgyMDAwICAKLSNkZWZpbmUgUENJX1NUQVRVU19TSUdfU1lTVEVNX0VSUk9SIDB4NDAwMCAgCi0jZGVmaW5lIFBDSV9TVEFUVVNfREVURUNURURfUEFSSVRZIDB4ODAwMCAgCi0KLSNkZWZpbmUgUENJX0NMQVNTX1JFVklTSU9OIDB4MDggIAotI2RlZmluZSBQQ0lfUkVWSVNJT05fSUQgMHgwOCAgCi0jZGVmaW5lIFBDSV9DTEFTU19QUk9HIDB4MDkgIAotI2RlZmluZSBQQ0lfQ0xBU1NfREVWSUNFIDB4MGEgIAotCi0jZGVmaW5lIFBDSV9DQUNIRV9MSU5FX1NJWkUgMHgwYyAgCi0jZGVmaW5lIFBDSV9MQVRFTkNZX1RJTUVSIDB4MGQgIAotI2RlZmluZSBQQ0lfSEVBREVSX1RZUEUgMHgwZSAgCisjZGVmaW5lIFBDSV9TVEFUVVNfU0lHX1RBUkdFVF9BQk9SVCAweDgwMAorI2RlZmluZSBQQ0lfU1RBVFVTX1JFQ19UQVJHRVRfQUJPUlQgMHgxMDAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBQQ0lfU1RBVFVTX1JFQ19NQVNURVJfQUJPUlQgMHgyMDAwCisjZGVmaW5lIFBDSV9TVEFUVVNfU0lHX1NZU1RFTV9FUlJPUiAweDQwMDAKKyNkZWZpbmUgUENJX1NUQVRVU19ERVRFQ1RFRF9QQVJJVFkgMHg4MDAwCisjZGVmaW5lIFBDSV9DTEFTU19SRVZJU0lPTiAweDA4CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBQQ0lfUkVWSVNJT05fSUQgMHgwOAorI2RlZmluZSBQQ0lfQ0xBU1NfUFJPRyAweDA5CisjZGVmaW5lIFBDSV9DTEFTU19ERVZJQ0UgMHgwYQorI2RlZmluZSBQQ0lfQ0FDSEVfTElORV9TSVpFIDB4MGMKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFBDSV9MQVRFTkNZX1RJTUVSIDB4MGQKKyNkZWZpbmUgUENJX0hFQURFUl9UWVBFIDB4MGUKICNkZWZpbmUgUENJX0hFQURFUl9UWVBFX05PUk1BTCAwCiAjZGVmaW5lIFBDSV9IRUFERVJfVFlQRV9CUklER0UgMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0hFQURFUl9UWVBFX0NBUkRCVVMgMgotCi0jZGVmaW5lIFBDSV9CSVNUIDB4MGYgIAotI2RlZmluZSBQQ0lfQklTVF9DT0RFX01BU0sgMHgwZiAgCi0jZGVmaW5lIFBDSV9CSVNUX1NUQVJUIDB4NDAgIAotI2RlZmluZSBQQ0lfQklTVF9DQVBBQkxFIDB4ODAgIAotCi0jZGVmaW5lIFBDSV9CQVNFX0FERFJFU1NfMCAweDEwICAKLSNkZWZpbmUgUENJX0JBU0VfQUREUkVTU18xIDB4MTQgIAotI2RlZmluZSBQQ0lfQkFTRV9BRERSRVNTXzIgMHgxOCAgCi0jZGVmaW5lIFBDSV9CQVNFX0FERFJFU1NfMyAweDFjICAKLSNkZWZpbmUgUENJX0JBU0VfQUREUkVTU180IDB4MjAgIAotI2RlZmluZSBQQ0lfQkFTRV9BRERSRVNTXzUgMHgyNCAgCi0jZGVmaW5lIFBDSV9CQVNFX0FERFJFU1NfU1BBQ0UgMHgwMSAgCisjZGVmaW5lIFBDSV9CSVNUIDB4MGYKKyNkZWZpbmUgUENJX0JJU1RfQ09ERV9NQVNLIDB4MGYKKyNkZWZpbmUgUENJX0JJU1RfU1RBUlQgMHg0MAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgUENJX0JJU1RfQ0FQQUJMRSAweDgwCisjZGVmaW5lIFBDSV9CQVNFX0FERFJFU1NfMCAweDEwCisjZGVmaW5lIFBDSV9CQVNFX0FERFJFU1NfMSAweDE0CisjZGVmaW5lIFBDSV9CQVNFX0FERFJFU1NfMiAweDE4CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBQQ0lfQkFTRV9BRERSRVNTXzMgMHgxYworI2RlZmluZSBQQ0lfQkFTRV9BRERSRVNTXzQgMHgyMAorI2RlZmluZSBQQ0lfQkFTRV9BRERSRVNTXzUgMHgyNAorI2RlZmluZSBQQ0lfQkFTRV9BRERSRVNTX1NQQUNFIDB4MDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9CQVNFX0FERFJFU1NfU1BBQ0VfSU8gMHgwMQogI2RlZmluZSBQQ0lfQkFTRV9BRERSRVNTX1NQQUNFX01FTU9SWSAweDAwCiAjZGVmaW5lIFBDSV9CQVNFX0FERFJFU1NfTUVNX1RZUEVfTUFTSyAweDA2Ci0jZGVmaW5lIFBDSV9CQVNFX0FERFJFU1NfTUVNX1RZUEVfMzIgMHgwMCAgCi0jZGVmaW5lIFBDSV9CQVNFX0FERFJFU1NfTUVNX1RZUEVfMU0gMHgwMiAgCi0jZGVmaW5lIFBDSV9CQVNFX0FERFJFU1NfTUVNX1RZUEVfNjQgMHgwNCAgCi0jZGVmaW5lIFBDSV9CQVNFX0FERFJFU1NfTUVNX1BSRUZFVENIIDB4MDggIAorI2RlZmluZSBQQ0lfQkFTRV9BRERSRVNTX01FTV9UWVBFXzMyIDB4MDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFBDSV9CQVNFX0FERFJFU1NfTUVNX1RZUEVfMU0gMHgwMgorI2RlZmluZSBQQ0lfQkFTRV9BRERSRVNTX01FTV9UWVBFXzY0IDB4MDQKKyNkZWZpbmUgUENJX0JBU0VfQUREUkVTU19NRU1fUFJFRkVUQ0ggMHgwOAogI2RlZmluZSBQQ0lfQkFTRV9BRERSRVNTX01FTV9NQVNLICh+MHgwZlVMKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0JBU0VfQUREUkVTU19JT19NQVNLICh+MHgwM1VMKQotCiAjZGVmaW5lIFBDSV9DQVJEQlVTX0NJUyAweDI4CiAjZGVmaW5lIFBDSV9TVUJTWVNURU1fVkVORE9SX0lEIDB4MmMKICNkZWZpbmUgUENJX1NVQlNZU1RFTV9JRCAweDJlCi0jZGVmaW5lIFBDSV9ST01fQUREUkVTUyAweDMwICAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFBDSV9ST01fQUREUkVTUyAweDMwCiAjZGVmaW5lIFBDSV9ST01fQUREUkVTU19FTkFCTEUgMHgwMQogI2RlZmluZSBQQ0lfUk9NX0FERFJFU1NfTUFTSyAofjB4N2ZmVUwpCi0KLSNkZWZpbmUgUENJX0NBUEFCSUxJVFlfTElTVCAweDM0ICAKLQotI2RlZmluZSBQQ0lfSU5URVJSVVBUX0xJTkUgMHgzYyAgCi0jZGVmaW5lIFBDSV9JTlRFUlJVUFRfUElOIDB4M2QgIAotI2RlZmluZSBQQ0lfTUlOX0dOVCAweDNlICAKLSNkZWZpbmUgUENJX01BWF9MQVQgMHgzZiAgCi0KLSNkZWZpbmUgUENJX1BSSU1BUllfQlVTIDB4MTggIAotI2RlZmluZSBQQ0lfU0VDT05EQVJZX0JVUyAweDE5ICAKLSNkZWZpbmUgUENJX1NVQk9SRElOQVRFX0JVUyAweDFhICAKLSNkZWZpbmUgUENJX1NFQ19MQVRFTkNZX1RJTUVSIDB4MWIgIAotI2RlZmluZSBQQ0lfSU9fQkFTRSAweDFjICAKKyNkZWZpbmUgUENJX0NBUEFCSUxJVFlfTElTVCAweDM0CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBQQ0lfSU5URVJSVVBUX0xJTkUgMHgzYworI2RlZmluZSBQQ0lfSU5URVJSVVBUX1BJTiAweDNkCisjZGVmaW5lIFBDSV9NSU5fR05UIDB4M2UKKyNkZWZpbmUgUENJX01BWF9MQVQgMHgzZgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgUENJX1BSSU1BUllfQlVTIDB4MTgKKyNkZWZpbmUgUENJX1NFQ09OREFSWV9CVVMgMHgxOQorI2RlZmluZSBQQ0lfU1VCT1JESU5BVEVfQlVTIDB4MWEKKyNkZWZpbmUgUENJX1NFQ19MQVRFTkNZX1RJTUVSIDB4MWIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFBDSV9JT19CQVNFIDB4MWMKICNkZWZpbmUgUENJX0lPX0xJTUlUIDB4MWQKLSNkZWZpbmUgUENJX0lPX1JBTkdFX1RZUEVfTUFTSyAweDBmVUwgIAorI2RlZmluZSBQQ0lfSU9fUkFOR0VfVFlQRV9NQVNLIDB4MGZVTAogI2RlZmluZSBQQ0lfSU9fUkFOR0VfVFlQRV8xNiAweDAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfSU9fUkFOR0VfVFlQRV8zMiAweDAxCiAjZGVmaW5lIFBDSV9JT19SQU5HRV9NQVNLICh+MHgwZlVMKQotI2RlZmluZSBQQ0lfU0VDX1NUQVRVUyAweDFlICAKLSNkZWZpbmUgUENJX01FTU9SWV9CQVNFIDB4MjAgIAorI2RlZmluZSBQQ0lfU0VDX1NUQVRVUyAweDFlCisjZGVmaW5lIFBDSV9NRU1PUllfQkFTRSAweDIwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfTUVNT1JZX0xJTUlUIDB4MjIKICNkZWZpbmUgUENJX01FTU9SWV9SQU5HRV9UWVBFX01BU0sgMHgwZlVMCiAjZGVmaW5lIFBDSV9NRU1PUllfUkFOR0VfTUFTSyAofjB4MGZVTCkKLSNkZWZpbmUgUENJX1BSRUZfTUVNT1JZX0JBU0UgMHgyNCAgCisjZGVmaW5lIFBDSV9QUkVGX01FTU9SWV9CQVNFIDB4MjQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9QUkVGX01FTU9SWV9MSU1JVCAweDI2CiAjZGVmaW5lIFBDSV9QUkVGX1JBTkdFX1RZUEVfTUFTSyAweDBmVUwKICNkZWZpbmUgUENJX1BSRUZfUkFOR0VfVFlQRV8zMiAweDAwCiAjZGVmaW5lIFBDSV9QUkVGX1JBTkdFX1RZUEVfNjQgMHgwMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX1BSRUZfUkFOR0VfTUFTSyAofjB4MGZVTCkKLSNkZWZpbmUgUENJX1BSRUZfQkFTRV9VUFBFUjMyIDB4MjggIAorI2RlZmluZSBQQ0lfUFJFRl9CQVNFX1VQUEVSMzIgMHgyOAogI2RlZmluZSBQQ0lfUFJFRl9MSU1JVF9VUFBFUjMyIDB4MmMKLSNkZWZpbmUgUENJX0lPX0JBU0VfVVBQRVIxNiAweDMwICAKKyNkZWZpbmUgUENJX0lPX0JBU0VfVVBQRVIxNiAweDMwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfSU9fTElNSVRfVVBQRVIxNiAweDMyCi0KLSNkZWZpbmUgUENJX1JPTV9BRERSRVNTMSAweDM4ICAKLQorI2RlZmluZSBQQ0lfUk9NX0FERFJFU1MxIDB4MzgKICNkZWZpbmUgUENJX0JSSURHRV9DT05UUk9MIDB4M2UKLSNkZWZpbmUgUENJX0JSSURHRV9DVExfUEFSSVRZIDB4MDEgIAotI2RlZmluZSBQQ0lfQlJJREdFX0NUTF9TRVJSIDB4MDIgIAotI2RlZmluZSBQQ0lfQlJJREdFX0NUTF9OT19JU0EgMHgwNCAgCi0jZGVmaW5lIFBDSV9CUklER0VfQ1RMX1ZHQSAweDA4ICAKLSNkZWZpbmUgUENJX0JSSURHRV9DVExfTUFTVEVSX0FCT1JUIDB4MjAgIAotI2RlZmluZSBQQ0lfQlJJREdFX0NUTF9CVVNfUkVTRVQgMHg0MCAgCi0jZGVmaW5lIFBDSV9CUklER0VfQ1RMX0ZBU1RfQkFDSyAweDgwICAKLQorI2RlZmluZSBQQ0lfQlJJREdFX0NUTF9QQVJJVFkgMHgwMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgUENJX0JSSURHRV9DVExfU0VSUiAweDAyCisjZGVmaW5lIFBDSV9CUklER0VfQ1RMX05PX0lTQSAweDA0CisjZGVmaW5lIFBDSV9CUklER0VfQ1RMX1ZHQSAweDA4CisjZGVmaW5lIFBDSV9CUklER0VfQ1RMX01BU1RFUl9BQk9SVCAweDIwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBQQ0lfQlJJREdFX0NUTF9CVVNfUkVTRVQgMHg0MAorI2RlZmluZSBQQ0lfQlJJREdFX0NUTF9GQVNUX0JBQ0sgMHg4MAogI2RlZmluZSBQQ0lfQ0JfQ0FQQUJJTElUWV9MSVNUIDB4MTQKLQotI2RlZmluZSBQQ0lfQ0JfU0VDX1NUQVRVUyAweDE2ICAKLSNkZWZpbmUgUENJX0NCX1BSSU1BUllfQlVTIDB4MTggIAotI2RlZmluZSBQQ0lfQ0JfQ0FSRF9CVVMgMHgxOSAgCi0jZGVmaW5lIFBDSV9DQl9TVUJPUkRJTkFURV9CVVMgMHgxYSAgCi0jZGVmaW5lIFBDSV9DQl9MQVRFTkNZX1RJTUVSIDB4MWIgIAorI2RlZmluZSBQQ0lfQ0JfU0VDX1NUQVRVUyAweDE2CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBQQ0lfQ0JfUFJJTUFSWV9CVVMgMHgxOAorI2RlZmluZSBQQ0lfQ0JfQ0FSRF9CVVMgMHgxOQorI2RlZmluZSBQQ0lfQ0JfU1VCT1JESU5BVEVfQlVTIDB4MWEKKyNkZWZpbmUgUENJX0NCX0xBVEVOQ1lfVElNRVIgMHgxYgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0NCX01FTU9SWV9CQVNFXzAgMHgxYwogI2RlZmluZSBQQ0lfQ0JfTUVNT1JZX0xJTUlUXzAgMHgyMAogI2RlZmluZSBQQ0lfQ0JfTUVNT1JZX0JBU0VfMSAweDI0CiAjZGVmaW5lIFBDSV9DQl9NRU1PUllfTElNSVRfMSAweDI4CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfQ0JfSU9fQkFTRV8wIDB4MmMKICNkZWZpbmUgUENJX0NCX0lPX0JBU0VfMF9ISSAweDJlCiAjZGVmaW5lIFBDSV9DQl9JT19MSU1JVF8wIDB4MzAKICNkZWZpbmUgUENJX0NCX0lPX0xJTUlUXzBfSEkgMHgzMgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX0NCX0lPX0JBU0VfMSAweDM0CiAjZGVmaW5lIFBDSV9DQl9JT19CQVNFXzFfSEkgMHgzNgogI2RlZmluZSBQQ0lfQ0JfSU9fTElNSVRfMSAweDM4CiAjZGVmaW5lIFBDSV9DQl9JT19MSU1JVF8xX0hJIDB4M2EKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9DQl9JT19SQU5HRV9NQVNLICh+MHgwM1VMKQotCiAjZGVmaW5lIFBDSV9DQl9CUklER0VfQ09OVFJPTCAweDNlCi0jZGVmaW5lIFBDSV9DQl9CUklER0VfQ1RMX1BBUklUWSAweDAxICAKKyNkZWZpbmUgUENJX0NCX0JSSURHRV9DVExfUEFSSVRZIDB4MDEKICNkZWZpbmUgUENJX0NCX0JSSURHRV9DVExfU0VSUiAweDAyCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfQ0JfQlJJREdFX0NUTF9JU0EgMHgwNAogI2RlZmluZSBQQ0lfQ0JfQlJJREdFX0NUTF9WR0EgMHgwOAogI2RlZmluZSBQQ0lfQ0JfQlJJREdFX0NUTF9NQVNURVJfQUJPUlQgMHgyMAotI2RlZmluZSBQQ0lfQ0JfQlJJREdFX0NUTF9DQl9SRVNFVCAweDQwICAKLSNkZWZpbmUgUENJX0NCX0JSSURHRV9DVExfMTZCSVRfSU5UIDB4ODAgIAotI2RlZmluZSBQQ0lfQ0JfQlJJREdFX0NUTF9QUkVGRVRDSF9NRU0wIDB4MTAwICAKKyNkZWZpbmUgUENJX0NCX0JSSURHRV9DVExfQ0JfUkVTRVQgMHg0MAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgUENJX0NCX0JSSURHRV9DVExfMTZCSVRfSU5UIDB4ODAKKyNkZWZpbmUgUENJX0NCX0JSSURHRV9DVExfUFJFRkVUQ0hfTUVNMCAweDEwMAogI2RlZmluZSBQQ0lfQ0JfQlJJREdFX0NUTF9QUkVGRVRDSF9NRU0xIDB4MjAwCiAjZGVmaW5lIFBDSV9DQl9CUklER0VfQ1RMX1BPU1RfV1JJVEVTIDB4NDAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfQ0JfU1VCU1lTVEVNX1ZFTkRPUl9JRCAweDQwCiAjZGVmaW5lIFBDSV9DQl9TVUJTWVNURU1fSUQgMHg0MgotI2RlZmluZSBQQ0lfQ0JfTEVHQUNZX01PREVfQkFTRSAweDQ0ICAKLQotI2RlZmluZSBQQ0lfQ0FQX0xJU1RfSUQgMCAgCi0jZGVmaW5lIFBDSV9DQVBfSURfUE0gMHgwMSAgCi0jZGVmaW5lIFBDSV9DQVBfSURfQUdQIDB4MDIgIAotI2RlZmluZSBQQ0lfQ0FQX0lEX1ZQRCAweDAzICAKLSNkZWZpbmUgUENJX0NBUF9JRF9TTE9USUQgMHgwNCAgCi0jZGVmaW5lIFBDSV9DQVBfSURfTVNJIDB4MDUgIAotI2RlZmluZSBQQ0lfQ0FQX0lEX0NIU1dQIDB4MDYgIAotI2RlZmluZSBQQ0lfQ0FQX0lEX1BDSVggMHgwNyAgCi0jZGVmaW5lIFBDSV9DQVBfSURfSFRfSVJRQ09ORiAweDA4ICAKLSNkZWZpbmUgUENJX0NBUF9JRF9WTkRSIDB4MDkgIAotI2RlZmluZSBQQ0lfQ0FQX0lEX1NIUEMgMHgwQyAgCi0jZGVmaW5lIFBDSV9DQVBfSURfRVhQIDB4MTAgIAotI2RlZmluZSBQQ0lfQ0FQX0lEX01TSVggMHgxMSAgCi0jZGVmaW5lIFBDSV9DQVBfTElTVF9ORVhUIDEgIAotI2RlZmluZSBQQ0lfQ0FQX0ZMQUdTIDIgIAorI2RlZmluZSBQQ0lfQ0JfTEVHQUNZX01PREVfQkFTRSAweDQ0CisjZGVmaW5lIFBDSV9DQVBfTElTVF9JRCAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBQQ0lfQ0FQX0lEX1BNIDB4MDEKKyNkZWZpbmUgUENJX0NBUF9JRF9BR1AgMHgwMgorI2RlZmluZSBQQ0lfQ0FQX0lEX1ZQRCAweDAzCisjZGVmaW5lIFBDSV9DQVBfSURfU0xPVElEIDB4MDQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFBDSV9DQVBfSURfTVNJIDB4MDUKKyNkZWZpbmUgUENJX0NBUF9JRF9DSFNXUCAweDA2CisjZGVmaW5lIFBDSV9DQVBfSURfUENJWCAweDA3CisjZGVmaW5lIFBDSV9DQVBfSURfSFRfSVJRQ09ORiAweDA4CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBQQ0lfQ0FQX0lEX1ZORFIgMHgwOQorI2RlZmluZSBQQ0lfQ0FQX0lEX1NIUEMgMHgwQworI2RlZmluZSBQQ0lfQ0FQX0lEX0VYUCAweDEwCisjZGVmaW5lIFBDSV9DQVBfSURfTVNJWCAweDExCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBQQ0lfQ0FQX0xJU1RfTkVYVCAxCisjZGVmaW5lIFBDSV9DQVBfRkxBR1MgMgogI2RlZmluZSBQQ0lfQ0FQX1NJWkVPRiA0Ci0KLSNkZWZpbmUgUENJX1BNX1BNQyAyICAKLSNkZWZpbmUgUENJX1BNX0NBUF9WRVJfTUFTSyAweDAwMDcgIAotI2RlZmluZSBQQ0lfUE1fQ0FQX1BNRV9DTE9DSyAweDAwMDggIAotI2RlZmluZSBQQ0lfUE1fQ0FQX1JFU0VSVkVEIDB4MDAxMCAgCi0jZGVmaW5lIFBDSV9QTV9DQVBfRFNJIDB4MDAyMCAgCi0jZGVmaW5lIFBDSV9QTV9DQVBfQVVYX1BPV0VSIDB4MDFDMCAgCi0jZGVmaW5lIFBDSV9QTV9DQVBfRDEgMHgwMjAwICAKLSNkZWZpbmUgUENJX1BNX0NBUF9EMiAweDA0MDAgIAotI2RlZmluZSBQQ0lfUE1fQ0FQX1BNRSAweDA4MDAgIAotI2RlZmluZSBQQ0lfUE1fQ0FQX1BNRV9NQVNLIDB4RjgwMCAgCi0jZGVmaW5lIFBDSV9QTV9DQVBfUE1FX0QwIDB4MDgwMCAgCi0jZGVmaW5lIFBDSV9QTV9DQVBfUE1FX0QxIDB4MTAwMCAgCi0jZGVmaW5lIFBDSV9QTV9DQVBfUE1FX0QyIDB4MjAwMCAgCi0jZGVmaW5lIFBDSV9QTV9DQVBfUE1FX0QzIDB4NDAwMCAgCi0jZGVmaW5lIFBDSV9QTV9DQVBfUE1FX0QzY29sZCAweDgwMDAgIAotI2RlZmluZSBQQ0lfUE1fQ1RSTCA0ICAKLSNkZWZpbmUgUENJX1BNX0NUUkxfU1RBVEVfTUFTSyAweDAwMDMgIAotI2RlZmluZSBQQ0lfUE1fQ1RSTF9OT19TT0ZUX1JFU0VUIDB4MDAwNCAgCi0jZGVmaW5lIFBDSV9QTV9DVFJMX1BNRV9FTkFCTEUgMHgwMTAwICAKLSNkZWZpbmUgUENJX1BNX0NUUkxfREFUQV9TRUxfTUFTSyAweDFlMDAgIAotI2RlZmluZSBQQ0lfUE1fQ1RSTF9EQVRBX1NDQUxFX01BU0sgMHg2MDAwICAKLSNkZWZpbmUgUENJX1BNX0NUUkxfUE1FX1NUQVRVUyAweDgwMDAgIAotI2RlZmluZSBQQ0lfUE1fUFBCX0VYVEVOU0lPTlMgNiAgCi0jZGVmaW5lIFBDSV9QTV9QUEJfQjJfQjMgMHg0MCAgCi0jZGVmaW5lIFBDSV9QTV9CUENDX0VOQUJMRSAweDgwICAKLSNkZWZpbmUgUENJX1BNX0RBVEFfUkVHSVNURVIgNyAgCisjZGVmaW5lIFBDSV9QTV9QTUMgMgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgUENJX1BNX0NBUF9WRVJfTUFTSyAweDAwMDcKKyNkZWZpbmUgUENJX1BNX0NBUF9QTUVfQ0xPQ0sgMHgwMDA4CisjZGVmaW5lIFBDSV9QTV9DQVBfUkVTRVJWRUQgMHgwMDEwCisjZGVmaW5lIFBDSV9QTV9DQVBfRFNJIDB4MDAyMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgUENJX1BNX0NBUF9BVVhfUE9XRVIgMHgwMUMwCisjZGVmaW5lIFBDSV9QTV9DQVBfRDEgMHgwMjAwCisjZGVmaW5lIFBDSV9QTV9DQVBfRDIgMHgwNDAwCisjZGVmaW5lIFBDSV9QTV9DQVBfUE1FIDB4MDgwMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgUENJX1BNX0NBUF9QTUVfTUFTSyAweEY4MDAKKyNkZWZpbmUgUENJX1BNX0NBUF9QTUVfRDAgMHgwODAwCisjZGVmaW5lIFBDSV9QTV9DQVBfUE1FX0QxIDB4MTAwMAorI2RlZmluZSBQQ0lfUE1fQ0FQX1BNRV9EMiAweDIwMDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFBDSV9QTV9DQVBfUE1FX0QzIDB4NDAwMAorI2RlZmluZSBQQ0lfUE1fQ0FQX1BNRV9EM2NvbGQgMHg4MDAwCisjZGVmaW5lIFBDSV9QTV9DVFJMIDQKKyNkZWZpbmUgUENJX1BNX0NUUkxfU1RBVEVfTUFTSyAweDAwMDMKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFBDSV9QTV9DVFJMX05PX1NPRlRfUkVTRVQgMHgwMDA0CisjZGVmaW5lIFBDSV9QTV9DVFJMX1BNRV9FTkFCTEUgMHgwMTAwCisjZGVmaW5lIFBDSV9QTV9DVFJMX0RBVEFfU0VMX01BU0sgMHgxZTAwCisjZGVmaW5lIFBDSV9QTV9DVFJMX0RBVEFfU0NBTEVfTUFTSyAweDYwMDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFBDSV9QTV9DVFJMX1BNRV9TVEFUVVMgMHg4MDAwCisjZGVmaW5lIFBDSV9QTV9QUEJfRVhURU5TSU9OUyA2CisjZGVmaW5lIFBDSV9QTV9QUEJfQjJfQjMgMHg0MAorI2RlZmluZSBQQ0lfUE1fQlBDQ19FTkFCTEUgMHg4MAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgUENJX1BNX0RBVEFfUkVHSVNURVIgNwogI2RlZmluZSBQQ0lfUE1fU0laRU9GIDgKLQotI2RlZmluZSBQQ0lfQUdQX1ZFUlNJT04gMiAgCi0jZGVmaW5lIFBDSV9BR1BfUkZVIDMgIAotI2RlZmluZSBQQ0lfQUdQX1NUQVRVUyA0ICAKLSNkZWZpbmUgUENJX0FHUF9TVEFUVVNfUlFfTUFTSyAweGZmMDAwMDAwICAKLSNkZWZpbmUgUENJX0FHUF9TVEFUVVNfU0JBIDB4MDIwMCAgCi0jZGVmaW5lIFBDSV9BR1BfU1RBVFVTXzY0QklUIDB4MDAyMCAgCi0jZGVmaW5lIFBDSV9BR1BfU1RBVFVTX0ZXIDB4MDAxMCAgCi0jZGVmaW5lIFBDSV9BR1BfU1RBVFVTX1JBVEU0IDB4MDAwNCAgCi0jZGVmaW5lIFBDSV9BR1BfU1RBVFVTX1JBVEUyIDB4MDAwMiAgCi0jZGVmaW5lIFBDSV9BR1BfU1RBVFVTX1JBVEUxIDB4MDAwMSAgCi0jZGVmaW5lIFBDSV9BR1BfQ09NTUFORCA4ICAKLSNkZWZpbmUgUENJX0FHUF9DT01NQU5EX1JRX01BU0sgMHhmZjAwMDAwMCAgCi0jZGVmaW5lIFBDSV9BR1BfQ09NTUFORF9TQkEgMHgwMjAwICAKLSNkZWZpbmUgUENJX0FHUF9DT01NQU5EX0FHUCAweDAxMDAgIAotI2RlZmluZSBQQ0lfQUdQX0NPTU1BTkRfNjRCSVQgMHgwMDIwICAKLSNkZWZpbmUgUENJX0FHUF9DT01NQU5EX0ZXIDB4MDAxMCAgCi0jZGVmaW5lIFBDSV9BR1BfQ09NTUFORF9SQVRFNCAweDAwMDQgIAotI2RlZmluZSBQQ0lfQUdQX0NPTU1BTkRfUkFURTIgMHgwMDAyICAKLSNkZWZpbmUgUENJX0FHUF9DT01NQU5EX1JBVEUxIDB4MDAwMSAgCisjZGVmaW5lIFBDSV9BR1BfVkVSU0lPTiAyCisjZGVmaW5lIFBDSV9BR1BfUkZVIDMKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFBDSV9BR1BfU1RBVFVTIDQKKyNkZWZpbmUgUENJX0FHUF9TVEFUVVNfUlFfTUFTSyAweGZmMDAwMDAwCisjZGVmaW5lIFBDSV9BR1BfU1RBVFVTX1NCQSAweDAyMDAKKyNkZWZpbmUgUENJX0FHUF9TVEFUVVNfNjRCSVQgMHgwMDIwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBQQ0lfQUdQX1NUQVRVU19GVyAweDAwMTAKKyNkZWZpbmUgUENJX0FHUF9TVEFUVVNfUkFURTQgMHgwMDA0CisjZGVmaW5lIFBDSV9BR1BfU1RBVFVTX1JBVEUyIDB4MDAwMgorI2RlZmluZSBQQ0lfQUdQX1NUQVRVU19SQVRFMSAweDAwMDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFBDSV9BR1BfQ09NTUFORCA4CisjZGVmaW5lIFBDSV9BR1BfQ09NTUFORF9SUV9NQVNLIDB4ZmYwMDAwMDAKKyNkZWZpbmUgUENJX0FHUF9DT01NQU5EX1NCQSAweDAyMDAKKyNkZWZpbmUgUENJX0FHUF9DT01NQU5EX0FHUCAweDAxMDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFBDSV9BR1BfQ09NTUFORF82NEJJVCAweDAwMjAKKyNkZWZpbmUgUENJX0FHUF9DT01NQU5EX0ZXIDB4MDAxMAorI2RlZmluZSBQQ0lfQUdQX0NPTU1BTkRfUkFURTQgMHgwMDA0CisjZGVmaW5lIFBDSV9BR1BfQ09NTUFORF9SQVRFMiAweDAwMDIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFBDSV9BR1BfQ09NTUFORF9SQVRFMSAweDAwMDEKICNkZWZpbmUgUENJX0FHUF9TSVpFT0YgMTIKLQotI2RlZmluZSBQQ0lfVlBEX0FERFIgMiAgCi0jZGVmaW5lIFBDSV9WUERfQUREUl9NQVNLIDB4N2ZmZiAgCi0jZGVmaW5lIFBDSV9WUERfQUREUl9GIDB4ODAwMCAgCi0jZGVmaW5lIFBDSV9WUERfREFUQSA0ICAKLQotI2RlZmluZSBQQ0lfU0lEX0VTUiAyICAKLSNkZWZpbmUgUENJX1NJRF9FU1JfTlNMT1RTIDB4MWYgIAotI2RlZmluZSBQQ0lfU0lEX0VTUl9GSUMgMHgyMCAgCi0jZGVmaW5lIFBDSV9TSURfQ0hBU1NJU19OUiAzICAKLQotI2RlZmluZSBQQ0lfTVNJX0ZMQUdTIDIgIAotI2RlZmluZSBQQ0lfTVNJX0ZMQUdTXzY0QklUIDB4ODAgIAotI2RlZmluZSBQQ0lfTVNJX0ZMQUdTX1FTSVpFIDB4NzAgIAotI2RlZmluZSBQQ0lfTVNJX0ZMQUdTX1FNQVNLIDB4MGUgIAotI2RlZmluZSBQQ0lfTVNJX0ZMQUdTX0VOQUJMRSAweDAxICAKLSNkZWZpbmUgUENJX01TSV9GTEFHU19NQVNLQklUIDB4MTAwICAKLSNkZWZpbmUgUENJX01TSV9SRlUgMyAgCi0jZGVmaW5lIFBDSV9NU0lfQUREUkVTU19MTyA0ICAKLSNkZWZpbmUgUENJX01TSV9BRERSRVNTX0hJIDggIAotI2RlZmluZSBQQ0lfTVNJX0RBVEFfMzIgOCAgCi0jZGVmaW5lIFBDSV9NU0lfREFUQV82NCAxMiAgCi0jZGVmaW5lIFBDSV9NU0lfTUFTS19CSVQgMTYgIAotCi0jZGVmaW5lIFBDSV9DSFNXUF9DU1IgMiAgCi0jZGVmaW5lIFBDSV9DSFNXUF9ESEEgMHgwMSAgCi0jZGVmaW5lIFBDSV9DSFNXUF9FSU0gMHgwMiAgCi0jZGVmaW5lIFBDSV9DSFNXUF9QSUUgMHgwNCAgCi0jZGVmaW5lIFBDSV9DSFNXUF9MT08gMHgwOCAgCi0jZGVmaW5lIFBDSV9DSFNXUF9QSSAweDMwICAKLSNkZWZpbmUgUENJX0NIU1dQX0VYVCAweDQwICAKLSNkZWZpbmUgUENJX0NIU1dQX0lOUyAweDgwICAKLQotI2RlZmluZSBQQ0lfWF9DTUQgMiAgCi0jZGVmaW5lIFBDSV9YX0NNRF9EUEVSUl9FIDB4MDAwMSAgCi0jZGVmaW5lIFBDSV9YX0NNRF9FUk8gMHgwMDAyICAKLSNkZWZpbmUgUENJX1hfQ01EX01BWF9SRUFEIDB4MDAwYyAgCi0jZGVmaW5lIFBDSV9YX0NNRF9NQVhfU1BMSVQgMHgwMDcwICAKLSNkZWZpbmUgUENJX1hfQ01EX1ZFUlNJT04oeCkgKCgoeCkgPj4gMTIpICYgMykgIAotI2RlZmluZSBQQ0lfWF9TVEFUVVMgNCAgCi0jZGVmaW5lIFBDSV9YX1NUQVRVU19ERVZGTiAweDAwMDAwMGZmICAKLSNkZWZpbmUgUENJX1hfU1RBVFVTX0JVUyAweDAwMDBmZjAwICAKLSNkZWZpbmUgUENJX1hfU1RBVFVTXzY0QklUIDB4MDAwMTAwMDAgIAotI2RlZmluZSBQQ0lfWF9TVEFUVVNfMTMzTUhaIDB4MDAwMjAwMDAgIAotI2RlZmluZSBQQ0lfWF9TVEFUVVNfU1BMX0RJU0MgMHgwMDA0MDAwMCAgCi0jZGVmaW5lIFBDSV9YX1NUQVRVU19VTlhfU1BMIDB4MDAwODAwMDAgIAotI2RlZmluZSBQQ0lfWF9TVEFUVVNfQ09NUExFWCAweDAwMTAwMDAwICAKLSNkZWZpbmUgUENJX1hfU1RBVFVTX01BWF9SRUFEIDB4MDA2MDAwMDAgIAotI2RlZmluZSBQQ0lfWF9TVEFUVVNfTUFYX1NQTElUIDB4MDM4MDAwMDAgIAotI2RlZmluZSBQQ0lfWF9TVEFUVVNfTUFYX0NVTSAweDFjMDAwMDAwICAKLSNkZWZpbmUgUENJX1hfU1RBVFVTX1NQTF9FUlIgMHgyMDAwMDAwMCAgCi0jZGVmaW5lIFBDSV9YX1NUQVRVU18yNjZNSFogMHg0MDAwMDAwMCAgCi0jZGVmaW5lIFBDSV9YX1NUQVRVU181MzNNSFogMHg4MDAwMDAwMCAgCi0KLSNkZWZpbmUgUENJX0VYUF9GTEFHUyAyICAKLSNkZWZpbmUgUENJX0VYUF9GTEFHU19WRVJTIDB4MDAwZiAgCi0jZGVmaW5lIFBDSV9FWFBfRkxBR1NfVFlQRSAweDAwZjAgIAotI2RlZmluZSBQQ0lfRVhQX1RZUEVfRU5EUE9JTlQgMHgwICAKLSNkZWZpbmUgUENJX0VYUF9UWVBFX0xFR19FTkQgMHgxICAKLSNkZWZpbmUgUENJX0VYUF9UWVBFX1JPT1RfUE9SVCAweDQgIAotI2RlZmluZSBQQ0lfRVhQX1RZUEVfVVBTVFJFQU0gMHg1ICAKLSNkZWZpbmUgUENJX0VYUF9UWVBFX0RPV05TVFJFQU0gMHg2ICAKLSNkZWZpbmUgUENJX0VYUF9UWVBFX1BDSV9CUklER0UgMHg3ICAKLSNkZWZpbmUgUENJX0VYUF9GTEFHU19TTE9UIDB4MDEwMCAgCi0jZGVmaW5lIFBDSV9FWFBfRkxBR1NfSVJRIDB4M2UwMCAgCi0jZGVmaW5lIFBDSV9FWFBfREVWQ0FQIDQgIAotI2RlZmluZSBQQ0lfRVhQX0RFVkNBUF9QQVlMT0FEIDB4MDcgIAotI2RlZmluZSBQQ0lfRVhQX0RFVkNBUF9QSEFOVE9NIDB4MTggIAotI2RlZmluZSBQQ0lfRVhQX0RFVkNBUF9FWFRfVEFHIDB4MjAgIAotI2RlZmluZSBQQ0lfRVhQX0RFVkNBUF9MMFMgMHgxYzAgIAotI2RlZmluZSBQQ0lfRVhQX0RFVkNBUF9MMSAweGUwMCAgCi0jZGVmaW5lIFBDSV9FWFBfREVWQ0FQX0FUTl9CVVQgMHgxMDAwICAKLSNkZWZpbmUgUENJX0VYUF9ERVZDQVBfQVROX0lORCAweDIwMDAgIAotI2RlZmluZSBQQ0lfRVhQX0RFVkNBUF9QV1JfSU5EIDB4NDAwMCAgCi0jZGVmaW5lIFBDSV9FWFBfREVWQ0FQX1BXUl9WQUwgMHgzZmMwMDAwICAKLSNkZWZpbmUgUENJX0VYUF9ERVZDQVBfUFdSX1NDTCAweGMwMDAwMDAgIAotI2RlZmluZSBQQ0lfRVhQX0RFVkNUTCA4ICAKLSNkZWZpbmUgUENJX0VYUF9ERVZDVExfQ0VSRSAweDAwMDEgIAotI2RlZmluZSBQQ0lfRVhQX0RFVkNUTF9ORkVSRSAweDAwMDIgIAotI2RlZmluZSBQQ0lfRVhQX0RFVkNUTF9GRVJFIDB4MDAwNCAgCi0jZGVmaW5lIFBDSV9FWFBfREVWQ1RMX1VSUkUgMHgwMDA4ICAKLSNkZWZpbmUgUENJX0VYUF9ERVZDVExfUkVMQVhfRU4gMHgwMDEwICAKLSNkZWZpbmUgUENJX0VYUF9ERVZDVExfUEFZTE9BRCAweDAwZTAgIAotI2RlZmluZSBQQ0lfRVhQX0RFVkNUTF9FWFRfVEFHIDB4MDEwMCAgCi0jZGVmaW5lIFBDSV9FWFBfREVWQ1RMX1BIQU5UT00gMHgwMjAwICAKLSNkZWZpbmUgUENJX0VYUF9ERVZDVExfQVVYX1BNRSAweDA0MDAgIAotI2RlZmluZSBQQ0lfRVhQX0RFVkNUTF9OT1NOT09QX0VOIDB4MDgwMCAgCi0jZGVmaW5lIFBDSV9FWFBfREVWQ1RMX1JFQURSUSAweDcwMDAgIAotI2RlZmluZSBQQ0lfRVhQX0RFVlNUQSAxMCAgCi0jZGVmaW5lIFBDSV9FWFBfREVWU1RBX0NFRCAweDAxICAKLSNkZWZpbmUgUENJX0VYUF9ERVZTVEFfTkZFRCAweDAyICAKLSNkZWZpbmUgUENJX0VYUF9ERVZTVEFfRkVEIDB4MDQgIAotI2RlZmluZSBQQ0lfRVhQX0RFVlNUQV9VUkQgMHgwOCAgCi0jZGVmaW5lIFBDSV9FWFBfREVWU1RBX0FVWFBEIDB4MTAgIAotI2RlZmluZSBQQ0lfRVhQX0RFVlNUQV9UUlBORCAweDIwICAKLSNkZWZpbmUgUENJX0VYUF9MTktDQVAgMTIgIAotI2RlZmluZSBQQ0lfRVhQX0xOS0NUTCAxNiAgCi0jZGVmaW5lIFBDSV9FWFBfTE5LU1RBIDE4ICAKLSNkZWZpbmUgUENJX0VYUF9TTFRDQVAgMjAgIAotI2RlZmluZSBQQ0lfRVhQX1NMVENUTCAyNCAgCi0jZGVmaW5lIFBDSV9FWFBfU0xUU1RBIDI2ICAKLSNkZWZpbmUgUENJX0VYUF9SVENUTCAyOCAgCi0jZGVmaW5lIFBDSV9FWFBfUlRDVExfU0VDRUUgMHgwMSAgCi0jZGVmaW5lIFBDSV9FWFBfUlRDVExfU0VORkVFIDB4MDIgIAotI2RlZmluZSBQQ0lfRVhQX1JUQ1RMX1NFRkVFIDB4MDQgIAotI2RlZmluZSBQQ0lfRVhQX1JUQ1RMX1BNRUlFIDB4MDggIAotI2RlZmluZSBQQ0lfRVhQX1JUQ1RMX0NSU1NWRSAweDEwICAKLSNkZWZpbmUgUENJX0VYUF9SVENBUCAzMCAgCi0jZGVmaW5lIFBDSV9FWFBfUlRTVEEgMzIgIAotCisjZGVmaW5lIFBDSV9WUERfQUREUiAyCisjZGVmaW5lIFBDSV9WUERfQUREUl9NQVNLIDB4N2ZmZgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgUENJX1ZQRF9BRERSX0YgMHg4MDAwCisjZGVmaW5lIFBDSV9WUERfREFUQSA0CisjZGVmaW5lIFBDSV9TSURfRVNSIDIKKyNkZWZpbmUgUENJX1NJRF9FU1JfTlNMT1RTIDB4MWYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFBDSV9TSURfRVNSX0ZJQyAweDIwCisjZGVmaW5lIFBDSV9TSURfQ0hBU1NJU19OUiAzCisjZGVmaW5lIFBDSV9NU0lfRkxBR1MgMgorI2RlZmluZSBQQ0lfTVNJX0ZMQUdTXzY0QklUIDB4ODAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFBDSV9NU0lfRkxBR1NfUVNJWkUgMHg3MAorI2RlZmluZSBQQ0lfTVNJX0ZMQUdTX1FNQVNLIDB4MGUKKyNkZWZpbmUgUENJX01TSV9GTEFHU19FTkFCTEUgMHgwMQorI2RlZmluZSBQQ0lfTVNJX0ZMQUdTX01BU0tCSVQgMHgxMDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFBDSV9NU0lfUkZVIDMKKyNkZWZpbmUgUENJX01TSV9BRERSRVNTX0xPIDQKKyNkZWZpbmUgUENJX01TSV9BRERSRVNTX0hJIDgKKyNkZWZpbmUgUENJX01TSV9EQVRBXzMyIDgKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFBDSV9NU0lfREFUQV82NCAxMgorI2RlZmluZSBQQ0lfTVNJX01BU0tfQklUIDE2CisjZGVmaW5lIFBDSV9DSFNXUF9DU1IgMgorI2RlZmluZSBQQ0lfQ0hTV1BfREhBIDB4MDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFBDSV9DSFNXUF9FSU0gMHgwMgorI2RlZmluZSBQQ0lfQ0hTV1BfUElFIDB4MDQKKyNkZWZpbmUgUENJX0NIU1dQX0xPTyAweDA4CisjZGVmaW5lIFBDSV9DSFNXUF9QSSAweDMwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBQQ0lfQ0hTV1BfRVhUIDB4NDAKKyNkZWZpbmUgUENJX0NIU1dQX0lOUyAweDgwCisjZGVmaW5lIFBDSV9YX0NNRCAyCisjZGVmaW5lIFBDSV9YX0NNRF9EUEVSUl9FIDB4MDAwMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgUENJX1hfQ01EX0VSTyAweDAwMDIKKyNkZWZpbmUgUENJX1hfQ01EX01BWF9SRUFEIDB4MDAwYworI2RlZmluZSBQQ0lfWF9DTURfTUFYX1NQTElUIDB4MDA3MAorI2RlZmluZSBQQ0lfWF9DTURfVkVSU0lPTih4KSAoKCh4KSA+PiAxMikgJiAzKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgUENJX1hfU1RBVFVTIDQKKyNkZWZpbmUgUENJX1hfU1RBVFVTX0RFVkZOIDB4MDAwMDAwZmYKKyNkZWZpbmUgUENJX1hfU1RBVFVTX0JVUyAweDAwMDBmZjAwCisjZGVmaW5lIFBDSV9YX1NUQVRVU182NEJJVCAweDAwMDEwMDAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBQQ0lfWF9TVEFUVVNfMTMzTUhaIDB4MDAwMjAwMDAKKyNkZWZpbmUgUENJX1hfU1RBVFVTX1NQTF9ESVNDIDB4MDAwNDAwMDAKKyNkZWZpbmUgUENJX1hfU1RBVFVTX1VOWF9TUEwgMHgwMDA4MDAwMAorI2RlZmluZSBQQ0lfWF9TVEFUVVNfQ09NUExFWCAweDAwMTAwMDAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBQQ0lfWF9TVEFUVVNfTUFYX1JFQUQgMHgwMDYwMDAwMAorI2RlZmluZSBQQ0lfWF9TVEFUVVNfTUFYX1NQTElUIDB4MDM4MDAwMDAKKyNkZWZpbmUgUENJX1hfU1RBVFVTX01BWF9DVU0gMHgxYzAwMDAwMAorI2RlZmluZSBQQ0lfWF9TVEFUVVNfU1BMX0VSUiAweDIwMDAwMDAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBQQ0lfWF9TVEFUVVNfMjY2TUhaIDB4NDAwMDAwMDAKKyNkZWZpbmUgUENJX1hfU1RBVFVTXzUzM01IWiAweDgwMDAwMDAwCisjZGVmaW5lIFBDSV9FWFBfRkxBR1MgMgorI2RlZmluZSBQQ0lfRVhQX0ZMQUdTX1ZFUlMgMHgwMDBmCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBQQ0lfRVhQX0ZMQUdTX1RZUEUgMHgwMGYwCisjZGVmaW5lIFBDSV9FWFBfVFlQRV9FTkRQT0lOVCAweDAKKyNkZWZpbmUgUENJX0VYUF9UWVBFX0xFR19FTkQgMHgxCisjZGVmaW5lIFBDSV9FWFBfVFlQRV9ST09UX1BPUlQgMHg0CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBQQ0lfRVhQX1RZUEVfVVBTVFJFQU0gMHg1CisjZGVmaW5lIFBDSV9FWFBfVFlQRV9ET1dOU1RSRUFNIDB4NgorI2RlZmluZSBQQ0lfRVhQX1RZUEVfUENJX0JSSURHRSAweDcKKyNkZWZpbmUgUENJX0VYUF9GTEFHU19TTE9UIDB4MDEwMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgUENJX0VYUF9GTEFHU19JUlEgMHgzZTAwCisjZGVmaW5lIFBDSV9FWFBfREVWQ0FQIDQKKyNkZWZpbmUgUENJX0VYUF9ERVZDQVBfUEFZTE9BRCAweDA3CisjZGVmaW5lIFBDSV9FWFBfREVWQ0FQX1BIQU5UT00gMHgxOAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgUENJX0VYUF9ERVZDQVBfRVhUX1RBRyAweDIwCisjZGVmaW5lIFBDSV9FWFBfREVWQ0FQX0wwUyAweDFjMAorI2RlZmluZSBQQ0lfRVhQX0RFVkNBUF9MMSAweGUwMAorI2RlZmluZSBQQ0lfRVhQX0RFVkNBUF9BVE5fQlVUIDB4MTAwMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgUENJX0VYUF9ERVZDQVBfQVROX0lORCAweDIwMDAKKyNkZWZpbmUgUENJX0VYUF9ERVZDQVBfUFdSX0lORCAweDQwMDAKKyNkZWZpbmUgUENJX0VYUF9ERVZDQVBfUFdSX1ZBTCAweDNmYzAwMDAKKyNkZWZpbmUgUENJX0VYUF9ERVZDQVBfUFdSX1NDTCAweGMwMDAwMDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFBDSV9FWFBfREVWQ1RMIDgKKyNkZWZpbmUgUENJX0VYUF9ERVZDVExfQ0VSRSAweDAwMDEKKyNkZWZpbmUgUENJX0VYUF9ERVZDVExfTkZFUkUgMHgwMDAyCisjZGVmaW5lIFBDSV9FWFBfREVWQ1RMX0ZFUkUgMHgwMDA0CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBQQ0lfRVhQX0RFVkNUTF9VUlJFIDB4MDAwOAorI2RlZmluZSBQQ0lfRVhQX0RFVkNUTF9SRUxBWF9FTiAweDAwMTAKKyNkZWZpbmUgUENJX0VYUF9ERVZDVExfUEFZTE9BRCAweDAwZTAKKyNkZWZpbmUgUENJX0VYUF9ERVZDVExfRVhUX1RBRyAweDAxMDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFBDSV9FWFBfREVWQ1RMX1BIQU5UT00gMHgwMjAwCisjZGVmaW5lIFBDSV9FWFBfREVWQ1RMX0FVWF9QTUUgMHgwNDAwCisjZGVmaW5lIFBDSV9FWFBfREVWQ1RMX05PU05PT1BfRU4gMHgwODAwCisjZGVmaW5lIFBDSV9FWFBfREVWQ1RMX1JFQURSUSAweDcwMDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFBDSV9FWFBfREVWU1RBIDEwCisjZGVmaW5lIFBDSV9FWFBfREVWU1RBX0NFRCAweDAxCisjZGVmaW5lIFBDSV9FWFBfREVWU1RBX05GRUQgMHgwMgorI2RlZmluZSBQQ0lfRVhQX0RFVlNUQV9GRUQgMHgwNAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgUENJX0VYUF9ERVZTVEFfVVJEIDB4MDgKKyNkZWZpbmUgUENJX0VYUF9ERVZTVEFfQVVYUEQgMHgxMAorI2RlZmluZSBQQ0lfRVhQX0RFVlNUQV9UUlBORCAweDIwCisjZGVmaW5lIFBDSV9FWFBfTE5LQ0FQIDEyCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBQQ0lfRVhQX0xOS0NUTCAxNgorI2RlZmluZSBQQ0lfRVhQX0xOS1NUQSAxOAorI2RlZmluZSBQQ0lfRVhQX1NMVENBUCAyMAorI2RlZmluZSBQQ0lfRVhQX1NMVENUTCAyNAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgUENJX0VYUF9TTFRTVEEgMjYKKyNkZWZpbmUgUENJX0VYUF9SVENUTCAyOAorI2RlZmluZSBQQ0lfRVhQX1JUQ1RMX1NFQ0VFIDB4MDEKKyNkZWZpbmUgUENJX0VYUF9SVENUTF9TRU5GRUUgMHgwMgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgUENJX0VYUF9SVENUTF9TRUZFRSAweDA0CisjZGVmaW5lIFBDSV9FWFBfUlRDVExfUE1FSUUgMHgwOAorI2RlZmluZSBQQ0lfRVhQX1JUQ1RMX0NSU1NWRSAweDEwCisjZGVmaW5lIFBDSV9FWFBfUlRDQVAgMzAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFBDSV9FWFBfUlRTVEEgMzIKICNkZWZpbmUgUENJX0VYVF9DQVBfSUQoaGVhZGVyKSAoaGVhZGVyICYgMHgwMDAwZmZmZikKICNkZWZpbmUgUENJX0VYVF9DQVBfVkVSKGhlYWRlcikgKChoZWFkZXIgPj4gMTYpICYgMHhmKQogI2RlZmluZSBQQ0lfRVhUX0NBUF9ORVhUKGhlYWRlcikgKChoZWFkZXIgPj4gMjApICYgMHhmZmMpCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDSV9FWFRfQ0FQX0lEX0VSUiAxCiAjZGVmaW5lIFBDSV9FWFRfQ0FQX0lEX1ZDIDIKICNkZWZpbmUgUENJX0VYVF9DQVBfSURfRFNOIDMKICNkZWZpbmUgUENJX0VYVF9DQVBfSURfUFdSIDQKLQotI2RlZmluZSBQQ0lfRVJSX1VOQ09SX1NUQVRVUyA0ICAKLSNkZWZpbmUgUENJX0VSUl9VTkNfVFJBSU4gMHgwMDAwMDAwMSAgCi0jZGVmaW5lIFBDSV9FUlJfVU5DX0RMUCAweDAwMDAwMDEwICAKLSNkZWZpbmUgUENJX0VSUl9VTkNfUE9JU09OX1RMUCAweDAwMDAxMDAwICAKLSNkZWZpbmUgUENJX0VSUl9VTkNfRkNQIDB4MDAwMDIwMDAgIAotI2RlZmluZSBQQ0lfRVJSX1VOQ19DT01QX1RJTUUgMHgwMDAwNDAwMCAgCi0jZGVmaW5lIFBDSV9FUlJfVU5DX0NPTVBfQUJPUlQgMHgwMDAwODAwMCAgCi0jZGVmaW5lIFBDSV9FUlJfVU5DX1VOWF9DT01QIDB4MDAwMTAwMDAgIAotI2RlZmluZSBQQ0lfRVJSX1VOQ19SWF9PVkVSIDB4MDAwMjAwMDAgIAotI2RlZmluZSBQQ0lfRVJSX1VOQ19NQUxGX1RMUCAweDAwMDQwMDAwICAKLSNkZWZpbmUgUENJX0VSUl9VTkNfRUNSQyAweDAwMDgwMDAwICAKLSNkZWZpbmUgUENJX0VSUl9VTkNfVU5TVVAgMHgwMDEwMDAwMCAgCi0jZGVmaW5lIFBDSV9FUlJfVU5DT1JfTUFTSyA4ICAKLQotI2RlZmluZSBQQ0lfRVJSX1VOQ09SX1NFVkVSIDEyICAKLQotI2RlZmluZSBQQ0lfRVJSX0NPUl9TVEFUVVMgMTYgIAotI2RlZmluZSBQQ0lfRVJSX0NPUl9SQ1ZSIDB4MDAwMDAwMDEgIAotI2RlZmluZSBQQ0lfRVJSX0NPUl9CQURfVExQIDB4MDAwMDAwNDAgIAotI2RlZmluZSBQQ0lfRVJSX0NPUl9CQURfRExMUCAweDAwMDAwMDgwICAKLSNkZWZpbmUgUENJX0VSUl9DT1JfUkVQX1JPTEwgMHgwMDAwMDEwMCAgCi0jZGVmaW5lIFBDSV9FUlJfQ09SX1JFUF9USU1FUiAweDAwMDAxMDAwICAKLSNkZWZpbmUgUENJX0VSUl9DT1JfTUFTSyAyMCAgCi0KLSNkZWZpbmUgUENJX0VSUl9DQVAgMjQgIAotI2RlZmluZSBQQ0lfRVJSX0NBUF9GRVAoeCkgKCh4KSAmIDMxKSAgCi0jZGVmaW5lIFBDSV9FUlJfQ0FQX0VDUkNfR0VOQyAweDAwMDAwMDIwICAKLSNkZWZpbmUgUENJX0VSUl9DQVBfRUNSQ19HRU5FIDB4MDAwMDAwNDAgIAotI2RlZmluZSBQQ0lfRVJSX0NBUF9FQ1JDX0NIS0MgMHgwMDAwMDA4MCAgCi0jZGVmaW5lIFBDSV9FUlJfQ0FQX0VDUkNfQ0hLRSAweDAwMDAwMTAwICAKLSNkZWZpbmUgUENJX0VSUl9IRUFERVJfTE9HIDI4ICAKLSNkZWZpbmUgUENJX0VSUl9ST09UX0NPTU1BTkQgNDQgIAotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBQQ0lfRVJSX1VOQ09SX1NUQVRVUyA0CisjZGVmaW5lIFBDSV9FUlJfVU5DX1RSQUlOIDB4MDAwMDAwMDEKKyNkZWZpbmUgUENJX0VSUl9VTkNfRExQIDB4MDAwMDAwMTAKKyNkZWZpbmUgUENJX0VSUl9VTkNfUE9JU09OX1RMUCAweDAwMDAxMDAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBQQ0lfRVJSX1VOQ19GQ1AgMHgwMDAwMjAwMAorI2RlZmluZSBQQ0lfRVJSX1VOQ19DT01QX1RJTUUgMHgwMDAwNDAwMAorI2RlZmluZSBQQ0lfRVJSX1VOQ19DT01QX0FCT1JUIDB4MDAwMDgwMDAKKyNkZWZpbmUgUENJX0VSUl9VTkNfVU5YX0NPTVAgMHgwMDAxMDAwMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgUENJX0VSUl9VTkNfUlhfT1ZFUiAweDAwMDIwMDAwCisjZGVmaW5lIFBDSV9FUlJfVU5DX01BTEZfVExQIDB4MDAwNDAwMDAKKyNkZWZpbmUgUENJX0VSUl9VTkNfRUNSQyAweDAwMDgwMDAwCisjZGVmaW5lIFBDSV9FUlJfVU5DX1VOU1VQIDB4MDAxMDAwMDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFBDSV9FUlJfVU5DT1JfTUFTSyA4CisjZGVmaW5lIFBDSV9FUlJfVU5DT1JfU0VWRVIgMTIKKyNkZWZpbmUgUENJX0VSUl9DT1JfU1RBVFVTIDE2CisjZGVmaW5lIFBDSV9FUlJfQ09SX1JDVlIgMHgwMDAwMDAwMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgUENJX0VSUl9DT1JfQkFEX1RMUCAweDAwMDAwMDQwCisjZGVmaW5lIFBDSV9FUlJfQ09SX0JBRF9ETExQIDB4MDAwMDAwODAKKyNkZWZpbmUgUENJX0VSUl9DT1JfUkVQX1JPTEwgMHgwMDAwMDEwMAorI2RlZmluZSBQQ0lfRVJSX0NPUl9SRVBfVElNRVIgMHgwMDAwMTAwMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgUENJX0VSUl9DT1JfTUFTSyAyMAorI2RlZmluZSBQQ0lfRVJSX0NBUCAyNAorI2RlZmluZSBQQ0lfRVJSX0NBUF9GRVAoeCkgKCh4KSAmIDMxKQorI2RlZmluZSBQQ0lfRVJSX0NBUF9FQ1JDX0dFTkMgMHgwMDAwMDAyMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgUENJX0VSUl9DQVBfRUNSQ19HRU5FIDB4MDAwMDAwNDAKKyNkZWZpbmUgUENJX0VSUl9DQVBfRUNSQ19DSEtDIDB4MDAwMDAwODAKKyNkZWZpbmUgUENJX0VSUl9DQVBfRUNSQ19DSEtFIDB4MDAwMDAxMDAKKyNkZWZpbmUgUENJX0VSUl9IRUFERVJfTE9HIDI4CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBQQ0lfRVJSX1JPT1RfQ09NTUFORCA0NAogI2RlZmluZSBQQ0lfRVJSX1JPT1RfQ01EX0NPUl9FTiAweDAwMDAwMDAxCi0KICNkZWZpbmUgUENJX0VSUl9ST09UX0NNRF9OT05GQVRBTF9FTiAweDAwMDAwMDAyCi0KICNkZWZpbmUgUENJX0VSUl9ST09UX0NNRF9GQVRBTF9FTiAweDAwMDAwMDA0CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfRVJSX1JPT1RfU1RBVFVTIDQ4Ci0jZGVmaW5lIFBDSV9FUlJfUk9PVF9DT1JfUkNWIDB4MDAwMDAwMDEgIAotCisjZGVmaW5lIFBDSV9FUlJfUk9PVF9DT1JfUkNWIDB4MDAwMDAwMDEKICNkZWZpbmUgUENJX0VSUl9ST09UX01VTFRJX0NPUl9SQ1YgMHgwMDAwMDAwMgotCiAjZGVmaW5lIFBDSV9FUlJfUk9PVF9VTkNPUl9SQ1YgMHgwMDAwMDAwNAotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfRVJSX1JPT1RfTVVMVElfVU5DT1JfUkNWIDB4MDAwMDAwMDgKLSNkZWZpbmUgUENJX0VSUl9ST09UX0ZJUlNUX0ZBVEFMIDB4MDAwMDAwMTAgIAotI2RlZmluZSBQQ0lfRVJSX1JPT1RfTk9ORkFUQUxfUkNWIDB4MDAwMDAwMjAgIAotI2RlZmluZSBQQ0lfRVJSX1JPT1RfRkFUQUxfUkNWIDB4MDAwMDAwNDAgIAorI2RlZmluZSBQQ0lfRVJSX1JPT1RfRklSU1RfRkFUQUwgMHgwMDAwMDAxMAorI2RlZmluZSBQQ0lfRVJSX1JPT1RfTk9ORkFUQUxfUkNWIDB4MDAwMDAwMjAKKyNkZWZpbmUgUENJX0VSUl9ST09UX0ZBVEFMX1JDViAweDAwMDAwMDQwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfRVJSX1JPT1RfQ09SX1NSQyA1MgogI2RlZmluZSBQQ0lfRVJSX1JPT1RfU1JDIDU0Ci0KICNkZWZpbmUgUENJX1ZDX1BPUlRfUkVHMSA0CiAjZGVmaW5lIFBDSV9WQ19QT1JUX1JFRzIgOAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUENJX1ZDX1BPUlRfQ1RSTCAxMgogI2RlZmluZSBQQ0lfVkNfUE9SVF9TVEFUVVMgMTQKICNkZWZpbmUgUENJX1ZDX1JFU19DQVAgMTYKICNkZWZpbmUgUENJX1ZDX1JFU19DVFJMIDIwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQQ0lfVkNfUkVTX1NUQVRVUyAyNgotCi0jZGVmaW5lIFBDSV9QV1JfRFNSIDQgIAotI2RlZmluZSBQQ0lfUFdSX0RBVEEgOCAgCi0jZGVmaW5lIFBDSV9QV1JfREFUQV9CQVNFKHgpICgoeCkgJiAweGZmKSAgCi0jZGVmaW5lIFBDSV9QV1JfREFUQV9TQ0FMRSh4KSAoKCh4KSA+PiA4KSAmIDMpICAKLSNkZWZpbmUgUENJX1BXUl9EQVRBX1BNX1NVQih4KSAoKCh4KSA+PiAxMCkgJiA3KSAgCi0jZGVmaW5lIFBDSV9QV1JfREFUQV9QTV9TVEFURSh4KSAoKCh4KSA+PiAxMykgJiAzKSAgCi0jZGVmaW5lIFBDSV9QV1JfREFUQV9UWVBFKHgpICgoKHgpID4+IDE1KSAmIDcpICAKLSNkZWZpbmUgUENJX1BXUl9EQVRBX1JBSUwoeCkgKCgoeCkgPj4gMTgpICYgNykgIAotI2RlZmluZSBQQ0lfUFdSX0NBUCAxMiAgCi0jZGVmaW5lIFBDSV9QV1JfQ0FQX0JVREdFVCh4KSAoKHgpICYgMSkgIAotCisjZGVmaW5lIFBDSV9QV1JfRFNSIDQKKyNkZWZpbmUgUENJX1BXUl9EQVRBIDgKKyNkZWZpbmUgUENJX1BXUl9EQVRBX0JBU0UoeCkgKCh4KSAmIDB4ZmYpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBQQ0lfUFdSX0RBVEFfU0NBTEUoeCkgKCgoeCkgPj4gOCkgJiAzKQorI2RlZmluZSBQQ0lfUFdSX0RBVEFfUE1fU1VCKHgpICgoKHgpID4+IDEwKSAmIDcpCisjZGVmaW5lIFBDSV9QV1JfREFUQV9QTV9TVEFURSh4KSAoKCh4KSA+PiAxMykgJiAzKQorI2RlZmluZSBQQ0lfUFdSX0RBVEFfVFlQRSh4KSAoKCh4KSA+PiAxNSkgJiA3KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgUENJX1BXUl9EQVRBX1JBSUwoeCkgKCgoeCkgPj4gMTgpICYgNykKKyNkZWZpbmUgUENJX1BXUl9DQVAgMTIKKyNkZWZpbmUgUENJX1BXUl9DQVBfQlVER0VUKHgpICgoeCkgJiAxKQogI2VuZGlmCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3BlcmNwdS5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3BlcmNwdS5oCmluZGV4IGMxOTU2MTYuLjkyYzBiNmUgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9wZXJjcHUuaAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvcGVyY3B1LmgKQEAgLTcsMjQgKzcsMzAgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9fTElOVVhfUEVSQ1BVX0gKICNkZWZpbmUgX19MSU5VWF9QRVJDUFVfSAotI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+ICAKLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+ICAKKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjaW5jbHVkZSA8bGludXgvc21wLmg+Ci0jaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+ICAKKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxhc20vcGVyY3B1Lmg+Ci0KICNpZm5kZWYgUEVSQ1BVX0VOT1VHSF9ST09NCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQRVJDUFVfRU5PVUdIX1JPT00gMzI3NjgKICNlbmRpZgotCiAjZGVmaW5lIGdldF9jcHVfdmFyKHZhcikgKCooeyBwcmVlbXB0X2Rpc2FibGUoKTsgJl9fZ2V0X2NwdV92YXIodmFyKTsgfSkpCiAjZGVmaW5lIHB1dF9jcHVfdmFyKHZhcikgcHJlZW1wdF9lbmFibGUoKQotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBwZXJfY3B1X3B0cihwdHIsIGNwdSkgKHsgKHZvaWQpKGNwdSk7IChwdHIpOyB9KQotCiAjZGVmaW5lIGFsbG9jX3BlcmNwdSh0eXBlKSAoKHR5cGUgKikoX19hbGxvY19wZXJjcHUoc2l6ZW9mKHR5cGUpKSkpCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9wZXJjcHVfY291bnRlci5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3BlcmNwdV9jb3VudGVyLmgKaW5kZXggMTEyMzc1Yy4uMzMwNzNmOCAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3BlcmNwdV9jb3VudGVyLmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3BlcmNwdV9jb3VudGVyLmgKQEAgLTcsMTkgKzcsMjUgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9MSU5VWF9QRVJDUFVfQ09VTlRFUl9ICiAjZGVmaW5lIF9MSU5VWF9QRVJDUFVfQ09VTlRFUl9ICi0KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CiAjaW5jbHVkZSA8bGludXgvcGVyY3B1Lmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLQogc3RydWN0IHBlcmNwdV9jb3VudGVyIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgczY0IGNvdW50OwogfTsKLQogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvcGVyZl9ldmVudC5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3BlcmZfZXZlbnQuaAppbmRleCA5ZDNjZDE0Li5hZDU1MTVmIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvcGVyZl9ldmVudC5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9wZXJmX2V2ZW50LmgKQEAgLTcsMjM0ICs3LDIyOCBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX0xJTlVYX1BFUkZfRVZFTlRfSAogI2RlZmluZSBfTElOVVhfUEVSRl9FVkVOVF9ICi0KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KLQogZW51bSBwZXJmX3R5cGVfaWQgewogIFBFUkZfVFlQRV9IQVJEV0FSRSA9IDAsCiAgUEVSRl9UWVBFX1NPRlRXQVJFID0gMSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgUEVSRl9UWVBFX1RSQUNFUE9JTlQgPSAyLAogIFBFUkZfVFlQRV9IV19DQUNIRSA9IDMsCiAgUEVSRl9UWVBFX1JBVyA9IDQsCiAgUEVSRl9UWVBFX0JSRUFLUE9JTlQgPSA1LAotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFBFUkZfVFlQRV9NQVgsCiB9OwotCiBlbnVtIHBlcmZfaHdfaWQgewotCiAgUEVSRl9DT1VOVF9IV19DUFVfQ1lDTEVTID0gMCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgUEVSRl9DT1VOVF9IV19JTlNUUlVDVElPTlMgPSAxLAogIFBFUkZfQ09VTlRfSFdfQ0FDSEVfUkVGRVJFTkNFUyA9IDIsCiAgUEVSRl9DT1VOVF9IV19DQUNIRV9NSVNTRVMgPSAzLAogIFBFUkZfQ09VTlRfSFdfQlJBTkNIX0lOU1RSVUNUSU9OUyA9IDQsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFBFUkZfQ09VTlRfSFdfQlJBTkNIX01JU1NFUyA9IDUsCiAgUEVSRl9DT1VOVF9IV19CVVNfQ1lDTEVTID0gNiwKLQogIFBFUkZfQ09VTlRfSFdfTUFYLAogfTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIGVudW0gcGVyZl9od19jYWNoZV9pZCB7CiAgUEVSRl9DT1VOVF9IV19DQUNIRV9MMUQgPSAwLAogIFBFUkZfQ09VTlRfSFdfQ0FDSEVfTDFJID0gMSwKICBQRVJGX0NPVU5UX0hXX0NBQ0hFX0xMID0gMiwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgUEVSRl9DT1VOVF9IV19DQUNIRV9EVExCID0gMywKICBQRVJGX0NPVU5UX0hXX0NBQ0hFX0lUTEIgPSA0LAogIFBFUkZfQ09VTlRfSFdfQ0FDSEVfQlBVID0gNSwKLQogIFBFUkZfQ09VTlRfSFdfQ0FDSEVfTUFYLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07Ci0KIGVudW0gcGVyZl9od19jYWNoZV9vcF9pZCB7CiAgUEVSRl9DT1VOVF9IV19DQUNIRV9PUF9SRUFEID0gMCwKICBQRVJGX0NPVU5UX0hXX0NBQ0hFX09QX1dSSVRFID0gMSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgUEVSRl9DT1VOVF9IV19DQUNIRV9PUF9QUkVGRVRDSCA9IDIsCi0KICBQRVJGX0NPVU5UX0hXX0NBQ0hFX09QX01BWCwKIH07Ci0KIGVudW0gcGVyZl9od19jYWNoZV9vcF9yZXN1bHRfaWQgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBQRVJGX0NPVU5UX0hXX0NBQ0hFX1JFU1VMVF9BQ0NFU1MgPSAwLAogIFBFUkZfQ09VTlRfSFdfQ0FDSEVfUkVTVUxUX01JU1MgPSAxLAotCiAgUEVSRl9DT1VOVF9IV19DQUNIRV9SRVNVTFRfTUFYLAogfTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIGVudW0gcGVyZl9zd19pZHMgewogIFBFUkZfQ09VTlRfU1dfQ1BVX0NMT0NLID0gMCwKICBQRVJGX0NPVU5UX1NXX1RBU0tfQ0xPQ0sgPSAxLAogIFBFUkZfQ09VTlRfU1dfUEFHRV9GQVVMVFMgPSAyLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBQRVJGX0NPVU5UX1NXX0NPTlRFWFRfU1dJVENIRVMgPSAzLAogIFBFUkZfQ09VTlRfU1dfQ1BVX01JR1JBVElPTlMgPSA0LAogIFBFUkZfQ09VTlRfU1dfUEFHRV9GQVVMVFNfTUlOID0gNSwKICBQRVJGX0NPVU5UX1NXX1BBR0VfRkFVTFRTX01BSiA9IDYsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFBFUkZfQ09VTlRfU1dfQUxJR05NRU5UX0ZBVUxUUyA9IDcsCiAgUEVSRl9DT1VOVF9TV19FTVVMQVRJT05fRkFVTFRTID0gOCwKLQogIFBFUkZfQ09VTlRfU1dfTUFYLAogfTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIGVudW0gcGVyZl9ldmVudF9zYW1wbGVfZm9ybWF0IHsKICBQRVJGX1NBTVBMRV9JUCA9IDFVIDw8IDAsCiAgUEVSRl9TQU1QTEVfVElEID0gMVUgPDwgMSwKICBQRVJGX1NBTVBMRV9USU1FID0gMVUgPDwgMiwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgUEVSRl9TQU1QTEVfQUREUiA9IDFVIDw8IDMsCiAgUEVSRl9TQU1QTEVfUkVBRCA9IDFVIDw8IDQsCiAgUEVSRl9TQU1QTEVfQ0FMTENIQUlOID0gMVUgPDwgNSwKICBQRVJGX1NBTVBMRV9JRCA9IDFVIDw8IDYsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFBFUkZfU0FNUExFX0NQVSA9IDFVIDw8IDcsCiAgUEVSRl9TQU1QTEVfUEVSSU9EID0gMVUgPDwgOCwKICBQRVJGX1NBTVBMRV9TVFJFQU1fSUQgPSAxVSA8PCA5LAogIFBFUkZfU0FNUExFX1JBVyA9IDFVIDw8IDEwLAotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFBFUkZfU0FNUExFX01BWCA9IDFVIDw8IDExLAogfTsKLQogZW51bSBwZXJmX2V2ZW50X3JlYWRfZm9ybWF0IHsKICBQRVJGX0ZPUk1BVF9UT1RBTF9USU1FX0VOQUJMRUQgPSAxVSA8PCAwLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBQRVJGX0ZPUk1BVF9UT1RBTF9USU1FX1JVTk5JTkcgPSAxVSA8PCAxLAogIFBFUkZfRk9STUFUX0lEID0gMVUgPDwgMiwKICBQRVJGX0ZPUk1BVF9HUk9VUCA9IDFVIDw8IDMsCi0KICBQRVJGX0ZPUk1BVF9NQVggPSAxVSA8PCA0LAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07Ci0KLSNkZWZpbmUgUEVSRl9BVFRSX1NJWkVfVkVSMCA2NCAgCi0KKyNkZWZpbmUgUEVSRl9BVFRSX1NJWkVfVkVSMCA2NAogc3RydWN0IHBlcmZfZXZlbnRfYXR0ciB7Ci0KICBfX3UzMiB0eXBlOwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHNpemU7Ci0KICBfX3U2NCBjb25maWc7Ci0KICB1bmlvbiB7CiAgX191NjQgc2FtcGxlX3BlcmlvZDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191NjQgc2FtcGxlX2ZyZXE7CiAgfTsKLQogIF9fdTY0IHNhbXBsZV90eXBlOwogIF9fdTY0IHJlYWRfZm9ybWF0OwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTY0IGRpc2FibGVkIDogMSwKICBpbmhlcml0IDogMSwKICBwaW5uZWQgOiAxLAogIGV4Y2x1c2l2ZSA6IDEsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGV4Y2x1ZGVfdXNlciA6IDEsCiAgZXhjbHVkZV9rZXJuZWwgOiAxLAogIGV4Y2x1ZGVfaHYgOiAxLAogIGV4Y2x1ZGVfaWRsZSA6IDEsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIG1tYXAgOiAxLAogIGNvbW0gOiAxLAogIGZyZXEgOiAxLAogIGluaGVyaXRfc3RhdCA6IDEsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGVuYWJsZV9vbl9leGVjIDogMSwKICB0YXNrIDogMSwKICB3YXRlcm1hcmsgOiAxLAotCiAgcHJlY2lzZV9pcCA6IDIsCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX19yZXNlcnZlZF8xIDogNDc7Ci0KICB1bmlvbiB7CiAgX191MzIgd2FrZXVwX2V2ZW50czsKICBfX3UzMiB3YWtldXBfd2F0ZXJtYXJrOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB9OwotCiAgX191MzIgYnBfdHlwZTsKICBfX3U2NCBicF9hZGRyOwogIF9fdTY0IGJwX2xlbjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwotCiAjZGVmaW5lIFBFUkZfRVZFTlRfSU9DX0VOQUJMRSBfSU8gKCckJywgMCkKICNkZWZpbmUgUEVSRl9FVkVOVF9JT0NfRElTQUJMRSBfSU8gKCckJywgMSkKICNkZWZpbmUgUEVSRl9FVkVOVF9JT0NfUkVGUkVTSCBfSU8gKCckJywgMikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBFUkZfRVZFTlRfSU9DX1JFU0VUIF9JTyAoJyQnLCAzKQogI2RlZmluZSBQRVJGX0VWRU5UX0lPQ19QRVJJT0QgX0lPVygnJCcsIDQsIF9fdTY0KQogI2RlZmluZSBQRVJGX0VWRU5UX0lPQ19TRVRfT1VUUFVUIF9JTyAoJyQnLCA1KQogI2RlZmluZSBQRVJGX0VWRU5UX0lPQ19TRVRfRklMVEVSIF9JT1coJyQnLCA2LCBjaGFyICopCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBlbnVtIHBlcmZfZXZlbnRfaW9jX2ZsYWdzIHsKICBQRVJGX0lPQ19GTEFHX0dST1VQID0gMVUgPDwgMCwKIH07Ci0KIHN0cnVjdCBwZXJmX2V2ZW50X21tYXBfcGFnZSB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHZlcnNpb247CiAgX191MzIgY29tcGF0X3ZlcnNpb247Ci0KICBfX3UzMiBsb2NrOwogIF9fdTMyIGluZGV4OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3M2NCBvZmZzZXQ7CiAgX191NjQgdGltZV9lbmFibGVkOwogIF9fdTY0IHRpbWVfcnVubmluZzsKLQogIF9fdTY0IF9fcmVzZXJ2ZWRbMTIzXTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U2NCBkYXRhX2hlYWQ7CiAgX191NjQgZGF0YV90YWlsOwogfTsKLQogI2RlZmluZSBQRVJGX1JFQ09SRF9NSVNDX0NQVU1PREVfTUFTSyAoNyA8PCAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUEVSRl9SRUNPUkRfTUlTQ19DUFVNT0RFX1VOS05PV04gKDAgPDwgMCkKICNkZWZpbmUgUEVSRl9SRUNPUkRfTUlTQ19LRVJORUwgKDEgPDwgMCkKICNkZWZpbmUgUEVSRl9SRUNPUkRfTUlTQ19VU0VSICgyIDw8IDApCiAjZGVmaW5lIFBFUkZfUkVDT1JEX01JU0NfSFlQRVJWSVNPUiAoMyA8PCAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUEVSRl9SRUNPUkRfTUlTQ19HVUVTVF9LRVJORUwgKDQgPDwgMCkKICNkZWZpbmUgUEVSRl9SRUNPUkRfTUlTQ19HVUVTVF9VU0VSICg1IDw8IDApCi0KICNkZWZpbmUgUEVSRl9SRUNPUkRfTUlTQ19FWEFDVF9JUCAoMSA8PCAxNCkKLQogI2RlZmluZSBQRVJGX1JFQ09SRF9NSVNDX0VYVF9SRVNFUlZFRCAoMSA8PCAxNSkKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBwZXJmX2V2ZW50X2hlYWRlciB7CiAgX191MzIgdHlwZTsKICBfX3UxNiBtaXNjOwogIF9fdTE2IHNpemU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKLQogZW51bSBwZXJmX2V2ZW50X3R5cGUgewotCiAgUEVSRl9SRUNPUkRfTU1BUCA9IDEsCi0KICBQRVJGX1JFQ09SRF9MT1NUID0gMiwKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBQRVJGX1JFQ09SRF9DT01NID0gMywKLQogIFBFUkZfUkVDT1JEX0VYSVQgPSA0LAotCiAgUEVSRl9SRUNPUkRfVEhST1RUTEUgPSA1LAogIFBFUkZfUkVDT1JEX1VOVEhST1RUTEUgPSA2LAotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFBFUkZfUkVDT1JEX0ZPUksgPSA3LAotCiAgUEVSRl9SRUNPUkRfUkVBRCA9IDgsCi0KICBQRVJGX1JFQ09SRF9TQU1QTEUgPSA5LAotCiAgUEVSRl9SRUNPUkRfTUFYLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07Ci0KIGVudW0gcGVyZl9jYWxsY2hhaW5fY29udGV4dCB7CiAgUEVSRl9DT05URVhUX0hWID0gKF9fdTY0KS0zMiwKICBQRVJGX0NPTlRFWFRfS0VSTkVMID0gKF9fdTY0KS0xMjgsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFBFUkZfQ09OVEVYVF9VU0VSID0gKF9fdTY0KS01MTIsCi0KICBQRVJGX0NPTlRFWFRfR1VFU1QgPSAoX191NjQpLTIwNDgsCiAgUEVSRl9DT05URVhUX0dVRVNUX0tFUk5FTCA9IChfX3U2NCktMjE3NiwKICBQRVJGX0NPTlRFWFRfR1VFU1RfVVNFUiA9IChfX3U2NCktMjU2MCwKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBQRVJGX0NPTlRFWFRfTUFYID0gKF9fdTY0KS00MDk1LAogfTsKLQogI2RlZmluZSBQRVJGX0ZMQUdfRkRfTk9fR1JPVVAgKDFVIDw8IDApCiAjZGVmaW5lIFBFUkZfRkxBR19GRF9PVVRQVVQgKDFVIDw8IDEpCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZW5kaWYKLQpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3BlcnNvbmFsaXR5LmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvcGVyc29uYWxpdHkuaAppbmRleCAxZjg0YjRlLi5iYjU1Yjc1IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvcGVyc29uYWxpdHkuaAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvcGVyc29uYWxpdHkuaApAQCAtNyw3NyArNyw2NSBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX0xJTlVYX1BFUlNPTkFMSVRZX0gKICNkZWZpbmUgX0xJTlVYX1BFUlNPTkFMSVRZX0gKLQotc3RydWN0IGV4ZWNfZG9tYWluOwotc3RydWN0IHB0X3JlZ3M7Ci0KIGVudW0geworIFVOQU1FMjYgPSAweDAwMjAwMDAsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIEFERFJfTk9fUkFORE9NSVpFID0gMHgwMDQwMDAwLAogIEZEUElDX0ZVTkNQVFJTID0gMHgwMDgwMDAwLAogIE1NQVBfUEFHRV9aRVJPID0gMHgwMTAwMDAwLAogIEFERFJfQ09NUEFUX0xBWU9VVCA9IDB4MDIwMDAwMCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgUkVBRF9JTVBMSUVTX0VYRUMgPSAweDA0MDAwMDAsCiAgQUREUl9MSU1JVF8zMkJJVCA9IDB4MDgwMDAwMCwKICBTSE9SVF9JTk9ERSA9IDB4MTAwMDAwMCwKICBXSE9MRV9TRUNPTkRTID0gMHgyMDAwMDAwLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBTVElDS1lfVElNRU9VVFMgPSAweDQwMDAwMDAsCiAgQUREUl9MSU1JVF8zR0IgPSAweDgwMDAwMDAsCiB9OwotCi0jZGVmaW5lIFBFUl9DTEVBUl9PTl9TRVRJRCAoUkVBRF9JTVBMSUVTX0VYRUN8QUREUl9OT19SQU5ET01JWkUpCi0KKyNkZWZpbmUgUEVSX0NMRUFSX09OX1NFVElEIChSRUFEX0lNUExJRVNfRVhFQyB8ICAgQUREUl9OT19SQU5ET01JWkUgfCAgIEFERFJfQ09NUEFUX0xBWU9VVCB8ICAgTU1BUF9QQUdFX1pFUk8pCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogZW51bSB7CiAgUEVSX0xJTlVYID0gMHgwMDAwLAogIFBFUl9MSU5VWF8zMkJJVCA9IDB4MDAwMCB8IEFERFJfTElNSVRfMzJCSVQsCiAgUEVSX0xJTlVYX0ZEUElDID0gMHgwMDAwIHwgRkRQSUNfRlVOQ1BUUlMsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFBFUl9TVlI0ID0gMHgwMDAxIHwgU1RJQ0tZX1RJTUVPVVRTIHwgTU1BUF9QQUdFX1pFUk8sCiAgUEVSX1NWUjMgPSAweDAwMDIgfCBTVElDS1lfVElNRU9VVFMgfCBTSE9SVF9JTk9ERSwKICBQRVJfU0NPU1ZSMyA9IDB4MDAwMyB8IFNUSUNLWV9USU1FT1VUUyB8CiAgV0hPTEVfU0VDT05EUyB8IFNIT1JUX0lOT0RFLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBQRVJfT1NSNSA9IDB4MDAwMyB8IFNUSUNLWV9USU1FT1VUUyB8IFdIT0xFX1NFQ09ORFMsCiAgUEVSX1dZU0VWMzg2ID0gMHgwMDA0IHwgU1RJQ0tZX1RJTUVPVVRTIHwgU0hPUlRfSU5PREUsCiAgUEVSX0lTQ1I0ID0gMHgwMDA1IHwgU1RJQ0tZX1RJTUVPVVRTLAogIFBFUl9CU0QgPSAweDAwMDYsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFBFUl9TVU5PUyA9IDB4MDAwNiB8IFNUSUNLWV9USU1FT1VUUywKICBQRVJfWEVOSVggPSAweDAwMDcgfCBTVElDS1lfVElNRU9VVFMgfCBTSE9SVF9JTk9ERSwKICBQRVJfTElOVVgzMiA9IDB4MDAwOCwKICBQRVJfTElOVVgzMl8zR0IgPSAweDAwMDggfCBBRERSX0xJTUlUXzNHQiwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgUEVSX0lSSVgzMiA9IDB4MDAwOSB8IFNUSUNLWV9USU1FT1VUUywKICBQRVJfSVJJWE4zMiA9IDB4MDAwYSB8IFNUSUNLWV9USU1FT1VUUywKICBQRVJfSVJJWDY0ID0gMHgwMDBiIHwgU1RJQ0tZX1RJTUVPVVRTLAogIFBFUl9SSVNDT1MgPSAweDAwMGMsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFBFUl9TT0xBUklTID0gMHgwMDBkIHwgU1RJQ0tZX1RJTUVPVVRTLAogIFBFUl9VVzcgPSAweDAwMGUgfCBTVElDS1lfVElNRU9VVFMgfCBNTUFQX1BBR0VfWkVSTywKICBQRVJfT1NGNCA9IDB4MDAwZiwKICBQRVJfSFBVWCA9IDB4MDAxMCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgUEVSX01BU0sgPSAweDAwZmYsCiB9OwotCi10eXBlZGVmIHZvaWQgKCpoYW5kbGVyX3QpKGludCwgc3RydWN0IHB0X3JlZ3MgKik7Ci0KLXN0cnVjdCBleGVjX2RvbWFpbiB7Ci0gY29uc3QgY2hhciAqbmFtZTsKLSBoYW5kbGVyX3QgaGFuZGxlcjsKLSB1bnNpZ25lZCBjaGFyIHBlcnNfbG93OwotIHVuc2lnbmVkIGNoYXIgcGVyc19oaWdoOwotIHVuc2lnbmVkIGxvbmcgKnNpZ25hbF9tYXA7Ci0gdW5zaWduZWQgbG9uZyAqc2lnbmFsX2ludm1hcDsKLSBzdHJ1Y3QgbWFwX3NlZ21lbnQgKmVycl9tYXA7Ci0gc3RydWN0IG1hcF9zZWdtZW50ICpzb2NrdHlwZV9tYXA7Ci0gc3RydWN0IG1hcF9zZWdtZW50ICpzb2Nrb3B0X21hcDsKLSBzdHJ1Y3QgbWFwX3NlZ21lbnQgKmFmX21hcDsKLSBzdHJ1Y3QgbW9kdWxlICptb2R1bGU7Ci0gc3RydWN0IGV4ZWNfZG9tYWluICpuZXh0OwotfTsKLQotI2RlZmluZSBwZXJzb25hbGl0eShwZXJzKSAocGVycyAmIFBFUl9NQVNLKQotCi0jZGVmaW5lIGdldF9wZXJzb25hbGl0eSAoY3VycmVudC0+cGVyc29uYWxpdHkpCi0KLSNkZWZpbmUgc2V0X3BlcnNvbmFsaXR5KHBlcnMpICAgKChjdXJyZW50LT5wZXJzb25hbGl0eSA9PSBwZXJzKSA/IDAgOiBfX3NldF9wZXJzb25hbGl0eShwZXJzKSkKLQogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvcGZrZXl2Mi5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3Bma2V5djIuaAppbmRleCAzYWM5NDg4Li4xNzRmNTQ2IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvcGZrZXl2Mi5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9wZmtleXYyLmgKQEAgLTcsMzAwICs3LDMzOCBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX0xJTlVYX1BGS0VZMl9ICiAjZGVmaW5lIF9MSU5VWF9QRktFWTJfSAotCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLQogI2RlZmluZSBQRl9LRVlfVjIgMgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUEZLRVlWMl9SRVZJU0lPTiAxOTk4MDZMCi0KIHN0cnVjdCBzYWRiX21zZyB7CiAgdWludDhfdCBzYWRiX21zZ192ZXJzaW9uOwogIHVpbnQ4X3Qgc2FkYl9tc2dfdHlwZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdWludDhfdCBzYWRiX21zZ19lcnJubzsKICB1aW50OF90IHNhZGJfbXNnX3NhdHlwZTsKICB1aW50MTZfdCBzYWRiX21zZ19sZW47CiAgdWludDE2X3Qgc2FkYl9tc2dfcmVzZXJ2ZWQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVpbnQzMl90IHNhZGJfbXNnX3NlcTsKICB1aW50MzJfdCBzYWRiX21zZ19waWQ7CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwotCiBzdHJ1Y3Qgc2FkYl9leHQgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1aW50MTZfdCBzYWRiX2V4dF9sZW47CiAgdWludDE2X3Qgc2FkYl9leHRfdHlwZTsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Ci0KIHN0cnVjdCBzYWRiX3NhIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdWludDE2X3Qgc2FkYl9zYV9sZW47CiAgdWludDE2X3Qgc2FkYl9zYV9leHR0eXBlOwogIHVpbnQzMl90IHNhZGJfc2Ffc3BpOwogIHVpbnQ4X3Qgc2FkYl9zYV9yZXBsYXk7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVpbnQ4X3Qgc2FkYl9zYV9zdGF0ZTsKICB1aW50OF90IHNhZGJfc2FfYXV0aDsKICB1aW50OF90IHNhZGJfc2FfZW5jcnlwdDsKICB1aW50MzJfdCBzYWRiX3NhX2ZsYWdzOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Ci0KIHN0cnVjdCBzYWRiX2xpZmV0aW1lIHsKICB1aW50MTZfdCBzYWRiX2xpZmV0aW1lX2xlbjsKICB1aW50MTZfdCBzYWRiX2xpZmV0aW1lX2V4dHR5cGU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVpbnQzMl90IHNhZGJfbGlmZXRpbWVfYWxsb2NhdGlvbnM7CiAgdWludDY0X3Qgc2FkYl9saWZldGltZV9ieXRlczsKICB1aW50NjRfdCBzYWRiX2xpZmV0aW1lX2FkZHRpbWU7CiAgdWludDY0X3Qgc2FkYl9saWZldGltZV91c2V0aW1lOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Ci0KIHN0cnVjdCBzYWRiX2FkZHJlc3MgewogIHVpbnQxNl90IHNhZGJfYWRkcmVzc19sZW47CiAgdWludDE2X3Qgc2FkYl9hZGRyZXNzX2V4dHR5cGU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVpbnQ4X3Qgc2FkYl9hZGRyZXNzX3Byb3RvOwogIHVpbnQ4X3Qgc2FkYl9hZGRyZXNzX3ByZWZpeGxlbjsKICB1aW50MTZfdCBzYWRiX2FkZHJlc3NfcmVzZXJ2ZWQ7CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IHNhZGJfa2V5IHsKICB1aW50MTZfdCBzYWRiX2tleV9sZW47CiAgdWludDE2X3Qgc2FkYl9rZXlfZXh0dHlwZTsKICB1aW50MTZfdCBzYWRiX2tleV9iaXRzOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1aW50MTZfdCBzYWRiX2tleV9yZXNlcnZlZDsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Ci0KIHN0cnVjdCBzYWRiX2lkZW50IHsKICB1aW50MTZfdCBzYWRiX2lkZW50X2xlbjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdWludDE2X3Qgc2FkYl9pZGVudF9leHR0eXBlOwogIHVpbnQxNl90IHNhZGJfaWRlbnRfdHlwZTsKICB1aW50MTZfdCBzYWRiX2lkZW50X3Jlc2VydmVkOwogIHVpbnQ2NF90IHNhZGJfaWRlbnRfaWQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKLQogc3RydWN0IHNhZGJfc2VucyB7CiAgdWludDE2X3Qgc2FkYl9zZW5zX2xlbjsKICB1aW50MTZfdCBzYWRiX3NlbnNfZXh0dHlwZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdWludDMyX3Qgc2FkYl9zZW5zX2RwZDsKICB1aW50OF90IHNhZGJfc2Vuc19zZW5zX2xldmVsOwogIHVpbnQ4X3Qgc2FkYl9zZW5zX3NlbnNfbGVuOwogIHVpbnQ4X3Qgc2FkYl9zZW5zX2ludGVnX2xldmVsOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1aW50OF90IHNhZGJfc2Vuc19pbnRlZ19sZW47CiAgdWludDMyX3Qgc2FkYl9zZW5zX3Jlc2VydmVkOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKLQogc3RydWN0IHNhZGJfcHJvcCB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVpbnQxNl90IHNhZGJfcHJvcF9sZW47CiAgdWludDE2X3Qgc2FkYl9wcm9wX2V4dHR5cGU7CiAgdWludDhfdCBzYWRiX3Byb3BfcmVwbGF5OwogIHVpbnQ4X3Qgc2FkYl9wcm9wX3Jlc2VydmVkWzNdOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Ci0KIHN0cnVjdCBzYWRiX2NvbWIgewogIHVpbnQ4X3Qgc2FkYl9jb21iX2F1dGg7CiAgdWludDhfdCBzYWRiX2NvbWJfZW5jcnlwdDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdWludDE2X3Qgc2FkYl9jb21iX2ZsYWdzOwogIHVpbnQxNl90IHNhZGJfY29tYl9hdXRoX21pbmJpdHM7CiAgdWludDE2X3Qgc2FkYl9jb21iX2F1dGhfbWF4Yml0czsKICB1aW50MTZfdCBzYWRiX2NvbWJfZW5jcnlwdF9taW5iaXRzOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1aW50MTZfdCBzYWRiX2NvbWJfZW5jcnlwdF9tYXhiaXRzOwogIHVpbnQzMl90IHNhZGJfY29tYl9yZXNlcnZlZDsKICB1aW50MzJfdCBzYWRiX2NvbWJfc29mdF9hbGxvY2F0aW9uczsKICB1aW50MzJfdCBzYWRiX2NvbWJfaGFyZF9hbGxvY2F0aW9uczsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdWludDY0X3Qgc2FkYl9jb21iX3NvZnRfYnl0ZXM7CiAgdWludDY0X3Qgc2FkYl9jb21iX2hhcmRfYnl0ZXM7CiAgdWludDY0X3Qgc2FkYl9jb21iX3NvZnRfYWRkdGltZTsKICB1aW50NjRfdCBzYWRiX2NvbWJfaGFyZF9hZGR0aW1lOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1aW50NjRfdCBzYWRiX2NvbWJfc29mdF91c2V0aW1lOwogIHVpbnQ2NF90IHNhZGJfY29tYl9oYXJkX3VzZXRpbWU7CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwotCiBzdHJ1Y3Qgc2FkYl9zdXBwb3J0ZWQgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1aW50MTZfdCBzYWRiX3N1cHBvcnRlZF9sZW47CiAgdWludDE2X3Qgc2FkYl9zdXBwb3J0ZWRfZXh0dHlwZTsKICB1aW50MzJfdCBzYWRiX3N1cHBvcnRlZF9yZXNlcnZlZDsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3Qgc2FkYl9hbGcgewogIHVpbnQ4X3Qgc2FkYl9hbGdfaWQ7CiAgdWludDhfdCBzYWRiX2FsZ19pdmxlbjsKICB1aW50MTZfdCBzYWRiX2FsZ19taW5iaXRzOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1aW50MTZfdCBzYWRiX2FsZ19tYXhiaXRzOwogIHVpbnQxNl90IHNhZGJfYWxnX3Jlc2VydmVkOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKLQogc3RydWN0IHNhZGJfc3BpcmFuZ2UgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1aW50MTZfdCBzYWRiX3NwaXJhbmdlX2xlbjsKICB1aW50MTZfdCBzYWRiX3NwaXJhbmdlX2V4dHR5cGU7CiAgdWludDMyX3Qgc2FkYl9zcGlyYW5nZV9taW47CiAgdWludDMyX3Qgc2FkYl9zcGlyYW5nZV9tYXg7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVpbnQzMl90IHNhZGJfc3BpcmFuZ2VfcmVzZXJ2ZWQ7CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwotCiBzdHJ1Y3Qgc2FkYl94X2ttcHJpdmF0ZSB7CiAgdWludDE2X3Qgc2FkYl94X2ttcHJpdmF0ZV9sZW47CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVpbnQxNl90IHNhZGJfeF9rbXByaXZhdGVfZXh0dHlwZTsKICB1aW50MzJfdCBzYWRiX3hfa21wcml2YXRlX3Jlc2VydmVkOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKLQogc3RydWN0IHNhZGJfeF9zYTIgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1aW50MTZfdCBzYWRiX3hfc2EyX2xlbjsKICB1aW50MTZfdCBzYWRiX3hfc2EyX2V4dHR5cGU7CiAgdWludDhfdCBzYWRiX3hfc2EyX21vZGU7CiAgdWludDhfdCBzYWRiX3hfc2EyX3Jlc2VydmVkMTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdWludDE2X3Qgc2FkYl94X3NhMl9yZXNlcnZlZDI7CiAgdWludDMyX3Qgc2FkYl94X3NhMl9zZXF1ZW5jZTsKICB1aW50MzJfdCBzYWRiX3hfc2EyX3JlcWlkOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBzYWRiX3hfcG9saWN5IHsKICB1aW50MTZfdCBzYWRiX3hfcG9saWN5X2xlbjsKICB1aW50MTZfdCBzYWRiX3hfcG9saWN5X2V4dHR5cGU7CiAgdWludDE2X3Qgc2FkYl94X3BvbGljeV90eXBlOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1aW50OF90IHNhZGJfeF9wb2xpY3lfZGlyOwogIHVpbnQ4X3Qgc2FkYl94X3BvbGljeV9yZXNlcnZlZDsKICB1aW50MzJfdCBzYWRiX3hfcG9saWN5X2lkOwogIHVpbnQzMl90IHNhZGJfeF9wb2xpY3lfcHJpb3JpdHk7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKLQogc3RydWN0IHNhZGJfeF9pcHNlY3JlcXVlc3QgewogIHVpbnQxNl90IHNhZGJfeF9pcHNlY3JlcXVlc3RfbGVuOwogIHVpbnQxNl90IHNhZGJfeF9pcHNlY3JlcXVlc3RfcHJvdG87CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVpbnQ4X3Qgc2FkYl94X2lwc2VjcmVxdWVzdF9tb2RlOwogIHVpbnQ4X3Qgc2FkYl94X2lwc2VjcmVxdWVzdF9sZXZlbDsKICB1aW50MTZfdCBzYWRiX3hfaXBzZWNyZXF1ZXN0X3Jlc2VydmVkMTsKICB1aW50MzJfdCBzYWRiX3hfaXBzZWNyZXF1ZXN0X3JlcWlkOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1aW50MzJfdCBzYWRiX3hfaXBzZWNyZXF1ZXN0X3Jlc2VydmVkMjsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Ci0KIHN0cnVjdCBzYWRiX3hfbmF0X3RfdHlwZSB7CiAgdWludDE2X3Qgc2FkYl94X25hdF90X3R5cGVfbGVuOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1aW50MTZfdCBzYWRiX3hfbmF0X3RfdHlwZV9leHR0eXBlOwogIHVpbnQ4X3Qgc2FkYl94X25hdF90X3R5cGVfdHlwZTsKICB1aW50OF90IHNhZGJfeF9uYXRfdF90eXBlX3Jlc2VydmVkWzNdOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBzYWRiX3hfbmF0X3RfcG9ydCB7CiAgdWludDE2X3Qgc2FkYl94X25hdF90X3BvcnRfbGVuOwogIHVpbnQxNl90IHNhZGJfeF9uYXRfdF9wb3J0X2V4dHR5cGU7CiAgdWludDE2X3Qgc2FkYl94X25hdF90X3BvcnRfcG9ydDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdWludDE2X3Qgc2FkYl94X25hdF90X3BvcnRfcmVzZXJ2ZWQ7CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwotCiBzdHJ1Y3Qgc2FkYl94X3NlY19jdHggewogIHVpbnQxNl90IHNhZGJfeF9zZWNfbGVuOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1aW50MTZfdCBzYWRiX3hfc2VjX2V4dHR5cGU7CiAgdWludDhfdCBzYWRiX3hfY3R4X2FsZzsKICB1aW50OF90IHNhZGJfeF9jdHhfZG9pOwogIHVpbnQxNl90IHNhZGJfeF9jdHhfbGVuOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Ci0KICNkZWZpbmUgU0FEQl9SRVNFUlZFRCAwCiAjZGVmaW5lIFNBREJfR0VUU1BJIDEKICNkZWZpbmUgU0FEQl9VUERBVEUgMgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU0FEQl9BREQgMwogI2RlZmluZSBTQURCX0RFTEVURSA0CiAjZGVmaW5lIFNBREJfR0VUIDUKICNkZWZpbmUgU0FEQl9BQ1FVSVJFIDYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNBREJfUkVHSVNURVIgNwogI2RlZmluZSBTQURCX0VYUElSRSA4CiAjZGVmaW5lIFNBREJfRkxVU0ggOQogI2RlZmluZSBTQURCX0RVTVAgMTAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNBREJfWF9QUk9NSVNDIDExCiAjZGVmaW5lIFNBREJfWF9QQ0hBTkdFIDEyCiAjZGVmaW5lIFNBREJfWF9TUERVUERBVEUgMTMKICNkZWZpbmUgU0FEQl9YX1NQREFERCAxNAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU0FEQl9YX1NQRERFTEVURSAxNQogI2RlZmluZSBTQURCX1hfU1BER0VUIDE2CiAjZGVmaW5lIFNBREJfWF9TUERBQ1FVSVJFIDE3CiAjZGVmaW5lIFNBREJfWF9TUEREVU1QIDE4CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTQURCX1hfU1BERkxVU0ggMTkKICNkZWZpbmUgU0FEQl9YX1NQRFNFVElEWCAyMAogI2RlZmluZSBTQURCX1hfU1BERVhQSVJFIDIxCiAjZGVmaW5lIFNBREJfWF9TUERERUxFVEUyIDIyCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTQURCX1hfTkFUX1RfTkVXX01BUFBJTkcgMjMKICNkZWZpbmUgU0FEQl9NQVggMjMKLQogI2RlZmluZSBTQURCX1NBRkxBR1NfUEZTIDEKICNkZWZpbmUgU0FEQl9TQUZMQUdTX05PUE1UVURJU0MgMHgyMDAwMDAwMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU0FEQl9TQUZMQUdTX0RFQ0FQX0RTQ1AgMHg0MDAwMDAwMAogI2RlZmluZSBTQURCX1NBRkxBR1NfTk9FQ04gMHg4MDAwMDAwMAotCiAjZGVmaW5lIFNBREJfU0FTVEFURV9MQVJWQUwgMAogI2RlZmluZSBTQURCX1NBU1RBVEVfTUFUVVJFIDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNBREJfU0FTVEFURV9EWUlORyAyCiAjZGVmaW5lIFNBREJfU0FTVEFURV9ERUFEIDMKICNkZWZpbmUgU0FEQl9TQVNUQVRFX01BWCAzCi0KICNkZWZpbmUgU0FEQl9TQVRZUEVfVU5TUEVDIDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNBREJfU0FUWVBFX0FIIDIKICNkZWZpbmUgU0FEQl9TQVRZUEVfRVNQIDMKICNkZWZpbmUgU0FEQl9TQVRZUEVfUlNWUCA1CiAjZGVmaW5lIFNBREJfU0FUWVBFX09TUEZWMiA2CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTQURCX1NBVFlQRV9SSVBWMiA3CiAjZGVmaW5lIFNBREJfU0FUWVBFX01JUCA4CiAjZGVmaW5lIFNBREJfWF9TQVRZUEVfSVBDT01QIDkKICNkZWZpbmUgU0FEQl9TQVRZUEVfTUFYIDkKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU0FEQl9BQUxHX05PTkUgMAogI2RlZmluZSBTQURCX0FBTEdfTUQ1SE1BQyAyCiAjZGVmaW5lIFNBREJfQUFMR19TSEExSE1BQyAzCiAjZGVmaW5lIFNBREJfWF9BQUxHX1NIQTJfMjU2SE1BQyA1CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTQURCX1hfQUFMR19TSEEyXzM4NEhNQUMgNgogI2RlZmluZSBTQURCX1hfQUFMR19TSEEyXzUxMkhNQUMgNwogI2RlZmluZSBTQURCX1hfQUFMR19SSVBFTUQxNjBITUFDIDgKLSNkZWZpbmUgU0FEQl9YX0FBTEdfTlVMTCAyNTEgIAorI2RlZmluZSBTQURCX1hfQUFMR19OVUxMIDI1MQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU0FEQl9BQUxHX01BWCAyNTEKLQogI2RlZmluZSBTQURCX0VBTEdfTk9ORSAwCiAjZGVmaW5lIFNBREJfRUFMR19ERVNDQkMgMgogI2RlZmluZSBTQURCX0VBTEdfM0RFU0NCQyAzCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTQURCX1hfRUFMR19DQVNUQ0JDIDYKICNkZWZpbmUgU0FEQl9YX0VBTEdfQkxPV0ZJU0hDQkMgNwogI2RlZmluZSBTQURCX0VBTEdfTlVMTCAxMQogI2RlZmluZSBTQURCX1hfRUFMR19BRVNDQkMgMTIKLSNkZWZpbmUgU0FEQl9FQUxHX01BWCAyNTMgIAotCi0jZGVmaW5lIFNBREJfWF9FQUxHX1NFUlBFTlRDQkMgMjUyICAKLSNkZWZpbmUgU0FEQl9YX0VBTEdfVFdPRklTSENCQyAyNTMgIAotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBTQURCX0VBTEdfTUFYIDI1MworI2RlZmluZSBTQURCX1hfRUFMR19TRVJQRU5UQ0JDIDI1MgorI2RlZmluZSBTQURCX1hfRUFMR19UV09GSVNIQ0JDIDI1MwogI2RlZmluZSBTQURCX1hfQ0FMR19OT05FIDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNBREJfWF9DQUxHX09VSSAxCiAjZGVmaW5lIFNBREJfWF9DQUxHX0RFRkxBVEUgMgogI2RlZmluZSBTQURCX1hfQ0FMR19MWlMgMwogI2RlZmluZSBTQURCX1hfQ0FMR19MWkpIIDQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNBREJfWF9DQUxHX01BWCA0Ci0KICNkZWZpbmUgU0FEQl9FWFRfUkVTRVJWRUQgMAogI2RlZmluZSBTQURCX0VYVF9TQSAxCiAjZGVmaW5lIFNBREJfRVhUX0xJRkVUSU1FX0NVUlJFTlQgMgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU0FEQl9FWFRfTElGRVRJTUVfSEFSRCAzCiAjZGVmaW5lIFNBREJfRVhUX0xJRkVUSU1FX1NPRlQgNAogI2RlZmluZSBTQURCX0VYVF9BRERSRVNTX1NSQyA1CiAjZGVmaW5lIFNBREJfRVhUX0FERFJFU1NfRFNUIDYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNBREJfRVhUX0FERFJFU1NfUFJPWFkgNwogI2RlZmluZSBTQURCX0VYVF9LRVlfQVVUSCA4CiAjZGVmaW5lIFNBREJfRVhUX0tFWV9FTkNSWVBUIDkKICNkZWZpbmUgU0FEQl9FWFRfSURFTlRJVFlfU1JDIDEwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTQURCX0VYVF9JREVOVElUWV9EU1QgMTEKICNkZWZpbmUgU0FEQl9FWFRfU0VOU0lUSVZJVFkgMTIKICNkZWZpbmUgU0FEQl9FWFRfUFJPUE9TQUwgMTMKICNkZWZpbmUgU0FEQl9FWFRfU1VQUE9SVEVEX0FVVEggMTQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNBREJfRVhUX1NVUFBPUlRFRF9FTkNSWVBUIDE1CiAjZGVmaW5lIFNBREJfRVhUX1NQSVJBTkdFIDE2CiAjZGVmaW5lIFNBREJfWF9FWFRfS01QUklWQVRFIDE3CiAjZGVmaW5lIFNBREJfWF9FWFRfUE9MSUNZIDE4CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTQURCX1hfRVhUX1NBMiAxOQotCiAjZGVmaW5lIFNBREJfWF9FWFRfTkFUX1RfVFlQRSAyMAogI2RlZmluZSBTQURCX1hfRVhUX05BVF9UX1NQT1JUIDIxCiAjZGVmaW5lIFNBREJfWF9FWFRfTkFUX1RfRFBPUlQgMjIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNBREJfWF9FWFRfTkFUX1RfT0EgMjMKICNkZWZpbmUgU0FEQl9YX0VYVF9TRUNfQ1RYIDI0CiAjZGVmaW5lIFNBREJfRVhUX01BWCAyNAotCiAjZGVmaW5lIFNBREJfSURFTlRUWVBFX1JFU0VSVkVEIDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNBREJfSURFTlRUWVBFX1BSRUZJWCAxCiAjZGVmaW5lIFNBREJfSURFTlRUWVBFX0ZRRE4gMgogI2RlZmluZSBTQURCX0lERU5UVFlQRV9VU0VSRlFETiAzCiAjZGVmaW5lIFNBREJfSURFTlRUWVBFX01BWCAzCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9wa3RfY2xzLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvcGt0X2Nscy5oCmluZGV4IGZmYTI5ZjcuLjFhZjUxMmUgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9wa3RfY2xzLmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3BrdF9jbHMuaApAQCAtNyw0MjcgKzcsNDYwIEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfX0xJTlVYX1BLVF9DTFNfSAogI2RlZmluZSBfX0xJTlVYX1BLVF9DTFNfSAotCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9wa3Rfc2NoZWQuaD4KLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX1RDX01BS0UzMih4KSAoKHgpKQotCiAjZGVmaW5lIF9UQ19NQUtFTUFTSzEobikgKF9UQ19NQUtFMzIoMSkgPDwgX1RDX01BS0UzMihuKSkKICNkZWZpbmUgX1RDX01BS0VNQVNLKHYsbikgKF9UQ19NQUtFMzIoKF9UQ19NQUtFMzIoMSk8PCh2KSktMSkgPDwgX1RDX01BS0UzMihuKSkKICNkZWZpbmUgX1RDX01BS0VWQUxVRSh2LG4pIChfVENfTUFLRTMyKHYpIDw8IF9UQ19NQUtFMzIobikpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfVENfR0VUVkFMVUUodixuLG0pICgoX1RDX01BS0UzMih2KSAmIF9UQ19NQUtFMzIobSkpID4+IF9UQ19NQUtFMzIobikpCi0KICNkZWZpbmUgVENfTVVOR0VEIF9UQ19NQUtFTUFTSzEoMCkKICNkZWZpbmUgU0VUX1RDX01VTkdFRCh2KSAoIFRDX01VTkdFRCB8ICh2ICYgflRDX01VTkdFRCkpCiAjZGVmaW5lIENMUl9UQ19NVU5HRUQodikgKCB2ICYgflRDX01VTkdFRCkKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVENfT0syTVVOR0UgX1RDX01BS0VNQVNLMSgxKQogI2RlZmluZSBTRVRfVENfT0syTVVOR0UodikgKCBUQ19PSzJNVU5HRSB8ICh2ICYgflRDX09LMk1VTkdFKSkKICNkZWZpbmUgQ0xSX1RDX09LMk1VTkdFKHYpICggdiAmIH5UQ19PSzJNVU5HRSkKLQogI2RlZmluZSBTX1RDX1ZFUkQgX1RDX01BS0UzMigyKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTV9UQ19WRVJEIF9UQ19NQUtFTUFTSyg0LFNfVENfVkVSRCkKICNkZWZpbmUgR19UQ19WRVJEKHgpIF9UQ19HRVRWQUxVRSh4LFNfVENfVkVSRCxNX1RDX1ZFUkQpCiAjZGVmaW5lIFZfVENfVkVSRCh4KSBfVENfTUFLRVZBTFVFKHgsU19UQ19WRVJEKQogI2RlZmluZSBTRVRfVENfVkVSRCh2LG4pICgoVl9UQ19WRVJEKG4pKSB8ICh2ICYgfk1fVENfVkVSRCkpCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNfVENfRlJPTSBfVENfTUFLRTMyKDYpCiAjZGVmaW5lIE1fVENfRlJPTSBfVENfTUFLRU1BU0soMixTX1RDX0ZST00pCiAjZGVmaW5lIEdfVENfRlJPTSh4KSBfVENfR0VUVkFMVUUoeCxTX1RDX0ZST00sTV9UQ19GUk9NKQogI2RlZmluZSBWX1RDX0ZST00oeCkgX1RDX01BS0VWQUxVRSh4LFNfVENfRlJPTSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNFVF9UQ19GUk9NKHYsbikgKChWX1RDX0ZST00obikpIHwgKHYgJiB+TV9UQ19GUk9NKSkKICNkZWZpbmUgQVRfU1RBQ0sgMHgwCiAjZGVmaW5lIEFUX0lOR1JFU1MgMHgxCiAjZGVmaW5lIEFUX0VHUkVTUyAweDIKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVENfTkNMUyBfVENfTUFLRU1BU0sxKDgpCiAjZGVmaW5lIFNFVF9UQ19OQ0xTKHYpICggVENfTkNMUyB8ICh2ICYgflRDX05DTFMpKQogI2RlZmluZSBDTFJfVENfTkNMUyh2KSAoIHYgJiB+VENfTkNMUykKLQogI2RlZmluZSBTX1RDX1JUVEwgX1RDX01BS0UzMig5KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTV9UQ19SVFRMIF9UQ19NQUtFTUFTSygzLFNfVENfUlRUTCkKICNkZWZpbmUgR19UQ19SVFRMKHgpIF9UQ19HRVRWQUxVRSh4LFNfVENfUlRUTCxNX1RDX1JUVEwpCiAjZGVmaW5lIFZfVENfUlRUTCh4KSBfVENfTUFLRVZBTFVFKHgsU19UQ19SVFRMKQogI2RlZmluZSBTRVRfVENfUlRUTCh2LG4pICgoVl9UQ19SVFRMKG4pKSB8ICh2ICYgfk1fVENfUlRUTCkpCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNfVENfQVQgX1RDX01BS0UzMigxMikKICNkZWZpbmUgTV9UQ19BVCBfVENfTUFLRU1BU0soMixTX1RDX0FUKQogI2RlZmluZSBHX1RDX0FUKHgpIF9UQ19HRVRWQUxVRSh4LFNfVENfQVQsTV9UQ19BVCkKICNkZWZpbmUgVl9UQ19BVCh4KSBfVENfTUFLRVZBTFVFKHgsU19UQ19BVCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNFVF9UQ19BVCh2LG4pICgoVl9UQ19BVChuKSkgfCAodiAmIH5NX1RDX0FUKSkKLQogZW51bQogewogIFRDQV9BQ1RfVU5TUEVDLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBUQ0FfQUNUX0tJTkQsCiAgVENBX0FDVF9PUFRJT05TLAogIFRDQV9BQ1RfSU5ERVgsCiAgVENBX0FDVF9TVEFUUywKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX19UQ0FfQUNUX01BWAogfTsKLQogI2RlZmluZSBUQ0FfQUNUX01BWCBfX1RDQV9BQ1RfTUFYCiAjZGVmaW5lIFRDQV9PTERfQ09NUEFUIChUQ0FfQUNUX01BWCsxKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVENBX0FDVF9NQVhfUFJJTyAzMgogI2RlZmluZSBUQ0FfQUNUX0JJTkQgMQogI2RlZmluZSBUQ0FfQUNUX05PQklORCAwCiAjZGVmaW5lIFRDQV9BQ1RfVU5CSU5EIDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFRDQV9BQ1RfTk9VTkJJTkQgMAogI2RlZmluZSBUQ0FfQUNUX1JFUExBQ0UgMQogI2RlZmluZSBUQ0FfQUNUX05PUkVQTEFDRSAwCiAjZGVmaW5lIE1BWF9SRUNfTE9PUCA0CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNQVhfUkVEX0xPT1AgNAotCiAjZGVmaW5lIFRDX0FDVF9VTlNQRUMgKC0xKQogI2RlZmluZSBUQ19BQ1RfT0sgMAogI2RlZmluZSBUQ19BQ1RfUkVDTEFTU0lGWSAxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBUQ19BQ1RfU0hPVCAyCiAjZGVmaW5lIFRDX0FDVF9QSVBFIDMKICNkZWZpbmUgVENfQUNUX1NUT0xFTiA0CiAjZGVmaW5lIFRDX0FDVF9RVUVVRUQgNQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVENfQUNUX1JFUEVBVCA2CiAjZGVmaW5lIFRDX0FDVF9KVU1QIDB4MTAwMDAwMDAKLQogZW51bQogeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBUQ0FfSURfVU5TUEVDPTAsCiAgVENBX0lEX1BPTElDRT0xLAotCiAgX19UQ0FfSURfTUFYPTI1NQogfTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVENBX0lEX01BWCBfX1RDQV9JRF9NQVgKLQogc3RydWN0IHRjX3BvbGljZQogewogIF9fdTMyIGluZGV4OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBpbnQgYWN0aW9uOwogI2RlZmluZSBUQ19QT0xJQ0VfVU5TUEVDIFRDX0FDVF9VTlNQRUMKICNkZWZpbmUgVENfUE9MSUNFX09LIFRDX0FDVF9PSwogI2RlZmluZSBUQ19QT0xJQ0VfUkVDTEFTU0lGWSBUQ19BQ1RfUkVDTEFTU0lGWQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVENfUE9MSUNFX1NIT1QgVENfQUNUX1NIT1QKICNkZWZpbmUgVENfUE9MSUNFX1BJUEUgVENfQUNUX1BJUEUKLQogIF9fdTMyIGxpbWl0OwogIF9fdTMyIGJ1cnN0OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBtdHU7CiAgc3RydWN0IHRjX3JhdGVzcGVjIHJhdGU7CiAgc3RydWN0IHRjX3JhdGVzcGVjIHBlYWtyYXRlOwogIGludCByZWZjbnQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGludCBiaW5kY250OwogIF9fdTMyIGNhcGFiOwogfTsKLQogc3RydWN0IHRjZl90CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogewogIF9fdTY0IGluc3RhbGw7CiAgX191NjQgbGFzdHVzZTsKICBfX3U2NCBleHBpcmVzOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07Ci0KIHN0cnVjdCB0Y19jbnQKIHsKICBpbnQgcmVmY250OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBpbnQgYmluZGNudDsKIH07Ci0KICNkZWZpbmUgdGNfZ2VuICAgX191MzIgaW5kZXg7ICAgX191MzIgY2FwYWI7ICAgaW50IGFjdGlvbjsgICBpbnQgcmVmY250OyAgIGludCBiaW5kY250Ci0KIGVudW0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB7CiAgVENBX1BPTElDRV9VTlNQRUMsCiAgVENBX1BPTElDRV9UQkYsCiAgVENBX1BPTElDRV9SQVRFLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBUQ0FfUE9MSUNFX1BFQUtSQVRFLAogIFRDQV9QT0xJQ0VfQVZSQVRFLAogIFRDQV9QT0xJQ0VfUkVTVUxULAogIF9fVENBX1BPTElDRV9NQVgKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFRDQV9QT0xJQ0VfUkVTVUxUIFRDQV9QT0xJQ0VfUkVTVUxUCiB9OwotCiAjZGVmaW5lIFRDQV9QT0xJQ0VfTUFYIChfX1RDQV9QT0xJQ0VfTUFYIC0gMSkKLQogI2RlZmluZSBUQ19VMzJfSFRJRChoKSAoKGgpJjB4RkZGMDAwMDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBUQ19VMzJfVVNFUkhUSUQoaCkgKFRDX1UzMl9IVElEKGgpPj4yMCkKICNkZWZpbmUgVENfVTMyX0hBU0goaCkgKCgoaCk+PjEyKSYweEZGKQogI2RlZmluZSBUQ19VMzJfTk9ERShoKSAoKGgpJjB4RkZGKQogI2RlZmluZSBUQ19VMzJfS0VZKGgpICgoaCkmMHhGRkZGRikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFRDX1UzMl9VTlNQRUMgMAogI2RlZmluZSBUQ19VMzJfUk9PVCAoMHhGRkYwMDAwMCkKLQogZW51bQogeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBUQ0FfVTMyX1VOU1BFQywKICBUQ0FfVTMyX0NMQVNTSUQsCiAgVENBX1UzMl9IQVNILAogIFRDQV9VMzJfTElOSywKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVENBX1UzMl9ESVZJU09SLAogIFRDQV9VMzJfU0VMLAogIFRDQV9VMzJfUE9MSUNFLAogIFRDQV9VMzJfQUNULAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBUQ0FfVTMyX0lOREVWLAogIFRDQV9VMzJfUENOVCwKICBUQ0FfVTMyX01BUkssCiAgX19UQ0FfVTMyX01BWAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07Ci0KICNkZWZpbmUgVENBX1UzMl9NQVggKF9fVENBX1UzMl9NQVggLSAxKQotCiBzdHJ1Y3QgdGNfdTMyX2tleQogeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX2JlMzIgbWFzazsKICBfX2JlMzIgdmFsOwogIGludCBvZmY7CiAgaW50IG9mZm1hc2s7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKLQogc3RydWN0IHRjX3UzMl9zZWwKIHsKICB1bnNpZ25lZCBjaGFyIGZsYWdzOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBjaGFyIG9mZnNoaWZ0OwogIHVuc2lnbmVkIGNoYXIgbmtleXM7Ci0KICBfX2JlMTYgb2ZmbWFzazsKICBfX3UxNiBvZmY7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHNob3J0IG9mZm9mZjsKLQogIHNob3J0IGhvZmY7CiAgX19iZTMyIGhtYXNrOwogIHN0cnVjdCB0Y191MzJfa2V5IGtleXNbMF07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKLQogc3RydWN0IHRjX3UzMl9tYXJrCiB7CiAgX191MzIgdmFsOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBtYXNrOwogIF9fdTMyIHN1Y2Nlc3M7CiB9OwotCiBzdHJ1Y3QgdGNfdTMyX3BjbnQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB7CiAgX191NjQgcmNudDsKICBfX3U2NCByaGl0OwogIF9fdTY0IGtjbnRzWzBdOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07Ci0KICNkZWZpbmUgVENfVTMyX1RFUk1JTkFMIDEKICNkZWZpbmUgVENfVTMyX09GRlNFVCAyCiAjZGVmaW5lIFRDX1UzMl9WQVJPRkZTRVQgNAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVENfVTMyX0VBVCA4Ci0KICNkZWZpbmUgVENfVTMyX01BWERFUFRIIDgKLQogZW51bQogeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBUQ0FfUlNWUF9VTlNQRUMsCiAgVENBX1JTVlBfQ0xBU1NJRCwKICBUQ0FfUlNWUF9EU1QsCiAgVENBX1JTVlBfU1JDLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBUQ0FfUlNWUF9QSU5GTywKICBUQ0FfUlNWUF9QT0xJQ0UsCiAgVENBX1JTVlBfQUNULAogIF9fVENBX1JTVlBfTUFYCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKLQogI2RlZmluZSBUQ0FfUlNWUF9NQVggKF9fVENBX1JTVlBfTUFYIC0gMSApCi0KIHN0cnVjdCB0Y19yc3ZwX2dwaQogeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBrZXk7CiAgX191MzIgbWFzazsKICBpbnQgb2Zmc2V0OwogfTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCB0Y19yc3ZwX3BpbmZvCiB7CiAgc3RydWN0IHRjX3JzdnBfZ3BpIGRwaTsKICBzdHJ1Y3QgdGNfcnN2cF9ncGkgc3BpOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IHByb3RvY29sOwogIF9fdTggdHVubmVsaWQ7CiAgX191OCB0dW5uZWxoZHI7CiAgX191OCBwYWQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKLQogZW51bQogewogIFRDQV9ST1VURTRfVU5TUEVDLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBUQ0FfUk9VVEU0X0NMQVNTSUQsCiAgVENBX1JPVVRFNF9UTywKICBUQ0FfUk9VVEU0X0ZST00sCiAgVENBX1JPVVRFNF9JSUYsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFRDQV9ST1VURTRfUE9MSUNFLAogIFRDQV9ST1VURTRfQUNULAogIF9fVENBX1JPVVRFNF9NQVgKIH07Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFRDQV9ST1VURTRfTUFYIChfX1RDQV9ST1VURTRfTUFYIC0gMSkKLQogZW51bQogewogIFRDQV9GV19VTlNQRUMsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFRDQV9GV19DTEFTU0lELAogIFRDQV9GV19QT0xJQ0UsCiAgVENBX0ZXX0lOREVWLAogIFRDQV9GV19BQ1QsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFRDQV9GV19NQVNLLAogIF9fVENBX0ZXX01BWAogfTsKLQogI2RlZmluZSBUQ0FfRldfTUFYIChfX1RDQV9GV19NQVggLSAxKQotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogZW51bQogewogIFRDQV9UQ0lOREVYX1VOU1BFQywKICBUQ0FfVENJTkRFWF9IQVNILAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBUQ0FfVENJTkRFWF9NQVNLLAogIFRDQV9UQ0lOREVYX1NISUZULAogIFRDQV9UQ0lOREVYX0ZBTExfVEhST1VHSCwKICBUQ0FfVENJTkRFWF9DTEFTU0lELAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBUQ0FfVENJTkRFWF9QT0xJQ0UsCiAgVENBX1RDSU5ERVhfQUNULAogIF9fVENBX1RDSU5ERVhfTUFYCiB9OwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBUQ0FfVENJTkRFWF9NQVggKF9fVENBX1RDSU5ERVhfTUFYIC0gMSkKLQogZW51bQogewogIEZMT1dfS0VZX1NSQywKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgRkxPV19LRVlfRFNULAogIEZMT1dfS0VZX1BST1RPLAogIEZMT1dfS0VZX1BST1RPX1NSQywKICBGTE9XX0tFWV9QUk9UT19EU1QsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIEZMT1dfS0VZX0lJRiwKICBGTE9XX0tFWV9QUklPUklUWSwKICBGTE9XX0tFWV9NQVJLLAogIEZMT1dfS0VZX05GQ1QsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIEZMT1dfS0VZX05GQ1RfU1JDLAogIEZMT1dfS0VZX05GQ1RfRFNULAogIEZMT1dfS0VZX05GQ1RfUFJPVE9fU1JDLAogIEZMT1dfS0VZX05GQ1RfUFJPVE9fRFNULAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBGTE9XX0tFWV9SVENMQVNTSUQsCiAgRkxPV19LRVlfU0tVSUQsCiAgRkxPV19LRVlfU0tHSUQsCiAgRkxPV19LRVlfVkxBTl9UQUcsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fRkxPV19LRVlfTUFYLAogfTsKLQogI2RlZmluZSBGTE9XX0tFWV9NQVggKF9fRkxPV19LRVlfTUFYIC0gMSkKLQogZW51bQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHsKICBGTE9XX01PREVfTUFQLAogIEZMT1dfTU9ERV9IQVNILAogfTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIGVudW0KIHsKICBUQ0FfRkxPV19VTlNQRUMsCiAgVENBX0ZMT1dfS0VZUywKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVENBX0ZMT1dfTU9ERSwKICBUQ0FfRkxPV19CQVNFQ0xBU1MsCiAgVENBX0ZMT1dfUlNISUZULAogIFRDQV9GTE9XX0FEREVORCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVENBX0ZMT1dfTUFTSywKICBUQ0FfRkxPV19YT1IsCiAgVENBX0ZMT1dfRElWSVNPUiwKICBUQ0FfRkxPV19BQ1QsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFRDQV9GTE9XX1BPTElDRSwKICBUQ0FfRkxPV19FTUFUQ0hFUywKICBUQ0FfRkxPV19QRVJUVVJCLAogIF9fVENBX0ZMT1dfTUFYCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKLQogI2RlZmluZSBUQ0FfRkxPV19NQVggKF9fVENBX0ZMT1dfTUFYIC0gMSkKLQogZW51bQogeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBUQ0FfQkFTSUNfVU5TUEVDLAogIFRDQV9CQVNJQ19DTEFTU0lELAogIFRDQV9CQVNJQ19FTUFUQ0hFUywKICBUQ0FfQkFTSUNfQUNULAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBUQ0FfQkFTSUNfUE9MSUNFLAogIF9fVENBX0JBU0lDX01BWAogfTsKLQogI2RlZmluZSBUQ0FfQkFTSUNfTUFYIChfX1RDQV9CQVNJQ19NQVggLSAxKQotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogZW51bQogewogIFRDQV9DR1JPVVBfVU5TUEVDLAogIFRDQV9DR1JPVVBfQUNULAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBUQ0FfQ0dST1VQX1BPTElDRSwKICBUQ0FfQ0dST1VQX0VNQVRDSEVTLAogIF9fVENBX0NHUk9VUF9NQVgsCiB9OwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBUQ0FfQ0dST1VQX01BWCAoX19UQ0FfQ0dST1VQX01BWCAtIDEpCi0KIHN0cnVjdCB0Y2ZfZW1hdGNoX3RyZWVfaGRyCiB7CiAgX191MTYgbm1hdGNoZXM7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTE2IHByb2dpZDsKIH07Ci0KIGVudW0KIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVENBX0VNQVRDSF9UUkVFX1VOU1BFQywKICBUQ0FfRU1BVENIX1RSRUVfSERSLAogIFRDQV9FTUFUQ0hfVFJFRV9MSVNULAogIF9fVENBX0VNQVRDSF9UUkVFX01BWAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiAjZGVmaW5lIFRDQV9FTUFUQ0hfVFJFRV9NQVggKF9fVENBX0VNQVRDSF9UUkVFX01BWCAtIDEpCi0KIHN0cnVjdCB0Y2ZfZW1hdGNoX2hkcgogeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UxNiBtYXRjaGlkOwogIF9fdTE2IGtpbmQ7CiAgX191MTYgZmxhZ3M7CiAgX191MTYgcGFkOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07Ci0KICNkZWZpbmUgVENGX0VNX1JFTF9FTkQgMAogI2RlZmluZSBUQ0ZfRU1fUkVMX0FORCAoMTw8MCkKICNkZWZpbmUgVENGX0VNX1JFTF9PUiAoMTw8MSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFRDRl9FTV9JTlZFUlQgKDE8PDIpCiAjZGVmaW5lIFRDRl9FTV9TSU1QTEUgKDE8PDMpCi0KICNkZWZpbmUgVENGX0VNX1JFTF9NQVNLIDMKICNkZWZpbmUgVENGX0VNX1JFTF9WQUxJRCh2KSAoKCh2KSAmIFRDRl9FTV9SRUxfTUFTSykgIT0gVENGX0VNX1JFTF9NQVNLKQotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogZW51bQogewogIFRDRl9MQVlFUl9MSU5LLAogIFRDRl9MQVlFUl9ORVRXT1JLLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBUQ0ZfTEFZRVJfVFJBTlNQT1JULAogIF9fVENGX0xBWUVSX01BWAogfTsKICNkZWZpbmUgVENGX0xBWUVSX01BWCAoX19UQ0ZfTEFZRVJfTUFYIC0gMSkKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVENGX0VNX0NPTlRBSU5FUiAwCiAjZGVmaW5lIFRDRl9FTV9DTVAgMQogI2RlZmluZSBUQ0ZfRU1fTkJZVEUgMgogI2RlZmluZSBUQ0ZfRU1fVTMyIDMKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFRDRl9FTV9NRVRBIDQKICNkZWZpbmUgVENGX0VNX1RFWFQgNQogI2RlZmluZSBUQ0ZfRU1fVkxBTiA2CiAjZGVmaW5lIFRDRl9FTV9NQVggNgotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogZW51bQogewogIFRDRl9FTV9QUk9HX1RDCiB9OwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogZW51bQogewogIFRDRl9FTV9PUE5EX0VRLAogIFRDRl9FTV9PUE5EX0dULAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBUQ0ZfRU1fT1BORF9MVAogfTsKLQogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvcGt0X3NjaGVkLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvcGt0X3NjaGVkLmgKaW5kZXggMGIyOTY2YS4uMzNjNGRiNiAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3BrdF9zY2hlZC5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9wa3Rfc2NoZWQuaApAQCAtNyw0NDcgKzcsNDg0IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfX0xJTlVYX1BLVF9TQ0hFRF9ICiAjZGVmaW5lIF9fTElOVVhfUEtUX1NDSEVEX0gKLQogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0KICNkZWZpbmUgVENfUFJJT19CRVNURUZGT1JUIDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFRDX1BSSU9fRklMTEVSIDEKICNkZWZpbmUgVENfUFJJT19CVUxLIDIKICNkZWZpbmUgVENfUFJJT19JTlRFUkFDVElWRV9CVUxLIDQKICNkZWZpbmUgVENfUFJJT19JTlRFUkFDVElWRSA2CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBUQ19QUklPX0NPTlRST0wgNwotCiAjZGVmaW5lIFRDX1BSSU9fTUFYIDE1Ci0KIHN0cnVjdCB0Y19zdGF0cwogeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U2NCBieXRlczsKICBfX3UzMiBwYWNrZXRzOwogIF9fdTMyIGRyb3BzOwogIF9fdTMyIG92ZXJsaW1pdHM7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGJwczsKICBfX3UzMiBwcHM7CiAgX191MzIgcWxlbjsKICBfX3UzMiBiYWNrbG9nOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07Ci0KIHN0cnVjdCB0Y19lc3RpbWF0b3IKIHsKICBzaWduZWQgY2hhciBpbnRlcnZhbDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgY2hhciBld21hX2xvZzsKIH07Ci0KICNkZWZpbmUgVENfSF9NQUpfTUFTSyAoMHhGRkZGMDAwMFUpCiAjZGVmaW5lIFRDX0hfTUlOX01BU0sgKDB4MDAwMEZGRkZVKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVENfSF9NQUooaCkgKChoKSZUQ19IX01BSl9NQVNLKQogI2RlZmluZSBUQ19IX01JTihoKSAoKGgpJlRDX0hfTUlOX01BU0spCiAjZGVmaW5lIFRDX0hfTUFLRShtYWosbWluKSAoKChtYWopJlRDX0hfTUFKX01BU0spfCgobWluKSZUQ19IX01JTl9NQVNLKSkKLQogI2RlZmluZSBUQ19IX1VOU1BFQyAoMFUpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBUQ19IX1JPT1QgKDB4RkZGRkZGRkZVKQogI2RlZmluZSBUQ19IX0lOR1JFU1MgKDB4RkZGRkZGRjFVKQotCiBzdHJ1Y3QgdGNfcmF0ZXNwZWMKIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgY2hhciBjZWxsX2xvZzsKICB1bnNpZ25lZCBjaGFyIF9fcmVzZXJ2ZWQ7CiAgdW5zaWduZWQgc2hvcnQgb3ZlcmhlYWQ7CiAgc2hvcnQgY2VsbF9hbGlnbjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgc2hvcnQgbXB1OwogIF9fdTMyIHJhdGU7CiB9OwotCiAjZGVmaW5lIFRDX1JUQUJfU0laRSAxMDI0Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgdGNfc2l6ZXNwZWMgewogIHVuc2lnbmVkIGNoYXIgY2VsbF9sb2c7CiAgdW5zaWduZWQgY2hhciBzaXplX2xvZzsKICBzaG9ydCBjZWxsX2FsaWduOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBpbnQgb3ZlcmhlYWQ7CiAgdW5zaWduZWQgaW50IGxpbmtsYXllcjsKICB1bnNpZ25lZCBpbnQgbXB1OwogIHVuc2lnbmVkIGludCBtdHU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGludCB0c2l6ZTsKIH07Ci0KIGVudW0gewogIFRDQV9TVEFCX1VOU1BFQywKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVENBX1NUQUJfQkFTRSwKICBUQ0FfU1RBQl9EQVRBLAogIF9fVENBX1NUQUJfTUFYCiB9OwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBUQ0FfU1RBQl9NQVggKF9fVENBX1NUQUJfTUFYIC0gMSkKLQogc3RydWN0IHRjX2ZpZm9fcW9wdAogewogIF9fdTMyIGxpbWl0OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07Ci0KICNkZWZpbmUgVENRX1BSSU9fQkFORFMgMTYKICNkZWZpbmUgVENRX01JTl9QUklPX0JBTkRTIDIKLQogc3RydWN0IHRjX3ByaW9fcW9wdAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHsKICBpbnQgYmFuZHM7CiAgX191OCBwcmlvbWFwW1RDX1BSSU9fTUFYKzFdOwogfTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCB0Y19tdWx0aXFfcW9wdCB7CiAgX191MTYgYmFuZHM7CiAgX191MTYgbWF4X2JhbmRzOwogfTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCB0Y190YmZfcW9wdAogewogIHN0cnVjdCB0Y19yYXRlc3BlYyByYXRlOwogIHN0cnVjdCB0Y19yYXRlc3BlYyBwZWFrcmF0ZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgbGltaXQ7CiAgX191MzIgYnVmZmVyOwogIF9fdTMyIG10dTsKIH07Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBlbnVtCiB7CiAgVENBX1RCRl9VTlNQRUMsCiAgVENBX1RCRl9QQVJNUywKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVENBX1RCRl9SVEFCLAogIFRDQV9UQkZfUFRBQiwKICBfX1RDQV9UQkZfTUFYLAogfTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVENBX1RCRl9NQVggKF9fVENBX1RCRl9NQVggLSAxKQotCiBzdHJ1Y3QgdGNfc2ZxX3FvcHQKIHsKICB1bnNpZ25lZCBxdWFudHVtOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBpbnQgcGVydHVyYl9wZXJpb2Q7CiAgX191MzIgbGltaXQ7CiAgdW5zaWduZWQgZGl2aXNvcjsKICB1bnNpZ25lZCBmbG93czsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwotCiBzdHJ1Y3QgdGNfc2ZxX3hzdGF0cwogewogIF9fczMyIGFsbG90OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07Ci0KIGVudW0KIHsKICBUQ0FfUkVEX1VOU1BFQywKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVENBX1JFRF9QQVJNUywKICBUQ0FfUkVEX1NUQUIsCiAgX19UQ0FfUkVEX01BWCwKIH07Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFRDQV9SRURfTUFYIChfX1RDQV9SRURfTUFYIC0gMSkKLQogc3RydWN0IHRjX3JlZF9xb3B0CiB7CiAgX191MzIgbGltaXQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHF0aF9taW47CiAgX191MzIgcXRoX21heDsKICB1bnNpZ25lZCBjaGFyIFdsb2c7CiAgdW5zaWduZWQgY2hhciBQbG9nOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBjaGFyIFNjZWxsX2xvZzsKICB1bnNpZ25lZCBjaGFyIGZsYWdzOwogI2RlZmluZSBUQ19SRURfRUNOIDEKICNkZWZpbmUgVENfUkVEX0hBUkREUk9QIDIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwotCiBzdHJ1Y3QgdGNfcmVkX3hzdGF0cwogewogIF9fdTMyIGVhcmx5OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBwZHJvcDsKICBfX3UzMiBvdGhlcjsKICBfX3UzMiBtYXJrZWQ7CiB9OwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNQVhfRFBzIDE2Ci0KIGVudW0KIHsKICBUQ0FfR1JFRF9VTlNQRUMsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFRDQV9HUkVEX1BBUk1TLAogIFRDQV9HUkVEX1NUQUIsCiAgVENBX0dSRURfRFBTLAogIF9fVENBX0dSRURfTUFYLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07Ci0KICNkZWZpbmUgVENBX0dSRURfTUFYIChfX1RDQV9HUkVEX01BWCAtIDEpCi0KIHN0cnVjdCB0Y19ncmVkX3FvcHQKIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgbGltaXQ7CiAgX191MzIgcXRoX21pbjsKICBfX3UzMiBxdGhfbWF4OwogIF9fdTMyIERQOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBiYWNrbG9nOwogIF9fdTMyIHFhdmU7CiAgX191MzIgZm9yY2VkOwogIF9fdTMyIGVhcmx5OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBvdGhlcjsKICBfX3UzMiBwZHJvcDsKICBfX3U4IFdsb2c7CiAgX191OCBQbG9nOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IFNjZWxsX2xvZzsKICBfX3U4IHByaW87CiAgX191MzIgcGFja2V0czsKICBfX3UzMiBieXRlc2luOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07Ci0KIHN0cnVjdCB0Y19ncmVkX3NvcHQKIHsKICBfX3UzMiBEUHM7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGRlZl9EUDsKICBfX3U4IGdyaW87CiAgX191OCBmbGFnczsKICBfX3UxNiBwYWQxOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07Ci0KICNkZWZpbmUgVENfSFRCX05VTVBSSU8gOAogI2RlZmluZSBUQ19IVEJfTUFYREVQVEggOAotI2RlZmluZSBUQ19IVEJfUFJPVE9WRVIgMyAgCi0KKyNkZWZpbmUgVENfSFRCX1BST1RPVkVSIDMKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgdGNfaHRiX29wdAogewogIHN0cnVjdCB0Y19yYXRlc3BlYyByYXRlOwogIHN0cnVjdCB0Y19yYXRlc3BlYyBjZWlsOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBidWZmZXI7CiAgX191MzIgY2J1ZmZlcjsKICBfX3UzMiBxdWFudHVtOwogIF9fdTMyIGxldmVsOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBwcmlvOwogfTsKIHN0cnVjdCB0Y19odGJfZ2xvYgogeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiB2ZXJzaW9uOwogIF9fdTMyIHJhdGUycXVhbnR1bTsKICBfX3UzMiBkZWZjbHM7CiAgX191MzIgZGVidWc7Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgZGlyZWN0X3BrdHM7CiB9OwogZW51bQogeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBUQ0FfSFRCX1VOU1BFQywKICBUQ0FfSFRCX1BBUk1TLAogIFRDQV9IVEJfSU5JVCwKICBUQ0FfSFRCX0NUQUIsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFRDQV9IVEJfUlRBQiwKICBfX1RDQV9IVEJfTUFYLAogfTsKLQogI2RlZmluZSBUQ0FfSFRCX01BWCAoX19UQ0FfSFRCX01BWCAtIDEpCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgdGNfaHRiX3hzdGF0cwogewogIF9fdTMyIGxlbmRzOwogIF9fdTMyIGJvcnJvd3M7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGdpYW50czsKICBfX3UzMiB0b2tlbnM7CiAgX191MzIgY3Rva2VuczsKIH07Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgdGNfaGZzY19xb3B0CiB7CiAgX191MTYgZGVmY2xzOwogfTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCB0Y19zZXJ2aWNlX2N1cnZlCiB7CiAgX191MzIgbTE7CiAgX191MzIgZDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgbTI7CiB9OwotCiBzdHJ1Y3QgdGNfaGZzY19zdGF0cwogeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U2NCB3b3JrOwogIF9fdTY0IHJ0d29yazsKICBfX3UzMiBwZXJpb2Q7CiAgX191MzIgbGV2ZWw7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKLQogZW51bQogewogIFRDQV9IRlNDX1VOU1BFQywKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVENBX0hGU0NfUlNDLAogIFRDQV9IRlNDX0ZTQywKICBUQ0FfSEZTQ19VU0MsCiAgX19UQ0FfSEZTQ19NQVgsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKLQogI2RlZmluZSBUQ0FfSEZTQ19NQVggKF9fVENBX0hGU0NfTUFYIC0gMSkKLQogI2RlZmluZSBUQ19DQlFfTUFYUFJJTyA4CiAjZGVmaW5lIFRDX0NCUV9NQVhMRVZFTCA4CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBUQ19DQlFfREVGX0VXTUEgNQotCiBzdHJ1Y3QgdGNfY2JxX2xzc29wdAogewogIHVuc2lnbmVkIGNoYXIgY2hhbmdlOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBjaGFyIGZsYWdzOwogI2RlZmluZSBUQ0ZfQ0JRX0xTU19CT1VOREVEIDEKICNkZWZpbmUgVENGX0NCUV9MU1NfSVNPTEFURUQgMgogIHVuc2lnbmVkIGNoYXIgZXdtYV9sb2c7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGNoYXIgbGV2ZWw7CiAjZGVmaW5lIFRDRl9DQlFfTFNTX0ZMQUdTIDEKICNkZWZpbmUgVENGX0NCUV9MU1NfRVdNQSAyCiAjZGVmaW5lIFRDRl9DQlFfTFNTX01BWElETEUgNAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVENGX0NCUV9MU1NfTUlOSURMRSA4CiAjZGVmaW5lIFRDRl9DQlFfTFNTX09GRlRJTUUgMHgxMAogI2RlZmluZSBUQ0ZfQ0JRX0xTU19BVlBLVCAweDIwCiAgX191MzIgbWF4aWRsZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgbWluaWRsZTsKICBfX3UzMiBvZmZ0aW1lOwogIF9fdTMyIGF2cGt0OwogfTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCB0Y19jYnFfd3Jyb3B0CiB7CiAgdW5zaWduZWQgY2hhciBmbGFnczsKICB1bnNpZ25lZCBjaGFyIHByaW9yaXR5OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBjaGFyIGNwcmlvcml0eTsKICB1bnNpZ25lZCBjaGFyIF9fcmVzZXJ2ZWQ7CiAgX191MzIgYWxsb3Q7CiAgX191MzIgd2VpZ2h0OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07Ci0KIHN0cnVjdCB0Y19jYnFfb3ZsCiB7CiAgdW5zaWduZWQgY2hhciBzdHJhdGVneTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFRDX0NCUV9PVkxfQ0xBU1NJQyAwCiAjZGVmaW5lIFRDX0NCUV9PVkxfREVMQVkgMQogI2RlZmluZSBUQ19DQlFfT1ZMX0xPV1BSSU8gMgogI2RlZmluZSBUQ19DQlFfT1ZMX0RST1AgMworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVENfQ0JRX09WTF9SQ0xBU1NJQyA0CiAgdW5zaWduZWQgY2hhciBwcmlvcml0eTI7CiAgX191MTYgcGFkOwogIF9fdTMyIHBlbmFsdHk7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKLQogc3RydWN0IHRjX2NicV9wb2xpY2UKIHsKICB1bnNpZ25lZCBjaGFyIHBvbGljZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgY2hhciBfX3JlczE7CiAgdW5zaWduZWQgc2hvcnQgX19yZXMyOwogfTsKLQogc3RydWN0IHRjX2NicV9mb3B0CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogewogIF9fdTMyIHNwbGl0OwogIF9fdTMyIGRlZm1hcDsKICBfX3UzMiBkZWZjaGFuZ2U7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKLQogc3RydWN0IHRjX2NicV94c3RhdHMKIHsKICBfX3UzMiBib3Jyb3dzOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBvdmVyYWN0aW9uczsKICBfX3MzMiBhdmdpZGxlOwogIF9fczMyIHVuZGVydGltZTsKIH07Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBlbnVtCiB7CiAgVENBX0NCUV9VTlNQRUMsCiAgVENBX0NCUV9MU1NPUFQsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFRDQV9DQlFfV1JST1BULAogIFRDQV9DQlFfRk9QVCwKICBUQ0FfQ0JRX09WTF9TVFJBVEVHWSwKICBUQ0FfQ0JRX1JBVEUsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFRDQV9DQlFfUlRBQiwKICBUQ0FfQ0JRX1BPTElDRSwKICBfX1RDQV9DQlFfTUFYLAogfTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVENBX0NCUV9NQVggKF9fVENBX0NCUV9NQVggLSAxKQotCiBlbnVtIHsKICBUQ0FfRFNNQVJLX1VOU1BFQywKICBUQ0FfRFNNQVJLX0lORElDRVMsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFRDQV9EU01BUktfREVGQVVMVF9JTkRFWCwKICBUQ0FfRFNNQVJLX1NFVF9UQ19JTkRFWCwKICBUQ0FfRFNNQVJLX01BU0ssCiAgVENBX0RTTUFSS19WQUxVRSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX19UQ0FfRFNNQVJLX01BWCwKIH07Ci0KICNkZWZpbmUgVENBX0RTTUFSS19NQVggKF9fVENBX0RTTUFSS19NQVggLSAxKQotCiBlbnVtIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVENBX0FUTV9VTlNQRUMsCiAgVENBX0FUTV9GRCwKICBUQ0FfQVRNX1BUUiwKICBUQ0FfQVRNX0hEUiwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVENBX0FUTV9FWENFU1MsCiAgVENBX0FUTV9BRERSLAogIFRDQV9BVE1fU1RBVEUsCiAgX19UQ0FfQVRNX01BWCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwotCiAjZGVmaW5lIFRDQV9BVE1fTUFYIChfX1RDQV9BVE1fTUFYIC0gMSkKLQogZW51bQogeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBUQ0FfTkVURU1fVU5TUEVDLAogIFRDQV9ORVRFTV9DT1JSLAogIFRDQV9ORVRFTV9ERUxBWV9ESVNULAogIFRDQV9ORVRFTV9SRU9SREVSLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBUQ0FfTkVURU1fQ09SUlVQVCwKICBfX1RDQV9ORVRFTV9NQVgsCiB9OwotCiAjZGVmaW5lIFRDQV9ORVRFTV9NQVggKF9fVENBX05FVEVNX01BWCAtIDEpCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgdGNfbmV0ZW1fcW9wdAogewogIF9fdTMyIGxhdGVuY3k7CiAgX191MzIgbGltaXQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGxvc3M7CiAgX191MzIgZ2FwOwogIF9fdTMyIGR1cGxpY2F0ZTsKICBfX3UzMiBqaXR0ZXI7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKLQogc3RydWN0IHRjX25ldGVtX2NvcnIKIHsKICBfX3UzMiBkZWxheV9jb3JyOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBsb3NzX2NvcnI7CiAgX191MzIgZHVwX2NvcnI7CiB9OwotCiBzdHJ1Y3QgdGNfbmV0ZW1fcmVvcmRlcgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHsKICBfX3UzMiBwcm9iYWJpbGl0eTsKICBfX3UzMiBjb3JyZWxhdGlvbjsKIH07Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgdGNfbmV0ZW1fY29ycnVwdAogewogIF9fdTMyIHByb2JhYmlsaXR5OwogIF9fdTMyIGNvcnJlbGF0aW9uOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07Ci0KICNkZWZpbmUgTkVURU1fRElTVF9TQ0FMRSA4MTkyCi0KIGVudW0KIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVENBX0RSUl9VTlNQRUMsCiAgVENBX0RSUl9RVUFOVFVNLAogIF9fVENBX0RSUl9NQVgKIH07Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFRDQV9EUlJfTUFYIChfX1RDQV9EUlJfTUFYIC0gMSkKLQogc3RydWN0IHRjX2Rycl9zdGF0cwogewogIF9fdTMyIGRlZmljaXQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKLQogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvcGxhdGZvcm1fZGV2aWNlLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvcGxhdGZvcm1fZGV2aWNlLmgKaW5kZXggYTc2MWI1Yi4uMjgyMjNmZSAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3BsYXRmb3JtX2RldmljZS5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9wbGF0Zm9ybV9kZXZpY2UuaApAQCAtNywzMyArNywzOSBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX1BMQVRGT1JNX0RFVklDRV9IXwogI2RlZmluZSBfUExBVEZPUk1fREVWSUNFX0hfCi0KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KLQogc3RydWN0IHBsYXRmb3JtX2RldmljZSB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGNvbnN0IGNoYXIgKiBuYW1lOwogIHUzMiBpZDsKICBzdHJ1Y3QgZGV2aWNlIGRldjsKICB1MzIgbnVtX3Jlc291cmNlczsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IHJlc291cmNlICogcmVzb3VyY2U7CiB9OwotCiAjZGVmaW5lIHRvX3BsYXRmb3JtX2RldmljZSh4KSBjb250YWluZXJfb2YoKHgpLCBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlLCBkZXYpCi0KIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBpbnQgKCpwcm9iZSkoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqKTsKICBpbnQgKCpyZW1vdmUpKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKik7CiAgdm9pZCAoKnNodXRkb3duKShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICopOwogIGludCAoKnN1c3BlbmQpKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKiwgcG1fbWVzc2FnZV90IHN0YXRlKTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgaW50ICgqcmVzdW1lKShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICopOwogIHN0cnVjdCBkZXZpY2VfZHJpdmVyIGRyaXZlcjsKIH07Ci0KICNkZWZpbmUgcGxhdGZvcm1fZ2V0X2RydmRhdGEoX2RldikgZGV2X2dldF9kcnZkYXRhKCYoX2RldiktPmRldikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIHBsYXRmb3JtX3NldF9kcnZkYXRhKF9kZXYsZGF0YSkgZGV2X3NldF9kcnZkYXRhKCYoX2RldiktPmRldiwgKGRhdGEpKQotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9wbGlzdC5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3BsaXN0LmgKaW5kZXggNWQ2NTc4My4uMDFmNjNkNyAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3BsaXN0LmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3BsaXN0LmgKQEAgLTcsMzggKzcsMzkgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9MSU5VWF9QTElTVF9IXwogI2RlZmluZSBfTElOVVhfUExJU1RfSF8KLQogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2tfdHlwZXMuaD4KLQogc3RydWN0IHBsaXN0X2hlYWQgewogIHN0cnVjdCBsaXN0X2hlYWQgcHJpb19saXN0OwogIHN0cnVjdCBsaXN0X2hlYWQgbm9kZV9saXN0OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07Ci0KIHN0cnVjdCBwbGlzdF9ub2RlIHsKICBpbnQgcHJpbzsKICBzdHJ1Y3QgcGxpc3RfaGVhZCBwbGlzdDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwotCiAjZGVmaW5lIFBMSVNUX0hFQURfTE9DS19JTklUKF9sb2NrKQotCiAjZGVmaW5lIFBMSVNUX0hFQURfSU5JVChoZWFkLCBfbG9jaykgIHsgICAucHJpb19saXN0ID0gTElTVF9IRUFEX0lOSVQoKGhlYWQpLnByaW9fbGlzdCksICAgLm5vZGVfbGlzdCA9IExJU1RfSEVBRF9JTklUKChoZWFkKS5ub2RlX2xpc3QpLCAgIFBMSVNUX0hFQURfTE9DS19JTklUKCYoX2xvY2spKSAgfQotCiAjZGVmaW5lIFBMSVNUX05PREVfSU5JVChub2RlLCBfX3ByaW8pICB7ICAgLnByaW8gPSAoX19wcmlvKSwgICAucGxpc3QgPSBQTElTVF9IRUFEX0lOSVQoKG5vZGUpLnBsaXN0LCBOVUxMKSwgIH0KLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgcGxpc3RfZm9yX2VhY2gocG9zLCBoZWFkKSAgIGxpc3RfZm9yX2VhY2hfZW50cnkocG9zLCAmKGhlYWQpLT5ub2RlX2xpc3QsIHBsaXN0Lm5vZGVfbGlzdCkKLQogI2RlZmluZSBwbGlzdF9mb3JfZWFjaF9zYWZlKHBvcywgbiwgaGVhZCkgICBsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocG9zLCBuLCAmKGhlYWQpLT5ub2RlX2xpc3QsIHBsaXN0Lm5vZGVfbGlzdCkKLQogI2RlZmluZSBwbGlzdF9mb3JfZWFjaF9lbnRyeShwb3MsIGhlYWQsIG1lbSkgICBsaXN0X2Zvcl9lYWNoX2VudHJ5KHBvcywgJihoZWFkKS0+bm9kZV9saXN0LCBtZW0ucGxpc3Qubm9kZV9saXN0KQotCiAjZGVmaW5lIHBsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocG9zLCBuLCBoZWFkLCBtKSAgIGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwb3MsIG4sICYoaGVhZCktPm5vZGVfbGlzdCwgbS5wbGlzdC5ub2RlX2xpc3QpCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIHBsaXN0X2ZpcnN0X2VudHJ5KGhlYWQsIHR5cGUsIG1lbWJlcikgICBjb250YWluZXJfb2YocGxpc3RfZmlyc3QoaGVhZCksIHR5cGUsIG1lbWJlcikKICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3BtLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvcG0uaAppbmRleCAwNTQ4NzkxLi41Y2ExNjNjIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvcG0uaAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvcG0uaApAQCAtNyw5ICs3LDE1IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfTElOVVhfUE1fSAogI2RlZmluZSBfTElOVVhfUE1fSAotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9wbjU0NC5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3BuNTQ0LmgKaW5kZXggOTAwYzM3My4uOTJkN2M4MCAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3BuNTQ0LmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3BuNTQ0LmgKQEAgLTcsMTUgKzcsMjAgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjZGVmaW5lIFBONTQ0X01BR0lDIDB4RTkKLQotI2RlZmluZSBQTjU0NF9TRVRfUFdSIF9JT1coMHhFOSwgMHgwMSwgdW5zaWduZWQgaW50KQotCisjZGVmaW5lIFBONTQ0X1NFVF9QV1IgX0lPVyhQTjU0NF9NQUdJQywgMHgwMSwgdW5zaWduZWQgaW50KQogc3RydWN0IHBuNTQ0X2kyY19wbGF0Zm9ybV9kYXRhIHsKICB1bnNpZ25lZCBpbnQgaXJxX2dwaW87CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGludCB2ZW5fZ3BpbzsKICB1bnNpZ25lZCBpbnQgZmlybV9ncGlvOwogfTsKLQpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3BucC5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3BucC5oCmluZGV4IDMwYjBhZjcuLjFjYzM2N2YgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9wbnAuaAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvcG5wLmgKQEAgLTcsOSArNywxNSBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX0xJTlVYX1BOUF9ICiAjZGVmaW5lIF9MSU5VWF9QTlBfSAotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9wb2xsLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvcG9sbC5oCmluZGV4IDY4MjI1MDkuLjBmMWVlNmMgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9wb2xsLmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3BvbGwuaApAQCAtNywxMSArNywxNyBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX0xJTlVYX1BPTExfSAogI2RlZmluZSBfTElOVVhfUE9MTF9ICi0KICNpbmNsdWRlIDxhc20vcG9sbC5oPgotCiAjZW5kaWYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvcG9zaXhfYWNsLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvcG9zaXhfYWNsLmgKaW5kZXggYmRhZWU1Yi4uM2Y5MDlhOSAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3Bvc2l4X2FjbC5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9wb3NpeF9hY2wuaApAQCAtNyw0MSArNyw0NSBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX19MSU5VWF9QT1NJWF9BQ0xfSAogI2RlZmluZSBfX0xJTlVYX1BPU0lYX0FDTF9ICi0KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0KICNkZWZpbmUgQUNMX1VOREVGSU5FRF9JRCAoLTEpCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFDTF9UWVBFX0FDQ0VTUyAoMHg4MDAwKQogI2RlZmluZSBBQ0xfVFlQRV9ERUZBVUxUICgweDQwMDApCi0KICNkZWZpbmUgQUNMX1VTRVJfT0JKICgweDAxKQogI2RlZmluZSBBQ0xfVVNFUiAoMHgwMikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFDTF9HUk9VUF9PQkogKDB4MDQpCiAjZGVmaW5lIEFDTF9HUk9VUCAoMHgwOCkKICNkZWZpbmUgQUNMX01BU0sgKDB4MTApCiAjZGVmaW5lIEFDTF9PVEhFUiAoMHgyMCkKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQUNMX1JFQUQgKDB4MDQpCiAjZGVmaW5lIEFDTF9XUklURSAoMHgwMikKICNkZWZpbmUgQUNMX0VYRUNVVEUgKDB4MDEpCi0KIHN0cnVjdCBwb3NpeF9hY2xfZW50cnkgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzaG9ydCBlX3RhZzsKICB1bnNpZ25lZCBzaG9ydCBlX3Blcm07CiAgdW5zaWduZWQgaW50IGVfaWQ7CiB9OwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IHBvc2l4X2FjbCB7CiAgYXRvbWljX3QgYV9yZWZjb3VudDsKICB1bnNpZ25lZCBpbnQgYV9jb3VudDsKICBzdHJ1Y3QgcG9zaXhfYWNsX2VudHJ5IGFfZW50cmllc1swXTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwotCiAjZGVmaW5lIEZPUkVBQ0hfQUNMX0VOVFJZKHBhLCBhY2wsIHBlKSAgIGZvcihwYT0oYWNsKS0+YV9lbnRyaWVzLCBwZT1wYSsoYWNsKS0+YV9jb3VudDsgcGE8cGU7IHBhKyspCi0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3Bvc2l4X3R5cGVzLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvcG9zaXhfdHlwZXMuaAppbmRleCBkN2QwYWQyLi5kNjI5ZTIyIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvcG9zaXhfdHlwZXMuaAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvcG9zaXhfdHlwZXMuaApAQCAtNywzNyArNywzOCBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX0xJTlVYX1BPU0lYX1RZUEVTX0gKICNkZWZpbmUgX0xJTlVYX1BPU0lYX1RZUEVTX0gKLQogI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgotCiAjdW5kZWYgX19ORkRCSVRTCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX05GREJJVFMgKDggKiBzaXplb2YodW5zaWduZWQgbG9uZykpCi0KICN1bmRlZiBfX0ZEX1NFVFNJWkUKICNkZWZpbmUgX19GRF9TRVRTSVpFIDEwMjQKLQogI3VuZGVmIF9fRkRTRVRfTE9OR1MKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fRkRTRVRfTE9OR1MgKF9fRkRfU0VUU0laRS9fX05GREJJVFMpCi0KICN1bmRlZiBfX0ZERUxUCiAjZGVmaW5lIF9fRkRFTFQoZCkgKChkKSAvIF9fTkZEQklUUykKLQogI3VuZGVmIF9fRkRNQVNLCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX0ZETUFTSyhkKSAoMVVMIDw8ICgoZCkgJSBfX05GREJJVFMpKQotCiB0eXBlZGVmIHN0cnVjdCB7CiAgdW5zaWduZWQgbG9uZyBmZHNfYml0cyBbX19GRFNFVF9MT05HU107CiB9IF9fa2VybmVsX2ZkX3NldDsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHR5cGVkZWYgdm9pZCAoKl9fa2VybmVsX3NpZ2hhbmRsZXJfdCkoaW50KTsKLQogdHlwZWRlZiBpbnQgX19rZXJuZWxfa2V5X3Q7CiB0eXBlZGVmIGludCBfX2tlcm5lbF9tcWRfdDsKLQogI2luY2x1ZGUgPGFzbS9wb3NpeF90eXBlcy5oPgotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvcHBkZXYuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9wcGRldi5oCmluZGV4IGM0M2Y4YjkuLjJmYTc4NWMgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9wcGRldi5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9wcGRldi5oCkBAIC03LDY1ICs3LDU4IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2RlZmluZSBQUF9JT0NUTCAncCcKLQogI2RlZmluZSBQUFNFVE1PREUgX0lPVyhQUF9JT0NUTCwgMHg4MCwgaW50KQotCiAjZGVmaW5lIFBQUlNUQVRVUyBfSU9SKFBQX0lPQ1RMLCAweDgxLCB1bnNpZ25lZCBjaGFyKQogI2RlZmluZSBQUFdTVEFUVVMgT0JTT0xFVEVfX0lPVyhQUF9JT0NUTCwgMHg4MiwgdW5zaWduZWQgY2hhcikKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUFBSQ09OVFJPTCBfSU9SKFBQX0lPQ1RMLCAweDgzLCB1bnNpZ25lZCBjaGFyKQogI2RlZmluZSBQUFdDT05UUk9MIF9JT1coUFBfSU9DVEwsIDB4ODQsIHVuc2lnbmVkIGNoYXIpCi0KIHN0cnVjdCBwcGRldl9mcm9iX3N0cnVjdCB7CiAgdW5zaWduZWQgY2hhciBtYXNrOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBjaGFyIHZhbDsKIH07CiAjZGVmaW5lIFBQRkNPTlRST0wgX0lPVyhQUF9JT0NUTCwgMHg4ZSwgc3RydWN0IHBwZGV2X2Zyb2Jfc3RydWN0KQotCiAjZGVmaW5lIFBQUkRBVEEgX0lPUihQUF9JT0NUTCwgMHg4NSwgdW5zaWduZWQgY2hhcikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBQV0RBVEEgX0lPVyhQUF9JT0NUTCwgMHg4NiwgdW5zaWduZWQgY2hhcikKLQogI2RlZmluZSBQUFJFQ09OVFJPTCBPQlNPTEVURV9fSU9SKFBQX0lPQ1RMLCAweDg3LCB1bnNpZ25lZCBjaGFyKQogI2RlZmluZSBQUFdFQ09OVFJPTCBPQlNPTEVURV9fSU9XKFBQX0lPQ1RMLCAweDg4LCB1bnNpZ25lZCBjaGFyKQotCiAjZGVmaW5lIFBQUkZJRk8gT0JTT0xFVEVfX0lPUihQUF9JT0NUTCwgMHg4OSwgdW5zaWduZWQgY2hhcikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBQV0ZJRk8gT0JTT0xFVEVfX0lPVyhQUF9JT0NUTCwgMHg4YSwgdW5zaWduZWQgY2hhcikKLQogI2RlZmluZSBQUENMQUlNIF9JTyhQUF9JT0NUTCwgMHg4YikKLQogI2RlZmluZSBQUFJFTEVBU0UgX0lPKFBQX0lPQ1RMLCAweDhjKQotCiAjZGVmaW5lIFBQWUlFTEQgX0lPKFBQX0lPQ1RMLCAweDhkKQotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQUEVYQ0wgX0lPKFBQX0lPQ1RMLCAweDhmKQotCiAjZGVmaW5lIFBQREFUQURJUiBfSU9XKFBQX0lPQ1RMLCAweDkwLCBpbnQpCi0KICNkZWZpbmUgUFBORUdPVCBfSU9XKFBQX0lPQ1RMLCAweDkxLCBpbnQpCi0KICNkZWZpbmUgUFBXQ1RMT05JUlEgX0lPVyhQUF9JT0NUTCwgMHg5MiwgdW5zaWduZWQgY2hhcikKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUFBDTFJJUlEgX0lPUihQUF9JT0NUTCwgMHg5MywgaW50KQotCiAjZGVmaW5lIFBQU0VUUEhBU0UgX0lPVyhQUF9JT0NUTCwgMHg5NCwgaW50KQotCiAjZGVmaW5lIFBQR0VUVElNRSBfSU9SKFBQX0lPQ1RMLCAweDk1LCBzdHJ1Y3QgdGltZXZhbCkKICNkZWZpbmUgUFBTRVRUSU1FIF9JT1coUFBfSU9DVEwsIDB4OTYsIHN0cnVjdCB0aW1ldmFsKQotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQUEdFVE1PREVTIF9JT1IoUFBfSU9DVEwsIDB4OTcsIHVuc2lnbmVkIGludCkKLQogI2RlZmluZSBQUEdFVE1PREUgX0lPUihQUF9JT0NUTCwgMHg5OCwgaW50KQogI2RlZmluZSBQUEdFVFBIQVNFIF9JT1IoUFBfSU9DVEwsIDB4OTksIGludCkKLQogI2RlZmluZSBQUEdFVEZMQUdTIF9JT1IoUFBfSU9DVEwsIDB4OWEsIGludCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBQU0VURkxBR1MgX0lPVyhQUF9JT0NUTCwgMHg5YiwgaW50KQotCiAjZGVmaW5lIFBQX0ZBU1RXUklURSAoMTw8MikKICNkZWZpbmUgUFBfRkFTVFJFQUQgKDE8PDMpCiAjZGVmaW5lIFBQX1c5MTI4NFBJQyAoMTw8NCkKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUFBfRkxBR01BU0sgKFBQX0ZBU1RXUklURSB8IFBQX0ZBU1RSRUFEIHwgUFBfVzkxMjg0UElDKQotCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvcHBwX2RlZnMuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9wcHBfZGVmcy5oCmluZGV4IGRhNTRhYzcuLmI5OWRjZTUgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9wcHBfZGVmcy5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9wcHBfZGVmcy5oCkBAIC03LDExNSArNywxMjcgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9QUFBfREVGU19IXwogI2RlZmluZSBfUFBQX0RFRlNfSF8KLQotI2RlZmluZSBQUFBfSERSTEVOIDQgIAotI2RlZmluZSBQUFBfRkNTTEVOIDIgIAotI2RlZmluZSBQUFBfTVJVIDE1MDAgIAotCisjZGVmaW5lIFBQUF9IRFJMRU4gNAorI2RlZmluZSBQUFBfRkNTTEVOIDIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFBQUF9NUlUgMTUwMAogI2RlZmluZSBQUFBfQUREUkVTUyhwKSAoKChfX3U4ICopKHApKVswXSkKICNkZWZpbmUgUFBQX0NPTlRST0wocCkgKCgoX191OCAqKShwKSlbMV0pCiAjZGVmaW5lIFBQUF9QUk9UT0NPTChwKSAoKCgoX191OCAqKShwKSlbMl0gPDwgOCkgKyAoKF9fdTggKikocCkpWzNdKQotCi0jZGVmaW5lIFBQUF9BTExTVEFUSU9OUyAweGZmICAKLSNkZWZpbmUgUFBQX1VJIDB4MDMgIAotI2RlZmluZSBQUFBfRkxBRyAweDdlICAKLSNkZWZpbmUgUFBQX0VTQ0FQRSAweDdkICAKLSNkZWZpbmUgUFBQX1RSQU5TIDB4MjAgIAotCi0jZGVmaW5lIFBQUF9JUCAweDIxICAKLSNkZWZpbmUgUFBQX0FUIDB4MjkgIAotI2RlZmluZSBQUFBfSVBYIDB4MmIgIAotI2RlZmluZSBQUFBfVkpDX0NPTVAgMHgyZCAgCi0jZGVmaW5lIFBQUF9WSkNfVU5DT01QIDB4MmYgIAotI2RlZmluZSBQUFBfTVAgMHgzZCAgCi0jZGVmaW5lIFBQUF9JUFY2IDB4NTcgIAotI2RlZmluZSBQUFBfQ09NUEZSQUcgMHhmYiAgCi0jZGVmaW5lIFBQUF9DT01QIDB4ZmQgIAotI2RlZmluZSBQUFBfTVBMU19VQyAweDAyODEgIAotI2RlZmluZSBQUFBfTVBMU19NQyAweDAyODMgIAotI2RlZmluZSBQUFBfSVBDUCAweDgwMjEgIAotI2RlZmluZSBQUFBfQVRDUCAweDgwMjkgIAotI2RlZmluZSBQUFBfSVBYQ1AgMHg4MDJiICAKLSNkZWZpbmUgUFBQX0lQVjZDUCAweDgwNTcgIAotI2RlZmluZSBQUFBfQ0NQRlJBRyAweDgwZmIgIAotI2RlZmluZSBQUFBfQ0NQIDB4ODBmZCAgCi0jZGVmaW5lIFBQUF9NUExTQ1AgMHg4MGZkICAKLSNkZWZpbmUgUFBQX0xDUCAweGMwMjEgIAotI2RlZmluZSBQUFBfUEFQIDB4YzAyMyAgCi0jZGVmaW5lIFBQUF9MUVIgMHhjMDI1ICAKLSNkZWZpbmUgUFBQX0NIQVAgMHhjMjIzICAKLSNkZWZpbmUgUFBQX0NCQ1AgMHhjMDI5ICAKLQotI2RlZmluZSBQUFBfSU5JVEZDUyAweGZmZmYgIAotI2RlZmluZSBQUFBfR09PREZDUyAweGYwYjggIAotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBQUFBfQUxMU1RBVElPTlMgMHhmZgorI2RlZmluZSBQUFBfVUkgMHgwMworI2RlZmluZSBQUFBfRkxBRyAweDdlCisjZGVmaW5lIFBQUF9FU0NBUEUgMHg3ZAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgUFBQX1RSQU5TIDB4MjAKKyNkZWZpbmUgUFBQX0lQIDB4MjEKKyNkZWZpbmUgUFBQX0FUIDB4MjkKKyNkZWZpbmUgUFBQX0lQWCAweDJiCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBQUFBfVkpDX0NPTVAgMHgyZAorI2RlZmluZSBQUFBfVkpDX1VOQ09NUCAweDJmCisjZGVmaW5lIFBQUF9NUCAweDNkCisjZGVmaW5lIFBQUF9JUFY2IDB4NTcKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFBQUF9DT01QRlJBRyAweGZiCisjZGVmaW5lIFBQUF9DT01QIDB4ZmQKKyNkZWZpbmUgUFBQX01QTFNfVUMgMHgwMjgxCisjZGVmaW5lIFBQUF9NUExTX01DIDB4MDI4MworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgUFBQX0lQQ1AgMHg4MDIxCisjZGVmaW5lIFBQUF9BVENQIDB4ODAyOQorI2RlZmluZSBQUFBfSVBYQ1AgMHg4MDJiCisjZGVmaW5lIFBQUF9JUFY2Q1AgMHg4MDU3CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBQUFBfQ0NQRlJBRyAweDgwZmIKKyNkZWZpbmUgUFBQX0NDUCAweDgwZmQKKyNkZWZpbmUgUFBQX01QTFNDUCAweDgwZmQKKyNkZWZpbmUgUFBQX0xDUCAweGMwMjEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFBQUF9QQVAgMHhjMDIzCisjZGVmaW5lIFBQUF9MUVIgMHhjMDI1CisjZGVmaW5lIFBQUF9DSEFQIDB4YzIyMworI2RlZmluZSBQUFBfQ0JDUCAweGMwMjkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFBQUF9JTklURkNTIDB4ZmZmZgorI2RlZmluZSBQUFBfR09PREZDUyAweGYwYjgKIHR5cGVkZWYgX191MzIgZXh0X2FjY21bOF07Ci0KIGVudW0gTlBtb2RlIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTlBNT0RFX1BBU1MsCiAgTlBNT0RFX0RST1AsCiAgTlBNT0RFX0VSUk9SLAogIE5QTU9ERV9RVUVVRQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07Ci0KIHN0cnVjdCBwcHBzdGF0IHsKICBfX3UzMiBwcHBfZGlzY2FyZHM7Ci0KICBfX3UzMiBwcHBfaWJ5dGVzOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBwcHBfaW9jdGVjdHM7CiAgX191MzIgcHBwX2lwYWNrZXRzOwogIF9fdTMyIHBwcF9pZXJyb3JzOwogIF9fdTMyIHBwcF9pbHFyczsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBwcHBfb2J5dGVzOwogIF9fdTMyIHBwcF9vb2N0ZWN0czsKICBfX3UzMiBwcHBfb3BhY2tldHM7CiAgX191MzIgcHBwX29lcnJvcnM7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHBwcF9vbHFyczsKIH07Ci0KIHN0cnVjdCB2anN0YXQgewogIF9fdTMyIHZqc19wYWNrZXRzOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiB2anNfY29tcHJlc3NlZDsKICBfX3UzMiB2anNfc2VhcmNoZXM7CiAgX191MzIgdmpzX21pc3NlczsKICBfX3UzMiB2anNfdW5jb21wcmVzc2VkaW47CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHZqc19jb21wcmVzc2VkaW47CiAgX191MzIgdmpzX2Vycm9yaW47CiAgX191MzIgdmpzX3Rvc3NlZDsKIH07Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgY29tcHN0YXQgewogIF9fdTMyIHVuY19ieXRlczsKICBfX3UzMiB1bmNfcGFja2V0czsKICBfX3UzMiBjb21wX2J5dGVzOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBjb21wX3BhY2tldHM7CiAgX191MzIgaW5jX2J5dGVzOwogIF9fdTMyIGluY19wYWNrZXRzOwotCiAgX191MzIgaW5fY291bnQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGJ5dGVzX291dDsKLQogIGRvdWJsZSByYXRpbzsKIH07Ci0KIHN0cnVjdCBwcHBfc3RhdHMgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgcHBwc3RhdCBwOwogIHN0cnVjdCB2anN0YXQgdmo7CiB9OwotCiBzdHJ1Y3QgcHBwX2NvbXBfc3RhdHMgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgY29tcHN0YXQgYzsKICBzdHJ1Y3QgY29tcHN0YXQgZDsKIH07Ci0KIHN0cnVjdCBwcHBfaWRsZSB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHRpbWVfdCB4bWl0X2lkbGU7CiAgdGltZV90IHJlY3ZfaWRsZTsKIH07Ci0KICNlbmRpZgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9wcmN0bC5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3ByY3RsLmgKaW5kZXggYTc2MzFhMi4uYTEyN2I1YSAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3ByY3RsLmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3ByY3RsLmgKQEAgLTcsNTUgKzcsMTE0IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfTElOVVhfUFJDVExfSAogI2RlZmluZSBfTElOVVhfUFJDVExfSAotCi0jZGVmaW5lIFBSX1NFVF9QREVBVEhTSUcgMSAgCi0jZGVmaW5lIFBSX0dFVF9QREVBVEhTSUcgMiAgCi0KKyNkZWZpbmUgUFJfU0VUX1BERUFUSFNJRyAxCisjZGVmaW5lIFBSX0dFVF9QREVBVEhTSUcgMgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUFJfR0VUX0RVTVBBQkxFIDMKICNkZWZpbmUgUFJfU0VUX0RVTVBBQkxFIDQKLQogI2RlZmluZSBQUl9HRVRfVU5BTElHTiA1CiAjZGVmaW5lIFBSX1NFVF9VTkFMSUdOIDYKLSNkZWZpbmUgUFJfVU5BTElHTl9OT1BSSU5UIDEgIAotI2RlZmluZSBQUl9VTkFMSUdOX1NJR0JVUyAyICAKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgUFJfVU5BTElHTl9OT1BSSU5UIDEKKyNkZWZpbmUgUFJfVU5BTElHTl9TSUdCVVMgMgogI2RlZmluZSBQUl9HRVRfS0VFUENBUFMgNwogI2RlZmluZSBQUl9TRVRfS0VFUENBUFMgOAotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQUl9HRVRfRlBFTVUgOQogI2RlZmluZSBQUl9TRVRfRlBFTVUgMTAKLSNkZWZpbmUgUFJfRlBFTVVfTk9QUklOVCAxICAKLSNkZWZpbmUgUFJfRlBFTVVfU0lHRlBFIDIgIAotCisjZGVmaW5lIFBSX0ZQRU1VX05PUFJJTlQgMQorI2RlZmluZSBQUl9GUEVNVV9TSUdGUEUgMgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUFJfR0VUX0ZQRVhDIDExCiAjZGVmaW5lIFBSX1NFVF9GUEVYQyAxMgotI2RlZmluZSBQUl9GUF9FWENfU1dfRU5BQkxFIDB4ODAgIAotI2RlZmluZSBQUl9GUF9FWENfRElWIDB4MDEwMDAwICAKLSNkZWZpbmUgUFJfRlBfRVhDX09WRiAweDAyMDAwMCAgCi0jZGVmaW5lIFBSX0ZQX0VYQ19VTkQgMHgwNDAwMDAgIAotI2RlZmluZSBQUl9GUF9FWENfUkVTIDB4MDgwMDAwICAKLSNkZWZpbmUgUFJfRlBfRVhDX0lOViAweDEwMDAwMCAgCi0jZGVmaW5lIFBSX0ZQX0VYQ19ESVNBQkxFRCAwICAKLSNkZWZpbmUgUFJfRlBfRVhDX05PTlJFQ09WIDEgIAotI2RlZmluZSBQUl9GUF9FWENfQVNZTkMgMiAgCi0jZGVmaW5lIFBSX0ZQX0VYQ19QUkVDSVNFIDMgIAotCisjZGVmaW5lIFBSX0ZQX0VYQ19TV19FTkFCTEUgMHg4MAorI2RlZmluZSBQUl9GUF9FWENfRElWIDB4MDEwMDAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBQUl9GUF9FWENfT1ZGIDB4MDIwMDAwCisjZGVmaW5lIFBSX0ZQX0VYQ19VTkQgMHgwNDAwMDAKKyNkZWZpbmUgUFJfRlBfRVhDX1JFUyAweDA4MDAwMAorI2RlZmluZSBQUl9GUF9FWENfSU5WIDB4MTAwMDAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBQUl9GUF9FWENfRElTQUJMRUQgMAorI2RlZmluZSBQUl9GUF9FWENfTk9OUkVDT1YgMQorI2RlZmluZSBQUl9GUF9FWENfQVNZTkMgMgorI2RlZmluZSBQUl9GUF9FWENfUFJFQ0lTRSAzCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQUl9HRVRfVElNSU5HIDEzCiAjZGVmaW5lIFBSX1NFVF9USU1JTkcgMTQKLSNkZWZpbmUgUFJfVElNSU5HX1NUQVRJU1RJQ0FMIDAgIAotI2RlZmluZSBQUl9USU1JTkdfVElNRVNUQU1QIDEgIAotCi0jZGVmaW5lIFBSX1NFVF9OQU1FIDE1ICAKLSNkZWZpbmUgUFJfR0VUX05BTUUgMTYgIAotCisjZGVmaW5lIFBSX1RJTUlOR19TVEFUSVNUSUNBTCAwCisjZGVmaW5lIFBSX1RJTUlOR19USU1FU1RBTVAgMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgUFJfU0VUX05BTUUgMTUKKyNkZWZpbmUgUFJfR0VUX05BTUUgMTYKICNkZWZpbmUgUFJfR0VUX0VORElBTiAxOQogI2RlZmluZSBQUl9TRVRfRU5ESUFOIDIwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQUl9FTkRJQU5fQklHIDAKLSNkZWZpbmUgUFJfRU5ESUFOX0xJVFRMRSAxICAKLSNkZWZpbmUgUFJfRU5ESUFOX1BQQ19MSVRUTEUgMiAgCi0KKyNkZWZpbmUgUFJfRU5ESUFOX0xJVFRMRSAxCisjZGVmaW5lIFBSX0VORElBTl9QUENfTElUVExFIDIKKyNkZWZpbmUgUFJfR0VUX1NFQ0NPTVAgMjEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFBSX1NFVF9TRUNDT01QIDIyCisjZGVmaW5lIFBSX0NBUEJTRVRfUkVBRCAyMworI2RlZmluZSBQUl9DQVBCU0VUX0RST1AgMjQKKyNkZWZpbmUgUFJfR0VUX1RTQyAyNQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgUFJfU0VUX1RTQyAyNgorI2RlZmluZSBQUl9UU0NfRU5BQkxFIDEKKyNkZWZpbmUgUFJfVFNDX1NJR1NFR1YgMgorI2RlZmluZSBQUl9HRVRfU0VDVVJFQklUUyAyNworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgUFJfU0VUX1NFQ1VSRUJJVFMgMjgKKyNkZWZpbmUgUFJfU0VUX1RJTUVSU0xBQ0sgMjkKKyNkZWZpbmUgUFJfR0VUX1RJTUVSU0xBQ0sgMzAKKyNkZWZpbmUgUFJfVEFTS19QRVJGX0VWRU5UU19ESVNBQkxFIDMxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBQUl9UQVNLX1BFUkZfRVZFTlRTX0VOQUJMRSAzMgorI2RlZmluZSBQUl9NQ0VfS0lMTCAzMworI2RlZmluZSBQUl9NQ0VfS0lMTF9DTEVBUiAwCisjZGVmaW5lIFBSX01DRV9LSUxMX1NFVCAxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBQUl9NQ0VfS0lMTF9MQVRFIDAKKyNkZWZpbmUgUFJfTUNFX0tJTExfRUFSTFkgMQorI2RlZmluZSBQUl9NQ0VfS0lMTF9ERUZBVUxUIDIKKyNkZWZpbmUgUFJfTUNFX0tJTExfR0VUIDM0CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBQUl9TRVRfTU0gMzUKKyNkZWZpbmUgUFJfU0VUX01NX1NUQVJUX0NPREUgMQorI2RlZmluZSBQUl9TRVRfTU1fRU5EX0NPREUgMgorI2RlZmluZSBQUl9TRVRfTU1fU1RBUlRfREFUQSAzCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBQUl9TRVRfTU1fRU5EX0RBVEEgNAorI2RlZmluZSBQUl9TRVRfTU1fU1RBUlRfU1RBQ0sgNQorI2RlZmluZSBQUl9TRVRfTU1fU1RBUlRfQlJLIDYKKyNkZWZpbmUgUFJfU0VUX01NX0JSSyA3CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBQUl9TRVRfTU1fQVJHX1NUQVJUIDgKKyNkZWZpbmUgUFJfU0VUX01NX0FSR19FTkQgOQorI2RlZmluZSBQUl9TRVRfTU1fRU5WX1NUQVJUIDEwCisjZGVmaW5lIFBSX1NFVF9NTV9FTlZfRU5EIDExCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBQUl9TRVRfTU1fQVVYViAxMgorI2RlZmluZSBQUl9TRVRfTU1fRVhFX0ZJTEUgMTMKKyNkZWZpbmUgUFJfU0VUX1BUUkFDRVIgMHg1OTYxNmQ2MQorI2RlZmluZSBQUl9TRVRfUFRSQUNFUl9BTlkgKCh1bnNpZ25lZCBsb25nKS0xKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgUFJfU0VUX0NISUxEX1NVQlJFQVBFUiAzNgorI2RlZmluZSBQUl9HRVRfQ0hJTERfU1VCUkVBUEVSIDM3CisjZGVmaW5lIFBSX1NFVF9OT19ORVdfUFJJVlMgMzgKKyNkZWZpbmUgUFJfR0VUX05PX05FV19QUklWUyAzOQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgUFJfR0VUX1RJRF9BRERSRVNTIDQwCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9wcmVlbXB0LmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvcHJlZW1wdC5oCmluZGV4IGI3MDNkZDMuLjFjMGYxZmUgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9wcmVlbXB0LmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3ByZWVtcHQuaApAQCAtNywyNSArNywyOSBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX19MSU5VWF9QUkVFTVBUX0gKICNkZWZpbmUgX19MSU5VWF9QUkVFTVBUX0gKLQogI2luY2x1ZGUgPGxpbnV4L3RocmVhZF9pbmZvLmg+CiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBhZGRfcHJlZW1wdF9jb3VudCh2YWwpIGRvIHsgcHJlZW1wdF9jb3VudCgpICs9ICh2YWwpOyB9IHdoaWxlICgwKQogI2RlZmluZSBzdWJfcHJlZW1wdF9jb3VudCh2YWwpIGRvIHsgcHJlZW1wdF9jb3VudCgpIC09ICh2YWwpOyB9IHdoaWxlICgwKQotCiAjZGVmaW5lIGluY19wcmVlbXB0X2NvdW50KCkgYWRkX3ByZWVtcHRfY291bnQoMSkKICNkZWZpbmUgZGVjX3ByZWVtcHRfY291bnQoKSBzdWJfcHJlZW1wdF9jb3VudCgxKQotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBwcmVlbXB0X2NvdW50KCkgKGN1cnJlbnRfdGhyZWFkX2luZm8oKS0+cHJlZW1wdF9jb3VudCkKLQogI2RlZmluZSBwcmVlbXB0X2Rpc2FibGUoKSBkbyB7IH0gd2hpbGUgKDApCiAjZGVmaW5lIHByZWVtcHRfZW5hYmxlX25vX3Jlc2NoZWQoKSBkbyB7IH0gd2hpbGUgKDApCiAjZGVmaW5lIHByZWVtcHRfZW5hYmxlKCkgZG8geyB9IHdoaWxlICgwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgcHJlZW1wdF9jaGVja19yZXNjaGVkKCkgZG8geyB9IHdoaWxlICgwKQotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9wcm9jX2ZzLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvcHJvY19mcy5oCmluZGV4IGNjYjIyYWMuLjJkODMzNDkgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9wcm9jX2ZzLmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3Byb2NfZnMuaApAQCAtNyw3MSArNywxMDAgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9MSU5VWF9QUk9DX0ZTX0gKICNkZWZpbmUgX0xJTlVYX1BST0NfRlNfSAotCiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgotCiAjZGVmaW5lIEZJUlNUX1BST0NFU1NfRU5UUlkgMjU2Ci0KIGVudW0geworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBQUk9DX1JPT1RfSU5PID0gMSwKIH07Ci0KICNkZWZpbmUgUFJPQ19TVVBFUl9NQUdJQyAweDlmYTAKLQogdHlwZWRlZiBpbnQgKHJlYWRfcHJvY190KShjaGFyICpwYWdlLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZiwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgaW50IGNvdW50LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSk7CiB0eXBlZGVmIGludCAod3JpdGVfcHJvY190KShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwKICB1bnNpZ25lZCBsb25nIGNvdW50LCB2b2lkICpkYXRhKTsKIHR5cGVkZWYgaW50IChnZXRfaW5mb190KShjaGFyICosIGNoYXIgKiosIG9mZl90LCBpbnQpOwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IHByb2NfZGlyX2VudHJ5IHsKICB1bnNpZ25lZCBpbnQgbG93X2lubzsKICB1bnNpZ25lZCBzaG9ydCBuYW1lbGVuOwogIGNvbnN0IGNoYXIgKm5hbWU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIG1vZGVfdCBtb2RlOwogIG5saW5rX3Qgbmxpbms7CiAgdWlkX3QgdWlkOwogIGdpZF90IGdpZDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgbG9mZl90IHNpemU7CiAgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgKiBwcm9jX2lvcHM7CiAgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyAqIHByb2NfZm9wczsKICBnZXRfaW5mb190ICpnZXRfaW5mbzsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IG1vZHVsZSAqb3duZXI7CiAgc3RydWN0IHByb2NfZGlyX2VudHJ5ICpuZXh0LCAqcGFyZW50LCAqc3ViZGlyOwogIHZvaWQgKmRhdGE7CiAgcmVhZF9wcm9jX3QgKnJlYWRfcHJvYzsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgd3JpdGVfcHJvY190ICp3cml0ZV9wcm9jOwogIGF0b21pY190IGNvdW50OwogIGludCBkZWxldGVkOwogIHZvaWQgKnNldDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwotCiBzdHJ1Y3Qga2NvcmVfbGlzdCB7CiAgc3RydWN0IGtjb3JlX2xpc3QgKm5leHQ7CiAgdW5zaWduZWQgbG9uZyBhZGRyOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzaXplX3Qgc2l6ZTsKIH07Ci0KIHN0cnVjdCB2bWNvcmUgewogIHN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgbG9uZyBsb25nIHBhZGRyOwogIHVuc2lnbmVkIGxvbmcgbG9uZyBzaXplOwogIGxvZmZfdCBvZmZzZXQ7CiB9OwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBwcm9jX3Jvb3RfZHJpdmVyIE5VTEwKICNkZWZpbmUgcHJvY19uZXQgTlVMTAogI2RlZmluZSBwcm9jX2J1cyBOVUxMCi0KICNkZWZpbmUgcHJvY19uZXRfZm9wc19jcmVhdGUobmFtZSwgbW9kZSwgZm9wcykgKHsgKHZvaWQpKG1vZGUpLCBOVUxMOyB9KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgcHJvY19uZXRfY3JlYXRlKG5hbWUsIG1vZGUsIGluZm8pICh7ICh2b2lkKShtb2RlKSwgTlVMTDsgfSkKICNkZWZpbmUgcmVtb3ZlX3Byb2NfZW50cnkobmFtZSwgcGFyZW50KSBkbyB7fSB3aGlsZSAoMCkKLQorc3RydWN0IHR0eV9kcml2ZXI7CitzdHJ1Y3QgcHJvY19pbm9kZSB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIHN0cnVjdCBwaWQgKnBpZDsKKyBpbnQgZmQ7CisgdW5pb24geworIGludCAoKnByb2NfZ2V0X2xpbmspKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZGVudHJ5ICoqLCBzdHJ1Y3QgdmZzbW91bnQgKiopOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBpbnQgKCpwcm9jX3JlYWQpKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgY2hhciAqcGFnZSk7CisgfSBvcDsKKyBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnBkZTsKKyBzdHJ1Y3QgaW5vZGUgdmZzX2lub2RlOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK307CitzdHJ1Y3QgcHJvY19tYXBzX3ByaXZhdGUgeworIHN0cnVjdCBwaWQgKnBpZDsKKyBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2s7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdGFpbF92bWE7Cit9OwogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvcHRyYWNlLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvcHRyYWNlLmgKaW5kZXggMDc5YzBjOC4uZTYxYTBlNSAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3B0cmFjZS5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9wdHJhY2UuaApAQCAtNyw0OSArNyw1NSBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX0xJTlVYX1BUUkFDRV9ICiAjZGVmaW5lIF9MSU5VWF9QVFJBQ0VfSAotCiAjZGVmaW5lIFBUUkFDRV9UUkFDRU1FIDAKICNkZWZpbmUgUFRSQUNFX1BFRUtURVhUIDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBUUkFDRV9QRUVLREFUQSAyCiAjZGVmaW5lIFBUUkFDRV9QRUVLVVNSIDMKICNkZWZpbmUgUFRSQUNFX1BPS0VURVhUIDQKICNkZWZpbmUgUFRSQUNFX1BPS0VEQVRBIDUKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBUUkFDRV9QT0tFVVNSIDYKICNkZWZpbmUgUFRSQUNFX0NPTlQgNwogI2RlZmluZSBQVFJBQ0VfS0lMTCA4CiAjZGVmaW5lIFBUUkFDRV9TSU5HTEVTVEVQIDkKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUFRSQUNFX0FUVEFDSCAweDEwCiAjZGVmaW5lIFBUUkFDRV9ERVRBQ0ggMHgxMQotCiAjZGVmaW5lIFBUUkFDRV9TWVNDQUxMIDI0Ci0KICNkZWZpbmUgUFRSQUNFX1NFVE9QVElPTlMgMHg0MjAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQVFJBQ0VfR0VURVZFTlRNU0cgMHg0MjAxCiAjZGVmaW5lIFBUUkFDRV9HRVRTSUdJTkZPIDB4NDIwMgogI2RlZmluZSBQVFJBQ0VfU0VUU0lHSU5GTyAweDQyMDMKLQogI2RlZmluZSBQVFJBQ0VfT19UUkFDRVNZU0dPT0QgMHgwMDAwMDAwMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUFRSQUNFX09fVFJBQ0VGT1JLIDB4MDAwMDAwMDIKICNkZWZpbmUgUFRSQUNFX09fVFJBQ0VWRk9SSyAweDAwMDAwMDA0CiAjZGVmaW5lIFBUUkFDRV9PX1RSQUNFQ0xPTkUgMHgwMDAwMDAwOAogI2RlZmluZSBQVFJBQ0VfT19UUkFDRUVYRUMgMHgwMDAwMDAxMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUFRSQUNFX09fVFJBQ0VWRk9SS0RPTkUgMHgwMDAwMDAyMAogI2RlZmluZSBQVFJBQ0VfT19UUkFDRUVYSVQgMHgwMDAwMDA0MAotCiAjZGVmaW5lIFBUUkFDRV9PX01BU0sgMHgwMDAwMDA3ZgotCiAjZGVmaW5lIFBUUkFDRV9FVkVOVF9GT1JLIDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBUUkFDRV9FVkVOVF9WRk9SSyAyCiAjZGVmaW5lIFBUUkFDRV9FVkVOVF9DTE9ORSAzCiAjZGVmaW5lIFBUUkFDRV9FVkVOVF9FWEVDIDQKICNkZWZpbmUgUFRSQUNFX0VWRU5UX1ZGT1JLX0RPTkUgNQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUFRSQUNFX0VWRU5UX0VYSVQgNgotCiAjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9xaWMxMTcuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9xaWMxMTcuaAppbmRleCBlMDc3MDkwLi4xMWVlNjBlIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvcWljMTE3LmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3FpYzExNy5oCkBAIC03LDExNyArNywxMjggQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9RSUMxMTdfSAogI2RlZmluZSBfUUlDMTE3X0gKLQogdHlwZWRlZiBlbnVtIHsKICBRSUNfTk9fQ09NTUFORCA9IDAsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFFJQ19SRVNFVCA9IDEsCiAgUUlDX1JFUE9SVF9ORVhUX0JJVCA9IDIsCiAgUUlDX1BBVVNFID0gMywKICBRSUNfTUlDUk9fU1RFUF9QQVVTRSA9IDQsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFFJQ19BTFRFUk5BVEVfVElNRU9VVCA9IDUsCiAgUUlDX1JFUE9SVF9EUklWRV9TVEFUVVMgPSA2LAogIFFJQ19SRVBPUlRfRVJST1JfQ09ERSA9IDcsCiAgUUlDX1JFUE9SVF9EUklWRV9DT05GSUdVUkFUSU9OID0gOCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgUUlDX1JFUE9SVF9ST01fVkVSU0lPTiA9IDksCiAgUUlDX0xPR0lDQUxfRk9SV0FSRCA9IDEwLAogIFFJQ19QSFlTSUNBTF9SRVZFUlNFID0gMTEsCiAgUUlDX1BIWVNJQ0FMX0ZPUldBUkQgPSAxMiwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgUUlDX1NFRUtfSEVBRF9UT19UUkFDSyA9IDEzLAogIFFJQ19TRUVLX0xPQURfUE9JTlQgPSAxNCwKICBRSUNfRU5URVJfRk9STUFUX01PREUgPSAxNSwKICBRSUNfV1JJVEVfUkVGRVJFTkNFX0JVUlNUID0gMTYsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFFJQ19FTlRFUl9WRVJJRllfTU9ERSA9IDE3LAogIFFJQ19TVE9QX1RBUEUgPSAxOCwKLQogIFFJQ19NSUNST19TVEVQX0hFQURfVVAgPSAyMSwKICBRSUNfTUlDUk9fU1RFUF9IRUFEX0RPV04gPSAyMiwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgUUlDX1NPRlRfU0VMRUNUID0gMjMsCiAgUUlDX1NPRlRfREVTRUxFQ1QgPSAyNCwKICBRSUNfU0tJUF9SRVZFUlNFID0gMjUsCiAgUUlDX1NLSVBfRk9SV0FSRCA9IDI2LAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBRSUNfU0VMRUNUX1JBVEUgPSAyNywKLQogIFFJQ19FTlRFUl9ESUFHTk9TVElDXzEgPSAyOCwKICBRSUNfRU5URVJfRElBR05PU1RJQ18yID0gMjksCiAgUUlDX0VOVEVSX1BSSU1BUllfTU9ERSA9IDMwLAotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFFJQ19SRVBPUlRfVkVORE9SX0lEID0gMzIsCiAgUUlDX1JFUE9SVF9UQVBFX1NUQVRVUyA9IDMzLAogIFFJQ19TS0lQX0VYVEVOREVEX1JFVkVSU0UgPSAzNCwKICBRSUNfU0tJUF9FWFRFTkRFRF9GT1JXQVJEID0gMzUsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFFJQ19DQUxJQlJBVEVfVEFQRV9MRU5HVEggPSAzNiwKICBRSUNfUkVQT1JUX0ZPUk1BVF9TRUdNRU5UUyA9IDM3LAogIFFJQ19TRVRfRk9STUFUX1NFR01FTlRTID0gMzgsCi0KICBRSUNfUEhBTlRPTV9TRUxFQ1QgPSA0NiwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgUUlDX1BIQU5UT01fREVTRUxFQ1QgPSA0NwogfSBxaWMxMTdfY21kX3Q7Ci0KIHR5cGVkZWYgZW51bSB7CiAgZGlzY3JldGlvbmFsID0gMCwgcmVxdWlyZWQsIGNjczEsIGNjczIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9IHFpY19jb21wYXRpYmlsaXR5OwotCiB0eXBlZGVmIGVudW0gewogIHVudXNlZCwgbW9kZSwgbW90aW9uLCByZXBvcnQKIH0gY29tbWFuZF90eXBlczsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBxaWMxMTdfY29tbWFuZF90YWJsZSB7CiAgY2hhciAqbmFtZTsKICBfX3U4IG1hc2s7CiAgX191OCBzdGF0ZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191OCBjbWRfdHlwZTsKICBfX3U4IG5vbl9pbnRyOwogIF9fdTggbGV2ZWw7CiB9OwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBRSUMxMTdfQ09NTUFORFMgeyAgICAgICAgIHtOVUxMLCAweDAwLCAweDAwLCBtb2RlLCAwLCBkaXNjcmV0aW9uYWx9LCAgIHsic29mdCByZXNldCIsIDB4MDAsIDB4MDAsIG1vdGlvbiwgMSwgcmVxdWlyZWR9LCAgIHsicmVwb3J0IG5leHQgYml0IiwgMHgwMCwgMHgwMCwgcmVwb3J0LCAwLCByZXF1aXJlZH0sICAgeyJwYXVzZSIsIDB4MzYsIDB4MjQsIG1vdGlvbiwgMSwgcmVxdWlyZWR9LCAgIHsibWljcm8gc3RlcCBwYXVzZSIsIDB4MzYsIDB4MjQsIG1vdGlvbiwgMSwgcmVxdWlyZWR9LCAgIHsiYWx0ZXJuYXRlIGNvbW1hbmQgdGltZW91dCIsIDB4MDAsIDB4MDAsIG1vZGUsIDAsIHJlcXVpcmVkfSwgICB7InJlcG9ydCBkcml2ZSBzdGF0dXMiLCAweDAwLCAweDAwLCByZXBvcnQsIDAsIHJlcXVpcmVkfSwgICB7InJlcG9ydCBlcnJvciBjb2RlIiwgMHgwMSwgMHgwMSwgcmVwb3J0LCAwLCByZXF1aXJlZH0sICAgeyJyZXBvcnQgZHJpdmUgY29uZmlndXJhdGlvbiIsMHgwMCwgMHgwMCwgcmVwb3J0LCAwLCByZXF1aXJlZH0sICAgeyJyZXBvcnQgcm9tIHZlcnNpb24iLCAweDAwLCAweDAwLCByZXBvcnQsIDAsIHJlcXVpcmVkfSwgICB7ImxvZ2ljYWwgZm9yd2FyZCIsIDB4MzcsIDB4MjUsIG1vdGlvbiwgMCwgcmVxdWlyZWR9LCAgIHsicGh5c2ljYWwgcmV2ZXJzZSIsIDB4MTcsIDB4MDUsIG1vdGlvbiwgMCwgcmVxdWlyZWR9LCAgIHsicGh5c2ljYWwgZm9yd2FyZCIsIDB4MTcsIDB4MDUsIG1vdGlvbiwgMCwgcmVxdWlyZWR9LCAgIHsic2VlayBoZWFkIHRvIHRyYWNrIiwgMHgzNywgMHgyNSwgbW90aW9uLCAwLCByZXF1aXJlZH0sICAgeyJzZWVrIGxvYWQgcG9pbnQiLCAweDE3LCAweDA1LCBtb3Rpb24sIDEsIHJlcXVpcmVkfSwgICB7ImVudGVyIGZvcm1hdCBtb2RlIiwgMHgxZiwgMHgwNSwgbW9kZSwgMCwgcmVxdWlyZWR9LCAgIHsid3JpdGUgcmVmZXJlbmNlIGJ1cnN0IiwgMHgxZiwgMHgwNSwgbW90aW9uLCAxLCByZXF1aXJlZH0sICAgeyJlbnRlciB2ZXJpZnkgbW9kZSIsIDB4MzcsIDB4MjUsIG1vZGUsIDAsIHJlcXVpcmVkfSwgICB7InN0b3AgdGFwZSIsIDB4MDAsIDB4MDAsIG1vdGlvbiwgMSwgcmVxdWlyZWR9LCAgIHsicmVzZXJ2ZWQgKDE5KSIsIDB4MDAsIDB4MDAsIHVudXNlZCwgMCwgZGlzY3JldGlvbmFsfSwgICB7InJlc2VydmVkICgyMCkiLCAweDAwLCAweDAwLCB1bnVzZWQsIDAsIGRpc2NyZXRpb25hbH0sICAgeyJtaWNybyBzdGVwIGhlYWQgdXAiLCAweDAyLCAweDAwLCBtb3Rpb24sIDAsIHJlcXVpcmVkfSwgICB7Im1pY3JvIHN0ZXAgaGVhZCBkb3duIiwgMHgwMiwgMHgwMCwgbW90aW9uLCAwLCByZXF1aXJlZH0sICAgeyJzb2Z0IHNlbGVjdCIsIDB4MDAsIDB4MDAsIG1vZGUsIDAsIGRpc2NyZXRpb25hbH0sICAgeyJzb2Z0IGRlc2VsZWN0IiwgMHgwMCwgMHgwMCwgbW9kZSwgMCwgZGlzY3JldGlvbmFsfSwgICB7InNraXAgc2VnbWVudHMgcmV2ZXJzZSIsIDB4MzYsIDB4MjQsIG1vdGlvbiwgMSwgcmVxdWlyZWR9LCAgIHsic2tpcCBzZWdtZW50cyBmb3J3YXJkIiwgMHgzNiwgMHgyNCwgbW90aW9uLCAxLCByZXF1aXJlZH0sICAgeyJzZWxlY3QgcmF0ZSBvciBmb3JtYXQiLCAweDAzLCAweDAxLCBtb2RlLCAwLCByZXF1aXJlZCAgfSwgICB7ImVudGVyIGRpYWcgbW9kZSAxIiwgMHgwMCwgMHgwMCwgbW9kZSwgMCwgZGlzY3JldGlvbmFsfSwgICB7ImVudGVyIGRpYWcgbW9kZSAyIiwgMHgwMCwgMHgwMCwgbW9kZSwgMCwgZGlzY3JldGlvbmFsfSwgICB7ImVudGVyIHByaW1hcnkgbW9kZSIsIDB4MDAsIDB4MDAsIG1vZGUsIDAsIHJlcXVpcmVkfSwgICB7InZlbmRvciB1bmlxdWUgKDMxKSIsIDB4MDAsIDB4MDAsIHVudXNlZCwgMCwgZGlzY3JldGlvbmFsfSwgICB7InJlcG9ydCB2ZW5kb3IgaWQiLCAweDAwLCAweDAwLCByZXBvcnQsIDAsIHJlcXVpcmVkfSwgICB7InJlcG9ydCB0YXBlIHN0YXR1cyIsIDB4MDQsIDB4MDQsIHJlcG9ydCwgMCwgY2NzMX0sICAgeyJza2lwIGV4dGVuZGVkIHJldmVyc2UiLCAweDM2LCAweDI0LCBtb3Rpb24sIDEsIGNjczF9LCAgIHsic2tpcCBleHRlbmRlZCBmb3J3YXJkIiwgMHgzNiwgMHgyNCwgbW90aW9uLCAxLCBjY3MxfSwgICB7ImNhbGlicmF0ZSB0YXBlIGxlbmd0aCIsIDB4MTcsIDB4MDUsIG1vdGlvbiwgMSwgY2NzMn0sICAgeyJyZXBvcnQgZm9ybWF0IHNlZ21lbnRzIiwgMHgxNywgMHgwNSwgcmVwb3J0LCAwLCBjY3MyfSwgICB7InNldCBmb3JtYXQgc2VnbWVudHMiLCAweDE3LCAweDA1LCBtb2RlLCAwLCBjY3MyfSwgICB7InJlc2VydmVkICgzOSkiLCAweDAwLCAweDAwLCB1bnVzZWQsIDAsIGRpc2NyZXRpb25hbH0sICAgeyJ2ZW5kb3IgdW5pcXVlICg0MCkiLCAweDAwLCAweDAwLCB1bnVzZWQsIDAsIGRpc2NyZXRpb25hbH0sICAgeyJ2ZW5kb3IgdW5pcXVlICg0MSkiLCAweDAwLCAweDAwLCB1bnVzZWQsIDAsIGRpc2NyZXRpb25hbH0sICAgeyJ2ZW5kb3IgdW5pcXVlICg0MikiLCAweDAwLCAweDAwLCB1bnVzZWQsIDAsIGRpc2NyZXRpb25hbH0sICAgeyJ2ZW5kb3IgdW5pcXVlICg0MykiLCAweDAwLCAweDAwLCB1bnVzZWQsIDAsIGRpc2NyZXRpb25hbH0sICAgeyJ2ZW5kb3IgdW5pcXVlICg0NCkiLCAweDAwLCAweDAwLCB1bnVzZWQsIDAsIGRpc2NyZXRpb25hbH0sICAgeyJ2ZW5kb3IgdW5pcXVlICg0NSkiLCAweDAwLCAweDAwLCB1bnVzZWQsIDAsIGRpc2NyZXRpb25hbH0sICAgeyJwaGFudG9tIHNlbGVjdCIsIDB4MDAsIDB4MDAsIG1vZGUsIDAsIGRpc2NyZXRpb25hbH0sICAgeyJwaGFudG9tIGRlc2VsZWN0IiwgMHgwMCwgMHgwMCwgbW9kZSwgMCwgZGlzY3JldGlvbmFsfSwgfQotCi0jZGVmaW5lIFFJQ19TVEFUVVNfUkVBRFkgMHgwMSAgCi0jZGVmaW5lIFFJQ19TVEFUVVNfRVJST1IgMHgwMiAgCi0jZGVmaW5lIFFJQ19TVEFUVVNfQ0FSVFJJREdFX1BSRVNFTlQgMHgwNCAgCi0jZGVmaW5lIFFJQ19TVEFUVVNfV1JJVEVfUFJPVEVDVCAweDA4ICAKLSNkZWZpbmUgUUlDX1NUQVRVU19ORVdfQ0FSVFJJREdFIDB4MTAgIAotI2RlZmluZSBRSUNfU1RBVFVTX1JFRkVSRU5DRUQgMHgyMCAgCi0jZGVmaW5lIFFJQ19TVEFUVVNfQVRfQk9UIDB4NDAgIAotI2RlZmluZSBRSUNfU1RBVFVTX0FUX0VPVCAweDgwICAKLQorI2RlZmluZSBRSUNfU1RBVFVTX1JFQURZIDB4MDEKKyNkZWZpbmUgUUlDX1NUQVRVU19FUlJPUiAweDAyCisjZGVmaW5lIFFJQ19TVEFUVVNfQ0FSVFJJREdFX1BSRVNFTlQgMHgwNAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgUUlDX1NUQVRVU19XUklURV9QUk9URUNUIDB4MDgKKyNkZWZpbmUgUUlDX1NUQVRVU19ORVdfQ0FSVFJJREdFIDB4MTAKKyNkZWZpbmUgUUlDX1NUQVRVU19SRUZFUkVOQ0VEIDB4MjAKKyNkZWZpbmUgUUlDX1NUQVRVU19BVF9CT1QgMHg0MAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgUUlDX1NUQVRVU19BVF9FT1QgMHg4MAogI2RlZmluZSBRSUNfQ09ORklHX1JBVEVfTUFTSyAweDE4CiAjZGVmaW5lIFFJQ19DT05GSUdfUkFURV9TSElGVCAzCiAjZGVmaW5lIFFJQ19DT05GSUdfUkFURV8yNTAgMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUUlDX0NPTkZJR19SQVRFXzUwMCAyCiAjZGVmaW5lIFFJQ19DT05GSUdfUkFURV8xMDAwIDMKICNkZWZpbmUgUUlDX0NPTkZJR19SQVRFXzIwMDAgMQotI2RlZmluZSBRSUNfQ09ORklHX1JBVEVfNDAwMCAwICAKLQotI2RlZmluZSBRSUNfQ09ORklHX0xPTkcgMHg0MCAgCi0jZGVmaW5lIFFJQ19DT05GSUdfODAgMHg4MCAgCi0KKyNkZWZpbmUgUUlDX0NPTkZJR19SQVRFXzQwMDAgMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgUUlDX0NPTkZJR19MT05HIDB4NDAKKyNkZWZpbmUgUUlDX0NPTkZJR184MCAweDgwCiAjZGVmaW5lIFFJQ19UQVBFX1NURF9NQVNLIDB4MGYKICNkZWZpbmUgUUlDX1RBUEVfUUlDNDAgMHgwMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUUlDX1RBUEVfUUlDODAgMHgwMgogI2RlZmluZSBRSUNfVEFQRV9RSUMzMDIwIDB4MDMKICNkZWZpbmUgUUlDX1RBUEVfUUlDMzAxMCAweDA0Ci0KICNkZWZpbmUgUUlDX1RBUEVfTEVOX01BU0sgMHg3MAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUUlDX1RBUEVfMjA1RlQgMHgxMAogI2RlZmluZSBRSUNfVEFQRV8zMDdGVCAweDIwCiAjZGVmaW5lIFFJQ19UQVBFX1ZBUklBQkxFIDB4MzAKICNkZWZpbmUgUUlDX1RBUEVfMTEwMEZUIDB4NDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFFJQ19UQVBFX0ZMRVggMHg2MAotCiAjZGVmaW5lIFFJQ19UQVBFX1dJREUgMHg4MAotCiAjZGVmaW5lIFFJQ19UT1BfVEFQRV9MRU4gMTUwMAotCiB0eXBlZGVmIHN0cnVjdCB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGNoYXIgKm1lc3NhZ2U7CiAgdW5zaWduZWQgaW50IGZhdGFsOjE7CiB9IGZ0YXBlX2Vycm9yOwotCiAjZGVmaW5lIFFJQzExN19FUlJPUlMgeyAgICB7ICJObyBlcnJvciIsIDAsIH0sICAgIHsgIkNvbW1hbmQgUmVjZWl2ZWQgd2hpbGUgRHJpdmUgTm90IFJlYWR5IiwgMCwgfSwgICAgeyAiQ2FydHJpZGdlIE5vdCBQcmVzZW50IG9yIFJlbW92ZWQiLCAxLCB9LCAgICB7ICJNb3RvciBTcGVlZCBFcnJvciAobm90IHdpdGhpbiAxJSkiLCAxLCB9LCAgICB7ICJNb3RvciBTcGVlZCBGYXVsdCAoamFtbWVkLCBvciBncm9zcyBzcGVlZCBlcnJvciIsIDEsIH0sICAgIHsgIkNhcnRyaWRnZSBXcml0ZSBQcm90ZWN0ZWQiLCAxLCB9LCAgICB7ICJVbmRlZmluZWQgb3IgUmVzZXJ2ZWQgQ29tbWFuZCBDb2RlIiwgMSwgfSwgICAgeyAiSWxsZWdhbCBUcmFjayBBZGRyZXNzIFNwZWNpZmllZCBmb3IgU2VlayIsIDEsIH0sICAgIHsgIklsbGVnYWwgQ29tbWFuZCBpbiBSZXBvcnQgU3ViY29udGV4dCIsIDAsIH0sICAgIHsgIklsbGVnYWwgRW50cnkgaW50byBhIERpYWdub3N0aWMgTW9kZSIsIDEsIH0sICAgIHsgIkJyb2tlbiBUYXBlIERldGVjdGVkIChiYXNlZCBvbiBob2xlIHNlbnNvcikiLCAxLCB9LCAgICB7ICJXYXJuaW5nLS1SZWFkIEdhaW4gU2V0dGluZyBFcnJvciIsIDEsIH0sICAgIHsgIkNvbW1hbmQgUmVjZWl2ZWQgV2hpbGUgRXJyb3IgU3RhdHVzIFBlbmRpbmcgKG9icykiLCAxLCB9LCAgICB7ICJDb21tYW5kIFJlY2VpdmVkIFdoaWxlIE5ldyBDYXJ0cmlkZ2UgUGVuZGluZyIsIDEsIH0sICAgIHsgIkNvbW1hbmQgSWxsZWdhbCBvciBVbmRlZmluZWQgaW4gUHJpbWFyeSBNb2RlIiwgMSwgfSwgICAgeyAiQ29tbWFuZCBJbGxlZ2FsIG9yIFVuZGVmaW5lZCBpbiBGb3JtYXQgTW9kZSIsIDEsIH0sICAgIHsgIkNvbW1hbmQgSWxsZWdhbCBvciBVbmRlZmluZWQgaW4gVmVyaWZ5IE1vZGUiLCAxLCB9LCAgICB7ICJMb2dpY2FsIEZvcndhcmQgTm90IGF0IExvZ2ljYWwgQk9UIG9yIG5vIEZvcm1hdCBTZWdtZW50cyBpbiBGb3JtYXQgTW9kZSIsIDEsIH0sICAgIHsgIkxvZ2ljYWwgRU9UIEJlZm9yZSBBbGwgU2VnbWVudHMgZ2VuZXJhdGVkIiwgMSwgfSwgICAgeyAiQ29tbWFuZCBJbGxlZ2FsIFdoZW4gQ2FydHJpZGdlIE5vdCBSZWZlcmVuY2VkIiwgMSwgfSwgICAgeyAiU2VsZi1EaWFnbm9zdGljIEZhaWxlZCAoY2Fubm90IGJlIGNsZWFyZWQpIiwgMSwgfSwgICAgeyAiV2FybmluZyBFRVBST00gTm90IEluaXRpYWxpemVkLCBEZWZhdWx0cyBTZXQiLCAxLCB9LCAgICB7ICJFRVBST00gQ29ycnVwdGVkIG9yIEhhcmR3YXJlIEZhaWx1cmUiLCAxLCB9LCAgICB7ICJNb3Rpb24gVGltZS1vdXQgRXJyb3IiLCAxLCB9LCAgICB7ICJEYXRhIFNlZ21lbnQgVG9vIExvbmcgLS0gTG9naWNhbCBGb3J3YXJkIG9yIFBhdXNlIiwgMSwgfSwgICAgeyAiVHJhbnNtaXQgT3ZlcnJ1biAob2JzKSIsIDEsIH0sICAgIHsgIlBvd2VyIE9uIFJlc2V0IE9jY3VycmVkIiwgMCwgfSwgICAgeyAiU29mdHdhcmUgUmVzZXQgT2NjdXJyZWQiLCAwLCB9LCAgICB7ICJEaWFnbm9zdGljIE1vZGUgMSBFcnJvciIsIDEsIH0sICAgIHsgIkRpYWdub3N0aWMgTW9kZSAyIEVycm9yIiwgMSwgfSwgICAgeyAiQ29tbWFuZCBSZWNlaXZlZCBEdXJpbmcgTm9uLUludGVycnVwdGlibGUgUHJvY2VzcyIsIDEsIH0sICAgIHsgIlJhdGUgb3IgRm9ybWF0IFNlbGVjdGlvbiBFcnJvciIsIDEsIH0sICAgIHsgIklsbGVnYWwgQ29tbWFuZCBXaGlsZSBpbiBIaWdoIFNwZWVkIE1vZGUiLCAxLCB9LCAgICB7ICJJbGxlZ2FsIFNlZWsgU2VnbWVudCBWYWx1ZSIsIDEsIH0sICAgIHsgIkludmFsaWQgTWVkaWEiLCAxLCB9LCAgICB7ICJIZWFkIFBvc2l0aW9uaW5nIEZhaWx1cmUiLCAxLCB9LCAgICB7ICJXcml0ZSBSZWZlcmVuY2UgQnVyc3QgRmFpbHVyZSIsIDEsIH0sICAgIHsgIlByb20gQ29kZSBNaXNzaW5nIiwgMSwgfSwgICAgeyAiSW52YWxpZCBGb3JtYXQiLCAxLCB9LCAgICB7ICJFT1QvQk9UIFN5c3RlbSBGYWlsdXJlIiwgMSwgfSwgICAgeyAiUHJvbSBBIENoZWNrc3VtIEVycm9yIiwgMSwgfSwgICAgeyAiRHJpdmUgV2FrZXVwIFJlc2V0IE9jY3VycmVkIiwgMSwgfSwgICAgeyAiUHJvbSBCIENoZWNrc3VtIEVycm9yIiwgMSwgfSwgICAgeyAiSWxsZWdhbCBFbnRyeSBpbnRvIEZvcm1hdCBNb2RlIiwgMSwgfSwgfQotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvcW54dHlwZXMuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9xbnh0eXBlcy5oCmluZGV4IDUzY2QyMGMuLjY4NmZlYmQgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9xbnh0eXBlcy5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9xbnh0eXBlcy5oCkBAIC03LDIzICs3LDI5IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfUU5YNFRZUEVTX0gKICNkZWZpbmUgX1FOWDRUWVBFU19ICi0KIHR5cGVkZWYgX19sZTE2IHFueDRfbnh0bnRfdDsKIHR5cGVkZWYgX191OCBxbng0X2Z0eXBlX3Q7Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB0eXBlZGVmIHN0cnVjdCB7CiAgX19sZTMyIHh0bnRfYmxrOwogIF9fbGUzMiB4dG50X3NpemU7CiB9IHFueDRfeHRudF90OwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogdHlwZWRlZiBfX2xlMTYgcW54NF9tb2RlX3Q7CiB0eXBlZGVmIF9fbGUxNiBxbng0X211aWRfdDsKIHR5cGVkZWYgX19sZTE2IHFueDRfbWdpZF90OwogdHlwZWRlZiBfX2xlMzIgcW54NF9vZmZfdDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB0eXBlZGVmIF9fbGUxNiBxbng0X25saW5rX3Q7Ci0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3F1b3RhLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvcXVvdGEuaAppbmRleCAwNTRhZjVhLi41NWY2NjQyIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvcXVvdGEuaAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvcXVvdGEuaApAQCAtNyw4MSArNyw4OCBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX0xJTlVYX1FVT1RBXwogI2RlZmluZSBfTElOVVhfUVVPVEFfCi0KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fRFFVT1RfVkVSU0lPTl9fICJkcXVvdF82LjUuMSIKICNkZWZpbmUgX19EUVVPVF9OVU1fVkVSU0lPTl9fIDYqMTAwMDArNSoxMDArMQotCiB0eXBlZGVmIF9fa2VybmVsX3VpZDMyX3QgcWlkX3Q7CiB0eXBlZGVmIF9fdTY0IHFzaXplX3Q7Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFFVT1RBQkxPQ0tfQklUUyAxMAogI2RlZmluZSBRVU9UQUJMT0NLX1NJWkUgKDEgPDwgUVVPVEFCTE9DS19CSVRTKQotCiAjZGVmaW5lIHFiMmtiKHgpICgoeCkgPDwgKFFVT1RBQkxPQ0tfQklUUy0xMCkpCiAjZGVmaW5lIGtiMnFiKHgpICgoeCkgPj4gKFFVT1RBQkxPQ0tfQklUUy0xMCkpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSB0b3FiKHgpICgoKHgpICsgUVVPVEFCTE9DS19TSVpFIC0gMSkgPj4gUVVPVEFCTE9DS19CSVRTKQotCiAjZGVmaW5lIE1BWFFVT1RBUyAyCi0jZGVmaW5lIFVTUlFVT1RBIDAgIAotI2RlZmluZSBHUlBRVU9UQSAxICAKLQorI2RlZmluZSBVU1JRVU9UQSAwCisjZGVmaW5lIEdSUFFVT1RBIDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIElOSVRRRk5BTUVTIHsgICAidXNlciIsICAgICAiZ3JvdXAiLCAgICAgInVuZGVmaW5lZCIsICB9OwotCiAjZGVmaW5lIFNVQkNNRE1BU0sgMHgwMGZmCiAjZGVmaW5lIFNVQkNNRFNISUZUIDgKICNkZWZpbmUgUUNNRChjbWQsIHR5cGUpICgoKGNtZCkgPDwgU1VCQ01EU0hJRlQpIHwgKCh0eXBlKSAmIFNVQkNNRE1BU0spKQotCi0jZGVmaW5lIFFfU1lOQyAweDgwMDAwMSAgCi0jZGVmaW5lIFFfUVVPVEFPTiAweDgwMDAwMiAgCi0jZGVmaW5lIFFfUVVPVEFPRkYgMHg4MDAwMDMgIAotI2RlZmluZSBRX0dFVEZNVCAweDgwMDAwNCAgCi0jZGVmaW5lIFFfR0VUSU5GTyAweDgwMDAwNSAgCi0jZGVmaW5lIFFfU0VUSU5GTyAweDgwMDAwNiAgCi0jZGVmaW5lIFFfR0VUUVVPVEEgMHg4MDAwMDcgIAotI2RlZmluZSBRX1NFVFFVT1RBIDB4ODAwMDA4ICAKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgUV9TWU5DIDB4ODAwMDAxCisjZGVmaW5lIFFfUVVPVEFPTiAweDgwMDAwMgorI2RlZmluZSBRX1FVT1RBT0ZGIDB4ODAwMDAzCisjZGVmaW5lIFFfR0VURk1UIDB4ODAwMDA0CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBRX0dFVElORk8gMHg4MDAwMDUKKyNkZWZpbmUgUV9TRVRJTkZPIDB4ODAwMDA2CisjZGVmaW5lIFFfR0VUUVVPVEEgMHg4MDAwMDcKKyNkZWZpbmUgUV9TRVRRVU9UQSAweDgwMDAwOAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUUlGX0JMSU1JVFMgMQogI2RlZmluZSBRSUZfU1BBQ0UgMgogI2RlZmluZSBRSUZfSUxJTUlUUyA0CiAjZGVmaW5lIFFJRl9JTk9ERVMgOAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUUlGX0JUSU1FIDE2CiAjZGVmaW5lIFFJRl9JVElNRSAzMgogI2RlZmluZSBRSUZfTElNSVRTIChRSUZfQkxJTUlUUyB8IFFJRl9JTElNSVRTKQogI2RlZmluZSBRSUZfVVNBR0UgKFFJRl9TUEFDRSB8IFFJRl9JTk9ERVMpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBRSUZfVElNRVMgKFFJRl9CVElNRSB8IFFJRl9JVElNRSkKICNkZWZpbmUgUUlGX0FMTCAoUUlGX0xJTUlUUyB8IFFJRl9VU0FHRSB8IFFJRl9USU1FUykKLQogc3RydWN0IGlmX2RxYmxrIHsKICBfX3U2NCBkcWJfYmhhcmRsaW1pdDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191NjQgZHFiX2Jzb2Z0bGltaXQ7CiAgX191NjQgZHFiX2N1cnNwYWNlOwogIF9fdTY0IGRxYl9paGFyZGxpbWl0OwogIF9fdTY0IGRxYl9pc29mdGxpbWl0OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U2NCBkcWJfY3VyaW5vZGVzOwogIF9fdTY0IGRxYl9idGltZTsKICBfX3U2NCBkcWJfaXRpbWU7CiAgX191MzIgZHFiX3ZhbGlkOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07Ci0KICNkZWZpbmUgSUlGX0JHUkFDRSAxCiAjZGVmaW5lIElJRl9JR1JBQ0UgMgogI2RlZmluZSBJSUZfRkxBR1MgNAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSUlGX0FMTCAoSUlGX0JHUkFDRSB8IElJRl9JR1JBQ0UgfCBJSUZfRkxBR1MpCi0KIHN0cnVjdCBpZl9kcWluZm8gewogIF9fdTY0IGRxaV9iZ3JhY2U7CiAgX191NjQgZHFpX2lncmFjZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgZHFpX2ZsYWdzOwogIF9fdTMyIGRxaV92YWxpZDsKIH07Ci0KICNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3JhaWQvbWQuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9yYWlkL21kLmgKaW5kZXggZDYwOWMwNi4uN2U5YmZjNSAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3JhaWQvbWQuaAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvcmFpZC9tZC5oCkBAIC03LDQzICs3LDUyIEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfTURfSAogI2RlZmluZSBfTURfSAotCiAjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+CiAjaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS5oPgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNpbmNsdWRlIDxsaW51eC9tYWpvci5oPgogI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaGRyZWcuaD4KICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPG5ldC9jaGVja3N1bS5oPgogI2luY2x1ZGUgPGxpbnV4L3JhbmRvbS5oPgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNpbmNsdWRlIDxsaW51eC9rZXJuZWxfc3RhdC5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KICNpbmNsdWRlIDxsaW51eC9tZW1wb29sLmg+CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9yZWJvb3QuaD4KICNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CiAjaW5jbHVkZSA8bGludXgvYmxrcGcuaD4KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjaW5jbHVkZSA8bGludXgvYmlvLmg+Ci0KICNpbmNsdWRlIDxsaW51eC9yYWlkL21kX3AuaD4KICNpbmNsdWRlIDxsaW51eC9yYWlkL21kX3UuaD4KICNpbmNsdWRlIDxsaW51eC9yYWlkL21kX2suaD4KLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTURfTUFKT1JfVkVSU0lPTiAwCiAjZGVmaW5lIE1EX01JTk9SX1ZFUlNJT04gOTAKLQogI2RlZmluZSBNRF9QQVRDSExFVkVMX1ZFUlNJT04gMwotCiAjZW5kaWYKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9yYWlkL21kX2suaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9yYWlkL21kX2suaAppbmRleCBjOGI4NThjLi43YjUxNjk0IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvcmFpZC9tZF9rLmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3JhaWQvbWRfay5oCkBAIC03LDE3OCArNywyMTAgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9NRF9LX0gKICNkZWZpbmUgX01EX0tfSAotCiAjaW5jbHVkZSAiLi4vLi4vLi4vZHJpdmVycy9tZC9kbS1iaW8tbGlzdC5oIgotCiAjZGVmaW5lIExFVkVMX01VTFRJUEFUSCAoLTQpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBMRVZFTF9MSU5FQVIgKC0xKQogI2RlZmluZSBMRVZFTF9GQVVMVFkgKC01KQotCiAjZGVmaW5lIExFVkVMX05PTkUgKC0xMDAwMDAwKQotCiAjZGVmaW5lIE1heFNlY3RvciAofihzZWN0b3JfdCkwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTURfVEhSRUFEX05BTUVfTUFYIDE0Ci0KIHR5cGVkZWYgc3RydWN0IG1kZGV2X3MgbWRkZXZfdDsKIHR5cGVkZWYgc3RydWN0IG1ka19yZGV2X3MgbWRrX3JkZXZfdDsKLQotI2RlZmluZSBNQVhfTURfREVWUyAyNTYgIAotCisjZGVmaW5lIE1BWF9NRF9ERVZTIDI1NgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTUFYX0NIVU5LX1NJWkUgKDE8PDMwKQotCiBzdHJ1Y3QgbWRrX3JkZXZfcwogewogIHN0cnVjdCBsaXN0X2hlYWQgc2FtZV9zZXQ7Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc2VjdG9yX3Qgc2l6ZTsKICBtZGRldl90ICptZGRldjsKICB1bnNpZ25lZCBsb25nIGxhc3RfZXZlbnRzOwotCiAgc3RydWN0IGJsb2NrX2RldmljZSAqYmRldjsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgcGFnZSAqc2JfcGFnZTsKICBpbnQgc2JfbG9hZGVkOwogIF9fdTY0IHNiX2V2ZW50czsKICBzZWN0b3JfdCBkYXRhX29mZnNldDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc2VjdG9yX3Qgc2Jfb2Zmc2V0OwogIGludCBzYl9zaXplOwogIGludCBwcmVmZXJyZWRfbWlub3I7Ci0KICBzdHJ1Y3Qga29iamVjdCBrb2JqOwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0jZGVmaW5lIEZhdWx0eSAxICAKLSNkZWZpbmUgSW5fc3luYyAyICAKLSNkZWZpbmUgV3JpdGVNb3N0bHkgNCAgCi0jZGVmaW5lIEJhcnJpZXJzTm90c3VwcCA1ICAKLQorI2RlZmluZSBGYXVsdHkgMQorI2RlZmluZSBJbl9zeW5jIDIKKyNkZWZpbmUgV3JpdGVNb3N0bHkgNAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgQmFycmllcnNOb3RzdXBwIDUKICBpbnQgZGVzY19ucjsKICBpbnQgcmFpZF9kaXNrOwogIGludCBzYXZlZF9yYWlkX2Rpc2s7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHNlY3Rvcl90IHJlY292ZXJ5X29mZnNldDsKLQogIGF0b21pY190IG5yX3BlbmRpbmc7CiAgYXRvbWljX3QgcmVhZF9lcnJvcnM7CiAgYXRvbWljX3QgY29ycmVjdGVkX2Vycm9yczsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwotCiBzdHJ1Y3QgbWRkZXZfcwogewogIHZvaWQgKnByaXZhdGU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCBtZGtfcGVyc29uYWxpdHkgKnBlcnM7CiAgZGV2X3QgdW5pdDsKICBpbnQgbWRfbWlub3I7CiAgc3RydWN0IGxpc3RfaGVhZCBkaXNrczsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgaW50IHNiX2RpcnR5OwogIGludCBybzsKLQogIHN0cnVjdCBnZW5kaXNrICpnZW5kaXNrOwotCiAgc3RydWN0IGtvYmplY3Qga29iajsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBpbnQgbWFqb3JfdmVyc2lvbiwKICBtaW5vcl92ZXJzaW9uLAogIHBhdGNoX3ZlcnNpb247CiAgaW50IHBlcnNpc3RlbnQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGludCBjaHVua19zaXplOwogIHRpbWVfdCBjdGltZSwgdXRpbWU7CiAgaW50IGxldmVsLCBsYXlvdXQ7CiAgY2hhciBjbGV2ZWxbMTZdOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBpbnQgcmFpZF9kaXNrczsKICBpbnQgbWF4X2Rpc2tzOwogIHNlY3Rvcl90IHNpemU7CiAgc2VjdG9yX3QgYXJyYXlfc2l6ZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191NjQgZXZlbnRzOwotCiAgY2hhciB1dWlkWzE2XTsKLQogIHNlY3Rvcl90IHJlc2hhcGVfcG9zaXRpb247CiAgaW50IGRlbHRhX2Rpc2tzLCBuZXdfbGV2ZWwsIG5ld19sYXlvdXQsIG5ld19jaHVuazsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgbWRrX3RocmVhZF9zICp0aHJlYWQ7CiAgc3RydWN0IG1ka190aHJlYWRfcyAqc3luY190aHJlYWQ7CiAgc2VjdG9yX3QgY3Vycl9yZXN5bmM7CiAgdW5zaWduZWQgbG9uZyByZXN5bmNfbWFyazsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc2VjdG9yX3QgcmVzeW5jX21hcmtfY250OwogIHNlY3Rvcl90IGN1cnJfbWFya19jbnQ7Ci0KICBzZWN0b3JfdCByZXN5bmNfbWF4X3NlY3RvcnM7Ci0KICBzZWN0b3JfdCByZXN5bmNfbWlzbWF0Y2hlczsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzZWN0b3JfdCBzdXNwZW5kX2xvOwogIHNlY3Rvcl90IHN1c3BlbmRfaGk7Ci0KICBpbnQgc3luY19zcGVlZF9taW47CiAgaW50IHN5bmNfc3BlZWRfbWF4OwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGludCBva19zdGFydF9kZWdyYWRlZDsKLQogI2RlZmluZSBNRF9SRUNPVkVSWV9SVU5OSU5HIDAKICNkZWZpbmUgTURfUkVDT1ZFUllfU1lOQyAxCiAjZGVmaW5lIE1EX1JFQ09WRVJZX0VSUiAyCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNRF9SRUNPVkVSWV9JTlRSIDMKICNkZWZpbmUgTURfUkVDT1ZFUllfRE9ORSA0CiAjZGVmaW5lIE1EX1JFQ09WRVJZX05FRURFRCA1CiAjZGVmaW5lIE1EX1JFQ09WRVJZX1JFUVVFU1RFRCA2CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNRF9SRUNPVkVSWV9DSEVDSyA3CiAjZGVmaW5lIE1EX1JFQ09WRVJZX1JFU0hBUEUgOAogI2RlZmluZSBNRF9SRUNPVkVSWV9GUk9aRU4gOQotCiAgdW5zaWduZWQgbG9uZyByZWNvdmVyeTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBpbnQgaW5fc3luYzsKICBzdHJ1Y3QgbXV0ZXggcmVjb25maWdfbXV0ZXg7CiAgYXRvbWljX3QgYWN0aXZlOwotCiAgaW50IGNoYW5nZWQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGludCBkZWdyYWRlZDsKICBpbnQgYmFycmllcnNfd29yazsKICBzdHJ1Y3QgYmlvICpiaW9saXN0OwotCiAgYXRvbWljX3QgcmVjb3ZlcnlfYWN0aXZlOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB3YWl0X3F1ZXVlX2hlYWRfdCByZWNvdmVyeV93YWl0OwogIHNlY3Rvcl90IHJlY292ZXJ5X2NwOwotCiAgc3BpbmxvY2tfdCB3cml0ZV9sb2NrOwogIHdhaXRfcXVldWVfaGVhZF90IHNiX3dhaXQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGF0b21pY190IHBlbmRpbmdfd3JpdGVzOwotCiAgdW5zaWduZWQgaW50IHNhZmVtb2RlOwogIHVuc2lnbmVkIGludCBzYWZlbW9kZV9kZWxheTsKICBzdHJ1Y3QgdGltZXJfbGlzdCBzYWZlbW9kZV90aW1lcjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgYXRvbWljX3Qgd3JpdGVzX3BlbmRpbmc7CiAgcmVxdWVzdF9xdWV1ZV90ICpxdWV1ZTsKLQogIGF0b21pY190IHdyaXRlX2JlaGluZDsKICB1bnNpZ25lZCBpbnQgbWF4X3dyaXRlX2JlaGluZDsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgYml0bWFwICpiaXRtYXA7CiAgc3RydWN0IGZpbGUgKmJpdG1hcF9maWxlOwogIGxvbmcgYml0bWFwX29mZnNldDsKICBsb25nIGRlZmF1bHRfYml0bWFwX29mZnNldDsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgbGlzdF9oZWFkIGFsbF9tZGRldnM7CiB9OwotCitzdHJ1Y3QgbWRrX3BlcnNvbmFsaXR5Cit7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIGNoYXIgKm5hbWU7CisgaW50IGxldmVsOworIHN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKyBzdHJ1Y3QgbW9kdWxlICpvd25lcjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgaW50ICgqbWFrZV9yZXF1ZXN0KShyZXF1ZXN0X3F1ZXVlX3QgKnEsIHN0cnVjdCBiaW8gKmJpbyk7CisgaW50ICgqcnVuKShtZGRldl90ICptZGRldik7CisgaW50ICgqc3RvcCkobWRkZXZfdCAqbWRkZXYpOworIHZvaWQgKCpzdGF0dXMpKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBtZGRldl90ICptZGRldik7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIHZvaWQgKCplcnJvcl9oYW5kbGVyKShtZGRldl90ICptZGRldiwgbWRrX3JkZXZfdCAqcmRldik7CisgaW50ICgqaG90X2FkZF9kaXNrKSAobWRkZXZfdCAqbWRkZXYsIG1ka19yZGV2X3QgKnJkZXYpOworIGludCAoKmhvdF9yZW1vdmVfZGlzaykgKG1kZGV2X3QgKm1kZGV2LCBpbnQgbnVtYmVyKTsKKyBpbnQgKCpzcGFyZV9hY3RpdmUpIChtZGRldl90ICptZGRldik7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIHNlY3Rvcl90ICgqc3luY19yZXF1ZXN0KShtZGRldl90ICptZGRldiwgc2VjdG9yX3Qgc2VjdG9yX25yLCBpbnQgKnNraXBwZWQsIGludCBnb19mYXN0ZXIpOworIGludCAoKnJlc2l6ZSkgKG1kZGV2X3QgKm1kZGV2LCBzZWN0b3JfdCBzZWN0b3JzKTsKKyBpbnQgKCpjaGVja19yZXNoYXBlKSAobWRkZXZfdCAqbWRkZXYpOworIGludCAoKnN0YXJ0X3Jlc2hhcGUpIChtZGRldl90ICptZGRldik7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIGludCAoKnJlY29uZmlnKSAobWRkZXZfdCAqbWRkZXYsIGludCBsYXlvdXQsIGludCBjaHVua19zaXplKTsKKyB2b2lkICgqcXVpZXNjZSkgKG1kZGV2X3QgKm1kZGV2LCBpbnQgc3RhdGUpOworfTsKIHN0cnVjdCBtZF9zeXNmc19lbnRyeSB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCBhdHRyaWJ1dGUgYXR0cjsKICBzc2l6ZV90ICgqc2hvdykobWRkZXZfdCAqLCBjaGFyICopOwogIHNzaXplX3QgKCpzdG9yZSkobWRkZXZfdCAqLCBjb25zdCBjaGFyICosIHNpemVfdCk7CiB9OwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJVEVSQVRFX1JERVZfR0VORVJJQyhoZWFkLHJkZXYsdG1wKSAgICAgZm9yICgodG1wKSA9IChoZWFkKS5uZXh0OyAgIChyZGV2KSA9IChsaXN0X2VudHJ5KCh0bXApLCBtZGtfcmRldl90LCBzYW1lX3NldCkpLCAgICh0bXApID0gKHRtcCktPm5leHQsICh0bXApLT5wcmV2ICE9ICYoaGVhZCkgICA7ICkKICNkZWZpbmUgSVRFUkFURV9SREVWKG1kZGV2LHJkZXYsdG1wKSAgIElURVJBVEVfUkRFVl9HRU5FUklDKChtZGRldiktPmRpc2tzLHJkZXYsdG1wKQogI2RlZmluZSBJVEVSQVRFX1JERVZfUEVORElORyhyZGV2LHRtcCkgICBJVEVSQVRFX1JERVZfR0VORVJJQyhwZW5kaW5nX3JhaWRfZGlza3MscmRldix0bXApCi0KK3R5cGVkZWYgc3RydWN0IG1ka190aHJlYWRfcyB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIHZvaWQgKCpydW4pIChtZGRldl90ICptZGRldik7CisgbWRkZXZfdCAqbWRkZXY7Cisgd2FpdF9xdWV1ZV9oZWFkX3Qgd3F1ZXVlOworIHVuc2lnbmVkIGxvbmcgZmxhZ3M7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrOworIHVuc2lnbmVkIGxvbmcgdGltZW91dDsKK30gbWRrX3RocmVhZF90OwogI2RlZmluZSBUSFJFQURfV0FLRVVQIDAKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX193YWl0X2V2ZW50X2xvY2tfaXJxKHdxLCBjb25kaXRpb24sIGxvY2ssIGNtZCkgIGRvIHsgICB3YWl0X3F1ZXVlX3QgX193YWl0OyAgIGluaXRfd2FpdHF1ZXVlX2VudHJ5KCZfX3dhaXQsIGN1cnJlbnQpOyAgICAgYWRkX3dhaXRfcXVldWUoJndxLCAmX193YWl0KTsgICBmb3IgKDs7KSB7ICAgc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19VTklOVEVSUlVQVElCTEUpOyAgIGlmIChjb25kaXRpb24pICAgYnJlYWs7ICAgc3Bpbl91bmxvY2tfaXJxKCZsb2NrKTsgICBjbWQ7ICAgc2NoZWR1bGUoKTsgICBzcGluX2xvY2tfaXJxKCZsb2NrKTsgICB9ICAgY3VycmVudC0+c3RhdGUgPSBUQVNLX1JVTk5JTkc7ICAgcmVtb3ZlX3dhaXRfcXVldWUoJndxLCAmX193YWl0KTsgIH0gd2hpbGUgKDApCi0KICNkZWZpbmUgd2FpdF9ldmVudF9sb2NrX2lycSh3cSwgY29uZGl0aW9uLCBsb2NrLCBjbWQpICBkbyB7ICAgaWYgKGNvbmRpdGlvbikgICBicmVhazsgICBfX3dhaXRfZXZlbnRfbG9ja19pcnEod3EsIGNvbmRpdGlvbiwgbG9jaywgY21kKTsgIH0gd2hpbGUgKDApCi0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3JhaWQvbWRfcC5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3JhaWQvbWRfcC5oCmluZGV4IGFiODU2YTcuLjJmODBmYmEgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9yYWlkL21kX3AuaAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvcmFpZC9tZF9wLmgKQEAgLTcsMTI5ICs3LDE4MiBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX01EX1BfSAogI2RlZmluZSBfTURfUF9ICi0KICNkZWZpbmUgTURfUkVTRVJWRURfQllURVMgKDY0ICogMTAyNCkKICNkZWZpbmUgTURfUkVTRVJWRURfU0VDVE9SUyAoTURfUkVTRVJWRURfQllURVMgLyA1MTIpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNRF9SRVNFUlZFRF9CTE9DS1MgKE1EX1JFU0VSVkVEX0JZVEVTIC8gQkxPQ0tfU0laRSkKLQogI2RlZmluZSBNRF9ORVdfU0laRV9TRUNUT1JTKHgpICgoeCAmIH4oTURfUkVTRVJWRURfU0VDVE9SUyAtIDEpKSAtIE1EX1JFU0VSVkVEX1NFQ1RPUlMpCiAjZGVmaW5lIE1EX05FV19TSVpFX0JMT0NLUyh4KSAoKHggJiB+KE1EX1JFU0VSVkVEX0JMT0NLUyAtIDEpKSAtIE1EX1JFU0VSVkVEX0JMT0NLUykKLQogI2RlZmluZSBNRF9TQl9CWVRFUyA0MDk2CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNRF9TQl9XT1JEUyAoTURfU0JfQllURVMgLyA0KQogI2RlZmluZSBNRF9TQl9CTE9DS1MgKE1EX1NCX0JZVEVTIC8gQkxPQ0tfU0laRSkKICNkZWZpbmUgTURfU0JfU0VDVE9SUyAoTURfU0JfQllURVMgLyA1MTIpCi0KICNkZWZpbmUgTURfU0JfR0VORVJJQ19PRkZTRVQgMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTURfU0JfUEVSU09OQUxJVFlfT0ZGU0VUIDY0CiAjZGVmaW5lIE1EX1NCX0RJU0tTX09GRlNFVCAxMjgKICNkZWZpbmUgTURfU0JfREVTQ1JJUFRPUl9PRkZTRVQgOTkyCi0KICNkZWZpbmUgTURfU0JfR0VORVJJQ19DT05TVEFOVF9XT1JEUyAzMgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTURfU0JfR0VORVJJQ19TVEFURV9XT1JEUyAzMgogI2RlZmluZSBNRF9TQl9HRU5FUklDX1dPUkRTIChNRF9TQl9HRU5FUklDX0NPTlNUQU5UX1dPUkRTICsgTURfU0JfR0VORVJJQ19TVEFURV9XT1JEUykKICNkZWZpbmUgTURfU0JfUEVSU09OQUxJVFlfV09SRFMgNjQKICNkZWZpbmUgTURfU0JfREVTQ1JJUFRPUl9XT1JEUyAzMgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTURfU0JfRElTS1MgMjcKICNkZWZpbmUgTURfU0JfRElTS1NfV09SRFMgKE1EX1NCX0RJU0tTKk1EX1NCX0RFU0NSSVBUT1JfV09SRFMpCiAjZGVmaW5lIE1EX1NCX1JFU0VSVkVEX1dPUkRTICgxMDI0IC0gTURfU0JfR0VORVJJQ19XT1JEUyAtIE1EX1NCX1BFUlNPTkFMSVRZX1dPUkRTIC0gTURfU0JfRElTS1NfV09SRFMgLSBNRF9TQl9ERVNDUklQVE9SX1dPUkRTKQogI2RlZmluZSBNRF9TQl9FUVVBTF9XT1JEUyAoTURfU0JfR0VORVJJQ19XT1JEUyArIE1EX1NCX1BFUlNPTkFMSVRZX1dPUkRTICsgTURfU0JfRElTS1NfV09SRFMpCi0KLSNkZWZpbmUgTURfRElTS19GQVVMVFkgMCAgCi0jZGVmaW5lIE1EX0RJU0tfQUNUSVZFIDEgIAotI2RlZmluZSBNRF9ESVNLX1NZTkMgMiAgCi0jZGVmaW5lIE1EX0RJU0tfUkVNT1ZFRCAzICAKLQotI2RlZmluZSBNRF9ESVNLX1dSSVRFTU9TVExZIDkgIAotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBNRF9ESVNLX0ZBVUxUWSAwCisjZGVmaW5lIE1EX0RJU0tfQUNUSVZFIDEKKyNkZWZpbmUgTURfRElTS19TWU5DIDIKKyNkZWZpbmUgTURfRElTS19SRU1PVkVEIDMKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIE1EX0RJU0tfV1JJVEVNT1NUTFkgOQogdHlwZWRlZiBzdHJ1Y3QgbWRwX2RldmljZV9kZXNjcmlwdG9yX3MgewogIF9fdTMyIG51bWJlcjsKICBfX3UzMiBtYWpvcjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgbWlub3I7CiAgX191MzIgcmFpZF9kaXNrOwogIF9fdTMyIHN0YXRlOwogIF9fdTMyIHJlc2VydmVkW01EX1NCX0RFU0NSSVBUT1JfV09SRFMgLSA1XTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9IG1kcF9kaXNrX3Q7Ci0KICNkZWZpbmUgTURfU0JfTUFHSUMgMHhhOTJiNGVmYwotCiAjZGVmaW5lIE1EX1NCX0NMRUFOIDAKICNkZWZpbmUgTURfU0JfRVJST1JTIDEKLQotI2RlZmluZSBNRF9TQl9CSVRNQVBfUFJFU0VOVCA4ICAKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgTURfU0JfQklUTUFQX1BSRVNFTlQgOAogdHlwZWRlZiBzdHJ1Y3QgbWRwX3N1cGVyYmxvY2tfcyB7Ci0KICBfX3UzMiBtZF9tYWdpYzsKICBfX3UzMiBtYWpvcl92ZXJzaW9uOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBtaW5vcl92ZXJzaW9uOwogIF9fdTMyIHBhdGNoX3ZlcnNpb247CiAgX191MzIgZ3ZhbGlkX3dvcmRzOwogIF9fdTMyIHNldF91dWlkMDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgY3RpbWU7CiAgX191MzIgbGV2ZWw7CiAgX191MzIgc2l6ZTsKICBfX3UzMiBucl9kaXNrczsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgcmFpZF9kaXNrczsKICBfX3UzMiBtZF9taW5vcjsKICBfX3UzMiBub3RfcGVyc2lzdGVudDsKICBfX3UzMiBzZXRfdXVpZDE7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHNldF91dWlkMjsKICBfX3UzMiBzZXRfdXVpZDM7CiAgX191MzIgZ3N0YXRlX2NyZXNlcnZlZFtNRF9TQl9HRU5FUklDX0NPTlNUQU5UX1dPUkRTIC0gMTZdOwotCiAgX191MzIgdXRpbWU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHN0YXRlOwogIF9fdTMyIGFjdGl2ZV9kaXNrczsKICBfX3UzMiB3b3JraW5nX2Rpc2tzOwogIF9fdTMyIGZhaWxlZF9kaXNrczsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgc3BhcmVfZGlza3M7CiAgX191MzIgc2JfY3N1bTsKICNpZmRlZiBfX0JJR19FTkRJQU4KICBfX3UzMiBldmVudHNfaGk7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGV2ZW50c19sbzsKICBfX3UzMiBjcF9ldmVudHNfaGk7CiAgX191MzIgY3BfZXZlbnRzX2xvOwogI2Vsc2UKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgZXZlbnRzX2xvOwogIF9fdTMyIGV2ZW50c19oaTsKICBfX3UzMiBjcF9ldmVudHNfbG87CiAgX191MzIgY3BfZXZlbnRzX2hpOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlbmRpZgogIF9fdTMyIHJlY292ZXJ5X2NwOwotCiAgX191NjQgcmVzaGFwZV9wb3NpdGlvbjsKICBfX3UzMiBuZXdfbGV2ZWw7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGRlbHRhX2Rpc2tzOwogIF9fdTMyIG5ld19sYXlvdXQ7CiAgX191MzIgbmV3X2NodW5rOwogIF9fdTMyIGdzdGF0ZV9zcmVzZXJ2ZWRbTURfU0JfR0VORVJJQ19TVEFURV9XT1JEUyAtIDE4XTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBsYXlvdXQ7CiAgX191MzIgY2h1bmtfc2l6ZTsKICBfX3UzMiByb290X3B2OwogIF9fdTMyIHJvb3RfYmxvY2s7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHBzdGF0ZV9yZXNlcnZlZFtNRF9TQl9QRVJTT05BTElUWV9XT1JEUyAtIDRdOwotCiAgbWRwX2Rpc2tfdCBkaXNrc1tNRF9TQl9ESVNLU107Ci0KICBfX3UzMiByZXNlcnZlZFtNRF9TQl9SRVNFUlZFRF9XT1JEU107Ci0KICBtZHBfZGlza190IHRoaXNfZGlzazsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH0gbWRwX3N1cGVyX3Q7Ci0KLSNkZWZpbmUgV3JpdGVNb3N0bHkxIDEgIAotCitzdHJ1Y3QgbWRwX3N1cGVyYmxvY2tfMSB7CisgX191MzIgbWFnaWM7CisgX191MzIgbWFqb3JfdmVyc2lvbjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MzIgZmVhdHVyZV9tYXA7CisgX191MzIgcGFkMDsKKyBfX3U4IHNldF91dWlkWzE2XTsKKyBjaGFyIHNldF9uYW1lWzMyXTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191NjQgY3RpbWU7CisgX191MzIgbGV2ZWw7CisgX191MzIgbGF5b3V0OworIF9fdTY0IHNpemU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTMyIGNodW5rc2l6ZTsKKyBfX3UzMiByYWlkX2Rpc2tzOworIF9fdTMyIGJpdG1hcF9vZmZzZXQ7CisgX191MzIgbmV3X2xldmVsOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3U2NCByZXNoYXBlX3Bvc2l0aW9uOworIF9fdTMyIGRlbHRhX2Rpc2tzOworIF9fdTMyIG5ld19sYXlvdXQ7CisgX191MzIgbmV3X2NodW5rOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3U4IHBhZDFbMTI4LTEyNF07CisgX191NjQgZGF0YV9vZmZzZXQ7CisgX191NjQgZGF0YV9zaXplOworIF9fdTY0IHN1cGVyX29mZnNldDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191NjQgcmVjb3Zlcnlfb2Zmc2V0OworIF9fdTMyIGRldl9udW1iZXI7CisgX191MzIgY250X2NvcnJlY3RlZF9yZWFkOworIF9fdTggZGV2aWNlX3V1aWRbMTZdOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3U4IGRldmZsYWdzOworI2RlZmluZSBXcml0ZU1vc3RseTEgMQorIF9fdTggcGFkMls2NC01N107CisgX191NjQgdXRpbWU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTY0IGV2ZW50czsKKyBfX3U2NCByZXN5bmNfb2Zmc2V0OworIF9fdTMyIHNiX2NzdW07CisgX191MzIgbWF4X2RldjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191OCBwYWQzWzY0LTMyXTsKKyBfX3UxNiBkZXZfcm9sZXNbMF07Cit9OwogI2RlZmluZSBNRF9GRUFUVVJFX0JJVE1BUF9PRkZTRVQgMQotI2RlZmluZSBNRF9GRUFUVVJFX1JFQ09WRVJZX09GRlNFVCAyICAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIE1EX0ZFQVRVUkVfUkVDT1ZFUllfT0ZGU0VUIDIKICNkZWZpbmUgTURfRkVBVFVSRV9SRVNIQVBFX0FDVElWRSA0Ci0KICNkZWZpbmUgTURfRkVBVFVSRV9BTEwgKDF8Mnw0KQotCiAjZW5kaWYKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9yYWlkL21kX3UuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9yYWlkL21kX3UuaAppbmRleCAzNjcxMTg3Li5mZDg2YmE1IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvcmFpZC9tZF91LmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3JhaWQvbWRfdS5oCkBAIC03LDk4ICs3LDEwNCBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX01EX1VfSAogI2RlZmluZSBfTURfVV9ICi0KICNkZWZpbmUgUkFJRF9WRVJTSU9OIF9JT1IgKE1EX01BSk9SLCAweDEwLCBtZHVfdmVyc2lvbl90KQogI2RlZmluZSBHRVRfQVJSQVlfSU5GTyBfSU9SIChNRF9NQUpPUiwgMHgxMSwgbWR1X2FycmF5X2luZm9fdCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEdFVF9ESVNLX0lORk8gX0lPUiAoTURfTUFKT1IsIDB4MTIsIG1kdV9kaXNrX2luZm9fdCkKICNkZWZpbmUgUFJJTlRfUkFJRF9ERUJVRyBfSU8gKE1EX01BSk9SLCAweDEzKQogI2RlZmluZSBSQUlEX0FVVE9SVU4gX0lPIChNRF9NQUpPUiwgMHgxNCkKICNkZWZpbmUgR0VUX0JJVE1BUF9GSUxFIF9JT1IgKE1EX01BSk9SLCAweDE1LCBtZHVfYml0bWFwX2ZpbGVfdCkKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQ0xFQVJfQVJSQVkgX0lPIChNRF9NQUpPUiwgMHgyMCkKICNkZWZpbmUgQUREX05FV19ESVNLIF9JT1cgKE1EX01BSk9SLCAweDIxLCBtZHVfZGlza19pbmZvX3QpCiAjZGVmaW5lIEhPVF9SRU1PVkVfRElTSyBfSU8gKE1EX01BSk9SLCAweDIyKQogI2RlZmluZSBTRVRfQVJSQVlfSU5GTyBfSU9XIChNRF9NQUpPUiwgMHgyMywgbWR1X2FycmF5X2luZm9fdCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNFVF9ESVNLX0lORk8gX0lPIChNRF9NQUpPUiwgMHgyNCkKICNkZWZpbmUgV1JJVEVfUkFJRF9JTkZPIF9JTyAoTURfTUFKT1IsIDB4MjUpCiAjZGVmaW5lIFVOUFJPVEVDVF9BUlJBWSBfSU8gKE1EX01BSk9SLCAweDI2KQogI2RlZmluZSBQUk9URUNUX0FSUkFZIF9JTyAoTURfTUFKT1IsIDB4MjcpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBIT1RfQUREX0RJU0sgX0lPIChNRF9NQUpPUiwgMHgyOCkKICNkZWZpbmUgU0VUX0RJU0tfRkFVTFRZIF9JTyAoTURfTUFKT1IsIDB4MjkpCiAjZGVmaW5lIEhPVF9HRU5FUkFURV9FUlJPUiBfSU8gKE1EX01BSk9SLCAweDJhKQogI2RlZmluZSBTRVRfQklUTUFQX0ZJTEUgX0lPVyAoTURfTUFKT1IsIDB4MmIsIGludCkKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUlVOX0FSUkFZIF9JT1cgKE1EX01BSk9SLCAweDMwLCBtZHVfcGFyYW1fdCkKICNkZWZpbmUgU1RBUlRfQVJSQVkgX0lPIChNRF9NQUpPUiwgMHgzMSkKICNkZWZpbmUgU1RPUF9BUlJBWSBfSU8gKE1EX01BSk9SLCAweDMyKQogI2RlZmluZSBTVE9QX0FSUkFZX1JPIF9JTyAoTURfTUFKT1IsIDB4MzMpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBSRVNUQVJUX0FSUkFZX1JXIF9JTyAoTURfTUFKT1IsIDB4MzQpCi0KIHR5cGVkZWYgc3RydWN0IG1kdV92ZXJzaW9uX3MgewogIGludCBtYWpvcjsKICBpbnQgbWlub3I7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGludCBwYXRjaGxldmVsOwogfSBtZHVfdmVyc2lvbl90OwotCiB0eXBlZGVmIHN0cnVjdCBtZHVfYXJyYXlfaW5mb19zIHsKLQogIGludCBtYWpvcl92ZXJzaW9uOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBpbnQgbWlub3JfdmVyc2lvbjsKICBpbnQgcGF0Y2hfdmVyc2lvbjsKICBpbnQgY3RpbWU7CiAgaW50IGxldmVsOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBpbnQgc2l6ZTsKICBpbnQgbnJfZGlza3M7CiAgaW50IHJhaWRfZGlza3M7CiAgaW50IG1kX21pbm9yOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBpbnQgbm90X3BlcnNpc3RlbnQ7Ci0KICBpbnQgdXRpbWU7CiAgaW50IHN0YXRlOwogIGludCBhY3RpdmVfZGlza3M7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGludCB3b3JraW5nX2Rpc2tzOwogIGludCBmYWlsZWRfZGlza3M7CiAgaW50IHNwYXJlX2Rpc2tzOwotCiAgaW50IGxheW91dDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgaW50IGNodW5rX3NpemU7Ci0KIH0gbWR1X2FycmF5X2luZm9fdDsKLQogdHlwZWRlZiBzdHJ1Y3QgbWR1X2Rpc2tfaW5mb19zIHsKLQogIGludCBudW1iZXI7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGludCBtYWpvcjsKICBpbnQgbWlub3I7CiAgaW50IHJhaWRfZGlzazsKICBpbnQgc3RhdGU7Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9IG1kdV9kaXNrX2luZm9fdDsKLQogdHlwZWRlZiBzdHJ1Y3QgbWR1X3N0YXJ0X2luZm9fcyB7Ci0KICBpbnQgbWFqb3I7CiAgaW50IG1pbm9yOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBpbnQgcmFpZF9kaXNrOwogIGludCBzdGF0ZTsKLQogfSBtZHVfc3RhcnRfaW5mb190OwotCiB0eXBlZGVmIHN0cnVjdCBtZHVfYml0bWFwX2ZpbGVfcworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHsKICBjaGFyIHBhdGhuYW1lWzQwOTZdOwogfSBtZHVfYml0bWFwX2ZpbGVfdDsKLQogdHlwZWRlZiBzdHJ1Y3QgbWR1X3BhcmFtX3MKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB7CiAgaW50IHBlcnNvbmFsaXR5OwogIGludCBjaHVua19zaXplOwogIGludCBtYXhfZmF1bHQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfSBtZHVfcGFyYW1fdDsKLQogI2VuZGlmCi0KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9yYWlkL3hvci5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3JhaWQveG9yLmgKaW5kZXggMDFlOWY0NS4uMGM4YmNhOSAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3JhaWQveG9yLmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3JhaWQveG9yLmgKQEAgLTcsMjYgKzcsMzMgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9YT1JfSAogI2RlZmluZSBfWE9SX0gKLQogI2luY2x1ZGUgPGxpbnV4L3JhaWQvbWQuaD4KLQogI2RlZmluZSBNQVhfWE9SX0JMT0NLUyA1Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgeG9yX2Jsb2NrX3RlbXBsYXRlIHsKICBzdHJ1Y3QgeG9yX2Jsb2NrX3RlbXBsYXRlICpuZXh0OwogIGNvbnN0IGNoYXIgKm5hbWU7CiAgaW50IHNwZWVkOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB2b2lkICgqZG9fMikodW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZyAqLCB1bnNpZ25lZCBsb25nICopOwogIHZvaWQgKCpkb18zKSh1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nICosIHVuc2lnbmVkIGxvbmcgKiwKICB1bnNpZ25lZCBsb25nICopOwogIHZvaWQgKCpkb180KSh1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nICosIHVuc2lnbmVkIGxvbmcgKiwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgbG9uZyAqLCB1bnNpZ25lZCBsb25nICopOwogIHZvaWQgKCpkb181KSh1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nICosIHVuc2lnbmVkIGxvbmcgKiwKICB1bnNpZ25lZCBsb25nICosIHVuc2lnbmVkIGxvbmcgKiwgdW5zaWduZWQgbG9uZyAqKTsKIH07Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9yYW5kb20uaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9yYW5kb20uaAppbmRleCBkMmJlZjk3Li5hZGI4MGUyIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvcmFuZG9tLmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3JhbmRvbS5oCkBAIC03LDI5ICs3LDMwIEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfTElOVVhfUkFORE9NX0gKICNkZWZpbmUgX0xJTlVYX1JBTkRPTV9ICi0KICNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgotCiAjZGVmaW5lIFJOREdFVEVOVENOVCBfSU9SKCAnUicsIDB4MDAsIGludCApCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFJOREFERFRPRU5UQ05UIF9JT1coICdSJywgMHgwMSwgaW50ICkKLQogI2RlZmluZSBSTkRHRVRQT09MIF9JT1IoICdSJywgMHgwMiwgaW50IFsyXSApCi0KICNkZWZpbmUgUk5EQURERU5UUk9QWSBfSU9XKCAnUicsIDB4MDMsIGludCBbMl0gKQotCiAjZGVmaW5lIFJORFpBUEVOVENOVCBfSU8oICdSJywgMHgwNCApCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFJORENMRUFSUE9PTCBfSU8oICdSJywgMHgwNiApCi0KIHN0cnVjdCByYW5kX3Bvb2xfaW5mbyB7CiAgaW50IGVudHJvcHlfY291bnQ7CiAgaW50IGJ1Zl9zaXplOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBidWZbMF07CiB9OwotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9yYnRyZWUuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9yYnRyZWUuaAppbmRleCA3MTRmZmU5Li5hYzRiNWE1IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvcmJ0cmVlLmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3JidHJlZS5oCkBAIC03LDM5ICs3LDQ3IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfTElOVVhfUkJUUkVFX0gKICNkZWZpbmUgX0xJTlVYX1JCVFJFRV9ICi0KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4KLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCByYl9ub2RlCiB7CiAgdW5zaWduZWQgbG9uZyByYl9wYXJlbnRfY29sb3I7CiAjZGVmaW5lIFJCX1JFRCAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBSQl9CTEFDSyAxCiAgc3RydWN0IHJiX25vZGUgKnJiX3JpZ2h0OwogIHN0cnVjdCByYl9ub2RlICpyYl9sZWZ0OwogfSBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKHNpemVvZihsb25nKSkpKTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCByYl9yb290CiB7CiAgc3RydWN0IHJiX25vZGUgKnJiX25vZGU7CiB9OwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSByYl9wYXJlbnQocikgKChzdHJ1Y3QgcmJfbm9kZSAqKSgociktPnJiX3BhcmVudF9jb2xvciAmIH4zKSkKICNkZWZpbmUgcmJfY29sb3IocikgKChyKS0+cmJfcGFyZW50X2NvbG9yICYgMSkKICNkZWZpbmUgcmJfaXNfcmVkKHIpICghcmJfY29sb3IocikpCiAjZGVmaW5lIHJiX2lzX2JsYWNrKHIpIHJiX2NvbG9yKHIpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSByYl9zZXRfcmVkKHIpIGRvIHsgKHIpLT5yYl9wYXJlbnRfY29sb3IgJj0gfjE7IH0gd2hpbGUgKDApCiAjZGVmaW5lIHJiX3NldF9ibGFjayhyKSBkbyB7IChyKS0+cmJfcGFyZW50X2NvbG9yIHw9IDE7IH0gd2hpbGUgKDApCi0KICNkZWZpbmUgUkJfUk9PVCAoc3RydWN0IHJiX3Jvb3QpIHsgTlVMTCwgfQogI2RlZmluZSByYl9lbnRyeShwdHIsIHR5cGUsIG1lbWJlcikgY29udGFpbmVyX29mKHB0ciwgdHlwZSwgbWVtYmVyKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUkJfRU1QVFlfUk9PVChyb290KSAoKHJvb3QpLT5yYl9ub2RlID09IE5VTEwpCiAjZGVmaW5lIFJCX0VNUFRZX05PREUobm9kZSkgKHJiX3BhcmVudChub2RlKSAhPSBub2RlKQogI2RlZmluZSBSQl9DTEVBUl9OT0RFKG5vZGUpIChyYl9zZXRfcGFyZW50KG5vZGUsIG5vZGUpKQotCiAjZW5kaWYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvcmN1cGRhdGUuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9yY3VwZGF0ZS5oCmluZGV4IDU1NDdhNGQuLjU5ZTJmNTcgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9yY3VwZGF0ZS5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9yY3VwZGF0ZS5oCkBAIC03LDkgKzcsMTUgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9fTElOVVhfUkNVUERBVEVfSAogI2RlZmluZSBfX0xJTlVYX1JDVVBEQVRFX0gKLQogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvcmVib290LmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvcmVib290LmgKaW5kZXggZTEwZmYxNC4uYzg2ZDgxZCAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3JlYm9vdC5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9yZWJvb3QuaApAQCAtNywyNCArNywzMiBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX0xJTlVYX1JFQk9PVF9ICiAjZGVmaW5lIF9MSU5VWF9SRUJPT1RfSAotCiAjZGVmaW5lIExJTlVYX1JFQk9PVF9NQUdJQzEgMHhmZWUxZGVhZAogI2RlZmluZSBMSU5VWF9SRUJPT1RfTUFHSUMyIDY3MjI3NDc5MworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTElOVVhfUkVCT09UX01BR0lDMkEgODUwNzIyNzgKICNkZWZpbmUgTElOVVhfUkVCT09UX01BR0lDMkIgMzY5MzY3NDQ4CiAjZGVmaW5lIExJTlVYX1JFQk9PVF9NQUdJQzJDIDUzNzk5MzIxNgotCiAjZGVmaW5lIExJTlVYX1JFQk9PVF9DTURfUkVTVEFSVCAweDAxMjM0NTY3CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBMSU5VWF9SRUJPT1RfQ01EX0hBTFQgMHhDREVGMDEyMwogI2RlZmluZSBMSU5VWF9SRUJPT1RfQ01EX0NBRF9PTiAweDg5QUJDREVGCiAjZGVmaW5lIExJTlVYX1JFQk9PVF9DTURfQ0FEX09GRiAweDAwMDAwMDAwCiAjZGVmaW5lIExJTlVYX1JFQk9PVF9DTURfUE9XRVJfT0ZGIDB4NDMyMUZFREMKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIExJTlVYX1JFQk9PVF9DTURfUkVTVEFSVDIgMHhBMUIyQzNENAogI2RlZmluZSBMSU5VWF9SRUJPT1RfQ01EX1NXX1NVU1BFTkQgMHhEMDAwRkNFMgogI2RlZmluZSBMSU5VWF9SRUJPT1RfQ01EX0tFWEVDIDB4NDU1ODQ1NDMKLQogI2VuZGlmCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3JlbGF5LmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvcmVsYXkuaAppbmRleCAwOWY3MjE5Li43NTVhZGYxIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvcmVsYXkuaAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvcmVsYXkuaApAQCAtNyw4NSArNyw5NCBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX0xJTlVYX1JFTEFZX0gKICNkZWZpbmUgX0xJTlVYX1JFTEFZX0gKLQogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjaW5jbHVkZSA8bGludXgvd2FpdC5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjaW5jbHVkZSA8bGludXgva3JlZi5oPgotCiAjZGVmaW5lIEZJWF9TSVpFKHgpICgoKCh4KSAtIDEpICYgUEFHRV9NQVNLKSArIFBBR0VfU0laRSkKLQogI2RlZmluZSBSRUxBWUZTX0NIQU5ORUxfVkVSU0lPTiA2Ci0KIHN0cnVjdCByY2hhbl9idWYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB7CiAgdm9pZCAqc3RhcnQ7CiAgdm9pZCAqZGF0YTsKICBzaXplX3Qgb2Zmc2V0OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzaXplX3Qgc3ViYnVmc19wcm9kdWNlZDsKICBzaXplX3Qgc3ViYnVmc19jb25zdW1lZDsKICBzdHJ1Y3QgcmNoYW4gKmNoYW47CiAgd2FpdF9xdWV1ZV9oZWFkX3QgcmVhZF93YWl0OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd2FrZV9yZWFkZXJzOwogIHN0cnVjdCBkZW50cnkgKmRlbnRyeTsKICBzdHJ1Y3Qga3JlZiBrcmVmOwogIHN0cnVjdCBwYWdlICoqcGFnZV9hcnJheTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgaW50IHBhZ2VfY291bnQ7CiAgdW5zaWduZWQgaW50IGZpbmFsaXplZDsKICBzaXplX3QgKnBhZGRpbmc7CiAgc2l6ZV90IHByZXZfcGFkZGluZzsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc2l6ZV90IGJ5dGVzX2NvbnN1bWVkOwogIHVuc2lnbmVkIGludCBjcHU7CiB9IF9fX19jYWNoZWxpbmVfYWxpZ25lZDsKLQogc3RydWN0IHJjaGFuCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogewogIHUzMiB2ZXJzaW9uOwogIHNpemVfdCBzdWJidWZfc2l6ZTsKICBzaXplX3Qgbl9zdWJidWZzOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzaXplX3QgYWxsb2Nfc2l6ZTsKICBzdHJ1Y3QgcmNoYW5fY2FsbGJhY2tzICpjYjsKICBzdHJ1Y3Qga3JlZiBrcmVmOwogIHZvaWQgKnByaXZhdGVfZGF0YTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc2l6ZV90IGxhc3RfdG9vYmlnOwogIHN0cnVjdCByY2hhbl9idWYgKmJ1ZltOUl9DUFVTXTsKIH07Ci0KIHN0cnVjdCByY2hhbl9jYWxsYmFja3MKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB7Ci0KICBpbnQgKCpzdWJidWZfc3RhcnQpIChzdHJ1Y3QgcmNoYW5fYnVmICpidWYsCiAgdm9pZCAqc3ViYnVmLAogIHZvaWQgKnByZXZfc3ViYnVmLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzaXplX3QgcHJldl9wYWRkaW5nKTsKLQogIHZvaWQgKCpidWZfbWFwcGVkKShzdHJ1Y3QgcmNoYW5fYnVmICpidWYsCiAgc3RydWN0IGZpbGUgKmZpbHApOwotCiAgdm9pZCAoKmJ1Zl91bm1hcHBlZCkoc3RydWN0IHJjaGFuX2J1ZiAqYnVmLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgZmlsZSAqZmlscCk7Ci0KICBzdHJ1Y3QgZGVudHJ5ICooKmNyZWF0ZV9idWZfZmlsZSkoY29uc3QgY2hhciAqZmlsZW5hbWUsCiAgc3RydWN0IGRlbnRyeSAqcGFyZW50LAogIGludCBtb2RlLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgcmNoYW5fYnVmICpidWYsCiAgaW50ICppc19nbG9iYWwpOwotCiAgaW50ICgqcmVtb3ZlX2J1Zl9maWxlKShzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpOwogfTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCByY2hhbiAqcmVsYXlfb3Blbihjb25zdCBjaGFyICpiYXNlX2ZpbGVuYW1lLAogIHN0cnVjdCBkZW50cnkgKnBhcmVudCwKICBzaXplX3Qgc3ViYnVmX3NpemUsCiAgc2l6ZV90IG5fc3ViYnVmcywKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IHJjaGFuX2NhbGxiYWNrcyAqY2IpOwotCiAjZW5kaWYKLQpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3Jlc291cmNlLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvcmVzb3VyY2UuaAppbmRleCAzNDdiNTI0Li4yYjJlZDk3IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvcmVzb3VyY2UuaAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvcmVzb3VyY2UuaApAQCAtNyw1NCArNyw1OSBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX0xJTlVYX1JFU09VUkNFX0gKICNkZWZpbmUgX0xJTlVYX1JFU09VUkNFX0gKLQogI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KLQogc3RydWN0IHRhc2tfc3RydWN0OwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBSVVNBR0VfU0VMRiAwCiAjZGVmaW5lIFJVU0FHRV9DSElMRFJFTiAoLTEpCi0jZGVmaW5lIFJVU0FHRV9CT1RIICgtMikgIAotCisjZGVmaW5lIFJVU0FHRV9CT1RIICgtMikKIHN0cnVjdCBydXNhZ2UgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgdGltZXZhbCBydV91dGltZTsKICBzdHJ1Y3QgdGltZXZhbCBydV9zdGltZTsKICBsb25nIHJ1X21heHJzczsKICBsb25nIHJ1X2l4cnNzOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBsb25nIHJ1X2lkcnNzOwogIGxvbmcgcnVfaXNyc3M7CiAgbG9uZyBydV9taW5mbHQ7CiAgbG9uZyBydV9tYWpmbHQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGxvbmcgcnVfbnN3YXA7CiAgbG9uZyBydV9pbmJsb2NrOwogIGxvbmcgcnVfb3VibG9jazsKICBsb25nIHJ1X21zZ3NuZDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgbG9uZyBydV9tc2dyY3Y7CiAgbG9uZyBydV9uc2lnbmFsczsKICBsb25nIHJ1X252Y3N3OwogIGxvbmcgcnVfbml2Y3N3OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07Ci0KIHN0cnVjdCBybGltaXQgewogIHVuc2lnbmVkIGxvbmcgcmxpbV9jdXI7CiAgdW5zaWduZWQgbG9uZyBybGltX21heDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwotCiAjZGVmaW5lIFBSSU9fTUlOICgtMjApCiAjZGVmaW5lIFBSSU9fTUFYIDIwCi0KICNkZWZpbmUgUFJJT19QUk9DRVNTIDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBSSU9fUEdSUCAxCiAjZGVmaW5lIFBSSU9fVVNFUiAyCi0KICNkZWZpbmUgX1NUS19MSU0gKDgqMTAyNCoxMDI0KQotCiAjZGVmaW5lIE1MT0NLX0xJTUlUICg4ICogUEFHRV9TSVpFKQotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2luY2x1ZGUgPGFzbS9yZXNvdXJjZS5oPgotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9yb3V0ZS5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3JvdXRlLmgKaW5kZXggY2RiODc0NC4uOWQ4YzZkNyAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3JvdXRlLmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3JvdXRlLmgKQEAgLTcsNDMgKzcsNTMgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9MSU5VWF9ST1VURV9ICiAjZGVmaW5lIF9MSU5VWF9ST1VURV9ICi0KICNpbmNsdWRlIDxsaW51eC9pZi5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgcnRlbnRyeQogewogIHVuc2lnbmVkIGxvbmcgcnRfcGFkMTsKICBzdHJ1Y3Qgc29ja2FkZHIgcnRfZHN0OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3Qgc29ja2FkZHIgcnRfZ2F0ZXdheTsKICBzdHJ1Y3Qgc29ja2FkZHIgcnRfZ2VubWFzazsKICB1bnNpZ25lZCBzaG9ydCBydF9mbGFnczsKICBzaG9ydCBydF9wYWQyOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBsb25nIHJ0X3BhZDM7CiAgdm9pZCAqcnRfcGFkNDsKICBzaG9ydCBydF9tZXRyaWM7CiAgY2hhciBfX3VzZXIgKnJ0X2RldjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgbG9uZyBydF9tdHU7Ci0jZGVmaW5lIHJ0X21zcyBydF9tdHUgIAorI2RlZmluZSBydF9tc3MgcnRfbXR1CiAgdW5zaWduZWQgbG9uZyBydF93aW5kb3c7CiAgdW5zaWduZWQgc2hvcnQgcnRfaXJ0dDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwotCi0jZGVmaW5lIFJURl9VUCAweDAwMDEgIAotI2RlZmluZSBSVEZfR0FURVdBWSAweDAwMDIgIAotI2RlZmluZSBSVEZfSE9TVCAweDAwMDQgIAotI2RlZmluZSBSVEZfUkVJTlNUQVRFIDB4MDAwOCAgCi0jZGVmaW5lIFJURl9EWU5BTUlDIDB4MDAxMCAgCi0jZGVmaW5lIFJURl9NT0RJRklFRCAweDAwMjAgIAotI2RlZmluZSBSVEZfTVRVIDB4MDA0MCAgCi0jZGVmaW5lIFJURl9NU1MgUlRGX01UVSAgCi0jZGVmaW5lIFJURl9XSU5ET1cgMHgwMDgwICAKLSNkZWZpbmUgUlRGX0lSVFQgMHgwMTAwICAKLSNkZWZpbmUgUlRGX1JFSkVDVCAweDAyMDAgIAotCisjZGVmaW5lIFJURl9VUCAweDAwMDEKKyNkZWZpbmUgUlRGX0dBVEVXQVkgMHgwMDAyCisjZGVmaW5lIFJURl9IT1NUIDB4MDAwNAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgUlRGX1JFSU5TVEFURSAweDAwMDgKKyNkZWZpbmUgUlRGX0RZTkFNSUMgMHgwMDEwCisjZGVmaW5lIFJURl9NT0RJRklFRCAweDAwMjAKKyNkZWZpbmUgUlRGX01UVSAweDAwNDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFJURl9NU1MgUlRGX01UVQorI2RlZmluZSBSVEZfV0lORE9XIDB4MDA4MAorI2RlZmluZSBSVEZfSVJUVCAweDAxMDAKKyNkZWZpbmUgUlRGX1JFSkVDVCAweDAyMDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZW5kaWYKLQpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3JwbXNnX29teC5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3JwbXNnX29teC5oCmluZGV4IDJhNzU3YmMuLjc0MmI5ZWYgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9ycG1zZ19vbXguaAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvcnBtc2dfb214LmgKQEAgLTQyLDQgKzQyLDMgQEAKIH07CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2VuZGlmCi0KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9ydGMuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9ydGMuaAppbmRleCBiNTFiYzcxLi5lMThkMjM5IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvcnRjLmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3J0Yy5oCkBAIC03LDY2ICs3LDc3IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfTElOVVhfUlRDX0hfCiAjZGVmaW5lIF9MSU5VWF9SVENfSF8KLQogc3RydWN0IHJ0Y190aW1lIHsKICBpbnQgdG1fc2VjOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBpbnQgdG1fbWluOwogIGludCB0bV9ob3VyOwogIGludCB0bV9tZGF5OwogIGludCB0bV9tb247CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGludCB0bV95ZWFyOwogIGludCB0bV93ZGF5OwogIGludCB0bV95ZGF5OwogIGludCB0bV9pc2RzdDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwotCiBzdHJ1Y3QgcnRjX3drYWxybSB7CiAgdW5zaWduZWQgY2hhciBlbmFibGVkOwogIHVuc2lnbmVkIGNoYXIgcGVuZGluZzsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IHJ0Y190aW1lIHRpbWU7CiB9OwotCiBzdHJ1Y3QgcnRjX3BsbF9pbmZvIHsKICBpbnQgcGxsX2N0cmw7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGludCBwbGxfdmFsdWU7CiAgaW50IHBsbF9tYXg7CiAgaW50IHBsbF9taW47CiAgaW50IHBsbF9wb3NtdWx0OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBpbnQgcGxsX25lZ211bHQ7CiAgbG9uZyBwbGxfY2xvY2s7CiB9OwotCi0jZGVmaW5lIFJUQ19BSUVfT04gX0lPKCdwJywgMHgwMSkgIAotI2RlZmluZSBSVENfQUlFX09GRiBfSU8oJ3AnLCAweDAyKSAgCi0jZGVmaW5lIFJUQ19VSUVfT04gX0lPKCdwJywgMHgwMykgIAotI2RlZmluZSBSVENfVUlFX09GRiBfSU8oJ3AnLCAweDA0KSAgCi0jZGVmaW5lIFJUQ19QSUVfT04gX0lPKCdwJywgMHgwNSkgIAotI2RlZmluZSBSVENfUElFX09GRiBfSU8oJ3AnLCAweDA2KSAgCi0jZGVmaW5lIFJUQ19XSUVfT04gX0lPKCdwJywgMHgwZikgIAotI2RlZmluZSBSVENfV0lFX09GRiBfSU8oJ3AnLCAweDEwKSAgCi0KLSNkZWZpbmUgUlRDX0FMTV9TRVQgX0lPVygncCcsIDB4MDcsIHN0cnVjdCBydGNfdGltZSkgIAotI2RlZmluZSBSVENfQUxNX1JFQUQgX0lPUigncCcsIDB4MDgsIHN0cnVjdCBydGNfdGltZSkgIAotI2RlZmluZSBSVENfUkRfVElNRSBfSU9SKCdwJywgMHgwOSwgc3RydWN0IHJ0Y190aW1lKSAgCi0jZGVmaW5lIFJUQ19TRVRfVElNRSBfSU9XKCdwJywgMHgwYSwgc3RydWN0IHJ0Y190aW1lKSAgCi0jZGVmaW5lIFJUQ19JUlFQX1JFQUQgX0lPUigncCcsIDB4MGIsIHVuc2lnbmVkIGxvbmcpICAKLSNkZWZpbmUgUlRDX0lSUVBfU0VUIF9JT1coJ3AnLCAweDBjLCB1bnNpZ25lZCBsb25nKSAgCi0jZGVmaW5lIFJUQ19FUE9DSF9SRUFEIF9JT1IoJ3AnLCAweDBkLCB1bnNpZ25lZCBsb25nKSAgCi0jZGVmaW5lIFJUQ19FUE9DSF9TRVQgX0lPVygncCcsIDB4MGUsIHVuc2lnbmVkIGxvbmcpICAKLQotI2RlZmluZSBSVENfV0tBTE1fU0VUIF9JT1coJ3AnLCAweDBmLCBzdHJ1Y3QgcnRjX3drYWxybSkgCi0jZGVmaW5lIFJUQ19XS0FMTV9SRCBfSU9SKCdwJywgMHgxMCwgc3RydWN0IHJ0Y193a2Fscm0pIAotCi0jZGVmaW5lIFJUQ19QTExfR0VUIF9JT1IoJ3AnLCAweDExLCBzdHJ1Y3QgcnRjX3BsbF9pbmZvKSAgCi0jZGVmaW5lIFJUQ19QTExfU0VUIF9JT1coJ3AnLCAweDEyLCBzdHJ1Y3QgcnRjX3BsbF9pbmZvKSAgCi0KLSNkZWZpbmUgUlRDX0lSUUYgMHg4MCAgCisjZGVmaW5lIFJUQ19BSUVfT04gX0lPKCdwJywgMHgwMSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFJUQ19BSUVfT0ZGIF9JTygncCcsIDB4MDIpCisjZGVmaW5lIFJUQ19VSUVfT04gX0lPKCdwJywgMHgwMykKKyNkZWZpbmUgUlRDX1VJRV9PRkYgX0lPKCdwJywgMHgwNCkKKyNkZWZpbmUgUlRDX1BJRV9PTiBfSU8oJ3AnLCAweDA1KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgUlRDX1BJRV9PRkYgX0lPKCdwJywgMHgwNikKKyNkZWZpbmUgUlRDX1dJRV9PTiBfSU8oJ3AnLCAweDBmKQorI2RlZmluZSBSVENfV0lFX09GRiBfSU8oJ3AnLCAweDEwKQorI2RlZmluZSBSVENfQUxNX1NFVCBfSU9XKCdwJywgMHgwNywgc3RydWN0IHJ0Y190aW1lKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgUlRDX0FMTV9SRUFEIF9JT1IoJ3AnLCAweDA4LCBzdHJ1Y3QgcnRjX3RpbWUpCisjZGVmaW5lIFJUQ19SRF9USU1FIF9JT1IoJ3AnLCAweDA5LCBzdHJ1Y3QgcnRjX3RpbWUpCisjZGVmaW5lIFJUQ19TRVRfVElNRSBfSU9XKCdwJywgMHgwYSwgc3RydWN0IHJ0Y190aW1lKQorI2RlZmluZSBSVENfSVJRUF9SRUFEIF9JT1IoJ3AnLCAweDBiLCB1bnNpZ25lZCBsb25nKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgUlRDX0lSUVBfU0VUIF9JT1coJ3AnLCAweDBjLCB1bnNpZ25lZCBsb25nKQorI2RlZmluZSBSVENfRVBPQ0hfUkVBRCBfSU9SKCdwJywgMHgwZCwgdW5zaWduZWQgbG9uZykKKyNkZWZpbmUgUlRDX0VQT0NIX1NFVCBfSU9XKCdwJywgMHgwZSwgdW5zaWduZWQgbG9uZykKKyNkZWZpbmUgUlRDX1dLQUxNX1NFVCBfSU9XKCdwJywgMHgwZiwgc3RydWN0IHJ0Y193a2Fscm0pCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBSVENfV0tBTE1fUkQgX0lPUigncCcsIDB4MTAsIHN0cnVjdCBydGNfd2thbHJtKQorI2RlZmluZSBSVENfUExMX0dFVCBfSU9SKCdwJywgMHgxMSwgc3RydWN0IHJ0Y19wbGxfaW5mbykKKyNkZWZpbmUgUlRDX1BMTF9TRVQgX0lPVygncCcsIDB4MTIsIHN0cnVjdCBydGNfcGxsX2luZm8pCisjZGVmaW5lIFJUQ19JUlFGIDB4ODAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFJUQ19QRiAweDQwCiAjZGVmaW5lIFJUQ19BRiAweDIwCiAjZGVmaW5lIFJUQ19VRiAweDEwCi0KICNlbmRpZgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9ydG5ldGxpbmsuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9ydG5ldGxpbmsuaAppbmRleCBiYmQ5OTFhLi4yNjgwNWI5IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvcnRuZXRsaW5rLmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3J0bmV0bGluay5oCkBAIC03LDUwMCArNyw1MzkgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9fTElOVVhfUlRORVRMSU5LX0gKICNkZWZpbmUgX19MSU5VWF9SVE5FVExJTktfSAotCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRsaW5rLmg+CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2luY2x1ZGUgPGxpbnV4L2lmX2xpbmsuaD4KICNpbmNsdWRlIDxsaW51eC9pZl9hZGRyLmg+CiAjaW5jbHVkZSA8bGludXgvbmVpZ2hib3VyLmg+Ci0KICNkZWZpbmUgUlROTF9GQU1JTFlfSVBNUiAxMjgKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFJUTkxfRkFNSUxZX0lQNk1SIDEyOQogI2RlZmluZSBSVE5MX0ZBTUlMWV9NQVggMTI5Ci0KIGVudW0gewogIFJUTV9CQVNFID0gMTYsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBSVE1fQkFTRSBSVE1fQkFTRQotCiAgUlRNX05FV0xJTksgPSAxNiwKICNkZWZpbmUgUlRNX05FV0xJTksgUlRNX05FV0xJTksKICBSVE1fREVMTElOSywKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFJUTV9ERUxMSU5LIFJUTV9ERUxMSU5LCiAgUlRNX0dFVExJTkssCiAjZGVmaW5lIFJUTV9HRVRMSU5LIFJUTV9HRVRMSU5LCiAgUlRNX1NFVExJTkssCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBSVE1fU0VUTElOSyBSVE1fU0VUTElOSwotCiAgUlRNX05FV0FERFIgPSAyMCwKICNkZWZpbmUgUlRNX05FV0FERFIgUlRNX05FV0FERFIKICBSVE1fREVMQUREUiwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFJUTV9ERUxBRERSIFJUTV9ERUxBRERSCiAgUlRNX0dFVEFERFIsCiAjZGVmaW5lIFJUTV9HRVRBRERSIFJUTV9HRVRBRERSCi0KICBSVE1fTkVXUk9VVEUgPSAyNCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFJUTV9ORVdST1VURSBSVE1fTkVXUk9VVEUKICBSVE1fREVMUk9VVEUsCiAjZGVmaW5lIFJUTV9ERUxST1VURSBSVE1fREVMUk9VVEUKICBSVE1fR0VUUk9VVEUsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBSVE1fR0VUUk9VVEUgUlRNX0dFVFJPVVRFCi0KICBSVE1fTkVXTkVJR0ggPSAyOCwKICNkZWZpbmUgUlRNX05FV05FSUdIIFJUTV9ORVdORUlHSAogIFJUTV9ERUxORUlHSCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFJUTV9ERUxORUlHSCBSVE1fREVMTkVJR0gKICBSVE1fR0VUTkVJR0gsCiAjZGVmaW5lIFJUTV9HRVRORUlHSCBSVE1fR0VUTkVJR0gKLQogIFJUTV9ORVdSVUxFID0gMzIsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBSVE1fTkVXUlVMRSBSVE1fTkVXUlVMRQogIFJUTV9ERUxSVUxFLAogI2RlZmluZSBSVE1fREVMUlVMRSBSVE1fREVMUlVMRQogIFJUTV9HRVRSVUxFLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUlRNX0dFVFJVTEUgUlRNX0dFVFJVTEUKLQogIFJUTV9ORVdRRElTQyA9IDM2LAogI2RlZmluZSBSVE1fTkVXUURJU0MgUlRNX05FV1FESVNDCiAgUlRNX0RFTFFESVNDLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUlRNX0RFTFFESVNDIFJUTV9ERUxRRElTQwogIFJUTV9HRVRRRElTQywKICNkZWZpbmUgUlRNX0dFVFFESVNDIFJUTV9HRVRRRElTQwotCiAgUlRNX05FV1RDTEFTUyA9IDQwLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUlRNX05FV1RDTEFTUyBSVE1fTkVXVENMQVNTCiAgUlRNX0RFTFRDTEFTUywKICNkZWZpbmUgUlRNX0RFTFRDTEFTUyBSVE1fREVMVENMQVNTCiAgUlRNX0dFVFRDTEFTUywKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFJUTV9HRVRUQ0xBU1MgUlRNX0dFVFRDTEFTUwotCiAgUlRNX05FV1RGSUxURVIgPSA0NCwKICNkZWZpbmUgUlRNX05FV1RGSUxURVIgUlRNX05FV1RGSUxURVIKICBSVE1fREVMVEZJTFRFUiwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFJUTV9ERUxURklMVEVSIFJUTV9ERUxURklMVEVSCiAgUlRNX0dFVFRGSUxURVIsCiAjZGVmaW5lIFJUTV9HRVRURklMVEVSIFJUTV9HRVRURklMVEVSCi0KICBSVE1fTkVXQUNUSU9OID0gNDgsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBSVE1fTkVXQUNUSU9OIFJUTV9ORVdBQ1RJT04KICBSVE1fREVMQUNUSU9OLAogI2RlZmluZSBSVE1fREVMQUNUSU9OIFJUTV9ERUxBQ1RJT04KICBSVE1fR0VUQUNUSU9OLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUlRNX0dFVEFDVElPTiBSVE1fR0VUQUNUSU9OCi0KICBSVE1fTkVXUFJFRklYID0gNTIsCiAjZGVmaW5lIFJUTV9ORVdQUkVGSVggUlRNX05FV1BSRUZJWAotCiAgUlRNX0dFVE1VTFRJQ0FTVCA9IDU4LAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUlRNX0dFVE1VTFRJQ0FTVCBSVE1fR0VUTVVMVElDQVNUCi0KICBSVE1fR0VUQU5ZQ0FTVCA9IDYyLAogI2RlZmluZSBSVE1fR0VUQU5ZQ0FTVCBSVE1fR0VUQU5ZQ0FTVAotCiAgUlRNX05FV05FSUdIVEJMID0gNjQsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBSVE1fTkVXTkVJR0hUQkwgUlRNX05FV05FSUdIVEJMCiAgUlRNX0dFVE5FSUdIVEJMID0gNjYsCiAjZGVmaW5lIFJUTV9HRVRORUlHSFRCTCBSVE1fR0VUTkVJR0hUQkwKICBSVE1fU0VUTkVJR0hUQkwsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBSVE1fU0VUTkVJR0hUQkwgUlRNX1NFVE5FSUdIVEJMCi0KICBSVE1fTkVXTkRVU0VST1BUID0gNjgsCiAjZGVmaW5lIFJUTV9ORVdORFVTRVJPUFQgUlRNX05FV05EVVNFUk9QVAotCiAgUlRNX05FV0FERFJMQUJFTCA9IDcyLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUlRNX05FV0FERFJMQUJFTCBSVE1fTkVXQUREUkxBQkVMCiAgUlRNX0RFTEFERFJMQUJFTCwKICNkZWZpbmUgUlRNX0RFTEFERFJMQUJFTCBSVE1fREVMQUREUkxBQkVMCiAgUlRNX0dFVEFERFJMQUJFTCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFJUTV9HRVRBRERSTEFCRUwgUlRNX0dFVEFERFJMQUJFTAotCiAgUlRNX0dFVERDQiA9IDc4LAogI2RlZmluZSBSVE1fR0VURENCIFJUTV9HRVREQ0IKICBSVE1fU0VURENCLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUlRNX1NFVERDQiBSVE1fU0VURENCCi0KICBfX1JUTV9NQVgsCiAjZGVmaW5lIFJUTV9NQVggKCgoX19SVE1fTUFYICsgMykgJiB+MykgLSAxKQogfTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUlRNX05SX01TR1RZUEVTIChSVE1fTUFYICsgMSAtIFJUTV9CQVNFKQogI2RlZmluZSBSVE1fTlJfRkFNSUxJRVMgKFJUTV9OUl9NU0dUWVBFUyA+PiAyKQogI2RlZmluZSBSVE1fRkFNKGNtZCkgKCgoY21kKSAtIFJUTV9CQVNFKSA+PiAyKQotCiBzdHJ1Y3QgcnRhdHRyIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgc2hvcnQgcnRhX2xlbjsKICB1bnNpZ25lZCBzaG9ydCBydGFfdHlwZTsKIH07Ci0KICNkZWZpbmUgUlRBX0FMSUdOVE8gNAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUlRBX0FMSUdOKGxlbikgKCAoKGxlbikrUlRBX0FMSUdOVE8tMSkgJiB+KFJUQV9BTElHTlRPLTEpICkKICNkZWZpbmUgUlRBX09LKHJ0YSxsZW4pICgobGVuKSA+PSAoaW50KXNpemVvZihzdHJ1Y3QgcnRhdHRyKSAmJiAgIChydGEpLT5ydGFfbGVuID49IHNpemVvZihzdHJ1Y3QgcnRhdHRyKSAmJiAgIChydGEpLT5ydGFfbGVuIDw9IChsZW4pKQogI2RlZmluZSBSVEFfTkVYVChydGEsYXR0cmxlbikgKChhdHRybGVuKSAtPSBSVEFfQUxJR04oKHJ0YSktPnJ0YV9sZW4pLCAgIChzdHJ1Y3QgcnRhdHRyKikoKChjaGFyKikocnRhKSkgKyBSVEFfQUxJR04oKHJ0YSktPnJ0YV9sZW4pKSkKICNkZWZpbmUgUlRBX0xFTkdUSChsZW4pIChSVEFfQUxJR04oc2l6ZW9mKHN0cnVjdCBydGF0dHIpKSArIChsZW4pKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUlRBX1NQQUNFKGxlbikgUlRBX0FMSUdOKFJUQV9MRU5HVEgobGVuKSkKICNkZWZpbmUgUlRBX0RBVEEocnRhKSAoKHZvaWQqKSgoKGNoYXIqKShydGEpKSArIFJUQV9MRU5HVEgoMCkpKQogI2RlZmluZSBSVEFfUEFZTE9BRChydGEpICgoaW50KSgocnRhKS0+cnRhX2xlbikgLSBSVEFfTEVOR1RIKDApKQotCiBzdHJ1Y3QgcnRtc2cgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBjaGFyIHJ0bV9mYW1pbHk7CiAgdW5zaWduZWQgY2hhciBydG1fZHN0X2xlbjsKICB1bnNpZ25lZCBjaGFyIHJ0bV9zcmNfbGVuOwogIHVuc2lnbmVkIGNoYXIgcnRtX3RvczsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBjaGFyIHJ0bV90YWJsZTsKICB1bnNpZ25lZCBjaGFyIHJ0bV9wcm90b2NvbDsKICB1bnNpZ25lZCBjaGFyIHJ0bV9zY29wZTsKICB1bnNpZ25lZCBjaGFyIHJ0bV90eXBlOwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIHJ0bV9mbGFnczsKIH07Ci0KIGVudW0gewogIFJUTl9VTlNQRUMsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFJUTl9VTklDQVNULAogIFJUTl9MT0NBTCwKICBSVE5fQlJPQURDQVNULAogIFJUTl9BTllDQVNULAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBSVE5fTVVMVElDQVNULAogIFJUTl9CTEFDS0hPTEUsCiAgUlROX1VOUkVBQ0hBQkxFLAogIFJUTl9QUk9ISUJJVCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgUlROX1RIUk9XLAogIFJUTl9OQVQsCiAgUlROX1hSRVNPTFZFLAogIF9fUlROX01BWAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07Ci0KICNkZWZpbmUgUlROX01BWCAoX19SVE5fTUFYIC0gMSkKLQogI2RlZmluZSBSVFBST1RfVU5TUEVDIDAKLSNkZWZpbmUgUlRQUk9UX1JFRElSRUNUIDEgIAotI2RlZmluZSBSVFBST1RfS0VSTkVMIDIgIAotI2RlZmluZSBSVFBST1RfQk9PVCAzICAKLSNkZWZpbmUgUlRQUk9UX1NUQVRJQyA0ICAKLQotI2RlZmluZSBSVFBST1RfR0FURUQgOCAgCi0jZGVmaW5lIFJUUFJPVF9SQSA5ICAKLSNkZWZpbmUgUlRQUk9UX01SVCAxMCAgCi0jZGVmaW5lIFJUUFJPVF9aRUJSQSAxMSAgCi0jZGVmaW5lIFJUUFJPVF9CSVJEIDEyICAKLSNkZWZpbmUgUlRQUk9UX0ROUk9VVEVEIDEzICAKLSNkZWZpbmUgUlRQUk9UX1hPUlAgMTQgIAotI2RlZmluZSBSVFBST1RfTlRLIDE1ICAKLSNkZWZpbmUgUlRQUk9UX0RIQ1AgMTYgIAotCisjZGVmaW5lIFJUUFJPVF9SRURJUkVDVCAxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBSVFBST1RfS0VSTkVMIDIKKyNkZWZpbmUgUlRQUk9UX0JPT1QgMworI2RlZmluZSBSVFBST1RfU1RBVElDIDQKKyNkZWZpbmUgUlRQUk9UX0dBVEVEIDgKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFJUUFJPVF9SQSA5CisjZGVmaW5lIFJUUFJPVF9NUlQgMTAKKyNkZWZpbmUgUlRQUk9UX1pFQlJBIDExCisjZGVmaW5lIFJUUFJPVF9CSVJEIDEyCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBSVFBST1RfRE5ST1VURUQgMTMKKyNkZWZpbmUgUlRQUk9UX1hPUlAgMTQKKyNkZWZpbmUgUlRQUk9UX05USyAxNQorI2RlZmluZSBSVFBST1RfREhDUCAxNgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIGVudW0gcnRfc2NvcGVfdCB7CiAgUlRfU0NPUEVfVU5JVkVSU0U9MCwKLQogIFJUX1NDT1BFX1NJVEU9MjAwLAogIFJUX1NDT1BFX0xJTks9MjUzLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBSVF9TQ09QRV9IT1NUPTI1NCwKICBSVF9TQ09QRV9OT1dIRVJFPTI1NQogfTsKLQotI2RlZmluZSBSVE1fRl9OT1RJRlkgMHgxMDAgIAotI2RlZmluZSBSVE1fRl9DTE9ORUQgMHgyMDAgIAotI2RlZmluZSBSVE1fRl9FUVVBTElaRSAweDQwMCAgCi0jZGVmaW5lIFJUTV9GX1BSRUZJWCAweDgwMCAgCi0KKyNkZWZpbmUgUlRNX0ZfTk9USUZZIDB4MTAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBSVE1fRl9DTE9ORUQgMHgyMDAKKyNkZWZpbmUgUlRNX0ZfRVFVQUxJWkUgMHg0MDAKKyNkZWZpbmUgUlRNX0ZfUFJFRklYIDB4ODAwCiBlbnVtIHJ0X2NsYXNzX3QgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBSVF9UQUJMRV9VTlNQRUM9MCwKLQogIFJUX1RBQkxFX0NPTVBBVD0yNTIsCiAgUlRfVEFCTEVfREVGQVVMVD0yNTMsCiAgUlRfVEFCTEVfTUFJTj0yNTQsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFJUX1RBQkxFX0xPQ0FMPTI1NSwKICBSVF9UQUJMRV9NQVg9MHhGRkZGRkZGRgogfTsKLQogZW51bSBydGF0dHJfdHlwZV90IHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgUlRBX1VOU1BFQywKICBSVEFfRFNULAogIFJUQV9TUkMsCiAgUlRBX0lJRiwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgUlRBX09JRiwKICBSVEFfR0FURVdBWSwKICBSVEFfUFJJT1JJVFksCiAgUlRBX1BSRUZTUkMsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFJUQV9NRVRSSUNTLAogIFJUQV9NVUxUSVBBVEgsCiAgUlRBX1BST1RPSU5GTywKICBSVEFfRkxPVywKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgUlRBX0NBQ0hFSU5GTywKICBSVEFfU0VTU0lPTiwKICBSVEFfTVBfQUxHTywKICBSVEFfVEFCTEUsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFJUQV9NQVJLLAogIF9fUlRBX01BWAogfTsKLQogI2RlZmluZSBSVEFfTUFYIChfX1JUQV9NQVggLSAxKQotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBSVE1fUlRBKHIpICgoc3RydWN0IHJ0YXR0ciopKCgoY2hhciopKHIpKSArIE5MTVNHX0FMSUdOKHNpemVvZihzdHJ1Y3QgcnRtc2cpKSkpCiAjZGVmaW5lIFJUTV9QQVlMT0FEKG4pIE5MTVNHX1BBWUxPQUQobixzaXplb2Yoc3RydWN0IHJ0bXNnKSkKLQogc3RydWN0IHJ0bmV4dGhvcCB7CiAgdW5zaWduZWQgc2hvcnQgcnRuaF9sZW47CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGNoYXIgcnRuaF9mbGFnczsKICB1bnNpZ25lZCBjaGFyIHJ0bmhfaG9wczsKICBpbnQgcnRuaF9pZmluZGV4OwogfTsKLQotI2RlZmluZSBSVE5IX0ZfREVBRCAxICAKLSNkZWZpbmUgUlROSF9GX1BFUlZBU0lWRSAyICAKLSNkZWZpbmUgUlROSF9GX09OTElOSyA0ICAKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgUlROSF9GX0RFQUQgMQorI2RlZmluZSBSVE5IX0ZfUEVSVkFTSVZFIDIKKyNkZWZpbmUgUlROSF9GX09OTElOSyA0CiAjZGVmaW5lIFJUTkhfQUxJR05UTyA0CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBSVE5IX0FMSUdOKGxlbikgKCAoKGxlbikrUlROSF9BTElHTlRPLTEpICYgfihSVE5IX0FMSUdOVE8tMSkgKQogI2RlZmluZSBSVE5IX09LKHJ0bmgsbGVuKSAoKHJ0bmgpLT5ydG5oX2xlbiA+PSBzaXplb2Yoc3RydWN0IHJ0bmV4dGhvcCkgJiYgICAoKGludCkocnRuaCktPnJ0bmhfbGVuKSA8PSAobGVuKSkKICNkZWZpbmUgUlROSF9ORVhUKHJ0bmgpICgoc3RydWN0IHJ0bmV4dGhvcCopKCgoY2hhciopKHJ0bmgpKSArIFJUTkhfQUxJR04oKHJ0bmgpLT5ydG5oX2xlbikpKQogI2RlZmluZSBSVE5IX0xFTkdUSChsZW4pIChSVE5IX0FMSUdOKHNpemVvZihzdHJ1Y3QgcnRuZXh0aG9wKSkgKyAobGVuKSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFJUTkhfU1BBQ0UobGVuKSBSVE5IX0FMSUdOKFJUTkhfTEVOR1RIKGxlbikpCiAjZGVmaW5lIFJUTkhfREFUQShydG5oKSAoKHN0cnVjdCBydGF0dHIqKSgoKGNoYXIqKShydG5oKSkgKyBSVE5IX0xFTkdUSCgwKSkpCi0KIHN0cnVjdCBydGFfY2FjaGVpbmZvIHsKICBfX3UzMiBydGFfY2xudHJlZjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgcnRhX2xhc3R1c2U7CiAgX19zMzIgcnRhX2V4cGlyZXM7CiAgX191MzIgcnRhX2Vycm9yOwogIF9fdTMyIHJ0YV91c2VkOwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBSVE5FVExJTktfSEFWRV9QRUVSSU5GTyAxCiAgX191MzIgcnRhX2lkOwogIF9fdTMyIHJ0YV90czsKICBfX3UzMiBydGFfdHNhZ2U7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKLQogZW51bSB7CiAgUlRBWF9VTlNQRUMsCiAjZGVmaW5lIFJUQVhfVU5TUEVDIFJUQVhfVU5TUEVDCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFJUQVhfTE9DSywKICNkZWZpbmUgUlRBWF9MT0NLIFJUQVhfTE9DSwogIFJUQVhfTVRVLAogI2RlZmluZSBSVEFYX01UVSBSVEFYX01UVQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBSVEFYX1dJTkRPVywKICNkZWZpbmUgUlRBWF9XSU5ET1cgUlRBWF9XSU5ET1cKICBSVEFYX1JUVCwKICNkZWZpbmUgUlRBWF9SVFQgUlRBWF9SVFQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgUlRBWF9SVFRWQVIsCiAjZGVmaW5lIFJUQVhfUlRUVkFSIFJUQVhfUlRUVkFSCiAgUlRBWF9TU1RIUkVTSCwKICNkZWZpbmUgUlRBWF9TU1RIUkVTSCBSVEFYX1NTVEhSRVNICisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFJUQVhfQ1dORCwKICNkZWZpbmUgUlRBWF9DV05EIFJUQVhfQ1dORAogIFJUQVhfQURWTVNTLAogI2RlZmluZSBSVEFYX0FEVk1TUyBSVEFYX0FEVk1TUworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBSVEFYX1JFT1JERVJJTkcsCiAjZGVmaW5lIFJUQVhfUkVPUkRFUklORyBSVEFYX1JFT1JERVJJTkcKICBSVEFYX0hPUExJTUlULAogI2RlZmluZSBSVEFYX0hPUExJTUlUIFJUQVhfSE9QTElNSVQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgUlRBWF9JTklUQ1dORCwKICNkZWZpbmUgUlRBWF9JTklUQ1dORCBSVEFYX0lOSVRDV05ECiAgUlRBWF9GRUFUVVJFUywKICNkZWZpbmUgUlRBWF9GRUFUVVJFUyBSVEFYX0ZFQVRVUkVTCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFJUQVhfUlRPX01JTiwKICNkZWZpbmUgUlRBWF9SVE9fTUlOIFJUQVhfUlRPX01JTgogIFJUQVhfSU5JVFJXTkQsCiAjZGVmaW5lIFJUQVhfSU5JVFJXTkQgUlRBWF9JTklUUldORAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX1JUQVhfTUFYCiB9OwotCiAjZGVmaW5lIFJUQVhfTUFYIChfX1JUQVhfTUFYIC0gMSkKLQogI2RlZmluZSBSVEFYX0ZFQVRVUkVfRUNOIDB4MDAwMDAwMDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFJUQVhfRkVBVFVSRV9TQUNLIDB4MDAwMDAwMDIKICNkZWZpbmUgUlRBWF9GRUFUVVJFX1RJTUVTVEFNUCAweDAwMDAwMDA0CiAjZGVmaW5lIFJUQVhfRkVBVFVSRV9BTExGUkFHIDB4MDAwMDAwMDgKLQogc3RydWN0IHJ0YV9zZXNzaW9uIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191OCBwcm90bzsKICBfX3U4IHBhZDE7CiAgX191MTYgcGFkMjsKLQogIHVuaW9uIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IHsKICBfX3UxNiBzcG9ydDsKICBfX3UxNiBkcG9ydDsKICB9IHBvcnRzOwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCB7CiAgX191OCB0eXBlOwogIF9fdTggY29kZTsKICBfX3UxNiBpZGVudDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgfSBpY21wdDsKLQogIF9fdTMyIHNwaTsKICB9IHU7CiB9OwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IHJ0Z2VubXNnIHsKICB1bnNpZ25lZCBjaGFyIHJ0Z2VuX2ZhbWlseTsKIH07Ci0KIHN0cnVjdCBpZmluZm9tc2cgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBjaGFyIGlmaV9mYW1pbHk7CiAgdW5zaWduZWQgY2hhciBfX2lmaV9wYWQ7CiAgdW5zaWduZWQgc2hvcnQgaWZpX3R5cGU7CiAgaW50IGlmaV9pbmRleDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgaWZpX2ZsYWdzOwogIHVuc2lnbmVkIGlmaV9jaGFuZ2U7CiB9OwotCiBzdHJ1Y3QgcHJlZml4bXNnIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgY2hhciBwcmVmaXhfZmFtaWx5OwogIHVuc2lnbmVkIGNoYXIgcHJlZml4X3BhZDE7CiAgdW5zaWduZWQgc2hvcnQgcHJlZml4X3BhZDI7CiAgaW50IHByZWZpeF9pZmluZGV4OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBjaGFyIHByZWZpeF90eXBlOwogIHVuc2lnbmVkIGNoYXIgcHJlZml4X2xlbjsKICB1bnNpZ25lZCBjaGFyIHByZWZpeF9mbGFnczsKICB1bnNpZ25lZCBjaGFyIHByZWZpeF9wYWQzOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07Ci0KIGVudW0KIHsKICBQUkVGSVhfVU5TUEVDLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBQUkVGSVhfQUREUkVTUywKICBQUkVGSVhfQ0FDSEVJTkZPLAogIF9fUFJFRklYX01BWAogfTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUFJFRklYX01BWCAoX19QUkVGSVhfTUFYIC0gMSkKLQogc3RydWN0IHByZWZpeF9jYWNoZWluZm8gewogIF9fdTMyIHByZWZlcnJlZF90aW1lOwogIF9fdTMyIHZhbGlkX3RpbWU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKLQogc3RydWN0IHRjbXNnIHsKICB1bnNpZ25lZCBjaGFyIHRjbV9mYW1pbHk7CiAgdW5zaWduZWQgY2hhciB0Y21fX3BhZDE7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIHNob3J0IHRjbV9fcGFkMjsKICBpbnQgdGNtX2lmaW5kZXg7CiAgX191MzIgdGNtX2hhbmRsZTsKICBfX3UzMiB0Y21fcGFyZW50OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiB0Y21faW5mbzsKIH07Ci0KIGVudW0gewogIFRDQV9VTlNQRUMsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFRDQV9LSU5ELAogIFRDQV9PUFRJT05TLAogIFRDQV9TVEFUUywKICBUQ0FfWFNUQVRTLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBUQ0FfUkFURSwKICBUQ0FfRkNOVCwKICBUQ0FfU1RBVFMyLAogIFRDQV9TVEFCLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX1RDQV9NQVgKIH07Ci0KICNkZWZpbmUgVENBX01BWCAoX19UQ0FfTUFYIC0gMSkKLQogI2RlZmluZSBUQ0FfUlRBKHIpICgoc3RydWN0IHJ0YXR0ciopKCgoY2hhciopKHIpKSArIE5MTVNHX0FMSUdOKHNpemVvZihzdHJ1Y3QgdGNtc2cpKSkpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBUQ0FfUEFZTE9BRChuKSBOTE1TR19QQVlMT0FEKG4sc2l6ZW9mKHN0cnVjdCB0Y21zZykpCi0KIHN0cnVjdCBuZHVzZXJvcHRtc2cgewogIHVuc2lnbmVkIGNoYXIgbmR1c2Vyb3B0X2ZhbWlseTsKICB1bnNpZ25lZCBjaGFyIG5kdXNlcm9wdF9wYWQxOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBzaG9ydCBuZHVzZXJvcHRfb3B0c19sZW47CiAgaW50IG5kdXNlcm9wdF9pZmluZGV4OwogIF9fdTggbmR1c2Vyb3B0X2ljbXBfdHlwZTsKICBfX3U4IG5kdXNlcm9wdF9pY21wX2NvZGU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIHNob3J0IG5kdXNlcm9wdF9wYWQyOwogIHVuc2lnbmVkIGludCBuZHVzZXJvcHRfcGFkMzsKLQogfTsKLQogZW51bSB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5EVVNFUk9QVF9VTlNQRUMsCiAgTkRVU0VST1BUX1NSQ0FERFIsCiAgX19ORFVTRVJPUFRfTUFYCiB9OwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBORFVTRVJPUFRfTUFYIChfX05EVVNFUk9QVF9NQVggLSAxKQotCiAjZGVmaW5lIFJUTUdSUF9MSU5LIDEKICNkZWZpbmUgUlRNR1JQX05PVElGWSAyCiAjZGVmaW5lIFJUTUdSUF9ORUlHSCA0CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBSVE1HUlBfVEMgOAotCiAjZGVmaW5lIFJUTUdSUF9JUFY0X0lGQUREUiAweDEwCiAjZGVmaW5lIFJUTUdSUF9JUFY0X01ST1VURSAweDIwCiAjZGVmaW5lIFJUTUdSUF9JUFY0X1JPVVRFIDB4NDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFJUTUdSUF9JUFY0X1JVTEUgMHg4MAotCiAjZGVmaW5lIFJUTUdSUF9JUFY2X0lGQUREUiAweDEwMAogI2RlZmluZSBSVE1HUlBfSVBWNl9NUk9VVEUgMHgyMDAKICNkZWZpbmUgUlRNR1JQX0lQVjZfUk9VVEUgMHg0MDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFJUTUdSUF9JUFY2X0lGSU5GTyAweDgwMAotCiAjZGVmaW5lIFJUTUdSUF9ERUNuZXRfSUZBRERSIDB4MTAwMAogI2RlZmluZSBSVE1HUlBfREVDbmV0X1JPVVRFIDB4NDAwMAotCiAjZGVmaW5lIFJUTUdSUF9JUFY2X1BSRUZJWCAweDIwMDAwCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBlbnVtIHJ0bmV0bGlua19ncm91cHMgewogIFJUTkxHUlBfTk9ORSwKICNkZWZpbmUgUlROTEdSUF9OT05FIFJUTkxHUlBfTk9ORQogIFJUTkxHUlBfTElOSywKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFJUTkxHUlBfTElOSyBSVE5MR1JQX0xJTksKICBSVE5MR1JQX05PVElGWSwKICNkZWZpbmUgUlROTEdSUF9OT1RJRlkgUlROTEdSUF9OT1RJRlkKICBSVE5MR1JQX05FSUdILAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUlROTEdSUF9ORUlHSCBSVE5MR1JQX05FSUdICiAgUlROTEdSUF9UQywKICNkZWZpbmUgUlROTEdSUF9UQyBSVE5MR1JQX1RDCiAgUlROTEdSUF9JUFY0X0lGQUREUiwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFJUTkxHUlBfSVBWNF9JRkFERFIgUlROTEdSUF9JUFY0X0lGQUREUgogIFJUTkxHUlBfSVBWNF9NUk9VVEUsCiAjZGVmaW5lIFJUTkxHUlBfSVBWNF9NUk9VVEUgUlROTEdSUF9JUFY0X01ST1VURQogIFJUTkxHUlBfSVBWNF9ST1VURSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFJUTkxHUlBfSVBWNF9ST1VURSBSVE5MR1JQX0lQVjRfUk9VVEUKICBSVE5MR1JQX0lQVjRfUlVMRSwKICNkZWZpbmUgUlROTEdSUF9JUFY0X1JVTEUgUlROTEdSUF9JUFY0X1JVTEUKICBSVE5MR1JQX0lQVjZfSUZBRERSLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUlROTEdSUF9JUFY2X0lGQUREUiBSVE5MR1JQX0lQVjZfSUZBRERSCiAgUlROTEdSUF9JUFY2X01ST1VURSwKICNkZWZpbmUgUlROTEdSUF9JUFY2X01ST1VURSBSVE5MR1JQX0lQVjZfTVJPVVRFCiAgUlROTEdSUF9JUFY2X1JPVVRFLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUlROTEdSUF9JUFY2X1JPVVRFIFJUTkxHUlBfSVBWNl9ST1VURQogIFJUTkxHUlBfSVBWNl9JRklORk8sCiAjZGVmaW5lIFJUTkxHUlBfSVBWNl9JRklORk8gUlROTEdSUF9JUFY2X0lGSU5GTwogIFJUTkxHUlBfREVDbmV0X0lGQUREUiwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFJUTkxHUlBfREVDbmV0X0lGQUREUiBSVE5MR1JQX0RFQ25ldF9JRkFERFIKICBSVE5MR1JQX05PUDIsCiAgUlROTEdSUF9ERUNuZXRfUk9VVEUsCiAjZGVmaW5lIFJUTkxHUlBfREVDbmV0X1JPVVRFIFJUTkxHUlBfREVDbmV0X1JPVVRFCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFJUTkxHUlBfREVDbmV0X1JVTEUsCiAjZGVmaW5lIFJUTkxHUlBfREVDbmV0X1JVTEUgUlROTEdSUF9ERUNuZXRfUlVMRQogIFJUTkxHUlBfTk9QNCwKICBSVE5MR1JQX0lQVjZfUFJFRklYLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUlROTEdSUF9JUFY2X1BSRUZJWCBSVE5MR1JQX0lQVjZfUFJFRklYCiAgUlROTEdSUF9JUFY2X1JVTEUsCiAjZGVmaW5lIFJUTkxHUlBfSVBWNl9SVUxFIFJUTkxHUlBfSVBWNl9SVUxFCiAgUlROTEdSUF9ORF9VU0VST1BULAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUlROTEdSUF9ORF9VU0VST1BUIFJUTkxHUlBfTkRfVVNFUk9QVAogIFJUTkxHUlBfUEhPTkVUX0lGQUREUiwKICNkZWZpbmUgUlROTEdSUF9QSE9ORVRfSUZBRERSIFJUTkxHUlBfUEhPTkVUX0lGQUREUgogIFJUTkxHUlBfUEhPTkVUX1JPVVRFLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUlROTEdSUF9QSE9ORVRfUk9VVEUgUlROTEdSUF9QSE9ORVRfUk9VVEUKICBfX1JUTkxHUlBfTUFYCiB9OwogI2RlZmluZSBSVE5MR1JQX01BWCAoX19SVE5MR1JQX01BWCAtIDEpCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgdGNhbXNnIHsKICB1bnNpZ25lZCBjaGFyIHRjYV9mYW1pbHk7CiAgdW5zaWduZWQgY2hhciB0Y2FfX3BhZDE7CiAgdW5zaWduZWQgc2hvcnQgdGNhX19wYWQyOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiAjZGVmaW5lIFRBX1JUQShyKSAoKHN0cnVjdCBydGF0dHIqKSgoKGNoYXIqKShyKSkgKyBOTE1TR19BTElHTihzaXplb2Yoc3RydWN0IHRjYW1zZykpKSkKICNkZWZpbmUgVEFfUEFZTE9BRChuKSBOTE1TR19QQVlMT0FEKG4sc2l6ZW9mKHN0cnVjdCB0Y2Ftc2cpKQotI2RlZmluZSBUQ0FfQUNUX1RBQiAxICAgCisjZGVmaW5lIFRDQV9BQ1RfVEFCIDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFRDQUFfTUFYIDEKLQogI2VuZGlmCi0KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9yd3NlbS5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3J3c2VtLmgKaW5kZXggZTY0YzRjOC4uYjViMTU1NCAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3J3c2VtLmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3J3c2VtLmgKQEAgLTcsMTEgKzcsMTcgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9MSU5VWF9SV1NFTV9ICiAjZGVmaW5lIF9MSU5VWF9SV1NFTV9ICi0KICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+Ci0KICNlbmRpZgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9zY2hlZC5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3NjaGVkLmgKaW5kZXggNmI3ODFlYi4uZjQxZDI5MSAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3NjaGVkLmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3NjaGVkLmgKQEAgLTcsMzUgKzcsNDQgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9MSU5VWF9TQ0hFRF9ICiAjZGVmaW5lIF9MSU5VWF9TQ0hFRF9ICi0KLSNpbmNsdWRlIDxsaW51eC9hdXh2ZWMuaD4gIAotCi0jZGVmaW5lIENTSUdOQUwgMHgwMDAwMDBmZiAgCi0jZGVmaW5lIENMT05FX1ZNIDB4MDAwMDAxMDAgIAotI2RlZmluZSBDTE9ORV9GUyAweDAwMDAwMjAwICAKLSNkZWZpbmUgQ0xPTkVfRklMRVMgMHgwMDAwMDQwMCAgCi0jZGVmaW5lIENMT05FX1NJR0hBTkQgMHgwMDAwMDgwMCAgCi0jZGVmaW5lIENMT05FX1BUUkFDRSAweDAwMDAyMDAwICAKLSNkZWZpbmUgQ0xPTkVfVkZPUksgMHgwMDAwNDAwMCAgCi0jZGVmaW5lIENMT05FX1BBUkVOVCAweDAwMDA4MDAwICAKLSNkZWZpbmUgQ0xPTkVfVEhSRUFEIDB4MDAwMTAwMDAgIAotI2RlZmluZSBDTE9ORV9ORVdOUyAweDAwMDIwMDAwICAKLSNkZWZpbmUgQ0xPTkVfU1lTVlNFTSAweDAwMDQwMDAwICAKLSNkZWZpbmUgQ0xPTkVfU0VUVExTIDB4MDAwODAwMDAgIAotI2RlZmluZSBDTE9ORV9QQVJFTlRfU0VUVElEIDB4MDAxMDAwMDAgIAotI2RlZmluZSBDTE9ORV9DSElMRF9DTEVBUlRJRCAweDAwMjAwMDAwICAKLSNkZWZpbmUgQ0xPTkVfREVUQUNIRUQgMHgwMDQwMDAwMCAgCi0jZGVmaW5lIENMT05FX1VOVFJBQ0VEIDB4MDA4MDAwMDAgIAotI2RlZmluZSBDTE9ORV9DSElMRF9TRVRUSUQgMHgwMTAwMDAwMCAgCi0jZGVmaW5lIENMT05FX1NUT1BQRUQgMHgwMjAwMDAwMCAgCi0KKyNpbmNsdWRlIDxsaW51eC9hdXh2ZWMuaD4KKyNkZWZpbmUgQ1NJR05BTCAweDAwMDAwMGZmCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBDTE9ORV9WTSAweDAwMDAwMTAwCisjZGVmaW5lIENMT05FX0ZTIDB4MDAwMDAyMDAKKyNkZWZpbmUgQ0xPTkVfRklMRVMgMHgwMDAwMDQwMAorI2RlZmluZSBDTE9ORV9TSUdIQU5EIDB4MDAwMDA4MDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIENMT05FX1BUUkFDRSAweDAwMDAyMDAwCisjZGVmaW5lIENMT05FX1ZGT1JLIDB4MDAwMDQwMDAKKyNkZWZpbmUgQ0xPTkVfUEFSRU5UIDB4MDAwMDgwMDAKKyNkZWZpbmUgQ0xPTkVfVEhSRUFEIDB4MDAwMTAwMDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIENMT05FX05FV05TIDB4MDAwMjAwMDAKKyNkZWZpbmUgQ0xPTkVfU1lTVlNFTSAweDAwMDQwMDAwCisjZGVmaW5lIENMT05FX1NFVFRMUyAweDAwMDgwMDAwCisjZGVmaW5lIENMT05FX1BBUkVOVF9TRVRUSUQgMHgwMDEwMDAwMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgQ0xPTkVfQ0hJTERfQ0xFQVJUSUQgMHgwMDIwMDAwMAorI2RlZmluZSBDTE9ORV9ERVRBQ0hFRCAweDAwNDAwMDAwCisjZGVmaW5lIENMT05FX1VOVFJBQ0VEIDB4MDA4MDAwMDAKKyNkZWZpbmUgQ0xPTkVfQ0hJTERfU0VUVElEIDB4MDEwMDAwMDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIENMT05FX1NUT1BQRUQgMHgwMjAwMDAwMAogI2RlZmluZSBTQ0hFRF9OT1JNQUwgMAogI2RlZmluZSBTQ0hFRF9GSUZPIDEKICNkZWZpbmUgU0NIRURfUlIgMgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU0NIRURfQkFUQ0ggMwotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9zZWNjb21wLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc2VjY29tcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiMWIyYjgKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc2VjY29tcC5oCkBAIC0wLDAgKzEsNDQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0xJTlVYX1NFQ0NPTVBfSAorI2RlZmluZSBfTElOVVhfU0VDQ09NUF9ICisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgU0VDQ09NUF9NT0RFX0RJU0FCTEVEIDAKKyNkZWZpbmUgU0VDQ09NUF9NT0RFX1NUUklDVCAxCisjZGVmaW5lIFNFQ0NPTVBfTU9ERV9GSUxURVIgMgorI2RlZmluZSBTRUNDT01QX1JFVF9LSUxMIDB4MDAwMDAwMDBVCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBTRUNDT01QX1JFVF9UUkFQIDB4MDAwMzAwMDBVCisjZGVmaW5lIFNFQ0NPTVBfUkVUX0VSUk5PIDB4MDAwNTAwMDBVCisjZGVmaW5lIFNFQ0NPTVBfUkVUX1RSQUNFIDB4N2ZmMDAwMDBVCisjZGVmaW5lIFNFQ0NPTVBfUkVUX0FMTE9XIDB4N2ZmZjAwMDBVCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBTRUNDT01QX1JFVF9BQ1RJT04gMHg3ZmZmMDAwMFUKKyNkZWZpbmUgU0VDQ09NUF9SRVRfREFUQSAweDAwMDBmZmZmVQorc3RydWN0IHNlY2NvbXBfZGF0YSB7CisgaW50IG5yOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UzMiBhcmNoOworIF9fdTY0IGluc3RydWN0aW9uX3BvaW50ZXI7CisgX191NjQgYXJnc1s2XTsKK307CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc2VjdXJlYml0cy5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3NlY3VyZWJpdHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YmRlMzY1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3NlY3VyZWJpdHMuaApAQCAtMCwwICsxLDQxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9MSU5VWF9TRUNVUkVCSVRTX0gKKyNkZWZpbmUgX0xJTlVYX1NFQ1VSRUJJVFNfSCAxCisjZGVmaW5lIGlzc2VjdXJlX21hc2soWCkgKDEgPDwgKFgpKQorI2RlZmluZSBTRUNVUkVCSVRTX0RFRkFVTFQgMHgwMDAwMDAwMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgU0VDVVJFX05PUk9PVCAwCisjZGVmaW5lIFNFQ1VSRV9OT1JPT1RfTE9DS0VEIDEKKyNkZWZpbmUgU0VDQklUX05PUk9PVCAoaXNzZWN1cmVfbWFzayhTRUNVUkVfTk9ST09UKSkKKyNkZWZpbmUgU0VDQklUX05PUk9PVF9MT0NLRUQgKGlzc2VjdXJlX21hc2soU0VDVVJFX05PUk9PVF9MT0NLRUQpKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgU0VDVVJFX05PX1NFVFVJRF9GSVhVUCAyCisjZGVmaW5lIFNFQ1VSRV9OT19TRVRVSURfRklYVVBfTE9DS0VEIDMKKyNkZWZpbmUgU0VDQklUX05PX1NFVFVJRF9GSVhVUCAoaXNzZWN1cmVfbWFzayhTRUNVUkVfTk9fU0VUVUlEX0ZJWFVQKSkKKyNkZWZpbmUgU0VDQklUX05PX1NFVFVJRF9GSVhVUF9MT0NLRUQgICAoaXNzZWN1cmVfbWFzayhTRUNVUkVfTk9fU0VUVUlEX0ZJWFVQX0xPQ0tFRCkpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBTRUNVUkVfS0VFUF9DQVBTIDQKKyNkZWZpbmUgU0VDVVJFX0tFRVBfQ0FQU19MT0NLRUQgNQorI2RlZmluZSBTRUNCSVRfS0VFUF9DQVBTIChpc3NlY3VyZV9tYXNrKFNFQ1VSRV9LRUVQX0NBUFMpKQorI2RlZmluZSBTRUNCSVRfS0VFUF9DQVBTX0xPQ0tFRCAoaXNzZWN1cmVfbWFzayhTRUNVUkVfS0VFUF9DQVBTX0xPQ0tFRCkpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBTRUNVUkVfQUxMX0JJVFMgKGlzc2VjdXJlX21hc2soU0VDVVJFX05PUk9PVCkgfCAgIGlzc2VjdXJlX21hc2soU0VDVVJFX05PX1NFVFVJRF9GSVhVUCkgfCAgIGlzc2VjdXJlX21hc2soU0VDVVJFX0tFRVBfQ0FQUykpCisjZGVmaW5lIFNFQ1VSRV9BTExfTE9DS1MgKFNFQ1VSRV9BTExfQklUUyA8PCAxKQorI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc2VtLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc2VtLmgKaW5kZXggZGZhNTMxYi4uN2UxMTcxZSAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3NlbS5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9zZW0uaApAQCAtNyw3NiArNyw4NSBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX0xJTlVYX1NFTV9ICiAjZGVmaW5lIF9MSU5VWF9TRU1fSAotCiAjaW5jbHVkZSA8bGludXgvaXBjLmg+Ci0KLSNkZWZpbmUgU0VNX1VORE8gMHgxMDAwICAKLQotI2RlZmluZSBHRVRQSUQgMTEgIAotI2RlZmluZSBHRVRWQUwgMTIgIAotI2RlZmluZSBHRVRBTEwgMTMgIAotI2RlZmluZSBHRVROQ05UIDE0ICAKLSNkZWZpbmUgR0VUWkNOVCAxNSAgCi0jZGVmaW5lIFNFVFZBTCAxNiAgCi0jZGVmaW5lIFNFVEFMTCAxNyAgCi0KKyNkZWZpbmUgU0VNX1VORE8gMHgxMDAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBHRVRQSUQgMTEKKyNkZWZpbmUgR0VUVkFMIDEyCisjZGVmaW5lIEdFVEFMTCAxMworI2RlZmluZSBHRVROQ05UIDE0CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBHRVRaQ05UIDE1CisjZGVmaW5lIFNFVFZBTCAxNgorI2RlZmluZSBTRVRBTEwgMTcKICNkZWZpbmUgU0VNX1NUQVQgMTgKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNFTV9JTkZPIDE5Ci0KIHN0cnVjdCBzZW1pZF9kcyB7CiAgc3RydWN0IGlwY19wZXJtIHNlbV9wZXJtOwogIF9fa2VybmVsX3RpbWVfdCBzZW1fb3RpbWU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fa2VybmVsX3RpbWVfdCBzZW1fY3RpbWU7CiAgc3RydWN0IHNlbSAqc2VtX2Jhc2U7CiAgc3RydWN0IHNlbV9xdWV1ZSAqc2VtX3BlbmRpbmc7CiAgc3RydWN0IHNlbV9xdWV1ZSAqKnNlbV9wZW5kaW5nX2xhc3Q7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCBzZW1fdW5kbyAqdW5kbzsKICB1bnNpZ25lZCBzaG9ydCBzZW1fbnNlbXM7CiB9OwotCiAjaW5jbHVkZSA8YXNtL3NlbWJ1Zi5oPgotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IHNlbWJ1ZiB7CiAgdW5zaWduZWQgc2hvcnQgc2VtX251bTsKICBzaG9ydCBzZW1fb3A7CiAgc2hvcnQgc2VtX2ZsZzsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwotCiB1bmlvbiBzZW11biB7CiAgaW50IHZhbDsKICBzdHJ1Y3Qgc2VtaWRfZHMgX191c2VyICpidWY7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIHNob3J0IF9fdXNlciAqYXJyYXk7CiAgc3RydWN0IHNlbWluZm8gX191c2VyICpfX2J1ZjsKICB2b2lkIF9fdXNlciAqX19wYWQ7CiB9OwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IHNlbWluZm8gewogIGludCBzZW1tYXA7CiAgaW50IHNlbW1uaTsKICBpbnQgc2VtbW5zOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBpbnQgc2VtbW51OwogIGludCBzZW1tc2w7CiAgaW50IHNlbW9wbTsKICBpbnQgc2VtdW1lOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBpbnQgc2VtdXN6OwogIGludCBzZW12bXg7CiAgaW50IHNlbWFlbTsKIH07Ci0KLSNkZWZpbmUgU0VNTU5JIDEyOCAgCi0jZGVmaW5lIFNFTU1TTCAyNTAgIAotI2RlZmluZSBTRU1NTlMgKFNFTU1OSSpTRU1NU0wpICAKLSNkZWZpbmUgU0VNT1BNIDMyICAKLSNkZWZpbmUgU0VNVk1YIDMyNzY3ICAKLSNkZWZpbmUgU0VNQUVNIFNFTVZNWCAgCi0KLSNkZWZpbmUgU0VNVU1FIFNFTU9QTSAgCi0jZGVmaW5lIFNFTU1OVSBTRU1NTlMgIAotI2RlZmluZSBTRU1NQVAgU0VNTU5TICAKLSNkZWZpbmUgU0VNVVNaIDIwICAKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgU0VNTU5JIDEyOAorI2RlZmluZSBTRU1NU0wgMjUwCisjZGVmaW5lIFNFTU1OUyAoU0VNTU5JKlNFTU1TTCkKKyNkZWZpbmUgU0VNT1BNIDMyCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBTRU1WTVggMzI3NjcKKyNkZWZpbmUgU0VNQUVNIFNFTVZNWAorI2RlZmluZSBTRU1VTUUgU0VNT1BNCisjZGVmaW5lIFNFTU1OVSBTRU1NTlMKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFNFTU1BUCBTRU1NTlMKKyNkZWZpbmUgU0VNVVNaIDIwCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9zZXFfZmlsZS5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3NlcV9maWxlLmgKaW5kZXggODFlMzE0ZC4uMjk0Njg1YyAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3NlcV9maWxlLmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3NlcV9maWxlLmgKQEAgLTcsNiArNywxMyBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX0xJTlVYX1NFUV9GSUxFX0gKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9zZXFsb2NrLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc2VxbG9jay5oCmluZGV4IGExZTA1ZDQuLjcxM2JhZmEgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9zZXFsb2NrLmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3NlcWxvY2suaApAQCAtNywzNiArNyw0NCBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX19MSU5VWF9TRVFMT0NLX0gKICNkZWZpbmUgX19MSU5VWF9TRVFMT0NLX0gKLQogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvcHJlZW1wdC5oPgotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogdHlwZWRlZiBzdHJ1Y3QgewogIHVuc2lnbmVkIHNlcXVlbmNlOwogIHNwaW5sb2NrX3QgbG9jazsKIH0gc2VxbG9ja190OwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX1NFUUxPQ0tfVU5MT0NLRUQobG9ja25hbWUpICAgeyAwLCBfX1NQSU5fTE9DS19VTkxPQ0tFRChsb2NrbmFtZSkgfQotCiAjZGVmaW5lIFNFUUxPQ0tfVU5MT0NLRUQgICBfX1NFUUxPQ0tfVU5MT0NLRUQob2xkX3N0eWxlX3NlcWxvY2tfaW5pdCkKLQogI2RlZmluZSBzZXFsb2NrX2luaXQoeCkgICBkbyB7ICooeCkgPSAoc2VxbG9ja190KSBfX1NFUUxPQ0tfVU5MT0NLRUQoeCk7IH0gd2hpbGUgKDApCi0KICNkZWZpbmUgREVGSU5FX1NFUUxPQ0soeCkgICBzZXFsb2NrX3QgeCA9IF9fU0VRTE9DS19VTkxPQ0tFRCh4KQotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwordHlwZWRlZiBzdHJ1Y3Qgc2VxY291bnQgeworIHVuc2lnbmVkIHNlcXVlbmNlOworfSBzZXFjb3VudF90OwogI2RlZmluZSBTRVFDTlRfWkVSTyB7IDAgfQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgc2VxY291bnRfaW5pdCh4KSBkbyB7ICooeCkgPSAoc2VxY291bnRfdCkgU0VRQ05UX1pFUk87IH0gd2hpbGUgKDApCi0KICNkZWZpbmUgd3JpdGVfc2VxbG9ja19pcnFzYXZlKGxvY2ssIGZsYWdzKSAgIGRvIHsgbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOyB3cml0ZV9zZXFsb2NrKGxvY2spOyB9IHdoaWxlICgwKQogI2RlZmluZSB3cml0ZV9zZXFsb2NrX2lycShsb2NrKSAgIGRvIHsgbG9jYWxfaXJxX2Rpc2FibGUoKTsgd3JpdGVfc2VxbG9jayhsb2NrKTsgfSB3aGlsZSAoMCkKICNkZWZpbmUgd3JpdGVfc2VxbG9ja19iaChsb2NrKSAgIGRvIHsgbG9jYWxfYmhfZGlzYWJsZSgpOyB3cml0ZV9zZXFsb2NrKGxvY2spOyB9IHdoaWxlICgwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgd3JpdGVfc2VxdW5sb2NrX2lycXJlc3RvcmUobG9jaywgZmxhZ3MpICAgZG8geyB3cml0ZV9zZXF1bmxvY2sobG9jayk7IGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsgfSB3aGlsZSgwKQogI2RlZmluZSB3cml0ZV9zZXF1bmxvY2tfaXJxKGxvY2spICAgZG8geyB3cml0ZV9zZXF1bmxvY2sobG9jayk7IGxvY2FsX2lycV9lbmFibGUoKTsgfSB3aGlsZSgwKQogI2RlZmluZSB3cml0ZV9zZXF1bmxvY2tfYmgobG9jaykgICBkbyB7IHdyaXRlX3NlcXVubG9jayhsb2NrKTsgbG9jYWxfYmhfZW5hYmxlKCk7IH0gd2hpbGUoMCkKICNkZWZpbmUgcmVhZF9zZXFiZWdpbl9pcnFzYXZlKGxvY2ssIGZsYWdzKSAgICh7IGxvY2FsX2lycV9zYXZlKGZsYWdzKTsgcmVhZF9zZXFiZWdpbihsb2NrKTsgfSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIHJlYWRfc2VxcmV0cnlfaXJxcmVzdG9yZShsb2NrLCBpdiwgZmxhZ3MpICAgKHsgICBpbnQgcmV0ID0gcmVhZF9zZXFyZXRyeShsb2NrLCBpdik7ICAgbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOyAgIHJldDsgICB9KQogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc2VyaWFsX2NvcmUuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9zZXJpYWxfY29yZS5oCmluZGV4IDc5ZjAzNzUuLjE5YjBhNzIgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9zZXJpYWxfY29yZS5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9zZXJpYWxfY29yZS5oCkBAIC03LDg5ICs3LDgyIEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBMSU5VWF9TRVJJQUxfQ09SRV9ICiAjZGVmaW5lIExJTlVYX1NFUklBTF9DT1JFX0gKLQogI2RlZmluZSBQT1JUX1VOS05PV04gMAogI2RlZmluZSBQT1JUXzgyNTAgMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUE9SVF8xNjQ1MCAyCiAjZGVmaW5lIFBPUlRfMTY1NTAgMwogI2RlZmluZSBQT1JUXzE2NTUwQSA0CiAjZGVmaW5lIFBPUlRfQ0lSUlVTIDUKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBPUlRfMTY2NTAgNgogI2RlZmluZSBQT1JUXzE2NjUwVjIgNwogI2RlZmluZSBQT1JUXzE2NzUwIDgKICNkZWZpbmUgUE9SVF9TVEFSVEVDSCA5CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQT1JUXzE2Qzk1MCAxMAogI2RlZmluZSBQT1JUXzE2NjU0IDExCiAjZGVmaW5lIFBPUlRfMTY4NTAgMTIKICNkZWZpbmUgUE9SVF9SU0EgMTMKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBPUlRfTlMxNjU1MEEgMTQKICNkZWZpbmUgUE9SVF9YU0NBTEUgMTUKLSNkZWZpbmUgUE9SVF9NQVhfODI1MCAxNSAgCi0KKyNkZWZpbmUgUE9SVF9NQVhfODI1MCAxNQogI2RlZmluZSBQT1JUX1BYQSAzMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUE9SVF9BTUJBIDMyCiAjZGVmaW5lIFBPUlRfQ0xQUzcxMVggMzMKICNkZWZpbmUgUE9SVF9TQTExMDAgMzQKICNkZWZpbmUgUE9SVF9VQVJUMDAgMzUKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBPUlRfMjEyODUgMzcKLQogI2RlZmluZSBQT1JUX1NVTlpJTE9HIDM4CiAjZGVmaW5lIFBPUlRfU1VOU0FCIDM5Ci0KICNkZWZpbmUgUE9SVF9WODUwRV9VQVJUIDQwCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBPUlRfRFogNDcKLQogI2RlZmluZSBQT1JUX01VWCA0OAotCiAjZGVmaW5lIFBPUlRfQVQ5MSA0OQotCi0jZGVmaW5lIFBPUlRfTUFDX1pJTE9HIDUwICAKKyNkZWZpbmUgUE9SVF9NQUNfWklMT0cgNTAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBPUlRfUE1BQ19aSUxPRyA1MQotCiAjZGVmaW5lIFBPUlRfU0NJIDUyCiAjZGVmaW5lIFBPUlRfU0NJRiA1MwogI2RlZmluZSBQT1JUX0lSREEgNTQKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUE9SVF9TM0MyNDEwIDU1Ci0KICNkZWZpbmUgUE9SVF9JUDIyWklMT0cgNTYKLQogI2RlZmluZSBQT1JUX0xIN0E0MFggNTcKLQogI2RlZmluZSBQT1JUX0NQTSA1OAotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQT1JUX01QQzUyeHggNTkKLQogI2RlZmluZSBQT1JUX0lDT00gNjAKLQogI2RlZmluZSBQT1JUX1MzQzI0NDAgNjEKLQogI2RlZmluZSBQT1JUX0lNWCA2MgotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQT1JUX01QU0MgNjMKLQogI2RlZmluZSBQT1JUX1RYWDkgNjQKLQogI2RlZmluZSBQT1JUX1ZSNDFYWF9TSVUgNjUKICNkZWZpbmUgUE9SVF9WUjQxWFhfRFNJVSA2NgotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQT1JUX1MzQzI0MDAgNjcKLQogI2RlZmluZSBQT1JUX00zMlJfU0lPIDY4Ci0KICNkZWZpbmUgUE9SVF9KU00gNjkKLQogI2RlZmluZSBQT1JUX0lQMzEwNiA3MAotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQT1JUX05FVFggNzEKLQogI2RlZmluZSBQT1JUX1NVTkhWIDcyCi0KICNkZWZpbmUgUE9SVF9TM0MyNDEyIDczCi0KICNlbmRpZgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9zZXJpYWxfcmVnLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc2VyaWFsX3JlZy5oCmluZGV4IDk3YjE0OWEuLjVkZjc5ZTEgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9zZXJpYWxfcmVnLmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3NlcmlhbF9yZWcuaApAQCAtNywyNDMgKzcsMjU1IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfTElOVVhfU0VSSUFMX1JFR19ICiAjZGVmaW5lIF9MSU5VWF9TRVJJQUxfUkVHX0gKLQotI2RlZmluZSBVQVJUX1JYIDAgIAotI2RlZmluZSBVQVJUX1RYIDAgIAotCi0jZGVmaW5lIFVBUlRfSUVSIDEgIAotI2RlZmluZSBVQVJUX0lFUl9NU0kgMHgwOCAgCi0jZGVmaW5lIFVBUlRfSUVSX1JMU0kgMHgwNCAgCi0jZGVmaW5lIFVBUlRfSUVSX1RIUkkgMHgwMiAgCi0jZGVmaW5lIFVBUlRfSUVSX1JESSAweDAxICAKLQotI2RlZmluZSBVQVJUX0lFUlhfU0xFRVAgMHgxMCAgCi0KLSNkZWZpbmUgVUFSVF9JSVIgMiAgCi0jZGVmaW5lIFVBUlRfSUlSX05PX0lOVCAweDAxICAKLSNkZWZpbmUgVUFSVF9JSVJfSUQgMHgwNiAgCi0jZGVmaW5lIFVBUlRfSUlSX01TSSAweDAwICAKLSNkZWZpbmUgVUFSVF9JSVJfVEhSSSAweDAyICAKLSNkZWZpbmUgVUFSVF9JSVJfUkRJIDB4MDQgIAotI2RlZmluZSBVQVJUX0lJUl9STFNJIDB4MDYgIAotCi0jZGVmaW5lIFVBUlRfRkNSIDIgIAotI2RlZmluZSBVQVJUX0ZDUl9FTkFCTEVfRklGTyAweDAxICAKLSNkZWZpbmUgVUFSVF9GQ1JfQ0xFQVJfUkNWUiAweDAyICAKLSNkZWZpbmUgVUFSVF9GQ1JfQ0xFQVJfWE1JVCAweDA0ICAKLSNkZWZpbmUgVUFSVF9GQ1JfRE1BX1NFTEVDVCAweDA4ICAKLQorI2RlZmluZSBVQVJUX1JYIDAKKyNkZWZpbmUgVUFSVF9UWCAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBVQVJUX0lFUiAxCisjZGVmaW5lIFVBUlRfSUVSX01TSSAweDA4CisjZGVmaW5lIFVBUlRfSUVSX1JMU0kgMHgwNAorI2RlZmluZSBVQVJUX0lFUl9USFJJIDB4MDIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFVBUlRfSUVSX1JESSAweDAxCisjZGVmaW5lIFVBUlRfSUVSWF9TTEVFUCAweDEwCisjZGVmaW5lIFVBUlRfSUlSIDIKKyNkZWZpbmUgVUFSVF9JSVJfTk9fSU5UIDB4MDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFVBUlRfSUlSX0lEIDB4MDYKKyNkZWZpbmUgVUFSVF9JSVJfTVNJIDB4MDAKKyNkZWZpbmUgVUFSVF9JSVJfVEhSSSAweDAyCisjZGVmaW5lIFVBUlRfSUlSX1JESSAweDA0CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBVQVJUX0lJUl9STFNJIDB4MDYKKyNkZWZpbmUgVUFSVF9GQ1IgMgorI2RlZmluZSBVQVJUX0ZDUl9FTkFCTEVfRklGTyAweDAxCisjZGVmaW5lIFVBUlRfRkNSX0NMRUFSX1JDVlIgMHgwMgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVUFSVF9GQ1JfQ0xFQVJfWE1JVCAweDA0CisjZGVmaW5lIFVBUlRfRkNSX0RNQV9TRUxFQ1QgMHgwOAogI2RlZmluZSBVQVJUX0ZDUl9SX1RSSUdfMDAgMHgwMAogI2RlZmluZSBVQVJUX0ZDUl9SX1RSSUdfMDEgMHg0MAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVUFSVF9GQ1JfUl9UUklHXzEwIDB4ODAKICNkZWZpbmUgVUFSVF9GQ1JfUl9UUklHXzExIDB4YzAKICNkZWZpbmUgVUFSVF9GQ1JfVF9UUklHXzAwIDB4MDAKICNkZWZpbmUgVUFSVF9GQ1JfVF9UUklHXzAxIDB4MTAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFVBUlRfRkNSX1RfVFJJR18xMCAweDIwCiAjZGVmaW5lIFVBUlRfRkNSX1RfVFJJR18xMSAweDMwCi0KLSNkZWZpbmUgVUFSVF9GQ1JfVFJJR0dFUl9NQVNLIDB4QzAgIAotI2RlZmluZSBVQVJUX0ZDUl9UUklHR0VSXzEgMHgwMCAgCi0jZGVmaW5lIFVBUlRfRkNSX1RSSUdHRVJfNCAweDQwICAKLSNkZWZpbmUgVUFSVF9GQ1JfVFJJR0dFUl84IDB4ODAgIAotI2RlZmluZSBVQVJUX0ZDUl9UUklHR0VSXzE0IDB4QzAgIAotCi0jZGVmaW5lIFVBUlRfRkNSNl9SX1RSSUdHRVJfOCAweDAwICAKLSNkZWZpbmUgVUFSVF9GQ1I2X1JfVFJJR0dFUl8xNiAweDQwICAKLSNkZWZpbmUgVUFSVF9GQ1I2X1JfVFJJR0dFUl8yNCAweDgwICAKLSNkZWZpbmUgVUFSVF9GQ1I2X1JfVFJJR0dFUl8yOCAweEMwICAKLSNkZWZpbmUgVUFSVF9GQ1I2X1RfVFJJR0dFUl8xNiAweDAwICAKLSNkZWZpbmUgVUFSVF9GQ1I2X1RfVFJJR0dFUl84IDB4MTAgIAotI2RlZmluZSBVQVJUX0ZDUjZfVF9UUklHR0VSXzI0IDB4MjAgIAotI2RlZmluZSBVQVJUX0ZDUjZfVF9UUklHR0VSXzMwIDB4MzAgIAotI2RlZmluZSBVQVJUX0ZDUjdfNjRCWVRFIDB4MjAgIAotCi0jZGVmaW5lIFVBUlRfTENSIDMgIAotCi0jZGVmaW5lIFVBUlRfTENSX0RMQUIgMHg4MCAgCi0jZGVmaW5lIFVBUlRfTENSX1NCQyAweDQwICAKLSNkZWZpbmUgVUFSVF9MQ1JfU1BBUiAweDIwICAKLSNkZWZpbmUgVUFSVF9MQ1JfRVBBUiAweDEwICAKLSNkZWZpbmUgVUFSVF9MQ1JfUEFSSVRZIDB4MDggIAotI2RlZmluZSBVQVJUX0xDUl9TVE9QIDB4MDQgIAotI2RlZmluZSBVQVJUX0xDUl9XTEVONSAweDAwICAKLSNkZWZpbmUgVUFSVF9MQ1JfV0xFTjYgMHgwMSAgCi0jZGVmaW5lIFVBUlRfTENSX1dMRU43IDB4MDIgIAotI2RlZmluZSBVQVJUX0xDUl9XTEVOOCAweDAzICAKLQotI2RlZmluZSBVQVJUX01DUiA0ICAKLSNkZWZpbmUgVUFSVF9NQ1JfQ0xLU0VMIDB4ODAgIAotI2RlZmluZSBVQVJUX01DUl9UQ1JUTFIgMHg0MCAgCi0jZGVmaW5lIFVBUlRfTUNSX1hPTkFOWSAweDIwICAKLSNkZWZpbmUgVUFSVF9NQ1JfQUZFIDB4MjAgIAotI2RlZmluZSBVQVJUX01DUl9MT09QIDB4MTAgIAotI2RlZmluZSBVQVJUX01DUl9PVVQyIDB4MDggIAotI2RlZmluZSBVQVJUX01DUl9PVVQxIDB4MDQgIAotI2RlZmluZSBVQVJUX01DUl9SVFMgMHgwMiAgCi0jZGVmaW5lIFVBUlRfTUNSX0RUUiAweDAxICAKLQotI2RlZmluZSBVQVJUX0xTUiA1ICAKLSNkZWZpbmUgVUFSVF9MU1JfVEVNVCAweDQwICAKLSNkZWZpbmUgVUFSVF9MU1JfVEhSRSAweDIwICAKLSNkZWZpbmUgVUFSVF9MU1JfQkkgMHgxMCAgCi0jZGVmaW5lIFVBUlRfTFNSX0ZFIDB4MDggIAotI2RlZmluZSBVQVJUX0xTUl9QRSAweDA0ICAKLSNkZWZpbmUgVUFSVF9MU1JfT0UgMHgwMiAgCi0jZGVmaW5lIFVBUlRfTFNSX0RSIDB4MDEgIAotCi0jZGVmaW5lIFVBUlRfTVNSIDYgIAotI2RlZmluZSBVQVJUX01TUl9EQ0QgMHg4MCAgCi0jZGVmaW5lIFVBUlRfTVNSX1JJIDB4NDAgIAotI2RlZmluZSBVQVJUX01TUl9EU1IgMHgyMCAgCi0jZGVmaW5lIFVBUlRfTVNSX0NUUyAweDEwICAKLSNkZWZpbmUgVUFSVF9NU1JfRERDRCAweDA4ICAKLSNkZWZpbmUgVUFSVF9NU1JfVEVSSSAweDA0ICAKLSNkZWZpbmUgVUFSVF9NU1JfRERTUiAweDAyICAKLSNkZWZpbmUgVUFSVF9NU1JfRENUUyAweDAxICAKLSNkZWZpbmUgVUFSVF9NU1JfQU5ZX0RFTFRBIDB4MEYgIAotCi0jZGVmaW5lIFVBUlRfU0NSIDcgIAotCi0jZGVmaW5lIFVBUlRfRExMIDAgIAotI2RlZmluZSBVQVJUX0RMTSAxICAKLQotI2RlZmluZSBVQVJUX0VGUiAyICAKLSNkZWZpbmUgVUFSVF9FRlJfQ1RTIDB4ODAgIAotI2RlZmluZSBVQVJUX0VGUl9SVFMgMHg0MCAgCi0jZGVmaW5lIFVBUlRfRUZSX1NDRCAweDIwICAKLSNkZWZpbmUgVUFSVF9FRlJfRUNCIDB4MTAgIAotCi0jZGVmaW5lIFVBUlRfWE9OMSA0ICAKLSNkZWZpbmUgVUFSVF9YT04yIDUgIAotI2RlZmluZSBVQVJUX1hPRkYxIDYgIAotI2RlZmluZSBVQVJUX1hPRkYyIDcgIAotCi0jZGVmaW5lIFVBUlRfVEk3NTJfVENSIDYgIAotI2RlZmluZSBVQVJUX1RJNzUyX1RMUiA3ICAKLQotI2RlZmluZSBVQVJUX1RSRyAwICAKLQorI2RlZmluZSBVQVJUX0ZDUl9UUklHR0VSX01BU0sgMHhDMAorI2RlZmluZSBVQVJUX0ZDUl9UUklHR0VSXzEgMHgwMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVUFSVF9GQ1JfVFJJR0dFUl80IDB4NDAKKyNkZWZpbmUgVUFSVF9GQ1JfVFJJR0dFUl84IDB4ODAKKyNkZWZpbmUgVUFSVF9GQ1JfVFJJR0dFUl8xNCAweEMwCisjZGVmaW5lIFVBUlRfRkNSNl9SX1RSSUdHRVJfOCAweDAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBVQVJUX0ZDUjZfUl9UUklHR0VSXzE2IDB4NDAKKyNkZWZpbmUgVUFSVF9GQ1I2X1JfVFJJR0dFUl8yNCAweDgwCisjZGVmaW5lIFVBUlRfRkNSNl9SX1RSSUdHRVJfMjggMHhDMAorI2RlZmluZSBVQVJUX0ZDUjZfVF9UUklHR0VSXzE2IDB4MDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFVBUlRfRkNSNl9UX1RSSUdHRVJfOCAweDEwCisjZGVmaW5lIFVBUlRfRkNSNl9UX1RSSUdHRVJfMjQgMHgyMAorI2RlZmluZSBVQVJUX0ZDUjZfVF9UUklHR0VSXzMwIDB4MzAKKyNkZWZpbmUgVUFSVF9GQ1I3XzY0QllURSAweDIwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBVQVJUX0xDUiAzCisjZGVmaW5lIFVBUlRfTENSX0RMQUIgMHg4MAorI2RlZmluZSBVQVJUX0xDUl9TQkMgMHg0MAorI2RlZmluZSBVQVJUX0xDUl9TUEFSIDB4MjAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFVBUlRfTENSX0VQQVIgMHgxMAorI2RlZmluZSBVQVJUX0xDUl9QQVJJVFkgMHgwOAorI2RlZmluZSBVQVJUX0xDUl9TVE9QIDB4MDQKKyNkZWZpbmUgVUFSVF9MQ1JfV0xFTjUgMHgwMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVUFSVF9MQ1JfV0xFTjYgMHgwMQorI2RlZmluZSBVQVJUX0xDUl9XTEVONyAweDAyCisjZGVmaW5lIFVBUlRfTENSX1dMRU44IDB4MDMKKyNkZWZpbmUgVUFSVF9NQ1IgNAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVUFSVF9NQ1JfQ0xLU0VMIDB4ODAKKyNkZWZpbmUgVUFSVF9NQ1JfVENSVExSIDB4NDAKKyNkZWZpbmUgVUFSVF9NQ1JfWE9OQU5ZIDB4MjAKKyNkZWZpbmUgVUFSVF9NQ1JfQUZFIDB4MjAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFVBUlRfTUNSX0xPT1AgMHgxMAorI2RlZmluZSBVQVJUX01DUl9PVVQyIDB4MDgKKyNkZWZpbmUgVUFSVF9NQ1JfT1VUMSAweDA0CisjZGVmaW5lIFVBUlRfTUNSX1JUUyAweDAyCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBVQVJUX01DUl9EVFIgMHgwMQorI2RlZmluZSBVQVJUX0xTUiA1CisjZGVmaW5lIFVBUlRfTFNSX1RFTVQgMHg0MAorI2RlZmluZSBVQVJUX0xTUl9USFJFIDB4MjAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFVBUlRfTFNSX0JJIDB4MTAKKyNkZWZpbmUgVUFSVF9MU1JfRkUgMHgwOAorI2RlZmluZSBVQVJUX0xTUl9QRSAweDA0CisjZGVmaW5lIFVBUlRfTFNSX09FIDB4MDIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFVBUlRfTFNSX0RSIDB4MDEKKyNkZWZpbmUgVUFSVF9NU1IgNgorI2RlZmluZSBVQVJUX01TUl9EQ0QgMHg4MAorI2RlZmluZSBVQVJUX01TUl9SSSAweDQwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBVQVJUX01TUl9EU1IgMHgyMAorI2RlZmluZSBVQVJUX01TUl9DVFMgMHgxMAorI2RlZmluZSBVQVJUX01TUl9ERENEIDB4MDgKKyNkZWZpbmUgVUFSVF9NU1JfVEVSSSAweDA0CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBVQVJUX01TUl9ERFNSIDB4MDIKKyNkZWZpbmUgVUFSVF9NU1JfRENUUyAweDAxCisjZGVmaW5lIFVBUlRfTVNSX0FOWV9ERUxUQSAweDBGCisjZGVmaW5lIFVBUlRfU0NSIDcKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFVBUlRfRExMIDAKKyNkZWZpbmUgVUFSVF9ETE0gMQorI2RlZmluZSBVQVJUX0VGUiAyCisjZGVmaW5lIFVBUlRfRUZSX0NUUyAweDgwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBVQVJUX0VGUl9SVFMgMHg0MAorI2RlZmluZSBVQVJUX0VGUl9TQ0QgMHgyMAorI2RlZmluZSBVQVJUX0VGUl9FQ0IgMHgxMAorI2RlZmluZSBVQVJUX1hPTjEgNAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVUFSVF9YT04yIDUKKyNkZWZpbmUgVUFSVF9YT0ZGMSA2CisjZGVmaW5lIFVBUlRfWE9GRjIgNworI2RlZmluZSBVQVJUX1RJNzUyX1RDUiA2CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBVQVJUX1RJNzUyX1RMUiA3CisjZGVmaW5lIFVBUlRfVFJHIDAKICNkZWZpbmUgVUFSVF9UUkdfMSAweDAxCiAjZGVmaW5lIFVBUlRfVFJHXzQgMHgwNAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVUFSVF9UUkdfOCAweDA4CiAjZGVmaW5lIFVBUlRfVFJHXzE2IDB4MTAKICNkZWZpbmUgVUFSVF9UUkdfMzIgMHgyMAogI2RlZmluZSBVQVJUX1RSR182NCAweDQwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBVQVJUX1RSR185NiAweDYwCiAjZGVmaW5lIFVBUlRfVFJHXzEyMCAweDc4CiAjZGVmaW5lIFVBUlRfVFJHXzEyOCAweDgwCi0KLSNkZWZpbmUgVUFSVF9GQ1RSIDEgIAotI2RlZmluZSBVQVJUX0ZDVFJfUlRTX05PREVMQVkgMHgwMCAgCisjZGVmaW5lIFVBUlRfRkNUUiAxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBVQVJUX0ZDVFJfUlRTX05PREVMQVkgMHgwMAogI2RlZmluZSBVQVJUX0ZDVFJfUlRTXzRERUxBWSAweDAxCiAjZGVmaW5lIFVBUlRfRkNUUl9SVFNfNkRFTEFZIDB4MDIKICNkZWZpbmUgVUFSVF9GQ1RSX1JUU184REVMQVkgMHgwMwotI2RlZmluZSBVQVJUX0ZDVFJfSVJEQSAweDA0ICAKLSNkZWZpbmUgVUFSVF9GQ1RSX1RYX0lOVCAweDA4ICAKLSNkZWZpbmUgVUFSVF9GQ1RSX1RSR0EgMHgwMCAgCi0jZGVmaW5lIFVBUlRfRkNUUl9UUkdCIDB4MTAgIAotI2RlZmluZSBVQVJUX0ZDVFJfVFJHQyAweDIwICAKLSNkZWZpbmUgVUFSVF9GQ1RSX1RSR0QgMHgzMCAgCi0jZGVmaW5lIFVBUlRfRkNUUl9TQ1JfU1dBUCAweDQwICAKLSNkZWZpbmUgVUFSVF9GQ1RSX1JYIDB4MDAgIAotI2RlZmluZSBVQVJUX0ZDVFJfVFggMHg4MCAgCi0KLSNkZWZpbmUgVUFSVF9FTVNSIDcgIAotI2RlZmluZSBVQVJUX0VNU1JfRklGT19DT1VOVCAweDAxICAKLSNkZWZpbmUgVUFSVF9FTVNSX0FMVF9DT1VOVCAweDAyICAKLQotI2RlZmluZSBVQVJUX0lFUl9ETUFFIDB4ODAgIAotI2RlZmluZSBVQVJUX0lFUl9VVUUgMHg0MCAgCi0jZGVmaW5lIFVBUlRfSUVSX05SWkUgMHgyMCAgCi0jZGVmaW5lIFVBUlRfSUVSX1JUT0lFIDB4MTAgIAotCi0jZGVmaW5lIFVBUlRfSUlSX1RPRCAweDA4ICAKLQotI2RlZmluZSBVQVJUX0ZDUl9QWEFSMSAweDAwICAKLSNkZWZpbmUgVUFSVF9GQ1JfUFhBUjggMHg0MCAgCi0jZGVmaW5lIFVBUlRfRkNSX1BYQVIxNiAweDgwICAKLSNkZWZpbmUgVUFSVF9GQ1JfUFhBUjMyIDB4YzAgIAotCi0jZGVmaW5lIFVBUlRfQVNSIDB4MDEgIAotI2RlZmluZSBVQVJUX1JGTCAweDAzICAKLSNkZWZpbmUgVUFSVF9URkwgMHgwNCAgCi0jZGVmaW5lIFVBUlRfSUNSIDB4MDUgIAotCi0jZGVmaW5lIFVBUlRfQUNSIDB4MDAgIAotI2RlZmluZSBVQVJUX0NQUiAweDAxICAKLSNkZWZpbmUgVUFSVF9UQ1IgMHgwMiAgCi0jZGVmaW5lIFVBUlRfQ0tTIDB4MDMgIAotI2RlZmluZSBVQVJUX1RUTCAweDA0ICAKLSNkZWZpbmUgVUFSVF9SVEwgMHgwNSAgCi0jZGVmaW5lIFVBUlRfRkNMIDB4MDYgIAotI2RlZmluZSBVQVJUX0ZDSCAweDA3ICAKLSNkZWZpbmUgVUFSVF9JRDEgMHgwOCAgCi0jZGVmaW5lIFVBUlRfSUQyIDB4MDkgIAotI2RlZmluZSBVQVJUX0lEMyAweDBBICAKLSNkZWZpbmUgVUFSVF9SRVYgMHgwQiAgCi0jZGVmaW5lIFVBUlRfQ1NSIDB4MEMgIAotI2RlZmluZSBVQVJUX05NUiAweDBEICAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFVBUlRfRkNUUl9JUkRBIDB4MDQKKyNkZWZpbmUgVUFSVF9GQ1RSX1RYX0lOVCAweDA4CisjZGVmaW5lIFVBUlRfRkNUUl9UUkdBIDB4MDAKKyNkZWZpbmUgVUFSVF9GQ1RSX1RSR0IgMHgxMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVUFSVF9GQ1RSX1RSR0MgMHgyMAorI2RlZmluZSBVQVJUX0ZDVFJfVFJHRCAweDMwCisjZGVmaW5lIFVBUlRfRkNUUl9TQ1JfU1dBUCAweDQwCisjZGVmaW5lIFVBUlRfRkNUUl9SWCAweDAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBVQVJUX0ZDVFJfVFggMHg4MAorI2RlZmluZSBVQVJUX0VNU1IgNworI2RlZmluZSBVQVJUX0VNU1JfRklGT19DT1VOVCAweDAxCisjZGVmaW5lIFVBUlRfRU1TUl9BTFRfQ09VTlQgMHgwMgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVUFSVF9JRVJfRE1BRSAweDgwCisjZGVmaW5lIFVBUlRfSUVSX1VVRSAweDQwCisjZGVmaW5lIFVBUlRfSUVSX05SWkUgMHgyMAorI2RlZmluZSBVQVJUX0lFUl9SVE9JRSAweDEwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBVQVJUX0lJUl9UT0QgMHgwOAorI2RlZmluZSBVQVJUX0ZDUl9QWEFSMSAweDAwCisjZGVmaW5lIFVBUlRfRkNSX1BYQVI4IDB4NDAKKyNkZWZpbmUgVUFSVF9GQ1JfUFhBUjE2IDB4ODAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFVBUlRfRkNSX1BYQVIzMiAweGMwCisjZGVmaW5lIFVBUlRfQVNSIDB4MDEKKyNkZWZpbmUgVUFSVF9SRkwgMHgwMworI2RlZmluZSBVQVJUX1RGTCAweDA0CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBVQVJUX0lDUiAweDA1CisjZGVmaW5lIFVBUlRfQUNSIDB4MDAKKyNkZWZpbmUgVUFSVF9DUFIgMHgwMQorI2RlZmluZSBVQVJUX1RDUiAweDAyCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBVQVJUX0NLUyAweDAzCisjZGVmaW5lIFVBUlRfVFRMIDB4MDQKKyNkZWZpbmUgVUFSVF9SVEwgMHgwNQorI2RlZmluZSBVQVJUX0ZDTCAweDA2CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBVQVJUX0ZDSCAweDA3CisjZGVmaW5lIFVBUlRfSUQxIDB4MDgKKyNkZWZpbmUgVUFSVF9JRDIgMHgwOQorI2RlZmluZSBVQVJUX0lEMyAweDBBCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBVQVJUX1JFViAweDBCCisjZGVmaW5lIFVBUlRfQ1NSIDB4MEMKKyNkZWZpbmUgVUFSVF9OTVIgMHgwRAogI2RlZmluZSBVQVJUX0NUUiAweEZGCi0KLSNkZWZpbmUgVUFSVF9BQ1JfUlhESVMgMHgwMSAgCi0jZGVmaW5lIFVBUlRfQUNSX1RYRElTIDB4MDIgIAotI2RlZmluZSBVQVJUX0FDUl9EU1JGQyAweDA0ICAKLSNkZWZpbmUgVUFSVF9BQ1JfVExFTkIgMHgyMCAgCi0jZGVmaW5lIFVBUlRfQUNSX0lDUlJEIDB4NDAgIAotI2RlZmluZSBVQVJUX0FDUl9BU1JFTiAweDgwICAKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVUFSVF9BQ1JfUlhESVMgMHgwMQorI2RlZmluZSBVQVJUX0FDUl9UWERJUyAweDAyCisjZGVmaW5lIFVBUlRfQUNSX0RTUkZDIDB4MDQKKyNkZWZpbmUgVUFSVF9BQ1JfVExFTkIgMHgyMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVUFSVF9BQ1JfSUNSUkQgMHg0MAorI2RlZmluZSBVQVJUX0FDUl9BU1JFTiAweDgwCiAjZGVmaW5lIFVBUlRfUlNBX0JBU0UgKC04KQotCi0jZGVmaW5lIFVBUlRfUlNBX01TUiAoKFVBUlRfUlNBX0JBU0UpICsgMCkgIAotCi0jZGVmaW5lIFVBUlRfUlNBX01TUl9TV0FQICgxIDw8IDApICAKLSNkZWZpbmUgVUFSVF9SU0FfTVNSX0ZJRk8gKDEgPDwgMikgIAotI2RlZmluZSBVQVJUX1JTQV9NU1JfRkxPVyAoMSA8PCAzKSAgCi0jZGVmaW5lIFVBUlRfUlNBX01TUl9JVFlQICgxIDw8IDQpICAKLQotI2RlZmluZSBVQVJUX1JTQV9JRVIgKChVQVJUX1JTQV9CQVNFKSArIDEpICAKLQotI2RlZmluZSBVQVJUX1JTQV9JRVJfUnhfRklGT19IICgxIDw8IDApICAKLSNkZWZpbmUgVUFSVF9SU0FfSUVSX1R4X0ZJRk9fSCAoMSA8PCAxKSAgCi0jZGVmaW5lIFVBUlRfUlNBX0lFUl9UeF9GSUZPX0UgKDEgPDwgMikgIAotI2RlZmluZSBVQVJUX1JTQV9JRVJfUnhfVE9VVCAoMSA8PCAzKSAgCi0jZGVmaW5lIFVBUlRfUlNBX0lFUl9USU1FUiAoMSA8PCA0KSAgCi0KLSNkZWZpbmUgVUFSVF9SU0FfU1JSICgoVUFSVF9SU0FfQkFTRSkgKyAyKSAgCi0KLSNkZWZpbmUgVUFSVF9SU0FfU1JSX1R4X0ZJRk9fTkVNUCAoMSA8PCAwKSAgCi0jZGVmaW5lIFVBUlRfUlNBX1NSUl9UeF9GSUZPX05IRkwgKDEgPDwgMSkgIAotI2RlZmluZSBVQVJUX1JTQV9TUlJfVHhfRklGT19ORlVMICgxIDw8IDIpICAKLSNkZWZpbmUgVUFSVF9SU0FfU1JSX1J4X0ZJRk9fTkVNUCAoMSA8PCAzKSAgCi0jZGVmaW5lIFVBUlRfUlNBX1NSUl9SeF9GSUZPX05IRkwgKDEgPDwgNCkgIAotI2RlZmluZSBVQVJUX1JTQV9TUlJfUnhfRklGT19ORlVMICgxIDw8IDUpICAKLSNkZWZpbmUgVUFSVF9SU0FfU1JSX1J4X1RPVVQgKDEgPDwgNikgIAotI2RlZmluZSBVQVJUX1JTQV9TUlJfVElNRVIgKDEgPDwgNykgIAotCi0jZGVmaW5lIFVBUlRfUlNBX0ZSUiAoKFVBUlRfUlNBX0JBU0UpICsgMikgIAotCi0jZGVmaW5lIFVBUlRfUlNBX1RJVlNSICgoVUFSVF9SU0FfQkFTRSkgKyAzKSAgCi0KLSNkZWZpbmUgVUFSVF9SU0FfVENSICgoVUFSVF9SU0FfQkFTRSkgKyA0KSAgCi0KLSNkZWZpbmUgVUFSVF9SU0FfVENSX1NXSVRDSCAoMSA8PCAwKSAgCi0KKyNkZWZpbmUgVUFSVF9SU0FfTVNSICgoVUFSVF9SU0FfQkFTRSkgKyAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVUFSVF9SU0FfTVNSX1NXQVAgKDEgPDwgMCkKKyNkZWZpbmUgVUFSVF9SU0FfTVNSX0ZJRk8gKDEgPDwgMikKKyNkZWZpbmUgVUFSVF9SU0FfTVNSX0ZMT1cgKDEgPDwgMykKKyNkZWZpbmUgVUFSVF9SU0FfTVNSX0lUWVAgKDEgPDwgNCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFVBUlRfUlNBX0lFUiAoKFVBUlRfUlNBX0JBU0UpICsgMSkKKyNkZWZpbmUgVUFSVF9SU0FfSUVSX1J4X0ZJRk9fSCAoMSA8PCAwKQorI2RlZmluZSBVQVJUX1JTQV9JRVJfVHhfRklGT19IICgxIDw8IDEpCisjZGVmaW5lIFVBUlRfUlNBX0lFUl9UeF9GSUZPX0UgKDEgPDwgMikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFVBUlRfUlNBX0lFUl9SeF9UT1VUICgxIDw8IDMpCisjZGVmaW5lIFVBUlRfUlNBX0lFUl9USU1FUiAoMSA8PCA0KQorI2RlZmluZSBVQVJUX1JTQV9TUlIgKChVQVJUX1JTQV9CQVNFKSArIDIpCisjZGVmaW5lIFVBUlRfUlNBX1NSUl9UeF9GSUZPX05FTVAgKDEgPDwgMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFVBUlRfUlNBX1NSUl9UeF9GSUZPX05IRkwgKDEgPDwgMSkKKyNkZWZpbmUgVUFSVF9SU0FfU1JSX1R4X0ZJRk9fTkZVTCAoMSA8PCAyKQorI2RlZmluZSBVQVJUX1JTQV9TUlJfUnhfRklGT19ORU1QICgxIDw8IDMpCisjZGVmaW5lIFVBUlRfUlNBX1NSUl9SeF9GSUZPX05IRkwgKDEgPDwgNCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFVBUlRfUlNBX1NSUl9SeF9GSUZPX05GVUwgKDEgPDwgNSkKKyNkZWZpbmUgVUFSVF9SU0FfU1JSX1J4X1RPVVQgKDEgPDwgNikKKyNkZWZpbmUgVUFSVF9SU0FfU1JSX1RJTUVSICgxIDw8IDcpCisjZGVmaW5lIFVBUlRfUlNBX0ZSUiAoKFVBUlRfUlNBX0JBU0UpICsgMikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFVBUlRfUlNBX1RJVlNSICgoVUFSVF9SU0FfQkFTRSkgKyAzKQorI2RlZmluZSBVQVJUX1JTQV9UQ1IgKChVQVJUX1JTQV9CQVNFKSArIDQpCisjZGVmaW5lIFVBUlRfUlNBX1RDUl9TV0lUQ0ggKDEgPDwgMCkKICNkZWZpbmUgU0VSSUFMX1JTQV9CQVVEX0JBU0UgKDkyMTYwMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNFUklBTF9SU0FfQkFVRF9CQVNFX0xPIChTRVJJQUxfUlNBX0JBVURfQkFTRSAvIDgpCi0KLSNkZWZpbmUgVUFSVF9PTUFQX01EUjEgMHgwOCAgCi0jZGVmaW5lIFVBUlRfT01BUF9NRFIyIDB4MDkgIAotI2RlZmluZSBVQVJUX09NQVBfU0NSIDB4MTAgIAotI2RlZmluZSBVQVJUX09NQVBfU1NSIDB4MTEgIAotI2RlZmluZSBVQVJUX09NQVBfRUJMUiAweDEyICAKLSNkZWZpbmUgVUFSVF9PTUFQX09TQ18xMk1fU0VMIDB4MTMgIAotI2RlZmluZSBVQVJUX09NQVBfTVZFUiAweDE0ICAKLSNkZWZpbmUgVUFSVF9PTUFQX1NZU0MgMHgxNSAgCi0jZGVmaW5lIFVBUlRfT01BUF9TWVNTIDB4MTYgIAotCisjZGVmaW5lIFVBUlRfT01BUF9NRFIxIDB4MDgKKyNkZWZpbmUgVUFSVF9PTUFQX01EUjIgMHgwOQorI2RlZmluZSBVQVJUX09NQVBfU0NSIDB4MTAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFVBUlRfT01BUF9TU1IgMHgxMQorI2RlZmluZSBVQVJUX09NQVBfRUJMUiAweDEyCisjZGVmaW5lIFVBUlRfT01BUF9PU0NfMTJNX1NFTCAweDEzCisjZGVmaW5lIFVBUlRfT01BUF9NVkVSIDB4MTQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFVBUlRfT01BUF9TWVNDIDB4MTUKKyNkZWZpbmUgVUFSVF9PTUFQX1NZU1MgMHgxNgogI2VuZGlmCi0KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9zZXJpby5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3NlcmlvLmgKaW5kZXggN2YwNDk4Ny4uNWM3YzNhOCAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3NlcmlvLmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3NlcmlvLmgKQEAgLTcsNTQgKzcsNjUgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9TRVJJT19ICiAjZGVmaW5lIF9TRVJJT19ICi0KICNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgotCiAjZGVmaW5lIFNQSU9DU1RZUEUgX0lPVygncScsIDB4MDEsIHVuc2lnbmVkIGxvbmcpCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNFUklPX1RJTUVPVVQgMQogI2RlZmluZSBTRVJJT19QQVJJVFkgMgogI2RlZmluZSBTRVJJT19GUkFNRSA0Ci0KICNkZWZpbmUgU0VSSU9fWFQgMHgwMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU0VSSU9fODA0MiAweDAxCiAjZGVmaW5lIFNFUklPX1JTMjMyIDB4MDIKICNkZWZpbmUgU0VSSU9fSElMX01MQyAweDAzCiAjZGVmaW5lIFNFUklPX1BTX1BTVEhSVSAweDA1CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTRVJJT184MDQyX1hMIDB4MDYKLQogI2RlZmluZSBTRVJJT19VTktOT1dOIDB4MDAKICNkZWZpbmUgU0VSSU9fTVNDIDB4MDEKICNkZWZpbmUgU0VSSU9fU1VOIDB4MDIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNFUklPX01TIDB4MDMKICNkZWZpbmUgU0VSSU9fTVAgMHgwNAogI2RlZmluZSBTRVJJT19NWiAweDA1CiAjZGVmaW5lIFNFUklPX01aUCAweDA2CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTRVJJT19NWlBQIDB4MDcKICNkZWZpbmUgU0VSSU9fVlNYWFhBQSAweDA4CiAjZGVmaW5lIFNFUklPX1NVTktCRCAweDEwCiAjZGVmaW5lIFNFUklPX1dBUlJJT1IgMHgxOAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU0VSSU9fU1BBQ0VPUkIgMHgxOQogI2RlZmluZSBTRVJJT19NQUdFTExBTiAweDFhCiAjZGVmaW5lIFNFUklPX1NQQUNFQkFMTCAweDFiCiAjZGVmaW5lIFNFUklPX0dVTlpFIDB4MWMKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNFUklPX0lGT1JDRSAweDFkCiAjZGVmaW5lIFNFUklPX1NUSU5HRVIgMHgxZQogI2RlZmluZSBTRVJJT19ORVdUT04gMHgxZgogI2RlZmluZSBTRVJJT19TVE9XQVdBWSAweDIwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTRVJJT19IMzYwMCAweDIxCiAjZGVmaW5lIFNFUklPX1BTMlNFUiAweDIyCiAjZGVmaW5lIFNFUklPX1RXSURLQkQgMHgyMwogI2RlZmluZSBTRVJJT19UV0lESk9ZIDB4MjQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNFUklPX0hJTCAweDI1CiAjZGVmaW5lIFNFUklPX1NORVMyMzIgMHgyNgogI2RlZmluZSBTRVJJT19TRU1URUNIIDB4MjcKICNkZWZpbmUgU0VSSU9fTEtLQkQgMHgyOAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU0VSSU9fRUxPIDB4MjkKICNkZWZpbmUgU0VSSU9fTUlDUk9UT1VDSCAweDMwCi0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3NmaDc3NDMuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9zZmg3NzQzLmgKaW5kZXggYjZjMzYzZC4uOTM4Y2VhNCAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3NmaDc3NDMuaAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc2ZoNzc0My5oCkBAIC03LDE2ICs3LDIwIEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfTElOVVhfU0ZINzc0M19IXwogI2RlZmluZSBfTElOVVhfU0ZINzc0M19IXwotCiAjaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KLQogI2RlZmluZSBTRkg3NzQzX0lPIDB4QTIKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU0ZINzc0M19JT0NUTF9HRVRfRU5BQkxFIF9JT1IoU0ZINzc0M19JTywgMHgwMCwgY2hhcikKICNkZWZpbmUgU0ZINzc0M19JT0NUTF9TRVRfRU5BQkxFIF9JT1coU0ZINzc0M19JTywgMHgwMSwgY2hhcikKLQogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc2htLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc2htLmgKaW5kZXggYTcwNTZkYi4uZTk5MDBjYSAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3NobS5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9zaG0uaApAQCAtNyw2OCArNyw3NSBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX0xJTlVYX1NITV9IXwogI2RlZmluZSBfTElOVVhfU0hNX0hfCi0KICNpbmNsdWRlIDxsaW51eC9pcGMuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNpbmNsdWRlIDxhc20vcGFnZS5oPgotCi0jZGVmaW5lIFNITU1BWCAweDIwMDAwMDAgIAotI2RlZmluZSBTSE1NSU4gMSAgCi0jZGVmaW5lIFNITU1OSSA0MDk2ICAKLSNkZWZpbmUgU0hNQUxMIChTSE1NQVgvUEFHRV9TSVpFKihTSE1NTkkvMTYpKSAgCi0jZGVmaW5lIFNITVNFRyBTSE1NTkkgIAotCisjZGVmaW5lIFNITU1BWCAweDIwMDAwMDAKKyNkZWZpbmUgU0hNTUlOIDEKKyNkZWZpbmUgU0hNTU5JIDQwOTYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFNITUFMTCAoU0hNTUFYL1BBR0VfU0laRSooU0hNTU5JLzE2KSkKKyNkZWZpbmUgU0hNU0VHIFNITU1OSQogI2luY2x1ZGUgPGFzbS9zaG1wYXJhbS5oPgotCiBzdHJ1Y3Qgc2htaWRfZHMgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgaXBjX3Blcm0gc2htX3Blcm07CiAgaW50IHNobV9zZWdzejsKICBfX2tlcm5lbF90aW1lX3Qgc2htX2F0aW1lOwogIF9fa2VybmVsX3RpbWVfdCBzaG1fZHRpbWU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fa2VybmVsX3RpbWVfdCBzaG1fY3RpbWU7CiAgX19rZXJuZWxfaXBjX3BpZF90IHNobV9jcGlkOwogIF9fa2VybmVsX2lwY19waWRfdCBzaG1fbHBpZDsKICB1bnNpZ25lZCBzaG9ydCBzaG1fbmF0dGNoOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBzaG9ydCBzaG1fdW51c2VkOwogIHZvaWQgKnNobV91bnVzZWQyOwogIHZvaWQgKnNobV91bnVzZWQzOwogfTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNpbmNsdWRlIDxhc20vc2htYnVmLmg+Ci0KLSNkZWZpbmUgU0hNX1IgMDQwMCAgCi0jZGVmaW5lIFNITV9XIDAyMDAgIAotCi0jZGVmaW5lIFNITV9SRE9OTFkgMDEwMDAwICAKLSNkZWZpbmUgU0hNX1JORCAwMjAwMDAgIAotI2RlZmluZSBTSE1fUkVNQVAgMDQwMDAwICAKLSNkZWZpbmUgU0hNX0VYRUMgMDEwMDAwMCAgCi0KKyNkZWZpbmUgU0hNX1IgMDQwMAorI2RlZmluZSBTSE1fVyAwMjAwCisjZGVmaW5lIFNITV9SRE9OTFkgMDEwMDAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBTSE1fUk5EIDAyMDAwMAorI2RlZmluZSBTSE1fUkVNQVAgMDQwMDAwCisjZGVmaW5lIFNITV9FWEVDIDAxMDAwMDAKICNkZWZpbmUgU0hNX0xPQ0sgMTEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNITV9VTkxPQ0sgMTIKLQogI2RlZmluZSBTSE1fU1RBVCAxMwogI2RlZmluZSBTSE1fSU5GTyAxNAotCiBzdHJ1Y3Qgc2htaW5mbyB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGludCBzaG1tYXg7CiAgaW50IHNobW1pbjsKICBpbnQgc2htbW5pOwogIGludCBzaG1zZWc7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGludCBzaG1hbGw7CiB9OwotCiBzdHJ1Y3Qgc2htX2luZm8gewogIGludCB1c2VkX2lkczsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgbG9uZyBzaG1fdG90OwogIHVuc2lnbmVkIGxvbmcgc2htX3JzczsKICB1bnNpZ25lZCBsb25nIHNobV9zd3A7CiAgdW5zaWduZWQgbG9uZyBzd2FwX2F0dGVtcHRzOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBsb25nIHN3YXBfc3VjY2Vzc2VzOwogfTsKLQogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc2lnbmFsLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc2lnbmFsLmgKaW5kZXggNDU3N2U1NC4uNDY5N2VhZCAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3NpZ25hbC5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9zaWduYWwuaApAQCAtNywxMiArNywxOCBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX0xJTlVYX1NJR05BTF9ICiAjZGVmaW5lIF9MSU5VWF9TSUdOQUxfSAotCiAjaW5jbHVkZSA8YXNtL3NpZ25hbC5oPgogI2luY2x1ZGUgPGFzbS9zaWdpbmZvLmg+Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9zaWduYWxmZC5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3NpZ25hbGZkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTA2NDE5MgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9zaWduYWxmZC5oCkBAIC0wLDAgKzEsNTEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0xJTlVYX1NJR05BTEZEX0gKKyNkZWZpbmUgX0xJTlVYX1NJR05BTEZEX0gKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2ZjbnRsLmg+CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBTRkRfQ0xPRVhFQyBPX0NMT0VYRUMKKyNkZWZpbmUgU0ZEX05PTkJMT0NLIE9fTk9OQkxPQ0sKK3N0cnVjdCBzaWduYWxmZF9zaWdpbmZvIHsKKyBfX3UzMiBzc2lfc2lnbm87CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fczMyIHNzaV9lcnJubzsKKyBfX3MzMiBzc2lfY29kZTsKKyBfX3UzMiBzc2lfcGlkOworIF9fdTMyIHNzaV91aWQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fczMyIHNzaV9mZDsKKyBfX3UzMiBzc2lfdGlkOworIF9fdTMyIHNzaV9iYW5kOworIF9fdTMyIHNzaV9vdmVycnVuOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UzMiBzc2lfdHJhcG5vOworIF9fczMyIHNzaV9zdGF0dXM7CisgX19zMzIgc3NpX2ludDsKKyBfX3U2NCBzc2lfcHRyOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3U2NCBzc2lfdXRpbWU7CisgX191NjQgc3NpX3N0aW1lOworIF9fdTY0IHNzaV9hZGRyOworIF9fdTE2IHNzaV9hZGRyX2xzYjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191OCBfX3BhZFs0Nl07Cit9OworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc2tidWZmLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc2tidWZmLmgKaW5kZXggODIxNDBhNi4uYTM1YWJmOSAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3NrYnVmZi5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9za2J1ZmYuaApAQCAtNywxNTggKzcsMTYwIEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfTElOVVhfU0tCVUZGX0gKICNkZWZpbmUgX0xJTlVYX1NLQlVGRl9ICi0KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNpbmNsdWRlIDxsaW51eC90aW1lLmg+CiAjaW5jbHVkZSA8bGludXgvY2FjaGUuaD4KLQogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KICNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L2hpZ2htZW0uaD4KICNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2luY2x1ZGUgPGxpbnV4L25ldC5oPgogI2luY2x1ZGUgPGxpbnV4L3RleHRzZWFyY2guaD4KICNpbmNsdWRlIDxuZXQvY2hlY2tzdW0uaD4KICNpbmNsdWRlIDxsaW51eC9kbWFlbmdpbmUuaD4KLQotI2RlZmluZSBIQVZFX0FMTE9DX1NLQiAgCi0jZGVmaW5lIEhBVkVfQUxJR05BQkxFX1NLQiAgCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEhBVkVfQUxMT0NfU0tCCisjZGVmaW5lIEhBVkVfQUxJR05BQkxFX1NLQgogI2RlZmluZSBDSEVDS1NVTV9OT05FIDAKICNkZWZpbmUgQ0hFQ0tTVU1fSFcgMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQ0hFQ0tTVU1fVU5ORUNFU1NBUlkgMgotCiAjZGVmaW5lIFNLQl9EQVRBX0FMSUdOKFgpICgoKFgpICsgKFNNUF9DQUNIRV9CWVRFUyAtIDEpKSAmICAgfihTTVBfQ0FDSEVfQllURVMgLSAxKSkKICNkZWZpbmUgU0tCX01BWF9PUkRFUihYLCBPUkRFUikgKCgoUEFHRV9TSVpFIDw8IChPUkRFUikpIC0gKFgpIC0gICBzaXplb2Yoc3RydWN0IHNrYl9zaGFyZWRfaW5mbykpICYgICB+KFNNUF9DQUNIRV9CWVRFUyAtIDEpKQogI2RlZmluZSBTS0JfTUFYX0hFQUQoWCkgKFNLQl9NQVhfT1JERVIoKFgpLCAwKSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNLQl9NQVhfQUxMT0MgKFNLQl9NQVhfT1JERVIoMCwgMikpCi0KIHN0cnVjdCBuZXRfZGV2aWNlOwotCiBzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHsKLQogIHN0cnVjdCBza19idWZmICpuZXh0OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3Qgc2tfYnVmZiAqcHJldjsKLQogIF9fdTMyIHFsZW47CiAgc3BpbmxvY2tfdCBsb2NrOwogfTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBza19idWZmOwotCiAjZGVmaW5lIE1BWF9TS0JfRlJBR1MgKDY1NTM2L1BBR0VfU0laRSArIDIpCi0KIHR5cGVkZWYgc3RydWN0IHNrYl9mcmFnX3N0cnVjdCBza2JfZnJhZ190OwotCiBzdHJ1Y3Qgc2tiX2ZyYWdfc3RydWN0IHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IHBhZ2UgKnBhZ2U7CiAgX191MTYgcGFnZV9vZmZzZXQ7CiAgX191MTYgc2l6ZTsKIH07Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3Qgc2tiX3NoYXJlZF9pbmZvIHsKICBhdG9taWNfdCBkYXRhcmVmOwogIHVuc2lnbmVkIHNob3J0IG5yX2ZyYWdzOwogIHVuc2lnbmVkIHNob3J0IGdzb19zaXplOwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIHNob3J0IGdzb19zZWdzOwogIHVuc2lnbmVkIHNob3J0IGdzb190eXBlOwogIHVuc2lnbmVkIGludCBpcDZfZnJhZ19pZDsKICBzdHJ1Y3Qgc2tfYnVmZiAqZnJhZ19saXN0OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBza2JfZnJhZ190IGZyYWdzW01BWF9TS0JfRlJBR1NdOwogfTsKLQogI2RlZmluZSBTS0JfREFUQVJFRl9TSElGVCAxNgogI2RlZmluZSBTS0JfREFUQVJFRl9NQVNLICgoMSA8PCBTS0JfREFUQVJFRl9TSElGVCkgLSAxKQotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IHNrYl90aW1ldmFsIHsKICB1MzIgb2ZmX3NlYzsKICB1MzIgb2ZmX3VzZWM7CiB9OwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogZW51bSB7CiAgU0tCX0ZDTE9ORV9VTkFWQUlMQUJMRSwKICBTS0JfRkNMT05FX09SSUcsCiAgU0tCX0ZDTE9ORV9DTE9ORSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwotCiBlbnVtIHsKICBTS0JfR1NPX1RDUFY0ID0gMSA8PCAwLAogIFNLQl9HU09fVURQID0gMSA8PCAxLAotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFNLQl9HU09fRE9ER1kgPSAxIDw8IDIsCi0KICBTS0JfR1NPX1RDUF9FQ04gPSAxIDw8IDMsCi0KICBTS0JfR1NPX1RDUFY2ID0gMSA8PCA0LAogfTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBza19idWZmIHsKLQogIHN0cnVjdCBza19idWZmICpuZXh0OwogIHN0cnVjdCBza19idWZmICpwcmV2OwotCiAgc3RydWN0IHNvY2sgKnNrOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3Qgc2tiX3RpbWV2YWwgdHN0YW1wOwogIHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAgc3RydWN0IG5ldF9kZXZpY2UgKmlucHV0X2RldjsKLQogIHVuaW9uIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IHRjcGhkciAqdGg7CiAgc3RydWN0IHVkcGhkciAqdWg7CiAgc3RydWN0IGljbXBoZHIgKmljbXBoOwogIHN0cnVjdCBpZ21waGRyICppZ21waDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IGlwaGRyICppcGlwaDsKICBzdHJ1Y3QgaXB2NmhkciAqaXB2Nmg7CiAgdW5zaWduZWQgY2hhciAqcmF3OwogIH0gaDsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bmlvbiB7CiAgc3RydWN0IGlwaGRyICppcGg7CiAgc3RydWN0IGlwdjZoZHIgKmlwdjZoOwogIHN0cnVjdCBhcnBoZHIgKmFycGg7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGNoYXIgKnJhdzsKICB9IG5oOwotCiAgdW5pb24gewogIHVuc2lnbmVkIGNoYXIgKnJhdzsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgfSBtYWM7Ci0KICBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3Q7CiAgc3RydWN0IHNlY19wYXRoICpzcDsKLQogIGNoYXIgY2JbNDhdOwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGludCBsZW4sCiAgZGF0YV9sZW4sCiAgbWFjX2xlbiwKICBjc3VtOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBwcmlvcml0eTsKICBfX3U4IGxvY2FsX2RmOjEsCiAgY2xvbmVkOjEsCiAgaXBfc3VtbWVkOjIsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIG5vaGRyOjEsCiAgbmZjdGluZm86MzsKICBfX3U4IHBrdF90eXBlOjMsCiAgZmNsb25lOjIsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGlwdnNfcHJvcGVydHk6MTsKICBfX2JlMTYgcHJvdG9jb2w7Ci0KICB2b2lkICgqZGVzdHJ1Y3Rvcikoc3RydWN0IHNrX2J1ZmYgKnNrYik7Ci0KICB1bnNpZ25lZCBpbnQgdHJ1ZXNpemU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGF0b21pY190IHVzZXJzOwogIHVuc2lnbmVkIGNoYXIgKmhlYWQsCiAgKmRhdGEsCiAgKnRhaWwsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogICplbmQ7CiB9OwotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9zbGFiLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc2xhYi5oCmluZGV4IGYxNjVhOTMuLmYzYzE0MDggMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9zbGFiLmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3NsYWIuaApAQCAtNyw5ICs3LDE1IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfTElOVVhfU0xBQl9ICiAjZGVmaW5lIF9MSU5VWF9TTEFCX0gKLQogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc21iLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc21iLmgKaW5kZXggNzJjODk2Ny4uNjhlYzg4YiAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3NtYi5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9zbWIuaApAQCAtNyw1NSArNyw2MCBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX0xJTlVYX1NNQl9ICiAjZGVmaW5lIF9MSU5VWF9TTUJfSAotCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLQogZW51bSBzbWJfcHJvdG9jb2wgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBTTUJfUFJPVE9DT0xfTk9ORSwKICBTTUJfUFJPVE9DT0xfQ09SRSwKICBTTUJfUFJPVE9DT0xfQ09SRVBMVVMsCiAgU01CX1BST1RPQ09MX0xBTk1BTjEsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFNNQl9QUk9UT0NPTF9MQU5NQU4yLAogIFNNQl9QUk9UT0NPTF9OVDEKIH07Ci0KIGVudW0gc21iX2Nhc2VfaG5kbCB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFNNQl9DQVNFX0RFRkFVTFQsCiAgU01CX0NBU0VfTE9XRVIsCiAgU01CX0NBU0VfVVBQRVIKIH07Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3Qgc21iX2Rza2F0dHIgewogIF9fdTE2IHRvdGFsOwogIF9fdTE2IGFsbG9jYmxvY2tzOwogIF9fdTE2IGJsb2Nrc2l6ZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MTYgZnJlZTsKIH07Ci0KIHN0cnVjdCBzbWJfY29ubl9vcHQgewotCiAgdW5zaWduZWQgaW50IGZkOwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGVudW0gc21iX3Byb3RvY29sIHByb3RvY29sOwogIGVudW0gc21iX2Nhc2VfaG5kbCBjYXNlX2hhbmRsaW5nOwotCiAgX191MzIgbWF4X3htaXQ7CiAgX191MTYgc2VydmVyX3VpZDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MTYgdGlkOwotCiAgX191MTYgc2VjbW9kZTsKICBfX3UxNiBtYXhtdXg7CiAgX191MTYgbWF4dmNzOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UxNiByYXdtb2RlOwogIF9fdTMyIHNlc3NrZXk7Ci0KICBfX3UzMiBtYXhyYXc7CiAgX191MzIgY2FwYWJpbGl0aWVzOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3MxNiBzZXJ2ZXJ6b25lOwogfTsKLQogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc21wLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc21wLmgKaW5kZXggYWI0OTgyZC4uNjE1ZjMyYSAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3NtcC5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9zbXAuaApAQCAtNywyMCArNywyOCBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX19MSU5VWF9TTVBfSAogI2RlZmluZSBfX0xJTlVYX1NNUF9ICi0KICNkZWZpbmUgcmF3X3NtcF9wcm9jZXNzb3JfaWQoKSAwCiAjZGVmaW5lIGhhcmRfc21wX3Byb2Nlc3Nvcl9pZCgpIDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIHNtcF9jYWxsX2Z1bmN0aW9uKGZ1bmMsaW5mbyxyZXRyeSx3YWl0KSAodXBfc21wX2NhbGxfZnVuY3Rpb24oKSkKICNkZWZpbmUgb25fZWFjaF9jcHUoZnVuYyxpbmZvLHJldHJ5LHdhaXQpICAgKHsgICBsb2NhbF9pcnFfZGlzYWJsZSgpOyAgIGZ1bmMoaW5mbyk7ICAgbG9jYWxfaXJxX2VuYWJsZSgpOyAgIDA7ICAgfSkKICNkZWZpbmUgbnVtX2Jvb3RpbmdfY3B1cygpIDEKICNkZWZpbmUgc21wX3ByZXBhcmVfYm9vdF9jcHUoKSBkbyB7fSB3aGlsZSAoMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIHNtcF9wcm9jZXNzb3JfaWQoKSByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpCiAjZGVmaW5lIGdldF9jcHUoKSAoeyBwcmVlbXB0X2Rpc2FibGUoKTsgc21wX3Byb2Nlc3Nvcl9pZCgpOyB9KQogI2RlZmluZSBwdXRfY3B1KCkgcHJlZW1wdF9lbmFibGUoKQogI2RlZmluZSBwdXRfY3B1X25vX3Jlc2NoZWQoKSBwcmVlbXB0X2VuYWJsZV9ub19yZXNjaGVkKCkKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3NtcF9sb2NrLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc21wX2xvY2suaAppbmRleCA1MjNhOTcwLi4zNTllNzJmIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc21wX2xvY2suaAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc21wX2xvY2suaApAQCAtNywxNSArNywyMiBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX19MSU5VWF9TTVBMT0NLX0gKICNkZWZpbmUgX19MSU5VWF9TTVBMT0NLX0gKLQogI2RlZmluZSBsb2NrX2tlcm5lbCgpIGRvIHsgfSB3aGlsZSgwKQogI2RlZmluZSB1bmxvY2tfa2VybmVsKCkgZG8geyB9IHdoaWxlKDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSByZWxlYXNlX2tlcm5lbF9sb2NrKHRhc2spIGRvIHsgfSB3aGlsZSgwKQogI2RlZmluZSByZWFjcXVpcmVfa2VybmVsX2xvY2sodGFzaykgMAogI2RlZmluZSBrZXJuZWxfbG9ja2VkKCkgMQotCiAjZW5kaWYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc29ja2V0LmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc29ja2V0LmgKaW5kZXggYzMwZGFlMC4uZDFjYmFmNCAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3NvY2tldC5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9zb2NrZXQuaApAQCAtNywyMjMgKzcsMjQgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9MSU5VWF9TT0NLRVRfSAogI2RlZmluZSBfTElOVVhfU09DS0VUX0gKLQotI2RlZmluZSBfS19TU19NQVhTSVpFIDEyOCAgCisjZGVmaW5lIF9LX1NTX01BWFNJWkUgMTI4CiAjZGVmaW5lIF9LX1NTX0FMSUdOU0laRSAoX19hbGlnbm9mX18gKHN0cnVjdCBzb2NrYWRkciAqKSkKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgX19rZXJuZWxfc2FfZmFtaWx5X3Q7CiBzdHJ1Y3QgX19rZXJuZWxfc29ja2FkZHJfc3RvcmFnZSB7Ci0gdW5zaWduZWQgc2hvcnQgc3NfZmFtaWx5OwotCisgX19rZXJuZWxfc2FfZmFtaWx5X3Qgc3NfZmFtaWx5OwogIGNoYXIgX19kYXRhW19LX1NTX01BWFNJWkUgLSBzaXplb2YodW5zaWduZWQgc2hvcnQpXTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH0gX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQoX0tfU1NfQUxJR05TSVpFKSkpOwotCi0jaWYgIWRlZmluZWQoX19HTElCQ19fKSB8fCBfX0dMSUJDX18gPCAyCi0KLSNpbmNsdWRlIDxhc20vc29ja2V0Lmg+ICAKLSNpbmNsdWRlIDxsaW51eC9zb2NraW9zLmg+ICAKLSNpbmNsdWRlIDxsaW51eC91aW8uaD4gIAotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+ICAKLSNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPiAgCi0KLXR5cGVkZWYgdW5zaWduZWQgc2hvcnQgc2FfZmFtaWx5X3Q7Ci0KLXN0cnVjdCBzb2NrYWRkciB7Ci0gc2FfZmFtaWx5X3Qgc2FfZmFtaWx5OwotIGNoYXIgc2FfZGF0YVsxNF07Ci19OwotCi1zdHJ1Y3QgbGluZ2VyIHsKLSBpbnQgbF9vbm9mZjsKLSBpbnQgbF9saW5nZXI7Ci19OwotCi0jZGVmaW5lIHNvY2thZGRyX3N0b3JhZ2UgX19rZXJuZWxfc29ja2FkZHJfc3RvcmFnZQotCi1zdHJ1Y3QgbXNnaGRyIHsKLSB2b2lkICogbXNnX25hbWU7Ci0gaW50IG1zZ19uYW1lbGVuOwotIHN0cnVjdCBpb3ZlYyAqIG1zZ19pb3Y7Ci0gX19rZXJuZWxfc2l6ZV90IG1zZ19pb3ZsZW47Ci0gdm9pZCAqIG1zZ19jb250cm9sOwotIF9fa2VybmVsX3NpemVfdCBtc2dfY29udHJvbGxlbjsKLSB1bnNpZ25lZCBtc2dfZmxhZ3M7Ci19OwotCi1zdHJ1Y3QgY21zZ2hkciB7Ci0gX19rZXJuZWxfc2l6ZV90IGNtc2dfbGVuOwotIGludCBjbXNnX2xldmVsOwotIGludCBjbXNnX3R5cGU7Ci19OwotCi0jZGVmaW5lIF9fQ01TR19OWFRIRFIoY3RsLCBsZW4sIGNtc2cpIF9fY21zZ19ueHRoZHIoKGN0bCksKGxlbiksKGNtc2cpKQotI2RlZmluZSBDTVNHX05YVEhEUihtaGRyLCBjbXNnKSBjbXNnX254dGhkcigobWhkciksIChjbXNnKSkKLQotI2RlZmluZSBDTVNHX0FMSUdOKGxlbikgKCAoKGxlbikrc2l6ZW9mKGxvbmcpLTEpICYgfihzaXplb2YobG9uZyktMSkgKQotCi0jZGVmaW5lIENNU0dfREFUQShjbXNnKSAoKHZvaWQgKikoKGNoYXIgKikoY21zZykgKyBDTVNHX0FMSUdOKHNpemVvZihzdHJ1Y3QgY21zZ2hkcikpKSkKLSNkZWZpbmUgQ01TR19TUEFDRShsZW4pIChDTVNHX0FMSUdOKHNpemVvZihzdHJ1Y3QgY21zZ2hkcikpICsgQ01TR19BTElHTihsZW4pKQotI2RlZmluZSBDTVNHX0xFTihsZW4pIChDTVNHX0FMSUdOKHNpemVvZihzdHJ1Y3QgY21zZ2hkcikpICsgKGxlbikpCi0KLSNkZWZpbmUgX19DTVNHX0ZJUlNUSERSKGN0bCxsZW4pICgobGVuKSA+PSBzaXplb2Yoc3RydWN0IGNtc2doZHIpID8gICAoc3RydWN0IGNtc2doZHIgKikoY3RsKSA6ICAgKHN0cnVjdCBjbXNnaGRyICopTlVMTCkKLSNkZWZpbmUgQ01TR19GSVJTVEhEUihtc2cpIF9fQ01TR19GSVJTVEhEUigobXNnKS0+bXNnX2NvbnRyb2wsIChtc2cpLT5tc2dfY29udHJvbGxlbikKLSNkZWZpbmUgQ01TR19PSyhtaGRyLCBjbXNnKSAoKGNtc2cpLT5jbXNnX2xlbiA+PSBzaXplb2Yoc3RydWN0IGNtc2doZHIpICYmICAgKGNtc2cpLT5jbXNnX2xlbiA8PSAodW5zaWduZWQgbG9uZykgICAoKG1oZHIpLT5tc2dfY29udHJvbGxlbiAtICAgKChjaGFyICopKGNtc2cpIC0gKGNoYXIgKikobWhkciktPm1zZ19jb250cm9sKSkpCi0KLSNpZmRlZiBfX0dOVUNfXwotI2RlZmluZSBfX0tJTkxJTkUgc3RhdGljIF9faW5saW5lX18KLSNlbGlmIGRlZmluZWQoX19jcGx1c3BsdXMpCi0jZGVmaW5lIF9fS0lOTElORSBzdGF0aWMgaW5saW5lCi0jZWxzZQotI2RlZmluZSBfX0tJTkxJTkUgc3RhdGljCi0jZW5kaWYKLQotX19LSU5MSU5FIHN0cnVjdCBjbXNnaGRyICogX19jbXNnX254dGhkcih2b2lkICpfX2N0bCwgX19rZXJuZWxfc2l6ZV90IF9fc2l6ZSwKLSBzdHJ1Y3QgY21zZ2hkciAqX19jbXNnKQotewotIHN0cnVjdCBjbXNnaGRyICogX19wdHI7Ci0KLSBfX3B0ciA9IChzdHJ1Y3QgY21zZ2hkciopKCgodW5zaWduZWQgY2hhciAqKSBfX2Ntc2cpICsgQ01TR19BTElHTihfX2Ntc2ctPmNtc2dfbGVuKSk7Ci0gaWYgKCh1bnNpZ25lZCBsb25nKSgoY2hhciopKF9fcHRyKzEpIC0gKGNoYXIgKikgX19jdGwpID4gX19zaXplKQotIHJldHVybiAoc3RydWN0IGNtc2doZHIgKikwOwotCi0gcmV0dXJuIF9fcHRyOwotfQotCi1fX0tJTkxJTkUgc3RydWN0IGNtc2doZHIgKiBjbXNnX254dGhkciAoc3RydWN0IG1zZ2hkciAqX19tc2csIHN0cnVjdCBjbXNnaGRyICpfX2Ntc2cpCi17Ci0gcmV0dXJuIF9fY21zZ19ueHRoZHIoX19tc2ctPm1zZ19jb250cm9sLCBfX21zZy0+bXNnX2NvbnRyb2xsZW4sIF9fY21zZyk7Ci19Ci0KLSNkZWZpbmUgU0NNX1JJR0hUUyAweDAxICAKLSNkZWZpbmUgU0NNX0NSRURFTlRJQUxTIDB4MDIgIAotI2RlZmluZSBTQ01fU0VDVVJJVFkgMHgwMyAgCi0KLXN0cnVjdCB1Y3JlZCB7Ci0gX191MzIgcGlkOwotIF9fdTMyIHVpZDsKLSBfX3UzMiBnaWQ7Ci19OwotCi0jZGVmaW5lIEFGX1VOU1BFQyAwCi0jZGVmaW5lIEFGX1VOSVggMSAgCi0jZGVmaW5lIEFGX0xPQ0FMIDEgIAotI2RlZmluZSBBRl9JTkVUIDIgIAotI2RlZmluZSBBRl9BWDI1IDMgIAotI2RlZmluZSBBRl9JUFggNCAgCi0jZGVmaW5lIEFGX0FQUExFVEFMSyA1ICAKLSNkZWZpbmUgQUZfTkVUUk9NIDYgIAotI2RlZmluZSBBRl9CUklER0UgNyAgCi0jZGVmaW5lIEFGX0FUTVBWQyA4ICAKLSNkZWZpbmUgQUZfWDI1IDkgIAotI2RlZmluZSBBRl9JTkVUNiAxMCAgCi0jZGVmaW5lIEFGX1JPU0UgMTEgIAotI2RlZmluZSBBRl9ERUNuZXQgMTIgIAotI2RlZmluZSBBRl9ORVRCRVVJIDEzICAKLSNkZWZpbmUgQUZfU0VDVVJJVFkgMTQgIAotI2RlZmluZSBBRl9LRVkgMTUgIAotI2RlZmluZSBBRl9ORVRMSU5LIDE2Ci0jZGVmaW5lIEFGX1JPVVRFIEFGX05FVExJTksgIAotI2RlZmluZSBBRl9QQUNLRVQgMTcgIAotI2RlZmluZSBBRl9BU0ggMTggIAotI2RlZmluZSBBRl9FQ09ORVQgMTkgIAotI2RlZmluZSBBRl9BVE1TVkMgMjAgIAotI2RlZmluZSBBRl9TTkEgMjIgIAotI2RlZmluZSBBRl9JUkRBIDIzICAKLSNkZWZpbmUgQUZfUFBQT1ggMjQgIAotI2RlZmluZSBBRl9XQU5QSVBFIDI1ICAKLSNkZWZpbmUgQUZfTExDIDI2ICAKLSNkZWZpbmUgQUZfVElQQyAzMCAgCi0jZGVmaW5lIEFGX0JMVUVUT09USCAzMSAgCi0jZGVmaW5lIEFGX0NBSUYgMzggIAotI2RlZmluZSBBRl9NQVggMzkgIAotCi0jZGVmaW5lIFBGX1VOU1BFQyBBRl9VTlNQRUMKLSNkZWZpbmUgUEZfVU5JWCBBRl9VTklYCi0jZGVmaW5lIFBGX0xPQ0FMIEFGX0xPQ0FMCi0jZGVmaW5lIFBGX0lORVQgQUZfSU5FVAotI2RlZmluZSBQRl9BWDI1IEFGX0FYMjUKLSNkZWZpbmUgUEZfSVBYIEFGX0lQWAotI2RlZmluZSBQRl9BUFBMRVRBTEsgQUZfQVBQTEVUQUxLCi0jZGVmaW5lIFBGX05FVFJPTSBBRl9ORVRST00KLSNkZWZpbmUgUEZfQlJJREdFIEFGX0JSSURHRQotI2RlZmluZSBQRl9BVE1QVkMgQUZfQVRNUFZDCi0jZGVmaW5lIFBGX1gyNSBBRl9YMjUKLSNkZWZpbmUgUEZfSU5FVDYgQUZfSU5FVDYKLSNkZWZpbmUgUEZfUk9TRSBBRl9ST1NFCi0jZGVmaW5lIFBGX0RFQ25ldCBBRl9ERUNuZXQKLSNkZWZpbmUgUEZfTkVUQkVVSSBBRl9ORVRCRVVJCi0jZGVmaW5lIFBGX1NFQ1VSSVRZIEFGX1NFQ1VSSVRZCi0jZGVmaW5lIFBGX0tFWSBBRl9LRVkKLSNkZWZpbmUgUEZfTkVUTElOSyBBRl9ORVRMSU5LCi0jZGVmaW5lIFBGX1JPVVRFIEFGX1JPVVRFCi0jZGVmaW5lIFBGX1BBQ0tFVCBBRl9QQUNLRVQKLSNkZWZpbmUgUEZfQVNIIEFGX0FTSAotI2RlZmluZSBQRl9FQ09ORVQgQUZfRUNPTkVUCi0jZGVmaW5lIFBGX0FUTVNWQyBBRl9BVE1TVkMKLSNkZWZpbmUgUEZfU05BIEFGX1NOQQotI2RlZmluZSBQRl9JUkRBIEFGX0lSREEKLSNkZWZpbmUgUEZfUFBQT1ggQUZfUFBQT1gKLSNkZWZpbmUgUEZfV0FOUElQRSBBRl9XQU5QSVBFCi0jZGVmaW5lIFBGX0xMQyBBRl9MTEMKLSNkZWZpbmUgUEZfVElQQyBBRl9USVBDCi0jZGVmaW5lIFBGX0JMVUVUT09USCBBRl9CTFVFVE9PVEgKLSNkZWZpbmUgUEZfQ0FJRiBBRl9DQUlGCi0jZGVmaW5lIFBGX01BWCBBRl9NQVgKLQotI2RlZmluZSBTT01BWENPTk4gMTI4Ci0KLSNkZWZpbmUgTVNHX09PQiAxCi0jZGVmaW5lIE1TR19QRUVLIDIKLSNkZWZpbmUgTVNHX0RPTlRST1VURSA0Ci0jZGVmaW5lIE1TR19UUllIQVJEIDQgIAotI2RlZmluZSBNU0dfQ1RSVU5DIDgKLSNkZWZpbmUgTVNHX1BST0JFIDB4MTAgIAotI2RlZmluZSBNU0dfVFJVTkMgMHgyMAotI2RlZmluZSBNU0dfRE9OVFdBSVQgMHg0MCAgCi0jZGVmaW5lIE1TR19FT1IgMHg4MCAgCi0jZGVmaW5lIE1TR19XQUlUQUxMIDB4MTAwICAKLSNkZWZpbmUgTVNHX0ZJTiAweDIwMAotI2RlZmluZSBNU0dfU1lOIDB4NDAwCi0jZGVmaW5lIE1TR19DT05GSVJNIDB4ODAwICAKLSNkZWZpbmUgTVNHX1JTVCAweDEwMDAKLSNkZWZpbmUgTVNHX0VSUlFVRVVFIDB4MjAwMCAgCi0jZGVmaW5lIE1TR19OT1NJR05BTCAweDQwMDAgIAotI2RlZmluZSBNU0dfTU9SRSAweDgwMDAgIAotCi0jZGVmaW5lIE1TR19FT0YgTVNHX0ZJTgotCi0jZGVmaW5lIE1TR19DTVNHX0NPTVBBVCAwICAKLQotI2RlZmluZSBTT0xfSVAgMAotCi0jZGVmaW5lIFNPTF9UQ1AgNgotI2RlZmluZSBTT0xfVURQIDE3Ci0jZGVmaW5lIFNPTF9JUFY2IDQxCi0jZGVmaW5lIFNPTF9JQ01QVjYgNTgKLSNkZWZpbmUgU09MX1NDVFAgMTMyCi0jZGVmaW5lIFNPTF9SQVcgMjU1Ci0jZGVmaW5lIFNPTF9JUFggMjU2Ci0jZGVmaW5lIFNPTF9BWDI1IDI1NwotI2RlZmluZSBTT0xfQVRBTEsgMjU4Ci0jZGVmaW5lIFNPTF9ORVRST00gMjU5Ci0jZGVmaW5lIFNPTF9ST1NFIDI2MAotI2RlZmluZSBTT0xfREVDTkVUIDI2MQotI2RlZmluZSBTT0xfWDI1IDI2MgotI2RlZmluZSBTT0xfUEFDS0VUIDI2MwotI2RlZmluZSBTT0xfQVRNIDI2NCAgCi0jZGVmaW5lIFNPTF9BQUwgMjY1ICAKLSNkZWZpbmUgU09MX0lSREEgMjY2Ci0jZGVmaW5lIFNPTF9ORVRCRVVJIDI2NwotI2RlZmluZSBTT0xfTExDIDI2OAotI2RlZmluZSBTT0xfRENDUCAyNjkKLSNkZWZpbmUgU09MX05FVExJTksgMjcwCi0jZGVmaW5lIFNPTF9USVBDIDI3MQotCi0jZGVmaW5lIElQWF9UWVBFIDEKLQotI2VuZGlmCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9zb2NraW9zLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc29ja2lvcy5oCmluZGV4IGQxMTEzNTkuLmNkNTM5ODEgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9zb2NraW9zLmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3NvY2tpb3MuaApAQCAtNywxMDEgKzcsMTA5IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfTElOVVhfU09DS0lPU19ICiAjZGVmaW5lIF9MSU5VWF9TT0NLSU9TX0gKLQogI2luY2x1ZGUgPGFzbS9zb2NraW9zLmg+Ci0KICNkZWZpbmUgU0lPQ0lOUSBGSU9OUkVBRAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU0lPQ09VVFEgVElPQ09VVFEKLQotI2RlZmluZSBTSU9DQUREUlQgMHg4OTBCICAKLSNkZWZpbmUgU0lPQ0RFTFJUIDB4ODkwQyAgCi0jZGVmaW5lIFNJT0NSVE1TRyAweDg5MEQgIAotCi0jZGVmaW5lIFNJT0NHSUZOQU1FIDB4ODkxMCAgCi0jZGVmaW5lIFNJT0NTSUZMSU5LIDB4ODkxMSAgCi0jZGVmaW5lIFNJT0NHSUZDT05GIDB4ODkxMiAgCi0jZGVmaW5lIFNJT0NHSUZGTEFHUyAweDg5MTMgIAotI2RlZmluZSBTSU9DU0lGRkxBR1MgMHg4OTE0ICAKLSNkZWZpbmUgU0lPQ0dJRkFERFIgMHg4OTE1ICAKLSNkZWZpbmUgU0lPQ1NJRkFERFIgMHg4OTE2ICAKLSNkZWZpbmUgU0lPQ0dJRkRTVEFERFIgMHg4OTE3ICAKLSNkZWZpbmUgU0lPQ1NJRkRTVEFERFIgMHg4OTE4ICAKLSNkZWZpbmUgU0lPQ0dJRkJSREFERFIgMHg4OTE5ICAKLSNkZWZpbmUgU0lPQ1NJRkJSREFERFIgMHg4OTFhICAKLSNkZWZpbmUgU0lPQ0dJRk5FVE1BU0sgMHg4OTFiICAKLSNkZWZpbmUgU0lPQ1NJRk5FVE1BU0sgMHg4OTFjICAKLSNkZWZpbmUgU0lPQ0dJRk1FVFJJQyAweDg5MWQgIAotI2RlZmluZSBTSU9DU0lGTUVUUklDIDB4ODkxZSAgCi0jZGVmaW5lIFNJT0NHSUZNRU0gMHg4OTFmICAKLSNkZWZpbmUgU0lPQ1NJRk1FTSAweDg5MjAgIAotI2RlZmluZSBTSU9DR0lGTVRVIDB4ODkyMSAgCi0jZGVmaW5lIFNJT0NTSUZNVFUgMHg4OTIyICAKLSNkZWZpbmUgU0lPQ1NJRk5BTUUgMHg4OTIzICAKLSNkZWZpbmUgU0lPQ1NJRkhXQUREUiAweDg5MjQgIAotI2RlZmluZSBTSU9DR0lGRU5DQVAgMHg4OTI1ICAKLSNkZWZpbmUgU0lPQ1NJRkVOQ0FQIDB4ODkyNiAKLSNkZWZpbmUgU0lPQ0dJRkhXQUREUiAweDg5MjcgIAotI2RlZmluZSBTSU9DR0lGU0xBVkUgMHg4OTI5ICAKKyNkZWZpbmUgU0lPQ0FERFJUIDB4ODkwQgorI2RlZmluZSBTSU9DREVMUlQgMHg4OTBDCisjZGVmaW5lIFNJT0NSVE1TRyAweDg5MEQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFNJT0NHSUZOQU1FIDB4ODkxMAorI2RlZmluZSBTSU9DU0lGTElOSyAweDg5MTEKKyNkZWZpbmUgU0lPQ0dJRkNPTkYgMHg4OTEyCisjZGVmaW5lIFNJT0NHSUZGTEFHUyAweDg5MTMKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFNJT0NTSUZGTEFHUyAweDg5MTQKKyNkZWZpbmUgU0lPQ0dJRkFERFIgMHg4OTE1CisjZGVmaW5lIFNJT0NTSUZBRERSIDB4ODkxNgorI2RlZmluZSBTSU9DR0lGRFNUQUREUiAweDg5MTcKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFNJT0NTSUZEU1RBRERSIDB4ODkxOAorI2RlZmluZSBTSU9DR0lGQlJEQUREUiAweDg5MTkKKyNkZWZpbmUgU0lPQ1NJRkJSREFERFIgMHg4OTFhCisjZGVmaW5lIFNJT0NHSUZORVRNQVNLIDB4ODkxYgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgU0lPQ1NJRk5FVE1BU0sgMHg4OTFjCisjZGVmaW5lIFNJT0NHSUZNRVRSSUMgMHg4OTFkCisjZGVmaW5lIFNJT0NTSUZNRVRSSUMgMHg4OTFlCisjZGVmaW5lIFNJT0NHSUZNRU0gMHg4OTFmCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBTSU9DU0lGTUVNIDB4ODkyMAorI2RlZmluZSBTSU9DR0lGTVRVIDB4ODkyMQorI2RlZmluZSBTSU9DU0lGTVRVIDB4ODkyMgorI2RlZmluZSBTSU9DU0lGTkFNRSAweDg5MjMKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFNJT0NTSUZIV0FERFIgMHg4OTI0CisjZGVmaW5lIFNJT0NHSUZFTkNBUCAweDg5MjUKKyNkZWZpbmUgU0lPQ1NJRkVOQ0FQIDB4ODkyNgorI2RlZmluZSBTSU9DR0lGSFdBRERSIDB4ODkyNworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgU0lPQ0dJRlNMQVZFIDB4ODkyOQogI2RlZmluZSBTSU9DU0lGU0xBVkUgMHg4OTMwCi0jZGVmaW5lIFNJT0NBRERNVUxUSSAweDg5MzEgIAorI2RlZmluZSBTSU9DQURETVVMVEkgMHg4OTMxCiAjZGVmaW5lIFNJT0NERUxNVUxUSSAweDg5MzIKLSNkZWZpbmUgU0lPQ0dJRklOREVYIDB4ODkzMyAgCi0jZGVmaW5lIFNJT0dJRklOREVYIFNJT0NHSUZJTkRFWCAgCi0jZGVmaW5lIFNJT0NTSUZQRkxBR1MgMHg4OTM0ICAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFNJT0NHSUZJTkRFWCAweDg5MzMKKyNkZWZpbmUgU0lPR0lGSU5ERVggU0lPQ0dJRklOREVYCisjZGVmaW5lIFNJT0NTSUZQRkxBR1MgMHg4OTM0CiAjZGVmaW5lIFNJT0NHSUZQRkxBR1MgMHg4OTM1Ci0jZGVmaW5lIFNJT0NESUZBRERSIDB4ODkzNiAgCi0jZGVmaW5lIFNJT0NTSUZIV0JST0FEQ0FTVCAweDg5MzcgIAotI2RlZmluZSBTSU9DR0lGQ09VTlQgMHg4OTM4ICAKLSNkZWZpbmUgU0lPQ0tJTExBRERSIDB4ODkzOSAgCi0KLSNkZWZpbmUgU0lPQ0dJRkJSIDB4ODk0MCAgCi0jZGVmaW5lIFNJT0NTSUZCUiAweDg5NDEgIAotCi0jZGVmaW5lIFNJT0NHSUZUWFFMRU4gMHg4OTQyICAKLSNkZWZpbmUgU0lPQ1NJRlRYUUxFTiAweDg5NDMgIAotCi0jZGVmaW5lIFNJT0NFVEhUT09MIDB4ODk0NiAgCi0KLSNkZWZpbmUgU0lPQ0dNSUlQSFkgMHg4OTQ3ICAKLSNkZWZpbmUgU0lPQ0dNSUlSRUcgMHg4OTQ4ICAKLSNkZWZpbmUgU0lPQ1NNSUlSRUcgMHg4OTQ5ICAKLQotI2RlZmluZSBTSU9DV0FOREVWIDB4ODk0QSAgCi0KLSNkZWZpbmUgU0lPQ0RBUlAgMHg4OTUzICAKLSNkZWZpbmUgU0lPQ0dBUlAgMHg4OTU0ICAKLSNkZWZpbmUgU0lPQ1NBUlAgMHg4OTU1ICAKLQotI2RlZmluZSBTSU9DRFJBUlAgMHg4OTYwICAKLSNkZWZpbmUgU0lPQ0dSQVJQIDB4ODk2MSAgCi0jZGVmaW5lIFNJT0NTUkFSUCAweDg5NjIgIAotCi0jZGVmaW5lIFNJT0NHSUZNQVAgMHg4OTcwICAKLSNkZWZpbmUgU0lPQ1NJRk1BUCAweDg5NzEgIAotCi0jZGVmaW5lIFNJT0NBRERETENJIDB4ODk4MCAgCi0jZGVmaW5lIFNJT0NERUxETENJIDB4ODk4MSAgCi0KLSNkZWZpbmUgU0lPQ0dJRlZMQU4gMHg4OTgyICAKLSNkZWZpbmUgU0lPQ1NJRlZMQU4gMHg4OTgzICAKLQotI2RlZmluZSBTSU9DQk9OREVOU0xBVkUgMHg4OTkwICAKLSNkZWZpbmUgU0lPQ0JPTkRSRUxFQVNFIDB4ODk5MSAgCi0jZGVmaW5lIFNJT0NCT05EU0VUSFdBRERSIDB4ODk5MiAgCi0jZGVmaW5lIFNJT0NCT05EU0xBVkVJTkZPUVVFUlkgMHg4OTkzICAKLSNkZWZpbmUgU0lPQ0JPTkRJTkZPUVVFUlkgMHg4OTk0ICAKLSNkZWZpbmUgU0lPQ0JPTkRDSEFOR0VBQ1RJVkUgMHg4OTk1ICAKLQotI2RlZmluZSBTSU9DQlJBRERCUiAweDg5YTAgIAotI2RlZmluZSBTSU9DQlJERUxCUiAweDg5YTEgIAotI2RlZmluZSBTSU9DQlJBRERJRiAweDg5YTIgIAotI2RlZmluZSBTSU9DQlJERUxJRiAweDg5YTMgIAotCi0jZGVmaW5lIFNJT0NERVZQUklWQVRFIDB4ODlGMCAgCi0KLSNkZWZpbmUgU0lPQ1BST1RPUFJJVkFURSAweDg5RTAgIAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgU0lPQ0RJRkFERFIgMHg4OTM2CisjZGVmaW5lIFNJT0NTSUZIV0JST0FEQ0FTVCAweDg5MzcKKyNkZWZpbmUgU0lPQ0dJRkNPVU5UIDB4ODkzOAorI2RlZmluZSBTSU9DS0lMTEFERFIgMHg4OTM5CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBTSU9DR0lGQlIgMHg4OTQwCisjZGVmaW5lIFNJT0NTSUZCUiAweDg5NDEKKyNkZWZpbmUgU0lPQ0dJRlRYUUxFTiAweDg5NDIKKyNkZWZpbmUgU0lPQ1NJRlRYUUxFTiAweDg5NDMKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFNJT0NFVEhUT09MIDB4ODk0NgorI2RlZmluZSBTSU9DR01JSVBIWSAweDg5NDcKKyNkZWZpbmUgU0lPQ0dNSUlSRUcgMHg4OTQ4CisjZGVmaW5lIFNJT0NTTUlJUkVHIDB4ODk0OQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgU0lPQ1dBTkRFViAweDg5NEEKKyNkZWZpbmUgU0lPQ0RBUlAgMHg4OTUzCisjZGVmaW5lIFNJT0NHQVJQIDB4ODk1NAorI2RlZmluZSBTSU9DU0FSUCAweDg5NTUKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFNJT0NEUkFSUCAweDg5NjAKKyNkZWZpbmUgU0lPQ0dSQVJQIDB4ODk2MQorI2RlZmluZSBTSU9DU1JBUlAgMHg4OTYyCisjZGVmaW5lIFNJT0NHSUZNQVAgMHg4OTcwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBTSU9DU0lGTUFQIDB4ODk3MQorI2RlZmluZSBTSU9DQURERExDSSAweDg5ODAKKyNkZWZpbmUgU0lPQ0RFTERMQ0kgMHg4OTgxCisjZGVmaW5lIFNJT0NHSUZWTEFOIDB4ODk4MgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgU0lPQ1NJRlZMQU4gMHg4OTgzCisjZGVmaW5lIFNJT0NCT05ERU5TTEFWRSAweDg5OTAKKyNkZWZpbmUgU0lPQ0JPTkRSRUxFQVNFIDB4ODk5MQorI2RlZmluZSBTSU9DQk9ORFNFVEhXQUREUiAweDg5OTIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFNJT0NCT05EU0xBVkVJTkZPUVVFUlkgMHg4OTkzCisjZGVmaW5lIFNJT0NCT05ESU5GT1FVRVJZIDB4ODk5NAorI2RlZmluZSBTSU9DQk9ORENIQU5HRUFDVElWRSAweDg5OTUKKyNkZWZpbmUgU0lPQ0JSQUREQlIgMHg4OWEwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBTSU9DQlJERUxCUiAweDg5YTEKKyNkZWZpbmUgU0lPQ0JSQURESUYgMHg4OWEyCisjZGVmaW5lIFNJT0NCUkRFTElGIDB4ODlhMworI2RlZmluZSBTSU9DREVWUFJJVkFURSAweDg5RjAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFNJT0NQUk9UT1BSSVZBVEUgMHg4OUUwCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9zb3VuZGNhcmQuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9zb3VuZGNhcmQuaAppbmRleCA4YzY5YzI4Li43MTU5ZjYyIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc291bmRjYXJkLmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3NvdW5kY2FyZC5oCkBAIC03LDgyNSArNyw4NjUgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIFNPVU5EQ0FSRF9ICiAjZGVmaW5lIFNPVU5EQ0FSRF9ICi0KICNkZWZpbmUgU09VTkRfVkVSU0lPTiAweDAzMDgwMgogI2RlZmluZSBPUEVOX1NPVU5EX1NZU1RFTQotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+Ci0KICNpbmNsdWRlIDxlbmRpYW4uaD4KLQogI2RlZmluZSBTTkRDQVJEX0FETElCIDEKICNkZWZpbmUgU05EQ0FSRF9TQiAyCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTTkRDQVJEX1BBUyAzCiAjZGVmaW5lIFNORENBUkRfR1VTIDQKICNkZWZpbmUgU05EQ0FSRF9NUFU0MDEgNQogI2RlZmluZSBTTkRDQVJEX1NCMTYgNgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU05EQ0FSRF9TQjE2TUlESSA3CiAjZGVmaW5lIFNORENBUkRfVUFSVDY4NTAgOAogI2RlZmluZSBTTkRDQVJEX0dVUzE2IDkKICNkZWZpbmUgU05EQ0FSRF9NU1MgMTAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNORENBUkRfUFNTIDExCiAjZGVmaW5lIFNORENBUkRfU1NDQVBFIDEyCiAjZGVmaW5lIFNORENBUkRfUFNTX01QVSAxMwogI2RlZmluZSBTTkRDQVJEX1BTU19NU1MgMTQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNORENBUkRfU1NDQVBFX01TUyAxNQogI2RlZmluZSBTTkRDQVJEX1RSWFBSTyAxNgogI2RlZmluZSBTTkRDQVJEX1RSWFBST19TQiAxNwogI2RlZmluZSBTTkRDQVJEX1RSWFBST19NUFUgMTgKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNORENBUkRfTUFEMTYgMTkKICNkZWZpbmUgU05EQ0FSRF9NQUQxNl9NUFUgMjAKICNkZWZpbmUgU05EQ0FSRF9DUzQyMzIgMjEKICNkZWZpbmUgU05EQ0FSRF9DUzQyMzJfTVBVIDIyCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTTkRDQVJEX01BVUkgMjMKICNkZWZpbmUgU05EQ0FSRF9QU0VVRE9fTVNTIDI0CiAjZGVmaW5lIFNORENBUkRfR1VTUE5QIDI1CiAjZGVmaW5lIFNORENBUkRfVUFSVDQwMSAyNgotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2lmbmRlZiBfU0lPV1IKICNpZiBkZWZpbmVkKF9JT1dSKSAmJiAoZGVmaW5lZChfQUlYKSB8fCAhZGVmaW5lZChzdW4pICYmICFkZWZpbmVkKHNwYXJjKSAmJiAhZGVmaW5lZChfX3NwYXJjX18pICYmICFkZWZpbmVkKF9fSU5DaW9jdGxoKSAmJiAhZGVmaW5lZChfX0x5bnhfXykpCi0KICNkZWZpbmUgU0lPQ1BBUk1fTUFTSyBJT0NQQVJNX01BU0sKICNkZWZpbmUgU0lPQ19WT0lEIElPQ19WT0lECisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTSU9DX09VVCBJT0NfT1VUCiAjZGVmaW5lIFNJT0NfSU4gSU9DX0lOCiAjZGVmaW5lIFNJT0NfSU5PVVQgSU9DX0lOT1VUCiAjZGVmaW5lIF9TSU9DX1NJWkUgX0lPQ19TSVpFCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfU0lPQ19ESVIgX0lPQ19ESVIKICNkZWZpbmUgX1NJT0NfTk9ORSBfSU9DX05PTkUKICNkZWZpbmUgX1NJT0NfUkVBRCBfSU9DX1JFQUQKICNkZWZpbmUgX1NJT0NfV1JJVEUgX0lPQ19XUklURQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX1NJTyBfSU8KICNkZWZpbmUgX1NJT1IgX0lPUgogI2RlZmluZSBfU0lPVyBfSU9XCiAjZGVmaW5lIF9TSU9XUiBfSU9XUgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlbHNlCi0KLSNkZWZpbmUgU0lPQ1BBUk1fTUFTSyAweDFmZmYgIAotI2RlZmluZSBTSU9DX1ZPSUQgMHgwMDAwMDAwMCAgCi0jZGVmaW5lIFNJT0NfT1VUIDB4MjAwMDAwMDAgIAotI2RlZmluZSBTSU9DX0lOIDB4NDAwMDAwMDAgIAorI2RlZmluZSBTSU9DUEFSTV9NQVNLIDB4MWZmZgorI2RlZmluZSBTSU9DX1ZPSUQgMHgwMDAwMDAwMAorI2RlZmluZSBTSU9DX09VVCAweDIwMDAwMDAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBTSU9DX0lOIDB4NDAwMDAwMDAKICNkZWZpbmUgU0lPQ19JTk9VVCAoU0lPQ19JTnxTSU9DX09VVCkKLQogI2RlZmluZSBfU0lPKHgseSkgKChpbnQpKFNJT0NfVk9JRHwoeDw8OCl8eSkpCiAjZGVmaW5lIF9TSU9SKHgseSx0KSAoKGludCkoU0lPQ19PVVR8KChzaXplb2YodCkmU0lPQ1BBUk1fTUFTSyk8PDE2KXwoeDw8OCl8eSkpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfU0lPVyh4LHksdCkgKChpbnQpKFNJT0NfSU58KChzaXplb2YodCkmU0lPQ1BBUk1fTUFTSyk8PDE2KXwoeDw8OCl8eSkpCi0KICNkZWZpbmUgX1NJT1dSKHgseSx0KSAoKGludCkoU0lPQ19JTk9VVHwoKHNpemVvZih0KSZTSU9DUEFSTV9NQVNLKTw8MTYpfCh4PDw4KXx5KSkKLSNkZWZpbmUgX1NJT0NfU0laRSh4KSAoKHg+PjE2KSZTSU9DUEFSTV9NQVNLKSAKKyNkZWZpbmUgX1NJT0NfU0laRSh4KSAoKHg+PjE2KSZTSU9DUEFSTV9NQVNLKQogI2RlZmluZSBfU0lPQ19ESVIoeCkgKHggJiAweGYwMDAwMDAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX1NJT0NfTk9ORSBTSU9DX1ZPSUQKICNkZWZpbmUgX1NJT0NfUkVBRCBTSU9DX09VVAogI2RlZmluZSBfU0lPQ19XUklURSBTSU9DX0lOCiAjZW5kaWYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZW5kaWYKLQogI2RlZmluZSBTTkRDVExfU0VRX1JFU0VUIF9TSU8gKCdRJywgMCkKICNkZWZpbmUgU05EQ1RMX1NFUV9TWU5DIF9TSU8gKCdRJywgMSkKICNkZWZpbmUgU05EQ1RMX1NZTlRIX0lORk8gX1NJT1dSKCdRJywgMiwgc3RydWN0IHN5bnRoX2luZm8pCi0jZGVmaW5lIFNORENUTF9TRVFfQ1RSTFJBVEUgX1NJT1dSKCdRJywgMywgaW50KSAgCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBTTkRDVExfU0VRX0NUUkxSQVRFIF9TSU9XUignUScsIDMsIGludCkKICNkZWZpbmUgU05EQ1RMX1NFUV9HRVRPVVRDT1VOVCBfU0lPUiAoJ1EnLCA0LCBpbnQpCiAjZGVmaW5lIFNORENUTF9TRVFfR0VUSU5DT1VOVCBfU0lPUiAoJ1EnLCA1LCBpbnQpCiAjZGVmaW5lIFNORENUTF9TRVFfUEVSQ01PREUgX1NJT1cgKCdRJywgNiwgaW50KQotI2RlZmluZSBTTkRDVExfRk1fTE9BRF9JTlNUUiBfU0lPVyAoJ1EnLCA3LCBzdHJ1Y3Qgc2JpX2luc3RydW1lbnQpICAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFNORENUTF9GTV9MT0FEX0lOU1RSIF9TSU9XICgnUScsIDcsIHN0cnVjdCBzYmlfaW5zdHJ1bWVudCkKICNkZWZpbmUgU05EQ1RMX1NFUV9URVNUTUlESSBfU0lPVyAoJ1EnLCA4LCBpbnQpCiAjZGVmaW5lIFNORENUTF9TRVFfUkVTRVRTQU1QTEVTIF9TSU9XICgnUScsIDksIGludCkKICNkZWZpbmUgU05EQ1RMX1NFUV9OUlNZTlRIUyBfU0lPUiAoJ1EnLDEwLCBpbnQpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTTkRDVExfU0VRX05STUlESVMgX1NJT1IgKCdRJywxMSwgaW50KQogI2RlZmluZSBTTkRDVExfTUlESV9JTkZPIF9TSU9XUignUScsMTIsIHN0cnVjdCBtaWRpX2luZm8pCiAjZGVmaW5lIFNORENUTF9TRVFfVEhSRVNIT0xEIF9TSU9XICgnUScsMTMsIGludCkKLSNkZWZpbmUgU05EQ1RMX1NZTlRIX01FTUFWTCBfU0lPV1IoJ1EnLDE0LCBpbnQpICAKLSNkZWZpbmUgU05EQ1RMX0ZNXzRPUF9FTkFCTEUgX1NJT1cgKCdRJywxNSwgaW50KSAgCisjZGVmaW5lIFNORENUTF9TWU5USF9NRU1BVkwgX1NJT1dSKCdRJywxNCwgaW50KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgU05EQ1RMX0ZNXzRPUF9FTkFCTEUgX1NJT1cgKCdRJywxNSwgaW50KQogI2RlZmluZSBTTkRDVExfU0VRX1BBTklDIF9TSU8gKCdRJywxNykKICNkZWZpbmUgU05EQ1RMX1NFUV9PVVRPRkJBTkQgX1NJT1cgKCdRJywxOCwgc3RydWN0IHNlcV9ldmVudF9yZWMpCiAjZGVmaW5lIFNORENUTF9TRVFfR0VUVElNRSBfU0lPUiAoJ1EnLDE5LCBpbnQpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTTkRDVExfU1lOVEhfSUQgX1NJT1dSKCdRJywyMCwgc3RydWN0IHN5bnRoX2luZm8pCiAjZGVmaW5lIFNORENUTF9TWU5USF9DT05UUk9MIF9TSU9XUignUScsMjEsIHN0cnVjdCBzeW50aF9jb250cm9sKQogI2RlZmluZSBTTkRDVExfU1lOVEhfUkVNT1ZFU0FNUExFIF9TSU9XUignUScsMjIsIHN0cnVjdCByZW1vdmVfc2FtcGxlKQotCiB0eXBlZGVmIHN0cnVjdCBzeW50aF9jb250cm9sCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogewogIGludCBkZXZubzsKICBjaGFyIGRhdGFbNDAwMF07CiB9c3ludGhfY29udHJvbDsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHR5cGVkZWYgc3RydWN0IHJlbW92ZV9zYW1wbGUKIHsKICBpbnQgZGV2bm87CiAgaW50IGJhbmtubzsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgaW50IGluc3Rybm87CiB9IHJlbW92ZV9zYW1wbGU7Ci0KIHR5cGVkZWYgc3RydWN0IHNlcV9ldmVudF9yZWMgewogIHVuc2lnbmVkIGNoYXIgYXJyWzhdOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH0gc2VxX2V2ZW50X3JlYzsKLQogI2RlZmluZSBTTkRDVExfVE1SX1RJTUVCQVNFIF9TSU9XUignVCcsIDEsIGludCkKICNkZWZpbmUgU05EQ1RMX1RNUl9TVEFSVCBfU0lPICgnVCcsIDIpCiAjZGVmaW5lIFNORENUTF9UTVJfU1RPUCBfU0lPICgnVCcsIDMpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTTkRDVExfVE1SX0NPTlRJTlVFIF9TSU8gKCdUJywgNCkKICNkZWZpbmUgU05EQ1RMX1RNUl9URU1QTyBfU0lPV1IoJ1QnLCA1LCBpbnQpCiAjZGVmaW5lIFNORENUTF9UTVJfU09VUkNFIF9TSU9XUignVCcsIDYsIGludCkKICNkZWZpbmUgVE1SX0lOVEVSTkFMIDB4MDAwMDAwMDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFRNUl9FWFRFUk5BTCAweDAwMDAwMDAyCiAjZGVmaW5lIFRNUl9NT0RFX01JREkgMHgwMDAwMDAxMAogI2RlZmluZSBUTVJfTU9ERV9GU0sgMHgwMDAwMDAyMAogI2RlZmluZSBUTVJfTU9ERV9DTFMgMHgwMDAwMDA0MAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVE1SX01PREVfU01QVEUgMHgwMDAwMDA4MAogI2RlZmluZSBTTkRDVExfVE1SX01FVFJPTk9NRSBfU0lPVyAoJ1QnLCA3LCBpbnQpCiAjZGVmaW5lIFNORENUTF9UTVJfU0VMRUNUIF9TSU9XICgnVCcsIDgsIGludCkKLQogI2RlZmluZSBfTElOVVhfUEFUQ0hLRVlfSF9JTkRJUkVDVAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNpbmNsdWRlIDxsaW51eC9wYXRjaGtleS5oPgogI3VuZGVmIF9MSU5VWF9QQVRDSEtFWV9IX0lORElSRUNUCi0KICNpZmRlZiBfX0JZVEVfT1JERVIKICNpZiBfX0JZVEVfT1JERVIgPT0gX19CSUdfRU5ESUFOCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBRk1UX1MxNl9ORSBBRk1UX1MxNl9CRQogI2VsaWYgX19CWVRFX09SREVSID09IF9fTElUVExFX0VORElBTgogI2RlZmluZSBBRk1UX1MxNl9ORSBBRk1UX1MxNl9MRQogI2Vsc2UKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZXJyb3IgImNvdWxkIG5vdCBkZXRlcm1pbmUgYnl0ZSBvcmRlciIKICNlbmRpZgogI2VuZGlmCi0KIHN0cnVjdCBwYXRjaF9pbmZvIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgc2hvcnQga2V5OwogI2RlZmluZSBXQVZFX1BBVENIIF9QQVRDSEtFWSgweDA0KQogI2RlZmluZSBHVVNfUEFUQ0ggV0FWRV9QQVRDSAogI2RlZmluZSBXQVZFRlJPTlRfUEFUQ0ggX1BBVENIS0VZKDB4MDYpCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc2hvcnQgZGV2aWNlX25vOwogIHNob3J0IGluc3RyX25vOwotCiAgdW5zaWduZWQgaW50IG1vZGU7Ci0KLSNkZWZpbmUgV0FWRV8xNl9CSVRTIDB4MDEgIAotI2RlZmluZSBXQVZFX1VOU0lHTkVEIDB4MDIgIAotI2RlZmluZSBXQVZFX0xPT1BJTkcgMHgwNCAgCi0jZGVmaW5lIFdBVkVfQklESVJfTE9PUCAweDA4ICAKLSNkZWZpbmUgV0FWRV9MT09QX0JBQ0sgMHgxMCAgCi0jZGVmaW5lIFdBVkVfU1VTVEFJTl9PTiAweDIwICAKLSNkZWZpbmUgV0FWRV9FTlZFTE9QRVMgMHg0MCAgCi0jZGVmaW5lIFdBVkVfRkFTVF9SRUxFQVNFIDB4ODAgIAotCi0jZGVmaW5lIFdBVkVfVklCUkFUTyAweDAwMDEwMDAwICAKLSNkZWZpbmUgV0FWRV9UUkVNT0xPIDB4MDAwMjAwMDAgIAotI2RlZmluZSBXQVZFX1NDQUxFIDB4MDAwNDAwMDAgIAotI2RlZmluZSBXQVZFX0ZSQUNUSU9OUyAweDAwMDgwMDAwICAKLQotI2RlZmluZSBXQVZFX1JPTSAweDQwMDAwMDAwICAKLSNkZWZpbmUgV0FWRV9NVUxBVyAweDIwMDAwMDAwICAKLQorI2RlZmluZSBXQVZFXzE2X0JJVFMgMHgwMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgV0FWRV9VTlNJR05FRCAweDAyCisjZGVmaW5lIFdBVkVfTE9PUElORyAweDA0CisjZGVmaW5lIFdBVkVfQklESVJfTE9PUCAweDA4CisjZGVmaW5lIFdBVkVfTE9PUF9CQUNLIDB4MTAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFdBVkVfU1VTVEFJTl9PTiAweDIwCisjZGVmaW5lIFdBVkVfRU5WRUxPUEVTIDB4NDAKKyNkZWZpbmUgV0FWRV9GQVNUX1JFTEVBU0UgMHg4MAorI2RlZmluZSBXQVZFX1ZJQlJBVE8gMHgwMDAxMDAwMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgV0FWRV9UUkVNT0xPIDB4MDAwMjAwMDAKKyNkZWZpbmUgV0FWRV9TQ0FMRSAweDAwMDQwMDAwCisjZGVmaW5lIFdBVkVfRlJBQ1RJT05TIDB4MDAwODAwMDAKKyNkZWZpbmUgV0FWRV9ST00gMHg0MDAwMDAwMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgV0FWRV9NVUxBVyAweDIwMDAwMDAwCiAgaW50IGxlbjsKICBpbnQgbG9vcF9zdGFydCwgbG9vcF9lbmQ7Ci0KICB1bnNpZ25lZCBpbnQgYmFzZV9mcmVxOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBpbnQgYmFzZV9ub3RlOwogIHVuc2lnbmVkIGludCBoaWdoX25vdGU7CiAgdW5zaWduZWQgaW50IGxvd19ub3RlOwogIGludCBwYW5uaW5nOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBpbnQgZGV0dW5pbmc7Ci0KICB1bnNpZ25lZCBjaGFyIGVudl9yYXRlWyA2IF07CiAgdW5zaWduZWQgY2hhciBlbnZfb2Zmc2V0WyA2IF07Ci0KICB1bnNpZ25lZCBjaGFyIHRyZW1vbG9fc3dlZXA7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGNoYXIgdHJlbW9sb19yYXRlOwogIHVuc2lnbmVkIGNoYXIgdHJlbW9sb19kZXB0aDsKLQogIHVuc2lnbmVkIGNoYXIgdmlicmF0b19zd2VlcDsKICB1bnNpZ25lZCBjaGFyIHZpYnJhdG9fcmF0ZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgY2hhciB2aWJyYXRvX2RlcHRoOwotCiAgaW50IHNjYWxlX2ZyZXF1ZW5jeTsKICB1bnNpZ25lZCBpbnQgc2NhbGVfZmFjdG9yOwotCiAgaW50IHZvbHVtZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgaW50IGZyYWN0aW9uczsKICBpbnQgcmVzZXJ2ZWQxOwogIGludCBzcGFyZVsyXTsKICBjaGFyIGRhdGFbMV07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIH07Ci0KIHN0cnVjdCBzeXNleF9pbmZvIHsKICBzaG9ydCBrZXk7CiAjZGVmaW5lIFNZU0VYX1BBVENIIF9QQVRDSEtFWSgweDA1KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTUFVSV9QQVRDSCBfUEFUQ0hLRVkoMHgwNikKICBzaG9ydCBkZXZpY2Vfbm87CiAgaW50IGxlbjsKICB1bnNpZ25lZCBjaGFyIGRhdGFbMV07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIH07Ci0KICNkZWZpbmUgU0VRX05PVEVPRkYgMAotI2RlZmluZSBTRVFfRk1OT1RFT0ZGIFNFUV9OT1RFT0ZGICAKKyNkZWZpbmUgU0VRX0ZNTk9URU9GRiBTRVFfTk9URU9GRgogI2RlZmluZSBTRVFfTk9URU9OIDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNFUV9GTU5PVEVPTiBTRVFfTk9URU9OCiAjZGVmaW5lIFNFUV9XQUlUIFRNUl9XQUlUX0FCUwogI2RlZmluZSBTRVFfUEdNQ0hBTkdFIDMKICNkZWZpbmUgU0VRX0ZNUEdNQ0hBTkdFIFNFUV9QR01DSEFOR0UKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNFUV9TWU5DVElNRVIgVE1SX1NUQVJUCiAjZGVmaW5lIFNFUV9NSURJUFVUQyA1Ci0jZGVmaW5lIFNFUV9EUlVNT04gNiAgCi0jZGVmaW5lIFNFUV9EUlVNT0ZGIDcgIAotI2RlZmluZSBTRVFfRUNITyBUTVJfRUNITyAgCisjZGVmaW5lIFNFUV9EUlVNT04gNgorI2RlZmluZSBTRVFfRFJVTU9GRiA3CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBTRVFfRUNITyBUTVJfRUNITwogI2RlZmluZSBTRVFfQUZURVJUT1VDSCA5CiAjZGVmaW5lIFNFUV9DT05UUk9MTEVSIDEwCi0KICNkZWZpbmUgQ1RMX0JBTktfU0VMRUNUIDB4MDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIENUTF9NT0RXSEVFTCAweDAxCiAjZGVmaW5lIENUTF9CUkVBVEggMHgwMgotCiAjZGVmaW5lIENUTF9GT09UIDB4MDQKICNkZWZpbmUgQ1RMX1BPUlRBTUVOVE9fVElNRSAweDA1CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBDVExfREFUQV9FTlRSWSAweDA2CiAjZGVmaW5lIENUTF9NQUlOX1ZPTFVNRSAweDA3CiAjZGVmaW5lIENUTF9CQUxBTkNFIDB4MDgKLQogI2RlZmluZSBDVExfUEFOIDB4MGEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIENUTF9FWFBSRVNTSU9OIDB4MGIKLQogI2RlZmluZSBDVExfR0VORVJBTF9QVVJQT1NFMSAweDEwCiAjZGVmaW5lIENUTF9HRU5FUkFMX1BVUlBPU0UyIDB4MTEKICNkZWZpbmUgQ1RMX0dFTkVSQUxfUFVSUE9TRTMgMHgxMgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQ1RMX0dFTkVSQUxfUFVSUE9TRTQgMHgxMwotCiAjZGVmaW5lIENUTF9EQU1QRVJfUEVEQUwgMHg0MAotI2RlZmluZSBDVExfU1VTVEFJTiAweDQwICAKLSNkZWZpbmUgQ1RMX0hPTEQgMHg0MCAgCisjZGVmaW5lIENUTF9TVVNUQUlOIDB4NDAKKyNkZWZpbmUgQ1RMX0hPTEQgMHg0MAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQ1RMX1BPUlRBTUVOVE8gMHg0MQogI2RlZmluZSBDVExfU09TVEVOVVRPIDB4NDIKICNkZWZpbmUgQ1RMX1NPRlRfUEVEQUwgMHg0MwotCiAjZGVmaW5lIENUTF9IT0xEMiAweDQ1Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIENUTF9HRU5FUkFMX1BVUlBPU0U1IDB4NTAKICNkZWZpbmUgQ1RMX0dFTkVSQUxfUFVSUE9TRTYgMHg1MQogI2RlZmluZSBDVExfR0VORVJBTF9QVVJQT1NFNyAweDUyCiAjZGVmaW5lIENUTF9HRU5FUkFMX1BVUlBPU0U4IDB4NTMKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQ1RMX0VYVF9FRkZfREVQVEggMHg1YgogI2RlZmluZSBDVExfVFJFTU9MT19ERVBUSCAweDVjCiAjZGVmaW5lIENUTF9DSE9SVVNfREVQVEggMHg1ZAogI2RlZmluZSBDVExfREVUVU5FX0RFUFRIIDB4NWUKLSNkZWZpbmUgQ1RMX0NFTEVTVEVfREVQVEggMHg1ZSAgCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBDVExfQ0VMRVNURV9ERVBUSCAweDVlCiAjZGVmaW5lIENUTF9QSEFTRVJfREVQVEggMHg1ZgogI2RlZmluZSBDVExfREFUQV9JTkNSRU1FTlQgMHg2MAogI2RlZmluZSBDVExfREFUQV9ERUNSRU1FTlQgMHg2MQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQ1RMX05PTlJFR19QQVJNX05VTV9MU0IgMHg2MgogI2RlZmluZSBDVExfTk9OUkVHX1BBUk1fTlVNX01TQiAweDYzCiAjZGVmaW5lIENUTF9SRUdJU1RfUEFSTV9OVU1fTFNCIDB4NjQKICNkZWZpbmUgQ1RMX1JFR0lTVF9QQVJNX05VTV9NU0IgMHg2NQotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBDVFJMX1BJVENIX0JFTkRFUiAyNTUKICNkZWZpbmUgQ1RSTF9QSVRDSF9CRU5ERVJfUkFOR0UgMjU0Ci0jZGVmaW5lIENUUkxfRVhQUkVTU0lPTiAyNTMgIAotI2RlZmluZSBDVFJMX01BSU5fVk9MVU1FIDI1MiAgCisjZGVmaW5lIENUUkxfRVhQUkVTU0lPTiAyNTMKKyNkZWZpbmUgQ1RSTF9NQUlOX1ZPTFVNRSAyNTIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNFUV9CQUxBTkNFIDExCiAjZGVmaW5lIFNFUV9WT0xNT0RFIDEyCi0KICNkZWZpbmUgVk9MX01FVEhPRF9BREFHSU8gMQogI2RlZmluZSBWT0xfTUVUSE9EX0xJTkVBUiAyCi0KLSNkZWZpbmUgU0VRX0ZVTExTSVpFIDB4ZmQgIAotCi0jZGVmaW5lIFNFUV9QUklWQVRFIDB4ZmUgIAotI2RlZmluZSBTRVFfRVhURU5ERUQgMHhmZiAgCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFNFUV9GVUxMU0laRSAweGZkCisjZGVmaW5lIFNFUV9QUklWQVRFIDB4ZmUKKyNkZWZpbmUgU0VRX0VYVEVOREVEIDB4ZmYKIHR5cGVkZWYgdW5zaWduZWQgY2hhciBzYmlfaW5zdHJfZGF0YVszMl07Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3Qgc2JpX2luc3RydW1lbnQgewogIHVuc2lnbmVkIHNob3J0IGtleTsKICNkZWZpbmUgRk1fUEFUQ0ggX1BBVENIS0VZKDB4MDEpCiAjZGVmaW5lIE9QTDNfUEFUQ0ggX1BBVENIS0VZKDB4MDMpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHNob3J0IGRldmljZTsKICBpbnQgY2hhbm5lbDsKICBzYmlfaW5zdHJfZGF0YSBvcGVyYXRvcnM7CiAgfTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBzeW50aF9pbmZvIHsKICBjaGFyIG5hbWVbMzBdOwogIGludCBkZXZpY2U7CiAgaW50IHN5bnRoX3R5cGU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTWU5USF9UWVBFX0ZNIDAKICNkZWZpbmUgU1lOVEhfVFlQRV9TQU1QTEUgMQotI2RlZmluZSBTWU5USF9UWVBFX01JREkgMiAgCi0KKyNkZWZpbmUgU1lOVEhfVFlQRV9NSURJIDIKICBpbnQgc3ludGhfc3VidHlwZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEZNX1RZUEVfQURMSUIgMHgwMAogI2RlZmluZSBGTV9UWVBFX09QTDMgMHgwMQogI2RlZmluZSBNSURJX1RZUEVfTVBVNDAxIDB4NDAxCi0KICNkZWZpbmUgU0FNUExFX1RZUEVfQkFTSUMgMHgxMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU0FNUExFX1RZUEVfR1VTIFNBTVBMRV9UWVBFX0JBU0lDCiAjZGVmaW5lIFNBTVBMRV9UWVBFX1dBVkVGUk9OVCAweDExCi0KICBpbnQgcGVyY19tb2RlOwogIGludCBucl92b2ljZXM7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGludCBucl9kcnVtczsKICBpbnQgaW5zdHJfYmFua19zaXplOwogIHVuc2lnbmVkIGludCBjYXBhYmlsaXRpZXM7Ci0jZGVmaW5lIFNZTlRIX0NBUF9QRVJDTU9ERSAweDAwMDAwMDAxICAKLSNkZWZpbmUgU1lOVEhfQ0FQX09QTDMgMHgwMDAwMDAwMiAgCi0jZGVmaW5lIFNZTlRIX0NBUF9JTlBVVCAweDAwMDAwMDA0ICAKKyNkZWZpbmUgU1lOVEhfQ0FQX1BFUkNNT0RFIDB4MDAwMDAwMDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFNZTlRIX0NBUF9PUEwzIDB4MDAwMDAwMDIKKyNkZWZpbmUgU1lOVEhfQ0FQX0lOUFVUIDB4MDAwMDAwMDQKICBpbnQgZHVtbWllc1sxOV07CiAgfTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBzb3VuZF90aW1lcl9pbmZvIHsKICBjaGFyIG5hbWVbMzJdOwogIGludCBjYXBzOwogIH07Ci0KLSNkZWZpbmUgTUlESV9DQVBfTVBVNDAxIDEgIAotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBNSURJX0NBUF9NUFU0MDEgMQogc3RydWN0IG1pZGlfaW5mbyB7CiAgY2hhciBuYW1lWzMwXTsKICBpbnQgZGV2aWNlOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBpbnQgY2FwYWJpbGl0aWVzOwogIGludCBkZXZfdHlwZTsKICBpbnQgZHVtbWllc1sxOF07CiAgfTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHR5cGVkZWYgc3RydWN0IHsKICB1bnNpZ25lZCBjaGFyIGNtZDsKICBjaGFyIG5yX2FyZ3MsIG5yX3JldHVybnM7CiAgdW5zaWduZWQgY2hhciBkYXRhWzMwXTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgfSBtcHVfY29tbWFuZF9yZWM7Ci0KICNkZWZpbmUgU05EQ1RMX01JRElfUFJFVElNRSBfU0lPV1IoJ20nLCAwLCBpbnQpCiAjZGVmaW5lIFNORENUTF9NSURJX01QVU1PREUgX1NJT1dSKCdtJywgMSwgaW50KQogI2RlZmluZSBTTkRDVExfTUlESV9NUFVDTUQgX1NJT1dSKCdtJywgMiwgbXB1X2NvbW1hbmRfcmVjKQotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTTkRDVExfRFNQX1JFU0VUIF9TSU8gKCdQJywgMCkKICNkZWZpbmUgU05EQ1RMX0RTUF9TWU5DIF9TSU8gKCdQJywgMSkKICNkZWZpbmUgU05EQ1RMX0RTUF9TUEVFRCBfU0lPV1IoJ1AnLCAyLCBpbnQpCiAjZGVmaW5lIFNORENUTF9EU1BfU1RFUkVPIF9TSU9XUignUCcsIDMsIGludCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNORENUTF9EU1BfR0VUQkxLU0laRSBfU0lPV1IoJ1AnLCA0LCBpbnQpCiAjZGVmaW5lIFNORENUTF9EU1BfU0FNUExFU0laRSBTTkRDVExfRFNQX1NFVEZNVAogI2RlZmluZSBTTkRDVExfRFNQX0NIQU5ORUxTIF9TSU9XUignUCcsIDYsIGludCkKICNkZWZpbmUgU09VTkRfUENNX1dSSVRFX0NIQU5ORUxTIFNORENUTF9EU1BfQ0hBTk5FTFMKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNPVU5EX1BDTV9XUklURV9GSUxURVIgX1NJT1dSKCdQJywgNywgaW50KQogI2RlZmluZSBTTkRDVExfRFNQX1BPU1QgX1NJTyAoJ1AnLCA4KQogI2RlZmluZSBTTkRDVExfRFNQX1NVQkRJVklERSBfU0lPV1IoJ1AnLCA5LCBpbnQpCiAjZGVmaW5lIFNORENUTF9EU1BfU0VURlJBR01FTlQgX1NJT1dSKCdQJywxMCwgaW50KQotCi0jZGVmaW5lIFNORENUTF9EU1BfR0VURk1UUyBfU0lPUiAoJ1AnLDExLCBpbnQpICAKLSNkZWZpbmUgU05EQ1RMX0RTUF9TRVRGTVQgX1NJT1dSKCdQJyw1LCBpbnQpICAKLSNkZWZpbmUgQUZNVF9RVUVSWSAweDAwMDAwMDAwICAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFNORENUTF9EU1BfR0VURk1UUyBfU0lPUiAoJ1AnLDExLCBpbnQpCisjZGVmaW5lIFNORENUTF9EU1BfU0VURk1UIF9TSU9XUignUCcsNSwgaW50KQorI2RlZmluZSBBRk1UX1FVRVJZIDB4MDAwMDAwMDAKICNkZWZpbmUgQUZNVF9NVV9MQVcgMHgwMDAwMDAwMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQUZNVF9BX0xBVyAweDAwMDAwMDAyCiAjZGVmaW5lIEFGTVRfSU1BX0FEUENNIDB4MDAwMDAwMDQKICNkZWZpbmUgQUZNVF9VOCAweDAwMDAwMDA4Ci0jZGVmaW5lIEFGTVRfUzE2X0xFIDB4MDAwMDAwMTAgIAotI2RlZmluZSBBRk1UX1MxNl9CRSAweDAwMDAwMDIwICAKKyNkZWZpbmUgQUZNVF9TMTZfTEUgMHgwMDAwMDAxMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgQUZNVF9TMTZfQkUgMHgwMDAwMDAyMAogI2RlZmluZSBBRk1UX1M4IDB4MDAwMDAwNDAKLSNkZWZpbmUgQUZNVF9VMTZfTEUgMHgwMDAwMDA4MCAgCi0jZGVmaW5lIEFGTVRfVTE2X0JFIDB4MDAwMDAxMDAgIAotI2RlZmluZSBBRk1UX01QRUcgMHgwMDAwMDIwMCAgCi0jZGVmaW5lIEFGTVRfQUMzIDB4MDAwMDA0MDAgIAotCisjZGVmaW5lIEFGTVRfVTE2X0xFIDB4MDAwMDAwODAKKyNkZWZpbmUgQUZNVF9VMTZfQkUgMHgwMDAwMDEwMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgQUZNVF9NUEVHIDB4MDAwMDAyMDAKKyNkZWZpbmUgQUZNVF9BQzMgMHgwMDAwMDQwMAogdHlwZWRlZiBzdHJ1Y3QgYXVkaW9fYnVmX2luZm8gewogIGludCBmcmFnbWVudHM7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGludCBmcmFnc3RvdGFsOwogIGludCBmcmFnc2l6ZTsKLQogIGludCBieXRlczsKLQogIH0gYXVkaW9fYnVmX2luZm87Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNORENUTF9EU1BfR0VUT1NQQUNFIF9TSU9SICgnUCcsMTIsIGF1ZGlvX2J1Zl9pbmZvKQogI2RlZmluZSBTTkRDVExfRFNQX0dFVElTUEFDRSBfU0lPUiAoJ1AnLDEzLCBhdWRpb19idWZfaW5mbykKICNkZWZpbmUgU05EQ1RMX0RTUF9OT05CTE9DSyBfU0lPICgnUCcsMTQpCiAjZGVmaW5lIFNORENUTF9EU1BfR0VUQ0FQUyBfU0lPUiAoJ1AnLDE1LCBpbnQpCi0jZGVmaW5lIERTUF9DQVBfUkVWSVNJT04gMHgwMDAwMDBmZiAgCi0jZGVmaW5lIERTUF9DQVBfRFVQTEVYIDB4MDAwMDAxMDAgIAotI2RlZmluZSBEU1BfQ0FQX1JFQUxUSU1FIDB4MDAwMDAyMDAgIAotI2RlZmluZSBEU1BfQ0FQX0JBVENIIDB4MDAwMDA0MDAgIAotCi0jZGVmaW5lIERTUF9DQVBfQ09QUk9DIDB4MDAwMDA4MDAgIAotCi0jZGVmaW5lIERTUF9DQVBfVFJJR0dFUiAweDAwMDAxMDAwICAKLSNkZWZpbmUgRFNQX0NBUF9NTUFQIDB4MDAwMDIwMDAgIAotI2RlZmluZSBEU1BfQ0FQX01VTFRJIDB4MDAwMDQwMDAgIAotI2RlZmluZSBEU1BfQ0FQX0JJTkQgMHgwMDAwODAwMCAgCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIERTUF9DQVBfUkVWSVNJT04gMHgwMDAwMDBmZgorI2RlZmluZSBEU1BfQ0FQX0RVUExFWCAweDAwMDAwMTAwCisjZGVmaW5lIERTUF9DQVBfUkVBTFRJTUUgMHgwMDAwMDIwMAorI2RlZmluZSBEU1BfQ0FQX0JBVENIIDB4MDAwMDA0MDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIERTUF9DQVBfQ09QUk9DIDB4MDAwMDA4MDAKKyNkZWZpbmUgRFNQX0NBUF9UUklHR0VSIDB4MDAwMDEwMDAKKyNkZWZpbmUgRFNQX0NBUF9NTUFQIDB4MDAwMDIwMDAKKyNkZWZpbmUgRFNQX0NBUF9NVUxUSSAweDAwMDA0MDAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBEU1BfQ0FQX0JJTkQgMHgwMDAwODAwMAogI2RlZmluZSBTTkRDVExfRFNQX0dFVFRSSUdHRVIgX1NJT1IgKCdQJywxNiwgaW50KQogI2RlZmluZSBTTkRDVExfRFNQX1NFVFRSSUdHRVIgX1NJT1cgKCdQJywxNiwgaW50KQogI2RlZmluZSBQQ01fRU5BQkxFX0lOUFVUIDB4MDAwMDAwMDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBDTV9FTkFCTEVfT1VUUFVUIDB4MDAwMDAwMDIKLQogdHlwZWRlZiBzdHJ1Y3QgY291bnRfaW5mbyB7CiAgaW50IGJ5dGVzOwogIGludCBibG9ja3M7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGludCBwdHI7CiAgfSBjb3VudF9pbmZvOwotCiAjZGVmaW5lIFNORENUTF9EU1BfR0VUSVBUUiBfU0lPUiAoJ1AnLDE3LCBjb3VudF9pbmZvKQogI2RlZmluZSBTTkRDVExfRFNQX0dFVE9QVFIgX1NJT1IgKCdQJywxOCwgY291bnRfaW5mbykKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHR5cGVkZWYgc3RydWN0IGJ1ZmZtZW1fZGVzYyB7CiAgdW5zaWduZWQgKmJ1ZmZlcjsKICBpbnQgc2l6ZTsKICB9IGJ1ZmZtZW1fZGVzYzsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNORENUTF9EU1BfTUFQSU5CVUYgX1NJT1IgKCdQJywgMTksIGJ1ZmZtZW1fZGVzYykKICNkZWZpbmUgU05EQ1RMX0RTUF9NQVBPVVRCVUYgX1NJT1IgKCdQJywgMjAsIGJ1ZmZtZW1fZGVzYykKICNkZWZpbmUgU05EQ1RMX0RTUF9TRVRTWU5DUk8gX1NJTyAoJ1AnLCAyMSkKICNkZWZpbmUgU05EQ1RMX0RTUF9TRVREVVBMRVggX1NJTyAoJ1AnLCAyMikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNORENUTF9EU1BfR0VUT0RFTEFZIF9TSU9SICgnUCcsIDIzLCBpbnQpCi0KICNkZWZpbmUgU05EQ1RMX0RTUF9HRVRDSEFOTkVMTUFTSyBfU0lPV1IoJ1AnLCA2NCwgaW50KQogI2RlZmluZSBTTkRDVExfRFNQX0JJTkRfQ0hBTk5FTCBfU0lPV1IoJ1AnLCA2NSwgaW50KQogI2RlZmluZSBEU1BfQklORF9RVUVSWSAweDAwMDAwMDAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBEU1BfQklORF9GUk9OVCAweDAwMDAwMDAxCiAjZGVmaW5lIERTUF9CSU5EX1NVUlIgMHgwMDAwMDAwMgogI2RlZmluZSBEU1BfQklORF9DRU5URVJfTEZFIDB4MDAwMDAwMDQKICNkZWZpbmUgRFNQX0JJTkRfSEFORFNFVCAweDAwMDAwMDA4CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBEU1BfQklORF9NSUMgMHgwMDAwMDAxMAogI2RlZmluZSBEU1BfQklORF9NT0RFTTEgMHgwMDAwMDAyMAogI2RlZmluZSBEU1BfQklORF9NT0RFTTIgMHgwMDAwMDA0MAogI2RlZmluZSBEU1BfQklORF9JMlMgMHgwMDAwMDA4MAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRFNQX0JJTkRfU1BESUYgMHgwMDAwMDEwMAotCiAjZGVmaW5lIFNORENUTF9EU1BfU0VUU1BESUYgX1NJT1cgKCdQJywgNjYsIGludCkKICNkZWZpbmUgU05EQ1RMX0RTUF9HRVRTUERJRiBfU0lPUiAoJ1AnLCA2NywgaW50KQogI2RlZmluZSBTUERJRl9QUk8gMHgwMDAxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTUERJRl9OX0FVRCAweDAwMDIKICNkZWZpbmUgU1BESUZfQ09QWSAweDAwMDQKICNkZWZpbmUgU1BESUZfUFJFIDB4MDAwOAogI2RlZmluZSBTUERJRl9DQyAweDA3ZjAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNQRElGX0wgMHgwODAwCiAjZGVmaW5lIFNQRElGX0RSUyAweDQwMDAKICNkZWZpbmUgU1BESUZfViAweDgwMDAKLQogI2RlZmluZSBTTkRDVExfRFNQX1BST0ZJTEUgX1NJT1cgKCdQJywgMjMsIGludCkKLSNkZWZpbmUgQVBGX05PUk1BTCAwICAKLSNkZWZpbmUgQVBGX05FVFdPUksgMSAgCi0jZGVmaW5lIEFQRl9DUFVJTlRFTlMgMiAgCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEFQRl9OT1JNQUwgMAorI2RlZmluZSBBUEZfTkVUV09SSyAxCisjZGVmaW5lIEFQRl9DUFVJTlRFTlMgMgogI2RlZmluZSBTT1VORF9QQ01fUkVBRF9SQVRFIF9TSU9SICgnUCcsIDIsIGludCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNPVU5EX1BDTV9SRUFEX0NIQU5ORUxTIF9TSU9SICgnUCcsIDYsIGludCkKICNkZWZpbmUgU09VTkRfUENNX1JFQURfQklUUyBfU0lPUiAoJ1AnLCA1LCBpbnQpCiAjZGVmaW5lIFNPVU5EX1BDTV9SRUFEX0ZJTFRFUiBfU0lPUiAoJ1AnLCA3LCBpbnQpCi0KICNkZWZpbmUgU09VTkRfUENNX1dSSVRFX0JJVFMgU05EQ1RMX0RTUF9TRVRGTVQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNPVU5EX1BDTV9XUklURV9SQVRFIFNORENUTF9EU1BfU1BFRUQKICNkZWZpbmUgU09VTkRfUENNX1BPU1QgU05EQ1RMX0RTUF9QT1NUCiAjZGVmaW5lIFNPVU5EX1BDTV9SRVNFVCBTTkRDVExfRFNQX1JFU0VUCiAjZGVmaW5lIFNPVU5EX1BDTV9TWU5DIFNORENUTF9EU1BfU1lOQworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU09VTkRfUENNX1NVQkRJVklERSBTTkRDVExfRFNQX1NVQkRJVklERQogI2RlZmluZSBTT1VORF9QQ01fU0VURlJBR01FTlQgU05EQ1RMX0RTUF9TRVRGUkFHTUVOVAogI2RlZmluZSBTT1VORF9QQ01fR0VURk1UUyBTTkRDVExfRFNQX0dFVEZNVFMKICNkZWZpbmUgU09VTkRfUENNX1NFVEZNVCBTTkRDVExfRFNQX1NFVEZNVAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU09VTkRfUENNX0dFVE9TUEFDRSBTTkRDVExfRFNQX0dFVE9TUEFDRQogI2RlZmluZSBTT1VORF9QQ01fR0VUSVNQQUNFIFNORENUTF9EU1BfR0VUSVNQQUNFCiAjZGVmaW5lIFNPVU5EX1BDTV9OT05CTE9DSyBTTkRDVExfRFNQX05PTkJMT0NLCiAjZGVmaW5lIFNPVU5EX1BDTV9HRVRDQVBTIFNORENUTF9EU1BfR0VUQ0FQUworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU09VTkRfUENNX0dFVFRSSUdHRVIgU05EQ1RMX0RTUF9HRVRUUklHR0VSCiAjZGVmaW5lIFNPVU5EX1BDTV9TRVRUUklHR0VSIFNORENUTF9EU1BfU0VUVFJJR0dFUgogI2RlZmluZSBTT1VORF9QQ01fU0VUU1lOQ1JPIFNORENUTF9EU1BfU0VUU1lOQ1JPCiAjZGVmaW5lIFNPVU5EX1BDTV9HRVRJUFRSIFNORENUTF9EU1BfR0VUSVBUUgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU09VTkRfUENNX0dFVE9QVFIgU05EQ1RMX0RTUF9HRVRPUFRSCiAjZGVmaW5lIFNPVU5EX1BDTV9NQVBJTkJVRiBTTkRDVExfRFNQX01BUElOQlVGCiAjZGVmaW5lIFNPVU5EX1BDTV9NQVBPVVRCVUYgU05EQ1RMX0RTUF9NQVBPVVRCVUYKLQogdHlwZWRlZiBzdHJ1Y3QgY29wcl9idWZmZXIgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBpbnQgY29tbWFuZDsKICBpbnQgZmxhZ3M7CiAjZGVmaW5lIENQRl9OT05FIDB4MDAwMAotI2RlZmluZSBDUEZfRklSU1QgMHgwMDAxICAKLSNkZWZpbmUgQ1BGX0xBU1QgMHgwMDAyICAKKyNkZWZpbmUgQ1BGX0ZJUlNUIDB4MDAwMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgQ1BGX0xBU1QgMHgwMDAyCiAgaW50IGxlbjsKICBpbnQgb2ZmczsKLQogIHVuc2lnbmVkIGNoYXIgZGF0YVs0MDAwXTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgfSBjb3ByX2J1ZmZlcjsKLQogdHlwZWRlZiBzdHJ1Y3QgY29wcl9kZWJ1Z19idWYgewogIGludCBjb21tYW5kOwogIGludCBwYXJtMTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgaW50IHBhcm0yOwogIGludCBmbGFnczsKICBpbnQgbGVuOwogIH0gY29wcl9kZWJ1Z19idWY7Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB0eXBlZGVmIHN0cnVjdCBjb3ByX21zZyB7CiAgaW50IGxlbjsKICB1bnNpZ25lZCBjaGFyIGRhdGFbNDAwMF07CiAgfSBjb3ByX21zZzsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU05EQ1RMX0NPUFJfUkVTRVQgX1NJTyAoJ0MnLCAwKQogI2RlZmluZSBTTkRDVExfQ09QUl9MT0FEIF9TSU9XUignQycsIDEsIGNvcHJfYnVmZmVyKQogI2RlZmluZSBTTkRDVExfQ09QUl9SREFUQSBfU0lPV1IoJ0MnLCAyLCBjb3ByX2RlYnVnX2J1ZikKICNkZWZpbmUgU05EQ1RMX0NPUFJfUkNPREUgX1NJT1dSKCdDJywgMywgY29wcl9kZWJ1Z19idWYpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTTkRDVExfQ09QUl9XREFUQSBfU0lPVyAoJ0MnLCA0LCBjb3ByX2RlYnVnX2J1ZikKICNkZWZpbmUgU05EQ1RMX0NPUFJfV0NPREUgX1NJT1cgKCdDJywgNSwgY29wcl9kZWJ1Z19idWYpCiAjZGVmaW5lIFNORENUTF9DT1BSX1JVTiBfU0lPV1IoJ0MnLCA2LCBjb3ByX2RlYnVnX2J1ZikKICNkZWZpbmUgU05EQ1RMX0NPUFJfSEFMVCBfU0lPV1IoJ0MnLCA3LCBjb3ByX2RlYnVnX2J1ZikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNORENUTF9DT1BSX1NFTkRNU0cgX1NJT1dSKCdDJywgOCwgY29wcl9tc2cpCiAjZGVmaW5lIFNORENUTF9DT1BSX1JDVk1TRyBfU0lPUiAoJ0MnLCA5LCBjb3ByX21zZykKLQogI2RlZmluZSBTT1VORF9NSVhFUl9OUkRFVklDRVMgMjUKICNkZWZpbmUgU09VTkRfTUlYRVJfVk9MVU1FIDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNPVU5EX01JWEVSX0JBU1MgMQogI2RlZmluZSBTT1VORF9NSVhFUl9UUkVCTEUgMgogI2RlZmluZSBTT1VORF9NSVhFUl9TWU5USCAzCiAjZGVmaW5lIFNPVU5EX01JWEVSX1BDTSA0CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTT1VORF9NSVhFUl9TUEVBS0VSIDUKICNkZWZpbmUgU09VTkRfTUlYRVJfTElORSA2CiAjZGVmaW5lIFNPVU5EX01JWEVSX01JQyA3CiAjZGVmaW5lIFNPVU5EX01JWEVSX0NEIDgKLSNkZWZpbmUgU09VTkRfTUlYRVJfSU1JWCA5ICAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFNPVU5EX01JWEVSX0lNSVggOQogI2RlZmluZSBTT1VORF9NSVhFUl9BTFRQQ00gMTAKLSNkZWZpbmUgU09VTkRfTUlYRVJfUkVDTEVWIDExICAKLSNkZWZpbmUgU09VTkRfTUlYRVJfSUdBSU4gMTIgIAotI2RlZmluZSBTT1VORF9NSVhFUl9PR0FJTiAxMyAgCi0KLSNkZWZpbmUgU09VTkRfTUlYRVJfTElORTEgMTQgIAotI2RlZmluZSBTT1VORF9NSVhFUl9MSU5FMiAxNSAgCi0jZGVmaW5lIFNPVU5EX01JWEVSX0xJTkUzIDE2ICAKLSNkZWZpbmUgU09VTkRfTUlYRVJfRElHSVRBTDEgMTcgIAotI2RlZmluZSBTT1VORF9NSVhFUl9ESUdJVEFMMiAxOCAgCi0jZGVmaW5lIFNPVU5EX01JWEVSX0RJR0lUQUwzIDE5ICAKLSNkZWZpbmUgU09VTkRfTUlYRVJfUEhPTkVJTiAyMCAgCi0jZGVmaW5lIFNPVU5EX01JWEVSX1BIT05FT1VUIDIxICAKLSNkZWZpbmUgU09VTkRfTUlYRVJfVklERU8gMjIgIAotI2RlZmluZSBTT1VORF9NSVhFUl9SQURJTyAyMyAgCi0jZGVmaW5lIFNPVU5EX01JWEVSX01PTklUT1IgMjQgIAotCisjZGVmaW5lIFNPVU5EX01JWEVSX1JFQ0xFViAxMQorI2RlZmluZSBTT1VORF9NSVhFUl9JR0FJTiAxMgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgU09VTkRfTUlYRVJfT0dBSU4gMTMKKyNkZWZpbmUgU09VTkRfTUlYRVJfTElORTEgMTQKKyNkZWZpbmUgU09VTkRfTUlYRVJfTElORTIgMTUKKyNkZWZpbmUgU09VTkRfTUlYRVJfTElORTMgMTYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFNPVU5EX01JWEVSX0RJR0lUQUwxIDE3CisjZGVmaW5lIFNPVU5EX01JWEVSX0RJR0lUQUwyIDE4CisjZGVmaW5lIFNPVU5EX01JWEVSX0RJR0lUQUwzIDE5CisjZGVmaW5lIFNPVU5EX01JWEVSX1BIT05FSU4gMjAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFNPVU5EX01JWEVSX1BIT05FT1VUIDIxCisjZGVmaW5lIFNPVU5EX01JWEVSX1ZJREVPIDIyCisjZGVmaW5lIFNPVU5EX01JWEVSX1JBRElPIDIzCisjZGVmaW5lIFNPVU5EX01JWEVSX01PTklUT1IgMjQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNPVU5EX09OT0ZGX01JTiAyOAogI2RlZmluZSBTT1VORF9PTk9GRl9NQVggMzAKLQogI2RlZmluZSBTT1VORF9NSVhFUl9OT05FIDMxCi0KICNkZWZpbmUgU09VTkRfTUlYRVJfRU5IQU5DRSBTT1VORF9NSVhFUl9OT05FCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTT1VORF9NSVhFUl9NVVRFIFNPVU5EX01JWEVSX05PTkUKICNkZWZpbmUgU09VTkRfTUlYRVJfTE9VRCBTT1VORF9NSVhFUl9OT05FCi0KICNkZWZpbmUgU09VTkRfREVWSUNFX0xBQkVMUyB7IlZvbCAgIiwgIkJhc3MgIiwgIlRyZWJsIiwgIlN5bnRoIiwgIlBjbSAgIiwgIlNwa3IgIiwgIkxpbmUgIiwgICAiTWljICAiLCAiQ0QgICAiLCAiTWl4ICAiLCAiUGNtMiAiLCAiUmVjICAiLCAiSUdhaW4iLCAiT0dhaW4iLCAgICJMaW5lMSIsICJMaW5lMiIsICJMaW5lMyIsICJEaWdpdGFsMSIsICJEaWdpdGFsMiIsICJEaWdpdGFsMyIsICAgIlBob25lSW4iLCAiUGhvbmVPdXQiLCAiVmlkZW8iLCAiUmFkaW8iLCAiTW9uaXRvciJ9Ci0KICNkZWZpbmUgU09VTkRfREVWSUNFX05BTUVTIHsidm9sIiwgImJhc3MiLCAidHJlYmxlIiwgInN5bnRoIiwgInBjbSIsICJzcGVha2VyIiwgImxpbmUiLCAgICJtaWMiLCAiY2QiLCAibWl4IiwgInBjbTIiLCAicmVjIiwgImlnYWluIiwgIm9nYWluIiwgICAibGluZTEiLCAibGluZTIiLCAibGluZTMiLCAiZGlnMSIsICJkaWcyIiwgImRpZzMiLCAgICJwaGluIiwgInBob3V0IiwgInZpZGVvIiwgInJhZGlvIiwgIm1vbml0b3IifQotCi0jZGVmaW5lIFNPVU5EX01JWEVSX1JFQ1NSQyAweGZmICAKLSNkZWZpbmUgU09VTkRfTUlYRVJfREVWTUFTSyAweGZlICAKLSNkZWZpbmUgU09VTkRfTUlYRVJfUkVDTUFTSyAweGZkICAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFNPVU5EX01JWEVSX1JFQ1NSQyAweGZmCisjZGVmaW5lIFNPVU5EX01JWEVSX0RFVk1BU0sgMHhmZQorI2RlZmluZSBTT1VORF9NSVhFUl9SRUNNQVNLIDB4ZmQKICNkZWZpbmUgU09VTkRfTUlYRVJfQ0FQUyAweGZjCi0jZGVmaW5lIFNPVU5EX0NBUF9FWENMX0lOUFVUIDB4MDAwMDAwMDEgIAotI2RlZmluZSBTT1VORF9NSVhFUl9TVEVSRU9ERVZTIDB4ZmIgIAotI2RlZmluZSBTT1VORF9NSVhFUl9PVVRTUkMgMHhmYSAgCi0jZGVmaW5lIFNPVU5EX01JWEVSX09VVE1BU0sgMHhmOSAgCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFNPVU5EX0NBUF9FWENMX0lOUFVUIDB4MDAwMDAwMDEKKyNkZWZpbmUgU09VTkRfTUlYRVJfU1RFUkVPREVWUyAweGZiCisjZGVmaW5lIFNPVU5EX01JWEVSX09VVFNSQyAweGZhCisjZGVmaW5lIFNPVU5EX01JWEVSX09VVE1BU0sgMHhmOQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU09VTkRfTUFTS19WT0xVTUUgKDEgPDwgU09VTkRfTUlYRVJfVk9MVU1FKQogI2RlZmluZSBTT1VORF9NQVNLX0JBU1MgKDEgPDwgU09VTkRfTUlYRVJfQkFTUykKICNkZWZpbmUgU09VTkRfTUFTS19UUkVCTEUgKDEgPDwgU09VTkRfTUlYRVJfVFJFQkxFKQogI2RlZmluZSBTT1VORF9NQVNLX1NZTlRIICgxIDw8IFNPVU5EX01JWEVSX1NZTlRIKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU09VTkRfTUFTS19QQ00gKDEgPDwgU09VTkRfTUlYRVJfUENNKQogI2RlZmluZSBTT1VORF9NQVNLX1NQRUFLRVIgKDEgPDwgU09VTkRfTUlYRVJfU1BFQUtFUikKICNkZWZpbmUgU09VTkRfTUFTS19MSU5FICgxIDw8IFNPVU5EX01JWEVSX0xJTkUpCiAjZGVmaW5lIFNPVU5EX01BU0tfTUlDICgxIDw8IFNPVU5EX01JWEVSX01JQykKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNPVU5EX01BU0tfQ0QgKDEgPDwgU09VTkRfTUlYRVJfQ0QpCiAjZGVmaW5lIFNPVU5EX01BU0tfSU1JWCAoMSA8PCBTT1VORF9NSVhFUl9JTUlYKQogI2RlZmluZSBTT1VORF9NQVNLX0FMVFBDTSAoMSA8PCBTT1VORF9NSVhFUl9BTFRQQ00pCiAjZGVmaW5lIFNPVU5EX01BU0tfUkVDTEVWICgxIDw8IFNPVU5EX01JWEVSX1JFQ0xFVikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNPVU5EX01BU0tfSUdBSU4gKDEgPDwgU09VTkRfTUlYRVJfSUdBSU4pCiAjZGVmaW5lIFNPVU5EX01BU0tfT0dBSU4gKDEgPDwgU09VTkRfTUlYRVJfT0dBSU4pCiAjZGVmaW5lIFNPVU5EX01BU0tfTElORTEgKDEgPDwgU09VTkRfTUlYRVJfTElORTEpCiAjZGVmaW5lIFNPVU5EX01BU0tfTElORTIgKDEgPDwgU09VTkRfTUlYRVJfTElORTIpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTT1VORF9NQVNLX0xJTkUzICgxIDw8IFNPVU5EX01JWEVSX0xJTkUzKQogI2RlZmluZSBTT1VORF9NQVNLX0RJR0lUQUwxICgxIDw8IFNPVU5EX01JWEVSX0RJR0lUQUwxKQogI2RlZmluZSBTT1VORF9NQVNLX0RJR0lUQUwyICgxIDw8IFNPVU5EX01JWEVSX0RJR0lUQUwyKQogI2RlZmluZSBTT1VORF9NQVNLX0RJR0lUQUwzICgxIDw8IFNPVU5EX01JWEVSX0RJR0lUQUwzKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU09VTkRfTUFTS19QSE9ORUlOICgxIDw8IFNPVU5EX01JWEVSX1BIT05FSU4pCiAjZGVmaW5lIFNPVU5EX01BU0tfUEhPTkVPVVQgKDEgPDwgU09VTkRfTUlYRVJfUEhPTkVPVVQpCiAjZGVmaW5lIFNPVU5EX01BU0tfUkFESU8gKDEgPDwgU09VTkRfTUlYRVJfUkFESU8pCiAjZGVmaW5lIFNPVU5EX01BU0tfVklERU8gKDEgPDwgU09VTkRfTUlYRVJfVklERU8pCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTT1VORF9NQVNLX01PTklUT1IgKDEgPDwgU09VTkRfTUlYRVJfTU9OSVRPUikKLQogI2RlZmluZSBTT1VORF9NQVNLX01VVEUgKDEgPDwgU09VTkRfTUlYRVJfTVVURSkKICNkZWZpbmUgU09VTkRfTUFTS19FTkhBTkNFICgxIDw8IFNPVU5EX01JWEVSX0VOSEFOQ0UpCiAjZGVmaW5lIFNPVU5EX01BU0tfTE9VRCAoMSA8PCBTT1VORF9NSVhFUl9MT1VEKQotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNSVhFUl9SRUFEKGRldikgX1NJT1IoJ00nLCBkZXYsIGludCkKICNkZWZpbmUgU09VTkRfTUlYRVJfUkVBRF9WT0xVTUUgTUlYRVJfUkVBRChTT1VORF9NSVhFUl9WT0xVTUUpCiAjZGVmaW5lIFNPVU5EX01JWEVSX1JFQURfQkFTUyBNSVhFUl9SRUFEKFNPVU5EX01JWEVSX0JBU1MpCiAjZGVmaW5lIFNPVU5EX01JWEVSX1JFQURfVFJFQkxFIE1JWEVSX1JFQUQoU09VTkRfTUlYRVJfVFJFQkxFKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU09VTkRfTUlYRVJfUkVBRF9TWU5USCBNSVhFUl9SRUFEKFNPVU5EX01JWEVSX1NZTlRIKQogI2RlZmluZSBTT1VORF9NSVhFUl9SRUFEX1BDTSBNSVhFUl9SRUFEKFNPVU5EX01JWEVSX1BDTSkKICNkZWZpbmUgU09VTkRfTUlYRVJfUkVBRF9TUEVBS0VSIE1JWEVSX1JFQUQoU09VTkRfTUlYRVJfU1BFQUtFUikKICNkZWZpbmUgU09VTkRfTUlYRVJfUkVBRF9MSU5FIE1JWEVSX1JFQUQoU09VTkRfTUlYRVJfTElORSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNPVU5EX01JWEVSX1JFQURfTUlDIE1JWEVSX1JFQUQoU09VTkRfTUlYRVJfTUlDKQogI2RlZmluZSBTT1VORF9NSVhFUl9SRUFEX0NEIE1JWEVSX1JFQUQoU09VTkRfTUlYRVJfQ0QpCiAjZGVmaW5lIFNPVU5EX01JWEVSX1JFQURfSU1JWCBNSVhFUl9SRUFEKFNPVU5EX01JWEVSX0lNSVgpCiAjZGVmaW5lIFNPVU5EX01JWEVSX1JFQURfQUxUUENNIE1JWEVSX1JFQUQoU09VTkRfTUlYRVJfQUxUUENNKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU09VTkRfTUlYRVJfUkVBRF9SRUNMRVYgTUlYRVJfUkVBRChTT1VORF9NSVhFUl9SRUNMRVYpCiAjZGVmaW5lIFNPVU5EX01JWEVSX1JFQURfSUdBSU4gTUlYRVJfUkVBRChTT1VORF9NSVhFUl9JR0FJTikKICNkZWZpbmUgU09VTkRfTUlYRVJfUkVBRF9PR0FJTiBNSVhFUl9SRUFEKFNPVU5EX01JWEVSX09HQUlOKQogI2RlZmluZSBTT1VORF9NSVhFUl9SRUFEX0xJTkUxIE1JWEVSX1JFQUQoU09VTkRfTUlYRVJfTElORTEpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTT1VORF9NSVhFUl9SRUFEX0xJTkUyIE1JWEVSX1JFQUQoU09VTkRfTUlYRVJfTElORTIpCiAjZGVmaW5lIFNPVU5EX01JWEVSX1JFQURfTElORTMgTUlYRVJfUkVBRChTT1VORF9NSVhFUl9MSU5FMykKLQogI2RlZmluZSBTT1VORF9NSVhFUl9SRUFEX01VVEUgTUlYRVJfUkVBRChTT1VORF9NSVhFUl9NVVRFKQogI2RlZmluZSBTT1VORF9NSVhFUl9SRUFEX0VOSEFOQ0UgTUlYRVJfUkVBRChTT1VORF9NSVhFUl9FTkhBTkNFKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU09VTkRfTUlYRVJfUkVBRF9MT1VEIE1JWEVSX1JFQUQoU09VTkRfTUlYRVJfTE9VRCkKLQogI2RlZmluZSBTT1VORF9NSVhFUl9SRUFEX1JFQ1NSQyBNSVhFUl9SRUFEKFNPVU5EX01JWEVSX1JFQ1NSQykKICNkZWZpbmUgU09VTkRfTUlYRVJfUkVBRF9ERVZNQVNLIE1JWEVSX1JFQUQoU09VTkRfTUlYRVJfREVWTUFTSykKICNkZWZpbmUgU09VTkRfTUlYRVJfUkVBRF9SRUNNQVNLIE1JWEVSX1JFQUQoU09VTkRfTUlYRVJfUkVDTUFTSykKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNPVU5EX01JWEVSX1JFQURfU1RFUkVPREVWUyBNSVhFUl9SRUFEKFNPVU5EX01JWEVSX1NURVJFT0RFVlMpCiAjZGVmaW5lIFNPVU5EX01JWEVSX1JFQURfQ0FQUyBNSVhFUl9SRUFEKFNPVU5EX01JWEVSX0NBUFMpCi0KICNkZWZpbmUgTUlYRVJfV1JJVEUoZGV2KSBfU0lPV1IoJ00nLCBkZXYsIGludCkKICNkZWZpbmUgU09VTkRfTUlYRVJfV1JJVEVfVk9MVU1FIE1JWEVSX1dSSVRFKFNPVU5EX01JWEVSX1ZPTFVNRSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNPVU5EX01JWEVSX1dSSVRFX0JBU1MgTUlYRVJfV1JJVEUoU09VTkRfTUlYRVJfQkFTUykKICNkZWZpbmUgU09VTkRfTUlYRVJfV1JJVEVfVFJFQkxFIE1JWEVSX1dSSVRFKFNPVU5EX01JWEVSX1RSRUJMRSkKICNkZWZpbmUgU09VTkRfTUlYRVJfV1JJVEVfU1lOVEggTUlYRVJfV1JJVEUoU09VTkRfTUlYRVJfU1lOVEgpCiAjZGVmaW5lIFNPVU5EX01JWEVSX1dSSVRFX1BDTSBNSVhFUl9XUklURShTT1VORF9NSVhFUl9QQ00pCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTT1VORF9NSVhFUl9XUklURV9TUEVBS0VSIE1JWEVSX1dSSVRFKFNPVU5EX01JWEVSX1NQRUFLRVIpCiAjZGVmaW5lIFNPVU5EX01JWEVSX1dSSVRFX0xJTkUgTUlYRVJfV1JJVEUoU09VTkRfTUlYRVJfTElORSkKICNkZWZpbmUgU09VTkRfTUlYRVJfV1JJVEVfTUlDIE1JWEVSX1dSSVRFKFNPVU5EX01JWEVSX01JQykKICNkZWZpbmUgU09VTkRfTUlYRVJfV1JJVEVfQ0QgTUlYRVJfV1JJVEUoU09VTkRfTUlYRVJfQ0QpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTT1VORF9NSVhFUl9XUklURV9JTUlYIE1JWEVSX1dSSVRFKFNPVU5EX01JWEVSX0lNSVgpCiAjZGVmaW5lIFNPVU5EX01JWEVSX1dSSVRFX0FMVFBDTSBNSVhFUl9XUklURShTT1VORF9NSVhFUl9BTFRQQ00pCiAjZGVmaW5lIFNPVU5EX01JWEVSX1dSSVRFX1JFQ0xFViBNSVhFUl9XUklURShTT1VORF9NSVhFUl9SRUNMRVYpCiAjZGVmaW5lIFNPVU5EX01JWEVSX1dSSVRFX0lHQUlOIE1JWEVSX1dSSVRFKFNPVU5EX01JWEVSX0lHQUlOKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU09VTkRfTUlYRVJfV1JJVEVfT0dBSU4gTUlYRVJfV1JJVEUoU09VTkRfTUlYRVJfT0dBSU4pCiAjZGVmaW5lIFNPVU5EX01JWEVSX1dSSVRFX0xJTkUxIE1JWEVSX1dSSVRFKFNPVU5EX01JWEVSX0xJTkUxKQogI2RlZmluZSBTT1VORF9NSVhFUl9XUklURV9MSU5FMiBNSVhFUl9XUklURShTT1VORF9NSVhFUl9MSU5FMikKICNkZWZpbmUgU09VTkRfTUlYRVJfV1JJVEVfTElORTMgTUlYRVJfV1JJVEUoU09VTkRfTUlYRVJfTElORTMpCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNPVU5EX01JWEVSX1dSSVRFX01VVEUgTUlYRVJfV1JJVEUoU09VTkRfTUlYRVJfTVVURSkKICNkZWZpbmUgU09VTkRfTUlYRVJfV1JJVEVfRU5IQU5DRSBNSVhFUl9XUklURShTT1VORF9NSVhFUl9FTkhBTkNFKQogI2RlZmluZSBTT1VORF9NSVhFUl9XUklURV9MT1VEIE1JWEVSX1dSSVRFKFNPVU5EX01JWEVSX0xPVUQpCi0KICNkZWZpbmUgU09VTkRfTUlYRVJfV1JJVEVfUkVDU1JDIE1JWEVSX1dSSVRFKFNPVU5EX01JWEVSX1JFQ1NSQykKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHR5cGVkZWYgc3RydWN0IG1peGVyX2luZm8KIHsKICBjaGFyIGlkWzE2XTsKICBjaGFyIG5hbWVbMzJdOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBpbnQgbW9kaWZ5X2NvdW50ZXI7CiAgaW50IGZpbGxlcnNbMTBdOwogfSBtaXhlcl9pbmZvOwotCiB0eXBlZGVmIHN0cnVjdCBfb2xkX21peGVyX2luZm8KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB7CiAgY2hhciBpZFsxNl07CiAgY2hhciBuYW1lWzMyXTsKIH0gX29sZF9taXhlcl9pbmZvOwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTT1VORF9NSVhFUl9JTkZPIF9TSU9SICgnTScsIDEwMSwgbWl4ZXJfaW5mbykKICNkZWZpbmUgU09VTkRfT0xEX01JWEVSX0lORk8gX1NJT1IgKCdNJywgMTAxLCBfb2xkX21peGVyX2luZm8pCi0KIHR5cGVkZWYgdW5zaWduZWQgY2hhciBtaXhlcl9yZWNvcmRbMTI4XTsKLQogI2RlZmluZSBTT1VORF9NSVhFUl9BQ0NFU1MgX1NJT1dSKCdNJywgMTAyLCBtaXhlcl9yZWNvcmQpCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNPVU5EX01JWEVSX0FHQyBfU0lPV1IoJ00nLCAxMDMsIGludCkKICNkZWZpbmUgU09VTkRfTUlYRVJfM0RTRSBfU0lPV1IoJ00nLCAxMDQsIGludCkKLQogI2RlZmluZSBTT1VORF9NSVhFUl9QUklWQVRFMSBfU0lPV1IoJ00nLCAxMTEsIGludCkKICNkZWZpbmUgU09VTkRfTUlYRVJfUFJJVkFURTIgX1NJT1dSKCdNJywgMTEyLCBpbnQpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTT1VORF9NSVhFUl9QUklWQVRFMyBfU0lPV1IoJ00nLCAxMTMsIGludCkKICNkZWZpbmUgU09VTkRfTUlYRVJfUFJJVkFURTQgX1NJT1dSKCdNJywgMTE0LCBpbnQpCiAjZGVmaW5lIFNPVU5EX01JWEVSX1BSSVZBVEU1IF9TSU9XUignTScsIDExNSwgaW50KQotCiB0eXBlZGVmIHN0cnVjdCBtaXhlcl92b2xfdGFibGUgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBpbnQgbnVtOwogIGNoYXIgbmFtZVszMl07CiAgaW50IGxldmVsc1szMl07CiB9IG1peGVyX3ZvbF90YWJsZTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU09VTkRfTUlYRVJfR0VUTEVWRUxTIF9TSU9XUignTScsIDExNiwgbWl4ZXJfdm9sX3RhYmxlKQogI2RlZmluZSBTT1VORF9NSVhFUl9TRVRMRVZFTFMgX1NJT1dSKCdNJywgMTE3LCBtaXhlcl92b2xfdGFibGUpCi0KICNkZWZpbmUgT1NTX0dFVFZFUlNJT04gX1NJT1IgKCdNJywgMTE4LCBpbnQpCi0KICNkZWZpbmUgRVZfU0VRX0xPQ0FMIDB4ODAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEVWX1RJTUlORyAweDgxCiAjZGVmaW5lIEVWX0NITl9DT01NT04gMHg5MgogI2RlZmluZSBFVl9DSE5fVk9JQ0UgMHg5MwogI2RlZmluZSBFVl9TWVNFWCAweDk0Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1JRElfTk9URU9GRiAweDgwCiAjZGVmaW5lIE1JRElfTk9URU9OIDB4OTAKICNkZWZpbmUgTUlESV9LRVlfUFJFU1NVUkUgMHhBMAotCiAjZGVmaW5lIE1JRElfQ1RMX0NIQU5HRSAweEIwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNSURJX1BHTV9DSEFOR0UgMHhDMAogI2RlZmluZSBNSURJX0NITl9QUkVTU1VSRSAweEQwCiAjZGVmaW5lIE1JRElfUElUQ0hfQkVORCAweEUwCi0KICNkZWZpbmUgTUlESV9TWVNURU1fUFJFRklYIDB4RjAKLQotI2RlZmluZSBUTVJfV0FJVF9SRUwgMSAgCi0jZGVmaW5lIFRNUl9XQUlUX0FCUyAyICAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRNUl9XQUlUX1JFTCAxCisjZGVmaW5lIFRNUl9XQUlUX0FCUyAyCiAjZGVmaW5lIFRNUl9TVE9QIDMKICNkZWZpbmUgVE1SX1NUQVJUIDQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFRNUl9DT05USU5VRSA1CiAjZGVmaW5lIFRNUl9URU1QTyA2CiAjZGVmaW5lIFRNUl9FQ0hPIDgKLSNkZWZpbmUgVE1SX0NMT0NLIDkgIAotI2RlZmluZSBUTVJfU1BQIDEwICAKLSNkZWZpbmUgVE1SX1RJTUVTSUcgMTEgIAotCisjZGVmaW5lIFRNUl9DTE9DSyA5CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUTVJfU1BQIDEwCisjZGVmaW5lIFRNUl9USU1FU0lHIDExCiAjZGVmaW5lIExPQ0xfU1RBUlRBVURJTyAxCi0KICNpZiAhZGVmaW5lZChfX0tFUk5FTF9fKSAmJiAhZGVmaW5lZChLRVJORUwpICYmICFkZWZpbmVkKElOS0VSTkVMKSAmJiAhZGVmaW5lZChfS0VSTkVMKSB8fCBkZWZpbmVkKFVTRV9TRVFfTUFDUk9TKQotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTRVFfREVDTEFSRUJVRigpIFNFUV9VU0VfRVhUQlVGKCkKLQogI2RlZmluZSBTRVFfUE1fREVGSU5FUyBpbnQgX19mb29fYmFyX19fCiAjaWZkZWYgT1NTTElCCiAjZGVmaW5lIFNFUV9VU0VfRVhUQlVGKCkgICBleHRlcm4gdW5zaWduZWQgY2hhciAqX3NlcWJ1ZjsgICBleHRlcm4gaW50IF9zZXFidWZsZW47ZXh0ZXJuIGludCBfc2VxYnVmcHRyCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTRVFfREVGSU5FQlVGKGxlbikgU0VRX1VTRV9FWFRCVUYoKTtzdGF0aWMgaW50IF9yZXF1ZXN0ZWRfc2VxYnVmbGVuPWxlbgogI2RlZmluZSBfU0VRX0FEVkJVRihsZW4pIE9TU19zZXFfYWR2YnVmKGxlbiwgc2VxZmQsIF9zZXFidWYsIF9zZXFidWZsZW4pCiAjZGVmaW5lIF9TRVFfTkVFREJVRihsZW4pIE9TU19zZXFfbmVlZGJ1ZihsZW4sIHNlcWZkLCBfc2VxYnVmLCBfc2VxYnVmbGVuKQogI2RlZmluZSBTRVFfRFVNUEJVRigpIE9TU19zZXFidWZfZHVtcChzZXFmZCwgX3NlcWJ1ZiwgX3NlcWJ1ZmxlbikKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU0VRX0xPQURfR01JTlNUUihkZXYsIGluc3RyKSAgIE9TU19wYXRjaF9jYWNoaW5nKGRldiwgLTEsIGluc3RyLCBzZXFmZCwgX3NlcWJ1ZiwgX3NlcWJ1ZmxlbikKICNkZWZpbmUgU0VRX0xPQURfR01EUlVNKGRldiwgZHJ1bSkgICBPU1NfZHJ1bV9jYWNoaW5nKGRldiwgLTEsIGRydW0sIHNlcWZkLCBfc2VxYnVmLCBfc2VxYnVmbGVuKQogI2Vsc2UKLQogI2RlZmluZSBTRVFfTE9BRF9HTUlOU1RSKGRldiwgaW5zdHIpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTRVFfTE9BRF9HTURSVU0oZGV2LCBkcnVtKQotCiAjZGVmaW5lIFNFUV9VU0VfRVhUQlVGKCkgICBleHRlcm4gdW5zaWduZWQgY2hhciBfc2VxYnVmW107ICAgZXh0ZXJuIGludCBfc2VxYnVmbGVuO2V4dGVybiBpbnQgX3NlcWJ1ZnB0cgotCiAjaWZuZGVmIFVTRV9TSU1QTEVfTUFDUk9TCi0KICNkZWZpbmUgU0VRX0RFRklORUJVRihsZW4pIHVuc2lnbmVkIGNoYXIgX3NlcWJ1ZltsZW5dOyBpbnQgX3NlcWJ1ZmxlbiA9IGxlbjtpbnQgX3NlcWJ1ZnB0ciA9IDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9TRVFfTkVFREJVRihsZW4pIGlmICgoX3NlcWJ1ZnB0cisobGVuKSkgPiBfc2VxYnVmbGVuKSBzZXFidWZfZHVtcCgpCiAjZGVmaW5lIF9TRVFfQURWQlVGKGxlbikgX3NlcWJ1ZnB0ciArPSBsZW4KICNkZWZpbmUgU0VRX0RVTVBCVUYgc2VxYnVmX2R1bXAKICNlbHNlCi0KLSNkZWZpbmUgX1NFUV9ORUVEQlVGKGxlbikgIAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgX1NFUV9ORUVEQlVGKGxlbikKICNlbmRpZgogI2VuZGlmCi0KICNkZWZpbmUgU0VRX1ZPTFVNRV9NT0RFKGRldiwgbW9kZSkge19TRVFfTkVFREJVRig4KTsgIF9zZXFidWZbX3NlcWJ1ZnB0cl0gPSBTRVFfRVhURU5ERUQ7ICBfc2VxYnVmW19zZXFidWZwdHIrMV0gPSBTRVFfVk9MTU9ERTsgIF9zZXFidWZbX3NlcWJ1ZnB0cisyXSA9IChkZXYpOyAgX3NlcWJ1Zltfc2VxYnVmcHRyKzNdID0gKG1vZGUpOyAgX3NlcWJ1Zltfc2VxYnVmcHRyKzRdID0gMDsgIF9zZXFidWZbX3NlcWJ1ZnB0cis1XSA9IDA7ICBfc2VxYnVmW19zZXFidWZwdHIrNl0gPSAwOyAgX3NlcWJ1Zltfc2VxYnVmcHRyKzddID0gMDsgIF9TRVFfQURWQlVGKDgpO30KLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX0NITl9WT0lDRShkZXYsIGV2ZW50LCBjaG4sIG5vdGUsIHBhcm0pICAge19TRVFfTkVFREJVRig4KTsgIF9zZXFidWZbX3NlcWJ1ZnB0cl0gPSBFVl9DSE5fVk9JQ0U7ICBfc2VxYnVmW19zZXFidWZwdHIrMV0gPSAoZGV2KTsgIF9zZXFidWZbX3NlcWJ1ZnB0cisyXSA9IChldmVudCk7ICBfc2VxYnVmW19zZXFidWZwdHIrM10gPSAoY2huKTsgIF9zZXFidWZbX3NlcWJ1ZnB0cis0XSA9IChub3RlKTsgIF9zZXFidWZbX3NlcWJ1ZnB0cis1XSA9IChwYXJtKTsgIF9zZXFidWZbX3NlcWJ1ZnB0cis2XSA9ICgwKTsgIF9zZXFidWZbX3NlcWJ1ZnB0cis3XSA9IDA7ICBfU0VRX0FEVkJVRig4KTt9Ci0KICNkZWZpbmUgU0VRX1NUQVJUX05PVEUoZGV2LCBjaG4sIG5vdGUsIHZvbCkgICBfQ0hOX1ZPSUNFKGRldiwgTUlESV9OT1RFT04sIGNobiwgbm90ZSwgdm9sKQotCiAjZGVmaW5lIFNFUV9TVE9QX05PVEUoZGV2LCBjaG4sIG5vdGUsIHZvbCkgICBfQ0hOX1ZPSUNFKGRldiwgTUlESV9OT1RFT0ZGLCBjaG4sIG5vdGUsIHZvbCkKLQogI2RlZmluZSBTRVFfS0VZX1BSRVNTVVJFKGRldiwgY2huLCBub3RlLCBwcmVzc3VyZSkgICBfQ0hOX1ZPSUNFKGRldiwgTUlESV9LRVlfUFJFU1NVUkUsIGNobiwgbm90ZSwgcHJlc3N1cmUpCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9DSE5fQ09NTU9OKGRldiwgZXZlbnQsIGNobiwgcDEsIHAyLCB3MTQpICAge19TRVFfTkVFREJVRig4KTsgIF9zZXFidWZbX3NlcWJ1ZnB0cl0gPSBFVl9DSE5fQ09NTU9OOyAgX3NlcWJ1Zltfc2VxYnVmcHRyKzFdID0gKGRldik7ICBfc2VxYnVmW19zZXFidWZwdHIrMl0gPSAoZXZlbnQpOyAgX3NlcWJ1Zltfc2VxYnVmcHRyKzNdID0gKGNobik7ICBfc2VxYnVmW19zZXFidWZwdHIrNF0gPSAocDEpOyAgX3NlcWJ1Zltfc2VxYnVmcHRyKzVdID0gKHAyKTsgICooc2hvcnQgKikmX3NlcWJ1Zltfc2VxYnVmcHRyKzZdID0gKHcxNCk7ICBfU0VRX0FEVkJVRig4KTt9Ci0KICNkZWZpbmUgU0VRX1NZU0VYKGRldiwgYnVmLCBsZW4pICAge2ludCBpaSwgbGw9KGxlbik7ICAgdW5zaWduZWQgY2hhciAqYnVmcD1idWY7ICBpZiAobGw+NilsbD02OyAgX1NFUV9ORUVEQlVGKDgpOyAgX3NlcWJ1Zltfc2VxYnVmcHRyXSA9IEVWX1NZU0VYOyAgX3NlcWJ1Zltfc2VxYnVmcHRyKzFdID0gKGRldik7ICBmb3IoaWk9MDtpaTxsbDtpaSsrKSAgX3NlcWJ1Zltfc2VxYnVmcHRyK2lpKzJdID0gYnVmcFtpaV07ICBmb3IoaWk9bGw7aWk8NjtpaSsrKSAgX3NlcWJ1Zltfc2VxYnVmcHRyK2lpKzJdID0gMHhmZjsgIF9TRVFfQURWQlVGKDgpO30KLQogI2RlZmluZSBTRVFfQ0hOX1BSRVNTVVJFKGRldiwgY2huLCBwcmVzc3VyZSkgICBfQ0hOX0NPTU1PTihkZXYsIE1JRElfQ0hOX1BSRVNTVVJFLCBjaG4sIHByZXNzdXJlLCAwLCAwKQotCiAjZGVmaW5lIFNFUV9TRVRfUEFUQ0ggU0VRX1BHTV9DSEFOR0UKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjaWZkZWYgT1NTTElCCiAjZGVmaW5lIFNFUV9QR01fQ0hBTkdFKGRldiwgY2huLCBwYXRjaCkgICB7T1NTX3BhdGNoX2NhY2hpbmcoZGV2LCBjaG4sIHBhdGNoLCBzZXFmZCwgX3NlcWJ1ZiwgX3NlcWJ1Zmxlbik7ICAgX0NITl9DT01NT04oZGV2LCBNSURJX1BHTV9DSEFOR0UsIGNobiwgcGF0Y2gsIDAsIDApO30KICNlbHNlCiAjZGVmaW5lIFNFUV9QR01fQ0hBTkdFKGRldiwgY2huLCBwYXRjaCkgICBfQ0hOX0NPTU1PTihkZXYsIE1JRElfUEdNX0NIQU5HRSwgY2huLCBwYXRjaCwgMCwgMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZW5kaWYKLQogI2RlZmluZSBTRVFfQ09OVFJPTChkZXYsIGNobiwgY29udHJvbGxlciwgdmFsdWUpICAgX0NITl9DT01NT04oZGV2LCBNSURJX0NUTF9DSEFOR0UsIGNobiwgY29udHJvbGxlciwgMCwgdmFsdWUpCi0KICNkZWZpbmUgU0VRX0JFTkRFUihkZXYsIGNobiwgdmFsdWUpICAgX0NITl9DT01NT04oZGV2LCBNSURJX1BJVENIX0JFTkQsIGNobiwgMCwgMCwgdmFsdWUpCi0KICNkZWZpbmUgU0VRX1YyX1hfQ09OVFJPTChkZXYsIHZvaWNlLCBjb250cm9sbGVyLCB2YWx1ZSkge19TRVFfTkVFREJVRig4KTsgIF9zZXFidWZbX3NlcWJ1ZnB0cl0gPSBTRVFfRVhURU5ERUQ7ICBfc2VxYnVmW19zZXFidWZwdHIrMV0gPSBTRVFfQ09OVFJPTExFUjsgIF9zZXFidWZbX3NlcWJ1ZnB0cisyXSA9IChkZXYpOyAgX3NlcWJ1Zltfc2VxYnVmcHRyKzNdID0gKHZvaWNlKTsgIF9zZXFidWZbX3NlcWJ1ZnB0cis0XSA9IChjb250cm9sbGVyKTsgIF9zZXFidWZbX3NlcWJ1ZnB0cis1XSA9ICgodmFsdWUpJjB4ZmYpOyAgX3NlcWJ1Zltfc2VxYnVmcHRyKzZdID0gKCh2YWx1ZT4+OCkmMHhmZik7ICBfc2VxYnVmW19zZXFidWZwdHIrN10gPSAwOyAgX1NFUV9BRFZCVUYoOCk7fQotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTRVFfUElUQ0hCRU5EKGRldiwgdm9pY2UsIHZhbHVlKSBTRVFfVjJfWF9DT05UUk9MKGRldiwgdm9pY2UsIENUUkxfUElUQ0hfQkVOREVSLCB2YWx1ZSkKICNkZWZpbmUgU0VRX0JFTkRFUl9SQU5HRShkZXYsIHZvaWNlLCB2YWx1ZSkgU0VRX1YyX1hfQ09OVFJPTChkZXYsIHZvaWNlLCBDVFJMX1BJVENIX0JFTkRFUl9SQU5HRSwgdmFsdWUpCiAjZGVmaW5lIFNFUV9FWFBSRVNTSU9OKGRldiwgdm9pY2UsIHZhbHVlKSBTRVFfQ09OVFJPTChkZXYsIHZvaWNlLCBDVExfRVhQUkVTU0lPTiwgdmFsdWUqMTI4KQogI2RlZmluZSBTRVFfTUFJTl9WT0xVTUUoZGV2LCB2b2ljZSwgdmFsdWUpIFNFUV9DT05UUk9MKGRldiwgdm9pY2UsIENUTF9NQUlOX1ZPTFVNRSwgKHZhbHVlKjE2MzgzKS8xMDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTRVFfUEFOTklORyhkZXYsIHZvaWNlLCBwb3MpIFNFUV9DT05UUk9MKGRldiwgdm9pY2UsIENUTF9QQU4sIChwb3MrMTI4KSAvIDIpCi0KICNkZWZpbmUgX1RJTUVSX0VWRU5UKGV2LCBwYXJtKSB7X1NFUV9ORUVEQlVGKDgpOyAgX3NlcWJ1Zltfc2VxYnVmcHRyKzBdID0gRVZfVElNSU5HOyAgIF9zZXFidWZbX3NlcWJ1ZnB0cisxXSA9IChldik7ICAgX3NlcWJ1Zltfc2VxYnVmcHRyKzJdID0gMDsgIF9zZXFidWZbX3NlcWJ1ZnB0ciszXSA9IDA7ICAqKHVuc2lnbmVkIGludCAqKSZfc2VxYnVmW19zZXFidWZwdHIrNF0gPSAocGFybSk7ICAgX1NFUV9BRFZCVUYoOCk7fQotCiAjZGVmaW5lIFNFUV9TVEFSVF9USU1FUigpIF9USU1FUl9FVkVOVChUTVJfU1RBUlQsIDApCiAjZGVmaW5lIFNFUV9TVE9QX1RJTUVSKCkgX1RJTUVSX0VWRU5UKFRNUl9TVE9QLCAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU0VRX0NPTlRJTlVFX1RJTUVSKCkgX1RJTUVSX0VWRU5UKFRNUl9DT05USU5VRSwgMCkKICNkZWZpbmUgU0VRX1dBSVRfVElNRSh0aWNrcykgX1RJTUVSX0VWRU5UKFRNUl9XQUlUX0FCUywgdGlja3MpCiAjZGVmaW5lIFNFUV9ERUxUQV9USU1FKHRpY2tzKSBfVElNRVJfRVZFTlQoVE1SX1dBSVRfUkVMLCB0aWNrcykKICNkZWZpbmUgU0VRX0VDSE9fQkFDSyhrZXkpIF9USU1FUl9FVkVOVChUTVJfRUNITywga2V5KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU0VRX1NFVF9URU1QTyh2YWx1ZSkgX1RJTUVSX0VWRU5UKFRNUl9URU1QTywgdmFsdWUpCiAjZGVmaW5lIFNFUV9TT05HUE9TKHBvcykgX1RJTUVSX0VWRU5UKFRNUl9TUFAsIHBvcykKICNkZWZpbmUgU0VRX1RJTUVfU0lHTkFUVVJFKHNpZykgX1RJTUVSX0VWRU5UKFRNUl9USU1FU0lHLCBzaWcpCi0KICNkZWZpbmUgX0xPQ0FMX0VWRU5UKGV2LCBwYXJtKSB7X1NFUV9ORUVEQlVGKDgpOyAgX3NlcWJ1Zltfc2VxYnVmcHRyKzBdID0gRVZfU0VRX0xPQ0FMOyAgIF9zZXFidWZbX3NlcWJ1ZnB0cisxXSA9IChldik7ICAgX3NlcWJ1Zltfc2VxYnVmcHRyKzJdID0gMDsgIF9zZXFidWZbX3NlcWJ1ZnB0ciszXSA9IDA7ICAqKHVuc2lnbmVkIGludCAqKSZfc2VxYnVmW19zZXFidWZwdHIrNF0gPSAocGFybSk7ICAgX1NFUV9BRFZCVUYoOCk7fQotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTRVFfUExBWUFVRElPKGRldm1hc2spIF9MT0NBTF9FVkVOVChMT0NMX1NUQVJUQVVESU8sIGRldm1hc2spCi0KICNkZWZpbmUgU0VRX01JRElPVVQoZGV2aWNlLCBieXRlKSB7X1NFUV9ORUVEQlVGKDQpOyAgX3NlcWJ1Zltfc2VxYnVmcHRyXSA9IFNFUV9NSURJUFVUQzsgIF9zZXFidWZbX3NlcWJ1ZnB0cisxXSA9IChieXRlKTsgIF9zZXFidWZbX3NlcWJ1ZnB0cisyXSA9IChkZXZpY2UpOyAgX3NlcWJ1Zltfc2VxYnVmcHRyKzNdID0gMDsgIF9TRVFfQURWQlVGKDQpO30KLQogI2lmZGVmIE9TU0xJQgogI2RlZmluZSBTRVFfV1JQQVRDSChwYXRjaHgsIGxlbikgICBPU1Nfd3JpdGVfcGF0Y2goc2VxZmQsIChjaGFyKikocGF0Y2h4KSwgbGVuKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU0VRX1dSUEFUQ0gyKHBhdGNoeCwgbGVuKSAgIE9TU193cml0ZV9wYXRjaDIoc2VxZmQsIChjaGFyKikocGF0Y2h4KSwgbGVuKQogI2Vsc2UKICNkZWZpbmUgU0VRX1dSUEFUQ0gocGF0Y2h4LCBsZW4pICAge2lmIChfc2VxYnVmcHRyKSBTRVFfRFVNUEJVRigpOyAgaWYgKHdyaXRlKHNlcWZkLCAoY2hhciopKHBhdGNoeCksIGxlbik9PS0xKSAgIHBlcnJvcigiV3JpdGUgcGF0Y2g6IC9kZXYvc2VxdWVuY2VyIik7fQogI2RlZmluZSBTRVFfV1JQQVRDSDIocGF0Y2h4LCBsZW4pICAgKFNFUV9EVU1QQlVGKCksIHdyaXRlKHNlcWZkLCAoY2hhciopKHBhdGNoeCksIGxlbikpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2VuZGlmCi0KICNlbmRpZgogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc3BpL2NwY2FwLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc3BpL2NwY2FwLmgKaW5kZXggMjRiYzkxOC4uOWQzODdlOSAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3NwaS9jcGNhcC5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9zcGkvY3BjYXAuaApAQCAtNyw1ODEgKzcsNjQ3IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfTElOVVhfU1BJX0NQQ0FQX0gKICNkZWZpbmUgX0xJTlVYX1NQSV9DUENBUF9ICi0KICNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgotCiAjZGVmaW5lIENQQ0FQX0RFVl9OQU1FICJjcGNhcCIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIENQQ0FQX05VTV9SRUdfQ1BDQVAgKENQQ0FQX1JFR19FTkQgLSBDUENBUF9SRUdfU1RBUlQgKyAxKQotCiAjZGVmaW5lIENQQ0FQX0lSUV9JTlQxX0lOREVYIDAKICNkZWZpbmUgQ1BDQVBfSVJRX0lOVDJfSU5ERVggMTYKICNkZWZpbmUgQ1BDQVBfSVJRX0lOVDNfSU5ERVggMzIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIENQQ0FQX0lSUV9JTlQ0X0lOREVYIDQ4CiAjZGVmaW5lIENQQ0FQX0lSUV9JTlQ1X0lOREVYIDY0Ci0KLSNkZWZpbmUgQ1BDQVBfSFdDRkdfTlVNIDIgIAotCisjZGVmaW5lIENQQ0FQX0hXQ0ZHX05VTSAyCiAjZGVmaW5lIENQQ0FQX0hXQ0ZHMF9TRUNfU1RCWV9TVzEgMHgwMDAxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBDUENBUF9IV0NGRzBfU0VDX1NUQllfU1cyIDB4MDAwMgogI2RlZmluZSBDUENBUF9IV0NGRzBfU0VDX1NUQllfU1czIDB4MDAwNAogI2RlZmluZSBDUENBUF9IV0NGRzBfU0VDX1NUQllfU1c0IDB4MDAwOAogI2RlZmluZSBDUENBUF9IV0NGRzBfU0VDX1NUQllfU1c1IDB4MDAxMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQ1BDQVBfSFdDRkcwX1NFQ19TVEJZX1ZBVURJTyAweDAwMjAKICNkZWZpbmUgQ1BDQVBfSFdDRkcwX1NFQ19TVEJZX1ZDQU0gMHgwMDQwCiAjZGVmaW5lIENQQ0FQX0hXQ0ZHMF9TRUNfU1RCWV9WQ1NJIDB4MDA4MAogI2RlZmluZSBDUENBUF9IV0NGRzBfU0VDX1NUQllfVkRBQyAweDAxMDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIENQQ0FQX0hXQ0ZHMF9TRUNfU1RCWV9WRElHIDB4MDIwMAogI2RlZmluZSBDUENBUF9IV0NGRzBfU0VDX1NUQllfVkhWSU8gMHgwNDAwCiAjZGVmaW5lIENQQ0FQX0hXQ0ZHMF9TRUNfU1RCWV9WUExMIDB4MDgwMAogI2RlZmluZSBDUENBUF9IV0NGRzBfU0VDX1NUQllfVlJGMSAweDEwMDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIENQQ0FQX0hXQ0ZHMF9TRUNfU1RCWV9WUkYyIDB4MjAwMAogI2RlZmluZSBDUENBUF9IV0NGRzBfU0VDX1NUQllfVlJGUkVGIDB4NDAwMAogI2RlZmluZSBDUENBUF9IV0NGRzBfU0VDX1NUQllfVlNESU8gMHg4MDAwCi0KICNkZWZpbmUgQ1BDQVBfSFdDRkcxX1NFQ19TVEJZX1ZXTEFOMSAweDAwMDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIENQQ0FQX0hXQ0ZHMV9TRUNfU1RCWV9WV0xBTjIgMHgwMDAyCiAjZGVmaW5lIENQQ0FQX0hXQ0ZHMV9TRUNfU1RCWV9WU0lNIDB4MDAwNAogI2RlZmluZSBDUENBUF9IV0NGRzFfU0VDX1NUQllfVlNJTUNBUkQgMHgwMDA4Ci0KICNkZWZpbmUgQ1BDQVBfV0hJU1BFUl9NT0RFX1BVIDB4MDAwMDAwMDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIENQQ0FQX1dISVNQRVJfRU5BQkxFX1VBUlQgMHgwMDAwMDAwMgogI2RlZmluZSBDUENBUF9XSElTUEVSX0FDQ1lfTUFTSyAweEY4MDAwMDAwCiAjZGVmaW5lIENQQ0FQX1dISVNQRVJfQUNDWV9TSEZUIDI3CiAjZGVmaW5lIENQQ0FQX1dISVNQRVJfSURfU0laRSAxNgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQ1BDQVBfV0hJU1BFUl9QUk9QX1NJWkUgNwotCiBlbnVtIGNwY2FwX3JlZ3VsYXRvcl9pZCB7CiAgQ1BDQVBfU1cyLAogIENQQ0FQX1NXNCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQ1BDQVBfU1c1LAogIENQQ0FQX1ZDQU0sCiAgQ1BDQVBfVkNTSSwKICBDUENBUF9WREFDLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBDUENBUF9WRElHLAogIENQQ0FQX1ZGVVNFLAogIENQQ0FQX1ZIVklPLAogIENQQ0FQX1ZTRElPLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBDUENBUF9WUExMLAogIENQQ0FQX1ZSRjEsCiAgQ1BDQVBfVlJGMiwKICBDUENBUF9WUkZSRUYsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIENQQ0FQX1ZXTEFOMSwKICBDUENBUF9WV0xBTjIsCiAgQ1BDQVBfVlNJTSwKICBDUENBUF9WU0lNQ0FSRCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQ1BDQVBfVlZJQiwKICBDUENBUF9WVVNCLAogIENQQ0FQX1ZBVURJTywKICBDUENBUF9OVU1fUkVHVUxBVE9SUworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07Ci0KIGVudW0gY3BjYXBfcmVnIHsKICBDUENBUF9SRUdfU1RBUlQsCi0KICBDUENBUF9SRUdfSU5UMSA9IENQQ0FQX1JFR19TVEFSVCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQ1BDQVBfUkVHX0lOVDIsCiAgQ1BDQVBfUkVHX0lOVDMsCiAgQ1BDQVBfUkVHX0lOVDQsCiAgQ1BDQVBfUkVHX0lOVE0xLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBDUENBUF9SRUdfSU5UTTIsCiAgQ1BDQVBfUkVHX0lOVE0zLAogIENQQ0FQX1JFR19JTlRNNCwKICBDUENBUF9SRUdfSU5UUzEsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIENQQ0FQX1JFR19JTlRTMiwKICBDUENBUF9SRUdfSU5UUzMsCiAgQ1BDQVBfUkVHX0lOVFM0LAogIENQQ0FQX1JFR19BU1NJR04xLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBDUENBUF9SRUdfQVNTSUdOMiwKICBDUENBUF9SRUdfQVNTSUdOMywKICBDUENBUF9SRUdfQVNTSUdONCwKICBDUENBUF9SRUdfQVNTSUdONSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQ1BDQVBfUkVHX0FTU0lHTjYsCiAgQ1BDQVBfUkVHX1ZFUlNDMSwKICBDUENBUF9SRUdfVkVSU0MyLAotCiAgQ1BDQVBfUkVHX01JMSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQ1BDQVBfUkVHX01JTTEsCiAgQ1BDQVBfUkVHX01JMiwKICBDUENBUF9SRUdfTUlNMiwKICBDUENBUF9SRUdfVUNDMSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQ1BDQVBfUkVHX1VDQzIsCiAgQ1BDQVBfUkVHX1BDMSwKICBDUENBUF9SRUdfUEMyLAogIENQQ0FQX1JFR19CUEVPTCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQ1BDQVBfUkVHX1BHQywKICBDUENBUF9SRUdfTVQxLAogIENQQ0FQX1JFR19NVDIsCiAgQ1BDQVBfUkVHX01UMywKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQ1BDQVBfUkVHX1BGLAotCiAgQ1BDQVBfUkVHX1NDQywKICBDUENBUF9SRUdfU1cxLAogIENQQ0FQX1JFR19TVzIsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIENQQ0FQX1JFR19VQ1RNLAogIENQQ0FQX1JFR19UT0QxLAogIENQQ0FQX1JFR19UT0QyLAogIENQQ0FQX1JFR19UT0RBMSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQ1BDQVBfUkVHX1RPREEyLAogIENQQ0FQX1JFR19EQVksCiAgQ1BDQVBfUkVHX0RBWUEsCiAgQ1BDQVBfUkVHX1ZBTDEsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIENQQ0FQX1JFR19WQUwyLAotCiAgQ1BDQVBfUkVHX1NEVlNQTEwsCiAgQ1BDQVBfUkVHX1NJMkNDMSwKICBDUENBUF9SRUdfU2kyQ0MyLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBDUENBUF9SRUdfUzFDMSwKICBDUENBUF9SRUdfUzFDMiwKICBDUENBUF9SRUdfUzJDMSwKICBDUENBUF9SRUdfUzJDMiwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQ1BDQVBfUkVHX1MzQywKICBDUENBUF9SRUdfUzRDMSwKICBDUENBUF9SRUdfUzRDMiwKICBDUENBUF9SRUdfUzVDLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBDUENBUF9SRUdfUzZDLAogIENQQ0FQX1JFR19WQ0FNQywKICBDUENBUF9SRUdfVkNTSUMsCiAgQ1BDQVBfUkVHX1ZEQUNDLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBDUENBUF9SRUdfVkRJR0MsCiAgQ1BDQVBfUkVHX1ZGVVNFQywKICBDUENBUF9SRUdfVkhWSU9DLAogIENQQ0FQX1JFR19WU0RJT0MsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIENQQ0FQX1JFR19WUExMQywKICBDUENBUF9SRUdfVlJGMUMsCiAgQ1BDQVBfUkVHX1ZSRjJDLAogIENQQ0FQX1JFR19WUkZSRUZDLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBDUENBUF9SRUdfVldMQU4xQywKICBDUENBUF9SRUdfVldMQU4yQywKICBDUENBUF9SRUdfVlNJTUMsCiAgQ1BDQVBfUkVHX1ZWSUJDLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBDUENBUF9SRUdfVlVTQkMsCiAgQ1BDQVBfUkVHX1ZVU0JJTlQxQywKICBDUENBUF9SRUdfVlVTQklOVDJDLAogIENQQ0FQX1JFR19VUlQsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIENQQ0FQX1JFR19VUk0xLAogIENQQ0FQX1JFR19VUk0yLAotCiAgQ1BDQVBfUkVHX1ZBVURJT0MsCiAgQ1BDQVBfUkVHX0NDLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBDUENBUF9SRUdfQ0RJLAogIENQQ0FQX1JFR19TREFDLAogIENQQ0FQX1JFR19TREFDREksCiAgQ1BDQVBfUkVHX1RYSSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQ1BDQVBfUkVHX1RYTVAsCiAgQ1BDQVBfUkVHX1JYT0EsCiAgQ1BDQVBfUkVHX1JYVkMsCiAgQ1BDQVBfUkVHX1JYQ09BLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBDUENBUF9SRUdfUlhTRE9BLAogIENQQ0FQX1JFR19SWEVQT0EsCiAgQ1BDQVBfUkVHX1JYTEwsCiAgQ1BDQVBfUkVHX0EyTEEsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIENQQ0FQX1JFR19NSVBJUzEsCiAgQ1BDQVBfUkVHX01JUElTMiwKICBDUENBUF9SRUdfTUlQSVMzLAogIENQQ0FQX1JFR19MVkFCLAotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIENQQ0FQX1JFR19DQ0MxLAogIENQQ0FQX1JFR19DUk0sCiAgQ1BDQVBfUkVHX0NDQ0MyLAogIENQQ0FQX1JFR19DQ1MxLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBDUENBUF9SRUdfQ0NTMiwKICBDUENBUF9SRUdfQ0NBMSwKICBDUENBUF9SRUdfQ0NBMiwKICBDUENBUF9SRUdfQ0NNLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBDUENBUF9SRUdfQ0NPLAogIENQQ0FQX1JFR19DQ0ksCi0KICBDUENBUF9SRUdfQURDQzEsCiAgQ1BDQVBfUkVHX0FEQ0MyLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBDUENBUF9SRUdfQURDRDAsCiAgQ1BDQVBfUkVHX0FEQ0QxLAogIENQQ0FQX1JFR19BRENEMiwKICBDUENBUF9SRUdfQURDRDMsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIENQQ0FQX1JFR19BRENENCwKICBDUENBUF9SRUdfQURDRDUsCiAgQ1BDQVBfUkVHX0FEQ0Q2LAogIENQQ0FQX1JFR19BRENENywKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQ1BDQVBfUkVHX0FEQ0FMMSwKICBDUENBUF9SRUdfQURDQUwyLAotCiAgQ1BDQVBfUkVHX1VTQkMxLAogIENQQ0FQX1JFR19VU0JDMiwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQ1BDQVBfUkVHX1VTQkMzLAogIENQQ0FQX1JFR19VVklETCwKICBDUENBUF9SRUdfVVZJREgsCiAgQ1BDQVBfUkVHX1VQSURMLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBDUENBUF9SRUdfVVBJREgsCiAgQ1BDQVBfUkVHX1VGQzEsCiAgQ1BDQVBfUkVHX1VGQzIsCiAgQ1BDQVBfUkVHX1VGQzMsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIENQQ0FQX1JFR19VSUMxLAogIENQQ0FQX1JFR19VSUMyLAogIENQQ0FQX1JFR19VSUMzLAogIENQQ0FQX1JFR19VU0JPVEcxLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBDUENBUF9SRUdfVVNCT1RHMiwKICBDUENBUF9SRUdfVVNCT1RHMywKICBDUENBUF9SRUdfVUlFUjEsCiAgQ1BDQVBfUkVHX1VJRVIyLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBDUENBUF9SRUdfVUlFUjMsCiAgQ1BDQVBfUkVHX1VJRUYxLAogIENQQ0FQX1JFR19VSUVGMiwKICBDUENBUF9SRUdfVUlFRjMsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIENQQ0FQX1JFR19VSVMsCiAgQ1BDQVBfUkVHX1VJTCwKICBDUENBUF9SRUdfVVNCRCwKICBDUENBUF9SRUdfU0NSMSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQ1BDQVBfUkVHX1NDUjIsCiAgQ1BDQVBfUkVHX1NDUjMsCiAgQ1BDQVBfUkVHX1ZNQywKICBDUENBUF9SRUdfT1dEQywKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQ1BDQVBfUkVHX0dQSU8wLAogIENQQ0FQX1JFR19HUElPMSwKICBDUENBUF9SRUdfR1BJTzIsCiAgQ1BDQVBfUkVHX0dQSU8zLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBDUENBUF9SRUdfR1BJTzQsCiAgQ1BDQVBfUkVHX0dQSU81LAogIENQQ0FQX1JFR19HUElPNiwKLQogIENQQ0FQX1JFR19NRExDLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBDUENBUF9SRUdfS0xDLAogIENQQ0FQX1JFR19BRExDLAogIENQQ0FQX1JFR19SRURDLAogIENQQ0FQX1JFR19HUkVFTkMsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIENQQ0FQX1JFR19CTFVFQywKICBDUENBUF9SRUdfQ0ZDLAogIENQQ0FQX1JFR19BQkMsCiAgQ1BDQVBfUkVHX0JMRURDLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBDUENBUF9SRUdfQ0xFREMsCi0KICBDUENBUF9SRUdfT1cxQywKICBDUENBUF9SRUdfT1cxRCwKICBDUENBUF9SRUdfT1cxSSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQ1BDQVBfUkVHX09XMUlFLAogIENQQ0FQX1JFR19PVzEsCiAgQ1BDQVBfUkVHX09XMkMsCiAgQ1BDQVBfUkVHX09XMkQsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIENQQ0FQX1JFR19PVzJJLAogIENQQ0FQX1JFR19PVzJJRSwKICBDUENBUF9SRUdfT1cyLAogIENQQ0FQX1JFR19PVzNDLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBDUENBUF9SRUdfT1czRCwKICBDUENBUF9SRUdfT1czSSwKICBDUENBUF9SRUdfT1czSUUsCiAgQ1BDQVBfUkVHX09XMywKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQ1BDQVBfUkVHX0dDQUlDLAogIENQQ0FQX1JFR19HQ0FJTSwKICBDUENBUF9SRUdfTEdESVIsCiAgQ1BDQVBfUkVHX0xHUFUsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIENQQ0FQX1JFR19MR1BJTiwKICBDUENBUF9SRUdfTEdNQVNLLAogIENQQ0FQX1JFR19MREVCLAogIENQQ0FQX1JFR19MR0RFVCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQ1BDQVBfUkVHX0xNSVNDLAogIENQQ0FQX1JFR19MTUFDRSwKLQogIENQQ0FQX1JFR19FTkQgPSBDUENBUF9SRUdfTE1BQ0UsCi0KICBDUENBUF9SRUdfTUFYCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogID0gQ1BDQVBfUkVHX0VORCwKLQogIENQQ0FQX1JFR19TSVpFID0gQ1BDQVBfUkVHX01BWCArIDEsCiAgQ1BDQVBfUkVHX1VOVVNFRCA9IENQQ0FQX1JFR19NQVggKyAyLAogfTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIGVudW0gewogIENQQ0FQX0lPQ1RMX05VTV9URVNUX19TVEFSVCwKICBDUENBUF9JT0NUTF9OVU1fVEVTVF9SRUFEX1JFRywKICBDUENBUF9JT0NUTF9OVU1fVEVTVF9XUklURV9SRUcsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIENQQ0FQX0lPQ1RMX05VTV9URVNUX19FTkQsCi0KICBDUENBUF9JT0NUTF9OVU1fQURDX19TVEFSVCwKICBDUENBUF9JT0NUTF9OVU1fQURDX1BIQVNFLAogIENQQ0FQX0lPQ1RMX05VTV9BRENfX0VORCwKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBDUENBUF9JT0NUTF9OVU1fQkFUVF9fU1RBUlQsCiAgQ1BDQVBfSU9DVExfTlVNX0JBVFRfRElTUExBWV9VUERBVEUsCiAgQ1BDQVBfSU9DVExfTlVNX0JBVFRfQVRPRF9BU1lOQywKICBDUENBUF9JT0NUTF9OVU1fQkFUVF9BVE9EX1NZTkMsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIENQQ0FQX0lPQ1RMX05VTV9CQVRUX0FUT0RfUkVBRCwKICBDUENBUF9JT0NUTF9OVU1fQkFUVF9fRU5ELAotCiAgQ1BDQVBfSU9DVExfTlVNX1VDX19TVEFSVCwKICBDUENBUF9JT0NUTF9OVU1fVUNfTUFDUk9fU1RBUlQsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIENQQ0FQX0lPQ1RMX05VTV9VQ19NQUNST19TVE9QLAogIENQQ0FQX0lPQ1RMX05VTV9VQ19HRVRfVkVORE9SLAogIENQQ0FQX0lPQ1RMX05VTV9VQ19TRVRfVFVSQk9fTU9ERSwKICBDUENBUF9JT0NUTF9OVU1fVUNfX0VORCwKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBDUENBUF9JT0NUTF9OVU1fQUNDWV9fU1RBUlQsCiAgQ1BDQVBfSU9DVExfTlVNX0FDQ1lfV0hJU1BFUiwKICBDUENBUF9JT0NUTF9OVU1fQUNDWV9fRU5ELAogfTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIGVudW0gY3BjYXBfaXJxcyB7CiAgQ1BDQVBfSVJRX19TVEFSVCwKICBDUENBUF9JUlFfSFNDTEsgPSBDUENBUF9JUlFfSU5UMV9JTkRFWCwKICBDUENBUF9JUlFfUFJJTUFDLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBDUENBUF9JUlFfU0VDTUFDLAogIENQQ0FQX0lSUV9MT1dCUEwsCiAgQ1BDQVBfSVJRX1NFQzJQUkksCiAgQ1BDQVBfSVJRX0xPV0JQSCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQ1BDQVBfSVJRX0VPTCwKICBDUENBUF9JUlFfVFMsCiAgQ1BDQVBfSVJRX0FEQ0RPTkUsCiAgQ1BDQVBfSVJRX0hTLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBDUENBUF9JUlFfTUIyLAogIENQQ0FQX0lSUV9WQlVTT1YsCiAgQ1BDQVBfSVJRX1JWUlNfQ0hSRywKICBDUENBUF9JUlFfQ0hSR19ERVQsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIENQQ0FQX0lSUV9JREZMT0FULAogIENQQ0FQX0lSUV9JREdORCwKLQogIENQQ0FQX0lSUV9TRTEgPSBDUENBUF9JUlFfSU5UMl9JTkRFWCwKICBDUENBUF9JUlFfU0VTU0VORCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQ1BDQVBfSVJRX1NFU1NWTEQsCiAgQ1BDQVBfSVJRX1ZCVVNWTEQsCiAgQ1BDQVBfSVJRX0NIUkdfQ1VSUjEsCiAgQ1BDQVBfSVJRX0NIUkdfQ1VSUjIsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIENQQ0FQX0lSUV9SVlJTX01PREUsCiAgQ1BDQVBfSVJRX09OLAogIENQQ0FQX0lSUV9PTjIsCiAgQ1BDQVBfSVJRX0NMSywKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQ1BDQVBfSVJRXzFIWiwKICBDUENBUF9JUlFfUFRULAogIENQQ0FQX0lSUV9TRTBDT05OLAogIENQQ0FQX0lSUV9DSFJHX1NFMUIsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIENQQ0FQX0lSUV9VQVJUX0VDSE9fT1ZFUlJVTiwKICBDUENBUF9JUlFfRVhUTUVNSEQsCi0KICBDUENBUF9JUlFfV0FSTSA9IENQQ0FQX0lSUV9JTlQzX0lOREVYLAogIENQQ0FQX0lSUV9TWVNSU1RSLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBDUENBUF9JUlFfU09GVFJTVCwKICBDUENBUF9JUlFfRElFUFdSRFdOLAogIENQQ0FQX0lSUV9ESUVURU1QSCwKICBDUENBUF9JUlFfUEMsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIENQQ0FQX0lSUV9PRkxPV1NXLAogIENQQ0FQX0lSUV9UT0RBLAogIENQQ0FQX0lSUV9PUFRfU0VMX0RUQ0gsCiAgQ1BDQVBfSVJRX09QVF9TRUxfU1RBVEUsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIENQQ0FQX0lSUV9PTkVXSVJFMSwKICBDUENBUF9JUlFfT05FV0lSRTIsCiAgQ1BDQVBfSVJRX09ORVdJUkUzLAogIENQQ0FQX0lSUV9VQ1JFU0VULAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBDUENBUF9JUlFfUFdSR09PRCwKICBDUENBUF9JUlFfVVNCRFBMTENMSywKLQogIENQQ0FQX0lSUV9EUEkgPSBDUENBUF9JUlFfSU5UNF9JTkRFWCwKICBDUENBUF9JUlFfRE1JLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBDUENBUF9JUlFfVUNCVVNZLAogIENQQ0FQX0lSUV9HQ0FJX0NVUlIxLAogIENQQ0FQX0lSUV9HQ0FJX0NVUlIyLAogIENQQ0FQX0lSUV9TQl9NQVhfUkVUUkFOU01JVF9FUlIsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIENQQ0FQX0lSUV9CQVRUREVUQiwKICBDUENBUF9JUlFfUFJJSEFMVCwKICBDUENBUF9JUlFfU0VDSEFMVCwKICBDUENBUF9JUlFfQ0NfQ0FMLAotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIENQQ0FQX0lSUV9VQ19QUklST01SID0gQ1BDQVBfSVJRX0lOVDVfSU5ERVgsCiAgQ1BDQVBfSVJRX1VDX1BSSVJBTVcsCiAgQ1BDQVBfSVJRX1VDX1BSSVJBTVIsCiAgQ1BDQVBfSVJRX1VDX1VTRVJPRkYsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIENQQ0FQX0lSUV9VQ19QUklNQUNST180LAogIENQQ0FQX0lSUV9VQ19QUklNQUNST181LAogIENQQ0FQX0lSUV9VQ19QUklNQUNST182LAogIENQQ0FQX0lSUV9VQ19QUklNQUNST183LAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBDUENBUF9JUlFfVUNfUFJJTUFDUk9fOCwKICBDUENBUF9JUlFfVUNfUFJJTUFDUk9fOSwKICBDUENBUF9JUlFfVUNfUFJJTUFDUk9fMTAsCiAgQ1BDQVBfSVJRX1VDX1BSSU1BQ1JPXzExLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBDUENBUF9JUlFfVUNfUFJJTUFDUk9fMTIsCiAgQ1BDQVBfSVJRX1VDX1BSSU1BQ1JPXzEzLAogIENQQ0FQX0lSUV9VQ19QUklNQUNST18xNCwKICBDUENBUF9JUlFfVUNfUFJJTUFDUk9fMTUsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIENQQ0FQX0lSUV9fTlVNCiB9OwotCiBlbnVtIGNwY2FwX2FkY19iYW5rMCB7CiAgQ1BDQVBfQURDX0FEMF9CQVRUREVUQiwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQ1BDQVBfQURDX0JBVFRQLAogIENQQ0FQX0FEQ19WQlVTLAogIENQQ0FQX0FEQ19BRDMsCiAgQ1BDQVBfQURDX0JQTFVTX0FENCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQ1BDQVBfQURDX0NIR19JU0VOU0UsCiAgQ1BDQVBfQURDX0JBVFRJX0FEQywKICBDUENBUF9BRENfVVNCX0lELAotCiAgQ1BDQVBfQURDX0JBTkswX05VTSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwotCiBlbnVtIGNwY2FwX2FkY19iYW5rMSB7CiAgQ1BDQVBfQURDX0FEOCwKICBDUENBUF9BRENfQUQ5LAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBDUENBUF9BRENfTElDRUxMLAogIENQQ0FQX0FEQ19IVl9CQVRUUCwKICBDUENBUF9BRENfVFNYMV9BRDEyLAogIENQQ0FQX0FEQ19UU1gyX0FEMTMsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIENQQ0FQX0FEQ19UU1kxX0FEMTQsCiAgQ1BDQVBfQURDX1RTWTJfQUQxNSwKLQogIENQQ0FQX0FEQ19CQU5LMV9OVU0sCiB9OwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogZW51bSBjcGNhcF9hZGNfZm9ybWF0IHsKICBDUENBUF9BRENfRk9STUFUX1JBVywKICBDUENBUF9BRENfRk9STUFUX1BIQVNFRCwKICBDUENBUF9BRENfRk9STUFUX0NPTlZFUlRFRCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwotCiBlbnVtIGNwY2FwX2FkY190aW1pbmcgewogIENQQ0FQX0FEQ19USU1JTkdfSU1NLAogIENQQ0FQX0FEQ19USU1JTkdfSU4sCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIENQQ0FQX0FEQ19USU1JTkdfT1VULAogfTsKLQogZW51bSBjcGNhcF9hZGNfdHlwZSB7CiAgQ1BDQVBfQURDX1RZUEVfQkFOS18wLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBDUENBUF9BRENfVFlQRV9CQU5LXzEsCiAgQ1BDQVBfQURDX1RZUEVfQkFUVF9QSSwKIH07Ci0KIGVudW0gY3BjYXBfbWFjcm8geworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBDUENBUF9NQUNST19ST01SLAogIENQQ0FQX01BQ1JPX1JBTVcsCiAgQ1BDQVBfTUFDUk9fUkFNUiwKICBDUENBUF9NQUNST19VU0VST0ZGLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBDUENBUF9NQUNST180LAogIENQQ0FQX01BQ1JPXzUsCiAgQ1BDQVBfTUFDUk9fNiwKICBDUENBUF9NQUNST183LAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBDUENBUF9NQUNST184LAogIENQQ0FQX01BQ1JPXzksCiAgQ1BDQVBfTUFDUk9fMTAsCiAgQ1BDQVBfTUFDUk9fMTEsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIENQQ0FQX01BQ1JPXzEyLAogIENQQ0FQX01BQ1JPXzEzLAogIENQQ0FQX01BQ1JPXzE0LAogIENQQ0FQX01BQ1JPXzE1LAotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIENQQ0FQX01BQ1JPX19FTkQsCiB9OwotCiBlbnVtIGNwY2FwX3ZlbmRvciB7CiAgQ1BDQVBfVkVORE9SX1NULAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBDUENBUF9WRU5ET1JfVEksCiB9OwotCiBlbnVtIGNwY2FwX3JldmlzaW9uIHsKICBDUENBUF9SRVZJU0lPTl8xXzAgPSAweDA4LAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBDUENBUF9SRVZJU0lPTl8xXzEgPSAweDA5LAogIENQQ0FQX1JFVklTSU9OXzJfMCA9IDB4MTAsCiAgQ1BDQVBfUkVWSVNJT05fMl8xID0gMHgxMSwKIH07Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBlbnVtIGNwY2FwX2JhdHRfdXNiX21vZGVsIHsKICBDUENBUF9CQVRUX1VTQl9NT0RFTF9OT05FLAogIENQQ0FQX0JBVFRfVVNCX01PREVMX1VTQiwKICBDUENBUF9CQVRUX1VTQl9NT0RFTF9GQUNUT1JZLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07Ci0KIHN0cnVjdCBjcGNhcF9zcGlfaW5pdF9kYXRhIHsKICBlbnVtIGNwY2FwX3JlZyByZWc7CiAgdW5zaWduZWQgc2hvcnQgZGF0YTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwotCiBzdHJ1Y3QgY3BjYXBfYWRjX2F0byB7CiAgdW5zaWduZWQgc2hvcnQgYXRvX2luOwogIHVuc2lnbmVkIHNob3J0IGF0b3hfaW47CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIHNob3J0IGFkY19wc19mYWN0b3JfaW47CiAgdW5zaWduZWQgc2hvcnQgYXRveF9wc19mYWN0b3JfaW47CiAgdW5zaWduZWQgc2hvcnQgYXRvX291dDsKICB1bnNpZ25lZCBzaG9ydCBhdG94X291dDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgc2hvcnQgYWRjX3BzX2ZhY3Rvcl9vdXQ7CiAgdW5zaWduZWQgc2hvcnQgYXRveF9wc19mYWN0b3Jfb3V0OwogfTsKLQogc3RydWN0IGNwY2FwX2JhdHRfZGF0YSB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGludCBzdGF0dXM7CiAgaW50IGhlYWx0aDsKICBpbnQgcHJlc2VudDsKICBpbnQgY2FwYWNpdHk7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGludCBiYXR0X3ZvbHQ7CiAgaW50IGJhdHRfdGVtcDsKIH07Ci0KIHN0cnVjdCBjcGNhcF9iYXR0X2FjX2RhdGEgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBpbnQgb25saW5lOwogfTsKLQogc3RydWN0IGNwY2FwX2JhdHRfdXNiX2RhdGEgewogIGludCBvbmxpbmU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGludCBjdXJyZW50X25vdzsKICBlbnVtIGNwY2FwX2JhdHRfdXNiX21vZGVsIG1vZGVsOwogfTsKLQogc3RydWN0IGNwY2FwX2RldmljZTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBjcGNhcF9hZGNfdXNfcmVxdWVzdCB7CiAgZW51bSBjcGNhcF9hZGNfZm9ybWF0IGZvcm1hdDsKICBlbnVtIGNwY2FwX2FkY190aW1pbmcgdGltaW5nOwogIGVudW0gY3BjYXBfYWRjX3R5cGUgdHlwZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgaW50IHN0YXR1czsKICBpbnQgcmVzdWx0W0NQQ0FQX0FEQ19CQU5LMF9OVU1dOwogfTsKLQogc3RydWN0IGNwY2FwX2FkY19waGFzZSB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHNpZ25lZCBjaGFyIG9mZnNldF9iYXR0aTsKICB1bnNpZ25lZCBjaGFyIHNsb3BlX2JhdHRpOwogIHNpZ25lZCBjaGFyIG9mZnNldF9jaHJnaTsKICB1bnNpZ25lZCBjaGFyIHNsb3BlX2NocmdpOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzaWduZWQgY2hhciBvZmZzZXRfYmF0dHA7CiAgdW5zaWduZWQgY2hhciBzbG9wZV9iYXR0cDsKICBzaWduZWQgY2hhciBvZmZzZXRfYnA7CiAgdW5zaWduZWQgY2hhciBzbG9wZV9icDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc2lnbmVkIGNoYXIgb2Zmc2V0X2JhdHR0OwogIHVuc2lnbmVkIGNoYXIgc2xvcGVfYmF0dHQ7CiAgc2lnbmVkIGNoYXIgb2Zmc2V0X2Nocmd2OwogIHVuc2lnbmVkIGNoYXIgc2xvcGVfY2hyZ3Y7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKLQogc3RydWN0IGNwY2FwX3JlZ2FjYyB7CiAgdW5zaWduZWQgc2hvcnQgcmVnOwogIHVuc2lnbmVkIHNob3J0IHZhbHVlOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBzaG9ydCBtYXNrOwogfTsKLQogc3RydWN0IGNwY2FwX3doaXNwZXJfcmVxdWVzdCB7CiAgdW5zaWduZWQgaW50IGNtZDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgY2hhciBkb2NrX2lkW0NQQ0FQX1dISVNQRVJfSURfU0laRV07CiAgY2hhciBkb2NrX3Byb3BbQ1BDQVBfV0hJU1BFUl9QUk9QX1NJWkVdOwogfTsKLQogI2RlZmluZSBDUENBUF9JT0NUTF9URVNUX1JFQURfUkVHICAgX0lPV1IoMCwgQ1BDQVBfSU9DVExfTlVNX1RFU1RfUkVBRF9SRUcsIHN0cnVjdCBjcGNhcF9yZWdhY2MqKQotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBDUENBUF9JT0NUTF9URVNUX1dSSVRFX1JFRyAgIF9JT1dSKDAsIENQQ0FQX0lPQ1RMX05VTV9URVNUX1dSSVRFX1JFRywgc3RydWN0IGNwY2FwX3JlZ2FjYyopCi0KICNkZWZpbmUgQ1BDQVBfSU9DVExfQURDX1BIQVNFICAgX0lPV1IoMCwgQ1BDQVBfSU9DVExfTlVNX0FEQ19QSEFTRSwgc3RydWN0IGNwY2FwX2FkY19waGFzZSopCi0KICNkZWZpbmUgQ1BDQVBfSU9DVExfQkFUVF9ESVNQTEFZX1VQREFURSAgIF9JT1coMCwgQ1BDQVBfSU9DVExfTlVNX0JBVFRfRElTUExBWV9VUERBVEUsIHN0cnVjdCBjcGNhcF9iYXR0X2RhdGEqKQotCiAjZGVmaW5lIENQQ0FQX0lPQ1RMX0JBVFRfQVRPRF9BU1lOQyAgIF9JT1coMCwgQ1BDQVBfSU9DVExfTlVNX0JBVFRfQVRPRF9BU1lOQywgc3RydWN0IGNwY2FwX2FkY191c19yZXF1ZXN0KikKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQ1BDQVBfSU9DVExfQkFUVF9BVE9EX1NZTkMgICBfSU9XUigwLCBDUENBUF9JT0NUTF9OVU1fQkFUVF9BVE9EX1NZTkMsIHN0cnVjdCBjcGNhcF9hZGNfdXNfcmVxdWVzdCopCi0KICNkZWZpbmUgQ1BDQVBfSU9DVExfQkFUVF9BVE9EX1JFQUQgICBfSU9XUigwLCBDUENBUF9JT0NUTF9OVU1fQkFUVF9BVE9EX1JFQUQsIHN0cnVjdCBjcGNhcF9hZGNfdXNfcmVxdWVzdCopCi0KICNkZWZpbmUgQ1BDQVBfSU9DVExfVUNfTUFDUk9fU1RBUlQgICBfSU9XUigwLCBDUENBUF9JT0NUTF9OVU1fVUNfTUFDUk9fU1RBUlQsIGVudW0gY3BjYXBfbWFjcm8pCi0KICNkZWZpbmUgQ1BDQVBfSU9DVExfVUNfTUFDUk9fU1RPUCAgIF9JT1dSKDAsIENQQ0FQX0lPQ1RMX05VTV9VQ19NQUNST19TVE9QLCBlbnVtIGNwY2FwX21hY3JvKQotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBDUENBUF9JT0NUTF9VQ19HRVRfVkVORE9SICAgX0lPV1IoMCwgQ1BDQVBfSU9DVExfTlVNX1VDX0dFVF9WRU5ET1IsIGVudW0gY3BjYXBfdmVuZG9yKQotCiAjZGVmaW5lIENQQ0FQX0lPQ1RMX1VDX1NFVF9UVVJCT19NT0RFICAgX0lPVygwLCBDUENBUF9JT0NUTF9OVU1fVUNfU0VUX1RVUkJPX01PREUsIHVuc2lnbmVkIHNob3J0KQotCiAjZGVmaW5lIENQQ0FQX0lPQ1RMX0FDQ1lfV0hJU1BFUiAgIF9JT1coMCwgQ1BDQVBfSU9DVExfTlVNX0FDQ1lfV0hJU1BFUiwgc3RydWN0IGNwY2FwX3doaXNwZXJfcmVxdWVzdCopCi0KICNlbmRpZgotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3NwaW5sb2NrLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc3BpbmxvY2suaAppbmRleCA1NTA0YzllLi5iMWQ2NGM2IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc3BpbmxvY2suaAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc3BpbmxvY2suaApAQCAtNywxMDYgKzcsOTUgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9fTElOVVhfU1BJTkxPQ0tfSAogI2RlZmluZSBfX0xJTlVYX1NQSU5MT0NLX0gKLQogI2luY2x1ZGUgPGxpbnV4L3ByZWVtcHQuaD4KICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CiAjaW5jbHVkZSA8bGludXgvdGhyZWFkX2luZm8uaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmdpZnkuaD4KLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+Ci0KICNkZWZpbmUgTE9DS19TRUNUSU9OX05BTUUgIi50ZXh0LmxvY2suIktCVUlMRF9CQVNFTkFNRQotCiAjZGVmaW5lIExPQ0tfU0VDVElPTl9TVEFSVChleHRyYSkgICAiLnN1YnNlY3Rpb24gMVxuXHQiICAgZXh0cmEgICAiLmlmbmRlZiAiIExPQ0tfU0VDVElPTl9OQU1FICJcblx0IiAgIExPQ0tfU0VDVElPTl9OQU1FICI6XG5cdCIgICAiLmVuZGlmXG4iCi0KICNkZWZpbmUgTE9DS19TRUNUSU9OX0VORCAgICIucHJldmlvdXNcblx0IgotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX2xvY2tmdW5jIGZhc3RjYWxsIF9fYXR0cmlidXRlX18oKHNlY3Rpb24oIi5zcGlubG9jay50ZXh0IikpKQotCiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2tfdHlwZXMuaD4KLQogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrX3VwLmg+Ci0KICNkZWZpbmUgc3Bpbl9sb2NrX2luaXQobG9jaykgICBkbyB7ICoobG9jaykgPSBTUElOX0xPQ0tfVU5MT0NLRUQ7IH0gd2hpbGUgKDApCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIHJ3bG9ja19pbml0KGxvY2spICAgZG8geyAqKGxvY2spID0gUldfTE9DS19VTkxPQ0tFRDsgfSB3aGlsZSAoMCkKLQogI2RlZmluZSBzcGluX2lzX2xvY2tlZChsb2NrKSBfX3Jhd19zcGluX2lzX2xvY2tlZCgmKGxvY2spLT5yYXdfbG9jaykKLQogI2RlZmluZSBzcGluX3VubG9ja193YWl0KGxvY2spIF9fcmF3X3NwaW5fdW5sb2NrX3dhaXQoJihsb2NrKS0+cmF3X2xvY2spCi0KICNpbmNsdWRlIDxsaW51eC9zcGlubG9ja19hcGlfdXAuaD4KLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX3Jhd19zcGluX2xvY2sobG9jaykgX19yYXdfc3Bpbl9sb2NrKCYobG9jayktPnJhd19sb2NrKQogI2RlZmluZSBfcmF3X3NwaW5fbG9ja19mbGFncyhsb2NrLCBmbGFncykgICBfX3Jhd19zcGluX2xvY2tfZmxhZ3MoJihsb2NrKS0+cmF3X2xvY2ssICooZmxhZ3MpKQogI2RlZmluZSBfcmF3X3NwaW5fdHJ5bG9jayhsb2NrKSBfX3Jhd19zcGluX3RyeWxvY2soJihsb2NrKS0+cmF3X2xvY2spCiAjZGVmaW5lIF9yYXdfc3Bpbl91bmxvY2sobG9jaykgX19yYXdfc3Bpbl91bmxvY2soJihsb2NrKS0+cmF3X2xvY2spCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfcmF3X3JlYWRfbG9jayhyd2xvY2spIF9fcmF3X3JlYWRfbG9jaygmKHJ3bG9jayktPnJhd19sb2NrKQogI2RlZmluZSBfcmF3X3JlYWRfdHJ5bG9jayhyd2xvY2spIF9fcmF3X3JlYWRfdHJ5bG9jaygmKHJ3bG9jayktPnJhd19sb2NrKQogI2RlZmluZSBfcmF3X3JlYWRfdW5sb2NrKHJ3bG9jaykgX19yYXdfcmVhZF91bmxvY2soJihyd2xvY2spLT5yYXdfbG9jaykKICNkZWZpbmUgX3Jhd193cml0ZV9sb2NrKHJ3bG9jaykgX19yYXdfd3JpdGVfbG9jaygmKHJ3bG9jayktPnJhd19sb2NrKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX3Jhd193cml0ZV90cnlsb2NrKHJ3bG9jaykgX19yYXdfd3JpdGVfdHJ5bG9jaygmKHJ3bG9jayktPnJhd19sb2NrKQogI2RlZmluZSBfcmF3X3dyaXRlX3VubG9jayhyd2xvY2spIF9fcmF3X3dyaXRlX3VubG9jaygmKHJ3bG9jayktPnJhd19sb2NrKQotCiAjZGVmaW5lIHJlYWRfY2FuX2xvY2socndsb2NrKSBfX3Jhd19yZWFkX2Nhbl9sb2NrKCYocndsb2NrKS0+cmF3X2xvY2spCiAjZGVmaW5lIHdyaXRlX2Nhbl9sb2NrKHJ3bG9jaykgX19yYXdfd3JpdGVfY2FuX2xvY2soJihyd2xvY2spLT5yYXdfbG9jaykKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgc3Bpbl90cnlsb2NrKGxvY2spIF9fY29uZF9sb2NrKF9zcGluX3RyeWxvY2sobG9jaykpCiAjZGVmaW5lIHJlYWRfdHJ5bG9jayhsb2NrKSBfX2NvbmRfbG9jayhfcmVhZF90cnlsb2NrKGxvY2spKQogI2RlZmluZSB3cml0ZV90cnlsb2NrKGxvY2spIF9fY29uZF9sb2NrKF93cml0ZV90cnlsb2NrKGxvY2spKQotCiAjZGVmaW5lIHNwaW5fbG9jayhsb2NrKSBfc3Bpbl9sb2NrKGxvY2spCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIHNwaW5fbG9ja19uZXN0ZWQobG9jaywgc3ViY2xhc3MpIF9zcGluX2xvY2sobG9jaykKLQogI2RlZmluZSB3cml0ZV9sb2NrKGxvY2spIF93cml0ZV9sb2NrKGxvY2spCiAjZGVmaW5lIHJlYWRfbG9jayhsb2NrKSBfcmVhZF9sb2NrKGxvY2spCi0KICNkZWZpbmUgc3Bpbl9sb2NrX2lycXNhdmUobG9jaywgZmxhZ3MpIF9zcGluX2xvY2tfaXJxc2F2ZShsb2NrLCBmbGFncykKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIHJlYWRfbG9ja19pcnFzYXZlKGxvY2ssIGZsYWdzKSBfcmVhZF9sb2NrX2lycXNhdmUobG9jaywgZmxhZ3MpCiAjZGVmaW5lIHdyaXRlX2xvY2tfaXJxc2F2ZShsb2NrLCBmbGFncykgX3dyaXRlX2xvY2tfaXJxc2F2ZShsb2NrLCBmbGFncykKLQogI2RlZmluZSBzcGluX2xvY2tfaXJxKGxvY2spIF9zcGluX2xvY2tfaXJxKGxvY2spCiAjZGVmaW5lIHNwaW5fbG9ja19iaChsb2NrKSBfc3Bpbl9sb2NrX2JoKGxvY2spCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIHJlYWRfbG9ja19pcnEobG9jaykgX3JlYWRfbG9ja19pcnEobG9jaykKICNkZWZpbmUgcmVhZF9sb2NrX2JoKGxvY2spIF9yZWFkX2xvY2tfYmgobG9jaykKLQogI2RlZmluZSB3cml0ZV9sb2NrX2lycShsb2NrKSBfd3JpdGVfbG9ja19pcnEobG9jaykKICNkZWZpbmUgd3JpdGVfbG9ja19iaChsb2NrKSBfd3JpdGVfbG9ja19iaChsb2NrKQotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBzcGluX3VubG9jayhsb2NrKSBfc3Bpbl91bmxvY2sobG9jaykKICNkZWZpbmUgcmVhZF91bmxvY2sobG9jaykgX3JlYWRfdW5sb2NrKGxvY2spCiAjZGVmaW5lIHdyaXRlX3VubG9jayhsb2NrKSBfd3JpdGVfdW5sb2NrKGxvY2spCiAjZGVmaW5lIHNwaW5fdW5sb2NrX2lycShsb2NrKSBfc3Bpbl91bmxvY2tfaXJxKGxvY2spCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSByZWFkX3VubG9ja19pcnEobG9jaykgX3JlYWRfdW5sb2NrX2lycShsb2NrKQogI2RlZmluZSB3cml0ZV91bmxvY2tfaXJxKGxvY2spIF93cml0ZV91bmxvY2tfaXJxKGxvY2spCi0KICNkZWZpbmUgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShsb2NrLCBmbGFncykgICBfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShsb2NrLCBmbGFncykKICNkZWZpbmUgc3Bpbl91bmxvY2tfYmgobG9jaykgX3NwaW5fdW5sb2NrX2JoKGxvY2spCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIHJlYWRfdW5sb2NrX2lycXJlc3RvcmUobG9jaywgZmxhZ3MpICAgX3JlYWRfdW5sb2NrX2lycXJlc3RvcmUobG9jaywgZmxhZ3MpCiAjZGVmaW5lIHJlYWRfdW5sb2NrX2JoKGxvY2spIF9yZWFkX3VubG9ja19iaChsb2NrKQotCiAjZGVmaW5lIHdyaXRlX3VubG9ja19pcnFyZXN0b3JlKGxvY2ssIGZsYWdzKSAgIF93cml0ZV91bmxvY2tfaXJxcmVzdG9yZShsb2NrLCBmbGFncykKICNkZWZpbmUgd3JpdGVfdW5sb2NrX2JoKGxvY2spIF93cml0ZV91bmxvY2tfYmgobG9jaykKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgc3Bpbl90cnlsb2NrX2JoKGxvY2spIF9fY29uZF9sb2NrKF9zcGluX3RyeWxvY2tfYmgobG9jaykpCi0KICNkZWZpbmUgc3Bpbl90cnlsb2NrX2lycShsb2NrKSAgKHsgICBsb2NhbF9pcnFfZGlzYWJsZSgpOyAgIF9zcGluX3RyeWxvY2sobG9jaykgPyAgIDEgOiAoeyBsb2NhbF9pcnFfZW5hYmxlKCk7IDA7IH0pOyAgfSkKLQogI2RlZmluZSBzcGluX3RyeWxvY2tfaXJxc2F2ZShsb2NrLCBmbGFncykgICh7ICAgbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOyAgIF9zcGluX3RyeWxvY2sobG9jaykgPyAgIDEgOiAoeyBsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7IDA7IH0pOyAgfSkKLQogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgYXRvbWljX2RlY19hbmRfbG9jayhhdG9taWMsIGxvY2spICAgX19jb25kX2xvY2soX2F0b21pY19kZWNfYW5kX2xvY2soYXRvbWljLCBsb2NrKSkKLQogI2RlZmluZSBzcGluX2Nhbl9sb2NrKGxvY2spICghc3Bpbl9pc19sb2NrZWQobG9jaykpCi0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3NwaW5sb2NrX2FwaV9zbXAuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9zcGlubG9ja19hcGlfc21wLmgKaW5kZXggNzRkOGNjOS4uNDA3ZTQ3MyAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3NwaW5sb2NrX2FwaV9zbXAuaAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc3BpbmxvY2tfYXBpX3NtcC5oCkBAIC03LDE1ICs3LDIwIEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfX0xJTlVYX1NQSU5MT0NLX0FQSV9TTVBfSAogI2RlZmluZSBfX0xJTlVYX1NQSU5MT0NLX0FQSV9TTVBfSAotCiAjaWZuZGVmIF9fTElOVVhfU1BJTkxPQ0tfSAogI2Vycm9yICJwbGVhc2UgZG9uJ3QgaW5jbHVkZSB0aGlzIGZpbGUgZGlyZWN0bHkiCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2VuZGlmCi0KICNkZWZpbmUgYXNzZXJ0X3NwaW5fbG9ja2VkKHgpIEJVR19PTighc3Bpbl9pc19sb2NrZWQoeCkpCi0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3NwaW5sb2NrX2FwaV91cC5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3NwaW5sb2NrX2FwaV91cC5oCmluZGV4IGM5YTVjMDEuLjlhZGIzOWEgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9zcGlubG9ja19hcGlfdXAuaAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc3BpbmxvY2tfYXBpX3VwLmgKQEAgLTcsNjMgKzcsNjggQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9fTElOVVhfU1BJTkxPQ0tfQVBJX1VQX0gKICNkZWZpbmUgX19MSU5VWF9TUElOTE9DS19BUElfVVBfSAotCiAjaWZuZGVmIF9fTElOVVhfU1BJTkxPQ0tfSAogI2Vycm9yICJwbGVhc2UgZG9uJ3QgaW5jbHVkZSB0aGlzIGZpbGUgZGlyZWN0bHkiCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2VuZGlmCi0KICNkZWZpbmUgaW5fbG9ja19mdW5jdGlvbnMoQUREUikgMAotCiAjZGVmaW5lIGFzc2VydF9zcGluX2xvY2tlZChsb2NrKSBkbyB7ICh2b2lkKShsb2NrKTsgfSB3aGlsZSAoMCkKLQogI2RlZmluZSBfX0xPQ0sobG9jaykgICBkbyB7IHByZWVtcHRfZGlzYWJsZSgpOyBfX2FjcXVpcmUobG9jayk7ICh2b2lkKShsb2NrKTsgfSB3aGlsZSAoMCkKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19MT0NLX0JIKGxvY2spICAgZG8geyBsb2NhbF9iaF9kaXNhYmxlKCk7IF9fTE9DSyhsb2NrKTsgfSB3aGlsZSAoMCkKLQogI2RlZmluZSBfX0xPQ0tfSVJRKGxvY2spICAgZG8geyBsb2NhbF9pcnFfZGlzYWJsZSgpOyBfX0xPQ0sobG9jayk7IH0gd2hpbGUgKDApCi0KICNkZWZpbmUgX19MT0NLX0lSUVNBVkUobG9jaywgZmxhZ3MpICAgZG8geyBsb2NhbF9pcnFfc2F2ZShmbGFncyk7IF9fTE9DSyhsb2NrKTsgfSB3aGlsZSAoMCkKLQogI2RlZmluZSBfX1VOTE9DSyhsb2NrKSAgIGRvIHsgcHJlZW1wdF9lbmFibGUoKTsgX19yZWxlYXNlKGxvY2spOyAodm9pZCkobG9jayk7IH0gd2hpbGUgKDApCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fVU5MT0NLX0JIKGxvY2spICAgZG8geyBwcmVlbXB0X2VuYWJsZV9ub19yZXNjaGVkKCk7IGxvY2FsX2JoX2VuYWJsZSgpOyBfX3JlbGVhc2UobG9jayk7ICh2b2lkKShsb2NrKTsgfSB3aGlsZSAoMCkKLQogI2RlZmluZSBfX1VOTE9DS19JUlEobG9jaykgICBkbyB7IGxvY2FsX2lycV9lbmFibGUoKTsgX19VTkxPQ0sobG9jayk7IH0gd2hpbGUgKDApCi0KICNkZWZpbmUgX19VTkxPQ0tfSVJRUkVTVE9SRShsb2NrLCBmbGFncykgICBkbyB7IGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsgX19VTkxPQ0sobG9jayk7IH0gd2hpbGUgKDApCi0KICNkZWZpbmUgX3NwaW5fbG9jayhsb2NrKSBfX0xPQ0sobG9jaykKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9zcGluX2xvY2tfbmVzdGVkKGxvY2ssIHN1YmNsYXNzKSBfX0xPQ0sobG9jaykKICNkZWZpbmUgX3JlYWRfbG9jayhsb2NrKSBfX0xPQ0sobG9jaykKICNkZWZpbmUgX3dyaXRlX2xvY2sobG9jaykgX19MT0NLKGxvY2spCiAjZGVmaW5lIF9zcGluX2xvY2tfYmgobG9jaykgX19MT0NLX0JIKGxvY2spCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfcmVhZF9sb2NrX2JoKGxvY2spIF9fTE9DS19CSChsb2NrKQogI2RlZmluZSBfd3JpdGVfbG9ja19iaChsb2NrKSBfX0xPQ0tfQkgobG9jaykKICNkZWZpbmUgX3NwaW5fbG9ja19pcnEobG9jaykgX19MT0NLX0lSUShsb2NrKQogI2RlZmluZSBfcmVhZF9sb2NrX2lycShsb2NrKSBfX0xPQ0tfSVJRKGxvY2spCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfd3JpdGVfbG9ja19pcnEobG9jaykgX19MT0NLX0lSUShsb2NrKQogI2RlZmluZSBfc3Bpbl9sb2NrX2lycXNhdmUobG9jaywgZmxhZ3MpIF9fTE9DS19JUlFTQVZFKGxvY2ssIGZsYWdzKQogI2RlZmluZSBfcmVhZF9sb2NrX2lycXNhdmUobG9jaywgZmxhZ3MpIF9fTE9DS19JUlFTQVZFKGxvY2ssIGZsYWdzKQogI2RlZmluZSBfd3JpdGVfbG9ja19pcnFzYXZlKGxvY2ssIGZsYWdzKSBfX0xPQ0tfSVJRU0FWRShsb2NrLCBmbGFncykKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9zcGluX3RyeWxvY2sobG9jaykgKHsgX19MT0NLKGxvY2spOyAxOyB9KQogI2RlZmluZSBfcmVhZF90cnlsb2NrKGxvY2spICh7IF9fTE9DSyhsb2NrKTsgMTsgfSkKICNkZWZpbmUgX3dyaXRlX3RyeWxvY2sobG9jaykgKHsgX19MT0NLKGxvY2spOyAxOyB9KQogI2RlZmluZSBfc3Bpbl90cnlsb2NrX2JoKGxvY2spICh7IF9fTE9DS19CSChsb2NrKTsgMTsgfSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9zcGluX3VubG9jayhsb2NrKSBfX1VOTE9DSyhsb2NrKQogI2RlZmluZSBfcmVhZF91bmxvY2sobG9jaykgX19VTkxPQ0sobG9jaykKICNkZWZpbmUgX3dyaXRlX3VubG9jayhsb2NrKSBfX1VOTE9DSyhsb2NrKQogI2RlZmluZSBfc3Bpbl91bmxvY2tfYmgobG9jaykgX19VTkxPQ0tfQkgobG9jaykKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF93cml0ZV91bmxvY2tfYmgobG9jaykgX19VTkxPQ0tfQkgobG9jaykKICNkZWZpbmUgX3JlYWRfdW5sb2NrX2JoKGxvY2spIF9fVU5MT0NLX0JIKGxvY2spCiAjZGVmaW5lIF9zcGluX3VubG9ja19pcnEobG9jaykgX19VTkxPQ0tfSVJRKGxvY2spCiAjZGVmaW5lIF9yZWFkX3VubG9ja19pcnEobG9jaykgX19VTkxPQ0tfSVJRKGxvY2spCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfd3JpdGVfdW5sb2NrX2lycShsb2NrKSBfX1VOTE9DS19JUlEobG9jaykKICNkZWZpbmUgX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUobG9jaywgZmxhZ3MpIF9fVU5MT0NLX0lSUVJFU1RPUkUobG9jaywgZmxhZ3MpCiAjZGVmaW5lIF9yZWFkX3VubG9ja19pcnFyZXN0b3JlKGxvY2ssIGZsYWdzKSBfX1VOTE9DS19JUlFSRVNUT1JFKGxvY2ssIGZsYWdzKQogI2RlZmluZSBfd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUobG9jaywgZmxhZ3MpIF9fVU5MT0NLX0lSUVJFU1RPUkUobG9jaywgZmxhZ3MpCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9zcGlubG9ja190eXBlcy5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3NwaW5sb2NrX3R5cGVzLmgKaW5kZXggMDkzOGI1MS4uOGI5ZDgyOCAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3NwaW5sb2NrX3R5cGVzLmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3NwaW5sb2NrX3R5cGVzLmgKQEAgLTcsNDAgKzcsMzkgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9fTElOVVhfU1BJTkxPQ0tfVFlQRVNfSAogI2RlZmluZSBfX0xJTlVYX1NQSU5MT0NLX1RZUEVTX0gKLQogI2luY2x1ZGUgPGxpbnV4L2xvY2tkZXAuaD4KLQogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrX3R5cGVzX3VwLmg+Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB0eXBlZGVmIHN0cnVjdCB7CiAgcmF3X3NwaW5sb2NrX3QgcmF3X2xvY2s7CiB9IHNwaW5sb2NrX3Q7Ci0KICNkZWZpbmUgU1BJTkxPQ0tfTUFHSUMgMHhkZWFkNGVhZAotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogdHlwZWRlZiBzdHJ1Y3QgewogIHJhd19yd2xvY2tfdCByYXdfbG9jazsKIH0gcndsb2NrX3Q7Ci0KICNkZWZpbmUgUldMT0NLX01BR0lDIDB4ZGVhZjFlZWQKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU1BJTkxPQ0tfT1dORVJfSU5JVCAoKHZvaWQgKiktMUwpCi0KICNkZWZpbmUgU1BJTl9ERVBfTUFQX0lOSVQobG9ja25hbWUpCi0KICNkZWZpbmUgUldfREVQX01BUF9JTklUKGxvY2tuYW1lKQotCiAjZGVmaW5lIF9fU1BJTl9MT0NLX1VOTE9DS0VEKGxvY2tuYW1lKSAgIChzcGlubG9ja190KSB7IC5yYXdfbG9jayA9IF9fUkFXX1NQSU5fTE9DS19VTkxPQ0tFRCwgICBTUElOX0RFUF9NQVBfSU5JVChsb2NrbmFtZSkgfQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19SV19MT0NLX1VOTE9DS0VEKGxvY2tuYW1lKSAgIChyd2xvY2tfdCkgeyAucmF3X2xvY2sgPSBfX1JBV19SV19MT0NLX1VOTE9DS0VELCAgIFJXX0RFUF9NQVBfSU5JVChsb2NrbmFtZSkgfQotCiAjZGVmaW5lIFNQSU5fTE9DS19VTkxPQ0tFRCBfX1NQSU5fTE9DS19VTkxPQ0tFRChvbGRfc3R5bGVfc3Bpbl9pbml0KQogI2RlZmluZSBSV19MT0NLX1VOTE9DS0VEIF9fUldfTE9DS19VTkxPQ0tFRChvbGRfc3R5bGVfcndfaW5pdCkKLQogI2RlZmluZSBERUZJTkVfU1BJTkxPQ0soeCkgc3BpbmxvY2tfdCB4ID0gX19TUElOX0xPQ0tfVU5MT0NLRUQoeCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIERFRklORV9SV0xPQ0soeCkgcndsb2NrX3QgeCA9IF9fUldfTE9DS19VTkxPQ0tFRCh4KQotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9zcGlubG9ja190eXBlc191cC5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3NwaW5sb2NrX3R5cGVzX3VwLmgKaW5kZXggMGRiMzAzNy4uMTQxODMwNiAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3NwaW5sb2NrX3R5cGVzX3VwLmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3NwaW5sb2NrX3R5cGVzX3VwLmgKQEAgLTcsMjMgKzcsMjUgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9fTElOVVhfU1BJTkxPQ0tfVFlQRVNfVVBfSAogI2RlZmluZSBfX0xJTlVYX1NQSU5MT0NLX1RZUEVTX1VQX0gKLQogI2lmbmRlZiBfX0xJTlVYX1NQSU5MT0NLX1RZUEVTX0gKICNlcnJvciAicGxlYXNlIGRvbid0IGluY2x1ZGUgdGhpcyBmaWxlIGRpcmVjdGx5IgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlbmRpZgotCiB0eXBlZGVmIHN0cnVjdCB7IH0gcmF3X3NwaW5sb2NrX3Q7Ci0KICNkZWZpbmUgX19SQVdfU1BJTl9MT0NLX1VOTE9DS0VEIHsgfQotCiB0eXBlZGVmIHN0cnVjdCB7Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9IHJhd19yd2xvY2tfdDsKLQogI2RlZmluZSBfX1JBV19SV19MT0NLX1VOTE9DS0VEIHsgfQotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9zcGlubG9ja191cC5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3NwaW5sb2NrX3VwLmgKaW5kZXggYjQ5NThkYy4uMWIwMjk0YiAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3NwaW5sb2NrX3VwLmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3NwaW5sb2NrX3VwLmgKQEAgLTcsMjQgKzcsMjggQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9fTElOVVhfU1BJTkxPQ0tfVVBfSAogI2RlZmluZSBfX0xJTlVYX1NQSU5MT0NLX1VQX0gKLQogI2lmbmRlZiBfX0xJTlVYX1NQSU5MT0NLX0gKICNlcnJvciAicGxlYXNlIGRvbid0IGluY2x1ZGUgdGhpcyBmaWxlIGRpcmVjdGx5IgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlbmRpZgotCiAjZGVmaW5lIF9fcmF3X3NwaW5faXNfbG9ja2VkKGxvY2spICgodm9pZCkobG9jayksIDApCi0KICNkZWZpbmUgX19yYXdfc3Bpbl9sb2NrKGxvY2spIGRvIHsgKHZvaWQpKGxvY2spOyB9IHdoaWxlICgwKQogI2RlZmluZSBfX3Jhd19zcGluX3VubG9jayhsb2NrKSBkbyB7ICh2b2lkKShsb2NrKTsgfSB3aGlsZSAoMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fcmF3X3NwaW5fdHJ5bG9jayhsb2NrKSAoeyAodm9pZCkobG9jayk7IDE7IH0pCi0KICNkZWZpbmUgX19yYXdfcmVhZF9jYW5fbG9jayhsb2NrKSAoKCh2b2lkKShsb2NrKSwgMSkpCiAjZGVmaW5lIF9fcmF3X3dyaXRlX2Nhbl9sb2NrKGxvY2spICgoKHZvaWQpKGxvY2spLCAxKSkKLQogI2RlZmluZSBfX3Jhd19zcGluX3VubG9ja193YWl0KGxvY2spICAgZG8geyBjcHVfcmVsYXgoKTsgfSB3aGlsZSAoX19yYXdfc3Bpbl9pc19sb2NrZWQobG9jaykpCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9zdGFja3RyYWNlLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc3RhY2t0cmFjZS5oCmluZGV4IGFmN2VjYzguLmRhODY4Y2EgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9zdGFja3RyYWNlLmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3N0YWNrdHJhY2UuaApAQCAtNywxMiArNywxOCBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX19MSU5VWF9TVEFDS1RSQUNFX0gKICNkZWZpbmUgX19MSU5VWF9TVEFDS1RSQUNFX0gKLQogI2RlZmluZSBzYXZlX3N0YWNrX3RyYWNlKHRyYWNlLCB0YXNrLCBhbGwsIHNraXApIGRvIHsgfSB3aGlsZSAoMCkKICNkZWZpbmUgcHJpbnRfc3RhY2tfdHJhY2UodHJhY2UpIGRvIHsgfSB3aGlsZSAoMCkKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3N0YXQuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9zdGF0LmgKaW5kZXggMGQ3NTdmNC4uNWFiODJmMiAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3N0YXQuaAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc3RhdC5oCkBAIC03LDQ4ICs3LDU1IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfTElOVVhfU1RBVF9ICiAjZGVmaW5lIF9MSU5VWF9TVEFUX0gKLQogI2lmICFkZWZpbmVkKF9fR0xJQkNfXykgfHwgX19HTElCQ19fIDwgMgotCiAjZGVmaW5lIFNfSUZNVCAwMDE3MDAwMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU19JRlNPQ0sgMDE0MDAwMAogI2RlZmluZSBTX0lGTE5LIDAxMjAwMDAKICNkZWZpbmUgU19JRlJFRyAwMTAwMDAwCiAjZGVmaW5lIFNfSUZCTEsgMDA2MDAwMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU19JRkRJUiAwMDQwMDAwCiAjZGVmaW5lIFNfSUZDSFIgMDAyMDAwMAogI2RlZmluZSBTX0lGSUZPIDAwMTAwMDAKICNkZWZpbmUgU19JU1VJRCAwMDA0MDAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTX0lTR0lEIDAwMDIwMDAKICNkZWZpbmUgU19JU1ZUWCAwMDAxMDAwCi0KICNkZWZpbmUgU19JU0xOSyhtKSAoKChtKSAmIFNfSUZNVCkgPT0gU19JRkxOSykKICNkZWZpbmUgU19JU1JFRyhtKSAoKChtKSAmIFNfSUZNVCkgPT0gU19JRlJFRykKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNfSVNESVIobSkgKCgobSkgJiBTX0lGTVQpID09IFNfSUZESVIpCiAjZGVmaW5lIFNfSVNDSFIobSkgKCgobSkgJiBTX0lGTVQpID09IFNfSUZDSFIpCiAjZGVmaW5lIFNfSVNCTEsobSkgKCgobSkgJiBTX0lGTVQpID09IFNfSUZCTEspCiAjZGVmaW5lIFNfSVNGSUZPKG0pICgoKG0pICYgU19JRk1UKSA9PSBTX0lGSUZPKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU19JU1NPQ0sobSkgKCgobSkgJiBTX0lGTVQpID09IFNfSUZTT0NLKQotCiAjZGVmaW5lIFNfSVJXWFUgMDA3MDAKICNkZWZpbmUgU19JUlVTUiAwMDQwMAogI2RlZmluZSBTX0lXVVNSIDAwMjAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTX0lYVVNSIDAwMTAwCi0KICNkZWZpbmUgU19JUldYRyAwMDA3MAogI2RlZmluZSBTX0lSR1JQIDAwMDQwCiAjZGVmaW5lIFNfSVdHUlAgMDAwMjAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNfSVhHUlAgMDAwMTAKLQogI2RlZmluZSBTX0lSV1hPIDAwMDA3CiAjZGVmaW5lIFNfSVJPVEggMDAwMDQKICNkZWZpbmUgU19JV09USCAwMDAwMgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU19JWE9USCAwMDAwMQotCiAjZW5kaWYKLQogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc3RhdGZzLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc3RhdGZzLmgKaW5kZXggNDNhNWQ3MC4uZTEwODA5NCAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3N0YXRmcy5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9zdGF0ZnMuaApAQCAtNywyNyArNywzNCBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX0xJTlVYX1NUQVRGU19ICiAjZGVmaW5lIF9MSU5VWF9TVEFURlNfSAotCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLQogI2luY2x1ZGUgPGFzbS9zdGF0ZnMuaD4KLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBrc3RhdGZzIHsKICBsb25nIGZfdHlwZTsKICBsb25nIGZfYnNpemU7CiAgdTY0IGZfYmxvY2tzOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1NjQgZl9iZnJlZTsKICB1NjQgZl9iYXZhaWw7CiAgdTY0IGZfZmlsZXM7CiAgdTY0IGZfZmZyZWU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fa2VybmVsX2ZzaWRfdCBmX2ZzaWQ7CiAgbG9uZyBmX25hbWVsZW47CiAgbG9uZyBmX2Zyc2l6ZTsKICBsb25nIGZfc3BhcmVbNV07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKLQogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc3RyaW5nLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc3RyaW5nLmgKaW5kZXggNjc1OTA2OC4uOGJhNTQ1NiAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3N0cmluZy5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9zdHJpbmcuaApAQCAtNyw5ICs3LDE1IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfTElOVVhfU1RSSU5HX0hfCiAjZGVmaW5lIF9MSU5VWF9TVFJJTkdfSF8KLQogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc3RyaW5naWZ5LmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc3RyaW5naWZ5LmgKaW5kZXggY2JiOWU1Yi4uNTNkZTViMyAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3N0cmluZ2lmeS5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9zdHJpbmdpZnkuaApAQCAtNywxMiArNywxOCBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX19MSU5VWF9TVFJJTkdJRllfSAogI2RlZmluZSBfX0xJTlVYX1NUUklOR0lGWV9ICi0KICNkZWZpbmUgX19zdHJpbmdpZnlfMSh4KSAjeAogI2RlZmluZSBfX3N0cmluZ2lmeSh4KSBfX3N0cmluZ2lmeV8xKHgpCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9zdW5ycGMvYXV0aC5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3N1bnJwYy9hdXRoLmgKaW5kZXggYWUwYTNkMC4uMzJhZTNiNiAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3N1bnJwYy9hdXRoLmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3N1bnJwYy9hdXRoLmgKQEAgLTcsOSArNywxNSBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX0xJTlVYX1NVTlJQQ19BVVRIX0gKICNkZWZpbmUgX0xJTlVYX1NVTlJQQ19BVVRIX0gKLQogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc3VucnBjL2F1dGhfZ3NzLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc3VucnBjL2F1dGhfZ3NzLmgKaW5kZXggYTY0ZjFmOC4uZDE4MDRkYSAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3N1bnJwYy9hdXRoX2dzcy5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9zdW5ycGMvYXV0aF9nc3MuaApAQCAtNywxMCArNywxNSBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX0xJTlVYX1NVTlJQQ19BVVRIX0dTU19ICiAjZGVmaW5lIF9MSU5VWF9TVU5SUENfQVVUSF9HU1NfSAotCiAjZW5kaWYKLQpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3N1bnJwYy9jbG50LmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc3VucnBjL2NsbnQuaAppbmRleCBhNTYyYWQ5Li41NDIwOTY5IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc3VucnBjL2NsbnQuaAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc3VucnBjL2NsbnQuaApAQCAtNyw5NyArNywxMTAgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9MSU5VWF9TVU5SUENfQ0xOVF9ICiAjZGVmaW5lIF9MSU5VWF9TVU5SUENfQ0xOVF9ICi0KICNpbmNsdWRlIDxsaW51eC9zdW5ycGMvbXNnX3Byb3QuaD4KICNpbmNsdWRlIDxsaW51eC9zdW5ycGMvc2NoZWQuaD4KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjaW5jbHVkZSA8bGludXgvc3VucnBjL3hwcnQuaD4KICNpbmNsdWRlIDxsaW51eC9zdW5ycGMvYXV0aC5oPgogI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy9zdGF0cy5oPgogI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy94ZHIuaD4KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjaW5jbHVkZSA8bGludXgvc3VucnBjL3RpbWVyLmg+CiAjaW5jbHVkZSA8YXNtL3NpZ25hbC5oPgotCiBzdHJ1Y3QgcnBjX3BvcnRtYXAgewogIF9fdTMyIHBtX3Byb2c7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHBtX3ZlcnM7CiAgX191MzIgcG1fcHJvdDsKICBfX3UxNiBwbV9wb3J0OwogIHVuc2lnbmVkIGNoYXIgcG1fYmluZGluZyA6IDE7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCBycGNfd2FpdF9xdWV1ZSBwbV9iaW5kd2FpdDsKIH07Ci0KIHN0cnVjdCBycGNfaW5vZGU7Ci0KIHN0cnVjdCBycGNfY2xudCB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGF0b21pY190IGNsX2NvdW50OwogIGF0b21pY190IGNsX3VzZXJzOwogIHN0cnVjdCBycGNfeHBydCAqIGNsX3hwcnQ7CiAgc3RydWN0IHJwY19wcm9jaW5mbyAqIGNsX3Byb2NpbmZvOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1MzIgY2xfbWF4cHJvYzsKLQogIGNoYXIgKiBjbF9zZXJ2ZXI7CiAgY2hhciAqIGNsX3Byb3RuYW1lOwogIHN0cnVjdCBycGNfYXV0aCAqIGNsX2F1dGg7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCBycGNfc3RhdCAqIGNsX3N0YXRzOwogIHN0cnVjdCBycGNfaW9zdGF0cyAqIGNsX21ldHJpY3M7Ci0KICB1bnNpZ25lZCBpbnQgY2xfc29mdHJ0cnkgOiAxLAogIGNsX2ludHIgOiAxLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBjbF9hdXRvYmluZCA6IDEsCiAgY2xfb25lc2hvdCA6IDEsCiAgY2xfZGVhZCA6IDE7Ci0KICBzdHJ1Y3QgcnBjX3J0dCAqIGNsX3J0dDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IHJwY19wb3J0bWFwICogY2xfcG1hcDsKLQogIGludCBjbF9ub2RlbGVuOwogIGNoYXIgY2xfbm9kZW5hbWVbVU5YX01BWE5PREVOQU1FXTsKICBjaGFyIGNsX3BhdGhuYW1lWzMwXTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IHZmc21vdW50ICogY2xfdmZzbW50OwogIHN0cnVjdCBkZW50cnkgKiBjbF9kZW50cnk7CiAgc3RydWN0IHJwY19jbG50ICogY2xfcGFyZW50OwogIHN0cnVjdCBycGNfcnR0IGNsX3J0dF9kZWZhdWx0OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgcnBjX3BvcnRtYXAgY2xfcG1hcF9kZWZhdWx0OwogIGNoYXIgY2xfaW5saW5lX25hbWVbMzJdOwogfTsKICNkZWZpbmUgY2xfdGltZW91dCBjbF94cHJ0LT50aW1lb3V0CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBjbF9wcm9nIGNsX3BtYXAtPnBtX3Byb2cKICNkZWZpbmUgY2xfdmVycyBjbF9wbWFwLT5wbV92ZXJzCiAjZGVmaW5lIGNsX3BvcnQgY2xfcG1hcC0+cG1fcG9ydAogI2RlZmluZSBjbF9wcm90IGNsX3BtYXAtPnBtX3Byb3QKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUlBDX01BWFZFUlNJT04gNAogc3RydWN0IHJwY19wcm9ncmFtIHsKICBjaGFyICogbmFtZTsKICB1MzIgbnVtYmVyOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBpbnQgbnJ2ZXJzOwogIHN0cnVjdCBycGNfdmVyc2lvbiAqKiB2ZXJzaW9uOwogIHN0cnVjdCBycGNfc3RhdCAqIHN0YXRzOwogIGNoYXIgKiBwaXBlX2Rpcl9uYW1lOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07Ci0KIHN0cnVjdCBycGNfdmVyc2lvbiB7CiAgdTMyIG51bWJlcjsKICB1bnNpZ25lZCBpbnQgbnJwcm9jczsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IHJwY19wcm9jaW5mbyAqIHByb2NzOwogfTsKLQogc3RydWN0IHJwY19wcm9jaW5mbyB7CiAgdTMyIHBfcHJvYzsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAga3hkcnByb2NfdCBwX2VuY29kZTsKICBreGRycHJvY190IHBfZGVjb2RlOwogIHVuc2lnbmVkIGludCBwX2J1ZnNpejsKICB1bnNpZ25lZCBpbnQgcF9jb3VudDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgaW50IHBfdGltZXI7CiAgdTMyIHBfc3RhdGlkeDsKICBjaGFyICogcF9uYW1lOwogfTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUlBDX0NPTkdFU1RFRChjbG50KSAoUlBDWFBSVF9DT05HRVNURUQoKGNsbnQpLT5jbF94cHJ0KSkKICNkZWZpbmUgUlBDX1BFRVJBRERSKGNsbnQpICgmKGNsbnQpLT5jbF94cHJ0LT5hZGRyKQotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9zdW5ycGMvZGVidWcuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9zdW5ycGMvZGVidWcuaAppbmRleCBlMjY4OWYxLi5lNzQ1OGVhIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc3VucnBjL2RlYnVnLmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3N1bnJwYy9kZWJ1Zy5oCkBAIC03LDM2ICs3LDQ1IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfTElOVVhfU1VOUlBDX0RFQlVHX0hfCiAjZGVmaW5lIF9MSU5VWF9TVU5SUENfREVCVUdfSF8KLQogI2RlZmluZSBSUENEQkdfWFBSVCAweDAwMDEKICNkZWZpbmUgUlBDREJHX0NBTEwgMHgwMDAyCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBSUENEQkdfREVCVUcgMHgwMDA0CiAjZGVmaW5lIFJQQ0RCR19ORlMgMHgwMDA4CiAjZGVmaW5lIFJQQ0RCR19BVVRIIDB4MDAxMAogI2RlZmluZSBSUENEQkdfUE1BUCAweDAwMjAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFJQQ0RCR19TQ0hFRCAweDAwNDAKICNkZWZpbmUgUlBDREJHX1RSQU5TIDB4MDA4MAogI2RlZmluZSBSUENEQkdfU1ZDU09DSyAweDAxMDAKICNkZWZpbmUgUlBDREJHX1NWQ0RTUCAweDAyMDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFJQQ0RCR19NSVNDIDB4MDQwMAogI2RlZmluZSBSUENEQkdfQ0FDSEUgMHgwODAwCiAjZGVmaW5lIFJQQ0RCR19BTEwgMHg3ZmZmCi0KLSNkZWZpbmUgQ1RMX1NVTlJQQyA3MjQ5ICAKLQorI2RlZmluZSBDVExfU1VOUlBDIDcyNDkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBlbnVtIHsKICBDVExfUlBDREVCVUcgPSAxLAogIENUTF9ORlNERUJVRywKICBDVExfTkZTRERFQlVHLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBDVExfTkxNREVCVUcsCiAgQ1RMX1NMT1RUQUJMRV9VRFAsCiAgQ1RMX1NMT1RUQUJMRV9UQ1AsCiAgQ1RMX01JTl9SRVNWUE9SVCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgQ1RMX01BWF9SRVNWUE9SVCwKIH07Ci0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3N1bnJwYy9nc3NfYXBpLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc3VucnBjL2dzc19hcGkuaAppbmRleCBjYmM3N2MyLi43MjEwY2FhIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc3VucnBjL2dzc19hcGkuaAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc3VucnBjL2dzc19hcGkuaApAQCAtNywxMCArNywxNSBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX0xJTlVYX1NVTlJQQ19HU1NfQVBJX0gKICNkZWZpbmUgX0xJTlVYX1NVTlJQQ19HU1NfQVBJX0gKLQogI2VuZGlmCi0KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9zdW5ycGMvZ3NzX2FzbjEuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9zdW5ycGMvZ3NzX2FzbjEuaAppbmRleCA4ZjE4YmEwLi5lODEyMDNmIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc3VucnBjL2dzc19hc24xLmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3N1bnJwYy9nc3NfYXNuMS5oCkBAIC03LDI5ICs3LDM3IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy9nc3NfYXBpLmg+Ci0KICNkZWZpbmUgU0laRU9GX0lOVCA0Ci0KICNkZWZpbmUgR19CQURfU0VSVklDRV9OQU1FICgtMjA0NTAyMjk3NkwpCiAjZGVmaW5lIEdfQkFEX1NUUklOR19VSUQgKC0yMDQ1MDIyOTc1TCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEdfTk9VU0VSICgtMjA0NTAyMjk3NEwpCiAjZGVmaW5lIEdfVkFMSURBVEVfRkFJTEVEICgtMjA0NTAyMjk3M0wpCiAjZGVmaW5lIEdfQlVGRkVSX0FMTE9DICgtMjA0NTAyMjk3MkwpCiAjZGVmaW5lIEdfQkFEX01TR19DVFggKC0yMDQ1MDIyOTcxTCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEdfV1JPTkdfU0laRSAoLTIwNDUwMjI5NzBMKQogI2RlZmluZSBHX0JBRF9VU0FHRSAoLTIwNDUwMjI5NjlMKQogI2RlZmluZSBHX1VOS05PV05fUU9QICgtMjA0NTAyMjk2OEwpCiAjZGVmaW5lIEdfTk9fSE9TVE5BTUUgKC0yMDQ1MDIyOTY3TCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEdfQkFEX0hPU1ROQU1FICgtMjA0NTAyMjk2NkwpCiAjZGVmaW5lIEdfV1JPTkdfTUVDSCAoLTIwNDUwMjI5NjVMKQogI2RlZmluZSBHX0JBRF9UT0tfSEVBREVSICgtMjA0NTAyMjk2NEwpCiAjZGVmaW5lIEdfQkFEX0RJUkVDVElPTiAoLTIwNDUwMjI5NjNMKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgR19UT0tfVFJVTkMgKC0yMDQ1MDIyOTYyTCkKICNkZWZpbmUgR19SRUZMRUNUICgtMjA0NTAyMjk2MUwpCiAjZGVmaW5lIEdfV1JPTkdfVE9LSUQgKC0yMDQ1MDIyOTYwTCkKLQogI2RlZmluZSBnX09JRF9lcXVhbChvMSxvMikgICAoKChvMSktPmxlbiA9PSAobzIpLT5sZW4pICYmICAgKG1lbWNtcCgobzEpLT5kYXRhLChvMiktPmRhdGEsKGludCkgKG8xKS0+bGVuKSA9PSAwKSkKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9zdW5ycGMvZ3NzX2Vyci5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3N1bnJwYy9nc3NfZXJyLmgKaW5kZXggMDFmYjFiNC4uZjlkMTFiYyAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3N1bnJwYy9nc3NfZXJyLmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3N1bnJwYy9nc3NfZXJyLmgKQEAgLTcsOSArNywxNSBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX0xJTlVYX1NVTlJQQ19HU1NfRVJSX0gKICNkZWZpbmUgX0xJTlVYX1NVTlJQQ19HU1NfRVJSX0gKLQogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc3VucnBjL21zZ19wcm90LmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc3VucnBjL21zZ19wcm90LmgKaW5kZXggNTJmNGU3Ni4uNGQyYTc0ZiAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3N1bnJwYy9tc2dfcHJvdC5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9zdW5ycGMvbXNnX3Byb3QuaApAQCAtNyw5ICs3LDE1IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfTElOVVhfU1VOUlBDX01TR1BST1RfSF8KICNkZWZpbmUgX0xJTlVYX1NVTlJQQ19NU0dQUk9UX0hfCi0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3N1bnJwYy9zY2hlZC5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3N1bnJwYy9zY2hlZC5oCmluZGV4IDg1OWIyZDguLmRlMjkwMzAgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9zdW5ycGMvc2NoZWQuaAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc3VucnBjL3NjaGVkLmgKQEAgLTcsMTc2ICs3LDE4NSBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX0xJTlVYX1NVTlJQQ19TQ0hFRF9IXwogI2RlZmluZSBfTElOVVhfU1VOUlBDX1NDSEVEX0hfCi0KICNpbmNsdWRlIDxsaW51eC90aW1lci5oPgogI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy90eXBlcy5oPgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KICNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KICNpbmNsdWRlIDxsaW51eC9zdW5ycGMveGRyLmg+Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgcnBjX3Byb2NpbmZvOwogc3RydWN0IHJwY19tZXNzYWdlIHsKICBzdHJ1Y3QgcnBjX3Byb2NpbmZvICogcnBjX3Byb2M7CiAgdm9pZCAqIHJwY19hcmdwOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB2b2lkICogcnBjX3Jlc3A7CiAgc3RydWN0IHJwY19jcmVkICogcnBjX2NyZWQ7CiB9OwotCiBzdHJ1Y3QgcnBjX2NhbGxfb3BzOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBycGNfd2FpdF9xdWV1ZTsKIHN0cnVjdCBycGNfd2FpdCB7CiAgc3RydWN0IGxpc3RfaGVhZCBsaXN0OwogIHN0cnVjdCBsaXN0X2hlYWQgbGlua3M7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCBycGNfd2FpdF9xdWV1ZSAqIHJwY193YWl0cTsKIH07Ci0KIHN0cnVjdCBycGNfdGFzayB7CiAjaWZkZWYgUlBDX0RFQlVHCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGxvbmcgdGtfbWFnaWM7CiAjZW5kaWYKICBhdG9taWNfdCB0a19jb3VudDsKICBzdHJ1Y3QgbGlzdF9oZWFkIHRrX3Rhc2s7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCBycGNfY2xudCAqIHRrX2NsaWVudDsKICBzdHJ1Y3QgcnBjX3Jxc3QgKiB0a19ycXN0cDsKICBpbnQgdGtfc3RhdHVzOwotCiAgc3RydWN0IHJwY19tZXNzYWdlIHRrX21zZzsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191OCB0a19nYXJiX3JldHJ5OwogIF9fdTggdGtfY3JlZF9yZXRyeTsKLQogIHVuc2lnbmVkIGxvbmcgdGtfY29va2llOwotCiAgdm9pZCAoKnRrX3RpbWVvdXRfZm4pKHN0cnVjdCBycGNfdGFzayAqKTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdm9pZCAoKnRrX2NhbGxiYWNrKShzdHJ1Y3QgcnBjX3Rhc2sgKik7CiAgdm9pZCAoKnRrX2FjdGlvbikoc3RydWN0IHJwY190YXNrICopOwogIGNvbnN0IHN0cnVjdCBycGNfY2FsbF9vcHMgKnRrX29wczsKICB2b2lkICogdGtfY2FsbGRhdGE7Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IHRpbWVyX2xpc3QgdGtfdGltZXI7CiAgdW5zaWduZWQgbG9uZyB0a190aW1lb3V0OwogIHVuc2lnbmVkIHNob3J0IHRrX2ZsYWdzOwogIHVuc2lnbmVkIGNoYXIgdGtfcHJpb3JpdHkgOiAyOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBsb25nIHRrX3J1bnN0YXRlOwogIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp0a193b3JrcXVldWU7CiAgdW5pb24gewogIHN0cnVjdCB3b3JrX3N0cnVjdCB0a193b3JrOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgcnBjX3dhaXQgdGtfd2FpdDsKICB9IHU7Ci0KICB1bnNpZ25lZCBzaG9ydCB0a190aW1lb3V0czsKICBzaXplX3QgdGtfYnl0ZXNfc2VudDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgbG9uZyB0a19zdGFydDsKICBsb25nIHRrX3J0dDsKLQogI2lmZGVmIFJQQ19ERUJVRwogIHVuc2lnbmVkIHNob3J0IHRrX3BpZDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZW5kaWYKIH07CiAjZGVmaW5lIHRrX2F1dGggdGtfY2xpZW50LT5jbF9hdXRoCiAjZGVmaW5lIHRrX3hwcnQgdGtfY2xpZW50LT5jbF94cHJ0Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIHRhc2tfZm9yX2VhY2godGFzaywgcG9zLCBoZWFkKSAgIGxpc3RfZm9yX2VhY2gocG9zLCBoZWFkKSAgIGlmICgodGFzaz1saXN0X2VudHJ5KHBvcywgc3RydWN0IHJwY190YXNrLCB1LnRrX3dhaXQubGlzdCkpLDEpCi0KICNkZWZpbmUgdGFza19mb3JfZmlyc3QodGFzaywgaGVhZCkgICBpZiAoIWxpc3RfZW1wdHkoaGVhZCkgJiYgICAoKHRhc2s9bGlzdF9lbnRyeSgoaGVhZCktPm5leHQsIHN0cnVjdCBycGNfdGFzaywgdS50a193YWl0Lmxpc3QpKSwxKSkKLQogI2RlZmluZSBhbGx0YXNrX2Zvcl9lYWNoKHRhc2ssIHBvcywgaGVhZCkgICBsaXN0X2Zvcl9lYWNoKHBvcywgaGVhZCkgICBpZiAoKHRhc2s9bGlzdF9lbnRyeShwb3MsIHN0cnVjdCBycGNfdGFzaywgdGtfdGFzaykpLDEpCi0KIHR5cGVkZWYgdm9pZCAoKnJwY19hY3Rpb24pKHN0cnVjdCBycGNfdGFzayAqKTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBycGNfY2FsbF9vcHMgewogIHZvaWQgKCpycGNfY2FsbF9wcmVwYXJlKShzdHJ1Y3QgcnBjX3Rhc2sgKiwgdm9pZCAqKTsKICB2b2lkICgqcnBjX2NhbGxfZG9uZSkoc3RydWN0IHJwY190YXNrICosIHZvaWQgKik7CiAgdm9pZCAoKnJwY19yZWxlYXNlKSh2b2lkICopOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07Ci0KLSNkZWZpbmUgUlBDX1RBU0tfQVNZTkMgMHgwMDAxICAKLSNkZWZpbmUgUlBDX1RBU0tfU1dBUFBFUiAweDAwMDIgIAotI2RlZmluZSBSUENfVEFTS19DSElMRCAweDAwMDggIAotI2RlZmluZSBSUENfQ0FMTF9NQUpPUlNFRU4gMHgwMDIwICAKLSNkZWZpbmUgUlBDX1RBU0tfUk9PVENSRURTIDB4MDA0MCAgCi0jZGVmaW5lIFJQQ19UQVNLX0RZTkFNSUMgMHgwMDgwICAKLSNkZWZpbmUgUlBDX1RBU0tfS0lMTEVEIDB4MDEwMCAgCi0jZGVmaW5lIFJQQ19UQVNLX1NPRlQgMHgwMjAwICAKLSNkZWZpbmUgUlBDX1RBU0tfTk9JTlRSIDB4MDQwMCAgCi0KKyNkZWZpbmUgUlBDX1RBU0tfQVNZTkMgMHgwMDAxCisjZGVmaW5lIFJQQ19UQVNLX1NXQVBQRVIgMHgwMDAyCisjZGVmaW5lIFJQQ19UQVNLX0NISUxEIDB4MDAwOAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgUlBDX0NBTExfTUFKT1JTRUVOIDB4MDAyMAorI2RlZmluZSBSUENfVEFTS19ST09UQ1JFRFMgMHgwMDQwCisjZGVmaW5lIFJQQ19UQVNLX0RZTkFNSUMgMHgwMDgwCisjZGVmaW5lIFJQQ19UQVNLX0tJTExFRCAweDAxMDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFJQQ19UQVNLX1NPRlQgMHgwMjAwCisjZGVmaW5lIFJQQ19UQVNLX05PSU5UUiAweDA0MDAKICNkZWZpbmUgUlBDX0lTX0FTWU5DKHQpICgodCktPnRrX2ZsYWdzICYgUlBDX1RBU0tfQVNZTkMpCiAjZGVmaW5lIFJQQ19JU19DSElMRCh0KSAoKHQpLT50a19mbGFncyAmIFJQQ19UQVNLX0NISUxEKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUlBDX0lTX1NXQVBQRVIodCkgKCh0KS0+dGtfZmxhZ3MgJiBSUENfVEFTS19TV0FQUEVSKQogI2RlZmluZSBSUENfRE9fUk9PVE9WRVJSSURFKHQpICgodCktPnRrX2ZsYWdzICYgUlBDX1RBU0tfUk9PVENSRURTKQogI2RlZmluZSBSUENfQVNTQVNTSU5BVEVEKHQpICgodCktPnRrX2ZsYWdzICYgUlBDX1RBU0tfS0lMTEVEKQogI2RlZmluZSBSUENfRE9fQ0FMTEJBQ0sodCkgKCh0KS0+dGtfY2FsbGJhY2sgIT0gTlVMTCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFJQQ19JU19TT0ZUKHQpICgodCktPnRrX2ZsYWdzICYgUlBDX1RBU0tfU09GVCkKICNkZWZpbmUgUlBDX1RBU0tfVU5JTlRFUlJVUFRJQkxFKHQpICgodCktPnRrX2ZsYWdzICYgUlBDX1RBU0tfTk9JTlRSKQotCiAjZGVmaW5lIFJQQ19UQVNLX1JVTk5JTkcgMAogI2RlZmluZSBSUENfVEFTS19RVUVVRUQgMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUlBDX1RBU0tfV0FLRVVQIDIKICNkZWZpbmUgUlBDX1RBU0tfSEFTX1RJTUVSIDMKICNkZWZpbmUgUlBDX1RBU0tfQUNUSVZFIDQKLQogI2RlZmluZSBSUENfSVNfUlVOTklORyh0KSAodGVzdF9iaXQoUlBDX1RBU0tfUlVOTklORywgJih0KS0+dGtfcnVuc3RhdGUpKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgcnBjX3NldF9ydW5uaW5nKHQpIChzZXRfYml0KFJQQ19UQVNLX1JVTk5JTkcsICYodCktPnRrX3J1bnN0YXRlKSkKICNkZWZpbmUgcnBjX3Rlc3RfYW5kX3NldF9ydW5uaW5nKHQpICAgKHRlc3RfYW5kX3NldF9iaXQoUlBDX1RBU0tfUlVOTklORywgJih0KS0+dGtfcnVuc3RhdGUpKQogI2RlZmluZSBycGNfY2xlYXJfcnVubmluZyh0KSAgIGRvIHsgICBzbXBfbWJfX2JlZm9yZV9jbGVhcl9iaXQoKTsgICBjbGVhcl9iaXQoUlBDX1RBU0tfUlVOTklORywgJih0KS0+dGtfcnVuc3RhdGUpOyAgIHNtcF9tYl9fYWZ0ZXJfY2xlYXJfYml0KCk7ICAgfSB3aGlsZSAoMCkKLQogI2RlZmluZSBSUENfSVNfUVVFVUVEKHQpICh0ZXN0X2JpdChSUENfVEFTS19RVUVVRUQsICYodCktPnRrX3J1bnN0YXRlKSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIHJwY19zZXRfcXVldWVkKHQpIChzZXRfYml0KFJQQ19UQVNLX1FVRVVFRCwgJih0KS0+dGtfcnVuc3RhdGUpKQogI2RlZmluZSBycGNfY2xlYXJfcXVldWVkKHQpICAgZG8geyAgIHNtcF9tYl9fYmVmb3JlX2NsZWFyX2JpdCgpOyAgIGNsZWFyX2JpdChSUENfVEFTS19RVUVVRUQsICYodCktPnRrX3J1bnN0YXRlKTsgICBzbXBfbWJfX2FmdGVyX2NsZWFyX2JpdCgpOyAgIH0gd2hpbGUgKDApCi0KICNkZWZpbmUgcnBjX3N0YXJ0X3dha2V1cCh0KSAgICh0ZXN0X2FuZF9zZXRfYml0KFJQQ19UQVNLX1dBS0VVUCwgJih0KS0+dGtfcnVuc3RhdGUpID09IDApCiAjZGVmaW5lIHJwY19maW5pc2hfd2FrZXVwKHQpICAgZG8geyAgIHNtcF9tYl9fYmVmb3JlX2NsZWFyX2JpdCgpOyAgIGNsZWFyX2JpdChSUENfVEFTS19XQUtFVVAsICYodCktPnRrX3J1bnN0YXRlKTsgICBzbXBfbWJfX2FmdGVyX2NsZWFyX2JpdCgpOyAgIH0gd2hpbGUgKDApCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFJQQ19JU19BQ1RJVkFURUQodCkgKHRlc3RfYml0KFJQQ19UQVNLX0FDVElWRSwgJih0KS0+dGtfcnVuc3RhdGUpKQogI2RlZmluZSBycGNfc2V0X2FjdGl2ZSh0KSAoc2V0X2JpdChSUENfVEFTS19BQ1RJVkUsICYodCktPnRrX3J1bnN0YXRlKSkKICNkZWZpbmUgcnBjX2NsZWFyX2FjdGl2ZSh0KSAgIGRvIHsgICBzbXBfbWJfX2JlZm9yZV9jbGVhcl9iaXQoKTsgICBjbGVhcl9iaXQoUlBDX1RBU0tfQUNUSVZFLCAmKHQpLT50a19ydW5zdGF0ZSk7ICAgc21wX21iX19hZnRlcl9jbGVhcl9iaXQoKTsgICB9IHdoaWxlKDApCi0KICNkZWZpbmUgUlBDX1BSSU9SSVRZX0xPVyAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBSUENfUFJJT1JJVFlfTk9STUFMIDEKICNkZWZpbmUgUlBDX1BSSU9SSVRZX0hJR0ggMgogI2RlZmluZSBSUENfTlJfUFJJT1JJVFkgKFJQQ19QUklPUklUWV9ISUdIKzEpCi0KIHN0cnVjdCBycGNfd2FpdF9xdWV1ZSB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHNwaW5sb2NrX3QgbG9jazsKICBzdHJ1Y3QgbGlzdF9oZWFkIHRhc2tzW1JQQ19OUl9QUklPUklUWV07CiAgdW5zaWduZWQgbG9uZyBjb29raWU7CiAgdW5zaWduZWQgY2hhciBtYXhwcmlvcml0eTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgY2hhciBwcmlvcml0eTsKICB1bnNpZ25lZCBjaGFyIGNvdW50OwogIHVuc2lnbmVkIGNoYXIgbnI7CiAgdW5zaWduZWQgc2hvcnQgcWxlbjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjaWZkZWYgUlBDX0RFQlVHCiAgY29uc3QgY2hhciAqIG5hbWU7CiAjZW5kaWYKIH07Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFJQQ19CQVRDSF9DT1VOVCAxNgotCiAjaWZuZGVmIFJQQ19ERUJVRwogI2RlZmluZSBSUENfV0FJVFFfSU5JVCh2YXIscW5hbWUpIHsgICAubG9jayA9IFNQSU5fTE9DS19VTkxPQ0tFRCwgICAudGFza3MgPSB7ICAgWzBdID0gTElTVF9IRUFEX0lOSVQodmFyLnRhc2tzWzBdKSwgICBbMV0gPSBMSVNUX0hFQURfSU5JVCh2YXIudGFza3NbMV0pLCAgIFsyXSA9IExJU1RfSEVBRF9JTklUKHZhci50YXNrc1syXSksICAgfSwgICB9CiAjZWxzZQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUlBDX1dBSVRRX0lOSVQodmFyLHFuYW1lKSB7ICAgLmxvY2sgPSBTUElOX0xPQ0tfVU5MT0NLRUQsICAgLnRhc2tzID0geyAgIFswXSA9IExJU1RfSEVBRF9JTklUKHZhci50YXNrc1swXSksICAgWzFdID0gTElTVF9IRUFEX0lOSVQodmFyLnRhc2tzWzFdKSwgICBbMl0gPSBMSVNUX0hFQURfSU5JVCh2YXIudGFza3NbMl0pLCAgIH0sICAgLm5hbWUgPSBxbmFtZSwgICB9CiAjZW5kaWYKICNkZWZpbmUgUlBDX1dBSVRRKHZhcixxbmFtZSkgc3RydWN0IHJwY193YWl0X3F1ZXVlIHZhciA9IFJQQ19XQUlUUV9JTklUKHZhcixxbmFtZSkKLQogI2RlZmluZSBSUENfSVNfUFJJT1JJVFkocSkgKChxKS0+bWF4cHJpb3JpdHkgPiAwKQotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IHJwY190YXNrICpycGNfbmV3X3Rhc2soc3RydWN0IHJwY19jbG50ICosIGludCBmbGFncywKICBjb25zdCBzdHJ1Y3QgcnBjX2NhbGxfb3BzICpvcHMsIHZvaWQgKmRhdGEpOwogc3RydWN0IHJwY190YXNrICpycGNfcnVuX3Rhc2soc3RydWN0IHJwY19jbG50ICpjbG50LCBpbnQgZmxhZ3MsCiAgY29uc3Qgc3RydWN0IHJwY19jYWxsX29wcyAqb3BzLCB2b2lkICpkYXRhKTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgcnBjX3Rhc2sgKnJwY19uZXdfY2hpbGQoc3RydWN0IHJwY19jbG50ICosIHN0cnVjdCBycGNfdGFzayAqcGFyZW50KTsKLQogc3RydWN0IHJwY190YXNrICpycGNfd2FrZV91cF9uZXh0KHN0cnVjdCBycGNfd2FpdF9xdWV1ZSAqKTsKLQogI2lmZGVmIFJQQ19ERUJVRwotCiAjZW5kaWYKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNpZmRlZiBSUENfREVCVUcKICNlbmRpZgogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc3VucnBjL3N0YXRzLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc3VucnBjL3N0YXRzLmgKaW5kZXggMDNlNzMzOC4uMmJlNDY2OCAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3N1bnJwYy9zdGF0cy5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9zdW5ycGMvc3RhdHMuaApAQCAtNyw0MyArNyw0OSBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX0xJTlVYX1NVTlJQQ19TVEFUU19ICiAjZGVmaW5lIF9MSU5VWF9TVU5SUENfU1RBVFNfSAotCiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgotCiBzdHJ1Y3QgcnBjX3N0YXQgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgcnBjX3Byb2dyYW0gKiBwcm9ncmFtOwotCiAgdW5zaWduZWQgaW50IG5ldGNudCwKICBuZXR1ZHBjbnQsCiAgbmV0dGNwY250LAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBuZXR0Y3Bjb25uLAogIG5ldHJlY29ubjsKICB1bnNpZ25lZCBpbnQgcnBjY250LAogIHJwY3JldHJhbnMsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHJwY2F1dGhyZWZyZXNoLAogIHJwY2dhcmJhZ2U7CiB9OwotCiBzdHJ1Y3Qgc3ZjX3N0YXQgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3Qgc3ZjX3Byb2dyYW0gKiBwcm9ncmFtOwotCiAgdW5zaWduZWQgaW50IG5ldGNudCwKICBuZXR1ZHBjbnQsCiAgbmV0dGNwY250LAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBuZXR0Y3Bjb25uOwogIHVuc2lnbmVkIGludCBycGNjbnQsCiAgcnBjYmFkZm10LAogIHJwY2JhZGF1dGgsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHJwY2JhZGNsbnQ7CiB9OwotCiAjaWZkZWYgTU9EVUxFCi0KICNlbmRpZgotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBwcm9jX25ldF9ycGMgTlVMTAogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc3VucnBjL3N2Yy5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3N1bnJwYy9zdmMuaAppbmRleCA3YTBjYzJkLi4xY2ZmMzA4IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc3VucnBjL3N2Yy5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9zdW5ycGMvc3ZjLmgKQEAgLTcsNzYgKzcsMTQzIEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBTVU5SUENfU1ZDX0gKICNkZWZpbmUgU1VOUlBDX1NWQ19ICi0KICNpbmNsdWRlIDxsaW51eC9pbi5oPgogI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy90eXBlcy5oPgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNpbmNsdWRlIDxsaW51eC9zdW5ycGMveGRyLmg+CiAjaW5jbHVkZSA8bGludXgvc3VucnBjL3N2Y2F1dGguaD4KICNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBzdmNfc2VydiB7CiAgc3RydWN0IGxpc3RfaGVhZCBzdl90aHJlYWRzOwogIHN0cnVjdCBsaXN0X2hlYWQgc3Zfc29ja2V0czsKICBzdHJ1Y3Qgc3ZjX3Byb2dyYW0gKiBzdl9wcm9ncmFtOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3Qgc3ZjX3N0YXQgKiBzdl9zdGF0czsKICBzcGlubG9ja190IHN2X2xvY2s7CiAgdW5zaWduZWQgaW50IHN2X25ydGhyZWFkczsKICB1bnNpZ25lZCBpbnQgc3ZfYnVmc3o7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGludCBzdl94ZHJzaXplOwotCiAgc3RydWN0IGxpc3RfaGVhZCBzdl9wZXJtc29ja3M7CiAgc3RydWN0IGxpc3RfaGVhZCBzdl90ZW1wc29ja3M7CiAgaW50IHN2X3RtcGNudDsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBjaGFyICogc3ZfbmFtZTsKIH07Ci0KICNkZWZpbmUgUlBDU1ZDX01BWFBBWUxPQUQgKDY0KjEwMjR1KQotCiAjZGVmaW5lIFJQQ1NWQ19NQVhQQUdFUyAoKFJQQ1NWQ19NQVhQQVlMT0FEK1BBR0VfU0laRS0xKS9QQUdFX1NJWkUgKyAyKQotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworc3RydWN0IHN2Y19ycXN0IHsKKyBzdHJ1Y3QgbGlzdF9oZWFkIHJxX2xpc3Q7Cisgc3RydWN0IHN2Y19zb2NrICogcnFfc29jazsKKyBzdHJ1Y3Qgc29ja2FkZHJfaW4gcnFfYWRkcjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgaW50IHJxX2FkZHJsZW47Cisgc3RydWN0IHN2Y19zZXJ2ICogcnFfc2VydmVyOworIHN0cnVjdCBzdmNfcHJvY2VkdXJlICogcnFfcHJvY2luZm87Cisgc3RydWN0IGF1dGhfb3BzICogcnFfYXV0aG9wOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBzdHJ1Y3Qgc3ZjX2NyZWQgcnFfY3JlZDsKKyBzdHJ1Y3Qgc2tfYnVmZiAqIHJxX3NrYnVmZjsKKyBzdHJ1Y3Qgc3ZjX2RlZmVycmVkX3JlcSpycV9kZWZlcnJlZDsKKyBzdHJ1Y3QgeGRyX2J1ZiBycV9hcmc7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIHN0cnVjdCB4ZHJfYnVmIHJxX3JlczsKKyBzdHJ1Y3QgcGFnZSAqIHJxX2FyZ3BhZ2VzW1JQQ1NWQ19NQVhQQUdFU107Cisgc3RydWN0IHBhZ2UgKiBycV9yZXNwYWdlc1tSUENTVkNfTUFYUEFHRVNdOworIGludCBycV9yZXN0YWlscGFnZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgc2hvcnQgcnFfYXJndXNlZDsKKyBzaG9ydCBycV9hcmdoaTsKKyBzaG9ydCBycV9yZXN1c2VkOworIHUzMiBycV94aWQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIHUzMiBycV9wcm9nOworIHUzMiBycV92ZXJzOworIHUzMiBycV9wcm9jOworIHUzMiBycV9wcm90OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyB1bnNpZ25lZCBzaG9ydAorIHJxX3NlY3VyZSA6IDE7CisgX191MzIgcnFfZGFkZHI7Cisgdm9pZCAqIHJxX2FyZ3A7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIHZvaWQgKiBycV9yZXNwOworIHZvaWQgKiBycV9hdXRoX2RhdGE7CisgaW50IHJxX3Jlc2VydmVkOworIHN0cnVjdCBjYWNoZV9yZXEgcnFfY2hhbmRsZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgc3RydWN0IGF1dGhfZG9tYWluICogcnFfY2xpZW50OworIHN0cnVjdCBzdmNfY2FjaGVyZXAgKiBycV9jYWNoZXJlcDsKKyBzdHJ1Y3Qga25mc2RfZmggKiBycV9yZWZmaDsKKyBpbnQgcnFfc2VuZGZpbGVfb2s7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIHdhaXRfcXVldWVfaGVhZF90IHJxX3dhaXQ7Cit9Oworc3RydWN0IHN2Y19kZWZlcnJlZF9yZXEgeworIHUzMiBwcm90OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBzdHJ1Y3Qgc29ja2FkZHJfaW4gYWRkcjsKKyBzdHJ1Y3Qgc3ZjX3NvY2sgKnN2c2s7CisgdTMyIGRhZGRyOworIHN0cnVjdCBjYWNoZV9kZWZlcnJlZF9yZXEgaGFuZGxlOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBpbnQgYXJnc2xlbjsKKyB1MzIgYXJnc1swXTsKK307CiBzdHJ1Y3Qgc3ZjX3Byb2dyYW0geworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3Qgc3ZjX3Byb2dyYW0gKiBwZ19uZXh0OwogIHUzMiBwZ19wcm9nOwogIHVuc2lnbmVkIGludCBwZ19sb3ZlcnM7CiAgdW5zaWduZWQgaW50IHBnX2hpdmVyczsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgaW50IHBnX252ZXJzOwogIHN0cnVjdCBzdmNfdmVyc2lvbiAqKiBwZ192ZXJzOwogIGNoYXIgKiBwZ19uYW1lOwogIGNoYXIgKiBwZ19jbGFzczsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IHN2Y19zdGF0ICogcGdfc3RhdHM7CiAgaW50ICgqcGdfYXV0aGVudGljYXRlKShzdHJ1Y3Qgc3ZjX3Jxc3QgKik7CiB9OwotCiBzdHJ1Y3Qgc3ZjX3ZlcnNpb24geworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1MzIgdnNfdmVyczsKICB1MzIgdnNfbnByb2M7CiAgc3RydWN0IHN2Y19wcm9jZWR1cmUgKiB2c19wcm9jOwogIHUzMiB2c194ZHJzaXplOwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGludCAoKnZzX2Rpc3BhdGNoKShzdHJ1Y3Qgc3ZjX3Jxc3QgKiwgdTMyICopOwogfTsKLQogdHlwZWRlZiBpbnQgKCpzdmNfcHJvY2Z1bmMpKHN0cnVjdCBzdmNfcnFzdCAqLCB2b2lkICphcmdwLCB2b2lkICpyZXNwKTsKIHN0cnVjdCBzdmNfcHJvY2VkdXJlIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3ZjX3Byb2NmdW5jIHBjX2Z1bmM7CiAga3hkcnByb2NfdCBwY19kZWNvZGU7CiAga3hkcnByb2NfdCBwY19lbmNvZGU7CiAga3hkcnByb2NfdCBwY19yZWxlYXNlOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBpbnQgcGNfYXJnc2l6ZTsKICB1bnNpZ25lZCBpbnQgcGNfcmVzc2l6ZTsKICB1bnNpZ25lZCBpbnQgcGNfY291bnQ7CiAgdW5zaWduZWQgaW50IHBjX2NhY2hldHlwZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgaW50IHBjX3hkcnJlc3NpemU7CiB9OwotCiB0eXBlZGVmIHZvaWQgKCpzdmNfdGhyZWFkX2ZuKShzdHJ1Y3Qgc3ZjX3Jxc3QgKik7Ci0KIHN0cnVjdCBzdmNfc2VydiAqIHN2Y19jcmVhdGUoc3RydWN0IHN2Y19wcm9ncmFtICosIHVuc2lnbmVkIGludCk7Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9zdW5ycGMvc3ZjYXV0aC5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3N1bnJwYy9zdmNhdXRoLmgKaW5kZXggOWI0MTRkNy4uY2ZhZDA1ZiAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3N1bnJwYy9zdmNhdXRoLmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3N1bnJwYy9zdmNhdXRoLmgKQEAgLTcsOSArNywxNSBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX0xJTlVYX1NVTlJQQ19TVkNBVVRIX0hfCiAjZGVmaW5lIF9MSU5VWF9TVU5SUENfU1ZDQVVUSF9IXwotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9zdW5ycGMvdGltZXIuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9zdW5ycGMvdGltZXIuaAppbmRleCA4ZmI3OGU1Li4zNjdlMmYxIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc3VucnBjL3RpbWVyLmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3N1bnJwYy90aW1lci5oCkBAIC03LDE4ICs3LDI0IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfTElOVVhfU1VOUlBDX1RJTUVSX0gKICNkZWZpbmUgX0xJTlVYX1NVTlJQQ19USU1FUl9ICi0KICNpbmNsdWRlIDxhc20vYXRvbWljLmg+Ci0KIHN0cnVjdCBycGNfcnR0IHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgbG9uZyB0aW1lbzsKICB1bnNpZ25lZCBsb25nIHNydHRbNV07CiAgdW5zaWduZWQgbG9uZyBzZHJ0dFs1XTsKICBpbnQgbnRpbWVvdXRzWzVdOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07Ci0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3N1bnJwYy90eXBlcy5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3N1bnJwYy90eXBlcy5oCmluZGV4IGNlNTIwNTIuLjQ4ZGM5NjggMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9zdW5ycGMvdHlwZXMuaAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc3VucnBjL3R5cGVzLmgKQEAgLTcsMTYgKzcsMjIgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9MSU5VWF9TVU5SUENfVFlQRVNfSF8KICNkZWZpbmUgX0xJTlVYX1NVTlJQQ19UWVBFU19IXwotCiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KICNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjaW5jbHVkZSA8bGludXgvc3VucnBjL2RlYnVnLmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgotCiAjZGVmaW5lIHNpZ25hbGxlZCgpIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKLQogI2VuZGlmCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3N1bnJwYy94ZHIuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9zdW5ycGMveGRyLmgKaW5kZXggZDUxMzg0My4uYzBhMmJjNSAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3N1bnJwYy94ZHIuaAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc3VucnBjL3hkci5oCkBAIC03LDkgKzcsMTUgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9TVU5SUENfWERSX0hfCiAjZGVmaW5lIF9TVU5SUENfWERSX0hfCi0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3N1bnJwYy94cHJ0LmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc3VucnBjL3hwcnQuaAppbmRleCAxNDVhMjZkLi4xNWI5MTI0IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc3VucnBjL3hwcnQuaAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc3VucnBjL3hwcnQuaApAQCAtNywxNjYgKzcsMTc0IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfTElOVVhfU1VOUlBDX1hQUlRfSAogI2RlZmluZSBfTElOVVhfU1VOUlBDX1hQUlRfSAotCiAjaW5jbHVkZSA8bGludXgvdWlvLmg+CiAjaW5jbHVkZSA8bGludXgvc29ja2V0Lmg+CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2luY2x1ZGUgPGxpbnV4L2luLmg+CiAjaW5jbHVkZSA8bGludXgvc3VucnBjL3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc3VucnBjL3hkci5oPgotCiAjZGVmaW5lIFJQQ19NSU5fU0xPVF9UQUJMRSAoMlUpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBSUENfREVGX1NMT1RfVEFCTEUgKDE2VSkKICNkZWZpbmUgUlBDX01BWF9TTE9UX1RBQkxFICgxMjhVKQotCiAjZGVmaW5lIFJQQ19DQUxMSERSU0laRSA2CiAjZGVmaW5lIFJQQ19SRVBIRFJTSVpFIDQKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUlBDX01JTl9SRVNWUE9SVCAoMVUpCiAjZGVmaW5lIFJQQ19NQVhfUkVTVlBPUlQgKDY1NTM1VSkKICNkZWZpbmUgUlBDX0RFRl9NSU5fUkVTVlBPUlQgKDY2NVUpCiAjZGVmaW5lIFJQQ19ERUZfTUFYX1JFU1ZQT1JUICgxMDIzVSkKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBycGNfdGltZW91dCB7CiAgdW5zaWduZWQgbG9uZyB0b19pbml0dmFsLAogIHRvX21heHZhbCwKICB0b19pbmNyZW1lbnQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGludCB0b19yZXRyaWVzOwogIHVuc2lnbmVkIGNoYXIgdG9fZXhwb25lbnRpYWw7CiB9OwotCiBzdHJ1Y3QgcnBjX3Rhc2s7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IHJwY194cHJ0Owogc3RydWN0IHNlcV9maWxlOwotCiBzdHJ1Y3QgcnBjX3Jxc3QgewotCiAgc3RydWN0IHJwY194cHJ0ICogcnFfeHBydDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IHhkcl9idWYgcnFfc25kX2J1ZjsKICBzdHJ1Y3QgeGRyX2J1ZiBycV9yY3ZfYnVmOwotCiAgc3RydWN0IHJwY190YXNrICogcnFfdGFzazsKICBfX3UzMiBycV94aWQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGludCBycV9jb25nOwogIGludCBycV9yZWNlaXZlZDsKICB1MzIgcnFfc2Vxbm87CiAgaW50IHJxX2VuY19wYWdlc19udW07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCBwYWdlICoqcnFfZW5jX3BhZ2VzOwogIHZvaWQgKCpycV9yZWxlYXNlX3NuZF9idWYpKHN0cnVjdCBycGNfcnFzdCAqKTsKICBzdHJ1Y3QgbGlzdF9oZWFkIHJxX2xpc3Q7Ci0KICBfX3UzMiAqIHJxX2J1ZmZlcjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc2l6ZV90IHJxX2J1ZnNpemU7Ci0KICBzdHJ1Y3QgeGRyX2J1ZiBycV9wcml2YXRlX2J1ZjsKICB1bnNpZ25lZCBsb25nIHJxX21ham9ydGltZW87CiAgdW5zaWduZWQgbG9uZyBycV90aW1lb3V0OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBpbnQgcnFfcmV0cmllczsKLQogIHUzMiBycV9ieXRlc19zZW50OwotCiAgdW5zaWduZWQgbG9uZyBycV94dGltZTsKICBpbnQgcnFfbnRyYW5zOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiAjZGVmaW5lIHJxX3N2ZWMgcnFfc25kX2J1Zi5oZWFkCiAjZGVmaW5lIHJxX3NsZW4gcnFfc25kX2J1Zi5sZW4KLQogc3RydWN0IHJwY194cHJ0X29wcyB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHZvaWQgKCpzZXRfYnVmZmVyX3NpemUpKHN0cnVjdCBycGNfeHBydCAqeHBydCwgc2l6ZV90IHNuZHNpemUsIHNpemVfdCByY3ZzaXplKTsKICBpbnQgKCpyZXNlcnZlX3hwcnQpKHN0cnVjdCBycGNfdGFzayAqdGFzayk7CiAgdm9pZCAoKnJlbGVhc2VfeHBydCkoc3RydWN0IHJwY194cHJ0ICp4cHJ0LCBzdHJ1Y3QgcnBjX3Rhc2sgKnRhc2spOwogIHZvaWQgKCpzZXRfcG9ydCkoc3RydWN0IHJwY194cHJ0ICp4cHJ0LCB1bnNpZ25lZCBzaG9ydCBwb3J0KTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdm9pZCAoKmNvbm5lY3QpKHN0cnVjdCBycGNfdGFzayAqdGFzayk7CiAgdm9pZCAqICgqYnVmX2FsbG9jKShzdHJ1Y3QgcnBjX3Rhc2sgKnRhc2ssIHNpemVfdCBzaXplKTsKICB2b2lkICgqYnVmX2ZyZWUpKHN0cnVjdCBycGNfdGFzayAqdGFzayk7CiAgaW50ICgqc2VuZF9yZXF1ZXN0KShzdHJ1Y3QgcnBjX3Rhc2sgKnRhc2spOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB2b2lkICgqc2V0X3JldHJhbnNfdGltZW91dCkoc3RydWN0IHJwY190YXNrICp0YXNrKTsKICB2b2lkICgqdGltZXIpKHN0cnVjdCBycGNfdGFzayAqdGFzayk7CiAgdm9pZCAoKnJlbGVhc2VfcmVxdWVzdCkoc3RydWN0IHJwY190YXNrICp0YXNrKTsKICB2b2lkICgqY2xvc2UpKHN0cnVjdCBycGNfeHBydCAqeHBydCk7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHZvaWQgKCpkZXN0cm95KShzdHJ1Y3QgcnBjX3hwcnQgKnhwcnQpOwogIHZvaWQgKCpwcmludF9zdGF0cykoc3RydWN0IHJwY194cHJ0ICp4cHJ0LCBzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSk7CiB9OwotCiBzdHJ1Y3QgcnBjX3hwcnQgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgcnBjX3hwcnRfb3BzICogb3BzOwogIHN0cnVjdCBzb2NrZXQgKiBzb2NrOwogIHN0cnVjdCBzb2NrICogaW5ldDsKLQogIHN0cnVjdCBycGNfdGltZW91dCB0aW1lb3V0OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3Qgc29ja2FkZHJfaW4gYWRkcjsKICBpbnQgcHJvdDsKLQogIHVuc2lnbmVkIGxvbmcgY29uZzsKICB1bnNpZ25lZCBsb25nIGN3bmQ7Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc2l6ZV90IHJjdnNpemUsCiAgc25kc2l6ZTsKLQogIHNpemVfdCBtYXhfcGF5bG9hZDsKICB1bnNpZ25lZCBpbnQgdHNoX3NpemU7Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IHJwY193YWl0X3F1ZXVlIHNlbmRpbmc7CiAgc3RydWN0IHJwY193YWl0X3F1ZXVlIHJlc2VuZDsKICBzdHJ1Y3QgcnBjX3dhaXRfcXVldWUgcGVuZGluZzsKICBzdHJ1Y3QgcnBjX3dhaXRfcXVldWUgYmFja2xvZzsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IGxpc3RfaGVhZCBmcmVlOwogIHN0cnVjdCBycGNfcnFzdCAqIHNsb3Q7CiAgdW5zaWduZWQgaW50IG1heF9yZXFzOwogIHVuc2lnbmVkIGxvbmcgc3RhdGU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGNoYXIgc2h1dGRvd24gOiAxLAogIHJlc3Zwb3J0IDogMTsKLQogIF9fdTMyIHhpZDsKLQogIHUzMiB0Y3BfcmVjbSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdGNwX3hpZCwKICB0Y3BfcmVjbGVuLAogIHRjcF9vZmZzZXQ7CiAgdW5zaWduZWQgbG9uZyB0Y3BfY29waWVkLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB0Y3BfZmxhZ3M7Ci0KICB1bnNpZ25lZCBsb25nIGNvbm5lY3RfdGltZW91dCwKICBiaW5kX3RpbWVvdXQsCiAgcmVlc3RhYmxpc2hfdGltZW91dDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IHdvcmtfc3RydWN0IGNvbm5lY3Rfd29ya2VyOwogIHVuc2lnbmVkIHNob3J0IHBvcnQ7Ci0KICBzdHJ1Y3Qgd29ya19zdHJ1Y3QgdGFza19jbGVhbnVwOwogIHN0cnVjdCB0aW1lcl9saXN0IHRpbWVyOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBsb25nIGxhc3RfdXNlZCwKICBpZGxlX3RpbWVvdXQ7Ci0KICBzcGlubG9ja190IHRyYW5zcG9ydF9sb2NrOwogIHNwaW5sb2NrX3QgcmVzZXJ2ZV9sb2NrOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgcnBjX3Rhc2sgKiBzbmRfdGFzazsKLQogIHN0cnVjdCBsaXN0X2hlYWQgcmVjdjsKLQogIHN0cnVjdCB7CiAgdW5zaWduZWQgbG9uZyBiaW5kX2NvdW50LAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBjb25uZWN0X2NvdW50LAogIGNvbm5lY3Rfc3RhcnQsCiAgY29ubmVjdF90aW1lLAogIHNlbmRzLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICByZWN2cywKICBiYWRfeGlkczsKLQogIHVuc2lnbmVkIGxvbmcgbG9uZyByZXFfdSwKICBia2xvZ191OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB9IHN0YXQ7Ci0KICB2b2lkICgqb2xkX2RhdGFfcmVhZHkpKHN0cnVjdCBzb2NrICosIGludCk7CiAgdm9pZCAoKm9sZF9zdGF0ZV9jaGFuZ2UpKHN0cnVjdCBzb2NrICopOwogIHZvaWQgKCpvbGRfd3JpdGVfc3BhY2UpKHN0cnVjdCBzb2NrICopOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07Ci0KICNkZWZpbmUgWFBSVF9MQVNUX0ZSQUcgKDEgPDwgMCkKICNkZWZpbmUgWFBSVF9DT1BZX1JFQ00gKDEgPDwgMSkKICNkZWZpbmUgWFBSVF9DT1BZX1hJRCAoMSA8PCAyKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgWFBSVF9DT1BZX0RBVEEgKDEgPDwgMykKLQogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc3dfc3luYy5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3N3X3N5bmMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMWMwNTQ3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3N3X3N5bmMuaApAQCAtMCwwICsxLDMzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9MSU5VWF9TV19TWU5DX0gKKyNkZWZpbmUgX0xJTlVYX1NXX1NZTkNfSAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CitzdHJ1Y3Qgc3dfc3luY19jcmVhdGVfZmVuY2VfZGF0YSB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTMyIHZhbHVlOworIGNoYXIgbmFtZVszMl07CisgX19zMzIgZmVuY2U7Cit9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgU1dfU1lOQ19JT0NfTUFHSUMgJ1cnCisjZGVmaW5lIFNXX1NZTkNfSU9DX0NSRUFURV9GRU5DRSBfSU9XUihTV19TWU5DX0lPQ19NQUdJQywgMCwgIHN0cnVjdCBzd19zeW5jX2NyZWF0ZV9mZW5jZV9kYXRhKQorI2RlZmluZSBTV19TWU5DX0lPQ19JTkMgX0lPVyhTV19TWU5DX0lPQ19NQUdJQywgMSwgX191MzIpCisjZW5kaWYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc3dhYi5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3N3YWIuaAppbmRleCA4ZjdkMGQ2Li4yYTkxNzk3IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc3dhYi5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9zd2FiLmgKQEAgLTcsNzQgKzcsODkgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9MSU5VWF9TV0FCX0gKICNkZWZpbmUgX0xJTlVYX1NXQUJfSAotCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNpbmNsdWRlIDxhc20vc3dhYi5oPgotCiAjZGVmaW5lIF9fX2NvbnN0YW50X3N3YWIxNih4KSAoKF9fdTE2KSggICAoKChfX3UxNikoeCkgJiAoX191MTYpMHgwMGZmVSkgPDwgOCkgfCAgICgoKF9fdTE2KSh4KSAmIChfX3UxNikweGZmMDBVKSA+PiA4KSkpCi0KICNkZWZpbmUgX19fY29uc3RhbnRfc3dhYjMyKHgpICgoX191MzIpKCAgICgoKF9fdTMyKSh4KSAmIChfX3UzMikweDAwMDAwMGZmVUwpIDw8IDI0KSB8ICAgKCgoX191MzIpKHgpICYgKF9fdTMyKTB4MDAwMGZmMDBVTCkgPDwgOCkgfCAgICgoKF9fdTMyKSh4KSAmIChfX3UzMikweDAwZmYwMDAwVUwpID4+IDgpIHwgICAoKChfX3UzMikoeCkgJiAoX191MzIpMHhmZjAwMDAwMFVMKSA+PiAyNCkpKQotCiAjZGVmaW5lIF9fX2NvbnN0YW50X3N3YWI2NCh4KSAoKF9fdTY0KSggICAoKChfX3U2NCkoeCkgJiAoX191NjQpMHgwMDAwMDAwMDAwMDAwMGZmVUxMKSA8PCA1NikgfCAgICgoKF9fdTY0KSh4KSAmIChfX3U2NCkweDAwMDAwMDAwMDAwMGZmMDBVTEwpIDw8IDQwKSB8ICAgKCgoX191NjQpKHgpICYgKF9fdTY0KTB4MDAwMDAwMDAwMGZmMDAwMFVMTCkgPDwgMjQpIHwgICAoKChfX3U2NCkoeCkgJiAoX191NjQpMHgwMDAwMDAwMGZmMDAwMDAwVUxMKSA8PCA4KSB8ICAgKCgoX191NjQpKHgpICYgKF9fdTY0KTB4MDAwMDAwZmYwMDAwMDAwMFVMTCkgPj4gOCkgfCAgICgoKF9fdTY0KSh4KSAmIChfX3U2NCkweDAwMDBmZjAwMDAwMDAwMDBVTEwpID4+IDI0KSB8ICAgKCgoX191NjQpKHgpICYgKF9fdTY0KTB4MDBmZjAwMDAwMDAwMDAwMFVMTCkgPj4gNDApIHwgICAoKChfX3U2NCkoeCkgJiAoX191NjQpMHhmZjAwMDAwMDAwMDAwMDAwVUxMKSA+PiA1NikpKQotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX19jb25zdGFudF9zd2FodzMyKHgpICgoX191MzIpKCAgICgoKF9fdTMyKSh4KSAmIChfX3UzMikweDAwMDBmZmZmVUwpIDw8IDE2KSB8ICAgKCgoX191MzIpKHgpICYgKF9fdTMyKTB4ZmZmZjAwMDBVTCkgPj4gMTYpKSkKLQogI2RlZmluZSBfX19jb25zdGFudF9zd2FoYjMyKHgpICgoX191MzIpKCAgICgoKF9fdTMyKSh4KSAmIChfX3UzMikweDAwZmYwMGZmVUwpIDw8IDgpIHwgICAoKChfX3UzMikoeCkgJiAoX191MzIpMHhmZjAwZmYwMFVMKSA+PiA4KSkpCi0KICNpZmRlZiBfX2FyY2hfc3dhYjE2CiAjZWxzZQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlbmRpZgogI2lmZGVmIF9fYXJjaF9zd2FiMzIKICNlbHNlCiAjZW5kaWYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjaWZkZWYgX19hcmNoX3N3YWI2NAogI2VsaWYgZGVmaW5lZChfX1NXQUJfNjRfVEhSVV8zMl9fKQogI2Vsc2UKICNlbmRpZgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNpZmRlZiBfX2FyY2hfc3dhaHczMgogI2Vsc2UKICNlbmRpZgogI2lmZGVmIF9fYXJjaF9zd2FoYjMyCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2Vsc2UKICNlbmRpZgogI2RlZmluZSBfX3N3YWIxNih4KSAgIChfX2J1aWx0aW5fY29uc3RhbnRfcCgoX191MTYpKHgpKSA/ICAgX19fY29uc3RhbnRfc3dhYjE2KHgpIDogICBfX2Zzd2FiMTYoeCkpCiAjZGVmaW5lIF9fc3dhYjMyKHgpICAgKF9fYnVpbHRpbl9jb25zdGFudF9wKChfX3UzMikoeCkpID8gICBfX19jb25zdGFudF9zd2FiMzIoeCkgOiAgIF9fZnN3YWIzMih4KSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIF9fc3dhYjY0KHgpICAgKF9fYnVpbHRpbl9jb25zdGFudF9wKChfX3U2NCkoeCkpID8gICBfX19jb25zdGFudF9zd2FiNjQoeCkgOiAgIF9fZnN3YWI2NCh4KSkKICNkZWZpbmUgX19zd2FodzMyKHgpICAgKF9fYnVpbHRpbl9jb25zdGFudF9wKChfX3UzMikoeCkpID8gICBfX19jb25zdGFudF9zd2FodzMyKHgpIDogICBfX2Zzd2FodzMyKHgpKQogI2RlZmluZSBfX3N3YWhiMzIoeCkgICAoX19idWlsdGluX2NvbnN0YW50X3AoKF9fdTMyKSh4KSkgPyAgIF9fX2NvbnN0YW50X3N3YWhiMzIoeCkgOiAgIF9fZnN3YWhiMzIoeCkpCiAjaWZkZWYgX19hcmNoX3N3YWIxNnAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZWxzZQogI2VuZGlmCiAjaWZkZWYgX19hcmNoX3N3YWIzMnAKICNlbHNlCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2VuZGlmCiAjaWZkZWYgX19hcmNoX3N3YWI2NHAKICNlbHNlCiAjZW5kaWYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjaWZkZWYgX19hcmNoX3N3YWh3MzJwCiAjZWxzZQogI2VuZGlmCiAjaWZkZWYgX19hcmNoX3N3YWhiMzJwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2Vsc2UKICNlbmRpZgogI2lmZGVmIF9fYXJjaF9zd2FiMTZzCiAjZWxzZQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlbmRpZgogI2lmZGVmIF9fYXJjaF9zd2FiMzJzCiAjZWxzZQogI2VuZGlmCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2lmZGVmIF9fYXJjaF9zd2FiNjRzCiAjZWxzZQogI2VuZGlmCiAjaWZkZWYgX19hcmNoX3N3YWh3MzJzCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2Vsc2UKICNlbmRpZgogI2lmZGVmIF9fYXJjaF9zd2FoYjMycwogI2Vsc2UKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZW5kaWYKICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3N3YXAuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9zd2FwLmgKaW5kZXggNjNiYTU1Ni4uM2ZiMTVjYyAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3N3YXAuaAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc3dhcC5oCkBAIC03LDMzICs3LDU4IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfTElOVVhfU1dBUF9ICiAjZGVmaW5lIF9MSU5VWF9TV0FQX0gKLQogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNpbmNsdWRlIDxsaW51eC9tbXpvbmUuaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLQogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KLQotI2RlZmluZSBTV0FQX0ZMQUdfUFJFRkVSIDB4ODAwMCAgCisjZGVmaW5lIFNXQVBfRkxBR19QUkVGRVIgMHg4MDAwCiAjZGVmaW5lIFNXQVBfRkxBR19QUklPX01BU0sgMHg3ZmZmCiAjZGVmaW5lIFNXQVBfRkxBR19QUklPX1NISUZUIDAKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTUFYX1NXQVBGSUxFU19TSElGVCA1CiAjZGVmaW5lIE1BWF9TV0FQRklMRVMgKDEgPDwgTUFYX1NXQVBGSUxFU19TSElGVCkKLQordW5pb24gc3dhcF9oZWFkZXIgeworIHN0cnVjdCB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIGNoYXIgcmVzZXJ2ZWRbUEFHRV9TSVpFIC0gMTBdOworIGNoYXIgbWFnaWNbMTBdOworIH0gbWFnaWM7Cisgc3RydWN0IHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgY2hhciBib290Yml0c1sxMDI0XTsKKyBfX3UzMiB2ZXJzaW9uOworIF9fdTMyIGxhc3RfcGFnZTsKKyBfX3UzMiBucl9iYWRwYWdlczsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgdW5zaWduZWQgY2hhciBzd3NfdXVpZFsxNl07CisgdW5zaWduZWQgY2hhciBzd3Nfdm9sdW1lWzE2XTsKKyBfX3UzMiBwYWRkaW5nWzExN107CisgX191MzIgYmFkcGFnZXNbMV07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIH0gaW5mbzsKK307CiB0eXBlZGVmIHN0cnVjdCB7CiAgdW5zaWduZWQgbG9uZyB2YWw7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfSBzd3BfZW50cnlfdDsKLQogc3RydWN0IHJlY2xhaW1fc3RhdGUgewogIHVuc2lnbmVkIGxvbmcgcmVjbGFpbWVkX3NsYWI7CiB9OwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc3luYy5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3N5bmMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzFlYTEzCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3N5bmMuaApAQCAtMCwwICsxLDUxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9MSU5VWF9TWU5DX0gKKyNkZWZpbmUgX0xJTlVYX1NZTkNfSAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CitzdHJ1Y3Qgc3luY19tZXJnZV9kYXRhIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX19zMzIgZmQyOworIGNoYXIgbmFtZVszMl07CisgX19zMzIgZmVuY2U7Cit9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK3N0cnVjdCBzeW5jX3B0X2luZm8geworIF9fdTMyIGxlbjsKKyBjaGFyIG9ial9uYW1lWzMyXTsKKyBjaGFyIGRyaXZlcl9uYW1lWzMyXTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX19zMzIgc3RhdHVzOworIF9fdTY0IHRpbWVzdGFtcF9uczsKKyBfX3U4IGRyaXZlcl9kYXRhWzBdOworfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCitzdHJ1Y3Qgc3luY19mZW5jZV9pbmZvX2RhdGEgeworIF9fdTMyIGxlbjsKKyBjaGFyIG5hbWVbMzJdOworIF9fczMyIHN0YXR1czsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191OCBwdF9pbmZvWzBdOworfTsKKyNkZWZpbmUgU1lOQ19JT0NfTUFHSUMgJz4nCisjZGVmaW5lIFNZTkNfSU9DX1dBSVQgX0lPVyhTWU5DX0lPQ19NQUdJQywgMCwgX19zMzIpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBTWU5DX0lPQ19NRVJHRSBfSU9XUihTWU5DX0lPQ19NQUdJQywgMSwgc3RydWN0IHN5bmNfbWVyZ2VfZGF0YSkKKyNkZWZpbmUgU1lOQ19JT0NfRkVOQ0VfSU5GTyBfSU9XUihTWU5DX0lPQ19NQUdJQywgMiwgIHN0cnVjdCBzeW5jX2ZlbmNlX2luZm9fZGF0YSkKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3N5c2N0bC5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3N5c2N0bC5oCmluZGV4IDMyOWU1NjEuLjRlOTJmNWMgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9zeXNjdGwuaAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc3lzY3RsLmgKQEAgLTcsODE4ICs3LDk0MCBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX0xJTlVYX1NZU0NUTF9ICiAjZGVmaW5lIF9MSU5VWF9TWVNDVExfSAotCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KLQogc3RydWN0IGZpbGU7CiBzdHJ1Y3QgY29tcGxldGlvbjsKLQotI2RlZmluZSBDVExfTUFYTkFNRSAxMCAgCi0KKyNkZWZpbmUgQ1RMX01BWE5BTUUgMTAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgX19zeXNjdGxfYXJncyB7CiAgaW50IF9fdXNlciAqbmFtZTsKICBpbnQgbmxlbjsKICB2b2lkIF9fdXNlciAqb2xkdmFsOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzaXplX3QgX191c2VyICpvbGRsZW5wOwogIHZvaWQgX191c2VyICpuZXd2YWw7CiAgc2l6ZV90IG5ld2xlbjsKLSB1bnNpZ25lZCBsb25nIF9fdW51c2VkWzRdOworIHVuc2lnbmVkIGxvbmcgX19saW51eF91bnVzZWRbNF07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKLQogZW51bQogewogIENUTF9LRVJOPTEsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIENUTF9WTT0yLAogIENUTF9ORVQ9MywKLQogIENUTF9GUz01LAogIENUTF9ERUJVRz02LAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBDVExfREVWPTcsCiAgQ1RMX0JVUz04LAogIENUTF9BQkk9OSwKICBDVExfQ1BVPTEwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKLQogZW51bQogewogIENUTF9CVVNfSVNBPTEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwotCiBlbnVtCiB7CiAgSU5PVElGWV9NQVhfVVNFUl9JTlNUQU5DRVM9MSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgSU5PVElGWV9NQVhfVVNFUl9XQVRDSEVTPTIsCiAgSU5PVElGWV9NQVhfUVVFVUVEX0VWRU5UUz0zCiB9OwotCiBlbnVtCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogewogIEtFUk5fT1NUWVBFPTEsCiAgS0VSTl9PU1JFTEVBU0U9MiwKICBLRVJOX09TUkVWPTMsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIEtFUk5fVkVSU0lPTj00LAogIEtFUk5fU0VDVVJFTUFTSz01LAogIEtFUk5fUFJPRj02LAogIEtFUk5fTk9ERU5BTUU9NywKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgS0VSTl9ET01BSU5OQU1FPTgsCi0KICBLRVJOX0NBUF9CU0VUPTE0LAogIEtFUk5fUEFOSUM9MTUsCiAgS0VSTl9SRUFMUk9PVERFVj0xNiwKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBLRVJOX1NQQVJDX1JFQk9PVD0yMSwKICBLRVJOX0NUTEFMVERFTD0yMiwKICBLRVJOX1BSSU5USz0yMywKICBLRVJOX05BTUVUUkFOUz0yNCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgS0VSTl9QUENfSFRBQlJFQ0xBSU09MjUsCiAgS0VSTl9QUENfWkVST1BBR0VEPTI2LAogIEtFUk5fUFBDX1BPV0VSU0FWRV9OQVA9MjcsCiAgS0VSTl9NT0RQUk9CRT0yOCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgS0VSTl9TR19CSUdfQlVGRj0yOSwKICBLRVJOX0FDQ1Q9MzAsCiAgS0VSTl9QUENfTDJDUj0zMSwKLQogIEtFUk5fUlRTSUdOUj0zMiwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgS0VSTl9SVFNJR01BWD0zMywKLQogIEtFUk5fU0hNTUFYPTM0LAogIEtFUk5fTVNHTUFYPTM1LAogIEtFUk5fTVNHTU5CPTM2LAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBLRVJOX01TR1BPT0w9MzcsCiAgS0VSTl9TWVNSUT0zOCwKICBLRVJOX01BWF9USFJFQURTPTM5LAogIEtFUk5fUkFORE9NPTQwLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBLRVJOX1NITUFMTD00MSwKICBLRVJOX01TR01OST00MiwKICBLRVJOX1NFTT00MywKICBLRVJOX1NQQVJDX1NUT1BfQT00NCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgS0VSTl9TSE1NTkk9NDUsCiAgS0VSTl9PVkVSRkxPV1VJRD00NiwKICBLRVJOX09WRVJGTE9XR0lEPTQ3LAogIEtFUk5fU0hNUEFUSD00OCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgS0VSTl9IT1RQTFVHPTQ5LAogIEtFUk5fSUVFRV9FTVVMQVRJT05fV0FSTklOR1M9NTAsCiAgS0VSTl9TMzkwX1VTRVJfREVCVUdfTE9HR0lORz01MSwKICBLRVJOX0NPUkVfVVNFU19QSUQ9NTIsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIEtFUk5fVEFJTlRFRD01MywKICBLRVJOX0NBRFBJRD01NCwKICBLRVJOX1BJRE1BWD01NSwKICBLRVJOX0NPUkVfUEFUVEVSTj01NiwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgS0VSTl9QQU5JQ19PTl9PT1BTPTU3LAogIEtFUk5fSFBQQV9QV1JTVz01OCwKICBLRVJOX0hQUEFfVU5BTElHTkVEPTU5LAogIEtFUk5fUFJJTlRLX1JBVEVMSU1JVD02MCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgS0VSTl9QUklOVEtfUkFURUxJTUlUX0JVUlNUPTYxLAogIEtFUk5fUFRZPTYyLAogIEtFUk5fTkdST1VQU19NQVg9NjMsCiAgS0VSTl9TUEFSQ19TQ09OU19QV1JPRkY9NjQsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIEtFUk5fSFpfVElNRVI9NjUsCiAgS0VSTl9VTktOT1dOX05NSV9QQU5JQz02NiwKICBLRVJOX0JPT1RMT0FERVJfVFlQRT02NywKICBLRVJOX1JBTkRPTUlaRT02OCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgS0VSTl9TRVRVSURfRFVNUEFCTEU9NjksCiAgS0VSTl9TUElOX1JFVFJZPTcwLAogIEtFUk5fQUNQSV9WSURFT19GTEFHUz03MSwKICBLRVJOX0lBNjRfVU5BTElHTkVEPTcyLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBLRVJOX0NPTVBBVF9MT0c9NzMsCiAgS0VSTl9NQVhfTE9DS19ERVBUSD03NCwKIH07Ci0KIGVudW0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB7CiAgVk1fVU5VU0VEMT0xLAogIFZNX1VOVVNFRDI9MiwKICBWTV9VTlVTRUQzPTMsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFZNX1VOVVNFRDQ9NCwKICBWTV9PVkVSQ09NTUlUX01FTU9SWT01LAogIFZNX1VOVVNFRDU9NiwKICBWTV9VTlVTRUQ3PTcsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFZNX1VOVVNFRDg9OCwKICBWTV9VTlVTRUQ5PTksCiAgVk1fUEFHRV9DTFVTVEVSPTEwLAogIFZNX0RJUlRZX0JBQ0tHUk9VTkQ9MTEsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFZNX0RJUlRZX1JBVElPPTEyLAogIFZNX0RJUlRZX1dCX0NTPTEzLAogIFZNX0RJUlRZX0VYUElSRV9DUz0xNCwKICBWTV9OUl9QREZMVVNIX1RIUkVBRFM9MTUsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFZNX09WRVJDT01NSVRfUkFUSU89MTYsCiAgVk1fUEFHRUJVRj0xNywKICBWTV9IVUdFVExCX1BBR0VTPTE4LAogIFZNX1NXQVBQSU5FU1M9MTksCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFZNX0xPV01FTV9SRVNFUlZFX1JBVElPPTIwLAogIFZNX01JTl9GUkVFX0tCWVRFUz0yMSwKICBWTV9NQVhfTUFQX0NPVU5UPTIyLAogIFZNX0xBUFRPUF9NT0RFPTIzLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBWTV9CTE9DS19EVU1QPTI0LAogIFZNX0hVR0VUTEJfR1JPVVA9MjUsCiAgVk1fVkZTX0NBQ0hFX1BSRVNTVVJFPTI2LAogIFZNX0xFR0FDWV9WQV9MQVlPVVQ9MjcsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFZNX1NXQVBfVE9LRU5fVElNRU9VVD0yOCwKICBWTV9EUk9QX1BBR0VDQUNIRT0yOSwKICBWTV9QRVJDUFVfUEFHRUxJU1RfRlJBQ1RJT049MzAsCiAgVk1fWk9ORV9SRUNMQUlNX01PREU9MzEsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFZNX01JTl9VTk1BUFBFRD0zMiwKICBWTV9QQU5JQ19PTl9PT009MzMsCiAgVk1fVkRTT19FTkFCTEVEPTM0LAogfTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIGVudW0KIHsKICBORVRfQ09SRT0xLAogIE5FVF9FVEhFUj0yLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBORVRfODAyPTMsCiAgTkVUX1VOSVg9NCwKICBORVRfSVBWND01LAogIE5FVF9JUFg9NiwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkVUX0FUQUxLPTcsCiAgTkVUX05FVFJPTT04LAogIE5FVF9BWDI1PTksCiAgTkVUX0JSSURHRT0xMCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkVUX1JPU0U9MTEsCiAgTkVUX0lQVjY9MTIsCiAgTkVUX1gyNT0xMywKICBORVRfVFI9MTQsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5FVF9ERUNORVQ9MTUsCiAgTkVUX0VDT05FVD0xNiwKICBORVRfU0NUUD0xNywKICBORVRfTExDPTE4LAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBORVRfTkVURklMVEVSPTE5LAogIE5FVF9EQ0NQPTIwLAogfTsKLQogZW51bQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHsKICBSQU5ET01fUE9PTFNJWkU9MSwKICBSQU5ET01fRU5UUk9QWV9DT1VOVD0yLAogIFJBTkRPTV9SRUFEX1RIUkVTSD0zLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBSQU5ET01fV1JJVEVfVEhSRVNIPTQsCiAgUkFORE9NX0JPT1RfSUQ9NSwKICBSQU5ET01fVVVJRD02CiB9OwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogZW51bQogewogIFBUWV9NQVg9MSwKICBQVFlfTlI9MgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07Ci0KIGVudW0KIHsKICBCVVNfSVNBX01FTV9CQVNFPTEsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIEJVU19JU0FfUE9SVF9CQVNFPTIsCiAgQlVTX0lTQV9QT1JUX1NISUZUPTMKIH07Ci0KIGVudW0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB7CiAgTkVUX0NPUkVfV01FTV9NQVg9MSwKICBORVRfQ09SRV9STUVNX01BWD0yLAogIE5FVF9DT1JFX1dNRU1fREVGQVVMVD0zLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBORVRfQ09SRV9STUVNX0RFRkFVTFQ9NCwKLQogIE5FVF9DT1JFX01BWF9CQUNLTE9HPTYsCiAgTkVUX0NPUkVfRkFTVFJPVVRFPTcsCiAgTkVUX0NPUkVfTVNHX0NPU1Q9OCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkVUX0NPUkVfTVNHX0JVUlNUPTksCiAgTkVUX0NPUkVfT1BUTUVNX01BWD0xMCwKICBORVRfQ09SRV9IT1RfTElTVF9MRU5HVEg9MTEsCiAgTkVUX0NPUkVfRElWRVJUX1ZFUlNJT049MTIsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5FVF9DT1JFX05PX0NPTkdfVEhSRVNIPTEzLAogIE5FVF9DT1JFX05PX0NPTkc9MTQsCiAgTkVUX0NPUkVfTE9fQ09ORz0xNSwKICBORVRfQ09SRV9NT0RfQ09ORz0xNiwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkVUX0NPUkVfREVWX1dFSUdIVD0xNywKICBORVRfQ09SRV9TT01BWENPTk49MTgsCiAgTkVUX0NPUkVfQlVER0VUPTE5LAogIE5FVF9DT1JFX0FFVkVOVF9FVElNRT0yMCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkVUX0NPUkVfQUVWRU5UX1JTRVFUSD0yMSwKIH07Ci0KIGVudW0KIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkVUX1VOSVhfREVTVFJPWV9ERUxBWT0xLAogIE5FVF9VTklYX0RFTEVURV9ERUxBWT0yLAogIE5FVF9VTklYX01BWF9ER1JBTV9RTEVOPTMsCiB9OwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogZW51bQogewogIE5FVF9ORl9DT05OVFJBQ0tfTUFYPTEsCiAgTkVUX05GX0NPTk5UUkFDS19UQ1BfVElNRU9VVF9TWU5fU0VOVD0yLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBORVRfTkZfQ09OTlRSQUNLX1RDUF9USU1FT1VUX1NZTl9SRUNWPTMsCiAgTkVUX05GX0NPTk5UUkFDS19UQ1BfVElNRU9VVF9FU1RBQkxJU0hFRD00LAogIE5FVF9ORl9DT05OVFJBQ0tfVENQX1RJTUVPVVRfRklOX1dBSVQ9NSwKICBORVRfTkZfQ09OTlRSQUNLX1RDUF9USU1FT1VUX0NMT1NFX1dBSVQ9NiwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkVUX05GX0NPTk5UUkFDS19UQ1BfVElNRU9VVF9MQVNUX0FDSz03LAogIE5FVF9ORl9DT05OVFJBQ0tfVENQX1RJTUVPVVRfVElNRV9XQUlUPTgsCiAgTkVUX05GX0NPTk5UUkFDS19UQ1BfVElNRU9VVF9DTE9TRT05LAogIE5FVF9ORl9DT05OVFJBQ0tfVURQX1RJTUVPVVQ9MTAsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5FVF9ORl9DT05OVFJBQ0tfVURQX1RJTUVPVVRfU1RSRUFNPTExLAogIE5FVF9ORl9DT05OVFJBQ0tfSUNNUF9USU1FT1VUPTEyLAogIE5FVF9ORl9DT05OVFJBQ0tfR0VORVJJQ19USU1FT1VUPTEzLAogIE5FVF9ORl9DT05OVFJBQ0tfQlVDS0VUUz0xNCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkVUX05GX0NPTk5UUkFDS19MT0dfSU5WQUxJRD0xNSwKICBORVRfTkZfQ09OTlRSQUNLX1RDUF9USU1FT1VUX01BWF9SRVRSQU5TPTE2LAogIE5FVF9ORl9DT05OVFJBQ0tfVENQX0xPT1NFPTE3LAogIE5FVF9ORl9DT05OVFJBQ0tfVENQX0JFX0xJQkVSQUw9MTgsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5FVF9ORl9DT05OVFJBQ0tfVENQX01BWF9SRVRSQU5TPTE5LAogIE5FVF9ORl9DT05OVFJBQ0tfU0NUUF9USU1FT1VUX0NMT1NFRD0yMCwKICBORVRfTkZfQ09OTlRSQUNLX1NDVFBfVElNRU9VVF9DT09LSUVfV0FJVD0yMSwKICBORVRfTkZfQ09OTlRSQUNLX1NDVFBfVElNRU9VVF9DT09LSUVfRUNIT0VEPTIyLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBORVRfTkZfQ09OTlRSQUNLX1NDVFBfVElNRU9VVF9FU1RBQkxJU0hFRD0yMywKICBORVRfTkZfQ09OTlRSQUNLX1NDVFBfVElNRU9VVF9TSFVURE9XTl9TRU5UPTI0LAogIE5FVF9ORl9DT05OVFJBQ0tfU0NUUF9USU1FT1VUX1NIVVRET1dOX1JFQ0Q9MjUsCiAgTkVUX05GX0NPTk5UUkFDS19TQ1RQX1RJTUVPVVRfU0hVVERPV05fQUNLX1NFTlQ9MjYsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5FVF9ORl9DT05OVFJBQ0tfQ09VTlQ9MjcsCiAgTkVUX05GX0NPTk5UUkFDS19JQ01QVjZfVElNRU9VVD0yOCwKICBORVRfTkZfQ09OTlRSQUNLX0ZSQUc2X1RJTUVPVVQ9MjksCiAgTkVUX05GX0NPTk5UUkFDS19GUkFHNl9MT1dfVEhSRVNIPTMwLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBORVRfTkZfQ09OTlRSQUNLX0ZSQUc2X0hJR0hfVEhSRVNIPTMxLAogIE5FVF9ORl9DT05OVFJBQ0tfQ0hFQ0tTVU09MzIsCiB9OwotCiBlbnVtCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogewotCiAgTkVUX0lQVjRfRk9SV0FSRD04LAogIE5FVF9JUFY0X0RZTkFERFI9OSwKLQogIE5FVF9JUFY0X0NPTkY9MTYsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5FVF9JUFY0X05FSUdIPTE3LAogIE5FVF9JUFY0X1JPVVRFPTE4LAogIE5FVF9JUFY0X0ZJQl9IQVNIPTE5LAogIE5FVF9JUFY0X05FVEZJTFRFUj0yMCwKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBORVRfSVBWNF9UQ1BfVElNRVNUQU1QUz0zMywKICBORVRfSVBWNF9UQ1BfV0lORE9XX1NDQUxJTkc9MzQsCiAgTkVUX0lQVjRfVENQX1NBQ0s9MzUsCiAgTkVUX0lQVjRfVENQX1JFVFJBTlNfQ09MTEFQU0U9MzYsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5FVF9JUFY0X0RFRkFVTFRfVFRMPTM3LAogIE5FVF9JUFY0X0FVVE9DT05GSUc9MzgsCiAgTkVUX0lQVjRfTk9fUE1UVV9ESVNDPTM5LAogIE5FVF9JUFY0X1RDUF9TWU5fUkVUUklFUz00MCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkVUX0lQVjRfSVBGUkFHX0hJR0hfVEhSRVNIPTQxLAogIE5FVF9JUFY0X0lQRlJBR19MT1dfVEhSRVNIPTQyLAogIE5FVF9JUFY0X0lQRlJBR19USU1FPTQzLAogIE5FVF9JUFY0X1RDUF9NQVhfS0FfUFJPQkVTPTQ0LAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBORVRfSVBWNF9UQ1BfS0VFUEFMSVZFX1RJTUU9NDUsCiAgTkVUX0lQVjRfVENQX0tFRVBBTElWRV9QUk9CRVM9NDYsCiAgTkVUX0lQVjRfVENQX1JFVFJJRVMxPTQ3LAogIE5FVF9JUFY0X1RDUF9SRVRSSUVTMj00OCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkVUX0lQVjRfVENQX0ZJTl9USU1FT1VUPTQ5LAogIE5FVF9JUFY0X0lQX01BU1FfREVCVUc9NTAsCiAgTkVUX1RDUF9TWU5DT09LSUVTPTUxLAogIE5FVF9UQ1BfU1REVVJHPTUyLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBORVRfVENQX1JGQzEzMzc9NTMsCiAgTkVUX1RDUF9TWU5fVEFJTERST1A9NTQsCiAgTkVUX1RDUF9NQVhfU1lOX0JBQ0tMT0c9NTUsCiAgTkVUX0lQVjRfTE9DQUxfUE9SVF9SQU5HRT01NiwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkVUX0lQVjRfSUNNUF9FQ0hPX0lHTk9SRV9BTEw9NTcsCiAgTkVUX0lQVjRfSUNNUF9FQ0hPX0lHTk9SRV9CUk9BRENBU1RTPTU4LAogIE5FVF9JUFY0X0lDTVBfU09VUkNFUVVFTkNIX1JBVEU9NTksCiAgTkVUX0lQVjRfSUNNUF9ERVNUVU5SRUFDSF9SQVRFPTYwLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBORVRfSVBWNF9JQ01QX1RJTUVFWENFRURfUkFURT02MSwKICBORVRfSVBWNF9JQ01QX1BBUkFNUFJPQl9SQVRFPTYyLAogIE5FVF9JUFY0X0lDTVBfRUNIT1JFUExZX1JBVEU9NjMsCiAgTkVUX0lQVjRfSUNNUF9JR05PUkVfQk9HVVNfRVJST1JfUkVTUE9OU0VTPTY0LAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBORVRfSVBWNF9JR01QX01BWF9NRU1CRVJTSElQUz02NSwKICBORVRfVENQX1RXX1JFQ1lDTEU9NjYsCiAgTkVUX0lQVjRfQUxXQVlTX0RFRlJBRz02NywKICBORVRfSVBWNF9UQ1BfS0VFUEFMSVZFX0lOVFZMPTY4LAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBORVRfSVBWNF9JTkVUX1BFRVJfVEhSRVNIT0xEPTY5LAogIE5FVF9JUFY0X0lORVRfUEVFUl9NSU5UVEw9NzAsCiAgTkVUX0lQVjRfSU5FVF9QRUVSX01BWFRUTD03MSwKICBORVRfSVBWNF9JTkVUX1BFRVJfR0NfTUlOVElNRT03MiwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkVUX0lQVjRfSU5FVF9QRUVSX0dDX01BWFRJTUU9NzMsCiAgTkVUX1RDUF9PUlBIQU5fUkVUUklFUz03NCwKICBORVRfVENQX0FCT1JUX09OX09WRVJGTE9XPTc1LAogIE5FVF9UQ1BfU1lOQUNLX1JFVFJJRVM9NzYsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5FVF9UQ1BfTUFYX09SUEhBTlM9NzcsCiAgTkVUX1RDUF9NQVhfVFdfQlVDS0VUUz03OCwKICBORVRfVENQX0ZBQ0s9NzksCiAgTkVUX1RDUF9SRU9SREVSSU5HPTgwLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBORVRfVENQX0VDTj04MSwKICBORVRfVENQX0RTQUNLPTgyLAogIE5FVF9UQ1BfTUVNPTgzLAogIE5FVF9UQ1BfV01FTT04NCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkVUX1RDUF9STUVNPTg1LAogIE5FVF9UQ1BfQVBQX1dJTj04NiwKICBORVRfVENQX0FEVl9XSU5fU0NBTEU9ODcsCiAgTkVUX0lQVjRfTk9OTE9DQUxfQklORD04OCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkVUX0lQVjRfSUNNUF9SQVRFTElNSVQ9ODksCiAgTkVUX0lQVjRfSUNNUF9SQVRFTUFTSz05MCwKICBORVRfVENQX1RXX1JFVVNFPTkxLAogIE5FVF9UQ1BfRlJUTz05MiwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkVUX1RDUF9MT1dfTEFURU5DWT05MywKICBORVRfSVBWNF9JUEZSQUdfU0VDUkVUX0lOVEVSVkFMPTk0LAogIE5FVF9JUFY0X0lHTVBfTUFYX01TRj05NiwKICBORVRfVENQX05PX01FVFJJQ1NfU0FWRT05NywKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkVUX1RDUF9ERUZBVUxUX1dJTl9TQ0FMRT0xMDUsCiAgTkVUX1RDUF9NT0RFUkFURV9SQ1ZCVUY9MTA2LAogIE5FVF9UQ1BfVFNPX1dJTl9ESVZJU09SPTEwNywKICBORVRfVENQX0JJQ19CRVRBPTEwOCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkVUX0lQVjRfSUNNUF9FUlJPUlNfVVNFX0lOQk9VTkRfSUZBRERSPTEwOSwKICBORVRfVENQX0NPTkdfQ09OVFJPTD0xMTAsCiAgTkVUX1RDUF9BQkM9MTExLAogIE5FVF9JUFY0X0lQRlJBR19NQVhfRElTVD0xMTIsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5FVF9UQ1BfTVRVX1BST0JJTkc9MTEzLAogIE5FVF9UQ1BfQkFTRV9NU1M9MTE0LAogIE5FVF9JUFY0X1RDUF9XT1JLQVJPVU5EX1NJR05FRF9XSU5ET1dTPTExNSwKICBORVRfVENQX0RNQV9DT1BZQlJFQUs9MTE2LAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBORVRfVENQX1NMT1dfU1RBUlRfQUZURVJfSURMRT0xMTcsCiB9OwotCiBlbnVtIHsKICBORVRfSVBWNF9ST1VURV9GTFVTSD0xLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBORVRfSVBWNF9ST1VURV9NSU5fREVMQVk9MiwKICBORVRfSVBWNF9ST1VURV9NQVhfREVMQVk9MywKICBORVRfSVBWNF9ST1VURV9HQ19USFJFU0g9NCwKICBORVRfSVBWNF9ST1VURV9NQVhfU0laRT01LAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBORVRfSVBWNF9ST1VURV9HQ19NSU5fSU5URVJWQUw9NiwKICBORVRfSVBWNF9ST1VURV9HQ19USU1FT1VUPTcsCiAgTkVUX0lQVjRfUk9VVEVfR0NfSU5URVJWQUw9OCwKICBORVRfSVBWNF9ST1VURV9SRURJUkVDVF9MT0FEPTksCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5FVF9JUFY0X1JPVVRFX1JFRElSRUNUX05VTUJFUj0xMCwKICBORVRfSVBWNF9ST1VURV9SRURJUkVDVF9TSUxFTkNFPTExLAogIE5FVF9JUFY0X1JPVVRFX0VSUk9SX0NPU1Q9MTIsCiAgTkVUX0lQVjRfUk9VVEVfRVJST1JfQlVSU1Q9MTMsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5FVF9JUFY0X1JPVVRFX0dDX0VMQVNUSUNJVFk9MTQsCiAgTkVUX0lQVjRfUk9VVEVfTVRVX0VYUElSRVM9MTUsCiAgTkVUX0lQVjRfUk9VVEVfTUlOX1BNVFU9MTYsCiAgTkVUX0lQVjRfUk9VVEVfTUlOX0FEVk1TUz0xNywKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkVUX0lQVjRfUk9VVEVfU0VDUkVUX0lOVEVSVkFMPTE4LAogIE5FVF9JUFY0X1JPVVRFX0dDX01JTl9JTlRFUlZBTF9NUz0xOSwKIH07Ci0KIGVudW0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB7CiAgTkVUX1BST1RPX0NPTkZfQUxMPS0yLAogIE5FVF9QUk9UT19DT05GX0RFRkFVTFQ9LTMKLQogfTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIGVudW0KIHsKICBORVRfSVBWNF9DT05GX0ZPUldBUkRJTkc9MSwKICBORVRfSVBWNF9DT05GX01DX0ZPUldBUkRJTkc9MiwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkVUX0lQVjRfQ09ORl9QUk9YWV9BUlA9MywKICBORVRfSVBWNF9DT05GX0FDQ0VQVF9SRURJUkVDVFM9NCwKICBORVRfSVBWNF9DT05GX1NFQ1VSRV9SRURJUkVDVFM9NSwKICBORVRfSVBWNF9DT05GX1NFTkRfUkVESVJFQ1RTPTYsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5FVF9JUFY0X0NPTkZfU0hBUkVEX01FRElBPTcsCiAgTkVUX0lQVjRfQ09ORl9SUF9GSUxURVI9OCwKICBORVRfSVBWNF9DT05GX0FDQ0VQVF9TT1VSQ0VfUk9VVEU9OSwKICBORVRfSVBWNF9DT05GX0JPT1RQX1JFTEFZPTEwLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBORVRfSVBWNF9DT05GX0xPR19NQVJUSUFOUz0xMSwKICBORVRfSVBWNF9DT05GX1RBRz0xMiwKICBORVRfSVBWNF9DT05GX0FSUEZJTFRFUj0xMywKICBORVRfSVBWNF9DT05GX01FRElVTV9JRD0xNCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkVUX0lQVjRfQ09ORl9OT1hGUk09MTUsCiAgTkVUX0lQVjRfQ09ORl9OT1BPTElDWT0xNiwKICBORVRfSVBWNF9DT05GX0ZPUkNFX0lHTVBfVkVSU0lPTj0xNywKICBORVRfSVBWNF9DT05GX0FSUF9BTk5PVU5DRT0xOCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkVUX0lQVjRfQ09ORl9BUlBfSUdOT1JFPTE5LAogIE5FVF9JUFY0X0NPTkZfUFJPTU9URV9TRUNPTkRBUklFUz0yMCwKICBORVRfSVBWNF9DT05GX0FSUF9BQ0NFUFQ9MjEsCiAgX19ORVRfSVBWNF9DT05GX01BWAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07Ci0KIGVudW0KIHsKICBORVRfSVBWNF9ORl9DT05OVFJBQ0tfTUFYPTEsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5FVF9JUFY0X05GX0NPTk5UUkFDS19UQ1BfVElNRU9VVF9TWU5fU0VOVD0yLAogIE5FVF9JUFY0X05GX0NPTk5UUkFDS19UQ1BfVElNRU9VVF9TWU5fUkVDVj0zLAogIE5FVF9JUFY0X05GX0NPTk5UUkFDS19UQ1BfVElNRU9VVF9FU1RBQkxJU0hFRD00LAogIE5FVF9JUFY0X05GX0NPTk5UUkFDS19UQ1BfVElNRU9VVF9GSU5fV0FJVD01LAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBORVRfSVBWNF9ORl9DT05OVFJBQ0tfVENQX1RJTUVPVVRfQ0xPU0VfV0FJVD02LAogIE5FVF9JUFY0X05GX0NPTk5UUkFDS19UQ1BfVElNRU9VVF9MQVNUX0FDSz03LAogIE5FVF9JUFY0X05GX0NPTk5UUkFDS19UQ1BfVElNRU9VVF9USU1FX1dBSVQ9OCwKICBORVRfSVBWNF9ORl9DT05OVFJBQ0tfVENQX1RJTUVPVVRfQ0xPU0U9OSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkVUX0lQVjRfTkZfQ09OTlRSQUNLX1VEUF9USU1FT1VUPTEwLAogIE5FVF9JUFY0X05GX0NPTk5UUkFDS19VRFBfVElNRU9VVF9TVFJFQU09MTEsCiAgTkVUX0lQVjRfTkZfQ09OTlRSQUNLX0lDTVBfVElNRU9VVD0xMiwKICBORVRfSVBWNF9ORl9DT05OVFJBQ0tfR0VORVJJQ19USU1FT1VUPTEzLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBORVRfSVBWNF9ORl9DT05OVFJBQ0tfQlVDS0VUUz0xNCwKICBORVRfSVBWNF9ORl9DT05OVFJBQ0tfTE9HX0lOVkFMSUQ9MTUsCiAgTkVUX0lQVjRfTkZfQ09OTlRSQUNLX1RDUF9USU1FT1VUX01BWF9SRVRSQU5TPTE2LAogIE5FVF9JUFY0X05GX0NPTk5UUkFDS19UQ1BfTE9PU0U9MTcsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5FVF9JUFY0X05GX0NPTk5UUkFDS19UQ1BfQkVfTElCRVJBTD0xOCwKICBORVRfSVBWNF9ORl9DT05OVFJBQ0tfVENQX01BWF9SRVRSQU5TPTE5LAogIE5FVF9JUFY0X05GX0NPTk5UUkFDS19TQ1RQX1RJTUVPVVRfQ0xPU0VEPTIwLAogIE5FVF9JUFY0X05GX0NPTk5UUkFDS19TQ1RQX1RJTUVPVVRfQ09PS0lFX1dBSVQ9MjEsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5FVF9JUFY0X05GX0NPTk5UUkFDS19TQ1RQX1RJTUVPVVRfQ09PS0lFX0VDSE9FRD0yMiwKICBORVRfSVBWNF9ORl9DT05OVFJBQ0tfU0NUUF9USU1FT1VUX0VTVEFCTElTSEVEPTIzLAogIE5FVF9JUFY0X05GX0NPTk5UUkFDS19TQ1RQX1RJTUVPVVRfU0hVVERPV05fU0VOVD0yNCwKICBORVRfSVBWNF9ORl9DT05OVFJBQ0tfU0NUUF9USU1FT1VUX1NIVVRET1dOX1JFQ0Q9MjUsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5FVF9JUFY0X05GX0NPTk5UUkFDS19TQ1RQX1RJTUVPVVRfU0hVVERPV05fQUNLX1NFTlQ9MjYsCiAgTkVUX0lQVjRfTkZfQ09OTlRSQUNLX0NPVU5UPTI3LAogIE5FVF9JUFY0X05GX0NPTk5UUkFDS19DSEVDS1NVTT0yOCwKIH07Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBlbnVtIHsKICBORVRfSVBWNl9DT05GPTE2LAogIE5FVF9JUFY2X05FSUdIPTE3LAogIE5FVF9JUFY2X1JPVVRFPTE4LAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBORVRfSVBWNl9JQ01QPTE5LAogIE5FVF9JUFY2X0JJTkRWNk9OTFk9MjAsCiAgTkVUX0lQVjZfSVA2RlJBR19ISUdIX1RIUkVTSD0yMSwKICBORVRfSVBWNl9JUDZGUkFHX0xPV19USFJFU0g9MjIsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5FVF9JUFY2X0lQNkZSQUdfVElNRT0yMywKICBORVRfSVBWNl9JUDZGUkFHX1NFQ1JFVF9JTlRFUlZBTD0yNCwKICBORVRfSVBWNl9NTERfTUFYX01TRj0yNSwKIH07Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBlbnVtIHsKICBORVRfSVBWNl9ST1VURV9GTFVTSD0xLAogIE5FVF9JUFY2X1JPVVRFX0dDX1RIUkVTSD0yLAogIE5FVF9JUFY2X1JPVVRFX01BWF9TSVpFPTMsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5FVF9JUFY2X1JPVVRFX0dDX01JTl9JTlRFUlZBTD00LAogIE5FVF9JUFY2X1JPVVRFX0dDX1RJTUVPVVQ9NSwKICBORVRfSVBWNl9ST1VURV9HQ19JTlRFUlZBTD02LAogIE5FVF9JUFY2X1JPVVRFX0dDX0VMQVNUSUNJVFk9NywKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkVUX0lQVjZfUk9VVEVfTVRVX0VYUElSRVM9OCwKICBORVRfSVBWNl9ST1VURV9NSU5fQURWTVNTPTksCiAgTkVUX0lQVjZfUk9VVEVfR0NfTUlOX0lOVEVSVkFMX01TPTEwCiB9OwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogZW51bSB7CiAgTkVUX0lQVjZfRk9SV0FSRElORz0xLAogIE5FVF9JUFY2X0hPUF9MSU1JVD0yLAogIE5FVF9JUFY2X01UVT0zLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBORVRfSVBWNl9BQ0NFUFRfUkE9NCwKICBORVRfSVBWNl9BQ0NFUFRfUkVESVJFQ1RTPTUsCiAgTkVUX0lQVjZfQVVUT0NPTkY9NiwKICBORVRfSVBWNl9EQURfVFJBTlNNSVRTPTcsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5FVF9JUFY2X1JUUl9TT0xJQ0lUUz04LAogIE5FVF9JUFY2X1JUUl9TT0xJQ0lUX0lOVEVSVkFMPTksCiAgTkVUX0lQVjZfUlRSX1NPTElDSVRfREVMQVk9MTAsCiAgTkVUX0lQVjZfVVNFX1RFTVBBRERSPTExLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBORVRfSVBWNl9URU1QX1ZBTElEX0xGVD0xMiwKICBORVRfSVBWNl9URU1QX1BSRUZFUkVEX0xGVD0xMywKICBORVRfSVBWNl9SRUdFTl9NQVhfUkVUUlk9MTQsCiAgTkVUX0lQVjZfTUFYX0RFU1lOQ19GQUNUT1I9MTUsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5FVF9JUFY2X01BWF9BRERSRVNTRVM9MTYsCiAgTkVUX0lQVjZfRk9SQ0VfTUxEX1ZFUlNJT049MTcsCiAgTkVUX0lQVjZfQUNDRVBUX1JBX0RFRlJUUj0xOCwKICBORVRfSVBWNl9BQ0NFUFRfUkFfUElORk89MTksCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5FVF9JUFY2X0FDQ0VQVF9SQV9SVFJfUFJFRj0yMCwKICBORVRfSVBWNl9SVFJfUFJPQkVfSU5URVJWQUw9MjEsCiAgTkVUX0lQVjZfQUNDRVBUX1JBX1JUX0lORk9fTUFYX1BMRU49MjIsCiAgX19ORVRfSVBWNl9NQVgKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwotCiBlbnVtIHsKICBORVRfSVBWNl9JQ01QX1JBVEVMSU1JVD0xCiB9OwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogZW51bSB7CiAgTkVUX05FSUdIX01DQVNUX1NPTElDSVQ9MSwKICBORVRfTkVJR0hfVUNBU1RfU09MSUNJVD0yLAogIE5FVF9ORUlHSF9BUFBfU09MSUNJVD0zLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBORVRfTkVJR0hfUkVUUkFOU19USU1FPTQsCiAgTkVUX05FSUdIX1JFQUNIQUJMRV9USU1FPTUsCiAgTkVUX05FSUdIX0RFTEFZX1BST0JFX1RJTUU9NiwKICBORVRfTkVJR0hfR0NfU1RBTEVfVElNRT03LAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBORVRfTkVJR0hfVU5SRVNfUUxFTj04LAogIE5FVF9ORUlHSF9QUk9YWV9RTEVOPTksCiAgTkVUX05FSUdIX0FOWUNBU1RfREVMQVk9MTAsCiAgTkVUX05FSUdIX1BST1hZX0RFTEFZPTExLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBORVRfTkVJR0hfTE9DS1RJTUU9MTIsCiAgTkVUX05FSUdIX0dDX0lOVEVSVkFMPTEzLAogIE5FVF9ORUlHSF9HQ19USFJFU0gxPTE0LAogIE5FVF9ORUlHSF9HQ19USFJFU0gyPTE1LAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBORVRfTkVJR0hfR0NfVEhSRVNIMz0xNiwKICBORVRfTkVJR0hfUkVUUkFOU19USU1FX01TPTE3LAogIE5FVF9ORUlHSF9SRUFDSEFCTEVfVElNRV9NUz0xOCwKICBfX05FVF9ORUlHSF9NQVgKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwotCiBlbnVtIHsKICBORVRfRENDUF9ERUZBVUxUPTEsCiB9OwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogZW51bSB7CiAgTkVUX0RDQ1BfREVGQVVMVF9TRVFfV0lORE9XID0gMSwKICBORVRfRENDUF9ERUZBVUxUX1JYX0NDSUQgPSAyLAogIE5FVF9EQ0NQX0RFRkFVTFRfVFhfQ0NJRCA9IDMsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5FVF9EQ0NQX0RFRkFVTFRfQUNLX1JBVElPID0gNCwKICBORVRfRENDUF9ERUZBVUxUX1NFTkRfQUNLVkVDID0gNSwKICBORVRfRENDUF9ERUZBVUxUX1NFTkRfTkRQID0gNiwKIH07Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBlbnVtIHsKICBORVRfSVBYX1BQUk9QX0JST0FEQ0FTVElORz0xLAogIE5FVF9JUFhfRk9SV0FSRElORz0yCiB9OwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogZW51bSB7CiAgTkVUX0xMQzI9MSwKICBORVRfTExDX1NUQVRJT049MiwKIH07Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBlbnVtIHsKICBORVRfTExDMl9USU1FT1VUPTEsCiB9OwotCiBlbnVtIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkVUX0xMQ19TVEFUSU9OX0FDS19USU1FT1VUPTEsCiB9OwotCiBlbnVtIHsKICBORVRfTExDMl9BQ0tfVElNRU9VVD0xLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBORVRfTExDMl9QX1RJTUVPVVQ9MiwKICBORVRfTExDMl9SRUpfVElNRU9VVD0zLAogIE5FVF9MTEMyX0JVU1lfVElNRU9VVD00LAogfTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIGVudW0gewogIE5FVF9BVEFMS19BQVJQX0VYUElSWV9USU1FPTEsCiAgTkVUX0FUQUxLX0FBUlBfVElDS19USU1FPTIsCiAgTkVUX0FUQUxLX0FBUlBfUkVUUkFOU01JVF9MSU1JVD0zLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBORVRfQVRBTEtfQUFSUF9SRVNPTFZFX1RJTUU9NAogfTsKLQogZW51bSB7CiAgTkVUX05FVFJPTV9ERUZBVUxUX1BBVEhfUVVBTElUWT0xLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBORVRfTkVUUk9NX09CU09MRVNDRU5DRV9DT1VOVF9JTklUSUFMSVNFUj0yLAogIE5FVF9ORVRST01fTkVUV09SS19UVExfSU5JVElBTElTRVI9MywKICBORVRfTkVUUk9NX1RSQU5TUE9SVF9USU1FT1VUPTQsCiAgTkVUX05FVFJPTV9UUkFOU1BPUlRfTUFYSU1VTV9UUklFUz01LAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBORVRfTkVUUk9NX1RSQU5TUE9SVF9BQ0tOT1dMRURHRV9ERUxBWT02LAogIE5FVF9ORVRST01fVFJBTlNQT1JUX0JVU1lfREVMQVk9NywKICBORVRfTkVUUk9NX1RSQU5TUE9SVF9SRVFVRVNURURfV0lORE9XX1NJWkU9OCwKICBORVRfTkVUUk9NX1RSQU5TUE9SVF9OT19BQ1RJVklUWV9USU1FT1VUPTksCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5FVF9ORVRST01fUk9VVElOR19DT05UUk9MPTEwLAogIE5FVF9ORVRST01fTElOS19GQUlMU19DT1VOVD0xMSwKICBORVRfTkVUUk9NX1JFU0VUPTEyCiB9OwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogZW51bSB7CiAgTkVUX0FYMjVfSVBfREVGQVVMVF9NT0RFPTEsCiAgTkVUX0FYMjVfREVGQVVMVF9NT0RFPTIsCiAgTkVUX0FYMjVfQkFDS09GRl9UWVBFPTMsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5FVF9BWDI1X0NPTk5FQ1RfTU9ERT00LAogIE5FVF9BWDI1X1NUQU5EQVJEX1dJTkRPVz01LAogIE5FVF9BWDI1X0VYVEVOREVEX1dJTkRPVz02LAogIE5FVF9BWDI1X1QxX1RJTUVPVVQ9NywKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkVUX0FYMjVfVDJfVElNRU9VVD04LAogIE5FVF9BWDI1X1QzX1RJTUVPVVQ9OSwKICBORVRfQVgyNV9JRExFX1RJTUVPVVQ9MTAsCiAgTkVUX0FYMjVfTjI9MTEsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5FVF9BWDI1X1BBQ0xFTj0xMiwKICBORVRfQVgyNV9QUk9UT0NPTD0xMywKICBORVRfQVgyNV9EQU1BX1NMQVZFX1RJTUVPVVQ9MTQKIH07Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBlbnVtIHsKICBORVRfUk9TRV9SRVNUQVJUX1JFUVVFU1RfVElNRU9VVD0xLAogIE5FVF9ST1NFX0NBTExfUkVRVUVTVF9USU1FT1VUPTIsCiAgTkVUX1JPU0VfUkVTRVRfUkVRVUVTVF9USU1FT1VUPTMsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5FVF9ST1NFX0NMRUFSX1JFUVVFU1RfVElNRU9VVD00LAogIE5FVF9ST1NFX0FDS19IT0xEX0JBQ0tfVElNRU9VVD01LAogIE5FVF9ST1NFX1JPVVRJTkdfQ09OVFJPTD02LAogIE5FVF9ST1NFX0xJTktfRkFJTF9USU1FT1VUPTcsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5FVF9ST1NFX01BWF9WQ1M9OCwKICBORVRfUk9TRV9XSU5ET1dfU0laRT05LAogIE5FVF9ST1NFX05PX0FDVElWSVRZX1RJTUVPVVQ9MTAKIH07Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBlbnVtIHsKICBORVRfWDI1X1JFU1RBUlRfUkVRVUVTVF9USU1FT1VUPTEsCiAgTkVUX1gyNV9DQUxMX1JFUVVFU1RfVElNRU9VVD0yLAogIE5FVF9YMjVfUkVTRVRfUkVRVUVTVF9USU1FT1VUPTMsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5FVF9YMjVfQ0xFQVJfUkVRVUVTVF9USU1FT1VUPTQsCiAgTkVUX1gyNV9BQ0tfSE9MRF9CQUNLX1RJTUVPVVQ9NQogfTsKLQogZW51bQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHsKICBORVRfVFJfUklGX1RJTUVPVVQ9MQogfTsKLQogZW51bSB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5FVF9ERUNORVRfTk9ERV9UWVBFID0gMSwKICBORVRfREVDTkVUX05PREVfQUREUkVTUyA9IDIsCiAgTkVUX0RFQ05FVF9OT0RFX05BTUUgPSAzLAogIE5FVF9ERUNORVRfREVGQVVMVF9ERVZJQ0UgPSA0LAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBORVRfREVDTkVUX1RJTUVfV0FJVCA9IDUsCiAgTkVUX0RFQ05FVF9ETl9DT1VOVCA9IDYsCiAgTkVUX0RFQ05FVF9ESV9DT1VOVCA9IDcsCiAgTkVUX0RFQ05FVF9EUl9DT1VOVCA9IDgsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5FVF9ERUNORVRfRFNUX0dDX0lOVEVSVkFMID0gOSwKICBORVRfREVDTkVUX0NPTkYgPSAxMCwKICBORVRfREVDTkVUX05PX0ZDX01BWF9DV05EID0gMTEsCiAgTkVUX0RFQ05FVF9NRU0gPSAxMiwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkVUX0RFQ05FVF9STUVNID0gMTMsCiAgTkVUX0RFQ05FVF9XTUVNID0gMTQsCiAgTkVUX0RFQ05FVF9ERUJVR19MRVZFTCA9IDI1NQogfTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIGVudW0gewogIE5FVF9ERUNORVRfQ09ORl9MT09QQkFDSyA9IC0yLAogIE5FVF9ERUNORVRfQ09ORl9ERENNUCA9IC0zLAogIE5FVF9ERUNORVRfQ09ORl9QUFAgPSAtNCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkVUX0RFQ05FVF9DT05GX1gyNSA9IC01LAogIE5FVF9ERUNORVRfQ09ORl9HUkUgPSAtNiwKICBORVRfREVDTkVUX0NPTkZfRVRIRVIgPSAtNwotCiB9OwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogZW51bSB7CiAgTkVUX0RFQ05FVF9DT05GX0RFVl9QUklPUklUWSA9IDEsCiAgTkVUX0RFQ05FVF9DT05GX0RFVl9UMSA9IDIsCiAgTkVUX0RFQ05FVF9DT05GX0RFVl9UMiA9IDMsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5FVF9ERUNORVRfQ09ORl9ERVZfVDMgPSA0LAogIE5FVF9ERUNORVRfQ09ORl9ERVZfRk9SV0FSRElORyA9IDUsCiAgTkVUX0RFQ05FVF9DT05GX0RFVl9CTEtTSVpFID0gNiwKICBORVRfREVDTkVUX0NPTkZfREVWX1NUQVRFID0gNworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07Ci0KIGVudW0gewogIE5FVF9TQ1RQX1JUT19JTklUSUFMID0gMSwKICBORVRfU0NUUF9SVE9fTUlOID0gMiwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkVUX1NDVFBfUlRPX01BWCA9IDMsCiAgTkVUX1NDVFBfUlRPX0FMUEhBID0gNCwKICBORVRfU0NUUF9SVE9fQkVUQSA9IDUsCiAgTkVUX1NDVFBfVkFMSURfQ09PS0lFX0xJRkUgPSA2LAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBORVRfU0NUUF9BU1NPQ0lBVElPTl9NQVhfUkVUUkFOUyA9IDcsCiAgTkVUX1NDVFBfUEFUSF9NQVhfUkVUUkFOUyA9IDgsCiAgTkVUX1NDVFBfTUFYX0lOSVRfUkVUUkFOU01JVFMgPSA5LAogIE5FVF9TQ1RQX0hCX0lOVEVSVkFMID0gMTAsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIE5FVF9TQ1RQX1BSRVNFUlZFX0VOQUJMRSA9IDExLAogIE5FVF9TQ1RQX01BWF9CVVJTVCA9IDEyLAogIE5FVF9TQ1RQX0FERElQX0VOQUJMRSA9IDEzLAogIE5FVF9TQ1RQX1BSU0NUUF9FTkFCTEUgPSAxNCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgTkVUX1NDVFBfU05EQlVGX1BPTElDWSA9IDE1LAogIE5FVF9TQ1RQX1NBQ0tfVElNRU9VVCA9IDE2LAogIE5FVF9TQ1RQX1JDVkJVRl9QT0xJQ1kgPSAxNywKIH07Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBlbnVtIHsKICBORVRfQlJJREdFX05GX0NBTExfQVJQVEFCTEVTID0gMSwKICBORVRfQlJJREdFX05GX0NBTExfSVBUQUJMRVMgPSAyLAogIE5FVF9CUklER0VfTkZfQ0FMTF9JUDZUQUJMRVMgPSAzLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBORVRfQlJJREdFX05GX0ZJTFRFUl9WTEFOX1RBR0dFRCA9IDQsCiB9OwotCiBlbnVtCiB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIEZTX05SSU5PREU9MSwKICBGU19TVEFUSU5PREU9MiwKICBGU19NQVhJTk9ERT0zLAogIEZTX05SRFFVT1Q9NCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgRlNfTUFYRFFVT1Q9NSwKICBGU19OUkZJTEU9NiwKICBGU19NQVhGSUxFPTcsCiAgRlNfREVOVFJZPTgsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIEZTX05SU1VQRVI9OSwKICBGU19NQVhTVVBFUj0xMCwKICBGU19PVkVSRkxPV1VJRD0xMSwKICBGU19PVkVSRkxPV0dJRD0xMiwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgRlNfTEVBU0VTPTEzLAogIEZTX0RJUl9OT1RJRlk9MTQsCiAgRlNfTEVBU0VfVElNRT0xNSwKICBGU19EUVNUQVRTPTE2LAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBGU19YRlM9MTcsCiAgRlNfQUlPX05SPTE4LAogIEZTX0FJT19NQVhfTlI9MTksCiAgRlNfSU5PVElGWT0yMCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwotCiBlbnVtIHsKICBGU19EUV9MT09LVVBTID0gMSwKICBGU19EUV9EUk9QUyA9IDIsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIEZTX0RRX1JFQURTID0gMywKICBGU19EUV9XUklURVMgPSA0LAogIEZTX0RRX0NBQ0hFX0hJVFMgPSA1LAogIEZTX0RRX0FMTE9DQVRFRCA9IDYsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIEZTX0RRX0ZSRUUgPSA3LAogIEZTX0RRX1NZTkNTID0gOCwKICBGU19EUV9XQVJOSU5HUyA9IDksCiB9OwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogZW51bSB7CiAgREVWX0NEUk9NPTEsCiAgREVWX0hXTU9OPTIsCiAgREVWX1BBUlBPUlQ9MywKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgREVWX1JBSUQ9NCwKICBERVZfTUFDX0hJRD01LAogIERFVl9TQ1NJPTYsCiAgREVWX0lQTUk9NywKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwotCiBlbnVtIHsKICBERVZfQ0RST01fSU5GTz0xLAogIERFVl9DRFJPTV9BVVRPQ0xPU0U9MiwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgREVWX0NEUk9NX0FVVE9FSkVDVD0zLAogIERFVl9DRFJPTV9ERUJVRz00LAogIERFVl9DRFJPTV9MT0NLPTUsCiAgREVWX0NEUk9NX0NIRUNLX01FRElBPTYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwotCiBlbnVtIHsKICBERVZfUEFSUE9SVF9ERUZBVUxUPS0zCiB9OwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogZW51bSB7CiAgREVWX1JBSURfU1BFRURfTElNSVRfTUlOPTEsCiAgREVWX1JBSURfU1BFRURfTElNSVRfTUFYPTIKIH07Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBlbnVtIHsKICBERVZfUEFSUE9SVF9ERUZBVUxUX1RJTUVTTElDRT0xLAogIERFVl9QQVJQT1JUX0RFRkFVTFRfU1BJTlRJTUU9MgogfTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIGVudW0gewogIERFVl9QQVJQT1JUX1NQSU5USU1FPTEsCiAgREVWX1BBUlBPUlRfQkFTRV9BRERSPTIsCiAgREVWX1BBUlBPUlRfSVJRPTMsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIERFVl9QQVJQT1JUX0RNQT00LAogIERFVl9QQVJQT1JUX01PREVTPTUsCiAgREVWX1BBUlBPUlRfREVWSUNFUz02LAogIERFVl9QQVJQT1JUX0FVVE9QUk9CRT0xNgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07Ci0KIGVudW0gewogIERFVl9QQVJQT1JUX0RFVklDRVNfQUNUSVZFPS0zLAogfTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIGVudW0gewogIERFVl9QQVJQT1JUX0RFVklDRV9USU1FU0xJQ0U9MSwKIH07Ci0KIGVudW0geworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBERVZfTUFDX0hJRF9LRVlCT0FSRF9TRU5EU19MSU5VWF9LRVlDT0RFUz0xLAogIERFVl9NQUNfSElEX0tFWUJPQVJEX0xPQ0tfS0VZQ09ERVM9MiwKICBERVZfTUFDX0hJRF9NT1VTRV9CVVRUT05fRU1VTEFUSU9OPTMsCiAgREVWX01BQ19ISURfTU9VU0VfQlVUVE9OMl9LRVlDT0RFPTQsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIERFVl9NQUNfSElEX01PVVNFX0JVVFRPTjNfS0VZQ09ERT01LAogIERFVl9NQUNfSElEX0FEQl9NT1VTRV9TRU5EU19LRVlDT0RFUz02CiB9OwotCiBlbnVtIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgREVWX1NDU0lfTE9HR0lOR19MRVZFTD0xLAogfTsKLQogZW51bSB7CiAgREVWX0lQTUlfUE9XRVJPRkZfUE9XRVJDWUNMRT0xLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07Ci0KIGVudW0KIHsKICBBQklfREVGSEFORExFUl9DT0ZGPTEsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIEFCSV9ERUZIQU5ETEVSX0VMRj0yLAogIEFCSV9ERUZIQU5ETEVSX0xDQUxMNz0zLAogIEFCSV9ERUZIQU5ETEVSX0xJQkNTTz00LAogIEFCSV9UUkFDRT01LAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBBQklfRkFLRV9VVFNOQU1FPTYsCiB9OwotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9zeXNkZXYuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9zeXNkZXYuaAppbmRleCA2YWUyYjI2Li45MzdkOTBhIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc3lzZGV2LmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3N5c2Rldi5oCkBAIC03LDU0ICs3LDU5IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfU1lTREVWX0hfCiAjZGVmaW5lIF9TWVNERVZfSF8KLQogI2luY2x1ZGUgPGxpbnV4L2tvYmplY3QuaD4KICNpbmNsdWRlIDxsaW51eC9wbS5oPgotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IHN5c19kZXZpY2U7Ci0KIHN0cnVjdCBzeXNkZXZfY2xhc3MgewogIHN0cnVjdCBsaXN0X2hlYWQgZHJpdmVyczsKLQogIGludCAoKnNodXRkb3duKShzdHJ1Y3Qgc3lzX2RldmljZSAqKTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgaW50ICgqc3VzcGVuZCkoc3RydWN0IHN5c19kZXZpY2UgKiwgcG1fbWVzc2FnZV90IHN0YXRlKTsKICBpbnQgKCpyZXN1bWUpKHN0cnVjdCBzeXNfZGV2aWNlICopOwogIHN0cnVjdCBrc2V0IGtzZXQ7CiB9OwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IHN5c2Rldl9jbGFzc19hdHRyaWJ1dGUgewogIHN0cnVjdCBhdHRyaWJ1dGUgYXR0cjsKICBzc2l6ZV90ICgqc2hvdykoc3RydWN0IHN5c2Rldl9jbGFzcyAqLCBjaGFyICopOwogIHNzaXplX3QgKCpzdG9yZSkoc3RydWN0IHN5c2Rldl9jbGFzcyAqLCBjb25zdCBjaGFyICosIHNpemVfdCk7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKLQogI2RlZmluZSBTWVNERVZfQ0xBU1NfQVRUUihfbmFtZSxfbW9kZSxfc2hvdyxfc3RvcmUpICBzdHJ1Y3Qgc3lzZGV2X2NsYXNzX2F0dHJpYnV0ZSBhdHRyXyMjX25hbWUgPSB7ICAgLmF0dHIgPSB7Lm5hbWUgPSBfX3N0cmluZ2lmeShfbmFtZSksIC5tb2RlID0gX21vZGUgfSwgICAuc2hvdyA9IF9zaG93LCAgIC5zdG9yZSA9IF9zdG9yZSwgIH07Ci0KIHN0cnVjdCBzeXNkZXZfZHJpdmVyIHsKICBzdHJ1Y3QgbGlzdF9oZWFkIGVudHJ5OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBpbnQgKCphZGQpKHN0cnVjdCBzeXNfZGV2aWNlICopOwogIGludCAoKnJlbW92ZSkoc3RydWN0IHN5c19kZXZpY2UgKik7CiAgaW50ICgqc2h1dGRvd24pKHN0cnVjdCBzeXNfZGV2aWNlICopOwogIGludCAoKnN1c3BlbmQpKHN0cnVjdCBzeXNfZGV2aWNlICosIHBtX21lc3NhZ2VfdCBzdGF0ZSk7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGludCAoKnJlc3VtZSkoc3RydWN0IHN5c19kZXZpY2UgKik7CiB9OwotCiBzdHJ1Y3Qgc3lzX2RldmljZSB7CiAgdTMyIGlkOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3Qgc3lzZGV2X2NsYXNzICogY2xzOwogIHN0cnVjdCBrb2JqZWN0IGtvYmo7CiB9OwotCiBzdHJ1Y3Qgc3lzZGV2X2F0dHJpYnV0ZSB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCBhdHRyaWJ1dGUgYXR0cjsKICBzc2l6ZV90ICgqc2hvdykoc3RydWN0IHN5c19kZXZpY2UgKiwgY2hhciAqKTsKICBzc2l6ZV90ICgqc3RvcmUpKHN0cnVjdCBzeXNfZGV2aWNlICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsKIH07Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNZU0RFVl9BVFRSKF9uYW1lLF9tb2RlLF9zaG93LF9zdG9yZSkgIHN0cnVjdCBzeXNkZXZfYXR0cmlidXRlIGF0dHJfIyNfbmFtZSA9IHsgICAuYXR0ciA9IHsubmFtZSA9IF9fc3RyaW5naWZ5KF9uYW1lKSwgLm1vZGUgPSBfbW9kZSB9LCAgIC5zaG93ID0gX3Nob3csICAgLnN0b3JlID0gX3N0b3JlLCAgfTsKLQogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc3lzZnMuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9zeXNmcy5oCmluZGV4IDAwYjVmNWEuLjlhOWJlYzkgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9zeXNmcy5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9zeXNmcy5oCkBAIC03LDcwICs3LDc1IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfU1lTRlNfSF8KICNkZWZpbmUgX1NZU0ZTX0hfCi0KICNpbmNsdWRlIDxhc20vYXRvbWljLmg+Ci0KIHN0cnVjdCBrb2JqZWN0OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBtb2R1bGU7Ci0KIHN0cnVjdCBhdHRyaWJ1dGUgewogIGNvbnN0IGNoYXIgKiBuYW1lOwogIHN0cnVjdCBtb2R1bGUgKiBvd25lcjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgbW9kZV90IG1vZGU7CiB9OwotCiBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIHsKICBjb25zdCBjaGFyICogbmFtZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IGF0dHJpYnV0ZSAqKiBhdHRyczsKIH07Ci0KICNkZWZpbmUgX19BVFRSKF9uYW1lLF9tb2RlLF9zaG93LF9zdG9yZSkgeyAgIC5hdHRyID0gey5uYW1lID0gX19zdHJpbmdpZnkoX25hbWUpLCAubW9kZSA9IF9tb2RlLCAub3duZXIgPSBUSElTX01PRFVMRSB9LCAgIC5zaG93ID0gX3Nob3csICAgLnN0b3JlID0gX3N0b3JlLCAgfQotCiAjZGVmaW5lIF9fQVRUUl9STyhfbmFtZSkgeyAgIC5hdHRyID0geyAubmFtZSA9IF9fc3RyaW5naWZ5KF9uYW1lKSwgLm1vZGUgPSAwNDQ0LCAub3duZXIgPSBUSElTX01PRFVMRSB9LCAgIC5zaG93ID0gX25hbWUjI19zaG93LCAgfQotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBfX0FUVFJfTlVMTCB7IC5hdHRyID0geyAubmFtZSA9IE5VTEwgfSB9Ci0KICNkZWZpbmUgYXR0cl9uYW1lKF9hdHRyKSAoX2F0dHIpLmF0dHIubmFtZQotCiBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3Q7Ci0KIHN0cnVjdCBiaW5fYXR0cmlidXRlIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IGF0dHJpYnV0ZSBhdHRyOwogIHNpemVfdCBzaXplOwogIHZvaWQgKnByaXZhdGU7CiAgc3NpemVfdCAoKnJlYWQpKHN0cnVjdCBrb2JqZWN0ICosIGNoYXIgKiwgbG9mZl90LCBzaXplX3QpOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzc2l6ZV90ICgqd3JpdGUpKHN0cnVjdCBrb2JqZWN0ICosIGNoYXIgKiwgbG9mZl90LCBzaXplX3QpOwogIGludCAoKm1tYXApKHN0cnVjdCBrb2JqZWN0ICosIHN0cnVjdCBiaW5fYXR0cmlidXRlICphdHRyLAogIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTsKIH07Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3Qgc3lzZnNfb3BzIHsKICBzc2l6ZV90ICgqc2hvdykoc3RydWN0IGtvYmplY3QgKiwgc3RydWN0IGF0dHJpYnV0ZSAqLGNoYXIgKik7CiAgc3NpemVfdCAoKnN0b3JlKShzdHJ1Y3Qga29iamVjdCAqLHN0cnVjdCBhdHRyaWJ1dGUgKixjb25zdCBjaGFyICosIHNpemVfdCk7CiB9OwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IHN5c2ZzX2RpcmVudCB7CiAgYXRvbWljX3Qgc19jb3VudDsKICBzdHJ1Y3QgbGlzdF9oZWFkIHNfc2libGluZzsKICBzdHJ1Y3QgbGlzdF9oZWFkIHNfY2hpbGRyZW47CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHZvaWQgKiBzX2VsZW1lbnQ7CiAgaW50IHNfdHlwZTsKICB1bW9kZV90IHNfbW9kZTsKICBzdHJ1Y3QgZGVudHJ5ICogc19kZW50cnk7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCBpYXR0ciAqIHNfaWF0dHI7CiAgYXRvbWljX3Qgc19ldmVudDsKIH07Ci0KICNkZWZpbmUgU1lTRlNfUk9PVCAweDAwMDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNZU0ZTX0RJUiAweDAwMDIKICNkZWZpbmUgU1lTRlNfS09CSl9BVFRSIDB4MDAwNAogI2RlZmluZSBTWVNGU19LT0JKX0JJTl9BVFRSIDB4MDAwOAogI2RlZmluZSBTWVNGU19LT0JKX0RFVklDRSAweDAwMTAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNZU0ZTX0tPQkpfTElOSyAweDAwMjAKICNkZWZpbmUgU1lTRlNfTk9UX1BJTk5FRCAoU1lTRlNfS09CSl9BVFRSIHwgU1lTRlNfS09CSl9CSU5fQVRUUiB8IFNZU0ZTX0tPQkpfREVWSUNFIHwgU1lTRlNfS09CSl9MSU5LKQotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC90YXNrc3RhdHMuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC90YXNrc3RhdHMuaAppbmRleCAzZThhZTRhLi4wZTFjYjY3IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvdGFza3N0YXRzLmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3Rhc2tzdGF0cy5oCkBAIC03LDY2ICs3LDY3IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfTElOVVhfVEFTS1NUQVRTX0gKICNkZWZpbmUgX0xJTlVYX1RBU0tTVEFUU19ICi0KICNkZWZpbmUgVEFTS1NUQVRTX1ZFUlNJT04gMQotCiBzdHJ1Y3QgdGFza3N0YXRzIHsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UxNiB2ZXJzaW9uOwogIF9fdTE2IHBhZGRpbmdbM107Ci0KICBfX3U2NCBjcHVfY291bnQ7CiAgX191NjQgY3B1X2RlbGF5X3RvdGFsOwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTY0IGJsa2lvX2NvdW50OwogIF9fdTY0IGJsa2lvX2RlbGF5X3RvdGFsOwotCiAgX191NjQgc3dhcGluX2NvdW50OwogIF9fdTY0IHN3YXBpbl9kZWxheV90b3RhbDsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U2NCBjcHVfcnVuX3JlYWxfdG90YWw7Ci0KICBfX3U2NCBjcHVfcnVuX3ZpcnR1YWxfdG90YWw7Ci0KIH07Ci0KIGVudW0geworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBUQVNLU1RBVFNfQ01EX1VOU1BFQyA9IDAsCiAgVEFTS1NUQVRTX0NNRF9HRVQsCiAgVEFTS1NUQVRTX0NNRF9ORVcsCiAgX19UQVNLU1RBVFNfQ01EX01BWCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwotCiAjZGVmaW5lIFRBU0tTVEFUU19DTURfTUFYIChfX1RBU0tTVEFUU19DTURfTUFYIC0gMSkKLQogZW51bSB7CiAgVEFTS1NUQVRTX1RZUEVfVU5TUEVDID0gMCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVEFTS1NUQVRTX1RZUEVfUElELAogIFRBU0tTVEFUU19UWVBFX1RHSUQsCiAgVEFTS1NUQVRTX1RZUEVfU1RBVFMsCiAgVEFTS1NUQVRTX1RZUEVfQUdHUl9QSUQsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFRBU0tTVEFUU19UWVBFX0FHR1JfVEdJRCwKICBfX1RBU0tTVEFUU19UWVBFX01BWCwKIH07Ci0KICNkZWZpbmUgVEFTS1NUQVRTX1RZUEVfTUFYIChfX1RBU0tTVEFUU19UWVBFX01BWCAtIDEpCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBlbnVtIHsKICBUQVNLU1RBVFNfQ01EX0FUVFJfVU5TUEVDID0gMCwKICBUQVNLU1RBVFNfQ01EX0FUVFJfUElELAogIFRBU0tTVEFUU19DTURfQVRUUl9UR0lELAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBUQVNLU1RBVFNfQ01EX0FUVFJfUkVHSVNURVJfQ1BVTUFTSywKICBUQVNLU1RBVFNfQ01EX0FUVFJfREVSRUdJU1RFUl9DUFVNQVNLLAogIF9fVEFTS1NUQVRTX0NNRF9BVFRSX01BWCwKIH07Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFRBU0tTVEFUU19DTURfQVRUUl9NQVggKF9fVEFTS1NUQVRTX0NNRF9BVFRSX01BWCAtIDEpCi0KICNkZWZpbmUgVEFTS1NUQVRTX0dFTkxfTkFNRSAiVEFTS1NUQVRTIgogI2RlZmluZSBUQVNLU1RBVFNfR0VOTF9WRVJTSU9OIDB4MQotCiAjZW5kaWYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvdGFza3N0YXRzX2tlcm4uaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC90YXNrc3RhdHNfa2Vybi5oCmluZGV4IDQ5NDg0MTAuLjY0YTY4YzEgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC90YXNrc3RhdHNfa2Vybi5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC90YXNrc3RhdHNfa2Vybi5oCkBAIC03LDEzICs3LDE5IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfTElOVVhfVEFTS1NUQVRTX0tFUk5fSAogI2RlZmluZSBfTElOVVhfVEFTS1NUQVRTX0tFUk5fSAotCiAjaW5jbHVkZSA8bGludXgvdGFza3N0YXRzLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjaW5jbHVkZSA8bmV0L2dlbmV0bGluay5oPgotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC90Y3AuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC90Y3AuaAppbmRleCAzZmE5NWY4Li4zZTlkNjQxIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvdGNwLmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3RjcC5oCkBAIC03LDE0MSArNywxNjIgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9MSU5VWF9UQ1BfSAogI2RlZmluZSBfTElOVVhfVENQX0gKLQogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IHRjcGhkciB7CiAgX191MTYgc291cmNlOwogIF9fdTE2IGRlc3Q7CiAgX191MzIgc2VxOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBhY2tfc2VxOwogI2lmZGVmIF9fTElUVExFX0VORElBTl9CSVRGSUVMRAogIF9fdTE2IHJlczE6NCwKICBkb2ZmOjQsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGZpbjoxLAogIHN5bjoxLAogIHJzdDoxLAogIHBzaDoxLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBhY2s6MSwKICB1cmc6MSwKICBlY2U6MSwKICBjd3I6MTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZWxpZiBkZWZpbmVkKF9fQklHX0VORElBTl9CSVRGSUVMRCkKICBfX3UxNiBkb2ZmOjQsCiAgcmVzMTo0LAogIGN3cjoxLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBlY2U6MSwKICB1cmc6MSwKICBhY2s6MSwKICBwc2g6MSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgcnN0OjEsCiAgc3luOjEsCiAgZmluOjE7CiAjZWxzZQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlcnJvciAiQWRqdXN0IHlvdXIgPGFzbS9ieXRlb3JkZXIuaD4gZGVmaW5lcyIKICNlbmRpZgogIF9fdTE2IHdpbmRvdzsKICBfX3UxNiBjaGVjazsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MTYgdXJnX3B0cjsKIH07Ci0KIHVuaW9uIHRjcF93b3JkX2hkciB7CiAgc3RydWN0IHRjcGhkciBoZHI7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHdvcmRzWzVdOwogfTsKLQotI2RlZmluZSB0Y3BfZmxhZ193b3JkKHRwKSAoICgodW5pb24gdGNwX3dvcmRfaGRyICopKHRwKSktPndvcmRzIFszXSkgCi0KKyNkZWZpbmUgdGNwX2ZsYWdfd29yZCh0cCkgKCAoKHVuaW9uIHRjcF93b3JkX2hkciAqKSh0cCkpLT53b3JkcyBbM10pCiBlbnVtIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVENQX0ZMQUdfQ1dSID0gX19jb25zdGFudF9odG9ubCgweDAwODAwMDAwKSwKICBUQ1BfRkxBR19FQ0UgPSBfX2NvbnN0YW50X2h0b25sKDB4MDA0MDAwMDApLAogIFRDUF9GTEFHX1VSRyA9IF9fY29uc3RhbnRfaHRvbmwoMHgwMDIwMDAwMCksCiAgVENQX0ZMQUdfQUNLID0gX19jb25zdGFudF9odG9ubCgweDAwMTAwMDAwKSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVENQX0ZMQUdfUFNIID0gX19jb25zdGFudF9odG9ubCgweDAwMDgwMDAwKSwKICBUQ1BfRkxBR19SU1QgPSBfX2NvbnN0YW50X2h0b25sKDB4MDAwNDAwMDApLAogIFRDUF9GTEFHX1NZTiA9IF9fY29uc3RhbnRfaHRvbmwoMHgwMDAyMDAwMCksCiAgVENQX0ZMQUdfRklOID0gX19jb25zdGFudF9odG9ubCgweDAwMDEwMDAwKSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVENQX1JFU0VSVkVEX0JJVFMgPSBfX2NvbnN0YW50X2h0b25sKDB4MEYwMDAwMDApLAogIFRDUF9EQVRBX09GRlNFVCA9IF9fY29uc3RhbnRfaHRvbmwoMHhGMDAwMDAwMCkKIH07Ci0KLSNkZWZpbmUgVENQX05PREVMQVkgMSAgCi0jZGVmaW5lIFRDUF9NQVhTRUcgMiAgCi0jZGVmaW5lIFRDUF9DT1JLIDMgIAotI2RlZmluZSBUQ1BfS0VFUElETEUgNCAgCi0jZGVmaW5lIFRDUF9LRUVQSU5UVkwgNSAgCi0jZGVmaW5lIFRDUF9LRUVQQ05UIDYgIAotI2RlZmluZSBUQ1BfU1lOQ05UIDcgIAotI2RlZmluZSBUQ1BfTElOR0VSMiA4ICAKLSNkZWZpbmUgVENQX0RFRkVSX0FDQ0VQVCA5ICAKLSNkZWZpbmUgVENQX1dJTkRPV19DTEFNUCAxMCAgCi0jZGVmaW5lIFRDUF9JTkZPIDExICAKLSNkZWZpbmUgVENQX1FVSUNLQUNLIDEyICAKLSNkZWZpbmUgVENQX0NPTkdFU1RJT04gMTMgIAotCisjZGVmaW5lIFRDUF9OT0RFTEFZIDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRDUF9NQVhTRUcgMgorI2RlZmluZSBUQ1BfQ09SSyAzCisjZGVmaW5lIFRDUF9LRUVQSURMRSA0CisjZGVmaW5lIFRDUF9LRUVQSU5UVkwgNQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVENQX0tFRVBDTlQgNgorI2RlZmluZSBUQ1BfU1lOQ05UIDcKKyNkZWZpbmUgVENQX0xJTkdFUjIgOAorI2RlZmluZSBUQ1BfREVGRVJfQUNDRVBUIDkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRDUF9XSU5ET1dfQ0xBTVAgMTAKKyNkZWZpbmUgVENQX0lORk8gMTEKKyNkZWZpbmUgVENQX1FVSUNLQUNLIDEyCisjZGVmaW5lIFRDUF9DT05HRVNUSU9OIDEzCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBUQ1BJX09QVF9USU1FU1RBTVBTIDEKICNkZWZpbmUgVENQSV9PUFRfU0FDSyAyCiAjZGVmaW5lIFRDUElfT1BUX1dTQ0FMRSA0CiAjZGVmaW5lIFRDUElfT1BUX0VDTiA4Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBlbnVtIHRjcF9jYV9zdGF0ZQogewogIFRDUF9DQV9PcGVuID0gMCwKICNkZWZpbmUgVENQRl9DQV9PcGVuICgxPDxUQ1BfQ0FfT3BlbikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVENQX0NBX0Rpc29yZGVyID0gMSwKICNkZWZpbmUgVENQRl9DQV9EaXNvcmRlciAoMTw8VENQX0NBX0Rpc29yZGVyKQogIFRDUF9DQV9DV1IgPSAyLAogI2RlZmluZSBUQ1BGX0NBX0NXUiAoMTw8VENQX0NBX0NXUikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVENQX0NBX1JlY292ZXJ5ID0gMywKICNkZWZpbmUgVENQRl9DQV9SZWNvdmVyeSAoMTw8VENQX0NBX1JlY292ZXJ5KQogIFRDUF9DQV9Mb3NzID0gNAogI2RlZmluZSBUQ1BGX0NBX0xvc3MgKDE8PFRDUF9DQV9Mb3NzKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07Ci0KIHN0cnVjdCB0Y3BfaW5mbwogewogIF9fdTggdGNwaV9zdGF0ZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191OCB0Y3BpX2NhX3N0YXRlOwogIF9fdTggdGNwaV9yZXRyYW5zbWl0czsKICBfX3U4IHRjcGlfcHJvYmVzOwogIF9fdTggdGNwaV9iYWNrb2ZmOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IHRjcGlfb3B0aW9uczsKICBfX3U4IHRjcGlfc25kX3dzY2FsZSA6IDQsIHRjcGlfcmN2X3dzY2FsZSA6IDQ7Ci0KICBfX3UzMiB0Y3BpX3J0bzsKICBfX3UzMiB0Y3BpX2F0bzsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgdGNwaV9zbmRfbXNzOwogIF9fdTMyIHRjcGlfcmN2X21zczsKLQogIF9fdTMyIHRjcGlfdW5hY2tlZDsKICBfX3UzMiB0Y3BpX3NhY2tlZDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgdGNwaV9sb3N0OwogIF9fdTMyIHRjcGlfcmV0cmFuczsKICBfX3UzMiB0Y3BpX2ZhY2tldHM7Ci0KICBfX3UzMiB0Y3BpX2xhc3RfZGF0YV9zZW50OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiB0Y3BpX2xhc3RfYWNrX3NlbnQ7CiAgX191MzIgdGNwaV9sYXN0X2RhdGFfcmVjdjsKICBfX3UzMiB0Y3BpX2xhc3RfYWNrX3JlY3Y7Ci0KICBfX3UzMiB0Y3BpX3BtdHU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHRjcGlfcmN2X3NzdGhyZXNoOwogIF9fdTMyIHRjcGlfcnR0OwogIF9fdTMyIHRjcGlfcnR0dmFyOwogIF9fdTMyIHRjcGlfc25kX3NzdGhyZXNoOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiB0Y3BpX3NuZF9jd25kOwogIF9fdTMyIHRjcGlfYWR2bXNzOwogIF9fdTMyIHRjcGlfcmVvcmRlcmluZzsKLQogIF9fdTMyIHRjcGlfcmN2X3J0dDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgdGNwaV9yY3Zfc3BhY2U7Ci0KICBfX3UzMiB0Y3BpX3RvdGFsX3JldHJhbnM7CiB9OwotCiAjZW5kaWYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvdGVncmFfYXVkaW8uaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC90ZWdyYV9hdWRpby5oCmluZGV4IGUxOGNlMTEuLmZjZGFmMjAgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC90ZWdyYV9hdWRpby5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC90ZWdyYV9hdWRpby5oCkBAIC03LDM3ICs3LDM5IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfVEVHUkFfQVVESU9fSAogI2RlZmluZSBfVEVHUkFfQVVESU9fSAotCiAjaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KLQogI2RlZmluZSBURUdSQV9BVURJT19NQUdJQyAndCcKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVEVHUkFfQVVESU9fSU5fU1RBUlQgX0lPKFRFR1JBX0FVRElPX01BR0lDLCAwKQogI2RlZmluZSBURUdSQV9BVURJT19JTl9TVE9QIF9JTyhURUdSQV9BVURJT19NQUdJQywgMSkKLQogc3RydWN0IHRlZ3JhX2F1ZGlvX2luX2NvbmZpZyB7CiAgaW50IHJhdGU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGludCBzdGVyZW87CiB9OwotCiAjZGVmaW5lIFRFR1JBX0FVRElPX0lOX1NFVF9DT05GSUcgX0lPVyhURUdSQV9BVURJT19NQUdJQywgMiwgICBjb25zdCBzdHJ1Y3QgdGVncmFfYXVkaW9faW5fY29uZmlnICopCiAjZGVmaW5lIFRFR1JBX0FVRElPX0lOX0dFVF9DT05GSUcgX0lPUihURUdSQV9BVURJT19NQUdJQywgMywgICBzdHJ1Y3QgdGVncmFfYXVkaW9faW5fY29uZmlnICopCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFRFR1JBX0FVRElPX0lOX1NFVF9OVU1fQlVGUyBfSU9XKFRFR1JBX0FVRElPX01BR0lDLCA0LCAgIGNvbnN0IHVuc2lnbmVkIGludCAqKQogI2RlZmluZSBURUdSQV9BVURJT19JTl9HRVRfTlVNX0JVRlMgX0lPVyhURUdSQV9BVURJT19NQUdJQywgNSwgICB1bnNpZ25lZCBpbnQgKikKICNkZWZpbmUgVEVHUkFfQVVESU9fT1VUX1NFVF9OVU1fQlVGUyBfSU9XKFRFR1JBX0FVRElPX01BR0lDLCA2LCAgIGNvbnN0IHVuc2lnbmVkIGludCAqKQogI2RlZmluZSBURUdSQV9BVURJT19PVVRfR0VUX05VTV9CVUZTIF9JT1coVEVHUkFfQVVESU9fTUFHSUMsIDcsICAgdW5zaWduZWQgaW50ICopCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFRFR1JBX0FVRElPX09VVF9GTFVTSCBfSU8oVEVHUkFfQVVESU9fTUFHSUMsIDEwKQotCiAjZGVmaW5lIFRFR1JBX0FVRElPX0JJVF9GT1JNQVRfREVGQVVMVCAwCiAjZGVmaW5lIFRFR1JBX0FVRElPX0JJVF9GT1JNQVRfRFNQIDEKICNkZWZpbmUgVEVHUkFfQVVESU9fU0VUX0JJVF9GT1JNQVQgX0lPVyhURUdSQV9BVURJT19NQUdJQywgMTEsICAgY29uc3QgdW5zaWduZWQgaW50ICopCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBURUdSQV9BVURJT19HRVRfQklUX0ZPUk1BVCBfSU9SKFRFR1JBX0FVRElPX01BR0lDLCAxMiwgICB1bnNpZ25lZCBpbnQgKikKLQogI2VuZGlmCi0KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC90ZWdyYV9hdnAuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC90ZWdyYV9hdnAuaAppbmRleCBjNGEwY2JkLi5kYmE3ZjZiIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvdGVncmFfYXZwLmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3RlZ3JhX2F2cC5oCkBAIC03LDMyICs3LDM1IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfX0xJTlVYX1RFR1JBX0FWUF9ICiAjZGVmaW5lIF9fTElOVVhfVEVHUkFfQVZQX0gKLQogI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVEVHUkFfQVZQX0xJQl9NQVhfTkFNRSAzMgotI2RlZmluZSBURUdSQV9BVlBfTElCX01BWF9BUkdTIDIyMCAgCi0KKyNkZWZpbmUgVEVHUkFfQVZQX0xJQl9NQVhfQVJHUyAyMjAKIHN0cnVjdCB0ZWdyYV9hdnBfbGliIHsKICBjaGFyIG5hbWVbVEVHUkFfQVZQX0xJQl9NQVhfTkFNRV07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHZvaWQgX191c2VyICphcmdzOwogIHNpemVfdCBhcmdzX2xlbjsKICBpbnQgZ3JlZWR5OwogIHVuc2lnbmVkIGxvbmcgaGFuZGxlOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07Ci0KICNkZWZpbmUgVEVHUkFfQVZQX0lPQ1RMX01BR0lDICdyJwotCiAjZGVmaW5lIFRFR1JBX0FWUF9JT0NUTF9MT0FEX0xJQiBfSU9XUihURUdSQV9BVlBfSU9DVExfTUFHSUMsIDB4NDAsIHN0cnVjdCB0ZWdyYV9hdnBfbGliKQogI2RlZmluZSBURUdSQV9BVlBfSU9DVExfVU5MT0FEX0xJQiBfSU9XKFRFR1JBX0FWUF9JT0NUTF9NQUdJQywgMHg0MSwgdW5zaWduZWQgbG9uZykKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVEVHUkFfQVZQX0lPQ1RMX01JTl9OUiBfSU9DX05SKFRFR1JBX0FWUF9JT0NUTF9MT0FEX0xJQikKICNkZWZpbmUgVEVHUkFfQVZQX0lPQ1RMX01BWF9OUiBfSU9DX05SKFRFR1JBX0FWUF9JT0NUTF9VTkxPQURfTElCKQotCiAjZW5kaWYKLQpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3RlZ3JhX3JwYy5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3RlZ3JhX3JwYy5oCmluZGV4IGUzYzhiZjIuLjVkOTlkOWUgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC90ZWdyYV9ycGMuaAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvdGVncmFfcnBjLmgKQEAgLTcsMjkgKzcsMzIgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9fTElOVVhfVEVHUkFfUlBDX0gKICNkZWZpbmUgX19MSU5VWF9URUdSQV9SUENfSAotCiAjZGVmaW5lIFRFR1JBX1JQQ19NQVhfTVNHX0xFTiAyNTYKLQogI2RlZmluZSBURUdSQV9SUENfTUFYX05BTUVfTEVOIDE3Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgdGVncmFfcnBjX3BvcnRfZGVzYyB7CiAgY2hhciBuYW1lW1RFR1JBX1JQQ19NQVhfTkFNRV9MRU5dOwogIGludCBub3RpZnlfZmQ7CiB9OwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBURUdSQV9SUENfSU9DVExfTUFHSUMgJ3InCi0KICNkZWZpbmUgVEVHUkFfUlBDX0lPQ1RMX1BPUlRfQ1JFQVRFIF9JT1coVEVHUkFfUlBDX0lPQ1RMX01BR0lDLCAweDIwLCBzdHJ1Y3QgdGVncmFfcnBjX3BvcnRfZGVzYykKICNkZWZpbmUgVEVHUkFfUlBDX0lPQ1RMX1BPUlRfR0VUX05BTUUgX0lPUihURUdSQV9SUENfSU9DVExfTUFHSUMsIDB4MjEsIGNoYXIgKikKICNkZWZpbmUgVEVHUkFfUlBDX0lPQ1RMX1BPUlRfQ09OTkVDVCBfSU9SKFRFR1JBX1JQQ19JT0NUTF9NQUdJQywgMHgyMiwgbG9uZykKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFRFR1JBX1JQQ19JT0NUTF9QT1JUX0xJU1RFTiBfSU9SKFRFR1JBX1JQQ19JT0NUTF9NQUdJQywgMHgyMywgbG9uZykKLQogI2RlZmluZSBURUdSQV9SUENfSU9DVExfTUlOX05SIF9JT0NfTlIoVEVHUkFfUlBDX0lPQ1RMX1BPUlRfQ1JFQVRFKQogI2RlZmluZSBURUdSQV9SUENfSU9DVExfTUFYX05SIF9JT0NfTlIoVEVHUkFfUlBDX0lPQ1RMX1BPUlRfTElTVEVOKQotCiAjZW5kaWYKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC90ZWdyYV9zZW1hLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvdGVncmFfc2VtYS5oCmluZGV4IGJiMTEyOTguLmFkMDAyMzggMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC90ZWdyYV9zZW1hLmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3RlZ3JhX3NlbWEuaApAQCAtNywxOCArNywyMiBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX19MSU5VWF9URUdSQV9TRU1BX0gKICNkZWZpbmUgX19MSU5VWF9URUdSQV9TRU1BX0gKLQogI2RlZmluZSBURUdSQV9TRU1BX0lPQ1RMX01BR0lDICdyJwotCiAjZGVmaW5lIFRFR1JBX1NFTUFfSU9DVExfV0FJVCBfSU9XKFRFR1JBX1NFTUFfSU9DVExfTUFHSUMsIDB4MzAsIGxvbmcgKikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFRFR1JBX1NFTUFfSU9DVExfU0lHTkFMIF9JTyhURUdSQV9TRU1BX0lPQ1RMX01BR0lDLCAweDMxKQotCiAjZGVmaW5lIFRFR1JBX1NFTUFfSU9DVExfTUlOX05SIF9JT0NfTlIoVEVHUkFfU0VNQV9JT0NUTF9XQUlUKQogI2RlZmluZSBURUdSQV9TRU1BX0lPQ1RMX01BWF9OUiBfSU9DX05SKFRFR1JBX1NFTUFfSU9DVExfU0lHTkFMKQotCiAjZW5kaWYKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC90ZWdyYWZiLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvdGVncmFmYi5oCmluZGV4IGVhNjNlMDQuLjhiZGY0NjQgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC90ZWdyYWZiLmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3RlZ3JhZmIuaApAQCAtNyw4NiArNyw5OSBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX0xJTlVYX1RFR1JBRkJfSF8KICNkZWZpbmUgX0xJTlVYX1RFR1JBRkJfSF8KLQogI2luY2x1ZGUgPGxpbnV4L2ZiLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjaW5jbHVkZSA8YXNtL2lvY3RsLmg+Ci0KICNkZWZpbmUgVEVHUkFfRkJfV0lOX0ZNVF9QMSAwCiAjZGVmaW5lIFRFR1JBX0ZCX1dJTl9GTVRfUDIgMQogI2RlZmluZSBURUdSQV9GQl9XSU5fRk1UX1A0IDIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFRFR1JBX0ZCX1dJTl9GTVRfUDggMwogI2RlZmluZSBURUdSQV9GQl9XSU5fRk1UX0I0RzRSNEE0IDQKICNkZWZpbmUgVEVHUkFfRkJfV0lOX0ZNVF9CNUc1UjVBIDUKICNkZWZpbmUgVEVHUkFfRkJfV0lOX0ZNVF9CNUc2UjUgNgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVEVHUkFfRkJfV0lOX0ZNVF9BQjVHNVI1IDcKICNkZWZpbmUgVEVHUkFfRkJfV0lOX0ZNVF9COEc4UjhBOCAxMgogI2RlZmluZSBURUdSQV9GQl9XSU5fRk1UX1I4RzhCOEE4IDEzCiAjZGVmaW5lIFRFR1JBX0ZCX1dJTl9GTVRfQjZ4Mkc2eDJSNngyQTggMTQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFRFR1JBX0ZCX1dJTl9GTVRfUjZ4Mkc2eDJCNngyQTggMTUKICNkZWZpbmUgVEVHUkFfRkJfV0lOX0ZNVF9ZQ2JDcjQyMiAxNgogI2RlZmluZSBURUdSQV9GQl9XSU5fRk1UX1lVVjQyMiAxNwogI2RlZmluZSBURUdSQV9GQl9XSU5fRk1UX1lDYkNyNDIwUCAxOAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVEVHUkFfRkJfV0lOX0ZNVF9ZVVY0MjBQIDE5CiAjZGVmaW5lIFRFR1JBX0ZCX1dJTl9GTVRfWUNiQ3I0MjJQIDIwCiAjZGVmaW5lIFRFR1JBX0ZCX1dJTl9GTVRfWVVWNDIyUCAyMQogI2RlZmluZSBURUdSQV9GQl9XSU5fRk1UX1lDYkNyNDIyUiAyMgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVEVHUkFfRkJfV0lOX0ZNVF9ZVVY0MjJSIDIzCiAjZGVmaW5lIFRFR1JBX0ZCX1dJTl9GTVRfWUNiQ3I0MjJSQSAyNAogI2RlZmluZSBURUdSQV9GQl9XSU5fRk1UX1lVVjQyMlJBIDI1Ci0KICNkZWZpbmUgVEVHUkFfRkJfV0lOX0JMRU5EX05PTkUgMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVEVHUkFfRkJfV0lOX0JMRU5EX1BSRU1VTFQgMQogI2RlZmluZSBURUdSQV9GQl9XSU5fQkxFTkRfQ09WRVJBR0UgMgotCi0jZGVmaW5lIFRFR1JBX0ZCX1dJTl9GTEFHX0lOVkVSVF9IICgxPDwwKQotI2RlZmluZSBURUdSQV9GQl9XSU5fRkxBR19JTlZFUlRfViAoMTw8MSkKLSNkZWZpbmUgVEVHUkFfRkJfV0lOX0ZMQUdfVElMRUQgKDE8PDIpCi0KKyNkZWZpbmUgVEVHUkFfRkJfV0lOX0ZMQUdfSU5WRVJUX0ggKDEgPDwgMCkKKyNkZWZpbmUgVEVHUkFfRkJfV0lOX0ZMQUdfSU5WRVJUX1YgKDEgPDwgMSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRFR1JBX0ZCX1dJTl9GTEFHX1RJTEVEICgxIDw8IDIpCiBzdHJ1Y3QgdGVncmFfZmJfd2luZG93YXR0ciB7CiAgX19zMzIgaW5kZXg7CiAgX191MzIgYnVmZl9pZDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgZmxhZ3M7CiAgX191MzIgYmxlbmQ7CiAgX191MzIgb2Zmc2V0OwogIF9fdTMyIG9mZnNldF91OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBvZmZzZXRfdjsKICBfX3UzMiBzdHJpZGU7CiAgX191MzIgc3RyaWRlX3V2OwogIF9fdTMyIHBpeGZvcm1hdDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgeDsKICBfX3UzMiB5OwogIF9fdTMyIHc7CiAgX191MzIgaDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgb3V0X3g7CiAgX191MzIgb3V0X3k7CiAgX191MzIgb3V0X3c7CiAgX191MzIgb3V0X2g7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHo7CiAgX191MzIgcHJlX3N5bmNwdF9pZDsKICBfX3UzMiBwcmVfc3luY3B0X3ZhbDsKIH07Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFRFR1JBX0ZCX0ZMSVBfTl9XSU5ET1dTIDMKLQogc3RydWN0IHRlZ3JhX2ZiX2ZsaXBfYXJncyB7CiAgc3RydWN0IHRlZ3JhX2ZiX3dpbmRvd2F0dHIgd2luW1RFR1JBX0ZCX0ZMSVBfTl9XSU5ET1dTXTsKICBfX3UzMiBwb3N0X3N5bmNwdF9pZDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgcG9zdF9zeW5jcHRfdmFsOwogfTsKLQogc3RydWN0IHRlZ3JhX2ZiX21vZGVkYiB7CiAgc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICptb2RlZGI7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIG1vZGVkYl9sZW47CiB9OwotCiAjZGVmaW5lIEZCSU9fVEVHUkFfU0VUX05WTUFQX0ZEIF9JT1coJ0YnLCAweDQwLCBfX3UzMikKICNkZWZpbmUgRkJJT19URUdSQV9GTElQIF9JT1coJ0YnLCAweDQxLCBzdHJ1Y3QgdGVncmFfZmJfZmxpcF9hcmdzKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRkJJT19URUdSQV9HRVRfTU9ERURCIF9JT1dSKCdGJywgMHg0Miwgc3RydWN0IHRlZ3JhX2ZiX21vZGVkYikKLQogI2VuZGlmCi0KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC90ZWxlcGhvbnkuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC90ZWxlcGhvbnkuaAppbmRleCAwYzFkODNkLi5mNGM2ZDYzIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvdGVsZXBob255LmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3RlbGVwaG9ueS5oCkBAIC03LDE2NiArNywxODQgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIFRFTEVQSE9OWV9ICiAjZGVmaW5lIFRFTEVQSE9OWV9ICi0KICNkZWZpbmUgVEVMRVBIT05ZX1ZFUlNJT04gMzAxMwotCiAjZGVmaW5lIFBIT05FX1ZFTkRPUl9JWEogMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUEhPTkVfVkVORE9SX1FVSUNLTkVUIFBIT05FX1ZFTkRPUl9JWEoKICNkZWZpbmUgUEhPTkVfVkVORE9SX1ZPSUNFVFJPTklYIDIKICNkZWZpbmUgUEhPTkVfVkVORE9SX0FDVUxBQiAzCiAjZGVmaW5lIFBIT05FX1ZFTkRPUl9ESUdJIDQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBIT05FX1ZFTkRPUl9GUkFOS0xJTiA1Ci0KICNkZWZpbmUgUVRJX1BIT05FSkFDSyAxMDAKICNkZWZpbmUgUVRJX0xJTkVKQUNLIDMwMAogI2RlZmluZSBRVElfUEhPTkVKQUNLX0xJVEUgNDAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBRVElfUEhPTkVKQUNLX1BDSSA1MDAKICNkZWZpbmUgUVRJX1BIT05FQ0FSRCA2MDAKLQogdHlwZWRlZiBlbnVtIHsKICB2ZW5kb3IgPSAwLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBkZXZpY2UsCiAgcG9ydCwKICBjb2RlYywKICBkc3AKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9IHBob25lX2NhcDsKLQogc3RydWN0IHBob25lX2NhcGFiaWxpdHkgewogIGNoYXIgZGVzY1s4MF07CiAgcGhvbmVfY2FwIGNhcHR5cGU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGludCBjYXA7CiAgaW50IGhhbmRsZTsKIH07Ci0KIHR5cGVkZWYgZW51bSB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHBvdHMgPSAwLAogIHBzdG4sCiAgaGFuZHNldCwKICBzcGVha2VyCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfSBwaG9uZV9wb3J0czsKLQogI2RlZmluZSBQSE9ORV9DQVBBQklMSVRJRVMgX0lPICgncScsIDB4ODApCiAjZGVmaW5lIFBIT05FX0NBUEFCSUxJVElFU19MSVNUIF9JT1IgKCdxJywgMHg4MSwgc3RydWN0IHBob25lX2NhcGFiaWxpdHkgKikKICNkZWZpbmUgUEhPTkVfQ0FQQUJJTElUSUVTX0NIRUNLIF9JT1cgKCdxJywgMHg4Miwgc3RydWN0IHBob25lX2NhcGFiaWxpdHkgKikKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHR5cGVkZWYgc3RydWN0IHsKICBjaGFyIG1vbnRoWzNdOwogIGNoYXIgZGF5WzNdOwogIGNoYXIgaG91clszXTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgY2hhciBtaW5bM107CiAgaW50IG51bWxlbjsKICBjaGFyIG51bWJlclsxMV07CiAgaW50IG5hbWVsZW47CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGNoYXIgbmFtZVs4MF07CiB9IFBIT05FX0NJRDsKLQogI2RlZmluZSBQSE9ORV9SSU5HIF9JTyAoJ3EnLCAweDgzKQogI2RlZmluZSBQSE9ORV9IT09LU1RBVEUgX0lPICgncScsIDB4ODQpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQSE9ORV9NQVhSSU5HUyBfSU9XICgncScsIDB4ODUsIGNoYXIpCiAjZGVmaW5lIFBIT05FX1JJTkdfQ0FERU5DRSBfSU9XICgncScsIDB4ODYsIHNob3J0KQogI2RlZmluZSBPTERfUEhPTkVfUklOR19TVEFSVCBfSU8gKCdxJywgMHg4NykKICNkZWZpbmUgUEhPTkVfUklOR19TVEFSVCBfSU9XICgncScsIDB4ODcsIFBIT05FX0NJRCAqKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUEhPTkVfUklOR19TVE9QIF9JTyAoJ3EnLCAweDg4KQotCiAjZGVmaW5lIFVTQV9SSU5HX0NBREVOQ0UgMHhDMEMwCi0KICNkZWZpbmUgUEhPTkVfUkVDX0NPREVDIF9JT1cgKCdxJywgMHg4OSwgaW50KQogI2RlZmluZSBQSE9ORV9SRUNfU1RBUlQgX0lPICgncScsIDB4OEEpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQSE9ORV9SRUNfU1RPUCBfSU8gKCdxJywgMHg4QikKICNkZWZpbmUgUEhPTkVfUkVDX0RFUFRIIF9JT1cgKCdxJywgMHg4QywgaW50KQogI2RlZmluZSBQSE9ORV9GUkFNRSBfSU9XICgncScsIDB4OEQsIGludCkKICNkZWZpbmUgUEhPTkVfUkVDX1ZPTFVNRSBfSU9XICgncScsIDB4OEUsIGludCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBIT05FX1JFQ19WT0xVTUVfTElORUFSIF9JT1cgKCdxJywgMHhEQiwgaW50KQogI2RlZmluZSBQSE9ORV9SRUNfTEVWRUwgX0lPICgncScsIDB4OEYpCi0KICNkZWZpbmUgUEhPTkVfUExBWV9DT0RFQyBfSU9XICgncScsIDB4OTAsIGludCkKICNkZWZpbmUgUEhPTkVfUExBWV9TVEFSVCBfSU8gKCdxJywgMHg5MSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBIT05FX1BMQVlfU1RPUCBfSU8gKCdxJywgMHg5MikKICNkZWZpbmUgUEhPTkVfUExBWV9ERVBUSCBfSU9XICgncScsIDB4OTMsIGludCkKICNkZWZpbmUgUEhPTkVfUExBWV9WT0xVTUUgX0lPVyAoJ3EnLCAweDk0LCBpbnQpCiAjZGVmaW5lIFBIT05FX1BMQVlfVk9MVU1FX0xJTkVBUiBfSU9XICgncScsIDB4REMsIGludCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBIT05FX1BMQVlfTEVWRUwgX0lPICgncScsIDB4OTUpCiAjZGVmaW5lIFBIT05FX0RUTUZfUkVBRFkgX0lPUiAoJ3EnLCAweDk2LCBpbnQpCiAjZGVmaW5lIFBIT05FX0dFVF9EVE1GIF9JT1IgKCdxJywgMHg5NywgaW50KQogI2RlZmluZSBQSE9ORV9HRVRfRFRNRl9BU0NJSSBfSU9SICgncScsIDB4OTgsIGludCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBIT05FX0RUTUZfT09CIF9JT1cgKCdxJywgMHg5OSwgaW50KQogI2RlZmluZSBQSE9ORV9FWENFUFRJT04gX0lPUiAoJ3EnLCAweDlBLCBpbnQpCiAjZGVmaW5lIFBIT05FX1BMQVlfVE9ORSBfSU9XICgncScsIDB4OUIsIGNoYXIpCiAjZGVmaW5lIFBIT05FX1NFVF9UT05FX09OX1RJTUUgX0lPVyAoJ3EnLCAweDlDLCBpbnQpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQSE9ORV9TRVRfVE9ORV9PRkZfVElNRSBfSU9XICgncScsIDB4OUQsIGludCkKICNkZWZpbmUgUEhPTkVfR0VUX1RPTkVfT05fVElNRSBfSU8gKCdxJywgMHg5RSkKICNkZWZpbmUgUEhPTkVfR0VUX1RPTkVfT0ZGX1RJTUUgX0lPICgncScsIDB4OUYpCiAjZGVmaW5lIFBIT05FX0dFVF9UT05FX1NUQVRFIF9JTyAoJ3EnLCAweEEwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUEhPTkVfQlVTWSBfSU8gKCdxJywgMHhBMSkKICNkZWZpbmUgUEhPTkVfUklOR0JBQ0sgX0lPICgncScsIDB4QTIpCiAjZGVmaW5lIFBIT05FX0RJQUxUT05FIF9JTyAoJ3EnLCAweEEzKQogI2RlZmluZSBQSE9ORV9DUFRfU1RPUCBfSU8gKCdxJywgMHhBNCkKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUEhPTkVfUFNUTl9TRVRfU1RBVEUgX0lPVyAoJ3EnLCAweEE0LCBpbnQpCiAjZGVmaW5lIFBIT05FX1BTVE5fR0VUX1NUQVRFIF9JTyAoJ3EnLCAweEE1KQotCiAjZGVmaW5lIFBTVE5fT05fSE9PSyAwCiAjZGVmaW5lIFBTVE5fUklOR0lORyAxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQU1ROX09GRl9IT09LIDIKICNkZWZpbmUgUFNUTl9QVUxTRV9ESUFMIDMKLQogI2RlZmluZSBQSE9ORV9XSU5LX0RVUkFUSU9OIF9JT1cgKCdxJywgMHhBNiwgaW50KQogI2RlZmluZSBQSE9ORV9XSU5LIF9JT1cgKCdxJywgMHhBQSwgaW50KQotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogdHlwZWRlZiBlbnVtIHsKICBHNzIzXzYzID0gMSwKICBHNzIzXzUzID0gMiwKICBUUzg1ID0gMywKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVFM0OCA9IDQsCiAgVFM0MSA9IDUsCiAgRzcyOCA9IDYsCiAgRzcyOSA9IDcsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFVMQVcgPSA4LAogIEFMQVcgPSA5LAogIExJTkVBUjE2ID0gMTAsCiAgTElORUFSOCA9IDExLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBXU1MgPSAxMiwKICBHNzI5QiA9IDEzCiB9IHBob25lX2NvZGVjOwotCiBzdHJ1Y3QgcGhvbmVfY29kZWNfZGF0YQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHsKICBwaG9uZV9jb2RlYyB0eXBlOwogIHVuc2lnbmVkIHNob3J0IGJ1Zl9taW4sIGJ1Zl9vcHQsIGJ1Zl9tYXg7CiB9OwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBQSE9ORV9RVUVSWV9DT0RFQyBfSU9XUiAoJ3EnLCAweEE3LCBzdHJ1Y3QgcGhvbmVfY29kZWNfZGF0YSAqKQogI2RlZmluZSBQSE9ORV9QU1ROX0xJTkVURVNUIF9JTyAoJ3EnLCAweEE4KQotCiAjZGVmaW5lIFBIT05FX1ZBRCBfSU9XICgncScsIDB4QTksIGludCkKLQogc3RydWN0IHBob25lX2V4Y2VwdAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHsKICB1bnNpZ25lZCBpbnQgZHRtZl9yZWFkeToxOwogIHVuc2lnbmVkIGludCBob29rc3RhdGU6MTsKICB1bnNpZ25lZCBpbnQgcHN0bl9yaW5nOjE7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGludCBjYWxsZXJfaWQ6MTsKICB1bnNpZ25lZCBpbnQgcHN0bl93aW5rOjE7CiAgdW5zaWduZWQgaW50IGYwOjE7CiAgdW5zaWduZWQgaW50IGYxOjE7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGludCBmMjoxOwogIHVuc2lnbmVkIGludCBmMzoxOwogIHVuc2lnbmVkIGludCBmbGFzaDoxOwogIHVuc2lnbmVkIGludCBmYzA6MTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgaW50IGZjMToxOwogIHVuc2lnbmVkIGludCBmYzI6MTsKICB1bnNpZ25lZCBpbnQgZmMzOjE7CiAgdW5zaWduZWQgaW50IHJlc2VydmVkOjE4OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07Ci0KIHVuaW9uIHRlbGVwaG9ueV9leGNlcHRpb24gewogIHN0cnVjdCBwaG9uZV9leGNlcHQgYml0czsKICB1bnNpZ25lZCBpbnQgYnl0ZXM7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKLQogI2VuZGlmCi0KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC90ZXJtaW9zLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvdGVybWlvcy5oCmluZGV4IGUyODQzOWQuLmJjNGIyN2IgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC90ZXJtaW9zLmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3Rlcm1pb3MuaApAQCAtNywxMiArNywxOCBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX0xJTlVYX1RFUk1JT1NfSAogI2RlZmluZSBfTElOVVhfVEVSTUlPU19ICi0KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGFzbS90ZXJtaW9zLmg+Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC90ZXh0c2VhcmNoLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvdGV4dHNlYXJjaC5oCmluZGV4IGE5MjFjZGQuLjJiNzFkMDkgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC90ZXh0c2VhcmNoLmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3RleHRzZWFyY2guaApAQCAtNyw5ICs3LDE1IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfX0xJTlVYX1RFWFRTRUFSQ0hfSAogI2RlZmluZSBfX0xJTlVYX1RFWFRTRUFSQ0hfSAotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC90aHJlYWRfaW5mby5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3RocmVhZF9pbmZvLmgKaW5kZXggMDc0YTFmOS4uZDk0NTdlNyAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3RocmVhZF9pbmZvLmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3RocmVhZF9pbmZvLmgKQEAgLTcsMTcgKzcsMjMgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9MSU5VWF9USFJFQURfSU5GT19ICiAjZGVmaW5lIF9MSU5VWF9USFJFQURfSU5GT19ICi0KIHN0cnVjdCByZXN0YXJ0X2Jsb2NrIHsKICBsb25nICgqZm4pKHN0cnVjdCByZXN0YXJ0X2Jsb2NrICopOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBsb25nIGFyZzAsIGFyZzEsIGFyZzIsIGFyZzM7CiB9OwotCiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CiAjaW5jbHVkZSA8YXNtL3RocmVhZF9pbmZvLmg+Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC90aHJlYWRzLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvdGhyZWFkcy5oCmluZGV4IDVkODU4NzguLjExOGJiZTcgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC90aHJlYWRzLmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3RocmVhZHMuaApAQCAtNywxNyArNywyMCBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX0xJTlVYX1RIUkVBRFNfSAogI2RlZmluZSBfTElOVVhfVEhSRUFEU19ICi0KICNkZWZpbmUgTlJfQ1BVUyAxCi0KICNkZWZpbmUgTUlOX1RIUkVBRFNfTEVGVF9GT1JfUk9PVCA0Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFBJRF9NQVhfREVGQVVMVCAoQ09ORklHX0JBU0VfU01BTEwgPyAweDEwMDAgOiAweDgwMDApCi0KICNkZWZpbmUgUElEX01BWF9MSU1JVCAoQ09ORklHX0JBU0VfU01BTEwgPyBQQUdFX1NJWkUgKiA4IDogICAoc2l6ZW9mKGxvbmcpID4gNCA/IDQgKiAxMDI0ICogMTAyNCA6IFBJRF9NQVhfREVGQVVMVCkpCi0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3RpbWUuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC90aW1lLmgKaW5kZXggM2U2ZTQ0MC4uMDBhNTU2ZCAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3RpbWUuaAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvdGltZS5oCkBAIC03LDYzICs3LDY4IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfTElOVVhfVElNRV9ICiAjZGVmaW5lIF9MSU5VWF9USU1FX0gKLQogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0KICNpZm5kZWYgX1NUUlVDVF9USU1FU1BFQworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX1NUUlVDVF9USU1FU1BFQwogc3RydWN0IHRpbWVzcGVjIHsKICB0aW1lX3QgdHZfc2VjOwogIGxvbmcgdHZfbnNlYzsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwogI2VuZGlmCi0KIHN0cnVjdCB0aW1ldmFsIHsKICB0aW1lX3QgdHZfc2VjOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdXNlY29uZHNfdCB0dl91c2VjOwogfTsKLQogc3RydWN0IHRpbWV6b25lIHsKICBpbnQgdHpfbWludXRlc3dlc3Q7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGludCB0el9kc3R0aW1lOwogfTsKLQogI2RlZmluZSBORkRCSVRTIF9fTkZEQklUUwotCiAjZGVmaW5lIEZEX1NFVFNJWkUgX19GRF9TRVRTSVpFCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBGRF9TRVQoZmQsZmRzZXRwKSBfX0ZEX1NFVChmZCxmZHNldHApCiAjZGVmaW5lIEZEX0NMUihmZCxmZHNldHApIF9fRkRfQ0xSKGZkLGZkc2V0cCkKICNkZWZpbmUgRkRfSVNTRVQoZmQsZmRzZXRwKSBfX0ZEX0lTU0VUKGZkLGZkc2V0cCkKICNkZWZpbmUgRkRfWkVSTyhmZHNldHApIF9fRkRfWkVSTyhmZHNldHApCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIElUSU1FUl9SRUFMIDAKICNkZWZpbmUgSVRJTUVSX1ZJUlRVQUwgMQogI2RlZmluZSBJVElNRVJfUFJPRiAyCi0KIHN0cnVjdCBpdGltZXJzcGVjIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IHRpbWVzcGVjIGl0X2ludGVydmFsOwogIHN0cnVjdCB0aW1lc3BlYyBpdF92YWx1ZTsKIH07Ci0KIHN0cnVjdCBpdGltZXJ2YWwgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgdGltZXZhbCBpdF9pbnRlcnZhbDsKICBzdHJ1Y3QgdGltZXZhbCBpdF92YWx1ZTsKIH07Ci0KICNkZWZpbmUgQ0xPQ0tfUkVBTFRJTUUgMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQ0xPQ0tfTU9OT1RPTklDIDEKICNkZWZpbmUgQ0xPQ0tfUFJPQ0VTU19DUFVUSU1FX0lEIDIKICNkZWZpbmUgQ0xPQ0tfVEhSRUFEX0NQVVRJTUVfSUQgMwotCiAjZGVmaW5lIENMT0NLX1NHSV9DWUNMRSAxMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTUFYX0NMT0NLUyAxNgogI2RlZmluZSBDTE9DS1NfTUFTSyAoQ0xPQ0tfUkVBTFRJTUUgfCBDTE9DS19NT05PVE9OSUMpCiAjZGVmaW5lIENMT0NLU19NT05PIENMT0NLX01PTk9UT05JQwotCiAjZGVmaW5lIFRJTUVSX0FCU1RJTUUgMHgwMQotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvdGltZXIuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC90aW1lci5oCmluZGV4IDA3MWE3NTkuLmExMTM5OTcgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC90aW1lci5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC90aW1lci5oCkBAIC03LDM1ICs3LDM3IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfTElOVVhfVElNRVJfSAogI2RlZmluZSBfTElOVVhfVElNRVJfSAotCiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgotCiBzdHJ1Y3QgdHZlY190X2Jhc2VfczsKLQogc3RydWN0IHRpbWVyX2xpc3QgewogIHN0cnVjdCBsaXN0X2hlYWQgZW50cnk7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGxvbmcgZXhwaXJlczsKLQogIHZvaWQgKCpmdW5jdGlvbikodW5zaWduZWQgbG9uZyk7CiAgdW5zaWduZWQgbG9uZyBkYXRhOwotCiAgc3RydWN0IHR2ZWNfdF9iYXNlX3MgKmJhc2U7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKLQogI2RlZmluZSBUSU1FUl9JTklUSUFMSVpFUihfZnVuY3Rpb24sIF9leHBpcmVzLCBfZGF0YSkgeyAgIC5mdW5jdGlvbiA9IChfZnVuY3Rpb24pLCAgIC5leHBpcmVzID0gKF9leHBpcmVzKSwgICAuZGF0YSA9IChfZGF0YSksICAgLmJhc2UgPSAmYm9vdF90dmVjX2Jhc2VzLCAgIH0KLQogI2RlZmluZSBERUZJTkVfVElNRVIoX25hbWUsIF9mdW5jdGlvbiwgX2V4cGlyZXMsIF9kYXRhKSAgIHN0cnVjdCB0aW1lcl9saXN0IF9uYW1lID0gICBUSU1FUl9JTklUSUFMSVpFUihfZnVuY3Rpb24sIF9leHBpcmVzLCBfZGF0YSkKLQogI2RlZmluZSB0cnlfdG9fZGVsX3RpbWVyX3N5bmModCkgZGVsX3RpbWVyKHQpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBkZWxfdGltZXJfc3luYyh0KSBkZWxfdGltZXIodCkKICNkZWZpbmUgZGVsX3NpbmdsZXNob3RfdGltZXJfc3luYyh0KSBkZWxfdGltZXJfc3luYyh0KQotCiBzdHJ1Y3QgaHJ0aW1lcjsKLQogI2VuZGlmCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3RpbWVyZmQuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC90aW1lcmZkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDE2NWViYgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC90aW1lcmZkLmgKQEAgLTAsMCArMSwzMSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfTElOVVhfVElNRVJGRF9ICisjZGVmaW5lIF9MSU5VWF9USU1FUkZEX0gKKyNpbmNsdWRlIDxsaW51eC9mY250bC5oPgorI2RlZmluZSBURkRfVElNRVJfQUJTVElNRSAoMSA8PCAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVEZEX1RJTUVSX0NBTkNFTF9PTl9TRVQgKDEgPDwgMSkKKyNkZWZpbmUgVEZEX0NMT0VYRUMgT19DTE9FWEVDCisjZGVmaW5lIFRGRF9OT05CTE9DSyBPX05PTkJMT0NLCisjZGVmaW5lIFRGRF9TSEFSRURfRkNOVExfRkxBR1MgKFRGRF9DTE9FWEVDIHwgVEZEX05PTkJMT0NLKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVEZEX0NSRUFURV9GTEFHUyBURkRfU0hBUkVEX0ZDTlRMX0ZMQUdTCisjZGVmaW5lIFRGRF9TRVRUSU1FX0ZMQUdTIChURkRfVElNRVJfQUJTVElNRSB8IFRGRF9USU1FUl9DQU5DRUxfT05fU0VUKQorI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvdGltZXMuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC90aW1lcy5oCmluZGV4IDRhZTQxNWMuLmZlMDAzZjMgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC90aW1lcy5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC90aW1lcy5oCkBAIC03LDE4ICs3LDI0IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfTElOVVhfVElNRVNfSAogI2RlZmluZSBfTElOVVhfVElNRVNfSAotCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLQogc3RydWN0IHRtcyB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGNsb2NrX3QgdG1zX3V0aW1lOwogIGNsb2NrX3QgdG1zX3N0aW1lOwogIGNsb2NrX3QgdG1zX2N1dGltZTsKICBjbG9ja190IHRtc19jc3RpbWU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKLQogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvdGltZXguaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC90aW1leC5oCmluZGV4IDM0MjQ3MGIuLjkyMTIzMWYgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC90aW1leC5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC90aW1leC5oCkBAIC03LDEwMiArNywxMTIgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9MSU5VWF9USU1FWF9ICiAjZGVmaW5lIF9MSU5VWF9USU1FWF9ICi0KICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNpbmNsdWRlIDxhc20vcGFyYW0uaD4KLQotI2RlZmluZSBTSElGVF9LRyA2ICAKLSNkZWZpbmUgU0hJRlRfS0YgMTYgIAotI2RlZmluZSBTSElGVF9LSCAyICAKLSNkZWZpbmUgTUFYVEMgNiAgCi0KLSNkZWZpbmUgU0hJRlRfU0NBTEUgMjIgIAotI2RlZmluZSBTSElGVF9VUERBVEUgKFNISUZUX0tHICsgTUFYVEMpICAKLSNkZWZpbmUgU0hJRlRfVVNFQyAxNiAgCi0jZGVmaW5lIEZJTkVOU0VDICgxTCA8PCAoU0hJRlRfU0NBTEUgLSAxMCkpICAKLQotI2RlZmluZSBNQVhQSEFTRSA1MTIwMDBMICAKLSNkZWZpbmUgTUFYRlJFUSAoNTEyTCA8PCBTSElGVF9VU0VDKSAgCi0jZGVmaW5lIE1JTlNFQyAxNkwgIAotI2RlZmluZSBNQVhTRUMgMTIwMEwgIAotI2RlZmluZSBOVFBfUEhBU0VfTElNSVQgKE1BWFBIQVNFIDw8IDUpICAKLQorI2RlZmluZSBTSElGVF9LRyA2CisjZGVmaW5lIFNISUZUX0tGIDE2CisjZGVmaW5lIFNISUZUX0tIIDIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIE1BWFRDIDYKKyNkZWZpbmUgU0hJRlRfU0NBTEUgMjIKKyNkZWZpbmUgU0hJRlRfVVBEQVRFIChTSElGVF9LRyArIE1BWFRDKQorI2RlZmluZSBTSElGVF9VU0VDIDE2CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBGSU5FTlNFQyAoMUwgPDwgKFNISUZUX1NDQUxFIC0gMTApKQorI2RlZmluZSBNQVhQSEFTRSA1MTIwMDBMCisjZGVmaW5lIE1BWEZSRVEgKDUxMkwgPDwgU0hJRlRfVVNFQykKKyNkZWZpbmUgTUlOU0VDIDE2TAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgTUFYU0VDIDEyMDBMCisjZGVmaW5lIE5UUF9QSEFTRV9MSU1JVCAoTUFYUEhBU0UgPDwgNSkKIHN0cnVjdCB0aW1leCB7CiAgdW5zaWduZWQgaW50IG1vZGVzOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBsb25nIG9mZnNldDsKICBsb25nIGZyZXE7CiAgbG9uZyBtYXhlcnJvcjsKICBsb25nIGVzdGVycm9yOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBpbnQgc3RhdHVzOwogIGxvbmcgY29uc3RhbnQ7CiAgbG9uZyBwcmVjaXNpb247CiAgbG9uZyB0b2xlcmFuY2U7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCB0aW1ldmFsIHRpbWU7CiAgbG9uZyB0aWNrOwotCiAgbG9uZyBwcHNmcmVxOwogIGxvbmcgaml0dGVyOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBpbnQgc2hpZnQ7CiAgbG9uZyBzdGFiaWw7CiAgbG9uZyBqaXRjbnQ7CiAgbG9uZyBjYWxjbnQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGxvbmcgZXJyY250OwogIGxvbmcgc3RiY250OwotCiAgaW50IDozMjsgaW50IDozMjsgaW50IDozMjsgaW50IDozMjsKICBpbnQgOjMyOyBpbnQgOjMyOyBpbnQgOjMyOyBpbnQgOjMyOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBpbnQgOjMyOyBpbnQgOjMyOyBpbnQgOjMyOyBpbnQgOjMyOwogfTsKLQotI2RlZmluZSBBREpfT0ZGU0VUIDB4MDAwMSAgCi0jZGVmaW5lIEFESl9GUkVRVUVOQ1kgMHgwMDAyICAKLSNkZWZpbmUgQURKX01BWEVSUk9SIDB4MDAwNCAgCi0jZGVmaW5lIEFESl9FU1RFUlJPUiAweDAwMDggIAotI2RlZmluZSBBREpfU1RBVFVTIDB4MDAxMCAgCi0jZGVmaW5lIEFESl9USU1FQ09OU1QgMHgwMDIwICAKLSNkZWZpbmUgQURKX1RJQ0sgMHg0MDAwICAKLSNkZWZpbmUgQURKX09GRlNFVF9TSU5HTEVTSE9UIDB4ODAwMSAgCi0KKyNkZWZpbmUgQURKX09GRlNFVCAweDAwMDEKKyNkZWZpbmUgQURKX0ZSRVFVRU5DWSAweDAwMDIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEFESl9NQVhFUlJPUiAweDAwMDQKKyNkZWZpbmUgQURKX0VTVEVSUk9SIDB4MDAwOAorI2RlZmluZSBBREpfU1RBVFVTIDB4MDAxMAorI2RlZmluZSBBREpfVElNRUNPTlNUIDB4MDAyMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgQURKX1RJQ0sgMHg0MDAwCisjZGVmaW5lIEFESl9PRkZTRVRfU0lOR0xFU0hPVCAweDgwMDEKICNkZWZpbmUgTU9EX09GRlNFVCBBREpfT0ZGU0VUCiAjZGVmaW5lIE1PRF9GUkVRVUVOQ1kgQURKX0ZSRVFVRU5DWQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTU9EX01BWEVSUk9SIEFESl9NQVhFUlJPUgogI2RlZmluZSBNT0RfRVNURVJST1IgQURKX0VTVEVSUk9SCiAjZGVmaW5lIE1PRF9TVEFUVVMgQURKX1NUQVRVUwogI2RlZmluZSBNT0RfVElNRUNPTlNUIEFESl9USU1FQ09OU1QKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1PRF9DTEtCIEFESl9USUNLCi0jZGVmaW5lIE1PRF9DTEtBIEFESl9PRkZTRVRfU0lOR0xFU0hPVCAgCi0KLSNkZWZpbmUgU1RBX1BMTCAweDAwMDEgIAotI2RlZmluZSBTVEFfUFBTRlJFUSAweDAwMDIgIAotI2RlZmluZSBTVEFfUFBTVElNRSAweDAwMDQgIAotI2RlZmluZSBTVEFfRkxMIDB4MDAwOCAgCi0KLSNkZWZpbmUgU1RBX0lOUyAweDAwMTAgIAotI2RlZmluZSBTVEFfREVMIDB4MDAyMCAgCi0jZGVmaW5lIFNUQV9VTlNZTkMgMHgwMDQwICAKLSNkZWZpbmUgU1RBX0ZSRVFIT0xEIDB4MDA4MCAgCi0KLSNkZWZpbmUgU1RBX1BQU1NJR05BTCAweDAxMDAgIAotI2RlZmluZSBTVEFfUFBTSklUVEVSIDB4MDIwMCAgCi0jZGVmaW5lIFNUQV9QUFNXQU5ERVIgMHgwNDAwICAKLSNkZWZpbmUgU1RBX1BQU0VSUk9SIDB4MDgwMCAgCi0KLSNkZWZpbmUgU1RBX0NMT0NLRVJSIDB4MTAwMCAgCi0KLSNkZWZpbmUgU1RBX1JPTkxZIChTVEFfUFBTU0lHTkFMIHwgU1RBX1BQU0pJVFRFUiB8IFNUQV9QUFNXQU5ERVIgfCAgIFNUQV9QUFNFUlJPUiB8IFNUQV9DTE9DS0VSUikgIAotCi0jZGVmaW5lIFRJTUVfT0sgMCAgCi0jZGVmaW5lIFRJTUVfSU5TIDEgIAotI2RlZmluZSBUSU1FX0RFTCAyICAKLSNkZWZpbmUgVElNRV9PT1AgMyAgCi0jZGVmaW5lIFRJTUVfV0FJVCA0ICAKLSNkZWZpbmUgVElNRV9FUlJPUiA1ICAKLSNkZWZpbmUgVElNRV9CQUQgVElNRV9FUlJPUiAgCi0KKyNkZWZpbmUgTU9EX0NMS0EgQURKX09GRlNFVF9TSU5HTEVTSE9UCisjZGVmaW5lIFNUQV9QTEwgMHgwMDAxCisjZGVmaW5lIFNUQV9QUFNGUkVRIDB4MDAwMgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgU1RBX1BQU1RJTUUgMHgwMDA0CisjZGVmaW5lIFNUQV9GTEwgMHgwMDA4CisjZGVmaW5lIFNUQV9JTlMgMHgwMDEwCisjZGVmaW5lIFNUQV9ERUwgMHgwMDIwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBTVEFfVU5TWU5DIDB4MDA0MAorI2RlZmluZSBTVEFfRlJFUUhPTEQgMHgwMDgwCisjZGVmaW5lIFNUQV9QUFNTSUdOQUwgMHgwMTAwCisjZGVmaW5lIFNUQV9QUFNKSVRURVIgMHgwMjAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBTVEFfUFBTV0FOREVSIDB4MDQwMAorI2RlZmluZSBTVEFfUFBTRVJST1IgMHgwODAwCisjZGVmaW5lIFNUQV9DTE9DS0VSUiAweDEwMDAKKyNkZWZpbmUgU1RBX1JPTkxZIChTVEFfUFBTU0lHTkFMIHwgU1RBX1BQU0pJVFRFUiB8IFNUQV9QUFNXQU5ERVIgfCAgIFNUQV9QUFNFUlJPUiB8IFNUQV9DTE9DS0VSUikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJTUVfT0sgMAorI2RlZmluZSBUSU1FX0lOUyAxCisjZGVmaW5lIFRJTUVfREVMIDIKKyNkZWZpbmUgVElNRV9PT1AgMworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElNRV9XQUlUIDQKKyNkZWZpbmUgVElNRV9FUlJPUiA1CisjZGVmaW5lIFRJTUVfQkFEIFRJTUVfRVJST1IKICNlbmRpZgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC90aW9jbC5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3Rpb2NsLmgKaW5kZXggZGIxNWE4ZC4uZjM4MThmYyAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3Rpb2NsLmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3Rpb2NsLmgKQEAgLTcsNDEgKzcsNDkgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9MSU5VWF9USU9DTF9ICiAjZGVmaW5lIF9MSU5VWF9USU9DTF9ICi0KLSNkZWZpbmUgVElPQ0xfU0VUU0VMIDIgIAotI2RlZmluZSBUSU9DTF9TRUxDSEFSIDAgIAotI2RlZmluZSBUSU9DTF9TRUxXT1JEIDEgIAotI2RlZmluZSBUSU9DTF9TRUxMSU5FIDIgIAotI2RlZmluZSBUSU9DTF9TRUxQT0lOVEVSIDMgIAotI2RlZmluZSBUSU9DTF9TRUxDTEVBUiA0ICAKLSNkZWZpbmUgVElPQ0xfU0VMTU9VU0VSRVBPUlQgMTYgIAotI2RlZmluZSBUSU9DTF9TRUxCVVRUT05NQVNLIDE1ICAKLQorI2RlZmluZSBUSU9DTF9TRVRTRUwgMgorI2RlZmluZSBUSU9DTF9TRUxDSEFSIDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJT0NMX1NFTFdPUkQgMQorI2RlZmluZSBUSU9DTF9TRUxMSU5FIDIKKyNkZWZpbmUgVElPQ0xfU0VMUE9JTlRFUiAzCisjZGVmaW5lIFRJT0NMX1NFTENMRUFSIDQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRJT0NMX1NFTE1PVVNFUkVQT1JUIDE2CisjZGVmaW5lIFRJT0NMX1NFTEJVVFRPTk1BU0sgMTUKIHN0cnVjdCB0aW9jbF9zZWxlY3Rpb24gewogIHVuc2lnbmVkIHNob3J0IHhzOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBzaG9ydCB5czsKICB1bnNpZ25lZCBzaG9ydCB4ZTsKICB1bnNpZ25lZCBzaG9ydCB5ZTsKICB1bnNpZ25lZCBzaG9ydCBzZWxfbW9kZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwotCi0jZGVmaW5lIFRJT0NMX1BBU1RFU0VMIDMgIAotI2RlZmluZSBUSU9DTF9VTkJMQU5LU0NSRUVOIDQgIAotCisjZGVmaW5lIFRJT0NMX1BBU1RFU0VMIDMKKyNkZWZpbmUgVElPQ0xfVU5CTEFOS1NDUkVFTiA0CiAjZGVmaW5lIFRJT0NMX1NFTExPQURMVVQgNQotCi0jZGVmaW5lIFRJT0NMX0dFVFNISUZUU1RBVEUgNiAgCi0jZGVmaW5lIFRJT0NMX0dFVE1PVVNFUkVQT1JUSU5HIDcgIAotI2RlZmluZSBUSU9DTF9TRVRWRVNBQkxBTksgMTAgIAotI2RlZmluZSBUSU9DTF9TRVRLTVNHUkVESVJFQ1QgMTEgIAotI2RlZmluZSBUSU9DTF9HRVRGR0NPTlNPTEUgMTIgIAotI2RlZmluZSBUSU9DTF9TQ1JPTExDT05TT0xFIDEzICAKLSNkZWZpbmUgVElPQ0xfQkxBTktTQ1JFRU4gMTQgIAotI2RlZmluZSBUSU9DTF9CTEFOS0VEU0NSRUVOIDE1ICAKLSNkZWZpbmUgVElPQ0xfR0VUS01TR1JFRElSRUNUIDE3ICAKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElPQ0xfR0VUU0hJRlRTVEFURSA2CisjZGVmaW5lIFRJT0NMX0dFVE1PVVNFUkVQT1JUSU5HIDcKKyNkZWZpbmUgVElPQ0xfU0VUVkVTQUJMQU5LIDEwCisjZGVmaW5lIFRJT0NMX1NFVEtNU0dSRURJUkVDVCAxMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElPQ0xfR0VURkdDT05TT0xFIDEyCisjZGVmaW5lIFRJT0NMX1NDUk9MTENPTlNPTEUgMTMKKyNkZWZpbmUgVElPQ0xfQkxBTktTQ1JFRU4gMTQKKyNkZWZpbmUgVElPQ0xfQkxBTktFRFNDUkVFTiAxNQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVElPQ0xfR0VUS01TR1JFRElSRUNUIDE3CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC90cGEyMDE4ZDEuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC90cGEyMDE4ZDEuaAppbmRleCA0YWUzMWZjLi5hNWU0NGQyIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvdHBhMjAxOGQxLmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3RwYTIwMThkMS5oCkBAIC03LDI3ICs3LDMyIEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfTElOVVhfVFBBMjAxOEQxX0gKICNkZWZpbmUgX0xJTlVYX1RQQTIwMThEMV9ICi0KICNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgotCiBlbnVtIHRwYTIwMThkMV9tb2RlIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVFBBMjAxOF9NT0RFX09GRiwKICBUUEEyMDE4X01PREVfUExBWUJBQ0ssCiAgVFBBMjAxOF9NT0RFX1JJTkdUT05FLAogIFRQQTIwMThfTU9ERV9WT0lDRV9DQUxMLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBUUEEyMDE4X05VTV9NT0RFUywKIH07Ci0KICNkZWZpbmUgVFBBMjAxOF9JT0NUTF9NQUdJQyAnYScKICNkZWZpbmUgVFBBMjAxOF9TRVRfQ09ORklHIF9JT1coVFBBMjAxOF9JT0NUTF9NQUdJQywgMSwgdW5zaWduZWQpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBUUEEyMDE4X1JFQURfQ09ORklHIF9JT1IoVFBBMjAxOF9JT0NUTF9NQUdJQywgMiwgdW5zaWduZWQpCiAjZGVmaW5lIFRQQTIwMThfU0VUX1BBUkFNIF9JT1coVFBBMjAxOF9JT0NUTF9NQUdJQywgMywgdW5zaWduZWQpCiAjZGVmaW5lIFRQQTIwMThfU0VUX01PREUgX0lPVyhUUEEyMDE4X0lPQ1RMX01BR0lDLCA0LCB1bnNpZ25lZCkKLQogI2VuZGlmCi0KLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC90cmFuc3BvcnRfY2xhc3MuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC90cmFuc3BvcnRfY2xhc3MuaAppbmRleCA3MWFkMDg0Li4zZDg5YzM2IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvdHJhbnNwb3J0X2NsYXNzLmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3RyYW5zcG9ydF9jbGFzcy5oCkBAIC03LDQyICs3LDQ1IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfVFJBTlNQT1JUX0NMQVNTX0hfCiAjZGVmaW5lIF9UUkFOU1BPUlRfQ0xBU1NfSF8KLQogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2F0dHJpYnV0ZV9jb250YWluZXIuaD4KLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCB0cmFuc3BvcnRfY29udGFpbmVyOwotCiBzdHJ1Y3QgdHJhbnNwb3J0X2NsYXNzIHsKICBzdHJ1Y3QgY2xhc3MgY2xhc3M7CiAgaW50ICgqc2V0dXApKHN0cnVjdCB0cmFuc3BvcnRfY29udGFpbmVyICosIHN0cnVjdCBkZXZpY2UgKiwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IGNsYXNzX2RldmljZSAqKTsKICBpbnQgKCpjb25maWd1cmUpKHN0cnVjdCB0cmFuc3BvcnRfY29udGFpbmVyICosIHN0cnVjdCBkZXZpY2UgKiwKICBzdHJ1Y3QgY2xhc3NfZGV2aWNlICopOwogIGludCAoKnJlbW92ZSkoc3RydWN0IHRyYW5zcG9ydF9jb250YWluZXIgKiwgc3RydWN0IGRldmljZSAqLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgY2xhc3NfZGV2aWNlICopOwogfTsKLQogI2RlZmluZSBERUNMQVJFX1RSQU5TUE9SVF9DTEFTUyhjbHMsIG5tLCBzdSwgcm0sIGNmZykgIHN0cnVjdCB0cmFuc3BvcnRfY2xhc3MgY2xzID0geyAgIC5jbGFzcyA9IHsgICAubmFtZSA9IG5tLCAgIH0sICAgLnNldHVwID0gc3UsICAgLnJlbW92ZSA9IHJtLCAgIC5jb25maWd1cmUgPSBjZmcsICB9Ci0KIHN0cnVjdCBhbm9uX3RyYW5zcG9ydF9jbGFzcyB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCB0cmFuc3BvcnRfY2xhc3MgdGNsYXNzOwogIHN0cnVjdCBhdHRyaWJ1dGVfY29udGFpbmVyIGNvbnRhaW5lcjsKIH07Ci0KICNkZWZpbmUgREVDTEFSRV9BTk9OX1RSQU5TUE9SVF9DTEFTUyhjbHMsIG10Y2gsIGNmZykgIHN0cnVjdCBhbm9uX3RyYW5zcG9ydF9jbGFzcyBjbHMgPSB7ICAgLnRjbGFzcyA9IHsgICAuY29uZmlndXJlID0gY2ZnLCAgIH0sICAgLiBjb250YWluZXIgPSB7ICAgLm1hdGNoID0gbXRjaCwgICB9LCAgfQotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBjbGFzc190b190cmFuc3BvcnRfY2xhc3MoeCkgICBjb250YWluZXJfb2YoeCwgc3RydWN0IHRyYW5zcG9ydF9jbGFzcywgY2xhc3MpCi0KIHN0cnVjdCB0cmFuc3BvcnRfY29udGFpbmVyIHsKICBzdHJ1Y3QgYXR0cmlidXRlX2NvbnRhaW5lciBhYzsKICBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwICpzdGF0aXN0aWNzOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07Ci0KICNkZWZpbmUgYXR0cmlidXRlX2NvbnRhaW5lcl90b190cmFuc3BvcnRfY29udGFpbmVyKHgpICAgY29udGFpbmVyX29mKHgsIHN0cnVjdCB0cmFuc3BvcnRfY29udGFpbmVyLCBhYykKLQogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvdHR5LmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvdHR5LmgKaW5kZXggYjFmMmVhYi4uNWY1Y2RjYiAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3R0eS5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC90dHkuaApAQCAtNywxMSArNywxNyBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX0xJTlVYX1RUWV9ICiAjZGVmaW5lIF9MSU5VWF9UVFlfSAotCi0jZGVmaW5lIE5fQ0FJRiAyMCAgCi0KKyNkZWZpbmUgTl9DQUlGIDIwCiAjZW5kaWYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvdHlwZXMuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC90eXBlcy5oCmluZGV4IGIxMThkYjAuLmI0MDk1OWMgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC90eXBlcy5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC90eXBlcy5oCkBAIC03LDMxICs3LDQwIEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfTElOVVhfVFlQRVNfSAogI2RlZmluZSBfTElOVVhfVFlQRVNfSAotCiAjaW5jbHVkZSA8bGludXgvcG9zaXhfdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vdHlwZXMuaD4KLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgX19iaXR3aXNlX18KICNkZWZpbmUgX19iaXR3aXNlCi0KIHR5cGVkZWYgX191MTYgX19iaXR3aXNlIF9fbGUxNjsKIHR5cGVkZWYgX191MTYgX19iaXR3aXNlIF9fYmUxNjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB0eXBlZGVmIF9fdTMyIF9fYml0d2lzZSBfX2xlMzI7CiB0eXBlZGVmIF9fdTMyIF9fYml0d2lzZSBfX2JlMzI7CiAjaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgIWRlZmluZWQoX19TVFJJQ1RfQU5TSV9fKQogdHlwZWRlZiBfX3U2NCBfX2JpdHdpc2UgX19sZTY0OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHR5cGVkZWYgX191NjQgX19iaXR3aXNlIF9fYmU2NDsKICNlbmRpZgotCit0eXBlZGVmIF9fdTE2IF9fYml0d2lzZSBfX3N1bTE2OwordHlwZWRlZiBfX3UzMiBfX2JpdHdpc2UgX193c3VtOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCB1c3RhdCB7CiAgX19rZXJuZWxfZGFkZHJfdCBmX3RmcmVlOwogIF9fa2VybmVsX2lub190IGZfdGlub2RlOwogIGNoYXIgZl9mbmFtZVs2XTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgY2hhciBmX2ZwYWNrWzZdOwogfTsKLQogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvdWJsb2NrLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvdWJsb2NrLmgKaW5kZXggYWExOWE4MS4uNTlhOWFhYiAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3VibG9jay5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC91YmxvY2suaApAQCAtNyw3NSArNyw4MCBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX19VQkxPQ0tfSF8KICNkZWZpbmUgX19VQkxPQ0tfSF8KLQogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0KICNkZWZpbmUgVUJMT0NLX1ZFUlNJT04gMAotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogZW51bSB7CiAgVUJMT0NLX0lOSVRfSU4gPSAwLAogIFVCTE9DS19JTklUX09VVCA9IDEsCiAgVUJMT0NLX1JFQURZX0lOID0gMiwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVUJMT0NLX1JFQURZX09VVCA9IDMsCiAgVUJMT0NLX1JFQURfSU4gPSA0LAogIFVCTE9DS19SRUFEX09VVCA9IDUsCiAgVUJMT0NLX1dSSVRFX0lOID0gNiwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVUJMT0NLX1dSSVRFX09VVCA9IDcsCiB9OwotCiBzdHJ1Y3QgdWJsb2NrX2luX2hlYWRlciB7CiAgX191MzIgc2VxOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBvcGNvZGU7CiB9OwotCiBzdHJ1Y3QgdWJsb2NrX291dF9oZWFkZXIgewogIF9fdTMyIHNlcTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgb3Bjb2RlOwogfTsKLQogc3RydWN0IHVibG9ja19pbml0X2luIHsKICBfX3UzMiB2ZXJzaW9uOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBtYXhfYnVmOwogIF9fdTMyIGluZGV4OwogfTsKLQogc3RydWN0IHVibG9ja19pbml0X291dCB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHZlcnNpb247CiAgX191MzIgbWF4X2J1ZjsKICBfX3U2NCBzaXplOwogfTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCB1YmxvY2tfcmVhZHlfaW4gewogIF9fdTMyIF91bnVzZWQ7CiB9OwotCiBzdHJ1Y3QgdWJsb2NrX3JlYWR5X291dCB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIF91bnVzZWQ7CiB9OwotCiBzdHJ1Y3QgdWJsb2NrX3JlYWRfaW4gewogIF9fdTY0IG9mZnNldDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191NjQgbGVuZ3RoOwogfTsKLQogc3RydWN0IHVibG9ja19yZWFkX291dCB7CiAgX19zMzIgc3RhdHVzOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IGRhdGFbXTsKIH07Ci0KIHN0cnVjdCB1YmxvY2tfd3JpdGVfaW4gewogIF9fdTY0IG9mZnNldDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191NjQgbGVuZ3RoOwogIF9fdTggZGF0YVtdOwogfTsKLQogc3RydWN0IHVibG9ja193cml0ZV9vdXQgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3MzMiBzdGF0dXM7CiB9OwotCiAjZW5kaWYKLQpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3VkcC5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3VkcC5oCmluZGV4IGU0YmY4NjQuLjEwZDY2NTggMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC91ZHAuaAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvdWRwLmgKQEAgLTcsMjQgKzcsMjkgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9MSU5VWF9VRFBfSAogI2RlZmluZSBfTElOVVhfVURQX0gKLQogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0KIHN0cnVjdCB1ZHBoZHIgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UxNiBzb3VyY2U7CiAgX191MTYgZGVzdDsKICBfX3UxNiBsZW47CiAgX191MTYgY2hlY2s7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKLQotI2RlZmluZSBVRFBfQ09SSyAxICAKLSNkZWZpbmUgVURQX0VOQ0FQIDEwMCAgCi0KLSNkZWZpbmUgVURQX0VOQ0FQX0VTUElOVURQX05PTl9JS0UgMSAgCi0jZGVmaW5lIFVEUF9FTkNBUF9FU1BJTlVEUCAyICAKLQorI2RlZmluZSBVRFBfQ09SSyAxCisjZGVmaW5lIFVEUF9FTkNBUCAxMDAKKyNkZWZpbmUgVURQX0VOQ0FQX0VTUElOVURQX05PTl9JS0UgMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVURQX0VOQ0FQX0VTUElOVURQIDIKICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3Vmc19mc19pLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvdWZzX2ZzX2kuaAppbmRleCBkNzFhZGI2Li4xNTBhODAwIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvdWZzX2ZzX2kuaAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvdWZzX2ZzX2kuaApAQCAtNywyNyArNywzNyBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX0xJTlVYX1VGU19GU19JX0gKICNkZWZpbmUgX0xJTlVYX1VGU19GU19JX0gKLQogc3RydWN0IHVmc19pbm9kZV9pbmZvIHsKICB1bmlvbiB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fZnMzMiBpX2RhdGFbMTVdOwogIF9fdTggaV9zeW1saW5rWzQqMTVdOwogIF9fZnM2NCB1Ml9pX2RhdGFbMTVdOwogIH0gaV91MTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgaV9mbGFnczsKICBfX3UzMiBpX2dlbjsKICBfX3UzMiBpX3NoYWRvdzsKICBfX3UzMiBpX3VudXNlZDE7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGlfdW51c2VkMjsKICBfX3UzMiBpX29lZnRmbGFnOwogIF9fdTE2IGlfb3N5bmM7CiAgX191MzIgaV9sYXN0ZnJhZzsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgaV9kaXJfc3RhcnRfbG9va3VwOwogIHN0cnVjdCBpbm9kZSB2ZnNfaW5vZGU7CiB9OwotCiAjZW5kaWYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvdWZzX2ZzX3NiLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvdWZzX2ZzX3NiLmgKaW5kZXggOWM3MjI2ZC4uMzI0MWQ1MiAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3Vmc19mc19zYi5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC91ZnNfZnNfc2IuaApAQCAtNywyOSArNywzNyBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX19MSU5VWF9VRlNfRlNfU0JfSAogI2RlZmluZSBfX0xJTlVYX1VGU19GU19TQl9ICi0KICNkZWZpbmUgVUZTX01BWF9HUk9VUF9MT0FERUQgOAogI2RlZmluZSBVRlNfQ0dOT19FTVBUWSAoKHVuc2lnbmVkKS0xKQotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IHVmc19zYl9wcml2YXRlX2luZm87CiBzdHJ1Y3QgdWZzX2NnX3ByaXZhdGVfaW5mbzsKIHN0cnVjdCB1ZnNfY3N1bTsKICNkZWZpbmUgVUZTX01BWENTQlVGUyAzMQotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IHVmc19zYl9pbmZvIHsKICBzdHJ1Y3QgdWZzX3NiX3ByaXZhdGVfaW5mbyAqIHNfdXNwaTsKICBzdHJ1Y3QgdWZzX2NzdW0gKiBzX2NzcDsKICB1bnNpZ25lZCBzX2J5dGVzZXg7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIHNfZmxhZ3M7CiAgc3RydWN0IGJ1ZmZlcl9oZWFkICoqIHNfdWNnOwogIHN0cnVjdCB1ZnNfY2dfcHJpdmF0ZV9pbmZvICogc191Y3BpW1VGU19NQVhfR1JPVVBfTE9BREVEXTsKICB1bnNpZ25lZCBzX2Nnbm9bVUZTX01BWF9HUk9VUF9MT0FERURdOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBzaG9ydCBzX2NnX2xvYWRlZDsKICB1bnNpZ25lZCBzX21vdW50X29wdDsKIH07Ci0KICNlbmRpZgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC91aGlkLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvdWhpZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwYjY2ZmMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvdWhpZC5oCkBAIC0wLDAgKzEsMTA4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fVUhJRF9IXworI2RlZmluZSBfX1VISURfSF8KKyNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworZW51bSB1aGlkX2V2ZW50X3R5cGUgeworIFVISURfQ1JFQVRFLAorIFVISURfREVTVFJPWSwKKyBVSElEX1NUQVJULAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBVSElEX1NUT1AsCisgVUhJRF9PUEVOLAorIFVISURfQ0xPU0UsCisgVUhJRF9PVVRQVVQsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIFVISURfT1VUUFVUX0VWLAorIFVISURfSU5QVVQsCisgVUhJRF9GRUFUVVJFLAorIFVISURfRkVBVFVSRV9BTlNXRVIsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworfTsKK3N0cnVjdCB1aGlkX2NyZWF0ZV9yZXEgeworIF9fdTggbmFtZVsxMjhdOworIF9fdTggcGh5c1s2NF07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTggdW5pcVs2NF07CisgX191OCBfX3VzZXIgKnJkX2RhdGE7CisgX191MTYgcmRfc2l6ZTsKKyBfX3UxNiBidXM7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTMyIHZlbmRvcjsKKyBfX3UzMiBwcm9kdWN0OworIF9fdTMyIHZlcnNpb247CisgX191MzIgY291bnRyeTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCit9IF9fYXR0cmlidXRlX18oKF9fcGFja2VkX18pKTsKKyNkZWZpbmUgVUhJRF9EQVRBX01BWCA0MDk2CitlbnVtIHVoaWRfcmVwb3J0X3R5cGUgeworIFVISURfRkVBVFVSRV9SRVBPUlQsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIFVISURfT1VUUFVUX1JFUE9SVCwKKyBVSElEX0lOUFVUX1JFUE9SVCwKK307CitzdHJ1Y3QgdWhpZF9pbnB1dF9yZXEgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3U4IGRhdGFbVUhJRF9EQVRBX01BWF07CisgX191MTYgc2l6ZTsKK30gX19hdHRyaWJ1dGVfXygoX19wYWNrZWRfXykpOworc3RydWN0IHVoaWRfb3V0cHV0X3JlcSB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTggZGF0YVtVSElEX0RBVEFfTUFYXTsKKyBfX3UxNiBzaXplOworIF9fdTggcnR5cGU7Cit9IF9fYXR0cmlidXRlX18oKF9fcGFja2VkX18pKTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCitzdHJ1Y3QgdWhpZF9vdXRwdXRfZXZfcmVxIHsKKyBfX3UxNiB0eXBlOworIF9fdTE2IGNvZGU7CisgX19zMzIgdmFsdWU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworfSBfX2F0dHJpYnV0ZV9fKChfX3BhY2tlZF9fKSk7CitzdHJ1Y3QgdWhpZF9mZWF0dXJlX3JlcSB7CisgX191MzIgaWQ7CisgX191OCBybnVtOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3U4IHJ0eXBlOworfSBfX2F0dHJpYnV0ZV9fKChfX3BhY2tlZF9fKSk7CitzdHJ1Y3QgdWhpZF9mZWF0dXJlX2Fuc3dlcl9yZXEgeworIF9fdTMyIGlkOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UxNiBlcnI7CisgX191MTYgc2l6ZTsKKyBfX3U4IGRhdGFbVUhJRF9EQVRBX01BWF07Cit9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK3N0cnVjdCB1aGlkX2V2ZW50IHsKKyBfX3UzMiB0eXBlOworIHVuaW9uIHsKKyBzdHJ1Y3QgdWhpZF9jcmVhdGVfcmVxIGNyZWF0ZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgc3RydWN0IHVoaWRfaW5wdXRfcmVxIGlucHV0OworIHN0cnVjdCB1aGlkX291dHB1dF9yZXEgb3V0cHV0OworIHN0cnVjdCB1aGlkX291dHB1dF9ldl9yZXEgb3V0cHV0X2V2OworIHN0cnVjdCB1aGlkX2ZlYXR1cmVfcmVxIGZlYXR1cmU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIHN0cnVjdCB1aGlkX2ZlYXR1cmVfYW5zd2VyX3JlcSBmZWF0dXJlX2Fuc3dlcjsKKyB9IHU7Cit9IF9fYXR0cmlidXRlX18oKF9fcGFja2VkX18pKTsKKyNlbmRpZgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC91aW5wdXQuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC91aW5wdXQuaAppbmRleCBiN2E2YWRkLi5kNmZhNThiIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvdWlucHV0LmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3VpbnB1dC5oCkBAIC03LDYxICs3LDY5IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfX1VJTlBVVF9IXwogI2RlZmluZSBfX1VJTlBVVF9IXwotCiAjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KLQogI2RlZmluZSBVSU5QVVRfVkVSU0lPTiAzCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgdWlucHV0X2ZmX3VwbG9hZCB7CiAgaW50IHJlcXVlc3RfaWQ7CiAgaW50IHJldHZhbDsKICBzdHJ1Y3QgZmZfZWZmZWN0IGVmZmVjdDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IGZmX2VmZmVjdCBvbGQ7CiB9OwotCiBzdHJ1Y3QgdWlucHV0X2ZmX2VyYXNlIHsKICBpbnQgcmVxdWVzdF9pZDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgaW50IHJldHZhbDsKICBpbnQgZWZmZWN0X2lkOwogfTsKLQogI2RlZmluZSBVSU5QVVRfSU9DVExfQkFTRSAnVScKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFVJX0RFVl9DUkVBVEUgX0lPKFVJTlBVVF9JT0NUTF9CQVNFLCAxKQogI2RlZmluZSBVSV9ERVZfREVTVFJPWSBfSU8oVUlOUFVUX0lPQ1RMX0JBU0UsIDIpCi0KICNkZWZpbmUgVUlfU0VUX0VWQklUIF9JT1coVUlOUFVUX0lPQ1RMX0JBU0UsIDEwMCwgaW50KQogI2RlZmluZSBVSV9TRVRfS0VZQklUIF9JT1coVUlOUFVUX0lPQ1RMX0JBU0UsIDEwMSwgaW50KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVUlfU0VUX1JFTEJJVCBfSU9XKFVJTlBVVF9JT0NUTF9CQVNFLCAxMDIsIGludCkKICNkZWZpbmUgVUlfU0VUX0FCU0JJVCBfSU9XKFVJTlBVVF9JT0NUTF9CQVNFLCAxMDMsIGludCkKICNkZWZpbmUgVUlfU0VUX01TQ0JJVCBfSU9XKFVJTlBVVF9JT0NUTF9CQVNFLCAxMDQsIGludCkKICNkZWZpbmUgVUlfU0VUX0xFREJJVCBfSU9XKFVJTlBVVF9JT0NUTF9CQVNFLCAxMDUsIGludCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFVJX1NFVF9TTkRCSVQgX0lPVyhVSU5QVVRfSU9DVExfQkFTRSwgMTA2LCBpbnQpCiAjZGVmaW5lIFVJX1NFVF9GRkJJVCBfSU9XKFVJTlBVVF9JT0NUTF9CQVNFLCAxMDcsIGludCkKICNkZWZpbmUgVUlfU0VUX1BIWVMgX0lPVyhVSU5QVVRfSU9DVExfQkFTRSwgMTA4LCBjaGFyKikKICNkZWZpbmUgVUlfU0VUX1NXQklUIF9JT1coVUlOUFVUX0lPQ1RMX0JBU0UsIDEwOSwgaW50KQotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBVSV9CRUdJTl9GRl9VUExPQUQgX0lPV1IoVUlOUFVUX0lPQ1RMX0JBU0UsIDIwMCwgc3RydWN0IHVpbnB1dF9mZl91cGxvYWQpCiAjZGVmaW5lIFVJX0VORF9GRl9VUExPQUQgX0lPVyhVSU5QVVRfSU9DVExfQkFTRSwgMjAxLCBzdHJ1Y3QgdWlucHV0X2ZmX3VwbG9hZCkKICNkZWZpbmUgVUlfQkVHSU5fRkZfRVJBU0UgX0lPV1IoVUlOUFVUX0lPQ1RMX0JBU0UsIDIwMiwgc3RydWN0IHVpbnB1dF9mZl9lcmFzZSkKICNkZWZpbmUgVUlfRU5EX0ZGX0VSQVNFIF9JT1coVUlOUFVUX0lPQ1RMX0JBU0UsIDIwMywgc3RydWN0IHVpbnB1dF9mZl9lcmFzZSkKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgRVZfVUlOUFVUIDB4MDEwMQogI2RlZmluZSBVSV9GRl9VUExPQUQgMQogI2RlZmluZSBVSV9GRl9FUkFTRSAyCi0KICNkZWZpbmUgVUlOUFVUX01BWF9OQU1FX1NJWkUgODAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgdWlucHV0X3VzZXJfZGV2IHsKICBjaGFyIG5hbWVbVUlOUFVUX01BWF9OQU1FX1NJWkVdOwogIHN0cnVjdCBpbnB1dF9pZCBpZDsKICBpbnQgZmZfZWZmZWN0c19tYXg7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGludCBhYnNtYXhbQUJTX01BWCArIDFdOwogIGludCBhYnNtaW5bQUJTX01BWCArIDFdOwogIGludCBhYnNmdXp6W0FCU19NQVggKyAxXTsKICBpbnQgYWJzZmxhdFtBQlNfTUFYICsgMV07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKICNlbmRpZgotCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvdWlvLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvdWlvLmgKaW5kZXggYjA4OTVhZi4uZTM3ZGEyMSAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3Vpby5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC91aW8uaApAQCAtNywyMSArNywyNyBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX19MSU5VWF9VSU9fSAogI2RlZmluZSBfX0xJTlVYX1VJT19ICi0KICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgaW92ZWMKIHsKICB2b2lkIF9fdXNlciAqaW92X2Jhc2U7CiAgX19rZXJuZWxfc2l6ZV90IGlvdl9sZW47CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKLQogI2RlZmluZSBVSU9fRkFTVElPViA4CiAjZGVmaW5lIFVJT19NQVhJT1YgMTAyNAotCiAjZW5kaWYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvdW4uaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC91bi5oCmluZGV4IDViNTFiN2MuLmMyYmFjYTYgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC91bi5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC91bi5oCkBAIC03LDE2ICs3LDIyIEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfTElOVVhfVU5fSAogI2RlZmluZSBfTElOVVhfVU5fSAotCiAjZGVmaW5lIFVOSVhfUEFUSF9NQVggMTA4Ci0KIHN0cnVjdCBzb2NrYWRkcl91biB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHNhX2ZhbWlseV90IHN1bl9mYW1pbHk7CiAgY2hhciBzdW5fcGF0aFtVTklYX1BBVEhfTUFYXTsKIH07Ci0KICNlbmRpZgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC91bmlzdGQuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC91bmlzdGQuaAppbmRleCA2YTNlYzRjLi4xNDAyM2RjIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvdW5pc3RkLmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3VuaXN0ZC5oCkBAIC03LDExICs3LDE3IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfTElOVVhfVU5JU1REX0hfCiAjZGVmaW5lIF9MSU5VWF9VTklTVERfSF8KLQogI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KLQogI2VuZGlmCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3VzYi5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3VzYi5oCmluZGV4IGNlZWUxOTQuLjJkZmJlZTMgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC91c2IuaAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvdXNiLmgKQEAgLTcsMTUgKzcsMjAgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9fTElOVVhfVVNCX0gKICNkZWZpbmUgX19MSU5VWF9VU0JfSAotCiAjaW5jbHVkZSA8bGludXgvbW9kX2RldmljZXRhYmxlLmg+CiAjaW5jbHVkZSA8bGludXgvdXNiX2NoOS5oPgotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBVU0JfTUFKT1IgMTgwCiAjZGVmaW5lIFVTQl9ERVZJQ0VfTUFKT1IgMTg5Ci0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3VzYi9jaDkuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC91c2IvY2g5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2RmYWQ5ZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC91c2IvY2g5LmgKQEAgLTAsMCArMSw1MDQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19MSU5VWF9VU0JfQ0g5X0gKKyNkZWZpbmUgX19MSU5VWF9VU0JfQ0g5X0gKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFVTQl9ESVJfT1VUIDAKKyNkZWZpbmUgVVNCX0RJUl9JTiAweDgwCisjZGVmaW5lIFVTQl9UWVBFX01BU0sgKDB4MDMgPDwgNSkKKyNkZWZpbmUgVVNCX1RZUEVfU1RBTkRBUkQgKDB4MDAgPDwgNSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFVTQl9UWVBFX0NMQVNTICgweDAxIDw8IDUpCisjZGVmaW5lIFVTQl9UWVBFX1ZFTkRPUiAoMHgwMiA8PCA1KQorI2RlZmluZSBVU0JfVFlQRV9SRVNFUlZFRCAoMHgwMyA8PCA1KQorI2RlZmluZSBVU0JfUkVDSVBfTUFTSyAweDFmCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBVU0JfUkVDSVBfREVWSUNFIDB4MDAKKyNkZWZpbmUgVVNCX1JFQ0lQX0lOVEVSRkFDRSAweDAxCisjZGVmaW5lIFVTQl9SRUNJUF9FTkRQT0lOVCAweDAyCisjZGVmaW5lIFVTQl9SRUNJUF9PVEhFUiAweDAzCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBVU0JfUkVDSVBfUE9SVCAweDA0CisjZGVmaW5lIFVTQl9SRUNJUF9SUElQRSAweDA1CisjZGVmaW5lIFVTQl9SRVFfR0VUX1NUQVRVUyAweDAwCisjZGVmaW5lIFVTQl9SRVFfQ0xFQVJfRkVBVFVSRSAweDAxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBVU0JfUkVRX1NFVF9GRUFUVVJFIDB4MDMKKyNkZWZpbmUgVVNCX1JFUV9TRVRfQUREUkVTUyAweDA1CisjZGVmaW5lIFVTQl9SRVFfR0VUX0RFU0NSSVBUT1IgMHgwNgorI2RlZmluZSBVU0JfUkVRX1NFVF9ERVNDUklQVE9SIDB4MDcKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFVTQl9SRVFfR0VUX0NPTkZJR1VSQVRJT04gMHgwOAorI2RlZmluZSBVU0JfUkVRX1NFVF9DT05GSUdVUkFUSU9OIDB4MDkKKyNkZWZpbmUgVVNCX1JFUV9HRVRfSU5URVJGQUNFIDB4MEEKKyNkZWZpbmUgVVNCX1JFUV9TRVRfSU5URVJGQUNFIDB4MEIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFVTQl9SRVFfU1lOQ0hfRlJBTUUgMHgwQworI2RlZmluZSBVU0JfUkVRX1NFVF9TRUwgMHgzMAorI2RlZmluZSBVU0JfUkVRX1NFVF9FTkNSWVBUSU9OIDB4MEQKKyNkZWZpbmUgVVNCX1JFUV9HRVRfRU5DUllQVElPTiAweDBFCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBVU0JfUkVRX1JQSVBFX0FCT1JUIDB4MEUKKyNkZWZpbmUgVVNCX1JFUV9TRVRfSEFORFNIQUtFIDB4MEYKKyNkZWZpbmUgVVNCX1JFUV9SUElQRV9SRVNFVCAweDBGCisjZGVmaW5lIFVTQl9SRVFfR0VUX0hBTkRTSEFLRSAweDEwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBVU0JfUkVRX1NFVF9DT05ORUNUSU9OIDB4MTEKKyNkZWZpbmUgVVNCX1JFUV9TRVRfU0VDVVJJVFlfREFUQSAweDEyCisjZGVmaW5lIFVTQl9SRVFfR0VUX1NFQ1VSSVRZX0RBVEEgMHgxMworI2RlZmluZSBVU0JfUkVRX1NFVF9XVVNCX0RBVEEgMHgxNAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVVNCX1JFUV9MT09QQkFDS19EQVRBX1dSSVRFIDB4MTUKKyNkZWZpbmUgVVNCX1JFUV9MT09QQkFDS19EQVRBX1JFQUQgMHgxNgorI2RlZmluZSBVU0JfUkVRX1NFVF9JTlRFUkZBQ0VfRFMgMHgxNworI2RlZmluZSBVU0JfREVWSUNFX1NFTEZfUE9XRVJFRCAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBVU0JfREVWSUNFX1JFTU9URV9XQUtFVVAgMQorI2RlZmluZSBVU0JfREVWSUNFX1RFU1RfTU9ERSAyCisjZGVmaW5lIFVTQl9ERVZJQ0VfQkFUVEVSWSAyCisjZGVmaW5lIFVTQl9ERVZJQ0VfQl9ITlBfRU5BQkxFIDMKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFVTQl9ERVZJQ0VfV1VTQl9ERVZJQ0UgMworI2RlZmluZSBVU0JfREVWSUNFX0FfSE5QX1NVUFBPUlQgNAorI2RlZmluZSBVU0JfREVWSUNFX0FfQUxUX0hOUF9TVVBQT1JUIDUKKyNkZWZpbmUgVVNCX0RFVklDRV9ERUJVR19NT0RFIDYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRFU1RfSiAxCisjZGVmaW5lIFRFU1RfSyAyCisjZGVmaW5lIFRFU1RfU0UwX05BSyAzCisjZGVmaW5lIFRFU1RfUEFDS0VUIDQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRFU1RfRk9SQ0VfRU4gNQorI2RlZmluZSBVU0JfREVWSUNFX1UxX0VOQUJMRSA0OAorI2RlZmluZSBVU0JfREVWSUNFX1UyX0VOQUJMRSA0OQorI2RlZmluZSBVU0JfREVWSUNFX0xUTV9FTkFCTEUgNTAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFVTQl9JTlRSRl9GVU5DX1NVU1BFTkQgMAorI2RlZmluZSBVU0JfSU5UUl9GVU5DX1NVU1BFTkRfT1BUX01BU0sgMHhGRjAwCisjZGVmaW5lIFVTQl9JTlRSRl9GVU5DX1NVU1BFTkRfTFAgKDEgPDwgKDggKyAwKSkKKyNkZWZpbmUgVVNCX0lOVFJGX0ZVTkNfU1VTUEVORF9SVyAoMSA8PCAoOCArIDEpKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVVNCX0VORFBPSU5UX0hBTFQgMAorI2RlZmluZSBVU0JfREVWX1NUQVRfVTFfRU5BQkxFRCAyCisjZGVmaW5lIFVTQl9ERVZfU1RBVF9VMl9FTkFCTEVEIDMKKyNkZWZpbmUgVVNCX0RFVl9TVEFUX0xUTV9FTkFCTEVEIDQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCitzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0IHsKKyBfX3U4IGJSZXF1ZXN0VHlwZTsKKyBfX3U4IGJSZXF1ZXN0OworIF9fbGUxNiB3VmFsdWU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fbGUxNiB3SW5kZXg7CisgX19sZTE2IHdMZW5ndGg7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKyNkZWZpbmUgVVNCX0RUX0RFVklDRSAweDAxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBVU0JfRFRfQ09ORklHIDB4MDIKKyNkZWZpbmUgVVNCX0RUX1NUUklORyAweDAzCisjZGVmaW5lIFVTQl9EVF9JTlRFUkZBQ0UgMHgwNAorI2RlZmluZSBVU0JfRFRfRU5EUE9JTlQgMHgwNQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVVNCX0RUX0RFVklDRV9RVUFMSUZJRVIgMHgwNgorI2RlZmluZSBVU0JfRFRfT1RIRVJfU1BFRURfQ09ORklHIDB4MDcKKyNkZWZpbmUgVVNCX0RUX0lOVEVSRkFDRV9QT1dFUiAweDA4CisjZGVmaW5lIFVTQl9EVF9PVEcgMHgwOQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVVNCX0RUX0RFQlVHIDB4MGEKKyNkZWZpbmUgVVNCX0RUX0lOVEVSRkFDRV9BU1NPQ0lBVElPTiAweDBiCisjZGVmaW5lIFVTQl9EVF9TRUNVUklUWSAweDBjCisjZGVmaW5lIFVTQl9EVF9LRVkgMHgwZAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVVNCX0RUX0VOQ1JZUFRJT05fVFlQRSAweDBlCisjZGVmaW5lIFVTQl9EVF9CT1MgMHgwZgorI2RlZmluZSBVU0JfRFRfREVWSUNFX0NBUEFCSUxJVFkgMHgxMAorI2RlZmluZSBVU0JfRFRfV0lSRUxFU1NfRU5EUE9JTlRfQ09NUCAweDExCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBVU0JfRFRfV0lSRV9BREFQVEVSIDB4MjEKKyNkZWZpbmUgVVNCX0RUX1JQSVBFIDB4MjIKKyNkZWZpbmUgVVNCX0RUX0NTX1JBRElPX0NPTlRST0wgMHgyMworI2RlZmluZSBVU0JfRFRfUElQRV9VU0FHRSAweDI0CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBVU0JfRFRfU1NfRU5EUE9JTlRfQ09NUCAweDMwCisjZGVmaW5lIFVTQl9EVF9DU19ERVZJQ0UgKFVTQl9UWVBFX0NMQVNTIHwgVVNCX0RUX0RFVklDRSkKKyNkZWZpbmUgVVNCX0RUX0NTX0NPTkZJRyAoVVNCX1RZUEVfQ0xBU1MgfCBVU0JfRFRfQ09ORklHKQorI2RlZmluZSBVU0JfRFRfQ1NfU1RSSU5HIChVU0JfVFlQRV9DTEFTUyB8IFVTQl9EVF9TVFJJTkcpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBVU0JfRFRfQ1NfSU5URVJGQUNFIChVU0JfVFlQRV9DTEFTUyB8IFVTQl9EVF9JTlRFUkZBQ0UpCisjZGVmaW5lIFVTQl9EVF9DU19FTkRQT0lOVCAoVVNCX1RZUEVfQ0xBU1MgfCBVU0JfRFRfRU5EUE9JTlQpCitzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyIHsKKyBfX3U4IGJMZW5ndGg7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTggYkRlc2NyaXB0b3JUeXBlOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CitzdHJ1Y3QgdXNiX2RldmljZV9kZXNjcmlwdG9yIHsKKyBfX3U4IGJMZW5ndGg7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTggYkRlc2NyaXB0b3JUeXBlOworIF9fbGUxNiBiY2RVU0I7CisgX191OCBiRGV2aWNlQ2xhc3M7CisgX191OCBiRGV2aWNlU3ViQ2xhc3M7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTggYkRldmljZVByb3RvY29sOworIF9fdTggYk1heFBhY2tldFNpemUwOworIF9fbGUxNiBpZFZlbmRvcjsKKyBfX2xlMTYgaWRQcm9kdWN0OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX2xlMTYgYmNkRGV2aWNlOworIF9fdTggaU1hbnVmYWN0dXJlcjsKKyBfX3U4IGlQcm9kdWN0OworIF9fdTggaVNlcmlhbE51bWJlcjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191OCBiTnVtQ29uZmlndXJhdGlvbnM7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKyNkZWZpbmUgVVNCX0RUX0RFVklDRV9TSVpFIDE4CisjZGVmaW5lIFVTQl9DTEFTU19QRVJfSU5URVJGQUNFIDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFVTQl9DTEFTU19BVURJTyAxCisjZGVmaW5lIFVTQl9DTEFTU19DT01NIDIKKyNkZWZpbmUgVVNCX0NMQVNTX0hJRCAzCisjZGVmaW5lIFVTQl9DTEFTU19QSFlTSUNBTCA1CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBVU0JfQ0xBU1NfU1RJTExfSU1BR0UgNgorI2RlZmluZSBVU0JfQ0xBU1NfUFJJTlRFUiA3CisjZGVmaW5lIFVTQl9DTEFTU19NQVNTX1NUT1JBR0UgOAorI2RlZmluZSBVU0JfQ0xBU1NfSFVCIDkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFVTQl9DTEFTU19DRENfREFUQSAweDBhCisjZGVmaW5lIFVTQl9DTEFTU19DU0NJRCAweDBiCisjZGVmaW5lIFVTQl9DTEFTU19DT05URU5UX1NFQyAweDBkCisjZGVmaW5lIFVTQl9DTEFTU19WSURFTyAweDBlCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBVU0JfQ0xBU1NfV0lSRUxFU1NfQ09OVFJPTExFUiAweGUwCisjZGVmaW5lIFVTQl9DTEFTU19NSVNDIDB4ZWYKKyNkZWZpbmUgVVNCX0NMQVNTX0FQUF9TUEVDIDB4ZmUKKyNkZWZpbmUgVVNCX0NMQVNTX1ZFTkRPUl9TUEVDIDB4ZmYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFVTQl9TVUJDTEFTU19WRU5ET1JfU1BFQyAweGZmCitzdHJ1Y3QgdXNiX2NvbmZpZ19kZXNjcmlwdG9yIHsKKyBfX3U4IGJMZW5ndGg7CisgX191OCBiRGVzY3JpcHRvclR5cGU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fbGUxNiB3VG90YWxMZW5ndGg7CisgX191OCBiTnVtSW50ZXJmYWNlczsKKyBfX3U4IGJDb25maWd1cmF0aW9uVmFsdWU7CisgX191OCBpQ29uZmlndXJhdGlvbjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191OCBibUF0dHJpYnV0ZXM7CisgX191OCBiTWF4UG93ZXI7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKyNkZWZpbmUgVVNCX0RUX0NPTkZJR19TSVpFIDkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFVTQl9DT05GSUdfQVRUX09ORSAoMSA8PCA3KQorI2RlZmluZSBVU0JfQ09ORklHX0FUVF9TRUxGUE9XRVIgKDEgPDwgNikKKyNkZWZpbmUgVVNCX0NPTkZJR19BVFRfV0FLRVVQICgxIDw8IDUpCisjZGVmaW5lIFVTQl9DT05GSUdfQVRUX0JBVFRFUlkgKDEgPDwgNCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCitzdHJ1Y3QgdXNiX3N0cmluZ19kZXNjcmlwdG9yIHsKKyBfX3U4IGJMZW5ndGg7CisgX191OCBiRGVzY3JpcHRvclR5cGU7CisgX19sZTE2IHdEYXRhWzFdOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworc3RydWN0IHVzYl9pbnRlcmZhY2VfZGVzY3JpcHRvciB7CisgX191OCBiTGVuZ3RoOworIF9fdTggYkRlc2NyaXB0b3JUeXBlOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3U4IGJJbnRlcmZhY2VOdW1iZXI7CisgX191OCBiQWx0ZXJuYXRlU2V0dGluZzsKKyBfX3U4IGJOdW1FbmRwb2ludHM7CisgX191OCBiSW50ZXJmYWNlQ2xhc3M7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTggYkludGVyZmFjZVN1YkNsYXNzOworIF9fdTggYkludGVyZmFjZVByb3RvY29sOworIF9fdTggaUludGVyZmFjZTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVVNCX0RUX0lOVEVSRkFDRV9TSVpFIDkKK3N0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciB7CisgX191OCBiTGVuZ3RoOworIF9fdTggYkRlc2NyaXB0b3JUeXBlOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3U4IGJFbmRwb2ludEFkZHJlc3M7CisgX191OCBibUF0dHJpYnV0ZXM7CisgX19sZTE2IHdNYXhQYWNrZXRTaXplOworIF9fdTggYkludGVydmFsOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3U4IGJSZWZyZXNoOworIF9fdTggYlN5bmNoQWRkcmVzczsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworI2RlZmluZSBVU0JfRFRfRU5EUE9JTlRfU0laRSA3CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBVU0JfRFRfRU5EUE9JTlRfQVVESU9fU0laRSA5CisjZGVmaW5lIFVTQl9FTkRQT0lOVF9OVU1CRVJfTUFTSyAweDBmCisjZGVmaW5lIFVTQl9FTkRQT0lOVF9ESVJfTUFTSyAweDgwCisjZGVmaW5lIFVTQl9FTkRQT0lOVF9YRkVSVFlQRV9NQVNLIDB4MDMKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFVTQl9FTkRQT0lOVF9YRkVSX0NPTlRST0wgMAorI2RlZmluZSBVU0JfRU5EUE9JTlRfWEZFUl9JU09DIDEKKyNkZWZpbmUgVVNCX0VORFBPSU5UX1hGRVJfQlVMSyAyCisjZGVmaW5lIFVTQl9FTkRQT0lOVF9YRkVSX0lOVCAzCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBVU0JfRU5EUE9JTlRfTUFYX0FESlVTVEFCTEUgMHg4MAorI2RlZmluZSBVU0JfRU5EUE9JTlRfU1lOQ1RZUEUgMHgwYworI2RlZmluZSBVU0JfRU5EUE9JTlRfU1lOQ19OT05FICgwIDw8IDIpCisjZGVmaW5lIFVTQl9FTkRQT0lOVF9TWU5DX0FTWU5DICgxIDw8IDIpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBVU0JfRU5EUE9JTlRfU1lOQ19BREFQVElWRSAoMiA8PCAyKQorI2RlZmluZSBVU0JfRU5EUE9JTlRfU1lOQ19TWU5DICgzIDw8IDIpCisjZGVmaW5lIFVTQl9FTkRQT0lOVF9VU0FHRV9NQVNLIDB4MzAKKyNkZWZpbmUgVVNCX0VORFBPSU5UX1VTQUdFX0RBVEEgMHgwMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVVNCX0VORFBPSU5UX1VTQUdFX0ZFRURCQUNLIDB4MTAKKyNkZWZpbmUgVVNCX0VORFBPSU5UX1VTQUdFX0lNUExJQ0lUX0ZCIDB4MjAKK3N0cnVjdCB1c2Jfc3NfZXBfY29tcF9kZXNjcmlwdG9yIHsKKyBfX3U4IGJMZW5ndGg7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTggYkRlc2NyaXB0b3JUeXBlOworIF9fdTggYk1heEJ1cnN0OworIF9fdTggYm1BdHRyaWJ1dGVzOworIF9fbGUxNiB3Qnl0ZXNQZXJJbnRlcnZhbDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKyNkZWZpbmUgVVNCX0RUX1NTX0VQX0NPTVBfU0laRSA2CisjZGVmaW5lIFVTQl9TU19NVUxUKHApICgxICsgKChwKSAmIDB4MykpCitzdHJ1Y3QgdXNiX3F1YWxpZmllcl9kZXNjcmlwdG9yIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191OCBiTGVuZ3RoOworIF9fdTggYkRlc2NyaXB0b3JUeXBlOworIF9fbGUxNiBiY2RVU0I7CisgX191OCBiRGV2aWNlQ2xhc3M7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTggYkRldmljZVN1YkNsYXNzOworIF9fdTggYkRldmljZVByb3RvY29sOworIF9fdTggYk1heFBhY2tldFNpemUwOworIF9fdTggYk51bUNvbmZpZ3VyYXRpb25zOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3U4IGJSRVNFUlZFRDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworc3RydWN0IHVzYl9vdGdfZGVzY3JpcHRvciB7CisgX191OCBiTGVuZ3RoOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3U4IGJEZXNjcmlwdG9yVHlwZTsKKyBfX3U4IGJtQXR0cmlidXRlczsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworI2RlZmluZSBVU0JfT1RHX1NSUCAoMSA8PCAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVVNCX09UR19ITlAgKDEgPDwgMSkKK3N0cnVjdCB1c2JfZGVidWdfZGVzY3JpcHRvciB7CisgX191OCBiTGVuZ3RoOworIF9fdTggYkRlc2NyaXB0b3JUeXBlOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3U4IGJEZWJ1Z0luRW5kcG9pbnQ7CisgX191OCBiRGVidWdPdXRFbmRwb2ludDsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CitzdHJ1Y3QgdXNiX2ludGVyZmFjZV9hc3NvY19kZXNjcmlwdG9yIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191OCBiTGVuZ3RoOworIF9fdTggYkRlc2NyaXB0b3JUeXBlOworIF9fdTggYkZpcnN0SW50ZXJmYWNlOworIF9fdTggYkludGVyZmFjZUNvdW50OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3U4IGJGdW5jdGlvbkNsYXNzOworIF9fdTggYkZ1bmN0aW9uU3ViQ2xhc3M7CisgX191OCBiRnVuY3Rpb25Qcm90b2NvbDsKKyBfX3U4IGlGdW5jdGlvbjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKK3N0cnVjdCB1c2Jfc2VjdXJpdHlfZGVzY3JpcHRvciB7CisgX191OCBiTGVuZ3RoOworIF9fdTggYkRlc2NyaXB0b3JUeXBlOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX2xlMTYgd1RvdGFsTGVuZ3RoOworIF9fdTggYk51bUVuY3J5cHRpb25UeXBlczsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CitzdHJ1Y3QgdXNiX2tleV9kZXNjcmlwdG9yIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191OCBiTGVuZ3RoOworIF9fdTggYkRlc2NyaXB0b3JUeXBlOworIF9fdTggdFRLSURbM107CisgX191OCBiUmVzZXJ2ZWQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTggYktleURhdGFbMF07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworc3RydWN0IHVzYl9lbmNyeXB0aW9uX2Rlc2NyaXB0b3IgeworIF9fdTggYkxlbmd0aDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191OCBiRGVzY3JpcHRvclR5cGU7CisgX191OCBiRW5jcnlwdGlvblR5cGU7CisjZGVmaW5lIFVTQl9FTkNfVFlQRV9VTlNFQ1VSRSAwCisjZGVmaW5lIFVTQl9FTkNfVFlQRV9XSVJFRCAxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBVU0JfRU5DX1RZUEVfQ0NNXzEgMgorI2RlZmluZSBVU0JfRU5DX1RZUEVfUlNBXzEgMworIF9fdTggYkVuY3J5cHRpb25WYWx1ZTsKKyBfX3U4IGJBdXRoS2V5SW5kZXg7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKK3N0cnVjdCB1c2JfYm9zX2Rlc2NyaXB0b3IgeworIF9fdTggYkxlbmd0aDsKKyBfX3U4IGJEZXNjcmlwdG9yVHlwZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX19sZTE2IHdUb3RhbExlbmd0aDsKKyBfX3U4IGJOdW1EZXZpY2VDYXBzOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKyNkZWZpbmUgVVNCX0RUX0JPU19TSVpFIDUKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCitzdHJ1Y3QgdXNiX2Rldl9jYXBfaGVhZGVyIHsKKyBfX3U4IGJMZW5ndGg7CisgX191OCBiRGVzY3JpcHRvclR5cGU7CisgX191OCBiRGV2Q2FwYWJpbGl0eVR5cGU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKyNkZWZpbmUgVVNCX0NBUF9UWVBFX1dJUkVMRVNTX1VTQiAxCitzdHJ1Y3QgdXNiX3dpcmVsZXNzX2NhcF9kZXNjcmlwdG9yIHsKKyBfX3U4IGJMZW5ndGg7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTggYkRlc2NyaXB0b3JUeXBlOworIF9fdTggYkRldkNhcGFiaWxpdHlUeXBlOworIF9fdTggYm1BdHRyaWJ1dGVzOworI2RlZmluZSBVU0JfV0lSRUxFU1NfUDJQX0RSRCAoMSA8PCAxKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVVNCX1dJUkVMRVNTX0JFQUNPTl9NQVNLICgzIDw8IDIpCisjZGVmaW5lIFVTQl9XSVJFTEVTU19CRUFDT05fU0VMRiAoMSA8PCAyKQorI2RlZmluZSBVU0JfV0lSRUxFU1NfQkVBQ09OX0RJUkVDVEVEICgyIDw8IDIpCisjZGVmaW5lIFVTQl9XSVJFTEVTU19CRUFDT05fTk9ORSAoMyA8PCAyKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX2xlMTYgd1BIWVJhdGVzOworI2RlZmluZSBVU0JfV0lSRUxFU1NfUEhZXzUzICgxIDw8IDApCisjZGVmaW5lIFVTQl9XSVJFTEVTU19QSFlfODAgKDEgPDwgMSkKKyNkZWZpbmUgVVNCX1dJUkVMRVNTX1BIWV8xMDcgKDEgPDwgMikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFVTQl9XSVJFTEVTU19QSFlfMTYwICgxIDw8IDMpCisjZGVmaW5lIFVTQl9XSVJFTEVTU19QSFlfMjAwICgxIDw8IDQpCisjZGVmaW5lIFVTQl9XSVJFTEVTU19QSFlfMzIwICgxIDw8IDUpCisjZGVmaW5lIFVTQl9XSVJFTEVTU19QSFlfNDAwICgxIDw8IDYpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBVU0JfV0lSRUxFU1NfUEhZXzQ4MCAoMSA8PCA3KQorIF9fdTggYm1URklUWFBvd2VySW5mbzsKKyBfX3U4IGJtRkZJVFhQb3dlckluZm87CisgX19sZTE2IGJtQmFuZEdyb3VwOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3U4IGJSZXNlcnZlZDsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisjZGVmaW5lIFVTQl9DQVBfVFlQRV9FWFQgMgorc3RydWN0IHVzYl9leHRfY2FwX2Rlc2NyaXB0b3IgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3U4IGJMZW5ndGg7CisgX191OCBiRGVzY3JpcHRvclR5cGU7CisgX191OCBiRGV2Q2FwYWJpbGl0eVR5cGU7CisgX19sZTMyIGJtQXR0cmlidXRlczsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFVTQl9MUE1fU1VQUE9SVCAoMSA8PCAxKQorfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKyNkZWZpbmUgVVNCX0RUX1VTQl9FWFRfQ0FQX1NJWkUgNworI2RlZmluZSBVU0JfU1NfQ0FQX1RZUEUgMworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK3N0cnVjdCB1c2Jfc3NfY2FwX2Rlc2NyaXB0b3IgeworIF9fdTggYkxlbmd0aDsKKyBfX3U4IGJEZXNjcmlwdG9yVHlwZTsKKyBfX3U4IGJEZXZDYXBhYmlsaXR5VHlwZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191OCBibUF0dHJpYnV0ZXM7CisjZGVmaW5lIFVTQl9MVE1fU1VQUE9SVCAoMSA8PCAxKQorIF9fbGUxNiB3U3BlZWRTdXBwb3J0ZWQ7CisjZGVmaW5lIFVTQl9MT1dfU1BFRURfT1BFUkFUSU9OICgxKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVVNCX0ZVTExfU1BFRURfT1BFUkFUSU9OICgxIDw8IDEpCisjZGVmaW5lIFVTQl9ISUdIX1NQRUVEX09QRVJBVElPTiAoMSA8PCAyKQorI2RlZmluZSBVU0JfNUdCUFNfT1BFUkFUSU9OICgxIDw8IDMpCisgX191OCBiRnVuY3Rpb25hbGl0eVN1cHBvcnQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTggYlUxZGV2RXhpdExhdDsKKyBfX2xlMTYgYlUyRGV2RXhpdExhdDsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisjZGVmaW5lIFVTQl9EVF9VU0JfU1NfQ0FQX1NJWkUgMTAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIENPTlRBSU5FUl9JRF9UWVBFIDQKK3N0cnVjdCB1c2Jfc3NfY29udGFpbmVyX2lkX2Rlc2NyaXB0b3IgeworIF9fdTggYkxlbmd0aDsKKyBfX3U4IGJEZXNjcmlwdG9yVHlwZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191OCBiRGV2Q2FwYWJpbGl0eVR5cGU7CisgX191OCBiUmVzZXJ2ZWQ7CisgX191OCBDb250YWluZXJJRFsxNl07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVVNCX0RUX1VTQl9TU19DT05UTl9JRF9TSVpFIDIwCitzdHJ1Y3QgdXNiX3dpcmVsZXNzX2VwX2NvbXBfZGVzY3JpcHRvciB7CisgX191OCBiTGVuZ3RoOworIF9fdTggYkRlc2NyaXB0b3JUeXBlOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3U4IGJNYXhCdXJzdDsKKyBfX3U4IGJNYXhTZXF1ZW5jZTsKKyBfX2xlMTYgd01heFN0cmVhbURlbGF5OworIF9fbGUxNiB3T3ZlclRoZUFpclBhY2tldFNpemU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTggYk92ZXJUaGVBaXJJbnRlcnZhbDsKKyBfX3U4IGJtQ29tcEF0dHJpYnV0ZXM7CisjZGVmaW5lIFVTQl9FTkRQT0lOVF9TV0lUQ0hfTUFTSyAweDAzCisjZGVmaW5lIFVTQl9FTkRQT0lOVF9TV0lUQ0hfTk8gMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVVNCX0VORFBPSU5UX1NXSVRDSF9TV0lUQ0ggMQorI2RlZmluZSBVU0JfRU5EUE9JTlRfU1dJVENIX1NDQUxFIDIKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CitzdHJ1Y3QgdXNiX2hhbmRzaGFrZSB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTggYk1lc3NhZ2VOdW1iZXI7CisgX191OCBiU3RhdHVzOworIF9fdTggdFRLSURbM107CisgX191OCBiUmVzZXJ2ZWQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTggQ0RJRFsxNl07CisgX191OCBub25jZVsxNl07CisgX191OCBNSUNbOF07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK3N0cnVjdCB1c2JfY29ubmVjdGlvbl9jb250ZXh0IHsKKyBfX3U4IENISURbMTZdOworIF9fdTggQ0RJRFsxNl07CisgX191OCBDS1sxNl07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKK2VudW0gdXNiX2RldmljZV9zcGVlZCB7CisgVVNCX1NQRUVEX1VOS05PV04gPSAwLAorIFVTQl9TUEVFRF9MT1csIFVTQl9TUEVFRF9GVUxMLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBVU0JfU1BFRURfSElHSCwKKyBVU0JfU1BFRURfV0lSRUxFU1MsCisgVVNCX1NQRUVEX1NVUEVSLAorfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCitlbnVtIHVzYl9kZXZpY2Vfc3RhdGUgeworIFVTQl9TVEFURV9OT1RBVFRBQ0hFRCA9IDAsCisgVVNCX1NUQVRFX0FUVEFDSEVELAorIFVTQl9TVEFURV9QT1dFUkVELAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBVU0JfU1RBVEVfUkVDT05ORUNUSU5HLAorIFVTQl9TVEFURV9VTkFVVEhFTlRJQ0FURUQsCisgVVNCX1NUQVRFX0RFRkFVTFQsCisgVVNCX1NUQVRFX0FERFJFU1MsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIFVTQl9TVEFURV9DT05GSUdVUkVELAorIFVTQl9TVEFURV9TVVNQRU5ERUQKK307CisjZGVmaW5lIFVTQl9TRUxGX1BPV0VSX1ZCVVNfTUFYX0RSQVcgMTAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvdXNiL2ZfYWNjZXNzb3J5LmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvdXNiL2ZfYWNjZXNzb3J5LmgKaW5kZXggOTczNDZiNy4uZTkyMWEzYiAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3VzYi9mX2FjY2Vzc29yeS5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC91c2IvZl9hY2Nlc3NvcnkuaApAQCAtMzAsMTUgKzMwLDI0IEBACiAjZGVmaW5lIEFDQ0VTU09SWV9TVFJJTkdfVVJJIDQKICNkZWZpbmUgQUNDRVNTT1JZX1NUUklOR19TRVJJQUwgNQogI2RlZmluZSBBQ0NFU1NPUllfR0VUX1BST1RPQ09MIDUxCi0jZGVmaW5lIEFDQ0VTU09SWV9TRU5EX1NUUklORyA1MgogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgQUNDRVNTT1JZX1NFTkRfU1RSSU5HIDUyCiAjZGVmaW5lIEFDQ0VTU09SWV9TVEFSVCA1MworI2RlZmluZSBBQ0NFU1NPUllfUkVHSVNURVJfSElEIDU0CisjZGVmaW5lIEFDQ0VTU09SWV9VTlJFR0lTVEVSX0hJRCA1NQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgQUNDRVNTT1JZX1NFVF9ISURfUkVQT1JUX0RFU0MgNTYKKyNkZWZpbmUgQUNDRVNTT1JZX1NFTkRfSElEX0VWRU5UIDU3CisjZGVmaW5lIEFDQ0VTU09SWV9TRVRfQVVESU9fTU9ERSA1OAogI2RlZmluZSBBQ0NFU1NPUllfR0VUX1NUUklOR19NQU5VRkFDVFVSRVIgX0lPVygnTScsIDEsIGNoYXJbMjU2XSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIEFDQ0VTU09SWV9HRVRfU1RSSU5HX01PREVMIF9JT1coJ00nLCAyLCBjaGFyWzI1Nl0pCiAjZGVmaW5lIEFDQ0VTU09SWV9HRVRfU1RSSU5HX0RFU0NSSVBUSU9OIF9JT1coJ00nLCAzLCBjaGFyWzI1Nl0pCi0vKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBBQ0NFU1NPUllfR0VUX1NUUklOR19WRVJTSU9OIF9JT1coJ00nLCA0LCBjaGFyWzI1Nl0pCiAjZGVmaW5lIEFDQ0VTU09SWV9HRVRfU1RSSU5HX1VSSSBfSU9XKCdNJywgNSwgY2hhclsyNTZdKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgQUNDRVNTT1JZX0dFVF9TVFJJTkdfU0VSSUFMIF9JT1coJ00nLCA2LCBjaGFyWzI1Nl0pCiAjZGVmaW5lIEFDQ0VTU09SWV9JU19TVEFSVF9SRVFVRVNURUQgX0lPKCdNJywgNykKKyNkZWZpbmUgQUNDRVNTT1JZX0dFVF9BVURJT19NT0RFIF9JTygnTScsIDgpCiAjZW5kaWYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvdXNiL2Z1bmN0aW9uZnMuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC91c2IvZnVuY3Rpb25mcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExZThkNGMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvdXNiL2Z1bmN0aW9uZnMuaApAQCAtMCwwICsxLDgxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fTElOVVhfRlVOQ1RJT05GU19IX18KKyNkZWZpbmUgX19MSU5VWF9GVU5DVElPTkZTX0hfXyAxCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNpbmNsdWRlIDxsaW51eC91c2IvY2g5Lmg+CitlbnVtIHsKKyBGVU5DVElPTkZTX0RFU0NSSVBUT1JTX01BR0lDID0gMSwKKyBGVU5DVElPTkZTX1NUUklOR1NfTUFHSUMgPSAyCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworfTsKK3N0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvcl9ub19hdWRpbyB7CisgX191OCBiTGVuZ3RoOworIF9fdTggYkRlc2NyaXB0b3JUeXBlOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3U4IGJFbmRwb2ludEFkZHJlc3M7CisgX191OCBibUF0dHJpYnV0ZXM7CisgX19sZTE2IHdNYXhQYWNrZXRTaXplOworIF9fdTggYkludGVydmFsOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CitzdHJ1Y3QgdXNiX2Z1bmN0aW9uZnNfZGVzY3NfaGVhZCB7CisgX19sZTMyIG1hZ2ljOworIF9fbGUzMiBsZW5ndGg7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fbGUzMiBmc19jb3VudDsKKyBfX2xlMzIgaHNfY291bnQ7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworc3RydWN0IHVzYl9mdW5jdGlvbmZzX3N0cmluZ3NfaGVhZCB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fbGUzMiBtYWdpYzsKKyBfX2xlMzIgbGVuZ3RoOworIF9fbGUzMiBzdHJfY291bnQ7CisgX19sZTMyIGxhbmdfY291bnQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKK2VudW0gdXNiX2Z1bmN0aW9uZnNfZXZlbnRfdHlwZSB7CisgRlVOQ1RJT05GU19CSU5ELAorIEZVTkNUSU9ORlNfVU5CSU5ELAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBGVU5DVElPTkZTX0VOQUJMRSwKKyBGVU5DVElPTkZTX0RJU0FCTEUsCisgRlVOQ1RJT05GU19TRVRVUCwKKyBGVU5DVElPTkZTX1NVU1BFTkQsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIEZVTkNUSU9ORlNfUkVTVU1FCit9Oworc3RydWN0IHVzYl9mdW5jdGlvbmZzX2V2ZW50IHsKKyB1bmlvbiB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIHN0cnVjdCB1c2JfY3RybHJlcXVlc3Qgc2V0dXA7CisgfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSB1OworIF9fdTggdHlwZTsKKyBfX3U4IF9wYWRbM107CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKyNkZWZpbmUgRlVOQ1RJT05GU19GSUZPX1NUQVRVUyBfSU8oJ2cnLCAxKQorI2RlZmluZSBGVU5DVElPTkZTX0ZJRk9fRkxVU0ggX0lPKCdnJywgMikKKyNkZWZpbmUgRlVOQ1RJT05GU19DTEVBUl9IQUxUIF9JTygnZycsIDMpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBGVU5DVElPTkZTX0lOVEVSRkFDRV9SRVZNQVAgX0lPKCdnJywgMTI4KQorI2RlZmluZSBGVU5DVElPTkZTX0VORFBPSU5UX1JFVk1BUCBfSU8oJ2cnLCAxMjkpCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC91c2JfY2g5LmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvdXNiX2NoOS5oCmluZGV4IDc0ZTMxZTcuLmRmZGQwY2MgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC91c2JfY2g5LmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3VzYl9jaDkuaApAQCAtNywzODIgKzcsNDAwIEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfX0xJTlVYX1VTQl9DSDlfSAogI2RlZmluZSBfX0xJTlVYX1VTQl9DSDlfSAotCi0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4gIAotCi0jZGVmaW5lIFVTQl9ESVJfT1VUIDAgIAotI2RlZmluZSBVU0JfRElSX0lOIDB4ODAgIAotCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNkZWZpbmUgVVNCX0RJUl9PVVQgMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVVNCX0RJUl9JTiAweDgwCiAjZGVmaW5lIFVTQl9UWVBFX01BU0sgKDB4MDMgPDwgNSkKICNkZWZpbmUgVVNCX1RZUEVfU1RBTkRBUkQgKDB4MDAgPDwgNSkKICNkZWZpbmUgVVNCX1RZUEVfQ0xBU1MgKDB4MDEgPDwgNSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFVTQl9UWVBFX1ZFTkRPUiAoMHgwMiA8PCA1KQogI2RlZmluZSBVU0JfVFlQRV9SRVNFUlZFRCAoMHgwMyA8PCA1KQotCiAjZGVmaW5lIFVTQl9SRUNJUF9NQVNLIDB4MWYKICNkZWZpbmUgVVNCX1JFQ0lQX0RFVklDRSAweDAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBVU0JfUkVDSVBfSU5URVJGQUNFIDB4MDEKICNkZWZpbmUgVVNCX1JFQ0lQX0VORFBPSU5UIDB4MDIKICNkZWZpbmUgVVNCX1JFQ0lQX09USEVSIDB4MDMKLQogI2RlZmluZSBVU0JfUkVDSVBfUE9SVCAweDA0CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBVU0JfUkVDSVBfUlBJUEUgMHgwNQotCiAjZGVmaW5lIFVTQl9SRVFfR0VUX1NUQVRVUyAweDAwCiAjZGVmaW5lIFVTQl9SRVFfQ0xFQVJfRkVBVFVSRSAweDAxCiAjZGVmaW5lIFVTQl9SRVFfU0VUX0ZFQVRVUkUgMHgwMworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVVNCX1JFUV9TRVRfQUREUkVTUyAweDA1CiAjZGVmaW5lIFVTQl9SRVFfR0VUX0RFU0NSSVBUT1IgMHgwNgogI2RlZmluZSBVU0JfUkVRX1NFVF9ERVNDUklQVE9SIDB4MDcKICNkZWZpbmUgVVNCX1JFUV9HRVRfQ09ORklHVVJBVElPTiAweDA4CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBVU0JfUkVRX1NFVF9DT05GSUdVUkFUSU9OIDB4MDkKICNkZWZpbmUgVVNCX1JFUV9HRVRfSU5URVJGQUNFIDB4MEEKICNkZWZpbmUgVVNCX1JFUV9TRVRfSU5URVJGQUNFIDB4MEIKICNkZWZpbmUgVVNCX1JFUV9TWU5DSF9GUkFNRSAweDBDCi0KLSNkZWZpbmUgVVNCX1JFUV9TRVRfRU5DUllQVElPTiAweDBEICAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFVTQl9SRVFfU0VUX0VOQ1JZUFRJT04gMHgwRAogI2RlZmluZSBVU0JfUkVRX0dFVF9FTkNSWVBUSU9OIDB4MEUKICNkZWZpbmUgVVNCX1JFUV9SUElQRV9BQk9SVCAweDBFCiAjZGVmaW5lIFVTQl9SRVFfU0VUX0hBTkRTSEFLRSAweDBGCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBVU0JfUkVRX1JQSVBFX1JFU0VUIDB4MEYKICNkZWZpbmUgVVNCX1JFUV9HRVRfSEFORFNIQUtFIDB4MTAKICNkZWZpbmUgVVNCX1JFUV9TRVRfQ09OTkVDVElPTiAweDExCiAjZGVmaW5lIFVTQl9SRVFfU0VUX1NFQ1VSSVRZX0RBVEEgMHgxMgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVVNCX1JFUV9HRVRfU0VDVVJJVFlfREFUQSAweDEzCiAjZGVmaW5lIFVTQl9SRVFfU0VUX1dVU0JfREFUQSAweDE0CiAjZGVmaW5lIFVTQl9SRVFfTE9PUEJBQ0tfREFUQV9XUklURSAweDE1CiAjZGVmaW5lIFVTQl9SRVFfTE9PUEJBQ0tfREFUQV9SRUFEIDB4MTYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFVTQl9SRVFfU0VUX0lOVEVSRkFDRV9EUyAweDE3Ci0KLSNkZWZpbmUgVVNCX0RFVklDRV9TRUxGX1BPV0VSRUQgMCAgCi0jZGVmaW5lIFVTQl9ERVZJQ0VfUkVNT1RFX1dBS0VVUCAxICAKLSNkZWZpbmUgVVNCX0RFVklDRV9URVNUX01PREUgMiAgCi0jZGVmaW5lIFVTQl9ERVZJQ0VfQkFUVEVSWSAyICAKLSNkZWZpbmUgVVNCX0RFVklDRV9CX0hOUF9FTkFCTEUgMyAgCi0jZGVmaW5lIFVTQl9ERVZJQ0VfV1VTQl9ERVZJQ0UgMyAgCi0jZGVmaW5lIFVTQl9ERVZJQ0VfQV9ITlBfU1VQUE9SVCA0ICAKLSNkZWZpbmUgVVNCX0RFVklDRV9BX0FMVF9ITlBfU1VQUE9SVCA1ICAKLSNkZWZpbmUgVVNCX0RFVklDRV9ERUJVR19NT0RFIDYgIAotCi0jZGVmaW5lIFVTQl9FTkRQT0lOVF9IQUxUIDAgIAotCisjZGVmaW5lIFVTQl9ERVZJQ0VfU0VMRl9QT1dFUkVEIDAKKyNkZWZpbmUgVVNCX0RFVklDRV9SRU1PVEVfV0FLRVVQIDEKKyNkZWZpbmUgVVNCX0RFVklDRV9URVNUX01PREUgMgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVVNCX0RFVklDRV9CQVRURVJZIDIKKyNkZWZpbmUgVVNCX0RFVklDRV9CX0hOUF9FTkFCTEUgMworI2RlZmluZSBVU0JfREVWSUNFX1dVU0JfREVWSUNFIDMKKyNkZWZpbmUgVVNCX0RFVklDRV9BX0hOUF9TVVBQT1JUIDQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFVTQl9ERVZJQ0VfQV9BTFRfSE5QX1NVUFBPUlQgNQorI2RlZmluZSBVU0JfREVWSUNFX0RFQlVHX01PREUgNgorI2RlZmluZSBVU0JfRU5EUE9JTlRfSEFMVCAwCiBzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0IHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191OCBiUmVxdWVzdFR5cGU7CiAgX191OCBiUmVxdWVzdDsKICBfX2xlMTYgd1ZhbHVlOwogIF9fbGUxNiB3SW5kZXg7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fbGUxNiB3TGVuZ3RoOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KICNkZWZpbmUgVVNCX0RUX0RFVklDRSAweDAxCiAjZGVmaW5lIFVTQl9EVF9DT05GSUcgMHgwMgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVVNCX0RUX1NUUklORyAweDAzCiAjZGVmaW5lIFVTQl9EVF9JTlRFUkZBQ0UgMHgwNAogI2RlZmluZSBVU0JfRFRfRU5EUE9JTlQgMHgwNQogI2RlZmluZSBVU0JfRFRfREVWSUNFX1FVQUxJRklFUiAweDA2CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBVU0JfRFRfT1RIRVJfU1BFRURfQ09ORklHIDB4MDcKICNkZWZpbmUgVVNCX0RUX0lOVEVSRkFDRV9QT1dFUiAweDA4Ci0KICNkZWZpbmUgVVNCX0RUX09URyAweDA5CiAjZGVmaW5lIFVTQl9EVF9ERUJVRyAweDBhCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBVU0JfRFRfSU5URVJGQUNFX0FTU09DSUFUSU9OIDB4MGIKLQogI2RlZmluZSBVU0JfRFRfU0VDVVJJVFkgMHgwYwogI2RlZmluZSBVU0JfRFRfS0VZIDB4MGQKICNkZWZpbmUgVVNCX0RUX0VOQ1JZUFRJT05fVFlQRSAweDBlCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBVU0JfRFRfQk9TIDB4MGYKICNkZWZpbmUgVVNCX0RUX0RFVklDRV9DQVBBQklMSVRZIDB4MTAKICNkZWZpbmUgVVNCX0RUX1dJUkVMRVNTX0VORFBPSU5UX0NPTVAgMHgxMQogI2RlZmluZSBVU0JfRFRfV0lSRV9BREFQVEVSIDB4MjEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFVTQl9EVF9SUElQRSAweDIyCi0KICNkZWZpbmUgVVNCX0RUX0NTX0RFVklDRSAweDIxCiAjZGVmaW5lIFVTQl9EVF9DU19DT05GSUcgMHgyMgogI2RlZmluZSBVU0JfRFRfQ1NfU1RSSU5HIDB4MjMKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFVTQl9EVF9DU19JTlRFUkZBQ0UgMHgyNAogI2RlZmluZSBVU0JfRFRfQ1NfRU5EUE9JTlQgMHgyNQotCiBzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyIHsKICBfX3U4IGJMZW5ndGg7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTggYkRlc2NyaXB0b3JUeXBlOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KIHN0cnVjdCB1c2JfZGV2aWNlX2Rlc2NyaXB0b3IgewogIF9fdTggYkxlbmd0aDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191OCBiRGVzY3JpcHRvclR5cGU7Ci0KICBfX2xlMTYgYmNkVVNCOwogIF9fdTggYkRldmljZUNsYXNzOwogIF9fdTggYkRldmljZVN1YkNsYXNzOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IGJEZXZpY2VQcm90b2NvbDsKICBfX3U4IGJNYXhQYWNrZXRTaXplMDsKICBfX2xlMTYgaWRWZW5kb3I7CiAgX19sZTE2IGlkUHJvZHVjdDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX19sZTE2IGJjZERldmljZTsKICBfX3U4IGlNYW51ZmFjdHVyZXI7CiAgX191OCBpUHJvZHVjdDsKICBfX3U4IGlTZXJpYWxOdW1iZXI7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTggYk51bUNvbmZpZ3VyYXRpb25zOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KICNkZWZpbmUgVVNCX0RUX0RFVklDRV9TSVpFIDE4Ci0KLSNkZWZpbmUgVVNCX0NMQVNTX1BFUl9JTlRFUkZBQ0UgMCAgCisjZGVmaW5lIFVTQl9DTEFTU19QRVJfSU5URVJGQUNFIDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFVTQl9DTEFTU19BVURJTyAxCiAjZGVmaW5lIFVTQl9DTEFTU19DT01NIDIKICNkZWZpbmUgVVNCX0NMQVNTX0hJRCAzCiAjZGVmaW5lIFVTQl9DTEFTU19QSFlTSUNBTCA1CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBVU0JfQ0xBU1NfU1RJTExfSU1BR0UgNgogI2RlZmluZSBVU0JfQ0xBU1NfUFJJTlRFUiA3CiAjZGVmaW5lIFVTQl9DTEFTU19NQVNTX1NUT1JBR0UgOAogI2RlZmluZSBVU0JfQ0xBU1NfSFVCIDkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFVTQl9DTEFTU19DRENfREFUQSAweDBhCi0jZGVmaW5lIFVTQl9DTEFTU19DU0NJRCAweDBiICAKLSNkZWZpbmUgVVNCX0NMQVNTX0NPTlRFTlRfU0VDIDB4MGQgIAorI2RlZmluZSBVU0JfQ0xBU1NfQ1NDSUQgMHgwYgorI2RlZmluZSBVU0JfQ0xBU1NfQ09OVEVOVF9TRUMgMHgwZAogI2RlZmluZSBVU0JfQ0xBU1NfVklERU8gMHgwZQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVVNCX0NMQVNTX1dJUkVMRVNTX0NPTlRST0xMRVIgMHhlMAogI2RlZmluZSBVU0JfQ0xBU1NfQVBQX1NQRUMgMHhmZQogI2RlZmluZSBVU0JfQ0xBU1NfVkVORE9SX1NQRUMgMHhmZgotCiBzdHJ1Y3QgdXNiX2NvbmZpZ19kZXNjcmlwdG9yIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191OCBiTGVuZ3RoOwogIF9fdTggYkRlc2NyaXB0b3JUeXBlOwotCiAgX19sZTE2IHdUb3RhbExlbmd0aDsKICBfX3U4IGJOdW1JbnRlcmZhY2VzOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IGJDb25maWd1cmF0aW9uVmFsdWU7CiAgX191OCBpQ29uZmlndXJhdGlvbjsKICBfX3U4IGJtQXR0cmlidXRlczsKICBfX3U4IGJNYXhQb3dlcjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQogI2RlZmluZSBVU0JfRFRfQ09ORklHX1NJWkUgOQotCi0jZGVmaW5lIFVTQl9DT05GSUdfQVRUX09ORSAoMSA8PCA3KSAgCi0jZGVmaW5lIFVTQl9DT05GSUdfQVRUX1NFTEZQT1dFUiAoMSA8PCA2KSAgCi0jZGVmaW5lIFVTQl9DT05GSUdfQVRUX1dBS0VVUCAoMSA8PCA1KSAgCi0jZGVmaW5lIFVTQl9DT05GSUdfQVRUX0JBVFRFUlkgKDEgPDwgNCkgIAotCisjZGVmaW5lIFVTQl9DT05GSUdfQVRUX09ORSAoMSA8PCA3KQorI2RlZmluZSBVU0JfQ09ORklHX0FUVF9TRUxGUE9XRVIgKDEgPDwgNikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFVTQl9DT05GSUdfQVRUX1dBS0VVUCAoMSA8PCA1KQorI2RlZmluZSBVU0JfQ09ORklHX0FUVF9CQVRURVJZICgxIDw8IDQpCiBzdHJ1Y3QgdXNiX3N0cmluZ19kZXNjcmlwdG9yIHsKICBfX3U4IGJMZW5ndGg7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTggYkRlc2NyaXB0b3JUeXBlOwotCiAgX19sZTE2IHdEYXRhWzFdOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KIHN0cnVjdCB1c2JfaW50ZXJmYWNlX2Rlc2NyaXB0b3IgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IGJMZW5ndGg7CiAgX191OCBiRGVzY3JpcHRvclR5cGU7Ci0KICBfX3U4IGJJbnRlcmZhY2VOdW1iZXI7CiAgX191OCBiQWx0ZXJuYXRlU2V0dGluZzsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191OCBiTnVtRW5kcG9pbnRzOwogIF9fdTggYkludGVyZmFjZUNsYXNzOwogIF9fdTggYkludGVyZmFjZVN1YkNsYXNzOwogIF9fdTggYkludGVyZmFjZVByb3RvY29sOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IGlJbnRlcmZhY2U7CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQogI2RlZmluZSBVU0JfRFRfSU5URVJGQUNFX1NJWkUgOQotCiBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IGJMZW5ndGg7CiAgX191OCBiRGVzY3JpcHRvclR5cGU7Ci0KICBfX3U4IGJFbmRwb2ludEFkZHJlc3M7CiAgX191OCBibUF0dHJpYnV0ZXM7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fbGUxNiB3TWF4UGFja2V0U2l6ZTsKICBfX3U4IGJJbnRlcnZhbDsKLQogIF9fdTggYlJlZnJlc2g7CiAgX191OCBiU3luY2hBZGRyZXNzOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCiAjZGVmaW5lIFVTQl9EVF9FTkRQT0lOVF9TSVpFIDcKLSNkZWZpbmUgVVNCX0RUX0VORFBPSU5UX0FVRElPX1NJWkUgOSAgCi0KLSNkZWZpbmUgVVNCX0VORFBPSU5UX05VTUJFUl9NQVNLIDB4MGYgIAorI2RlZmluZSBVU0JfRFRfRU5EUE9JTlRfQVVESU9fU0laRSA5CisjZGVmaW5lIFVTQl9FTkRQT0lOVF9OVU1CRVJfTUFTSyAweDBmCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBVU0JfRU5EUE9JTlRfRElSX01BU0sgMHg4MAotCi0jZGVmaW5lIFVTQl9FTkRQT0lOVF9YRkVSVFlQRV9NQVNLIDB4MDMgIAorI2RlZmluZSBVU0JfRU5EUE9JTlRfWEZFUlRZUEVfTUFTSyAweDAzCiAjZGVmaW5lIFVTQl9FTkRQT0lOVF9YRkVSX0NPTlRST0wgMAogI2RlZmluZSBVU0JfRU5EUE9JTlRfWEZFUl9JU09DIDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFVTQl9FTkRQT0lOVF9YRkVSX0JVTEsgMgogI2RlZmluZSBVU0JfRU5EUE9JTlRfWEZFUl9JTlQgMwogI2RlZmluZSBVU0JfRU5EUE9JTlRfTUFYX0FESlVTVEFCTEUgMHg4MAotCiBzdHJ1Y3QgdXNiX3F1YWxpZmllcl9kZXNjcmlwdG9yIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191OCBiTGVuZ3RoOwogIF9fdTggYkRlc2NyaXB0b3JUeXBlOwotCiAgX19sZTE2IGJjZFVTQjsKICBfX3U4IGJEZXZpY2VDbGFzczsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191OCBiRGV2aWNlU3ViQ2xhc3M7CiAgX191OCBiRGV2aWNlUHJvdG9jb2w7CiAgX191OCBiTWF4UGFja2V0U2l6ZTA7CiAgX191OCBiTnVtQ29uZmlndXJhdGlvbnM7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTggYlJFU0VSVkVEOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KIHN0cnVjdCB1c2Jfb3RnX2Rlc2NyaXB0b3IgewogIF9fdTggYkxlbmd0aDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191OCBiRGVzY3JpcHRvclR5cGU7Ci0KICBfX3U4IGJtQXR0cmlidXRlczsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCiAjZGVmaW5lIFVTQl9PVEdfU1JQICgxIDw8IDApCi0jZGVmaW5lIFVTQl9PVEdfSE5QICgxIDw8IDEpICAKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVVNCX09UR19ITlAgKDEgPDwgMSkKIHN0cnVjdCB1c2JfZGVidWdfZGVzY3JpcHRvciB7CiAgX191OCBiTGVuZ3RoOwogIF9fdTggYkRlc2NyaXB0b3JUeXBlOwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTggYkRlYnVnSW5FbmRwb2ludDsKICBfX3U4IGJEZWJ1Z091dEVuZHBvaW50OwogfTsKLQogc3RydWN0IHVzYl9pbnRlcmZhY2VfYXNzb2NfZGVzY3JpcHRvciB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTggYkxlbmd0aDsKICBfX3U4IGJEZXNjcmlwdG9yVHlwZTsKLQogIF9fdTggYkZpcnN0SW50ZXJmYWNlOwogIF9fdTggYkludGVyZmFjZUNvdW50OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IGJGdW5jdGlvbkNsYXNzOwogIF9fdTggYkZ1bmN0aW9uU3ViQ2xhc3M7CiAgX191OCBiRnVuY3Rpb25Qcm90b2NvbDsKICBfX3U4IGlGdW5jdGlvbjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQogc3RydWN0IHVzYl9zZWN1cml0eV9kZXNjcmlwdG9yIHsKICBfX3U4IGJMZW5ndGg7CiAgX191OCBiRGVzY3JpcHRvclR5cGU7Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX19sZTE2IHdUb3RhbExlbmd0aDsKICBfX3U4IGJOdW1FbmNyeXB0aW9uVHlwZXM7CiB9OwotCiBzdHJ1Y3QgdXNiX2tleV9kZXNjcmlwdG9yIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191OCBiTGVuZ3RoOwogIF9fdTggYkRlc2NyaXB0b3JUeXBlOwotCiAgX191OCB0VEtJRFszXTsKICBfX3U4IGJSZXNlcnZlZDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191OCBiS2V5RGF0YVswXTsKIH07Ci0KIHN0cnVjdCB1c2JfZW5jcnlwdGlvbl9kZXNjcmlwdG9yIHsKICBfX3U4IGJMZW5ndGg7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTggYkRlc2NyaXB0b3JUeXBlOwotCiAgX191OCBiRW5jcnlwdGlvblR5cGU7CiAjZGVmaW5lIFVTQl9FTkNfVFlQRV9VTlNFQ1VSRSAwCi0jZGVmaW5lIFVTQl9FTkNfVFlQRV9XSVJFRCAxICAKLSNkZWZpbmUgVVNCX0VOQ19UWVBFX0NDTV8xIDIgIAotI2RlZmluZSBVU0JfRU5DX1RZUEVfUlNBXzEgMyAgCisjZGVmaW5lIFVTQl9FTkNfVFlQRV9XSVJFRCAxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBVU0JfRU5DX1RZUEVfQ0NNXzEgMgorI2RlZmluZSBVU0JfRU5DX1RZUEVfUlNBXzEgMwogIF9fdTggYkVuY3J5cHRpb25WYWx1ZTsKICBfX3U4IGJBdXRoS2V5SW5kZXg7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKLQogc3RydWN0IHVzYl9ib3NfZGVzY3JpcHRvciB7CiAgX191OCBiTGVuZ3RoOwogIF9fdTggYkRlc2NyaXB0b3JUeXBlOwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fbGUxNiB3VG90YWxMZW5ndGg7CiAgX191OCBiTnVtRGV2aWNlQ2FwczsKIH07Ci0KIHN0cnVjdCB1c2JfZGV2X2NhcF9oZWFkZXIgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IGJMZW5ndGg7CiAgX191OCBiRGVzY3JpcHRvclR5cGU7CiAgX191OCBiRGV2Q2FwYWJpbGl0eVR5cGU7CiB9OwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBVU0JfQ0FQX1RZUEVfV0lSRUxFU1NfVVNCIDEKLQogc3RydWN0IHVzYl93aXJlbGVzc19jYXBfZGVzY3JpcHRvciB7CiAgX191OCBiTGVuZ3RoOwogIF9fdTggYkRlc2NyaXB0b3JUeXBlOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IGJEZXZDYXBhYmlsaXR5VHlwZTsKLQogIF9fdTggYm1BdHRyaWJ1dGVzOwogI2RlZmluZSBVU0JfV0lSRUxFU1NfUDJQX0RSRCAoMSA8PCAxKQogI2RlZmluZSBVU0JfV0lSRUxFU1NfQkVBQ09OX01BU0sgKDMgPDwgMikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFVTQl9XSVJFTEVTU19CRUFDT05fU0VMRiAoMSA8PCAyKQogI2RlZmluZSBVU0JfV0lSRUxFU1NfQkVBQ09OX0RJUkVDVEVEICgyIDw8IDIpCiAjZGVmaW5lIFVTQl9XSVJFTEVTU19CRUFDT05fTk9ORSAoMyA8PCAyKQogIF9fbGUxNiB3UEhZUmF0ZXM7Ci0jZGVmaW5lIFVTQl9XSVJFTEVTU19QSFlfNTMgKDEgPDwgMCkgIAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVVNCX1dJUkVMRVNTX1BIWV81MyAoMSA8PCAwKQogI2RlZmluZSBVU0JfV0lSRUxFU1NfUEhZXzgwICgxIDw8IDEpCi0jZGVmaW5lIFVTQl9XSVJFTEVTU19QSFlfMTA3ICgxIDw8IDIpICAKKyNkZWZpbmUgVVNCX1dJUkVMRVNTX1BIWV8xMDcgKDEgPDwgMikKICNkZWZpbmUgVVNCX1dJUkVMRVNTX1BIWV8xNjAgKDEgPDwgMykKLSNkZWZpbmUgVVNCX1dJUkVMRVNTX1BIWV8yMDAgKDEgPDwgNCkgIAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVVNCX1dJUkVMRVNTX1BIWV8yMDAgKDEgPDwgNCkKICNkZWZpbmUgVVNCX1dJUkVMRVNTX1BIWV8zMjAgKDEgPDwgNSkKICNkZWZpbmUgVVNCX1dJUkVMRVNTX1BIWV80MDAgKDEgPDwgNikKICNkZWZpbmUgVVNCX1dJUkVMRVNTX1BIWV80ODAgKDEgPDwgNykKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191OCBibVRGSVRYUG93ZXJJbmZvOwogIF9fdTggYm1GRklUWFBvd2VySW5mbzsKICBfX2xlMTYgYm1CYW5kR3JvdXA7CiAgX191OCBiUmVzZXJ2ZWQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKLQogc3RydWN0IHVzYl93aXJlbGVzc19lcF9jb21wX2Rlc2NyaXB0b3IgewogIF9fdTggYkxlbmd0aDsKICBfX3U4IGJEZXNjcmlwdG9yVHlwZTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IGJNYXhCdXJzdDsKICBfX3U4IGJNYXhTZXF1ZW5jZTsKICBfX2xlMTYgd01heFN0cmVhbURlbGF5OwogIF9fbGUxNiB3T3ZlclRoZUFpclBhY2tldFNpemU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTggYk92ZXJUaGVBaXJJbnRlcnZhbDsKICBfX3U4IGJtQ29tcEF0dHJpYnV0ZXM7Ci0jZGVmaW5lIFVTQl9FTkRQT0lOVF9TV0lUQ0hfTUFTSyAweDAzICAKKyNkZWZpbmUgVVNCX0VORFBPSU5UX1NXSVRDSF9NQVNLIDB4MDMKICNkZWZpbmUgVVNCX0VORFBPSU5UX1NXSVRDSF9OTyAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBVU0JfRU5EUE9JTlRfU1dJVENIX1NXSVRDSCAxCiAjZGVmaW5lIFVTQl9FTkRQT0lOVF9TV0lUQ0hfU0NBTEUgMgogfTsKLQogc3RydWN0IHVzYl9oYW5kc2hha2UgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IGJNZXNzYWdlTnVtYmVyOwogIF9fdTggYlN0YXR1czsKICBfX3U4IHRUS0lEWzNdOwogIF9fdTggYlJlc2VydmVkOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IENESURbMTZdOwogIF9fdTggbm9uY2VbMTZdOwogIF9fdTggTUlDWzhdOwogfTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCB1c2JfY29ubmVjdGlvbl9jb250ZXh0IHsKICBfX3U4IENISURbMTZdOwogIF9fdTggQ0RJRFsxNl07CiAgX191OCBDS1sxNl07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKLQogZW51bSB1c2JfZGV2aWNlX3NwZWVkIHsKICBVU0JfU1BFRURfVU5LTk9XTiA9IDAsCiAgVVNCX1NQRUVEX0xPVywgVVNCX1NQRUVEX0ZVTEwsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFVTQl9TUEVFRF9ISUdILAogIFVTQl9TUEVFRF9WQVJJQUJMRSwKIH07Ci0KIGVudW0gdXNiX2RldmljZV9zdGF0ZSB7Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVVNCX1NUQVRFX05PVEFUVEFDSEVEID0gMCwKLQogIFVTQl9TVEFURV9BVFRBQ0hFRCwKICBVU0JfU1RBVEVfUE9XRVJFRCwKICBVU0JfU1RBVEVfVU5BVVRIRU5USUNBVEVELAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBVU0JfU1RBVEVfUkVDT05ORUNUSU5HLAogIFVTQl9TVEFURV9ERUZBVUxULAogIFVTQl9TVEFURV9BRERSRVNTLAogIFVTQl9TVEFURV9DT05GSUdVUkVELAotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFVTQl9TVEFURV9TVVNQRU5ERUQKLQogfTsKLQogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvdXNiZGV2aWNlX2ZzLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvdXNiZGV2aWNlX2ZzLmgKaW5kZXggZjM2ZWZkYy4uM2I1ODZiMSAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3VzYmRldmljZV9mcy5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC91c2JkZXZpY2VfZnMuaApAQCAtNywxMTcgKzcsMTMyIEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfTElOVVhfVVNCREVWSUNFX0ZTX0gKICNkZWZpbmUgX0xJTlVYX1VTQkRFVklDRV9GU19ICi0KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotCiAjZGVmaW5lIFVTQkRFVklDRV9TVVBFUl9NQUdJQyAweDlmYTIKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCB1c2JkZXZmc19jdHJsdHJhbnNmZXIgewogIF9fdTggYlJlcXVlc3RUeXBlOwogIF9fdTggYlJlcXVlc3Q7CiAgX191MTYgd1ZhbHVlOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UxNiB3SW5kZXg7CiAgX191MTYgd0xlbmd0aDsKICBfX3UzMiB0aW1lb3V0OwogIHZvaWQgX191c2VyICpkYXRhOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07Ci0KIHN0cnVjdCB1c2JkZXZmc19idWxrdHJhbnNmZXIgewogIHVuc2lnbmVkIGludCBlcDsKICB1bnNpZ25lZCBpbnQgbGVuOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBpbnQgdGltZW91dDsKICB2b2lkIF9fdXNlciAqZGF0YTsKIH07Ci0KIHN0cnVjdCB1c2JkZXZmc19zZXRpbnRlcmZhY2UgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBpbnQgaW50ZXJmYWNlOwogIHVuc2lnbmVkIGludCBhbHRzZXR0aW5nOwogfTsKLQogc3RydWN0IHVzYmRldmZzX2Rpc2Nvbm5lY3RzaWduYWwgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBpbnQgc2lnbnI7CiAgdm9pZCBfX3VzZXIgKmNvbnRleHQ7CiB9OwotCiAjZGVmaW5lIFVTQkRFVkZTX01BWERSSVZFUk5BTUUgMjU1Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgdXNiZGV2ZnNfZ2V0ZHJpdmVyIHsKICB1bnNpZ25lZCBpbnQgaW50ZXJmYWNlOwogIGNoYXIgZHJpdmVyW1VTQkRFVkZTX01BWERSSVZFUk5BTUUgKyAxXTsKIH07Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgdXNiZGV2ZnNfY29ubmVjdGluZm8gewogIHVuc2lnbmVkIGludCBkZXZudW07CiAgdW5zaWduZWQgY2hhciBzbG93OwogfTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVVNCREVWRlNfVVJCX1NIT1JUX05PVF9PSyAxCiAjZGVmaW5lIFVTQkRFVkZTX1VSQl9JU09fQVNBUCAyCi0KICNkZWZpbmUgVVNCREVWRlNfVVJCX1RZUEVfSVNPIDAKICNkZWZpbmUgVVNCREVWRlNfVVJCX1RZUEVfSU5URVJSVVBUIDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFVTQkRFVkZTX1VSQl9UWVBFX0NPTlRST0wgMgogI2RlZmluZSBVU0JERVZGU19VUkJfVFlQRV9CVUxLIDMKLQogc3RydWN0IHVzYmRldmZzX2lzb19wYWNrZXRfZGVzYyB7CiAgdW5zaWduZWQgaW50IGxlbmd0aDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgaW50IGFjdHVhbF9sZW5ndGg7CiAgdW5zaWduZWQgaW50IHN0YXR1czsKIH07Ci0KIHN0cnVjdCB1c2JkZXZmc191cmIgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBjaGFyIHR5cGU7CiAgdW5zaWduZWQgY2hhciBlbmRwb2ludDsKICBpbnQgc3RhdHVzOwogIHVuc2lnbmVkIGludCBmbGFnczsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdm9pZCBfX3VzZXIgKmJ1ZmZlcjsKICBpbnQgYnVmZmVyX2xlbmd0aDsKICBpbnQgYWN0dWFsX2xlbmd0aDsKICBpbnQgc3RhcnRfZnJhbWU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGludCBudW1iZXJfb2ZfcGFja2V0czsKICBpbnQgZXJyb3JfY291bnQ7CiAgdW5zaWduZWQgaW50IHNpZ25yOwogIHZvaWQgKnVzZXJjb250ZXh0OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgdXNiZGV2ZnNfaXNvX3BhY2tldF9kZXNjIGlzb19mcmFtZV9kZXNjWzBdOwogfTsKLQogc3RydWN0IHVzYmRldmZzX2lvY3RsIHsKICBpbnQgaWZubzsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgaW50IGlvY3RsX2NvZGU7CiAgdm9pZCBfX3VzZXIgKmRhdGE7CiB9OwotCiBzdHJ1Y3QgdXNiZGV2ZnNfaHViX3BvcnRpbmZvIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgY2hhciBucG9ydHM7CiAgY2hhciBwb3J0IFsxMjddOwogfTsKLQogI2RlZmluZSBVU0JERVZGU19DT05UUk9MIF9JT1dSKCdVJywgMCwgc3RydWN0IHVzYmRldmZzX2N0cmx0cmFuc2ZlcikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFVTQkRFVkZTX0JVTEsgX0lPV1IoJ1UnLCAyLCBzdHJ1Y3QgdXNiZGV2ZnNfYnVsa3RyYW5zZmVyKQogI2RlZmluZSBVU0JERVZGU19SRVNFVEVQIF9JT1IoJ1UnLCAzLCB1bnNpZ25lZCBpbnQpCiAjZGVmaW5lIFVTQkRFVkZTX1NFVElOVEVSRkFDRSBfSU9SKCdVJywgNCwgc3RydWN0IHVzYmRldmZzX3NldGludGVyZmFjZSkKICNkZWZpbmUgVVNCREVWRlNfU0VUQ09ORklHVVJBVElPTiBfSU9SKCdVJywgNSwgdW5zaWduZWQgaW50KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVVNCREVWRlNfR0VURFJJVkVSIF9JT1coJ1UnLCA4LCBzdHJ1Y3QgdXNiZGV2ZnNfZ2V0ZHJpdmVyKQogI2RlZmluZSBVU0JERVZGU19TVUJNSVRVUkIgX0lPUignVScsIDEwLCBzdHJ1Y3QgdXNiZGV2ZnNfdXJiKQogI2RlZmluZSBVU0JERVZGU19TVUJNSVRVUkIzMiBfSU9SKCdVJywgMTAsIHN0cnVjdCB1c2JkZXZmc191cmIzMikKICNkZWZpbmUgVVNCREVWRlNfRElTQ0FSRFVSQiBfSU8oJ1UnLCAxMSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFVTQkRFVkZTX1JFQVBVUkIgX0lPVygnVScsIDEyLCB2b2lkICopCiAjZGVmaW5lIFVTQkRFVkZTX1JFQVBVUkIzMiBfSU9XKCdVJywgMTIsIHUzMikKICNkZWZpbmUgVVNCREVWRlNfUkVBUFVSQk5ERUxBWSBfSU9XKCdVJywgMTMsIHZvaWQgKikKICNkZWZpbmUgVVNCREVWRlNfUkVBUFVSQk5ERUxBWTMyIF9JT1coJ1UnLCAxMywgdTMyKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVVNCREVWRlNfRElTQ1NJR05BTCBfSU9SKCdVJywgMTQsIHN0cnVjdCB1c2JkZXZmc19kaXNjb25uZWN0c2lnbmFsKQogI2RlZmluZSBVU0JERVZGU19DTEFJTUlOVEVSRkFDRSBfSU9SKCdVJywgMTUsIHVuc2lnbmVkIGludCkKICNkZWZpbmUgVVNCREVWRlNfUkVMRUFTRUlOVEVSRkFDRSBfSU9SKCdVJywgMTYsIHVuc2lnbmVkIGludCkKICNkZWZpbmUgVVNCREVWRlNfQ09OTkVDVElORk8gX0lPVygnVScsIDE3LCBzdHJ1Y3QgdXNiZGV2ZnNfY29ubmVjdGluZm8pCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBVU0JERVZGU19JT0NUTCBfSU9XUignVScsIDE4LCBzdHJ1Y3QgdXNiZGV2ZnNfaW9jdGwpCiAjZGVmaW5lIFVTQkRFVkZTX0lPQ1RMMzIgX0lPV1IoJ1UnLCAxOCwgc3RydWN0IHVzYmRldmZzX2lvY3RsMzIpCiAjZGVmaW5lIFVTQkRFVkZTX0hVQl9QT1JUSU5GTyBfSU9SKCdVJywgMTksIHN0cnVjdCB1c2JkZXZmc19odWJfcG9ydGluZm8pCiAjZGVmaW5lIFVTQkRFVkZTX1JFU0VUIF9JTygnVScsIDIwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVVNCREVWRlNfQ0xFQVJfSEFMVCBfSU9SKCdVJywgMjEsIHVuc2lnbmVkIGludCkKICNkZWZpbmUgVVNCREVWRlNfRElTQ09OTkVDVCBfSU8oJ1UnLCAyMikKICNkZWZpbmUgVVNCREVWRlNfQ09OTkVDVCBfSU8oJ1UnLCAyMykKICNlbmRpZgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC91c2VyLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvdXNlci5oCmluZGV4IDFjMGI5Y2IuLmNmZTU3MjEgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC91c2VyLmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3VzZXIuaApAQCAtNyw2ICs3LDEzIEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2luY2x1ZGUgPGFzbS91c2VyLmg+CmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvdXRpbWUuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC91dGltZS5oCmluZGV4IDRiMWJhOWMuLjE0MjMyOTAgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC91dGltZS5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC91dGltZS5oCkBAIC03LDE0ICs3LDIwIEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfTElOVVhfVVRJTUVfSAogI2RlZmluZSBfTElOVVhfVVRJTUVfSAotCiBzdHJ1Y3QgdXRpbWJ1ZiB7CiAgdGltZV90IGFjdGltZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdGltZV90IG1vZHRpbWU7CiB9OwotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC91dHNuYW1lLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvdXRzbmFtZS5oCmluZGV4IGVhNmVlODkuLmVhOGM2NDAgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC91dHNuYW1lLmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3V0c25hbWUuaApAQCAtNywzOCArNyw0NSBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX0xJTlVYX1VUU05BTUVfSAogI2RlZmluZSBfTElOVVhfVVRTTkFNRV9ICi0KICNkZWZpbmUgX19PTERfVVRTX0xFTiA4Ci0KIHN0cnVjdCBvbGRvbGRfdXRzbmFtZSB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGNoYXIgc3lzbmFtZVs5XTsKICBjaGFyIG5vZGVuYW1lWzldOwogIGNoYXIgcmVsZWFzZVs5XTsKICBjaGFyIHZlcnNpb25bOV07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGNoYXIgbWFjaGluZVs5XTsKIH07Ci0KICNkZWZpbmUgX19ORVdfVVRTX0xFTiA2NAotCiBzdHJ1Y3Qgb2xkX3V0c25hbWUgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBjaGFyIHN5c25hbWVbNjVdOwogIGNoYXIgbm9kZW5hbWVbNjVdOwogIGNoYXIgcmVsZWFzZVs2NV07CiAgY2hhciB2ZXJzaW9uWzY1XTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgY2hhciBtYWNoaW5lWzY1XTsKIH07Ci0KIHN0cnVjdCBuZXdfdXRzbmFtZSB7CiAgY2hhciBzeXNuYW1lWzY1XTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgY2hhciBub2RlbmFtZVs2NV07CiAgY2hhciByZWxlYXNlWzY1XTsKICBjaGFyIHZlcnNpb25bNjVdOwogIGNoYXIgbWFjaGluZVs2NV07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGNoYXIgZG9tYWlubmFtZVs2NV07CiB9OwotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC92NGwyLW1lZGlhYnVzLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvdjRsMi1tZWRpYWJ1cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlYTM4YmIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvdjRsMi1tZWRpYWJ1cy5oCkBAIC0wLDAgKzEsOTggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19MSU5VWF9WNEwyX01FRElBQlVTX0gKKyNkZWZpbmUgX19MSU5VWF9WNEwyX01FRElBQlVTX0gKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK2VudW0gdjRsMl9tYnVzX3BpeGVsY29kZSB7CisgVjRMMl9NQlVTX0ZNVF9GSVhFRCA9IDB4MDAwMSwKKyBWNEwyX01CVVNfRk1UX1JHQjQ0NF8yWDhfUEFESElfQkUgPSAweDEwMDEsCisgVjRMMl9NQlVTX0ZNVF9SR0I0NDRfMlg4X1BBREhJX0xFID0gMHgxMDAyLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBWNEwyX01CVVNfRk1UX1JHQjU1NV8yWDhfUEFESElfQkUgPSAweDEwMDMsCisgVjRMMl9NQlVTX0ZNVF9SR0I1NTVfMlg4X1BBREhJX0xFID0gMHgxMDA0LAorIFY0TDJfTUJVU19GTVRfQkdSNTY1XzJYOF9CRSA9IDB4MTAwNSwKKyBWNEwyX01CVVNfRk1UX0JHUjU2NV8yWDhfTEUgPSAweDEwMDYsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIFY0TDJfTUJVU19GTVRfUkdCNTY1XzJYOF9CRSA9IDB4MTAwNywKKyBWNEwyX01CVVNfRk1UX1JHQjU2NV8yWDhfTEUgPSAweDEwMDgsCisgVjRMMl9NQlVTX0ZNVF9ZOF8xWDggPSAweDIwMDEsCisgVjRMMl9NQlVTX0ZNVF9VWVZZOF8xXzVYOCA9IDB4MjAwMiwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgVjRMMl9NQlVTX0ZNVF9WWVVZOF8xXzVYOCA9IDB4MjAwMywKKyBWNEwyX01CVVNfRk1UX1lVWVY4XzFfNVg4ID0gMHgyMDA0LAorIFY0TDJfTUJVU19GTVRfWVZZVThfMV81WDggPSAweDIwMDUsCisgVjRMMl9NQlVTX0ZNVF9VWVZZOF8yWDggPSAweDIwMDYsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIFY0TDJfTUJVU19GTVRfVllVWThfMlg4ID0gMHgyMDA3LAorIFY0TDJfTUJVU19GTVRfWVVZVjhfMlg4ID0gMHgyMDA4LAorIFY0TDJfTUJVU19GTVRfWVZZVThfMlg4ID0gMHgyMDA5LAorIFY0TDJfTUJVU19GTVRfWTEwXzFYMTAgPSAweDIwMGEsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIFY0TDJfTUJVU19GTVRfWVVZVjEwXzJYMTAgPSAweDIwMGIsCisgVjRMMl9NQlVTX0ZNVF9ZVllVMTBfMlgxMCA9IDB4MjAwYywKKyBWNEwyX01CVVNfRk1UX1kxMl8xWDEyID0gMHgyMDEzLAorIFY0TDJfTUJVU19GTVRfVVlWWThfMVgxNiA9IDB4MjAwZiwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgVjRMMl9NQlVTX0ZNVF9WWVVZOF8xWDE2ID0gMHgyMDEwLAorIFY0TDJfTUJVU19GTVRfWVVZVjhfMVgxNiA9IDB4MjAxMSwKKyBWNEwyX01CVVNfRk1UX1lWWVU4XzFYMTYgPSAweDIwMTIsCisgVjRMMl9NQlVTX0ZNVF9ZVVlWMTBfMVgyMCA9IDB4MjAwZCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgVjRMMl9NQlVTX0ZNVF9ZVllVMTBfMVgyMCA9IDB4MjAwZSwKKyBWNEwyX01CVVNfRk1UX1NCR0dSOF8xWDggPSAweDMwMDEsCisgVjRMMl9NQlVTX0ZNVF9TR0JSRzhfMVg4ID0gMHgzMDEzLAorIFY0TDJfTUJVU19GTVRfU0dSQkc4XzFYOCA9IDB4MzAwMiwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgVjRMMl9NQlVTX0ZNVF9TUkdHQjhfMVg4ID0gMHgzMDE0LAorIFY0TDJfTUJVU19GTVRfU0JHR1IxMF9EUENNOF8xWDggPSAweDMwMGIsCisgVjRMMl9NQlVTX0ZNVF9TR0JSRzEwX0RQQ004XzFYOCA9IDB4MzAwYywKKyBWNEwyX01CVVNfRk1UX1NHUkJHMTBfRFBDTThfMVg4ID0gMHgzMDA5LAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBWNEwyX01CVVNfRk1UX1NSR0dCMTBfRFBDTThfMVg4ID0gMHgzMDBkLAorIFY0TDJfTUJVU19GTVRfU0JHR1IxMF8yWDhfUEFESElfQkUgPSAweDMwMDMsCisgVjRMMl9NQlVTX0ZNVF9TQkdHUjEwXzJYOF9QQURISV9MRSA9IDB4MzAwNCwKKyBWNEwyX01CVVNfRk1UX1NCR0dSMTBfMlg4X1BBRExPX0JFID0gMHgzMDA1LAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBWNEwyX01CVVNfRk1UX1NCR0dSMTBfMlg4X1BBRExPX0xFID0gMHgzMDA2LAorIFY0TDJfTUJVU19GTVRfU0JHR1IxMF8xWDEwID0gMHgzMDA3LAorIFY0TDJfTUJVU19GTVRfU0dCUkcxMF8xWDEwID0gMHgzMDBlLAorIFY0TDJfTUJVU19GTVRfU0dSQkcxMF8xWDEwID0gMHgzMDBhLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBWNEwyX01CVVNfRk1UX1NSR0dCMTBfMVgxMCA9IDB4MzAwZiwKKyBWNEwyX01CVVNfRk1UX1NCR0dSMTJfMVgxMiA9IDB4MzAwOCwKKyBWNEwyX01CVVNfRk1UX1NHQlJHMTJfMVgxMiA9IDB4MzAxMCwKKyBWNEwyX01CVVNfRk1UX1NHUkJHMTJfMVgxMiA9IDB4MzAxMSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgVjRMMl9NQlVTX0ZNVF9TUkdHQjEyXzFYMTIgPSAweDMwMTIsCisgVjRMMl9NQlVTX0ZNVF9KUEVHXzFYOCA9IDB4NDAwMSwKK307CitzdHJ1Y3QgdjRsMl9tYnVzX2ZyYW1lZm10IHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MzIgd2lkdGg7CisgX191MzIgaGVpZ2h0OworIF9fdTMyIGNvZGU7CisgX191MzIgZmllbGQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTMyIGNvbG9yc3BhY2U7CisgX191MzIgcmVzZXJ2ZWRbN107Cit9OworI2VuZGlmCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3ZlcnNpb24uaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC92ZXJzaW9uLmgKaW5kZXggYmVmZjBlZC4uNDY5Y2IwNSAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3ZlcnNpb24uaAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvdmVyc2lvbi5oCkBAIC03LDYgKzcsMTMgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjZGVmaW5lIExJTlVYX1ZFUlNJT05fQ09ERSAxMzI2MjYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC92ZnMuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC92ZnMuaAppbmRleCA3MDYzNmU5Li5hNTJiMTM2IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvdmZzLmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3Zmcy5oCkBAIC03LDExICs3LDE3IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfTElOVVhfVkZTX0gKICNkZWZpbmUgX0xJTlVYX1ZGU19ICi0KICNpbmNsdWRlIDxsaW51eC9zdGF0ZnMuaD4KLQogI2VuZGlmCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3ZpZGVvZGV2LmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvdmlkZW9kZXYuaAppbmRleCA1YTk1ZjgyLi41ODk5Y2FkIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvdmlkZW9kZXYuaAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvdmlkZW9kZXYuaApAQCAtNywyOTkgKzcsMzM4IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfX0xJTlVYX1ZJREVPREVWX0gKICNkZWZpbmUgX19MSU5VWF9WSURFT0RFVl9ICi0KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgotCi0jZGVmaW5lIFZJRF9UWVBFX0NBUFRVUkUgMSAgCi0jZGVmaW5lIFZJRF9UWVBFX1RVTkVSIDIgIAotI2RlZmluZSBWSURfVFlQRV9URUxFVEVYVCA0ICAKLSNkZWZpbmUgVklEX1RZUEVfT1ZFUkxBWSA4ICAKLSNkZWZpbmUgVklEX1RZUEVfQ0hST01BS0VZIDE2ICAKLSNkZWZpbmUgVklEX1RZUEVfQ0xJUFBJTkcgMzIgIAotI2RlZmluZSBWSURfVFlQRV9GUkFNRVJBTSA2NCAgCi0jZGVmaW5lIFZJRF9UWVBFX1NDQUxFUyAxMjggIAotI2RlZmluZSBWSURfVFlQRV9NT05PQ0hST01FIDI1NiAgCi0jZGVmaW5lIFZJRF9UWVBFX1NVQkNBUFRVUkUgNTEyICAKLSNkZWZpbmUgVklEX1RZUEVfTVBFR19ERUNPREVSIDEwMjQgIAotI2RlZmluZSBWSURfVFlQRV9NUEVHX0VOQ09ERVIgMjA0OCAgCi0jZGVmaW5lIFZJRF9UWVBFX01KUEVHX0RFQ09ERVIgNDA5NiAgCi0jZGVmaW5lIFZJRF9UWVBFX01KUEVHX0VOQ09ERVIgODE5MiAgCi0KKyNkZWZpbmUgVklEX1RZUEVfQ0FQVFVSRSAxCisjZGVmaW5lIFZJRF9UWVBFX1RVTkVSIDIKKyNkZWZpbmUgVklEX1RZUEVfVEVMRVRFWFQgNAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVklEX1RZUEVfT1ZFUkxBWSA4CisjZGVmaW5lIFZJRF9UWVBFX0NIUk9NQUtFWSAxNgorI2RlZmluZSBWSURfVFlQRV9DTElQUElORyAzMgorI2RlZmluZSBWSURfVFlQRV9GUkFNRVJBTSA2NAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVklEX1RZUEVfU0NBTEVTIDEyOAorI2RlZmluZSBWSURfVFlQRV9NT05PQ0hST01FIDI1NgorI2RlZmluZSBWSURfVFlQRV9TVUJDQVBUVVJFIDUxMgorI2RlZmluZSBWSURfVFlQRV9NUEVHX0RFQ09ERVIgMTAyNAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVklEX1RZUEVfTVBFR19FTkNPREVSIDIwNDgKKyNkZWZpbmUgVklEX1RZUEVfTUpQRUdfREVDT0RFUiA0MDk2CisjZGVmaW5lIFZJRF9UWVBFX01KUEVHX0VOQ09ERVIgODE5Mgogc3RydWN0IHZpZGVvX2NhcGFiaWxpdHkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB7CiAgY2hhciBuYW1lWzMyXTsKICBpbnQgdHlwZTsKICBpbnQgY2hhbm5lbHM7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGludCBhdWRpb3M7CiAgaW50IG1heHdpZHRoOwogIGludCBtYXhoZWlnaHQ7CiAgaW50IG1pbndpZHRoOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBpbnQgbWluaGVpZ2h0OwogfTsKLQogc3RydWN0IHZpZGVvX2NoYW5uZWwKIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgaW50IGNoYW5uZWw7CiAgY2hhciBuYW1lWzMyXTsKICBpbnQgdHVuZXJzOwogIF9fdTMyIGZsYWdzOwotI2RlZmluZSBWSURFT19WQ19UVU5FUiAxICAKLSNkZWZpbmUgVklERU9fVkNfQVVESU8gMiAgCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBWSURFT19WQ19UVU5FUiAxCisjZGVmaW5lIFZJREVPX1ZDX0FVRElPIDIKICBfX3UxNiB0eXBlOwogI2RlZmluZSBWSURFT19UWVBFX1RWIDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFZJREVPX1RZUEVfQ0FNRVJBIDIKICBfX3UxNiBub3JtOwogfTsKLQogc3RydWN0IHZpZGVvX3R1bmVyCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogewogIGludCB0dW5lcjsKICBjaGFyIG5hbWVbMzJdOwogIHVuc2lnbmVkIGxvbmcgcmFuZ2Vsb3csIHJhbmdlaGlnaDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgZmxhZ3M7CiAjZGVmaW5lIFZJREVPX1RVTkVSX1BBTCAxCiAjZGVmaW5lIFZJREVPX1RVTkVSX05UU0MgMgogI2RlZmluZSBWSURFT19UVU5FUl9TRUNBTSA0Ci0jZGVmaW5lIFZJREVPX1RVTkVSX0xPVyA4ICAKLSNkZWZpbmUgVklERU9fVFVORVJfTk9STSAxNiAgCi0jZGVmaW5lIFZJREVPX1RVTkVSX1NURVJFT19PTiAxMjggIAotI2RlZmluZSBWSURFT19UVU5FUl9SRFNfT04gMjU2ICAKLSNkZWZpbmUgVklERU9fVFVORVJfTUJTX09OIDUxMiAgCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBWSURFT19UVU5FUl9MT1cgOAorI2RlZmluZSBWSURFT19UVU5FUl9OT1JNIDE2CisjZGVmaW5lIFZJREVPX1RVTkVSX1NURVJFT19PTiAxMjgKKyNkZWZpbmUgVklERU9fVFVORVJfUkRTX09OIDI1NgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVklERU9fVFVORVJfTUJTX09OIDUxMgogIF9fdTE2IG1vZGU7CiAjZGVmaW5lIFZJREVPX01PREVfUEFMIDAKICNkZWZpbmUgVklERU9fTU9ERV9OVFNDIDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFZJREVPX01PREVfU0VDQU0gMgogI2RlZmluZSBWSURFT19NT0RFX0FVVE8gMwogIF9fdTE2IHNpZ25hbDsKIH07Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgdmlkZW9fcGljdHVyZQogewogIF9fdTE2IGJyaWdodG5lc3M7CiAgX191MTYgaHVlOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UxNiBjb2xvdXI7CiAgX191MTYgY29udHJhc3Q7CiAgX191MTYgd2hpdGVuZXNzOwogIF9fdTE2IGRlcHRoOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UxNiBwYWxldHRlOwotI2RlZmluZSBWSURFT19QQUxFVFRFX0dSRVkgMSAgCi0jZGVmaW5lIFZJREVPX1BBTEVUVEVfSEkyNDAgMiAgCi0jZGVmaW5lIFZJREVPX1BBTEVUVEVfUkdCNTY1IDMgIAotI2RlZmluZSBWSURFT19QQUxFVFRFX1JHQjI0IDQgIAotI2RlZmluZSBWSURFT19QQUxFVFRFX1JHQjMyIDUgIAotI2RlZmluZSBWSURFT19QQUxFVFRFX1JHQjU1NSA2ICAKLSNkZWZpbmUgVklERU9fUEFMRVRURV9ZVVY0MjIgNyAgCisjZGVmaW5lIFZJREVPX1BBTEVUVEVfR1JFWSAxCisjZGVmaW5lIFZJREVPX1BBTEVUVEVfSEkyNDAgMgorI2RlZmluZSBWSURFT19QQUxFVFRFX1JHQjU2NSAzCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBWSURFT19QQUxFVFRFX1JHQjI0IDQKKyNkZWZpbmUgVklERU9fUEFMRVRURV9SR0IzMiA1CisjZGVmaW5lIFZJREVPX1BBTEVUVEVfUkdCNTU1IDYKKyNkZWZpbmUgVklERU9fUEFMRVRURV9ZVVY0MjIgNworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVklERU9fUEFMRVRURV9ZVVlWIDgKLSNkZWZpbmUgVklERU9fUEFMRVRURV9VWVZZIDkgIAorI2RlZmluZSBWSURFT19QQUxFVFRFX1VZVlkgOQogI2RlZmluZSBWSURFT19QQUxFVFRFX1lVVjQyMCAxMAotI2RlZmluZSBWSURFT19QQUxFVFRFX1lVVjQxMSAxMSAgCi0jZGVmaW5lIFZJREVPX1BBTEVUVEVfUkFXIDEyICAKLSNkZWZpbmUgVklERU9fUEFMRVRURV9ZVVY0MjJQIDEzICAKLSNkZWZpbmUgVklERU9fUEFMRVRURV9ZVVY0MTFQIDE0ICAKLSNkZWZpbmUgVklERU9fUEFMRVRURV9ZVVY0MjBQIDE1ICAKLSNkZWZpbmUgVklERU9fUEFMRVRURV9ZVVY0MTBQIDE2ICAKLSNkZWZpbmUgVklERU9fUEFMRVRURV9QTEFOQVIgMTMgIAotI2RlZmluZSBWSURFT19QQUxFVFRFX0NPTVBPTkVOVCA3ICAKKyNkZWZpbmUgVklERU9fUEFMRVRURV9ZVVY0MTEgMTEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFZJREVPX1BBTEVUVEVfUkFXIDEyCisjZGVmaW5lIFZJREVPX1BBTEVUVEVfWVVWNDIyUCAxMworI2RlZmluZSBWSURFT19QQUxFVFRFX1lVVjQxMVAgMTQKKyNkZWZpbmUgVklERU9fUEFMRVRURV9ZVVY0MjBQIDE1CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBWSURFT19QQUxFVFRFX1lVVjQxMFAgMTYKKyNkZWZpbmUgVklERU9fUEFMRVRURV9QTEFOQVIgMTMKKyNkZWZpbmUgVklERU9fUEFMRVRURV9DT01QT05FTlQgNwogfTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCB2aWRlb19hdWRpbwogewogIGludCBhdWRpbzsKICBfX3UxNiB2b2x1bWU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTE2IGJhc3MsIHRyZWJsZTsKICBfX3UzMiBmbGFnczsKICNkZWZpbmUgVklERU9fQVVESU9fTVVURSAxCiAjZGVmaW5lIFZJREVPX0FVRElPX01VVEFCTEUgMgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVklERU9fQVVESU9fVk9MVU1FIDQKICNkZWZpbmUgVklERU9fQVVESU9fQkFTUyA4CiAjZGVmaW5lIFZJREVPX0FVRElPX1RSRUJMRSAxNgogI2RlZmluZSBWSURFT19BVURJT19CQUxBTkNFIDMyCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGNoYXIgbmFtZVsxNl07CiAjZGVmaW5lIFZJREVPX1NPVU5EX01PTk8gMQogI2RlZmluZSBWSURFT19TT1VORF9TVEVSRU8gMgogI2RlZmluZSBWSURFT19TT1VORF9MQU5HMSA0CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWSURFT19TT1VORF9MQU5HMiA4CiAgX191MTYgbW9kZTsKICBfX3UxNiBiYWxhbmNlOwogIF9fdTE2IHN0ZXA7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKLQogc3RydWN0IHZpZGVvX2NsaXAKIHsKICBfX3MzMiB4LHk7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fczMyIHdpZHRoLCBoZWlnaHQ7CiAgc3RydWN0IHZpZGVvX2NsaXAgKm5leHQ7CiB9OwotCiBzdHJ1Y3QgdmlkZW9fd2luZG93CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogewogIF9fdTMyIHgseTsKICBfX3UzMiB3aWR0aCxoZWlnaHQ7CiAgX191MzIgY2hyb21ha2V5OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBmbGFnczsKICBzdHJ1Y3QgdmlkZW9fY2xpcCBfX3VzZXIgKmNsaXBzOwogIGludCBjbGlwY291bnQ7CiAjZGVmaW5lIFZJREVPX1dJTkRPV19JTlRFUkxBQ0UgMQotI2RlZmluZSBWSURFT19XSU5ET1dfQ0hST01BS0VZIDE2ICAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFZJREVPX1dJTkRPV19DSFJPTUFLRVkgMTYKICNkZWZpbmUgVklERU9fQ0xJUF9CSVRNQVAgLTEKLQogI2RlZmluZSBWSURFT19DTElQTUFQX1NJWkUgKDEyOCAqIDYyNSkKIH07Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgdmlkZW9fY2FwdHVyZQogewogIF9fdTMyIHgseTsKICBfX3UzMiB3aWR0aCwgaGVpZ2h0OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UxNiBkZWNpbWF0aW9uOwogIF9fdTE2IGZsYWdzOwotI2RlZmluZSBWSURFT19DQVBUVVJFX09ERCAwICAKKyNkZWZpbmUgVklERU9fQ0FQVFVSRV9PREQgMAogI2RlZmluZSBWSURFT19DQVBUVVJFX0VWRU4gMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07Ci0KIHN0cnVjdCB2aWRlb19idWZmZXIKIHsKICB2b2lkICpiYXNlOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBpbnQgaGVpZ2h0LHdpZHRoOwogIGludCBkZXB0aDsKICBpbnQgYnl0ZXNwZXJsaW5lOwogfTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCB2aWRlb19tbWFwCiB7CiAgdW5zaWduZWQgaW50IGZyYW1lOwogIGludCBoZWlnaHQsd2lkdGg7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGludCBmb3JtYXQ7CiB9OwotCiBzdHJ1Y3QgdmlkZW9fa2V5CiB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTgga2V5WzhdOwogIF9fdTMyIGZsYWdzOwogfTsKLQogc3RydWN0IHZpZGVvX21idWYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB7CiAgaW50IHNpemU7CiAgaW50IGZyYW1lczsKICBpbnQgb2Zmc2V0c1tWSURFT19NQVhfRlJBTUVdOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07Ci0KICNkZWZpbmUgVklERU9fTk9fVU5JVCAoLTEpCi0KIHN0cnVjdCB2aWRlb191bml0CiB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGludCB2aWRlbzsKICBpbnQgdmJpOwogIGludCByYWRpbzsKICBpbnQgYXVkaW87CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGludCB0ZWxldGV4dDsKIH07Ci0KIHN0cnVjdCB2YmlfZm9ybWF0IHsKICBfX3UzMiBzYW1wbGluZ19yYXRlOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBzYW1wbGVzX3Blcl9saW5lOwogIF9fdTMyIHNhbXBsZV9mb3JtYXQ7CiAgX19zMzIgc3RhcnRbMl07CiAgX191MzIgY291bnRbMl07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGZsYWdzOwotI2RlZmluZSBWQklfVU5TWU5DIDEgIAotI2RlZmluZSBWQklfSU5URVJMQUNFRCAyICAKKyNkZWZpbmUgVkJJX1VOU1lOQyAxCisjZGVmaW5lIFZCSV9JTlRFUkxBQ0VEIDIKIH07Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgdmlkZW9faW5mbwogewogIF9fdTMyIGZyYW1lX2NvdW50OwogIF9fdTMyIGhfc2l6ZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgdl9zaXplOwogIF9fdTMyIHNtcHRlX3RpbWVjb2RlOwogIF9fdTMyIHBpY3R1cmVfdHlwZTsKICBfX3UzMiB0ZW1wb3JhbF9yZWZlcmVuY2U7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTggdXNlcl9kYXRhWzI1Nl07Ci0KIH07Ci0KIHN0cnVjdCB2aWRlb19wbGF5X21vZGUKIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgaW50IG1vZGU7CiAgaW50IHAxOwogIGludCBwMjsKIH07Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgdmlkZW9fY29kZQogewogIGNoYXIgbG9hZHdoYXRbMTZdOwogIGludCBkYXRhc2l6ZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191OCAqZGF0YTsKIH07Ci0KLSNkZWZpbmUgVklESU9DR0NBUCBfSU9SKCd2JywxLHN0cnVjdCB2aWRlb19jYXBhYmlsaXR5KSAgCi0jZGVmaW5lIFZJRElPQ0dDSEFOIF9JT1dSKCd2JywyLHN0cnVjdCB2aWRlb19jaGFubmVsKSAgCi0jZGVmaW5lIFZJRElPQ1NDSEFOIF9JT1coJ3YnLDMsc3RydWN0IHZpZGVvX2NoYW5uZWwpICAKLSNkZWZpbmUgVklESU9DR1RVTkVSIF9JT1dSKCd2Jyw0LHN0cnVjdCB2aWRlb190dW5lcikgIAotI2RlZmluZSBWSURJT0NTVFVORVIgX0lPVygndicsNSxzdHJ1Y3QgdmlkZW9fdHVuZXIpICAKLSNkZWZpbmUgVklESU9DR1BJQ1QgX0lPUigndicsNixzdHJ1Y3QgdmlkZW9fcGljdHVyZSkgIAotI2RlZmluZSBWSURJT0NTUElDVCBfSU9XKCd2Jyw3LHN0cnVjdCB2aWRlb19waWN0dXJlKSAgCi0jZGVmaW5lIFZJRElPQ0NBUFRVUkUgX0lPVygndicsOCxpbnQpICAKLSNkZWZpbmUgVklESU9DR1dJTiBfSU9SKCd2Jyw5LCBzdHJ1Y3QgdmlkZW9fd2luZG93KSAgCi0jZGVmaW5lIFZJRElPQ1NXSU4gX0lPVygndicsMTAsIHN0cnVjdCB2aWRlb193aW5kb3cpICAKLSNkZWZpbmUgVklESU9DR0ZCVUYgX0lPUigndicsMTEsIHN0cnVjdCB2aWRlb19idWZmZXIpICAKLSNkZWZpbmUgVklESU9DU0ZCVUYgX0lPVygndicsMTIsIHN0cnVjdCB2aWRlb19idWZmZXIpICAKLSNkZWZpbmUgVklESU9DS0VZIF9JT1IoJ3YnLDEzLCBzdHJ1Y3QgdmlkZW9fa2V5KSAgCi0jZGVmaW5lIFZJRElPQ0dGUkVRIF9JT1IoJ3YnLDE0LCB1bnNpZ25lZCBsb25nKSAgCi0jZGVmaW5lIFZJRElPQ1NGUkVRIF9JT1coJ3YnLDE1LCB1bnNpZ25lZCBsb25nKSAgCi0jZGVmaW5lIFZJRElPQ0dBVURJTyBfSU9SKCd2JywxNiwgc3RydWN0IHZpZGVvX2F1ZGlvKSAgCi0jZGVmaW5lIFZJRElPQ1NBVURJTyBfSU9XKCd2JywxNywgc3RydWN0IHZpZGVvX2F1ZGlvKSAgCi0jZGVmaW5lIFZJRElPQ1NZTkMgX0lPVygndicsMTgsIGludCkgIAotI2RlZmluZSBWSURJT0NNQ0FQVFVSRSBfSU9XKCd2JywxOSwgc3RydWN0IHZpZGVvX21tYXApICAKLSNkZWZpbmUgVklESU9DR01CVUYgX0lPUigndicsMjAsIHN0cnVjdCB2aWRlb19tYnVmKSAgCi0jZGVmaW5lIFZJRElPQ0dVTklUIF9JT1IoJ3YnLDIxLCBzdHJ1Y3QgdmlkZW9fdW5pdCkgIAotI2RlZmluZSBWSURJT0NHQ0FQVFVSRSBfSU9SKCd2JywyMiwgc3RydWN0IHZpZGVvX2NhcHR1cmUpICAKLSNkZWZpbmUgVklESU9DU0NBUFRVUkUgX0lPVygndicsMjMsIHN0cnVjdCB2aWRlb19jYXB0dXJlKSAgCi0jZGVmaW5lIFZJRElPQ1NQTEFZTU9ERSBfSU9XKCd2JywyNCwgc3RydWN0IHZpZGVvX3BsYXlfbW9kZSkgIAotI2RlZmluZSBWSURJT0NTV1JJVEVNT0RFIF9JT1coJ3YnLDI1LCBpbnQpICAKLSNkZWZpbmUgVklESU9DR1BMQVlJTkZPIF9JT1IoJ3YnLDI2LCBzdHJ1Y3QgdmlkZW9faW5mbykgIAotI2RlZmluZSBWSURJT0NTTUlDUk9DT0RFIF9JT1coJ3YnLDI3LCBzdHJ1Y3QgdmlkZW9fY29kZSkgIAotI2RlZmluZSBWSURJT0NHVkJJRk1UIF9JT1IoJ3YnLDI4LCBzdHJ1Y3QgdmJpX2Zvcm1hdCkgIAotI2RlZmluZSBWSURJT0NTVkJJRk1UIF9JT1coJ3YnLDI5LCBzdHJ1Y3QgdmJpX2Zvcm1hdCkgIAotCi0jZGVmaW5lIEJBU0VfVklESU9DUFJJVkFURSAxOTIgIAotCisjZGVmaW5lIFZJRElPQ0dDQVAgX0lPUigndicsMSxzdHJ1Y3QgdmlkZW9fY2FwYWJpbGl0eSkKKyNkZWZpbmUgVklESU9DR0NIQU4gX0lPV1IoJ3YnLDIsc3RydWN0IHZpZGVvX2NoYW5uZWwpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBWSURJT0NTQ0hBTiBfSU9XKCd2JywzLHN0cnVjdCB2aWRlb19jaGFubmVsKQorI2RlZmluZSBWSURJT0NHVFVORVIgX0lPV1IoJ3YnLDQsc3RydWN0IHZpZGVvX3R1bmVyKQorI2RlZmluZSBWSURJT0NTVFVORVIgX0lPVygndicsNSxzdHJ1Y3QgdmlkZW9fdHVuZXIpCisjZGVmaW5lIFZJRElPQ0dQSUNUIF9JT1IoJ3YnLDYsc3RydWN0IHZpZGVvX3BpY3R1cmUpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBWSURJT0NTUElDVCBfSU9XKCd2Jyw3LHN0cnVjdCB2aWRlb19waWN0dXJlKQorI2RlZmluZSBWSURJT0NDQVBUVVJFIF9JT1coJ3YnLDgsaW50KQorI2RlZmluZSBWSURJT0NHV0lOIF9JT1IoJ3YnLDksIHN0cnVjdCB2aWRlb193aW5kb3cpCisjZGVmaW5lIFZJRElPQ1NXSU4gX0lPVygndicsMTAsIHN0cnVjdCB2aWRlb193aW5kb3cpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBWSURJT0NHRkJVRiBfSU9SKCd2JywxMSwgc3RydWN0IHZpZGVvX2J1ZmZlcikKKyNkZWZpbmUgVklESU9DU0ZCVUYgX0lPVygndicsMTIsIHN0cnVjdCB2aWRlb19idWZmZXIpCisjZGVmaW5lIFZJRElPQ0tFWSBfSU9SKCd2JywxMywgc3RydWN0IHZpZGVvX2tleSkKKyNkZWZpbmUgVklESU9DR0ZSRVEgX0lPUigndicsMTQsIHVuc2lnbmVkIGxvbmcpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBWSURJT0NTRlJFUSBfSU9XKCd2JywxNSwgdW5zaWduZWQgbG9uZykKKyNkZWZpbmUgVklESU9DR0FVRElPIF9JT1IoJ3YnLDE2LCBzdHJ1Y3QgdmlkZW9fYXVkaW8pCisjZGVmaW5lIFZJRElPQ1NBVURJTyBfSU9XKCd2JywxNywgc3RydWN0IHZpZGVvX2F1ZGlvKQorI2RlZmluZSBWSURJT0NTWU5DIF9JT1coJ3YnLDE4LCBpbnQpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBWSURJT0NNQ0FQVFVSRSBfSU9XKCd2JywxOSwgc3RydWN0IHZpZGVvX21tYXApCisjZGVmaW5lIFZJRElPQ0dNQlVGIF9JT1IoJ3YnLDIwLCBzdHJ1Y3QgdmlkZW9fbWJ1ZikKKyNkZWZpbmUgVklESU9DR1VOSVQgX0lPUigndicsMjEsIHN0cnVjdCB2aWRlb191bml0KQorI2RlZmluZSBWSURJT0NHQ0FQVFVSRSBfSU9SKCd2JywyMiwgc3RydWN0IHZpZGVvX2NhcHR1cmUpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBWSURJT0NTQ0FQVFVSRSBfSU9XKCd2JywyMywgc3RydWN0IHZpZGVvX2NhcHR1cmUpCisjZGVmaW5lIFZJRElPQ1NQTEFZTU9ERSBfSU9XKCd2JywyNCwgc3RydWN0IHZpZGVvX3BsYXlfbW9kZSkKKyNkZWZpbmUgVklESU9DU1dSSVRFTU9ERSBfSU9XKCd2JywyNSwgaW50KQorI2RlZmluZSBWSURJT0NHUExBWUlORk8gX0lPUigndicsMjYsIHN0cnVjdCB2aWRlb19pbmZvKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVklESU9DU01JQ1JPQ09ERSBfSU9XKCd2JywyNywgc3RydWN0IHZpZGVvX2NvZGUpCisjZGVmaW5lIFZJRElPQ0dWQklGTVQgX0lPUigndicsMjgsIHN0cnVjdCB2YmlfZm9ybWF0KQorI2RlZmluZSBWSURJT0NTVkJJRk1UIF9JT1coJ3YnLDI5LCBzdHJ1Y3QgdmJpX2Zvcm1hdCkKKyNkZWZpbmUgQkFTRV9WSURJT0NQUklWQVRFIDE5MgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVklEX1dSSVRFX01QRUdfQVVEIDAKICNkZWZpbmUgVklEX1dSSVRFX01QRUdfVklEIDEKICNkZWZpbmUgVklEX1dSSVRFX09TRCAyCiAjZGVmaW5lIFZJRF9XUklURV9UVFggMworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVklEX1dSSVRFX0NDIDQKICNkZWZpbmUgVklEX1dSSVRFX01KUEVHIDUKLQogI2RlZmluZSBWSURfUExBWV9WSURfT1VUX01PREUgMAotCiAjZGVmaW5lIFZJRF9QTEFZX0dFTkxPQ0sgMQotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWSURfUExBWV9OT1JNQUwgMgogI2RlZmluZSBWSURfUExBWV9QQVVTRSAzCiAjZGVmaW5lIFZJRF9QTEFZX1NJTkdMRV9GUkFNRSA0CiAjZGVmaW5lIFZJRF9QTEFZX0ZBU1RfRk9SV0FSRCA1CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWSURfUExBWV9TTE9XX01PVElPTiA2CiAjZGVmaW5lIFZJRF9QTEFZX0lNTUVESUFURV9OT1JNQUwgNwogI2RlZmluZSBWSURfUExBWV9TV0lUQ0hfQ0hBTk5FTFMgOAogI2RlZmluZSBWSURfUExBWV9GUkVFWkVfRlJBTUUgOQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVklEX1BMQVlfU1RJTExfTU9ERSAxMAogI2RlZmluZSBWSURfUExBWV9NQVNURVJfTU9ERSAxMQotCiAjZGVmaW5lIFZJRF9QTEFZX01BU1RFUl9OT05FIDEKICNkZWZpbmUgVklEX1BMQVlfTUFTVEVSX1ZJREVPIDIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFZJRF9QTEFZX01BU1RFUl9BVURJTyAzCiAjZGVmaW5lIFZJRF9QTEFZX0FDVElWRV9TQ0FOTElORVMgMTIKLQogI2RlZmluZSBWSURfUExBWV9SRVNFVCAxMwogI2RlZmluZSBWSURfUExBWV9FTkRfTUFSSyAxNAotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2VuZGlmCi0KLQpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3ZpZGVvZGV2Mi5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3ZpZGVvZGV2Mi5oCmluZGV4IDNhOTE1MTAuLjkyZDhmOWUgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC92aWRlb2RldjIuaAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvdmlkZW9kZXYyLmgKQEAgLTcsMTIwMyArNywyMTc0IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfX0xJTlVYX1ZJREVPREVWMl9ICiAjZGVmaW5lIF9fTElOVVhfVklERU9ERVYyX0gKLQogI2luY2x1ZGUgPHN5cy90aW1lLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotCiAjZGVmaW5lIFZJREVPX01BWF9GUkFNRSAzMgotCi0jZGVmaW5lIFZJRF9UWVBFX0NBUFRVUkUgMSAgCi0jZGVmaW5lIFZJRF9UWVBFX1RVTkVSIDIgIAotI2RlZmluZSBWSURfVFlQRV9URUxFVEVYVCA0ICAKLSNkZWZpbmUgVklEX1RZUEVfT1ZFUkxBWSA4ICAKLSNkZWZpbmUgVklEX1RZUEVfQ0hST01BS0VZIDE2ICAKLSNkZWZpbmUgVklEX1RZUEVfQ0xJUFBJTkcgMzIgIAotI2RlZmluZSBWSURfVFlQRV9GUkFNRVJBTSA2NCAgCi0jZGVmaW5lIFZJRF9UWVBFX1NDQUxFUyAxMjggIAotI2RlZmluZSBWSURfVFlQRV9NT05PQ0hST01FIDI1NiAgCi0jZGVmaW5lIFZJRF9UWVBFX1NVQkNBUFRVUkUgNTEyICAKLSNkZWZpbmUgVklEX1RZUEVfTVBFR19ERUNPREVSIDEwMjQgIAotI2RlZmluZSBWSURfVFlQRV9NUEVHX0VOQ09ERVIgMjA0OCAgCi0jZGVmaW5lIFZJRF9UWVBFX01KUEVHX0RFQ09ERVIgNDA5NiAgCi0jZGVmaW5lIFZJRF9UWVBFX01KUEVHX0VOQ09ERVIgODE5MiAgCi0KKyNkZWZpbmUgVklERU9fTUFYX1BMQU5FUyA4CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBWSURfVFlQRV9DQVBUVVJFIDEKKyNkZWZpbmUgVklEX1RZUEVfVFVORVIgMgorI2RlZmluZSBWSURfVFlQRV9URUxFVEVYVCA0CisjZGVmaW5lIFZJRF9UWVBFX09WRVJMQVkgOAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVklEX1RZUEVfQ0hST01BS0VZIDE2CisjZGVmaW5lIFZJRF9UWVBFX0NMSVBQSU5HIDMyCisjZGVmaW5lIFZJRF9UWVBFX0ZSQU1FUkFNIDY0CisjZGVmaW5lIFZJRF9UWVBFX1NDQUxFUyAxMjgKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFZJRF9UWVBFX01PTk9DSFJPTUUgMjU2CisjZGVmaW5lIFZJRF9UWVBFX1NVQkNBUFRVUkUgNTEyCisjZGVmaW5lIFZJRF9UWVBFX01QRUdfREVDT0RFUiAxMDI0CisjZGVmaW5lIFZJRF9UWVBFX01QRUdfRU5DT0RFUiAyMDQ4CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBWSURfVFlQRV9NSlBFR19ERUNPREVSIDQwOTYKKyNkZWZpbmUgVklEX1RZUEVfTUpQRUdfRU5DT0RFUiA4MTkyCiAjZGVmaW5lIHY0bDJfZm91cmNjKGEsIGIsIGMsIGQpICAoKF9fdTMyKShhKSB8ICgoX191MzIpKGIpIDw8IDgpIHwgKChfX3UzMikoYykgPDwgMTYpIHwgKChfX3UzMikoZCkgPDwgMjQpKQotCiBlbnVtIHY0bDJfZmllbGQgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBWNEwyX0ZJRUxEX0FOWSA9IDAsCiAgVjRMMl9GSUVMRF9OT05FID0gMSwKICBWNEwyX0ZJRUxEX1RPUCA9IDIsCiAgVjRMMl9GSUVMRF9CT1RUT00gPSAzLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBWNEwyX0ZJRUxEX0lOVEVSTEFDRUQgPSA0LAogIFY0TDJfRklFTERfU0VRX1RCID0gNSwKICBWNEwyX0ZJRUxEX1NFUV9CVCA9IDYsCiAgVjRMMl9GSUVMRF9BTFRFUk5BVEUgPSA3LAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBWNEwyX0ZJRUxEX0lOVEVSTEFDRURfVEIgPSA4LAogIFY0TDJfRklFTERfSU5URVJMQUNFRF9CVCA9IDksCiB9OwogI2RlZmluZSBWNEwyX0ZJRUxEX0hBU19UT1AoZmllbGQpICAgKChmaWVsZCkgPT0gVjRMMl9GSUVMRF9UT1AgfHwgIChmaWVsZCkgPT0gVjRMMl9GSUVMRF9JTlRFUkxBQ0VEIHx8ICAoZmllbGQpID09IFY0TDJfRklFTERfSU5URVJMQUNFRF9UQiB8fCAgKGZpZWxkKSA9PSBWNEwyX0ZJRUxEX0lOVEVSTEFDRURfQlQgfHwgIChmaWVsZCkgPT0gVjRMMl9GSUVMRF9TRVFfVEIgfHwgIChmaWVsZCkgPT0gVjRMMl9GSUVMRF9TRVFfQlQpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX0ZJRUxEX0hBU19CT1RUT00oZmllbGQpICAgKChmaWVsZCkgPT0gVjRMMl9GSUVMRF9CT1RUT00gfHwgIChmaWVsZCkgPT0gVjRMMl9GSUVMRF9JTlRFUkxBQ0VEIHx8ICAoZmllbGQpID09IFY0TDJfRklFTERfSU5URVJMQUNFRF9UQiB8fCAgKGZpZWxkKSA9PSBWNEwyX0ZJRUxEX0lOVEVSTEFDRURfQlQgfHwgIChmaWVsZCkgPT0gVjRMMl9GSUVMRF9TRVFfVEIgfHwgIChmaWVsZCkgPT0gVjRMMl9GSUVMRF9TRVFfQlQpCiAjZGVmaW5lIFY0TDJfRklFTERfSEFTX0JPVEgoZmllbGQpICAgKChmaWVsZCkgPT0gVjRMMl9GSUVMRF9JTlRFUkxBQ0VEIHx8ICAoZmllbGQpID09IFY0TDJfRklFTERfSU5URVJMQUNFRF9UQiB8fCAgKGZpZWxkKSA9PSBWNEwyX0ZJRUxEX0lOVEVSTEFDRURfQlQgfHwgIChmaWVsZCkgPT0gVjRMMl9GSUVMRF9TRVFfVEIgfHwgIChmaWVsZCkgPT0gVjRMMl9GSUVMRF9TRVFfQlQpCi0KIGVudW0gdjRsMl9idWZfdHlwZSB7CiAgVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFID0gMSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVjRMMl9CVUZfVFlQRV9WSURFT19PVVRQVVQgPSAyLAogIFY0TDJfQlVGX1RZUEVfVklERU9fT1ZFUkxBWSA9IDMsCiAgVjRMMl9CVUZfVFlQRV9WQklfQ0FQVFVSRSA9IDQsCiAgVjRMMl9CVUZfVFlQRV9WQklfT1VUUFVUID0gNSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVjRMMl9CVUZfVFlQRV9TTElDRURfVkJJX0NBUFRVUkUgPSA2LAogIFY0TDJfQlVGX1RZUEVfU0xJQ0VEX1ZCSV9PVVRQVVQgPSA3LAotCiAgVjRMMl9CVUZfVFlQRV9WSURFT19PVVRQVVRfT1ZFUkxBWSA9IDgsCisgVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFX01QTEFORSA9IDksCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIFY0TDJfQlVGX1RZUEVfVklERU9fT1VUUFVUX01QTEFORSA9IDEwLAogIFY0TDJfQlVGX1RZUEVfUFJJVkFURSA9IDB4ODAsCiB9OwotCi1lbnVtIHY0bDJfY3RybF90eXBlIHsKLSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSID0gMSwKLSBWNEwyX0NUUkxfVFlQRV9CT09MRUFOID0gMiwKLSBWNEwyX0NUUkxfVFlQRV9NRU5VID0gMywKLSBWNEwyX0NUUkxfVFlQRV9CVVRUT04gPSA0LAotIFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVI2NCA9IDUsCi0gVjRMMl9DVFJMX1RZUEVfQ1RSTF9DTEFTUyA9IDYsCi19OwotCisjZGVmaW5lIFY0TDJfVFlQRV9JU19NVUxUSVBMQU5BUih0eXBlKSAgICgodHlwZSkgPT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFX01QTEFORSAgIHx8ICh0eXBlKSA9PSBWNEwyX0JVRl9UWVBFX1ZJREVPX09VVFBVVF9NUExBTkUpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBWNEwyX1RZUEVfSVNfT1VUUFVUKHR5cGUpICAgKCh0eXBlKSA9PSBWNEwyX0JVRl9UWVBFX1ZJREVPX09VVFBVVCAgIHx8ICh0eXBlKSA9PSBWNEwyX0JVRl9UWVBFX1ZJREVPX09VVFBVVF9NUExBTkUgICB8fCAodHlwZSkgPT0gVjRMMl9CVUZfVFlQRV9WSURFT19PVkVSTEFZICAgfHwgKHR5cGUpID09IFY0TDJfQlVGX1RZUEVfVklERU9fT1VUUFVUX09WRVJMQVkgICB8fCAodHlwZSkgPT0gVjRMMl9CVUZfVFlQRV9WQklfT1VUUFVUICAgfHwgKHR5cGUpID09IFY0TDJfQlVGX1RZUEVfU0xJQ0VEX1ZCSV9PVVRQVVQpCiBlbnVtIHY0bDJfdHVuZXJfdHlwZSB7CiAgVjRMMl9UVU5FUl9SQURJTyA9IDEsCiAgVjRMMl9UVU5FUl9BTkFMT0dfVFYgPSAyLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBWNEwyX1RVTkVSX0RJR0lUQUxfVFYgPSAzLAogfTsKLQogZW51bSB2NGwyX21lbW9yeSB7CiAgVjRMMl9NRU1PUllfTU1BUCA9IDEsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFY0TDJfTUVNT1JZX1VTRVJQVFIgPSAyLAogIFY0TDJfTUVNT1JZX09WRVJMQVkgPSAzLAogfTsKLQogZW51bSB2NGwyX2NvbG9yc3BhY2UgewotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFY0TDJfQ09MT1JTUEFDRV9TTVBURTE3ME0gPSAxLAotCiAgVjRMMl9DT0xPUlNQQUNFX1NNUFRFMjQwTSA9IDIsCi0KICBWNEwyX0NPTE9SU1BBQ0VfUkVDNzA5ID0gMywKLQogIFY0TDJfQ09MT1JTUEFDRV9CVDg3OCA9IDQsCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVjRMMl9DT0xPUlNQQUNFXzQ3MF9TWVNURU1fTSA9IDUsCiAgVjRMMl9DT0xPUlNQQUNFXzQ3MF9TWVNURU1fQkcgPSA2LAotCiAgVjRMMl9DT0xPUlNQQUNFX0pQRUcgPSA3LAotCiAgVjRMMl9DT0xPUlNQQUNFX1NSR0IgPSA4LAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07Ci0KIGVudW0gdjRsMl9wcmlvcml0eSB7CiAgVjRMMl9QUklPUklUWV9VTlNFVCA9IDAsCiAgVjRMMl9QUklPUklUWV9CQUNLR1JPVU5EID0gMSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVjRMMl9QUklPUklUWV9JTlRFUkFDVElWRSA9IDIsCiAgVjRMMl9QUklPUklUWV9SRUNPUkQgPSAzLAogIFY0TDJfUFJJT1JJVFlfREVGQVVMVCA9IFY0TDJfUFJJT1JJVFlfSU5URVJBQ1RJVkUsCiB9OwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IHY0bDJfcmVjdCB7CiAgX19zMzIgbGVmdDsKICBfX3MzMiB0b3A7CiAgX19zMzIgd2lkdGg7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fczMyIGhlaWdodDsKIH07Ci0KIHN0cnVjdCB2NGwyX2ZyYWN0IHsKICBfX3UzMiBudW1lcmF0b3I7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGRlbm9taW5hdG9yOwogfTsKLQogc3RydWN0IHY0bDJfY2FwYWJpbGl0eSB7CiAgX191OCBkcml2ZXJbMTZdOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IGNhcmRbMzJdOwogIF9fdTggYnVzX2luZm9bMzJdOwogIF9fdTMyIHZlcnNpb247CiAgX191MzIgY2FwYWJpbGl0aWVzOwotIF9fdTMyIHJlc2VydmVkWzRdOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UzMiBkZXZpY2VfY2FwczsKKyBfX3UzMiByZXNlcnZlZFszXTsKIH07Ci0KLSNkZWZpbmUgVjRMMl9DQVBfVklERU9fQ0FQVFVSRSAweDAwMDAwMDAxICAKLSNkZWZpbmUgVjRMMl9DQVBfVklERU9fT1VUUFVUIDB4MDAwMDAwMDIgIAotI2RlZmluZSBWNEwyX0NBUF9WSURFT19PVkVSTEFZIDB4MDAwMDAwMDQgIAotI2RlZmluZSBWNEwyX0NBUF9WQklfQ0FQVFVSRSAweDAwMDAwMDEwICAKLSNkZWZpbmUgVjRMMl9DQVBfVkJJX09VVFBVVCAweDAwMDAwMDIwICAKLSNkZWZpbmUgVjRMMl9DQVBfU0xJQ0VEX1ZCSV9DQVBUVVJFIDB4MDAwMDAwNDAgIAotI2RlZmluZSBWNEwyX0NBUF9TTElDRURfVkJJX09VVFBVVCAweDAwMDAwMDgwICAKLSNkZWZpbmUgVjRMMl9DQVBfUkRTX0NBUFRVUkUgMHgwMDAwMDEwMCAgCi0jZGVmaW5lIFY0TDJfQ0FQX1ZJREVPX09VVFBVVF9PVkVSTEFZIDB4MDAwMDAyMDAgIAotI2RlZmluZSBWNEwyX0NBUF9IV19GUkVRX1NFRUsgMHgwMDAwMDQwMCAgCi0KLSNkZWZpbmUgVjRMMl9DQVBfVFVORVIgMHgwMDAxMDAwMCAgCi0jZGVmaW5lIFY0TDJfQ0FQX0FVRElPIDB4MDAwMjAwMDAgIAotI2RlZmluZSBWNEwyX0NBUF9SQURJTyAweDAwMDQwMDAwICAKLQotI2RlZmluZSBWNEwyX0NBUF9SRUFEV1JJVEUgMHgwMTAwMDAwMCAgCi0jZGVmaW5lIFY0TDJfQ0FQX0FTWU5DSU8gMHgwMjAwMDAwMCAgCi0jZGVmaW5lIFY0TDJfQ0FQX1NUUkVBTUlORyAweDA0MDAwMDAwICAKLQorI2RlZmluZSBWNEwyX0NBUF9WSURFT19DQVBUVVJFIDB4MDAwMDAwMDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFY0TDJfQ0FQX1ZJREVPX09VVFBVVCAweDAwMDAwMDAyCisjZGVmaW5lIFY0TDJfQ0FQX1ZJREVPX09WRVJMQVkgMHgwMDAwMDAwNAorI2RlZmluZSBWNEwyX0NBUF9WQklfQ0FQVFVSRSAweDAwMDAwMDEwCisjZGVmaW5lIFY0TDJfQ0FQX1ZCSV9PVVRQVVQgMHgwMDAwMDAyMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVjRMMl9DQVBfU0xJQ0VEX1ZCSV9DQVBUVVJFIDB4MDAwMDAwNDAKKyNkZWZpbmUgVjRMMl9DQVBfU0xJQ0VEX1ZCSV9PVVRQVVQgMHgwMDAwMDA4MAorI2RlZmluZSBWNEwyX0NBUF9SRFNfQ0FQVFVSRSAweDAwMDAwMTAwCisjZGVmaW5lIFY0TDJfQ0FQX1ZJREVPX09VVFBVVF9PVkVSTEFZIDB4MDAwMDAyMDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFY0TDJfQ0FQX0hXX0ZSRVFfU0VFSyAweDAwMDAwNDAwCisjZGVmaW5lIFY0TDJfQ0FQX1JEU19PVVRQVVQgMHgwMDAwMDgwMAorI2RlZmluZSBWNEwyX0NBUF9WSURFT19DQVBUVVJFX01QTEFORSAweDAwMDAxMDAwCisjZGVmaW5lIFY0TDJfQ0FQX1ZJREVPX09VVFBVVF9NUExBTkUgMHgwMDAwMjAwMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVjRMMl9DQVBfVFVORVIgMHgwMDAxMDAwMAorI2RlZmluZSBWNEwyX0NBUF9BVURJTyAweDAwMDIwMDAwCisjZGVmaW5lIFY0TDJfQ0FQX1JBRElPIDB4MDAwNDAwMDAKKyNkZWZpbmUgVjRMMl9DQVBfTU9EVUxBVE9SIDB4MDAwODAwMDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFY0TDJfQ0FQX1JFQURXUklURSAweDAxMDAwMDAwCisjZGVmaW5lIFY0TDJfQ0FQX0FTWU5DSU8gMHgwMjAwMDAwMAorI2RlZmluZSBWNEwyX0NBUF9TVFJFQU1JTkcgMHgwNDAwMDAwMAorI2RlZmluZSBWNEwyX0NBUF9ERVZJQ0VfQ0FQUyAweDgwMDAwMDAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCB7CiAgX191MzIgd2lkdGg7CiAgX191MzIgaGVpZ2h0OwogIF9fdTMyIHBpeGVsZm9ybWF0OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBlbnVtIHY0bDJfZmllbGQgZmllbGQ7CiAgX191MzIgYnl0ZXNwZXJsaW5lOwogIF9fdTMyIHNpemVpbWFnZTsKICBlbnVtIHY0bDJfY29sb3JzcGFjZSBjb2xvcnNwYWNlOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBwcml2OwogfTsKLQotI2RlZmluZSBWNEwyX1BJWF9GTVRfUkdCMzMyIHY0bDJfZm91cmNjKCdSJywgJ0cnLCAnQicsICcxJykgIAotI2RlZmluZSBWNEwyX1BJWF9GTVRfUkdCNDQ0IHY0bDJfZm91cmNjKCdSJywgJzQnLCAnNCcsICc0JykgIAotI2RlZmluZSBWNEwyX1BJWF9GTVRfUkdCNTU1IHY0bDJfZm91cmNjKCdSJywgJ0cnLCAnQicsICdPJykgIAotI2RlZmluZSBWNEwyX1BJWF9GTVRfUkdCNTY1IHY0bDJfZm91cmNjKCdSJywgJ0cnLCAnQicsICdQJykgIAotI2RlZmluZSBWNEwyX1BJWF9GTVRfUkdCNTU1WCB2NGwyX2ZvdXJjYygnUicsICdHJywgJ0InLCAnUScpICAKLSNkZWZpbmUgVjRMMl9QSVhfRk1UX1JHQjU2NVggdjRsMl9mb3VyY2MoJ1InLCAnRycsICdCJywgJ1InKSAgCi0jZGVmaW5lIFY0TDJfUElYX0ZNVF9CR1IyNCB2NGwyX2ZvdXJjYygnQicsICdHJywgJ1InLCAnMycpICAKLSNkZWZpbmUgVjRMMl9QSVhfRk1UX1JHQjI0IHY0bDJfZm91cmNjKCdSJywgJ0cnLCAnQicsICczJykgIAotI2RlZmluZSBWNEwyX1BJWF9GTVRfQkdSMzIgdjRsMl9mb3VyY2MoJ0InLCAnRycsICdSJywgJzQnKSAgCi0jZGVmaW5lIFY0TDJfUElYX0ZNVF9SR0IzMiB2NGwyX2ZvdXJjYygnUicsICdHJywgJ0InLCAnNCcpICAKLSNkZWZpbmUgVjRMMl9QSVhfRk1UX0dSRVkgdjRsMl9mb3VyY2MoJ0cnLCAnUicsICdFJywgJ1knKSAgCi0jZGVmaW5lIFY0TDJfUElYX0ZNVF9ZMTYgdjRsMl9mb3VyY2MoJ1knLCAnMScsICc2JywgJyAnKSAgCi0jZGVmaW5lIFY0TDJfUElYX0ZNVF9QQUw4IHY0bDJfZm91cmNjKCdQJywgJ0EnLCAnTCcsICc4JykgIAotI2RlZmluZSBWNEwyX1BJWF9GTVRfWVZVNDEwIHY0bDJfZm91cmNjKCdZJywgJ1YnLCAnVScsICc5JykgIAotI2RlZmluZSBWNEwyX1BJWF9GTVRfWVZVNDIwIHY0bDJfZm91cmNjKCdZJywgJ1YnLCAnMScsICcyJykgIAotI2RlZmluZSBWNEwyX1BJWF9GTVRfWVVZViB2NGwyX2ZvdXJjYygnWScsICdVJywgJ1knLCAnVicpICAKLSNkZWZpbmUgVjRMMl9QSVhfRk1UX1VZVlkgdjRsMl9mb3VyY2MoJ1UnLCAnWScsICdWJywgJ1knKSAgCi0jZGVmaW5lIFY0TDJfUElYX0ZNVF9WWVVZIHY0bDJfZm91cmNjKCdWJywgJ1knLCAnVScsICdZJykgIAotI2RlZmluZSBWNEwyX1BJWF9GTVRfWVVWNDIyUCB2NGwyX2ZvdXJjYygnNCcsICcyJywgJzInLCAnUCcpICAKLSNkZWZpbmUgVjRMMl9QSVhfRk1UX1lVVjQxMVAgdjRsMl9mb3VyY2MoJzQnLCAnMScsICcxJywgJ1AnKSAgCi0jZGVmaW5lIFY0TDJfUElYX0ZNVF9ZNDFQIHY0bDJfZm91cmNjKCdZJywgJzQnLCAnMScsICdQJykgIAotI2RlZmluZSBWNEwyX1BJWF9GTVRfWVVWNDQ0IHY0bDJfZm91cmNjKCdZJywgJzQnLCAnNCcsICc0JykgIAotI2RlZmluZSBWNEwyX1BJWF9GTVRfWVVWNTU1IHY0bDJfZm91cmNjKCdZJywgJ1UnLCAnVicsICdPJykgIAotI2RlZmluZSBWNEwyX1BJWF9GTVRfWVVWNTY1IHY0bDJfZm91cmNjKCdZJywgJ1UnLCAnVicsICdQJykgIAotI2RlZmluZSBWNEwyX1BJWF9GTVRfWVVWMzIgdjRsMl9mb3VyY2MoJ1knLCAnVScsICdWJywgJzQnKSAgCi0KLSNkZWZpbmUgVjRMMl9QSVhfRk1UX05WMTIgdjRsMl9mb3VyY2MoJ04nLCAnVicsICcxJywgJzInKSAgCi0jZGVmaW5lIFY0TDJfUElYX0ZNVF9OVjIxIHY0bDJfZm91cmNjKCdOJywgJ1YnLCAnMicsICcxJykgIAotI2RlZmluZSBWNEwyX1BJWF9GTVRfTlYxNiB2NGwyX2ZvdXJjYygnTicsICdWJywgJzEnLCAnNicpICAKLSNkZWZpbmUgVjRMMl9QSVhfRk1UX05WNjEgdjRsMl9mb3VyY2MoJ04nLCAnVicsICc2JywgJzEnKSAgCi0KLSNkZWZpbmUgVjRMMl9QSVhfRk1UX1lVVjQxMCB2NGwyX2ZvdXJjYygnWScsICdVJywgJ1YnLCAnOScpICAKLSNkZWZpbmUgVjRMMl9QSVhfRk1UX1lVVjQyMCB2NGwyX2ZvdXJjYygnWScsICdVJywgJzEnLCAnMicpICAKLSNkZWZpbmUgVjRMMl9QSVhfRk1UX1lZVVYgdjRsMl9mb3VyY2MoJ1knLCAnWScsICdVJywgJ1YnKSAgCi0jZGVmaW5lIFY0TDJfUElYX0ZNVF9ISTI0MCB2NGwyX2ZvdXJjYygnSCcsICdJJywgJzInLCAnNCcpICAKLSNkZWZpbmUgVjRMMl9QSVhfRk1UX0hNMTIgdjRsMl9mb3VyY2MoJ0gnLCAnTScsICcxJywgJzInKSAgCi0KLSNkZWZpbmUgVjRMMl9QSVhfRk1UX1NCR0dSOCB2NGwyX2ZvdXJjYygnQicsICdBJywgJzgnLCAnMScpICAKLSNkZWZpbmUgVjRMMl9QSVhfRk1UX1NHQlJHOCB2NGwyX2ZvdXJjYygnRycsICdCJywgJ1InLCAnRycpICAKLQorI2RlZmluZSBWNEwyX1BJWF9GTVRfUkdCMzMyIHY0bDJfZm91cmNjKCdSJywgJ0cnLCAnQicsICcxJykKKyNkZWZpbmUgVjRMMl9QSVhfRk1UX1JHQjQ0NCB2NGwyX2ZvdXJjYygnUicsICc0JywgJzQnLCAnNCcpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBWNEwyX1BJWF9GTVRfUkdCNTU1IHY0bDJfZm91cmNjKCdSJywgJ0cnLCAnQicsICdPJykKKyNkZWZpbmUgVjRMMl9QSVhfRk1UX1JHQjU2NSB2NGwyX2ZvdXJjYygnUicsICdHJywgJ0InLCAnUCcpCisjZGVmaW5lIFY0TDJfUElYX0ZNVF9SR0I1NTVYIHY0bDJfZm91cmNjKCdSJywgJ0cnLCAnQicsICdRJykKKyNkZWZpbmUgVjRMMl9QSVhfRk1UX1JHQjU2NVggdjRsMl9mb3VyY2MoJ1InLCAnRycsICdCJywgJ1InKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVjRMMl9QSVhfRk1UX0JHUjY2NiB2NGwyX2ZvdXJjYygnQicsICdHJywgJ1InLCAnSCcpCisjZGVmaW5lIFY0TDJfUElYX0ZNVF9CR1IyNCB2NGwyX2ZvdXJjYygnQicsICdHJywgJ1InLCAnMycpCisjZGVmaW5lIFY0TDJfUElYX0ZNVF9SR0IyNCB2NGwyX2ZvdXJjYygnUicsICdHJywgJ0InLCAnMycpCisjZGVmaW5lIFY0TDJfUElYX0ZNVF9CR1IzMiB2NGwyX2ZvdXJjYygnQicsICdHJywgJ1InLCAnNCcpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBWNEwyX1BJWF9GTVRfUkdCMzIgdjRsMl9mb3VyY2MoJ1InLCAnRycsICdCJywgJzQnKQorI2RlZmluZSBWNEwyX1BJWF9GTVRfR1JFWSB2NGwyX2ZvdXJjYygnRycsICdSJywgJ0UnLCAnWScpCisjZGVmaW5lIFY0TDJfUElYX0ZNVF9ZNCB2NGwyX2ZvdXJjYygnWScsICcwJywgJzQnLCAnICcpCisjZGVmaW5lIFY0TDJfUElYX0ZNVF9ZNiB2NGwyX2ZvdXJjYygnWScsICcwJywgJzYnLCAnICcpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBWNEwyX1BJWF9GTVRfWTEwIHY0bDJfZm91cmNjKCdZJywgJzEnLCAnMCcsICcgJykKKyNkZWZpbmUgVjRMMl9QSVhfRk1UX1kxMiB2NGwyX2ZvdXJjYygnWScsICcxJywgJzInLCAnICcpCisjZGVmaW5lIFY0TDJfUElYX0ZNVF9ZMTYgdjRsMl9mb3VyY2MoJ1knLCAnMScsICc2JywgJyAnKQorI2RlZmluZSBWNEwyX1BJWF9GTVRfWTEwQlBBQ0sgdjRsMl9mb3VyY2MoJ1knLCAnMScsICcwJywgJ0InKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVjRMMl9QSVhfRk1UX1BBTDggdjRsMl9mb3VyY2MoJ1AnLCAnQScsICdMJywgJzgnKQorI2RlZmluZSBWNEwyX1BJWF9GTVRfWVZVNDEwIHY0bDJfZm91cmNjKCdZJywgJ1YnLCAnVScsICc5JykKKyNkZWZpbmUgVjRMMl9QSVhfRk1UX1lWVTQyMCB2NGwyX2ZvdXJjYygnWScsICdWJywgJzEnLCAnMicpCisjZGVmaW5lIFY0TDJfUElYX0ZNVF9ZVVlWIHY0bDJfZm91cmNjKCdZJywgJ1UnLCAnWScsICdWJykKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFY0TDJfUElYX0ZNVF9ZWVVWIHY0bDJfZm91cmNjKCdZJywgJ1knLCAnVScsICdWJykKKyNkZWZpbmUgVjRMMl9QSVhfRk1UX1lWWVUgdjRsMl9mb3VyY2MoJ1knLCAnVicsICdZJywgJ1UnKQorI2RlZmluZSBWNEwyX1BJWF9GTVRfVVlWWSB2NGwyX2ZvdXJjYygnVScsICdZJywgJ1YnLCAnWScpCisjZGVmaW5lIFY0TDJfUElYX0ZNVF9WWVVZIHY0bDJfZm91cmNjKCdWJywgJ1knLCAnVScsICdZJykKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFY0TDJfUElYX0ZNVF9ZVVY0MjJQIHY0bDJfZm91cmNjKCc0JywgJzInLCAnMicsICdQJykKKyNkZWZpbmUgVjRMMl9QSVhfRk1UX1lVVjQxMVAgdjRsMl9mb3VyY2MoJzQnLCAnMScsICcxJywgJ1AnKQorI2RlZmluZSBWNEwyX1BJWF9GTVRfWTQxUCB2NGwyX2ZvdXJjYygnWScsICc0JywgJzEnLCAnUCcpCisjZGVmaW5lIFY0TDJfUElYX0ZNVF9ZVVY0NDQgdjRsMl9mb3VyY2MoJ1knLCAnNCcsICc0JywgJzQnKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVjRMMl9QSVhfRk1UX1lVVjU1NSB2NGwyX2ZvdXJjYygnWScsICdVJywgJ1YnLCAnTycpCisjZGVmaW5lIFY0TDJfUElYX0ZNVF9ZVVY1NjUgdjRsMl9mb3VyY2MoJ1knLCAnVScsICdWJywgJ1AnKQorI2RlZmluZSBWNEwyX1BJWF9GTVRfWVVWMzIgdjRsMl9mb3VyY2MoJ1knLCAnVScsICdWJywgJzQnKQorI2RlZmluZSBWNEwyX1BJWF9GTVRfWVVWNDEwIHY0bDJfZm91cmNjKCdZJywgJ1UnLCAnVicsICc5JykKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFY0TDJfUElYX0ZNVF9ZVVY0MjAgdjRsMl9mb3VyY2MoJ1knLCAnVScsICcxJywgJzInKQorI2RlZmluZSBWNEwyX1BJWF9GTVRfSEkyNDAgdjRsMl9mb3VyY2MoJ0gnLCAnSScsICcyJywgJzQnKQorI2RlZmluZSBWNEwyX1BJWF9GTVRfSE0xMiB2NGwyX2ZvdXJjYygnSCcsICdNJywgJzEnLCAnMicpCisjZGVmaW5lIFY0TDJfUElYX0ZNVF9NNDIwIHY0bDJfZm91cmNjKCdNJywgJzQnLCAnMicsICcwJykKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFY0TDJfUElYX0ZNVF9OVjEyIHY0bDJfZm91cmNjKCdOJywgJ1YnLCAnMScsICcyJykKKyNkZWZpbmUgVjRMMl9QSVhfRk1UX05WMjEgdjRsMl9mb3VyY2MoJ04nLCAnVicsICcyJywgJzEnKQorI2RlZmluZSBWNEwyX1BJWF9GTVRfTlYxNiB2NGwyX2ZvdXJjYygnTicsICdWJywgJzEnLCAnNicpCisjZGVmaW5lIFY0TDJfUElYX0ZNVF9OVjYxIHY0bDJfZm91cmNjKCdOJywgJ1YnLCAnNicsICcxJykKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFY0TDJfUElYX0ZNVF9OVjI0IHY0bDJfZm91cmNjKCdOJywgJ1YnLCAnMicsICc0JykKKyNkZWZpbmUgVjRMMl9QSVhfRk1UX05WNDIgdjRsMl9mb3VyY2MoJ04nLCAnVicsICc0JywgJzInKQorI2RlZmluZSBWNEwyX1BJWF9GTVRfTlYxMk0gdjRsMl9mb3VyY2MoJ04nLCAnTScsICcxJywgJzInKQorI2RlZmluZSBWNEwyX1BJWF9GTVRfTlYxMk1UIHY0bDJfZm91cmNjKCdUJywgJ00nLCAnMScsICcyJykKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFY0TDJfUElYX0ZNVF9ZVVY0MjBNIHY0bDJfZm91cmNjKCdZJywgJ00nLCAnMScsICcyJykKKyNkZWZpbmUgVjRMMl9QSVhfRk1UX1NCR0dSOCB2NGwyX2ZvdXJjYygnQicsICdBJywgJzgnLCAnMScpCisjZGVmaW5lIFY0TDJfUElYX0ZNVF9TR0JSRzggdjRsMl9mb3VyY2MoJ0cnLCAnQicsICdSJywgJ0cnKQorI2RlZmluZSBWNEwyX1BJWF9GTVRfU0dSQkc4IHY0bDJfZm91cmNjKCdHJywgJ1InLCAnQicsICdHJykKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFY0TDJfUElYX0ZNVF9TUkdHQjggdjRsMl9mb3VyY2MoJ1InLCAnRycsICdHJywgJ0InKQorI2RlZmluZSBWNEwyX1BJWF9GTVRfU0JHR1IxMCB2NGwyX2ZvdXJjYygnQicsICdHJywgJzEnLCAnMCcpCisjZGVmaW5lIFY0TDJfUElYX0ZNVF9TR0JSRzEwIHY0bDJfZm91cmNjKCdHJywgJ0InLCAnMScsICcwJykKICNkZWZpbmUgVjRMMl9QSVhfRk1UX1NHUkJHMTAgdjRsMl9mb3VyY2MoJ0InLCAnQScsICcxJywgJzAnKQotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBWNEwyX1BJWF9GTVRfU1JHR0IxMCB2NGwyX2ZvdXJjYygnUicsICdHJywgJzEnLCAnMCcpCisjZGVmaW5lIFY0TDJfUElYX0ZNVF9TQkdHUjEyIHY0bDJfZm91cmNjKCdCJywgJ0cnLCAnMScsICcyJykKKyNkZWZpbmUgVjRMMl9QSVhfRk1UX1NHQlJHMTIgdjRsMl9mb3VyY2MoJ0cnLCAnQicsICcxJywgJzInKQorI2RlZmluZSBWNEwyX1BJWF9GTVRfU0dSQkcxMiB2NGwyX2ZvdXJjYygnQicsICdBJywgJzEnLCAnMicpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBWNEwyX1BJWF9GTVRfU1JHR0IxMiB2NGwyX2ZvdXJjYygnUicsICdHJywgJzEnLCAnMicpCiAjZGVmaW5lIFY0TDJfUElYX0ZNVF9TR1JCRzEwRFBDTTggdjRsMl9mb3VyY2MoJ0InLCAnRCcsICcxJywgJzAnKQotI2RlZmluZSBWNEwyX1BJWF9GTVRfU0JHR1IxNiB2NGwyX2ZvdXJjYygnQicsICdZJywgJ1InLCAnMicpICAKLSNkZWZpbmUgVjRMMl9QSVhfRk1UX1cxU19QQVRUIHY0bDJfZm91cmNjKCdQJywgJ0EnLCAnVCcsICcxJykgIAotCi0jZGVmaW5lIFY0TDJfUElYX0ZNVF9NSlBFRyB2NGwyX2ZvdXJjYygnTScsICdKJywgJ1AnLCAnRycpICAKLSNkZWZpbmUgVjRMMl9QSVhfRk1UX0pQRUcgdjRsMl9mb3VyY2MoJ0onLCAnUCcsICdFJywgJ0cnKSAgCi0jZGVmaW5lIFY0TDJfUElYX0ZNVF9EViB2NGwyX2ZvdXJjYygnZCcsICd2JywgJ3MnLCAnZCcpICAKLSNkZWZpbmUgVjRMMl9QSVhfRk1UX01QRUcgdjRsMl9mb3VyY2MoJ00nLCAnUCcsICdFJywgJ0cnKSAgCi0KLSNkZWZpbmUgVjRMMl9QSVhfRk1UX1dOVkEgdjRsMl9mb3VyY2MoJ1cnLCAnTicsICdWJywgJ0EnKSAgCi0jZGVmaW5lIFY0TDJfUElYX0ZNVF9TTjlDMTBYIHY0bDJfZm91cmNjKCdTJywgJzknLCAnMScsICcwJykgIAotI2RlZmluZSBWNEwyX1BJWF9GTVRfUFdDMSB2NGwyX2ZvdXJjYygnUCcsICdXJywgJ0MnLCAnMScpICAKLSNkZWZpbmUgVjRMMl9QSVhfRk1UX1BXQzIgdjRsMl9mb3VyY2MoJ1AnLCAnVycsICdDJywgJzInKSAgCi0jZGVmaW5lIFY0TDJfUElYX0ZNVF9FVDYxWDI1MSB2NGwyX2ZvdXJjYygnRScsICc2JywgJzInLCAnNScpICAKLSNkZWZpbmUgVjRMMl9QSVhfRk1UX1NQQ0E1MDEgdjRsMl9mb3VyY2MoJ1MnLCAnNScsICcwJywgJzEnKSAgCi0jZGVmaW5lIFY0TDJfUElYX0ZNVF9TUENBNTA1IHY0bDJfZm91cmNjKCdTJywgJzUnLCAnMCcsICc1JykgIAotI2RlZmluZSBWNEwyX1BJWF9GTVRfU1BDQTUwOCB2NGwyX2ZvdXJjYygnUycsICc1JywgJzAnLCAnOCcpICAKLSNkZWZpbmUgVjRMMl9QSVhfRk1UX1NQQ0E1NjEgdjRsMl9mb3VyY2MoJ1MnLCAnNScsICc2JywgJzEnKSAgCi0jZGVmaW5lIFY0TDJfUElYX0ZNVF9QQUMyMDcgdjRsMl9mb3VyY2MoJ1AnLCAnMicsICcwJywgJzcnKSAgCi0jZGVmaW5lIFY0TDJfUElYX0ZNVF9QSlBHIHY0bDJfZm91cmNjKCdQJywgJ0onLCAnUCcsICdHJykgIAotI2RlZmluZSBWNEwyX1BJWF9GTVRfWVZZVSB2NGwyX2ZvdXJjYygnWScsICdWJywgJ1knLCAnVScpICAKLQorI2RlZmluZSBWNEwyX1BJWF9GTVRfU0JHR1IxNiB2NGwyX2ZvdXJjYygnQicsICdZJywgJ1InLCAnMicpCisjZGVmaW5lIFY0TDJfUElYX0ZNVF9NSlBFRyB2NGwyX2ZvdXJjYygnTScsICdKJywgJ1AnLCAnRycpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBWNEwyX1BJWF9GTVRfSlBFRyB2NGwyX2ZvdXJjYygnSicsICdQJywgJ0UnLCAnRycpCisjZGVmaW5lIFY0TDJfUElYX0ZNVF9EViB2NGwyX2ZvdXJjYygnZCcsICd2JywgJ3MnLCAnZCcpCisjZGVmaW5lIFY0TDJfUElYX0ZNVF9NUEVHIHY0bDJfZm91cmNjKCdNJywgJ1AnLCAnRScsICdHJykKKyNkZWZpbmUgVjRMMl9QSVhfRk1UX0gyNjQgdjRsMl9mb3VyY2MoJ0gnLCAnMicsICc2JywgJzQnKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVjRMMl9QSVhfRk1UX0gyNjRfTk9fU0MgdjRsMl9mb3VyY2MoJ0EnLCAnVicsICdDJywgJzEnKQorI2RlZmluZSBWNEwyX1BJWF9GTVRfSDI2MyB2NGwyX2ZvdXJjYygnSCcsICcyJywgJzYnLCAnMycpCisjZGVmaW5lIFY0TDJfUElYX0ZNVF9NUEVHMSB2NGwyX2ZvdXJjYygnTScsICdQJywgJ0cnLCAnMScpCisjZGVmaW5lIFY0TDJfUElYX0ZNVF9NUEVHMiB2NGwyX2ZvdXJjYygnTScsICdQJywgJ0cnLCAnMicpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBWNEwyX1BJWF9GTVRfTVBFRzQgdjRsMl9mb3VyY2MoJ00nLCAnUCcsICdHJywgJzQnKQorI2RlZmluZSBWNEwyX1BJWF9GTVRfWFZJRCB2NGwyX2ZvdXJjYygnWCcsICdWJywgJ0knLCAnRCcpCisjZGVmaW5lIFY0TDJfUElYX0ZNVF9WQzFfQU5ORVhfRyB2NGwyX2ZvdXJjYygnVicsICdDJywgJzEnLCAnRycpCisjZGVmaW5lIFY0TDJfUElYX0ZNVF9WQzFfQU5ORVhfTCB2NGwyX2ZvdXJjYygnVicsICdDJywgJzEnLCAnTCcpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBWNEwyX1BJWF9GTVRfRElWWF8zMTEgdjRsMl9mb3VyY2MoJ0QnLCAnSScsICdWJywgJzMnKQorI2RlZmluZSBWNEwyX1BJWF9GTVRfRElWWCB2NGwyX2ZvdXJjYygnRCcsICdJJywgJ1YnLCAnWCcpCisjZGVmaW5lIFY0TDJfUElYX0ZNVF9WUDggdjRsMl9mb3VyY2MoJ1YnLCAnUCcsICc4JywgJzAnKQorI2RlZmluZSBWNEwyX1BJWF9GTVRfQ1BJQTEgdjRsMl9mb3VyY2MoJ0MnLCAnUCcsICdJJywgJ0EnKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVjRMMl9QSVhfRk1UX1dOVkEgdjRsMl9mb3VyY2MoJ1cnLCAnTicsICdWJywgJ0EnKQorI2RlZmluZSBWNEwyX1BJWF9GTVRfU045QzEwWCB2NGwyX2ZvdXJjYygnUycsICc5JywgJzEnLCAnMCcpCisjZGVmaW5lIFY0TDJfUElYX0ZNVF9TTjlDMjBYX0k0MjAgdjRsMl9mb3VyY2MoJ1MnLCAnOScsICcyJywgJzAnKQorI2RlZmluZSBWNEwyX1BJWF9GTVRfUFdDMSB2NGwyX2ZvdXJjYygnUCcsICdXJywgJ0MnLCAnMScpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBWNEwyX1BJWF9GTVRfUFdDMiB2NGwyX2ZvdXJjYygnUCcsICdXJywgJ0MnLCAnMicpCisjZGVmaW5lIFY0TDJfUElYX0ZNVF9FVDYxWDI1MSB2NGwyX2ZvdXJjYygnRScsICc2JywgJzInLCAnNScpCisjZGVmaW5lIFY0TDJfUElYX0ZNVF9TUENBNTAxIHY0bDJfZm91cmNjKCdTJywgJzUnLCAnMCcsICcxJykKKyNkZWZpbmUgVjRMMl9QSVhfRk1UX1NQQ0E1MDUgdjRsMl9mb3VyY2MoJ1MnLCAnNScsICcwJywgJzUnKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVjRMMl9QSVhfRk1UX1NQQ0E1MDggdjRsMl9mb3VyY2MoJ1MnLCAnNScsICcwJywgJzgnKQorI2RlZmluZSBWNEwyX1BJWF9GTVRfU1BDQTU2MSB2NGwyX2ZvdXJjYygnUycsICc1JywgJzYnLCAnMScpCisjZGVmaW5lIFY0TDJfUElYX0ZNVF9QQUMyMDcgdjRsMl9mb3VyY2MoJ1AnLCAnMicsICcwJywgJzcnKQorI2RlZmluZSBWNEwyX1BJWF9GTVRfTVI5NzMxMEEgdjRsMl9mb3VyY2MoJ00nLCAnMycsICcxJywgJzAnKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVjRMMl9QSVhfRk1UX0pMMjAwNUJDRCB2NGwyX2ZvdXJjYygnSicsICdMJywgJzInLCAnMCcpCisjZGVmaW5lIFY0TDJfUElYX0ZNVF9TTjlDMjAyOCB2NGwyX2ZvdXJjYygnUycsICdPJywgJ04nLCAnWCcpCisjZGVmaW5lIFY0TDJfUElYX0ZNVF9TUTkwNUMgdjRsMl9mb3VyY2MoJzknLCAnMCcsICc1JywgJ0MnKQorI2RlZmluZSBWNEwyX1BJWF9GTVRfUEpQRyB2NGwyX2ZvdXJjYygnUCcsICdKJywgJ1AnLCAnRycpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBWNEwyX1BJWF9GTVRfT1Y1MTEgdjRsMl9mb3VyY2MoJ08nLCAnNScsICcxJywgJzEnKQorI2RlZmluZSBWNEwyX1BJWF9GTVRfT1Y1MTggdjRsMl9mb3VyY2MoJ08nLCAnNScsICcxJywgJzgnKQorI2RlZmluZSBWNEwyX1BJWF9GTVRfU1RWMDY4MCB2NGwyX2ZvdXJjYygnUycsICc2JywgJzgnLCAnMCcpCisjZGVmaW5lIFY0TDJfUElYX0ZNVF9UTTYwMDAgdjRsMl9mb3VyY2MoJ1QnLCAnTScsICc2JywgJzAnKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVjRMMl9QSVhfRk1UX0NJVF9ZWVZZVVkgdjRsMl9mb3VyY2MoJ0MnLCAnSScsICdUJywgJ1YnKQorI2RlZmluZSBWNEwyX1BJWF9GTVRfS09OSUNBNDIwIHY0bDJfZm91cmNjKCdLJywgJ08nLCAnTicsICdJJykKKyNkZWZpbmUgVjRMMl9QSVhfRk1UX0pQR0wgdjRsMl9mb3VyY2MoJ0onLCAnUCcsICdHJywgJ0wnKQorI2RlZmluZSBWNEwyX1BJWF9GTVRfU0U0MDEgdjRsMl9mb3VyY2MoJ1MnLCAnNCcsICcwJywgJzEnKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVjRMMl9QSVhfRk1UX1NUQVRTX0NPTUIgdjRsMl9mb3VyY2MoJ1MnLCAnVCcsICdDJywgJ00nKQorI2RlZmluZSBWNEwyX1BJWF9GTVRfU1RBVFNfQUUgdjRsMl9mb3VyY2MoJ1MnLCAnVCcsICdBJywgJ0UnKQorI2RlZmluZSBWNEwyX1BJWF9GTVRfU1RBVFNfQUYgdjRsMl9mb3VyY2MoJ1MnLCAnVCcsICdBJywgJ0YnKQorI2RlZmluZSBWNEwyX1BJWF9GTVRfU1RBVFNfQVdCIHY0bDJfZm91cmNjKCdTJywgJ1QnLCAnVycsICdCJykKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFY0TDJfUElYX0ZNVF9TVEFUU19JSFNUIHY0bDJfZm91cmNjKCdJJywgJ0gnLCAnUycsICdUJykKKyNkZWZpbmUgVjRMMl9QSVhfRk1UX1NUQVRTX0NTIHY0bDJfZm91cmNjKCdTJywgJ1QnLCAnQycsICdTJykKKyNkZWZpbmUgVjRMMl9QSVhfRk1UX1NUQVRTX1JTIHY0bDJfZm91cmNjKCdTJywgJ1QnLCAnUicsICdTJykKKyNkZWZpbmUgVjRMMl9QSVhfRk1UX1NUQVRTX0JHIHY0bDJfZm91cmNjKCdTJywgJ1QnLCAnQicsICdHJykKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFY0TDJfUElYX0ZNVF9TVEFUU19CRiB2NGwyX2ZvdXJjYygnUycsICdUJywgJ0InLCAnRicpCisjZGVmaW5lIFY0TDJfUElYX0ZNVF9TVEFUU19CSFNUIHY0bDJfZm91cmNjKCdCJywgJ0gnLCAnUycsICdUJykKIHN0cnVjdCB2NGwyX2ZtdGRlc2MgewogIF9fdTMyIGluZGV4OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBlbnVtIHY0bDJfYnVmX3R5cGUgdHlwZTsKICBfX3UzMiBmbGFnczsKICBfX3U4IGRlc2NyaXB0aW9uWzMyXTsKICBfX3UzMiBwaXhlbGZvcm1hdDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgcmVzZXJ2ZWRbNF07CiB9OwotCiAjZGVmaW5lIFY0TDJfRk1UX0ZMQUdfQ09NUFJFU1NFRCAweDAwMDEKLQorI2RlZmluZSBWNEwyX0ZNVF9GTEFHX0VNVUxBVEVEIDB4MDAwMgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIGVudW0gdjRsMl9mcm1zaXpldHlwZXMgewogIFY0TDJfRlJNU0laRV9UWVBFX0RJU0NSRVRFID0gMSwKICBWNEwyX0ZSTVNJWkVfVFlQRV9DT05USU5VT1VTID0gMiwKICBWNEwyX0ZSTVNJWkVfVFlQRV9TVEVQV0lTRSA9IDMsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKLQogc3RydWN0IHY0bDJfZnJtc2l6ZV9kaXNjcmV0ZSB7CiAgX191MzIgd2lkdGg7CiAgX191MzIgaGVpZ2h0OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07Ci0KIHN0cnVjdCB2NGwyX2ZybXNpemVfc3RlcHdpc2UgewogIF9fdTMyIG1pbl93aWR0aDsKICBfX3UzMiBtYXhfd2lkdGg7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHN0ZXBfd2lkdGg7CiAgX191MzIgbWluX2hlaWdodDsKICBfX3UzMiBtYXhfaGVpZ2h0OwogIF9fdTMyIHN0ZXBfaGVpZ2h0OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07Ci0KIHN0cnVjdCB2NGwyX2ZybXNpemVlbnVtIHsKICBfX3UzMiBpbmRleDsKICBfX3UzMiBwaXhlbF9mb3JtYXQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHR5cGU7Ci0KICB1bmlvbiB7CiAgc3RydWN0IHY0bDJfZnJtc2l6ZV9kaXNjcmV0ZSBkaXNjcmV0ZTsKICBzdHJ1Y3QgdjRsMl9mcm1zaXplX3N0ZXB3aXNlIHN0ZXB3aXNlOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB9OwotCiAgX191MzIgcmVzZXJ2ZWRbMl07CiB9OwotCiBlbnVtIHY0bDJfZnJtaXZhbHR5cGVzIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVjRMMl9GUk1JVkFMX1RZUEVfRElTQ1JFVEUgPSAxLAogIFY0TDJfRlJNSVZBTF9UWVBFX0NPTlRJTlVPVVMgPSAyLAogIFY0TDJfRlJNSVZBTF9UWVBFX1NURVBXSVNFID0gMywKIH07Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgdjRsMl9mcm1pdmFsX3N0ZXB3aXNlIHsKICBzdHJ1Y3QgdjRsMl9mcmFjdCBtaW47CiAgc3RydWN0IHY0bDJfZnJhY3QgbWF4OwogIHN0cnVjdCB2NGwyX2ZyYWN0IHN0ZXA7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKLQogc3RydWN0IHY0bDJfZnJtaXZhbGVudW0gewogIF9fdTMyIGluZGV4OwogIF9fdTMyIHBpeGVsX2Zvcm1hdDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgd2lkdGg7CiAgX191MzIgaGVpZ2h0OwogIF9fdTMyIHR5cGU7Ci0KICB1bmlvbiB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCB2NGwyX2ZyYWN0IGRpc2NyZXRlOwogIHN0cnVjdCB2NGwyX2ZybWl2YWxfc3RlcHdpc2Ugc3RlcHdpc2U7CiAgfTsKLQogIF9fdTMyIHJlc2VydmVkWzJdOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07Ci0KIHN0cnVjdCB2NGwyX3RpbWVjb2RlIHsKICBfX3UzMiB0eXBlOwogIF9fdTMyIGZsYWdzOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IGZyYW1lczsKICBfX3U4IHNlY29uZHM7CiAgX191OCBtaW51dGVzOwogIF9fdTggaG91cnM7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTggdXNlcmJpdHNbNF07CiB9OwotCiAjZGVmaW5lIFY0TDJfVENfVFlQRV8yNEZQUyAxCiAjZGVmaW5lIFY0TDJfVENfVFlQRV8yNUZQUyAyCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX1RDX1RZUEVfMzBGUFMgMwogI2RlZmluZSBWNEwyX1RDX1RZUEVfNTBGUFMgNAogI2RlZmluZSBWNEwyX1RDX1RZUEVfNjBGUFMgNQotCi0jZGVmaW5lIFY0TDJfVENfRkxBR19EUk9QRlJBTUUgMHgwMDAxICAKKyNkZWZpbmUgVjRMMl9UQ19GTEFHX0RST1BGUkFNRSAweDAwMDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfVENfRkxBR19DT0xPUkZSQU1FIDB4MDAwMgogI2RlZmluZSBWNEwyX1RDX1VTRVJCSVRTX2ZpZWxkIDB4MDAwQwogI2RlZmluZSBWNEwyX1RDX1VTRVJCSVRTX1VTRVJERUZJTkVEIDB4MDAwMAogI2RlZmluZSBWNEwyX1RDX1VTRVJCSVRTXzhCSVRDSEFSUyAweDAwMDgKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCB2NGwyX2pwZWdjb21wcmVzc2lvbiB7CiAgaW50IHF1YWxpdHk7Ci0KICBpbnQgQVBQbjsKICBpbnQgQVBQX2xlbjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgY2hhciBBUFBfZGF0YVs2MF07Ci0KICBpbnQgQ09NX2xlbjsKICBjaGFyIENPTV9kYXRhWzYwXTsKLQogIF9fdTMyIGpwZWdfbWFya2VyczsKLQotI2RlZmluZSBWNEwyX0pQRUdfTUFSS0VSX0RIVCAoMTw8MykgIAotI2RlZmluZSBWNEwyX0pQRUdfTUFSS0VSX0RRVCAoMTw8NCkgIAotI2RlZmluZSBWNEwyX0pQRUdfTUFSS0VSX0RSSSAoMTw8NSkgIAotI2RlZmluZSBWNEwyX0pQRUdfTUFSS0VSX0NPTSAoMTw8NikgIAotI2RlZmluZSBWNEwyX0pQRUdfTUFSS0VSX0FQUCAoMTw8NykgIAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVjRMMl9KUEVHX01BUktFUl9ESFQgKDE8PDMpCisjZGVmaW5lIFY0TDJfSlBFR19NQVJLRVJfRFFUICgxPDw0KQorI2RlZmluZSBWNEwyX0pQRUdfTUFSS0VSX0RSSSAoMTw8NSkKKyNkZWZpbmUgVjRMMl9KUEVHX01BUktFUl9DT00gKDE8PDYpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBWNEwyX0pQRUdfTUFSS0VSX0FQUCAoMTw8NykKIH07Ci0KIHN0cnVjdCB2NGwyX3JlcXVlc3RidWZmZXJzIHsKICBfX3UzMiBjb3VudDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgZW51bSB2NGwyX2J1Zl90eXBlIHR5cGU7CiAgZW51bSB2NGwyX21lbW9yeSBtZW1vcnk7CiAgX191MzIgcmVzZXJ2ZWRbMl07CiB9OwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworc3RydWN0IHY0bDJfcGxhbmUgeworIF9fdTMyIGJ5dGVzdXNlZDsKKyBfX3UzMiBsZW5ndGg7CisgdW5pb24geworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UzMiBtZW1fb2Zmc2V0OworIHVuc2lnbmVkIGxvbmcgdXNlcnB0cjsKKyB9IG07CisgX191MzIgZGF0YV9vZmZzZXQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTMyIHJlc2VydmVkWzExXTsKK307CiBzdHJ1Y3QgdjRsMl9idWZmZXIgewogIF9fdTMyIGluZGV4OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBlbnVtIHY0bDJfYnVmX3R5cGUgdHlwZTsKICBfX3UzMiBieXRlc3VzZWQ7CiAgX191MzIgZmxhZ3M7CiAgZW51bSB2NGwyX2ZpZWxkIGZpZWxkOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgdGltZXZhbCB0aW1lc3RhbXA7CiAgc3RydWN0IHY0bDJfdGltZWNvZGUgdGltZWNvZGU7CiAgX191MzIgc2VxdWVuY2U7Ci0KICBlbnVtIHY0bDJfbWVtb3J5IG1lbW9yeTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5pb24gewogIF9fdTMyIG9mZnNldDsKICB1bnNpZ25lZCBsb25nIHVzZXJwdHI7Cisgc3RydWN0IHY0bDJfcGxhbmUgKnBsYW5lczsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgfSBtOwogIF9fdTMyIGxlbmd0aDsKICBfX3UzMiBpbnB1dDsKICBfX3UzMiByZXNlcnZlZDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwotCi0jZGVmaW5lIFY0TDJfQlVGX0ZMQUdfTUFQUEVEIDB4MDAwMSAgCi0jZGVmaW5lIFY0TDJfQlVGX0ZMQUdfUVVFVUVEIDB4MDAwMiAgCi0jZGVmaW5lIFY0TDJfQlVGX0ZMQUdfRE9ORSAweDAwMDQgIAotI2RlZmluZSBWNEwyX0JVRl9GTEFHX0tFWUZSQU1FIDB4MDAwOCAgCi0jZGVmaW5lIFY0TDJfQlVGX0ZMQUdfUEZSQU1FIDB4MDAxMCAgCi0jZGVmaW5lIFY0TDJfQlVGX0ZMQUdfQkZSQU1FIDB4MDAyMCAgCi0jZGVmaW5lIFY0TDJfQlVGX0ZMQUdfVElNRUNPREUgMHgwMTAwICAKLSNkZWZpbmUgVjRMMl9CVUZfRkxBR19JTlBVVCAweDAyMDAgIAotCisjZGVmaW5lIFY0TDJfQlVGX0ZMQUdfTUFQUEVEIDB4MDAwMQorI2RlZmluZSBWNEwyX0JVRl9GTEFHX1FVRVVFRCAweDAwMDIKKyNkZWZpbmUgVjRMMl9CVUZfRkxBR19ET05FIDB4MDAwNAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVjRMMl9CVUZfRkxBR19LRVlGUkFNRSAweDAwMDgKKyNkZWZpbmUgVjRMMl9CVUZfRkxBR19QRlJBTUUgMHgwMDEwCisjZGVmaW5lIFY0TDJfQlVGX0ZMQUdfQkZSQU1FIDB4MDAyMAorI2RlZmluZSBWNEwyX0JVRl9GTEFHX0VSUk9SIDB4MDA0MAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVjRMMl9CVUZfRkxBR19USU1FQ09ERSAweDAxMDAKKyNkZWZpbmUgVjRMMl9CVUZfRkxBR19JTlBVVCAweDAyMDAKKyNkZWZpbmUgVjRMMl9CVUZfRkxBR19QUkVQQVJFRCAweDA0MDAKKyNkZWZpbmUgVjRMMl9CVUZfRkxBR19OT19DQUNIRV9JTlZBTElEQVRFIDB4MDgwMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVjRMMl9CVUZfRkxBR19OT19DQUNIRV9DTEVBTiAweDEwMDAKKyNkZWZpbmUgVjRMMl9CVUZfRkxBR19FT1MgMHgyMDAwCiBzdHJ1Y3QgdjRsMl9mcmFtZWJ1ZmZlciB7CiAgX191MzIgY2FwYWJpbGl0eTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgZmxhZ3M7Ci0KICB2b2lkICpiYXNlOwogIHN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgZm10OwogfTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9GQlVGX0NBUF9FWFRFUk5PVkVSTEFZIDB4MDAwMQogI2RlZmluZSBWNEwyX0ZCVUZfQ0FQX0NIUk9NQUtFWSAweDAwMDIKICNkZWZpbmUgVjRMMl9GQlVGX0NBUF9MSVNUX0NMSVBQSU5HIDB4MDAwNAogI2RlZmluZSBWNEwyX0ZCVUZfQ0FQX0JJVE1BUF9DTElQUElORyAweDAwMDgKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfRkJVRl9DQVBfTE9DQUxfQUxQSEEgMHgwMDEwCiAjZGVmaW5lIFY0TDJfRkJVRl9DQVBfR0xPQkFMX0FMUEhBIDB4MDAyMAogI2RlZmluZSBWNEwyX0ZCVUZfQ0FQX0xPQ0FMX0lOVl9BTFBIQSAweDAwNDAKICNkZWZpbmUgVjRMMl9GQlVGX0NBUF9TUkNfQ0hST01BS0VZIDB4MDA4MAotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX0ZCVUZfRkxBR19QUklNQVJZIDB4MDAwMQogI2RlZmluZSBWNEwyX0ZCVUZfRkxBR19PVkVSTEFZIDB4MDAwMgogI2RlZmluZSBWNEwyX0ZCVUZfRkxBR19DSFJPTUFLRVkgMHgwMDA0CiAjZGVmaW5lIFY0TDJfRkJVRl9GTEFHX0xPQ0FMX0FMUEhBIDB4MDAwOAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9GQlVGX0ZMQUdfR0xPQkFMX0FMUEhBIDB4MDAxMAogI2RlZmluZSBWNEwyX0ZCVUZfRkxBR19MT0NBTF9JTlZfQUxQSEEgMHgwMDIwCiAjZGVmaW5lIFY0TDJfRkJVRl9GTEFHX1NSQ19DSFJPTUFLRVkgMHgwMDQwCi0KIHN0cnVjdCB2NGwyX2NsaXAgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgdjRsMl9yZWN0IGM7CiAgc3RydWN0IHY0bDJfY2xpcCBfX3VzZXIgKm5leHQ7CiB9OwotCiBzdHJ1Y3QgdjRsMl93aW5kb3cgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgdjRsMl9yZWN0IHc7CiAgZW51bSB2NGwyX2ZpZWxkIGZpZWxkOwogIF9fdTMyIGNocm9tYWtleTsKICBzdHJ1Y3QgdjRsMl9jbGlwIF9fdXNlciAqY2xpcHM7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGNsaXBjb3VudDsKICB2b2lkIF9fdXNlciAqYml0bWFwOwogIF9fdTggZ2xvYmFsX2FscGhhOwogfTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCB2NGwyX2NhcHR1cmVwYXJtIHsKICBfX3UzMiBjYXBhYmlsaXR5OwogIF9fdTMyIGNhcHR1cmVtb2RlOwogIHN0cnVjdCB2NGwyX2ZyYWN0IHRpbWVwZXJmcmFtZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgZXh0ZW5kZWRtb2RlOwogIF9fdTMyIHJlYWRidWZmZXJzOwogIF9fdTMyIHJlc2VydmVkWzRdOwogfTsKLQotI2RlZmluZSBWNEwyX01PREVfSElHSFFVQUxJVFkgMHgwMDAxICAKLSNkZWZpbmUgVjRMMl9DQVBfVElNRVBFUkZSQU1FIDB4MTAwMCAgCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFY0TDJfTU9ERV9ISUdIUVVBTElUWSAweDAwMDEKKyNkZWZpbmUgVjRMMl9DQVBfVElNRVBFUkZSQU1FIDB4MTAwMAorI2RlZmluZSBWNEwyX0NBUF9RQ09NX0ZSQU1FU0tJUCAweDIwMDAKK3N0cnVjdCB2NGwyX3Fjb21fZnJhbWVza2lwIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191NjQgbWF4ZnJhbWVpbnRlcnZhbDsKK307CiBzdHJ1Y3QgdjRsMl9vdXRwdXRwYXJtIHsKICBfX3UzMiBjYXBhYmlsaXR5OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBvdXRwdXRtb2RlOwogIHN0cnVjdCB2NGwyX2ZyYWN0IHRpbWVwZXJmcmFtZTsKICBfX3UzMiBleHRlbmRlZG1vZGU7CiAgX191MzIgd3JpdGVidWZmZXJzOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiByZXNlcnZlZFs0XTsKIH07Ci0KIHN0cnVjdCB2NGwyX2Nyb3BjYXAgewogIGVudW0gdjRsMl9idWZfdHlwZSB0eXBlOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgdjRsMl9yZWN0IGJvdW5kczsKICBzdHJ1Y3QgdjRsMl9yZWN0IGRlZnJlY3Q7CiAgc3RydWN0IHY0bDJfZnJhY3QgcGl4ZWxhc3BlY3Q7CiB9OwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IHY0bDJfY3JvcCB7CiAgZW51bSB2NGwyX2J1Zl90eXBlIHR5cGU7CiAgc3RydWN0IHY0bDJfcmVjdCBjOwogfTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVjRMMl9TRUxfRkxBR19HRSAweDAwMDAwMDAxCisjZGVmaW5lIFY0TDJfU0VMX0ZMQUdfTEUgMHgwMDAwMDAwMgorI2RlZmluZSBWNEwyX1NFTF9UR1RfQ1JPUF9BQ1RJVkUgMHgwMDAwCisjZGVmaW5lIFY0TDJfU0VMX1RHVF9DUk9QX0RFRkFVTFQgMHgwMDAxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBWNEwyX1NFTF9UR1RfQ1JPUF9CT1VORFMgMHgwMDAyCisjZGVmaW5lIFY0TDJfU0VMX1RHVF9DT01QT1NFX0FDVElWRSAweDAxMDAKKyNkZWZpbmUgVjRMMl9TRUxfVEdUX0NPTVBPU0VfREVGQVVMVCAweDAxMDEKKyNkZWZpbmUgVjRMMl9TRUxfVEdUX0NPTVBPU0VfQk9VTkRTIDB4MDEwMgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVjRMMl9TRUxfVEdUX0NPTVBPU0VfUEFEREVEIDB4MDEwMworc3RydWN0IHY0bDJfc2VsZWN0aW9uIHsKKyBfX3UzMiB0eXBlOworIF9fdTMyIHRhcmdldDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MzIgZmxhZ3M7Cisgc3RydWN0IHY0bDJfcmVjdCByOworIF9fdTMyIHJlc2VydmVkWzldOworfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB0eXBlZGVmIF9fdTY0IHY0bDJfc3RkX2lkOwotCiAjZGVmaW5lIFY0TDJfU1REX1BBTF9CICgodjRsMl9zdGRfaWQpMHgwMDAwMDAwMSkKICNkZWZpbmUgVjRMMl9TVERfUEFMX0IxICgodjRsMl9zdGRfaWQpMHgwMDAwMDAwMikKICNkZWZpbmUgVjRMMl9TVERfUEFMX0cgKCh2NGwyX3N0ZF9pZCkweDAwMDAwMDA0KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9TVERfUEFMX0ggKCh2NGwyX3N0ZF9pZCkweDAwMDAwMDA4KQogI2RlZmluZSBWNEwyX1NURF9QQUxfSSAoKHY0bDJfc3RkX2lkKTB4MDAwMDAwMTApCiAjZGVmaW5lIFY0TDJfU1REX1BBTF9EICgodjRsMl9zdGRfaWQpMHgwMDAwMDAyMCkKICNkZWZpbmUgVjRMMl9TVERfUEFMX0QxICgodjRsMl9zdGRfaWQpMHgwMDAwMDA0MCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfU1REX1BBTF9LICgodjRsMl9zdGRfaWQpMHgwMDAwMDA4MCkKLQogI2RlZmluZSBWNEwyX1NURF9QQUxfTSAoKHY0bDJfc3RkX2lkKTB4MDAwMDAxMDApCiAjZGVmaW5lIFY0TDJfU1REX1BBTF9OICgodjRsMl9zdGRfaWQpMHgwMDAwMDIwMCkKICNkZWZpbmUgVjRMMl9TVERfUEFMX05jICgodjRsMl9zdGRfaWQpMHgwMDAwMDQwMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfU1REX1BBTF82MCAoKHY0bDJfc3RkX2lkKTB4MDAwMDA4MDApCi0KICNkZWZpbmUgVjRMMl9TVERfTlRTQ19NICgodjRsMl9zdGRfaWQpMHgwMDAwMTAwMCkKICNkZWZpbmUgVjRMMl9TVERfTlRTQ19NX0pQICgodjRsMl9zdGRfaWQpMHgwMDAwMjAwMCkKICNkZWZpbmUgVjRMMl9TVERfTlRTQ180NDMgKCh2NGwyX3N0ZF9pZCkweDAwMDA0MDAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9TVERfTlRTQ19NX0tSICgodjRsMl9zdGRfaWQpMHgwMDAwODAwMCkKLQogI2RlZmluZSBWNEwyX1NURF9TRUNBTV9CICgodjRsMl9zdGRfaWQpMHgwMDAxMDAwMCkKICNkZWZpbmUgVjRMMl9TVERfU0VDQU1fRCAoKHY0bDJfc3RkX2lkKTB4MDAwMjAwMDApCiAjZGVmaW5lIFY0TDJfU1REX1NFQ0FNX0cgKCh2NGwyX3N0ZF9pZCkweDAwMDQwMDAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9TVERfU0VDQU1fSCAoKHY0bDJfc3RkX2lkKTB4MDAwODAwMDApCiAjZGVmaW5lIFY0TDJfU1REX1NFQ0FNX0sgKCh2NGwyX3N0ZF9pZCkweDAwMTAwMDAwKQogI2RlZmluZSBWNEwyX1NURF9TRUNBTV9LMSAoKHY0bDJfc3RkX2lkKTB4MDAyMDAwMDApCiAjZGVmaW5lIFY0TDJfU1REX1NFQ0FNX0wgKCh2NGwyX3N0ZF9pZCkweDAwNDAwMDAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9TVERfU0VDQU1fTEMgKCh2NGwyX3N0ZF9pZCkweDAwODAwMDAwKQotCiAjZGVmaW5lIFY0TDJfU1REX0FUU0NfOF9WU0IgKCh2NGwyX3N0ZF9pZCkweDAxMDAwMDAwKQogI2RlZmluZSBWNEwyX1NURF9BVFNDXzE2X1ZTQiAoKHY0bDJfc3RkX2lkKTB4MDIwMDAwMDApCi0KLSNkZWZpbmUgVjRMMl9TVERfTU4gKFY0TDJfU1REX1BBTF9NfFY0TDJfU1REX1BBTF9OfFY0TDJfU1REX1BBTF9OY3xWNEwyX1NURF9OVFNDKQotI2RlZmluZSBWNEwyX1NURF9CIChWNEwyX1NURF9QQUxfQnxWNEwyX1NURF9QQUxfQjF8VjRMMl9TVERfU0VDQU1fQikKLSNkZWZpbmUgVjRMMl9TVERfR0ggKFY0TDJfU1REX1BBTF9HfFY0TDJfU1REX1BBTF9IfFY0TDJfU1REX1NFQ0FNX0d8VjRMMl9TVERfU0VDQU1fSCkKLSNkZWZpbmUgVjRMMl9TVERfREsgKFY0TDJfU1REX1BBTF9ES3xWNEwyX1NURF9TRUNBTV9ESykKLQotI2RlZmluZSBWNEwyX1NURF9QQUxfQkcgKFY0TDJfU1REX1BBTF9CIHwgIFY0TDJfU1REX1BBTF9CMSB8ICBWNEwyX1NURF9QQUxfRykKLSNkZWZpbmUgVjRMMl9TVERfUEFMX0RLIChWNEwyX1NURF9QQUxfRCB8ICBWNEwyX1NURF9QQUxfRDEgfCAgVjRMMl9TVERfUEFMX0spCi0jZGVmaW5lIFY0TDJfU1REX1BBTCAoVjRMMl9TVERfUEFMX0JHIHwgIFY0TDJfU1REX1BBTF9ESyB8ICBWNEwyX1NURF9QQUxfSCB8ICBWNEwyX1NURF9QQUxfSSkKICNkZWZpbmUgVjRMMl9TVERfTlRTQyAoVjRMMl9TVERfTlRTQ19NIHwgIFY0TDJfU1REX05UU0NfTV9KUCB8ICBWNEwyX1NURF9OVFNDX01fS1IpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX1NURF9TRUNBTV9ESyAoVjRMMl9TVERfU0VDQU1fRCB8ICBWNEwyX1NURF9TRUNBTV9LIHwgIFY0TDJfU1REX1NFQ0FNX0sxKQogI2RlZmluZSBWNEwyX1NURF9TRUNBTSAoVjRMMl9TVERfU0VDQU1fQiB8ICBWNEwyX1NURF9TRUNBTV9HIHwgIFY0TDJfU1REX1NFQ0FNX0ggfCAgVjRMMl9TVERfU0VDQU1fREsgfCAgVjRMMl9TVERfU0VDQU1fTCB8ICBWNEwyX1NURF9TRUNBTV9MQykKLQorI2RlZmluZSBWNEwyX1NURF9QQUxfQkcgKFY0TDJfU1REX1BBTF9CIHwgIFY0TDJfU1REX1BBTF9CMSB8ICBWNEwyX1NURF9QQUxfRykKKyNkZWZpbmUgVjRMMl9TVERfUEFMX0RLIChWNEwyX1NURF9QQUxfRCB8ICBWNEwyX1NURF9QQUxfRDEgfCAgVjRMMl9TVERfUEFMX0spCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBWNEwyX1NURF9QQUwgKFY0TDJfU1REX1BBTF9CRyB8ICBWNEwyX1NURF9QQUxfREsgfCAgVjRMMl9TVERfUEFMX0ggfCAgVjRMMl9TVERfUEFMX0kpCisjZGVmaW5lIFY0TDJfU1REX0IgKFY0TDJfU1REX1BBTF9CIHwgIFY0TDJfU1REX1BBTF9CMSB8ICBWNEwyX1NURF9TRUNBTV9CKQorI2RlZmluZSBWNEwyX1NURF9HIChWNEwyX1NURF9QQUxfRyB8ICBWNEwyX1NURF9TRUNBTV9HKQorI2RlZmluZSBWNEwyX1NURF9IIChWNEwyX1NURF9QQUxfSCB8ICBWNEwyX1NURF9TRUNBTV9IKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVjRMMl9TVERfTCAoVjRMMl9TVERfU0VDQU1fTCB8ICBWNEwyX1NURF9TRUNBTV9MQykKKyNkZWZpbmUgVjRMMl9TVERfR0ggKFY0TDJfU1REX0cgfCAgVjRMMl9TVERfSCkKKyNkZWZpbmUgVjRMMl9TVERfREsgKFY0TDJfU1REX1BBTF9ESyB8ICBWNEwyX1NURF9TRUNBTV9ESykKKyNkZWZpbmUgVjRMMl9TVERfQkcgKFY0TDJfU1REX0IgfCAgVjRMMl9TVERfRykKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFY0TDJfU1REX01OIChWNEwyX1NURF9QQUxfTSB8ICBWNEwyX1NURF9QQUxfTiB8ICBWNEwyX1NURF9QQUxfTmMgfCAgVjRMMl9TVERfTlRTQykKKyNkZWZpbmUgVjRMMl9TVERfTVRTIChWNEwyX1NURF9OVFNDX00gfCAgVjRMMl9TVERfUEFMX00gfCAgVjRMMl9TVERfUEFMX04gfCAgVjRMMl9TVERfUEFMX05jKQogI2RlZmluZSBWNEwyX1NURF81MjVfNjAgKFY0TDJfU1REX1BBTF9NIHwgIFY0TDJfU1REX1BBTF82MCB8ICBWNEwyX1NURF9OVFNDIHwgIFY0TDJfU1REX05UU0NfNDQzKQogI2RlZmluZSBWNEwyX1NURF82MjVfNTAgKFY0TDJfU1REX1BBTCB8ICBWNEwyX1NURF9QQUxfTiB8ICBWNEwyX1NURF9QQUxfTmMgfCAgVjRMMl9TVERfU0VDQU0pCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX1NURF9BVFNDIChWNEwyX1NURF9BVFNDXzhfVlNCIHwgIFY0TDJfU1REX0FUU0NfMTZfVlNCKQotCiAjZGVmaW5lIFY0TDJfU1REX1VOS05PV04gMAogI2RlZmluZSBWNEwyX1NURF9BTEwgKFY0TDJfU1REXzUyNV82MCB8ICBWNEwyX1NURF82MjVfNTApCi0KIHN0cnVjdCB2NGwyX3N0YW5kYXJkIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgaW5kZXg7CiAgdjRsMl9zdGRfaWQgaWQ7CiAgX191OCBuYW1lWzI0XTsKICBzdHJ1Y3QgdjRsMl9mcmFjdCBmcmFtZXBlcmlvZDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgZnJhbWVsaW5lczsKICBfX3UzMiByZXNlcnZlZFs0XTsKIH07Ci0KK3N0cnVjdCB2NGwyX2R2X3ByZXNldCB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTMyIHByZXNldDsKKyBfX3UzMiByZXNlcnZlZFs0XTsKK307CitzdHJ1Y3QgdjRsMl9kdl9lbnVtX3ByZXNldCB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTMyIGluZGV4OworIF9fdTMyIHByZXNldDsKKyBfX3U4IG5hbWVbMzJdOworIF9fdTMyIHdpZHRoOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UzMiBoZWlnaHQ7CisgX191MzIgcmVzZXJ2ZWRbNF07Cit9OworI2RlZmluZSBWNEwyX0RWX0lOVkFMSUQgMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVjRMMl9EVl80ODBQNTlfOTQgMQorI2RlZmluZSBWNEwyX0RWXzU3NlA1MCAyCisjZGVmaW5lIFY0TDJfRFZfNzIwUDI0IDMKKyNkZWZpbmUgVjRMMl9EVl83MjBQMjUgNAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVjRMMl9EVl83MjBQMzAgNQorI2RlZmluZSBWNEwyX0RWXzcyMFA1MCA2CisjZGVmaW5lIFY0TDJfRFZfNzIwUDU5Xzk0IDcKKyNkZWZpbmUgVjRMMl9EVl83MjBQNjAgOAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVjRMMl9EVl8xMDgwSTI5Xzk3IDkKKyNkZWZpbmUgVjRMMl9EVl8xMDgwSTMwIDEwCisjZGVmaW5lIFY0TDJfRFZfMTA4MEkyNSAxMQorI2RlZmluZSBWNEwyX0RWXzEwODBJNTAgMTIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFY0TDJfRFZfMTA4MEk2MCAxMworI2RlZmluZSBWNEwyX0RWXzEwODBQMjQgMTQKKyNkZWZpbmUgVjRMMl9EVl8xMDgwUDI1IDE1CisjZGVmaW5lIFY0TDJfRFZfMTA4MFAzMCAxNgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVjRMMl9EVl8xMDgwUDUwIDE3CisjZGVmaW5lIFY0TDJfRFZfMTA4MFA2MCAxOAorc3RydWN0IHY0bDJfYnRfdGltaW5ncyB7CisgX191MzIgd2lkdGg7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTMyIGhlaWdodDsKKyBfX3UzMiBpbnRlcmxhY2VkOworIF9fdTMyIHBvbGFyaXRpZXM7CisgX191NjQgcGl4ZWxjbG9jazsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MzIgaGZyb250cG9yY2g7CisgX191MzIgaHN5bmM7CisgX191MzIgaGJhY2twb3JjaDsKKyBfX3UzMiB2ZnJvbnRwb3JjaDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MzIgdnN5bmM7CisgX191MzIgdmJhY2twb3JjaDsKKyBfX3UzMiBpbF92ZnJvbnRwb3JjaDsKKyBfX3UzMiBpbF92c3luYzsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MzIgaWxfdmJhY2twb3JjaDsKKyBfX3UzMiByZXNlcnZlZFsxNl07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKyNkZWZpbmUgVjRMMl9EVl9QUk9HUkVTU0lWRSAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBWNEwyX0RWX0lOVEVSTEFDRUQgMQorI2RlZmluZSBWNEwyX0RWX1ZTWU5DX1BPU19QT0wgMHgwMDAwMDAwMQorI2RlZmluZSBWNEwyX0RWX0hTWU5DX1BPU19QT0wgMHgwMDAwMDAwMgorc3RydWN0IHY0bDJfZHZfdGltaW5ncyB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTMyIHR5cGU7CisgdW5pb24geworIHN0cnVjdCB2NGwyX2J0X3RpbWluZ3MgYnQ7CisgX191MzIgcmVzZXJ2ZWRbMzJdOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyB9OworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisjZGVmaW5lIFY0TDJfRFZfQlRfNjU2XzExMjAgMAogc3RydWN0IHY0bDJfaW5wdXQgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBpbmRleDsKICBfX3U4IG5hbWVbMzJdOwogIF9fdTMyIHR5cGU7CiAgX191MzIgYXVkaW9zZXQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHR1bmVyOwogIHY0bDJfc3RkX2lkIHN0ZDsKICBfX3UzMiBzdGF0dXM7Ci0gX191MzIgcmVzZXJ2ZWRbNF07CisgX191MzIgY2FwYWJpbGl0aWVzOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UzMiByZXNlcnZlZFszXTsKIH07Ci0KICNkZWZpbmUgVjRMMl9JTlBVVF9UWVBFX1RVTkVSIDEKICNkZWZpbmUgVjRMMl9JTlBVVF9UWVBFX0NBTUVSQSAyCi0KLSNkZWZpbmUgVjRMMl9JTl9TVF9OT19QT1dFUiAweDAwMDAwMDAxICAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFY0TDJfSU5fU1RfTk9fUE9XRVIgMHgwMDAwMDAwMQogI2RlZmluZSBWNEwyX0lOX1NUX05PX1NJR05BTCAweDAwMDAwMDAyCiAjZGVmaW5lIFY0TDJfSU5fU1RfTk9fQ09MT1IgMHgwMDAwMDAwNAotCi0jZGVmaW5lIFY0TDJfSU5fU1RfTk9fSF9MT0NLIDB4MDAwMDAxMDAgIAotI2RlZmluZSBWNEwyX0lOX1NUX0NPTE9SX0tJTEwgMHgwMDAwMDIwMCAgCi0KLSNkZWZpbmUgVjRMMl9JTl9TVF9OT19TWU5DIDB4MDAwMTAwMDAgIAotI2RlZmluZSBWNEwyX0lOX1NUX05PX0VRVSAweDAwMDIwMDAwICAKLSNkZWZpbmUgVjRMMl9JTl9TVF9OT19DQVJSSUVSIDB4MDAwNDAwMDAgIAotCi0jZGVmaW5lIFY0TDJfSU5fU1RfTUFDUk9WSVNJT04gMHgwMTAwMDAwMCAgCi0jZGVmaW5lIFY0TDJfSU5fU1RfTk9fQUNDRVNTIDB4MDIwMDAwMDAgIAotI2RlZmluZSBWNEwyX0lOX1NUX1ZUUiAweDA0MDAwMDAwICAKLQorI2RlZmluZSBWNEwyX0lOX1NUX0hGTElQIDB4MDAwMDAwMTAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFY0TDJfSU5fU1RfVkZMSVAgMHgwMDAwMDAyMAorI2RlZmluZSBWNEwyX0lOX1NUX05PX0hfTE9DSyAweDAwMDAwMTAwCisjZGVmaW5lIFY0TDJfSU5fU1RfQ09MT1JfS0lMTCAweDAwMDAwMjAwCisjZGVmaW5lIFY0TDJfSU5fU1RfTk9fU1lOQyAweDAwMDEwMDAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBWNEwyX0lOX1NUX05PX0VRVSAweDAwMDIwMDAwCisjZGVmaW5lIFY0TDJfSU5fU1RfTk9fQ0FSUklFUiAweDAwMDQwMDAwCisjZGVmaW5lIFY0TDJfSU5fU1RfTUFDUk9WSVNJT04gMHgwMTAwMDAwMAorI2RlZmluZSBWNEwyX0lOX1NUX05PX0FDQ0VTUyAweDAyMDAwMDAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBWNEwyX0lOX1NUX1ZUUiAweDA0MDAwMDAwCisjZGVmaW5lIFY0TDJfSU5fQ0FQX1BSRVNFVFMgMHgwMDAwMDAwMQorI2RlZmluZSBWNEwyX0lOX0NBUF9DVVNUT01fVElNSU5HUyAweDAwMDAwMDAyCisjZGVmaW5lIFY0TDJfSU5fQ0FQX1NURCAweDAwMDAwMDA0CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IHY0bDJfb3V0cHV0IHsKICBfX3UzMiBpbmRleDsKICBfX3U4IG5hbWVbMzJdOwogIF9fdTMyIHR5cGU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGF1ZGlvc2V0OwogIF9fdTMyIG1vZHVsYXRvcjsKICB2NGwyX3N0ZF9pZCBzdGQ7Ci0gX191MzIgcmVzZXJ2ZWRbNF07CisgX191MzIgY2FwYWJpbGl0aWVzOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UzMiByZXNlcnZlZFszXTsKIH07Ci0KICNkZWZpbmUgVjRMMl9PVVRQVVRfVFlQRV9NT0RVTEFUT1IgMQogI2RlZmluZSBWNEwyX09VVFBVVF9UWVBFX0FOQUxPRyAyCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX09VVFBVVF9UWVBFX0FOQUxPR1ZHQU9WRVJMQVkgMwotCisjZGVmaW5lIFY0TDJfT1VUX0NBUF9QUkVTRVRTIDB4MDAwMDAwMDEKKyNkZWZpbmUgVjRMMl9PVVRfQ0FQX0NVU1RPTV9USU1JTkdTIDB4MDAwMDAwMDIKKyNkZWZpbmUgVjRMMl9PVVRfQ0FQX1NURCAweDAwMDAwMDA0CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IHY0bDJfY29udHJvbCB7CiAgX191MzIgaWQ7CiAgX19zMzIgdmFsdWU7CiB9OwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IHY0bDJfZXh0X2NvbnRyb2wgewogIF9fdTMyIGlkOwotIF9fdTMyIHJlc2VydmVkMlsyXTsKKyBfX3UzMiBzaXplOworIF9fdTMyIHJlc2VydmVkMlsxXTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5pb24gewogIF9fczMyIHZhbHVlOwogIF9fczY0IHZhbHVlNjQ7Ci0gdm9pZCAqcmVzZXJ2ZWQ7CisgY2hhciAqc3RyaW5nOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB9OwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KIHN0cnVjdCB2NGwyX2V4dF9jb250cm9scyB7CiAgX191MzIgY3RybF9jbGFzczsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgY291bnQ7CiAgX191MzIgZXJyb3JfaWR4OwogIF9fdTMyIHJlc2VydmVkWzJdOwogIHN0cnVjdCB2NGwyX2V4dF9jb250cm9sICpjb250cm9sczsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwotCi0jZGVmaW5lIFY0TDJfQ1RSTF9DTEFTU19VU0VSIDB4MDA5ODAwMDAgIAotI2RlZmluZSBWNEwyX0NUUkxfQ0xBU1NfTVBFRyAweDAwOTkwMDAwICAKLSNkZWZpbmUgVjRMMl9DVFJMX0NMQVNTX0NBTUVSQSAweDAwOWEwMDAwICAKLQorI2RlZmluZSBWNEwyX0NUUkxfQ0xBU1NfVVNFUiAweDAwOTgwMDAwCisjZGVmaW5lIFY0TDJfQ1RSTF9DTEFTU19NUEVHIDB4MDA5OTAwMDAKKyNkZWZpbmUgVjRMMl9DVFJMX0NMQVNTX0NBTUVSQSAweDAwOWEwMDAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBWNEwyX0NUUkxfQ0xBU1NfRk1fVFggMHgwMDliMDAwMAorI2RlZmluZSBWNEwyX0NUUkxfQ0xBU1NfRkxBU0ggMHgwMDljMDAwMAorI2RlZmluZSBWNEwyX0NUUkxfQ0xBU1NfSlBFRyAweDAwOWQwMDAwCiAjZGVmaW5lIFY0TDJfQ1RSTF9JRF9NQVNLICgweDBmZmZmZmZmKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9DVFJMX0lEMkNMQVNTKGlkKSAoKGlkKSAmIDB4MGZmZjAwMDBVTCkKICNkZWZpbmUgVjRMMl9DVFJMX0RSSVZFUl9QUklWKGlkKSAoKChpZCkgJiAweGZmZmYpID49IDB4MTAwMCkKLQorZW51bSB2NGwyX2N0cmxfdHlwZSB7CisgVjRMMl9DVFJMX1RZUEVfSU5URUdFUiA9IDEsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIFY0TDJfQ1RSTF9UWVBFX0JPT0xFQU4gPSAyLAorIFY0TDJfQ1RSTF9UWVBFX01FTlUgPSAzLAorIFY0TDJfQ1RSTF9UWVBFX0JVVFRPTiA9IDQsCisgVjRMMl9DVFJMX1RZUEVfSU5URUdFUjY0ID0gNSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgVjRMMl9DVFJMX1RZUEVfQ1RSTF9DTEFTUyA9IDYsCisgVjRMMl9DVFJMX1RZUEVfU1RSSU5HID0gNywKKyBWNEwyX0NUUkxfVFlQRV9CSVRNQVNLID0gOCwKK307CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IHY0bDJfcXVlcnljdHJsIHsKICBfX3UzMiBpZDsKICBlbnVtIHY0bDJfY3RybF90eXBlIHR5cGU7CiAgX191OCBuYW1lWzMyXTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX19zMzIgbWluaW11bTsKICBfX3MzMiBtYXhpbXVtOwogIF9fczMyIHN0ZXA7CiAgX19zMzIgZGVmYXVsdF92YWx1ZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgZmxhZ3M7CiAgX191MzIgcmVzZXJ2ZWRbMl07CiB9OwotCiBzdHJ1Y3QgdjRsMl9xdWVyeW1lbnUgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBpZDsKICBfX3UzMiBpbmRleDsKICBfX3U4IG5hbWVbMzJdOwogIF9fdTMyIHJlc2VydmVkOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07Ci0KICNkZWZpbmUgVjRMMl9DVFJMX0ZMQUdfRElTQUJMRUQgMHgwMDAxCiAjZGVmaW5lIFY0TDJfQ1RSTF9GTEFHX0dSQUJCRUQgMHgwMDAyCiAjZGVmaW5lIFY0TDJfQ1RSTF9GTEFHX1JFQURfT05MWSAweDAwMDQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfQ1RSTF9GTEFHX1VQREFURSAweDAwMDgKICNkZWZpbmUgVjRMMl9DVFJMX0ZMQUdfSU5BQ1RJVkUgMHgwMDEwCiAjZGVmaW5lIFY0TDJfQ1RSTF9GTEFHX1NMSURFUiAweDAwMjAKLQorI2RlZmluZSBWNEwyX0NUUkxfRkxBR19XUklURV9PTkxZIDB4MDA0MAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVjRMMl9DVFJMX0ZMQUdfVk9MQVRJTEUgMHgwMDgwCiAjZGVmaW5lIFY0TDJfQ1RSTF9GTEFHX05FWFRfQ1RSTCAweDgwMDAwMDAwCi0KKyNkZWZpbmUgVjRMMl9DSURfTUFYX0NUUkxTIDEwMjQKICNkZWZpbmUgVjRMMl9DSURfQkFTRSAoVjRMMl9DVFJMX0NMQVNTX1VTRVIgfCAweDkwMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfQ0lEX1VTRVJfQkFTRSBWNEwyX0NJRF9CQVNFCi0KICNkZWZpbmUgVjRMMl9DSURfUFJJVkFURV9CQVNFIDB4MDgwMDAwMDAKLQogI2RlZmluZSBWNEwyX0NJRF9VU0VSX0NMQVNTIChWNEwyX0NUUkxfQ0xBU1NfVVNFUiB8IDEpCiAjZGVmaW5lIFY0TDJfQ0lEX0JSSUdIVE5FU1MgKFY0TDJfQ0lEX0JBU0UrMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfQ0lEX0NPTlRSQVNUIChWNEwyX0NJRF9CQVNFKzEpCiAjZGVmaW5lIFY0TDJfQ0lEX1NBVFVSQVRJT04gKFY0TDJfQ0lEX0JBU0UrMikKICNkZWZpbmUgVjRMMl9DSURfSFVFIChWNEwyX0NJRF9CQVNFKzMpCiAjZGVmaW5lIFY0TDJfQ0lEX0FVRElPX1ZPTFVNRSAoVjRMMl9DSURfQkFTRSs1KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9DSURfQVVESU9fQkFMQU5DRSAoVjRMMl9DSURfQkFTRSs2KQogI2RlZmluZSBWNEwyX0NJRF9BVURJT19CQVNTIChWNEwyX0NJRF9CQVNFKzcpCiAjZGVmaW5lIFY0TDJfQ0lEX0FVRElPX1RSRUJMRSAoVjRMMl9DSURfQkFTRSs4KQogI2RlZmluZSBWNEwyX0NJRF9BVURJT19NVVRFIChWNEwyX0NJRF9CQVNFKzkpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX0NJRF9BVURJT19MT1VETkVTUyAoVjRMMl9DSURfQkFTRSsxMCkKLSNkZWZpbmUgVjRMMl9DSURfQkxBQ0tfTEVWRUwgKFY0TDJfQ0lEX0JBU0UrMTEpICAKKyNkZWZpbmUgVjRMMl9DSURfQkxBQ0tfTEVWRUwgKFY0TDJfQ0lEX0JBU0UrMTEpCiAjZGVmaW5lIFY0TDJfQ0lEX0FVVE9fV0hJVEVfQkFMQU5DRSAoVjRMMl9DSURfQkFTRSsxMikKICNkZWZpbmUgVjRMMl9DSURfRE9fV0hJVEVfQkFMQU5DRSAoVjRMMl9DSURfQkFTRSsxMykKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfQ0lEX1JFRF9CQUxBTkNFIChWNEwyX0NJRF9CQVNFKzE0KQogI2RlZmluZSBWNEwyX0NJRF9CTFVFX0JBTEFOQ0UgKFY0TDJfQ0lEX0JBU0UrMTUpCiAjZGVmaW5lIFY0TDJfQ0lEX0dBTU1BIChWNEwyX0NJRF9CQVNFKzE2KQotI2RlZmluZSBWNEwyX0NJRF9XSElURU5FU1MgKFY0TDJfQ0lEX0dBTU1BKSAgCisjZGVmaW5lIFY0TDJfQ0lEX1dISVRFTkVTUyAoVjRMMl9DSURfR0FNTUEpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX0NJRF9FWFBPU1VSRSAoVjRMMl9DSURfQkFTRSsxNykKICNkZWZpbmUgVjRMMl9DSURfQVVUT0dBSU4gKFY0TDJfQ0lEX0JBU0UrMTgpCiAjZGVmaW5lIFY0TDJfQ0lEX0dBSU4gKFY0TDJfQ0lEX0JBU0UrMTkpCiAjZGVmaW5lIFY0TDJfQ0lEX0hGTElQIChWNEwyX0NJRF9CQVNFKzIwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9DSURfVkZMSVAgKFY0TDJfQ0lEX0JBU0UrMjEpCi0KICNkZWZpbmUgVjRMMl9DSURfSENFTlRFUiAoVjRMMl9DSURfQkFTRSsyMikKICNkZWZpbmUgVjRMMl9DSURfVkNFTlRFUiAoVjRMMl9DSURfQkFTRSsyMykKLQogI2RlZmluZSBWNEwyX0NJRF9QT1dFUl9MSU5FX0ZSRVFVRU5DWSAoVjRMMl9DSURfQkFTRSsyNCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBlbnVtIHY0bDJfcG93ZXJfbGluZV9mcmVxdWVuY3kgewogIFY0TDJfQ0lEX1BPV0VSX0xJTkVfRlJFUVVFTkNZX0RJU0FCTEVEID0gMCwKICBWNEwyX0NJRF9QT1dFUl9MSU5FX0ZSRVFVRU5DWV81MEhaID0gMSwKICBWNEwyX0NJRF9QT1dFUl9MSU5FX0ZSRVFVRU5DWV82MEhaID0gMiwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgVjRMMl9DSURfUE9XRVJfTElORV9GUkVRVUVOQ1lfQVVUTyA9IDMsCiB9OwogI2RlZmluZSBWNEwyX0NJRF9IVUVfQVVUTyAoVjRMMl9DSURfQkFTRSsyNSkKICNkZWZpbmUgVjRMMl9DSURfV0hJVEVfQkFMQU5DRV9URU1QRVJBVFVSRSAoVjRMMl9DSURfQkFTRSsyNikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfQ0lEX1NIQVJQTkVTUyAoVjRMMl9DSURfQkFTRSsyNykKICNkZWZpbmUgVjRMMl9DSURfQkFDS0xJR0hUX0NPTVBFTlNBVElPTiAoVjRMMl9DSURfQkFTRSsyOCkKICNkZWZpbmUgVjRMMl9DSURfQ0hST01BX0FHQyAoVjRMMl9DSURfQkFTRSsyOSkKICNkZWZpbmUgVjRMMl9DSURfQ09MT1JfS0lMTEVSIChWNEwyX0NJRF9CQVNFKzMwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9DSURfQ09MT1JGWCAoVjRMMl9DSURfQkFTRSszMSkKLSNkZWZpbmUgVjRMMl9DSURfUk9UQVRFIChWNEwyX0NJRF9CQVNFKzMyKQotI2RlZmluZSBWNEwyX0NJRF9CR19DT0xPUiAoVjRMMl9DSURfQkFTRSszMykKLSNkZWZpbmUgVjRMMl9DSURfTEFTVFAxIChWNEwyX0NJRF9CQVNFKzM0KQogZW51bSB2NGwyX2NvbG9yZnggewogIFY0TDJfQ09MT1JGWF9OT05FID0gMCwKICBWNEwyX0NPTE9SRlhfQlcgPSAxLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBWNEwyX0NPTE9SRlhfU0VQSUEgPSAyLAorIFY0TDJfQ09MT1JGWF9ORUdBVElWRSA9IDMsCisgVjRMMl9DT0xPUkZYX0VNQk9TUyA9IDQsCisgVjRMMl9DT0xPUkZYX1NLRVRDSCA9IDUsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIFY0TDJfQ09MT1JGWF9TS1lfQkxVRSA9IDYsCisgVjRMMl9DT0xPUkZYX0dSQVNTX0dSRUVOID0gNywKKyBWNEwyX0NPTE9SRlhfU0tJTl9XSElURU4gPSA4LAorIFY0TDJfQ09MT1JGWF9WSVZJRCA9IDksCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKLQorI2RlZmluZSBWNEwyX0NJRF9BVVRPQlJJR0hUTkVTUyAoVjRMMl9DSURfQkFTRSszMikKKyNkZWZpbmUgVjRMMl9DSURfQkFORF9TVE9QX0ZJTFRFUiAoVjRMMl9DSURfQkFTRSszMykKKyNkZWZpbmUgVjRMMl9DSURfUk9UQVRFIChWNEwyX0NJRF9CQVNFKzM0KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVjRMMl9DSURfQkdfQ09MT1IgKFY0TDJfQ0lEX0JBU0UrMzUpCisjZGVmaW5lIFY0TDJfQ0lEX0NIUk9NQV9HQUlOIChWNEwyX0NJRF9CQVNFKzM2KQorI2RlZmluZSBWNEwyX0NJRF9JTExVTUlOQVRPUlNfMSAoVjRMMl9DSURfQkFTRSszNykKKyNkZWZpbmUgVjRMMl9DSURfSUxMVU1JTkFUT1JTXzIgKFY0TDJfQ0lEX0JBU0UrMzgpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBWNEwyX0NJRF9NSU5fQlVGRkVSU19GT1JfQ0FQVFVSRSAoVjRMMl9DSURfQkFTRSszOSkKKyNkZWZpbmUgVjRMMl9DSURfTUlOX0JVRkZFUlNfRk9SX09VVFBVVCAoVjRMMl9DSURfQkFTRSs0MCkKKyNkZWZpbmUgVjRMMl9DSURfQUxQSEFfQ09NUE9ORU5UIChWNEwyX0NJRF9CQVNFKzQxKQorI2RlZmluZSBWNEwyX0NJRF9MQVNUUDEgKFY0TDJfQ0lEX0JBU0UrNDIpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBWNEwyX0NJRF9TUEVDSUFMX0VGRkVDVCAoVjRMMl9DSURfQkFTRSs0MykKICNkZWZpbmUgVjRMMl9DSURfTVBFR19CQVNFIChWNEwyX0NUUkxfQ0xBU1NfTVBFRyB8IDB4OTAwKQogI2RlZmluZSBWNEwyX0NJRF9NUEVHX0NMQVNTIChWNEwyX0NUUkxfQ0xBU1NfTVBFRyB8IDEpCi0KICNkZWZpbmUgVjRMMl9DSURfTVBFR19TVFJFQU1fVFlQRSAoVjRMMl9DSURfTVBFR19CQVNFKzApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogZW51bSB2NGwyX21wZWdfc3RyZWFtX3R5cGUgewogIFY0TDJfTVBFR19TVFJFQU1fVFlQRV9NUEVHMl9QUyA9IDAsCiAgVjRMMl9NUEVHX1NUUkVBTV9UWVBFX01QRUcyX1RTID0gMSwKICBWNEwyX01QRUdfU1RSRUFNX1RZUEVfTVBFRzFfU1MgPSAyLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBWNEwyX01QRUdfU1RSRUFNX1RZUEVfTVBFRzJfRFZEID0gMywKICBWNEwyX01QRUdfU1RSRUFNX1RZUEVfTVBFRzFfVkNEID0gNCwKICBWNEwyX01QRUdfU1RSRUFNX1RZUEVfTVBFRzJfU1ZDRCA9IDUsCiB9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9DSURfTVBFR19TVFJFQU1fUElEX1BNVCAoVjRMMl9DSURfTVBFR19CQVNFKzEpCiAjZGVmaW5lIFY0TDJfQ0lEX01QRUdfU1RSRUFNX1BJRF9BVURJTyAoVjRMMl9DSURfTVBFR19CQVNFKzIpCiAjZGVmaW5lIFY0TDJfQ0lEX01QRUdfU1RSRUFNX1BJRF9WSURFTyAoVjRMMl9DSURfTVBFR19CQVNFKzMpCiAjZGVmaW5lIFY0TDJfQ0lEX01QRUdfU1RSRUFNX1BJRF9QQ1IgKFY0TDJfQ0lEX01QRUdfQkFTRSs0KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9DSURfTVBFR19TVFJFQU1fUEVTX0lEX0FVRElPIChWNEwyX0NJRF9NUEVHX0JBU0UrNSkKICNkZWZpbmUgVjRMMl9DSURfTVBFR19TVFJFQU1fUEVTX0lEX1ZJREVPIChWNEwyX0NJRF9NUEVHX0JBU0UrNikKICNkZWZpbmUgVjRMMl9DSURfTVBFR19TVFJFQU1fVkJJX0ZNVCAoVjRMMl9DSURfTVBFR19CQVNFKzcpCiBlbnVtIHY0bDJfbXBlZ19zdHJlYW1fdmJpX2ZtdCB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFY0TDJfTVBFR19TVFJFQU1fVkJJX0ZNVF9OT05FID0gMCwKICBWNEwyX01QRUdfU1RSRUFNX1ZCSV9GTVRfSVZUViA9IDEsCiB9OwotCiAjZGVmaW5lIFY0TDJfQ0lEX01QRUdfQVVESU9fU0FNUExJTkdfRlJFUSAoVjRMMl9DSURfTVBFR19CQVNFKzEwMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBlbnVtIHY0bDJfbXBlZ19hdWRpb19zYW1wbGluZ19mcmVxIHsKICBWNEwyX01QRUdfQVVESU9fU0FNUExJTkdfRlJFUV80NDEwMCA9IDAsCiAgVjRMMl9NUEVHX0FVRElPX1NBTVBMSU5HX0ZSRVFfNDgwMDAgPSAxLAogIFY0TDJfTVBFR19BVURJT19TQU1QTElOR19GUkVRXzMyMDAwID0gMiwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwogI2RlZmluZSBWNEwyX0NJRF9NUEVHX0FVRElPX0VOQ09ESU5HIChWNEwyX0NJRF9NUEVHX0JBU0UrMTAxKQogZW51bSB2NGwyX21wZWdfYXVkaW9fZW5jb2RpbmcgewogIFY0TDJfTVBFR19BVURJT19FTkNPRElOR19MQVlFUl8xID0gMCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVjRMMl9NUEVHX0FVRElPX0VOQ09ESU5HX0xBWUVSXzIgPSAxLAogIFY0TDJfTVBFR19BVURJT19FTkNPRElOR19MQVlFUl8zID0gMiwKICBWNEwyX01QRUdfQVVESU9fRU5DT0RJTkdfQUFDID0gMywKICBWNEwyX01QRUdfQVVESU9fRU5DT0RJTkdfQUMzID0gNCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwogI2RlZmluZSBWNEwyX0NJRF9NUEVHX0FVRElPX0wxX0JJVFJBVEUgKFY0TDJfQ0lEX01QRUdfQkFTRSsxMDIpCiBlbnVtIHY0bDJfbXBlZ19hdWRpb19sMV9iaXRyYXRlIHsKICBWNEwyX01QRUdfQVVESU9fTDFfQklUUkFURV8zMksgPSAwLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBWNEwyX01QRUdfQVVESU9fTDFfQklUUkFURV82NEsgPSAxLAogIFY0TDJfTVBFR19BVURJT19MMV9CSVRSQVRFXzk2SyA9IDIsCiAgVjRMMl9NUEVHX0FVRElPX0wxX0JJVFJBVEVfMTI4SyA9IDMsCiAgVjRMMl9NUEVHX0FVRElPX0wxX0JJVFJBVEVfMTYwSyA9IDQsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFY0TDJfTVBFR19BVURJT19MMV9CSVRSQVRFXzE5MksgPSA1LAogIFY0TDJfTVBFR19BVURJT19MMV9CSVRSQVRFXzIyNEsgPSA2LAogIFY0TDJfTVBFR19BVURJT19MMV9CSVRSQVRFXzI1NksgPSA3LAogIFY0TDJfTVBFR19BVURJT19MMV9CSVRSQVRFXzI4OEsgPSA4LAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBWNEwyX01QRUdfQVVESU9fTDFfQklUUkFURV8zMjBLID0gOSwKICBWNEwyX01QRUdfQVVESU9fTDFfQklUUkFURV8zNTJLID0gMTAsCiAgVjRMMl9NUEVHX0FVRElPX0wxX0JJVFJBVEVfMzg0SyA9IDExLAogIFY0TDJfTVBFR19BVURJT19MMV9CSVRSQVRFXzQxNksgPSAxMiwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVjRMMl9NUEVHX0FVRElPX0wxX0JJVFJBVEVfNDQ4SyA9IDEzLAogfTsKICNkZWZpbmUgVjRMMl9DSURfTVBFR19BVURJT19MMl9CSVRSQVRFIChWNEwyX0NJRF9NUEVHX0JBU0UrMTAzKQogZW51bSB2NGwyX21wZWdfYXVkaW9fbDJfYml0cmF0ZSB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFY0TDJfTVBFR19BVURJT19MMl9CSVRSQVRFXzMySyA9IDAsCiAgVjRMMl9NUEVHX0FVRElPX0wyX0JJVFJBVEVfNDhLID0gMSwKICBWNEwyX01QRUdfQVVESU9fTDJfQklUUkFURV81NksgPSAyLAogIFY0TDJfTVBFR19BVURJT19MMl9CSVRSQVRFXzY0SyA9IDMsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFY0TDJfTVBFR19BVURJT19MMl9CSVRSQVRFXzgwSyA9IDQsCiAgVjRMMl9NUEVHX0FVRElPX0wyX0JJVFJBVEVfOTZLID0gNSwKICBWNEwyX01QRUdfQVVESU9fTDJfQklUUkFURV8xMTJLID0gNiwKICBWNEwyX01QRUdfQVVESU9fTDJfQklUUkFURV8xMjhLID0gNywKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVjRMMl9NUEVHX0FVRElPX0wyX0JJVFJBVEVfMTYwSyA9IDgsCiAgVjRMMl9NUEVHX0FVRElPX0wyX0JJVFJBVEVfMTkySyA9IDksCiAgVjRMMl9NUEVHX0FVRElPX0wyX0JJVFJBVEVfMjI0SyA9IDEwLAogIFY0TDJfTVBFR19BVURJT19MMl9CSVRSQVRFXzI1NksgPSAxMSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVjRMMl9NUEVHX0FVRElPX0wyX0JJVFJBVEVfMzIwSyA9IDEyLAogIFY0TDJfTVBFR19BVURJT19MMl9CSVRSQVRFXzM4NEsgPSAxMywKIH07CiAjZGVmaW5lIFY0TDJfQ0lEX01QRUdfQVVESU9fTDNfQklUUkFURSAoVjRMMl9DSURfTVBFR19CQVNFKzEwNCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBlbnVtIHY0bDJfbXBlZ19hdWRpb19sM19iaXRyYXRlIHsKICBWNEwyX01QRUdfQVVESU9fTDNfQklUUkFURV8zMksgPSAwLAogIFY0TDJfTVBFR19BVURJT19MM19CSVRSQVRFXzQwSyA9IDEsCiAgVjRMMl9NUEVHX0FVRElPX0wzX0JJVFJBVEVfNDhLID0gMiwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVjRMMl9NUEVHX0FVRElPX0wzX0JJVFJBVEVfNTZLID0gMywKICBWNEwyX01QRUdfQVVESU9fTDNfQklUUkFURV82NEsgPSA0LAogIFY0TDJfTVBFR19BVURJT19MM19CSVRSQVRFXzgwSyA9IDUsCiAgVjRMMl9NUEVHX0FVRElPX0wzX0JJVFJBVEVfOTZLID0gNiwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVjRMMl9NUEVHX0FVRElPX0wzX0JJVFJBVEVfMTEySyA9IDcsCiAgVjRMMl9NUEVHX0FVRElPX0wzX0JJVFJBVEVfMTI4SyA9IDgsCiAgVjRMMl9NUEVHX0FVRElPX0wzX0JJVFJBVEVfMTYwSyA9IDksCiAgVjRMMl9NUEVHX0FVRElPX0wzX0JJVFJBVEVfMTkySyA9IDEwLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBWNEwyX01QRUdfQVVESU9fTDNfQklUUkFURV8yMjRLID0gMTEsCiAgVjRMMl9NUEVHX0FVRElPX0wzX0JJVFJBVEVfMjU2SyA9IDEyLAogIFY0TDJfTVBFR19BVURJT19MM19CSVRSQVRFXzMyMEsgPSAxMywKIH07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX0NJRF9NUEVHX0FVRElPX01PREUgKFY0TDJfQ0lEX01QRUdfQkFTRSsxMDUpCiBlbnVtIHY0bDJfbXBlZ19hdWRpb19tb2RlIHsKICBWNEwyX01QRUdfQVVESU9fTU9ERV9TVEVSRU8gPSAwLAogIFY0TDJfTVBFR19BVURJT19NT0RFX0pPSU5UX1NURVJFTyA9IDEsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFY0TDJfTVBFR19BVURJT19NT0RFX0RVQUwgPSAyLAogIFY0TDJfTVBFR19BVURJT19NT0RFX01PTk8gPSAzLAogfTsKICNkZWZpbmUgVjRMMl9DSURfTVBFR19BVURJT19NT0RFX0VYVEVOU0lPTiAoVjRMMl9DSURfTVBFR19CQVNFKzEwNikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBlbnVtIHY0bDJfbXBlZ19hdWRpb19tb2RlX2V4dGVuc2lvbiB7CiAgVjRMMl9NUEVHX0FVRElPX01PREVfRVhURU5TSU9OX0JPVU5EXzQgPSAwLAogIFY0TDJfTVBFR19BVURJT19NT0RFX0VYVEVOU0lPTl9CT1VORF84ID0gMSwKICBWNEwyX01QRUdfQVVESU9fTU9ERV9FWFRFTlNJT05fQk9VTkRfMTIgPSAyLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBWNEwyX01QRUdfQVVESU9fTU9ERV9FWFRFTlNJT05fQk9VTkRfMTYgPSAzLAogfTsKICNkZWZpbmUgVjRMMl9DSURfTVBFR19BVURJT19FTVBIQVNJUyAoVjRMMl9DSURfTVBFR19CQVNFKzEwNykKIGVudW0gdjRsMl9tcGVnX2F1ZGlvX2VtcGhhc2lzIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVjRMMl9NUEVHX0FVRElPX0VNUEhBU0lTX05PTkUgPSAwLAogIFY0TDJfTVBFR19BVURJT19FTVBIQVNJU181MF9ESVZfMTVfdVMgPSAxLAogIFY0TDJfTVBFR19BVURJT19FTVBIQVNJU19DQ0lUVF9KMTcgPSAyLAogfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfQ0lEX01QRUdfQVVESU9fQ1JDIChWNEwyX0NJRF9NUEVHX0JBU0UrMTA4KQogZW51bSB2NGwyX21wZWdfYXVkaW9fY3JjIHsKICBWNEwyX01QRUdfQVVESU9fQ1JDX05PTkUgPSAwLAogIFY0TDJfTVBFR19BVURJT19DUkNfQ1JDMTYgPSAxLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiAjZGVmaW5lIFY0TDJfQ0lEX01QRUdfQVVESU9fTVVURSAoVjRMMl9DSURfTVBFR19CQVNFKzEwOSkKICNkZWZpbmUgVjRMMl9DSURfTVBFR19BVURJT19BQUNfQklUUkFURSAoVjRMMl9DSURfTVBFR19CQVNFKzExMCkKICNkZWZpbmUgVjRMMl9DSURfTVBFR19BVURJT19BQzNfQklUUkFURSAoVjRMMl9DSURfTVBFR19CQVNFKzExMSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBlbnVtIHY0bDJfbXBlZ19hdWRpb19hYzNfYml0cmF0ZSB7CiAgVjRMMl9NUEVHX0FVRElPX0FDM19CSVRSQVRFXzMySyA9IDAsCiAgVjRMMl9NUEVHX0FVRElPX0FDM19CSVRSQVRFXzQwSyA9IDEsCiAgVjRMMl9NUEVHX0FVRElPX0FDM19CSVRSQVRFXzQ4SyA9IDIsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFY0TDJfTVBFR19BVURJT19BQzNfQklUUkFURV81NksgPSAzLAogIFY0TDJfTVBFR19BVURJT19BQzNfQklUUkFURV82NEsgPSA0LAogIFY0TDJfTVBFR19BVURJT19BQzNfQklUUkFURV84MEsgPSA1LAogIFY0TDJfTVBFR19BVURJT19BQzNfQklUUkFURV85NksgPSA2LAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBWNEwyX01QRUdfQVVESU9fQUMzX0JJVFJBVEVfMTEySyA9IDcsCiAgVjRMMl9NUEVHX0FVRElPX0FDM19CSVRSQVRFXzEyOEsgPSA4LAogIFY0TDJfTVBFR19BVURJT19BQzNfQklUUkFURV8xNjBLID0gOSwKICBWNEwyX01QRUdfQVVESU9fQUMzX0JJVFJBVEVfMTkySyA9IDEwLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBWNEwyX01QRUdfQVVESU9fQUMzX0JJVFJBVEVfMjI0SyA9IDExLAogIFY0TDJfTVBFR19BVURJT19BQzNfQklUUkFURV8yNTZLID0gMTIsCiAgVjRMMl9NUEVHX0FVRElPX0FDM19CSVRSQVRFXzMyMEsgPSAxMywKICBWNEwyX01QRUdfQVVESU9fQUMzX0JJVFJBVEVfMzg0SyA9IDE0LAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBWNEwyX01QRUdfQVVESU9fQUMzX0JJVFJBVEVfNDQ4SyA9IDE1LAogIFY0TDJfTVBFR19BVURJT19BQzNfQklUUkFURV81MTJLID0gMTYsCiAgVjRMMl9NUEVHX0FVRElPX0FDM19CSVRSQVRFXzU3NksgPSAxNywKICBWNEwyX01QRUdfQVVESU9fQUMzX0JJVFJBVEVfNjQwSyA9IDE4LAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07Ci0KKyNkZWZpbmUgVjRMMl9DSURfTVBFR19BVURJT19ERUNfUExBWUJBQ0sgKFY0TDJfQ0lEX01QRUdfQkFTRSsxMTIpCitlbnVtIHY0bDJfbXBlZ19hdWRpb19kZWNfcGxheWJhY2sgeworIFY0TDJfTVBFR19BVURJT19ERUNfUExBWUJBQ0tfQVVUTyA9IDAsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIFY0TDJfTVBFR19BVURJT19ERUNfUExBWUJBQ0tfU1RFUkVPID0gMSwKKyBWNEwyX01QRUdfQVVESU9fREVDX1BMQVlCQUNLX0xFRlQgPSAyLAorIFY0TDJfTVBFR19BVURJT19ERUNfUExBWUJBQ0tfUklHSFQgPSAzLAorIFY0TDJfTVBFR19BVURJT19ERUNfUExBWUJBQ0tfTU9OTyA9IDQsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIFY0TDJfTVBFR19BVURJT19ERUNfUExBWUJBQ0tfU1dBUFBFRF9TVEVSRU8gPSA1LAorfTsKKyNkZWZpbmUgVjRMMl9DSURfTVBFR19BVURJT19ERUNfTVVMVElMSU5HVUFMX1BMQVlCQUNLIChWNEwyX0NJRF9NUEVHX0JBU0UrMTEzKQogI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0VOQ09ESU5HIChWNEwyX0NJRF9NUEVHX0JBU0UrMjAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIGVudW0gdjRsMl9tcGVnX3ZpZGVvX2VuY29kaW5nIHsKICBWNEwyX01QRUdfVklERU9fRU5DT0RJTkdfTVBFR18xID0gMCwKICBWNEwyX01QRUdfVklERU9fRU5DT0RJTkdfTVBFR18yID0gMSwKICBWNEwyX01QRUdfVklERU9fRU5DT0RJTkdfTVBFR180X0FWQyA9IDIsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKICNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19BU1BFQ1QgKFY0TDJfQ0lEX01QRUdfQkFTRSsyMDEpCiBlbnVtIHY0bDJfbXBlZ192aWRlb19hc3BlY3QgewogIFY0TDJfTVBFR19WSURFT19BU1BFQ1RfMXgxID0gMCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVjRMMl9NUEVHX1ZJREVPX0FTUEVDVF80eDMgPSAxLAogIFY0TDJfTVBFR19WSURFT19BU1BFQ1RfMTZ4OSA9IDIsCiAgVjRMMl9NUEVHX1ZJREVPX0FTUEVDVF8yMjF4MTAwID0gMywKIH07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0JfRlJBTUVTIChWNEwyX0NJRF9NUEVHX0JBU0UrMjAyKQogI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0dPUF9TSVpFIChWNEwyX0NJRF9NUEVHX0JBU0UrMjAzKQogI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0dPUF9DTE9TVVJFIChWNEwyX0NJRF9NUEVHX0JBU0UrMjA0KQogI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX1BVTExET1dOIChWNEwyX0NJRF9NUEVHX0JBU0UrMjA1KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19CSVRSQVRFX01PREUgKFY0TDJfQ0lEX01QRUdfQkFTRSsyMDYpCiBlbnVtIHY0bDJfbXBlZ192aWRlb19iaXRyYXRlX21vZGUgewogIFY0TDJfTVBFR19WSURFT19CSVRSQVRFX01PREVfVkJSID0gMCwKICBWNEwyX01QRUdfVklERU9fQklUUkFURV9NT0RFX0NCUiA9IDEsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKICNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19CSVRSQVRFIChWNEwyX0NJRF9NUEVHX0JBU0UrMjA3KQogI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0JJVFJBVEVfUEVBSyAoVjRMMl9DSURfTVBFR19CQVNFKzIwOCkKICNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19URU1QT1JBTF9ERUNJTUFUSU9OIChWNEwyX0NJRF9NUEVHX0JBU0UrMjA5KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19NVVRFIChWNEwyX0NJRF9NUEVHX0JBU0UrMjEwKQogI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX01VVEVfWVVWIChWNEwyX0NJRF9NUEVHX0JBU0UrMjExKQotCisjZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fREVDT0RFUl9TTElDRV9JTlRFUkZBQ0UgKFY0TDJfQ0lEX01QRUdfQkFTRSsyMTIpCisjZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fREVDT0RFUl9NUEVHNF9ERUJMT0NLX0ZJTFRFUiAoVjRMMl9DSURfTVBFR19CQVNFKzIxMykKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fQ1lDTElDX0lOVFJBX1JFRlJFU0hfTUIgKFY0TDJfQ0lEX01QRUdfQkFTRSsyMTQpCisjZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fRlJBTUVfUkNfRU5BQkxFIChWNEwyX0NJRF9NUEVHX0JBU0UrMjE1KQorI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0hFQURFUl9NT0RFIChWNEwyX0NJRF9NUEVHX0JBU0UrMjE2KQorZW51bSB2NGwyX21wZWdfdmlkZW9faGVhZGVyX21vZGUgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBWNEwyX01QRUdfVklERU9fSEVBREVSX01PREVfU0VQQVJBVEUgPSAwLAorIFY0TDJfTVBFR19WSURFT19IRUFERVJfTU9ERV9KT0lORURfV0lUSF8xU1RfRlJBTUUgPSAxLAorIFY0TDJfTVBFR19WSURFT19IRUFERVJfTU9ERV9KT0lORURfV0lUSF9JX0ZSQU1FID0gMiwKK307CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX01BWF9SRUZfUElDIChWNEwyX0NJRF9NUEVHX0JBU0UrMjE3KQorI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX01CX1JDX0VOQUJMRSAoVjRMMl9DSURfTVBFR19CQVNFKzIxOCkKKyNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19NVUxUSV9TTElDRV9NQVhfQllURVMgKFY0TDJfQ0lEX01QRUdfQkFTRSsyMTkpCisjZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fTVVMVElfU0xJQ0VfTUFYX01CIChWNEwyX0NJRF9NUEVHX0JBU0UrMjIwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19NVUxUSV9TTElDRV9NT0RFIChWNEwyX0NJRF9NUEVHX0JBU0UrMjIxKQorZW51bSB2NGwyX21wZWdfdmlkZW9fbXVsdGlfc2xpY2VfbW9kZSB7CisgVjRMMl9NUEVHX1ZJREVPX01VTFRJX1NMSUNFX01PREVfU0lOR0xFID0gMCwKKyBWNEwyX01QRUdfVklERU9fTVVMVElfU0lDRV9NT0RFX01BWF9NQiA9IDEsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIFY0TDJfTVBFR19WSURFT19NVUxUSV9TSUNFX01PREVfTUFYX0JZVEVTID0gMiwKK307CisjZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fVkJWX1NJWkUgKFY0TDJfQ0lEX01QRUdfQkFTRSsyMjIpCisjZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fREVDX1BUUyAoVjRMMl9DSURfTVBFR19CQVNFKzIyMykKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fREVDX0ZSQU1FIChWNEwyX0NJRF9NUEVHX0JBU0UrMjI0KQorI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0gyNjNfSV9GUkFNRV9RUCAoVjRMMl9DSURfTVBFR19CQVNFKzMwMCkKKyNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19IMjYzX1BfRlJBTUVfUVAgKFY0TDJfQ0lEX01QRUdfQkFTRSszMDEpCisjZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fSDI2M19CX0ZSQU1FX1FQIChWNEwyX0NJRF9NUEVHX0JBU0UrMzAyKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19IMjYzX01JTl9RUCAoVjRMMl9DSURfTVBFR19CQVNFKzMwMykKKyNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19IMjYzX01BWF9RUCAoVjRMMl9DSURfTVBFR19CQVNFKzMwNCkKKyNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19IMjY0X0lfRlJBTUVfUVAgKFY0TDJfQ0lEX01QRUdfQkFTRSszNTApCisjZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fSDI2NF9QX0ZSQU1FX1FQIChWNEwyX0NJRF9NUEVHX0JBU0UrMzUxKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19IMjY0X0JfRlJBTUVfUVAgKFY0TDJfQ0lEX01QRUdfQkFTRSszNTIpCisjZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fSDI2NF9NSU5fUVAgKFY0TDJfQ0lEX01QRUdfQkFTRSszNTMpCisjZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fSDI2NF9NQVhfUVAgKFY0TDJfQ0lEX01QRUdfQkFTRSszNTQpCisjZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fSDI2NF84WDhfVFJBTlNGT1JNIChWNEwyX0NJRF9NUEVHX0JBU0UrMzU1KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19IMjY0X0NQQl9TSVpFIChWNEwyX0NJRF9NUEVHX0JBU0UrMzU2KQorI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0gyNjRfRU5UUk9QWV9NT0RFIChWNEwyX0NJRF9NUEVHX0JBU0UrMzU3KQorZW51bSB2NGwyX21wZWdfdmlkZW9faDI2NF9lbnRyb3B5X21vZGUgeworIFY0TDJfTVBFR19WSURFT19IMjY0X0VOVFJPUFlfTU9ERV9DQVZMQyA9IDAsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIFY0TDJfTVBFR19WSURFT19IMjY0X0VOVFJPUFlfTU9ERV9DQUJBQyA9IDEsCit9OworI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0gyNjRfSV9QRVJJT0QgKFY0TDJfQ0lEX01QRUdfQkFTRSszNTgpCisjZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fSDI2NF9MRVZFTCAoVjRMMl9DSURfTVBFR19CQVNFKzM1OSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCitlbnVtIHY0bDJfbXBlZ192aWRlb19oMjY0X2xldmVsIHsKKyBWNEwyX01QRUdfVklERU9fSDI2NF9MRVZFTF8xXzAgPSAwLAorIFY0TDJfTVBFR19WSURFT19IMjY0X0xFVkVMXzFCID0gMSwKKyBWNEwyX01QRUdfVklERU9fSDI2NF9MRVZFTF8xXzEgPSAyLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBWNEwyX01QRUdfVklERU9fSDI2NF9MRVZFTF8xXzIgPSAzLAorIFY0TDJfTVBFR19WSURFT19IMjY0X0xFVkVMXzFfMyA9IDQsCisgVjRMMl9NUEVHX1ZJREVPX0gyNjRfTEVWRUxfMl8wID0gNSwKKyBWNEwyX01QRUdfVklERU9fSDI2NF9MRVZFTF8yXzEgPSA2LAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBWNEwyX01QRUdfVklERU9fSDI2NF9MRVZFTF8yXzIgPSA3LAorIFY0TDJfTVBFR19WSURFT19IMjY0X0xFVkVMXzNfMCA9IDgsCisgVjRMMl9NUEVHX1ZJREVPX0gyNjRfTEVWRUxfM18xID0gOSwKKyBWNEwyX01QRUdfVklERU9fSDI2NF9MRVZFTF8zXzIgPSAxMCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgVjRMMl9NUEVHX1ZJREVPX0gyNjRfTEVWRUxfNF8wID0gMTEsCisgVjRMMl9NUEVHX1ZJREVPX0gyNjRfTEVWRUxfNF8xID0gMTIsCisgVjRMMl9NUEVHX1ZJREVPX0gyNjRfTEVWRUxfNF8yID0gMTMsCisgVjRMMl9NUEVHX1ZJREVPX0gyNjRfTEVWRUxfNV8wID0gMTQsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIFY0TDJfTVBFR19WSURFT19IMjY0X0xFVkVMXzVfMSA9IDE1LAorfTsKKyNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19IMjY0X0xPT1BfRklMVEVSX0FMUEhBIChWNEwyX0NJRF9NUEVHX0JBU0UrMzYwKQorI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0gyNjRfTE9PUF9GSUxURVJfQkVUQSAoVjRMMl9DSURfTVBFR19CQVNFKzM2MSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fSDI2NF9MT09QX0ZJTFRFUl9NT0RFIChWNEwyX0NJRF9NUEVHX0JBU0UrMzYyKQorZW51bSB2NGwyX21wZWdfdmlkZW9faDI2NF9sb29wX2ZpbHRlcl9tb2RlIHsKKyBWNEwyX01QRUdfVklERU9fSDI2NF9MT09QX0ZJTFRFUl9NT0RFX0VOQUJMRUQgPSAwLAorIFY0TDJfTVBFR19WSURFT19IMjY0X0xPT1BfRklMVEVSX01PREVfRElTQUJMRUQgPSAxLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBWNEwyX01QRUdfVklERU9fSDI2NF9MT09QX0ZJTFRFUl9NT0RFX0RJU0FCTEVEX0FUX1NMSUNFX0JPVU5EQVJZID0gMiwKK307CisjZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fSDI2NF9QUk9GSUxFIChWNEwyX0NJRF9NUEVHX0JBU0UrMzYzKQorZW51bSB2NGwyX21wZWdfdmlkZW9faDI2NF9wcm9maWxlIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgVjRMMl9NUEVHX1ZJREVPX0gyNjRfUFJPRklMRV9CQVNFTElORSA9IDAsCisgVjRMMl9NUEVHX1ZJREVPX0gyNjRfUFJPRklMRV9DT05TVFJBSU5FRF9CQVNFTElORSA9IDEsCisgVjRMMl9NUEVHX1ZJREVPX0gyNjRfUFJPRklMRV9NQUlOID0gMiwKKyBWNEwyX01QRUdfVklERU9fSDI2NF9QUk9GSUxFX0VYVEVOREVEID0gMywKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgVjRMMl9NUEVHX1ZJREVPX0gyNjRfUFJPRklMRV9ISUdIID0gNCwKKyBWNEwyX01QRUdfVklERU9fSDI2NF9QUk9GSUxFX0hJR0hfMTAgPSA1LAorIFY0TDJfTVBFR19WSURFT19IMjY0X1BST0ZJTEVfSElHSF80MjIgPSA2LAorIFY0TDJfTVBFR19WSURFT19IMjY0X1BST0ZJTEVfSElHSF80NDRfUFJFRElDVElWRSA9IDcsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIFY0TDJfTVBFR19WSURFT19IMjY0X1BST0ZJTEVfSElHSF8xMF9JTlRSQSA9IDgsCisgVjRMMl9NUEVHX1ZJREVPX0gyNjRfUFJPRklMRV9ISUdIXzQyMl9JTlRSQSA9IDksCisgVjRMMl9NUEVHX1ZJREVPX0gyNjRfUFJPRklMRV9ISUdIXzQ0NF9JTlRSQSA9IDEwLAorIFY0TDJfTVBFR19WSURFT19IMjY0X1BST0ZJTEVfQ0FWTENfNDQ0X0lOVFJBID0gMTEsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIFY0TDJfTVBFR19WSURFT19IMjY0X1BST0ZJTEVfU0NBTEFCTEVfQkFTRUxJTkUgPSAxMiwKKyBWNEwyX01QRUdfVklERU9fSDI2NF9QUk9GSUxFX1NDQUxBQkxFX0hJR0ggPSAxMywKKyBWNEwyX01QRUdfVklERU9fSDI2NF9QUk9GSUxFX1NDQUxBQkxFX0hJR0hfSU5UUkEgPSAxNCwKKyBWNEwyX01QRUdfVklERU9fSDI2NF9QUk9GSUxFX1NURVJFT19ISUdIID0gMTUsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIFY0TDJfTVBFR19WSURFT19IMjY0X1BST0ZJTEVfTVVMVElWSUVXX0hJR0ggPSAxNiwKK307CisjZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fSDI2NF9WVUlfRVhUX1NBUl9IRUlHSFQgKFY0TDJfQ0lEX01QRUdfQkFTRSszNjQpCisjZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fSDI2NF9WVUlfRVhUX1NBUl9XSURUSCAoVjRMMl9DSURfTVBFR19CQVNFKzM2NSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fSDI2NF9WVUlfU0FSX0VOQUJMRSAoVjRMMl9DSURfTVBFR19CQVNFKzM2NikKKyNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19IMjY0X1ZVSV9TQVJfSURDIChWNEwyX0NJRF9NUEVHX0JBU0UrMzY3KQorZW51bSB2NGwyX21wZWdfdmlkZW9faDI2NF92dWlfc2FyX2lkYyB7CisgVjRMMl9NUEVHX1ZJREVPX0gyNjRfVlVJX1NBUl9JRENfVU5TUEVDSUZJRUQgPSAwLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBWNEwyX01QRUdfVklERU9fSDI2NF9WVUlfU0FSX0lEQ18xeDEgPSAxLAorIFY0TDJfTVBFR19WSURFT19IMjY0X1ZVSV9TQVJfSURDXzEyeDExID0gMiwKKyBWNEwyX01QRUdfVklERU9fSDI2NF9WVUlfU0FSX0lEQ18xMHgxMSA9IDMsCisgVjRMMl9NUEVHX1ZJREVPX0gyNjRfVlVJX1NBUl9JRENfMTZ4MTEgPSA0LAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBWNEwyX01QRUdfVklERU9fSDI2NF9WVUlfU0FSX0lEQ180MHgzMyA9IDUsCisgVjRMMl9NUEVHX1ZJREVPX0gyNjRfVlVJX1NBUl9JRENfMjR4MTEgPSA2LAorIFY0TDJfTVBFR19WSURFT19IMjY0X1ZVSV9TQVJfSURDXzIweDExID0gNywKKyBWNEwyX01QRUdfVklERU9fSDI2NF9WVUlfU0FSX0lEQ18zMngxMSA9IDgsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIFY0TDJfTVBFR19WSURFT19IMjY0X1ZVSV9TQVJfSURDXzgweDMzID0gOSwKKyBWNEwyX01QRUdfVklERU9fSDI2NF9WVUlfU0FSX0lEQ18xOHgxMSA9IDEwLAorIFY0TDJfTVBFR19WSURFT19IMjY0X1ZVSV9TQVJfSURDXzE1eDExID0gMTEsCisgVjRMMl9NUEVHX1ZJREVPX0gyNjRfVlVJX1NBUl9JRENfNjR4MzMgPSAxMiwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgVjRMMl9NUEVHX1ZJREVPX0gyNjRfVlVJX1NBUl9JRENfMTYweDk5ID0gMTMsCisgVjRMMl9NUEVHX1ZJREVPX0gyNjRfVlVJX1NBUl9JRENfNHgzID0gMTQsCisgVjRMMl9NUEVHX1ZJREVPX0gyNjRfVlVJX1NBUl9JRENfM3gyID0gMTUsCisgVjRMMl9NUEVHX1ZJREVPX0gyNjRfVlVJX1NBUl9JRENfMngxID0gMTYsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIFY0TDJfTVBFR19WSURFT19IMjY0X1ZVSV9TQVJfSURDX0VYVEVOREVEID0gMTcsCit9OworI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX01QRUc0X0lfRlJBTUVfUVAgKFY0TDJfQ0lEX01QRUdfQkFTRSs0MDApCisjZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fTVBFRzRfUF9GUkFNRV9RUCAoVjRMMl9DSURfTVBFR19CQVNFKzQwMSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fTVBFRzRfQl9GUkFNRV9RUCAoVjRMMl9DSURfTVBFR19CQVNFKzQwMikKKyNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19NUEVHNF9NSU5fUVAgKFY0TDJfQ0lEX01QRUdfQkFTRSs0MDMpCisjZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fTVBFRzRfTUFYX1FQIChWNEwyX0NJRF9NUEVHX0JBU0UrNDA0KQorI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX01QRUc0X0xFVkVMIChWNEwyX0NJRF9NUEVHX0JBU0UrNDA1KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK2VudW0gdjRsMl9tcGVnX3ZpZGVvX21wZWc0X2xldmVsIHsKKyBWNEwyX01QRUdfVklERU9fTVBFRzRfTEVWRUxfMCA9IDAsCisgVjRMMl9NUEVHX1ZJREVPX01QRUc0X0xFVkVMXzBCID0gMSwKKyBWNEwyX01QRUdfVklERU9fTVBFRzRfTEVWRUxfMSA9IDIsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIFY0TDJfTVBFR19WSURFT19NUEVHNF9MRVZFTF8yID0gMywKKyBWNEwyX01QRUdfVklERU9fTVBFRzRfTEVWRUxfMyA9IDQsCisgVjRMMl9NUEVHX1ZJREVPX01QRUc0X0xFVkVMXzNCID0gNSwKKyBWNEwyX01QRUdfVklERU9fTVBFRzRfTEVWRUxfNCA9IDYsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIFY0TDJfTVBFR19WSURFT19NUEVHNF9MRVZFTF81ID0gNywKK307CisjZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fTVBFRzRfUFJPRklMRSAoVjRMMl9DSURfTVBFR19CQVNFKzQwNikKK2VudW0gdjRsMl9tcGVnX3ZpZGVvX21wZWc0X3Byb2ZpbGUgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBWNEwyX01QRUdfVklERU9fTVBFRzRfUFJPRklMRV9TSU1QTEUgPSAwLAorIFY0TDJfTVBFR19WSURFT19NUEVHNF9QUk9GSUxFX0FEVkFOQ0VEX1NJTVBMRSA9IDEsCisgVjRMMl9NUEVHX1ZJREVPX01QRUc0X1BST0ZJTEVfQ09SRSA9IDIsCisgVjRMMl9NUEVHX1ZJREVPX01QRUc0X1BST0ZJTEVfU0lNUExFX1NDQUxBQkxFID0gMywKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgVjRMMl9NUEVHX1ZJREVPX01QRUc0X1BST0ZJTEVfQURWQU5DRURfQ09ESU5HX0VGRklDSUVOQ1kgPSA0LAorfTsKKyNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19NUEVHNF9RUEVMIChWNEwyX0NJRF9NUEVHX0JBU0UrNDA3KQogI2RlZmluZSBWNEwyX0NJRF9NUEVHX0NYMjM0MVhfQkFTRSAoVjRMMl9DVFJMX0NMQVNTX01QRUcgfCAweDEwMDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX0NJRF9NUEVHX0NYMjM0MVhfVklERU9fU1BBVElBTF9GSUxURVJfTU9ERSAoVjRMMl9DSURfTVBFR19DWDIzNDFYX0JBU0UrMCkKIGVudW0gdjRsMl9tcGVnX2N4MjM0MXhfdmlkZW9fc3BhdGlhbF9maWx0ZXJfbW9kZSB7CiAgVjRMMl9NUEVHX0NYMjM0MVhfVklERU9fU1BBVElBTF9GSUxURVJfTU9ERV9NQU5VQUwgPSAwLAogIFY0TDJfTVBFR19DWDIzNDFYX1ZJREVPX1NQQVRJQUxfRklMVEVSX01PREVfQVVUTyA9IDEsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKICNkZWZpbmUgVjRMMl9DSURfTVBFR19DWDIzNDFYX1ZJREVPX1NQQVRJQUxfRklMVEVSIChWNEwyX0NJRF9NUEVHX0NYMjM0MVhfQkFTRSsxKQogI2RlZmluZSBWNEwyX0NJRF9NUEVHX0NYMjM0MVhfVklERU9fTFVNQV9TUEFUSUFMX0ZJTFRFUl9UWVBFIChWNEwyX0NJRF9NUEVHX0NYMjM0MVhfQkFTRSsyKQogZW51bSB2NGwyX21wZWdfY3gyMzQxeF92aWRlb19sdW1hX3NwYXRpYWxfZmlsdGVyX3R5cGUgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBWNEwyX01QRUdfQ1gyMzQxWF9WSURFT19MVU1BX1NQQVRJQUxfRklMVEVSX1RZUEVfT0ZGID0gMCwKICBWNEwyX01QRUdfQ1gyMzQxWF9WSURFT19MVU1BX1NQQVRJQUxfRklMVEVSX1RZUEVfMURfSE9SID0gMSwKICBWNEwyX01QRUdfQ1gyMzQxWF9WSURFT19MVU1BX1NQQVRJQUxfRklMVEVSX1RZUEVfMURfVkVSVCA9IDIsCiAgVjRMMl9NUEVHX0NYMjM0MVhfVklERU9fTFVNQV9TUEFUSUFMX0ZJTFRFUl9UWVBFXzJEX0hWX1NFUEFSQUJMRSA9IDMsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFY0TDJfTVBFR19DWDIzNDFYX1ZJREVPX0xVTUFfU1BBVElBTF9GSUxURVJfVFlQRV8yRF9TWU1fTk9OX1NFUEFSQUJMRSA9IDQsCiB9OwogI2RlZmluZSBWNEwyX0NJRF9NUEVHX0NYMjM0MVhfVklERU9fQ0hST01BX1NQQVRJQUxfRklMVEVSX1RZUEUgKFY0TDJfQ0lEX01QRUdfQ1gyMzQxWF9CQVNFKzMpCiBlbnVtIHY0bDJfbXBlZ19jeDIzNDF4X3ZpZGVvX2Nocm9tYV9zcGF0aWFsX2ZpbHRlcl90eXBlIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVjRMMl9NUEVHX0NYMjM0MVhfVklERU9fQ0hST01BX1NQQVRJQUxfRklMVEVSX1RZUEVfT0ZGID0gMCwKICBWNEwyX01QRUdfQ1gyMzQxWF9WSURFT19DSFJPTUFfU1BBVElBTF9GSUxURVJfVFlQRV8xRF9IT1IgPSAxLAogfTsKICNkZWZpbmUgVjRMMl9DSURfTVBFR19DWDIzNDFYX1ZJREVPX1RFTVBPUkFMX0ZJTFRFUl9NT0RFIChWNEwyX0NJRF9NUEVHX0NYMjM0MVhfQkFTRSs0KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIGVudW0gdjRsMl9tcGVnX2N4MjM0MXhfdmlkZW9fdGVtcG9yYWxfZmlsdGVyX21vZGUgewogIFY0TDJfTVBFR19DWDIzNDFYX1ZJREVPX1RFTVBPUkFMX0ZJTFRFUl9NT0RFX01BTlVBTCA9IDAsCiAgVjRMMl9NUEVHX0NYMjM0MVhfVklERU9fVEVNUE9SQUxfRklMVEVSX01PREVfQVVUTyA9IDEsCiB9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9DSURfTVBFR19DWDIzNDFYX1ZJREVPX1RFTVBPUkFMX0ZJTFRFUiAoVjRMMl9DSURfTVBFR19DWDIzNDFYX0JBU0UrNSkKICNkZWZpbmUgVjRMMl9DSURfTVBFR19DWDIzNDFYX1ZJREVPX01FRElBTl9GSUxURVJfVFlQRSAoVjRMMl9DSURfTVBFR19DWDIzNDFYX0JBU0UrNikKIGVudW0gdjRsMl9tcGVnX2N4MjM0MXhfdmlkZW9fbWVkaWFuX2ZpbHRlcl90eXBlIHsKICBWNEwyX01QRUdfQ1gyMzQxWF9WSURFT19NRURJQU5fRklMVEVSX1RZUEVfT0ZGID0gMCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgVjRMMl9NUEVHX0NYMjM0MVhfVklERU9fTUVESUFOX0ZJTFRFUl9UWVBFX0hPUiA9IDEsCiAgVjRMMl9NUEVHX0NYMjM0MVhfVklERU9fTUVESUFOX0ZJTFRFUl9UWVBFX1ZFUlQgPSAyLAogIFY0TDJfTVBFR19DWDIzNDFYX1ZJREVPX01FRElBTl9GSUxURVJfVFlQRV9IT1JfVkVSVCA9IDMsCiAgVjRMMl9NUEVHX0NYMjM0MVhfVklERU9fTUVESUFOX0ZJTFRFUl9UWVBFX0RJQUcgPSA0LAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07CiAjZGVmaW5lIFY0TDJfQ0lEX01QRUdfQ1gyMzQxWF9WSURFT19MVU1BX01FRElBTl9GSUxURVJfQk9UVE9NIChWNEwyX0NJRF9NUEVHX0NYMjM0MVhfQkFTRSs3KQogI2RlZmluZSBWNEwyX0NJRF9NUEVHX0NYMjM0MVhfVklERU9fTFVNQV9NRURJQU5fRklMVEVSX1RPUCAoVjRMMl9DSURfTVBFR19DWDIzNDFYX0JBU0UrOCkKICNkZWZpbmUgVjRMMl9DSURfTVBFR19DWDIzNDFYX1ZJREVPX0NIUk9NQV9NRURJQU5fRklMVEVSX0JPVFRPTSAoVjRMMl9DSURfTVBFR19DWDIzNDFYX0JBU0UrOSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfQ0lEX01QRUdfQ1gyMzQxWF9WSURFT19DSFJPTUFfTUVESUFOX0ZJTFRFUl9UT1AgKFY0TDJfQ0lEX01QRUdfQ1gyMzQxWF9CQVNFKzEwKQogI2RlZmluZSBWNEwyX0NJRF9NUEVHX0NYMjM0MVhfU1RSRUFNX0lOU0VSVF9OQVZfUEFDS0VUUyAoVjRMMl9DSURfTVBFR19DWDIzNDFYX0JBU0UrMTEpCi0KKyNkZWZpbmUgVjRMMl9DSURfTVBFR19NRkM1MV9CQVNFIChWNEwyX0NUUkxfQ0xBU1NfTVBFRyB8IDB4MTEwMCkKKyNkZWZpbmUgVjRMMl9DSURfTVBFR19RQ09NX0JBU0UgKFY0TDJfQ1RSTF9DTEFTU19NUEVHIHwgMHgyMTAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVjRMMl9DSURfTVBFR19RQ09NX1NFVF9QRVJGX0xFVkVMIChWNEwyX0NJRF9NUEVHX1FDT01fQkFTRSArIDApCitlbnVtIHYzbDJfbXBlZ19xY29tX3BlcmZfbGV2ZWwgeworIFY0TDJfQ0lEX01QRUdfUUNPTV9QRVJGX0xFVkVMX1BFUkZPUk1BTkNFID0gMCwKKyBWNEwyX0NJRF9NUEVHX1FDT01fUEVSRl9MRVZFTF9UVVJCTyA9IDEsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworfTsKKyNkZWZpbmUgVjRMMl9DSURfTVBFR19NRkM1MV9WSURFT19ERUNPREVSX0gyNjRfRElTUExBWV9ERUxBWSAoVjRMMl9DSURfTVBFR19NRkM1MV9CQVNFKzApCisjZGVmaW5lIFY0TDJfQ0lEX01QRUdfTUZDNTFfVklERU9fREVDT0RFUl9IMjY0X0RJU1BMQVlfREVMQVlfRU5BQkxFIChWNEwyX0NJRF9NUEVHX01GQzUxX0JBU0UrMSkKKyNkZWZpbmUgVjRMMl9DSURfTVBFR19NRkM1MV9WSURFT19GUkFNRV9TS0lQX01PREUgKFY0TDJfQ0lEX01QRUdfTUZDNTFfQkFTRSsyKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK2VudW0gdjRsMl9tcGVnX21mYzUxX3ZpZGVvX2ZyYW1lX3NraXBfbW9kZSB7CisgVjRMMl9NUEVHX01GQzUxX1ZJREVPX0ZSQU1FX1NLSVBfTU9ERV9ESVNBQkxFRCA9IDAsCisgVjRMMl9NUEVHX01GQzUxX1ZJREVPX0ZSQU1FX1NLSVBfTU9ERV9MRVZFTF9MSU1JVCA9IDEsCisgVjRMMl9NUEVHX01GQzUxX1ZJREVPX0ZSQU1FX1NLSVBfTU9ERV9CVUZfTElNSVQgPSAyLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK307CisjZGVmaW5lIFY0TDJfQ0lEX01QRUdfTUZDNTFfVklERU9fRk9SQ0VfRlJBTUVfVFlQRSAoVjRMMl9DSURfTVBFR19NRkM1MV9CQVNFKzMpCitlbnVtIHY0bDJfbXBlZ19tZmM1MV92aWRlb19mb3JjZV9mcmFtZV90eXBlIHsKKyBWNEwyX01QRUdfTUZDNTFfVklERU9fRk9SQ0VfRlJBTUVfVFlQRV9ESVNBQkxFRCA9IDAsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIFY0TDJfTVBFR19NRkM1MV9WSURFT19GT1JDRV9GUkFNRV9UWVBFX0lfRlJBTUUgPSAxLAorIFY0TDJfTVBFR19NRkM1MV9WSURFT19GT1JDRV9GUkFNRV9UWVBFX05PVF9DT0RFRCA9IDIsCit9OworI2RlZmluZSBWNEwyX0NJRF9NUEVHX01GQzUxX1ZJREVPX1BBRERJTkcgKFY0TDJfQ0lEX01QRUdfTUZDNTFfQkFTRSs0KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVjRMMl9DSURfTVBFR19NRkM1MV9WSURFT19QQURESU5HX1lVViAoVjRMMl9DSURfTVBFR19NRkM1MV9CQVNFKzUpCisjZGVmaW5lIFY0TDJfQ0lEX01QRUdfTUZDNTFfVklERU9fUkNfRklYRURfVEFSR0VUX0JJVCAoVjRMMl9DSURfTVBFR19NRkM1MV9CQVNFKzYpCisjZGVmaW5lIFY0TDJfQ0lEX01QRUdfTUZDNTFfVklERU9fUkNfUkVBQ1RJT05fQ09FRkYgKFY0TDJfQ0lEX01QRUdfTUZDNTFfQkFTRSs3KQorI2RlZmluZSBWNEwyX0NJRF9NUEVHX01GQzUxX1ZJREVPX0gyNjRfQURBUFRJVkVfUkNfQUNUSVZJVFkgKFY0TDJfQ0lEX01QRUdfTUZDNTFfQkFTRSs1MCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFY0TDJfQ0lEX01QRUdfTUZDNTFfVklERU9fSDI2NF9BREFQVElWRV9SQ19EQVJLIChWNEwyX0NJRF9NUEVHX01GQzUxX0JBU0UrNTEpCisjZGVmaW5lIFY0TDJfQ0lEX01QRUdfTUZDNTFfVklERU9fSDI2NF9BREFQVElWRV9SQ19TTU9PVEggKFY0TDJfQ0lEX01QRUdfTUZDNTFfQkFTRSs1MikKKyNkZWZpbmUgVjRMMl9DSURfTVBFR19NRkM1MV9WSURFT19IMjY0X0FEQVBUSVZFX1JDX1NUQVRJQyAoVjRMMl9DSURfTVBFR19NRkM1MV9CQVNFKzUzKQorI2RlZmluZSBWNEwyX0NJRF9NUEVHX01GQzUxX1ZJREVPX0gyNjRfTlVNX1JFRl9QSUNfRk9SX1AgKFY0TDJfQ0lEX01QRUdfTUZDNTFfQkFTRSs1NCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFY0TDJfQ0lEX01QRUdfTVNNX1ZJRENfQkFTRSAoVjRMMl9DVFJMX0NMQVNTX01QRUcgfCAweDIwMDApCisjZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklEQ19WSURFT19FTkFCTEVfUElDVFVSRV9UWVBFICAgKFY0TDJfQ0lEX01QRUdfTVNNX1ZJRENfQkFTRSswKQorI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJRENfVklERU9fS0VFUF9BU1BFQ1RfUkFUSU8gICAoVjRMMl9DSURfTVBFR19NU01fVklEQ19CQVNFKzEpCisjZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklEQ19WSURFT19QT1NUX0xPT1BfREVCTE9DS0VSX01PREUgICAoVjRMMl9DSURfTVBFR19NU01fVklEQ19CQVNFKzIpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJRENfVklERU9fRElWWF9GT1JNQVQgICAoVjRMMl9DSURfTVBFR19NU01fVklEQ19CQVNFKzMpCitlbnVtIHY0bDJfbXBlZ192aWRjX3ZpZGVvX2RpdnhfZm9ybWF0X3R5cGUgeworIFY0TDJfTVBFR19WSURDX1ZJREVPX0RJVlhfRk9STUFUXzQgPSAwLAorIFY0TDJfTVBFR19WSURDX1ZJREVPX0RJVlhfRk9STUFUXzUgPSAxLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBWNEwyX01QRUdfVklEQ19WSURFT19ESVZYX0ZPUk1BVF82ID0gMiwKK307CisjZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklEQ19WSURFT19NQl9FUlJPUl9NQVBfUkVQT1JUSU5HICAgKFY0TDJfQ0lEX01QRUdfTVNNX1ZJRENfQkFTRSs0KQorI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJRENfVklERU9fQ09OVElOVUVfREFUQV9UUkFOU0ZFUiAgIChWNEwyX0NJRF9NUEVHX01TTV9WSURDX0JBU0UrNSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklEQ19WSURFT19TVFJFQU1fRk9STUFUIChWNEwyX0NJRF9NUEVHX01TTV9WSURDX0JBU0UrNikKK2VudW0gdjRsMl9tcGVnX3ZpZGNfdmlkZW9fc3RyZWFtX2Zvcm1hdCB7CisgVjRMMl9NUEVHX1ZJRENfVklERU9fTkFMX0ZPUk1BVF9TVEFSVENPREVTID0gMCwKKyBWNEwyX01QRUdfVklEQ19WSURFT19OQUxfRk9STUFUX09ORV9OQUxfUEVSX0JVRkZFUiA9IDEsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIFY0TDJfTVBFR19WSURDX1ZJREVPX05BTF9GT1JNQVRfT05FX0JZVEVfTEVOR1RIID0gMiwKKyBWNEwyX01QRUdfVklEQ19WSURFT19OQUxfRk9STUFUX1RXT19CWVRFX0xFTkdUSCA9IDMsCisgVjRMMl9NUEVHX1ZJRENfVklERU9fTkFMX0ZPUk1BVF9GT1VSX0JZVEVfTEVOR1RIID0gNCwKK307CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJRENfVklERU9fT1VUUFVUX09SREVSIChWNEwyX0NJRF9NUEVHX01TTV9WSURDX0JBU0UrNykKK2VudW0gdjRsMl9tcGVnX3ZpZGNfdmlkZW9fb3V0cHV0X29yZGVyIHsKKyBWNEwyX01QRUdfVklEQ19WSURFT19PVVRQVVRfT1JERVJfRElTUExBWSA9IDAsCisgVjRMMl9NUEVHX1ZJRENfVklERU9fT1VUUFVUX09SREVSX0RFQ09ERSA9IDEsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworfTsKKyNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURDX1ZJREVPX0ZSQU1FX1JBVEUgKFY0TDJfQ0lEX01QRUdfTVNNX1ZJRENfQkFTRSs4KQorI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJRENfVklERU9fSURSX1BFUklPRCAoVjRMMl9DSURfTVBFR19NU01fVklEQ19CQVNFKzkpCisjZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklEQ19WSURFT19OVU1fUF9GUkFNRVMgKFY0TDJfQ0lEX01QRUdfTVNNX1ZJRENfQkFTRSsxMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklEQ19WSURFT19OVU1fQl9GUkFNRVMgKFY0TDJfQ0lEX01QRUdfTVNNX1ZJRENfQkFTRSsxMSkKKyNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURDX1ZJREVPX1JFUVVFU1RfSUZSQU1FIChWNEwyX0NJRF9NUEVHX01TTV9WSURDX0JBU0UrMTIpCisjZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklEQ19WSURFT19SQVRFX0NPTlRST0wgKFY0TDJfQ0lEX01QRUdfTVNNX1ZJRENfQkFTRSsxMykKK2VudW0gdjRsMl9tcGVnX3ZpZGNfdmlkZW9fcmF0ZV9jb250cm9sIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgVjRMMl9DSURfTVBFR19WSURDX1ZJREVPX1JBVEVfQ09OVFJPTF9PRkYgPSAwLAorIFY0TDJfQ0lEX01QRUdfVklEQ19WSURFT19SQVRFX0NPTlRST0xfVkJSX1ZGUiA9IDEsCisgVjRMMl9DSURfTVBFR19WSURDX1ZJREVPX1JBVEVfQ09OVFJPTF9WQlJfQ0ZSID0gMiwKKyBWNEwyX0NJRF9NUEVHX1ZJRENfVklERU9fUkFURV9DT05UUk9MX0NCUl9WRlIgPSAzLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBWNEwyX0NJRF9NUEVHX1ZJRENfVklERU9fUkFURV9DT05UUk9MX0NCUl9DRlIgPSA0LAorfTsKKyNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURDX1ZJREVPX1JPVEFUSU9OIChWNEwyX0NJRF9NUEVHX01TTV9WSURDX0JBU0UrMTQpCitlbnVtIHY0bDJfbXBlZ192aWRjX3ZpZGVvX3JvdGF0aW9uIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgVjRMMl9DSURfTVBFR19WSURDX1ZJREVPX1JPVEFUSU9OX05PTkUgPSAwLAorIFY0TDJfQ0lEX01QRUdfVklEQ19WSURFT19ST1RBVElPTl85MCA9IDEsCisgVjRMMl9DSURfTVBFR19WSURDX1ZJREVPX1JPVEFUSU9OXzE4MCA9IDIsCisgVjRMMl9DSURfTVBFR19WSURDX1ZJREVPX1JPVEFUSU9OXzI3MCA9IDMsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworfTsKKyNkZWZpbmUgTVNNX1ZJRENfQkFTRSBWNEwyX0NJRF9NUEVHX01TTV9WSURDX0JBU0UKKyNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURDX1ZJREVPX0gyNjRfQ0FCQUNfTU9ERUwgKE1TTV9WSURDX0JBU0UrMTUpCitlbnVtIHY0bDJfbXBlZ192aWRjX2gyNjRfY2FiYWNfbW9kZWwgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBWNEwyX0NJRF9NUEVHX1ZJRENfVklERU9fSDI2NF9DQUJBQ19NT0RFTF8wID0gMCwKKyBWNEwyX0NJRF9NUEVHX1ZJRENfVklERU9fSDI2NF9DQUJBQ19NT0RFTF8xID0gMSwKKyBWNEwyX0NJRF9NUEVHX1ZJRENfVklERU9fSDI2NF9DQUJBQ19NT0RFTF8yID0gMiwKK307CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJRENfVklERU9fSU5UUkFfUkVGUkVTSF9NT0RFIChNU01fVklEQ19CQVNFKzE2KQorZW51bSB2NGwyX21wZWdfdmlkY192aWRlb19pbnRyYV9yZWZyZXNoX21vZGUgeworIFY0TDJfQ0lEX01QRUdfVklEQ19WSURFT19JTlRSQV9SRUZSRVNIX05PTkUgPSAwLAorIFY0TDJfQ0lEX01QRUdfVklEQ19WSURFT19JTlRSQV9SRUZSRVNIX0NZQ0xJQyA9IDEsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIFY0TDJfQ0lEX01QRUdfVklEQ19WSURFT19JTlRSQV9SRUZSRVNIX0FEQVBUSVZFID0gMiwKKyBWNEwyX0NJRF9NUEVHX1ZJRENfVklERU9fSU5UUkFfUkVGUkVTSF9DWUNMSUNfQURBUFRJVkUgPSAzLAorIFY0TDJfQ0lEX01QRUdfVklEQ19WSURFT19JTlRSQV9SRUZSRVNIX1JBTkRPTSA9IDQsCit9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURDX1ZJREVPX0FJUl9NQlMgKFY0TDJfQ0lEX01QRUdfTVNNX1ZJRENfQkFTRSsxNykKKyNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURDX1ZJREVPX0FJUl9SRUYgKFY0TDJfQ0lEX01QRUdfTVNNX1ZJRENfQkFTRSsxOCkKKyNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURDX1ZJREVPX0NJUl9NQlMgKFY0TDJfQ0lEX01QRUdfTVNNX1ZJRENfQkFTRSsxOSkKKyNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURDX1ZJREVPX0gyNjNfUFJPRklMRSAoVjRMMl9DSURfTVBFR19NU01fVklEQ19CQVNFKzIwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK2VudW0gdjRsMl9tcGVnX3ZpZGNfdmlkZW9faDI2M19wcm9maWxlIHsKKyBWNEwyX01QRUdfVklEQ19WSURFT19IMjYzX1BST0ZJTEVfQkFTRUxJTkUgPSAwLAorIFY0TDJfTVBFR19WSURDX1ZJREVPX0gyNjNfUFJPRklMRV9IMzIwQ09ESU5HID0gMSwKKyBWNEwyX01QRUdfVklEQ19WSURFT19IMjYzX1BST0ZJTEVfQkFDS1dBUkRDT01QQVRJQkxFID0gMiwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgVjRMMl9NUEVHX1ZJRENfVklERU9fSDI2M19QUk9GSUxFX0lTV1YyID0gMywKKyBWNEwyX01QRUdfVklEQ19WSURFT19IMjYzX1BST0ZJTEVfSVNXVjMgPSA0LAorIFY0TDJfTVBFR19WSURDX1ZJREVPX0gyNjNfUFJPRklMRV9ISUdIQ09NUFJFU1NJT04gPSA1LAorIFY0TDJfTVBFR19WSURDX1ZJREVPX0gyNjNfUFJPRklMRV9JTlRFUk5FVCA9IDYsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIFY0TDJfTVBFR19WSURDX1ZJREVPX0gyNjNfUFJPRklMRV9JTlRFUkxBQ0UgPSA3LAorIFY0TDJfTVBFR19WSURDX1ZJREVPX0gyNjNfUFJPRklMRV9ISUdITEFURU5DWSA9IDgsCit9OworI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJRENfVklERU9fSDI2M19MRVZFTCAoVjRMMl9DSURfTVBFR19NU01fVklEQ19CQVNFKzIxKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK2VudW0gdjRsMl9tcGVnX3ZpZGNfdmlkZW9faDI2M19sZXZlbCB7CisgVjRMMl9NUEVHX1ZJRENfVklERU9fSDI2M19MRVZFTF8xXzAgPSAwLAorIFY0TDJfTVBFR19WSURDX1ZJREVPX0gyNjNfTEVWRUxfMl8wID0gMSwKKyBWNEwyX01QRUdfVklEQ19WSURFT19IMjYzX0xFVkVMXzNfMCA9IDIsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIFY0TDJfTVBFR19WSURDX1ZJREVPX0gyNjNfTEVWRUxfNF8wID0gMywKKyBWNEwyX01QRUdfVklEQ19WSURFT19IMjYzX0xFVkVMXzRfNSA9IDQsCisgVjRMMl9NUEVHX1ZJRENfVklERU9fSDI2M19MRVZFTF81XzAgPSA1LAorIFY0TDJfTVBFR19WSURDX1ZJREVPX0gyNjNfTEVWRUxfNl8wID0gNiwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgVjRMMl9NUEVHX1ZJRENfVklERU9fSDI2M19MRVZFTF83XzAgPSA3LAorfTsKICNkZWZpbmUgVjRMMl9DSURfQ0FNRVJBX0NMQVNTX0JBU0UgKFY0TDJfQ1RSTF9DTEFTU19DQU1FUkEgfCAweDkwMCkKICNkZWZpbmUgVjRMMl9DSURfQ0FNRVJBX0NMQVNTIChWNEwyX0NUUkxfQ0xBU1NfQ0FNRVJBIHwgMSkKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9DSURfRVhQT1NVUkVfQVVUTyAoVjRMMl9DSURfQ0FNRVJBX0NMQVNTX0JBU0UrMSkKIGVudW0gdjRsMl9leHBvc3VyZV9hdXRvX3R5cGUgewogIFY0TDJfRVhQT1NVUkVfQVVUTyA9IDAsCiAgVjRMMl9FWFBPU1VSRV9NQU5VQUwgPSAxLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBWNEwyX0VYUE9TVVJFX1NIVVRURVJfUFJJT1JJVFkgPSAyLAogIFY0TDJfRVhQT1NVUkVfQVBFUlRVUkVfUFJJT1JJVFkgPSAzCiB9OwogI2RlZmluZSBWNEwyX0NJRF9FWFBPU1VSRV9BQlNPTFVURSAoVjRMMl9DSURfQ0FNRVJBX0NMQVNTX0JBU0UrMikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfQ0lEX0VYUE9TVVJFX0FVVE9fUFJJT1JJVFkgKFY0TDJfQ0lEX0NBTUVSQV9DTEFTU19CQVNFKzMpCi0KICNkZWZpbmUgVjRMMl9DSURfUEFOX1JFTEFUSVZFIChWNEwyX0NJRF9DQU1FUkFfQ0xBU1NfQkFTRSs0KQogI2RlZmluZSBWNEwyX0NJRF9USUxUX1JFTEFUSVZFIChWNEwyX0NJRF9DQU1FUkFfQ0xBU1NfQkFTRSs1KQogI2RlZmluZSBWNEwyX0NJRF9QQU5fUkVTRVQgKFY0TDJfQ0lEX0NBTUVSQV9DTEFTU19CQVNFKzYpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX0NJRF9USUxUX1JFU0VUIChWNEwyX0NJRF9DQU1FUkFfQ0xBU1NfQkFTRSs3KQotCiAjZGVmaW5lIFY0TDJfQ0lEX1BBTl9BQlNPTFVURSAoVjRMMl9DSURfQ0FNRVJBX0NMQVNTX0JBU0UrOCkKICNkZWZpbmUgVjRMMl9DSURfVElMVF9BQlNPTFVURSAoVjRMMl9DSURfQ0FNRVJBX0NMQVNTX0JBU0UrOSkKLQogI2RlZmluZSBWNEwyX0NJRF9GT0NVU19BQlNPTFVURSAoVjRMMl9DSURfQ0FNRVJBX0NMQVNTX0JBU0UrMTApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX0NJRF9GT0NVU19SRUxBVElWRSAoVjRMMl9DSURfQ0FNRVJBX0NMQVNTX0JBU0UrMTEpCiAjZGVmaW5lIFY0TDJfQ0lEX0ZPQ1VTX0FVVE8gKFY0TDJfQ0lEX0NBTUVSQV9DTEFTU19CQVNFKzEyKQotCiAjZGVmaW5lIFY0TDJfQ0lEX1pPT01fQUJTT0xVVEUgKFY0TDJfQ0lEX0NBTUVSQV9DTEFTU19CQVNFKzEzKQogI2RlZmluZSBWNEwyX0NJRF9aT09NX1JFTEFUSVZFIChWNEwyX0NJRF9DQU1FUkFfQ0xBU1NfQkFTRSsxNCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfQ0lEX1pPT01fQ09OVElOVU9VUyAoVjRMMl9DSURfQ0FNRVJBX0NMQVNTX0JBU0UrMTUpCi0KICNkZWZpbmUgVjRMMl9DSURfUFJJVkFDWSAoVjRMMl9DSURfQ0FNRVJBX0NMQVNTX0JBU0UrMTYpCi0KKyNkZWZpbmUgVjRMMl9DSURfSVJJU19BQlNPTFVURSAoVjRMMl9DSURfQ0FNRVJBX0NMQVNTX0JBU0UrMTcpCisjZGVmaW5lIFY0TDJfQ0lEX0lSSVNfUkVMQVRJVkUgKFY0TDJfQ0lEX0NBTUVSQV9DTEFTU19CQVNFKzE4KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVjRMMl9DSURfRk1fVFhfQ0xBU1NfQkFTRSAoVjRMMl9DVFJMX0NMQVNTX0ZNX1RYIHwgMHg5MDApCisjZGVmaW5lIFY0TDJfQ0lEX0ZNX1RYX0NMQVNTIChWNEwyX0NUUkxfQ0xBU1NfRk1fVFggfCAxKQorI2RlZmluZSBWNEwyX0NJRF9SRFNfVFhfREVWSUFUSU9OIChWNEwyX0NJRF9GTV9UWF9DTEFTU19CQVNFICsgMSkKKyNkZWZpbmUgVjRMMl9DSURfUkRTX1RYX1BJIChWNEwyX0NJRF9GTV9UWF9DTEFTU19CQVNFICsgMikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFY0TDJfQ0lEX1JEU19UWF9QVFkgKFY0TDJfQ0lEX0ZNX1RYX0NMQVNTX0JBU0UgKyAzKQorI2RlZmluZSBWNEwyX0NJRF9SRFNfVFhfUFNfTkFNRSAoVjRMMl9DSURfRk1fVFhfQ0xBU1NfQkFTRSArIDUpCisjZGVmaW5lIFY0TDJfQ0lEX1JEU19UWF9SQURJT19URVhUIChWNEwyX0NJRF9GTV9UWF9DTEFTU19CQVNFICsgNikKKyNkZWZpbmUgVjRMMl9DSURfQVVESU9fTElNSVRFUl9FTkFCTEVEIChWNEwyX0NJRF9GTV9UWF9DTEFTU19CQVNFICsgNjQpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBWNEwyX0NJRF9BVURJT19MSU1JVEVSX1JFTEVBU0VfVElNRSAoVjRMMl9DSURfRk1fVFhfQ0xBU1NfQkFTRSArIDY1KQorI2RlZmluZSBWNEwyX0NJRF9BVURJT19MSU1JVEVSX0RFVklBVElPTiAoVjRMMl9DSURfRk1fVFhfQ0xBU1NfQkFTRSArIDY2KQorI2RlZmluZSBWNEwyX0NJRF9BVURJT19DT01QUkVTU0lPTl9FTkFCTEVEIChWNEwyX0NJRF9GTV9UWF9DTEFTU19CQVNFICsgODApCisjZGVmaW5lIFY0TDJfQ0lEX0FVRElPX0NPTVBSRVNTSU9OX0dBSU4gKFY0TDJfQ0lEX0ZNX1RYX0NMQVNTX0JBU0UgKyA4MSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFY0TDJfQ0lEX0FVRElPX0NPTVBSRVNTSU9OX1RIUkVTSE9MRCAoVjRMMl9DSURfRk1fVFhfQ0xBU1NfQkFTRSArIDgyKQorI2RlZmluZSBWNEwyX0NJRF9BVURJT19DT01QUkVTU0lPTl9BVFRBQ0tfVElNRSAoVjRMMl9DSURfRk1fVFhfQ0xBU1NfQkFTRSArIDgzKQorI2RlZmluZSBWNEwyX0NJRF9BVURJT19DT01QUkVTU0lPTl9SRUxFQVNFX1RJTUUgKFY0TDJfQ0lEX0ZNX1RYX0NMQVNTX0JBU0UgKyA4NCkKKyNkZWZpbmUgVjRMMl9DSURfUElMT1RfVE9ORV9FTkFCTEVEIChWNEwyX0NJRF9GTV9UWF9DTEFTU19CQVNFICsgOTYpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBWNEwyX0NJRF9QSUxPVF9UT05FX0RFVklBVElPTiAoVjRMMl9DSURfRk1fVFhfQ0xBU1NfQkFTRSArIDk3KQorI2RlZmluZSBWNEwyX0NJRF9QSUxPVF9UT05FX0ZSRVFVRU5DWSAoVjRMMl9DSURfRk1fVFhfQ0xBU1NfQkFTRSArIDk4KQorI2RlZmluZSBWNEwyX0NJRF9UVU5FX1BSRUVNUEhBU0lTIChWNEwyX0NJRF9GTV9UWF9DTEFTU19CQVNFICsgMTEyKQorZW51bSB2NGwyX3ByZWVtcGhhc2lzIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgVjRMMl9QUkVFTVBIQVNJU19ESVNBQkxFRCA9IDAsCisgVjRMMl9QUkVFTVBIQVNJU181MF91UyA9IDEsCisgVjRMMl9QUkVFTVBIQVNJU183NV91UyA9IDIsCit9OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVjRMMl9DSURfVFVORV9QT1dFUl9MRVZFTCAoVjRMMl9DSURfRk1fVFhfQ0xBU1NfQkFTRSArIDExMykKKyNkZWZpbmUgVjRMMl9DSURfVFVORV9BTlRFTk5BX0NBUEFDSVRPUiAoVjRMMl9DSURfRk1fVFhfQ0xBU1NfQkFTRSArIDExNCkKKyNkZWZpbmUgVjRMMl9DSURfRkxBU0hfQ0xBU1NfQkFTRSAoVjRMMl9DVFJMX0NMQVNTX0ZMQVNIIHwgMHg5MDApCisjZGVmaW5lIFY0TDJfQ0lEX0ZMQVNIX0NMQVNTIChWNEwyX0NUUkxfQ0xBU1NfRkxBU0ggfCAxKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVjRMMl9DSURfRkxBU0hfTEVEX01PREUgKFY0TDJfQ0lEX0ZMQVNIX0NMQVNTX0JBU0UgKyAxKQorZW51bSB2NGwyX2ZsYXNoX2xlZF9tb2RlIHsKKyBWNEwyX0ZMQVNIX0xFRF9NT0RFX05PTkUsCisgVjRMMl9GTEFTSF9MRURfTU9ERV9GTEFTSCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgVjRMMl9GTEFTSF9MRURfTU9ERV9UT1JDSCwKK307CisjZGVmaW5lIFY0TDJfQ0lEX0ZMQVNIX1NUUk9CRV9TT1VSQ0UgKFY0TDJfQ0lEX0ZMQVNIX0NMQVNTX0JBU0UgKyAyKQorZW51bSB2NGwyX2ZsYXNoX3N0cm9iZV9zb3VyY2UgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBWNEwyX0ZMQVNIX1NUUk9CRV9TT1VSQ0VfU09GVFdBUkUsCisgVjRMMl9GTEFTSF9TVFJPQkVfU09VUkNFX0VYVEVSTkFMLAorfTsKKyNkZWZpbmUgVjRMMl9DSURfRkxBU0hfU1RST0JFIChWNEwyX0NJRF9GTEFTSF9DTEFTU19CQVNFICsgMykKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFY0TDJfQ0lEX0ZMQVNIX1NUUk9CRV9TVE9QIChWNEwyX0NJRF9GTEFTSF9DTEFTU19CQVNFICsgNCkKKyNkZWZpbmUgVjRMMl9DSURfRkxBU0hfU1RST0JFX1NUQVRVUyAoVjRMMl9DSURfRkxBU0hfQ0xBU1NfQkFTRSArIDUpCisjZGVmaW5lIFY0TDJfQ0lEX0ZMQVNIX1RJTUVPVVQgKFY0TDJfQ0lEX0ZMQVNIX0NMQVNTX0JBU0UgKyA2KQorI2RlZmluZSBWNEwyX0NJRF9GTEFTSF9JTlRFTlNJVFkgKFY0TDJfQ0lEX0ZMQVNIX0NMQVNTX0JBU0UgKyA3KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVjRMMl9DSURfRkxBU0hfVE9SQ0hfSU5URU5TSVRZIChWNEwyX0NJRF9GTEFTSF9DTEFTU19CQVNFICsgOCkKKyNkZWZpbmUgVjRMMl9DSURfRkxBU0hfSU5ESUNBVE9SX0lOVEVOU0lUWSAoVjRMMl9DSURfRkxBU0hfQ0xBU1NfQkFTRSArIDkpCisjZGVmaW5lIFY0TDJfQ0lEX0ZMQVNIX0ZBVUxUIChWNEwyX0NJRF9GTEFTSF9DTEFTU19CQVNFICsgMTApCisjZGVmaW5lIFY0TDJfRkxBU0hfRkFVTFRfT1ZFUl9WT0xUQUdFICgxIDw8IDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBWNEwyX0ZMQVNIX0ZBVUxUX1RJTUVPVVQgKDEgPDwgMSkKKyNkZWZpbmUgVjRMMl9GTEFTSF9GQVVMVF9PVkVSX1RFTVBFUkFUVVJFICgxIDw8IDIpCisjZGVmaW5lIFY0TDJfRkxBU0hfRkFVTFRfU0hPUlRfQ0lSQ1VJVCAoMSA8PCAzKQorI2RlZmluZSBWNEwyX0ZMQVNIX0ZBVUxUX09WRVJfQ1VSUkVOVCAoMSA8PCA0KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVjRMMl9GTEFTSF9GQVVMVF9JTkRJQ0FUT1IgKDEgPDwgNSkKKyNkZWZpbmUgVjRMMl9DSURfRkxBU0hfQ0hBUkdFIChWNEwyX0NJRF9GTEFTSF9DTEFTU19CQVNFICsgMTEpCisjZGVmaW5lIFY0TDJfQ0lEX0ZMQVNIX1JFQURZIChWNEwyX0NJRF9GTEFTSF9DTEFTU19CQVNFICsgMTIpCisjZGVmaW5lIFY0TDJfQ0lEX0pQRUdfQ0xBU1NfQkFTRSAoVjRMMl9DVFJMX0NMQVNTX0pQRUcgfCAweDkwMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFY0TDJfQ0lEX0pQRUdfQ0xBU1MgKFY0TDJfQ1RSTF9DTEFTU19KUEVHIHwgMSkKKyNkZWZpbmUgVjRMMl9DSURfSlBFR19DSFJPTUFfU1VCU0FNUExJTkcgKFY0TDJfQ0lEX0pQRUdfQ0xBU1NfQkFTRSArIDEpCitlbnVtIHY0bDJfanBlZ19jaHJvbWFfc3Vic2FtcGxpbmcgeworIFY0TDJfSlBFR19DSFJPTUFfU1VCU0FNUExJTkdfNDQ0ID0gMCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgVjRMMl9KUEVHX0NIUk9NQV9TVUJTQU1QTElOR180MjIgPSAxLAorIFY0TDJfSlBFR19DSFJPTUFfU1VCU0FNUExJTkdfNDIwID0gMiwKKyBWNEwyX0pQRUdfQ0hST01BX1NVQlNBTVBMSU5HXzQxMSA9IDMsCisgVjRMMl9KUEVHX0NIUk9NQV9TVUJTQU1QTElOR180MTAgPSA0LAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBWNEwyX0pQRUdfQ0hST01BX1NVQlNBTVBMSU5HX0dSQVkgPSA1LAorfTsKKyNkZWZpbmUgVjRMMl9DSURfSlBFR19SRVNUQVJUX0lOVEVSVkFMIChWNEwyX0NJRF9KUEVHX0NMQVNTX0JBU0UgKyAyKQorI2RlZmluZSBWNEwyX0NJRF9KUEVHX0NPTVBSRVNTSU9OX1FVQUxJVFkgKFY0TDJfQ0lEX0pQRUdfQ0xBU1NfQkFTRSArIDMpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBWNEwyX0NJRF9KUEVHX0FDVElWRV9NQVJLRVIgKFY0TDJfQ0lEX0pQRUdfQ0xBU1NfQkFTRSArIDQpCisjZGVmaW5lIFY0TDJfSlBFR19BQ1RJVkVfTUFSS0VSX0FQUDAgKDEgPDwgMCkKKyNkZWZpbmUgVjRMMl9KUEVHX0FDVElWRV9NQVJLRVJfQVBQMSAoMSA8PCAxKQorI2RlZmluZSBWNEwyX0pQRUdfQUNUSVZFX01BUktFUl9DT00gKDEgPDwgMTYpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBWNEwyX0pQRUdfQUNUSVZFX01BUktFUl9EUVQgKDEgPDwgMTcpCisjZGVmaW5lIFY0TDJfSlBFR19BQ1RJVkVfTUFSS0VSX0RIVCAoMSA8PCAxOCkKIHN0cnVjdCB2NGwyX3R1bmVyIHsKICBfX3UzMiBpbmRleDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191OCBuYW1lWzMyXTsKICBlbnVtIHY0bDJfdHVuZXJfdHlwZSB0eXBlOwogIF9fdTMyIGNhcGFiaWxpdHk7CiAgX191MzIgcmFuZ2Vsb3c7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHJhbmdlaGlnaDsKICBfX3UzMiByeHN1YmNoYW5zOwogIF9fdTMyIGF1ZG1vZGU7CiAgX19zMzIgc2lnbmFsOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3MzMiBhZmM7CiAgX191MzIgcmVzZXJ2ZWRbNF07CiB9OwotCiBzdHJ1Y3QgdjRsMl9tb2R1bGF0b3IgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBpbmRleDsKICBfX3U4IG5hbWVbMzJdOwogIF9fdTMyIGNhcGFiaWxpdHk7CiAgX191MzIgcmFuZ2Vsb3c7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHJhbmdlaGlnaDsKICBfX3UzMiB0eHN1YmNoYW5zOwogIF9fdTMyIHJlc2VydmVkWzRdOwogfTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9UVU5FUl9DQVBfTE9XIDB4MDAwMQogI2RlZmluZSBWNEwyX1RVTkVSX0NBUF9OT1JNIDB4MDAwMgogI2RlZmluZSBWNEwyX1RVTkVSX0NBUF9TVEVSRU8gMHgwMDEwCiAjZGVmaW5lIFY0TDJfVFVORVJfQ0FQX0xBTkcyIDB4MDAyMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9UVU5FUl9DQVBfU0FQIDB4MDAyMAogI2RlZmluZSBWNEwyX1RVTkVSX0NBUF9MQU5HMSAweDAwNDAKLQorI2RlZmluZSBWNEwyX1RVTkVSX0NBUF9SRFMgMHgwMDgwCisjZGVmaW5lIFY0TDJfVFVORVJfQ0FQX1JEU19CTE9DS19JTyAweDAxMDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFY0TDJfVFVORVJfQ0FQX1JEU19DT05UUk9MUyAweDAyMDAKICNkZWZpbmUgVjRMMl9UVU5FUl9TVUJfTU9OTyAweDAwMDEKICNkZWZpbmUgVjRMMl9UVU5FUl9TVUJfU1RFUkVPIDB4MDAwMgogI2RlZmluZSBWNEwyX1RVTkVSX1NVQl9MQU5HMiAweDAwMDQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfVFVORVJfU1VCX1NBUCAweDAwMDQKICNkZWZpbmUgVjRMMl9UVU5FUl9TVUJfTEFORzEgMHgwMDA4Ci0KKyNkZWZpbmUgVjRMMl9UVU5FUl9TVUJfUkRTIDB4MDAxMAogI2RlZmluZSBWNEwyX1RVTkVSX01PREVfTU9OTyAweDAwMDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfVFVORVJfTU9ERV9TVEVSRU8gMHgwMDAxCiAjZGVmaW5lIFY0TDJfVFVORVJfTU9ERV9MQU5HMiAweDAwMDIKICNkZWZpbmUgVjRMMl9UVU5FUl9NT0RFX1NBUCAweDAwMDIKICNkZWZpbmUgVjRMMl9UVU5FUl9NT0RFX0xBTkcxIDB4MDAwMworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVjRMMl9UVU5FUl9NT0RFX0xBTkcxX0xBTkcyIDB4MDAwNAotCiBzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kgewogIF9fdTMyIHR1bmVyOwogIGVudW0gdjRsMl90dW5lcl90eXBlIHR5cGU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGZyZXF1ZW5jeTsKICBfX3UzMiByZXNlcnZlZFs4XTsKIH07Ci0KIHN0cnVjdCB2NGwyX2h3X2ZyZXFfc2VlayB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHR1bmVyOwogIGVudW0gdjRsMl90dW5lcl90eXBlIHR5cGU7CiAgX191MzIgc2Vla191cHdhcmQ7CiAgX191MzIgd3JhcF9hcm91bmQ7Ci0gX191MzIgcmVzZXJ2ZWRbOF07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTMyIHNwYWNpbmc7CisgX191MzIgcmVzZXJ2ZWRbN107CiB9OwotCitzdHJ1Y3QgdjRsMl9yZHNfZGF0YSB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTggbHNiOworIF9fdTggbXNiOworIF9fdTggYmxvY2s7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFY0TDJfUkRTX0JMT0NLX01TSyAweDcKKyNkZWZpbmUgVjRMMl9SRFNfQkxPQ0tfQSAwCisjZGVmaW5lIFY0TDJfUkRTX0JMT0NLX0IgMQorI2RlZmluZSBWNEwyX1JEU19CTE9DS19DIDIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFY0TDJfUkRTX0JMT0NLX0QgMworI2RlZmluZSBWNEwyX1JEU19CTE9DS19DX0FMVCA0CisjZGVmaW5lIFY0TDJfUkRTX0JMT0NLX0lOVkFMSUQgNworI2RlZmluZSBWNEwyX1JEU19CTE9DS19DT1JSRUNURUQgMHg0MAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVjRMMl9SRFNfQkxPQ0tfRVJST1IgMHg4MAogc3RydWN0IHY0bDJfYXVkaW8gewogIF9fdTMyIGluZGV4OwogIF9fdTggbmFtZVszMl07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIGNhcGFiaWxpdHk7CiAgX191MzIgbW9kZTsKICBfX3UzMiByZXNlcnZlZFsyXTsKIH07Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfQVVEQ0FQX1NURVJFTyAweDAwMDAxCiAjZGVmaW5lIFY0TDJfQVVEQ0FQX0FWTCAweDAwMDAyCi0KICNkZWZpbmUgVjRMMl9BVURNT0RFX0FWTCAweDAwMDAxCi0KIHN0cnVjdCB2NGwyX2F1ZGlvb3V0IHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgaW5kZXg7CiAgX191OCBuYW1lWzMyXTsKICBfX3UzMiBjYXBhYmlsaXR5OwogIF9fdTMyIG1vZGU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHJlc2VydmVkWzJdOwogfTsKLQogI2RlZmluZSBWNEwyX0VOQ19JRFhfRlJBTUVfSSAoMCkKICNkZWZpbmUgVjRMMl9FTkNfSURYX0ZSQU1FX1AgKDEpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX0VOQ19JRFhfRlJBTUVfQiAoMikKICNkZWZpbmUgVjRMMl9FTkNfSURYX0ZSQU1FX01BU0sgKDB4ZikKLQogc3RydWN0IHY0bDJfZW5jX2lkeF9lbnRyeSB7CiAgX191NjQgb2Zmc2V0OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U2NCBwdHM7CiAgX191MzIgbGVuZ3RoOwogIF9fdTMyIGZsYWdzOwogIF9fdTMyIHJlc2VydmVkWzJdOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07Ci0KICNkZWZpbmUgVjRMMl9FTkNfSURYX0VOVFJJRVMgKDY0KQogc3RydWN0IHY0bDJfZW5jX2lkeCB7CiAgX191MzIgZW50cmllczsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgZW50cmllc19jYXA7CiAgX191MzIgcmVzZXJ2ZWRbNF07CiAgc3RydWN0IHY0bDJfZW5jX2lkeF9lbnRyeSBlbnRyeVtWNEwyX0VOQ19JRFhfRU5UUklFU107CiB9OwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWNEwyX0VOQ19DTURfU1RBUlQgKDApCiAjZGVmaW5lIFY0TDJfRU5DX0NNRF9TVE9QICgxKQogI2RlZmluZSBWNEwyX0VOQ19DTURfUEFVU0UgKDIpCiAjZGVmaW5lIFY0TDJfRU5DX0NNRF9SRVNVTUUgKDMpCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfRU5DX0NNRF9TVE9QX0FUX0dPUF9FTkQgKDEgPDwgMCkKLQogc3RydWN0IHY0bDJfZW5jb2Rlcl9jbWQgewogIF9fdTMyIGNtZDsKICBfX3UzMiBmbGFnczsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5pb24gewogIHN0cnVjdCB7CiAgX191MzIgZGF0YVs4XTsKICB9IHJhdzsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgfTsKIH07Ci0KKyNkZWZpbmUgVjRMMl9ERUNfQ01EX1NUQVJUICgwKQorI2RlZmluZSBWNEwyX0RFQ19DTURfU1RPUCAoMSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFY0TDJfREVDX0NNRF9QQVVTRSAoMikKKyNkZWZpbmUgVjRMMl9ERUNfQ01EX1JFU1VNRSAoMykKKyNkZWZpbmUgVjRMMl9ERUNfUUNPTV9DTURfRkxVU0ggKDQpCisjZGVmaW5lIFY0TDJfREVDX0NNRF9TVEFSVF9NVVRFX0FVRElPICgxIDw8IDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBWNEwyX0RFQ19DTURfUEFVU0VfVE9fQkxBQ0sgKDEgPDwgMCkKKyNkZWZpbmUgVjRMMl9ERUNfQ01EX1NUT1BfVE9fQkxBQ0sgKDEgPDwgMCkKKyNkZWZpbmUgVjRMMl9ERUNfQ01EX1NUT1BfSU1NRURJQVRFTFkgKDEgPDwgMSkKKyNkZWZpbmUgVjRMMl9ERUNfUUNPTV9DTURfRkxVU0hfT1VUUFVUICgxIDw8IDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBWNEwyX0RFQ19RQ09NX0NNRF9GTFVTSF9DQVBUVVJFICgxIDw8IDEpCisjZGVmaW5lIFY0TDJfREVDX1NUQVJUX0ZNVF9OT05FICgwKQorI2RlZmluZSBWNEwyX0RFQ19TVEFSVF9GTVRfR09QICgxKQorc3RydWN0IHY0bDJfZGVjb2Rlcl9jbWQgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UzMiBjbWQ7CisgX191MzIgZmxhZ3M7CisgdW5pb24geworIHN0cnVjdCB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTY0IHB0czsKKyB9IHN0b3A7Cisgc3RydWN0IHsKKyBfX3MzMiBzcGVlZDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MzIgZm9ybWF0OworIH0gc3RhcnQ7Cisgc3RydWN0IHsKKyBfX3UzMiBkYXRhWzE2XTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgfSByYXc7CisgfTsKK307CiBzdHJ1Y3QgdjRsMl92YmlfZm9ybWF0IHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgc2FtcGxpbmdfcmF0ZTsKICBfX3UzMiBvZmZzZXQ7CiAgX191MzIgc2FtcGxlc19wZXJfbGluZTsKICBfX3UzMiBzYW1wbGVfZm9ybWF0OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3MzMiBzdGFydFsyXTsKICBfX3UzMiBjb3VudFsyXTsKICBfX3UzMiBmbGFnczsKICBfX3UzMiByZXNlcnZlZFsyXTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwotCiAjZGVmaW5lIFY0TDJfVkJJX1VOU1lOQyAoMSA8PCAwKQogI2RlZmluZSBWNEwyX1ZCSV9JTlRFUkxBQ0VEICgxIDw8IDEpCi0KIHN0cnVjdCB2NGwyX3NsaWNlZF92YmlfZm9ybWF0IHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MTYgc2VydmljZV9zZXQ7Ci0KICBfX3UxNiBzZXJ2aWNlX2xpbmVzWzJdWzI0XTsKICBfX3UzMiBpb19zaXplOwogIF9fdTMyIHJlc2VydmVkWzJdOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07Ci0KICNkZWZpbmUgVjRMMl9TTElDRURfVEVMRVRFWFRfQiAoMHgwMDAxKQotCiAjZGVmaW5lIFY0TDJfU0xJQ0VEX1ZQUyAoMHgwNDAwKQotCiAjZGVmaW5lIFY0TDJfU0xJQ0VEX0NBUFRJT05fNTI1ICgweDEwMDApCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFY0TDJfU0xJQ0VEX1dTU182MjUgKDB4NDAwMCkKLQogI2RlZmluZSBWNEwyX1NMSUNFRF9WQklfNTI1IChWNEwyX1NMSUNFRF9DQVBUSU9OXzUyNSkKICNkZWZpbmUgVjRMMl9TTElDRURfVkJJXzYyNSAoVjRMMl9TTElDRURfVEVMRVRFWFRfQiB8IFY0TDJfU0xJQ0VEX1ZQUyB8IFY0TDJfU0xJQ0VEX1dTU182MjUpCi0KIHN0cnVjdCB2NGwyX3NsaWNlZF92YmlfY2FwIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MTYgc2VydmljZV9zZXQ7Ci0KICBfX3UxNiBzZXJ2aWNlX2xpbmVzWzJdWzI0XTsKICBlbnVtIHY0bDJfYnVmX3R5cGUgdHlwZTsKICBfX3UzMiByZXNlcnZlZFszXTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwotCiBzdHJ1Y3QgdjRsMl9zbGljZWRfdmJpX2RhdGEgewogIF9fdTMyIGlkOwogIF9fdTMyIGZpZWxkOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBsaW5lOwogIF9fdTMyIHJlc2VydmVkOwogIF9fdTggZGF0YVs0OF07CiB9OwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBWNEwyX01QRUdfVkJJX0lWVFZfVEVMRVRFWFRfQiAoMSkKKyNkZWZpbmUgVjRMMl9NUEVHX1ZCSV9JVlRWX0NBUFRJT05fNTI1ICg0KQorI2RlZmluZSBWNEwyX01QRUdfVkJJX0lWVFZfV1NTXzYyNSAoNSkKKyNkZWZpbmUgVjRMMl9NUEVHX1ZCSV9JVlRWX1ZQUyAoNykKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCitzdHJ1Y3QgdjRsMl9tcGVnX3ZiaV9pdHYwX2xpbmUgeworIF9fdTggaWQ7CisgX191OCBkYXRhWzQyXTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK3N0cnVjdCB2NGwyX21wZWdfdmJpX2l0djAgeworIF9fbGUzMiBsaW5lbWFza1syXTsKKyBzdHJ1Y3QgdjRsMl9tcGVnX3ZiaV9pdHYwX2xpbmUgbGluZVszNV07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCitzdHJ1Y3QgdjRsMl9tcGVnX3ZiaV9JVFYwIHsKKyBzdHJ1Y3QgdjRsMl9tcGVnX3ZiaV9pdHYwX2xpbmUgbGluZVszNl07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKyNkZWZpbmUgVjRMMl9NUEVHX1ZCSV9JVlRWX01BR0lDMCAiaXR2MCIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFY0TDJfTVBFR19WQklfSVZUVl9NQUdJQzEgIklUVjAiCitzdHJ1Y3QgdjRsMl9tcGVnX3ZiaV9mbXRfaXZ0diB7CisgX191OCBtYWdpY1s0XTsKKyB1bmlvbiB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIHN0cnVjdCB2NGwyX21wZWdfdmJpX2l0djAgaXR2MDsKKyBzdHJ1Y3QgdjRsMl9tcGVnX3ZiaV9JVFYwIElUVjA7CisgfTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK3N0cnVjdCB2NGwyX3BsYW5lX3BpeF9mb3JtYXQgeworIF9fdTMyIHNpemVpbWFnZTsKKyBfX3UxNiBieXRlc3BlcmxpbmU7CisgX191MTYgcmVzZXJ2ZWRbN107CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CitzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0X21wbGFuZSB7CisgX191MzIgd2lkdGg7CisgX191MzIgaGVpZ2h0OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UzMiBwaXhlbGZvcm1hdDsKKyBlbnVtIHY0bDJfZmllbGQgZmllbGQ7CisgZW51bSB2NGwyX2NvbG9yc3BhY2UgY29sb3JzcGFjZTsKKyBzdHJ1Y3QgdjRsMl9wbGFuZV9waXhfZm9ybWF0IHBsYW5lX2ZtdFtWSURFT19NQVhfUExBTkVTXTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191OCBudW1fcGxhbmVzOworIF9fdTggcmVzZXJ2ZWRbMTFdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiBzdHJ1Y3QgdjRsMl9mb3JtYXQgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBlbnVtIHY0bDJfYnVmX3R5cGUgdHlwZTsKICB1bmlvbiB7CiAgc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCBwaXg7Cisgc3RydWN0IHY0bDJfcGl4X2Zvcm1hdF9tcGxhbmUgcGl4X21wOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgdjRsMl93aW5kb3cgd2luOwogIHN0cnVjdCB2NGwyX3ZiaV9mb3JtYXQgdmJpOwogIHN0cnVjdCB2NGwyX3NsaWNlZF92YmlfZm9ybWF0IHNsaWNlZDsKICBfX3U4IHJhd19kYXRhWzIwMF07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIH0gZm10OwogfTsKLQogc3RydWN0IHY0bDJfc3RyZWFtcGFybSB7CiAgZW51bSB2NGwyX2J1Zl90eXBlIHR5cGU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuaW9uIHsKICBzdHJ1Y3QgdjRsMl9jYXB0dXJlcGFybSBjYXB0dXJlOwogIHN0cnVjdCB2NGwyX291dHB1dHBhcm0gb3V0cHV0OwogIF9fdTggcmF3X2RhdGFbMjAwXTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgfSBwYXJtOwogfTsKLQotI2RlZmluZSBWNEwyX0NISVBfTUFUQ0hfSE9TVCAwICAKLSNkZWZpbmUgVjRMMl9DSElQX01BVENIX0kyQ19EUklWRVIgMSAgCi0jZGVmaW5lIFY0TDJfQ0hJUF9NQVRDSF9JMkNfQUREUiAyICAKLSNkZWZpbmUgVjRMMl9DSElQX01BVENIX0FDOTcgMyAgCi0KKyNkZWZpbmUgVjRMMl9FVkVOVF9BTEwgMAorI2RlZmluZSBWNEwyX0VWRU5UX1ZTWU5DIDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFY0TDJfRVZFTlRfRU9TIDIKKyNkZWZpbmUgVjRMMl9FVkVOVF9DVFJMIDMKKyNkZWZpbmUgVjRMMl9FVkVOVF9GUkFNRV9TWU5DIDQKKyNkZWZpbmUgVjRMMl9FVkVOVF9QUklWQVRFX1NUQVJUIDB4MDgwMDAwMDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFY0TDJfRVZFTlRfTVNNX1ZJRENfU1RBUlQgKFY0TDJfRVZFTlRfUFJJVkFURV9TVEFSVCArIDB4MDAwMDEwMDApCisjZGVmaW5lIFY0TDJfRVZFTlRfTVNNX1ZJRENfRkxVU0hfRE9ORSAoVjRMMl9FVkVOVF9NU01fVklEQ19TVEFSVCArIDEpCisjZGVmaW5lIFY0TDJfRVZFTlRfTVNNX1ZJRENfUE9SVF9TRVRUSU5HU19DSEFOR0VEX1NVRkZJQ0lFTlQgICAoVjRMMl9FVkVOVF9NU01fVklEQ19TVEFSVCArIDIpCisjZGVmaW5lIFY0TDJfRVZFTlRfTVNNX1ZJRENfUE9SVF9TRVRUSU5HU19DSEFOR0VEX0lOU1VGRklDSUVOVCAgIChWNEwyX0VWRU5UX01TTV9WSURDX1NUQVJUICsgMykKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFY0TDJfRVZFTlRfTVNNX1ZJRENfQ0xPU0VfRE9ORSAoVjRMMl9FVkVOVF9NU01fVklEQ19TVEFSVCArIDQpCitzdHJ1Y3QgdjRsMl9ldmVudF92c3luYyB7CisgX191OCBmaWVsZDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVjRMMl9FVkVOVF9DVFJMX0NIX1ZBTFVFICgxIDw8IDApCisjZGVmaW5lIFY0TDJfRVZFTlRfQ1RSTF9DSF9GTEFHUyAoMSA8PCAxKQorc3RydWN0IHY0bDJfZXZlbnRfY3RybCB7CisgX191MzIgY2hhbmdlczsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MzIgdHlwZTsKKyB1bmlvbiB7CisgX19zMzIgdmFsdWU7CisgX19zNjQgdmFsdWU2NDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgfTsKKyBfX3UzMiBmbGFnczsKKyBfX3MzMiBtaW5pbXVtOworIF9fczMyIG1heGltdW07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fczMyIHN0ZXA7CisgX19zMzIgZGVmYXVsdF92YWx1ZTsKK307CitzdHJ1Y3QgdjRsMl9ldmVudF9mcmFtZV9zeW5jIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MzIgZnJhbWVfc2VxdWVuY2U7Cit9Oworc3RydWN0IHY0bDJfZXZlbnQgeworIF9fdTMyIHR5cGU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIHVuaW9uIHsKKyBzdHJ1Y3QgdjRsMl9ldmVudF92c3luYyB2c3luYzsKKyBzdHJ1Y3QgdjRsMl9ldmVudF9jdHJsIGN0cmw7Cisgc3RydWN0IHY0bDJfZXZlbnRfZnJhbWVfc3luYyBmcmFtZV9zeW5jOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3U4IGRhdGFbNjRdOworIH0gdTsKKyBfX3UzMiBwZW5kaW5nOworIF9fdTMyIHNlcXVlbmNlOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBzdHJ1Y3QgdGltZXNwZWMgdGltZXN0YW1wOworIF9fdTMyIGlkOworIF9fdTMyIHJlc2VydmVkWzhdOworfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFY0TDJfRVZFTlRfU1VCX0ZMX1NFTkRfSU5JVElBTCAoMSA8PCAwKQorI2RlZmluZSBWNEwyX0VWRU5UX1NVQl9GTF9BTExPV19GRUVEQkFDSyAoMSA8PCAxKQorc3RydWN0IHY0bDJfZXZlbnRfc3Vic2NyaXB0aW9uIHsKKyBfX3UzMiB0eXBlOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UzMiBpZDsKKyBfX3UzMiBmbGFnczsKKyBfX3UzMiByZXNlcnZlZFs1XTsKK307CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBWNEwyX0NISVBfTUFUQ0hfSE9TVCAwCisjZGVmaW5lIFY0TDJfQ0hJUF9NQVRDSF9JMkNfRFJJVkVSIDEKKyNkZWZpbmUgVjRMMl9DSElQX01BVENIX0kyQ19BRERSIDIKKyNkZWZpbmUgVjRMMl9DSElQX01BVENIX0FDOTcgMworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCB2NGwyX2RiZ19tYXRjaCB7CiAgX191MzIgdHlwZTsKICB1bmlvbiB7CiAgX191MzIgYWRkcjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgY2hhciBuYW1lWzMyXTsKICB9OwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KIHN0cnVjdCB2NGwyX2RiZ19yZWdpc3RlciB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCB2NGwyX2RiZ19tYXRjaCBtYXRjaDsKICBfX3UzMiBzaXplOwogIF9fdTY0IHJlZzsKICBfX3U2NCB2YWw7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KIHN0cnVjdCB2NGwyX2RiZ19jaGlwX2lkZW50IHsKICBzdHJ1Y3QgdjRsMl9kYmdfbWF0Y2ggbWF0Y2g7CiAgX191MzIgaWRlbnQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTMyIHJldmlzaW9uOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLXN0cnVjdCB2NGwyX2NoaXBfaWRlbnRfb2xkIHsKLSBfX3UzMiBtYXRjaF90eXBlOwotIF9fdTMyIG1hdGNoX2NoaXA7Ci0gX191MzIgaWRlbnQ7Ci0gX191MzIgcmV2aXNpb247CitzdHJ1Y3QgdjRsMl9jcmVhdGVfYnVmZmVycyB7CisgX191MzIgaW5kZXg7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTMyIGNvdW50OworIGVudW0gdjRsMl9tZW1vcnkgbWVtb3J5OworIHN0cnVjdCB2NGwyX2Zvcm1hdCBmb3JtYXQ7CisgX191MzIgcmVzZXJ2ZWRbOF07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKLQogI2RlZmluZSBWSURJT0NfUVVFUllDQVAgX0lPUignVicsIDAsIHN0cnVjdCB2NGwyX2NhcGFiaWxpdHkpCiAjZGVmaW5lIFZJRElPQ19SRVNFUlZFRCBfSU8oJ1YnLCAxKQogI2RlZmluZSBWSURJT0NfRU5VTV9GTVQgX0lPV1IoJ1YnLCAyLCBzdHJ1Y3QgdjRsMl9mbXRkZXNjKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVklESU9DX0dfRk1UIF9JT1dSKCdWJywgNCwgc3RydWN0IHY0bDJfZm9ybWF0KQogI2RlZmluZSBWSURJT0NfU19GTVQgX0lPV1IoJ1YnLCA1LCBzdHJ1Y3QgdjRsMl9mb3JtYXQpCiAjZGVmaW5lIFZJRElPQ19SRVFCVUZTIF9JT1dSKCdWJywgOCwgc3RydWN0IHY0bDJfcmVxdWVzdGJ1ZmZlcnMpCiAjZGVmaW5lIFZJRElPQ19RVUVSWUJVRiBfSU9XUignVicsIDksIHN0cnVjdCB2NGwyX2J1ZmZlcikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFZJRElPQ19HX0ZCVUYgX0lPUignVicsIDEwLCBzdHJ1Y3QgdjRsMl9mcmFtZWJ1ZmZlcikKICNkZWZpbmUgVklESU9DX1NfRkJVRiBfSU9XKCdWJywgMTEsIHN0cnVjdCB2NGwyX2ZyYW1lYnVmZmVyKQogI2RlZmluZSBWSURJT0NfT1ZFUkxBWSBfSU9XKCdWJywgMTQsIGludCkKICNkZWZpbmUgVklESU9DX1FCVUYgX0lPV1IoJ1YnLCAxNSwgc3RydWN0IHY0bDJfYnVmZmVyKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVklESU9DX0RRQlVGIF9JT1dSKCdWJywgMTcsIHN0cnVjdCB2NGwyX2J1ZmZlcikKICNkZWZpbmUgVklESU9DX1NUUkVBTU9OIF9JT1coJ1YnLCAxOCwgaW50KQogI2RlZmluZSBWSURJT0NfU1RSRUFNT0ZGIF9JT1coJ1YnLCAxOSwgaW50KQogI2RlZmluZSBWSURJT0NfR19QQVJNIF9JT1dSKCdWJywgMjEsIHN0cnVjdCB2NGwyX3N0cmVhbXBhcm0pCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWSURJT0NfU19QQVJNIF9JT1dSKCdWJywgMjIsIHN0cnVjdCB2NGwyX3N0cmVhbXBhcm0pCiAjZGVmaW5lIFZJRElPQ19HX1NURCBfSU9SKCdWJywgMjMsIHY0bDJfc3RkX2lkKQogI2RlZmluZSBWSURJT0NfU19TVEQgX0lPVygnVicsIDI0LCB2NGwyX3N0ZF9pZCkKICNkZWZpbmUgVklESU9DX0VOVU1TVEQgX0lPV1IoJ1YnLCAyNSwgc3RydWN0IHY0bDJfc3RhbmRhcmQpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWSURJT0NfRU5VTUlOUFVUIF9JT1dSKCdWJywgMjYsIHN0cnVjdCB2NGwyX2lucHV0KQogI2RlZmluZSBWSURJT0NfR19DVFJMIF9JT1dSKCdWJywgMjcsIHN0cnVjdCB2NGwyX2NvbnRyb2wpCiAjZGVmaW5lIFZJRElPQ19TX0NUUkwgX0lPV1IoJ1YnLCAyOCwgc3RydWN0IHY0bDJfY29udHJvbCkKICNkZWZpbmUgVklESU9DX0dfVFVORVIgX0lPV1IoJ1YnLCAyOSwgc3RydWN0IHY0bDJfdHVuZXIpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWSURJT0NfU19UVU5FUiBfSU9XKCdWJywgMzAsIHN0cnVjdCB2NGwyX3R1bmVyKQogI2RlZmluZSBWSURJT0NfR19BVURJTyBfSU9SKCdWJywgMzMsIHN0cnVjdCB2NGwyX2F1ZGlvKQogI2RlZmluZSBWSURJT0NfU19BVURJTyBfSU9XKCdWJywgMzQsIHN0cnVjdCB2NGwyX2F1ZGlvKQogI2RlZmluZSBWSURJT0NfUVVFUllDVFJMIF9JT1dSKCdWJywgMzYsIHN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFZJRElPQ19RVUVSWU1FTlUgX0lPV1IoJ1YnLCAzNywgc3RydWN0IHY0bDJfcXVlcnltZW51KQogI2RlZmluZSBWSURJT0NfR19JTlBVVCBfSU9SKCdWJywgMzgsIGludCkKICNkZWZpbmUgVklESU9DX1NfSU5QVVQgX0lPV1IoJ1YnLCAzOSwgaW50KQogI2RlZmluZSBWSURJT0NfR19PVVRQVVQgX0lPUignVicsIDQ2LCBpbnQpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWSURJT0NfU19PVVRQVVQgX0lPV1IoJ1YnLCA0NywgaW50KQogI2RlZmluZSBWSURJT0NfRU5VTU9VVFBVVCBfSU9XUignVicsIDQ4LCBzdHJ1Y3QgdjRsMl9vdXRwdXQpCiAjZGVmaW5lIFZJRElPQ19HX0FVRE9VVCBfSU9SKCdWJywgNDksIHN0cnVjdCB2NGwyX2F1ZGlvb3V0KQogI2RlZmluZSBWSURJT0NfU19BVURPVVQgX0lPVygnVicsIDUwLCBzdHJ1Y3QgdjRsMl9hdWRpb291dCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFZJRElPQ19HX01PRFVMQVRPUiBfSU9XUignVicsIDU0LCBzdHJ1Y3QgdjRsMl9tb2R1bGF0b3IpCiAjZGVmaW5lIFZJRElPQ19TX01PRFVMQVRPUiBfSU9XKCdWJywgNTUsIHN0cnVjdCB2NGwyX21vZHVsYXRvcikKICNkZWZpbmUgVklESU9DX0dfRlJFUVVFTkNZIF9JT1dSKCdWJywgNTYsIHN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSkKICNkZWZpbmUgVklESU9DX1NfRlJFUVVFTkNZIF9JT1coJ1YnLCA1Nywgc3RydWN0IHY0bDJfZnJlcXVlbmN5KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVklESU9DX0NST1BDQVAgX0lPV1IoJ1YnLCA1OCwgc3RydWN0IHY0bDJfY3JvcGNhcCkKICNkZWZpbmUgVklESU9DX0dfQ1JPUCBfSU9XUignVicsIDU5LCBzdHJ1Y3QgdjRsMl9jcm9wKQogI2RlZmluZSBWSURJT0NfU19DUk9QIF9JT1coJ1YnLCA2MCwgc3RydWN0IHY0bDJfY3JvcCkKICNkZWZpbmUgVklESU9DX0dfSlBFR0NPTVAgX0lPUignVicsIDYxLCBzdHJ1Y3QgdjRsMl9qcGVnY29tcHJlc3Npb24pCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWSURJT0NfU19KUEVHQ09NUCBfSU9XKCdWJywgNjIsIHN0cnVjdCB2NGwyX2pwZWdjb21wcmVzc2lvbikKICNkZWZpbmUgVklESU9DX1FVRVJZU1REIF9JT1IoJ1YnLCA2MywgdjRsMl9zdGRfaWQpCiAjZGVmaW5lIFZJRElPQ19UUllfRk1UIF9JT1dSKCdWJywgNjQsIHN0cnVjdCB2NGwyX2Zvcm1hdCkKICNkZWZpbmUgVklESU9DX0VOVU1BVURJTyBfSU9XUignVicsIDY1LCBzdHJ1Y3QgdjRsMl9hdWRpbykKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFZJRElPQ19FTlVNQVVET1VUIF9JT1dSKCdWJywgNjYsIHN0cnVjdCB2NGwyX2F1ZGlvb3V0KQogI2RlZmluZSBWSURJT0NfR19QUklPUklUWSBfSU9SKCdWJywgNjcsIGVudW0gdjRsMl9wcmlvcml0eSkKICNkZWZpbmUgVklESU9DX1NfUFJJT1JJVFkgX0lPVygnVicsIDY4LCBlbnVtIHY0bDJfcHJpb3JpdHkpCiAjZGVmaW5lIFZJRElPQ19HX1NMSUNFRF9WQklfQ0FQIF9JT1dSKCdWJywgNjksIHN0cnVjdCB2NGwyX3NsaWNlZF92YmlfY2FwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVklESU9DX0xPR19TVEFUVVMgX0lPKCdWJywgNzApCiAjZGVmaW5lIFZJRElPQ19HX0VYVF9DVFJMUyBfSU9XUignVicsIDcxLCBzdHJ1Y3QgdjRsMl9leHRfY29udHJvbHMpCiAjZGVmaW5lIFZJRElPQ19TX0VYVF9DVFJMUyBfSU9XUignVicsIDcyLCBzdHJ1Y3QgdjRsMl9leHRfY29udHJvbHMpCiAjZGVmaW5lIFZJRElPQ19UUllfRVhUX0NUUkxTIF9JT1dSKCdWJywgNzMsIHN0cnVjdCB2NGwyX2V4dF9jb250cm9scykKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFZJRElPQ19FTlVNX0ZSQU1FU0laRVMgX0lPV1IoJ1YnLCA3NCwgc3RydWN0IHY0bDJfZnJtc2l6ZWVudW0pCiAjZGVmaW5lIFZJRElPQ19FTlVNX0ZSQU1FSU5URVJWQUxTIF9JT1dSKCdWJywgNzUsIHN0cnVjdCB2NGwyX2ZybWl2YWxlbnVtKQogI2RlZmluZSBWSURJT0NfR19FTkNfSU5ERVggX0lPUignVicsIDc2LCBzdHJ1Y3QgdjRsMl9lbmNfaWR4KQogI2RlZmluZSBWSURJT0NfRU5DT0RFUl9DTUQgX0lPV1IoJ1YnLCA3Nywgc3RydWN0IHY0bDJfZW5jb2Rlcl9jbWQpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWSURJT0NfVFJZX0VOQ09ERVJfQ01EIF9JT1dSKCdWJywgNzgsIHN0cnVjdCB2NGwyX2VuY29kZXJfY21kKQotCiAjZGVmaW5lIFZJRElPQ19EQkdfU19SRUdJU1RFUiBfSU9XKCdWJywgNzksIHN0cnVjdCB2NGwyX2RiZ19yZWdpc3RlcikKICNkZWZpbmUgVklESU9DX0RCR19HX1JFR0lTVEVSIF9JT1dSKCdWJywgODAsIHN0cnVjdCB2NGwyX2RiZ19yZWdpc3RlcikKLQogI2RlZmluZSBWSURJT0NfREJHX0dfQ0hJUF9JREVOVCBfSU9XUignVicsIDgxLCBzdHJ1Y3QgdjRsMl9kYmdfY2hpcF9pZGVudCkKLQotI2RlZmluZSBWSURJT0NfR19DSElQX0lERU5UX09MRCBfSU9XUignVicsIDgxLCBzdHJ1Y3QgdjRsMl9jaGlwX2lkZW50X29sZCkKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVklESU9DX1NfSFdfRlJFUV9TRUVLIF9JT1coJ1YnLCA4Miwgc3RydWN0IHY0bDJfaHdfZnJlcV9zZWVrKQotCi0jaWZkZWYgX19PTERfVklESU9DXwotCi0jZGVmaW5lIFZJRElPQ19PVkVSTEFZX09MRCBfSU9XUignVicsIDE0LCBpbnQpCi0jZGVmaW5lIFZJRElPQ19TX1BBUk1fT0xEIF9JT1coJ1YnLCAyMiwgc3RydWN0IHY0bDJfc3RyZWFtcGFybSkKLSNkZWZpbmUgVklESU9DX1NfQ1RSTF9PTEQgX0lPVygnVicsIDI4LCBzdHJ1Y3QgdjRsMl9jb250cm9sKQotI2RlZmluZSBWSURJT0NfR19BVURJT19PTEQgX0lPV1IoJ1YnLCAzMywgc3RydWN0IHY0bDJfYXVkaW8pCi0jZGVmaW5lIFZJRElPQ19HX0FVRE9VVF9PTEQgX0lPV1IoJ1YnLCA0OSwgc3RydWN0IHY0bDJfYXVkaW9vdXQpCi0jZGVmaW5lIFZJRElPQ19DUk9QQ0FQX09MRCBfSU9SKCdWJywgNTgsIHN0cnVjdCB2NGwyX2Nyb3BjYXApCisjZGVmaW5lIFZJRElPQ19FTlVNX0RWX1BSRVNFVFMgX0lPV1IoJ1YnLCA4Mywgc3RydWN0IHY0bDJfZHZfZW51bV9wcmVzZXQpCisjZGVmaW5lIFZJRElPQ19TX0RWX1BSRVNFVCBfSU9XUignVicsIDg0LCBzdHJ1Y3QgdjRsMl9kdl9wcmVzZXQpCisjZGVmaW5lIFZJRElPQ19HX0RWX1BSRVNFVCBfSU9XUignVicsIDg1LCBzdHJ1Y3QgdjRsMl9kdl9wcmVzZXQpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBWSURJT0NfUVVFUllfRFZfUFJFU0VUIF9JT1IoJ1YnLCA4Niwgc3RydWN0IHY0bDJfZHZfcHJlc2V0KQorI2RlZmluZSBWSURJT0NfU19EVl9USU1JTkdTIF9JT1dSKCdWJywgODcsIHN0cnVjdCB2NGwyX2R2X3RpbWluZ3MpCisjZGVmaW5lIFZJRElPQ19HX0RWX1RJTUlOR1MgX0lPV1IoJ1YnLCA4OCwgc3RydWN0IHY0bDJfZHZfdGltaW5ncykKKyNkZWZpbmUgVklESU9DX0RRRVZFTlQgX0lPUignVicsIDg5LCBzdHJ1Y3QgdjRsMl9ldmVudCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFZJRElPQ19TVUJTQ1JJQkVfRVZFTlQgX0lPVygnVicsIDkwLCBzdHJ1Y3QgdjRsMl9ldmVudF9zdWJzY3JpcHRpb24pCisjZGVmaW5lIFZJRElPQ19VTlNVQlNDUklCRV9FVkVOVCBfSU9XKCdWJywgOTEsIHN0cnVjdCB2NGwyX2V2ZW50X3N1YnNjcmlwdGlvbikKKyNkZWZpbmUgVklESU9DX0NSRUFURV9CVUZTIF9JT1dSKCdWJywgOTIsIHN0cnVjdCB2NGwyX2NyZWF0ZV9idWZmZXJzKQorI2RlZmluZSBWSURJT0NfUFJFUEFSRV9CVUYgX0lPV1IoJ1YnLCA5Mywgc3RydWN0IHY0bDJfYnVmZmVyKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVklESU9DX0dfU0VMRUNUSU9OIF9JT1dSKCdWJywgOTQsIHN0cnVjdCB2NGwyX3NlbGVjdGlvbikKKyNkZWZpbmUgVklESU9DX1NfU0VMRUNUSU9OIF9JT1dSKCdWJywgOTUsIHN0cnVjdCB2NGwyX3NlbGVjdGlvbikKKyNkZWZpbmUgVklESU9DX0RFQ09ERVJfQ01EIF9JT1dSKCdWJywgOTYsIHN0cnVjdCB2NGwyX2RlY29kZXJfY21kKQorI2RlZmluZSBWSURJT0NfVFJZX0RFQ09ERVJfQ01EIF9JT1dSKCdWJywgOTcsIHN0cnVjdCB2NGwyX2RlY29kZXJfY21kKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgQkFTRV9WSURJT0NfUFJJVkFURSAxOTIKICNlbmRpZgotCi0jZGVmaW5lIEJBU0VfVklESU9DX1BSSVZBVEUgMTkyICAKLQotI2VuZGlmCi0KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC92bWFsbG9jLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvdm1hbGxvYy5oCmluZGV4IGM3ZmQxMDMuLjlhZGQyMzIgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC92bWFsbG9jLmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3ZtYWxsb2MuaApAQCAtNywzNCArNyw0MCBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX0xJTlVYX1ZNQUxMT0NfSAogI2RlZmluZSBfTElOVVhfVk1BTExPQ19ICi0KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgotI2luY2x1ZGUgPGFzbS9wYWdlLmg+ICAKLQorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IHZtX2FyZWFfc3RydWN0OwotCi0jZGVmaW5lIFZNX0lPUkVNQVAgMHgwMDAwMDAwMSAgCi0jZGVmaW5lIFZNX0FMTE9DIDB4MDAwMDAwMDIgIAotI2RlZmluZSBWTV9NQVAgMHgwMDAwMDAwNCAgCi0jZGVmaW5lIFZNX1VTRVJNQVAgMHgwMDAwMDAwOCAgCi0jZGVmaW5lIFZNX1ZQQUdFUyAweDAwMDAwMDEwICAKLQorI2RlZmluZSBWTV9JT1JFTUFQIDB4MDAwMDAwMDEKKyNkZWZpbmUgVk1fQUxMT0MgMHgwMDAwMDAwMgorI2RlZmluZSBWTV9NQVAgMHgwMDAwMDAwNAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVk1fVVNFUk1BUCAweDAwMDAwMDA4CisjZGVmaW5lIFZNX1ZQQUdFUyAweDAwMDAwMDEwCiAjaWZuZGVmIElPUkVNQVBfTUFYX09SREVSCi0jZGVmaW5lIElPUkVNQVBfTUFYX09SREVSICg3ICsgUEFHRV9TSElGVCkgIAorI2RlZmluZSBJT1JFTUFQX01BWF9PUkRFUiAoNyArIFBBR0VfU0hJRlQpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2VuZGlmCi0KIHN0cnVjdCB2bV9zdHJ1Y3QgewogIHZvaWQgKmFkZHI7CiAgdW5zaWduZWQgbG9uZyBzaXplOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBsb25nIGZsYWdzOwogIHN0cnVjdCBwYWdlICoqcGFnZXM7CiAgdW5zaWduZWQgaW50IG5yX3BhZ2VzOwogIHVuc2lnbmVkIGxvbmcgcGh5c19hZGRyOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3Qgdm1fc3RydWN0ICpuZXh0OwogfTsKLQogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvdnQuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC92dC5oCmluZGV4IDk5OTJiM2EuLmJiNTQxOGUgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC92dC5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC92dC5oCkBAIC03LDYyICs3LDcyIEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfTElOVVhfVlRfSAogI2RlZmluZSBfTElOVVhfVlRfSAotCi0jZGVmaW5lIE1JTl9OUl9DT05TT0xFUyAxICAKLSNkZWZpbmUgTUFYX05SX0NPTlNPTEVTIDYzICAKLSNkZWZpbmUgTUFYX05SX1VTRVJfQ09OU09MRVMgNjMgIAotCi0jZGVmaW5lIFZUX09QRU5RUlkgMHg1NjAwICAKLQorI2RlZmluZSBNSU5fTlJfQ09OU09MRVMgMQorI2RlZmluZSBNQVhfTlJfQ09OU09MRVMgNjMKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIE1BWF9OUl9VU0VSX0NPTlNPTEVTIDYzCisjZGVmaW5lIFZUX09QRU5RUlkgMHg1NjAwCiBzdHJ1Y3QgdnRfbW9kZSB7CiAgY2hhciBtb2RlOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBjaGFyIHdhaXR2OwogIHNob3J0IHJlbHNpZzsKICBzaG9ydCBhY3FzaWc7CiAgc2hvcnQgZnJzaWc7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKLSNkZWZpbmUgVlRfR0VUTU9ERSAweDU2MDEgIAotI2RlZmluZSBWVF9TRVRNT0RFIDB4NTYwMiAgCi0jZGVmaW5lIFZUX0FVVE8gMHgwMCAgCi0jZGVmaW5lIFZUX1BST0NFU1MgMHgwMSAgCi0jZGVmaW5lIFZUX0FDS0FDUSAweDAyICAKLQorI2RlZmluZSBWVF9HRVRNT0RFIDB4NTYwMQorI2RlZmluZSBWVF9TRVRNT0RFIDB4NTYwMgorI2RlZmluZSBWVF9BVVRPIDB4MDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFZUX1BST0NFU1MgMHgwMQorI2RlZmluZSBWVF9BQ0tBQ1EgMHgwMgogc3RydWN0IHZ0X3N0YXQgewogIHVuc2lnbmVkIHNob3J0IHZfYWN0aXZlOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBzaG9ydCB2X3NpZ25hbDsKICB1bnNpZ25lZCBzaG9ydCB2X3N0YXRlOwogfTsKLSNkZWZpbmUgVlRfR0VUU1RBVEUgMHg1NjAzICAKLSNkZWZpbmUgVlRfU0VORFNJRyAweDU2MDQgIAotCi0jZGVmaW5lIFZUX1JFTERJU1AgMHg1NjA1ICAKLQotI2RlZmluZSBWVF9BQ1RJVkFURSAweDU2MDYgIAotI2RlZmluZSBWVF9XQUlUQUNUSVZFIDB4NTYwNyAgCi0jZGVmaW5lIFZUX0RJU0FMTE9DQVRFIDB4NTYwOCAgCi0KKyNkZWZpbmUgVlRfR0VUU1RBVEUgMHg1NjAzCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBWVF9TRU5EU0lHIDB4NTYwNAorI2RlZmluZSBWVF9SRUxESVNQIDB4NTYwNQorI2RlZmluZSBWVF9BQ1RJVkFURSAweDU2MDYKKyNkZWZpbmUgVlRfV0FJVEFDVElWRSAweDU2MDcKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFZUX0RJU0FMTE9DQVRFIDB4NTYwOAogc3RydWN0IHZ0X3NpemVzIHsKICB1bnNpZ25lZCBzaG9ydCB2X3Jvd3M7CiAgdW5zaWduZWQgc2hvcnQgdl9jb2xzOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBzaG9ydCB2X3Njcm9sbHNpemU7CiB9OwotI2RlZmluZSBWVF9SRVNJWkUgMHg1NjA5ICAKLQorI2RlZmluZSBWVF9SRVNJWkUgMHg1NjA5CiBzdHJ1Y3QgdnRfY29uc2l6ZSB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIHNob3J0IHZfcm93czsKICB1bnNpZ25lZCBzaG9ydCB2X2NvbHM7CiAgdW5zaWduZWQgc2hvcnQgdl92bGluOwogIHVuc2lnbmVkIHNob3J0IHZfY2xpbjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgc2hvcnQgdl92Y29sOwogIHVuc2lnbmVkIHNob3J0IHZfY2NvbDsKIH07Ci0jZGVmaW5lIFZUX1JFU0laRVggMHg1NjBBICAKLSNkZWZpbmUgVlRfTE9DS1NXSVRDSCAweDU2MEIgIAotI2RlZmluZSBWVF9VTkxPQ0tTV0lUQ0ggMHg1NjBDICAKLSNkZWZpbmUgVlRfR0VUSElGT05UTUFTSyAweDU2MEQgIAotCisjZGVmaW5lIFZUX1JFU0laRVggMHg1NjBBCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBWVF9MT0NLU1dJVENIIDB4NTYwQgorI2RlZmluZSBWVF9VTkxPQ0tTV0lUQ0ggMHg1NjBDCisjZGVmaW5lIFZUX0dFVEhJRk9OVE1BU0sgMHg1NjBECiAjZW5kaWYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvdnRfYnVmZmVyLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvdnRfYnVmZmVyLmgKaW5kZXggNDZjZTc5ZC4uM2JlYTlhMSAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3Z0X2J1ZmZlci5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC92dF9idWZmZXIuaApAQCAtNywyNCArNywzMyBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX0xJTlVYX1ZUX0JVRkZFUl9IXwogI2RlZmluZSBfTElOVVhfVlRfQlVGRkVSX0hfCi0KICNpZm5kZWYgVlRfQlVGX0hBVkVfUlcKICNkZWZpbmUgc2NyX3dyaXRldyh2YWwsIGFkZHIpICgqKGFkZHIpID0gKHZhbCkpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBzY3JfcmVhZHcoYWRkcikgKCooYWRkcikpCiAjZGVmaW5lIHNjcl9tZW1jcHl3KGQsIHMsIGMpIG1lbWNweShkLCBzLCBjKQogI2RlZmluZSBzY3JfbWVtbW92ZXcoZCwgcywgYykgbWVtbW92ZShkLCBzLCBjKQogI2RlZmluZSBWVF9CVUZfSEFWRV9NRU1DUFlXCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBWVF9CVUZfSEFWRV9NRU1NT1ZFVwogI2VuZGlmCi0KICNpZm5kZWYgVlRfQlVGX0hBVkVfTUVNU0VUVwogI2VuZGlmCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2lmbmRlZiBWVF9CVUZfSEFWRV9NRU1DUFlXCiAjZW5kaWYKICNpZm5kZWYgVlRfQlVGX0hBVkVfTUVNTU9WRVcKICNlbmRpZgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3dhaXQuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC93YWl0LmgKaW5kZXggN2Q5YWE2OC4uZjQ2ODhjNyAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3dhaXQuaAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvd2FpdC5oCkBAIC03LDI0ICs3LDMwIEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfTElOVVhfV0FJVF9ICiAjZGVmaW5lIF9MSU5VWF9XQUlUX0gKLQogI2RlZmluZSBXTk9IQU5HIDB4MDAwMDAwMDEKICNkZWZpbmUgV1VOVFJBQ0VEIDB4MDAwMDAwMDIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFdTVE9QUEVEIFdVTlRSQUNFRAogI2RlZmluZSBXRVhJVEVEIDB4MDAwMDAwMDQKICNkZWZpbmUgV0NPTlRJTlVFRCAweDAwMDAwMDA4Ci0jZGVmaW5lIFdOT1dBSVQgMHgwMTAwMDAwMCAgCi0KLSNkZWZpbmUgX19XTk9USFJFQUQgMHgyMDAwMDAwMCAgCi0jZGVmaW5lIF9fV0FMTCAweDQwMDAwMDAwICAKLSNkZWZpbmUgX19XQ0xPTkUgMHg4MDAwMDAwMCAgCi0KKyNkZWZpbmUgV05PV0FJVCAweDAxMDAwMDAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBfX1dOT1RIUkVBRCAweDIwMDAwMDAwCisjZGVmaW5lIF9fV0FMTCAweDQwMDAwMDAwCisjZGVmaW5lIF9fV0NMT05FIDB4ODAwMDAwMDAKICNkZWZpbmUgUF9BTEwgMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUF9QSUQgMQogI2RlZmluZSBQX1BHSUQgMgotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC93YW5yb3V0ZXIuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC93YW5yb3V0ZXIuaAppbmRleCA4ZjI1YTg2Li4xYjhiZDMyIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvd2Fucm91dGVyLmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3dhbnJvdXRlci5oCkBAIC03LDM1MCArNywzOTAgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9ST1VURVJfSAogI2RlZmluZSBfUk9VVEVSX0gKLQotI2RlZmluZSBST1VURVJfTkFNRSAid2Fucm91dGVyIiAgCi0jZGVmaW5lIFJPVVRFUl9WRVJTSU9OIDEgIAotI2RlZmluZSBST1VURVJfUkVMRUFTRSAxICAKLSNkZWZpbmUgUk9VVEVSX0lPQ1RMICdXJyAgCi0jZGVmaW5lIFJPVVRFUl9NQUdJQyAweDUyNEQ0MTU3TCAgCi0KKyNkZWZpbmUgUk9VVEVSX05BTUUgIndhbnJvdXRlciIKKyNkZWZpbmUgUk9VVEVSX1ZFUlNJT04gMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgUk9VVEVSX1JFTEVBU0UgMQorI2RlZmluZSBST1VURVJfSU9DVEwgJ1cnCisjZGVmaW5lIFJPVVRFUl9NQUdJQyAweDUyNEQ0MTU3TAogZW51bSByb3V0ZXJfaW9jdGxzCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogewogIFJPVVRFUl9TRVRVUCA9IFJPVVRFUl9JT0NUTDw8OCwKICBST1VURVJfRE9XTiwKICBST1VURVJfU1RBVCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgUk9VVEVSX0lGTkVXLAogIFJPVVRFUl9JRkRFTCwKICBST1VURVJfSUZTVEFULAogIFJPVVRFUl9VU0VSID0gKFJPVVRFUl9JT0NUTDw8OCkrMTYsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFJPVVRFUl9VU0VSX01BWCA9IChST1VURVJfSU9DVEw8PDgpKzMxCiB9OwotCi0jZGVmaW5lIFBST0NfREFUQV9QT1JUXzAgMHg4MDAwICAKLSNkZWZpbmUgUFJPQ19EQVRBX1BPUlRfMSAweDgwMDEgIAotCi0jZGVmaW5lIE5MUElEX0lQIDB4Q0MgIAotI2RlZmluZSBOTFBJRF9TTkFQIDB4ODAgIAotI2RlZmluZSBOTFBJRF9DTE5QIDB4ODEgIAotI2RlZmluZSBOTFBJRF9FU0lTIDB4ODIgIAotI2RlZmluZSBOTFBJRF9JU0lTIDB4ODMgIAotI2RlZmluZSBOTFBJRF9ROTMzIDB4MDggIAotCi0jZGVmaW5lIFdBTl9JRk5BTUVfU1ogMTUgIAotI2RlZmluZSBXQU5fRFJWTkFNRV9TWiAxNSAgCi0jZGVmaW5lIFdBTl9BRERSRVNTX1NaIDMxICAKLSNkZWZpbmUgVVNFRF9CWV9GSUVMRCA4ICAKLQorI2RlZmluZSBQUk9DX0RBVEFfUE9SVF8wIDB4ODAwMAorI2RlZmluZSBQUk9DX0RBVEFfUE9SVF8xIDB4ODAwMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgTkxQSURfSVAgMHhDQworI2RlZmluZSBOTFBJRF9TTkFQIDB4ODAKKyNkZWZpbmUgTkxQSURfQ0xOUCAweDgxCisjZGVmaW5lIE5MUElEX0VTSVMgMHg4MgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgTkxQSURfSVNJUyAweDgzCisjZGVmaW5lIE5MUElEX1E5MzMgMHgwOAorI2RlZmluZSBXQU5fSUZOQU1FX1NaIDE1CisjZGVmaW5lIFdBTl9EUlZOQU1FX1NaIDE1CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBXQU5fQUREUkVTU19TWiAzMQorI2RlZmluZSBVU0VEX0JZX0ZJRUxEIDgKICNkZWZpbmUgVURQX1BUUElQRV9UWVBFIDB4MDEKICNkZWZpbmUgVURQX0ZQSVBFX1RZUEUgMHgwMgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgVURQX0NQSVBFX1RZUEUgMHgwMwogI2RlZmluZSBVRFBfRFJWU1RBVFNfVFlQRSAweDA0CiAjZGVmaW5lIFVEUF9JTlZBTElEX1RZUEUgMHgwNQotCi0jZGVmaW5lIENNRF9PSyAwICAKLSNkZWZpbmUgQ01EX1RJTUVPVVQgMHhGRiAgCi0KKyNkZWZpbmUgQ01EX09LIDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIENNRF9USU1FT1VUIDB4RkYKICNkZWZpbmUgVURQX1BLVF9GUk1fU1RBQ0sgMHgwMAogI2RlZmluZSBVRFBfUEtUX0ZSTV9ORVRXT1JLIDB4MDEKLQogI2RlZmluZSBNQVhfSU5UUl9URVNUX0NPVU5URVIgMTAwCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIENSSVRJQ0FMX0lOX0lTUiAweEExCiAjZGVmaW5lIENSSVRJQ0FMX0lOVFJfSEFORExFRCAweEIxCi0KIHR5cGVkZWYgc3RydWN0IHdhbl94MjVfY29uZgogeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBsb19wdmM7CiAgdW5zaWduZWQgaGlfcHZjOwogIHVuc2lnbmVkIGxvX3N2YzsKICB1bnNpZ25lZCBoaV9zdmM7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGhkbGNfd2luZG93OwogIHVuc2lnbmVkIHBrdF93aW5kb3c7CiAgdW5zaWduZWQgdDE7CiAgdW5zaWduZWQgdDI7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIHQ0OwogIHVuc2lnbmVkIG4yOwogIHVuc2lnbmVkIHQxMF90MjA7CiAgdW5zaWduZWQgdDExX3QyMTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgdDEyX3QyMjsKICB1bnNpZ25lZCB0MTNfdDIzOwogIHVuc2lnbmVkIHQxNl90MjY7CiAgdW5zaWduZWQgdDI4OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCByMTBfcjIwOwogIHVuc2lnbmVkIHIxMl9yMjI7CiAgdW5zaWduZWQgcjEzX3IyMzsKICB1bnNpZ25lZCBjY2l0dF9jb21wYXQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIHgyNV9jb25mX29wdDsKICB1bnNpZ25lZCBjaGFyIExBUEJfaGRsY19vbmx5OwogIHVuc2lnbmVkIGNoYXIgbG9nZ2luZzsKICB1bnNpZ25lZCBjaGFyIG9vYl9vbl9tb2RlbTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9IHdhbl94MjVfY29uZl90OwotCiB0eXBlZGVmIHN0cnVjdCB3YW5fZnJfY29uZgogewogIHVuc2lnbmVkIHNpZ25hbGxpbmc7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIHQzOTE7CiAgdW5zaWduZWQgdDM5MjsKICB1bnNpZ25lZCBuMzkxOwogIHVuc2lnbmVkIG4zOTI7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIG4zOTM7CiAgdW5zaWduZWQgZGxjaV9udW07CiAgdW5zaWduZWQgZGxjaVsxMDBdOwogfSB3YW5fZnJfY29uZl90OwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogdHlwZWRlZiBzdHJ1Y3Qgd2FuX3BwcF9jb25mCiB7CiAgdW5zaWduZWQgcmVzdGFydF90bXI7CiAgdW5zaWduZWQgYXV0aF9yc3J0X3RtcjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgYXV0aF93YWl0X3RtcjsKICB1bnNpZ25lZCBtZG1fZmFpbF90bXI7CiAgdW5zaWduZWQgZHRyX2Ryb3BfdG1yOwogIHVuc2lnbmVkIGNvbm5lY3RfdG1vdXQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGNvbmZfcmV0cnk7CiAgdW5zaWduZWQgdGVybV9yZXRyeTsKICB1bnNpZ25lZCBmYWlsX3JldHJ5OwogIHVuc2lnbmVkIGF1dGhfcmV0cnk7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGF1dGhfb3B0aW9uczsKICB1bnNpZ25lZCBpcF9vcHRpb25zOwogIGNoYXIgYXV0aGVudGljYXRvcjsKICBjaGFyIGlwX21vZGU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfSB3YW5fcHBwX2NvbmZfdDsKLQogdHlwZWRlZiBzdHJ1Y3Qgd2FuX2NoZGxjX2NvbmYKIHsKICB1bnNpZ25lZCBjaGFyIGlnbm9yZV9kY2Q7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGNoYXIgaWdub3JlX2N0czsKICB1bnNpZ25lZCBjaGFyIGlnbm9yZV9rZWVwYWxpdmU7CiAgdW5zaWduZWQgY2hhciBoZGxjX3N0cmVhbWluZzsKICB1bnNpZ25lZCBjaGFyIHJlY2VpdmVfb25seTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQga2VlcGFsaXZlX3R4X3RtcjsKICB1bnNpZ25lZCBrZWVwYWxpdmVfcnhfdG1yOwogIHVuc2lnbmVkIGtlZXBhbGl2ZV9lcnJfbWFyZ2luOwogIHVuc2lnbmVkIHNsYXJwX3RpbWVyOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH0gd2FuX2NoZGxjX2NvbmZfdDsKLQogdHlwZWRlZiBzdHJ1Y3Qgd2FuZGV2X2NvbmYKIHsKICB1bnNpZ25lZCBtYWdpYzsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgY29uZmlnX2lkOwotCiAgdW5zaWduZWQgaW9wb3J0OwogIHVuc2lnbmVkIGxvbmcgbWFkZHI7CiAgdW5zaWduZWQgbXNpemU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGludCBpcnE7CiAgaW50IGRtYTsKICBjaGFyIFM1MTRfQ1BVX25vWzFdOwogIHVuc2lnbmVkIFBDSV9zbG90X25vOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBjaGFyIGF1dG9fcGNpX2NmZzsKICBjaGFyIGNvbW1fcG9ydDsKICB1bnNpZ25lZCBicHM7CiAgdW5zaWduZWQgbXR1OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCB1ZHBfcG9ydDsKICB1bnNpZ25lZCBjaGFyIHR0bDsKICB1bnNpZ25lZCBjaGFyIGZ0MTsKICBjaGFyIGludGVyZmFjZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgY2hhciBjbG9ja2luZzsKICBjaGFyIGxpbmVfY29kaW5nOwogIGNoYXIgc3RhdGlvbjsKICBjaGFyIGNvbm5lY3Rpb247CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGNoYXIgcmVhZF9tb2RlOwogIGNoYXIgcmVjZWl2ZV9vbmx5OwogIGNoYXIgdHR5OwogIHVuc2lnbmVkIHR0eV9tYWpvcjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgdHR5X21pbm9yOwogIHVuc2lnbmVkIHR0eV9tb2RlOwogIGNoYXIgYmFja3VwOwogIHVuc2lnbmVkIGh3X29wdFs0XTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgcmVzZXJ2ZWRbNF07Ci0KICB1bnNpZ25lZCBkYXRhX3NpemU7CiAgdm9pZCogZGF0YTsKICB1bmlvbgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB7CiAgd2FuX3gyNV9jb25mX3QgeDI1OwogIHdhbl9wcHBfY29uZl90IHBwcDsKICB3YW5fZnJfY29uZl90IGZyOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB3YW5fY2hkbGNfY29uZl90IGNoZGxjOwogIH0gdTsKIH0gd2FuZGV2X2NvbmZfdDsKLQotI2RlZmluZSBXQU5DT05GSUdfWDI1IDEwMSAgCi0jZGVmaW5lIFdBTkNPTkZJR19GUiAxMDIgIAotI2RlZmluZSBXQU5DT05GSUdfUFBQIDEwMyAgCi0jZGVmaW5lIFdBTkNPTkZJR19DSERMQyAxMDQgIAotI2RlZmluZSBXQU5DT05GSUdfQlNDIDEwNSAgCi0jZGVmaW5lIFdBTkNPTkZJR19IRExDIDEwNiAgCi0jZGVmaW5lIFdBTkNPTkZJR19NUFBQIDEwNyAgCi0KKyNkZWZpbmUgV0FOQ09ORklHX1gyNSAxMDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFdBTkNPTkZJR19GUiAxMDIKKyNkZWZpbmUgV0FOQ09ORklHX1BQUCAxMDMKKyNkZWZpbmUgV0FOQ09ORklHX0NIRExDIDEwNAorI2RlZmluZSBXQU5DT05GSUdfQlNDIDEwNQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgV0FOQ09ORklHX0hETEMgMTA2CisjZGVmaW5lIFdBTkNPTkZJR19NUFBQIDEwNwogI2RlZmluZSBXQU5PUFRfT0ZGIDAKICNkZWZpbmUgV0FOT1BUX09OIDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFdBTk9QVF9OTyAwCiAjZGVmaW5lIFdBTk9QVF9ZRVMgMQotCiAjZGVmaW5lIFdBTk9QVF9SUzIzMiAwCiAjZGVmaW5lIFdBTk9QVF9WMzUgMQotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBXQU5PUFRfTlJaIDAKICNkZWZpbmUgV0FOT1BUX05SWkkgMQogI2RlZmluZSBXQU5PUFRfRk0wIDIKICNkZWZpbmUgV0FOT1BUX0ZNMSAzCi0KLSNkZWZpbmUgV0FOT1BUX1BPSU5UVE9QT0lOVCAwICAKLSNkZWZpbmUgV0FOT1BUX01VTFRJRFJPUCAxICAKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgV0FOT1BUX1BPSU5UVE9QT0lOVCAwCisjZGVmaW5lIFdBTk9QVF9NVUxUSURST1AgMQogI2RlZmluZSBXQU5PUFRfRVhURVJOQUwgMAogI2RlZmluZSBXQU5PUFRfSU5URVJOQUwgMQotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBXQU5PUFRfRFRFIDAKICNkZWZpbmUgV0FOT1BUX0RDRSAxCiAjZGVmaW5lIFdBTk9QVF9DUEUgMAogI2RlZmluZSBXQU5PUFRfTk9ERSAxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBXQU5PUFRfU0VDT05EQVJZIDAKICNkZWZpbmUgV0FOT1BUX1BSSU1BUlkgMQotCi0jZGVmaW5lIFdBTk9QVF9QRVJNQU5FTlQgMCAgCi0jZGVmaW5lIFdBTk9QVF9TV0lUQ0hFRCAxICAKLSNkZWZpbmUgV0FOT1BUX09OREVNQU5EIDIgIAotCi0jZGVmaW5lIFdBTk9QVF9GUl9BTlNJIDEgIAotI2RlZmluZSBXQU5PUFRfRlJfUTkzMyAyICAKLSNkZWZpbmUgV0FOT1BUX0ZSX0xNSSAzICAKLQorI2RlZmluZSBXQU5PUFRfUEVSTUFORU5UIDAKKyNkZWZpbmUgV0FOT1BUX1NXSVRDSEVEIDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFdBTk9QVF9PTkRFTUFORCAyCisjZGVmaW5lIFdBTk9QVF9GUl9BTlNJIDEKKyNkZWZpbmUgV0FOT1BUX0ZSX1E5MzMgMgorI2RlZmluZSBXQU5PUFRfRlJfTE1JIDMKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFdBTk9QVF9QUFBfU1RBVElDIDAKICNkZWZpbmUgV0FOT1BUX1BQUF9IT1NUIDEKICNkZWZpbmUgV0FOT1BUX1BQUF9QRUVSIDIKLQogI2RlZmluZSBXQU5PUFRfT05FIDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFdBTk9QVF9UV08gMgogI2RlZmluZSBXQU5PUFRfT05FX0FORF9IQUxGIDMKLQogI2RlZmluZSBXQU5PUFRfTk9ORSAwCiAjZGVmaW5lIFdBTk9QVF9PREQgMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgV0FOT1BUX0VWRU4gMgotCiAjZGVmaW5lIFdBTk9QVF9QUkkgMAogI2RlZmluZSBXQU5PUFRfU0VDIDEKLQogI2RlZmluZSBXQU5PUFRfSU5UUiAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBXQU5PUFRfUE9MTCAxCi0KICNkZWZpbmUgV0FOT1BUX1RUWV9TWU5DIDAKICNkZWZpbmUgV0FOT1BUX1RUWV9BU1lOQyAxCi0KIHR5cGVkZWYgc3RydWN0IHdhbmRldl9zdGF0CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogewogIHVuc2lnbmVkIHN0YXRlOwogIHVuc2lnbmVkIG5kZXY7Ci0KICB1bnNpZ25lZCBjb25uZWN0aW9uOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBtZWRpYV90eXBlOwogIHVuc2lnbmVkIG10dTsKLQogIHVuc2lnbmVkIG1vZGVtX3N0YXR1czsKICB1bnNpZ25lZCByeF9mcmFtZXM7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIHJ4X292ZXJydW5zOwogIHVuc2lnbmVkIHJ4X2NyY19lcnI7CiAgdW5zaWduZWQgcnhfYWJvcnRzOwogIHVuc2lnbmVkIHJ4X2JhZF9sZW5ndGg7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIHJ4X2Ryb3BwZWQ7CiAgdW5zaWduZWQgdHhfZnJhbWVzOwogIHVuc2lnbmVkIHR4X3VuZGVycnVuczsKICB1bnNpZ25lZCB0eF90aW1lb3V0czsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgdHhfcmVqZWN0czsKLQogIHVuc2lnbmVkIHJ4X2JhZF9mb3JtYXQ7CiAgdW5zaWduZWQgcnhfYmFkX2FkZHI7CiAgdW5zaWduZWQgdHhfcmV0cmllczsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgcmVzZXJ2ZWRbMTZdOwogfSB3YW5kZXZfc3RhdF90OwotCiBlbnVtIHdhbl9zdGF0ZXMKIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgV0FOX1VOQ09ORklHVVJFRCwKICBXQU5fRElTQ09OTkVDVEVELAogIFdBTl9DT05ORUNUSU5HLAogIFdBTl9DT05ORUNURUQsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFdBTl9MSU1JVCwKICBXQU5fRFVBTFBPUlQsCiAgV0FOX0RJU0NPTk5FQ1RJTkcsCiAgV0FOX0ZUMV9SRUFEWQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07Ci0KIGVudW0gewogIFdBTl9MT0NBTF9JUCwKICBXQU5fUE9JTlRPUE9JTlRfSVAsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFdBTl9ORVRNQVNLX0lQLAogIFdBTl9CUk9BRENBU1RfSVAKIH07Ci0KLSNkZWZpbmUgV0FOX01PREVNX0NUUyAweDAwMDEgIAotI2RlZmluZSBXQU5fTU9ERU1fRENEIDB4MDAwMiAgCi0jZGVmaW5lIFdBTl9NT0RFTV9EVFIgMHgwMDEwICAKLSNkZWZpbmUgV0FOX01PREVNX1JUUyAweDAwMjAgIAotCisjZGVmaW5lIFdBTl9NT0RFTV9DVFMgMHgwMDAxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBXQU5fTU9ERU1fRENEIDB4MDAwMgorI2RlZmluZSBXQU5fTU9ERU1fRFRSIDB4MDAxMAorI2RlZmluZSBXQU5fTU9ERU1fUlRTIDB4MDAyMAogdHlwZWRlZiBzdHJ1Y3Qgd2FuaWZfY29uZgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHsKICB1bnNpZ25lZCBtYWdpYzsKICB1bnNpZ25lZCBjb25maWdfaWQ7CiAgY2hhciBuYW1lW1dBTl9JRk5BTUVfU1orMV07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGNoYXIgYWRkcltXQU5fQUREUkVTU19TWisxXTsKICBjaGFyIHVzZWRieVtVU0VEX0JZX0ZJRUxEXTsKICB1bnNpZ25lZCBpZGxlX3RpbWVvdXQ7CiAgdW5zaWduZWQgaG9sZF90aW1lb3V0OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBjaXI7CiAgdW5zaWduZWQgYmM7CiAgdW5zaWduZWQgYmU7CiAgdW5zaWduZWQgY2hhciBlbmFibGVfSVBYOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBjaGFyIGluYXJwOwogIHVuc2lnbmVkIGluYXJwX2ludGVydmFsOwogIHVuc2lnbmVkIGxvbmcgbmV0d29ya19udW1iZXI7CiAgY2hhciBtYzsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgY2hhciBsb2NhbF9hZGRyW1dBTl9BRERSRVNTX1NaKzFdOwogIHVuc2lnbmVkIGNoYXIgcG9ydDsKICB1bnNpZ25lZCBjaGFyIHByb3RvY29sOwogIGNoYXIgcGFwOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBjaGFyIGNoYXA7CiAgdW5zaWduZWQgY2hhciB1c2VyaWRbNTExXTsKICB1bnNpZ25lZCBjaGFyIHBhc3N3ZFs1MTFdOwogIHVuc2lnbmVkIGNoYXIgc3lzbmFtZVszMV07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGNoYXIgaWdub3JlX2RjZDsKICB1bnNpZ25lZCBjaGFyIGlnbm9yZV9jdHM7CiAgdW5zaWduZWQgY2hhciBpZ25vcmVfa2VlcGFsaXZlOwogIHVuc2lnbmVkIGNoYXIgaGRsY19zdHJlYW1pbmc7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGtlZXBhbGl2ZV90eF90bXI7CiAgdW5zaWduZWQga2VlcGFsaXZlX3J4X3RtcjsKICB1bnNpZ25lZCBrZWVwYWxpdmVfZXJyX21hcmdpbjsKICB1bnNpZ25lZCBzbGFycF90aW1lcjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgY2hhciB0dGw7CiAgY2hhciBpbnRlcmZhY2U7CiAgY2hhciBjbG9ja2luZzsKICB1bnNpZ25lZCBicHM7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIG10dTsKICB1bnNpZ25lZCBjaGFyIGlmX2Rvd247CiAgdW5zaWduZWQgY2hhciBnYXRld2F5OwogIHVuc2lnbmVkIGNoYXIgdHJ1ZV9pZl9lbmNvZGluZzsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBjaGFyIGFzeV9kYXRhX3RyYW5zOwogIHVuc2lnbmVkIGNoYXIgcnRzX2hzX2Zvcl9yZWNlaXZlOwogIHVuc2lnbmVkIGNoYXIgeG9uX3hvZmZfaHNfZm9yX3JlY2VpdmU7CiAgdW5zaWduZWQgY2hhciB4b25feG9mZl9oc19mb3JfdHJhbnNtaXQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGNoYXIgZGNkX2hzX2Zvcl90cmFuc21pdDsKICB1bnNpZ25lZCBjaGFyIGN0c19oc19mb3JfdHJhbnNtaXQ7CiAgdW5zaWduZWQgY2hhciBhc3luY19tb2RlOwogIHVuc2lnbmVkIHR4X2JpdHNfcGVyX2NoYXI7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIHJ4X2JpdHNfcGVyX2NoYXI7CiAgdW5zaWduZWQgc3RvcF9iaXRzOwogIHVuc2lnbmVkIGNoYXIgcGFyaXR5OwogIHVuc2lnbmVkIGJyZWFrX3RpbWVyOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBpbnRlcl9jaGFyX3RpbWVyOwogIHVuc2lnbmVkIHJ4X2NvbXBsZXRlX2xlbmd0aDsKICB1bnNpZ25lZCB4b25fY2hhcjsKICB1bnNpZ25lZCB4b2ZmX2NoYXI7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGNoYXIgcmVjZWl2ZV9vbmx5OwogfSB3YW5pZl9jb25mX3Q7Ci0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3dhdGNoZG9nLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvd2F0Y2hkb2cuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lY2M1ZDFhCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3dhdGNoZG9nLmgKQEAgLTAsMCArMSw2NSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfTElOVVhfV0FUQ0hET0dfSAorI2RlZmluZSBfTElOVVhfV0FUQ0hET0dfSAorI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFdBVENIRE9HX0lPQ1RMX0JBU0UgJ1cnCitzdHJ1Y3Qgd2F0Y2hkb2dfaW5mbyB7CisgX191MzIgb3B0aW9uczsKKyBfX3UzMiBmaXJtd2FyZV92ZXJzaW9uOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3U4IGlkZW50aXR5WzMyXTsKK307CisjZGVmaW5lIFdESU9DX0dFVFNVUFBPUlQgX0lPUihXQVRDSERPR19JT0NUTF9CQVNFLCAwLCBzdHJ1Y3Qgd2F0Y2hkb2dfaW5mbykKKyNkZWZpbmUgV0RJT0NfR0VUU1RBVFVTIF9JT1IoV0FUQ0hET0dfSU9DVExfQkFTRSwgMSwgaW50KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgV0RJT0NfR0VUQk9PVFNUQVRVUyBfSU9SKFdBVENIRE9HX0lPQ1RMX0JBU0UsIDIsIGludCkKKyNkZWZpbmUgV0RJT0NfR0VUVEVNUCBfSU9SKFdBVENIRE9HX0lPQ1RMX0JBU0UsIDMsIGludCkKKyNkZWZpbmUgV0RJT0NfU0VUT1BUSU9OUyBfSU9SKFdBVENIRE9HX0lPQ1RMX0JBU0UsIDQsIGludCkKKyNkZWZpbmUgV0RJT0NfS0VFUEFMSVZFIF9JT1IoV0FUQ0hET0dfSU9DVExfQkFTRSwgNSwgaW50KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgV0RJT0NfU0VUVElNRU9VVCBfSU9XUihXQVRDSERPR19JT0NUTF9CQVNFLCA2LCBpbnQpCisjZGVmaW5lIFdESU9DX0dFVFRJTUVPVVQgX0lPUihXQVRDSERPR19JT0NUTF9CQVNFLCA3LCBpbnQpCisjZGVmaW5lIFdESU9DX1NFVFBSRVRJTUVPVVQgX0lPV1IoV0FUQ0hET0dfSU9DVExfQkFTRSwgOCwgaW50KQorI2RlZmluZSBXRElPQ19HRVRQUkVUSU1FT1VUIF9JT1IoV0FUQ0hET0dfSU9DVExfQkFTRSwgOSwgaW50KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgV0RJT0NfR0VUVElNRUxFRlQgX0lPUihXQVRDSERPR19JT0NUTF9CQVNFLCAxMCwgaW50KQorI2RlZmluZSBXRElPRl9VTktOT1dOIC0xCisjZGVmaW5lIFdESU9TX1VOS05PV04gLTEKKyNkZWZpbmUgV0RJT0ZfT1ZFUkhFQVQgMHgwMDAxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBXRElPRl9GQU5GQVVMVCAweDAwMDIKKyNkZWZpbmUgV0RJT0ZfRVhURVJOMSAweDAwMDQKKyNkZWZpbmUgV0RJT0ZfRVhURVJOMiAweDAwMDgKKyNkZWZpbmUgV0RJT0ZfUE9XRVJVTkRFUiAweDAwMTAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFdESU9GX0NBUkRSRVNFVCAweDAwMjAKKyNkZWZpbmUgV0RJT0ZfUE9XRVJPVkVSIDB4MDA0MAorI2RlZmluZSBXRElPRl9TRVRUSU1FT1VUIDB4MDA4MAorI2RlZmluZSBXRElPRl9NQUdJQ0NMT1NFIDB4MDEwMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgV0RJT0ZfUFJFVElNRU9VVCAweDAyMDAKKyNkZWZpbmUgV0RJT0ZfS0VFUEFMSVZFUElORyAweDgwMDAKKyNkZWZpbmUgV0RJT1NfRElTQUJMRUNBUkQgMHgwMDAxCisjZGVmaW5lIFdESU9TX0VOQUJMRUNBUkQgMHgwMDAyCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBXRElPU19URU1QUEFOSUMgMHgwMDA0CisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC93aXJlbGVzcy5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3dpcmVsZXNzLmgKaW5kZXggODFjZWI3NS4uZDcwNjgwZSAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3dpcmVsZXNzLmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3dpcmVsZXNzLmgKQEAgLTcsNTM2ICs3LDUzMyBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX0xJTlVYX1dJUkVMRVNTX0gKICNkZWZpbmUgX0xJTlVYX1dJUkVMRVNTX0gKLQotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+ICAKLSNpbmNsdWRlIDxsaW51eC9zb2NrZXQuaD4gIAotI2luY2x1ZGUgPGxpbnV4L2lmLmg+ICAKLQorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvc29ja2V0Lmg+CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2luY2x1ZGUgPGxpbnV4L2lmLmg+CiAjZGVmaW5lIFdJUkVMRVNTX0VYVCAyMAotCi0jZGVmaW5lIFNJT0NTSVdDT01NSVQgMHg4QjAwICAKLSNkZWZpbmUgU0lPQ0dJV05BTUUgMHg4QjAxICAKLQotI2RlZmluZSBTSU9DU0lXTldJRCAweDhCMDIgIAotI2RlZmluZSBTSU9DR0lXTldJRCAweDhCMDMgIAotI2RlZmluZSBTSU9DU0lXRlJFUSAweDhCMDQgIAotI2RlZmluZSBTSU9DR0lXRlJFUSAweDhCMDUgIAotI2RlZmluZSBTSU9DU0lXTU9ERSAweDhCMDYgIAotI2RlZmluZSBTSU9DR0lXTU9ERSAweDhCMDcgIAotI2RlZmluZSBTSU9DU0lXU0VOUyAweDhCMDggIAotI2RlZmluZSBTSU9DR0lXU0VOUyAweDhCMDkgIAotCi0jZGVmaW5lIFNJT0NTSVdSQU5HRSAweDhCMEEgIAotI2RlZmluZSBTSU9DR0lXUkFOR0UgMHg4QjBCICAKLSNkZWZpbmUgU0lPQ1NJV1BSSVYgMHg4QjBDICAKLSNkZWZpbmUgU0lPQ0dJV1BSSVYgMHg4QjBEICAKLSNkZWZpbmUgU0lPQ1NJV1NUQVRTIDB4OEIwRSAgCi0jZGVmaW5lIFNJT0NHSVdTVEFUUyAweDhCMEYgIAotCi0jZGVmaW5lIFNJT0NTSVdTUFkgMHg4QjEwICAKLSNkZWZpbmUgU0lPQ0dJV1NQWSAweDhCMTEgIAotI2RlZmluZSBTSU9DU0lXVEhSU1BZIDB4OEIxMiAgCi0jZGVmaW5lIFNJT0NHSVdUSFJTUFkgMHg4QjEzICAKLQotI2RlZmluZSBTSU9DU0lXQVAgMHg4QjE0ICAKLSNkZWZpbmUgU0lPQ0dJV0FQIDB4OEIxNSAgCi0jZGVmaW5lIFNJT0NHSVdBUExJU1QgMHg4QjE3ICAKLSNkZWZpbmUgU0lPQ1NJV1NDQU4gMHg4QjE4ICAKLSNkZWZpbmUgU0lPQ0dJV1NDQU4gMHg4QjE5ICAKLQotI2RlZmluZSBTSU9DU0lXRVNTSUQgMHg4QjFBICAKLSNkZWZpbmUgU0lPQ0dJV0VTU0lEIDB4OEIxQiAgCi0jZGVmaW5lIFNJT0NTSVdOSUNLTiAweDhCMUMgIAotI2RlZmluZSBTSU9DR0lXTklDS04gMHg4QjFEICAKLQotI2RlZmluZSBTSU9DU0lXUkFURSAweDhCMjAgIAotI2RlZmluZSBTSU9DR0lXUkFURSAweDhCMjEgIAotI2RlZmluZSBTSU9DU0lXUlRTIDB4OEIyMiAgCi0jZGVmaW5lIFNJT0NHSVdSVFMgMHg4QjIzICAKLSNkZWZpbmUgU0lPQ1NJV0ZSQUcgMHg4QjI0ICAKLSNkZWZpbmUgU0lPQ0dJV0ZSQUcgMHg4QjI1ICAKLSNkZWZpbmUgU0lPQ1NJV1RYUE9XIDB4OEIyNiAgCi0jZGVmaW5lIFNJT0NHSVdUWFBPVyAweDhCMjcgIAotI2RlZmluZSBTSU9DU0lXUkVUUlkgMHg4QjI4ICAKLSNkZWZpbmUgU0lPQ0dJV1JFVFJZIDB4OEIyOSAgCi0KLSNkZWZpbmUgU0lPQ1NJV0VOQ09ERSAweDhCMkEgIAotI2RlZmluZSBTSU9DR0lXRU5DT0RFIDB4OEIyQiAgCi0KLSNkZWZpbmUgU0lPQ1NJV1BPV0VSIDB4OEIyQyAgCi0jZGVmaW5lIFNJT0NHSVdQT1dFUiAweDhCMkQgIAotCi0jZGVmaW5lIFNJT0NTSVdHRU5JRSAweDhCMzAgIAotI2RlZmluZSBTSU9DR0lXR0VOSUUgMHg4QjMxICAKLQotI2RlZmluZSBTSU9DU0lXTUxNRSAweDhCMTYgIAotCi0jZGVmaW5lIFNJT0NTSVdBVVRIIDB4OEIzMiAgCi0jZGVmaW5lIFNJT0NHSVdBVVRIIDB4OEIzMyAgCi0KLSNkZWZpbmUgU0lPQ1NJV0VOQ09ERUVYVCAweDhCMzQgIAotI2RlZmluZSBTSU9DR0lXRU5DT0RFRVhUIDB4OEIzNSAgCi0KLSNkZWZpbmUgU0lPQ1NJV1BNS1NBIDB4OEIzNiAgCi0KKyNkZWZpbmUgU0lPQ1NJV0NPTU1JVCAweDhCMDAKKyNkZWZpbmUgU0lPQ0dJV05BTUUgMHg4QjAxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBTSU9DU0lXTldJRCAweDhCMDIKKyNkZWZpbmUgU0lPQ0dJV05XSUQgMHg4QjAzCisjZGVmaW5lIFNJT0NTSVdGUkVRIDB4OEIwNAorI2RlZmluZSBTSU9DR0lXRlJFUSAweDhCMDUKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFNJT0NTSVdNT0RFIDB4OEIwNgorI2RlZmluZSBTSU9DR0lXTU9ERSAweDhCMDcKKyNkZWZpbmUgU0lPQ1NJV1NFTlMgMHg4QjA4CisjZGVmaW5lIFNJT0NHSVdTRU5TIDB4OEIwOQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgU0lPQ1NJV1JBTkdFIDB4OEIwQQorI2RlZmluZSBTSU9DR0lXUkFOR0UgMHg4QjBCCisjZGVmaW5lIFNJT0NTSVdQUklWIDB4OEIwQworI2RlZmluZSBTSU9DR0lXUFJJViAweDhCMEQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFNJT0NTSVdTVEFUUyAweDhCMEUKKyNkZWZpbmUgU0lPQ0dJV1NUQVRTIDB4OEIwRgorI2RlZmluZSBTSU9DU0lXU1BZIDB4OEIxMAorI2RlZmluZSBTSU9DR0lXU1BZIDB4OEIxMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgU0lPQ1NJV1RIUlNQWSAweDhCMTIKKyNkZWZpbmUgU0lPQ0dJV1RIUlNQWSAweDhCMTMKKyNkZWZpbmUgU0lPQ1NJV0FQIDB4OEIxNAorI2RlZmluZSBTSU9DR0lXQVAgMHg4QjE1CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBTSU9DR0lXQVBMSVNUIDB4OEIxNworI2RlZmluZSBTSU9DU0lXU0NBTiAweDhCMTgKKyNkZWZpbmUgU0lPQ0dJV1NDQU4gMHg4QjE5CisjZGVmaW5lIFNJT0NTSVdFU1NJRCAweDhCMUEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFNJT0NHSVdFU1NJRCAweDhCMUIKKyNkZWZpbmUgU0lPQ1NJV05JQ0tOIDB4OEIxQworI2RlZmluZSBTSU9DR0lXTklDS04gMHg4QjFECisjZGVmaW5lIFNJT0NTSVdSQVRFIDB4OEIyMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgU0lPQ0dJV1JBVEUgMHg4QjIxCisjZGVmaW5lIFNJT0NTSVdSVFMgMHg4QjIyCisjZGVmaW5lIFNJT0NHSVdSVFMgMHg4QjIzCisjZGVmaW5lIFNJT0NTSVdGUkFHIDB4OEIyNAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgU0lPQ0dJV0ZSQUcgMHg4QjI1CisjZGVmaW5lIFNJT0NTSVdUWFBPVyAweDhCMjYKKyNkZWZpbmUgU0lPQ0dJV1RYUE9XIDB4OEIyNworI2RlZmluZSBTSU9DU0lXUkVUUlkgMHg4QjI4CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBTSU9DR0lXUkVUUlkgMHg4QjI5CisjZGVmaW5lIFNJT0NTSVdFTkNPREUgMHg4QjJBCisjZGVmaW5lIFNJT0NHSVdFTkNPREUgMHg4QjJCCisjZGVmaW5lIFNJT0NTSVdQT1dFUiAweDhCMkMKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFNJT0NHSVdQT1dFUiAweDhCMkQKKyNkZWZpbmUgU0lPQ1NJV0dFTklFIDB4OEIzMAorI2RlZmluZSBTSU9DR0lXR0VOSUUgMHg4QjMxCisjZGVmaW5lIFNJT0NTSVdNTE1FIDB4OEIxNgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgU0lPQ1NJV0FVVEggMHg4QjMyCisjZGVmaW5lIFNJT0NHSVdBVVRIIDB4OEIzMworI2RlZmluZSBTSU9DU0lXRU5DT0RFRVhUIDB4OEIzNAorI2RlZmluZSBTSU9DR0lXRU5DT0RFRVhUIDB4OEIzNQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgU0lPQ1NJV1BNS1NBIDB4OEIzNgogI2RlZmluZSBTSU9DSVdGSVJTVFBSSVYgMHg4QkUwCiAjZGVmaW5lIFNJT0NJV0xBU1RQUklWIDB4OEJGRgotCiAjZGVmaW5lIFNJT0NJV0ZJUlNUIDB4OEIwMAotI2RlZmluZSBTSU9DSVdMQVNUIFNJT0NJV0xBU1RQUklWICAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFNJT0NJV0xBU1QgU0lPQ0lXTEFTVFBSSVYKICNkZWZpbmUgSVdfSU9DVExfSURYKGNtZCkgKChjbWQpIC0gU0lPQ0lXRklSU1QpCi0KICNkZWZpbmUgSVdfSVNfU0VUKGNtZCkgKCEoKGNtZCkgJiAweDEpKQogI2RlZmluZSBJV19JU19HRVQoY21kKSAoKGNtZCkgJiAweDEpCi0KLSNkZWZpbmUgSVdFVlRYRFJPUCAweDhDMDAgIAotI2RlZmluZSBJV0VWUVVBTCAweDhDMDEgIAotI2RlZmluZSBJV0VWQ1VTVE9NIDB4OEMwMiAgCi0jZGVmaW5lIElXRVZSRUdJU1RFUkVEIDB4OEMwMyAgCi0jZGVmaW5lIElXRVZFWFBJUkVEIDB4OEMwNCAgCi0jZGVmaW5lIElXRVZHRU5JRSAweDhDMDUgIAotI2RlZmluZSBJV0VWTUlDSEFFTE1JQ0ZBSUxVUkUgMHg4QzA2ICAKLSNkZWZpbmUgSVdFVkFTU09DUkVRSUUgMHg4QzA3ICAKLSNkZWZpbmUgSVdFVkFTU09DUkVTUElFIDB4OEMwOCAgCi0jZGVmaW5lIElXRVZQTUtJRENBTkQgMHg4QzA5ICAKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgSVdFVlRYRFJPUCAweDhDMDAKKyNkZWZpbmUgSVdFVlFVQUwgMHg4QzAxCisjZGVmaW5lIElXRVZDVVNUT00gMHg4QzAyCisjZGVmaW5lIElXRVZSRUdJU1RFUkVEIDB4OEMwMworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgSVdFVkVYUElSRUQgMHg4QzA0CisjZGVmaW5lIElXRVZHRU5JRSAweDhDMDUKKyNkZWZpbmUgSVdFVk1JQ0hBRUxNSUNGQUlMVVJFIDB4OEMwNgorI2RlZmluZSBJV0VWQVNTT0NSRVFJRSAweDhDMDcKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIElXRVZBU1NPQ1JFU1BJRSAweDhDMDgKKyNkZWZpbmUgSVdFVlBNS0lEQ0FORCAweDhDMDkKICNkZWZpbmUgSVdFVkZJUlNUIDB4OEMwMAogI2RlZmluZSBJV19FVkVOVF9JRFgoY21kKSAoKGNtZCkgLSBJV0VWRklSU1QpCi0KLSNkZWZpbmUgSVdfUFJJVl9UWVBFX01BU0sgMHg3MDAwICAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIElXX1BSSVZfVFlQRV9NQVNLIDB4NzAwMAogI2RlZmluZSBJV19QUklWX1RZUEVfTk9ORSAweDAwMDAKLSNkZWZpbmUgSVdfUFJJVl9UWVBFX0JZVEUgMHgxMDAwICAKLSNkZWZpbmUgSVdfUFJJVl9UWVBFX0NIQVIgMHgyMDAwICAKLSNkZWZpbmUgSVdfUFJJVl9UWVBFX0lOVCAweDQwMDAgIAotI2RlZmluZSBJV19QUklWX1RZUEVfRkxPQVQgMHg1MDAwICAKLSNkZWZpbmUgSVdfUFJJVl9UWVBFX0FERFIgMHg2MDAwICAKLQotI2RlZmluZSBJV19QUklWX1NJWkVfRklYRUQgMHgwODAwICAKLQotI2RlZmluZSBJV19QUklWX1NJWkVfTUFTSyAweDA3RkYgIAotCisjZGVmaW5lIElXX1BSSVZfVFlQRV9CWVRFIDB4MTAwMAorI2RlZmluZSBJV19QUklWX1RZUEVfQ0hBUiAweDIwMDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIElXX1BSSVZfVFlQRV9JTlQgMHg0MDAwCisjZGVmaW5lIElXX1BSSVZfVFlQRV9GTE9BVCAweDUwMDAKKyNkZWZpbmUgSVdfUFJJVl9UWVBFX0FERFIgMHg2MDAwCisjZGVmaW5lIElXX1BSSVZfU0laRV9GSVhFRCAweDA4MDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIElXX1BSSVZfU0laRV9NQVNLIDB4MDdGRgogI2RlZmluZSBJV19NQVhfRlJFUVVFTkNJRVMgMzIKLQogI2RlZmluZSBJV19NQVhfQklUUkFURVMgMzIKLQogI2RlZmluZSBJV19NQVhfVFhQT1dFUiA4Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIElXX01BWF9TUFkgOAotCiAjZGVmaW5lIElXX01BWF9BUCA2NAotCiAjZGVmaW5lIElXX0VTU0lEX01BWF9TSVpFIDMyCi0KLSNkZWZpbmUgSVdfTU9ERV9BVVRPIDAgIAotI2RlZmluZSBJV19NT0RFX0FESE9DIDEgIAotI2RlZmluZSBJV19NT0RFX0lORlJBIDIgIAotI2RlZmluZSBJV19NT0RFX01BU1RFUiAzICAKLSNkZWZpbmUgSVdfTU9ERV9SRVBFQVQgNCAgCi0jZGVmaW5lIElXX01PREVfU0VDT05EIDUgIAotI2RlZmluZSBJV19NT0RFX01PTklUT1IgNiAgCi0KLSNkZWZpbmUgSVdfUVVBTF9RVUFMX1VQREFURUQgMHgwMSAgCisjZGVmaW5lIElXX01PREVfQVVUTyAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBJV19NT0RFX0FESE9DIDEKKyNkZWZpbmUgSVdfTU9ERV9JTkZSQSAyCisjZGVmaW5lIElXX01PREVfTUFTVEVSIDMKKyNkZWZpbmUgSVdfTU9ERV9SRVBFQVQgNAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgSVdfTU9ERV9TRUNPTkQgNQorI2RlZmluZSBJV19NT0RFX01PTklUT1IgNgorI2RlZmluZSBJV19RVUFMX1FVQUxfVVBEQVRFRCAweDAxCiAjZGVmaW5lIElXX1FVQUxfTEVWRUxfVVBEQVRFRCAweDAyCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJV19RVUFMX05PSVNFX1VQREFURUQgMHgwNAogI2RlZmluZSBJV19RVUFMX0FMTF9VUERBVEVEIDB4MDcKLSNkZWZpbmUgSVdfUVVBTF9EQk0gMHgwOCAgCi0jZGVmaW5lIElXX1FVQUxfUVVBTF9JTlZBTElEIDB4MTAgIAorI2RlZmluZSBJV19RVUFMX0RCTSAweDA4CisjZGVmaW5lIElXX1FVQUxfUVVBTF9JTlZBTElEIDB4MTAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIElXX1FVQUxfTEVWRUxfSU5WQUxJRCAweDIwCiAjZGVmaW5lIElXX1FVQUxfTk9JU0VfSU5WQUxJRCAweDQwCiAjZGVmaW5lIElXX1FVQUxfQUxMX0lOVkFMSUQgMHg3MAotCi0jZGVmaW5lIElXX0ZSRVFfQVVUTyAweDAwICAKLSNkZWZpbmUgSVdfRlJFUV9GSVhFRCAweDAxICAKLQorI2RlZmluZSBJV19GUkVRX0FVVE8gMHgwMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgSVdfRlJFUV9GSVhFRCAweDAxCiAjZGVmaW5lIElXX01BWF9FTkNPRElOR19TSVpFUyA4Ci0KLSNkZWZpbmUgSVdfRU5DT0RJTkdfVE9LRU5fTUFYIDY0ICAKLQotI2RlZmluZSBJV19FTkNPREVfSU5ERVggMHgwMEZGICAKLSNkZWZpbmUgSVdfRU5DT0RFX0ZMQUdTIDB4RkYwMCAgCi0jZGVmaW5lIElXX0VOQ09ERV9NT0RFIDB4RjAwMCAgCi0jZGVmaW5lIElXX0VOQ09ERV9ESVNBQkxFRCAweDgwMDAgIAotI2RlZmluZSBJV19FTkNPREVfRU5BQkxFRCAweDAwMDAgIAotI2RlZmluZSBJV19FTkNPREVfUkVTVFJJQ1RFRCAweDQwMDAgIAotI2RlZmluZSBJV19FTkNPREVfT1BFTiAweDIwMDAgIAotI2RlZmluZSBJV19FTkNPREVfTk9LRVkgMHgwODAwICAKLSNkZWZpbmUgSVdfRU5DT0RFX1RFTVAgMHgwNDAwICAKLQotI2RlZmluZSBJV19QT1dFUl9PTiAweDAwMDAgIAotI2RlZmluZSBJV19QT1dFUl9UWVBFIDB4RjAwMCAgCi0jZGVmaW5lIElXX1BPV0VSX1BFUklPRCAweDEwMDAgIAotI2RlZmluZSBJV19QT1dFUl9USU1FT1VUIDB4MjAwMCAgCi0jZGVmaW5lIElXX1BPV0VSX01PREUgMHgwRjAwICAKLSNkZWZpbmUgSVdfUE9XRVJfVU5JQ0FTVF9SIDB4MDEwMCAgCi0jZGVmaW5lIElXX1BPV0VSX01VTFRJQ0FTVF9SIDB4MDIwMCAgCi0jZGVmaW5lIElXX1BPV0VSX0FMTF9SIDB4MDMwMCAgCi0jZGVmaW5lIElXX1BPV0VSX0ZPUkNFX1MgMHgwNDAwICAKLSNkZWZpbmUgSVdfUE9XRVJfUkVQRUFURVIgMHgwODAwICAKLSNkZWZpbmUgSVdfUE9XRVJfTU9ESUZJRVIgMHgwMDBGICAKLSNkZWZpbmUgSVdfUE9XRVJfTUlOIDB4MDAwMSAgCi0jZGVmaW5lIElXX1BPV0VSX01BWCAweDAwMDIgIAotI2RlZmluZSBJV19QT1dFUl9SRUxBVElWRSAweDAwMDQgIAotCi0jZGVmaW5lIElXX1RYUE9XX1RZUEUgMHgwMEZGICAKLSNkZWZpbmUgSVdfVFhQT1dfREJNIDB4MDAwMCAgCi0jZGVmaW5lIElXX1RYUE9XX01XQVRUIDB4MDAwMSAgCi0jZGVmaW5lIElXX1RYUE9XX1JFTEFUSVZFIDB4MDAwMiAgCi0jZGVmaW5lIElXX1RYUE9XX1JBTkdFIDB4MTAwMCAgCi0KLSNkZWZpbmUgSVdfUkVUUllfT04gMHgwMDAwICAKLSNkZWZpbmUgSVdfUkVUUllfVFlQRSAweEYwMDAgIAotI2RlZmluZSBJV19SRVRSWV9MSU1JVCAweDEwMDAgIAotI2RlZmluZSBJV19SRVRSWV9MSUZFVElNRSAweDIwMDAgIAotI2RlZmluZSBJV19SRVRSWV9NT0RJRklFUiAweDAwMEYgIAotI2RlZmluZSBJV19SRVRSWV9NSU4gMHgwMDAxICAKLSNkZWZpbmUgSVdfUkVUUllfTUFYIDB4MDAwMiAgCi0jZGVmaW5lIElXX1JFVFJZX1JFTEFUSVZFIDB4MDAwNCAgCi0KLSNkZWZpbmUgSVdfU0NBTl9ERUZBVUxUIDB4MDAwMCAgCi0jZGVmaW5lIElXX1NDQU5fQUxMX0VTU0lEIDB4MDAwMSAgCi0jZGVmaW5lIElXX1NDQU5fVEhJU19FU1NJRCAweDAwMDIgIAotI2RlZmluZSBJV19TQ0FOX0FMTF9GUkVRIDB4MDAwNCAgCi0jZGVmaW5lIElXX1NDQU5fVEhJU19GUkVRIDB4MDAwOCAgCi0jZGVmaW5lIElXX1NDQU5fQUxMX01PREUgMHgwMDEwICAKLSNkZWZpbmUgSVdfU0NBTl9USElTX01PREUgMHgwMDIwICAKLSNkZWZpbmUgSVdfU0NBTl9BTExfUkFURSAweDAwNDAgIAotI2RlZmluZSBJV19TQ0FOX1RISVNfUkFURSAweDAwODAgIAotCisjZGVmaW5lIElXX0VOQ09ESU5HX1RPS0VOX01BWCA2NAorI2RlZmluZSBJV19FTkNPREVfSU5ERVggMHgwMEZGCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBJV19FTkNPREVfRkxBR1MgMHhGRjAwCisjZGVmaW5lIElXX0VOQ09ERV9NT0RFIDB4RjAwMAorI2RlZmluZSBJV19FTkNPREVfRElTQUJMRUQgMHg4MDAwCisjZGVmaW5lIElXX0VOQ09ERV9FTkFCTEVEIDB4MDAwMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgSVdfRU5DT0RFX1JFU1RSSUNURUQgMHg0MDAwCisjZGVmaW5lIElXX0VOQ09ERV9PUEVOIDB4MjAwMAorI2RlZmluZSBJV19FTkNPREVfTk9LRVkgMHgwODAwCisjZGVmaW5lIElXX0VOQ09ERV9URU1QIDB4MDQwMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgSVdfUE9XRVJfT04gMHgwMDAwCisjZGVmaW5lIElXX1BPV0VSX1RZUEUgMHhGMDAwCisjZGVmaW5lIElXX1BPV0VSX1BFUklPRCAweDEwMDAKKyNkZWZpbmUgSVdfUE9XRVJfVElNRU9VVCAweDIwMDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIElXX1BPV0VSX01PREUgMHgwRjAwCisjZGVmaW5lIElXX1BPV0VSX1VOSUNBU1RfUiAweDAxMDAKKyNkZWZpbmUgSVdfUE9XRVJfTVVMVElDQVNUX1IgMHgwMjAwCisjZGVmaW5lIElXX1BPV0VSX0FMTF9SIDB4MDMwMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgSVdfUE9XRVJfRk9SQ0VfUyAweDA0MDAKKyNkZWZpbmUgSVdfUE9XRVJfUkVQRUFURVIgMHgwODAwCisjZGVmaW5lIElXX1BPV0VSX01PRElGSUVSIDB4MDAwRgorI2RlZmluZSBJV19QT1dFUl9NSU4gMHgwMDAxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBJV19QT1dFUl9NQVggMHgwMDAyCisjZGVmaW5lIElXX1BPV0VSX1JFTEFUSVZFIDB4MDAwNAorI2RlZmluZSBJV19UWFBPV19UWVBFIDB4MDBGRgorI2RlZmluZSBJV19UWFBPV19EQk0gMHgwMDAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBJV19UWFBPV19NV0FUVCAweDAwMDEKKyNkZWZpbmUgSVdfVFhQT1dfUkVMQVRJVkUgMHgwMDAyCisjZGVmaW5lIElXX1RYUE9XX1JBTkdFIDB4MTAwMAorI2RlZmluZSBJV19SRVRSWV9PTiAweDAwMDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIElXX1JFVFJZX1RZUEUgMHhGMDAwCisjZGVmaW5lIElXX1JFVFJZX0xJTUlUIDB4MTAwMAorI2RlZmluZSBJV19SRVRSWV9MSUZFVElNRSAweDIwMDAKKyNkZWZpbmUgSVdfUkVUUllfTU9ESUZJRVIgMHgwMDBGCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBJV19SRVRSWV9NSU4gMHgwMDAxCisjZGVmaW5lIElXX1JFVFJZX01BWCAweDAwMDIKKyNkZWZpbmUgSVdfUkVUUllfUkVMQVRJVkUgMHgwMDA0CisjZGVmaW5lIElXX1NDQU5fREVGQVVMVCAweDAwMDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIElXX1NDQU5fQUxMX0VTU0lEIDB4MDAwMQorI2RlZmluZSBJV19TQ0FOX1RISVNfRVNTSUQgMHgwMDAyCisjZGVmaW5lIElXX1NDQU5fQUxMX0ZSRVEgMHgwMDA0CisjZGVmaW5lIElXX1NDQU5fVEhJU19GUkVRIDB4MDAwOAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgSVdfU0NBTl9BTExfTU9ERSAweDAwMTAKKyNkZWZpbmUgSVdfU0NBTl9USElTX01PREUgMHgwMDIwCisjZGVmaW5lIElXX1NDQU5fQUxMX1JBVEUgMHgwMDQwCisjZGVmaW5lIElXX1NDQU5fVEhJU19SQVRFIDB4MDA4MAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSVdfU0NBTl9UWVBFX0FDVElWRSAwCiAjZGVmaW5lIElXX1NDQU5fVFlQRV9QQVNTSVZFIDEKLQotI2RlZmluZSBJV19TQ0FOX01BWF9EQVRBIDQwOTYgIAotCi0jZGVmaW5lIElXX0NVU1RPTV9NQVggMjU2ICAKLQorI2RlZmluZSBJV19TQ0FOX01BWF9EQVRBIDQwOTYKKyNkZWZpbmUgSVdfQ1VTVE9NX01BWCAyNTYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIElXX0dFTkVSSUNfSUVfTUFYIDEwMjQKLQogI2RlZmluZSBJV19NTE1FX0RFQVVUSCAwCiAjZGVmaW5lIElXX01MTUVfRElTQVNTT0MgMQotCiAjZGVmaW5lIElXX0FVVEhfSU5ERVggMHgwRkZGCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJV19BVVRIX0ZMQUdTIDB4RjAwMAotCiAjZGVmaW5lIElXX0FVVEhfV1BBX1ZFUlNJT04gMAogI2RlZmluZSBJV19BVVRIX0NJUEhFUl9QQUlSV0lTRSAxCiAjZGVmaW5lIElXX0FVVEhfQ0lQSEVSX0dST1VQIDIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIElXX0FVVEhfS0VZX01HTVQgMwogI2RlZmluZSBJV19BVVRIX1RLSVBfQ09VTlRFUk1FQVNVUkVTIDQKICNkZWZpbmUgSVdfQVVUSF9EUk9QX1VORU5DUllQVEVEIDUKICNkZWZpbmUgSVdfQVVUSF84MDIxMV9BVVRIX0FMRyA2CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJV19BVVRIX1dQQV9FTkFCTEVEIDcKICNkZWZpbmUgSVdfQVVUSF9SWF9VTkVOQ1JZUFRFRF9FQVBPTCA4CiAjZGVmaW5lIElXX0FVVEhfUk9BTUlOR19DT05UUk9MIDkKICNkZWZpbmUgSVdfQVVUSF9QUklWQUNZX0lOVk9LRUQgMTAKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSVdfQVVUSF9XUEFfVkVSU0lPTl9ESVNBQkxFRCAweDAwMDAwMDAxCiAjZGVmaW5lIElXX0FVVEhfV1BBX1ZFUlNJT05fV1BBIDB4MDAwMDAwMDIKICNkZWZpbmUgSVdfQVVUSF9XUEFfVkVSU0lPTl9XUEEyIDB4MDAwMDAwMDQKLQogI2RlZmluZSBJV19BVVRIX0NJUEhFUl9OT05FIDB4MDAwMDAwMDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIElXX0FVVEhfQ0lQSEVSX1dFUDQwIDB4MDAwMDAwMDIKICNkZWZpbmUgSVdfQVVUSF9DSVBIRVJfVEtJUCAweDAwMDAwMDA0CiAjZGVmaW5lIElXX0FVVEhfQ0lQSEVSX0NDTVAgMHgwMDAwMDAwOAogI2RlZmluZSBJV19BVVRIX0NJUEhFUl9XRVAxMDQgMHgwMDAwMDAxMAotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJV19BVVRIX0tFWV9NR01UXzgwMl8xWCAxCiAjZGVmaW5lIElXX0FVVEhfS0VZX01HTVRfUFNLIDIKLQogI2RlZmluZSBJV19BVVRIX0FMR19PUEVOX1NZU1RFTSAweDAwMDAwMDAxCiAjZGVmaW5lIElXX0FVVEhfQUxHX1NIQVJFRF9LRVkgMHgwMDAwMDAwMgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSVdfQVVUSF9BTEdfTEVBUCAweDAwMDAwMDA0Ci0KLSNkZWZpbmUgSVdfQVVUSF9ST0FNSU5HX0VOQUJMRSAwICAKLSNkZWZpbmUgSVdfQVVUSF9ST0FNSU5HX0RJU0FCTEUgMSAgCi0KKyNkZWZpbmUgSVdfQVVUSF9ST0FNSU5HX0VOQUJMRSAwCisjZGVmaW5lIElXX0FVVEhfUk9BTUlOR19ESVNBQkxFIDEKICNkZWZpbmUgSVdfRU5DT0RFX1NFUV9NQVhfU0laRSA4Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIElXX0VOQ09ERV9BTEdfTk9ORSAwCiAjZGVmaW5lIElXX0VOQ09ERV9BTEdfV0VQIDEKICNkZWZpbmUgSVdfRU5DT0RFX0FMR19US0lQIDIKICNkZWZpbmUgSVdfRU5DT0RFX0FMR19DQ01QIDMKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSVdfRU5DT0RFX0VYVF9UWF9TRVFfVkFMSUQgMHgwMDAwMDAwMQogI2RlZmluZSBJV19FTkNPREVfRVhUX1JYX1NFUV9WQUxJRCAweDAwMDAwMDAyCiAjZGVmaW5lIElXX0VOQ09ERV9FWFRfR1JPVVBfS0VZIDB4MDAwMDAwMDQKICNkZWZpbmUgSVdfRU5DT0RFX0VYVF9TRVRfVFhfS0VZIDB4MDAwMDAwMDgKLQotI2RlZmluZSBJV19NSUNGQUlMVVJFX0tFWV9JRCAweDAwMDAwMDAzICAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIElXX01JQ0ZBSUxVUkVfS0VZX0lEIDB4MDAwMDAwMDMKICNkZWZpbmUgSVdfTUlDRkFJTFVSRV9HUk9VUCAweDAwMDAwMDA0CiAjZGVmaW5lIElXX01JQ0ZBSUxVUkVfUEFJUldJU0UgMHgwMDAwMDAwOAogI2RlZmluZSBJV19NSUNGQUlMVVJFX1NUQUtFWSAweDAwMDAwMDEwCi0jZGVmaW5lIElXX01JQ0ZBSUxVUkVfQ09VTlQgMHgwMDAwMDA2MCAgCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIElXX01JQ0ZBSUxVUkVfQ09VTlQgMHgwMDAwMDA2MAogI2RlZmluZSBJV19FTkNfQ0FQQV9XUEEgMHgwMDAwMDAwMQogI2RlZmluZSBJV19FTkNfQ0FQQV9XUEEyIDB4MDAwMDAwMDIKICNkZWZpbmUgSVdfRU5DX0NBUEFfQ0lQSEVSX1RLSVAgMHgwMDAwMDAwNAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSVdfRU5DX0NBUEFfQ0lQSEVSX0NDTVAgMHgwMDAwMDAwOAotCiAjZGVmaW5lIElXX0VWRU5UX0NBUEFfQkFTRShjbWQpICgoY21kID49IFNJT0NJV0ZJUlNUUFJJVikgPyAgIChjbWQgLSBTSU9DSVdGSVJTVFBSSVYgKyAweDYwKSA6ICAgKGNtZCAtIFNJT0NTSVdDT01NSVQpKQogI2RlZmluZSBJV19FVkVOVF9DQVBBX0lOREVYKGNtZCkgKElXX0VWRU5UX0NBUEFfQkFTRShjbWQpID4+IDUpCiAjZGVmaW5lIElXX0VWRU5UX0NBUEFfTUFTSyhjbWQpICgxIDw8IChJV19FVkVOVF9DQVBBX0JBU0UoY21kKSAmIDB4MUYpKQotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJV19FVkVOVF9DQVBBX0tfMCAoSVdfRVZFTlRfQ0FQQV9NQVNLKDB4OEIwNCkgfCAgIElXX0VWRU5UX0NBUEFfTUFTSygweDhCMDYpIHwgICBJV19FVkVOVF9DQVBBX01BU0soMHg4QjFBKSkKICNkZWZpbmUgSVdfRVZFTlRfQ0FQQV9LXzEgKElXX0VWRU5UX0NBUEFfTUFTSygweDhCMkEpKQotCiAjZGVmaW5lIElXX0VWRU5UX0NBUEFfU0VUKGV2ZW50X2NhcGEsIGNtZCkgKGV2ZW50X2NhcGFbSVdfRVZFTlRfQ0FQQV9JTkRFWChjbWQpXSB8PSBJV19FVkVOVF9DQVBBX01BU0soY21kKSkKICNkZWZpbmUgSVdfRVZFTlRfQ0FQQV9TRVRfS0VSTkVMKGV2ZW50X2NhcGEpIHtldmVudF9jYXBhWzBdIHw9IElXX0VWRU5UX0NBUEFfS18wOyBldmVudF9jYXBhWzFdIHw9IElXX0VWRU5UX0NBUEFfS18xOyB9Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgaXdfcGFyYW0KIHsKICBfX3MzMiB2YWx1ZTsKICBfX3U4IGZpeGVkOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IGRpc2FibGVkOwogIF9fdTE2IGZsYWdzOwogfTsKLQogc3RydWN0IGl3X3BvaW50CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogewogIHZvaWQgX191c2VyICpwb2ludGVyOwogIF9fdTE2IGxlbmd0aDsKICBfX3UxNiBmbGFnczsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwotCiBzdHJ1Y3QgaXdfZnJlcQogewogIF9fczMyIG07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fczE2IGU7CiAgX191OCBpOwogIF9fdTggZmxhZ3M7CiB9OwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogc3RydWN0IGl3X3F1YWxpdHkKIHsKICBfX3U4IHF1YWw7CiAgX191OCBsZXZlbDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191OCBub2lzZTsKICBfX3U4IHVwZGF0ZWQ7CiB9OwotCiBzdHJ1Y3QgaXdfZGlzY2FyZGVkCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogewogIF9fdTMyIG53aWQ7CiAgX191MzIgY29kZTsKICBfX3UzMiBmcmFnbWVudDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgcmV0cmllczsKICBfX3UzMiBtaXNjOwogfTsKLQogc3RydWN0IGl3X21pc3NlZAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHsKICBfX3UzMiBiZWFjb247CiB9OwotCiBzdHJ1Y3QgaXdfdGhyc3B5CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogewogIHN0cnVjdCBzb2NrYWRkciBhZGRyOwogIHN0cnVjdCBpd19xdWFsaXR5IHF1YWw7CiAgc3RydWN0IGl3X3F1YWxpdHkgbG93OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgaXdfcXVhbGl0eSBoaWdoOwogfTsKLQogc3RydWN0IGl3X3NjYW5fcmVxCiB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTggc2Nhbl90eXBlOwogIF9fdTggZXNzaWRfbGVuOwogIF9fdTggbnVtX2NoYW5uZWxzOwogIF9fdTggZmxhZ3M7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCBzb2NrYWRkciBic3NpZDsKLQogIF9fdTggZXNzaWRbSVdfRVNTSURfTUFYX1NJWkVdOwotCiAgX191MzIgbWluX2NoYW5uZWxfdGltZTsKICBfX3UzMiBtYXhfY2hhbm5lbF90aW1lOwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCBpd19mcmVxIGNoYW5uZWxfbGlzdFtJV19NQVhfRlJFUVVFTkNJRVNdOwogfTsKLQogc3RydWN0IGl3X2VuY29kZV9leHQKIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgZXh0X2ZsYWdzOwogIF9fdTggdHhfc2VxW0lXX0VOQ09ERV9TRVFfTUFYX1NJWkVdOwogIF9fdTggcnhfc2VxW0lXX0VOQ09ERV9TRVFfTUFYX1NJWkVdOwogIHN0cnVjdCBzb2NrYWRkciBhZGRyOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UxNiBhbGc7CiAgX191MTYga2V5X2xlbjsKICBfX3U4IGtleVswXTsKIH07Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgaXdfbWxtZQogewogIF9fdTE2IGNtZDsKICBfX3UxNiByZWFzb25fY29kZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IHNvY2thZGRyIGFkZHI7CiB9OwotCiAjZGVmaW5lIElXX1BNS1NBX0FERCAxCiAjZGVmaW5lIElXX1BNS1NBX1JFTU9WRSAyCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJV19QTUtTQV9GTFVTSCAzCi0KICNkZWZpbmUgSVdfUE1LSURfTEVOIDE2Ci0KIHN0cnVjdCBpd19wbWtzYQogeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBjbWQ7CiAgc3RydWN0IHNvY2thZGRyIGJzc2lkOwogIF9fdTggcG1raWRbSVdfUE1LSURfTEVOXTsKIH07Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3QgaXdfbWljaGFlbG1pY2ZhaWx1cmUKIHsKICBfX3UzMiBmbGFnczsKICBzdHJ1Y3Qgc29ja2FkZHIgc3JjX2FkZHI7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTggdHNjW0lXX0VOQ09ERV9TRVFfTUFYX1NJWkVdOwogfTsKLQotI2RlZmluZSBJV19QTUtJRF9DQU5EX1BSRUFVVEggMHgwMDAwMDAwMSAgCisjZGVmaW5lIElXX1BNS0lEX0NBTkRfUFJFQVVUSCAweDAwMDAwMDAxCiBzdHJ1Y3QgaXdfcG1raWRfY2FuZAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHsKICBfX3UzMiBmbGFnczsKICBfX3UzMiBpbmRleDsKICBzdHJ1Y3Qgc29ja2FkZHIgYnNzaWQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKLQogc3RydWN0IGl3X3N0YXRpc3RpY3MKIHsKICBfX3UxNiBzdGF0dXM7Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IGl3X3F1YWxpdHkgcXVhbDsKICBzdHJ1Y3QgaXdfZGlzY2FyZGVkIGRpc2NhcmQ7CiAgc3RydWN0IGl3X21pc3NlZCBtaXNzOwogfTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHVuaW9uIGl3cmVxX2RhdGEKIHsKLQogIGNoYXIgbmFtZVtJRk5BTVNJWl07Ci0KICBzdHJ1Y3QgaXdfcG9pbnQgZXNzaWQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCBpd19wYXJhbSBud2lkOwogIHN0cnVjdCBpd19mcmVxIGZyZXE7Ci0KICBzdHJ1Y3QgaXdfcGFyYW0gc2VuczsKICBzdHJ1Y3QgaXdfcGFyYW0gYml0cmF0ZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IGl3X3BhcmFtIHR4cG93ZXI7CiAgc3RydWN0IGl3X3BhcmFtIHJ0czsKICBzdHJ1Y3QgaXdfcGFyYW0gZnJhZzsKICBfX3UzMiBtb2RlOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgaXdfcGFyYW0gcmV0cnk7Ci0KICBzdHJ1Y3QgaXdfcG9pbnQgZW5jb2Rpbmc7CiAgc3RydWN0IGl3X3BhcmFtIHBvd2VyOwogIHN0cnVjdCBpd19xdWFsaXR5IHF1YWw7Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IHNvY2thZGRyIGFwX2FkZHI7CiAgc3RydWN0IHNvY2thZGRyIGFkZHI7Ci0KICBzdHJ1Y3QgaXdfcGFyYW0gcGFyYW07CiAgc3RydWN0IGl3X3BvaW50IGRhdGE7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKLQogc3RydWN0IGl3cmVxCiB7CiAgdW5pb24KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgewogIGNoYXIgaWZybl9uYW1lW0lGTkFNU0laXTsKICB9IGlmcl9pZnJuOwotCiAgdW5pb24gaXdyZXFfZGF0YSB1OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07Ci0KIHN0cnVjdCBpd19yYW5nZQogewotCiAgX191MzIgdGhyb3VnaHB1dDsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBtaW5fbndpZDsKICBfX3UzMiBtYXhfbndpZDsKLQogIF9fdTE2IG9sZF9udW1fY2hhbm5lbHM7CiAgX191OCBvbGRfbnVtX2ZyZXF1ZW5jeTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBldmVudF9jYXBhWzZdOwotCiAgX19zMzIgc2Vuc2l0aXZpdHk7Ci0KICBzdHJ1Y3QgaXdfcXVhbGl0eSBtYXhfcXVhbDsKLQogIHN0cnVjdCBpd19xdWFsaXR5IGF2Z19xdWFsOwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTggbnVtX2JpdHJhdGVzOwogIF9fczMyIGJpdHJhdGVbSVdfTUFYX0JJVFJBVEVTXTsKLQogIF9fczMyIG1pbl9ydHM7CiAgX19zMzIgbWF4X3J0czsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3MzMiBtaW5fZnJhZzsKICBfX3MzMiBtYXhfZnJhZzsKLQogIF9fczMyIG1pbl9wbXA7CiAgX19zMzIgbWF4X3BtcDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX19zMzIgbWluX3BtdDsKICBfX3MzMiBtYXhfcG10OwogIF9fdTE2IHBtcF9mbGFnczsKICBfX3UxNiBwbXRfZmxhZ3M7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTE2IHBtX2NhcGE7Ci0KICBfX3UxNiBlbmNvZGluZ19zaXplW0lXX01BWF9FTkNPRElOR19TSVpFU107CiAgX191OCBudW1fZW5jb2Rpbmdfc2l6ZXM7CiAgX191OCBtYXhfZW5jb2RpbmdfdG9rZW5zOwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTggZW5jb2RpbmdfbG9naW5faW5kZXg7Ci0KICBfX3UxNiB0eHBvd2VyX2NhcGE7CiAgX191OCBudW1fdHhwb3dlcjsKICBfX3MzMiB0eHBvd2VyW0lXX01BWF9UWFBPV0VSXTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IHdlX3ZlcnNpb25fY29tcGlsZWQ7CiAgX191OCB3ZV92ZXJzaW9uX3NvdXJjZTsKLQogIF9fdTE2IHJldHJ5X2NhcGE7CiAgX191MTYgcmV0cnlfZmxhZ3M7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fdTE2IHJfdGltZV9mbGFnczsKICBfX3MzMiBtaW5fcmV0cnk7CiAgX19zMzIgbWF4X3JldHJ5OwogIF9fczMyIG1pbl9yX3RpbWU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIF9fczMyIG1heF9yX3RpbWU7Ci0KICBfX3UxNiBudW1fY2hhbm5lbHM7CiAgX191OCBudW1fZnJlcXVlbmN5OwogIHN0cnVjdCBpd19mcmVxIGZyZXFbSVdfTUFYX0ZSRVFVRU5DSUVTXTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBlbmNfY2FwYTsKIH07Ci0KIHN0cnVjdCBpd19wcml2X2FyZ3MKIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191MzIgY21kOwogIF9fdTE2IHNldF9hcmdzOwogIF9fdTE2IGdldF9hcmdzOwogIGNoYXIgbmFtZVtJRk5BTVNJWl07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKLQogc3RydWN0IGl3X2V2ZW50CiB7CiAgX191MTYgbGVuOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UxNiBjbWQ7CiAgdW5pb24gaXdyZXFfZGF0YSB1OwogfTsKLQogI2RlZmluZSBJV19FVl9MQ1BfTEVOIChzaXplb2Yoc3RydWN0IGl3X2V2ZW50KSAtIHNpemVvZih1bmlvbiBpd3JlcV9kYXRhKSkKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSVdfRVZfQ0hBUl9MRU4gKElXX0VWX0xDUF9MRU4gKyBJRk5BTVNJWikKICNkZWZpbmUgSVdfRVZfVUlOVF9MRU4gKElXX0VWX0xDUF9MRU4gKyBzaXplb2YoX191MzIpKQogI2RlZmluZSBJV19FVl9GUkVRX0xFTiAoSVdfRVZfTENQX0xFTiArIHNpemVvZihzdHJ1Y3QgaXdfZnJlcSkpCiAjZGVmaW5lIElXX0VWX1BBUkFNX0xFTiAoSVdfRVZfTENQX0xFTiArIHNpemVvZihzdHJ1Y3QgaXdfcGFyYW0pKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgSVdfRVZfQUREUl9MRU4gKElXX0VWX0xDUF9MRU4gKyBzaXplb2Yoc3RydWN0IHNvY2thZGRyKSkKICNkZWZpbmUgSVdfRVZfUVVBTF9MRU4gKElXX0VWX0xDUF9MRU4gKyBzaXplb2Yoc3RydWN0IGl3X3F1YWxpdHkpKQotCiAjZGVmaW5lIElXX0VWX1BPSU5UX09GRiAoKChjaGFyICopICYoKChzdHJ1Y3QgaXdfcG9pbnQgKikgTlVMTCktPmxlbmd0aCkpIC0gICAoY2hhciAqKSBOVUxMKQogI2RlZmluZSBJV19FVl9QT0lOVF9MRU4gKElXX0VWX0xDUF9MRU4gKyBzaXplb2Yoc3RydWN0IGl3X3BvaW50KSAtICAgSVdfRVZfUE9JTlRfT0ZGKQotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvd29ya3F1ZXVlLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvd29ya3F1ZXVlLmgKaW5kZXggMTJmYWIyYy4uNDFiYWVhMyAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3dvcmtxdWV1ZS5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC93b3JrcXVldWUuaApAQCAtNywzOSArNyw0MiBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX0xJTlVYX1dPUktRVUVVRV9ICiAjZGVmaW5lIF9MSU5VWF9XT1JLUVVFVUVfSAotCiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgotCiBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdDsKLQogc3RydWN0IHdvcmtfc3RydWN0IHsKICB1bnNpZ25lZCBsb25nIHBlbmRpbmc7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCBsaXN0X2hlYWQgZW50cnk7CiAgdm9pZCAoKmZ1bmMpKHZvaWQgKik7CiAgdm9pZCAqZGF0YTsKICB2b2lkICp3cV9kYXRhOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBzdHJ1Y3QgdGltZXJfbGlzdCB0aW1lcjsKIH07Ci0KIHN0cnVjdCBleGVjdXRlX3dvcmsgewogIHN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07Ci0KICNkZWZpbmUgX19XT1JLX0lOSVRJQUxJWkVSKG4sIGYsIGQpIHsgICAuZW50cnkgPSB7ICYobikuZW50cnksICYobikuZW50cnkgfSwgICAuZnVuYyA9IChmKSwgICAuZGF0YSA9IChkKSwgICAudGltZXIgPSBUSU1FUl9JTklUSUFMSVpFUihOVUxMLCAwLCAwKSwgICB9Ci0KICNkZWZpbmUgREVDTEFSRV9XT1JLKG4sIGYsIGQpICAgc3RydWN0IHdvcmtfc3RydWN0IG4gPSBfX1dPUktfSU5JVElBTElaRVIobiwgZiwgZCkKLQogI2RlZmluZSBQUkVQQVJFX1dPUksoX3dvcmssIF9mdW5jLCBfZGF0YSkgICBkbyB7ICAgKF93b3JrKS0+ZnVuYyA9IF9mdW5jOyAgIChfd29yayktPmRhdGEgPSBfZGF0YTsgICB9IHdoaWxlICgwKQotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBJTklUX1dPUksoX3dvcmssIF9mdW5jLCBfZGF0YSkgICBkbyB7ICAgSU5JVF9MSVNUX0hFQUQoJihfd29yayktPmVudHJ5KTsgICAoX3dvcmspLT5wZW5kaW5nID0gMDsgICBQUkVQQVJFX1dPUksoKF93b3JrKSwgKF9mdW5jKSwgKF9kYXRhKSk7ICAgaW5pdF90aW1lcigmKF93b3JrKS0+dGltZXIpOyAgIH0gd2hpbGUgKDApCi0KICNkZWZpbmUgY3JlYXRlX3dvcmtxdWV1ZShuYW1lKSBfX2NyZWF0ZV93b3JrcXVldWUoKG5hbWUpLCAwKQogI2RlZmluZSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZShuYW1lKSBfX2NyZWF0ZV93b3JrcXVldWUoKG5hbWUpLCAxKQotCiAjZW5kaWYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgveGF0dHIuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC94YXR0ci5oCmluZGV4IGY1ZjY0MGQuLmFkYjMyMzIgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC94YXR0ci5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC94YXR0ci5oCkBAIC03LDM3ICs3LDU4IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfTElOVVhfWEFUVFJfSAogI2RlZmluZSBfTElOVVhfWEFUVFJfSAotCi0jZGVmaW5lIFhBVFRSX0NSRUFURSAweDEgIAotI2RlZmluZSBYQVRUUl9SRVBMQUNFIDB4MiAgCi0KKyNkZWZpbmUgWEFUVFJfQ1JFQVRFIDB4MQorI2RlZmluZSBYQVRUUl9SRVBMQUNFIDB4MgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgWEFUVFJfT1MyX1BSRUZJWCAib3MyLiIKICNkZWZpbmUgWEFUVFJfT1MyX1BSRUZJWF9MRU4gKHNpemVvZiAoWEFUVFJfT1MyX1BSRUZJWCkgLSAxKQotCiAjZGVmaW5lIFhBVFRSX1NFQ1VSSVRZX1BSRUZJWCAic2VjdXJpdHkuIgogI2RlZmluZSBYQVRUUl9TRUNVUklUWV9QUkVGSVhfTEVOIChzaXplb2YgKFhBVFRSX1NFQ1VSSVRZX1BSRUZJWCkgLSAxKQotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBYQVRUUl9TWVNURU1fUFJFRklYICJzeXN0ZW0uIgogI2RlZmluZSBYQVRUUl9TWVNURU1fUFJFRklYX0xFTiAoc2l6ZW9mIChYQVRUUl9TWVNURU1fUFJFRklYKSAtIDEpCi0KICNkZWZpbmUgWEFUVFJfVFJVU1RFRF9QUkVGSVggInRydXN0ZWQuIgogI2RlZmluZSBYQVRUUl9UUlVTVEVEX1BSRUZJWF9MRU4gKHNpemVvZiAoWEFUVFJfVFJVU1RFRF9QUkVGSVgpIC0gMSkKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgWEFUVFJfVVNFUl9QUkVGSVggInVzZXIuIgogI2RlZmluZSBYQVRUUl9VU0VSX1BSRUZJWF9MRU4gKHNpemVvZiAoWEFUVFJfVVNFUl9QUkVGSVgpIC0gMSkKLQotc3RydWN0IHhhdHRyX2hhbmRsZXIgewotIGNoYXIgKnByZWZpeDsKLSBzaXplX3QgKCpsaXN0KShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjaGFyICpsaXN0LCBzaXplX3QgbGlzdF9zaXplLAotIGNvbnN0IGNoYXIgKm5hbWUsIHNpemVfdCBuYW1lX2xlbik7Ci0gaW50ICgqZ2V0KShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBjaGFyICpuYW1lLCB2b2lkICpidWZmZXIsCi0gc2l6ZV90IHNpemUpOwotIGludCAoKnNldCkoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqbmFtZSwgY29uc3Qgdm9pZCAqYnVmZmVyLAotIHNpemVfdCBzaXplLCBpbnQgZmxhZ3MpOwotfTsKLQorI2RlZmluZSBYQVRUUl9FVk1fU1VGRklYICJldm0iCisjZGVmaW5lIFhBVFRSX05BTUVfRVZNIFhBVFRSX1NFQ1VSSVRZX1BSRUZJWCBYQVRUUl9FVk1fU1VGRklYCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBYQVRUUl9TRUxJTlVYX1NVRkZJWCAic2VsaW51eCIKKyNkZWZpbmUgWEFUVFJfTkFNRV9TRUxJTlVYIFhBVFRSX1NFQ1VSSVRZX1BSRUZJWCBYQVRUUl9TRUxJTlVYX1NVRkZJWAorI2RlZmluZSBYQVRUUl9TTUFDS19TVUZGSVggIlNNQUNLNjQiCisjZGVmaW5lIFhBVFRSX1NNQUNLX0lQSU4gIlNNQUNLNjRJUElOIgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgWEFUVFJfU01BQ0tfSVBPVVQgIlNNQUNLNjRJUE9VVCIKKyNkZWZpbmUgWEFUVFJfU01BQ0tfRVhFQyAiU01BQ0s2NEVYRUMiCisjZGVmaW5lIFhBVFRSX1NNQUNLX1RSQU5TTVVURSAiU01BQ0s2NFRSQU5TTVVURSIKKyNkZWZpbmUgWEFUVFJfU01BQ0tfTU1BUCAiU01BQ0s2NE1NQVAiCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBYQVRUUl9OQU1FX1NNQUNLIFhBVFRSX1NFQ1VSSVRZX1BSRUZJWCBYQVRUUl9TTUFDS19TVUZGSVgKKyNkZWZpbmUgWEFUVFJfTkFNRV9TTUFDS0lQSU4gWEFUVFJfU0VDVVJJVFlfUFJFRklYIFhBVFRSX1NNQUNLX0lQSU4KKyNkZWZpbmUgWEFUVFJfTkFNRV9TTUFDS0lQT1VUIFhBVFRSX1NFQ1VSSVRZX1BSRUZJWCBYQVRUUl9TTUFDS19JUE9VVAorI2RlZmluZSBYQVRUUl9OQU1FX1NNQUNLRVhFQyBYQVRUUl9TRUNVUklUWV9QUkVGSVggWEFUVFJfU01BQ0tfRVhFQworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgWEFUVFJfTkFNRV9TTUFDS1RSQU5TTVVURSBYQVRUUl9TRUNVUklUWV9QUkVGSVggWEFUVFJfU01BQ0tfVFJBTlNNVVRFCisjZGVmaW5lIFhBVFRSX05BTUVfU01BQ0tNTUFQIFhBVFRSX1NFQ1VSSVRZX1BSRUZJWCBYQVRUUl9TTUFDS19NTUFQCisjZGVmaW5lIFhBVFRSX0NBUFNfU1VGRklYICJjYXBhYmlsaXR5IgorI2RlZmluZSBYQVRUUl9OQU1FX0NBUFMgWEFUVFJfU0VDVVJJVFlfUFJFRklYIFhBVFRSX0NBUFNfU1VGRklYCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBYQVRUUl9QT1NJWF9BQ0xfQUNDRVNTICJwb3NpeF9hY2xfYWNjZXNzIgorI2RlZmluZSBYQVRUUl9OQU1FX1BPU0lYX0FDTF9BQ0NFU1MgWEFUVFJfU1lTVEVNX1BSRUZJWCBYQVRUUl9QT1NJWF9BQ0xfQUNDRVNTCisjZGVmaW5lIFhBVFRSX1BPU0lYX0FDTF9ERUZBVUxUICJwb3NpeF9hY2xfZGVmYXVsdCIKKyNkZWZpbmUgWEFUVFJfTkFNRV9QT1NJWF9BQ0xfREVGQVVMVCBYQVRUUl9TWVNURU1fUFJFRklYIFhBVFRSX1BPU0lYX0FDTF9ERUZBVUxUCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvemNvbmYuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC96Y29uZi5oCmluZGV4IDE4ZWE3OGMuLjg2ZTVhNGEgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC96Y29uZi5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC96Y29uZi5oCkBAIC03LDMyICs3LDM4IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfWkNPTkZfSAogI2RlZmluZSBfWkNPTkZfSAotCiAjaWZuZGVmIE1BWF9NRU1fTEVWRUwKICNkZWZpbmUgTUFYX01FTV9MRVZFTCA4CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2VuZGlmCi0KICNpZm5kZWYgTUFYX1dCSVRTCi0jZGVmaW5lIE1BWF9XQklUUyAxNSAgCisjZGVmaW5lIE1BWF9XQklUUyAxNQogI2VuZGlmCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjaWZuZGVmIERFRl9XQklUUwogI2RlZmluZSBERUZfV0JJVFMgTUFYX1dCSVRTCiAjZW5kaWYKLQogI2lmIE1BWF9NRU1fTEVWRUwgPj0gOAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgREVGX01FTV9MRVZFTCA4CiAjZWxzZQogI2RlZmluZSBERUZfTUVNX0xFVkVMIE1BWF9NRU1fTEVWRUwKICNlbmRpZgotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogdHlwZWRlZiB1bnNpZ25lZCBjaGFyIEJ5dGU7CiB0eXBlZGVmIHVuc2lnbmVkIGludCB1SW50OwogdHlwZWRlZiB1bnNpZ25lZCBsb25nIHVMb25nOwogdHlwZWRlZiB2b2lkICp2b2lkcDsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3psaWIuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC96bGliLmgKaW5kZXggMDUyYWRmZS4uNWM2OTNmMiAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3psaWIuaAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvemxpYi5oCkBAIC03LDc0ICs3LDc3IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfWkxJQl9ICiAjZGVmaW5lIF9aTElCX0gKLQogI2luY2x1ZGUgPGxpbnV4L3pjb25mLmg+Ci0KIHN0cnVjdCBpbnRlcm5hbF9zdGF0ZTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHR5cGVkZWYgc3RydWN0IHpfc3RyZWFtX3MgewogIEJ5dGUgKm5leHRfaW47CiAgdUludCBhdmFpbF9pbjsKICB1TG9uZyB0b3RhbF9pbjsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBCeXRlICpuZXh0X291dDsKICB1SW50IGF2YWlsX291dDsKICB1TG9uZyB0b3RhbF9vdXQ7Ci0KICBjaGFyICptc2c7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHN0cnVjdCBpbnRlcm5hbF9zdGF0ZSAqc3RhdGU7Ci0KICB2b2lkICp3b3Jrc3BhY2U7Ci0KICBpbnQgZGF0YV90eXBlOwogIHVMb25nIGFkbGVyOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1TG9uZyByZXNlcnZlZDsKIH0gel9zdHJlYW07Ci0KIHR5cGVkZWYgel9zdHJlYW0gKnpfc3RyZWFtcDsKLQogI2RlZmluZSBaX05PX0ZMVVNIIDAKLSNkZWZpbmUgWl9QQVJUSUFMX0ZMVVNIIDEgIAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgWl9QQVJUSUFMX0ZMVVNIIDEKICNkZWZpbmUgWl9QQUNLRVRfRkxVU0ggMgogI2RlZmluZSBaX1NZTkNfRkxVU0ggMwogI2RlZmluZSBaX0ZVTExfRkxVU0ggNAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgWl9GSU5JU0ggNQotI2RlZmluZSBaX0JMT0NLIDYgIAotCisjZGVmaW5lIFpfQkxPQ0sgNgogI2RlZmluZSBaX09LIDAKICNkZWZpbmUgWl9TVFJFQU1fRU5EIDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFpfTkVFRF9ESUNUIDIKICNkZWZpbmUgWl9FUlJOTyAoLTEpCiAjZGVmaW5lIFpfU1RSRUFNX0VSUk9SICgtMikKICNkZWZpbmUgWl9EQVRBX0VSUk9SICgtMykKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFpfTUVNX0VSUk9SICgtNCkKICNkZWZpbmUgWl9CVUZfRVJST1IgKC01KQogI2RlZmluZSBaX1ZFUlNJT05fRVJST1IgKC02KQotCiAjZGVmaW5lIFpfTk9fQ09NUFJFU1NJT04gMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgWl9CRVNUX1NQRUVEIDEKICNkZWZpbmUgWl9CRVNUX0NPTVBSRVNTSU9OIDkKICNkZWZpbmUgWl9ERUZBVUxUX0NPTVBSRVNTSU9OICgtMSkKLQogI2RlZmluZSBaX0ZJTFRFUkVEIDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFpfSFVGRk1BTl9PTkxZIDIKICNkZWZpbmUgWl9ERUZBVUxUX1NUUkFURUdZIDAKLQogI2RlZmluZSBaX0JJTkFSWSAwCiAjZGVmaW5lIFpfQVNDSUkgMQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgWl9VTktOT1dOIDIKLQogI2RlZmluZSBaX0RFRkxBVEVEIDgKLQogI2RlZmluZSB6bGliX2RlZmxhdGVJbml0KHN0cm0sIGxldmVsKSAgIHpsaWJfZGVmbGF0ZUluaXQyKChzdHJtKSwgKGxldmVsKSwgWl9ERUZMQVRFRCwgTUFYX1dCSVRTLCAgIERFRl9NRU1fTEVWRUwsIFpfREVGQVVMVF9TVFJBVEVHWSkKICNkZWZpbmUgemxpYl9pbmZsYXRlSW5pdChzdHJtKSAgIHpsaWJfaW5mbGF0ZUluaXQyKChzdHJtKSwgREVGX1dCSVRTKQotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2lmICFkZWZpbmVkKF9aX1VUSUxfSCkgJiYgIWRlZmluZWQoTk9fRFVNTVlfREVDTCkKICBzdHJ1Y3QgaW50ZXJuYWxfc3RhdGUge2ludCBkdW1teTt9OwogI2VuZGlmCi0KICNlbmRpZgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC96b3Jyb19pZHMuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC96b3Jyb19pZHMuaAppbmRleCBlNmIxZDQ4Li5iMzVhMjJjIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvem9ycm9faWRzLmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3pvcnJvX2lkcy5oCkBAIC03LDU0MyArNyw1NDcgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjZGVmaW5lIFpPUlJPX01BTlVGX1BBQ0lGSUNfUEVSSVBIRVJBTFMgMHgwMEQzCiAjZGVmaW5lIFpPUlJPX1BST0RfUEFDSUZJQ19QRVJJUEhFUkFMU19TRV8yMDAwX0E1MDAgWk9SUk9fSUQoUEFDSUZJQ19QRVJJUEhFUkFMUywgMHgwMCwgMCkKICNkZWZpbmUgWk9SUk9fUFJPRF9QQUNJRklDX1BFUklQSEVSQUxTX1NDU0kgWk9SUk9fSUQoUEFDSUZJQ19QRVJJUEhFUkFMUywgMHgwQSwgMCkKLQogI2RlZmluZSBaT1JST19NQU5VRl9NQUNST1NZU1RFTVNfVVNBXzIgMHgwMTAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBaT1JST19QUk9EX01BQ1JPU1lTVEVNU19XQVJQX0VOR0lORSBaT1JST19JRChNQUNST1NZU1RFTVNfVVNBXzIsIDB4MTMsIDApCi0KICNkZWZpbmUgWk9SUk9fTUFOVUZfS1VQS0VfMSAweDAwREQKICNkZWZpbmUgWk9SUk9fUFJPRF9LVVBLRV9HT0xFTV9SQU1fQk9YXzJNQiBaT1JST19JRChLVVBLRV8xLCAweDAwLCAwKQotCiAjZGVmaW5lIFpPUlJPX01BTlVGX01FTVBISVMgMHgwMTAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBaT1JST19QUk9EX01FTVBISVNfU1RPUk1CUklOR0VSIFpPUlJPX0lEKE1FTVBISVMsIDB4MDAsIDApCi0KICNkZWZpbmUgWk9SUk9fTUFOVUZfM19TVEFURSAweDAyMDAKICNkZWZpbmUgWk9SUk9fUFJPRF8zX1NUQVRFX01FR0FNSVhfMjAwMCBaT1JST19JRCgzX1NUQVRFLCAweDAyLCAwKQotCiAjZGVmaW5lIFpPUlJPX01BTlVGX0NPTU1PRE9SRV9CUkFVTlNDSFdFSUcgMHgwMjAxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBaT1JST19QUk9EX0NCTV9BMjA4OF9BMjI4NiBaT1JST19JRChDT01NT0RPUkVfQlJBVU5TQ0hXRUlHLCAweDAxLCAwKQogI2RlZmluZSBaT1JST19QUk9EX0NCTV9BMjI4NiBaT1JST19JRChDT01NT0RPUkVfQlJBVU5TQ0hXRUlHLCAweDAyLCAwKQogI2RlZmluZSBaT1JST19QUk9EX0NCTV9BNDA5MV8xIFpPUlJPX0lEKENPTU1PRE9SRV9CUkFVTlNDSFdFSUcsIDB4NTQsIDApCiAjZGVmaW5lIFpPUlJPX1BST0RfQ0JNX0EyMzg2U1hfMSBaT1JST19JRChDT01NT0RPUkVfQlJBVU5TQ0hXRUlHLCAweDY3LCAwKQotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBaT1JST19NQU5VRl9DT01NT0RPUkVfV0VTVF9DSEVTVEVSXzEgMHgwMjAyCiAjZGVmaW5lIFpPUlJPX1BST0RfQ0JNX0EyMDkwQSBaT1JST19JRChDT01NT0RPUkVfV0VTVF9DSEVTVEVSXzEsIDB4MDEsIDApCiAjZGVmaW5lIFpPUlJPX1BST0RfQ0JNX0E1OTBfQTIwOTFfMSBaT1JST19JRChDT01NT0RPUkVfV0VTVF9DSEVTVEVSXzEsIDB4MDIsIDApCiAjZGVmaW5lIFpPUlJPX1BST0RfQ0JNX0E1OTBfQTIwOTFfMiBaT1JST19JRChDT01NT0RPUkVfV0VTVF9DSEVTVEVSXzEsIDB4MDMsIDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBaT1JST19QUk9EX0NCTV9BMjA5MEIgWk9SUk9fSUQoQ09NTU9ET1JFX1dFU1RfQ0hFU1RFUl8xLCAweDA0LCAwKQogI2RlZmluZSBaT1JST19QUk9EX0NCTV9BMjA2MCBaT1JST19JRChDT01NT0RPUkVfV0VTVF9DSEVTVEVSXzEsIDB4MDksIDApCiAjZGVmaW5lIFpPUlJPX1BST0RfQ0JNX0E1OTBfQTIwNTJfQTIwNThfQTIwOTEgWk9SUk9fSUQoQ09NTU9ET1JFX1dFU1RfQ0hFU1RFUl8xLCAweDBBLCAwKQogI2RlZmluZSBaT1JST19QUk9EX0NCTV9BNTYwX1JBTSBaT1JST19JRChDT01NT0RPUkVfV0VTVF9DSEVTVEVSXzEsIDB4MjAsIDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBaT1JST19QUk9EX0NCTV9BMjIzMl9QUk9UT1RZUEUgWk9SUk9fSUQoQ09NTU9ET1JFX1dFU1RfQ0hFU1RFUl8xLCAweDQ1LCAwKQogI2RlZmluZSBaT1JST19QUk9EX0NCTV9BMjIzMiBaT1JST19JRChDT01NT0RPUkVfV0VTVF9DSEVTVEVSXzEsIDB4NDYsIDApCiAjZGVmaW5lIFpPUlJPX1BST0RfQ0JNX0EyNjIwIFpPUlJPX0lEKENPTU1PRE9SRV9XRVNUX0NIRVNURVJfMSwgMHg1MCwgMCkKICNkZWZpbmUgWk9SUk9fUFJPRF9DQk1fQTI2MzAgWk9SUk9fSUQoQ09NTU9ET1JFX1dFU1RfQ0hFU1RFUl8xLCAweDUxLCAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgWk9SUk9fUFJPRF9DQk1fQTQwOTFfMiBaT1JST19JRChDT01NT0RPUkVfV0VTVF9DSEVTVEVSXzEsIDB4NTQsIDApCiAjZGVmaW5lIFpPUlJPX1BST0RfQ0JNX0EyMDY1XzEgWk9SUk9fSUQoQ09NTU9ET1JFX1dFU1RfQ0hFU1RFUl8xLCAweDVBLCAwKQogI2RlZmluZSBaT1JST19QUk9EX0NCTV9ST01VTEFUT1IgWk9SUk9fSUQoQ09NTU9ET1JFX1dFU1RfQ0hFU1RFUl8xLCAweDYwLCAwKQogI2RlZmluZSBaT1JST19QUk9EX0NCTV9BMzAwMF9URVNUX0ZJWFRVUkUgWk9SUk9fSUQoQ09NTU9ET1JFX1dFU1RfQ0hFU1RFUl8xLCAweDYxLCAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgWk9SUk9fUFJPRF9DQk1fQTIzODZTWF8yIFpPUlJPX0lEKENPTU1PRE9SRV9XRVNUX0NIRVNURVJfMSwgMHg2NywgMCkKICNkZWZpbmUgWk9SUk9fUFJPRF9DQk1fQTIwNjVfMiBaT1JST19JRChDT01NT0RPUkVfV0VTVF9DSEVTVEVSXzEsIDB4NzAsIDApCi0KICNkZWZpbmUgWk9SUk9fTUFOVUZfQ09NTU9ET1JFX1dFU1RfQ0hFU1RFUl8yIDB4MDIwMwogI2RlZmluZSBaT1JST19QUk9EX0NCTV9BMjA5MEFfQ00gWk9SUk9fSUQoQ09NTU9ET1JFX1dFU1RfQ0hFU1RFUl8yLCAweDAzLCAwKQotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBaT1JST19NQU5VRl9QUk9HUkVTU0lWRV9QRVJJUEhFUkFMU19BTkRfU1lTVEVNU18yIDB4MDJGNAogI2RlZmluZSBaT1JST19QUk9EX1BQU19FWFA4MDAwIFpPUlJPX0lEKFBST0dSRVNTSVZFX1BFUklQSEVSQUxTX0FORF9TWVNURU1TXzIsIDB4MDIsIDApCi0KICNkZWZpbmUgWk9SUk9fTUFOVUZfS09MRkZfQ09NUFVURVJfU1VQUExJRVMgMHgwMkZGCiAjZGVmaW5lIFpPUlJPX1BST0RfS0NTX1BPV0VSX1BDX0JPQVJEIFpPUlJPX0lEKEtPTEZGX0NPTVBVVEVSX1NVUFBMSUVTLCAweDAwLCAwKQotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBaT1JST19NQU5VRl9DQVJEQ09fMSAweDAzRUMKICNkZWZpbmUgWk9SUk9fUFJPRF9DQVJEQ09fS1JPTk9TXzIwMDBfMSBaT1JST19JRChDQVJEQ09fMSwgMHgwNCwgMCkKICNkZWZpbmUgWk9SUk9fUFJPRF9DQVJEQ09fQTEwMDBfMSBaT1JST19JRChDQVJEQ09fMSwgMHgwQywgMCkKICNkZWZpbmUgWk9SUk9fUFJPRF9DQVJEQ09fRVNDT1JUIFpPUlJPX0lEKENBUkRDT18xLCAweDBFLCAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgWk9SUk9fUFJPRF9DQVJEQ09fQTI0MTAgWk9SUk9fSUQoQ0FSRENPXzEsIDB4RjUsIDApCi0KICNkZWZpbmUgWk9SUk9fTUFOVUZfQV9TUVVBUkVEIDB4MDNFRAogI2RlZmluZSBaT1JST19QUk9EX0FfU1FVQVJFRF9MSVZFXzIwMDAgWk9SUk9fSUQoQV9TUVVBUkVELCAweDAxLCAwKQotCiAjZGVmaW5lIFpPUlJPX01BTlVGX0NPTVNQRUNfQ09NTVVOSUNBVElPTlMgMHgwM0VFCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBaT1JST19QUk9EX0NPTVNQRUNfQ09NTVVOSUNBVElPTlNfQVgyMDAwIFpPUlJPX0lEKENPTVNQRUNfQ09NTVVOSUNBVElPTlMsIDB4MDEsIDApCi0KICNkZWZpbmUgWk9SUk9fTUFOVUZfQU5BS0lOX1JFU0VBUkNIIDB4MDNGMQogI2RlZmluZSBaT1JST19QUk9EX0FOQUtJTl9SRVNFQVJDSF9FQVNZTCBaT1JST19JRChBTkFLSU5fUkVTRUFSQ0gsIDB4MDEsIDApCi0KICNkZWZpbmUgWk9SUk9fTUFOVUZfTUlDUk9CT1RJQ1MgMHgwM0YyCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBaT1JST19QUk9EX01JQ1JPQk9USUNTX1NUQVJCT0FSRF9JSSBaT1JST19JRChNSUNST0JPVElDUywgMHgwMCwgMCkKICNkZWZpbmUgWk9SUk9fUFJPRF9NSUNST0JPVElDU19TVEFSRFJJVkUgWk9SUk9fSUQoTUlDUk9CT1RJQ1MsIDB4MDIsIDApCiAjZGVmaW5lIFpPUlJPX1BST0RfTUlDUk9CT1RJQ1NfOF9VUF9BIFpPUlJPX0lEKE1JQ1JPQk9USUNTLCAweDAzLCAwKQogI2RlZmluZSBaT1JST19QUk9EX01JQ1JPQk9USUNTXzhfVVBfWiBaT1JST19JRChNSUNST0JPVElDUywgMHgwNCwgMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFpPUlJPX1BST0RfTUlDUk9CT1RJQ1NfREVMVEFfUkFNIFpPUlJPX0lEKE1JQ1JPQk9USUNTLCAweDIwLCAwKQogI2RlZmluZSBaT1JST19QUk9EX01JQ1JPQk9USUNTXzhfU1RBUl9SQU0gWk9SUk9fSUQoTUlDUk9CT1RJQ1MsIDB4NDAsIDApCiAjZGVmaW5lIFpPUlJPX1BST0RfTUlDUk9CT1RJQ1NfOF9TVEFSIFpPUlJPX0lEKE1JQ1JPQk9USUNTLCAweDQxLCAwKQogI2RlZmluZSBaT1JST19QUk9EX01JQ1JPQk9USUNTX1ZYTF9SQU1fMzIgWk9SUk9fSUQoTUlDUk9CT1RJQ1MsIDB4NDQsIDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBaT1JST19QUk9EX01JQ1JPQk9USUNTX1ZYTF82ODAzMCBaT1JST19JRChNSUNST0JPVElDUywgMHg0NSwgMCkKICNkZWZpbmUgWk9SUk9fUFJPRF9NSUNST0JPVElDU19ERUxUQSBaT1JST19JRChNSUNST0JPVElDUywgMHg2MCwgMCkKICNkZWZpbmUgWk9SUk9fUFJPRF9NSUNST0JPVElDU19NQlhfMTIwMF8xMjAwWl9SQU0gWk9SUk9fSUQoTUlDUk9CT1RJQ1MsIDB4ODEsIDApCiAjZGVmaW5lIFpPUlJPX1BST0RfTUlDUk9CT1RJQ1NfSEFSREZSQU1FXzIwMDBfMSBaT1JST19JRChNSUNST0JPVElDUywgMHg5NiwgMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFpPUlJPX1BST0RfTUlDUk9CT1RJQ1NfSEFSREZSQU1FXzIwMDBfMiBaT1JST19JRChNSUNST0JPVElDUywgMHg5RSwgMCkKICNkZWZpbmUgWk9SUk9fUFJPRF9NSUNST0JPVElDU19NQlhfMTIwMF8xMjAwWiBaT1JST19JRChNSUNST0JPVElDUywgMHhDMSwgMCkKLQogI2RlZmluZSBaT1JST19NQU5VRl9BQ0NFU1NfQVNTT0NJQVRFU19BTEVHUkEgMHgwM0Y0Ci0KICNkZWZpbmUgWk9SUk9fTUFOVUZfRVhQQU5TSU9OX1RFQ0hOT0xPR0lFUyAweDAzRjYKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgWk9SUk9fTUFOVUZfQVNERyAweDAzRkYKICNkZWZpbmUgWk9SUk9fUFJPRF9BU0RHX01FTU9SWV8xIFpPUlJPX0lEKEFTREcsIDB4MDEsIDApCiAjZGVmaW5lIFpPUlJPX1BST0RfQVNER19NRU1PUllfMiBaT1JST19JRChBU0RHLCAweDAyLCAwKQogI2RlZmluZSBaT1JST19QUk9EX0FTREdfRUI5MjBfTEFOX1JPVkVSIFpPUlJPX0lEKEFTREcsIDB4RkUsIDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBaT1JST19QUk9EX0FTREdfR1BJQl9EVUFMSUVFRTQ4OF9UV0lOX1ggWk9SUk9fSUQoQVNERywgMHhGRiwgMCkKLQogI2RlZmluZSBaT1JST19NQU5VRl9JTVRST05JQ1NfMSAweDA0MDQKICNkZWZpbmUgWk9SUk9fUFJPRF9JTVRST05JQ1NfSFVSUklDQU5FXzI4MDBfMSBaT1JST19JRChJTVRST05JQ1NfMSwgMHgzOSwgMCkKICNkZWZpbmUgWk9SUk9fUFJPRF9JTVRST05JQ1NfSFVSUklDQU5FXzI4MDBfMiBaT1JST19JRChJTVRST05JQ1NfMSwgMHg1NywgMCkKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgWk9SUk9fTUFOVUZfQ0JNX1VOSVZFUlNJVFlfT0ZfTE9XRUxMIDB4MDQwNgogI2RlZmluZSBaT1JST19QUk9EX0NCTV9BMjQxMCBaT1JST19JRChDQk1fVU5JVkVSU0lUWV9PRl9MT1dFTEwsIDB4MDAsIDApCi0KICNkZWZpbmUgWk9SUk9fTUFOVUZfQU1FUklTVEFSIDB4MDQxRAogI2RlZmluZSBaT1JST19QUk9EX0FNRVJJU1RBUl9BMjA2NSBaT1JST19JRChBTUVSSVNUQVIsIDB4MDEsIDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBaT1JST19QUk9EX0FNRVJJU1RBUl9BNTYwIFpPUlJPX0lEKEFNRVJJU1RBUiwgMHgwOSwgMCkKICNkZWZpbmUgWk9SUk9fUFJPRF9BTUVSSVNUQVJfQTQwNjYgWk9SUk9fSUQoQU1FUklTVEFSLCAweDBBLCAwKQotCiAjZGVmaW5lIFpPUlJPX01BTlVGX1NVUFJBIDB4MDQyMAogI2RlZmluZSBaT1JST19QUk9EX1NVUFJBX1NVUFJBRFJJVkVfNHg0IFpPUlJPX0lEKFNVUFJBLCAweDAxLCAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgWk9SUk9fUFJPRF9TVVBSQV8xMDAwX1JBTSBaT1JST19JRChTVVBSQSwgMHgwMiwgMCkKICNkZWZpbmUgWk9SUk9fUFJPRF9TVVBSQV8yMDAwX0RNQSBaT1JST19JRChTVVBSQSwgMHgwMywgMCkKICNkZWZpbmUgWk9SUk9fUFJPRF9TVVBSQV81MDAgWk9SUk9fSUQoU1VQUkEsIDB4MDUsIDApCiAjZGVmaW5lIFpPUlJPX1BST0RfU1VQUkFfNTAwX1NDU0kgWk9SUk9fSUQoU1VQUkEsIDB4MDgsIDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBaT1JST19QUk9EX1NVUFJBXzUwMFhQXzIwMDBfUkFNIFpPUlJPX0lEKFNVUFJBLCAweDA5LCAwKQogI2RlZmluZSBaT1JST19QUk9EX1NVUFJBXzUwMFJYXzIwMDBfUkFNIFpPUlJPX0lEKFNVUFJBLCAweDBBLCAwKQogI2RlZmluZSBaT1JST19QUk9EX1NVUFJBXzI0MDBaSSBaT1JST19JRChTVVBSQSwgMHgwQiwgMCkKICNkZWZpbmUgWk9SUk9fUFJPRF9TVVBSQV81MDBYUF9TVVBSQURSSVZFX1dPUkRTWU5DIFpPUlJPX0lEKFNVUFJBLCAweDBDLCAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgWk9SUk9fUFJPRF9TVVBSQV9TVVBSQURSSVZFX1dPUkRTWU5DX0lJIFpPUlJPX0lEKFNVUFJBLCAweDBELCAwKQogI2RlZmluZSBaT1JST19QUk9EX1NVUFJBXzI0MDBaSVBMVVMgWk9SUk9fSUQoU1VQUkEsIDB4MTAsIDApCi0KICNkZWZpbmUgWk9SUk9fTUFOVUZfQ09NUFVURVJfU1lTVEVNU19BU1NPQ0lBVEVTIDB4MDQyMgogI2RlZmluZSBaT1JST19QUk9EX0NTQV9NQUdOVU0gWk9SUk9fSUQoQ09NUFVURVJfU1lTVEVNU19BU1NPQ0lBVEVTLCAweDExLCAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgWk9SUk9fUFJPRF9DU0FfMTJfR0FVR0UgWk9SUk9fSUQoQ09NUFVURVJfU1lTVEVNU19BU1NPQ0lBVEVTLCAweDE1LCAwKQotCiAjZGVmaW5lIFpPUlJPX01BTlVGX01BUkNfTUlDSEFFTF9HUk9USCAweDA0MzkKLQogI2RlZmluZSBaT1JST19NQU5VRl9NX1RFQ0ggMHgwNTAyCiAjZGVmaW5lIFpPUlJPX1BST0RfTVRFQ19BVDUwMF8xIFpPUlJPX0lEKE1fVEVDSCwgMHgwMywgMCkKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgWk9SUk9fTUFOVUZfR1JFQVRfVkFMTEVZX1BST0RVQ1RTXzEgMHgwNkUxCiAjZGVmaW5lIFpPUlJPX1BST0RfR1ZQX0lNUEFDVF9TRVJJRVNfSSBaT1JST19JRChHUkVBVF9WQUxMRVlfUFJPRFVDVFNfMSwgMHgwOCwgMCkKLQogI2RlZmluZSBaT1JST19NQU5VRl9CWVRFQk9YIDB4MDdEQQogI2RlZmluZSBaT1JST19QUk9EX0JZVEVCT1hfQTUwMCBaT1JST19JRChCWVRFQk9YLCAweDAwLCAwKQotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBaT1JST19NQU5VRl9ES0JfUE9XRVJfQ09NUFVUSU5HIDB4MDdEQwogI2RlZmluZSBaT1JST19QUk9EX0RLQl9QT1dFUl9DT01QVVRJTkdfU0VDVVJFS0VZIFpPUlJPX0lEKERLQl9QT1dFUl9DT01QVVRJTkcsIDB4MDksIDApCiAjZGVmaW5lIFpPUlJPX1BST0RfREtCX1BPV0VSX0NPTVBVVElOR19ES01fMzEyOCBaT1JST19JRChES0JfUE9XRVJfQ09NUFVUSU5HLCAweDBFLCAwKQogI2RlZmluZSBaT1JST19QUk9EX0RLQl9QT1dFUl9DT01QVVRJTkdfUkFQSURfRklSRSBaT1JST19JRChES0JfUE9XRVJfQ09NUFVUSU5HLCAweDBGLCAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgWk9SUk9fUFJPRF9ES0JfUE9XRVJfQ09NUFVUSU5HX0RLTV8xMjAyIFpPUlJPX0lEKERLQl9QT1dFUl9DT01QVVRJTkcsIDB4MTAsIDApCiAjZGVmaW5lIFpPUlJPX1BST0RfREtCX1BPV0VSX0NPTVBVVElOR19DT0JSQV9WSVBFUl9JSV82OEVDMDMwIFpPUlJPX0lEKERLQl9QT1dFUl9DT01QVVRJTkcsIDB4MTIsIDApCiAjZGVmaW5lIFpPUlJPX1BST0RfREtCX1BPV0VSX0NPTVBVVElOR19XSUxERklSRV8wNjBfMSBaT1JST19JRChES0JfUE9XRVJfQ09NUFVUSU5HLCAweDE3LCAwKQogI2RlZmluZSBaT1JST19QUk9EX0RLQl9QT1dFUl9DT01QVVRJTkdfV0lMREZJUkVfMDYwXzIgWk9SUk9fSUQoREtCX1BPV0VSX0NPTVBVVElORywgMHhGRiwgMCkKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgWk9SUk9fTUFOVUZfR1JFQVRfVkFMTEVZX1BST0RVQ1RTXzIgMHgwN0UxCiAjZGVmaW5lIFpPUlJPX1BST0RfR1ZQX0lNUEFDVF9TRVJJRVNfSV80SyBaT1JST19JRChHUkVBVF9WQUxMRVlfUFJPRFVDVFNfMiwgMHgwMSwgMCkKICNkZWZpbmUgWk9SUk9fUFJPRF9HVlBfSU1QQUNUX1NFUklFU19JXzE2S18yIFpPUlJPX0lEKEdSRUFUX1ZBTExFWV9QUk9EVUNUU18yLCAweDAyLCAwKQogI2RlZmluZSBaT1JST19QUk9EX0dWUF9JTVBBQ1RfU0VSSUVTX0lfMTZLXzMgWk9SUk9fSUQoR1JFQVRfVkFMTEVZX1BST0RVQ1RTXzIsIDB4MDMsIDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBaT1JST19QUk9EX0dWUF9JTVBBQ1RfMzAwMV9JREVfMSBaT1JST19JRChHUkVBVF9WQUxMRVlfUFJPRFVDVFNfMiwgMHgwOCwgMCkKICNkZWZpbmUgWk9SUk9fUFJPRF9HVlBfSU1QQUNUXzMwMDFfUkFNIFpPUlJPX0lEKEdSRUFUX1ZBTExFWV9QUk9EVUNUU18yLCAweDA5LCAwKQogI2RlZmluZSBaT1JST19QUk9EX0dWUF9JTVBBQ1RfU0VSSUVTX0lJX1JBTV8xIFpPUlJPX0lEKEdSRUFUX1ZBTExFWV9QUk9EVUNUU18yLCAweDBBLCAwKQogI2RlZmluZSBaT1JST19QUk9EX0dWUF9FUENfQkFTRSBaT1JST19JRChHUkVBVF9WQUxMRVlfUFJPRFVDVFNfMiwgMHgwQiwgMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFpPUlJPX1BST0RfR1ZQX0dGT1JDRV8wNDBfMSBaT1JST19JRChHUkVBVF9WQUxMRVlfUFJPRFVDVFNfMiwgMHgwQiwgMHgyMCkKICNkZWZpbmUgWk9SUk9fUFJPRF9HVlBfR0ZPUkNFXzA0MF9TQ1NJXzEgWk9SUk9fSUQoR1JFQVRfVkFMTEVZX1BST0RVQ1RTXzIsIDB4MEIsIDB4MzApCiAjZGVmaW5lIFpPUlJPX1BST0RfR1ZQX0ExMjkxIFpPUlJPX0lEKEdSRUFUX1ZBTExFWV9QUk9EVUNUU18yLCAweDBCLCAweDQwKQogI2RlZmluZSBaT1JST19QUk9EX0dWUF9DT01CT18wMzBfUjQgWk9SUk9fSUQoR1JFQVRfVkFMTEVZX1BST0RVQ1RTXzIsIDB4MEIsIDB4NjApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBaT1JST19QUk9EX0dWUF9DT01CT18wMzBfUjRfU0NTSSBaT1JST19JRChHUkVBVF9WQUxMRVlfUFJPRFVDVFNfMiwgMHgwQiwgMHg3MCkKICNkZWZpbmUgWk9SUk9fUFJPRF9HVlBfUEhPTkVQQUsgWk9SUk9fSUQoR1JFQVRfVkFMTEVZX1BST0RVQ1RTXzIsIDB4MEIsIDB4NzgpCiAjZGVmaW5lIFpPUlJPX1BST0RfR1ZQX0lPX0VYVEVOREVSIFpPUlJPX0lEKEdSRUFUX1ZBTExFWV9QUk9EVUNUU18yLCAweDBCLCAweDk4KQogI2RlZmluZSBaT1JST19QUk9EX0dWUF9HRk9SQ0VfMDMwIFpPUlJPX0lEKEdSRUFUX1ZBTExFWV9QUk9EVUNUU18yLCAweDBCLCAweGEwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgWk9SUk9fUFJPRF9HVlBfR0ZPUkNFXzAzMF9TQ1NJIFpPUlJPX0lEKEdSRUFUX1ZBTExFWV9QUk9EVUNUU18yLCAweDBCLCAweGIwKQogI2RlZmluZSBaT1JST19QUk9EX0dWUF9BNTMwIFpPUlJPX0lEKEdSRUFUX1ZBTExFWV9QUk9EVUNUU18yLCAweDBCLCAweGMwKQogI2RlZmluZSBaT1JST19QUk9EX0dWUF9BNTMwX1NDU0kgWk9SUk9fSUQoR1JFQVRfVkFMTEVZX1BST0RVQ1RTXzIsIDB4MEIsIDB4ZDApCiAjZGVmaW5lIFpPUlJPX1BST0RfR1ZQX0NPTUJPXzAzMF9SMyBaT1JST19JRChHUkVBVF9WQUxMRVlfUFJPRFVDVFNfMiwgMHgwQiwgMHhlMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFpPUlJPX1BST0RfR1ZQX0NPTUJPXzAzMF9SM19TQ1NJIFpPUlJPX0lEKEdSRUFUX1ZBTExFWV9QUk9EVUNUU18yLCAweDBCLCAweGYwKQogI2RlZmluZSBaT1JST19QUk9EX0dWUF9TRVJJRVNfSUkgWk9SUk9fSUQoR1JFQVRfVkFMTEVZX1BST0RVQ1RTXzIsIDB4MEIsIDB4ZjgpCiAjZGVmaW5lIFpPUlJPX1BST0RfR1ZQX0lNUEFDVF8zMDAxX0lERV8yIFpPUlJPX0lEKEdSRUFUX1ZBTExFWV9QUk9EVUNUU18yLCAweDBELCAwKQotCiAjZGVmaW5lIFpPUlJPX1BST0RfR1ZQX0dGT1JDRV8wNDBfMDYwIFpPUlJPX0lEKEdSRUFUX1ZBTExFWV9QUk9EVUNUU18yLCAweDE2LCAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgWk9SUk9fUFJPRF9HVlBfSU1QQUNUX1ZJU0lPTl8yNCBaT1JST19JRChHUkVBVF9WQUxMRVlfUFJPRFVDVFNfMiwgMHgyMCwgMCkKICNkZWZpbmUgWk9SUk9fUFJPRF9HVlBfR0ZPUkNFXzA0MF8yIFpPUlJPX0lEKEdSRUFUX1ZBTExFWV9QUk9EVUNUU18yLCAweEZGLCAwKQotCiAjZGVmaW5lIFpPUlJPX01BTlVGX0NBTElGT1JOSUFfQUNDRVNTX1NZTkVSR1kgMHgwN0U1CiAjZGVmaW5lIFpPUlJPX1BST0RfQ0FMSUZPUk5JQV9BQ0NFU1NfU1lORVJHWV9NQUxJQlUgWk9SUk9fSUQoQ0FMSUZPUk5JQV9BQ0NFU1NfU1lORVJHWSwgMHgwMSwgMCkKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgWk9SUk9fTUFOVUZfWEVURUMgMHgwN0U2CiAjZGVmaW5lIFpPUlJPX1BST0RfWEVURUNfRkFTVENBUkQgWk9SUk9fSUQoWEVURUMsIDB4MDEsIDApCiAjZGVmaW5lIFpPUlJPX1BST0RfWEVURUNfRkFTVENBUkRfUkFNIFpPUlJPX0lEKFhFVEVDLCAweDAyLCAwKQogI2RlZmluZSBaT1JST19QUk9EX1hFVEVDX0ZBU1RDQVJEX1BMVVMgWk9SUk9fSUQoWEVURUMsIDB4MDMsIDApCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFpPUlJPX01BTlVGX1BST0dSRVNTSVZFX1BFUklQSEVSQUxTX0FORF9TWVNURU1TIDB4MDdFQQogI2RlZmluZSBaT1JST19QUk9EX1BQU19NRVJDVVJZIFpPUlJPX0lEKFBST0dSRVNTSVZFX1BFUklQSEVSQUxTX0FORF9TWVNURU1TLCAweDAwLCAwKQogI2RlZmluZSBaT1JST19QUk9EX1BQU19BMzAwMF82ODA0MCBaT1JST19JRChQUk9HUkVTU0lWRV9QRVJJUEhFUkFMU19BTkRfU1lTVEVNUywgMHgwMSwgMCkKICNkZWZpbmUgWk9SUk9fUFJPRF9QUFNfQTIwMDBfNjgwNDAgWk9SUk9fSUQoUFJPR1JFU1NJVkVfUEVSSVBIRVJBTFNfQU5EX1NZU1RFTVMsIDB4NjksIDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBaT1JST19QUk9EX1BQU19aRVVTIFpPUlJPX0lEKFBST0dSRVNTSVZFX1BFUklQSEVSQUxTX0FORF9TWVNURU1TLCAweDk2LCAwKQogI2RlZmluZSBaT1JST19QUk9EX1BQU19BNTAwXzY4MDQwIFpPUlJPX0lEKFBST0dSRVNTSVZFX1BFUklQSEVSQUxTX0FORF9TWVNURU1TLCAweEJCLCAwKQotCiAjZGVmaW5lIFpPUlJPX01BTlVGX1hFQkVDIDB4MDdFQwotCiAjZGVmaW5lIFpPUlJPX01BTlVGX1NQSVJJVF9URUNITk9MT0dZIDB4MDdGMgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgWk9SUk9fUFJPRF9TUElSSVRfVEVDSE5PTE9HWV9JTlNJREVSX0lOMTAwMCBaT1JST19JRChTUElSSVRfVEVDSE5PTE9HWSwgMHgwMSwgMCkKICNkZWZpbmUgWk9SUk9fUFJPRF9TUElSSVRfVEVDSE5PTE9HWV9JTlNJREVSX0lONTAwIFpPUlJPX0lEKFNQSVJJVF9URUNITk9MT0dZLCAweDAyLCAwKQogI2RlZmluZSBaT1JST19QUk9EX1NQSVJJVF9URUNITk9MT0dZX1NJTjUwMCBaT1JST19JRChTUElSSVRfVEVDSE5PTE9HWSwgMHgwMywgMCkKICNkZWZpbmUgWk9SUk9fUFJPRF9TUElSSVRfVEVDSE5PTE9HWV9IREFfNTA2IFpPUlJPX0lEKFNQSVJJVF9URUNITk9MT0dZLCAweDA0LCAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgWk9SUk9fUFJPRF9TUElSSVRfVEVDSE5PTE9HWV9BWF9TIFpPUlJPX0lEKFNQSVJJVF9URUNITk9MT0dZLCAweDA1LCAwKQogI2RlZmluZSBaT1JST19QUk9EX1NQSVJJVF9URUNITk9MT0dZX09DVEFCWVRFIFpPUlJPX0lEKFNQSVJJVF9URUNITk9MT0dZLCAweDA2LCAwKQogI2RlZmluZSBaT1JST19QUk9EX1NQSVJJVF9URUNITk9MT0dZX0lOTUFURSBaT1JST19JRChTUElSSVRfVEVDSE5PTE9HWSwgMHgwOCwgMCkKLQogI2RlZmluZSBaT1JST19NQU5VRl9TUElSSVRfVEVDSE5PTE9HWV8yIDB4MDdGMwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBaT1JST19NQU5VRl9CU0NfQUxGQURBVEFfMSAweDA3RkUKICNkZWZpbmUgWk9SUk9fUFJPRF9CU0NfQUxGXzNfMSBaT1JST19JRChCU0NfQUxGQURBVEFfMSwgMHgwMywgMCkKLQogI2RlZmluZSBaT1JST19NQU5VRl9CU0NfQUxGQURBVEFfMiAweDA4MDEKICNkZWZpbmUgWk9SUk9fUFJPRF9CU0NfQUxGXzJfMSBaT1JST19JRChCU0NfQUxGQURBVEFfMiwgMHgwMSwgMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFpPUlJPX1BST0RfQlNDX0FMRl8yXzIgWk9SUk9fSUQoQlNDX0FMRkFEQVRBXzIsIDB4MDIsIDApCiAjZGVmaW5lIFpPUlJPX1BST0RfQlNDX0FMRl8zXzIgWk9SUk9fSUQoQlNDX0FMRkFEQVRBXzIsIDB4MDMsIDApCi0KICNkZWZpbmUgWk9SUk9fTUFOVUZfQ0FSRENPXzIgMHgwODAyCiAjZGVmaW5lIFpPUlJPX1BST0RfQ0FSRENPX0tST05PU18yMDAwXzIgWk9SUk9fSUQoQ0FSRENPXzIsIDB4MDQsIDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBaT1JST19QUk9EX0NBUkRDT19BMTAwMF8yIFpPUlJPX0lEKENBUkRDT18yLCAweDBDLCAwKQotCiAjZGVmaW5lIFpPUlJPX01BTlVGX0pPQ0hIRUlNIDB4MDgwNAogI2RlZmluZSBaT1JST19QUk9EX0pPQ0hIRUlNX1JBTSBaT1JST19JRChKT0NISEVJTSwgMHgwMSwgMCkKLQogI2RlZmluZSBaT1JST19NQU5VRl9DSEVDS1BPSU5UX1RFQ0hOT0xPR0lFUyAweDA4MDcKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFpPUlJPX1BST0RfQ0hFQ0tQT0lOVF9URUNITk9MT0dJRVNfU0VSSUFMX1NPTFVUSU9OIFpPUlJPX0lEKENIRUNLUE9JTlRfVEVDSE5PTE9HSUVTLCAweDAwLCAwKQotCiAjZGVmaW5lIFpPUlJPX01BTlVGX0VET1RST05JSyAweDA4MTAKICNkZWZpbmUgWk9SUk9fUFJPRF9FRE9UUk9OSUtfSUVFRV80ODggWk9SUk9fSUQoRURPVFJPTklLLCAweDAxLCAwKQogI2RlZmluZSBaT1JST19QUk9EX0VET1RST05JS184MDMyIFpPUlJPX0lEKEVET1RST05JSywgMHgwMiwgMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFpPUlJPX1BST0RfRURPVFJPTklLX01VTFRJU0VSSUFMIFpPUlJPX0lEKEVET1RST05JSywgMHgwMywgMCkKICNkZWZpbmUgWk9SUk9fUFJPRF9FRE9UUk9OSUtfVklERU9ESUdJVElaRVIgWk9SUk9fSUQoRURPVFJPTklLLCAweDA0LCAwKQogI2RlZmluZSBaT1JST19QUk9EX0VET1RST05JS19QQVJBTExFTF9JTyBaT1JST19JRChFRE9UUk9OSUssIDB4MDUsIDApCiAjZGVmaW5lIFpPUlJPX1BST0RfRURPVFJPTklLX1BJQ19QUk9UT1lQSU5HIFpPUlJPX0lEKEVET1RST05JSywgMHgwNiwgMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFpPUlJPX1BST0RfRURPVFJPTklLX0FEQyBaT1JST19JRChFRE9UUk9OSUssIDB4MDcsIDApCiAjZGVmaW5lIFpPUlJPX1BST0RfRURPVFJPTklLX1ZNRSBaT1JST19JRChFRE9UUk9OSUssIDB4MDgsIDApCiAjZGVmaW5lIFpPUlJPX1BST0RfRURPVFJPTklLX0RTUDk2MDAwIFpPUlJPX0lEKEVET1RST05JSywgMHgwOSwgMCkKLQogI2RlZmluZSBaT1JST19NQU5VRl9ORVNfSU5DIDB4MDgxMworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgWk9SUk9fUFJPRF9ORVNfSU5DX1JBTSBaT1JST19JRChORVNfSU5DLCAweDAwLCAwKQotCiAjZGVmaW5lIFpPUlJPX01BTlVGX0lDRCAweDA4MTcKICNkZWZpbmUgWk9SUk9fUFJPRF9JQ0RfQURWQU5UQUdFXzIwMDBfU0NTSSBaT1JST19JRChJQ0QsIDB4MDEsIDApCiAjZGVmaW5lIFpPUlJPX1BST0RfSUNEX0FEVkFOVEFHRV9JREUgWk9SUk9fSUQoSUNELCAweDAzLCAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgWk9SUk9fUFJPRF9JQ0RfQURWQU5UQUdFXzIwODBfUkFNIFpPUlJPX0lEKElDRCwgMHgwNCwgMCkKLQogI2RlZmluZSBaT1JST19NQU5VRl9LVVBLRV8yIDB4MDgxOQogI2RlZmluZSBaT1JST19QUk9EX0tVUEtFX09NVEkgWk9SUk9fSUQoS1VQS0VfMiwgMHgwMSwgMCkKICNkZWZpbmUgWk9SUk9fUFJPRF9LVVBLRV9TQ1NJX0lJIFpPUlJPX0lEKEtVUEtFXzIsIDB4MDIsIDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBaT1JST19QUk9EX0tVUEtFX0dPTEVNX0JPWCBaT1JST19JRChLVVBLRV8yLCAweDAzLCAwKQogI2RlZmluZSBaT1JST19QUk9EX0tVUEtFXzAzMF84ODIgWk9SUk9fSUQoS1VQS0VfMiwgMHgwNCwgMCkKICNkZWZpbmUgWk9SUk9fUFJPRF9LVVBLRV9TQ1NJX0FUIFpPUlJPX0lEKEtVUEtFXzIsIDB4MDUsIDApCi0KICNkZWZpbmUgWk9SUk9fTUFOVUZfR1JFQVRfVkFMTEVZX1BST0RVQ1RTXzMgMHgwODFECisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBaT1JST19QUk9EX0dWUF9BMjAwMF9SQU04IFpPUlJPX0lEKEdSRUFUX1ZBTExFWV9QUk9EVUNUU18zLCAweDA5LCAwKQogI2RlZmluZSBaT1JST19QUk9EX0dWUF9JTVBBQ1RfU0VSSUVTX0lJX1JBTV8yIFpPUlJPX0lEKEdSRUFUX1ZBTExFWV9QUk9EVUNUU18zLCAweDBBLCAwKQotCiAjZGVmaW5lIFpPUlJPX01BTlVGX0lOVEVSV09SS1NfTkVUV09SSyAweDA4MUUKLQogI2RlZmluZSBaT1JST19NQU5VRl9IQVJESVRBTF9TWU5USEVTSVMgMHgwODIwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBaT1JST19QUk9EX0hBUkRJVEFMX1NZTlRIRVNJU19UUU1fNjgwMzBfNjg4ODIgWk9SUk9fSUQoSEFSRElUQUxfU1lOVEhFU0lTLCAweDE0LCAwKQotCiAjZGVmaW5lIFpPUlJPX01BTlVGX0FQUExJRURfRU5HSU5FRVJJTkcgMHgwODI4CiAjZGVmaW5lIFpPUlJPX1BST0RfQVBQTElFRF9FTkdJTkVFUklOR19ETDIwMDAgWk9SUk9fSUQoQVBQTElFRF9FTkdJTkVFUklORywgMHgxMCwgMCkKICNkZWZpbmUgWk9SUk9fUFJPRF9BUFBMSUVEX0VOR0lORUVSSU5HX1JBTV9XT1JLUyBaT1JST19JRChBUFBMSUVEX0VOR0lORUVSSU5HLCAweEUwLCAwKQotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBaT1JST19NQU5VRl9CU0NfQUxGQURBVEFfMyAweDA4MkMKICNkZWZpbmUgWk9SUk9fUFJPRF9CU0NfT0tUQUdPTl8yMDA4IFpPUlJPX0lEKEJTQ19BTEZBREFUQV8zLCAweDA1LCAwKQogI2RlZmluZSBaT1JST19QUk9EX0JTQ19UQU5ERU1fQVRfMjAwOF81MDggWk9SUk9fSUQoQlNDX0FMRkFEQVRBXzMsIDB4MDYsIDApCiAjZGVmaW5lIFpPUlJPX1BST0RfQlNDX0FMRkFfUkFNXzEyMDAgWk9SUk9fSUQoQlNDX0FMRkFEQVRBXzMsIDB4MDcsIDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBaT1JST19QUk9EX0JTQ19PS1RBR09OXzIwMDhfUkFNIFpPUlJPX0lEKEJTQ19BTEZBREFUQV8zLCAweDA4LCAwKQogI2RlZmluZSBaT1JST19QUk9EX0JTQ19NVUxUSUZBQ0VfSSBaT1JST19JRChCU0NfQUxGQURBVEFfMywgMHgxMCwgMCkKICNkZWZpbmUgWk9SUk9fUFJPRF9CU0NfTVVMVElGQUNFX0lJIFpPUlJPX0lEKEJTQ19BTEZBREFUQV8zLCAweDExLCAwKQogI2RlZmluZSBaT1JST19QUk9EX0JTQ19NVUxUSUZBQ0VfSUlJIFpPUlJPX0lEKEJTQ19BTEZBREFUQV8zLCAweDEyLCAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgWk9SUk9fUFJPRF9CU0NfRlJBTUVNQVNURVJfSUkgWk9SUk9fSUQoQlNDX0FMRkFEQVRBXzMsIDB4MjAsIDApCiAjZGVmaW5lIFpPUlJPX1BST0RfQlNDX0dSQUZGSVRJX1JBTSBaT1JST19JRChCU0NfQUxGQURBVEFfMywgMHgyMSwgMCkKICNkZWZpbmUgWk9SUk9fUFJPRF9CU0NfR1JBRkZJVElfUkVHIFpPUlJPX0lEKEJTQ19BTEZBREFUQV8zLCAweDIyLCAwKQogI2RlZmluZSBaT1JST19QUk9EX0JTQ19JU0ROX01BU1RFUkNBUkQgWk9SUk9fSUQoQlNDX0FMRkFEQVRBXzMsIDB4NDAsIDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBaT1JST19QUk9EX0JTQ19JU0ROX01BU1RFUkNBUkRfSUkgWk9SUk9fSUQoQlNDX0FMRkFEQVRBXzMsIDB4NDEsIDApCi0KICNkZWZpbmUgWk9SUk9fTUFOVUZfUEhPRU5JWCAweDA4MzUKICNkZWZpbmUgWk9SUk9fUFJPRF9QSE9FTklYX1NUNTA2IFpPUlJPX0lEKFBIT0VOSVgsIDB4MjEsIDApCiAjZGVmaW5lIFpPUlJPX1BST0RfUEhPRU5JWF9TQ1NJIFpPUlJPX0lEKFBIT0VOSVgsIDB4MjIsIDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBaT1JST19QUk9EX1BIT0VOSVhfUkFNIFpPUlJPX0lEKFBIT0VOSVgsIDB4QkUsIDApCi0KICNkZWZpbmUgWk9SUk9fTUFOVUZfQURWQU5DRURfU1RPUkFHRV9TWVNURU1TIDB4MDgzNgogI2RlZmluZSBaT1JST19QUk9EX0FEVkFOQ0VEX1NUT1JBR0VfU1lTVEVNU19ORVhVUyBaT1JST19JRChBRFZBTkNFRF9TVE9SQUdFX1NZU1RFTVMsIDB4MDEsIDApCiAjZGVmaW5lIFpPUlJPX1BST0RfQURWQU5DRURfU1RPUkFHRV9TWVNURU1TX05FWFVTX1JBTSBaT1JST19JRChBRFZBTkNFRF9TVE9SQUdFX1NZU1RFTVMsIDB4MDgsIDApCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFpPUlJPX01BTlVGX0lNUFVMU0UgMHgwODM4CiAjZGVmaW5lIFpPUlJPX1BST0RfSU1QVUxTRV9GSVJFQ1JBQ0tFUl8yNCBaT1JST19JRChJTVBVTFNFLCAweDAwLCAwKQotCiAjZGVmaW5lIFpPUlJPX01BTlVGX0lWUyAweDA4NDAKICNkZWZpbmUgWk9SUk9fUFJPRF9JVlNfR1JBTkRTTEFNX1BJQ18yIFpPUlJPX0lEKElWUywgMHgwMiwgMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFpPUlJPX1BST0RfSVZTX0dSQU5EU0xBTV9QSUNfMSBaT1JST19JRChJVlMsIDB4MDQsIDApCiAjZGVmaW5lIFpPUlJPX1BST0RfSVZTX09WRVJEUklWRSBaT1JST19JRChJVlMsIDB4MTAsIDApCiAjZGVmaW5lIFpPUlJPX1BST0RfSVZTX1RSVU1QQ0FSRF9DTEFTU0lDIFpPUlJPX0lEKElWUywgMHgzMCwgMCkKICNkZWZpbmUgWk9SUk9fUFJPRF9JVlNfVFJVTVBDQVJEX1BST19HUkFORFNMQU0gWk9SUk9fSUQoSVZTLCAweDM0LCAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgWk9SUk9fUFJPRF9JVlNfTUVUQV80IFpPUlJPX0lEKElWUywgMHg0MCwgMCkKICNkZWZpbmUgWk9SUk9fUFJPRF9JVlNfV0FWRVRPT0xTIFpPUlJPX0lEKElWUywgMHhCRiwgMCkKICNkZWZpbmUgWk9SUk9fUFJPRF9JVlNfVkVDVE9SXzEgWk9SUk9fSUQoSVZTLCAweEYzLCAwKQogI2RlZmluZSBaT1JST19QUk9EX0lWU19WRUNUT1JfMiBaT1JST19JRChJVlMsIDB4RjQsIDApCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFpPUlJPX01BTlVGX1ZFQ1RPUl8xIDB4MDg0MQogI2RlZmluZSBaT1JST19QUk9EX1ZFQ1RPUl9DT05ORUNUSU9OXzEgWk9SUk9fSUQoVkVDVE9SXzEsIDB4RTMsIDApCi0KICNkZWZpbmUgWk9SUk9fTUFOVUZfWFBFUlRfUFJPREVWIDB4MDg0NQogI2RlZmluZSBaT1JST19QUk9EX1hQRVJUX1BST0RFVl9WSVNJT05BX1JBTSBaT1JST19JRChYUEVSVF9QUk9ERVYsIDB4MDEsIDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBaT1JST19QUk9EX1hQRVJUX1BST0RFVl9WSVNJT05BX1JFRyBaT1JST19JRChYUEVSVF9QUk9ERVYsIDB4MDIsIDApCiAjZGVmaW5lIFpPUlJPX1BST0RfWFBFUlRfUFJPREVWX01FUkxJTl9SQU0gWk9SUk9fSUQoWFBFUlRfUFJPREVWLCAweDAzLCAwKQogI2RlZmluZSBaT1JST19QUk9EX1hQRVJUX1BST0RFVl9NRVJMSU5fUkVHXzEgWk9SUk9fSUQoWFBFUlRfUFJPREVWLCAweDA0LCAwKQogI2RlZmluZSBaT1JST19QUk9EX1hQRVJUX1BST0RFVl9NRVJMSU5fUkVHXzIgWk9SUk9fSUQoWFBFUlRfUFJPREVWLCAweEM5LCAwKQotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBaT1JST19NQU5VRl9IWURSQV9TWVNURU1TIDB4MDg0OQogI2RlZmluZSBaT1JST19QUk9EX0hZRFJBX1NZU1RFTVNfQU1JR0FORVQgWk9SUk9fSUQoSFlEUkFfU1lTVEVNUywgMHgwMSwgMCkKLQogI2RlZmluZSBaT1JST19NQU5VRl9TVU5SSVpFX0lORFVTVFJJRVMgMHgwODRGCiAjZGVmaW5lIFpPUlJPX1BST0RfU1VOUklaRV9JTkRVU1RSSUVTX0FEMTAxMiBaT1JST19JRChTVU5SSVpFX0lORFVTVFJJRVMsIDB4MDEsIDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBaT1JST19QUk9EX1NVTlJJWkVfSU5EVVNUUklFU19BRDUxNiBaT1JST19JRChTVU5SSVpFX0lORFVTVFJJRVMsIDB4MDIsIDApCiAjZGVmaW5lIFpPUlJPX1BST0RfU1VOUklaRV9JTkRVU1RSSUVTX0RENTEyIFpPUlJPX0lEKFNVTlJJWkVfSU5EVVNUUklFUywgMHgwMywgMCkKLQogI2RlZmluZSBaT1JST19NQU5VRl9UUklDRVJBVE9QUyAweDA4NTAKICNkZWZpbmUgWk9SUk9fUFJPRF9UUklDRVJBVE9QU19NVUxUSV9JTyBaT1JST19JRChUUklDRVJBVE9QUywgMHgwMSwgMCkKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgWk9SUk9fTUFOVUZfQVBQTElFRF9NQUdJQyAweDA4NTEKICNkZWZpbmUgWk9SUk9fUFJPRF9BUFBMSUVEX01BR0lDX0RNSV9SRVNPTFZFUiBaT1JST19JRChBUFBMSUVEX01BR0lDLCAweDAxLCAwKQogI2RlZmluZSBaT1JST19QUk9EX0FQUExJRURfTUFHSUNfRElHSVRBTF9CUk9BRENBU1RFUiBaT1JST19JRChBUFBMSUVEX01BR0lDLCAweDA2LCAwKQotCiAjZGVmaW5lIFpPUlJPX01BTlVGX0dGWF9CQVNFIDB4MDg1RQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgWk9SUk9fUFJPRF9HRlhfQkFTRV9HREFfMV9WUkFNIFpPUlJPX0lEKEdGWF9CQVNFLCAweDAwLCAwKQogI2RlZmluZSBaT1JST19QUk9EX0dGWF9CQVNFX0dEQV8xIFpPUlJPX0lEKEdGWF9CQVNFLCAweDAxLCAwKQotCiAjZGVmaW5lIFpPUlJPX01BTlVGX1JPQ1RFQyAweDA4NjAKICNkZWZpbmUgWk9SUk9fUFJPRF9ST0NURUNfUkhfODAwQyBaT1JST19JRChST0NURUMsIDB4MDEsIDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBaT1JST19QUk9EX1JPQ1RFQ19SSF84MDBDX1JBTSBaT1JST19JRChST0NURUMsIDB4MDEsIDApCi0KICNkZWZpbmUgWk9SUk9fTUFOVUZfS0FUTyAweDA4NjEKICNkZWZpbmUgWk9SUk9fUFJPRF9LQVRPX01FTE9EWSBaT1JST19JRChLQVRPLCAweDgwLCAwKQotCiAjZGVmaW5lIFpPUlJPX01BTlVGX0hFTEZSSUNIXzEgMHgwODYxCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBaT1JST19QUk9EX0hFTEZSSUNIX1JBSU5CT1dfSUkgWk9SUk9fSUQoSEVMRlJJQ0hfMSwgMHgyMCwgMCkKICNkZWZpbmUgWk9SUk9fUFJPRF9IRUxGUklDSF9SQUlOQk9XX0lJSSBaT1JST19JRChIRUxGUklDSF8xLCAweDIxLCAwKQotCiAjZGVmaW5lIFpPUlJPX01BTlVGX0FUTEFOVElTIDB4MDg2MgotCiAjZGVmaW5lIFpPUlJPX01BTlVGX1BST1RBUiAweDA4NjQKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgWk9SUk9fTUFOVUZfQUNTIDB4MDg2NQotCiAjZGVmaW5lIFpPUlJPX01BTlVGX1NPRlRXQVJFX1JFU1VMVFNfRU5URVJQUklTRVMgMHgwODY2CiAjZGVmaW5lIFpPUlJPX1BST0RfU09GVFdBUkVfUkVTVUxUU19FTlRFUlBSSVNFU19HT0xERU5fR0FURV8yX0JVU19QTFVTIFpPUlJPX0lEKFNPRlRXQVJFX1JFU1VMVFNfRU5URVJQUklTRVMsIDB4MDEsIDApCi0KICNkZWZpbmUgWk9SUk9fTUFOVUZfTUFTT0JPU0hJIDB4MDg2RAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgWk9SUk9fUFJPRF9NQVNPQk9TSElfTUFTVEVSX0NBUkRfU0MyMDEgWk9SUk9fSUQoTUFTT0JPU0hJLCAweDAzLCAwKQogI2RlZmluZSBaT1JST19QUk9EX01BU09CT1NISV9NQVNURVJfQ0FSRF9NQzcwMiBaT1JST19JRChNQVNPQk9TSEksIDB4MDQsIDApCiAjZGVmaW5lIFpPUlJPX1BST0RfTUFTT0JPU0hJX01WRF84MTkgWk9SUk9fSUQoTUFTT0JPU0hJLCAweDA3LCAwKQotCiAjZGVmaW5lIFpPUlJPX01BTlVGX01BSU5IQVRUQU5fREFUQSAweDA4NkYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFpPUlJPX1BST0RfTUFJTkhBVFRBTl9EQVRBX0lERSBaT1JST19JRChNQUlOSEFUVEFOX0RBVEEsIDB4MDEsIDApCi0KICNkZWZpbmUgWk9SUk9fTUFOVUZfVklMTEFHRV9UUk9OSUMgMHgwODc3CiAjZGVmaW5lIFpPUlJPX1BST0RfVklMTEFHRV9UUk9OSUNfRE9NSU5PX1JBTSBaT1JST19JRChWSUxMQUdFX1RST05JQywgMHgwMSwgMCkKICNkZWZpbmUgWk9SUk9fUFJPRF9WSUxMQUdFX1RST05JQ19ET01JTk9fUkVHIFpPUlJPX0lEKFZJTExBR0VfVFJPTklDLCAweDAyLCAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgWk9SUk9fUFJPRF9WSUxMQUdFX1RST05JQ19ET01JTk9fMTZNX1BST1RPVFlQRSBaT1JST19JRChWSUxMQUdFX1RST05JQywgMHgwMywgMCkKICNkZWZpbmUgWk9SUk9fUFJPRF9WSUxMQUdFX1RST05JQ19QSUNBU1NPX0lJX0lJX1BMVVNfUkFNIFpPUlJPX0lEKFZJTExBR0VfVFJPTklDLCAweDBCLCAwKQogI2RlZmluZSBaT1JST19QUk9EX1ZJTExBR0VfVFJPTklDX1BJQ0FTU09fSUlfSUlfUExVU19SRUcgWk9SUk9fSUQoVklMTEFHRV9UUk9OSUMsIDB4MEMsIDApCiAjZGVmaW5lIFpPUlJPX1BST0RfVklMTEFHRV9UUk9OSUNfUElDQVNTT19JSV9JSV9QTFVTX1NFR01FTlRFRF9NT0RFIFpPUlJPX0lEKFZJTExBR0VfVFJPTklDLCAweDBELCAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgWk9SUk9fUFJPRF9WSUxMQUdFX1RST05JQ19QSUNBU1NPX0lWX1oyX01FTTEgWk9SUk9fSUQoVklMTEFHRV9UUk9OSUMsIDB4MTUsIDApCiAjZGVmaW5lIFpPUlJPX1BST0RfVklMTEFHRV9UUk9OSUNfUElDQVNTT19JVl9aMl9NRU0yIFpPUlJPX0lEKFZJTExBR0VfVFJPTklDLCAweDE2LCAwKQogI2RlZmluZSBaT1JST19QUk9EX1ZJTExBR0VfVFJPTklDX1BJQ0FTU09fSVZfWjJfUkVHIFpPUlJPX0lEKFZJTExBR0VfVFJPTklDLCAweDE3LCAwKQogI2RlZmluZSBaT1JST19QUk9EX1ZJTExBR0VfVFJPTklDX1BJQ0FTU09fSVZfWjMgWk9SUk9fSUQoVklMTEFHRV9UUk9OSUMsIDB4MTgsIDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBaT1JST19QUk9EX1ZJTExBR0VfVFJPTklDX0FSSUFETkUgWk9SUk9fSUQoVklMTEFHRV9UUk9OSUMsIDB4QzksIDApCiAjZGVmaW5lIFpPUlJPX1BST0RfVklMTEFHRV9UUk9OSUNfQVJJQURORTIgWk9SUk9fSUQoVklMTEFHRV9UUk9OSUMsIDB4Q0EsIDApCi0KICNkZWZpbmUgWk9SUk9fTUFOVUZfVVRJTElUSUVTX1VOTElNSVRFRCAweDA4N0IKICNkZWZpbmUgWk9SUk9fUFJPRF9VVElMSVRJRVNfVU5MSU1JVEVEX0VNUExBTlRfREVMVVhFIFpPUlJPX0lEKFVUSUxJVElFU19VTkxJTUlURUQsIDB4MTUsIDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBaT1JST19QUk9EX1VUSUxJVElFU19VTkxJTUlURURfRU1QTEFOVF9ERUxVWEUyIFpPUlJPX0lEKFVUSUxJVElFU19VTkxJTUlURUQsIDB4MjAsIDApCi0KICNkZWZpbmUgWk9SUk9fTUFOVUZfQU1JVFJJWCAweDA4ODAKICNkZWZpbmUgWk9SUk9fUFJPRF9BTUlUUklYX01VTFRJX0lPIFpPUlJPX0lEKEFNSVRSSVgsIDB4MDEsIDApCiAjZGVmaW5lIFpPUlJPX1BST0RfQU1JVFJJWF9DRF9SQU0gWk9SUk9fSUQoQU1JVFJJWCwgMHgwMiwgMCkKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgWk9SUk9fTUFOVUZfQVJNQVggMHgwODg1CiAjZGVmaW5lIFpPUlJPX1BST0RfQVJNQVhfT01OSUJVUyBaT1JST19JRChBUk1BWCwgMHgwMCwgMCkKLQogI2RlZmluZSBaT1JST19NQU5VRl9aRVVTIDB4MDg4RAogI2RlZmluZSBaT1JST19QUk9EX1pFVVNfU1BJREVSIFpPUlJPX0lEKFpFVVMsIDB4MDQsIDApCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFpPUlJPX01BTlVGX05FV1RFSyAweDA4OEYKICNkZWZpbmUgWk9SUk9fUFJPRF9ORVdURUtfVklERU9UT0FTVEVSIFpPUlJPX0lEKE5FV1RFSywgMHgwMCwgMCkKLQogI2RlZmluZSBaT1JST19NQU5VRl9NX1RFQ0hfR0VSTUFOWSAweDA4OTAKICNkZWZpbmUgWk9SUk9fUFJPRF9NVEVDX0FUNTAwXzIgWk9SUk9fSUQoTV9URUNIX0dFUk1BTlksIDB4MDEsIDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBaT1JST19QUk9EX01URUNfNjgwMzAgWk9SUk9fSUQoTV9URUNIX0dFUk1BTlksIDB4MDMsIDApCiAjZGVmaW5lIFpPUlJPX1BST0RfTVRFQ182ODAyMEkgWk9SUk9fSUQoTV9URUNIX0dFUk1BTlksIDB4MDYsIDApCiAjZGVmaW5lIFpPUlJPX1BST0RfTVRFQ19BMTIwMF9UNjgwMzBfUlRDIFpPUlJPX0lEKE1fVEVDSF9HRVJNQU5ZLCAweDIwLCAwKQogI2RlZmluZSBaT1JST19QUk9EX01URUNfVklQRVJfTUtfVl9FX01BVFJJWF81MzAgWk9SUk9fSUQoTV9URUNIX0dFUk1BTlksIDB4MjEsIDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBaT1JST19QUk9EX01URUNfOF9NQl9SQU0gWk9SUk9fSUQoTV9URUNIX0dFUk1BTlksIDB4MjIsIDApCiAjZGVmaW5lIFpPUlJPX1BST0RfTVRFQ19WSVBFUl9NS19WX0VfTUFUUklYXzUzMF9TQ1NJX0lERSBaT1JST19JRChNX1RFQ0hfR0VSTUFOWSwgMHgyNCwgMCkKLQogI2RlZmluZSBaT1JST19NQU5VRl9HUkVBVF9WQUxMRVlfUFJPRFVDVFNfNCAweDA4OTEKICNkZWZpbmUgWk9SUk9fUFJPRF9HVlBfRUdTXzI4XzI0X1NQRUNUUlVNX1JBTSBaT1JST19JRChHUkVBVF9WQUxMRVlfUFJPRFVDVFNfNCwgMHgwMSwgMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFpPUlJPX1BST0RfR1ZQX0VHU18yOF8yNF9TUEVDVFJVTV9SRUcgWk9SUk9fSUQoR1JFQVRfVkFMTEVZX1BST0RVQ1RTXzQsIDB4MDIsIDApCi0KICNkZWZpbmUgWk9SUk9fTUFOVUZfQVBPTExPXzEgMHgwODkyCiAjZGVmaW5lIFpPUlJPX1BST0RfQVBPTExPX0ExMjAwIFpPUlJPX0lEKEFQT0xMT18xLCAweDAxLCAwKQotCiAjZGVmaW5lIFpPUlJPX01BTlVGX0hFTEZSSUNIXzIgMHgwODkzCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBaT1JST19QUk9EX0hFTEZSSUNIX1BJQ0NPTE9fUkFNIFpPUlJPX0lEKEhFTEZSSUNIXzIsIDB4MDUsIDApCiAjZGVmaW5lIFpPUlJPX1BST0RfSEVMRlJJQ0hfUElDQ09MT19SRUcgWk9SUk9fSUQoSEVMRlJJQ0hfMiwgMHgwNiwgMCkKICNkZWZpbmUgWk9SUk9fUFJPRF9IRUxGUklDSF9QRUdHWV9QTFVTX01QRUcgWk9SUk9fSUQoSEVMRlJJQ0hfMiwgMHgwNywgMCkKICNkZWZpbmUgWk9SUk9fUFJPRF9IRUxGUklDSF9WSURFT0NSVU5DSEVSIFpPUlJPX0lEKEhFTEZSSUNIXzIsIDB4MDgsIDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBaT1JST19QUk9EX0hFTEZSSUNIX1NENjRfUkFNIFpPUlJPX0lEKEhFTEZSSUNIXzIsIDB4MEEsIDApCiAjZGVmaW5lIFpPUlJPX1BST0RfSEVMRlJJQ0hfU0Q2NF9SRUcgWk9SUk9fSUQoSEVMRlJJQ0hfMiwgMHgwQiwgMCkKLQogI2RlZmluZSBaT1JST19NQU5VRl9NQUNST1NZU1RFTVNfVVNBIDB4MDg5QgogI2RlZmluZSBaT1JST19QUk9EX01BQ1JPU1lTVEVNU19XQVJQX0VOR0lORV80MHh4IFpPUlJPX0lEKE1BQ1JPU1lTVEVNU19VU0EsIDB4MTMsIDApCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFpPUlJPX01BTlVGX0VMQk9YX0NPTVBVVEVSIDB4MDg5RQogI2RlZmluZSBaT1JST19QUk9EX0VMQk9YX0NPTVBVVEVSXzEyMDBfNCBaT1JST19JRChFTEJPWF9DT01QVVRFUiwgMHgwNiwgMCkKLQogI2RlZmluZSBaT1JST19NQU5VRl9IQVJNU19QUk9GRVNTSU9OQUwgMHgwQTAwCiAjZGVmaW5lIFpPUlJPX1BST0RfSEFSTVNfUFJPRkVTU0lPTkFMXzAzMF9QTFVTIFpPUlJPX0lEKEhBUk1TX1BST0ZFU1NJT05BTCwgMHgxMCwgMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFpPUlJPX1BST0RfSEFSTVNfUFJPRkVTU0lPTkFMXzM1MDAgWk9SUk9fSUQoSEFSTVNfUFJPRkVTU0lPTkFMLCAweEQwLCAwKQotCiAjZGVmaW5lIFpPUlJPX01BTlVGX01JQ1JPTklLIDB4MEE1MAogI2RlZmluZSBaT1JST19QUk9EX01JQ1JPTklLX1JDQV8xMjAgWk9SUk9fSUQoTUlDUk9OSUssIDB4MEEsIDApCi0KICNkZWZpbmUgWk9SUk9fTUFOVUZfTUlDUk9OSUsyIDB4MEYwRgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgWk9SUk9fUFJPRF9NSUNST05JSzJfWjNJIFpPUlJPX0lEKE1JQ1JPTklLMiwgMHgwMSwgMCkKLQogI2RlZmluZSBaT1JST19NQU5VRl9NRUdBTUlDUk8gMHgxMDAwCiAjZGVmaW5lIFpPUlJPX1BST0RfTUVHQU1JQ1JPX1NDUkFNXzUwMCBaT1JST19JRChNRUdBTUlDUk8sIDB4MDMsIDApCiAjZGVmaW5lIFpPUlJPX1BST0RfTUVHQU1JQ1JPX1NDUkFNXzUwMF9SQU0gWk9SUk9fSUQoTUVHQU1JQ1JPLCAweDA0LCAwKQotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBaT1JST19NQU5VRl9JTVRST05JQ1NfMiAweDEwMjgKICNkZWZpbmUgWk9SUk9fUFJPRF9JTVRST05JQ1NfSFVSUklDQU5FXzI4MDBfMyBaT1JST19JRChJTVRST05JQ1NfMiwgMHgzOSwgMCkKICNkZWZpbmUgWk9SUk9fUFJPRF9JTVRST05JQ1NfSFVSUklDQU5FXzI4MDBfNCBaT1JST19JRChJTVRST05JQ1NfMiwgMHg1NywgMCkKLQogI2RlZmluZSBaT1JST19NQU5VRl9JTkRJVklEVUFMX0NPTVBVVEVSUyAweDEyMTIKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFpPUlJPX1BST0RfSU5ESVZJRFVBTF9DT01QVVRFUlNfQlVEREhBIFpPUlJPX0lEKElORElWSURVQUxfQ09NUFVURVJTLCAweDAwLCAwKQogI2RlZmluZSBaT1JST19QUk9EX0lORElWSURVQUxfQ09NUFVURVJTX1hfU1VSRiBaT1JST19JRChJTkRJVklEVUFMX0NPTVBVVEVSUywgMHgxNywgMCkKICNkZWZpbmUgWk9SUk9fUFJPRF9JTkRJVklEVUFMX0NPTVBVVEVSU19DQVRXRUFTRUwgWk9SUk9fSUQoSU5ESVZJRFVBTF9DT01QVVRFUlMsIDB4MkEsIDApCi0KICNkZWZpbmUgWk9SUk9fTUFOVUZfS1VQS0VfMyAweDEyNDgKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFpPUlJPX1BST0RfS1VQS0VfR09MRU1fSERfMzAwMCBaT1JST19JRChLVVBLRV8zLCAweDAxLCAwKQotCiAjZGVmaW5lIFpPUlJPX01BTlVGX0lUSCAweDEzODgKICNkZWZpbmUgWk9SUk9fUFJPRF9JVEhfSVNETl9NQVNURVJfSUkgWk9SUk9fSUQoSVRILCAweDAxLCAwKQotCiAjZGVmaW5lIFpPUlJPX01BTlVGX1ZNQyAweDEzODkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFpPUlJPX1BST0RfVk1DX0lTRE5fQkxBU1RFUl9aMiBaT1JST19JRChWTUMsIDB4MDEsIDApCiAjZGVmaW5lIFpPUlJPX1BST0RfVk1DX0hZUEVSQ09NXzQgWk9SUk9fSUQoVk1DLCAweDAyLCAwKQotCiAjZGVmaW5lIFpPUlJPX01BTlVGX0lORk9STUFUSU9OIDB4MTU3QwogI2RlZmluZSBaT1JST19QUk9EX0lORk9STUFUSU9OX0lTRE5fRU5HSU5FX0kgWk9SUk9fSUQoSU5GT1JNQVRJT04sIDB4NjQsIDApCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFpPUlJPX01BTlVGX1ZPUlRFWCAweDIwMTcKICNkZWZpbmUgWk9SUk9fUFJPRF9WT1JURVhfR09MREVOX0dBVEVfODAzODZTWCBaT1JST19JRChWT1JURVgsIDB4MDcsIDApCiAjZGVmaW5lIFpPUlJPX1BST0RfVk9SVEVYX0dPTERFTl9HQVRFX1JBTSBaT1JST19JRChWT1JURVgsIDB4MDgsIDApCiAjZGVmaW5lIFpPUlJPX1BST0RfVk9SVEVYX0dPTERFTl9HQVRFXzgwNDg2IFpPUlJPX0lEKFZPUlRFWCwgMHgwOSwgMCkKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgWk9SUk9fTUFOVUZfRVhQQU5TSU9OX1NZU1RFTVMgMHgyMDYyCiAjZGVmaW5lIFpPUlJPX1BST0RfRVhQQU5TSU9OX1NZU1RFTVNfREFUQUZMWUVSXzQwMDBTWCBaT1JST19JRChFWFBBTlNJT05fU1lTVEVNUywgMHgwMSwgMCkKICNkZWZpbmUgWk9SUk9fUFJPRF9FWFBBTlNJT05fU1lTVEVNU19EQVRBRkxZRVJfNDAwMFNYX1JBTSBaT1JST19JRChFWFBBTlNJT05fU1lTVEVNUywgMHgwMiwgMCkKLQogI2RlZmluZSBaT1JST19NQU5VRl9SRUFEWVNPRlQgMHgyMTAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBaT1JST19QUk9EX1JFQURZU09GVF9BTUFYX0lJX0lWIFpPUlJPX0lEKFJFQURZU09GVCwgMHgwMSwgMCkKLQogI2RlZmluZSBaT1JST19NQU5VRl9QSEFTRTUgMHgyMTQwCiAjZGVmaW5lIFpPUlJPX1BST0RfUEhBU0U1X0JMSVpaQVJEX1JBTSBaT1JST19JRChQSEFTRTUsIDB4MDEsIDApCiAjZGVmaW5lIFpPUlJPX1BST0RfUEhBU0U1X0JMSVpaQVJEIFpPUlJPX0lEKFBIQVNFNSwgMHgwMiwgMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFpPUlJPX1BST0RfUEhBU0U1X0JMSVpaQVJEXzEyMjBfSVYgWk9SUk9fSUQoUEhBU0U1LCAweDA2LCAwKQogI2RlZmluZSBaT1JST19QUk9EX1BIQVNFNV9GQVNUTEFORV9aM19SQU0gWk9SUk9fSUQoUEhBU0U1LCAweDBBLCAwKQogI2RlZmluZSBaT1JST19QUk9EX1BIQVNFNV9CTElaWkFSRF8xMjMwX0lJX0ZBU1RMQU5FX1ozX0NZQkVSU0NTSV9DWUJFUlNUT1JNMDYwIFpPUlJPX0lEKFBIQVNFNSwgMHgwQiwgMCkKICNkZWZpbmUgWk9SUk9fUFJPRF9QSEFTRTVfQkxJWlpBUkRfMTIyMF9DWUJFUlNUT1JNIFpPUlJPX0lEKFBIQVNFNSwgMHgwQywgMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFpPUlJPX1BST0RfUEhBU0U1X0JMSVpaQVJEXzEyMzAgWk9SUk9fSUQoUEhBU0U1LCAweDBELCAwKQogI2RlZmluZSBaT1JST19QUk9EX1BIQVNFNV9CTElaWkFSRF8xMjMwX0lWXzEyNjAgWk9SUk9fSUQoUEhBU0U1LCAweDExLCAwKQogI2RlZmluZSBaT1JST19QUk9EX1BIQVNFNV9CTElaWkFSRF8yMDYwIFpPUlJPX0lEKFBIQVNFNSwgMHgxOCwgMCkKICNkZWZpbmUgWk9SUk9fUFJPRF9QSEFTRTVfQ1lCRVJTVE9STV9NS19JSSBaT1JST19JRChQSEFTRTUsIDB4MTksIDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBaT1JST19QUk9EX1BIQVNFNV9DWUJFUlZJU0lPTjY0IFpPUlJPX0lEKFBIQVNFNSwgMHgyMiwgMCkKICNkZWZpbmUgWk9SUk9fUFJPRF9QSEFTRTVfQ1lCRVJWSVNJT042NF8zRF9QUk9UT1RZUEUgWk9SUk9fSUQoUEhBU0U1LCAweDMyLCAwKQogI2RlZmluZSBaT1JST19QUk9EX1BIQVNFNV9DWUJFUlZJU0lPTjY0XzNEIFpPUlJPX0lEKFBIQVNFNSwgMHg0MywgMCkKICNkZWZpbmUgWk9SUk9fUFJPRF9QSEFTRTVfQ1lCRVJTVE9STV9NS19JSUkgWk9SUk9fSUQoUEhBU0U1LCAweDY0LCAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgWk9SUk9fUFJPRF9QSEFTRTVfQkxJWlpBUkRfNjAzRV9QTFVTIFpPUlJPX0lEKFBIQVNFNSwgMHg2ZSwgMCkKLQogI2RlZmluZSBaT1JST19NQU5VRl9EUFMgMHgyMTY5CiAjZGVmaW5lIFpPUlJPX1BST0RfRFBTX1BFUlNPTkFMX0FOSU1BVElPTl9SRUNPUkRFUiBaT1JST19JRChEUFMsIDB4MDEsIDApCi0KICNkZWZpbmUgWk9SUk9fTUFOVUZfQVBPTExPXzIgMHgyMjAwCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBaT1JST19QUk9EX0FQT0xMT19BNjIwXzY4MDIwXzEgWk9SUk9fSUQoQVBPTExPXzIsIDB4MDAsIDApCiAjZGVmaW5lIFpPUlJPX1BST0RfQVBPTExPX0E2MjBfNjgwMjBfMiBaT1JST19JRChBUE9MTE9fMiwgMHgwMSwgMCkKLQogI2RlZmluZSBaT1JST19NQU5VRl9BUE9MTE9fMyAweDIyMjIKICNkZWZpbmUgWk9SUk9fUFJPRF9BUE9MTE9fQVRfQVBPTExPIFpPUlJPX0lEKEFQT0xMT18zLCAweDIyLCAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgWk9SUk9fUFJPRF9BUE9MTE9fMTIzMF8xMjQwXzEyNjBfMjAzMF80MDQwXzQwNjAgWk9SUk9fSUQoQVBPTExPXzMsIDB4MjMsIDApCi0KICNkZWZpbmUgWk9SUk9fTUFOVUZfUEVUU09GRl9MUCAweDM4QTUKICNkZWZpbmUgWk9SUk9fUFJPRF9QRVRTT0ZGX0xQX0RFTEZJTkEgWk9SUk9fSUQoUEVUU09GRl9MUCwgMHgwMCwgMCkKICNkZWZpbmUgWk9SUk9fUFJPRF9QRVRTT0ZGX0xQX0RFTEZJTkFfTElURSBaT1JST19JRChQRVRTT0ZGX0xQLCAweDAxLCAwKQotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBaT1JST19NQU5VRl9VV0VfR0VSTEFDSCAweDNGRjcKICNkZWZpbmUgWk9SUk9fUFJPRF9VV0VfR0VSTEFDSF9SQU1fUk9NIFpPUlJPX0lEKFVXRV9HRVJMQUNILCAweGQ0LCAwKQotCiAjZGVmaW5lIFpPUlJPX01BTlVGX0FDVCAweDQyMzEKICNkZWZpbmUgWk9SUk9fUFJPRF9BQ1RfUFJFTFVERSBaT1JST19JRChBQ1QsIDB4MDEsIDApCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFpPUlJPX01BTlVGX01BQ1JPU1lTVEVNU19HRVJNQU5ZIDB4NDc1NAogI2RlZmluZSBaT1JST19QUk9EX01BQ1JPU1lTVEVNU19NQUVTVFJPIFpPUlJPX0lEKE1BQ1JPU1lTVEVNU19HRVJNQU5ZLCAweDAzLCAwKQogI2RlZmluZSBaT1JST19QUk9EX01BQ1JPU1lTVEVNU19WTEFCIFpPUlJPX0lEKE1BQ1JPU1lTVEVNU19HRVJNQU5ZLCAweDA0LCAwKQogI2RlZmluZSBaT1JST19QUk9EX01BQ1JPU1lTVEVNU19NQUVTVFJPX1BSTyBaT1JST19JRChNQUNST1NZU1RFTVNfR0VSTUFOWSwgMHgwNSwgMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFpPUlJPX1BST0RfTUFDUk9TWVNURU1TX1JFVElOQSBaT1JST19JRChNQUNST1NZU1RFTVNfR0VSTUFOWSwgMHgwNiwgMCkKICNkZWZpbmUgWk9SUk9fUFJPRF9NQUNST1NZU1RFTVNfTVVMVElfRVZPTFVUSU9OIFpPUlJPX0lEKE1BQ1JPU1lTVEVNU19HRVJNQU5ZLCAweDA4LCAwKQogI2RlZmluZSBaT1JST19QUk9EX01BQ1JPU1lTVEVNU19UT0NDQVRBIFpPUlJPX0lEKE1BQ1JPU1lTVEVNU19HRVJNQU5ZLCAweDBDLCAwKQogI2RlZmluZSBaT1JST19QUk9EX01BQ1JPU1lTVEVNU19SRVRJTkFfWjMgWk9SUk9fSUQoTUFDUk9TWVNURU1TX0dFUk1BTlksIDB4MTAsIDApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBaT1JST19QUk9EX01BQ1JPU1lTVEVNU19WTEFCX01PVElPTiBaT1JST19JRChNQUNST1NZU1RFTVNfR0VSTUFOWSwgMHgxMiwgMCkKICNkZWZpbmUgWk9SUk9fUFJPRF9NQUNST1NZU1RFTVNfQUxUQUlTIFpPUlJPX0lEKE1BQ1JPU1lTVEVNU19HRVJNQU5ZLCAweDEzLCAwKQogI2RlZmluZSBaT1JST19QUk9EX01BQ1JPU1lTVEVNU19GQUxDT05fMDQwIFpPUlJPX0lEKE1BQ1JPU1lTVEVNU19HRVJNQU5ZLCAweEZELCAwKQotCiAjZGVmaW5lIFpPUlJPX01BTlVGX0NPTUJJVEVDIDB4Njc2NgotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBaT1JST19NQU5VRl9TS0lfUEVSSVBIRVJBTFMgMHg4MDAwCiAjZGVmaW5lIFpPUlJPX1BST0RfU0tJX1BFUklQSEVSQUxTX01BU1RfRklSRUJBTEwgWk9SUk9fSUQoU0tJX1BFUklQSEVSQUxTLCAweDA4LCAwKQogI2RlZmluZSBaT1JST19QUk9EX1NLSV9QRVJJUEhFUkFMU19TQ1NJX0RVQUxfU0VSSUFMIFpPUlJPX0lEKFNLSV9QRVJJUEhFUkFMUywgMHg4MCwgMCkKLQogI2RlZmluZSBaT1JST19NQU5VRl9SRUlTX1dBUkVfMiAweEE5QUQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFpPUlJPX1BST0RfUkVJU19XQVJFX1NDQU5fS0lORyBaT1JST19JRChSRUlTX1dBUkVfMiwgMHgxMSwgMCkKLQogI2RlZmluZSBaT1JST19NQU5VRl9DQU1FUk9OIDB4QUEwMQogI2RlZmluZSBaT1JST19QUk9EX0NBTUVST05fUEVSU09OQUxfQTQgWk9SUk9fSUQoQ0FNRVJPTiwgMHgxMCwgMCkKLQogI2RlZmluZSBaT1JST19NQU5VRl9SRUlTX1dBUkUgMHhBQTExCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBaT1JST19QUk9EX1JFSVNfV0FSRV9IQU5EWVNDQU5ORVIgWk9SUk9fSUQoUkVJU19XQVJFLCAweDExLCAwKQotCiAjZGVmaW5lIFpPUlJPX01BTlVGX1BIT0VOSVhfMiAweEI1QTgKICNkZWZpbmUgWk9SUk9fUFJPRF9QSE9FTklYX1NUNTA2XzIgWk9SUk9fSUQoUEhPRU5JWF8yLCAweDIxLCAwKQogI2RlZmluZSBaT1JST19QUk9EX1BIT0VOSVhfU0NTSV8yIFpPUlJPX0lEKFBIT0VOSVhfMiwgMHgyMiwgMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFpPUlJPX1BST0RfUEhPRU5JWF9SQU1fMiBaT1JST19JRChQSE9FTklYXzIsIDB4QkUsIDApCi0KICNkZWZpbmUgWk9SUk9fTUFOVUZfQ09NQklURUNfMiAweEMwMDgKICNkZWZpbmUgWk9SUk9fUFJPRF9DT01CSVRFQ19IRCBaT1JST19JRChDT01CSVRFQ18yLCAweDJBLCAwKQogI2RlZmluZSBaT1JST19QUk9EX0NPTUJJVEVDX1NSQU0gWk9SUk9fSUQoQ09NQklURUNfMiwgMHgyQiwgMCkKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgWk9SUk9fTUFOVUZfSEFDS0VSIDB4MDdEQgogI2RlZmluZSBaT1JST19QUk9EX0dFTkVSQUxfUFJPVE9UWVBFIFpPUlJPX0lEKEhBQ0tFUiwgMHgwMCwgMCkKICNkZWZpbmUgWk9SUk9fUFJPRF9IQUNLRVJfU0NTSSBaT1JST19JRChIQUNLRVIsIDB4MDEsIDApCiAjZGVmaW5lIFpPUlJPX1BST0RfUkVTT1VSQ0VfTUFOQUdFTUVOVF9GT1JDRV9RVUlDS05FVF9RTjIwMDAgWk9SUk9fSUQoSEFDS0VSLCAweDAyLCAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgWk9SUk9fUFJPRF9WRUNUT1JfQ09OTkVDVElPTl8yIFpPUlJPX0lEKEhBQ0tFUiwgMHhFMCwgMCkKICNkZWZpbmUgWk9SUk9fUFJPRF9WRUNUT1JfQ09OTkVDVElPTl8zIFpPUlJPX0lEKEhBQ0tFUiwgMHhFMSwgMCkKICNkZWZpbmUgWk9SUk9fUFJPRF9WRUNUT1JfQ09OTkVDVElPTl80IFpPUlJPX0lEKEhBQ0tFUiwgMHhFMiwgMCkKICNkZWZpbmUgWk9SUk9fUFJPRF9WRUNUT1JfQ09OTkVDVElPTl81IFpPUlJPX0lEKEhBQ0tFUiwgMHhFMywgMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbWVkaWEvbXNtX2NhbWVyYS5oIGIvbGliYy9rZXJuZWwvY29tbW9uL21lZGlhL21zbV9jYW1lcmEuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmU0NDQ5Yy4uMDAwMDAwMAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vbWVkaWEvbXNtX2NhbWVyYS5oCisrKyAvZGV2L251bGwKQEAgLTEsNDEyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoqKgotICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgotICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KLSAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAotICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCi0gKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KLSAqKioKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSNpZm5kZWYgX19MSU5VWF9NU01fQ0FNRVJBX0gKLSNkZWZpbmUgX19MSU5VWF9NU01fQ0FNRVJBX0gKLQotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8YXNtL3NpemVzLmg+Ci0jaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KLQotI2RlZmluZSBNU01fQ0FNX0lPQ1RMX01BR0lDICdtJwotCi0jZGVmaW5lIE1TTV9DQU1fSU9DVExfR0VUX1NFTlNPUl9JTkZPICAgX0lPUihNU01fQ0FNX0lPQ1RMX01BR0lDLCAxLCBzdHJ1Y3QgbXNtX2NhbXNlbnNvcl9pbmZvICopCi0KLSNkZWZpbmUgTVNNX0NBTV9JT0NUTF9SRUdJU1RFUl9QTUVNICAgX0lPVyhNU01fQ0FNX0lPQ1RMX01BR0lDLCAyLCBzdHJ1Y3QgbXNtX3BtZW1faW5mbyAqKQotCi0jZGVmaW5lIE1TTV9DQU1fSU9DVExfVU5SRUdJU1RFUl9QTUVNICAgX0lPVyhNU01fQ0FNX0lPQ1RMX01BR0lDLCAzLCB1bnNpZ25lZCkKLQotI2RlZmluZSBNU01fQ0FNX0lPQ1RMX0NUUkxfQ09NTUFORCAgIF9JT1coTVNNX0NBTV9JT0NUTF9NQUdJQywgNCwgc3RydWN0IG1zbV9jdHJsX2NtZCAqKQotCi0jZGVmaW5lIE1TTV9DQU1fSU9DVExfQ09ORklHX1ZGRSAgIF9JT1coTVNNX0NBTV9JT0NUTF9NQUdJQywgNSwgc3RydWN0IG1zbV9jYW1lcmFfdmZlX2NmZ19jbWQgKikKLQotI2RlZmluZSBNU01fQ0FNX0lPQ1RMX0dFVF9TVEFUUyAgIF9JT1IoTVNNX0NBTV9JT0NUTF9NQUdJQywgNiwgc3RydWN0IG1zbV9jYW1lcmFfc3RhdHNfZXZlbnRfY3RybCAqKQotCi0jZGVmaW5lIE1TTV9DQU1fSU9DVExfR0VURlJBTUUgICBfSU9SKE1TTV9DQU1fSU9DVExfTUFHSUMsIDcsIHN0cnVjdCBtc21fY2FtZXJhX2dldF9mcmFtZSAqKQotCi0jZGVmaW5lIE1TTV9DQU1fSU9DVExfRU5BQkxFX1ZGRSAgIF9JT1coTVNNX0NBTV9JT0NUTF9NQUdJQywgOCwgc3RydWN0IGNhbWVyYV9lbmFibGVfY21kICopCi0KLSNkZWZpbmUgTVNNX0NBTV9JT0NUTF9DVFJMX0NNRF9ET05FICAgX0lPVyhNU01fQ0FNX0lPQ1RMX01BR0lDLCA5LCBzdHJ1Y3QgY2FtZXJhX2NtZCAqKQotCi0jZGVmaW5lIE1TTV9DQU1fSU9DVExfQ09ORklHX0NNRCAgIF9JT1coTVNNX0NBTV9JT0NUTF9NQUdJQywgMTAsIHN0cnVjdCBjYW1lcmFfY21kICopCi0KLSNkZWZpbmUgTVNNX0NBTV9JT0NUTF9ESVNBQkxFX1ZGRSAgIF9JT1coTVNNX0NBTV9JT0NUTF9NQUdJQywgMTEsIHN0cnVjdCBjYW1lcmFfZW5hYmxlX2NtZCAqKQotCi0jZGVmaW5lIE1TTV9DQU1fSU9DVExfUEFEX1JFR19SRVNFVDIgICBfSU9XKE1TTV9DQU1fSU9DVExfTUFHSUMsIDEyLCBzdHJ1Y3QgY2FtZXJhX2VuYWJsZV9jbWQgKikKLQotI2RlZmluZSBNU01fQ0FNX0lPQ1RMX1ZGRV9BUFBTX1JFU0VUICAgX0lPVyhNU01fQ0FNX0lPQ1RMX01BR0lDLCAxMywgc3RydWN0IGNhbWVyYV9lbmFibGVfY21kICopCi0KLSNkZWZpbmUgTVNNX0NBTV9JT0NUTF9SRUxFQVNFX0ZSQU1FX0JVRkZFUiAgIF9JT1coTVNNX0NBTV9JT0NUTF9NQUdJQywgMTQsIHN0cnVjdCBjYW1lcmFfZW5hYmxlX2NtZCAqKQotCi0jZGVmaW5lIE1TTV9DQU1fSU9DVExfUkVMRUFTRV9TVEFUU19CVUZGRVIgICBfSU9XKE1TTV9DQU1fSU9DVExfTUFHSUMsIDE1LCBzdHJ1Y3QgbXNtX3N0YXRzX2J1ZiAqKQotCi0jZGVmaW5lIE1TTV9DQU1fSU9DVExfQVhJX0NPTkZJRyAgIF9JT1coTVNNX0NBTV9JT0NUTF9NQUdJQywgMTYsIHN0cnVjdCBtc21fY2FtZXJhX3ZmZV9jZmdfY21kICopCi0KLSNkZWZpbmUgTVNNX0NBTV9JT0NUTF9HRVRfUElDVFVSRSAgIF9JT1coTVNNX0NBTV9JT0NUTF9NQUdJQywgMTcsIHN0cnVjdCBtc21fY2FtZXJhX2N0cmxfY21kICopCi0KLSNkZWZpbmUgTVNNX0NBTV9JT0NUTF9TRVRfQ1JPUCAgIF9JT1coTVNNX0NBTV9JT0NUTF9NQUdJQywgMTgsIHN0cnVjdCBjcm9wX2luZm8gKikKLQotI2RlZmluZSBNU01fQ0FNX0lPQ1RMX1BQICAgX0lPVyhNU01fQ0FNX0lPQ1RMX01BR0lDLCAxOSwgdWludDhfdCAqKQotCi0jZGVmaW5lIE1TTV9DQU1fSU9DVExfUFBfRE9ORSAgIF9JT1coTVNNX0NBTV9JT0NUTF9NQUdJQywgMjAsIHN0cnVjdCBtc21fc25hcHNob3RfcHBfc3RhdHVzICopCi0KLSNkZWZpbmUgTVNNX0NBTV9JT0NUTF9TRU5TT1JfSU9fQ0ZHICAgX0lPVyhNU01fQ0FNX0lPQ1RMX01BR0lDLCAyMSwgc3RydWN0IHNlbnNvcl9jZmdfZGF0YSAqKQotCi0jZGVmaW5lIE1TTV9DQU1FUkFfTEVEX09GRiAwCi0jZGVmaW5lIE1TTV9DQU1FUkFfTEVEX0xPVyAxCi0jZGVmaW5lIE1TTV9DQU1FUkFfTEVEX0hJR0ggMgotCi0jZGVmaW5lIE1TTV9DQU1fSU9DVExfRkxBU0hfTEVEX0NGRyAgIF9JT1coTVNNX0NBTV9JT0NUTF9NQUdJQywgMjIsIHVuc2lnbmVkICopCi0KLSNkZWZpbmUgTVNNX0NBTV9JT0NUTF9VTkJMT0NLX1BPTExfRlJBTUUgICBfSU8oTVNNX0NBTV9JT0NUTF9NQUdJQywgMjMpCi0KLSNkZWZpbmUgTVNNX0NBTV9JT0NUTF9DVFJMX0NPTU1BTkRfMiAgIF9JT1coTVNNX0NBTV9JT0NUTF9NQUdJQywgMjQsIHN0cnVjdCBtc21fY3RybF9jbWQgKikKLQotI2RlZmluZSBNU01fQ0FNX0lPQ1RMX0VOQUJMRV9PVVRQVVRfSU5EICAgX0lPVyhNU01fQ0FNX0lPQ1RMX01BR0lDLCAyNSwgdWludDMyX3QgKikKLQotI2RlZmluZSBNU01fQ0FNX0lPQ1RMX0FGX0NUUkwgICBfSU9SKE1TTV9DQU1fSU9DVExfTUFHSUMsIDI2LCBzdHJ1Y3QgbXNtX2N0cmxfY210X3QgKikKLSNkZWZpbmUgTVNNX0NBTV9JT0NUTF9BRl9DVFJMX0RPTkUgICBfSU9XKE1TTV9DQU1fSU9DVExfTUFHSUMsIDI3LCBzdHJ1Y3QgbXNtX2N0cmxfY210X3QgKikKLQotI2RlZmluZSBNQVhfU0VOU09SX05VTSAzCi0jZGVmaW5lIE1BWF9TRU5TT1JfTkFNRSAzMgotCi0jZGVmaW5lIFBQX1NOQVAgMQotI2RlZmluZSBQUF9SQVdfU05BUCAoMTw8MSkKLSNkZWZpbmUgUFBfUFJFViAoMTw8MikKLSNkZWZpbmUgUFBfTUFTSyAoUFBfU05BUHxQUF9SQVdfU05BUHxQUF9QUkVWKQotCi0jZGVmaW5lIE1TTV9DQU1fQ1RSTF9DTURfRE9ORSAwCi0jZGVmaW5lIE1TTV9DQU1fU0VOU09SX1ZGRV9DTUQgMQotCi1zdHJ1Y3QgbXNtX2N0cmxfY21kIHsKLSB1aW50MTZfdCB0eXBlOwotIHVpbnQxNl90IGxlbmd0aDsKLSB2b2lkICp2YWx1ZTsKLSB1aW50MTZfdCBzdGF0dXM7Ci0gdWludDMyX3QgdGltZW91dF9tczsKLSBpbnQgcmVzcF9mZDsKLX07Ci0KLXN0cnVjdCBtc21fdmZlX2V2dF9tc2cgewotIHVuc2lnbmVkIHNob3J0IHR5cGU7Ci0gdW5zaWduZWQgc2hvcnQgbXNnX2lkOwotIHVuc2lnbmVkIGludCBsZW47Ci0gdm9pZCAqZGF0YTsKLX07Ci0KLSNkZWZpbmUgTVNNX0NBTV9SRVNQX0NUUkwgMAotI2RlZmluZSBNU01fQ0FNX1JFU1BfU1RBVF9FVlRfTVNHIDEKLSNkZWZpbmUgTVNNX0NBTV9SRVNQX1Y0TDIgMgotI2RlZmluZSBNU01fQ0FNX1JFU1BfTUFYIDMKLQotc3RydWN0IG1zbV9zdGF0c19ldmVudF9jdHJsIHsKLQotIGludCByZXNwdHlwZTsKLSBpbnQgdGltZW91dF9tczsKLSBzdHJ1Y3QgbXNtX2N0cmxfY21kIGN0cmxfY21kOwotCi0gc3RydWN0IG1zbV92ZmVfZXZ0X21zZyBzdGF0c19ldmVudDsKLX07Ci0KLXN0cnVjdCBtc21fY2FtZXJhX2NmZ19jbWQgewotCi0gdWludDE2X3QgY2ZnX3R5cGU7Ci0KLSB1aW50MTZfdCBjbWRfdHlwZTsKLSB1aW50MTZfdCBxdWV1ZTsKLSB1aW50MTZfdCBsZW5ndGg7Ci0gdm9pZCAqdmFsdWU7Ci19OwotCi0jZGVmaW5lIENNRF9HRU5FUkFMIDAKLSNkZWZpbmUgQ01EX0FYSV9DRkdfT1VUMSAxCi0jZGVmaW5lIENNRF9BWElfQ0ZHX1NOQVBfTzFfQU5EX08yIDIKLSNkZWZpbmUgQ01EX0FYSV9DRkdfT1VUMiAzCi0jZGVmaW5lIENNRF9QSUNUX1RfQVhJX0NGRyA0Ci0jZGVmaW5lIENNRF9QSUNUX01fQVhJX0NGRyA1Ci0jZGVmaW5lIENNRF9SQVdfUElDVF9BWElfQ0ZHIDYKLSNkZWZpbmUgQ01EX1NUQVRTX0FYSV9DRkcgNwotI2RlZmluZSBDTURfU1RBVFNfQUZfQVhJX0NGRyA4Ci0jZGVmaW5lIENNRF9GUkFNRV9CVUZfUkVMRUFTRSA5Ci0jZGVmaW5lIENNRF9QUkVWX0JVRl9DRkcgMTAKLSNkZWZpbmUgQ01EX1NOQVBfQlVGX1JFTEVBU0UgMTEKLSNkZWZpbmUgQ01EX1NOQVBfQlVGX0NGRyAxMgotI2RlZmluZSBDTURfU1RBVFNfRElTQUJMRSAxMwotI2RlZmluZSBDTURfU1RBVFNfQUVDX0FXQl9FTkFCTEUgMTQKLSNkZWZpbmUgQ01EX1NUQVRTX0FGX0VOQUJMRSAxNQotI2RlZmluZSBDTURfU1RBVFNfQlVGX1JFTEVBU0UgMTYKLSNkZWZpbmUgQ01EX1NUQVRTX0FGX0JVRl9SRUxFQVNFIDE3Ci0jZGVmaW5lIENNRF9TVEFUU19FTkFCTEUgMTgKLSNkZWZpbmUgVVBEQVRFX1NUQVRTX0lOVkFMSUQgMTkKLQotI2RlZmluZSBDTURfU1RBVFNfQUVDX0VOQUJMRSAyMAotI2RlZmluZSBDTURfU1RBVFNfQVdCX0VOQUJMRSAyMQotI2RlZmluZSBDTURfU1RBVFNfQUVDX0FYSV9DRkcgMjIKLSNkZWZpbmUgQ01EX1NUQVRTX0FXQl9BWElfQ0ZHIDIzCi0jZGVmaW5lIENNRF9TVEFUU19SU19BWElfQ0ZHIDI0Ci0jZGVmaW5lIENNRF9TVEFUU19DU19BWElfQ0ZHIDI1Ci0jZGVmaW5lIENNRF9TVEFUU19JSElTVF9BWElfQ0ZHIDI2Ci0jZGVmaW5lIENNRF9TVEFUU19TS0lOX0FYSV9DRkcgMjcKLSNkZWZpbmUgQ01EX1NUQVRTX0FFQ19CVUZfUkVMRUFTRSAyOAotI2RlZmluZSBDTURfU1RBVFNfQVdCX0JVRl9SRUxFQVNFIDI5Ci0jZGVmaW5lIENNRF9TVEFUU19SU19CVUZfUkVMRUFTRSAzMAotI2RlZmluZSBDTURfU1RBVFNfQ1NfQlVGX1JFTEVBU0UgMzEKLSNkZWZpbmUgQ01EX1NUQVRTX0lISVNUX0JVRl9SRUxFQVNFIDMyCi0jZGVmaW5lIENNRF9TVEFUU19TS0lOX0JVRl9SRUxFQVNFIDMzCi0KLSNkZWZpbmUgQ01EX0FYSV9DRkdfU05BUF9HRU1JTkkgMzQKLSNkZWZpbmUgQ01EX0FYSV9DRkdfU05BUCAzNQotI2RlZmluZSBDTURfQVhJX0NGR19QUkVWSUVXIDM2Ci0jZGVmaW5lIENNRF9BWElfQ0ZHX1ZJREVPIDM3Ci0KLSNkZWZpbmUgQ01EX1NUQVRTX0lISVNUX0VOQUJMRSAzOAotI2RlZmluZSBDTURfU1RBVFNfUlNfRU5BQkxFIDM5Ci0jZGVmaW5lIENNRF9TVEFUU19DU19FTkFCTEUgNDAKLSNkZWZpbmUgQ01EX0FYSV9DRkdfTzFfQU5EX08yIDQxICAKLQotc3RydWN0IG1zbV92ZmVfY2ZnX2NtZCB7Ci0gaW50IGNtZF90eXBlOwotIHVpbnQxNl90IGxlbmd0aDsKLSB2b2lkICp2YWx1ZTsKLX07Ci0KLSNkZWZpbmUgTUFYX0NBTUVSQV9FTkFCTEVfTkFNRV9MRU4gMzIKLXN0cnVjdCBjYW1lcmFfZW5hYmxlX2NtZCB7Ci0gY2hhciBuYW1lW01BWF9DQU1FUkFfRU5BQkxFX05BTUVfTEVOXTsKLX07Ci0KLSNkZWZpbmUgTVNNX1BNRU1fT1VUUFVUMSAwCi0jZGVmaW5lIE1TTV9QTUVNX09VVFBVVDIgMQotI2RlZmluZSBNU01fUE1FTV9PVVRQVVQxX09VVFBVVDIgMgotI2RlZmluZSBNU01fUE1FTV9USFVNQk5BSUwgMwotI2RlZmluZSBNU01fUE1FTV9NQUlOSU1HIDQKLSNkZWZpbmUgTVNNX1BNRU1fUkFXX01BSU5JTUcgNQotI2RlZmluZSBNU01fUE1FTV9BRUNfQVdCIDYKLSNkZWZpbmUgTVNNX1BNRU1fQUYgNwotI2RlZmluZSBNU01fUE1FTV9BRUMgOAotI2RlZmluZSBNU01fUE1FTV9BV0IgOQotI2RlZmluZSBNU01fUE1FTV9SUyAxMAotI2RlZmluZSBNU01fUE1FTV9DUyAxMQotI2RlZmluZSBNU01fUE1FTV9JSElTVCAxMgotI2RlZmluZSBNU01fUE1FTV9TS0lOIDEzCi0jZGVmaW5lIE1TTV9QTUVNX1ZJREVPIDE0Ci0jZGVmaW5lIE1TTV9QTUVNX1BSRVZJRVcgMTUKLSNkZWZpbmUgTVNNX1BNRU1fTUFYIDE2Ci0KLSNkZWZpbmUgRlJBTUVfUFJFVklFV19PVVRQVVQxIDAKLSNkZWZpbmUgRlJBTUVfUFJFVklFV19PVVRQVVQyIDEKLSNkZWZpbmUgRlJBTUVfU05BUFNIT1QgMgotI2RlZmluZSBGUkFNRV9USFVNQk5BSUwgMwotI2RlZmluZSBGUkFNRV9SQVdfU05BUFNIT1QgNAotI2RlZmluZSBGUkFNRV9NQVggNQotCi1zdHJ1Y3QgbXNtX3BtZW1faW5mbyB7Ci0gaW50IHR5cGU7Ci0gaW50IGZkOwotIHZvaWQgKnZhZGRyOwotIHVpbnQzMl90IG9mZnNldDsKLSB1aW50MzJfdCBsZW47Ci0gdWludDMyX3QgeV9vZmY7Ci0gdWludDMyX3QgY2Jjcl9vZmY7Ci0gdWludDhfdCB2ZmVfY2FuX3dyaXRlOwotfTsKLQotc3RydWN0IG91dHB1dENmZyB7Ci0gdWludDMyX3QgaGVpZ2h0OwotIHVpbnQzMl90IHdpZHRoOwotCi0gdWludDMyX3Qgd2luZG93X2hlaWdodF9maXJzdGxpbmU7Ci0gdWludDMyX3Qgd2luZG93X2hlaWdodF9sYXN0bGluZTsKLX07Ci0KLSNkZWZpbmUgT1VUUFVUXzEgMAotI2RlZmluZSBPVVRQVVRfMiAxCi0jZGVmaW5lIE9VVFBVVF8xX0FORF8yIDIKLSNkZWZpbmUgQ0FNSUZfVE9fQVhJX1ZJQV9PVVRQVVRfMiAzCi0jZGVmaW5lIE9VVFBVVF8xX0FORF9DQU1JRl9UT19BWElfVklBX09VVFBVVF8yIDQKLSNkZWZpbmUgT1VUUFVUXzJfQU5EX0NBTUlGX1RPX0FYSV9WSUFfT1VUUFVUXzEgNQotI2RlZmluZSBPVVRQVVRfMV9BTkRfMyA2Ci0jZGVmaW5lIExBU1RfQVhJX09VVFBVVF9NT0RFX0VOVU0gPSBPVVRQVVRfMV9BTkRfMyA3ICAKLQotI2RlZmluZSBNU01fRlJBTUVfUFJFVl8xIDAKLSNkZWZpbmUgTVNNX0ZSQU1FX1BSRVZfMiAxCi0jZGVmaW5lIE1TTV9GUkFNRV9FTkMgMgotCi0jZGVmaW5lIE9VVFBVVF9UWVBFX1AgMQotI2RlZmluZSBPVVRQVVRfVFlQRV9UIDIKLSNkZWZpbmUgT1VUUFVUX1RZUEVfUyAzCi0jZGVmaW5lIE9VVFBVVF9UWVBFX1YgNAotCi1zdHJ1Y3QgbXNtX2ZyYW1lIHsKLSBpbnQgcGF0aDsKLSB1bnNpZ25lZCBsb25nIGJ1ZmZlcjsKLSB1aW50MzJfdCB5X29mZjsKLSB1aW50MzJfdCBjYmNyX29mZjsKLSBpbnQgZmQ7Ci0KLSB2b2lkICpjcm9waW5mbzsKLSBpbnQgY3JvcGxlbjsKLX07Ci0KLSNkZWZpbmUgU1RBVF9BRUFXIDAKLSNkZWZpbmUgU1RBVF9BRiAxCi0jZGVmaW5lIFNUQVRfQUVDIDIKLSNkZWZpbmUgU1RBVF9BV0IgMwotI2RlZmluZSBTVEFUX1JTIDQKLSNkZWZpbmUgU1RBVF9DUyA1Ci0jZGVmaW5lIFNUQVRfSUhJU1QgNgotI2RlZmluZSBTVEFUX1NLSU4gNwotI2RlZmluZSBTVEFUX01BWCA4Ci0KLXN0cnVjdCBtc21fc3RhdHNfYnVmIHsKLSBpbnQgdHlwZTsKLSB1bnNpZ25lZCBsb25nIGJ1ZmZlcjsKLSBpbnQgZmQ7Ci19OwotCi0jZGVmaW5lIE1TTV9WNEwyX1ZJRF9DQVBfVFlQRSAwCi0jZGVmaW5lIE1TTV9WNEwyX1NUUkVBTV9PTiAxCi0jZGVmaW5lIE1TTV9WNEwyX1NUUkVBTV9PRkYgMgotI2RlZmluZSBNU01fVjRMMl9TTkFQU0hPVCAzCi0jZGVmaW5lIE1TTV9WNEwyX1FVRVJZX0NUUkwgNAotI2RlZmluZSBNU01fVjRMMl9HRVRfQ1RSTCA1Ci0jZGVmaW5lIE1TTV9WNEwyX1NFVF9DVFJMIDYKLSNkZWZpbmUgTVNNX1Y0TDJfUVVFUlkgNwotI2RlZmluZSBNU01fVjRMMl9NQVggOAotCi1zdHJ1Y3QgY3JvcF9pbmZvIHsKLSB2b2lkICppbmZvOwotIGludCBsZW47Ci19OwotCi1zdHJ1Y3QgbXNtX3Bvc3Rwcm9jIHsKLSBpbnQgZnRudW07Ci0gc3RydWN0IG1zbV9mcmFtZSBmdGh1bW5haWw7Ci0gaW50IGZtbnVtOwotIHN0cnVjdCBtc21fZnJhbWUgZm1haW47Ci19OwotCi1zdHJ1Y3QgbXNtX3NuYXBzaG90X3BwX3N0YXR1cyB7Ci0gdm9pZCAqc3RhdHVzOwotfTsKLQotI2RlZmluZSBDRkdfU0VUX01PREUgMAotI2RlZmluZSBDRkdfU0VUX0VGRkVDVCAxCi0jZGVmaW5lIENGR19TVEFSVCAyCi0jZGVmaW5lIENGR19QV1JfVVAgMwotI2RlZmluZSBDRkdfUFdSX0RPV04gNAotI2RlZmluZSBDRkdfV1JJVEVfRVhQT1NVUkVfR0FJTiA1Ci0jZGVmaW5lIENGR19TRVRfREVGQVVMVF9GT0NVUyA2Ci0jZGVmaW5lIENGR19NT1ZFX0ZPQ1VTIDcKLSNkZWZpbmUgQ0ZHX1JFR0lTVEVSX1RPX1JFQUxfR0FJTiA4Ci0jZGVmaW5lIENGR19SRUFMX1RPX1JFR0lTVEVSX0dBSU4gOQotI2RlZmluZSBDRkdfU0VUX0ZQUyAxMAotI2RlZmluZSBDRkdfU0VUX1BJQ1RfRlBTIDExCi0jZGVmaW5lIENGR19TRVRfQlJJR0hUTkVTUyAxMgotI2RlZmluZSBDRkdfU0VUX0NPTlRSQVNUIDEzCi0jZGVmaW5lIENGR19TRVRfWk9PTSAxNAotI2RlZmluZSBDRkdfU0VUX0VYUE9TVVJFX01PREUgMTUKLSNkZWZpbmUgQ0ZHX1NFVF9XQiAxNgotI2RlZmluZSBDRkdfU0VUX0FOVElCQU5ESU5HIDE3Ci0jZGVmaW5lIENGR19TRVRfRVhQX0dBSU4gMTgKLSNkZWZpbmUgQ0ZHX1NFVF9QSUNUX0VYUF9HQUlOIDE5Ci0jZGVmaW5lIENGR19TRVRfTEVOU19TSEFESU5HIDIwCi0jZGVmaW5lIENGR19HRVRfUElDVF9GUFMgMjEKLSNkZWZpbmUgQ0ZHX0dFVF9QUkVWX0xfUEYgMjIKLSNkZWZpbmUgQ0ZHX0dFVF9QUkVWX1BfUEwgMjMKLSNkZWZpbmUgQ0ZHX0dFVF9QSUNUX0xfUEYgMjQKLSNkZWZpbmUgQ0ZHX0dFVF9QSUNUX1BfUEwgMjUKLSNkZWZpbmUgQ0ZHX0dFVF9BRl9NQVhfU1RFUFMgMjYKLSNkZWZpbmUgQ0ZHX0dFVF9QSUNUX01BWF9FWFBfTEMgMjcKLSNkZWZpbmUgQ0ZHX01BWCAyOAotCi0jZGVmaW5lIE1PVkVfTkVBUiAwCi0jZGVmaW5lIE1PVkVfRkFSIDEKLQotI2RlZmluZSBTRU5TT1JfUFJFVklFV19NT0RFIDAKLSNkZWZpbmUgU0VOU09SX1NOQVBTSE9UX01PREUgMQotI2RlZmluZSBTRU5TT1JfUkFXX1NOQVBTSE9UX01PREUgMgotCi0jZGVmaW5lIFNFTlNPUl9RVFJfU0laRSAwCi0jZGVmaW5lIFNFTlNPUl9GVUxMX1NJWkUgMQotI2RlZmluZSBTRU5TT1JfSU5WQUxJRF9TSVpFIDIKLQotI2RlZmluZSBDQU1FUkFfRUZGRUNUX09GRiAwCi0jZGVmaW5lIENBTUVSQV9FRkZFQ1RfTU9OTyAxCi0jZGVmaW5lIENBTUVSQV9FRkZFQ1RfTkVHQVRJVkUgMgotI2RlZmluZSBDQU1FUkFfRUZGRUNUX1NPTEFSSVpFIDMKLSNkZWZpbmUgQ0FNRVJBX0VGRkVDVF9QQVNURUwgNAotI2RlZmluZSBDQU1FUkFfRUZGRUNUX01PU0FJQyA1Ci0jZGVmaW5lIENBTUVSQV9FRkZFQ1RfUkVTSVpFIDYKLSNkZWZpbmUgQ0FNRVJBX0VGRkVDVF9TRVBJQSA3Ci0jZGVmaW5lIENBTUVSQV9FRkZFQ1RfUE9TVEVSSVpFIDgKLSNkZWZpbmUgQ0FNRVJBX0VGRkVDVF9XSElURUJPQVJEIDkKLSNkZWZpbmUgQ0FNRVJBX0VGRkVDVF9CTEFDS0JPQVJEIDEwCi0jZGVmaW5lIENBTUVSQV9FRkZFQ1RfQVFVQSAxMQotI2RlZmluZSBDQU1FUkFfRUZGRUNUX01BWCAxMgotCi1zdHJ1Y3Qgc2Vuc29yX3BpY3RfZnBzIHsKLSB1aW50MTZfdCBwcmV2ZnBzOwotIHVpbnQxNl90IHBpY3RmcHM7Ci19OwotCi1zdHJ1Y3QgZXhwX2dhaW5fY2ZnIHsKLSB1aW50MTZfdCBnYWluOwotIHVpbnQzMl90IGxpbmU7Ci19OwotCi1zdHJ1Y3QgZm9jdXNfY2ZnIHsKLSBpbnQzMl90IHN0ZXBzOwotIGludCBkaXI7Ci19OwotCi1zdHJ1Y3QgZnBzX2NmZyB7Ci0gdWludDE2X3QgZl9tdWx0OwotIHVpbnQxNl90IGZwc19kaXY7Ci0gdWludDMyX3QgcGljdF9mcHNfZGl2OwotfTsKLQotc3RydWN0IHNlbnNvcl9jZmdfZGF0YSB7Ci0gaW50IGNmZ3R5cGU7Ci0gaW50IG1vZGU7Ci0gaW50IHJzOwotIHVpbnQ4X3QgbWF4X3N0ZXBzOwotCi0gdW5pb24gewotIGludDhfdCBlZmZlY3Q7Ci0gdWludDhfdCBsZW5zX3NoYWRpbmc7Ci0gdWludDE2X3QgcHJldmxfcGY7Ci0gdWludDE2X3QgcHJldnBfcGw7Ci0gdWludDE2X3QgcGljdGxfcGY7Ci0gdWludDE2X3QgcGljdHBfcGw7Ci0gdWludDMyX3QgcGljdF9tYXhfZXhwX2xjOwotIHVpbnQxNl90IHBfZnBzOwotIHN0cnVjdCBzZW5zb3JfcGljdF9mcHMgZ2ZwczsKLSBzdHJ1Y3QgZXhwX2dhaW5fY2ZnIGV4cF9nYWluOwotIHN0cnVjdCBmb2N1c19jZmcgZm9jdXM7Ci0gc3RydWN0IGZwc19jZmcgZnBzOwotIH0gY2ZnOwotfTsKLQotI2RlZmluZSBHRVRfTkFNRSAwCi0jZGVmaW5lIEdFVF9QUkVWSUVXX0xJTkVfUEVSX0ZSQU1FIDEKLSNkZWZpbmUgR0VUX1BSRVZJRVdfUElYRUxTX1BFUl9MSU5FIDIKLSNkZWZpbmUgR0VUX1NOQVBTSE9UX0xJTkVfUEVSX0ZSQU1FIDMKLSNkZWZpbmUgR0VUX1NOQVBTSE9UX1BJWEVMU19QRVJfTElORSA0Ci0jZGVmaW5lIEdFVF9TTkFQU0hPVF9GUFMgNQotI2RlZmluZSBHRVRfU05BUFNIT1RfTUFYX0VQX0xJTkVfQ05UIDYKLQotc3RydWN0IG1zbV9jYW1zZW5zb3JfaW5mbyB7Ci0gY2hhciBuYW1lW01BWF9TRU5TT1JfTkFNRV07Ci0gdWludDhfdCBmbGFzaF9lbmFibGVkOwotfTsKLSNlbmRpZgotCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbWVkaWEvb3Y1NjUwLmggYi9saWJjL2tlcm5lbC9jb21tb24vbWVkaWEvb3Y1NjUwLmgKaW5kZXggMzYwM2RjMi4uNjY1ODc4MyAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvY29tbW9uL21lZGlhL292NTY1MC5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9tZWRpYS9vdjU2NTAuaApAQCAtNyw1NyArNyw2MyBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX19PVjU2NTBfSF9fCiAjZGVmaW5lIF9fT1Y1NjUwX0hfXwotCi0jaW5jbHVkZSA8bGludXgvaW9jdGwuaD4gIAotCisjaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KICNkZWZpbmUgT1Y1NjUwX0lPQ1RMX1NFVF9NT0RFIF9JT1coJ28nLCAxLCBzdHJ1Y3Qgb3Y1NjUwX21vZGUpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBPVjU2NTBfSU9DVExfU0VUX0ZSQU1FX0xFTkdUSCBfSU9XKCdvJywgMiwgX191MzIpCiAjZGVmaW5lIE9WNTY1MF9JT0NUTF9TRVRfQ09BUlNFX1RJTUUgX0lPVygnbycsIDMsIF9fdTMyKQogI2RlZmluZSBPVjU2NTBfSU9DVExfU0VUX0dBSU4gX0lPVygnbycsIDQsIF9fdTE2KQogI2RlZmluZSBPVjU2NTBfSU9DVExfR0VUX1NUQVRVUyBfSU9SKCdvJywgNSwgX191OCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE9WNTY1MF9JT0NUTF9HRVRfT1RQIF9JT1IoJ28nLCA2LCBzdHJ1Y3Qgb3Y1NjUwX290cF9kYXRhKQogI2RlZmluZSBPVjU2NTBfSU9DVExfVEVTVF9QQVRURVJOIF9JT1coJ28nLCA3LCBlbnVtIG92NTY1MF90ZXN0X3BhdHRlcm4pCi0KIGVudW0gb3Y1NjUwX3Rlc3RfcGF0dGVybiB7CiAgVEVTVF9QQVRURVJOX05PTkUsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFRFU1RfUEFUVEVSTl9DT0xPUkJBUlMsCiAgVEVTVF9QQVRURVJOX0NIRUNLRVJCT0FSRAogfTsKLQogc3RydWN0IG92NTY1MF9vdHBfZGF0YSB7Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191OCBzZW5zb3Jfc2VyaWFsX251bVs2XTsKICBfX3U4IHBhcnRfbnVtWzhdOwogIF9fdTggbGVuc19pZFsxXTsKICBfX3U4IG1hbnVmYWN0dXJlX2lkWzJdOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IGZhY3RvcnlfaWRbMl07CiAgX191OCBtYW51ZmFjdHVyZV9kYXRlWzldOwogIF9fdTggbWFudWZhY3R1cmVfbGluZVsyXTsKLQogIF9fdTMyIG1vZHVsZV9zZXJpYWxfbnVtOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IGZvY3VzZXJfbGlmdG9mZlsyXTsKICBfX3U4IGZvY3VzZXJfbWFjcm9bMl07CiAgX191OCByZXNlcnZlZDFbMTJdOwogIF9fdTggc2h1dHRlcl9jYWxbMTZdOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3U4IHJlc2VydmVkMlsxODNdOwotCiAgX191MTYgY3JjOwogIF9fdTggcmVzZXJ2ZWQzWzNdOwogIF9fdTggYXV0b19sb2FkWzJdOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCiBzdHJ1Y3Qgb3Y1NjUwX21vZGUgewogIGludCB4cmVzOwogIGludCB5cmVzOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBfX3UzMiBmcmFtZV9sZW5ndGg7CiAgX191MzIgY29hcnNlX3RpbWU7CiAgX191MTYgZ2FpbjsKIH07Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZW5kaWYKLQotCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbWVkaWEvc29jMjAzMC5oIGIvbGliYy9rZXJuZWwvY29tbW9uL21lZGlhL3NvYzIwMzAuaAppbmRleCA4NTBhYjEzLi5kNjFiZTM2IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vbWVkaWEvc29jMjAzMC5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9tZWRpYS9zb2MyMDMwLmgKQEAgLTcsMTAwICs3LDExNCBAQAogICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCiAgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KICAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgX19TT0MyMDMwX0hfXwogI2RlZmluZSBfX1NPQzIwMzBfSF9fCi0KICNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgotCiAjZGVmaW5lIFNPQzIwMzBfSU9DVExfU0VUX01PREUgX0lPV1IoJ28nLCAxLCBzdHJ1Y3Qgc29jMjAzMF9tb2RlKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU09DMjAzMF9JT0NUTF9HRVRfU1RBVFVTIF9JT0MoX0lPQ19SRUFELCAnbycsIDIsIDEwKQogI2RlZmluZSBTT0MyMDMwX0lPQ1RMX1NFVF9QUklWQVRFIF9JT1dSKCdvJywgMywgc3RydWN0IHNvYzIwMzBfcmVncykKICNkZWZpbmUgU09DMjAzMF9JT0NUTF9HRVRfTU9ERVMgX0lPKCdvJywgNCkKICNkZWZpbmUgU09DMjAzMF9JT0NUTF9HRVRfTlVNX01PREVTIF9JT1IoJ28nLCA1LCB1bnNpZ25lZCBpbnQpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTT0MyMDMwX0lPQ1RMX1NFVF9FRkZFQ1QgX0lPV1IoJ28nLCA2LCB1bnNpZ25lZCBpbnQpCiAjZGVmaW5lIFNPQzIwMzBfSU9DVExfU0VUX1dISVRFQkFMQU5DRSBfSU9XUignbycsIDcsIHVuc2lnbmVkIGludCkKICNkZWZpbmUgU09DMjAzMF9JT0NUTF9TRVRfRVhQX0NPTVAgX0lPV1IoJ28nLCA4LCBpbnQpCiAjZGVmaW5lIFNPQzIwMzBfSU9DVExfU0VUX0xPQ0sgX0lPV1IoJ28nLCA5LCBzdHJ1Y3Qgc29jMjAzMF9sb2NrKQotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTT0MyMDMwX1BPTExfV0FJVE1TIDUwCiAjZGVmaW5lIFNPQzIwMzBfTUFYX1JFVFJJRVMgMwogI2RlZmluZSBTT0MyMDMwX1BPTExfUkVUUklFUyA3Ci0KICNkZWZpbmUgU09DMjAzMF9NQVhfUFJJVkFURV9TSVpFIDEwMjQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNPQzIwMzBfTUFYX05VTV9NT0RFUyA2Ci0KICNkZWZpbmUgU09DX0VWX01BWCAyCiAjZGVmaW5lIFNPQ19FVl9NSU4gLTIKICNkZWZpbmUgRVhQX1RBUkdFVCAweDMyCi0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBlbnVtIHsKICBSRUdfVEFCTEVfRU5ELAogIFdSSVRFX1JFR19EQVRBLAogIFdSSVRFX1JFR19CSVRfSCwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgV1JJVEVfUkVHX0JJVF9MLAogIFBPTExfUkVHX0RBVEEsCiAgUE9MTF9SRUdfQklUX0gsCiAgUE9MTF9SRUdfQklUX0wsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFdSSVRFX1ZBUl9EQVRBLAogIFBPTExfVkFSX0RBVEEsCiAgREVMQVlfTVMsCiAgV1JJVEVfUkVHX1ZBUjEsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFdSSVRFX1JFR19WQVIyLAogIFdSSVRFX1JFR19WQVIzLAogIFdSSVRFX1JFR19WQVI0LAogIFJFQURfUkVHX1ZBUjEsCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIFJFQURfUkVHX1ZBUjIsCiAgUkVBRF9SRUdfVkFSMywKICBSRUFEX1JFR19WQVI0LAogfTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgUkVHX1ZBUjEgKFJFQURfUkVHX1ZBUjEgLSBSRUFEX1JFR19WQVIxKQogI2RlZmluZSBSRUdfVkFSMiAoUkVBRF9SRUdfVkFSMiAtIFJFQURfUkVHX1ZBUjEpCiAjZGVmaW5lIFJFR19WQVIzIChSRUFEX1JFR19WQVIzIC0gUkVBRF9SRUdfVkFSMSkKICNkZWZpbmUgUkVHX1ZBUjQgKFJFQURfUkVHX1ZBUjQgLSBSRUFEX1JFR19WQVIxKQotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogZW51bSB7CiAgRUZGRUNUX05PTkUsCiAgRUZGRUNUX0JXLAogIEVGRkVDVF9ORUdBVElWRSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgRUZGRUNUX1BPU1RFUklaRSwKICBFRkZFQ1RfU0VQSUEsCiAgRUZGRUNUX1NPTEFSSVpFLAogIEVGRkVDVF9BUVVBLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBFRkZFQ1RfTUFYLAogfTsKLQogZW51bSB7CiAgV0JfQVVUTywKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgV0JfSU5DQU5ERVNDRU5ULAogIFdCX0ZMVU9SRVNDRU5ULAogIFdCX0RBWUxJR0hULAogIFdCX0NMT1VEWURBWUxJR0hULAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBXQl9OSUdIVCwKICBXQl9NQVgsCiB9OwotCiBzdHJ1Y3Qgc29jMjAzMF9yZWdzIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgX191OCBvcDsKICBfX3UxNiBhZGRyOwogIF9fdTE2IHZhbDsKIH07Ci0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3Qgc29jMjAzMF9sb2NrIHsKLSAgICAgICAgX191OCBhZWxvY2s7Ci0gICAgICAgIF9fdTggYWVyZWxvY2s7Ci0gICAgICAgIF9fdTggYXdibG9jazsKLSAgICAgICAgX191OCBhd2JyZWxvY2s7Ci0gICAgICAgIF9fdTggcHJldmlld2FjdGl2ZTsKKyBfX3U4IGFlbG9jazsKKyBfX3U4IGFlcmVsb2NrOworIF9fdTggYXdibG9jazsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191OCBhd2JyZWxvY2s7CisgX191OCBwcmV2aWV3YWN0aXZlOwogfTsKLQogc3RydWN0IHNvYzIwMzBfbW9kZSB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIGludCB4cmVzOwogIGludCB5cmVzOwogIGludCBmcHM7CiAgc3RydWN0IHNvYzIwMzBfcmVncyAqcmVnc2V0OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07Ci0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL21lZGlhL3RlZ3JhX2NhbWVyYS5oIGIvbGliYy9rZXJuZWwvY29tbW9uL21lZGlhL3RlZ3JhX2NhbWVyYS5oCmluZGV4IDBmNjMwMzUuLmJmYTZjZmIgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9tZWRpYS90ZWdyYV9jYW1lcmEuaAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbWVkaWEvdGVncmFfY2FtZXJhLmgKQEAgLTcsMjcgKzcsMzQgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBlbnVtIHsKICBURUdSQV9DQU1FUkFfTU9EVUxFX0lTUCA9IDAsCiAgVEVHUkFfQ0FNRVJBX01PRFVMRV9WSSwKICBURUdSQV9DQU1FUkFfTU9EVUxFX0NTSSwKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwotCiBlbnVtIHsKICBURUdSQV9DQU1FUkFfVklfQ0xLLAogIFRFR1JBX0NBTUVSQV9WSV9TRU5TT1JfQ0xLLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIH07Ci0KIHN0cnVjdCB0ZWdyYV9jYW1lcmFfY2xrX2luZm8gewogIHVpbnQgaWQ7CiAgdWludCBjbGtfaWQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGxvbmcgcmF0ZTsKIH07Ci0KICNkZWZpbmUgVEVHUkFfQ0FNRVJBX0lPQ1RMX0VOQUJMRSBfSU9XUignaScsIDEsIHVpbnQpCiAjZGVmaW5lIFRFR1JBX0NBTUVSQV9JT0NUTF9ESVNBQkxFIF9JT1dSKCdpJywgMiwgdWludCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFRFR1JBX0NBTUVSQV9JT0NUTF9DTEtfU0VUX1JBVEUgICBfSU9XUignaScsIDMsIHN0cnVjdCB0ZWdyYV9jYW1lcmFfY2xrX2luZm8pCiAjZGVmaW5lIFRFR1JBX0NBTUVSQV9JT0NUTF9SRVNFVCBfSU9XUignaScsIDQsIHVpbnQpCi0KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9tZWRpYS92NGwyLW1lZGlhYnVzLmggYi9saWJjL2tlcm5lbC9jb21tb24vbWVkaWEvdjRsMi1tZWRpYWJ1cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4OTYwYmUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbWVkaWEvdjRsMi1tZWRpYWJ1cy5oCkBAIC0wLDAgKzEsNjQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgVjRMMl9NRURJQUJVU19ICisjZGVmaW5lIFY0TDJfTUVESUFCVVNfSAorI2luY2x1ZGUgPGxpbnV4L3Y0bDItbWVkaWFidXMuaD4KKyNkZWZpbmUgVjRMMl9NQlVTX01BU1RFUiAoMSA8PCAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVjRMMl9NQlVTX1NMQVZFICgxIDw8IDEpCisjZGVmaW5lIFY0TDJfTUJVU19IU1lOQ19BQ1RJVkVfSElHSCAoMSA8PCAyKQorI2RlZmluZSBWNEwyX01CVVNfSFNZTkNfQUNUSVZFX0xPVyAoMSA8PCAzKQorI2RlZmluZSBWNEwyX01CVVNfVlNZTkNfQUNUSVZFX0hJR0ggKDEgPDwgNCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFY0TDJfTUJVU19WU1lOQ19BQ1RJVkVfTE9XICgxIDw8IDUpCisjZGVmaW5lIFY0TDJfTUJVU19QQ0xLX1NBTVBMRV9SSVNJTkcgKDEgPDwgNikKKyNkZWZpbmUgVjRMMl9NQlVTX1BDTEtfU0FNUExFX0ZBTExJTkcgKDEgPDwgNykKKyNkZWZpbmUgVjRMMl9NQlVTX0RBVEFfQUNUSVZFX0hJR0ggKDEgPDwgOCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFY0TDJfTUJVU19EQVRBX0FDVElWRV9MT1cgKDEgPDwgOSkKKyNkZWZpbmUgVjRMMl9NQlVTX0ZJRUxEX0VWRU5fSElHSCAoMSA8PCAxMCkKKyNkZWZpbmUgVjRMMl9NQlVTX0ZJRUxEX0VWRU5fTE9XICgxIDw8IDExKQorI2RlZmluZSBWNEwyX01CVVNfQ1NJMl8xX0xBTkUgKDEgPDwgMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFY0TDJfTUJVU19DU0kyXzJfTEFORSAoMSA8PCAxKQorI2RlZmluZSBWNEwyX01CVVNfQ1NJMl8zX0xBTkUgKDEgPDwgMikKKyNkZWZpbmUgVjRMMl9NQlVTX0NTSTJfNF9MQU5FICgxIDw8IDMpCisjZGVmaW5lIFY0TDJfTUJVU19DU0kyX0NIQU5ORUxfMCAoMSA8PCA0KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVjRMMl9NQlVTX0NTSTJfQ0hBTk5FTF8xICgxIDw8IDUpCisjZGVmaW5lIFY0TDJfTUJVU19DU0kyX0NIQU5ORUxfMiAoMSA8PCA2KQorI2RlZmluZSBWNEwyX01CVVNfQ1NJMl9DSEFOTkVMXzMgKDEgPDwgNykKKyNkZWZpbmUgVjRMMl9NQlVTX0NTSTJfQ09OVElOVU9VU19DTE9DSyAoMSA8PCA4KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVjRMMl9NQlVTX0NTSTJfTk9OQ09OVElOVU9VU19DTE9DSyAoMSA8PCA5KQorI2RlZmluZSBWNEwyX01CVVNfQ1NJMl9MQU5FUyAoVjRMMl9NQlVTX0NTSTJfMV9MQU5FIHwgVjRMMl9NQlVTX0NTSTJfMl9MQU5FIHwgICBWNEwyX01CVVNfQ1NJMl8zX0xBTkUgfCBWNEwyX01CVVNfQ1NJMl80X0xBTkUpCisjZGVmaW5lIFY0TDJfTUJVU19DU0kyX0NIQU5ORUxTIChWNEwyX01CVVNfQ1NJMl9DSEFOTkVMXzAgfCBWNEwyX01CVVNfQ1NJMl9DSEFOTkVMXzEgfCAgIFY0TDJfTUJVU19DU0kyX0NIQU5ORUxfMiB8IFY0TDJfTUJVU19DU0kyX0NIQU5ORUxfMykKK2VudW0gdjRsMl9tYnVzX3R5cGUgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBWNEwyX01CVVNfUEFSQUxMRUwsCisgVjRMMl9NQlVTX0JUNjU2LAorIFY0TDJfTUJVU19DU0kyLAorfTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCitzdHJ1Y3QgdjRsMl9tYnVzX2NvbmZpZyB7CisgZW51bSB2NGwyX21idXNfdHlwZSB0eXBlOworIHVuc2lnbmVkIGludCBmbGFnczsKK307CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbXRkL210ZC1hYmkuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9tdGQvbXRkLWFiaS5oCmluZGV4IDBhZTIyNjMuLmNiYmIxYWQgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi9tdGQvbXRkLWFiaS5oCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9tdGQvbXRkLWFiaS5oCkBAIC03LDEyNyArNywxNDAgQEAKICAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAogICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCiAgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjaWZuZGVmIF9fTVREX0FCSV9IX18KICNkZWZpbmUgX19NVERfQUJJX0hfXwotCiBzdHJ1Y3QgZXJhc2VfaW5mb191c2VyIHsKICB1aW50MzJfdCBzdGFydDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdWludDMyX3QgbGVuZ3RoOwogfTsKLQogc3RydWN0IG10ZF9vb2JfYnVmIHsKICB1aW50MzJfdCBzdGFydDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdWludDMyX3QgbGVuZ3RoOwogIHVuc2lnbmVkIGNoYXIgX191c2VyICpwdHI7CiB9OwotCiAjZGVmaW5lIE1URF9BQlNFTlQgMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTVREX1JBTSAxCiAjZGVmaW5lIE1URF9ST00gMgogI2RlZmluZSBNVERfTk9SRkxBU0ggMwogI2RlZmluZSBNVERfTkFOREZMQVNIIDQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1URF9EQVRBRkxBU0ggNgotCi0jZGVmaW5lIE1URF9XUklURUFCTEUgMHg0MDAgIAotI2RlZmluZSBNVERfQklUX1dSSVRFQUJMRSAweDgwMCAgCi0jZGVmaW5lIE1URF9OT19FUkFTRSAweDEwMDAgIAotI2RlZmluZSBNVERfU1RVUElEX0xPQ0sgMHgyMDAwICAKLQorI2RlZmluZSBNVERfV1JJVEVBQkxFIDB4NDAwCisjZGVmaW5lIE1URF9CSVRfV1JJVEVBQkxFIDB4ODAwCisjZGVmaW5lIE1URF9OT19FUkFTRSAweDEwMDAKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIE1URF9TVFVQSURfTE9DSyAweDIwMDAKICNkZWZpbmUgTVREX0NBUF9ST00gMAogI2RlZmluZSBNVERfQ0FQX1JBTSAoTVREX1dSSVRFQUJMRSB8IE1URF9CSVRfV1JJVEVBQkxFIHwgTVREX05PX0VSQVNFKQogI2RlZmluZSBNVERfQ0FQX05PUkZMQVNIIChNVERfV1JJVEVBQkxFIHwgTVREX0JJVF9XUklURUFCTEUpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBNVERfQ0FQX05BTkRGTEFTSCAoTVREX1dSSVRFQUJMRSkKLQotI2RlZmluZSBNVERfTkFOREVDQ19PRkYgMCAKLSNkZWZpbmUgTVREX05BTkRFQ0NfUExBQ0UgMSAKLSNkZWZpbmUgTVREX05BTkRFQ0NfQVVUT1BMQUNFIDIgCi0jZGVmaW5lIE1URF9OQU5ERUNDX1BMQUNFT05MWSAzIAotI2RlZmluZSBNVERfTkFOREVDQ19BVVRPUExfVVNSIDQgCi0KKyNkZWZpbmUgTVREX05BTkRFQ0NfT0ZGIDAKKyNkZWZpbmUgTVREX05BTkRFQ0NfUExBQ0UgMQorI2RlZmluZSBNVERfTkFOREVDQ19BVVRPUExBQ0UgMgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgTVREX05BTkRFQ0NfUExBQ0VPTkxZIDMKKyNkZWZpbmUgTVREX05BTkRFQ0NfQVVUT1BMX1VTUiA0CiAjZGVmaW5lIE1URF9PVFBfT0ZGIDAKICNkZWZpbmUgTVREX09UUF9GQUNUT1JZIDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1URF9PVFBfVVNFUiAyCi0KIHN0cnVjdCBtdGRfaW5mb191c2VyIHsKICB1aW50OF90IHR5cGU7CiAgdWludDMyX3QgZmxhZ3M7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVpbnQzMl90IHNpemU7CiAgdWludDMyX3QgZXJhc2VzaXplOwogIHVpbnQzMl90IHdyaXRlc2l6ZTsKICB1aW50MzJfdCBvb2JzaXplOwotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVpbnQzMl90IGVjY3R5cGU7CiAgdWludDMyX3QgZWNjc2l6ZTsKIH07Ci0KIHN0cnVjdCByZWdpb25faW5mb191c2VyIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdWludDMyX3Qgb2Zmc2V0OwogIHVpbnQzMl90IGVyYXNlc2l6ZTsKICB1aW50MzJfdCBudW1ibG9ja3M7CiAgdWludDMyX3QgcmVnaW9uaW5kZXg7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogfTsKLQogc3RydWN0IG90cF9pbmZvIHsKICB1aW50MzJfdCBzdGFydDsKICB1aW50MzJfdCBsZW5ndGg7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVpbnQzMl90IGxvY2tlZDsKIH07Ci0KICNkZWZpbmUgTUVNR0VUSU5GTyBfSU9SKCdNJywgMSwgc3RydWN0IG10ZF9pbmZvX3VzZXIpCiAjZGVmaW5lIE1FTUVSQVNFIF9JT1coJ00nLCAyLCBzdHJ1Y3QgZXJhc2VfaW5mb191c2VyKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTUVNV1JJVEVPT0IgX0lPV1IoJ00nLCAzLCBzdHJ1Y3QgbXRkX29vYl9idWYpCiAjZGVmaW5lIE1FTVJFQURPT0IgX0lPV1IoJ00nLCA0LCBzdHJ1Y3QgbXRkX29vYl9idWYpCiAjZGVmaW5lIE1FTUxPQ0sgX0lPVygnTScsIDUsIHN0cnVjdCBlcmFzZV9pbmZvX3VzZXIpCiAjZGVmaW5lIE1FTVVOTE9DSyBfSU9XKCdNJywgNiwgc3RydWN0IGVyYXNlX2luZm9fdXNlcikKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIE1FTUdFVFJFR0lPTkNPVU5UIF9JT1IoJ00nLCA3LCBpbnQpCiAjZGVmaW5lIE1FTUdFVFJFR0lPTklORk8gX0lPV1IoJ00nLCA4LCBzdHJ1Y3QgcmVnaW9uX2luZm9fdXNlcikKICNkZWZpbmUgTUVNU0VUT09CU0VMIF9JT1coJ00nLCA5LCBzdHJ1Y3QgbmFuZF9vb2JpbmZvKQogI2RlZmluZSBNRU1HRVRPT0JTRUwgX0lPUignTScsIDEwLCBzdHJ1Y3QgbmFuZF9vb2JpbmZvKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTUVNR0VUQkFEQkxPQ0sgX0lPVygnTScsIDExLCBsb2ZmX3QpCiAjZGVmaW5lIE1FTVNFVEJBREJMT0NLIF9JT1coJ00nLCAxMiwgbG9mZl90KQogI2RlZmluZSBPVFBTRUxFQ1QgX0lPUignTScsIDEzLCBpbnQpCiAjZGVmaW5lIE9UUEdFVFJFR0lPTkNPVU5UIF9JT1coJ00nLCAxNCwgaW50KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgT1RQR0VUUkVHSU9OSU5GTyBfSU9XKCdNJywgMTUsIHN0cnVjdCBvdHBfaW5mbykKICNkZWZpbmUgT1RQTE9DSyBfSU9SKCdNJywgMTYsIHN0cnVjdCBvdHBfaW5mbykKICNkZWZpbmUgRUNDR0VUTEFZT1VUIF9JT1IoJ00nLCAxNywgc3RydWN0IG5hbmRfZWNjbGF5b3V0KQogI2RlZmluZSBFQ0NHRVRTVEFUUyBfSU9SKCdNJywgMTgsIHN0cnVjdCBtdGRfZWNjX3N0YXRzKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgTVRERklMRU1PREUgX0lPKCdNJywgMTkpCi0KIHN0cnVjdCBuYW5kX29vYmluZm8gewogIHVpbnQzMl90IHVzZWVjYzsKICB1aW50MzJfdCBlY2NieXRlczsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdWludDMyX3Qgb29iZnJlZVs4XVsyXTsKICB1aW50MzJfdCBlY2Nwb3NbMzJdOwogfTsKLQogc3RydWN0IG5hbmRfb29iZnJlZSB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVpbnQzMl90IG9mZnNldDsKICB1aW50MzJfdCBsZW5ndGg7CiB9OwotCiAjZGVmaW5lIE1URF9NQVhfT09CRlJFRV9FTlRSSUVTIDgKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIHN0cnVjdCBuYW5kX2VjY2xheW91dCB7CiAgdWludDMyX3QgZWNjYnl0ZXM7CiAgdWludDMyX3QgZWNjcG9zWzY0XTsKICB1aW50MzJfdCBvb2JhdmFpbDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgc3RydWN0IG5hbmRfb29iZnJlZSBvb2JmcmVlW01URF9NQVhfT09CRlJFRV9FTlRSSUVTXTsKIH07Ci0KIHN0cnVjdCBtdGRfZWNjX3N0YXRzIHsKICB1aW50MzJfdCBjb3JyZWN0ZWQ7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVpbnQzMl90IGZhaWxlZDsKICB1aW50MzJfdCBiYWRibG9ja3M7CiAgdWludDMyX3QgYmJ0YmxvY2tzOwogfTsKLQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KIGVudW0gbXRkX2ZpbGVfbW9kZXMgewogIE1URF9NT0RFX05PUk1BTCA9IE1URF9PVFBfT0ZGLAogIE1URF9NT0RFX09UUF9GQUNUT1JZID0gTVREX09UUF9GQUNUT1JZLAogIE1URF9NT0RFX09UUF9VU0VSID0gTVREX09UUF9VU0VSLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICBNVERfTU9ERV9SQVcsCiB9OwotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9tdGQvbXRkLXVzZXIuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9tdGQvbXRkLXVzZXIuaAppbmRleCAxZDM3ZGMxLi4zM2NiNjMyIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vbXRkL210ZC11c2VyLmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL210ZC9tdGQtdXNlci5oCkBAIC03LDE5ICs3LDI0IEBACiAgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKICAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgogICoqKgorICoqKiAgIFRvIGVkaXQgdGhlIGNvbnRlbnQgb2YgdGhpcyBoZWFkZXIsIG1vZGlmeSB0aGUgY29ycmVzcG9uZGluZworICoqKiAgIHNvdXJjZSBmaWxlIChlLmcuIHVuZGVyIGV4dGVybmFsL2tlcm5lbC1oZWFkZXJzL29yaWdpbmFsLykgdGhlbgorICoqKiAgIHJ1biBiaW9uaWMvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQorICoqKgorICoqKiAgIEFueSBtYW51YWwgY2hhbmdlIGhlcmUgd2lsbCBiZSBsb3N0IHRoZSBuZXh0IHRpbWUgdGhpcyBzY3JpcHQgd2lsbAorICoqKiAgIGJlIHJ1bi4gWW91J3ZlIGJlZW4gd2FybmVkIQorICoqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmbmRlZiBfX01URF9VU0VSX0hfXwogI2RlZmluZSBfX01URF9VU0VSX0hfXwotCiAjaW5jbHVkZSA8c3RkaW50Lmg+Ci0KICNpbmNsdWRlIDxtdGQvbXRkLWFiaS5oPgotCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogdHlwZWRlZiBzdHJ1Y3QgbXRkX2luZm9fdXNlciBtdGRfaW5mb190OwogdHlwZWRlZiBzdHJ1Y3QgZXJhc2VfaW5mb191c2VyIGVyYXNlX2luZm9fdDsKIHR5cGVkZWYgc3RydWN0IHJlZ2lvbl9pbmZvX3VzZXIgcmVnaW9uX2luZm9fdDsKIHR5cGVkZWYgc3RydWN0IG5hbmRfb29iaW5mbyBuYW5kX29vYmluZm9fdDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB0eXBlZGVmIHN0cnVjdCBuYW5kX2VjY2xheW91dCBuYW5kX2VjY2xheW91dF90OwotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9zb3VuZC9hc291bmQuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9zb3VuZC9hc291bmQuaAppbmRleCAxMGM3NDljLi4yODAyNjkzIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC9jb21tb24vc291bmQvYXNvdW5kLmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL3NvdW5kL2Fzb3VuZC5oCkBAIC0xMjEsMTIgKzEyMSwxMiBAQAogfTsKIHR5cGVkZWYgaW50IF9fYml0d2lzZSBzbmRfcGNtX2FjY2Vzc190OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgU05EUlZfUENNX0FDQ0VTU19NTUFQX0lOVEVSTEVBVkVEICgoX19mb3JjZSBzbmRfcGNtX2FjY2Vzc190KSAwKSAgCi0jZGVmaW5lIFNORFJWX1BDTV9BQ0NFU1NfTU1BUF9OT05JTlRFUkxFQVZFRCAoKF9fZm9yY2Ugc25kX3BjbV9hY2Nlc3NfdCkgMSkgIAotI2RlZmluZSBTTkRSVl9QQ01fQUNDRVNTX01NQVBfQ09NUExFWCAoKF9fZm9yY2Ugc25kX3BjbV9hY2Nlc3NfdCkgMikgIAotI2RlZmluZSBTTkRSVl9QQ01fQUNDRVNTX1JXX0lOVEVSTEVBVkVEICgoX19mb3JjZSBzbmRfcGNtX2FjY2Vzc190KSAzKSAgCisjZGVmaW5lIFNORFJWX1BDTV9BQ0NFU1NfTU1BUF9JTlRFUkxFQVZFRCAoKF9fZm9yY2Ugc25kX3BjbV9hY2Nlc3NfdCkgMCkKKyNkZWZpbmUgU05EUlZfUENNX0FDQ0VTU19NTUFQX05PTklOVEVSTEVBVkVEICgoX19mb3JjZSBzbmRfcGNtX2FjY2Vzc190KSAxKQorI2RlZmluZSBTTkRSVl9QQ01fQUNDRVNTX01NQVBfQ09NUExFWCAoKF9fZm9yY2Ugc25kX3BjbV9hY2Nlc3NfdCkgMikKKyNkZWZpbmUgU05EUlZfUENNX0FDQ0VTU19SV19JTlRFUkxFQVZFRCAoKF9fZm9yY2Ugc25kX3BjbV9hY2Nlc3NfdCkgMykKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIFNORFJWX1BDTV9BQ0NFU1NfUldfTk9OSU5URVJMRUFWRUQgKChfX2ZvcmNlIHNuZF9wY21fYWNjZXNzX3QpIDQpICAKKyNkZWZpbmUgU05EUlZfUENNX0FDQ0VTU19SV19OT05JTlRFUkxFQVZFRCAoKF9fZm9yY2Ugc25kX3BjbV9hY2Nlc3NfdCkgNCkKICNkZWZpbmUgU05EUlZfUENNX0FDQ0VTU19MQVNUIFNORFJWX1BDTV9BQ0NFU1NfUldfTk9OSU5URVJMRUFWRUQKIHR5cGVkZWYgaW50IF9fYml0d2lzZSBzbmRfcGNtX2Zvcm1hdF90OwogI2RlZmluZSBTTkRSVl9QQ01fRk9STUFUX1M4ICgoX19mb3JjZSBzbmRfcGNtX2Zvcm1hdF90KSAwKQpAQCAtMTM3LDIzICsxMzcsMjMgQEAKICNkZWZpbmUgU05EUlZfUENNX0ZPUk1BVF9VMTZfTEUgKChfX2ZvcmNlIHNuZF9wY21fZm9ybWF0X3QpIDQpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTTkRSVl9QQ01fRk9STUFUX1UxNl9CRSAoKF9fZm9yY2Ugc25kX3BjbV9mb3JtYXRfdCkgNSkKLSNkZWZpbmUgU05EUlZfUENNX0ZPUk1BVF9TMjRfTEUgKChfX2ZvcmNlIHNuZF9wY21fZm9ybWF0X3QpIDYpICAKLSNkZWZpbmUgU05EUlZfUENNX0ZPUk1BVF9TMjRfQkUgKChfX2ZvcmNlIHNuZF9wY21fZm9ybWF0X3QpIDcpICAKLSNkZWZpbmUgU05EUlZfUENNX0ZPUk1BVF9VMjRfTEUgKChfX2ZvcmNlIHNuZF9wY21fZm9ybWF0X3QpIDgpICAKKyNkZWZpbmUgU05EUlZfUENNX0ZPUk1BVF9TMjRfTEUgKChfX2ZvcmNlIHNuZF9wY21fZm9ybWF0X3QpIDYpCisjZGVmaW5lIFNORFJWX1BDTV9GT1JNQVRfUzI0X0JFICgoX19mb3JjZSBzbmRfcGNtX2Zvcm1hdF90KSA3KQorI2RlZmluZSBTTkRSVl9QQ01fRk9STUFUX1UyNF9MRSAoKF9fZm9yY2Ugc25kX3BjbV9mb3JtYXRfdCkgOCkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIFNORFJWX1BDTV9GT1JNQVRfVTI0X0JFICgoX19mb3JjZSBzbmRfcGNtX2Zvcm1hdF90KSA5KSAgCisjZGVmaW5lIFNORFJWX1BDTV9GT1JNQVRfVTI0X0JFICgoX19mb3JjZSBzbmRfcGNtX2Zvcm1hdF90KSA5KQogI2RlZmluZSBTTkRSVl9QQ01fRk9STUFUX1MzMl9MRSAoKF9fZm9yY2Ugc25kX3BjbV9mb3JtYXRfdCkgMTApCiAjZGVmaW5lIFNORFJWX1BDTV9GT1JNQVRfUzMyX0JFICgoX19mb3JjZSBzbmRfcGNtX2Zvcm1hdF90KSAxMSkKICNkZWZpbmUgU05EUlZfUENNX0ZPUk1BVF9VMzJfTEUgKChfX2ZvcmNlIHNuZF9wY21fZm9ybWF0X3QpIDEyKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU05EUlZfUENNX0ZPUk1BVF9VMzJfQkUgKChfX2ZvcmNlIHNuZF9wY21fZm9ybWF0X3QpIDEzKQotI2RlZmluZSBTTkRSVl9QQ01fRk9STUFUX0ZMT0FUX0xFICgoX19mb3JjZSBzbmRfcGNtX2Zvcm1hdF90KSAxNCkgIAotI2RlZmluZSBTTkRSVl9QQ01fRk9STUFUX0ZMT0FUX0JFICgoX19mb3JjZSBzbmRfcGNtX2Zvcm1hdF90KSAxNSkgIAotI2RlZmluZSBTTkRSVl9QQ01fRk9STUFUX0ZMT0FUNjRfTEUgKChfX2ZvcmNlIHNuZF9wY21fZm9ybWF0X3QpIDE2KSAgCisjZGVmaW5lIFNORFJWX1BDTV9GT1JNQVRfRkxPQVRfTEUgKChfX2ZvcmNlIHNuZF9wY21fZm9ybWF0X3QpIDE0KQorI2RlZmluZSBTTkRSVl9QQ01fRk9STUFUX0ZMT0FUX0JFICgoX19mb3JjZSBzbmRfcGNtX2Zvcm1hdF90KSAxNSkKKyNkZWZpbmUgU05EUlZfUENNX0ZPUk1BVF9GTE9BVDY0X0xFICgoX19mb3JjZSBzbmRfcGNtX2Zvcm1hdF90KSAxNikKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIFNORFJWX1BDTV9GT1JNQVRfRkxPQVQ2NF9CRSAoKF9fZm9yY2Ugc25kX3BjbV9mb3JtYXRfdCkgMTcpICAKLSNkZWZpbmUgU05EUlZfUENNX0ZPUk1BVF9JRUM5NThfU1VCRlJBTUVfTEUgKChfX2ZvcmNlIHNuZF9wY21fZm9ybWF0X3QpIDE4KSAgCi0jZGVmaW5lIFNORFJWX1BDTV9GT1JNQVRfSUVDOTU4X1NVQkZSQU1FX0JFICgoX19mb3JjZSBzbmRfcGNtX2Zvcm1hdF90KSAxOSkgIAorI2RlZmluZSBTTkRSVl9QQ01fRk9STUFUX0ZMT0FUNjRfQkUgKChfX2ZvcmNlIHNuZF9wY21fZm9ybWF0X3QpIDE3KQorI2RlZmluZSBTTkRSVl9QQ01fRk9STUFUX0lFQzk1OF9TVUJGUkFNRV9MRSAoKF9fZm9yY2Ugc25kX3BjbV9mb3JtYXRfdCkgMTgpCisjZGVmaW5lIFNORFJWX1BDTV9GT1JNQVRfSUVDOTU4X1NVQkZSQU1FX0JFICgoX19mb3JjZSBzbmRfcGNtX2Zvcm1hdF90KSAxOSkKICNkZWZpbmUgU05EUlZfUENNX0ZPUk1BVF9NVV9MQVcgKChfX2ZvcmNlIHNuZF9wY21fZm9ybWF0X3QpIDIwKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU05EUlZfUENNX0ZPUk1BVF9BX0xBVyAoKF9fZm9yY2Ugc25kX3BjbV9mb3JtYXRfdCkgMjEpCkBAIC0xNjIsMjEgKzE2MiwyMSBAQAogI2RlZmluZSBTTkRSVl9QQ01fRk9STUFUX0dTTSAoKF9fZm9yY2Ugc25kX3BjbV9mb3JtYXRfdCkgMjQpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogI2RlZmluZSBTTkRSVl9QQ01fRk9STUFUX1NQRUNJQUwgKChfX2ZvcmNlIHNuZF9wY21fZm9ybWF0X3QpIDMxKQotI2RlZmluZSBTTkRSVl9QQ01fRk9STUFUX1MyNF8zTEUgKChfX2ZvcmNlIHNuZF9wY21fZm9ybWF0X3QpIDMyKSAgCi0jZGVmaW5lIFNORFJWX1BDTV9GT1JNQVRfUzI0XzNCRSAoKF9fZm9yY2Ugc25kX3BjbV9mb3JtYXRfdCkgMzMpICAKLSNkZWZpbmUgU05EUlZfUENNX0ZPUk1BVF9VMjRfM0xFICgoX19mb3JjZSBzbmRfcGNtX2Zvcm1hdF90KSAzNCkgIAorI2RlZmluZSBTTkRSVl9QQ01fRk9STUFUX1MyNF8zTEUgKChfX2ZvcmNlIHNuZF9wY21fZm9ybWF0X3QpIDMyKQorI2RlZmluZSBTTkRSVl9QQ01fRk9STUFUX1MyNF8zQkUgKChfX2ZvcmNlIHNuZF9wY21fZm9ybWF0X3QpIDMzKQorI2RlZmluZSBTTkRSVl9QQ01fRk9STUFUX1UyNF8zTEUgKChfX2ZvcmNlIHNuZF9wY21fZm9ybWF0X3QpIDM0KQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgU05EUlZfUENNX0ZPUk1BVF9VMjRfM0JFICgoX19mb3JjZSBzbmRfcGNtX2Zvcm1hdF90KSAzNSkgIAotI2RlZmluZSBTTkRSVl9QQ01fRk9STUFUX1MyMF8zTEUgKChfX2ZvcmNlIHNuZF9wY21fZm9ybWF0X3QpIDM2KSAgCi0jZGVmaW5lIFNORFJWX1BDTV9GT1JNQVRfUzIwXzNCRSAoKF9fZm9yY2Ugc25kX3BjbV9mb3JtYXRfdCkgMzcpICAKLSNkZWZpbmUgU05EUlZfUENNX0ZPUk1BVF9VMjBfM0xFICgoX19mb3JjZSBzbmRfcGNtX2Zvcm1hdF90KSAzOCkgIAorI2RlZmluZSBTTkRSVl9QQ01fRk9STUFUX1UyNF8zQkUgKChfX2ZvcmNlIHNuZF9wY21fZm9ybWF0X3QpIDM1KQorI2RlZmluZSBTTkRSVl9QQ01fRk9STUFUX1MyMF8zTEUgKChfX2ZvcmNlIHNuZF9wY21fZm9ybWF0X3QpIDM2KQorI2RlZmluZSBTTkRSVl9QQ01fRk9STUFUX1MyMF8zQkUgKChfX2ZvcmNlIHNuZF9wY21fZm9ybWF0X3QpIDM3KQorI2RlZmluZSBTTkRSVl9QQ01fRk9STUFUX1UyMF8zTEUgKChfX2ZvcmNlIHNuZF9wY21fZm9ybWF0X3QpIDM4KQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgU05EUlZfUENNX0ZPUk1BVF9VMjBfM0JFICgoX19mb3JjZSBzbmRfcGNtX2Zvcm1hdF90KSAzOSkgIAotI2RlZmluZSBTTkRSVl9QQ01fRk9STUFUX1MxOF8zTEUgKChfX2ZvcmNlIHNuZF9wY21fZm9ybWF0X3QpIDQwKSAgCi0jZGVmaW5lIFNORFJWX1BDTV9GT1JNQVRfUzE4XzNCRSAoKF9fZm9yY2Ugc25kX3BjbV9mb3JtYXRfdCkgNDEpICAKLSNkZWZpbmUgU05EUlZfUENNX0ZPUk1BVF9VMThfM0xFICgoX19mb3JjZSBzbmRfcGNtX2Zvcm1hdF90KSA0MikgIAorI2RlZmluZSBTTkRSVl9QQ01fRk9STUFUX1UyMF8zQkUgKChfX2ZvcmNlIHNuZF9wY21fZm9ybWF0X3QpIDM5KQorI2RlZmluZSBTTkRSVl9QQ01fRk9STUFUX1MxOF8zTEUgKChfX2ZvcmNlIHNuZF9wY21fZm9ybWF0X3QpIDQwKQorI2RlZmluZSBTTkRSVl9QQ01fRk9STUFUX1MxOF8zQkUgKChfX2ZvcmNlIHNuZF9wY21fZm9ybWF0X3QpIDQxKQorI2RlZmluZSBTTkRSVl9QQ01fRk9STUFUX1UxOF8zTEUgKChfX2ZvcmNlIHNuZF9wY21fZm9ybWF0X3QpIDQyKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgU05EUlZfUENNX0ZPUk1BVF9VMThfM0JFICgoX19mb3JjZSBzbmRfcGNtX2Zvcm1hdF90KSA0MykgIAorI2RlZmluZSBTTkRSVl9QQ01fRk9STUFUX1UxOF8zQkUgKChfX2ZvcmNlIHNuZF9wY21fZm9ybWF0X3QpIDQzKQogI2RlZmluZSBTTkRSVl9QQ01fRk9STUFUX0xBU1QgU05EUlZfUENNX0ZPUk1BVF9VMThfM0JFCiAjaWZkZWYgU05EUlZfTElUVExFX0VORElBTgogI2RlZmluZSBTTkRSVl9QQ01fRk9STUFUX1MxNiBTTkRSVl9QQ01fRk9STUFUX1MxNl9MRQpAQCAtMjA5LDM3ICsyMDksMzcgQEAKIHR5cGVkZWYgaW50IF9fYml0d2lzZSBzbmRfcGNtX3N1YmZvcm1hdF90OwogI2RlZmluZSBTTkRSVl9QQ01fU1VCRk9STUFUX1NURCAoKF9fZm9yY2Ugc25kX3BjbV9zdWJmb3JtYXRfdCkgMCkKICNkZWZpbmUgU05EUlZfUENNX1NVQkZPUk1BVF9MQVNUIFNORFJWX1BDTV9TVUJGT1JNQVRfU1RECi0jZGVmaW5lIFNORFJWX1BDTV9JTkZPX01NQVAgMHgwMDAwMDAwMSAgCisjZGVmaW5lIFNORFJWX1BDTV9JTkZPX01NQVAgMHgwMDAwMDAwMQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgU05EUlZfUENNX0lORk9fTU1BUF9WQUxJRCAweDAwMDAwMDAyICAKLSNkZWZpbmUgU05EUlZfUENNX0lORk9fRE9VQkxFIDB4MDAwMDAwMDQgIAotI2RlZmluZSBTTkRSVl9QQ01fSU5GT19CQVRDSCAweDAwMDAwMDEwICAKLSNkZWZpbmUgU05EUlZfUENNX0lORk9fSU5URVJMRUFWRUQgMHgwMDAwMDEwMCAgCisjZGVmaW5lIFNORFJWX1BDTV9JTkZPX01NQVBfVkFMSUQgMHgwMDAwMDAwMgorI2RlZmluZSBTTkRSVl9QQ01fSU5GT19ET1VCTEUgMHgwMDAwMDAwNAorI2RlZmluZSBTTkRSVl9QQ01fSU5GT19CQVRDSCAweDAwMDAwMDEwCisjZGVmaW5lIFNORFJWX1BDTV9JTkZPX0lOVEVSTEVBVkVEIDB4MDAwMDAxMDAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIFNORFJWX1BDTV9JTkZPX05PTklOVEVSTEVBVkVEIDB4MDAwMDAyMDAgIAotI2RlZmluZSBTTkRSVl9QQ01fSU5GT19DT01QTEVYIDB4MDAwMDA0MDAgIAotI2RlZmluZSBTTkRSVl9QQ01fSU5GT19CTE9DS19UUkFOU0ZFUiAweDAwMDEwMDAwICAKLSNkZWZpbmUgU05EUlZfUENNX0lORk9fT1ZFUlJBTkdFIDB4MDAwMjAwMDAgIAorI2RlZmluZSBTTkRSVl9QQ01fSU5GT19OT05JTlRFUkxFQVZFRCAweDAwMDAwMjAwCisjZGVmaW5lIFNORFJWX1BDTV9JTkZPX0NPTVBMRVggMHgwMDAwMDQwMAorI2RlZmluZSBTTkRSVl9QQ01fSU5GT19CTE9DS19UUkFOU0ZFUiAweDAwMDEwMDAwCisjZGVmaW5lIFNORFJWX1BDTV9JTkZPX09WRVJSQU5HRSAweDAwMDIwMDAwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBTTkRSVl9QQ01fSU5GT19SRVNVTUUgMHgwMDA0MDAwMCAgCi0jZGVmaW5lIFNORFJWX1BDTV9JTkZPX1BBVVNFIDB4MDAwODAwMDAgIAotI2RlZmluZSBTTkRSVl9QQ01fSU5GT19IQUxGX0RVUExFWCAweDAwMTAwMDAwICAKLSNkZWZpbmUgU05EUlZfUENNX0lORk9fSk9JTlRfRFVQTEVYIDB4MDAyMDAwMDAgIAorI2RlZmluZSBTTkRSVl9QQ01fSU5GT19SRVNVTUUgMHgwMDA0MDAwMAorI2RlZmluZSBTTkRSVl9QQ01fSU5GT19QQVVTRSAweDAwMDgwMDAwCisjZGVmaW5lIFNORFJWX1BDTV9JTkZPX0hBTEZfRFVQTEVYIDB4MDAxMDAwMDAKKyNkZWZpbmUgU05EUlZfUENNX0lORk9fSk9JTlRfRFVQTEVYIDB4MDAyMDAwMDAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIFNORFJWX1BDTV9JTkZPX1NZTkNfU1RBUlQgMHgwMDQwMDAwMCAgCi0jZGVmaW5lIFNORFJWX1BDTV9JTkZPX0ZJRk9fSU5fRlJBTUVTIDB4ODAwMDAwMDAgIAorI2RlZmluZSBTTkRSVl9QQ01fSU5GT19TWU5DX1NUQVJUIDB4MDA0MDAwMDAKKyNkZWZpbmUgU05EUlZfUENNX0lORk9fRklGT19JTl9GUkFNRVMgMHg4MDAwMDAwMAogdHlwZWRlZiBpbnQgX19iaXR3aXNlIHNuZF9wY21fc3RhdGVfdDsKLSNkZWZpbmUgU05EUlZfUENNX1NUQVRFX09QRU4gKChfX2ZvcmNlIHNuZF9wY21fc3RhdGVfdCkgMCkgIAorI2RlZmluZSBTTkRSVl9QQ01fU1RBVEVfT1BFTiAoKF9fZm9yY2Ugc25kX3BjbV9zdGF0ZV90KSAwKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgU05EUlZfUENNX1NUQVRFX1NFVFVQICgoX19mb3JjZSBzbmRfcGNtX3N0YXRlX3QpIDEpICAKLSNkZWZpbmUgU05EUlZfUENNX1NUQVRFX1BSRVBBUkVEICgoX19mb3JjZSBzbmRfcGNtX3N0YXRlX3QpIDIpICAKLSNkZWZpbmUgU05EUlZfUENNX1NUQVRFX1JVTk5JTkcgKChfX2ZvcmNlIHNuZF9wY21fc3RhdGVfdCkgMykgIAotI2RlZmluZSBTTkRSVl9QQ01fU1RBVEVfWFJVTiAoKF9fZm9yY2Ugc25kX3BjbV9zdGF0ZV90KSA0KSAgCisjZGVmaW5lIFNORFJWX1BDTV9TVEFURV9TRVRVUCAoKF9fZm9yY2Ugc25kX3BjbV9zdGF0ZV90KSAxKQorI2RlZmluZSBTTkRSVl9QQ01fU1RBVEVfUFJFUEFSRUQgKChfX2ZvcmNlIHNuZF9wY21fc3RhdGVfdCkgMikKKyNkZWZpbmUgU05EUlZfUENNX1NUQVRFX1JVTk5JTkcgKChfX2ZvcmNlIHNuZF9wY21fc3RhdGVfdCkgMykKKyNkZWZpbmUgU05EUlZfUENNX1NUQVRFX1hSVU4gKChfX2ZvcmNlIHNuZF9wY21fc3RhdGVfdCkgNCkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIFNORFJWX1BDTV9TVEFURV9EUkFJTklORyAoKF9fZm9yY2Ugc25kX3BjbV9zdGF0ZV90KSA1KSAgCi0jZGVmaW5lIFNORFJWX1BDTV9TVEFURV9QQVVTRUQgKChfX2ZvcmNlIHNuZF9wY21fc3RhdGVfdCkgNikgIAotI2RlZmluZSBTTkRSVl9QQ01fU1RBVEVfU1VTUEVOREVEICgoX19mb3JjZSBzbmRfcGNtX3N0YXRlX3QpIDcpICAKLSNkZWZpbmUgU05EUlZfUENNX1NUQVRFX0RJU0NPTk5FQ1RFRCAoKF9fZm9yY2Ugc25kX3BjbV9zdGF0ZV90KSA4KSAgCisjZGVmaW5lIFNORFJWX1BDTV9TVEFURV9EUkFJTklORyAoKF9fZm9yY2Ugc25kX3BjbV9zdGF0ZV90KSA1KQorI2RlZmluZSBTTkRSVl9QQ01fU1RBVEVfUEFVU0VEICgoX19mb3JjZSBzbmRfcGNtX3N0YXRlX3QpIDYpCisjZGVmaW5lIFNORFJWX1BDTV9TVEFURV9TVVNQRU5ERUQgKChfX2ZvcmNlIHNuZF9wY21fc3RhdGVfdCkgNykKKyNkZWZpbmUgU05EUlZfUENNX1NUQVRFX0RJU0NPTk5FQ1RFRCAoKF9fZm9yY2Ugc25kX3BjbV9zdGF0ZV90KSA4KQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU05EUlZfUENNX1NUQVRFX0xBU1QgU05EUlZfUENNX1NUQVRFX0RJU0NPTk5FQ1RFRAogZW51bSB7CkBAIC0yNzQsMzEgKzI3NCwzMSBAQAogIHVuc2lnbmVkIGNoYXIgcmVzZXJ2ZWRbNjRdOwogfTsKIHR5cGVkZWYgaW50IHNuZF9wY21faHdfcGFyYW1fdDsKLSNkZWZpbmUgU05EUlZfUENNX0hXX1BBUkFNX0FDQ0VTUyAwICAKKyNkZWZpbmUgU05EUlZfUENNX0hXX1BBUkFNX0FDQ0VTUyAwCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBTTkRSVl9QQ01fSFdfUEFSQU1fRk9STUFUIDEgIAotI2RlZmluZSBTTkRSVl9QQ01fSFdfUEFSQU1fU1VCRk9STUFUIDIgIAorI2RlZmluZSBTTkRSVl9QQ01fSFdfUEFSQU1fRk9STUFUIDEKKyNkZWZpbmUgU05EUlZfUENNX0hXX1BBUkFNX1NVQkZPUk1BVCAyCiAjZGVmaW5lIFNORFJWX1BDTV9IV19QQVJBTV9GSVJTVF9NQVNLIFNORFJWX1BDTV9IV19QQVJBTV9BQ0NFU1MKICNkZWZpbmUgU05EUlZfUENNX0hXX1BBUkFNX0xBU1RfTUFTSyBTTkRSVl9QQ01fSFdfUEFSQU1fU1VCRk9STUFUCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBTTkRSVl9QQ01fSFdfUEFSQU1fU0FNUExFX0JJVFMgOCAgCi0jZGVmaW5lIFNORFJWX1BDTV9IV19QQVJBTV9GUkFNRV9CSVRTIDkgIAotI2RlZmluZSBTTkRSVl9QQ01fSFdfUEFSQU1fQ0hBTk5FTFMgMTAgIAotI2RlZmluZSBTTkRSVl9QQ01fSFdfUEFSQU1fUkFURSAxMSAgCisjZGVmaW5lIFNORFJWX1BDTV9IV19QQVJBTV9TQU1QTEVfQklUUyA4CisjZGVmaW5lIFNORFJWX1BDTV9IV19QQVJBTV9GUkFNRV9CSVRTIDkKKyNkZWZpbmUgU05EUlZfUENNX0hXX1BBUkFNX0NIQU5ORUxTIDEwCisjZGVmaW5lIFNORFJWX1BDTV9IV19QQVJBTV9SQVRFIDExCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBTTkRSVl9QQ01fSFdfUEFSQU1fUEVSSU9EX1RJTUUgMTIgIAotI2RlZmluZSBTTkRSVl9QQ01fSFdfUEFSQU1fUEVSSU9EX1NJWkUgMTMgIAotI2RlZmluZSBTTkRSVl9QQ01fSFdfUEFSQU1fUEVSSU9EX0JZVEVTIDE0ICAKLSNkZWZpbmUgU05EUlZfUENNX0hXX1BBUkFNX1BFUklPRFMgMTUgIAorI2RlZmluZSBTTkRSVl9QQ01fSFdfUEFSQU1fUEVSSU9EX1RJTUUgMTIKKyNkZWZpbmUgU05EUlZfUENNX0hXX1BBUkFNX1BFUklPRF9TSVpFIDEzCisjZGVmaW5lIFNORFJWX1BDTV9IV19QQVJBTV9QRVJJT0RfQllURVMgMTQKKyNkZWZpbmUgU05EUlZfUENNX0hXX1BBUkFNX1BFUklPRFMgMTUKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIFNORFJWX1BDTV9IV19QQVJBTV9CVUZGRVJfVElNRSAxNiAgCi0jZGVmaW5lIFNORFJWX1BDTV9IV19QQVJBTV9CVUZGRVJfU0laRSAxNyAgCi0jZGVmaW5lIFNORFJWX1BDTV9IV19QQVJBTV9CVUZGRVJfQllURVMgMTggIAotI2RlZmluZSBTTkRSVl9QQ01fSFdfUEFSQU1fVElDS19USU1FIDE5ICAKKyNkZWZpbmUgU05EUlZfUENNX0hXX1BBUkFNX0JVRkZFUl9USU1FIDE2CisjZGVmaW5lIFNORFJWX1BDTV9IV19QQVJBTV9CVUZGRVJfU0laRSAxNworI2RlZmluZSBTTkRSVl9QQ01fSFdfUEFSQU1fQlVGRkVSX0JZVEVTIDE4CisjZGVmaW5lIFNORFJWX1BDTV9IV19QQVJBTV9USUNLX1RJTUUgMTkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAjZGVmaW5lIFNORFJWX1BDTV9IV19QQVJBTV9GSVJTVF9JTlRFUlZBTCBTTkRSVl9QQ01fSFdfUEFSQU1fU0FNUExFX0JJVFMKICNkZWZpbmUgU05EUlZfUENNX0hXX1BBUkFNX0xBU1RfSU5URVJWQUwgU05EUlZfUENNX0hXX1BBUkFNX1RJQ0tfVElNRQotI2RlZmluZSBTTkRSVl9QQ01fSFdfUEFSQU1TX05PUkVTQU1QTEUgKDE8PDApICAKKyNkZWZpbmUgU05EUlZfUENNX0hXX1BBUkFNU19OT1JFU0FNUExFICgxPDwwKQogc3RydWN0IHNuZF9pbnRlcnZhbCB7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwogIHVuc2lnbmVkIGludCBtaW4sIG1heDsKQEAgLTM5NCwxMCArMzk0LDEwIEBACiAgc25kX3BjbV91ZnJhbWVzX3QgYXBwbF9wdHI7CiAgc25kX3BjbV91ZnJhbWVzX3QgYXZhaWxfbWluOwogfTsKLSNkZWZpbmUgU05EUlZfUENNX1NZTkNfUFRSX0hXU1lOQyAoMTw8MCkgIAorI2RlZmluZSBTTkRSVl9QQ01fU1lOQ19QVFJfSFdTWU5DICgxPDwwKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgU05EUlZfUENNX1NZTkNfUFRSX0FQUEwgKDE8PDEpICAKLSNkZWZpbmUgU05EUlZfUENNX1NZTkNfUFRSX0FWQUlMX01JTiAoMTw8MikgIAorI2RlZmluZSBTTkRSVl9QQ01fU1lOQ19QVFJfQVBQTCAoMTw8MSkKKyNkZWZpbmUgU05EUlZfUENNX1NZTkNfUFRSX0FWQUlMX01JTiAoMTw8MikKIHN0cnVjdCBzbmRfcGNtX3N5bmNfcHRyIHsKICB1bnNpZ25lZCBpbnQgZmxhZ3M7CiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwpAQCAtNTQ0LDcgKzU0NCw3IEBACiAjZGVmaW5lIFNORFJWX1RJTUVSX0dMT0JBTF9SVEMgMQogI2RlZmluZSBTTkRSVl9USU1FUl9HTE9CQUxfSFBFVCAyCiAjZGVmaW5lIFNORFJWX1RJTUVSX0dMT0JBTF9IUlRJTUVSIDMKLSNkZWZpbmUgU05EUlZfVElNRVJfRkxHX1NMQVZFICgxPDwwKSAgCisjZGVmaW5lIFNORFJWX1RJTUVSX0ZMR19TTEFWRSAoMTw8MCkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiBzdHJ1Y3Qgc25kX3RpbWVyX2lkIHsKICBpbnQgZGV2X2NsYXNzOwpAQCAtNjAzLDEwICs2MDMsMTAgQEAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiAgdW5zaWduZWQgY2hhciByZXNlcnZlZFs2NF07CiB9OwotI2RlZmluZSBTTkRSVl9USU1FUl9QU0ZMR19BVVRPICgxPDwwKSAgCi0jZGVmaW5lIFNORFJWX1RJTUVSX1BTRkxHX0VYQ0xVU0lWRSAoMTw8MSkgIAorI2RlZmluZSBTTkRSVl9USU1FUl9QU0ZMR19BVVRPICgxPDwwKQorI2RlZmluZSBTTkRSVl9USU1FUl9QU0ZMR19FWENMVVNJVkUgKDE8PDEpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBTTkRSVl9USU1FUl9QU0ZMR19FQVJMWV9FVkVOVCAoMTw8MikgIAorI2RlZmluZSBTTkRSVl9USU1FUl9QU0ZMR19FQVJMWV9FVkVOVCAoMTw8MikKIHN0cnVjdCBzbmRfdGltZXJfcGFyYW1zIHsKICB1bnNpZ25lZCBpbnQgZmxhZ3M7CiAgdW5zaWduZWQgaW50IHRpY2tzOwpAQCAtNjkzLDUyICs2OTMsNTIgQEAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCiB9OwogdHlwZWRlZiBpbnQgX19iaXR3aXNlIHNuZF9jdGxfZWxlbV90eXBlX3Q7Ci0jZGVmaW5lIFNORFJWX0NUTF9FTEVNX1RZUEVfTk9ORSAoKF9fZm9yY2Ugc25kX2N0bF9lbGVtX3R5cGVfdCkgMCkgIAotI2RlZmluZSBTTkRSVl9DVExfRUxFTV9UWVBFX0JPT0xFQU4gKChfX2ZvcmNlIHNuZF9jdGxfZWxlbV90eXBlX3QpIDEpICAKKyNkZWZpbmUgU05EUlZfQ1RMX0VMRU1fVFlQRV9OT05FICgoX19mb3JjZSBzbmRfY3RsX2VsZW1fdHlwZV90KSAwKQorI2RlZmluZSBTTkRSVl9DVExfRUxFTV9UWVBFX0JPT0xFQU4gKChfX2ZvcmNlIHNuZF9jdGxfZWxlbV90eXBlX3QpIDEpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBTTkRSVl9DVExfRUxFTV9UWVBFX0lOVEVHRVIgKChfX2ZvcmNlIHNuZF9jdGxfZWxlbV90eXBlX3QpIDIpICAKLSNkZWZpbmUgU05EUlZfQ1RMX0VMRU1fVFlQRV9FTlVNRVJBVEVEICgoX19mb3JjZSBzbmRfY3RsX2VsZW1fdHlwZV90KSAzKSAgCi0jZGVmaW5lIFNORFJWX0NUTF9FTEVNX1RZUEVfQllURVMgKChfX2ZvcmNlIHNuZF9jdGxfZWxlbV90eXBlX3QpIDQpICAKLSNkZWZpbmUgU05EUlZfQ1RMX0VMRU1fVFlQRV9JRUM5NTggKChfX2ZvcmNlIHNuZF9jdGxfZWxlbV90eXBlX3QpIDUpICAKKyNkZWZpbmUgU05EUlZfQ1RMX0VMRU1fVFlQRV9JTlRFR0VSICgoX19mb3JjZSBzbmRfY3RsX2VsZW1fdHlwZV90KSAyKQorI2RlZmluZSBTTkRSVl9DVExfRUxFTV9UWVBFX0VOVU1FUkFURUQgKChfX2ZvcmNlIHNuZF9jdGxfZWxlbV90eXBlX3QpIDMpCisjZGVmaW5lIFNORFJWX0NUTF9FTEVNX1RZUEVfQllURVMgKChfX2ZvcmNlIHNuZF9jdGxfZWxlbV90eXBlX3QpIDQpCisjZGVmaW5lIFNORFJWX0NUTF9FTEVNX1RZUEVfSUVDOTU4ICgoX19mb3JjZSBzbmRfY3RsX2VsZW1fdHlwZV90KSA1KQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgU05EUlZfQ1RMX0VMRU1fVFlQRV9JTlRFR0VSNjQgKChfX2ZvcmNlIHNuZF9jdGxfZWxlbV90eXBlX3QpIDYpICAKKyNkZWZpbmUgU05EUlZfQ1RMX0VMRU1fVFlQRV9JTlRFR0VSNjQgKChfX2ZvcmNlIHNuZF9jdGxfZWxlbV90eXBlX3QpIDYpCiAjZGVmaW5lIFNORFJWX0NUTF9FTEVNX1RZUEVfTEFTVCBTTkRSVl9DVExfRUxFTV9UWVBFX0lOVEVHRVI2NAogdHlwZWRlZiBpbnQgX19iaXR3aXNlIHNuZF9jdGxfZWxlbV9pZmFjZV90OwotI2RlZmluZSBTTkRSVl9DVExfRUxFTV9JRkFDRV9DQVJEICgoX19mb3JjZSBzbmRfY3RsX2VsZW1faWZhY2VfdCkgMCkgIAorI2RlZmluZSBTTkRSVl9DVExfRUxFTV9JRkFDRV9DQVJEICgoX19mb3JjZSBzbmRfY3RsX2VsZW1faWZhY2VfdCkgMCkKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIFNORFJWX0NUTF9FTEVNX0lGQUNFX0hXREVQICgoX19mb3JjZSBzbmRfY3RsX2VsZW1faWZhY2VfdCkgMSkgIAotI2RlZmluZSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiAoKF9fZm9yY2Ugc25kX2N0bF9lbGVtX2lmYWNlX3QpIDIpICAKLSNkZWZpbmUgU05EUlZfQ1RMX0VMRU1fSUZBQ0VfUENNICgoX19mb3JjZSBzbmRfY3RsX2VsZW1faWZhY2VfdCkgMykgIAotI2RlZmluZSBTTkRSVl9DVExfRUxFTV9JRkFDRV9SQVdNSURJICgoX19mb3JjZSBzbmRfY3RsX2VsZW1faWZhY2VfdCkgNCkgIAorI2RlZmluZSBTTkRSVl9DVExfRUxFTV9JRkFDRV9IV0RFUCAoKF9fZm9yY2Ugc25kX2N0bF9lbGVtX2lmYWNlX3QpIDEpCisjZGVmaW5lIFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSICgoX19mb3JjZSBzbmRfY3RsX2VsZW1faWZhY2VfdCkgMikKKyNkZWZpbmUgU05EUlZfQ1RMX0VMRU1fSUZBQ0VfUENNICgoX19mb3JjZSBzbmRfY3RsX2VsZW1faWZhY2VfdCkgMykKKyNkZWZpbmUgU05EUlZfQ1RMX0VMRU1fSUZBQ0VfUkFXTUlESSAoKF9fZm9yY2Ugc25kX2N0bF9lbGVtX2lmYWNlX3QpIDQpCiAvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLwotI2RlZmluZSBTTkRSVl9DVExfRUxFTV9JRkFDRV9USU1FUiAoKF9fZm9yY2Ugc25kX2N0bF9lbGVtX2lmYWNlX3QpIDUpICAKLSNkZWZpbmUgU05EUlZfQ1RMX0VMRU1fSUZBQ0VfU0VRVUVOQ0VSICgoX19mb3JjZSBzbmRfY3RsX2VsZW1faWZhY2VfdCkgNikgIAorI2RlZmluZSBTTkRSVl9DVExfRUxFTV9JRkFDRV9USU1FUiAoKF9fZm9yY2Ugc25kX2N0bF9lbGVtX2lmYWNlX3QpIDUpCisjZGVmaW5lIFNORFJWX0NUTF9FTEVNX0lGQUNFX1NFUVVFTkNFUiAoKF9fZm9yY2Ugc25kX2N0bF9lbGVtX2lmYWNlX3QpIDYpCiAjZGVmaW5lIFNORFJWX0NUTF9FTEVNX0lGQUNFX0xBU1QgU05EUlZfQ1RMX0VMRU1fSUZBQ0VfU0VRVUVOQ0VSCiAjZGVmaW5lIFNORFJWX0NUTF9FTEVNX0FDQ0VTU19SRUFEICgxPDwwKQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICNkZWZpbmUgU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1dSSVRFICgxPDwxKQogI2RlZmluZSBTTkRSVl9DVExfRUxFTV9BQ0NFU1NfUkVBRFdSSVRFIChTTkRSVl9DVExfRUxFTV9BQ0NFU1NfUkVBRHxTTkRSVl9DVExfRUxFTV9BQ0NFU1NfV1JJVEUpCi0jZGVmaW5lIFNORFJWX0NUTF9FTEVNX0FDQ0VTU19WT0xBVElMRSAoMTw8MikgIAotI2RlZmluZSBTTkRSVl9DVExfRUxFTV9BQ0NFU1NfVElNRVNUQU1QICgxPDwzKSAgCisjZGVmaW5lIFNORFJWX0NUTF9FTEVNX0FDQ0VTU19WT0xBVElMRSAoMTw8MikKKyNkZWZpbmUgU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1RJTUVTVEFNUCAoMTw8MykKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIFNORFJWX0NUTF9FTEVNX0FDQ0VTU19UTFZfUkVBRCAoMTw8NCkgIAotI2RlZmluZSBTTkRSVl9DVExfRUxFTV9BQ0NFU1NfVExWX1dSSVRFICgxPDw1KSAgCisjZGVmaW5lIFNORFJWX0NUTF9FTEVNX0FDQ0VTU19UTFZfUkVBRCAoMTw8NCkKKyNkZWZpbmUgU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1RMVl9XUklURSAoMTw8NSkKICNkZWZpbmUgU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1RMVl9SRUFEV1JJVEUgKFNORFJWX0NUTF9FTEVNX0FDQ0VTU19UTFZfUkVBRHxTTkRSVl9DVExfRUxFTV9BQ0NFU1NfVExWX1dSSVRFKQotI2RlZmluZSBTTkRSVl9DVExfRUxFTV9BQ0NFU1NfVExWX0NPTU1BTkQgKDE8PDYpICAKKyNkZWZpbmUgU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1RMVl9DT01NQU5EICgxPDw2KQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgU05EUlZfQ1RMX0VMRU1fQUNDRVNTX0lOQUNUSVZFICgxPDw4KSAgCi0jZGVmaW5lIFNORFJWX0NUTF9FTEVNX0FDQ0VTU19MT0NLICgxPDw5KSAgCi0jZGVmaW5lIFNORFJWX0NUTF9FTEVNX0FDQ0VTU19PV05FUiAoMTw8MTApICAKLSNkZWZpbmUgU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1RMVl9DQUxMQkFDSyAoMTw8MjgpICAgCisjZGVmaW5lIFNORFJWX0NUTF9FTEVNX0FDQ0VTU19JTkFDVElWRSAoMTw8OCkKKyNkZWZpbmUgU05EUlZfQ1RMX0VMRU1fQUNDRVNTX0xPQ0sgKDE8PDkpCisjZGVmaW5lIFNORFJWX0NUTF9FTEVNX0FDQ0VTU19PV05FUiAoMTw8MTApCisjZGVmaW5lIFNORFJWX0NUTF9FTEVNX0FDQ0VTU19UTFZfQ0FMTEJBQ0sgKDE8PDI4KQogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1VTRVIgKDE8PDI5KSAgCi0jZGVmaW5lIFNORFJWX0NUTF9QT1dFUl9EMCAweDAwMDAgIAotI2RlZmluZSBTTkRSVl9DVExfUE9XRVJfRDEgMHgwMTAwICAKLSNkZWZpbmUgU05EUlZfQ1RMX1BPV0VSX0QyIDB4MDIwMCAgCisjZGVmaW5lIFNORFJWX0NUTF9FTEVNX0FDQ0VTU19VU0VSICgxPDwyOSkKKyNkZWZpbmUgU05EUlZfQ1RMX1BPV0VSX0QwIDB4MDAwMAorI2RlZmluZSBTTkRSVl9DVExfUE9XRVJfRDEgMHgwMTAwCisjZGVmaW5lIFNORFJWX0NUTF9QT1dFUl9EMiAweDAyMDAKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIFNORFJWX0NUTF9QT1dFUl9EMyAweDAzMDAgIAotI2RlZmluZSBTTkRSVl9DVExfUE9XRVJfRDNob3QgKFNORFJWX0NUTF9QT1dFUl9EM3wweDAwMDApICAKLSNkZWZpbmUgU05EUlZfQ1RMX1BPV0VSX0QzY29sZCAoU05EUlZfQ1RMX1BPV0VSX0QzfDB4MDAwMSkgIAorI2RlZmluZSBTTkRSVl9DVExfUE9XRVJfRDMgMHgwMzAwCisjZGVmaW5lIFNORFJWX0NUTF9QT1dFUl9EM2hvdCAoU05EUlZfQ1RMX1BPV0VSX0QzfDB4MDAwMCkKKyNkZWZpbmUgU05EUlZfQ1RMX1BPV0VSX0QzY29sZCAoU05EUlZfQ1RMX1BPV0VSX0QzfDB4MDAwMSkKIHN0cnVjdCBzbmRfY3RsX2VsZW1faWQgewogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KICB1bnNpZ25lZCBpbnQgbnVtaWQ7CkBAIC04NzEsMTIgKzg3MSwxMiBAQAogIFNORFJWX0NUTF9FVkVOVF9MQVNUID0gU05EUlZfQ1RMX0VWRU5UX0VMRU0sCiB9OwogLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KLSNkZWZpbmUgU05EUlZfQ1RMX0VWRU5UX01BU0tfVkFMVUUgKDE8PDApICAKLSNkZWZpbmUgU05EUlZfQ1RMX0VWRU5UX01BU0tfSU5GTyAoMTw8MSkgIAotI2RlZmluZSBTTkRSVl9DVExfRVZFTlRfTUFTS19BREQgKDE8PDIpICAKLSNkZWZpbmUgU05EUlZfQ1RMX0VWRU5UX01BU0tfVExWICgxPDwzKSAgCisjZGVmaW5lIFNORFJWX0NUTF9FVkVOVF9NQVNLX1ZBTFVFICgxPDwwKQorI2RlZmluZSBTTkRSVl9DVExfRVZFTlRfTUFTS19JTkZPICgxPDwxKQorI2RlZmluZSBTTkRSVl9DVExfRVZFTlRfTUFTS19BREQgKDE8PDIpCisjZGVmaW5lIFNORFJWX0NUTF9FVkVOVF9NQVNLX1RMViAoMTw8MykKIC8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCi0jZGVmaW5lIFNORFJWX0NUTF9FVkVOVF9NQVNLX1JFTU9WRSAofjBVKSAgCisjZGVmaW5lIFNORFJWX0NUTF9FVkVOVF9NQVNLX1JFTU9WRSAofjBVKQogc3RydWN0IHNuZF9jdGxfZXZlbnQgewogIGludCB0eXBlOwogIHVuaW9uIHsKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9zb3VuZC9jb21wcmVzc19vZmZsb2FkLmggYi9saWJjL2tlcm5lbC9jb21tb24vc291bmQvY29tcHJlc3Nfb2ZmbG9hZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1YTM0MWYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vc291bmQvY29tcHJlc3Nfb2ZmbG9hZC5oCkBAIC0wLDAgKzEsMTE1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqICAgVG8gZWRpdCB0aGUgY29udGVudCBvZiB0aGlzIGhlYWRlciwgbW9kaWZ5IHRoZSBjb3JyZXNwb25kaW5nCisgKioqICAgc291cmNlIGZpbGUgKGUuZy4gdW5kZXIgZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwvKSB0aGVuCisgKioqICAgcnVuIGJpb25pYy9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisgKioqCisgKioqICAgQW55IG1hbnVhbCBjaGFuZ2UgaGVyZSB3aWxsIGJlIGxvc3QgdGhlIG5leHQgdGltZSB0aGlzIHNjcmlwdCB3aWxsCisgKioqICAgYmUgcnVuLiBZb3UndmUgYmVlbiB3YXJuZWQhCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fQ09NUFJFU1NfT0ZGTE9BRF9ICisjZGVmaW5lIF9fQ09NUFJFU1NfT0ZGTE9BRF9ICisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxzb3VuZC9hc291bmQuaD4KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjaW5jbHVkZSA8c291bmQvY29tcHJlc3NfcGFyYW1zLmg+CisjZGVmaW5lIFNORFJWX0NPTVBSRVNTX1ZFUlNJT04gU05EUlZfUFJPVE9DT0xfVkVSU0lPTigwLCAxLCAxKQorc3RydWN0IHNuZF9jb21wcmVzc2VkX2J1ZmZlciB7CisgX191MzIgZnJhZ21lbnRfc2l6ZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MzIgZnJhZ21lbnRzOworfTsKK3N0cnVjdCBzbmRfY29tcHJfcGFyYW1zIHsKKyBzdHJ1Y3Qgc25kX2NvbXByZXNzZWRfYnVmZmVyIGJ1ZmZlcjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgc3RydWN0IHNuZF9jb2RlYyBjb2RlYzsKKyBfX3U4IG5vX3dha2VfbW9kZTsKK307CitzdHJ1Y3Qgc25kX2NvbXByX3RzdGFtcCB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTMyIGJ5dGVfb2Zmc2V0OworIF9fdTMyIGNvcGllZF90b3RhbDsKKyBzbmRfcGNtX3VmcmFtZXNfdCBwY21fZnJhbWVzOworIHNuZF9wY21fdWZyYW1lc190IHBjbV9pb19mcmFtZXM7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTMyIHNhbXBsaW5nX3JhdGU7CisgdWludDY0X3QgdGltZXN0YW1wOworfTsKK3N0cnVjdCBzbmRfY29tcHJfYXZhaWwgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3U2NCBhdmFpbDsKKyBzdHJ1Y3Qgc25kX2NvbXByX3RzdGFtcCB0c3RhbXA7Cit9OworZW51bSBzbmRfY29tcHJfZGlyZWN0aW9uIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgU05EX0NPTVBSRVNTX1BMQVlCQUNLID0gMCwKKyBTTkRfQ09NUFJFU1NfQ0FQVFVSRQorfTsKK3N0cnVjdCBzbmRfY29tcHJfY2FwcyB7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTMyIG51bV9jb2RlY3M7CisgX191MzIgZGlyZWN0aW9uOworIF9fdTMyIG1pbl9mcmFnbWVudF9zaXplOworIF9fdTMyIG1heF9mcmFnbWVudF9zaXplOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UzMiBtaW5fZnJhZ21lbnRzOworIF9fdTMyIG1heF9mcmFnbWVudHM7CisgX191MzIgY29kZWNzW01BWF9OVU1fQ09ERUNTXTsKKyBfX3UzMiByZXNlcnZlZFsxMV07CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworfTsKK3N0cnVjdCBzbmRfY29tcHJfY29kZWNfY2FwcyB7CisgX191MzIgY29kZWM7CisgX191MzIgbnVtX2Rlc2NyaXB0b3JzOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBzdHJ1Y3Qgc25kX2NvZGVjX2Rlc2MgZGVzY3JpcHRvcltNQVhfTlVNX0NPREVDX0RFU0NSSVBUT1JTXTsKK307CitlbnVtIHsKKyBTTkRSVl9DT01QUkVTU19FTkNPREVSX1BBRERJTkcgPSAxLAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBTTkRSVl9DT01QUkVTU19FTkNPREVSX0RFTEFZID0gMiwKK307CitzdHJ1Y3Qgc25kX2NvbXByX21ldGFkYXRhIHsKKyBfX3UzMiBrZXk7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTMyIHZhbHVlWzhdOworfTsKK3N0cnVjdCBzbmRfY29tcHJfYXVkaW9faW5mbyB7CisgdWludDMyX3QgZnJhbWVfc2l6ZTsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgdWludDMyX3QgcmVzZXJ2ZWRbMTVdOworfTsKKyNkZWZpbmUgU05EUlZfQ09NUFJFU1NfSU9DVExfVkVSU0lPTiBfSU9SKCdDJywgMHgwMCwgaW50KQorI2RlZmluZSBTTkRSVl9DT01QUkVTU19HRVRfQ0FQUyBfSU9XUignQycsIDB4MTAsIHN0cnVjdCBzbmRfY29tcHJfY2FwcykKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFNORFJWX0NPTVBSRVNTX0dFVF9DT0RFQ19DQVBTIF9JT1dSKCdDJywgMHgxMSwgIHN0cnVjdCBzbmRfY29tcHJfY29kZWNfY2FwcykKKyNkZWZpbmUgU05EUlZfQ09NUFJFU1NfU0VUX1BBUkFNUyBfSU9XKCdDJywgMHgxMiwgc3RydWN0IHNuZF9jb21wcl9wYXJhbXMpCisjZGVmaW5lIFNORFJWX0NPTVBSRVNTX0dFVF9QQVJBTVMgX0lPUignQycsIDB4MTMsIHN0cnVjdCBzbmRfY29kZWMpCisjZGVmaW5lIFNORFJWX0NPTVBSRVNTX1NFVF9NRVRBREFUQSBfSU9XKCdDJywgMHgxNCwgIHN0cnVjdCBzbmRfY29tcHJfbWV0YWRhdGEpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBTTkRSVl9DT01QUkVTU19HRVRfTUVUQURBVEEgX0lPV1IoJ0MnLCAweDE1LCAgc3RydWN0IHNuZF9jb21wcl9tZXRhZGF0YSkKKyNkZWZpbmUgU05EUlZfQ09NUFJFU1NfVFNUQU1QIF9JT1IoJ0MnLCAweDIwLCBzdHJ1Y3Qgc25kX2NvbXByX3RzdGFtcCkKKyNkZWZpbmUgU05EUlZfQ09NUFJFU1NfQVZBSUwgX0lPUignQycsIDB4MjEsIHN0cnVjdCBzbmRfY29tcHJfYXZhaWwpCisjZGVmaW5lIFNORFJWX0NPTVBSRVNTX1BBVVNFIF9JTygnQycsIDB4MzApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBTTkRSVl9DT01QUkVTU19SRVNVTUUgX0lPKCdDJywgMHgzMSkKKyNkZWZpbmUgU05EUlZfQ09NUFJFU1NfU1RBUlQgX0lPKCdDJywgMHgzMikKKyNkZWZpbmUgU05EUlZfQ09NUFJFU1NfU1RPUCBfSU8oJ0MnLCAweDMzKQorI2RlZmluZSBTTkRSVl9DT01QUkVTU19EUkFJTiBfSU8oJ0MnLCAweDM0KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgU05EUlZfQ09NUFJFU1NfTkVYVF9UUkFDSyBfSU8oJ0MnLCAweDM1KQorI2RlZmluZSBTTkRSVl9DT01QUkVTU19QQVJUSUFMX0RSQUlOIF9JTygnQycsIDB4MzYpCisjZGVmaW5lIFNORF9DT01QUl9UUklHR0VSX0RSQUlOIDcKKyNkZWZpbmUgU05EX0NPTVBSX1RSSUdHRVJfTkVYVF9UUkFDSyA4CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBTTkRfQ09NUFJfVFJJR0dFUl9QQVJUSUFMX0RSQUlOIDkKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL3NvdW5kL2NvbXByZXNzX3BhcmFtcy5oIGIvbGliYy9rZXJuZWwvY29tbW9uL3NvdW5kL2NvbXByZXNzX3BhcmFtcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0ZTUyMGMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vc291bmQvY29tcHJlc3NfcGFyYW1zLmgKQEAgLTAsMCArMSwyNjUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19TTkRfQ09NUFJFU1NfUEFSQU1TX0gKKyNkZWZpbmUgX19TTkRfQ09NUFJFU1NfUEFSQU1TX0gKKyNkZWZpbmUgTUFYX05VTV9DT0RFQ1MgMzIKKyNkZWZpbmUgTUFYX05VTV9DT0RFQ19ERVNDUklQVE9SUyAzMgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgTUFYX05VTV9CSVRSQVRFUyAzMgorI2RlZmluZSBNQVhfTlVNX0ZSQU1FU19QRVJfQlVGRkVSIDEKKyNkZWZpbmUgQ09NUFJFU1NFRF9NRVRBX0RBVEFfTU9ERSAweDEwCisjZGVmaW5lIE1FVEFfREFUQV9MRU5fQllURVMgMzYKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFE2X0FDM19ERUNPREVSIDB4MDAwMTBCRjYKKyNkZWZpbmUgUTZfRUFDM19ERUNPREVSIDB4MDAwMTBDM0MKKyNkZWZpbmUgUTZfRFRTIDB4MDAwMTBEODgKKyNkZWZpbmUgUTZfRFRTX0xCUiAweDAwMDEwREJCCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBTTkRfQVVESU9DT0RFQ19QQ00gKChfX3UzMikgMHgwMDAwMDAwMSkKKyNkZWZpbmUgU05EX0FVRElPQ09ERUNfTVAzICgoX191MzIpIDB4MDAwMDAwMDIpCisjZGVmaW5lIFNORF9BVURJT0NPREVDX0FNUiAoKF9fdTMyKSAweDAwMDAwMDAzKQorI2RlZmluZSBTTkRfQVVESU9DT0RFQ19BTVJXQiAoKF9fdTMyKSAweDAwMDAwMDA0KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgU05EX0FVRElPQ09ERUNfQU1SV0JQTFVTICgoX191MzIpIDB4MDAwMDAwMDUpCisjZGVmaW5lIFNORF9BVURJT0NPREVDX0FBQyAoKF9fdTMyKSAweDAwMDAwMDA2KQorI2RlZmluZSBTTkRfQVVESU9DT0RFQ19XTUEgKChfX3UzMikgMHgwMDAwMDAwNykKKyNkZWZpbmUgU05EX0FVRElPQ09ERUNfUkVBTCAoKF9fdTMyKSAweDAwMDAwMDA4KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgU05EX0FVRElPQ09ERUNfVk9SQklTICgoX191MzIpIDB4MDAwMDAwMDkpCisjZGVmaW5lIFNORF9BVURJT0NPREVDX0ZMQUMgKChfX3UzMikgMHgwMDAwMDAwQSkKKyNkZWZpbmUgU05EX0FVRElPQ09ERUNfSUVDNjE5MzcgKChfX3UzMikgMHgwMDAwMDAwQikKKyNkZWZpbmUgU05EX0FVRElPQ09ERUNfRzcyM18xICgoX191MzIpIDB4MDAwMDAwMEMpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBTTkRfQVVESU9DT0RFQ19HNzI5ICgoX191MzIpIDB4MDAwMDAwMEQpCisjZGVmaW5lIFNORF9BVURJT0NPREVDX0FDMyAoKF9fdTMyKSAweDAwMDAwMDBFKQorI2RlZmluZSBTTkRfQVVESU9DT0RFQ19EVFMgKChfX3UzMikgMHgwMDAwMDAwRikKKyNkZWZpbmUgU05EX0FVRElPQ09ERUNfQUMzX1BBU1NfVEhST1VHSCAoKF9fdTMyKSAweDAwMDAwMDEwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgU05EX0FVRElPQ09ERUNfV01BX1BSTyAoKF9fdTMyKSAweDAwMDAwMDExKQorI2RlZmluZSBTTkRfQVVESU9DT0RFQ19EVFNfUEFTU19USFJPVUdIICgoX191MzIpIDB4MDAwMDAwMTIpCisjZGVmaW5lIFNORF9BVURJT0NPREVDX0RUU19MQlIgKChfX3UzMikgMHgwMDAwMDAxMykKKyNkZWZpbmUgU05EX0FVRElPQ09ERUNfRFRTX1RSQU5TQ09ERV9MT09QQkFDSyAoKF9fdTMyKSAweDAwMDAwMDE0KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgU05EX0FVRElPQ09ERUNfTUFYIFNORF9BVURJT0NPREVDX0RUU19UUkFOU0NPREVfTE9PUEJBQ0sKKyNkZWZpbmUgU05EX0FVRElPUFJPRklMRV9QQ00gKChfX3UzMikgMHgwMDAwMDAwMSkKKyNkZWZpbmUgU05EX0FVRElPQ0hBTk1PREVfTVAzX01PTk8gKChfX3UzMikgMHgwMDAwMDAwMSkKKyNkZWZpbmUgU05EX0FVRElPQ0hBTk1PREVfTVAzX1NURVJFTyAoKF9fdTMyKSAweDAwMDAwMDAyKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgU05EX0FVRElPQ0hBTk1PREVfTVAzX0pPSU5UU1RFUkVPICgoX191MzIpIDB4MDAwMDAwMDQpCisjZGVmaW5lIFNORF9BVURJT0NIQU5NT0RFX01QM19EVUFMICgoX191MzIpIDB4MDAwMDAwMDgpCisjZGVmaW5lIFNORF9BVURJT1BST0ZJTEVfQU1SICgoX191MzIpIDB4MDAwMDAwMDEpCisjZGVmaW5lIFNORF9BVURJT01PREVfQU1SX0RUWF9PRkYgKChfX3UzMikgMHgwMDAwMDAwMSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFNORF9BVURJT01PREVfQU1SX1ZBRDEgKChfX3UzMikgMHgwMDAwMDAwMikKKyNkZWZpbmUgU05EX0FVRElPTU9ERV9BTVJfVkFEMiAoKF9fdTMyKSAweDAwMDAwMDA0KQorI2RlZmluZSBTTkRfQVVESU9TVFJFQU1GT1JNQVRfVU5ERUZJTkVEICgoX191MzIpIDB4MDAwMDAwMDApCisjZGVmaW5lIFNORF9BVURJT1NUUkVBTUZPUk1BVF9DT05GT1JNQU5DRSAoKF9fdTMyKSAweDAwMDAwMDAxKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgU05EX0FVRElPU1RSRUFNRk9STUFUX0lGMSAoKF9fdTMyKSAweDAwMDAwMDAyKQorI2RlZmluZSBTTkRfQVVESU9TVFJFQU1GT1JNQVRfSUYyICgoX191MzIpIDB4MDAwMDAwMDQpCisjZGVmaW5lIFNORF9BVURJT1NUUkVBTUZPUk1BVF9GU0YgKChfX3UzMikgMHgwMDAwMDAwOCkKKyNkZWZpbmUgU05EX0FVRElPU1RSRUFNRk9STUFUX1JUUFBBWUxPQUQgKChfX3UzMikgMHgwMDAwMDAxMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFNORF9BVURJT1NUUkVBTUZPUk1BVF9JVFUgKChfX3UzMikgMHgwMDAwMDAyMCkKKyNkZWZpbmUgU05EX0FVRElPUFJPRklMRV9BTVJXQiAoKF9fdTMyKSAweDAwMDAwMDAxKQorI2RlZmluZSBTTkRfQVVESU9NT0RFX0FNUldCX0RUWF9PRkYgKChfX3UzMikgMHgwMDAwMDAwMSkKKyNkZWZpbmUgU05EX0FVRElPTU9ERV9BTVJXQl9WQUQxICgoX191MzIpIDB4MDAwMDAwMDIpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBTTkRfQVVESU9NT0RFX0FNUldCX1ZBRDIgKChfX3UzMikgMHgwMDAwMDAwNCkKKyNkZWZpbmUgU05EX0FVRElPUFJPRklMRV9BTVJXQlBMVVMgKChfX3UzMikgMHgwMDAwMDAwMSkKKyNkZWZpbmUgU05EX0FVRElPUFJPRklMRV9BQUMgKChfX3UzMikgMHgwMDAwMDAwMSkKKyNkZWZpbmUgU05EX0FVRElPTU9ERV9BQUNfTUFJTiAoKF9fdTMyKSAweDAwMDAwMDAxKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgU05EX0FVRElPTU9ERV9BQUNfTEMgKChfX3UzMikgMHgwMDAwMDAwMikKKyNkZWZpbmUgU05EX0FVRElPTU9ERV9BQUNfU1NSICgoX191MzIpIDB4MDAwMDAwMDQpCisjZGVmaW5lIFNORF9BVURJT01PREVfQUFDX0xUUCAoKF9fdTMyKSAweDAwMDAwMDA4KQorI2RlZmluZSBTTkRfQVVESU9NT0RFX0FBQ19IRSAoKF9fdTMyKSAweDAwMDAwMDEwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgU05EX0FVRElPTU9ERV9BQUNfU0NBTEFCTEUgKChfX3UzMikgMHgwMDAwMDAyMCkKKyNkZWZpbmUgU05EX0FVRElPTU9ERV9BQUNfRVJMQyAoKF9fdTMyKSAweDAwMDAwMDQwKQorI2RlZmluZSBTTkRfQVVESU9NT0RFX0FBQ19MRCAoKF9fdTMyKSAweDAwMDAwMDgwKQorI2RlZmluZSBTTkRfQVVESU9NT0RFX0FBQ19IRV9QUyAoKF9fdTMyKSAweDAwMDAwMTAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgU05EX0FVRElPTU9ERV9BQUNfSEVfTVBTICgoX191MzIpIDB4MDAwMDAyMDApCisjZGVmaW5lIFNORF9BVURJT1NUUkVBTUZPUk1BVF9NUDJBRFRTICgoX191MzIpIDB4MDAwMDAwMDEpCisjZGVmaW5lIFNORF9BVURJT1NUUkVBTUZPUk1BVF9NUDRBRFRTICgoX191MzIpIDB4MDAwMDAwMDIpCisjZGVmaW5lIFNORF9BVURJT1NUUkVBTUZPUk1BVF9NUDRMT0FTICgoX191MzIpIDB4MDAwMDAwMDQpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBTTkRfQVVESU9TVFJFQU1GT1JNQVRfTVA0TEFUTSAoKF9fdTMyKSAweDAwMDAwMDA4KQorI2RlZmluZSBTTkRfQVVESU9TVFJFQU1GT1JNQVRfQURJRiAoKF9fdTMyKSAweDAwMDAwMDEwKQorI2RlZmluZSBTTkRfQVVESU9TVFJFQU1GT1JNQVRfTVA0RkYgKChfX3UzMikgMHgwMDAwMDAyMCkKKyNkZWZpbmUgU05EX0FVRElPU1RSRUFNRk9STUFUX1JBVyAoKF9fdTMyKSAweDAwMDAwMDQwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgU05EX0FVRElPUFJPRklMRV9XTUE3ICgoX191MzIpIDB4MDAwMDAwMDEpCisjZGVmaW5lIFNORF9BVURJT1BST0ZJTEVfV01BOCAoKF9fdTMyKSAweDAwMDAwMDAyKQorI2RlZmluZSBTTkRfQVVESU9QUk9GSUxFX1dNQTkgKChfX3UzMikgMHgwMDAwMDAwNCkKKyNkZWZpbmUgU05EX0FVRElPUFJPRklMRV9XTUExMCAoKF9fdTMyKSAweDAwMDAwMDA4KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgU05EX0FVRElPTU9ERV9XTUFfTEVWRUwxICgoX191MzIpIDB4MDAwMDAwMDEpCisjZGVmaW5lIFNORF9BVURJT01PREVfV01BX0xFVkVMMiAoKF9fdTMyKSAweDAwMDAwMDAyKQorI2RlZmluZSBTTkRfQVVESU9NT0RFX1dNQV9MRVZFTDMgKChfX3UzMikgMHgwMDAwMDAwNCkKKyNkZWZpbmUgU05EX0FVRElPTU9ERV9XTUFfTEVWRUw0ICgoX191MzIpIDB4MDAwMDAwMDgpCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBTTkRfQVVESU9NT0RFX1dNQVBST19MRVZFTE0wICgoX191MzIpIDB4MDAwMDAwMTApCisjZGVmaW5lIFNORF9BVURJT01PREVfV01BUFJPX0xFVkVMTTEgKChfX3UzMikgMHgwMDAwMDAyMCkKKyNkZWZpbmUgU05EX0FVRElPTU9ERV9XTUFQUk9fTEVWRUxNMiAoKF9fdTMyKSAweDAwMDAwMDQwKQorI2RlZmluZSBTTkRfQVVESU9NT0RFX1dNQVBST19MRVZFTE0zICgoX191MzIpIDB4MDAwMDAwODApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBTTkRfQVVESU9TVFJFQU1GT1JNQVRfV01BX0FTRiAoKF9fdTMyKSAweDAwMDAwMDAxKQorI2RlZmluZSBTTkRfQVVESU9TVFJFQU1GT1JNQVRfV01BX05PQVNGX0hEUiAoKF9fdTMyKSAweDAwMDAwMDAyKQorI2RlZmluZSBTTkRfQVVESU9QUk9GSUxFX1JFQUxBVURJTyAoKF9fdTMyKSAweDAwMDAwMDAxKQorI2RlZmluZSBTTkRfQVVESU9NT0RFX1JFQUxBVURJT19HMiAoKF9fdTMyKSAweDAwMDAwMDAxKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgU05EX0FVRElPTU9ERV9SRUFMQVVESU9fOCAoKF9fdTMyKSAweDAwMDAwMDAyKQorI2RlZmluZSBTTkRfQVVESU9NT0RFX1JFQUxBVURJT18xMCAoKF9fdTMyKSAweDAwMDAwMDA0KQorI2RlZmluZSBTTkRfQVVESU9NT0RFX1JFQUxBVURJT19TVVJST1VORCAoKF9fdTMyKSAweDAwMDAwMDA4KQorI2RlZmluZSBTTkRfQVVESU9QUk9GSUxFX1ZPUkJJUyAoKF9fdTMyKSAweDAwMDAwMDAxKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgU05EX0FVRElPTU9ERV9WT1JCSVMgKChfX3UzMikgMHgwMDAwMDAwMSkKKyNkZWZpbmUgU05EX0FVRElPUFJPRklMRV9GTEFDICgoX191MzIpIDB4MDAwMDAwMDEpCisjZGVmaW5lIFNORF9BVURJT01PREVfRkxBQ19MRVZFTDAgKChfX3UzMikgMHgwMDAwMDAwMSkKKyNkZWZpbmUgU05EX0FVRElPTU9ERV9GTEFDX0xFVkVMMSAoKF9fdTMyKSAweDAwMDAwMDAyKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgU05EX0FVRElPTU9ERV9GTEFDX0xFVkVMMiAoKF9fdTMyKSAweDAwMDAwMDA0KQorI2RlZmluZSBTTkRfQVVESU9NT0RFX0ZMQUNfTEVWRUwzICgoX191MzIpIDB4MDAwMDAwMDgpCisjZGVmaW5lIFNORF9BVURJT01PREVfRkxBQ19MRVZFTDQgKChfX3UzMikgMHgwMDAwMDAxMCkKKyNkZWZpbmUgU05EX0FVRElPTU9ERV9GTEFDX0xFVkVMNSAoKF9fdTMyKSAweDAwMDAwMDIwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgU05EX0FVRElPTU9ERV9GTEFDX0xFVkVMNiAoKF9fdTMyKSAweDAwMDAwMDQwKQorI2RlZmluZSBTTkRfQVVESU9NT0RFX0ZMQUNfTEVWRUw3ICgoX191MzIpIDB4MDAwMDAwODApCisjZGVmaW5lIFNORF9BVURJT01PREVfRkxBQ19MRVZFTDggKChfX3UzMikgMHgwMDAwMDEwMCkKKyNkZWZpbmUgU05EX0FVRElPU1RSRUFNRk9STUFUX0ZMQUMgKChfX3UzMikgMHgwMDAwMDAwMSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFNORF9BVURJT1NUUkVBTUZPUk1BVF9GTEFDX09HRyAoKF9fdTMyKSAweDAwMDAwMDAyKQorI2RlZmluZSBTTkRfQVVESU9QUk9GSUxFX0lFQzYxOTM3ICgoX191MzIpIDB4MDAwMDAwMDEpCisjZGVmaW5lIFNORF9BVURJT1BST0ZJTEVfSUVDNjE5MzdfU1BESUYgKChfX3UzMikgMHgwMDAwMDAwMikKKyNkZWZpbmUgU05EX0FVRElPTU9ERV9JRUNfUkVGX1NUUkVBTV9IRUFERVIgKChfX3UzMikgMHgwMDAwMDAwMCkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFNORF9BVURJT01PREVfSUVDX0xQQ00gKChfX3UzMikgMHgwMDAwMDAwMSkKKyNkZWZpbmUgU05EX0FVRElPTU9ERV9JRUNfQUMzICgoX191MzIpIDB4MDAwMDAwMDIpCisjZGVmaW5lIFNORF9BVURJT01PREVfSUVDX01QRUcxICgoX191MzIpIDB4MDAwMDAwMDQpCisjZGVmaW5lIFNORF9BVURJT01PREVfSUVDX01QMyAoKF9fdTMyKSAweDAwMDAwMDA4KQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgU05EX0FVRElPTU9ERV9JRUNfTVBFRzIgKChfX3UzMikgMHgwMDAwMDAxMCkKKyNkZWZpbmUgU05EX0FVRElPTU9ERV9JRUNfQUFDTEMgKChfX3UzMikgMHgwMDAwMDAyMCkKKyNkZWZpbmUgU05EX0FVRElPTU9ERV9JRUNfRFRTICgoX191MzIpIDB4MDAwMDAwNDApCisjZGVmaW5lIFNORF9BVURJT01PREVfSUVDX0FUUkFDICgoX191MzIpIDB4MDAwMDAwODApCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBTTkRfQVVESU9NT0RFX0lFQ19TQUNEICgoX191MzIpIDB4MDAwMDAxMDApCisjZGVmaW5lIFNORF9BVURJT01PREVfSUVDX0VBQzMgKChfX3UzMikgMHgwMDAwMDIwMCkKKyNkZWZpbmUgU05EX0FVRElPTU9ERV9JRUNfRFRTX0hEICgoX191MzIpIDB4MDAwMDA0MDApCisjZGVmaW5lIFNORF9BVURJT01PREVfSUVDX01MUCAoKF9fdTMyKSAweDAwMDAwODAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgU05EX0FVRElPTU9ERV9JRUNfRFNUICgoX191MzIpIDB4MDAwMDEwMDApCisjZGVmaW5lIFNORF9BVURJT01PREVfSUVDX1dNQVBSTyAoKF9fdTMyKSAweDAwMDAyMDAwKQorI2RlZmluZSBTTkRfQVVESU9NT0RFX0lFQ19SRUZfQ1hUICgoX191MzIpIDB4MDAwMDQwMDApCisjZGVmaW5lIFNORF9BVURJT01PREVfSUVDX0hFX0FBQyAoKF9fdTMyKSAweDAwMDA4MDAwKQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgU05EX0FVRElPTU9ERV9JRUNfSEVfQUFDMiAoKF9fdTMyKSAweDAwMDEwMDAwKQorI2RlZmluZSBTTkRfQVVESU9NT0RFX0lFQ19NUEVHX1NVUlJPVU5EICgoX191MzIpIDB4MDAwMjAwMDApCisjZGVmaW5lIFNORF9BVURJT1BST0ZJTEVfRzcyM18xICgoX191MzIpIDB4MDAwMDAwMDEpCisjZGVmaW5lIFNORF9BVURJT01PREVfRzcyM18xX0FOTkVYX0EgKChfX3UzMikgMHgwMDAwMDAwMSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFNORF9BVURJT01PREVfRzcyM18xX0FOTkVYX0IgKChfX3UzMikgMHgwMDAwMDAwMikKKyNkZWZpbmUgU05EX0FVRElPTU9ERV9HNzIzXzFfQU5ORVhfQyAoKF9fdTMyKSAweDAwMDAwMDA0KQorI2RlZmluZSBTTkRfQVVESU9QUk9GSUxFX0c3MjkgKChfX3UzMikgMHgwMDAwMDAwMSkKKyNkZWZpbmUgU05EX0FVRElPTU9ERV9HNzI5X0FOTkVYX0EgKChfX3UzMikgMHgwMDAwMDAwMSkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFNORF9BVURJT01PREVfRzcyOV9BTk5FWF9CICgoX191MzIpIDB4MDAwMDAwMDIpCisjZGVmaW5lIFNORF9SQVRFQ09OVFJPTE1PREVfQ09OU1RBTlRCSVRSQVRFICgoX191MzIpIDB4MDAwMDAwMDEpCisjZGVmaW5lIFNORF9SQVRFQ09OVFJPTE1PREVfVkFSSUFCTEVCSVRSQVRFICgoX191MzIpIDB4MDAwMDAwMDIpCitzdHJ1Y3Qgc25kX2VuY193bWEgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UzMiBzdXBlcl9ibG9ja19hbGlnbjsKKyBfX3UzMiBiaXRzX3Blcl9zYW1wbGU7CisgX191MzIgY2hhbm5lbG1hc2s7CisgX191MzIgZW5jb2Rlb3B0OworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UzMiBlbmNvZGVvcHQxOworIF9fdTMyIGVuY29kZW9wdDI7Cit9Oworc3RydWN0IHNuZF9lbmNfdm9yYmlzIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX19zMzIgcXVhbGl0eTsKKyBfX3UzMiBtYW5hZ2VkOworIF9fdTMyIG1heF9iaXRfcmF0ZTsKKyBfX3UzMiBtaW5fYml0X3JhdGU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTMyIGRvd25taXg7Cit9Oworc3RydWN0IHNuZF9lbmNfcmVhbCB7CisgX191MzIgcXVhbnRfYml0czsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MzIgc3RhcnRfcmVnaW9uOworIF9fdTMyIG51bV9yZWdpb25zOworfTsKK3N0cnVjdCBzbmRfZW5jX2ZsYWMgeworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UzMiBudW07CisgX191MzIgZ2FpbjsKK307CitzdHJ1Y3Qgc25kX2VuY19nZW5lcmljIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MzIgYnc7CisgX19zMzIgcmVzZXJ2ZWRbMTVdOworfTsKK3VuaW9uIHNuZF9jb2RlY19vcHRpb25zIHsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgc3RydWN0IHNuZF9lbmNfd21hIHdtYTsKKyBzdHJ1Y3Qgc25kX2VuY192b3JiaXMgdm9yYmlzOworIHN0cnVjdCBzbmRfZW5jX3JlYWwgcmVhbDsKKyBzdHJ1Y3Qgc25kX2VuY19mbGFjIGZsYWM7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIHN0cnVjdCBzbmRfZW5jX2dlbmVyaWMgZ2VuZXJpYzsKK307CitzdHJ1Y3Qgc25kX2NvZGVjX2Rlc2MgeworIF9fdTMyIG1heF9jaDsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MzIgc2FtcGxlX3JhdGVzOworIF9fdTMyIGJpdF9yYXRlW01BWF9OVU1fQklUUkFURVNdOworIF9fdTMyIG51bV9iaXRyYXRlczsKKyBfX3UzMiByYXRlX2NvbnRyb2w7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTMyIHByb2ZpbGVzOworIF9fdTMyIG1vZGVzOworIF9fdTMyIGZvcm1hdHM7CisgX191MzIgbWluX2J1ZmZlcjsKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisgX191MzIgcmVzZXJ2ZWRbMTVdOworfTsKK3N0cnVjdCBzbmRfY29kZWMgeworIF9fdTMyIGlkOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyBfX3UzMiBjaF9pbjsKKyBfX3UzMiBjaF9vdXQ7CisgX191MzIgc2FtcGxlX3JhdGU7CisgX191MzIgYml0X3JhdGU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTMyIHJhdGVfY29udHJvbDsKKyBfX3UzMiBwcm9maWxlOworIF9fdTMyIGxldmVsOworIF9fdTMyIGNoX21vZGU7CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworIF9fdTMyIGZvcm1hdDsKKyBfX3UzMiBhbGlnbjsKKyB1bmlvbiBzbmRfY29kZWNfb3B0aW9ucyBvcHRpb25zOworIF9fdTMyIHJlc2VydmVkWzNdOworLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KK307CisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9zb3VuZC90bHYuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9zb3VuZC90bHYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zM2M5NmQ2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL3NvdW5kL3Rsdi5oCkBAIC0wLDAgKzEsNDQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19TT1VORF9UTFZfSAorI2RlZmluZSBfX1NPVU5EX1RMVl9ICisjZGVmaW5lIFNORFJWX0NUTF9UTFZUX0NPTlRBSU5FUiAwCisjZGVmaW5lIFNORFJWX0NUTF9UTFZUX0RCX1NDQUxFIDEKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFNORFJWX0NUTF9UTFZUX0RCX0xJTkVBUiAyCisjZGVmaW5lIFNORFJWX0NUTF9UTFZUX0RCX1JBTkdFIDMKKyNkZWZpbmUgU05EUlZfQ1RMX1RMVlRfREJfTUlOTUFYIDQKKyNkZWZpbmUgU05EUlZfQ1RMX1RMVlRfREJfTUlOTUFYX01VVEUgNQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgVExWX0RCX1NDQUxFX01BU0sgMHhmZmZmCisjZGVmaW5lIFRMVl9EQl9TQ0FMRV9NVVRFIDB4MTAwMDAKKyNkZWZpbmUgVExWX0RCX1NDQUxFX0lURU0obWluLCBzdGVwLCBtdXRlKSAgIFNORFJWX0NUTF9UTFZUX0RCX1NDQUxFLCAyICogc2l6ZW9mKHVuc2lnbmVkIGludCksICAgKG1pbiksICgoc3RlcCkgJiBUTFZfREJfU0NBTEVfTUFTSykgfCAoKG11dGUpID8gVExWX0RCX1NDQUxFX01VVEUgOiAwKQorI2RlZmluZSBERUNMQVJFX1RMVl9EQl9TQ0FMRShuYW1lLCBtaW4sIHN0ZXAsIG11dGUpICAgdW5zaWduZWQgaW50IG5hbWVbXSA9IHsgVExWX0RCX1NDQUxFX0lURU0obWluLCBzdGVwLCBtdXRlKSB9CisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBUTFZfREJfTUlOTUFYX0lURU0obWluX2RCLCBtYXhfZEIpICAgU05EUlZfQ1RMX1RMVlRfREJfTUlOTUFYLCAyICogc2l6ZW9mKHVuc2lnbmVkIGludCksICAgKG1pbl9kQiksIChtYXhfZEIpCisjZGVmaW5lIFRMVl9EQl9NSU5NQVhfTVVURV9JVEVNKG1pbl9kQiwgbWF4X2RCKSAgIFNORFJWX0NUTF9UTFZUX0RCX01JTk1BWF9NVVRFLCAyICogc2l6ZW9mKHVuc2lnbmVkIGludCksICAgKG1pbl9kQiksIChtYXhfZEIpCisjZGVmaW5lIERFQ0xBUkVfVExWX0RCX01JTk1BWChuYW1lLCBtaW5fZEIsIG1heF9kQikgICB1bnNpZ25lZCBpbnQgbmFtZVtdID0geyBUTFZfREJfTUlOTUFYX0lURU0obWluX2RCLCBtYXhfZEIpIH0KKyNkZWZpbmUgREVDTEFSRV9UTFZfREJfTUlOTUFYX01VVEUobmFtZSwgbWluX2RCLCBtYXhfZEIpICAgdW5zaWduZWQgaW50IG5hbWVbXSA9IHsgVExWX0RCX01JTk1BWF9NVVRFX0lURU0obWluX2RCLCBtYXhfZEIpIH0KKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIFRMVl9EQl9MSU5FQVJfSVRFTShtaW5fZEIsIG1heF9kQikgICBTTkRSVl9DVExfVExWVF9EQl9MSU5FQVIsIDIgKiBzaXplb2YodW5zaWduZWQgaW50KSwgICAobWluX2RCKSwgKG1heF9kQikKKyNkZWZpbmUgREVDTEFSRV9UTFZfREJfTElORUFSKG5hbWUsIG1pbl9kQiwgbWF4X2RCKSAgIHVuc2lnbmVkIGludCBuYW1lW10gPSB7IFRMVl9EQl9MSU5FQVJfSVRFTShtaW5fZEIsIG1heF9kQikgfQorI2RlZmluZSBUTFZfREJfUkFOR0VfSEVBRChudW0pICAgU05EUlZfQ1RMX1RMVlRfREJfUkFOR0UsIDYgKiAobnVtKSAqIHNpemVvZih1bnNpZ25lZCBpbnQpCisjZGVmaW5lIFRMVl9EQl9HQUlOX01VVEUgLTk5OTk5OTkKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi91YXBpL2xpbnV4L2F1eHZlYy5oIGIvbGliYy9rZXJuZWwvY29tbW9uL3VhcGkvbGludXgvYXV4dmVjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTRiNzZlOQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi91YXBpL2xpbnV4L2F1eHZlYy5oCkBAIC0wLDAgKzEsNTAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKiogICBUbyBlZGl0IHRoZSBjb250ZW50IG9mIHRoaXMgaGVhZGVyLCBtb2RpZnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAqKiogICBzb3VyY2UgZmlsZSAoZS5nLiB1bmRlciBleHRlcm5hbC9rZXJuZWwtaGVhZGVycy9vcmlnaW5hbC8pIHRoZW4KKyAqKiogICBydW4gYmlvbmljL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKKyAqKioKKyAqKiogICBBbnkgbWFudWFsIGNoYW5nZSBoZXJlIHdpbGwgYmUgbG9zdCB0aGUgbmV4dCB0aW1lIHRoaXMgc2NyaXB0IHdpbGwKKyAqKiogICBiZSBydW4uIFlvdSd2ZSBiZWVuIHdhcm5lZCEKKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX1VBUElfTElOVVhfQVVYVkVDX0gKKyNkZWZpbmUgX1VBUElfTElOVVhfQVVYVkVDX0gKKyNpbmNsdWRlIDxhc20vYXV4dmVjLmg+CisjZGVmaW5lIEFUX05VTEwgMAorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgQVRfSUdOT1JFIDEKKyNkZWZpbmUgQVRfRVhFQ0ZEIDIKKyNkZWZpbmUgQVRfUEhEUiAzCisjZGVmaW5lIEFUX1BIRU5UIDQKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEFUX1BITlVNIDUKKyNkZWZpbmUgQVRfUEFHRVNaIDYKKyNkZWZpbmUgQVRfQkFTRSA3CisjZGVmaW5lIEFUX0ZMQUdTIDgKKy8qIFdBUk5JTkc6IERPIE5PVCBFRElULCBBVVRPLUdFTkVSQVRFRCBDT0RFIC0gU0VFIFRPUCBGT1IgSU5TVFJVQ1RJT05TICovCisjZGVmaW5lIEFUX0VOVFJZIDkKKyNkZWZpbmUgQVRfTk9URUxGIDEwCisjZGVmaW5lIEFUX1VJRCAxMQorI2RlZmluZSBBVF9FVUlEIDEyCisvKiBXQVJOSU5HOiBETyBOT1QgRURJVCwgQVVUTy1HRU5FUkFURUQgQ09ERSAtIFNFRSBUT1AgRk9SIElOU1RSVUNUSU9OUyAqLworI2RlZmluZSBBVF9HSUQgMTMKKyNkZWZpbmUgQVRfRUdJRCAxNAorI2RlZmluZSBBVF9QTEFURk9STSAxNQorI2RlZmluZSBBVF9IV0NBUCAxNgorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgQVRfQ0xLVENLIDE3CisjZGVmaW5lIEFUX1NFQ1VSRSAyMworI2RlZmluZSBBVF9CQVNFX1BMQVRGT1JNIDI0CisjZGVmaW5lIEFUX1JBTkRPTSAyNQorLyogV0FSTklORzogRE8gTk9UIEVESVQsIEFVVE8tR0VORVJBVEVEIENPREUgLSBTRUUgVE9QIEZPUiBJTlNUUlVDVElPTlMgKi8KKyNkZWZpbmUgQVRfRVhFQ0ZOIDMxCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi92aWRlby9kc3Njb21wLmggYi9saWJjL2tlcm5lbC9jb21tb24vdmlkZW8vZHNzY29tcC5oCmluZGV4IDU3NTA3MWYuLmQzZjUwMmMgMTAwNjQ0Ci0tLSBhL2xpYmMva2VybmVsL2NvbW1vbi92aWRlby9kc3Njb21wLmgKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL3ZpZGVvL2Rzc2NvbXAuaApAQCAtMzY5LDQgKzM2OSwzIEBACiAjZGVmaW5lIERTU0NJT0NfU0VUVVBfRElTUEMgX0lPVygnTycsIDEzMywgc3RydWN0IGRzc2NvbXBfc2V0dXBfZGlzcGNfZGF0YSkKICNkZWZpbmUgRFNTQ0lPQ19TRVRVUF9ESVNQTEFZIF9JT1coJ08nLCAxMzQsIHN0cnVjdCBkc3Njb21wX3NldHVwX2Rpc3BsYXlfZGF0YSkKICNlbmRpZgotCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC90b29scy9jbGVhbl9oZWFkZXIucHkgYi9saWJjL2tlcm5lbC90b29scy9jbGVhbl9oZWFkZXIucHkKaW5kZXggMDU0OWZjMi4uMWE1NDcxYSAxMDA3NTUKLS0tIGEvbGliYy9rZXJuZWwvdG9vbHMvY2xlYW5faGVhZGVyLnB5CisrKyBiL2xpYmMva2VybmVsL3Rvb2xzL2NsZWFuX2hlYWRlci5weQpAQCAtMzcsNyArMzcsNyBAQAogICAgICAgICBzcmNfcGF0aCA9IHNyY19wYXRoWzE6XQogCiAgICAgaWYgbGVuKHNyY19wYXRoKSA9PSAwOgotICAgICAgICBwYW5pYyggIm9vcHMsIGludGVybmFsIGVycm9yLCBjYW4ndCBleHRyYWN0IGNvcnJlY3QgcmVsYXRpdmUgcGF0aCIgKQorICAgICAgICBwYW5pYyggIm9vcHMsIGludGVybmFsIGVycm9yLCBjYW4ndCBleHRyYWN0IGNvcnJlY3QgcmVsYXRpdmUgcGF0aFxuIiApCiAKICAgICAjIGNvbnZlcnQgaW50byBkZXN0aW5hdGlvbiBwYXRoLCBleHRyYWN0aW5nIGFyY2hpdGVjdHVyZSBpZiBuZWVkZWQKICAgICAjIGFuZCB0aGUgY29ycmVzcG9uZGluZyBsaXN0IG9mIGtub3duIHN0YXRpYyBmdW5jdGlvbnMKQEAgLTYyLDggKzYyLDE0IEBACiAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoICJlcnJvcjogY2FuJ3QgcGFyc2UgJyVzJyIgJSBwYXRoICkKICAgICAgICAgc3lzLmV4aXQoMSkKIAorICAgIG1hY3JvcyA9IGtlcm5lbF9rbm93bl9tYWNyb3MuY29weSgpCisgICAgaWYgYXJjaCBhbmQgYXJjaCBpbiBrZXJuZWxfZGVmYXVsdF9hcmNoX21hY3JvczoKKyAgICAgICAgbWFjcm9zLnVwZGF0ZShrZXJuZWxfZGVmYXVsdF9hcmNoX21hY3Jvc1thcmNoXSkKIAotICAgIGJsb2Nrcy5vcHRpbWl6ZU1hY3Jvcygga2VybmVsX2tub3duX21hY3JvcyApCisgICAgaWYgYXJjaCBhbmQgYXJjaCBpbiBrZXJuZWxfYXJjaF90b2tlbl9yZXBsYWNlbWVudHM6CisgICAgICAgIGJsb2Nrcy5yZXBsYWNlVG9rZW5zKCBrZXJuZWxfYXJjaF90b2tlbl9yZXBsYWNlbWVudHNbYXJjaF0gKQorCisgICAgYmxvY2tzLm9wdGltaXplTWFjcm9zKCBtYWNyb3MgKQogICAgIGJsb2Nrcy5vcHRpbWl6ZUlmMDEoKQogICAgIGJsb2Nrcy5yZW1vdmVWYXJzQW5kRnVuY3MoIHN0YXRpY3MgKQogICAgIGJsb2Nrcy5yZXBsYWNlVG9rZW5zKCBrZXJuZWxfdG9rZW5fcmVwbGFjZW1lbnRzICkKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3Rvb2xzL2NwcC5weSBiL2xpYmMva2VybmVsL3Rvb2xzL2NwcC5weQppbmRleCA4ZTE1YTY3Li5iOGFhNzc1IDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC90b29scy9jcHAucHkKKysrIGIvbGliYy9rZXJuZWwvdG9vbHMvY3BwLnB5CkBAIC0xNjc2LDcgKzE2NzYsNyBAQAogICAgICAgICAgICAgcmV0dXJuIGxlZnRfY291bnQKIAogICAgICAgICBpZiBzZWxmLmRpcmVjdGl2ZToKLSAgICAgICAgICAgIG91dC53cml0ZShzdHIoc2VsZikgKyAiXG4iKQorICAgICAgICAgICAgb3V0LndyaXRlKHN0cihzZWxmKS5yc3RyaXAoKSArICJcbiIpCiAgICAgICAgICAgICBsZWZ0X2NvdW50IC09IDEKICAgICAgICAgICAgIGlmIGxlZnRfY291bnQgPT0gMDoKICAgICAgICAgICAgICAgICBvdXQud3JpdGUod2FybmluZykKQEAgLTE3NTYsNyArMTc1Niw3IEBACiAgICAgICAgIGZvciBiIGluIHNlbGYuYmxvY2tzOgogICAgICAgICAgICAgcmVzdWx0ICs9IHN0cihiKQogICAgICAgICAgICAgaWYgYi5pc0RpcmVjdGl2ZSgpOgotICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnXG4nCisgICAgICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0LnJzdHJpcCgpICsgJ1xuJwogICAgICAgICByZXR1cm4gcmVzdWx0CiAKICAgICBkZWYgIG9wdGltaXplSWYwMShzZWxmKToKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3Rvb2xzL2RlZmF1bHRzLnB5IGIvbGliYy9rZXJuZWwvdG9vbHMvZGVmYXVsdHMucHkKaW5kZXggMjAwYzc3Yy4uZGEwMjQ4MSAxMDA2NDQKLS0tIGEvbGliYy9rZXJuZWwvdG9vbHMvZGVmYXVsdHMucHkKKysrIGIvbGliYy9rZXJuZWwvdG9vbHMvZGVmYXVsdHMucHkKQEAgLTQ0LDEyICs0NCwxOSBAQAogIyB0b29sY2hhaW4gcHJlcHJvY2Vzc29yCiBrZXJuZWxfZGVmYXVsdF9hcmNoX21hY3JvcyA9IHsKICAgICAiYXJtIjoge30sCi0gICAgIng4NiI6IHsiX19pMzg2X18iOiAiMSJ9LAorICAgICJ4ODYiOiB7Il9faTM4Nl9fIjogIjEiLCAiQ09ORklHX1g4Nl8zMiI6ICIxIn0sCisgICAgIm1pcHMiOiB7IkNPTkZJR18zMkJJVCI6IjEifSwKICAgICB9CiAKK2tlcm5lbF9hcmNoX3Rva2VuX3JlcGxhY2VtZW50cyA9IHsKKyAgICAiYXJtIjoge30sCisgICAgIng4NiI6IHt9LAorICAgICJtaXBzIjogeyJvZmZfdCI6Il9fa2VybmVsX29mZl90In0sCisgICAgfQogIyBSZXBsYWNlIHRva2VucyBpbiB0aGUgb3V0cHV0IGFjY29yZGluZyB0byB0aGlzIG1hcHBpbmcKIGtlcm5lbF90b2tlbl9yZXBsYWNlbWVudHMgPSB7CiAgICAgImFzbSI6ICJfX2FzbV9fIiwKKyAgICAiX191bnVzZWQiOiAiX19saW51eF91bnVzZWQiLCAjIFRoZSBrZXJuZWwgdXNhZ2Ugb2YgX191bnVzZWQgY29uZmxpY3RzIHdpdGggdGhlIG1hY3JvIGRlZmluZWQgaW4gc3lzL2NkZWZzLmgKICAgICB9CiAKICMgdGhpcyBpcyB0aGUgc2V0IG9mIGtub3duIHN0YXRpYyBpbmxpbmUgZnVuY3Rpb25zIHRoYXQgd2Ugd2FudCB0byBrZWVwCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5IGIvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weQppbmRleCA2YTczMGE1Li4zZjFkMWU2IDEwMDc1NQotLS0gYS9saWJjL2tlcm5lbC90b29scy91cGRhdGVfYWxsLnB5CisrKyBiL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKQEAgLTE2LDExICsxNiw2IEBACiAKICAgICAgIC0gdGhlIGNsZWFuIGhlYWRlcnMgd2lsbCBiZSBwbGFjZWQgaW4gJy4uL2FyY2gtPGFyY2g+L2FzbScsCiAgICAgICAgICcuLi9jb21tb24vbGludXgnLCAnLi4vY29tbW9uL2FzbS1nZW5lcmljJywgZXRjLi4KLQotICAgICAgLSBpZiBBTkRST0lEX1BST0RVQ1RfT1VUIGlzIGRlZmluZWQgaW4geW91ciBlbnZpcm9ubWVudCwgeW91J3JlCi0gICAgICAgIHVzaW5nIHRoZSBBbmRyb2lkIGJ1aWxkIHN5c3RlbSwgYW5kIHRoZSBwcm9ncmFtIHdpbGwgaXNzdWUKLSAgICAgICAgcDQgYWRkIC8gZWRpdCAvIGRlbGV0ZSBjb21tYW5kcyB0byB1cGRhdGUgdGhlIGRlcG90IGZvciB5b3UuCi0gICAgICAgICh5b3UnbGwgbmVlZCB0byBwNCBzdWJtaXQgbWFudWFsbHkgdGhvdWdoKQogIiIiICUgeyAicHJvZ25hbWUiIDogb3MucGF0aC5iYXNlbmFtZShzeXMuYXJndlswXSkgfQogICAgIHN5cy5leGl0KDApCiAKQEAgLTM3LDEzICszMiwxMyBAQAogcHJvZ2RpciA9IGZpbmRfcHJvZ3JhbV9kaXIoKQogCiBpZiBsZW4oYXJncykgPT0gMToKLSAgICBvcmlnaW5hbF9kaXIgPSBhcmdbMF0KKyAgICBvcmlnaW5hbF9kaXIgPSBhcmdzWzBdCiAgICAgaWYgbm90IG9zLnBhdGguaXNkaXIob3JpZ2luYWxfZGlyKToKLSAgICAgICAgcGFuaWMoICJOb3QgYSBkaXJlY3Rvcnk6ICVzIiAlIG9yaWdpbmFsX2RpciApCisgICAgICAgIHBhbmljKCAiTm90IGEgZGlyZWN0b3J5OiAlc1xuIiAlIG9yaWdpbmFsX2RpciApCiBlbHNlOgogICAgIG9yaWdpbmFsX2RpciA9IGtlcm5lbF9vcmlnaW5hbF9wYXRoCiAgICAgaWYgbm90IG9zLnBhdGguaXNkaXIob3JpZ2luYWxfZGlyKToKLSAgICAgICAgcGFuaWMoICJNaXNzaW5nIGRpcmVjdG9yeSwgcGxlYXNlIHNwZWNpZnkgb25lIHRocm91Z2ggY29tbWFuZC1saW5lOiAlcyIgJSBvcmlnaW5hbF9kaXIgKQorICAgICAgICBwYW5pYyggIk1pc3NpbmcgZGlyZWN0b3J5LCBwbGVhc2Ugc3BlY2lmeSBvbmUgdGhyb3VnaCBjb21tYW5kLWxpbmU6ICVzXG4iICUgb3JpZ2luYWxfZGlyICkKIAogIyBmaW5kIGFsbCBzb3VyY2UgZmlsZXMgaW4gJ29yaWdpbmFsJwogIwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdG9vbHMvdXRpbHMucHkgYi9saWJjL2tlcm5lbC90b29scy91dGlscy5weQppbmRleCBmNGNmNTQwLi4wNDc4ZTkzIDEwMDY0NAotLS0gYS9saWJjL2tlcm5lbC90b29scy91dGlscy5weQorKysgYi9saWJjL2tlcm5lbC90b29scy91dGlscy5weQpAQCAtNDcsMTU0ICs0Nyw2IEBACiBkZWYgZmluZF9wcm9ncmFtX2RpcigpOgogICAgIHJldHVybiBvcy5wYXRoLmRpcm5hbWUoc3lzLmFyZ3ZbMF0pCiAKLWRlZiBmaW5kX2ZpbGVfZnJvbV91cHdhcmRzKGZyb21fcGF0aCx0YXJnZXRfZmlsZSk6Ci0gICAgIiIiZmluZCBhIGZpbGUgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5IG9yIGl0cyBwYXJlbnRzLiBpZiAnZnJvbV9wYXRoJyBpcyBOb25lLAotICAgICAgIHNlYWNoIGZyb20gdGhlIGN1cnJlbnQgcHJvZ3JhbSdzIGRpcmVjdG9yeSIiIgotICAgIHBhdGggPSBmcm9tX3BhdGgKLSAgICBpZiBwYXRoID09IE5vbmU6Ci0gICAgICAgIHBhdGggPSBvcy5wYXRoLnJlYWxwYXRoKHN5cy5hcmd2WzBdKQotICAgICAgICBwYXRoID0gb3MucGF0aC5kaXJuYW1lKHBhdGgpCi0gICAgICAgIEQoInRoaXMgc2NyaXB0IHNlZW1zIHRvIGJlIGxvY2F0ZWQgaW46ICVzIiAlIHBhdGgpCi0KLSAgICB3aGlsZSAxOgotICAgICAgICBEKCJwcm9iaW5nICIrcGF0aCkKLSAgICAgICAgaWYgcGF0aCA9PSAiIjoKLSAgICAgICAgICAgIGZpbGUgPSB0YXJnZXRfZmlsZQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgZmlsZSA9IHBhdGggKyAiLyIgKyB0YXJnZXRfZmlsZQotCi0gICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKGZpbGUpOgotICAgICAgICAgICAgRCgiZm91bmQgJXMgaW4gJXMiICUgKHRhcmdldF9maWxlLCBwYXRoKSkKLSAgICAgICAgICAgIHJldHVybiBmaWxlCi0KLSAgICAgICAgaWYgcGF0aCA9PSAiIjoKLSAgICAgICAgICAgIHJldHVybiBOb25lCi0KLSAgICAgICAgcGF0aCA9IG9zLnBhdGguZGlybmFtZShwYXRoKQotCi1kZWYgZmluZF9iaW9uaWNfcm9vdCgpOgotICAgIGZpbGUgPSBmaW5kX2ZpbGVfZnJvbV91cHdhcmRzKE5vbmUsICJTWVNDQUxMUy5UWFQiKQotICAgIGlmIGZpbGU6Ci0gICAgICAgIHJldHVybiBvcy5wYXRoLmRpcm5hbWUoZmlsZSkKLSAgICBlbHNlOgotICAgICAgICByZXR1cm4gTm9uZQotCi1kZWYgZmluZF9rZXJuZWxfaGVhZGVycygpOgotICAgICIiInRyeSB0byBmaW5kIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGUga2VybmVsIGhlYWRlcnMgZm9yIHRoaXMgbWFjaGluZSIiIgotICAgIHN0YXR1cywgdmVyc2lvbiA9IGNvbW1hbmRzLmdldHN0YXR1c291dHB1dCggInVuYW1lIC1yIiApICAjIGdldCBMaW51eCBrZXJuZWwgdmVyc2lvbgotICAgIGlmIHN0YXR1cyAhPSAwOgotICAgICAgICBEKCJjb3VsZCBub3QgZXhlY3V0ZSAndW5hbWUgLXInIGNvbW1hbmQgcHJvcGVybHkiKQotICAgICAgICByZXR1cm4gTm9uZQotCi0gICAgIyBnZXQgcmlkIG9mIHRoZSAiLXhlblUiIHN1ZmZpeCB0aGF0IGlzIGZvdW5kIGluIFhlbiB2aXJ0dWFsIG1hY2hpbmVzCi0gICAgaWYgbGVuKHZlcnNpb24pID4gNSBhbmQgdmVyc2lvblstNTpdID09ICIteGVuVSI6Ci0gICAgICAgIHZlcnNpb24gPSB2ZXJzaW9uWzotNV0KLQotICAgIHBhdGggPSAiL3Vzci9zcmMvbGludXgtaGVhZGVycy0iICsgdmVyc2lvbgotICAgIEQoInByb2JpbmcgJXMgZm9yIGtlcm5lbCBoZWFkZXJzIiAlIChwYXRoKyIvaW5jbHVkZSIpKQotICAgIHJldCA9IG9zLnBhdGguaXNkaXIoIHBhdGggKQotICAgIGlmIHJldDoKLSAgICAgICAgRCgiZm91bmQga2VybmVsIGhlYWRlcnMgaW46ICVzIiAlIChwYXRoICsgIi9pbmNsdWRlIikpCi0gICAgICAgIHJldHVybiBwYXRoCi0gICAgcmV0dXJuIE5vbmUKLQotCi0jIHBhcnNlciBmb3IgdGhlIFNZU0NBTExTLlRYVCBmaWxlCi0jCi1jbGFzcyBTeXNDYWxsc1R4dFBhcnNlcjoKLSAgICBkZWYgX19pbml0X18oc2VsZik6Ci0gICAgICAgIHNlbGYuc3lzY2FsbHMgPSBbXQotICAgICAgICBzZWxmLmxpbmVubyAgID0gMAotCi0gICAgZGVmIEUobXNnKToKLSAgICAgICAgcHJpbnQgIiVkOiAlcyIgJSAoc2VsZi5saW5lbm8sIG1zZykKLQotICAgIGRlZiBwYXJzZV9saW5lKHNlbGYsIGxpbmUpOgotICAgICAgICBwb3NfbHBhcmVuID0gbGluZS5maW5kKCcoJykKLSAgICAgICAgRSAgICAgICAgICA9IHNlbGYuRQotICAgICAgICBpZiBwb3NfbHBhcmVuIDwgMDoKLSAgICAgICAgICAgIEUoIm1pc3NpbmcgbGVmdCBwYXJlbnRoZXNpcyBpbiAnJXMnIiAlIGxpbmUpCi0gICAgICAgICAgICByZXR1cm4KLQotICAgICAgICBwb3NfcnBhcmVuID0gbGluZS5yZmluZCgnKScpCi0gICAgICAgIGlmIHBvc19ycGFyZW4gPCAwIG9yIHBvc19ycGFyZW4gPD0gcG9zX2xwYXJlbjoKLSAgICAgICAgICAgIEUoIm1pc3Npbmcgb3IgbWlzcGxhY2VkIHJpZ2h0IHBhcmVudGhlc2lzIGluICclcyciICUgbGluZSkKLSAgICAgICAgICAgIHJldHVybgotCi0gICAgICAgIHJldHVybl90eXBlID0gbGluZVs6cG9zX2xwYXJlbl0uc3RyaXAoKS5zcGxpdCgpCi0gICAgICAgIGlmIGxlbihyZXR1cm5fdHlwZSkgPCAyOgotICAgICAgICAgICAgRSgibWlzc2luZyByZXR1cm4gdHlwZSBpbiAnJXMnIiAlIGxpbmUpCi0gICAgICAgICAgICByZXR1cm4KLQotICAgICAgICBzeXNjYWxsX2Z1bmMgPSByZXR1cm5fdHlwZVstMV0KLSAgICAgICAgcmV0dXJuX3R5cGUgID0gc3RyaW5nLmpvaW4ocmV0dXJuX3R5cGVbOi0xXSwnICcpCi0KLSAgICAgICAgcG9zX2NvbG9uID0gc3lzY2FsbF9mdW5jLmZpbmQoJzonKQotICAgICAgICBpZiBwb3NfY29sb24gPCAwOgotICAgICAgICAgICAgc3lzY2FsbF9uYW1lID0gc3lzY2FsbF9mdW5jCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBpZiBwb3NfY29sb24gPT0gMCBvciBwb3NfY29sb24rMSA+PSBsZW4oc3lzY2FsbF9mdW5jKToKLSAgICAgICAgICAgICAgICBFKCJtaXNwbGFjZWQgY29sb24gaW4gJyVzJyIgJSBsaW5lKQotICAgICAgICAgICAgICAgIHJldHVybgotICAgICAgICAgICAgc3lzY2FsbF9uYW1lID0gc3lzY2FsbF9mdW5jW3Bvc19jb2xvbisxOl0KLSAgICAgICAgICAgIHN5c2NhbGxfZnVuYyA9IHN5c2NhbGxfZnVuY1s6cG9zX2NvbG9uXQotCi0gICAgICAgIGlmIHBvc19ycGFyZW4gPiBwb3NfbHBhcmVuKzE6Ci0gICAgICAgICAgICBzeXNjYWxsX3BhcmFtcyA9IGxpbmVbcG9zX2xwYXJlbisxOnBvc19ycGFyZW5dLnNwbGl0KCcsJykKLSAgICAgICAgICAgIHBhcmFtcyAgICAgICAgID0gc3RyaW5nLmpvaW4oc3lzY2FsbF9wYXJhbXMsJywnKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgc3lzY2FsbF9wYXJhbXMgPSBbXQotICAgICAgICAgICAgcGFyYW1zICAgICAgICAgPSAidm9pZCIKLQotICAgICAgICBudW1iZXIgPSBsaW5lW3Bvc19ycGFyZW4rMTpdLnN0cmlwKCkKLSAgICAgICAgaWYgbnVtYmVyID09ICJzdHViIjoKLSAgICAgICAgICAgIHN5c2NhbGxfaWQgID0gLTEKLSAgICAgICAgICAgIHN5c2NhbGxfaWQyID0gLTEKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBpZiBudW1iZXJbMF0gPT0gJyMnOgotICAgICAgICAgICAgICAgICAgICBudW1iZXIgPSBudW1iZXJbMTpdLnN0cmlwKCkKLSAgICAgICAgICAgICAgICBudW1iZXJzID0gc3RyaW5nLnNwbGl0KG51bWJlciwnLCcpCi0gICAgICAgICAgICAgICAgc3lzY2FsbF9pZCAgPSBpbnQobnVtYmVyc1swXSkKLSAgICAgICAgICAgICAgICBzeXNjYWxsX2lkMiA9IHN5c2NhbGxfaWQKLSAgICAgICAgICAgICAgICBpZiBsZW4obnVtYmVycykgPiAxOgotICAgICAgICAgICAgICAgICAgICBzeXNjYWxsX2lkMiA9IGludChudW1iZXJzWzFdKQotICAgICAgICAgICAgZXhjZXB0OgotICAgICAgICAgICAgICAgIEUoImludmFsaWQgc3lzY2FsbCBudW1iZXIgaW4gJyVzJyIgJSBsaW5lKQotICAgICAgICAgICAgICAgIHJldHVybgotCi0gICAgICAgIHQgPSB7ICJpZCIgICAgIDogc3lzY2FsbF9pZCwKLSAgICAgICAgICAgICAgImlkMiIgICAgOiBzeXNjYWxsX2lkMiwKLSAgICAgICAgICAgICAgIm5hbWUiICAgOiBzeXNjYWxsX25hbWUsCi0gICAgICAgICAgICAgICJmdW5jIiAgIDogc3lzY2FsbF9mdW5jLAotICAgICAgICAgICAgICAicGFyYW1zIiA6IHN5c2NhbGxfcGFyYW1zLAotICAgICAgICAgICAgICAiZGVjbCIgICA6ICIlLTE1cyAgJXMgKCVzKTsiICUgKHJldHVybl90eXBlLCBzeXNjYWxsX2Z1bmMsIHBhcmFtcykgfQotCi0gICAgICAgIHNlbGYuc3lzY2FsbHMuYXBwZW5kKHQpCi0KLSAgICBkZWYgcGFyc2VfZmlsZShzZWxmLCBmaWxlX3BhdGgpOgotICAgICAgICBmcCA9IG9wZW4oZmlsZV9wYXRoKQotICAgICAgICBmb3IgbGluZSBpbiBmcC54cmVhZGxpbmVzKCk6Ci0gICAgICAgICAgICBzZWxmLmxpbmVubyArPSAxCi0gICAgICAgICAgICBsaW5lID0gbGluZS5zdHJpcCgpCi0gICAgICAgICAgICBpZiBub3QgbGluZTogY29udGludWUKLSAgICAgICAgICAgIGlmIGxpbmVbMF0gPT0gJyMnOiBjb250aW51ZQotICAgICAgICAgICAgc2VsZi5wYXJzZV9saW5lKGxpbmUpCi0KLSAgICAgICAgZnAuY2xvc2UoKQotCi0KLWNsYXNzIE91dHB1dDoKLSAgICBkZWYgIF9faW5pdF9fKHNlbGYsb3V0PXN5cy5zdGRvdXQpOgotICAgICAgICBzZWxmLm91dCA9IG91dAotCi0gICAgZGVmIHdyaXRlKHNlbGYsbXNnKToKLSAgICAgICAgc2VsZi5vdXQud3JpdGUobXNnKQotCi0gICAgZGVmIHdyaXRlbG4oc2VsZixtc2cpOgotICAgICAgICBzZWxmLm91dC53cml0ZShtc2cpCi0gICAgICAgIHNlbGYub3V0LndyaXRlKCJcbiIpCi0KIGNsYXNzIFN0cmluZ091dHB1dDoKICAgICBkZWYgX19pbml0X18oc2VsZik6CiAgICAgICAgIHNlbGYubGluZSA9ICIiCkBAIC0yMDMsMTAgKzU1LDYgQEAKICAgICAgICAgc2VsZi5saW5lICs9IG1zZwogICAgICAgICBEMigid3JpdGUgJyVzJyIgJSBtc2cpCiAKLSAgICBkZWYgd3JpdGVsbihzZWxmLG1zZyk6Ci0gICAgICAgIHNlbGYubGluZSArPSBtc2cgKyAnXG4nCi0gICAgICAgIEQyKCJ3cml0ZSAnJXNcXG4nIiUgbXNnKQotCiAgICAgZGVmIGdldChzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYubGluZQogCkBAIC0yNjksMzUgKzExNyw2IEBACiAgICAgICAgICAgICBmb3IgbmFtZSBpbiBkaXJzOgogICAgICAgICAgICAgICAgIG9zLnJtZGlyKG9zLnBhdGguam9pbihyb290LCBuYW1lKSkKIAotZGVmIHVwZGF0ZV9maWxlKCBwYXRoLCBuZXdkYXRhICk6Ci0gICAgIiIidXBkYXRlIGEgZmlsZSBvbiBkaXNrLCBvbmx5IGlmIGl0cyBjb250ZW50IGhhcyBjaGFuZ2VkIiIiCi0gICAgaWYgb3MucGF0aC5leGlzdHMoIHBhdGggKToKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgZiA9IG9wZW4oIHBhdGgsICJyIiApCi0gICAgICAgICAgICBvbGRkYXRhID0gZi5yZWFkKCkKLSAgICAgICAgICAgIGYuY2xvc2UoKQotICAgICAgICBleGNlcHQ6Ci0gICAgICAgICAgICBEKCJ1cGRhdGVfZmlsZTogY2Fubm90IHJlYWQgZXhpc3RpbmcgZmlsZSAnJXMnIiAlIHBhdGgpCi0gICAgICAgICAgICByZXR1cm4gMAotCi0gICAgICAgIGlmIG9sZGF0YSA9PSBuZXdkYXRhOgotICAgICAgICAgICAgRDIoInVwZGF0ZV9maWxlOiBubyBjaGFuZ2UgdG8gZmlsZSAnJXMnIiAlIHBhdGggKQotICAgICAgICAgICAgcmV0dXJuIDAKLQotICAgICAgICB1cGRhdGUgPSAxCi0gICAgZWxzZToKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgY3JlYXRlX2ZpbGVfcGF0aChwYXRoKQotICAgICAgICBleGNlcHQ6Ci0gICAgICAgICAgICBEKCJ1cGRhdGVfZmlsZTogY2Fubm90IGNyZWF0ZSBwYXRoIHRvICclcyciICUgcGF0aCkKLSAgICAgICAgICAgIHJldHVybiAwCi0KLSAgICBmID0gb3BlbiggcGF0aCwgInciICkKLSAgICBmLndyaXRlKCBuZXdkYXRhICkKLSAgICBmLmNsb3NlKCkKLQotICAgIHJldHVybiAxCi0KIAogY2xhc3MgQmF0Y2hGaWxlVXBkYXRlcjoKICAgICAiIiJhIGNsYXNzIHVzZWQgdG8gZWRpdCBzZXZlcmFsIGZpbGVzIGF0IG9uY2UiIiIKQEAgLTM1NiwxMSArMTc1LDkgQEAKIAogICAgICAgICByZXR1cm4gKGFkZHMsIGRlbGV0ZXMsIGVkaXRzKQogCi0gICAgZGVmIF93cml0ZUZpbGUoc2VsZixkc3QsZGF0YT1Ob25lKToKKyAgICBkZWYgX3dyaXRlRmlsZShzZWxmLGRzdCk6CiAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmRpcm5hbWUoZHN0KSk6CiAgICAgICAgICAgICBjcmVhdGVfZmlsZV9wYXRoKGRzdCkKLSAgICAgICAgaWYgZGF0YSA9PSBOb25lOgotICAgICAgICAgICAgZGF0YSA9IHNlbGYubmV3X2RhdGFbZHN0XQogICAgICAgICBmID0gb3Blbihkc3QsICJ3IikKICAgICAgICAgZi53cml0ZShzZWxmLm5ld19kYXRhW2RzdF0pCiAgICAgICAgIGYuY2xvc2UoKQpAQCAtMzc3LDM0ICsxOTQsNiBAQAogICAgICAgICBmb3IgZHN0IGluIHNvcnRlZChkZWxldGVzKToKICAgICAgICAgICAgIG9zLnJlbW92ZShkc3QpCiAKLSAgICBkZWYgdXBkYXRlUDRGaWxlcyhzZWxmKToKLSAgICAgICAgYWRkcywgZGVsZXRlcywgZWRpdHMgPSBzZWxmLmdldENoYW5nZXMoKQotCi0gICAgICAgIGlmIGxlbihhZGRzKToKLSAgICAgICAgICAgIGZpbGVzID0gc3RyaW5nLmpvaW4oc29ydGVkKGFkZHMpLCIgIikKLSAgICAgICAgICAgIEQoICIlZCBuZXcgZmlsZXMgd2lsbCBiZSBwNCBhZGQtZWQiICUgbGVuKGFkZHMpICkKLSAgICAgICAgICAgIGZvciBkc3QgaW4gYWRkczoKLSAgICAgICAgICAgICAgICBzZWxmLl93cml0ZUZpbGUoZHN0KQotICAgICAgICAgICAgRDIoIlA0IEFERFM6ICVzIiAlIGZpbGVzKQotICAgICAgICAgICAgbyA9IGNvbW1hbmRzLmdldG91dHB1dCggInA0IGFkZCAiICsgZmlsZXMgKQotICAgICAgICAgICAgRDIoIG8gKQotCi0gICAgICAgIGlmIGxlbihlZGl0cyk6Ci0gICAgICAgICAgICBmaWxlcyA9IHN0cmluZy5qb2luKHNvcnRlZChlZGl0cyksIiAiKQotICAgICAgICAgICAgRCggIiVkIGZpbGVzIHdpbGwgYmUgcDQgZWRpdC1lZCIgJSBsZW4oZWRpdHMpICkKLSAgICAgICAgICAgIEQyKCJQNCBFRElUUzogJXMiICUgZmlsZXMpCi0gICAgICAgICAgICBvID0gY29tbWFuZHMuZ2V0b3V0cHV0KCAicDQgZWRpdCAiICsgZmlsZXMgKQotICAgICAgICAgICAgRDIoIG8gKQotICAgICAgICAgICAgZm9yIGRzdCBpbiBlZGl0czoKLSAgICAgICAgICAgICAgICBzZWxmLl93cml0ZUZpbGUoZHN0KQotCi0gICAgICAgIGlmIGxlbihkZWxldGVzKToKLSAgICAgICAgICAgIGZpbGVzID0gc3RyaW5nLmpvaW4oc29ydGVkKGRlbGV0ZXMpLCIgIikKLSAgICAgICAgICAgIEQoICIlZCBmaWxlcyB3aWxsIGJlIHA0IGRlbGV0ZS1kIiAlIGxlbihkZWxldGVzKSApCi0gICAgICAgICAgICBEMigiUDQgREVMRVRFUzogJXMiICUgZmlsZXMpCi0gICAgICAgICAgICBvID0gY29tbWFuZHMuZ2V0b3V0cHV0KCAicDQgZGVsZXRlICIgKyBmaWxlcyApCi0gICAgICAgICAgICBEMiggbyApCi0KICAgICBkZWYgdXBkYXRlR2l0RmlsZXMoc2VsZik6CiAgICAgICAgIGFkZHMsIGRlbGV0ZXMsIGVkaXRzID0gc2VsZi5nZXRDaGFuZ2VzKCkKIApkaWZmIC0tZ2l0IGEvbGliYy9uZXRic2QvZ2V0aG5hbWFkZHIuYyBiL2xpYmMvbmV0YnNkL2dldGhuYW1hZGRyLmMKaW5kZXggOWE5ZjZlMi4uZWU1MDUyZSAxMDA2NDQKLS0tIGEvbGliYy9uZXRic2QvZ2V0aG5hbWFkZHIuYworKysgYi9saWJjL25ldGJzZC9nZXRobmFtYWRkci5jCkBAIC01Niw2ICs1Niw3IEBACiAKICNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KICNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjaW5jbHVkZSA8c3lzL3VuLmg+CiAjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgogI2luY2x1ZGUgPGFycGEvaW5ldC5oPgogI2luY2x1ZGUgImFycGFfbmFtZXNlci5oIgpAQCAtNjksNiArNzAsNyBAQAogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8c3RyaW5ncy5oPgogI2luY2x1ZGUgPHN5c2xvZy5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgogCiAjaWZuZGVmIExPR19BVVRICiAjIGRlZmluZSBMT0dfQVVUSCAwCkBAIC04MCw2ICs4Miw5IEBACiAjaW5jbHVkZSA8c3RkbGliLmg+CiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAKKy8vIFRoaXMgc2hvdWxkIGJlIHN5bmNocm9uaXplZCB0byBSZXNwb25zZUNvZGUuaAorc3RhdGljIGNvbnN0IGludCBEbnNQcm94eVF1ZXJ5UmVzdWx0ID0gMjIyOworCiBzdGF0aWMgY29uc3QgY2hhciBjb25zdCBBc2tlZEZvckdvdFtdID0KIAkJCSAgImdldGhvc3RieSouZ2V0YW5zd2VyOiBhc2tlZCBmb3IgXCIlc1wiLCBnb3QgXCIlc1wiIjsKIApAQCAtMTIxLDcgKzEyNiw3IEBACiBzdGF0aWMgaW50IF9kbnNfZ2V0aHRieWFkZHIodm9pZCAqLCB2b2lkICosIHZhX2xpc3QpOwogc3RhdGljIGludCBfZG5zX2dldGh0YnluYW1lKHZvaWQgKiwgdm9pZCAqLCB2YV9saXN0KTsKIAotc3RhdGljIHN0cnVjdCBob3N0ZW50ICpnZXRob3N0YnluYW1lX2ludGVybmFsKGNvbnN0IGNoYXIgKiwgaW50LCByZXNfc3RhdGUpOworc3RhdGljIHN0cnVjdCBob3N0ZW50ICpnZXRob3N0YnluYW1lX2ludGVybmFsKGNvbnN0IGNoYXIgKiwgaW50LCByZXNfc3RhdGUsIGNvbnN0IGNoYXIgKik7CiAKIHN0YXRpYyBjb25zdCBuc19zcmMgZGVmYXVsdF9kbnNfZmlsZXNbXSA9IHsKIAl7IE5TU1JDX0ZJTEVTLCAJTlNfU1VDQ0VTUyB9LApAQCAtNDkwLDE0ICs0OTUsMTUgQEAKIAogCWFzc2VydChuYW1lICE9IE5VTEwpOwogCisJLyogdHJ5IElQdjYgZmlyc3QgLSBpZiB0aGF0IGZhaWxzIGRvIElQdjQgKi8KIAlpZiAocmVzLT5vcHRpb25zICYgUkVTX1VTRV9JTkVUNikgewotCQlocCA9IGdldGhvc3RieW5hbWVfaW50ZXJuYWwobmFtZSwgQUZfSU5FVDYsIHJlcyk7CisJCWhwID0gZ2V0aG9zdGJ5bmFtZV9pbnRlcm5hbChuYW1lLCBBRl9JTkVUNiwgcmVzLCBOVUxMKTsKIAkJaWYgKGhwKSB7CiAJCQlfX3Jlc19wdXRfc3RhdGUocmVzKTsKIAkJCXJldHVybiBocDsKIAkJfQogCX0KLQlocCA9IGdldGhvc3RieW5hbWVfaW50ZXJuYWwobmFtZSwgQUZfSU5FVCwgcmVzKTsKKwlocCA9IGdldGhvc3RieW5hbWVfaW50ZXJuYWwobmFtZSwgQUZfSU5FVCwgcmVzLCBOVUxMKTsKIAlfX3Jlc19wdXRfc3RhdGUocmVzKTsKIAlyZXR1cm4gaHA7CiB9CkBAIC01MDUsMjUgKzUxMSwxMjAgQEAKIHN0cnVjdCBob3N0ZW50ICoKIGdldGhvc3RieW5hbWUyKGNvbnN0IGNoYXIgKm5hbWUsIGludCBhZikKIHsKKwlyZXR1cm4gYW5kcm9pZF9nZXRob3N0YnluYW1lZm9yaWZhY2UobmFtZSwgYWYsIE5VTEwpOworfQorCitzdHJ1Y3QgaG9zdGVudCAqCithbmRyb2lkX2dldGhvc3RieW5hbWVmb3JpZmFjZShjb25zdCBjaGFyICpuYW1lLCBpbnQgYWYsIGNvbnN0IGNoYXIgKmlmYWNlKQorewogCXN0cnVjdCBob3N0ZW50ICpocDsKIAlyZXNfc3RhdGUgcmVzID0gX19yZXNfZ2V0X3N0YXRlKCk7CiAKIAlpZiAocmVzID09IE5VTEwpCiAJCXJldHVybiBOVUxMOwotCWhwID0gZ2V0aG9zdGJ5bmFtZV9pbnRlcm5hbChuYW1lLCBhZiwgcmVzKTsKKwlocCA9IGdldGhvc3RieW5hbWVfaW50ZXJuYWwobmFtZSwgYWYsIHJlcywgaWZhY2UpOwogCV9fcmVzX3B1dF9zdGF0ZShyZXMpOwogCXJldHVybiBocDsKIH0KIAorCitzdGF0aWMgRklMRSogYW5kcm9pZF9vcGVuX3Byb3h5KCkKK3sKKwlpbnQgc29jazsKKwljb25zdCBpbnQgb25lID0gMTsKKwlzdHJ1Y3Qgc29ja2FkZHJfdW4gcHJveHlfYWRkcjsKKworCXNvY2sgPSBzb2NrZXQoQUZfVU5JWCwgU09DS19TVFJFQU0sIDApOworCWlmIChzb2NrIDwgMCkgeworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlzZXRzb2Nrb3B0KHNvY2ssIFNPTF9TT0NLRVQsIFNPX1JFVVNFQUREUiwgJm9uZSwgc2l6ZW9mKG9uZSkpOworCW1lbXNldCgmcHJveHlfYWRkciwgMCwgc2l6ZW9mKHByb3h5X2FkZHIpKTsKKwlwcm94eV9hZGRyLnN1bl9mYW1pbHkgPSBBRl9VTklYOworCXN0cmxjcHkocHJveHlfYWRkci5zdW5fcGF0aCwgIi9kZXYvc29ja2V0L2Ruc3Byb3h5ZCIsIHNpemVvZihwcm94eV9hZGRyLnN1bl9wYXRoKSk7CisJaWYgKFRFTVBfRkFJTFVSRV9SRVRSWShjb25uZWN0KHNvY2ssCisJCQkoY29uc3Qgc3RydWN0IHNvY2thZGRyKikgJnByb3h5X2FkZHIsCisJCQlzaXplb2YocHJveHlfYWRkcikpKSAhPSAwKSB7CisJCWNsb3NlKHNvY2spOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlyZXR1cm4gZmRvcGVuKHNvY2ssICJyKyIpOworfQorCiBzdGF0aWMgc3RydWN0IGhvc3RlbnQgKgotZ2V0aG9zdGJ5bmFtZV9pbnRlcm5hbChjb25zdCBjaGFyICpuYW1lLCBpbnQgYWYsIHJlc19zdGF0ZSByZXMpCithbmRyb2lkX3JlYWRfaG9zdGVudChGSUxFKiBwcm94eSkKK3sKKwl1aW50MzJfdCBzaXplOworCWNoYXIgYnVmWzRdOworCWlmIChmcmVhZChidWYsIDEsIHNpemVvZihidWYpLCBwcm94eSkgIT0gc2l6ZW9mKGJ1ZikpIHJldHVybiBOVUxMOworCisJLyogVGhpcyBpcyByZWFkaW5nIHNlcmlhbGl6ZWQgZGF0YSBmcm9tIHN5c3RlbS9uZXRkL0Ruc1Byb3h5TGlzdGVuZXIuY3BwCisJICogYW5kIGNoYW5nZXMgaGVyZSBuZWVkIHRvIGJlIG1hdGNoZWQgdGhlcmUgKi8KKwlpbnQgcmVzdWx0X2NvZGUgPSBzdHJ0b2woYnVmLCBOVUxMLCAxMCk7CisJaWYgKHJlc3VsdF9jb2RlICE9IERuc1Byb3h5UXVlcnlSZXN1bHQpIHsKKwkJZnJlYWQoJnNpemUsIDEsIHNpemVvZihzaXplKSwgcHJveHkpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlpZiAoZnJlYWQoJnNpemUsIDEsIHNpemVvZihzaXplKSwgcHJveHkpICE9IHNpemVvZihzaXplKSkgcmV0dXJuIE5VTEw7CisJc2l6ZSA9IG50b2hsKHNpemUpOworCXJlc19zdGF0aWMgcnMgPSBfX3Jlc19nZXRfc3RhdGljKCk7CisJbWVtc2V0KCZycy0+aG9zdCwgMCwgc2l6ZW9mKHJzLT5ob3N0KSk7CisJY2hhciAqcHRyID0gcnMtPmhvc3RidWY7CisKKwlpZiAoZnJlYWQocHRyLCAxLCBzaXplLCBwcm94eSkgIT0gc2l6ZSkgcmV0dXJuIE5VTEw7CisJcHRyICs9IHNpemU7CisJcnMtPmhvc3QuaF9uYW1lID0gcnMtPmhvc3RidWY7CisKKwljaGFyICoqYWxpYXNlcyA9IHJzLT5ob3N0X2FsaWFzZXM7CisJcnMtPmhvc3QuaF9hbGlhc2VzID0gcnMtPmhvc3RfYWxpYXNlczsKKwl3aGlsZSAoMSkgeworCQlpZiAoZnJlYWQoJnNpemUsIDEsIHNpemVvZihzaXplKSwgcHJveHkpICE9IHNpemVvZihzaXplKSkgcmV0dXJuIE5VTEw7CisJCXNpemUgPSBudG9obChzaXplKTsKKworCQlpZiAoc2l6ZSA9PSAwKSB7CisJCQkqYWxpYXNlcyA9IE5VTEw7CisJCQlicmVhazsKKwkJfQorCQlpZiAoZnJlYWQocHRyLCAxLCBzaXplLCBwcm94eSkgIT0gc2l6ZSkgcmV0dXJuIE5VTEw7CisJCSphbGlhc2VzKysgPSBwdHI7CisJCXB0ciArPSBzaXplOworCX0KKworCWlmIChmcmVhZCgmc2l6ZSwgMSwgc2l6ZW9mKHNpemUpLCBwcm94eSkgIT0gc2l6ZW9mKHNpemUpKSByZXR1cm4gTlVMTDsKKwlycy0+aG9zdC5oX2FkZHJ0eXBlID0gbnRvaGwoc2l6ZSk7CisKKwlpZiAoZnJlYWQoJnNpemUsIDEsIHNpemVvZihzaXplKSwgcHJveHkpICE9IHNpemVvZihzaXplKSkgcmV0dXJuIE5VTEw7CisJcnMtPmhvc3QuaF9sZW5ndGggPSBudG9obChzaXplKTsKKworCWNoYXIgKiphZGRycyA9IHJzLT5oX2FkZHJfcHRyczsKKwlycy0+aG9zdC5oX2FkZHJfbGlzdCA9IHJzLT5oX2FkZHJfcHRyczsKKwl3aGlsZSAoMSkgeworCQlpZiAoZnJlYWQoJnNpemUsIDEsIHNpemVvZihzaXplKSwgcHJveHkpICE9IHNpemVvZihzaXplKSkgcmV0dXJuIE5VTEw7CisJCXNpemUgPSBudG9obChzaXplKTsKKwkJaWYgKHNpemUgPT0gMCkgeworCQkJKmFkZHJzID0gTlVMTDsKKwkJCWJyZWFrOworCQl9CisJCWlmIChmcmVhZChwdHIsIDEsIHNpemUsIHByb3h5KSAhPSBzaXplKSByZXR1cm4gTlVMTDsKKwkJKmFkZHJzKysgPSBwdHI7CisJCXB0ciArPSBzaXplOworCX0KKworCXJldHVybiAmcnMtPmhvc3Q7Cit9CisKKworc3RhdGljIHN0cnVjdCBob3N0ZW50ICoKK2dldGhvc3RieW5hbWVfaW50ZXJuYWxfcmVhbChjb25zdCBjaGFyICpuYW1lLCBpbnQgYWYsIHJlc19zdGF0ZSByZXMpCiB7CiAJY29uc3QgY2hhciAqY3A7CiAJY2hhciAqYnAsICplcDsKIAlpbnQgc2l6ZTsKIAlzdHJ1Y3QgaG9zdGVudCAqaHA7Ci0gICAgICAgIHN0cnVjdCByZXNvbHZfY2FjaGUqICBjYWNoZTsKLSAgICAgICAgcmVzX3N0YXRpYyAgcnMgPSBfX3Jlc19nZXRfc3RhdGljKCk7CisJcmVzX3N0YXRpYyBycyA9IF9fcmVzX2dldF9zdGF0aWMoKTsKIAogCXN0YXRpYyBjb25zdCBuc19kdGFiIGR0YWJbXSA9IHsKIAkJTlNfRklMRVNfQ0IoX2dldGh0YnluYW1lLCBOVUxMKQpAQCAtNjMyLDE0ICs3MzMsODQgQEAKIAlpZiAobnNkaXNwYXRjaCgmaHAsIGR0YWIsIE5TREJfSE9TVFMsICJnZXRob3N0YnluYW1lIiwKIAkgICAgZGVmYXVsdF9kbnNfZmlsZXMsIG5hbWUsIHN0cmxlbihuYW1lKSwgYWYpICE9IE5TX1NVQ0NFU1MpIHsKIAkJcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0KKwl9CiAJaF9lcnJubyA9IE5FVERCX1NVQ0NFU1M7CiAJcmV0dXJuIGhwOwogfQogCisKKy8vIHZlcnkgc2ltaWxhciBpbiBwcm94eS1uZXNzIHRvIGFuZHJvaWRfZ2V0YWRkcmluZm9fcHJveHkKK3N0YXRpYyBzdHJ1Y3QgaG9zdGVudCAqCitnZXRob3N0YnluYW1lX2ludGVybmFsKGNvbnN0IGNoYXIgKm5hbWUsIGludCBhZiwgcmVzX3N0YXRlIHJlcywgY29uc3QgY2hhciAqaWZhY2UpCit7CisJY29uc3QgY2hhciAqY2FjaGVfbW9kZSA9IGdldGVudigiQU5EUk9JRF9ETlNfTU9ERSIpOworCUZJTEUqIHByb3h5ID0gTlVMTDsKKwlzdHJ1Y3QgaG9zdGVudCAqcmVzdWx0ID0gTlVMTDsKKworCWlmIChjYWNoZV9tb2RlICE9IE5VTEwgJiYgc3RyY21wKGNhY2hlX21vZGUsICJsb2NhbCIpID09IDApIHsKKwkJcmVzX3NldGlmYWNlKHJlcywgaWZhY2UpOworCQlyZXR1cm4gZ2V0aG9zdGJ5bmFtZV9pbnRlcm5hbF9yZWFsKG5hbWUsIGFmLCByZXMpOworCX0KKworCXByb3h5ID0gYW5kcm9pZF9vcGVuX3Byb3h5KCk7CisJaWYgKHByb3h5ID09IE5VTEwpIGdvdG8gZXhpdDsKKworCS8qIFRoaXMgaXMgd3JpdGluZyB0byBzeXN0ZW0vbmV0ZC9EbnNQcm94eUxpc3RlbmVyLmNwcCBhbmQgY2hhbmdlcworCSAqIGhlcmUgbmVlZCB0byBiZSBtYXRjaGVkIHRoZXJlICovCisJaWYgKGZwcmludGYocHJveHksICJnZXRob3N0YnluYW1lICVzICVzICVkIiwKKwkJCWlmYWNlID09IE5VTEwgPyAiXiIgOiBpZmFjZSwKKwkJCW5hbWUgPT0gTlVMTCA/ICJeIiA6IG5hbWUsCisJCQlhZikgPCAwKSB7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlpZiAoZnB1dGMoMCwgcHJveHkpID09IEVPRiB8fCBmZmx1c2gocHJveHkpICE9IDApIHsKKwkJZ290byBleGl0OworCX0KKworCXJlc3VsdCA9IGFuZHJvaWRfcmVhZF9ob3N0ZW50KHByb3h5KTsKKworZXhpdDoKKwlpZiAocHJveHkgIT0gTlVMTCkgeworCQlmY2xvc2UocHJveHkpOworCX0KKwlyZXR1cm4gcmVzdWx0OworfQorCisKIHN0cnVjdCBob3N0ZW50ICoKLWdldGhvc3RieWFkZHIoY29uc3Qgdm9pZCAqYWRkciwKLSAgICBzb2NrbGVuX3QgbGVuLCBpbnQgYWYpCithbmRyb2lkX2dldGhvc3RieWFkZHJmb3JpZmFjZV9wcm94eShjb25zdCB2b2lkICphZGRyLAorICAgIHNvY2tsZW5fdCBsZW4sIGludCBhZiwgY29uc3QgY2hhciogaWZhY2UpCit7CisJc3RydWN0IGhvc3RlbnQgKnJlc3VsdCA9IE5VTEw7CisJRklMRSogcHJveHkgPSBhbmRyb2lkX29wZW5fcHJveHkoKTsKKworCWlmIChwcm94eSA9PSBOVUxMKSBnb3RvIGV4aXQ7CisKKwljaGFyIGJ1ZltJTkVUNl9BRERSU1RSTEVOXTsgIC8vYmlnIGVub3VnaCBmb3IgSVB2NCBhbmQgSVB2NgorCWNvbnN0IGNoYXIgKiBhZGRyU3RyID0gaW5ldF9udG9wKGFmLCBhZGRyLCBidWYsIHNpemVvZihidWYpKTsKKwlpZiAoYWRkclN0ciA9PSBOVUxMKSBnb3RvIGV4aXQ7CisKKwlpZiAoZnByaW50Zihwcm94eSwgImdldGhvc3RieWFkZHIgJXMgJWQgJWQgJXMiLAorCQkJYWRkclN0ciwgbGVuLCBhZiwgaWZhY2UgPT0gTlVMTCA/ICJeIiA6IGlmYWNlKSA8IDApIHsKKwkJZ290byBleGl0OworCX0KKworCWlmIChmcHV0YygwLCBwcm94eSkgPT0gRU9GIHx8IGZmbHVzaChwcm94eSkgIT0gMCkgeworCQlnb3RvIGV4aXQ7CisJfQorCisJcmVzdWx0ID0gYW5kcm9pZF9yZWFkX2hvc3RlbnQocHJveHkpOworZXhpdDoKKwlpZiAocHJveHkgIT0gTlVMTCkgeworCQlmY2xvc2UocHJveHkpOworCX0KKwlyZXR1cm4gcmVzdWx0OworfQorCitzdHJ1Y3QgaG9zdGVudCAqCithbmRyb2lkX2dldGhvc3RieWFkZHJmb3JpZmFjZV9yZWFsKGNvbnN0IHZvaWQgKmFkZHIsCisgICAgc29ja2xlbl90IGxlbiwgaW50IGFmLCBjb25zdCBjaGFyKiBpZmFjZSkKIHsKIAljb25zdCB1X2NoYXIgKnVhZGRyID0gKGNvbnN0IHVfY2hhciAqKWFkZHI7CiAJc29ja2xlbl90IHNpemU7CkBAIC02ODcsMTIgKzg1OCwzMSBAQAogCWhwID0gTlVMTDsKIAloX2Vycm5vID0gTkVUREJfSU5URVJOQUw7CiAJaWYgKG5zZGlzcGF0Y2goJmhwLCBkdGFiLCBOU0RCX0hPU1RTLCAiZ2V0aG9zdGJ5YWRkciIsCi0JICAgIGRlZmF1bHRfZG5zX2ZpbGVzLCB1YWRkciwgbGVuLCBhZikgIT0gTlNfU1VDQ0VTUykKKwkgICAgZGVmYXVsdF9kbnNfZmlsZXMsIHVhZGRyLCBsZW4sIGFmLCBpZmFjZSkgIT0gTlNfU1VDQ0VTUykKIAkJcmV0dXJuIE5VTEw7CiAJaF9lcnJubyA9IE5FVERCX1NVQ0NFU1M7CiAJcmV0dXJuIGhwOwogfQogCitzdHJ1Y3QgaG9zdGVudCAqCithbmRyb2lkX2dldGhvc3RieWFkZHJmb3JpZmFjZShjb25zdCB2b2lkICphZGRyLCBzb2NrbGVuX3QgbGVuLCBpbnQgYWYsIGNvbnN0IGNoYXIqIGlmYWNlKQoreworCWNvbnN0IGNoYXIgKmNhY2hlX21vZGUgPSBnZXRlbnYoIkFORFJPSURfRE5TX01PREUiKTsKKworCWlmIChjYWNoZV9tb2RlID09IE5VTEwgfHwgc3RyY21wKGNhY2hlX21vZGUsICJsb2NhbCIpICE9IDApIHsKKwkJcmV0dXJuIGFuZHJvaWRfZ2V0aG9zdGJ5YWRkcmZvcmlmYWNlX3Byb3h5KGFkZHIsIGxlbiwgYWYsIGlmYWNlKTsKKwl9IGVsc2UgeworCQlyZXR1cm4gYW5kcm9pZF9nZXRob3N0YnlhZGRyZm9yaWZhY2VfcmVhbChhZGRyLGxlbiwgYWYsaWZhY2UpOworCX0KK30KKworc3RydWN0IGhvc3RlbnQgKgorZ2V0aG9zdGJ5YWRkcihjb25zdCB2b2lkICphZGRyLCBzb2NrbGVuX3QgbGVuLCBpbnQgYWYpCit7CisJcmV0dXJuIGFuZHJvaWRfZ2V0aG9zdGJ5YWRkcmZvcmlmYWNlKGFkZHIsIGxlbiwgYWYsIE5VTEwpOworfQorCisKIHN0YXRpYyB2b2lkCiBfc2V0aHRlbnQoaW50IGYpCiB7CkBAIC0xMTI0LDYgKzEzMTQsNyBAQAogCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnVhZGRyOwogCWludCBsZW4sIGFmLCBhZHZhbmNlOwogCXJlc19zdGF0ZSByZXM7CisJY29uc3QgY2hhciogaWZhY2U7CiAJcmVzX3N0YXRpYyBycyA9IF9fcmVzX2dldF9zdGF0aWMoKTsKIAogCWFzc2VydChydiAhPSBOVUxMKTsKQEAgLTExMzEsNiArMTMyMiw3IEBACiAJdWFkZHIgPSB2YV9hcmcoYXAsIHVuc2lnbmVkIGNoYXIgKik7CiAJbGVuID0gdmFfYXJnKGFwLCBpbnQpOwogCWFmID0gdmFfYXJnKGFwLCBpbnQpOworCWlmYWNlID0gdmFfYXJnKGFwLCBjaGFyICopOwogCiAJc3dpdGNoIChhZikgewogCWNhc2UgQUZfSU5FVDoKQEAgLTExNzIsNiArMTM2NCw3IEBACiAJCWZyZWUoYnVmKTsKIAkJcmV0dXJuIE5TX05PVEZPVU5EOwogCX0KKwlyZXNfc2V0aWZhY2UocmVzLCBpZmFjZSk7CiAJbiA9IHJlc19ucXVlcnkocmVzLCBxYnVmLCBDX0lOLCBUX1BUUiwgYnVmLT5idWYsIHNpemVvZihidWYtPmJ1ZikpOwogCWlmIChuIDwgMCkgewogCQlmcmVlKGJ1Zik7CmRpZmYgLS1naXQgYS9saWJjL25ldGJzZC9pc2MvZXZfc3RyZWFtcy5jIGIvbGliYy9uZXRic2QvaXNjL2V2X3N0cmVhbXMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWVlY2MzZS4uMDAwMDAwMAotLS0gYS9saWJjL25ldGJzZC9pc2MvZXZfc3RyZWFtcy5jCisrKyAvZGV2L251bGwKQEAgLTEsMzExICswLDAgQEAKLS8qCSROZXRCU0Q6IGV2X3N0cmVhbXMuYyx2IDEuMiAyMDA0LzA1LzIwIDE5OjUyOjMxIGNocmlzdG9zIEV4cCAkCSovCi0KLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgYnkgSW50ZXJuZXQgU3lzdGVtcyBDb25zb3J0aXVtLCBJbmMuICgiSVNDIikKLSAqIENvcHlyaWdodCAoYykgMTk5Ni0xOTk5IGJ5IEludGVybmV0IFNvZnR3YXJlIENvbnNvcnRpdW0KLSAqCi0gKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKLSAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCi0gKgotICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIElTQyBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKLSAqIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKLSAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gIElOIE5PIEVWRU5UIFNIQUxMIElTQyBCRSBMSUFCTEUgRk9SCi0gKiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCi0gKiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KLSAqIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUCi0gKiBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgotICovCi0KLS8qIGV2X3N0cmVhbXMuYyAtIGltcGxlbWVudCBhc3luY2ggc3RyZWFtIGZpbGUgSU8gZm9yIHRoZSBldmVudGxpYgotICogdml4IDA0bWFyOTYgW2luaXRpYWxdCi0gKi8KLQotI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgotI2lmICFkZWZpbmVkKExJTlQpICYmICFkZWZpbmVkKENPREVDRU5URVIpICYmICFkZWZpbmVkKGxpbnQpCi0jaWZkZWYgbm90ZGVmCi1zdGF0aWMgY29uc3QgY2hhciByY3NpZFtdID0gIklkOiBldl9zdHJlYW1zLmMsdiAxLjIuMjA2LjIgMjAwNC8wMy8xNyAwMDoyOTo1MSBtYXJrYSBFeHAiOwotI2Vsc2UKLV9fUkNTSUQoIiROZXRCU0Q6IGV2X3N0cmVhbXMuYyx2IDEuMiAyMDA0LzA1LzIwIDE5OjUyOjMxIGNocmlzdG9zIEV4cCAkIik7Ci0jZW5kaWYKLSNlbmRpZgotCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSA8c3lzL3Vpby5oPgotCi0jaW5jbHVkZSA8ZXJybm8uaD4KLQotI2luY2x1ZGUgPGlzYy9ldmVudGxpYi5oPgotI2luY2x1ZGUgImV2ZW50bGliX3AuaCIKLQotI2lmbmRlZiBfTElCQwotc3RhdGljIGludAljb3B5dmVjKGV2U3RyZWFtICpzdHIsIGNvbnN0IHN0cnVjdCBpb3ZlYyAqaW92LCBpbnQgaW9jbnQpOwotc3RhdGljIHZvaWQJY29uc3VtZShldlN0cmVhbSAqc3RyLCBzaXplX3QgYnl0ZXMpOwotc3RhdGljIHZvaWQJZG9uZShldkNvbnRleHQgb3BhcXVlQ3R4LCBldlN0cmVhbSAqc3RyKTsKLXN0YXRpYyB2b2lkCXdyaXRhYmxlKGV2Q29udGV4dCBvcGFxdWVDdHgsIHZvaWQgKnVhcCwgaW50IGZkLCBpbnQgZXZtYXNrKTsKLXN0YXRpYyB2b2lkCXJlYWRhYmxlKGV2Q29udGV4dCBvcGFxdWVDdHgsIHZvaWQgKnVhcCwgaW50IGZkLCBpbnQgZXZtYXNrKTsKLSNlbmRpZgotCi1zdHJ1Y3QgaW92ZWMKLWV2Q29uc0lvdmVjKHZvaWQgKmJ1Ziwgc2l6ZV90IGNudCkgewotCXN0cnVjdCBpb3ZlYyByZXQ7Ci0KLQltZW1zZXQoJnJldCwgMHhmNSwgc2l6ZW9mIHJldCk7Ci0JcmV0Lmlvdl9iYXNlID0gYnVmOwotCXJldC5pb3ZfbGVuID0gY250OwotCXJldHVybiAocmV0KTsKLX0KLQotI2lmbmRlZiBfTElCQwotaW50Ci1ldldyaXRlKGV2Q29udGV4dCBvcGFxdWVDdHgsIGludCBmZCwgY29uc3Qgc3RydWN0IGlvdmVjICppb3YsIGludCBpb2NudCwKLQlldlN0cmVhbUZ1bmMgZnVuYywgdm9pZCAqdWFwLCBldlN0cmVhbUlEICppZCkKLXsKLQlldkNvbnRleHRfcCAqY3R4ID0gb3BhcXVlQ3R4Lm9wYXF1ZTsKLQlldlN0cmVhbSAqbmV3OwotCWludCBzYXZlOwotCi0JT0tORVcobmV3KTsKLQluZXctPmZ1bmMgPSBmdW5jOwotCW5ldy0+dWFwID0gdWFwOwotCW5ldy0+ZmQgPSBmZDsKLQluZXctPmZsYWdzID0gMDsKLQlpZiAoZXZTZWxlY3RGRChvcGFxdWVDdHgsIGZkLCBFVl9XUklURSwgd3JpdGFibGUsIG5ldywgJm5ldy0+ZmlsZSkgPCAwKQotCQlnb3RvIGZyZWU7Ci0JaWYgKGNvcHl2ZWMobmV3LCBpb3YsIGlvY250KSA8IDApCi0JCWdvdG8gZnJlZTsKLQluZXctPnByZXZEb25lID0gTlVMTDsKLQluZXctPm5leHREb25lID0gTlVMTDsKLQlpZiAoY3R4LT5zdHJlYW1zICE9IE5VTEwpCi0JCWN0eC0+c3RyZWFtcy0+cHJldiA9IG5ldzsKLQluZXctPnByZXYgPSBOVUxMOwotCW5ldy0+bmV4dCA9IGN0eC0+c3RyZWFtczsKLQljdHgtPnN0cmVhbXMgPSBuZXc7Ci0JaWYgKGlkICE9IE5VTEwpCi0JCWlkLT5vcGFxdWUgPSBuZXc7Ci0JcmV0dXJuICgwKTsKLSBmcmVlOgotCXNhdmUgPSBlcnJubzsKLQlGUkVFKG5ldyk7Ci0JZXJybm8gPSBzYXZlOwotCXJldHVybiAoLTEpOwotfQotCi1pbnQKLWV2UmVhZChldkNvbnRleHQgb3BhcXVlQ3R4LCBpbnQgZmQsIGNvbnN0IHN0cnVjdCBpb3ZlYyAqaW92LCBpbnQgaW9jbnQsCi0gICAgICAgZXZTdHJlYW1GdW5jIGZ1bmMsIHZvaWQgKnVhcCwgZXZTdHJlYW1JRCAqaWQpCi17Ci0JZXZDb250ZXh0X3AgKmN0eCA9IG9wYXF1ZUN0eC5vcGFxdWU7Ci0JZXZTdHJlYW0gKm5ldzsKLQlpbnQgc2F2ZTsKLQotCU9LTkVXKG5ldyk7Ci0JbmV3LT5mdW5jID0gZnVuYzsKLQluZXctPnVhcCA9IHVhcDsKLQluZXctPmZkID0gZmQ7Ci0JbmV3LT5mbGFncyA9IDA7Ci0JaWYgKGV2U2VsZWN0RkQob3BhcXVlQ3R4LCBmZCwgRVZfUkVBRCwgcmVhZGFibGUsIG5ldywgJm5ldy0+ZmlsZSkgPCAwKQotCQlnb3RvIGZyZWU7Ci0JaWYgKGNvcHl2ZWMobmV3LCBpb3YsIGlvY250KSA8IDApCi0JCWdvdG8gZnJlZTsKLQluZXctPnByZXZEb25lID0gTlVMTDsKLQluZXctPm5leHREb25lID0gTlVMTDsKLQlpZiAoY3R4LT5zdHJlYW1zICE9IE5VTEwpCi0JCWN0eC0+c3RyZWFtcy0+cHJldiA9IG5ldzsKLQluZXctPnByZXYgPSBOVUxMOwotCW5ldy0+bmV4dCA9IGN0eC0+c3RyZWFtczsKLQljdHgtPnN0cmVhbXMgPSBuZXc7Ci0JaWYgKGlkKQotCQlpZC0+b3BhcXVlID0gbmV3OwotCXJldHVybiAoMCk7Ci0gZnJlZToKLQlzYXZlID0gZXJybm87Ci0JRlJFRShuZXcpOwotCWVycm5vID0gc2F2ZTsKLQlyZXR1cm4gKC0xKTsKLX0KLQotaW50Ci1ldlRpbWVSVyhldkNvbnRleHQgb3BhcXVlQ3R4LCBldlN0cmVhbUlEIGlkLCBldlRpbWVySUQgdGltZXIpIC8qQVJHU1VTRUQqLyB7Ci0JZXZTdHJlYW0gKnN0ciA9IGlkLm9wYXF1ZTsKLQotCVVOVVNFRChvcGFxdWVDdHgpOwotCi0Jc3RyLT50aW1lciA9IHRpbWVyOwotCXN0ci0+ZmxhZ3MgfD0gRVZfU1RSX1RJTUVST0s7Ci0JcmV0dXJuICgwKTsKLX0KLQotaW50Ci1ldlVudGltZVJXKGV2Q29udGV4dCBvcGFxdWVDdHgsIGV2U3RyZWFtSUQgaWQpIC8qQVJHU1VTRUQqLyB7Ci0JZXZTdHJlYW0gKnN0ciA9IGlkLm9wYXF1ZTsKLQotCVVOVVNFRChvcGFxdWVDdHgpOwotCi0Jc3RyLT5mbGFncyAmPSB+RVZfU1RSX1RJTUVST0s7Ci0JcmV0dXJuICgwKTsKLX0KLQotaW50Ci1ldkNhbmNlbFJXKGV2Q29udGV4dCBvcGFxdWVDdHgsIGV2U3RyZWFtSUQgaWQpIHsKLQlldkNvbnRleHRfcCAqY3R4ID0gb3BhcXVlQ3R4Lm9wYXF1ZTsKLQlldlN0cmVhbSAqb2xkID0gaWQub3BhcXVlOwotCi0JLyoKLQkgKiBUaGUgc3RyZWFtcyBsaXN0IGlzIGRvdWJseSB0aHJlYWRlZC4gIEZpcnN0LCB0aGVyZSdzIGN0eC0+c3RyZWFtcwotCSAqIHRoYXQncyB1c2VkIGJ5IGV2RGVzdHJveSgpIHRvIGZpbmQgYW5kIGNhbmNlbCBhbGwgc3RyZWFtcy4gIFNlY29uZCwKLQkgKiB0aGVyZSdzIGN0eC0+c3RyRG9uZSAoaGVhZCkgYW5kIGN0eC0+c3RyTGFzdCAodGFpbCkgd2hpY2ggdGhyZWFkCi0JICogdGhyb3VnaCB0aGUgcG90ZW50aWFsbHkgc21hbGxlciBudW1iZXIgb2YgIklPIGNvbXBsZXRlZCIgc3RyZWFtcywKLQkgKiB1c2VkIGluIGV2R2V0TmV4dCgpIHRvIGF2b2lkIHNjYW5uaW5nIHRoZSBlbnRpcmUgbGlzdC4KLQkgKi8KLQotCS8qIFVubGluayBmcm9tIGN0eC0+c3RyZWFtcy4gKi8KLQlpZiAob2xkLT5wcmV2ICE9IE5VTEwpCi0JCW9sZC0+cHJldi0+bmV4dCA9IG9sZC0+bmV4dDsKLQllbHNlCi0JCWN0eC0+c3RyZWFtcyA9IG9sZC0+bmV4dDsKLQlpZiAob2xkLT5uZXh0ICE9IE5VTEwpCi0JCW9sZC0+bmV4dC0+cHJldiA9IG9sZC0+cHJldjsKLQotCS8qCi0JICogSWYgJ29sZCcgaXMgb24gdGhlIGN0eC0+c3RyRG9uZSBsaXN0LCByZW1vdmUgaXQuICBVcGRhdGUKLQkgKiBjdHgtPnN0ckxhc3QgaWYgbmVjZXNzYXJ5LgotCSAqLwotCWlmIChvbGQtPnByZXZEb25lID09IE5VTEwgJiYgb2xkLT5uZXh0RG9uZSA9PSBOVUxMKSB7Ci0JCS8qCi0JCSAqIEVpdGhlciAnb2xkJyBpcyB0aGUgb25seSBpdGVtIG9uIHRoZSBkb25lIGxpc3QsIG9yIGl0J3MKLQkJICogbm90IG9uIHRoZSBkb25lIGxpc3QuICBJZiB0aGUgZm9ybWVyLCB0aGVuIHdlIHVubGluayBpdAotCQkgKiBmcm9tIHRoZSBsaXN0LiAgSWYgdGhlIGxhdHRlciwgd2UgbGVhdmUgdGhlIGxpc3QgYWxvbmUuCi0JCSAqLwotCQlpZiAoY3R4LT5zdHJEb25lID09IG9sZCkgewotCQkJY3R4LT5zdHJEb25lID0gTlVMTDsKLQkJCWN0eC0+c3RyTGFzdCA9IE5VTEw7Ci0JCX0KLQl9IGVsc2UgewotCQlpZiAob2xkLT5wcmV2RG9uZSAhPSBOVUxMKQotCQkJb2xkLT5wcmV2RG9uZS0+bmV4dERvbmUgPSBvbGQtPm5leHREb25lOwotCQllbHNlCi0JCQljdHgtPnN0ckRvbmUgPSBvbGQtPm5leHREb25lOwotCQlpZiAob2xkLT5uZXh0RG9uZSAhPSBOVUxMKQotCQkJb2xkLT5uZXh0RG9uZS0+cHJldkRvbmUgPSBvbGQtPnByZXZEb25lOwotCQllbHNlCi0JCQljdHgtPnN0ckxhc3QgPSBvbGQtPnByZXZEb25lOwotCX0KLQotCS8qIERlYWxsb2NhdGUgdGhlIHN0cmVhbS4gKi8KLQlpZiAob2xkLT5maWxlLm9wYXF1ZSkKLQkJZXZEZXNlbGVjdEZEKG9wYXF1ZUN0eCwgb2xkLT5maWxlKTsKLQltZW1wdXQob2xkLT5pb3ZPcmlnLCBzaXplb2YgKHN0cnVjdCBpb3ZlYykgKiBvbGQtPmlvdk9yaWdDb3VudCk7Ci0JRlJFRShvbGQpOwotCXJldHVybiAoMCk7Ci19Ci0KLS8qIENvcHkgYSBzY2F0dGVyL2dhdGhlciB2ZWN0b3IgYW5kIGluaXRpYWxpemUgYSBzdHJlYW0gaGFuZGxlcidzIElPLiAqLwotc3RhdGljIGludAotY29weXZlYyhldlN0cmVhbSAqc3RyLCBjb25zdCBzdHJ1Y3QgaW92ZWMgKmlvdiwgaW50IGlvY250KSB7Ci0JaW50IGk7Ci0KLQlzdHItPmlvdk9yaWcgPSAoc3RydWN0IGlvdmVjICopbWVtZ2V0KHNpemVvZihzdHJ1Y3QgaW92ZWMpICogaW9jbnQpOwotCWlmIChzdHItPmlvdk9yaWcgPT0gTlVMTCkgewotCQllcnJubyA9IEVOT01FTTsKLQkJcmV0dXJuICgtMSk7Ci0JfQotCXN0ci0+aW9Ub3RhbCA9IDA7Ci0JZm9yIChpID0gMDsgaSA8IGlvY250OyBpKyspIHsKLQkJc3RyLT5pb3ZPcmlnW2ldID0gaW92W2ldOwotCQlzdHItPmlvVG90YWwgKz0gaW92W2ldLmlvdl9sZW47Ci0JfQotCXN0ci0+aW92T3JpZ0NvdW50ID0gaW9jbnQ7Ci0Jc3RyLT5pb3ZDdXIgPSBzdHItPmlvdk9yaWc7Ci0Jc3RyLT5pb3ZDdXJDb3VudCA9IHN0ci0+aW92T3JpZ0NvdW50OwotCXN0ci0+aW9Eb25lID0gMDsKLQlyZXR1cm4gKDApOwotfQotCi0vKiBQdWxsIG9mZiBvciB0cnVuY2F0ZSBsZWFkIGlvdmVjKHMpLiAqLwotc3RhdGljIHZvaWQKLWNvbnN1bWUoZXZTdHJlYW0gKnN0ciwgc2l6ZV90IGJ5dGVzKSB7Ci0Jd2hpbGUgKGJ5dGVzID4gMFUpIHsKLQkJaWYgKGJ5dGVzIDwgKHNpemVfdClzdHItPmlvdkN1ci0+aW92X2xlbikgewotCQkJc3RyLT5pb3ZDdXItPmlvdl9sZW4gLT0gYnl0ZXM7Ci0JCQlzdHItPmlvdkN1ci0+aW92X2Jhc2UgPSAodm9pZCAqKQotCQkJCSgodV9jaGFyICopc3RyLT5pb3ZDdXItPmlvdl9iYXNlICsgYnl0ZXMpOwotCQkJc3RyLT5pb0RvbmUgKz0gYnl0ZXM7Ci0JCQlieXRlcyA9IDA7Ci0JCX0gZWxzZSB7Ci0JCQlieXRlcyAtPSBzdHItPmlvdkN1ci0+aW92X2xlbjsKLQkJCXN0ci0+aW9Eb25lICs9IHN0ci0+aW92Q3VyLT5pb3ZfbGVuOwotCQkJc3RyLT5pb3ZDdXIrKzsKLQkJCXN0ci0+aW92Q3VyQ291bnQtLTsKLQkJfQotCX0KLX0KLQotLyogQWRkIGEgc3RyZWFtIHRvIERvbmUgbGlzdCBhbmQgZGVzZWxlY3QgdGhlIEZELiAqLwotc3RhdGljIHZvaWQKLWRvbmUoZXZDb250ZXh0IG9wYXF1ZUN0eCwgZXZTdHJlYW0gKnN0cikgewotCWV2Q29udGV4dF9wICpjdHggPSBvcGFxdWVDdHgub3BhcXVlOwotCi0JaWYgKGN0eC0+c3RyTGFzdCAhPSBOVUxMKSB7Ci0JCXN0ci0+cHJldkRvbmUgPSBjdHgtPnN0ckxhc3Q7Ci0JCWN0eC0+c3RyTGFzdC0+bmV4dERvbmUgPSBzdHI7Ci0JCWN0eC0+c3RyTGFzdCA9IHN0cjsKLQl9IGVsc2UgewotCQlJTlNJU1QoY3R4LT5zdHJEb25lID09IE5VTEwpOwotCQljdHgtPnN0ckRvbmUgPSBjdHgtPnN0ckxhc3QgPSBzdHI7Ci0JfQotCWV2RGVzZWxlY3RGRChvcGFxdWVDdHgsIHN0ci0+ZmlsZSk7Ci0Jc3RyLT5maWxlLm9wYXF1ZSA9IE5VTEw7Ci0JLyogZXZEcm9wKCkgd2lsbCBjYWxsIGV2Q2FuY2VsUlcoKSBvbiB1cy4gKi8KLX0KLQotLyogRHJpYmJsZSBvdXQgc29tZSBieXRlcyBvbiB0aGUgc3RyZWFtLiAgKENhbGxlZCBieSBldkRpc3BhdGNoKCkuKSAqLwotc3RhdGljIHZvaWQKLXdyaXRhYmxlKGV2Q29udGV4dCBvcGFxdWVDdHgsIHZvaWQgKnVhcCwgaW50IGZkLCBpbnQgZXZtYXNrKSB7Ci0JZXZTdHJlYW0gKnN0ciA9IHVhcDsKLQlpbnQgYnl0ZXM7Ci0KLQlVTlVTRUQoZXZtYXNrKTsKLQotCWJ5dGVzID0gd3JpdGV2KGZkLCBzdHItPmlvdkN1ciwgc3RyLT5pb3ZDdXJDb3VudCk7Ci0JaWYgKGJ5dGVzID4gMCkgewotCQlpZiAoKHN0ci0+ZmxhZ3MgJiBFVl9TVFJfVElNRVJPSykgIT0gMCkKLQkJCWV2VG91Y2hJZGxlVGltZXIob3BhcXVlQ3R4LCBzdHItPnRpbWVyKTsKLQkJY29uc3VtZShzdHIsIGJ5dGVzKTsKLQl9IGVsc2UgewotCQlpZiAoYnl0ZXMgPCAwICYmIGVycm5vICE9IEVJTlRSKSB7Ci0JCQlzdHItPmlvRG9uZSA9IC0xOwotCQkJc3RyLT5pb0Vycm5vID0gZXJybm87Ci0JCX0KLQl9Ci0JaWYgKHN0ci0+aW9Eb25lID09IC0xIHx8IHN0ci0+aW9Eb25lID09IHN0ci0+aW9Ub3RhbCkKLQkJZG9uZShvcGFxdWVDdHgsIHN0cik7Ci19Ci0KLS8qIFNjb29wIHVwIHNvbWUgYnl0ZXMgZnJvbSB0aGUgc3RyZWFtLiAgKENhbGxlZCBieSBldkRpc3BhdGNoKCkuKSAqLwotc3RhdGljIHZvaWQKLXJlYWRhYmxlKGV2Q29udGV4dCBvcGFxdWVDdHgsIHZvaWQgKnVhcCwgaW50IGZkLCBpbnQgZXZtYXNrKSB7Ci0JZXZTdHJlYW0gKnN0ciA9IHVhcDsKLQlpbnQgYnl0ZXM7Ci0KLQlVTlVTRUQoZXZtYXNrKTsKLQotCWJ5dGVzID0gcmVhZHYoZmQsIHN0ci0+aW92Q3VyLCBzdHItPmlvdkN1ckNvdW50KTsKLQlpZiAoYnl0ZXMgPiAwKSB7Ci0JCWlmICgoc3RyLT5mbGFncyAmIEVWX1NUUl9USU1FUk9LKSAhPSAwKQotCQkJZXZUb3VjaElkbGVUaW1lcihvcGFxdWVDdHgsIHN0ci0+dGltZXIpOwotCQljb25zdW1lKHN0ciwgYnl0ZXMpOwotCX0gZWxzZSB7Ci0JCWlmIChieXRlcyA9PSAwKQotCQkJc3RyLT5pb0RvbmUgPSAwOwotCQllbHNlIHsKLQkJCWlmIChlcnJubyAhPSBFSU5UUikgewotCQkJCXN0ci0+aW9Eb25lID0gLTE7Ci0JCQkJc3RyLT5pb0Vycm5vID0gZXJybm87Ci0JCQl9Ci0JCX0KLQl9Ci0JaWYgKHN0ci0+aW9Eb25lIDw9IDAgfHwgc3RyLT5pb0RvbmUgPT0gc3RyLT5pb1RvdGFsKQotCQlkb25lKG9wYXF1ZUN0eCwgc3RyKTsKLX0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9uZXRic2QvaXNjL2V2X3RpbWVycy5jIGIvbGliYy9uZXRic2QvaXNjL2V2X3RpbWVycy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNTg0Zjk5Li4wMDAwMDAwCi0tLSBhL2xpYmMvbmV0YnNkL2lzYy9ldl90aW1lcnMuYworKysgL2Rldi9udWxsCkBAIC0xLDUwNSArMCwwIEBACi0vKgkkTmV0QlNEOiBldl90aW1lcnMuYyx2IDEuMiAyMDA0LzA1LzIwIDE5OjUyOjMxIGNocmlzdG9zIEV4cCAkCSovCi0KLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgYnkgSW50ZXJuZXQgU3lzdGVtcyBDb25zb3J0aXVtLCBJbmMuICgiSVNDIikKLSAqIENvcHlyaWdodCAoYykgMTk5NS0xOTk5IGJ5IEludGVybmV0IFNvZnR3YXJlIENvbnNvcnRpdW0KLSAqCi0gKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKLSAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCi0gKgotICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIElTQyBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKLSAqIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKLSAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gIElOIE5PIEVWRU5UIFNIQUxMIElTQyBCRSBMSUFCTEUgRk9SCi0gKiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCi0gKiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KLSAqIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUCi0gKiBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgotICovCi0KLS8qIGV2X3RpbWVycy5jIC0gaW1wbGVtZW50IHRpbWVycyBmb3IgdGhlIGV2ZW50bGliCi0gKiB2aXggMDlzZXA5NSBbaW5pdGlhbF0KLSAqLwotCi0jaW5jbHVkZSA8c3lzL2NkZWZzLmg+Ci0jaWYgIWRlZmluZWQoTElOVCkgJiYgIWRlZmluZWQoQ09ERUNFTlRFUikgJiYgIWRlZmluZWQobGludCkKLSNpZmRlZiBub3RkZWYKLXN0YXRpYyBjb25zdCBjaGFyIHJjc2lkW10gPSAiSWQ6IGV2X3RpbWVycy5jLHYgMS4yLjIuMS40LjUgMjAwNC8wMy8xNyAwMjozOToxMyBtYXJrYSBFeHAiOwotI2Vsc2UKLV9fUkNTSUQoIiROZXRCU0Q6IGV2X3RpbWVycy5jLHYgMS4yIDIwMDQvMDUvMjAgMTk6NTI6MzEgY2hyaXN0b3MgRXhwICQiKTsKLSNlbmRpZgotI2VuZGlmCi0KLS8qIEltcG9ydC4gKi8KLQotI2luY2x1ZGUgPGVycm5vLmg+Ci0jaW5jbHVkZSA8dGltZS5oPgotCi0jaW5jbHVkZSA8aXNjL2Fzc2VydGlvbnMuaD4KLSNpbmNsdWRlIDxpc2MvZXZlbnRsaWIuaD4KLSNpbmNsdWRlICJldmVudGxpYl9wLmgiCi0KLS8qIENvbnN0YW50cy4gKi8KLQotI2RlZmluZQlNSUxMSU9OIDEwMDAwMDAKLSNkZWZpbmUgQklMTElPTiAxMDAwMDAwMDAwCi0KLS8qIEZvcndhcmQuICovCi0KLSNpZm5kZWYgX0xJQkMKLXN0YXRpYyBpbnQgZHVlX3Nvb25lcih2b2lkICosIHZvaWQgKik7Ci1zdGF0aWMgdm9pZCBzZXRfaW5kZXgodm9pZCAqLCBpbnQpOwotc3RhdGljIHZvaWQgZnJlZV90aW1lcih2b2lkICosIHZvaWQgKik7Ci1zdGF0aWMgdm9pZCBwcmludF90aW1lcih2b2lkICosIHZvaWQgKik7Ci1zdGF0aWMgdm9pZCBpZGxlX3RpbWVvdXQoZXZDb250ZXh0LCB2b2lkICosIHN0cnVjdCB0aW1lc3BlYywgc3RydWN0IHRpbWVzcGVjKTsKLQotLyogUHJpdmF0ZSB0eXBlLiAqLwotCi10eXBlZGVmIHN0cnVjdCB7Ci0JZXZUaW1lckZ1bmMJZnVuYzsKLQl2b2lkICoJCXVhcDsKLQlzdHJ1Y3QgdGltZXNwZWMJbGFzdFRvdWNoZWQ7Ci0Jc3RydWN0IHRpbWVzcGVjCW1heF9pZGxlOwotCWV2VGltZXIgKgl0aW1lcjsKLX0gaWRsZV90aW1lcjsKLSNlbmRpZgotCi0vKiBQdWJsaWMuICovCi0KLXN0cnVjdCB0aW1lc3BlYwotZXZDb25zVGltZSh0aW1lX3Qgc2VjLCBsb25nIG5zZWMpIHsKLQlzdHJ1Y3QgdGltZXNwZWMgeDsKLQotCXgudHZfc2VjID0gc2VjOwotCXgudHZfbnNlYyA9IG5zZWM7Ci0JcmV0dXJuICh4KTsKLX0KLQotc3RydWN0IHRpbWVzcGVjCi1ldkFkZFRpbWUoc3RydWN0IHRpbWVzcGVjIGFkZGVuZDEsIHN0cnVjdCB0aW1lc3BlYyBhZGRlbmQyKSB7Ci0Jc3RydWN0IHRpbWVzcGVjIHg7Ci0KLQl4LnR2X3NlYyA9IGFkZGVuZDEudHZfc2VjICsgYWRkZW5kMi50dl9zZWM7Ci0JeC50dl9uc2VjID0gYWRkZW5kMS50dl9uc2VjICsgYWRkZW5kMi50dl9uc2VjOwotCWlmICh4LnR2X25zZWMgPj0gQklMTElPTikgewotCQl4LnR2X3NlYysrOwotCQl4LnR2X25zZWMgLT0gQklMTElPTjsKLQl9Ci0JcmV0dXJuICh4KTsKLX0KLQotc3RydWN0IHRpbWVzcGVjCi1ldlN1YlRpbWUoc3RydWN0IHRpbWVzcGVjIG1pbnVlbmQsIHN0cnVjdCB0aW1lc3BlYyBzdWJ0cmFoZW5kKSB7Ci0Jc3RydWN0IHRpbWVzcGVjIHg7Ci0KLQl4LnR2X3NlYyA9IG1pbnVlbmQudHZfc2VjIC0gc3VidHJhaGVuZC50dl9zZWM7Ci0JaWYgKG1pbnVlbmQudHZfbnNlYyA+PSBzdWJ0cmFoZW5kLnR2X25zZWMpCi0JCXgudHZfbnNlYyA9IG1pbnVlbmQudHZfbnNlYyAtIHN1YnRyYWhlbmQudHZfbnNlYzsKLQllbHNlIHsKLQkJeC50dl9uc2VjID0gQklMTElPTiAtIHN1YnRyYWhlbmQudHZfbnNlYyArIG1pbnVlbmQudHZfbnNlYzsKLQkJeC50dl9zZWMtLTsKLQl9Ci0JcmV0dXJuICh4KTsKLX0KLQotaW50Ci1ldkNtcFRpbWUoc3RydWN0IHRpbWVzcGVjIGEsIHN0cnVjdCB0aW1lc3BlYyBiKSB7Ci0JbG9uZyB4ID0gYS50dl9zZWMgLSBiLnR2X3NlYzsKLQotCWlmICh4ID09IDBMKQotCQl4ID0gYS50dl9uc2VjIC0gYi50dl9uc2VjOwotCXJldHVybiAoeCA8IDBMID8gKC0xKSA6IHggPiAwTCA/ICgxKSA6ICgwKSk7Ci19Ci0KLXN0cnVjdCB0aW1lc3BlYwotZXZOb3dUaW1lKCkgewotCXN0cnVjdCB0aW1ldmFsIG5vdzsKLSNpZmRlZiBDTE9DS19SRUFMVElNRQotCXN0cnVjdCB0aW1lc3BlYyB0c25vdzsKLQlpbnQgbSA9IENMT0NLX1JFQUxUSU1FOwotCi0jaWZkZWYgQ0xPQ0tfTU9OT1RPTklDCi0JaWYgKF9fZXZPcHRNb25vVGltZSkKLQkJbSA9IENMT0NLX01PTk9UT05JQzsKLSNlbmRpZgotCWlmIChjbG9ja19nZXR0aW1lKG0sICZ0c25vdykgPT0gMCkKLQkJcmV0dXJuICh0c25vdyk7Ci0jZW5kaWYKLQlpZiAoZ2V0dGltZW9mZGF5KCZub3csIE5VTEwpIDwgMCkKLQkJcmV0dXJuIChldkNvbnNUaW1lKDBMLCAwTCkpOwotCXJldHVybiAoZXZUaW1lU3BlYyhub3cpKTsKLX0KLQotc3RydWN0IHRpbWVzcGVjCi1ldlVUQ1RpbWUodm9pZCkgewotCXN0cnVjdCB0aW1ldmFsIG5vdzsKLSNpZmRlZiBDTE9DS19SRUFMVElNRQotCXN0cnVjdCB0aW1lc3BlYyB0c25vdzsKLQlpZiAoY2xvY2tfZ2V0dGltZShDTE9DS19SRUFMVElNRSwgJnRzbm93KSA9PSAwKQotCQlyZXR1cm4gKHRzbm93KTsKLSNlbmRpZgotCWlmIChnZXR0aW1lb2ZkYXkoJm5vdywgTlVMTCkgPCAwKQotCQlyZXR1cm4gKGV2Q29uc1RpbWUoMEwsIDBMKSk7Ci0JcmV0dXJuIChldlRpbWVTcGVjKG5vdykpOwotfQotCi0jaWZuZGVmIF9MSUJDCi1zdHJ1Y3QgdGltZXNwZWMKLWV2TGFzdEV2ZW50VGltZShldkNvbnRleHQgb3BhcXVlQ3R4KSB7Ci0JZXZDb250ZXh0X3AgKmN0eCA9IG9wYXF1ZUN0eC5vcGFxdWU7Ci0KLQlyZXR1cm4gKGN0eC0+bGFzdEV2ZW50VGltZSk7Ci19Ci0jZW5kaWYKLQotc3RydWN0IHRpbWVzcGVjCi1ldlRpbWVTcGVjKHN0cnVjdCB0aW1ldmFsIHR2KSB7Ci0Jc3RydWN0IHRpbWVzcGVjIHRzOwotCi0JdHMudHZfc2VjID0gdHYudHZfc2VjOwotCXRzLnR2X25zZWMgPSB0di50dl91c2VjICogMTAwMDsKLQlyZXR1cm4gKHRzKTsKLX0KLQotc3RydWN0IHRpbWV2YWwKLWV2VGltZVZhbChzdHJ1Y3QgdGltZXNwZWMgdHMpIHsKLQlzdHJ1Y3QgdGltZXZhbCB0djsKLQotCXR2LnR2X3NlYyA9IHRzLnR2X3NlYzsKLQl0di50dl91c2VjID0gdHMudHZfbnNlYyAvIDEwMDA7Ci0JcmV0dXJuICh0dik7Ci19Ci0KLSNpZm5kZWYgX0xJQkMKLWludAotZXZTZXRUaW1lcihldkNvbnRleHQgb3BhcXVlQ3R4LAotCSAgIGV2VGltZXJGdW5jIGZ1bmMsCi0JICAgdm9pZCAqdWFwLAotCSAgIHN0cnVjdCB0aW1lc3BlYyBkdWUsCi0JICAgc3RydWN0IHRpbWVzcGVjIGludGVyLAotCSAgIGV2VGltZXJJRCAqb3BhcXVlSUQKLSkgewotCWV2Q29udGV4dF9wICpjdHggPSBvcGFxdWVDdHgub3BhcXVlOwotCWV2VGltZXIgKmlkOwotCi0JcHJpbnRmKCJldlNldFRpbWVyKGN0eCAlcCwgZnVuYyAlcCwgdWFwICVwLCBkdWUgJWxkLiUwOWxkLCBpbnRlciAlbGQuJTA5bGQpXG4iLAotCQkgY3R4LCBmdW5jLCB1YXAsCi0JCSAobG9uZylkdWUudHZfc2VjLCBkdWUudHZfbnNlYywKLQkJIChsb25nKWludGVyLnR2X3NlYywgaW50ZXIudHZfbnNlYyk7Ci0KLSNpZmRlZiBfX2hwdXgKLQkvKgotCSAqIHR2X3NlYyBhbmQgdHZfbnNlYyBhcmUgdW5zaWduZWQuCi0JICovCi0JaWYgKGR1ZS50dl9uc2VjID49IEJJTExJT04pCi0JCUVWX0VSUihFSU5WQUwpOwotCi0JaWYgKGludGVyLnR2X25zZWMgPj0gQklMTElPTikKLQkJRVZfRVJSKEVJTlZBTCk7Ci0jZWxzZQotCWlmIChkdWUudHZfc2VjIDwgMCB8fCBkdWUudHZfbnNlYyA8IDAgfHwgZHVlLnR2X25zZWMgPj0gQklMTElPTikKLQkJRVZfRVJSKEVJTlZBTCk7Ci0KLQlpZiAoaW50ZXIudHZfc2VjIDwgMCB8fCBpbnRlci50dl9uc2VjIDwgMCB8fCBpbnRlci50dl9uc2VjID49IEJJTExJT04pCi0JCUVWX0VSUihFSU5WQUwpOwotI2VuZGlmCi0KLQkvKiBkdWU9ezAsMH0gaXMgYSBtYWdpYyBjb29raWUgbWVhbmluZyAibm93LiIgKi8KLQlpZiAoZHVlLnR2X3NlYyA9PSAodGltZV90KTAgJiYgZHVlLnR2X25zZWMgPT0gMEwpCi0JCWR1ZSA9IGV2Tm93VGltZSgpOwotCi0JLyogQWxsb2NhdGUgYW5kIGZpbGwuICovCi0JT0tORVcoaWQpOwotCWlkLT5mdW5jID0gZnVuYzsKLQlpZC0+dWFwID0gdWFwOwotCWlkLT5kdWUgPSBkdWU7Ci0JaWQtPmludGVyID0gaW50ZXI7Ci0KLQlpZiAoaGVhcF9pbnNlcnQoY3R4LT50aW1lcnMsIGlkKSA8IDApCi0JCXJldHVybiAoLTEpOwotCi0JLyogUmVtZW1iZXIgdGhlIElEIGlmIHRoZSBjYWxsZXIgcHJvdmlkZWQgdXMgYSBwbGFjZSBmb3IgaXQuICovCi0JaWYgKG9wYXF1ZUlEKQotCQlvcGFxdWVJRC0+b3BhcXVlID0gaWQ7Ci0KLQlpZiAoY3R4LT5kZWJ1ZyA+IDcpIHsKLQkJcHJpbnRmKCJ0aW1lcnMgYWZ0ZXIgZXZTZXRUaW1lcjpcbiIpOwotCQkodm9pZCkgaGVhcF9mb3JfZWFjaChjdHgtPnRpbWVycywgcHJpbnRfdGltZXIsICh2b2lkICopY3R4KTsKLQl9Ci0KLQlyZXR1cm4gKDApOwotfQotCi1pbnQKLWV2Q2xlYXJUaW1lcihldkNvbnRleHQgb3BhcXVlQ3R4LCBldlRpbWVySUQgaWQpIHsKLQlldkNvbnRleHRfcCAqY3R4ID0gb3BhcXVlQ3R4Lm9wYXF1ZTsKLQlldlRpbWVyICpkZWwgPSBpZC5vcGFxdWU7Ci0KLQlpZiAoY3R4LT5jdXIgIT0gTlVMTCAmJgotCSAgICBjdHgtPmN1ci0+dHlwZSA9PSBUaW1lciAmJgotCSAgICBjdHgtPmN1ci0+dS50aW1lci50aGlzID09IGRlbCkgewotCQlwcmludGYoImRlZmVycmluZyBkZWxldGUgb2YgdGltZXIgKGV4ZWN1dGluZylcbiIpOwotCQkvKgotCQkgKiBTZXR0aW5nIHRoZSBpbnRlcnZhbCB0byB6ZXJvIGVuc3VyZXMgdGhhdCBldkRyb3AoKSB3aWxsCi0JCSAqIGNsZWFuIHVwIHRoZSB0aW1lci4KLQkJICovCi0JCWRlbC0+aW50ZXIgPSBldkNvbnNUaW1lKDAsIDApOwotCQlyZXR1cm4gKDApOwotCX0KLQotCWlmIChoZWFwX2VsZW1lbnQoY3R4LT50aW1lcnMsIGRlbC0+aW5kZXgpICE9IGRlbCkKLQkJRVZfRVJSKEVOT0VOVCk7Ci0KLQlpZiAoaGVhcF9kZWxldGUoY3R4LT50aW1lcnMsIGRlbC0+aW5kZXgpIDwgMCkKLQkJcmV0dXJuICgtMSk7Ci0JRlJFRShkZWwpOwotCi0JaWYgKGN0eC0+ZGVidWcgPiA3KSB7Ci0JCXByaW50ZigidGltZXJzIGFmdGVyIGV2Q2xlYXJUaW1lcjpcbiIpOwotCQkodm9pZCkgaGVhcF9mb3JfZWFjaChjdHgtPnRpbWVycywgcHJpbnRfdGltZXIsICh2b2lkICopY3R4KTsKLQl9Ci0KLQlyZXR1cm4gKDApOwotfQotCi1pbnQKLWV2Q29uZmlnVGltZXIoZXZDb250ZXh0IG9wYXF1ZUN0eCwKLQkgICAgIGV2VGltZXJJRCBpZCwKLQkgICAgIGNvbnN0IGNoYXIgKnBhcmFtLAotCSAgICAgaW50IHZhbHVlCi0pIHsKLQlldkNvbnRleHRfcCAqY3R4ID0gb3BhcXVlQ3R4Lm9wYXF1ZTsKLQlldlRpbWVyICp0aW1lciA9IGlkLm9wYXF1ZTsKLQlpbnQgcmVzdWx0PTA7Ci0KLQlVTlVTRUQodmFsdWUpOwotCi0JaWYgKGhlYXBfZWxlbWVudChjdHgtPnRpbWVycywgdGltZXItPmluZGV4KSAhPSB0aW1lcikKLQkJRVZfRVJSKEVOT0VOVCk7Ci0KLQlpZiAoc3RyY21wKHBhcmFtLCAicmF0ZSIpID09IDApCi0JCXRpbWVyLT5tb2RlIHw9IEVWX1RNUl9SQVRFOwotCWVsc2UgaWYgKHN0cmNtcChwYXJhbSwgImludGVydmFsIikgPT0gMCkKLQkJdGltZXItPm1vZGUgJj0gfkVWX1RNUl9SQVRFOwotCWVsc2UKLQkJRVZfRVJSKEVJTlZBTCk7Ci0KLQlyZXR1cm4gKHJlc3VsdCk7Ci19Ci0KLWludAotZXZSZXNldFRpbWVyKGV2Q29udGV4dCBvcGFxdWVDdHgsCi0JICAgICBldlRpbWVySUQgaWQsCi0JICAgICBldlRpbWVyRnVuYyBmdW5jLAotCSAgICAgdm9pZCAqdWFwLAotCSAgICAgc3RydWN0IHRpbWVzcGVjIGR1ZSwKLQkgICAgIHN0cnVjdCB0aW1lc3BlYyBpbnRlcgotKSB7Ci0JZXZDb250ZXh0X3AgKmN0eCA9IG9wYXF1ZUN0eC5vcGFxdWU7Ci0JZXZUaW1lciAqdGltZXIgPSBpZC5vcGFxdWU7Ci0Jc3RydWN0IHRpbWVzcGVjIG9sZF9kdWU7Ci0JaW50IHJlc3VsdD0wOwotCi0JaWYgKGhlYXBfZWxlbWVudChjdHgtPnRpbWVycywgdGltZXItPmluZGV4KSAhPSB0aW1lcikKLQkJRVZfRVJSKEVOT0VOVCk7Ci0KLSNpZmRlZiBfX2hwdXgKLQkvKgotCSAqIHR2X3NlYyBhbmQgdHZfbnNlYyBhcmUgdW5zaWduZWQuCi0JICovCi0JaWYgKGR1ZS50dl9uc2VjID49IEJJTExJT04pCi0JCUVWX0VSUihFSU5WQUwpOwotCi0JaWYgKGludGVyLnR2X25zZWMgPj0gQklMTElPTikKLQkJRVZfRVJSKEVJTlZBTCk7Ci0jZWxzZQotCWlmIChkdWUudHZfc2VjIDwgMCB8fCBkdWUudHZfbnNlYyA8IDAgfHwgZHVlLnR2X25zZWMgPj0gQklMTElPTikKLQkJRVZfRVJSKEVJTlZBTCk7Ci0KLQlpZiAoaW50ZXIudHZfc2VjIDwgMCB8fCBpbnRlci50dl9uc2VjIDwgMCB8fCBpbnRlci50dl9uc2VjID49IEJJTExJT04pCi0JCUVWX0VSUihFSU5WQUwpOwotI2VuZGlmCi0KLQlvbGRfZHVlID0gdGltZXItPmR1ZTsKLQotCXRpbWVyLT5mdW5jID0gZnVuYzsKLQl0aW1lci0+dWFwID0gdWFwOwotCXRpbWVyLT5kdWUgPSBkdWU7Ci0JdGltZXItPmludGVyID0gaW50ZXI7Ci0KLQlzd2l0Y2ggKGV2Q21wVGltZShkdWUsIG9sZF9kdWUpKSB7Ci0JY2FzZSAtMToKLQkJcmVzdWx0ID0gaGVhcF9pbmNyZWFzZWQoY3R4LT50aW1lcnMsIHRpbWVyLT5pbmRleCk7Ci0JCWJyZWFrOwotCWNhc2UgMDoKLQkJcmVzdWx0ID0gMDsKLQkJYnJlYWs7Ci0JY2FzZSAxOgotCQlyZXN1bHQgPSBoZWFwX2RlY3JlYXNlZChjdHgtPnRpbWVycywgdGltZXItPmluZGV4KTsKLQkJYnJlYWs7Ci0JfQotCi0JaWYgKGN0eC0+ZGVidWcgPiA3KSB7Ci0JCXByaW50ZigidGltZXJzIGFmdGVyIGV2UmVzZXRUaW1lcjpcbiIpOwotCQkodm9pZCkgaGVhcF9mb3JfZWFjaChjdHgtPnRpbWVycywgcHJpbnRfdGltZXIsICh2b2lkICopY3R4KTsKLQl9Ci0KLQlyZXR1cm4gKHJlc3VsdCk7Ci19Ci0KLWludAotZXZTZXRJZGxlVGltZXIoZXZDb250ZXh0IG9wYXF1ZUN0eCwKLQkJZXZUaW1lckZ1bmMgZnVuYywKLQkJdm9pZCAqdWFwLAotCQlzdHJ1Y3QgdGltZXNwZWMgbWF4X2lkbGUsCi0JCWV2VGltZXJJRCAqb3BhcXVlSUQKLSkgewotCWV2Q29udGV4dF9wICpjdHggPSBvcGFxdWVDdHgub3BhcXVlOwotCWlkbGVfdGltZXIgKnR0OwotCi0JLyogQWxsb2NhdGUgYW5kIGZpbGwuICovCi0JT0tORVcodHQpOwotCXR0LT5mdW5jID0gZnVuYzsKLQl0dC0+dWFwID0gdWFwOwotCXR0LT5sYXN0VG91Y2hlZCA9IGN0eC0+bGFzdEV2ZW50VGltZTsKLQl0dC0+bWF4X2lkbGUgPSBtYXhfaWRsZTsKLQotCWlmIChldlNldFRpbWVyKG9wYXF1ZUN0eCwgaWRsZV90aW1lb3V0LCB0dCwKLQkJICAgICAgIGV2QWRkVGltZShjdHgtPmxhc3RFdmVudFRpbWUsIG1heF9pZGxlKSwKLQkJICAgICAgIG1heF9pZGxlLCBvcGFxdWVJRCkgPCAwKSB7Ci0JCUZSRUUodHQpOwotCQlyZXR1cm4gKC0xKTsKLQl9Ci0KLQl0dC0+dGltZXIgPSBvcGFxdWVJRC0+b3BhcXVlOwotCi0JcmV0dXJuICgwKTsKLX0KLQotaW50Ci1ldkNsZWFySWRsZVRpbWVyKGV2Q29udGV4dCBvcGFxdWVDdHgsIGV2VGltZXJJRCBpZCkgewotCWV2VGltZXIgKmRlbCA9IGlkLm9wYXF1ZTsKLQlpZGxlX3RpbWVyICp0dCA9IGRlbC0+dWFwOwotCi0JRlJFRSh0dCk7Ci0JcmV0dXJuIChldkNsZWFyVGltZXIob3BhcXVlQ3R4LCBpZCkpOwotfQotCi1pbnQKLWV2UmVzZXRJZGxlVGltZXIoZXZDb250ZXh0IG9wYXF1ZUN0eCwKLQkJIGV2VGltZXJJRCBvcGFxdWVJRCwKLQkJIGV2VGltZXJGdW5jIGZ1bmMsCi0JCSB2b2lkICp1YXAsCi0JCSBzdHJ1Y3QgdGltZXNwZWMgbWF4X2lkbGUKLSkgewotCWV2Q29udGV4dF9wICpjdHggPSBvcGFxdWVDdHgub3BhcXVlOwotCWV2VGltZXIgKnRpbWVyID0gb3BhcXVlSUQub3BhcXVlOwotCWlkbGVfdGltZXIgKnR0ID0gdGltZXItPnVhcDsKLQotCXR0LT5mdW5jID0gZnVuYzsKLQl0dC0+dWFwID0gdWFwOwotCXR0LT5sYXN0VG91Y2hlZCA9IGN0eC0+bGFzdEV2ZW50VGltZTsKLQl0dC0+bWF4X2lkbGUgPSBtYXhfaWRsZTsKLQotCXJldHVybiAoZXZSZXNldFRpbWVyKG9wYXF1ZUN0eCwgb3BhcXVlSUQsIGlkbGVfdGltZW91dCwgdHQsCi0JCQkgICAgIGV2QWRkVGltZShjdHgtPmxhc3RFdmVudFRpbWUsIG1heF9pZGxlKSwKLQkJCSAgICAgbWF4X2lkbGUpKTsKLX0KLQotaW50Ci1ldlRvdWNoSWRsZVRpbWVyKGV2Q29udGV4dCBvcGFxdWVDdHgsIGV2VGltZXJJRCBpZCkgewotCWV2Q29udGV4dF9wICpjdHggPSBvcGFxdWVDdHgub3BhcXVlOwotCWV2VGltZXIgKnQgPSBpZC5vcGFxdWU7Ci0JaWRsZV90aW1lciAqdHQgPSB0LT51YXA7Ci0KLQl0dC0+bGFzdFRvdWNoZWQgPSBjdHgtPmxhc3RFdmVudFRpbWU7Ci0KLQlyZXR1cm4gKDApOwotfQotCi0vKiBQdWJsaWMgdG8gdGhlIHJlc3Qgb2YgZXZlbnRsaWIuICovCi0KLWhlYXBfY29udGV4dAotZXZDcmVhdGVUaW1lcnMoY29uc3QgZXZDb250ZXh0X3AgKmN0eCkgewotCi0JVU5VU0VEKGN0eCk7Ci0KLQlyZXR1cm4gKGhlYXBfbmV3KGR1ZV9zb29uZXIsIHNldF9pbmRleCwgMjA0OCkpOwotfQotCi12b2lkCi1ldkRlc3Ryb3lUaW1lcnMoY29uc3QgZXZDb250ZXh0X3AgKmN0eCkgewotCSh2b2lkKSBoZWFwX2Zvcl9lYWNoKGN0eC0+dGltZXJzLCBmcmVlX3RpbWVyLCBOVUxMKTsKLQkodm9pZCkgaGVhcF9mcmVlKGN0eC0+dGltZXJzKTsKLX0KLQotLyogUHJpdmF0ZS4gKi8KLQotc3RhdGljIGludAotZHVlX3Nvb25lcih2b2lkICphLCB2b2lkICpiKSB7Ci0JZXZUaW1lciAqYV90aW1lciwgKmJfdGltZXI7Ci0KLQlhX3RpbWVyID0gYTsKLQliX3RpbWVyID0gYjsKLQlyZXR1cm4gKGV2Q21wVGltZShhX3RpbWVyLT5kdWUsIGJfdGltZXItPmR1ZSkgPCAwKTsKLX0KLQotc3RhdGljIHZvaWQKLXNldF9pbmRleCh2b2lkICp3aGF0LCBpbnQgaWR4KSB7Ci0JZXZUaW1lciAqdGltZXI7Ci0KLQl0aW1lciA9IHdoYXQ7Ci0JdGltZXItPmluZGV4ID0gaWR4OwotfQotCi1zdGF0aWMgdm9pZAotZnJlZV90aW1lcih2b2lkICp3aGF0LCB2b2lkICp1YXApIHsKLQlldlRpbWVyICp0ID0gd2hhdDsKLQotCVVOVVNFRCh1YXApOwotCi0JRlJFRSh0KTsKLX0KLQotc3RhdGljIHZvaWQKLXByaW50X3RpbWVyKHZvaWQgKndoYXQsIHZvaWQgKnVhcCkgewotCWV2VGltZXIgKmN1ciA9IHdoYXQ7Ci0JZXZDb250ZXh0X3AgKmN0eCA9IHVhcDsKLQotCWN1ciA9IHdoYXQ7Ci0JZXZQcmludGYoY3R4LCA3LAotCSAgICAiICBmdW5jICVwLCB1YXAgJXAsIGR1ZSAlbGQuJTA5bGQsIGludGVyICVsZC4lMDlsZFxuIiwKLQkJIGN1ci0+ZnVuYywgY3VyLT51YXAsCi0JCSAobG9uZyljdXItPmR1ZS50dl9zZWMsIGN1ci0+ZHVlLnR2X25zZWMsCi0JCSAobG9uZyljdXItPmludGVyLnR2X3NlYywgY3VyLT5pbnRlci50dl9uc2VjKTsKLX0KLQotc3RhdGljIHZvaWQKLWlkbGVfdGltZW91dChldkNvbnRleHQgb3BhcXVlQ3R4LAotCSAgICAgdm9pZCAqdWFwLAotCSAgICAgc3RydWN0IHRpbWVzcGVjIGR1ZSwKLQkgICAgIHN0cnVjdCB0aW1lc3BlYyBpbnRlcgotKSB7Ci0JZXZDb250ZXh0X3AgKmN0eCA9IG9wYXF1ZUN0eC5vcGFxdWU7Ci0JaWRsZV90aW1lciAqdGhpcyA9IHVhcDsKLQlzdHJ1Y3QgdGltZXNwZWMgaWRsZTsKLQotCVVOVVNFRChkdWUpOwotCVVOVVNFRChpbnRlcik7Ci0JCi0JaWRsZSA9IGV2U3ViVGltZShjdHgtPmxhc3RFdmVudFRpbWUsIHRoaXMtPmxhc3RUb3VjaGVkKTsKLQlpZiAoZXZDbXBUaW1lKGlkbGUsIHRoaXMtPm1heF9pZGxlKSA+PSAwKSB7Ci0JCSh0aGlzLT5mdW5jKShvcGFxdWVDdHgsIHRoaXMtPnVhcCwgdGhpcy0+dGltZXItPmR1ZSwKLQkJCSAgICAgdGhpcy0+bWF4X2lkbGUpOwotCQkvKgotCQkgKiBTZXR0aW5nIHRoZSBpbnRlcnZhbCB0byB6ZXJvIHdpbGwgY2F1c2UgdGhlIHRpbWVyIHRvCi0JCSAqIGJlIGNsZWFuZWQgdXAgaW4gZXZEcm9wKCkuCi0JCSAqLwotCQl0aGlzLT50aW1lci0+aW50ZXIgPSBldkNvbnNUaW1lKDBMLCAwTCk7Ci0JCUZSRUUodGhpcyk7Ci0JfSBlbHNlIHsKLQkJLyogZXZEcm9wKCkgd2lsbCByZXNjaGVkdWxlIHRoZSB0aW1lci4gKi8KLQkJdGhpcy0+dGltZXItPmludGVyID0gZXZTdWJUaW1lKHRoaXMtPm1heF9pZGxlLCBpZGxlKTsKLQl9Ci19Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMvbmV0YnNkL2lzYy9ldmVudGxpYl9wLmggYi9saWJjL25ldGJzZC9pc2MvZXZlbnRsaWJfcC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZWRjNWEwLi4wMDAwMDAwCi0tLSBhL2xpYmMvbmV0YnNkL2lzYy9ldmVudGxpYl9wLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMzMgKzAsMCBAQAotLyoJJE5ldEJTRDogZXZlbnRsaWJfcC5oLHYgMS4xLjEuMSAyMDA0LzA1LzIwIDE5OjM0OjMyIGNocmlzdG9zIEV4cCAkCSovCi0KLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgYnkgSW50ZXJuZXQgU3lzdGVtcyBDb25zb3J0aXVtLCBJbmMuICgiSVNDIikKLSAqIENvcHlyaWdodCAoYykgMTk5NS0xOTk5IGJ5IEludGVybmV0IFNvZnR3YXJlIENvbnNvcnRpdW0KLSAqCi0gKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKLSAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCi0gKgotICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIElTQyBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKLSAqIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKLSAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gIElOIE5PIEVWRU5UIFNIQUxMIElTQyBCRSBMSUFCTEUgRk9SCi0gKiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCi0gKiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KLSAqIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUCi0gKiBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgotICovCi0KLS8qIGV2ZW50bGliX3AuaCAtIHByaXZhdGUgaW50ZXJmYWNlcyBmb3IgZXZlbnRsaWIKLSAqIHZpeCAwOXNlcDk1IFtpbml0aWFsXQotICoKLSAqIElkOiBldmVudGxpYl9wLmgsdiAxLjMuMi4xLjQuMSAyMDA0LzAzLzA5IDA4OjMzOjQzIG1hcmthIEV4cAotICovCi0KLSNpZm5kZWYgX0VWRU5UTElCX1BfSAotI2RlZmluZSBfRVZFTlRMSUJfUF9ICi0KLSNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+Ci0jaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgotI2luY2x1ZGUgPHN5cy91bi5oPgotCi0jZGVmaW5lIEVWRU5UTElCX0RFQlVHIDEKLQotI2luY2x1ZGUgPGVycm5vLmg+Ci0jaW5jbHVkZSA8ZmNudGwuaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotCi0jaW5jbHVkZSA8aXNjL2hlYXAuaD4KLSNpbmNsdWRlIDxpc2MvbGlzdC5oPgotI2luY2x1ZGUgPGlzYy9tZW1jbHVzdGVyLmg+Ci0KLQotI2RlZmluZQlFVl9NQVNLX0FMTAkoRVZfUkVBRCB8IEVWX1dSSVRFIHwgRVZfRVhDRVBUKQotI2RlZmluZSBFVl9FUlIoZSkJCXJldHVybiAoZXJybm8gPSAoZSksIC0xKQotI2RlZmluZSBPSyh4KQkJaWYgKCh4KSA8IDApIEVWX0VSUihlcnJubyk7IGVsc2UgKHZvaWQpTlVMTAotCi0KLSNpZiBIQVZFX01FTV9HRVRfU0VUCi0jZGVmaW5lCU5FVyhwKQkJaWYgKCgocCkgPSBtZW1nZXQoc2l6ZW9mICoocCkpKSAhPSBOVUxMKSBcCi0JCQkJRklMTChwKTsgXAotCQkJZWxzZSBcCi0JCQkJKHZvaWQpTlVMTDsKLSNkZWZpbmUgT0tORVcocCkJaWYgKCEoKHApID0gbWVtZ2V0KHNpemVvZiAqKHApKSkpIHsgXAotCQkJCWVycm5vID0gRU5PTUVNOyBcCi0JCQkJcmV0dXJuICgtMSk7IFwKLQkJCX0gZWxzZSBcCi0JCQkJRklMTChwKQotI2RlZmluZSBGUkVFKHApCQltZW1wdXQoKHApLCBzaXplb2YgKihwKSkKLQotI2lmIEVWRU5UTElCX0RFQlVHCi0jZGVmaW5lIEZJTEwocCkJCW1lbXNldCgocCksIDB4RjUsIHNpemVvZiAqKHApKQotI2Vsc2UKLSNkZWZpbmUgRklMTChwKQotI2VuZGlmCi0KLSNlbHNlCi0KLSNkZWZpbmUJTkVXKHApIAlwID0gbWFsbG9jKHNpemVvZiAqKHApKTsKLSNkZWZpbmUgT0tORVcocCkgaWYgKCEoKHApID0gbWFsbG9jKHNpemVvZiAqKHApKSkpIHsgZXJybm8gPSBFTk9NRU07IHJldHVybiAoLTEpOyB9Ci0jZGVmaW5lIEZSRUUocCkJZnJlZShwKQotI2RlZmluZSBGSUxMKHApCi0KLSNlbmRpZgotCi0KLXR5cGVkZWYgc3RydWN0IGV2Q29ubiB7Ci0JZXZDb25uRnVuYwlmdW5jOwotCXZvaWQgKgkJdWFwOwotCWludAkJZmQ7Ci0JaW50CQlmbGFnczsKLSNkZWZpbmUgRVZfQ09OTl9MSVNURU4JCTB4MDAwMQkJLyogQ29ubmVjdGlvbiBpcyBhIGxpc3RlbmVyLiAqLwotI2RlZmluZSBFVl9DT05OX1NFTEVDVEVECTB4MDAwMgkJLyogZXZTZWxlY3RGRChjb25uLT5maWxlKS4gKi8KLSNkZWZpbmUgRVZfQ09OTl9CTE9DSwkJMHgwMDA0CQkvKiBMaXN0ZW5lciBmZCB3YXMgYmxvY2tpbmcuICovCi0JZXZGaWxlSUQJZmlsZTsKLQlzdHJ1Y3QgZXZDb25uICoJcHJldjsKLQlzdHJ1Y3QgZXZDb25uICoJbmV4dDsKLX0gZXZDb25uOwotCi10eXBlZGVmIHN0cnVjdCBldkFjY2VwdCB7Ci0JaW50CQlmZDsKLQl1bmlvbiB7Ci0JCXN0cnVjdCBzb2NrYWRkcgkJc2E7Ci0JCXN0cnVjdCBzb2NrYWRkcl9pbglpbjsKLSNpZm5kZWYgTk9fU09DS0FERFJfVU4KLQkJc3RydWN0IHNvY2thZGRyX3VuCXVuOwotI2VuZGlmCi0JfQkJbGE7Ci0Jc29ja2xlbl90CWxhbGVuOwotCXVuaW9uIHsKLQkJc3RydWN0IHNvY2thZGRyCQlzYTsKLQkJc3RydWN0IHNvY2thZGRyX2luCWluOwotI2lmbmRlZiBOT19TT0NLQUREUl9VTgotCQlzdHJ1Y3Qgc29ja2FkZHJfdW4JdW47Ci0jZW5kaWYKLQl9CQlyYTsKLQlzb2NrbGVuX3QJcmFsZW47Ci0JaW50CQlpb0Vycm5vOwotCWV2Q29ubiAqCWNvbm47Ci0JTElOSyhzdHJ1Y3QgZXZBY2NlcHQpIGxpbms7Ci19IGV2QWNjZXB0OwotCi10eXBlZGVmIHN0cnVjdCBldkZpbGUgewotCWV2RmlsZUZ1bmMJZnVuYzsKLQl2b2lkICoJCXVhcDsKLQlpbnQJCWZkOwotCWludAkJZXZlbnRtYXNrOwotCWludAkJcHJlZW1wdGl2ZTsKLQlzdHJ1Y3QgZXZGaWxlICoJcHJldjsKLQlzdHJ1Y3QgZXZGaWxlICoJbmV4dDsKLQlzdHJ1Y3QgZXZGaWxlICoJZmRwcmV2OwotCXN0cnVjdCBldkZpbGUgKglmZG5leHQ7Ci19IGV2RmlsZTsKLQotdHlwZWRlZiBzdHJ1Y3QgZXZTdHJlYW0gewotCWV2U3RyZWFtRnVuYwlmdW5jOwotCXZvaWQgKgkJdWFwOwotCWV2RmlsZUlECWZpbGU7Ci0JZXZUaW1lcklECXRpbWVyOwotCWludAkJZmxhZ3M7Ci0jZGVmaW5lIEVWX1NUUl9USU1FUk9LCTB4MDAwMQkvKiBJRkYgdGltZXIgdmFsaWQuICovCi0JaW50CQlmZDsKLQlzdHJ1Y3QgaW92ZWMgKglpb3ZPcmlnOwotCWludAkJaW92T3JpZ0NvdW50OwotCXN0cnVjdCBpb3ZlYyAqCWlvdkN1cjsKLQlpbnQJCWlvdkN1ckNvdW50OwotCWludAkJaW9Ub3RhbDsKLQlpbnQJCWlvRG9uZTsKLQlpbnQJCWlvRXJybm87Ci0Jc3RydWN0IGV2U3RyZWFtCSpwcmV2RG9uZSwgKm5leHREb25lOwotCXN0cnVjdCBldlN0cmVhbQkqcHJldiwgKm5leHQ7Ci19IGV2U3RyZWFtOwotCi10eXBlZGVmIHN0cnVjdCBldlRpbWVyIHsKLQlldlRpbWVyRnVuYwlmdW5jOwotCXZvaWQgKgkJdWFwOwotCXN0cnVjdCB0aW1lc3BlYwlkdWUsIGludGVyOwotCWludAkJaW5kZXg7Ci0JaW50CQltb2RlOwotI2RlZmluZSBFVl9UTVJfUkFURQkxCi19IGV2VGltZXI7Ci0KLXR5cGVkZWYgc3RydWN0IGV2V2FpdCB7Ci0JZXZXYWl0RnVuYwlmdW5jOwotCXZvaWQgKgkJdWFwOwotCWNvbnN0IHZvaWQgKgl0YWc7Ci0Jc3RydWN0IGV2V2FpdCAqCW5leHQ7Ci19IGV2V2FpdDsKLQotdHlwZWRlZiBzdHJ1Y3QgZXZXYWl0TGlzdCB7Ci0JZXZXYWl0ICoJCWZpcnN0OwotCWV2V2FpdCAqCQlsYXN0OwotCXN0cnVjdCBldldhaXRMaXN0ICoJcHJldjsKLQlzdHJ1Y3QgZXZXYWl0TGlzdCAqCW5leHQ7Ci19IGV2V2FpdExpc3Q7Ci0KLXR5cGVkZWYgc3RydWN0IGV2RXZlbnRfcCB7Ci0JZW51bSB7ICBBY2NlcHQsIEZpbGUsIFN0cmVhbSwgVGltZXIsIFdhaXQsIEZyZWUsIE51bGwgIH0gdHlwZTsKLQl1bmlvbiB7Ci0JCXN0cnVjdCB7ICBldkFjY2VwdCAqdGhpczsgIH0JCQlhY2NlcHQ7Ci0JCXN0cnVjdCB7ICBldkZpbGUgKnRoaXM7IGludCBldmVudG1hc2s7ICB9CWZpbGU7Ci0JCXN0cnVjdCB7ICBldlN0cmVhbSAqdGhpczsgIH0JCQlzdHJlYW07Ci0JCXN0cnVjdCB7ICBldlRpbWVyICp0aGlzOyAgfQkJCXRpbWVyOwotCQlzdHJ1Y3QgeyAgZXZXYWl0ICp0aGlzOyAgfQkJCXdhaXQ7Ci0JCXN0cnVjdCB7ICBzdHJ1Y3QgZXZFdmVudF9wICpuZXh0OyAgfQkJZnJlZTsKLQkJc3RydWN0IHsgIGNvbnN0IHZvaWQgKnBsYWNlaG9sZGVyOyAgfQkJbnVsbDsKLQl9IHU7Ci19IGV2RXZlbnRfcDsKLQotdHlwZWRlZiBzdHJ1Y3QgewotCS8qIEdsb2JhbC4gKi8KLQljb25zdCBldkV2ZW50X3AJKmN1cjsKLQkvKiBEZWJ1Z2dpbmcuICovCi0JaW50CQlkZWJ1ZzsKLQlGSUxFCQkqb3V0cHV0OwotCS8qIENvbm5lY3Rpb25zLiAqLwotCWV2Q29ubgkJKmNvbm5zOwotCUxJU1QoZXZBY2NlcHQpCWFjY2VwdHM7Ci0JLyogRmlsZXMuICovCi0JZXZGaWxlCQkqZmlsZXMsICpmZE5leHQ7Ci0JZmRfc2V0CQlyZExhc3QsIHJkTmV4dDsKLQlmZF9zZXQJCXdyTGFzdCwgd3JOZXh0OwotCWZkX3NldAkJZXhMYXN0LCBleE5leHQ7Ci0JZmRfc2V0CQlub25ibG9ja0JlZm9yZTsKLQlpbnQJCWZkTWF4LCBmZENvdW50LCBoaWdoZXN0RkQ7Ci0JZXZGaWxlCQkqZmRUYWJsZVtGRF9TRVRTSVpFXTsKLSNpZmRlZiBFVkVOVExJQl9USU1FX0NIRUNLUwotCXN0cnVjdCB0aW1lc3BlYwlsYXN0U2VsZWN0VGltZTsKLQlpbnQJCWxhc3RGZENvdW50OwotI2VuZGlmCi0JLyogU3RyZWFtcy4gKi8KLQlldlN0cmVhbQkqc3RyZWFtczsKLQlldlN0cmVhbQkqc3RyRG9uZSwgKnN0ckxhc3Q7Ci0JLyogVGltZXJzLiAqLwotCXN0cnVjdCB0aW1lc3BlYwlsYXN0RXZlbnRUaW1lOwotCWhlYXBfY29udGV4dAl0aW1lcnM7Ci0JLyogV2FpdHMuICovCi0JZXZXYWl0TGlzdAkqd2FpdExpc3RzOwotCWV2V2FpdExpc3QJd2FpdERvbmU7Ci19IGV2Q29udGV4dF9wOwotCi0vKiBldmVudGxpYi5jICovCi0jZGVmaW5lIGV2UHJpbnRmIF9fZXZQcmludGYKLXZvaWQgZXZQcmludGYoY29uc3QgZXZDb250ZXh0X3AgKmN0eCwgaW50IGxldmVsLCBjb25zdCBjaGFyICpmbXQsIC4uLik7Ci0KLS8qIGV2X3RpbWVycy5jICovCi0jZGVmaW5lIGV2Q3JlYXRlVGltZXJzIF9fZXZDcmVhdGVUaW1lcnMKLWhlYXBfY29udGV4dCBldkNyZWF0ZVRpbWVycyhjb25zdCBldkNvbnRleHRfcCAqKTsKLSNkZWZpbmUgZXZEZXN0cm95VGltZXJzIF9fZXZEZXN0cm95VGltZXJzCi12b2lkIGV2RGVzdHJveVRpbWVycyhjb25zdCBldkNvbnRleHRfcCAqKTsKLQotLyogZXZfd2FpdHMuYyAqLwotI2RlZmluZSBldkZyZWVXYWl0IF9fZXZGcmVlV2FpdAotZXZXYWl0ICpldkZyZWVXYWl0KGV2Q29udGV4dF9wICpjdHgsIGV2V2FpdCAqb2xkKTsKLQotLyogR2xvYmFsIG9wdGlvbnMgKi8KLWludAkJX19ldk9wdE1vbm9UaW1lOwotCi0jZW5kaWYgLypfRVZFTlRMSUJfUF9IKi8KZGlmZiAtLWdpdCBhL2xpYmMvbmV0YnNkL25ldC9nZXRhZGRyaW5mby5jIGIvbGliYy9uZXRic2QvbmV0L2dldGFkZHJpbmZvLmMKaW5kZXggYWNlOGMxYS4uYzQ3NjZlNCAxMDA2NDQKLS0tIGEvbGliYy9uZXRic2QvbmV0L2dldGFkZHJpbmZvLmMKKysrIGIvbGliYy9uZXRic2QvbmV0L2dldGFkZHJpbmZvLmMKQEAgLTkzLDYgKzkzLDcgQEAKICNpbmNsdWRlIDxlcnJuby5oPgogI2luY2x1ZGUgPG5ldGRiLmg+CiAjaW5jbHVkZSAicmVzb2x2X3ByaXZhdGUuaCIKKyNpbmNsdWRlIDxzdGRib29sLmg+CiAjaW5jbHVkZSA8c3RkZGVmLmg+CiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxzdGRsaWIuaD4KQEAgLTEzMCw2ICsxMzEsOSBAQAogfTsKICNlbmRpZgogCisvLyBUaGlzIHNob3VsZCBiZSBzeW5jaHJvbml6ZWQgdG8gUmVzcG9uc2VDb2RlLmgKK3N0YXRpYyBjb25zdCBpbnQgRG5zUHJveHlRdWVyeVJlc3VsdCA9IDIyMjsKKwogc3RhdGljIGNvbnN0IHN0cnVjdCBhZmQgewogCWludCBhX2FmOwogCWludCBhX2FkZHJsZW47CkBAIC0yMTEsNyArMjE1LDcgQEAKIAogc3RhdGljIGludCBzdHIybnVtYmVyKGNvbnN0IGNoYXIgKik7CiBzdGF0aWMgaW50IGV4cGxvcmVfZnFkbihjb25zdCBzdHJ1Y3QgYWRkcmluZm8gKiwgY29uc3QgY2hhciAqLAotCWNvbnN0IGNoYXIgKiwgc3RydWN0IGFkZHJpbmZvICoqKTsKKwljb25zdCBjaGFyICosIHN0cnVjdCBhZGRyaW5mbyAqKiwgY29uc3QgY2hhciAqaWZhY2UpOwogc3RhdGljIGludCBleHBsb3JlX251bGwoY29uc3Qgc3RydWN0IGFkZHJpbmZvICosCiAJY29uc3QgY2hhciAqLCBzdHJ1Y3QgYWRkcmluZm8gKiopOwogc3RhdGljIGludCBleHBsb3JlX251bWVyaWMoY29uc3Qgc3RydWN0IGFkZHJpbmZvICosIGNvbnN0IGNoYXIgKiwKQEAgLTM5OSwxNyArNDAzLDE1IEBACiAgICAgICAgIHJldHVybiBfdGVzdF9jb25uZWN0KFBGX0lORVQsICZhZGRyLmdlbmVyaWMsIHNpemVvZihhZGRyLmluKSk7CiB9CiAKLS8vIFJldHVybnMgMCBvbiBzdWNjZXNzLCBlbHNlIHJldHVybnMgbm9uLXplcm8gb24gZXJyb3IgKGluIHdoaWNoIGNhc2UKLS8vIGdldGFkZHJpbmZvIHNob3VsZCBjb250aW51ZSBhcyBub3JtYWwpCisvLyBSZXR1cm5zIDAgb24gc3VjY2VzcywgZWxzZSByZXR1cm5zIG9uIGVycm9yLgogc3RhdGljIGludAogYW5kcm9pZF9nZXRhZGRyaW5mb19wcm94eSgKICAgICBjb25zdCBjaGFyICpob3N0bmFtZSwgY29uc3QgY2hhciAqc2Vydm5hbWUsCi0gICAgY29uc3Qgc3RydWN0IGFkZHJpbmZvICpoaW50cywgc3RydWN0IGFkZHJpbmZvICoqcmVzKQorICAgIGNvbnN0IHN0cnVjdCBhZGRyaW5mbyAqaGludHMsIHN0cnVjdCBhZGRyaW5mbyAqKnJlcywgY29uc3QgY2hhciAqaWZhY2UpCiB7CiAJaW50IHNvY2s7CiAJY29uc3QgaW50IG9uZSA9IDE7CiAJc3RydWN0IHNvY2thZGRyX3VuIHByb3h5X2FkZHI7Ci0JY29uc3QgY2hhciogY2FjaGVfbW9kZSA9IGdldGVudigiQU5EUk9JRF9ETlNfTU9ERSIpOwogCUZJTEUqIHByb3h5ID0gTlVMTDsKIAlpbnQgc3VjY2VzcyA9IDA7CiAKQEAgLTQxOCwzMyArNDIwLDE3IEBACiAJLy8gYWxsb2NhdGVkIGluIHRoZSBwcm9jZXNzIChiZWZvcmUgZmFpbGluZykuCiAJKnJlcyA9IE5VTEw7CiAKLQlpZiAoY2FjaGVfbW9kZSAhPSBOVUxMICYmIHN0cmNtcChjYWNoZV9tb2RlLCAibG9jYWwiKSA9PSAwKSB7Ci0JCS8vIERvbid0IHVzZSB0aGUgcHJveHkgaW4gbG9jYWwgbW9kZS4gIFRoaXMgaXMgdXNlZCBieSB0aGUKLQkJLy8gcHJveHkgaXRzZWxmLgotCQlyZXR1cm4gLTE7Ci0JfQotCi0JLy8gVGVtcG9yYXJ5IGNhdXRpb3VzIGhhY2sgdG8gZGlzYWJsZSB0aGUgRE5TIHByb3h5IGZvciBwcm9jZXNzZXMKLQkvLyByZXF1ZXN0aW5nIHNwZWNpYWwgdHJlYXRtZW50LiAgSWRlYWxseSB0aGUgRE5TIHByb3h5IHNob3VsZAotCS8vIGFjY29tb2RhdGUgdGhlc2UgYXBwcywgdGhvdWdoLgotCWNoYXIgcHJvcG5hbWVbUFJPUF9OQU1FX01BWF07Ci0JY2hhciBwcm9wdmFsdWVbUFJPUF9WQUxVRV9NQVhdOwotCXNucHJpbnRmKHByb3BuYW1lLCBzaXplb2YocHJvcG5hbWUpLCAibmV0LmRuczEuJWQiLCBnZXRwaWQoKSk7Ci0JaWYgKF9fc3lzdGVtX3Byb3BlcnR5X2dldChwcm9wbmFtZSwgcHJvcHZhbHVlKSA+IDApIHsKLQkJcmV0dXJuIC0xOwotCX0KLQotCS8vIEJvZ3VzIHRoaW5ncyB3ZSBjYW4ndCBzZXJpYWxpemUuICBEb24ndCB1c2UgdGhlIHByb3h5LgorCS8vIEJvZ3VzIHRoaW5ncyB3ZSBjYW4ndCBzZXJpYWxpemUuICBEb24ndCB1c2UgdGhlIHByb3h5LiAgVGhlc2Ugd2lsbCBmYWlsIC0gbGV0IHRoZW0uCiAJaWYgKChob3N0bmFtZSAhPSBOVUxMICYmCiAJICAgICBzdHJjc3BuKGhvc3RuYW1lLCAiIFxuXHJcdF4nXCIiKSAhPSBzdHJsZW4oaG9zdG5hbWUpKSB8fAogCSAgICAoc2Vydm5hbWUgIT0gTlVMTCAmJgogCSAgICAgc3RyY3NwbihzZXJ2bmFtZSwgIiBcblxyXHReJ1wiIikgIT0gc3RybGVuKHNlcnZuYW1lKSkpIHsKLQkJcmV0dXJuIC0xOworCQlyZXR1cm4gRUFJX05PREFUQTsKIAl9CiAKIAlzb2NrID0gc29ja2V0KEFGX1VOSVgsIFNPQ0tfU1RSRUFNLCAwKTsKIAlpZiAoc29jayA8IDApIHsKLQkJcmV0dXJuIC0xOworCQlyZXR1cm4gRUFJX05PREFUQTsKIAl9CiAKIAlzZXRzb2Nrb3B0KHNvY2ssIFNPTF9TT0NLRVQsIFNPX1JFVVNFQUREUiwgJm9uZSwgc2l6ZW9mKG9uZSkpOwpAQCAtNDU2LDE4ICs0NDIsMTkgQEAKIAkJCQkgICAgICAgKGNvbnN0IHN0cnVjdCBzb2NrYWRkciopICZwcm94eV9hZGRyLAogCQkJCSAgICAgICBzaXplb2YocHJveHlfYWRkcikpKSAhPSAwKSB7CiAJCWNsb3NlKHNvY2spOwotCQlyZXR1cm4gLTE7CisJCXJldHVybiBFQUlfTk9EQVRBOwogCX0KIAogCS8vIFNlbmQgdGhlIHJlcXVlc3QuCiAJcHJveHkgPSBmZG9wZW4oc29jaywgInIrIik7Ci0JaWYgKGZwcmludGYocHJveHksICJnZXRhZGRyaW5mbyAlcyAlcyAlZCAlZCAlZCAlZCIsCisJaWYgKGZwcmludGYocHJveHksICJnZXRhZGRyaW5mbyAlcyAlcyAlZCAlZCAlZCAlZCAlcyIsCiAJCSAgICBob3N0bmFtZSA9PSBOVUxMID8gIl4iIDogaG9zdG5hbWUsCiAJCSAgICBzZXJ2bmFtZSA9PSBOVUxMID8gIl4iIDogc2Vydm5hbWUsCiAJCSAgICBoaW50cyA9PSBOVUxMID8gLTEgOiBoaW50cy0+YWlfZmxhZ3MsCiAJCSAgICBoaW50cyA9PSBOVUxMID8gLTEgOiBoaW50cy0+YWlfZmFtaWx5LAogCQkgICAgaGludHMgPT0gTlVMTCA/IC0xIDogaGludHMtPmFpX3NvY2t0eXBlLAotCQkgICAgaGludHMgPT0gTlVMTCA/IC0xIDogaGludHMtPmFpX3Byb3RvY29sKSA8IDApIHsKKwkJICAgIGhpbnRzID09IE5VTEwgPyAtMSA6IGhpbnRzLT5haV9wcm90b2NvbCwKKwkJICAgIGlmYWNlID09IE5VTEwgPyAiXiIgOiBpZmFjZSkgPCAwKSB7CiAJCWdvdG8gZXhpdDsKIAl9CiAJLy8gbGl0ZXJhbCBOVUxMIGJ5dGUgYXQgZW5kLCByZXF1aXJlZCBieSBGcmFtZXdvcmtMaXN0ZW5lcgpAQCAtNDc2LDEyICs0NjMsMTYgQEAKIAkJZ290byBleGl0OwogCX0KIAotCWludCByZW1vdGVfcnY7Ci0JaWYgKGZyZWFkKCZyZW1vdGVfcnYsIHNpemVvZihpbnQpLCAxLCBwcm94eSkgIT0gMSkgeworCWNoYXIgYnVmWzRdOworCS8vIHJlYWQgcmVzdWx0IGNvZGUgZm9yIGdldGhvc3RieWFkZHIKKwlpZiAoZnJlYWQoYnVmLCAxLCBzaXplb2YoYnVmKSwgcHJveHkpICE9IHNpemVvZihidWYpKSB7CiAJCWdvdG8gZXhpdDsKIAl9CiAKLQlpZiAocmVtb3RlX3J2ICE9IDApIHsKKwlpbnQgcmVzdWx0X2NvZGUgPSAoaW50KXN0cnRvbChidWYsIE5VTEwsIDEwKTsKKwkvLyB2ZXJpZnkgdGhlIGNvZGUgaXRzZWxmCisJaWYgKHJlc3VsdF9jb2RlICE9IERuc1Byb3h5UXVlcnlSZXN1bHQgKSB7CisJCWZyZWFkKGJ1ZiwgMSwgc2l6ZW9mKGJ1ZiksIHByb3h5KTsKIAkJZ290byBleGl0OwogCX0KIApAQCAtNTc0LDIwICs1NjUsMjYgQEAKIAkJcmV0dXJuIDA7CiAJfQogCi0JLy8gUHJveHkgZmFpbGVkOyBmYWxsIHRocm91Z2ggdG8gbG9jYWwKLQkvLyByZXNvbHZlciBjYXNlLiAgQnV0IGZpcnN0IGNsZWFuIHVwIGFueQotCS8vIG1lbW9yeSB3ZSBtaWdodCd2ZSBhbGxvY2F0ZWQuCisJLy8gUHJveHkgZmFpbGVkOworCS8vIGNsZWFuIHVwIG1lbW9yeSB3ZSBtaWdodCd2ZSBhbGxvY2F0ZWQuCiAJaWYgKCpyZXMpIHsKIAkJZnJlZWFkZHJpbmZvKCpyZXMpOwogCQkqcmVzID0gTlVMTDsKIAl9Ci0JcmV0dXJuIC0xOworCXJldHVybiBFQUlfTk9EQVRBOwogfQogCiBpbnQKIGdldGFkZHJpbmZvKGNvbnN0IGNoYXIgKmhvc3RuYW1lLCBjb25zdCBjaGFyICpzZXJ2bmFtZSwKICAgICBjb25zdCBzdHJ1Y3QgYWRkcmluZm8gKmhpbnRzLCBzdHJ1Y3QgYWRkcmluZm8gKipyZXMpCiB7CisJcmV0dXJuIGFuZHJvaWRfZ2V0YWRkcmluZm9mb3JpZmFjZShob3N0bmFtZSwgc2Vydm5hbWUsIGhpbnRzLCBOVUxMLCByZXMpOworfQorCitpbnQKK2FuZHJvaWRfZ2V0YWRkcmluZm9mb3JpZmFjZShjb25zdCBjaGFyICpob3N0bmFtZSwgY29uc3QgY2hhciAqc2Vydm5hbWUsCisgICAgY29uc3Qgc3RydWN0IGFkZHJpbmZvICpoaW50cywgY29uc3QgY2hhciAqaWZhY2UsIHN0cnVjdCBhZGRyaW5mbyAqKnJlcykKK3sKIAlzdHJ1Y3QgYWRkcmluZm8gc2VudGluZWw7CiAJc3RydWN0IGFkZHJpbmZvICpjdXI7CiAJaW50IGVycm9yID0gMDsKQEAgLTU5NSwxMiArNTkyLDEyIEBACiAJc3RydWN0IGFkZHJpbmZvIGFpMDsKIAlzdHJ1Y3QgYWRkcmluZm8gKnBhaTsKIAljb25zdCBzdHJ1Y3QgZXhwbG9yZSAqZXg7CisJY29uc3QgY2hhciogY2FjaGVfbW9kZSA9IGdldGVudigiQU5EUk9JRF9ETlNfTU9ERSIpOwogCiAJLyogaG9zdG5hbWUgaXMgYWxsb3dlZCB0byBiZSBOVUxMICovCiAJLyogc2Vydm5hbWUgaXMgYWxsb3dlZCB0byBiZSBOVUxMICovCiAJLyogaGludHMgaXMgYWxsb3dlZCB0byBiZSBOVUxMICovCiAJYXNzZXJ0KHJlcyAhPSBOVUxMKTsKLQogCW1lbXNldCgmc2VudGluZWwsIDAsIHNpemVvZihzZW50aW5lbCkpOwogCWN1ciA9ICZzZW50aW5lbDsKIAlwYWkgPSAmYWk7CkBAIC03MzMsOSArNzMwLDEwIEBACiAgICAgICAgIC8qCiAgICAgICAgICAqIEJFR0lOIEFORFJPSUQgQ0hBTkdFUzsgcHJveHlpbmcgdG8gdGhlIGNhY2hlCiAgICAgICAgICAqLwotICAgICAgICBpZiAoYW5kcm9pZF9nZXRhZGRyaW5mb19wcm94eShob3N0bmFtZSwgc2Vydm5hbWUsIGhpbnRzLCByZXMpID09IDApIHsKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9CisJaWYgKGNhY2hlX21vZGUgPT0gTlVMTCB8fCBzdHJjbXAoY2FjaGVfbW9kZSwgImxvY2FsIikgIT0gMCkgeworCQkvLyB3ZSdyZSBub3QgdGhlIHByb3h5IC0gcGFzcyB0aGUgcmVxdWVzdCB0byB0aGVtCisJCXJldHVybiBhbmRyb2lkX2dldGFkZHJpbmZvX3Byb3h5KGhvc3RuYW1lLCBzZXJ2bmFtZSwgaGludHMsIHJlcywgaWZhY2UpOworCX0KIAogCS8qCiAJICogaG9zdG5hbWUgYXMgYWxwaGFiZXRpY2FsIG5hbWUuCkBAIC03NjQsNyArNzYyLDcgQEAKIAkJCXBhaS0+YWlfcHJvdG9jb2wgPSBleC0+ZV9wcm90b2NvbDsKIAogCQllcnJvciA9IGV4cGxvcmVfZnFkbihwYWksIGhvc3RuYW1lLCBzZXJ2bmFtZSwKLQkJCSZjdXItPmFpX25leHQpOworCQkJJmN1ci0+YWlfbmV4dCwgaWZhY2UpOwogCiAJCXdoaWxlIChjdXIgJiYgY3VyLT5haV9uZXh0KQogCQkJY3VyID0gY3VyLT5haV9uZXh0OwpAQCAtNzk3LDcgKzc5NSw3IEBACiAgKi8KIHN0YXRpYyBpbnQKIGV4cGxvcmVfZnFkbihjb25zdCBzdHJ1Y3QgYWRkcmluZm8gKnBhaSwgY29uc3QgY2hhciAqaG9zdG5hbWUsCi0gICAgY29uc3QgY2hhciAqc2Vydm5hbWUsIHN0cnVjdCBhZGRyaW5mbyAqKnJlcykKKyAgICBjb25zdCBjaGFyICpzZXJ2bmFtZSwgc3RydWN0IGFkZHJpbmZvICoqcmVzLCBjb25zdCBjaGFyICppZmFjZSkKIHsKIAlzdHJ1Y3QgYWRkcmluZm8gKnJlc3VsdDsKIAlzdHJ1Y3QgYWRkcmluZm8gKmN1cjsKQEAgLTgyMyw3ICs4MjEsNyBAQAogCQlyZXR1cm4gMDsKIAogCXN3aXRjaCAobnNkaXNwYXRjaCgmcmVzdWx0LCBkdGFiLCBOU0RCX0hPU1RTLCAiZ2V0YWRkcmluZm8iLAotCQkJZGVmYXVsdF9kbnNfZmlsZXMsIGhvc3RuYW1lLCBwYWkpKSB7CisJCQlkZWZhdWx0X2Ruc19maWxlcywgaG9zdG5hbWUsIHBhaSwgaWZhY2UpKSB7CiAJY2FzZSBOU19UUllBR0FJTjoKIAkJZXJyb3IgPSBFQUlfQUdBSU47CiAJCWdvdG8gZnJlZTsKQEAgLTE1MjEsMTAgKzE1MTksOCBAQAogCQkJcmV0dXJuIElQVjZfQUREUl9TQ09QRV9MSU5LTE9DQUw7CiAJCX0gZWxzZSB7CiAJCQkvKgotCQkJICogQWNjb3JkaW5nIHRvIGRyYWZ0LWlldGYtNm1hbi1yZmMzNDg0LXJldmlzZS0wMSBzZWN0aW9uIDIuMywKLQkJCSAqIGl0IGlzIGJlc3Qgbm90IHRvIHRyZWF0IHRoZSBwcml2YXRlIElQdjQgcmFuZ2VzCi0JCQkgKiAoMTAuMC4wLjAvOCwgMTcyLjE2LjAuMC8xMiBhbmQgMTkyLjE2OC4wLjAvMTYpIGFzIGJlaW5nCi0JCQkgKiBpbiBhIHNwZWNpYWwgc2NvcGUsIHNvIHdlIGRvbid0LgorCQkJICogUkZDIDY3MjQgc2VjdGlvbiAzLjIuIE90aGVyIElQdjQgYWRkcmVzc2VzLCBpbmNsdWRpbmcgcHJpdmF0ZSBhZGRyZXNzZXMKKwkJCSAqIGFuZCBzaGFyZWQgYWRkcmVzc2VzICgxMDAuNjQuMC4wLzEwKSwgYXJlIGFzc2lnbmVkIGdsb2JhbCBzY29wZS4KIAkJCSAqLwogCQkJcmV0dXJuIElQVjZfQUREUl9TQ09QRV9HTE9CQUw7CiAJCX0KQEAgLTE1NTMsNyArMTU0OSw3IEBACiAKIC8qCiAgKiBHZXQgdGhlIGxhYmVsIGZvciBhIGdpdmVuIElQdjQvSVB2NiBhZGRyZXNzLgotICogUkZDIDM0ODQsIHNlY3Rpb24gMi4xLCBwbHVzIGNoYW5nZXMgZnJvbSBkcmFmdC1pZXRmLTZtYW4tcmZjMzQ4NC1yZXZpc2UtMDEuCisgKiBSRkMgNjcyNCwgc2VjdGlvbiAyLjEuCiAgKi8KIAogLypBUkdTVVNFRCovCkBAIC0xNTYxLDI3ICsxNTU3LDI4IEBACiBfZ2V0X2xhYmVsKGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqYWRkcikKIHsKIAlpZiAoYWRkci0+c2FfZmFtaWx5ID09IEFGX0lORVQpIHsKLQkJcmV0dXJuIDM7CisJCXJldHVybiA0OwogCX0gZWxzZSBpZiAoYWRkci0+c2FfZmFtaWx5ID09IEFGX0lORVQ2KSB7Ci0JCWNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbjYgKmFkZHI2ID0gKGNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbjYgKilhZGRyOworCQljb25zdCBzdHJ1Y3Qgc29ja2FkZHJfaW42ICphZGRyNiA9IChjb25zdCBzdHJ1Y3Qgc29ja2FkZHJfaW42ICopIGFkZHI7CiAJCWlmIChJTjZfSVNfQUREUl9MT09QQkFDSygmYWRkcjYtPnNpbjZfYWRkcikpIHsKIAkJCXJldHVybiAwOwotCQl9IGVsc2UgaWYgKElONl9JU19BRERSX1VMQSgmYWRkcjYtPnNpbjZfYWRkcikpIHsKLQkJCXJldHVybiAxOwogCQl9IGVsc2UgaWYgKElONl9JU19BRERSX1Y0TUFQUEVEKCZhZGRyNi0+c2luNl9hZGRyKSkgewotCQkJcmV0dXJuIDM7Ci0JCX0gZWxzZSBpZiAoSU42X0lTX0FERFJfNlRPNCgmYWRkcjYtPnNpbjZfYWRkcikpIHsKIAkJCXJldHVybiA0OworCQl9IGVsc2UgaWYgKElONl9JU19BRERSXzZUTzQoJmFkZHI2LT5zaW42X2FkZHIpKSB7CisJCQlyZXR1cm4gMjsKIAkJfSBlbHNlIGlmIChJTjZfSVNfQUREUl9URVJFRE8oJmFkZHI2LT5zaW42X2FkZHIpKSB7CiAJCQlyZXR1cm4gNTsKKwkJfSBlbHNlIGlmIChJTjZfSVNfQUREUl9VTEEoJmFkZHI2LT5zaW42X2FkZHIpKSB7CisJCQlyZXR1cm4gMTM7CiAJCX0gZWxzZSBpZiAoSU42X0lTX0FERFJfVjRDT01QQVQoJmFkZHI2LT5zaW42X2FkZHIpKSB7Ci0JCQlyZXR1cm4gMTA7CisJCQlyZXR1cm4gMzsKIAkJfSBlbHNlIGlmIChJTjZfSVNfQUREUl9TSVRFTE9DQUwoJmFkZHI2LT5zaW42X2FkZHIpKSB7CiAJCQlyZXR1cm4gMTE7CiAJCX0gZWxzZSBpZiAoSU42X0lTX0FERFJfNkJPTkUoJmFkZHI2LT5zaW42X2FkZHIpKSB7CiAJCQlyZXR1cm4gMTI7CiAJCX0gZWxzZSB7Ci0JCQlyZXR1cm4gMjsKKwkJCS8qIEFsbCBvdGhlciBJUHY2IGFkZHJlc3NlcywgaW5jbHVkaW5nIGdsb2JhbCB1bmljYXN0IGFkZHJlc3Nlcy4gKi8KKwkJCXJldHVybiAxOwogCQl9CiAJfSBlbHNlIHsKIAkJLyoKQEAgLTE1OTQsNyArMTU5MSw3IEBACiAKIC8qCiAgKiBHZXQgdGhlIHByZWNlZGVuY2UgZm9yIGEgZ2l2ZW4gSVB2NC9JUHY2IGFkZHJlc3MuCi0gKiBSRkMgMzQ4NCwgc2VjdGlvbiAyLjEsIHBsdXMgY2hhbmdlcyBmcm9tIGRyYWZ0LWlldGYtNm1hbi1yZmMzNDg0LXJldmlzZS0wMS4KKyAqIFJGQyA2NzI0LCBzZWN0aW9uIDIuMS4KICAqLwogCiAvKkFSR1NVU0VEKi8KQEAgLTE2MDIsMjQgKzE1OTksMjUgQEAKIF9nZXRfcHJlY2VkZW5jZShjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIpCiB7CiAJaWYgKGFkZHItPnNhX2ZhbWlseSA9PSBBRl9JTkVUKSB7Ci0JCXJldHVybiAzMDsKKwkJcmV0dXJuIDM1OwogCX0gZWxzZSBpZiAoYWRkci0+c2FfZmFtaWx5ID09IEFGX0lORVQ2KSB7CiAJCWNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbjYgKmFkZHI2ID0gKGNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbjYgKilhZGRyOwogCQlpZiAoSU42X0lTX0FERFJfTE9PUEJBQ0soJmFkZHI2LT5zaW42X2FkZHIpKSB7Ci0JCQlyZXR1cm4gNjA7Ci0JCX0gZWxzZSBpZiAoSU42X0lTX0FERFJfVUxBKCZhZGRyNi0+c2luNl9hZGRyKSkgewogCQkJcmV0dXJuIDUwOwogCQl9IGVsc2UgaWYgKElONl9JU19BRERSX1Y0TUFQUEVEKCZhZGRyNi0+c2luNl9hZGRyKSkgewotCQkJcmV0dXJuIDMwOworCQkJcmV0dXJuIDM1OwogCQl9IGVsc2UgaWYgKElONl9JU19BRERSXzZUTzQoJmFkZHI2LT5zaW42X2FkZHIpKSB7Ci0JCQlyZXR1cm4gMjA7CisJCQlyZXR1cm4gMzA7CiAJCX0gZWxzZSBpZiAoSU42X0lTX0FERFJfVEVSRURPKCZhZGRyNi0+c2luNl9hZGRyKSkgewotCQkJcmV0dXJuIDEwOworCQkJcmV0dXJuIDU7CisJCX0gZWxzZSBpZiAoSU42X0lTX0FERFJfVUxBKCZhZGRyNi0+c2luNl9hZGRyKSkgeworCQkJcmV0dXJuIDM7CiAJCX0gZWxzZSBpZiAoSU42X0lTX0FERFJfVjRDT01QQVQoJmFkZHI2LT5zaW42X2FkZHIpIHx8CiAJCSAgICAgICAgICAgSU42X0lTX0FERFJfU0lURUxPQ0FMKCZhZGRyNi0+c2luNl9hZGRyKSB8fAogCQkgICAgICAgICAgIElONl9JU19BRERSXzZCT05FKCZhZGRyNi0+c2luNl9hZGRyKSkgewogCQkJcmV0dXJuIDE7CiAJCX0gZWxzZSB7CisJCQkvKiBBbGwgb3RoZXIgSVB2NiBhZGRyZXNzZXMsIGluY2x1ZGluZyBnbG9iYWwgdW5pY2FzdCBhZGRyZXNzZXMuICovCiAJCQlyZXR1cm4gNDA7CiAJCX0KIAl9IGVsc2UgewpAQCAtMTY1OCwxMiArMTY1NiwxMiBAQAogCiAvKgogICogQ29tcGFyZSB0d28gc291cmNlL2Rlc3RpbmF0aW9uIGFkZHJlc3MgcGFpcnMuCi0gKiBSRkMgMzQ4NCwgc2VjdGlvbiA2LgorICogUkZDIDY3MjQsIHNlY3Rpb24gNi4KICAqLwogCiAvKkFSR1NVU0VEKi8KIHN0YXRpYyBpbnQKLV9yZmMzNDg0X2NvbXBhcmUoY29uc3Qgdm9pZCAqcHRyMSwgY29uc3Qgdm9pZCogcHRyMikKK19yZmM2NzI0X2NvbXBhcmUoY29uc3Qgdm9pZCAqcHRyMSwgY29uc3Qgdm9pZCogcHRyMikKIHsKIAljb25zdCBzdHJ1Y3QgYWRkcmluZm9fc29ydF9lbGVtICphMSA9IChjb25zdCBzdHJ1Y3QgYWRkcmluZm9fc29ydF9lbGVtICopcHRyMTsKIAljb25zdCBzdHJ1Y3QgYWRkcmluZm9fc29ydF9lbGVtICphMiA9IChjb25zdCBzdHJ1Y3QgYWRkcmluZm9fc29ydF9lbGVtICopcHRyMjsKQEAgLTE3MzQsNyArMTczMiw3IEBACiAKIAkvKgogCSAqIFJ1bGUgOTogVXNlIGxvbmdlc3QgbWF0Y2hpbmcgcHJlZml4LgotICAgICAgICAgKiBXZSBpbXBsZW1lbnQgdGhpcyBmb3IgSVB2NiBvbmx5LCBhcyB0aGUgcnVsZXMgaW4gUkZDIDM0ODQgZG9uJ3Qgc2VlbQorICAgICAgICAgKiBXZSBpbXBsZW1lbnQgdGhpcyBmb3IgSVB2NiBvbmx5LCBhcyB0aGUgcnVsZXMgaW4gUkZDIDY3MjQgZG9uJ3Qgc2VlbQogICAgICAgICAgKiB0byB3b3JrIHZlcnkgd2VsbCBkaXJlY3RseSBhcHBsaWVkIHRvIElQdjQuIChnbGliYyB1c2VzIGluZm9ybWF0aW9uIGZyb20KICAgICAgICAgICogdGhlIHJvdXRpbmcgdGFibGUgZm9yIGEgY3VzdG9tIElQdjQgaW1wbGVtZW50YXRpb24gaGVyZS4pCiAJICovCkBAIC0xODE0LDEzICsxODEyLDEzIEBACiB9CiAKIC8qCi0gKiBTb3J0IHRoZSBsaW5rZWQgbGlzdCBzdGFydGluZyBhdCBzZW50aW5lbC0+YWlfbmV4dCBpbiBSRkMzNDg0IG9yZGVyLgorICogU29ydCB0aGUgbGlua2VkIGxpc3Qgc3RhcnRpbmcgYXQgc2VudGluZWwtPmFpX25leHQgaW4gUkZDNjcyNCBvcmRlci4KICAqIFdpbGwgbGVhdmUgdGhlIGxpc3QgdW5jaGFuZ2VkIGlmIGFuIGVycm9yIG9jY3Vycy4KICAqLwogCiAvKkFSR1NVU0VEKi8KIHN0YXRpYyB2b2lkCi1fcmZjMzQ4NF9zb3J0KHN0cnVjdCBhZGRyaW5mbyAqbGlzdF9zZW50aW5lbCkKK19yZmM2NzI0X3NvcnQoc3RydWN0IGFkZHJpbmZvICpsaXN0X3NlbnRpbmVsKQogewogCXN0cnVjdCBhZGRyaW5mbyAqY3VyOwogCWludCBuZWxlbSA9IDAsIGk7CkBAIC0xODU1LDcgKzE4NTMsNyBAQAogCX0KIAogCS8qIFNvcnQgdGhlIGFkZHJlc3NlcywgYW5kIHJlYXJyYW5nZSB0aGUgbGlua2VkIGxpc3Qgc28gaXQgbWF0Y2hlcyB0aGUgc29ydGVkIG9yZGVyLiAqLwotCXFzb3J0KCh2b2lkICopZWxlbXMsIG5lbGVtLCBzaXplb2Yoc3RydWN0IGFkZHJpbmZvX3NvcnRfZWxlbSksIF9yZmMzNDg0X2NvbXBhcmUpOworCXFzb3J0KCh2b2lkICopZWxlbXMsIG5lbGVtLCBzaXplb2Yoc3RydWN0IGFkZHJpbmZvX3NvcnRfZWxlbSksIF9yZmM2NzI0X2NvbXBhcmUpOwogCiAJbGlzdF9zZW50aW5lbC0+YWlfbmV4dCA9IGVsZW1zWzBdLmFpOwogCWZvciAoaSA9IDA7IGkgPCBuZWxlbSAtIDE7ICsraSkgewpAQCAtMTg2Nyw2ICsxODY1LDIxIEBACiAJZnJlZShlbGVtcyk7CiB9CiAKK3N0YXRpYyBib29sIF91c2luZ19kZWZhdWx0X2Rucyhjb25zdCBjaGFyICppZmFjZSkKK3sKKwljaGFyIGJ1ZltJRl9OQU1FU0laRSsxXTsKKwlzaXplX3QgaWZfbGVuOworCisJLy8gY29tbW9uIGNhc2UKKwlpZiAoaWZhY2UgPT0gTlVMTCB8fCAqaWZhY2UgPT0gJ1wwJykgcmV0dXJuIHRydWU7CisKKwlpZl9sZW4gPSBfcmVzb2x2X2dldF9kZWZhdWx0X2lmYWNlKGJ1Ziwgc2l6ZW9mKGJ1ZikpOworCWlmIChpZl9sZW4gKyAxIDw9IHNpemVvZihidWYpKSB7CisJCWlmIChzdHJjbXAoYnVmLCBpZmFjZSkgIT0gMCkgcmV0dXJuIGZhbHNlOworCX0KKwlyZXR1cm4gdHJ1ZTsKK30KKwogLypBUkdTVVNFRCovCiBzdGF0aWMgaW50CiBfZG5zX2dldGFkZHJpbmZvKHZvaWQgKnJ2LCB2b2lkCSpjYl9kYXRhLCB2YV9saXN0IGFwKQpAQCAtMTg3OCw5ICsxODkxLDExIEBACiAJc3RydWN0IGFkZHJpbmZvIHNlbnRpbmVsLCAqY3VyOwogCXN0cnVjdCByZXNfdGFyZ2V0IHEsIHEyOwogCXJlc19zdGF0ZSByZXM7CisJY29uc3QgY2hhciogaWZhY2U7CiAKIAluYW1lID0gdmFfYXJnKGFwLCBjaGFyICopOwogCXBhaSA9IHZhX2FyZyhhcCwgY29uc3Qgc3RydWN0IGFkZHJpbmZvICopOworCWlmYWNlID0gdmFfYXJnKGFwLCBjaGFyICopOwogCS8vZnByaW50ZihzdGRlcnIsICJfZG5zX2dldGFkZHJpbmZvKCkgbmFtZSA9ICclcydcbiIsIG5hbWUpOwogCiAJbWVtc2V0KCZxLCAwLCBzaXplb2YocSkpOwpAQCAtMTkwOSwxNCArMTkyNCwxMiBAQAogCQlxLmFuc2xlbiA9IHNpemVvZihidWYtPmJ1Zik7CiAJCWludCBxdWVyeV9pcHY2ID0gMSwgcXVlcnlfaXB2NCA9IDE7CiAJCWlmIChwYWktPmFpX2ZsYWdzICYgQUlfQUREUkNPTkZJRykgewotCQkJcXVlcnlfaXB2NiA9IF9oYXZlX2lwdjYoKTsKLQkJCXF1ZXJ5X2lwdjQgPSBfaGF2ZV9pcHY0KCk7Ci0JCQlpZiAocXVlcnlfaXB2NiA9PSAwICYmIHF1ZXJ5X2lwdjQgPT0gMCkgewotCQkJCS8vIEJvdGggb3VyIElQdjQgYW5kIElQdjYgY29ubmVjdGl2aXR5IHByb2JlcyBmYWlsZWQsIHdoaWNoIGluZGljYXRlcwotCQkJCS8vIHRoYXQgd2UgaGF2ZSBuZWl0aGVyIGFuIElQdjQgb3IgYW4gSVB2NiBkZWZhdWx0IHJvdXRlIChhbmQgdGh1cyBubwotCQkJCS8vIGdsb2JhbCBJUHY0IG9yIElQdjYgY29ubmVjdGl2aXR5KS4gV2UgbWlnaHQgYmUgaW4gYSB3YWxsZWQgZ2FyZGVuLgotCQkJCS8vIFRocm93IHVwIG91ciBhcm1zIGFuZCBhc2sgZm9yIGJvdGggQSBhbmQgQUFBQS4KLQkJCQlxdWVyeV9pcHY2ID0gcXVlcnlfaXB2NCA9IDE7CisJCQkvLyBPbmx5IGltcGxlbWVudCBBSV9BRERSQ09ORklHIGlmIHRoZSBhcHBsaWNhdGlvbiBpcyBub3QKKwkJCS8vIHVzaW5nIGl0cyBvd24gRE5TIHNlcnZlcnMsIHNpbmNlIG91ciBpbXBsZW1lbnRhdGlvbgorCQkJLy8gb25seSB3b3JrcyBvbiB0aGUgZGVmYXVsdCBjb25uZWN0aW9uLgorCQkJaWYgKF91c2luZ19kZWZhdWx0X2RucyhpZmFjZSkpIHsKKwkJCQlxdWVyeV9pcHY2ID0gX2hhdmVfaXB2NigpOworCQkJCXF1ZXJ5X2lwdjQgPSBfaGF2ZV9pcHY0KCk7CiAJCQl9CiAJCX0KIAkJaWYgKHF1ZXJ5X2lwdjYpIHsKQEAgLTE5NjQsNiArMTk3NywxMiBAQAogCQlyZXR1cm4gTlNfTk9URk9VTkQ7CiAJfQogCisJLyogdGhpcyBqdXN0IHNldHMgb3VyIGlmYWNlIHZhbCBpbiB0aGUgdGhyZWFkIHByaXZhdGUgZGF0YSBzbyB3ZSBkb24ndCBoYXZlIHRvCisJICogbW9kaWZ5IHRoZSBhcGkncyBhbGwgdGhlIHdheSBkb3duIHRvIHJlc19zZW5kLmMncyByZXNfbnNlbmQuICBXZSBjb3VsZAorCSAqIGZ1bGx5IHBvcHVsYXRlIHRoZSB0aHJlYWQgcHJpdmF0ZSBkYXRhIGhlcmUsIGJ1dCBpZiB3ZSBnZXQgZG93biB0aGVyZQorCSAqIGFuZCBoYXZlIGEgY2FjaGUgaGl0IHRoYXQgd291bGQgYmUgd2FzdGVkLCBzbyB3ZSBkbyB0aGUgcmVzdCB0aGVyZSBvbiBtaXNzCisJICovCisJcmVzX3NldGlmYWNlKHJlcywgaWZhY2UpOwogCWlmIChyZXNfc2VhcmNoTihuYW1lLCAmcSwgcmVzKSA8IDApIHsKIAkJX19yZXNfcHV0X3N0YXRlKHJlcyk7CiAJCWZyZWUoYnVmKTsKQEAgLTE5OTUsNyArMjAxNCw3IEBACiAJCX0KIAl9CiAKLQlfcmZjMzQ4NF9zb3J0KCZzZW50aW5lbCk7CisJX3JmYzY3MjRfc29ydCgmc2VudGluZWwpOwogCiAJX19yZXNfcHV0X3N0YXRlKHJlcyk7CiAKQEAgLTIyOTQsNiArMjMxMywxMiBAQAogCSAgICAoZG90cyAmJiAhdHJhaWxpbmdfZG90ICYmIChyZXMtPm9wdGlvbnMgJiBSRVNfRE5TUkNIKSkpIHsKIAkJaW50IGRvbmUgPSAwOwogCisJCS8qIFVuZm9ydHVuYXRlbHkgd2UgbmVlZCB0byBzZXQgc3R1ZmYgdXAgYmVmb3JlCisJCSAqIHRoZSBkb21haW4gc3R1ZmYgaXMgdHJpZWQuICBXaWxsIGhhdmUgYSBiZXR0ZXIKKwkJICogZml4IGFmdGVyIHRocmVhZCBwb29scyBhcmUgdXNlZC4KKwkJICovCisJCV9yZXNvbHZfcG9wdWxhdGVfcmVzX2Zvcl9pZmFjZShyZXMpOworCiAJCWZvciAoZG9tYWluID0gKGNvbnN0IGNoYXIgKiBjb25zdCAqKXJlcy0+ZG5zcmNoOwogCQkgICAqZG9tYWluICYmICFkb25lOwogCQkgICBkb21haW4rKykgewpkaWZmIC0tZ2l0IGEvbGliYy9uZXRic2QvbmV0L2dldG5hbWVpbmZvLmMgYi9saWJjL25ldGJzZC9uZXQvZ2V0bmFtZWluZm8uYwppbmRleCBkM2QwMDExLi5hZGU1MjQwIDEwMDY0NAotLS0gYS9saWJjL25ldGJzZC9uZXQvZ2V0bmFtZWluZm8uYworKysgYi9saWJjL25ldGJzZC9uZXQvZ2V0bmFtZWluZm8uYwpAQCAtMSw0ICsxLDQgQEAKLS8qCSROZXRCU0Q6IGdldG5hbWVpbmZvLmMsdiAxLjQzIDIwMDYvMDIvMTcgMTU6NTg6MjYgZ2luc2JhY2ggRXhwICQJKi8KKy8qCSROZXRCU0Q6IGdldG5hbWVpbmZvLmMsdiAxLjUzIDIwMTIvMDkvMjYgMjM6MTM6MDAgY2hyaXN0b3MgRXhwICQJKi8KIC8qCSRLQU1FOiBnZXRuYW1laW5mby5jLHYgMS40NSAyMDAwLzA5LzI1IDIyOjQzOjU2IGl0b2p1biBFeHAgJAkqLwogCiAvKgpAQCAtNDcsMzEgKzQ3LDI3IEBACiAKICNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KICNpZiBkZWZpbmVkKExJQkNfU0NDUykgJiYgIWRlZmluZWQobGludCkKLV9fUkNTSUQoIiROZXRCU0Q6IGdldG5hbWVpbmZvLmMsdiAxLjQzIDIwMDYvMDIvMTcgMTU6NTg6MjYgZ2luc2JhY2ggRXhwICQiKTsKK19fUkNTSUQoIiROZXRCU0Q6IGdldG5hbWVpbmZvLmMsdiAxLjUzIDIwMTIvMDkvMjYgMjM6MTM6MDAgY2hyaXN0b3MgRXhwICQiKTsKICNlbmRpZiAvKiBMSUJDX1NDQ1MgYW5kIG5vdCBsaW50ICovCiAKICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KICNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjaW5jbHVkZSA8c3lzL3VuLmg+CiAjaW5jbHVkZSA8bmV0L2lmLmg+Ci0jaW5jbHVkZSA8bmV0L2lmX2RsLmg+CiAjaW5jbHVkZSA8bmV0L2lmX2llZWUxMzk0Lmg+CiAjaW5jbHVkZSA8bmV0L2lmX3R5cGVzLmg+CiAjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgogI2luY2x1ZGUgPGFycGEvaW5ldC5oPgotI2luY2x1ZGUgImFycGFfbmFtZXNlci5oIgogI2luY2x1ZGUgPGFzc2VydC5oPgogI2luY2x1ZGUgPGxpbWl0cy5oPgogI2luY2x1ZGUgPG5ldGRiLmg+Ci0jaWZkZWYgQU5EUk9JRF9DSEFOR0VTCisjaW5jbHVkZSAiYXJwYV9uYW1lc2VyLmgiCiAjaW5jbHVkZSAicmVzb2x2X3ByaXZhdGUuaCIKICNpbmNsdWRlIDxzeXMvc3lzdGVtX3Byb3BlcnRpZXMuaD4KICNpbmNsdWRlIDxzdGRsaWIuaD4KICNpbmNsdWRlIDx1bmlzdGQuaD4KLSNpbmNsdWRlIDxzeXMvdW4uaD4KICNpbmNsdWRlIDxlcnJuby5oPgotI2Vsc2UKLSNpbmNsdWRlIDxyZXNvbHYuaD4KLSNlbmRpZgorI2RlZmluZSBNSU4oeCx5KSAoKHgpIDwgKHkpID8gKHgpIDogKHkpKQogI2luY2x1ZGUgPHN0ZGRlZi5oPgogI2luY2x1ZGUgPHN0cmluZy5oPgogCkBAIC05NiwxNyArOTIsMTUgQEAKIAl1X3Nob3J0CXNpX3BvcnQ7CiB9OwogCi1zdGF0aWMgaW50IGdldG5hbWVpbmZvX2luZXQgX19QKChjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKiwgc29ja2xlbl90LCBjaGFyICosCi0gICAgc29ja2xlbl90LCBjaGFyICosIHNvY2tsZW5fdCwgaW50KSk7CitzdGF0aWMgaW50IGdldG5hbWVpbmZvX2luZXQoY29uc3Qgc3RydWN0IHNvY2thZGRyICosIHNvY2tsZW5fdCwgY2hhciAqLAorICAgIHNvY2tsZW5fdCwgY2hhciAqLCBzb2NrbGVuX3QsIGludCwgY29uc3QgY2hhciopOwogI2lmZGVmIElORVQ2Ci1zdGF0aWMgaW50IGlwNl9wYXJzZW51bWVyaWMgX19QKChjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKiwgY29uc3QgY2hhciAqLCBjaGFyICosCi0JCQkJIHNvY2tsZW5fdCwgaW50KSk7Ci1zdGF0aWMgaW50IGlwNl9zYTJzdHIgX19QKChjb25zdCBzdHJ1Y3Qgc29ja2FkZHJfaW42ICosIGNoYXIgKiwgc2l6ZV90LAotCQkJCSBpbnQpKTsKK3N0YXRpYyBpbnQgaXA2X3BhcnNlbnVtZXJpYyhjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKiwgY29uc3QgY2hhciAqLCBjaGFyICosCisJCQkJIHNvY2tsZW5fdCwgaW50KTsKK3N0YXRpYyBpbnQgaXA2X3NhMnN0cihjb25zdCBzdHJ1Y3Qgc29ja2FkZHJfaW42ICosIGNoYXIgKiwgc2l6ZV90LCBpbnQpOwogI2VuZGlmCi1zdGF0aWMgaW50IGdldG5hbWVpbmZvX2xpbmsgX19QKChjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKiwgc29ja2xlbl90LCBjaGFyICosCi0gICAgc29ja2xlbl90LCBjaGFyICosIHNvY2tsZW5fdCwgaW50KSk7Ci1zdGF0aWMgaW50IGhleG5hbWUgX19QKChjb25zdCB1X2ludDhfdCAqLCBzaXplX3QsIGNoYXIgKiwgc29ja2xlbl90KSk7CitzdGF0aWMgaW50IGdldG5hbWVpbmZvX2xvY2FsKGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqLCBzb2NrbGVuX3QsIGNoYXIgKiwKKyAgICBzb2NrbGVuX3QsIGNoYXIgKiwgc29ja2xlbl90LCBpbnQpOwogCiAvKgogICogVG9wLWxldmVsIGdldG5hbWVpbmZvKCkgY29kZS4gIExvb2sgYXQgdGhlIGFkZHJlc3MgZmFtaWx5LCBhbmQgcGljayBhbgpAQCAtMTE0LDEyNiArMTA4LDc4IEBACiAgKi8KIGludCBnZXRuYW1laW5mbyhjb25zdCBzdHJ1Y3Qgc29ja2FkZHIqIHNhLCBzb2NrbGVuX3Qgc2FsZW4sIGNoYXIqIGhvc3QsIHNpemVfdCBob3N0bGVuLCBjaGFyKiBzZXJ2LCBzaXplX3Qgc2VydmxlbiwgaW50IGZsYWdzKQogeworCXJldHVybiBhbmRyb2lkX2dldG5hbWVpbmZvZm9yaWZhY2Uoc2EsIHNhbGVuLCBob3N0LCBob3N0bGVuLCBzZXJ2LCBzZXJ2bGVuLCBmbGFncywgTlVMTCk7Cit9CisKK2ludCBhbmRyb2lkX2dldG5hbWVpbmZvZm9yaWZhY2UoY29uc3Qgc3RydWN0IHNvY2thZGRyKiBzYSwgc29ja2xlbl90IHNhbGVuLCBjaGFyKiBob3N0LCBzaXplX3QgaG9zdGxlbiwgY2hhciogc2Vydiwgc2l6ZV90IHNlcnZsZW4sIGludCBmbGFncywgY29uc3QgY2hhciogaWZhY2UpCit7CiAJc3dpdGNoIChzYS0+c2FfZmFtaWx5KSB7CiAJY2FzZSBBRl9JTkVUOgogCWNhc2UgQUZfSU5FVDY6CiAJCXJldHVybiBnZXRuYW1laW5mb19pbmV0KHNhLCBzYWxlbiwgaG9zdCwgaG9zdGxlbiwKKwkJCQlzZXJ2LCBzZXJ2bGVuLCBmbGFncywgaWZhY2UpOworCWNhc2UgQUZfTE9DQUw6CisJCXJldHVybiBnZXRuYW1laW5mb19sb2NhbChzYSwgc2FsZW4sIGhvc3QsIGhvc3RsZW4sCiAJCSAgICBzZXJ2LCBzZXJ2bGVuLCBmbGFncyk7Ci0jaWYgMAotCWNhc2UgQUZfTElOSzoKLQkJcmV0dXJuIGdldG5hbWVpbmZvX2xpbmsoc2EsIHNhbGVuLCBob3N0LCBob3N0bGVuLAotCQkgICAgc2Vydiwgc2VydmxlbiwgZmxhZ3MpOwotI2VuZGlmCiAJZGVmYXVsdDoKIAkJcmV0dXJuIEVBSV9GQU1JTFk7CiAJfQogfQogCi0jaWZkZWYgQU5EUk9JRF9DSEFOR0VTCisvKgorICogZ2V0bmFtZWluZm9fbG9jYWwoKToKKyAqIEZvcm1hdCBhbiBsb2NhbCBhZGRyZXNzIGludG8gYSBwcmludGFibGUgZm9ybWF0LgorICovCisvKiBBUkdTVVNFRCAqLworc3RhdGljIGludAorZ2V0bmFtZWluZm9fbG9jYWwoY29uc3Qgc3RydWN0IHNvY2thZGRyICpzYSwgc29ja2xlbl90IHNhbGVuLAorICAgIGNoYXIgKmhvc3QsIHNvY2tsZW5fdCBob3N0bGVuLCBjaGFyICpzZXJ2LCBzb2NrbGVuX3Qgc2VydmxlbiwKKyAgICBpbnQgZmxhZ3MgX19hdHRyaWJ1dGVfXygodW51c2VkKSkpCit7CisgICAgICAgY29uc3Qgc3RydWN0IHNvY2thZGRyX3VuICpzdW4gPQorICAgICAgICAgICAoY29uc3Qgc3RydWN0IHNvY2thZGRyX3VuICopKGNvbnN0IHZvaWQgKilzYTsKKworICAgICAgIGlmIChzYWxlbiA8IChzb2NrbGVuX3QpIG9mZnNldG9mKHN0cnVjdCBzb2NrYWRkcl91biwgc3VuX3BhdGgpKSB7CisgICAgICAgICAgIHJldHVybiBFQUlfRkFNSUxZOworICAgICAgIH0KKworICAgICAgIGlmIChzZXJ2ICE9IE5VTEwgJiYgc2VydmxlbiA+IDApCisgICAgICAgICAgICAgICBzZXJ2WzBdID0gJ1wwJzsKKworICAgICAgIGlmIChob3N0ICYmIGhvc3RsZW4gPiAwKQorICAgICAgICAgICAgICAgc3RybGNweShob3N0LCBzdW4tPnN1bl9wYXRoLAorICAgICAgICAgICAgICAgICAgIE1JTigoc29ja2xlbl90KSBzaXplb2Yoc3VuLT5zdW5fcGF0aCkgKyAxLCBob3N0bGVuKSk7CisKKyAgICAgICByZXR1cm4gMDsKK30KKwogLyogT24gc3VjY2VzcyBsZW5ndGggb2YgdGhlIGhvc3QgbmFtZSBpcyByZXR1cm5lZC4gQSByZXR1cm4KICAqIHZhbHVlIG9mIDAgbWVhbnMgdGhlcmUncyBubyBob3N0IG5hbWUgYXNzb2NpYXRlZCB3aXRoCiAgKiB0aGUgYWRkcmVzcy4gT24gZmFpbHVyZSAtMSBpcyByZXR1cm5lZCBpbiB3aGljaCBjYXNlCiAgKiBub3JtYWwgZXhlY3V0aW9uIGZsb3cgc2hhbGwgY29udGludWUuICovCiBzdGF0aWMgaW50Ci1hbmRyb2lkX2dldGhvc3RieWFkZHJfcHJveHkoc3RydWN0IGhvc3RlbnQqIGhwLCBjb25zdCB2b2lkICphZGRyLCBzb2NrbGVuX3QgYWRkckxlbiwgaW50IGFkZHJGYW1pbHkpIHsKK2FuZHJvaWRfZ2V0aG9zdGJ5YWRkcl9wcm94eShjaGFyKiBuYW1lQnVmLCBzaXplX3QgbmFtZUJ1ZkxlbiwgY29uc3Qgdm9pZCAqYWRkciwgc29ja2xlbl90IGFkZHJMZW4sIGludCBhZGRyRmFtaWx5LCBjb25zdCBjaGFyKiBpZmFjZSkKK3sKKwlzdHJ1Y3QgaG9zdGVudCAqaG9zdFJlc3VsdCA9CisJCQlhbmRyb2lkX2dldGhvc3RieWFkZHJmb3JpZmFjZV9wcm94eShhZGRyLCBhZGRyTGVuLCBhZGRyRmFtaWx5LCBpZmFjZSk7CiAKLQlpbnQgc29jazsKLQljb25zdCBpbnQgb25lID0gMTsKLQlzdHJ1Y3Qgc29ja2FkZHJfdW4gcHJveHlfYWRkcjsKLQljb25zdCBjaGFyKiBjYWNoZV9tb2RlID0gZ2V0ZW52KCJBTkRST0lEX0ROU19NT0RFIik7Ci0JRklMRSogcHJveHkgPSBOVUxMOwotCWludCByZXN1bHQgPSAtMTsKKwlpZiAoaG9zdFJlc3VsdCA9PSBOVUxMKSByZXR1cm4gMDsKIAotCWlmIChjYWNoZV9tb2RlICE9IE5VTEwgJiYgc3RyY21wKGNhY2hlX21vZGUsICJsb2NhbCIpID09IDApIHsKLQkJLy8gRG9uJ3QgdXNlIHRoZSBwcm94eSBpbiBsb2NhbCBtb2RlLiAgVGhpcyBpcyB1c2VkIGJ5IHRoZQotCQkvLyBwcm94eSBpdHNlbGYuCi0JCXJldHVybiAtMTsKLQl9CisJaW50IGxlbmd0aFJlc3VsdCA9IHN0cmxlbihob3N0UmVzdWx0LT5oX25hbWUpOwogCi0JLy8gVGVtcG9yYXJ5IGNhdXRpb3VzIGhhY2sgdG8gZGlzYWJsZSB0aGUgRE5TIHByb3h5IGZvciBwcm9jZXNzZXMKLQkvLyByZXF1ZXN0aW5nIHNwZWNpYWwgdHJlYXRtZW50LiAgSWRlYWxseSB0aGUgRE5TIHByb3h5IHNob3VsZAotCS8vIGFjY29tb2RhdGUgdGhlc2UgYXBwcywgdGhvdWdoLgotCWNoYXIgcHJvcG5hbWVbUFJPUF9OQU1FX01BWF07Ci0JY2hhciBwcm9wdmFsdWVbUFJPUF9WQUxVRV9NQVhdOwotCXNucHJpbnRmKHByb3BuYW1lLCBzaXplb2YocHJvcG5hbWUpLCAibmV0LmRuczEuJWQiLCBnZXRwaWQoKSk7Ci0JaWYgKF9fc3lzdGVtX3Byb3BlcnR5X2dldChwcm9wbmFtZSwgcHJvcHZhbHVlKSA+IDApIHsKLQkJcmV0dXJuIC0xOwotCX0KLQkvLyBjcmVhdGUgc29ja2V0Ci0Jc29jayA9IHNvY2tldChBRl9VTklYLCBTT0NLX1NUUkVBTSwgMCk7Ci0JaWYgKHNvY2sgPCAwKSB7Ci0JCXJldHVybiAtMTsKLQl9Ci0KLQlzZXRzb2Nrb3B0KHNvY2ssIFNPTF9TT0NLRVQsIFNPX1JFVVNFQUREUiwgJm9uZSwgc2l6ZW9mKG9uZSkpOwotCW1lbXNldCgmcHJveHlfYWRkciwgMCwgc2l6ZW9mKHByb3h5X2FkZHIpKTsKLQlwcm94eV9hZGRyLnN1bl9mYW1pbHkgPSBBRl9VTklYOwotCXN0cmxjcHkocHJveHlfYWRkci5zdW5fcGF0aCwgIi9kZXYvc29ja2V0L2Ruc3Byb3h5ZCIsCi0JCQlzaXplb2YocHJveHlfYWRkci5zdW5fcGF0aCkpOwotCWlmIChURU1QX0ZBSUxVUkVfUkVUUlkoY29ubmVjdChzb2NrLCAoY29uc3Qgc3RydWN0IHNvY2thZGRyKikgKHZvaWQqKSAmcHJveHlfYWRkciwKLQkJCQkJCQlzaXplb2YocHJveHlfYWRkcikpKSAhPSAwKSB7Ci0JCWNsb3NlKHNvY2spOwotCQlyZXR1cm4gLTE7Ci0JfQotCi0JLy8gc2VuZCByZXF1ZXN0IHRvIERuc1Byb3h5TGlzdGVuZXIKLQlwcm94eSA9IGZkb3Blbihzb2NrLCJyKyIpOwotCWlmIChwcm94eSA9PSBOVUxMKSB7Ci0JCWdvdG8gZXhpdDsKLQl9Ci0KLQljaGFyIGJ1ZltJTkVUNl9BRERSU1RSTEVOXTsgLy8gYmlnIGVub3VnaCBmb3IgSVB2NCBhbmQgSVB2NgotCWNvbnN0IGNoYXIqIGFkZHJTdHIgPSBpbmV0X250b3AoYWRkckZhbWlseSwgYWRkciwgJmJ1Ziwgc2l6ZW9mKGJ1ZikpOwotCWlmIChhZGRyU3RyID09IE5VTEwpIHsKLQkJZ290byBleGl0OwotCX0KLQlpZiAoZnByaW50Zihwcm94eSwgImdldGhvc3RieWFkZHIgJXMgJWQgJWQiLCBhZGRyU3RyLCBhZGRyTGVuLCBhZGRyRmFtaWx5KSA8IDApIHsKLQkJZ290byBleGl0OwotCX0KLQotCS8vIGxpdGVyYWwgTlVMTCBieXRlIGF0IGVuZCwgcmVxdWlyZWQgYnkgRnJhbWV3b3JrTGlzdGVuZXIKLQlpZiAoZnB1dGMoMCwgcHJveHkpID09IEVPRiB8fCBmZmx1c2gocHJveHkpICE9IDApIHsKLQkJZ290byBleGl0OwotCX0KLQotCXJlc3VsdCA9IDA7Ci0JdWludDMyX3QgbmFtZV9sZW47Ci0JaWYgKGZyZWFkKCZuYW1lX2xlbiwgc2l6ZW9mKG5hbWVfbGVuKSwgMSwgcHJveHkpICE9IDEpIHsKLQkJZ290byBleGl0OwotCX0KLQotCW5hbWVfbGVuID0gbnRvaGwobmFtZV9sZW4pOwotCWlmIChuYW1lX2xlbiA8PSAwKSB7Ci0JCWdvdG8gZXhpdDsKLQl9Ci0KLQlpZiAoZnJlYWQoaHAtPmhfbmFtZSwgbmFtZV9sZW4sIDEsIHByb3h5KSAhPSAxKSB7Ci0JCWdvdG8gZXhpdDsKLQl9Ci0KLQlyZXN1bHQgPSBuYW1lX2xlbjsKLQotIGV4aXQ6Ci0JaWYgKHByb3h5ICE9IE5VTEwpIHsKLQkJZmNsb3NlKHByb3h5KTsKLQl9Ci0KLQlyZXR1cm4gcmVzdWx0OworCWlmIChuYW1lQnVmKSBzdHJuY3B5KG5hbWVCdWYsIGhvc3RSZXN1bHQtPmhfbmFtZSwgbmFtZUJ1Zkxlbik7CisJcmV0dXJuIGxlbmd0aFJlc3VsdDsKIH0KLSNlbmRpZgorCiAvKgogICogZ2V0bmFtZWluZm9faW5ldCgpOgogICogRm9ybWF0IGFuIElQdjQgb3IgSVB2NiBzb2NrYWRkciBpbnRvIGEgcHJpbnRhYmxlIHN0cmluZy4KICAqLwogc3RhdGljIGludAotZ2V0bmFtZWluZm9faW5ldChzYSwgc2FsZW4sIGhvc3QsIGhvc3RsZW4sIHNlcnYsIHNlcnZsZW4sIGZsYWdzKQotCWNvbnN0IHN0cnVjdCBzb2NrYWRkciAqc2E7Ci0Jc29ja2xlbl90IHNhbGVuOwotCWNoYXIgKmhvc3Q7Ci0Jc29ja2xlbl90IGhvc3RsZW47Ci0JY2hhciAqc2VydjsKLQlzb2NrbGVuX3Qgc2VydmxlbjsKLQlpbnQgZmxhZ3M7CitnZXRuYW1laW5mb19pbmV0KGNvbnN0IHN0cnVjdCBzb2NrYWRkciogc2EsIHNvY2tsZW5fdCBzYWxlbiwKKyAgICAgICBjaGFyICpob3N0LCBzb2NrbGVuX3QgaG9zdGxlbiwKKyAgICAgICBjaGFyICpzZXJ2LCBzb2NrbGVuX3Qgc2VydmxlbiwKKyAgICAgICBpbnQgZmxhZ3MsIGNvbnN0IGNoYXIqIGlmYWNlKQogewogCWNvbnN0IHN0cnVjdCBhZmQgKmFmZDsKIAlzdHJ1Y3Qgc2VydmVudCAqc3A7CkBAIC0yNDEsNyArMTg3LDcgQEAKIAl1X3Nob3J0IHBvcnQ7CiAJaW50IGZhbWlseSwgaTsKIAljb25zdCBjaGFyICphZGRyOwotCXVfaW50MzJfdCB2NGE7CisJdWludDMyX3QgdjRhOwogCWNoYXIgbnVtc2Vydls1MTJdOwogCWNoYXIgbnVtYWRkcls1MTJdOwogCkBAIC0yNTIsMTEgKzE5OCw2IEBACiAJaWYgKHNhID09IE5VTEwpCiAJCXJldHVybiBFQUlfRkFJTDsKIAotI2lmZGVmIEJTRDRfNAotCWlmIChzYS0+c2FfbGVuICE9IHNhbGVuKQotCQlyZXR1cm4gRUFJX0ZBSUw7Ci0jZW5kaWYKLQogCWZhbWlseSA9IHNhLT5zYV9mYW1pbHk7CiAJZm9yIChpID0gMDsgYWZkbFtpXS5hX2FmOyBpKyspCiAJCWlmIChhZmRsW2ldLmFfYWYgPT0gZmFtaWx5KSB7CkBAIC0yNjYsOCArMjA3LDExIEBACiAJcmV0dXJuIEVBSV9GQU1JTFk7CiAKICBmb3VuZDoKLQlpZiAoc2FsZW4gIT0gYWZkLT5hX3NvY2tsZW4pCi0JCXJldHVybiBFQUlfRkFJTDsKKwkvLyBodHRwOi8vYi8xODg5Mjc1OiBjYWxsZXJzIHNob3VsZCBiZSBhbGxvd2VkIHRvIHByb3ZpZGUgdG9vIG11Y2gKKwkvLyBzcGFjZSwgYnV0IG5vdCB0b28gbGl0dGxlLgorCWlmIChzYWxlbiA8IGFmZC0+YV9zb2NrbGVuKSB7CisJCXJldHVybiBFQUlfRkFNSUxZOworCX0KIAogCS8qIG5ldHdvcmsgYnl0ZSBvcmRlciAqLwogCXBvcnQgPSAoKGNvbnN0IHN0cnVjdCBzb2NraW5ldCAqKShjb25zdCB2b2lkICopc2EpLT5zaV9wb3J0OwpAQCAtMzAxLDcgKzI0NSw3IEBACiAKIAlzd2l0Y2ggKHNhLT5zYV9mYW1pbHkpIHsKIAljYXNlIEFGX0lORVQ6Ci0JCXY0YSA9ICh1X2ludDMyX3QpCisJCXY0YSA9ICh1aW50MzJfdCkKIAkJICAgIG50b2hsKCgoY29uc3Qgc3RydWN0IHNvY2thZGRyX2luICopCiAJCSAgICAoY29uc3Qgdm9pZCAqKXNhKS0+c2luX2FkZHIuc19hZGRyKTsKIAkJaWYgKElOX01VTFRJQ0FTVCh2NGEpIHx8IElOX0VYUEVSSU1FTlRBTCh2NGEpKQpAQCAtMzczLDIxICszMTcsMTkgQEAKIAkJCWJyZWFrOwogCQl9CiAJfSBlbHNlIHsKLSNpZmRlZiBBTkRST0lEX0NIQU5HRVMKIAkJc3RydWN0IGhvc3RlbnQgYW5kcm9pZF9wcm94eV9ob3N0ZW50OwogCQljaGFyIGFuZHJvaWRfcHJveHlfYnVmW01BWEROQU1FXTsKLQkJYW5kcm9pZF9wcm94eV9ob3N0ZW50LmhfbmFtZSA9IGFuZHJvaWRfcHJveHlfYnVmOwogCi0JCWludCBob3N0bmFtZWxlbiA9IGFuZHJvaWRfZ2V0aG9zdGJ5YWRkcl9wcm94eSgmYW5kcm9pZF9wcm94eV9ob3N0ZW50LAotCQkJCWFkZHIsIGFmZC0+YV9hZGRybGVuLCBhZmQtPmFfYWYpOwotCQlpZiAoaG9zdG5hbWVsZW4gPj0gMCkgewotCQkJaHAgPSAoaG9zdG5hbWVsZW4gPiAwKSA/ICZhbmRyb2lkX3Byb3h5X2hvc3RlbnQgOiBOVUxMOworCQlpbnQgaG9zdG5hbWVsZW4gPSBhbmRyb2lkX2dldGhvc3RieWFkZHJfcHJveHkoYW5kcm9pZF9wcm94eV9idWYsCisJCQkJTUFYRE5BTUUsIGFkZHIsIGFmZC0+YV9hZGRybGVuLCBhZmQtPmFfYWYsIGlmYWNlKTsKKwkJaWYgKGhvc3RuYW1lbGVuID4gMCkgeworCQkJaHAgPSAmYW5kcm9pZF9wcm94eV9ob3N0ZW50OworCQkJaHAtPmhfbmFtZSA9IGFuZHJvaWRfcHJveHlfYnVmOworCQl9IGVsc2UgaWYgKCFob3N0bmFtZWxlbikgeworCQkJaHAgPSBOVUxMOwogCQl9IGVsc2UgewotCQkJaHAgPSBnZXRob3N0YnlhZGRyKGFkZHIsIGFmZC0+YV9hZGRybGVuLCBhZmQtPmFfYWYpOworCQkJaHAgPSBhbmRyb2lkX2dldGhvc3RieWFkZHJmb3JpZmFjZShhZGRyLCBhZmQtPmFfYWRkcmxlbiwgYWZkLT5hX2FmLCBpZmFjZSk7CiAJCX0KLSNlbHNlCi0JCWhwID0gZ2V0aG9zdGJ5YWRkcihhZGRyLCBhZmQtPmFfYWRkcmxlbiwgYWZkLT5hX2FmKTsKLSNlbmRpZgogCiAJCWlmIChocCkgewogI2lmIDAKQEAgLTQzNSwxMiArMzc3LDggQEAKIAogI2lmZGVmIElORVQ2CiBzdGF0aWMgaW50Ci1pcDZfcGFyc2VudW1lcmljKHNhLCBhZGRyLCBob3N0LCBob3N0bGVuLCBmbGFncykKLQljb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKnNhOwotCWNvbnN0IGNoYXIgKmFkZHI7Ci0JY2hhciAqaG9zdDsKLQlzb2NrbGVuX3QgaG9zdGxlbjsKLQlpbnQgZmxhZ3M7CitpcDZfcGFyc2VudW1lcmljKGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqc2EsIGNvbnN0IGNoYXIgKmFkZHIsIGNoYXIgKmhvc3QsCisgICAgICAgc29ja2xlbl90IGhvc3RsZW4sIGludCBmbGFncykKIHsKIAlzaXplX3QgbnVtYWRkcmxlbjsKIAljaGFyIG51bWFkZHJbNTEyXTsKQEAgLTQ0OSw5ICszODcsNiBAQAogCWFzc2VydChhZGRyICE9IE5VTEwpOwogCWFzc2VydChob3N0ICE9IE5VTEwpOwogCi0JaWYgKGhvc3RsZW4gPCAwKQotCQlyZXR1cm4gRUFJX09WRVJGTE9XOwotCiAJaWYgKGluZXRfbnRvcChBRl9JTkVUNiwgYWRkciwgbnVtYWRkciwgc2l6ZW9mKG51bWFkZHIpKSA9PSBOVUxMKQogCQlyZXR1cm4gRUFJX1NZU1RFTTsKIApAQCAtNDgzLDExICs0MTgsNyBAQAogCiAvKiBBUkdTVVNFRCAqLwogc3RhdGljIGludAotaXA2X3NhMnN0cihzYTYsIGJ1ZiwgYnVmc2l6LCBmbGFncykKLQljb25zdCBzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzYTY7Ci0JY2hhciAqYnVmOwotCXNpemVfdCBidWZzaXo7Ci0JaW50IGZsYWdzOworaXA2X3NhMnN0cihjb25zdCBzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzYTYsIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1ZnNpeiwgaW50IGZsYWdzKQogewogCXVuc2lnbmVkIGludCBpZmluZGV4OwogCWNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYTY7CkBAIC01MjYsMTA3ICs0NTcsMyBAQAogCQlyZXR1cm4gbjsKIH0KICNlbmRpZiAvKiBJTkVUNiAqLwotCi0KLS8qCi0gKiBnZXRuYW1laW5mb19saW5rKCk6Ci0gKiBGb3JtYXQgYSBsaW5rLWxheWVyIGFkZHJlc3MgaW50byBhIHByaW50YWJsZSBmb3JtYXQsIHBheWluZyBhdHRlbnRpb24gdG8KLSAqIHRoZSBpbnRlcmZhY2UgdHlwZS4KLSAqLwotLyogQVJHU1VTRUQgKi8KLXN0YXRpYyBpbnQKLWdldG5hbWVpbmZvX2xpbmsoY29uc3Qgc3RydWN0IHNvY2thZGRyICpzYSwgc29ja2xlbl90IHNhbGVuLAotICAgIGNoYXIgKmhvc3QsIHNvY2tsZW5fdCBob3N0bGVuLCBjaGFyICpzZXJ2LCBzb2NrbGVuX3Qgc2VydmxlbiwKLSAgICBpbnQgZmxhZ3MpCi17Ci0JY29uc3Qgc3RydWN0IHNvY2thZGRyX2RsICpzZGwgPQotCSAgICAoY29uc3Qgc3RydWN0IHNvY2thZGRyX2RsICopKGNvbnN0IHZvaWQgKilzYTsKLQljb25zdCBzdHJ1Y3QgaWVlZTEzOTRfaHdhZGRyICppaGE7Ci0JaW50IG47Ci0KLQlpZiAoc2VydiAhPSBOVUxMICYmIHNlcnZsZW4gPiAwKQotCQkqc2VydiA9ICdcMCc7Ci0KLQlpZiAoc2RsLT5zZGxfbmxlbiA9PSAwICYmIHNkbC0+c2RsX2FsZW4gPT0gMCAmJiBzZGwtPnNkbF9zbGVuID09IDApIHsKLQkJbiA9IHNucHJpbnRmKGhvc3QsIGhvc3RsZW4sICJsaW5rIyV1Iiwgc2RsLT5zZGxfaW5kZXgpOwotCQlpZiAobiA8IDAgfHwgKHNvY2tsZW5fdCkgbiA+IGhvc3RsZW4pIHsKLQkJCSpob3N0ID0gJ1wwJzsKLQkJCXJldHVybiBFQUlfTUVNT1JZOwotCQl9Ci0JCXJldHVybiAwOwotCX0KLQotCXN3aXRjaCAoc2RsLT5zZGxfdHlwZSkgewotI2lmZGVmIElGVF9FQ09ORVQKLQljYXNlIElGVF9FQ09ORVQ6Ci0JCWlmIChzZGwtPnNkbF9hbGVuIDwgMikKLQkJCXJldHVybiBFQUlfRkFNSUxZOwotCQlpZiAoQ0xMQUREUihzZGwpWzFdID09IDApCi0JCQluID0gc25wcmludGYoaG9zdCwgaG9zdGxlbiwgIiV1IiwgQ0xMQUREUihzZGwpWzBdKTsKLQkJZWxzZQotCQkJbiA9IHNucHJpbnRmKGhvc3QsIGhvc3RsZW4sICIldS4ldSIsCi0JCQkgICAgQ0xMQUREUihzZGwpWzFdLCBDTExBRERSKHNkbClbMF0pOwotCQlpZiAobiA8IDAgfHwgKHNvY2tsZW5fdCkgbiA+PSBob3N0bGVuKSB7Ci0JCQkqaG9zdCA9ICdcMCc7Ci0JCQlyZXR1cm4gRUFJX01FTU9SWTsKLQkJfSBlbHNlCi0JCQlyZXR1cm4gMDsKLSNlbmRpZgotCWNhc2UgSUZUX0lFRUUxMzk0OgotCQlpZiAoc2RsLT5zZGxfYWxlbiA8IHNpemVvZihpaGEtPmloYV91aWQpKQotCQkJcmV0dXJuIEVBSV9GQU1JTFk7Ci0JCWloYSA9Ci0JCSAgICAoY29uc3Qgc3RydWN0IGllZWUxMzk0X2h3YWRkciAqKShjb25zdCB2b2lkICopQ0xMQUREUihzZGwpOwotCQlyZXR1cm4gaGV4bmFtZShpaGEtPmloYV91aWQsIHNpemVvZihpaGEtPmloYV91aWQpLAotCQkgICAgaG9zdCwgaG9zdGxlbik7Ci0JLyoKLQkgKiBUaGUgZm9sbG93aW5nIGhhdmUgemVyby1sZW5ndGggYWRkcmVzc2VzLgotCSAqIElGVF9BVE0JKG5ldC9pZl9hdG1zdWJyLmMpCi0JICogSUZUX0ZBSVRICShuZXQvaWZfZmFpdGguYykKLQkgKiBJRlRfR0lGCShuZXQvaWZfZ2lmLmMpCi0JICogSUZUX0xPT1AJKG5ldC9pZl9sb29wLmMpCi0JICogSUZUX1BQUAkobmV0L2lmX3BwcC5jLCBuZXQvaWZfc3BwcHN1YnIuYykKLQkgKiBJRlRfU0xJUAkobmV0L2lmX3NsLmMsIG5ldC9pZl9zdHJpcC5jKQotCSAqIElGVF9TVEYJKG5ldC9pZl9zdGYuYykKLQkgKiBJRlRfTDJWTEFOCShuZXQvaWZfdmxhbi5jKQotCSAqIElGVF9QUk9QVklSVFVBTCAobmV0L2lmX2JyaWRnZS5oPgotCSAqLwotCS8qCi0JICogVGhlIGZvbGxvd2luZyB1c2UgSVB2NCBhZGRyZXNzZXMgYXMgbGluay1sYXllciBhZGRyZXNzZXM6Ci0JICogSUZUX09USEVSCShuZXQvaWZfZ3JlLmMpCi0JICovCi0JY2FzZSBJRlRfQVJDTkVUOiAvKiBkZWZhdWx0IGJlbG93IGlzIGJlbGlldmVkIGNvcnJlY3QgZm9yIGFsbCB0aGVzZS4gKi8KLQljYXNlIElGVF9FVEhFUjoKLQljYXNlIElGVF9GRERJOgotCWNhc2UgSUZUX0hJUFBJOgotCWNhc2UgSUZUX0lTTzg4MDI1OgotCWRlZmF1bHQ6Ci0JCXJldHVybiBoZXhuYW1lKChjb25zdCB1X2ludDhfdCAqKUNMTEFERFIoc2RsKSwKLQkJICAgIChzaXplX3Qpc2RsLT5zZGxfYWxlbiwgaG9zdCwgaG9zdGxlbik7Ci0JfQotfQotCi1zdGF0aWMgaW50Ci1oZXhuYW1lKGNwLCBsZW4sIGhvc3QsIGhvc3RsZW4pCi0JY29uc3QgdV9pbnQ4X3QgKmNwOwotCWNoYXIgKmhvc3Q7Ci0Jc2l6ZV90IGxlbjsKLQlzb2NrbGVuX3QgaG9zdGxlbjsKLXsKLQlpbnQgbjsKLQlzaXplX3QgaTsKLQljaGFyICpvdXRwID0gaG9zdDsKLQotCSpvdXRwID0gJ1wwJzsKLQlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKLQkJbiA9IHNucHJpbnRmKG91dHAsIGhvc3RsZW4sICIlcyUwMngiLAotCQkgICAgaSA/ICI6IiA6ICIiLCBjcFtpXSk7Ci0JCWlmIChuIDwgMCB8fCAoc29ja2xlbl90KSBuID49IGhvc3RsZW4pIHsKLQkJCSpob3N0ID0gJ1wwJzsKLQkJCXJldHVybiBFQUlfTUVNT1JZOwotCQl9Ci0JCW91dHAgKz0gbjsKLQkJaG9zdGxlbiAtPSBuOwotCX0KLQlyZXR1cm4gMDsKLX0KZGlmZiAtLWdpdCBhL2xpYmMvbmV0YnNkL25ldC9nZXRzZXJ2YnluYW1lX3IuYyBiL2xpYmMvbmV0YnNkL25ldC9nZXRzZXJ2YnluYW1lX3IuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmI2ZGM1Mi4uMDAwMDAwMAotLS0gYS9saWJjL25ldGJzZC9uZXQvZ2V0c2VydmJ5bmFtZV9yLmMKKysrIC9kZXYvbnVsbApAQCAtMSw3NiArMCwwIEBACi0vKgkkTmV0QlNEOiBnZXRzZXJ2YnluYW1lX3IuYyx2IDEuMyAyMDA1LzA0LzE4IDE5OjM5OjQ1IGtsZWluayBFeHAgJAkqLwotCi0vKgotICogQ29weXJpZ2h0IChjKSAxOTgzLCAxOTkzCi0gKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0gKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKLSAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2lmIGRlZmluZWQoTElCQ19TQ0NTKSAmJiAhZGVmaW5lZChsaW50KQotI2lmIDAKLXN0YXRpYyBjaGFyIHNjY3NpZFtdID0gIkAoIylnZXRzZXJ2YnluYW1lLmMJOC4xIChCZXJrZWxleSkgNi80LzkzIjsKLSNlbHNlCi1fX1JDU0lEKCIkTmV0QlNEOiBnZXRzZXJ2YnluYW1lX3IuYyx2IDEuMyAyMDA1LzA0LzE4IDE5OjM5OjQ1IGtsZWluayBFeHAgJCIpOwotI2VuZGlmCi0jZW5kaWYgLyogTElCQ19TQ0NTIGFuZCBub3QgbGludCAqLwotCi0jaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0jaW5jbHVkZSA8bmV0ZGIuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotI2luY2x1ZGUgInNlcnZlbnQuaCIKLQotc3RydWN0IHNlcnZlbnQgKgotZ2V0c2VydmJ5bmFtZV9yKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnByb3RvLCBzdHJ1Y3Qgc2VydmVudCAqc3AsCi0gICAgc3RydWN0IHNlcnZlbnRfZGF0YSAqc2QpCi17Ci0Jc3RydWN0IHNlcnZlbnQgKnM7Ci0JY2hhciAqKmNwOwotCi0JYXNzZXJ0KG5hbWUgIT0gTlVMTCk7Ci0JLyogcHJvdG8gbWF5IGJlIE5VTEwgKi8KLQotCXNldHNlcnZlbnRfcihzZC0+c3RheW9wZW4sIHNkKTsKLQl3aGlsZSAoKHMgPSBnZXRzZXJ2ZW50X3Ioc3AsIHNkKSkgIT0gTlVMTCkgewotCQlpZiAoc3RyY21wKG5hbWUsIHMtPnNfbmFtZSkgPT0gMCkKLQkJCWdvdG8gZ290bmFtZTsKLQkJZm9yIChjcCA9IHMtPnNfYWxpYXNlczsgKmNwOyBjcCsrKQotCQkJaWYgKHN0cmNtcChuYW1lLCAqY3ApID09IDApCi0JCQkJZ290byBnb3RuYW1lOwotCQljb250aW51ZTsKLWdvdG5hbWU6Ci0JCWlmIChwcm90byA9PSBOVUxMIHx8IHN0cmNtcChzLT5zX3Byb3RvLCBwcm90bykgPT0gMCkKLQkJCWJyZWFrOwotCX0KLQlpZiAoIXNkLT5zdGF5b3BlbikKLQkJaWYgKHNkLT5mcCAhPSBOVUxMKSB7Ci0JCQkodm9pZClmY2xvc2Uoc2QtPmZwKTsKLQkJCXNkLT5mcCA9IE5VTEw7Ci0JCX0KLQlyZXR1cm4gczsKLX0KZGlmZiAtLWdpdCBhL2xpYmMvbmV0YnNkL25ldC9nZXRzZXJ2Ynlwb3J0X3IuYyBiL2xpYmMvbmV0YnNkL25ldC9nZXRzZXJ2Ynlwb3J0X3IuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmZlNDI5My4uMDAwMDAwMAotLS0gYS9saWJjL25ldGJzZC9uZXQvZ2V0c2VydmJ5cG9ydF9yLmMKKysrIC9kZXYvbnVsbApAQCAtMSw2NSArMCwwIEBACi0vKgkkTmV0QlNEOiBnZXRzZXJ2Ynlwb3J0X3IuYyx2IDEuMyAyMDA1LzA0LzE4IDE5OjM5OjQ1IGtsZWluayBFeHAgJAkqLwotCi0vKgotICogQ29weXJpZ2h0IChjKSAxOTgzLCAxOTkzCi0gKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0gKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKLSAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgotI2lmIGRlZmluZWQoTElCQ19TQ0NTKSAmJiAhZGVmaW5lZChsaW50KQotI2lmIDAKLXN0YXRpYyBjaGFyIHNjY3NpZFtdID0gIkAoIylnZXRzZXJ2Ynlwb3J0LmMJOC4xIChCZXJrZWxleSkgNi80LzkzIjsKLSNlbHNlCi1fX1JDU0lEKCIkTmV0QlNEOiBnZXRzZXJ2Ynlwb3J0X3IuYyx2IDEuMyAyMDA1LzA0LzE4IDE5OjM5OjQ1IGtsZWluayBFeHAgJCIpOwotI2VuZGlmCi0jZW5kaWYgLyogTElCQ19TQ0NTIGFuZCBub3QgbGludCAqLwotCi0jaW5jbHVkZSA8bmV0ZGIuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotI2luY2x1ZGUgInNlcnZlbnQuaCIKLQotc3RydWN0IHNlcnZlbnQgKgotZ2V0c2VydmJ5cG9ydF9yKGludCBwb3J0LCBjb25zdCBjaGFyICpwcm90bywgc3RydWN0IHNlcnZlbnQgKnNwLAotICAgIHN0cnVjdCBzZXJ2ZW50X2RhdGEgKnNkKQotewotCXN0cnVjdCBzZXJ2ZW50ICpzOwotCi0Jc2V0c2VydmVudF9yKHNkLT5zdGF5b3Blbiwgc2QpOwotCXdoaWxlICgocyA9IGdldHNlcnZlbnRfcihzcCwgc2QpKSAhPSBOVUxMKSB7Ci0JCWlmIChzLT5zX3BvcnQgIT0gcG9ydCkKLQkJCWNvbnRpbnVlOwotCQlpZiAocHJvdG8gPT0gTlVMTCB8fCBzdHJjbXAocy0+c19wcm90bywgcHJvdG8pID09IDApCi0JCQlicmVhazsKLQl9Ci0JaWYgKCFzZC0+c3RheW9wZW4pCi0JCWlmIChzZC0+ZnAgIT0gTlVMTCkgewotCQkJKHZvaWQpZmNsb3NlKHNkLT5mcCk7Ci0JCQlzZC0+ZnAgPSBOVUxMOwotCQl9Ci0JcmV0dXJuIHM7Ci19CmRpZmYgLS1naXQgYS9saWJjL25ldGJzZC9uZXQvZ2V0c2VydmVudF9yLmMgYi9saWJjL25ldGJzZC9uZXQvZ2V0c2VydmVudF9yLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE2Njg3NTkuLjAwMDAwMDAKLS0tIGEvbGliYy9uZXRic2QvbmV0L2dldHNlcnZlbnRfci5jCisrKyAvZGV2L251bGwKQEAgLTEsMTUxICswLDAgQEAKLS8qCSROZXRCU0Q6IGdldHNlcnZlbnRfci5jLHYgMS41IDIwMDUvMDQvMTggMTk6Mzk6NDUga2xlaW5rIEV4cCAkCSovCi0KLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDE5ODMsIDE5OTMKLSAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSA8c3lzL2NkZWZzLmg+Ci0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0KLSNpZiBkZWZpbmVkKExJQkNfU0NDUykgJiYgIWRlZmluZWQobGludCkKLSNpZiAwCi1zdGF0aWMgY2hhciBzY2NzaWRbXSA9ICJAKCMpZ2V0c2VydmVudC5jCTguMSAoQmVya2VsZXkpIDYvNC85MyI7Ci0jZWxzZQotX19SQ1NJRCgiJE5ldEJTRDogZ2V0c2VydmVudF9yLmMsdiAxLjUgMjAwNS8wNC8xOCAxOTozOTo0NSBrbGVpbmsgRXhwICQiKTsKLSNlbmRpZgotI2VuZGlmIC8qIExJQkNfU0NDUyBhbmQgbm90IGxpbnQgKi8KLQotI2luY2x1ZGUgPG5ldGRiLmg+Ci0jaW5jbHVkZSA8ZXJybm8uaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KLQotI2luY2x1ZGUgInNlcnZlbnQuaCIKLQotdm9pZAotc2V0c2VydmVudF9yKGludCBmLCBzdHJ1Y3Qgc2VydmVudF9kYXRhICpzZCkKLXsKLQlpZiAoc2QtPmZwID09IE5VTEwpCi0JCXNkLT5mcCA9IGZvcGVuKF9QQVRIX1NFUlZJQ0VTLCAiciIpOwotCWVsc2UKLQkJcmV3aW5kKHNkLT5mcCk7Ci0Jc2QtPnN0YXlvcGVuIHw9IGY7Ci19Ci0KLXZvaWQKLWVuZHNlcnZlbnRfcihzdHJ1Y3Qgc2VydmVudF9kYXRhICpzZCkKLXsKLQlpZiAoc2QtPmZwKSB7Ci0JCSh2b2lkKWZjbG9zZShzZC0+ZnApOwotCQlzZC0+ZnAgPSBOVUxMOwotCX0KLQlpZiAoc2QtPmFsaWFzZXMpIHsKLQkJZnJlZShzZC0+YWxpYXNlcyk7Ci0JCXNkLT5hbGlhc2VzID0gTlVMTDsKLQkJc2QtPm1heGFsaWFzZXMgPSAwOwotCX0KLQlpZiAoc2QtPmxpbmUpIHsKLQkJZnJlZShzZC0+bGluZSk7Ci0JCXNkLT5saW5lID0gTlVMTDsKLQl9Ci0Jc2QtPnN0YXlvcGVuID0gMDsKLX0KLQotc3RydWN0IHNlcnZlbnQgKgotZ2V0c2VydmVudF9yKHN0cnVjdCBzZXJ2ZW50ICpzcCwgc3RydWN0IHNlcnZlbnRfZGF0YSAqc2QpCi17Ci0JY2hhciAqcCwgKmNwLCAqKnE7Ci0Jc2l6ZV90IGkgPSAwOwotCWludCBvZXJybm87Ci0KLQlpZiAoc2QtPmZwID09IE5VTEwgJiYgKHNkLT5mcCA9IGZvcGVuKF9QQVRIX1NFUlZJQ0VTLCAiciIpKSA9PSBOVUxMKQotCQlyZXR1cm4gTlVMTDsKLQotCWZvciAoOzspIHsKLQkJaWYgKHNkLT5saW5lKQotCQkJZnJlZShzZC0+bGluZSk7Ci0vLwkJc2QtPmxpbmUgPSBmcGFyc2VsbihzZC0+ZnAsIE5VTEwsIE5VTEwsIE5VTEwsIEZQQVJTRUxOX1VORVNDQUxMKTsKLQkJZnByaW50ZihzdGRlcnIsICIqKiogRklYIE1FISBnZXRzZXJ2ZW50X3IoKSBpcyBnb2luZyB0byBmYWlsISEhXG4iKTsKLQkJc2QtPmxpbmUgPSBOVUxMOwotCQlpZiAoc2QtPmxpbmUgPT0gTlVMTCkKLQkJCXJldHVybiBOVUxMOwotCQlzcC0+c19uYW1lID0gcCA9IHNkLT5saW5lOwotCQlwID0gc3RycGJyayhwLCAiIFx0Iik7Ci0JCWlmIChwID09IE5VTEwpCi0JCQljb250aW51ZTsKLQkJKnArKyA9ICdcMCc7Ci0JCXdoaWxlICgqcCA9PSAnICcgfHwgKnAgPT0gJ1x0JykKLQkJCXArKzsKLQkJY3AgPSBzdHJwYnJrKHAsICIsLyIpOwotCQlpZiAoY3AgPT0gTlVMTCkKLQkJCWNvbnRpbnVlOwotCQkqY3ArKyA9ICdcMCc7Ci0JCXNwLT5zX3BvcnQgPSBodG9ucygodV9zaG9ydClhdG9pKHApKTsKLQkJc3AtPnNfcHJvdG8gPSBjcDsKLQkJaWYgKHNkLT5hbGlhc2VzID09IE5VTEwpIHsKLQkJCXNkLT5tYXhhbGlhc2VzID0gMTA7Ci0JCQlzZC0+YWxpYXNlcyA9IG1hbGxvYyhzZC0+bWF4YWxpYXNlcyAqIHNpemVvZihjaGFyICopKTsKLQkJCWlmIChzZC0+YWxpYXNlcyA9PSBOVUxMKSB7Ci0JCQkJb2Vycm5vID0gZXJybm87Ci0JCQkJZW5kc2VydmVudF9yKHNkKTsKLQkJCQllcnJubyA9IG9lcnJubzsKLQkJCQlyZXR1cm4gTlVMTDsKLQkJCX0KLQkJfQotCQlxID0gc3AtPnNfYWxpYXNlcyA9IHNkLT5hbGlhc2VzOwotCQljcCA9IHN0cnBicmsoY3AsICIgXHQiKTsKLQkJaWYgKGNwICE9IE5VTEwpCi0JCQkqY3ArKyA9ICdcMCc7Ci0JCXdoaWxlIChjcCAmJiAqY3ApIHsKLQkJCWlmICgqY3AgPT0gJyAnIHx8ICpjcCA9PSAnXHQnKSB7Ci0JCQkJY3ArKzsKLQkJCQljb250aW51ZTsKLQkJCX0KLQkJCWlmIChpID09IHNkLT5tYXhhbGlhc2VzIC0gMikgewotCQkJCXNkLT5tYXhhbGlhc2VzICo9IDI7Ci0JCQkJcSA9IHJlYWxsb2MocSwKLQkJCQkgICAgc2QtPm1heGFsaWFzZXMgKiBzaXplb2YoY2hhciAqKSk7Ci0JCQkJaWYgKHEgPT0gTlVMTCkgewotCQkJCQlvZXJybm8gPSBlcnJubzsKLQkJCQkJZW5kc2VydmVudF9yKHNkKTsKLQkJCQkJZXJybm8gPSBvZXJybm87Ci0JCQkJCXJldHVybiBOVUxMOwotCQkJCX0KLQkJCQlzcC0+c19hbGlhc2VzID0gc2QtPmFsaWFzZXMgPSBxOwotCQkJfQotCQkJcVtpKytdID0gY3A7Ci0JCQljcCA9IHN0cnBicmsoY3AsICIgXHQiKTsKLQkJCWlmIChjcCAhPSBOVUxMKQotCQkJCSpjcCsrID0gJ1wwJzsKLQkJfQotCQlxW2ldID0gTlVMTDsKLQkJcmV0dXJuIHNwOwotCX0KLX0KZGlmZiAtLWdpdCBhL2xpYmMvbmV0YnNkL25ldC9yZWVudHJhbnQuaCBiL2xpYmMvbmV0YnNkL25ldC9yZWVudHJhbnQuaAppbmRleCAxNTUwN2ViLi42MGJmZjA4IDEwMDY0NAotLS0gYS9saWJjL25ldGJzZC9uZXQvcmVlbnRyYW50LmgKKysrIGIvbGliYy9uZXRic2QvbmV0L3JlZW50cmFudC5oCkBAIC0xMDIsNiArMTAyLDcgQEAKIAogI2luY2x1ZGUgPHB0aHJlYWQuaD4KICNpbmNsdWRlIDxzaWduYWwuaD4KKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KIAogI2RlZmluZQltdXRleF90CQkJcHRocmVhZF9tdXRleF90CiAjZGVmaW5lCU1VVEVYX0lOSVRJQUxJWkVSCVBUSFJFQURfTVVURVhfSU5JVElBTElaRVIKZGlmZiAtLWdpdCBhL2xpYmMvbmV0YnNkL3Jlc29sdi9yZXNfY2FjaGUuYyBiL2xpYmMvbmV0YnNkL3Jlc29sdi9yZXNfY2FjaGUuYwppbmRleCAyODRjYTJmLi44MjliZjEwIDEwMDY0NAotLS0gYS9saWJjL25ldGJzZC9yZXNvbHYvcmVzX2NhY2hlLmMKKysrIGIvbGliYy9uZXRic2QvcmVzb2x2L3Jlc19jYWNoZS5jCkBAIC00Miw2ICs0Miw4IEBACiAKICNpbmNsdWRlIDxhcnBhL2luZXQuaD4KICNpbmNsdWRlICJyZXNvbHZfcHJpdmF0ZS5oIgorI2luY2x1ZGUgInJlc29sdl9pZmFjZS5oIgorI2luY2x1ZGUgInJlc19wcml2YXRlLmgiCiAKIC8qIFRoaXMgY29kZSBpbXBsZW1lbnRzIGEgc21hbGwgYW5kICpzaW1wbGUqIEROUyByZXNvbHZlciBjYWNoZS4KICAqCkBAIC0xMzcsOSArMTM5LDE5IEBACiAgKgogICogVGhlIHN5c3RlbSBwcm9wZXJ0eSByby5uZXQuZG5zX2NhY2hlX3NpemUgY2FuIGJlIHVzZWQgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQKICAqIHZhbHVlIHdpdGggYSBjdXN0b20gdmFsdWUKKyAqCisgKgorICogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAqIE5PVEUgLSB0aGlzIGhhcyBjaGFuZ2VkLgorICogKiAxKSB3ZSd2ZSBhZGRlZCBJUHY2IHN1cHBvcnQgc28gZWFjaCBkbnMgcXVlcnkgcmVzdWx0cyBpbiAyIHJlc3BvbnNlcworICogKiAyKSB3ZSd2ZSBtYWRlIHRoaXMgYSBzeXN0ZW0td2lkZSBjYWNoZSwgc28gdGhlIGNvc3QgaXMgbGVzcyAoaXQncyBub3QKKyAqICogICAgZHVwbGljYXRlZCBpbiBlYWNoIHByb2Nlc3MpIGFuZCB0aGUgbmVlZCBpcyBncmVhdGVyIChtb3JlIHByb2Nlc3NlcworICogKiAgICBtYWtpbmcgZGlmZmVyZW50IHJlcXVlc3RzKS4KKyAqICogVXBwaW5nIGJ5IDJ4IGZvciBJUHY2CisgKiAqIFVwcGluZyBieSBhbm90aGVyIDV4IGZvciB0aGUgY2VudHJhbGl6ZWQgbmF0dXJlCisgKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICovCi0jZGVmaW5lICBDT05GSUdfTUFYX0VOVFJJRVMgICAgNjQKLQorI2RlZmluZSAgQ09ORklHX01BWF9FTlRSSUVTICAgIDY0ICogMiAqIDUKIC8qIG5hbWUgb2YgdGhlIHN5c3RlbSBwcm9wZXJ0eSB0aGF0IGNhbiBiZSB1c2VkIHRvIHNldCB0aGUgY2FjaGUgc2l6ZSAqLwogI2RlZmluZSAgRE5TX0NBQ0hFX1NJWkVfUFJPUF9OQU1FICAgInJvLm5ldC5kbnNfY2FjaGVfc2l6ZSIKIApAQCAtMTU5LDkgKzE3MSw4IEBACiAKICN1bmRlZiBYTE9HCiAjaWYgREVCVUcKLSMgIGluY2x1ZGUgPGxvZ2QuaD4KLSMgIGRlZmluZSAgWExPRyguLi4pICAgXAotICAgIF9fbGliY19hbmRyb2lkX2xvZ19wcmludChBTkRST0lEX0xPR19ERUJVRywibGliYyIsX19WQV9BUkdTX18pCisjICBpbmNsdWRlICJsaWJjX2xvZ2dpbmcuaCIKKyMgIGRlZmluZSBYTE9HKC4uLikgIF9fbGliY19mb3JtYXRfbG9nKEFORFJPSURfTE9HX0RFQlVHLCJsaWJjIixfX1ZBX0FSR1NfXykKIAogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8c3RkYXJnLmg+CkBAIC01NjEsOCArNTcyLDYgQEAKIHN0YXRpYyBpbnQKIF9kbnNQYWNrZXRfY2hlY2tRUiggRG5zUGFja2V0KiAgcGFja2V0ICkKIHsKLSAgICBpbnQgIGxlbjsKLQogICAgIGlmICghX2Ruc1BhY2tldF9jaGVja1FOYW1lKHBhY2tldCkpCiAgICAgICAgIHJldHVybiAwOwogCkBAIC02OTcsOSArNzA2LDkgQEAKIF9kbnNQYWNrZXRfYnByaW50UVIoRG5zUGFja2V0KiAgcGFja2V0LCBjaGFyKiAgcCwgY2hhciogIGVuZCkKIHsKICNkZWZpbmUgIFFRKHgpICAgeyBETlNfVFlQRV8jI3gsICN4IH0KLSAgICBzdGF0aWMgY29uc3Qgc3RydWN0IHsgCisgICAgc3RhdGljIGNvbnN0IHN0cnVjdCB7CiAgICAgICAgIGNvbnN0IGNoYXIqICB0eXBlQnl0ZXM7Ci0gICAgICAgIGNvbnN0IGNoYXIqICB0eXBlU3RyaW5nOyAKKyAgICAgICAgY29uc3QgY2hhciogIHR5cGVTdHJpbmc7CiAgICAgfSBxVHlwZXNbXSA9CiAgICAgewogICAgICAgICBRUShBKSwgUVEoUFRSKSwgUVEoTVgpLCBRUShBQUFBKSwgUVEoQUxMKSwKQEAgLTgyMSw4ICs4MzAsNiBAQAogc3RhdGljIHVuc2lnbmVkCiBfZG5zUGFja2V0X2hhc2hRUiggRG5zUGFja2V0KiAgcGFja2V0LCB1bnNpZ25lZCAgaGFzaCApCiB7Ci0gICAgaW50ICAgbGVuOwotCiAgICAgaGFzaCA9IF9kbnNQYWNrZXRfaGFzaFFOYW1lKHBhY2tldCwgaGFzaCk7CiAgICAgaGFzaCA9IF9kbnNQYWNrZXRfaGFzaEJ5dGVzKHBhY2tldCwgNCwgaGFzaCk7IC8qIFRZUEUgYW5kIENMQVNTICovCiAgICAgcmV0dXJuIGhhc2g7CkBAIC0xMDA5LDggKzEwMTYsNTggQEAKIH0gRW50cnk7CiAKIC8qKgotICogUGFyc2UgdGhlIGFuc3dlciByZWNvcmRzIGFuZCBmaW5kIHRoZSBzbWFsbGVzdAotICogVFRMIGFtb25nIHRoZSBhbnN3ZXIgcmVjb3Jkcy4KKyAqIEZpbmQgdGhlIFRUTCBmb3IgYSBuZWdhdGl2ZSBETlMgcmVzdWx0LiAgVGhpcyBpcyBkZWZpbmVkIGFzIHRoZSBtaW5pbXVtCisgKiBvZiB0aGUgU09BIHJlY29yZHMgVFRMIGFuZCB0aGUgTUlOSU1VTS1UVEwgZmllbGQgKFJGQy0yMzA4KS4KKyAqCisgKiBSZXR1cm4gMCBpZiBub3QgZm91bmQuCisgKi8KK3N0YXRpYyB1X2xvbmcKK2Fuc3dlcl9nZXROZWdhdGl2ZVRUTChuc19tc2cgaGFuZGxlKSB7CisgICAgaW50IG4sIG5zY291bnQ7CisgICAgdV9sb25nIHJlc3VsdCA9IDA7CisgICAgbnNfcnIgcnI7CisKKyAgICBuc2NvdW50ID0gbnNfbXNnX2NvdW50KGhhbmRsZSwgbnNfc19ucyk7CisgICAgZm9yIChuID0gMDsgbiA8IG5zY291bnQ7IG4rKykgeworICAgICAgICBpZiAoKG5zX3BhcnNlcnIoJmhhbmRsZSwgbnNfc19ucywgbiwgJnJyKSA9PSAwKSAmJiAobnNfcnJfdHlwZShycikgPT0gbnNfdF9zb2EpKSB7CisgICAgICAgICAgICBjb25zdCB1X2NoYXIgKnJkYXRhID0gbnNfcnJfcmRhdGEocnIpOyAvLyBmaW5kIHRoZSBkYXRhCisgICAgICAgICAgICBjb25zdCB1X2NoYXIgKmVkYXRhID0gcmRhdGEgKyBuc19ycl9yZGxlbihycik7IC8vIGFkZCB0aGUgbGVuIHRvIGZpbmQgdGhlIGVuZAorICAgICAgICAgICAgaW50IGxlbjsKKyAgICAgICAgICAgIHVfbG9uZyB0dGwsIHJlY19yZXN1bHQgPSBuc19ycl90dGwocnIpOworCisgICAgICAgICAgICAvLyBmaW5kIHRoZSBNSU5JTVVNLVRUTCBmaWVsZCBmcm9tIHRoZSBibG9iIG9mIGJpbmFyeSBkYXRhIGZvciB0aGlzIHJlY29yZAorICAgICAgICAgICAgLy8gc2tpcCB0aGUgc2VydmVyIG5hbWUKKyAgICAgICAgICAgIGxlbiA9IGRuX3NraXBuYW1lKHJkYXRhLCBlZGF0YSk7CisgICAgICAgICAgICBpZiAobGVuID09IC0xKSBjb250aW51ZTsgLy8gZXJyb3Igc2tpcHBpbmcKKyAgICAgICAgICAgIHJkYXRhICs9IGxlbjsKKworICAgICAgICAgICAgLy8gc2tpcCB0aGUgYWRtaW4gbmFtZQorICAgICAgICAgICAgbGVuID0gZG5fc2tpcG5hbWUocmRhdGEsIGVkYXRhKTsKKyAgICAgICAgICAgIGlmIChsZW4gPT0gLTEpIGNvbnRpbnVlOyAvLyBlcnJvciBza2lwcGluZworICAgICAgICAgICAgcmRhdGEgKz0gbGVuOworCisgICAgICAgICAgICBpZiAoZWRhdGEgLSByZGF0YSAhPSA1Kk5TX0lOVDMyU1opIGNvbnRpbnVlOworICAgICAgICAgICAgLy8gc2tpcDogc2VyaWFsIG51bWJlciArIHJlZnJlc2ggaW50ZXJ2YWwgKyByZXRyeSBpbnRlcnZhbCArIGV4cGlyeQorICAgICAgICAgICAgcmRhdGEgKz0gTlNfSU5UMzJTWiAqIDQ7CisgICAgICAgICAgICAvLyBmaW5hbGx5IHJlYWQgdGhlIE1JTklNVU0gVFRMCisgICAgICAgICAgICB0dGwgPSBuc19nZXQzMihyZGF0YSk7CisgICAgICAgICAgICBpZiAodHRsIDwgcmVjX3Jlc3VsdCkgeworICAgICAgICAgICAgICAgIHJlY19yZXN1bHQgPSB0dGw7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBOb3cgdGhhdCB0aGUgcmVjb3JkIGlzIHJlYWQgc3VjY2Vzc2Z1bGx5LCBhcHBseSB0aGUgbmV3IG1pbiBUVEwKKyAgICAgICAgICAgIGlmIChuID09IDAgfHwgcmVjX3Jlc3VsdCA8IHJlc3VsdCkgeworICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJlY19yZXN1bHQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworLyoqCisgKiBQYXJzZSB0aGUgYW5zd2VyIHJlY29yZHMgYW5kIGZpbmQgdGhlIGFwcHJvcHJpYXRlCisgKiBzbWFsbGVzdCBUVEwgYW1vbmcgdGhlIHJlY29yZHMuICBUaGlzIG1pZ2h0IGJlIGZyb20KKyAqIHRoZSBhbnN3ZXIgcmVjb3JkcyBpZiBmb3VuZCBvciBmcm9tIHRoZSBTT0EgcmVjb3JkCisgKiBpZiBpdCdzIGEgbmVnYXRpdmUgcmVzdWx0LgogICoKICAqIFRoZSByZXR1cm5lZCBUVEwgaXMgdGhlIG51bWJlciBvZiBzZWNvbmRzIHRvCiAgKiBrZWVwIHRoZSBhbnN3ZXIgaW4gdGhlIGNhY2hlLgpAQCAtMTAzMCwxNCArMTA4NywyMCBAQAogICAgIGlmIChuc19pbml0cGFyc2UoYW5zd2VyLCBhbnN3ZXJsZW4sICZoYW5kbGUpID49IDApIHsKICAgICAgICAgLy8gZ2V0IG51bWJlciBvZiBhbnN3ZXIgcmVjb3JkcwogICAgICAgICBhbmNvdW50ID0gbnNfbXNnX2NvdW50KGhhbmRsZSwgbnNfc19hbik7Ci0gICAgICAgIGZvciAobiA9IDA7IG4gPCBhbmNvdW50OyBuKyspIHsKLSAgICAgICAgICAgIGlmIChuc19wYXJzZXJyKCZoYW5kbGUsIG5zX3NfYW4sIG4sICZycikgPT0gMCkgewotICAgICAgICAgICAgICAgIHR0bCA9IG5zX3JyX3R0bChycik7Ci0gICAgICAgICAgICAgICAgaWYgKG4gPT0gMCB8fCB0dGwgPCByZXN1bHQpIHsKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gdHRsOworCisgICAgICAgIGlmIChhbmNvdW50ID09IDApIHsKKyAgICAgICAgICAgIC8vIGEgcmVzcG9uc2Ugd2l0aCBubyBhbnN3ZXJzPyAgQ2FjaGUgdGhpcyBuZWdhdGl2ZSByZXN1bHQuCisgICAgICAgICAgICByZXN1bHQgPSBhbnN3ZXJfZ2V0TmVnYXRpdmVUVEwoaGFuZGxlKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGZvciAobiA9IDA7IG4gPCBhbmNvdW50OyBuKyspIHsKKyAgICAgICAgICAgICAgICBpZiAobnNfcGFyc2VycigmaGFuZGxlLCBuc19zX2FuLCBuLCAmcnIpID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgdHRsID0gbnNfcnJfdHRsKHJyKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG4gPT0gMCB8fCB0dGwgPCByZXN1bHQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHR0bDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIFhMT0coIm5zX3BhcnNlcnIgZmFpbGVkIGFuY291bnQgbm8gPSAlZC4gZXJybm8gPSAlc1xuIiwgbiwgc3RyZXJyb3IoZXJybm8pKTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIFhMT0coIm5zX3BhcnNlcnIgZmFpbGVkIGFuY291bnQgbm8gPSAlZC4gZXJybm8gPSAlc1xuIiwgbiwgc3RyZXJyb3IoZXJybm8pKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0gZWxzZSB7CkBAIC0xMTU5LDYgKzEyMjIsMTUgQEAKICAqIGlubGluZWQgaW4gdGhlIEVudHJ5IHN0cnVjdHVyZS4KICAqLwogCisvKiBNYXhpbXVtIHRpbWUgZm9yIGEgdGhyZWFkIHRvIHdhaXQgZm9yIGFuIHBlbmRpbmcgcmVxdWVzdCAqLworI2RlZmluZSBQRU5ESU5HX1JFUVVFU1RfVElNRU9VVCAyMDsKKwordHlwZWRlZiBzdHJ1Y3QgcGVuZGluZ19yZXFfaW5mbyB7CisgICAgdW5zaWduZWQgaW50ICAgICAgICAgICAgICAgIGhhc2g7CisgICAgcHRocmVhZF9jb25kX3QgICAgICAgICAgICAgIGNvbmQ7CisgICAgc3RydWN0IHBlbmRpbmdfcmVxX2luZm8qICAgIG5leHQ7Cit9IFBlbmRpbmdSZXFJbmZvOworCiB0eXBlZGVmIHN0cnVjdCByZXNvbHZfY2FjaGUgewogICAgIGludCAgICAgICAgICAgICAgbWF4X2VudHJpZXM7CiAgICAgaW50ICAgICAgICAgICAgICBudW1fZW50cmllczsKQEAgLTExNjcsNiArMTIzOSw3IEBACiAgICAgdW5zaWduZWQgICAgICAgICBnZW5lcmF0aW9uOwogICAgIGludCAgICAgICAgICAgICAgbGFzdF9pZDsKICAgICBFbnRyeSogICAgICAgICAgIGVudHJpZXM7CisgICAgUGVuZGluZ1JlcUluZm8gICBwZW5kaW5nX3JlcXVlc3RzOwogfSBDYWNoZTsKIAogdHlwZWRlZiBzdHJ1Y3QgcmVzb2x2X2NhY2hlX2luZm8gewpAQCAtMTE3NiwxNSArMTI0OSwxMjQgQEAKICAgICBzdHJ1Y3QgcmVzb2x2X2NhY2hlX2luZm8qICAgbmV4dDsKICAgICBjaGFyKiAgICAgICAgICAgICAgICAgICAgICAgbmFtZXNlcnZlcnNbTUFYTlMgKzFdOwogICAgIHN0cnVjdCBhZGRyaW5mbyogICAgICAgICAgICBuc2FkZHJpbmZvW01BWE5TICsgMV07CisgICAgY2hhciAgICAgICAgICAgICAgICAgICAgICAgIGRlZmRuYW1lWzI1Nl07CisgICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgIGRuc3JjaF9vZmZzZXRbTUFYRE5TUkNIKzFdOyAgLy8gb2Zmc2V0cyBpbnRvIGRlZmRuYW1lCiB9IENhY2hlSW5mbzsKIAordHlwZWRlZiBzdHJ1Y3QgcmVzb2x2X3BpZGlmYWNlX2luZm8geworICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGlkOworICAgIGNoYXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZuYW1lW0lGX05BTUVTSVpFICsgMV07CisgICAgc3RydWN0IHJlc29sdl9waWRpZmFjZV9pbmZvKiAgICBuZXh0OworfSBQaWRJZmFjZUluZm87CisKICNkZWZpbmUgIEhUQUJMRV9WQUxJRCh4KSAgKCh4KSAhPSBOVUxMICYmICh4KSAhPSBIVEFCTEVfREVMRVRFRCkKIAogc3RhdGljIHZvaWQKK19jYWNoZV9mbHVzaF9wZW5kaW5nX3JlcXVlc3RzX2xvY2tlZCggc3RydWN0IHJlc29sdl9jYWNoZSogY2FjaGUgKQoreworICAgIHN0cnVjdCBwZW5kaW5nX3JlcV9pbmZvICpyaSwgKnRtcDsKKyAgICBpZiAoY2FjaGUpIHsKKyAgICAgICAgcmkgPSBjYWNoZS0+cGVuZGluZ19yZXF1ZXN0cy5uZXh0OworCisgICAgICAgIHdoaWxlIChyaSkgeworICAgICAgICAgICAgdG1wID0gcmk7CisgICAgICAgICAgICByaSA9IHJpLT5uZXh0OworICAgICAgICAgICAgcHRocmVhZF9jb25kX2Jyb2FkY2FzdCgmdG1wLT5jb25kKTsKKworICAgICAgICAgICAgcHRocmVhZF9jb25kX2Rlc3Ryb3koJnRtcC0+Y29uZCk7CisgICAgICAgICAgICBmcmVlKHRtcCk7CisgICAgICAgIH0KKworICAgICAgICBjYWNoZS0+cGVuZGluZ19yZXF1ZXN0cy5uZXh0ID0gTlVMTDsKKyAgICB9Cit9CisKKy8qIHJldHVybiAwIGlmIG5vIHBlbmRpbmcgcmVxdWVzdCBpcyBmb3VuZCBtYXRjaGluZyB0aGUga2V5CisgKiBpZiBhIG1hdGNoaW5nIHJlcXVlc3QgaXMgZm91bmQgdGhlIGNhbGxpbmcgdGhyZWFkIHdpbGwgd2FpdAorICogYW5kIHJldHVybiAxIHdoZW4gcmVsZWFzZWQgKi8KK3N0YXRpYyBpbnQKK19jYWNoZV9jaGVja19wZW5kaW5nX3JlcXVlc3RfbG9ja2VkKCBzdHJ1Y3QgcmVzb2x2X2NhY2hlKiBjYWNoZSwgRW50cnkqIGtleSApCit7CisgICAgc3RydWN0IHBlbmRpbmdfcmVxX2luZm8gKnJpLCAqcHJldjsKKyAgICBpbnQgZXhpc3QgPSAwOworCisgICAgaWYgKGNhY2hlICYmIGtleSkgeworICAgICAgICByaSA9IGNhY2hlLT5wZW5kaW5nX3JlcXVlc3RzLm5leHQ7CisgICAgICAgIHByZXYgPSAmY2FjaGUtPnBlbmRpbmdfcmVxdWVzdHM7CisgICAgICAgIHdoaWxlIChyaSkgeworICAgICAgICAgICAgaWYgKHJpLT5oYXNoID09IGtleS0+aGFzaCkgeworICAgICAgICAgICAgICAgIGV4aXN0ID0gMTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHByZXYgPSByaTsKKyAgICAgICAgICAgIHJpID0gcmktPm5leHQ7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIWV4aXN0KSB7CisgICAgICAgICAgICByaSA9IGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IHBlbmRpbmdfcmVxX2luZm8pKTsKKyAgICAgICAgICAgIGlmIChyaSkgeworICAgICAgICAgICAgICAgIHJpLT5oYXNoID0ga2V5LT5oYXNoOworICAgICAgICAgICAgICAgIHB0aHJlYWRfY29uZF9pbml0KCZyaS0+Y29uZCwgTlVMTCk7CisgICAgICAgICAgICAgICAgcHJldi0+bmV4dCA9IHJpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc3RydWN0IHRpbWVzcGVjIHRzID0gezAsMH07CisgICAgICAgICAgICBYTE9HKCJXYWl0aW5nIGZvciBwcmV2aW91cyByZXF1ZXN0Iik7CisgICAgICAgICAgICB0cy50dl9zZWMgPSBfdGltZV9ub3coKSArIFBFTkRJTkdfUkVRVUVTVF9USU1FT1VUOworICAgICAgICAgICAgcHRocmVhZF9jb25kX3RpbWVkd2FpdCgmcmktPmNvbmQsICZjYWNoZS0+bG9jaywgJnRzKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBleGlzdDsKK30KKworLyogbm90aWZ5IGFueSB3YWl0aW5nIHRocmVhZCB0aGF0IHdhaXRpbmcgb24gYSByZXF1ZXN0CisgKiBtYXRjaGluZyB0aGUga2V5IGhhcyBiZWVuIGFkZGVkIHRvIHRoZSBjYWNoZSAqLworc3RhdGljIHZvaWQKK19jYWNoZV9ub3RpZnlfd2FpdGluZ190aWRfbG9ja2VkKCBzdHJ1Y3QgcmVzb2x2X2NhY2hlKiBjYWNoZSwgRW50cnkqIGtleSApCit7CisgICAgc3RydWN0IHBlbmRpbmdfcmVxX2luZm8gKnJpLCAqcHJldjsKKworICAgIGlmIChjYWNoZSAmJiBrZXkpIHsKKyAgICAgICAgcmkgPSBjYWNoZS0+cGVuZGluZ19yZXF1ZXN0cy5uZXh0OworICAgICAgICBwcmV2ID0gJmNhY2hlLT5wZW5kaW5nX3JlcXVlc3RzOworICAgICAgICB3aGlsZSAocmkpIHsKKyAgICAgICAgICAgIGlmIChyaS0+aGFzaCA9PSBrZXktPmhhc2gpIHsKKyAgICAgICAgICAgICAgICBwdGhyZWFkX2NvbmRfYnJvYWRjYXN0KCZyaS0+Y29uZCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBwcmV2ID0gcmk7CisgICAgICAgICAgICByaSA9IHJpLT5uZXh0OworICAgICAgICB9CisKKyAgICAgICAgLy8gcmVtb3ZlIGl0ZW0gZnJvbSBsaXN0IGFuZCBkZXN0cm95CisgICAgICAgIGlmIChyaSkgeworICAgICAgICAgICAgcHJldi0+bmV4dCA9IHJpLT5uZXh0OworICAgICAgICAgICAgcHRocmVhZF9jb25kX2Rlc3Ryb3koJnJpLT5jb25kKTsKKyAgICAgICAgICAgIGZyZWUocmkpOworICAgICAgICB9CisgICAgfQorfQorCisvKiBub3RpZnkgdGhlIGNhY2hlIHRoYXQgdGhlIHF1ZXJ5IGZhaWxlZCAqLwordm9pZAorX3Jlc29sdl9jYWNoZV9xdWVyeV9mYWlsZWQoIHN0cnVjdCByZXNvbHZfY2FjaGUqIGNhY2hlLAorICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQqIHF1ZXJ5LAorICAgICAgICAgICAgICAgICAgIGludCAgICAgICAgIHF1ZXJ5bGVuKQoreworICAgIEVudHJ5ICAgIGtleVsxXTsKKworICAgIGlmIChjYWNoZSAmJiBlbnRyeV9pbml0X2tleShrZXksIHF1ZXJ5LCBxdWVyeWxlbikpIHsKKyAgICAgICAgcHRocmVhZF9tdXRleF9sb2NrKCZjYWNoZS0+bG9jayk7CisgICAgICAgIF9jYWNoZV9ub3RpZnlfd2FpdGluZ190aWRfbG9ja2VkKGNhY2hlLCBrZXkpOworICAgICAgICBwdGhyZWFkX211dGV4X3VubG9jaygmY2FjaGUtPmxvY2spOworICAgIH0KK30KKworc3RhdGljIHZvaWQKIF9jYWNoZV9mbHVzaF9sb2NrZWQoIENhY2hlKiAgY2FjaGUgKQogewogICAgIGludCAgICAgbm47Ci0gICAgdGltZV90ICBub3cgPSBfdGltZV9ub3coKTsKIAogICAgIGZvciAobm4gPSAwOyBubiA8IGNhY2hlLT5tYXhfZW50cmllczsgbm4rKykKICAgICB7CkBAIC0xMTk3LDYgKzEzNzksOSBAQAogICAgICAgICB9CiAgICAgfQogCisgICAgLy8gZmx1c2ggcGVuZGluZyByZXF1ZXN0CisgICAgX2NhY2hlX2ZsdXNoX3BlbmRpbmdfcmVxdWVzdHNfbG9ja2VkKGNhY2hlKTsKKwogICAgIGNhY2hlLT5tcnVfbGlzdC5tcnVfbmV4dCA9IGNhY2hlLT5tcnVfbGlzdC5tcnVfcHJldiA9ICZjYWNoZS0+bXJ1X2xpc3Q7CiAgICAgY2FjaGUtPm51bV9lbnRyaWVzICAgICAgID0gMDsKICAgICBjYWNoZS0+bGFzdF9pZCAgICAgICAgICAgPSAwOwpAQCAtMTIxNyw2ICsxNDAyLDE1IEBACiAgICAgaW50IHJlc3VsdCA9IC0xOwogICAgIGNoYXIgY2FjaGVfc2l6ZVtQUk9QX1ZBTFVFX01BWF07CiAKKyAgICBjb25zdCBjaGFyKiBjYWNoZV9tb2RlID0gZ2V0ZW52KCJBTkRST0lEX0ROU19NT0RFIik7CisKKyAgICBpZiAoY2FjaGVfbW9kZSA9PSBOVUxMIHx8IHN0cmNtcChjYWNoZV9tb2RlLCAibG9jYWwiKSAhPSAwKSB7CisgICAgICAgIC8vIERvbid0IHVzZSB0aGUgY2FjaGUgaW4gbG9jYWwgbW9kZS4gIFRoaXMgaXMgdXNlZCBieSB0aGUKKyAgICAgICAgLy8gcHJveHkgaXRzZWxmLgorICAgICAgICBYTE9HKCJzZXR1cCBjYWNoZSBmb3Igbm9uLWNhY2hlIHByb2Nlc3MuIHNpemU9MCwgJXMiLCBjYWNoZV9tb2RlKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCiAgICAgaWYgKF9fc3lzdGVtX3Byb3BlcnR5X2dldChETlNfQ0FDSEVfU0laRV9QUk9QX05BTUUsIGNhY2hlX3NpemUpID4gMCkgewogICAgICAgICByZXN1bHQgPSBhdG9pKGNhY2hlX3NpemUpOwogICAgIH0KQEAgLTEzMDcsNiArMTUwMSw3IEBACiAgICAgICAgIHJlbW92ZSgiL2RhdGEvcmVzbG9nLnR4dCIpOwogICAgIH0KICAgICBlbHNlIHsKKyAgICAgICAgZXJybm8gPSAwOyAvLyBlbHNlIGRlYnVnIGlzIGludHJvZHVjaW5nIGVycm9yIHNpZ25hbHMKICAgICAgICAgWExPRygiX2R1bXBfYW5zd2VyOiBjYW4ndCBvcGVuIGZpbGVcbiIpOwogICAgIH0KIH0KQEAgLTEzNTIsNyArMTU0Nyw3IEBACiAKICAgICAgICAgcG5vZGUgPSAmbm9kZS0+aGxpbms7CiAgICAgfQotICAgIHJldHVybiBwbm9kZTsgCisgICAgcmV0dXJuIHBub2RlOwogfQogCiAvKiBBZGQgYSBuZXcgZW50cnkgdG8gdGhlIGhhc2ggdGFibGUuICdsb29rdXAnIG11c3QgYmUgdGhlCkBAIC0xNDQyLDkgKzE2MzcsNyBAQAogICAgICAgICAgICAgICAgICAgICAgIGludCAgICAgICAgICAgICAgICAgICBhbnN3ZXJzaXplLAogICAgICAgICAgICAgICAgICAgICAgIGludCAgICAgICAgICAgICAgICAgICphbnN3ZXJsZW4gKQogewotICAgIERuc1BhY2tldCAgcGFja1sxXTsKICAgICBFbnRyeSAgICAgIGtleVsxXTsKLSAgICBpbnQgICAgICAgIGluZGV4OwogICAgIEVudHJ5KiogICAgbG9va3VwOwogICAgIEVudHJ5KiAgICAgZTsKICAgICB0aW1lX3QgICAgIG5vdzsKQEAgLTE0NzAsNyArMTY2MywxNyBAQAogCiAgICAgaWYgKGUgPT0gTlVMTCkgewogICAgICAgICBYTE9HKCAiTk9UIElOIENBQ0hFIik7Ci0gICAgICAgIGdvdG8gRXhpdDsKKyAgICAgICAgLy8gY2FsbGluZyB0aHJlYWQgd2lsbCB3YWl0IGlmIGFuIG91dHN0YW5kaW5nIHJlcXVlc3QgaXMgZm91bmQKKyAgICAgICAgLy8gdGhhdCBtYXRjaGluZyB0aGlzIHF1ZXJ5CisgICAgICAgIGlmICghX2NhY2hlX2NoZWNrX3BlbmRpbmdfcmVxdWVzdF9sb2NrZWQoY2FjaGUsIGtleSkpIHsKKyAgICAgICAgICAgIGdvdG8gRXhpdDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGxvb2t1cCA9IF9jYWNoZV9sb29rdXBfcChjYWNoZSwga2V5KTsKKyAgICAgICAgICAgIGUgPSAqbG9va3VwOworICAgICAgICAgICAgaWYgKGUgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIGdvdG8gRXhpdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogICAgIH0KIAogICAgIG5vdyA9IF90aW1lX25vdygpOwpAQCAtMTU3Myw2ICsxNzc2LDcgQEAKICAgICBfY2FjaGVfZHVtcF9tcnUoY2FjaGUpOwogI2VuZGlmCiBFeGl0OgorICAgIF9jYWNoZV9ub3RpZnlfd2FpdGluZ190aWRfbG9ja2VkKGNhY2hlLCBrZXkpOwogICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCAmY2FjaGUtPmxvY2sgKTsKIH0KIApAQCAtMTU4NCwyMCArMTc4OCwyOCBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotc3RhdGljIHB0aHJlYWRfb25jZV90ICAgICAgICBfcmVzX2NhY2hlX29uY2U7CitzdGF0aWMgcHRocmVhZF9vbmNlX3QgICAgICAgIF9yZXNfY2FjaGVfb25jZSA9IFBUSFJFQURfT05DRV9JTklUOwogCiAvLyBIZWFkIG9mIHRoZSBsaXN0IG9mIGNhY2hlcy4gIFByb3RlY3RlZCBieSBfcmVzX2NhY2hlX2xpc3RfbG9jay4KIHN0YXRpYyBzdHJ1Y3QgcmVzb2x2X2NhY2hlX2luZm8gX3Jlc19jYWNoZV9saXN0OwogCisvLyBMaXN0IG9mIHBpZCBpZmFjZSBwYWlycworc3RhdGljIHN0cnVjdCByZXNvbHZfcGlkaWZhY2VfaW5mbyBfcmVzX3BpZGlmYWNlX2xpc3Q7CisKIC8vIG5hbWUgb2YgdGhlIGN1cnJlbnQgZGVmYXVsdCBpbnRlZmFjZQogc3RhdGljIGNoYXIgICAgICAgICAgICBfcmVzX2RlZmF1bHRfaWZuYW1lW0lGX05BTUVTSVpFICsgMV07CiAKIC8vIGxvY2sgcHJvdGVjdGluZyBldmVyeXRoaW5nIGluIHRoZSBfcmVzb2x2ZV9jYWNoZV9pbmZvIHN0cnVjdHMgKG5leHQgcHRyLCBldGMpCiBzdGF0aWMgcHRocmVhZF9tdXRleF90IF9yZXNfY2FjaGVfbGlzdF9sb2NrOwogCisvLyBsb2NrIHByb3RlY3RpbmcgdGhlIF9yZXNfcGlkX2lmYWNlX2xpc3QKK3N0YXRpYyBwdGhyZWFkX211dGV4X3QgX3Jlc19waWRpZmFjZV9saXN0X2xvY2s7CiAKIC8qIGxvb2t1cCB0aGUgZGVmYXVsdCBpbnRlcmZhY2UgbmFtZSAqLwogc3RhdGljIGNoYXIgKl9nZXRfZGVmYXVsdF9pZmFjZV9sb2NrZWQoKTsKKy8qIGZpbmQgdGhlIGZpcnN0IGNhY2hlIHRoYXQgaGFzIGFuIGFzc29jaWF0ZWQgaW50ZXJmYWNlIGFuZCByZXR1cm4gdGhlIG5hbWUgb2YgdGhlIGludGVyZmFjZSAqLworc3RhdGljIGNoYXIqIF9maW5kX2FueV9pZmFjZV9uYW1lX2xvY2tlZCggdm9pZCApOworCiAvKiBpbnNlcnQgcmVzb2x2X2NhY2hlX2luZm8gaW50byB0aGUgbGlzdCBvZiByZXNvbHZfY2FjaGVfaW5mb3MgKi8KIHN0YXRpYyB2b2lkIF9pbnNlcnRfY2FjaGVfaW5mb19sb2NrZWQoc3RydWN0IHJlc29sdl9jYWNoZV9pbmZvKiBjYWNoZV9pbmZvKTsKIC8qIGNyZWF0ZXMgYSByZXNvbHZfY2FjaGVfaW5mbyAqLwpAQCAtMTYwNiw4ICsxODE4LDYgQEAKIHN0YXRpYyBzdHJ1Y3QgcmVzb2x2X2NhY2hlKiBfZmluZF9uYW1lZF9jYWNoZV9sb2NrZWQoY29uc3QgY2hhciogaWZuYW1lKTsKIC8qIGdldHMgYSByZXNvbHZfY2FjaGVfaW5mbyBhc3NvY2lhdGVkIHdpdGggYW4gaW50ZXJmYWNlIG5hbWUsIG9yIE5VTEwgaWYgbm90IGZvdW5kICovCiBzdGF0aWMgc3RydWN0IHJlc29sdl9jYWNoZV9pbmZvKiBfZmluZF9jYWNoZV9pbmZvX2xvY2tlZChjb25zdCBjaGFyKiBpZm5hbWUpOwotLyogZnJlZSBkbnMgbmFtZSBzZXJ2ZXIgbGlzdCBvZiBhIHJlc29sdl9jYWNoZV9pbmZvIHN0cnVjdHVyZSAqLwotc3RhdGljIHZvaWQgX2ZyZWVfbmFtZXNlcnZlcnMoc3RydWN0IHJlc29sdl9jYWNoZV9pbmZvKiBjYWNoZV9pbmZvKTsKIC8qIGxvb2sgdXAgdGhlIG5hbWVkIGNhY2hlLCBhbmQgY3JlYXRlcyBvbmUgaWYgbmVlZGVkICovCiBzdGF0aWMgc3RydWN0IHJlc29sdl9jYWNoZSogX2dldF9yZXNfY2FjaGVfZm9yX2lmYWNlX2xvY2tlZChjb25zdCBjaGFyKiBpZm5hbWUpOwogLyogZW1wdHkgdGhlIG5hbWVkIGNhY2hlICovCkBAIC0xNjIwLDggKzE4MzAsMTQgQEAKIHN0YXRpYyBzdHJ1Y3QgYWRkcmluZm8qIF9nZXRfbmFtZXNlcnZlcl9hZGRyX2xvY2tlZChjb25zdCBjaGFyKiBpZm5hbWUsIGludCBuKTsKIC8qIGxvb2t1cCB0aGUgaW50ZWZhY2UncyBhZGRyZXNzICovCiBzdGF0aWMgc3RydWN0IGluX2FkZHIqIF9nZXRfYWRkcl9sb2NrZWQoY29uc3QgY2hhciAqIGlmbmFtZSk7Ci0KLQorLyogcmV0dXJuIDEgaWYgdGhlIHByb3ZpZGVkIGxpc3Qgb2YgbmFtZSBzZXJ2ZXJzIGRpZmZlcnMgZnJvbSB0aGUgbGlzdCBvZiBuYW1lIHNlcnZlcnMKKyAqIGN1cnJlbnRseSBhdHRhY2hlZCB0byB0aGUgcHJvdmlkZWQgY2FjaGVfaW5mbyAqLworc3RhdGljIGludCBfcmVzb2x2X2lzX25hbWVzZXJ2ZXJzX2VxdWFsX2xvY2tlZChzdHJ1Y3QgcmVzb2x2X2NhY2hlX2luZm8qIGNhY2hlX2luZm8sCisgICAgICAgIGNoYXIqKiBzZXJ2ZXJzLCBpbnQgbnVtc2VydmVycyk7CisvKiByZW1vdmUgYSByZXNvbHZfcGlkaWZhY2VfaW5mbyBzdHJ1Y3R1cmUgZnJvbSBfcmVzX3BpZGlmYWNlX2xpc3QgKi8KK3N0YXRpYyB2b2lkIF9yZW1vdmVfcGlkaWZhY2VfaW5mb19sb2NrZWQoaW50IHBpZCk7CisvKiBnZXQgYSByZXNvbHZfcGlkaWZhY2VfaW5mbyBzdHJ1Y3R1cmUgZnJvbSBfcmVzX3BpZGlmYWNlX2xpc3Qgd2l0aCBhIGNlcnRhaW4gcGlkICovCitzdGF0aWMgc3RydWN0IHJlc29sdl9waWRpZmFjZV9pbmZvKiBfZ2V0X3BpZF9pZmFjZV9pbmZvX2xvY2tlZChpbnQgcGlkKTsKIAogc3RhdGljIHZvaWQKIF9yZXNfY2FjaGVfaW5pdCh2b2lkKQpAQCAtMTYzNSwzNyArMTg1MSwzNiBAQAogCiAgICAgbWVtc2V0KCZfcmVzX2RlZmF1bHRfaWZuYW1lLCAwLCBzaXplb2YoX3Jlc19kZWZhdWx0X2lmbmFtZSkpOwogICAgIG1lbXNldCgmX3Jlc19jYWNoZV9saXN0LCAwLCBzaXplb2YoX3Jlc19jYWNoZV9saXN0KSk7CisgICAgbWVtc2V0KCZfcmVzX3BpZGlmYWNlX2xpc3QsIDAsIHNpemVvZihfcmVzX3BpZGlmYWNlX2xpc3QpKTsKICAgICBwdGhyZWFkX211dGV4X2luaXQoJl9yZXNfY2FjaGVfbGlzdF9sb2NrLCBOVUxMKTsKKyAgICBwdGhyZWFkX211dGV4X2luaXQoJl9yZXNfcGlkaWZhY2VfbGlzdF9sb2NrLCBOVUxMKTsKIH0KIAogc3RydWN0IHJlc29sdl9jYWNoZSoKLV9fZ2V0X3Jlc19jYWNoZSh2b2lkKQorX19nZXRfcmVzX2NhY2hlKGNvbnN0IGNoYXIqIGlmbmFtZSkKIHsKICAgICBzdHJ1Y3QgcmVzb2x2X2NhY2hlICpjYWNoZTsKIAogICAgIHB0aHJlYWRfb25jZSgmX3Jlc19jYWNoZV9vbmNlLCBfcmVzX2NhY2hlX2luaXQpOwotCiAgICAgcHRocmVhZF9tdXRleF9sb2NrKCZfcmVzX2NhY2hlX2xpc3RfbG9jayk7CiAKLSAgICBjaGFyKiBpZm5hbWUgPSBfZ2V0X2RlZmF1bHRfaWZhY2VfbG9ja2VkKCk7Ci0KLSAgICAvLyBpZiBkZWZhdWx0IGludGVyZmFjZSBub3Qgc2V0IHRoZW4gdXNlIHRoZSBmaXJzdCBjYWNoZQotICAgIC8vIGFzc29jaWF0ZWQgd2l0aCBhbiBpbnRlcmZhY2UgYXMgdGhlIGRlZmF1bHQgb25lLgotICAgIGlmIChpZm5hbWVbMF0gPT0gJ1wwJykgewotICAgICAgICBzdHJ1Y3QgcmVzb2x2X2NhY2hlX2luZm8qIGNhY2hlX2luZm8gPSBfcmVzX2NhY2hlX2xpc3QubmV4dDsKLSAgICAgICAgd2hpbGUgKGNhY2hlX2luZm8pIHsKLSAgICAgICAgICAgIGlmIChjYWNoZV9pbmZvLT5pZm5hbWVbMF0gIT0gJ1wwJykgewotICAgICAgICAgICAgICAgIGlmbmFtZSA9IGNhY2hlX2luZm8tPmlmbmFtZTsKLSAgICAgICAgICAgICAgICBicmVhazsKKyAgICBjaGFyKiBpZmFjZTsKKyAgICBpZiAoaWZuYW1lID09IE5VTEwgfHwgaWZuYW1lWzBdID09ICdcMCcpIHsKKyAgICAgICAgaWZhY2UgPSBfZ2V0X2RlZmF1bHRfaWZhY2VfbG9ja2VkKCk7CisgICAgICAgIGlmIChpZmFjZVswXSA9PSAnXDAnKSB7CisgICAgICAgICAgICBjaGFyKiB0bXAgPSBfZmluZF9hbnlfaWZhY2VfbmFtZV9sb2NrZWQoKTsKKyAgICAgICAgICAgIGlmICh0bXApIHsKKyAgICAgICAgICAgICAgICBpZmFjZSA9IHRtcDsKICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgY2FjaGVfaW5mbyA9IGNhY2hlX2luZm8tPm5leHQ7CiAgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBpZmFjZSA9IChjaGFyICopIGlmbmFtZTsKICAgICB9Ci0gICAgY2FjaGUgPSBfZ2V0X3Jlc19jYWNoZV9mb3JfaWZhY2VfbG9ja2VkKGlmbmFtZSk7CisKKyAgICBjYWNoZSA9IF9nZXRfcmVzX2NhY2hlX2Zvcl9pZmFjZV9sb2NrZWQoaWZhY2UpOwogCiAgICAgcHRocmVhZF9tdXRleF91bmxvY2soJl9yZXNfY2FjaGVfbGlzdF9sb2NrKTsKLSAgICBYTE9HKCJfZ2V0X3Jlc19jYWNoZS4gZGVmYXVsdF9pZm5hbWUgPSAlc1xuIiwgaWZuYW1lKTsKKyAgICBYTE9HKCJfZ2V0X3Jlc19jYWNoZTogaWZhY2UgPSAlcywgY2FjaGU9JXBcbiIsIGlmYWNlLCBjYWNoZSk7CiAgICAgcmV0dXJuIGNhY2hlOwogfQogCkBAIC0xODIxLDExICsyMDM2LDI5IEBACiBzdGF0aWMgY2hhcioKIF9nZXRfZGVmYXVsdF9pZmFjZV9sb2NrZWQodm9pZCkKIHsKKwogICAgIGNoYXIqIGlmYWNlID0gX3Jlc19kZWZhdWx0X2lmbmFtZTsKIAogICAgIHJldHVybiBpZmFjZTsKIH0KIAorc3RhdGljIGNoYXIqCitfZmluZF9hbnlfaWZhY2VfbmFtZV9sb2NrZWQoIHZvaWQgKSB7CisgICAgY2hhciogaWZuYW1lID0gTlVMTDsKKworICAgIHN0cnVjdCByZXNvbHZfY2FjaGVfaW5mbyogY2FjaGVfaW5mbyA9IF9yZXNfY2FjaGVfbGlzdC5uZXh0OworICAgIHdoaWxlIChjYWNoZV9pbmZvKSB7CisgICAgICAgIGlmIChjYWNoZV9pbmZvLT5pZm5hbWVbMF0gIT0gJ1wwJykgeworICAgICAgICAgICAgaWZuYW1lID0gY2FjaGVfaW5mby0+aWZuYW1lOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYWNoZV9pbmZvID0gY2FjaGVfaW5mby0+bmV4dDsKKyAgICB9CisKKyAgICByZXR1cm4gaWZuYW1lOworfQorCiB2b2lkCiBfcmVzb2x2X3NldF9kZWZhdWx0X2lmYWNlKGNvbnN0IGNoYXIqIGlmbmFtZSkKIHsKQEAgLTE4NDMsMjEgKzIwNzYsMjUgQEAKIH0KIAogdm9pZAotX3Jlc29sdl9zZXRfbmFtZXNlcnZlcnNfZm9yX2lmYWNlKGNvbnN0IGNoYXIqIGlmbmFtZSwgY2hhcioqIHNlcnZlcnMsIGludCBudW1zZXJ2ZXJzKQorX3Jlc29sdl9zZXRfbmFtZXNlcnZlcnNfZm9yX2lmYWNlKGNvbnN0IGNoYXIqIGlmbmFtZSwgY2hhcioqIHNlcnZlcnMsIGludCBudW1zZXJ2ZXJzLAorICAgICAgICBjb25zdCBjaGFyICpkb21haW5zKQogewogICAgIGludCBpLCBydCwgaW5kZXg7CiAgICAgc3RydWN0IGFkZHJpbmZvIGhpbnRzOwogICAgIGNoYXIgc2J1ZltOSV9NQVhTRVJWXTsKKyAgICByZWdpc3RlciBjaGFyICpjcDsKKyAgICBpbnQgKm9mZnNldDsKIAogICAgIHB0aHJlYWRfb25jZSgmX3Jlc19jYWNoZV9vbmNlLCBfcmVzX2NhY2hlX2luaXQpOwotCiAgICAgcHRocmVhZF9tdXRleF9sb2NrKCZfcmVzX2NhY2hlX2xpc3RfbG9jayk7CisKICAgICAvLyBjcmVhdGVzIHRoZSBjYWNoZSBpZiBub3QgY3JlYXRlZAogICAgIF9nZXRfcmVzX2NhY2hlX2Zvcl9pZmFjZV9sb2NrZWQoaWZuYW1lKTsKIAogICAgIHN0cnVjdCByZXNvbHZfY2FjaGVfaW5mbyogY2FjaGVfaW5mbyA9IF9maW5kX2NhY2hlX2luZm9fbG9ja2VkKGlmbmFtZSk7CiAKLSAgICBpZiAoY2FjaGVfaW5mbyAhPSBOVUxMKSB7CisgICAgaWYgKGNhY2hlX2luZm8gIT0gTlVMTCAmJgorICAgICAgICAgICAgIV9yZXNvbHZfaXNfbmFtZXNlcnZlcnNfZXF1YWxfbG9ja2VkKGNhY2hlX2luZm8sIHNlcnZlcnMsIG51bXNlcnZlcnMpKSB7CiAgICAgICAgIC8vIGZyZWUgY3VycmVudCBiZWZvcmUgYWRkaW5nIG5ldwogICAgICAgICBfZnJlZV9uYW1lc2VydmVyc19sb2NrZWQoY2FjaGVfaW5mbyk7CiAKQEAgLTE4NzMsMTQgKzIxMTAsNjggQEAKICAgICAgICAgICAgIGlmIChydCA9PSAwKSB7CiAgICAgICAgICAgICAgICAgY2FjaGVfaW5mby0+bmFtZXNlcnZlcnNbaW5kZXhdID0gc3RyZHVwKHNlcnZlcnNbaV0pOwogICAgICAgICAgICAgICAgIGluZGV4Kys7CisgICAgICAgICAgICAgICAgWExPRygiX3Jlc29sdl9zZXRfbmFtZXNlcnZlcnNfZm9yX2lmYWNlOiBpZmFjZSA9ICVzLCBhZGRyID0gJXNcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICBpZm5hbWUsIHNlcnZlcnNbaV0pOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBjYWNoZV9pbmZvLT5uc2FkZHJpbmZvW2luZGV4XSA9IE5VTEw7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KKworICAgICAgICAvLyBjb2RlIG1vdmVkIGZyb20gcmVzX2luaXQuYywgbG9hZF9kb21haW5fc2VhcmNoX2xpc3QKKyAgICAgICAgc3RybGNweShjYWNoZV9pbmZvLT5kZWZkbmFtZSwgZG9tYWlucywgc2l6ZW9mKGNhY2hlX2luZm8tPmRlZmRuYW1lKSk7CisgICAgICAgIGlmICgoY3AgPSBzdHJjaHIoY2FjaGVfaW5mby0+ZGVmZG5hbWUsICdcbicpKSAhPSBOVUxMKQorICAgICAgICAgICAgKmNwID0gJ1wwJzsKKyAgICAgICAgY3AgPSBjYWNoZV9pbmZvLT5kZWZkbmFtZTsKKyAgICAgICAgb2Zmc2V0ID0gY2FjaGVfaW5mby0+ZG5zcmNoX29mZnNldDsKKyAgICAgICAgd2hpbGUgKG9mZnNldCA8IGNhY2hlX2luZm8tPmRuc3JjaF9vZmZzZXQgKyBNQVhETlNSQ0gpIHsKKyAgICAgICAgICAgIHdoaWxlICgqY3AgPT0gJyAnIHx8ICpjcCA9PSAnXHQnKSAvKiBza2lwIGxlYWRpbmcgd2hpdGUgc3BhY2UgKi8KKyAgICAgICAgICAgICAgICBjcCsrOworICAgICAgICAgICAgaWYgKCpjcCA9PSAnXDAnKSAvKiBzdG9wIGlmIG5vdGhpbmcgbW9yZSB0byBkbyAqLworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgKm9mZnNldCsrID0gY3AgLSBjYWNoZV9pbmZvLT5kZWZkbmFtZTsgLyogcmVjb3JkIHRoaXMgc2VhcmNoIGRvbWFpbiAqLworICAgICAgICAgICAgd2hpbGUgKCpjcCkgeyAvKiB6ZXJvLXRlcm1pbmF0ZSBpdCAqLworICAgICAgICAgICAgICAgIGlmICgqY3AgPT0gJyAnfHwgKmNwID09ICdcdCcpIHsKKyAgICAgICAgICAgICAgICAgICAgKmNwKysgPSAnXDAnOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY3ArKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAqb2Zmc2V0ID0gLTE7IC8qIGNhY2hlX2luZm8tPmRuc3JjaF9vZmZzZXQgaGFzIE1BWEROU1JDSCsxIGl0ZW1zICovCisKKyAgICAgICAgLy8gZmx1c2ggY2FjaGUgc2luY2UgbmV3IHNldHRpbmdzCisgICAgICAgIF9mbHVzaF9jYWNoZV9mb3JfaWZhY2VfbG9ja2VkKGlmbmFtZSk7CisKICAgICB9CisKICAgICBwdGhyZWFkX211dGV4X3VubG9jaygmX3Jlc19jYWNoZV9saXN0X2xvY2spOwogfQogCitzdGF0aWMgaW50CitfcmVzb2x2X2lzX25hbWVzZXJ2ZXJzX2VxdWFsX2xvY2tlZChzdHJ1Y3QgcmVzb2x2X2NhY2hlX2luZm8qIGNhY2hlX2luZm8sCisgICAgICAgIGNoYXIqKiBzZXJ2ZXJzLCBpbnQgbnVtc2VydmVycykKK3sKKyAgICBpbnQgaTsKKyAgICBjaGFyKiogbnM7CisgICAgaW50IGVxdWFsID0gMTsKKworICAgIC8vIGNvbXBhcmUgZWFjaCBuYW1lIHNlcnZlciBhZ2FpbnN0IGN1cnJlbnQgbmFtZSBzZXJ2ZXJzCisgICAgaWYgKG51bXNlcnZlcnMgPiBNQVhOUykgbnVtc2VydmVycyA9IE1BWE5TOworICAgIGZvciAoaSA9IDA7IGkgPCBudW1zZXJ2ZXJzICYmIGVxdWFsOyBpKyspIHsKKyAgICAgICAgbnMgPSBjYWNoZV9pbmZvLT5uYW1lc2VydmVyczsKKyAgICAgICAgZXF1YWwgPSAwOworICAgICAgICB3aGlsZSgqbnMpIHsKKyAgICAgICAgICAgIGlmIChzdHJjbXAoKm5zLCBzZXJ2ZXJzW2ldKSA9PSAwKSB7CisgICAgICAgICAgICAgICAgZXF1YWwgPSAxOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbnMrKzsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBlcXVhbDsKK30KKwogc3RhdGljIHZvaWQKIF9mcmVlX25hbWVzZXJ2ZXJzX2xvY2tlZChzdHJ1Y3QgcmVzb2x2X2NhY2hlX2luZm8qIGNhY2hlX2luZm8pCiB7CkBAIC0yMDIzLDMgKzIzMTQsMTk2IEBACiAgICAgfQogICAgIHJldHVybiBOVUxMOwogfQorCitzdGF0aWMgdm9pZAorX3JlbW92ZV9waWRpZmFjZV9pbmZvX2xvY2tlZChpbnQgcGlkKSB7CisgICAgc3RydWN0IHJlc29sdl9waWRpZmFjZV9pbmZvKiByZXN1bHQgPSAmX3Jlc19waWRpZmFjZV9saXN0OworICAgIHN0cnVjdCByZXNvbHZfcGlkaWZhY2VfaW5mbyogcHJldiA9IE5VTEw7CisKKyAgICB3aGlsZSAocmVzdWx0ICE9IE5VTEwgJiYgcmVzdWx0LT5waWQgIT0gcGlkKSB7CisgICAgICAgIHByZXYgPSByZXN1bHQ7CisgICAgICAgIHJlc3VsdCA9IHJlc3VsdC0+bmV4dDsKKyAgICB9CisgICAgaWYgKHByZXYgIT0gTlVMTCAmJiByZXN1bHQgIT0gTlVMTCkgeworICAgICAgICBwcmV2LT5uZXh0ID0gcmVzdWx0LT5uZXh0OworICAgICAgICBmcmVlKHJlc3VsdCk7CisgICAgfQorfQorCitzdGF0aWMgc3RydWN0IHJlc29sdl9waWRpZmFjZV9pbmZvKgorX2dldF9waWRfaWZhY2VfaW5mb19sb2NrZWQoaW50IHBpZCkKK3sKKyAgICBzdHJ1Y3QgcmVzb2x2X3BpZGlmYWNlX2luZm8qIHJlc3VsdCA9ICZfcmVzX3BpZGlmYWNlX2xpc3Q7CisgICAgd2hpbGUgKHJlc3VsdCAhPSBOVUxMICYmIHJlc3VsdC0+cGlkICE9IHBpZCkgeworICAgICAgICByZXN1bHQgPSByZXN1bHQtPm5leHQ7CisgICAgfQorCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZAorX3Jlc29sdl9zZXRfaWZhY2VfZm9yX3BpZChjb25zdCBjaGFyKiBpZm5hbWUsIGludCBwaWQpCit7CisgICAgLy8gbWFrZSBzdXJlIHRoZSBwaWQgaWZhY2UgbGlzdCBpcyBjcmVhdGVkCisgICAgcHRocmVhZF9vbmNlKCZfcmVzX2NhY2hlX29uY2UsIF9yZXNfY2FjaGVfaW5pdCk7CisgICAgcHRocmVhZF9tdXRleF9sb2NrKCZfcmVzX3BpZGlmYWNlX2xpc3RfbG9jayk7CisKKyAgICBzdHJ1Y3QgcmVzb2x2X3BpZGlmYWNlX2luZm8qIHBpZGlmYWNlX2luZm8gPSBfZ2V0X3BpZF9pZmFjZV9pbmZvX2xvY2tlZChwaWQpOworICAgIGlmICghcGlkaWZhY2VfaW5mbykgeworICAgICAgICBwaWRpZmFjZV9pbmZvID0gY2FsbG9jKHNpemVvZigqcGlkaWZhY2VfaW5mbyksIDEpOworICAgICAgICBpZiAocGlkaWZhY2VfaW5mbykgeworICAgICAgICAgICAgcGlkaWZhY2VfaW5mby0+cGlkID0gcGlkOworICAgICAgICAgICAgaW50IGxlbiA9IHNpemVvZihwaWRpZmFjZV9pbmZvLT5pZm5hbWUpOworICAgICAgICAgICAgc3RybmNweShwaWRpZmFjZV9pbmZvLT5pZm5hbWUsIGlmbmFtZSwgbGVuIC0gMSk7CisgICAgICAgICAgICBwaWRpZmFjZV9pbmZvLT5pZm5hbWVbbGVuIC0gMV0gPSAnXDAnOworCisgICAgICAgICAgICBwaWRpZmFjZV9pbmZvLT5uZXh0ID0gX3Jlc19waWRpZmFjZV9saXN0Lm5leHQ7CisgICAgICAgICAgICBfcmVzX3BpZGlmYWNlX2xpc3QubmV4dCA9IHBpZGlmYWNlX2luZm87CisKKyAgICAgICAgICAgIFhMT0coIl9yZXNvbHZfc2V0X2lmYWNlX2Zvcl9waWQ6IHBpZCAlZCAsIGlmYWNlICVzXG4iLCBwaWQsIGlmbmFtZSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBYTE9HKCJfcmVzb2x2X3NldF9pZmFjZV9mb3JfcGlkIGZhaWxpbmcgY2FsbG9jIik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwdGhyZWFkX211dGV4X3VubG9jaygmX3Jlc19waWRpZmFjZV9saXN0X2xvY2spOworfQorCit2b2lkCitfcmVzb2x2X2NsZWFyX2lmYWNlX2Zvcl9waWQoaW50IHBpZCkKK3sKKyAgICBwdGhyZWFkX29uY2UoJl9yZXNfY2FjaGVfb25jZSwgX3Jlc19jYWNoZV9pbml0KTsKKyAgICBwdGhyZWFkX211dGV4X2xvY2soJl9yZXNfcGlkaWZhY2VfbGlzdF9sb2NrKTsKKworICAgIF9yZW1vdmVfcGlkaWZhY2VfaW5mb19sb2NrZWQocGlkKTsKKworICAgIFhMT0coIl9yZXNvbHZfY2xlYXJfaWZhY2VfZm9yX3BpZDogcGlkICVkXG4iLCBwaWQpOworCisgICAgcHRocmVhZF9tdXRleF91bmxvY2soJl9yZXNfcGlkaWZhY2VfbGlzdF9sb2NrKTsKK30KKworaW50CitfcmVzb2x2X2dldF9waWRzX2Fzc29jaWF0ZWRfaW50ZXJmYWNlKGludCBwaWQsIGNoYXIqIGJ1ZmYsIGludCBidWZmTGVuKQoreworICAgIGludCBsZW4gPSAwOworCisgICAgaWYgKCFidWZmKSB7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBwdGhyZWFkX29uY2UoJl9yZXNfY2FjaGVfb25jZSwgX3Jlc19jYWNoZV9pbml0KTsKKyAgICBwdGhyZWFkX211dGV4X2xvY2soJl9yZXNfcGlkaWZhY2VfbGlzdF9sb2NrKTsKKworICAgIHN0cnVjdCByZXNvbHZfcGlkaWZhY2VfaW5mbyogcGlkaWZhY2VfaW5mbyA9IF9nZXRfcGlkX2lmYWNlX2luZm9fbG9ja2VkKHBpZCk7CisgICAgYnVmZlswXSA9ICdcMCc7CisgICAgaWYgKHBpZGlmYWNlX2luZm8pIHsKKyAgICAgICAgbGVuID0gc3RybGVuKHBpZGlmYWNlX2luZm8tPmlmbmFtZSk7CisgICAgICAgIGlmIChsZW4gPCBidWZmTGVuKSB7CisgICAgICAgICAgICBzdHJuY3B5KGJ1ZmYsIHBpZGlmYWNlX2luZm8tPmlmbmFtZSwgbGVuKTsKKyAgICAgICAgICAgIGJ1ZmZbbGVuXSA9ICdcMCc7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBYTE9HKCJfcmVzb2x2X2dldF9waWRzX2Fzc29jaWF0ZWRfaW50ZXJmYWNlIGJ1ZmY6ICVzXG4iLCBidWZmKTsKKworICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZfcmVzX3BpZGlmYWNlX2xpc3RfbG9jayk7CisKKyAgICByZXR1cm4gbGVuOworfQorCitpbnQKK19yZXNvbHZfZ2V0X2RlZmF1bHRfaWZhY2UoY2hhciogYnVmZiwgaW50IGJ1ZmZMZW4pCit7CisgICAgY2hhciogaWZuYW1lOworICAgIGludCBsZW4gPSAwOworCisgICAgaWYgKCFidWZmIHx8IGJ1ZmZMZW4gPT0gMCkgeworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgcHRocmVhZF9vbmNlKCZfcmVzX2NhY2hlX29uY2UsIF9yZXNfY2FjaGVfaW5pdCk7CisgICAgcHRocmVhZF9tdXRleF9sb2NrKCZfcmVzX2NhY2hlX2xpc3RfbG9jayk7CisKKyAgICBpZm5hbWUgPSBfZ2V0X2RlZmF1bHRfaWZhY2VfbG9ja2VkKCk7IC8vIG5ldmVyIG51bGwsIGJ1dCBtYXkgYmUgZW1wdHkKKworICAgIC8vIGlmIGRlZmF1bHQgaW50ZXJmYWNlIG5vdCBzZXQuIEdldCBmaXJzdCBjYWNoZSB3aXRoIGFuIGludGVyZmFjZQorICAgIGlmIChpZm5hbWVbMF0gPT0gJ1wwJykgeworICAgICAgICBpZm5hbWUgPSBfZmluZF9hbnlfaWZhY2VfbmFtZV9sb2NrZWQoKTsgLy8gbWF5IGJlIG51bGwKKyAgICB9CisKKyAgICAvLyBpZiB3ZSBnb3QgdGhlIGRlZmF1bHQgaWZhY2Ugb3IgaWYgKG5vLWRlZmF1bHQpIHRoZSBmaW5kX2FueSBjYWxsIGdhdmUgYW4gYW5zd2VyCisgICAgaWYgKGlmbmFtZSkgeworICAgICAgICBsZW4gPSBzdHJsZW4oaWZuYW1lKTsKKyAgICAgICAgaWYgKGxlbiA8IGJ1ZmZMZW4pIHsKKyAgICAgICAgICAgIHN0cm5jcHkoYnVmZiwgaWZuYW1lLCBsZW4pOworICAgICAgICAgICAgYnVmZltsZW5dID0gJ1wwJzsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGJ1ZmZbMF0gPSAnXDAnOworICAgIH0KKworICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZfcmVzX2NhY2hlX2xpc3RfbG9jayk7CisKKyAgICByZXR1cm4gbGVuOworfQorCitpbnQKK19yZXNvbHZfcG9wdWxhdGVfcmVzX2Zvcl9pZmFjZShyZXNfc3RhdGUgc3RhdHApCit7CisgICAgaW50IG5zZXJ2OworICAgIHN0cnVjdCByZXNvbHZfY2FjaGVfaW5mbyogaW5mbyA9IE5VTEw7CisKKyAgICBpZiAoc3RhdHApIHsKKyAgICAgICAgc3RydWN0IGFkZHJpbmZvKiBhaTsKKworICAgICAgICBpZiAoc3RhdHAtPmlmYWNlWzBdID09ICdcMCcpIHsgLy8gbm8gaW50ZXJmYWNlIHNldCBhc3NpZ24gZGVmYXVsdAorICAgICAgICAgICAgX3Jlc29sdl9nZXRfZGVmYXVsdF9pZmFjZShzdGF0cC0+aWZhY2UsIHNpemVvZihzdGF0cC0+aWZhY2UpKTsKKyAgICAgICAgfQorCisgICAgICAgIHB0aHJlYWRfb25jZSgmX3Jlc19jYWNoZV9vbmNlLCBfcmVzX2NhY2hlX2luaXQpOworICAgICAgICBwdGhyZWFkX211dGV4X2xvY2soJl9yZXNfY2FjaGVfbGlzdF9sb2NrKTsKKyAgICAgICAgaW5mbyA9IF9maW5kX2NhY2hlX2luZm9fbG9ja2VkKHN0YXRwLT5pZmFjZSk7CisKKyAgICAgICAgaWYgKGluZm8gPT0gTlVMTCkgeworICAgICAgICAgICAgcHRocmVhZF9tdXRleF91bmxvY2soJl9yZXNfY2FjaGVfbGlzdF9sb2NrKTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisKKyAgICAgICAgWExPRygiX3Jlc29sdl9wb3B1bGF0ZV9yZXNfZm9yX2lmYWNlOiAlc1xuIiwgc3RhdHAtPmlmYWNlKTsKKyAgICAgICAgZm9yIChuc2VydiA9IDA7IG5zZXJ2IDwgTUFYTlM7IG5zZXJ2KyspIHsKKyAgICAgICAgICAgIGFpID0gaW5mby0+bnNhZGRyaW5mb1tuc2Vydl07CisgICAgICAgICAgICBpZiAoYWkgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoKHNpemVfdCkgYWktPmFpX2FkZHJsZW4gPD0gc2l6ZW9mKHN0YXRwLT5fdS5fZXh0LmV4dC0+bnNhZGRyc1swXSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoc3RhdHAtPl91Ll9leHQuZXh0ICE9IE5VTEwpIHsKKyAgICAgICAgICAgICAgICAgICAgbWVtY3B5KCZzdGF0cC0+X3UuX2V4dC5leHQtPm5zYWRkcnNbbnNlcnZdLCBhaS0+YWlfYWRkciwgYWktPmFpX2FkZHJsZW4pOworICAgICAgICAgICAgICAgICAgICBzdGF0cC0+bnNhZGRyX2xpc3RbbnNlcnZdLnNpbl9mYW1pbHkgPSBBRl9VTlNQRUM7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKChzaXplX3QpIGFpLT5haV9hZGRybGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD0gc2l6ZW9mKHN0YXRwLT5uc2FkZHJfbGlzdFswXSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1lbWNweSgmc3RhdHAtPm5zYWRkcl9saXN0W25zZXJ2XSwgYWktPmFpX2FkZHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFpLT5haV9hZGRybGVuKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRwLT5uc2FkZHJfbGlzdFtuc2Vydl0uc2luX2ZhbWlseSA9IEFGX1VOU1BFQzsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgWExPRygiX3Jlc29sdl9wb3B1bGF0ZV9yZXNfZm9yX2lmYWNlIGZvdW5kIHRvbyBsb25nIGFkZHJsZW4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBzdGF0cC0+bnNjb3VudCA9IG5zZXJ2OworICAgICAgICAvLyBub3cgZG8gc2VhcmNoIGRvbWFpbnMuICBOb3RlIHRoYXQgd2UgY2FjaGUgdGhlIG9mZnNldHMgYXMgdGhpcyBjb2RlIHJ1bnMgYWxvdAorICAgICAgICAvLyBidXQgdGhlIHNldHRpbmcvb2Zmc2V0LWNvbXB1dGVyIG9ubHkgcnVucyB3aGVuIHNldC9jaGFuZ2VkCisgICAgICAgIHN0cmxjcHkoc3RhdHAtPmRlZmRuYW1lLCBpbmZvLT5kZWZkbmFtZSwgc2l6ZW9mKHN0YXRwLT5kZWZkbmFtZSkpOworICAgICAgICByZWdpc3RlciBjaGFyICoqcHAgPSBzdGF0cC0+ZG5zcmNoOworICAgICAgICByZWdpc3RlciBpbnQgKnAgPSBpbmZvLT5kbnNyY2hfb2Zmc2V0OworICAgICAgICB3aGlsZSAocHAgPCBzdGF0cC0+ZG5zcmNoICsgTUFYRE5TUkNIICYmICpwICE9IC0xKSB7CisgICAgICAgICAgICAqcHArKyA9ICZzdGF0cC0+ZGVmZG5hbWUgKyAqcCsrOworICAgICAgICB9CisKKyAgICAgICAgcHRocmVhZF9tdXRleF91bmxvY2soJl9yZXNfY2FjaGVfbGlzdF9sb2NrKTsKKyAgICB9CisgICAgcmV0dXJuIG5zZXJ2OworfQpkaWZmIC0tZ2l0IGEvbGliYy9uZXRic2QvcmVzb2x2L3Jlc19kYXRhLmMgYi9saWJjL25ldGJzZC9yZXNvbHYvcmVzX2RhdGEuYwppbmRleCAwMTRjOTliLi43ZTVhMzA4IDEwMDY0NAotLS0gYS9saWJjL25ldGJzZC9yZXNvbHYvcmVzX2RhdGEuYworKysgYi9saWJjL25ldGJzZC9yZXNvbHYvcmVzX2RhdGEuYwpAQCAtODIsMTMgKzgyLDcgQEAKIAogaW50ICByZXNfb3Vyc2VydmVyX3AoY29uc3QgcmVzX3N0YXRlLCBjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKik7CiAKLSNpZmRlZiBBTkRST0lEX0NIQU5HRVMKLXN0YXRpYyBpbnQgcmVzX25lZWRfaW5pdCgpIHsKLQlyZXR1cm4gKChfbnJlcy5vcHRpb25zICYgUkVTX0lOSVQpID09IDBVKSB8fCByZXNfZ2V0X2Ruc19jaGFuZ2VkKCk7Ci19Ci0jZWxzZQogI2RlZmluZSByZXNfbmVlZF9pbml0KCkgICAoKF9ucmVzLm9wdGlvbnMgJiBSRVNfSU5JVCkgPT0gMFUpCi0jZW5kaWYKIAogaW50CiByZXNfaW5pdCh2b2lkKSB7CmRpZmYgLS1naXQgYS9saWJjL25ldGJzZC9yZXNvbHYvcmVzX2luaXQuYyBiL2xpYmMvbmV0YnNkL3Jlc29sdi9yZXNfaW5pdC5jCmluZGV4IGZmZDQwNTQuLmZmNjUyOTkgMTAwNjQ0Ci0tLSBhL2xpYmMvbmV0YnNkL3Jlc29sdi9yZXNfaW5pdC5jCisrKyBiL2xpYmMvbmV0YnNkL3Jlc29sdi9yZXNfaW5pdC5jCkBAIC05OSw2ICs5OSw4IEBACiAjaW5jbHVkZSA8bmV0ZGIuaD4KIAogI2lmZGVmIEFORFJPSURfQ0hBTkdFUworI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KICNpbmNsdWRlIDxzeXMvc3lzdGVtX3Byb3BlcnRpZXMuaD4KICNlbmRpZiAvKiBBTkRST0lEX0NIQU5HRVMgKi8KIApAQCAtMTA5LDEzICsxMTEsNiBAQAogLyogZW5zdXJlIHRoYXQgc29ja2FkZHJfaW42IGFuZCBJTjZBRERSX0FOWV9JTklUIGFyZSBkZWNsYXJlZCAvIGRlZmluZWQgKi8KICNpZmRlZiBBTkRST0lEX0NIQU5HRVMKICNpbmNsdWRlICJyZXNvbHZfcHJpdmF0ZS5oIgotI2RlZmluZSBNQVhfRE5TX1BST1BFUlRJRVMgOAotI2RlZmluZSBETlNfUFJPUF9OQU1FX1BSRUZJWCAibmV0LmRucyIKLSNkZWZpbmUgRE5TX0NIQU5HRV9QUk9QX05BTUUgIm5ldC5kbnNjaGFuZ2UiCi0jZGVmaW5lIEROU19TRUFSQ0hfUFJPUF9OQU1FICJuZXQuZG5zLnNlYXJjaCIKLXN0YXRpYyBjb25zdCBwcm9wX2luZm8gKmRuc19jaGFuZ2VfcHJvcDsKLXN0YXRpYyBpbnQgZG5zX2xhc3RfY2hhbmdlX2NvdW50ZXI7Ci1zdGF0aWMgaW50IF9nZXRfZG5zX2NoYW5nZV9jb3VudCgpOwogI2Vsc2UKICNpbmNsdWRlIDxyZXNvbHYuaD4KICNlbmRpZgpAQCAtMTY5LDQxICsxNjQsNiBAQAogCXJldHVybiAoX19yZXNfdmluaXQoc3RhdHAsIDApKTsKIH0KIAotI2lmZGVmIEFORFJPSURfQ0hBTkdFUwotc3RhdGljIGludCBsb2FkX2RvbWFpbl9zZWFyY2hfbGlzdChyZXNfc3RhdGUgc3RhdHApIHsKLQljaGFyIHByb3B2YWx1ZVtQUk9QX1ZBTFVFX01BWF07Ci0JcmVnaXN0ZXIgY2hhciAqY3AsICoqcHA7Ci0KLQlpZihfX3N5c3RlbV9wcm9wZXJ0eV9nZXQoRE5TX1NFQVJDSF9QUk9QX05BTUUsIHByb3B2YWx1ZSkgPj0gMSkgewotCQlzdHJsY3B5KHN0YXRwLT5kZWZkbmFtZSwgcHJvcHZhbHVlLCBzaXplb2Yoc3RhdHAtPmRlZmRuYW1lKSk7Ci0JCWlmICgoY3AgPSBzdHJjaHIoc3RhdHAtPmRlZmRuYW1lLCAnXG4nKSkgIT0gTlVMTCkKLQkJCSpjcCA9ICdcMCc7Ci0JCWNwID0gc3RhdHAtPmRlZmRuYW1lOwotCQlwcCA9IHN0YXRwLT5kbnNyY2g7Ci0JCXdoaWxlICggcHAgPCBzdGF0cC0+ZG5zcmNoICsgTUFYRE5TUkNIICkgewotCQkJd2hpbGUgKCpjcCA9PSAnICcgfHwgKmNwID09ICdcdCcpIC8qIHNraXAgbGVhZGluZyB3aGl0ZSBzcGFjZSAqLwotCQkJCWNwKys7Ci0JCQlpZiAoKmNwID09ICdcMCcpICAvKiBzdG9wIGlmIG5vdGhpbmcgbW9yZSAqLwotCQkJCWJyZWFrOwotCQkJKnBwKysgPSBjcDsgIC8qIHJlY29yZCB0aGlzIHNlYXJjaCBkb21haW4gKi8KLQkJCXdoaWxlICgqY3ApIHsgLyogemVyby10ZXJtaW5hdGUgaXQgKi8KLQkJCQlpZiAoKmNwID09ICcgJyB8fCAqY3AgPT0gJ1x0JykgewotCQkJCQkqY3ArKyA9ICdcMCc7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCQljcCsrOwotCQkJfQotCQl9Ci0JCSpwcCA9IE5VTEw7IC8qIHN0YXRwLT5kbnNyY2ggaGFzIE1BWEROU1JDSCsxIGl0ZW1zICovCi0JCWlmIChwcCA+IHN0YXRwLT5kbnNyY2gpCi0JCQlyZXR1cm4gMTsKLQl9Ci0Jc3RhdHAtPmRlZmRuYW1lWzBdID0gJ1wwJzsgIC8qIG5vIGRlZmF1bHQgZG9tYWluIG5hbWUgb24gQW5kcm9pZCAqLwotCXN0YXRwLT5kbnNyY2hbMF0gPSBOVUxMOwotCXJldHVybiAwOwotfQotI2VuZGlmCi0KIC8qIFRoaXMgZnVuY3Rpb24gaGFzIHRvIGJlIHJlYWNoYWJsZSBieSByZXNfZGF0YS5jIGJ1dCBub3QgcHVibGljbHkuICovCiBpbnQKIF9fcmVzX3Zpbml0KHJlc19zdGF0ZSBzdGF0cCwgaW50IHByZWluaXQpIHsKQEAgLTIxOCwxMiArMTc4LDYgQEAKIAljaGFyICpuZXQ7CiAJaW50IGRvdHM7CiAJdW5pb24gcmVzX3NvY2thZGRyX3VuaW9uIHVbMl07Ci0jaWZkZWYgQU5EUk9JRF9DSEFOR0VTCi0gICAgICAgIHBpZF90IG15cGlkID0gZ2V0cGlkKCk7Ci0gICAgICAgIGludCB1c2VfcHJvY19wcm9wcyA9IDA7Ci0gICAgICAgIGludCBmb3VuZF9wcm9wOwotCWNoYXIgZG5zUHJvcGVydHlbUFJPUF9WQUxVRV9NQVhdOwotI2VuZGlmCiAKICAgICAgICAgaWYgKChzdGF0cC0+b3B0aW9ucyAmIFJFU19JTklUKSAhPSAwVSkKICAgICAgICAgICAgICAgICByZXNfbmRlc3Ryb3koc3RhdHApOwpAQCAtMzE2LDc0ICsyNzAsOCBAQAogCWlmIChuc2VydiA+IDApCiAJCXN0YXRwLT5uc2NvdW50ID0gbnNlcnY7CiAjZW5kaWYKLSNpZmRlZiBBTkRST0lEX0NIQU5HRVMgLyogUkVBRCBGUk9NIFNZU1RFTSBQUk9QRVJUSUVTICovCi0JZG5zX2xhc3RfY2hhbmdlX2NvdW50ZXIgPSBfZ2V0X2Ruc19jaGFuZ2VfY291bnQoKTsKIAotCW5zZXJ2ID0gMDsKLQlmb3IobiA9IDE7IG4gPD0gTUFYX0ROU19QUk9QRVJUSUVTICYmIG5zZXJ2IDwgTUFYTlM7IG4rKykgewotCQljaGFyIHByb3BuYW1lW1BST1BfTkFNRV9NQVhdOwotCQljaGFyIHByb3B2YWx1ZVtQUk9QX1ZBTFVFX01BWF07Ci0KLQkJc3RydWN0IGFkZHJpbmZvIGhpbnRzLCAqYWk7Ci0JCWNoYXIgc2J1ZltOSV9NQVhTRVJWXTsKLQkJY29uc3Qgc2l6ZV90IG1pbnNpeiA9IHNpemVvZihzdGF0cC0+X3UuX2V4dC5leHQtPm5zYWRkcnNbMF0pOwotCi0JCS8qCi0JCSAqIENoZWNrIGZpcnN0IGZvciBwcm9jZXNzLXNwZWNpZmljIHByb3BlcnRpZXMsIGFuZCBpZiB0aG9zZSBkb24ndAotCQkgKiBleGlzdCwgdHJ5IHRoZSBnZW5lcmljIHByb3BlcnRpZXMuCi0JCSAqLwotCQlmb3VuZF9wcm9wID0gMDsKLQkJaWYgKG4gPT0gMSB8fCB1c2VfcHJvY19wcm9wcykgewotCQkJc25wcmludGYocHJvcG5hbWUsIHNpemVvZihwcm9wbmFtZSksICIlcyVkLiVkIiwgRE5TX1BST1BfTkFNRV9QUkVGSVgsIG4sIG15cGlkKTsKLQkJCWlmKF9fc3lzdGVtX3Byb3BlcnR5X2dldChwcm9wbmFtZSwgcHJvcHZhbHVlKSA8IDEpIHsKLQkJCQlpZiAodXNlX3Byb2NfcHJvcHMpIHsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJfSBlbHNlIHsKLQkJCQlmb3VuZF9wcm9wID0gMTsKLQkJCQl1c2VfcHJvY19wcm9wcyA9IDE7Ci0JCQl9Ci0JCX0KLQkJaWYgKCFmb3VuZF9wcm9wKSB7Ci0JCQlzbnByaW50Zihwcm9wbmFtZSwgc2l6ZW9mKHByb3BuYW1lKSwgIiVzJWQiLCBETlNfUFJPUF9OQU1FX1BSRUZJWCwgbik7Ci0JCQlpZihfX3N5c3RlbV9wcm9wZXJ0eV9nZXQocHJvcG5hbWUsIHByb3B2YWx1ZSkgPCAxKSB7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQotCQljcCA9IHByb3B2YWx1ZTsKLQotCQl3aGlsZSAoKmNwID09ICcgJyB8fCAqY3AgPT0gJ1x0JykKLQkJCWNwKys7Ci0JCWNwW3N0cmNzcG4oY3AsICI7IyBcdFxuIildID0gJ1wwJzsKLQkJaWYgKCgqY3AgIT0gJ1wwJykgJiYgKCpjcCAhPSAnXG4nKSkgewotCQkJbWVtc2V0KCZoaW50cywgMCwgc2l6ZW9mKGhpbnRzKSk7Ci0JCQloaW50cy5haV9mYW1pbHkgPSBQRl9VTlNQRUM7Ci0JCQloaW50cy5haV9zb2NrdHlwZSA9IFNPQ0tfREdSQU07CS8qZHVtbXkqLwotCQkJaGludHMuYWlfZmxhZ3MgPSBBSV9OVU1FUklDSE9TVDsKLQkJCXNwcmludGYoc2J1ZiwgIiV1IiwgTkFNRVNFUlZFUl9QT1JUKTsKLQkJCWlmIChnZXRhZGRyaW5mbyhjcCwgc2J1ZiwgJmhpbnRzLCAmYWkpID09IDAgJiYKLQkJCSAgICAoc2l6ZV90KWFpLT5haV9hZGRybGVuIDw9IG1pbnNpeikgewotCQkJCWlmIChzdGF0cC0+X3UuX2V4dC5leHQgIT0gTlVMTCkgewotCQkJCQltZW1jcHkoJnN0YXRwLT5fdS5fZXh0LmV4dC0+bnNhZGRyc1tuc2Vydl0sCi0JCQkJCSAgICAgICBhaS0+YWlfYWRkciwgYWktPmFpX2FkZHJsZW4pOwotCQkJCX0KLQkJCQlpZiAoKHNpemVfdClhaS0+YWlfYWRkcmxlbiA8PQotCQkJCSAgICBzaXplb2Yoc3RhdHAtPm5zYWRkcl9saXN0W25zZXJ2XSkpIHsKLQkJCQkJbWVtY3B5KCZzdGF0cC0+bnNhZGRyX2xpc3RbbnNlcnZdLAotCQkJCQkgICAgICAgYWktPmFpX2FkZHIsIGFpLT5haV9hZGRybGVuKTsKLQkJCQl9IGVsc2UgewotCQkJCQlzdGF0cC0+bnNhZGRyX2xpc3RbbnNlcnZdLnNpbl9mYW1pbHkgPSAwOwotCQkJCX0KLQkJCQlmcmVlYWRkcmluZm8oYWkpOwotCQkJCW5zZXJ2Kys7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQkvKiBBZGQgdGhlIGRvbWFpbiBzZWFyY2ggbGlzdCAqLwotCWhhdmVzZWFyY2ggPSBsb2FkX2RvbWFpbl9zZWFyY2hfbGlzdChzdGF0cCk7Ci0jZWxzZSAvKiAhQU5EUk9JRF9DSEFOR0VTIC0gSUdOT1JFIHJlc29sdi5jb25mIGluIEFuZHJvaWQgKi8KKyNpZm5kZWYgQU5EUk9JRF9DSEFOR0VTIC8qICFBTkRST0lEX0NIQU5HRVMgLSBJR05PUkUgcmVzb2x2LmNvbmYgaW4gQW5kcm9pZCAqLwogI2RlZmluZQlNQVRDSChsaW5lLCBuYW1lKSBcCiAJKCFzdHJuY21wKGxpbmUsIG5hbWUsIHNpemVvZihuYW1lKSAtIDEpICYmIFwKIAkobGluZVtzaXplb2YobmFtZSkgLSAxXSA9PSAnICcgfHwgXApAQCAtNzE2LDEwICs2MDQsNDQgQEAKIAlyZXR1cm4gKGh0b25sKElOX0NMQVNTQ19ORVQpKTsKIH0KIAorI2lmZGVmIEFORFJPSURfQ0hBTkdFUworc3RhdGljIGludAorcmVhbF9yYW5kb21pZCh1X2ludCAqcmFuZG9tX3ZhbHVlKSB7CisJLyogb3BlbiB0aGUgbm9uYmxvY2tpbmcgcmFuZG9tIGRldmljZSwgcmV0dXJuaW5nIC0xIG9uIGZhaWx1cmUgKi8KKwlpbnQgcmFuZG9tX2RldmljZSA9IG9wZW4oIi9kZXYvdXJhbmRvbSIsIE9fUkRPTkxZKTsKKwlpZiAocmFuZG9tX2RldmljZSA8IDApIHsKKwkJcmV0dXJuIC0xOworCX0KKworCS8qIHJlYWQgZnJvbSB0aGUgcmFuZG9tIGRldmljZSwgcmV0dXJuaW5nIC0xIG9uIGZhaWx1cmUgKG9yIHRvbyBtYW55IHJldHJpZXMpKi8KKwl1X2ludCByZXRyeSA9IDU7CisJZm9yIChyZXRyeTsgcmV0cnkgPiAwOyByZXRyeS0tKSB7CisJCWludCByZXR2YWwgPSByZWFkKHJhbmRvbV9kZXZpY2UsIHJhbmRvbV92YWx1ZSwgc2l6ZW9mKHVfaW50KSk7CisJCWlmIChyZXR2YWwgPT0gc2l6ZW9mKHVfaW50KSkgeworCQkJKnJhbmRvbV92YWx1ZSAmPSAweGZmZmY7CisJCQljbG9zZShyYW5kb21fZGV2aWNlKTsKKwkJCXJldHVybiAwOworCQl9IGVsc2UgaWYgKChyZXR2YWwgPCAwKSAmJiAoZXJybm8gIT0gRUlOVFIpKSB7CisJCQlicmVhazsKKwkJfQorCX0KKworCWNsb3NlKHJhbmRvbV9kZXZpY2UpOworCXJldHVybiAtMTsKK30KKyNlbmRpZiAvKiBBTkRST0lEX0NIQU5HRVMgKi8KKwogdV9pbnQKIHJlc19yYW5kb21pZCh2b2lkKSB7CisjaWZkZWYgQU5EUk9JRF9DSEFOR0VTCisJaW50IHN0YXR1cyA9IDA7CisJdV9pbnQgb3V0cHV0ID0gMDsKKwlzdGF0dXMgPSByZWFsX3JhbmRvbWlkKCZvdXRwdXQpOworCWlmIChzdGF0dXMgIT0gLTEpIHsKKwkJcmV0dXJuIG91dHB1dDsKKwl9CisjZW5kaWYgLyogQU5EUk9JRF9DSEFOR0VTICovCiAJc3RydWN0IHRpbWV2YWwgbm93OwotCiAJZ2V0dGltZW9mZGF5KCZub3csIE5VTEwpOwogCXJldHVybiAoMHhmZmZmICYgKG5vdy50dl9zZWMgXiBub3cudHZfdXNlYyBeIGdldHBpZCgpKSk7CiB9CkBAIC04NzEsMzIgKzc5MywxNyBAQAogfQogCiAjaWZkZWYgQU5EUk9JRF9DSEFOR0VTCi1zdGF0aWMgaW50IF9nZXRfZG5zX2NoYW5nZV9jb3VudCgpCit2b2lkIHJlc19zZXRpZmFjZShyZXNfc3RhdGUgc3RhdHAsIGNvbnN0IGNoYXIqIGlmYWNlKQogewotCWlmIChkbnNfY2hhbmdlX3Byb3AgPT0gTlVMTCkgewotCQlkbnNfY2hhbmdlX3Byb3AgPSBfX3N5c3RlbV9wcm9wZXJ0eV9maW5kKEROU19DSEFOR0VfUFJPUF9OQU1FKTsKLQl9Ci0JaWYgKGRuc19jaGFuZ2VfcHJvcCAhPSBOVUxMKSB7Ci0JCWNoYXIgcHJvcHZhbHVlW1BST1BfVkFMVUVfTUFYXTsKLQkJaWYgKF9fc3lzdGVtX3Byb3BlcnR5X3JlYWQoZG5zX2NoYW5nZV9wcm9wLCBOVUxMLCBwcm9wdmFsdWUpID49IDEpIHsKLQkJCXJldHVybiBhdG9pKHByb3B2YWx1ZSk7CisJaWYgKHN0YXRwICE9IE5VTEwpIHsKKwkJLy8gc2V0IGludGVyZmFjZQorCQlpZiAoaWZhY2UgJiYgaWZhY2VbMF0gIT0gJ1wwJykgeworCQkJaW50IGxlbiA9IHNpemVvZihzdGF0cC0+aWZhY2UpOworCQkJc3RybmNweShzdGF0cC0+aWZhY2UsIGlmYWNlLCBsZW4gLSAxKTsKKwkJCXN0YXRwLT5pZmFjZVtsZW4gLSAxXSA9ICdcMCc7CisJCX0gZWxzZSB7CisJCQlzdGF0cC0+aWZhY2VbMF0gPSAnXDAnOwogCQl9CiAJfQotCXJldHVybiAtMTsKLX0KLQotaW50IHJlc19nZXRfZG5zX2NoYW5nZWQoKQotewotCWludCBjaGFuZ2VfY291bnQ7Ci0KLQljaGFuZ2VfY291bnQgPSBfZ2V0X2Ruc19jaGFuZ2VfY291bnQoKTsKLQlpZiAoY2hhbmdlX2NvdW50ICE9IGRuc19sYXN0X2NoYW5nZV9jb3VudGVyKSB7Ci0JCWlmIChjaGFuZ2VfY291bnQgIT0gLTEpIHsKLQkJCWRuc19sYXN0X2NoYW5nZV9jb3VudGVyID0gY2hhbmdlX2NvdW50OwotCQl9Ci0JCXJldHVybiAxOwotCX0gZWxzZSB7Ci0JCXJldHVybiAwOwotCX0KIH0KICNlbmRpZiAvKiBBTkRST0lEX0NIQU5HRVMgKi8KZGlmZiAtLWdpdCBhL2xpYmMvbmV0YnNkL3Jlc29sdi9yZXNfc2VuZC5jIGIvbGliYy9uZXRic2QvcmVzb2x2L3Jlc19zZW5kLmMKaW5kZXggZGJhZDZkZC4uMGJiNWI2YiAxMDA2NDQKLS0tIGEvbGliYy9uZXRic2QvcmVzb2x2L3Jlc19zZW5kLmMKKysrIGIvbGliYy9uZXRic2QvcmVzb2x2L3Jlc19zZW5kLmMKQEAgLTExOSw3ICsxMTksNyBAQAogIyAgaW5jbHVkZSA8cmVzb2x2X2NhY2hlLmg+CiAjZW5kaWYKIAotI2luY2x1ZGUgImxvZ2QuaCIKKyNpbmNsdWRlICJsaWJjX2xvZ2dpbmcuaCIKIAogI2lmbmRlZiBERV9DT05TVAogI2RlZmluZSBERV9DT05TVChjLHYpICAgdiA9ICgoYykgPyBcCkBAIC0zNzAsMTAgKzM3MCwxMyBAQAogICAgICAgICBSZXNvbHZDYWNoZVN0YXR1cyAgICAgY2FjaGVfc3RhdHVzID0gUkVTT0xWX0NBQ0hFX1VOU1VQUE9SVEVEOwogI2VuZGlmCiAKKyNpZiAhVVNFX1JFU09MVl9DQUNIRQogCWlmIChzdGF0cC0+bnNjb3VudCA9PSAwKSB7CiAJCWVycm5vID0gRVNSQ0g7CiAJCXJldHVybiAoLTEpOwogCX0KKyNlbmRpZgorCiAJaWYgKGFuc3NpeiA8IEhGSVhFRFNaKSB7CiAJCWVycm5vID0gRUlOVkFMOwogCQlyZXR1cm4gKC0xKTsKQEAgLTM4NSwxNyArMzg4LDI3IEBACiAJdGVycm5vID0gRVRJTUVET1VUOwogCiAjaWYgVVNFX1JFU09MVl9DQUNIRQotICAgICAgICBjYWNoZSA9IF9fZ2V0X3Jlc19jYWNoZSgpOwotICAgICAgICBpZiAoY2FjaGUgIT0gTlVMTCkgewotICAgICAgICAgICAgaW50ICBhbnNsZW4gPSAwOwotICAgICAgICAgICAgY2FjaGVfc3RhdHVzID0gX3Jlc29sdl9jYWNoZV9sb29rdXAoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlLCBidWYsIGJ1ZmxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5zLCBhbnNzaXosICZhbnNsZW4pOworCS8vIGdldCB0aGUgY2FjaGUgYXNzb2NpYXRlZCB3aXRoIHRoZSBpbnRlcmZhY2UKKwljYWNoZSA9IF9fZ2V0X3Jlc19jYWNoZShzdGF0cC0+aWZhY2UpOworCWlmIChjYWNoZSAhPSBOVUxMKSB7CisJCWludCAgYW5zbGVuID0gMDsKKwkJY2FjaGVfc3RhdHVzID0gX3Jlc29sdl9jYWNoZV9sb29rdXAoCisJCQkJY2FjaGUsIGJ1ZiwgYnVmbGVuLAorCQkJCWFucywgYW5zc2l6LCAmYW5zbGVuKTsKIAotICAgICAgICAgICAgaWYgKGNhY2hlX3N0YXR1cyA9PSBSRVNPTFZfQ0FDSEVfRk9VTkQpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gYW5zbGVuOwotICAgICAgICAgICAgfQotICAgICAgICB9CisJCWlmIChjYWNoZV9zdGF0dXMgPT0gUkVTT0xWX0NBQ0hFX0ZPVU5EKSB7CisJCQlyZXR1cm4gYW5zbGVuOworCQl9IGVsc2UgeworCQkJLy8gaGFkIGEgY2FjaGUgbWlzcyBmb3IgYSBrbm93biBpbnRlcmZhY2UsIHNvIHBvcHVsYXRlIHRoZSB0aHJlYWQgcHJpdmF0ZQorCQkJLy8gZGF0YSBzbyB0aGUgbm9ybWFsIHJlc29sdmUgcGF0aCBjYW4gZG8gaXRzIHRoaW5nCisJCQlfcmVzb2x2X3BvcHVsYXRlX3Jlc19mb3JfaWZhY2Uoc3RhdHApOworCQl9CisJfQorCisJaWYgKHN0YXRwLT5uc2NvdW50ID09IDApIHsKKwkJZXJybm8gPSBFU1JDSDsKKwkJcmV0dXJuICgtMSk7CisJfQogI2VuZGlmCiAKIAkvKgpAQCAtNTQyLDcgKzU1NSw3IEBACiAJCQkJICAgIG5zKTsKIAogCQkJaWYgKERCRykgewotCQkJCV9fbGliY19hbmRyb2lkX2xvZ19wcmludChBTkRST0lEX0xPR19ERUJVRywgImxpYmMiLAorCQkJCV9fbGliY19mb3JtYXRfbG9nKEFORFJPSURfTE9HX0RFQlVHLCAibGliYyIsCiAJCQkJCSJ1c2VkIHNlbmRfdmMgJWRcbiIsIG4pOwogCQkJfQogCkBAIC01NTQsMTUgKzU2NywxMyBAQAogCQl9IGVsc2UgewogCQkJLyogVXNlIGRhdGFncmFtcy4gKi8KIAkJCWlmIChEQkcpIHsKLQkJCQlfX2xpYmNfYW5kcm9pZF9sb2dfcHJpbnQoQU5EUk9JRF9MT0dfREVCVUcsICJsaWJjIiwKLQkJCQkJInVzaW5nIHNlbmRfZGdcbiIpOworCQkJCV9fbGliY19mb3JtYXRfbG9nKEFORFJPSURfTE9HX0RFQlVHLCAibGliYyIsICJ1c2luZyBzZW5kX2RnXG4iKTsKIAkJCX0KIAogCQkJbiA9IHNlbmRfZGcoc3RhdHAsIGJ1ZiwgYnVmbGVuLCBhbnMsIGFuc3NpeiwgJnRlcnJubywKIAkJCQkgICAgbnMsICZ2X2NpcmN1aXQsICZnb3Rzb21ld2hlcmUpOwogCQkJaWYgKERCRykgewotCQkJCV9fbGliY19hbmRyb2lkX2xvZ19wcmludChBTkRST0lEX0xPR19ERUJVRywgImxpYmMiLAotCQkJCQkidXNlZCBzZW5kX2RnICVkXG4iLG4pOworCQkJCV9fbGliY19mb3JtYXRfbG9nKEFORFJPSURfTE9HX0RFQlVHLCAibGliYyIsICJ1c2VkIHNlbmRfZGcgJWRcbiIsbik7CiAJCQl9CiAKIAkJCWlmIChuIDwgMCkKQEAgLTU3MCw4ICs1ODEsOCBAQAogCQkJaWYgKG4gPT0gMCkKIAkJCQlnb3RvIG5leHRfbnM7CiAJCQlpZiAoREJHKSB7Ci0JCQkJX19saWJjX2FuZHJvaWRfbG9nX3ByaW50KEFORFJPSURfTE9HX0RFQlVHLCAibGliYyIsCi0JCQkJCSJ0aW1lPSVkLCAlZFxuIix0aW1lKE5VTEwpLCB0aW1lKE5VTEwpJTIpOworCQkJCV9fbGliY19mb3JtYXRfbG9nKEFORFJPSURfTE9HX0RFQlVHLCAibGliYyIsICJ0aW1lPSVsZFxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZShOVUxMKSk7CiAJCQl9CiAJCQlpZiAodl9jaXJjdWl0KQogCQkJCWdvdG8gc2FtZV9uczsKQEAgLTY0NCw4ICs2NTUsMTYgQEAKIAkJCWVycm5vID0gRVRJTUVET1VUOwkvKiBubyBhbnN3ZXIgb2J0YWluZWQgKi8KIAl9IGVsc2UKIAkJZXJybm8gPSB0ZXJybm87CisKKyNpZiBVU0VfUkVTT0xWX0NBQ0hFCisgICAgICAgIF9yZXNvbHZfY2FjaGVfcXVlcnlfZmFpbGVkKGNhY2hlLCBidWYsIGJ1Zmxlbik7CisjZW5kaWYKKwogCXJldHVybiAoLTEpOwogIGZhaWw6CisjaWYgVVNFX1JFU09MVl9DQUNIRQorCV9yZXNvbHZfY2FjaGVfcXVlcnlfZmFpbGVkKGNhY2hlLCBidWYsIGJ1Zmxlbik7CisjZW5kaWYKIAlyZXNfbmNsb3NlKHN0YXRwKTsKIAlyZXR1cm4gKC0xKTsKIH0KQEAgLTcwNyw4ICs3MjYsNyBAQAogCQl0aW1lb3V0ID0gMTsKIAl9CiAJaWYgKERCRykgewotCQlfX2xpYmNfYW5kcm9pZF9sb2dfcHJpbnQoQU5EUk9JRF9MT0dfREVCVUcsICJsaWJjIiwKLQkJCSJ1c2luZyB0aW1lb3V0IG9mICVkIHNlY1xuIiwgdGltZW91dCk7CisJCV9fbGliY19mb3JtYXRfbG9nKEFORFJPSURfTE9HX0RFQlVHLCAibGliYyIsICJ1c2luZyB0aW1lb3V0IG9mICVkIHNlY1xuIiwgdGltZW91dCk7CiAJfQogCiAJcmV0dXJuIHRpbWVvdXQ7CkBAIC03MzAsNyArNzQ4LDcgQEAKIAl2b2lkICp0bXA7CiAKIAlpZiAoREJHKSB7Ci0JCV9fbGliY19hbmRyb2lkX2xvZ19wcmludChBTkRST0lEX0xPR19ERUJVRywgImxpYmMiLCAidXNpbmcgc2VuZF92Y1xuIik7CisJCV9fbGliY19mb3JtYXRfbG9nKEFORFJPSURfTE9HX0RFQlVHLCAibGliYyIsICJ1c2luZyBzZW5kX3ZjXG4iKTsKIAl9CiAKIAluc2FwID0gZ2V0X25zYWRkcihzdGF0cCwgKHNpemVfdClucyk7CkBAIC05MzEsOCArOTQ5LDcgQEAKIAkJdGltZW91dCA9IGV2Q29uc1RpbWUoKGxvbmcpc2VjLCAwTCk7CiAJCWZpbmlzaCA9IGV2QWRkVGltZShub3csIHRpbWVvdXQpOwogCQlpZiAoREJHKSB7Ci0JCQlfX2xpYmNfYW5kcm9pZF9sb2dfcHJpbnQoQU5EUk9JRF9MT0dfREVCVUcsICJsaWJjIiwKLQkJCQkiICAlZCBzZW5kX3ZjXG4iLCBzb2NrKTsKKwkJCV9fbGliY19mb3JtYXRfbG9nKEFORFJPSURfTE9HX0RFQlVHLCAibGliYyIsICIgICVkIHNlbmRfdmNcbiIsIHNvY2spOwogCQl9CiAKIAkJcmVzID0gcmV0cnlpbmdfc2VsZWN0KHNvY2ssICZyc2V0LCAmd3NldCwgJmZpbmlzaCk7CkBAIC05NDMsOCArOTYwLDggQEAKIGRvbmU6CiAJZmNudGwoc29jaywgRl9TRVRGTCwgb3JpZ2ZsYWdzKTsKIAlpZiAoREJHKSB7Ci0JCV9fbGliY19hbmRyb2lkX2xvZ19wcmludChBTkRST0lEX0xPR19ERUJVRywgImxpYmMiLAotCQkJIiAgJWQgY29ubmVjdF93aXRoX3RpbWVvdXQgcmV0dXJuaW5nICVzXG4iLCBzb2NrLCByZXMpOworCQlfX2xpYmNfZm9ybWF0X2xvZyhBTkRST0lEX0xPR19ERUJVRywgImxpYmMiLAorCQkJIiAgJWQgY29ubmVjdF93aXRoX3RpbWVvdXQgcmV0dXJuaW5nICVkXG4iLCBzb2NrLCByZXMpOwogCX0KIAlyZXR1cm4gcmVzOwogfQpAQCAtOTU5LDcgKzk3Niw3IEBACiAKIHJldHJ5OgogCWlmIChEQkcpIHsKLQkJX19saWJjX2FuZHJvaWRfbG9nX3ByaW50KEFORFJPSURfTE9HX0RFQlVHLCAibGliYyIsICIgICVkIHJldHlpbmdfc2VsZWN0XG4iLCBzb2NrKTsKKwkJX19saWJjX2Zvcm1hdF9sb2coQU5EUk9JRF9MT0dfREVCVUcsICJsaWJjIiwgIiAgJWQgcmV0eWluZ19zZWxlY3RcbiIsIHNvY2spOwogCX0KIAogCW5vdyA9IGV2Tm93VGltZSgpOwpAQCAtOTc5LDcgKzk5Niw3IEBACiAJbiA9IHBzZWxlY3Qoc29jayArIDEsIHJlYWRzZXQsIHdyaXRlc2V0LCBOVUxMLCAmdGltZW91dCwgTlVMTCk7CiAJaWYgKG4gPT0gMCkgewogCQlpZiAoREJHKSB7Ci0JCQlfX2xpYmNfYW5kcm9pZF9sb2dfcHJpbnQoQU5EUk9JRF9MT0dfREVCVUcsICIgbGliYyIsCisJCQlfX2xpYmNfZm9ybWF0X2xvZyhBTkRST0lEX0xPR19ERUJVRywgIiBsaWJjIiwKIAkJCQkiICAlZCByZXRyeWluZ19zZWxlY3QgdGltZW91dFxuIiwgc29jayk7CiAJCX0KIAkJZXJybm8gPSBFVElNRURPVVQ7CkBAIC05ODksNyArMTAwNiw3IEBACiAJCWlmIChlcnJubyA9PSBFSU5UUikKIAkJCWdvdG8gcmV0cnk7CiAJCWlmIChEQkcpIHsKLQkJCV9fbGliY19hbmRyb2lkX2xvZ19wcmludChBTkRST0lEX0xPR19ERUJVRywgImxpYmMiLAorCQkJX19saWJjX2Zvcm1hdF9sb2coQU5EUk9JRF9MT0dfREVCVUcsICJsaWJjIiwKIAkJCQkiICAlZCByZXRyeWluZ19zZWxlY3QgZ290IGVycm9yICVkXG4iLHNvY2ssIG4pOwogCQl9CiAJCXJldHVybiBuOwpAQCAtOTk5LDcgKzEwMTYsNyBAQAogCQlpZiAoZ2V0c29ja29wdChzb2NrLCBTT0xfU09DS0VULCBTT19FUlJPUiwgJmVycm9yLCAmbGVuKSA8IDAgfHwgZXJyb3IpIHsKIAkJCWVycm5vID0gZXJyb3I7CiAJCQlpZiAoREJHKSB7Ci0JCQkJX19saWJjX2FuZHJvaWRfbG9nX3ByaW50KEFORFJPSURfTE9HX0RFQlVHLCAibGliYyIsCisJCQkJX19saWJjX2Zvcm1hdF9sb2coQU5EUk9JRF9MT0dfREVCVUcsICJsaWJjIiwKIAkJCQkJIiAgJWQgcmV0cnlpbmdfc2VsZWN0IGRvdCBlcnJvcjIgJWRcbiIsIHNvY2ssIGVycm5vKTsKIAkJCX0KIApAQCAtMTAwNyw4ICsxMDI0LDggQEAKIAkJfQogCX0KIAlpZiAoREJHKSB7Ci0JCV9fbGliY19hbmRyb2lkX2xvZ19wcmludChBTkRST0lEX0xPR19ERUJVRywgImxpYmMiLAotCQkJIiAgJWQgcmV0cnlpbmdfc2VsZWN0IHJldHVybmluZyAlZCBmb3IgJWRcbiIsc29jaywgbik7CisJCV9fbGliY19mb3JtYXRfbG9nKEFORFJPSURfTE9HX0RFQlVHLCAibGliYyIsCisJCQkiICAlZCByZXRyeWluZ19zZWxlY3QgcmV0dXJuaW5nICVkXG4iLHNvY2ssIG4pOwogCX0KIAogCXJldHVybiBuOwpAQCAtMTE0NCw2ICsxMTYxLDkgQEAKIAkJICogWFhYIC0gcG90ZW50aWFsIHNlY3VyaXR5IGhhemFyZCBjb3VsZAogCQkgKgkgYmUgZGV0ZWN0ZWQgaGVyZS4KIAkJICovCisjaWZkZWYgQU5EUk9JRF9DSEFOR0VTCisJCV9fbGliY19hbmRyb2lkX2xvZ19ldmVudF91aWQoQklPTklDX0VWRU5UX1JFU09MVkVSX09MRF9SRVNQT05TRSk7CisjZW5kaWYKIAkJRHByaW50USgoc3RhdHAtPm9wdGlvbnMgJiBSRVNfREVCVUcpIHx8CiAJCQkoc3RhdHAtPnBmY29kZSAmIFJFU19QUkZfUkVQTFkpLAogCQkJKHN0ZG91dCwgIjs7IG9sZCBhbnN3ZXI6XG4iKSwKQEAgLTExNTcsNiArMTE3Nyw5IEBACiAJCSAqIFhYWCAtIHBvdGVudGlhbCBzZWN1cml0eSBoYXphcmQgY291bGQKIAkJICoJIGJlIGRldGVjdGVkIGhlcmUuCiAJCSAqLworI2lmZGVmIEFORFJPSURfQ0hBTkdFUworCQlfX2xpYmNfYW5kcm9pZF9sb2dfZXZlbnRfdWlkKEJJT05JQ19FVkVOVF9SRVNPTFZFUl9XUk9OR19TRVJWRVIpOworI2VuZGlmCiAJCURwcmludFEoKHN0YXRwLT5vcHRpb25zICYgUkVTX0RFQlVHKSB8fAogCQkJKHN0YXRwLT5wZmNvZGUgJiBSRVNfUFJGX1JFUExZKSwKIAkJCShzdGRvdXQsICI7OyBub3Qgb3VyIHNlcnZlcjpcbiIpLApAQCAtMTE4Nyw2ICsxMjEwLDkgQEAKIAkJICogWFhYIC0gcG90ZW50aWFsIHNlY3VyaXR5IGhhemFyZCBjb3VsZAogCQkgKgkgYmUgZGV0ZWN0ZWQgaGVyZS4KIAkJICovCisjaWZkZWYgQU5EUk9JRF9DSEFOR0VTCisJCV9fbGliY19hbmRyb2lkX2xvZ19ldmVudF91aWQoQklPTklDX0VWRU5UX1JFU09MVkVSX1dST05HX1FVRVJZKTsKKyNlbmRpZgogCQlEcHJpbnRRKChzdGF0cC0+b3B0aW9ucyAmIFJFU19ERUJVRykgfHwKIAkJCShzdGF0cC0+cGZjb2RlICYgUkVTX1BSRl9SRVBMWSksCiAJCQkoc3Rkb3V0LCAiOzsgd3JvbmcgcXVlcnkgbmFtZTpcbiIpLApkaWZmIC0tZ2l0IGEvbGliYy9uZXRic2QvcmVzb2x2L3Jlc19zdGF0ZS5jIGIvbGliYy9uZXRic2QvcmVzb2x2L3Jlc19zdGF0ZS5jCmluZGV4IGUwNTg0NmEuLmRlODJlMWEgMTAwNjQ0Ci0tLSBhL2xpYmMvbmV0YnNkL3Jlc29sdi9yZXNfc3RhdGUuYworKysgYi9saWJjL25ldGJzZC9yZXNvbHYvcmVzX3N0YXRlLmMKQEAgLTQyLDE1ICs0MiwxNSBAQAogI2RlZmluZSBERUJVRyAwCiAKICNpZiBERUJVRwotIyAgaW5jbHVkZSA8bG9nZC5oPgorIyAgaW5jbHVkZSAibGliY19sb2dnaW5nLmgiCiAjICBpbmNsdWRlIDx1bmlzdGQuaD4gIC8qIGZvciBnZXR0aWQoKSAqLwotIyAgZGVmaW5lIEQoLi4uKSAgX19saWJjX2FuZHJvaWRfbG9nX3ByaW50KEFORFJPSURfTE9HX0RFQlVHLCJsaWJjIiwgX19WQV9BUkdTX18pCisjICBkZWZpbmUgRCguLi4pIF9fbGliY19mb3JtYXRfbG9nKEFORFJPSURfTE9HX0RFQlVHLCJsaWJjIiwgX19WQV9BUkdTX18pCiAjZWxzZQogIyAgZGVmaW5lIEQoLi4uKSAgZG97fXdoaWxlKDApCiAjZW5kaWYKIAogc3RhdGljIHB0aHJlYWRfa2V5X3QgICBfcmVzX2tleTsKLXN0YXRpYyBwdGhyZWFkX29uY2VfdCAgX3Jlc19vbmNlOworc3RhdGljIHB0aHJlYWRfb25jZV90ICBfcmVzX29uY2UgPSBQVEhSRUFEX09OQ0VfSU5JVDsKIAogdHlwZWRlZiBzdHJ1Y3QgewogICAgIGludCAgICAgICAgICAgICAgICAgIF9oX2Vycm5vOwpAQCAtNzEsNyArNzEsNyBAQAogICAgICAgICBydC0+X3NlcmlhbCA9IDA7CiAgICAgICAgIHJ0LT5fcGkgPSAoc3RydWN0IHByb3BfaW5mbyopIF9fc3lzdGVtX3Byb3BlcnR5X2ZpbmQoIm5ldC5jaGFuZ2UiKTsKICAgICAgICAgaWYgKHJ0LT5fcGkpIHsKLSAgICAgICAgICAgIHJ0LT5fc2VyaWFsID0gcnQtPl9waS0+c2VyaWFsOworICAgICAgICAgICAgcnQtPl9zZXJpYWwgPSBfX3N5c3RlbV9wcm9wZXJ0eV9zZXJpYWwocnQtPl9waSk7CiAgICAgICAgIH0KICAgICAgICAgbWVtc2V0KHJ0LT5fcnN0YXRpYywgMCwgc2l6ZW9mIHJ0LT5fcnN0YXRpYyk7CiAgICAgfQpAQCAtMTM1LDE0ICsxMzUsMTQgQEAKICAgICAgICAgICAgICAgICByZXR1cm4gcnQ7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgaWYgKHJ0LT5fc2VyaWFsID09IHJ0LT5fcGktPnNlcmlhbCkgeworICAgICAgICBpZiAocnQtPl9zZXJpYWwgPT0gX19zeXN0ZW1fcHJvcGVydHlfc2VyaWFsKHJ0LT5fcGkpKSB7CiAgICAgICAgICAgICAvKiBOb3RoaW5nIGNoYW5nZWQsIHNvIHJldHVybiB0aGUgY3VycmVudCBzdGF0ZSAqLwogICAgICAgICAgICAgRCgiJXM6IHRpZD0lZCBydD0lcCBub3RoaW5nIGNoYW5nZWQsIHJldHVybmluZyIsCiAgICAgICAgICAgICAgIF9fRlVOQ1RJT05fXywgZ2V0dGlkKCksIHJ0KTsKICAgICAgICAgICAgIHJldHVybiBydDsKICAgICAgICAgfQogICAgICAgICAvKiBVcGRhdGUgdGhlIHJlY29yZGVkIHNlcmlhbCBudW1iZXIsIGFuZCBnbyByZXNldCB0aGUgc3RhdGUgKi8KLSAgICAgICAgcnQtPl9zZXJpYWwgPSBydC0+X3BpLT5zZXJpYWw7CisgICAgICAgIHJ0LT5fc2VyaWFsID0gX19zeXN0ZW1fcHJvcGVydHlfc2VyaWFsKHJ0LT5fcGkpOwogICAgICAgICBnb3RvIFJFU0VUX1NUQVRFOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvbGliYy9wcml2YXRlL0Vycm5vUmVzdG9yZXIuaCBiL2xpYmMvcHJpdmF0ZS9FcnJub1Jlc3RvcmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWQ2YWI2MgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvcHJpdmF0ZS9FcnJub1Jlc3RvcmVyLmgKQEAgLTAsMCArMSw0MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpZm5kZWYgRVJSTk9fUkVTVE9SRVJfSAorI2RlZmluZSBFUlJOT19SRVNUT1JFUl9ICisKKyNpbmNsdWRlIDxlcnJuby5oPgorCitjbGFzcyBFcnJub1Jlc3RvcmVyIHsKKyBwdWJsaWM6CisgIGV4cGxpY2l0IEVycm5vUmVzdG9yZXIoKSA6IHNhdmVkX2Vycm5vXyhlcnJubykgeworICB9CisKKyAgfkVycm5vUmVzdG9yZXIoKSB7CisgICAgZXJybm8gPSBzYXZlZF9lcnJub187CisgIH0KKworICB2b2lkIG92ZXJyaWRlKGludCBuZXdfZXJybm8pIHsKKyAgICBzYXZlZF9lcnJub18gPSBuZXdfZXJybm87CisgIH0KKworIHByaXZhdGU6CisgIGludCBzYXZlZF9lcnJub187CisKKyAgLy8gRGlzYWxsb3cgY29weSBhbmQgYXNzaWdubWVudC4KKyAgRXJybm9SZXN0b3Jlcihjb25zdCBFcnJub1Jlc3RvcmVyJik7CisgIHZvaWQgb3BlcmF0b3I9KGNvbnN0IEVycm5vUmVzdG9yZXImKTsKK307CisKKyNlbmRpZiAvLyBFUlJOT19SRVNUT1JFUl9ICmRpZmYgLS1naXQgYS9saWJjL3ByaXZhdGUvS2VybmVsQXJndW1lbnRCbG9jay5oIGIvbGliYy9wcml2YXRlL0tlcm5lbEFyZ3VtZW50QmxvY2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNGVjYTA2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9wcml2YXRlL0tlcm5lbEFyZ3VtZW50QmxvY2suaApAQCAtMCwwICsxLDgwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2lmbmRlZiBLRVJORUxfQVJHVU1FTlRfQkxPQ0tfSAorI2RlZmluZSBLRVJORUxfQVJHVU1FTlRfQkxPQ0tfSAorCisjaW5jbHVkZSA8ZWxmLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8c3lzL2F1eHYuaD4KKworc3RydWN0IGFib3J0X21zZ190OworCisvLyBXaGVuIHRoZSBrZXJuZWwgc3RhcnRzIHRoZSBkeW5hbWljIGxpbmtlciwgaXQgcGFzc2VzIGEgcG9pbnRlciB0byBhIGJsb2NrCisvLyBvZiBtZW1vcnkgY29udGFpbmluZyBhcmdjLCB0aGUgYXJndiBhcnJheSwgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIGFycmF5LAorLy8gYW5kIHRoZSBhcnJheSBvZiBFTEYgYXV4IHZlY3RvcnMuIFRoaXMgY2xhc3MgYnJlYWtzIHRoYXQgYmxvY2sgdXAgaW50byBpdHMKKy8vIGNvbnN0aXR1ZW50cyBmb3IgZWFzeSBhY2Nlc3MuCitjbGFzcyBLZXJuZWxBcmd1bWVudEJsb2NrIHsKKyBwdWJsaWM6CisgIEtlcm5lbEFyZ3VtZW50QmxvY2sodm9pZCogcmF3X2FyZ3MpIHsKKyAgICB1aW50MzJfdCogYXJncyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihyYXdfYXJncyk7CisgICAgYXJnYyA9IHN0YXRpY19jYXN0PGludD4oKmFyZ3MpOworICAgIGFyZ3YgPSByZWludGVycHJldF9jYXN0PGNoYXIqKj4oYXJncyArIDEpOworICAgIGVudnAgPSBhcmd2ICsgYXJnYyArIDE7CisKKyAgICAvLyBTa2lwIG92ZXIgYWxsIGVudmlyb25tZW50IHZhcmlhYmxlIGRlZmluaXRpb25zIHRvIGZpbmQgYXV4IHZlY3Rvci4KKyAgICAvLyBUaGUgZW5kIG9mIHRoZSBlbnZpcm9ubWVudCBibG9jayBpcyBtYXJrZWQgYnkgdHdvIE5VTEwgcG9pbnRlcnMuCisgICAgY2hhcioqIHAgPSBlbnZwOworICAgIHdoaWxlICgqcCAhPSBOVUxMKSB7CisgICAgICArK3A7CisgICAgfQorICAgICsrcDsgLy8gU2tpcCBzZWNvbmQgTlVMTDsKKworICAgIGF1eHYgPSByZWludGVycHJldF9jYXN0PEVsZjMyX2F1eHZfdCo+KHApOworICB9CisKKyAgLy8gU2ltaWxhciB0byA6OmdldGF1eHZhbCBidXQgZG9lc24ndCByZXF1aXJlIHRoZSBsaWJjIGdsb2JhbCB2YXJpYWJsZXMgdG8gYmUgc2V0IHVwLAorICAvLyBzbyBpdCdzIHNhZmUgdG8gY2FsbCB0aGlzIHJlYWxseSBlYXJseSBvbi4gVGhpcyBmdW5jdGlvbiBhbHNvIGxldHMgeW91IGRpc3Rpbmd1aXNoCisgIC8vIGJldHdlZW4gdGhlIGluYWJpbGl0eSB0byBmaW5kIHRoZSBnaXZlbiB0eXBlIGFuZCBpdHMgdmFsdWUganVzdCBoYXBwZW5pbmcgdG8gYmUgMC4KKyAgdW5zaWduZWQgbG9uZyBnZXRhdXh2YWwodW5zaWduZWQgbG9uZyB0eXBlLCBib29sKiBmb3VuZF9tYXRjaCA9IE5VTEwpIHsKKyAgICBmb3IgKEVsZjMyX2F1eHZfdCogdiA9IGF1eHY7IHYtPmFfdHlwZSAhPSBBVF9OVUxMOyArK3YpIHsKKyAgICAgIGlmICh2LT5hX3R5cGUgPT0gdHlwZSkgeworICAgICAgICBpZiAoZm91bmRfbWF0Y2ggIT0gTlVMTCkgeworICAgICAgICAgICAgKmZvdW5kX21hdGNoID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdi0+YV91bi5hX3ZhbDsKKyAgICAgIH0KKyAgICB9CisgICAgaWYgKGZvdW5kX21hdGNoICE9IE5VTEwpIHsKKyAgICAgICpmb3VuZF9tYXRjaCA9IGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gMDsKKyAgfQorCisgIGludCBhcmdjOworICBjaGFyKiogYXJndjsKKyAgY2hhcioqIGVudnA7CisgIEVsZjMyX2F1eHZfdCogYXV4djsKKworICBhYm9ydF9tc2dfdCoqIGFib3J0X21lc3NhZ2VfcHRyOworCisgcHJpdmF0ZToKKyAgLy8gRGlzYWxsb3cgY29weSBhbmQgYXNzaWdubWVudC4KKyAgS2VybmVsQXJndW1lbnRCbG9jayhjb25zdCBLZXJuZWxBcmd1bWVudEJsb2NrJik7CisgIHZvaWQgb3BlcmF0b3I9KGNvbnN0IEtlcm5lbEFyZ3VtZW50QmxvY2smKTsKK307CisKKyNlbmRpZiAvLyBLRVJORUxfQVJHVU1FTlRfQkxPQ0tfSApkaWZmIC0tZ2l0IGEvbGliYy9wcml2YXRlL1Njb3BlZFB0aHJlYWRNdXRleExvY2tlci5oIGIvbGliYy9wcml2YXRlL1Njb3BlZFB0aHJlYWRNdXRleExvY2tlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2YjhlMzcKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3ByaXZhdGUvU2NvcGVkUHRocmVhZE11dGV4TG9ja2VyLmgKQEAgLTAsMCArMSw0MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpZm5kZWYgU0NPUEVEX1BUSFJFQURfTVVURVhfTE9DS0VSX0gKKyNkZWZpbmUgU0NPUEVEX1BUSFJFQURfTVVURVhfTE9DS0VSX0gKKworI2luY2x1ZGUgPHB0aHJlYWQuaD4KKworY2xhc3MgU2NvcGVkUHRocmVhZE11dGV4TG9ja2VyIHsKKyBwdWJsaWM6CisgIGV4cGxpY2l0IFNjb3BlZFB0aHJlYWRNdXRleExvY2tlcihwdGhyZWFkX211dGV4X3QqIG11KSA6IG11XyhtdSkgeworICAgIHB0aHJlYWRfbXV0ZXhfbG9jayhtdV8pOworICB9CisKKyAgflNjb3BlZFB0aHJlYWRNdXRleExvY2tlcigpIHsKKyAgICBwdGhyZWFkX211dGV4X3VubG9jayhtdV8pOworICB9CisKKyBwcml2YXRlOgorICBwdGhyZWFkX211dGV4X3QqIG11XzsKKworICAvLyBEaXNhbGxvdyBjb3B5IGFuZCBhc3NpZ25tZW50LgorICBTY29wZWRQdGhyZWFkTXV0ZXhMb2NrZXIoY29uc3QgU2NvcGVkUHRocmVhZE11dGV4TG9ja2VyJik7CisgIHZvaWQgb3BlcmF0b3I9KGNvbnN0IFNjb3BlZFB0aHJlYWRNdXRleExvY2tlciYpOworfTsKKworI2VuZGlmIC8vIFNDT1BFRF9QVEhSRUFEX01VVEVYX0xPQ0tFUl9ICmRpZmYgLS1naXQgYS9saWJjL3ByaXZhdGUvU2NvcGVkUmVhZGRpci5oIGIvbGliYy9wcml2YXRlL1Njb3BlZFJlYWRkaXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OTc4MDlhCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9wcml2YXRlL1Njb3BlZFJlYWRkaXIuaApAQCAtMCwwICsxLDUwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2lmbmRlZiBTQ09QRURfUkVBRERJUl9ICisjZGVmaW5lIFNDT1BFRF9SRUFERElSX0gKKworI2luY2x1ZGUgPGRpcmVudC5oPgorCitjbGFzcyBTY29wZWRSZWFkZGlyIHsKKyBwdWJsaWM6CisgIFNjb3BlZFJlYWRkaXIoY29uc3QgY2hhciogcGF0aCkgeworICAgIGRpcl8gPSBvcGVuZGlyKHBhdGgpOworICB9CisKKyAgflNjb3BlZFJlYWRkaXIoKSB7CisgICAgaWYgKGRpcl8gIT0gTlVMTCkgeworICAgICAgY2xvc2VkaXIoZGlyXyk7CisgICAgfQorICB9CisKKyAgYm9vbCBJc0JhZCgpIHsKKyAgICByZXR1cm4gZGlyXyA9PSBOVUxMOworICB9CisKKyAgZGlyZW50KiBSZWFkRW50cnkoKSB7CisgICAgcmV0dXJuIHJlYWRkaXIoZGlyXyk7CisgIH0KKworIHByaXZhdGU6CisgIERJUiogZGlyXzsKKworICAvLyBEaXNhbGxvdyBjb3B5IGFuZCBhc3NpZ25tZW50LgorICBTY29wZWRSZWFkZGlyKGNvbnN0IFNjb3BlZFJlYWRkaXImKTsKKyAgdm9pZCBvcGVyYXRvcj0oY29uc3QgU2NvcGVkUmVhZGRpciYpOworfTsKKworI2VuZGlmIC8vIFNDT1BFRF9SRUFERElSX0gKZGlmZiAtLWdpdCBhL2xpYmMvcHJpdmF0ZS9UaHJlYWRMb2NhbEJ1ZmZlci5oIGIvbGliYy9wcml2YXRlL1RocmVhZExvY2FsQnVmZmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTViZDI4YwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvcHJpdmF0ZS9UaHJlYWRMb2NhbEJ1ZmZlci5oCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBfQklPTklDX1RIUkVBRF9MT0NBTF9CVUZGRVJfSF9pbmNsdWRlZAorI2RlZmluZSBfQklPTklDX1RIUkVBRF9MT0NBTF9CVUZGRVJfSF9pbmNsdWRlZAorCisjaW5jbHVkZSA8bWFsbG9jLmg+CisjaW5jbHVkZSA8cHRocmVhZC5oPgorCisvLyBsaWJzdGRjKysgY3VycmVudGx5IGNvbnRhaW5zIF9fY3hhX2d1YXJkX2FjcXVpcmUgYW5kIF9fY3hhX2d1YXJkX3JlbGVhc2UsCisvLyBzbyB3ZSBtYWtlIGRvIHdpdGggbWFjcm9zIGluc3RlYWQgb2YgYSBDKysgY2xhc3MuCisvLyBUT0RPOiBtb3ZlIF9fY3hhX2d1YXJkX2FjcXVpcmUgYW5kIF9fY3hhX2d1YXJkX3JlbGVhc2UgaW50byBsaWJjLgorCisvLyBXZSB1c2VkIHRvIHVzZSBwdGhyZWFkX29uY2UgdG8gaW5pdGlhbGl6ZSB0aGUga2V5cywgYnV0IGxpZmUgaXMgbW9yZSBwcmVkaWN0YWJsZQorLy8gaWYgd2UgYWxsb2NhdGUgdGhlbSBhbGwgdXAgZnJvbnQgd2hlbiB0aGUgQyBsaWJyYXJ5IHN0YXJ0cyB1cCwgdmlhIF9fY29uc3RydWN0b3JfXy4KKworI2RlZmluZSBHTE9CQUxfSU5JVF9USFJFQURfTE9DQUxfQlVGRkVSKG5hbWUpIFwKKyAgc3RhdGljIHB0aHJlYWRfa2V5X3QgX19iaW9uaWNfdGxzXyAjIyBuYW1lICMjIF9rZXk7IFwKKyAgc3RhdGljIHZvaWQgX19iaW9uaWNfdGxzXyAjIyBuYW1lICMjIF9rZXlfZGVzdHJveSh2b2lkKiBidWZmZXIpIHsgXAorICAgIGZyZWUoYnVmZmVyKTsgXAorICB9IFwKKyAgX19hdHRyaWJ1dGVfXygoY29uc3RydWN0b3IpKSBzdGF0aWMgdm9pZCBfX2Jpb25pY190bHNfICMjIG5hbWUgIyMgX2tleV9pbml0KCkgeyBcCisgICAgcHRocmVhZF9rZXlfY3JlYXRlKCZfX2Jpb25pY190bHNfICMjIG5hbWUgIyMgX2tleSwgX19iaW9uaWNfdGxzXyAjIyBuYW1lICMjIF9rZXlfZGVzdHJveSk7IFwKKyAgfQorCisvLyBMZWF2ZXMgIm5hbWVfdGxzX2J1ZmZlciIgYW5kICJuYW1lX3Rsc19idWZmZXJfc2l6ZSIgZGVmaW5lZCBhbmQgaW5pdGlhbGl6ZWQuCisjZGVmaW5lIExPQ0FMX0lOSVRfVEhSRUFEX0xPQ0FMX0JVRkZFUih0eXBlLCBuYW1lLCBieXRlX2NvdW50KSBcCisgIHR5cGUgbmFtZSAjIyBfdGxzX2J1ZmZlciA9IFwKKyAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dHlwZT4ocHRocmVhZF9nZXRzcGVjaWZpYyhfX2Jpb25pY190bHNfICMjIG5hbWUgIyMgX2tleSkpOyBcCisgIGlmIChuYW1lICMjIF90bHNfYnVmZmVyID09IE5VTEwpIHsgXAorICAgIG5hbWUgIyMgX3Rsc19idWZmZXIgPSByZWludGVycHJldF9jYXN0PHR5cGU+KGNhbGxvYygxLCBieXRlX2NvdW50KSk7IFwKKyAgICBwdGhyZWFkX3NldHNwZWNpZmljKF9fYmlvbmljX3Rsc18gIyMgbmFtZSAjIyBfa2V5LCBuYW1lICMjIF90bHNfYnVmZmVyKTsgXAorICB9IFwKKyAgY29uc3Qgc2l6ZV90IG5hbWUgIyMgX3Rsc19idWZmZXJfc2l6ZSBfX2F0dHJpYnV0ZV9fKCh1bnVzZWQpKSA9IGJ5dGVfY291bnQKKworI2VuZGlmIC8vIF9CSU9OSUNfVEhSRUFEX0xPQ0FMX0JVRkZFUl9IX2luY2x1ZGVkCmRpZmYgLS1naXQgYS9saWJjL3ByaXZhdGUvX19kc29faGFuZGxlLlMgYi9saWJjL3ByaXZhdGUvX19kc29faGFuZGxlLlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNlODAxMjguLjAwMDAwMDAKLS0tIGEvbGliYy9wcml2YXRlL19fZHNvX2hhbmRsZS5TCisrKyAvZGV2L251bGwKQEAgLTEsNDIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqICAgIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKLSAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi0gKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCi0gKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAotICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCi0gKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKLSAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jIFRoZSBfX2Rzb19oYW5kbGUgZ2xvYmFsIHZhcmlhYmxlIGlzIHVzZWQgYnkgc3RhdGljCi0jIEMrKyBjb25zdHJ1Y3RvcnMgYW5kIGRlc3RydWN0b3JzIGluIHRoZSBiaW5hcnkuCi0jIFNlZSBodHRwOi8vd3d3LmNvZGVzb3VyY2VyeS5jb20vcHVibGljL2N4eC1hYmkvYWJpLmh0bWwjZHNvLWR0b3IKLSMKLSAgICAgICAgLnNlY3Rpb24gLmJzcwotICAgICAgICAuYWxpZ24gNAotCi0jaWZuZGVmIENSVF9MRUdBQ1lfV09SS0FST1VORAotCS5oaWRkZW4gX19kc29faGFuZGxlCi0jZW5kaWYKLQotICAgICAgICAuZ2xvYmwgX19kc29faGFuZGxlCi1fX2Rzb19oYW5kbGU6Ci0gICAgICAgIC5sb25nIDAKZGlmZiAtLWdpdCBhL2xpYmMvcHJpdmF0ZS9fX2Rzb19oYW5kbGUuaCBiL2xpYmMvcHJpdmF0ZS9fX2Rzb19oYW5kbGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjdjZTdjCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9wcml2YXRlL19fZHNvX2hhbmRsZS5oCkBAIC0wLDAgKzEsMzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworCisjaWZuZGVmIENSVF9MRUdBQ1lfV09SS0FST1VORAorX19hdHRyaWJ1dGVfXyAoKHZpc2liaWxpdHkgKCJoaWRkZW4iKSkpCisjZW5kaWYKK19fYXR0cmlidXRlX18gKChzZWN0aW9uICgiLmJzcyIpKSkKK3ZvaWQgKl9fZHNvX2hhbmRsZSA9ICh2b2lkICopIDA7CmRpZmYgLS1naXQgYS9saWJjL3ByaXZhdGUvX19kc29faGFuZGxlX3NvLlMgYi9saWJjL3ByaXZhdGUvX19kc29faGFuZGxlX3NvLlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc3YTVkN2YuLjAwMDAwMDAKLS0tIGEvbGliYy9wcml2YXRlL19fZHNvX2hhbmRsZV9zby5TCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqICAgIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKLSAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi0gKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCi0gKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAotICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCi0gKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKLSAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jIFRoZSBfX2Rzb19oYW5kbGUgZ2xvYmFsIHZhcmlhYmxlIGlzIHVzZWQgYnkgc3RhdGljCi0jIEMrKyBjb25zdHJ1Y3RvcnMgYW5kIGRlc3RydWN0b3JzIGluIHRoZSBiaW5hcnkuCi0jIFNlZSBodHRwOi8vd3d3LmNvZGVzb3VyY2VyeS5jb20vcHVibGljL2N4eC1hYmkvYWJpLmh0bWwjZHNvLWR0b3IKLSMKLQkuZGF0YQotICAgICAgICAuYWxpZ24gNAotCS5oaWRkZW4gX19kc29faGFuZGxlCi0gICAgICAgIC5nbG9ibCBfX2Rzb19oYW5kbGUKLV9fZHNvX2hhbmRsZToKLSAgICAgICAgLmxvbmcgX19kc29faGFuZGxlCmRpZmYgLS1naXQgYS9saWJjL3ByaXZhdGUvX19kc29faGFuZGxlX3NvLmggYi9saWJjL3ByaXZhdGUvX19kc29faGFuZGxlX3NvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzMyNzk5YgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvcHJpdmF0ZS9fX2Rzb19oYW5kbGVfc28uaApAQCAtMCwwICsxLDMyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKworX19hdHRyaWJ1dGVfXyAoKHZpc2liaWxpdHkgKCJoaWRkZW4iKSkpCitfX2F0dHJpYnV0ZV9fICgoc2VjdGlvbiAoIi5kYXRhIikpKQordm9pZCAqX19kc29faGFuZGxlID0gJl9fZHNvX2hhbmRsZTsKZGlmZiAtLWdpdCBhL2xpYmMvcHJpdmF0ZS9hcnBhX25hbWVzZXIuaCBiL2xpYmMvcHJpdmF0ZS9hcnBhX25hbWVzZXIuaAppbmRleCA0MzhkYzA0Li44MTE5NWI1IDEwMDY0NAotLS0gYS9saWJjL3ByaXZhdGUvYXJwYV9uYW1lc2VyLmgKKysrIGIvbGliYy9wcml2YXRlL2FycGFfbmFtZXNlci5oCkBAIC01NjcsOSArNTY3LDggQEAKICNlbmRpZgogCiAjaWYgMAotIyAgaW5jbHVkZSA8bG9nZC5oPgotIyAgZGVmaW5lICBYTE9HKC4uLikgICBcCi0gICAgX19saWJjX2FuZHJvaWRfbG9nX3ByaW50KEFORFJPSURfTE9HX0RFQlVHLCJsaWJjIixfX1ZBX0FSR1NfXykKKyMgIGluY2x1ZGUgImxpYmNfbG9nZ2luZy5oIgorIyAgZGVmaW5lIFhMT0coLi4uKSAgX19saWJjX2Zvcm1hdF9sb2coQU5EUk9JRF9MT0dfREVCVUcsImxpYmMiLF9fVkFfQVJHU19fKQogI2Vsc2UKICNkZWZpbmUgIFhMT0coLi4uKSAgIGRvIHt9IHdoaWxlICgwKQogI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL3ByaXZhdGUvYmlvbmljX2F0b21pY19hcm0uaCBiL2xpYmMvcHJpdmF0ZS9iaW9uaWNfYXRvbWljX2FybS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiYjYzOWUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3ByaXZhdGUvYmlvbmljX2F0b21pY19hcm0uaApAQCAtMCwwICsxLDIxMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisjaWZuZGVmIEJJT05JQ19BVE9NSUNfQVJNX0gKKyNkZWZpbmUgQklPTklDX0FUT01JQ19BUk1fSAorCisjaW5jbHVkZSA8bWFjaGluZS9jcHUtZmVhdHVyZXMuaD4KKworLyogU29tZSBvZiB0aGUgaGFyd2FyZSBpbnN0cnVjdGlvbnMgdXNlZCBiZWxvdyBhcmUgbm90IGF2YWlsYWJsZSBpbiBUaHVtYi0xCisgKiBtb2RlICh0aGV5IGFyZSBpZiB5b3UgYnVpbGQgaW4gQVJNIG9yIFRodW1iLTIgbW9kZSB0aG91Z2gpLiBUbyBzb2x2ZSB0aGlzCisgKiBwcm9ibGVtLCB3ZSdyZSBnb2luZyB0byB1c2UgdGhlIHNhbWUgdGVjaG5pcXVlIHRoYW4gbGliYXRvbWljc19vcHMsCisgKiB3aGljaCBpcyB0byB0ZW1wb3JhcmlseSBzd2l0Y2ggdG8gQVJNLCBkbyB0aGUgb3BlcmF0aW9uLCB0aGVuIHN3aXRjaAorICogYmFjayB0byBUaHVtYi0xLgorICoKKyAqIFRoaXMgcmVzdWx0cyBpbiB0d28gJ2J4JyBqdW1wcywganVzdCBsaWtlIGEgbm9ybWFsIGZ1bmN0aW9uIGNhbGwsIGJ1dAorICogZXZlcnl0aGluZyBpcyBrZXB0IGlubGluZWQsIGF2b2lkcyBsb2FkaW5nIG9yIGNvbXB1dGluZyB0aGUgZnVuY3Rpb24ncworICogYWRkcmVzcywgYW5kIHByZXZlbnRzIGEgbGl0dGxlIEktY2FjaGUgdHJhc2hpbmcgdG9vLgorICoKKyAqIEhvd2V2ZXIsIGl0IGlzIGhpZ2hseSByZWNvbW1lbmRlZCB0byBhdm9pZCBjb21waWxpbmcgYW55IEMgbGlicmFyeSBzb3VyY2UKKyAqIGZpbGUgdGhhdCB1c2UgdGhlc2UgZnVuY3Rpb25zIGluIFRodW1iLTEgbW9kZS4KKyAqCisgKiBEZWZpbmUgdGhyZWUgaGVscGVyIG1hY3JvcyB0byBpbXBsZW1lbnQgdGhpczoKKyAqLworI2lmIGRlZmluZWQoX190aHVtYl9fKSAmJiAhZGVmaW5lZChfX3RodW1iMl9fKQorIyAgZGVmaW5lICBfX0FUT01JQ19TV0lUQ0hfVE9fQVJNIFwKKyAgICAgICAgICAgICJhZHIgcjMsIDVmXG4iIFwKKyAgICAgICAgICAgICJieCAgcjNcbiIgXAorICAgICAgICAgICAgIi5hbGlnblxuIiBcCisgICAgICAgICAgICAiLmFybVxuIiBcCisgICAgICAgICI1OlxuIgorLyogbm90ZTogdGhlIGxlYWRpbmcgXG4gYmVsb3cgaXMgaW50ZW50aW9uYWwgKi8KKyMgIGRlZmluZSBfX0FUT01JQ19TV0lUQ0hfVE9fVEhVTUIgXAorICAgICAgICAgICAgIlxuIiBcCisgICAgICAgICAgICAiYWRyIHIzLCA2ZlxuIiBcCisgICAgICAgICAgICAiYnggIHIzXG4iIFwKKyAgICAgICAgICAgICIudGh1bWIiIFwKKyAgICAgICAgIjY6XG4iCisKKyMgIGRlZmluZSBfX0FUT01JQ19DTE9CQkVSUyAgICJyMyIgIC8qIGxpc3Qgb2YgY2xvYmJlcmVkIHJlZ2lzdGVycyAqLworCisvKiBXYXJuIHRoZSB1c2VyIHRoYXQgQVJNIG1vZGUgc2hvdWxkIHJlYWxseSBiZSBwcmVmZXJyZWQhICovCisjICB3YXJuaW5nIFJlYnVpbGRpbmcgdGhpcyBzb3VyY2UgZmlsZSBpbiBBUk0gbW9kZSBpcyBoaWdobHkgcmVjb21tZW5kZWQgZm9yIHBlcmZvcm1hbmNlISEKKworI2Vsc2UKKyMgIGRlZmluZSAgX19BVE9NSUNfU1dJVENIX1RPX0FSTSAgIC8qIG5vdGhpbmcgKi8KKyMgIGRlZmluZSAgX19BVE9NSUNfU1dJVENIX1RPX1RIVU1CIC8qIG5vdGhpbmcgKi8KKyMgIGRlZmluZSAgX19BVE9NSUNfQ0xPQkJFUlMgICAgICAgIC8qIG5vdGhpbmcgKi8KKyNlbmRpZgorCisKKy8qIERlZmluZSBhIGZ1bGwgbWVtb3J5IGJhcnJpZXIsIHRoaXMgaXMgb25seSBuZWVkZWQgaWYgd2UgYnVpbGQgdGhlCisgKiBwbGF0Zm9ybSBmb3IgYSBtdWx0aS1jb3JlIGRldmljZS4gRm9yIHRoZSByZWNvcmQsIHVzaW5nIGEgJ2RtYicKKyAqIGluc3RydWN0aW9uIG9uIGEgTmV4dXMgT25lIGRldmljZSBjYW4gdGFrZSB1cCB0byAxODAgbnMgZXZlbiBpZgorICogaXQgaXMgY29tcGxldGVseSB1bi1uZWNlc3Nhcnkgb24gdGhpcyBkZXZpY2UuCisgKgorICogTk9URTogVGhpcyBpcyB3aGVyZSB0aGUgcGxhdGZvcm0gYW5kIE5ESyBoZWFkZXJzIGF0b21pYyBoZWFkZXJzIGFyZQorICogICAgICAgIGdvaW5nIHRvIGRpdmVyZ2UuIFdpdGggdGhlIE5ESywgd2UgZG9uJ3Qga25vdyBpZiB0aGUgZ2VuZXJhdGVkCisgKiAgICAgICAgY29kZSBpcyBnb2luZyB0byBydW4gb24gYSBzaW5nbGUgb3IgbXVsdGktY29yZSBkZXZpY2UsIHNvIHdlCisgKiAgICAgICAgbmVlZCB0byBiZSBjYXV0aW91cy4KKyAqCisgKiAgICAgICAgSS5lLiBvbiBzaW5nbGUtY29yZSBkZXZpY2VzLCB0aGUgaGVscGVyIGltbWVkaWF0ZWx5IHJldHVybnMsCisgKiAgICAgICAgb24gbXVsdGktY29yZSBkZXZpY2VzLCBpdCB1c2VzICJkbWIiIG9yIGFueSBvdGhlciBtZWFucyB0bworICogICAgICAgIHBlcmZvcm0gYSBmdWxsLW1lbW9yeSBiYXJyaWVyLgorICoKKyAqIFRoZXJlIGFyZSB0aHJlZSBjYXNlcyB0byBjb25zaWRlciBmb3IgdGhlIHBsYXRmb3JtOgorICoKKyAqICAgIC0gbXVsdGktY29yZSBBUk12Ny1BICAgICAgID0+IHVzZSB0aGUgJ2RtYicgaGFyZHdhcmUgaW5zdHJ1Y3Rpb24KKyAqICAgIC0gbXVsdGktY29yZSBBUk12NiAgICAgICAgID0+IHVzZSB0aGUgY29wcm9jZXNzb3IKKyAqICAgIC0gc2luZ2xlIGNvcmUgQVJNdjYrICAgICAgID0+IGRvIG5vdCB1c2UgYW55IGhhcmR3YXJlIGJhcnJpZXIKKyAqLworI2lmIGRlZmluZWQoQU5EUk9JRF9TTVApICYmIEFORFJPSURfU01QID09IDEKKworLyogU2FuaXR5IGNoZWNrLCBtdWx0aS1jb3JlIGlzIG9ubHkgc3VwcG9ydGVkIHN0YXJ0aW5nIGZyb20gQVJNdjYgKi8KKyMgIGlmIF9fQVJNX0FSQ0hfXyA8IDYKKyMgICAgZXJyb3IgQU5EUk9JRF9TTVAgc2hvdWxkIG5vdCBiZSBzZXQgdG8gMSBmb3IgYW4gQVJNIGFyY2hpdGVjdHVyZSBsZXNzIHRoYW4gNgorIyAgZW5kaWYKKworIyAgaWZkZWYgX19BUk1fSEFWRV9ETUIKKy8qIEZvciBBUk12Ny1BLCB3ZSBjYW4gdXNlIHRoZSAnZG1iJyBpbnN0cnVjdGlvbiBkaXJlY3RseSAqLworX19BVE9NSUNfSU5MSU5FX18gdm9pZAorX19iaW9uaWNfbWVtb3J5X2JhcnJpZXIodm9pZCkKK3sKKyAgICAvKiBOb3RlOiB3ZSBhbHdheXMgYnVpbGQgaW4gQVJNIG9yIFRodW1iLTIgb24gQVJNdjctQSwgc28gZG9uJ3QKKyAgICAgKiBib3RoZXIgd2l0aCBfX0FUT01JQ19TV0lUQ0hfVE9fQVJNICovCisgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCAiZG1iIiA6IDogOiAibWVtb3J5IiApOworfQorIyAgZWxzZSAvKiAhX19BUk1fSEFWRV9ETUIgKi8KKy8qIE90aGVyd2lzZSwgaS5lLiBmb3IgbXVsdGktY29yZSBBUk12Niwgd2UgbmVlZCB0byB1c2UgdGhlIGNvcHJvY2Vzc29yLAorICogd2hpY2ggcmVxdWlyZXMgdGhlIHVzZSBvZiBhIGdlbmVyYWwtcHVycG9zZSByZWdpc3Rlciwgd2hpY2ggaXMgc2xpZ2h0bHkKKyAqIGxlc3MgZWZmaWNpZW50LgorICovCitfX0FUT01JQ19JTkxJTkVfXyB2b2lkCitfX2Jpb25pY19tZW1vcnlfYmFycmllcih2b2lkKQoreworICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgKKyAgICAgICAgX19TV0lUQ0hfVE9fQVJNCisgICAgICAgICJtY3IgcDE1LCAwLCAlMCwgYzcsIGMxMCwgNSIKKyAgICAgICAgX19TV0lUQ0hfVE9fVEhVTUIKKyAgICAgICAgOiA6ICJyIiAoMCkgOiBfX0FUT01JQ19DTE9CQkVSUyAibWVtb3J5Iik7Cit9CisjICBlbmRpZiAvKiAhX19BUk1fSEFWRV9ETUIgKi8KKyNlbHNlIC8qICFBTkRST0lEX1NNUCAqLworX19BVE9NSUNfSU5MSU5FX18gdm9pZAorX19iaW9uaWNfbWVtb3J5X2JhcnJpZXIodm9pZCkKK3sKKyAgICAvKiBBIHNpbXBsZSBjb21waWxlciBiYXJyaWVyICovCisgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCAiIiA6IDogOiAibWVtb3J5IiApOworfQorI2VuZGlmIC8qICFBTkRST0lEX1NNUCAqLworCisjaWZuZGVmIF9fQVJNX0hBVkVfTERSRVhfU1RSRVgKKyNlcnJvciBPbmx5IEFSTSBkZXZpY2VzIHdoaWNoIGhhdmUgTERSRVggLyBTVFJFWCBhcmUgc3VwcG9ydGVkCisjZW5kaWYKKworLyogQ29tcGFyZS1hbmQtc3dhcCwgd2l0aG91dCBhbnkgZXhwbGljaXQgYmFycmllcnMuIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9ucworICogcmV0dXJucyAwIG9uIHN1Y2Nlc3MsIGFuZCAxIG9uIGZhaWx1cmUuIFRoZSBvcHBvc2l0ZSBjb252ZW50aW9uIGlzIHR5cGljYWxseQorICogdXNlZCBvbiBvdGhlciBwbGF0Zm9ybXMuCisgKi8KK19fQVRPTUlDX0lOTElORV9fIGludAorX19iaW9uaWNfY21weGNoZyhpbnQzMl90IG9sZF92YWx1ZSwgaW50MzJfdCBuZXdfdmFsdWUsIHZvbGF0aWxlIGludDMyX3QqIHB0cikKK3sKKyAgICBpbnQzMl90IHByZXYsIHN0YXR1czsKKyAgICBkbyB7CisgICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgKKyAgICAgICAgICAgIF9fQVRPTUlDX1NXSVRDSF9UT19BUk0KKyAgICAgICAgICAgICJsZHJleCAlMCwgWyUzXVxuIgorICAgICAgICAgICAgIm1vdiAlMSwgIzBcbiIKKyAgICAgICAgICAgICJ0ZXEgJTAsICU0XG4iCisjaWZkZWYgX190aHVtYjJfXworICAgICAgICAgICAgIml0IGVxXG4iCisjZW5kaWYKKyAgICAgICAgICAgICJzdHJleGVxICUxLCAlNSwgWyUzXSIKKyAgICAgICAgICAgIF9fQVRPTUlDX1NXSVRDSF9UT19USFVNQgorICAgICAgICAgICAgOiAiPSZyIiAocHJldiksICI9JnIiIChzdGF0dXMpLCAiK20iKCpwdHIpCisgICAgICAgICAgICA6ICJyIiAocHRyKSwgIklyIiAob2xkX3ZhbHVlKSwgInIiIChuZXdfdmFsdWUpCisgICAgICAgICAgICA6IF9fQVRPTUlDX0NMT0JCRVJTICJjYyIpOworICAgIH0gd2hpbGUgKF9fYnVpbHRpbl9leHBlY3Qoc3RhdHVzICE9IDAsIDApKTsKKyAgICByZXR1cm4gcHJldiAhPSBvbGRfdmFsdWU7Cit9CisKKy8qIFN3YXAgb3BlcmF0aW9uLCB3aXRob3V0IGFueSBleHBsaWNpdCBiYXJyaWVycy4gKi8KK19fQVRPTUlDX0lOTElORV9fIGludDMyX3QKK19fYmlvbmljX3N3YXAoaW50MzJfdCBuZXdfdmFsdWUsIHZvbGF0aWxlIGludDMyX3QqIHB0cikKK3sKKyAgICBpbnQzMl90IHByZXYsIHN0YXR1czsKKyAgICBkbyB7CisgICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgKKyAgICAgICAgICAgIF9fQVRPTUlDX1NXSVRDSF9UT19BUk0KKyAgICAgICAgICAgICJsZHJleCAlMCwgWyUzXVxuIgorICAgICAgICAgICAgInN0cmV4ICUxLCAlNCwgWyUzXSIKKyAgICAgICAgICAgIF9fQVRPTUlDX1NXSVRDSF9UT19USFVNQgorICAgICAgICAgICAgOiAiPSZyIiAocHJldiksICI9JnIiIChzdGF0dXMpLCAiK20iICgqcHRyKQorICAgICAgICAgICAgOiAiciIgKHB0ciksICJyIiAobmV3X3ZhbHVlKQorICAgICAgICAgICAgOiBfX0FUT01JQ19DTE9CQkVSUyAiY2MiKTsKKyAgICB9IHdoaWxlIChfX2J1aWx0aW5fZXhwZWN0KHN0YXR1cyAhPSAwLCAwKSk7CisgICAgcmV0dXJuIHByZXY7Cit9CisKKy8qIEF0b21pYyBpbmNyZW1lbnQgLSB3aXRob3V0IGFueSBiYXJyaWVycworICogVGhpcyByZXR1cm5zIHRoZSBvbGQgdmFsdWUKKyAqLworX19BVE9NSUNfSU5MSU5FX18gaW50MzJfdAorX19iaW9uaWNfYXRvbWljX2luYyh2b2xhdGlsZSBpbnQzMl90KiBwdHIpCit7CisgICAgaW50MzJfdCBwcmV2LCB0bXAsIHN0YXR1czsKKyAgICBkbyB7CisgICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgKKyAgICAgICAgICAgIF9fQVRPTUlDX1NXSVRDSF9UT19BUk0KKyAgICAgICAgICAgICJsZHJleCAlMCwgWyU0XVxuIgorICAgICAgICAgICAgImFkZCAlMSwgJTAsICMxXG4iCisgICAgICAgICAgICAic3RyZXggJTIsICUxLCBbJTRdIgorICAgICAgICAgICAgX19BVE9NSUNfU1dJVENIX1RPX1RIVU1CCisgICAgICAgICAgICA6ICI9JnIiIChwcmV2KSwgIj0mciIgKHRtcCksICI9JnIiIChzdGF0dXMpLCAiK20iKCpwdHIpCisgICAgICAgICAgICA6ICJyIiAocHRyKQorICAgICAgICAgICAgOiBfX0FUT01JQ19DTE9CQkVSUyAiY2MiKTsKKyAgICB9IHdoaWxlIChfX2J1aWx0aW5fZXhwZWN0KHN0YXR1cyAhPSAwLCAwKSk7CisgICAgcmV0dXJuIHByZXY7Cit9CisKKy8qIEF0b21pYyBkZWNyZW1lbnQgLSB3aXRob3V0IGFueSBiYXJyaWVycworICogVGhpcyByZXR1cm5zIHRoZSBvbGQgdmFsdWUuCisgKi8KK19fQVRPTUlDX0lOTElORV9fIGludDMyX3QKK19fYmlvbmljX2F0b21pY19kZWModm9sYXRpbGUgaW50MzJfdCogcHRyKQoreworICAgIGludDMyX3QgcHJldiwgdG1wLCBzdGF0dXM7CisgICAgZG8geworICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCisgICAgICAgICAgICBfX0FUT01JQ19TV0lUQ0hfVE9fQVJNCisgICAgICAgICAgICAibGRyZXggJTAsIFslNF1cbiIKKyAgICAgICAgICAgICJzdWIgJTEsICUwLCAjMVxuIgorICAgICAgICAgICAgInN0cmV4ICUyLCAlMSwgWyU0XSIKKyAgICAgICAgICAgIF9fQVRPTUlDX1NXSVRDSF9UT19USFVNQgorICAgICAgICAgICAgOiAiPSZyIiAocHJldiksICI9JnIiICh0bXApLCAiPSZyIiAoc3RhdHVzKSwgIittIigqcHRyKQorICAgICAgICAgICAgOiAiciIgKHB0cikKKyAgICAgICAgICAgIDogX19BVE9NSUNfQ0xPQkJFUlMgImNjIik7CisgICAgfSB3aGlsZSAoX19idWlsdGluX2V4cGVjdChzdGF0dXMgIT0gMCwgMCkpOworICAgIHJldHVybiBwcmV2OworfQorCisjZW5kaWYgLyogU1lTX0FUT01JQ1NfQVJNX0ggKi8KZGlmZiAtLWdpdCBhL2xpYmMvcHJpdmF0ZS9iaW9uaWNfYXRvbWljX2djY19idWlsdGluLmggYi9saWJjL3ByaXZhdGUvYmlvbmljX2F0b21pY19nY2NfYnVpbHRpbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5MTlmN2YKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3ByaXZhdGUvYmlvbmljX2F0b21pY19nY2NfYnVpbHRpbi5oCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworI2lmbmRlZiBCSU9OSUNfQVRPTUlDX0dDQ19CVUlMVElOX0gKKyNkZWZpbmUgQklPTklDX0FUT01JQ19HQ0NfQlVJTFRJTl9ICisKKy8qIFRoaXMgaGVhZGVyIGZpbGUgaXMgdXNlZCBieSBkZWZhdWx0IGlmIHdlIGRvbid0IGhhdmUgb3B0aW1pemVkIGF0b21pYworICogcm91dGluZXMgZm9yIGEgZ2l2ZW4gcGxhdGZvcm0uIFNlZSBiaW9uaWNfYXRvbWljX2FybS5oIGFuZAorICogYmlvbmljX2F0b21pY194ODYuaCBmb3IgZXhhbXBsZXMuCisgKi8KKworX19BVE9NSUNfSU5MSU5FX18gdm9pZAorX19iaW9uaWNfbWVtb3J5X2JhcnJpZXIodm9pZCkKK3sKKyAgICBfX3N5bmNfc3luY2hyb25pemUoKTsKK30KKworX19BVE9NSUNfSU5MSU5FX18gaW50CitfX2Jpb25pY19jbXB4Y2hnKGludDMyX3Qgb2xkX3ZhbHVlLCBpbnQzMl90IG5ld192YWx1ZSwgdm9sYXRpbGUgaW50MzJfdCogcHRyKQoreworICAgIC8qIFdlIG11c3QgcmV0dXJuIDAgb24gc3VjY2VzcyAqLworICAgIHJldHVybiBfX3N5bmNfdmFsX2NvbXBhcmVfYW5kX3N3YXAocHRyLCBvbGRfdmFsdWUsIG5ld192YWx1ZSkgIT0gb2xkX3ZhbHVlOworfQorCitfX0FUT01JQ19JTkxJTkVfXyBpbnQzMl90CitfX2Jpb25pY19zd2FwKGludDMyX3QgbmV3X3ZhbHVlLCB2b2xhdGlsZSBpbnQzMl90KiBwdHIpCit7CisgICAgaW50MzJfdCBvbGRfdmFsdWU7CisgICAgZG8geworICAgICAgICBvbGRfdmFsdWUgPSAqcHRyOworICAgIH0gd2hpbGUgKF9fc3luY192YWxfY29tcGFyZV9hbmRfc3dhcChwdHIsIG9sZF92YWx1ZSwgbmV3X3ZhbHVlKSAhPSBvbGRfdmFsdWUpOworICAgIHJldHVybiBvbGRfdmFsdWU7Cit9CisKK19fQVRPTUlDX0lOTElORV9fIGludDMyX3QKK19fYmlvbmljX2F0b21pY19pbmModm9sYXRpbGUgaW50MzJfdCogcHRyKQoreworICAgIC8qIFdlIG11c3QgcmV0dXJuIHRoZSBvbGQgdmFsdWUgKi8KKyAgICByZXR1cm4gX19zeW5jX2ZldGNoX2FuZF9hZGQocHRyLCAxKTsKK30KKworX19BVE9NSUNfSU5MSU5FX18gaW50MzJfdAorX19iaW9uaWNfYXRvbWljX2RlYyh2b2xhdGlsZSBpbnQzMl90KiBwdHIpCit7CisgICAgLyogV2UgbXVzdCByZXR1cm4gdGhlIG9sZCB2YWx1ZSAqLworICAgIHJldHVybiBfX3N5bmNfZmV0Y2hfYW5kX2FkZChwdHIsIC0xKTsKK30KKworI2VuZGlmIC8qIEJJT05JQ19BVE9NSUNfR0NDX0JVSUxUSU5fSCAqLwpkaWZmIC0tZ2l0IGEvbGliYy9wcml2YXRlL2Jpb25pY19hdG9taWNfaW5saW5lLmggYi9saWJjL3ByaXZhdGUvYmlvbmljX2F0b21pY19pbmxpbmUuaAppbmRleCA5NTc2NmUxLi42ODE5YWY2IDEwMDY0NAotLS0gYS9saWJjL3ByaXZhdGUvYmlvbmljX2F0b21pY19pbmxpbmUuaAorKysgYi9saWJjL3ByaXZhdGUvYmlvbmljX2F0b21pY19pbmxpbmUuaApAQCAtNDMsNjIgKzQzLDIzIEBACiBleHRlcm4gIkMiIHsKICNlbmRpZgogCi0vKgotICogRGVmaW5lIHRoZSBmdWxsIG1lbW9yeSBiYXJyaWVyIGZvciBhbiBTTVAgc3lzdGVtLiAgVGhpcyBpcwotICogcGxhdGZvcm0tc3BlY2lmaWMuCisvKiBEZWZpbmUgX19BVE9NSUNfSU5MSU5FX18gdG8gY29udHJvbCB0aGUgaW5saW5pbmcgb2YgYWxsIGF0b21pY3MKKyAqIGZ1bmN0aW9ucyBkZWNsYXJlZCBoZXJlLiBGb3IgYSBzbGlnaHQgcGVyZm9ybWFuY2UgYm9vc3QsIHdlIHdhbnQKKyAqIGFsbCBvZiB0aGVtIHRvIGJlIGFsd2F5c19pbmxpbmUKICAqLworI2RlZmluZSAgX19BVE9NSUNfSU5MSU5FX18gIHN0YXRpYyBfX2lubGluZV9fIF9fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKQogCiAjaWZkZWYgX19hcm1fXwotI2luY2x1ZGUgPG1hY2hpbmUvY3B1LWZlYXR1cmVzLmg+Ci0KLS8qCi0gKiBGb3IgQVJNdjZLIHdlIG5lZWQgdG8gaXNzdWUgYSBzcGVjaWZpYyBNQ1IgaW5zdGVhZCBvZiB0aGUgRE1CLCBzaW5jZQotICogdGhhdCB3YXNuJ3QgYWRkZWQgdW50aWwgdjcuICBGb3IgYW55dGhpbmcgb2xkZXIsIFNNUCBpc24ndCByZWxldmFudC4KLSAqIFNpbmNlIHdlIGRvbid0IGhhdmUgYW4gQVJNdjZLIHRvIHRlc3Qgd2l0aCwgd2UncmUgbm90IGdvaW5nIHRvIGRlYWwKLSAqIHdpdGggdGhhdCBub3cuCi0gKgotICogVGhlIERNQiBpbnN0cnVjdGlvbiBpcyBmb3VuZCBpbiB0aGUgQVJNIGFuZCBUaHVtYjIgaW5zdHJ1Y3Rpb24gc2V0cy4KLSAqIFRoaXMgd2lsbCBmYWlsIG9uIHBsYWluIDE2LWJpdCBUaHVtYi4KLSAqLwotI2lmIGRlZmluZWQoX19BUk1fSEFWRV9ETUIpCi0jIGRlZmluZSBfQU5EUk9JRF9NRU1CQVJfRlVMTF9TTVAoKSBcCi0gICAgZG8geyBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImRtYiIgOjo6ICJtZW1vcnkiKTsgfSB3aGlsZSAoMCkKKyMgIGluY2x1ZGUgImJpb25pY19hdG9taWNfYXJtLmgiCisjZWxpZiBkZWZpbmVkKF9faTM4Nl9fKQorIyAgaW5jbHVkZSAiYmlvbmljX2F0b21pY194ODYuaCIKKyNlbGlmIGRlZmluZWQoX19taXBzX18pCisjICBpbmNsdWRlICJiaW9uaWNfYXRvbWljX21pcHMuaCIKICNlbHNlCi0jIGRlZmluZSBfQU5EUk9JRF9NRU1CQVJfRlVMTF9TTVAoKSAgQVJNX1NNUF9kZWZpbmVkX2J1dF9ub19ETUIoKQorIyAgaW5jbHVkZSAiYmlvbmljX2F0b21pY19nY2NfYnVpbHRpbi5oIgogI2VuZGlmCiAKLSNlbGlmIGRlZmluZWQoX19pMzg2X18pIHx8IGRlZmluZWQoX194ODZfNjRfXykKLS8qCi0gKiBGb3IgcmVjZW50IHg4Niwgd2UgY2FuIHVzZSB0aGUgU1NFMiBtZmVuY2UgaW5zdHJ1Y3Rpb24uCi0gKi8KLSMgZGVmaW5lIF9BTkRST0lEX01FTUJBUl9GVUxMX1NNUCgpIFwKLSAgICBkbyB7IF9fYXNtX18gX192b2xhdGlsZV9fICgibWZlbmNlIiA6OjogIm1lbW9yeSIpOyB9IHdoaWxlICgwKQotCi0jZWxzZQotLyoKLSAqIEltcGxlbWVudGF0aW9uIG5vdCBkZWZpbmVkIGZvciB0aGlzIHBsYXRmb3JtLiAgSG9wZWZ1bGx5IHdlJ3JlIGJ1aWxkaW5nCi0gKiBpbiB1bmlwcm9jZXNzb3IgbW9kZS4KLSAqLwotIyBkZWZpbmUgX0FORFJPSURfTUVNQkFSX0ZVTExfU01QKCkgIFNNUF9iYXJyaWVyX25vdF9kZWZpbmVkX2Zvcl9wbGF0Zm9ybSgpCi0jZW5kaWYKLQotCi0vKgotICogRnVsbCBiYXJyaWVyLiAgT24gdW5pcHJvY2Vzc29ycyB0aGlzIGlzIGp1c3QgYSBjb21waWxlciByZW9yZGVyIGJhcnJpZXIsCi0gKiB3aGljaCBlbnN1cmVzIHRoYXQgdGhlIHN0YXRlbWVudHMgYXBwZWFyaW5nIGFib3ZlIHRoZSBiYXJyaWVyIGluIHRoZSBDL0MrKwotICogY29kZSB3aWxsIGJlIGlzc3VlZCBhZnRlciB0aGUgc3RhdGVtZW50cyBhcHBlYXJpbmcgYmVsb3cgdGhlIGJhcnJpZXIuCi0gKgotICogRm9yIFNNUCB0aGlzIGFsc28gaW5jbHVkZXMgYSBtZW1vcnkgYmFycmllciBpbnN0cnVjdGlvbi4gIE9uIGFuIEFSTQotICogQ1BVIHRoaXMgbWVhbnMgdGhhdCB0aGUgY3VycmVudCBjb3JlIHdpbGwgZmx1c2ggcGVuZGluZyB3cml0ZXMsIHdhaXQKLSAqIGZvciBwZW5kaW5nIHJlYWRzIHRvIGNvbXBsZXRlLCBhbmQgZGlzY2FyZCBhbnkgY2FjaGVkIHJlYWRzIHRoYXQgY291bGQKLSAqIGJlIHN0YWxlLiAgT3RoZXIgQ1BVcyBtYXkgZG8gbGVzcywgYnV0IHRoZSBlbmQgcmVzdWx0IGlzIGVxdWl2YWxlbnQuCi0gKi8KLSNpZiBBTkRST0lEX1NNUCAhPSAwCi0jIGRlZmluZSBBTkRST0lEX01FTUJBUl9GVUxMKCkgX0FORFJPSURfTUVNQkFSX0ZVTExfU01QKCkKLSNlbHNlCi0jIGRlZmluZSBBTkRST0lEX01FTUJBUl9GVUxMKCkgXAotICAgIGRvIHsgX19hc21fXyBfX3ZvbGF0aWxlX18gKCIiIDo6OiAibWVtb3J5Iik7IH0gd2hpbGUgKDApCi0jZW5kaWYKKyNkZWZpbmUgQU5EUk9JRF9NRU1CQVJfRlVMTCAgX19iaW9uaWNfbWVtb3J5X2JhcnJpZXIKIAogI2lmZGVmIF9fY3BsdXNwbHVzCiB9IC8vIGV4dGVybiAiQyIKZGlmZiAtLWdpdCBhL2xpYmMvcHJpdmF0ZS9iaW9uaWNfYXRvbWljX21pcHMuaCBiL2xpYmMvcHJpdmF0ZS9iaW9uaWNfYXRvbWljX21pcHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOGZlODhkCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9wcml2YXRlL2Jpb25pY19hdG9taWNfbWlwcy5oCkBAIC0wLDAgKzEsMTAyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKyNpZm5kZWYgQklPTklDX0FUT01JQ19NSVBTX0gKKyNkZWZpbmUgQklPTklDX0FUT01JQ19NSVBTX0gKKworLyogRGVmaW5lIGEgZnVsbCBtZW1vcnkgYmFycmllciwgdGhpcyBpcyBvbmx5IG5lZWRlZCBpZiB3ZSBidWlsZCB0aGUKKyAqIHBsYXRmb3JtIGZvciBhIG11bHRpLWNvcmUgZGV2aWNlLgorICovCisjaWYgZGVmaW5lZChBTkRST0lEX1NNUCkgJiYgQU5EUk9JRF9TTVAgPT0gMQorX19BVE9NSUNfSU5MSU5FX18gdm9pZAorX19iaW9uaWNfbWVtb3J5X2JhcnJpZXIoKQoreworICAgIF9fYXNtX18gX192b2xhdGlsZV9fICggInN5bmMiIDogOiA6ICJtZW1vcnkiICk7Cit9CisjZWxzZQorX19BVE9NSUNfSU5MSU5FX18gdm9pZAorX19iaW9uaWNfbWVtb3J5X2JhcnJpZXIoKQoreworICAgIC8qIEEgc2ltcGxlIGNvbXBpbGVyIGJhcnJpZXIgKi8KKyAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoICIiIDogOiA6ICJtZW1vcnkiICk7Cit9CisjZW5kaWYKKworLyogQ29tcGFyZS1hbmQtc3dhcCwgd2l0aG91dCBhbnkgZXhwbGljaXQgYmFycmllcnMuIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uCisgKiByZXR1cm5zIDAgb24gc3VjY2VzcywgYW5kIDEgb24gZmFpbHVyZS4gVGhlIG9wcG9zaXRlIGNvbnZlbnRpb24gaXMgdHlwaWNhbGx5CisgKiB1c2VkIG9uIG90aGVyIHBsYXRmb3Jtcy4KKyAqLworX19BVE9NSUNfSU5MSU5FX18gaW50CitfX2Jpb25pY19jbXB4Y2hnKGludDMyX3Qgb2xkX3ZhbHVlLCBpbnQzMl90IG5ld192YWx1ZSwgdm9sYXRpbGUgaW50MzJfdCogcHRyKQoreworICAgIGludDMyX3QgcHJldiwgc3RhdHVzOworICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgiMTogbW92ZSAlW3N0YXR1c10sICVbbmV3X3ZhbHVlXSAgXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICIgICBsbCAlW3ByZXZdLCAwKCVbcHRyXSkgICAgICAgICBcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgIGJuZSAlW29sZF92YWx1ZV0sICVbcHJldl0sIDJmIFxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgc2MgICAlW3N0YXR1c10sIDAoJVtwdHJdKSAgICAgXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICIgICBiZXF6ICVbc3RhdHVzXSwgMWIgICAgICAgICAgICBcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIjI6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICA6IFtwcmV2XSI9JnIiKHByZXYpLCBbc3RhdHVzXSI9JnIiKHN0YXR1cyksICIrbSIoKnB0cikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgOiBbbmV3X3ZhbHVlXSJyIihuZXdfdmFsdWUpLCBbb2xkX3ZhbHVlXSJyIihvbGRfdmFsdWUpLCBbcHRyXSJyIihwdHIpCisgICAgICAgICAgICAgICAgICAgICAgICAgIDogIm1lbW9yeSIpOworICAgIHJldHVybiBwcmV2ICE9IG9sZF92YWx1ZTsKK30KKworCisvKiBTd2FwLCB3aXRob3V0IGFueSBleHBsaWNpdCBiYXJyaWVycyAqLworX19BVE9NSUNfSU5MSU5FX18gaW50MzJfdAorX19iaW9uaWNfc3dhcChpbnQzMl90IG5ld192YWx1ZSwgdm9sYXRpbGUgaW50MzJfdCAqcHRyKQoreworICAgaW50MzJfdCBwcmV2LCBzdGF0dXM7CisgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCIxOiAgbW92ZSAlW3N0YXR1c10sICVbbmV3X3ZhbHVlXSBcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICBsbCAlW3ByZXZdLCAwKCVbcHRyXSkgICAgICAgIFxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIHNjICVbc3RhdHVzXSwgMCglW3B0cl0pICAgICAgXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgYmVxeiAlW3N0YXR1c10sIDFiICAgICAgICAgICBcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgOiBbcHJldl0iPSZyIihwcmV2KSwgW3N0YXR1c10iPSZyIihzdGF0dXMpLCAiK20iKCpwdHIpCisgICAgICAgICAgICAgICAgICAgICAgICAgIDogW3B0cl0iciIocHRyKSwgW25ld192YWx1ZV0iciIobmV3X3ZhbHVlKQorICAgICAgICAgICAgICAgICAgICAgICAgICA6ICJtZW1vcnkiKTsKKyAgICByZXR1cm4gcHJldjsKK30KKworLyogQXRvbWljIGluY3JlbWVudCwgd2l0aG91dCBleHBsaWNpdCBiYXJyaWVycyAqLworX19BVE9NSUNfSU5MSU5FX18gaW50MzJfdAorX19iaW9uaWNfYXRvbWljX2luYyh2b2xhdGlsZSBpbnQzMl90ICpwdHIpCit7CisgICAgaW50MzJfdCBwcmV2LCBzdGF0dXM7CisgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCIxOiAgbGwgJVtwcmV2XSwgMCglW3B0cl0pICAgICAgICBcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICBhZGRpdSAlW3N0YXR1c10sICVbcHJldl0sIDEgIFxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIHNjICAgJVtzdGF0dXNdLCAwKCVbcHRyXSkgICAgXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgYmVxeiAlW3N0YXR1c10sIDFiICAgICAgICAgICBcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgOiBbcHJldl0iPSZyIiAocHJldiksIFtzdGF0dXNdIj0mciIoc3RhdHVzKSwgIittIiAoKnB0cikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgOiBbcHRyXSJyIihwdHIpCisgICAgICAgICAgICAgICAgICAgICAgICAgIDogIm1lbW9yeSIpOworICAgIHJldHVybiBwcmV2OworfQorCisvKiBBdG9taWMgZGVjcmVtZW50LCB3aXRob3V0IGV4cGxpY2l0IGJhcnJpZXJzICovCitfX0FUT01JQ19JTkxJTkVfXyBpbnQzMl90CitfX2Jpb25pY19hdG9taWNfZGVjKHZvbGF0aWxlIGludDMyX3QgKnB0cikKK3sKKyAgICBpbnQzMl90IHByZXYsIHN0YXR1czsKKyAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIjE6ICBsbCAlW3ByZXZdLCAwKCVbcHRyXSkgICAgICAgIFxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIGFkZGl1ICVbc3RhdHVzXSwgJVtwcmV2XSwgLTEgXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgc2MgICAlW3N0YXR1c10sIDAoJVtwdHJdKSAgICBcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICBiZXF6ICVbc3RhdHVzXSwgMWIgICAgICAgICAgIFxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICA6IFtwcmV2XSI9JnIiIChwcmV2KSwgW3N0YXR1c10iPSZyIihzdGF0dXMpLCAiK20iICgqcHRyKQorICAgICAgICAgICAgICAgICAgICAgICAgICA6IFtwdHJdInIiKHB0cikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgOiAibWVtb3J5Iik7CisgICAgcmV0dXJuIHByZXY7Cit9CisjZW5kaWYgLyogQklPTklDX0FUT01JQ19NSVBTX0ggKi8KZGlmZiAtLWdpdCBhL2xpYmMvcHJpdmF0ZS9iaW9uaWNfYXRvbWljX3g4Ni5oIGIvbGliYy9wcml2YXRlL2Jpb25pY19hdG9taWNfeDg2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWNhMGM0YgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvcHJpdmF0ZS9iaW9uaWNfYXRvbWljX3g4Ni5oCkBAIC0wLDAgKzEsODggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworI2lmbmRlZiBCSU9OSUNfQVRPTUlDX1g4Nl9ICisjZGVmaW5lIEJJT05JQ19BVE9NSUNfWDg2X0gKKworLyogRGVmaW5lIGEgZnVsbCBtZW1vcnkgYmFycmllciwgdGhpcyBpcyBvbmx5IG5lZWRlZCBpZiB3ZSBidWlsZCB0aGUKKyAqIHBsYXRmb3JtIGZvciBhIG11bHRpLWNvcmUgZGV2aWNlLgorICovCisjaWYgZGVmaW5lZChBTkRST0lEX1NNUCkgJiYgQU5EUk9JRF9TTVAgPT0gMQorX19BVE9NSUNfSU5MSU5FX18gdm9pZAorX19iaW9uaWNfbWVtb3J5X2JhcnJpZXIoKQoreworICAgIF9fYXNtX18gX192b2xhdGlsZV9fICggIm1mZW5jZSIgOiA6IDogIm1lbW9yeSIgKTsKK30KKyNlbHNlCitfX0FUT01JQ19JTkxJTkVfXyB2b2lkCitfX2Jpb25pY19tZW1vcnlfYmFycmllcigpCit7CisgICAgLyogQSBzaW1wbGUgY29tcGlsZXIgYmFycmllciAqLworICAgIF9fYXNtX18gX192b2xhdGlsZV9fICggIiIgOiA6IDogIm1lbW9yeSIgKTsKK30KKyNlbmRpZgorCisvKiBDb21wYXJlLWFuZC1zd2FwLCB3aXRob3V0IGFueSBleHBsaWNpdCBiYXJyaWVycy4gTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24KKyAqIHJldHVybnMgMCBvbiBzdWNjZXNzLCBhbmQgMSBvbiBmYWlsdXJlLiBUaGUgb3Bwb3NpdGUgY29udmVudGlvbiBpcyB0eXBpY2FsbHkKKyAqIHVzZWQgb24gb3RoZXIgcGxhdGZvcm1zLgorICovCitfX0FUT01JQ19JTkxJTkVfXyBpbnQKK19fYmlvbmljX2NtcHhjaGcoaW50MzJfdCBvbGRfdmFsdWUsIGludDMyX3QgbmV3X3ZhbHVlLCB2b2xhdGlsZSBpbnQzMl90KiBwdHIpCit7CisgICAgaW50MzJfdCBwcmV2OworICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgibG9jazsgY21weGNoZ2wgJTEsICUyIgorICAgICAgICAgICAgICAgICAgICAgICAgICA6ICI9YSIgKHByZXYpCisgICAgICAgICAgICAgICAgICAgICAgICAgIDogInEiIChuZXdfdmFsdWUpLCAibSIgKCpwdHIpLCAiMCIgKG9sZF92YWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgOiAibWVtb3J5Iik7CisgICAgcmV0dXJuIHByZXYgIT0gb2xkX3ZhbHVlOworfQorCisKKy8qIFN3YXAsIHdpdGhvdXQgYW55IGV4cGxpY2l0IGJhcnJpZXJzICovCitfX0FUT01JQ19JTkxJTkVfXyBpbnQzMl90CitfX2Jpb25pY19zd2FwKGludDMyX3QgbmV3X3ZhbHVlLCB2b2xhdGlsZSBpbnQzMl90ICpwdHIpCit7CisgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJ4Y2hnbCAlMSwgJTAiCisgICAgICAgICAgICAgICAgICAgICAgICAgIDogIj1yIiAobmV3X3ZhbHVlKQorICAgICAgICAgICAgICAgICAgICAgICAgICA6ICJtIiAoKnB0ciksICIwIiAobmV3X3ZhbHVlKQorICAgICAgICAgICAgICAgICAgICAgICAgICA6ICJtZW1vcnkiKTsKKyAgICByZXR1cm4gbmV3X3ZhbHVlOworfQorCisvKiBBdG9taWMgaW5jcmVtZW50LCB3aXRob3V0IGV4cGxpY2l0IGJhcnJpZXJzICovCitfX0FUT01JQ19JTkxJTkVfXyBpbnQzMl90CitfX2Jpb25pY19hdG9taWNfaW5jKHZvbGF0aWxlIGludDMyX3QgKnB0cikKK3sKKyAgICBpbnQgaW5jcmVtZW50ID0gMTsKKyAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImxvY2s7IHhhZGRsICUwLCAlMSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgOiAiK3IiIChpbmNyZW1lbnQpLCAiK20iICgqcHRyKQorICAgICAgICAgICAgICAgICAgICAgICAgICA6IDogIm1lbW9yeSIpOworICAgIC8qIGluY3JlbWVudCBub3cgaG9sZHMgdGhlIG9sZCB2YWx1ZSBvZiAqcHRyICovCisgICAgcmV0dXJuIGluY3JlbWVudDsKK30KKworLyogQXRvbWljIGRlY3JlbWVudCwgd2l0aG91dCBleHBsaWNpdCBiYXJyaWVycyAqLworX19BVE9NSUNfSU5MSU5FX18gaW50MzJfdAorX19iaW9uaWNfYXRvbWljX2RlYyh2b2xhdGlsZSBpbnQzMl90ICpwdHIpCit7CisgICAgaW50IGluY3JlbWVudCA9IC0xOworICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgibG9jazsgeGFkZGwgJTAsICUxIgorICAgICAgICAgICAgICAgICAgICAgICAgICA6ICIrciIgKGluY3JlbWVudCksICIrbSIgKCpwdHIpCisgICAgICAgICAgICAgICAgICAgICAgICAgIDogOiAibWVtb3J5Iik7CisgICAgLyogaW5jcmVtZW50IG5vdyBob2xkcyB0aGUgb2xkIHZhbHVlIG9mICpwdHIgKi8KKyAgICByZXR1cm4gaW5jcmVtZW50OworfQorCisjZW5kaWYgLyogQklPTklDX0FUT01JQ19YODZfSCAqLwpkaWZmIC0tZ2l0IGEvbGliYy9wcml2YXRlL2Jpb25pY19hdXh2LmggYi9saWJjL3ByaXZhdGUvYmlvbmljX2F1eHYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yM2IyZTM3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9wcml2YXRlL2Jpb25pY19hdXh2LmgKQEAgLTAsMCArMSw0MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworI2lmbmRlZiBfUFJJVkFURV9CSU9OSUNfQVVYVl9IXworI2RlZmluZSBfUFJJVkFURV9CSU9OSUNfQVVYVl9IXworCisjaW5jbHVkZSA8ZWxmLmg+CisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisKK19fQkVHSU5fREVDTFMKKworZXh0ZXJuIEVsZjMyX2F1eHZfdCogX19saWJjX2F1eHY7CisKK19fRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBfUFJJVkFURV9CSU9OSUNfQVVYVl9IXyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9wcml2YXRlL2Jpb25pY19mdXRleC5oIGIvbGliYy9wcml2YXRlL2Jpb25pY19mdXRleC5oCmluZGV4IGViNDlmYjcuLjY5NjU4YjEgMTAwNjQ0Ci0tLSBhL2xpYmMvcHJpdmF0ZS9iaW9uaWNfZnV0ZXguaAorKysgYi9saWJjL3ByaXZhdGUvYmlvbmljX2Z1dGV4LmgKQEAgLTI5LDYgKzI5LDkgQEAKICNkZWZpbmUgX0JJT05JQ19GVVRFWF9ICiAKICNpbmNsdWRlIDxsaW51eC9mdXRleC5oPgorI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorCitfX0JFR0lOX0RFQ0xTCiAKIGV4dGVybiBpbnQgX19mdXRleF93YWl0KHZvbGF0aWxlIHZvaWQgKmZ0eCwgaW50IHZhbCwgY29uc3Qgc3RydWN0IHRpbWVzcGVjICp0aW1lb3V0KTsKIGV4dGVybiBpbnQgX19mdXRleF93YWtlKHZvbGF0aWxlIHZvaWQgKmZ0eCwgaW50IGNvdW50KTsKQEAgLTU0LDQgKzU3LDYgQEAKIGV4dGVybiBpbnQgIF9fZnV0ZXhfd2FrZV9leCh2b2xhdGlsZSB2b2lkICpmdHgsIGludCBwc2hhcmVkLCBpbnQgdmFsKTsKIGV4dGVybiBpbnQgIF9fZnV0ZXhfd2FpdF9leCh2b2xhdGlsZSB2b2lkICpmdHgsIGludCBwc2hhcmVkLCBpbnQgdmFsLCBjb25zdCBzdHJ1Y3QgdGltZXNwZWMgKnRpbWVvdXQpOwogCitfX0VORF9ERUNMUworCiAjZW5kaWYgLyogX0JJT05JQ19GVVRFWF9IICovCmRpZmYgLS1naXQgYS9saWJjL3ByaXZhdGUvYmlvbmljX3NzcC5oIGIvbGliYy9wcml2YXRlL2Jpb25pY19zc3AuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ODgzZDcyCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9wcml2YXRlL2Jpb25pY19zc3AuaApAQCAtMCwwICsxLDQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgX1BSSVZBVEVfU1NQX0gKKyNkZWZpbmUgX1BSSVZBVEVfU1NQX0gKKworI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorCitfX0JFR0lOX0RFQ0xTCisKKy8qIEdDQyB1c2VzIHRoaXMgb24gQVJNIGFuZCBNSVBTOyB3ZSB1c2UgaXQgb24geDg2IHRvIHNldCB0aGUgZ3VhcmQgaW4gVExTLiAqLworZXh0ZXJuIHVpbnRwdHJfdCBfX3N0YWNrX2Noa19ndWFyZDsKKworLyogR0NDIGNhbGxzIHRoaXMgaWYgYSBzdGFjayBndWFyZCBjaGVjayBmYWlscy4gKi8KK2V4dGVybiB2b2lkIF9fc3RhY2tfY2hrX2ZhaWwoKTsKKworX19FTkRfREVDTFMKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL3ByaXZhdGUvYmlvbmljX3RpbWUuaCBiL2xpYmMvcHJpdmF0ZS9iaW9uaWNfdGltZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjODBmNTkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3ByaXZhdGUvYmlvbmljX3RpbWUuaApAQCAtMCwwICsxLDY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisjaWZuZGVmIF9CSU9OSUNfVElNRV9ICisjZGVmaW5lIF9CSU9OSUNfVElNRV9ICisKKyNpbmNsdWRlIDx0aW1lLmg+CisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisKK19fQkVHSU5fREVDTFMKKworI2lmbmRlZiBfQklPTklDX1NUUkZUSU1FX1RaX0RFQ0xBUkVECisjZGVmaW5lIF9CSU9OSUNfU1RSRlRJTUVfVFpfREVDTEFSRUQKKworc3RydWN0IHN0cmZ0aW1lX2xvY2FsZSB7CisgICAgY29uc3QgY2hhciAqICBtb25bMTJdOworICAgIGNvbnN0IGNoYXIgKiAgbW9udGhbMTJdOworICAgIGNvbnN0IGNoYXIgKiAgc3RhbmRhbG9uZV9tb250aFsxMl07CisgICAgY29uc3QgY2hhciAqICB3ZGF5WzddOworICAgIGNvbnN0IGNoYXIgKiAgd2Vla2RheVs3XTsKKyAgICBjb25zdCBjaGFyICogIFhfZm10OworICAgIGNvbnN0IGNoYXIgKiAgeF9mbXQ7CisgICAgY29uc3QgY2hhciAqICBjX2ZtdDsKKyAgICBjb25zdCBjaGFyICogIGFtOworICAgIGNvbnN0IGNoYXIgKiAgcG07CisgICAgY29uc3QgY2hhciAqICBkYXRlX2ZtdDsKK307CisKKy8qCisgKiBOb3RlOiB5b3Ugc2hvdWxkIGNvbnNpZGVyIHRoZXNlIGV4dGVuc2lvbnMgZGVwcmVjYXRlZCBhbmQgdXNlIG1hbmFnZWQgY29kZSBvciBpY3U0YyBpbnN0ZWFkLgorICovCitleHRlcm4gc2l6ZV90IHN0cmZ0aW1lX3R6KGNoYXIqIHMsIHNpemVfdCBtYXgsIGNvbnN0IGNoYXIqIGZvcm1hdCwgY29uc3Qgc3RydWN0IHRtKiB0bSwgY29uc3Qgc3RydWN0IHN0cmZ0aW1lX2xvY2FsZSogbGMpOworZXh0ZXJuIHRpbWVfdCBta3RpbWVfdHooc3RydWN0IHRtKiBjb25zdCB0bXAsIGNoYXIgY29uc3QqIHR6KTsKK2V4dGVybiB2b2lkIGxvY2FsdGltZV90eihjb25zdCB0aW1lX3QqIGNvbnN0IHRpbWVwLCBzdHJ1Y3QgdG0qIHRtcCwgY29uc3QgY2hhciogdHopOworCisjZW5kaWYgLyogX0JJT05JQ19TVFJGVElNRV9UWl9ERUNMQVJFRCAqLworCitfX0VORF9ERUNMUworCisjZW5kaWYgLyogX0JJT05JQ19USU1FX0ggKi8KZGlmZiAtLWdpdCBhL2xpYmMvcHJpdmF0ZS9iaW9uaWNfdGxzLmggYi9saWJjL3ByaXZhdGUvYmlvbmljX3Rscy5oCmluZGV4IDAwOGZkMmYuLmQxNWIxY2EgMTAwNjQ0Ci0tLSBhL2xpYmMvcHJpdmF0ZS9iaW9uaWNfdGxzLmgKKysrIGIvbGliYy9wcml2YXRlL2Jpb25pY190bHMuaApAQCAtNDMsOTcgKzQzLDc4IEBACiAgKiogcHJlLWFsbG9jYXRlZCBzbG90IGRpcmVjdGx5IGZvciBwZXJmb3JtYW5jZSByZWFzb24pLgogICoqLwogCi0vKiBtYXhpbXVtIG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgVExTIGFycmF5ICovCi0jZGVmaW5lIEJJT05JQ19UTFNfU0xPVFMgICAgICAgICAgICA2NAorLyogV2VsbC1rbm93biBUTFMgc2xvdHMuIFdoYXQgZGF0YSBnb2VzIGluIHdoaWNoIHNsb3QgaXMgYXJiaXRyYXJ5IHVubGVzcyBvdGhlcndpc2Ugbm90ZWQuICovCitlbnVtIHsKKyAgVExTX1NMT1RfU0VMRiA9IDAsIC8qIFRoZSBrZXJuZWwgcmVxdWlyZXMgdGhpcyBzcGVjaWZpYyBzbG90IGZvciB4ODYuICovCisgIFRMU19TTE9UX1RIUkVBRF9JRCwKKyAgVExTX1NMT1RfRVJSTk8sCiAKLS8qIG5vdGUgdGhhdCBzbG90IDAsIGNhbGxlZCBUTFNfU0xPVF9TRUxGIG11c3QgcG9pbnQgdG8gaXRzZWxmLgotICogdGhpcyBpcyByZXF1aXJlZCB0byBpbXBsZW1lbnQgdGhyZWFkLWxvY2FsIHN0b3JhZ2Ugd2l0aCB0aGUgeDg2Ci0gKiBMaW51eCBrZXJuZWwsIHRoYXQgcmVhZHMgdGhlIFRMUyBmcm9tIGZzOlswXSwgd2hlcmUgJ2ZzJyBpcyBhCi0gKiB0aHJlYWQtc3BlY2lmaWMgc2VnbWVudCBkZXNjcmlwdG9yLi4uCisgIC8qIFRoZXNlIHR3byBhcmVuJ3QgdXNlZCBieSBiaW9uaWMgaXRzZWxmLCBidXQgYWxsb3cgdGhlIGdyYXBoaWNzIGNvZGUgdG8KKyAgICogYWNjZXNzIFRMUyBkaXJlY3RseSByYXRoZXIgdGhhbiB1c2luZyB0aGUgcHRocmVhZCBBUEkuICovCisgIFRMU19TTE9UX09QRU5HTF9BUEkgPSAzLAorICBUTFNfU0xPVF9PUEVOR0wgPSA0LAorCisgIC8qIFRoaXMgc2xvdCBpcyBvbmx5IHVzZWQgdG8gcGFzcyBpbmZvcm1hdGlvbiBmcm9tIHRoZSBkeW5hbWljIGxpbmtlciB0bworICAgKiBsaWJjLnNvIHdoZW4gdGhlIEMgbGlicmFyeSBpcyBsb2FkZWQgaW4gdG8gbWVtb3J5LiBUaGUgQyBydW50aW1lIGluaXQKKyAgICogZnVuY3Rpb24gd2lsbCB0aGVuIGNsZWFyIGl0LiBTaW5jZSBpdHMgdXNlIGlzIGV4dHJlbWVseSB0ZW1wb3JhcnksCisgICAqIHdlIHJldXNlIGFuIGV4aXN0aW5nIGxvY2F0aW9uIHRoYXQgaXNuJ3QgbmVlZGVkIGR1cmluZyBsaWJjIHN0YXJ0dXAuICovCisgIFRMU19TTE9UX0JJT05JQ19QUkVJTklUID0gVExTX1NMT1RfT1BFTkdMX0FQSSwKKworICBUTFNfU0xPVF9TVEFDS19HVUFSRCA9IDUsIC8qIEdDQyByZXF1aXJlcyB0aGlzIHNwZWNpZmljIHNsb3QgZm9yIHg4Ni4gKi8KKyAgVExTX1NMT1RfRExFUlJPUiwKKworICBUTFNfU0xPVF9GSVJTVF9VU0VSX1NMT1QgLyogTXVzdCBjb21lIGxhc3QhICovCit9OworCisvKgorICogTWF4aW11bSBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIFRMUyBhcnJheS4KKyAqIFBPU0lYIHNheXMgdGhpcyBtdXN0IGJlIGF0IGxlYXN0IDEyOCwgYnV0IEFuZHJvaWQgaGFzIHRyYWRpdGlvbmFsbHkgaGFkIG9ubHkgNjQsIG1pbnVzIHRob3NlCisgKiBvbmVzIHVzZWQgaW50ZXJuYWxseSBieSBiaW9uaWMgaXRzZWxmLgorICogVGhlcmUgYXJlIHR3byBraW5kcyBvZiBzbG90IHVzZWQgaW50ZXJuYWxseSBieSBiaW9uaWMgLS0tIHRoZXJlIGFyZSB0aGUgd2VsbC1rbm93biBzbG90cworICogZW51bWVyYXRlZCBhYm92ZSwgYW5kIHRoZW4gdGhlcmUgYXJlIHRob3NlIHRoYXQgYXJlIGFsbG9jYXRlZCBkdXJpbmcgc3RhcnR1cCBieSBjYWxscyB0bworICogcHRocmVhZF9rZXlfY3JlYXRlOyBncmVwIGZvciBHTE9CQUxfSU5JVF9USFJFQURfTE9DQUxfQlVGRkVSIHRvIGZpbmQgdGhvc2UuIFdlIG5lZWQgdG8gbWFudWFsbHkKKyAqIG1haW50YWluIHRoYXQgc2Vjb25kIG51bWJlciwgYnV0IHB0aHJlYWRfdGVzdCB3aWxsIGZhaWwgaWYgd2UgZm9yZ2V0LgogICovCi0KLS8qIFdlbGwga25vd24gVExTIHNsb3RzICovCi0jZGVmaW5lIFRMU19TTE9UX1NFTEYgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFRMU19TTE9UX1RIUkVBRF9JRCAgICAgICAgICAxCi0jZGVmaW5lIFRMU19TTE9UX0VSUk5PICAgICAgICAgICAgICAyCi0KLSNkZWZpbmUgVExTX1NMT1RfT1BFTkdMX0FQSSAgICAgICAgIDMKLSNkZWZpbmUgVExTX1NMT1RfT1BFTkdMICAgICAgICAgICAgIDQKLQotLyogdGhpcyBzbG90IGlzIG9ubHkgdXNlZCB0byBwYXNzIGluZm9ybWF0aW9uIGZyb20gdGhlIGR5bmFtaWMgbGlua2VyIHRvCi0gKiBsaWJjLnNvIHdoZW4gdGhlIEMgbGlicmFyeSBpcyBsb2FkZWQgaW4gdG8gbWVtb3J5LiBUaGUgQyBydW50aW1lIGluaXQKLSAqIGZ1bmN0aW9uIHdpbGwgdGhlbiBjbGVhciBpdC4gU2luY2UgaXRzIHVzZSBpcyBleHRyZW1lbHkgdGVtcG9yYXJ5LAotICogd2UgcmV1c2UgYW4gZXhpc3RpbmcgbG9jYXRpb24uCisjZGVmaW5lIEdMT0JBTF9JTklUX1RIUkVBRF9MT0NBTF9CVUZGRVJfQ09VTlQgNAorLyoKKyAqIFRoaXMgaXMgUFRIUkVBRF9LRVlTX01BWCArIFRMU19TTE9UX0ZJUlNUX1VTRVJfU0xPVCArIEdMT0JBTF9JTklUX1RIUkVBRF9MT0NBTF9CVUZGRVJfQ09VTlQKKyAqIHJvdW5kZWQgdXAgdG8gbWFpbnRhaW4gc3RhY2sgYWxpZ25tZW50LgogICovCi0jZGVmaW5lICBUTFNfU0xPVF9CSU9OSUNfUFJFSU5JVCAgICAoVExTX1NMT1RfRVJSTk8rMSkKLQotLyogc21hbGwgdGVjaG5pY2FsIG5vdGU6IGl0IGlzIG5vdCBwb3NzaWJsZSB0byBjYWxsIHB0aHJlYWRfc2V0c3BlY2lmaWMKLSAqIG9uIGtleXMgdGhhdCBhcmUgPD0gVExTX1NMT1RfTUFYX1dFTExfS05PV04sIHdoaWNoIGlzIHdoeSBpdCBpcyBzZXQgdG8KLSAqIFRMU19TTE9UX0VSUk5PLgotICoKLSAqIGxhdGVyIHNsb3RzIGxpa2UgVExTX1NMT1RfT1BFTkdMIGFyZSBwcmUtYWxsb2NhdGVkIHRocm91Z2ggdGhlIHVzZSBvZgotICogVExTX0RFRkFVTFRfQUxMT0NfTUFQLiB0aGlzIG1lYW5zIHRoYXQgdGhlcmUgaXMgbm8gbmVlZCB0byB1c2UKLSAqIHB0aHJlYWRfa2V5X2NyZWF0ZSgpIHRvIGluaXRpYWxpemUgdGhlbS4gb24gdGhlIG90aGVyIGhhbmQsIHRoZXJlIGlzCi0gKiBubyBkZXN0cnVjdG9yIGFzc29jaWF0ZWQgdG8gdGhlbSAod2UgbWlnaHQgbmVlZCB0byBpbXBsZW1lbnQgdGhpcyBsYXRlcikKLSAqLwotI2RlZmluZSBUTFNfU0xPVF9NQVhfV0VMTF9LTk9XTiAgICAgVExTX1NMT1RfRVJSTk8KLQotI2RlZmluZSBUTFNfREVGQVVMVF9BTExPQ19NQVAgICAgICAgMHgwMDAwMDAxRgotCi0vKiBzZXQgdGhlIFRocmVhZCBMb2NhbCBTdG9yYWdlLCBtdXN0IGNvbnRhaW4gYXQgbGVhc3QgQklPTklDX1RMU19TTE9UUyBwb2ludGVycyAqLwotZXh0ZXJuIHZvaWQgX19pbml0X3Rscyh2b2lkKiogIHRscywgdm9pZCogIHRocmVhZF9pbmZvKTsKKyNkZWZpbmUgQklPTklDX0FMSUdOKHgsIGEpICgoKHgpICsgKGEgLSAxKSkgJiB+KGEgLSAxKSkKKyNkZWZpbmUgQklPTklDX1RMU19TTE9UUyBCSU9OSUNfQUxJR04oMTI4ICsgVExTX1NMT1RfRklSU1RfVVNFUl9TTE9UICsgR0xPQkFMX0lOSVRfVEhSRUFEX0xPQ0FMX0JVRkZFUl9DT1VOVCwgNCkKIAogLyogc3lzY2FsbCBvbmx5LCBkbyBub3QgY2FsbCBkaXJlY3RseSAqLwotZXh0ZXJuIGludCBfX3NldF90bHModm9pZCAqcHRyKTsKK2V4dGVybiBpbnQgX19zZXRfdGxzKHZvaWQqIHB0cik7CiAKIC8qIGdldCB0aGUgVExTICovCi0jaWZkZWYgX19hcm1fXwotLyogVGhlIHN0YW5kYXJkIHdheSB0byBnZXQgdGhlIFRMUyBpcyB0byBjYWxsIGEga2VybmVsIGhlbHBlcgotICogZnVuY3Rpb24gKGkuZS4gYSBmdW5jdGlvbiBwcm92aWRlZCBhdCBhIGZpeGVkIGFkZHJlc3MgaW4gYQotICogIm1hZ2ljIHBhZ2UiIG1hcHBlZCBpbiBhbGwgdXNlci1zcGFjZSBhZGRyZXNzIHNwYWNlcyApLCB3aGljaAotICogY29udGFpbnMgdGhlIG1vc3QgYXBwcm9wcmlhdGUgY29kZSBwYXRoIGZvciB0aGUgdGFyZ2V0IGRldmljZS4KLSAqCi0gKiBIb3dldmVyLCBmb3IgcGVyZm9ybWFuY2UgcmVhc29ucywgd2UncmUgZ29pbmcgdG8gdXNlIG91ciBvd24KLSAqIG1hY2hpbmUgY29kZSBmb3IgdGhlIHN5c3RlbSdzIEMgc2hhcmVkIGxpYnJhcnkuCi0gKgotICogV2UgY2Fubm90IHVzZSB0aGlzIG9wdGltaXphdGlvbiBpbiB0aGUgc3RhdGljIHZlcnNpb24gb2YgdGhlCi0gKiBDIGxpYnJhcnksIGJlY2F1c2Ugd2UgZG9uJ3Qga25vdyB3aGVyZSB0aGUgY29ycmVzcG9uZGluZyBjb2RlCi0gKiBpcyBnb2luZyB0byBydW4uCi0gKi8KLSMgIGlmZGVmIExJQkNfU1RBVElDCi0KLS8qIFVzZSB0aGUga2VybmVsIGhlbHBlciBpbiBzdGF0aWMgQyBsaWJyYXJ5LiAqLwotICB0eXBlZGVmIHZvbGF0aWxlIHZvaWQqIChfX2tlcm5lbF9nZXRfdGxzX3QpKHZvaWQpOwotIyAgICBkZWZpbmUgX19nZXRfdGxzKCkgKCooX19rZXJuZWxfZ2V0X3Rsc190ICopMHhmZmZmMGZlMCkoKQotCi0jICBlbHNlIC8qICFMSUJDX1NUQVRJQyAqLwotLyogVXNlIG9wdGltaXplZCBjb2RlIHBhdGguCi0gKiBOb3RlIHRoYXQgSEFWRV9BUk1fVExTX1JFR0lTVEVSIGlzIGJ1aWxkLXNwZWNpZmljCi0gKiAoaXQgbXVzdCBtYXRjaCB5b3VyIGtlcm5lbCBjb25maWd1cmF0aW9uKQotICovCi0jICAgIGlmZGVmIEhBVkVfQVJNX1RMU19SRUdJU1RFUgotIC8qIFdlIGNhbiByZWFkIHRoZSBhZGRyZXNzIGRpcmVjdGx5IGZyb20gYSBjb3Byb2Nlc3NvcgotICAqIHJlZ2lzdGVyLCB3aGljaCBhdm9pZHMgdG91Y2hpbmcgdGhlIGRhdGEgY2FjaGUKLSAgKiBjb21wbGV0ZWx5LgotICAqLwotIyAgICAgIGRlZmluZSBfX2dldF90bHMoKSBcCi0gICAgKHsgcmVnaXN0ZXIgdW5zaWduZWQgaW50IF9fdmFsIGFzbSgicjAiKTsgXAotICAgICAgIGFzbSAoIm1yYyBwMTUsIDAsIHIwLCBjMTMsIGMwLCAzIiA6ICI9ciIoX192YWwpICk7IFwKLSAgICAgICAodm9sYXRpbGUgdm9pZCopX192YWw7IH0pCi0jICAgIGVsc2UgLyogIUhBVkVfQVJNX1RMU19SRUdJU1RFUiAqLwotIC8qIFRoZSBrZXJuZWwgcHJvdmlkZXMgdGhlIGFkZHJlc3Mgb2YgdGhlIFRMUyBhdCBhIGZpeGVkCi0gICogYWRkcmVzcyBvZiB0aGUgbWFnaWMgcGFnZSB0b28uCi0gICovCi0jICAgICAgZGVmaW5lIF9fZ2V0X3RscygpICggKigodm9sYXRpbGUgdm9pZCAqKikgMHhmZmZmMGZmMCkgKQotIyAgICBlbmRpZgotIyAgZW5kaWYgLyogIUxJQkNfU1RBVElDICovCi0jZWxzZSAvKiAhQVJNICovCi1leHRlcm4gdm9pZCogIF9fZ2V0X3Rscyggdm9pZCApOwotI2VuZGlmIC8qICFBUk0gKi8KLQotLyogcmV0dXJuIHRoZSBzdGFjayBiYXNlIGFuZCBzaXplLCB1c2VkIGJ5IG91ciBtYWxsb2MgZGVidWdnZXIgKi8KLWV4dGVybiB2b2lkKiAgX19nZXRfc3RhY2tfYmFzZShpbnQgICpwX3N0YWNrX3NpemUpOworI2lmIGRlZmluZWQoX19hcm1fXykKKyMgZGVmaW5lIF9fZ2V0X3RscygpIFwKKyAgICAoeyByZWdpc3RlciB1bnNpZ25lZCBpbnQgX192YWw7IFwKKyAgICAgICBhc20gKCJtcmMgcDE1LCAwLCAlMCwgYzEzLCBjMCwgMyIgOiAiPXIiKF9fdmFsKSk7IFwKKyAgICAgICAodm9sYXRpbGUgdm9pZCopIF9fdmFsOyB9KQorI2VsaWYgZGVmaW5lZChfX21pcHNfXykKKyMgZGVmaW5lIF9fZ2V0X3RscygpIFwKKyAgICAvKiBPbiBtaXBzMzJyMSwgdGhpcyBnb2VzIHZpYSBhIGtlcm5lbCBpbGxlZ2FsIGluc3RydWN0aW9uIHRyYXAgdGhhdCdzIG9wdGltaXplZCBmb3IgdjEuICovIFwKKyAgICAoeyByZWdpc3RlciB1bnNpZ25lZCBpbnQgX192YWwgYXNtKCJ2MSIpOyBcCisgICAgICAgYXNtICgiICAgLnNldCAgICBwdXNoXG4iIFwKKyAgICAgICAgICAgICIgICAuc2V0ICAgIG1pcHMzMnIyXG4iIFwKKyAgICAgICAgICAgICIgICByZGh3ciAgICUwLCQyOVxuIiBcCisgICAgICAgICAgICAiICAgLnNldCAgICBwb3BcbiIgOiAiPXIiKF9fdmFsKSk7IFwKKyAgICAgICAodm9sYXRpbGUgdm9pZCopIF9fdmFsOyB9KQorI2VsaWYgZGVmaW5lZChfX2kzODZfXykKKyMgZGVmaW5lIF9fZ2V0X3RscygpIFwKKyAgICAoeyByZWdpc3RlciB2b2lkKiBfX3ZhbDsgXAorICAgICAgIGFzbSAoIm1vdmwgJSVnczowLCAlMCIgOiAiPXIiKF9fdmFsKSk7IFwKKyAgICAgICAodm9sYXRpbGUgdm9pZCopIF9fdmFsOyB9KQorI2Vsc2UKKyNlcnJvciB1bnN1cHBvcnRlZCBhcmNoaXRlY3R1cmUKKyNlbmRpZgogCiBfX0VORF9ERUNMUwogCisjaWYgZGVmaW5lZChfX2NwbHVzcGx1cykKK3N0cnVjdCBLZXJuZWxBcmd1bWVudEJsb2NrOworZXh0ZXJuIF9fTElCQ19ISURERU5fXyB2b2lkIF9fbGliY19pbml0X3RscyhLZXJuZWxBcmd1bWVudEJsb2NrJiBhcmdzKTsKKyNlbmRpZgorCiAjZW5kaWYgLyogX1NZU19UTFNfSCAqLwpkaWZmIC0tZ2l0IGEvbGliYy9wcml2YXRlL2lzYy9hc3NlcnRpb25zLmggYi9saWJjL3ByaXZhdGUvaXNjL2Fzc2VydGlvbnMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTIxZDE4Zi4uMDAwMDAwMAotLS0gYS9saWJjL3ByaXZhdGUvaXNjL2Fzc2VydGlvbnMuaAorKysgL2Rldi9udWxsCkBAIC0xLDEyNCArMCwwIEBACi0vKgkkTmV0QlNEOiBhc3NlcnRpb25zLmgsdiAxLjEuMS4xIDIwMDQvMDUvMjAgMTk6NDk6NDEgY2hyaXN0b3MgRXhwICQJKi8KLQotLyoKLSAqIENvcHlyaWdodCAoYykgMjAwNCBieSBJbnRlcm5ldCBTeXN0ZW1zIENvbnNvcnRpdW0sIEluYy4gKCJJU0MiKQotICogQ29weXJpZ2h0IChjKSAxOTk3LTE5OTkgYnkgSW50ZXJuZXQgU29mdHdhcmUgQ29uc29ydGl1bS4KLSAqCi0gKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKLSAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCi0gKgotICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIElTQyBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKLSAqIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKLSAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gIElOIE5PIEVWRU5UIFNIQUxMIElTQyBCRSBMSUFCTEUgRk9SCi0gKiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCi0gKiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KLSAqIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUCi0gKiBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgotICovCi0KLS8qCi0gKiBJZDogYXNzZXJ0aW9ucy5oLHYgMS4xLjIwNi4xIDIwMDQvMDMvMDkgMDg6MzM6MzAgbWFya2EgRXhwCi0gKi8KLQotI2lmbmRlZiBBU1NFUlRJT05TX0gKLSNkZWZpbmUgQVNTRVJUSU9OU19ICQkxCi0KLXR5cGVkZWYgZW51bSB7Ci0JYXNzZXJ0X3JlcXVpcmUsIGFzc2VydF9lbnN1cmUsIGFzc2VydF9pbnNpc3QsIGFzc2VydF9pbnZhcmlhbnQKLX0gYXNzZXJ0aW9uX3R5cGU7Ci0KLXR5cGVkZWYgdm9pZCAoKmFzc2VydGlvbl9mYWlsdXJlX2NhbGxiYWNrKShjb25zdCBjaGFyICosIGludCwgYXNzZXJ0aW9uX3R5cGUsCi0JCQkJCSAgIGNvbnN0IGNoYXIgKiwgaW50KTsKLQotZXh0ZXJuIGFzc2VydGlvbl9mYWlsdXJlX2NhbGxiYWNrIF9fYXNzZXJ0aW9uX2ZhaWxlZDsKLXZvaWQgc2V0X2Fzc2VydGlvbl9mYWlsdXJlX2NhbGxiYWNrKGFzc2VydGlvbl9mYWlsdXJlX2NhbGxiYWNrIGYpOwotY29uc3QgY2hhciAqYXNzZXJ0aW9uX3R5cGVfdG9fdGV4dChhc3NlcnRpb25fdHlwZSB0eXBlKTsKLQotI2lmZGVmIENIRUNLX0FMTAotI2RlZmluZSBDSEVDS19SRVFVSVJFCQkxCi0jZGVmaW5lIENIRUNLX0VOU1VSRQkJMQotI2RlZmluZSBDSEVDS19JTlNJU1QJCTEKLSNkZWZpbmUgQ0hFQ0tfSU5WQVJJQU5UCQkxCi0jZW5kaWYKLQotI2lmZGVmIENIRUNLX05PTkUKLSNkZWZpbmUgQ0hFQ0tfUkVRVUlSRQkJMAotI2RlZmluZSBDSEVDS19FTlNVUkUJCTAKLSNkZWZpbmUgQ0hFQ0tfSU5TSVNUCQkwCi0jZGVmaW5lIENIRUNLX0lOVkFSSUFOVAkJMAotI2VuZGlmCi0KLSNpZm5kZWYgQ0hFQ0tfUkVRVUlSRQotI2RlZmluZSBDSEVDS19SRVFVSVJFCQkxCi0jZW5kaWYKLQotI2lmbmRlZiBDSEVDS19FTlNVUkUKLSNkZWZpbmUgQ0hFQ0tfRU5TVVJFCQkxCi0jZW5kaWYKLQotI2lmbmRlZiBDSEVDS19JTlNJU1QKLSNkZWZpbmUgQ0hFQ0tfSU5TSVNUCQkxCi0jZW5kaWYKLQotI2lmbmRlZiBDSEVDS19JTlZBUklBTlQKLSNkZWZpbmUgQ0hFQ0tfSU5WQVJJQU5UCQkxCi0jZW5kaWYKLQotI2lmIENIRUNLX1JFUVVJUkUgIT0gMAotI2RlZmluZSBSRVFVSVJFKGNvbmQpIFwKLQkoKHZvaWQpICgoY29uZCkgfHwgXAotCQkgKChfX2Fzc2VydGlvbl9mYWlsZWQpKF9fRklMRV9fLCBfX0xJTkVfXywgYXNzZXJ0X3JlcXVpcmUsIFwKLQkJCQkgICAgICAgI2NvbmQsIDApLCAwKSkpCi0jZGVmaW5lIFJFUVVJUkVfRVJSKGNvbmQpIFwKLQkoKHZvaWQpICgoY29uZCkgfHwgXAotCQkgKChfX2Fzc2VydGlvbl9mYWlsZWQpKF9fRklMRV9fLCBfX0xJTkVfXywgYXNzZXJ0X3JlcXVpcmUsIFwKLQkJCQkgICAgICAgI2NvbmQsIDEpLCAwKSkpCi0jZWxzZQotI2RlZmluZSBSRVFVSVJFKGNvbmQpCQkoKHZvaWQpIChjb25kKSkKLSNkZWZpbmUgUkVRVUlSRV9FUlIoY29uZCkJKCh2b2lkKSAoY29uZCkpCi0jZW5kaWYgLyogQ0hFQ0tfUkVRVUlSRSAqLwotCi0jaWYgQ0hFQ0tfRU5TVVJFICE9IDAKLSNkZWZpbmUgRU5TVVJFKGNvbmQpIFwKLQkoKHZvaWQpICgoY29uZCkgfHwgXAotCQkgKChfX2Fzc2VydGlvbl9mYWlsZWQpKF9fRklMRV9fLCBfX0xJTkVfXywgYXNzZXJ0X2Vuc3VyZSwgXAotCQkJCSAgICAgICAjY29uZCwgMCksIDApKSkKLSNkZWZpbmUgRU5TVVJFX0VSUihjb25kKSBcCi0JKCh2b2lkKSAoKGNvbmQpIHx8IFwKLQkJICgoX19hc3NlcnRpb25fZmFpbGVkKShfX0ZJTEVfXywgX19MSU5FX18sIGFzc2VydF9lbnN1cmUsIFwKLQkJCQkgICAgICAgI2NvbmQsIDEpLCAwKSkpCi0jZWxzZQotI2RlZmluZSBFTlNVUkUoY29uZCkJCSgodm9pZCkgKGNvbmQpKQotI2RlZmluZSBFTlNVUkVfRVJSKGNvbmQpCSgodm9pZCkgKGNvbmQpKQotI2VuZGlmIC8qIENIRUNLX0VOU1VSRSAqLwotCi0jaWYgQ0hFQ0tfSU5TSVNUICE9IDAKLSNkZWZpbmUgSU5TSVNUKGNvbmQpIFwKLQkoKHZvaWQpICgoY29uZCkgfHwgXAotCQkgKChfX2Fzc2VydGlvbl9mYWlsZWQpKF9fRklMRV9fLCBfX0xJTkVfXywgYXNzZXJ0X2luc2lzdCwgXAotCQkJCSAgICAgICAjY29uZCwgMCksIDApKSkKLSNkZWZpbmUgSU5TSVNUX0VSUihjb25kKSBcCi0JKCh2b2lkKSAoKGNvbmQpIHx8IFwKLQkJICgoX19hc3NlcnRpb25fZmFpbGVkKShfX0ZJTEVfXywgX19MSU5FX18sIGFzc2VydF9pbnNpc3QsIFwKLQkJCQkgICAgICAgI2NvbmQsIDEpLCAwKSkpCi0jZWxzZQotI2RlZmluZSBJTlNJU1QoY29uZCkJCSgodm9pZCkgKGNvbmQpKQotI2RlZmluZSBJTlNJU1RfRVJSKGNvbmQpCSgodm9pZCkgKGNvbmQpKQotI2VuZGlmIC8qIENIRUNLX0lOU0lTVCAqLwotCi0jaWYgQ0hFQ0tfSU5WQVJJQU5UICE9IDAKLSNkZWZpbmUgSU5WQVJJQU5UKGNvbmQpIFwKLQkoKHZvaWQpICgoY29uZCkgfHwgXAotCQkgKChfX2Fzc2VydGlvbl9mYWlsZWQpKF9fRklMRV9fLCBfX0xJTkVfXywgYXNzZXJ0X2ludmFyaWFudCwgXAotCQkJCSAgICAgICAjY29uZCwgMCksIDApKSkKLSNkZWZpbmUgSU5WQVJJQU5UX0VSUihjb25kKSBcCi0JKCh2b2lkKSAoKGNvbmQpIHx8IFwKLQkJICgoX19hc3NlcnRpb25fZmFpbGVkKShfX0ZJTEVfXywgX19MSU5FX18sIGFzc2VydF9pbnZhcmlhbnQsIFwKLQkJCQkgICAgICAgI2NvbmQsIDEpLCAwKSkpCi0jZWxzZQotI2RlZmluZSBJTlZBUklBTlQoY29uZCkJCSgodm9pZCkgKGNvbmQpKQotI2RlZmluZSBJTlZBUklBTlRfRVJSKGNvbmQpCSgodm9pZCkgKGNvbmQpKQotI2VuZGlmIC8qIENIRUNLX0lOVkFSSUFOVCAqLwotCi0jZW5kaWYgLyogQVNTRVJUSU9OU19IICovCmRpZmYgLS1naXQgYS9saWJjL3ByaXZhdGUvaXNjL2RzdC5oIGIvbGliYy9wcml2YXRlL2lzYy9kc3QuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWZiMDcxMC4uMDAwMDAwMAotLS0gYS9saWJjL3ByaXZhdGUvaXNjL2RzdC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTgyICswLDAgQEAKLS8qCSROZXRCU0Q6IGRzdC5oLHYgMS4xLjEuMSAyMDA0LzA1LzIwIDE5OjQ5OjQxIGNocmlzdG9zIEV4cCAkCSovCi0KLSNpZm5kZWYgRFNUX0gKLSNkZWZpbmUgRFNUX0gKLQotI2lmbmRlZiBIQVNfRFNUX0tFWQotdHlwZWRlZiBzdHJ1Y3QgZHN0X2tleSB7Ci0JY2hhcgkqZGtfa2V5X25hbWU7ICAgLyogbmFtZSBvZiB0aGUga2V5ICovCi0JaW50CWRrX2tleV9zaXplOyAgICAvKiB0aGlzIGlzIHRoZSBzaXplIG9mIHRoZSBrZXkgaW4gYml0cyAqLwotCWludAlka19wcm90bzsgICAgICAgLyogd2hhdCBwcm90b2NvbHMgdGhpcyBrZXkgY2FuIGJlIHVzZWQgZm9yICovCi0JaW50CWRrX2FsZzsgICAgICAgICAvKiBhbGdvcml0aG0gbnVtYmVyIGZyb20ga2V5IHJlY29yZCAqLwotCXVfaW50MzJfdCBka19mbGFnczsgICAgIC8qIGFuZCB0aGUgZmxhZ3Mgb2YgdGhlIHB1YmxpYyBrZXkgKi8KLQl1X2ludDE2X3QgZGtfaWQ7ICAgICAgICAvKiBpZGVudGlmaWVyIG9mIHRoZSBrZXkgKi8KLX0gRFNUX0tFWTsKLSNlbmRpZiAvKiBIQVNfRFNUX0tFWSAqLwotCi0vKgotICogZG8gbm90IHRhaW50IG5hbWVzcGFjZQotICovCi0jZGVmaW5lCWRzdF9ic2FmZV9pbml0CQlfX2RzdF9ic2FmZV9pbml0Ci0jZGVmaW5lCWRzdF9idWZmZXJfdG9fa2V5CV9fZHN0X2J1ZmZlcl90b19rZXkKLSNkZWZpbmUJZHN0X2NoZWNrX2FsZ29yaXRobQlfX2RzdF9jaGVja19hbGdvcml0aG0KLSNkZWZpbmUJZHN0X2NvbXBhcmVfa2V5cwlfX2RzdF9jb21wYXJlX2tleXMKLSNkZWZpbmUJZHN0X2N5bGlua19pbml0CQlfX2RzdF9jeWxpbmtfaW5pdAotI2RlZmluZQlkc3RfZG5za2V5X3RvX2tleQlfX2RzdF9kbnNrZXlfdG9fa2V5Ci0jZGVmaW5lCWRzdF9lYXlfZHNzX2luaXQJX19kc3RfZWF5X2Rzc19pbml0Ci0jZGVmaW5lCWRzdF9mcmVlX2tleQkJX19kc3RfZnJlZV9rZXkKLSNkZWZpbmUJZHN0X2dlbmVyYXRlX2tleQlfX2RzdF9nZW5lcmF0ZV9rZXkKLSNkZWZpbmUJZHN0X2htYWNfbWQ1X2luaXQJX19kc3RfaG1hY19tZDVfaW5pdAotI2RlZmluZQlkc3RfaW5pdAkJX19kc3RfaW5pdAotI2RlZmluZQlkc3Rfa2V5X3RvX2J1ZmZlcglfX2RzdF9rZXlfdG9fYnVmZmVyCi0jZGVmaW5lCWRzdF9rZXlfdG9fZG5za2V5CV9fZHN0X2tleV90b19kbnNrZXkKLSNkZWZpbmUJZHN0X3JlYWRfa2V5CQlfX2RzdF9yZWFkX2tleQotI2RlZmluZQlkc3RfcnNhcmVmX2luaXQJCV9fZHN0X3JzYXJlZl9pbml0Ci0jZGVmaW5lCWRzdF9zX2J1aWxkX2ZpbGVuYW1lCV9fZHN0X3NfYnVpbGRfZmlsZW5hbWUKLSNkZWZpbmUJZHN0X3NfY2FsY3VsYXRlX2JpdHMJX19kc3Rfc19jYWxjdWxhdGVfYml0cwotI2RlZmluZQlkc3Rfc19jb252X2JpZ251bV9iNjRfdG9fdTgJX19kc3Rfc19jb252X2JpZ251bV9iNjRfdG9fdTgKLSNkZWZpbmUJZHN0X3NfY29udl9iaWdudW1fdThfdG9fYjY0CV9fZHN0X3NfY29udl9iaWdudW1fdThfdG9fYjY0Ci0jZGVmaW5lCWRzdF9zX2Ruc19rZXlfaWQJX19kc3Rfc19kbnNfa2V5X2lkCi0jZGVmaW5lCWRzdF9zX2R1bXAJCV9fZHN0X3NfZHVtcAotI2RlZmluZQlkc3Rfc19maWxlbmFtZV9sZW5ndGgJX19kc3Rfc19maWxlbmFtZV9sZW5ndGgKLSNkZWZpbmUJZHN0X3NfZm9wZW4JCV9fZHN0X3NfZm9wZW4KLSNkZWZpbmUJZHN0X3NfZ2V0X2ludDE2CQlfX2RzdF9zX2dldF9pbnQxNgotI2RlZmluZQlkc3Rfc19nZXRfaW50MzIJCV9fZHN0X3NfZ2V0X2ludDMyCi0jZGVmaW5lCWRzdF9zX2lkX2NhbGMJCV9fZHN0X3NfaWRfY2FsYwotI2RlZmluZQlkc3Rfc19wdXRfaW50MTYJCV9fZHN0X3NfcHV0X2ludDE2Ci0jZGVmaW5lCWRzdF9zX3B1dF9pbnQzMgkJX19kc3Rfc19wdXRfaW50MzIKLSNkZWZpbmUJZHN0X3NfcXVpY2tfcmFuZG9tCV9fZHN0X3NfcXVpY2tfcmFuZG9tCi0jZGVmaW5lCWRzdF9zX3F1aWNrX3JhbmRvbV9zZXQJX19kc3Rfc19xdWlja19yYW5kb21fc2V0Ci0jZGVmaW5lCWRzdF9zX3JhbmRvbQkJX19kc3Rfc19yYW5kb20KLSNkZWZpbmUJZHN0X3Nfc2VtaV9yYW5kb20JX19kc3Rfc19zZW1pX3JhbmRvbQotI2RlZmluZQlkc3Rfc192ZXJpZnlfc3RyCV9fZHN0X3NfdmVyaWZ5X3N0cgotI2RlZmluZQlkc3Rfc2lnX3NpemUJCV9fZHN0X3NpZ19zaXplCi0jZGVmaW5lCWRzdF9zaWduX2RhdGEJCV9fZHN0X3NpZ25fZGF0YQotI2RlZmluZQlkc3RfdmVyaWZ5X2RhdGEJCV9fZHN0X3ZlcmlmeV9kYXRhCi0jZGVmaW5lCWRzdF93cml0ZV9rZXkJCV9fZHN0X3dyaXRlX2tleQotCi0vKiAKLSAqIERTVCBDcnlwdG8gQVBJIGRlZmludGlvbnMgCi0gKi8KLXZvaWQgICAgIGRzdF9pbml0KHZvaWQpOwotaW50ICAgICAgZHN0X2NoZWNrX2FsZ29yaXRobShjb25zdCBpbnQpOwotCi1pbnQgZHN0X3NpZ25fZGF0YShjb25zdCBpbnQsCSAJLyogc3BlY2lmaWVzIElOSVQvVVBEQVRFL0ZJTkFML0FMTCAqLwotCQkgIERTVF9LRVkgKiwJIAkvKiB0aGUga2V5IHRvIHVzZSAqLwotCQkgIHZvaWQgKiosCSAJLyogcG9pbnRlciB0byBzdGF0ZSBzdHJ1Y3R1cmUgKi8KLQkJICBjb25zdCB1X2NoYXIgKiwJLyogZGF0YSB0byBiZSBzaWduZWQgKi8KLQkJICBjb25zdCBpbnQsCSAJLyogbGVuZ3RoIG9mIGlucHV0IGRhdGEgKi8KLQkJICB1X2NoYXIgKiwJIAkvKiBidWZmZXIgdG8gd3JpdGUgc2lnbmF0dXJlIHRvICovCi0JCSAgY29uc3QgaW50KTsJIAkvKiBzaXplIG9mIG91dHB1dCBidWZmZXIgKi8KLQotaW50IGRzdF92ZXJpZnlfZGF0YShjb25zdCBpbnQsCSAJLyogc3BlY2lmaWVzIElOSVQvVVBEQVRFL0ZJTkFML0FMTCAqLwotCQkgICAgRFNUX0tFWSAqLAkgCS8qIHRoZSBrZXkgdG8gdXNlICovCi0JCSAgICB2b2lkICoqLAkgCS8qIHBvaW50ZXIgdG8gc3RhdGUgc3RydWN0dXJlICovCi0JCSAgICBjb25zdCB1X2NoYXIgKiwJLyogZGF0YSB0byBiZSB2ZXJpZmllZCAqLwotCQkgICAgY29uc3QgaW50LAkgCS8qIGxlbmd0aCBvZiBpbnB1dCBkYXRhICovCi0JCSAgICBjb25zdCB1X2NoYXIgKiwJLyogYnVmZmVyIGNvbnRhaW5pbmcgc2lnbmF0dXJlICovCi0JCSAgICBjb25zdCBpbnQpOwkgCS8qIGxlbmd0aCBvZiBzaWduYXR1cmUgKi8KLQotCi1EU1RfS0VZICpkc3RfcmVhZF9rZXkoY29uc3QgY2hhciAqLAkvKiBuYW1lIG9mIGtleSAqLwotCQkgICAgICBjb25zdCB1X2ludDE2X3QsCS8qIGtleSB0YWcgaWRlbnRpZmllciAqLwotCQkgICAgICBjb25zdCBpbnQsCS8qIGtleSBhbGdvcml0aG0gKi8KLQkJICAgICAgY29uc3QgaW50KTsJLyogUHJpdmF0ZS9QdWJsaWNLZXkgd2FudGVkKi8KLQotaW50ICAgICAgZHN0X3dyaXRlX2tleShjb25zdCBEU1RfS0VZICosCS8qIGtleSB0byB3cml0ZSBvdXQgKi8KLQkJICAgICAgIGNvbnN0IGludCk7IAkvKiBQdWJsaWMvUHJpdmF0ZSAqLwotCi1EU1RfS0VZICpkc3RfZG5za2V5X3RvX2tleShjb25zdCBjaGFyICosCS8qIEtFWSByZWNvcmQgbmFtZSAqLwotCQkJICAgY29uc3QgdV9jaGFyICosCS8qIEtFWSBSREFUQSAqLwotCQkJICAgY29uc3QgaW50KTsJCS8qIHNpemUgb2YgaW5wdXQgYnVmZmVyKi8KLQotCi1pbnQgICAgICBkc3Rfa2V5X3RvX2Ruc2tleShjb25zdCBEU1RfS0VZICosCS8qIGtleSB0byB0cmFuc2xhdGUgKi8KLQkJCSAgIHVfY2hhciAqLAkJLyogb3V0cHV0IGJ1ZmZlciAqLwotCQkJICAgY29uc3QgaW50KTsJCS8qIHNpemUgb2Ygb3V0X3N0b3JhZ2UqLwotCi0KLURTVF9LRVkgKmRzdF9idWZmZXJfdG9fa2V5KGNvbnN0IGNoYXIgKiwgIAkvKiBuYW1lIG9mIHRoZSBrZXkgKi8KLQkJCSAgIGNvbnN0IGludCwJICAJLyogYWxnb3JpdGhtICovCi0JCQkgICBjb25zdCBpbnQsCSAgCS8qIGRucyBmbGFncyAqLwotCQkJICAgY29uc3QgaW50LAkgIAkvKiBkbnMgcHJvdG9jb2wgKi8KLQkJCSAgIGNvbnN0IHVfY2hhciAqLCAJLyoga2V5IGluIGRucyB3aXJlIGZtdCAqLwotCQkJICAgY29uc3QgaW50KTsJICAJLyogc2l6ZSBvZiBrZXkgKi8KLQotCi1pbnQgICAgIGRzdF9rZXlfdG9fYnVmZmVyKERTVF9LRVkgKiwgdV9jaGFyICosIGludCk7Ci0KLURTVF9LRVkgKmRzdF9nZW5lcmF0ZV9rZXkoY29uc3QgY2hhciAqLCAgICAJLyogbmFtZSBvZiBuZXcga2V5ICovCi0JCQkgIGNvbnN0IGludCwgICAgICAgCS8qIGtleSBhbGdvcml0aG0gdG8gZ2VuZXJhdGUgKi8KLQkJCSAgY29uc3QgaW50LCAgICAgIAkvKiBzaXplIG9mIG5ldyBrZXkgKi8KLQkJCSAgY29uc3QgaW50LCAgICAgICAJLyogYWxnIGRlcGVuZGVudCBwYXJhbWV0ZXIqLwotCQkJICBjb25zdCBpbnQsICAgICAJLyoga2V5IEROUyBmbGFncyAqLwotCQkJICBjb25zdCBpbnQpOwkJLyoga2V5IEROUyBwcm90b2NvbCAqLwotCi1EU1RfS0VZICpkc3RfZnJlZV9rZXkoRFNUX0tFWSAqKTsKLWludCAgICAgIGRzdF9jb21wYXJlX2tleXMoY29uc3QgRFNUX0tFWSAqLCBjb25zdCBEU1RfS0VZICopOwotCi1pbnQJZHN0X3NpZ19zaXplKERTVF9LRVkgKik7Ci0KLQotLyogc3VwcG9ydCBmb3IgZG5zIGtleSB0YWdzL2lkcyAqLwotdV9pbnQxNl90IGRzdF9zX2Ruc19rZXlfaWQoY29uc3QgdV9jaGFyICosIGNvbnN0IGludCk7Ci11X2ludDE2X3QgZHN0X3NfaWRfY2FsYyhjb25zdCB1X2NoYXIgKiwgY29uc3QgaW50KTsKLQotLyogVXNlZCBieSBjYWxsZXJzIGFzIHdlbGwgYXMgYnkgdGhlIGxpYnJhcnkuICAqLwotI2RlZmluZSBSQVdfS0VZX1NJWkUgICAgODE5MiAgICAgICAgLyogbGFyZ2UgZW5vdWdoIHRvIHN0b3JlIGFueSBrZXkgKi8KLQotLyogRFNUX0FQSSBjb250cm9sIGZsYWdzICovCi0vKiBUaGVzZSBhcmUgdXNlZCB1c2VkIGluIGZ1bmN0aW9ucyBkc3Rfc2lnbl9kYXRhIGFuZCBkc3RfdmVyaWZ5X2RhdGEgKi8KLSNkZWZpbmUgU0lHX01PREVfSU5JVAkJMSAgLyogaW5pdGlhbGl6ZSBkaWdlc3QgKi8KLSNkZWZpbmUgU0lHX01PREVfVVBEQVRFCQkyICAvKiBhZGQgZGF0YSB0byBkaWdlc3QgKi8KLSNkZWZpbmUgU0lHX01PREVfRklOQUwJCTQgIC8qIGdlbmVyYXRlL3ZlcmlmeSBzaWduYXR1cmUgKi8KLSNkZWZpbmUgU0lHX01PREVfQUxMCQkoU0lHX01PREVfSU5JVHxTSUdfTU9ERV9VUERBVEV8U0lHX01PREVfRklOQUwpCi0KLS8qIEZsYWdzIGZvciBkc3RfcmVhZF9wcml2YXRlX2tleSgpICAqLwotI2RlZmluZSBEU1RfRk9SQ0VfUkVBRAkJMHgxMDAwMDAwCi0jZGVmaW5lIERTVF9DQU5fU0lHTgkJMHgwMTBGCi0jZGVmaW5lIERTVF9OT19BVVRIRU4JCTB4ODAwMAotI2RlZmluZSBEU1RfRVhURU5EX0ZMQUcgICAgICAgICAweDEwMDAKLSNkZWZpbmUgRFNUX1NUQU5EQVJECQkwCi0jZGVmaW5lIERTVF9QUklWQVRFICAgICAgICAgICAgIDB4MjAwMDAwMAotI2RlZmluZSBEU1RfUFVCTElDICAgICAgICAgICAgICAweDQwMDAwMDAKLSNkZWZpbmUgRFNUX1JBTkRfU0VNSSAgICAgICAgICAgMQotI2RlZmluZSBEU1RfUkFORF9TVEQgICAgICAgICAgICAyCi0jZGVmaW5lIERTVF9SQU5EX0tFWSAgICAgICAgICAgIDMKLSNkZWZpbmUgRFNUX1JBTkRfRFNTICAgICAgICAgICAgNAotCi0KLS8qIERTVCBhbGdvcml0aG0gY29kZXMgKi8KLSNkZWZpbmUgS0VZX1JTQQkJCTEKLSNkZWZpbmUgS0VZX0RICQkJMgotI2RlZmluZSBLRVlfRFNBCQkJMwotI2RlZmluZSBLRVlfUFJJVkFURQkJMjU0Ci0jZGVmaW5lIEtFWV9FWFBBTkQJCTI1NQotI2RlZmluZSBLRVlfSE1BQ19NRDUJCTE1NwotI2RlZmluZSBLRVlfSE1BQ19TSEExCQkxNTgKLSNkZWZpbmUgVU5LTk9XTl9LRVlBTEcJCTAKLSNkZWZpbmUgRFNUX01BWF9BTEdTICAgICAgICAgICAgS0VZX0hNQUNfU0hBMQotCi0vKiBEU1QgY29uc3RhbnRzIHRvIGxvY2F0aW9ucyBpbiBLRVkgcmVjb3JkICBjaGFuZ2VzIGluIG5ldyBLRVkgcmVjb3JkICovCi0jZGVmaW5lIERTVF9GTEFHU19TSVpFCQkyCi0jZGVmaW5lIERTVF9LRVlfUFJPVAkJMgotI2RlZmluZSBEU1RfS0VZX0FMRwkJMwotI2RlZmluZSBEU1RfRVhUX0ZMQUcgICAgICAgICAgICA0Ci0jZGVmaW5lIERTVF9LRVlfU1RBUlQJCTQKLQotI2lmbmRlZiBTSUdOX0ZfTk9LRVkgCi0jZGVmaW5lIFNJR05fRl9OT0tFWQkJMHhDMDAwCi0jZW5kaWYKLQotLyogZXJyb3IgY29kZXMgZnJvbSBkc3Qgcm91dGluZXMgKi8KLSNkZWZpbmUgU0lHTl9JTklUX0ZBSUxVUkUJKC0yMykKLSNkZWZpbmUgU0lHTl9VUERBVEVfRkFJTFVSRQkoLTI0KQotI2RlZmluZSBTSUdOX0ZJTkFMX0ZBSUxVUkUJKC0yNSkKLSNkZWZpbmUgVkVSSUZZX0lOSVRfRkFJTFVSRQkoLTI2KQotI2RlZmluZSBWRVJJRllfVVBEQVRFX0ZBSUxVUkUJKC0yNykKLSNkZWZpbmUgVkVSSUZZX0ZJTkFMX0ZBSUxVUkUJKC0yOCkKLSNkZWZpbmUgTUlTU0lOR19LRVlfT1JfU0lHTkFUVVJFICgtMzApCi0jZGVmaW5lIFVOU1VQUE9SVEVEX0tFWUFMRwkoLTMxKQotCi0jZW5kaWYgLyogRFNUX0ggKi8KZGlmZiAtLWdpdCBhL2xpYmMvcHJpdmF0ZS9pc2MvZXZlbnRsaWIuaCBiL2xpYmMvcHJpdmF0ZS9pc2MvZXZlbnRsaWIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTE4NWY2Ny4uMDAwMDAwMAotLS0gYS9saWJjL3ByaXZhdGUvaXNjL2V2ZW50bGliLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMDQgKzAsMCBAQAotLyoJJE5ldEJTRDogZXZlbnRsaWIuaCx2IDEuMS4xLjMgMjAwNS8xMi8yMSAyMzoxNToyMiBjaHJpc3RvcyBFeHAgJAkqLwotCi0vKgotICogQ29weXJpZ2h0IChjKSAyMDA0IGJ5IEludGVybmV0IFN5c3RlbXMgQ29uc29ydGl1bSwgSW5jLiAoIklTQyIpCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTUtMTk5OSBieSBJbnRlcm5ldCBTb2Z0d2FyZSBDb25zb3J0aXVtCi0gKgotICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55Ci0gKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgotICoKLSAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBJU0MgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCi0gKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCi0gKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuICBJTiBOTyBFVkVOVCBTSEFMTCBJU0MgQkUgTElBQkxFIEZPUgotICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUwotICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCi0gKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVAotICogT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KLSAqLwotCi0vKiBldmVudGxpYi5oIC0gZXhwb3J0ZWQgaW50ZXJmYWNlcyBmb3IgZXZlbnRsaWIKLSAqIHZpeCAwOXNlcDk1IFtpbml0aWFsXQotICoKLSAqIElkOiBldmVudGxpYi5oLHYgMS4xLjIuMS40LjIgMjAwNS8wNy8yOCAwNzo0MzoxOCBtYXJrYSBFeHAKLSAqLwotCi0jaWZuZGVmIF9FVkVOVExJQl9ICi0jZGVmaW5lIF9FVkVOVExJQl9ICi0KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpbmNsdWRlIDxzeXMvdWlvLmg+Ci0jaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotCi0jaWZuZGVmIF9fUAotIyBkZWZpbmUgX19FVkVOVExJQl9QX0RFRklORUQKLSMgaWZkZWYgX19TVERDX18KLSMgIGRlZmluZSBfX1AoeCkgeAotIyBlbHNlCi0jICBkZWZpbmUgX19QKHgpICgpCi0jIGVuZGlmCi0jZW5kaWYKLQotLyogSW4gdGhlIGFic2VuY2Ugb2YgYnJhbmRlZCB0eXBlcy4uLiAqLwotdHlwZWRlZiBzdHJ1Y3QgeyB2b2lkICpvcGFxdWU7IH0gZXZDb25uSUQ7Ci10eXBlZGVmIHN0cnVjdCB7IHZvaWQgKm9wYXF1ZTsgfSBldkZpbGVJRDsKLXR5cGVkZWYgc3RydWN0IHsgdm9pZCAqb3BhcXVlOyB9IGV2U3RyZWFtSUQ7Ci10eXBlZGVmIHN0cnVjdCB7IHZvaWQgKm9wYXF1ZTsgfSBldlRpbWVySUQ7Ci10eXBlZGVmIHN0cnVjdCB7IHZvaWQgKm9wYXF1ZTsgfSBldldhaXRJRDsKLXR5cGVkZWYgc3RydWN0IHsgdm9pZCAqb3BhcXVlOyB9IGV2Q29udGV4dDsKLXR5cGVkZWYgc3RydWN0IHsgdm9pZCAqb3BhcXVlOyB9IGV2RXZlbnQ7Ci0KLSNkZWZpbmUJZXZJbml0SUQoaWQpICgoaWQpLT5vcGFxdWUgPSBOVUxMKQotI2RlZmluZQlldlRlc3RJRChpZCkgKChpZCkub3BhcXVlICE9IE5VTEwpCi0KLXR5cGVkZWYgdm9pZCAoKmV2Q29ubkZ1bmMpX19QKChldkNvbnRleHQsIHZvaWQgKiwgaW50LCBjb25zdCB2b2lkICosIGludCwKLQkJCSAgICAgICBjb25zdCB2b2lkICosIGludCkpOwotdHlwZWRlZiB2b2lkICgqZXZGaWxlRnVuYylfX1AoKGV2Q29udGV4dCwgdm9pZCAqLCBpbnQsIGludCkpOwotdHlwZWRlZgl2b2lkICgqZXZTdHJlYW1GdW5jKV9fUCgoZXZDb250ZXh0LCB2b2lkICosIGludCwgaW50KSk7Ci10eXBlZGVmIHZvaWQgKCpldlRpbWVyRnVuYylfX1AoKGV2Q29udGV4dCwgdm9pZCAqLAotCQkJCXN0cnVjdCB0aW1lc3BlYywgc3RydWN0IHRpbWVzcGVjKSk7Ci10eXBlZGVmCXZvaWQgKCpldldhaXRGdW5jKV9fUCgoZXZDb250ZXh0LCB2b2lkICosIGNvbnN0IHZvaWQgKikpOwotCi10eXBlZGVmCXN0cnVjdCB7IHVuc2lnbmVkIGNoYXIgbWFza1syNTYvOF07IH0gZXZCeXRlTWFzazsKLSNkZWZpbmUJRVZfQllURU1BU0tfQllURShiKSAoKGIpIC8gOCkKLSNkZWZpbmUJRVZfQllURU1BU0tfTUFTSyhiKSAoMSA8PCAoKGIpICUgOCkpCi0jZGVmaW5lCUVWX0JZVEVNQVNLX1NFVChibSwgYikgXAotCSgoYm0pLm1hc2tbRVZfQllURU1BU0tfQllURShiKV0gfD0gRVZfQllURU1BU0tfTUFTSyhiKSkKLSNkZWZpbmUJRVZfQllURU1BU0tfQ0xSKGJtLCBiKSBcCi0JKChibSkubWFza1tFVl9CWVRFTUFTS19CWVRFKGIpXSAmPSB+RVZfQllURU1BU0tfTUFTSyhiKSkKLSNkZWZpbmUJRVZfQllURU1BU0tfVFNUKGJtLCBiKSBcCi0JKChibSkubWFza1tFVl9CWVRFTUFTS19CWVRFKGIpXSAmIEVWX0JZVEVNQVNLX01BU0soYikpCi0KLSNkZWZpbmUJRVZfUE9MTAkJMQotI2RlZmluZQlFVl9XQUlUCQkyCi0jZGVmaW5lCUVWX05VTEwJCTQKLQotI2RlZmluZQlFVl9SRUFECQkxCi0jZGVmaW5lCUVWX1dSSVRFCTIKLSNkZWZpbmUJRVZfRVhDRVBUCTQKLQotI2RlZmluZSBFVl9XQVNOT05CTE9DS0lORyA4CS8qIEludGVybmFsIGxpYnJhcnkgdXNlLiAqLwotCi0vKiBldmVudGxpYi5jICovCi0jZGVmaW5lIGV2Q3JlYXRlCV9fZXZDcmVhdGUKLSNkZWZpbmUgZXZTZXREZWJ1ZwlfX2V2U2V0RGVidWcKLSNkZWZpbmUgZXZEZXN0cm95CV9fZXZEZXN0cm95Ci0jZGVmaW5lIGV2R2V0TmV4dAlfX2V2R2V0TmV4dAotI2RlZmluZSBldkRpc3BhdGNoCV9fZXZEaXNwYXRjaAotI2RlZmluZSBldkRyb3AJCV9fZXZEcm9wCi0jZGVmaW5lIGV2TWFpbkxvb3AJX19ldk1haW5Mb29wCi0jZGVmaW5lIGV2SGlnaGVzdEZECV9fZXZIaWdoZXN0RkQKLSNkZWZpbmUgZXZHZXRPcHRpb24JX19ldkdldE9wdGlvbgotI2RlZmluZSBldlNldE9wdGlvbglfX2V2U2V0T3B0aW9uCi0KLWludCAgZXZDcmVhdGUgX19QKChldkNvbnRleHQgKikpOwotdm9pZCBldlNldERlYnVnIF9fUCgoZXZDb250ZXh0LCBpbnQsIEZJTEUgKikpOwotaW50ICBldkRlc3Ryb3kgX19QKChldkNvbnRleHQpKTsKLWludCAgZXZHZXROZXh0IF9fUCgoZXZDb250ZXh0LCBldkV2ZW50ICosIGludCkpOwotaW50ICBldkRpc3BhdGNoIF9fUCgoZXZDb250ZXh0LCBldkV2ZW50KSk7Ci12b2lkIGV2RHJvcCBfX1AoKGV2Q29udGV4dCwgZXZFdmVudCkpOwotaW50ICBldk1haW5Mb29wIF9fUCgoZXZDb250ZXh0KSk7Ci1pbnQgIGV2SGlnaGVzdEZEIF9fUCgoZXZDb250ZXh0KSk7Ci1pbnQgIGV2R2V0T3B0aW9uIF9fUCgoZXZDb250ZXh0ICosIGNvbnN0IGNoYXIgKiwgaW50ICopKTsKLWludCAgZXZTZXRPcHRpb24gX19QKChldkNvbnRleHQgKiwgY29uc3QgY2hhciAqLCBpbnQpKTsKLQotLyogZXZfY29ubmVjdHMuYyAqLwotI2RlZmluZSBldkxpc3RlbglfX2V2TGlzdGVuCi0jZGVmaW5lIGV2Q29ubmVjdAlfX2V2Q29ubmVjdAotI2RlZmluZSBldkNhbmNlbENvbm4JX19ldkNhbmNlbENvbm4KLSNkZWZpbmUgZXZIb2xkCQlfX2V2SG9sZAotI2RlZmluZSBldlVuaG9sZAlfX2V2VW5ob2xkCi0jZGVmaW5lIGV2VHJ5QWNjZXB0CV9fZXZUcnlBY2NlcHQKLQotaW50IGV2TGlzdGVuIF9fUCgoZXZDb250ZXh0LCBpbnQsIGludCwgZXZDb25uRnVuYywgdm9pZCAqLCBldkNvbm5JRCAqKSk7Ci1pbnQgZXZDb25uZWN0IF9fUCgoZXZDb250ZXh0LCBpbnQsIGNvbnN0IHZvaWQgKiwgaW50LAotCQkgICBldkNvbm5GdW5jLCB2b2lkICosIGV2Q29ubklEICopKTsKLWludCBldkNhbmNlbENvbm4gX19QKChldkNvbnRleHQsIGV2Q29ubklEKSk7Ci1pbnQgZXZIb2xkIF9fUCgoZXZDb250ZXh0LCBldkNvbm5JRCkpOwotaW50IGV2VW5ob2xkIF9fUCgoZXZDb250ZXh0LCBldkNvbm5JRCkpOwotaW50IGV2VHJ5QWNjZXB0IF9fUCgoZXZDb250ZXh0LCBldkNvbm5JRCwgaW50ICopKTsKLQotLyogZXZfZmlsZXMuYyAqLwotI2RlZmluZSBldlNlbGVjdEZECV9fZXZTZWxlY3RGRAotI2RlZmluZSBldkRlc2VsZWN0RkQJX19ldkRlc2VsZWN0RkQKLQotaW50IGV2U2VsZWN0RkQgX19QKChldkNvbnRleHQsIGludCwgaW50LCBldkZpbGVGdW5jLCB2b2lkICosIGV2RmlsZUlEICopKTsKLWludCBldkRlc2VsZWN0RkQgX19QKChldkNvbnRleHQsIGV2RmlsZUlEKSk7Ci0KLS8qIGV2X3N0cmVhbXMuYyAqLwotI2RlZmluZSBldkNvbnNJb3ZlYwlfX2V2Q29uc0lvdmVjCi0jZGVmaW5lIGV2V3JpdGUJCV9fZXZXcml0ZQotI2RlZmluZSBldlJlYWQJCV9fZXZSZWFkCi0jZGVmaW5lIGV2VGltZVJXCV9fZXZUaW1lUlcKLSNkZWZpbmUgZXZVbnRpbWVSVwlfX2V2VW50aW1lUlcKLSNkZWZpbmUJZXZDYW5jZWxSVwlfX2V2Q2FuY2VsUlcKLQotc3RydWN0IGlvdmVjIGV2Q29uc0lvdmVjIF9fUCgodm9pZCAqLCBzaXplX3QpKTsKLWludCBldldyaXRlIF9fUCgoZXZDb250ZXh0LCBpbnQsIGNvbnN0IHN0cnVjdCBpb3ZlYyAqLCBpbnQsCi0JCSBldlN0cmVhbUZ1bmMgZnVuYywgdm9pZCAqLCBldlN0cmVhbUlEICopKTsKLWludCBldlJlYWQgX19QKChldkNvbnRleHQsIGludCwgY29uc3Qgc3RydWN0IGlvdmVjICosIGludCwKLQkJZXZTdHJlYW1GdW5jIGZ1bmMsIHZvaWQgKiwgZXZTdHJlYW1JRCAqKSk7Ci1pbnQgZXZUaW1lUlcgX19QKChldkNvbnRleHQsIGV2U3RyZWFtSUQsIGV2VGltZXJJRCB0aW1lcikpOwotaW50IGV2VW50aW1lUlcgX19QKChldkNvbnRleHQsIGV2U3RyZWFtSUQpKTsKLWludCBldkNhbmNlbFJXIF9fUCgoZXZDb250ZXh0LCBldlN0cmVhbUlEKSk7Ci0KLS8qIGV2X3RpbWVycy5jICovCi0jZGVmaW5lIGV2Q29uc1RpbWUJX19ldkNvbnNUaW1lCi0jZGVmaW5lIGV2QWRkVGltZQlfX2V2QWRkVGltZQotI2RlZmluZSBldlN1YlRpbWUJX19ldlN1YlRpbWUKLSNkZWZpbmUgZXZDbXBUaW1lCV9fZXZDbXBUaW1lCi0jZGVmaW5lCWV2VGltZVNwZWMJX19ldlRpbWVTcGVjCi0jZGVmaW5lCWV2VGltZVZhbAlfX2V2VGltZVZhbAotCi0jZGVmaW5lIGV2Tm93VGltZQkJX19ldk5vd1RpbWUKLSNkZWZpbmUgZXZVVENUaW1lCQlfX2V2VVRDVGltZQotI2RlZmluZSBldkxhc3RFdmVudFRpbWUJCV9fZXZMYXN0RXZlbnRUaW1lCi0jZGVmaW5lIGV2U2V0VGltZXIJCV9fZXZTZXRUaW1lcgotI2RlZmluZSBldkNsZWFyVGltZXIJCV9fZXZDbGVhclRpbWVyCi0jZGVmaW5lIGV2Q29uZmlnVGltZXIJCV9fZXZDb25maWdUaW1lcgotI2RlZmluZSBldlJlc2V0VGltZXIJCV9fZXZSZXNldFRpbWVyCi0jZGVmaW5lIGV2U2V0SWRsZVRpbWVyCQlfX2V2U2V0SWRsZVRpbWVyCi0jZGVmaW5lIGV2Q2xlYXJJZGxlVGltZXIJX19ldkNsZWFySWRsZVRpbWVyCi0jZGVmaW5lIGV2UmVzZXRJZGxlVGltZXIJX19ldlJlc2V0SWRsZVRpbWVyCi0jZGVmaW5lIGV2VG91Y2hJZGxlVGltZXIJX19ldlRvdWNoSWRsZVRpbWVyCi0KLXN0cnVjdCB0aW1lc3BlYyBldkNvbnNUaW1lIF9fUCgodGltZV90IHNlYywgbG9uZyBuc2VjKSk7Ci1zdHJ1Y3QgdGltZXNwZWMgZXZBZGRUaW1lIF9fUCgoc3RydWN0IHRpbWVzcGVjLCBzdHJ1Y3QgdGltZXNwZWMpKTsKLXN0cnVjdCB0aW1lc3BlYyBldlN1YlRpbWUgX19QKChzdHJ1Y3QgdGltZXNwZWMsIHN0cnVjdCB0aW1lc3BlYykpOwotc3RydWN0IHRpbWVzcGVjIGV2Tm93VGltZSBfX1AoKHZvaWQpKTsKLXN0cnVjdCB0aW1lc3BlYyBldlVUQ1RpbWUgX19QKCh2b2lkKSk7Ci1zdHJ1Y3QgdGltZXNwZWMgZXZMYXN0RXZlbnRUaW1lIF9fUCgoZXZDb250ZXh0KSk7Ci1zdHJ1Y3QgdGltZXNwZWMgZXZUaW1lU3BlYyBfX1AoKHN0cnVjdCB0aW1ldmFsKSk7Ci1zdHJ1Y3QgdGltZXZhbCBldlRpbWVWYWwgX19QKChzdHJ1Y3QgdGltZXNwZWMpKTsKLWludCBldkNtcFRpbWUgX19QKChzdHJ1Y3QgdGltZXNwZWMsIHN0cnVjdCB0aW1lc3BlYykpOwotaW50IGV2U2V0VGltZXIgX19QKChldkNvbnRleHQsIGV2VGltZXJGdW5jLCB2b2lkICosIHN0cnVjdCB0aW1lc3BlYywKLQkJICAgIHN0cnVjdCB0aW1lc3BlYywgZXZUaW1lcklEICopKTsKLWludCBldkNsZWFyVGltZXIgX19QKChldkNvbnRleHQsIGV2VGltZXJJRCkpOwotaW50IGV2Q29uZmlnVGltZXIgX19QKChldkNvbnRleHQsIGV2VGltZXJJRCwgY29uc3QgY2hhciAqcGFyYW0sCi0JCSAgICAgIGludCB2YWx1ZSkpOwotaW50IGV2UmVzZXRUaW1lciBfX1AoKGV2Q29udGV4dCwgZXZUaW1lcklELCBldlRpbWVyRnVuYywgdm9pZCAqLAotCQkgICAgICBzdHJ1Y3QgdGltZXNwZWMsIHN0cnVjdCB0aW1lc3BlYykpOwotaW50IGV2U2V0SWRsZVRpbWVyIF9fUCgoZXZDb250ZXh0LCBldlRpbWVyRnVuYywgdm9pZCAqLCBzdHJ1Y3QgdGltZXNwZWMsCi0JCQlldlRpbWVySUQgKikpOwotaW50IGV2Q2xlYXJJZGxlVGltZXIgX19QKChldkNvbnRleHQsIGV2VGltZXJJRCkpOwotaW50IGV2UmVzZXRJZGxlVGltZXIgX19QKChldkNvbnRleHQsIGV2VGltZXJJRCwgZXZUaW1lckZ1bmMsIHZvaWQgKiwKLQkJCSAgc3RydWN0IHRpbWVzcGVjKSk7Ci1pbnQgZXZUb3VjaElkbGVUaW1lciBfX1AoKGV2Q29udGV4dCwgZXZUaW1lcklEKSk7Ci0KLS8qIGV2X3dhaXRzLmMgKi8KLSNkZWZpbmUgZXZXYWl0Rm9yCV9fZXZXYWl0Rm9yCi0jZGVmaW5lIGV2RG8JCV9fZXZEbwotI2RlZmluZSBldlVud2FpdAlfX2V2VW53YWl0Ci0jZGVmaW5lIGV2RGVmZXIJCV9fZXZEZWZlcgotCi1pbnQgZXZXYWl0Rm9yIF9fUCgoZXZDb250ZXh0LCBjb25zdCB2b2lkICosIGV2V2FpdEZ1bmMsIHZvaWQgKiwgZXZXYWl0SUQgKikpOwotaW50IGV2RG8gX19QKChldkNvbnRleHQsIGNvbnN0IHZvaWQgKikpOwotaW50IGV2VW53YWl0IF9fUCgoZXZDb250ZXh0LCBldldhaXRJRCkpOwotaW50IGV2RGVmZXIgX19QKChldkNvbnRleHQsIGV2V2FpdEZ1bmMsIHZvaWQgKikpOwotCi0jaWZkZWYgX19FVkVOVExJQl9QX0RFRklORUQKLSMgdW5kZWYgX19QCi0jZW5kaWYKLQotI2VuZGlmIC8qX0VWRU5UTElCX0gqLwpkaWZmIC0tZ2l0IGEvbGliYy9wcml2YXRlL2lzYy9oZWFwLmggYi9saWJjL3ByaXZhdGUvaXNjL2hlYXAuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWE1YTZlOS4uMDAwMDAwMAotLS0gYS9saWJjL3ByaXZhdGUvaXNjL2hlYXAuaAorKysgL2Rldi9udWxsCkBAIC0xLDQ5ICswLDAgQEAKLS8qCSROZXRCU0Q6IGhlYXAuaCx2IDEuMS4xLjEgMjAwNC8wNS8yMCAxOTo0OTo0MSBjaHJpc3RvcyBFeHAgJAkqLwotCi0vKgotICogQ29weXJpZ2h0IChjKSAyMDA0IGJ5IEludGVybmV0IFN5c3RlbXMgQ29uc29ydGl1bSwgSW5jLiAoIklTQyIpCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTcsMTk5OSBieSBJbnRlcm5ldCBTb2Z0d2FyZSBDb25zb3J0aXVtLgotICoKLSAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQotICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KLSAqCi0gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgSVNDIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUwotICogV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgotICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiAgSU4gTk8gRVZFTlQgU0hBTEwgSVNDIEJFIExJQUJMRSBGT1IKLSAqIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKLSAqIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgotICogQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQKLSAqIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCi0gKi8KLQotdHlwZWRlZiBpbnQgKCpoZWFwX2hpZ2hlcl9wcmlvcml0eV9mdW5jKSh2b2lkICosIHZvaWQgKik7Ci10eXBlZGVmIHZvaWQgKCpoZWFwX2luZGV4X2Z1bmMpKHZvaWQgKiwgaW50KTsKLXR5cGVkZWYgdm9pZCAoKmhlYXBfZm9yX2VhY2hfZnVuYykodm9pZCAqLCB2b2lkICopOwotCi10eXBlZGVmIHN0cnVjdCBoZWFwX2NvbnRleHQgewotCWludCBhcnJheV9zaXplOwotCWludCBhcnJheV9zaXplX2luY3JlbWVudDsKLQlpbnQgaGVhcF9zaXplOwotCXZvaWQgKipoZWFwOwotCWhlYXBfaGlnaGVyX3ByaW9yaXR5X2Z1bmMgaGlnaGVyX3ByaW9yaXR5OwotCWhlYXBfaW5kZXhfZnVuYyBpbmRleDsKLX0gKmhlYXBfY29udGV4dDsKLQotI2RlZmluZSBoZWFwX25ldwlfX2hlYXBfbmV3Ci0jZGVmaW5lIGhlYXBfZnJlZQlfX2hlYXBfZnJlZQotI2RlZmluZSBoZWFwX2luc2VydAlfX2hlYXBfaW5zZXJ0Ci0jZGVmaW5lIGhlYXBfZGVsZXRlCV9faGVhcF9kZWxldGUKLSNkZWZpbmUgaGVhcF9pbmNyZWFzZWQJX19oZWFwX2luY3JlYXNlZAotI2RlZmluZSBoZWFwX2RlY3JlYXNlZAlfX2hlYXBfZGVjcmVhc2VkCi0jZGVmaW5lIGhlYXBfZWxlbWVudAlfX2hlYXBfZWxlbWVudAotI2RlZmluZSBoZWFwX2Zvcl9lYWNoCV9faGVhcF9mb3JfZWFjaAotCi1oZWFwX2NvbnRleHQJaGVhcF9uZXcoaGVhcF9oaWdoZXJfcHJpb3JpdHlfZnVuYywgaGVhcF9pbmRleF9mdW5jLCBpbnQpOwotaW50CQloZWFwX2ZyZWUoaGVhcF9jb250ZXh0KTsKLWludAkJaGVhcF9pbnNlcnQoaGVhcF9jb250ZXh0LCB2b2lkICopOwotaW50CQloZWFwX2RlbGV0ZShoZWFwX2NvbnRleHQsIGludCk7Ci1pbnQJCWhlYXBfaW5jcmVhc2VkKGhlYXBfY29udGV4dCwgaW50KTsKLWludAkJaGVhcF9kZWNyZWFzZWQoaGVhcF9jb250ZXh0LCBpbnQpOwotdm9pZCAqCQloZWFwX2VsZW1lbnQoaGVhcF9jb250ZXh0LCBpbnQpOwotaW50CQloZWFwX2Zvcl9lYWNoKGhlYXBfY29udGV4dCwgaGVhcF9mb3JfZWFjaF9mdW5jLCB2b2lkICopOwpkaWZmIC0tZ2l0IGEvbGliYy9wcml2YXRlL2lzYy9saXN0LmggYi9saWJjL3ByaXZhdGUvaXNjL2xpc3QuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDg5NzY2YS4uMDAwMDAwMAotLS0gYS9saWJjL3ByaXZhdGUvaXNjL2xpc3QuaAorKysgL2Rldi9udWxsCkBAIC0xLDExNCArMCwwIEBACi0vKgkkTmV0QlNEOiBsaXN0LmgsdiAxLjIgMjAwNC8wNS8yMCAxOTo1MTo1NSBjaHJpc3RvcyBFeHAgJAkqLwotCi0vKgotICogQ29weXJpZ2h0IChjKSAyMDA0IGJ5IEludGVybmV0IFN5c3RlbXMgQ29uc29ydGl1bSwgSW5jLiAoIklTQyIpCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTcsMTk5OSBieSBJbnRlcm5ldCBTb2Z0d2FyZSBDb25zb3J0aXVtLgotICoKLSAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQotICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KLSAqCi0gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgSVNDIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUwotICogV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgotICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiAgSU4gTk8gRVZFTlQgU0hBTEwgSVNDIEJFIExJQUJMRSBGT1IKLSAqIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKLSAqIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgotICogQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQKLSAqIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCi0gKi8KLQotI2lmbmRlZiBMSVNUX0gKLSNkZWZpbmUgTElTVF9IIDEKLSNpbmNsdWRlIDxpc2MvYXNzZXJ0aW9ucy5oPgotCi0jZGVmaW5lIExJU1QodHlwZSkgc3RydWN0IHsgdHlwZSAqaGVhZCwgKnRhaWw7IH0KLSNkZWZpbmUgSU5JVF9MSVNUKGxpc3QpIFwKLQlkbyB7IChsaXN0KS5oZWFkID0gTlVMTDsgKGxpc3QpLnRhaWwgPSBOVUxMOyB9IHdoaWxlICgvKkNPTlNUQ09ORCovMCkKLQotI2RlZmluZSBMSU5LKHR5cGUpIHN0cnVjdCB7IHR5cGUgKnByZXYsICpuZXh0OyB9Ci0jZGVmaW5lIElOSVRfTElOS19UWVBFKGVsdCwgbGluaywgdHlwZSkgXAotCWRvIHsgXAotCQkoZWx0KS0+bGluay5wcmV2ID0gKHR5cGUgKikoLTEpOyBcCi0JCShlbHQpLT5saW5rLm5leHQgPSAodHlwZSAqKSgtMSk7IFwKLQl9IHdoaWxlICgvKkNPTlNUQ09ORCovMCkKLSNkZWZpbmUgSU5JVF9MSU5LKGVsdCwgbGluaykgXAotCUlOSVRfTElOS19UWVBFKGVsdCwgbGluaywgdm9pZCkKLSNkZWZpbmUgTElOS0VEKGVsdCwgbGluaykgKCh2b2lkICopKChlbHQpLT5saW5rLnByZXYpICE9ICh2b2lkICopKC0xKSkKLQotI2RlZmluZSBIRUFEKGxpc3QpICgobGlzdCkuaGVhZCkKLSNkZWZpbmUgVEFJTChsaXN0KSAoKGxpc3QpLnRhaWwpCi0jZGVmaW5lIEVNUFRZKGxpc3QpICgobGlzdCkuaGVhZCA9PSBOVUxMKQotCi0jZGVmaW5lIFBSRVBFTkQobGlzdCwgZWx0LCBsaW5rKSBcCi0JZG8geyBcCi0JCUlOU0lTVCghTElOS0VEKGVsdCwgbGluaykpO1wKLQkJaWYgKChsaXN0KS5oZWFkICE9IE5VTEwpIFwKLQkJCShsaXN0KS5oZWFkLT5saW5rLnByZXYgPSAoZWx0KTsgXAotCQllbHNlIFwKLQkJCShsaXN0KS50YWlsID0gKGVsdCk7IFwKLQkJKGVsdCktPmxpbmsucHJldiA9IE5VTEw7IFwKLQkJKGVsdCktPmxpbmsubmV4dCA9IChsaXN0KS5oZWFkOyBcCi0JCShsaXN0KS5oZWFkID0gKGVsdCk7IFwKLQl9IHdoaWxlICgvKkNPTlNUQ09ORCovMCkKLQotI2RlZmluZSBBUFBFTkQobGlzdCwgZWx0LCBsaW5rKSBcCi0JZG8geyBcCi0JCUlOU0lTVCghTElOS0VEKGVsdCwgbGluaykpO1wKLQkJaWYgKChsaXN0KS50YWlsICE9IE5VTEwpIFwKLQkJCShsaXN0KS50YWlsLT5saW5rLm5leHQgPSAoZWx0KTsgXAotCQllbHNlIFwKLQkJCShsaXN0KS5oZWFkID0gKGVsdCk7IFwKLQkJKGVsdCktPmxpbmsucHJldiA9IChsaXN0KS50YWlsOyBcCi0JCShlbHQpLT5saW5rLm5leHQgPSBOVUxMOyBcCi0JCShsaXN0KS50YWlsID0gKGVsdCk7IFwKLQl9IHdoaWxlICgvKkNPTlNUQ09ORCovMCkKLQotI2RlZmluZSBVTkxJTktfVFlQRShsaXN0LCBlbHQsIGxpbmssIHR5cGUpIFwKLQlkbyB7IFwKLQkJSU5TSVNUKExJTktFRChlbHQsIGxpbmspKTtcCi0JCWlmICgoZWx0KS0+bGluay5uZXh0ICE9IE5VTEwpIFwKLQkJCShlbHQpLT5saW5rLm5leHQtPmxpbmsucHJldiA9IChlbHQpLT5saW5rLnByZXY7IFwKLQkJZWxzZSBcCi0JCQkobGlzdCkudGFpbCA9IChlbHQpLT5saW5rLnByZXY7IFwKLQkJaWYgKChlbHQpLT5saW5rLnByZXYgIT0gTlVMTCkgXAotCQkJKGVsdCktPmxpbmsucHJldi0+bGluay5uZXh0ID0gKGVsdCktPmxpbmsubmV4dDsgXAotCQllbHNlIFwKLQkJCShsaXN0KS5oZWFkID0gKGVsdCktPmxpbmsubmV4dDsgXAotCQlJTklUX0xJTktfVFlQRShlbHQsIGxpbmssIHR5cGUpOyBcCi0JfSB3aGlsZSAoLypDT05TVENPTkQqLzApCi0jZGVmaW5lIFVOTElOSyhsaXN0LCBlbHQsIGxpbmspIFwKLQlVTkxJTktfVFlQRShsaXN0LCBlbHQsIGxpbmssIHZvaWQpCi0KLSNkZWZpbmUgUFJFVihlbHQsIGxpbmspICgoZWx0KS0+bGluay5wcmV2KQotI2RlZmluZSBORVhUKGVsdCwgbGluaykgKChlbHQpLT5saW5rLm5leHQpCi0KLSNkZWZpbmUgSU5TRVJUX0JFRk9SRShsaXN0LCBiZWZvcmUsIGVsdCwgbGluaykgXAotCWRvIHsgXAotCQlJTlNJU1QoIUxJTktFRChlbHQsIGxpbmspKTtcCi0JCWlmICgoYmVmb3JlKS0+bGluay5wcmV2ID09IE5VTEwpIFwKLQkJCVBSRVBFTkQobGlzdCwgZWx0LCBsaW5rKTsgXAotCQllbHNlIHsgXAotCQkJKGVsdCktPmxpbmsucHJldiA9IChiZWZvcmUpLT5saW5rLnByZXY7IFwKLQkJCShiZWZvcmUpLT5saW5rLnByZXYgPSAoZWx0KTsgXAotCQkJKGVsdCktPmxpbmsucHJldi0+bGluay5uZXh0ID0gKGVsdCk7IFwKLQkJCShlbHQpLT5saW5rLm5leHQgPSAoYmVmb3JlKTsgXAotCQl9IFwKLQl9IHdoaWxlICgvKkNPTlNUQ09ORCovMCkKLQotI2RlZmluZSBJTlNFUlRfQUZURVIobGlzdCwgYWZ0ZXIsIGVsdCwgbGluaykgXAotCWRvIHsgXAotCQlJTlNJU1QoIUxJTktFRChlbHQsIGxpbmspKTtcCi0JCWlmICgoYWZ0ZXIpLT5saW5rLm5leHQgPT0gTlVMTCkgXAotCQkJQVBQRU5EKGxpc3QsIGVsdCwgbGluayk7IFwKLQkJZWxzZSB7IFwKLQkJCShlbHQpLT5saW5rLm5leHQgPSAoYWZ0ZXIpLT5saW5rLm5leHQ7IFwKLQkJCShhZnRlciktPmxpbmsubmV4dCA9IChlbHQpOyBcCi0JCQkoZWx0KS0+bGluay5uZXh0LT5saW5rLnByZXYgPSAoZWx0KTsgXAotCQkJKGVsdCktPmxpbmsucHJldiA9IChhZnRlcik7IFwKLQkJfSBcCi0JfSB3aGlsZSAoLypDT05TVENPTkQqLzApCi0KLSNkZWZpbmUgRU5RVUVVRShsaXN0LCBlbHQsIGxpbmspIEFQUEVORChsaXN0LCBlbHQsIGxpbmspCi0jZGVmaW5lIERFUVVFVUUobGlzdCwgZWx0LCBsaW5rKSBVTkxJTksobGlzdCwgZWx0LCBsaW5rKQotCi0jZW5kaWYgLyogTElTVF9IICovCmRpZmYgLS1naXQgYS9saWJjL3ByaXZhdGUvaXNjL21lbWNsdXN0ZXIuaCBiL2xpYmMvcHJpdmF0ZS9pc2MvbWVtY2x1c3Rlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZGFhZjIwLi4wMDAwMDAwCi0tLSBhL2xpYmMvcHJpdmF0ZS9pc2MvbWVtY2x1c3Rlci5oCisrKyAvZGV2L251bGwKQEAgLTEsNTEgKzAsMCBAQAotLyoJJE5ldEJTRDogbWVtY2x1c3Rlci5oLHYgMS4xLjEuMSAyMDA0LzA1LzIwIDE5OjQ5OjQxIGNocmlzdG9zIEV4cCAkCSovCi0KLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgYnkgSW50ZXJuZXQgU3lzdGVtcyBDb25zb3J0aXVtLCBJbmMuICgiSVNDIikKLSAqIENvcHlyaWdodCAoYykgMTk5NywxOTk5IGJ5IEludGVybmV0IFNvZnR3YXJlIENvbnNvcnRpdW0uCi0gKgotICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55Ci0gKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgotICoKLSAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBJU0MgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCi0gKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCi0gKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuICBJTiBOTyBFVkVOVCBTSEFMTCBJU0MgQkUgTElBQkxFIEZPUgotICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUwotICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCi0gKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVAotICogT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KLSAqLwotCi0jaWZuZGVmIE1FTUNMVVNURVJfSAotI2RlZmluZSBNRU1DTFVTVEVSX0gKLQotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0KLSNkZWZpbmUgbWVtaW5pdAkJX19tZW1pbml0Ci0jaWZkZWYgTUVNQ0xVU1RFUl9ERUJVRwotI2RlZmluZSBtZW1nZXQocykJX19tZW1nZXRfZGVidWcocywgX19GSUxFX18sIF9fTElORV9fKQotI2RlZmluZSBtZW1wdXQocCwgcykJX19tZW1wdXRfZGVidWcocCwgcywgX19GSUxFX18sIF9fTElORV9fKQotI2Vsc2UgLypNRU1DTFVTVEVSX0RFQlVHKi8KLSNpZmRlZiBNRU1DTFVTVEVSX1JFQ09SRAotI2RlZmluZSBtZW1nZXQocykJX19tZW1nZXRfcmVjb3JkKHMsIF9fRklMRV9fLCBfX0xJTkVfXykKLSNkZWZpbmUgbWVtcHV0KHAsIHMpCV9fbWVtcHV0X3JlY29yZChwLCBzLCBfX0ZJTEVfXywgX19MSU5FX18pCi0jZWxzZSAvKk1FTUNMVVNURVJfUkVDT1JEKi8KLSNkZWZpbmUgbWVtZ2V0CQlfX21lbWdldAotI2RlZmluZSBtZW1wdXQJCV9fbWVtcHV0Ci0jZW5kaWYgLypNRU1DTFVTVEVSX1JFQ09SRCovCi0jZW5kaWYgLypNRU1DTFVTVEVSX0RFQlVHKi8KLSNkZWZpbmUgbWVtc3RhdHMJX19tZW1zdGF0cwotI2RlZmluZSBtZW1hY3RpdmUJX19tZW1hY3RpdmUKLQotaW50CW1lbWluaXQoc2l6ZV90LCBzaXplX3QpOwotdm9pZCAqCV9fbWVtZ2V0KHNpemVfdCk7Ci12b2lkIAlfX21lbXB1dCh2b2lkICosIHNpemVfdCk7Ci12b2lkICoJX19tZW1nZXRfZGVidWcoc2l6ZV90LCBjb25zdCBjaGFyICosIGludCk7Ci12b2lkIAlfX21lbXB1dF9kZWJ1Zyh2b2lkICosIHNpemVfdCwgY29uc3QgY2hhciAqLCBpbnQpOwotdm9pZCAqCV9fbWVtZ2V0X3JlY29yZChzaXplX3QsIGNvbnN0IGNoYXIgKiwgaW50KTsKLXZvaWQgCV9fbWVtcHV0X3JlY29yZCh2b2lkICosIHNpemVfdCwgY29uc3QgY2hhciAqLCBpbnQpOwotdm9pZCAJbWVtc3RhdHMoRklMRSAqKTsKLWludAltZW1hY3RpdmUodm9pZCk7Ci0KLSNlbmRpZiAvKiBNRU1DTFVTVEVSX0ggKi8KZGlmZiAtLWdpdCBhL2xpYmMvcHJpdmF0ZS9rZXJuZWxfc2lnc2V0X3QuaCBiL2xpYmMvcHJpdmF0ZS9rZXJuZWxfc2lnc2V0X3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MzNhODQyCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9wcml2YXRlL2tlcm5lbF9zaWdzZXRfdC5oCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaWZuZGVmIExJQkNfUFJJVkFURV9LRVJORUxfU0lHU0VUX1RfSF8KKyNkZWZpbmUgTElCQ19QUklWQVRFX0tFUk5FTF9TSUdTRVRfVF9IXworCisvLyBPdXIgc2lnc2V0X3QgaXMgd3JvbmcgZm9yIEFSTSBhbmQgeDg2LiBJdCdzIDMyLWJpdCBidXQgdGhlIGtlcm5lbCBleHBlY3RzIDY0IGJpdHMuCisvLyBUaGlzIG1lYW5zIHdlIGNhbid0IHN1cHBvcnQgcmVhbC10aW1lIHNpZ25hbHMgY29ycmVjdGx5IHVudGlsIHdlIGNhbiBjaGFuZ2UgdGhlIEFCSS4KKy8vIEluIHRoZSBtZWFudGltZSwgd2UgY2FuIHVzZSB0aGlzIHVuaW9uIHRvIHBhc3MgYW4gYXBwcm9wcmlhdGVseS1zaXplZCBibG9jayBvZiBtZW1vcnkKKy8vIHRvIHRoZSBrZXJuZWwsIGF0IHRoZSBjb3N0IG9mIG5vdCBiZWluZyBhYmxlIHRvIHJlZmVyIHRvIHJlYWwtdGltZSBzaWduYWxzLgordW5pb24ga2VybmVsX3NpZ3NldF90IHsKKyAga2VybmVsX3NpZ3NldF90KCkgeworICAgIGNsZWFyKCk7CisgIH0KKworICBrZXJuZWxfc2lnc2V0X3QoY29uc3Qgc2lnc2V0X3QqIHZhbHVlKSB7CisgICAgY2xlYXIoKTsKKyAgICBzZXQodmFsdWUpOworICB9CisKKyAgdm9pZCBjbGVhcigpIHsKKyAgICBtZW1zZXQodGhpcywgMCwgc2l6ZW9mKCp0aGlzKSk7CisgIH0KKworICB2b2lkIHNldChjb25zdCBzaWdzZXRfdCogdmFsdWUpIHsKKyAgICBiaW9uaWMgPSAqdmFsdWU7CisgIH0KKworICBzaWdzZXRfdCogZ2V0KCkgeworICAgIHJldHVybiAmYmlvbmljOworICB9CisKKyAgc2lnc2V0X3QgYmlvbmljOworI2lmbmRlZiBfX21pcHNfXworICB1aW50MzJfdCBrZXJuZWxbMl07CisjZW5kaWYKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9wcml2YXRlL2xpYmNfbG9nZ2luZy5oIGIvbGliYy9wcml2YXRlL2xpYmNfbG9nZ2luZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2OWUyZWQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3ByaXZhdGUvbGliY19sb2dnaW5nLmgKQEAgLTAsMCArMSwxMTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBfTElCQ19MT0dHSU5HX0gKKyNkZWZpbmUgX0xJQkNfTE9HR0lOR19ICisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKworX19CRUdJTl9ERUNMUworCitlbnVtIHsKKyAgQklPTklDX0VWRU5UX01FTUNQWV9CVUZGRVJfT1ZFUkZMT1cgPSA4MDEwMCwKKyAgQklPTklDX0VWRU5UX1NUUkNBVF9CVUZGRVJfT1ZFUkZMT1cgPSA4MDEwNSwKKyAgQklPTklDX0VWRU5UX01FTU1PVkVfQlVGRkVSX09WRVJGTE9XID0gODAxMTAsCisgIEJJT05JQ19FVkVOVF9TVFJOQ0FUX0JVRkZFUl9PVkVSRkxPVyA9IDgwMTE1LAorICBCSU9OSUNfRVZFTlRfU1RSTkNQWV9CVUZGRVJfT1ZFUkZMT1cgPSA4MDEyMCwKKyAgQklPTklDX0VWRU5UX01FTVNFVF9CVUZGRVJfT1ZFUkZMT1cgPSA4MDEyNSwKKyAgQklPTklDX0VWRU5UX1NUUkNQWV9CVUZGRVJfT1ZFUkZMT1cgPSA4MDEzMCwKKworICBCSU9OSUNfRVZFTlRfUkVTT0xWRVJfT0xEX1JFU1BPTlNFID0gODAzMDAsCisgIEJJT05JQ19FVkVOVF9SRVNPTFZFUl9XUk9OR19TRVJWRVIgPSA4MDMwNSwKKyAgQklPTklDX0VWRU5UX1JFU09MVkVSX1dST05HX1FVRVJZID0gODAzMTAsCit9OworCitlbnVtIHsKKyAgQU5EUk9JRF9MT0dfVU5LTk9XTiA9IDAsCisgIEFORFJPSURfTE9HX0RFRkFVTFQsICAgIC8qIG9ubHkgZm9yIFNldE1pblByaW9yaXR5KCkgKi8KKworICBBTkRST0lEX0xPR19WRVJCT1NFLAorICBBTkRST0lEX0xPR19ERUJVRywKKyAgQU5EUk9JRF9MT0dfSU5GTywKKyAgQU5EUk9JRF9MT0dfV0FSTiwKKyAgQU5EUk9JRF9MT0dfRVJST1IsCisgIEFORFJPSURfTE9HX0ZBVEFMLAorCisgIEFORFJPSURfTE9HX1NJTEVOVCwgICAgIC8qIG9ubHkgZm9yIFNldE1pblByaW9yaXR5KCk7IG11c3QgYmUgbGFzdCAqLworfTsKKworc3RydWN0IGFib3J0X21zZ190IHsKKyAgc2l6ZV90IHNpemU7CisgIGNoYXIgbXNnWzBdOworfTsKKworX19MSUJDX0hJRERFTl9fIHZvaWQgX19saWJjX3NldF9hYm9ydF9tZXNzYWdlKGNvbnN0IGNoYXIqIG1zZyk7CisKKy8vCisvLyBGb3JtYXRzIGEgbWVzc2FnZSB0byB0aGUgbG9nIChwcmlvcml0eSAnZmF0YWwnKSwgdGhlbiBhYm9ydHMuCisvLworCitfX0xJQkNfSElEREVOX18gX19ub3JldHVybiB2b2lkIF9fbGliY19mYXRhbChjb25zdCBjaGFyKiBmb3JtYXQsIC4uLikKKyAgICBfX3ByaW50Zmxpa2UoMSwgMik7CisKKy8vCisvLyBGb3JtYXRzIGEgbWVzc2FnZSB0byB0aGUgbG9nIChwcmlvcml0eSAnZmF0YWwnKSwgYnV0IGRvZXNuJ3QgYWJvcnQuCisvLyBVc2VkIGJ5IHRoZSBtYWxsb2MgaW1wbGVtZW50YXRpb24gdG8gZW5zdXJlIHRoYXQgZGVidWdnZXJkIGR1bXBzIG1lbW9yeQorLy8gYXJvdW5kIHRoZSBiYWQgYWRkcmVzcy4KKy8vCisKK19fTElCQ19ISURERU5fXyB2b2lkIF9fbGliY19mYXRhbF9ub19hYm9ydChjb25zdCBjaGFyKiBmb3JtYXQsIC4uLikKKyAgICBfX3ByaW50Zmxpa2UoMSwgMik7CisKKy8vCisvLyBGb3JtYXR0aW5nIHJvdXRpbmVzIGZvciB0aGUgQyBsaWJyYXJ5J3MgaW50ZXJuYWwgZGVidWdnaW5nLgorLy8gVW5saWtlIHRoZSB1c3VhbCBhbHRlcm5hdGl2ZXMsIHRoZXNlIGRvbid0IGFsbG9jYXRlLgorLy8KKworX19MSUJDX0hJRERFTl9fIGludCBfX2xpYmNfZm9ybWF0X2J1ZmZlcihjaGFyKiBidWZmZXIsIHNpemVfdCBidWZmZXJfc2l6ZSwgY29uc3QgY2hhciogZm9ybWF0LCAuLi4pCisgICAgX19wcmludGZsaWtlKDMsIDQpOworCitfX0xJQkNfSElEREVOX18gaW50IF9fbGliY19mb3JtYXRfZmQoaW50IGZkLCBjb25zdCBjaGFyKiBmb3JtYXQsIC4uLikKKyAgICBfX3ByaW50Zmxpa2UoMiwgMyk7CisKK19fTElCQ19ISURERU5fXyBpbnQgX19saWJjX2Zvcm1hdF9sb2coaW50IHByaW9yaXR5LCBjb25zdCBjaGFyKiB0YWcsIGNvbnN0IGNoYXIqIGZvcm1hdCwgLi4uKQorICAgIF9fcHJpbnRmbGlrZSgzLCA0KTsKKworX19MSUJDX0hJRERFTl9fIGludCBfX2xpYmNfZm9ybWF0X2xvZ192YV9saXN0KGludCBwcmlvcml0eSwgY29uc3QgY2hhciogdGFnLCBjb25zdCBjaGFyKiBmb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFfbGlzdCBhcCk7CisKKy8vCisvLyBFdmVudCBsb2dnaW5nLgorLy8KKworX19MSUJDX0hJRERFTl9fIHZvaWQgX19saWJjX2FuZHJvaWRfbG9nX2V2ZW50X2ludChpbnQzMl90IHRhZywgaW50IHZhbHVlKTsKK19fTElCQ19ISURERU5fXyB2b2lkIF9fbGliY19hbmRyb2lkX2xvZ19ldmVudF91aWQoaW50MzJfdCB0YWcpOworCitfX0xJQkNfSElEREVOX18gX19ub3JldHVybiB2b2lkIF9fZm9ydGlmeV9jaGtfZmFpbChjb25zdCBjaGFyKiBtc2csIHVpbnQzMl90IGV2ZW50X3RhZyk7CisKK19fRU5EX0RFQ0xTCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9wcml2YXRlL2xvZ2QuaCBiL2xpYmMvcHJpdmF0ZS9sb2dkLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRhOWI2MmUuLjAwMDAwMDAKLS0tIGEvbGliYy9wcml2YXRlL2xvZ2QuaAorKysgL2Rldi9udWxsCkBAIC0xLDUxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0gKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiAgICBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCi0gKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQotICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAotICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKLSAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUwotICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECi0gKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0gKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLSNpZm5kZWYgX0FORFJPSURfQklPTklDX0xPR0RfSAotI2RlZmluZSBfQU5EUk9JRF9CSU9OSUNfTE9HRF9ICi0KLSNpbmNsdWRlIDxzdGRhcmcuaD4KLQotZW51bSAgewotICAgIEFORFJPSURfTE9HX1VOS05PV04gPSAwLAotICAgIEFORFJPSURfTE9HX0RFRkFVTFQsICAgIC8qIG9ubHkgZm9yIFNldE1pblByaW9yaXR5KCkgKi8KLQotICAgIEFORFJPSURfTE9HX1ZFUkJPU0UsCi0gICAgQU5EUk9JRF9MT0dfREVCVUcsCi0gICAgQU5EUk9JRF9MT0dfSU5GTywKLSAgICBBTkRST0lEX0xPR19XQVJOLAotICAgIEFORFJPSURfTE9HX0VSUk9SLAotICAgIEFORFJPSURfTE9HX0ZBVEFMLAotCi0gICAgQU5EUk9JRF9MT0dfU0lMRU5ULCAgICAgLyogb25seSBmb3IgU2V0TWluUHJpb3JpdHkoKTsgbXVzdCBiZSBsYXN0ICovCi19OwotCi1pbnQgX19saWJjX2FuZHJvaWRfbG9nX3dyaXRlKGludCBwcmlvLCBjb25zdCBjaGFyKiB0YWcsIGNvbnN0IGNoYXIqIGJ1ZmZlcik7Ci1pbnQgX19saWJjX2FuZHJvaWRfbG9nX3ByaW50KGludCBwcmlvLCBjb25zdCBjaGFyICp0YWcsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKLWludCBfX2xpYmNfYW5kcm9pZF9sb2dfdnByaW50KGludCBwcmlvLCBjb25zdCBjaGFyICp0YWcsIGNvbnN0IGNoYXIgKmZtdCwgdmFfbGlzdCBhcCk7Ci0KLSNlbmRpZiAvKiBfQU5EUk9JRF9CSU9OSUNfTE9HRF9IICovCmRpZmYgLS1naXQgYS9saWJjL3ByaXZhdGUvcmFuZDQ4LmggYi9saWJjL3ByaXZhdGUvcmFuZDQ4LmgKaW5kZXggYWZhNDlmNi4uMWFkOGIwZCAxMDA2NDQKLS0tIGEvbGliYy9wcml2YXRlL3JhbmQ0OC5oCisrKyBiL2xpYmMvcHJpdmF0ZS9yYW5kNDguaApAQCAtMSwzICsxLDUgQEAKKy8qCSROZXRCU0Q6IHJhbmQ0OC5oLHYgMS42IDIwMTEvMDUvMTggMTk6MzY6MzYgZHNsIEV4cCAkCSovCisKIC8qCiAgKiBDb3B5cmlnaHQgKGMpIDE5OTMgTWFydGluIEJpcmdtZWllcgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KQEAgLTksMTcgKzExLDE3IEBACiAgKiBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkIGBgYXMgaXMnJywgYW5kIGNvbWVzIHdpdGggbm8gd2FycmFudGllcwogICogb2YgYW55IGtpbmQuIEkgc2hhbGwgaW4gbm8gZXZlbnQgYmUgbGlhYmxlIGZvciBhbnl0aGluZyB0aGF0IGhhcHBlbnMKICAqIHRvIGFueW9uZS9hbnl0aGluZyB3aGVuIHVzaW5nIHRoaXMgc29mdHdhcmUuCi0gKgotICoJJE9wZW5CU0Q6IHJhbmQ0OC5oLHYgMS4zIDIwMDIvMDIvMTYgMjE6Mjc6MjQgbWlsbGVydCBFeHAgJAogICovCiAKICNpZm5kZWYgX1JBTkQ0OF9IXwogI2RlZmluZSBfUkFORDQ4X0hfCiAKLSNpbmNsdWRlIDxtYXRoLmg+CiAjaW5jbHVkZSA8c3RkbGliLmg+CiAKLXZvaWQJCV9fZG9yYW5kNDgodW5zaWduZWQgc2hvcnRbM10pOworZXh0ZXJuIHZvaWQJCV9fZG9yYW5kNDgodW5zaWduZWQgc2hvcnRbM10pOworZXh0ZXJuIHVuc2lnbmVkIHNob3J0CV9fcmFuZDQ4X3NlZWRbM107CitleHRlcm4gdW5zaWduZWQgc2hvcnQJX19yYW5kNDhfbXVsdFszXTsKK2V4dGVybiB1bnNpZ25lZCBzaG9ydAlfX3JhbmQ0OF9hZGQ7CiAKICNkZWZpbmUJUkFORDQ4X1NFRURfMAkoMHgzMzBlKQogI2RlZmluZQlSQU5ENDhfU0VFRF8xCSgweGFiY2QpCmRpZmYgLS1naXQgYS9saWJjL3ByaXZhdGUvcmVzb2x2X2NhY2hlLmggYi9saWJjL3ByaXZhdGUvcmVzb2x2X2NhY2hlLmgKaW5kZXggMmE1NDQ1My4uZDcwODU3ZCAxMDA2NDQKLS0tIGEvbGliYy9wcml2YXRlL3Jlc29sdl9jYWNoZS5oCisrKyBiL2xpYmMvcHJpdmF0ZS9yZXNvbHZfY2FjaGUuaApAQCAtMjgsNDcgKzI4LDY1IEBACiAjaWZuZGVmIF9SRVNPTFZfQ0FDSEVfSF8KICNkZWZpbmUgX1JFU09MVl9DQUNIRV9IXwogCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisKK3N0cnVjdCBfX3Jlc19zdGF0ZTsKIHN0cnVjdCByZXNvbHZfY2FjaGU7ICAvKiBmb3J3YXJkICovCiAKLS8qIGdldHMgdGhlIGNhY2hlIGZvciB0aGUgZGVmYXVsdCBpbnRlcmZhY2UuIE1pZ2h0IGJlIE5VTEwqLwotZXh0ZXJuIHN0cnVjdCByZXNvbHZfY2FjaGUqICBfX2dldF9yZXNfY2FjaGUodm9pZCk7Ci0KLS8qIGdldCB0aGUgY2FjaGUgZm9yIGEgc3BlY2lmaWVkIGludGVyZmFjZS4gQ2FuIGJlIE5VTEwqLwotZXh0ZXJuIHN0cnVjdCByZXNvbHZfY2FjaGUqIF9fZ2V0X3Jlc19jYWNoZV9mb3JfaWZhY2UoY29uc3QgY2hhciogaWZuYW1lKTsKKy8qIGdldHMgdGhlIGNhY2hlIGZvciBhbiBpbnRlcmZhY2UuIFNldCBpZm5hbWUgYXJndW1lbnQgdG8gTlVMTCBvcgorICogZW1wdHkgYnVmZmVyICgnXDAnKSB0byBnZXQgY2FjaGUgZm9yIGRlZmF1bHQgaW50ZXJmYWNlLgorICogcmV0dXJuZWQgY2FjaGUgbWlnaHQgYmUgTlVMTCovCitfX0xJQkNfSElEREVOX18KK2V4dGVybiBzdHJ1Y3QgcmVzb2x2X2NhY2hlKiAgX19nZXRfcmVzX2NhY2hlKGNvbnN0IGNoYXIqIGlmbmFtZSk7CiAKIC8qIHRoaXMgZ2V0cyBjYWxsZWQgZXZlcnl0aW1lIHdlIGRldGVjdCBzb21lIGNoYW5nZXMgaW4gdGhlIEROUyBjb25maWd1cmF0aW9uCiAgKiBhbmQgd2lsbCBmbHVzaCB0aGUgY2FjaGUgKi8KK19fTElCQ19ISURERU5fXwogZXh0ZXJuIHZvaWQgIF9yZXNvbHZfY2FjaGVfcmVzZXQoIHVuc2lnbmVkICBnZW5lcmF0aW9uICk7CiAKIC8qIEdldHMgdGhlIGFkZHJlc3Mgb2YgdGhlIG46dGggbmFtZSBzZXJ2ZXIgZm9yIHRoZSBkZWZhdWx0IGludGVyZmFjZQogICogUmV0dXJuIGxlbmd0aCBvZiBhZGRyZXNzIG9uIHN1Y2Nlc3MgZWxzZSAwLgogICogTm90ZTogVGhlIGZpcnN0IG5hbWUgc2VydmVyIGlzIGF0IG4gPSAxICovCitfX0xJQkNfSElEREVOX18KIGV4dGVybiBpbnQgX3Jlc29sdl9jYWNoZV9nZXRfbmFtZXNlcnZlcihpbnQgbiwgY2hhciogYWRkciwgaW50IGFkZHJMZW4pOwogCiAvKiBHZXRzIHRoZSBhZGRyZXNzIG9mIHRoZSBuOnRoIG5hbWUgc2VydmVyIGZvciBhIGNlcnRhaW4gaW50ZXJmYWNlCiAgKiBSZXR1cm4gbGVuZ3RoIG9mIGFkZHJlc3Mgb24gc3VjY2VzcyBlbHNlIDAuCiAgKiBOb3RlOiBUaGUgZmlyc3QgbmFtZSBzZXJ2ZXIgaXMgYXQgbiA9IDEgKi8KK19fTElCQ19ISURERU5fXwogZXh0ZXJuIGludCBfcmVzb2x2X2NhY2hlX2dldF9uYW1lc2VydmVyX2Zvcl9pZmFjZShjb25zdCBjaGFyKiBpZm5hbWUsIGludCBuLAogICAgICAgICBjaGFyKiBhZGRyLCBpbnQgYWRkckxlbik7CiAKIC8qIEdldHMgYWRkcmluZm8gb2YgdGhlIG46dGggbmFtZSBzZXJ2ZXIgYXNzb2NpYXRlZCB3aXRoIGFuIGludGVyZmFjZS4KICAqIE5VTEwgaXMgcmV0dXJuZWQgaWYgbm8gYWRkcmVzcyBpZiBmb3VuZC4KICAqIE5vdGU6IFRoZSBmaXJzdCBuYW1lIHNlcnZlciBpcyBhdCBuID0gMS4gKi8KK19fTElCQ19ISURERU5fXwogZXh0ZXJuIHN0cnVjdCBhZGRyaW5mbyogX3Jlc29sdl9jYWNoZV9nZXRfbmFtZXNlcnZlcl9hZGRyX2Zvcl9pZmFjZShjb25zdCBjaGFyKiBpZm5hbWUsIGludCBuKTsKIAogLyogR2V0cyBhZGRyaW5mbyBvZiB0aGUgbjp0aCBuYW1lIHNlcnZlciBhc3NvY2lhdGVkIHdpdGggdGhlIGRlZmF1bHQgaW50ZXJmYWNlCiAgKiBOVUxMIGlzIHJldHVybmVkIGlmIG5vIGFkZHJlc3MgaWYgZm91bmQuCiAgKiBOb3RlOiBUaGUgZmlyc3QgbmFtZSBzZXJ2ZXIgaXMgYXQgbiA9IDEuICovCitfX0xJQkNfSElEREVOX18KIGV4dGVybiBzdHJ1Y3QgYWRkcmluZm8qIF9yZXNvbHZfY2FjaGVfZ2V0X25hbWVzZXJ2ZXJfYWRkcihpbnQgbik7CiAKIC8qIGdldHMgdGhlIGFkZHJlc3MgYXNzb2NpYXRlZCB3aXRoIHRoZSBkZWZhdWx0IGludGVyZmFjZSAqLworX19MSUJDX0hJRERFTl9fCiBleHRlcm4gc3RydWN0IGluX2FkZHIqIF9yZXNvbHZfZ2V0X2FkZHJfb2ZfZGVmYXVsdF9pZmFjZSgpOwogCiAvKiBnZXRzIHRoZSBhZGRyZXNzIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3BlY2lmaWVkIGludGVyZmFjZSAqLworX19MSUJDX0hJRERFTl9fCiBleHRlcm4gc3RydWN0IGluX2FkZHIqIF9yZXNvbHZfZ2V0X2FkZHJfb2ZfaWZhY2UoY29uc3QgY2hhciogaWZuYW1lKTsKIAotLyogR2V0IG5hbWUgb2YgZGVmYXVsdCBpbnRlcmZhY2UgKi8KLWV4dGVybiBjaGFyKiBfcmVzb2x2X2dldF9kZWZhdWx0X2lmYWNlKCk7CisvKiBDb3B5IHRoZSBuYW1lIG9mIHRoZSBkZWZhdWx0IGludGVyZmFjZSB0byBwcm92aWRlZCBidWZmZXIuCisgKiBSZXR1cm4gbGVuZ3RoIG9mIGJ1ZmZlciBvbiBzdWNjZXNzIG9uIGZhaWx1cmUgLTEgaXMgcmV0dXJuZWQgKi8KK19fTElCQ19ISURERU5fXworZXh0ZXJuIGludCBfcmVzb2x2X2dldF9kZWZhdWx0X2lmYWNlKGNoYXIqIGJ1ZmYsIGludCBidWZmTGVuKTsKKworLyogc2V0cyB0aGUgbmFtZSBzZXJ2ZXIgYWRkcmVzc2VzIHRvIHRoZSBwcm92aWRlZCByZXNfc3RhdGUgc3RydWN0dXJlLiBUaGUKKyAqIG5hbWUgc2VydmVycyBhcmUgcmV0cmlldmVkIGZyb20gdGhlIGNhY2hlIHdoaWNoIGlzIGFzc29jaWF0ZWQKKyAqIHdpdGggdGhlIGludGVyZmFjZSB0byB3aGljaCB0aGUgcmVzX3N0YXRlIHN0cnVjdHVyZSBpcyBhc3NvY2lhdGVkICovCitfX0xJQkNfSElEREVOX18KK2V4dGVybiBpbnQgX3Jlc29sdl9wb3B1bGF0ZV9yZXNfZm9yX2lmYWNlKHN0cnVjdCBfX3Jlc19zdGF0ZSogc3RhdHApOwogCiB0eXBlZGVmIGVudW0gewogICAgIFJFU09MVl9DQUNIRV9VTlNVUFBPUlRFRCwgIC8qIHRoZSBjYWNoZSBjYW4ndCBoYW5kbGUgdGhhdCBraW5kIG9mIHF1ZXJpZXMgKi8KQEAgLTc3LDYgKzk1LDcgQEAKICAgICBSRVNPTFZfQ0FDSEVfRk9VTkQgICAgICAgICAvKiB0aGUgY2FjaGUgZm91bmQgdGhlIGFuc3dlciAqLwogfSBSZXNvbHZDYWNoZVN0YXR1czsKIAorX19MSUJDX0hJRERFTl9fCiBleHRlcm4gUmVzb2x2Q2FjaGVTdGF0dXMKIF9yZXNvbHZfY2FjaGVfbG9va3VwKCBzdHJ1Y3QgcmVzb2x2X2NhY2hlKiAgY2FjaGUsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCogICAgICAgICAgIHF1ZXJ5LApAQCAtODgsNiArMTA3LDcgQEAKIC8qIGFkZCBhIChxdWVyeSxhbnN3ZXIpIHRvIHRoZSBjYWNoZSwgb25seSBjYWxsIGlmIF9yZXNvbHZfY2FjaGVfbG9va3VwCiAgKiBkaWQgcmV0dXJuIFJFU09MVl9DQUNIRV9OT1RGT1VORAogICovCitfX0xJQkNfSElEREVOX18KIGV4dGVybiB2b2lkCiBfcmVzb2x2X2NhY2hlX2FkZCggc3RydWN0IHJlc29sdl9jYWNoZSogIGNhY2hlLAogICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQqICAgICAgICAgICBxdWVyeSwKQEAgLTk1LDQgKzExNSwxMSBAQAogICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQqICAgICAgICAgICBhbnN3ZXIsCiAgICAgICAgICAgICAgICAgICAgaW50ICAgICAgICAgICAgICAgICAgIGFuc3dlcmxlbiApOwogCisvKiBOb3RpZnkgdGhlIGNhY2hlIGEgcmVxdWVzdCBmYWlsZWQgKi8KK19fTElCQ19ISURERU5fXworZXh0ZXJuIHZvaWQKK19yZXNvbHZfY2FjaGVfcXVlcnlfZmFpbGVkKCBzdHJ1Y3QgcmVzb2x2X2NhY2hlKiBjYWNoZSwKKyAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkKiBxdWVyeSwKKyAgICAgICAgICAgICAgICAgICBpbnQgICAgICAgICBxdWVyeWxlbik7CisKICNlbmRpZiAvKiBfUkVTT0xWX0NBQ0hFX0hfICovCmRpZmYgLS1naXQgYS9saWJjL3ByaXZhdGUvcmVzb2x2X2lmYWNlLmggYi9saWJjL3ByaXZhdGUvcmVzb2x2X2lmYWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmY1YWJhZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvcHJpdmF0ZS9yZXNvbHZfaWZhY2UuaApAQCAtMCwwICsxLDgyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisjaWZuZGVmIF9SRVNPTFZfSUZBQ0VfSAorI2RlZmluZSBfUkVTT0xWX0lGQUNFX0gKKworLyogVGhpcyBoZWFkZXIgY29udGFpbnMgZGVjbGFyYXRpb25zIHJlbGF0ZWQgdG8gcGVyLWludGVyZmFjZSBETlMKKyAqIHNlcnZlciBzZWxlY3Rpb24uIFRoZXkgYXJlIHVzZWQgYnkgc3lzdGVtL25ldGQvIGFuZCBzaG91bGQgbm90IGJlCisgKiBleHBvc2VkIGJ5IHRoZSBDIGxpYnJhcnkncyBwdWJsaWMgTkRLIGhlYWRlcnMuCisgKgorICogTk9URTogPHJlc29sdi5oPiBjb250YWlucyB0aGUgc2FtZSBkZWNsYXJhdGlvbnMsIHRoaXMgd2lsbCBiZSByZW1vdmVkCisgKiAgICAgICAgd2hlbiB3ZSBjaGFuZ2Ugc3lzdGVtL25ldGQgdG8gdXNlIHRoaXMgaGVhZGVyIGluc3RlYWQuCisgKi8KKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisKK19fQkVHSU5fREVDTFMKKworLyogVXNlIGEgZ3VhcmQgbWFjcm8gdW50aWwgd2UgcmVtb3ZlIHRoZSBzYW1lIGRlZmluaXRpb25zIGZyb20gPHJlc29sdi5oPiAqLworI2lmbmRlZiBfQklPTklDX1JFU09MVl9JRkFDRV9GVU5DVElPTlNfREVDTEFSRUQKKyNkZWZpbmUgX0JJT05JQ19SRVNPTFZfSUZBQ0VfRlVOQ1RJT05TX0RFQ0xBUkVECisKKy8qIFNldCBuYW1lIG9mIGRlZmF1bHQgaW50ZXJmYWNlICovCitleHRlcm4gdm9pZCBfcmVzb2x2X3NldF9kZWZhdWx0X2lmYWNlKGNvbnN0IGNoYXIqIGlmbmFtZSk7CisKKy8qIHNldCBuYW1lIHNlcnZlcnMgZm9yIGFuIGludGVyZmFjZSAqLworZXh0ZXJuIHZvaWQgX3Jlc29sdl9zZXRfbmFtZXNlcnZlcnNfZm9yX2lmYWNlKGNvbnN0IGNoYXIqIGlmbmFtZSwgY2hhcioqIHNlcnZlcnMsIGludCBudW1zZXJ2ZXJzLAorICAgICAgICBjb25zdCBjaGFyICpkb21haW5zKTsKKworLyogdGVsbCByZXNvbHZlciBvZiB0aGUgYWRkcmVzcyBvZiBhbiBpbnRlcmZhY2UgKi8KK2V4dGVybiB2b2lkIF9yZXNvbHZfc2V0X2FkZHJfb2ZfaWZhY2UoY29uc3QgY2hhciogaWZuYW1lLCBzdHJ1Y3QgaW5fYWRkciogYWRkcik7CisKKy8qIGZsdXNoIHRoZSBjYWNoZSBhc3NvY2lhdGVkIHdpdGggdGhlIGRlZmF1bHQgaW50ZXJmYWNlICovCitleHRlcm4gdm9pZCBfcmVzb2x2X2ZsdXNoX2NhY2hlX2Zvcl9kZWZhdWx0X2lmYWNlKCk7CisKKy8qIGZsdXNoIHRoZSBjYWNoZSBhc3NvY2lhdGVkIHdpdGggYSBjZXJ0YWluIGludGVyZmFjZSAqLworZXh0ZXJuIHZvaWQgX3Jlc29sdl9mbHVzaF9jYWNoZV9mb3JfaWZhY2UoY29uc3QgY2hhciogaWZuYW1lKTsKKworLyogc2V0IGEgcGlkIHRvIHVzZSB0aGUgbmFtZSBzZXJ2ZXJzIG9mIHRoZSBzcGVjaWZpZWQgaW50ZXJmYWNlICovCitleHRlcm4gdm9pZCBfcmVzb2x2X3NldF9pZmFjZV9mb3JfcGlkKGNvbnN0IGNoYXIqIGlmbmFtZSwgaW50IHBpZCk7CisKKy8qIGNsZWFyIHBpZCBmcm9tIGJlaW5nIGFzc29jaWF0ZWQgd2l0aCBhbiBpbnRlcmZhY2UgKi8KK2V4dGVybiB2b2lkIF9yZXNvbHZfY2xlYXJfaWZhY2VfZm9yX3BpZChpbnQgcGlkKTsKKworLyoqIEdldHMgdGhlIG5hbWUgb2YgdGhlIGludGVyZmFjZSB0byB3aGljaCB0aGUgcGlkIGlzIGF0dGFjaGVkLgorICogIE9uIGVycm9yLCAtMSBpcyByZXR1cm5lZC4KKyAqICBJZiBubyBpbnRlcmZhY2UgaXMgZm91bmQsIDAgaXMgcmV0dXJuZWQgYW5kIGJ1ZmYgaXMgc2V0IHRvIGVtcHR5ICgnXDAnKS4KKyAqICBJZiBhbiBpbnRlcmZhY2UgaXMgZm91bmQsIHRoZSBuYW1lIGlzIGNvcGllZCB0byBidWZmIGFuZCB0aGUgbGVuZ3RoIG9mIHRoZSBuYW1lIGlzIHJldHVybmVkLgorICogIEFyZ3VtZW50czogICBwaWQgVGhlIHBpZCB0byBmaW5kIGFuIGludGVyZmFjZSBmb3IKKyAqICAgICAgICAgICAgICAgYnVmZiBBIGJ1ZmZlciB0byBjb3B5IHRoZSByZXN1bHQgdG8KKyAqICAgICAgICAgICAgICAgYnVmZkxlbiBMZW5ndGggb2YgYnVmZi4gQW4gaW50ZXJmYWNlIGlzIGF0IG1vc3QgSUZfTkFNRVNJWkUgaW4gbGVuZ3RoICovCitleHRlcm4gaW50IF9yZXNvbHZfZ2V0X3BpZHNfYXNzb2NpYXRlZF9pbnRlcmZhY2UoaW50IHBpZCwgY2hhciogYnVmZiwgaW50IGJ1ZmZMZW4pOworCisjZW5kaWYgLyogX0JJT05JQ19SRVNPTFZfSUZBQ0VfRlVOQ1RJT05TX0RFQ0xBUkVEICovCisKK19fRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBfUkVTT0xWX0lGQUNFX0ggKi8KZGlmZiAtLWdpdCBhL2xpYmMvcHJpdmF0ZS9yZXNvbHZfcHJpdmF0ZS5oIGIvbGliYy9wcml2YXRlL3Jlc29sdl9wcml2YXRlLmgKaW5kZXggMGYzYzZjMC4uOTY0OGE4ZiAxMDA2NDQKLS0tIGEvbGliYy9wcml2YXRlL3Jlc29sdl9wcml2YXRlLmgKKysrIGIvbGliYy9wcml2YXRlL3Jlc29sdl9wcml2YXRlLmgKQEAgLTU0LDggKzU0LDExIEBACiAjaWZuZGVmIF9SRVNPTFZfUFJJVkFURV9IXwogI2RlZmluZQlfUkVTT0xWX1BSSVZBVEVfSF8KIAorI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorCiAjaW5jbHVkZSA8cmVzb2x2Lmg+CiAjaW5jbHVkZSAicmVzb2x2X3N0YXRpYy5oIgorI2luY2x1ZGUgPG5ldC9pZi5oPgogCiAvKgogICogUmV2aXNpb24gaW5mb3JtYXRpb24uICBUaGlzIGlzIHRoZSByZWxlYXNlIGRhdGUgaW4gWVlZWU1NREQgZm9ybWF0LgpAQCAtMTM5LDYgKzE0Miw3IEBACiBzdHJ1Y3QgX19yZXNfc3RhdGVfZXh0OwogCiBzdHJ1Y3QgX19yZXNfc3RhdGUgeworCWNoYXIJaWZhY2VbSUZfTkFNRVNJWkUrMV07CiAJaW50CXJldHJhbnM7CSAJLyogcmV0cmFuc21pc3Npb24gdGltZSBpbnRlcnZhbCAqLwogCWludAlyZXRyeTsJCQkvKiBudW1iZXIgb2YgdGltZXMgdG8gcmV0cmFuc21pdCAqLwogI2lmZGVmIHN1bgpAQCAtMzQxLDEyICszNDUsOSBAQAogZXh0ZXJuIGNvbnN0IHN0cnVjdCByZXNfc3ltIF9fcF9yY29kZV9zeW1zW107CiAjZW5kaWYgLyogU0hBUkVEX0xJQkJJTkQgKi8KIAotI2lmbmRlZiBBRE5ST0lEX0NIQU5HRVMKLSNkZWZpbmUgYjY0X250b3AJCV9fYjY0X250b3AKLSNkZWZpbmUgYjY0X3B0b24JCV9fYjY0X3B0b24KLSNlbmRpZgotCisjaWZuZGVmIEFORFJPSURfQ0hBTkdFUwogI2RlZmluZSBkbl9jb21wCQkJX19kbl9jb21wCisjZW5kaWYKICNkZWZpbmUgZG5fY291bnRfbGFiZWxzCQlfX2RuX2NvdW50X2xhYmVscwogI2RlZmluZSBkbl9za2lwbmFtZQkJX19kbl9za2lwbmFtZQogI2RlZmluZSBmcF9yZXNzdGF0CQlfX2ZwX3Jlc3N0YXQKQEAgLTQ0MSw5ICs0NDIsNiBAQAogY29uc3QgY2hhciAqCXBfb3B0aW9uKHVfbG9uZyk7CiBjaGFyICoJCXBfc2Vjc3RvZGF0ZSh1X2xvbmcpOwogaW50CQlkbl9jb3VudF9sYWJlbHMoY29uc3QgY2hhciAqKTsKLWludAkJZG5fY29tcChjb25zdCBjaGFyICosIHVfY2hhciAqLCBpbnQsIHVfY2hhciAqKiwgdV9jaGFyICoqKTsKLWludAkJZG5fZXhwYW5kKGNvbnN0IHVfY2hhciAqLCBjb25zdCB1X2NoYXIgKiwgY29uc3QgdV9jaGFyICosCi0JCQkgICAgICAgY2hhciAqLCBpbnQpOwogdV9pbnQJCXJlc19yYW5kb21pZCh2b2lkKTsKIGludAkJcmVzX25hbWVpbnF1ZXJ5KGNvbnN0IGNoYXIgKiwgaW50LCBpbnQsIGNvbnN0IHVfY2hhciAqLAogCQkJCSAgICAgY29uc3QgdV9jaGFyICopOwpAQCAtNDkxLDcgKzQ4OSw3IEBACiBpbnQJCXJlc19nZXRzZXJ2ZXJzKHJlc19zdGF0ZSwKIAkJCQkgICAgdW5pb24gcmVzX3NvY2thZGRyX3VuaW9uICosIGludCk7CiAKLWludCByZXNfZ2V0X2Ruc19jaGFuZ2VkKCk7Cit2b2lkIHJlc19zZXRpZmFjZSgpOwogdV9pbnQgIHJlc19yYW5kb21pZCh2b2lkKTsKIAogX19FTkRfREVDTFMKZGlmZiAtLWdpdCBhL2xpYmMvcHJpdmF0ZS90aHJlYWRfcHJpdmF0ZS5oIGIvbGliYy9wcml2YXRlL3RocmVhZF9wcml2YXRlLmgKaW5kZXggYzAzZjBhYi4uYjE5YWQwOSAxMDA2NDQKLS0tIGEvbGliYy9wcml2YXRlL3RocmVhZF9wcml2YXRlLmgKKysrIGIvbGliYy9wcml2YXRlL3RocmVhZF9wcml2YXRlLmgKQEAgLTIwLDIyICsyMCw2IEBACiBleHRlcm4gaW50IF9faXN0aHJlYWRlZDsKIAogLyoKLSAqIFdlYWsgc3ltYm9scyBhcmUgdXNlZCBpbiBsaWJjIHNvIHRoYXQgdGhlIHRocmVhZCBsaWJyYXJ5IGNhbgotICogZWZmaWNpZW50bHkgd3JhcCBsaWJjIGZ1bmN0aW9ucy4KLSAqIAotICogVXNlIFdFQUtfTkFNRShuKSB0byBnZXQgYSBsaWJjLXByaXZhdGUgbmFtZSBmb3IgbiAoX3dlYWtfbiksCi0gKiAgICAgV0VBS19BTElBUyhuKSB0byBnZW5lcmF0ZSB0aGUgd2VhayBzeW1ib2wgbiBwb2ludGluZyB0byBfd2Vha19uLAotICogICAgIFdFQUtfUFJPVE9UWVBFKG4pIHRvIGdlbmVyYXRlIGEgcHJvdG90eXBlIGZvciBfd2Vha19uIChiYXNlZCBvbiBuKS4KLSAqLwotI2RlZmluZSBXRUFLX05BTUUobmFtZSkJCV9fQ09OQ0FUKF93ZWFrXyxuYW1lKQotI2RlZmluZSBXRUFLX0FMSUFTKG5hbWUpCV9fd2Vha19hbGlhcyhuYW1lLCBXRUFLX05BTUUobmFtZSkpCi0jaWZkZWYgX19HTlVDX18KLSNkZWZpbmUgV0VBS19QUk9UT1RZUEUobmFtZSkJX190eXBlb2ZfXyhuYW1lKSBXRUFLX05BTUUobmFtZSkKLSNlbHNlCi0jZGVmaW5lIFdFQUtfUFJPVE9UWVBFKG5hbWUpCS8qIHR5cGVvZigpIG9ubHkgaW4gZ2NjICovCi0jZW5kaWYKLQotLyoKICAqIGhlbHBlciBtYWNybyB0byBtYWtlIHVuaXF1ZSBuYW1lcyBpbiB0aGUgdGhyZWFkIG5hbWVzcGFjZQogICovCiAjZGVmaW5lIF9fVEhSRUFEX05BTUUobmFtZSkJX19DT05DQVQoX3RocmVhZF90YWduYW1lXyxuYW1lKQpAQCAtNTIsMTAxICszNiw2IEBACiAjZGVmaW5lIF9USFJFQURfUFJJVkFURV9NVVRFWF9VTkxPQ0sobmFtZSkgXAogCXB0aHJlYWRfbXV0ZXhfdW5sb2NrKCAmX19USFJFQURfTkFNRShuYW1lKS5fcHJpdmF0ZV9sb2NrICkKIAotI2RlZmluZSBfVEhSRUFEX1BSSVZBVEVfS0VZKG5hbWUpICAgIFwKLQlzdGF0aWMgc3RydWN0IF9fdGhyZWFkX3ByaXZhdGVfdGFnX3QgIF9fVEhSRUFEX05BTUUobmFtZSkgPSB7IFBUSFJFQURfTVVURVhfSU5JVElBTElaRVIsIC0xIH0KLQotZXh0ZXJuIHZvaWQqICBfX2Jpb25pY190aHJlYWRfcHJpdmF0ZV9zdG9yYWdlKCBzdHJ1Y3QgX190aHJlYWRfcHJpdmF0ZV90YWdfdCogIHB0YWcsIHZvaWQqICBzdG9yYWdlLCBzaXplX3QgIG9ianNpemUsIHZvaWQqICBlcnJvciApOwotCi0jZGVmaW5lIF9USFJFQURfUFJJVkFURShuYW1lLCBzdG9yYWdlLCBlcnJvcikgICAgXAotCV9fYmlvbmljX3RocmVhZF9wcml2YXRlX3N0b3JhZ2UoICZfX1RIUkVBRF9OQU1FKG5hbWUpLCAmKHN0b3JhZ2UpLHNpemVvZihzdG9yYWdlKSwgZXJyb3IpCi0JCi0jaWYgMAotLyoKLSAqIGhlbHBlciBmdW5jdGlvbnMgdGhhdCBleGlzdCBhcyAod2VhaykgbnVsbCBmdW5jdGlvbnMgaW4gbGliYyBhbmQKLSAqIChzdHJvbmcpIGZ1bmN0aW9ucyBpbiB0aGUgdGhyZWFkIGxpYnJhcnkuICAgVGhlc2UgZnVuY3Rpb25zOgotICoKLSAqIF90aHJlYWRfdGFnX2xvY2s6Ci0gKglsb2NrIHRoZSBtdXRleCBhc3NvY2lhdGVkIHdpdGggdGhlIGdpdmVuIHRhZy4gICBJZiB0aGUgZ2l2ZW4KLSAqCXRhZyBpcyBOVUxMIGEgdGFnIGlzIGZpcnN0IGFsbG9jYXRlZC4KLSAqCi0gKiBfdGhyZWFkX3RhZ191bmxvY2s6Ci0gKgl1bmxvY2sgdGhlIG11dGV4IGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4gdGFnLiAgIElmIHRoZSBnaXZlbgotICoJdGFnIGlzIE5VTEwgYSB0YWcgaXMgZmlyc3QgYWxsb2NhdGVkLgotICoKLSAqIF90aHJlYWRfdGFnX3N0b3JhZ2U6Ci0gKglyZXR1cm4gYSBwb2ludGVyIHRvIHBlciB0aHJlYWQgaW5zdGFuY2Ugb2YgZGF0YSBhc3NvY2lhdGVkCi0gKgl3aXRoIHRoZSBnaXZlbiB0YWcuICBJZiB0aGUgZ2l2ZW4gdGFnIGlzIE5VTEwgYSB0YWcgaXMgZmlyc3QKLSAqCWFsbG9jYXRlZC4KLSAqLwotdm9pZAlfdGhyZWFkX3RhZ19sb2NrKHZvaWQgKiopOwotdm9pZAlfdGhyZWFkX3RhZ191bmxvY2sodm9pZCAqKik7Ci12b2lkICAgKl90aHJlYWRfdGFnX3N0b3JhZ2Uodm9pZCAqKiwgdm9pZCAqLCBzaXplX3QsIHZvaWQgKik7Ci0KLS8qCi0gKiBNYWNyb3MgdXNlZCBpbiBsaWJjIHRvIGFjY2VzcyB0aHJlYWQgbXV0ZXgsIGtleXMsIGFuZCBwZXIgdGhyZWFkIHN0b3JhZ2UuCi0gKiBfVEhSRUFEX1BSSVZBVEVfS0VZIGFuZCBfVEhSRUFEX1BSSVZBVEVfTVVURVggYXJlIGRpZmZlcmVudCBtYWNyb3MgZm9yCi0gKiBoaXN0b3JpY2FsIHJlYXNvbnMuICAgVGhleSBkbyB0aGUgc2FtZSB0aGluZywgZGVmaW5lIGEgc3RhdGljIHZhcmlhYmxlCi0gKiBrZXllZCBieSAnbmFtZScgdGhhdCBpZGVudGlmaWVzIGEgbXV0ZXggYW5kIGEga2V5IHRvIGlkZW50aWZ5IHBlciB0aHJlYWQKLSAqIGRhdGEuCi0gKi8KLSNkZWZpbmUgX1RIUkVBRF9QUklWQVRFX0tFWShuYW1lKQkJCQkJXAotCXN0YXRpYyB2b2lkICpfX1RIUkVBRF9OQU1FKG5hbWUpCi0jZGVmaW5lIF9USFJFQURfUFJJVkFURV9NVVRFWChuYW1lKQkJCQkJXAotCXN0YXRpYyB2b2lkICpfX1RIUkVBRF9OQU1FKG5hbWUpCi0jZGVmaW5lIF9USFJFQURfUFJJVkFURV9NVVRFWF9MT0NLKG5hbWUpCQkJCVwKLQlfdGhyZWFkX3RhZ19sb2NrKCYoX19USFJFQURfTkFNRShuYW1lKSkpCi0jZGVmaW5lIF9USFJFQURfUFJJVkFURV9NVVRFWF9VTkxPQ0sobmFtZSkJCQkJXAotCV90aHJlYWRfdGFnX3VubG9jaygmKF9fVEhSRUFEX05BTUUobmFtZSkpKQotI2RlZmluZSBfVEhSRUFEX1BSSVZBVEUoa2V5bmFtZSwgc3RvcmFnZSwgZXJyb3IpCQkJXAotCV90aHJlYWRfdGFnX3N0b3JhZ2UoJihfX1RIUkVBRF9OQU1FKGtleW5hbWUpKSwgJihzdG9yYWdlKSwJXAotCQkJICAgIHNpemVvZiAoc3RvcmFnZSksIGVycm9yKQotLyoKLSAqIFJlc29sdmVyIGNvZGUgaXMgc3BlY2lhbCBjYXNlZCBpbiB0aGF0IGl0IHVzZXMgZ2xvYmFsIGtleXMuCi0gKi8KLWV4dGVybiB2b2lkICpfX1RIUkVBRF9OQU1FKF9yZXMpOwotZXh0ZXJuIHZvaWQgKl9fVEhSRUFEX05BTUUoX3Jlc19leHQpOwotZXh0ZXJuIHZvaWQgKl9fVEhSRUFEX05BTUUoc2Vydl9tdXRleCk7Ci0jZW5kaWYKLQotLyoKLSAqIEZpbGUgZGVzY3JpcHRvciBsb2NraW5nIGRlZmluaXRpb25zLgotICovCi0jZGVmaW5lIEZEX1JFQUQJCTB4MQotI2RlZmluZSBGRF9XUklURQkweDIKLSNkZWZpbmUgRkRfUkRXUgkJKEZEX1JFQUQgfCBGRF9XUklURSkKLQotc3RydWN0IHRpbWVzcGVjOwotaW50CV90aHJlYWRfZmRfbG9jayhpbnQsIGludCwgc3RydWN0IHRpbWVzcGVjICopOwotdm9pZAlfdGhyZWFkX2ZkX3VubG9jayhpbnQsIGludCk7Ci0KLS8qCi0gKiBNYWNyb3MgYXJlIHVzZWQgaW4gbGliYyBjb2RlIGZvciBoaXN0b3JpY2FsIChkZWJ1ZykgcmVhc29ucy4KLSAqIERlZmluZSB0aGVtIGhlcmUuCi0gKi8KLSNkZWZpbmUgX0ZEX0xPQ0soX2ZkLF90eXBlLF90cykJX3RocmVhZF9mZF9sb2NrKF9mZCwgX3R5cGUsIF90cykKLSNkZWZpbmUgX0ZEX1VOTE9DSyhfZmQsX3R5cGUpCV90aHJlYWRfZmRfdW5sb2NrKF9mZCwgX3R5cGUpCi0KLQotLyoKLSAqIG1hbGxvYyBsb2NrL3VubG9jayBwcm90b3R5cGVzIGFuZCBkZWZpbml0aW9ucwotICovCi12b2lkCV90aHJlYWRfbWFsbG9jX2luaXQodm9pZCk7Ci12b2lkCV90aHJlYWRfbWFsbG9jX2xvY2sodm9pZCk7Ci12b2lkCV90aHJlYWRfbWFsbG9jX3VubG9jayh2b2lkKTsKLQotI2RlZmluZSBfTUFMTE9DX0xPQ0soKQkJZG8gewkJCQkJXAotCQkJCQlpZiAoX19pc3RocmVhZGVkKQkJXAotCQkJCQkJX3RocmVhZF9tYWxsb2NfbG9jaygpOwlcCi0JCQkJfSB3aGlsZSAoMCkKLSNkZWZpbmUgX01BTExPQ19VTkxPQ0soKQlkbyB7CQkJCQlcCi0JCQkJCWlmIChfX2lzdGhyZWFkZWQpCQlcCi0JCQkJCQlfdGhyZWFkX21hbGxvY191bmxvY2soKTtcCi0JCQkJfSB3aGlsZSAoMCkKLSNkZWZpbmUgX01BTExPQ19MT0NLX0lOSVQoKQlkbyB7CQkJCQlcCi0JCQkJCWlmIChfX2lzdGhyZWFkZWQpCQlcCi0JCQkJCQlfdGhyZWFkX21hbGxvY19pbml0KCk7XAotCQkJCX0gd2hpbGUgKDApCi0KIHZvaWQJX3RocmVhZF9hdGV4aXRfbG9jayh2b2lkKTsKIHZvaWQJX3RocmVhZF9hdGV4aXRfdW5sb2NrKHZvaWQpOwogCmRpZmYgLS1naXQgYS9saWJjL3JlZ2V4L2NjbGFzcy5oIGIvbGliYy9yZWdleC9jY2xhc3MuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDEwNTQ5MS4uMDAwMDAwMAotLS0gYS9saWJjL3JlZ2V4L2NjbGFzcy5oCisrKyAvZGV2L251bGwKQEAgLTEsNjggKzAsMCBAQAotLyoJJE9wZW5CU0Q6IGNjbGFzcy5oLHYgMS41IDIwMDMvMDYvMDIgMjA6MTg6MzYgbWlsbGVydCBFeHAgJAkqLwotCi0vKi0KLSAqIENvcHlyaWdodCAoYykgMTk5MiwgMTk5MywgMTk5NCBIZW5yeSBTcGVuY2VyLgotICogQ29weXJpZ2h0IChjKSAxOTkyLCAxOTkzLCAxOTk0Ci0gKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5Ci0gKiBIZW5yeSBTcGVuY2VyLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqCi0gKglAKCMpY2NsYXNzLmgJOC4zIChCZXJrZWxleSkgMy8yMC85NAotICovCi0KLS8qIGNoYXJhY3Rlci1jbGFzcyB0YWJsZSAqLwotc3RhdGljIGNvbnN0IHN0cnVjdCBjY2xhc3MgewotCWNoYXIgKm5hbWU7Ci0JY2hhciAqY2hhcnM7Ci0JY2hhciAqbXVsdGlzOwotfSBjY2xhc3Nlc1tdID0gewotCXsgImFsbnVtIiwJIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpcCi0wMTIzNDU2Nzg5IiwJCQkJIiJ9ICwKLQl7ICJhbHBoYSIsCSJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6IiwKLQkJCQkJIiJ9ICwKLQl7ICJibGFuayIsCSIgXHQiLAkJIiJ9ICwKLQl7ICJjbnRybCIsCSJcMDA3XGJcdFxuXHZcZlxyXDFcMlwzXDRcNVw2XDE2XDE3XDIwXDIxXDIyXDIzXDI0XAotXDI1XDI2XDI3XDMwXDMxXDMyXDMzXDM0XDM1XDM2XDM3XDE3NyIsCSIifSAsCi0JeyAiZGlnaXQiLAkiMDEyMzQ1Njc4OSIsCSIifSAsCi0JeyAiZ3JhcGgiLAkiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5elwKLTAxMjM0NTY3ODkhXCIjJCUmJygpKissLS4vOjs8PT4/QFtcXF1eX2B7fH1+IiwKLQkJCQkJIiJ9ICwKLQl7ICJsb3dlciIsCSJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiIsCi0JCQkJCSIifSAsCi0JeyAicHJpbnQiLAkiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5elwKLTAxMjM0NTY3ODkhXCIjJCUmJygpKissLS4vOjs8PT4/QFtcXF1eX2B7fH1+ICIsCi0JCQkJCSIifSAsCi0JeyAicHVuY3QiLAkiIVwiIyQlJicoKSorLC0uLzo7PD0+P0BbXFxdXl9ge3x9fiIsCi0JCQkJCSIifSAsCi0JeyAic3BhY2UiLAkiXHRcblx2XGZcciAiLAkiIn0gLAotCXsgInVwcGVyIiwJIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaIiwKLQkJCQkJIiJ9ICwKLQl7ICJ4ZGlnaXQiLAkiMDEyMzQ1Njc4OUFCQ0RFRmFiY2RlZiIsCi0JCQkJCSIifSAsCi0JeyBOVUxMLAkJMCwJCSIiIH0KLX07CmRpZmYgLS1naXQgYS9saWJjL3JlZ2V4L2NuYW1lLmggYi9saWJjL3JlZ2V4L2NuYW1lLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI2NzRiNjguLjAwMDAwMDAKLS0tIGEvbGliYy9yZWdleC9jbmFtZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTM5ICswLDAgQEAKLS8qCSRPcGVuQlNEOiBjbmFtZS5oLHYgMS41IDIwMDMvMDYvMDIgMjA6MTg6MzYgbWlsbGVydCBFeHAgJAkqLwotCi0vKi0KLSAqIENvcHlyaWdodCAoYykgMTk5MiwgMTk5MywgMTk5NCBIZW5yeSBTcGVuY2VyLgotICogQ29weXJpZ2h0IChjKSAxOTkyLCAxOTkzLCAxOTk0Ci0gKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5Ci0gKiBIZW5yeSBTcGVuY2VyLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqCi0gKglAKCMpY25hbWUuaAk4LjMgKEJlcmtlbGV5KSAzLzIwLzk0Ci0gKi8KLQotLyogY2hhcmFjdGVyLW5hbWUgdGFibGUgKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY25hbWUgewotCWNoYXIgKm5hbWU7Ci0JY2hhciBjb2RlOwotfSBjbmFtZXNbXSA9IHsKLQl7ICJOVUwiLAkJCSdcMCcgfSwKLQl7ICJTT0giLAkJCSdcMDAxJyB9LAotCXsgIlNUWCIsCQkJJ1wwMDInIH0sCi0JeyAiRVRYIiwJCQknXDAwMycgfSwKLQl7ICJFT1QiLAkJCSdcMDA0JyB9LAotCXsgIkVOUSIsCQkJJ1wwMDUnIH0sCi0JeyAiQUNLIiwJCQknXDAwNicgfSwKLQl7ICJCRUwiLAkJCSdcMDA3JyB9LAotCXsgImFsZXJ0IiwJCQknXDAwNycgfSwKLQl7ICJCUyIsCQkJCSdcMDEwJyB9LAotCXsgImJhY2tzcGFjZSIsCQkJJ1xiJyB9LAotCXsgIkhUIiwJCQkJJ1wwMTEnIH0sCi0JeyAidGFiIiwJCQknXHQnIH0sCi0JeyAiTEYiLAkJCQknXDAxMicgfSwKLQl7ICJuZXdsaW5lIiwJCQknXG4nIH0sCi0JeyAiVlQiLAkJCQknXDAxMycgfSwKLQl7ICJ2ZXJ0aWNhbC10YWIiLAkJJ1x2JyB9LAotCXsgIkZGIiwJCQkJJ1wwMTQnIH0sCi0JeyAiZm9ybS1mZWVkIiwJCQknXGYnIH0sCi0JeyAiQ1IiLAkJCQknXDAxNScgfSwKLQl7ICJjYXJyaWFnZS1yZXR1cm4iLAkJJ1xyJyB9LAotCXsgIlNPIiwJCQkJJ1wwMTYnIH0sCi0JeyAiU0kiLAkJCQknXDAxNycgfSwKLQl7ICJETEUiLAkJCSdcMDIwJyB9LAotCXsgIkRDMSIsCQkJJ1wwMjEnIH0sCi0JeyAiREMyIiwJCQknXDAyMicgfSwKLQl7ICJEQzMiLAkJCSdcMDIzJyB9LAotCXsgIkRDNCIsCQkJJ1wwMjQnIH0sCi0JeyAiTkFLIiwJCQknXDAyNScgfSwKLQl7ICJTWU4iLAkJCSdcMDI2JyB9LAotCXsgIkVUQiIsCQkJJ1wwMjcnIH0sCi0JeyAiQ0FOIiwJCQknXDAzMCcgfSwKLQl7ICJFTSIsCQkJCSdcMDMxJyB9LAotCXsgIlNVQiIsCQkJJ1wwMzInIH0sCi0JeyAiRVNDIiwJCQknXDAzMycgfSwKLQl7ICJJUzQiLAkJCSdcMDM0JyB9LAotCXsgIkZTIiwJCQkJJ1wwMzQnIH0sCi0JeyAiSVMzIiwJCQknXDAzNScgfSwKLQl7ICJHUyIsCQkJCSdcMDM1JyB9LAotCXsgIklTMiIsCQkJJ1wwMzYnIH0sCi0JeyAiUlMiLAkJCQknXDAzNicgfSwKLQl7ICJJUzEiLAkJCSdcMDM3JyB9LAotCXsgIlVTIiwJCQkJJ1wwMzcnIH0sCi0JeyAic3BhY2UiLAkJCScgJyB9LAotCXsgImV4Y2xhbWF0aW9uLW1hcmsiLAkJJyEnIH0sCi0JeyAicXVvdGF0aW9uLW1hcmsiLAkJJyInIH0sCi0JeyAibnVtYmVyLXNpZ24iLAkJJyMnIH0sCi0JeyAiZG9sbGFyLXNpZ24iLAkJJyQnIH0sCi0JeyAicGVyY2VudC1zaWduIiwJCSclJyB9LAotCXsgImFtcGVyc2FuZCIsCQkJJyYnIH0sCi0JeyAiYXBvc3Ryb3BoZSIsCQkJJ1wnJyB9LAotCXsgImxlZnQtcGFyZW50aGVzaXMiLAkJJygnIH0sCi0JeyAicmlnaHQtcGFyZW50aGVzaXMiLAkJJyknIH0sCi0JeyAiYXN0ZXJpc2siLAkJCScqJyB9LAotCXsgInBsdXMtc2lnbiIsCQkJJysnIH0sCi0JeyAiY29tbWEiLAkJCScsJyB9LAotCXsgImh5cGhlbiIsCQkJJy0nIH0sCi0JeyAiaHlwaGVuLW1pbnVzIiwJCSctJyB9LAotCXsgInBlcmlvZCIsCQkJJy4nIH0sCi0JeyAiZnVsbC1zdG9wIiwJCQknLicgfSwKLQl7ICJzbGFzaCIsCQkJJy8nIH0sCi0JeyAic29saWR1cyIsCQkJJy8nIH0sCi0JeyAiemVybyIsCQkJJzAnIH0sCi0JeyAib25lIiwJCQknMScgfSwKLQl7ICJ0d28iLAkJCScyJyB9LAotCXsgInRocmVlIiwJCQknMycgfSwKLQl7ICJmb3VyIiwJCQknNCcgfSwKLQl7ICJmaXZlIiwJCQknNScgfSwKLQl7ICJzaXgiLAkJCSc2JyB9LAotCXsgInNldmVuIiwJCQknNycgfSwKLQl7ICJlaWdodCIsCQkJJzgnIH0sCi0JeyAibmluZSIsCQkJJzknIH0sCi0JeyAiY29sb24iLAkJCSc6JyB9LAotCXsgInNlbWljb2xvbiIsCQkJJzsnIH0sCi0JeyAibGVzcy10aGFuLXNpZ24iLAkJJzwnIH0sCi0JeyAiZXF1YWxzLXNpZ24iLAkJJz0nIH0sCi0JeyAiZ3JlYXRlci10aGFuLXNpZ24iLAkJJz4nIH0sCi0JeyAicXVlc3Rpb24tbWFyayIsCQknPycgfSwKLQl7ICJjb21tZXJjaWFsLWF0IiwJCSdAJyB9LAotCXsgImxlZnQtc3F1YXJlLWJyYWNrZXQiLAknWycgfSwKLQl7ICJiYWNrc2xhc2giLAkJCSdcXCcgfSwKLQl7ICJyZXZlcnNlLXNvbGlkdXMiLAkJJ1xcJyB9LAotCXsgInJpZ2h0LXNxdWFyZS1icmFja2V0IiwJJ10nIH0sCi0JeyAiY2lyY3VtZmxleCIsCQkJJ14nIH0sCi0JeyAiY2lyY3VtZmxleC1hY2NlbnQiLAkJJ14nIH0sCi0JeyAidW5kZXJzY29yZSIsCQkJJ18nIH0sCi0JeyAibG93LWxpbmUiLAkJCSdfJyB9LAotCXsgImdyYXZlLWFjY2VudCIsCQknYCcgfSwKLQl7ICJsZWZ0LWJyYWNlIiwJCQkneycgfSwKLQl7ICJsZWZ0LWN1cmx5LWJyYWNrZXQiLAkJJ3snIH0sCi0JeyAidmVydGljYWwtbGluZSIsCQknfCcgfSwKLQl7ICJyaWdodC1icmFjZSIsCQknfScgfSwKLQl7ICJyaWdodC1jdXJseS1icmFja2V0IiwJJ30nIH0sCi0JeyAidGlsZGUiLAkJCSd+JyB9LAotCXsgIkRFTCIsCQkJJ1wxNzcnIH0sCi0JeyBOVUxMLAkJCQkwIH0KLX07CmRpZmYgLS1naXQgYS9saWJjL3JlZ2V4L2VuZ2luZS5jIGIvbGliYy9yZWdleC9lbmdpbmUuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWFlNmZmMi4uMDAwMDAwMAotLS0gYS9saWJjL3JlZ2V4L2VuZ2luZS5jCisrKyAvZGV2L251bGwKQEAgLTEsMTAyMSArMCwwIEBACi0vKgkkT3BlbkJTRDogZW5naW5lLmMsdiAxLjE1IDIwMDUvMDgvMDUgMTM6MDM6MDAgZXNwaWUgRXhwICQJKi8KLQotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTIsIDE5OTMsIDE5OTQgSGVucnkgU3BlbmNlci4KLSAqIENvcHlyaWdodCAoYykgMTk5MiwgMTk5MywgMTk5NAotICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQotICogSGVucnkgU3BlbmNlci4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0gKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKLSAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKgotICoJQCgjKWVuZ2luZS5jCTguNSAoQmVya2VsZXkpIDMvMjAvOTQKLSAqLwotCi0vKgotICogVGhlIG1hdGNoaW5nIGVuZ2luZSBhbmQgZnJpZW5kcy4gIFRoaXMgZmlsZSBpcyAjaW5jbHVkZWQgYnkgcmVnZXhlYy5jCi0gKiBhZnRlciBzdWl0YWJsZSAjZGVmaW5lcyBvZiBhIHZhcmlldHkgb2YgbWFjcm9zIHVzZWQgaGVyZWluLCBzbyB0aGF0Ci0gKiBkaWZmZXJlbnQgc3RhdGUgcmVwcmVzZW50YXRpb25zIGNhbiBiZSB1c2VkIHdpdGhvdXQgZHVwbGljYXRpbmcgbWFzc2VzCi0gKiBvZiBjb2RlLgotICovCi0KLSNpZmRlZiBTTkFNRVMKLSNkZWZpbmUJbWF0Y2hlcglzbWF0Y2hlcgotI2RlZmluZQlmYXN0CXNmYXN0Ci0jZGVmaW5lCXNsb3cJc3Nsb3cKLSNkZWZpbmUJZGlzc2VjdAlzZGlzc2VjdAotI2RlZmluZQliYWNrcmVmCXNiYWNrcmVmCi0jZGVmaW5lCXN0ZXAJc3N0ZXAKLSNkZWZpbmUJcHJpbnQJc3ByaW50Ci0jZGVmaW5lCWF0CXNhdAotI2RlZmluZQltYXRjaAlzbWF0Ci0jZGVmaW5lCW5vcGUJc25vcGUKLSNlbmRpZgotI2lmZGVmIExOQU1FUwotI2RlZmluZQltYXRjaGVyCWxtYXRjaGVyCi0jZGVmaW5lCWZhc3QJbGZhc3QKLSNkZWZpbmUJc2xvdwlsc2xvdwotI2RlZmluZQlkaXNzZWN0CWxkaXNzZWN0Ci0jZGVmaW5lCWJhY2tyZWYJbGJhY2tyZWYKLSNkZWZpbmUJc3RlcAlsc3RlcAotI2RlZmluZQlwcmludAlscHJpbnQKLSNkZWZpbmUJYXQJbGF0Ci0jZGVmaW5lCW1hdGNoCWxtYXQKLSNkZWZpbmUJbm9wZQlsbm9wZQotI2VuZGlmCi0KLS8qIGFub3RoZXIgc3RydWN0dXJlIHBhc3NlZCB1cCBhbmQgZG93biB0byBhdm9pZCB6aWxsaW9ucyBvZiBwYXJhbWV0ZXJzICovCi1zdHJ1Y3QgbWF0Y2ggewotCXN0cnVjdCByZV9ndXRzICpnOwotCWludCBlZmxhZ3M7Ci0JcmVnbWF0Y2hfdCAqcG1hdGNoOwkvKiBbbnN1YisxXSAoMCBlbGVtZW50IHVudXNlZCkgKi8KLQljaGFyICpvZmZwOwkJLyogb2Zmc2V0cyB3b3JrIGZyb20gaGVyZSAqLwotCWNoYXIgKmJlZ2lucDsJCS8qIHN0YXJ0IG9mIHN0cmluZyAtLSB2aXJ0dWFsIE5VTCBwcmVjZWRlcyAqLwotCWNoYXIgKmVuZHA7CQkvKiBlbmQgb2Ygc3RyaW5nIC0tIHZpcnR1YWwgTlVMIGhlcmUgKi8KLQljaGFyICpjb2xkcDsJCS8qIGNhbiBiZSBubyBtYXRjaCBzdGFydGluZyBiZWZvcmUgaGVyZSAqLwotCWNoYXIgKipsYXN0cG9zOwkJLyogW25wbHVzKzFdICovCi0JU1RBVEVWQVJTOwotCXN0YXRlcyBzdDsJCS8qIGN1cnJlbnQgc3RhdGVzICovCi0Jc3RhdGVzIGZyZXNoOwkJLyogc3RhdGVzIGZvciBhIGZyZXNoIHN0YXJ0ICovCi0Jc3RhdGVzIHRtcDsJCS8qIHRlbXBvcmFyeSAqLwotCXN0YXRlcyBlbXB0eTsJCS8qIGVtcHR5IHNldCBvZiBzdGF0ZXMgKi8KLX07Ci0KLXN0YXRpYyBpbnQgbWF0Y2hlcihzdHJ1Y3QgcmVfZ3V0cyAqLCBjaGFyICosIHNpemVfdCwgcmVnbWF0Y2hfdFtdLCBpbnQpOwotc3RhdGljIGNoYXIgKmRpc3NlY3Qoc3RydWN0IG1hdGNoICosIGNoYXIgKiwgY2hhciAqLCBzb3Bubywgc29wbm8pOwotc3RhdGljIGNoYXIgKmJhY2tyZWYoc3RydWN0IG1hdGNoICosIGNoYXIgKiwgY2hhciAqLCBzb3Bubywgc29wbm8sIHNvcG5vLCBpbnQpOwotc3RhdGljIGNoYXIgKmZhc3Qoc3RydWN0IG1hdGNoICosIGNoYXIgKiwgY2hhciAqLCBzb3Bubywgc29wbm8pOwotc3RhdGljIGNoYXIgKnNsb3coc3RydWN0IG1hdGNoICosIGNoYXIgKiwgY2hhciAqLCBzb3Bubywgc29wbm8pOwotc3RhdGljIHN0YXRlcyBzdGVwKHN0cnVjdCByZV9ndXRzICosIHNvcG5vLCBzb3Bubywgc3RhdGVzLCBpbnQsIHN0YXRlcyk7Ci0jZGVmaW5lIE1BWF9SRUNVUlNJT04JMTAwCi0jZGVmaW5lCUJPTAkoT1VUKzEpCi0jZGVmaW5lCUVPTAkoQk9MKzEpCi0jZGVmaW5lCUJPTEVPTAkoQk9MKzIpCi0jZGVmaW5lCU5PVEhJTkcJKEJPTCszKQotI2RlZmluZQlCT1cJKEJPTCs0KQotI2RlZmluZQlFT1cJKEJPTCs1KQotI2RlZmluZQlDT0RFTUFYCShCT0wrNSkJCS8qIGhpZ2hlc3QgY29kZSB1c2VkICovCi0jZGVmaW5lCU5PTkNIQVIoYykJKChjKSA+IENIQVJfTUFYKQotI2RlZmluZQlOTk9OQ0hBUgkoQ09ERU1BWC1DSEFSX01BWCkKLSNpZmRlZiBSRURFQlVHCi1zdGF0aWMgdm9pZCBwcmludChzdHJ1Y3QgbWF0Y2ggKiwgY2hhciAqLCBzdGF0ZXMsIGludCwgRklMRSAqKTsKLSNlbmRpZgotI2lmZGVmIFJFREVCVUcKLXN0YXRpYyB2b2lkIGF0KHN0cnVjdCBtYXRjaCAqLCBjaGFyICosIGNoYXIgKiwgY2hhciAqLCBzb3Bubywgc29wbm8pOwotI2VuZGlmCi0jaWZkZWYgUkVERUJVRwotc3RhdGljIGNoYXIgKnBjaGFyKGludCk7Ci0jZW5kaWYKLQotI2lmZGVmIFJFREVCVUcKLSNkZWZpbmUJU1AodCwgcywgYykJcHJpbnQobSwgdCwgcywgYywgc3Rkb3V0KQotI2RlZmluZQlBVCh0LCBwMSwgcDIsIHMxLCBzMikJYXQobSwgdCwgcDEsIHAyLCBzMSwgczIpCi0jZGVmaW5lCU5PVEUoc3RyKQl7IGlmIChtLT5lZmxhZ3MmUkVHX1RSQUNFKSAodm9pZClwcmludGYoIj0lc1xuIiwgKHN0cikpOyB9Ci1zdGF0aWMgaW50IG5vcGUgPSAwOwotI2Vsc2UKLSNkZWZpbmUJU1AodCwgcywgYykJLyogbm90aGluZyAqLwotI2RlZmluZQlBVCh0LCBwMSwgcDIsIHMxLCBzMikJLyogbm90aGluZyAqLwotI2RlZmluZQlOT1RFKHMpCS8qIG5vdGhpbmcgKi8KLSNlbmRpZgotCi0vKgotIC0gbWF0Y2hlciAtIHRoZSBhY3R1YWwgbWF0Y2hpbmcgZW5naW5lCi0gKi8KLXN0YXRpYyBpbnQJCQkvKiAwIHN1Y2Nlc3MsIFJFR19OT01BVENIIGZhaWx1cmUgKi8KLW1hdGNoZXIoc3RydWN0IHJlX2d1dHMgKmcsIGNoYXIgKnN0cmluZywgc2l6ZV90IG5tYXRjaCwgcmVnbWF0Y2hfdCBwbWF0Y2hbXSwKLSAgICBpbnQgZWZsYWdzKQotewotCWNoYXIgKmVuZHA7Ci0JaW50IGk7Ci0Jc3RydWN0IG1hdGNoIG12OwotCXN0cnVjdCBtYXRjaCAqbSA9ICZtdjsKLQljaGFyICpkcDsKLQljb25zdCBzb3BubyBnZiA9IGctPmZpcnN0c3RhdGUrMTsJLyogKzEgZm9yIE9FTkQgKi8KLQljb25zdCBzb3BubyBnbCA9IGctPmxhc3RzdGF0ZTsKLQljaGFyICpzdGFydDsKLQljaGFyICpzdG9wOwotCi0JLyogc2ltcGxpZnkgdGhlIHNpdHVhdGlvbiB3aGVyZSBwb3NzaWJsZSAqLwotCWlmIChnLT5jZmxhZ3MmUkVHX05PU1VCKQotCQlubWF0Y2ggPSAwOwotCWlmIChlZmxhZ3MmUkVHX1NUQVJURU5EKSB7Ci0JCXN0YXJ0ID0gc3RyaW5nICsgcG1hdGNoWzBdLnJtX3NvOwotCQlzdG9wID0gc3RyaW5nICsgcG1hdGNoWzBdLnJtX2VvOwotCX0gZWxzZSB7Ci0JCXN0YXJ0ID0gc3RyaW5nOwotCQlzdG9wID0gc3RhcnQgKyBzdHJsZW4oc3RhcnQpOwotCX0KLQlpZiAoc3RvcCA8IHN0YXJ0KQotCQlyZXR1cm4oUkVHX0lOVkFSRyk7Ci0KLQkvKiBwcmVzY3JlZW5pbmc7IHRoaXMgZG9lcyB3b25kZXJzIGZvciB0aGlzIHJhdGhlciBzbG93IGNvZGUgKi8KLQlpZiAoZy0+bXVzdCAhPSBOVUxMKSB7Ci0JCWZvciAoZHAgPSBzdGFydDsgZHAgPCBzdG9wOyBkcCsrKQotCQkJaWYgKCpkcCA9PSBnLT5tdXN0WzBdICYmIHN0b3AgLSBkcCA+PSBnLT5tbGVuICYmCi0JCQkJbWVtY21wKGRwLCBnLT5tdXN0LCAoc2l6ZV90KWctPm1sZW4pID09IDApCi0JCQkJYnJlYWs7Ci0JCWlmIChkcCA9PSBzdG9wKQkJLyogd2UgZGlkbid0IGZpbmQgZy0+bXVzdCAqLwotCQkJcmV0dXJuKFJFR19OT01BVENIKTsKLQl9Ci0KLQkvKiBtYXRjaCBzdHJ1Y3Qgc2V0dXAgKi8KLQltLT5nID0gZzsKLQltLT5lZmxhZ3MgPSBlZmxhZ3M7Ci0JbS0+cG1hdGNoID0gTlVMTDsKLQltLT5sYXN0cG9zID0gTlVMTDsKLQltLT5vZmZwID0gc3RyaW5nOwotCW0tPmJlZ2lucCA9IHN0YXJ0OwotCW0tPmVuZHAgPSBzdG9wOwotCVNUQVRFU0VUVVAobSwgNCk7Ci0JU0VUVVAobS0+c3QpOwotCVNFVFVQKG0tPmZyZXNoKTsKLQlTRVRVUChtLT50bXApOwotCVNFVFVQKG0tPmVtcHR5KTsKLQlDTEVBUihtLT5lbXB0eSk7Ci0KLQkvKiB0aGlzIGxvb3AgZG9lcyBvbmx5IG9uZSByZXBldGl0aW9uIGV4Y2VwdCBmb3IgYmFja3JlZnMgKi8KLQlmb3IgKDs7KSB7Ci0JCWVuZHAgPSBmYXN0KG0sIHN0YXJ0LCBzdG9wLCBnZiwgZ2wpOwotCQlpZiAoZW5kcCA9PSBOVUxMKSB7CQkvKiBhIG1pc3MgKi8KLQkJCWZyZWUobS0+cG1hdGNoKTsKLQkJCWZyZWUobS0+bGFzdHBvcyk7Ci0JCQlTVEFURVRFQVJET1dOKG0pOwotCQkJcmV0dXJuKFJFR19OT01BVENIKTsKLQkJfQotCQlpZiAobm1hdGNoID09IDAgJiYgIWctPmJhY2tyZWZzKQotCQkJYnJlYWs7CQkvKiBubyBmdXJ0aGVyIGluZm8gbmVlZGVkICovCi0KLQkJLyogd2hlcmU/ICovCi0JCWFzc2VydChtLT5jb2xkcCAhPSBOVUxMKTsKLQkJZm9yICg7OykgewotCQkJTk9URSgiZmluZGluZyBzdGFydCIpOwotCQkJZW5kcCA9IHNsb3cobSwgbS0+Y29sZHAsIHN0b3AsIGdmLCBnbCk7Ci0JCQlpZiAoZW5kcCAhPSBOVUxMKQotCQkJCWJyZWFrOwotCQkJYXNzZXJ0KG0tPmNvbGRwIDwgbS0+ZW5kcCk7Ci0JCQltLT5jb2xkcCsrOwotCQl9Ci0JCWlmIChubWF0Y2ggPT0gMSAmJiAhZy0+YmFja3JlZnMpCi0JCQlicmVhazsJCS8qIG5vIGZ1cnRoZXIgaW5mbyBuZWVkZWQgKi8KLQotCQkvKiBvaCBteSwgaGUgd2FudHMgdGhlIHN1YmV4cHJlc3Npb25zLi4uICovCi0JCWlmIChtLT5wbWF0Y2ggPT0gTlVMTCkKLQkJCW0tPnBtYXRjaCA9IChyZWdtYXRjaF90ICopbWFsbG9jKChtLT5nLT5uc3ViICsgMSkgKgotCQkJCQkJCXNpemVvZihyZWdtYXRjaF90KSk7Ci0JCWlmIChtLT5wbWF0Y2ggPT0gTlVMTCkgewotCQkJU1RBVEVURUFSRE9XTihtKTsKLQkJCXJldHVybihSRUdfRVNQQUNFKTsKLQkJfQotCQlmb3IgKGkgPSAxOyBpIDw9IChpbnQpbS0+Zy0+bnN1YjsgaSsrKQotCQkJbS0+cG1hdGNoW2ldLnJtX3NvID0gbS0+cG1hdGNoW2ldLnJtX2VvID0gLTE7Ci0JCWlmICghZy0+YmFja3JlZnMgJiYgIShtLT5lZmxhZ3MmUkVHX0JBQ0tSKSkgewotCQkJTk9URSgiZGlzc2VjdGluZyIpOwotCQkJZHAgPSBkaXNzZWN0KG0sIG0tPmNvbGRwLCBlbmRwLCBnZiwgZ2wpOwotCQl9IGVsc2UgewotCQkJaWYgKGctPm5wbHVzID4gMCAmJiBtLT5sYXN0cG9zID09IE5VTEwpCi0JCQkJbS0+bGFzdHBvcyA9IChjaGFyICoqKW1hbGxvYygoZy0+bnBsdXMrMSkgKgotCQkJCQkJCXNpemVvZihjaGFyICopKTsKLQkJCWlmIChnLT5ucGx1cyA+IDAgJiYgbS0+bGFzdHBvcyA9PSBOVUxMKSB7Ci0JCQkJZnJlZShtLT5wbWF0Y2gpOwotCQkJCVNUQVRFVEVBUkRPV04obSk7Ci0JCQkJcmV0dXJuKFJFR19FU1BBQ0UpOwotCQkJfQotCQkJTk9URSgiYmFja3JlZiBkaXNzZWN0Iik7Ci0JCQlkcCA9IGJhY2tyZWYobSwgbS0+Y29sZHAsIGVuZHAsIGdmLCBnbCwgKHNvcG5vKTAsIDApOwotCQl9Ci0JCWlmIChkcCAhPSBOVUxMKQotCQkJYnJlYWs7Ci0KLQkJLyogdWgtb2guLi4gd2UgY291bGRuJ3QgZmluZCBhIHN1YmV4cHJlc3Npb24tbGV2ZWwgbWF0Y2ggKi8KLQkJYXNzZXJ0KGctPmJhY2tyZWZzKTsJLyogbXVzdCBiZSBiYWNrIHJlZmVyZW5jZXMgZG9pbmcgaXQgKi8KLQkJYXNzZXJ0KGctPm5wbHVzID09IDAgfHwgbS0+bGFzdHBvcyAhPSBOVUxMKTsKLQkJZm9yICg7OykgewotCQkJaWYgKGRwICE9IE5VTEwgfHwgZW5kcCA8PSBtLT5jb2xkcCkKLQkJCQlicmVhazsJCS8qIGRlZmVhdCAqLwotCQkJTk9URSgiYmFja29mZiIpOwotCQkJZW5kcCA9IHNsb3cobSwgbS0+Y29sZHAsIGVuZHAtMSwgZ2YsIGdsKTsKLQkJCWlmIChlbmRwID09IE5VTEwpCi0JCQkJYnJlYWs7CQkvKiBkZWZlYXQgKi8KLQkJCS8qIHRyeSBpdCBvbiBhIHNob3J0ZXIgcG9zc2liaWxpdHkgKi8KLSNpZm5kZWYgTkRFQlVHCi0JCQlmb3IgKGkgPSAxOyBpIDw9IG0tPmctPm5zdWI7IGkrKykgewotCQkJCWFzc2VydChtLT5wbWF0Y2hbaV0ucm1fc28gPT0gLTEpOwotCQkJCWFzc2VydChtLT5wbWF0Y2hbaV0ucm1fZW8gPT0gLTEpOwotCQkJfQotI2VuZGlmCi0JCQlOT1RFKCJiYWNrb2ZmIGRpc3NlY3QiKTsKLQkJCWRwID0gYmFja3JlZihtLCBtLT5jb2xkcCwgZW5kcCwgZ2YsIGdsLCAoc29wbm8pMCwgMCk7Ci0JCX0KLQkJYXNzZXJ0KGRwID09IE5VTEwgfHwgZHAgPT0gZW5kcCk7Ci0JCWlmIChkcCAhPSBOVUxMKQkJLyogZm91bmQgYSBzaG9ydGVyIG9uZSAqLwotCQkJYnJlYWs7Ci0KLQkJLyogZGVzcGl0ZSBpbml0aWFsIGFwcGVhcmFuY2VzLCB0aGVyZSBpcyBubyBtYXRjaCBoZXJlICovCi0JCU5PVEUoImZhbHNlIGFsYXJtIik7Ci0JCWlmIChtLT5jb2xkcCA9PSBzdG9wKQotCQkJYnJlYWs7Ci0JCXN0YXJ0ID0gbS0+Y29sZHAgKyAxOwkvKiByZWN5Y2xlIHN0YXJ0aW5nIGxhdGVyICovCi0JfQotCi0JLyogZmlsbCBpbiB0aGUgZGV0YWlscyBpZiByZXF1ZXN0ZWQgKi8KLQlpZiAobm1hdGNoID4gMCkgewotCQlwbWF0Y2hbMF0ucm1fc28gPSBtLT5jb2xkcCAtIG0tPm9mZnA7Ci0JCXBtYXRjaFswXS5ybV9lbyA9IGVuZHAgLSBtLT5vZmZwOwotCX0KLQlpZiAobm1hdGNoID4gMSkgewotCQlhc3NlcnQobS0+cG1hdGNoICE9IE5VTEwpOwotCQlmb3IgKGkgPSAxOyBpIDwgKHNzaXplX3Qpbm1hdGNoOyBpKyspCi0JCQlpZiAoaSA8PSAoaW50KW0tPmctPm5zdWIpCi0JCQkJcG1hdGNoW2ldID0gbS0+cG1hdGNoW2ldOwotCQkJZWxzZSB7Ci0JCQkJcG1hdGNoW2ldLnJtX3NvID0gLTE7Ci0JCQkJcG1hdGNoW2ldLnJtX2VvID0gLTE7Ci0JCQl9Ci0JfQotCi0JaWYgKG0tPnBtYXRjaCAhPSBOVUxMKQotCQlmcmVlKChjaGFyICopbS0+cG1hdGNoKTsKLQlpZiAobS0+bGFzdHBvcyAhPSBOVUxMKQotCQlmcmVlKChjaGFyICopbS0+bGFzdHBvcyk7Ci0JU1RBVEVURUFSRE9XTihtKTsKLQlyZXR1cm4oMCk7Ci19Ci0KLS8qCi0gLSBkaXNzZWN0IC0gZmlndXJlIG91dCB3aGF0IG1hdGNoZWQgd2hhdCwgbm8gYmFjayByZWZlcmVuY2VzCi0gKi8KLXN0YXRpYyBjaGFyICoJCQkvKiA9PSBzdG9wIChzdWNjZXNzKSBhbHdheXMgKi8KLWRpc3NlY3Qoc3RydWN0IG1hdGNoICptLCBjaGFyICpzdGFydCwgY2hhciAqc3RvcCwgc29wbm8gc3RhcnRzdCwgc29wbm8gc3RvcHN0KQotewotCWludCBpOwotCXNvcG5vIHNzOwkvKiBzdGFydCBzb3Agb2YgY3VycmVudCBzdWJSRSAqLwotCXNvcG5vIGVzOwkvKiBlbmQgc29wIG9mIGN1cnJlbnQgc3ViUkUgKi8KLQljaGFyICpzcDsJLyogc3RhcnQgb2Ygc3RyaW5nIG1hdGNoZWQgYnkgaXQgKi8KLQljaGFyICpzdHA7CS8qIHN0cmluZyBtYXRjaGVkIGJ5IGl0IGNhbm5vdCBwYXNzIGhlcmUgKi8KLQljaGFyICpyZXN0OwkvKiBzdGFydCBvZiByZXN0IG9mIHN0cmluZyAqLwotCWNoYXIgKnRhaWw7CS8qIHN0cmluZyB1bm1hdGNoZWQgYnkgcmVzdCBvZiBSRSAqLwotCXNvcG5vIHNzdWI7CS8qIHN0YXJ0IHNvcCBvZiBzdWJzdWJSRSAqLwotCXNvcG5vIGVzdWI7CS8qIGVuZCBzb3Agb2Ygc3Vic3ViUkUgKi8KLQljaGFyICpzc3A7CS8qIHN0YXJ0IG9mIHN0cmluZyBtYXRjaGVkIGJ5IHN1YnN1YlJFICovCi0JY2hhciAqc2VwOwkvKiBlbmQgb2Ygc3RyaW5nIG1hdGNoZWQgYnkgc3Vic3ViUkUgKi8KLQljaGFyICpvbGRzc3A7CS8qIHByZXZpb3VzIHNzcCAqLwotCWNoYXIgKmRwOwotCi0JQVQoImRpc3MiLCBzdGFydCwgc3RvcCwgc3RhcnRzdCwgc3RvcHN0KTsKLQlzcCA9IHN0YXJ0OwotCWZvciAoc3MgPSBzdGFydHN0OyBzcyA8IHN0b3BzdDsgc3MgPSBlcykgewotCQkvKiBpZGVudGlmeSBlbmQgb2Ygc3ViUkUgKi8KLQkJZXMgPSBzczsKLQkJc3dpdGNoIChPUChtLT5nLT5zdHJpcFtlc10pKSB7Ci0JCWNhc2UgT1BMVVNfOgotCQljYXNlIE9RVUVTVF86Ci0JCQllcyArPSBPUE5EKG0tPmctPnN0cmlwW2VzXSk7Ci0JCQlicmVhazsKLQkJY2FzZSBPQ0hfOgotCQkJd2hpbGUgKE9QKG0tPmctPnN0cmlwW2VzXSkgIT0gT19DSCkKLQkJCQllcyArPSBPUE5EKG0tPmctPnN0cmlwW2VzXSk7Ci0JCQlicmVhazsKLQkJfQotCQllcysrOwotCi0JCS8qIGZpZ3VyZSBvdXQgd2hhdCBpdCBtYXRjaGVkICovCi0JCXN3aXRjaCAoT1AobS0+Zy0+c3RyaXBbc3NdKSkgewotCQljYXNlIE9FTkQ6Ci0JCQlhc3NlcnQobm9wZSk7Ci0JCQlicmVhazsKLQkJY2FzZSBPQ0hBUjoKLQkJCXNwKys7Ci0JCQlicmVhazsKLQkJY2FzZSBPQk9MOgotCQljYXNlIE9FT0w6Ci0JCWNhc2UgT0JPVzoKLQkJY2FzZSBPRU9XOgotCQkJYnJlYWs7Ci0JCWNhc2UgT0FOWToKLQkJY2FzZSBPQU5ZT0Y6Ci0JCQlzcCsrOwotCQkJYnJlYWs7Ci0JCWNhc2UgT0JBQ0tfOgotCQljYXNlIE9fQkFDSzoKLQkJCWFzc2VydChub3BlKTsKLQkJCWJyZWFrOwotCQkvKiBjYXNlcyB3aGVyZSBsZW5ndGggb2YgbWF0Y2ggaXMgaGFyZCB0byBmaW5kICovCi0JCWNhc2UgT1FVRVNUXzoKLQkJCXN0cCA9IHN0b3A7Ci0JCQlmb3IgKDs7KSB7Ci0JCQkJLyogaG93IGxvbmcgY291bGQgdGhpcyBvbmUgYmU/ICovCi0JCQkJcmVzdCA9IHNsb3cobSwgc3AsIHN0cCwgc3MsIGVzKTsKLQkJCQlhc3NlcnQocmVzdCAhPSBOVUxMKTsJLyogaXQgZGlkIG1hdGNoICovCi0JCQkJLyogY291bGQgdGhlIHJlc3QgbWF0Y2ggdGhlIHJlc3Q/ICovCi0JCQkJdGFpbCA9IHNsb3cobSwgcmVzdCwgc3RvcCwgZXMsIHN0b3BzdCk7Ci0JCQkJaWYgKHRhaWwgPT0gc3RvcCkKLQkJCQkJYnJlYWs7CQkvKiB5ZXMhICovCi0JCQkJLyogbm8gLS0gdHJ5IGEgc2hvcnRlciBtYXRjaCBmb3IgdGhpcyBvbmUgKi8KLQkJCQlzdHAgPSByZXN0IC0gMTsKLQkJCQlhc3NlcnQoc3RwID49IHNwKTsJLyogaXQgZGlkIHdvcmsgKi8KLQkJCX0KLQkJCXNzdWIgPSBzcyArIDE7Ci0JCQllc3ViID0gZXMgLSAxOwotCQkJLyogZGlkIGlubmFyZHMgbWF0Y2g/ICovCi0JCQlpZiAoc2xvdyhtLCBzcCwgcmVzdCwgc3N1YiwgZXN1YikgIT0gTlVMTCkgewotCQkJCWRwID0gZGlzc2VjdChtLCBzcCwgcmVzdCwgc3N1YiwgZXN1Yik7Ci0JCQkJYXNzZXJ0KGRwID09IHJlc3QpOwotCQkJfSBlbHNlCQkvKiBubyAqLwotCQkJCWFzc2VydChzcCA9PSByZXN0KTsKLQkJCXNwID0gcmVzdDsKLQkJCWJyZWFrOwotCQljYXNlIE9QTFVTXzoKLQkJCXN0cCA9IHN0b3A7Ci0JCQlmb3IgKDs7KSB7Ci0JCQkJLyogaG93IGxvbmcgY291bGQgdGhpcyBvbmUgYmU/ICovCi0JCQkJcmVzdCA9IHNsb3cobSwgc3AsIHN0cCwgc3MsIGVzKTsKLQkJCQlhc3NlcnQocmVzdCAhPSBOVUxMKTsJLyogaXQgZGlkIG1hdGNoICovCi0JCQkJLyogY291bGQgdGhlIHJlc3QgbWF0Y2ggdGhlIHJlc3Q/ICovCi0JCQkJdGFpbCA9IHNsb3cobSwgcmVzdCwgc3RvcCwgZXMsIHN0b3BzdCk7Ci0JCQkJaWYgKHRhaWwgPT0gc3RvcCkKLQkJCQkJYnJlYWs7CQkvKiB5ZXMhICovCi0JCQkJLyogbm8gLS0gdHJ5IGEgc2hvcnRlciBtYXRjaCBmb3IgdGhpcyBvbmUgKi8KLQkJCQlzdHAgPSByZXN0IC0gMTsKLQkJCQlhc3NlcnQoc3RwID49IHNwKTsJLyogaXQgZGlkIHdvcmsgKi8KLQkJCX0KLQkJCXNzdWIgPSBzcyArIDE7Ci0JCQllc3ViID0gZXMgLSAxOwotCQkJc3NwID0gc3A7Ci0JCQlvbGRzc3AgPSBzc3A7Ci0JCQlmb3IgKDs7KSB7CS8qIGZpbmQgbGFzdCBtYXRjaCBvZiBpbm5hcmRzICovCi0JCQkJc2VwID0gc2xvdyhtLCBzc3AsIHJlc3QsIHNzdWIsIGVzdWIpOwotCQkJCWlmIChzZXAgPT0gTlVMTCB8fCBzZXAgPT0gc3NwKQotCQkJCQlicmVhazsJLyogZmFpbGVkIG9yIG1hdGNoZWQgbnVsbCAqLwotCQkJCW9sZHNzcCA9IHNzcDsJLyogb24gdG8gbmV4dCB0cnkgKi8KLQkJCQlzc3AgPSBzZXA7Ci0JCQl9Ci0JCQlpZiAoc2VwID09IE5VTEwpIHsKLQkJCQkvKiBsYXN0IHN1Y2Nlc3NmdWwgbWF0Y2ggKi8KLQkJCQlzZXAgPSBzc3A7Ci0JCQkJc3NwID0gb2xkc3NwOwotCQkJfQotCQkJYXNzZXJ0KHNlcCA9PSByZXN0KTsJLyogbXVzdCBleGhhdXN0IHN1YnN0cmluZyAqLwotCQkJYXNzZXJ0KHNsb3cobSwgc3NwLCBzZXAsIHNzdWIsIGVzdWIpID09IHJlc3QpOwotCQkJZHAgPSBkaXNzZWN0KG0sIHNzcCwgc2VwLCBzc3ViLCBlc3ViKTsKLQkJCWFzc2VydChkcCA9PSBzZXApOwotCQkJc3AgPSByZXN0OwotCQkJYnJlYWs7Ci0JCWNhc2UgT0NIXzoKLQkJCXN0cCA9IHN0b3A7Ci0JCQlmb3IgKDs7KSB7Ci0JCQkJLyogaG93IGxvbmcgY291bGQgdGhpcyBvbmUgYmU/ICovCi0JCQkJcmVzdCA9IHNsb3cobSwgc3AsIHN0cCwgc3MsIGVzKTsKLQkJCQlhc3NlcnQocmVzdCAhPSBOVUxMKTsJLyogaXQgZGlkIG1hdGNoICovCi0JCQkJLyogY291bGQgdGhlIHJlc3QgbWF0Y2ggdGhlIHJlc3Q/ICovCi0JCQkJdGFpbCA9IHNsb3cobSwgcmVzdCwgc3RvcCwgZXMsIHN0b3BzdCk7Ci0JCQkJaWYgKHRhaWwgPT0gc3RvcCkKLQkJCQkJYnJlYWs7CQkvKiB5ZXMhICovCi0JCQkJLyogbm8gLS0gdHJ5IGEgc2hvcnRlciBtYXRjaCBmb3IgdGhpcyBvbmUgKi8KLQkJCQlzdHAgPSByZXN0IC0gMTsKLQkJCQlhc3NlcnQoc3RwID49IHNwKTsJLyogaXQgZGlkIHdvcmsgKi8KLQkJCX0KLQkJCXNzdWIgPSBzcyArIDE7Ci0JCQllc3ViID0gc3MgKyBPUE5EKG0tPmctPnN0cmlwW3NzXSkgLSAxOwotCQkJYXNzZXJ0KE9QKG0tPmctPnN0cmlwW2VzdWJdKSA9PSBPT1IxKTsKLQkJCWZvciAoOzspIHsJLyogZmluZCBmaXJzdCBtYXRjaGluZyBicmFuY2ggKi8KLQkJCQlpZiAoc2xvdyhtLCBzcCwgcmVzdCwgc3N1YiwgZXN1YikgPT0gcmVzdCkKLQkJCQkJYnJlYWs7CS8qIGl0IG1hdGNoZWQgYWxsIG9mIGl0ICovCi0JCQkJLyogdGhhdCBvbmUgbWlzc2VkLCB0cnkgbmV4dCBvbmUgKi8KLQkJCQlhc3NlcnQoT1AobS0+Zy0+c3RyaXBbZXN1Yl0pID09IE9PUjEpOwotCQkJCWVzdWIrKzsKLQkJCQlhc3NlcnQoT1AobS0+Zy0+c3RyaXBbZXN1Yl0pID09IE9PUjIpOwotCQkJCXNzdWIgPSBlc3ViICsgMTsKLQkJCQllc3ViICs9IE9QTkQobS0+Zy0+c3RyaXBbZXN1Yl0pOwotCQkJCWlmIChPUChtLT5nLT5zdHJpcFtlc3ViXSkgPT0gT09SMikKLQkJCQkJZXN1Yi0tOwotCQkJCWVsc2UKLQkJCQkJYXNzZXJ0KE9QKG0tPmctPnN0cmlwW2VzdWJdKSA9PSBPX0NIKTsKLQkJCX0KLQkJCWRwID0gZGlzc2VjdChtLCBzcCwgcmVzdCwgc3N1YiwgZXN1Yik7Ci0JCQlhc3NlcnQoZHAgPT0gcmVzdCk7Ci0JCQlzcCA9IHJlc3Q7Ci0JCQlicmVhazsKLQkJY2FzZSBPX1BMVVM6Ci0JCWNhc2UgT19RVUVTVDoKLQkJY2FzZSBPT1IxOgotCQljYXNlIE9PUjI6Ci0JCWNhc2UgT19DSDoKLQkJCWFzc2VydChub3BlKTsKLQkJCWJyZWFrOwotCQljYXNlIE9MUEFSRU46Ci0JCQlpID0gT1BORChtLT5nLT5zdHJpcFtzc10pOwotCQkJYXNzZXJ0KDAgPCBpICYmIGkgPD0gbS0+Zy0+bnN1Yik7Ci0JCQltLT5wbWF0Y2hbaV0ucm1fc28gPSBzcCAtIG0tPm9mZnA7Ci0JCQlicmVhazsKLQkJY2FzZSBPUlBBUkVOOgotCQkJaSA9IE9QTkQobS0+Zy0+c3RyaXBbc3NdKTsKLQkJCWFzc2VydCgwIDwgaSAmJiBpIDw9IG0tPmctPm5zdWIpOwotCQkJbS0+cG1hdGNoW2ldLnJtX2VvID0gc3AgLSBtLT5vZmZwOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6CQkvKiB1aCBvaCAqLwotCQkJYXNzZXJ0KG5vcGUpOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLQlhc3NlcnQoc3AgPT0gc3RvcCk7Ci0JcmV0dXJuKHNwKTsKLX0KLQotLyoKLSAtIGJhY2tyZWYgLSBmaWd1cmUgb3V0IHdoYXQgbWF0Y2hlZCB3aGF0LCBmaWd1cmluZyBpbiBiYWNrIHJlZmVyZW5jZXMKLSAqLwotc3RhdGljIGNoYXIgKgkJCS8qID09IHN0b3AgKHN1Y2Nlc3MpIG9yIE5VTEwgKGZhaWx1cmUpICovCi1iYWNrcmVmKHN0cnVjdCBtYXRjaCAqbSwgY2hhciAqc3RhcnQsIGNoYXIgKnN0b3AsIHNvcG5vIHN0YXJ0c3QsIHNvcG5vIHN0b3BzdCwKLSAgICBzb3BubyBsZXYsIGludCByZWMpCQkJLyogUExVUyBuZXN0aW5nIGxldmVsICovCi17Ci0JaW50IGk7Ci0Jc29wbm8gc3M7CS8qIHN0YXJ0IHNvcCBvZiBjdXJyZW50IHN1YlJFICovCi0JY2hhciAqc3A7CS8qIHN0YXJ0IG9mIHN0cmluZyBtYXRjaGVkIGJ5IGl0ICovCi0Jc29wbm8gc3N1YjsJLyogc3RhcnQgc29wIG9mIHN1YnN1YlJFICovCi0Jc29wbm8gZXN1YjsJLyogZW5kIHNvcCBvZiBzdWJzdWJSRSAqLwotCWNoYXIgKnNzcDsJLyogc3RhcnQgb2Ygc3RyaW5nIG1hdGNoZWQgYnkgc3Vic3ViUkUgKi8KLQljaGFyICpkcDsKLQlzaXplX3QgbGVuOwotCWludCBoYXJkOwotCXNvcCBzOwotCXJlZ29mZl90IG9mZnNhdmU7Ci0JY3NldCAqY3M7Ci0KLQlBVCgiYmFjayIsIHN0YXJ0LCBzdG9wLCBzdGFydHN0LCBzdG9wc3QpOwotCXNwID0gc3RhcnQ7Ci0KLQkvKiBnZXQgYXMgZmFyIGFzIHdlIGNhbiB3aXRoIGVhc3kgc3R1ZmYgKi8KLQloYXJkID0gMDsKLQlmb3IgKHNzID0gc3RhcnRzdDsgIWhhcmQgJiYgc3MgPCBzdG9wc3Q7IHNzKyspCi0JCXN3aXRjaCAoT1AocyA9IG0tPmctPnN0cmlwW3NzXSkpIHsKLQkJY2FzZSBPQ0hBUjoKLQkJCWlmIChzcCA9PSBzdG9wIHx8ICpzcCsrICE9IChjaGFyKU9QTkQocykpCi0JCQkJcmV0dXJuKE5VTEwpOwotCQkJYnJlYWs7Ci0JCWNhc2UgT0FOWToKLQkJCWlmIChzcCA9PSBzdG9wKQotCQkJCXJldHVybihOVUxMKTsKLQkJCXNwKys7Ci0JCQlicmVhazsKLQkJY2FzZSBPQU5ZT0Y6Ci0JCQljcyA9ICZtLT5nLT5zZXRzW09QTkQocyldOwotCQkJaWYgKHNwID09IHN0b3AgfHwgIUNISU4oY3MsICpzcCsrKSkKLQkJCQlyZXR1cm4oTlVMTCk7Ci0JCQlicmVhazsKLQkJY2FzZSBPQk9MOgotCQkJaWYgKCAoc3AgPT0gbS0+YmVnaW5wICYmICEobS0+ZWZsYWdzJlJFR19OT1RCT0wpKSB8fAotCQkJCQkoc3AgPCBtLT5lbmRwICYmICooc3AtMSkgPT0gJ1xuJyAmJgotCQkJCQkJKG0tPmctPmNmbGFncyZSRUdfTkVXTElORSkpICkKLQkJCQl7IC8qIHllcyAqLyB9Ci0JCQllbHNlCi0JCQkJcmV0dXJuKE5VTEwpOwotCQkJYnJlYWs7Ci0JCWNhc2UgT0VPTDoKLQkJCWlmICggKHNwID09IG0tPmVuZHAgJiYgIShtLT5lZmxhZ3MmUkVHX05PVEVPTCkpIHx8Ci0JCQkJCShzcCA8IG0tPmVuZHAgJiYgKnNwID09ICdcbicgJiYKLQkJCQkJCShtLT5nLT5jZmxhZ3MmUkVHX05FV0xJTkUpKSApCi0JCQkJeyAvKiB5ZXMgKi8gfQotCQkJZWxzZQotCQkJCXJldHVybihOVUxMKTsKLQkJCWJyZWFrOwotCQljYXNlIE9CT1c6Ci0JCQlpZiAoKCAoc3AgPT0gbS0+YmVnaW5wICYmICEobS0+ZWZsYWdzJlJFR19OT1RCT0wpKSB8fAotCQkJCQkoc3AgPCBtLT5lbmRwICYmICooc3AtMSkgPT0gJ1xuJyAmJgotCQkJCQkJKG0tPmctPmNmbGFncyZSRUdfTkVXTElORSkpIHx8Ci0JCQkJCShzcCA+IG0tPmJlZ2lucCAmJgotCQkJCQkJCSFJU1dPUkQoKihzcC0xKSkpICkgJiYKLQkJCQkJKHNwIDwgbS0+ZW5kcCAmJiBJU1dPUkQoKnNwKSkgKQotCQkJCXsgLyogeWVzICovIH0KLQkJCWVsc2UKLQkJCQlyZXR1cm4oTlVMTCk7Ci0JCQlicmVhazsKLQkJY2FzZSBPRU9XOgotCQkJaWYgKCggKHNwID09IG0tPmVuZHAgJiYgIShtLT5lZmxhZ3MmUkVHX05PVEVPTCkpIHx8Ci0JCQkJCShzcCA8IG0tPmVuZHAgJiYgKnNwID09ICdcbicgJiYKLQkJCQkJCShtLT5nLT5jZmxhZ3MmUkVHX05FV0xJTkUpKSB8fAotCQkJCQkoc3AgPCBtLT5lbmRwICYmICFJU1dPUkQoKnNwKSkgKSAmJgotCQkJCQkoc3AgPiBtLT5iZWdpbnAgJiYgSVNXT1JEKCooc3AtMSkpKSApCi0JCQkJeyAvKiB5ZXMgKi8gfQotCQkJZWxzZQotCQkJCXJldHVybihOVUxMKTsKLQkJCWJyZWFrOwotCQljYXNlIE9fUVVFU1Q6Ci0JCQlicmVhazsKLQkJY2FzZSBPT1IxOgkvKiBtYXRjaGVzIG51bGwgYnV0IG5lZWRzIHRvIHNraXAgKi8KLQkJCXNzKys7Ci0JCQlzID0gbS0+Zy0+c3RyaXBbc3NdOwotCQkJZG8gewotCQkJCWFzc2VydChPUChzKSA9PSBPT1IyKTsKLQkJCQlzcyArPSBPUE5EKHMpOwotCQkJfSB3aGlsZSAoT1AocyA9IG0tPmctPnN0cmlwW3NzXSkgIT0gT19DSCk7Ci0JCQkvKiBub3RlIHRoYXQgdGhlIHNzKysgZ2V0cyB1cyBwYXN0IHRoZSBPX0NIICovCi0JCQlicmVhazsKLQkJZGVmYXVsdDoJLyogaGF2ZSB0byBtYWtlIGEgY2hvaWNlICovCi0JCQloYXJkID0gMTsKLQkJCWJyZWFrOwotCQl9Ci0JaWYgKCFoYXJkKSB7CQkvKiB0aGF0IHdhcyBpdCEgKi8KLQkJaWYgKHNwICE9IHN0b3ApCi0JCQlyZXR1cm4oTlVMTCk7Ci0JCXJldHVybihzcCk7Ci0JfQotCXNzLS07CQkJLyogYWRqdXN0IGZvciB0aGUgZm9yJ3MgZmluYWwgaW5jcmVtZW50ICovCi0KLQkvKiB0aGUgaGFyZCBzdHVmZiAqLwotCUFUKCJoYXJkIiwgc3AsIHN0b3AsIHNzLCBzdG9wc3QpOwotCXMgPSBtLT5nLT5zdHJpcFtzc107Ci0Jc3dpdGNoIChPUChzKSkgewotCWNhc2UgT0JBQ0tfOgkJLyogdGhlIHZpbGVzdCBkZXB0aHMgKi8KLQkJaSA9IE9QTkQocyk7Ci0JCWFzc2VydCgwIDwgaSAmJiBpIDw9IG0tPmctPm5zdWIpOwotCQlpZiAobS0+cG1hdGNoW2ldLnJtX2VvID09IC0xKQotCQkJcmV0dXJuKE5VTEwpOwotCQlhc3NlcnQobS0+cG1hdGNoW2ldLnJtX3NvICE9IC0xKTsKLQkJbGVuID0gbS0+cG1hdGNoW2ldLnJtX2VvIC0gbS0+cG1hdGNoW2ldLnJtX3NvOwotCQlpZiAobGVuID09IDAgJiYgcmVjKysgPiBNQVhfUkVDVVJTSU9OKQotCQkJcmV0dXJuKE5VTEwpOwotCQlhc3NlcnQoc3RvcCAtIG0tPmJlZ2lucCA+PSBsZW4pOwotCQlpZiAoc3AgPiBzdG9wIC0gbGVuKQotCQkJcmV0dXJuKE5VTEwpOwkvKiBub3QgZW5vdWdoIGxlZnQgdG8gbWF0Y2ggKi8KLQkJc3NwID0gbS0+b2ZmcCArIG0tPnBtYXRjaFtpXS5ybV9zbzsKLQkJaWYgKG1lbWNtcChzcCwgc3NwLCBsZW4pICE9IDApCi0JCQlyZXR1cm4oTlVMTCk7Ci0JCXdoaWxlIChtLT5nLT5zdHJpcFtzc10gIT0gU09QKE9fQkFDSywgaSkpCi0JCQlzcysrOwotCQlyZXR1cm4oYmFja3JlZihtLCBzcCtsZW4sIHN0b3AsIHNzKzEsIHN0b3BzdCwgbGV2LCByZWMpKTsKLQkJYnJlYWs7Ci0JY2FzZSBPUVVFU1RfOgkJLyogdG8gbnVsbCBvciBub3QgKi8KLQkJZHAgPSBiYWNrcmVmKG0sIHNwLCBzdG9wLCBzcysxLCBzdG9wc3QsIGxldiwgcmVjKTsKLQkJaWYgKGRwICE9IE5VTEwpCi0JCQlyZXR1cm4oZHApOwkvKiBub3QgKi8KLQkJcmV0dXJuKGJhY2tyZWYobSwgc3AsIHN0b3AsIHNzK09QTkQocykrMSwgc3RvcHN0LCBsZXYsIHJlYykpOwotCQlicmVhazsKLQljYXNlIE9QTFVTXzoKLQkJYXNzZXJ0KG0tPmxhc3Rwb3MgIT0gTlVMTCk7Ci0JCWFzc2VydChsZXYrMSA8PSBtLT5nLT5ucGx1cyk7Ci0JCW0tPmxhc3Rwb3NbbGV2KzFdID0gc3A7Ci0JCXJldHVybihiYWNrcmVmKG0sIHNwLCBzdG9wLCBzcysxLCBzdG9wc3QsIGxldisxLCByZWMpKTsKLQkJYnJlYWs7Ci0JY2FzZSBPX1BMVVM6Ci0JCWlmIChzcCA9PSBtLT5sYXN0cG9zW2xldl0pCS8qIGxhc3QgcGFzcyBtYXRjaGVkIG51bGwgKi8KLQkJCXJldHVybihiYWNrcmVmKG0sIHNwLCBzdG9wLCBzcysxLCBzdG9wc3QsIGxldi0xLCByZWMpKTsKLQkJLyogdHJ5IGFub3RoZXIgcGFzcyAqLwotCQltLT5sYXN0cG9zW2xldl0gPSBzcDsKLQkJZHAgPSBiYWNrcmVmKG0sIHNwLCBzdG9wLCBzcy1PUE5EKHMpKzEsIHN0b3BzdCwgbGV2LCByZWMpOwotCQlpZiAoZHAgPT0gTlVMTCkKLQkJCXJldHVybihiYWNrcmVmKG0sIHNwLCBzdG9wLCBzcysxLCBzdG9wc3QsIGxldi0xLCByZWMpKTsKLQkJZWxzZQotCQkJcmV0dXJuKGRwKTsKLQkJYnJlYWs7Ci0JY2FzZSBPQ0hfOgkJLyogZmluZCB0aGUgcmlnaHQgb25lLCBpZiBhbnkgKi8KLQkJc3N1YiA9IHNzICsgMTsKLQkJZXN1YiA9IHNzICsgT1BORChzKSAtIDE7Ci0JCWFzc2VydChPUChtLT5nLT5zdHJpcFtlc3ViXSkgPT0gT09SMSk7Ci0JCWZvciAoOzspIHsJLyogZmluZCBmaXJzdCBtYXRjaGluZyBicmFuY2ggKi8KLQkJCWRwID0gYmFja3JlZihtLCBzcCwgc3RvcCwgc3N1YiwgZXN1YiwgbGV2LCByZWMpOwotCQkJaWYgKGRwICE9IE5VTEwpCi0JCQkJcmV0dXJuKGRwKTsKLQkJCS8qIHRoYXQgb25lIG1pc3NlZCwgdHJ5IG5leHQgb25lICovCi0JCQlpZiAoT1AobS0+Zy0+c3RyaXBbZXN1Yl0pID09IE9fQ0gpCi0JCQkJcmV0dXJuKE5VTEwpOwkvKiB0aGVyZSBpcyBub25lICovCi0JCQllc3ViKys7Ci0JCQlhc3NlcnQoT1AobS0+Zy0+c3RyaXBbZXN1Yl0pID09IE9PUjIpOwotCQkJc3N1YiA9IGVzdWIgKyAxOwotCQkJZXN1YiArPSBPUE5EKG0tPmctPnN0cmlwW2VzdWJdKTsKLQkJCWlmIChPUChtLT5nLT5zdHJpcFtlc3ViXSkgPT0gT09SMikKLQkJCQllc3ViLS07Ci0JCQllbHNlCi0JCQkJYXNzZXJ0KE9QKG0tPmctPnN0cmlwW2VzdWJdKSA9PSBPX0NIKTsKLQkJfQotCQlicmVhazsKLQljYXNlIE9MUEFSRU46CQkvKiBtdXN0IHVuZG8gYXNzaWdubWVudCBpZiByZXN0IGZhaWxzICovCi0JCWkgPSBPUE5EKHMpOwotCQlhc3NlcnQoMCA8IGkgJiYgaSA8PSBtLT5nLT5uc3ViKTsKLQkJb2Zmc2F2ZSA9IG0tPnBtYXRjaFtpXS5ybV9zbzsKLQkJbS0+cG1hdGNoW2ldLnJtX3NvID0gc3AgLSBtLT5vZmZwOwotCQlkcCA9IGJhY2tyZWYobSwgc3AsIHN0b3AsIHNzKzEsIHN0b3BzdCwgbGV2LCByZWMpOwotCQlpZiAoZHAgIT0gTlVMTCkKLQkJCXJldHVybihkcCk7Ci0JCW0tPnBtYXRjaFtpXS5ybV9zbyA9IG9mZnNhdmU7Ci0JCXJldHVybihOVUxMKTsKLQkJYnJlYWs7Ci0JY2FzZSBPUlBBUkVOOgkJLyogbXVzdCB1bmRvIGFzc2lnbm1lbnQgaWYgcmVzdCBmYWlscyAqLwotCQlpID0gT1BORChzKTsKLQkJYXNzZXJ0KDAgPCBpICYmIGkgPD0gbS0+Zy0+bnN1Yik7Ci0JCW9mZnNhdmUgPSBtLT5wbWF0Y2hbaV0ucm1fZW87Ci0JCW0tPnBtYXRjaFtpXS5ybV9lbyA9IHNwIC0gbS0+b2ZmcDsKLQkJZHAgPSBiYWNrcmVmKG0sIHNwLCBzdG9wLCBzcysxLCBzdG9wc3QsIGxldiwgcmVjKTsKLQkJaWYgKGRwICE9IE5VTEwpCi0JCQlyZXR1cm4oZHApOwotCQltLT5wbWF0Y2hbaV0ucm1fZW8gPSBvZmZzYXZlOwotCQlyZXR1cm4oTlVMTCk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6CQkvKiB1aCBvaCAqLwotCQlhc3NlcnQobm9wZSk7Ci0JCWJyZWFrOwotCX0KLQotCS8qICJjYW4ndCBoYXBwZW4iICovCi0JYXNzZXJ0KG5vcGUpOwotCS8qIE5PVFJFQUNIRUQgKi8KLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAtIGZhc3QgLSBzdGVwIHRocm91Z2ggdGhlIHN0cmluZyBhdCB0b3Agc3BlZWQKLSAqLwotc3RhdGljIGNoYXIgKgkJCS8qIHdoZXJlIHRlbnRhdGl2ZSBtYXRjaCBlbmRlZCwgb3IgTlVMTCAqLwotZmFzdChzdHJ1Y3QgbWF0Y2ggKm0sIGNoYXIgKnN0YXJ0LCBjaGFyICpzdG9wLCBzb3BubyBzdGFydHN0LCBzb3BubyBzdG9wc3QpCi17Ci0Jc3RhdGVzIHN0ID0gbS0+c3Q7Ci0Jc3RhdGVzIGZyZXNoID0gbS0+ZnJlc2g7Ci0Jc3RhdGVzIHRtcCA9IG0tPnRtcDsKLQljaGFyICpwID0gc3RhcnQ7Ci0JaW50IGMgPSAoc3RhcnQgPT0gbS0+YmVnaW5wKSA/IE9VVCA6ICooc3RhcnQtMSk7Ci0JaW50IGxhc3RjOwkvKiBwcmV2aW91cyBjICovCi0JaW50IGZsYWdjaDsKLQlpbnQgaTsKLQljaGFyICpjb2xkcDsJLyogbGFzdCBwIGFmdGVyIHdoaWNoIG5vIG1hdGNoIHdhcyB1bmRlcndheSAqLwotCi0JQ0xFQVIoc3QpOwotCVNFVDEoc3QsIHN0YXJ0c3QpOwotCXN0ID0gc3RlcChtLT5nLCBzdGFydHN0LCBzdG9wc3QsIHN0LCBOT1RISU5HLCBzdCk7Ci0JQVNTSUdOKGZyZXNoLCBzdCk7Ci0JU1AoInN0YXJ0Iiwgc3QsICpwKTsKLQljb2xkcCA9IE5VTEw7Ci0JZm9yICg7OykgewotCQkvKiBuZXh0IGNoYXJhY3RlciAqLwotCQlsYXN0YyA9IGM7Ci0JCWMgPSAocCA9PSBtLT5lbmRwKSA/IE9VVCA6ICpwOwotCQlpZiAoRVEoc3QsIGZyZXNoKSkKLQkJCWNvbGRwID0gcDsKLQotCQkvKiBpcyB0aGVyZSBhbiBFT0wgYW5kL29yIEJPTCBiZXR3ZWVuIGxhc3RjIGFuZCBjPyAqLwotCQlmbGFnY2ggPSAnXDAnOwotCQlpID0gMDsKLQkJaWYgKCAobGFzdGMgPT0gJ1xuJyAmJiBtLT5nLT5jZmxhZ3MmUkVHX05FV0xJTkUpIHx8Ci0JCQkJKGxhc3RjID09IE9VVCAmJiAhKG0tPmVmbGFncyZSRUdfTk9UQk9MKSkgKSB7Ci0JCQlmbGFnY2ggPSBCT0w7Ci0JCQlpID0gbS0+Zy0+bmJvbDsKLQkJfQotCQlpZiAoIChjID09ICdcbicgJiYgbS0+Zy0+Y2ZsYWdzJlJFR19ORVdMSU5FKSB8fAotCQkJCShjID09IE9VVCAmJiAhKG0tPmVmbGFncyZSRUdfTk9URU9MKSkgKSB7Ci0JCQlmbGFnY2ggPSAoZmxhZ2NoID09IEJPTCkgPyBCT0xFT0wgOiBFT0w7Ci0JCQlpICs9IG0tPmctPm5lb2w7Ci0JCX0KLQkJaWYgKGkgIT0gMCkgewotCQkJZm9yICg7IGkgPiAwOyBpLS0pCi0JCQkJc3QgPSBzdGVwKG0tPmcsIHN0YXJ0c3QsIHN0b3BzdCwgc3QsIGZsYWdjaCwgc3QpOwotCQkJU1AoImJvbGVvbCIsIHN0LCBjKTsKLQkJfQotCi0JCS8qIGhvdyBhYm91dCBhIHdvcmQgYm91bmRhcnk/ICovCi0JCWlmICggKGZsYWdjaCA9PSBCT0wgfHwgKGxhc3RjICE9IE9VVCAmJiAhSVNXT1JEKGxhc3RjKSkpICYmCi0JCQkJCShjICE9IE9VVCAmJiBJU1dPUkQoYykpICkgewotCQkJZmxhZ2NoID0gQk9XOwotCQl9Ci0JCWlmICggKGxhc3RjICE9IE9VVCAmJiBJU1dPUkQobGFzdGMpKSAmJgotCQkJCShmbGFnY2ggPT0gRU9MIHx8IChjICE9IE9VVCAmJiAhSVNXT1JEKGMpKSkgKSB7Ci0JCQlmbGFnY2ggPSBFT1c7Ci0JCX0KLQkJaWYgKGZsYWdjaCA9PSBCT1cgfHwgZmxhZ2NoID09IEVPVykgewotCQkJc3QgPSBzdGVwKG0tPmcsIHN0YXJ0c3QsIHN0b3BzdCwgc3QsIGZsYWdjaCwgc3QpOwotCQkJU1AoImJvd2VvdyIsIHN0LCBjKTsKLQkJfQotCi0JCS8qIGFyZSB3ZSBkb25lPyAqLwotCQlpZiAoSVNTRVQoc3QsIHN0b3BzdCkgfHwgcCA9PSBzdG9wKQotCQkJYnJlYWs7CQkvKiBOT1RFIEJSRUFLIE9VVCAqLwotCi0JCS8qIG5vLCB3ZSBtdXN0IGRlYWwgd2l0aCB0aGlzIGNoYXJhY3RlciAqLwotCQlBU1NJR04odG1wLCBzdCk7Ci0JCUFTU0lHTihzdCwgZnJlc2gpOwotCQlhc3NlcnQoYyAhPSBPVVQpOwotCQlzdCA9IHN0ZXAobS0+Zywgc3RhcnRzdCwgc3RvcHN0LCB0bXAsIGMsIHN0KTsKLQkJU1AoImFmdCIsIHN0LCBjKTsKLQkJYXNzZXJ0KEVRKHN0ZXAobS0+Zywgc3RhcnRzdCwgc3RvcHN0LCBzdCwgTk9USElORywgc3QpLCBzdCkpOwotCQlwKys7Ci0JfQotCi0JYXNzZXJ0KGNvbGRwICE9IE5VTEwpOwotCW0tPmNvbGRwID0gY29sZHA7Ci0JaWYgKElTU0VUKHN0LCBzdG9wc3QpKQotCQlyZXR1cm4ocCsxKTsKLQllbHNlCi0JCXJldHVybihOVUxMKTsKLX0KLQotLyoKLSAtIHNsb3cgLSBzdGVwIHRocm91Z2ggdGhlIHN0cmluZyBtb3JlIGRlbGliZXJhdGVseQotICovCi1zdGF0aWMgY2hhciAqCQkJLyogd2hlcmUgaXQgZW5kZWQgKi8KLXNsb3coc3RydWN0IG1hdGNoICptLCBjaGFyICpzdGFydCwgY2hhciAqc3RvcCwgc29wbm8gc3RhcnRzdCwgc29wbm8gc3RvcHN0KQotewotCXN0YXRlcyBzdCA9IG0tPnN0OwotCXN0YXRlcyBlbXB0eSA9IG0tPmVtcHR5OwotCXN0YXRlcyB0bXAgPSBtLT50bXA7Ci0JY2hhciAqcCA9IHN0YXJ0OwotCWludCBjID0gKHN0YXJ0ID09IG0tPmJlZ2lucCkgPyBPVVQgOiAqKHN0YXJ0LTEpOwotCWludCBsYXN0YzsJLyogcHJldmlvdXMgYyAqLwotCWludCBmbGFnY2g7Ci0JaW50IGk7Ci0JY2hhciAqbWF0Y2hwOwkvKiBsYXN0IHAgYXQgd2hpY2ggYSBtYXRjaCBlbmRlZCAqLwotCi0JQVQoInNsb3ciLCBzdGFydCwgc3RvcCwgc3RhcnRzdCwgc3RvcHN0KTsKLQlDTEVBUihzdCk7Ci0JU0VUMShzdCwgc3RhcnRzdCk7Ci0JU1AoInNzdGFydCIsIHN0LCAqcCk7Ci0Jc3QgPSBzdGVwKG0tPmcsIHN0YXJ0c3QsIHN0b3BzdCwgc3QsIE5PVEhJTkcsIHN0KTsKLQltYXRjaHAgPSBOVUxMOwotCWZvciAoOzspIHsKLQkJLyogbmV4dCBjaGFyYWN0ZXIgKi8KLQkJbGFzdGMgPSBjOwotCQljID0gKHAgPT0gbS0+ZW5kcCkgPyBPVVQgOiAqcDsKLQotCQkvKiBpcyB0aGVyZSBhbiBFT0wgYW5kL29yIEJPTCBiZXR3ZWVuIGxhc3RjIGFuZCBjPyAqLwotCQlmbGFnY2ggPSAnXDAnOwotCQlpID0gMDsKLQkJaWYgKCAobGFzdGMgPT0gJ1xuJyAmJiBtLT5nLT5jZmxhZ3MmUkVHX05FV0xJTkUpIHx8Ci0JCQkJKGxhc3RjID09IE9VVCAmJiAhKG0tPmVmbGFncyZSRUdfTk9UQk9MKSkgKSB7Ci0JCQlmbGFnY2ggPSBCT0w7Ci0JCQlpID0gbS0+Zy0+bmJvbDsKLQkJfQotCQlpZiAoIChjID09ICdcbicgJiYgbS0+Zy0+Y2ZsYWdzJlJFR19ORVdMSU5FKSB8fAotCQkJCShjID09IE9VVCAmJiAhKG0tPmVmbGFncyZSRUdfTk9URU9MKSkgKSB7Ci0JCQlmbGFnY2ggPSAoZmxhZ2NoID09IEJPTCkgPyBCT0xFT0wgOiBFT0w7Ci0JCQlpICs9IG0tPmctPm5lb2w7Ci0JCX0KLQkJaWYgKGkgIT0gMCkgewotCQkJZm9yICg7IGkgPiAwOyBpLS0pCi0JCQkJc3QgPSBzdGVwKG0tPmcsIHN0YXJ0c3QsIHN0b3BzdCwgc3QsIGZsYWdjaCwgc3QpOwotCQkJU1AoInNib2xlb2wiLCBzdCwgYyk7Ci0JCX0KLQotCQkvKiBob3cgYWJvdXQgYSB3b3JkIGJvdW5kYXJ5PyAqLwotCQlpZiAoIChmbGFnY2ggPT0gQk9MIHx8IChsYXN0YyAhPSBPVVQgJiYgIUlTV09SRChsYXN0YykpKSAmJgotCQkJCQkoYyAhPSBPVVQgJiYgSVNXT1JEKGMpKSApIHsKLQkJCWZsYWdjaCA9IEJPVzsKLQkJfQotCQlpZiAoIChsYXN0YyAhPSBPVVQgJiYgSVNXT1JEKGxhc3RjKSkgJiYKLQkJCQkoZmxhZ2NoID09IEVPTCB8fCAoYyAhPSBPVVQgJiYgIUlTV09SRChjKSkpICkgewotCQkJZmxhZ2NoID0gRU9XOwotCQl9Ci0JCWlmIChmbGFnY2ggPT0gQk9XIHx8IGZsYWdjaCA9PSBFT1cpIHsKLQkJCXN0ID0gc3RlcChtLT5nLCBzdGFydHN0LCBzdG9wc3QsIHN0LCBmbGFnY2gsIHN0KTsKLQkJCVNQKCJzYm93ZW93Iiwgc3QsIGMpOwotCQl9Ci0KLQkJLyogYXJlIHdlIGRvbmU/ICovCi0JCWlmIChJU1NFVChzdCwgc3RvcHN0KSkKLQkJCW1hdGNocCA9IHA7Ci0JCWlmIChFUShzdCwgZW1wdHkpIHx8IHAgPT0gc3RvcCkKLQkJCWJyZWFrOwkJLyogTk9URSBCUkVBSyBPVVQgKi8KLQotCQkvKiBubywgd2UgbXVzdCBkZWFsIHdpdGggdGhpcyBjaGFyYWN0ZXIgKi8KLQkJQVNTSUdOKHRtcCwgc3QpOwotCQlBU1NJR04oc3QsIGVtcHR5KTsKLQkJYXNzZXJ0KGMgIT0gT1VUKTsKLQkJc3QgPSBzdGVwKG0tPmcsIHN0YXJ0c3QsIHN0b3BzdCwgdG1wLCBjLCBzdCk7Ci0JCVNQKCJzYWZ0Iiwgc3QsIGMpOwotCQlhc3NlcnQoRVEoc3RlcChtLT5nLCBzdGFydHN0LCBzdG9wc3QsIHN0LCBOT1RISU5HLCBzdCksIHN0KSk7Ci0JCXArKzsKLQl9Ci0KLQlyZXR1cm4obWF0Y2hwKTsKLX0KLQotCi0vKgotIC0gc3RlcCAtIG1hcCBzZXQgb2Ygc3RhdGVzIHJlYWNoYWJsZSBiZWZvcmUgY2hhciB0byBzZXQgcmVhY2hhYmxlIGFmdGVyCi0gKi8KLXN0YXRpYyBzdGF0ZXMKLXN0ZXAoc3RydWN0IHJlX2d1dHMgKmcsCi0gICAgc29wbm8gc3RhcnQsCQkvKiBzdGFydCBzdGF0ZSB3aXRoaW4gc3RyaXAgKi8KLSAgICBzb3BubyBzdG9wLAkJCS8qIHN0YXRlIGFmdGVyIHN0b3Agc3RhdGUgd2l0aGluIHN0cmlwICovCi0gICAgc3RhdGVzIGJlZiwJCQkvKiBzdGF0ZXMgcmVhY2hhYmxlIGJlZm9yZSAqLwotICAgIGludCBjaCwJCQkvKiBjaGFyYWN0ZXIgb3IgTk9OQ0hBUiBjb2RlICovCi0gICAgc3RhdGVzIGFmdCkJCQkvKiBzdGF0ZXMgYWxyZWFkeSBrbm93biByZWFjaGFibGUgYWZ0ZXIgKi8KLXsKLQljc2V0ICpjczsKLQlzb3AgczsKLQlzb3BubyBwYzsKLQlvbmVzdGF0ZSBoZXJlOwkJLyogbm90ZSwgbWFjcm9zIGtub3cgdGhpcyBuYW1lICovCi0Jc29wbm8gbG9vazsKLQlpbnQgaTsKLQotCWZvciAocGMgPSBzdGFydCwgSU5JVChoZXJlLCBwYyk7IHBjICE9IHN0b3A7IHBjKyssIElOQyhoZXJlKSkgewotCQlzID0gZy0+c3RyaXBbcGNdOwotCQlzd2l0Y2ggKE9QKHMpKSB7Ci0JCWNhc2UgT0VORDoKLQkJCWFzc2VydChwYyA9PSBzdG9wLTEpOwotCQkJYnJlYWs7Ci0JCWNhc2UgT0NIQVI6Ci0JCQkvKiBvbmx5IGNoYXJhY3RlcnMgY2FuIG1hdGNoICovCi0JCQlhc3NlcnQoIU5PTkNIQVIoY2gpIHx8IGNoICE9IChjaGFyKU9QTkQocykpOwotCQkJaWYgKGNoID09IChjaGFyKU9QTkQocykpCi0JCQkJRldEKGFmdCwgYmVmLCAxKTsKLQkJCWJyZWFrOwotCQljYXNlIE9CT0w6Ci0JCQlpZiAoY2ggPT0gQk9MIHx8IGNoID09IEJPTEVPTCkKLQkJCQlGV0QoYWZ0LCBiZWYsIDEpOwotCQkJYnJlYWs7Ci0JCWNhc2UgT0VPTDoKLQkJCWlmIChjaCA9PSBFT0wgfHwgY2ggPT0gQk9MRU9MKQotCQkJCUZXRChhZnQsIGJlZiwgMSk7Ci0JCQlicmVhazsKLQkJY2FzZSBPQk9XOgotCQkJaWYgKGNoID09IEJPVykKLQkJCQlGV0QoYWZ0LCBiZWYsIDEpOwotCQkJYnJlYWs7Ci0JCWNhc2UgT0VPVzoKLQkJCWlmIChjaCA9PSBFT1cpCi0JCQkJRldEKGFmdCwgYmVmLCAxKTsKLQkJCWJyZWFrOwotCQljYXNlIE9BTlk6Ci0JCQlpZiAoIU5PTkNIQVIoY2gpKQotCQkJCUZXRChhZnQsIGJlZiwgMSk7Ci0JCQlicmVhazsKLQkJY2FzZSBPQU5ZT0Y6Ci0JCQljcyA9ICZnLT5zZXRzW09QTkQocyldOwotCQkJaWYgKCFOT05DSEFSKGNoKSAmJiBDSElOKGNzLCBjaCkpCi0JCQkJRldEKGFmdCwgYmVmLCAxKTsKLQkJCWJyZWFrOwotCQljYXNlIE9CQUNLXzoJCS8qIGlnbm9yZWQgaGVyZSAqLwotCQljYXNlIE9fQkFDSzoKLQkJCUZXRChhZnQsIGFmdCwgMSk7Ci0JCQlicmVhazsKLQkJY2FzZSBPUExVU186CQkvKiBmb3J3YXJkLCB0aGlzIGlzIGp1c3QgYW4gZW1wdHkgKi8KLQkJCUZXRChhZnQsIGFmdCwgMSk7Ci0JCQlicmVhazsKLQkJY2FzZSBPX1BMVVM6CQkvKiBib3RoIGZvcndhcmQgYW5kIGJhY2sgKi8KLQkJCUZXRChhZnQsIGFmdCwgMSk7Ci0JCQlpID0gSVNTRVRCQUNLKGFmdCwgT1BORChzKSk7Ci0JCQlCQUNLKGFmdCwgYWZ0LCBPUE5EKHMpKTsKLQkJCWlmICghaSAmJiBJU1NFVEJBQ0soYWZ0LCBPUE5EKHMpKSkgewotCQkJCS8qIG9obywgbXVzdCByZWNvbnNpZGVyIGxvb3AgYm9keSAqLwotCQkJCXBjIC09IE9QTkQocykgKyAxOwotCQkJCUlOSVQoaGVyZSwgcGMpOwotCQkJfQotCQkJYnJlYWs7Ci0JCWNhc2UgT1FVRVNUXzoJCS8qIHR3byBicmFuY2hlcywgYm90aCBmb3J3YXJkICovCi0JCQlGV0QoYWZ0LCBhZnQsIDEpOwotCQkJRldEKGFmdCwgYWZ0LCBPUE5EKHMpKTsKLQkJCWJyZWFrOwotCQljYXNlIE9fUVVFU1Q6CQkvKiBqdXN0IGFuIGVtcHR5ICovCi0JCQlGV0QoYWZ0LCBhZnQsIDEpOwotCQkJYnJlYWs7Ci0JCWNhc2UgT0xQQVJFTjoJCS8qIG5vdCBzaWduaWZpY2FudCBoZXJlICovCi0JCWNhc2UgT1JQQVJFTjoKLQkJCUZXRChhZnQsIGFmdCwgMSk7Ci0JCQlicmVhazsKLQkJY2FzZSBPQ0hfOgkJLyogbWFyayB0aGUgZmlyc3QgdHdvIGJyYW5jaGVzICovCi0JCQlGV0QoYWZ0LCBhZnQsIDEpOwotCQkJYXNzZXJ0KE9QKGctPnN0cmlwW3BjK09QTkQocyldKSA9PSBPT1IyKTsKLQkJCUZXRChhZnQsIGFmdCwgT1BORChzKSk7Ci0JCQlicmVhazsKLQkJY2FzZSBPT1IxOgkJLyogZG9uZSBhIGJyYW5jaCwgZmluZCB0aGUgT19DSCAqLwotCQkJaWYgKElTU1RBVEVJTihhZnQsIGhlcmUpKSB7Ci0JCQkJZm9yIChsb29rID0gMTsKLQkJCQkJCU9QKHMgPSBnLT5zdHJpcFtwYytsb29rXSkgIT0gT19DSDsKLQkJCQkJCWxvb2sgKz0gT1BORChzKSkKLQkJCQkJYXNzZXJ0KE9QKHMpID09IE9PUjIpOwotCQkJCUZXRChhZnQsIGFmdCwgbG9vayk7Ci0JCQl9Ci0JCQlicmVhazsKLQkJY2FzZSBPT1IyOgkJLyogcHJvcGFnYXRlIE9DSF8ncyBtYXJraW5nICovCi0JCQlGV0QoYWZ0LCBhZnQsIDEpOwotCQkJaWYgKE9QKGctPnN0cmlwW3BjK09QTkQocyldKSAhPSBPX0NIKSB7Ci0JCQkJYXNzZXJ0KE9QKGctPnN0cmlwW3BjK09QTkQocyldKSA9PSBPT1IyKTsKLQkJCQlGV0QoYWZ0LCBhZnQsIE9QTkQocykpOwotCQkJfQotCQkJYnJlYWs7Ci0JCWNhc2UgT19DSDoJCS8qIGp1c3QgZW1wdHkgKi8KLQkJCUZXRChhZnQsIGFmdCwgMSk7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoJCS8qIG9vb29vcHMuLi4gKi8KLQkJCWFzc2VydChub3BlKTsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCi0JcmV0dXJuKGFmdCk7Ci19Ci0KLSNpZmRlZiBSRURFQlVHCi0vKgotIC0gcHJpbnQgLSBwcmludCBhIHNldCBvZiBzdGF0ZXMKLSAqLwotc3RhdGljIHZvaWQKLXByaW50KHN0cnVjdCBtYXRjaCAqbSwgY2hhciAqY2FwdGlvbiwgc3RhdGVzIHN0LCBpbnQgY2gsIEZJTEUgKmQpCi17Ci0Jc3RydWN0IHJlX2d1dHMgKmcgPSBtLT5nOwotCWludCBpOwotCWludCBmaXJzdCA9IDE7Ci0KLQlpZiAoIShtLT5lZmxhZ3MmUkVHX1RSQUNFKSkKLQkJcmV0dXJuOwotCi0JKHZvaWQpZnByaW50ZihkLCAiJXMiLCBjYXB0aW9uKTsKLQlpZiAoY2ggIT0gJ1wwJykKLQkJKHZvaWQpZnByaW50ZihkLCAiICVzIiwgcGNoYXIoY2gpKTsKLQlmb3IgKGkgPSAwOyBpIDwgZy0+bnN0YXRlczsgaSsrKQotCQlpZiAoSVNTRVQoc3QsIGkpKSB7Ci0JCQkodm9pZClmcHJpbnRmKGQsICIlcyVkIiwgKGZpcnN0KSA/ICJcdCIgOiAiLCAiLCBpKTsKLQkJCWZpcnN0ID0gMDsKLQkJfQotCSh2b2lkKWZwcmludGYoZCwgIlxuIik7Ci19Ci0KLS8qIAotIC0gYXQgLSBwcmludCBjdXJyZW50IHNpdHVhdGlvbgotICovCi1zdGF0aWMgdm9pZAotYXQoc3RydWN0IG1hdGNoICptLCBjaGFyICp0aXRsZSwgY2hhciAqc3RhcnQsIGNoYXIgKnN0b3AsIHNvcG5vIHN0YXJ0c3QsCi0gICAgc29wbm8gc3RvcHN0KQotewotCWlmICghKG0tPmVmbGFncyZSRUdfVFJBQ0UpKQotCQlyZXR1cm47Ci0KLQkodm9pZClwcmludGYoIiVzICVzLSIsIHRpdGxlLCBwY2hhcigqc3RhcnQpKTsKLQkodm9pZClwcmludGYoIiVzICIsIHBjaGFyKCpzdG9wKSk7Ci0JKHZvaWQpcHJpbnRmKCIlbGQtJWxkXG4iLCAobG9uZylzdGFydHN0LCAobG9uZylzdG9wc3QpOwotfQotCi0jaWZuZGVmIFBDSEFSRE9ORQotI2RlZmluZQlQQ0hBUkRPTkUJLyogbmV2ZXIgYWdhaW4gKi8KLS8qCi0gLSBwY2hhciAtIG1ha2UgYSBjaGFyYWN0ZXIgcHJpbnRhYmxlCi0gKgotICogSXMgdGhpcyBpZGVudGljYWwgdG8gcmVnY2hhcigpIG92ZXIgaW4gZGVidWcuYz8gIFdlbGwsIHllcy4gIEJ1dCBhCi0gKiBkdXBsaWNhdGUgaGVyZSBhdm9pZHMgaGF2aW5nIGEgZGVidWdnaW5nLWNhcGFibGUgcmVnZXhlYy5vIHRpZWQgdG8KLSAqIGEgbWF0Y2hpbmcgZGVidWcubywgYW5kIHRoaXMgaXMgY29udmVuaWVudC4gIEl0IGFsbCBkaXNhcHBlYXJzIGluCi0gKiB0aGUgbm9uLWRlYnVnIGNvbXBpbGF0aW9uIGFueXdheSwgc28gaXQgZG9lc24ndCBtYXR0ZXIgbXVjaC4KLSAqLwotc3RhdGljIGNoYXIgKgkJCS8qIC0+IHJlcHJlc2VudGF0aW9uICovCi1wY2hhcihpbnQgY2gpCi17Ci0Jc3RhdGljIGNoYXIgcGJ1ZlsxMF07Ci0KLQlpZiAoaXNwcmludChjaCkgfHwgY2ggPT0gJyAnKQotCQkodm9pZClzbnByaW50ZihwYnVmLCBzaXplb2YgcGJ1ZiwgIiVjIiwgY2gpOwotCWVsc2UKLQkJKHZvaWQpc25wcmludGYocGJ1Ziwgc2l6ZW9mIHBidWYsICJcXCVvIiwgY2gpOwotCXJldHVybihwYnVmKTsKLX0KLSNlbmRpZgotI2VuZGlmCi0KLSN1bmRlZgltYXRjaGVyCi0jdW5kZWYJZmFzdAotI3VuZGVmCXNsb3cKLSN1bmRlZglkaXNzZWN0Ci0jdW5kZWYJYmFja3JlZgotI3VuZGVmCXN0ZXAKLSN1bmRlZglwcmludAotI3VuZGVmCWF0Ci0jdW5kZWYJbWF0Y2gKLSN1bmRlZglub3BlCmRpZmYgLS1naXQgYS9saWJjL3JlZ2V4L3JlZ2NvbXAuYyBiL2xpYmMvcmVnZXgvcmVnY29tcC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOWY0NzkwLi4wMDAwMDAwCi0tLSBhL2xpYmMvcmVnZXgvcmVnY29tcC5jCisrKyAvZGV2L251bGwKQEAgLTEsMTUxNyArMCwwIEBACi0vKgkkT3BlbkJTRDogcmVnY29tcC5jLHYgMS4xOSAyMDA4LzAyLzIzIDA4OjEzOjA3IG90dG8gRXhwICQgKi8KLS8qLQotICogQ29weXJpZ2h0IChjKSAxOTkyLCAxOTkzLCAxOTk0IEhlbnJ5IFNwZW5jZXIuCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTIsIDE5OTMsIDE5OTQKLSAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKLSAqIEhlbnJ5IFNwZW5jZXIuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0gKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICoKLSAqCUAoIylyZWdjb21wLmMJOC41IChCZXJrZWxleSkgMy8yMC85NAotICovCi0KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPGN0eXBlLmg+Ci0jaW5jbHVkZSA8bGltaXRzLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8cmVnZXguaD4KLQotI2luY2x1ZGUgInV0aWxzLmgiCi0jaW5jbHVkZSAicmVnZXgyLmgiCi0KLSNpbmNsdWRlICJjY2xhc3MuaCIKLSNpbmNsdWRlICJjbmFtZS5oIgotCi0vKgotICogcGFyc2Ugc3RydWN0dXJlLCBwYXNzZWQgdXAgYW5kIGRvd24gdG8gYXZvaWQgZ2xvYmFsIHZhcmlhYmxlcyBhbmQKLSAqIG90aGVyIGNsdW1zaW5lc3NlcwotICovCi1zdHJ1Y3QgcGFyc2UgewotCWNoYXIgKm5leHQ7CQkvKiBuZXh0IGNoYXJhY3RlciBpbiBSRSAqLwotCWNoYXIgKmVuZDsJCS8qIGVuZCBvZiBzdHJpbmcgKC0+IE5VTCBub3JtYWxseSkgKi8KLQlpbnQgZXJyb3I7CQkvKiBoYXMgYW4gZXJyb3IgYmVlbiBzZWVuPyAqLwotCXNvcCAqc3RyaXA7CQkvKiBtYWxsb2NlZCBzdHJpcCAqLwotCXNvcG5vIHNzaXplOwkJLyogbWFsbG9jZWQgc3RyaXAgc2l6ZSAoYWxsb2NhdGVkKSAqLwotCXNvcG5vIHNsZW47CQkvKiBtYWxsb2NlZCBzdHJpcCBsZW5ndGggKHVzZWQpICovCi0JaW50IG5jc2FsbG9jOwkJLyogbnVtYmVyIG9mIGNzZXRzIGFsbG9jYXRlZCAqLwotCXN0cnVjdCByZV9ndXRzICpnOwotIwlkZWZpbmUJTlBBUkVOCTEwCS8qIHdlIG5lZWQgdG8gcmVtZW1iZXIgKCkgMS05IGZvciBiYWNrIHJlZnMgKi8KLQlzb3BubyBwYmVnaW5bTlBBUkVOXTsJLyogLT4gKCAoWzBdIHVudXNlZCkgKi8KLQlzb3BubyBwZW5kW05QQVJFTl07CS8qIC0+ICkgKFswXSB1bnVzZWQpICovCi19OwotCi1zdGF0aWMgdm9pZCBwX2VyZShzdHJ1Y3QgcGFyc2UgKiwgaW50KTsKLXN0YXRpYyB2b2lkIHBfZXJlX2V4cChzdHJ1Y3QgcGFyc2UgKik7Ci1zdGF0aWMgdm9pZCBwX3N0cihzdHJ1Y3QgcGFyc2UgKik7Ci1zdGF0aWMgdm9pZCBwX2JyZShzdHJ1Y3QgcGFyc2UgKiwgaW50LCBpbnQpOwotc3RhdGljIGludCBwX3NpbXBfcmUoc3RydWN0IHBhcnNlICosIGludCk7Ci1zdGF0aWMgaW50IHBfY291bnQoc3RydWN0IHBhcnNlICopOwotc3RhdGljIHZvaWQgcF9icmFja2V0KHN0cnVjdCBwYXJzZSAqKTsKLXN0YXRpYyB2b2lkIHBfYl90ZXJtKHN0cnVjdCBwYXJzZSAqLCBjc2V0ICopOwotc3RhdGljIHZvaWQgcF9iX2NjbGFzcyhzdHJ1Y3QgcGFyc2UgKiwgY3NldCAqKTsKLXN0YXRpYyB2b2lkIHBfYl9lY2xhc3Moc3RydWN0IHBhcnNlICosIGNzZXQgKik7Ci1zdGF0aWMgY2hhciBwX2Jfc3ltYm9sKHN0cnVjdCBwYXJzZSAqKTsKLXN0YXRpYyBjaGFyIHBfYl9jb2xsX2VsZW0oc3RydWN0IHBhcnNlICosIGludCk7Ci1zdGF0aWMgY2hhciBvdGhlcmNhc2UoaW50KTsKLXN0YXRpYyB2b2lkIGJvdGhjYXNlcyhzdHJ1Y3QgcGFyc2UgKiwgaW50KTsKLXN0YXRpYyB2b2lkIG9yZGluYXJ5KHN0cnVjdCBwYXJzZSAqLCBpbnQpOwotc3RhdGljIHZvaWQgbm9ubmV3bGluZShzdHJ1Y3QgcGFyc2UgKik7Ci1zdGF0aWMgdm9pZCByZXBlYXQoc3RydWN0IHBhcnNlICosIHNvcG5vLCBpbnQsIGludCk7Ci1zdGF0aWMgaW50IHNldGVycihzdHJ1Y3QgcGFyc2UgKiwgaW50KTsKLXN0YXRpYyBjc2V0ICphbGxvY3NldChzdHJ1Y3QgcGFyc2UgKik7Ci1zdGF0aWMgdm9pZCBmcmVlc2V0KHN0cnVjdCBwYXJzZSAqLCBjc2V0ICopOwotc3RhdGljIGludCBmcmVlemVzZXQoc3RydWN0IHBhcnNlICosIGNzZXQgKik7Ci1zdGF0aWMgaW50IGZpcnN0Y2goc3RydWN0IHBhcnNlICosIGNzZXQgKik7Ci1zdGF0aWMgaW50IG5jaChzdHJ1Y3QgcGFyc2UgKiwgY3NldCAqKTsKLXN0YXRpYyB2b2lkIG1jYWRkKHN0cnVjdCBwYXJzZSAqLCBjc2V0ICosIGNoYXIgKik7Ci1zdGF0aWMgdm9pZCBtY2ludmVydChzdHJ1Y3QgcGFyc2UgKiwgY3NldCAqKTsKLXN0YXRpYyB2b2lkIG1jY2FzZShzdHJ1Y3QgcGFyc2UgKiwgY3NldCAqKTsKLXN0YXRpYyBpbnQgaXNpbnNldHMoc3RydWN0IHJlX2d1dHMgKiwgaW50KTsKLXN0YXRpYyBpbnQgc2FtZXNldHMoc3RydWN0IHJlX2d1dHMgKiwgaW50LCBpbnQpOwotc3RhdGljIHZvaWQgY2F0ZWdvcml6ZShzdHJ1Y3QgcGFyc2UgKiwgc3RydWN0IHJlX2d1dHMgKik7Ci1zdGF0aWMgc29wbm8gZHVwbChzdHJ1Y3QgcGFyc2UgKiwgc29wbm8sIHNvcG5vKTsKLXN0YXRpYyB2b2lkIGRvZW1pdChzdHJ1Y3QgcGFyc2UgKiwgc29wLCBzaXplX3QpOwotc3RhdGljIHZvaWQgZG9pbnNlcnQoc3RydWN0IHBhcnNlICosIHNvcCwgc2l6ZV90LCBzb3Bubyk7Ci1zdGF0aWMgdm9pZCBkb2Z3ZChzdHJ1Y3QgcGFyc2UgKiwgc29wbm8sIHNvcCk7Ci1zdGF0aWMgdm9pZCBlbmxhcmdlKHN0cnVjdCBwYXJzZSAqLCBzb3Bubyk7Ci1zdGF0aWMgdm9pZCBzdHJpcHNudWcoc3RydWN0IHBhcnNlICosIHN0cnVjdCByZV9ndXRzICopOwotc3RhdGljIHZvaWQgZmluZG11c3Qoc3RydWN0IHBhcnNlICosIHN0cnVjdCByZV9ndXRzICopOwotc3RhdGljIHNvcG5vIHBsdXNjb3VudChzdHJ1Y3QgcGFyc2UgKiwgc3RydWN0IHJlX2d1dHMgKik7Ci0KLXN0YXRpYyBjaGFyIG51bHNbMTBdOwkJLyogcGxhY2UgdG8gcG9pbnQgc2Nhbm5lciBpbiBldmVudCBvZiBlcnJvciAqLwotCi0vKgotICogbWFjcm9zIGZvciB1c2Ugd2l0aCBwYXJzZSBzdHJ1Y3R1cmUKLSAqIEJFV0FSRTogIHRoZXNlIGtub3cgdGhhdCB0aGUgcGFyc2Ugc3RydWN0dXJlIGlzIG5hbWVkIGBwJyAhISEKLSAqLwotI2RlZmluZQlQRUVLKCkJKCpwLT5uZXh0KQotI2RlZmluZQlQRUVLMigpCSgqKHAtPm5leHQrMSkpCi0jZGVmaW5lCU1PUkUoKQkocC0+bmV4dCA8IHAtPmVuZCkKLSNkZWZpbmUJTU9SRTIoKQkocC0+bmV4dCsxIDwgcC0+ZW5kKQotI2RlZmluZQlTRUUoYykJKE1PUkUoKSAmJiBQRUVLKCkgPT0gKGMpKQotI2RlZmluZQlTRUVUV08oYSwgYikJKE1PUkUoKSAmJiBNT1JFMigpICYmIFBFRUsoKSA9PSAoYSkgJiYgUEVFSzIoKSA9PSAoYikpCi0jZGVmaW5lCUVBVChjKQkoKFNFRShjKSkgPyAoTkVYVCgpLCAxKSA6IDApCi0jZGVmaW5lCUVBVFRXTyhhLCBiKQkoKFNFRVRXTyhhLCBiKSkgPyAoTkVYVDIoKSwgMSkgOiAwKQotI2RlZmluZQlORVhUKCkJKHAtPm5leHQrKykKLSNkZWZpbmUJTkVYVDIoKQkocC0+bmV4dCArPSAyKQotI2RlZmluZQlORVhUbihuKQkocC0+bmV4dCArPSAobikpCi0jZGVmaW5lCUdFVE5FWFQoKQkoKnAtPm5leHQrKykKLSNkZWZpbmUJU0VURVJST1IoZSkJc2V0ZXJyKHAsIChlKSkKLSNkZWZpbmUJUkVRVUlSRShjbywgZSkJKChjbykgfHwgU0VURVJST1IoZSkpCi0jZGVmaW5lCU1VU1RTRUUoYywgZSkJKFJFUVVJUkUoTU9SRSgpICYmIFBFRUsoKSA9PSAoYyksIGUpKQotI2RlZmluZQlNVVNURUFUKGMsIGUpCShSRVFVSVJFKE1PUkUoKSAmJiBHRVRORVhUKCkgPT0gKGMpLCBlKSkKLSNkZWZpbmUJTVVTVE5PVFNFRShjLCBlKQkoUkVRVUlSRSghTU9SRSgpIHx8IFBFRUsoKSAhPSAoYyksIGUpKQotI2RlZmluZQlFTUlUKG9wLCBzb3BuZCkJZG9lbWl0KHAsIChzb3ApKG9wKSwgKHNpemVfdCkoc29wbmQpKQotI2RlZmluZQlJTlNFUlQob3AsIHBvcykJZG9pbnNlcnQocCwgKHNvcCkob3ApLCBIRVJFKCktKHBvcykrMSwgcG9zKQotI2RlZmluZQlBSEVBRChwb3MpCQlkb2Z3ZChwLCBwb3MsIEhFUkUoKS0ocG9zKSkKLSNkZWZpbmUJQVNURVJOKHNvcCwgcG9zKQlFTUlUKHNvcCwgSEVSRSgpLXBvcykKLSNkZWZpbmUJSEVSRSgpCQkocC0+c2xlbikKLSNkZWZpbmUJVEhFUkUoKQkJKHAtPnNsZW4gLSAxKQotI2RlZmluZQlUSEVSRVRIRVJFKCkJKHAtPnNsZW4gLSAyKQotI2RlZmluZQlEUk9QKG4pCShwLT5zbGVuIC09IChuKSkKLQotI2lmbmRlZiBOREVCVUcKLXN0YXRpYyBpbnQgbmV2ZXIgPSAwOwkJLyogZm9yIHVzZSBpbiBhc3NlcnRzOyBzaHV0cyBsaW50IHVwICovCi0jZWxzZQotI2RlZmluZQluZXZlcgkwCQkvKiBzb21lIDxhc3NlcnQuaD5zIGhhdmUgYnVncyB0b28gKi8KLSNlbmRpZgotCi0vKgotIC0gcmVnY29tcCAtIGludGVyZmFjZSBmb3IgcGFyc2VyIGFuZCBjb21waWxhdGlvbgotICovCi1pbnQJCQkJLyogMCBzdWNjZXNzLCBvdGhlcndpc2UgUkVHX3NvbWV0aGluZyAqLwotcmVnY29tcChyZWdleF90ICpwcmVnLCBjb25zdCBjaGFyICpwYXR0ZXJuLCBpbnQgY2ZsYWdzKQotewotCXN0cnVjdCBwYXJzZSBwYTsKLQlzdHJ1Y3QgcmVfZ3V0cyAqZzsKLQlzdHJ1Y3QgcGFyc2UgKnAgPSAmcGE7Ci0JaW50IGk7Ci0Jc2l6ZV90IGxlbjsKLSNpZmRlZiBSRURFQlVHCi0jCWRlZmluZQlHT09ERkxBR1MoZikJKGYpCi0jZWxzZQotIwlkZWZpbmUJR09PREZMQUdTKGYpCSgoZikmflJFR19EVU1QKQotI2VuZGlmCi0KLQljZmxhZ3MgPSBHT09ERkxBR1MoY2ZsYWdzKTsKLQlpZiAoKGNmbGFncyZSRUdfRVhURU5ERUQpICYmIChjZmxhZ3MmUkVHX05PU1BFQykpCi0JCXJldHVybihSRUdfSU5WQVJHKTsKLQotCWlmIChjZmxhZ3MmUkVHX1BFTkQpIHsKLQkJaWYgKHByZWctPnJlX2VuZHAgPCBwYXR0ZXJuKQotCQkJcmV0dXJuKFJFR19JTlZBUkcpOwotCQlsZW4gPSBwcmVnLT5yZV9lbmRwIC0gcGF0dGVybjsKLQl9IGVsc2UKLQkJbGVuID0gc3RybGVuKChjaGFyICopcGF0dGVybik7Ci0KLQkvKiBkbyB0aGUgbWFsbG9jcyBlYXJseSBzbyBmYWlsdXJlIGhhbmRsaW5nIGlzIGVhc3kgKi8KLQlnID0gKHN0cnVjdCByZV9ndXRzICopbWFsbG9jKHNpemVvZihzdHJ1Y3QgcmVfZ3V0cykgKwotCQkJCQkJCShOQy0xKSpzaXplb2YoY2F0X3QpKTsKLQlpZiAoZyA9PSBOVUxMKQotCQlyZXR1cm4oUkVHX0VTUEFDRSk7Ci0JcC0+c3NpemUgPSBsZW4vKHNpemVfdCkyKihzaXplX3QpMyArIChzaXplX3QpMTsJLyogdWdoICovCi0JcC0+c3RyaXAgPSAoc29wICopY2FsbG9jKHAtPnNzaXplLCBzaXplb2Yoc29wKSk7Ci0JcC0+c2xlbiA9IDA7Ci0JaWYgKHAtPnN0cmlwID09IE5VTEwpIHsKLQkJZnJlZSgoY2hhciAqKWcpOwotCQlyZXR1cm4oUkVHX0VTUEFDRSk7Ci0JfQotCi0JLyogc2V0IHRoaW5ncyB1cCAqLwotCXAtPmcgPSBnOwotCXAtPm5leHQgPSAoY2hhciAqKXBhdHRlcm47CS8qIGNvbnZlbmllbmNlOyB3ZSBkbyBub3QgbW9kaWZ5IGl0ICovCi0JcC0+ZW5kID0gcC0+bmV4dCArIGxlbjsKLQlwLT5lcnJvciA9IDA7Ci0JcC0+bmNzYWxsb2MgPSAwOwotCWZvciAoaSA9IDA7IGkgPCBOUEFSRU47IGkrKykgewotCQlwLT5wYmVnaW5baV0gPSAwOwotCQlwLT5wZW5kW2ldID0gMDsKLQl9Ci0JZy0+Y3NldHNpemUgPSBOQzsKLQlnLT5zZXRzID0gTlVMTDsKLQlnLT5zZXRiaXRzID0gTlVMTDsKLQlnLT5uY3NldHMgPSAwOwotCWctPmNmbGFncyA9IGNmbGFnczsKLQlnLT5pZmxhZ3MgPSAwOwotCWctPm5ib2wgPSAwOwotCWctPm5lb2wgPSAwOwotCWctPm11c3QgPSBOVUxMOwotCWctPm1sZW4gPSAwOwotCWctPm5zdWIgPSAwOwotCWctPm5jYXRlZ29yaWVzID0gMTsJLyogY2F0ZWdvcnkgMCBpcyAiZXZlcnl0aGluZyBlbHNlIiAqLwotCWctPmNhdGVnb3JpZXMgPSAmZy0+Y2F0c3BhY2VbLShDSEFSX01JTildOwotCSh2b2lkKSBtZW1zZXQoKGNoYXIgKilnLT5jYXRzcGFjZSwgMCwgTkMqc2l6ZW9mKGNhdF90KSk7Ci0JZy0+YmFja3JlZnMgPSAwOwotCi0JLyogZG8gaXQgKi8KLQlFTUlUKE9FTkQsIDApOwotCWctPmZpcnN0c3RhdGUgPSBUSEVSRSgpOwotCWlmIChjZmxhZ3MmUkVHX0VYVEVOREVEKQotCQlwX2VyZShwLCBPVVQpOwotCWVsc2UgaWYgKGNmbGFncyZSRUdfTk9TUEVDKQotCQlwX3N0cihwKTsKLQllbHNlCi0JCXBfYnJlKHAsIE9VVCwgT1VUKTsKLQlFTUlUKE9FTkQsIDApOwotCWctPmxhc3RzdGF0ZSA9IFRIRVJFKCk7Ci0KLQkvKiB0aWR5IHVwIGxvb3NlIGVuZHMgYW5kIGZpbGwgdGhpbmdzIGluICovCi0JY2F0ZWdvcml6ZShwLCBnKTsKLQlzdHJpcHNudWcocCwgZyk7Ci0JZmluZG11c3QocCwgZyk7Ci0JZy0+bnBsdXMgPSBwbHVzY291bnQocCwgZyk7Ci0JZy0+bWFnaWMgPSBNQUdJQzI7Ci0JcHJlZy0+cmVfbnN1YiA9IGctPm5zdWI7Ci0JcHJlZy0+cmVfZyA9IGc7Ci0JcHJlZy0+cmVfbWFnaWMgPSBNQUdJQzE7Ci0jaWZuZGVmIFJFREVCVUcKLQkvKiBub3QgZGVidWdnaW5nLCBzbyBjYW4ndCByZWx5IG9uIHRoZSBhc3NlcnQoKSBpbiByZWdleGVjKCkgKi8KLQlpZiAoZy0+aWZsYWdzJkJBRCkKLQkJU0VURVJST1IoUkVHX0FTU0VSVCk7Ci0jZW5kaWYKLQotCS8qIHdpbiBvciBsb3NlLCB3ZSdyZSBkb25lICovCi0JaWYgKHAtPmVycm9yICE9IDApCS8qIGxvc2UgKi8KLQkJcmVnZnJlZShwcmVnKTsKLQlyZXR1cm4ocC0+ZXJyb3IpOwotfQotCi0vKgotIC0gcF9lcmUgLSBFUkUgcGFyc2VyIHRvcCBsZXZlbCwgY29uY2F0ZW5hdGlvbiBhbmQgYWx0ZXJuYXRpb24KLSAqLwotc3RhdGljIHZvaWQKLXBfZXJlKHN0cnVjdCBwYXJzZSAqcCwgaW50IHN0b3ApCS8qIGNoYXJhY3RlciB0aGlzIEVSRSBzaG91bGQgZW5kIGF0ICovCi17Ci0JY2hhciBjOwotCXNvcG5vIHByZXZiYWNrID0gMDsKLQlzb3BubyBwcmV2ZndkID0gMDsKLQlzb3BubyBjb25jOwotCWludCBmaXJzdCA9IDE7CQkvKiBpcyB0aGlzIHRoZSBmaXJzdCBhbHRlcm5hdGl2ZT8gKi8KLQotCWZvciAoOzspIHsKLQkJLyogZG8gYSBidW5jaCBvZiBjb25jYXRlbmF0ZWQgZXhwcmVzc2lvbnMgKi8KLQkJY29uYyA9IEhFUkUoKTsKLQkJd2hpbGUgKE1PUkUoKSAmJiAoYyA9IFBFRUsoKSkgIT0gJ3wnICYmIGMgIT0gc3RvcCkKLQkJCXBfZXJlX2V4cChwKTsKLQkJUkVRVUlSRShIRVJFKCkgIT0gY29uYywgUkVHX0VNUFRZKTsJLyogcmVxdWlyZSBub25lbXB0eSAqLwotCi0JCWlmICghRUFUKCd8JykpCi0JCQlicmVhazsJCS8qIE5PVEUgQlJFQUsgT1VUICovCi0KLQkJaWYgKGZpcnN0KSB7Ci0JCQlJTlNFUlQoT0NIXywgY29uYyk7CS8qIG9mZnNldCBpcyB3cm9uZyAqLwotCQkJcHJldmZ3ZCA9IGNvbmM7Ci0JCQlwcmV2YmFjayA9IGNvbmM7Ci0JCQlmaXJzdCA9IDA7Ci0JCX0KLQkJQVNURVJOKE9PUjEsIHByZXZiYWNrKTsKLQkJcHJldmJhY2sgPSBUSEVSRSgpOwotCQlBSEVBRChwcmV2ZndkKTsJCQkvKiBmaXggcHJldmlvdXMgb2Zmc2V0ICovCi0JCXByZXZmd2QgPSBIRVJFKCk7Ci0JCUVNSVQoT09SMiwgMCk7CQkJLyogb2Zmc2V0IGlzIHZlcnkgd3JvbmcgKi8KLQl9Ci0KLQlpZiAoIWZpcnN0KSB7CQkvKiB0YWlsLWVuZCBmaXh1cHMgKi8KLQkJQUhFQUQocHJldmZ3ZCk7Ci0JCUFTVEVSTihPX0NILCBwcmV2YmFjayk7Ci0JfQotCi0JYXNzZXJ0KCFNT1JFKCkgfHwgU0VFKHN0b3ApKTsKLX0KLQotLyoKLSAtIHBfZXJlX2V4cCAtIHBhcnNlIG9uZSBzdWJFUkUsIGFuIGF0b20gcG9zc2libHkgZm9sbG93ZWQgYnkgYSByZXBldGl0aW9uIG9wCi0gKi8KLXN0YXRpYyB2b2lkCi1wX2VyZV9leHAoc3RydWN0IHBhcnNlICpwKQotewotCWNoYXIgYzsKLQlzb3BubyBwb3M7Ci0JaW50IGNvdW50OwotCWludCBjb3VudDI7Ci0Jc29wbm8gc3Vibm87Ci0JaW50IHdhc2NhcmV0ID0gMDsKLQotCWFzc2VydChNT1JFKCkpOwkJLyogY2FsbGVyIHNob3VsZCBoYXZlIGVuc3VyZWQgdGhpcyAqLwotCWMgPSBHRVRORVhUKCk7Ci0KLQlwb3MgPSBIRVJFKCk7Ci0Jc3dpdGNoIChjKSB7Ci0JY2FzZSAnKCc6Ci0JCVJFUVVJUkUoTU9SRSgpLCBSRUdfRVBBUkVOKTsKLQkJcC0+Zy0+bnN1YisrOwotCQlzdWJubyA9IHAtPmctPm5zdWI7Ci0JCWlmIChzdWJubyA8IE5QQVJFTikKLQkJCXAtPnBiZWdpbltzdWJub10gPSBIRVJFKCk7Ci0JCUVNSVQoT0xQQVJFTiwgc3Vibm8pOwotCQlpZiAoIVNFRSgnKScpKQotCQkJcF9lcmUocCwgJyknKTsKLQkJaWYgKHN1Ym5vIDwgTlBBUkVOKSB7Ci0JCQlwLT5wZW5kW3N1Ym5vXSA9IEhFUkUoKTsKLQkJCWFzc2VydChwLT5wZW5kW3N1Ym5vXSAhPSAwKTsKLQkJfQotCQlFTUlUKE9SUEFSRU4sIHN1Ym5vKTsKLQkJTVVTVEVBVCgnKScsIFJFR19FUEFSRU4pOwotCQlicmVhazsKLSNpZm5kZWYgUE9TSVhfTUlTVEFLRQotCWNhc2UgJyknOgkJLyogaGFwcGVucyBvbmx5IGlmIG5vIGN1cnJlbnQgdW5tYXRjaGVkICggKi8KLQkJLyoKLQkJICogWW91IG1heSBhc2ssIHdoeSB0aGUgaWZuZGVmPyAgQmVjYXVzZSBJIGRpZG4ndCBub3RpY2UKLQkJICogdGhpcyB1bnRpbCBzbGlnaHRseSB0b28gbGF0ZSBmb3IgMTAwMy4yLCBhbmQgbm9uZSBvZiB0aGUKLQkJICogb3RoZXIgMTAwMy4yIHJlZ3VsYXItZXhwcmVzc2lvbiByZXZpZXdlcnMgbm90aWNlZCBpdCBhdAotCQkgKiBhbGwuICBTbyBhbiB1bm1hdGNoZWQgKSBpcyBsZWdhbCBQT1NJWCwgYXQgbGVhc3QgdW50aWwKLQkJICogd2UgY2FuIGdldCBpdCBmaXhlZC4KLQkJICovCi0JCVNFVEVSUk9SKFJFR19FUEFSRU4pOwotCQlicmVhazsKLSNlbmRpZgotCWNhc2UgJ14nOgotCQlFTUlUKE9CT0wsIDApOwotCQlwLT5nLT5pZmxhZ3MgfD0gVVNFQk9MOwotCQlwLT5nLT5uYm9sKys7Ci0JCXdhc2NhcmV0ID0gMTsKLQkJYnJlYWs7Ci0JY2FzZSAnJCc6Ci0JCUVNSVQoT0VPTCwgMCk7Ci0JCXAtPmctPmlmbGFncyB8PSBVU0VFT0w7Ci0JCXAtPmctPm5lb2wrKzsKLQkJYnJlYWs7Ci0JY2FzZSAnfCc6Ci0JCVNFVEVSUk9SKFJFR19FTVBUWSk7Ci0JCWJyZWFrOwotCWNhc2UgJyonOgotCWNhc2UgJysnOgotCWNhc2UgJz8nOgotCQlTRVRFUlJPUihSRUdfQkFEUlBUKTsKLQkJYnJlYWs7Ci0JY2FzZSAnLic6Ci0JCWlmIChwLT5nLT5jZmxhZ3MmUkVHX05FV0xJTkUpCi0JCQlub25uZXdsaW5lKHApOwotCQllbHNlCi0JCQlFTUlUKE9BTlksIDApOwotCQlicmVhazsKLQljYXNlICdbJzoKLQkJcF9icmFja2V0KHApOwotCQlicmVhazsKLQljYXNlICdcXCc6Ci0JCVJFUVVJUkUoTU9SRSgpLCBSRUdfRUVTQ0FQRSk7Ci0JCWMgPSBHRVRORVhUKCk7Ci0JCW9yZGluYXJ5KHAsIGMpOwotCQlicmVhazsKLQljYXNlICd7JzoJCS8qIG9rYXkgYXMgb3JkaW5hcnkgZXhjZXB0IGlmIGRpZ2l0IGZvbGxvd3MgKi8KLQkJUkVRVUlSRSghTU9SRSgpIHx8ICFpc2RpZ2l0KCh1Y2gpUEVFSygpKSwgUkVHX0JBRFJQVCk7Ci0JCS8qIEZBTExUSFJPVUdIICovCi0JZGVmYXVsdDoKLQkJb3JkaW5hcnkocCwgYyk7Ci0JCWJyZWFrOwotCX0KLQotCWlmICghTU9SRSgpKQotCQlyZXR1cm47Ci0JYyA9IFBFRUsoKTsKLQkvKiB3ZSBjYWxsIHsgYSByZXBldGl0aW9uIGlmIGZvbGxvd2VkIGJ5IGEgZGlnaXQgKi8KLQlpZiAoISggYyA9PSAnKicgfHwgYyA9PSAnKycgfHwgYyA9PSAnPycgfHwKLQkJCQkoYyA9PSAneycgJiYgTU9SRTIoKSAmJiBpc2RpZ2l0KCh1Y2gpUEVFSzIoKSkpICkpCi0JCXJldHVybjsJCS8qIG5vIHJlcGV0aXRpb24sIHdlJ3JlIGRvbmUgKi8KLQlORVhUKCk7Ci0KLQlSRVFVSVJFKCF3YXNjYXJldCwgUkVHX0JBRFJQVCk7Ci0Jc3dpdGNoIChjKSB7Ci0JY2FzZSAnKic6CS8qIGltcGxlbWVudGVkIGFzICs/ICovCi0JCS8qIHRoaXMgY2FzZSBkb2VzIG5vdCByZXF1aXJlIHRoZSAoeXwpIHRyaWNrLCBub0tMVURHRSAqLwotCQlJTlNFUlQoT1BMVVNfLCBwb3MpOwotCQlBU1RFUk4oT19QTFVTLCBwb3MpOwotCQlJTlNFUlQoT1FVRVNUXywgcG9zKTsKLQkJQVNURVJOKE9fUVVFU1QsIHBvcyk7Ci0JCWJyZWFrOwotCWNhc2UgJysnOgotCQlJTlNFUlQoT1BMVVNfLCBwb3MpOwotCQlBU1RFUk4oT19QTFVTLCBwb3MpOwotCQlicmVhazsKLQljYXNlICc/JzoKLQkJLyogS0xVREdFOiBlbWl0IHk/IGFzICh5fCkgdW50aWwgc3VidGxlIGJ1ZyBnZXRzIGZpeGVkICovCi0JCUlOU0VSVChPQ0hfLCBwb3MpOwkJLyogb2Zmc2V0IHNsaWdodGx5IHdyb25nICovCi0JCUFTVEVSTihPT1IxLCBwb3MpOwkJLyogdGhpcyBvbmUncyByaWdodCAqLwotCQlBSEVBRChwb3MpOwkJCS8qIGZpeCB0aGUgT0NIXyAqLwotCQlFTUlUKE9PUjIsIDApOwkJCS8qIG9mZnNldCB2ZXJ5IHdyb25nLi4uICovCi0JCUFIRUFEKFRIRVJFKCkpOwkJCS8qIC4uLnNvIGZpeCBpdCAqLwotCQlBU1RFUk4oT19DSCwgVEhFUkVUSEVSRSgpKTsKLQkJYnJlYWs7Ci0JY2FzZSAneyc6Ci0JCWNvdW50ID0gcF9jb3VudChwKTsKLQkJaWYgKEVBVCgnLCcpKSB7Ci0JCQlpZiAoaXNkaWdpdCgodWNoKVBFRUsoKSkpIHsKLQkJCQljb3VudDIgPSBwX2NvdW50KHApOwotCQkJCVJFUVVJUkUoY291bnQgPD0gY291bnQyLCBSRUdfQkFEQlIpOwotCQkJfSBlbHNlCQkvKiBzaW5nbGUgbnVtYmVyIHdpdGggY29tbWEgKi8KLQkJCQljb3VudDIgPSBJTkZJTklUWTsKLQkJfSBlbHNlCQkvKiBqdXN0IGEgc2luZ2xlIG51bWJlciAqLwotCQkJY291bnQyID0gY291bnQ7Ci0JCXJlcGVhdChwLCBwb3MsIGNvdW50LCBjb3VudDIpOwotCQlpZiAoIUVBVCgnfScpKSB7CS8qIGVycm9yIGhldXJpc3RpY3MgKi8KLQkJCXdoaWxlIChNT1JFKCkgJiYgUEVFSygpICE9ICd9JykKLQkJCQlORVhUKCk7Ci0JCQlSRVFVSVJFKE1PUkUoKSwgUkVHX0VCUkFDRSk7Ci0JCQlTRVRFUlJPUihSRUdfQkFEQlIpOwotCQl9Ci0JCWJyZWFrOwotCX0KLQotCWlmICghTU9SRSgpKQotCQlyZXR1cm47Ci0JYyA9IFBFRUsoKTsKLQlpZiAoISggYyA9PSAnKicgfHwgYyA9PSAnKycgfHwgYyA9PSAnPycgfHwKLQkJCQkoYyA9PSAneycgJiYgTU9SRTIoKSAmJiBpc2RpZ2l0KCh1Y2gpUEVFSzIoKSkpICkgKQotCQlyZXR1cm47Ci0JU0VURVJST1IoUkVHX0JBRFJQVCk7Ci19Ci0KLS8qCi0gLSBwX3N0ciAtIHN0cmluZyAobm8gbWV0YWNoYXJhY3RlcnMpICJwYXJzZXIiCi0gKi8KLXN0YXRpYyB2b2lkCi1wX3N0cihzdHJ1Y3QgcGFyc2UgKnApCi17Ci0JUkVRVUlSRShNT1JFKCksIFJFR19FTVBUWSk7Ci0Jd2hpbGUgKE1PUkUoKSkKLQkJb3JkaW5hcnkocCwgR0VUTkVYVCgpKTsKLX0KLQotLyoKLSAtIHBfYnJlIC0gQlJFIHBhcnNlciB0b3AgbGV2ZWwsIGFuY2hvcmluZyBhbmQgY29uY2F0ZW5hdGlvbgotICogR2l2aW5nIGVuZDEgYXMgT1VUIGVzc2VudGlhbGx5IGVsaW1pbmF0ZXMgdGhlIGVuZDEvZW5kMiBjaGVjay4KLSAqCi0gKiBUaGlzIGltcGxlbWVudGF0aW9uIGlzIGEgYml0IG9mIGEga2x1ZGdlLCBpbiB0aGF0IGEgdHJhaWxpbmcgJCBpcyBmaXJzdAotICogdGFrZW4gYXMgYW4gb3JkaW5hcnkgY2hhcmFjdGVyIGFuZCB0aGVuIHJldmlzZWQgdG8gYmUgYW4gYW5jaG9yLiAgVGhlCi0gKiBvbmx5IHVuZGVzaXJhYmxlIHNpZGUgZWZmZWN0IGlzIHRoYXQgJyQnIGdldHMgaW5jbHVkZWQgYXMgYSBjaGFyYWN0ZXIKLSAqIGNhdGVnb3J5IGluIHN1Y2ggY2FzZXMuICBUaGlzIGlzIGZhaXJseSBoYXJtbGVzczsgbm90IHdvcnRoIGZpeGluZy4KLSAqIFRoZSBhbW91bnQgb2YgbG9va2FoZWFkIG5lZWRlZCB0byBhdm9pZCB0aGlzIGtsdWRnZSBpcyBleGNlc3NpdmUuCi0gKi8KLXN0YXRpYyB2b2lkCi1wX2JyZShzdHJ1Y3QgcGFyc2UgKnAsCi0gICAgaW50IGVuZDEsCQkvKiBmaXJzdCB0ZXJtaW5hdGluZyBjaGFyYWN0ZXIgKi8KLSAgICBpbnQgZW5kMikJCS8qIHNlY29uZCB0ZXJtaW5hdGluZyBjaGFyYWN0ZXIgKi8KLXsKLQlzb3BubyBzdGFydCA9IEhFUkUoKTsKLQlpbnQgZmlyc3QgPSAxOwkJCS8qIGZpcnN0IHN1YmV4cHJlc3Npb24/ICovCi0JaW50IHdhc2RvbGxhciA9IDA7Ci0KLQlpZiAoRUFUKCdeJykpIHsKLQkJRU1JVChPQk9MLCAwKTsKLQkJcC0+Zy0+aWZsYWdzIHw9IFVTRUJPTDsKLQkJcC0+Zy0+bmJvbCsrOwotCX0KLQl3aGlsZSAoTU9SRSgpICYmICFTRUVUV08oZW5kMSwgZW5kMikpIHsKLQkJd2FzZG9sbGFyID0gcF9zaW1wX3JlKHAsIGZpcnN0KTsKLQkJZmlyc3QgPSAwOwotCX0KLQlpZiAod2FzZG9sbGFyKSB7CS8qIG9vcHMsIHRoYXQgd2FzIGEgdHJhaWxpbmcgYW5jaG9yICovCi0JCURST1AoMSk7Ci0JCUVNSVQoT0VPTCwgMCk7Ci0JCXAtPmctPmlmbGFncyB8PSBVU0VFT0w7Ci0JCXAtPmctPm5lb2wrKzsKLQl9Ci0KLQlSRVFVSVJFKEhFUkUoKSAhPSBzdGFydCwgUkVHX0VNUFRZKTsJLyogcmVxdWlyZSBub25lbXB0eSAqLwotfQotCi0vKgotIC0gcF9zaW1wX3JlIC0gcGFyc2UgYSBzaW1wbGUgUkUsIGFuIGF0b20gcG9zc2libHkgZm9sbG93ZWQgYnkgYSByZXBldGl0aW9uCi0gKi8KLXN0YXRpYyBpbnQJCQkvKiB3YXMgdGhlIHNpbXBsZSBSRSBhbiB1bmJhY2tzbGFzaGVkICQ/ICovCi1wX3NpbXBfcmUoc3RydWN0IHBhcnNlICpwLAotICAgIGludCBzdGFyb3JkaW5hcnkpCQkvKiBpcyBhIGxlYWRpbmcgKiBhbiBvcmRpbmFyeSBjaGFyYWN0ZXI/ICovCi17Ci0JaW50IGM7Ci0JaW50IGNvdW50OwotCWludCBjb3VudDI7Ci0Jc29wbm8gcG9zOwotCWludCBpOwotCXNvcG5vIHN1Ym5vOwotIwlkZWZpbmUJQkFDS1NMCSgxPDxDSEFSX0JJVCkKLQotCXBvcyA9IEhFUkUoKTsJCS8qIHJlcGV0aW9uIG9wLCBpZiBhbnksIGNvdmVycyBmcm9tIGhlcmUgKi8KLQotCWFzc2VydChNT1JFKCkpOwkJLyogY2FsbGVyIHNob3VsZCBoYXZlIGVuc3VyZWQgdGhpcyAqLwotCWMgPSBHRVRORVhUKCk7Ci0JaWYgKGMgPT0gJ1xcJykgewotCQlSRVFVSVJFKE1PUkUoKSwgUkVHX0VFU0NBUEUpOwotCQljID0gQkFDS1NMIHwgR0VUTkVYVCgpOwotCX0KLQlzd2l0Y2ggKGMpIHsKLQljYXNlICcuJzoKLQkJaWYgKHAtPmctPmNmbGFncyZSRUdfTkVXTElORSkKLQkJCW5vbm5ld2xpbmUocCk7Ci0JCWVsc2UKLQkJCUVNSVQoT0FOWSwgMCk7Ci0JCWJyZWFrOwotCWNhc2UgJ1snOgotCQlwX2JyYWNrZXQocCk7Ci0JCWJyZWFrOwotCWNhc2UgQkFDS1NMfCd7JzoKLQkJU0VURVJST1IoUkVHX0JBRFJQVCk7Ci0JCWJyZWFrOwotCWNhc2UgQkFDS1NMfCcoJzoKLQkJcC0+Zy0+bnN1YisrOwotCQlzdWJubyA9IHAtPmctPm5zdWI7Ci0JCWlmIChzdWJubyA8IE5QQVJFTikKLQkJCXAtPnBiZWdpbltzdWJub10gPSBIRVJFKCk7Ci0JCUVNSVQoT0xQQVJFTiwgc3Vibm8pOwotCQkvKiB0aGUgTU9SRSBoZXJlIGlzIGFuIGVycm9yIGhldXJpc3RpYyAqLwotCQlpZiAoTU9SRSgpICYmICFTRUVUV08oJ1xcJywgJyknKSkKLQkJCXBfYnJlKHAsICdcXCcsICcpJyk7Ci0JCWlmIChzdWJubyA8IE5QQVJFTikgewotCQkJcC0+cGVuZFtzdWJub10gPSBIRVJFKCk7Ci0JCQlhc3NlcnQocC0+cGVuZFtzdWJub10gIT0gMCk7Ci0JCX0KLQkJRU1JVChPUlBBUkVOLCBzdWJubyk7Ci0JCVJFUVVJUkUoRUFUVFdPKCdcXCcsICcpJyksIFJFR19FUEFSRU4pOwotCQlicmVhazsKLQljYXNlIEJBQ0tTTHwnKSc6CS8qIHNob3VsZCBub3QgZ2V0IGhlcmUgLS0gbXVzdCBiZSB1c2VyICovCi0JY2FzZSBCQUNLU0x8J30nOgotCQlTRVRFUlJPUihSRUdfRVBBUkVOKTsKLQkJYnJlYWs7Ci0JY2FzZSBCQUNLU0x8JzEnOgotCWNhc2UgQkFDS1NMfCcyJzoKLQljYXNlIEJBQ0tTTHwnMyc6Ci0JY2FzZSBCQUNLU0x8JzQnOgotCWNhc2UgQkFDS1NMfCc1JzoKLQljYXNlIEJBQ0tTTHwnNic6Ci0JY2FzZSBCQUNLU0x8JzcnOgotCWNhc2UgQkFDS1NMfCc4JzoKLQljYXNlIEJBQ0tTTHwnOSc6Ci0JCWkgPSAoYyZ+QkFDS1NMKSAtICcwJzsKLQkJYXNzZXJ0KGkgPCBOUEFSRU4pOwotCQlpZiAocC0+cGVuZFtpXSAhPSAwKSB7Ci0JCQlhc3NlcnQoaSA8PSBwLT5nLT5uc3ViKTsKLQkJCUVNSVQoT0JBQ0tfLCBpKTsKLQkJCWFzc2VydChwLT5wYmVnaW5baV0gIT0gMCk7Ci0JCQlhc3NlcnQoT1AocC0+c3RyaXBbcC0+cGJlZ2luW2ldXSkgPT0gT0xQQVJFTik7Ci0JCQlhc3NlcnQoT1AocC0+c3RyaXBbcC0+cGVuZFtpXV0pID09IE9SUEFSRU4pOwotCQkJKHZvaWQpIGR1cGwocCwgcC0+cGJlZ2luW2ldKzEsIHAtPnBlbmRbaV0pOwotCQkJRU1JVChPX0JBQ0ssIGkpOwotCQl9IGVsc2UKLQkJCVNFVEVSUk9SKFJFR19FU1VCUkVHKTsKLQkJcC0+Zy0+YmFja3JlZnMgPSAxOwotCQlicmVhazsKLQljYXNlICcqJzoKLQkJUkVRVUlSRShzdGFyb3JkaW5hcnksIFJFR19CQURSUFQpOwotCQkvKiBGQUxMVEhST1VHSCAqLwotCWRlZmF1bHQ6Ci0JCW9yZGluYXJ5KHAsIChjaGFyKWMpOwotCQlicmVhazsKLQl9Ci0KLQlpZiAoRUFUKCcqJykpIHsJCS8qIGltcGxlbWVudGVkIGFzICs/ICovCi0JCS8qIHRoaXMgY2FzZSBkb2VzIG5vdCByZXF1aXJlIHRoZSAoeXwpIHRyaWNrLCBub0tMVURHRSAqLwotCQlJTlNFUlQoT1BMVVNfLCBwb3MpOwotCQlBU1RFUk4oT19QTFVTLCBwb3MpOwotCQlJTlNFUlQoT1FVRVNUXywgcG9zKTsKLQkJQVNURVJOKE9fUVVFU1QsIHBvcyk7Ci0JfSBlbHNlIGlmIChFQVRUV08oJ1xcJywgJ3snKSkgewotCQljb3VudCA9IHBfY291bnQocCk7Ci0JCWlmIChFQVQoJywnKSkgewotCQkJaWYgKE1PUkUoKSAmJiBpc2RpZ2l0KCh1Y2gpUEVFSygpKSkgewotCQkJCWNvdW50MiA9IHBfY291bnQocCk7Ci0JCQkJUkVRVUlSRShjb3VudCA8PSBjb3VudDIsIFJFR19CQURCUik7Ci0JCQl9IGVsc2UJCS8qIHNpbmdsZSBudW1iZXIgd2l0aCBjb21tYSAqLwotCQkJCWNvdW50MiA9IElORklOSVRZOwotCQl9IGVsc2UJCS8qIGp1c3QgYSBzaW5nbGUgbnVtYmVyICovCi0JCQljb3VudDIgPSBjb3VudDsKLQkJcmVwZWF0KHAsIHBvcywgY291bnQsIGNvdW50Mik7Ci0JCWlmICghRUFUVFdPKCdcXCcsICd9JykpIHsJLyogZXJyb3IgaGV1cmlzdGljcyAqLwotCQkJd2hpbGUgKE1PUkUoKSAmJiAhU0VFVFdPKCdcXCcsICd9JykpCi0JCQkJTkVYVCgpOwotCQkJUkVRVUlSRShNT1JFKCksIFJFR19FQlJBQ0UpOwotCQkJU0VURVJST1IoUkVHX0JBREJSKTsKLQkJfQotCX0gZWxzZSBpZiAoYyA9PSAnJCcpCS8qICQgKGJ1dCBub3QgXCQpIGVuZHMgaXQgKi8KLQkJcmV0dXJuKDEpOwotCi0JcmV0dXJuKDApOwotfQotCi0vKgotIC0gcF9jb3VudCAtIHBhcnNlIGEgcmVwZXRpdGlvbiBjb3VudAotICovCi1zdGF0aWMgaW50CQkJLyogdGhlIHZhbHVlICovCi1wX2NvdW50KHN0cnVjdCBwYXJzZSAqcCkKLXsKLQlpbnQgY291bnQgPSAwOwotCWludCBuZGlnaXRzID0gMDsKLQotCXdoaWxlIChNT1JFKCkgJiYgaXNkaWdpdCgodWNoKVBFRUsoKSkgJiYgY291bnQgPD0gRFVQTUFYKSB7Ci0JCWNvdW50ID0gY291bnQqMTAgKyAoR0VUTkVYVCgpIC0gJzAnKTsKLQkJbmRpZ2l0cysrOwotCX0KLQotCVJFUVVJUkUobmRpZ2l0cyA+IDAgJiYgY291bnQgPD0gRFVQTUFYLCBSRUdfQkFEQlIpOwotCXJldHVybihjb3VudCk7Ci19Ci0KLS8qCi0gLSBwX2JyYWNrZXQgLSBwYXJzZSBhIGJyYWNrZXRlZCBjaGFyYWN0ZXIgbGlzdAotICoKLSAqIE5vdGUgYSBzaWduaWZpY2FudCBwcm9wZXJ0eSBvZiB0aGlzIGNvZGU6ICBpZiB0aGUgYWxsb2NzZXQoKSBkaWQgU0VURVJST1IsCi0gKiBubyBzZXQgb3BlcmF0aW9ucyBhcmUgZG9uZS4KLSAqLwotc3RhdGljIHZvaWQKLXBfYnJhY2tldChzdHJ1Y3QgcGFyc2UgKnApCi17Ci0JY3NldCAqY3M7Ci0JaW50IGludmVydCA9IDA7Ci0KLQkvKiBEZXB0IG9mIFRydWx5IFNpY2tlbmluZyBTcGVjaWFsLUNhc2UgS2x1ZGdlcyAqLwotCWlmIChwLT5uZXh0ICsgNSA8IHAtPmVuZCAmJiBzdHJuY21wKHAtPm5leHQsICJbOjw6XV0iLCA2KSA9PSAwKSB7Ci0JCUVNSVQoT0JPVywgMCk7Ci0JCU5FWFRuKDYpOwotCQlyZXR1cm47Ci0JfQotCWlmIChwLT5uZXh0ICsgNSA8IHAtPmVuZCAmJiBzdHJuY21wKHAtPm5leHQsICJbOj46XV0iLCA2KSA9PSAwKSB7Ci0JCUVNSVQoT0VPVywgMCk7Ci0JCU5FWFRuKDYpOwotCQlyZXR1cm47Ci0JfQotCi0JaWYgKChjcyA9IGFsbG9jc2V0KHApKSA9PSBOVUxMKSB7Ci0JCS8qIGFsbG9jc2V0IGRpZCBzZXQgZXJyb3Igc3RhdHVzIGluIHAgKi8KLQkJcmV0dXJuOwotCX0KLQotCWlmIChFQVQoJ14nKSkKLQkJaW52ZXJ0Kys7CS8qIG1ha2Ugbm90ZSB0byBpbnZlcnQgc2V0IGF0IGVuZCAqLwotCWlmIChFQVQoJ10nKSkKLQkJQ0hhZGQoY3MsICddJyk7Ci0JZWxzZSBpZiAoRUFUKCctJykpCi0JCUNIYWRkKGNzLCAnLScpOwotCXdoaWxlIChNT1JFKCkgJiYgUEVFSygpICE9ICddJyAmJiAhU0VFVFdPKCctJywgJ10nKSkKLQkJcF9iX3Rlcm0ocCwgY3MpOwotCWlmIChFQVQoJy0nKSkKLQkJQ0hhZGQoY3MsICctJyk7Ci0JTVVTVEVBVCgnXScsIFJFR19FQlJBQ0spOwotCi0JaWYgKHAtPmVycm9yICE9IDApIHsJLyogZG9uJ3QgbWVzcyB0aGluZ3MgdXAgZnVydGhlciAqLwotCQlmcmVlc2V0KHAsIGNzKTsKLQkJcmV0dXJuOwotCX0KLQotCWlmIChwLT5nLT5jZmxhZ3MmUkVHX0lDQVNFKSB7Ci0JCWludCBpOwotCQlpbnQgY2k7Ci0KLQkJZm9yIChpID0gcC0+Zy0+Y3NldHNpemUgLSAxOyBpID49IDA7IGktLSkKLQkJCWlmIChDSElOKGNzLCBpKSAmJiBpc2FscGhhKGkpKSB7Ci0JCQkJY2kgPSBvdGhlcmNhc2UoaSk7Ci0JCQkJaWYgKGNpICE9IGkpCi0JCQkJCUNIYWRkKGNzLCBjaSk7Ci0JCQl9Ci0JCWlmIChjcy0+bXVsdGlzICE9IE5VTEwpCi0JCQltY2Nhc2UocCwgY3MpOwotCX0KLQlpZiAoaW52ZXJ0KSB7Ci0JCWludCBpOwotCi0JCWZvciAoaSA9IHAtPmctPmNzZXRzaXplIC0gMTsgaSA+PSAwOyBpLS0pCi0JCQlpZiAoQ0hJTihjcywgaSkpCi0JCQkJQ0hzdWIoY3MsIGkpOwotCQkJZWxzZQotCQkJCUNIYWRkKGNzLCBpKTsKLQkJaWYgKHAtPmctPmNmbGFncyZSRUdfTkVXTElORSkKLQkJCUNIc3ViKGNzLCAnXG4nKTsKLQkJaWYgKGNzLT5tdWx0aXMgIT0gTlVMTCkKLQkJCW1jaW52ZXJ0KHAsIGNzKTsKLQl9Ci0KLQlhc3NlcnQoY3MtPm11bHRpcyA9PSBOVUxMKTsJCS8qIHh4eCAqLwotCi0JaWYgKG5jaChwLCBjcykgPT0gMSkgewkJLyogb3B0aW1pemUgc2luZ2xldG9uIHNldHMgKi8KLQkJb3JkaW5hcnkocCwgZmlyc3RjaChwLCBjcykpOwotCQlmcmVlc2V0KHAsIGNzKTsKLQl9IGVsc2UKLQkJRU1JVChPQU5ZT0YsIGZyZWV6ZXNldChwLCBjcykpOwotfQotCi0vKgotIC0gcF9iX3Rlcm0gLSBwYXJzZSBvbmUgdGVybSBvZiBhIGJyYWNrZXRlZCBjaGFyYWN0ZXIgbGlzdAotICovCi1zdGF0aWMgdm9pZAotcF9iX3Rlcm0oc3RydWN0IHBhcnNlICpwLCBjc2V0ICpjcykKLXsKLQljaGFyIGM7Ci0JY2hhciBzdGFydCwgZmluaXNoOwotCWludCBpOwotCi0JLyogY2xhc3NpZnkgd2hhdCB3ZSd2ZSBnb3QgKi8KLQlzd2l0Y2ggKChNT1JFKCkpID8gUEVFSygpIDogJ1wwJykgewotCWNhc2UgJ1snOgotCQljID0gKE1PUkUyKCkpID8gUEVFSzIoKSA6ICdcMCc7Ci0JCWJyZWFrOwotCWNhc2UgJy0nOgotCQlTRVRFUlJPUihSRUdfRVJBTkdFKTsKLQkJcmV0dXJuOwkJCS8qIE5PVEUgUkVUVVJOICovCi0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWMgPSAnXDAnOwotCQlicmVhazsKLQl9Ci0KLQlzd2l0Y2ggKGMpIHsKLQljYXNlICc6JzoJCS8qIGNoYXJhY3RlciBjbGFzcyAqLwotCQlORVhUMigpOwotCQlSRVFVSVJFKE1PUkUoKSwgUkVHX0VCUkFDSyk7Ci0JCWMgPSBQRUVLKCk7Ci0JCVJFUVVJUkUoYyAhPSAnLScgJiYgYyAhPSAnXScsIFJFR19FQ1RZUEUpOwotCQlwX2JfY2NsYXNzKHAsIGNzKTsKLQkJUkVRVUlSRShNT1JFKCksIFJFR19FQlJBQ0spOwotCQlSRVFVSVJFKEVBVFRXTygnOicsICddJyksIFJFR19FQ1RZUEUpOwotCQlicmVhazsKLQljYXNlICc9JzoJCS8qIGVxdWl2YWxlbmNlIGNsYXNzICovCi0JCU5FWFQyKCk7Ci0JCVJFUVVJUkUoTU9SRSgpLCBSRUdfRUJSQUNLKTsKLQkJYyA9IFBFRUsoKTsKLQkJUkVRVUlSRShjICE9ICctJyAmJiBjICE9ICddJywgUkVHX0VDT0xMQVRFKTsKLQkJcF9iX2VjbGFzcyhwLCBjcyk7Ci0JCVJFUVVJUkUoTU9SRSgpLCBSRUdfRUJSQUNLKTsKLQkJUkVRVUlSRShFQVRUV08oJz0nLCAnXScpLCBSRUdfRUNPTExBVEUpOwotCQlicmVhazsKLQlkZWZhdWx0OgkJLyogc3ltYm9sLCBvcmRpbmFyeSBjaGFyYWN0ZXIsIG9yIHJhbmdlICovCi0vKiB4eHggcmV2aXNpb24gbmVlZGVkIGZvciBtdWx0aWNoYXIgc3R1ZmYgKi8KLQkJc3RhcnQgPSBwX2Jfc3ltYm9sKHApOwotCQlpZiAoU0VFKCctJykgJiYgTU9SRTIoKSAmJiBQRUVLMigpICE9ICddJykgewotCQkJLyogcmFuZ2UgKi8KLQkJCU5FWFQoKTsKLQkJCWlmIChFQVQoJy0nKSkKLQkJCQlmaW5pc2ggPSAnLSc7Ci0JCQllbHNlCi0JCQkJZmluaXNoID0gcF9iX3N5bWJvbChwKTsKLQkJfSBlbHNlCi0JCQlmaW5pc2ggPSBzdGFydDsKLS8qIHh4eCB3aGF0IGFib3V0IHNpZ25lZCBjaGFycyBoZXJlLi4uICovCi0JCVJFUVVJUkUoc3RhcnQgPD0gZmluaXNoLCBSRUdfRVJBTkdFKTsKLQkJZm9yIChpID0gc3RhcnQ7IGkgPD0gZmluaXNoOyBpKyspCi0JCQlDSGFkZChjcywgaSk7Ci0JCWJyZWFrOwotCX0KLX0KLQotLyoKLSAtIHBfYl9jY2xhc3MgLSBwYXJzZSBhIGNoYXJhY3Rlci1jbGFzcyBuYW1lIGFuZCBkZWFsIHdpdGggaXQKLSAqLwotc3RhdGljIHZvaWQKLXBfYl9jY2xhc3Moc3RydWN0IHBhcnNlICpwLCBjc2V0ICpjcykKLXsKLQljaGFyICpzcCA9IHAtPm5leHQ7Ci0JY29uc3Qgc3RydWN0IGNjbGFzcyAqY3A7Ci0Jc2l6ZV90IGxlbjsKLQljaGFyICp1OwotCWNoYXIgYzsKLQotCXdoaWxlIChNT1JFKCkgJiYgaXNhbHBoYShQRUVLKCkpKQotCQlORVhUKCk7Ci0JbGVuID0gcC0+bmV4dCAtIHNwOwotCWZvciAoY3AgPSBjY2xhc3NlczsgY3AtPm5hbWUgIT0gTlVMTDsgY3ArKykKLQkJaWYgKHN0cm5jbXAoY3AtPm5hbWUsIHNwLCBsZW4pID09IDAgJiYgY3AtPm5hbWVbbGVuXSA9PSAnXDAnKQotCQkJYnJlYWs7Ci0JaWYgKGNwLT5uYW1lID09IE5VTEwpIHsKLQkJLyogb29wcywgZGlkbid0IGZpbmQgaXQgKi8KLQkJU0VURVJST1IoUkVHX0VDVFlQRSk7Ci0JCXJldHVybjsKLQl9Ci0KLQl1ID0gY3AtPmNoYXJzOwotCXdoaWxlICgoYyA9ICp1KyspICE9ICdcMCcpCi0JCUNIYWRkKGNzLCBjKTsKLQlmb3IgKHUgPSBjcC0+bXVsdGlzOyAqdSAhPSAnXDAnOyB1ICs9IHN0cmxlbih1KSArIDEpCi0JCU1DYWRkKHAsIGNzLCB1KTsKLX0KLQotLyoKLSAtIHBfYl9lY2xhc3MgLSBwYXJzZSBhbiBlcXVpdmFsZW5jZS1jbGFzcyBuYW1lIGFuZCBkZWFsIHdpdGggaXQKLSAqCi0gKiBUaGlzIGltcGxlbWVudGF0aW9uIGlzIGluY29tcGxldGUuIHh4eAotICovCi1zdGF0aWMgdm9pZAotcF9iX2VjbGFzcyhzdHJ1Y3QgcGFyc2UgKnAsIGNzZXQgKmNzKQotewotCWNoYXIgYzsKLQotCWMgPSBwX2JfY29sbF9lbGVtKHAsICc9Jyk7Ci0JQ0hhZGQoY3MsIGMpOwotfQotCi0vKgotIC0gcF9iX3N5bWJvbCAtIHBhcnNlIGEgY2hhcmFjdGVyIG9yIFsuLl1lZCBtdWx0aWNoYXJhY3RlciBjb2xsYXRpbmcgc3ltYm9sCi0gKi8KLXN0YXRpYyBjaGFyCQkJLyogdmFsdWUgb2Ygc3ltYm9sICovCi1wX2Jfc3ltYm9sKHN0cnVjdCBwYXJzZSAqcCkKLXsKLQljaGFyIHZhbHVlOwotCi0JUkVRVUlSRShNT1JFKCksIFJFR19FQlJBQ0spOwotCWlmICghRUFUVFdPKCdbJywgJy4nKSkKLQkJcmV0dXJuKEdFVE5FWFQoKSk7Ci0KLQkvKiBjb2xsYXRpbmcgc3ltYm9sICovCi0JdmFsdWUgPSBwX2JfY29sbF9lbGVtKHAsICcuJyk7Ci0JUkVRVUlSRShFQVRUV08oJy4nLCAnXScpLCBSRUdfRUNPTExBVEUpOwotCXJldHVybih2YWx1ZSk7Ci19Ci0KLS8qCi0gLSBwX2JfY29sbF9lbGVtIC0gcGFyc2UgYSBjb2xsYXRpbmctZWxlbWVudCBuYW1lIGFuZCBsb29rIGl0IHVwCi0gKi8KLXN0YXRpYyBjaGFyCQkJLyogdmFsdWUgb2YgY29sbGF0aW5nIGVsZW1lbnQgKi8KLXBfYl9jb2xsX2VsZW0oc3RydWN0IHBhcnNlICpwLAotICAgIGludCBlbmRjKQkJCS8qIG5hbWUgZW5kZWQgYnkgZW5kYywnXScgKi8KLXsKLQljaGFyICpzcCA9IHAtPm5leHQ7Ci0JY29uc3Qgc3RydWN0IGNuYW1lICpjcDsKLQlpbnQgbGVuOwotCi0Jd2hpbGUgKE1PUkUoKSAmJiAhU0VFVFdPKGVuZGMsICddJykpCi0JCU5FWFQoKTsKLQlpZiAoIU1PUkUoKSkgewotCQlTRVRFUlJPUihSRUdfRUJSQUNLKTsKLQkJcmV0dXJuKDApOwotCX0KLQlsZW4gPSBwLT5uZXh0IC0gc3A7Ci0JZm9yIChjcCA9IGNuYW1lczsgY3AtPm5hbWUgIT0gTlVMTDsgY3ArKykKLQkJaWYgKHN0cm5jbXAoY3AtPm5hbWUsIHNwLCBsZW4pID09IDAgJiYgY3AtPm5hbWVbbGVuXSA9PSAnXDAnKQotCQkJcmV0dXJuKGNwLT5jb2RlKTsJLyoga25vd24gbmFtZSAqLwotCWlmIChsZW4gPT0gMSkKLQkJcmV0dXJuKCpzcCk7CS8qIHNpbmdsZSBjaGFyYWN0ZXIgKi8KLQlTRVRFUlJPUihSRUdfRUNPTExBVEUpOwkJCS8qIG5laXRoZXIgKi8KLQlyZXR1cm4oMCk7Ci19Ci0KLS8qCi0gLSBvdGhlcmNhc2UgLSByZXR1cm4gdGhlIGNhc2UgY291bnRlcnBhcnQgb2YgYW4gYWxwaGFiZXRpYwotICovCi1zdGF0aWMgY2hhcgkJCS8qIGlmIG5vIGNvdW50ZXJwYXJ0LCByZXR1cm4gY2ggKi8KLW90aGVyY2FzZShpbnQgY2gpCi17Ci0JY2ggPSAodWNoKWNoOwotCWFzc2VydChpc2FscGhhKGNoKSk7Ci0JaWYgKGlzdXBwZXIoY2gpKQotCQlyZXR1cm4gKCh1Y2gpdG9sb3dlcihjaCkpOwotCWVsc2UgaWYgKGlzbG93ZXIoY2gpKQotCQlyZXR1cm4gKCh1Y2gpdG91cHBlcihjaCkpOwotCWVsc2UJCQkvKiBwZWN1bGlhciwgYnV0IGNvdWxkIGhhcHBlbiAqLwotCQlyZXR1cm4oY2gpOwotfQotCi0vKgotIC0gYm90aGNhc2VzIC0gZW1pdCBhIGR1YWxjYXNlIHZlcnNpb24gb2YgYSB0d28tY2FzZSBjaGFyYWN0ZXIKLSAqCi0gKiBCb3ksIGlzIHRoaXMgaW1wbGVtZW50YXRpb24gZXZlciBhIGtsdWRnZS4uLgotICovCi1zdGF0aWMgdm9pZAotYm90aGNhc2VzKHN0cnVjdCBwYXJzZSAqcCwgaW50IGNoKQotewotCWNoYXIgKm9sZG5leHQgPSBwLT5uZXh0OwotCWNoYXIgKm9sZGVuZCA9IHAtPmVuZDsKLQljaGFyIGJyYWNrZXRbM107Ci0KLQljaCA9ICh1Y2gpY2g7Ci0JYXNzZXJ0KG90aGVyY2FzZShjaCkgIT0gY2gpOwkvKiBwX2JyYWNrZXQoKSB3b3VsZCByZWN1cnNlICovCi0JcC0+bmV4dCA9IGJyYWNrZXQ7Ci0JcC0+ZW5kID0gYnJhY2tldCsyOwotCWJyYWNrZXRbMF0gPSBjaDsKLQlicmFja2V0WzFdID0gJ10nOwotCWJyYWNrZXRbMl0gPSAnXDAnOwotCXBfYnJhY2tldChwKTsKLQlhc3NlcnQocC0+bmV4dCA9PSBicmFja2V0KzIpOwotCXAtPm5leHQgPSBvbGRuZXh0OwotCXAtPmVuZCA9IG9sZGVuZDsKLX0KLQotLyoKLSAtIG9yZGluYXJ5IC0gZW1pdCBhbiBvcmRpbmFyeSBjaGFyYWN0ZXIKLSAqLwotc3RhdGljIHZvaWQKLW9yZGluYXJ5KHN0cnVjdCBwYXJzZSAqcCwgaW50IGNoKQotewotCWNhdF90ICpjYXAgPSBwLT5nLT5jYXRlZ29yaWVzOwotCi0JaWYgKChwLT5nLT5jZmxhZ3MmUkVHX0lDQVNFKSAmJiBpc2FscGhhKCh1Y2gpY2gpICYmIG90aGVyY2FzZShjaCkgIT0gY2gpCi0JCWJvdGhjYXNlcyhwLCBjaCk7Ci0JZWxzZSB7Ci0JCUVNSVQoT0NIQVIsICh1Y2gpY2gpOwotCQlpZiAoY2FwW2NoXSA9PSAwKQotCQkJY2FwW2NoXSA9IHAtPmctPm5jYXRlZ29yaWVzKys7Ci0JfQotfQotCi0vKgotIC0gbm9ubmV3bGluZSAtIGVtaXQgUkVHX05FV0xJTkUgdmVyc2lvbiBvZiBPQU5ZCi0gKgotICogQm95LCBpcyB0aGlzIGltcGxlbWVudGF0aW9uIGV2ZXIgYSBrbHVkZ2UuLi4KLSAqLwotc3RhdGljIHZvaWQKLW5vbm5ld2xpbmUoc3RydWN0IHBhcnNlICpwKQotewotCWNoYXIgKm9sZG5leHQgPSBwLT5uZXh0OwotCWNoYXIgKm9sZGVuZCA9IHAtPmVuZDsKLQljaGFyIGJyYWNrZXRbNF07Ci0KLQlwLT5uZXh0ID0gYnJhY2tldDsKLQlwLT5lbmQgPSBicmFja2V0KzM7Ci0JYnJhY2tldFswXSA9ICdeJzsKLQlicmFja2V0WzFdID0gJ1xuJzsKLQlicmFja2V0WzJdID0gJ10nOwotCWJyYWNrZXRbM10gPSAnXDAnOwotCXBfYnJhY2tldChwKTsKLQlhc3NlcnQocC0+bmV4dCA9PSBicmFja2V0KzMpOwotCXAtPm5leHQgPSBvbGRuZXh0OwotCXAtPmVuZCA9IG9sZGVuZDsKLX0KLQotLyoKLSAtIHJlcGVhdCAtIGdlbmVyYXRlIGNvZGUgZm9yIGEgYm91bmRlZCByZXBldGl0aW9uLCByZWN1cnNpdmVseSBpZiBuZWVkZWQKLSAqLwotc3RhdGljIHZvaWQKLXJlcGVhdChzdHJ1Y3QgcGFyc2UgKnAsCi0gICAgc29wbm8gc3RhcnQsCQkvKiBvcGVyYW5kIGZyb20gaGVyZSB0byBlbmQgb2Ygc3RyaXAgKi8KLSAgICBpbnQgZnJvbSwJCQkvKiByZXBlYXRlZCBmcm9tIHRoaXMgbnVtYmVyICovCi0gICAgaW50IHRvKQkJCS8qIHRvIHRoaXMgbnVtYmVyIG9mIHRpbWVzIChtYXliZSBJTkZJTklUWSkgKi8KLXsKLQlzb3BubyBmaW5pc2ggPSBIRVJFKCk7Ci0jCWRlZmluZQlOCTIKLSMJZGVmaW5lCUlORgkzCi0jCWRlZmluZQlSRVAoZiwgdCkJKChmKSo4ICsgKHQpKQotIwlkZWZpbmUJTUFQKG4pCSgoKG4pIDw9IDEpID8gKG4pIDogKChuKSA9PSBJTkZJTklUWSkgPyBJTkYgOiBOKQotCXNvcG5vIGNvcHk7Ci0KLQlpZiAocC0+ZXJyb3IgIT0gMCkJLyogaGVhZCBvZmYgcG9zc2libGUgcnVuYXdheSByZWN1cnNpb24gKi8KLQkJcmV0dXJuOwotCi0JYXNzZXJ0KGZyb20gPD0gdG8pOwotCi0Jc3dpdGNoIChSRVAoTUFQKGZyb20pLCBNQVAodG8pKSkgewotCWNhc2UgUkVQKDAsIDApOgkJCS8qIG11c3QgYmUgdXNlciBkb2luZyB0aGlzICovCi0JCURST1AoZmluaXNoLXN0YXJ0KTsJLyogZHJvcCB0aGUgb3BlcmFuZCAqLwotCQlicmVhazsKLQljYXNlIFJFUCgwLCAxKToJCQkvKiBhcyB4ezEsMX0/ICovCi0JY2FzZSBSRVAoMCwgTik6CQkJLyogYXMgeHsxLG59PyAqLwotCWNhc2UgUkVQKDAsIElORik6CQkvKiBhcyB4ezEsfT8gKi8KLQkJLyogS0xVREdFOiBlbWl0IHk/IGFzICh5fCkgdW50aWwgc3VidGxlIGJ1ZyBnZXRzIGZpeGVkICovCi0JCUlOU0VSVChPQ0hfLCBzdGFydCk7CQkvKiBvZmZzZXQgaXMgd3JvbmcuLi4gKi8KLQkJcmVwZWF0KHAsIHN0YXJ0KzEsIDEsIHRvKTsKLQkJQVNURVJOKE9PUjEsIHN0YXJ0KTsKLQkJQUhFQUQoc3RhcnQpOwkJCS8qIC4uLiBmaXggaXQgKi8KLQkJRU1JVChPT1IyLCAwKTsKLQkJQUhFQUQoVEhFUkUoKSk7Ci0JCUFTVEVSTihPX0NILCBUSEVSRVRIRVJFKCkpOwotCQlicmVhazsKLQljYXNlIFJFUCgxLCAxKToJCQkvKiB0cml2aWFsIGNhc2UgKi8KLQkJLyogZG9uZSAqLwotCQlicmVhazsKLQljYXNlIFJFUCgxLCBOKToJCQkvKiBhcyB4P3h7MSxuLTF9ICovCi0JCS8qIEtMVURHRTogZW1pdCB5PyBhcyAoeXwpIHVudGlsIHN1YnRsZSBidWcgZ2V0cyBmaXhlZCAqLwotCQlJTlNFUlQoT0NIXywgc3RhcnQpOwotCQlBU1RFUk4oT09SMSwgc3RhcnQpOwotCQlBSEVBRChzdGFydCk7Ci0JCUVNSVQoT09SMiwgMCk7CQkJLyogb2Zmc2V0IHZlcnkgd3JvbmcuLi4gKi8KLQkJQUhFQUQoVEhFUkUoKSk7CQkJLyogLi4uc28gZml4IGl0ICovCi0JCUFTVEVSTihPX0NILCBUSEVSRVRIRVJFKCkpOwotCQljb3B5ID0gZHVwbChwLCBzdGFydCsxLCBmaW5pc2grMSk7Ci0JCWFzc2VydChjb3B5ID09IGZpbmlzaCs0KTsKLQkJcmVwZWF0KHAsIGNvcHksIDEsIHRvLTEpOwotCQlicmVhazsKLQljYXNlIFJFUCgxLCBJTkYpOgkJLyogYXMgeCsgKi8KLQkJSU5TRVJUKE9QTFVTXywgc3RhcnQpOwotCQlBU1RFUk4oT19QTFVTLCBzdGFydCk7Ci0JCWJyZWFrOwotCWNhc2UgUkVQKE4sIE4pOgkJCS8qIGFzIHh4e20tMSxuLTF9ICovCi0JCWNvcHkgPSBkdXBsKHAsIHN0YXJ0LCBmaW5pc2gpOwotCQlyZXBlYXQocCwgY29weSwgZnJvbS0xLCB0by0xKTsKLQkJYnJlYWs7Ci0JY2FzZSBSRVAoTiwgSU5GKToJCS8qIGFzIHh4e24tMSxJTkZ9ICovCi0JCWNvcHkgPSBkdXBsKHAsIHN0YXJ0LCBmaW5pc2gpOwotCQlyZXBlYXQocCwgY29weSwgZnJvbS0xLCB0byk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6CQkJLyogImNhbid0IGhhcHBlbiIgKi8KLQkJU0VURVJST1IoUkVHX0FTU0VSVCk7CS8qIGp1c3QgaW4gY2FzZSAqLwotCQlicmVhazsKLQl9Ci19Ci0KLS8qCi0gLSBzZXRlcnIgLSBzZXQgYW4gZXJyb3IgY29uZGl0aW9uCi0gKi8KLXN0YXRpYyBpbnQJCQkvKiB1c2VsZXNzIGJ1dCBtYWtlcyB0eXBlIGNoZWNraW5nIGhhcHB5ICovCi1zZXRlcnIoc3RydWN0IHBhcnNlICpwLCBpbnQgZSkKLXsKLQlpZiAocC0+ZXJyb3IgPT0gMCkJLyoga2VlcCBlYXJsaWVzdCBlcnJvciBjb25kaXRpb24gKi8KLQkJcC0+ZXJyb3IgPSBlOwotCXAtPm5leHQgPSBudWxzOwkJLyogdHJ5IHRvIGJyaW5nIHRoaW5ncyB0byBhIGhhbHQgKi8KLQlwLT5lbmQgPSBudWxzOwotCXJldHVybigwKTsJCS8qIG1ha2UgdGhlIHJldHVybiB2YWx1ZSB3ZWxsLWRlZmluZWQgKi8KLX0KLQotLyoKLSAtIGFsbG9jc2V0IC0gYWxsb2NhdGUgYSBzZXQgb2YgY2hhcmFjdGVycyBmb3IgW10KLSAqLwotc3RhdGljIGNzZXQgKgotYWxsb2NzZXQoc3RydWN0IHBhcnNlICpwKQotewotCWludCBubyA9IHAtPmctPm5jc2V0cysrOwotCXNpemVfdCBuYzsKLQlzaXplX3QgbmJ5dGVzOwotCWNzZXQgKmNzOwotCXNpemVfdCBjc3MgPSAoc2l6ZV90KXAtPmctPmNzZXRzaXplOwotCWludCBpOwotCi0JaWYgKG5vID49IHAtPm5jc2FsbG9jKSB7CS8qIG5lZWQgYW5vdGhlciBjb2x1bW4gb2Ygc3BhY2UgKi8KLQkJdm9pZCAqcHRyOwotCi0JCXAtPm5jc2FsbG9jICs9IENIQVJfQklUOwotCQluYyA9IHAtPm5jc2FsbG9jOwotCQlhc3NlcnQobmMgJSBDSEFSX0JJVCA9PSAwKTsKLQkJbmJ5dGVzID0gbmMgLyBDSEFSX0JJVCAqIGNzczsKLQotCQlwdHIgPSAoY3NldCAqKXJlYWxsb2MoKGNoYXIgKilwLT5nLT5zZXRzLCBuYyAqIHNpemVvZihjc2V0KSk7Ci0JCWlmIChwdHIgPT0gTlVMTCkKLQkJCWdvdG8gbm9tZW07Ci0JCXAtPmctPnNldHMgPSBwdHI7Ci0KLQkJcHRyID0gKHVjaCAqKXJlYWxsb2MoKGNoYXIgKilwLT5nLT5zZXRiaXRzLCBuYnl0ZXMpOwotCQlpZiAocHRyID09IE5VTEwpCi0JCQlnb3RvIG5vbWVtOwotCQlwLT5nLT5zZXRiaXRzID0gcHRyOwotCi0JCWZvciAoaSA9IDA7IGkgPCBubzsgaSsrKQotCQkJcC0+Zy0+c2V0c1tpXS5wdHIgPSBwLT5nLT5zZXRiaXRzICsgY3NzKihpL0NIQVJfQklUKTsKLQotCQkodm9pZCkgbWVtc2V0KChjaGFyICopcC0+Zy0+c2V0Yml0cyArIChuYnl0ZXMgLSBjc3MpLCAwLCBjc3MpOwotCX0KLQkvKiBYWFggc2hvdWxkIG5vdCBoYXBwZW4gKi8KLQlpZiAocC0+Zy0+c2V0cyA9PSBOVUxMIHx8IHAtPmctPnNldGJpdHMgPT0gTlVMTCkKLQkJZ290byBub21lbTsKLQotCWNzID0gJnAtPmctPnNldHNbbm9dOwotCWNzLT5wdHIgPSBwLT5nLT5zZXRiaXRzICsgY3NzKigobm8pL0NIQVJfQklUKTsKLQljcy0+bWFzayA9IDEgPDwgKChubykgJSBDSEFSX0JJVCk7Ci0JY3MtPmhhc2ggPSAwOwotCWNzLT5zbXVsdGlzID0gMDsKLQljcy0+bXVsdGlzID0gTlVMTDsKLQotCXJldHVybihjcyk7Ci1ub21lbToKLQlmcmVlKHAtPmctPnNldHMpOwotCXAtPmctPnNldHMgPSBOVUxMOwotCWZyZWUocC0+Zy0+c2V0Yml0cyk7Ci0JcC0+Zy0+c2V0Yml0cyA9IE5VTEw7Ci0KLQlTRVRFUlJPUihSRUdfRVNQQUNFKTsKLQkvKiBjYWxsZXIncyByZXNwb25zaWJpbGl0eSBub3QgdG8gZG8gc2V0IG9wcyAqLwotCXJldHVybihOVUxMKTsKLX0KLQotLyoKLSAtIGZyZWVzZXQgLSBmcmVlIGEgbm93LXVudXNlZCBzZXQKLSAqLwotc3RhdGljIHZvaWQKLWZyZWVzZXQoc3RydWN0IHBhcnNlICpwLCBjc2V0ICpjcykKLXsKLQlpbnQgaTsKLQljc2V0ICp0b3AgPSAmcC0+Zy0+c2V0c1twLT5nLT5uY3NldHNdOwotCXNpemVfdCBjc3MgPSAoc2l6ZV90KXAtPmctPmNzZXRzaXplOwotCi0JZm9yIChpID0gMDsgaSA8IChzc2l6ZV90KWNzczsgaSsrKQotCQlDSHN1YihjcywgaSk7Ci0JaWYgKGNzID09IHRvcC0xKQkvKiByZWNvdmVyIG9ubHkgdGhlIGVhc3kgY2FzZSAqLwotCQlwLT5nLT5uY3NldHMtLTsKLX0KLQotLyoKLSAtIGZyZWV6ZXNldCAtIGZpbmFsIHByb2Nlc3Npbmcgb24gYSBzZXQgb2YgY2hhcmFjdGVycwotICoKLSAqIFRoZSBtYWluIHRhc2sgaGVyZSBpcyBtZXJnaW5nIGlkZW50aWNhbCBzZXRzLiAgVGhpcyBpcyB1c3VhbGx5IGEgd2FzdGUKLSAqIG9mIHRpbWUgKGFsdGhvdWdoIHRoZSBoYXNoIGNvZGUgbWluaW1pemVzIHRoZSBvdmVyaGVhZCksIGJ1dCBjYW4gd2luCi0gKiBiaWcgaWYgUkVHX0lDQVNFIGlzIGJlaW5nIHVzZWQuICBSRUdfSUNBU0UsIGJ5IHRoZSB3YXksIGlzIHdoeSB0aGUgaGFzaAotICogaXMgZG9uZSB1c2luZyBhZGRpdGlvbiByYXRoZXIgdGhhbiB4b3IgLS0gYWxsIEFTQ0lJIFthQV0gc2V0cyB4b3IgdG8KLSAqIHRoZSBzYW1lIHZhbHVlIQotICovCi1zdGF0aWMgaW50CQkJLyogc2V0IG51bWJlciAqLwotZnJlZXplc2V0KHN0cnVjdCBwYXJzZSAqcCwgY3NldCAqY3MpCi17Ci0JdWNoIGggPSBjcy0+aGFzaDsKLQlpbnQgaTsKLQljc2V0ICp0b3AgPSAmcC0+Zy0+c2V0c1twLT5nLT5uY3NldHNdOwotCWNzZXQgKmNzMjsKLQlzaXplX3QgY3NzID0gKHNpemVfdClwLT5nLT5jc2V0c2l6ZTsKLQotCS8qIGxvb2sgZm9yIGFuIGVhcmxpZXIgb25lIHdoaWNoIGlzIHRoZSBzYW1lICovCi0JZm9yIChjczIgPSAmcC0+Zy0+c2V0c1swXTsgY3MyIDwgdG9wOyBjczIrKykKLQkJaWYgKGNzMi0+aGFzaCA9PSBoICYmIGNzMiAhPSBjcykgewotCQkJLyogbWF5YmUgKi8KLQkJCWZvciAoaSA9IDA7IGkgPCAoc3NpemVfdCljc3M7IGkrKykKLQkJCQlpZiAoISFDSElOKGNzMiwgaSkgIT0gISFDSElOKGNzLCBpKSkKLQkJCQkJYnJlYWs7CQkvKiBubyAqLwotCQkJaWYgKGkgPT0gKHNzaXplX3QpY3NzKQotCQkJCWJyZWFrOwkJCS8qIHllcyAqLwotCQl9Ci0KLQlpZiAoY3MyIDwgdG9wKSB7CS8qIGZvdW5kIG9uZSAqLwotCQlmcmVlc2V0KHAsIGNzKTsKLQkJY3MgPSBjczI7Ci0JfQotCi0JcmV0dXJuKChpbnQpKGNzIC0gcC0+Zy0+c2V0cykpOwotfQotCi0vKgotIC0gZmlyc3RjaCAtIHJldHVybiBmaXJzdCBjaGFyYWN0ZXIgaW4gYSBzZXQgKHdoaWNoIG11c3QgaGF2ZSBhdCBsZWFzdCBvbmUpCi0gKi8KLXN0YXRpYyBpbnQJCQkvKiBjaGFyYWN0ZXI7IHRoZXJlIGlzIG5vICJub25lIiB2YWx1ZSAqLwotZmlyc3RjaChzdHJ1Y3QgcGFyc2UgKnAsIGNzZXQgKmNzKQotewotCWludCBpOwotCXNpemVfdCBjc3MgPSAoc2l6ZV90KXAtPmctPmNzZXRzaXplOwotCi0JZm9yIChpID0gMDsgaSA8IChzc2l6ZV90KWNzczsgaSsrKQotCQlpZiAoQ0hJTihjcywgaSkpCi0JCQlyZXR1cm4oKGNoYXIpaSk7Ci0JYXNzZXJ0KG5ldmVyKTsKLQlyZXR1cm4oMCk7CQkvKiBhcmJpdHJhcnkgKi8KLX0KLQotLyoKLSAtIG5jaCAtIG51bWJlciBvZiBjaGFyYWN0ZXJzIGluIGEgc2V0Ci0gKi8KLXN0YXRpYyBpbnQKLW5jaChzdHJ1Y3QgcGFyc2UgKnAsIGNzZXQgKmNzKQotewotCWludCBpOwotCXNpemVfdCBjc3MgPSAoc2l6ZV90KXAtPmctPmNzZXRzaXplOwotCWludCBuID0gMDsKLQotCWZvciAoaSA9IDA7IGkgPCAoc3NpemVfdCljc3M7IGkrKykKLQkJaWYgKENISU4oY3MsIGkpKQotCQkJbisrOwotCXJldHVybihuKTsKLX0KLQotLyoKLSAtIG1jYWRkIC0gYWRkIGEgY29sbGF0aW5nIGVsZW1lbnQgdG8gYSBjc2V0Ci0gKi8KLXN0YXRpYyB2b2lkCi1tY2FkZCggc3RydWN0IHBhcnNlICpwLCBjc2V0ICpjcywgY2hhciAqY3ApCi17Ci0Jc2l6ZV90IG9sZGVuZCA9IGNzLT5zbXVsdGlzOwotCXZvaWQgKm5wOwotCi0JY3MtPnNtdWx0aXMgKz0gc3RybGVuKGNwKSArIDE7Ci0JbnAgPSByZWFsbG9jKGNzLT5tdWx0aXMsIGNzLT5zbXVsdGlzKTsKLQlpZiAobnAgPT0gTlVMTCkgewotCQlpZiAoY3MtPm11bHRpcykKLQkJCWZyZWUoY3MtPm11bHRpcyk7Ci0JCWNzLT5tdWx0aXMgPSBOVUxMOwotCQlTRVRFUlJPUihSRUdfRVNQQUNFKTsKLQkJcmV0dXJuOwotCX0KLQljcy0+bXVsdGlzID0gbnA7Ci0KLQlzdHJsY3B5KGNzLT5tdWx0aXMgKyBvbGRlbmQgLSAxLCBjcCwgY3MtPnNtdWx0aXMgLSBvbGRlbmQgKyAxKTsKLX0KLQotLyoKLSAtIG1jaW52ZXJ0IC0gaW52ZXJ0IHRoZSBsaXN0IG9mIGNvbGxhdGluZyBlbGVtZW50cyBpbiBhIGNzZXQKLSAqCi0gKiBUaGlzIHdvdWxkIGhhdmUgdG8ga25vdyB0aGUgc2V0IG9mIHBvc3NpYmlsaXRpZXMuICBJbXBsZW1lbnRhdGlvbgotICogaXMgZGVmZXJyZWQuCi0gKi8KLS8qIEFSR1NVU0VEICovCi1zdGF0aWMgdm9pZAotbWNpbnZlcnQoc3RydWN0IHBhcnNlICpwLCBjc2V0ICpjcykKLXsKLQlhc3NlcnQoY3MtPm11bHRpcyA9PSBOVUxMKTsJLyogeHh4ICovCi19Ci0KLS8qCi0gLSBtY2Nhc2UgLSBhZGQgY2FzZSBjb3VudGVycGFydHMgb2YgdGhlIGxpc3Qgb2YgY29sbGF0aW5nIGVsZW1lbnRzIGluIGEgY3NldAotICoKLSAqIFRoaXMgd291bGQgaGF2ZSB0byBrbm93IHRoZSBzZXQgb2YgcG9zc2liaWxpdGllcy4gIEltcGxlbWVudGF0aW9uCi0gKiBpcyBkZWZlcnJlZC4KLSAqLwotLyogQVJHU1VTRUQgKi8KLXN0YXRpYyB2b2lkCi1tY2Nhc2Uoc3RydWN0IHBhcnNlICpwLCBjc2V0ICpjcykKLXsKLQlhc3NlcnQoY3MtPm11bHRpcyA9PSBOVUxMKTsJLyogeHh4ICovCi19Ci0KLS8qCi0gLSBpc2luc2V0cyAtIGlzIHRoaXMgY2hhcmFjdGVyIGluIGFueSBzZXRzPwotICovCi1zdGF0aWMgaW50CQkJLyogcHJlZGljYXRlICovCi1pc2luc2V0cyhzdHJ1Y3QgcmVfZ3V0cyAqZywgaW50IGMpCi17Ci0JdWNoICpjb2w7Ci0JaW50IGk7Ci0JaW50IG5jb2xzID0gKGctPm5jc2V0cysoQ0hBUl9CSVQtMSkpIC8gQ0hBUl9CSVQ7Ci0JdW5zaWduZWQgdWMgPSAodWNoKWM7Ci0KLQlmb3IgKGkgPSAwLCBjb2wgPSBnLT5zZXRiaXRzOyBpIDwgbmNvbHM7IGkrKywgY29sICs9IGctPmNzZXRzaXplKQotCQlpZiAoY29sW3VjXSAhPSAwKQotCQkJcmV0dXJuKDEpOwotCXJldHVybigwKTsKLX0KLQotLyoKLSAtIHNhbWVzZXRzIC0gYXJlIHRoZXNlIHR3byBjaGFyYWN0ZXJzIGluIGV4YWN0bHkgdGhlIHNhbWUgc2V0cz8KLSAqLwotc3RhdGljIGludAkJCS8qIHByZWRpY2F0ZSAqLwotc2FtZXNldHMoc3RydWN0IHJlX2d1dHMgKmcsIGludCBjMSwgaW50IGMyKQotewotCXVjaCAqY29sOwotCWludCBpOwotCWludCBuY29scyA9IChnLT5uY3NldHMrKENIQVJfQklULTEpKSAvIENIQVJfQklUOwotCXVuc2lnbmVkIHVjMSA9ICh1Y2gpYzE7Ci0JdW5zaWduZWQgdWMyID0gKHVjaCljMjsKLQotCWZvciAoaSA9IDAsIGNvbCA9IGctPnNldGJpdHM7IGkgPCBuY29sczsgaSsrLCBjb2wgKz0gZy0+Y3NldHNpemUpCi0JCWlmIChjb2xbdWMxXSAhPSBjb2xbdWMyXSkKLQkJCXJldHVybigwKTsKLQlyZXR1cm4oMSk7Ci19Ci0KLS8qCi0gLSBjYXRlZ29yaXplIC0gc29ydCBvdXQgY2hhcmFjdGVyIGNhdGVnb3JpZXMKLSAqLwotc3RhdGljIHZvaWQKLWNhdGVnb3JpemUoc3RydWN0IHBhcnNlICpwLCBzdHJ1Y3QgcmVfZ3V0cyAqZykKLXsKLQljYXRfdCAqY2F0cyA9IGctPmNhdGVnb3JpZXM7Ci0JaW50IGM7Ci0JaW50IGMyOwotCWNhdF90IGNhdDsKLQotCS8qIGF2b2lkIG1ha2luZyBlcnJvciBzaXR1YXRpb25zIHdvcnNlICovCi0JaWYgKHAtPmVycm9yICE9IDApCi0JCXJldHVybjsKLQotCWZvciAoYyA9IENIQVJfTUlOOyBjIDw9IENIQVJfTUFYOyBjKyspCi0JCWlmIChjYXRzW2NdID09IDAgJiYgaXNpbnNldHMoZywgYykpIHsKLQkJCWNhdCA9IGctPm5jYXRlZ29yaWVzKys7Ci0JCQljYXRzW2NdID0gY2F0OwotCQkJZm9yIChjMiA9IGMrMTsgYzIgPD0gQ0hBUl9NQVg7IGMyKyspCi0JCQkJaWYgKGNhdHNbYzJdID09IDAgJiYgc2FtZXNldHMoZywgYywgYzIpKQotCQkJCQljYXRzW2MyXSA9IGNhdDsKLQkJfQotfQotCi0vKgotIC0gZHVwbCAtIGVtaXQgYSBkdXBsaWNhdGUgb2YgYSBidW5jaCBvZiBzb3BzCi0gKi8KLXN0YXRpYyBzb3BubwkJCS8qIHN0YXJ0IG9mIGR1cGxpY2F0ZSAqLwotZHVwbChzdHJ1Y3QgcGFyc2UgKnAsCi0gICAgc29wbm8gc3RhcnQsCQkvKiBmcm9tIGhlcmUgKi8KLSAgICBzb3BubyBmaW5pc2gpCQkvKiB0byB0aGlzIGxlc3Mgb25lICovCi17Ci0Jc29wbm8gcmV0ID0gSEVSRSgpOwotCXNvcG5vIGxlbiA9IGZpbmlzaCAtIHN0YXJ0OwotCi0JYXNzZXJ0KGZpbmlzaCA+PSBzdGFydCk7Ci0JaWYgKGxlbiA9PSAwKQotCQlyZXR1cm4ocmV0KTsKLQllbmxhcmdlKHAsIHAtPnNzaXplICsgbGVuKTsJLyogdGhpcyBtYW55IHVuZXhwZWN0ZWQgYWRkaXRpb25zICovCi0JYXNzZXJ0KHAtPnNzaXplID49IHAtPnNsZW4gKyBsZW4pOwotCSh2b2lkKSBtZW1jcHkoKGNoYXIgKikocC0+c3RyaXAgKyBwLT5zbGVuKSwKLQkJKGNoYXIgKikocC0+c3RyaXAgKyBzdGFydCksIChzaXplX3QpbGVuKnNpemVvZihzb3ApKTsKLQlwLT5zbGVuICs9IGxlbjsKLQlyZXR1cm4ocmV0KTsKLX0KLQotLyoKLSAtIGRvZW1pdCAtIGVtaXQgYSBzdHJpcCBvcGVyYXRvcgotICoKLSAqIEl0IG1pZ2h0IHNlZW0gYmV0dGVyIHRvIGltcGxlbWVudCB0aGlzIGFzIGEgbWFjcm8gd2l0aCBhIGZ1bmN0aW9uIGFzCi0gKiBoYXJkLWNhc2UgYmFja3VwLCBidXQgaXQncyBqdXN0IHRvbyBiaWcgYW5kIG1lc3N5IHVubGVzcyB0aGVyZSBhcmUKLSAqIHNvbWUgY2hhbmdlcyB0byB0aGUgZGF0YSBzdHJ1Y3R1cmVzLiAgTWF5YmUgbGF0ZXIuCi0gKi8KLXN0YXRpYyB2b2lkCi1kb2VtaXQoc3RydWN0IHBhcnNlICpwLCBzb3Agb3AsIHNpemVfdCBvcG5kKQotewotCS8qIGF2b2lkIG1ha2luZyBlcnJvciBzaXR1YXRpb25zIHdvcnNlICovCi0JaWYgKHAtPmVycm9yICE9IDApCi0JCXJldHVybjsKLQotCS8qIGRlYWwgd2l0aCBvdmVyc2l6ZSBvcGVyYW5kcyAoImNhbid0IGhhcHBlbiIsIG1vcmUgb3IgbGVzcykgKi8KLQlhc3NlcnQob3BuZCA8IDE8PE9QU0hJRlQpOwotCi0JLyogZGVhbCB3aXRoIHVuZGVyc2l6ZWQgc3RyaXAgKi8KLQlpZiAocC0+c2xlbiA+PSBwLT5zc2l6ZSkKLQkJZW5sYXJnZShwLCAocC0+c3NpemUrMSkgLyAyICogMyk7CS8qICs1MCUgKi8KLQlhc3NlcnQocC0+c2xlbiA8IHAtPnNzaXplKTsKLQotCS8qIGZpbmFsbHksIGl0J3MgYWxsIHJlZHVjZWQgdG8gdGhlIGVhc3kgY2FzZSAqLwotCXAtPnN0cmlwW3AtPnNsZW4rK10gPSBTT1Aob3AsIG9wbmQpOwotfQotCi0vKgotIC0gZG9pbnNlcnQgLSBpbnNlcnQgYSBzb3AgaW50byB0aGUgc3RyaXAKLSAqLwotc3RhdGljIHZvaWQKLWRvaW5zZXJ0KHN0cnVjdCBwYXJzZSAqcCwgc29wIG9wLCBzaXplX3Qgb3BuZCwgc29wbm8gcG9zKQotewotCXNvcG5vIHNuOwotCXNvcCBzOwotCWludCBpOwotCi0JLyogYXZvaWQgbWFraW5nIGVycm9yIHNpdHVhdGlvbnMgd29yc2UgKi8KLQlpZiAocC0+ZXJyb3IgIT0gMCkKLQkJcmV0dXJuOwotCi0Jc24gPSBIRVJFKCk7Ci0JRU1JVChvcCwgb3BuZCk7CQkvKiBkbyBjaGVja3MsIGVuc3VyZSBzcGFjZSAqLwotCWFzc2VydChIRVJFKCkgPT0gc24rMSk7Ci0JcyA9IHAtPnN0cmlwW3NuXTsKLQotCS8qIGFkanVzdCBwYXJlbiBwb2ludGVycyAqLwotCWFzc2VydChwb3MgPiAwKTsKLQlmb3IgKGkgPSAxOyBpIDwgTlBBUkVOOyBpKyspIHsKLQkJaWYgKHAtPnBiZWdpbltpXSA+PSBwb3MpIHsKLQkJCXAtPnBiZWdpbltpXSsrOwotCQl9Ci0JCWlmIChwLT5wZW5kW2ldID49IHBvcykgewotCQkJcC0+cGVuZFtpXSsrOwotCQl9Ci0JfQotCi0JbWVtbW92ZSgoY2hhciAqKSZwLT5zdHJpcFtwb3MrMV0sIChjaGFyICopJnAtPnN0cmlwW3Bvc10sCi0JCQkJCQkoSEVSRSgpLXBvcy0xKSpzaXplb2Yoc29wKSk7Ci0JcC0+c3RyaXBbcG9zXSA9IHM7Ci19Ci0KLS8qCi0gLSBkb2Z3ZCAtIGNvbXBsZXRlIGEgZm9yd2FyZCByZWZlcmVuY2UKLSAqLwotc3RhdGljIHZvaWQKLWRvZndkKHN0cnVjdCBwYXJzZSAqcCwgc29wbm8gcG9zLCBzb3AgdmFsdWUpCi17Ci0JLyogYXZvaWQgbWFraW5nIGVycm9yIHNpdHVhdGlvbnMgd29yc2UgKi8KLQlpZiAocC0+ZXJyb3IgIT0gMCkKLQkJcmV0dXJuOwotCi0JYXNzZXJ0KHZhbHVlIDwgMTw8T1BTSElGVCk7Ci0JcC0+c3RyaXBbcG9zXSA9IE9QKHAtPnN0cmlwW3Bvc10pIHwgdmFsdWU7Ci19Ci0KLS8qCi0gLSBlbmxhcmdlIC0gZW5sYXJnZSB0aGUgc3RyaXAKLSAqLwotc3RhdGljIHZvaWQKLWVubGFyZ2Uoc3RydWN0IHBhcnNlICpwLCBzb3BubyBzaXplKQotewotCXNvcCAqc3A7Ci0KLQlpZiAocC0+c3NpemUgPj0gc2l6ZSkKLQkJcmV0dXJuOwotCi0Jc3AgPSAoc29wICopcmVhbGxvYyhwLT5zdHJpcCwgc2l6ZSpzaXplb2Yoc29wKSk7Ci0JaWYgKHNwID09IE5VTEwpIHsKLQkJU0VURVJST1IoUkVHX0VTUEFDRSk7Ci0JCXJldHVybjsKLQl9Ci0JcC0+c3RyaXAgPSBzcDsKLQlwLT5zc2l6ZSA9IHNpemU7Ci19Ci0KLS8qCi0gLSBzdHJpcHNudWcgLSBjb21wYWN0IHRoZSBzdHJpcAotICovCi1zdGF0aWMgdm9pZAotc3RyaXBzbnVnKHN0cnVjdCBwYXJzZSAqcCwgc3RydWN0IHJlX2d1dHMgKmcpCi17Ci0JZy0+bnN0YXRlcyA9IHAtPnNsZW47Ci0JZy0+c3RyaXAgPSAoc29wICopcmVhbGxvYygoY2hhciAqKXAtPnN0cmlwLCBwLT5zbGVuICogc2l6ZW9mKHNvcCkpOwotCWlmIChnLT5zdHJpcCA9PSBOVUxMKSB7Ci0JCVNFVEVSUk9SKFJFR19FU1BBQ0UpOwotCQlnLT5zdHJpcCA9IHAtPnN0cmlwOwotCX0KLX0KLQotLyoKLSAtIGZpbmRtdXN0IC0gZmlsbCBpbiBtdXN0IGFuZCBtbGVuIHdpdGggbG9uZ2VzdCBtYW5kYXRvcnkgbGl0ZXJhbCBzdHJpbmcKLSAqCi0gKiBUaGlzIGFsZ29yaXRobSBjb3VsZCBkbyBmYW5jeSB0aGluZ3MgbGlrZSBhbmFseXppbmcgdGhlIG9wZXJhbmRzIG9mIHwKLSAqIGZvciBjb21tb24gc3Vic2VxdWVuY2VzLiAgU29tZWRheS4gIFRoaXMgY29kZSBpcyBzaW1wbGUgYW5kIGZpbmRzIG1vc3QKLSAqIG9mIHRoZSBpbnRlcmVzdGluZyBjYXNlcy4KLSAqCi0gKiBOb3RlIHRoYXQgbXVzdCBhbmQgbWxlbiBnb3QgaW5pdGlhbGl6ZWQgZHVyaW5nIHNldHVwLgotICovCi1zdGF0aWMgdm9pZAotZmluZG11c3Qoc3RydWN0IHBhcnNlICpwLCBzdHJ1Y3QgcmVfZ3V0cyAqZykKLXsKLQlzb3AgKnNjYW47Ci0Jc29wICpzdGFydCA9IE5VTEw7ICAgIC8qIHN0YXJ0IGluaXRpYWxpemVkIGluIHRoZSBkZWZhdWx0IGNhc2UsIGFmdGVyIHRoYXQgKi8KLQlzb3AgKm5ld3N0YXJ0OyAvKiBuZXdzdGFydCB3YXMgaW5pdGlhbGl6ZWQgaW4gdGhlIE9DSEFSIGNhc2UgKi8KLQlzb3BubyBuZXdsZW47Ci0Jc29wIHM7Ci0JY2hhciAqY3A7Ci0Jc29wbm8gaTsKLQotCS8qIGF2b2lkIG1ha2luZyBlcnJvciBzaXR1YXRpb25zIHdvcnNlICovCi0JaWYgKHAtPmVycm9yICE9IDApCi0JCXJldHVybjsKLQotCS8qIGZpbmQgdGhlIGxvbmdlc3QgT0NIQVIgc2VxdWVuY2UgaW4gc3RyaXAgKi8KLQluZXdsZW4gPSAwOwotCXNjYW4gPSBnLT5zdHJpcCArIDE7Ci0JZG8gewotCQlzID0gKnNjYW4rKzsKLQkJc3dpdGNoIChPUChzKSkgewotCQljYXNlIE9DSEFSOgkJLyogc2VxdWVuY2UgbWVtYmVyICovCi0JCQlpZiAobmV3bGVuID09IDApCQkvKiBuZXcgc2VxdWVuY2UgKi8KLQkJCQluZXdzdGFydCA9IHNjYW4gLSAxOwotCQkJbmV3bGVuKys7Ci0JCQlicmVhazsKLQkJY2FzZSBPUExVU186CQkvKiB0aGluZ3MgdGhhdCBkb24ndCBicmVhayBvbmUgKi8KLQkJY2FzZSBPTFBBUkVOOgotCQljYXNlIE9SUEFSRU46Ci0JCQlicmVhazsKLQkJY2FzZSBPUVVFU1RfOgkJLyogdGhpbmdzIHRoYXQgbXVzdCBiZSBza2lwcGVkICovCi0JCWNhc2UgT0NIXzoKLQkJCXNjYW4tLTsKLQkJCWRvIHsKLQkJCQlzY2FuICs9IE9QTkQocyk7Ci0JCQkJcyA9ICpzY2FuOwotCQkJCS8qIGFzc2VydCgpIGludGVyZmVyZXMgdyBkZWJ1ZyBwcmludG91dHMgKi8KLQkJCQlpZiAoT1AocykgIT0gT19RVUVTVCAmJiBPUChzKSAhPSBPX0NIICYmCi0JCQkJCQkJT1AocykgIT0gT09SMikgewotCQkJCQlnLT5pZmxhZ3MgfD0gQkFEOwotCQkJCQlyZXR1cm47Ci0JCQkJfQotCQkJfSB3aGlsZSAoT1AocykgIT0gT19RVUVTVCAmJiBPUChzKSAhPSBPX0NIKTsKLQkJCS8qIGZhbGx0aHJvdWdoICovCi0JCWRlZmF1bHQ6CQkvKiB0aGluZ3MgdGhhdCBicmVhayBhIHNlcXVlbmNlICovCi0JCQlpZiAobmV3bGVuID4gZy0+bWxlbikgewkJLyogZW5kcyBvbmUgKi8KLQkJCQlzdGFydCA9IG5ld3N0YXJ0OwotCQkJCWctPm1sZW4gPSBuZXdsZW47Ci0JCQl9Ci0JCQluZXdsZW4gPSAwOwotCQkJYnJlYWs7Ci0JCX0KLQl9IHdoaWxlIChPUChzKSAhPSBPRU5EKTsKLQotCWlmIChnLT5tbGVuID09IDApCQkvKiB0aGVyZSBpc24ndCBvbmUgKi8KLQkJcmV0dXJuOwotCi0JLyogdHVybiBpdCBpbnRvIGEgY2hhcmFjdGVyIHN0cmluZyAqLwotCWctPm11c3QgPSBtYWxsb2MoKHNpemVfdClnLT5tbGVuICsgMSk7Ci0JaWYgKGctPm11c3QgPT0gTlVMTCkgewkJLyogYXJnaDsganVzdCBmb3JnZXQgaXQgKi8KLQkJZy0+bWxlbiA9IDA7Ci0JCXJldHVybjsKLQl9Ci0JY3AgPSBnLT5tdXN0OwotCXNjYW4gPSBzdGFydDsKLQlmb3IgKGkgPSBnLT5tbGVuOyBpID4gMDsgaS0tKSB7Ci0JCXdoaWxlIChPUChzID0gKnNjYW4rKykgIT0gT0NIQVIpCi0JCQljb250aW51ZTsKLQkJYXNzZXJ0KGNwIDwgZy0+bXVzdCArIGctPm1sZW4pOwotCQkqY3ArKyA9IChjaGFyKU9QTkQocyk7Ci0JfQotCWFzc2VydChjcCA9PSBnLT5tdXN0ICsgZy0+bWxlbik7Ci0JKmNwKysgPSAnXDAnOwkJLyoganVzdCBvbiBnZW5lcmFsIHByaW5jaXBsZXMgKi8KLX0KLQotLyoKLSAtIHBsdXNjb3VudCAtIGNvdW50ICsgbmVzdGluZwotICovCi1zdGF0aWMgc29wbm8JCQkvKiBuZXN0aW5nIGRlcHRoICovCi1wbHVzY291bnQoc3RydWN0IHBhcnNlICpwLCBzdHJ1Y3QgcmVfZ3V0cyAqZykKLXsKLQlzb3AgKnNjYW47Ci0Jc29wIHM7Ci0Jc29wbm8gcGx1c25lc3QgPSAwOwotCXNvcG5vIG1heG5lc3QgPSAwOwotCi0JaWYgKHAtPmVycm9yICE9IDApCi0JCXJldHVybigwKTsJLyogdGhlcmUgbWF5IG5vdCBiZSBhbiBPRU5EICovCi0KLQlzY2FuID0gZy0+c3RyaXAgKyAxOwotCWRvIHsKLQkJcyA9ICpzY2FuKys7Ci0JCXN3aXRjaCAoT1AocykpIHsKLQkJY2FzZSBPUExVU186Ci0JCQlwbHVzbmVzdCsrOwotCQkJYnJlYWs7Ci0JCWNhc2UgT19QTFVTOgotCQkJaWYgKHBsdXNuZXN0ID4gbWF4bmVzdCkKLQkJCQltYXhuZXN0ID0gcGx1c25lc3Q7Ci0JCQlwbHVzbmVzdC0tOwotCQkJYnJlYWs7Ci0JCX0KLQl9IHdoaWxlIChPUChzKSAhPSBPRU5EKTsKLQlpZiAocGx1c25lc3QgIT0gMCkKLQkJZy0+aWZsYWdzIHw9IEJBRDsKLQlyZXR1cm4obWF4bmVzdCk7Ci19CmRpZmYgLS1naXQgYS9saWJjL3JlZ2V4L3JlZ2Vycm9yLmMgYi9saWJjL3JlZ2V4L3JlZ2Vycm9yLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgzOGVjOGYuLjAwMDAwMDAKLS0tIGEvbGliYy9yZWdleC9yZWdlcnJvci5jCisrKyAvZGV2L251bGwKQEAgLTEsMTMwICswLDAgQEAKLS8qCSRPcGVuQlNEOiByZWdlcnJvci5jLHYgMS4xMyAyMDA1LzA4LzA1IDEzOjAzOjAwIGVzcGllIEV4cCAkICovCi0vKi0KLSAqIENvcHlyaWdodCAoYykgMTk5MiwgMTk5MywgMTk5NCBIZW5yeSBTcGVuY2VyLgotICogQ29weXJpZ2h0IChjKSAxOTkyLCAxOTkzLCAxOTk0Ci0gKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5Ci0gKiBIZW5yeSBTcGVuY2VyLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqCi0gKglAKCMpcmVnZXJyb3IuYwk4LjQgKEJlcmtlbGV5KSAzLzIwLzk0Ci0gKi8KLQotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8Y3R5cGUuaD4KLSNpbmNsdWRlIDxsaW1pdHMuaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxyZWdleC5oPgotCi0jaW5jbHVkZSAidXRpbHMuaCIKLQotc3RhdGljIGNoYXIgKnJlZ2F0b2koY29uc3QgcmVnZXhfdCAqLCBjaGFyICosIGludCk7Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgcmVyciB7Ci0JaW50IGNvZGU7Ci0JY2hhciAqbmFtZTsKLQljaGFyICpleHBsYWluOwotfSByZXJyc1tdID0gewotCXsgUkVHX05PTUFUQ0gsCSJSRUdfTk9NQVRDSCIsCSJyZWdleGVjKCkgZmFpbGVkIHRvIG1hdGNoIiB9LAotCXsgUkVHX0JBRFBBVCwJIlJFR19CQURQQVQiLAkiaW52YWxpZCByZWd1bGFyIGV4cHJlc3Npb24iIH0sCi0JeyBSRUdfRUNPTExBVEUsCSJSRUdfRUNPTExBVEUiLAkiaW52YWxpZCBjb2xsYXRpbmcgZWxlbWVudCIgfSwKLQl7IFJFR19FQ1RZUEUsCSJSRUdfRUNUWVBFIiwJImludmFsaWQgY2hhcmFjdGVyIGNsYXNzIiB9LAotCXsgUkVHX0VFU0NBUEUsCSJSRUdfRUVTQ0FQRSIsCSJ0cmFpbGluZyBiYWNrc2xhc2ggKFxcKSIgfSwKLQl7IFJFR19FU1VCUkVHLAkiUkVHX0VTVUJSRUciLAkiaW52YWxpZCBiYWNrcmVmZXJlbmNlIG51bWJlciIgfSwKLQl7IFJFR19FQlJBQ0ssCSJSRUdfRUJSQUNLIiwJImJyYWNrZXRzIChbIF0pIG5vdCBiYWxhbmNlZCIgfSwKLQl7IFJFR19FUEFSRU4sCSJSRUdfRVBBUkVOIiwJInBhcmVudGhlc2VzIG5vdCBiYWxhbmNlZCIgfSwKLQl7IFJFR19FQlJBQ0UsCSJSRUdfRUJSQUNFIiwJImJyYWNlcyBub3QgYmFsYW5jZWQiIH0sCi0JeyBSRUdfQkFEQlIsCSJSRUdfQkFEQlIiLAkiaW52YWxpZCByZXBldGl0aW9uIGNvdW50KHMpIiB9LAotCXsgUkVHX0VSQU5HRSwJIlJFR19FUkFOR0UiLAkiaW52YWxpZCBjaGFyYWN0ZXIgcmFuZ2UiIH0sCi0JeyBSRUdfRVNQQUNFLAkiUkVHX0VTUEFDRSIsCSJvdXQgb2YgbWVtb3J5IiB9LAotCXsgUkVHX0JBRFJQVCwJIlJFR19CQURSUFQiLAkicmVwZXRpdGlvbi1vcGVyYXRvciBvcGVyYW5kIGludmFsaWQiIH0sCi0JeyBSRUdfRU1QVFksCSJSRUdfRU1QVFkiLAkiZW1wdHkgKHN1YilleHByZXNzaW9uIiB9LAotCXsgUkVHX0FTU0VSVCwJIlJFR19BU1NFUlQiLAkiXCJjYW4ndCBoYXBwZW5cIiAtLSB5b3UgZm91bmQgYSBidWciIH0sCi0JeyBSRUdfSU5WQVJHLAkiUkVHX0lOVkFSRyIsCSJpbnZhbGlkIGFyZ3VtZW50IHRvIHJlZ2V4IHJvdXRpbmUiIH0sCi0JeyAwLAkJIiIsCQkiKioqIHVua25vd24gcmVnZXhwIGVycm9yIGNvZGUgKioqIiB9Ci19OwotCi0vKgotIC0gcmVnZXJyb3IgLSB0aGUgaW50ZXJmYWNlIHRvIGVycm9yIG51bWJlcnMKLSA9IGV4dGVybiBzaXplX3QgcmVnZXJyb3IoaW50LCBjb25zdCByZWdleF90ICosIGNoYXIgKiwgc2l6ZV90KTsKLSAqLwotLyogQVJHU1VTRUQgKi8KLXNpemVfdAotcmVnZXJyb3IoaW50IGVycmNvZGUsIGNvbnN0IHJlZ2V4X3QgKnByZWcsIGNoYXIgKmVycmJ1Ziwgc2l6ZV90IGVycmJ1Zl9zaXplKQotewotCWNvbnN0IHN0cnVjdCByZXJyICpyOwotCXNpemVfdCBsZW47Ci0JaW50IHRhcmdldCA9IGVycmNvZGUgJn4gUkVHX0lUT0E7Ci0JY2hhciAqczsKLQljaGFyIGNvbnZidWZbNTBdOwotCi0JaWYgKGVycmNvZGUgPT0gUkVHX0FUT0kpCi0JCXMgPSByZWdhdG9pKHByZWcsIGNvbnZidWYsIHNpemVvZiBjb252YnVmKTsKLQllbHNlIHsKLQkJZm9yIChyID0gcmVycnM7IHItPmNvZGUgIT0gMDsgcisrKQotCQkJaWYgKHItPmNvZGUgPT0gdGFyZ2V0KQotCQkJCWJyZWFrOwotCi0JCWlmIChlcnJjb2RlJlJFR19JVE9BKSB7Ci0JCQlpZiAoci0+Y29kZSAhPSAwKSB7Ci0JCQkJYXNzZXJ0KHN0cmxlbihyLT5uYW1lKSA8IHNpemVvZihjb252YnVmKSk7Ci0JCQkJKHZvaWQpIHN0cmxjcHkoY29udmJ1Ziwgci0+bmFtZSwgc2l6ZW9mIGNvbnZidWYpOwotCQkJfSBlbHNlCi0JCQkJKHZvaWQpc25wcmludGYoY29udmJ1Ziwgc2l6ZW9mIGNvbnZidWYsCi0JCQkJICAgICJSRUdfMHgleCIsIHRhcmdldCk7Ci0JCQlzID0gY29udmJ1ZjsKLQkJfSBlbHNlCi0JCQlzID0gci0+ZXhwbGFpbjsKLQl9Ci0KLQlsZW4gPSBzdHJsZW4ocykgKyAxOwotCWlmIChlcnJidWZfc2l6ZSA+IDApIHsKLQkJc3RybGNweShlcnJidWYsIHMsIGVycmJ1Zl9zaXplKTsKLQl9Ci0KLQlyZXR1cm4obGVuKTsKLX0KLQotLyoKLSAtIHJlZ2F0b2kgLSBpbnRlcm5hbCByb3V0aW5lIHRvIGltcGxlbWVudCBSRUdfQVRPSQotICovCi1zdGF0aWMgY2hhciAqCi1yZWdhdG9pKGNvbnN0IHJlZ2V4X3QgKnByZWcsIGNoYXIgKmxvY2FsYnVmLCBpbnQgbG9jYWxidWZzaXplKQotewotCWNvbnN0IHN0cnVjdCByZXJyICpyOwotCi0JZm9yIChyID0gcmVycnM7IHItPmNvZGUgIT0gMDsgcisrKQotCQlpZiAoc3RyY21wKHItPm5hbWUsIHByZWctPnJlX2VuZHApID09IDApCi0JCQlicmVhazsKLQlpZiAoci0+Y29kZSA9PSAwKQotCQlyZXR1cm4oIjAiKTsKLQotCSh2b2lkKXNucHJpbnRmKGxvY2FsYnVmLCBsb2NhbGJ1ZnNpemUsICIlZCIsIHItPmNvZGUpOwotCXJldHVybihsb2NhbGJ1Zik7Ci19CmRpZmYgLS1naXQgYS9saWJjL3JlZ2V4L3JlZ2V4Mi5oIGIvbGliYy9yZWdleC9yZWdleDIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTVlMTViYy4uMDAwMDAwMAotLS0gYS9saWJjL3JlZ2V4L3JlZ2V4Mi5oCisrKyAvZGV2L251bGwKQEAgLTEsMTU3ICswLDAgQEAKLS8qCSRPcGVuQlNEOiByZWdleDIuaCx2IDEuNyAyMDA0LzExLzMwIDE3OjA0OjIzIG90dG8gRXhwICQJKi8KLQotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTIsIDE5OTMsIDE5OTQgSGVucnkgU3BlbmNlci4KLSAqIENvcHlyaWdodCAoYykgMTk5MiwgMTk5MywgMTk5NAotICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQotICogSGVucnkgU3BlbmNlci4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0gKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKLSAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKgotICoJQCgjKXJlZ2V4Mi5oCTguNCAoQmVya2VsZXkpIDMvMjAvOTQKLSAqLwotCi0vKgotICogaW50ZXJuYWxzIG9mIHJlZ2V4X3QKLSAqLwotI2RlZmluZQlNQUdJQzEJKCgoJ3InXjAyMDApPDw4KSB8ICdlJykKLQotLyoKLSAqIFRoZSBpbnRlcm5hbCByZXByZXNlbnRhdGlvbiBpcyBhICpzdHJpcCosIGEgc2VxdWVuY2Ugb2YKLSAqIG9wZXJhdG9ycyBlbmRpbmcgd2l0aCBhbiBlbmRtYXJrZXIuICAoU29tZSB0ZXJtaW5vbG9neSBldGMuIGlzIGEKLSAqIGhpc3RvcmljYWwgcmVsaWMgb2YgZWFybGllciB2ZXJzaW9ucyB3aGljaCB1c2VkIG11bHRpcGxlIHN0cmlwcy4pCi0gKiBDZXJ0YWluIG9kZGl0aWVzIGluIHRoZSByZXByZXNlbnRhdGlvbiBhcmUgdGhlcmUgdG8gcGVybWl0IHJ1bm5pbmcKLSAqIHRoZSBtYWNoaW5lcnkgYmFja3dhcmRzOyBpbiBwYXJ0aWN1bGFyLCBhbnkgZGV2aWF0aW9uIGZyb20gc2VxdWVudGlhbAotICogZmxvdyBtdXN0IGJlIG1hcmtlZCBhdCBib3RoIGl0cyBzb3VyY2UgYW5kIGl0cyBkZXN0aW5hdGlvbi4gIFNvbWUKLSAqIGZpbmUgcG9pbnRzOgotICoKLSAqIC0gT1BMVVNfIGFuZCBPX1BMVVMgYXJlICppbnNpZGUqIHRoZSBsb29wIHRoZXkgY3JlYXRlLgotICogLSBPUVVFU1RfIGFuZCBPX1FVRVNUIGFyZSAqb3V0c2lkZSogdGhlIGJ5cGFzcyB0aGV5IGNyZWF0ZS4KLSAqIC0gT0NIXyBhbmQgT19DSCBhcmUgKm91dHNpZGUqIHRoZSBtdWx0aS13YXkgYnJhbmNoIHRoZXkgY3JlYXRlLCB3aGlsZQotICogICBPT1IxIGFuZCBPT1IyIGFyZSByZXNwZWN0aXZlbHkgdGhlIGVuZCBhbmQgdGhlIGJlZ2lubmluZyBvZiBvbmUgb2YKLSAqICAgdGhlIGJyYW5jaGVzLiAgTm90ZSB0aGF0IHRoZXJlIGlzIGFuIGltcGxpY2l0IE9PUjIgZm9sbG93aW5nIE9DSF8KLSAqICAgYW5kIGFuIGltcGxpY2l0IE9PUjEgcHJlY2VkaW5nIE9fQ0guCi0gKgotICogSW4gc3RhdGUgcmVwcmVzZW50YXRpb25zLCBhbiBvcGVyYXRvcidzIGJpdCBpcyBvbiB0byBzaWduaWZ5IGEgc3RhdGUKLSAqIGltbWVkaWF0ZWx5ICpwcmVjZWRpbmcqICJleGVjdXRpb24iIG9mIHRoYXQgb3BlcmF0b3IuCi0gKi8KLXR5cGVkZWYgdW5zaWduZWQgbG9uZyBzb3A7CS8qIHN0cmlwIG9wZXJhdG9yICovCi10eXBlZGVmIGxvbmcgc29wbm87Ci0jZGVmaW5lCU9QUk1BU0sJMHhmODAwMDAwMExVCi0jZGVmaW5lCU9QRE1BU0sJMHgwN2ZmZmZmZkxVCi0jZGVmaW5lCU9QU0hJRlQJKCh1bnNpZ25lZCkyNykKLSNkZWZpbmUJT1AobikJKChuKSZPUFJNQVNLKQotI2RlZmluZQlPUE5EKG4pCSgobikmT1BETUFTSykKLSNkZWZpbmUJU09QKG9wLCBvcG5kKQkoKG9wKXwob3BuZCkpCi0vKiBvcGVyYXRvcnMJCQkgICBtZWFuaW5nCW9wZXJhbmQJCQkqLwotLyoJCQkJCQkoYmFjaywgZndkIGFyZSBvZmZzZXRzKQkqLwotI2RlZmluZQlPRU5ECSgxTFU8PE9QU0hJRlQpCS8qIGVuZG1hcmtlcgktCQkJKi8KLSNkZWZpbmUJT0NIQVIJKDJMVTw8T1BTSElGVCkJLyogY2hhcmFjdGVyCXVuc2lnbmVkIGNoYXIJCSovCi0jZGVmaW5lCU9CT0wJKDNMVTw8T1BTSElGVCkJLyogbGVmdCBhbmNob3IJLQkJCSovCi0jZGVmaW5lCU9FT0wJKDRMVTw8T1BTSElGVCkJLyogcmlnaHQgYW5jaG9yCS0JCQkqLwotI2RlZmluZQlPQU5ZCSg1TFU8PE9QU0hJRlQpCS8qIC4JCS0JCQkqLwotI2RlZmluZQlPQU5ZT0YJKDZMVTw8T1BTSElGVCkJLyogWy4uLl0Jc2V0IG51bWJlcgkJKi8KLSNkZWZpbmUJT0JBQ0tfCSg3TFU8PE9QU0hJRlQpCS8qIGJlZ2luIFxkCXBhcmVuIG51bWJlcgkJKi8KLSNkZWZpbmUJT19CQUNLCSg4TFU8PE9QU0hJRlQpCS8qIGVuZCBcZAlwYXJlbiBudW1iZXIJCSovCi0jZGVmaW5lCU9QTFVTXwkoOUxVPDxPUFNISUZUKQkvKiArIHByZWZpeAlmd2QgdG8gc3VmZml4CQkqLwotI2RlZmluZQlPX1BMVVMJKDEwTFU8PE9QU0hJRlQpCS8qICsgc3VmZml4CWJhY2sgdG8gcHJlZml4CQkqLwotI2RlZmluZQlPUVVFU1RfCSgxMUxVPDxPUFNISUZUKQkvKiA/IHByZWZpeAlmd2QgdG8gc3VmZml4CQkqLwotI2RlZmluZQlPX1FVRVNUCSgxMkxVPDxPUFNISUZUKQkvKiA/IHN1ZmZpeAliYWNrIHRvIHByZWZpeAkJKi8KLSNkZWZpbmUJT0xQQVJFTgkoMTNMVTw8T1BTSElGVCkJLyogKAkJZndkIHRvICkJCSovCi0jZGVmaW5lCU9SUEFSRU4JKDE0TFU8PE9QU0hJRlQpCS8qICkJCWJhY2sgdG8gKAkJKi8KLSNkZWZpbmUJT0NIXwkoMTVMVTw8T1BTSElGVCkJLyogYmVnaW4gY2hvaWNlCWZ3ZCB0byBPT1IyCQkqLwotI2RlZmluZQlPT1IxCSgxNkxVPDxPUFNISUZUKQkvKiB8IHB0LiAxCWJhY2sgdG8gT09SMSBvciBPQ0hfCSovCi0jZGVmaW5lCU9PUjIJKDE3TFU8PE9QU0hJRlQpCS8qIHwgcHQuIDIJZndkIHRvIE9PUjIgb3IgT19DSAkqLwotI2RlZmluZQlPX0NICSgxOExVPDxPUFNISUZUKQkvKiBlbmQgY2hvaWNlCWJhY2sgdG8gT09SMQkJKi8KLSNkZWZpbmUJT0JPVwkoMTlMVTw8T1BTSElGVCkJLyogYmVnaW4gd29yZAktCQkJKi8KLSNkZWZpbmUJT0VPVwkoMjBMVTw8T1BTSElGVCkJLyogZW5kIHdvcmQJLQkJCSovCi0KLS8qCi0gKiBTdHJ1Y3R1cmUgZm9yIFtdIGNoYXJhY3Rlci1zZXQgcmVwcmVzZW50YXRpb24uICBDaGFyYWN0ZXIgc2V0cyBhcmUKLSAqIGRvbmUgYXMgYml0IHZlY3RvcnMsIGdyb3VwZWQgOCB0byBhIGJ5dGUgdmVjdG9yIGZvciBjb21wYWN0bmVzcy4KLSAqIFRoZSBpbmRpdmlkdWFsIHNldCB0aGVyZWZvcmUgaGFzIGJvdGggYSBwb2ludGVyIHRvIHRoZSBieXRlIHZlY3RvcgotICogYW5kIGEgbWFzayB0byBwaWNrIG91dCB0aGUgcmVsZXZhbnQgYml0IG9mIGVhY2ggYnl0ZS4gIEEgaGFzaCBjb2RlCi0gKiBzaW1wbGlmaWVzIHRlc3Rpbmcgd2hldGhlciB0d28gc2V0cyBjb3VsZCBiZSBpZGVudGljYWwuCi0gKgotICogVGhpcyB3aWxsIGdldCB0cmlja2llciBmb3IgbXVsdGljaGFyYWN0ZXIgY29sbGF0aW5nIGVsZW1lbnRzLiAgQXMKLSAqIHByZWxpbWluYXJ5IGhvb2tzIGZvciBkZWFsaW5nIHdpdGggc3VjaCB0aGluZ3MsIHdlIGFsc28gY2FycnkgYWxvbmcKLSAqIGEgc3RyaW5nIG9mIG11bHRpLWNoYXJhY3RlciBlbGVtZW50cywgYW5kIGRlY2lkZSB0aGUgc2l6ZSBvZiB0aGUKLSAqIHZlY3RvcnMgYXQgcnVuIHRpbWUuCi0gKi8KLXR5cGVkZWYgc3RydWN0IHsKLQl1Y2ggKnB0cjsJCS8qIC0+IHVjaCBbY3NldHNpemVdICovCi0JdWNoIG1hc2s7CQkvKiBiaXQgd2l0aGluIGFycmF5ICovCi0JdWNoIGhhc2g7CQkvKiBoYXNoIGNvZGUgKi8KLQlzaXplX3Qgc211bHRpczsKLQljaGFyICptdWx0aXM7CQkvKiAtPiBjaGFyW3NtdWx0aV0gIGFiXDBjZFwwZWZcMFwwICovCi19IGNzZXQ7Ci0vKiBub3RlIHRoYXQgQ0hhZGQgYW5kIENIc3ViIGFyZSB1bnNhZmUsIGFuZCBDSElOIGRvZXNuJ3QgeWllbGQgMC8xICovCi0jZGVmaW5lCUNIYWRkKGNzLCBjKQkoKGNzKS0+cHRyWyh1Y2gpKGMpXSB8PSAoY3MpLT5tYXNrLCAoY3MpLT5oYXNoICs9IChjKSkKLSNkZWZpbmUJQ0hzdWIoY3MsIGMpCSgoY3MpLT5wdHJbKHVjaCkoYyldICY9IH4oY3MpLT5tYXNrLCAoY3MpLT5oYXNoIC09IChjKSkKLSNkZWZpbmUJQ0hJTihjcywgYykJKChjcyktPnB0clsodWNoKShjKV0gJiAoY3MpLT5tYXNrKQotI2RlZmluZQlNQ2FkZChwLCBjcywgY3ApCW1jYWRkKHAsIGNzLCBjcCkJLyogcmVnY29tcCgpIGludGVybmFsIGZucyAqLwotI2RlZmluZQlNQ3N1YihwLCBjcywgY3ApCW1jc3ViKHAsIGNzLCBjcCkKLSNkZWZpbmUJTUNpbihwLCBjcywgY3ApCW1jaW4ocCwgY3MsIGNwKQotCi0vKiBzdHVmZiBmb3IgY2hhcmFjdGVyIGNhdGVnb3JpZXMgKi8KLXR5cGVkZWYgdW5zaWduZWQgY2hhciBjYXRfdDsKLQotLyoKLSAqIG1haW4gY29tcGlsZWQtZXhwcmVzc2lvbiBzdHJ1Y3R1cmUKLSAqLwotc3RydWN0IHJlX2d1dHMgewotCWludCBtYWdpYzsKLSMJCWRlZmluZQlNQUdJQzIJKCgoJ1InXjAyMDApPDw4KXwnRScpCi0Jc29wICpzdHJpcDsJCS8qIG1hbGxvY2VkIGFyZWEgZm9yIHN0cmlwICovCi0JaW50IGNzZXRzaXplOwkJLyogbnVtYmVyIG9mIGJpdHMgaW4gYSBjc2V0IHZlY3RvciAqLwotCWludCBuY3NldHM7CQkvKiBudW1iZXIgb2YgY3NldHMgaW4gdXNlICovCi0JY3NldCAqc2V0czsJCS8qIC0+IGNzZXQgW25jc2V0c10gKi8KLQl1Y2ggKnNldGJpdHM7CQkvKiAtPiB1Y2hbY3NldHNpemVdW25jc2V0cy9DSEFSX0JJVF0gKi8KLQlpbnQgY2ZsYWdzOwkJLyogY29weSBvZiByZWdjb21wKCkgY2ZsYWdzIGFyZ3VtZW50ICovCi0Jc29wbm8gbnN0YXRlczsJCS8qID0gbnVtYmVyIG9mIHNvcHMgKi8KLQlzb3BubyBmaXJzdHN0YXRlOwkvKiB0aGUgaW5pdGlhbCBPRU5EIChub3JtYWxseSAwKSAqLwotCXNvcG5vIGxhc3RzdGF0ZTsJLyogdGhlIGZpbmFsIE9FTkQgKi8KLQlpbnQgaWZsYWdzOwkJLyogaW50ZXJuYWwgZmxhZ3MgKi8KLSMJCWRlZmluZQlVU0VCT0wJMDEJLyogdXNlZCBeICovCi0jCQlkZWZpbmUJVVNFRU9MCTAyCS8qIHVzZWQgJCAqLwotIwkJZGVmaW5lCUJBRAkwNAkvKiBzb21ldGhpbmcgd3JvbmcgKi8KLQlpbnQgbmJvbDsJCS8qIG51bWJlciBvZiBeIHVzZWQgKi8KLQlpbnQgbmVvbDsJCS8qIG51bWJlciBvZiAkIHVzZWQgKi8KLQlpbnQgbmNhdGVnb3JpZXM7CS8qIGhvdyBtYW55IGNoYXJhY3RlciBjYXRlZ29yaWVzICovCi0JY2F0X3QgKmNhdGVnb3JpZXM7CS8qIC0+Y2F0c3BhY2VbLUNIQVJfTUlOXSAqLwotCWNoYXIgKm11c3Q7CQkvKiBtYXRjaCBtdXN0IGNvbnRhaW4gdGhpcyBzdHJpbmcgKi8KLQlpbnQgbWxlbjsJCS8qIGxlbmd0aCBvZiBtdXN0ICovCi0Jc2l6ZV90IG5zdWI7CQkvKiBjb3B5IG9mIHJlX25zdWIgKi8KLQlpbnQgYmFja3JlZnM7CQkvKiBkb2VzIGl0IHVzZSBiYWNrIHJlZmVyZW5jZXM/ICovCi0Jc29wbm8gbnBsdXM7CQkvKiBob3cgZGVlcCBkb2VzIGl0IG5lc3QgK3M/ICovCi0JLyogY2F0c3BhY2UgbXVzdCBiZSBsYXN0ICovCi0JY2F0X3QgY2F0c3BhY2VbMV07CS8qIGFjdHVhbGx5IFtOQ10gKi8KLX07Ci0KLS8qIG1pc2MgdXRpbGl0aWVzICovCi0jZGVmaW5lCU9VVAkoQ0hBUl9NQVgrMSkJLyogYSBub24tY2hhcmFjdGVyIHZhbHVlICovCi0jZGVmaW5lCUlTV09SRChjKQkoaXNhbG51bShjKSB8fCAoYykgPT0gJ18nKQpkaWZmIC0tZ2l0IGEvbGliYy9yZWdleC9yZWdleGVjLmMgYi9saWJjL3JlZ2V4L3JlZ2V4ZWMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmZlZWQzYi4uMDAwMDAwMAotLS0gYS9saWJjL3JlZ2V4L3JlZ2V4ZWMuYworKysgL2Rldi9udWxsCkBAIC0xLDE2MCArMCwwIEBACi0vKgkkT3BlbkJTRDogcmVnZXhlYy5jLHYgMS4xMSAyMDA1LzA4LzA1IDEzOjAzOjAwIGVzcGllIEV4cCAkICovCi0vKi0KLSAqIENvcHlyaWdodCAoYykgMTk5MiwgMTk5MywgMTk5NCBIZW5yeSBTcGVuY2VyLgotICogQ29weXJpZ2h0IChjKSAxOTkyLCAxOTkzLCAxOTk0Ci0gKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5Ci0gKiBIZW5yeSBTcGVuY2VyLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqCi0gKglAKCMpcmVnZXhlYy5jCTguMyAoQmVya2VsZXkpIDMvMjAvOTQKLSAqLwotCi0vKgotICogdGhlIG91dGVyIHNoZWxsIG9mIHJlZ2V4ZWMoKQotICoKLSAqIFRoaXMgZmlsZSBpbmNsdWRlcyBlbmdpbmUuYyAqdHdpY2UqLCBhZnRlciBtdWNob3MgZmlkZGxpbmcgd2l0aCB0aGUKLSAqIG1hY3JvcyB0aGF0IGNvZGUgdXNlcy4gIFRoaXMgbGV0cyB0aGUgc2FtZSBjb2RlIG9wZXJhdGUgb24gdHdvIGRpZmZlcmVudAotICogcmVwcmVzZW50YXRpb25zIGZvciBzdGF0ZSBzZXRzLgotICovCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxsaW1pdHMuaD4KLSNpbmNsdWRlIDxjdHlwZS5oPgotI2luY2x1ZGUgPHJlZ2V4Lmg+Ci0KLSNpbmNsdWRlICJ1dGlscy5oIgotI2luY2x1ZGUgInJlZ2V4Mi5oIgotCi0vKiBtYWNyb3MgZm9yIG1hbmlwdWxhdGluZyBzdGF0ZXMsIHNtYWxsIHZlcnNpb24gKi8KLSNkZWZpbmUJc3RhdGVzCWxvbmcKLSNkZWZpbmUJc3RhdGVzMQlzdGF0ZXMJCS8qIGZvciBsYXRlciB1c2UgaW4gcmVnZXhlYygpIGRlY2lzaW9uICovCi0jZGVmaW5lCUNMRUFSKHYpCSgodikgPSAwKQotI2RlZmluZQlTRVQwKHYsIG4pCSgodikgJj0gfigodW5zaWduZWQgbG9uZykxIDw8IChuKSkpCi0jZGVmaW5lCVNFVDEodiwgbikJKCh2KSB8PSAodW5zaWduZWQgbG9uZykxIDw8IChuKSkKLSNkZWZpbmUJSVNTRVQodiwgbikJKCgodikgJiAoKHVuc2lnbmVkIGxvbmcpMSA8PCAobikpKSAhPSAwKQotI2RlZmluZQlBU1NJR04oZCwgcykJKChkKSA9IChzKSkKLSNkZWZpbmUJRVEoYSwgYikJKChhKSA9PSAoYikpCi0jZGVmaW5lCVNUQVRFVkFSUwlsb25nIGR1bW15CS8qIGR1bW15IHZlcnNpb24gKi8KLSNkZWZpbmUJU1RBVEVTRVRVUChtLCBuKQkvKiBub3RoaW5nICovCi0jZGVmaW5lCVNUQVRFVEVBUkRPV04obSkJLyogbm90aGluZyAqLwotI2RlZmluZQlTRVRVUCh2KQkoKHYpID0gMCkKLSNkZWZpbmUJb25lc3RhdGUJbG9uZwotI2RlZmluZQlJTklUKG8sIG4pCSgobykgPSAodW5zaWduZWQgbG9uZykxIDw8IChuKSkKLSNkZWZpbmUJSU5DKG8pCQkoKG8pIDw8PSAxKQotI2RlZmluZQlJU1NUQVRFSU4odiwgbykJKCgodikgJiAobykpICE9IDApCi0vKiBzb21lIGFiYnJldmlhdGlvbnM7IG5vdGUgdGhhdCBzb21lIG9mIHRoZXNlIGtub3cgdmFyaWFibGUgbmFtZXMhICovCi0vKiBkbyAiaWYgSSdtIGhlcmUsIEkgY2FuIGFsc28gYmUgdGhlcmUiIGV0YyB3aXRob3V0IGJyYW5jaGVzICovCi0jZGVmaW5lCUZXRChkc3QsIHNyYywgbikJKChkc3QpIHw9ICgodW5zaWduZWQgbG9uZykoc3JjKSYoaGVyZSkpIDw8IChuKSkKLSNkZWZpbmUJQkFDSyhkc3QsIHNyYywgbikJKChkc3QpIHw9ICgodW5zaWduZWQgbG9uZykoc3JjKSYoaGVyZSkpID4+IChuKSkKLSNkZWZpbmUJSVNTRVRCQUNLKHYsIG4pCQkoKCh2KSAmICgodW5zaWduZWQgbG9uZyloZXJlID4+IChuKSkpICE9IDApCi0vKiBmdW5jdGlvbiBuYW1lcyAqLwotI2RlZmluZSBTTkFNRVMJCQkvKiBlbmdpbmUuYyBsb29rcyBhZnRlciBkZXRhaWxzICovCi0KLSNpbmNsdWRlICJlbmdpbmUuYyIKLQotLyogbm93IHVuZG8gdGhpbmdzICovCi0jdW5kZWYJc3RhdGVzCi0jdW5kZWYJQ0xFQVIKLSN1bmRlZglTRVQwCi0jdW5kZWYJU0VUMQotI3VuZGVmCUlTU0VUCi0jdW5kZWYJQVNTSUdOCi0jdW5kZWYJRVEKLSN1bmRlZglTVEFURVZBUlMKLSN1bmRlZglTVEFURVNFVFVQCi0jdW5kZWYJU1RBVEVURUFSRE9XTgotI3VuZGVmCVNFVFVQCi0jdW5kZWYJb25lc3RhdGUKLSN1bmRlZglJTklUCi0jdW5kZWYJSU5DCi0jdW5kZWYJSVNTVEFURUlOCi0jdW5kZWYJRldECi0jdW5kZWYJQkFDSwotI3VuZGVmCUlTU0VUQkFDSwotI3VuZGVmCVNOQU1FUwotCi0vKiBtYWNyb3MgZm9yIG1hbmlwdWxhdGluZyBzdGF0ZXMsIGxhcmdlIHZlcnNpb24gKi8KLSNkZWZpbmUJc3RhdGVzCWNoYXIgKgotI2RlZmluZQlDTEVBUih2KQltZW1zZXQodiwgMCwgbS0+Zy0+bnN0YXRlcykKLSNkZWZpbmUJU0VUMCh2LCBuKQkoKHYpW25dID0gMCkKLSNkZWZpbmUJU0VUMSh2LCBuKQkoKHYpW25dID0gMSkKLSNkZWZpbmUJSVNTRVQodiwgbikJKCh2KVtuXSkKLSNkZWZpbmUJQVNTSUdOKGQsIHMpCW1lbWNweShkLCBzLCBtLT5nLT5uc3RhdGVzKQotI2RlZmluZQlFUShhLCBiKQkobWVtY21wKGEsIGIsIG0tPmctPm5zdGF0ZXMpID09IDApCi0jZGVmaW5lCVNUQVRFVkFSUwlsb25nIHZuOyBjaGFyICpzcGFjZQotI2RlZmluZQlTVEFURVNFVFVQKG0sIG52KQl7IChtKS0+c3BhY2UgPSBtYWxsb2MoKG52KSoobSktPmctPm5zdGF0ZXMpOyBcCi0JCQkJaWYgKChtKS0+c3BhY2UgPT0gTlVMTCkgcmV0dXJuKFJFR19FU1BBQ0UpOyBcCi0JCQkJKG0pLT52biA9IDA7IH0KLSNkZWZpbmUJU1RBVEVURUFSRE9XTihtKQl7IGZyZWUoKG0pLT5zcGFjZSk7IH0KLSNkZWZpbmUJU0VUVVAodikJKCh2KSA9ICZtLT5zcGFjZVttLT52bisrICogbS0+Zy0+bnN0YXRlc10pCi0jZGVmaW5lCW9uZXN0YXRlCWxvbmcKLSNkZWZpbmUJSU5JVChvLCBuKQkoKG8pID0gKG4pKQotI2RlZmluZQlJTkMobykJKChvKSsrKQotI2RlZmluZQlJU1NUQVRFSU4odiwgbykJKCh2KVtvXSkKLS8qIHNvbWUgYWJicmV2aWF0aW9uczsgbm90ZSB0aGF0IHNvbWUgb2YgdGhlc2Uga25vdyB2YXJpYWJsZSBuYW1lcyEgKi8KLS8qIGRvICJpZiBJJ20gaGVyZSwgSSBjYW4gYWxzbyBiZSB0aGVyZSIgZXRjIHdpdGhvdXQgYnJhbmNoZXMgKi8KLSNkZWZpbmUJRldEKGRzdCwgc3JjLCBuKQkoKGRzdClbaGVyZSsobildIHw9IChzcmMpW2hlcmVdKQotI2RlZmluZQlCQUNLKGRzdCwgc3JjLCBuKQkoKGRzdClbaGVyZS0obildIHw9IChzcmMpW2hlcmVdKQotI2RlZmluZQlJU1NFVEJBQ0sodiwgbikJKCh2KVtoZXJlIC0gKG4pXSkKLS8qIGZ1bmN0aW9uIG5hbWVzICovCi0jZGVmaW5lCUxOQU1FUwkJCS8qIGZsYWcgKi8KLQotI2luY2x1ZGUgImVuZ2luZS5jIgotCi0vKgotIC0gcmVnZXhlYyAtIGludGVyZmFjZSBmb3IgbWF0Y2hpbmcKLSAqCi0gKiBXZSBwdXQgdGhpcyBoZXJlIHNvIHdlIGNhbiBleHBsb2l0IGtub3dsZWRnZSBvZiB0aGUgc3RhdGUgcmVwcmVzZW50YXRpb24KLSAqIHdoZW4gY2hvb3Npbmcgd2hpY2ggbWF0Y2hlciB0byBjYWxsLiAgQWxzbywgYnkgdGhpcyBwb2ludCB0aGUgbWF0Y2hlcnMKLSAqIGhhdmUgYmVlbiBwcm90b3R5cGVkLgotICovCi1pbnQJCQkJLyogMCBzdWNjZXNzLCBSRUdfTk9NQVRDSCBmYWlsdXJlICovCi1yZWdleGVjKGNvbnN0IHJlZ2V4X3QgKnByZWcsIGNvbnN0IGNoYXIgKnN0cmluZywgc2l6ZV90IG5tYXRjaCwKLSAgICByZWdtYXRjaF90IHBtYXRjaFtdLCBpbnQgZWZsYWdzKQotewotCXN0cnVjdCByZV9ndXRzICpnID0gcHJlZy0+cmVfZzsKLSNpZmRlZiBSRURFQlVHCi0jCWRlZmluZQlHT09ERkxBR1MoZikJKGYpCi0jZWxzZQotIwlkZWZpbmUJR09PREZMQUdTKGYpCSgoZikmKFJFR19OT1RCT0x8UkVHX05PVEVPTHxSRUdfU1RBUlRFTkQpKQotI2VuZGlmCi0KLQlpZiAocHJlZy0+cmVfbWFnaWMgIT0gTUFHSUMxIHx8IGctPm1hZ2ljICE9IE1BR0lDMikKLQkJcmV0dXJuKFJFR19CQURQQVQpOwotCWFzc2VydCghKGctPmlmbGFncyZCQUQpKTsKLQlpZiAoZy0+aWZsYWdzJkJBRCkJCS8qIGJhY2tzdG9wIGZvciBuby1kZWJ1ZyBjYXNlICovCi0JCXJldHVybihSRUdfQkFEUEFUKTsKLQllZmxhZ3MgPSBHT09ERkxBR1MoZWZsYWdzKTsKLQotCWlmIChnLT5uc3RhdGVzIDw9IChpbnQpKENIQVJfQklUKnNpemVvZihzdGF0ZXMxKSkgJiYgIShlZmxhZ3MmUkVHX0xBUkdFKSkKLQkJcmV0dXJuKHNtYXRjaGVyKGcsIChjaGFyICopc3RyaW5nLCBubWF0Y2gsIHBtYXRjaCwgZWZsYWdzKSk7Ci0JZWxzZQotCQlyZXR1cm4obG1hdGNoZXIoZywgKGNoYXIgKilzdHJpbmcsIG5tYXRjaCwgcG1hdGNoLCBlZmxhZ3MpKTsKLX0KZGlmZiAtLWdpdCBhL2xpYmMvcmVnZXgvcmVnZnJlZS5jIGIvbGliYy9yZWdleC9yZWdmcmVlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE1N2ViYTMuLjAwMDAwMDAKLS0tIGEvbGliYy9yZWdleC9yZWdmcmVlLmMKKysrIC9kZXYvbnVsbApAQCAtMSw3MSArMCwwIEBACi0vKgkkT3BlbkJTRDogcmVnZnJlZS5jLHYgMS43IDIwMDUvMDgvMDUgMTM6MDM6MDAgZXNwaWUgRXhwICQgKi8KLS8qLQotICogQ29weXJpZ2h0IChjKSAxOTkyLCAxOTkzLCAxOTk0IEhlbnJ5IFNwZW5jZXIuCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTIsIDE5OTMsIDE5OTQKLSAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKLSAqIEhlbnJ5IFNwZW5jZXIuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0gKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICoKLSAqCUAoIylyZWdmcmVlLmMJOC4zIChCZXJrZWxleSkgMy8yMC85NAotICovCi0KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHJlZ2V4Lmg+Ci0KLSNpbmNsdWRlICJ1dGlscy5oIgotI2luY2x1ZGUgInJlZ2V4Mi5oIgotCi0vKgotIC0gcmVnZnJlZSAtIGZyZWUgZXZlcnl0aGluZwotICovCi12b2lkCi1yZWdmcmVlKHJlZ2V4X3QgKnByZWcpCi17Ci0Jc3RydWN0IHJlX2d1dHMgKmc7Ci0KLQlpZiAocHJlZy0+cmVfbWFnaWMgIT0gTUFHSUMxKQkvKiBvb3BzICovCi0JCXJldHVybjsJCQkvKiBuaWNlIHRvIGNvbXBsYWluLCBidXQgaGFyZCAqLwotCi0JZyA9IHByZWctPnJlX2c7Ci0JaWYgKGcgPT0gTlVMTCB8fCBnLT5tYWdpYyAhPSBNQUdJQzIpCS8qIG9vcHMgYWdhaW4gKi8KLQkJcmV0dXJuOwotCXByZWctPnJlX21hZ2ljID0gMDsJCS8qIG1hcmsgaXQgaW52YWxpZCAqLwotCWctPm1hZ2ljID0gMDsJCQkvKiBtYXJrIGl0IGludmFsaWQgKi8KLQotCWlmIChnLT5zdHJpcCAhPSBOVUxMKQotCQlmcmVlKChjaGFyICopZy0+c3RyaXApOwotCWlmIChnLT5zZXRzICE9IE5VTEwpCi0JCWZyZWUoKGNoYXIgKilnLT5zZXRzKTsKLQlpZiAoZy0+c2V0Yml0cyAhPSBOVUxMKQotCQlmcmVlKChjaGFyICopZy0+c2V0Yml0cyk7Ci0JaWYgKGctPm11c3QgIT0gTlVMTCkKLQkJZnJlZShnLT5tdXN0KTsKLQlmcmVlKChjaGFyICopZyk7Ci19CmRpZmYgLS1naXQgYS9saWJjL3JlZ2V4L3V0aWxzLmggYi9saWJjL3JlZ2V4L3V0aWxzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNlMTg0ZmMuLjAwMDAwMDAKLS0tIGEvbGliYy9yZWdleC91dGlscy5oCisrKyAvZGV2L251bGwKQEAgLTEsNTUgKzAsMCBAQAotLyoJJE9wZW5CU0Q6IHV0aWxzLmgsdiAxLjQgMjAwMy8wNi8wMiAyMDoxODozNiBtaWxsZXJ0IEV4cCAkCSovCi0KLS8qLQotICogQ29weXJpZ2h0IChjKSAxOTkyLCAxOTkzLCAxOTk0IEhlbnJ5IFNwZW5jZXIuCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTIsIDE5OTMsIDE5OTQKLSAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKLSAqIEhlbnJ5IFNwZW5jZXIuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0gKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICoKLSAqCUAoIyl1dGlscy5oCTguMyAoQmVya2VsZXkpIDMvMjAvOTQKLSAqLwotCi0vKiB1dGlsaXR5IGRlZmluaXRpb25zICovCi0jZGVmaW5lCURVUE1BWAkJMjU1Ci0jZGVmaW5lCUlORklOSVRZCShEVVBNQVggKyAxKQotI2RlZmluZQlOQwkJKENIQVJfTUFYIC0gQ0hBUl9NSU4gKyAxKQotdHlwZWRlZiB1bnNpZ25lZCBjaGFyIHVjaDsKLQotLyogc3dpdGNoIG9mZiBhc3NlcnRpb25zIChpZiBub3QgYWxyZWFkeSBvZmYpIGlmIG5vIFJFREVCVUcgKi8KLSNpZm5kZWYgUkVERUJVRwotI2lmbmRlZiBOREVCVUcKLSNkZWZpbmUJTkRFQlVHCS8qIG5vIGFzc2VydGlvbnMgcGxlYXNlICovCi0jZW5kaWYKLSNlbmRpZgotI2luY2x1ZGUgPGFzc2VydC5oPgotCi0vKiBmb3Igb2xkIHN5c3RlbXMgd2l0aCBiY29weSgpIGJ1dCBubyBtZW1tb3ZlKCkgKi8KLSNpZmRlZiBVU0VCQ09QWQotI2RlZmluZQltZW1tb3ZlKGQsIHMsIGMpCWJjb3B5KHMsIGQsIGMpCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMvc3RkaW8vY2xyZXJyLmMgYi9saWJjL3N0ZGlvL2NscmVyci5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYjZjNGRmLi4wMDAwMDAwCi0tLSBhL2xpYmMvc3RkaW8vY2xyZXJyLmMKKysrIC9kZXYvbnVsbApAQCAtMSw0NCArMCwwIEBACi0vKgkkT3BlbkJTRDogY2xyZXJyLmMsdiAxLjYgMjAwNS8wOC8wOCAwODowNTozNiBlc3BpZSBFeHAgJCAqLwotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKLSAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKLSAqIENocmlzIFRvcmVrLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlICJsb2NhbC5oIgotI3VuZGVmCWNsZWFyZXJyCi0KLXZvaWQKLWNsZWFyZXJyKEZJTEUgKmZwKQotewotCUZMT0NLRklMRShmcCk7Ci0JX19zY2xlYXJlcnIoZnApOwotCUZVTkxPQ0tGSUxFKGZwKTsKLX0KZGlmZiAtLWdpdCBhL2xpYmMvc3RkaW8vZmNsb3NlLmMgYi9saWJjL3N0ZGlvL2ZjbG9zZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YzNiYWM0Li4wMDAwMDAwCi0tLSBhL2xpYmMvc3RkaW8vZmNsb3NlLmMKKysrIC9kZXYvbnVsbApAQCAtMSw2MyArMCwwIEBACi0vKgkkT3BlbkJTRDogZmNsb3NlLmMsdiAxLjYgMjAwNS8wOC8wOCAwODowNTozNiBlc3BpZSBFeHAgJCAqLwotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKLSAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKLSAqIENocmlzIFRvcmVrLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSA8ZXJybm8uaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgImxvY2FsLmgiCi0KLWludAotZmNsb3NlKEZJTEUgKmZwKQotewotCWludCByOwotCi0JaWYgKGZwLT5fZmxhZ3MgPT0gMCkgewkvKiBub3Qgb3BlbiEgKi8KLQkJZXJybm8gPSBFQkFERjsKLQkJcmV0dXJuIChFT0YpOwotCX0KLQlGTE9DS0ZJTEUoZnApOwotCVdDSU9fRlJFRShmcCk7Ci0JciA9IGZwLT5fZmxhZ3MgJiBfX1NXUiA/IF9fc2ZsdXNoKGZwKSA6IDA7Ci0JaWYgKGZwLT5fY2xvc2UgIT0gTlVMTCAmJiAoKmZwLT5fY2xvc2UpKGZwLT5fY29va2llKSA8IDApCi0JCXIgPSBFT0Y7Ci0JaWYgKGZwLT5fZmxhZ3MgJiBfX1NNQkYpCi0JCWZyZWUoKGNoYXIgKilmcC0+X2JmLl9iYXNlKTsKLQlpZiAoSEFTVUIoZnApKQotCQlGUkVFVUIoZnApOwotCWlmIChIQVNMQihmcCkpCi0JCUZSRUVMQihmcCk7Ci0JZnAtPl9yID0gZnAtPl93ID0gMDsJLyogTWVzcyB1cCBpZiByZWFjY2Vzc2VkLiAqLwotCWZwLT5fZmxhZ3MgPSAwOwkJLyogUmVsZWFzZSB0aGlzIEZJTEUgZm9yIHJldXNlLiAqLwotCUZVTkxPQ0tGSUxFKGZwKTsKLQlyZXR1cm4gKHIpOwotfQpkaWZmIC0tZ2l0IGEvbGliYy9zdGRpby9mZG9wZW4uYyBiL2xpYmMvc3RkaW8vZmRvcGVuLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFkZjYwOWMuLjAwMDAwMDAKLS0tIGEvbGliYy9zdGRpby9mZG9wZW4uYworKysgL2Rldi9udWxsCkBAIC0xLDc2ICswLDAgQEAKLS8qCSRPcGVuQlNEOiBmZG9wZW4uYyx2IDEuNSAyMDA1LzA4LzA4IDA4OjA1OjM2IGVzcGllIEV4cCAkICovCi0vKi0KLSAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MwotICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQotICogQ2hyaXMgVG9yZWsuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0gKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpbmNsdWRlIDxmY250bC5oPgotI2luY2x1ZGUgPHVuaXN0ZC5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8ZXJybm8uaD4KLSNpbmNsdWRlICJsb2NhbC5oIgotCi1GSUxFICoKLWZkb3BlbihpbnQgZmQsIGNvbnN0IGNoYXIgKm1vZGUpCi17Ci0JRklMRSAqZnA7Ci0JaW50IGZsYWdzLCBvZmxhZ3MsIGZkZmxhZ3MsIHRtcDsKLQotCWlmICgoZmxhZ3MgPSBfX3NmbGFncyhtb2RlLCAmb2ZsYWdzKSkgPT0gMCkKLQkJcmV0dXJuIChOVUxMKTsKLQotCS8qIE1ha2Ugc3VyZSB0aGUgbW9kZSB0aGUgdXNlciB3YW50cyBpcyBhIHN1YnNldCBvZiB0aGUgYWN0dWFsIG1vZGUuICovCi0JaWYgKChmZGZsYWdzID0gZmNudGwoZmQsIEZfR0VURkwsIDApKSA8IDApCi0JCXJldHVybiAoTlVMTCk7Ci0JdG1wID0gZmRmbGFncyAmIE9fQUNDTU9ERTsKLQlpZiAodG1wICE9IE9fUkRXUiAmJiAodG1wICE9IChvZmxhZ3MgJiBPX0FDQ01PREUpKSkgewotCQllcnJubyA9IEVJTlZBTDsKLQkJcmV0dXJuIChOVUxMKTsKLQl9Ci0KLQlpZiAoKGZwID0gX19zZnAoKSkgPT0gTlVMTCkKLQkJcmV0dXJuIChOVUxMKTsKLQlmcC0+X2ZsYWdzID0gZmxhZ3M7Ci0JLyoKLQkgKiBJZiBvcGVuZWQgZm9yIGFwcGVuZGluZywgYnV0IHVuZGVybHlpbmcgZGVzY3JpcHRvciBkb2VzIG5vdCBoYXZlCi0JICogT19BUFBFTkQgYml0IHNldCwgYXNzZXJ0IF9fU0FQUCBzbyB0aGF0IF9fc3dyaXRlKCkgd2lsbCBsc2VlayB0bwotCSAqIGVuZCBiZWZvcmUgZWFjaCB3cml0ZS4KLQkgKi8KLQlpZiAoKG9mbGFncyAmIE9fQVBQRU5EKSAmJiAhKGZkZmxhZ3MgJiBPX0FQUEVORCkpCi0JCWZwLT5fZmxhZ3MgfD0gX19TQVBQOwotCWZwLT5fZmlsZSA9IGZkOwotCWZwLT5fY29va2llID0gZnA7Ci0JZnAtPl9yZWFkID0gX19zcmVhZDsKLQlmcC0+X3dyaXRlID0gX19zd3JpdGU7Ci0JZnAtPl9zZWVrID0gX19zc2VlazsKLQlmcC0+X2Nsb3NlID0gX19zY2xvc2U7Ci0JcmV0dXJuIChmcCk7Ci19CmRpZmYgLS1naXQgYS9saWJjL3N0ZGlvL2Zlb2YuYyBiL2xpYmMvc3RkaW8vZmVvZi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZmE2NWIwLi4wMDAwMDAwCi0tLSBhL2xpYmMvc3RkaW8vZmVvZi5jCisrKyAvZGV2L251bGwKQEAgLTEsNTEgKzAsMCBAQAotLyoJJE9wZW5CU0Q6IGZlb2YuYyx2IDEuNSAyMDA1LzA4LzA4IDA4OjA1OjM2IGVzcGllIEV4cCAkICovCi0vKi0KLSAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MwotICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQotICogQ2hyaXMgVG9yZWsuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0gKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgImxvY2FsLmgiCi0KLS8qCi0gKiBBIHN1YnJvdXRpbmUgdmVyc2lvbiBvZiB0aGUgbWFjcm8gZmVvZi4KLSAqLwotI3VuZGVmIGZlb2YKLQotaW50Ci1mZW9mKEZJTEUgKmZwKQotewotCWludCByZXQ7Ci0KLQlGTE9DS0ZJTEUoZnApOwotCXJldCA9IF9fc2Zlb2YoZnApOwotCUZVTkxPQ0tGSUxFKGZwKTsKLQlyZXR1cm4gKHJldCk7Ci19CmRpZmYgLS1naXQgYS9saWJjL3N0ZGlvL2ZlcnJvci5jIGIvbGliYy9zdGRpby9mZXJyb3IuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGQyY2YwMS4uMDAwMDAwMAotLS0gYS9saWJjL3N0ZGlvL2ZlcnJvci5jCisrKyAvZGV2L251bGwKQEAgLTEsNDUgKzAsMCBAQAotLyoJJE9wZW5CU0Q6IGZlcnJvci5jLHYgMS41IDIwMDUvMDgvMDggMDg6MDU6MzYgZXNwaWUgRXhwICQgKi8KLS8qLQotICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCi0gKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5Ci0gKiBDaHJpcyBUb3Jlay4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0gKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKLSAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0KLS8qCi0gKiBBIHN1YnJvdXRpbmUgdmVyc2lvbiBvZiB0aGUgbWFjcm8gZmVycm9yLgotICovCi0jdW5kZWYgZmVycm9yCi0KLWludAotZmVycm9yKEZJTEUgKmZwKQotewotCXJldHVybiAoX19zZmVycm9yKGZwKSk7Ci19CmRpZmYgLS1naXQgYS9saWJjL3N0ZGlvL2ZnZXRsbi5jIGIvbGliYy9zdGRpby9mZ2V0bG4uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDk0N2RkOC4uMDAwMDAwMAotLS0gYS9saWJjL3N0ZGlvL2ZnZXRsbi5jCisrKyAvZGV2L251bGwKQEAgLTEsMTUzICswLDAgQEAKLS8qCSRPcGVuQlNEOiBmZ2V0bG4uYyx2IDEuNyAyMDA1LzA4LzA4IDA4OjA1OjM2IGVzcGllIEV4cCAkICovCi0vKi0KLSAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MwotICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQotICogQ2hyaXMgVG9yZWsuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0gKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgImxvY2FsLmgiCi0KLS8qCi0gKiBFeHBhbmQgdGhlIGxpbmUgYnVmZmVyLiAgUmV0dXJuIC0xIG9uIGVycm9yLgotI2lmZGVmIG5vdGRlZgotICogVGhlIGBuZXcgc2l6ZScgZG9lcyBub3QgYWNjb3VudCBmb3IgYSB0ZXJtaW5hdGluZyAnXDAnLAotICogc28gd2UgYWRkIDEgaGVyZS4KLSNlbmRpZgotICovCi1zdGF0aWMgaW50Ci1fX3NsYmV4cGFuZChGSUxFICpmcCwgc2l6ZV90IG5ld3NpemUpCi17Ci0Jdm9pZCAqcDsKLQotI2lmZGVmIG5vdGRlZgotCSsrbmV3c2l6ZTsKLSNlbmRpZgotCWlmICgoc2l6ZV90KWZwLT5fbGIuX3NpemUgPj0gbmV3c2l6ZSkKLQkJcmV0dXJuICgwKTsKLQlpZiAoKHAgPSByZWFsbG9jKGZwLT5fbGIuX2Jhc2UsIG5ld3NpemUpKSA9PSBOVUxMKQotCQlyZXR1cm4gKC0xKTsKLQlmcC0+X2xiLl9iYXNlID0gcDsKLQlmcC0+X2xiLl9zaXplID0gbmV3c2l6ZTsKLQlyZXR1cm4gKDApOwotfQotCi0vKgotICogR2V0IGFuIGlucHV0IGxpbmUuICBUaGUgcmV0dXJuZWQgcG9pbnRlciBvZnRlbiAoYnV0IG5vdCBhbHdheXMpCi0gKiBwb2ludHMgaW50byBhIHN0ZGlvIGJ1ZmZlci4gIEZnZXRsaW5lIGRvZXMgbm90IGFsdGVyIHRoZSB0ZXh0IG9mCi0gKiB0aGUgcmV0dXJuZWQgbGluZSAod2hpY2ggaXMgdGh1cyBub3QgYSBDIHN0cmluZyBiZWNhdXNlIGl0IHdpbGwKLSAqIG5vdCBuZWNlc3NhcmlseSBlbmQgd2l0aCAnXDAnKSwgYnV0IGRvZXMgYWxsb3cgY2FsbGVycyB0byBtb2RpZnkKLSAqIGl0IGlmIHRoZXkgd2lzaC4gIFRodXMsIHdlIHNldCBfX1NNT0QgaW4gY2FzZSB0aGUgY2FsbGVyIGRvZXMuCi0gKi8KLWNoYXIgKgotZmdldGxuKEZJTEUgKmZwLCBzaXplX3QgKmxlbnApCi17Ci0JdW5zaWduZWQgY2hhciAqcDsKLQljaGFyICpyZXQ7Ci0Jc2l6ZV90IGxlbjsKLQlzaXplX3Qgb2ZmOwotCi0JRkxPQ0tGSUxFKGZwKTsKLQotCS8qIG1ha2Ugc3VyZSB0aGVyZSBpcyBpbnB1dCAqLwotCWlmIChmcC0+X3IgPD0gMCAmJiBfX3NyZWZpbGwoZnApKQotCQlnb3RvIGVycm9yOwotCi0JLyogbG9vayBmb3IgYSBuZXdsaW5lIGluIHRoZSBpbnB1dCAqLwotCWlmICgocCA9IG1lbWNocigodm9pZCAqKWZwLT5fcCwgJ1xuJywgZnAtPl9yKSkgIT0gTlVMTCkgewotCQkvKgotCQkgKiBGb3VuZCBvbmUuICBGbGFnIGJ1ZmZlciBhcyBtb2RpZmllZCB0byBrZWVwIGZzZWVrIGZyb20KLQkJICogYG9wdGltaXNpbmcnIGEgYmFja3dhcmQgc2VlaywgaW4gY2FzZSB0aGUgdXNlciBzdG9tcHMgb24KLQkJICogdGhlIHRleHQuCi0JCSAqLwotCQlwKys7CQkvKiBhZHZhbmNlIG92ZXIgaXQgKi8KLQkJcmV0ID0gKGNoYXIgKilmcC0+X3A7Ci0JCSpsZW5wID0gbGVuID0gcCAtIGZwLT5fcDsKLQkJZnAtPl9mbGFncyB8PSBfX1NNT0Q7Ci0JCWZwLT5fciAtPSBsZW47Ci0JCWZwLT5fcCA9IHA7Ci0JCUZVTkxPQ0tGSUxFKGZwKTsKLQkJcmV0dXJuIChyZXQpOwotCX0KLQotCS8qCi0JICogV2UgaGF2ZSB0byBjb3B5IHRoZSBjdXJyZW50IGJ1ZmZlcmVkIGRhdGEgdG8gdGhlIGxpbmUgYnVmZmVyLgotCSAqIEFzIGEgYm9udXMsIHRob3VnaCwgd2UgY2FuIGxlYXZlIG9mZiB0aGUgX19TTU9ELgotCSAqCi0JICogT1BUSU1JU1RJQyBpcyBsZW5ndGggdGhhdCB3ZSAob3B0aW1pc3RpY2FsbHkpIGV4cGVjdCB3aWxsCi0JICogYWNjb21tb2RhdGUgdGhlIGByZXN0JyBvZiB0aGUgc3RyaW5nLCBvbiBlYWNoIHRyaXAgdGhyb3VnaCB0aGUKLQkgKiBsb29wIGJlbG93LgotCSAqLwotI2RlZmluZSBPUFRJTUlTVElDIDgwCi0KLQlmb3IgKGxlbiA9IGZwLT5fciwgb2ZmID0gMDs7IGxlbiArPSBmcC0+X3IpIHsKLQkJc2l6ZV90IGRpZmY7Ci0KLQkJLyoKLQkJICogTWFrZSBzdXJlIHRoZXJlIGlzIHJvb20gZm9yIG1vcmUgYnl0ZXMuICBDb3B5IGRhdGEgZnJvbQotCQkgKiBmaWxlIGJ1ZmZlciB0byBsaW5lIGJ1ZmZlciwgcmVmaWxsIGZpbGUgYW5kIGxvb2sgZm9yCi0JCSAqIG5ld2xpbmUuICBUaGUgbG9vcCBzdG9wcyBvbmx5IHdoZW4gd2UgZmluZCBhIG5ld2xpbmUuCi0JCSAqLwotCQlpZiAoX19zbGJleHBhbmQoZnAsIGxlbiArIE9QVElNSVNUSUMpKQotCQkJZ290byBlcnJvcjsKLQkJKHZvaWQpbWVtY3B5KCh2b2lkICopKGZwLT5fbGIuX2Jhc2UgKyBvZmYpLCAodm9pZCAqKWZwLT5fcCwKLQkJICAgIGxlbiAtIG9mZik7Ci0JCW9mZiA9IGxlbjsKLQkJaWYgKF9fc3JlZmlsbChmcCkpCi0JCQlicmVhazsJLyogRU9GIG9yIGVycm9yOiByZXR1cm4gcGFydGlhbCBsaW5lICovCi0JCWlmICgocCA9IG1lbWNocigodm9pZCAqKWZwLT5fcCwgJ1xuJywgZnAtPl9yKSkgPT0gTlVMTCkKLQkJCWNvbnRpbnVlOwotCi0JCS8qIGdvdCBpdDogZmluaXNoIHVwIHRoZSBsaW5lIChsaWtlIGNvZGUgYWJvdmUpICovCi0JCXArKzsKLQkJZGlmZiA9IHAgLSBmcC0+X3A7Ci0JCWxlbiArPSBkaWZmOwotCQlpZiAoX19zbGJleHBhbmQoZnAsIGxlbikpCi0JCQlnb3RvIGVycm9yOwotCQkodm9pZCltZW1jcHkoKHZvaWQgKikoZnAtPl9sYi5fYmFzZSArIG9mZiksICh2b2lkICopZnAtPl9wLAotCQkgICAgZGlmZik7Ci0JCWZwLT5fciAtPSBkaWZmOwotCQlmcC0+X3AgPSBwOwotCQlicmVhazsKLQl9Ci0JKmxlbnAgPSBsZW47Ci0JcmV0ID0gKGNoYXIgKilmcC0+X2xiLl9iYXNlOwotI2lmZGVmIG5vdGRlZgotCXJldFtsZW5dID0gJ1wwJzsKLSNlbmRpZgotCUZVTkxPQ0tGSUxFKGZwKTsKLQlyZXR1cm4gKHJldCk7Ci0KLWVycm9yOgotCSpsZW5wID0gMDsJCS8qID8/PyAqLwotCUZVTkxPQ0tGSUxFKGZwKTsKLQlyZXR1cm4gKE5VTEwpOwkJLyogPz8/ICovCi19CmRpZmYgLS1naXQgYS9saWJjL3N0ZGlvL2ZnZXRwb3MuYyBiL2xpYmMvc3RkaW8vZmdldHBvcy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjE4OGU1Li4wMDAwMDAwCi0tLSBhL2xpYmMvc3RkaW8vZmdldHBvcy5jCisrKyAvZGV2L251bGwKQEAgLTEsNDMgKzAsMCBAQAotLyoJJE9wZW5CU0Q6IGZnZXRwb3MuYyx2IDEuNiAyMDA1LzA4LzA4IDA4OjA1OjM2IGVzcGllIEV4cCAkICovCi0vKi0KLSAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MwotICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQotICogQ2hyaXMgVG9yZWsuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0gKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlIDxzdGRpby5oPgotCi0vKgotICogZmdldHBvczogbGlrZSBmdGVsbG8uCi0gKi8KLWludAotZmdldHBvcyhGSUxFICpmcCwgZnBvc190ICpwb3MpCi17Ci0JcmV0dXJuKCgqcG9zID0gZnRlbGxvKGZwKSkgPT0gKGZwb3NfdCktMSk7Ci19CmRpZmYgLS1naXQgYS9saWJjL3N0ZGlvL2ZnZXRzLmMgYi9saWJjL3N0ZGlvL2ZnZXRzLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMxMWI3YjIuLjAwMDAwMDAKLS0tIGEvbGliYy9zdGRpby9mZ2V0cy5jCisrKyAvZGV2L251bGwKQEAgLTEsMTAyICswLDAgQEAKLS8qCSRPcGVuQlNEOiBmZ2V0cy5jLHYgMS4xMCAyMDA1LzA4LzA4IDA4OjA1OjM2IGVzcGllIEV4cCAkICovCi0vKi0KLSAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MwotICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQotICogQ2hyaXMgVG9yZWsuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0gKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgImxvY2FsLmgiCi0KLS8qCi0gKiBSZWFkIGF0IG1vc3Qgbi0xIGNoYXJhY3RlcnMgZnJvbSB0aGUgZ2l2ZW4gZmlsZS4KLSAqIFN0b3Agd2hlbiBhIG5ld2xpbmUgaGFzIGJlZW4gcmVhZCwgb3IgdGhlIGNvdW50IHJ1bnMgb3V0LgotICogUmV0dXJuIGZpcnN0IGFyZ3VtZW50LCBvciBOVUxMIGlmIG5vIGNoYXJhY3RlcnMgd2VyZSByZWFkLgotICogRG8gbm90IHJldHVybiBOVUxMIGlmIG4gPT0gMS4KLSAqLwotY2hhciAqCi1mZ2V0cyhjaGFyICpidWYsIGludCBuLCBGSUxFICpmcCkKLXsKLQlzaXplX3QgbGVuOwotCWNoYXIgKnM7Ci0JdW5zaWduZWQgY2hhciAqcCwgKnQ7Ci0KLQlpZiAobiA8PSAwKQkJLyogc2FuaXR5IGNoZWNrICovCi0JCXJldHVybiAoTlVMTCk7Ci0KLQlGTE9DS0ZJTEUoZnApOwotCV9TRVRfT1JJRU5UQVRJT04oZnAsIC0xKTsKLQlzID0gYnVmOwotCW4tLTsJCQkvKiBsZWF2ZSBzcGFjZSBmb3IgTlVMICovCi0Jd2hpbGUgKG4gIT0gMCkgewotCQkvKgotCQkgKiBJZiB0aGUgYnVmZmVyIGlzIGVtcHR5LCByZWZpbGwgaXQuCi0JCSAqLwotCQlpZiAoZnAtPl9yIDw9IDApIHsKLQkJCWlmIChfX3NyZWZpbGwoZnApKSB7Ci0JCQkJLyogRU9GL2Vycm9yOiBzdG9wIHdpdGggcGFydGlhbCBvciBubyBsaW5lICovCi0JCQkJaWYgKHMgPT0gYnVmKSB7Ci0JCQkJCUZVTkxPQ0tGSUxFKGZwKTsKLQkJCQkJcmV0dXJuIChOVUxMKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JCWxlbiA9IGZwLT5fcjsKLQkJcCA9IGZwLT5fcDsKLQotCQkvKgotCQkgKiBTY2FuIHRocm91Z2ggYXQgbW9zdCBuIGJ5dGVzIG9mIHRoZSBjdXJyZW50IGJ1ZmZlciwKLQkJICogbG9va2luZyBmb3IgJ1xuJy4gIElmIGZvdW5kLCBjb3B5IHVwIHRvIGFuZCBpbmNsdWRpbmcKLQkJICogbmV3bGluZSwgYW5kIHN0b3AuICBPdGhlcndpc2UsIGNvcHkgZW50aXJlIGNodW5rCi0JCSAqIGFuZCBsb29wLgotCQkgKi8KLQkJaWYgKChpbnQpbGVuID4gbikKLQkJCWxlbiA9IG47Ci0JCXQgPSBtZW1jaHIoKHZvaWQgKilwLCAnXG4nLCBsZW4pOwotCQlpZiAodCAhPSBOVUxMKSB7Ci0JCQlsZW4gPSArK3QgLSBwOwotCQkJZnAtPl9yIC09IGxlbjsKLQkJCWZwLT5fcCA9IHQ7Ci0JCQkodm9pZCltZW1jcHkoKHZvaWQgKilzLCAodm9pZCAqKXAsIGxlbik7Ci0JCQlzW2xlbl0gPSAnXDAnOwotCQkJRlVOTE9DS0ZJTEUoZnApOwotCQkJcmV0dXJuIChidWYpOwotCQl9Ci0JCWZwLT5fciAtPSBsZW47Ci0JCWZwLT5fcCArPSBsZW47Ci0JCSh2b2lkKW1lbWNweSgodm9pZCAqKXMsICh2b2lkICopcCwgbGVuKTsKLQkJcyArPSBsZW47Ci0JCW4gLT0gbGVuOwotCX0KLQkqcyA9ICdcMCc7Ci0JRlVOTE9DS0ZJTEUoZnApOwotCXJldHVybiAoYnVmKTsKLX0KZGlmZiAtLWdpdCBhL2xpYmMvc3RkaW8vZmlsZWV4dC5oIGIvbGliYy9zdGRpby9maWxlZXh0LmgKaW5kZXggMmQwNzA0My4uYjM2YTQ0OCAxMDA2NDQKLS0tIGEvbGliYy9zdGRpby9maWxlZXh0LmgKKysrIGIvbGliYy9zdGRpby9maWxlZXh0LmgKQEAgLTI5LDI0ICsyOSw0MSBAQAogICogJENpdHJ1cyQKICAqLwogCisjaW5jbHVkZSA8cHRocmVhZC5oPgorI2luY2x1ZGUgIndjaW8uaCIKKwogLyoKICAqIGZpbGUgZXh0ZW5zaW9uCiAgKi8KIHN0cnVjdCBfX3NmaWxlZXh0IHsKIAlzdHJ1Y3QJX19zYnVmIF91YjsgLyogdW5nZXRjIGJ1ZmZlciAqLwogCXN0cnVjdCB3Y2hhcl9pb19kYXRhIF93Y2lvOwkvKiB3aWRlIGNoYXIgaW8gc3RhdHVzICovCisJcHRocmVhZF9tdXRleF90IF9sb2NrOyAvKiBmaWxlIGxvY2sgKi8KIH07CiAKKyNkZWZpbmUgX0ZJTEVFWFRfSU5JVElBTElaRVIgIHt7TlVMTCwwfSx7MH0sUFRIUkVBRF9SRUNVUlNJVkVfTVVURVhfSU5JVElBTElaRVJ9CisKICNkZWZpbmUgX0VYVChmcCkgKChzdHJ1Y3QgX19zZmlsZWV4dCAqKSgoZnApLT5fZXh0Ll9iYXNlKSkKICNkZWZpbmUgX1VCKGZwKSBfRVhUKGZwKS0+X3ViCisjZGVmaW5lIF9GTE9DSyhmcCkgIF9FWFQoZnApLT5fbG9jawogCiAjZGVmaW5lIF9GSUxFRVhUX0lOSVQoZnApIFwKIGRvIHsgXAogCV9VQihmcCkuX2Jhc2UgPSBOVUxMOyBcCiAJX1VCKGZwKS5fc2l6ZSA9IDA7IFwKIAlXQ0lPX0lOSVQoZnApOyBcCisJX0ZMT0NLX0lOSVQoZnApOyBcCiB9IHdoaWxlICgwKQogCisvKiBIZWxwZXIgbWFjcm9zIHRvIGF2b2lkIGEgZnVuY3Rpb24gY2FsbCB3aGVuIHlvdSBrbm93IHRoYXQgZnAgaXMgbm90IE5VTEwuCisgKiBOb3RpY2UgdGhhdCB3ZSBrZWVwIF9GTE9DS19JTklUKCkgZmFzdCBieSBzbGlnaHRseSBicmVha2luZyBvdXIgcHRocmVhZAorICogZW5jYXBzdWxhdGlvbi4KKyAqLworI2RlZmluZSBfRkxPQ0tfSU5JVChmcCkgICAgX0ZMT0NLKGZwKS52YWx1ZSA9IF9fUFRIUkVBRF9SRUNVUlNJVkVfTVVURVhfSU5JVF9WQUxVRQorI2RlZmluZSBfRkxPQ0tfTE9DSyhmcCkgICAgcHRocmVhZF9tdXRleF9sb2NrKCZfRkxPQ0soZnApKQorI2RlZmluZSBfRkxPQ0tfVFJZTE9DSyhmcCkgcHRocmVhZF9tdXRleF90cnlsb2NrKCZfRkxPQ0soZnApKQorI2RlZmluZSBfRkxPQ0tfVU5MT0NLKGZwKSAgcHRocmVhZF9tdXRleF91bmxvY2soJl9GTE9DSyhmcCkpCisKICNkZWZpbmUgX0ZJTEVFWFRfU0VUVVAoZiwgZmV4dCkgXAogZG8geyBcCiAJKGYpLT5fZXh0Ll9iYXNlID0gKHVuc2lnbmVkIGNoYXIgKikoZmV4dCk7IFwKZGlmZiAtLWdpdCBhL2xpYmMvc3RkaW8vZmlsZW5vLmMgYi9saWJjL3N0ZGlvL2ZpbGVuby5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYmVmZGViLi4wMDAwMDAwCi0tLSBhL2xpYmMvc3RkaW8vZmlsZW5vLmMKKysrIC9kZXYvbnVsbApAQCAtMSw1MSArMCwwIEBACi0vKgkkT3BlbkJTRDogZmlsZW5vLmMsdiAxLjUgMjAwNS8wOC8wOCAwODowNTozNiBlc3BpZSBFeHAgJCAqLwotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKLSAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKLSAqIENocmlzIFRvcmVrLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlICJsb2NhbC5oIgotCi0vKgotICogQSBzdWJyb3V0aW5lIHZlcnNpb24gb2YgdGhlIG1hY3JvIGZpbGVuby4KLSAqLwotI3VuZGVmIGZpbGVubwotCi1pbnQKLWZpbGVubyhGSUxFICpmcCkKLXsKLQlpbnQgcmV0OwotCi0JRkxPQ0tGSUxFKGZwKTsKLQlyZXQgPSBfX3NmaWxlbm8oZnApOwotCUZVTkxPQ0tGSUxFKGZwKTsKLQlyZXR1cm4gKHJldCk7Ci19CmRpZmYgLS1naXQgYS9saWJjL3N0ZGlvL2ZpbmRmcC5jIGIvbGliYy9zdGRpby9maW5kZnAuYwppbmRleCBhNjU5Yzg3Li44NjMyMzViIDEwMDY0NAotLS0gYS9saWJjL3N0ZGlvL2ZpbmRmcC5jCisrKyBiL2xpYmMvc3RkaW8vZmluZGZwLmMKQEAgLTU4LDcgKzU4LDEyIEBACiBzdGF0aWMgc3RydWN0IGdsdWUgKmxhc3RnbHVlID0gJnVnbHVlOwogX1RIUkVBRF9QUklWQVRFX01VVEVYKF9fc2ZwX211dGV4KTsKIAotc3RhdGljIHN0cnVjdCBfX3NmaWxlZXh0IF9fc0ZleHRbM107CitzdGF0aWMgc3RydWN0IF9fc2ZpbGVleHQgX19zRmV4dFszXSA9IHsKKwlfRklMRUVYVF9JTklUSUFMSVpFUiwKKwlfRklMRUVYVF9JTklUSUFMSVpFUiwKKwlfRklMRUVYVF9JTklUSUFMSVpFUiwKK307CisKIEZJTEUgX19zRlszXSA9IHsKIAlzdGQoX19TUkQsIFNURElOX0ZJTEVOTyksCQkvKiBzdGRpbiAqLwogCXN0ZChfX1NXUiwgU1RET1VUX0ZJTEVOTyksCQkvKiBzdGRvdXQgKi8KQEAgLTE2NiwxMCArMTcxLDkgQEAKICNlbmRpZgogCiAvKgotICogZXhpdCgpIGFuZCBhYm9ydCgpIGNhbGwgX2NsZWFudXAoKSB0aHJvdWdoIHRoZSBjYWxsYmFjayByZWdpc3RlcmVkCi0gKiB3aXRoIF9fYXRleGl0X3JlZ2lzdGVyX2NsZWFudXAoKSwgc2V0IHdoZW5ldmVyIHdlIG9wZW4gb3IgYnVmZmVyIGEKLSAqIGZpbGUuIFRoaXMgY2hpY2FuZXJ5IGlzIGRvbmUgc28gdGhhdCBwcm9ncmFtcyB0aGF0IGRvIG5vdCB1c2Ugc3RkaW8KLSAqIG5lZWQgbm90IGxpbmsgaXQgYWxsIGluLgorICogZXhpdCgpIGNhbGxzIF9jbGVhbnVwKCkgdGhyb3VnaCAqX19jbGVhbnVwLCBzZXQgd2hlbmV2ZXIgd2UKKyAqIG9wZW4gb3IgYnVmZmVyIGEgZmlsZS4gIFRoaXMgY2hpY2FuZXJ5IGlzIGRvbmUgc28gdGhhdCBwcm9ncmFtcworICogdGhhdCBkbyBub3QgdXNlIHN0ZGlvIG5lZWQgbm90IGxpbmsgaXQgYWxsIGluLgogICoKICAqIFRoZSBuYW1lIGBfY2xlYW51cCcgaXMsIGFsYXMsIGZhaXJseSB3ZWxsIGtub3duIG91dHNpZGUgc3RkaW8uCiAgKi8KQEAgLTE5Niw3ICsyMDAsNyBAQAogCQlfRklMRUVYVF9TRVRVUCh1c3VhbCtpLCB1c3VhbGV4dCtpKTsKIAl9CiAJLyogbWFrZSBzdXJlIHdlIGNsZWFuIHVwIG9uIGV4aXQgKi8KLQlfX2F0ZXhpdF9yZWdpc3Rlcl9jbGVhbnVwKF9jbGVhbnVwKTsgLyogY29uc2VydmF0aXZlICovCisJX19jbGVhbnVwID0gX2NsZWFudXA7IC8qIGNvbnNlcnZhdGl2ZSAqLwogCV9fc2RpZGluaXQgPSAxOwogb3V0OgogCV9USFJFQURfUFJJVkFURV9NVVRFWF9VTkxPQ0soX19zaW5pdF9tdXRleCk7CmRpZmYgLS1naXQgYS9saWJjL3N0ZGlvL2ZsYWdzLmMgYi9saWJjL3N0ZGlvL2ZsYWdzLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRkZTA0NDcuLjAwMDAwMDAKLS0tIGEvbGliYy9zdGRpby9mbGFncy5jCisrKyAvZGV2L251bGwKQEAgLTEsODIgKzAsMCBAQAotLyoJJE9wZW5CU0Q6IGZsYWdzLmMsdiAxLjYgMjAwNS8wOC8wOCAwODowNTozNiBlc3BpZSBFeHAgJCAqLwotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKLSAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKLSAqIENocmlzIFRvcmVrLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSA8c3lzL2ZpbGUuaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPGVycm5vLmg+Ci0jaW5jbHVkZSA8ZmNudGwuaD4KLQotLyoKLSAqIFJldHVybiB0aGUgKHN0ZGlvKSBmbGFncyBmb3IgYSBnaXZlbiBtb2RlLiAgU3RvcmUgdGhlIGZsYWdzCi0gKiB0byBiZSBwYXNzZWQgdG8gYW4gb3BlbigpIHN5c2NhbGwgdGhyb3VnaCAqb3B0ci4KLSAqIFJldHVybiAwIG9uIGVycm9yLgotICovCi1pbnQKLV9fc2ZsYWdzKGNvbnN0IGNoYXIgKm1vZGUsIGludCAqb3B0cikKLXsKLQlpbnQgcmV0LCBtLCBvOwotCi0Jc3dpdGNoICgqbW9kZSsrKSB7Ci0KLQljYXNlICdyJzoJLyogb3BlbiBmb3IgcmVhZGluZyAqLwotCQlyZXQgPSBfX1NSRDsKLQkJbSA9IE9fUkRPTkxZOwotCQlvID0gMDsKLQkJYnJlYWs7Ci0KLQljYXNlICd3JzoJLyogb3BlbiBmb3Igd3JpdGluZyAqLwotCQlyZXQgPSBfX1NXUjsKLQkJbSA9IE9fV1JPTkxZOwotCQlvID0gT19DUkVBVCB8IE9fVFJVTkM7Ci0JCWJyZWFrOwotCi0JY2FzZSAnYSc6CS8qIG9wZW4gZm9yIGFwcGVuZGluZyAqLwotCQlyZXQgPSBfX1NXUjsKLQkJbSA9IE9fV1JPTkxZOwotCQlvID0gT19DUkVBVCB8IE9fQVBQRU5EOwotCQlicmVhazsKLQotCWRlZmF1bHQ6CS8qIGlsbGVnYWwgbW9kZSAqLwotCQllcnJubyA9IEVJTlZBTDsKLQkJcmV0dXJuICgwKTsKLQl9Ci0KLQkvKiBbcndhXVwrIG9yIFtyd2FdYlwrIG1lYW5zIHJlYWQgYW5kIHdyaXRlICovCi0JaWYgKCptb2RlID09ICcrJyB8fCAoKm1vZGUgPT0gJ2InICYmIG1vZGVbMV0gPT0gJysnKSkgewotCQlyZXQgPSBfX1NSVzsKLQkJbSA9IE9fUkRXUjsKLQl9Ci0JKm9wdHIgPSBtIHwgbzsKLQlyZXR1cm4gKHJldCk7Ci19CmRpZmYgLS1naXQgYS9saWJjL3N0ZGlvL2Zsb2NrZmlsZS5jIGIvbGliYy9zdGRpby9mbG9ja2ZpbGUuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZThjNzRjNS4uMDAwMDAwMAotLS0gYS9saWJjL3N0ZGlvL2Zsb2NrZmlsZS5jCisrKyAvZGV2L251bGwKQEAgLTEsMjEwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0gKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiAgICBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCi0gKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQotICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAotICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKLSAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUwotICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECi0gKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0gKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotLyogaW1wbGVtZW50IGZsb2NrZmlsZSgpLCBmdHJ5bG9ja2ZpbGUoKSBhbmQgZnVubG9ja2ZpbGUoKQotICoKLSAqIHdlIGNhbid0IHVzZSB0aGUgT3BlbkJTRCBpbXBsZW1lbnRhdGlvbiB3aGljaCB1c2VzIGtlcm5lbC1zcGVjaWZpYwotICogQVBJcyBub3QgYXZhaWxhYmxlIG9uIExpbnV4LgotICoKLSAqIElkZWFsbHksIHRoaXMgd291bGQgYmUgdHJpdmlhbGx5IGltcGxlbWVudGVkIGJ5IGFkZGluZyBhCi0gKiBwdGhyZWFkX211dGV4X3QgZmllbGQgdG8gc3RydWN0IF9fc0ZJTEUgYXMgZGVmaW5lZCBpbgotICogPHN0ZGlvLmg+LgotICoKLSAqIEhvd2V2ZXIsIHNpbmNlIHdlIGRvbid0IHdhbnQgdG8gYnJpbmcgcHRocmVhZCBpbnRvIHRoZSBtaXgKLSAqIGFzIHdlbGwgYXMgY2hhbmdlIHRoZSBzaXplIG9mIGEgcHVibGljIEFQSS9BQkkgc3RydWN0dXJlLAotICogd2UncmUgZ29pbmcgdG8gc3RvcmUgdGhlIGRhdGEgb3V0LW9mLWJhbmQuCi0gKgotICogd2UgdXNlIGEgaGFzaC10YWJsZSB0byBtYXAgRklMRSogcG9pbnRlcnMgdG8gcmVjdXJzaXZlIG11dGV4ZXMKLSAqIGZjbG9zZSgpIHdpbGwgY2FsbCBfX2ZyZW1vdmVsb2NrKCkgZGVmaW5lZCBiZWxvdyB0byByZW1vdmUKLSAqIGEgcG9pbnRlciBmcm9tIHRoZSB0YWJsZS4KLSAqCi0gKiB0aGUgYmVoYXZpb3VyLCBpZiBmY2xvc2UoKSBpcyBjYWxsZWQgd2hpbGUgdGhlIGNvcnJlc3BvbmRpbmcKLSAqIGZpbGUgaXMgbG9ja2VkIGlzIHRvdGFsbHkgdW5kZWZpbmVkLgotICovCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxwdGhyZWFkLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0KLS8qIGEgbm9kZSBpbiB0aGUgaGFzaCB0YWJsZSAqLwotdHlwZWRlZiBzdHJ1Y3QgRmlsZUxvY2sgewotICAgIHN0cnVjdCBGaWxlTG9jayogIG5leHQ7Ci0gICAgRklMRSogICAgICAgICAgICAgZmlsZTsKLSAgICBwdGhyZWFkX211dGV4X3QgICBtdXRleDsKLX0gRmlsZUxvY2s7Ci0KLS8qIHVzZSBhIHN0YXRpYyBoYXNoIHRhYmxlLiBXZSBhc3N1bWUgdGhhdCB3ZSdyZSBub3QgZ29pbmcgdG8KLSAqIGxvY2sgYSByZWFsbHkgbGFyZ2UgbnVtYmVyIG9mIEZJTEUqIG9iamVjdHMgb24gYW4gZW1iZWRkZWQKLSAqIHN5c3RlbS4KLSAqLwotI2RlZmluZSAgRklMRV9MT0NLX0JVQ0tFVFMgIDMyCi0KLXR5cGVkZWYgc3RydWN0IHsKLSAgICBwdGhyZWFkX211dGV4X3QgICBsb2NrOwotICAgIEZpbGVMb2NrKiAgICAgICAgIGJ1Y2tldHNbIEZJTEVfTE9DS19CVUNLRVRTIF07Ci19IExvY2tUYWJsZTsKLQotc3RhdGljIExvY2tUYWJsZSogICAgICBfbG9ja1RhYmxlOwotc3RhdGljIHB0aHJlYWRfb25jZV90ICBfbG9ja1RhYmxlX29uY2UgPSBQVEhSRUFEX09OQ0VfSU5JVDsKLQotc3RhdGljIHZvaWQKLWxvY2tfdGFibGVfaW5pdCggdm9pZCApCi17Ci0gICAgX2xvY2tUYWJsZSA9IG1hbGxvYyhzaXplb2YoKl9sb2NrVGFibGUpKTsKLSAgICBpZiAoX2xvY2tUYWJsZSAhPSBOVUxMKSB7Ci0gICAgICAgIHB0aHJlYWRfbXV0ZXhfaW5pdCgmX2xvY2tUYWJsZS0+bG9jaywgTlVMTCk7Ci0gICAgICAgIG1lbXNldChfbG9ja1RhYmxlLT5idWNrZXRzLCAwLCBzaXplb2YoX2xvY2tUYWJsZS0+YnVja2V0cykpOwotICAgIH0KLX0KLQotc3RhdGljIExvY2tUYWJsZSoKLWxvY2tfdGFibGVfbG9jayggdm9pZCApCi17Ci0gICAgcHRocmVhZF9vbmNlKCAmX2xvY2tUYWJsZV9vbmNlLCBsb2NrX3RhYmxlX2luaXQgKTsKLSAgICBwdGhyZWFkX211dGV4X2xvY2soICZfbG9ja1RhYmxlLT5sb2NrICk7Ci0gICAgcmV0dXJuIF9sb2NrVGFibGU7Ci19Ci0KLXN0YXRpYyB2b2lkCi1sb2NrX3RhYmxlX3VubG9jayggTG9ja1RhYmxlKiAgdCApCi17Ci0gICAgcHRocmVhZF9tdXRleF91bmxvY2soICZ0LT5sb2NrICk7Ci19Ci0KLXN0YXRpYyBGaWxlTG9jayoqCi1sb2NrX3RhYmxlX2xvb2t1cCggTG9ja1RhYmxlKiAgdCwgRklMRSogIGYgKQotewotICAgIHVpbnQzMl90ICAgIGhhc2ggPSAodWludDMyX3QpKHZvaWQqKWY7Ci0gICAgRmlsZUxvY2sqKiAgcG5vZGU7Ci0KLSAgICBoYXNoID0gKGhhc2ggPj4gMikgXiAoaGFzaCA8PCAxNyk7Ci0gICAgcG5vZGUgPSAmdC0+YnVja2V0c1toYXNoICUgRklMRV9MT0NLX0JVQ0tFVFNdOwotICAgIGZvciAoOzspIHsKLSAgICAgICAgRmlsZUxvY2sqICBub2RlID0gKnBub2RlOwotICAgICAgICBpZiAobm9kZSA9PSBOVUxMIHx8IG5vZGUtPmZpbGUgPT0gZikKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBwbm9kZSA9ICZub2RlLT5uZXh0OwotICAgIH0KLSAgICByZXR1cm4gcG5vZGU7Ci19Ci0KLXZvaWQKLWZsb2NrZmlsZShGSUxFICogZnApCi17Ci0gICAgTG9ja1RhYmxlKiAgdCA9IGxvY2tfdGFibGVfbG9jaygpOwotCi0gICAgaWYgKHQgIT0gTlVMTCkgewotICAgICAgICBGaWxlTG9jayoqICBsb29rdXAgPSBsb2NrX3RhYmxlX2xvb2t1cCh0LCBmcCk7Ci0gICAgICAgIEZpbGVMb2NrKiAgIGxvY2sgICA9ICpsb29rdXA7Ci0KLSAgICAgICAgaWYgKGxvY2sgPT0gTlVMTCkgewotICAgICAgICAgICAgcHRocmVhZF9tdXRleGF0dHJfdCAgYXR0cjsKLQotICAgICAgICAgICAgLyogY3JlYXRlIGEgbmV3IG5vZGUgaW4gdGhlIGhhc2ggdGFibGUgKi8KLSAgICAgICAgICAgIGxvY2sgPSBtYWxsb2Moc2l6ZW9mKCpsb2NrKSk7Ci0gICAgICAgICAgICBpZiAobG9jayA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgbG9ja190YWJsZV91bmxvY2sodCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgbG9jay0+bmV4dCAgICAgICAgPSBOVUxMOwotICAgICAgICAgICAgbG9jay0+ZmlsZSAgICAgICAgPSBmcDsKLQotICAgICAgICAgICAgcHRocmVhZF9tdXRleGF0dHJfaW5pdCgmYXR0cik7Ci0gICAgICAgICAgICBwdGhyZWFkX211dGV4YXR0cl9zZXR0eXBlKCZhdHRyLCBQVEhSRUFEX01VVEVYX1JFQ1VSU0lWRSk7Ci0gICAgICAgICAgICBwdGhyZWFkX211dGV4X2luaXQoICZsb2NrLT5tdXRleCwgJmF0dHIgKTsKLQotICAgICAgICAgICAgKmxvb2t1cCAgICAgICAgICAgPSBsb2NrOwotICAgICAgICB9Ci0gICAgICAgIGxvY2tfdGFibGVfdW5sb2NrKHQpOwotCi0gICAgICAgIC8qIHdlIGFzc3VtZSB0aGF0IGFub3RoZXIgdGhyZWFkIGRpZG4ndCBkZXN0cm95ICdsb2NrJwotICAgICAgICAqIGJ5IGNhbGxpbmcgZmNsb3NlKCkgb24gdGhlIEZJTEUqLiBUaGlzIGNhbiBoYXBwZW4gaWYKLSAgICAgICAgKiB0aGUgY2xpZW50IGlzICpyZWFsbHkqIGJ1Z2d5LCBidXQgd2UgZG9uJ3QgY2FyZSBhYm91dAotICAgICAgICAqIHN1Y2ggY29kZSBoZXJlLgotICAgICAgICAqLwotICAgICAgICBwdGhyZWFkX211dGV4X2xvY2soJmxvY2stPm11dGV4KTsKLSAgICB9Ci19Ci0KLQotaW50Ci1mdHJ5bG9ja2ZpbGUoRklMRSAqZnApCi17Ci0gICAgaW50ICAgICAgICAgcmV0ID0gLTE7Ci0gICAgTG9ja1RhYmxlKiAgdCAgID0gbG9ja190YWJsZV9sb2NrKCk7Ci0KLSAgICBpZiAodCAhPSBOVUxMKSB7Ci0gICAgICAgIEZpbGVMb2NrKiogIGxvb2t1cCA9IGxvY2tfdGFibGVfbG9va3VwKHQsIGZwKTsKLSAgICAgICAgRmlsZUxvY2sqICAgbG9jayAgID0gKmxvb2t1cDsKLQotICAgICAgICBsb2NrX3RhYmxlX3VubG9jayh0KTsKLQotICAgICAgICAvKiBzZWUgYWJvdmUgY29tbWVudCBhYm91dCB3aHkgd2UgYXNzdW1lIHRoYXQgJ2xvY2snIGNhbgotICAgICAgICAqIGJlIGFjY2Vzc2VkIGZyb20gaGVyZQotICAgICAgICAqLwotICAgICAgICBpZiAobG9jayAhPSBOVUxMICYmICFwdGhyZWFkX211dGV4X3RyeWxvY2soJmxvY2stPm11dGV4KSkgewotICAgICAgICAgICAgcmV0ID0gMDsgIC8qIHNpZ25hbCBzdWNjZXNzICovCi0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHJldDsKLX0KLQotdm9pZAotZnVubG9ja2ZpbGUoRklMRSAqIGZwKQotewotICAgIExvY2tUYWJsZSogIHQgPSBsb2NrX3RhYmxlX2xvY2soKTsKLQotICAgIGlmICh0ICE9IE5VTEwpIHsKLSAgICAgICAgRmlsZUxvY2sqKiAgbG9va3VwID0gbG9ja190YWJsZV9sb29rdXAodCwgZnApOwotICAgICAgICBGaWxlTG9jayogICBsb2NrICAgPSAqbG9va3VwOwotCi0gICAgICAgIGlmIChsb2NrICE9IE5VTEwpCi0gICAgICAgICAgICBwdGhyZWFkX211dGV4X3VubG9jaygmbG9jay0+bXV0ZXgpOwotCi0gICAgICAgIGxvY2tfdGFibGVfdW5sb2NrKHQpOwotICAgIH0KLX0KLQotCi0vKiBjYWxsZWQgZnJvbSBmY2xvc2UoKSB0byByZW1vdmUgdGhlIGZpbGUgbG9jayAqLwotX19MSUJDX0hJRERFTl9fIHZvaWQKLV9fZnJlbW92ZWxvY2soRklMRSogIGZwKQotewotICAgIExvY2tUYWJsZSogIHQgPSBsb2NrX3RhYmxlX2xvY2soKTsKLQotICAgIGlmICh0ICE9IE5VTEwpIHsKLSAgICAgICAgRmlsZUxvY2sqKiAgbG9va3VwID0gbG9ja190YWJsZV9sb29rdXAodCwgZnApOwotICAgICAgICBGaWxlTG9jayogICBsb2NrICAgPSAqbG9va3VwOwotCi0gICAgICAgIGlmIChsb2NrICE9IE5VTEwpIHsKLSAgICAgICAgICAgICpsb29rdXAgICA9IGxvY2stPm5leHQ7Ci0gICAgICAgICAgICBsb2NrLT5maWxlID0gTlVMTDsKLSAgICAgICAgfQotICAgICAgICBsb2NrX3RhYmxlX3VubG9jayh0KTsKLSAgICAgICAgZnJlZShsb2NrKTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9saWJjL3N0ZGlvL2ZvcGVuLmMgYi9saWJjL3N0ZGlvL2ZvcGVuLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE2Y2RkZDMuLjAwMDAwMDAKLS0tIGEvbGliYy9zdGRpby9mb3Blbi5jCisrKyAvZGV2L251bGwKQEAgLTEsNzYgKzAsMCBAQAotLyoJJE9wZW5CU0Q6IGZvcGVuLmMsdiAxLjUgMjAwNS8wOC8wOCAwODowNTozNiBlc3BpZSBFeHAgJCAqLwotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKLSAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKLSAqIENocmlzIFRvcmVrLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSA8c3lzL3N0YXQuaD4KLSNpbmNsdWRlIDxmY250bC5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8ZXJybm8uaD4KLSNpbmNsdWRlICJsb2NhbC5oIgotI2luY2x1ZGUgPGxpbnV4L3N0YXQuaD4KLQotRklMRSAqCi1mb3Blbihjb25zdCBjaGFyICpmaWxlLCBjb25zdCBjaGFyICptb2RlKQotewotCUZJTEUgKmZwOwotCWludCBmOwotCWludCBmbGFncywgb2ZsYWdzOwotCi0JaWYgKChmbGFncyA9IF9fc2ZsYWdzKG1vZGUsICZvZmxhZ3MpKSA9PSAwKQotCQlyZXR1cm4gKE5VTEwpOwotCWlmICgoZnAgPSBfX3NmcCgpKSA9PSBOVUxMKQotCQlyZXR1cm4gKE5VTEwpOwotCWlmICgoZiA9IG9wZW4oZmlsZSwgb2ZsYWdzLCBERUZGSUxFTU9ERSkpIDwgMCkgewotCQlmcC0+X2ZsYWdzID0gMDsJCQkvKiByZWxlYXNlICovCi0JCXJldHVybiAoTlVMTCk7Ci0JfQotCWZwLT5fZmlsZSA9IGY7Ci0JZnAtPl9mbGFncyA9IGZsYWdzOwotCWZwLT5fY29va2llID0gZnA7Ci0JZnAtPl9yZWFkID0gX19zcmVhZDsKLQlmcC0+X3dyaXRlID0gX19zd3JpdGU7Ci0JZnAtPl9zZWVrID0gX19zc2VlazsKLQlmcC0+X2Nsb3NlID0gX19zY2xvc2U7Ci0KLQkvKgotCSAqIFdoZW4gb3BlbmluZyBpbiBhcHBlbmQgbW9kZSwgZXZlbiB0aG91Z2ggd2UgdXNlIE9fQVBQRU5ELAotCSAqIHdlIG5lZWQgdG8gc2VlayB0byB0aGUgZW5kIHNvIHRoYXQgZnRlbGwoKSBnZXRzIHRoZSByaWdodAotCSAqIGFuc3dlci4gIElmIHRoZSB1c2VyIHRoZW4gYWx0ZXJzIHRoZSBzZWVrIHBvaW50ZXIsIG9yCi0JICogdGhlIGZpbGUgZXh0ZW5kcywgdGhpcyB3aWxsIGZhaWwsIGJ1dCB0aGVyZSBpcyBub3QgbXVjaAotCSAqIHdlIGNhbiBkbyBhYm91dCB0aGlzLiAgKFdlIGNvdWxkIHNldCBfX1NBUFAgYW5kIGNoZWNrIGluCi0JICogZnNlZWsgYW5kIGZ0ZWxsLikKLQkgKi8KLQlpZiAob2ZsYWdzICYgT19BUFBFTkQpCi0JCSh2b2lkKSBfX3NzZWVrKCh2b2lkICopZnAsIChmcG9zX3QpMCwgU0VFS19FTkQpOwotCXJldHVybiAoZnApOwotfQpkaWZmIC0tZ2l0IGEvbGliYy9zdGRpby9mcHVyZ2UuYyBiL2xpYmMvc3RkaW8vZnB1cmdlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUwNGM0ZmUuLjAwMDAwMDAKLS0tIGEvbGliYy9zdGRpby9mcHVyZ2UuYworKysgL2Rldi9udWxsCkBAIC0xLDYxICswLDAgQEAKLS8qCSRPcGVuQlNEOiBmcHVyZ2UuYyx2IDEuNiAyMDA1LzA4LzA4IDA4OjA1OjM2IGVzcGllIEV4cCAkICovCi0vKi0KLSAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MwotICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQotICogQ2hyaXMgVG9yZWsuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0gKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlIDxlcnJuby5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSAibG9jYWwuaCIKLQotLyoKLSAqIGZwdXJnZTogbGlrZSBmZmx1c2gsIGJ1dCB3aXRob3V0IHdyaXRpbmcgYW55dGhpbmc6IGxlYXZlIHRoZQotICogZ2l2ZW4gRklMRSdzIGJ1ZmZlciBlbXB0eS4KLSAqLwotaW50Ci1mcHVyZ2UoRklMRSAqZnApCi17Ci0JRkxPQ0tGSUxFKGZwKTsKLQlpZiAoIWZwLT5fZmxhZ3MpIHsKLQkJRlVOTE9DS0ZJTEUoZnApOwotCQllcnJubyA9IEVCQURGOwotCQlyZXR1cm4oRU9GKTsKLQl9Ci0KLQlpZiAoSEFTVUIoZnApKQotCQlGUkVFVUIoZnApOwotCVdDSU9fRlJFRShmcCk7Ci0JZnAtPl9wID0gZnAtPl9iZi5fYmFzZTsKLQlmcC0+X3IgPSAwOwotCWZwLT5fdyA9IGZwLT5fZmxhZ3MgJiAoX19TTEJGfF9fU05CRikgPyAwIDogZnAtPl9iZi5fc2l6ZTsKLQlGVU5MT0NLRklMRShmcCk7Ci0JcmV0dXJuICgwKTsKLX0KZGlmZiAtLWdpdCBhL2xpYmMvc3RkaW8vZnB1dHMuYyBiL2xpYmMvc3RkaW8vZnB1dHMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzI0NjJiYS4uMDAwMDAwMAotLS0gYS9saWJjL3N0ZGlvL2ZwdXRzLmMKKysrIC9kZXYvbnVsbApAQCAtMSw1OCArMCwwIEBACi0vKgkkT3BlbkJTRDogZnB1dHMuYyx2IDEuNyAyMDA1LzA4LzA4IDA4OjA1OjM2IGVzcGllIEV4cCAkICovCi0vKi0KLSAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MwotICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQotICogQ2hyaXMgVG9yZWsuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0gKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgImxvY2FsLmgiCi0jaW5jbHVkZSAiZnZ3cml0ZS5oIgotCi0vKgotICogV3JpdGUgdGhlIGdpdmVuIHN0cmluZyB0byB0aGUgZ2l2ZW4gZmlsZS4KLSAqLwotaW50Ci1mcHV0cyhjb25zdCBjaGFyICpzLCBGSUxFICpmcCkKLXsKLQlzdHJ1Y3QgX19zdWlvIHVpbzsKLQlzdHJ1Y3QgX19zaW92IGlvdjsKLQlpbnQgcmV0OwotCi0JaW92Lmlvdl9iYXNlID0gKHZvaWQgKilzOwotCWlvdi5pb3ZfbGVuID0gdWlvLnVpb19yZXNpZCA9IHN0cmxlbihzKTsKLQl1aW8udWlvX2lvdiA9ICZpb3Y7Ci0JdWlvLnVpb19pb3ZjbnQgPSAxOwotCUZMT0NLRklMRShmcCk7Ci0JX1NFVF9PUklFTlRBVElPTihmcCwgLTEpOwotCXJldCA9IF9fc2Z2d3JpdGUoZnAsICZ1aW8pOwotCUZVTkxPQ0tGSUxFKGZwKTsKLQlyZXR1cm4gKHJldCk7Ci19CmRpZmYgLS1naXQgYS9saWJjL3N0ZGlvL2ZyZW9wZW4uYyBiL2xpYmMvc3RkaW8vZnJlb3Blbi5jCmluZGV4IGRhM2E2NzQuLmYwMzg2ZTkgMTAwNjQ0Ci0tLSBhL2xpYmMvc3RkaW8vZnJlb3Blbi5jCisrKyBiL2xpYmMvc3RkaW8vZnJlb3Blbi5jCkBAIC0zMSw2ICszMSw4IEBACiAgKiBTVUNIIERBTUFHRS4KICAqLwogCisjZGVmaW5lIF9fVVNFX0JTRAorCiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiAjaW5jbHVkZSA8c3lzL3N0YXQuaD4KICNpbmNsdWRlIDxmY250bC5oPgpkaWZmIC0tZ2l0IGEvbGliYy9zdGRpby9mc2V0cG9zLmMgYi9saWJjL3N0ZGlvL2ZzZXRwb3MuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTYyNGZlNS4uMDAwMDAwMAotLS0gYS9saWJjL3N0ZGlvL2ZzZXRwb3MuYworKysgL2Rldi9udWxsCkBAIC0xLDQzICswLDAgQEAKLS8qCSRPcGVuQlNEOiBmc2V0cG9zLmMsdiAxLjYgMjAwNS8wOC8wOCAwODowNTozNiBlc3BpZSBFeHAgJCAqLwotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKLSAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKLSAqIENocmlzIFRvcmVrLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSA8c3RkaW8uaD4KLQotLyoKLSAqIGZzZXRwb3M6IGxpa2UgZnNlZWtvLgotICovCi1pbnQKLWZzZXRwb3MoRklMRSAqaW9wLCBjb25zdCBmcG9zX3QgKnBvcykKLXsKLQlyZXR1cm4gKGZzZWVrbyhpb3AsIChvZmZfdCkqcG9zLCBTRUVLX1NFVCkpOwotfQpkaWZmIC0tZ2l0IGEvbGliYy9zdGRpby9mdW5vcGVuLmMgYi9saWJjL3N0ZGlvL2Z1bm9wZW4uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjg1ZWU5Ni4uMDAwMDAwMAotLS0gYS9saWJjL3N0ZGlvL2Z1bm9wZW4uYworKysgL2Rldi9udWxsCkBAIC0xLDY4ICswLDAgQEAKLS8qCSRPcGVuQlNEOiBmdW5vcGVuLmMsdiAxLjggMjAwNS8wOC8wOCAwODowNTozNiBlc3BpZSBFeHAgJCAqLwotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKLSAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKLSAqIENocmlzIFRvcmVrLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxlcnJuby5oPgotI2luY2x1ZGUgImxvY2FsLmgiCi0KLUZJTEUgKgotZnVub3Blbihjb25zdCB2b2lkICpjb29raWUsIGludCAoKnJlYWRmbikodm9pZCAqLCBjaGFyICosIGludCksCi0JaW50ICgqd3JpdGVmbikodm9pZCAqLCBjb25zdCBjaGFyICosIGludCksCi0JZnBvc190ICgqc2Vla2ZuKSh2b2lkICosIGZwb3NfdCwgaW50KSwgaW50ICgqY2xvc2Vmbikodm9pZCAqKSkKLXsKLQlGSUxFICpmcDsKLQlpbnQgZmxhZ3M7Ci0KLQlpZiAocmVhZGZuID09IE5VTEwpIHsKLQkJaWYgKHdyaXRlZm4gPT0gTlVMTCkgewkJLyogaWxsZWdhbCAqLwotCQkJZXJybm8gPSBFSU5WQUw7Ci0JCQlyZXR1cm4gKE5VTEwpOwotCQl9IGVsc2UKLQkJCWZsYWdzID0gX19TV1I7CQkvKiB3cml0ZSBvbmx5ICovCi0JfSBlbHNlIHsKLQkJaWYgKHdyaXRlZm4gPT0gTlVMTCkKLQkJCWZsYWdzID0gX19TUkQ7CQkvKiByZWFkIG9ubHkgKi8KLQkJZWxzZQotCQkJZmxhZ3MgPSBfX1NSVzsJCS8qIHJlYWQtd3JpdGUgKi8KLQl9Ci0JaWYgKChmcCA9IF9fc2ZwKCkpID09IE5VTEwpCi0JCXJldHVybiAoTlVMTCk7Ci0JZnAtPl9mbGFncyA9IGZsYWdzOwotCWZwLT5fZmlsZSA9IC0xOwotCWZwLT5fY29va2llID0gKHZvaWQgKiljb29raWU7CQkvKiBTQUZFOiBjb29raWUgbm90IG1vZGlmaWVkICovCi0JZnAtPl9yZWFkID0gcmVhZGZuOwotCWZwLT5fd3JpdGUgPSB3cml0ZWZuOwotCWZwLT5fc2VlayA9IHNlZWtmbjsKLQlmcC0+X2Nsb3NlID0gY2xvc2VmbjsKLQlyZXR1cm4gKGZwKTsKLX0KZGlmZiAtLWdpdCBhL2xpYmMvc3RkaW8vZndhbGsuYyBiL2xpYmMvc3RkaW8vZndhbGsuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjFkZjg5MS4uMDAwMDAwMAotLS0gYS9saWJjL3N0ZGlvL2Z3YWxrLmMKKysrIC9kZXYvbnVsbApAQCAtMSw1MyArMCwwIEBACi0vKgkkT3BlbkJTRDogZndhbGsuYyx2IDEuNyAyMDA1LzA4LzA4IDA4OjA1OjM2IGVzcGllIEV4cCAkICovCi0vKi0KLSAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MwotICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQotICogQ2hyaXMgVG9yZWsuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0gKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlIDxlcnJuby5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSAibG9jYWwuaCIKLSNpbmNsdWRlICJnbHVlLmgiCi0KLWludAotX2Z3YWxrKGludCAoKmZ1bmN0aW9uKShGSUxFICopKQotewotCUZJTEUgKmZwOwotCWludCBuLCByZXQ7Ci0Jc3RydWN0IGdsdWUgKmc7Ci0KLQlyZXQgPSAwOwotCWZvciAoZyA9ICZfX3NnbHVlOyBnICE9IE5VTEw7IGcgPSBnLT5uZXh0KQotCQlmb3IgKGZwID0gZy0+aW9icywgbiA9IGctPm5pb2JzOyAtLW4gPj0gMDsgZnArKykgewotCQkJaWYgKChmcC0+X2ZsYWdzICE9IDApICYmICgoZnAtPl9mbGFncyAmIF9fU0lHTikgPT0gMCkpCi0JCQkJcmV0IHw9ICgqZnVuY3Rpb24pKGZwKTsKLQkJfQotCXJldHVybiAocmV0KTsKLX0KZGlmZiAtLWdpdCBhL2xpYmMvc3RkaW8vZndyaXRlLmMgYi9saWJjL3N0ZGlvL2Z3cml0ZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhOTczMTNlLi4wMDAwMDAwCi0tLSBhL2xpYmMvc3RkaW8vZndyaXRlLmMKKysrIC9kZXYvbnVsbApAQCAtMSw2NiArMCwwIEBACi0vKgkkT3BlbkJTRDogZndyaXRlLmMsdiAxLjUgMjAwNS8wOC8wOCAwODowNTozNiBlc3BpZSBFeHAgJCAqLwotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKLSAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKLSAqIENocmlzIFRvcmVrLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlICJsb2NhbC5oIgotI2luY2x1ZGUgImZ2d3JpdGUuaCIKLQotLyoKLSAqIFdyaXRlIGBjb3VudCcgb2JqZWN0cyAoZWFjaCBzaXplIGBzaXplJykgZnJvbSBtZW1vcnkgdG8gdGhlIGdpdmVuIGZpbGUuCi0gKiBSZXR1cm4gdGhlIG51bWJlciBvZiB3aG9sZSBvYmplY3RzIHdyaXR0ZW4uCi0gKi8KLXNpemVfdAotZndyaXRlKGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IHNpemUsIHNpemVfdCBjb3VudCwgRklMRSAqZnApCi17Ci0Jc2l6ZV90IG47Ci0Jc3RydWN0IF9fc3VpbyB1aW87Ci0Jc3RydWN0IF9fc2lvdiBpb3Y7Ci0JaW50IHJldDsKLQotCWlvdi5pb3ZfYmFzZSA9ICh2b2lkICopYnVmOwotCXVpby51aW9fcmVzaWQgPSBpb3YuaW92X2xlbiA9IG4gPSBjb3VudCAqIHNpemU7Ci0JdWlvLnVpb19pb3YgPSAmaW92OwotCXVpby51aW9faW92Y250ID0gMTsKLQotCS8qCi0JICogVGhlIHVzdWFsIGNhc2UgaXMgc3VjY2VzcyAoX19zZnZ3cml0ZSByZXR1cm5zIDApOwotCSAqIHNraXAgdGhlIGRpdmlkZSBpZiB0aGlzIGhhcHBlbnMsIHNpbmNlIGRpdmlkZXMgYXJlCi0JICogZ2VuZXJhbGx5IHNsb3cgYW5kIHNpbmNlIHRoaXMgb2NjdXJzIHdoZW5ldmVyIHNpemU9PTAuCi0JICovCi0JRkxPQ0tGSUxFKGZwKTsKLQlyZXQgPSBfX3NmdndyaXRlKGZwLCAmdWlvKTsKLQlGVU5MT0NLRklMRShmcCk7Ci0JaWYgKHJldCA9PSAwKQotCQlyZXR1cm4gKGNvdW50KTsKLQlyZXR1cm4gKChuIC0gdWlvLnVpb19yZXNpZCkgLyBzaXplKTsKLX0KZGlmZiAtLWdpdCBhL2xpYmMvc3RkaW8vZ2V0Yy5jIGIvbGliYy9zdGRpby9nZXRjLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE2YTViMWQuLjAwMDAwMDAKLS0tIGEvbGliYy9zdGRpby9nZXRjLmMKKysrIC9kZXYvbnVsbApAQCAtMSw2MiArMCwwIEBACi0vKgkkT3BlbkJTRDogZ2V0Yy5jLHYgMS42IDIwMDUvMDgvMDggMDg6MDU6MzYgZXNwaWUgRXhwICQgKi8KLS8qLQotICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCi0gKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5Ci0gKiBDaHJpcyBUb3Jlay4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0gKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKLSAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSAibG9jYWwuaCIKLQotLyoKLSAqIEEgc3Vicm91dGluZSB2ZXJzaW9uIG9mIHRoZSBtYWNybyBnZXRjX3VubG9ja2VkLgotICovCi0jdW5kZWYgZ2V0Y191bmxvY2tlZAotCi1pbnQKLWdldGNfdW5sb2NrZWQoRklMRSAqZnApCi17Ci0JcmV0dXJuIChfX3NnZXRjKGZwKSk7Ci19Ci0KLS8qCi0gKiBBIHN1YnJvdXRpbmUgdmVyc2lvbiBvZiB0aGUgbWFjcm8gZ2V0Yy4KLSAqLwotI3VuZGVmIGdldGMKLQotaW50Ci1nZXRjKEZJTEUgKmZwKQotewotCWludCBjOwotCi0JRkxPQ0tGSUxFKGZwKTsKLQljID0gX19zZ2V0YyhmcCk7Ci0JRlVOTE9DS0ZJTEUoZnApOwotCXJldHVybiAoYyk7Ci19CmRpZmYgLS1naXQgYS9saWJjL3N0ZGlvL2dldGNoYXIuYyBiL2xpYmMvc3RkaW8vZ2V0Y2hhci5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NTA4MTdkLi4wMDAwMDAwCi0tLSBhL2xpYmMvc3RkaW8vZ2V0Y2hhci5jCisrKyAvZGV2L251bGwKQEAgLTEsNTggKzAsMCBAQAotLyoJJE9wZW5CU0Q6IGdldGNoYXIuYyx2IDEuNyAyMDA1LzA4LzA4IDA4OjA1OjM2IGVzcGllIEV4cCAkICovCi0vKi0KLSAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MwotICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQotICogQ2hyaXMgVG9yZWsuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0gKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlIDxzdGRpby5oPgotCi0vKgotICogQSBzdWJyb3V0aW5lIHZlcnNpb24gb2YgdGhlIG1hY3JvIGdldGNoYXJfdW5sb2NrZWQuCi0gKi8KLSN1bmRlZiBnZXRjaGFyX3VubG9ja2VkCi0KLWludAotZ2V0Y2hhcl91bmxvY2tlZCh2b2lkKQotewotCXJldHVybiAoZ2V0Y191bmxvY2tlZChzdGRpbikpOwotfQotCi0KLS8qCi0gKiBBIHN1YnJvdXRpbmUgdmVyc2lvbiBvZiB0aGUgbWFjcm8gZ2V0Y2hhci4KLSAqLwotCi0jdW5kZWYgZ2V0Y2hhcgotCi1pbnQKLWdldGNoYXIodm9pZCkKLXsKLQlyZXR1cm4gKGdldGMoc3RkaW4pKTsKLX0KZGlmZiAtLWdpdCBhL2xpYmMvc3RkaW8vbG9jYWwuaCBiL2xpYmMvc3RkaW8vbG9jYWwuaAppbmRleCA2YjIxMTFhLi5lM2E0MGJjIDEwMDY0NAotLS0gYS9saWJjL3N0ZGlvL2xvY2FsLmgKKysrIGIvbGliYy9zdGRpby9sb2NhbC5oCkBAIC0zNSwxMCArMzUsNiBAQAogI2luY2x1ZGUgIndjaW8uaCIKICNpbmNsdWRlICJmaWxlZXh0LmgiCiAKLSNpZm5kZWYgREVGRklMRU1PREUKLSNkZWZpbmUgREVGRklMRU1PREUgIChTX0lSVVNSfFNfSVdVU1J8U19JUkdSUHxTX0lXR1JQfFNfSVJPVEh8U19JV09USCkKLSNlbmRpZgotCiAKIC8qCiAgKiBJbmZvcm1hdGlvbiBsb2NhbCB0byB0aGlzIGltcGxlbWVudGF0aW9uIG9mIHN0ZGlvLApAQCAtNjIsNyArNTgsMTAgQEAKIGludAlfX3NmbGFncyhjb25zdCBjaGFyICosIGludCAqKTsKIGludAlfX3ZmcHJpbnRmKEZJTEUgKiwgY29uc3QgY2hhciAqLCBfX3ZhX2xpc3QpOwogCi1leHRlcm4gdm9pZCBfX2F0ZXhpdF9yZWdpc3Rlcl9jbGVhbnVwKHZvaWQgKCopKHZvaWQpKTsKKy8qCisgKiBGdW5jdGlvbiB0byBjbGVhbiB1cCBzdHJlYW1zLCBjYWxsZWQgZnJvbSBhYm9ydCgpIGFuZCBleGl0KCkuCisgKi8KK2V4dGVybiB2b2lkICgqX19jbGVhbnVwKSh2b2lkKTsKIGV4dGVybiBpbnQgX19zZGlkaW5pdDsKIAogLyoKZGlmZiAtLWdpdCBhL2xpYmMvc3RkaW8vbWFrZWJ1Zi5jIGIvbGliYy9zdGRpby9tYWtlYnVmLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ0N2UyN2MuLjAwMDAwMDAKLS0tIGEvbGliYy9zdGRpby9tYWtlYnVmLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMDcgKzAsMCBAQAotLyoJJE9wZW5CU0Q6IG1ha2VidWYuYyx2IDEuOCAyMDA1LzEyLzI4IDE4OjUwOjIyIG1pbGxlcnQgRXhwICQgKi8KLS8qLQotICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCi0gKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5Ci0gKiBDaHJpcyBUb3Jlay4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0gKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKLSAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPHN5cy9zdGF0Lmg+Ci0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlICJsb2NhbC5oIgotCi0vKgotICogQWxsb2NhdGUgYSBmaWxlIGJ1ZmZlciwgb3Igc3dpdGNoIHRvIHVuYnVmZmVyZWQgSS9PLgotICogUGVyIHRoZSBBTlNJIEMgc3RhbmRhcmQsIEFMTCB0dHkgZGV2aWNlcyBkZWZhdWx0IHRvIGxpbmUgYnVmZmVyZWQuCi0gKgotICogQXMgYSBzaWRlIGVmZmVjdCwgd2Ugc2V0IF9fU09QVCBvciBfX1NOUFQgKGVuL2Rpcy1hYmxlIGZzZWVrCi0gKiBvcHRpbWlzYXRpb24pIHJpZ2h0IGFmdGVyIHRoZSBmc3RhdCgpIHRoYXQgZmluZHMgdGhlIGJ1ZmZlciBzaXplLgotICovCi12b2lkCi1fX3NtYWtlYnVmKEZJTEUgKmZwKQotewotCXZvaWQgKnA7Ci0JaW50IGZsYWdzOwotCXNpemVfdCBzaXplOwotCWludCBjb3VsZGJldHR5OwotCi0JaWYgKGZwLT5fZmxhZ3MgJiBfX1NOQkYpIHsKLQkJZnAtPl9iZi5fYmFzZSA9IGZwLT5fcCA9IGZwLT5fbmJ1ZjsKLQkJZnAtPl9iZi5fc2l6ZSA9IDE7Ci0JCXJldHVybjsKLQl9Ci0JZmxhZ3MgPSBfX3N3aGF0YnVmKGZwLCAmc2l6ZSwgJmNvdWxkYmV0dHkpOwotCWlmICgocCA9IG1hbGxvYyhzaXplKSkgPT0gTlVMTCkgewotCQlmcC0+X2ZsYWdzIHw9IF9fU05CRjsKLQkJZnAtPl9iZi5fYmFzZSA9IGZwLT5fcCA9IGZwLT5fbmJ1ZjsKLQkJZnAtPl9iZi5fc2l6ZSA9IDE7Ci0JCXJldHVybjsKLQl9Ci0JX19hdGV4aXRfcmVnaXN0ZXJfY2xlYW51cChfY2xlYW51cCk7Ci0JZmxhZ3MgfD0gX19TTUJGOwotCWZwLT5fYmYuX2Jhc2UgPSBmcC0+X3AgPSBwOwotCWZwLT5fYmYuX3NpemUgPSBzaXplOwotCWlmIChjb3VsZGJldHR5ICYmIGlzYXR0eShmcC0+X2ZpbGUpKQotCQlmbGFncyB8PSBfX1NMQkY7Ci0JZnAtPl9mbGFncyB8PSBmbGFnczsKLX0KLQotLyoKLSAqIEludGVybmFsIHJvdXRpbmUgdG8gZGV0ZXJtaW5lIGBwcm9wZXInIGJ1ZmZlcmluZyBmb3IgYSBmaWxlLgotICovCi1pbnQKLV9fc3doYXRidWYoRklMRSAqZnAsIHNpemVfdCAqYnVmc2l6ZSwgaW50ICpjb3VsZGJldHR5KQotewotCXN0cnVjdCBzdGF0IHN0OwotCi0JaWYgKGZwLT5fZmlsZSA8IDAgfHwgZnN0YXQoZnAtPl9maWxlLCAmc3QpIDwgMCkgewotCQkqY291bGRiZXR0eSA9IDA7Ci0JCSpidWZzaXplID0gQlVGU0laOwotCQlyZXR1cm4gKF9fU05QVCk7Ci0JfQotCi0JLyogY291bGQgYmUgYSB0dHkgaWZmIGl0IGlzIGEgY2hhcmFjdGVyIGRldmljZSAqLwotCSpjb3VsZGJldHR5ID0gU19JU0NIUihzdC5zdF9tb2RlKTsKLQlpZiAoc3Quc3RfYmxrc2l6ZSA9PSAwKSB7Ci0JCSpidWZzaXplID0gQlVGU0laOwotCQlyZXR1cm4gKF9fU05QVCk7Ci0JfQotCi0JLyoKLQkgKiBPcHRpbWlzZSBmc2VlaygpIG9ubHkgaWYgaXQgaXMgYSByZWd1bGFyIGZpbGUuICAoVGhlIHRlc3QgZm9yCi0JICogX19zc2VlayBpcyBtYWlubHkgcGFyYW5vaWEuKSAgSXQgaXMgc2FmZSB0byBzZXQgX2Jsa3NpemUKLQkgKiB1bmNvbmRpdGlvbmFsbHk7IGl0IHdpbGwgb25seSBiZSB1c2VkIGlmIF9fU09QVCBpcyBhbHNvIHNldC4KLQkgKi8KLQkqYnVmc2l6ZSA9IHN0LnN0X2Jsa3NpemU7Ci0JZnAtPl9ibGtzaXplID0gc3Quc3RfYmxrc2l6ZTsKLQlyZXR1cm4gKChzdC5zdF9tb2RlICYgU19JRk1UKSA9PSBTX0lGUkVHICYmIGZwLT5fc2VlayA9PSBfX3NzZWVrID8KLQkgICAgX19TT1BUIDogX19TTlBUKTsKLX0KZGlmZiAtLWdpdCBhL2xpYmMvc3RkaW8vbWt0ZW1wLmMgYi9saWJjL3N0ZGlvL21rdGVtcC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYWE1NjQwLi4wMDAwMDAwCi0tLSBhL2xpYmMvc3RkaW8vbWt0ZW1wLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxODQgKzAsMCBAQAotLyoJJE9wZW5CU0Q6IG1rdGVtcC5jLHYgMS4xOSAyMDA1LzA4LzA4IDA4OjA1OjM2IGVzcGllIEV4cCAkICovCi0vKgotICogQ29weXJpZ2h0IChjKSAxOTg3LCAxOTkzCi0gKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0gKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKLSAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPHN5cy9zdGF0Lmg+Ci0jaW5jbHVkZSA8ZmNudGwuaD4KLSNpbmNsdWRlIDxlcnJuby5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8Y3R5cGUuaD4KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLQotc3RhdGljIGludCBfZ2V0dGVtcChjaGFyICosIGludCAqLCBpbnQsIGludCk7Ci0KLWV4dGVybiB1aW50MzJfdCAgYXJjNHJhbmRvbSgpOwotCi1pbnQKLW1rc3RlbXBzKGNoYXIgKnBhdGgsIGludCBzbGVuKQotewotCWludCBmZDsKLQotCXJldHVybiAoX2dldHRlbXAocGF0aCwgJmZkLCAwLCBzbGVuKSA/IGZkIDogLTEpOwotfQotCi1pbnQKLW1rc3RlbXAoY2hhciAqcGF0aCkKLXsKLQlpbnQgZmQ7Ci0KLQlyZXR1cm4gKF9nZXR0ZW1wKHBhdGgsICZmZCwgMCwgMCkgPyBmZCA6IC0xKTsKLX0KLQotY2hhciAqCi1ta2R0ZW1wKGNoYXIgKnBhdGgpCi17Ci0JcmV0dXJuKF9nZXR0ZW1wKHBhdGgsIChpbnQgKilOVUxMLCAxLCAwKSA/IHBhdGggOiAoY2hhciAqKU5VTEwpOwotfQotCi1jaGFyICpfbWt0ZW1wKGNoYXIgKik7Ci0KLV9fTElCQ19ISURERU5fXyBjaGFyICoKLV9ta3RlbXAoY2hhciAqcGF0aCkKLXsKLQlyZXR1cm4oX2dldHRlbXAocGF0aCwgKGludCAqKU5VTEwsIDAsIDApID8gcGF0aCA6IChjaGFyICopTlVMTCk7Ci19Ci0KLV9fd2Fybl9yZWZlcmVuY2VzKG1rdGVtcCwKLSAgICAid2FybmluZzogbWt0ZW1wKCkgcG9zc2libHkgdXNlZCB1bnNhZmVseTsgY29uc2lkZXIgdXNpbmcgbWtzdGVtcCgpIik7Ci0KLWNoYXIgKgotbWt0ZW1wKGNoYXIgKnBhdGgpCi17Ci0JcmV0dXJuKF9ta3RlbXAocGF0aCkpOwotfQotCi0KLXN0YXRpYyBpbnQKLV9nZXR0ZW1wKGNoYXIgKnBhdGgsIGludCAqZG9vcGVuLCBpbnQgZG9ta2RpciwgaW50IHNsZW4pCi17Ci0JY2hhciAqc3RhcnQsICp0cnYsICpzdWZmcDsKLQlzdHJ1Y3Qgc3RhdCBzYnVmOwotCWludCBydmFsOwotCXBpZF90IHBpZDsKLQotCWlmIChkb29wZW4gJiYgZG9ta2RpcikgewotCQllcnJubyA9IEVJTlZBTDsKLQkJcmV0dXJuKDApOwotCX0KLQotCWZvciAodHJ2ID0gcGF0aDsgKnRydjsgKyt0cnYpCi0JCTsKLQl0cnYgLT0gc2xlbjsKLQlzdWZmcCA9IHRydjsKLQktLXRydjsKLQlpZiAodHJ2IDwgcGF0aCkgewotCQllcnJubyA9IEVJTlZBTDsKLQkJcmV0dXJuICgwKTsKLQl9Ci0JcGlkID0gZ2V0cGlkKCk7Ci0Jd2hpbGUgKHRydiA+PSBwYXRoICYmICp0cnYgPT0gJ1gnICYmIHBpZCAhPSAwKSB7Ci0JCSp0cnYtLSA9IChwaWQgJSAxMCkgKyAnMCc7Ci0JCXBpZCAvPSAxMDsKLQl9Ci0Jd2hpbGUgKHRydiA+PSBwYXRoICYmICp0cnYgPT0gJ1gnKSB7Ci0JCWNoYXIgYzsKLQotCQlwaWQgPSAoYXJjNHJhbmRvbSgpICYgMHhmZmZmKSAlICgyNisyNik7Ci0JCWlmIChwaWQgPCAyNikKLQkJCWMgPSBwaWQgKyAnQSc7Ci0JCWVsc2UKLQkJCWMgPSAocGlkIC0gMjYpICsgJ2EnOwotCQkqdHJ2LS0gPSBjOwotCX0KLQlzdGFydCA9IHRydiArIDE7Ci0KLQkvKgotCSAqIGNoZWNrIHRoZSB0YXJnZXQgZGlyZWN0b3J5OyBpZiB5b3UgaGF2ZSBzaXggWCdzIGFuZCBpdAotCSAqIGRvZXNuJ3QgZXhpc3QgdGhpcyBydW5zIGZvciBhICp2ZXJ5KiBsb25nIHRpbWUuCi0JICovCi0JaWYgKGRvb3BlbiB8fCBkb21rZGlyKSB7Ci0JCWZvciAoOzsgLS10cnYpIHsKLQkJCWlmICh0cnYgPD0gcGF0aCkKLQkJCQlicmVhazsKLQkJCWlmICgqdHJ2ID09ICcvJykgewotCQkJCSp0cnYgPSAnXDAnOwotCQkJCXJ2YWwgPSBzdGF0KHBhdGgsICZzYnVmKTsKLQkJCQkqdHJ2ID0gJy8nOwotCQkJCWlmIChydmFsICE9IDApCi0JCQkJCXJldHVybigwKTsKLQkJCQlpZiAoIVNfSVNESVIoc2J1Zi5zdF9tb2RlKSkgewotCQkJCQllcnJubyA9IEVOT1RESVI7Ci0JCQkJCXJldHVybigwKTsKLQkJCQl9Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlmb3IgKDs7KSB7Ci0JCWlmIChkb29wZW4pIHsKLQkJCWlmICgoKmRvb3BlbiA9Ci0JCQkgICAgb3BlbihwYXRoLCBPX0NSRUFUfE9fRVhDTHxPX1JEV1IsIDA2MDApKSA+PSAwKQotCQkJCXJldHVybigxKTsKLQkJCWlmIChlcnJubyAhPSBFRVhJU1QpCi0JCQkJcmV0dXJuKDApOwotCQl9IGVsc2UgaWYgKGRvbWtkaXIpIHsKLQkJCWlmIChta2RpcihwYXRoLCAwNzAwKSA9PSAwKQotCQkJCXJldHVybigxKTsKLQkJCWlmIChlcnJubyAhPSBFRVhJU1QpCi0JCQkJcmV0dXJuKDApOwotCQl9IGVsc2UgaWYgKGxzdGF0KHBhdGgsICZzYnVmKSkKLQkJCXJldHVybihlcnJubyA9PSBFTk9FTlQgPyAxIDogMCk7Ci0KLQkJLyogdHJpY2t5IGxpdHRsZSBhbGdvcml0aG0gZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgKi8KLQkJZm9yICh0cnYgPSBzdGFydDs7KSB7Ci0JCQlpZiAoISp0cnYpCi0JCQkJcmV0dXJuICgwKTsKLQkJCWlmICgqdHJ2ID09ICdaJykgewotCQkJCWlmICh0cnYgPT0gc3VmZnApCi0JCQkJCXJldHVybiAoMCk7Ci0JCQkJKnRydisrID0gJ2EnOwotCQkJfSBlbHNlIHsKLQkJCQlpZiAoaXNkaWdpdCgqdHJ2KSkKLQkJCQkJKnRydiA9ICdhJzsKLQkJCQllbHNlIGlmICgqdHJ2ID09ICd6JykJLyogaW5jIGZyb20geiB0byBBICovCi0JCQkJCSp0cnYgPSAnQSc7Ci0JCQkJZWxzZSB7Ci0JCQkJCWlmICh0cnYgPT0gc3VmZnApCi0JCQkJCQlyZXR1cm4gKDApOwotCQkJCQkrKyp0cnY7Ci0JCQkJfQotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JfQotCS8qTk9UUkVBQ0hFRCovCi19CmRpZmYgLS1naXQgYS9saWJjL3N0ZGlvL3B1dGMuYyBiL2xpYmMvc3RkaW8vcHV0Yy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYjA1NTA0Li4wMDAwMDAwCi0tLSBhL2xpYmMvc3RkaW8vcHV0Yy5jCisrKyAvZGV2L251bGwKQEAgLTEsNjcgKzAsMCBAQAotLyoJJE9wZW5CU0Q6IHB1dGMuYyx2IDEuNyAyMDA1LzA4LzA4IDA4OjA1OjM2IGVzcGllIEV4cCAkICovCi0vKi0KLSAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MwotICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQotICogQ2hyaXMgVG9yZWsuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0gKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPGVycm5vLmg+Ci0jaW5jbHVkZSAibG9jYWwuaCIKLQotLyoKLSAqIEEgc3Vicm91dGluZSB2ZXJzaW9uIG9mIHRoZSBtYWNybyBwdXRjX3VubG9ja2VkLgotICovCi0jdW5kZWYgcHV0Y191bmxvY2tlZAotCi1pbnQKLXB1dGNfdW5sb2NrZWQoaW50IGMsIEZJTEUgKmZwKQotewotCWlmIChjYW50d3JpdGUoZnApKSB7Ci0JCWVycm5vID0gRUJBREY7Ci0JCXJldHVybiAoRU9GKTsKLQl9Ci0JcmV0dXJuIChfX3NwdXRjKGMsIGZwKSk7Ci19Ci0KLS8qCi0gKiBBIHN1YnJvdXRpbmUgdmVyc2lvbiBvZiB0aGUgbWFjcm8gcHV0Yy4KLSAqLwotI3VuZGVmIHB1dGMKLQotaW50Ci1wdXRjKGludCBjLCBGSUxFICpmcCkKLXsKLQlpbnQgcmV0OwotCi0JRkxPQ0tGSUxFKGZwKTsKLQlyZXQgPSBwdXRjX3VubG9ja2VkKGMsIGZwKTsKLQlGVU5MT0NLRklMRShmcCk7Ci0JcmV0dXJuIChyZXQpOwotfQpkaWZmIC0tZ2l0IGEvbGliYy9zdGRpby9wdXRjaGFyLmMgYi9saWJjL3N0ZGlvL3B1dGNoYXIuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWVlZDBhMi4uMDAwMDAwMAotLS0gYS9saWJjL3N0ZGlvL3B1dGNoYXIuYworKysgL2Rldi9udWxsCkBAIC0xLDU5ICswLDAgQEAKLS8qCSRPcGVuQlNEOiBwdXRjaGFyLmMsdiAxLjcgMjAwNS8wOC8wOCAwODowNTozNiBlc3BpZSBFeHAgJCAqLwotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKLSAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKLSAqIENocmlzIFRvcmVrLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSA8c3RkaW8uaD4KLQotI3VuZGVmIHB1dGNoYXJfdW5sb2NrZWQKLS8qCi0gKiBBIHN1YnJvdXRpbmcgdmVyc2lvbiBvZiB0aGUgbWFjcm8gcHV0Y2hhcl91bmxvY2tlZAotICovCi1pbnQKLXB1dGNoYXJfdW5sb2NrZWQoaW50IGMpCi17Ci0JRklMRSAqc28gPSBzdGRvdXQ7Ci0KLQlyZXR1cm4gKHB1dGNfdW5sb2NrZWQoYywgc28pKTsKLX0KLQotI3VuZGVmIHB1dGNoYXIKLQotLyoKLSAqIEEgc3Vicm91dGluZSB2ZXJzaW9uIG9mIHRoZSBtYWNybyBwdXRjaGFyCi0gKi8KLWludAotcHV0Y2hhcihpbnQgYykKLXsKLQlGSUxFICpzbyA9IHN0ZG91dDsKLQotCXJldHVybiAocHV0YyhjLCBzbykpOwotfQpkaWZmIC0tZ2l0IGEvbGliYy9zdGRpby9wdXRzLmMgYi9saWJjL3N0ZGlvL3B1dHMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDYwM2EzZC4uMDAwMDAwMAotLS0gYS9saWJjL3N0ZGlvL3B1dHMuYworKysgL2Rldi9udWxsCkBAIC0xLDYxICswLDAgQEAKLS8qCSRPcGVuQlNEOiBwdXRzLmMsdiAxLjcgMjAwNS8wOC8wOCAwODowNTozNiBlc3BpZSBFeHAgJCAqLwotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKLSAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKLSAqIENocmlzIFRvcmVrLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlICJsb2NhbC5oIgotI2luY2x1ZGUgImZ2d3JpdGUuaCIKLQotLyoKLSAqIFdyaXRlIHRoZSBnaXZlbiBzdHJpbmcgdG8gc3Rkb3V0LCBhcHBlbmRpbmcgYSBuZXdsaW5lLgotICovCi1pbnQKLXB1dHMoY29uc3QgY2hhciAqcykKLXsKLQlzaXplX3QgYyA9IHN0cmxlbihzKTsKLQlzdHJ1Y3QgX19zdWlvIHVpbzsKLQlzdHJ1Y3QgX19zaW92IGlvdlsyXTsKLQlpbnQgcmV0OwotCi0JaW92WzBdLmlvdl9iYXNlID0gKHZvaWQgKilzOwotCWlvdlswXS5pb3ZfbGVuID0gYzsKLQlpb3ZbMV0uaW92X2Jhc2UgPSAiXG4iOwotCWlvdlsxXS5pb3ZfbGVuID0gMTsKLQl1aW8udWlvX3Jlc2lkID0gYyArIDE7Ci0JdWlvLnVpb19pb3YgPSAmaW92WzBdOwotCXVpby51aW9faW92Y250ID0gMjsKLQlGTE9DS0ZJTEUoc3Rkb3V0KTsKLQlyZXQgPSBfX3NmdndyaXRlKHN0ZG91dCwgJnVpbyk7Ci0JRlVOTE9DS0ZJTEUoc3Rkb3V0KTsKLQlyZXR1cm4gKHJldCA/IEVPRiA6ICdcbicpOwotfQpkaWZmIC0tZ2l0IGEvbGliYy9zdGRpby9wdXR3LmMgYi9saWJjL3N0ZGlvL3B1dHcuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTI5NTVmZS4uMDAwMDAwMAotLS0gYS9saWJjL3N0ZGlvL3B1dHcuYworKysgL2Rldi9udWxsCkBAIC0xLDQ4ICswLDAgQEAKLS8qCSRPcGVuQlNEOiBwdXR3LmMsdiAxLjYgMjAwNS8wOC8wOCAwODowNTozNiBlc3BpZSBFeHAgJCAqLwotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKLSAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKLSAqIENocmlzIFRvcmVrLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlICJmdndyaXRlLmgiCi0KLWludAotcHV0dyhpbnQgdywgRklMRSAqZnApCi17Ci0Jc3RydWN0IF9fc3VpbyB1aW87Ci0Jc3RydWN0IF9fc2lvdiBpb3Y7Ci0KLQlpb3YuaW92X2Jhc2UgPSAmdzsKLQlpb3YuaW92X2xlbiA9IHVpby51aW9fcmVzaWQgPSBzaXplb2Yodyk7Ci0JdWlvLnVpb19pb3YgPSAmaW92OwotCXVpby51aW9faW92Y250ID0gMTsKLQlyZXR1cm4gKF9fc2Z2d3JpdGUoZnAsICZ1aW8pKTsKLX0KZGlmZiAtLWdpdCBhL2xpYmMvc3RkaW8vcmVtb3ZlLmMgYi9saWJjL3N0ZGlvL3JlbW92ZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMDlkNzZmLi4wMDAwMDAwCi0tLSBhL2xpYmMvc3RkaW8vcmVtb3ZlLmMKKysrIC9kZXYvbnVsbApAQCAtMSw0OSArMCwwIEBACi0vKgkkT3BlbkJTRDogcmVtb3ZlLmMsdiAxLjcgMjAwNS8wOC8wOCAwODowNTozNiBlc3BpZSBFeHAgJAkqLwotCi0vKi0KLSAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MwotICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQotICogQ2hyaXMgVG9yZWsuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0gKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHVuaXN0ZC5oPgotI2luY2x1ZGUgPHN5cy9zdGF0Lmg+Ci0KLWludAotcmVtb3ZlKGNvbnN0IGNoYXIgKmZpbGUpCi17Ci0Jc3RydWN0IHN0YXQgc3Q7Ci0KLQlpZiAobHN0YXQoZmlsZSwgJnN0KSA8IDApCi0JCXJldHVybiAoLTEpOwotCWlmIChTX0lTRElSKHN0LnN0X21vZGUpKQotCQlyZXR1cm4gKHJtZGlyKGZpbGUpKTsKLQlyZXR1cm4gKHVubGluayhmaWxlKSk7Ci19CmRpZmYgLS1naXQgYS9saWJjL3N0ZGlvL3JnZXQuYyBiL2xpYmMvc3RkaW8vcmdldC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0Y2Q5N2NiLi4wMDAwMDAwCi0tLSBhL2xpYmMvc3RkaW8vcmdldC5jCisrKyAvZGV2L251bGwKQEAgLTEsNTEgKzAsMCBAQAotLyoJJE9wZW5CU0Q6IHJnZXQuYyx2IDEuNyAyMDA1LzA4LzA4IDA4OjA1OjM2IGVzcGllIEV4cCAkICovCi0vKi0KLSAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MwotICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQotICogQ2hyaXMgVG9yZWsuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0gKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgImxvY2FsLmgiCi0KLS8qCi0gKiBIYW5kbGUgZ2V0YygpIHdoZW4gdGhlIGJ1ZmZlciByYW4gb3V0OgotICogUmVmaWxsLCB0aGVuIHJldHVybiB0aGUgZmlyc3QgY2hhcmFjdGVyCi0gKiBpbiB0aGUgbmV3bHktZmlsbGVkIGJ1ZmZlci4KLSAqLwotaW50Ci1fX3NyZ2V0KEZJTEUgKmZwKQotewotCV9TRVRfT1JJRU5UQVRJT04oZnAsIC0xKTsKLQlpZiAoX19zcmVmaWxsKGZwKSA9PSAwKSB7Ci0JCWZwLT5fci0tOwotCQlyZXR1cm4gKCpmcC0+X3ArKyk7Ci0JfQotCXJldHVybiAoRU9GKTsKLX0KZGlmZiAtLWdpdCBhL2xpYmMvc3RkaW8vc2V0YnVmLmMgYi9saWJjL3N0ZGlvL3NldGJ1Zi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ODNiODk1Li4wMDAwMDAwCi0tLSBhL2xpYmMvc3RkaW8vc2V0YnVmLmMKKysrIC9kZXYvbnVsbApAQCAtMSw0MSArMCwwIEBACi0vKgkkT3BlbkJTRDogc2V0YnVmLmMsdiAxLjUgMjAwNS8wOC8wOCAwODowNTozNiBlc3BpZSBFeHAgJCAqLwotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKLSAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKLSAqIENocmlzIFRvcmVrLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlICJsb2NhbC5oIgotCi12b2lkCi1zZXRidWYoRklMRSAqZnAsIGNoYXIgKmJ1ZikKLXsKLQkodm9pZCkgc2V0dmJ1ZihmcCwgYnVmLCBidWYgPyBfSU9GQkYgOiBfSU9OQkYsIEJVRlNJWik7Ci19CmRpZmYgLS1naXQgYS9saWJjL3N0ZGlvL3NldGJ1ZmZlci5jIGIvbGliYy9zdGRpby9zZXRidWZmZXIuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODcyNWZmNy4uMDAwMDAwMAotLS0gYS9saWJjL3N0ZGlvL3NldGJ1ZmZlci5jCisrKyAvZGV2L251bGwKQEAgLTEsNTEgKzAsMCBAQAotLyoJJE9wZW5CU0Q6IHNldGJ1ZmZlci5jLHYgMS41IDIwMDUvMDgvMDggMDg6MDU6MzYgZXNwaWUgRXhwICQgKi8KLS8qLQotICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCi0gKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5Ci0gKiBDaHJpcyBUb3Jlay4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0gKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKLSAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0KLXZvaWQKLXNldGJ1ZmZlcihGSUxFICpmcCwgY2hhciAqYnVmLCBpbnQgc2l6ZSkKLXsKLQotCSh2b2lkKXNldHZidWYoZnAsIGJ1ZiwgYnVmID8gX0lPRkJGIDogX0lPTkJGLCBzaXplKTsKLX0KLQotLyoKLSAqIHNldCBsaW5lIGJ1ZmZlcmluZwotICovCi1pbnQKLXNldGxpbmVidWYoRklMRSAqZnApCi17Ci0KLQlyZXR1cm4gKHNldHZidWYoZnAsIChjaGFyICopTlVMTCwgX0lPTEJGLCAoc2l6ZV90KTApKTsKLX0KZGlmZiAtLWdpdCBhL2xpYmMvc3RkaW8vc2V0dmJ1Zi5jIGIvbGliYy9zdGRpby9zZXR2YnVmLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJmYjc2YWYuLjAwMDAwMDAKLS0tIGEvbGliYy9zdGRpby9zZXR2YnVmLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNTQgKzAsMCBAQAotLyoJJE9wZW5CU0Q6IHNldHZidWYuYyx2IDEuOCAyMDA1LzA4LzA4IDA4OjA1OjM2IGVzcGllIEV4cCAkICovCi0vKi0KLSAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MwotICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQotICogQ2hyaXMgVG9yZWsuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0gKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgImxvY2FsLmgiCi0KLS8qCi0gKiBTZXQgb25lIG9mIHRoZSB0aHJlZSBraW5kcyBvZiBidWZmZXJpbmcsIG9wdGlvbmFsbHkgaW5jbHVkaW5nCi0gKiBhIGJ1ZmZlci4KLSAqLwotaW50Ci1zZXR2YnVmKEZJTEUgKmZwLCBjaGFyICpidWYsIGludCBtb2RlLCBzaXplX3Qgc2l6ZSkKLXsKLQlpbnQgcmV0LCBmbGFnczsKLQlzaXplX3QgaW9zaXplOwotCWludCB0dHlmbGFnOwotCi0JLyoKLQkgKiBWZXJpZnkgYXJndW1lbnRzLiAgVGhlIGBpbnQnIGxpbWl0IG9uIGBzaXplJyBpcyBkdWUgdG8gdGhpcwotCSAqIHBhcnRpY3VsYXIgaW1wbGVtZW50YXRpb24uICBOb3RlLCBidWYgYW5kIHNpemUgYXJlIGlnbm9yZWQKLQkgKiB3aGVuIHNldHRpbmcgX0lPTkJGLgotCSAqLwotCWlmIChtb2RlICE9IF9JT05CRikKLQkJaWYgKChtb2RlICE9IF9JT0ZCRiAmJiBtb2RlICE9IF9JT0xCRikgfHwgKGludClzaXplIDwgMCkKLQkJCXJldHVybiAoRU9GKTsKLQotCS8qCi0JICogV3JpdGUgY3VycmVudCBidWZmZXIsIGlmIGFueS4gIERpc2NhcmQgdW5yZWFkIGlucHV0IChpbmNsdWRpbmcKLQkgKiB1bmdldGMgZGF0YSksIGNhbmNlbCBsaW5lIGJ1ZmZlcmluZywgYW5kIGZyZWUgb2xkIGJ1ZmZlciBpZgotCSAqIG1hbGxvYygpZWQuICBXZSBhbHNvIGNsZWFyIGFueSBlb2YgY29uZGl0aW9uLCBhcyBpZiB0aGlzIHdlcmUKLQkgKiBhIHNlZWsuCi0JICovCi0JRkxPQ0tGSUxFKGZwKTsKLQlyZXQgPSAwOwotCSh2b2lkKV9fc2ZsdXNoKGZwKTsKLQlpZiAoSEFTVUIoZnApKQotCQlGUkVFVUIoZnApOwotCVdDSU9fRlJFRShmcCk7Ci0JZnAtPl9yID0gZnAtPl9sYmZzaXplID0gMDsKLQlmbGFncyA9IGZwLT5fZmxhZ3M7Ci0JaWYgKGZsYWdzICYgX19TTUJGKQotCQlmcmVlKCh2b2lkICopZnAtPl9iZi5fYmFzZSk7Ci0JZmxhZ3MgJj0gfihfX1NMQkYgfCBfX1NOQkYgfCBfX1NNQkYgfCBfX1NPUFQgfCBfX1NOUFQgfCBfX1NFT0YpOwotCi0JLyogSWYgc2V0dGluZyB1bmJ1ZmZlcmVkIG1vZGUsIHNraXAgYWxsIHRoZSBoYXJkIHdvcmsuICovCi0JaWYgKG1vZGUgPT0gX0lPTkJGKQotCQlnb3RvIG5iZjsKLQotCS8qCi0JICogRmluZCBvcHRpbWFsIEkvTyBzaXplIGZvciBzZWVrIG9wdGltaXphdGlvbi4gIFRoaXMgYWxzbyByZXR1cm5zCi0JICogYSBgdHR5IGZsYWcnIHRvIHN1Z2dlc3QgdGhhdCB3ZSBjaGVjayBpc2F0dHkoZmQpLCBidXQgd2UgZG8gbm90Ci0JICogY2FyZSBzaW5jZSBvdXIgY2FsbGVyIHRvbGQgdXMgaG93IHRvIGJ1ZmZlci4KLQkgKi8KLQlmbGFncyB8PSBfX3N3aGF0YnVmKGZwLCAmaW9zaXplLCAmdHR5ZmxhZyk7Ci0JaWYgKHNpemUgPT0gMCkgewotCQlidWYgPSBOVUxMOwkvKiBmb3JjZSBsb2NhbCBhbGxvY2F0aW9uICovCi0JCXNpemUgPSBpb3NpemU7Ci0JfQotCi0JLyogQWxsb2NhdGUgYnVmZmVyIGlmIG5lZWRlZC4gKi8KLQlpZiAoYnVmID09IE5VTEwpIHsKLQkJaWYgKChidWYgPSBtYWxsb2Moc2l6ZSkpID09IE5VTEwpIHsKLQkJCS8qCi0JCQkgKiBVbmFibGUgdG8gaG9ub3IgdXNlcidzIHJlcXVlc3QuICBXZSB3aWxsIHJldHVybgotCQkJICogZmFpbHVyZSwgYnV0IHRyeSBhZ2FpbiB3aXRoIGZpbGUgc3lzdGVtIHNpemUuCi0JCQkgKi8KLQkJCXJldCA9IEVPRjsKLQkJCWlmIChzaXplICE9IGlvc2l6ZSkgewotCQkJCXNpemUgPSBpb3NpemU7Ci0JCQkJYnVmID0gbWFsbG9jKHNpemUpOwotCQkJfQotCQl9Ci0JCWlmIChidWYgPT0gTlVMTCkgewotCQkJLyogTm8gbHVjazsgc3dpdGNoIHRvIHVuYnVmZmVyZWQgSS9PLiAqLwotbmJmOgotCQkJZnAtPl9mbGFncyA9IGZsYWdzIHwgX19TTkJGOwotCQkJZnAtPl93ID0gMDsKLQkJCWZwLT5fYmYuX2Jhc2UgPSBmcC0+X3AgPSBmcC0+X25idWY7Ci0JCQlmcC0+X2JmLl9zaXplID0gMTsKLQkJCUZVTkxPQ0tGSUxFKGZwKTsKLQkJCXJldHVybiAocmV0KTsKLQkJfQotCQlmbGFncyB8PSBfX1NNQkY7Ci0JfQotCi0JLyoKLQkgKiBLaWxsIGFueSBzZWVrIG9wdGltaXphdGlvbiBpZiB0aGUgYnVmZmVyIGlzIG5vdCB0aGUKLQkgKiByaWdodCBzaXplLgotCSAqCi0JICogU0hPVUxEIFdFIEFMTE9XIE1VTFRJUExFUyBIRVJFIChpLmUuLCBvayBpZmYgKHNpemUgJSBpb3NpemUpID09IDApPwotCSAqLwotCWlmIChzaXplICE9IGlvc2l6ZSkKLQkJZmxhZ3MgfD0gX19TTlBUOwotCi0JLyoKLQkgKiBGaXggdXAgdGhlIEZJTEUgZmllbGRzLCBhbmQgc2V0IF9fY2xlYW51cCBmb3Igb3V0cHV0IGZsdXNoIG9uCi0JICogZXhpdCAoc2luY2Ugd2UgYXJlIGJ1ZmZlcmVkIGluIHNvbWUgd2F5KS4KLQkgKi8KLQlpZiAobW9kZSA9PSBfSU9MQkYpCi0JCWZsYWdzIHw9IF9fU0xCRjsKLQlmcC0+X2ZsYWdzID0gZmxhZ3M7Ci0JZnAtPl9iZi5fYmFzZSA9IGZwLT5fcCA9ICh1bnNpZ25lZCBjaGFyICopYnVmOwotCWZwLT5fYmYuX3NpemUgPSBzaXplOwotCS8qIGZwLT5fbGJmc2l6ZSBpcyBzdGlsbCAwICovCi0JaWYgKGZsYWdzICYgX19TV1IpIHsKLQkJLyoKLQkJICogQmVnaW4gb3IgY29udGludWUgd3JpdGluZzogc2VlIF9fc3dzZXR1cCgpLiAgTm90ZQotCQkgKiB0aGF0IF9fU05CRiBpcyBpbXBvc3NpYmxlIChpdCB3YXMgaGFuZGxlZCBlYXJsaWVyKS4KLQkJICovCi0JCWlmIChmbGFncyAmIF9fU0xCRikgewotCQkJZnAtPl93ID0gMDsKLQkJCWZwLT5fbGJmc2l6ZSA9IC1mcC0+X2JmLl9zaXplOwotCQl9IGVsc2UKLQkJCWZwLT5fdyA9IHNpemU7Ci0JfSBlbHNlIHsKLQkJLyogYmVnaW4vY29udGludWUgcmVhZGluZywgb3Igc3RheSBpbiBpbnRlcm1lZGlhdGUgc3RhdGUgKi8KLQkJZnAtPl93ID0gMDsKLQl9Ci0JRlVOTE9DS0ZJTEUoZnApOwotCV9fYXRleGl0X3JlZ2lzdGVyX2NsZWFudXAoX2NsZWFudXApOwotCi0JcmV0dXJuIChyZXQpOwotfQpkaWZmIC0tZ2l0IGEvbGliYy9zdGRpby90ZW1wbmFtLmMgYi9saWJjL3N0ZGlvL3RlbXBuYW0uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2I3ZWM3NS4uMDAwMDAwMAotLS0gYS9saWJjL3N0ZGlvL3RlbXBuYW0uYworKysgL2Rldi9udWxsCkBAIC0xLDg0ICswLDAgQEAKLS8qCSRPcGVuQlNEOiB0ZW1wbmFtLmMsdiAxLjE0IDIwMDUvMDgvMDggMDg6MDU6MzYgZXNwaWUgRXhwICQgKi8KLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDE5ODgsIDE5OTMKLSAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSA8c3lzL3BhcmFtLmg+Ci0jaW5jbHVkZSA8ZXJybm8uaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPHVuaXN0ZC5oPgotI2luY2x1ZGUgPHBhdGhzLmg+Ci0KLV9fd2Fybl9yZWZlcmVuY2VzKHRlbXBuYW0sCi0gICAgIndhcm5pbmc6IHRlbXBuYW0oKSBwb3NzaWJseSB1c2VkIHVuc2FmZWx5OyBjb25zaWRlciB1c2luZyBta3N0ZW1wKCkiKTsKLQotZXh0ZXJuIGNoYXIgKl9ta3RlbXAoY2hhciAqKTsKLQotY2hhciAqCi10ZW1wbmFtKGNvbnN0IGNoYXIgKmRpciwgY29uc3QgY2hhciAqcGZ4KQotewotCWludCBzdmVycm5vOwotCWNoYXIgKmYsICpuYW1lOwotCi0JaWYgKCEobmFtZSA9IG1hbGxvYyhNQVhQQVRITEVOKSkpCi0JCXJldHVybihOVUxMKTsKLQotCWlmICghcGZ4KQotCQlwZnggPSAidG1wLiI7Ci0KLQlpZiAoaXNzZXR1Z2lkKCkgPT0gMCAmJiAoZiA9IGdldGVudigiVE1QRElSIikpKSB7Ci0JCSh2b2lkKXNucHJpbnRmKG5hbWUsIE1BWFBBVEhMRU4sICIlcyVzJXNYWFhYWFhYWFhYIiwgZiwKLQkJICAgICooZiArIHN0cmxlbihmKSAtIDEpID09ICcvJz8gIiI6ICIvIiwgcGZ4KTsKLQkJaWYgKChmID0gX21rdGVtcChuYW1lKSkpCi0JCQlyZXR1cm4oZik7Ci0JfQotCi0JaWYgKChmID0gKGNoYXIgKilkaXIpKSB7Ci0JCSh2b2lkKXNucHJpbnRmKG5hbWUsIE1BWFBBVEhMRU4sICIlcyVzJXNYWFhYWFhYWFhYIiwgZiwKLQkJICAgICooZiArIHN0cmxlbihmKSAtIDEpID09ICcvJz8gIiI6ICIvIiwgcGZ4KTsKLQkJaWYgKChmID0gX21rdGVtcChuYW1lKSkpCi0JCQlyZXR1cm4oZik7Ci0JfQotCi0JZiA9IFBfdG1wZGlyOwotCSh2b2lkKXNucHJpbnRmKG5hbWUsIE1BWFBBVEhMRU4sICIlcyVzWFhYWFhYWFhYIiwgZiwgcGZ4KTsKLQlpZiAoKGYgPSBfbWt0ZW1wKG5hbWUpKSkKLQkJcmV0dXJuKGYpOwotCi0JZiA9IF9QQVRIX1RNUDsKLQkodm9pZClzbnByaW50ZihuYW1lLCBNQVhQQVRITEVOLCAiJXMlc1hYWFhYWFhYWCIsIGYsIHBmeCk7Ci0JaWYgKChmID0gX21rdGVtcChuYW1lKSkpCi0JCXJldHVybihmKTsKLQotCXN2ZXJybm8gPSBlcnJubzsKLQlmcmVlKG5hbWUpOwotCWVycm5vID0gc3ZlcnJubzsKLQlyZXR1cm4oTlVMTCk7Ci19CmRpZmYgLS1naXQgYS9saWJjL3N0ZGlvL3RtcGZpbGUuYyBiL2xpYmMvc3RkaW8vdG1wZmlsZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzOWY3ZTkyLi4wMDAwMDAwCi0tLSBhL2xpYmMvc3RkaW8vdG1wZmlsZS5jCisrKyAvZGV2L251bGwKQEAgLTEsODEgKzAsMCBAQAotLyoJJE9wZW5CU0Q6IHRtcGZpbGUuYyx2IDEuMTAgMjAwNS8xMC8xMCAxMjowMDo1MiBlc3BpZSBFeHAgJCAqLwotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKLSAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKLSAqIENocmlzIFRvcmVrLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSA8c3lzL3N0YXQuaD4KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLSNpbmNsdWRlIDxzaWduYWwuaD4KLSNpbmNsdWRlIDxlcnJuby5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8cGF0aHMuaD4KLQotRklMRSAqCi10bXBmaWxlKHZvaWQpCi17Ci0Jc2lnc2V0X3Qgc2V0LCBvc2V0OwotCUZJTEUgKmZwOwotCWludCBmZCwgc3ZlcnJubzsKLSNkZWZpbmUJVFJBSUxFUgkidG1wLlhYWFhYWFhYWFgiCi0JY2hhciBidWZbc2l6ZW9mKF9QQVRIX1RNUCkgKyBzaXplb2YoVFJBSUxFUildOwotCi0JKHZvaWQpbWVtY3B5KGJ1ZiwgX1BBVEhfVE1QLCBzaXplb2YoX1BBVEhfVE1QKSAtIDEpOwotCSh2b2lkKW1lbWNweShidWYgKyBzaXplb2YoX1BBVEhfVE1QKSAtIDEsIFRSQUlMRVIsIHNpemVvZihUUkFJTEVSKSk7Ci0KLQlzaWdmaWxsc2V0KCZzZXQpOwotCSh2b2lkKXNpZ3Byb2NtYXNrKFNJR19CTE9DSywgJnNldCwgJm9zZXQpOwotCi0JZmQgPSBta3N0ZW1wKGJ1Zik7Ci0JaWYgKGZkICE9IC0xKSB7Ci0JCW1vZGVfdCB1OwotCi0JCSh2b2lkKXVubGluayhidWYpOwotCQl1ID0gdW1hc2soMCk7Ci0JCSh2b2lkKXVtYXNrKHUpOwotCQkodm9pZClmY2htb2QoZmQsIDA2NjYgJiB+dSk7Ci0JfQotCi0JKHZvaWQpc2lncHJvY21hc2soU0lHX1NFVE1BU0ssICZvc2V0LCBOVUxMKTsKLQotCWlmIChmZCA9PSAtMSkKLQkJcmV0dXJuIChOVUxMKTsKLQotCWlmICgoZnAgPSBmZG9wZW4oZmQsICJ3KyIpKSA9PSBOVUxMKSB7Ci0JCXN2ZXJybm8gPSBlcnJubzsKLQkJKHZvaWQpY2xvc2UoZmQpOwotCQllcnJubyA9IHN2ZXJybm87Ci0JCXJldHVybiAoTlVMTCk7Ci0JfQotCXJldHVybiAoZnApOwotfQpkaWZmIC0tZ2l0IGEvbGliYy9zdGRpby90bXBuYW0uYyBiL2xpYmMvc3RkaW8vdG1wbmFtLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMyZTBhMjIuLjAwMDAwMDAKLS0tIGEvbGliYy9zdGRpby90bXBuYW0uYworKysgL2Rldi9udWxsCkBAIC0xLDU1ICswLDAgQEAKLS8qCSRPcGVuQlNEOiB0bXBuYW0uYyx2IDEuMTAgMjAwNS8wOC8wOCAwODowNTozNiBlc3BpZSBFeHAgJCAqLwotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMsIDE5OTQKLSAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKLSAqIENocmlzIFRvcmVrLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHVuaXN0ZC5oPgotCi1fX3dhcm5fcmVmZXJlbmNlcyh0bXBuYW0sCi0gICAgIndhcm5pbmc6IHRtcG5hbSgpIHBvc3NpYmx5IHVzZWQgdW5zYWZlbHk7IGNvbnNpZGVyIHVzaW5nIG1rc3RlbXAoKSIpOwotCi1leHRlcm4gY2hhciAqX21rdGVtcChjaGFyICopOwotCi1jaGFyICoKLXRtcG5hbShjaGFyICpzKQotewotCXN0YXRpYyB1X2xvbmcgdG1wY291bnQ7Ci0Jc3RhdGljIGNoYXIgYnVmW0xfdG1wbmFtXTsKLQotCWlmIChzID09IE5VTEwpCi0JCXMgPSBidWY7Ci0JKHZvaWQpc25wcmludGYocywgTF90bXBuYW0sICIlc3RtcC4lbHUuWFhYWFhYWFhYIiwgUF90bXBkaXIsIHRtcGNvdW50KTsKLQkrK3RtcGNvdW50OwotCXJldHVybiAoX21rdGVtcChzKSk7Ci19CmRpZmYgLS1naXQgYS9saWJjL3N0ZGlvL3ZmcHJpbnRmLmMgYi9saWJjL3N0ZGlvL3ZmcHJpbnRmLmMKaW5kZXggZGFjODQ5Ni4uNjQ2YjZiMSAxMDA2NDQKLS0tIGEvbGliYy9zdGRpby92ZnByaW50Zi5jCisrKyBiL2xpYmMvc3RkaW8vdmZwcmludGYuYwpAQCAtNTU5LDcgKzU1OSw3IEBACiAjZW5kaWYgLyogRkxPQVRJTkdfUE9JTlQgKi8KIC8qIHRoZSBBbmRyb2lkIHNlY3VyaXR5IHRlYW0gc3VnZ2VzdHMgcmVtb3Zpbmcgc3VwcG9ydCBmb3IgJW4KICAqIHNpbmNlIGl0IGhhcyBubyByZWFsIHByYWN0aWNhbCB2YWx1ZSwgYW5kIGNvdWxkIGxlYWQgdG8KLSAqIHJ1bm5pbmcgbWFsaWNpb3VzIGNvZGUgKGZvciByZWFsbHkgYnVneSBwcm9ncmFtcyB0aGF0CisgKiBydW5uaW5nIG1hbGljaW91cyBjb2RlIChmb3IgcmVhbGx5IGJ1Z2d5IHByb2dyYW1zIHRoYXQKICAqIHNlbmQgdG8gcHJpbnRmKCkgdXNlci1nZW5lcmF0ZWQgZm9ybWF0dGluZyBzdHJpbmdzKS4KICAqLwogI2lmIDAKQEAgLTgyNyw2ICs4MjcsNyBAQAogCQltdW5tYXAoYXJndGFibGUsIGFyZ3RhYmxlc2l6KTsKIAkJYXJndGFibGUgPSBOVUxMOwogCX0KKyAgICAgICAgdmFfZW5kKG9yZ2FwKTsKIAlyZXR1cm4gKF9fc2ZlcnJvcihmcCkgPyBFT0YgOiByZXQpOwogCS8qIE5PVFJFQUNIRUQgKi8KIH0KZGlmZiAtLWdpdCBhL2xpYmMvc3RkaW8vd3NldHVwLmMgYi9saWJjL3N0ZGlvL3dzZXR1cC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwODM0MjIzLi4wMDAwMDAwCi0tLSBhL2xpYmMvc3RkaW8vd3NldHVwLmMKKysrIC9kZXYvbnVsbApAQCAtMSw4NiArMCwwIEBACi0vKgkkT3BlbkJTRDogd3NldHVwLmMsdiAxLjcgMjAwNS8wOC8wOCAwODowNTozNiBlc3BpZSBFeHAgJCAqLwotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKLSAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKLSAqIENocmlzIFRvcmVrLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlICJsb2NhbC5oIgotCi0vKgotICogVmFyaW91cyBvdXRwdXQgcm91dGluZXMgY2FsbCB3c2V0dXAgdG8gYmUgc3VyZSBpdCBpcyBzYWZlIHRvIHdyaXRlLAotICogYmVjYXVzZSBlaXRoZXIgX2ZsYWdzIGRvZXMgbm90IGluY2x1ZGUgX19TV1IsIG9yIF9idWYgaXMgTlVMTC4KLSAqIF93c2V0dXAgcmV0dXJucyAwIGlmIE9LIHRvIHdyaXRlLCBub256ZXJvIG90aGVyd2lzZS4KLSAqLwotaW50Ci1fX3N3c2V0dXAoRklMRSAqZnApCi17Ci0JLyogbWFrZSBzdXJlIHN0ZGlvIGlzIHNldCB1cCAqLwotCWlmICghX19zZGlkaW5pdCkKLQkJX19zaW5pdCgpOwotCi0JLyoKLQkgKiBJZiB3ZSBhcmUgbm90IHdyaXRpbmcsIHdlIGhhZCBiZXR0ZXIgYmUgcmVhZGluZyBhbmQgd3JpdGluZy4KLQkgKi8KLQlpZiAoKGZwLT5fZmxhZ3MgJiBfX1NXUikgPT0gMCkgewotCQlpZiAoKGZwLT5fZmxhZ3MgJiBfX1NSVykgPT0gMCkKLQkJCXJldHVybiAoRU9GKTsKLQkJaWYgKGZwLT5fZmxhZ3MgJiBfX1NSRCkgewotCQkJLyogY2xvYmJlciBhbnkgdW5nZXRjIGRhdGEgKi8KLQkJCWlmIChIQVNVQihmcCkpCi0JCQkJRlJFRVVCKGZwKTsKLQkJCWZwLT5fZmxhZ3MgJj0gfihfX1NSRHxfX1NFT0YpOwotCQkJZnAtPl9yID0gMDsKLQkJCWZwLT5fcCA9IGZwLT5fYmYuX2Jhc2U7Ci0JCX0KLQkJZnAtPl9mbGFncyB8PSBfX1NXUjsKLQl9Ci0KLQkvKgotCSAqIE1ha2UgYSBidWZmZXIgaWYgbmVjZXNzYXJ5LCB0aGVuIHNldCBfdy4KLQkgKi8KLQlpZiAoZnAtPl9iZi5fYmFzZSA9PSBOVUxMKSB7Ci0JCWlmICgoZnAtPl9mbGFncyAmIChfX1NTVFIgfCBfX1NBTEMpKSA9PSBfX1NTVFIpCi0JCQlyZXR1cm4gKEVPRik7Ci0JCV9fc21ha2VidWYoZnApOwotCX0KLQlpZiAoZnAtPl9mbGFncyAmIF9fU0xCRikgewotCQkvKgotCQkgKiBJdCBpcyBsaW5lIGJ1ZmZlcmVkLCBzbyBtYWtlIF9sYmZzaXplIGJlIC1fYnVmc2l6ZQotCQkgKiBmb3IgdGhlIHB1dGMoKSBtYWNyby4gIFdlIHdpbGwgY2hhbmdlIF9sYmZzaXplIGJhY2sKLQkJICogdG8gMCB3aGVuZXZlciB3ZSB0dXJuIG9mZiBfX1NXUi4KLQkJICovCi0JCWZwLT5fdyA9IDA7Ci0JCWZwLT5fbGJmc2l6ZSA9IC1mcC0+X2JmLl9zaXplOwotCX0gZWxzZQotCQlmcC0+X3cgPSBmcC0+X2ZsYWdzICYgX19TTkJGID8gMCA6IGZwLT5fYmYuX3NpemU7Ci0JcmV0dXJuICgwKTsKLX0KZGlmZiAtLWdpdCBhL2xpYmMvc3RkbGliL19yYW5kNDguYyBiL2xpYmMvc3RkbGliL19yYW5kNDguYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2M5NTBmNy4uMDAwMDAwMAotLS0gYS9saWJjL3N0ZGxpYi9fcmFuZDQ4LmMKKysrIC9kZXYvbnVsbApAQCAtMSw0NyArMCwwIEBACi0vKgkkT3BlbkJTRDogX3JhbmQ0OC5jLHYgMS4zIDIwMDUvMDgvMDggMDg6MDU6MzYgZXNwaWUgRXhwICQgKi8KLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTMgTWFydGluIEJpcmdtZWllcgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBZb3UgbWF5IHJlZGlzdHJpYnV0ZSB1bm1vZGlmaWVkIG9yIG1vZGlmaWVkIHZlcnNpb25zIG9mIHRoaXMgc291cmNlCi0gKiBjb2RlIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgYW5kIHRoZQotICogZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIHJldGFpbmVkLgotICoKLSAqIFRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgYGBhcyBpcycnLCBhbmQgY29tZXMgd2l0aCBubyB3YXJyYW50aWVzCi0gKiBvZiBhbnkga2luZC4gSSBzaGFsbCBpbiBubyBldmVudCBiZSBsaWFibGUgZm9yIGFueXRoaW5nIHRoYXQgaGFwcGVucwotICogdG8gYW55b25lL2FueXRoaW5nIHdoZW4gdXNpbmcgdGhpcyBzb2Z0d2FyZS4KLSAqLwotCi0jaW5jbHVkZSAicmFuZDQ4LmgiCi0KLXVuc2lnbmVkIHNob3J0IF9fcmFuZDQ4X3NlZWRbM10gPSB7Ci0JUkFORDQ4X1NFRURfMCwKLQlSQU5ENDhfU0VFRF8xLAotCVJBTkQ0OF9TRUVEXzIKLX07Ci11bnNpZ25lZCBzaG9ydCBfX3JhbmQ0OF9tdWx0WzNdID0gewotCVJBTkQ0OF9NVUxUXzAsCi0JUkFORDQ4X01VTFRfMSwKLQlSQU5ENDhfTVVMVF8yCi19OwotdW5zaWduZWQgc2hvcnQgX19yYW5kNDhfYWRkID0gUkFORDQ4X0FERDsKLQotdm9pZAotX19kb3JhbmQ0OCh1bnNpZ25lZCBzaG9ydCB4c2VlZFszXSkKLXsKLQl1bnNpZ25lZCBsb25nIGFjY3U7Ci0JdW5zaWduZWQgc2hvcnQgdGVtcFsyXTsKLQotCWFjY3UgPSAodW5zaWduZWQgbG9uZykgX19yYW5kNDhfbXVsdFswXSAqICh1bnNpZ25lZCBsb25nKSB4c2VlZFswXSArCi0JICh1bnNpZ25lZCBsb25nKSBfX3JhbmQ0OF9hZGQ7Ci0JdGVtcFswXSA9ICh1bnNpZ25lZCBzaG9ydCkgYWNjdTsJLyogbG93ZXIgMTYgYml0cyAqLwotCWFjY3UgPj49IHNpemVvZih1bnNpZ25lZCBzaG9ydCkgKiA4OwotCWFjY3UgKz0gKHVuc2lnbmVkIGxvbmcpIF9fcmFuZDQ4X211bHRbMF0gKiAodW5zaWduZWQgbG9uZykgeHNlZWRbMV0gKwotCSAodW5zaWduZWQgbG9uZykgX19yYW5kNDhfbXVsdFsxXSAqICh1bnNpZ25lZCBsb25nKSB4c2VlZFswXTsKLQl0ZW1wWzFdID0gKHVuc2lnbmVkIHNob3J0KSBhY2N1OwkvKiBtaWRkbGUgMTYgYml0cyAqLwotCWFjY3UgPj49IHNpemVvZih1bnNpZ25lZCBzaG9ydCkgKiA4OwotCWFjY3UgKz0gX19yYW5kNDhfbXVsdFswXSAqIHhzZWVkWzJdICsgX19yYW5kNDhfbXVsdFsxXSAqIHhzZWVkWzFdICsgX19yYW5kNDhfbXVsdFsyXSAqIHhzZWVkWzBdOwotCXhzZWVkWzBdID0gdGVtcFswXTsKLQl4c2VlZFsxXSA9IHRlbXBbMV07Ci0JeHNlZWRbMl0gPSAodW5zaWduZWQgc2hvcnQpIGFjY3U7Ci19CmRpZmYgLS1naXQgYS9saWJjL3N0ZGxpYi9hc3NlcnQuYyBiL2xpYmMvc3RkbGliL2Fzc2VydC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MTZiMDUwLi4wMDAwMDAwCi0tLSBhL2xpYmMvc3RkbGliL2Fzc2VydC5jCisrKyAvZGV2L251bGwKQEAgLTEsNTQgKzAsMCBAQAotLyoJJE9wZW5CU0Q6IGFzc2VydC5jLHYgMS44IDIwMDUvMDgvMDggMDg6MDU6MzMgZXNwaWUgRXhwICQgKi8KLS8qLQotICogQ29weXJpZ2h0IChjKSAxOTkyLCAxOTkzCi0gKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0gKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKLSAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPGFzc2VydC5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0KLXZvaWQKLV9fYXNzZXJ0KGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLCBjb25zdCBjaGFyICpmYWlsZWRleHByKQotewotCSh2b2lkKWZwcmludGYoc3RkZXJyLAotCSAgICAiYXNzZXJ0aW9uIFwiJXNcIiBmYWlsZWQ6IGZpbGUgXCIlc1wiLCBsaW5lICVkXG4iLAotCSAgICBmYWlsZWRleHByLCBmaWxlLCBsaW5lKTsKLQlhYm9ydCgpOwotCS8qIE5PVFJFQUNIRUQgKi8KLX0KLQotdm9pZAotX19hc3NlcnQyKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLCBjb25zdCBjaGFyICpmdW5jLCBjb25zdCBjaGFyICpmYWlsZWRleHByKQotewotCSh2b2lkKWZwcmludGYoc3RkZXJyLAotCSAgICAiYXNzZXJ0aW9uIFwiJXNcIiBmYWlsZWQ6IGZpbGUgXCIlc1wiLCBsaW5lICVkLCBmdW5jdGlvbiBcIiVzXCJcbiIsCi0JICAgIGZhaWxlZGV4cHIsIGZpbGUsIGxpbmUsIGZ1bmMpOwotCWFib3J0KCk7Ci0JLyogTk9UUkVBQ0hFRCAqLwotfQpkaWZmIC0tZ2l0IGEvbGliYy9zdGRsaWIvYXRleGl0LmMgYi9saWJjL3N0ZGxpYi9hdGV4aXQuYwppbmRleCBmNGJjYWI5Li44ZjViZDJkIDEwMDY0NAotLS0gYS9saWJjL3N0ZGxpYi9hdGV4aXQuYworKysgYi9saWJjL3N0ZGxpYi9hdGV4aXQuYwpAQCAtNDQsNyArNDQsOCBAQAogICogRnVuY3Rpb24gcG9pbnRlcnMgYXJlIHN0b3JlZCBpbiBhIGxpbmtlZCBsaXN0IG9mIHBhZ2VzLiBUaGUgbGlzdAogICogaXMgaW5pdGlhbGx5IGVtcHR5LCBhbmQgcGFnZXMgYXJlIGFsbG9jYXRlZCBvbiBkZW1hbmQuIFRoZSBmaXJzdAogICogZnVuY3Rpb24gcG9pbnRlciBpbiB0aGUgZmlyc3QgYWxsb2NhdGVkIHBhZ2UgKHRoZSBsYXN0IG9uZSBpbgotICogdGhlIGxpbmtlZCBsaXN0KSBpcyByZXNlcnZlZCBmb3IgdGhlIGNsZWFudXAgZnVuY3Rpb24uCisgKiB0aGUgbGlua2VkIGxpc3QpIHdhcyByZXNlcnZlZCBmb3IgdGhlIGNsZWFudXAgZnVuY3Rpb24uCisgKiBUT0RPOiBzd2l0Y2ggdG8gdGhlIHJlZ3VsYXIgRnJlZUJTRC9OZXRCU0QgYXRleGl0IGltcGxlbWVudGF0aW9uLgogICoKICAqIE91dHNpZGUgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnMsIGFsbCBwYWdlcyBhcmUgbXByb3RlY3QoKSdlZAogICogdG8gcHJldmVudCB1bmludGVudGlvbmFsL21hbGljaW91cyBjb3JydXB0aW9uLgpAQCAtMTA0LDE3ICsxMDUsNiBAQAogCXJldHVybiAocmV0KTsKIH0KIAotI2lmZGVmIENSVF9MRUdBQ1lfV09SS0FST1VORAotLyoKLSAqIFJlZ2lzdGVyIGEgZnVuY3Rpb24gdG8gYmUgcGVyZm9ybWVkIGF0IGV4aXQuCi0gKi8KLWludAotYXRleGl0KHZvaWQgKCpmdW5jKSh2b2lkKSkKLXsKLQlyZXR1cm4gKF9fY3hhX2F0ZXhpdCgodm9pZCAoKikodm9pZCAqKSlmdW5jLCBOVUxMLCBOVUxMKSk7Ci19Ci0jZW5kaWYKLQogLyoKICAqIENhbGwgYWxsIGhhbmRsZXJzIHJlZ2lzdGVyZWQgd2l0aCBfX2N4YV9hdGV4aXQoKSBmb3IgdGhlIHNoYXJlZAogICogb2JqZWN0IG93bmluZyAnZHNvJy4KQEAgLTEzMSw2ICsxMjEsNyBAQAogCWlmIChfX2F0ZXhpdF9pbnZhbGlkKQogCQlyZXR1cm47CiAKKwlfQVRFWElUX0xPQ0soKTsKIAljYWxsX2RlcHRoKys7CiAKIAlmb3IgKHAgPSBfX2F0ZXhpdDsgcCAhPSBOVUxMOyBwID0gcC0+bmV4dCkgewpAQCAtMTQ5LDYgKzE0MCw3IEBACiAJCQkJcC0+Zm5zW25dLmZuX3B0ci5jeGFfZnVuYyA9IE5VTEw7CiAJCQkJbXByb3RlY3QocCwgcGdzaXplLCBQUk9UX1JFQUQpOwogCQkJfQorCQkJX0FURVhJVF9VTkxPQ0soKTsKICNpZiBBTkRST0lECiAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpdCBsb29rcyBsaWtlIHdlIHNob3VsZCBhbHdheXMgY2FsbCB0aGUgZnVuY3Rpb24KICAgICAgICAgICAgICAgICAgICAgICAgICAqIHdpdGggYW4gYXJndW1lbnQsIGV2ZW4gaWYgZHNvIGlzIG5vdCBOVUxMLiBPdGhlcndpc2UKQEAgLTE2Miw2ICsxNTQsNyBAQAogCQkJZWxzZQogCQkJCSgqZm4uZm5fcHRyLnN0ZF9mdW5jKSgpOwogI2VuZGlmIC8qICFBTkRST0lEICovCisJCQlfQVRFWElUX0xPQ0soKTsKIAkJfQogCX0KIApAQCAtMTc4LDQzICsxNzEsNSBAQAogCQl9CiAJCV9fYXRleGl0ID0gTlVMTDsKIAl9Ci19Ci0KLS8qCi0gKiBSZWdpc3RlciB0aGUgY2xlYW51cCBmdW5jdGlvbgotICovCi12b2lkCi1fX2F0ZXhpdF9yZWdpc3Rlcl9jbGVhbnVwKHZvaWQgKCpmdW5jKSh2b2lkKSkKLXsKLQlzdHJ1Y3QgYXRleGl0ICpwOwotCWludCBwZ3NpemUgPSBnZXRwYWdlc2l6ZSgpOwotCi0JaWYgKHBnc2l6ZSA8IChpbnQpc2l6ZW9mKCpwKSkKLQkJcmV0dXJuOwotCV9BVEVYSVRfTE9DSygpOwotCXAgPSBfX2F0ZXhpdDsKLQl3aGlsZSAocCAhPSBOVUxMICYmIHAtPm5leHQgIT0gTlVMTCkKLQkJcCA9IHAtPm5leHQ7Ci0JaWYgKHAgPT0gTlVMTCkgewotCQlwID0gbW1hcChOVUxMLCBwZ3NpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsCi0JCSAgICBNQVBfQU5PTiB8IE1BUF9QUklWQVRFLCAtMSwgMCk7Ci0JCWlmIChwID09IE1BUF9GQUlMRUQpCi0JCQlnb3RvIHVubG9jazsKLQkJcC0+aW5kID0gMTsKLQkJcC0+bWF4ID0gKHBnc2l6ZSAtICgoY2hhciAqKSZwLT5mbnNbMF0gLSAoY2hhciAqKXApKSAvCi0JCSAgICBzaXplb2YocC0+Zm5zWzBdKTsKLQkJcC0+bmV4dCA9IE5VTEw7Ci0JCV9fYXRleGl0ID0gcDsKLQkJaWYgKF9fYXRleGl0X2ludmFsaWQpCi0JCQlfX2F0ZXhpdF9pbnZhbGlkID0gMDsKLQl9IGVsc2UgewotCQlpZiAobXByb3RlY3QocCwgcGdzaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFKSkKLQkJCWdvdG8gdW5sb2NrOwotCX0KLQlwLT5mbnNbMF0uZm5fcHRyLnN0ZF9mdW5jID0gZnVuYzsKLQlwLT5mbnNbMF0uZm5fYXJnID0gTlVMTDsKLQlwLT5mbnNbMF0uZm5fZHNvID0gTlVMTDsKLQltcHJvdGVjdChwLCBwZ3NpemUsIFBST1RfUkVBRCk7Ci11bmxvY2s6CiAJX0FURVhJVF9VTkxPQ0soKTsKIH0KZGlmZiAtLWdpdCBhL2xpYmMvc3RkbGliL2F0ZXhpdC5oIGIvbGliYy9zdGRsaWIvYXRleGl0LmgKaW5kZXggMWIyMzU2NS4uNGIzZTVhYiAxMDA2NDQKLS0tIGEvbGliYy9zdGRsaWIvYXRleGl0LmgKKysrIGIvbGliYy9zdGRsaWIvYXRleGl0LmgKQEAgLTMwLDYgKzMwLDggQEAKICAqCiAgKi8KIAorI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorCiBzdHJ1Y3QgYXRleGl0IHsKIAlzdHJ1Y3QgYXRleGl0ICpuZXh0OwkJLyogbmV4dCBpbiBsaXN0ICovCiAJaW50IGluZDsJCQkvKiBuZXh0IGluZGV4IGluIHRoaXMgdGFibGUgKi8KQEAgLTQ0LDggKzQ2LDEyIEBACiAJfSBmbnNbMV07CQkJLyogdGhlIHRhYmxlIGl0c2VsZiAqLwogfTsKIAorX19CRUdJTl9ERUNMUworCiBleHRlcm4gaW50IF9fYXRleGl0X2ludmFsaWQ7CiBleHRlcm4gc3RydWN0IGF0ZXhpdCAqX19hdGV4aXQ7CQkvKiBwb2ludHMgdG8gaGVhZCBvZiBMSUZPIHN0YWNrICovCiAKIGludAlfX2N4YV9hdGV4aXQodm9pZCAoKikodm9pZCAqKSwgdm9pZCAqLCB2b2lkICopOwogdm9pZAlfX2N4YV9maW5hbGl6ZSh2b2lkICopOworCitfX0VORF9ERUNMUwpkaWZmIC0tZ2l0IGEvbGliYy9zdGRsaWIvYnNlYXJjaC5jIGIvbGliYy9zdGRsaWIvYnNlYXJjaC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZWI2MzI1Li4wMDAwMDAwCi0tLSBhL2xpYmMvc3RkbGliL2JzZWFyY2guYworKysgL2Rldi9udWxsCkBAIC0xLDY3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTAgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0gKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKLSAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgPHN0ZGxpYi5oPgotCi0vKgotICogUGVyZm9ybSBhIGJpbmFyeSBzZWFyY2guCi0gKgotICogVGhlIGNvZGUgYmVsb3cgaXMgYSBiaXQgc25lYWt5LiAgQWZ0ZXIgYSBjb21wYXJpc29uIGZhaWxzLCB3ZQotICogZGl2aWRlIHRoZSB3b3JrIGluIGhhbGYgYnkgbW92aW5nIGVpdGhlciBsZWZ0IG9yIHJpZ2h0LiBJZiBsaW0KLSAqIGlzIG9kZCwgbW92aW5nIGxlZnQgc2ltcGx5IGludm9sdmVzIGhhbHZpbmcgbGltOiBlLmcuLCB3aGVuIGxpbQotICogaXMgNSB3ZSBsb29rIGF0IGl0ZW0gMiwgc28gd2UgY2hhbmdlIGxpbSB0byAyIHNvIHRoYXQgd2Ugd2lsbAotICogbG9vayBhdCBpdGVtcyAwICYgMS4gIElmIGxpbSBpcyBldmVuLCB0aGUgc2FtZSBhcHBsaWVzLiAgSWYgbGltCi0gKiBpcyBvZGQsIG1vdmluZyByaWdodCBhZ2FpbiBpbnZvbGVzIGhhbHZpbmcgbGltLCB0aGlzIHRpbWUgbW92aW5nCi0gKiB0aGUgYmFzZSB1cCBvbmUgaXRlbSBwYXN0IHA6IGUuZy4sIHdoZW4gbGltIGlzIDUgd2UgY2hhbmdlIGJhc2UKLSAqIHRvIGl0ZW0gMyBhbmQgbWFrZSBsaW0gMiBzbyB0aGF0IHdlIHdpbGwgbG9vayBhdCBpdGVtcyAzIGFuZCA0LgotICogSWYgbGltIGlzIGV2ZW4sIGhvd2V2ZXIsIHdlIGhhdmUgdG8gc2hyaW5rIGl0IGJ5IG9uZSBiZWZvcmUKLSAqIGhhbHZpbmc6IGUuZy4sIHdoZW4gbGltIGlzIDQsIHdlIHN0aWxsIGxvb2tlZCBhdCBpdGVtIDIsIHNvIHdlCi0gKiBoYXZlIHRvIG1ha2UgbGltIDMsIHRoZW4gaGFsdmUsIG9idGFpbmluZyAxLCBzbyB0aGF0IHdlIHdpbGwgb25seQotICogbG9vayBhdCBpdGVtIDMuCi0gKi8KLXZvaWQgKgotYnNlYXJjaChjb25zdCB2b2lkICprZXksIGNvbnN0IHZvaWQgKmJhc2UwLCBzaXplX3Qgbm1lbWIsIHNpemVfdCBzaXplLAotICAgIGludCAoKmNvbXBhcikoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICopKQotewotCWNvbnN0IGNoYXIgKmJhc2UgPSBiYXNlMDsKLQlpbnQgbGltLCBjbXA7Ci0JY29uc3Qgdm9pZCAqcDsKLQotCWZvciAobGltID0gbm1lbWI7IGxpbSAhPSAwOyBsaW0gPj49IDEpIHsKLQkJcCA9IGJhc2UgKyAobGltID4+IDEpICogc2l6ZTsKLQkJY21wID0gKCpjb21wYXIpKGtleSwgcCk7Ci0JCWlmIChjbXAgPiAwKSB7CS8qIGtleSA+IHA6IG1vdmUgcmlnaHQgKi8KLQkJCWJhc2UgPSAoY2hhciAqKXAgKyBzaXplOwotCQkJbGltLS07Ci0JCX0gZWxzZSBpZiAoY21wID09IDApIHsKLQkJCXJldHVybiAoKHZvaWQgKilwKTsKLQkJfSAvKiBlbHNlIG1vdmUgbGVmdCAqLwotCX0KLQlyZXR1cm4gKE5VTEwpOwotfQpkaWZmIC0tZ2l0IGEvbGliYy9zdGRsaWIvZGl2LmMgYi9saWJjL3N0ZGxpYi9kaXYuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjdhYzJkYi4uMDAwMDAwMAotLS0gYS9saWJjL3N0ZGxpYi9kaXYuYworKysgL2Rldi9udWxsCkBAIC0xLDcxICswLDAgQEAKLS8qCSRPcGVuQlNEOiBkaXYuYyx2IDEuNSAyMDA1LzA4LzA4IDA4OjA1OjM2IGVzcGllIEV4cCAkICovCi0vKgotICogQ29weXJpZ2h0IChjKSAxOTkwIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQotICogQ2hyaXMgVG9yZWsuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0gKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlIDxzdGRsaWIuaD4JCS8qIGRpdl90ICovCi0KLWRpdl90Ci1kaXYoaW50IG51bSwgaW50IGRlbm9tKQotewotCWRpdl90IHI7Ci0KLQlyLnF1b3QgPSBudW0gLyBkZW5vbTsKLQlyLnJlbSA9IG51bSAlIGRlbm9tOwotCS8qCi0JICogVGhlIEFOU0kgc3RhbmRhcmQgc2F5cyB0aGF0IHxyLnF1b3R8IDw9IHxuL2R8LCB3aGVyZQotCSAqIG4vZCBpcyB0byBiZSBjb21wdXRlZCBpbiBpbmZpbml0ZSBwcmVjaXNpb24uICBJbiBvdGhlcgotCSAqIHdvcmRzLCB3ZSBzaG91bGQgYWx3YXlzIHRydW5jYXRlIHRoZSBxdW90aWVudCB0b3dhcmRzCi0JICogMCwgbmV2ZXIgLWluZmluaXR5LgotCSAqCi0JICogTWFjaGluZSBkaXZpc2lvbiBhbmQgcmVtYWluZXIgbWF5IHdvcmsgZWl0aGVyIHdheSB3aGVuCi0JICogb25lIG9yIGJvdGggb2YgbiBvciBkIGlzIG5lZ2F0aXZlLiAgSWYgb25seSBvbmUgaXMKLQkgKiBuZWdhdGl2ZSBhbmQgci5xdW90IGhhcyBiZWVuIHRydW5jYXRlZCB0b3dhcmRzIC1pbmYsCi0JICogci5yZW0gd2lsbCBoYXZlIHRoZSBzYW1lIHNpZ24gYXMgZGVub20gYW5kIHRoZSBvcHBvc2l0ZQotCSAqIHNpZ24gb2YgbnVtOyBpZiBib3RoIGFyZSBuZWdhdGl2ZSBhbmQgci5xdW90IGhhcyBiZWVuCi0JICogdHJ1bmNhdGVkIHRvd2FyZHMgLWluZiwgci5yZW0gd2lsbCBiZSBwb3NpdGl2ZSAod2lsbAotCSAqIGhhdmUgdGhlIG9wcG9zaXRlIHNpZ24gb2YgbnVtKS4gIFRoZXNlIGFyZSBjb25zaWRlcmVkCi0JICogYHdyb25nJy4KLQkgKgotCSAqIElmIGJvdGggYXJlIG51bSBhbmQgZGVub20gYXJlIHBvc2l0aXZlLCByIHdpbGwgYWx3YXlzCi0JICogYmUgcG9zaXRpdmUuCi0JICoKLQkgKiBUaGlzIGFsbCBib2lscyBkb3duIHRvOgotCSAqCWlmIG51bSA+PSAwLCBidXQgci5yZW0gPCAwLCB3ZSBnb3QgdGhlIHdyb25nIGFuc3dlci4KLQkgKiBJbiB0aGF0IGNhc2UsIHRvIGdldCB0aGUgcmlnaHQgYW5zd2VyLCBhZGQgMSB0byByLnF1b3QgYW5kCi0JICogc3VidHJhY3QgZGVub20gZnJvbSByLnJlbS4KLQkgKi8KLQlpZiAobnVtID49IDAgJiYgci5yZW0gPCAwKSB7Ci0JCXIucXVvdCsrOwotCQlyLnJlbSAtPSBkZW5vbTsKLQl9Ci0JcmV0dXJuIChyKTsKLX0KZGlmZiAtLWdpdCBhL2xpYmMvc3RkbGliL2pyYW5kNDguYyBiL2xpYmMvc3RkbGliL2pyYW5kNDguYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2I4YzU5Mi4uMDAwMDAwMAotLS0gYS9saWJjL3N0ZGxpYi9qcmFuZDQ4LmMKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi0vKgkkT3BlbkJTRDoganJhbmQ0OC5jLHYgMS4zIDIwMDUvMDgvMDggMDg6MDU6MzYgZXNwaWUgRXhwICQgKi8KLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTMgTWFydGluIEJpcmdtZWllcgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBZb3UgbWF5IHJlZGlzdHJpYnV0ZSB1bm1vZGlmaWVkIG9yIG1vZGlmaWVkIHZlcnNpb25zIG9mIHRoaXMgc291cmNlCi0gKiBjb2RlIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgYW5kIHRoZQotICogZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIHJldGFpbmVkLgotICoKLSAqIFRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgYGBhcyBpcycnLCBhbmQgY29tZXMgd2l0aCBubyB3YXJyYW50aWVzCi0gKiBvZiBhbnkga2luZC4gSSBzaGFsbCBpbiBubyBldmVudCBiZSBsaWFibGUgZm9yIGFueXRoaW5nIHRoYXQgaGFwcGVucwotICogdG8gYW55b25lL2FueXRoaW5nIHdoZW4gdXNpbmcgdGhpcyBzb2Z0d2FyZS4KLSAqLwotCi0jaW5jbHVkZSAicmFuZDQ4LmgiCi0KLWxvbmcKLWpyYW5kNDgodW5zaWduZWQgc2hvcnQgeHNlZWRbM10pCi17Ci0JX19kb3JhbmQ0OCh4c2VlZCk7Ci0JcmV0dXJuICgobG9uZykgeHNlZWRbMl0gPDwgMTYpICsgKGxvbmcpIHhzZWVkWzFdOwotfQpkaWZmIC0tZ2l0IGEvbGliYy9zdGRsaWIvbGRpdi5jIGIvbGliYy9zdGRsaWIvbGRpdi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NzUwNjVmLi4wMDAwMDAwCi0tLSBhL2xpYmMvc3RkbGliL2xkaXYuYworKysgL2Rldi9udWxsCkBAIC0xLDUwICswLDAgQEAKLS8qCSRPcGVuQlNEOiBsZGl2LmMsdiAxLjUgMjAwNS8wOC8wOCAwODowNTozNiBlc3BpZSBFeHAgJCAqLwotLyoKLSAqIENvcHlyaWdodCAoYykgMTk5MCBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKLSAqIENocmlzIFRvcmVrLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSA8c3RkbGliLmg+CQkvKiBsZGl2X3QgKi8KLQotbGRpdl90Ci1sZGl2KGxvbmcgbnVtLCBsb25nIGRlbm9tKQotewotCWxkaXZfdCByOwotCi0JLyogc2VlIGRpdi5jIGZvciBjb21tZW50cyAqLwotCi0Jci5xdW90ID0gbnVtIC8gZGVub207Ci0Jci5yZW0gPSBudW0gJSBkZW5vbTsKLQlpZiAobnVtID49IDAgJiYgci5yZW0gPCAwKSB7Ci0JCXIucXVvdCsrOwotCQlyLnJlbSAtPSBkZW5vbTsKLQl9Ci0JcmV0dXJuIChyKTsKLX0KZGlmZiAtLWdpdCBhL2xpYmMvc3RkbGliL2xsZGl2LmMgYi9saWJjL3N0ZGxpYi9sbGRpdi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOGQ2Yzk3Li4wMDAwMDAwCi0tLSBhL2xpYmMvc3RkbGliL2xsZGl2LmMKKysrIC9kZXYvbnVsbApAQCAtMSw1MCArMCwwIEBACi0vKgkkT3BlbkJTRDogbGxkaXYuYyx2IDEuMSAyMDA2LzAxLzEzIDE3OjU4OjA5IG1pbGxlcnQgRXhwICQJKi8KLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTAgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5Ci0gKiBDaHJpcyBUb3Jlay4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0gKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKLSAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgPHN0ZGxpYi5oPgkJLyogbGxkaXZfdCAqLwotCi1sbGRpdl90Ci1sbGRpdihsb25nIGxvbmcgbnVtLCBsb25nIGxvbmcgZGVub20pCi17Ci0JbGxkaXZfdCByOwotCi0JLyogc2VlIGRpdi5jIGZvciBjb21tZW50cyAqLwotCi0Jci5xdW90ID0gbnVtIC8gZGVub207Ci0Jci5yZW0gPSBudW0gJSBkZW5vbTsKLQlpZiAobnVtID49IDAgJiYgci5yZW0gPCAwKSB7Ci0JCXIucXVvdCsrOwotCQlyLnJlbSAtPSBkZW5vbTsKLQl9Ci0JcmV0dXJuIChyKTsKLX0KZGlmZiAtLWdpdCBhL2xpYmMvc3RkbGliL2xvY2FsZS5jIGIvbGliYy9zdGRsaWIvbG9jYWxlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlkYWJiZTQuLjAwMDAwMDAKLS0tIGEvbGliYy9zdGRsaWIvbG9jYWxlLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogICAgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUwotICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKLSAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCi0gKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKLSAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAotICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0gKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0jaW5jbHVkZSA8bG9jYWxlLmg+Ci0KLWNoYXIqIHNldGxvY2FsZSAoaW50IGNhdGVnb3J5LCBjaGFyIGNvbnN0ICpsb2NhbGUpCi17Ci0gICAgLyogSU5URU5USU9OQUw6IHRoZXJlIGlzIG5vIGxvY2FsZSBzdXBwb3J0IGluIEJpb25pYyAqLwotICAgIHJldHVybiAwOwotfQpkaWZmIC0tZ2l0IGEvbGliYy9zdGRsaWIvbHJhbmQ0OC5jIGIvbGliYy9zdGRsaWIvbHJhbmQ0OC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMWJlYjg1Li4wMDAwMDAwCi0tLSBhL2xpYmMvc3RkbGliL2xyYW5kNDguYworKysgL2Rldi9udWxsCkBAIC0xLDI0ICswLDAgQEAKLS8qCSRPcGVuQlNEOiBscmFuZDQ4LmMsdiAxLjMgMjAwNS8wOC8wOCAwODowNTozNiBlc3BpZSBFeHAgJCAqLwotLyoKLSAqIENvcHlyaWdodCAoYykgMTk5MyBNYXJ0aW4gQmlyZ21laWVyCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFlvdSBtYXkgcmVkaXN0cmlidXRlIHVubW9kaWZpZWQgb3IgbW9kaWZpZWQgdmVyc2lvbnMgb2YgdGhpcyBzb3VyY2UKLSAqIGNvZGUgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBhbmQgdGhlCi0gKiBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgcmV0YWluZWQuCi0gKgotICogVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCBgYGFzIGlzJycsIGFuZCBjb21lcyB3aXRoIG5vIHdhcnJhbnRpZXMKLSAqIG9mIGFueSBraW5kLiBJIHNoYWxsIGluIG5vIGV2ZW50IGJlIGxpYWJsZSBmb3IgYW55dGhpbmcgdGhhdCBoYXBwZW5zCi0gKiB0byBhbnlvbmUvYW55dGhpbmcgd2hlbiB1c2luZyB0aGlzIHNvZnR3YXJlLgotICovCi0KLSNpbmNsdWRlICJyYW5kNDguaCIKLQotZXh0ZXJuIHVuc2lnbmVkIHNob3J0IF9fcmFuZDQ4X3NlZWRbM107Ci0KLWxvbmcKLWxyYW5kNDgodm9pZCkKLXsKLQlfX2RvcmFuZDQ4KF9fcmFuZDQ4X3NlZWQpOwotCXJldHVybiAoKGxvbmcpIF9fcmFuZDQ4X3NlZWRbMl0gPDwgMTUpICsgKChsb25nKSBfX3JhbmQ0OF9zZWVkWzFdID4+IDEpOwotfQpkaWZmIC0tZ2l0IGEvbGliYy9zdGRsaWIvbXJhbmQ0OC5jIGIvbGliYy9zdGRsaWIvbXJhbmQ0OC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NzcyNjRhLi4wMDAwMDAwCi0tLSBhL2xpYmMvc3RkbGliL21yYW5kNDguYworKysgL2Rldi9udWxsCkBAIC0xLDI0ICswLDAgQEAKLS8qCSRPcGVuQlNEOiBtcmFuZDQ4LmMsdiAxLjMgMjAwNS8wOC8wOCAwODowNTozNyBlc3BpZSBFeHAgJCAqLwotLyoKLSAqIENvcHlyaWdodCAoYykgMTk5MyBNYXJ0aW4gQmlyZ21laWVyCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFlvdSBtYXkgcmVkaXN0cmlidXRlIHVubW9kaWZpZWQgb3IgbW9kaWZpZWQgdmVyc2lvbnMgb2YgdGhpcyBzb3VyY2UKLSAqIGNvZGUgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBhbmQgdGhlCi0gKiBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgcmV0YWluZWQuCi0gKgotICogVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCBgYGFzIGlzJycsIGFuZCBjb21lcyB3aXRoIG5vIHdhcnJhbnRpZXMKLSAqIG9mIGFueSBraW5kLiBJIHNoYWxsIGluIG5vIGV2ZW50IGJlIGxpYWJsZSBmb3IgYW55dGhpbmcgdGhhdCBoYXBwZW5zCi0gKiB0byBhbnlvbmUvYW55dGhpbmcgd2hlbiB1c2luZyB0aGlzIHNvZnR3YXJlLgotICovCi0KLSNpbmNsdWRlICJyYW5kNDguaCIKLQotZXh0ZXJuIHVuc2lnbmVkIHNob3J0IF9fcmFuZDQ4X3NlZWRbM107Ci0KLWxvbmcKLW1yYW5kNDgodm9pZCkKLXsKLQlfX2RvcmFuZDQ4KF9fcmFuZDQ4X3NlZWQpOwotCXJldHVybiAoKGxvbmcpIF9fcmFuZDQ4X3NlZWRbMl0gPDwgMTYpICsgKGxvbmcpIF9fcmFuZDQ4X3NlZWRbMV07Ci19CmRpZmYgLS1naXQgYS9saWJjL3N0ZGxpYi9ucmFuZDQ4LmMgYi9saWJjL3N0ZGxpYi9ucmFuZDQ4LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYxZjU0OGMuLjAwMDAwMDAKLS0tIGEvbGliYy9zdGRsaWIvbnJhbmQ0OC5jCisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotLyoJJE9wZW5CU0Q6IG5yYW5kNDguYyx2IDEuMyAyMDA1LzA4LzA4IDA4OjA1OjM3IGVzcGllIEV4cCAkICovCi0vKgotICogQ29weXJpZ2h0IChjKSAxOTkzIE1hcnRpbiBCaXJnbWVpZXIKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogWW91IG1heSByZWRpc3RyaWJ1dGUgdW5tb2RpZmllZCBvciBtb2RpZmllZCB2ZXJzaW9ucyBvZiB0aGlzIHNvdXJjZQotICogY29kZSBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIGFuZCB0aGUKLSAqIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSByZXRhaW5lZC4KLSAqCi0gKiBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkIGBgYXMgaXMnJywgYW5kIGNvbWVzIHdpdGggbm8gd2FycmFudGllcwotICogb2YgYW55IGtpbmQuIEkgc2hhbGwgaW4gbm8gZXZlbnQgYmUgbGlhYmxlIGZvciBhbnl0aGluZyB0aGF0IGhhcHBlbnMKLSAqIHRvIGFueW9uZS9hbnl0aGluZyB3aGVuIHVzaW5nIHRoaXMgc29mdHdhcmUuCi0gKi8KLQotI2luY2x1ZGUgInJhbmQ0OC5oIgotCi1sb25nCi1ucmFuZDQ4KHVuc2lnbmVkIHNob3J0IHhzZWVkWzNdKQotewotCV9fZG9yYW5kNDgoeHNlZWQpOwotCXJldHVybiAoKGxvbmcpIHhzZWVkWzJdIDw8IDE1KSArICgobG9uZykgeHNlZWRbMV0gPj4gMSk7Ci19CmRpZmYgLS1naXQgYS9saWJjL3N0ZGxpYi9xc29ydC5jIGIvbGliYy9zdGRsaWIvcXNvcnQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjZmYzhlMS4uMDAwMDAwMAotLS0gYS9saWJjL3N0ZGxpYi9xc29ydC5jCisrKyAvZGV2L251bGwKQEAgLTEsMTYxICswLDAgQEAKLS8qCSRPcGVuQlNEOiBxc29ydC5jLHYgMS4xMCAyMDA1LzA4LzA4IDA4OjA1OjM3IGVzcGllIEV4cCAkICovCi0vKi0KLSAqIENvcHlyaWdodCAoYykgMTk5MiwgMTk5MwotICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0gKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLQotc3RhdGljIF9faW5saW5lIGNoYXIJKm1lZDMoY2hhciAqLCBjaGFyICosIGNoYXIgKiwgaW50ICgqKShjb25zdCB2b2lkICosIGNvbnN0IHZvaWQgKikpOwotc3RhdGljIF9faW5saW5lIHZvaWQJIHN3YXBmdW5jKGNoYXIgKiwgY2hhciAqLCBpbnQsIGludCk7Ci0KLSNkZWZpbmUgbWluKGEsIGIpCShhKSA8IChiKSA/IGEgOiBiCi0KLS8qCi0gKiBRc29ydCByb3V0aW5lIGZyb20gQmVudGxleSAmIE1jSWxyb3kncyAiRW5naW5lZXJpbmcgYSBTb3J0IEZ1bmN0aW9uIi4KLSAqLwotI2RlZmluZSBzd2FwY29kZShUWVBFLCBwYXJtaSwgcGFybWosIG4pIHsJCVwKLQlsb25nIGkgPSAobikgLyBzaXplb2YgKFRZUEUpOwkJCVwKLQlUWVBFICpwaSA9IChUWVBFICopIChwYXJtaSk7CQkJXAotCVRZUEUgKnBqID0gKFRZUEUgKikgKHBhcm1qKTsJCQlcCi0JZG8gewkJCQkJCVwKLQkJVFlQRQl0ID0gKnBpOwkJCVwKLQkJKnBpKysgPSAqcGo7CQkJCVwKLQkJKnBqKysgPSB0OwkJCQlcCi0gICAgICAgIH0gd2hpbGUgKC0taSA+IDApOwkJCQlcCi19Ci0KLSNkZWZpbmUgU1dBUElOSVQoYSwgZXMpIHN3YXB0eXBlID0gKChjaGFyICopYSAtIChjaGFyICopMCkgJSBzaXplb2YobG9uZykgfHwgXAotCWVzICUgc2l6ZW9mKGxvbmcpID8gMiA6IGVzID09IHNpemVvZihsb25nKT8gMCA6IDE7Ci0KLXN0YXRpYyBfX2lubGluZSB2b2lkCi1zd2FwZnVuYyhjaGFyICphLCBjaGFyICpiLCBpbnQgbiwgaW50IHN3YXB0eXBlKQotewotCWlmIChzd2FwdHlwZSA8PSAxKQotCQlzd2FwY29kZShsb25nLCBhLCBiLCBuKQotCWVsc2UKLQkJc3dhcGNvZGUoY2hhciwgYSwgYiwgbikKLX0KLQotI2RlZmluZSBzd2FwKGEsIGIpCQkJCQlcCi0JaWYgKHN3YXB0eXBlID09IDApIHsJCQkJXAotCQlsb25nIHQgPSAqKGxvbmcgKikoYSk7CQkJXAotCQkqKGxvbmcgKikoYSkgPSAqKGxvbmcgKikoYik7CQlcCi0JCSoobG9uZyAqKShiKSA9IHQ7CQkJXAotCX0gZWxzZQkJCQkJCVwKLQkJc3dhcGZ1bmMoYSwgYiwgZXMsIHN3YXB0eXBlKQotCi0jZGVmaW5lIHZlY3N3YXAoYSwgYiwgbikJaWYgKChuKSA+IDApIHN3YXBmdW5jKGEsIGIsIG4sIHN3YXB0eXBlKQotCi1zdGF0aWMgX19pbmxpbmUgY2hhciAqCi1tZWQzKGNoYXIgKmEsIGNoYXIgKmIsIGNoYXIgKmMsIGludCAoKmNtcCkoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICopKQotewotCXJldHVybiBjbXAoYSwgYikgPCAwID8KLQkgICAgICAgKGNtcChiLCBjKSA8IDAgPyBiIDogKGNtcChhLCBjKSA8IDAgPyBjIDogYSApKQotICAgICAgICAgICAgICA6KGNtcChiLCBjKSA+IDAgPyBiIDogKGNtcChhLCBjKSA8IDAgPyBhIDogYyApKTsKLX0KLQotdm9pZAotcXNvcnQodm9pZCAqYWEsIHNpemVfdCBuLCBzaXplX3QgZXMsIGludCAoKmNtcCkoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICopKQotewotCWNoYXIgKnBhLCAqcGIsICpwYywgKnBkLCAqcGwsICpwbSwgKnBuOwotCWludCBkLCByLCBzd2FwdHlwZSwgc3dhcF9jbnQ7Ci0JY2hhciAqYSA9IGFhOwotCi1sb29wOglTV0FQSU5JVChhLCBlcyk7Ci0Jc3dhcF9jbnQgPSAwOwotCWlmIChuIDwgNykgewotCQlmb3IgKHBtID0gKGNoYXIgKilhICsgZXM7IHBtIDwgKGNoYXIgKikgYSArIG4gKiBlczsgcG0gKz0gZXMpCi0JCQlmb3IgKHBsID0gcG07IHBsID4gKGNoYXIgKikgYSAmJiBjbXAocGwgLSBlcywgcGwpID4gMDsKLQkJCSAgICAgcGwgLT0gZXMpCi0JCQkJc3dhcChwbCwgcGwgLSBlcyk7Ci0JCXJldHVybjsKLQl9Ci0JcG0gPSAoY2hhciAqKWEgKyAobiAvIDIpICogZXM7Ci0JaWYgKG4gPiA3KSB7Ci0JCXBsID0gKGNoYXIgKilhOwotCQlwbiA9IChjaGFyICopYSArIChuIC0gMSkgKiBlczsKLQkJaWYgKG4gPiA0MCkgewotCQkJZCA9IChuIC8gOCkgKiBlczsKLQkJCXBsID0gbWVkMyhwbCwgcGwgKyBkLCBwbCArIDIgKiBkLCBjbXApOwotCQkJcG0gPSBtZWQzKHBtIC0gZCwgcG0sIHBtICsgZCwgY21wKTsKLQkJCXBuID0gbWVkMyhwbiAtIDIgKiBkLCBwbiAtIGQsIHBuLCBjbXApOwotCQl9Ci0JCXBtID0gbWVkMyhwbCwgcG0sIHBuLCBjbXApOwotCX0KLQlzd2FwKGEsIHBtKTsKLQlwYSA9IHBiID0gKGNoYXIgKilhICsgZXM7Ci0KLQlwYyA9IHBkID0gKGNoYXIgKilhICsgKG4gLSAxKSAqIGVzOwotCWZvciAoOzspIHsKLQkJd2hpbGUgKHBiIDw9IHBjICYmIChyID0gY21wKHBiLCBhKSkgPD0gMCkgewotCQkJaWYgKHIgPT0gMCkgewotCQkJCXN3YXBfY250ID0gMTsKLQkJCQlzd2FwKHBhLCBwYik7Ci0JCQkJcGEgKz0gZXM7Ci0JCQl9Ci0JCQlwYiArPSBlczsKLQkJfQotCQl3aGlsZSAocGIgPD0gcGMgJiYgKHIgPSBjbXAocGMsIGEpKSA+PSAwKSB7Ci0JCQlpZiAociA9PSAwKSB7Ci0JCQkJc3dhcF9jbnQgPSAxOwotCQkJCXN3YXAocGMsIHBkKTsKLQkJCQlwZCAtPSBlczsKLQkJCX0KLQkJCXBjIC09IGVzOwotCQl9Ci0JCWlmIChwYiA+IHBjKQotCQkJYnJlYWs7Ci0JCXN3YXAocGIsIHBjKTsKLQkJc3dhcF9jbnQgPSAxOwotCQlwYiArPSBlczsKLQkJcGMgLT0gZXM7Ci0JfQotCWlmIChzd2FwX2NudCA9PSAwKSB7ICAvKiBTd2l0Y2ggdG8gaW5zZXJ0aW9uIHNvcnQgKi8KLQkJZm9yIChwbSA9IChjaGFyICopIGEgKyBlczsgcG0gPCAoY2hhciAqKSBhICsgbiAqIGVzOyBwbSArPSBlcykKLQkJCWZvciAocGwgPSBwbTsgcGwgPiAoY2hhciAqKSBhICYmIGNtcChwbCAtIGVzLCBwbCkgPiAwOwotCQkJICAgICBwbCAtPSBlcykKLQkJCQlzd2FwKHBsLCBwbCAtIGVzKTsKLQkJcmV0dXJuOwotCX0KLQotCXBuID0gKGNoYXIgKilhICsgbiAqIGVzOwotCXIgPSBtaW4ocGEgLSAoY2hhciAqKWEsIHBiIC0gcGEpOwotCXZlY3N3YXAoYSwgcGIgLSByLCByKTsKLQlyID0gbWluKHBkIC0gcGMsIHBuIC0gcGQgLSAoaW50KWVzKTsKLQl2ZWNzd2FwKHBiLCBwbiAtIHIsIHIpOwotCWlmICgociA9IHBiIC0gcGEpID4gKGludCllcykKLQkJcXNvcnQoYSwgciAvIGVzLCBlcywgY21wKTsKLQlpZiAoKHIgPSBwZCAtIHBjKSA+IChpbnQpZXMpIHsKLQkJLyogSXRlcmF0ZSByYXRoZXIgdGhhbiByZWN1cnNlIHRvIHNhdmUgc3RhY2sgc3BhY2UgKi8KLQkJYSA9IHBuIC0gcjsKLQkJbiA9IHIgLyBlczsKLQkJZ290byBsb29wOwotCX0KLQkvKiBxc29ydChwbiAtIHIsIHIgLyBlcywgZXMsIGNtcCk7ICovCi19CmRpZmYgLS1naXQgYS9saWJjL3N0ZGxpYi9zZWVkNDguYyBiL2xpYmMvc3RkbGliL3NlZWQ0OC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ODMyNjJmLi4wMDAwMDAwCi0tLSBhL2xpYmMvc3RkbGliL3NlZWQ0OC5jCisrKyAvZGV2L251bGwKQEAgLTEsMzcgKzAsMCBAQAotLyoJJE9wZW5CU0Q6IHNlZWQ0OC5jLHYgMS4zIDIwMDUvMDgvMDggMDg6MDU6MzcgZXNwaWUgRXhwICQgKi8KLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTMgTWFydGluIEJpcmdtZWllcgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBZb3UgbWF5IHJlZGlzdHJpYnV0ZSB1bm1vZGlmaWVkIG9yIG1vZGlmaWVkIHZlcnNpb25zIG9mIHRoaXMgc291cmNlCi0gKiBjb2RlIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgYW5kIHRoZQotICogZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIHJldGFpbmVkLgotICoKLSAqIFRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgYGBhcyBpcycnLCBhbmQgY29tZXMgd2l0aCBubyB3YXJyYW50aWVzCi0gKiBvZiBhbnkga2luZC4gSSBzaGFsbCBpbiBubyBldmVudCBiZSBsaWFibGUgZm9yIGFueXRoaW5nIHRoYXQgaGFwcGVucwotICogdG8gYW55b25lL2FueXRoaW5nIHdoZW4gdXNpbmcgdGhpcyBzb2Z0d2FyZS4KLSAqLwotCi0jaW5jbHVkZSAicmFuZDQ4LmgiCi0KLWV4dGVybiB1bnNpZ25lZCBzaG9ydCBfX3JhbmQ0OF9zZWVkWzNdOwotZXh0ZXJuIHVuc2lnbmVkIHNob3J0IF9fcmFuZDQ4X211bHRbM107Ci1leHRlcm4gdW5zaWduZWQgc2hvcnQgX19yYW5kNDhfYWRkOwotCi11bnNpZ25lZCBzaG9ydCAqCi1zZWVkNDgodW5zaWduZWQgc2hvcnQgeHNlZWRbM10pCi17Ci0Jc3RhdGljIHVuc2lnbmVkIHNob3J0IHNzZWVkWzNdOwotCi0Jc3NlZWRbMF0gPSBfX3JhbmQ0OF9zZWVkWzBdOwotCXNzZWVkWzFdID0gX19yYW5kNDhfc2VlZFsxXTsKLQlzc2VlZFsyXSA9IF9fcmFuZDQ4X3NlZWRbMl07Ci0JX19yYW5kNDhfc2VlZFswXSA9IHhzZWVkWzBdOwotCV9fcmFuZDQ4X3NlZWRbMV0gPSB4c2VlZFsxXTsKLQlfX3JhbmQ0OF9zZWVkWzJdID0geHNlZWRbMl07Ci0JX19yYW5kNDhfbXVsdFswXSA9IFJBTkQ0OF9NVUxUXzA7Ci0JX19yYW5kNDhfbXVsdFsxXSA9IFJBTkQ0OF9NVUxUXzE7Ci0JX19yYW5kNDhfbXVsdFsyXSA9IFJBTkQ0OF9NVUxUXzI7Ci0JX19yYW5kNDhfYWRkID0gUkFORDQ4X0FERDsKLQlyZXR1cm4gc3NlZWQ7Ci19CmRpZmYgLS1naXQgYS9saWJjL3N0ZGxpYi9zZXRqbXBlcnIuYyBiL2xpYmMvc3RkbGliL3NldGptcGVyci5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YTA2Y2RjLi4wMDAwMDAwCi0tLSBhL2xpYmMvc3RkbGliL3NldGptcGVyci5jCisrKyAvZGV2L251bGwKQEAgLTEsNDYgKzAsMCBAQAotLyoJJE9wZW5CU0Q6IHNldGptcGVyci5jLHYgMS41IDIwMDUvMDgvMDggMDg6MDU6MzQgZXNwaWUgRXhwICQgKi8KLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDE5ODAsIDE5OTMKLSAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0vKgotICogVGhpcyByb3V0aW5lIGlzIGNhbGxlZCBmcm9tIGxvbmdqbXAoKSB3aGVuIGFuIGVycm9yIG9jY3Vycy4KLSAqIFByb2dyYW1zIHRoYXQgd2lzaCB0byBleGl0IGdyYWNlZnVsbHkgZnJvbSB0aGlzIGVycm9yIG1heQotICogd3JpdGUgdGhlaXIgb3duIHZlcnNpb25zLgotICogSWYgdGhpcyByb3V0aW5lIHJldHVybnMsIHRoZSBwcm9ncmFtIGlzIGFib3J0ZWQuCi0gKi8KLQotI2luY2x1ZGUgPHNldGptcC5oPgotI2luY2x1ZGUgPHVuaXN0ZC5oPgotCi12b2lkCi1sb25nam1wZXJyb3Iodm9pZCkKLXsKLSNkZWZpbmUJRVJSTVNHCSJsb25nam1wIGJvdGNoLlxuIgotCSh2b2lkKXdyaXRlKFNUREVSUl9GSUxFTk8sIEVSUk1TRywgc2l6ZW9mKEVSUk1TRykgLSAxKTsKLX0KZGlmZiAtLWdpdCBhL2xpYmMvc3RkbGliL3NyYW5kNDguYyBiL2xpYmMvc3RkbGliL3NyYW5kNDguYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjc2YjZjYy4uMDAwMDAwMAotLS0gYS9saWJjL3N0ZGxpYi9zcmFuZDQ4LmMKKysrIC9kZXYvbnVsbApAQCAtMSwzMSArMCwwIEBACi0vKgkkT3BlbkJTRDogc3JhbmQ0OC5jLHYgMS4zIDIwMDUvMDgvMDggMDg6MDU6MzcgZXNwaWUgRXhwICQgKi8KLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTMgTWFydGluIEJpcmdtZWllcgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBZb3UgbWF5IHJlZGlzdHJpYnV0ZSB1bm1vZGlmaWVkIG9yIG1vZGlmaWVkIHZlcnNpb25zIG9mIHRoaXMgc291cmNlCi0gKiBjb2RlIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgYW5kIHRoZQotICogZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIHJldGFpbmVkLgotICoKLSAqIFRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgYGBhcyBpcycnLCBhbmQgY29tZXMgd2l0aCBubyB3YXJyYW50aWVzCi0gKiBvZiBhbnkga2luZC4gSSBzaGFsbCBpbiBubyBldmVudCBiZSBsaWFibGUgZm9yIGFueXRoaW5nIHRoYXQgaGFwcGVucwotICogdG8gYW55b25lL2FueXRoaW5nIHdoZW4gdXNpbmcgdGhpcyBzb2Z0d2FyZS4KLSAqLwotCi0jaW5jbHVkZSAicmFuZDQ4LmgiCi0KLWV4dGVybiB1bnNpZ25lZCBzaG9ydCBfX3JhbmQ0OF9zZWVkWzNdOwotZXh0ZXJuIHVuc2lnbmVkIHNob3J0IF9fcmFuZDQ4X211bHRbM107Ci1leHRlcm4gdW5zaWduZWQgc2hvcnQgX19yYW5kNDhfYWRkOwotCi12b2lkCi1zcmFuZDQ4KGxvbmcgc2VlZCkKLXsKLQlfX3JhbmQ0OF9zZWVkWzBdID0gUkFORDQ4X1NFRURfMDsKLQlfX3JhbmQ0OF9zZWVkWzFdID0gKHVuc2lnbmVkIHNob3J0KSBzZWVkOwotCV9fcmFuZDQ4X3NlZWRbMl0gPSAodW5zaWduZWQgc2hvcnQpIChzZWVkID4+IDE2KTsKLQlfX3JhbmQ0OF9tdWx0WzBdID0gUkFORDQ4X01VTFRfMDsKLQlfX3JhbmQ0OF9tdWx0WzFdID0gUkFORDQ4X01VTFRfMTsKLQlfX3JhbmQ0OF9tdWx0WzJdID0gUkFORDQ4X01VTFRfMjsKLQlfX3JhbmQ0OF9hZGQgPSBSQU5ENDhfQUREOwotfQpkaWZmIC0tZ2l0IGEvbGliYy9zdGRsaWIvd2NoYXIuYyBiL2xpYmMvc3RkbGliL3djaGFyLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ4MzYxM2EuLjAwMDAwMDAKLS0tIGEvbGliYy9zdGRsaWIvd2NoYXIuYworKysgL2Rldi9udWxsCkBAIC0xLDMzMCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogICAgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUwotICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKLSAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCi0gKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKLSAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAotICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0gKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0jaW5jbHVkZSA8d2NoYXIuaD4KLSNpbmNsdWRlIDxjdHlwZS5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPGVycm5vLmg+Ci0KLS8qIHN0dWJzIGZvciB3aWRlLWNoYXIgZnVuY3Rpb25zICovCi13aW50X3QgIGJ0b3djKGludCBjKQotewotICByZXR1cm4gKGMgPT0gRU9GKSA/IFdFT0YgOiBjOwotfQotCi1pbnQgZndwcmludGYoRklMRSAqc3RyZWFtLCBjb25zdCB3Y2hhcl90ICpmb3JtYXQsIC4uLikKLXsKLSAgICB2YV9saXN0ICBhcmdzOwotICAgIGludCAgICAgIHJlc3VsdDsKLQotICAgIHZhX3N0YXJ0KGFyZ3MsIGZvcm1hdCk7Ci0gICAgcmVzdWx0ID0gdmZ3cHJpbnRmKHN0cmVhbSwgZm9ybWF0LCBhcmdzKTsKLSAgICB2YV9lbmQoYXJncyk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotaW50IHdwcmludGYoY29uc3Qgd2NoYXJfdCAqZm9ybWF0LCAuLi4pCi17Ci0gICAgdmFfbGlzdCAgYXJnczsKLSAgICBpbnQgICAgICByZXN1bHQ7Ci0KLSAgICB2YV9zdGFydChhcmdzLCBmb3JtYXQpOwotICAgIHJlc3VsdCA9IHZ3cHJpbnRmKGZvcm1hdCwgYXJncyk7Ci0gICAgdmFfZW5kKGFyZ3MpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLWludCBzd3ByaW50Zih3Y2hhcl90ICpzLCBzaXplX3QgbiwgY29uc3Qgd2NoYXJfdCAqZm9ybWF0LCAuLi4pCi17Ci0gICAgdmFfbGlzdCAgYXJnczsKLSAgICBpbnQgICAgICByZXN1bHQ7Ci0KLSAgICB2YV9zdGFydChhcmdzLCBmb3JtYXQpOwotICAgIHJlc3VsdCA9IHZzd3ByaW50ZihzLCBuLCBmb3JtYXQsIGFyZ3MpOwotICAgIHZhX2VuZChhcmdzKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1pbnQgdndwcmludGYoY29uc3Qgd2NoYXJfdCAqZm9ybWF0LCB2YV9saXN0IGFyZykKLXsKLSAgICByZXR1cm4gdmZ3cHJpbnRmKHN0ZG91dCwgZm9ybWF0LCBhcmcpOwotfQotCi1pbnQgdmZ3cHJpbnRmKEZJTEUgKnN0cmVhbSwgY29uc3Qgd2NoYXJfdCAqZm9ybWF0LCB2YV9saXN0IGFyZykKLXsKLSAgICBlcnJubyA9IEVOT1RTVVA7Ci0gICAgcmV0dXJuIC0xOwotfQotCi1pbnQgdnN3cHJpbnRmKHdjaGFyX3QgKnMsIHNpemVfdCBuLCBjb25zdCB3Y2hhcl90ICpmb3JtYXQsIHZhX2xpc3QgYXJnKQotewotICAgIGVycm5vID0gRU5PVFNVUDsKLSAgICByZXR1cm4gLTE7Ci19Ci0KLWludCBmd3NjYW5mKEZJTEUgKnN0cmVhbSwgY29uc3Qgd2NoYXJfdCAqZm9ybWF0LCAuLi4gKQotewotICAgIGVycm5vID0gRU5PVFNVUDsKLSAgICByZXR1cm4gLTE7Ci19Ci0KLWludCB3c2NhbmYoY29uc3Qgd2NoYXJfdCAqZm9ybWF0LCAuLi4gKQotewotICAgIHZhX2xpc3QgIGFyZ3M7Ci0gICAgaW50ICAgICAgcmVzdWx0OwotCi0gICAgdmFfc3RhcnQgKGFyZ3MsIGZvcm1hdCk7Ci0gICAgcmVzdWx0ID0gZndzY2FuZihzdGRvdXQsIGZvcm1hdCwgYXJncyApOwotICAgIHZhX2VuZCAoYXJncyk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotaW50IHN3c2NhbmYoY29uc3Qgd2NoYXJfdCAqcywgY29uc3Qgd2NoYXJfdCAqZm9ybWF0LCAuLi4gKQotewotICAgIGVycm5vID0gRU5PVFNVUDsKLSAgICByZXR1cm4gLTE7Ci19Ci0KLWludCBpc3dhbG51bSh3aW50X3Qgd2MpIHsgcmV0dXJuIGlzYWxudW0od2MpOyB9Ci1pbnQgaXN3YWxwaGEod2ludF90IHdjKSB7IHJldHVybiBpc2FscGhhKHdjKTsgfQotaW50IGlzd2NudHJsKHdpbnRfdCB3YykgeyByZXR1cm4gaXNjbnRybCh3Yyk7IH0KLWludCBpc3dkaWdpdCh3aW50X3Qgd2MpIHsgcmV0dXJuIGlzZGlnaXQod2MpOyB9Ci1pbnQgaXN3Z3JhcGgod2ludF90IHdjKSB7IHJldHVybiBpc2dyYXBoKHdjKTsgfQotaW50IGlzd2xvd2VyKHdpbnRfdCB3YykgeyByZXR1cm4gaXNsb3dlcih3Yyk7IH0KLWludCBpc3dwcmludCh3aW50X3Qgd2MpIHsgcmV0dXJuIGlzcHJpbnQod2MpOyB9Ci1pbnQgaXN3cHVuY3Qod2ludF90IHdjKSB7IHJldHVybiBpc3B1bmN0KHdjKTsgfQotaW50IGlzd3NwYWNlKHdpbnRfdCB3YykgeyByZXR1cm4gaXNzcGFjZSh3Yyk7IH0KLWludCBpc3d1cHBlcih3aW50X3Qgd2MpIHsgcmV0dXJuIGlzdXBwZXIod2MpOyB9Ci1pbnQgaXN3eGRpZ2l0KHdpbnRfdCB3YykgeyByZXR1cm4gaXN4ZGlnaXQod2MpOyB9Ci0KLWludCBpc3djdHlwZSh3aW50X3Qgd2MsIHdjdHlwZV90IGNoYXJjbGFzcykKLXsKLSAgICBzd2l0Y2ggKGNoYXJjbGFzcykgewotICAgICAgICBjYXNlIFdDX1RZUEVfQUxOVU06IHJldHVybiBpc2FsbnVtKHdjKTsKLSAgICAgICAgY2FzZSBXQ19UWVBFX0FMUEhBOiByZXR1cm4gaXNhbHBoYSh3Yyk7Ci0gICAgICAgIGNhc2UgV0NfVFlQRV9CTEFOSzogcmV0dXJuIGlzYmxhbmsod2MpOwotICAgICAgICBjYXNlIFdDX1RZUEVfQ05UUkw6IHJldHVybiBpc2NudHJsKHdjKTsKLSAgICAgICAgY2FzZSBXQ19UWVBFX0RJR0lUOiByZXR1cm4gaXNkaWdpdCh3Yyk7Ci0gICAgICAgIGNhc2UgV0NfVFlQRV9HUkFQSDogcmV0dXJuIGlzZ3JhcGgod2MpOwotICAgICAgICBjYXNlIFdDX1RZUEVfTE9XRVI6IHJldHVybiBpc2xvd2VyKHdjKTsKLSAgICAgICAgY2FzZSBXQ19UWVBFX1BSSU5UOiByZXR1cm4gaXNwcmludCh3Yyk7Ci0gICAgICAgIGNhc2UgV0NfVFlQRV9QVU5DVDogcmV0dXJuIGlzcHVuY3Qod2MpOwotICAgICAgICBjYXNlIFdDX1RZUEVfU1BBQ0U6IHJldHVybiBpc3NwYWNlKHdjKTsKLSAgICAgICAgY2FzZSBXQ19UWVBFX1VQUEVSOiByZXR1cm4gaXN1cHBlcih3Yyk7Ci0gICAgICAgIGNhc2UgV0NfVFlQRV9YRElHSVQ6IHJldHVybiBpc3hkaWdpdCh3Yyk7Ci0gICAgICAgIGRlZmF1bHQ6IHJldHVybiAwOwotICAgIH07Ci19Ci0KLXdpbnRfdCBmZ2V0d2MoRklMRSAqc3RyZWFtKQotewotICAgIHJldHVybiAod2ludF90KWZnZXRjKHN0cmVhbSk7Ci19Ci0KLXdjaGFyX3QgKmZnZXR3cyh3Y2hhcl90ICp3cywgaW50IG4sIEZJTEUgKnN0cmVhbSkKLXsKLSAgICByZXR1cm4gKHdjaGFyX3QqKSBmZ2V0cygoY2hhciopd3MsIG4sIHN0cmVhbSk7Ci19Ci0KLXdpbnRfdCAgIGZwdXR3Yyh3Y2hhcl90IHdjLCBGSUxFICpzdHJlYW0pCi17Ci0gICAgcmV0dXJuICh3aW50X3QpZnB1dGMoKGNoYXIpd2MsIHN0cmVhbSk7Ci19Ci0KLWludCAgZnB1dHdzKGNvbnN0IHdjaGFyX3QgKnN0ciwgRklMRSAqc3RyZWFtKQotewotICAgIHJldHVybiBmcHV0cyggKGNvbnN0IGNoYXIqKXN0ciwgc3RyZWFtICk7Ci19Ci0KLWludCAgZndpZGUoRklMRSAqc3RyZWFtLCBpbnQgIG1vZGUpCi17Ci0gICAgc3RyZWFtPXN0cmVhbTsKLSAgICByZXR1cm4gKG1vZGUpOwotfQotCi13aW50X3QgIGdldHdjKEZJTEUgKnN0cmVhbSkKLXsKLSAgICByZXR1cm4gZ2V0YyhzdHJlYW0pOwotfQotCi13aW50X3QgIGdldHdjaGFyKHZvaWQpCi17Ci0gICAgcmV0dXJuIGdldGNoYXIoKTsKLX0KLQotaW50IG1ic2luaXQoY29uc3QgbWJzdGF0ZV90ICpwcykKLXsKLSAgICBwcz1wczsKLSAgICByZXR1cm4gMTsKLX0KLQotc2l6ZV90IG1icmxlbihjb25zdCBjaGFyICpzLCBzaXplX3QgbiwgbWJzdGF0ZV90ICpwcykKLXsKLSAgICByZXR1cm4gKG4gIT0gMCk7Ci19Ci0KLXNpemVfdCBtYnJ0b3djKHdjaGFyX3QgKnB3YywgY29uc3QgY2hhciAqcywgc2l6ZV90IG4sIG1ic3RhdGVfdCAqcHMpCi17Ci0gICAgaWYgKHMgPT0gTlVMTCkgewotICAgICAgICBzICAgPSAiIjsKLSAgICAgICAgcHdjID0gTlVMTDsKLSAgICB9Ci0gICAgaWYgKG4gPT0gMCkgewotICAgICAgICBpZiAocHdjKQotICAgICAgICAgICAgKnB3YyA9IDA7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICBpZiAocHdjKQotICAgICAgICAqcHdjID0gKnM7Ci0KLSAgICByZXR1cm4gKCpzICE9IDApOwotfQotCi1zaXplX3QgbWJzcnRvd2NzKHdjaGFyX3QgKmRzdCwgY29uc3QgY2hhciAqKnNyYywgc2l6ZV90IGxlbiwgbWJzdGF0ZV90ICpwcykKLXsKLSAgICBjb25zdCBjaGFyKiAgcyAgPSAqc3JjOwotICAgIGNvbnN0IGNoYXIqICBzMiA9IG1lbWNociggcywgMCwgbGVuICk7Ci0KLSAgICBpZiAoczIgIT0gTlVMTCkKLSAgICAgICAgbGVuID0gKHNpemVfdCkoczIgLSBzKSArIDFVOwotCi0gICAgaWYgKGRzdCkKLSAgICAgICAgbWVtY3B5KCAoY2hhciopZHN0LCBzLCBsZW4gKTsKLQotICAgICpzcmMgPSBzICsgbGVuOwotICAgIHJldHVybiBsZW47Ci19Ci0KLXNpemVfdCBtYnN0b3djcyh3Y2hhcl90ICpkc3QsIGNvbnN0IGNoYXIgKnNyYywgc2l6ZV90IGxlbikKLXsKLSAgICByZXR1cm4gbWJzcnRvd2NzKGRzdCwgJnNyYywgbGVuLCBOVUxMKTsKLX0KLQotd2ludF90ICBwdXR3Yyh3Y2hhcl90IHdjLCBGSUxFICpzdHJlYW0pCi17Ci0gICAgcmV0dXJuIGZwdXRjKChjaGFyKXdjLCBzdHJlYW0pOwotfQotCi13aW50X3QgIHB1dHdjaGFyKHdjaGFyX3Qgd2MpCi17Ci0gICAgcmV0dXJuICBwdXRjaGFyKChjaGFyKXdjKTsKLX0KLQotd2ludF90ICB0b3dsb3dlcih3aW50X3Qgd2MpCi17Ci0gICAgcmV0dXJuIHRvbG93ZXIod2MpOwotfQotCi13aW50X3QgIHRvd3VwcGVyKHdpbnRfdCAgd2MpCi17Ci0gICAgcmV0dXJuIHRvdXBwZXIod2MpOwotfQotCi13aW50X3QgIHVuZ2V0d2Mod2ludF90IHdjLCBGSUxFICpzdHJlYW0pCi17Ci0gICAgcmV0dXJuIHVuZ2V0YygoY2hhcil3Yywgc3RyZWFtKTsKLX0KLQotc2l6ZV90IHdjcnRvbWIoY2hhciAqcywgd2NoYXJfdCB3YywgbWJzdGF0ZV90ICpwcykKLXsKLSAgICBpZiAocyAhPSBOVUxMKQotICAgICAgICAqcyA9IDE7Ci0gICAgcmV0dXJuIDE7Ci19Ci0KLXNpemVfdCB3Y3NmdGltZSh3Y2hhcl90ICp3Y3MsIHNpemVfdCBtYXhzaXplLCBjb25zdCB3Y2hhcl90ICpmb3JtYXQsICBjb25zdCBzdHJ1Y3QgdG0gKnRpbXB0cikKLXsKLSAgICByZXR1cm4gc3RyZnRpbWUoIChjaGFyKil3Y3MsIG1heHNpemUsIChjb25zdCBjaGFyKilmb3JtYXQsIHRpbXB0ciApOwotfQotCi1zaXplX3Qgd2NzcnRvbWJzKGNoYXIgKmRzdCwgY29uc3Qgd2NoYXJfdCAqKnNyYywgc2l6ZV90IGxlbiwgbWJzdGF0ZV90ICpwcykKLXsKLSAgICBjb25zdCBjaGFyKiAgcyA9IChjb25zdCBjaGFyKikqc3JjOwotICAgIGNvbnN0IGNoYXIqICBzMiA9IG1lbWNociggcywgMCwgbGVuICk7Ci0KLSAgICBpZiAoczIgIT0gTlVMTCkKLSAgICAgICAgbGVuID0gKHMyIC0gcykrMTsKLQotICAgIGlmIChkc3QgIT0gTlVMTCkKLSAgICAgICAgbWVtY3B5KCBkc3QsIHMsIGxlbiApOwotCi0gICAgKnNyYyA9ICh3Y2hhcl90KikocyArIGxlbik7Ci0gICAgcmV0dXJuIGxlbjsKLX0KLQotc2l6ZV90IHdjc3RvbWJzKGNoYXIgKmRzdCwgY29uc3Qgd2NoYXJfdCAqc3JjLCBzaXplX3QgbGVuKQotewotICAgIHJldHVybiB3Y3NydG9tYnMoZHN0LCAmc3JjLCBsZW4sIE5VTEwpOwotfQotCi1kb3VibGUgd2NzdG9kKGNvbnN0IHdjaGFyX3QgKm5wdHIsIHdjaGFyX3QgKiplbmRwdHIpCi17Ci0gICAgcmV0dXJuIHN0cnRvZCggKGNvbnN0IGNoYXIqKW5wdHIsIChjaGFyKiopZW5kcHRyICk7Ci19Ci0KLWxvbmcgaW50IHdjc3RvbChjb25zdCB3Y2hhcl90ICpucHRyLCB3Y2hhcl90ICoqZW5kcHRyLCBpbnQgYmFzZSkKLXsKLSAgICByZXR1cm4gc3RydG9sKCAoY29uc3QgY2hhciopbnB0ciwgKGNoYXIqKillbmRwdHIsIGJhc2UgKTsKLX0KLQotdW5zaWduZWQgbG9uZyBpbnQgd2NzdG91bChjb25zdCB3Y2hhcl90ICpucHRyLCB3Y2hhcl90ICoqZW5kcHRyLCBpbnQgYmFzZSkKLXsKLSAgICByZXR1cm4gc3RydG91bCggKGNvbnN0IGNoYXIqKW5wdHIsIChjaGFyKiopZW5kcHRyLCBiYXNlICk7Ci19Ci0KLXdjaGFyX3QgKndjc3djcyhjb25zdCB3Y2hhcl90ICp3czEsIGNvbnN0IHdjaGFyX3QgKndzMikKLXsKLSAgICByZXR1cm4gKHdjaGFyX3QqKSBzdHJzdHIoIChjb25zdCBjaGFyKil3czEsIChjb25zdCBjaGFyKil3czIgKTsKLX0KLQotaW50IHdjdG9iKHdpbnRfdCBjKQotewotICAgIHJldHVybiBjOwotfQotCi13Y3R5cGVfdCB3Y3R5cGUoY29uc3QgY2hhciAqcHJvcGVydHkpCi17Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0ICBwcm9wZXJ0aWVzW1dDX1RZUEVfTUFYXSA9Ci0gICAgewotICAgICAgICAiPGludmFsaWQ+IiwKLSAgICAgICAgImFsbnVtIiwgImFscGhhIiwgImJsYW5rIiwgImNudHJsIiwgImRpZ2l0IiwgImdyYXBoIiwKLSAgICAgICAgImxvd2VyIiwgInByaW50IiwgInB1bmN0IiwgInNwYWNlIiwgInVwcGVyIiwgInhkaWdpdCIKLSAgICB9OwotICAgIGludCAgbm47Ci0KLSAgICBmb3IgKCBubiA9IDA7IG5uIDwgV0NfVFlQRV9NQVg7IG5uKysgKQotICAgICAgICBpZiAoICFzdHJjbXAoIHByb3BlcnRpZXNbbm5dLCBwcm9wZXJ0eSApICkKLSAgICAgICAgICAgIHJldHVybiAod2N0eXBlX3QpKG5uKTsKLQotICAgIHJldHVybiAwOwotfQotCi1pbnQgd2N3aWR0aCh3Y2hhcl90IHdjKQotewotICAgIHJldHVybiAod2MgPiAwKTsKLX0KZGlmZiAtLWdpdCBhL2xpYmMvc3RyaW5nL19fc3RycmNocl9jaGsuYyBiL2xpYmMvc3RyaW5nL19fc3RycmNocl9jaGsuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMWU1ZDY2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9zdHJpbmcvX19zdHJyY2hyX2Noay5jCkBAIC0wLDAgKzEsNDggQEAKKy8qCSRPcGVuQlNEOiByaW5kZXguYyx2IDEuNiAyMDA1LzA4LzA4IDA4OjA1OjM3IGVzcGllIEV4cCAkICovCisvKgorICogQ29weXJpZ2h0IChjKSAxOTg4IFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlICJsaWJjX2xvZ2dpbmcuaCIKKworY2hhciAqCitfX3N0cnJjaHJfY2hrKGNvbnN0IGNoYXIgKnAsIGludCBjaCwgc2l6ZV90IHNfbGVuKQoreworCWNoYXIgKnNhdmU7CisKKwlmb3IgKHNhdmUgPSBOVUxMOzsgKytwLCBzX2xlbi0tKSB7CisJCWlmIChzX2xlbiA9PSAwKQorCQkJX19mb3J0aWZ5X2Noa19mYWlsKCJzdHJyY2hyIHJlYWQgYmV5b25kIGJ1ZmZlciIsIDApOworCQlpZiAoKnAgPT0gKGNoYXIpIGNoKQorCQkJc2F2ZSA9IChjaGFyICopcDsKKwkJaWYgKCEqcCkKKwkJCXJldHVybihzYXZlKTsKKwl9CisJLyogTk9UUkVBQ0hFRCAqLworfQpkaWZmIC0tZ2l0IGEvbGliYy9zdHJpbmcvbWVtY2NweS5jIGIvbGliYy9zdHJpbmcvbWVtY2NweS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ODlmZGU2Li4wMDAwMDAwCi0tLSBhL2xpYmMvc3RyaW5nL21lbWNjcHkuYworKysgL2Rldi9udWxsCkBAIC0xLDQ3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0gKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiAgICBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCi0gKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQotICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAotICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKLSAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUwotICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECi0gKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0gKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLSNpbmNsdWRlIDxzdGRkZWYuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotdm9pZCAqbWVtY2NweSh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYywgaW50IGMsIHNpemVfdCBuKQotewotICAgIGNoYXIqICAgICAgICBxICAgICA9IGRzdDsKLSAgICBjb25zdCBjaGFyKiAgcCAgICAgPSBzcmM7Ci0gICAgY29uc3QgY2hhciogIHBfZW5kID0gcCArIG47Ci0gICAgY2hhciAgICAgICAgIGNoICAgID0gfihjaGFyKWM7ICAvKiBlbnN1cmUgY2ggIT0gYyAqLwotCi0gICAgZm9yICg7OykgewotICAgICAgICBpZiAoY2ggPT0gYyB8fCBwID49IHBfZW5kKSBicmVhazsKLSAgICAgICAgKnErKyA9IGNoID0gKnArKzsKLSAgICB9Ci0KLSAgICBpZiAocCA+PSBwX2VuZCAmJiBjaCAhPSBjKQotICAgICAgICByZXR1cm4gTlVMTDsKLQotICAgIHJldHVybiBxOwotfQpkaWZmIC0tZ2l0IGEvbGliYy9zdHJpbmcvbWVtY21wMTYuYyBiL2xpYmMvc3RyaW5nL21lbWNtcDE2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTI2NzcyMgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvc3RyaW5nL21lbWNtcDE2LmMKQEAgLTAsMCArMSw0NSBAQAorLyoKK0NvcHlyaWdodCAoYykgMjAxMyBJbnRlbCBDb3Jwb3JhdGlvbgorQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKworICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICAgICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKworICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICAgICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorICAgICogYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisKKyAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgSW50ZWwgQ29ycG9yYXRpb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgICAgKiBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAgICAqIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECitBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CitMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KK0FOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqLworCisjaW5jbHVkZSA8c3RkZGVmLmg+CisKKy8qIFVub3B0aW1pc2VkIHZlcnNpb24gb2YgX19tZW1jbXAxNiAqLworaW50IF9fbWVtY21wMTYoY29uc3QgdW5zaWduZWQgc2hvcnQgKnB0cjEsIGNvbnN0IHVuc2lnbmVkIHNob3J0ICpwdHIyLCBzaXplX3QgbikKK3sKKyAgc2l6ZV90IGk7CisKKyAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgeworICAgIGlmICgqcHRyMSAhPSAqcHRyMikKKyAgICAgIHJldHVybiAqcHRyMSAtICpwdHIyOworICAgIHB0cjErKzsKKyAgICBwdHIyKys7CisgIH0KKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9saWJjL3N0cmluZy9tZW1tb3ZlLmMgYi9saWJjL3N0cmluZy9tZW1tb3ZlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA3MjEwNGIuLjAwMDAwMDAKLS0tIGEvbGliYy9zdHJpbmcvbWVtbW92ZS5jCisrKyAvZGV2L251bGwKQEAgLTEsNDQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqICAgIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKLSAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi0gKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCi0gKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAotICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCi0gKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKLSAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPHN0cmluZ3MuaD4KLQotdm9pZCAqbWVtbW92ZSh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IG4pCi17Ci0gIGNvbnN0IGNoYXIgKnAgPSBzcmM7Ci0gIGNoYXIgKnEgPSBkc3Q7Ci0gIC8qIFdlIGNhbiB1c2UgdGhlIG9wdGltaXplZCBtZW1jcHkgaWYgdGhlIGRlc3RpbmF0aW9uIGlzIGJlbG93IHRoZQotICAgKiBzb3VyY2UgKGkuZS4gcSA8IHApLCBvciBpZiBpdCBpcyBjb21wbGV0ZWx5IG92ZXIgaXQgKGkuZS4gcSA+PSBwK24pLgotICAgKi8KLSAgaWYgKF9fYnVpbHRpbl9leHBlY3QoKHEgPCBwKSB8fCAoKHNpemVfdCkocSAtIHApID49IG4pLCAxKSkgewotICAgIHJldHVybiBtZW1jcHkoZHN0LCBzcmMsIG4pOwotICB9IGVsc2UgewotICAgIGJjb3B5KHNyYywgZHN0LCBuKTsKLSAgICByZXR1cm4gZHN0OwotICB9Ci19CmRpZmYgLS1naXQgYS9saWJjL3N0cmluZy9zdHJjYXNlc3RyLmMgYi9saWJjL3N0cmluZy9zdHJjYXNlc3RyLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhNzRjMDEuLjAwMDAwMDAKLS0tIGEvbGliYy9zdHJpbmcvc3RyY2FzZXN0ci5jCisrKyAvZGV2L251bGwKQEAgLTEsNjAgKzAsMCBAQAotLyoJJE9wZW5CU0Q6IHN0cmNhc2VzdHIuYyx2IDEuMyAyMDA2LzAzLzMxIDA1OjM0OjU1IGRlcmFhZHQgRXhwICQJKi8KLS8qCSROZXRCU0Q6IHN0cmNhc2VzdHIuYyx2IDEuMiAyMDA1LzAyLzA5IDIxOjM1OjQ3IGtsZWluayBFeHAgJAkqLwotCi0vKi0KLSAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MwotICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQotICogQ2hyaXMgVG9yZWsuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0gKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlIDxjdHlwZS5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotCi0vKgotICogRmluZCB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiBmaW5kIGluIHMsIGlnbm9yZSBjYXNlLgotICovCi1jaGFyICoKLXN0cmNhc2VzdHIoY29uc3QgY2hhciAqcywgY29uc3QgY2hhciAqZmluZCkKLXsKLQljaGFyIGMsIHNjOwotCXNpemVfdCBsZW47Ci0KLQlpZiAoKGMgPSAqZmluZCsrKSAhPSAwKSB7Ci0JCWMgPSAoY2hhcil0b2xvd2VyKCh1bnNpZ25lZCBjaGFyKWMpOwotCQlsZW4gPSBzdHJsZW4oZmluZCk7Ci0JCWRvIHsKLQkJCWRvIHsKLQkJCQlpZiAoKHNjID0gKnMrKykgPT0gMCkKLQkJCQkJcmV0dXJuIChOVUxMKTsKLQkJCX0gd2hpbGUgKChjaGFyKXRvbG93ZXIoKHVuc2lnbmVkIGNoYXIpc2MpICE9IGMpOwotCQl9IHdoaWxlIChzdHJuY2FzZWNtcChzLCBmaW5kLCBsZW4pICE9IDApOwotCQlzLS07Ci0JfQotCXJldHVybiAoKGNoYXIgKilzKTsKLX0KZGlmZiAtLWdpdCBhL2xpYmMvc3RyaW5nL3N0cmNoci5jIGIvbGliYy9zdHJpbmcvc3RyY2hyLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDliNDMzMmMuLjAwMDAwMDAKLS0tIGEvbGliYy9zdHJpbmcvc3RyY2hyLmMKKysrIC9kZXYvbnVsbApAQCAtMSw0MyArMCwwIEBACi0vKgkkT3BlbkJTRDogaW5kZXguYyx2IDEuNSAyMDA1LzA4LzA4IDA4OjA1OjM3IGVzcGllIEV4cCAkICovCi0vKi0KLSAqIENvcHlyaWdodCAoYykgMTk5MCBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0gKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKLSAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgPHN0cmluZy5oPgotCi1jaGFyICoKLXN0cmNocihjb25zdCBjaGFyICpwLCBpbnQgY2gpCi17Ci0JZm9yICg7OyArK3ApIHsKLQkJaWYgKCpwID09IChjaGFyKSBjaCkKLQkJCXJldHVybigoY2hhciAqKXApOwotCQlpZiAoISpwKQotCQkJcmV0dXJuKChjaGFyICopTlVMTCk7Ci0JfQotCS8qIE5PVFJFQUNIRUQgKi8KLX0KZGlmZiAtLWdpdCBhL2xpYmMvc3RyaW5nL3N0cmNvbGwuYyBiL2xpYmMvc3RyaW5nL3N0cmNvbGwuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggZTNiMWVjMy4uMDAwMDAwMAotLS0gYS9saWJjL3N0cmluZy9zdHJjb2xsLmMKKysrIC9kZXYvbnVsbApAQCAtMSw0MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogICAgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUwotICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKLSAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCi0gKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKLSAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAotICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0gKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0KLS8qCi0gKiBDb21wYXJlIHN0cmluZ3MgdXNpbmcgdGhlIGN1cnJlbnQgbG9jYWxlLiAgU2luY2UgQmlvbmljIHJlYWxseSBkb2VzIG5vdAotICogc3VwcG9ydCBsb2NhbGVzLCB3ZSBhc3N1bWUgd2UgYWx3YXlzIHVzZSB0aGUgQyBsb2NhbGUgYW5kIGNhbGwgc3RyY21wLgotICoKLSAqIFRoaXMgZnVuY3Rpb24gaXMgcHJvdmlkZWQgdG8gbWFrZSBsaWJzdGRjKystdjMgdXNhYmxlLgotICovCi1pbnQKLXN0cmNvbGwoY29uc3QgY2hhciAqczEsIGNvbnN0IGNoYXIgKnMyKQotewotCXJldHVybiBzdHJjbXAoczEsIHMyKTsKLX0KZGlmZiAtLWdpdCBhL2xpYmMvc3RyaW5nL3N0cmVycm9yLmMgYi9saWJjL3N0cmluZy9zdHJlcnJvci5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMmFlMDAxLi4wMDAwMDAwCi0tLSBhL2xpYmMvc3RyaW5nL3N0cmVycm9yLmMKKysrIC9kZXYvbnVsbApAQCAtMSw0MSArMCwwIEBACi0vKgkkT3BlbkJTRDogc3RyZXJyb3IuYyx2IDEuNyAyMDA1LzA4LzA4IDA4OjA1OjM3IGVzcGllIEV4cCAkICovCi0vKgotICogQ29weXJpZ2h0IChjKSAxOTg4IFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0gKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxsaW1pdHMuaD4KLQotY2hhciAqCi1zdHJlcnJvcihpbnQgbnVtKQotewotCXN0YXRpYyBjaGFyIGJ1ZlsyNTZdOwotCi0JKHZvaWQpc3RyZXJyb3JfcihudW0sIGJ1Ziwgc2l6ZW9mKGJ1ZikpOwotCXJldHVybiAoYnVmKTsKLX0KZGlmZiAtLWdpdCBhL2xpYmMvc3RyaW5nL3N0cmVycm9yX3IuYyBiL2xpYmMvc3RyaW5nL3N0cmVycm9yX3IuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmYyNmYxNy4uMDAwMDAwMAotLS0gYS9saWJjL3N0cmluZy9zdHJlcnJvcl9yLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNjMgKzAsMCBAQAotLyogJE9wZW5CU0Q6IHN0cmVycm9yX3IuYyx2IDEuNiAyMDA1LzA4LzA4IDA4OjA1OjM3IGVzcGllIEV4cCAkICovCi0vKiBQdWJsaWMgRG9tYWluIDxtYXJjQHNuYWZ1Lm9yZz4gKi8KLQotI2RlZmluZSBzeXNfc2lnbGlzdAlfc3lzX3NpZ2xpc3QKLQotI2luY2x1ZGUgPGVycm5vLmg+Ci0jaW5jbHVkZSA8bGltaXRzLmg+Ci0jaW5jbHVkZSA8c2lnbmFsLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0KLXR5cGVkZWYgc3RydWN0IHsKLSAgaW50ICAgICAgICAgICBjb2RlOwotICBjb25zdCBjaGFyKiAgIG1zZzsKLX0gQ29kZVN0cmluZzsKLQotc3RhdGljIGNvbnN0IGNoYXIqCi1fX2NvZGVfc3RyaW5nX2xvb2t1cCggY29uc3QgQ29kZVN0cmluZyogIHN0cmluZ3MsCi0gICAgICAgICAgICAgICAgICAgICAgaW50ICAgICAgICAgICAgICAgIGNvZGUgKQotewotICAgIGludCAgbm4gPSAwOwotCi0gICAgZm9yICg7OykKLSAgICB7Ci0gICAgICAgIGlmIChzdHJpbmdzW25uXS5tc2cgPT0gTlVMTCkKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGlmIChzdHJpbmdzW25uXS5jb2RlID09IGNvZGUpCi0gICAgICAgICAgICByZXR1cm4gc3RyaW5nc1tubl0ubXNnOwotCi0gICAgICAgIG5uKys7Ci0gICAgfQotICAgIHJldHVybiBOVUxMOwotfQotCi0KLXN0YXRpYyBjb25zdCBDb2RlU3RyaW5nICBfc3lzX2Vycm9yX3N0cmluZ3NbXSA9Ci17Ci0jZGVmaW5lICBfX0JJT05JQ19FUlJERUYoeCx5LHopICB7IHksIHogfSwKLSNpbmNsdWRlIDxzeXMvX2VycmRlZnMuaD4KLSAgICB7IDAsIE5VTEwgfQotfTsKLQotc3RhdGljIHNpemVfdAotX19kaWdpdHMxMCh1bnNpZ25lZCBpbnQgbnVtKQotewotCXNpemVfdCBpID0gMDsKLQotCWRvIHsKLQkJbnVtIC89IDEwOwotCQlpKys7Ci0JfSB3aGlsZSAobnVtICE9IDApOwotCi0JcmV0dXJuIGk7Ci19Ci0KLXN0YXRpYyBpbnQKLV9faXRvYShpbnQgbnVtLCBpbnQgc2lnbiwgY2hhciAqYnVmZmVyLCBzaXplX3Qgc3RhcnQsIHNpemVfdCBlbmQpCi17Ci0Jc2l6ZV90IHBvczsKLQl1bnNpZ25lZCBpbnQgYTsKLQlpbnQgbmVnOwotCi0JaWYgKHNpZ24gJiYgbnVtIDwgMCkgewotCQlhID0gLW51bTsKLQkJbmVnID0gMTsKLQl9Ci0JZWxzZSB7Ci0JCWEgPSBudW07Ci0JCW5lZyA9IDA7Ci0JfQotCi0JcG9zID0gc3RhcnQgKyBfX2RpZ2l0czEwKGEpOwotCWlmIChuZWcpCi0JICAgIHBvcysrOwotCi0JaWYgKHBvcyA8IGVuZCkKLQkJYnVmZmVyW3Bvc10gPSAnXDAnOwotCWVsc2UKLQkJcmV0dXJuIEVSQU5HRTsKLQlwb3MtLTsKLQlkbyB7Ci0JCWJ1ZmZlcltwb3NdID0gKGEgJSAxMCkgKyAnMCc7Ci0JCXBvcy0tOwotCQlhIC89IDEwOwotCX0gd2hpbGUgKGEgIT0gMCk7Ci0JaWYgKG5lZykKLQkJYnVmZmVyW3Bvc10gPSAnLSc7Ci0JcmV0dXJuIDA7Ci19Ci0KLQotaW50Ci1zdHJlcnJvcl9yKGludCBlcnJudW0sIGNoYXIgKnN0cmVycmJ1Ziwgc2l6ZV90IGJ1ZmxlbikKLXsKLSAgICBpbnQgICAgICAgICAgc2F2ZV9lcnJubzsKLSAgICBpbnQgICAgICAgICAgbGVuLCByZXQgPSAwOwotICAgIGNvbnN0IGNoYXIqICBtc2c7Ci0KLSAgICBzYXZlX2Vycm5vID0gZXJybm87Ci0gICAgbXNnICAgICAgICA9IF9fY29kZV9zdHJpbmdfbG9va3VwKCBfc3lzX2Vycm9yX3N0cmluZ3MsIGVycm51bSApOwotICAgIGlmIChtc2cgIT0gTlVMTCkgewotICAgICAgICBsZW4gPSBzdHJsY3B5KHN0cmVycmJ1ZiwgbXNnLCBidWZsZW4pOwotICAgICAgICBpZiAoKHNpemVfdClsZW4gPj0gYnVmbGVuKQotICAgICAgICAgICAgcmV0ID0gRVJBTkdFOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGxlbiA9IHN0cmxjcHkoc3RyZXJyYnVmLCAiVW5rbm93biBlcnJvcjogIiwgYnVmbGVuKTsKLSAgICAgICAgaWYgKChzaXplX3QpbGVuID49IGJ1ZmxlbikKLSAgICAgICAgICAgIHJldCA9IEVSQU5HRTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBpbnQgIHJldCA9IF9faXRvYShlcnJudW0sIDEsIHN0cmVycmJ1ZiwgbGVuLCBidWZsZW4pOwotCi0gICAgICAgICAgICBpZiAocmV0ID09IDApCi0gICAgICAgICAgICAgICAgcmV0ID0gRUlOVkFMOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiByZXQ7Ci19Ci0KLSNpZiAwCi1zdGF0aWMgY29uc3QgQ29kZVN0cmluZyAgX3N5c19zaWduYWxfc3RyaW5nc1tdID0KLXsKLSNkZWZpbmUgIFNJR0RFRih4LHkseikgIHsgeSwgeiB9LAotI2luY2x1ZGUgPHN5cy9fc2lnZGVmcy5oPgotfTsKLQotCi1zdGF0aWMgaW50Ci1fX251bTJzdHJpbmcoaW50IG51bSwgaW50IHNpZ24sIGludCBzZXRpZCwgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuLAotICAgIGNoYXIgKiBsaXN0W10sIHNpemVfdCBtYXgsIGNvbnN0IGNoYXIgKmRlZikKLXsKLQlpbnQgcmV0ID0gMDsKLQlzaXplX3QgbGVuOwotCi0JaWYgKDAgPD0gbnVtICYmIG51bSA8IG1heCkgewotCQlsZW4gPSBzdHJsY3B5KGJ1ZiwgZGVmLCBidWZsZW4pOwotCQlpZiAobGVuID49IGJ1ZmxlbikKLQkJCXJldCA9IEVSQU5HRTsKLQl9IGVsc2UgewotCQlsZW4gPSBzdHJsY3B5KGJ1ZiwgZGVmLCBidWZsZW4pOwotCQlpZiAobGVuID49IGJ1ZmxlbikKLQkJCXJldCA9IEVSQU5HRTsKLQkJZWxzZSB7Ci0JCQlyZXQgPSBfX2l0b2EobnVtLCBzaWduLCBidWYsIGxlbiwgYnVmbGVuKTsKLQkJCWlmIChyZXQgPT0gMCkKLQkJCQlyZXQgPSBFSU5WQUw7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gcmV0OwotfQotCi0KLQotI2RlZmluZSBVU0lHUFJFRklYICJVbmtub3duIHNpZ25hbDogIgotCi1jaGFyICoKLV9fc3Ryc2lnbmFsKGludCBudW0sIGNoYXIgKmJ1ZikKLXsKLQlfX251bTJzdHJpbmcobnVtLCAwLCAyLCBidWYsIE5MX1RFWFRNQVgsIChjaGFyICoqKXN5c19zaWdsaXN0LCBOU0lHLAotCSAgICBVU0lHUFJFRklYKTsKLQlyZXR1cm4gYnVmOwotfQotI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL3N0cmluZy9zdHJyY2hyLmMgYi9saWJjL3N0cmluZy9zdHJyY2hyLmMKaW5kZXggMTBjMDdlNi4uZmUyMzA2YSAxMDA2NDQKLS0tIGEvbGliYy9zdHJpbmcvc3RycmNoci5jCisrKyBiL2xpYmMvc3RyaW5nL3N0cnJjaHIuYwpAQCAtMzMsMTMgKzMzLDUgQEAKIGNoYXIgKgogc3RycmNocihjb25zdCBjaGFyICpwLCBpbnQgY2gpCiB7Ci0JY2hhciAqc2F2ZTsKLQotCWZvciAoc2F2ZSA9IE5VTEw7OyArK3ApIHsKLQkJaWYgKCpwID09IChjaGFyKSBjaCkKLQkJCXNhdmUgPSAoY2hhciAqKXA7Ci0JCWlmICghKnApCi0JCQlyZXR1cm4oc2F2ZSk7Ci0JfQotCS8qIE5PVFJFQUNIRUQgKi8KKwlyZXR1cm4gX19zdHJyY2hyX2NoayhwLCBjaCwgX19CSU9OSUNfRk9SVElGWV9VTktOT1dOX1NJWkUpOwogfQpkaWZmIC0tZ2l0IGEvbGliYy9zdHJpbmcvc3RyeGZybS5jIGIvbGliYy9zdHJpbmcvc3RyeGZybS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAzYzRkNzA3Li4wMDAwMDAwCi0tLSBhL2xpYmMvc3RyaW5nL3N0cnhmcm0uYworKysgL2Rldi9udWxsCkBAIC0xLDQ3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0gKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiAgICBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCi0gKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQotICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAotICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKLSAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUwotICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECi0gKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0gKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotLyoKLSAqIFRyYW5zZm9ybSBzdHJpbmcgczIgdG8gc3RyaW5nIHMxIHVzaW5nIHRoZSBjdXJyZW50IGxvY2FsZSBzbyB0aGF0Ci0gKiBzdHJjbXAgb2YgdHJhbnNmb3JtZWQgc3RyaW5ncyB5aWVsZHMgdGhlIHNhbWUgcmVzdWx0IGFzIHN0cmNvbGwuCi0gKiBTaW5jZSBCaW9uaWMgcmVhbGx5IGRvZXMgbm90IHN1cHBvcnQgbG9jYWxlcywgd2UgYXNzdW1lIHdlIGFsd2F5cyB1c2UKLSAqIHRoZSBDIGxvY2FsZS4KLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIGlzIHByb3ZpZGVkIHRvIG1ha2UgbGlic3RkYysrLXYzIHVzYWJsZS4KLSAqLwotc2l6ZV90Ci1zdHJ4ZnJtKGNoYXIgKnMxLCBjb25zdCBjaGFyICpzMiwgc2l6ZV90IG4pCi17Ci0Jc2l6ZV90IGxlbiA9IHN0cmxlbihzMikgKyAxOwotCi0JaWYgKGxlbiA8IG4pCi0JCW4gPSBsZW47Ci0JbWVtY3B5KHMxLCBzMiwgbik7Ci0JcmV0dXJuIGxlbjsKLX0KZGlmZiAtLWdpdCBhL2xpYmMvdG9vbHMvYmlvbmljX3V0aWxzLnB5IGIvbGliYy90b29scy9iaW9uaWNfdXRpbHMucHkKaW5kZXggYWJiNzgyMC4uZGNjZjllMyAxMDA2NDQKLS0tIGEvbGliYy90b29scy9iaW9uaWNfdXRpbHMucHkKKysrIGIvbGliYy90b29scy9iaW9uaWNfdXRpbHMucHkKQEAgLTM3LDE0MCArMzcsNiBAQAogICAgIHZlcmJvc2UgPSBsZXZlbAogCiAKLWRlZiBmaW5kX2Rpcl9vZihwYXRoKToKLSAgICAnJydyZXR1cm4gdGhlIGRpcmVjdG9yeSBuYW1lIG9mICdwYXRoJywgb3IgIi4iIGlmIHRoZXJlIGlzIG5vbmUnJycKLSAgICAjIHJlbW92ZSB0cmFpbGluZyBzbGFzaAotICAgIGlmIGxlbihwYXRoKSA+IDEgYW5kIHBhdGhbLTFdID09ICcvJzoKLSAgICAgICAgcGF0aCA9IHBhdGhbOi0xXQotCi0gICAgIyBmaW5kIHBhcmVudCBkaXJlY3RvcnkgbmFtZQotICAgIGQgPSBvcy5wYXRoLmRpcm5hbWUocGF0aCkKLSAgICBpZiBkID09ICIiOgotICAgICAgICByZXR1cm4gIi4iCi0gICAgZWxzZToKLSAgICAgICAgcmV0dXJuIGQKLQotIyAgb3RoZXIgc3R1ZmYKLSMKLSMKLWRlZiBmaW5kX2ZpbGVfZnJvbV91cHdhcmRzKGZyb21fcGF0aCx0YXJnZXRfZmlsZSk6Ci0gICAgIiIiZmluZCBhIGZpbGUgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5IG9yIGl0cyBwYXJlbnRzLiBpZiAnZnJvbV9wYXRoJyBpcyBOb25lLAotICAgICAgIHNlYWNoIGZyb20gdGhlIGN1cnJlbnQgcHJvZ3JhbSdzIGRpcmVjdG9yeSIiIgotICAgIHBhdGggPSBmcm9tX3BhdGgKLSAgICBpZiBwYXRoID09IE5vbmU6Ci0gICAgICAgIHBhdGggPSBmaW5kX2Rpcl9vZihzeXMuYXJndlswXSkKLSAgICAgICAgRCgidGhpcyBzY3JpcHQgc2VlbXMgdG8gYmUgbG9jYXRlZCBpbjogJXMiICUgcGF0aCkKLQotICAgIHdoaWxlIDE6Ci0gICAgICAgIGlmIHBhdGggPT0gIiI6Ci0gICAgICAgICAgICBwYXRoID0gIi4iCi0KLSAgICAgICAgZmlsZSA9IHBhdGggKyAiLyIgKyB0YXJnZXRfZmlsZQotICAgICAgICBEKCJwcm9iaW5nICIrZmlsZSkKLQotICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShmaWxlKToKLSAgICAgICAgICAgIEQoImZvdW5kICVzIGluICVzIiAlICh0YXJnZXRfZmlsZSwgcGF0aCkpCi0gICAgICAgICAgICByZXR1cm4gZmlsZQotCi0gICAgICAgIGlmIHBhdGggPT0gIi4iOgotICAgICAgICAgICAgYnJlYWsKLQotICAgICAgICBwYXRoID0gb3MucGF0aC5kaXJuYW1lKHBhdGgpCi0KLSAgICBwYXRoID0gIiIKLSAgICB3aGlsZSAxOgotICAgICAgICBwYXRoID0gIi4uLyIgKyBwYXRoCi0gICAgICAgIGZpbGUgPSBwYXRoICsgdGFyZ2V0X2ZpbGUKLSAgICAgICAgRCgicHJvYmluZyAiK2ZpbGUpCi0KLSAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUoZmlsZSk6Ci0gICAgICAgICAgICBEKCJmb3VuZCAlcyBpbiAlcyIgJSAodGFyZ2V0X2ZpbGUsIHBhdGgpKQotICAgICAgICAgICAgcmV0dXJuIGZpbGUKLQotCi0gICAgcmV0dXJuIE5vbmUKLQotZGVmIGZpbmRfYmlvbmljX3Jvb3QoKToKLSAgICAnJydmaW5kIHRoZSByb290IG9mIHRoZSBCaW9uaWMgc291cmNlIHRyZWUuIHdlIGNoZWNrIGZvciB0aGUgU1lTQ0FMTFMuVFhUIGZpbGUKLSAgICAgICBmcm9tIHRoZSBsb2NhdGlvbiBvZiB0aGUgY3VycmVudCBwcm9ncmFtJ3MgZGlyZWN0b3J5LicnJwotCi0gICAgIyBub3RlIHRoYXQgd2UgY2FuJ3QgdXNlIGZpbmRfZmlsZV9mcm9tX3Vwd2FyZHMoKSBzaW5jZSB3ZSBjYW4ndCB1c2Ugb3MucGF0aC5hYnNwYXRoCi0gICAgIyB0aGF0J3MgYmVjYXVzZSBpbiBzb21lIGNhc2VzIHRoZSBwNCBjbGllbnQgaXMgaW4gYSBzeW1saW5rZWQgZGlyZWN0b3J5LCBhbmQgdGhpcwotICAgICMgZnVuY3Rpb24gd2lsbCByZXR1cm4gdGhlIHJlYWwgcGF0aCBpbnN0ZWFkLCB3aGljaCBsYXRlciBjcmVhdGVzIHByb2JsZW1zIHdoZW4KLSAgICAjIHA0IGNvbW1hbmRzIGFyZSBpc3N1ZWQKLSAgICAjCi0gICAgZmlsZSA9IGZpbmRfZmlsZV9mcm9tX3Vwd2FyZHMoTm9uZSwgIlNZU0NBTExTLlRYVCIpCi0gICAgaWYgZmlsZToKLSAgICAgICAgcmV0dXJuIG9zLnBhdGguZGlybmFtZShmaWxlKQotICAgIGVsc2U6Ci0gICAgICAgIHJldHVybiBOb25lCi0KLWRlZiBmaW5kX29yaWdpbmFsX2tlcm5lbF9oZWFkZXJzKCk6Ci0gICAgIiIidHJ5IHRvIGZpbmQgdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoZSBvcmlnaW5hbCBrZXJuZWwgaGVhZGVycyIiIgotICAgIGJpb25pY19yb290ID0gZmluZF9iaW9uaWNfcm9vdCgpCi0gICAgaWYgbm90IGJpb25pY19yb290OgotICAgICAgICBEKCJDb3VsZCBub3QgZmluZCBCaW9uaWMgcm9vdCAhISIpCi0gICAgICAgIHJldHVybiBOb25lCi0KLSAgICBwYXRoID0gb3MucGF0aC5ub3JtcGF0aChiaW9uaWNfcm9vdCArICIvLi4vLi4vZXh0ZXJuYWwva2VybmVsLWhlYWRlcnMvb3JpZ2luYWwiKQotICAgIGlmIG5vdCBvcy5wYXRoLmlzZGlyKHBhdGgpOgotICAgICAgICBEKCJDb3VsZCBub3QgZmluZCAlcyIgJSAocGF0aCkpCi0gICAgICAgIHJldHVybiBOb25lCi0KLSAgICByZXR1cm4gcGF0aAotCi1kZWYgZmluZF9rZXJuZWxfaGVhZGVycygpOgotICAgICIiInRyeSB0byBmaW5kIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGUga2VybmVsIGhlYWRlcnMgZm9yIHRoaXMgbWFjaGluZSIiIgotCi0gICAgIyBGaXJzdCB0cnkgdG8gZmluZCB0aGUgb3JpZ2luYWwga2VybmVsIGhlYWRlcnMuCi0gICAgcmV0ID0gZmluZF9vcmlnaW5hbF9rZXJuZWxfaGVhZGVycygpCi0gICAgaWYgcmV0OgotICAgICAgICBEKCJmb3VuZCBvcmlnaW5hbCBrZXJuZWwgaGVhZGVycyBpbjogJXMiICUgKHJldCkpCi0gICAgICAgIHJldHVybiByZXQKLQotICAgIHN0YXR1cywgdmVyc2lvbiA9IGNvbW1hbmRzLmdldHN0YXR1c291dHB1dCggInVuYW1lIC1yIiApICAjIGdldCBMaW51eCBrZXJuZWwgdmVyc2lvbgotICAgIGlmIHN0YXR1cyAhPSAwOgotICAgICAgICBEKCJjb3VsZCBub3QgZXhlY3V0ZSAndW5hbWUgLXInIGNvbW1hbmQgcHJvcGVybHkiKQotICAgICAgICByZXR1cm4gTm9uZQotCi0gICAgIyBnZXQgcmlkIG9mIHRoZSAiLXhlblUiIHN1ZmZpeCB0aGF0IGlzIGZvdW5kIGluIFhlbiB2aXJ0dWFsIG1hY2hpbmVzCi0gICAgaWYgbGVuKHZlcnNpb24pID4gNSBhbmQgdmVyc2lvblstNTpdID09ICIteGVuVSI6Ci0gICAgICAgIHZlcnNpb24gPSB2ZXJzaW9uWzotNV0KLQotICAgIHBhdGggPSAiL3Vzci9zcmMvbGludXgtaGVhZGVycy0iICsgdmVyc2lvbiArICIvaW5jbHVkZSIKLSAgICBEKCJwcm9iaW5nICVzIGZvciBrZXJuZWwgaGVhZGVycyIgJSAocGF0aCkpCi0gICAgcmV0ID0gb3MucGF0aC5pc2RpciggcGF0aCApCi0gICAgaWYgcmV0OgotICAgICAgICBEKCJmb3VuZCBrZXJuZWwgaGVhZGVycyBpbjogJXMiICUgKHBhdGgpKQotICAgICAgICByZXR1cm4gcGF0aAotICAgIHJldHVybiBOb25lCi0KLWRlZiBmaW5kX2FyY2hfaGVhZGVyKGtlcm5lbF9oZWFkZXJzLGFyY2gsaGVhZGVyKToKLSAgICAjIEZpcnN0LCB0cnkgaW4gPHJvb3Q+L2FyY2gvPGFybT4vaW5jbHVkZS88aGVhZGVyPgotICAgICMgY29ycmVzcG9uZGluZyB0byB0aGUgbG9jYXRpb24gaW4gdGhlIGtlcm5lbCBzb3VyY2UgdHJlZSBmb3IKLSAgICAjIGNlcnRhaW4gYXJjaGl0ZWN0dXJlcyAoZS5nLiBhcm0pLgotICAgIHBhdGggPSAiJXMvYXJjaC8lcy9pbmNsdWRlL2FzbS8lcyIgJSAoa2VybmVsX2hlYWRlcnMsIGFyY2gsIGhlYWRlcikKLSAgICBEKCJQcm9iaW5nIGZvciAlcyIgJSBwYXRoKQotICAgIGlmIG9zLnBhdGguZXhpc3RzKHBhdGgpOgotICAgICAgICByZXR1cm4gcGF0aAotCi0gICAgIyBUcnkgPHJvb3Q+L2FzbS08YXJjaD4vaW5jbHVkZS88aGVhZGVyPiBjb3JyZXNwb25kaW5nIHRvIHRoZSBsb2NhdGlvbgotICAgICMgaW4gdGhlIGtlcm5lbCBzb3VyY2UgdHJlZSBmb3Igb3RoZXIgYXJjaGl0ZWN0dXJlcyAoZS5nLiB4ODYpLgotICAgIHBhdGggPSAiJXMvaW5jbHVkZS9hc20tJXMvJXMiICUgKGtlcm5lbF9oZWFkZXJzLCBhcmNoLCBoZWFkZXIpCi0gICAgRCgiUHJvYmluZyBmb3IgJXMiICUgcGF0aCkKLSAgICBpZiBvcy5wYXRoLmV4aXN0cyhwYXRoKToKLSAgICAgICAgcmV0dXJuIHBhdGgKLQotICAgICMgT3RoZXJ3aXNlLCBsb29rIHVuZGVyIDxyb290Pi9hc20tPGFyY2g+LzxoZWFkZXI+IGNvcnJlc3BvbmRpbmcKLSAgICAjIHRoZSBvcmlnaW5hbCBrZXJuZWwgaGVhZGVycyBkaXJlY3RvcnkKLSAgICBwYXRoID0gIiVzL2FzbS0lcy8lcyIgJSAoa2VybmVsX2hlYWRlcnMsIGFyY2gsIGhlYWRlcikKLSAgICBEKCJQcm9iaW5nIGZvciAlcyIgJSBwYXRoKQotICAgIGlmIG9zLnBhdGguZXhpc3RzKHBhdGgpOgotICAgICAgICByZXR1cm4gcGF0aAotCi0KLSAgICByZXR1cm4gTm9uZQotCiAjIHBhcnNlciBmb3IgdGhlIFNZU0NBTExTLlRYVCBmaWxlCiAjCiBjbGFzcyBTeXNDYWxsc1R4dFBhcnNlcjoKQEAgLTMwMiwxNyArMTY4LDYgQEAKICAgICAgICAgZnAuY2xvc2UoKQogCiAKLWNsYXNzIE91dHB1dDoKLSAgICBkZWYgIF9faW5pdF9fKHNlbGYsb3V0PXN5cy5zdGRvdXQpOgotICAgICAgICBzZWxmLm91dCA9IG91dAotCi0gICAgZGVmIHdyaXRlKHNlbGYsbXNnKToKLSAgICAgICAgc2VsZi5vdXQud3JpdGUobXNnKQotCi0gICAgZGVmIHdyaXRlbG4oc2VsZixtc2cpOgotICAgICAgICBzZWxmLm91dC53cml0ZShtc2cpCi0gICAgICAgIHNlbGYub3V0LndyaXRlKCJcbiIpCi0KIGNsYXNzIFN0cmluZ091dHB1dDoKICAgICBkZWYgX19pbml0X18oc2VsZik6CiAgICAgICAgIHNlbGYubGluZSA9ICIiCkBAIC0zMjEsNTggKzE3Niw1IEBACiAgICAgICAgIHNlbGYubGluZSArPSBtc2cKICAgICAgICAgRDIoIndyaXRlICclcyciICUgbXNnKQogCi0gICAgZGVmIHdyaXRlbG4oc2VsZixtc2cpOgotICAgICAgICBzZWxmLmxpbmUgKz0gbXNnICsgJ1xuJwotICAgICAgICBEMigid3JpdGUgJyVzXFxuJyIlIG1zZykKLQogICAgIGRlZiBnZXQoc2VsZik6CiAgICAgICAgIHJldHVybiBzZWxmLmxpbmUKLQotCi1kZWYgY3JlYXRlX2ZpbGVfcGF0aChwYXRoKToKLSAgICBkaXJzID0gW10KLSAgICB3aGlsZSAxOgotICAgICAgICBwYXJlbnQgPSBvcy5wYXRoLmRpcm5hbWUocGF0aCkKLSAgICAgICAgaWYgcGFyZW50ID09ICIvIjoKLSAgICAgICAgICAgIGJyZWFrCi0gICAgICAgIGRpcnMuYXBwZW5kKHBhcmVudCkKLSAgICAgICAgcGF0aCA9IHBhcmVudAotCi0gICAgZGlycy5yZXZlcnNlKCkKLSAgICBmb3IgZGlyIGluIGRpcnM6Ci0gICAgICAgICNwcmludCAiZGlyICVzIiAlIGRpcgotICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKGRpcik6Ci0gICAgICAgICAgICBjb250aW51ZQotICAgICAgICBvcy5ta2RpcihkaXIpCi0KLWRlZiB3YWxrX3NvdXJjZV9maWxlcyhwYXRocyxjYWxsYmFjayxhcmdzLGV4Y2x1ZGVzPVtdKToKLSAgICAiIiJyZWN1cnNpdmVseSB3YWxrIGEgbGlzdCBvZiBwYXRocyBhbmQgZmlsZXMsIG9ubHkga2VlcGluZyB0aGUgc291cmNlIGZpbGVzIGluIGRpcmVjdG9yaWVzIiIiCi0gICAgZm9yIHBhdGggaW4gcGF0aHM6Ci0gICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZGlyKHBhdGgpOgotICAgICAgICAgICAgY2FsbGJhY2socGF0aCxhcmdzKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgZm9yIHJvb3QsIGRpcnMsIGZpbGVzIGluIG9zLndhbGsocGF0aCk6Ci0gICAgICAgICAgICAgICAgI3ByaW50ICJ3LS0gJXMgKGV4OiAlcykiICUgKHJlcHIoKHJvb3QsZGlycykpLCByZXByKGV4Y2x1ZGVzKSkKLSAgICAgICAgICAgICAgICBpZiBsZW4oZXhjbHVkZXMpOgotICAgICAgICAgICAgICAgICAgICBmb3IgZCBpbiBkaXJzWzpdOgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgZCBpbiBleGNsdWRlczoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJzLnJlbW92ZShkKQotICAgICAgICAgICAgICAgIGZvciBmIGluIGZpbGVzOgotICAgICAgICAgICAgICAgICAgICByLCBleHQgPSBvcy5wYXRoLnNwbGl0ZXh0KGYpCi0gICAgICAgICAgICAgICAgICAgIGlmIGV4dCBpbiBbICIuaCIsICIuYyIsICIuY3BwIiwgIi5TIiBdOgotICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soICIlcy8lcyIgJSAocm9vdCxmKSwgYXJncyApCi0KLWRlZiBjbGVhbnVwX2RpcihwYXRoKToKLSAgICAiIiJjcmVhdGUgYSBkaXJlY3RvcnkgaWYgbmVlZGVkLCBhbmQgZW5zdXJlIHRoYXQgaXQgaXMgdG90YWxseSBlbXB0eQotICAgICAgIGJ5IHJlbW92aW5nIGFueSBleGlzdGluZyBjb250ZW50IGluIGl0IiIiCi0gICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHBhdGgpOgotICAgICAgICBvcy5ta2RpcihwYXRoKQotICAgIGVsc2U6Ci0gICAgICAgIGZvciByb290LCBkaXJzLCBmaWxlcyBpbiBvcy53YWxrKHBhdGgsIHRvcGRvd249RmFsc2UpOgotICAgICAgICAgICAgaWYgcm9vdC5lbmRzd2l0aCgia2VybmVsX2hlYWRlcnMvIik6Ci0gICAgICAgICAgICAgICAgIyBza2lwICdrZXJuZWxfaGVhZGVycycKLSAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgZm9yIG5hbWUgaW4gZmlsZXM6Ci0gICAgICAgICAgICAgICAgb3MucmVtb3ZlKG9zLnBhdGguam9pbihyb290LCBuYW1lKSkKLSAgICAgICAgICAgIGZvciBuYW1lIGluIGRpcnM6Ci0gICAgICAgICAgICAgICAgb3Mucm1kaXIob3MucGF0aC5qb2luKHJvb3QsIG5hbWUpKQpkaWZmIC0tZ2l0IGEvbGliYy90b29scy9jaGVjay1zeW1ib2xzLnB5IGIvbGliYy90b29scy9jaGVjay1zeW1ib2xzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjA5MjI1NDgKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Rvb2xzL2NoZWNrLXN5bWJvbHMucHkKQEAgLTAsMCArMSw2NCBAQAorIyEvdXNyL2Jpbi9weXRob24KKworaW1wb3J0IGdsb2IKK2ltcG9ydCBvcworaW1wb3J0IHJlCitpbXBvcnQgc3RyaW5nCitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IHN5cworCit0b29sY2hhaW4gPSBvcy5lbnZpcm9uWydBTkRST0lEX1RPT0xDSEFJTiddCithcmNoID0gcmUuc3ViKHInLiovbGludXgteDg2LyhbXi9dKykvLionLCByJ1wxJywgdG9vbGNoYWluKQorCitzeXMuc3RkZXJyLndyaXRlKCdDaGVja2luZyBzeW1ib2xzIGZvciBhcmNoICIlcyIuLi5cbicgJSBhcmNoKQorCitkZWYgR2V0U3ltYm9scyhsaWJyYXJ5LCBmdW5jdGlvbnNfb3JfdmFyaWFibGVzKToKKyAgYXBpID0gJzknCisgIGlmIGxpYnJhcnkgPT0gJ2xpYm0nIGFuZCBhcmNoID09ICdhcm0nOgorICAgIGFwaSA9ICczJworICBwYXRoID0gJyVzL2RldmVsb3BtZW50L25kay9wbGF0Zm9ybXMvYW5kcm9pZC0lcy9hcmNoLSVzL3N5bWJvbHMvJXMuc28uJXMudHh0JyAlIChvcy5lbnZpcm9uWydBTkRST0lEX0JVSUxEX1RPUCddLCBhcGksIGFyY2gsIGxpYnJhcnksIGZ1bmN0aW9uc19vcl92YXJpYWJsZXMpCisgIHN5bWJvbHMgPSBzZXQoKQorICBmb3IgbGluZSBpbiBvcGVuKHBhdGgsICdyJyk6CisgICAgc3ltYm9scy5hZGQobGluZS5yc3RyaXAoKSkKKyAgI3N5cy5zdGRvdXQud3JpdGUoJyVkICVzIGluICVzIGZvciAlc1xuJyAlIChsZW4oc3ltYm9scyksIGZ1bmN0aW9uc19vcl92YXJpYWJsZXMsIGxpYnJhcnksIGFyY2gpKQorICByZXR1cm4gc3ltYm9scworCitkZWYgQ2hlY2tTeW1ib2xzKGxpYnJhcnksIGZ1bmN0aW9uc19vcl92YXJpYWJsZXMpOgorICBleHBlY3RlZF9zeW1ib2xzID0gR2V0U3ltYm9scyhsaWJyYXJ5LCBmdW5jdGlvbnNfb3JfdmFyaWFibGVzKQorCisgIHNvX2ZpbGUgPSAnJXMvc3lzdGVtL2xpYi8lcy5zbycgJSAob3MuZW52aXJvblsnQU5EUk9JRF9QUk9EVUNUX09VVCddLCBsaWJyYXJ5KQorCisgICMgRXhhbXBsZSByZWFkZWxmIG91dHB1dDoKKyAgIyAgIDI2NDogMDAwMTYyM2MgICAgIDQgRlVOQyAgICBHTE9CQUwgREVGQVVMVCAgICA4IGNhYnNmCisgICMgICAyNjY6IDAwMDE2MjQ0ICAgICA0IEZVTkMgICAgR0xPQkFMIERFRkFVTFQgICAgOCBkcmVtZgorICAjICAgMjY3OiAwMDAxOTAxOCAgICAgNCBPQkpFQ1QgIEdMT0JBTCBERUZBVUxUICAgMTEgX19mZV9kZmxfZW52CisgICMgICAyNjg6IDAwMDAwMDAwICAgICAwIEZVTkMgICAgR0xPQkFMIERFRkFVTFQgIFVORCBfX2FlYWJpX2RjbXBsdAorCisKKyAgciA9IHJlLmNvbXBpbGUocicgK1xkKzogWzAtOWEtZl0rICtcZCsgKEZVTkN8T0JKRUNUKSArXFMrICtcUysgK1xkKyAoXFMrKScpCisKKyAgYWN0dWFsX3N5bWJvbHMgPSBzZXQoKQorICBmb3IgbGluZSBpbiBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChbJ3JlYWRlbGYnLCAnLS1keW4tc3ltcycsIHNvX2ZpbGVdKS5zcGxpdCgnXG4nKToKKyAgICBtID0gci5tYXRjaChsaW5lKQorICAgIGlmIG06CisgICAgICBpZiBtLmdyb3VwKDEpID09ICdGVU5DJyBhbmQgZnVuY3Rpb25zX29yX3ZhcmlhYmxlcyA9PSAnZnVuY3Rpb25zJzoKKyAgICAgICAgYWN0dWFsX3N5bWJvbHMuYWRkKG0uZ3JvdXAoMikpCisgICAgICBlbGlmIG0uZ3JvdXAoMSkgPT0gJ09CSkVDVCcgYW5kIGZ1bmN0aW9uc19vcl92YXJpYWJsZXMgPT0gJ3ZhcmlhYmxlcyc6CisgICAgICAgIGFjdHVhbF9zeW1ib2xzLmFkZChtLmdyb3VwKDIpKQorICAgICNlbHNlOgorICAgICAgI3ByaW50ICdpZ25vcmluZzogJyAlIGxpbmUKKworICBtaXNzaW5nID0gZXhwZWN0ZWRfc3ltYm9scyAtIGFjdHVhbF9zeW1ib2xzCisgIGlmIGxlbihtaXNzaW5nKSA+IDA6CisgICAgc3lzLnN0ZGVyci53cml0ZSgnJWQgbWlzc2luZyAlcyBpbiAlcyBmb3IgJXM6XG4nICUgKGxlbihtaXNzaW5nKSwgZnVuY3Rpb25zX29yX3ZhcmlhYmxlcywgbGlicmFyeSwgYXJjaCkpCisgICAgZm9yIG1pc3MgaW4gc29ydGVkKG1pc3NpbmcpOgorICAgICAgc3lzLnN0ZGVyci53cml0ZSgnICAlc1xuJyAlIG1pc3MpCisKKyAgcmV0dXJuIGxlbihtaXNzaW5nKSA9PSAwCisKK0NoZWNrU3ltYm9scygibGliYyIsICJmdW5jdGlvbnMiKQorQ2hlY2tTeW1ib2xzKCJsaWJjIiwgInZhcmlhYmxlcyIpCitDaGVja1N5bWJvbHMoImxpYm0iLCAiZnVuY3Rpb25zIikKK0NoZWNrU3ltYm9scygibGlibSIsICJ2YXJpYWJsZXMiKQorCitzeXMuZXhpdCgwKQpkaWZmIC0tZ2l0IGEvbGliYy90b29scy9jaGVja3N5c2NhbGxzLnB5IGIvbGliYy90b29scy9jaGVja3N5c2NhbGxzLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAyODZlNzI3Li4wMDAwMDAwCi0tLSBhL2xpYmMvdG9vbHMvY2hlY2tzeXNjYWxscy5weQorKysgL2Rldi9udWxsCkBAIC0xLDE4OSArMCwwIEBACi0jIS91c3IvYmluL3B5dGhvbgotIwotIyB0aGlzIHRvb2wgaXMgdXNlZCB0byBjaGVjayB0aGF0IHRoZSBzeXNjYWxsIG51bWJlcnMgdGhhdCBhcmUgaW4KLSMgU1lTQ0FMTFMuVFhUIGNvcnJlc3BvbmQgdG8gdGhvc2UgZm91bmQgaW4gdGhlIExpbnV4IGtlcm5lbCBzb3VyY2VzCi0jIGZvciB0aGUgYXJtIGFuZCBpMzg2IGFyY2hpdGVjdHVyZXMKLSMKLQotaW1wb3J0IHN5cywgcmUsIHN0cmluZywgb3MsIGNvbW1hbmRzCi1mcm9tICAgYmlvbmljX3V0aWxzIGltcG9ydCAqCi0KLSMgY2hhbmdlIHRoaXMgaWYgbmVjZXNzYXJ5Ci1zeXNjYWxsc190eHQgPSAiU1lTQ0FMTFMuVFhUIgotCi1kZWYgdXNhZ2UoKToKLSAgICBwcmludCAidXNhZ2U6IGNoZWNrc3lzY2FsbHMgW29wdGlvbnNdIFtrZXJuZWxfaGVhZGVyc19yb290ZGlyXSIKLSAgICBwcmludCAiICAgIG9wdGlvbnM6ICAgIC12ICAgZW5hYmxlIHZlcmJvc2UgbW9kZSIKLSAgICBzeXMuZXhpdCgxKQotCi0KLWxpbnV4X3Jvb3QgICAgPSBOb25lCi1zeXNjYWxsc19maWxlID0gTm9uZQotCi1kZWYgcGFyc2VfY29tbWFuZF9saW5lKGFyZ3MpOgotICAgIGdsb2JhbCBsaW51eF9yb290LCBzeXNjYWxsc19maWxlLCB2ZXJib3NlCi0KLSAgICBwcm9ncmFtID0gYXJnc1swXQotICAgIGFyZ3MgICAgPSBhcmdzWzE6XQotICAgIHdoaWxlIGxlbihhcmdzKSA+IDAgYW5kIGFyZ3NbMF1bMF0gPT0gIi0iOgotICAgICAgICBvcHRpb24gPSBhcmdzWzBdWzE6XQotICAgICAgICBhcmdzICAgPSBhcmdzWzE6XQotCi0gICAgICAgIGlmIG9wdGlvbiA9PSAidiI6Ci0gICAgICAgICAgICBEX3NldGxldmVsKDEpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICB1c2FnZSgpCi0KLSAgICBpZiBsZW4oYXJncykgPiAyOgotICAgICAgICB1c2FnZSgpCi0KLSAgICBpZiBsZW4oYXJncykgPT0gMDoKLSAgICAgICAgbGludXhfcm9vdCA9IGZpbmRfa2VybmVsX2hlYWRlcnMoKQotICAgICAgICBpZiBsaW51eF9yb290ID09IE5vbmU6Ci0gICAgICAgICAgICBwcmludCAiQ291bGQgbm90IGxvY2F0ZSBvcmlnaW5hbCBvciBzeXN0ZW0ga2VybmVsIGhlYWRlcnMgcm9vdCBkaXJlY3RvcnkuIgotICAgICAgICAgICAgcHJpbnQgIlBsZWFzZSBzcGVjaWZ5IG9uZSB3aGVuIGNhbGxpbmcgdGhpcyBwcm9ncmFtLCBpLmUuICdjaGVja3N5c2NhbGxzIDxoZWFkZXJzLWRpcmVjdG9yeT4nIgotICAgICAgICAgICAgc3lzLmV4aXQoMSkKLSAgICAgICAgcHJpbnQgInVzaW5nIHRoZSBmb2xsb3dpbmcga2VybmVsIGhlYWRlcnMgcm9vdDogJyVzJyIgJSBsaW51eF9yb290Ci0gICAgZWxzZToKLSAgICAgICAgbGludXhfcm9vdCA9IGFyZ3NbMF0KLSAgICAgICAgaWYgbm90IG9zLnBhdGguaXNkaXIobGludXhfcm9vdCk6Ci0gICAgICAgICAgICBwcmludCAidGhlIGRpcmVjdG9yeSAnJXMnIGRvZXMgbm90IGV4aXN0LiBhYm9ydGluZ1xuIiAlIGhlYWRlcnNfcm9vdAotICAgICAgICAgICAgc3lzLmV4aXQoMSkKLQotcGFyc2VfY29tbWFuZF9saW5lKHN5cy5hcmd2KQotCi1zeXNjYWxsc19maWxlID0gZmluZF9maWxlX2Zyb21fdXB3YXJkcyhOb25lLCBzeXNjYWxsc190eHQpCi1pZiBub3Qgc3lzY2FsbHNfZmlsZToKLSAgICBwcmludCAiY291bGQgbm90IGxvY2F0ZSB0aGUgJXMgZmlsZS4gQWJvcnRpbmciICUgc3lzY2FsbHNfdHh0Ci0gICAgc3lzLmV4aXQoMSkKLQotcHJpbnQgInBhcnNpbmcgJXMiICUgc3lzY2FsbHNfZmlsZQotCi0jIHJlYWQgdGhlIHN5c2NhbGxzIGRlc2NyaXB0aW9uIGZpbGUKLSMKLQotcGFyc2VyID0gU3lzQ2FsbHNUeHRQYXJzZXIoKQotcGFyc2VyLnBhcnNlX2ZpbGUoc3lzY2FsbHNfZmlsZSkKLXN5c2NhbGxzID0gcGFyc2VyLnN5c2NhbGxzCi0KLXJlX25yX2xpbmUgICAgICAgPSByZS5jb21waWxlKCByIiNkZWZpbmUgX19OUl8oXHcqKVxzKlwoX19OUl9TWVNDQUxMX0JBU0VcK1xzKihcdyopXCkiICkKLXJlX25yX2Nsb2NrX2xpbmUgPSByZS5jb21waWxlKCByIiNkZWZpbmUgX19OUl8oXHcqKVxzKlwoX19OUl90aW1lcl9jcmVhdGVcKyhcdyopXCkiICkKLXJlX2FybV9ucl9saW5lICAgPSByZS5jb21waWxlKCByIiNkZWZpbmUgX19BUk1fTlJfKFx3KilccypcKF9fQVJNX05SX0JBU0VcK1xzKihcdyopXCkiICkKLXJlX3g4Nl9saW5lICAgICAgPSByZS5jb21waWxlKCByIiNkZWZpbmUgX19OUl8oXHcqKVxzKihbMC05XSopIiApCi1yZV9taXBzX2xpbmUgICAgID0gcmUuY29tcGlsZSggciIjZGVmaW5lIF9fTlJfKFx3KilccypcKF9fTlJfTGludXhccypcK1xzKihbMC05XSopXCkiICkKLQotIyBub3cgcmVhZCB0aGUgTGludXggYXJtIGhlYWRlcgotZGVmIHByb2Nlc3NfbnJfbGluZShsaW5lLGRpY3QpOgotCi0gICAgbSA9IHJlX21pcHNfbGluZS5tYXRjaChsaW5lKQotICAgIGlmIG06Ci0gICAgICAgIGlmIGRpY3RbIkxpbnV4Il09PTQwMDA6Ci0gICAgICAgICAgICBkaWN0W20uZ3JvdXAoMSldID0gaW50KG0uZ3JvdXAoMikpCi0gICAgICAgIHJldHVybgotCi0gICAgbSA9IHJlX25yX2xpbmUubWF0Y2gobGluZSkKLSAgICBpZiBtOgotICAgICAgICBkaWN0W20uZ3JvdXAoMSldID0gaW50KG0uZ3JvdXAoMikpCi0gICAgICAgIHJldHVybgotCi0gICAgbSA9IHJlX25yX2Nsb2NrX2xpbmUubWF0Y2gobGluZSkKLSAgICBpZiBtOgotICAgICAgICBkaWN0W20uZ3JvdXAoMSldID0gaW50KG0uZ3JvdXAoMikpICsgMjU5Ci0gICAgICAgIHJldHVybgotCi0gICAgbSA9IHJlX2FybV9ucl9saW5lLm1hdGNoKGxpbmUpCi0gICAgaWYgbToKLSAgICAgICAgb2Zmc2V0X3N0ciA9IG0uZ3JvdXAoMikKLSAgICAgICAgI3ByaW50ICIlcyA9ICVzIiAlIChtLmdyb3VwKDEpLCBvZmZzZXRfc3RyKQotICAgICAgICBiYXNlID0gMTAKLSAgICAgICAgaWYgb2Zmc2V0X3N0ci5sb3dlcigpLnN0YXJ0c3dpdGgoIjB4Iik6Ci0gICAgICAgICAgIyBQcm9jZXNzaW5nIHNvbWV0aGluZyBzaW1pbGFyIHRvCi0gICAgICAgICAgIyAgICNkZWZpbmUgX19BUk1fTlJfY21weGNoZyAgKF9fQVJNX05SX0JBU0UrMHgwMGZmZjApCi0gICAgICAgICAgYmFzZSA9IDE2Ci0gICAgICAgIGRpY3RbIkFSTV8iK20uZ3JvdXAoMSldID0gaW50KG9mZnNldF9zdHIsIGJhc2UpICsgMHgwZjAwMDAKLSAgICAgICAgcmV0dXJuCi0KLSAgICBtID0gcmVfeDg2X2xpbmUubWF0Y2gobGluZSkKLSAgICBpZiBtOgotICAgICAgICAjIHRyeSBibG9jayBiZWNhdXNlIHRoZSBBUk0gaGVhZGVyIGhhcyBzb21lICNkZWZpbmUgX05SX1hYWFhYICAvKiBub3RoaW5nICovCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgICNwcmludCAiJXMgPSAlcyIgJSAobS5ncm91cCgxKSwgbS5ncm91cCgyKSkKLSAgICAgICAgICAgIGRpY3RbbS5ncm91cCgxKV0gPSBpbnQobS5ncm91cCgyKSkKLSAgICAgICAgZXhjZXB0OgotICAgICAgICAgICAgcGFzcwotICAgICAgICByZXR1cm4KLQotCi1kZWYgcHJvY2Vzc19oZWFkZXIoaGVhZGVyX2ZpbGUsZGljdCk6Ci0gICAgZnAgPSBvcGVuKGhlYWRlcl9maWxlKQotICAgIEQoInJlYWRpbmcgIitoZWFkZXJfZmlsZSkKLSAgICBmb3IgbGluZSBpbiBmcC54cmVhZGxpbmVzKCk6Ci0gICAgICAgIGxpbmUgPSBsaW5lLnN0cmlwKCkKLSAgICAgICAgaWYgbm90IGxpbmU6IGNvbnRpbnVlCi0gICAgICAgIHByb2Nlc3NfbnJfbGluZShsaW5lLGRpY3QpCi0gICAgZnAuY2xvc2UoKQotCi1hcm1fZGljdCA9IHt9Ci14ODZfZGljdCA9IHt9Ci1taXBzX2RpY3QgPSB7fQotCi0jIHJlbW92ZSB0cmFpbGluZyBzbGFzaCBmcm9tIHRoZSBsaW51eF9yb290LCBpZiBhbnkKLWlmIGxpbnV4X3Jvb3RbLTFdID09ICcvJzoKLSAgICBsaW51eF9yb290ID0gbGludXhfcm9vdFs6LTFdCi0KLWFybV91bmlzdGQgPSBmaW5kX2FyY2hfaGVhZGVyKGxpbnV4X3Jvb3QsICJhcm0iLCAidW5pc3RkLmgiKQotaWYgbm90IGFybV91bmlzdGQ6Ci0gICAgcHJpbnQgIldFSVJEOiBDb3VsZCBub3QgbG9jYXRlIHRoZSBBUk0gdW5pc3RkLmgga2VybmVsIGhlYWRlciBmaWxlLCIKLSAgICBwcmludCAibWF5YmUgdXNpbmcgYSBkaWZmZXJlbnQgc2V0IG9mIGtlcm5lbCBoZWFkZXJzIG1pZ2h0IGhlbHAuIgotICAgIHN5cy5leGl0KDEpCi0KLSMgb24gcmVjZW50IGtlcm5lbHMsIGFzbS1pMzg2IGFuZCBhc20teDY0XzY0IGhhdmUgYmVlbiBtZXJnZWQgaW50byBhc20teDg2Ci0jIHdpdGggdHdvIGRpc3RpbmN0IHVuaXN0ZF8zMi5oIGFuZCB1bmlzdGRfNjQuaCBkZWZpbml0aW9uIGZpbGVzLgotIyB0YWtlIGNhcmUgb2YgdGhpcyBoZXJlCi0jCi14ODZfdW5pc3RkID0gZmluZF9hcmNoX2hlYWRlcihsaW51eF9yb290LCAiaTM4NiIsICJ1bmlzdGQuaCIpCi1pZiBub3QgeDg2X3VuaXN0ZDoKLSAgICB4ODZfdW5pc3RkID0gZmluZF9hcmNoX2hlYWRlcihsaW51eF9yb290LCAieDg2IiwgInVuaXN0ZF8zMi5oIikKLSAgICBpZiBub3QgeDg2X3VuaXN0ZDoKLSAgICAgICAgcHJpbnQgIldFSVJEOiBDb3VsZCBub3QgbG9jYXRlIHRoZSBpMzg2L3g4NiB1bmlzdGQuaCBoZWFkZXIgZmlsZSwiCi0gICAgICAgIHByaW50ICJtYXliZSB1c2luZyBhIGRpZmZlcmVudCBzZXQgb2Yga2VybmVsIGhlYWRlcnMgbWlnaHQgaGVscC4iCi0gICAgICAgIHN5cy5leGl0KDEpCi0KLW1pcHNfdW5pc3RkID0gZmluZF9hcmNoX2hlYWRlcihsaW51eF9yb290LCAibWlwcyIsICJ1bmlzdGQuaCIpCi1pZiBub3QgbWlwc191bmlzdGQ6Ci0gICAgcHJpbnQgIldFSVJEOiBDb3VsZCBub3QgbG9jYXRlIHRoZSBNaXBzIHVuaXN0ZC5oIGtlcm5lbCBoZWFkZXIgZmlsZSwiCi0gICAgcHJpbnQgIm1heWJlIHVzaW5nIGEgZGlmZmVyZW50IHNldCBvZiBrZXJuZWwgaGVhZGVycyBtaWdodCBoZWxwLiIKLSAgICBzeXMuZXhpdCgxKQotCi1wcm9jZXNzX2hlYWRlciggYXJtX3VuaXN0ZCwgYXJtX2RpY3QgKQotcHJvY2Vzc19oZWFkZXIoIHg4Nl91bmlzdGQsIHg4Nl9kaWN0ICkKLXByb2Nlc3NfaGVhZGVyKCBtaXBzX3VuaXN0ZCwgbWlwc19kaWN0ICkKLQotIyBub3cgcGVyZm9ybSB0aGUgY29tcGFyaXNvbgotZXJyb3JzID0gMAotCi1kZWYgY2hlY2tfc3lzY2FsbHMoYXJjaG5hbWUsIGlkbmFtZSwgYXJjaF9kaWN0KToKLSAgICBlcnJvcnMgPSAwCi0gICAgZm9yIHNjIGluIHN5c2NhbGxzOgotICAgICAgICBzY19uYW1lID0gc2NbIm5hbWUiXQotICAgICAgICBzY19pZCAgID0gc2NbaWRuYW1lXQotICAgICAgICBpZiBzY19pZCA+PSAwOgotICAgICAgICAgICAgaWYgbm90IGFyY2hfZGljdC5oYXNfa2V5KHNjX25hbWUpOgotICAgICAgICAgICAgICAgIHByaW50ICJlcnJvcjogJXMgc3lzY2FsbCAlcyBub3QgZGVmaW5lZCwgc2hvdWxkIGJlICVkIiAlIChhcmNobmFtZSwgc2NfbmFtZSwgc2NfaWQpCi0gICAgICAgICAgICAgICAgZXJyb3JzICs9IDEKLSAgICAgICAgICAgIGVsaWYgbm90IGFyY2hfZGljdC5oYXNfa2V5KHNjX25hbWUpOgotICAgICAgICAgICAgICAgIHByaW50ICJlcnJvcjogJXMgc3lzY2FsbCAlcyBpcyBub3QgaW1wbGVtZW50ZWQiICUgKGFyY2huYW1lLCBzY19uYW1lKQotICAgICAgICAgICAgICAgIGVycm9ycyArPSAxCi0gICAgICAgICAgICBlbGlmIGFyY2hfZGljdFtzY19uYW1lXSAhPSBzY19pZDoKLSAgICAgICAgICAgICAgICBwcmludCAiZXJyb3I6ICVzIHN5c2NhbGwgJXMgc2hvdWxkIGJlICVkIGluc3RlYWQgb2YgJWQiICUgKGFyY2huYW1lLCBzY19uYW1lLCBhcmNoX2RpY3Rbc2NfbmFtZV0sIHNjX2lkKQotICAgICAgICAgICAgICAgIGVycm9ycyArPSAxCi0gICAgcmV0dXJuIGVycm9ycwotCi1lcnJvcnMgKz0gY2hlY2tfc3lzY2FsbHMoImFybSIsICJhcm1pZCIsIGFybV9kaWN0KQotZXJyb3JzICs9IGNoZWNrX3N5c2NhbGxzKCJ4ODYiLCAieDg2aWQiLCB4ODZfZGljdCkKLWVycm9ycyArPSBjaGVja19zeXNjYWxscygibWlwcyIsICJtaXBzaWQiLCBtaXBzX2RpY3QpCi0KLWlmIGVycm9ycyA9PSAwOgotICAgIHByaW50ICJjb25ncmF0dWxhdGlvbnMsIGV2ZXJ5dGhpbmcncyBmaW5lICEhIgotZWxzZToKLSAgICBwcmludCAiY29ycmVjdCAlZCBlcnJvcnMgISEiICUgZXJyb3JzCmRpZmYgLS1naXQgYS9saWJjL3Rvb2xzL2dlbmVyYXRlLU5PVElDRS5weSBiL2xpYmMvdG9vbHMvZ2VuZXJhdGUtTk9USUNFLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjUxMTUzMTcKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Rvb2xzL2dlbmVyYXRlLU5PVElDRS5weQpAQCAtMCwwICsxLDE1NiBAQAorIyEvdXNyL2Jpbi9weXRob24KKyMgUnVuIHdpdGggZGlyZWN0b3J5IGFyZ3VtZW50cyBmcm9tIGFueSBkaXJlY3RvcnksIHdpdGggbm8gc3BlY2lhbCBzZXR1cCByZXF1aXJlZC4KKyMgT3I6CisjIGZvciBpIGluIGxpYmMgbGliZGwgbGlibSBsaW5rZXIgbGlic3RkYysrIGxpYnRocmVhZF9kYiA7IGRvIC4vbGliYy90b29scy9nZW5lcmF0ZS1OT1RJQ0UucHkgJGkgPiAkaS9OT1RJQ0UgOyBkb25lCisKK2ltcG9ydCBmdHBsaWIKK2ltcG9ydCBoYXNobGliCitpbXBvcnQgb3MKK2ltcG9ydCByZQoraW1wb3J0IHNodXRpbAoraW1wb3J0IHN0cmluZworaW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCBzeXMKK2ltcG9ydCB0YXJmaWxlCitpbXBvcnQgdGVtcGZpbGUKKworZGVmIElzVW5pbnRlcmVzdGluZyhwYXRoKToKKyAgICBwYXRoID0gcGF0aC5sb3dlcigpCisgICAgaWYgcGF0aC5lbmRzd2l0aCgiLm1rIikgb3IgcGF0aC5lbmRzd2l0aCgiLnB5Iikgb3IgcGF0aC5lbmRzd2l0aCgiLnB5YyIpIG9yIHBhdGguZW5kc3dpdGgoIi50eHQiKSBvciBwYXRoLmVuZHN3aXRoKCIuMyIpOgorICAgICAgICByZXR1cm4gVHJ1ZQorICAgIGlmIHBhdGguZW5kc3dpdGgoIi9ub3RpY2UiKSBvciBwYXRoLmVuZHN3aXRoKCIvcmVhZG1lIikgb3IgcGF0aC5lbmRzd2l0aCgiL2NhdmVhdHMiKToKKyAgICAgICAgcmV0dXJuIFRydWUKKyAgICBpZiBwYXRoLmVuZHN3aXRoKCIvdHpkYXRhIikgb3IgcGF0aC5lbmRzd2l0aCgiL3pvbmVpbmZvL2dlbmVyYXRlIik6CisgICAgICAgIHJldHVybiBUcnVlCisgICAgcmV0dXJuIEZhbHNlCisKK2RlZiBJc0F1dG9HZW5lcmF0ZWQoY29udGVudCk6CisgICAgaWYgImdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSIgaW4gY29udGVudCBvciAiZ2VuZXJhdGVkIGJ5IGdlbnNlcnYucHkiIGluIGNvbnRlbnQ6CisgICAgICAgIHJldHVybiBUcnVlCisgICAgaWYgIlRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlciIgaW4gY29udGVudDoKKyAgICAgICAgcmV0dXJuIFRydWUKKyAgICByZXR1cm4gRmFsc2UKKworY29weXJpZ2h0cyA9IHNldCgpCisKK2RlZiBFeHRyYWN0Q29weXJpZ2h0QXQobGluZXMsIGkpOgorICAgIGhhc2ggPSBsaW5lc1tpXS5zdGFydHN3aXRoKCIjIikKKworICAgICMgRG8gd2UgbmVlZCB0byBiYWNrIHVwIHRvIGZpbmQgdGhlIHN0YXJ0IG9mIHRoZSBjb3B5cmlnaHQgaGVhZGVyPworICAgIHN0YXJ0ID0gaQorICAgIGlmIG5vdCBoYXNoOgorICAgICAgICB3aGlsZSBzdGFydCA+IDA6CisgICAgICAgICAgICBpZiAiLyoiIGluIGxpbmVzW3N0YXJ0IC0gMV06CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIHN0YXJ0IC09IDEKKworICAgICMgUmVhZCBjb21tZW50IGxpbmVzIHVudGlsIHdlIGhpdCBzb21ldGhpbmcgdGhhdCB0ZXJtaW5hdGVzIGEKKyAgICAjIGNvcHlyaWdodCBoZWFkZXIuCisgICAgd2hpbGUgaSA8IGxlbihsaW5lcyk6CisgICAgICAgIGlmICIqLyIgaW4gbGluZXNbaV06CisgICAgICAgICAgICBicmVhaworICAgICAgICBpZiBoYXNoIGFuZCBsZW4obGluZXNbaV0pID09IDA6CisgICAgICAgICAgICBicmVhaworICAgICAgICBpZiAiXHRAKCMpIiBpbiBsaW5lc1tpXSBvciAiXHRmcm9tOiBAKCMpIiBpbiBsaW5lc1tpXSBvciAiRnJvbTogQCgjKSIgaW4gbGluZXNbaV0gb3IgImZyb20gT3BlbkJTRDoiIGluIGxpbmVzW2ldOgorICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgaWYgIlx0Y2l0cnVzIElkOiAiIGluIGxpbmVzW2ldOgorICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgaWYgIlx0JE9wZW5CU0Q6ICIgaW4gbGluZXNbaV0gb3IgIiAkRnJlZUJTRDogIiBpbiBsaW5lc1tpXSBvciAiXHQkTmV0QlNEOiAiIGluIGxpbmVzW2ldOgorICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgaWYgIiRGcmVlQlNEJCIgaW4gbGluZXNbaV0gb3IgIiRDaXRydXMkIiBpbiBsaW5lc1tpXToKKyAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGkgKz0gMQorCisgICAgZW5kID0gaQorCisgICAgIyBUcmltIHRyYWlsaW5nIGNydWZ0LgorICAgIHdoaWxlIGVuZCA+IDA6CisgICAgICAgIGlmIGxpbmVzW2VuZCAtIDFdICE9ICIgKiIgYW5kIGxpbmVzW2VuZCAtIDFdICE9ICIgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IjoKKyAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGVuZCAtPSAxCisKKyAgICAjIFJlbW92ZSBDL2Fzc2VtYmxlciBjb21tZW50IGZvcm1hdHRpbmcsIHB1bGxpbmcgb3V0IGp1c3QgdGhlIHRleHQuCisgICAgY2xlYW5fbGluZXMgPSBbXQorICAgIGZvciBsaW5lIGluIGxpbmVzW3N0YXJ0OmVuZF06CisgICAgICAgIGxpbmUgPSBsaW5lLnJlcGxhY2UoIlx0IiwgIiAgICAiKQorICAgICAgICBsaW5lID0gbGluZS5yZXBsYWNlKCIvKiAiLCAiIikKKyAgICAgICAgbGluZSA9IGxpbmUucmVwbGFjZSgiICogIiwgIiIpCisgICAgICAgIGxpbmUgPSBsaW5lLnJlcGxhY2UoIioqICIsICIiKQorICAgICAgICBsaW5lID0gbGluZS5yZXBsYWNlKCIjICIsICIiKQorICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoIisrQ29weXJpZ2h0KysiKToKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIGxpbmUgPSBsaW5lLnJlcGxhY2UoIi0tQ29weXJpZ2h0LS0iLCAiIikKKyAgICAgICAgbGluZSA9IGxpbmUucnN0cmlwKCkKKyAgICAgICAgIyBUaGVzZSBjb21lIGxhc3QgYW5kIHRha2UgY2FyZSBvZiAiYmxhbmsiIGNvbW1lbnQgbGluZXMuCisgICAgICAgIGlmIGxpbmUgPT0gIiMiIG9yIGxpbmUgPT0gIiAqIiBvciBsaW5lID09ICIqKiIgb3IgbGluZSA9PSAiLSI6CisgICAgICAgICAgICBsaW5lID0gIiIKKyAgICAgICAgY2xlYW5fbGluZXMuYXBwZW5kKGxpbmUpCisKKyAgICAjIFRyaW0gYmxhbmsgbGluZXMgZnJvbSBoZWFkIGFuZCB0YWlsLgorICAgIHdoaWxlIGNsZWFuX2xpbmVzWzBdID09ICIiOgorICAgICAgICBjbGVhbl9saW5lcyA9IGNsZWFuX2xpbmVzWzE6XQorICAgIHdoaWxlIGNsZWFuX2xpbmVzW2xlbihjbGVhbl9saW5lcykgLSAxXSA9PSAiIjoKKyAgICAgICAgY2xlYW5fbGluZXMgPSBjbGVhbl9saW5lc1swOihsZW4oY2xlYW5fbGluZXMpIC0gMSldCisKKyAgICBjb3B5cmlnaHQgPSAiXG4iLmpvaW4oY2xlYW5fbGluZXMpCisgICAgY29weXJpZ2h0cy5hZGQoY29weXJpZ2h0KQorCisgICAgcmV0dXJuIGkKKworYXJncyA9IHN5cy5hcmd2WzE6XQoraWYgbGVuKGFyZ3MpID09IDA6CisgICAgYXJncyA9IFsgIi4iIF0KKworZm9yIGFyZyBpbiBhcmdzOgorICAgIHN5cy5zdGRlcnIud3JpdGUoJ1NlYXJjaGluZyBmb3Igc291cmNlIGZpbGVzIGluICIlcyIuLi5cbicgJSBhcmcpCisKKyAgICBmb3IgZGlyZWN0b3J5LCBzdWJfZGlyZWN0b3JpZXMsIGZpbGVuYW1lcyBpbiBvcy53YWxrKGFyZyk6CisgICAgICAgIGlmICIuZ2l0IiBpbiBzdWJfZGlyZWN0b3JpZXM6CisgICAgICAgICAgICBzdWJfZGlyZWN0b3JpZXMucmVtb3ZlKCIuZ2l0IikKKyAgICAgICAgc3ViX2RpcmVjdG9yaWVzID0gc29ydGVkKHN1Yl9kaXJlY3RvcmllcykKKworICAgICAgICBmb3IgZmlsZW5hbWUgaW4gc29ydGVkKGZpbGVuYW1lcyk6CisgICAgICAgICAgICBwYXRoID0gb3MucGF0aC5qb2luKGRpcmVjdG9yeSwgZmlsZW5hbWUpCisgICAgICAgICAgICBpZiBJc1VuaW50ZXJlc3RpbmcocGF0aCk6CisgICAgICAgICAgICAgICAgI3ByaW50ICJpZ25vcmluZyB1bmludGVyZXN0aW5nIGZpbGUgJXMiICUgcGF0aAorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBjb250ZW50ID0gb3BlbihwYXRoLCAncicpLnJlYWQoKS5kZWNvZGUoJ3V0Zi04JykKKyAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICAjIFRPRE86IHVwZGF0ZSBoYXNoLmgsIG1kNS5jLCBhbmQgbWQ1Lmg7IHVwc3RyZWFtIGlzIHByb2JhYmx5IFVURi04IGFscmVhZHkuCisgICAgICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgnd2FybmluZzogYmFkIFVURi04IGluICVzXG4nICUgcGF0aCkKKyAgICAgICAgICAgICAgICBjb250ZW50ID0gb3BlbihwYXRoLCAncicpLnJlYWQoKS5kZWNvZGUoJ2lzby04ODU5LTEnKQorCisgICAgICAgICAgICBsaW5lcyA9IGNvbnRlbnQuc3BsaXQoIlxuIikKKworICAgICAgICAgICAgaWYgbGVuKGxpbmVzKSA8PSA0OgorICAgICAgICAgICAgICAgICNwcmludCAiaWdub3Jpbmcgc2hvcnQgZmlsZSAlcyIgJSBwYXRoCisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgaWYgSXNBdXRvR2VuZXJhdGVkKGNvbnRlbnQpOgorICAgICAgICAgICAgICAgICNwcmludCAiaWdub3JpbmcgYXV0by1nZW5lcmF0ZWQgZmlsZSAlcyIgJSBwYXRoCisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgaWYgbm90ICJDb3B5cmlnaHQiIGluIGNvbnRlbnQ6CisgICAgICAgICAgICAgICAgaWYgInB1YmxpYyBkb21haW4iIGluIGNvbnRlbnQubG93ZXIoKToKKyAgICAgICAgICAgICAgICAgICAgI3ByaW50ICJpZ25vcmluZyBwdWJsaWMgZG9tYWluIGZpbGUgJXMiICUgcGF0aAorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoJ3dhcm5pbmc6IG5vIGNvcHlyaWdodCBub3RpY2UgZm91bmQgaW4gIiVzIiAoJWQgbGluZXMpXG4nICUgKHBhdGgsIGxlbihsaW5lcykpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGkgPSAwCisgICAgICAgICAgICB3aGlsZSBpIDwgbGVuKGxpbmVzKToKKyAgICAgICAgICAgICAgICBpZiAiQ29weXJpZ2h0IiBpbiBsaW5lc1tpXToKKyAgICAgICAgICAgICAgICAgICAgaSA9IEV4dHJhY3RDb3B5cmlnaHRBdChsaW5lcywgaSkKKyAgICAgICAgICAgICAgICBpICs9IDEKKworICAgICAgICAgICAgI3ByaW50IHBhdGgKKworZm9yIGNvcHlyaWdodCBpbiBzb3J0ZWQoY29weXJpZ2h0cyk6CisgICAgcHJpbnQgY29weXJpZ2h0LmVuY29kZSgndXRmLTgnKQorICAgIHByaW50CisgICAgcHJpbnQgJy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0nCisgICAgcHJpbnQKKworc3lzLmV4aXQoMCkKZGlmZiAtLWdpdCBhL2xpYmMvdG9vbHMvZ2Vuc2Vydi5weSBiL2xpYmMvdG9vbHMvZ2Vuc2Vydi5weQppbmRleCBlMzdkMjhmLi44NGExMzlkIDEwMDc1NQotLS0gYS9saWJjL3Rvb2xzL2dlbnNlcnYucHkKKysrIGIvbGliYy90b29scy9nZW5zZXJ2LnB5CkBAIC01LDcgKzUsNyBAQAogCiBkZWYgdXNhZ2UoKToKICAgICBwcmludCAiIiJcCi0gIHVzYWdlOiAgZ2Vuc2VydiA8IC9ldGMvc2VydmljZXMgPiBuZXRic2QvbmV0L3NlcnZpY2VzLmgKKyAgdXNhZ2U6ICBnZW5zZXJ2IDwgL2V0Yy9zZXJ2aWNlcyA+IGxpYmMvbmV0YnNkL25ldC9zZXJ2aWNlcy5oCiAKICAgdGhpcyBwcm9ncmFtIGlzIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIGhhcmQtY29kZWQgaW50ZXJuZXQgc2VydmljZSBsaXN0IGZvciB0aGUKICAgQmlvbmljIEMgbGlicmFyeS4KQEAgLTcyLDUgKzcyLDMgQEAKICAgICBsaW5lICs9IHN0cihzKSsiXFxcbiIKIGxpbmUgKz0gJ1xcMCI7XG4nCiBwcmludCBsaW5lCi0KLQpkaWZmIC0tZ2l0IGEvbGliYy90b29scy9nZW5zeXNjYWxscy5weSBiL2xpYmMvdG9vbHMvZ2Vuc3lzY2FsbHMucHkKaW5kZXggZWRhZDc5Mi4uNDg5NGYyZCAxMDA3NTUKLS0tIGEvbGliYy90b29scy9nZW5zeXNjYWxscy5weQorKysgYi9saWJjL3Rvb2xzL2dlbnN5c2NhbGxzLnB5CkBAIC0xMCwyOSArMTAsMTMgQEAKIAogZnJvbSBiaW9uaWNfdXRpbHMgaW1wb3J0ICoKIAotIyBzZXQgdGhpcyB0byAxIGlmIHlvdSB3YW50IHRvIGdlbmVyYXRlIHRodW1iIHN0dWJzCi1nZW5fdGh1bWJfc3R1YnMgPSAwCi0KLSMgc2V0IHRoaXMgdG8gMSBpZiB5b3Ugd2FudCB0byBnZW5lcmF0ZSBBUk0gRUFCSSBzdHVicwotZ2VuX2VhYmlfc3R1YnMgPSAxCi0KLSMgZ2V0IHRoZSByb290IEJpb25pYyBkaXJlY3RvcnksIHNpbXBseSB0aGlzIHNjcmlwdCdzIGRpcm5hbWUKLSMKLWJpb25pY19yb290ID0gZmluZF9iaW9uaWNfcm9vdCgpCi1pZiBub3QgYmlvbmljX3Jvb3Q6Ci0gICAgcHJpbnQgImNvdWxkIG5vdCBmaW5kIHRoZSBCaW9uaWMgcm9vdCBkaXJlY3RvcnkuIGFib3J0aW5nIgotICAgIHN5cy5leGl0KDEpCi0KLWlmIGJpb25pY19yb290Wy0xXSAhPSAnLyc6Ci0gICAgYmlvbmljX3Jvb3QgKz0gIi8iCi0KLXByaW50ICJiaW9uaWNfcm9vdCBpcyAlcyIgJSBiaW9uaWNfcm9vdAorYmlvbmljX2xpYmNfcm9vdCA9IG9zLmVudmlyb25bIkFORFJPSURfQlVJTERfVE9QIl0gKyAiL2Jpb25pYy9saWJjLyIKIAogIyB0ZW1wIGRpcmVjdG9yeSB3aGVyZSB3ZSBzdG9yZSBhbGwgaW50ZXJtZWRpYXRlIGZpbGVzCiBiaW9uaWNfdGVtcCA9ICIvdG1wL2Jpb25pY19nZW5zeXNjYWxscy8iCiAKICMgYWxsIGFyY2hpdGVjdHVyZXMsIHVwZGF0ZSBhcyB5b3Ugc2VlIGZpdAotYWxsX2FyY2hzID0gWyAiYXJtIiwgIng4NiIsICJtaXBzIiBdCithbGxfYXJjaHMgPSBbICJhcm0iLCAibWlwcyIsICJ4ODYiIF0KIAogZGVmIG1ha2VfZGlyKCBwYXRoICk6CiAgICAgcGF0aCA9IG9zLnBhdGguYWJzcGF0aChwYXRoKQpAQCAtNDcsMjUgKzMxLDIzIEBACiAgICAgbWFrZV9kaXIoZGlyKQogICAgIHJldHVybiBvcGVuKCBiaW9uaWNfdGVtcCArIHJlbHBhdGgsICJ3IiApCiAKKyMKICMgeDg2IGFzc2VtYmxlciB0ZW1wbGF0ZXMgZm9yIGVhY2ggc3lzY2FsbCBzdHViCiAjCiAKIHg4Nl9oZWFkZXIgPSAiIiIvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCi0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAKLSAgICAudGV4dAotICAgIC50eXBlICUoZm5hbWUpcywgQGZ1bmN0aW9uCi0gICAgLmdsb2JsICUoZm5hbWUpcwotICAgIC5hbGlnbiA0Ci0KLSUoZm5hbWUpczoKK0VOVFJZKCUoZm5hbWUpcykKICIiIgogCiB4ODZfcmVnaXN0ZXJzID0gWyAiJWVieCIsICIlZWN4IiwgIiVlZHgiLCAiJWVzaSIsICIlZWRpIiwgIiVlYnAiIF0KIAogeDg2X2NhbGwgPSAiIiIgICAgbW92bCAgICAkJShpZG5hbWUpcywgJSVlYXgKICAgICBpbnQgICAgICQweDgwCi0gICAgY21wbCAgICAkLTEyOSwgJSVlYXgKKyAgICBjbXBsICAgICQtTUFYX0VSUk5PLCAlJWVheAogICAgIGpiICAgICAgMWYKICAgICBuZWdsICAgICUlZWF4CiAgICAgcHVzaGwgICAlJWVheApAQCAtNzYsNTAgKzU4LDMyIEBACiAiIiIKIAogeDg2X3JldHVybiA9ICIiIiAgICByZXQKK0VORCglKGZuYW1lKXMpCiAiIiIKIAorIwogIyBBUk0gYXNzZW1ibGVyIHRlbXBsYXRlcyBmb3IgZWFjaCBzeXNjYWxsIHN0dWIKICMKKwogYXJtX2hlYWRlciA9ICIiIi8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KIAogRU5UUlkoJShmbmFtZSlzKQogIiIiCiAKLWFybV9mb290ZXIgPSAiIiJcCi1FTkQoJShmbmFtZSlzKQotIiIiCi0KLWFybV9jYWxsX2RlZmF1bHQgPSBhcm1faGVhZGVyICsgIiIiXAotICAgIHN3aSAgICMlKGlkbmFtZSlzCi0gICAgbW92cyAgICByMCwgcjAKLSAgICBieHBsICAgIGxyCi0gICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCi0iIiIgKyBhcm1fZm9vdGVyCi0KLWFybV9jYWxsX2xvbmcgPSBhcm1faGVhZGVyICsgIiIiXAotICAgIC5zYXZlICAge3I0LCByNSwgbHJ9Ci0gICAgc3RtZmQgICBzcCEsIHtyNCwgcjUsIGxyfQotICAgIGxkciAgICAgcjQsIFtzcCwgIzEyXQotICAgIGxkciAgICAgcjUsIFtzcCwgIzE2XQotICAgIHN3aSAgICAgIyAlKGlkbmFtZSlzCi0gICAgbGRtZmQgICBzcCEsIHtyNCwgcjUsIGxyfQotICAgIG1vdnMgICAgcjAsIHIwCi0gICAgYnhwbCAgICBscgotICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubwotIiIiICsgYXJtX2Zvb3RlcgotCiBhcm1fZWFiaV9jYWxsX2RlZmF1bHQgPSBhcm1faGVhZGVyICsgIiIiXAotICAgIC5zYXZlICAge3I0LCByN30KLSAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBtb3YgICAgIGlwLCByNwogICAgIGxkciAgICAgcjcsID0lKGlkbmFtZSlzCiAgICAgc3dpICAgICAjMAotICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQotICAgIG1vdnMgICAgcjAsIHIwCi0gICAgYnhwbCAgICBscgotICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubwotIiIiICsgYXJtX2Zvb3RlcgorICAgIG1vdiAgICAgcjcsIGlwCisgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQorICAgIGJ4bHMgICAgbHIKKyAgICBuZWcgICAgIHIwLCByMAorICAgIGIgICAgICAgX19zZXRfZXJybm8KK0VORCglKGZuYW1lKXMpCisiIiIKIAogYXJtX2VhYmlfY2FsbF9sb25nID0gYXJtX2hlYWRlciArICIiIlwKICAgICBtb3YgICAgIGlwLCBzcApAQCAtMTI5LDY2ICs5MywxOSBAQAogICAgIGxkciAgICAgcjcsID0lKGlkbmFtZSlzCiAgICAgc3dpICAgICAjMAogICAgIGxkbWZkICAgc3AhLCB7cjQsIHI1LCByNiwgcjd9Ci0gICAgbW92cyAgICByMCwgcjAKLSAgICBieHBsICAgIGxyCi0gICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCi0iIiIgKyBhcm1fZm9vdGVyCi0KLSMgQVJNIHRodW1iIGFzc2VtYmxlciB0ZW1wbGF0ZXMgZm9yIGVhY2ggc3lzY2FsbCBzdHViCi0jCi10aHVtYl9oZWFkZXIgPSAiIiIvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCi0gICAgLnRleHQKLSAgICAudHlwZSAlKGZuYW1lKXMsICNmdW5jdGlvbgotICAgIC5nbG9ibCAlKGZuYW1lKXMKLSAgICAuYWxpZ24gNAotICAgIC50aHVtYl9mdW5jCi0gICAgLmZuc3RhcnQKLQotI2RlZmluZSAgX190aHVtYl9fCi0jaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+Ci0KLQotJShmbmFtZSlzOgotIiIiCi0KLXRodW1iX2NhbGxfZGVmYXVsdCA9IHRodW1iX2hlYWRlciArICIiIlwKLSAgICAuc2F2ZSAgIHtyNyxscn0KLSAgICBwdXNoICAgIHtyNyxscn0KLSAgICBsZHIgICAgIHI3LCA9JShpZG5hbWUpcwotICAgIHN3aSAgICAgIzAKLSAgICB0c3QgICAgIHIwLCByMAotICAgIGJtaSAgICAgMWYKLSAgICBwb3AgICAgIHtyNyxwY30KLTE6CisgICAgY21uICAgICByMCwgIyhNQVhfRVJSTk8gKyAxKQorICAgIGJ4bHMgICAgbHIKICAgICBuZWcgICAgIHIwLCByMAotICAgIGxkciAgICAgcjEsID1fX3NldF9lcnJubwotICAgIGJseCAgICAgcjEKLSAgICBwb3AgICAgIHtyNyxwY30KLSAgICAuZm5lbmQKKyAgICBiICAgICAgIF9fc2V0X2Vycm5vCitFTkQoJShmbmFtZSlzKQogIiIiCiAKLXRodW1iX2NhbGxfbG9uZyA9IHRodW1iX2hlYWRlciArICIiIlwKLSAgICAuc2F2ZSAge3I0LHI1LHI3LGxyfQotICAgIHB1c2ggICB7cjQscjUscjcsbHJ9Ci0gICAgbGRyICAgIHI0LCBbc3AsIzE2XQotICAgIGxkciAgICByNSwgW3NwLCMyMF0KLSAgICBsZHIgICAgcjcsID0lKGlkbmFtZSlzCi0gICAgc3dpICAgICMwCi0gICAgdHN0ICAgIHIwLCByMAotICAgIGJtaSAgICAxZgotICAgIHBvcCAgICB7cjQscjUscjcscGN9Ci0xOgotICAgIG5lZyAgICByMCwgcjAKLSAgICBsZHIgICAgcjEsID1fX3NldF9lcnJubwotICAgIGJseCAgICByMQotICAgIHBvcCAgICB7cjQscjUscjcscGN9Ci0gICAgLmZuZW5kCi0iIiIKLQorIwogIyBtaXBzIGFzc2VtYmxlciB0ZW1wbGF0ZXMgZm9yIGVhY2ggc3lzY2FsbCBzdHViCiAjCisKIG1pcHNfY2FsbCA9ICIiIi8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAgICAgLnRleHQKICAgICAuZ2xvYmwgJShmbmFtZSlzCiAgICAgLmFsaWduIDQKQEAgLTIzMyw3ICsxNTAsNyBAQAogCiBkZWYgY291bnRfYXJtX3BhcmFtX3JlZ2lzdGVycyhwYXJhbXMpOgogICAgICIiIlRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBjb3VudCB0aGUgbnVtYmVyIG9mIHJlZ2lzdGVyIHVzZWQKLSAgICAgICB0byBwYXNzIHBhcmFtZXRlcnMgd2hlbiBpbnZva2luZyBhIHRodW1iIG9yIEFSTSBzeXN0ZW0gY2FsbC4KKyAgICAgICB0byBwYXNzIHBhcmFtZXRlcnMgd2hlbiBpbnZva2luZyBhbiBBUk0gc3lzdGVtIGNhbGwuCiAgICAgICAgVGhpcyBpcyBiZWNhdXNlIHRoZSBBUk0gRUFCSSBtYW5kYXRlcyB0aGF0IDY0LWJpdCBxdWFudGl0aWVzCiAgICAgICAgbXVzdCBiZSBwYXNzZWQgaW4gYW4gZXZlbitvZGQgcmVnaXN0ZXIgcGFpci4gU28sIGZvciBleGFtcGxlLAogICAgICAgIHNvbWV0aGluZyBsaWtlOgpAQCAtMjY0LDYgKzE4MSwxNCBAQAogICAgICAgICAgICAgY291bnQgKz0gMQogICAgIHJldHVybiBjb3VudAogCisjIFRoaXMgbGV0cyB1cyBzdXBwb3J0IHJlZ3VsYXIgc3lzdGVtIGNhbGxzIGxpa2UgX19OUl93cml0ZSBhbmQgYWxzbyB3ZWlyZAorIyBvbmVzIGxpa2UgX19BUk1fTlJfY2FjaGVmbHVzaCwgd2hlcmUgdGhlIE5SIGRvZXNuJ3QgY29tZSBhdCB0aGUgc3RhcnQuCitkZWYgbWFrZV9fTlJfbmFtZShuYW1lKToKKyAgICBpZiBuYW1lLnN0YXJ0c3dpdGgoIl9fIik6CisgICAgICAgIHJldHVybiBuYW1lCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuICJfX05SXyVzIiAlIChuYW1lKQorCiBjbGFzcyBTdGF0ZToKICAgICBkZWYgX19pbml0X18oc2VsZik6CiAgICAgICAgIHNlbGYub2xkX3N0dWJzID0gW10KQEAgLTI4OSw3ICsyMTQsNyBAQAogICAgICAgICBmb3IgciBpbiByYW5nZShudW1wYXJhbXMpOgogICAgICAgICAgICAgcmVzdWx0ICs9ICIgICAgcG9wbCAgICAiICsgeDg2X3JlZ2lzdGVyc1tudW1wYXJhbXMtci0xXSArICJcbiIKIAotICAgICAgICByZXN1bHQgKz0geDg2X3JldHVybgorICAgICAgICByZXN1bHQgKz0geDg2X3JldHVybiAlIHQKICAgICAgICAgcmV0dXJuIHJlc3VsdAogCiAgICAgZGVmIHg4Nl9nZW5zdHViX2NpZChzZWxmLCBmbmFtZSwgbnVtcGFyYW1zLCBpZG5hbWUsIGNpZCk6CkBAIC0zMjcsMTggKzI1Miw5IEBACiAgICAgICAgIHJlc3VsdCArPSAiICAgIHBvcGwgICAgJWVieCIgKyAiXG4iCiAKICAgICAgICAgIyBlcGlsb2cKLSAgICAgICAgcmVzdWx0ICs9IHg4Nl9yZXR1cm4KKyAgICAgICAgcmVzdWx0ICs9IHg4Nl9yZXR1cm4gJSB0CiAgICAgICAgIHJldHVybiByZXN1bHQKIAotICAgIGRlZiBhcm1fZ2Vuc3R1YihzZWxmLGZuYW1lLCBmbGFncywgaWRuYW1lKToKLSAgICAgICAgdCA9IHsgImZuYW1lIiAgOiBmbmFtZSwKLSAgICAgICAgICAgICAgImlkbmFtZSIgOiBpZG5hbWUgfQotICAgICAgICBpZiBmbGFnczoKLSAgICAgICAgICAgIG51bWFyZ3MgPSBpbnQoZmxhZ3MpCi0gICAgICAgICAgICBpZiBudW1hcmdzID4gNDoKLSAgICAgICAgICAgICAgICByZXR1cm4gYXJtX2NhbGxfbG9uZyAlIHQKLSAgICAgICAgcmV0dXJuIGFybV9jYWxsX2RlZmF1bHQgJSB0Ci0KIAogICAgIGRlZiBhcm1fZWFiaV9nZW5zdHViKHNlbGYsZm5hbWUsIGZsYWdzLCBpZG5hbWUpOgogICAgICAgICB0ID0geyAiZm5hbWUiICA6IGZuYW1lLApAQCAtMzUwLDM3ICsyNjYsMTEgQEAKICAgICAgICAgcmV0dXJuIGFybV9lYWJpX2NhbGxfZGVmYXVsdCAlIHQKIAogCi0gICAgZGVmIHRodW1iX2dlbnN0dWIoc2VsZixmbmFtZSwgZmxhZ3MsIGlkbmFtZSk6Ci0gICAgICAgIHQgPSB7ICJmbmFtZSIgIDogZm5hbWUsCi0gICAgICAgICAgICAgICJpZG5hbWUiIDogaWRuYW1lIH0KLSAgICAgICAgaWYgZmxhZ3M6Ci0gICAgICAgICAgICBudW1hcmdzID0gaW50KGZsYWdzKQotICAgICAgICAgICAgaWYgbnVtYXJncyA+IDQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRodW1iX2NhbGxfbG9uZyAlIHQKLSAgICAgICAgcmV0dXJuIHRodW1iX2NhbGxfZGVmYXVsdCAlIHQKLQogICAgIGRlZiBtaXBzX2dlbnN0dWIoc2VsZixmbmFtZSwgaWRuYW1lKToKICAgICAgICAgdCA9IHsgImZuYW1lIiAgOiBmbmFtZSwKICAgICAgICAgICAgICAgImlkbmFtZSIgOiBpZG5hbWUgfQogICAgICAgICByZXR1cm4gbWlwc19jYWxsICUgdAogCi0gICAgZGVmIHN1cGVyaF9nZW5zdHViKHNlbGYsIGZuYW1lLCBmbGFncywgaWRuYW1lKToKLSAgICAgICAgbnVtYXJncyA9IGludChmbGFncykKLSAgICAgICAgdCA9IHsgImZuYW1lIiAgOiBmbmFtZSwKLSAgICAgICAgICAgICAgImlkbmFtZSIgOiBpZG5hbWUsCi0gICAgICAgICAgICAgICJudW1hcmdzIiA6IG51bWFyZ3MgfQotICAgICAgICBzdXBlcmhfY2FsbCA9IHN1cGVyaF9oZWFkZXIKLSAgICAgICAgaWYgZmxhZ3M6Ci0gICAgICAgICAgICBpZiBudW1hcmdzID09IDU6Ci0gICAgICAgICAgICAgICAgc3VwZXJoX2NhbGwgKz0gc3VwZXJoXzVhcmdzX2hlYWRlcgotICAgICAgICAgICAgaWYgbnVtYXJncyA9PSA2OgotICAgICAgICAgICAgICAgIHN1cGVyaF9jYWxsICs9IHN1cGVyaF82YXJnc19oZWFkZXIKLSAgICAgICAgICAgIGlmIG51bWFyZ3MgPT0gNzoKLSAgICAgICAgICAgICAgICBzdXBlcmhfY2FsbCArPSBzdXBlcmhfN2FyZ3NfaGVhZGVyCi0gICAgICAgIHN1cGVyaF9jYWxsICs9IHN1cGVyaF9jYWxsX2RlZmF1bHQKLSAgICAgICAgcmV0dXJuIHN1cGVyaF9jYWxsICUgdAotCi0KICAgICBkZWYgcHJvY2Vzc19maWxlKHNlbGYsaW5wdXQpOgogICAgICAgICBwYXJzZXIgPSBTeXNDYWxsc1R4dFBhcnNlcigpCiAgICAgICAgIHBhcnNlci5wYXJzZV9maWxlKGlucHV0KQpAQCAtMzk0LDEwNCArMjg0LDU3IEBACiAKICAgICAgICAgICAgIGlmIHRbImNvbW1vbiJdID49IDAgb3IgdFsiYXJtaWQiXSA+PSAwOgogICAgICAgICAgICAgICAgIG51bV9yZWdzID0gY291bnRfYXJtX3BhcmFtX3JlZ2lzdGVycyhzeXNjYWxsX3BhcmFtcykKLSAgICAgICAgICAgICAgICBpZiBnZW5fdGh1bWJfc3R1YnM6Ci0gICAgICAgICAgICAgICAgICAgIHRbImFzbS10aHVtYiJdID0gc2VsZi50aHVtYl9nZW5zdHViKHN5c2NhbGxfZnVuYyxudW1fcmVncywiX19OUl8iK3N5c2NhbGxfbmFtZSkKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICBpZiBnZW5fZWFiaV9zdHViczoKLSAgICAgICAgICAgICAgICAgICAgICAgIHRbImFzbS1hcm0iXSAgID0gc2VsZi5hcm1fZWFiaV9nZW5zdHViKHN5c2NhbGxfZnVuYyxudW1fcmVncywiX19OUl8iK3N5c2NhbGxfbmFtZSkKLSAgICAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgICAgIHRbImFzbS1hcm0iXSAgID0gc2VsZi5hcm1fZ2Vuc3R1YihzeXNjYWxsX2Z1bmMsbnVtX3JlZ3MsIl9fTlJfIitzeXNjYWxsX25hbWUpCisgICAgICAgICAgICAgICAgdFsiYXNtLWFybSJdID0gc2VsZi5hcm1fZWFiaV9nZW5zdHViKHN5c2NhbGxfZnVuYywgbnVtX3JlZ3MsIG1ha2VfX05SX25hbWUoc3lzY2FsbF9uYW1lKSkKIAogICAgICAgICAgICAgaWYgdFsiY29tbW9uIl0gPj0gMCBvciB0WyJ4ODZpZCJdID49IDA6CiAgICAgICAgICAgICAgICAgbnVtX3JlZ3MgPSBjb3VudF9nZW5lcmljX3BhcmFtX3JlZ2lzdGVycyhzeXNjYWxsX3BhcmFtcykKICAgICAgICAgICAgICAgICBpZiB0WyJjaWQiXSA+PSAwOgotICAgICAgICAgICAgICAgICAgICB0WyJhc20teDg2Il0gPSBzZWxmLng4Nl9nZW5zdHViX2NpZChzeXNjYWxsX2Z1bmMsIG51bV9yZWdzLCAiX19OUl8iK3N5c2NhbGxfbmFtZSwgdFsiY2lkIl0pCisgICAgICAgICAgICAgICAgICAgIHRbImFzbS14ODYiXSA9IHNlbGYueDg2X2dlbnN0dWJfY2lkKHN5c2NhbGxfZnVuYywgbnVtX3JlZ3MsIG1ha2VfX05SX25hbWUoc3lzY2FsbF9uYW1lKSwgdFsiY2lkIl0pCiAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgdFsiYXNtLXg4NiJdID0gc2VsZi54ODZfZ2Vuc3R1YihzeXNjYWxsX2Z1bmMsIG51bV9yZWdzLCAiX19OUl8iK3N5c2NhbGxfbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgdFsiYXNtLXg4NiJdID0gc2VsZi54ODZfZ2Vuc3R1YihzeXNjYWxsX2Z1bmMsIG51bV9yZWdzLCBtYWtlX19OUl9uYW1lKHN5c2NhbGxfbmFtZSkpCiAgICAgICAgICAgICBlbGlmIHRbImNpZCJdID49IDA6CiAgICAgICAgICAgICAgICAgRSgiY2lkIGZvciBkaXNwYXRjaCBzeXNjYWxscyBpcyBvbmx5IHN1cHBvcnRlZCBmb3IgeDg2IGluICIKICAgICAgICAgICAgICAgICAgICInJXMnIiAlIHN5c2NhbGxfbmFtZSkKICAgICAgICAgICAgICAgICByZXR1cm4KKwogICAgICAgICAgICAgaWYgdFsiY29tbW9uIl0gPj0gMCBvciB0WyJtaXBzaWQiXSA+PSAwOgotICAgICAgICAgICAgICAgIHRbImFzbS1taXBzIl0gPSBzZWxmLm1pcHNfZ2Vuc3R1YihzeXNjYWxsX2Z1bmMsIl9fTlJfIitzeXNjYWxsX25hbWUpCisgICAgICAgICAgICAgICAgdFsiYXNtLW1pcHMiXSA9IHNlbGYubWlwc19nZW5zdHViKHN5c2NhbGxfZnVuYywgbWFrZV9fTlJfbmFtZShzeXNjYWxsX25hbWUpKQogCiAKLSAgICBkZWYgZ2VuX05SX3N5c2NhbGwoc2VsZixmcCxuYW1lLGlkKToKLSAgICAgICAgZnAud3JpdGUoICIjZGVmaW5lIF9fTlJfJS0yNXMgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgJWQpXG4iICUgKG5hbWUsaWQpICkKKyAgICAjIFNjYW4gYSBMaW51eCBrZXJuZWwgYXNtL3VuaXN0ZC5oIGZpbGUgY29udGFpbmluZyBfX05SXyogY29uc3RhbnRzCisgICAgIyBhbmQgd3JpdGUgb3V0IGVxdWl2YWxlbnQgU1lTXyogY29uc3RhbnRzIGZvciBnbGliYyBzb3VyY2UgY29tcGF0aWJpbGl0eS4KKyAgICBkZWYgc2Nhbl9saW51eF91bmlzdGRfaChzZWxmLCBmcCwgcGF0aCk6CisgICAgICAgIHBhdHRlcm4gPSByZS5jb21waWxlKHInXiNkZWZpbmUgX19OUl8oW2Etel1cUyspIC4qJykKKyAgICAgICAgc3lzY2FsbHMgPSBzZXQoKSAjIE1JUFMgZGVmaW5lcyBldmVyeXRoaW5nIHRocmVlIHRpbWVzOyB3b3JrIGFyb3VuZCB0aGF0LgorICAgICAgICBmb3IgbGluZSBpbiBvcGVuKHBhdGgpOgorICAgICAgICAgICAgbSA9IHJlLnNlYXJjaChwYXR0ZXJuLCBsaW5lKQorICAgICAgICAgICAgaWYgbToKKyAgICAgICAgICAgICAgICBzeXNjYWxscy5hZGQobS5ncm91cCgxKSkKKyAgICAgICAgZm9yIHN5c2NhbGwgaW4gc29ydGVkKHN5c2NhbGxzKToKKyAgICAgICAgICAgIGZwLndyaXRlKCIjZGVmaW5lIFNZU18lcyAlc1xuIiAlIChzeXNjYWxsLCBtYWtlX19OUl9uYW1lKHN5c2NhbGwpKSkKIAotICAgICMgbm93IGR1bXAgdGhlIGNvbnRlbnQgb2YgbGludXgtc3lzY2FsbHMuaAotICAgIGRlZiBnZW5fbGludXhfc3lzY2FsbHNfaChzZWxmKToKLSAgICAgICAgcGF0aCA9ICJpbmNsdWRlL3N5cy9saW51eC1zeXNjYWxscy5oIgotICAgICAgICBEKCAiZ2VuZXJhdGluZyAiK3BhdGggKQotICAgICAgICBmcCA9IGNyZWF0ZV9maWxlKCBwYXRoICkKLSAgICAgICAgZnAud3JpdGUoICIvKiBhdXRvLWdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSwgZG8gbm90IHRvdWNoICovXG4iICkKLSAgICAgICAgZnAud3JpdGUoICIjaWZuZGVmIF9CSU9OSUNfTElOVVhfU1lTQ0FMTFNfSF9cbiIgKQotICAgICAgICBmcC53cml0ZSggIiNkZWZpbmUgX0JJT05JQ19MSU5VWF9TWVNDQUxMU19IX1xuXG4iICkKLSAgICAgICAgZnAud3JpdGUoICIjaWYgIWRlZmluZWQgX19BU01fQVJNX1VOSVNURF9IICYmICFkZWZpbmVkIF9fQVNNX0kzODZfVU5JU1REX0ggJiYgIWRlZmluZWQgX19BU01fTUlQU19VTklTVERfSFxuIiApCi0gICAgICAgIGZwLndyaXRlKCAiI2lmIGRlZmluZWQgX19hcm1fXyAmJiAhZGVmaW5lZCBfX0FSTV9FQUJJX18gJiYgIWRlZmluZWQgX190aHVtYl9fXG4iICkKLSAgICAgICAgZnAud3JpdGUoICIgICMgIGRlZmluZSBfX05SX1NZU0NBTExfQkFTRSAweDkwMDAwMFxuIiApCi0gICAgICAgIGZwLndyaXRlKCAiI2VsaWYgZGVmaW5lZChfX21pcHNfXylcbiIgKQotICAgICAgICBmcC53cml0ZSggIiAgIyAgZGVmaW5lIF9fTlJfU1lTQ0FMTF9CQVNFIDQwMDBcbiIgKQotICAgICAgICBmcC53cml0ZSggIiNlbHNlXG4iICkKLSAgICAgICAgZnAud3JpdGUoICIgICMgIGRlZmluZSBfX05SX1NZU0NBTExfQkFTRSAwXG4iICkKLSAgICAgICAgZnAud3JpdGUoICIjZW5kaWZcblxuIiApCiAKLSAgICAgICAgIyBmaXJzdCwgYWxsIGNvbW1vbiBzeXNjYWxscwotICAgICAgICBmb3Igc2MgaW4gc29ydGVkKHNlbGYuc3lzY2FsbHMsa2V5PWxhbWJkYSB4OnhbImNvbW1vbiJdKToKLSAgICAgICAgICAgIHNjX2lkICA9IHNjWyJjb21tb24iXQotICAgICAgICAgICAgc2NfbmFtZSA9IHNjWyJuYW1lIl0KLSAgICAgICAgICAgIGlmIHNjX2lkID49IDA6Ci0gICAgICAgICAgICAgICAgc2VsZi5nZW5fTlJfc3lzY2FsbCggZnAsIHNjX25hbWUsIHNjX2lkICkKKyAgICBkZWYgZ2VuX2dsaWJjX3N5c2NhbGxzX2goc2VsZik6CisgICAgICAgICMgVE9ETzogZ2VuZXJhdGUgYSBzZXBhcmF0ZSBmaWxlIGZvciBlYWNoIGFyY2hpdGVjdHVyZSwgbGlrZSBnbGliYydzIGJpdHMvc3lzY2FsbC5oLgorICAgICAgICBnbGliY19zeXNjYWxsc19oX3BhdGggPSAiaW5jbHVkZS9zeXMvZ2xpYmMtc3lzY2FsbHMuaCIKKyAgICAgICAgRCgiZ2VuZXJhdGluZyAiICsgZ2xpYmNfc3lzY2FsbHNfaF9wYXRoKQorICAgICAgICBnbGliY19mcCA9IGNyZWF0ZV9maWxlKGdsaWJjX3N5c2NhbGxzX2hfcGF0aCkKKyAgICAgICAgZ2xpYmNfZnAud3JpdGUoIi8qIEF1dG8tZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5OyBkbyBub3QgZWRpdC4gKi9cbiIpCisgICAgICAgIGdsaWJjX2ZwLndyaXRlKCIjaWZuZGVmIF9CSU9OSUNfR0xJQkNfU1lTQ0FMTFNfSF9cbiIpCisgICAgICAgIGdsaWJjX2ZwLndyaXRlKCIjZGVmaW5lIF9CSU9OSUNfR0xJQkNfU1lTQ0FMTFNfSF9cbiIpCiAKLSAgICAgICAgIyBub3csIGFsbCBhcm0tc3BlY2lmaWMgc3lzY2FsbHMKLSAgICAgICAgZnAud3JpdGUoICJcbiNpZmRlZiBfX2FybV9fXG4iICk7Ci0gICAgICAgIGZvciBzYyBpbiBzZWxmLnN5c2NhbGxzOgotICAgICAgICAgICAgc2NfaWQgID0gc2NbImFybWlkIl0KLSAgICAgICAgICAgIHNjX25hbWUgPSBzY1sibmFtZSJdCi0gICAgICAgICAgICBpZiBzY19pZCA+PSAwOgotICAgICAgICAgICAgICAgIHNlbGYuZ2VuX05SX3N5c2NhbGwoIGZwLCBzY19uYW1lLCBzY19pZCApCi0gICAgICAgIGZwLndyaXRlKCAiI2VuZGlmXG4iICk7CisgICAgICAgIGdsaWJjX2ZwLndyaXRlKCIjaWYgZGVmaW5lZChfX2FybV9fKVxuIikKKyAgICAgICAgc2VsZi5zY2FuX2xpbnV4X3VuaXN0ZF9oKGdsaWJjX2ZwLCBiaW9uaWNfbGliY19yb290ICsgIi9rZXJuZWwvYXJjaC1hcm0vYXNtL3VuaXN0ZC5oIikKKyAgICAgICAgZ2xpYmNfZnAud3JpdGUoIiNlbGlmIGRlZmluZWQoX19taXBzX18pXG4iKQorICAgICAgICBzZWxmLnNjYW5fbGludXhfdW5pc3RkX2goZ2xpYmNfZnAsIGJpb25pY19saWJjX3Jvb3QgKyAiL2tlcm5lbC9hcmNoLW1pcHMvYXNtL3VuaXN0ZC5oIikKKyAgICAgICAgZ2xpYmNfZnAud3JpdGUoIiNlbGlmIGRlZmluZWQoX19pMzg2X18pXG4iKQorICAgICAgICBzZWxmLnNjYW5fbGludXhfdW5pc3RkX2goZ2xpYmNfZnAsIGJpb25pY19saWJjX3Jvb3QgKyAiL2tlcm5lbC9hcmNoLXg4Ni9hc20vdW5pc3RkXzMyLmgiKQorICAgICAgICBnbGliY19mcC53cml0ZSgiI2VuZGlmXG4iKQogCi0gICAgICAgIGdlbl9zeXNjYWxscyA9IHt9Ci0gICAgICAgICMgZmluYWxseSwgYWxsIGkzODYtc3BlY2lmaWMgc3lzY2FsbHMKLSAgICAgICAgZnAud3JpdGUoICJcbiNpZmRlZiBfX2kzODZfX1xuIiApOwotICAgICAgICBmb3Igc2MgaW4gc29ydGVkKHNlbGYuc3lzY2FsbHMsa2V5PWxhbWJkYSB4OnhbIng4NmlkIl0pOgotICAgICAgICAgICAgc2NfaWQgID0gc2NbIng4NmlkIl0KLSAgICAgICAgICAgIHNjX25hbWUgPSBzY1sibmFtZSJdCi0gICAgICAgICAgICBpZiBzY19pZCA+PSAwIGFuZCBzY19uYW1lIG5vdCBpbiBnZW5fc3lzY2FsbHM6Ci0gICAgICAgICAgICAgICAgc2VsZi5nZW5fTlJfc3lzY2FsbCggZnAsIHNjX25hbWUsIHNjX2lkICkKLSAgICAgICAgICAgICAgICBnZW5fc3lzY2FsbHNbc2NfbmFtZV0gPSBUcnVlCi0gICAgICAgIGZwLndyaXRlKCAiI2VuZGlmXG4iICk7CisgICAgICAgIGdsaWJjX2ZwLndyaXRlKCIjZW5kaWYgLyogX0JJT05JQ19HTElCQ19TWVNDQUxMU19IXyAqL1xuIikKKyAgICAgICAgZ2xpYmNfZnAuY2xvc2UoKQorICAgICAgICBzZWxmLm90aGVyX2ZpbGVzLmFwcGVuZChnbGliY19zeXNjYWxsc19oX3BhdGgpCiAKLSAgICAgICAgIyBhbGwgbWlwcy1zcGVjaWZpYyBzeXNjYWxscwotICAgICAgICBmcC53cml0ZSggIlxuI2lmZGVmIF9fbWlwc19fXG4iICk7Ci0gICAgICAgIGZvciBzYyBpbiBzb3J0ZWQoc2VsZi5zeXNjYWxscyxrZXk9bGFtYmRhIHg6eFsibWlwc2lkIl0pOgotICAgICAgICAgICAgc2NfaWQgPSBzY1sibWlwc2lkIl0KLSAgICAgICAgICAgIGlmIHNjX2lkID49IDA6Ci0gICAgICAgICAgICAgICAgc2VsZi5nZW5fTlJfc3lzY2FsbCggZnAsIHNjWyJuYW1lIl0sIHNjX2lkICkKLSAgICAgICAgZnAud3JpdGUoICIjZW5kaWZcbiIgKTsKLQotICAgICAgICBmcC53cml0ZSggIlxuI2VuZGlmXG4iICkKLSAgICAgICAgZnAud3JpdGUoICJcbiNlbmRpZiAvKiBfQklPTklDX0xJTlVYX1NZU0NBTExTX0hfICovXG4iICk7Ci0gICAgICAgIGZwLmNsb3NlKCkKLSAgICAgICAgc2VsZi5vdGhlcl9maWxlcy5hcHBlbmQoIHBhdGggKQotCi0gICAgIyBub3cgZHVtcCB0aGUgY29udGVudCBvZiBsaW51eC1zeXNjYWxscy5oCi0gICAgZGVmIGdlbl9saW51eF91bmlzdGRfaChzZWxmKToKLSAgICAgICAgcGF0aCA9ICJpbmNsdWRlL3N5cy9saW51eC11bmlzdGQuaCIKLSAgICAgICAgRCggImdlbmVyYXRpbmcgIitwYXRoICkKLSAgICAgICAgZnAgPSBjcmVhdGVfZmlsZSggcGF0aCApCi0gICAgICAgIGZwLndyaXRlKCAiLyogYXV0by1nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHksIGRvIG5vdCB0b3VjaCAqL1xuIiApCi0gICAgICAgIGZwLndyaXRlKCAiI2lmbmRlZiBfQklPTklDX0xJTlVYX1VOSVNURF9IX1xuXG4iICk7Ci0gICAgICAgIGZwLndyaXRlKCAiI2lmZGVmIF9fY3BsdXNwbHVzXG5leHRlcm4gXCJDXCIge1xuI2VuZGlmXG5cbiIgKQotCi0gICAgICAgIGZvciBzYyBpbiBzZWxmLnN5c2NhbGxzOgotICAgICAgICAgICAgZnAud3JpdGUoIHNjWyJkZWNsIl0rIlxuIiApCi0KLSAgICAgICAgZnAud3JpdGUoICIjaWZkZWYgX19jcGx1c3BsdXNcbn1cbiNlbmRpZlxuIiApCi0gICAgICAgIGZwLndyaXRlKCAiXG4jZW5kaWYgLyogX0JJT05JQ19MSU5VWF9VTklTVERfSF8gKi9cbiIgKTsKLSAgICAgICAgZnAuY2xvc2UoKQotICAgICAgICBzZWxmLm90aGVyX2ZpbGVzLmFwcGVuZCggcGF0aCApCiAKICAgICAjIG5vdyBkdW1wIHRoZSBjb250ZW50cyBvZiBzeXNjYWxscy5tawogICAgIGRlZiBnZW5fYXJjaF9zeXNjYWxsc19tayhzZWxmLCBhcmNoKToKQEAgLTUwMSw3ICszNDQsNyBAQAogICAgICAgICBmcC53cml0ZSggIiMgYXV0by1nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHksIGRvIG5vdCB0b3VjaFxuIiApCiAgICAgICAgIGZwLndyaXRlKCAic3lzY2FsbF9zcmMgOj0gXG4iICkKICAgICAgICAgYXJjaF90ZXN0ID0gewotICAgICAgICAgICAgImFybSI6IGxhbWJkYSB4OiB4Lmhhc19rZXkoImFzbS1hcm0iKSBvciB4Lmhhc19rZXkoImFzbS10aHVtYiIpLAorICAgICAgICAgICAgImFybSI6IGxhbWJkYSB4OiB4Lmhhc19rZXkoImFzbS1hcm0iKSwKICAgICAgICAgICAgICJ4ODYiOiBsYW1iZGEgeDogeC5oYXNfa2V5KCJhc20teDg2IiksCiAgICAgICAgICAgICAibWlwcyI6IGxhbWJkYSB4OiB4Lmhhc19rZXkoImFzbS1taXBzIikKICAgICAgICAgfQpAQCAtNTI1LDE0ICszNjgsNiBAQAogICAgICAgICAgICAgICAgIGZwLmNsb3NlKCkKICAgICAgICAgICAgICAgICBzZWxmLm5ld19zdHVicy5hcHBlbmQoIGZuYW1lICkKIAotICAgICAgICAgICAgaWYgc2MuaGFzX2tleSgiYXNtLXRodW1iIikgYW5kICdhcm0nIGluIGFsbF9hcmNoczoKLSAgICAgICAgICAgICAgICBmbmFtZSA9ICJhcmNoLWFybS9zeXNjYWxscy8lcy5TIiAlIHNjWyJmdW5jIl0KLSAgICAgICAgICAgICAgICBEMiggIj4+PiBnZW5lcmF0aW5nICIrZm5hbWUgKQotICAgICAgICAgICAgICAgIGZwID0gY3JlYXRlX2ZpbGUoIGZuYW1lICkKLSAgICAgICAgICAgICAgICBmcC53cml0ZShzY1siYXNtLXRodW1iIl0pCi0gICAgICAgICAgICAgICAgZnAuY2xvc2UoKQotICAgICAgICAgICAgICAgIHNlbGYubmV3X3N0dWJzLmFwcGVuZCggZm5hbWUgKQotCiAgICAgICAgICAgICBpZiBzYy5oYXNfa2V5KCJhc20teDg2IikgYW5kICd4ODYnIGluIGFsbF9hcmNoczoKICAgICAgICAgICAgICAgICBmbmFtZSA9ICJhcmNoLXg4Ni9zeXNjYWxscy8lcy5TIiAlIHNjWyJmdW5jIl0KICAgICAgICAgICAgICAgICBEMiggIj4+PiBnZW5lcmF0aW5nICIrZm5hbWUgKQpAQCAtNTUyLDE0ICszODcsMTQgQEAKICAgICBkZWYgIHJlZ2VuZXJhdGUoc2VsZik6CiAgICAgICAgIEQoICJzY2FubmluZyBmb3IgZXhpc3RpbmcgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIHN0dWIgZmlsZXMiICkKIAotICAgICAgICBiaW9uaWNfcm9vdF9sZW4gPSBsZW4oYmlvbmljX3Jvb3QpCisgICAgICAgIGJpb25pY19saWJjX3Jvb3RfbGVuID0gbGVuKGJpb25pY19saWJjX3Jvb3QpCiAKICAgICAgICAgZm9yIGFyY2ggaW4gYWxsX2FyY2hzOgotICAgICAgICAgICAgYXJjaF9wYXRoID0gYmlvbmljX3Jvb3QgKyAiYXJjaC0iICsgYXJjaAorICAgICAgICAgICAgYXJjaF9wYXRoID0gYmlvbmljX2xpYmNfcm9vdCArICJhcmNoLSIgKyBhcmNoCiAgICAgICAgICAgICBEKCAic2Nhbm5pbmcgIiArIGFyY2hfcGF0aCApCiAgICAgICAgICAgICBmaWxlcyA9IGdsb2IuZ2xvYiggYXJjaF9wYXRoICsgIi9zeXNjYWxscy8qLlMiICkKICAgICAgICAgICAgIGZvciBmIGluIGZpbGVzOgotICAgICAgICAgICAgICAgIHNlbGYub2xkX3N0dWJzLmFwcGVuZCggZltiaW9uaWNfcm9vdF9sZW46XSApCisgICAgICAgICAgICAgICAgc2VsZi5vbGRfc3R1YnMuYXBwZW5kKCBmW2Jpb25pY19saWJjX3Jvb3RfbGVuOl0gKQogCiAgICAgICAgIEQoICJmb3VuZCAlZCBzdHViIGZpbGVzIiAlIGxlbihzZWxmLm9sZF9zdHVicykgKQogCkBAIC01NjcsMTggKzQwMiwxMSBAQAogICAgICAgICAgICAgRCggImNyZWF0aW5nICVzIiAlIGJpb25pY190ZW1wICkKICAgICAgICAgICAgIG1ha2VfZGlyKCBiaW9uaWNfdGVtcCApCiAKLSMgICAgICAgIEQoICJwNCBlZGl0aW5nIHNvdXJjZSBmaWxlcyIgKQotIyAgICAgICAgZm9yIGFyY2ggaW4gYWxsX2FyY2hzOgotIyAgICAgICAgICAgIGNvbW1hbmRzLmdldG91dHB1dCggInA0IGVkaXQgIiArIGFyY2ggKyAiL3N5c2NhbGxzLyouUyAiICkKLSMgICAgICAgICAgICBjb21tYW5kcy5nZXRvdXRwdXQoICJwNCBlZGl0ICIgKyBhcmNoICsgIi9zeXNjYWxscy5tayIgKQotIyAgICAgICAgY29tbWFuZHMuZ2V0b3V0cHV0KCAicDQgZWRpdCAiICsgYmlvbmljX3Jvb3QgKyAiaW5jbHVkZS9zeXMvbGludXgtc3lzY2FsbHMuaCIgKQotCiAgICAgICAgIEQoICJyZS1nZW5lcmF0aW5nIHN0dWJzIGFuZCBzdXBwb3J0IGZpbGVzIiApCiAKLSAgICAgICAgc2VsZi5nZW5fbGludXhfc3lzY2FsbHNfaCgpCisgICAgICAgIHNlbGYuZ2VuX2dsaWJjX3N5c2NhbGxzX2goKQogICAgICAgICBmb3IgYXJjaCBpbiBhbGxfYXJjaHM6CiAgICAgICAgICAgICBzZWxmLmdlbl9hcmNoX3N5c2NhbGxzX21rKGFyY2gpCi0gICAgICAgIHNlbGYuZ2VuX2xpbnV4X3VuaXN0ZF9oKCkKICAgICAgICAgc2VsZi5nZW5fc3lzY2FsbF9zdHVicygpCiAKICAgICAgICAgRCggImNvbXBhcmluZyBmaWxlcyIgKQpAQCAtNTg2LDEzICs0MTQsMTMgQEAKICAgICAgICAgZWRpdHMgICA9IFtdCiAKICAgICAgICAgZm9yIHN0dWIgaW4gc2VsZi5uZXdfc3R1YnMgKyBzZWxmLm90aGVyX2ZpbGVzOgotICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKCBiaW9uaWNfcm9vdCArIHN0dWIgKToKKyAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyggYmlvbmljX2xpYmNfcm9vdCArIHN0dWIgKToKICAgICAgICAgICAgICAgICAjIG5ldyBmaWxlLCBnaXQgYWRkIGl0CiAgICAgICAgICAgICAgICAgRCggIm5ldyBmaWxlOiAgICAgIiArIHN0dWIpCi0gICAgICAgICAgICAgICAgYWRkcy5hcHBlbmQoIGJpb25pY19yb290ICsgc3R1YiApCi0gICAgICAgICAgICAgICAgc2h1dGlsLmNvcHlmaWxlKCBiaW9uaWNfdGVtcCArIHN0dWIsIGJpb25pY19yb290ICsgc3R1YiApCisgICAgICAgICAgICAgICAgYWRkcy5hcHBlbmQoIGJpb25pY19saWJjX3Jvb3QgKyBzdHViICkKKyAgICAgICAgICAgICAgICBzaHV0aWwuY29weWZpbGUoIGJpb25pY190ZW1wICsgc3R1YiwgYmlvbmljX2xpYmNfcm9vdCArIHN0dWIgKQogCi0gICAgICAgICAgICBlbGlmIG5vdCBmaWxlY21wLmNtcCggYmlvbmljX3RlbXAgKyBzdHViLCBiaW9uaWNfcm9vdCArIHN0dWIgKToKKyAgICAgICAgICAgIGVsaWYgbm90IGZpbGVjbXAuY21wKCBiaW9uaWNfdGVtcCArIHN0dWIsIGJpb25pY19saWJjX3Jvb3QgKyBzdHViICk6CiAgICAgICAgICAgICAgICAgRCggImNoYW5nZWQgZmlsZTogIiArIHN0dWIpCiAgICAgICAgICAgICAgICAgZWRpdHMuYXBwZW5kKCBzdHViICkKIApAQCAtNjAwLDcgKzQyOCw3IEBACiAgICAgICAgIGZvciBzdHViIGluIHNlbGYub2xkX3N0dWJzOgogICAgICAgICAgICAgaWYgbm90IHN0dWIgaW4gc2VsZi5uZXdfc3R1YnM6CiAgICAgICAgICAgICAgICAgRCggImRlbGV0ZWQgZmlsZTogIiArIHN0dWIpCi0gICAgICAgICAgICAgICAgZGVsZXRlcy5hcHBlbmQoIGJpb25pY19yb290ICsgc3R1YiApCisgICAgICAgICAgICAgICAgZGVsZXRlcy5hcHBlbmQoIGJpb25pY19saWJjX3Jvb3QgKyBzdHViICkKIAogCiAgICAgICAgIGlmIGFkZHM6CkBAIC02MDksMTEgKzQzNywxMSBAQAogICAgICAgICAgICAgY29tbWFuZHMuZ2V0b3V0cHV0KCJnaXQgcm0gIiArICIgIi5qb2luKGRlbGV0ZXMpKQogICAgICAgICBpZiBlZGl0czoKICAgICAgICAgICAgIGZvciBmaWxlIGluIGVkaXRzOgotICAgICAgICAgICAgICAgIHNodXRpbC5jb3B5ZmlsZSggYmlvbmljX3RlbXAgKyBmaWxlLCBiaW9uaWNfcm9vdCArIGZpbGUgKQorICAgICAgICAgICAgICAgIHNodXRpbC5jb3B5ZmlsZSggYmlvbmljX3RlbXAgKyBmaWxlLCBiaW9uaWNfbGliY19yb290ICsgZmlsZSApCiAgICAgICAgICAgICBjb21tYW5kcy5nZXRvdXRwdXQoImdpdCBhZGQgIiArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAiLmpvaW4oKGJpb25pY19yb290ICsgZmlsZSkgZm9yIGZpbGUgaW4gZWRpdHMpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgIi5qb2luKChiaW9uaWNfbGliY19yb290ICsgZmlsZSkgZm9yIGZpbGUgaW4gZWRpdHMpKQogCi0gICAgICAgIGNvbW1hbmRzLmdldG91dHB1dCgiZ2l0IGFkZCAlcyVzIiAlIChiaW9uaWNfcm9vdCwiU1lTQ0FMTFMuVFhUIikpCisgICAgICAgIGNvbW1hbmRzLmdldG91dHB1dCgiZ2l0IGFkZCAlcyVzIiAlIChiaW9uaWNfbGliY19yb290LCJTWVNDQUxMUy5UWFQiKSkKIAogICAgICAgICBpZiAobm90IGFkZHMpIGFuZCAobm90IGRlbGV0ZXMpIGFuZCAobm90IGVkaXRzKToKICAgICAgICAgICAgIEQoIm5vIGNoYW5nZXMgZGV0ZWN0ZWQhIikKQEAgLTYyMyw1ICs0NTEsNSBAQAogRF9zZXRsZXZlbCgxKQogCiBzdGF0ZSA9IFN0YXRlKCkKLXN0YXRlLnByb2Nlc3NfZmlsZShiaW9uaWNfcm9vdCsiU1lTQ0FMTFMuVFhUIikKK3N0YXRlLnByb2Nlc3NfZmlsZShiaW9uaWNfbGliY19yb290KyJTWVNDQUxMUy5UWFQiKQogc3RhdGUucmVnZW5lcmF0ZSgpCmRpZmYgLS1naXQgYS9saWJjL3Rvb2xzL3pvbmVpbmZvL1pvbmVDb21wYWN0b3IuamF2YSBiL2xpYmMvdG9vbHMvem9uZWluZm8vWm9uZUNvbXBhY3Rvci5qYXZhCmluZGV4IGI2NTc3NDguLmY0N2FmZDEgMTAwNjQ0Ci0tLSBhL2xpYmMvdG9vbHMvem9uZWluZm8vWm9uZUNvbXBhY3Rvci5qYXZhCisrKyBiL2xpYmMvdG9vbHMvem9uZWluZm8vWm9uZUNvbXBhY3Rvci5qYXZhCkBAIC0xLDExICsxLDEzIEBACiAKIGltcG9ydCBqYXZhLmlvLio7CitpbXBvcnQgamF2YS5uaW8uQnl0ZU9yZGVyOwogaW1wb3J0IGphdmEudXRpbC4qOworaW1wb3J0IGxpYmNvcmUuaW8uQnVmZmVySXRlcmF0b3I7CitpbXBvcnQgbGliY29yZS51dGlsLlpvbmVJbmZvOwogCi0vLyB1c2FnZTogamF2YSBab25lQ29tcGlsZXIgPHNldHVwIGZpbGU+IDx0b3AtbGV2ZWwgZGlyZWN0b3J5PgorLy8gdXNhZ2U6IGphdmEgWm9uZUNvbXBpbGVyIDxzZXR1cCBmaWxlPiA8ZGF0YSBkaXJlY3Rvcnk+IDxvdXRwdXQgZGlyZWN0b3J5PiA8dHpkYXRhIHZlcnNpb24+CiAvLwotLy8gQ29tcGlsZSBhIHNldCBvZiB0emZpbGUtZm9ybWF0dGVkIGZpbGVzIGludG8gYSBzaW5nbGUgZmlsZSBwbHVzCi0vLyBhbiBpbmRleCBmaWxlLgorLy8gQ29tcGlsZSBhIHNldCBvZiB0emZpbGUtZm9ybWF0dGVkIGZpbGVzIGludG8gYSBzaW5nbGUgZmlsZSBjb250YWluaW5nIGFuIGluZGV4LgogLy8KIC8vIFRoZSBjb21waWxhdGlvbiBpcyBjb250cm9sbGVkIGJ5IGEgc2V0dXAgZmlsZSwgd2hpY2ggaXMgcHJvdmlkZWQgYXMgYQogLy8gY29tbWFuZC1saW5lIGFyZ3VtZW50LiAgVGhlIHNldHVwIGZpbGUgaGFzIHRoZSBmb3JtOgpAQCAtMTUsMTUyICsxNywyMjUgQEAKIC8vIDx6b25lIGZpbGVuYW1lPgogLy8gLi4uCiAvLwotLy8gTm90ZSB0aGF0IHRoZSBsaW5rcyBtdXN0IGJlIGRlY2xhcmVkIHByaW9yIHRvIHRoZSB6b25lIG5hbWVzLiAgQQotLy8gem9uZSBuYW1lIGlzIGEgZmlsZW5hbWUgcmVsYXRpdmUgdG8gdGhlIHNvdXJjZSBkaXJlY3Rvcnkgc3VjaCBhcworLy8gTm90ZSB0aGF0IHRoZSBsaW5rcyBtdXN0IGJlIGRlY2xhcmVkIHByaW9yIHRvIHRoZSB6b25lIG5hbWVzLgorLy8gQSB6b25lIG5hbWUgaXMgYSBmaWxlbmFtZSByZWxhdGl2ZSB0byB0aGUgc291cmNlIGRpcmVjdG9yeSBzdWNoIGFzCiAvLyAnR01UJywgJ0FmcmljYS9EYWthcicsIG9yICdBbWVyaWNhL0FyZ2VudGluYS9KdWp1eScuCiAvLwogLy8gVXNlIHRoZSAnemljJyBjb21tYW5kLWxpbmUgdG9vbCB0byBjb252ZXJ0IGZyb20gZmxhdCBmaWxlcwotLy8gKGUuZy4sICdhZnJpY2EnLCAnbm9ydGhhbWVyaWNhJykgaW50byBhIHN1aXRhYmxlIHNvdXJjZSBkaXJlY3RvcnkKLS8vIGhpZXJhcmNoeSBmb3IgdGhpcyB0b29sIChlLmcuLCAnZGF0YS9BZnJpY2EvQWJpZGphbicpLgorLy8gKHN1Y2ggYXMgJ2FmcmljYScgb3IgJ25vcnRoYW1lcmljYScpIHRvIGEgZGlyZWN0b3J5CisvLyBoaWVyYXJjaHkgc3VpdGFibGUgZm9yIHRoaXMgdG9vbCAoY29udGFpbmluZyBmaWxlcyBzdWNoIGFzICdkYXRhL0FmcmljYS9BYmlkamFuJykuCiAvLwotLy8gRXhhbXBsZToKLS8vICAgICB6aWMgLWQgZGF0YSB0ejIwMDdoCi0vLyAgICAgamF2YWMgWm9uZUNvbXBhY3Rvci5qYXZhCi0vLyAgICAgamF2YSBab25lQ29tcGFjdG9yIHNldHVwIGRhdGEKLS8vICAgICA8cHJvZHVjZXMgem9uZWluZm8uZGF0IGFuZCB6b25laW5mby5pZHg+CiAKIHB1YmxpYyBjbGFzcyBab25lQ29tcGFjdG9yIHsKKyAgcHVibGljIHN0YXRpYyBjbGFzcyBCeXRlQXJyYXlCdWZmZXJJdGVyYXRvckJFIGV4dGVuZHMgQnVmZmVySXRlcmF0b3IgeworICAgIHByaXZhdGUgZmluYWwgYnl0ZVtdIGJ5dGVzOworICAgIHByaXZhdGUgaW50IG9mZnNldCA9IDA7CiAKLSAgICAvLyBab25lIG5hbWUgc3lub255bXMKLSAgICBNYXA8U3RyaW5nLFN0cmluZz4gbGlua3MgPSBuZXcgSGFzaE1hcDxTdHJpbmcsU3RyaW5nPigpOwotCi0gICAgLy8gRmlsZSBzdGFydGluZyBieXRlcyBieSB6b25lIG5hbWUKLSAgICBNYXA8U3RyaW5nLEludGVnZXI+IHN0YXJ0cyA9IG5ldyBIYXNoTWFwPFN0cmluZyxJbnRlZ2VyPigpOwotCi0gICAgLy8gRmlsZSBsZW5ndGhzIGJ5IHpvbmUgbmFtZQotICAgIE1hcDxTdHJpbmcsSW50ZWdlcj4gbGVuZ3RocyA9IG5ldyBIYXNoTWFwPFN0cmluZyxJbnRlZ2VyPigpOwotCi0gICAgLy8gUmF3IEdNVCBvZmZzZXRzIGJ5IHpvbmUgbmFtZQotICAgIE1hcDxTdHJpbmcsSW50ZWdlcj4gb2Zmc2V0cyA9IG5ldyBIYXNoTWFwPFN0cmluZyxJbnRlZ2VyPigpOwotICAgIGludCBzdGFydCA9IDA7Ci0KLSAgICAvLyBNYXhpbXVtIG51bWJlciBvZiBjaGFyYWN0ZXJzIGluIGEgem9uZSBuYW1lLCBpbmNsdWRpbmcgJ1wwJyB0ZXJtaW5hdG9yCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE1BWE5BTUUgPSA0MDsKLQotICAgIC8vIENvbmNhdGVuYXRlIHRoZSBjb250ZW50cyBvZiAnaW5GaWxlJyBvbnRvICdvdXQnCi0gICAgLy8gYW5kIHJldHVybiB0aGUgY29udGVudHMgYXMgYSBieXRlIGFycmF5LgotICAgIHByaXZhdGUgc3RhdGljIGJ5dGVbXSBjb3B5RmlsZShGaWxlIGluRmlsZSwgT3V0cHV0U3RyZWFtIG91dCkKLSAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIGJ5dGVbXSByZXQgPSBuZXcgYnl0ZVswXTsKLQotICAgICAgICBJbnB1dFN0cmVhbSBpbiA9IG5ldyBGaWxlSW5wdXRTdHJlYW0oaW5GaWxlKTsKLSAgICAgICAgYnl0ZVtdIGJ1ZiA9IG5ldyBieXRlWzgxOTJdOwotICAgICAgICB3aGlsZSAodHJ1ZSkgewotICAgICAgICAgICAgaW50IG5ieXRlcyA9IGluLnJlYWQoYnVmKTsKLSAgICAgICAgICAgIGlmIChuYnl0ZXMgPT0gLTEpIHsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG91dC53cml0ZShidWYsIDAsIG5ieXRlcyk7Ci0KLSAgICAgICAgICAgIGJ5dGVbXSBucmV0ID0gbmV3IGJ5dGVbcmV0Lmxlbmd0aCArIG5ieXRlc107Ci0gICAgICAgICAgICBTeXN0ZW0uYXJyYXljb3B5KHJldCwgMCwgbnJldCwgMCwgcmV0Lmxlbmd0aCk7Ci0gICAgICAgICAgICBTeXN0ZW0uYXJyYXljb3B5KGJ1ZiwgMCwgbnJldCwgcmV0Lmxlbmd0aCwgbmJ5dGVzKTsKLSAgICAgICAgICAgIHJldCA9IG5yZXQ7Ci0gICAgICAgIH0KLSAgICAgICAgb3V0LmZsdXNoKCk7Ci0gICAgICAgIHJldHVybiByZXQ7Ci0gICAgfQotICAgIAotICAgIC8vIFdyaXRlIGEgMzItYml0IGludGVnZXIgaW4gbmV0d29yayBieXRlIG9yZGVyCi0gICAgcHJpdmF0ZSB2b2lkIHdyaXRlSW50KE91dHB1dFN0cmVhbSBvcywgaW50IHgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgICAgIG9zLndyaXRlKCh4ID4+IDI0KSAmIDB4ZmYpOwotICAgICAgICBvcy53cml0ZSgoeCA+PiAxNikgJiAweGZmKTsKLSAgICAgICAgb3Mud3JpdGUoKHggPj4gIDgpICYgMHhmZik7Ci0gICAgICAgIG9zLndyaXRlKCB4ICAgICAgICAmIDB4ZmYpOworICAgIHB1YmxpYyBCeXRlQXJyYXlCdWZmZXJJdGVyYXRvckJFKGJ5dGVbXSBieXRlcykgeworICAgICAgdGhpcy5ieXRlcyA9IGJ5dGVzOworICAgICAgdGhpcy5vZmZzZXQgPSAwOwogICAgIH0KIAotICAgIHB1YmxpYyBab25lQ29tcGFjdG9yKFN0cmluZyBzZXR1cEZpbGVuYW1lLCBTdHJpbmcgZGlyTmFtZSkKLSAgICAgICAgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIEZpbGUgem9uZUluZm9GaWxlID0gbmV3IEZpbGUoInpvbmVpbmZvLmRhdCIpOwotICAgICAgICB6b25lSW5mb0ZpbGUuZGVsZXRlKCk7Ci0gICAgICAgIE91dHB1dFN0cmVhbSB6b25lSW5mbyA9IG5ldyBGaWxlT3V0cHV0U3RyZWFtKHpvbmVJbmZvRmlsZSk7Ci0KLSAgICAgICAgQnVmZmVyZWRSZWFkZXIgcmRyID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBGaWxlUmVhZGVyKHNldHVwRmlsZW5hbWUpKTsKLSAgICAKLSAgICAgICAgU3RyaW5nIHM7Ci0gICAgICAgIHdoaWxlICgocyA9IHJkci5yZWFkTGluZSgpKSAhPSBudWxsKSB7Ci0gICAgICAgICAgICBzID0gcy50cmltKCk7Ci0gICAgICAgICAgICBpZiAocy5zdGFydHNXaXRoKCJMaW5rIikpIHsKLSAgICAgICAgICAgICAgICBTdHJpbmdUb2tlbml6ZXIgc3QgPSBuZXcgU3RyaW5nVG9rZW5pemVyKHMpOwotICAgICAgICAgICAgICAgIHN0Lm5leHRUb2tlbigpOwotICAgICAgICAgICAgICAgIFN0cmluZyB0byA9IHN0Lm5leHRUb2tlbigpOwotICAgICAgICAgICAgICAgIFN0cmluZyBmcm9tID0gc3QubmV4dFRva2VuKCk7Ci0gICAgICAgICAgICAgICAgbGlua3MucHV0KGZyb20sIHRvKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIGxpbmsgPSBsaW5rcy5nZXQocyk7Ci0gICAgICAgICAgICAgICAgaWYgKGxpbmsgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICBGaWxlIGYgPSBuZXcgRmlsZShkaXJOYW1lLCBzKTsKLSAgICAgICAgICAgICAgICAgICAgbG9uZyBsZW5ndGggPSBmLmxlbmd0aCgpOwotICAgICAgICAgICAgICAgICAgICBzdGFydHMucHV0KHMsIG5ldyBJbnRlZ2VyKHN0YXJ0KSk7Ci0gICAgICAgICAgICAgICAgICAgIGxlbmd0aHMucHV0KHMsIG5ldyBJbnRlZ2VyKChpbnQpbGVuZ3RoKSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgc3RhcnQgKz0gbGVuZ3RoOwotICAgICAgICAgICAgICAgICAgICBieXRlW10gZGF0YSA9IGNvcHlGaWxlKGYsIHpvbmVJbmZvKTsKLQotICAgICAgICAgICAgICAgICAgICBUaW1lWm9uZSB0eiA9IFpvbmVJbmZvLm1ha2UocywgZGF0YSk7Ci0gICAgICAgICAgICAgICAgICAgIGludCBnbXRPZmZzZXQgPSB0ei5nZXRSYXdPZmZzZXQoKTsKLSAgICAgICAgICAgICAgICAgICAgb2Zmc2V0cy5wdXQocywgbmV3IEludGVnZXIoZ210T2Zmc2V0KSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHpvbmVJbmZvLmNsb3NlKCk7Ci0KLSAgICAgICAgLy8gRmlsbCBpbiBmaWVsZHMgZm9yIGxpbmtzCi0gICAgICAgIEl0ZXJhdG9yPFN0cmluZz4gaXRlciA9IGxpbmtzLmtleVNldCgpLml0ZXJhdG9yKCk7Ci0gICAgICAgIHdoaWxlIChpdGVyLmhhc05leHQoKSkgewotICAgICAgICAgICAgU3RyaW5nIGZyb20gPSBpdGVyLm5leHQoKTsKLSAgICAgICAgICAgIFN0cmluZyB0byA9IGxpbmtzLmdldChmcm9tKTsKLQotICAgICAgICAgICAgc3RhcnRzLnB1dChmcm9tLCBzdGFydHMuZ2V0KHRvKSk7Ci0gICAgICAgICAgICBsZW5ndGhzLnB1dChmcm9tLCBsZW5ndGhzLmdldCh0bykpOwotICAgICAgICAgICAgb2Zmc2V0cy5wdXQoZnJvbSwgb2Zmc2V0cy5nZXQodG8pKTsKLSAgICAgICAgfQotCi0gICAgICAgIEZpbGUgaWR4RmlsZSA9IG5ldyBGaWxlKCJ6b25laW5mby5pZHgiKTsKLSAgICAgICAgaWR4RmlsZS5kZWxldGUoKTsKLSAgICAgICAgRmlsZU91dHB1dFN0cmVhbSBpZHggPSBuZXcgRmlsZU91dHB1dFN0cmVhbShpZHhGaWxlKTsKLQotICAgICAgICBBcnJheUxpc3Q8U3RyaW5nPiBsID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7Ci0gICAgICAgIGwuYWRkQWxsKHN0YXJ0cy5rZXlTZXQoKSk7Ci0gICAgICAgIENvbGxlY3Rpb25zLnNvcnQobCk7Ci0gICAgICAgIEl0ZXJhdG9yPFN0cmluZz4geml0ZXIgPSBsLml0ZXJhdG9yKCk7Ci0gICAgICAgIHdoaWxlICh6aXRlci5oYXNOZXh0KCkpIHsKLSAgICAgICAgICAgIFN0cmluZyB6bmFtZSA9IHppdGVyLm5leHQoKTsKLSAgICAgICAgICAgIGlmICh6bmFtZS5sZW5ndGgoKSA+PSBNQVhOQU1FKSB7Ci0gICAgICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJFcnJvciAtIHpvbmUgZmlsZW5hbWUgZXhjZWVkcyAiICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKE1BWE5BTUUgLSAxKSArICIgY2hhcmFjdGVycyEiKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgYnl0ZVtdIHpuYW1lQnVmID0gbmV3IGJ5dGVbTUFYTkFNRV07Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHpuYW1lLmxlbmd0aCgpOyBpKyspIHsKLSAgICAgICAgICAgICAgICB6bmFtZUJ1ZltpXSA9IChieXRlKXpuYW1lLmNoYXJBdChpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlkeC53cml0ZSh6bmFtZUJ1Zik7Ci0gICAgICAgICAgICB3cml0ZUludChpZHgsIHN0YXJ0cy5nZXQoem5hbWUpLmludFZhbHVlKCkpOwotICAgICAgICAgICAgd3JpdGVJbnQoaWR4LCBsZW5ndGhzLmdldCh6bmFtZSkuaW50VmFsdWUoKSk7Ci0gICAgICAgICAgICB3cml0ZUludChpZHgsIG9mZnNldHMuZ2V0KHpuYW1lKS5pbnRWYWx1ZSgpKTsKLSAgICAgICAgfQotICAgICAgICBpZHguY2xvc2UoKTsKLQotICAgICAgICAvLyBTeXN0ZW0ub3V0LnByaW50bG4oIm1heExlbmd0aCA9ICIgKyBtYXhMZW5ndGgpOworICAgIHB1YmxpYyB2b2lkIHNlZWsoaW50IG9mZnNldCkgeworICAgICAgdGhpcy5vZmZzZXQgPSBvZmZzZXQ7CiAgICAgfQogCi0gICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIGlmIChhcmdzLmxlbmd0aCAhPSAyKSB7Ci0gICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oInVzYWdlOiBqYXZhIFpvbmVDb21wYWN0b3IgPHNldHVwPiA8ZGF0YSBkaXI+Iik7Ci0gICAgICAgICAgICBTeXN0ZW0uZXhpdCgwKTsKLSAgICAgICAgfQotICAgICAgICBuZXcgWm9uZUNvbXBhY3RvcihhcmdzWzBdLCBhcmdzWzFdKTsKKyAgICBwdWJsaWMgdm9pZCBza2lwKGludCBieXRlQ291bnQpIHsKKyAgICAgIHRoaXMub2Zmc2V0ICs9IGJ5dGVDb3VudDsKICAgICB9CiAKKyAgICBwdWJsaWMgdm9pZCByZWFkQnl0ZUFycmF5KGJ5dGVbXSBkc3QsIGludCBkc3RPZmZzZXQsIGludCBieXRlQ291bnQpIHsKKyAgICAgIFN5c3RlbS5hcnJheWNvcHkoYnl0ZXMsIG9mZnNldCwgZHN0LCBkc3RPZmZzZXQsIGJ5dGVDb3VudCk7CisgICAgICBvZmZzZXQgKz0gYnl0ZUNvdW50OworICAgIH0KKworICAgIHB1YmxpYyBieXRlIHJlYWRCeXRlKCkgeworICAgICAgcmV0dXJuIGJ5dGVzW29mZnNldCsrXTsKKyAgICB9CisKKyAgICBwdWJsaWMgaW50IHJlYWRJbnQoKSB7CisgICAgICByZXR1cm4gKChyZWFkQnl0ZSgpICYgMHhmZikgPDwgMjQpIHwgKChyZWFkQnl0ZSgpICYgMHhmZikgPDwgMTYpIHwgKChyZWFkQnl0ZSgpICYgMHhmZikgPDwgOCkgfCAocmVhZEJ5dGUoKSAmIDB4ZmYpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHJlYWRJbnRBcnJheShpbnRbXSBkc3QsIGludCBkc3RPZmZzZXQsIGludCBpbnRDb3VudCkgeworICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpbnRDb3VudDsgKytpKSB7CisgICAgICAgIGRzdFtkc3RPZmZzZXQrK10gPSByZWFkSW50KCk7CisgICAgICB9CisgICAgfQorCisgICAgcHVibGljIHNob3J0IHJlYWRTaG9ydCgpIHsKKyAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigpOworICAgIH0KKyAgfQorCisgIC8vIE1heGltdW0gbnVtYmVyIG9mIGNoYXJhY3RlcnMgaW4gYSB6b25lIG5hbWUsIGluY2x1ZGluZyAnXDAnIHRlcm1pbmF0b3IKKyAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE1BWE5BTUUgPSA0MDsKKworICAvLyBab25lIG5hbWUgc3lub255bXMKKyAgcHJpdmF0ZSBNYXA8U3RyaW5nLFN0cmluZz4gbGlua3MgPSBuZXcgSGFzaE1hcDxTdHJpbmcsU3RyaW5nPigpOworCisgIC8vIEZpbGUgc3RhcnRpbmcgYnl0ZXMgYnkgem9uZSBuYW1lCisgIHByaXZhdGUgTWFwPFN0cmluZyxJbnRlZ2VyPiBzdGFydHMgPSBuZXcgSGFzaE1hcDxTdHJpbmcsSW50ZWdlcj4oKTsKKworICAvLyBGaWxlIGxlbmd0aHMgYnkgem9uZSBuYW1lCisgIHByaXZhdGUgTWFwPFN0cmluZyxJbnRlZ2VyPiBsZW5ndGhzID0gbmV3IEhhc2hNYXA8U3RyaW5nLEludGVnZXI+KCk7CisKKyAgLy8gUmF3IEdNVCBvZmZzZXRzIGJ5IHpvbmUgbmFtZQorICBwcml2YXRlIE1hcDxTdHJpbmcsSW50ZWdlcj4gb2Zmc2V0cyA9IG5ldyBIYXNoTWFwPFN0cmluZyxJbnRlZ2VyPigpOworICBwcml2YXRlIGludCBzdGFydCA9IDA7CisKKyAgLy8gQ29uY2F0ZW5hdGUgdGhlIGNvbnRlbnRzIG9mICdpbkZpbGUnIG9udG8gJ291dCcKKyAgLy8gYW5kIHJldHVybiB0aGUgY29udGVudHMgYXMgYSBieXRlIGFycmF5LgorICBwcml2YXRlIHN0YXRpYyBieXRlW10gY29weUZpbGUoRmlsZSBpbkZpbGUsIE91dHB1dFN0cmVhbSBvdXQpIHRocm93cyBFeGNlcHRpb24geworICAgIGJ5dGVbXSByZXQgPSBuZXcgYnl0ZVswXTsKKworICAgIElucHV0U3RyZWFtIGluID0gbmV3IEZpbGVJbnB1dFN0cmVhbShpbkZpbGUpOworICAgIGJ5dGVbXSBidWYgPSBuZXcgYnl0ZVs4MTkyXTsKKyAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgaW50IG5ieXRlcyA9IGluLnJlYWQoYnVmKTsKKyAgICAgIGlmIChuYnl0ZXMgPT0gLTEpIHsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBvdXQud3JpdGUoYnVmLCAwLCBuYnl0ZXMpOworCisgICAgICBieXRlW10gbnJldCA9IG5ldyBieXRlW3JldC5sZW5ndGggKyBuYnl0ZXNdOworICAgICAgU3lzdGVtLmFycmF5Y29weShyZXQsIDAsIG5yZXQsIDAsIHJldC5sZW5ndGgpOworICAgICAgU3lzdGVtLmFycmF5Y29weShidWYsIDAsIG5yZXQsIHJldC5sZW5ndGgsIG5ieXRlcyk7CisgICAgICByZXQgPSBucmV0OworICAgIH0KKyAgICBvdXQuZmx1c2goKTsKKyAgICByZXR1cm4gcmV0OworICB9CisKKyAgcHVibGljIFpvbmVDb21wYWN0b3IoU3RyaW5nIHNldHVwRmlsZSwgU3RyaW5nIGRhdGFEaXJlY3RvcnksIFN0cmluZyB6b25lVGFiRmlsZSwgU3RyaW5nIG91dHB1dERpcmVjdG9yeSwgU3RyaW5nIHZlcnNpb24pIHRocm93cyBFeGNlcHRpb24geworICAgIC8vIFJlYWQgdGhlIHNldHVwIGZpbGUsIGFuZCBjb25jYXRlbmF0ZSBhbGwgdGhlIGRhdGEuCisgICAgQnl0ZUFycmF5T3V0cHV0U3RyZWFtIGFsbERhdGEgPSBuZXcgQnl0ZUFycmF5T3V0cHV0U3RyZWFtKCk7CisgICAgQnVmZmVyZWRSZWFkZXIgcmVhZGVyID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBGaWxlUmVhZGVyKHNldHVwRmlsZSkpOworICAgIFN0cmluZyBzOworICAgIHdoaWxlICgocyA9IHJlYWRlci5yZWFkTGluZSgpKSAhPSBudWxsKSB7CisgICAgICBzID0gcy50cmltKCk7CisgICAgICBpZiAocy5zdGFydHNXaXRoKCJMaW5rIikpIHsKKyAgICAgICAgU3RyaW5nVG9rZW5pemVyIHN0ID0gbmV3IFN0cmluZ1Rva2VuaXplcihzKTsKKyAgICAgICAgc3QubmV4dFRva2VuKCk7CisgICAgICAgIFN0cmluZyB0byA9IHN0Lm5leHRUb2tlbigpOworICAgICAgICBTdHJpbmcgZnJvbSA9IHN0Lm5leHRUb2tlbigpOworICAgICAgICBsaW5rcy5wdXQoZnJvbSwgdG8pOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgU3RyaW5nIGxpbmsgPSBsaW5rcy5nZXQocyk7CisgICAgICAgIGlmIChsaW5rID09IG51bGwpIHsKKyAgICAgICAgICBGaWxlIHNvdXJjZUZpbGUgPSBuZXcgRmlsZShkYXRhRGlyZWN0b3J5LCBzKTsKKyAgICAgICAgICBsb25nIGxlbmd0aCA9IHNvdXJjZUZpbGUubGVuZ3RoKCk7CisgICAgICAgICAgc3RhcnRzLnB1dChzLCBzdGFydCk7CisgICAgICAgICAgbGVuZ3Rocy5wdXQocywgKGludCkgbGVuZ3RoKTsKKworICAgICAgICAgIHN0YXJ0ICs9IGxlbmd0aDsKKyAgICAgICAgICBieXRlW10gZGF0YSA9IGNvcHlGaWxlKHNvdXJjZUZpbGUsIGFsbERhdGEpOworCisgICAgICAgICAgQnVmZmVySXRlcmF0b3IgaXQgPSBuZXcgQnl0ZUFycmF5QnVmZmVySXRlcmF0b3JCRShkYXRhKTsKKyAgICAgICAgICBUaW1lWm9uZSB0eiA9IFpvbmVJbmZvLm1ha2VUaW1lWm9uZShzLCBpdCk7CisgICAgICAgICAgaW50IGdtdE9mZnNldCA9IHR6LmdldFJhd09mZnNldCgpOworICAgICAgICAgIG9mZnNldHMucHV0KHMsIGdtdE9mZnNldCk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgICAgcmVhZGVyLmNsb3NlKCk7CisKKyAgICAvLyBGaWxsIGluIGZpZWxkcyBmb3IgbGlua3MuCisgICAgSXRlcmF0b3I8U3RyaW5nPiBpdCA9IGxpbmtzLmtleVNldCgpLml0ZXJhdG9yKCk7CisgICAgd2hpbGUgKGl0Lmhhc05leHQoKSkgeworICAgICAgU3RyaW5nIGZyb20gPSBpdC5uZXh0KCk7CisgICAgICBTdHJpbmcgdG8gPSBsaW5rcy5nZXQoZnJvbSk7CisKKyAgICAgIHN0YXJ0cy5wdXQoZnJvbSwgc3RhcnRzLmdldCh0bykpOworICAgICAgbGVuZ3Rocy5wdXQoZnJvbSwgbGVuZ3Rocy5nZXQodG8pKTsKKyAgICAgIG9mZnNldHMucHV0KGZyb20sIG9mZnNldHMuZ2V0KHRvKSk7CisgICAgfQorCisgICAgLy8gQ3JlYXRlL3RydW5jYXRlIHRoZSBkZXN0aW5hdGlvbiBmaWxlLgorICAgIFJhbmRvbUFjY2Vzc0ZpbGUgZiA9IG5ldyBSYW5kb21BY2Nlc3NGaWxlKG5ldyBGaWxlKG91dHB1dERpcmVjdG9yeSwgInR6ZGF0YSIpLCAicnciKTsKKyAgICBmLnNldExlbmd0aCgwKTsKKworICAgIC8vIFdyaXRlIHRoZSBoZWFkZXIuCisKKyAgICAvLyBieXRlWzEyXSB0emRhdGFfdmVyc2lvbiAtLSAndHpkYXRhMjAxMmZcMCcKKyAgICAvLyBpbnQgaW5kZXhfb2Zmc2V0IC0tIHNvIHdlIGNhbiBzbGlwIGluIGV4dHJhIGhlYWRlciBmaWVsZHMgaW4gYSBiYWNrd2FyZHMtY29tcGF0aWJsZSB3YXkKKyAgICAvLyBpbnQgZGF0YV9vZmZzZXQKKyAgICAvLyBpbnQgem9uZXRhYl9vZmZzZXQKKworICAgIC8vIHR6ZGF0YV92ZXJzaW9uCisgICAgZi53cml0ZSh0b0FzY2lpKG5ldyBieXRlWzEyXSwgdmVyc2lvbikpOworCisgICAgLy8gV3JpdGUgZHVtbXkgdmFsdWVzIGZvciB0aGUgdGhyZWUgb2Zmc2V0cywgYW5kIHJlbWVtYmVyIHdoZXJlIHdlIG5lZWQgdG8gc2VlayBiYWNrIHRvIGxhdGVyCisgICAgLy8gd2hlbiB3ZSBoYXZlIHRoZSByZWFsIHZhbHVlcy4KKyAgICBpbnQgaW5kZXhfb2Zmc2V0X29mZnNldCA9IChpbnQpIGYuZ2V0RmlsZVBvaW50ZXIoKTsKKyAgICBmLndyaXRlSW50KDApOworICAgIGludCBkYXRhX29mZnNldF9vZmZzZXQgPSAoaW50KSBmLmdldEZpbGVQb2ludGVyKCk7CisgICAgZi53cml0ZUludCgwKTsKKyAgICBpbnQgem9uZXRhYl9vZmZzZXRfb2Zmc2V0ID0gKGludCkgZi5nZXRGaWxlUG9pbnRlcigpOworICAgIGYud3JpdGVJbnQoMCk7CisKKyAgICBpbnQgaW5kZXhfb2Zmc2V0ID0gKGludCkgZi5nZXRGaWxlUG9pbnRlcigpOworCisgICAgLy8gV3JpdGUgdGhlIGluZGV4LgorICAgIEFycmF5TGlzdDxTdHJpbmc+IHNvcnRlZE9sc29uSWRzID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7CisgICAgc29ydGVkT2xzb25JZHMuYWRkQWxsKHN0YXJ0cy5rZXlTZXQoKSk7CisgICAgQ29sbGVjdGlvbnMuc29ydChzb3J0ZWRPbHNvbklkcyk7CisgICAgaXQgPSBzb3J0ZWRPbHNvbklkcy5pdGVyYXRvcigpOworICAgIHdoaWxlIChpdC5oYXNOZXh0KCkpIHsKKyAgICAgIFN0cmluZyB6b25lTmFtZSA9IGl0Lm5leHQoKTsKKyAgICAgIGlmICh6b25lTmFtZS5sZW5ndGgoKSA+PSBNQVhOQU1FKSB7CisgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJ6b25lIGZpbGVuYW1lIHRvbyBsb25nOiAiICsgem9uZU5hbWUubGVuZ3RoKCkpOworICAgICAgfQorCisgICAgICBmLndyaXRlKHRvQXNjaWkobmV3IGJ5dGVbTUFYTkFNRV0sIHpvbmVOYW1lKSk7CisgICAgICBmLndyaXRlSW50KHN0YXJ0cy5nZXQoem9uZU5hbWUpKTsKKyAgICAgIGYud3JpdGVJbnQobGVuZ3Rocy5nZXQoem9uZU5hbWUpKTsKKyAgICAgIGYud3JpdGVJbnQob2Zmc2V0cy5nZXQoem9uZU5hbWUpKTsKKyAgICB9CisKKyAgICBpbnQgZGF0YV9vZmZzZXQgPSAoaW50KSBmLmdldEZpbGVQb2ludGVyKCk7CisKKyAgICAvLyBXcml0ZSB0aGUgZGF0YS4KKyAgICBmLndyaXRlKGFsbERhdGEudG9CeXRlQXJyYXkoKSk7CisKKyAgICBpbnQgem9uZXRhYl9vZmZzZXQgPSAoaW50KSBmLmdldEZpbGVQb2ludGVyKCk7CisKKyAgICAvLyBDb3B5IHRoZSB6b25lLnRhYi4KKyAgICByZWFkZXIgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IEZpbGVSZWFkZXIoem9uZVRhYkZpbGUpKTsKKyAgICB3aGlsZSAoKHMgPSByZWFkZXIucmVhZExpbmUoKSkgIT0gbnVsbCkgeworICAgICAgaWYgKCFzLnN0YXJ0c1dpdGgoIiMiKSkgeworICAgICAgICBmLndyaXRlQnl0ZXMocyk7CisgICAgICAgIGYud3JpdGUoJ1xuJyk7CisgICAgICB9CisgICAgfQorICAgIHJlYWRlci5jbG9zZSgpOworCisgICAgLy8gR28gYmFjayBhbmQgZml4IHVwIHRoZSBvZmZzZXRzIGluIHRoZSBoZWFkZXIuCisgICAgZi5zZWVrKGluZGV4X29mZnNldF9vZmZzZXQpOworICAgIGYud3JpdGVJbnQoaW5kZXhfb2Zmc2V0KTsKKyAgICBmLnNlZWsoZGF0YV9vZmZzZXRfb2Zmc2V0KTsKKyAgICBmLndyaXRlSW50KGRhdGFfb2Zmc2V0KTsKKyAgICBmLnNlZWsoem9uZXRhYl9vZmZzZXRfb2Zmc2V0KTsKKyAgICBmLndyaXRlSW50KHpvbmV0YWJfb2Zmc2V0KTsKKworICAgIGYuY2xvc2UoKTsKKyAgfQorCisgIHByaXZhdGUgc3RhdGljIGJ5dGVbXSB0b0FzY2lpKGJ5dGVbXSBkc3QsIFN0cmluZyBzcmMpIHsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHNyYy5sZW5ndGgoKTsgKytpKSB7CisgICAgICBpZiAoc3JjLmNoYXJBdChpKSA+ICd+JykgeworICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigibm9uLUFTQ0lJIHN0cmluZzogIiArIHNyYyk7CisgICAgICB9CisgICAgICBkc3RbaV0gPSAoYnl0ZSkgc3JjLmNoYXJBdChpKTsKKyAgICB9CisgICAgcmV0dXJuIGRzdDsKKyAgfQorCisgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHRocm93cyBFeGNlcHRpb24geworICAgIGlmIChhcmdzLmxlbmd0aCAhPSA1KSB7CisgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oInVzYWdlOiBqYXZhIFpvbmVDb21wYWN0b3IgPHNldHVwIGZpbGU+IDxkYXRhIGRpcmVjdG9yeT4gPHpvbmUudGFiIGZpbGU+IDxvdXRwdXQgZGlyZWN0b3J5PiA8dHpkYXRhIHZlcnNpb24+Iik7CisgICAgICBTeXN0ZW0uZXhpdCgwKTsKKyAgICB9CisgICAgbmV3IFpvbmVDb21wYWN0b3IoYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSwgYXJnc1szXSwgYXJnc1s0XSk7CisgIH0KIH0KZGlmZiAtLWdpdCBhL2xpYmMvdG9vbHMvem9uZWluZm8vWm9uZUluZm8uamF2YSBiL2xpYmMvdG9vbHMvem9uZWluZm8vWm9uZUluZm8uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTk1MDdhZS4uMDAwMDAwMAotLS0gYS9saWJjL3Rvb2xzL3pvbmVpbmZvL1pvbmVJbmZvLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNzIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5BcnJheXM7Ci1pbXBvcnQgamF2YS51dGlsLkRhdGU7Ci1pbXBvcnQgamF2YS51dGlsLlRpbWVab25lOwotCi0vKioKLSAqIENvcGllZCBmcm9tIFpvbmVJbmZvIGFuZCBab25lSW5mb0RCIGluIGRhbHZpay4KLSAqIHtAaGlkZX0KLSAqLwotcHVibGljIGNsYXNzIFpvbmVJbmZvIGV4dGVuZHMgVGltZVpvbmUgewotCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBNSUxMSVNFQ09ORFNfUEVSX0RBWSA9IDI0ICogNjAgKiA2MCAqIDEwMDA7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBNSUxMSVNFQ09ORFNfUEVSXzQwMF9ZRUFSUyA9Ci0gICAgICAgIE1JTExJU0VDT05EU19QRVJfREFZICogKDQwMCAqIDM2NSArIDEwMCAtIDMpOwotCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBVTklYX09GRlNFVCA9IDYyMTY3MjE5MjAwMDAwTDsKLQotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludFtdIE5PUk1BTCA9IG5ldyBpbnRbXSB7Ci0gICAgICAgIDAsIDMxLCA1OSwgOTAsIDEyMCwgMTUxLCAxODEsIDIxMiwgMjQzLCAyNzMsIDMwNCwgMzM0LAotICAgIH07Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnRbXSBMRUFQID0gbmV3IGludFtdIHsKLSAgICAgICAgMCwgMzEsIDYwLCA5MSwgMTIxLCAxNTIsIDE4MiwgMjEzLCAyNDQsIDI3NCwgMzA1LCAzMzUsCi0gICAgfTsKLQotICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBudWxsTmFtZShieXRlW10gZGF0YSwgaW50IHdoZXJlLCBpbnQgb2ZmKSB7Ci0gICAgICAgIGlmIChvZmYgPCAwKQotICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0KLSAgICAgICAgaW50IGVuZCA9IHdoZXJlICsgb2ZmOwotICAgICAgICB3aGlsZSAoZW5kIDwgZGF0YS5sZW5ndGggJiYgZGF0YVtlbmRdICE9ICdcMCcpCi0gICAgICAgICAgICBlbmQrKzsKLQotICAgICAgICByZXR1cm4gbmV3IFN0cmluZyhkYXRhLCB3aGVyZSArIG9mZiwgZW5kIC0gKHdoZXJlICsgb2ZmKSk7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBab25lSW5mbyBtYWtlKFN0cmluZyBuYW1lLCBieXRlW10gZGF0YSkgewotICAgICAgICBpbnQgbnRyYW5zaXRpb24gPSByZWFkNChkYXRhLCAzMik7Ci0gICAgICAgIGludCBuZ210b2ZmID0gcmVhZDQoZGF0YSwgMzYpOwotICAgICAgICBpbnQgYmFzZSA9IDQ0OwotCi0gICAgICAgIGludFtdIHRyYW5zaXRpb25zID0gbmV3IGludFtudHJhbnNpdGlvbl07Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnRyYW5zaXRpb247IGkrKykKLSAgICAgICAgICAgIHRyYW5zaXRpb25zW2ldID0gcmVhZDQoZGF0YSwgYmFzZSArIDQgKiBpKTsKLSAgICAgICAgYmFzZSArPSA0ICogbnRyYW5zaXRpb247Ci0KLSAgICAgICAgYnl0ZVtdIHR5cGUgPSBuZXcgYnl0ZVtudHJhbnNpdGlvbl07Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnRyYW5zaXRpb247IGkrKykKLSAgICAgICAgICAgIHR5cGVbaV0gPSBkYXRhW2Jhc2UgKyBpXTsKLSAgICAgICAgYmFzZSArPSBudHJhbnNpdGlvbjsKLQotICAgICAgICBpbnRbXSBnbXRvZmYgPSBuZXcgaW50W25nbXRvZmZdOwotICAgICAgICBieXRlW10gaXNkc3QgPSBuZXcgYnl0ZVtuZ210b2ZmXTsKLSAgICAgICAgYnl0ZVtdIGFiYnJldiA9IG5ldyBieXRlW25nbXRvZmZdOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG5nbXRvZmY7IGkrKykgewotICAgICAgICAgICAgZ210b2ZmW2ldID0gcmVhZDQoZGF0YSwgYmFzZSArIDYgKiBpKTsKLSAgICAgICAgICAgIGlzZHN0W2ldID0gZGF0YVtiYXNlICsgNiAqIGkgKyA0XTsKLSAgICAgICAgICAgIGFiYnJldltpXSA9IGRhdGFbYmFzZSArIDYgKiBpICsgNV07Ci0gICAgICAgIH0KLQotICAgICAgICBiYXNlICs9IDYgKiBuZ210b2ZmOwotCi0gICAgICAgIHJldHVybiBuZXcgWm9uZUluZm8obmFtZSwgdHJhbnNpdGlvbnMsIHR5cGUsIGdtdG9mZiwgaXNkc3QsIGFiYnJldiwgZGF0YSwgYmFzZSk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgaW50IHJlYWQ0KGJ5dGVbXSBkYXRhLCBpbnQgb2ZmKSB7Ci0gICAgICAgIHJldHVybiAoKGRhdGFbb2ZmICAgIF0gJiAweEZGKSA8PCAyNCkgfAotICAgICAgICAgICAgICAgKChkYXRhW29mZiArIDFdICYgMHhGRikgPDwgMTYpIHwKLSAgICAgICAgICAgICAgICgoZGF0YVtvZmYgKyAyXSAmIDB4RkYpIDw8ICA4KSB8Ci0gICAgICAgICAgICAgICAoKGRhdGFbb2ZmICsgM10gJiAweEZGKSA8PCAgMCk7Ci0gICAgfQotCi0gICAgLypwYWNrYWdlKi8gWm9uZUluZm8oU3RyaW5nIG5hbWUsIGludFtdIHRyYW5zaXRpb25zLCBieXRlW10gdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgIGludFtdIGdtdG9mZiwgYnl0ZVtdIGlzZHN0LCBieXRlW10gYWJicmV2LAotICAgICAgICAgICAgICAgICAgICAgYnl0ZVtdIGRhdGEsIGludCBhYmJyZXZvZmYpIHsKLSAgICAgICAgbVRyYW5zaXRpb25zID0gdHJhbnNpdGlvbnM7Ci0gICAgICAgIG1UeXBlcyA9IHR5cGU7Ci0gICAgICAgIG1HbXRPZmZzID0gZ210b2ZmOwotICAgICAgICBtSXNEc3RzID0gaXNkc3Q7Ci0gICAgICAgIG1Vc2VEc3QgPSBmYWxzZTsKLSAgICAgICAgc2V0SUQobmFtZSk7Ci0KLSAgICAgICAgLy8gRmluZCB0aGUgbGF0ZXN0IEdNVCBhbmQgbm9uLUdNVCBvZmZzZXRzIGZvciB0aGVpciBhYmJyZXZpYXRpb25zCi0KLSAgICAgICAgaW50IGxhc3Rkc3Q7Ci0gICAgICAgIGZvciAobGFzdGRzdCA9IG1UcmFuc2l0aW9ucy5sZW5ndGggLSAxOyBsYXN0ZHN0ID49IDA7IGxhc3Rkc3QtLSkgewotICAgICAgICAgICAgaWYgKG1Jc0RzdHNbbVR5cGVzW2xhc3Rkc3RdICYgMHhGRl0gIT0gMCkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGludCBsYXN0c3RkOwotICAgICAgICBmb3IgKGxhc3RzdGQgPSBtVHJhbnNpdGlvbnMubGVuZ3RoIC0gMTsgbGFzdHN0ZCA+PSAwOyBsYXN0c3RkLS0pIHsKLSAgICAgICAgICAgIGlmIChtSXNEc3RzW21UeXBlc1tsYXN0c3RkXSAmIDB4RkZdID09IDApCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobGFzdGRzdCA+PSAwKSB7Ci0gICAgICAgICAgICBtRGF5bGlnaHROYW1lID0gbnVsbE5hbWUoZGF0YSwgYWJicmV2b2ZmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFiYnJldlttVHlwZXNbbGFzdGRzdF0gJiAweEZGXSk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGxhc3RzdGQgPj0gMCkgewotICAgICAgICAgICAgbVN0YW5kYXJkTmFtZSA9IG51bGxOYW1lKGRhdGEsIGFiYnJldm9mZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYmJyZXZbbVR5cGVzW2xhc3RzdGRdICYgMHhGRl0pOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gVXNlIHRoZSBsYXRlc3Qgbm9uLURTVCBvZmZzZXQgaWYgYW55IGFzIHRoZSByYXcgb2Zmc2V0Ci0KLSAgICAgICAgaWYgKGxhc3RzdGQgPCAwKSB7Ci0gICAgICAgICAgICBsYXN0c3RkID0gMDsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChsYXN0c3RkID49IG1UeXBlcy5sZW5ndGgpIHsKLSAgICAgICAgICAgIG1SYXdPZmZzZXQgPSBtR210T2Zmc1swXTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG1SYXdPZmZzZXQgPSBtR210T2Zmc1ttVHlwZXNbbGFzdHN0ZF0gJiAweEZGXTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFN1YnRyYWN0IHRoZSByYXcgb2Zmc2V0IGZyb20gYWxsIG9mZnNldHMgc28gaXQgY2FuIGJlIGNoYW5nZWQKLSAgICAgICAgLy8gYW5kIGFmZmVjdCB0aGVtIHRvby4KLSAgICAgICAgLy8gRmluZCB3aGV0aGVyIHRoZXJlIGV4aXN0IGFueSBvYnNlcnZhbmNlcyBvZiBEU1QuCi0KLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtR210T2Zmcy5sZW5ndGg7IGkrKykgewotICAgICAgICAgICAgbUdtdE9mZnNbaV0gLT0gbVJhd09mZnNldDsKLQotICAgICAgICAgICAgaWYgKG1Jc0RzdHNbaV0gIT0gMCkgewotICAgICAgICAgICAgICAgIG1Vc2VEc3QgPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgbVJhd09mZnNldCAqPSAxMDAwOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBpbnQgZ2V0T2Zmc2V0KEBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKSBpbnQgZXJhLAotICAgICAgICBpbnQgeWVhciwgaW50IG1vbnRoLCBpbnQgZGF5LAotICAgICAgICBAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikgaW50IGRheU9mV2VlaywKLSAgICAgICAgaW50IG1pbGxpcykgewotICAgICAgICAvLyBYWFggVGhpcyBhc3N1bWVzIEdyZWdvcmlhbiBhbHdheXM7IENhbGVuZGFyIHN3aXRjaGVzIGZyb20KLSAgICAgICAgLy8gSnVsaWFuIHRvIEdyZWdvcmlhbiBpbiAxNTgyLiAgV2hhdCBjYWxlbmRhciBzeXN0ZW0gYXJlIHRoZQotICAgICAgICAvLyBhcmd1bWVudHMgc3VwcG9zZWQgdG8gY29tZSBmcm9tPwotCi0gICAgICAgIGxvbmcgY2FsYyA9ICh5ZWFyIC8gNDAwKSAqIE1JTExJU0VDT05EU19QRVJfNDAwX1lFQVJTOwotICAgICAgICB5ZWFyICU9IDQwMDsKLQotICAgICAgICBjYWxjICs9IHllYXIgKiAoMzY1ICogTUlMTElTRUNPTkRTX1BFUl9EQVkpOwotICAgICAgICBjYWxjICs9ICgoeWVhciArIDMpIC8gNCkgKiBNSUxMSVNFQ09ORFNfUEVSX0RBWTsKLQotICAgICAgICBpZiAoeWVhciA+IDApCi0gICAgICAgICAgICBjYWxjIC09ICgoeWVhciAtIDEpIC8gMTAwKSAqIE1JTExJU0VDT05EU19QRVJfREFZOwotCi0gICAgICAgIGJvb2xlYW4gaXNMZWFwID0gKHllYXIgPT0gMCB8fCAoeWVhciAlIDQgPT0gMCAmJiB5ZWFyICUgMTAwICE9IDApKTsKLSAgICAgICAgaW50W10gbWxlbiA9IGlzTGVhcCA/IExFQVAgOiBOT1JNQUw7Ci0KLSAgICAgICAgY2FsYyArPSBtbGVuW21vbnRoXSAqIE1JTExJU0VDT05EU19QRVJfREFZOwotICAgICAgICBjYWxjICs9IChkYXkgLSAxKSAqIE1JTExJU0VDT05EU19QRVJfREFZOwotICAgICAgICBjYWxjICs9IG1pbGxpczsKLQotICAgICAgICBjYWxjIC09IG1SYXdPZmZzZXQ7Ci0gICAgICAgIGNhbGMgLT0gVU5JWF9PRkZTRVQ7Ci0KLSAgICAgICAgcmV0dXJuIGdldE9mZnNldChjYWxjKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgaW50IGdldE9mZnNldChsb25nIHdoZW4pIHsKLSAgICAgICAgaW50IHVuaXggPSAoaW50KSAod2hlbiAvIDEwMDApOwotICAgICAgICBpbnQgdHJhbnMgPSBBcnJheXMuYmluYXJ5U2VhcmNoKG1UcmFuc2l0aW9ucywgdW5peCk7Ci0KLSAgICAgICAgaWYgKHRyYW5zID09IH4wKSB7Ci0gICAgICAgICAgICByZXR1cm4gbUdtdE9mZnNbMF0gKiAxMDAwICsgbVJhd09mZnNldDsKLSAgICAgICAgfQotICAgICAgICBpZiAodHJhbnMgPCAwKSB7Ci0gICAgICAgICAgICB0cmFucyA9IH50cmFucyAtIDE7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gbUdtdE9mZnNbbVR5cGVzW3RyYW5zXSAmIDB4RkZdICogMTAwMCArIG1SYXdPZmZzZXQ7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGludCBnZXRSYXdPZmZzZXQoKSB7Ci0gICAgICAgIHJldHVybiBtUmF3T2Zmc2V0OwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHNldFJhd09mZnNldChpbnQgb2ZmKSB7Ci0gICAgICAgIG1SYXdPZmZzZXQgPSBvZmY7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGJvb2xlYW4gaW5EYXlsaWdodFRpbWUoRGF0ZSB3aGVuKSB7Ci0gICAgICAgIGludCB1bml4ID0gKGludCkgKHdoZW4uZ2V0VGltZSgpIC8gMTAwMCk7Ci0gICAgICAgIGludCB0cmFucyA9IEFycmF5cy5iaW5hcnlTZWFyY2gobVRyYW5zaXRpb25zLCB1bml4KTsKLQotICAgICAgICBpZiAodHJhbnMgPT0gfjApIHsKLSAgICAgICAgICAgIHJldHVybiBtSXNEc3RzWzBdICE9IDA7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHRyYW5zIDwgMCkgewotICAgICAgICAgICAgdHJhbnMgPSB+dHJhbnMgLSAxOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIG1Jc0RzdHNbbVR5cGVzW3RyYW5zXSAmIDB4RkZdICE9IDA7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGJvb2xlYW4gdXNlRGF5bGlnaHRUaW1lKCkgewotICAgICAgICByZXR1cm4gbVVzZURzdDsKLSAgICB9Ci0KLSAgICBwcml2YXRlIGludCBtUmF3T2Zmc2V0OwotICAgIHByaXZhdGUgaW50W10gbVRyYW5zaXRpb25zOwotICAgIHByaXZhdGUgaW50W10gbUdtdE9mZnM7Ci0gICAgcHJpdmF0ZSBieXRlW10gbVR5cGVzOwotICAgIHByaXZhdGUgYnl0ZVtdIG1Jc0RzdHM7Ci0gICAgcHJpdmF0ZSBib29sZWFuIG1Vc2VEc3Q7Ci0gICAgcHJpdmF0ZSBTdHJpbmcgbURheWxpZ2h0TmFtZTsKLSAgICBwcml2YXRlIFN0cmluZyBtU3RhbmRhcmROYW1lOwotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGJvb2xlYW4gZXF1YWxzKE9iamVjdCBvYmopIHsKLSAgICAgICAgaWYgKHRoaXMgPT0gb2JqKSB7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBpZiAoIShvYmogaW5zdGFuY2VvZiBab25lSW5mbykpIHsKLSAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIFpvbmVJbmZvIG90aGVyID0gKFpvbmVJbmZvKSBvYmo7Ci0gICAgICAgIHJldHVybiBtVXNlRHN0ID09IG90aGVyLm1Vc2VEc3QKLSAgICAgICAgICAgICAgICAmJiAobURheWxpZ2h0TmFtZSA9PSBudWxsID8gb3RoZXIubURheWxpZ2h0TmFtZSA9PSBudWxsIDoKLSAgICAgICAgICAgICAgICAgICAgICAgIG1EYXlsaWdodE5hbWUuZXF1YWxzKG90aGVyLm1EYXlsaWdodE5hbWUpKQotICAgICAgICAgICAgICAgICYmIChtU3RhbmRhcmROYW1lID09IG51bGwgPyBvdGhlci5tU3RhbmRhcmROYW1lID09IG51bGwgOgotICAgICAgICAgICAgICAgICAgICAgICAgbVN0YW5kYXJkTmFtZS5lcXVhbHMob3RoZXIubVN0YW5kYXJkTmFtZSkpCi0gICAgICAgICAgICAgICAgJiYgbVJhd09mZnNldCA9PSBvdGhlci5tUmF3T2Zmc2V0Ci0gICAgICAgICAgICAgICAgLy8gQXJyYXlzLmVxdWFscyByZXR1cm5zIHRydWUgaWYgYm90aCBhcnJheXMgYXJlIG51bGwKLSAgICAgICAgICAgICAgICAmJiBBcnJheXMuZXF1YWxzKG1HbXRPZmZzLCBvdGhlci5tR210T2ZmcykKLSAgICAgICAgICAgICAgICAmJiBBcnJheXMuZXF1YWxzKG1Jc0RzdHMsIG90aGVyLm1Jc0RzdHMpCi0gICAgICAgICAgICAgICAgJiYgQXJyYXlzLmVxdWFscyhtVHlwZXMsIG90aGVyLm1UeXBlcykKLSAgICAgICAgICAgICAgICAmJiBBcnJheXMuZXF1YWxzKG1UcmFuc2l0aW9ucywgb3RoZXIubVRyYW5zaXRpb25zKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgaW50IGhhc2hDb2RlKCkgewotICAgICAgICBmaW5hbCBpbnQgcHJpbWUgPSAzMTsKLSAgICAgICAgaW50IHJlc3VsdCA9IDE7Ci0gICAgICAgIHJlc3VsdCA9IHByaW1lICogcmVzdWx0ICsgKChtRGF5bGlnaHROYW1lID09IG51bGwpID8gMCA6Ci0gICAgICAgICAgICAgICAgbURheWxpZ2h0TmFtZS5oYXNoQ29kZSgpKTsKLSAgICAgICAgcmVzdWx0ID0gcHJpbWUgKiByZXN1bHQgKyBBcnJheXMuaGFzaENvZGUobUdtdE9mZnMpOwotICAgICAgICByZXN1bHQgPSBwcmltZSAqIHJlc3VsdCArIEFycmF5cy5oYXNoQ29kZShtSXNEc3RzKTsKLSAgICAgICAgcmVzdWx0ID0gcHJpbWUgKiByZXN1bHQgKyBtUmF3T2Zmc2V0OwotICAgICAgICByZXN1bHQgPSBwcmltZSAqIHJlc3VsdCArICgobVN0YW5kYXJkTmFtZSA9PSBudWxsKSA/IDAgOgotICAgICAgICAgICAgICAgIG1TdGFuZGFyZE5hbWUuaGFzaENvZGUoKSk7Ci0gICAgICAgIHJlc3VsdCA9IHByaW1lICogcmVzdWx0ICsgQXJyYXlzLmhhc2hDb2RlKG1UcmFuc2l0aW9ucyk7Ci0gICAgICAgIHJlc3VsdCA9IHByaW1lICogcmVzdWx0ICsgQXJyYXlzLmhhc2hDb2RlKG1UeXBlcyk7Ci0gICAgICAgIHJlc3VsdCA9IHByaW1lICogcmVzdWx0ICsgKG1Vc2VEc3QgPyAxMjMxIDogMTIzNyk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvbGliYy90b29scy96b25laW5mby9nZW5lcmF0ZSBiL2xpYmMvdG9vbHMvem9uZWluZm8vZ2VuZXJhdGUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDNlMjFkMGIuLjAwMDAwMDAKLS0tIGEvbGliYy90b29scy96b25laW5mby9nZW5lcmF0ZQorKysgL2Rldi9udWxsCkBAIC0xLDgyICswLDAgQEAKLSMhL2Jpbi9iYXNoCi0jIFJ1biB3aXRoIG5vIGFyZ3VtZW50cyBmcm9tIGFueSBkaXJlY3RvcnksIHdpdGggbm8gc3BlY2lhbCBzZXR1cCByZXF1aXJlZC4KLQotIyBBYm9ydCBpZiBhbnkgY29tbWFuZCByZXR1cm5zIGFuIGVycm9yIGV4aXQgc3RhdHVzLCBvciBpZiBhbiB1bmRlZmluZWQKLSMgdmFyaWFibGUgaXMgdXNlZC4KLXNldCAtZQotc2V0IC11Ci0KLWVjaG8gIkxvb2tpbmcgZm9yIGJpb25pYy4uLiIKLWJpb25pY19kaXI9JChjZCAkKGRpcm5hbWUgJDApLy4uLy4uLy4uICYmIHB3ZCkKLWJpb25pY196b25laW5mb19kaXI9JGJpb25pY19kaXIvbGliYy96b25laW5mbwotYmlvbmljX3pvbmVpbmZvX3Rvb2xzX2Rpcj0kYmlvbmljX2Rpci9saWJjL3Rvb2xzL3pvbmVpbmZvCi1pZiBbWyAhIC1kICIkYmlvbmljX3pvbmVpbmZvX2RpciIgfHwgISAtZCAiJGJpb25pY196b25laW5mb190b29sc19kaXIiIF1dOyB0aGVuCi0gIGVjaG8gIkNhbid0IGZpbmQgYmlvbmljJ3Mgem9uZWluZm8gZGlyZWN0b3JpZXMhIgotICBleGl0IDEKLWZpCi0KLWVjaG8gIlN3aXRjaGluZyB0byB0ZW1wb3JhcnkgZGlyZWN0b3J5Li4uIgotdGVtcF9kaXI9YG1rdGVtcCAtZGAKLWNkICR0ZW1wX2RpcgotdHJhcCAicm0gLXJmICR0ZW1wX2RpcjsgZXhpdCIgSU5UIFRFUk0gRVhJVAotCi0jIFVSTCBmcm9tICJTb3VyY2VzIGZvciBUaW1lIFpvbmUgYW5kIERheWxpZ2h0IFNhdmluZyBUaW1lIERhdGEiCi0jIGh0dHA6Ly93d3cudHdpbnN1bi5jb20vdHovdHotbGluay5odG0KLWVjaG8gIkxvb2tpbmcgZm9yIG5ldyB0emRhdGEuLi4iCi13Z2V0IC1OIC0tbm8tdmVyYm9zZSAnZnRwOi8vbXVubmFyaS5vei5hdS9wdWIvdHpkYXRhKi50YXIuZ3onCi16b25laW5mb192ZXJzaW9uX2ZpbGU9JGJpb25pY196b25laW5mb19kaXIvem9uZWluZm8udmVyc2lvbgotaWYgWyAtZiAiJHpvbmVpbmZvX3ZlcnNpb25fZmlsZSIgXTsgdGhlbgotICBjdXJyZW50X3ZlcnNpb249dHpkYXRhYHNlZCBzL1xuLy8gPCAkem9uZWluZm9fdmVyc2lvbl9maWxlYAotZWxzZQotICBjdXJyZW50X3ZlcnNpb249bWlzc2luZwotZmkKLWxhdGVzdF9hcmNoaXZlPWBscyAtciAtdiB0emRhdGEqLnRhci5neiB8IGhlYWQgLW4xYAotbGF0ZXN0X3ZlcnNpb249YGJhc2VuYW1lICRsYXRlc3RfYXJjaGl2ZSAudGFyLmd6YAotaWYgWyAiJGN1cnJlbnRfdmVyc2lvbiIgPT0gIiRsYXRlc3RfdmVyc2lvbiIgXTsgdGhlbgotICBlY2hvICJZb3UgYWxyZWFkeSBoYXZlIHRoZSBsYXRlc3QgdHpkYXRhICgkbGF0ZXN0X3ZlcnNpb24pISIKLSAgZXhpdCAxCi1maQotCi1tZDVfc3VtPWBtZDVzdW0gJGxhdGVzdF9hcmNoaXZlYAotZWNobyAiTUQ1OiAkbWQ1X3N1bSIKLQotZWNobyAiRXh0cmFjdGluZyAkbGF0ZXN0X3ZlcnNpb24uLi4iCi1ta2RpciAkbGF0ZXN0X3ZlcnNpb24KLXRhciAtQyAkbGF0ZXN0X3ZlcnNpb24gLXp4ZiAkbGF0ZXN0X2FyY2hpdmUKLQotZWNobyAiQ29tcGlsaW5nICRsYXRlc3RfdmVyc2lvbi4uLiIKLW1rZGlyIGRhdGEKLWZvciBpIGluIFwKLSAgICBhZnJpY2EgXAotICAgIGFudGFyY3RpY2EgXAotICAgIGFzaWEgXAotICAgIGF1c3RyYWxhc2lhIFwKLSAgICBldGNldGVyYSBcCi0gICAgZXVyb3BlIFwKLSAgICBmYWN0b3J5IFwKLSAgICBub3J0aGFtZXJpY2EgXAotICAgIHNvbGFyODcgXAotICAgIHNvbGFyODggXAotICAgIHNvbGFyODkgXAotICAgIHNvdXRoYW1lcmljYQotZG8KLSAgICB6aWMgLWQgZGF0YSAkbGF0ZXN0X3ZlcnNpb24vJGkKLWRvbmUKLQotZWNobyAiQ29tcGFjdGluZyAkbGF0ZXN0X3ZlcnNpb24uLi4iCi0oCi0gICAgY2F0ICRsYXRlc3RfdmVyc2lvbi8qIHwgZ3JlcCAnXkxpbmsnIHwgYXdrICd7cHJpbnQgJDEsICQyLCAkM30nCi0gICAgKAotICAgICAgICBjYXQgJGxhdGVzdF92ZXJzaW9uLyogfCBncmVwICdeWm9uZScgfCBhd2sgJ3twcmludCAkMn0nCi0gICAgICAgIGNhdCAkbGF0ZXN0X3ZlcnNpb24vKiB8IGdyZXAgJ15MaW5rJyB8IGF3ayAne3ByaW50ICQzfScKLSAgICApIHwgTENfQUxMPSJDIiBzb3J0Ci0pIHwgZ3JlcCAtdiBSaXlhZGg4ID4gc2V0dXAKLQotamF2YWMgLWQgLiBcCi0gICAgJGJpb25pY196b25laW5mb190b29sc19kaXIvWm9uZUNvbXBhY3Rvci5qYXZhIFwKLSAgICAkYmlvbmljX3pvbmVpbmZvX3Rvb2xzX2Rpci9ab25lSW5mby5qYXZhCi1qYXZhIFpvbmVDb21wYWN0b3Igc2V0dXAgZGF0YQotCi1lY2hvICJVcGRhdGluZyBiaW9uaWMgdG8gJGxhdGVzdF92ZXJzaW9uLi4uIgotbXYgem9uZWluZm8uZGF0IHpvbmVpbmZvLmlkeCAkYmlvbmljX3pvbmVpbmZvX2RpcgotZWNobyAkbGF0ZXN0X3ZlcnNpb24gfCBzZWQgJ3MvdHpkYXRhLy8nID4gJGJpb25pY196b25laW5mb19kaXIvem9uZWluZm8udmVyc2lvbgpkaWZmIC0tZ2l0IGEvbGliYy90b29scy96b25laW5mby91cGRhdGUtdHpkYXRhLnB5IGIvbGliYy90b29scy96b25laW5mby91cGRhdGUtdHpkYXRhLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjg5NTYxMzYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Rvb2xzL3pvbmVpbmZvL3VwZGF0ZS10emRhdGEucHkKQEAgLTAsMCArMSwxODkgQEAKKyMhL3Vzci9iaW4vcHl0aG9uCisKKyIiIlVwZGF0ZXMgdGhlIHR6ZGF0YSBmaWxlLiIiIgorCitpbXBvcnQgZnRwbGliCitpbXBvcnQgaHR0cGxpYgoraW1wb3J0IG9zCitpbXBvcnQgcmUKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgc3lzCitpbXBvcnQgdGFyZmlsZQoraW1wb3J0IHRlbXBmaWxlCisKKyMgRmluZCB0aGUgYmlvbmljIGRpcmVjdG9yeSwgc2VhcmNoaW5nIHVwd2FyZCBmcm9tIHRoaXMgc2NyaXB0LgorYmlvbmljX2xpYmNfdG9vbHNfem9uZWluZm9fZGlyID0gb3MucGF0aC5yZWFscGF0aChvcy5wYXRoLmRpcm5hbWUoc3lzLmFyZ3ZbMF0pKQorYmlvbmljX2xpYmNfdG9vbHNfZGlyID0gb3MucGF0aC5kaXJuYW1lKGJpb25pY19saWJjX3Rvb2xzX3pvbmVpbmZvX2RpcikKK2Jpb25pY19saWJjX2RpciA9IG9zLnBhdGguZGlybmFtZShiaW9uaWNfbGliY190b29sc19kaXIpCitiaW9uaWNfZGlyID0gb3MucGF0aC5kaXJuYW1lKGJpb25pY19saWJjX2RpcikKK2Jpb25pY19saWJjX3pvbmVpbmZvX2RpciA9ICclcy9saWJjL3pvbmVpbmZvJyAlIGJpb25pY19kaXIKKworaWYgbm90IG9zLnBhdGguaXNkaXIoYmlvbmljX2xpYmNfdG9vbHNfem9uZWluZm9fZGlyKToKKyAgcHJpbnQgIkNvdWxkbid0IGZpbmQgYmlvbmljL2xpYmMvdG9vbHMvem9uZWluZm8hIgorICBzeXMuZXhpdCgxKQoraWYgbm90IG9zLnBhdGguaXNkaXIoYmlvbmljX2xpYmNfem9uZWluZm9fZGlyKToKKyAgcHJpbnQgIkNvdWxkbid0IGZpbmQgYmlvbmljL2xpYmMvem9uZWluZm8hIgorICBzeXMuZXhpdCgxKQorCitwcmludCAnRm91bmQgYmlvbmljIGluICVzLi4uJyAlIGJpb25pY19kaXIKKworCityZWdpb25zID0gWydhZnJpY2EnLCAnYW50YXJjdGljYScsICdhc2lhJywgJ2F1c3RyYWxhc2lhJywgJ2JhY2t3YXJkJywKKyAgICAgICAgICAgJ2V0Y2V0ZXJhJywgJ2V1cm9wZScsICdub3J0aGFtZXJpY2EnLCAnc291dGhhbWVyaWNhJ10KKworCitkZWYgR2V0Q3VycmVudFR6RGF0YVZlcnNpb24oKToKKyAgcmV0dXJuIG9wZW4oJyVzL3R6ZGF0YScgJSBiaW9uaWNfbGliY196b25laW5mb19kaXIpLnJlYWQoKS5zcGxpdCgnXHgwMCcsIDEpWzBdCisKKworZGVmIFdyaXRlU2V0dXBGaWxlKCk6CisgICIiIldyaXRlcyB0aGUgbGlzdCBvZiB6b25lcyB0aGF0IFpvbmVDb21wYWN0b3Igc2hvdWxkIHByb2Nlc3MuIiIiCisgIGxpbmtzID0gW10KKyAgem9uZXMgPSBbXQorICBmb3IgcmVnaW9uIGluIHJlZ2lvbnM6CisgICAgZm9yIGxpbmUgaW4gb3BlbignZXh0cmFjdGVkLyVzJyAlIHJlZ2lvbik6CisgICAgICBmaWVsZHMgPSBsaW5lLnNwbGl0KCkKKyAgICAgIGlmIGZpZWxkczoKKyAgICAgICAgaWYgZmllbGRzWzBdID09ICdMaW5rJzoKKyAgICAgICAgICBsaW5rcy5hcHBlbmQoJyVzICVzICVzXG4nICUgKGZpZWxkc1swXSwgZmllbGRzWzFdLCBmaWVsZHNbMl0pKQorICAgICAgICAgIHpvbmVzLmFwcGVuZChmaWVsZHNbMl0pCisgICAgICAgIGVsaWYgZmllbGRzWzBdID09ICdab25lJzoKKyAgICAgICAgICB6b25lcy5hcHBlbmQoZmllbGRzWzFdKQorICB6b25lcy5zb3J0KCkKKworICBzZXR1cCA9IG9wZW4oJ3NldHVwJywgJ3cnKQorICBmb3IgbGluayBpbiBsaW5rczoKKyAgICBzZXR1cC53cml0ZShsaW5rKQorICBmb3Igem9uZSBpbiB6b25lczoKKyAgICBzZXR1cC53cml0ZSgnJXNcbicgJSB6b25lKQorICBzZXR1cC5jbG9zZSgpCisKKworZGVmIFN3aXRjaFRvTmV3VGVtcG9yYXJ5RGlyZWN0b3J5KCk6CisgIHRtcF9kaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKCctdHpkYXRhJykKKyAgb3MuY2hkaXIodG1wX2RpcikKKyAgcHJpbnQgJ0NyZWF0ZWQgdGVtcG9yYXJ5IGRpcmVjdG9yeSAiJXMiLi4uJyAlIHRtcF9kaXIKKworCitkZWYgRnRwUmV0cmlldmUoZnRwLCBmaWxlbmFtZSk6CisgIGZ0cC5yZXRyYmluYXJ5KCdSRVRSICVzJyAlIGZpbGVuYW1lLCBvcGVuKGZpbGVuYW1lLCAnd2InKS53cml0ZSkKKworCitkZWYgRnRwVXBncmFkZShmdHAsIGRhdGFfZmlsZW5hbWUpOgorICAiIiJEb3dubG9hZHMgYW5kIHJlcGFja2FnZXMgdGhlIGdpdmVuIGRhdGEgZnJvbSB0aGUgZ2l2ZW4gRlRQIHNlcnZlci4iIiIKKyAgU3dpdGNoVG9OZXdUZW1wb3JhcnlEaXJlY3RvcnkoKQorCisgIHByaW50ICdEb3dubG9hZGluZyBkYXRhLi4uJworICBGdHBSZXRyaWV2ZShmdHAsIGRhdGFfZmlsZW5hbWUpCisKKyAgcHJpbnQgJ0Rvd25sb2FkaW5nIHNpZ25hdHVyZS4uLicKKyAgc2lnbmF0dXJlX2ZpbGVuYW1lID0gJyVzLmFzYycgJSBkYXRhX2ZpbGVuYW1lCisgIEZ0cFJldHJpZXZlKGZ0cCwgc2lnbmF0dXJlX2ZpbGVuYW1lKQorCisgIEV4dHJhY3RBbmRDb21waWxlKGRhdGFfZmlsZW5hbWUpCisKKworZGVmIEh0dHBSZXRyaWV2ZShodHRwLCBwYXRoLCBvdXRwdXRfZmlsZW5hbWUpOgorICBodHRwLnJlcXVlc3QoIkdFVCIsIHBhdGgpCisgIGYgPSBvcGVuKG91dHB1dF9maWxlbmFtZSwgJ3diJykKKyAgZi53cml0ZShodHRwLmdldHJlc3BvbnNlKCkucmVhZCgpKQorICBmLmNsb3NlKCkKKworCitkZWYgSHR0cFVwZ3JhZGUoaHR0cCwgZGF0YV9maWxlbmFtZSk6CisgICIiIkRvd25sb2FkcyBhbmQgcmVwYWNrYWdlcyB0aGUgZ2l2ZW4gZGF0YSBmcm9tIHRoZSBnaXZlbiBIVFRQIHNlcnZlci4iIiIKKyAgU3dpdGNoVG9OZXdUZW1wb3JhcnlEaXJlY3RvcnkoKQorCisgIHBhdGggPSAiL3RpbWUtem9uZXMvcmVwb3NpdG9yeS9yZWxlYXNlcy8lcyIgJSBkYXRhX2ZpbGVuYW1lCisKKyAgcHJpbnQgJ0Rvd25sb2FkaW5nIGRhdGEuLi4nCisgIEh0dHBSZXRyaWV2ZShodHRwLCBwYXRoLCBkYXRhX2ZpbGVuYW1lKQorCisgIHByaW50ICdEb3dubG9hZGluZyBzaWduYXR1cmUuLi4nCisgIHNpZ25hdHVyZV9maWxlbmFtZSA9ICclcy5hc2MnICUgZGF0YV9maWxlbmFtZQorICBIdHRwUmV0cmlldmUoaHR0cCwgIiVzLmFzYyIgJSBwYXRoLCBzaWduYXR1cmVfZmlsZW5hbWUpCisKKyAgRXh0cmFjdEFuZENvbXBpbGUoZGF0YV9maWxlbmFtZSkKKworCitkZWYgRXh0cmFjdEFuZENvbXBpbGUoZGF0YV9maWxlbmFtZSk6CisgIG5ld192ZXJzaW9uID0gcmUuc2VhcmNoKCcodHpkYXRhLispXFwudGFyXFwuZ3onLCBkYXRhX2ZpbGVuYW1lKS5ncm91cCgxKQorCisgIHNpZ25hdHVyZV9maWxlbmFtZSA9ICclcy5hc2MnICUgZGF0YV9maWxlbmFtZQorICBwcmludCAnVmVyaWZ5aW5nIHNpZ25hdHVyZS4uLicKKyAgIyBJZiB0aGlzIGZhaWxzIGZvciB5b3UsIHlvdSBwcm9iYWJseSBuZWVkIHRvIGltcG9ydCBQYXVsIEVnZ2VydCdzIHB1YmxpYyBrZXk6CisgICMgZ3BnIC0tcmVjdi1rZXlzIEVEOTdFOTBFNjJBQTdFMzQKKyAgc3VicHJvY2Vzcy5jaGVja19jYWxsKFsnZ3BnJywgJy0tdHJ1c3RlZC1rZXk9RUQ5N0U5MEU2MkFBN0UzNCcsICctLXZlcmlmeScsCisgICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmF0dXJlX2ZpbGVuYW1lLCBkYXRhX2ZpbGVuYW1lXSkKKworICBwcmludCAnRXh0cmFjdGluZy4uLicKKyAgb3MubWtkaXIoJ2V4dHJhY3RlZCcpCisgIHRhciA9IHRhcmZpbGUub3BlbihkYXRhX2ZpbGVuYW1lLCAncicpCisgIHRhci5leHRyYWN0YWxsKCdleHRyYWN0ZWQnKQorCisgIHByaW50ICdDYWxsaW5nIHppYygxKS4uLicKKyAgb3MubWtkaXIoJ2RhdGEnKQorICBmb3IgcmVnaW9uIGluIHJlZ2lvbnM6CisgICAgaWYgcmVnaW9uICE9ICdiYWNrd2FyZCc6CisgICAgICBzdWJwcm9jZXNzLmNoZWNrX2NhbGwoWyd6aWMnLCAnLWQnLCAnZGF0YScsICdleHRyYWN0ZWQvJXMnICUgcmVnaW9uXSkKKworICBXcml0ZVNldHVwRmlsZSgpCisKKyAgcHJpbnQgJ0NhbGxpbmcgWm9uZUNvbXBhY3RvciB0byB1cGRhdGUgYmlvbmljIHRvICVzLi4uJyAlIG5ld192ZXJzaW9uCisgIGxpYmNvcmVfc3JjX2RpciA9ICclcy8uLi9saWJjb3JlL2x1bmkvc3JjL21haW4vamF2YS8nICUgYmlvbmljX2RpcgorICBzdWJwcm9jZXNzLmNoZWNrX2NhbGwoWydqYXZhYycsICctZCcsICcuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnJXMvWm9uZUNvbXBhY3Rvci5qYXZhJyAlIGJpb25pY19saWJjX3Rvb2xzX3pvbmVpbmZvX2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnJXMvbGliY29yZS91dGlsL1pvbmVJbmZvLmphdmEnICUgbGliY29yZV9zcmNfZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICclcy9saWJjb3JlL2lvL0J1ZmZlckl0ZXJhdG9yLmphdmEnICUgbGliY29yZV9zcmNfZGlyXSkKKyAgc3VicHJvY2Vzcy5jaGVja19jYWxsKFsnamF2YScsICdab25lQ29tcGFjdG9yJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAnc2V0dXAnLCAnZGF0YScsICdleHRyYWN0ZWQvem9uZS50YWInLAorICAgICAgICAgICAgICAgICAgICAgICAgIGJpb25pY19saWJjX3pvbmVpbmZvX2RpciwgbmV3X3ZlcnNpb25dKQorCisKKyMgUnVuIHdpdGggbm8gYXJndW1lbnRzIGZyb20gYW55IGRpcmVjdG9yeSwgd2l0aCBubyBzcGVjaWFsIHNldHVwIHJlcXVpcmVkLgorIyBTZWUgaHR0cDovL3d3dy5pYW5hLm9yZy90aW1lLXpvbmVzLyBmb3IgbW9yZSBhYm91dCB0aGUgc291cmNlIG9mIHRoaXMgZGF0YS4KK2RlZiBtYWluKCk6CisgIHByaW50ICdMb29raW5nIGZvciBuZXcgdHpkYXRhLi4uJworCisgIHR6ZGF0YV9maWxlbmFtZXMgPSBbXQorCisgICMgVGhlIEZUUCBzZXJ2ZXIgbGV0cyB5b3UgZG93bmxvYWQgaW50ZXJtZWRpYXRlIHJlbGVhc2VzLCBhbmQgYWxzbyBsZXRzIHlvdQorICAjIGRvd25sb2FkIHRoZSBzaWduYXR1cmVzIGZvciB2ZXJpZmljYXRpb24sIHNvIGl0J3MgeW91ciBiZXN0IGNob2ljZS4KKyAgdXNlX2Z0cCA9IFRydWUKKworICBpZiB1c2VfZnRwOgorICAgIGZ0cCA9IGZ0cGxpYi5GVFAoJ2Z0cC5pYW5hLm9yZycpCisgICAgZnRwLmxvZ2luKCkKKyAgICBmdHAuY3dkKCd0ei9yZWxlYXNlcycpCisgICAgZm9yIGZpbGVuYW1lIGluIGZ0cC5ubHN0KCk6CisgICAgICBpZiBmaWxlbmFtZS5zdGFydHN3aXRoKCd0emRhdGEyMCcpIGFuZCBmaWxlbmFtZS5lbmRzd2l0aCgnLnRhci5neicpOgorICAgICAgICB0emRhdGFfZmlsZW5hbWVzLmFwcGVuZChmaWxlbmFtZSkKKyAgICB0emRhdGFfZmlsZW5hbWVzLnNvcnQoKQorICBlbHNlOgorICAgIGh0dHAgPSBodHRwbGliLkhUVFBDb25uZWN0aW9uKCd3d3cuaWFuYS5vcmcnKQorICAgIGh0dHAucmVxdWVzdCgiR0VUIiwgIi90aW1lLXpvbmVzIikKKyAgICBpbmRleF9saW5lcyA9IGh0dHAuZ2V0cmVzcG9uc2UoKS5yZWFkKCkuc3BsaXQoJ1xuJykKKyAgICBmb3IgbGluZSBpbiBpbmRleF9saW5lczoKKyAgICAgIG0gPSByZS5jb21waWxlKCcuKmhyZWY9Ii90aW1lLXpvbmVzL3JlcG9zaXRvcnkvcmVsZWFzZXMvKHR6ZGF0YTIwXGRcZFxjXC50YXJcLmd6KSIuKicpLm1hdGNoKGxpbmUpCisgICAgICBpZiBtOgorICAgICAgICB0emRhdGFfZmlsZW5hbWVzLmFwcGVuZChtLmdyb3VwKDEpKQorCisgICMgSWYgeW91J3JlIHNldmVyYWwgcmVsZWFzZXMgYmVoaW5kLCB3ZSdsbCB3YWxrIHlvdSB0aHJvdWdoIHRoZSB1cGdyYWRlcworICAjIG9uZSBieSBvbmUuCisgIGN1cnJlbnRfdmVyc2lvbiA9IEdldEN1cnJlbnRUekRhdGFWZXJzaW9uKCkKKyAgY3VycmVudF9maWxlbmFtZSA9ICclcy50YXIuZ3onICUgY3VycmVudF92ZXJzaW9uCisgIGZvciBmaWxlbmFtZSBpbiB0emRhdGFfZmlsZW5hbWVzOgorICAgIGlmIGZpbGVuYW1lID4gY3VycmVudF9maWxlbmFtZToKKyAgICAgIHByaW50ICdGb3VuZCBuZXcgdHpkYXRhOiAlcycgJSBmaWxlbmFtZQorICAgICAgaWYgdXNlX2Z0cDoKKyAgICAgICAgRnRwVXBncmFkZShmdHAsIGZpbGVuYW1lKQorICAgICAgZWxzZToKKyAgICAgICAgSHR0cFVwZ3JhZGUoaHR0cCwgZmlsZW5hbWUpCisgICAgICBzeXMuZXhpdCgwKQorCisgIHByaW50ICdZb3UgYWxyZWFkeSBoYXZlIHRoZSBsYXRlc3QgdHpkYXRhICglcykhJyAlIGN1cnJlbnRfdmVyc2lvbgorICBzeXMuZXhpdCgwKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgIG1haW4oKQpkaWZmIC0tZ2l0IGEvbGliYy90emNvZGUvYXNjdGltZS5jIGIvbGliYy90emNvZGUvYXNjdGltZS5jCmluZGV4IDIyYmJhMzQuLjE1MmIwZGIgMTAwNjQ0Ci0tLSBhL2xpYmMvdHpjb2RlL2FzY3RpbWUuYworKysgYi9saWJjL3R6Y29kZS9hc2N0aW1lLmMKQEAgLTksMTIgKzksNiBAQAogKiogd2hlcmVhcyB0aGUgb3V0cHV0IG9mIGFzY3RpbWUgaXMgc3VwcG9zZWQgdG8gYmUgY29uc3RhbnQuCiAqLwogCi0jaWZuZGVmIGxpbnQKLSNpZm5kZWYgTk9JRAotc3RhdGljIGNoYXIgZWxzaWVpZFtdID0gIkAoIylhc2N0aW1lLmMgIDguMiI7Ci0jZW5kaWYgLyogIWRlZmluZWQgTk9JRCAqLwotI2VuZGlmIC8qICFkZWZpbmVkIGxpbnQgKi8KLQogLypMSU5UTElCUkFSWSovCiAKICNpbmNsdWRlICJwcml2YXRlLmgiCkBAIC0zOSw5ICszMyw5IEBACiAqKiBidXQgbWFueSBpbXBsZW1lbnRhdGlvbnMgcGFkIGFueXdheTsgbW9zdCBsaWtlbHkgdGhlIHN0YW5kYXJkcyBhcmUgYnVnZ3kuCiAqLwogI2lmZGVmIF9fR05VQ19fCi0jZGVmaW5lIEFTQ1RJTUVfRk1UICIlLjNzICUuM3MlM2QgJTIuMmQ6JTIuMmQ6JTIuMmQgJS00c1xuIgorI2RlZmluZSBBU0NUSU1FX0ZNVAkiJS4zcyAlLjNzJTNkICUyLjJkOiUyLjJkOiUyLjJkICUtNHNcbiIKICNlbHNlIC8qICFkZWZpbmVkIF9fR05VQ19fICovCi0jZGVmaW5lIEFTQ1RJTUVfRk1UICIlLjNzICUuM3MlM2QgJTAyLjJkOiUwMi4yZDolMDIuMmQgJS00c1xuIgorI2RlZmluZSBBU0NUSU1FX0ZNVAkiJS4zcyAlLjNzJTNkICUwMi4yZDolMDIuMmQ6JTAyLjJkICUtNHNcbiIKICNlbmRpZiAvKiAhZGVmaW5lZCBfX0dOVUNfXyAqLwogLyoKICoqIEZvciB5ZWFycyB0aGF0IGFyZSBtb3JlIHRoYW4gZm91ciBkaWdpdHMgd2UgcHV0IGV4dHJhIHNwYWNlcyBiZWZvcmUgdGhlIHllYXIKQEAgLTUwLDEyICs0NCwxMiBAQAogKiogdGhhdCBubyBvdXRwdXQgaXMgYmV0dGVyIHRoYW4gd3Jvbmcgb3V0cHV0KS4KICovCiAjaWZkZWYgX19HTlVDX18KLSNkZWZpbmUgQVNDVElNRV9GTVRfQiAgICIlLjNzICUuM3MlM2QgJTIuMmQ6JTIuMmQ6JTIuMmQgICAgICVzXG4iCisjZGVmaW5lIEFTQ1RJTUVfRk1UX0IJIiUuM3MgJS4zcyUzZCAlMi4yZDolMi4yZDolMi4yZCAgICAgJXNcbiIKICNlbHNlIC8qICFkZWZpbmVkIF9fR05VQ19fICovCi0jZGVmaW5lIEFTQ1RJTUVfRk1UX0IgICAiJS4zcyAlLjNzJTNkICUwMi4yZDolMDIuMmQ6JTAyLjJkICAgICAlc1xuIgorI2RlZmluZSBBU0NUSU1FX0ZNVF9CCSIlLjNzICUuM3MlM2QgJTAyLjJkOiUwMi4yZDolMDIuMmQgICAgICVzXG4iCiAjZW5kaWYgLyogIWRlZmluZWQgX19HTlVDX18gKi8KIAotI2RlZmluZSBTVERfQVNDVElNRV9CVUZfU0laRSAgICAyNgorI2RlZmluZSBTVERfQVNDVElNRV9CVUZfU0laRQkyNgogLyoKICoqIEJpZyBlbm91Z2ggZm9yIHNvbWV0aGluZyBzdWNoIGFzCiAqKiA/Pz8gPz8/LTIxNDc0ODM2NDggLTIxNDc0ODM2NDg6LTIxNDc0ODM2NDg6LTIxNDc0ODM2NDggICAgIC0yMTQ3NDgzNjQ4XG4KQEAgLTY2LDY0ICs2MCw2NSBAQAogKiogYXMgYW4gZXhhbXBsZTsgdGhlIGRlZmluZSBiZWxvdyBjYWxjdWxhdGVzIHRoZSBtYXhpbXVtIGZvciB0aGUgc3lzdGVtIGF0CiAqKiBoYW5kLgogKi8KLSNkZWZpbmUgTUFYX0FTQ1RJTUVfQlVGX1NJWkUgICAgKDIqMys1KklOVF9TVFJMRU5fTUFYSU1VTShpbnQpKzcrMisxKzEpCisjZGVmaW5lIE1BWF9BU0NUSU1FX0JVRl9TSVpFCSgyKjMrNSpJTlRfU1RSTEVOX01BWElNVU0oaW50KSs3KzIrMSsxKQogCi1zdGF0aWMgY2hhciBidWZfYXNjdGltZVtNQVhfQVNDVElNRV9CVUZfU0laRV07CitzdGF0aWMgY2hhcglidWZfYXNjdGltZVtNQVhfQVNDVElNRV9CVUZfU0laRV07CiAKIC8qCiAqKiBBIGxhIElTTy9JRUMgOTk0NS0xLCBBTlNJL0lFRUUgU3RkIDEwMDMuMSwgMjAwNCBFZGl0aW9uLgogKi8KIAogY2hhciAqCi1hc2N0aW1lX3IodGltZXB0ciwgYnVmKQotcmVnaXN0ZXIgY29uc3Qgc3RydWN0IHRtICogIHRpbWVwdHI7Ci1jaGFyICogICAgICAgICAgICAgIGJ1ZjsKK2FzY3RpbWVfcihyZWdpc3RlciBjb25zdCBzdHJ1Y3QgdG0gKnRpbWVwdHIsIGNoYXIgKmJ1ZikKIHsKLSAgICBzdGF0aWMgY29uc3QgY2hhciAgIHdkYXlfbmFtZVtdWzNdID0gewotICAgICAgICAiU3VuIiwgIk1vbiIsICJUdWUiLCAiV2VkIiwgIlRodSIsICJGcmkiLCAiU2F0IgotICAgIH07Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIgICBtb25fbmFtZVtdWzNdID0gewotICAgICAgICAiSmFuIiwgIkZlYiIsICJNYXIiLCAiQXByIiwgIk1heSIsICJKdW4iLAotICAgICAgICAiSnVsIiwgIkF1ZyIsICJTZXAiLCAiT2N0IiwgIk5vdiIsICJEZWMiCi0gICAgfTsKLSAgICByZWdpc3RlciBjb25zdCBjaGFyICogICB3bjsKLSAgICByZWdpc3RlciBjb25zdCBjaGFyICogICBtbjsKLSAgICBjaGFyICAgICAgICAgICAgeWVhcltJTlRfU1RSTEVOX01BWElNVU0oaW50KSArIDJdOwotICAgIGNoYXIgICAgICAgICAgICByZXN1bHRbTUFYX0FTQ1RJTUVfQlVGX1NJWkVdOworCXN0YXRpYyBjb25zdCBjaGFyCXdkYXlfbmFtZVtdWzNdID0geworCQkiU3VuIiwgIk1vbiIsICJUdWUiLCAiV2VkIiwgIlRodSIsICJGcmkiLCAiU2F0IgorCX07CisJc3RhdGljIGNvbnN0IGNoYXIJbW9uX25hbWVbXVszXSA9IHsKKwkJIkphbiIsICJGZWIiLCAiTWFyIiwgIkFwciIsICJNYXkiLCAiSnVuIiwKKwkJIkp1bCIsICJBdWciLCAiU2VwIiwgIk9jdCIsICJOb3YiLCAiRGVjIgorCX07CisJcmVnaXN0ZXIgY29uc3QgY2hhciAqCXduOworCXJlZ2lzdGVyIGNvbnN0IGNoYXIgKgltbjsKKwljaGFyCQkJeWVhcltJTlRfU1RSTEVOX01BWElNVU0oaW50KSArIDJdOworCWNoYXIJCQlyZXN1bHRbTUFYX0FTQ1RJTUVfQlVGX1NJWkVdOwogCi0gICAgaWYgKHRpbWVwdHItPnRtX3dkYXkgPCAwIHx8IHRpbWVwdHItPnRtX3dkYXkgPj0gREFZU1BFUldFRUspCi0gICAgICAgIHduID0gIj8/PyI7Ci0gICAgZWxzZSAgICB3biA9IHdkYXlfbmFtZVt0aW1lcHRyLT50bV93ZGF5XTsKLSAgICBpZiAodGltZXB0ci0+dG1fbW9uIDwgMCB8fCB0aW1lcHRyLT50bV9tb24gPj0gTU9OU1BFUllFQVIpCi0gICAgICAgIG1uID0gIj8/PyI7Ci0gICAgZWxzZSAgICBtbiA9IG1vbl9uYW1lW3RpbWVwdHItPnRtX21vbl07Ci0gICAgLyoKLSAgICAqKiBVc2Ugc3RyZnRpbWUncyAlWSB0byBnZW5lcmF0ZSB0aGUgeWVhciwgdG8gYXZvaWQgb3ZlcmZsb3cgcHJvYmxlbXMKLSAgICAqKiB3aGVuIGNvbXB1dGluZyB0aW1lcHRyLT50bV95ZWFyICsgVE1fWUVBUl9CQVNFLgotICAgICoqIEFzc3VtZSB0aGF0IHN0cmZ0aW1lIGlzIHVuYWZmZWN0ZWQgYnkgb3RoZXIgb3V0LW9mLXJhbmdlIG1lbWJlcnMKLSAgICAqKiAoZS5nLiwgdGltZXB0ci0+dG1fbWRheSkgd2hlbiBwcm9jZXNzaW5nICIlWSIuCi0gICAgKi8KLSAgICAodm9pZCkgc3RyZnRpbWUoeWVhciwgc2l6ZW9mIHllYXIsICIlWSIsIHRpbWVwdHIpOwotICAgIC8qCi0gICAgKiogV2UgYXZvaWQgdXNpbmcgc25wcmludGYgc2luY2UgaXQncyBub3QgYXZhaWxhYmxlIG9uIGFsbCBzeXN0ZW1zLgotICAgICovCi0gICAgKHZvaWQpIHNwcmludGYocmVzdWx0LAotICAgICAgICAoKHN0cmxlbih5ZWFyKSA8PSA0KSA/IEFTQ1RJTUVfRk1UIDogQVNDVElNRV9GTVRfQiksCi0gICAgICAgIHduLCBtbiwKLSAgICAgICAgdGltZXB0ci0+dG1fbWRheSwgdGltZXB0ci0+dG1faG91ciwKLSAgICAgICAgdGltZXB0ci0+dG1fbWluLCB0aW1lcHRyLT50bV9zZWMsCi0gICAgICAgIHllYXIpOwotICAgIGlmIChzdHJsZW4ocmVzdWx0KSA8IFNURF9BU0NUSU1FX0JVRl9TSVpFIHx8IGJ1ZiA9PSBidWZfYXNjdGltZSkgewotICAgICAgICAodm9pZCkgc3RyY3B5KGJ1ZiwgcmVzdWx0KTsKLSAgICAgICAgcmV0dXJuIGJ1ZjsKLSAgICB9IGVsc2UgeworCWlmICh0aW1lcHRyID09IE5VTEwpIHsKKwkJZXJybm8gPSBFSU5WQUw7CisJCXJldHVybiBzdHJjcHkoYnVmLCAiPz8/ID8/PyA/PyA/Pzo/Pzo/PyA/Pz8/XG4iKTsKKwl9CisJaWYgKHRpbWVwdHItPnRtX3dkYXkgPCAwIHx8IHRpbWVwdHItPnRtX3dkYXkgPj0gREFZU1BFUldFRUspCisJCXduID0gIj8/PyI7CisJZWxzZQl3biA9IHdkYXlfbmFtZVt0aW1lcHRyLT50bV93ZGF5XTsKKwlpZiAodGltZXB0ci0+dG1fbW9uIDwgMCB8fCB0aW1lcHRyLT50bV9tb24gPj0gTU9OU1BFUllFQVIpCisJCW1uID0gIj8/PyI7CisJZWxzZQltbiA9IG1vbl9uYW1lW3RpbWVwdHItPnRtX21vbl07CisJLyoKKwkqKiBVc2Ugc3RyZnRpbWUncyAlWSB0byBnZW5lcmF0ZSB0aGUgeWVhciwgdG8gYXZvaWQgb3ZlcmZsb3cgcHJvYmxlbXMKKwkqKiB3aGVuIGNvbXB1dGluZyB0aW1lcHRyLT50bV95ZWFyICsgVE1fWUVBUl9CQVNFLgorCSoqIEFzc3VtZSB0aGF0IHN0cmZ0aW1lIGlzIHVuYWZmZWN0ZWQgYnkgb3RoZXIgb3V0LW9mLXJhbmdlIG1lbWJlcnMKKwkqKiAoZS5nLiwgdGltZXB0ci0+dG1fbWRheSkgd2hlbiBwcm9jZXNzaW5nICIlWSIuCisJKi8KKwkodm9pZCkgc3RyZnRpbWUoeWVhciwgc2l6ZW9mIHllYXIsICIlWSIsIHRpbWVwdHIpOworCS8qCisJKiogV2UgYXZvaWQgdXNpbmcgc25wcmludGYgc2luY2UgaXQncyBub3QgYXZhaWxhYmxlIG9uIGFsbCBzeXN0ZW1zLgorCSovCisJKHZvaWQpIHNwcmludGYocmVzdWx0LAorCQkoKHN0cmxlbih5ZWFyKSA8PSA0KSA/IEFTQ1RJTUVfRk1UIDogQVNDVElNRV9GTVRfQiksCisJCXduLCBtbiwKKwkJdGltZXB0ci0+dG1fbWRheSwgdGltZXB0ci0+dG1faG91ciwKKwkJdGltZXB0ci0+dG1fbWluLCB0aW1lcHRyLT50bV9zZWMsCisJCXllYXIpOworCWlmIChzdHJsZW4ocmVzdWx0KSA8IFNURF9BU0NUSU1FX0JVRl9TSVpFIHx8IGJ1ZiA9PSBidWZfYXNjdGltZSkKKwkJcmV0dXJuIHN0cmNweShidWYsIHJlc3VsdCk7CisJZWxzZSB7CiAjaWZkZWYgRU9WRVJGTE9XCi0gICAgICAgIGVycm5vID0gRU9WRVJGTE9XOworCQllcnJubyA9IEVPVkVSRkxPVzsKICNlbHNlIC8qICFkZWZpbmVkIEVPVkVSRkxPVyAqLwotICAgICAgICBlcnJubyA9IEVJTlZBTDsKKwkJZXJybm8gPSBFSU5WQUw7CiAjZW5kaWYgLyogIWRlZmluZWQgRU9WRVJGTE9XICovCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KKwkJcmV0dXJuIE5VTEw7CisJfQogfQogCiAvKgpAQCAtMTMxLDggKzEyNiw3IEBACiAqLwogCiBjaGFyICoKLWFzY3RpbWUodGltZXB0cikKLXJlZ2lzdGVyIGNvbnN0IHN0cnVjdCB0bSAqICB0aW1lcHRyOworYXNjdGltZShyZWdpc3RlciBjb25zdCBzdHJ1Y3QgdG0gKnRpbWVwdHIpCiB7Ci0gICAgcmV0dXJuIGFzY3RpbWVfcih0aW1lcHRyLCBidWZfYXNjdGltZSk7CisJcmV0dXJuIGFzY3RpbWVfcih0aW1lcHRyLCBidWZfYXNjdGltZSk7CiB9CmRpZmYgLS1naXQgYS9saWJjL3R6Y29kZS9kaWZmdGltZS5jIGIvbGliYy90emNvZGUvZGlmZnRpbWUuYwppbmRleCBmNzU4MWE0Li5mY2QxOGNlIDEwMDY0NAotLS0gYS9saWJjL3R6Y29kZS9kaWZmdGltZS5jCisrKyBiL2xpYmMvdHpjb2RlL2RpZmZ0aW1lLmMKQEAgLTMsNjMgKzMsNTQgQEAKICoqIDE5OTYtMDYtMDUgYnkgQXJ0aHVyIERhdmlkIE9sc29uLgogKi8KIAotI2lmbmRlZiBsaW50Ci0jaWZuZGVmIE5PSUQKLXN0YXRpYyBjaGFyIGVsc2llaWRbXSA9ICJAKCMpZGlmZnRpbWUuYyA4LjEiOwotI2VuZGlmIC8qICFkZWZpbmVkIE5PSUQgKi8KLSNlbmRpZiAvKiAhZGVmaW5lZCBsaW50ICovCi0KIC8qTElOVExJQlJBUlkqLwogCi0jaW5jbHVkZSAicHJpdmF0ZS5oIiAgICAvKiBmb3IgdGltZV90LCBUWVBFX0lOVEVHUkFMLCBhbmQgVFlQRV9TSUdORUQgKi8KKyNpbmNsdWRlICJwcml2YXRlLmgiCS8qIGZvciB0aW1lX3QsIFRZUEVfSU5URUdSQUwsIGFuZCBUWVBFX1NJR05FRCAqLwogCi1kb3VibGUKLWRpZmZ0aW1lKHRpbWUxLCB0aW1lMCkKLWNvbnN0IHRpbWVfdCAgICB0aW1lMTsKLWNvbnN0IHRpbWVfdCAgICB0aW1lMDsKK2RvdWJsZSBBVFRSSUJVVEVfQ09OU1QKK2RpZmZ0aW1lKGNvbnN0IHRpbWVfdCB0aW1lMSwgY29uc3QgdGltZV90IHRpbWUwKQogewotICAgIC8qCi0gICAgKiogSWYgKHNpemVvZiAoZG91YmxlKSA+IHNpemVvZiAodGltZV90KSkgc2ltcGx5IGNvbnZlcnQgYW5kIHN1YnRyYWN0Ci0gICAgKiogKGFzc3VtaW5nIHRoYXQgdGhlIGxhcmdlciB0eXBlIGhhcyBtb3JlIHByZWNpc2lvbikuCi0gICAgKiogVGhpcyBpcyB0aGUgY29tbW9uIHJlYWwtd29ybGQgY2FzZSBjaXJjYSAyMDA0LgotICAgICovCi0gICAgaWYgKHNpemVvZiAoZG91YmxlKSA+IHNpemVvZiAodGltZV90KSkKLSAgICAgICAgcmV0dXJuIChkb3VibGUpIHRpbWUxIC0gKGRvdWJsZSkgdGltZTA7Ci0gICAgaWYgKCFUWVBFX0lOVEVHUkFMKHRpbWVfdCkpIHsKLSAgICAgICAgLyoKLSAgICAgICAgKiogdGltZV90IGlzIGZsb2F0aW5nLgotICAgICAgICAqLwotICAgICAgICByZXR1cm4gdGltZTEgLSB0aW1lMDsKLSAgICB9Ci0gICAgaWYgKCFUWVBFX1NJR05FRCh0aW1lX3QpKSB7Ci0gICAgICAgIC8qCi0gICAgICAgICoqIHRpbWVfdCBpcyBpbnRlZ3JhbCBhbmQgdW5zaWduZWQuCi0gICAgICAgICoqIFRoZSBkaWZmZXJlbmNlIG9mIHR3byB1bnNpZ25lZCB2YWx1ZXMgY2FuJ3Qgb3ZlcmZsb3cKLSAgICAgICAgKiogaWYgdGhlIG1pbnVlbmQgaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHRoZSBzdWJ0cmFoZW5kLgotICAgICAgICAqLwotICAgICAgICBpZiAodGltZTEgPj0gdGltZTApCi0gICAgICAgICAgICByZXR1cm4gdGltZTEgLSB0aW1lMDsKLSAgICAgICAgZWxzZSAgICByZXR1cm4gLSgoZG91YmxlKSAodGltZTAgLSB0aW1lMSkpOwotICAgIH0KLSAgICAvKgotICAgICoqIHRpbWVfdCBpcyBpbnRlZ3JhbCBhbmQgc2lnbmVkLgotICAgICoqIEhhbmRsZSBjYXNlcyB3aGVyZSBib3RoIHRpbWUxIGFuZCB0aW1lMCBoYXZlIHRoZSBzYW1lIHNpZ24KLSAgICAqKiAobWVhbmluZyB0aGF0IHRoZWlyIGRpZmZlcmVuY2UgY2Fubm90IG92ZXJmbG93KS4KLSAgICAqLwotICAgIGlmICgodGltZTEgPCAwKSA9PSAodGltZTAgPCAwKSkKLSAgICAgICAgcmV0dXJuIHRpbWUxIC0gdGltZTA7Ci0gICAgLyoKLSAgICAqKiB0aW1lMSBhbmQgdGltZTAgaGF2ZSBvcHBvc2l0ZSBzaWducy4KLSAgICAqKiBQdW50IGlmIHVuc2lnbmVkIGxvbmcgaXMgdG9vIG5hcnJvdy4KLSAgICAqLwotICAgIGlmIChzaXplb2YgKHVuc2lnbmVkIGxvbmcpIDwgc2l6ZW9mICh0aW1lX3QpKQotICAgICAgICByZXR1cm4gKGRvdWJsZSkgdGltZTEgLSAoZG91YmxlKSB0aW1lMDsKLSAgICAvKgotICAgICoqIFN0YXkgY2FsbS4uLmRlY2VudCBvcHRpbWl6ZXJzIHdpbGwgZWxpbWluYXRlIHRoZSBjb21wbGV4aXR5IGJlbG93LgotICAgICovCi0gICAgaWYgKHRpbWUxID49IDAgLyogJiYgdGltZTAgPCAwICovKQotICAgICAgICByZXR1cm4gKHVuc2lnbmVkIGxvbmcpIHRpbWUxICsKLSAgICAgICAgICAgICh1bnNpZ25lZCBsb25nKSAoLSh0aW1lMCArIDEpKSArIDE7Ci0gICAgcmV0dXJuIC0oZG91YmxlKSAoKHVuc2lnbmVkIGxvbmcpIHRpbWUwICsKLSAgICAgICAgKHVuc2lnbmVkIGxvbmcpICgtKHRpbWUxICsgMSkpICsgMSk7CisJLyoKKwkqKiBJZiAoc2l6ZW9mIChkb3VibGUpID4gc2l6ZW9mICh0aW1lX3QpKSBzaW1wbHkgY29udmVydCBhbmQgc3VidHJhY3QKKwkqKiAoYXNzdW1pbmcgdGhhdCB0aGUgbGFyZ2VyIHR5cGUgaGFzIG1vcmUgcHJlY2lzaW9uKS4KKwkqLworCWlmIChzaXplb2YgKGRvdWJsZSkgPiBzaXplb2YgKHRpbWVfdCkpCisJCXJldHVybiAoZG91YmxlKSB0aW1lMSAtIChkb3VibGUpIHRpbWUwOworCWlmICghVFlQRV9JTlRFR1JBTCh0aW1lX3QpKSB7CisJCS8qCisJCSoqIHRpbWVfdCBpcyBmbG9hdGluZy4KKwkJKi8KKwkJcmV0dXJuIHRpbWUxIC0gdGltZTA7CisJfQorCWlmICghVFlQRV9TSUdORUQodGltZV90KSkgeworCQkvKgorCQkqKiB0aW1lX3QgaXMgaW50ZWdyYWwgYW5kIHVuc2lnbmVkLgorCQkqKiBUaGUgZGlmZmVyZW5jZSBvZiB0d28gdW5zaWduZWQgdmFsdWVzIGNhbid0IG92ZXJmbG93CisJCSoqIGlmIHRoZSBtaW51ZW5kIGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB0aGUgc3VidHJhaGVuZC4KKwkJKi8KKwkJaWYgKHRpbWUxID49IHRpbWUwKQorCQkJcmV0dXJuICAgICAgICAgICAgdGltZTEgLSB0aW1lMDsKKwkJZWxzZQlyZXR1cm4gLShkb3VibGUpICh0aW1lMCAtIHRpbWUxKTsKKwl9CisJLyoKKwkqKiB0aW1lX3QgaXMgaW50ZWdyYWwgYW5kIHNpZ25lZC4KKwkqKiBIYW5kbGUgY2FzZXMgd2hlcmUgYm90aCB0aW1lMSBhbmQgdGltZTAgaGF2ZSB0aGUgc2FtZSBzaWduCisJKiogKG1lYW5pbmcgdGhhdCB0aGVpciBkaWZmZXJlbmNlIGNhbm5vdCBvdmVyZmxvdykuCisJKi8KKwlpZiAoKHRpbWUxIDwgMCkgPT0gKHRpbWUwIDwgMCkpCisJCXJldHVybiB0aW1lMSAtIHRpbWUwOworCS8qCisJKiogdGltZTEgYW5kIHRpbWUwIGhhdmUgb3Bwb3NpdGUgc2lnbnMuCisJKiogUHVudCBpZiB1aW50bWF4X3QgaXMgdG9vIG5hcnJvdy4KKwkqKiBUaGlzIHN1ZmZlcnMgZnJvbSBkb3VibGUgcm91bmRpbmc7IGF0dGVtcHQgdG8gbGVzc2VuIHRoYXQKKwkqKiBieSB1c2luZyBsb25nIGRvdWJsZSB0ZW1wb3Jhcmllcy4KKwkqLworCWlmIChzaXplb2YgKHVpbnRtYXhfdCkgPCBzaXplb2YgKHRpbWVfdCkpCisJCXJldHVybiAobG9uZyBkb3VibGUpIHRpbWUxIC0gKGxvbmcgZG91YmxlKSB0aW1lMDsKKwkvKgorCSoqIFN0YXkgY2FsbS4uLmRlY2VudCBvcHRpbWl6ZXJzIHdpbGwgZWxpbWluYXRlIHRoZSBjb21wbGV4aXR5IGJlbG93LgorCSovCisJaWYgKHRpbWUxID49IDAgLyogJiYgdGltZTAgPCAwICovKQorCQlyZXR1cm4gICAgKHVpbnRtYXhfdCkgdGltZTEgKyAodWludG1heF90KSAoLTEgLSB0aW1lMCkgKyAxOworCXJldHVybiAtKGRvdWJsZSkgKCh1aW50bWF4X3QpIHRpbWUwICsgKHVpbnRtYXhfdCkgKC0xIC0gdGltZTEpICsgMSk7CiB9CmRpZmYgLS1naXQgYS9saWJjL3R6Y29kZS9sb2NhbHRpbWUuYyBiL2xpYmMvdHpjb2RlL2xvY2FsdGltZS5jCmluZGV4IGU0NDJhMDMuLmQxYjQ5ZTUgMTAwNjQ0Ci0tLSBhL2xpYmMvdHpjb2RlL2xvY2FsdGltZS5jCisrKyBiL2xpYmMvdHpjb2RlL2xvY2FsdGltZS5jCkBAIC0zLDEyICszLDYgQEAKICoqIDE5OTYtMDYtMDUgYnkgQXJ0aHVyIERhdmlkIE9sc29uLgogKi8KIAotI2lmbmRlZiBsaW50Ci0jaWZuZGVmIE5PSUQKLXN0YXRpYyBjaGFyIGVsc2llaWRbXSA9ICJAKCMpbG9jYWx0aW1lLmMgICAgOC4zIjsKLSNlbmRpZiAvKiAhZGVmaW5lZCBOT0lEICovCi0jZW5kaWYgLyogIWRlZmluZWQgbGludCAqLwotCiAvKgogKiogTGVhcCBzZWNvbmQgaGFuZGxpbmcgZnJvbSBCcmFkbGV5IFdoaXRlLgogKiogUE9TSVgtc3R5bGUgVFogZW52aXJvbm1lbnQgdmFyaWFibGUgaGFuZGxpbmcgZnJvbSBHdXkgSGFycmlzLgpAQCAtMjEsOSArMTUsNiBAQAogI2luY2x1ZGUgImZjbnRsLmgiCiAjaW5jbHVkZSAiZmxvYXQuaCIgIC8qIGZvciBGTFRfTUFYIGFuZCBEQkxfTUFYICovCiAKLSNpbmNsdWRlICJ0aHJlYWRfcHJpdmF0ZS5oIgotI2luY2x1ZGUgPHN5cy9zeXN0ZW1fcHJvcGVydGllcy5oPgotCiAjaWZuZGVmIFRaX0FCQlJfTUFYX0xFTgogI2RlZmluZSBUWl9BQkJSX01BWF9MRU4gMTYKICNlbmRpZiAvKiAhZGVmaW5lZCBUWl9BQkJSX01BWF9MRU4gKi8KQEAgLTM3LDEyICsyOCw2IEBACiAjZGVmaW5lIFRaX0FCQlJfRVJSX0NIQVIgICAgJ18nCiAjZW5kaWYgLyogIWRlZmluZWQgVFpfQUJCUl9FUlJfQ0hBUiAqLwogCi0jZGVmaW5lIElOREVYRklMRSAiL3N5c3RlbS91c3Ivc2hhcmUvem9uZWluZm8vem9uZWluZm8uaWR4IgotI2RlZmluZSBEQVRBRklMRSAiL3N5c3RlbS91c3Ivc2hhcmUvem9uZWluZm8vem9uZWluZm8uZGF0IgotI2RlZmluZSBOQU1FTEVOIDQwCi0jZGVmaW5lIElOVExFTiA0Ci0jZGVmaW5lIFJFQURMRU4gKE5BTUVMRU4gKyAzICogSU5UTEVOKQotCiAvKgogKiogU3VuT1MgNC4xLjEgaGVhZGVycyBsYWNrIE9fQklOQVJZLgogKi8KQEAgLTYwLDUzICs0NSwxMiBAQAogIyAgZGVmaW5lICBYTE9HKHgpICAgZG97fXdoaWxlICgwKQogI2VuZGlmCiAKLS8qIEFkZCB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uIGltcGxlbWVudGF0aW9uczoKLSAqICB0aW1lbG9jYWwoKQotICogIHRpbWVnbSgpCi0gKiAgdGltZTJwb3NpeCgpCi0gKiAgcG9zaXgydGltZSgpCi0gKi8KLSNkZWZpbmUgU1REX0lOU1BJUkVEIDEKLQotLyogVEhSRUFELVNBRkVUWSBTVVBQT1JUIEdPRVMgSEVSRSAqLwotc3RhdGljIHB0aHJlYWRfbXV0ZXhfdCAgX3R6TXV0ZXggPSBQVEhSRUFEX01VVEVYX0lOSVRJQUxJWkVSOwotCi1zdGF0aWMgX19pbmxpbmVfXyB2b2lkIF90ekxvY2sodm9pZCkKLXsKLSAgICBpZiAoX19pc3RocmVhZGVkKQotICAgICAgICBwdGhyZWFkX211dGV4X2xvY2soJl90ek11dGV4KTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gdm9pZCBfdHpVbmxvY2sodm9pZCkKLXsKLSAgICBpZiAoX19pc3RocmVhZGVkKQotICAgICAgICBwdGhyZWFkX211dGV4X3VubG9jaygmX3R6TXV0ZXgpOwotfQotCi0vKiBDb21wbGV4IGNvbXB1dGF0aW9ucyB0byBkZXRlcm1pbmUgdGhlIG1pbi9tYXggb2YgdGltZV90IGRlcGVuZGluZwotICogb24gVFlQRV9CSVQgLyBUWVBFX1NJR05FRCAvIFRZUEVfSU5URUdSQUwuCi0gKiBUaGVzZSBtYWNyb3MgY2Fubm90IGJlIHVzZWQgaW4gcHJlLXByb2Nlc3NvciBkaXJlY3RpdmVzLCBzbyB3ZQotICogbGV0IHRoZSBDIGNvbXBpbGVyIGRvIHRoZSB3b3JrLCB3aGljaCBtYWtlcyB0aGluZ3MgYSBiaXQgZnVua3kuCi0gKi8KLXN0YXRpYyBjb25zdCB0aW1lX3QgVElNRV9UX01BWCA9Ci0gICAgVFlQRV9JTlRFR1JBTCh0aW1lX3QpID8KLSAgICAgICAgKCBUWVBFX1NJR05FRCh0aW1lX3QpID8KLSAgICAgICAgICAgIH4oKHRpbWVfdCkxIDw8IChUWVBFX0JJVCh0aW1lX3QpLTEpKQotICAgICAgICA6Ci0gICAgICAgICAgICB+KHRpbWVfdCkwCi0gICAgICAgICkKLSAgICA6IC8qIGlmIHRpbWVfdCBpcyBhIGZsb2F0aW5nIHBvaW50IG51bWJlciAqLwotICAgICAgICAoIHNpemVvZih0aW1lX3QpID4gc2l6ZW9mKGZsb2F0KSA/ICh0aW1lX3QpREJMX01BWCA6ICh0aW1lX3QpRkxUX01BWCApOwotCi1zdGF0aWMgY29uc3QgdGltZV90IFRJTUVfVF9NSU4gPQotICAgIFRZUEVfSU5URUdSQUwodGltZV90KSA/Ci0gICAgICAgICggVFlQRV9TSUdORUQodGltZV90KSA/Ci0gICAgICAgICAgICAoKHRpbWVfdCkxIDw8IChUWVBFX0JJVCh0aW1lX3QpLTEpKQotICAgICAgICA6Ci0gICAgICAgICAgICAwCi0gICAgICAgICkKLSAgICA6Ci0gICAgICAgICggc2l6ZW9mKHRpbWVfdCkgPiBzaXplb2YoZmxvYXQpID8gKHRpbWVfdClEQkxfTUlOIDogKHRpbWVfdClGTFRfTUlOICk7CisvKiBCRUdJTiBhbmRyb2lkLWFkZGVkOiB0aHJlYWQtc2FmZXR5LiAqLworI2luY2x1ZGUgPHB0aHJlYWQuaD4KK3N0YXRpYyBwdGhyZWFkX211dGV4X3QgX3R6TXV0ZXggPSBQVEhSRUFEX01VVEVYX0lOSVRJQUxJWkVSOworc3RhdGljIGlubGluZSB2b2lkIF90ekxvY2sodm9pZCkgeyBwdGhyZWFkX211dGV4X2xvY2soJl90ek11dGV4KTsgfQorc3RhdGljIGlubGluZSB2b2lkIF90elVubG9jayh2b2lkKSB7IHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZfdHpNdXRleCk7IH0KKy8qIEVORCBhbmRyb2lkLWFkZGVkICovCiAKICNpZm5kZWYgV0lMREFCQlIKIC8qCkBAIC0xNDcsMTYgKzkxLDE2IEBACiAjZW5kaWYgLyogIWRlZmluZWQgVFpERUZEU1QgKi8KIAogc3RydWN0IHR0aW5mbyB7ICAgICAgICAgICAgIC8qIHRpbWUgdHlwZSBpbmZvcm1hdGlvbiAqLwotICAgIGxvbmcgICAgdHRfZ210b2ZmOyAgLyogVVRDIG9mZnNldCBpbiBzZWNvbmRzICovCi0gICAgaW50ICAgICB0dF9pc2RzdDsgICAvKiB1c2VkIHRvIHNldCB0bV9pc2RzdCAqLwotICAgIGludCAgICAgdHRfYWJicmluZDsgLyogYWJicmV2aWF0aW9uIGxpc3QgaW5kZXggKi8KLSAgICBpbnQgICAgIHR0X3R0aXNzdGQ7IC8qIFRSVUUgaWYgdHJhbnNpdGlvbiBpcyBzdGQgdGltZSAqLwotICAgIGludCAgICAgdHRfdHRpc2dtdDsgLyogVFJVRSBpZiB0cmFuc2l0aW9uIGlzIFVUQyAqLworICAgIGludF9mYXN0MzJfdCB0dF9nbXRvZmY7ICAvKiBVVEMgb2Zmc2V0IGluIHNlY29uZHMgKi8KKyAgICBpbnQgICAgICAgICAgdHRfaXNkc3Q7ICAgLyogdXNlZCB0byBzZXQgdG1faXNkc3QgKi8KKyAgICBpbnQgICAgICAgICAgdHRfYWJicmluZDsgLyogYWJicmV2aWF0aW9uIGxpc3QgaW5kZXggKi8KKyAgICBpbnQgICAgICAgICAgdHRfdHRpc3N0ZDsgLyogVFJVRSBpZiB0cmFuc2l0aW9uIGlzIHN0ZCB0aW1lICovCisgICAgaW50ICAgICAgICAgIHR0X3R0aXNnbXQ7IC8qIFRSVUUgaWYgdHJhbnNpdGlvbiBpcyBVVEMgKi8KIH07CiAKIHN0cnVjdCBsc2luZm8geyAgICAgICAgICAgICAvKiBsZWFwIHNlY29uZCBpbmZvcm1hdGlvbiAqLwotICAgIHRpbWVfdCAgICAgIGxzX3RyYW5zOyAgIC8qIHRyYW5zaXRpb24gdGltZSAqLwotICAgIGxvbmcgICAgICAgIGxzX2NvcnI7ICAgIC8qIGNvcnJlY3Rpb24gdG8gYXBwbHkgKi8KKyAgICB0aW1lX3QgICAgICAgbHNfdHJhbnM7ICAgLyogdHJhbnNpdGlvbiB0aW1lICovCisgICAgaW50X2Zhc3Q2NF90IGxzX2NvcnI7ICAgIC8qIGNvcnJlY3Rpb24gdG8gYXBwbHkgKi8KIH07CiAKICNkZWZpbmUgQklHR0VTVChhLCBiKSAgICgoKGEpID4gKGIpKSA/IChhKSA6IChiKSkKQEAgLTE2OCwxMCArMTEyLDYgQEAKICNkZWZpbmUgTVlfVFpOQU1FX01BWCAgIDI1NQogI2VuZGlmIC8qICFkZWZpbmVkIFRaTkFNRV9NQVggKi8KIAotLyogWFhYOiBUaGlzIGNvZGUgc2hvdWxkIHJlYWxseSB1c2UgdGltZTY0X3QgaW5zdGVhZCBvZiB0aW1lX3QKLSAqICAgICAgYnV0IHdlIGNhbid0IGNoYW5nZSBpdCB3aXRob3V0IHJlLWdlbmVyYXRpbmcgdGhlIGluZGV4Ci0gKiAgICAgIGZpbGUgZmlyc3Qgd2l0aCB0aGUgY29ycmVjdCBkYXRhLgotICovCiBzdHJ1Y3Qgc3RhdGUgewogICAgIGludCAgICAgbGVhcGNudDsKICAgICBpbnQgICAgIHRpbWVjbnQ7CkBAIC0xODUsMTQgKzEyNSwxNSBAQAogICAgIGNoYXIgICAgICAgIGNoYXJzW0JJR0dFU1QoQklHR0VTVChUWl9NQVhfQ0hBUlMgKyAxLCBzaXplb2YgZ210KSwKICAgICAgICAgICAgICAgICAoMiAqIChNWV9UWk5BTUVfTUFYICsgMSkpKV07CiAgICAgc3RydWN0IGxzaW5mbyAgIGxzaXNbVFpfTUFYX0xFQVBTXTsKKyAgICBpbnQgZGVmYXVsdHR5cGU7IC8qIGZvciBlYXJseSB0aW1lcyBvciBpZiBubyB0cmFuc2l0aW9ucyAqLwogfTsKIAogc3RydWN0IHJ1bGUgewotICAgIGludCAgICAgcl90eXBlOyAgICAgLyogdHlwZSBvZiBydWxlLS1zZWUgYmVsb3cgKi8KLSAgICBpbnQgICAgIHJfZGF5OyAgICAgIC8qIGRheSBudW1iZXIgb2YgcnVsZSAqLwotICAgIGludCAgICAgcl93ZWVrOyAgICAgLyogd2VlayBudW1iZXIgb2YgcnVsZSAqLwotICAgIGludCAgICAgcl9tb247ICAgICAgLyogbW9udGggbnVtYmVyIG9mIHJ1bGUgKi8KLSAgICBsb25nICAgICAgICByX3RpbWU7ICAgICAvKiB0cmFuc2l0aW9uIHRpbWUgb2YgcnVsZSAqLworICAgIGludCAgICAgICAgICByX3R5cGU7ICAgICAvKiB0eXBlIG9mIHJ1bGUtLXNlZSBiZWxvdyAqLworICAgIGludCAgICAgICAgICByX2RheTsgICAgICAvKiBkYXkgbnVtYmVyIG9mIHJ1bGUgKi8KKyAgICBpbnQgICAgICAgICAgcl93ZWVrOyAgICAgLyogd2VlayBudW1iZXIgb2YgcnVsZSAqLworICAgIGludCAgICAgICAgICByX21vbjsgICAgICAvKiBtb250aCBudW1iZXIgb2YgcnVsZSAqLworICAgIGludF9mYXN0MzJfdCByX3RpbWU7ICAgICAvKiB0cmFuc2l0aW9uIHRpbWUgb2YgcnVsZSAqLwogfTsKIAogI2RlZmluZSBKVUxJQU5fREFZICAgICAgMCAgIC8qIEpuIC0gSnVsaWFuIGRheSAqLwpAQCAtMjA1LDUxICsxNDYsNTUgQEAKIAogLyogTk9URTogYWxsIGludGVybmFsIGZ1bmN0aW9ucyBhc3N1bWUgdGhhdCBfdHpMb2NrKCkgd2FzIGFscmVhZHkgY2FsbGVkICovCiAKLXN0YXRpYyBsb25nICAgICBkZXR6Y29kZSBQKChjb25zdCBjaGFyICogY29kZXApKTsKLXN0YXRpYyB0aW1lX3QgICBkZXR6Y29kZTY0IFAoKGNvbnN0IGNoYXIgKiBjb2RlcCkpOwotc3RhdGljIGludCAgICAgIGRpZmZlcl9ieV9yZXBlYXQgUCgodGltZV90IHQxLCB0aW1lX3QgdDApKTsKLXN0YXRpYyBjb25zdCBjaGFyICogZ2V0em5hbWUgUCgoY29uc3QgY2hhciAqIHN0cnApKTsKLXN0YXRpYyBjb25zdCBjaGFyICogZ2V0cXpuYW1lIFAoKGNvbnN0IGNoYXIgKiBzdHJwLCBjb25zdCBpbnQgZGVsaW0pKTsKLXN0YXRpYyBjb25zdCBjaGFyICogZ2V0bnVtIFAoKGNvbnN0IGNoYXIgKiBzdHJwLCBpbnQgKiBudW1wLCBpbnQgbWluLAotICAgICAgICAgICAgICAgIGludCBtYXgpKTsKLXN0YXRpYyBjb25zdCBjaGFyICogZ2V0c2VjcyBQKChjb25zdCBjaGFyICogc3RycCwgbG9uZyAqIHNlY3NwKSk7Ci1zdGF0aWMgY29uc3QgY2hhciAqIGdldG9mZnNldCBQKChjb25zdCBjaGFyICogc3RycCwgbG9uZyAqIG9mZnNldHApKTsKLXN0YXRpYyBjb25zdCBjaGFyICogZ2V0cnVsZSBQKChjb25zdCBjaGFyICogc3RycCwgc3RydWN0IHJ1bGUgKiBydWxlcCkpOwotc3RhdGljIHZvaWQgICAgIGdtdGxvYWQgUCgoc3RydWN0IHN0YXRlICogc3ApKTsKLXN0YXRpYyBzdHJ1Y3QgdG0gKiAgZ210c3ViIFAoKGNvbnN0IHRpbWVfdCAqIHRpbWVwLCBsb25nIG9mZnNldCwKLSAgICAgICAgICAgICAgICBzdHJ1Y3QgdG0gKiB0bXApKTsKLXN0YXRpYyBzdHJ1Y3QgdG0gKiAgbG9jYWxzdWIgUCgoY29uc3QgdGltZV90ICogdGltZXAsIGxvbmcgb2Zmc2V0LAotICAgICAgICAgICAgICAgIHN0cnVjdCB0bSAqIHRtcCkpOwotc3RhdGljIGludCAgICAgIGluY3JlbWVudF9vdmVyZmxvdyBQKChpbnQgKiBudW1iZXIsIGludCBkZWx0YSkpOwotc3RhdGljIGludCAgICAgIGxlYXBzX3RocnVfZW5kX29mIFAoKGludCB5KSk7Ci1zdGF0aWMgaW50ICAgICAgbG9uZ19pbmNyZW1lbnRfb3ZlcmZsb3cgUCgobG9uZyAqIG51bWJlciwgaW50IGRlbHRhKSk7Ci1zdGF0aWMgaW50ICAgICAgbG9uZ19ub3JtYWxpemVfb3ZlcmZsb3cgUCgobG9uZyAqIHRlbnNwdHIsCi0gICAgICAgICAgICAgICAgaW50ICogdW5pdHNwdHIsIGludCBiYXNlKSk7Ci1zdGF0aWMgaW50ICAgICAgbm9ybWFsaXplX292ZXJmbG93IFAoKGludCAqIHRlbnNwdHIsIGludCAqIHVuaXRzcHRyLAotICAgICAgICAgICAgICAgIGludCBiYXNlKSk7Ci1zdGF0aWMgdm9pZCAgICAgc2V0dHpuYW1lIFAoKHZvaWQpKTsKLXN0YXRpYyB0aW1lX3QgICAgICAgdGltZTEgUCgoc3RydWN0IHRtICogdG1wLAotICAgICAgICAgICAgICAgIHN0cnVjdCB0bSAqICgqZnVuY3ApIFAoKGNvbnN0IHRpbWVfdCAqLAotICAgICAgICAgICAgICAgIGxvbmcsIHN0cnVjdCB0bSAqKSksCi0gICAgICAgICAgICAgICAgbG9uZyBvZmZzZXQpKTsKLXN0YXRpYyB0aW1lX3QgICAgICAgdGltZTIgUCgoc3RydWN0IHRtICp0bXAsCi0gICAgICAgICAgICAgICAgc3RydWN0IHRtICogKCpmdW5jcCkgUCgoY29uc3QgdGltZV90ICosCi0gICAgICAgICAgICAgICAgbG9uZywgc3RydWN0IHRtKikpLAotICAgICAgICAgICAgICAgIGxvbmcgb2Zmc2V0LCBpbnQgKiBva2F5cCkpOwotc3RhdGljIHRpbWVfdCAgICAgICB0aW1lMnN1YiBQKChzdHJ1Y3QgdG0gKnRtcCwKLSAgICAgICAgICAgICAgICBzdHJ1Y3QgdG0gKiAoKmZ1bmNwKSBQKChjb25zdCB0aW1lX3QgKiwKLSAgICAgICAgICAgICAgICBsb25nLCBzdHJ1Y3QgdG0qKSksCi0gICAgICAgICAgICAgICAgbG9uZyBvZmZzZXQsIGludCAqIG9rYXlwLCBpbnQgZG9fbm9ybV9zZWNzKSk7Ci1zdGF0aWMgc3RydWN0IHRtICogIHRpbWVzdWIgUCgoY29uc3QgdGltZV90ICogdGltZXAsIGxvbmcgb2Zmc2V0LAotICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBzdGF0ZSAqIHNwLCBzdHJ1Y3QgdG0gKiB0bXApKTsKLXN0YXRpYyBpbnQgICAgICB0bWNvbXAgUCgoY29uc3Qgc3RydWN0IHRtICogYXRtcCwKLSAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgdG0gKiBidG1wKSk7Ci1zdGF0aWMgdGltZV90ICAgICAgIHRyYW5zdGltZSBQKCh0aW1lX3QgamFuZmlyc3QsIGludCB5ZWFyLAotICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBydWxlICogcnVsZXAsIGxvbmcgb2Zmc2V0KSk7Ci1zdGF0aWMgaW50ICAgICAgdHpsb2FkIFAoKGNvbnN0IGNoYXIgKiBuYW1lLCBzdHJ1Y3Qgc3RhdGUgKiBzcCwKLSAgICAgICAgICAgICAgICBpbnQgZG9leHRlbmQpKTsKLXN0YXRpYyBpbnQgICAgICB0enBhcnNlIFAoKGNvbnN0IGNoYXIgKiBuYW1lLCBzdHJ1Y3Qgc3RhdGUgKiBzcCwKLSAgICAgICAgICAgICAgICBpbnQgbGFzdGRpdGNoKSk7CitzdGF0aWMgaW50IF9fYmlvbmljX29wZW5fdHpkYXRhKGNvbnN0IGNoYXIqLCBpbnQqKTsKK3N0YXRpYyBpbnRfZmFzdDMyX3QgZGV0emNvZGUoY29uc3QgY2hhciAqIGNvZGVwKTsKK3N0YXRpYyB0aW1lX3QgICBkZXR6Y29kZTY0KGNvbnN0IGNoYXIgKiBjb2RlcCk7CitzdGF0aWMgaW50ICAgICAgZGlmZmVyX2J5X3JlcGVhdCh0aW1lX3QgdDEsIHRpbWVfdCB0MCk7CitzdGF0aWMgY29uc3QgY2hhciAqIGdldHpuYW1lKGNvbnN0IGNoYXIgKiBzdHJwKSBBVFRSSUJVVEVfUFVSRTsKK3N0YXRpYyBjb25zdCBjaGFyICogZ2V0cXpuYW1lKGNvbnN0IGNoYXIgKiBzdHJwLCBjb25zdCBpbnQgZGVsaW0pCisgICAgICAgIEFUVFJJQlVURV9QVVJFOworc3RhdGljIGNvbnN0IGNoYXIgKiBnZXRudW0oY29uc3QgY2hhciAqIHN0cnAsIGludCAqIG51bXAsIGludCBtaW4sCisgICAgICAgICAgICAgICAgaW50IG1heCk7CitzdGF0aWMgY29uc3QgY2hhciAqIGdldHNlY3MoY29uc3QgY2hhciAqIHN0cnAsIGludF9mYXN0MzJfdCAqIHNlY3NwKTsKK3N0YXRpYyBjb25zdCBjaGFyICogZ2V0b2Zmc2V0KGNvbnN0IGNoYXIgKiBzdHJwLCBpbnRfZmFzdDMyX3QgKiBvZmZzZXRwKTsKK3N0YXRpYyBjb25zdCBjaGFyICogZ2V0cnVsZShjb25zdCBjaGFyICogc3RycCwgc3RydWN0IHJ1bGUgKiBydWxlcCk7CitzdGF0aWMgdm9pZCAgICAgZ210bG9hZChzdHJ1Y3Qgc3RhdGUgKiBzcCk7CitzdGF0aWMgc3RydWN0IHRtICogIGdtdHN1Yihjb25zdCB0aW1lX3QgKiB0aW1lcCwgY29uc3QgaW50X2Zhc3QzMl90IG9mZnNldCwKKyAgICAgICAgICAgICAgICBzdHJ1Y3QgdG0gKiB0bXAsIGNvbnN0IHN0cnVjdCBzdGF0ZSAqIHNwKTsgLy8gYW5kcm9pZC1jaGFuZ2VkOiBhZGRlZCBzcC4KK3N0YXRpYyBzdHJ1Y3QgdG0gKiAgbG9jYWxzdWIoY29uc3QgdGltZV90ICogdGltZXAsIGludF9mYXN0MzJfdCBvZmZzZXQsCisgICAgICAgICAgICAgICAgc3RydWN0IHRtICogdG1wLCBjb25zdCBzdHJ1Y3Qgc3RhdGUgKiBzcCk7IC8vIGFuZHJvaWQtY2hhbmdlZDogYWRkZWQgc3AuCitzdGF0aWMgaW50ICAgICAgaW5jcmVtZW50X292ZXJmbG93KGludCAqIG51bWJlciwgaW50IGRlbHRhKTsKK3N0YXRpYyBpbnQgICAgICBsZWFwc190aHJ1X2VuZF9vZihpbnQgeSkgQVRUUklCVVRFX1BVUkU7CitzdGF0aWMgaW50ICAgICAgaW5jcmVtZW50X292ZXJmbG93MzIoaW50X2Zhc3QzMl90ICogbnVtYmVyLCBpbnQgZGVsdGEpOworc3RhdGljIGludCAgICAgIG5vcm1hbGl6ZV9vdmVyZmxvdzMyKGludF9mYXN0MzJfdCAqIHRlbnNwdHIsCisgICAgICAgICAgICAgICAgaW50ICogdW5pdHNwdHIsIGludCBiYXNlKTsKK3N0YXRpYyBpbnQgICAgICBub3JtYWxpemVfb3ZlcmZsb3coaW50ICogdGVuc3B0ciwgaW50ICogdW5pdHNwdHIsCisgICAgICAgICAgICAgICAgaW50IGJhc2UpOworc3RhdGljIHZvaWQgICAgIHNldHR6bmFtZSh2b2lkKTsKK3N0YXRpYyB0aW1lX3QgICAgICAgdGltZTEoc3RydWN0IHRtICogdG1wLAorICAgICAgICAgICAgICAgIHN0cnVjdCB0bSAqICgqZnVuY3ApKGNvbnN0IHRpbWVfdCAqLAorICAgICAgICAgICAgICAgIGludF9mYXN0MzJfdCwgc3RydWN0IHRtICosIGNvbnN0IHN0cnVjdCBzdGF0ZSAqKSwgLy8gYW5kcm9pZC1jaGFuZ2VkOiBhZGRlZCBzdGF0ZSouCisgICAgICAgICAgICAgICAgaW50X2Zhc3QzMl90IG9mZnNldCwgY29uc3Qgc3RydWN0IHN0YXRlICogc3ApOyAvLyBhbmRyb2lkLWNoYW5nZWQ6IGFkZGVkIHNwLgorc3RhdGljIHRpbWVfdCAgICAgICB0aW1lMihzdHJ1Y3QgdG0gKiBjb25zdCB0bXAsCisgICAgICAgICAgICAgICAgc3RydWN0IHRtICogKCpjb25zdCBmdW5jcCkoY29uc3QgdGltZV90ICosCisgICAgICAgICAgICAgICAgaW50X2Zhc3QzMl90LCBzdHJ1Y3QgdG0qLCBjb25zdCBzdHJ1Y3Qgc3RhdGUgKiksIC8vIGFuZHJvaWQtY2hhbmdlZDogYWRkZWQgc3RhdGUqLgorICAgICAgICAgICAgICAgIGludF9mYXN0MzJfdCBvZmZzZXQsIGludCAqIG9rYXlwLCBjb25zdCBzdHJ1Y3Qgc3RhdGUgKiBzcCk7IC8vIGFuZHJvaWQtY2hhbmdlZDogYWRkZWQgc3AuCitzdGF0aWMgdGltZV90ICAgICAgIHRpbWUyc3ViKHN0cnVjdCB0bSAqdG1wLAorICAgICAgICAgICAgICAgIHN0cnVjdCB0bSAqICgqZnVuY3ApIChjb25zdCB0aW1lX3QgKiwKKyAgICAgICAgICAgICAgICBpbnRfZmFzdDMyX3QsIHN0cnVjdCB0bSosIGNvbnN0IHN0cnVjdCBzdGF0ZSAqKSwgLy8gYW5kcm9pZC1jaGFuZ2VkOiBhZGRlZCBzdGF0ZSouCisgICAgICAgICAgICAgICAgaW50X2Zhc3QzMl90IG9mZnNldCwgaW50ICogb2theXAsIGludCBkb19ub3JtX3NlY3MsIGNvbnN0IHN0cnVjdCBzdGF0ZSAqIHNwKTsgLy8gYW5kcm9pZC1jaGFuZ2U6IGFkZGVkIHNwLgorc3RhdGljIHN0cnVjdCB0bSAqICB0aW1lc3ViKGNvbnN0IHRpbWVfdCAqIHRpbWVwLCBpbnRfZmFzdDMyX3Qgb2Zmc2V0LAorICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBzdGF0ZSAqIHNwLCBzdHJ1Y3QgdG0gKiB0bXApOworc3RhdGljIGludCAgICAgIHRtY29tcChjb25zdCBzdHJ1Y3QgdG0gKiBhdG1wLAorICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCB0bSAqIGJ0bXApOworc3RhdGljIHRpbWVfdCB0cmFuc3RpbWUodGltZV90IGphbmZpcnN0LCBpbnQgeWVhciwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBydWxlICogcnVsZXAsIGludF9mYXN0MzJfdCBvZmZzZXQpCisgICAgICAgIEFUVFJJQlVURV9QVVJFOworc3RhdGljIGludAkJdHlwZXNlcXVpdihjb25zdCBzdHJ1Y3Qgc3RhdGUgKiBzcCwgaW50IGEsIGludCBiKTsKK3N0YXRpYyBpbnQgICAgICB0emxvYWQoY29uc3QgY2hhciAqIG5hbWUsIHN0cnVjdCBzdGF0ZSAqIHNwLAorICAgICAgICAgICAgICAgIGludCBkb2V4dGVuZCk7CitzdGF0aWMgaW50ICAgICAgdHpwYXJzZShjb25zdCBjaGFyICogbmFtZSwgc3RydWN0IHN0YXRlICogc3AsCisgICAgICAgICAgICAgICAgaW50IGxhc3RkaXRjaCk7CiAKICNpZmRlZiBBTExfU1RBVEUKIHN0YXRpYyBzdHJ1Y3Qgc3RhdGUgKiAgIGxjbHB0cjsKQEAgLTI5NSwzNCArMjQwLDMyIEBACiB0aW1lX3QgICAgICAgICAgYWx0em9uZSA9IDA7CiAjZW5kaWYgLyogZGVmaW5lZCBBTFRaT05FICovCiAKLXN0YXRpYyBsb25nCi1kZXR6Y29kZShjb2RlcCkKLWNvbnN0IGNoYXIgKiBjb25zdCAgY29kZXA7CitzdGF0aWMgaW50X2Zhc3QzMl90CitkZXR6Y29kZShjb25zdCBjaGFyICpjb25zdCBjb2RlcCkKIHsKLSAgICByZWdpc3RlciBsb25nICAgcmVzdWx0OwotICAgIHJlZ2lzdGVyIGludCAgICBpOworCXJlZ2lzdGVyIGludF9mYXN0MzJfdAlyZXN1bHQ7CisJcmVnaXN0ZXIgaW50CQlpOwogCi0gICAgcmVzdWx0ID0gKGNvZGVwWzBdICYgMHg4MCkgPyB+MEwgOiAwOwotICAgIGZvciAoaSA9IDA7IGkgPCA0OyArK2kpCi0gICAgICAgIHJlc3VsdCA9IChyZXN1bHQgPDwgOCkgfCAoY29kZXBbaV0gJiAweGZmKTsKLSAgICByZXR1cm4gcmVzdWx0OworCXJlc3VsdCA9IChjb2RlcFswXSAmIDB4ODApID8gLTEgOiAwOworCWZvciAoaSA9IDA7IGkgPCA0OyArK2kpCisJCXJlc3VsdCA9IChyZXN1bHQgPDwgOCkgfCAoY29kZXBbaV0gJiAweGZmKTsKKwlyZXR1cm4gcmVzdWx0OwogfQogCiBzdGF0aWMgdGltZV90Ci1kZXR6Y29kZTY0KGNvZGVwKQotY29uc3QgY2hhciAqIGNvbnN0ICBjb2RlcDsKK2RldHpjb2RlNjQoY29uc3QgY2hhciAqY29uc3QgY29kZXApCiB7Ci0gICAgcmVnaXN0ZXIgdGltZV90IHJlc3VsdDsKLSAgICByZWdpc3RlciBpbnQgICAgaTsKKwlyZWdpc3RlciB0aW1lX3QJcmVzdWx0OworCXJlZ2lzdGVyIGludAlpOwogCi0gICAgcmVzdWx0ID0gKGNvZGVwWzBdICYgMHg4MCkgPyAgKH4oaW50X2Zhc3Q2NF90KSAwKSA6IDA7Ci0gICAgZm9yIChpID0gMDsgaSA8IDg7ICsraSkKLSAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICogMjU2ICsgKGNvZGVwW2ldICYgMHhmZik7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKwlyZXN1bHQgPSAoY29kZXBbMF0gJiAweDgwKSA/ICAofihpbnRfZmFzdDY0X3QpIDApIDogMDsKKwlmb3IgKGkgPSAwOyBpIDwgODsgKytpKQorCQlyZXN1bHQgPSByZXN1bHQgKiAyNTYgKyAoY29kZXBbaV0gJiAweGZmKTsKKwlyZXR1cm4gcmVzdWx0OwogfQogCiBzdGF0aWMgdm9pZAotc2V0dHpuYW1lIFAoKHZvaWQpKQorc2V0dHpuYW1lKHZvaWQpCiB7CiAgICAgcmVnaXN0ZXIgc3RydWN0IHN0YXRlICogY29uc3QgICBzcCA9IGxjbHB0cjsKICAgICByZWdpc3RlciBpbnQgICAgICAgICAgICBpOwpAQCAtMzQyLDI1ICsyODUsMTQgQEAKICAgICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRpZiAvKiBkZWZpbmVkIEFMTF9TVEFURSAqLwotICAgIGZvciAoaSA9IDA7IGkgPCBzcC0+dHlwZWNudDsgKytpKSB7Ci0gICAgICAgIHJlZ2lzdGVyIGNvbnN0IHN0cnVjdCB0dGluZm8gKiBjb25zdCAgICB0dGlzcCA9ICZzcC0+dHRpc1tpXTsKLQotICAgICAgICB0em5hbWVbdHRpc3AtPnR0X2lzZHN0XSA9Ci0gICAgICAgICAgICAmc3AtPmNoYXJzW3R0aXNwLT50dF9hYmJyaW5kXTsKLSNpZmRlZiBVU0dfQ09NUEFUCi0gICAgICAgIGlmICh0dGlzcC0+dHRfaXNkc3QpCi0gICAgICAgICAgICBkYXlsaWdodCA9IDE7Ci0gICAgICAgIGlmIChpID09IDAgfHwgIXR0aXNwLT50dF9pc2RzdCkKLSAgICAgICAgICAgIHRpbWV6b25lID0gLSh0dGlzcC0+dHRfZ210b2ZmKTsKLSNlbmRpZiAvKiBkZWZpbmVkIFVTR19DT01QQVQgKi8KLSNpZmRlZiBBTFRaT05FCi0gICAgICAgIGlmIChpID09IDAgfHwgdHRpc3AtPnR0X2lzZHN0KQotICAgICAgICAgICAgYWx0em9uZSA9IC0odHRpc3AtPnR0X2dtdG9mZik7Ci0jZW5kaWYgLyogZGVmaW5lZCBBTFRaT05FICovCi0gICAgfQogICAgIC8qCiAgICAgKiogQW5kIHRvIGdldCB0aGUgbGF0ZXN0IHpvbmUgbmFtZXMgaW50byB0em5hbWUuIC4gLgogICAgICovCisgICAgZm9yIChpID0gMDsgaSA8IHNwLT50eXBlY250OyArK2kpIHsKKyAgICAgICAgcmVnaXN0ZXIgY29uc3Qgc3RydWN0IHR0aW5mbyAqIGNvbnN0ICAgIHR0aXNwID0gJnNwLT50dGlzW2ldOworCisgICAgICAgIHR6bmFtZVt0dGlzcC0+dHRfaXNkc3RdID0gJnNwLT5jaGFyc1t0dGlzcC0+dHRfYWJicmluZF07CisgICAgfQogICAgIGZvciAoaSA9IDA7IGkgPCBzcC0+dGltZWNudDsgKytpKSB7CiAgICAgICAgIHJlZ2lzdGVyIGNvbnN0IHN0cnVjdCB0dGluZm8gKiBjb25zdCAgICB0dGlzcCA9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNwLT50dGlzWwpAQCAtMzY4LDYgKzMwMCwxNiBAQAogCiAgICAgICAgIHR6bmFtZVt0dGlzcC0+dHRfaXNkc3RdID0KICAgICAgICAgICAgICZzcC0+Y2hhcnNbdHRpc3AtPnR0X2FiYnJpbmRdOworI2lmZGVmIFVTR19DT01QQVQKKyAgICAgICAgaWYgKHR0aXNwLT50dF9pc2RzdCkKKyAgICAgICAgICAgIGRheWxpZ2h0ID0gMTsKKyAgICAgICAgaWYgKCF0dGlzcC0+dHRfaXNkc3QpCisgICAgICAgICAgICB0aW1lem9uZSA9IC0odHRpc3AtPnR0X2dtdG9mZik7CisjZW5kaWYgLyogZGVmaW5lZCBVU0dfQ09NUEFUICovCisjaWZkZWYgQUxUWk9ORQorICAgICAgICBpZiAodHRpc3AtPnR0X2lzZHN0KQorICAgICAgICAgICAgYWx0em9uZSA9IC0odHRpc3AtPnR0X2dtdG9mZik7CisjZW5kaWYgLyogZGVmaW5lZCBBTFRaT05FICovCiAgICAgfQogICAgIC8qCiAgICAgKiogRmluYWxseSwgc2NydWIgdGhlIGFiYnJldmlhdGlvbnMuCkBAIC0zOTAsMTUyICszMzIsNzAgQEAKIH0KIAogc3RhdGljIGludAotZGlmZmVyX2J5X3JlcGVhdCh0MSwgdDApCi1jb25zdCB0aW1lX3QgICAgdDE7Ci1jb25zdCB0aW1lX3QgICAgdDA7CitkaWZmZXJfYnlfcmVwZWF0KGNvbnN0IHRpbWVfdCB0MSwgY29uc3QgdGltZV90IHQwKQogewotICAgIGlmIChUWVBFX0lOVEVHUkFMKHRpbWVfdCkgJiYKLSAgICAgICAgVFlQRV9CSVQodGltZV90KSAtIFRZUEVfU0lHTkVEKHRpbWVfdCkgPCBTRUNTUEVSUkVQRUFUX0JJVFMpCi0gICAgICAgICAgICByZXR1cm4gMDsKLSNpZiBTRUNTUEVSUkVQRUFUX0JJVFMgPD0gMzIgIC8qIHRvIGF2b2lkIGNvbXBpbGVyIHdhcm5pbmcgKGNvbmRpdGlvbiBpcyBhbHdheXMgZmFsc2UpICovCi0gICAgICAgIHJldHVybiAodDEgLSB0MCkgPT0gU0VDU1BFUlJFUEVBVDsKLSNlbHNlCi0gICAgICAgIHJldHVybiAwOwotI2VuZGlmCi19Ci0KLXN0YXRpYyBpbnQgdG9pbnQodW5zaWduZWQgY2hhciAqcykgewotICAgIHJldHVybiAoc1swXSA8PCAyNCkgfCAoc1sxXSA8PCAxNikgfCAoc1syXSA8PCA4KSB8IHNbM107CisJaWYgKFRZUEVfSU5URUdSQUwodGltZV90KSAmJgorCQlUWVBFX0JJVCh0aW1lX3QpIC0gVFlQRV9TSUdORUQodGltZV90KSA8IFNFQ1NQRVJSRVBFQVRfQklUUykKKwkJCXJldHVybiAwOworCXJldHVybiB0MSAtIHQwID09IFNFQ1NQRVJSRVBFQVQ7CiB9CiAKIHN0YXRpYyBpbnQKLXR6bG9hZChuYW1lLCBzcCwgZG9leHRlbmQpCi1yZWdpc3RlciBjb25zdCBjaGFyICogICAgICAgbmFtZTsKLXJlZ2lzdGVyIHN0cnVjdCBzdGF0ZSAqIGNvbnN0ICAgc3A7Ci1yZWdpc3RlciBjb25zdCBpbnQgICAgICBkb2V4dGVuZDsKK3R6bG9hZChyZWdpc3RlciBjb25zdCBjaGFyKiBuYW1lLCByZWdpc3RlciBzdHJ1Y3Qgc3RhdGUqIGNvbnN0IHNwLAorICAgICAgIHJlZ2lzdGVyIGNvbnN0IGludCBkb2V4dGVuZCkKIHsKICAgICByZWdpc3RlciBjb25zdCBjaGFyICogICAgICAgcDsKICAgICByZWdpc3RlciBpbnQgICAgICAgICAgICBpOwogICAgIHJlZ2lzdGVyIGludCAgICAgICAgICAgIGZpZDsKICAgICByZWdpc3RlciBpbnQgICAgICAgICAgICBzdG9yZWQ7CiAgICAgcmVnaXN0ZXIgaW50ICAgICAgICAgICAgbnJlYWQ7Ci0gICAgdW5pb24geworICAgIHR5cGVkZWYgdW5pb24gewogICAgICAgICBzdHJ1Y3QgdHpoZWFkICAgdHpoZWFkOwogICAgICAgICBjaGFyICAgICAgICBidWZbMiAqIHNpemVvZihzdHJ1Y3QgdHpoZWFkKSArCiAgICAgICAgICAgICAgICAgICAgIDIgKiBzaXplb2YgKnNwICsKICAgICAgICAgICAgICAgICAgICAgNCAqIFRaX01BWF9USU1FU107Ci0gICAgfSB1OwotICAgIGludCAgICAgICAgICAgICAgICAgICAgIHRvcmVhZCA9IHNpemVvZiB1LmJ1ZjsKKyAgICB9IHVfdDsKKyNpZmRlZiBBTExfU1RBVEUKKyAgICByZWdpc3RlciB1X3QgKgkJCXVwOwogCi0gICAgICAgIGlmIChuYW1lID09IE5VTEwgJiYgKG5hbWUgPSBUWkRFRkFVTFQpID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBYTE9HKCgidHpsb2FkOiBudWxsICduYW1lJyBwYXJhbWV0ZXJcbiIgKSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICB9Ci0gICAgewotICAgICAgICByZWdpc3RlciBpbnQgICAgZG9hY2Nlc3M7Ci0gICAgICAgIC8qCi0gICAgICAgICoqIFNlY3Rpb24gNC45LjEgb2YgdGhlIEMgc3RhbmRhcmQgc2F5cyB0aGF0Ci0gICAgICAgICoqICJGSUxFTkFNRV9NQVggZXhwYW5kcyB0byBhbiBpbnRlZ3JhbCBjb25zdGFudCBleHByZXNzaW9uCi0gICAgICAgICoqIHRoYXQgaXMgdGhlIHNpemUgbmVlZGVkIGZvciBhbiBhcnJheSBvZiBjaGFyIGxhcmdlIGVub3VnaAotICAgICAgICAqKiB0byBob2xkIHRoZSBsb25nZXN0IGZpbGUgbmFtZSBzdHJpbmcgdGhhdCB0aGUgaW1wbGVtZW50YXRpb24KLSAgICAgICAgKiogZ3VhcmFudGVlcyBjYW4gYmUgb3BlbmVkLiIKLSAgICAgICAgKi8KLSAgICAgICAgY2hhciAgICAgICAgZnVsbG5hbWVbRklMRU5BTUVfTUFYICsgMV07Ci0gICAgICAgIGNoYXIgICAgICAgICpvcmlnbmFtZSA9IChjaGFyKikgbmFtZTsKKyAgICB1cCA9ICh1X3QgKikgY2FsbG9jKDEsIHNpemVvZiAqdXApOworICAgIGlmICh1cCA9PSBOVUxMKQorICAgICAgICByZXR1cm4gLTE7CisjZWxzZSAvKiAhZGVmaW5lZCBBTExfU1RBVEUgKi8KKyAgICB1X3QJCQkJdTsKKyAgICByZWdpc3RlciB1X3QgKiBjb25zdAkJdXAgPSAmdTsKKyNlbmRpZiAvKiAhZGVmaW5lZCBBTExfU1RBVEUgKi8KIAotICAgICAgICBpZiAobmFtZVswXSA9PSAnOicpCi0gICAgICAgICAgICArK25hbWU7Ci0gICAgICAgIGRvYWNjZXNzID0gbmFtZVswXSA9PSAnLyc7Ci0gICAgICAgIGlmICghZG9hY2Nlc3MpIHsKLSAgICAgICAgICAgIGlmICgocCA9IFRaRElSKSA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgWExPRygoInR6bG9hZDogbnVsbCBUWkRJUiBtYWNybyA/XG4iICkpOwotICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICgoc3RybGVuKHApICsgc3RybGVuKG5hbWUpICsgMSkgPj0gc2l6ZW9mIGZ1bGxuYW1lKSB7Ci0gICAgICAgICAgICAgICAgWExPRygoICJ0emxvYWQ6IHBhdGggdG9vIGxvbmc6ICVzLyVzXG4iLCBwLCBuYW1lICkpOwotICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgICh2b2lkKSBzdHJjcHkoZnVsbG5hbWUsIHApOwotICAgICAgICAgICAgKHZvaWQpIHN0cmNhdChmdWxsbmFtZSwgIi8iKTsKLSAgICAgICAgICAgICh2b2lkKSBzdHJjYXQoZnVsbG5hbWUsIG5hbWUpOwotICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICoqIFNldCBkb2FjY2VzcyBpZiAnLicgKGFzIGluICIuLi8iKSBzaG93cyB1cCBpbiBuYW1lLgotICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGlmIChzdHJjaHIobmFtZSwgJy4nKSAhPSBOVUxMKQotICAgICAgICAgICAgICAgIGRvYWNjZXNzID0gVFJVRTsKLSAgICAgICAgICAgIG5hbWUgPSBmdWxsbmFtZTsKLSAgICAgICAgfQotICAgICAgICBpZiAoZG9hY2Nlc3MgJiYgYWNjZXNzKG5hbWUsIFJfT0spICE9IDApIHsKLSAgICAgICAgICAgIFhMT0coKCAidHpsb2FkOiBjb3VsZCBub3QgZmluZCAnJXMnXG4iLCBuYW1lICkpOwotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICB9Ci0gICAgICAgIGlmICgoZmlkID0gb3BlbihuYW1lLCBPUEVOX01PREUpKSA9PSAtMSkgewotICAgICAgICAgICAgY2hhciBidWZbUkVBRExFTl07Ci0gICAgICAgICAgICBjaGFyIG5hbWVbTkFNRUxFTiArIDFdOwotICAgICAgICAgICAgaW50IGZpZGl4ID0gb3BlbihJTkRFWEZJTEUsIE9QRU5fTU9ERSk7Ci0gICAgICAgICAgICBpbnQgb2ZmID0gLTE7Ci0KLSAgICAgICAgICAgIFhMT0coKCAidHpsb2FkOiBjb3VsZCBub3Qgb3BlbiAnJXMnLCB0cnlpbmcgJyVzJ1xuIiwgZnVsbG5hbWUsIElOREVYRklMRSApKTsKLSAgICAgICAgICAgIGlmIChmaWRpeCA8IDApIHsKLSAgICAgICAgICAgICAgICBYTE9HKCggInR6bG9hZDogY291bGQgbm90IGZpbmQgJyVzJ1xuIiwgSU5ERVhGSUxFICkpOwotICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgd2hpbGUgKHJlYWQoZmlkaXgsIGJ1Ziwgc2l6ZW9mKGJ1ZikpID09IHNpemVvZihidWYpKSB7Ci0gICAgICAgICAgICAgICAgbWVtY3B5KG5hbWUsIGJ1ZiwgTkFNRUxFTik7Ci0gICAgICAgICAgICAgICAgbmFtZVtOQU1FTEVOXSA9ICdcMCc7Ci0KLSAgICAgICAgICAgICAgICBpZiAoc3RyY21wKG5hbWUsIG9yaWduYW1lKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIG9mZiA9IHRvaW50KCh1bnNpZ25lZCBjaGFyICopIGJ1ZiArIE5BTUVMRU4pOwotICAgICAgICAgICAgICAgICAgICB0b3JlYWQgPSB0b2ludCgodW5zaWduZWQgY2hhciAqKSBidWYgKyBOQU1FTEVOICsgSU5UTEVOKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBjbG9zZShmaWRpeCk7Ci0KLSAgICAgICAgICAgIGlmIChvZmYgPCAwKSB7Ci0gICAgICAgICAgICAgICAgWExPRygoICJ0emxvYWQ6IGludmFsaWQgb2Zmc2V0ICglZClcbiIsIG9mZiApKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGZpZCA9IG9wZW4oREFUQUZJTEUsIE9QRU5fTU9ERSk7Ci0KLSAgICAgICAgICAgIGlmIChmaWQgPCAwKSB7Ci0gICAgICAgICAgICAgICAgWExPRygoICJ0emxvYWQ6IGNvdWxkIG5vdCBvcGVuICclcydcbiIsIERBVEFGSUxFICkpOwotICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKGxzZWVrKGZpZCwgb2ZmLCBTRUVLX1NFVCkgPCAwKSB7Ci0gICAgICAgICAgICAgICAgWExPRygoICJ0emxvYWQ6IGNvdWxkIG5vdCBzZWVrIHRvICVkIGluICclcydcbiIsIG9mZiwgREFUQUZJTEUgKSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgfQotICAgICAgICB9CisgICAgc3AtPmdvYmFjayA9IHNwLT5nb2FoZWFkID0gRkFMU0U7CisgICAgaWYgKG5hbWUgPT0gTlVMTCAmJiAobmFtZSA9IFRaREVGQVVMVCkgPT0gTlVMTCkKKyAgICAgICAgZ290byBvb3BzOworICAgIGludCB0b3JlYWQ7CisgICAgZmlkID0gX19iaW9uaWNfb3Blbl90emRhdGEobmFtZSwgJnRvcmVhZCk7CisgICAgaWYgKGZpZCA8IDApIHsKKyAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KLSAgICBucmVhZCA9IHJlYWQoZmlkLCB1LmJ1ZiwgdG9yZWFkKTsKLSAgICAgICAgaWYgKGNsb3NlKGZpZCkgPCAwIHx8IG5yZWFkIDw9IDApIHsKLSAgICAgICAgICAgIFhMT0coKCAidHpsb2FkOiBjb3VsZCBub3QgcmVhZCBjb250ZW50IG9mICclcydcbiIsIERBVEFGSUxFICkpOwotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICB9CisgICAgbnJlYWQgPSByZWFkKGZpZCwgdXAtPmJ1ZiwgdG9yZWFkKTsKKyAgICBpZiAoY2xvc2UoZmlkKSA8IDAgfHwgbnJlYWQgPD0gMCkKKyAgICAgICAgZ290byBvb3BzOwogICAgIGZvciAoc3RvcmVkID0gNDsgc3RvcmVkIDw9IDg7IHN0b3JlZCAqPSAyKSB7CiAgICAgICAgIGludCAgICAgdHRpc3N0ZGNudDsKICAgICAgICAgaW50ICAgICB0dGlzZ210Y250OwogCi0gICAgICAgIHR0aXNzdGRjbnQgPSAoaW50KSBkZXR6Y29kZSh1LnR6aGVhZC50emhfdHRpc3N0ZGNudCk7Ci0gICAgICAgIHR0aXNnbXRjbnQgPSAoaW50KSBkZXR6Y29kZSh1LnR6aGVhZC50emhfdHRpc2dtdGNudCk7Ci0gICAgICAgIHNwLT5sZWFwY250ID0gKGludCkgZGV0emNvZGUodS50emhlYWQudHpoX2xlYXBjbnQpOwotICAgICAgICBzcC0+dGltZWNudCA9IChpbnQpIGRldHpjb2RlKHUudHpoZWFkLnR6aF90aW1lY250KTsKLSAgICAgICAgc3AtPnR5cGVjbnQgPSAoaW50KSBkZXR6Y29kZSh1LnR6aGVhZC50emhfdHlwZWNudCk7Ci0gICAgICAgIHNwLT5jaGFyY250ID0gKGludCkgZGV0emNvZGUodS50emhlYWQudHpoX2NoYXJjbnQpOwotICAgICAgICBwID0gdS50emhlYWQudHpoX2NoYXJjbnQgKyBzaXplb2YgdS50emhlYWQudHpoX2NoYXJjbnQ7CisgICAgICAgIHR0aXNzdGRjbnQgPSAoaW50KSBkZXR6Y29kZSh1cC0+dHpoZWFkLnR6aF90dGlzc3RkY250KTsKKyAgICAgICAgdHRpc2dtdGNudCA9IChpbnQpIGRldHpjb2RlKHVwLT50emhlYWQudHpoX3R0aXNnbXRjbnQpOworICAgICAgICBzcC0+bGVhcGNudCA9IChpbnQpIGRldHpjb2RlKHVwLT50emhlYWQudHpoX2xlYXBjbnQpOworICAgICAgICBzcC0+dGltZWNudCA9IChpbnQpIGRldHpjb2RlKHVwLT50emhlYWQudHpoX3RpbWVjbnQpOworICAgICAgICBzcC0+dHlwZWNudCA9IChpbnQpIGRldHpjb2RlKHVwLT50emhlYWQudHpoX3R5cGVjbnQpOworICAgICAgICBzcC0+Y2hhcmNudCA9IChpbnQpIGRldHpjb2RlKHVwLT50emhlYWQudHpoX2NoYXJjbnQpOworICAgICAgICBwID0gdXAtPnR6aGVhZC50emhfY2hhcmNudCArIHNpemVvZiB1cC0+dHpoZWFkLnR6aF9jaGFyY250OwogICAgICAgICBpZiAoc3AtPmxlYXBjbnQgPCAwIHx8IHNwLT5sZWFwY250ID4gVFpfTUFYX0xFQVBTIHx8CiAgICAgICAgICAgICBzcC0+dHlwZWNudCA8PSAwIHx8IHNwLT50eXBlY250ID4gVFpfTUFYX1RZUEVTIHx8CiAgICAgICAgICAgICBzcC0+dGltZWNudCA8IDAgfHwgc3AtPnRpbWVjbnQgPiBUWl9NQVhfVElNRVMgfHwKICAgICAgICAgICAgIHNwLT5jaGFyY250IDwgMCB8fCBzcC0+Y2hhcmNudCA+IFRaX01BWF9DSEFSUyB8fAogICAgICAgICAgICAgKHR0aXNzdGRjbnQgIT0gc3AtPnR5cGVjbnQgJiYgdHRpc3N0ZGNudCAhPSAwKSB8fAogICAgICAgICAgICAgKHR0aXNnbXRjbnQgIT0gc3AtPnR5cGVjbnQgJiYgdHRpc2dtdGNudCAhPSAwKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIGlmIChucmVhZCAtIChwIC0gdS5idWYpIDwKKyAgICAgICAgICAgICAgICBnb3RvIG9vcHM7CisgICAgICAgIGlmIChucmVhZCAtIChwIC0gdXAtPmJ1ZikgPAogICAgICAgICAgICAgc3AtPnRpbWVjbnQgKiBzdG9yZWQgKyAgICAgIC8qIGF0cyAqLwogICAgICAgICAgICAgc3AtPnRpbWVjbnQgKyAgICAgICAgICAgLyogdHlwZXMgKi8KICAgICAgICAgICAgIHNwLT50eXBlY250ICogNiArICAgICAgIC8qIHR0aW5mb3MgKi8KQEAgLTU0Myw3ICs0MDMsNyBAQAogICAgICAgICAgICAgc3AtPmxlYXBjbnQgKiAoc3RvcmVkICsgNCkgKyAgICAvKiBsc2luZm9zICovCiAgICAgICAgICAgICB0dGlzc3RkY250ICsgICAgICAgICAgICAvKiB0dGlzc3RkcyAqLwogICAgICAgICAgICAgdHRpc2dtdGNudCkgICAgICAgICAvKiB0dGlzZ210cyAqLwotICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgICAgICBnb3RvIG9vcHM7CiAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBzcC0+dGltZWNudDsgKytpKSB7CiAgICAgICAgICAgICBzcC0+YXRzW2ldID0gKHN0b3JlZCA9PSA0KSA/CiAgICAgICAgICAgICAgICAgZGV0emNvZGUocCkgOiBkZXR6Y29kZTY0KHApOwpAQCAtNTUyLDcgKzQxMiw3IEBACiAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBzcC0+dGltZWNudDsgKytpKSB7CiAgICAgICAgICAgICBzcC0+dHlwZXNbaV0gPSAodW5zaWduZWQgY2hhcikgKnArKzsKICAgICAgICAgICAgIGlmIChzcC0+dHlwZXNbaV0gPj0gc3AtPnR5cGVjbnQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgICAgIGdvdG8gb29wczsKICAgICAgICAgfQogICAgICAgICBmb3IgKGkgPSAwOyBpIDwgc3AtPnR5cGVjbnQ7ICsraSkgewogICAgICAgICAgICAgcmVnaXN0ZXIgc3RydWN0IHR0aW5mbyAqICAgIHR0aXNwOwpAQCAtNTYyLDExICs0MjIsMTEgQEAKICAgICAgICAgICAgIHAgKz0gNDsKICAgICAgICAgICAgIHR0aXNwLT50dF9pc2RzdCA9ICh1bnNpZ25lZCBjaGFyKSAqcCsrOwogICAgICAgICAgICAgaWYgKHR0aXNwLT50dF9pc2RzdCAhPSAwICYmIHR0aXNwLT50dF9pc2RzdCAhPSAxKQotICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgICAgICBnb3RvIG9vcHM7CiAgICAgICAgICAgICB0dGlzcC0+dHRfYWJicmluZCA9ICh1bnNpZ25lZCBjaGFyKSAqcCsrOwogICAgICAgICAgICAgaWYgKHR0aXNwLT50dF9hYmJyaW5kIDwgMCB8fAogICAgICAgICAgICAgICAgIHR0aXNwLT50dF9hYmJyaW5kID4gc3AtPmNoYXJjbnQpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgICAgICAgICAgZ290byBvb3BzOwogICAgICAgICB9CiAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBzcC0+Y2hhcmNudDsgKytpKQogICAgICAgICAgICAgc3AtPmNoYXJzW2ldID0gKnArKzsKQEAgLTU5MSw3ICs0NTEsNyBAQAogICAgICAgICAgICAgICAgIHR0aXNwLT50dF90dGlzc3RkID0gKnArKzsKICAgICAgICAgICAgICAgICBpZiAodHRpc3AtPnR0X3R0aXNzdGQgIT0gVFJVRSAmJgogICAgICAgICAgICAgICAgICAgICB0dGlzcC0+dHRfdHRpc3N0ZCAhPSBGQUxTRSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gb29wczsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBmb3IgKGkgPSAwOyBpIDwgc3AtPnR5cGVjbnQ7ICsraSkgewpAQCAtNjA0LDcgKzQ2NCw3IEBACiAgICAgICAgICAgICAgICAgdHRpc3AtPnR0X3R0aXNnbXQgPSAqcCsrOwogICAgICAgICAgICAgICAgIGlmICh0dGlzcC0+dHRfdHRpc2dtdCAhPSBUUlVFICYmCiAgICAgICAgICAgICAgICAgICAgIHR0aXNwLT50dF90dGlzZ210ICE9IEZBTFNFKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgICAgICAgICAgICAgZ290byBvb3BzOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIC8qCkBAIC02MTIsMzYgKzQ3Miw0NyBAQAogICAgICAgICAqKiBzaWduZWQgdGltZV90IHN5c3RlbSBidXQgdXNpbmcgYSBkYXRhIGZpbGUgd2l0aAogICAgICAgICAqKiB1bnNpZ25lZCB2YWx1ZXMgKG9yIHZpY2UgdmVyc2EpLgogICAgICAgICAqLwotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgc3AtPnRpbWVjbnQgLSAyOyArK2kpCi0gICAgICAgICAgICBpZiAoc3AtPmF0c1tpXSA+IHNwLT5hdHNbaSArIDFdKSB7Ci0gICAgICAgICAgICAgICAgKytpOwotICAgICAgICAgICAgICAgIGlmIChUWVBFX1NJR05FRCh0aW1lX3QpKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgICAgICAgICoqIElnbm9yZSB0aGUgZW5kIChlYXN5KS4KLSAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICAgICAgc3AtPnRpbWVjbnQgPSBpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgICAgICAgICoqIElnbm9yZSB0aGUgYmVnaW5uaW5nIChoYXJkZXIpLgotICAgICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgICAgICAgICByZWdpc3RlciBpbnQgICAgajsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IHNwLT50aW1lY250OyArK2kpCisgICAgICAgICAgICBpZiAoKGkgPCBzcC0+dGltZWNudCAtIDEgJiYKKyAgICAgICAgICAgICAgICBzcC0+YXRzW2ldID4gc3AtPmF0c1tpICsgMV0pIHx8CisgICAgICAgICAgICAgICAgKGkgPT0gc3AtPnRpbWVjbnQgLSAxICYmICFUWVBFX1NJR05FRCh0aW1lX3QpICYmCisgICAgICAgICAgICAgICAgc3AtPmF0c1tpXSA+CisgICAgICAgICAgICAgICAgKChzdG9yZWQgPT0gNCkgPyBJTlQzMl9NQVggOiBJTlQ2NF9NQVgpKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoVFlQRV9TSUdORUQodGltZV90KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICAgICAgICAgICoqIElnbm9yZSB0aGUgZW5kIChlYXN5KS4KKyAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgICAgICAgICBzcC0+dGltZWNudCA9IGkgKyAxOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICAgICAgICAgICoqIElnbm9yZSB0aGUgYmVnaW5uaW5nIChoYXJkZXIpLgorICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyIGludCAgICBqOwogCi0gICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogKyBpIDwgc3AtPnRpbWVjbnQ7ICsraikgewotICAgICAgICAgICAgICAgICAgICAgICAgc3AtPmF0c1tqXSA9IHNwLT5hdHNbaiArIGldOwotICAgICAgICAgICAgICAgICAgICAgICAgc3AtPnR5cGVzW2pdID0gc3AtPnR5cGVzW2ogKyBpXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgICAgICAgICAqKiBLZWVwIHRoZSByZWNvcmQgcmlnaHQgYmVmb3JlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgKiogZXBvY2ggYm91bmRhcnksCisgICAgICAgICAgICAgICAgICAgICAgICAqKiBidXQgdHdlYWsgaXQgc28gdGhhdCBpdCBzdGFydHMKKyAgICAgICAgICAgICAgICAgICAgICAgICoqIHJpZ2h0IHdpdGggdGhlIGVwb2NoCisgICAgICAgICAgICAgICAgICAgICAgICAqKiAodGhhbmtzIHRvIERvdWcgQmFpbGV5KS4KKyAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgICAgICAgICBzcC0+YXRzW2ldID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogKyBpIDwgc3AtPnRpbWVjbnQ7ICsraikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwLT5hdHNbal0gPSBzcC0+YXRzW2ogKyBpXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcC0+dHlwZXNbal0gPSBzcC0+dHlwZXNbaiArIGldOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgc3AtPnRpbWVjbnQgPSBqOwogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHNwLT50aW1lY250ID0gajsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAvKgogICAgICAgICAqKiBJZiB0aGlzIGlzIGFuIG9sZCBmaWxlLCB3ZSdyZSBkb25lLgogICAgICAgICAqLwotICAgICAgICBpZiAodS50emhlYWQudHpoX3ZlcnNpb25bMF0gPT0gJ1wwJykKKyAgICAgICAgaWYgKHVwLT50emhlYWQudHpoX3ZlcnNpb25bMF0gPT0gJ1wwJykKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBucmVhZCAtPSBwIC0gdS5idWY7CisgICAgICAgIG5yZWFkIC09IHAgLSB1cC0+YnVmOwogICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbnJlYWQ7ICsraSkKLSAgICAgICAgICAgIHUuYnVmW2ldID0gcFtpXTsKKyAgICAgICAgICAgIHVwLT5idWZbaV0gPSBwW2ldOwogICAgICAgICAvKgogICAgICAgICAqKiBJZiB0aGlzIGlzIGEgbmFycm93IGludGVnZXIgdGltZV90IHN5c3RlbSwgd2UncmUgZG9uZS4KICAgICAgICAgKi8KQEAgLTY0OSwxMyArNTIwLDEzIEBACiAgICAgICAgICAgICBicmVhazsKICAgICB9CiAgICAgaWYgKGRvZXh0ZW5kICYmIG5yZWFkID4gMiAmJgotICAgICAgICB1LmJ1ZlswXSA9PSAnXG4nICYmIHUuYnVmW25yZWFkIC0gMV0gPT0gJ1xuJyAmJgorICAgICAgICB1cC0+YnVmWzBdID09ICdcbicgJiYgdXAtPmJ1ZltucmVhZCAtIDFdID09ICdcbicgJiYKICAgICAgICAgc3AtPnR5cGVjbnQgKyAyIDw9IFRaX01BWF9UWVBFUykgewogICAgICAgICAgICAgc3RydWN0IHN0YXRlICAgIHRzOwogICAgICAgICAgICAgcmVnaXN0ZXIgaW50ICAgIHJlc3VsdDsKIAotICAgICAgICAgICAgdS5idWZbbnJlYWQgLSAxXSA9ICdcMCc7Ci0gICAgICAgICAgICByZXN1bHQgPSB0enBhcnNlKCZ1LmJ1ZlsxXSwgJnRzLCBGQUxTRSk7CisgICAgICAgICAgICB1cC0+YnVmW25yZWFkIC0gMV0gPSAnXDAnOworICAgICAgICAgICAgcmVzdWx0ID0gdHpwYXJzZSgmdXAtPmJ1ZlsxXSwgJnRzLCBGQUxTRSk7CiAgICAgICAgICAgICBpZiAocmVzdWx0ID09IDAgJiYgdHMudHlwZWNudCA9PSAyICYmCiAgICAgICAgICAgICAgICAgc3AtPmNoYXJjbnQgKyB0cy5jaGFyY250IDw9IFRaX01BWF9DSEFSUykgewogICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMjsgKytpKQpAQCAtNjgzLDE2ICs1NTQsODcgQEAKICAgICAgICAgICAgICAgICAgICAgc3AtPnR0aXNbc3AtPnR5cGVjbnQrK10gPSB0cy50dGlzWzFdOwogICAgICAgICAgICAgfQogICAgIH0KLSAgICBpID0gMiAqIFlFQVJTUEVSUkVQRUFUOwotICAgIHNwLT5nb2JhY2sgPSBzcC0+Z29haGVhZCA9IHNwLT50aW1lY250ID4gaTsKLSAgICBzcC0+Z29iYWNrICY9IHNwLT50eXBlc1tpXSA9PSBzcC0+dHlwZXNbMF0gJiYKLSAgICAgICAgZGlmZmVyX2J5X3JlcGVhdChzcC0+YXRzW2ldLCBzcC0+YXRzWzBdKTsKLSAgICBzcC0+Z29haGVhZCAmPQotICAgICAgICBzcC0+dHlwZXNbc3AtPnRpbWVjbnQgLSAxXSA9PSBzcC0+dHlwZXNbc3AtPnRpbWVjbnQgLSAxIC0gaV0gJiYKLSAgICAgICAgZGlmZmVyX2J5X3JlcGVhdChzcC0+YXRzW3NwLT50aW1lY250IC0gMV0sCi0gICAgICAgICAgICAgc3AtPmF0c1tzcC0+dGltZWNudCAtIDEgLSBpXSk7Ci0gICAgICAgIFhMT0coKCAidHpsb2FkOiBsb2FkIG9rICEhXG4iICkpOwotICAgIHJldHVybiAwOworICAgIGlmIChzcC0+dGltZWNudCA+IDEpIHsKKyAgICAgICAgZm9yIChpID0gMTsgaSA8IHNwLT50aW1lY250OyArK2kpCisgICAgICAgICAgICBpZiAodHlwZXNlcXVpdihzcCwgc3AtPnR5cGVzW2ldLCBzcC0+dHlwZXNbMF0pICYmCisgICAgICAgICAgICAgICAgICAgIGRpZmZlcl9ieV9yZXBlYXQoc3AtPmF0c1tpXSwgc3AtPmF0c1swXSkpIHsKKyAgICAgICAgICAgICAgICBzcC0+Z29iYWNrID0gVFJVRTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZvciAoaSA9IHNwLT50aW1lY250IC0gMjsgaSA+PSAwOyAtLWkpCisgICAgICAgICAgICAgICAgaWYgKHR5cGVzZXF1aXYoc3AsIHNwLT50eXBlc1tzcC0+dGltZWNudCAtIDFdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwLT50eXBlc1tpXSkgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgIGRpZmZlcl9ieV9yZXBlYXQoc3AtPmF0c1tzcC0+dGltZWNudCAtIDFdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcC0+YXRzW2ldKSkgeworICAgICAgICAgICAgICAgICAgICBzcC0+Z29haGVhZCA9IFRSVUU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIC8qCisgICAgICAgICoqIElmIHR5cGUgMCBpcyBpcyB1bnVzZWQgaW4gdHJhbnNpdGlvbnMsCisgICAgICAgICoqIGl0J3MgdGhlIHR5cGUgdG8gdXNlIGZvciBlYXJseSB0aW1lcy4KKyAgICAgICAgKi8KKyAgICAgICAgZm9yIChpID0gMDsgaSA8IHNwLT50eXBlY250OyArK2kpCisgICAgICAgICAgICBpZiAoc3AtPnR5cGVzW2ldID09IDApCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGkgPSAoaSA+PSBzcC0+dHlwZWNudCkgPyAwIDogLTE7CisgICAgICAgIC8qCisgICAgICAgICoqIEFic2VudCB0aGUgYWJvdmUsCisgICAgICAgICoqIGlmIHRoZXJlIGFyZSB0cmFuc2l0aW9uIHRpbWVzCisgICAgICAgICoqIGFuZCB0aGUgZmlyc3QgdHJhbnNpdGlvbiBpcyB0byBhIGRheWxpZ2h0IHRpbWUKKyAgICAgICAgKiogZmluZCB0aGUgc3RhbmRhcmQgdHlwZSBsZXNzIHRoYW4gYW5kIGNsb3Nlc3QgdG8KKyAgICAgICAgKiogdGhlIHR5cGUgb2YgdGhlIGZpcnN0IHRyYW5zaXRpb24uCisgICAgICAgICovCisgICAgICAgIGlmIChpIDwgMCAmJiBzcC0+dGltZWNudCA+IDAgJiYgc3AtPnR0aXNbc3AtPnR5cGVzWzBdXS50dF9pc2RzdCkgeworICAgICAgICAgICAgaSA9IHNwLT50eXBlc1swXTsKKyAgICAgICAgICAgIHdoaWxlICgtLWkgPj0gMCkKKyAgICAgICAgICAgICAgICBpZiAoIXNwLT50dGlzW2ldLnR0X2lzZHN0KQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAvKgorICAgICAgICAqKiBJZiBubyByZXN1bHQgeWV0LCBmaW5kIHRoZSBmaXJzdCBzdGFuZGFyZCB0eXBlLgorICAgICAgICAqKiBJZiB0aGVyZSBpcyBub25lLCBwdW50IHRvIHR5cGUgemVyby4KKyAgICAgICAgKi8KKyAgICAgICAgaWYgKGkgPCAwKSB7CisgICAgICAgICAgICBpID0gMDsKKyAgICAgICAgICAgIHdoaWxlIChzcC0+dHRpc1tpXS50dF9pc2RzdCkKKyAgICAgICAgICAgICAgICBpZiAoKytpID49IHNwLT50eXBlY250KSB7CisgICAgICAgICAgICAgICAgICAgIGkgPSAwOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgc3AtPmRlZmF1bHR0eXBlID0gaTsKKyNpZmRlZiBBTExfU1RBVEUKKyAgICAgICAgZnJlZSh1cCk7CisjZW5kaWYgLyogZGVmaW5lZCBBTExfU1RBVEUgKi8KKyAgICAgICAgcmV0dXJuIDA7Citvb3BzOgorI2lmZGVmIEFMTF9TVEFURQorICAgICAgICBmcmVlKHVwKTsKKyNlbmRpZiAvKiBkZWZpbmVkIEFMTF9TVEFURSAqLworICAgICAgICByZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBpbnQKK3R5cGVzZXF1aXYoY29uc3Qgc3RydWN0IHN0YXRlICpjb25zdCBzcCwgY29uc3QgaW50IGEsIGNvbnN0IGludCBiKQoreworCXJlZ2lzdGVyIGludAlyZXN1bHQ7CisKKwlpZiAoc3AgPT0gTlVMTCB8fAorCQlhIDwgMCB8fCBhID49IHNwLT50eXBlY250IHx8CisJCWIgPCAwIHx8IGIgPj0gc3AtPnR5cGVjbnQpCisJCQlyZXN1bHQgPSBGQUxTRTsKKwllbHNlIHsKKwkJcmVnaXN0ZXIgY29uc3Qgc3RydWN0IHR0aW5mbyAqCWFwID0gJnNwLT50dGlzW2FdOworCQlyZWdpc3RlciBjb25zdCBzdHJ1Y3QgdHRpbmZvICoJYnAgPSAmc3AtPnR0aXNbYl07CisJCXJlc3VsdCA9IGFwLT50dF9nbXRvZmYgPT0gYnAtPnR0X2dtdG9mZiAmJgorCQkJYXAtPnR0X2lzZHN0ID09IGJwLT50dF9pc2RzdCAmJgorCQkJYXAtPnR0X3R0aXNzdGQgPT0gYnAtPnR0X3R0aXNzdGQgJiYKKwkJCWFwLT50dF90dGlzZ210ID09IGJwLT50dF90dGlzZ210ICYmCisJCQlzdHJjbXAoJnNwLT5jaGFyc1thcC0+dHRfYWJicmluZF0sCisJCQkmc3AtPmNoYXJzW2JwLT50dF9hYmJyaW5kXSkgPT0gMDsKKwl9CisJcmV0dXJuIHJlc3VsdDsKIH0KIAogc3RhdGljIGNvbnN0IGludCAgICBtb25fbGVuZ3Roc1syXVtNT05TUEVSWUVBUl0gPSB7CkBAIC03MTEsOCArNjUzLDcgQEAKICovCiAKIHN0YXRpYyBjb25zdCBjaGFyICoKLWdldHpuYW1lKHN0cnApCi1yZWdpc3RlciBjb25zdCBjaGFyICogICBzdHJwOworZ2V0em5hbWUocmVnaXN0ZXIgY29uc3QgY2hhciAqIHN0cnApCiB7CiAgICAgcmVnaXN0ZXIgY2hhciAgIGM7CiAKQEAgLTc0OSwxMSArNjkwLDcgQEAKICovCiAKIHN0YXRpYyBjb25zdCBjaGFyICoKLWdldG51bShzdHJwLCBudW1wLCBtaW4sIG1heCkKLXJlZ2lzdGVyIGNvbnN0IGNoYXIgKiAgIHN0cnA7Ci1pbnQgKiBjb25zdCAgICAgbnVtcDsKLWNvbnN0IGludCAgICAgICBtaW47Ci1jb25zdCBpbnQgICAgICAgbWF4OworZ2V0bnVtKHJlZ2lzdGVyIGNvbnN0IGNoYXIgKiBzdHJwLCBpbnQgKiBjb25zdCBudW1wLCBjb25zdCBpbnQgbWluLCBjb25zdCBpbnQgbWF4KQogewogICAgIHJlZ2lzdGVyIGNoYXIgICBjOwogICAgIHJlZ2lzdGVyIGludCAgICBudW07CkBAIC03ODIsOSArNzE5LDcgQEAKICovCiAKIHN0YXRpYyBjb25zdCBjaGFyICoKLWdldHNlY3Moc3RycCwgc2Vjc3ApCi1yZWdpc3RlciBjb25zdCBjaGFyICogICBzdHJwOwotbG9uZyAqIGNvbnN0ICAgICAgICBzZWNzcDsKK2dldHNlY3MocmVnaXN0ZXIgY29uc3QgY2hhciAqc3RycCwgaW50X2Zhc3QzMl90ICpjb25zdCBzZWNzcCkKIHsKICAgICBpbnQgbnVtOwogCkBAIC03OTcsNyArNzMyLDcgQEAKICAgICBzdHJwID0gZ2V0bnVtKHN0cnAsICZudW0sIDAsIEhPVVJTUEVSREFZICogREFZU1BFUldFRUsgLSAxKTsKICAgICBpZiAoc3RycCA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAqc2Vjc3AgPSBudW0gKiAobG9uZykgU0VDU1BFUkhPVVI7CisgICAgKnNlY3NwID0gbnVtICogKGludF9mYXN0MzJfdCkgU0VDU1BFUkhPVVI7CiAgICAgaWYgKCpzdHJwID09ICc6JykgewogICAgICAgICArK3N0cnA7CiAgICAgICAgIHN0cnAgPSBnZXRudW0oc3RycCwgJm51bSwgMCwgTUlOU1BFUkhPVVIgLSAxKTsKQEAgLTgyNCw5ICs3NTksNyBAQAogKi8KIAogc3RhdGljIGNvbnN0IGNoYXIgKgotZ2V0b2Zmc2V0KHN0cnAsIG9mZnNldHApCi1yZWdpc3RlciBjb25zdCBjaGFyICogICBzdHJwOwotbG9uZyAqIGNvbnN0ICAgICAgICBvZmZzZXRwOworZ2V0b2Zmc2V0KHJlZ2lzdGVyIGNvbnN0IGNoYXIgKnN0cnAsIGludF9mYXN0MzJfdCAqY29uc3Qgb2Zmc2V0cCkKIHsKICAgICByZWdpc3RlciBpbnQgICAgbmVnID0gMDsKIApAQCAtODUxLDkgKzc4NCw3IEBACiAqLwogCiBzdGF0aWMgY29uc3QgY2hhciAqCi1nZXRydWxlKHN0cnAsIHJ1bGVwKQotY29uc3QgY2hhciAqICAgICAgICAgICAgc3RycDsKLXJlZ2lzdGVyIHN0cnVjdCBydWxlICogY29uc3QgICAgcnVsZXA7CitnZXRydWxlKGNvbnN0IGNoYXIgKiBzdHJwLCByZWdpc3RlciBzdHJ1Y3QgcnVsZSAqIGNvbnN0IHJ1bGVwKQogewogICAgIGlmICgqc3RycCA9PSAnSicpIHsKICAgICAgICAgLyoKQEAgLTkwNSwxMSArODM2LDggQEAKICovCiAKIHN0YXRpYyB0aW1lX3QKLXRyYW5zdGltZShqYW5maXJzdCwgeWVhciwgcnVsZXAsIG9mZnNldCkKLWNvbnN0IHRpbWVfdCAgICAgICAgICAgICAgICBqYW5maXJzdDsKLWNvbnN0IGludCAgICAgICAgICAgICAgIHllYXI7Ci1yZWdpc3RlciBjb25zdCBzdHJ1Y3QgcnVsZSAqIGNvbnN0ICBydWxlcDsKLWNvbnN0IGxvbmcgICAgICAgICAgICAgIG9mZnNldDsKK3RyYW5zdGltZShjb25zdCB0aW1lX3QgamFuZmlyc3QsIGNvbnN0IGludCB5ZWFyLAorICAgICAgICAgIHJlZ2lzdGVyIGNvbnN0IHN0cnVjdCBydWxlICpjb25zdCBydWxlcCwgY29uc3QgaW50X2Zhc3QzMl90IG9mZnNldCkKIHsKICAgICByZWdpc3RlciBpbnQgICAgbGVhcHllYXI7CiAgICAgcmVnaXN0ZXIgdGltZV90IHZhbHVlOwpAQCAtMTAwMCwyMSArOTI4LDIwIEBACiAqLwogCiBzdGF0aWMgaW50Ci10enBhcnNlKG5hbWUsIHNwLCBsYXN0ZGl0Y2gpCi1jb25zdCBjaGFyICogICAgICAgICAgICBuYW1lOwotcmVnaXN0ZXIgc3RydWN0IHN0YXRlICogY29uc3QgICBzcDsKLWNvbnN0IGludCAgICAgICAgICAgbGFzdGRpdGNoOwordHpwYXJzZShjb25zdCBjaGFyICogbmFtZSwgcmVnaXN0ZXIgc3RydWN0IHN0YXRlICogY29uc3Qgc3AsCisgICAgICAgIGNvbnN0IGludCBsYXN0ZGl0Y2gpCiB7CiAgICAgY29uc3QgY2hhciAqICAgICAgICAgICAgc3RkbmFtZTsKICAgICBjb25zdCBjaGFyICogICAgICAgICAgICBkc3RuYW1lOwogICAgIHNpemVfdCAgICAgICAgICAgICAgc3RkbGVuOwogICAgIHNpemVfdCAgICAgICAgICAgICAgZHN0bGVuOwotICAgIGxvbmcgICAgICAgICAgICAgICAgc3Rkb2Zmc2V0OwotICAgIGxvbmcgICAgICAgICAgICAgICAgZHN0b2Zmc2V0OwotICAgIHJlZ2lzdGVyIHRpbWVfdCAqICAgICAgIGF0cDsKKyAgICBpbnRfZmFzdDMyX3QgICAgICAgICAgICAgICAgc3Rkb2Zmc2V0OworICAgIGludF9mYXN0MzJfdCAgICAgICAgICAgICAgICBkc3RvZmZzZXQ7CisgICAgcmVnaXN0ZXIgdGltZV90ICogICAgICAgICAgIGF0cDsKICAgICByZWdpc3RlciB1bnNpZ25lZCBjaGFyICogICAgdHlwZXA7CiAgICAgcmVnaXN0ZXIgY2hhciAqICAgICAgICAgY3A7CiAgICAgcmVnaXN0ZXIgaW50ICAgICAgICAgICAgbG9hZF9yZXN1bHQ7CisgICAgc3RhdGljIHN0cnVjdCB0dGluZm8gICAgenR0aW5mbzsKIAogICAgIElOSVRJQUxJWkUoZHN0bmFtZSk7CiAgICAgc3RkbmFtZSA9IG5hbWU7CkBAIC0xMDQ2LDcgKzk3Myw2IEBACiAgICAgbG9hZF9yZXN1bHQgPSB0emxvYWQoVFpERUZSVUxFUywgc3AsIEZBTFNFKTsKICAgICBpZiAobG9hZF9yZXN1bHQgIT0gMCkKICAgICAgICAgc3AtPmxlYXBjbnQgPSAwOyAgICAgICAgLyogc28sIHdlJ3JlIG9mZiBhIGxpdHRsZSAqLwotICAgIHNwLT50aW1lY250ID0gMDsKICAgICBpZiAoKm5hbWUgIT0gJ1wwJykgewogICAgICAgICBpZiAoKm5hbWUgPT0gJzwnKSB7CiAgICAgICAgICAgICBkc3RuYW1lID0gKytuYW1lOwpAQCAtMTA4OCw2ICsxMDE0LDcgQEAKICAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAqKiBUd28gdHJhbnNpdGlvbnMgcGVyIHllYXIsIGZyb20gRVBPQ0hfWUVBUiBmb3J3YXJkLgogICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIHNwLT50dGlzWzBdID0gc3AtPnR0aXNbMV0gPSB6dHRpbmZvOwogICAgICAgICAgICAgc3AtPnR0aXNbMF0udHRfZ210b2ZmID0gLWRzdG9mZnNldDsKICAgICAgICAgICAgIHNwLT50dGlzWzBdLnR0X2lzZHN0ID0gMTsKICAgICAgICAgICAgIHNwLT50dGlzWzBdLnR0X2FiYnJpbmQgPSBzdGRsZW4gKyAxOwpAQCAtMTA5Nyw2ICsxMDI0LDcgQEAKICAgICAgICAgICAgIGF0cCA9IHNwLT5hdHM7CiAgICAgICAgICAgICB0eXBlcCA9IHNwLT50eXBlczsKICAgICAgICAgICAgIGphbmZpcnN0ID0gMDsKKyAgICAgICAgICAgIHNwLT50aW1lY250ID0gMDsKICAgICAgICAgICAgIGZvciAoeWVhciA9IEVQT0NIX1lFQVI7CiAgICAgICAgICAgICAgICAgc3AtPnRpbWVjbnQgKyAyIDw9IFRaX01BWF9USU1FUzsKICAgICAgICAgICAgICAgICArK3llYXIpIHsKQEAgLTExMjYsOSArMTA1NCw5IEBACiAgICAgICAgICAgICAgICAgamFuZmlyc3QgPSBuZXdmaXJzdDsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHJlZ2lzdGVyIGxvbmcgICB0aGVpcnN0ZG9mZnNldDsKLSAgICAgICAgICAgIHJlZ2lzdGVyIGxvbmcgICB0aGVpcmRzdG9mZnNldDsKLSAgICAgICAgICAgIHJlZ2lzdGVyIGxvbmcgICB0aGVpcm9mZnNldDsKKyAgICAgICAgICAgIHJlZ2lzdGVyIGludF9mYXN0MzJfdCAgIHRoZWlyc3Rkb2Zmc2V0OworICAgICAgICAgICAgcmVnaXN0ZXIgaW50X2Zhc3QzMl90ICAgdGhlaXJkc3RvZmZzZXQ7CisgICAgICAgICAgICByZWdpc3RlciBpbnRfZmFzdDMyX3QgICB0aGVpcm9mZnNldDsKICAgICAgICAgICAgIHJlZ2lzdGVyIGludCAgICBpc2RzdDsKICAgICAgICAgICAgIHJlZ2lzdGVyIGludCAgICBpOwogICAgICAgICAgICAgcmVnaXN0ZXIgaW50ICAgIGo7CkBAIC0xMjAwLDggKzExMjgsOCBAQAogICAgICAgICAgICAgfQogICAgICAgICAgICAgLyoKICAgICAgICAgICAgICoqIEZpbmFsbHksIGZpbGwgaW4gdHRpcy4KLSAgICAgICAgICAgICoqIHR0aXNzdGQgYW5kIHR0aXNnbXQgbmVlZCBub3QgYmUgaGFuZGxlZC4KICAgICAgICAgICAgICovCisgICAgICAgICAgICBzcC0+dHRpc1swXSA9IHNwLT50dGlzWzFdID0genR0aW5mbzsKICAgICAgICAgICAgIHNwLT50dGlzWzBdLnR0X2dtdG9mZiA9IC1zdGRvZmZzZXQ7CiAgICAgICAgICAgICBzcC0+dHRpc1swXS50dF9pc2RzdCA9IEZBTFNFOwogICAgICAgICAgICAgc3AtPnR0aXNbMF0udHRfYWJicmluZCA9IDA7CkBAIC0xMjE0LDYgKzExNDIsNyBAQAogICAgICAgICBkc3RsZW4gPSAwOwogICAgICAgICBzcC0+dHlwZWNudCA9IDE7ICAgICAgICAvKiBvbmx5IHN0YW5kYXJkIHRpbWUgKi8KICAgICAgICAgc3AtPnRpbWVjbnQgPSAwOworICAgICAgICBzcC0+dHRpc1swXSA9IHp0dGluZm87CiAgICAgICAgIHNwLT50dGlzWzBdLnR0X2dtdG9mZiA9IC1zdGRvZmZzZXQ7CiAgICAgICAgIHNwLT50dGlzWzBdLnR0X2lzZHN0ID0gMDsKICAgICAgICAgc3AtPnR0aXNbMF0udHRfYWJicmluZCA9IDA7CkBAIC0xMjM1LDE1ICsxMTY0LDIxIEBACiB9CiAKIHN0YXRpYyB2b2lkCi1nbXRsb2FkKHNwKQotc3RydWN0IHN0YXRlICogY29uc3QgICAgc3A7CitnbXRsb2FkKHN0cnVjdCBzdGF0ZSAqIGNvbnN0IHNwKQogewogICAgIGlmICh0emxvYWQoZ210LCBzcCwgVFJVRSkgIT0gMCkKICAgICAgICAgKHZvaWQpIHR6cGFyc2UoZ210LCBzcCwgVFJVRSk7CiB9CiAKLXN0YXRpYyB2b2lkCi10enNldHdhbGwgUCgodm9pZCkpCisjaWZuZGVmIFNURF9JTlNQSVJFRAorLyoKKyoqIEEgbm9uLXN0YXRpYyBkZWNsYXJhdGlvbiBvZiB0enNldHdhbGwgaW4gYSBzeXN0ZW0gaGVhZGVyIGZpbGUKKyoqIG1heSBjYXVzZSBhIHdhcm5pbmcgYWJvdXQgdGhpcyB1cGNvbWluZyBzdGF0aWMgZGVjbGFyYXRpb24uLi4KKyovCitzdGF0aWMKKyNlbmRpZiAvKiAhZGVmaW5lZCBTVERfSU5TUElSRUQgKi8KK3ZvaWQKK3R6c2V0d2FsbCh2b2lkKQogewogICAgIGlmIChsY2xfaXNfc2V0IDwgMCkKICAgICAgICAgcmV0dXJuOwpAQCAtMTI1MSwyOSArMTE4NiwzMiBAQAogCiAjaWZkZWYgQUxMX1NUQVRFCiAgICAgaWYgKGxjbHB0ciA9PSBOVUxMKSB7Ci0gICAgICAgIGxjbHB0ciA9IChzdHJ1Y3Qgc3RhdGUgKikgbWFsbG9jKHNpemVvZiAqbGNscHRyKTsKKyAgICAgICAgbGNscHRyID0gY2FsbG9jKDEsIHNpemVvZiAqbGNscHRyKTsKICAgICAgICAgaWYgKGxjbHB0ciA9PSBOVUxMKSB7CiAgICAgICAgICAgICBzZXR0em5hbWUoKTsgICAgLyogYWxsIHdlIGNhbiBkbyAqLwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfQogI2VuZGlmIC8qIGRlZmluZWQgQUxMX1NUQVRFICovCi0gICAgaWYgKHR6bG9hZCgoY2hhciAqKSBOVUxMLCBsY2xwdHIsIFRSVUUpICE9IDApCisgICAgaWYgKHR6bG9hZChOVUxMLCBsY2xwdHIsIFRSVUUpICE9IDApCiAgICAgICAgIGdtdGxvYWQobGNscHRyKTsKICAgICBzZXR0em5hbWUoKTsKIH0KIAorI2luY2x1ZGUgPHN5cy9zeXN0ZW1fcHJvcGVydGllcy5oPiAvLyBGb3IgX19zeXN0ZW1fcHJvcGVydHlfZ2V0LgorCiBzdGF0aWMgdm9pZAotdHpzZXRfbG9ja2VkIFAoKHZvaWQpKQordHpzZXRfbG9ja2VkKHZvaWQpCiB7CiAgICAgcmVnaXN0ZXIgY29uc3QgY2hhciAqICAgbmFtZSA9IE5VTEw7Ci0gICAgc3RhdGljIGNoYXIgYnVmW1BST1BfVkFMVUVfTUFYXTsKIAogICAgIG5hbWUgPSBnZXRlbnYoIlRaIik7CiAKICAgICAvLyB0cnkgdGhlICJwZXJzaXN0LnN5cy50aW1lem9uZSIgc3lzdGVtIHByb3BlcnR5IGZpcnN0Ci0gICAgaWYgKG5hbWUgPT0gTlVMTCAmJiBfX3N5c3RlbV9wcm9wZXJ0eV9nZXQoInBlcnNpc3Quc3lzLnRpbWV6b25lIiwgYnVmKSA+IDApCisgICAgc3RhdGljIGNoYXIgYnVmW1BST1BfVkFMVUVfTUFYXTsKKyAgICBpZiAobmFtZSA9PSBOVUxMICYmIF9fc3lzdGVtX3Byb3BlcnR5X2dldCgicGVyc2lzdC5zeXMudGltZXpvbmUiLCBidWYpID4gMCkgewogICAgICAgICBuYW1lID0gYnVmOworICAgIH0KIAogICAgIGlmIChuYW1lID09IE5VTEwpIHsKICAgICAgICAgdHpzZXR3YWxsKCk7CkBAIC0xMjg4LDcgKzEyMjYsNyBAQAogCiAjaWZkZWYgQUxMX1NUQVRFCiAgICAgaWYgKGxjbHB0ciA9PSBOVUxMKSB7Ci0gICAgICAgIGxjbHB0ciA9IChzdHJ1Y3Qgc3RhdGUgKikgbWFsbG9jKHNpemVvZiAqbGNscHRyKTsKKyAgICAgICAgbGNscHRyID0gY2FsbG9jKDEsIHNpemVvZiAqbGNscHRyKTsKICAgICAgICAgaWYgKGxjbHB0ciA9PSBOVUxMKSB7CiAgICAgICAgICAgICBzZXR0em5hbWUoKTsgICAgLyogYWxsIHdlIGNhbiBkbyAqLwogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTMxMyw3ICsxMjUxLDcgQEAKIH0KIAogdm9pZAotdHpzZXQgUCgodm9pZCkpCit0enNldCh2b2lkKQogewogICAgIF90ekxvY2soKTsKICAgICB0enNldF9sb2NrZWQoKTsKQEAgLTEzMzEsMjEgKzEyNjksMjIgQEAKIAogLypBUkdTVVNFRCovCiBzdGF0aWMgc3RydWN0IHRtICoKLWxvY2Fsc3ViKHRpbWVwLCBvZmZzZXQsIHRtcCkKLWNvbnN0IHRpbWVfdCAqIGNvbnN0ICAgIHRpbWVwOwotY29uc3QgbG9uZyAgICAgIG9mZnNldDsKLXN0cnVjdCB0bSAqIGNvbnN0ICAgdG1wOworbG9jYWxzdWIoY29uc3QgdGltZV90ICogY29uc3QgdGltZXAsIGNvbnN0IGludF9mYXN0MzJfdCBvZmZzZXQsCisgICAgICAgICBzdHJ1Y3QgdG0gKiBjb25zdCB0bXAsIGNvbnN0IHN0cnVjdCBzdGF0ZSAqIHNwKSAvLyBhbmRyb2lkLWNoYW5nZWQ6IGFkZGVkIHNwLgogewotICAgIHJlZ2lzdGVyIHN0cnVjdCBzdGF0ZSAqICAgICBzcDsKICAgICByZWdpc3RlciBjb25zdCBzdHJ1Y3QgdHRpbmZvICogIHR0aXNwOwogICAgIHJlZ2lzdGVyIGludCAgICAgICAgICAgIGk7CiAgICAgcmVnaXN0ZXIgc3RydWN0IHRtICogICAgICAgIHJlc3VsdDsKICAgICBjb25zdCB0aW1lX3QgICAgICAgICAgICB0ID0gKnRpbWVwOwogCi0gICAgc3AgPSBsY2xwdHI7CisgICAgLy8gQkVHSU4gYW5kcm9pZC1jaGFuZ2VkOiBzdXBwb3J0IHVzZXItc3VwcGxpZWQgc3AuCisgICAgaWYgKHNwID09IE5VTEwpIHsKKyAgICAgICAgc3AgPSBsY2xwdHI7CisgICAgfQorICAgIC8vIEVORCBhbmRyb2lkLWNoYW5nZWQKICNpZmRlZiBBTExfU1RBVEUKICAgICBpZiAoc3AgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIGdtdHN1Yih0aW1lcCwgb2Zmc2V0LCB0bXApOworICAgICAgICByZXR1cm4gZ210c3ViKHRpbWVwLCBvZmZzZXQsIHRtcCwgc3ApOyAvLyBhbmRyb2lkLWNoYW5nZWQ6IGFkZGVkIHNwLgogI2VuZGlmIC8qIGRlZmluZWQgQUxMX1NUQVRFICovCiAgICAgaWYgKChzcC0+Z29iYWNrICYmIHQgPCBzcC0+YXRzWzBdKSB8fAogICAgICAgICAoc3AtPmdvYWhlYWQgJiYgdCA+IHNwLT5hdHNbc3AtPnRpbWVjbnQgLSAxXSkpIHsKQEAgLTEzNzIsNyArMTMxMSw3IEBACiAgICAgICAgICAgICBpZiAobmV3dCA8IHNwLT5hdHNbMF0gfHwKICAgICAgICAgICAgICAgICBuZXd0ID4gc3AtPmF0c1tzcC0+dGltZWNudCAtIDFdKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsgICAgLyogImNhbm5vdCBoYXBwZW4iICovCi0gICAgICAgICAgICByZXN1bHQgPSBsb2NhbHN1YigmbmV3dCwgb2Zmc2V0LCB0bXApOworICAgICAgICAgICAgcmVzdWx0ID0gbG9jYWxzdWIoJm5ld3QsIG9mZnNldCwgdG1wLCBzcCk7IC8vIGFuZHJvaWQtY2hhbmdlZDogYWRkZWQgc3AuCiAgICAgICAgICAgICBpZiAocmVzdWx0ID09IHRtcCkgewogICAgICAgICAgICAgICAgIHJlZ2lzdGVyIHRpbWVfdCBuZXd5OwogCkBAIC0xMzg3LDEyICsxMzI2LDcgQEAKICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogICAgIGlmIChzcC0+dGltZWNudCA9PSAwIHx8IHQgPCBzcC0+YXRzWzBdKSB7Ci0gICAgICAgIGkgPSAwOwotICAgICAgICB3aGlsZSAoc3AtPnR0aXNbaV0udHRfaXNkc3QpCi0gICAgICAgICAgICBpZiAoKytpID49IHNwLT50eXBlY250KSB7Ci0gICAgICAgICAgICAgICAgaSA9IDA7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9CisgICAgICAgIGkgPSBzcC0+ZGVmYXVsdHR5cGU7CiAgICAgfSBlbHNlIHsKICAgICAgICAgcmVnaXN0ZXIgaW50ICAgIGxvID0gMTsKICAgICAgICAgcmVnaXN0ZXIgaW50ICAgIGhpID0gc3AtPnRpbWVjbnQ7CkBAIC0xNDIzLDggKzEzNTcsNyBAQAogfQogCiBzdHJ1Y3QgdG0gKgotbG9jYWx0aW1lKHRpbWVwKQotY29uc3QgdGltZV90ICogY29uc3QgICAgdGltZXA7Citsb2NhbHRpbWUoY29uc3QgdGltZV90ICogY29uc3QgdGltZXApCiB7CiAgICAgcmV0dXJuIGxvY2FsdGltZV9yKHRpbWVwLCAmdG1HbG9iYWwpOwogfQpAQCAtMTQzNCwxNSArMTM2NywxMyBAQAogKi8KIAogc3RydWN0IHRtICoKLWxvY2FsdGltZV9yKHRpbWVwLCB0bXApCi1jb25zdCB0aW1lX3QgKiBjb25zdCAgICB0aW1lcDsKLXN0cnVjdCB0bSAqICAgICB0bXA7Citsb2NhbHRpbWVfcihjb25zdCB0aW1lX3QgKiBjb25zdCB0aW1lcCwgc3RydWN0IHRtICogdG1wKQogewogICAgIHN0cnVjdCB0bSogIHJlc3VsdDsKIAogICAgIF90ekxvY2soKTsKICAgICB0enNldF9sb2NrZWQoKTsKLSAgICByZXN1bHQgPSBsb2NhbHN1Yih0aW1lcCwgMEwsIHRtcCk7CisgICAgcmVzdWx0ID0gbG9jYWxzdWIodGltZXAsIDBMLCB0bXAsIE5VTEwpOyAvLyBhbmRyb2lkLWNoYW5nZWQ6IGV4dHJhIHBhcmFtZXRlci4KICAgICBfdHpVbmxvY2soKTsKIAogICAgIHJldHVybiByZXN1bHQ7CkBAIC0xNDUzLDE3ICsxMzg0LDE3IEBACiAqLwogCiBzdGF0aWMgc3RydWN0IHRtICoKLWdtdHN1Yih0aW1lcCwgb2Zmc2V0LCB0bXApCi1jb25zdCB0aW1lX3QgKiBjb25zdCAgICB0aW1lcDsKLWNvbnN0IGxvbmcgICAgICBvZmZzZXQ7Ci1zdHJ1Y3QgdG0gKiBjb25zdCAgIHRtcDsKK2dtdHN1Yihjb25zdCB0aW1lX3QgKiBjb25zdCB0aW1lcCwgY29uc3QgaW50X2Zhc3QzMl90IG9mZnNldCwKKyAgICAgICBzdHJ1Y3QgdG0gKmNvbnN0IHRtcCwgY29uc3Qgc3RydWN0IHN0YXRlICogc3ApIC8vIGFuZHJvaWQtY2hhbmdlZDogYWRkZWQgc3AuCiB7CiAgICAgcmVnaXN0ZXIgc3RydWN0IHRtICogICAgcmVzdWx0OwogCisgICAgKHZvaWQpIHNwOyAvLyBhbmRyb2lkLWFkZGVkOiB1bnVzZWQuCisKICAgICBpZiAoIWdtdF9pc19zZXQpIHsKICAgICAgICAgZ210X2lzX3NldCA9IFRSVUU7CiAjaWZkZWYgQUxMX1NUQVRFCi0gICAgICAgIGdtdHB0ciA9IChzdHJ1Y3Qgc3RhdGUgKikgbWFsbG9jKHNpemVvZiAqZ210cHRyKTsKKyAgICAgICAgZ210cHRyID0gY2FsbG9jKDEsIHNpemVvZiAqZ210cHRyKTsKICAgICAgICAgaWYgKGdtdHB0ciAhPSBOVUxMKQogI2VuZGlmIC8qIGRlZmluZWQgQUxMX1NUQVRFICovCiAgICAgICAgICAgICBnbXRsb2FkKGdtdHB0cik7CkBAIC0xNDkyLDggKzE0MjMsNyBAQAogfQogCiBzdHJ1Y3QgdG0gKgotZ210aW1lKHRpbWVwKQotY29uc3QgdGltZV90ICogY29uc3QgICAgdGltZXA7CitnbXRpbWUoY29uc3QgdGltZV90ICogY29uc3QgdGltZXApCiB7CiAgICAgcmV0dXJuIGdtdGltZV9yKHRpbWVwLCAmdG1HbG9iYWwpOwogfQpAQCAtMTUwMyw1OCArMTQzMyw0MSBAQAogKi8KIAogc3RydWN0IHRtICoKLWdtdGltZV9yKHRpbWVwLCB0bXApCi1jb25zdCB0aW1lX3QgKiBjb25zdCAgICB0aW1lcDsKLXN0cnVjdCB0bSAqICAgICB0bXA7CitnbXRpbWVfcihjb25zdCB0aW1lX3QgKiBjb25zdCB0aW1lcCwgc3RydWN0IHRtICogdG1wKQogewogICAgIHN0cnVjdCB0bSogIHJlc3VsdDsKIAogICAgIF90ekxvY2soKTsKLSAgICByZXN1bHQgPSBnbXRzdWIodGltZXAsIDBMLCB0bXApOworICAgIHJlc3VsdCA9IGdtdHN1Yih0aW1lcCwgMEwsIHRtcCwgTlVMTCk7IC8vIGFuZHJvaWQtY2hhbmdlZDogZXh0cmEgcGFyYW1ldGVyLgogICAgIF90elVubG9jaygpOwogCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotI2lmZGVmIFNURF9JTlNQSVJFRAotI2lmIDAgLyogZGlzYWJsZWQgYmVjYXVzZSB0aGVyZSBpcyBubyBnb29kIGRvY3VtZW50YXRpb24gZm9yIHRoaXMgZnVuY3Rpb24gKi8KLXN0cnVjdCB0bSAqCi1vZmZ0aW1lKHRpbWVwLCBvZmZzZXQpCi1jb25zdCB0aW1lX3QgKiBjb25zdCAgICB0aW1lcDsKLWNvbnN0IGxvbmcgICAgICBvZmZzZXQ7Ci17Ci0gICAgcmV0dXJuIGdtdHN1Yih0aW1lcCwgb2Zmc2V0LCAmdG1HbG9iYWwpOwotfQotI2VuZGlmIC8qIDAgKi8KLSNlbmRpZiAvKiBkZWZpbmVkIFNURF9JTlNQSVJFRCAqLwotCiAvKgogKiogUmV0dXJuIHRoZSBudW1iZXIgb2YgbGVhcCB5ZWFycyB0aHJvdWdoIHRoZSBlbmQgb2YgdGhlIGdpdmVuIHllYXIKICoqIHdoZXJlLCB0byBtYWtlIHRoZSBtYXRoIGVhc3ksIHRoZSBhbnN3ZXIgZm9yIHllYXIgemVybyBpcyBkZWZpbmVkIGFzIHplcm8uCiAqLwogCiBzdGF0aWMgaW50Ci1sZWFwc190aHJ1X2VuZF9vZih5KQotcmVnaXN0ZXIgY29uc3QgaW50ICB5OworbGVhcHNfdGhydV9lbmRfb2YocmVnaXN0ZXIgY29uc3QgaW50IHkpCiB7CiAgICAgcmV0dXJuICh5ID49IDApID8gKHkgLyA0IC0geSAvIDEwMCArIHkgLyA0MDApIDoKICAgICAgICAgLShsZWFwc190aHJ1X2VuZF9vZigtKHkgKyAxKSkgKyAxKTsKIH0KIAogc3RhdGljIHN0cnVjdCB0bSAqCi10aW1lc3ViKHRpbWVwLCBvZmZzZXQsIHNwLCB0bXApCi1jb25zdCB0aW1lX3QgKiBjb25zdCAgICAgICAgICAgIHRpbWVwOwotY29uc3QgbG9uZyAgICAgICAgICAgICAgb2Zmc2V0OwotcmVnaXN0ZXIgY29uc3Qgc3RydWN0IHN0YXRlICogY29uc3Qgc3A7Ci1yZWdpc3RlciBzdHJ1Y3QgdG0gKiBjb25zdCAgICAgIHRtcDsKK3RpbWVzdWIoY29uc3QgdGltZV90ICpjb25zdCB0aW1lcCwgY29uc3QgaW50X2Zhc3QzMl90IG9mZnNldCwKKyAgICAgICAgcmVnaXN0ZXIgY29uc3Qgc3RydWN0IHN0YXRlICpjb25zdCBzcCwKKyAgICAgICAgcmVnaXN0ZXIgc3RydWN0IHRtICpjb25zdCB0bXApCiB7CiAgICAgcmVnaXN0ZXIgY29uc3Qgc3RydWN0IGxzaW5mbyAqICBscDsKICAgICByZWdpc3RlciB0aW1lX3QgICAgICAgICB0ZGF5czsKICAgICByZWdpc3RlciBpbnQgICAgICAgICAgICBpZGF5czsgIC8qIHVuc2lnbmVkIHdvdWxkIGJlIHNvIDIwMDMgKi8KLSAgICByZWdpc3RlciBsb25nICAgICAgICAgICByZW07CisgICAgcmVnaXN0ZXIgaW50X2Zhc3Q2NF90ICAgICAgICAgICByZW07CiAgICAgaW50ICAgICAgICAgICAgIHk7CiAgICAgcmVnaXN0ZXIgY29uc3QgaW50ICogICAgICAgIGlwOwotICAgIHJlZ2lzdGVyIGxvbmcgICAgICAgICAgIGNvcnI7CisgICAgcmVnaXN0ZXIgaW50X2Zhc3Q2NF90ICAgICAgICAgICBjb3JyOwogICAgIHJlZ2lzdGVyIGludCAgICAgICAgICAgIGhpdDsKICAgICByZWdpc3RlciBpbnQgICAgICAgICAgICBpOwogCkBAIC0xNjExLDkgKzE1MjQsMTAgQEAKICAgICAgICAgeSA9IG5ld3k7CiAgICAgfQogICAgIHsKLSAgICAgICAgcmVnaXN0ZXIgbG9uZyAgIHNlY29uZHM7CisgICAgICAgIHJlZ2lzdGVyIGludF9mYXN0MzJfdCAgIHNlY29uZHM7CisgICAgICAgIHJlZ2lzdGVyIHRpbWVfdCBoYWxmX3NlY29uZCA9IDAuNTsKIAotICAgICAgICBzZWNvbmRzID0gdGRheXMgKiBTRUNTUEVSREFZICsgMC41OworICAgICAgICBzZWNvbmRzID0gdGRheXMgKiBTRUNTUEVSREFZICsgaGFsZl9zZWNvbmQ7CiAgICAgICAgIHRkYXlzID0gc2Vjb25kcyAvIFNFQ1NQRVJEQVk7CiAgICAgICAgIHJlbSArPSBzZWNvbmRzIC0gdGRheXMgKiBTRUNTUEVSREFZOwogICAgIH0KQEAgLTE2NzYsOCArMTU5MCw3IEBACiB9CiAKIGNoYXIgKgotY3RpbWUodGltZXApCi1jb25zdCB0aW1lX3QgKiBjb25zdCAgICB0aW1lcDsKK2N0aW1lKGNvbnN0IHRpbWVfdCAqIGNvbnN0IHRpbWVwKQogewogLyoKICoqIFNlY3Rpb24gNC4xMi4zLjIgb2YgWDMuMTU5LTE5ODkgcmVxdWlyZXMgdGhhdApAQCAtMTY4OSw5ICsxNjAyLDcgQEAKIH0KIAogY2hhciAqCi1jdGltZV9yKHRpbWVwLCBidWYpCi1jb25zdCB0aW1lX3QgKiBjb25zdCAgICB0aW1lcDsKLWNoYXIgKiAgICAgICAgICBidWY7CitjdGltZV9yKGNvbnN0IHRpbWVfdCAqIGNvbnN0IHRpbWVwLCBjaGFyICogYnVmKQogewogICAgIHN0cnVjdCB0bSAgIG15dG07CiAKQEAgLTE3MTIsNzcgKzE2MjMsNjUgQEAKICNlbmRpZiAvKiAhZGVmaW5lZCBXUk9ORyAqLwogCiAvKgotKiogU2ltcGxpZmllZCBub3JtYWxpemUgbG9naWMgY291cnRlc3kgUGF1bCBFZ2dlcnQuCisqKiBOb3JtYWxpemUgbG9naWMgY291cnRlc3kgUGF1bCBFZ2dlcnQuCiAqLwogCiBzdGF0aWMgaW50Ci1pbmNyZW1lbnRfb3ZlcmZsb3cobnVtYmVyLCBkZWx0YSkKLWludCAqICAgbnVtYmVyOwotaW50IGRlbHRhOworaW5jcmVtZW50X292ZXJmbG93KGludCAqY29uc3QgaXAsIGludCBqKQogewotICAgIHVuc2lnbmVkICBudW1iZXIwID0gKHVuc2lnbmVkKSpudW1iZXI7Ci0gICAgdW5zaWduZWQgIG51bWJlcjEgPSAodW5zaWduZWQpKG51bWJlcjAgKyBkZWx0YSk7CisJcmVnaXN0ZXIgaW50IGNvbnN0CWkgPSAqaXA7CiAKLSAgICAqbnVtYmVyID0gKGludCludW1iZXIxOwotCi0gICAgaWYgKGRlbHRhID49IDApIHsKLSAgICAgICAgcmV0dXJuICgoaW50KW51bWJlcjEgPCAoaW50KW51bWJlcjApOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHJldHVybiAoKGludCludW1iZXIxID4gKGludCludW1iZXIwKTsKLSAgICB9CisJLyoKKwkqKiBJZiBpID49IDAgdGhlcmUgY2FuIG9ubHkgYmUgb3ZlcmZsb3cgaWYgaSArIGogPiBJTlRfTUFYCisJKiogb3IgaWYgaiA+IElOVF9NQVggLSBpOyBnaXZlbiBpID49IDAsIElOVF9NQVggLSBpIGNhbm5vdCBvdmVyZmxvdy4KKwkqKiBJZiBpIDwgMCB0aGVyZSBjYW4gb25seSBiZSBvdmVyZmxvdyBpZiBpICsgaiA8IElOVF9NSU4KKwkqKiBvciBpZiBqIDwgSU5UX01JTiAtIGk7IGdpdmVuIGkgPCAwLCBJTlRfTUlOIC0gaSBjYW5ub3Qgb3ZlcmZsb3cuCisJKi8KKwlpZiAoKGkgPj0gMCkgPyAoaiA+IElOVF9NQVggLSBpKSA6IChqIDwgSU5UX01JTiAtIGkpKQorCQlyZXR1cm4gVFJVRTsKKwkqaXAgKz0gajsKKwlyZXR1cm4gRkFMU0U7CiB9CiAKIHN0YXRpYyBpbnQKLWxvbmdfaW5jcmVtZW50X292ZXJmbG93KG51bWJlciwgZGVsdGEpCi1sb25nICogIG51bWJlcjsKLWludCBkZWx0YTsKK2luY3JlbWVudF9vdmVyZmxvdzMyKGludF9mYXN0MzJfdCAqY29uc3QgbHAsIGludCBjb25zdCBtKQogewotICAgIHVuc2lnbmVkIGxvbmcgIG51bWJlcjAgPSAodW5zaWduZWQgbG9uZykqbnVtYmVyOwotICAgIHVuc2lnbmVkIGxvbmcgIG51bWJlcjEgPSAodW5zaWduZWQgbG9uZykobnVtYmVyMCArIGRlbHRhKTsKKwlyZWdpc3RlciBpbnRfZmFzdDMyX3QgY29uc3QJbCA9ICpscDsKIAotICAgICpudW1iZXIgPSAobG9uZyludW1iZXIxOwotCi0gICAgaWYgKGRlbHRhID49IDApIHsKLSAgICAgICAgcmV0dXJuICgobG9uZyludW1iZXIxIDwgKGxvbmcpbnVtYmVyMCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcmV0dXJuICgobG9uZyludW1iZXIxID4gKGxvbmcpbnVtYmVyMCk7Ci0gICAgfQorCWlmICgobCA+PSAwKSA/IChtID4gSU5UX0ZBU1QzMl9NQVggLSBsKSA6IChtIDwgSU5UX0ZBU1QzMl9NSU4gLSBsKSkKKwkJcmV0dXJuIFRSVUU7CisJKmxwICs9IG07CisJcmV0dXJuIEZBTFNFOwogfQogCiBzdGF0aWMgaW50Ci1ub3JtYWxpemVfb3ZlcmZsb3codGVuc3B0ciwgdW5pdHNwdHIsIGJhc2UpCi1pbnQgKiBjb25zdCB0ZW5zcHRyOwotaW50ICogY29uc3QgdW5pdHNwdHI7Ci1jb25zdCBpbnQgICBiYXNlOworbm9ybWFsaXplX292ZXJmbG93KGludCAqY29uc3QgdGVuc3B0ciwgaW50ICpjb25zdCB1bml0c3B0ciwgY29uc3QgaW50IGJhc2UpCiB7Ci0gICAgcmVnaXN0ZXIgaW50ICAgIHRlbnNkZWx0YTsKKwlyZWdpc3RlciBpbnQJdGVuc2RlbHRhOwogCi0gICAgdGVuc2RlbHRhID0gKCp1bml0c3B0ciA+PSAwKSA/Ci0gICAgICAgICgqdW5pdHNwdHIgLyBiYXNlKSA6Ci0gICAgICAgICgtMSAtICgtMSAtICp1bml0c3B0cikgLyBiYXNlKTsKLSAgICAqdW5pdHNwdHIgLT0gdGVuc2RlbHRhICogYmFzZTsKLSAgICByZXR1cm4gaW5jcmVtZW50X292ZXJmbG93KHRlbnNwdHIsIHRlbnNkZWx0YSk7CisJdGVuc2RlbHRhID0gKCp1bml0c3B0ciA+PSAwKSA/CisJCSgqdW5pdHNwdHIgLyBiYXNlKSA6CisJCSgtMSAtICgtMSAtICp1bml0c3B0cikgLyBiYXNlKTsKKwkqdW5pdHNwdHIgLT0gdGVuc2RlbHRhICogYmFzZTsKKwlyZXR1cm4gaW5jcmVtZW50X292ZXJmbG93KHRlbnNwdHIsIHRlbnNkZWx0YSk7CiB9CiAKIHN0YXRpYyBpbnQKLWxvbmdfbm9ybWFsaXplX292ZXJmbG93KHRlbnNwdHIsIHVuaXRzcHRyLCBiYXNlKQotbG9uZyAqIGNvbnN0ICAgIHRlbnNwdHI7Ci1pbnQgKiBjb25zdCB1bml0c3B0cjsKLWNvbnN0IGludCAgIGJhc2U7Citub3JtYWxpemVfb3ZlcmZsb3czMihpbnRfZmFzdDMyX3QgKmNvbnN0IHRlbnNwdHIsIGludCAqY29uc3QgdW5pdHNwdHIsCisJCSAgICAgY29uc3QgaW50IGJhc2UpCiB7Ci0gICAgcmVnaXN0ZXIgaW50ICAgIHRlbnNkZWx0YTsKKwlyZWdpc3RlciBpbnQJdGVuc2RlbHRhOwogCi0gICAgdGVuc2RlbHRhID0gKCp1bml0c3B0ciA+PSAwKSA/Ci0gICAgICAgICgqdW5pdHNwdHIgLyBiYXNlKSA6Ci0gICAgICAgICgtMSAtICgtMSAtICp1bml0c3B0cikgLyBiYXNlKTsKLSAgICAqdW5pdHNwdHIgLT0gdGVuc2RlbHRhICogYmFzZTsKLSAgICByZXR1cm4gbG9uZ19pbmNyZW1lbnRfb3ZlcmZsb3codGVuc3B0ciwgdGVuc2RlbHRhKTsKKwl0ZW5zZGVsdGEgPSAoKnVuaXRzcHRyID49IDApID8KKwkJKCp1bml0c3B0ciAvIGJhc2UpIDoKKwkJKC0xIC0gKC0xIC0gKnVuaXRzcHRyKSAvIGJhc2UpOworCSp1bml0c3B0ciAtPSB0ZW5zZGVsdGEgKiBiYXNlOworCXJldHVybiBpbmNyZW1lbnRfb3ZlcmZsb3czMih0ZW5zcHRyLCB0ZW5zZGVsdGEpOwogfQogCiBzdGF0aWMgaW50Ci10bWNvbXAoYXRtcCwgYnRtcCkKLXJlZ2lzdGVyIGNvbnN0IHN0cnVjdCB0bSAqIGNvbnN0IGF0bXA7Ci1yZWdpc3RlciBjb25zdCBzdHJ1Y3QgdG0gKiBjb25zdCBidG1wOwordG1jb21wKHJlZ2lzdGVyIGNvbnN0IHN0cnVjdCB0bSAqIGNvbnN0IGF0bXAsCisgICAgICAgcmVnaXN0ZXIgY29uc3Qgc3RydWN0IHRtICogY29uc3QgYnRtcCkKIHsKICAgICByZWdpc3RlciBpbnQgICAgcmVzdWx0OwogCkBAIC0xNzk2LDIxICsxNjk1LDE5IEBACiB9CiAKIHN0YXRpYyB0aW1lX3QKLXRpbWUyc3ViKHRtcCwgZnVuY3AsIG9mZnNldCwgb2theXAsIGRvX25vcm1fc2VjcykKLXN0cnVjdCB0bSAqIGNvbnN0ICAgdG1wOwotc3RydWN0IHRtICogKCogY29uc3QgICAgZnVuY3ApIFAoKGNvbnN0IHRpbWVfdCosIGxvbmcsIHN0cnVjdCB0bSopKTsKLWNvbnN0IGxvbmcgICAgICBvZmZzZXQ7Ci1pbnQgKiBjb25zdCAgICAgb2theXA7Ci1jb25zdCBpbnQgICAgICAgZG9fbm9ybV9zZWNzOwordGltZTJzdWIoc3RydWN0IHRtICogY29uc3QgdG1wLAorICAgICAgICAgc3RydWN0IHRtICooKmNvbnN0IGZ1bmNwKShjb25zdCB0aW1lX3QqLCBpbnRfZmFzdDMyX3QsIHN0cnVjdCB0bSosIGNvbnN0IHN0cnVjdCBzdGF0ZSopLAorICAgICAgICAgY29uc3QgaW50X2Zhc3QzMl90IG9mZnNldCwKKyAgICAgICAgIGludCAqIGNvbnN0IG9rYXlwLAorICAgICAgICAgY29uc3QgaW50IGRvX25vcm1fc2VjcywgY29uc3Qgc3RydWN0IHN0YXRlICogc3ApIC8vIGFuZHJvaWQtY2hhbmdlZDogYWRkZWQgc3AKIHsKLSAgICByZWdpc3RlciBjb25zdCBzdHJ1Y3Qgc3RhdGUgKiAgIHNwOwogICAgIHJlZ2lzdGVyIGludCAgICAgICAgICAgIGRpcjsKICAgICByZWdpc3RlciBpbnQgICAgICAgICAgICBpLCBqOwogICAgIHJlZ2lzdGVyIGludCAgICAgICAgICAgIHNhdmVkX3NlY29uZHM7Ci0gICAgcmVnaXN0ZXIgbG9uZyAgICAgICAgICAgbGk7CisgICAgcmVnaXN0ZXIgaW50X2Zhc3QzMl90ICAgICAgICAgICBsaTsKICAgICByZWdpc3RlciB0aW1lX3QgICAgICAgICBsbzsKICAgICByZWdpc3RlciB0aW1lX3QgICAgICAgICBoaTsKLSAgICBsb25nICAgICAgICAgICAgICAgIHk7CisgICAgaW50X2Zhc3QzMl90ICAgICAgICAgICAgICAgIHk7CiAgICAgdGltZV90ICAgICAgICAgICAgICBuZXd0OwogICAgIHRpbWVfdCAgICAgICAgICAgICAgdDsKICAgICBzdHJ1Y3QgdG0gICAgICAgICAgIHlvdXJ0bSwgbXl0bTsKQEAgLTE4MjcsMTYgKzE3MjQsMTYgQEAKICAgICBpZiAobm9ybWFsaXplX292ZXJmbG93KCZ5b3VydG0udG1fbWRheSwgJnlvdXJ0bS50bV9ob3VyLCBIT1VSU1BFUkRBWSkpCiAgICAgICAgIHJldHVybiBXUk9ORzsKICAgICB5ID0geW91cnRtLnRtX3llYXI7Ci0gICAgaWYgKGxvbmdfbm9ybWFsaXplX292ZXJmbG93KCZ5LCAmeW91cnRtLnRtX21vbiwgTU9OU1BFUllFQVIpKQorICAgIGlmIChub3JtYWxpemVfb3ZlcmZsb3czMigmeSwgJnlvdXJ0bS50bV9tb24sIE1PTlNQRVJZRUFSKSkKICAgICAgICAgcmV0dXJuIFdST05HOwogICAgIC8qCiAgICAgKiogVHVybiB5IGludG8gYW4gYWN0dWFsIHllYXIgbnVtYmVyIGZvciBub3cuCiAgICAgKiogSXQgaXMgY29udmVydGVkIGJhY2sgdG8gYW4gb2Zmc2V0IGZyb20gVE1fWUVBUl9CQVNFIGxhdGVyLgogICAgICovCi0gICAgaWYgKGxvbmdfaW5jcmVtZW50X292ZXJmbG93KCZ5LCBUTV9ZRUFSX0JBU0UpKQorICAgIGlmIChpbmNyZW1lbnRfb3ZlcmZsb3czMigmeSwgVE1fWUVBUl9CQVNFKSkKICAgICAgICAgcmV0dXJuIFdST05HOwogICAgIHdoaWxlICh5b3VydG0udG1fbWRheSA8PSAwKSB7Ci0gICAgICAgIGlmIChsb25nX2luY3JlbWVudF9vdmVyZmxvdygmeSwgLTEpKQorICAgICAgICBpZiAoaW5jcmVtZW50X292ZXJmbG93MzIoJnksIC0xKSkKICAgICAgICAgICAgIHJldHVybiBXUk9ORzsKICAgICAgICAgbGkgPSB5ICsgKDEgPCB5b3VydG0udG1fbW9uKTsKICAgICAgICAgeW91cnRtLnRtX21kYXkgKz0geWVhcl9sZW5ndGhzW2lzbGVhcChsaSldOwpAQCAtMTg0NCw3ICsxNzQxLDcgQEAKICAgICB3aGlsZSAoeW91cnRtLnRtX21kYXkgPiBEQVlTUEVSTFlFQVIpIHsKICAgICAgICAgbGkgPSB5ICsgKDEgPCB5b3VydG0udG1fbW9uKTsKICAgICAgICAgeW91cnRtLnRtX21kYXkgLT0geWVhcl9sZW5ndGhzW2lzbGVhcChsaSldOwotICAgICAgICBpZiAobG9uZ19pbmNyZW1lbnRfb3ZlcmZsb3coJnksIDEpKQorICAgICAgICBpZiAoaW5jcmVtZW50X292ZXJmbG93MzIoJnksIDEpKQogICAgICAgICAgICAgcmV0dXJuIFdST05HOwogICAgIH0KICAgICBmb3IgKCA7IDsgKSB7CkBAIC0xODU0LDExICsxNzUxLDExIEBACiAgICAgICAgIHlvdXJ0bS50bV9tZGF5IC09IGk7CiAgICAgICAgIGlmICgrK3lvdXJ0bS50bV9tb24gPj0gTU9OU1BFUllFQVIpIHsKICAgICAgICAgICAgIHlvdXJ0bS50bV9tb24gPSAwOwotICAgICAgICAgICAgaWYgKGxvbmdfaW5jcmVtZW50X292ZXJmbG93KCZ5LCAxKSkKKyAgICAgICAgICAgIGlmIChpbmNyZW1lbnRfb3ZlcmZsb3czMigmeSwgMSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIFdST05HOwogICAgICAgICB9CiAgICAgfQotICAgIGlmIChsb25nX2luY3JlbWVudF9vdmVyZmxvdygmeSwgLVRNX1lFQVJfQkFTRSkpCisgICAgaWYgKGluY3JlbWVudF9vdmVyZmxvdzMyKCZ5LCAtVE1fWUVBUl9CQVNFKSkKICAgICAgICAgcmV0dXJuIFdST05HOwogICAgIHlvdXJ0bS50bV95ZWFyID0geTsKICAgICBpZiAoeW91cnRtLnRtX3llYXIgIT0geSkKQEAgLTE5MDUsNyArMTgwMiw3IEBACiAgICAgICAgICAgICB0ID0gbG87CiAgICAgICAgIGVsc2UgaWYgKHQgPiBoaSkKICAgICAgICAgICAgIHQgPSBoaTsKLSAgICAgICAgaWYgKCgqZnVuY3ApKCZ0LCBvZmZzZXQsICZteXRtKSA9PSBOVUxMKSB7CisgICAgICAgIGlmICgoKmZ1bmNwKSgmdCwgb2Zmc2V0LCAmbXl0bSwgc3ApID09IE5VTEwpIHsgLy8gYW5kcm9pZC1jaGFuZ2VkOiBhZGRlZCBzcC4KICAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAqKiBBc3N1bWUgdGhhdCB0IGlzIHRvbyBleHRyZW1lIHRvIGJlIHJlcHJlc2VudGVkIGluCiAgICAgICAgICAgICAqKiBhIHN0cnVjdCB0bTsgYXJyYW5nZSB0aGluZ3Mgc28gdGhhdCBpdCBpcyBsZXNzCkBAIC0xOTE1LDE0ICsxODEyLDE0IEBACiAgICAgICAgIH0gZWxzZSAgZGlyID0gdG1jb21wKCZteXRtLCAmeW91cnRtKTsKICAgICAgICAgaWYgKGRpciAhPSAwKSB7CiAgICAgICAgICAgICBpZiAodCA9PSBsbykgewotICAgICAgICAgICAgICAgIGlmICh0ID09IFRJTUVfVF9NQVgpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBXUk9ORzsKICAgICAgICAgICAgICAgICArK3Q7CisgICAgICAgICAgICAgICAgaWYgKHQgPD0gbG8pCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBXUk9ORzsKICAgICAgICAgICAgICAgICArK2xvOwogICAgICAgICAgICAgfSBlbHNlIGlmICh0ID09IGhpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHQgPT0gVElNRV9UX01JTikKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFdST05HOwogICAgICAgICAgICAgICAgIC0tdDsKKyAgICAgICAgICAgICAgICBpZiAodCA+PSBoaSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFdST05HOwogICAgICAgICAgICAgICAgIC0taGk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAobG8gPiBoaSkKQEAgLTE5NDAsMTIgKzE4MzcsMTIgQEAKICAgICAgICAgKiogSXQncyBva2F5IHRvIGd1ZXNzIHdyb25nIHNpbmNlIHRoZSBndWVzcwogICAgICAgICAqKiBnZXRzIGNoZWNrZWQuCiAgICAgICAgICovCi0gICAgICAgIC8qCi0gICAgICAgICoqIFRoZSAodm9pZCAqKSBjYXN0cyBhcmUgdGhlIGJlbmVmaXQgb2YgU3VuT1MgMy4zIG9uIFN1biAyJ3MuCi0gICAgICAgICovCi0gICAgICAgIHNwID0gKGNvbnN0IHN0cnVjdCBzdGF0ZSAqKQotICAgICAgICAgICAgKCgodm9pZCAqKSBmdW5jcCA9PSAodm9pZCAqKSBsb2NhbHN1YikgPwotICAgICAgICAgICAgbGNscHRyIDogZ210cHRyKTsKKyAgICAgICAgLy8gQkVHSU4gYW5kcm9pZC1jaGFuZ2VkOiBzdXBwb3J0IHVzZXItc3VwcGxpZWQgc3AKKyAgICAgICAgaWYgKHNwID09IE5VTEwpIHsKKyAgICAgICAgICAgIHNwID0gKGNvbnN0IHN0cnVjdCBzdGF0ZSAqKQorICAgICAgICAgICAgICAgICgoZnVuY3AgPT0gbG9jYWxzdWIpID8gbGNscHRyIDogZ210cHRyKTsKKyAgICAgICAgfQorICAgICAgICAvLyBFTkQgYW5kcm9pZC1jaGFuZ2VkCiAjaWZkZWYgQUxMX1NUQVRFCiAgICAgICAgIGlmIChzcCA9PSBOVUxMKQogICAgICAgICAgICAgcmV0dXJuIFdST05HOwpAQCAtMTk1OCw3ICsxODU1LDcgQEAKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgbmV3dCA9IHQgKyBzcC0+dHRpc1tqXS50dF9nbXRvZmYgLQogICAgICAgICAgICAgICAgICAgICBzcC0+dHRpc1tpXS50dF9nbXRvZmY7Ci0gICAgICAgICAgICAgICAgaWYgKCgqZnVuY3ApKCZuZXd0LCBvZmZzZXQsICZteXRtKSA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGlmICgoKmZ1bmNwKSgmbmV3dCwgb2Zmc2V0LCAmbXl0bSwgc3ApID09IE5VTEwpIC8vIGFuZHJvaWQtY2hhbmdlZDogYWRkZWQgc3AuCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIGlmICh0bWNvbXAoJm15dG0sICZ5b3VydG0pICE9IDApCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtMTk3OCwxNyArMTg3NSwxNiBAQAogICAgIGlmICgobmV3dCA8IHQpICE9IChzYXZlZF9zZWNvbmRzIDwgMCkpCiAgICAgICAgIHJldHVybiBXUk9ORzsKICAgICB0ID0gbmV3dDsKLSAgICBpZiAoKCpmdW5jcCkoJnQsIG9mZnNldCwgdG1wKSkKKyAgICBpZiAoKCpmdW5jcCkoJnQsIG9mZnNldCwgdG1wLCBzcCkpIC8vIGFuZHJvaWQtY2hhbmdlZDogYWRkZWQgc3AuCiAgICAgICAgICpva2F5cCA9IFRSVUU7CiAgICAgcmV0dXJuIHQ7CiB9CiAKIHN0YXRpYyB0aW1lX3QKLXRpbWUyKHRtcCwgZnVuY3AsIG9mZnNldCwgb2theXApCi1zdHJ1Y3QgdG0gKiBjb25zdCAgIHRtcDsKLXN0cnVjdCB0bSAqICgqIGNvbnN0ICAgIGZ1bmNwKSBQKChjb25zdCB0aW1lX3QqLCBsb25nLCBzdHJ1Y3QgdG0qKSk7Ci1jb25zdCBsb25nICAgICAgb2Zmc2V0OwotaW50ICogY29uc3QgICAgIG9rYXlwOwordGltZTIoc3RydWN0IHRtICogY29uc3QgdG1wLAorICAgICAgc3RydWN0IHRtICogKCpjb25zdCBmdW5jcCkoY29uc3QgdGltZV90ICosIGludF9mYXN0MzJfdCwgc3RydWN0IHRtICosIGNvbnN0IHN0cnVjdCBzdGF0ZSAqKSwgLy8gYW5kcm9pZC1jaGFuZ2VkOiBhZGRlZCBzcC4KKyAgICAgIGNvbnN0IGludF9mYXN0MzJfdCBvZmZzZXQsCisgICAgICBpbnQgKmNvbnN0IG9rYXlwLCBjb25zdCBzdHJ1Y3Qgc3RhdGUqIHNwKSAvLyBhbmRyb2lkLWNoYW5nZWQ6IGFkZGVkIHNwLgogewogICAgIHRpbWVfdCAgdDsKIApAQCAtMTk5NywxOCArMTg5MywxNiBAQAogICAgICoqIChpbiBjYXNlIHRtX3NlYyBjb250YWlucyBhIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCBhIGxlYXAgc2Vjb25kKS4KICAgICAqKiBJZiB0aGF0IGZhaWxzLCB0cnkgd2l0aCBub3JtYWxpemF0aW9uIG9mIHNlY29uZHMuCiAgICAgKi8KLSAgICB0ID0gdGltZTJzdWIodG1wLCBmdW5jcCwgb2Zmc2V0LCBva2F5cCwgRkFMU0UpOwotICAgIHJldHVybiAqb2theXAgPyB0IDogdGltZTJzdWIodG1wLCBmdW5jcCwgb2Zmc2V0LCBva2F5cCwgVFJVRSk7CisgICAgdCA9IHRpbWUyc3ViKHRtcCwgZnVuY3AsIG9mZnNldCwgb2theXAsIEZBTFNFLCBzcCk7CisgICAgcmV0dXJuICpva2F5cCA/IHQgOiB0aW1lMnN1Yih0bXAsIGZ1bmNwLCBvZmZzZXQsIG9rYXlwLCBUUlVFLCBzcCk7CiB9CiAKIHN0YXRpYyB0aW1lX3QKLXRpbWUxKHRtcCwgZnVuY3AsIG9mZnNldCkKLXN0cnVjdCB0bSAqIGNvbnN0ICAgdG1wOwotc3RydWN0IHRtICogKCogY29uc3QgICAgZnVuY3ApIFAoKGNvbnN0IHRpbWVfdCAqLCBsb25nLCBzdHJ1Y3QgdG0gKikpOwotY29uc3QgbG9uZyAgICAgIG9mZnNldDsKK3RpbWUxKHN0cnVjdCB0bSAqIGNvbnN0IHRtcCwKKyAgICAgIHN0cnVjdCB0bSAqICgqIGNvbnN0IGZ1bmNwKSAoY29uc3QgdGltZV90ICosIGludF9mYXN0MzJfdCwgc3RydWN0IHRtICosIGNvbnN0IHN0cnVjdCBzdGF0ZSAqKSwgLy8gYW5kcm9pZC1jaGFuZ2VkOiBhZGRlZCBzcC4KKyAgICAgIGNvbnN0IGludF9mYXN0MzJfdCBvZmZzZXQsIGNvbnN0IHN0cnVjdCBzdGF0ZSAqIHNwKSAvLyBhbmRyb2lkLWNoYW5nZWQ6IGFkZGVkIHNwLgogewogICAgIHJlZ2lzdGVyIHRpbWVfdCAgICAgICAgIHQ7Ci0gICAgcmVnaXN0ZXIgY29uc3Qgc3RydWN0IHN0YXRlICogICBzcDsKICAgICByZWdpc3RlciBpbnQgICAgICAgICAgICBzYW1laSwgb3RoZXJpOwogICAgIHJlZ2lzdGVyIGludCAgICAgICAgICAgIHNhbWVpbmQsIG90aGVyaW5kOwogICAgIHJlZ2lzdGVyIGludCAgICAgICAgICAgIGk7CkBAIC0yMDE3LDkgKzE5MTEsMTMgQEAKICAgICBpbnQgICAgICAgICAgICAgdHlwZXNbVFpfTUFYX1RZUEVTXTsKICAgICBpbnQgICAgICAgICAgICAgb2theTsKIAorICAgIGlmICh0bXAgPT0gTlVMTCkgeworICAgICAgICBlcnJubyA9IEVJTlZBTDsKKyAgICAgICAgcmV0dXJuIFdST05HOworICAgIH0KICAgICBpZiAodG1wLT50bV9pc2RzdCA+IDEpCiAgICAgICAgIHRtcC0+dG1faXNkc3QgPSAxOwotICAgIHQgPSB0aW1lMih0bXAsIGZ1bmNwLCBvZmZzZXQsICZva2F5KTsKKyAgICB0ID0gdGltZTIodG1wLCBmdW5jcCwgb2Zmc2V0LCAmb2theSwgc3ApOyAvLyBhbmRyb2lkLWNoYW5nZWQ6IGFkZGVkIHNwLgogI2lmZGVmIFBDVFMKICAgICAvKgogICAgICoqIFBDVFMgY29kZSBjb3VydGVzeSBHcmFudCBTdWxsaXZhbi4KQEAgLTIwMzksMTEgKzE5MzcsMTEgQEAKICAgICAqKiBXZSB0cnkgdG8gZGl2aW5lIHRoZSB0eXBlIHRoZXkgc3RhcnRlZCBmcm9tIGFuZCBhZGp1c3QgdG8gdGhlCiAgICAgKiogdHlwZSB0aGV5IG5lZWQuCiAgICAgKi8KLSAgICAvKgotICAgICoqIFRoZSAodm9pZCAqKSBjYXN0cyBhcmUgdGhlIGJlbmVmaXQgb2YgU3VuT1MgMy4zIG9uIFN1biAyJ3MuCi0gICAgKi8KLSAgICBzcCA9IChjb25zdCBzdHJ1Y3Qgc3RhdGUgKikgKCgodm9pZCAqKSBmdW5jcCA9PSAodm9pZCAqKSBsb2NhbHN1YikgPwotICAgICAgICBsY2xwdHIgOiBnbXRwdHIpOworICAgIC8vIEJFR0lOIGFuZHJvaWQtY2hhbmdlZDogc3VwcG9ydCB1c2VyLXN1cHBsaWVkIHNwLgorICAgIGlmIChzcCA9PSBOVUxMKSB7CisgICAgICAgIHNwID0gKGNvbnN0IHN0cnVjdCBzdGF0ZSAqKSAoKGZ1bmNwID09IGxvY2Fsc3ViKSA/ICBsY2xwdHIgOiBnbXRwdHIpOworICAgIH0KKyAgICAvLyBCRUdJTiBhbmRyb2lkLWNoYW5nZWQKICNpZmRlZiBBTExfU1RBVEUKICAgICBpZiAoc3AgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIFdST05HOwpAQCAtMjA2Nyw3ICsxOTY1LDcgQEAKICAgICAgICAgICAgIHRtcC0+dG1fc2VjICs9IHNwLT50dGlzW290aGVyaV0udHRfZ210b2ZmIC0KICAgICAgICAgICAgICAgICAgICAgc3AtPnR0aXNbc2FtZWldLnR0X2dtdG9mZjsKICAgICAgICAgICAgIHRtcC0+dG1faXNkc3QgPSAhdG1wLT50bV9pc2RzdDsKLSAgICAgICAgICAgIHQgPSB0aW1lMih0bXAsIGZ1bmNwLCBvZmZzZXQsICZva2F5KTsKKyAgICAgICAgICAgIHQgPSB0aW1lMih0bXAsIGZ1bmNwLCBvZmZzZXQsICZva2F5LCBzcCk7IC8vIGFuZHJvaWQtY2hhbmdlZDogYWRkZWQgc3AuCiAgICAgICAgICAgICBpZiAob2theSkKICAgICAgICAgICAgICAgICByZXR1cm4gdDsKICAgICAgICAgICAgIHRtcC0+dG1fc2VjIC09IHNwLT50dGlzW290aGVyaV0udHRfZ210b2ZmIC0KQEAgLTIwNzksMTMgKzE5NzcsMTEgQEAKIH0KIAogdGltZV90Ci1ta3RpbWUodG1wKQotc3RydWN0IHRtICogY29uc3QgICB0bXA7Citta3RpbWUoc3RydWN0IHRtICogY29uc3QgdG1wKQogewotICAgIHRpbWVfdCAgcmVzdWx0OwogICAgIF90ekxvY2soKTsKICAgICB0enNldF9sb2NrZWQoKTsKLSAgICByZXN1bHQgPSB0aW1lMSh0bXAsIGxvY2Fsc3ViLCAwTCk7CisgICAgdGltZV90IHJlc3VsdCA9IHRpbWUxKHRtcCwgbG9jYWxzdWIsIDBMLCBOVUxMKTsgLy8gYW5kcm9pZC1jaGFuZ2VkOiBleHRyYSBwYXJhbWV0ZXIuCiAgICAgX3R6VW5sb2NrKCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTIwOTMsNDQgKzE5ODksMjcgQEAKICNpZmRlZiBTVERfSU5TUElSRUQKIAogdGltZV90Ci10aW1lbG9jYWwodG1wKQotc3RydWN0IHRtICogY29uc3QgICB0bXA7Cit0aW1lbG9jYWwoc3RydWN0IHRtICogY29uc3QgdG1wKQogewotICAgIHRtcC0+dG1faXNkc3QgPSAtMTsgLyogaW4gY2FzZSBpdCB3YXNuJ3QgaW5pdGlhbGl6ZWQgKi8KKyAgICBpZiAodG1wICE9IE5VTEwpCisgICAgICAgIHRtcC0+dG1faXNkc3QgPSAtMTsgLyogaW4gY2FzZSBpdCB3YXNuJ3QgaW5pdGlhbGl6ZWQgKi8KICAgICByZXR1cm4gbWt0aW1lKHRtcCk7CiB9CiAKIHRpbWVfdAotdGltZWdtKHRtcCkKLXN0cnVjdCB0bSAqIGNvbnN0ICAgdG1wOwordGltZWdtKHN0cnVjdCB0bSAqIGNvbnN0IHRtcCkKIHsKICAgICB0aW1lX3QgIHJlc3VsdDsKIAotICAgIHRtcC0+dG1faXNkc3QgPSAwOworICAgIGlmICh0bXAgIT0gTlVMTCkKKyAgICAgICAgdG1wLT50bV9pc2RzdCA9IDA7CiAgICAgX3R6TG9jaygpOwotICAgIHJlc3VsdCA9IHRpbWUxKHRtcCwgZ210c3ViLCAwTCk7CisgICAgcmVzdWx0ID0gdGltZTEodG1wLCBnbXRzdWIsIDBMLCBOVUxMKTsgLy8gYW5kcm9pZC1jaGFuZ2VkOiBleHRyYSBwYXJhbWV0ZXIuCiAgICAgX3R6VW5sb2NrKCk7CiAKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi0jaWYgMCAvKiBkaXNhYmxlIGR1ZSB0byBsYWNrIG9mIGNsZWFyIGRvY3VtZW50YXRpb24gb24gdGhpcyBmdW5jdGlvbiAqLwotdGltZV90Ci10aW1lb2ZmKHRtcCwgb2Zmc2V0KQotc3RydWN0IHRtICogY29uc3QgICB0bXA7Ci1jb25zdCBsb25nICAgICAgb2Zmc2V0OwotewotICAgIHRpbWVfdCAgcmVzdWx0OwotCi0gICAgdG1wLT50bV9pc2RzdCA9IDA7Ci0gICAgX3R6TG9jaygpOwotICAgIHJlc3VsdCA9IHRpbWUxKHRtcCwgZ210c3ViLCBvZmZzZXQpOwotICAgIF90elVubG9jaygpOwotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLSNlbmRpZiAvKiAwICovCi0KICNlbmRpZiAvKiBkZWZpbmVkIFNURF9JTlNQSVJFRCAqLwogCiAjaWZkZWYgQ01VQ1MKQEAgLTIxNDAsOSArMjAxOSw4IEBACiAqKiBwcmV2aW91cyB2ZXJzaW9ucyBvZiB0aGUgQ01VQ1MgcnVudGltZSBsaWJyYXJ5LgogKi8KIAotbG9uZwotZ3RpbWUodG1wKQotc3RydWN0IHRtICogY29uc3QgICB0bXA7CitpbnRfZmFzdDMyX3QKK2d0aW1lKHN0cnVjdCB0bSAqIGNvbnN0IHRtcCkKIHsKICAgICBjb25zdCB0aW1lX3QgICAgdCA9IG1rdGltZSh0bXApOwogCkBAIC0yMTY3LDkgKzIwNDUsOCBAQAogKiogd2hlbiBleGNoYW5naW5nIHRpbWVzdGFtcHMgd2l0aCBQT1NJWCBjb25mb3JtaW5nIHN5c3RlbXMuCiAqLwogCi1zdGF0aWMgbG9uZwotbGVhcGNvcnIodGltZXApCi10aW1lX3QgKiAgICB0aW1lcDsKK3N0YXRpYyBpbnRfZmFzdDY0X3QKK2xlYXBjb3JyKHRpbWVfdCAqIHRpbWVwKQogewogICAgIHJlZ2lzdGVyIHN0cnVjdCBzdGF0ZSAqICAgICBzcDsKICAgICByZWdpc3RlciBzdHJ1Y3QgbHNpbmZvICogICAgbHA7CkBAIC0yMTg2LDE2ICsyMDYzLDE0IEBACiB9CiAKIHRpbWVfdAotdGltZTJwb3NpeCh0KQotdGltZV90ICB0OwordGltZTJwb3NpeCh0aW1lX3QgdCkKIHsKICAgICB0enNldCgpOwogICAgIHJldHVybiB0IC0gbGVhcGNvcnIoJnQpOwogfQogCiB0aW1lX3QKLXBvc2l4MnRpbWUodCkKLXRpbWVfdCAgdDsKK3Bvc2l4MnRpbWUodGltZV90IHQpCiB7CiAgICAgdGltZV90ICB4OwogICAgIHRpbWVfdCAgeTsKQEAgLTIyMjgsMyArMjEwMywxNjQgQEAKIH0KIAogI2VuZGlmIC8qIGRlZmluZWQgU1REX0lOU1BJUkVEICovCisKKy8vIEJFR0lOIGFuZHJvaWQtYWRkZWQKKworI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPGFycGEvaW5ldC5oPiAvLyBGb3IgbnRvaGwoMykuCisKK3N0YXRpYyBpbnQgdG9faW50KHVuc2lnbmVkIGNoYXIqIHMpIHsKKyAgcmV0dXJuIChzWzBdIDw8IDI0KSB8IChzWzFdIDw8IDE2KSB8IChzWzJdIDw8IDgpIHwgc1szXTsKK30KKworc3RhdGljIGludCBfX2Jpb25pY19vcGVuX3R6ZGF0YV9wYXRoKGNvbnN0IGNoYXIqIHBhdGgsIGNvbnN0IGNoYXIqIG9sc29uX2lkLCBpbnQqIGRhdGFfc2l6ZSkgeworICBpbnQgZmQgPSBURU1QX0ZBSUxVUkVfUkVUUlkob3BlbihwYXRoLCBPUEVOX01PREUpKTsKKyAgaWYgKGZkID09IC0xKSB7CisgICAgWExPRygoIiVzOiBjb3VsZCBub3Qgb3BlbiBcIiVzXCI6ICVzXG4iLCBfX0ZVTkNUSU9OX18sIHBhdGgsIHN0cmVycm9yKGVycm5vKSkpOworICAgIHJldHVybiAtMjsgLy8gRGlzdGluZ3Vpc2ggZmFpbHVyZSB0byBmaW5kIGFueSBkYXRhIGZyb20gZmFpbHVyZSB0byBmaW5kIGEgc3BlY2lmaWMgaWQuCisgIH0KKworICAvLyBieXRlWzEyXSB0emRhdGFfdmVyc2lvbiAgLS0gInR6ZGF0YTIwMTJmXDAiCisgIC8vIGludCBpbmRleF9vZmZzZXQKKyAgLy8gaW50IGRhdGFfb2Zmc2V0CisgIC8vIGludCB6b25ldGFiX29mZnNldAorICBzdHJ1Y3QgYmlvbmljX3R6ZGF0YV9oZWFkZXIgeworICAgIGNoYXIgdHpkYXRhX3ZlcnNpb25bMTJdOworICAgIGludDMyX3QgaW5kZXhfb2Zmc2V0OworICAgIGludDMyX3QgZGF0YV9vZmZzZXQ7CisgICAgaW50MzJfdCB6b25ldGFiX29mZnNldDsKKyAgfSBoZWFkZXI7CisgIG1lbXNldCgmaGVhZGVyLCAwLCBzaXplb2YoaGVhZGVyKSk7CisgIHNzaXplX3QgYnl0ZXNfcmVhZCA9IFRFTVBfRkFJTFVSRV9SRVRSWShyZWFkKGZkLCAmaGVhZGVyLCBzaXplb2YoaGVhZGVyKSkpOworICBpZiAoYnl0ZXNfcmVhZCAhPSBzaXplb2YoaGVhZGVyKSkgeworICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IGNvdWxkIG5vdCByZWFkIGhlYWRlciBvZiBcIiVzXCI6ICVzXG4iLAorICAgICAgICAgICAgX19GVU5DVElPTl9fLCBwYXRoLCAoYnl0ZXNfcmVhZCA9PSAtMSkgPyBzdHJlcnJvcihlcnJubykgOiAic2hvcnQgcmVhZCIpOworICAgIGNsb3NlKGZkKTsKKyAgICByZXR1cm4gLTE7CisgIH0KKworICBpZiAoc3RybmNtcChoZWFkZXIudHpkYXRhX3ZlcnNpb24sICJ0emRhdGEiLCA2KSAhPSAwIHx8IGhlYWRlci50emRhdGFfdmVyc2lvblsxMV0gIT0gMCkgeworICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IGJhZCBtYWdpYyBpbiBcIiVzXCI6IFwiJS42c1wiXG4iLAorICAgICAgICAgICAgX19GVU5DVElPTl9fLCBwYXRoLCBoZWFkZXIudHpkYXRhX3ZlcnNpb24pOworICAgIGNsb3NlKGZkKTsKKyAgICByZXR1cm4gLTE7CisgIH0KKworI2lmIDAKKyAgZnByaW50ZihzdGRlcnIsICJ2ZXJzaW9uOiAlc1xuIiwgaGVhZGVyLnR6ZGF0YV92ZXJzaW9uKTsKKyAgZnByaW50ZihzdGRlcnIsICJpbmRleF9vZmZzZXQgPSAlZFxuIiwgbnRvaGwoaGVhZGVyLmluZGV4X29mZnNldCkpOworICBmcHJpbnRmKHN0ZGVyciwgImRhdGFfb2Zmc2V0ID0gJWRcbiIsIG50b2hsKGhlYWRlci5kYXRhX29mZnNldCkpOworICBmcHJpbnRmKHN0ZGVyciwgInpvbmV0YWJfb2Zmc2V0ID0gJWRcbiIsIG50b2hsKGhlYWRlci56b25ldGFiX29mZnNldCkpOworI2VuZGlmCisKKyAgaWYgKFRFTVBfRkFJTFVSRV9SRVRSWShsc2VlayhmZCwgbnRvaGwoaGVhZGVyLmluZGV4X29mZnNldCksIFNFRUtfU0VUKSkgPT0gLTEpIHsKKyAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBjb3VsZG4ndCBzZWVrIHRvIGluZGV4IGluIFwiJXNcIjogJXNcbiIsCisgICAgICAgICAgICBfX0ZVTkNUSU9OX18sIHBhdGgsIHN0cmVycm9yKGVycm5vKSk7CisgICAgY2xvc2UoZmQpOworICAgIHJldHVybiAtMTsKKyAgfQorCisgIG9mZl90IHNwZWNpZmljX3pvbmVfb2Zmc2V0ID0gLTE7CisKKyAgc3RhdGljIGNvbnN0IHNpemVfdCBOQU1FX0xFTkdUSCA9IDQwOworICB1bnNpZ25lZCBjaGFyIGJ1ZltOQU1FX0xFTkdUSCArIDMgKiBzaXplb2YoaW50MzJfdCldOworCisgIHNpemVfdCBpZF9jb3VudCA9IChudG9obChoZWFkZXIuZGF0YV9vZmZzZXQpIC0gbnRvaGwoaGVhZGVyLmluZGV4X29mZnNldCkpIC8gc2l6ZW9mKGJ1Zik7CisgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaWRfY291bnQ7ICsraSkgeworICAgIGlmIChURU1QX0ZBSUxVUkVfUkVUUlkocmVhZChmZCwgYnVmLCBzaXplb2YoYnVmKSkpICE9IChzc2l6ZV90KSBzaXplb2YoYnVmKSkgeworICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2hhciB0aGlzX2lkW05BTUVfTEVOR1RIICsgMV07CisgICAgbWVtY3B5KHRoaXNfaWQsIGJ1ZiwgTkFNRV9MRU5HVEgpOworICAgIHRoaXNfaWRbTkFNRV9MRU5HVEhdID0gJ1wwJzsKKworICAgIGlmIChzdHJjbXAodGhpc19pZCwgb2xzb25faWQpID09IDApIHsKKyAgICAgIHNwZWNpZmljX3pvbmVfb2Zmc2V0ID0gdG9faW50KGJ1ZiArIE5BTUVfTEVOR1RIKSArIG50b2hsKGhlYWRlci5kYXRhX29mZnNldCk7CisgICAgICAqZGF0YV9zaXplID0gdG9faW50KGJ1ZiArIE5BTUVfTEVOR1RIICsgc2l6ZW9mKGludDMyX3QpKTsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgfQorCisgIGlmIChzcGVjaWZpY196b25lX29mZnNldCA9PSAtMSkgeworICAgIFhMT0coKCIlczogY291bGRuJ3QgZmluZCB6b25lIFwiJXNcIlxuIiwgX19GVU5DVElPTl9fLCBvbHNvbl9pZCkpOworICAgIGNsb3NlKGZkKTsKKyAgICByZXR1cm4gLTE7CisgIH0KKworICBpZiAoVEVNUF9GQUlMVVJFX1JFVFJZKGxzZWVrKGZkLCBzcGVjaWZpY196b25lX29mZnNldCwgU0VFS19TRVQpKSA9PSAtMSkgeworICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IGNvdWxkIG5vdCBzZWVrIHRvICVsZCBpbiBcIiVzXCI6ICVzXG4iLAorICAgICAgICAgICAgX19GVU5DVElPTl9fLCBzcGVjaWZpY196b25lX29mZnNldCwgcGF0aCwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICBjbG9zZShmZCk7CisgICAgcmV0dXJuIC0xOworICB9CisKKyAgLy8gVE9ETzogY2hlY2sgdGhhdCB0aGVyZSdzIFRaX01BR0lDIGF0IHRoaXMgb2Zmc2V0LCBzbyB3ZSBjYW4gZmFsbCBiYWNrIHRvIHRoZSBvdGhlciBmaWxlIGlmIG5vdC4KKworICByZXR1cm4gZmQ7Cit9CisKK3N0YXRpYyBpbnQgX19iaW9uaWNfb3Blbl90emRhdGEoY29uc3QgY2hhciogb2xzb25faWQsIGludCogZGF0YV9zaXplKSB7CisgIC8vIFRPRE86IHVzZSAkQU5EUk9JRF9EQVRBIGFuZCAkQU5EUk9JRF9ST09UIGxpa2UgbGliY29yZSwgdG8gc3VwcG9ydCBiaW9uaWMgb24gdGhlIGhvc3QuCisgIGludCBmZCA9IF9fYmlvbmljX29wZW5fdHpkYXRhX3BhdGgoIi9kYXRhL21pc2Mvem9uZWluZm8vdHpkYXRhIiwgb2xzb25faWQsIGRhdGFfc2l6ZSk7CisgIGlmIChmZCA8IDApIHsKKyAgICBmZCA9IF9fYmlvbmljX29wZW5fdHpkYXRhX3BhdGgoIi9zeXN0ZW0vdXNyL3NoYXJlL3pvbmVpbmZvL3R6ZGF0YSIsIG9sc29uX2lkLCBkYXRhX3NpemUpOworICAgIGlmIChmZCA9PSAtMikgeworICAgICAgLy8gVGhlIGZpcnN0IHRoaW5nIHRoYXQgJ3JlY292ZXJ5JyBkb2VzIGlzIHRyeSB0byBmb3JtYXQgdGhlIGN1cnJlbnQgdGltZS4gSXQgZG9lc24ndCBoYXZlCisgICAgICAvLyBhbnkgdHpkYXRhIGF2YWlsYWJsZSwgc28gd2UgbXVzdCBub3QgYWJvcnQgaGVyZSAtLS0gZG9pbmcgc28gYnJlYWtzIHRoZSByZWNvdmVyeSBpbWFnZSEKKyAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IGNvdWxkbid0IGZpbmQgYW55IHR6ZGF0YSB3aGVuIGxvb2tpbmcgZm9yICVzIVxuIiwgX19GVU5DVElPTl9fLCBvbHNvbl9pZCk7CisgICAgfQorICB9CisgIHJldHVybiBmZDsKK30KKworLy8gQ2FjaGVzIHRoZSBtb3N0IHJlY2VudCB0aW1lem9uZSAoaHR0cDovL2IvODI3MDg2NSkuCitzdGF0aWMgaW50IF9fYmlvbmljX3R6bG9hZF9jYWNoZWQoY29uc3QgY2hhciogbmFtZSwgc3RydWN0IHN0YXRlKiBjb25zdCBzcCwgY29uc3QgaW50IGRvZXh0ZW5kKSB7CisgIF90ekxvY2soKTsKKworICAvLyBPdXIgc2luZ2xlLWl0ZW0gY2FjaGUuCisgIHN0YXRpYyBjaGFyKiBnQ2FjaGVkVGltZVpvbmVOYW1lOworICBzdGF0aWMgc3RydWN0IHN0YXRlIGdDYWNoZWRUaW1lWm9uZTsKKworICAvLyBEbyB3ZSBhbHJlYWR5IGhhdmUgdGhpcyB0aW1lem9uZSBjYWNoZWQ/CisgIGlmIChnQ2FjaGVkVGltZVpvbmVOYW1lICE9IE5VTEwgJiYgc3RyY21wKG5hbWUsIGdDYWNoZWRUaW1lWm9uZU5hbWUpID09IDApIHsKKyAgICAqc3AgPSBnQ2FjaGVkVGltZVpvbmU7CisgICAgX3R6VW5sb2NrKCk7CisgICAgcmV0dXJuIDA7CisgIH0KKworICAvLyBDYW4gd2UgbG9hZCBpdD8KKyAgaW50IHJjID0gdHpsb2FkKG5hbWUsIHNwLCBkb2V4dGVuZCk7CisgIGlmIChyYyA9PSAwKSB7CisgICAgLy8gVXBkYXRlIHRoZSBjYWNoZS4KKyAgICBmcmVlKGdDYWNoZWRUaW1lWm9uZU5hbWUpOworICAgIGdDYWNoZWRUaW1lWm9uZU5hbWUgPSBzdHJkdXAobmFtZSk7CisgICAgZ0NhY2hlZFRpbWVab25lID0gKnNwOworICB9CisKKyAgX3R6VW5sb2NrKCk7CisgIHJldHVybiByYzsKK30KKworLy8gTm9uLXN0YW5kYXJkIEFQSTogbWt0aW1lKDMpIGJ1dCB3aXRoIGFuIGV4cGxpY2l0IHRpbWV6b25lIHBhcmFtZXRlci4KK3RpbWVfdCBta3RpbWVfdHooc3RydWN0IHRtKiBjb25zdCB0bXAsIGNvbnN0IGNoYXIqIHR6KSB7CisgIHN0cnVjdCBzdGF0ZSBzdDsKKyAgaWYgKF9fYmlvbmljX3R6bG9hZF9jYWNoZWQodHosICZzdCwgVFJVRSkgIT0gMCkgeworICAgIC8vIFRPRE86IG5vdCBzdXJlIHdoYXQncyBiZXN0IGhlcmUsIGJ1dCBmb3Igbm93LCB3ZSBmYWxsIGJhY2sgdG8gZ210LgorICAgIGdtdGxvYWQoJnN0KTsKKyAgfQorICByZXR1cm4gdGltZTEodG1wLCBsb2NhbHN1YiwgMEwsICZzdCk7Cit9CisKKy8vIE5vbi1zdGFuZGFyZCBBUEk6IGxvY2FsdGltZSgzKSBidXQgd2l0aCBhbiBleHBsaWNpdCB0aW1lem9uZSBwYXJhbWV0ZXIuCit2b2lkIGxvY2FsdGltZV90eihjb25zdCB0aW1lX3QqIGNvbnN0IHRpbWVwLCBzdHJ1Y3QgdG0qIHRtcCwgY29uc3QgY2hhciogdHopIHsKKyAgc3RydWN0IHN0YXRlIHN0OworICBpZiAoX19iaW9uaWNfdHpsb2FkX2NhY2hlZCh0eiwgJnN0LCBUUlVFKSAhPSAwKSB7CisgICAgLy8gVE9ETzogbm90IHN1cmUgd2hhdCdzIGJlc3QgaGVyZSwgYnV0IGZvciBub3csIHdlIGZhbGwgYmFjayB0byBnbXQuCisgICAgZ210bG9hZCgmc3QpOworICB9CisgIGxvY2Fsc3ViKHRpbWVwLCAwTCwgdG1wLCAmc3QpOworfQorCisvLyBFTkQgYW5kcm9pZC1hZGRlZApkaWZmIC0tZ2l0IGEvbGliYy90emNvZGUvcHJpdmF0ZS5oIGIvbGliYy90emNvZGUvcHJpdmF0ZS5oCmluZGV4IGU4MmE2NTUuLmEzMWEyNmUgMTAwNjQ0Ci0tLSBhL2xpYmMvdHpjb2RlL3ByaXZhdGUuaAorKysgYi9saWJjL3R6Y29kZS9wcml2YXRlLmgKQEAgLTE1LDE3ICsxNSw3IEBACiAqKiBUaGFuayB5b3UhCiAqLwogCi0vKgotKiogSUQKLSovCi0KLSNpZm5kZWYgbGludAotI2lmbmRlZiBOT0lECi1zdGF0aWMgY2hhciBwcml2YXRlaGlkW10gPSAiQCgjKXByaXZhdGUuaCAgIDguMiI7Ci0jZW5kaWYgLyogIWRlZmluZWQgTk9JRCAqLwotI2VuZGlmIC8qICFkZWZpbmVkIGxpbnQgKi8KLQotI2RlZmluZSBHUkFORFBBUkVOVEVEICAgIkxvY2FsIHRpbWUgem9uZSBtdXN0IGJlIHNldC0tc2VlIHppYyBtYW51YWwgcGFnZSIKKyNkZWZpbmUgR1JBTkRQQVJFTlRFRAkiTG9jYWwgdGltZSB6b25lIG11c3QgYmUgc2V0LS1zZWUgemljIG1hbnVhbCBwYWdlIgogCiAvKgogKiogRGVmYXVsdHMgZm9yIHByZXByb2Nlc3NvciBzeW1ib2xzLgpAQCAtMzMsNDUgKzIzLDQ1IEBACiAqLwogCiAjaWZuZGVmIEhBVkVfQURKVElNRQotI2RlZmluZSBIQVZFX0FESlRJTUUgICAgICAgIDEKKyNkZWZpbmUgSEFWRV9BREpUSU1FCQkxCiAjZW5kaWYgLyogIWRlZmluZWQgSEFWRV9BREpUSU1FICovCiAKICNpZm5kZWYgSEFWRV9HRVRURVhUCi0jZGVmaW5lIEhBVkVfR0VUVEVYVCAgICAgICAgMAorI2RlZmluZSBIQVZFX0dFVFRFWFQJCTAKICNlbmRpZiAvKiAhZGVmaW5lZCBIQVZFX0dFVFRFWFQgKi8KIAogI2lmbmRlZiBIQVZFX0lOQ09NUEFUSUJMRV9DVElNRV9SCi0jZGVmaW5lIEhBVkVfSU5DT01QQVRJQkxFX0NUSU1FX1IgICAwCisjZGVmaW5lIEhBVkVfSU5DT01QQVRJQkxFX0NUSU1FX1IJMAogI2VuZGlmIC8qICFkZWZpbmVkIElOQ09NUEFUSUJMRV9DVElNRV9SICovCiAKICNpZm5kZWYgSEFWRV9TRVRUSU1FT0ZEQVkKLSNkZWZpbmUgSEFWRV9TRVRUSU1FT0ZEQVkgICAzCisjZGVmaW5lIEhBVkVfU0VUVElNRU9GREFZCTMKICNlbmRpZiAvKiAhZGVmaW5lZCBIQVZFX1NFVFRJTUVPRkRBWSAqLwogCi0jaWZuZGVmIEhBVkVfU1RSRVJST1IKLSNkZWZpbmUgSEFWRV9TVFJFUlJPUiAgICAgICAxCi0jZW5kaWYgLyogIWRlZmluZWQgSEFWRV9TVFJFUlJPUiAqLwotCiAjaWZuZGVmIEhBVkVfU1lNTElOSwotI2RlZmluZSBIQVZFX1NZTUxJTksgICAgICAgIDEKKyNkZWZpbmUgSEFWRV9TWU1MSU5LCQkxCiAjZW5kaWYgLyogIWRlZmluZWQgSEFWRV9TWU1MSU5LICovCiAKICNpZm5kZWYgSEFWRV9TWVNfU1RBVF9ICi0jZGVmaW5lIEhBVkVfU1lTX1NUQVRfSCAgICAgMQorI2RlZmluZSBIQVZFX1NZU19TVEFUX0gJCTEKICNlbmRpZiAvKiAhZGVmaW5lZCBIQVZFX1NZU19TVEFUX0ggKi8KIAogI2lmbmRlZiBIQVZFX1NZU19XQUlUX0gKLSNkZWZpbmUgSEFWRV9TWVNfV0FJVF9IICAgICAxCisjZGVmaW5lIEhBVkVfU1lTX1dBSVRfSAkJMQogI2VuZGlmIC8qICFkZWZpbmVkIEhBVkVfU1lTX1dBSVRfSCAqLwogCiAjaWZuZGVmIEhBVkVfVU5JU1REX0gKLSNkZWZpbmUgSEFWRV9VTklTVERfSCAgICAgICAxCisjZGVmaW5lIEhBVkVfVU5JU1REX0gJCTEKICNlbmRpZiAvKiAhZGVmaW5lZCBIQVZFX1VOSVNURF9IICovCiAKICNpZm5kZWYgSEFWRV9VVE1QWF9ICi0jZGVmaW5lIEhBVkVfVVRNUFhfSCAgICAgICAgMAorI2RlZmluZSBIQVZFX1VUTVBYX0gJCTAKICNlbmRpZiAvKiAhZGVmaW5lZCBIQVZFX1VUTVBYX0ggKi8KIAorI2lmbmRlZiBMT0NBTEVfSE9NRQorI2RlZmluZSBMT0NBTEVfSE9NRQkJIi91c3IvbGliL2xvY2FsZSIKKyNlbmRpZiAvKiAhZGVmaW5lZCBMT0NBTEVfSE9NRSAqLworCiAjaWYgSEFWRV9JTkNPTVBBVElCTEVfQ1RJTUVfUgogI2RlZmluZSBhc2N0aW1lX3IgX2luY29tcGF0aWJsZV9hc2N0aW1lX3IKICNkZWZpbmUgY3RpbWVfciBfaW5jb21wYXRpYmxlX2N0aW1lX3IKQEAgLTgxLDExICs3MSwxMSBAQAogKiogTmVzdGVkIGluY2x1ZGVzCiAqLwogCi0jaW5jbHVkZSAic3lzL3R5cGVzLmgiICAvKiBmb3IgdGltZV90ICovCisjaW5jbHVkZSAic3lzL3R5cGVzLmgiCS8qIGZvciB0aW1lX3QgKi8KICNpbmNsdWRlICJzdGRpby5oIgogI2luY2x1ZGUgImVycm5vLmgiCiAjaW5jbHVkZSAic3RyaW5nLmgiCi0jaW5jbHVkZSAibGltaXRzLmgiIC8qIGZvciBDSEFSX0JJVCBldCBhbC4gKi8KKyNpbmNsdWRlICJsaW1pdHMuaCIJLyogZm9yIENIQVJfQklUIGV0IGFsLiAqLwogI2luY2x1ZGUgInRpbWUuaCIKICNpbmNsdWRlICJzdGRsaWIuaCIKIApAQCAtOTQsMjggKzg0LDI2IEBACiAjZW5kaWYgLyogSEFWRV9HRVRURVhUICovCiAKICNpZiBIQVZFX1NZU19XQUlUX0gKLSNpbmNsdWRlIDxzeXMvd2FpdC5oPiAgIC8qIGZvciBXSUZFWElURUQgYW5kIFdFWElUU1RBVFVTICovCisjaW5jbHVkZSA8c3lzL3dhaXQuaD4JLyogZm9yIFdJRkVYSVRFRCBhbmQgV0VYSVRTVEFUVVMgKi8KICNlbmRpZiAvKiBIQVZFX1NZU19XQUlUX0ggKi8KIAogI2lmbmRlZiBXSUZFWElURUQKLSNkZWZpbmUgV0lGRVhJVEVEKHN0YXR1cykgICAoKChzdGF0dXMpICYgMHhmZikgPT0gMCkKKyNkZWZpbmUgV0lGRVhJVEVEKHN0YXR1cykJKCgoc3RhdHVzKSAmIDB4ZmYpID09IDApCiAjZW5kaWYgLyogIWRlZmluZWQgV0lGRVhJVEVEICovCiAjaWZuZGVmIFdFWElUU1RBVFVTCi0jZGVmaW5lIFdFWElUU1RBVFVTKHN0YXR1cykgKCgoc3RhdHVzKSA+PiA4KSAmIDB4ZmYpCisjZGVmaW5lIFdFWElUU1RBVFVTKHN0YXR1cykJKCgoc3RhdHVzKSA+PiA4KSAmIDB4ZmYpCiAjZW5kaWYgLyogIWRlZmluZWQgV0VYSVRTVEFUVVMgKi8KIAogI2lmIEhBVkVfVU5JU1REX0gKLSNpbmNsdWRlICJ1bmlzdGQuaCIgLyogZm9yIEZfT0sgYW5kIFJfT0sgKi8KKyNpbmNsdWRlICJ1bmlzdGQuaCIJLyogZm9yIEZfT0ssIFJfT0ssIGFuZCBvdGhlciBQT1NJWCBnb29kbmVzcyAqLwogI2VuZGlmIC8qIEhBVkVfVU5JU1REX0ggKi8KIAotI2lmICFIQVZFX1VOSVNURF9ICiAjaWZuZGVmIEZfT0sKLSNkZWZpbmUgRl9PSyAgICAwCisjZGVmaW5lIEZfT0sJMAogI2VuZGlmIC8qICFkZWZpbmVkIEZfT0sgKi8KICNpZm5kZWYgUl9PSwotI2RlZmluZSBSX09LICAgIDQKKyNkZWZpbmUgUl9PSwk0CiAjZW5kaWYgLyogIWRlZmluZWQgUl9PSyAqLwotI2VuZGlmIC8qICFIQVZFX1VOSVNURF9IICovCiAKIC8qIFVubGlrZSA8Y3R5cGUuaD4ncyBpc2RpZ2l0LCB0aGlzIGFsc28gd29ya3MgaWYgYyA8IDAgfCBjID4gVUNIQVJfTUFYLiAqLwogI2RlZmluZSBpc19kaWdpdChjKSAoKHVuc2lnbmVkKShjKSAtICcwJyA8PSA5KQpAQCAtMTI4LDI3ICsxMTYsNzMgQEAKICovCiAjaWZuZGVmIEhBVkVfU1RESU5UX0gKICNkZWZpbmUgSEFWRV9TVERJTlRfSCBcCi0gICAgKDE5OTkwMSA8PSBfX1NURENfVkVSU0lPTl9fIHx8IFwKLSAgICAyIDwgKF9fR0xJQkNfXyArICgwIDwgX19HTElCQ19NSU5PUl9fKSkpCisJKDE5OTkwMSA8PSBfX1NURENfVkVSU0lPTl9fIHx8IFwKKwkyIDwgKF9fR0xJQkNfXyArICgwIDwgX19HTElCQ19NSU5PUl9fKSkpCiAjZW5kaWYgLyogIWRlZmluZWQgSEFWRV9TVERJTlRfSCAqLwogCiAjaWYgSEFWRV9TVERJTlRfSAogI2luY2x1ZGUgInN0ZGludC5oIgogI2VuZGlmIC8qICFIQVZFX1NURElOVF9IICovCiAKKyNpZm5kZWYgSEFWRV9JTlRUWVBFU19ICisjIGRlZmluZSBIQVZFX0lOVFRZUEVTX0ggSEFWRV9TVERJTlRfSAorI2VuZGlmCisjaWYgSEFWRV9JTlRUWVBFU19ICisjIGluY2x1ZGUgPGludHR5cGVzLmg+CisjZW5kaWYKKwogI2lmbmRlZiBJTlRfRkFTVDY0X01BWAogLyogUHJlLUM5OSBHQ0MgY29tcGlsZXJzIGRlZmluZSBfX0xPTkdfTE9OR19NQVhfXyBpbnN0ZWFkIG9mIExMT05HX01BWC4gICovCiAjaWYgZGVmaW5lZCBMTE9OR19NQVggfHwgZGVmaW5lZCBfX0xPTkdfTE9OR19NQVhfXwotdHlwZWRlZiBsb25nIGxvbmcgICBpbnRfZmFzdDY0X3Q7Cit0eXBlZGVmIGxvbmcgbG9uZwlpbnRfZmFzdDY0X3Q7CisjIGlmZGVmIExMT05HX01BWAorIyAgZGVmaW5lIElOVF9GQVNUNjRfTUlOIExMT05HX01JTgorIyAgZGVmaW5lIElOVF9GQVNUNjRfTUFYIExMT05HX01BWAorIyBlbHNlCisjICBkZWZpbmUgSU5UX0ZBU1Q2NF9NSU4gX19MT05HX0xPTkdfTUlOX18KKyMgIGRlZmluZSBJTlRfRkFTVDY0X01BWCBfX0xPTkdfTE9OR19NQVhfXworIyBlbmRpZgorIyBkZWZpbmUgU0NOZEZBU1Q2NCAibGxkIgogI2Vsc2UgLyogISAoZGVmaW5lZCBMTE9OR19NQVggfHwgZGVmaW5lZCBfX0xPTkdfTE9OR19NQVhfXykgKi8KICNpZiAoTE9OR19NQVggPj4gMzEpIDwgMHhmZmZmZmZmZgogUGxlYXNlIHVzZSBhIGNvbXBpbGVyIHRoYXQgc3VwcG9ydHMgYSA2NC1iaXQgaW50ZWdlciB0eXBlIChvciB3aWRlcik7CiB5b3UgbWF5IG5lZWQgdG8gY29tcGlsZSB3aXRoICItREhBVkVfU1RESU5UX0giLgogI2VuZGlmIC8qIChMT05HX01BWCA+PiAzMSkgPCAweGZmZmZmZmZmICovCi10eXBlZGVmIGxvbmcgICAgICAgIGludF9mYXN0NjRfdDsKK3R5cGVkZWYgbG9uZwkJaW50X2Zhc3Q2NF90OworIyBkZWZpbmUgSU5UX0ZBU1Q2NF9NSU4gTE9OR19NSU4KKyMgZGVmaW5lIElOVF9GQVNUNjRfTUFYIExPTkdfTUFYCisjIGRlZmluZSBTQ05kRkFTVDY0ICJsZCIKICNlbmRpZiAvKiAhIChkZWZpbmVkIExMT05HX01BWCB8fCBkZWZpbmVkIF9fTE9OR19MT05HX01BWF9fKSAqLwogI2VuZGlmIC8qICFkZWZpbmVkIElOVF9GQVNUNjRfTUFYICovCiAKKyNpZm5kZWYgSU5UX0ZBU1QzMl9NQVgKKyMgaWYgSU5UX01BWCA+PiAzMSA9PSAwCit0eXBlZGVmIGxvbmcgaW50X2Zhc3QzMl90OworIyBlbHNlCit0eXBlZGVmIGludCBpbnRfZmFzdDMyX3Q7CisjIGVuZGlmCisjZW5kaWYKKworI2lmbmRlZiBJTlRNQVhfTUFYCisjIGlmIGRlZmluZWQgTExPTkdfTUFYIHx8IGRlZmluZWQgX19MT05HX0xPTkdfTUFYX18KK3R5cGVkZWYgbG9uZyBsb25nIGludG1heF90OworIyAgZGVmaW5lIFBSSWRNQVggImxsZCIKKyMgZWxzZQordHlwZWRlZiBsb25nIGludG1heF90OworIyAgZGVmaW5lIFBSSWRNQVggImxkIgorIyBlbmRpZgorI2VuZGlmCisKKyNpZm5kZWYgVUlOVE1BWF9NQVgKKyMgaWYgZGVmaW5lZCBVTExPTkdfTUFYIHx8IGRlZmluZWQgX19MT05HX0xPTkdfTUFYX18KK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIHVpbnRtYXhfdDsKKyMgIGRlZmluZSBQUkl1TUFYICJsbHUiCisjIGVsc2UKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyB1aW50bWF4X3Q7CisjICBkZWZpbmUgUFJJdU1BWCAibHUiCisjIGVuZGlmCisjZW5kaWYKKwogI2lmbmRlZiBJTlQzMl9NQVgKICNkZWZpbmUgSU5UMzJfTUFYIDB4N2ZmZmZmZmYKICNlbmRpZiAvKiAhZGVmaW5lZCBJTlQzMl9NQVggKi8KQEAgLTE1NiwxMTEgKzE5MCwxMTQgQEAKICNkZWZpbmUgSU5UMzJfTUlOICgtMSAtIElOVDMyX01BWCkKICNlbmRpZiAvKiAhZGVmaW5lZCBJTlQzMl9NSU4gKi8KIAorI2lmIDIgPCBfX0dOVUNfXyArICg5NiA8PSBfX0dOVUNfTUlOT1JfXykKKyMgZGVmaW5lIEFUVFJJQlVURV9DT05TVCBfX2F0dHJpYnV0ZV9fICgoY29uc3QpKQorIyBkZWZpbmUgQVRUUklCVVRFX1BVUkUgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSkKKyNlbHNlCisjIGRlZmluZSBBVFRSSUJVVEVfQ09OU1QgLyogZW1wdHkgKi8KKyMgZGVmaW5lIEFUVFJJQlVURV9QVVJFIC8qIGVtcHR5ICovCisjZW5kaWYKKworI2lmICFkZWZpbmVkIF9Ob3JldHVybiAmJiBfX1NURENfVkVSU0lPTl9fIDwgMjAxMTEyCisjIGlmIDIgPCBfX0dOVUNfXyArICg4IDw9IF9fR05VQ19NSU5PUl9fKQorIyAgZGVmaW5lIF9Ob3JldHVybiBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSkKKyMgZWxzZQorIyAgZGVmaW5lIF9Ob3JldHVybgorIyBlbmRpZgorI2VuZGlmCisKKyNpZiBfX1NURENfVkVSU0lPTl9fIDwgMTk5OTAxICYmICFkZWZpbmVkIHJlc3RyaWN0CisjIGRlZmluZSByZXN0cmljdCAvKiBlbXB0eSAqLworI2VuZGlmCisKIC8qCiAqKiBXb3JrYXJvdW5kcyBmb3IgY29tcGlsZXJzL3N5c3RlbXMuCiAqLwogCiAvKgotKiogSWYgeW91ciBjb21waWxlciBsYWNrcyBwcm90b3R5cGVzLCAiI2RlZmluZSBQKHgpICgpIi4KLSovCi0KLSNpZm5kZWYgUAotI2RlZmluZSBQKHgpICAgIHgKLSNlbmRpZiAvKiAhZGVmaW5lZCBQICovCi0KLS8qCi0qKiBTdW5PUyA0LjEuMSBoZWFkZXJzIGxhY2sgRVhJVF9TVUNDRVNTLgotKi8KLQotI2lmbmRlZiBFWElUX1NVQ0NFU1MKLSNkZWZpbmUgRVhJVF9TVUNDRVNTICAgIDAKLSNlbmRpZiAvKiAhZGVmaW5lZCBFWElUX1NVQ0NFU1MgKi8KLQotLyoKLSoqIFN1bk9TIDQuMS4xIGhlYWRlcnMgbGFjayBFWElUX0ZBSUxVUkUuCi0qLwotCi0jaWZuZGVmIEVYSVRfRkFJTFVSRQotI2RlZmluZSBFWElUX0ZBSUxVUkUgICAgMQotI2VuZGlmIC8qICFkZWZpbmVkIEVYSVRfRkFJTFVSRSAqLwotCi0vKgotKiogU3VuT1MgNC4xLjEgaGVhZGVycyBsYWNrIEZJTEVOQU1FX01BWC4KLSovCi0KLSNpZm5kZWYgRklMRU5BTUVfTUFYCi0KLSNpZm5kZWYgTUFYUEFUSExFTgotI2lmZGVmIHVuaXgKLSNpbmNsdWRlICJzeXMvcGFyYW0uaCIKLSNlbmRpZiAvKiBkZWZpbmVkIHVuaXggKi8KLSNlbmRpZiAvKiAhZGVmaW5lZCBNQVhQQVRITEVOICovCi0KLSNpZmRlZiBNQVhQQVRITEVOCi0jZGVmaW5lIEZJTEVOQU1FX01BWCAgICBNQVhQQVRITEVOCi0jZW5kaWYgLyogZGVmaW5lZCBNQVhQQVRITEVOICovCi0jaWZuZGVmIE1BWFBBVEhMRU4KLSNkZWZpbmUgRklMRU5BTUVfTUFYICAgIDEwMjQgICAgICAgIC8qIFB1cmUgZ3Vlc3N3b3JrICovCi0jZW5kaWYgLyogIWRlZmluZWQgTUFYUEFUSExFTiAqLwotCi0jZW5kaWYgLyogIWRlZmluZWQgRklMRU5BTUVfTUFYICovCi0KLS8qCi0qKiBTdW5PUyA0LjEuMSBsaWJyYXJpZXMgbGFjayByZW1vdmUuCi0qLwotCi0jaWZuZGVmIHJlbW92ZQotZXh0ZXJuIGludCAgdW5saW5rIFAoKGNvbnN0IGNoYXIgKiBmaWxlbmFtZSkpOwotI2RlZmluZSByZW1vdmUgIHVubGluawotI2VuZGlmIC8qICFkZWZpbmVkIHJlbW92ZSAqLwotCi0vKgotKiogU29tZSBhbmNpZW50IGVycm5vLmggaW1wbGVtZW50YXRpb25zIGRvbid0IGRlY2xhcmUgZXJybm8uCi0qKiBCdXQgc29tZSBuZXdlciBlcnJuby5oIGltcGxlbWVudGF0aW9ucyBkZWZpbmUgaXQgYXMgYSBtYWNyby4KLSoqIEZpeCB0aGUgZm9ybWVyIHdpdGhvdXQgYWZmZWN0aW5nIHRoZSBsYXR0ZXIuCi0qLwotCi0jaWZuZGVmIGVycm5vCi1leHRlcm4gaW50IGVycm5vOwotI2VuZGlmIC8qICFkZWZpbmVkIGVycm5vICovCi0KLS8qCiAqKiBTb21lIHRpbWUuaCBpbXBsZW1lbnRhdGlvbnMgZG9uJ3QgZGVjbGFyZSBhc2N0aW1lX3IuCiAqKiBPdGhlcnMgbWlnaHQgZGVmaW5lIGl0IGFzIGEgbWFjcm8uCiAqKiBGaXggdGhlIGZvcm1lciB3aXRob3V0IGFmZmVjdGluZyB0aGUgbGF0dGVyLgogKi8KIAogI2lmbmRlZiBhc2N0aW1lX3IKLWV4dGVybiBjaGFyICogICBhc2N0aW1lX3IoKTsKK2V4dGVybiBjaGFyICoJYXNjdGltZV9yKHN0cnVjdCB0bSBjb25zdCAqLCBjaGFyICopOworI2VuZGlmCisKKy8qCisqKiBDb21waWxlIHdpdGggLUR0aW1lX3R6PVQgdG8gYnVpbGQgdGhlIHR6IHBhY2thZ2Ugd2l0aCBhIHByaXZhdGUKKyoqIHRpbWVfdCB0eXBlIGVxdWl2YWxlbnQgdG8gVCByYXRoZXIgdGhhbiB0aGUgc3lzdGVtLXN1cHBsaWVkIHRpbWVfdC4KKyoqIFRoaXMgZGVidWdnaW5nIGZlYXR1cmUgY2FuIHRlc3QgdW51c3VhbCBkZXNpZ24gZGVjaXNpb25zCisqKiAoZS5nLiwgdGltZV90IHdpZGVyIHRoYW4gJ2xvbmcnLCBvciB1bnNpZ25lZCB0aW1lX3QpIGV2ZW4gb24KKyoqIHR5cGljYWwgcGxhdGZvcm1zLgorKi8KKyNpZmRlZiB0aW1lX3R6CitzdGF0aWMgdGltZV90IHN5c190aW1lKHRpbWVfdCAqeCkgeyByZXR1cm4gdGltZSh4KTsgfQorCisjIHVuZGVmICBjdGltZQorIyBkZWZpbmUgY3RpbWUgdHpfY3RpbWUKKyMgdW5kZWYgIGN0aW1lX3IKKyMgZGVmaW5lIGN0aW1lX3IgdHpfY3RpbWVfcgorIyB1bmRlZiAgZGlmZnRpbWUKKyMgZGVmaW5lIGRpZmZ0aW1lIHR6X2RpZmZ0aW1lCisjIHVuZGVmICBnbXRpbWUKKyMgZGVmaW5lIGdtdGltZSB0el9nbXRpbWUKKyMgdW5kZWYgIGdtdGltZV9yCisjIGRlZmluZSBnbXRpbWVfciB0el9nbXRpbWVfcgorIyB1bmRlZiAgbG9jYWx0aW1lCisjIGRlZmluZSBsb2NhbHRpbWUgdHpfbG9jYWx0aW1lCisjIHVuZGVmICBsb2NhbHRpbWVfcgorIyBkZWZpbmUgbG9jYWx0aW1lX3IgdHpfbG9jYWx0aW1lX3IKKyMgdW5kZWYgIG1rdGltZQorIyBkZWZpbmUgbWt0aW1lIHR6X21rdGltZQorIyB1bmRlZiAgdGltZQorIyBkZWZpbmUgdGltZSB0el90aW1lCisjIHVuZGVmICB0aW1lX3QKKyMgZGVmaW5lIHRpbWVfdCB0el90aW1lX3QKKwordHlwZWRlZiB0aW1lX3R6IHRpbWVfdDsKKworY2hhciAqY3RpbWUodGltZV90IGNvbnN0ICopOworY2hhciAqY3RpbWVfcih0aW1lX3QgY29uc3QgKiwgY2hhciAqKTsKK2RvdWJsZSBkaWZmdGltZSh0aW1lX3QsIHRpbWVfdCk7CitzdHJ1Y3QgdG0gKmdtdGltZSh0aW1lX3QgY29uc3QgKik7CitzdHJ1Y3QgdG0gKmdtdGltZV9yKHRpbWVfdCBjb25zdCAqcmVzdHJpY3QsIHN0cnVjdCB0bSAqcmVzdHJpY3QpOworc3RydWN0IHRtICpsb2NhbHRpbWUodGltZV90IGNvbnN0ICopOworc3RydWN0IHRtICpsb2NhbHRpbWVfcih0aW1lX3QgY29uc3QgKnJlc3RyaWN0LCBzdHJ1Y3QgdG0gKnJlc3RyaWN0KTsKK3RpbWVfdCBta3RpbWUoc3RydWN0IHRtICopOworCitzdGF0aWMgdGltZV90Cit0aW1lKHRpbWVfdCAqcCkKK3sKKwl0aW1lX3QgciA9IHN5c190aW1lKDApOworCWlmIChwKQorCQkqcCA9IHI7CisJcmV0dXJuIHI7Cit9CiAjZW5kaWYKIAogLyoKICoqIFByaXZhdGUgZnVuY3Rpb24gZGVjbGFyYXRpb25zLgogKi8KIAotY2hhciAqICAgICAgaWNhbGxvYyBQKChpbnQgbmVsZW0sIGludCBlbHNpemUpKTsKLWNoYXIgKiAgICAgIGljYXRhbGxvYyBQKChjaGFyICogb2xkLCBjb25zdCBjaGFyICogbmV3KSk7Ci1jaGFyICogICAgICBpY3B5YWxsb2MgUCgoY29uc3QgY2hhciAqIHN0cmluZykpOwotY2hhciAqICAgICAgaW1hbGxvYyBQKChpbnQgbikpOwotdm9pZCAqICAgICAgaXJlYWxsb2MgUCgodm9pZCAqIHBvaW50ZXIsIGludCBzaXplKSk7Ci12b2lkICAgICAgICBpY2ZyZWUgUCgoY2hhciAqIHBvaW50ZXIpKTsKLXZvaWQgICAgICAgIGlmcmVlIFAoKGNoYXIgKiBwb2ludGVyKSk7Ci1jb25zdCBjaGFyICogICAgc2NoZWNrIFAoKGNvbnN0IGNoYXIgKiBzdHJpbmcsIGNvbnN0IGNoYXIgKiBmb3JtYXQpKTsKK2NoYXIgKgkJaWNhdGFsbG9jKGNoYXIgKiBvbGQsIGNvbnN0IGNoYXIgKiBuZXcpOworY2hhciAqCQlpY3B5YWxsb2MoY29uc3QgY2hhciAqIHN0cmluZyk7Citjb25zdCBjaGFyICoJc2NoZWNrKGNvbnN0IGNoYXIgKiBzdHJpbmcsIGNvbnN0IGNoYXIgKiBmb3JtYXQpOwogCiAvKgogKiogRmluYWxseSwgc29tZSBjb252ZW5pZW5jZSBpdGVtcy4KICovCiAKICNpZm5kZWYgVFJVRQotI2RlZmluZSBUUlVFICAgIDEKKyNkZWZpbmUgVFJVRQkxCiAjZW5kaWYgLyogIWRlZmluZWQgVFJVRSAqLwogCiAjaWZuZGVmIEZBTFNFCi0jZGVmaW5lIEZBTFNFICAgMAorI2RlZmluZSBGQUxTRQkwCiAjZW5kaWYgLyogIWRlZmluZWQgRkFMU0UgKi8KIAogI2lmbmRlZiBUWVBFX0JJVAotI2RlZmluZSBUWVBFX0JJVCh0eXBlKSAgKHNpemVvZiAodHlwZSkgKiBDSEFSX0JJVCkKKyNkZWZpbmUgVFlQRV9CSVQodHlwZSkJKHNpemVvZiAodHlwZSkgKiBDSEFSX0JJVCkKICNlbmRpZiAvKiAhZGVmaW5lZCBUWVBFX0JJVCAqLwogCiAjaWZuZGVmIFRZUEVfU0lHTkVECkBAIC0yODQsOCArMzIxLDggQEAKICoqIGFkZCBvbmUgbW9yZSBmb3IgYSBtaW51cyBzaWduIGlmIHRoZSB0eXBlIGlzIHNpZ25lZC4KICovCiAjZGVmaW5lIElOVF9TVFJMRU5fTUFYSU1VTSh0eXBlKSBcCi0gICAgKChUWVBFX0JJVCh0eXBlKSAtIFRZUEVfU0lHTkVEKHR5cGUpKSAqIDMwMiAvIDEwMDAgKyBcCi0gICAgMSArIFRZUEVfU0lHTkVEKHR5cGUpKQorCSgoVFlQRV9CSVQodHlwZSkgLSBUWVBFX1NJR05FRCh0eXBlKSkgKiAzMDIgLyAxMDAwICsgXAorCTEgKyBUWVBFX1NJR05FRCh0eXBlKSkKICNlbmRpZiAvKiAhZGVmaW5lZCBJTlRfU1RSTEVOX01BWElNVU0gKi8KIAogLyoKQEAgLTMwNSw3ICszNDIsNyBAQAogCiAjaWZuZGVmIElOSVRJQUxJWkUKICNpZmRlZiBHTlVDX29yX2xpbnQKLSNkZWZpbmUgSU5JVElBTElaRSh4KSAgICgoeCkgPSAwKQorI2RlZmluZSBJTklUSUFMSVpFKHgpCSgoeCkgPSAwKQogI2VuZGlmIC8qIGRlZmluZWQgR05VQ19vcl9saW50ICovCiAjaWZuZGVmIEdOVUNfb3JfbGludAogI2RlZmluZSBJTklUSUFMSVpFKHgpCkBAIC0zMzMsMTIgKzM3MCwxMiBAQAogI2lmIEhBVkVfSU5DT01QQVRJQkxFX0NUSU1FX1IKICN1bmRlZiBhc2N0aW1lX3IKICN1bmRlZiBjdGltZV9yCi1jaGFyICphc2N0aW1lX3IgUCgoc3RydWN0IHRtIGNvbnN0ICosIGNoYXIgKikpOwotY2hhciAqY3RpbWVfciBQKCh0aW1lX3QgY29uc3QgKiwgY2hhciAqKSk7CitjaGFyICphc2N0aW1lX3Ioc3RydWN0IHRtIGNvbnN0ICosIGNoYXIgKik7CitjaGFyICpjdGltZV9yKHRpbWVfdCBjb25zdCAqLCBjaGFyICopOwogI2VuZGlmIC8qIEhBVkVfSU5DT01QQVRJQkxFX0NUSU1FX1IgKi8KIAogI2lmbmRlZiBZRUFSU1BFUlJFUEVBVAotI2RlZmluZSBZRUFSU1BFUlJFUEVBVCAgICAgIDQwMCAvKiB5ZWFycyBiZWZvcmUgYSBHcmVnb3JpYW4gcmVwZWF0ICovCisjZGVmaW5lIFlFQVJTUEVSUkVQRUFUCQk0MDAJLyogeWVhcnMgYmVmb3JlIGEgR3JlZ29yaWFuIHJlcGVhdCAqLwogI2VuZGlmIC8qICFkZWZpbmVkIFlFQVJTUEVSUkVQRUFUICovCiAKIC8qCkBAIC0zNDYsMTUgKzM4MywxNSBAQAogKi8KIAogI2lmbmRlZiBBVkdTRUNTUEVSWUVBUgotI2RlZmluZSBBVkdTRUNTUEVSWUVBUiAgICAgIDMxNTU2OTUyTAorI2RlZmluZSBBVkdTRUNTUEVSWUVBUgkJMzE1NTY5NTJMCiAjZW5kaWYgLyogIWRlZmluZWQgQVZHU0VDU1BFUllFQVIgKi8KIAogI2lmbmRlZiBTRUNTUEVSUkVQRUFUCi0jZGVmaW5lIFNFQ1NQRVJSRVBFQVQgICAgICAgKChpbnRfZmFzdDY0X3QpIFlFQVJTUEVSUkVQRUFUICogKGludF9mYXN0NjRfdCkgQVZHU0VDU1BFUllFQVIpCisjZGVmaW5lIFNFQ1NQRVJSRVBFQVQJCSgoaW50X2Zhc3Q2NF90KSBZRUFSU1BFUlJFUEVBVCAqIChpbnRfZmFzdDY0X3QpIEFWR1NFQ1NQRVJZRUFSKQogI2VuZGlmIC8qICFkZWZpbmVkIFNFQ1NQRVJSRVBFQVQgKi8KLSAKKwogI2lmbmRlZiBTRUNTUEVSUkVQRUFUX0JJVFMKLSNkZWZpbmUgU0VDU1BFUlJFUEVBVF9CSVRTICAzNCAgLyogY2VpbChsb2cyKFNFQ1NQRVJSRVBFQVQpKSAqLworI2RlZmluZSBTRUNTUEVSUkVQRUFUX0JJVFMJMzQJLyogY2VpbChsb2cyKFNFQ1NQRVJSRVBFQVQpKSAqLwogI2VuZGlmIC8qICFkZWZpbmVkIFNFQ1NQRVJSRVBFQVRfQklUUyAqLwogCiAvKgpkaWZmIC0tZ2l0IGEvbGliYy90emNvZGUvc3RyZnRpbWUuYyBiL2xpYmMvdHpjb2RlL3N0cmZ0aW1lLmMKaW5kZXggYTJjYzNiMy4uZTkyYzQ0ZCAxMDA2NDQKLS0tIGEvbGliYy90emNvZGUvc3RyZnRpbWUuYworKysgYi9saWJjL3R6Y29kZS9zdHJmdGltZS5jCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSAibG9jYWxlLmgiCiAjaW5jbHVkZSA8Y3R5cGUuaD4KICNpbmNsdWRlIDx0aW1lNjQuaD4KKyNpbmNsdWRlIDxiaW9uaWNfdGltZS5oPiAgLyogZm9yIHN0cmZ0aW1lX3R6ICovCiAKIC8qIHN0cnVjdCBsY190aW1lX1QgaXMgbm93IGRlZmluZWQgYXMgc3RyZnRpbWVfbG9jYWxlCiAgKiBpbiA8dGltZS5oPgpAQCAtMTEwLDEyICsxMTEsMTIgQEAKICAgICAiJWEgJWIgJWUgJUg6JU06JVMgJVogJVkiCiB9OwogCi1zdGF0aWMgY2hhciAqICAgX2FkZCBQKChjb25zdCBjaGFyICosIGNoYXIgKiwgY29uc3QgY2hhciAqLCBpbnQpKTsKLXN0YXRpYyBjaGFyICogICBfY29udiBQKChpbnQsIGNvbnN0IGNoYXIgKiwgY2hhciAqLCBjb25zdCBjaGFyICopKTsKLXN0YXRpYyBjaGFyICogICBfZm10IFAoKGNvbnN0IGNoYXIgKiwgY29uc3Qgc3RydWN0IHRtICosIGNoYXIgKiwgY29uc3QgY2hhciAqLAotICAgICAgICAgICAgaW50ICosIGNvbnN0IHN0cnVjdCBzdHJmdGltZV9sb2NhbGUqKSk7Ci1zdGF0aWMgY2hhciAqICAgX3ljb252IFAoKGludCwgaW50LCBpbnQsIGludCwgY2hhciAqLCBjb25zdCBjaGFyICosIGludCkpOwotc3RhdGljIGNoYXIgKiAgIGdldGZvcm1hdCBQKChpbnQsIGNoYXIgKiwgY2hhciAqLCBjaGFyICosIGNoYXIgKikpOworc3RhdGljIGNoYXIgKiAgIF9hZGQoY29uc3QgY2hhciAqLCBjaGFyICosIGNvbnN0IGNoYXIgKiwgaW50KTsKK3N0YXRpYyBjaGFyICogICBfY29udihpbnQsIGNvbnN0IGNoYXIgKiwgY2hhciAqLCBjb25zdCBjaGFyICopOworc3RhdGljIGNoYXIgKiAgIF9mbXQoY29uc3QgY2hhciAqLCBjb25zdCBzdHJ1Y3QgdG0gKiwgY2hhciAqLCBjb25zdCBjaGFyICosCisgICAgICAgICAgICBpbnQgKiwgY29uc3Qgc3RydWN0IHN0cmZ0aW1lX2xvY2FsZSopOworc3RhdGljIGNoYXIgKiAgIF95Y29udihpbnQsIGludCwgaW50LCBpbnQsIGNoYXIgKiwgY29uc3QgY2hhciAqLCBpbnQpOworc3RhdGljIGNoYXIgKiAgIGdldGZvcm1hdChpbnQsIGNoYXIgKiwgY2hhciAqLCBjaGFyICosIGNoYXIgKik7CiAKIGV4dGVybiBjaGFyICogICB0em5hbWVbXTsKIApkaWZmIC0tZ2l0IGEvbGliYy90emNvZGUvdHpmaWxlLmggYi9saWJjL3R6Y29kZS90emZpbGUuaAppbmRleCBmNmM5YTA1Li5kMDRmZTA0IDEwMDY0NAotLS0gYS9saWJjL3R6Y29kZS90emZpbGUuaAorKysgYi9saWJjL3R6Y29kZS90emZpbGUuaApAQCAtMTYsNzIgKzE2LDYyIEBACiAqLwogCiAvKgotKiogSUQKLSovCi0KLSNpZm5kZWYgbGludAotI2lmbmRlZiBOT0lECi1zdGF0aWMgY2hhciB0emZpbGVoaWRbXSA9ICJAKCMpdHpmaWxlLmggOC4xIjsKLSNlbmRpZiAvKiAhZGVmaW5lZCBOT0lEICovCi0jZW5kaWYgLyogIWRlZmluZWQgbGludCAqLwotCi0vKgogKiogSW5mb3JtYXRpb24gYWJvdXQgdGltZSB6b25lIGZpbGVzLgogKi8KIAogI2lmbmRlZiBUWkRJUgotI2RlZmluZSBUWkRJUiAiL3N5c3RlbS91c3Ivc2hhcmUvem9uZWluZm8iIC8qIFRpbWUgem9uZSBvYmplY3QgZmlsZSBkaXJlY3RvcnkgKi8KKyNkZWZpbmUgVFpESVIJIi91c3IvbG9jYWwvZXRjL3pvbmVpbmZvIiAvKiBUaW1lIHpvbmUgb2JqZWN0IGZpbGUgZGlyZWN0b3J5ICovCiAjZW5kaWYgLyogIWRlZmluZWQgVFpESVIgKi8KIAogI2lmbmRlZiBUWkRFRkFVTFQKLSNkZWZpbmUgVFpERUZBVUxUICAgImxvY2FsdGltZSIKKyNkZWZpbmUgVFpERUZBVUxUCSJsb2NhbHRpbWUiCiAjZW5kaWYgLyogIWRlZmluZWQgVFpERUZBVUxUICovCiAKICNpZm5kZWYgVFpERUZSVUxFUwotI2RlZmluZSBUWkRFRlJVTEVTICAicG9zaXhydWxlcyIKKyNkZWZpbmUgVFpERUZSVUxFUwkicG9zaXhydWxlcyIKICNlbmRpZiAvKiAhZGVmaW5lZCBUWkRFRlJVTEVTICovCiAKIC8qCiAqKiBFYWNoIGZpbGUgYmVnaW5zIHdpdGguIC4gLgogKi8KIAotI2RlZmluZSBUWl9NQUdJQyAgICAiVFppZiIKKyNkZWZpbmUJVFpfTUFHSUMJIlRaaWYiCiAKIHN0cnVjdCB0emhlYWQgewotICAgIGNoYXIgICAgdHpoX21hZ2ljWzRdOyAgICAgICAvKiBUWl9NQUdJQyAqLwotICAgIGNoYXIgICAgdHpoX3ZlcnNpb25bMV07ICAgICAvKiAnXDAnIG9yICcyJyBhcyBvZiAyMDA1ICovCi0gICAgY2hhciAgICB0emhfcmVzZXJ2ZWRbMTVdOyAgIC8qIHJlc2VydmVkLS1tdXN0IGJlIHplcm8gKi8KLSAgICBjaGFyICAgIHR6aF90dGlzZ210Y250WzRdOyAgLyogY29kZWQgbnVtYmVyIG9mIHRyYW5zLiB0aW1lIGZsYWdzICovCi0gICAgY2hhciAgICB0emhfdHRpc3N0ZGNudFs0XTsgIC8qIGNvZGVkIG51bWJlciBvZiB0cmFucy4gdGltZSBmbGFncyAqLwotICAgIGNoYXIgICAgdHpoX2xlYXBjbnRbNF07ICAgICAvKiBjb2RlZCBudW1iZXIgb2YgbGVhcCBzZWNvbmRzICovCi0gICAgY2hhciAgICB0emhfdGltZWNudFs0XTsgICAgIC8qIGNvZGVkIG51bWJlciBvZiB0cmFuc2l0aW9uIHRpbWVzICovCi0gICAgY2hhciAgICB0emhfdHlwZWNudFs0XTsgICAgIC8qIGNvZGVkIG51bWJlciBvZiBsb2NhbCB0aW1lIHR5cGVzICovCi0gICAgY2hhciAgICB0emhfY2hhcmNudFs0XTsgICAgIC8qIGNvZGVkIG51bWJlciBvZiBhYmJyLiBjaGFycyAqLworCWNoYXIJdHpoX21hZ2ljWzRdOwkJLyogVFpfTUFHSUMgKi8KKwljaGFyCXR6aF92ZXJzaW9uWzFdOwkJLyogJ1wwJyBvciAnMicgYXMgb2YgMjAwNSAqLworCWNoYXIJdHpoX3Jlc2VydmVkWzE1XTsJLyogcmVzZXJ2ZWQtLW11c3QgYmUgemVybyAqLworCWNoYXIJdHpoX3R0aXNnbXRjbnRbNF07CS8qIGNvZGVkIG51bWJlciBvZiB0cmFucy4gdGltZSBmbGFncyAqLworCWNoYXIJdHpoX3R0aXNzdGRjbnRbNF07CS8qIGNvZGVkIG51bWJlciBvZiB0cmFucy4gdGltZSBmbGFncyAqLworCWNoYXIJdHpoX2xlYXBjbnRbNF07CQkvKiBjb2RlZCBudW1iZXIgb2YgbGVhcCBzZWNvbmRzICovCisJY2hhcgl0emhfdGltZWNudFs0XTsJCS8qIGNvZGVkIG51bWJlciBvZiB0cmFuc2l0aW9uIHRpbWVzICovCisJY2hhcgl0emhfdHlwZWNudFs0XTsJCS8qIGNvZGVkIG51bWJlciBvZiBsb2NhbCB0aW1lIHR5cGVzICovCisJY2hhcgl0emhfY2hhcmNudFs0XTsJCS8qIGNvZGVkIG51bWJlciBvZiBhYmJyLiBjaGFycyAqLwogfTsKIAogLyoKICoqIC4gLiAuZm9sbG93ZWQgYnkuIC4gLgogKioKLSoqICB0emhfdGltZWNudCAoY2hhciBbNF0pcyAgICAgY29kZWQgdHJhbnNpdGlvbiB0aW1lcyBhIGxhIHRpbWUoMikKLSoqICB0emhfdGltZWNudCAodW5zaWduZWQgY2hhcilzICAgIHR5cGVzIG9mIGxvY2FsIHRpbWUgc3RhcnRpbmcgYXQgYWJvdmUKLSoqICB0emhfdHlwZWNudCByZXBldGl0aW9ucyBvZgotKiogICAgICBvbmUgKGNoYXIgWzRdKSAgICAgIGNvZGVkIFVUQyBvZmZzZXQgaW4gc2Vjb25kcwotKiogICAgICBvbmUgKHVuc2lnbmVkIGNoYXIpIHVzZWQgdG8gc2V0IHRtX2lzZHN0Ci0qKiAgICAgIG9uZSAodW5zaWduZWQgY2hhcikgdGhhdCdzIGFuIGFiYnJldmlhdGlvbiBsaXN0IGluZGV4Ci0qKiAgdHpoX2NoYXJjbnQgKGNoYXIpcyAgICAgJ1wwJy10ZXJtaW5hdGVkIHpvbmUgYWJicmV2aWF0aW9ucwotKiogIHR6aF9sZWFwY250IHJlcGV0aXRpb25zIG9mCi0qKiAgICAgIG9uZSAoY2hhciBbNF0pICAgICAgY29kZWQgbGVhcCBzZWNvbmQgdHJhbnNpdGlvbiB0aW1lcwotKiogICAgICBvbmUgKGNoYXIgWzRdKSAgICAgIHRvdGFsIGNvcnJlY3Rpb24gYWZ0ZXIgYWJvdmUKLSoqICB0emhfdHRpc3N0ZGNudCAoY2hhcilzICAgICAgaW5kZXhlZCBieSB0eXBlOyBpZiBUUlVFLCB0cmFuc2l0aW9uCi0qKiAgICAgICAgICAgICAgICAgIHRpbWUgaXMgc3RhbmRhcmQgdGltZSwgaWYgRkFMU0UsCi0qKiAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb24gdGltZSBpcyB3YWxsIGNsb2NrIHRpbWUKLSoqICAgICAgICAgICAgICAgICAgaWYgYWJzZW50LCB0cmFuc2l0aW9uIHRpbWVzIGFyZQotKiogICAgICAgICAgICAgICAgICBhc3N1bWVkIHRvIGJlIHdhbGwgY2xvY2sgdGltZQotKiogIHR6aF90dGlzZ210Y250IChjaGFyKXMgICAgICBpbmRleGVkIGJ5IHR5cGU7IGlmIFRSVUUsIHRyYW5zaXRpb24KLSoqICAgICAgICAgICAgICAgICAgdGltZSBpcyBVVEMsIGlmIEZBTFNFLAotKiogICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uIHRpbWUgaXMgbG9jYWwgdGltZQotKiogICAgICAgICAgICAgICAgICBpZiBhYnNlbnQsIHRyYW5zaXRpb24gdGltZXMgYXJlCi0qKiAgICAgICAgICAgICAgICAgIGFzc3VtZWQgdG8gYmUgbG9jYWwgdGltZQorKioJdHpoX3RpbWVjbnQgKGNoYXIgWzRdKXMJCWNvZGVkIHRyYW5zaXRpb24gdGltZXMgYSBsYSB0aW1lKDIpCisqKgl0emhfdGltZWNudCAodW5zaWduZWQgY2hhcilzCXR5cGVzIG9mIGxvY2FsIHRpbWUgc3RhcnRpbmcgYXQgYWJvdmUKKyoqCXR6aF90eXBlY250IHJlcGV0aXRpb25zIG9mCisqKgkJb25lIChjaGFyIFs0XSkJCWNvZGVkIFVUQyBvZmZzZXQgaW4gc2Vjb25kcworKioJCW9uZSAodW5zaWduZWQgY2hhcikJdXNlZCB0byBzZXQgdG1faXNkc3QKKyoqCQlvbmUgKHVuc2lnbmVkIGNoYXIpCXRoYXQncyBhbiBhYmJyZXZpYXRpb24gbGlzdCBpbmRleAorKioJdHpoX2NoYXJjbnQgKGNoYXIpcwkJJ1wwJy10ZXJtaW5hdGVkIHpvbmUgYWJicmV2aWF0aW9ucworKioJdHpoX2xlYXBjbnQgcmVwZXRpdGlvbnMgb2YKKyoqCQlvbmUgKGNoYXIgWzRdKQkJY29kZWQgbGVhcCBzZWNvbmQgdHJhbnNpdGlvbiB0aW1lcworKioJCW9uZSAoY2hhciBbNF0pCQl0b3RhbCBjb3JyZWN0aW9uIGFmdGVyIGFib3ZlCisqKgl0emhfdHRpc3N0ZGNudCAoY2hhcilzCQlpbmRleGVkIGJ5IHR5cGU7IGlmIFRSVUUsIHRyYW5zaXRpb24KKyoqCQkJCQl0aW1lIGlzIHN0YW5kYXJkIHRpbWUsIGlmIEZBTFNFLAorKioJCQkJCXRyYW5zaXRpb24gdGltZSBpcyB3YWxsIGNsb2NrIHRpbWUKKyoqCQkJCQlpZiBhYnNlbnQsIHRyYW5zaXRpb24gdGltZXMgYXJlCisqKgkJCQkJYXNzdW1lZCB0byBiZSB3YWxsIGNsb2NrIHRpbWUKKyoqCXR6aF90dGlzZ210Y250IChjaGFyKXMJCWluZGV4ZWQgYnkgdHlwZTsgaWYgVFJVRSwgdHJhbnNpdGlvbgorKioJCQkJCXRpbWUgaXMgVVRDLCBpZiBGQUxTRSwKKyoqCQkJCQl0cmFuc2l0aW9uIHRpbWUgaXMgbG9jYWwgdGltZQorKioJCQkJCWlmIGFic2VudCwgdHJhbnNpdGlvbiB0aW1lcyBhcmUKKyoqCQkJCQlhc3N1bWVkIHRvIGJlIGxvY2FsIHRpbWUKICovCiAKIC8qCkBAIC0xMDAsODEgKzkwLDgxIEBACiAqLwogCiAjaWZuZGVmIFRaX01BWF9USU1FUwotI2RlZmluZSBUWl9NQVhfVElNRVMgICAgMTIwMAorI2RlZmluZSBUWl9NQVhfVElNRVMJMTIwMAogI2VuZGlmIC8qICFkZWZpbmVkIFRaX01BWF9USU1FUyAqLwogCiAjaWZuZGVmIFRaX01BWF9UWVBFUwogI2lmbmRlZiBOT1NPTEFSCi0jZGVmaW5lIFRaX01BWF9UWVBFUyAgICAyNTYgLyogTGltaXRlZCBieSB3aGF0ICh1bnNpZ25lZCBjaGFyKSdzIGNhbiBob2xkICovCisjZGVmaW5lIFRaX01BWF9UWVBFUwkyNTYgLyogTGltaXRlZCBieSB3aGF0ICh1bnNpZ25lZCBjaGFyKSdzIGNhbiBob2xkICovCiAjZW5kaWYgLyogIWRlZmluZWQgTk9TT0xBUiAqLwogI2lmZGVmIE5PU09MQVIKIC8qCiAqKiBNdXN0IGJlIGF0IGxlYXN0IDE0IGZvciBFdXJvcGUvUmlnYSBhcyBvZiBKYW4gMTIgMTk5NSwKICoqIGFzIG5vdGVkIGJ5IEVhcmwgQ2hldy4KICovCi0jZGVmaW5lIFRaX01BWF9UWVBFUyAgICAyMCAgLyogTWF4aW11bSBudW1iZXIgb2YgbG9jYWwgdGltZSB0eXBlcyAqLworI2RlZmluZSBUWl9NQVhfVFlQRVMJMjAJLyogTWF4aW11bSBudW1iZXIgb2YgbG9jYWwgdGltZSB0eXBlcyAqLwogI2VuZGlmIC8qICFkZWZpbmVkIE5PU09MQVIgKi8KICNlbmRpZiAvKiAhZGVmaW5lZCBUWl9NQVhfVFlQRVMgKi8KIAogI2lmbmRlZiBUWl9NQVhfQ0hBUlMKLSNkZWZpbmUgVFpfTUFYX0NIQVJTICAgIDUwICAvKiBNYXhpbXVtIG51bWJlciBvZiBhYmJyZXZpYXRpb24gY2hhcmFjdGVycyAqLwotICAgICAgICAgICAgICAgIC8qIChsaW1pdGVkIGJ5IHdoYXQgdW5zaWduZWQgY2hhcnMgY2FuIGhvbGQpICovCisjZGVmaW5lIFRaX01BWF9DSEFSUwk1MAkvKiBNYXhpbXVtIG51bWJlciBvZiBhYmJyZXZpYXRpb24gY2hhcmFjdGVycyAqLworCQkJCS8qIChsaW1pdGVkIGJ5IHdoYXQgdW5zaWduZWQgY2hhcnMgY2FuIGhvbGQpICovCiAjZW5kaWYgLyogIWRlZmluZWQgVFpfTUFYX0NIQVJTICovCiAKICNpZm5kZWYgVFpfTUFYX0xFQVBTCi0jZGVmaW5lIFRaX01BWF9MRUFQUyAgICA1MCAgLyogTWF4aW11bSBudW1iZXIgb2YgbGVhcCBzZWNvbmQgY29ycmVjdGlvbnMgKi8KKyNkZWZpbmUgVFpfTUFYX0xFQVBTCTUwCS8qIE1heGltdW0gbnVtYmVyIG9mIGxlYXAgc2Vjb25kIGNvcnJlY3Rpb25zICovCiAjZW5kaWYgLyogIWRlZmluZWQgVFpfTUFYX0xFQVBTICovCiAKLSNkZWZpbmUgU0VDU1BFUk1JTiAgNjAKLSNkZWZpbmUgTUlOU1BFUkhPVVIgNjAKLSNkZWZpbmUgSE9VUlNQRVJEQVkgMjQKLSNkZWZpbmUgREFZU1BFUldFRUsgNwotI2RlZmluZSBEQVlTUEVSTllFQVIgICAgMzY1Ci0jZGVmaW5lIERBWVNQRVJMWUVBUiAgICAzNjYKLSNkZWZpbmUgU0VDU1BFUkhPVVIgKFNFQ1NQRVJNSU4gKiBNSU5TUEVSSE9VUikKLSNkZWZpbmUgU0VDU1BFUkRBWSAgKChsb25nKSBTRUNTUEVSSE9VUiAqIEhPVVJTUEVSREFZKQotI2RlZmluZSBNT05TUEVSWUVBUiAxMgorI2RlZmluZSBTRUNTUEVSTUlOCTYwCisjZGVmaW5lIE1JTlNQRVJIT1VSCTYwCisjZGVmaW5lIEhPVVJTUEVSREFZCTI0CisjZGVmaW5lIERBWVNQRVJXRUVLCTcKKyNkZWZpbmUgREFZU1BFUk5ZRUFSCTM2NQorI2RlZmluZSBEQVlTUEVSTFlFQVIJMzY2CisjZGVmaW5lIFNFQ1NQRVJIT1VSCShTRUNTUEVSTUlOICogTUlOU1BFUkhPVVIpCisjZGVmaW5lIFNFQ1NQRVJEQVkJKChpbnRfZmFzdDMyX3QpIFNFQ1NQRVJIT1VSICogSE9VUlNQRVJEQVkpCisjZGVmaW5lIE1PTlNQRVJZRUFSCTEyCiAKLSNkZWZpbmUgVE1fU1VOREFZICAgMAotI2RlZmluZSBUTV9NT05EQVkgICAxCi0jZGVmaW5lIFRNX1RVRVNEQVkgIDIKLSNkZWZpbmUgVE1fV0VETkVTREFZICAgIDMKLSNkZWZpbmUgVE1fVEhVUlNEQVkgNAotI2RlZmluZSBUTV9GUklEQVkgICA1Ci0jZGVmaW5lIFRNX1NBVFVSREFZIDYKKyNkZWZpbmUgVE1fU1VOREFZCTAKKyNkZWZpbmUgVE1fTU9OREFZCTEKKyNkZWZpbmUgVE1fVFVFU0RBWQkyCisjZGVmaW5lIFRNX1dFRE5FU0RBWQkzCisjZGVmaW5lIFRNX1RIVVJTREFZCTQKKyNkZWZpbmUgVE1fRlJJREFZCTUKKyNkZWZpbmUgVE1fU0FUVVJEQVkJNgogCi0jZGVmaW5lIFRNX0pBTlVBUlkgIDAKLSNkZWZpbmUgVE1fRkVCUlVBUlkgMQotI2RlZmluZSBUTV9NQVJDSCAgICAyCi0jZGVmaW5lIFRNX0FQUklMICAgIDMKLSNkZWZpbmUgVE1fTUFZICAgICAgNAotI2RlZmluZSBUTV9KVU5FICAgICA1Ci0jZGVmaW5lIFRNX0pVTFkgICAgIDYKLSNkZWZpbmUgVE1fQVVHVVNUICAgNwotI2RlZmluZSBUTV9TRVBURU1CRVIgICAgOAotI2RlZmluZSBUTV9PQ1RPQkVSICA5Ci0jZGVmaW5lIFRNX05PVkVNQkVSIDEwCi0jZGVmaW5lIFRNX0RFQ0VNQkVSIDExCisjZGVmaW5lIFRNX0pBTlVBUlkJMAorI2RlZmluZSBUTV9GRUJSVUFSWQkxCisjZGVmaW5lIFRNX01BUkNICTIKKyNkZWZpbmUgVE1fQVBSSUwJMworI2RlZmluZSBUTV9NQVkJCTQKKyNkZWZpbmUgVE1fSlVORQkJNQorI2RlZmluZSBUTV9KVUxZCQk2CisjZGVmaW5lIFRNX0FVR1VTVAk3CisjZGVmaW5lIFRNX1NFUFRFTUJFUgk4CisjZGVmaW5lIFRNX09DVE9CRVIJOQorI2RlZmluZSBUTV9OT1ZFTUJFUgkxMAorI2RlZmluZSBUTV9ERUNFTUJFUgkxMQogCi0jZGVmaW5lIFRNX1lFQVJfQkFTRSAgICAxOTAwCisjZGVmaW5lIFRNX1lFQVJfQkFTRQkxOTAwCiAKLSNkZWZpbmUgRVBPQ0hfWUVBUiAgMTk3MAotI2RlZmluZSBFUE9DSF9XREFZICBUTV9USFVSU0RBWQorI2RlZmluZSBFUE9DSF9ZRUFSCTE5NzAKKyNkZWZpbmUgRVBPQ0hfV0RBWQlUTV9USFVSU0RBWQogCiAjZGVmaW5lIGlzbGVhcCh5KSAoKCh5KSAlIDQpID09IDAgJiYgKCgoeSkgJSAxMDApICE9IDAgfHwgKCh5KSAlIDQwMCkgPT0gMCkpCiAKIC8qCiAqKiBTaW5jZSBldmVyeXRoaW5nIGluIGlzbGVhcCBpcyBtb2R1bG8gNDAwIChvciBhIGZhY3RvciBvZiA0MDApLCB3ZSBrbm93IHRoYXQKLSoqICBpc2xlYXAoeSkgPT0gaXNsZWFwKHkgJSA0MDApCisqKglpc2xlYXAoeSkgPT0gaXNsZWFwKHkgJSA0MDApCiAqKiBhbmQgc28KLSoqICBpc2xlYXAoYSArIGIpID09IGlzbGVhcCgoYSArIGIpICUgNDAwKQorKioJaXNsZWFwKGEgKyBiKSA9PSBpc2xlYXAoKGEgKyBiKSAlIDQwMCkKICoqIG9yCi0qKiAgaXNsZWFwKGEgKyBiKSA9PSBpc2xlYXAoYSAlIDQwMCArIGIgJSA0MDApCisqKglpc2xlYXAoYSArIGIpID09IGlzbGVhcChhICUgNDAwICsgYiAlIDQwMCkKICoqIFRoaXMgaXMgdHJ1ZSBldmVuIGlmICUgbWVhbnMgbW9kdWxvIHJhdGhlciB0aGFuIEZvcnRyYW4gcmVtYWluZGVyCiAqKiAod2hpY2ggaXMgYWxsb3dlZCBieSBDODkgYnV0IG5vdCBDOTkpLgogKiogV2UgdXNlIHRoaXMgdG8gYXZvaWQgYWRkaXRpb24gb3ZlcmZsb3cgcHJvYmxlbXMuCiAqLwogCi0jZGVmaW5lIGlzbGVhcF9zdW0oYSwgYikgICAgaXNsZWFwKChhKSAlIDQwMCArIChiKSAlIDQwMCkKKyNkZWZpbmUgaXNsZWFwX3N1bShhLCBiKQlpc2xlYXAoKGEpICUgNDAwICsgKGIpICUgNDAwKQogCiAjZW5kaWYgLyogIWRlZmluZWQgVFpGSUxFX0ggKi8KZGlmZiAtLWdpdCBhL2xpYmMvdW5pc3RkL2Fib3J0LmMgYi9saWJjL3VuaXN0ZC9hYm9ydC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhM2Y4YzU0Li4wMDAwMDAwCi0tLSBhL2xpYmMvdW5pc3RkL2Fib3J0LmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMDQgKzAsMCBAQAotLyoJJE9wZW5CU0Q6IGFib3J0LmMsdiAxLjE0IDIwMDUvMDgvMDggMDg6MDU6MzYgZXNwaWUgRXhwICQgKi8KLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDE5ODUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0gKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKLSAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgPHNpZ25hbC5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHVuaXN0ZC5oPgotI2luY2x1ZGUgInRocmVhZF9wcml2YXRlLmgiCi0jaW5jbHVkZSAiYXRleGl0LmgiCi0KLS8qIHRlbXBvcmFyeSwgZm9yIGJ1ZyBodW50aW5nICovCi0jaW5jbHVkZSAibG9nZC5oIgotI2RlZmluZSBkZWJ1Z19sb2coZm9ybWF0LCAuLi4pICBcCi0gICAgX19saWJjX2FuZHJvaWRfbG9nX3ByaW50KEFORFJPSURfTE9HX0RFQlVHLCAibGliYy1hYm9ydCIsIChmb3JtYXQpLCAjI19fVkFfQVJHU19fICkKLQotI2lmZGVmIF9fYXJtX18KLV9fTElCQ19ISURERU5fXyB2b2lkCi1fX2xpYmNfYW5kcm9pZF9hYm9ydCh2b2lkKQotI2Vsc2UKLXZvaWQKLWFib3J0KHZvaWQpCi0jZW5kaWYKLXsKLQlzdHJ1Y3QgYXRleGl0ICpwID0gX19hdGV4aXQ7Ci0Jc3RhdGljIGludCBjbGVhbnVwX2NhbGxlZCA9IDA7Ci0Jc2lnc2V0X3QgbWFzazsKLQotICAKLQlzaWdmaWxsc2V0KCZtYXNrKTsKLQkvKgotCSAqIGRvbid0IGJsb2NrIFNJR0FCUlQgdG8gZ2l2ZSBhbnkgaGFuZGxlciBhIGNoYW5jZTsgd2UgaWdub3JlCi0JICogYW55IGVycm9ycyAtLSBYMzExSiBkb2Vzbid0IGFsbG93IGFib3J0IHRvIHJldHVybiBhbnl3YXkuCi0JICovCi0Jc2lnZGVsc2V0KCZtYXNrLCBTSUdBQlJUKTsKLSAgICAvKiB0ZW1wb3JhcnksIHNvIGRlbGliZXJhdGUgc2VnIGZhdWx0IGNhbiBiZSBjYXVnaHQgYnkgZGVidWdnZXJkICovCi0Jc2lnZGVsc2V0KCZtYXNrLCBTSUdTRUdWKTsKLSAgICAvKiAtLSAqLwotCSh2b2lkKXNpZ3Byb2NtYXNrKFNJR19TRVRNQVNLLCAmbWFzaywgKHNpZ3NldF90ICopTlVMTCk7Ci0KLQkvKgotCSAqIFBPU0lYIHJlcXVpcmVzIHdlIGZsdXNoIHN0ZGlvIGJ1ZmZlcnMgb24gYWJvcnQKLQkgKi8KLQlpZiAoY2xlYW51cF9jYWxsZWQgPT0gMCkgewotCQl3aGlsZSAocCAhPSBOVUxMICYmIHAtPm5leHQgIT0gTlVMTCkKLQkJCXAgPSBwLT5uZXh0OwotCQkvKiB0aGUgY2hlY2sgZm9yIGZuX2RzbyA9PSBOVUxMIGlzIG1vc3RseSBwYXJhbm9pYSAqLwotCQlpZiAocCAhPSBOVUxMICYmIHAtPmZuc1swXS5mbl9kc28gPT0gTlVMTCAmJgotCQkgICAgcC0+Zm5zWzBdLmZuX3B0ci5zdGRfZnVuYyAhPSBOVUxMKSB7Ci0JCQljbGVhbnVwX2NhbGxlZCA9IDE7Ci0JCQkoKnAtPmZuc1swXS5mbl9wdHIuc3RkX2Z1bmMpKCk7Ci0JCX0KLQl9Ci0KLSAgICAvKiB0ZW1wb3JhcnksIGZvciBidWcgaHVudGluZyAqLwotICAgIC8qIHNlZyBmYXVsdCBzZWVtcyB0byBwcm9kdWNlIGJldHRlciBkZWJ1Z2dlcmQgcmVzdWx0cyB0aGFuIFNJR0FCUlQgKi8KLSAgICAqKChjaGFyKikweGRlYWRiYWFkKSA9IDM5OwotICAgIC8qIC0tICovCi0KLQkodm9pZClraWxsKGdldHBpZCgpLCBTSUdBQlJUKTsKLQotCS8qCi0JICogaWYgU0lHQUJSVCBpZ25vcmVkLCBvciBjYXVnaHQgYW5kIHRoZSBoYW5kbGVyIHJldHVybnMsIGRvCi0JICogaXQgYWdhaW4sIG9ubHkgaGFyZGVyLgotCSAqLwotICAgICAgICB7Ci0gICAgICAgICAgICBzdHJ1Y3Qgc2lnYWN0aW9uIHNhOwotCi0gICAgICAgICAgICBzYS5zYV9oYW5kbGVyID0gU0lHX0RGTDsKLSAgICAgICAgICAgIHNhLnNhX2ZsYWdzICAgPSBTQV9SRVNUQVJUOwotICAgICAgICAgICAgc2lnZW1wdHlzZXQoJnNhLnNhX21hc2spOwotCi0gICAgICAgICAgICAodm9pZClzaWdhY3Rpb24oIFNJR0FCUlQsICZzYSwgJnNhICk7Ci0gICAgICAgIH0KLQotCSh2b2lkKXNpZ3Byb2NtYXNrKFNJR19TRVRNQVNLLCAmbWFzaywgKHNpZ3NldF90ICopTlVMTCk7Ci0JKHZvaWQpa2lsbChnZXRwaWQoKSwgU0lHQUJSVCk7Ci0JX2V4aXQoMSk7Ci19CmRpZmYgLS1naXQgYS9saWJjL3VuaXN0ZC9icmsuYyBiL2xpYmMvdW5pc3RkL2Jyay5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZjJmMTA4Li4wMDAwMDAwCi0tLSBhL2xpYmMvdW5pc3RkL2Jyay5jCisrKyAvZGV2L251bGwKQEAgLTEsNDUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqICAgIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKLSAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi0gKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCi0gKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAotICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCi0gKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKLSAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotI2luY2x1ZGUgPHN0ZGRlZi5oPgotI2luY2x1ZGUgPHVuaXN0ZC5oPgotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotCi0vKiBzaGFyZWQgd2l0aCBzYnJrLmMgKi8KLWNoYXIgKl9fYmlvbmljX2JyazsKLQotaW50IGJyayh2b2lkKiAgZW5kX2RhdGEpCi17Ci0gICAgY2hhciogIG5ld19icmsgPSBfX2JyayggZW5kX2RhdGEgKTsKLQotICAgIGlmIChuZXdfYnJrICE9IGVuZF9kYXRhKQotICAgICAgICByZXR1cm4gLTE7Ci0KLSAgICBfX2Jpb25pY19icmsgPSBuZXdfYnJrOwotICAKLSAgcmV0dXJuIDA7Ci19CmRpZmYgLS1naXQgYS9saWJjL3VuaXN0ZC9jaGFyY2xhc3MuaCBiL2xpYmMvdW5pc3RkL2NoYXJjbGFzcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlZGIyYzEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3VuaXN0ZC9jaGFyY2xhc3MuaApAQCAtMCwwICsxLDI5IEBACisvKgorICogUHVibGljIGRvbWFpbiwgMjAwOCwgVG9kZCBDLiBNaWxsZXIgPFRvZGQuTWlsbGVyQGNvdXJ0ZXNhbi5jb20+CisgKgorICogJE9wZW5CU0Q6IGNoYXJjbGFzcy5oLHYgMS4xIDIwMDgvMTAvMDEgMjM6MDQ6MTMgbWlsbGVydCBFeHAgJAorICovCisKKy8qCisgKiBQT1NJWCBjaGFyYWN0ZXIgY2xhc3Mgc3VwcG9ydCBmb3IgZm5tYXRjaCgpIGFuZCBnbG9iKCkuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgY2NsYXNzIHsKKwljb25zdCBjaGFyICpuYW1lOworCWludCAoKmlzY3R5cGUpKGludCk7Cit9IGNjbGFzc2VzW10gPSB7CisJeyAiYWxudW0iLAlpc2FsbnVtIH0sCisJeyAiYWxwaGEiLAlpc2FscGhhIH0sCisJeyAiYmxhbmsiLAlpc2JsYW5rIH0sCisJeyAiY250cmwiLAlpc2NudHJsIH0sCisJeyAiZGlnaXQiLAlpc2RpZ2l0IH0sCisJeyAiZ3JhcGgiLAlpc2dyYXBoIH0sCisJeyAibG93ZXIiLAlpc2xvd2VyIH0sCisJeyAicHJpbnQiLAlpc3ByaW50IH0sCisJeyAicHVuY3QiLAlpc3B1bmN0IH0sCisJeyAic3BhY2UiLAlpc3NwYWNlIH0sCisJeyAidXBwZXIiLAlpc3VwcGVyIH0sCisJeyAieGRpZ2l0IiwJaXN4ZGlnaXQgfSwKKwl7IE5VTEwsCQlOVUxMIH0KK307CisKKyNkZWZpbmUgTkNDTEFTU0VTCShzaXplb2YoY2NsYXNzZXMpIC8gc2l6ZW9mKGNjbGFzc2VzWzBdKSAtIDEpCmRpZmYgLS1naXQgYS9saWJjL3VuaXN0ZC9jcmVhdC5jIGIvbGliYy91bmlzdGQvY3JlYXQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWIxNDQ2NS4uMDAwMDAwMAotLS0gYS9saWJjL3VuaXN0ZC9jcmVhdC5jCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqICAgIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKLSAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi0gKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCi0gKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAotICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCi0gKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKLSAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotI2luY2x1ZGUgPHVuaXN0ZC5oPgotI2luY2x1ZGUgPGZjbnRsLmg+Ci0KLWludCBjcmVhdChjb25zdCBjaGFyKiAgcGF0aG5hbWUsIG1vZGVfdCAgbW9kZSkKLXsKLSAgICByZXR1cm4gb3BlbihwYXRobmFtZSwgT19XUk9OTFl8T19UUlVOQ3xPX0NSRUFULCBtb2RlKTsKLX0KZGlmZiAtLWdpdCBhL2xpYmMvdW5pc3RkL2V2ZW50ZmQuYyBiL2xpYmMvdW5pc3RkL2V2ZW50ZmQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTQ4NzA0My4uMDAwMDAwMAotLS0gYS9saWJjL3VuaXN0ZC9ldmVudGZkLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyNSArMCwwIEBACi0jaW5jbHVkZSA8c3lzL2V2ZW50ZmQuaD4KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLQotLyogV2UgZHVwbGljYXRlIHRoZSBHTGliYyBlcnJvciBzZW1hbnRpY3MsIHdoaWNoIGFyZSBwb29ybHkgZGVmaW5lZAotICogaWYgdGhlIHJlYWQoKSBvciB3cml0ZSgpIGRvZXMgbm90IHJldHVybiB0aGUgcHJvcGVyIG51bWJlciBvZiBieXRlcy4KLSAqLwotaW50IGV2ZW50ZmRfcmVhZChpbnQgZmQsIGV2ZW50ZmRfdCAqY291bnRlcikKLXsKLSAgICBpbnQgcmV0ID0gcmVhZChmZCwgY291bnRlciwgc2l6ZW9mKCpjb3VudGVyKSk7Ci0KLSAgICBpZiAocmV0ID09IHNpemVvZigqY291bnRlcikpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIC0xOwotfQotCi1pbnQgZXZlbnRmZF93cml0ZShpbnQgZmQsIGV2ZW50ZmRfdCBjb3VudGVyKQotewotICAgIGludCByZXQgPSB3cml0ZShmZCwgJmNvdW50ZXIsIHNpemVvZihjb3VudGVyKSk7Ci0KLSAgICBpZiAocmV0ID09IHNpemVvZihjb3VudGVyKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gLTE7Ci19CmRpZmYgLS1naXQgYS9saWJjL3VuaXN0ZC9mbm1hdGNoLmMgYi9saWJjL3VuaXN0ZC9mbm1hdGNoLmMKaW5kZXggYWQzMWM5ZS4uYzNkMWEzYyAxMDA2NDQKLS0tIGEvbGliYy91bmlzdGQvZm5tYXRjaC5jCisrKyBiL2xpYmMvdW5pc3RkL2ZubWF0Y2guYwpAQCAtMSwyMDUgKzEsNDgwIEBACi0vKiAgICAgICRPcGVuQlNEOiBmbm1hdGNoLmMsdiAxLjEzIDIwMDYvMDMvMzEgMDU6MzQ6MTQgZGVyYWFkdCBFeHAgJCAgICAgICAgKi8KKy8qCSRPcGVuQlNEOiBmbm1hdGNoLmMsdiAxLjE2IDIwMTEvMTIvMDYgMTE6NDc6NDYgc3RzcCBFeHAgJAkqLwogCi0vKgotICogQ29weXJpZ2h0IChjKSAxOTg5LCAxOTkzLCAxOTk0Ci0gKiAgICAgIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKLSAqIEd1aWRvIHZhbiBSb3NzdW0uCi0gKgorLyogQ29weXJpZ2h0IChjKSAyMDExLCBWTXdhcmUsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBWTXdhcmUsIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKICAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCisgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVk1XQVJFLCBJTkMuIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisgKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCiAvKgotICogRnVuY3Rpb24gZm5tYXRjaCgpIGFzIHNwZWNpZmllZCBpbiBQT1NJWCAxMDAzLjItMTk5Miwgc2VjdGlvbiBCLjYuCi0gKiBDb21wYXJlcyBhIGZpbGVuYW1lIG9yIHBhdGhuYW1lIHRvIGEgcGF0dGVybi4KKyAqIENvcHlyaWdodCAoYykgMjAwOCBUb2RkIEMuIE1pbGxlciA8bWlsbGVydEBvcGVuYnNkLm9yZz4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisgKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgorICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgorICogT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KICAqLwogCi0jaW5jbHVkZSA8Y3R5cGUuaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgorLyogQXV0aG9yZWQgYnkgV2lsbGlhbSBBLiBSb3dlIEpyLiA8d3Jvd2U7IGFwYWNoZS5vcmcsIHZtd2FyZS5jb20+LCBBcHJpbCAyMDExCisgKgorICogRGVyaXZlZCBmcm9tIFRoZSBPcGVuIEdyb3VwIEJhc2UgU3BlY2lmaWNhdGlvbnMgSXNzdWUgNywgSUVFRSBTdGQgMTAwMy4xLTIwMDgKKyAqIGFzIGRlc2NyaWJlZCBpbjsKKyAqICAgaHR0cDovL3B1YnMub3Blbmdyb3VwLm9yZy9vbmxpbmVwdWJzLzk2OTk5MTk3OTkvZnVuY3Rpb25zL2ZubWF0Y2guaHRtbAorICoKKyAqIEZpbGVuYW1lIHBhdHRlcm4gbWF0Y2hlcyBkZWZpbmVkIGluIHNlY3Rpb24gMi4xMywgIlBhdHRlcm4gTWF0Y2hpbmcgTm90YXRpb24iCisgKiBmcm9tIGNoYXB0ZXIgMi4gIlNoZWxsIENvbW1hbmQgTGFuZ3VhZ2UiCisgKiAgIGh0dHA6Ly9wdWJzLm9wZW5ncm91cC5vcmcvb25saW5lcHVicy85Njk5OTE5Nzk5L3V0aWxpdGllcy9WM19jaGFwMDIuaHRtbCN0YWdfMThfMTMKKyAqIHdoZXJlOyAxLiBBIGJyYWNrZXQgZXhwcmVzc2lvbiBzdGFydGluZyB3aXRoIGFuIHVucXVvdGVkIDxjaXJjdW1mbGV4PiAnXicgCisgKiBjaGFyYWN0ZXIgQ09OVElOVUVTIHRvIHNwZWNpZnkgYSBub24tbWF0Y2hpbmcgbGlzdDsgMi4gYW4gZXhwbGljaXQgPHBlcmlvZD4gJy4nIAorICogaW4gYSBicmFja2V0IGV4cHJlc3Npb24gbWF0Y2hpbmcgbGlzdCwgZS5nLiAiWy5hYmNdIiBkb2VzIE5PVCBtYXRjaCBhIGxlYWRpbmcgCisgKiA8cGVyaW9kPiBpbiBhIGZpbGVuYW1lOyAzLiBhIDxsZWZ0LXNxdWFyZS1icmFja2V0PiAnWycgd2hpY2ggZG9lcyBub3QgaW50cm9kdWNlCisgKiBhIHZhbGlkIGJyYWNrZXQgZXhwcmVzc2lvbiBpcyB0cmVhdGVkIGFzIGFuIG9yZGluYXJ5IGNoYXJhY3RlcjsgNC4gYSBkaWZmZXJpbmcKKyAqIG51bWJlciBvZiBjb25zZWN1dGl2ZSBzbGFzaGVzIHdpdGhpbiBwYXR0ZXJuIGFuZCBzdHJpbmcgd2lsbCBOT1QgbWF0Y2g7CisgKiA1LiBhIHRyYWlsaW5nICdcJyBpbiBGTk1fRVNDQVBFIG1vZGUgaXMgdHJlYXRlZCBhcyBhbiBvcmRpbmFyeSAnXCcgY2hhcmFjdGVyLgorICoKKyAqIEJyYWNrZXQgZXhwYW5zaW9uIGRlZmluZWQgaW4gc2VjdGlvbiA5LjMuNSwgIlJFIEJyYWNrZXQgRXhwcmVzc2lvbiIsCisgKiBmcm9tIGNoYXB0ZXIgOSwgIlJlZ3VsYXIgRXhwcmVzc2lvbnMiCisgKiAgIGh0dHA6Ly9wdWJzLm9wZW5ncm91cC5vcmcvb25saW5lcHVicy85Njk5OTE5Nzk5L2Jhc2VkZWZzL1YxX2NoYXAwOS5odG1sI3RhZ18wOV8wM18wNQorICogd2l0aCBubyBzdXBwb3J0IGZvciBjb2xsYXRpbmcgc3ltYm9scywgZXF1aXZhbGVuY2UgY2xhc3MgZXhwcmVzc2lvbnMgb3IgCisgKiBjaGFyYWN0ZXIgY2xhc3MgZXhwcmVzc2lvbnMuICBBIHBhcnRpYWwgcmFuZ2UgZXhwcmVzc2lvbiB3aXRoIGEgbGVhZGluZyAKKyAqIGh5cGhlbiBmb2xsb3dpbmcgYSB2YWxpZCByYW5nZSBleHByZXNzaW9uIHdpbGwgbWF0Y2ggb25seSB0aGUgb3JkaW5hcnkKKyAqIDxoeXBoZW4+IGFuZCB0aGUgZW5kaW5nIGNoYXJhY3RlciAoZS5nLiAiW2EtbS16XSIgd2lsbCBtYXRjaCBjaGFyYWN0ZXJzIAorICogJ2EnIHRocm91Z2ggJ20nLCBhIDxoeXBoZW4+ICctJywgb3IgYSAneicpLgorICoKKyAqIFN1cHBvcnRzIEJTRCBleHRlbnNpb25zIEZOTV9MRUFESU5HX0RJUiB0byBtYXRjaCBwYXR0ZXJuIHRvIHRoZSBlbmQgb2Ygb25lCisgKiBwYXRoIHNlZ21lbnQgb2Ygc3RyaW5nLCBhbmQgRk5NX0NBU0VGT0xEIHRvIGlnbm9yZSBhbHBoYSBjYXNlLgorICoKKyAqIE5PVEU6IE9ubHkgUE9TSVgvQyBzaW5nbGUgYnl0ZSBsb2NhbGVzIGFyZSBjb3JyZWN0bHkgc3VwcG9ydGVkIGF0IHRoaXMgdGltZS4KKyAqIE5vdGFibHksIG5vbi1QT1NJWCBsb2NhbGVzIHdpdGggRk5NX0NBU0VGT0xEIHByb2R1Y2UgdW5kZWZpbmVkIHJlc3VsdHMsCisgKiBwYXJ0aWN1bGFybHkgaW4gcmFuZ2VzIG9mIG1peGVkIGNhc2UgKGUuZy4gIltBLXpdIikgb3Igc3Bhbm5pbmcgYWxwaGEgYW5kCisgKiBub25hbHBoYSBjaGFyYWN0ZXJzIHdpdGhpbiBhIHJhbmdlLgorICoKKyAqIFhYWCBjb21tZW50cyBiZWxvdyBpbmRpY2F0ZSBwb3J0aW5nIHJlcXVpcmVkIGZvciBtdWx0aS1ieXRlIGNoYXJhY3RlciBzZXRzCisgKiBhbmQgbm9uLVBPU0lYIGxvY2FsZSBjb2xsYXRpb24gb3JkZXJzOyByZXF1aXJlcyBtYnIqIEFQSXMgdG8gdHJhY2sgc2hpZnQKKyAqIHN0YXRlIG9mIHBhdHRlcm4gYW5kIHN0cmluZyAocmV3aW5kaW5nIHBhdHRlcm4gYW5kIHN0cmluZyByZXBlYXRlZGx5KS4KKyAqCisgKiBDZXJ0YWluIHBhcnRzIG9mIHRoZSBjb2RlIGFzc3VtZSAweDAwLTB4M0YgYXJlIHVuaXF1ZSB3aXRoIGFueSBNQkNTIChlLmcuCisgKiBVVEYtOCwgU0hJRlQtSklTLCBldGMpLiAgQW55IGltcGxlbWVudGF0aW9uIGFsbG93aW5nICdcJyBhcyBhbiBhbHRlcm5hdGUKKyAqIHBhdGggZGVsaW1pdGVyIG11c3QgYmUgYXdhcmUgdGhhdCAweDVDIGlzIE5PVCB1bmlxdWUgd2l0aGluIFNISUZULUpJUy4KKyAqLworCiAjaW5jbHVkZSA8Zm5tYXRjaC5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8bGltaXRzLmg+CiAKLSNkZWZpbmUgRU9TICAgICAgICAnXDAnCisjaW5jbHVkZSAiY2hhcmNsYXNzLmgiCiAKLSNkZWZpbmUgUkFOR0VfTUFUQ0ggICAgICAgIDEKLSNkZWZpbmUgUkFOR0VfTk9NQVRDSCAgICAgICAgMAotI2RlZmluZSBSQU5HRV9FUlJPUiAgICAgICAgKC0xKQotCi1zdGF0aWMgaW50IHJhbmdlbWF0Y2goY29uc3QgY2hhciAqLCBjaGFyLCBpbnQsIGNoYXIgKiopOwotCi1pbnQKLWZubWF0Y2goY29uc3QgY2hhciAqcGF0dGVybiwgY29uc3QgY2hhciAqc3RyaW5nLCBpbnQgZmxhZ3MpCi17Ci0gICAgICAgIGNvbnN0IGNoYXIgKnN0cmluZ3N0YXJ0OwotICAgICAgICBjaGFyICpuZXdwOwotICAgICAgICBjaGFyIGMsIHRlc3Q7Ci0KLSAgICAgICAgZm9yIChzdHJpbmdzdGFydCA9IHN0cmluZzs7KQotICAgICAgICAgICAgICAgIHN3aXRjaCAoYyA9ICpwYXR0ZXJuKyspIHsKLSAgICAgICAgICAgICAgICBjYXNlIEVPUzoKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoZmxhZ3MgJiBGTk1fTEVBRElOR19ESVIpICYmICpzdHJpbmcgPT0gJy8nKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKDApOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgqc3RyaW5nID09IEVPUyA/IDAgOiBGTk1fTk9NQVRDSCk7Ci0gICAgICAgICAgICAgICAgY2FzZSAnPyc6Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoKnN0cmluZyA9PSBFT1MpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoRk5NX05PTUFUQ0gpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCpzdHJpbmcgPT0gJy8nICYmIChmbGFncyAmIEZOTV9QQVRITkFNRSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoRk5NX05PTUFUQ0gpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCpzdHJpbmcgPT0gJy4nICYmIChmbGFncyAmIEZOTV9QRVJJT0QpICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0cmluZyA9PSBzdHJpbmdzdGFydCB8fAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoZmxhZ3MgJiBGTk1fUEFUSE5BTUUpICYmICooc3RyaW5nIC0gMSkgPT0gJy8nKSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoRk5NX05PTUFUQ0gpOwotICAgICAgICAgICAgICAgICAgICAgICAgKytzdHJpbmc7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlICcqJzoKLSAgICAgICAgICAgICAgICAgICAgICAgIGMgPSAqcGF0dGVybjsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8qIENvbGxhcHNlIG11bHRpcGxlIHN0YXJzLiAqLwotICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGMgPT0gJyonKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjID0gKisrcGF0dGVybjsKLQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCpzdHJpbmcgPT0gJy4nICYmIChmbGFncyAmIEZOTV9QRVJJT0QpICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0cmluZyA9PSBzdHJpbmdzdGFydCB8fAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoZmxhZ3MgJiBGTk1fUEFUSE5BTUUpICYmICooc3RyaW5nIC0gMSkgPT0gJy8nKSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoRk5NX05PTUFUQ0gpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAvKiBPcHRpbWl6ZSBmb3IgcGF0dGVybiB3aXRoICogYXQgZW5kIG9yIGJlZm9yZSAvLiAqLwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGMgPT0gRU9TKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmbGFncyAmIEZOTV9QQVRITkFNRSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKChmbGFncyAmIEZOTV9MRUFESU5HX0RJUikgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyY2hyKHN0cmluZywgJy8nKSA9PSBOVUxMID8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCA6IEZOTV9OT01BVENIKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoMCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGMgPT0gJy8nICYmIChmbGFncyAmIEZOTV9QQVRITkFNRSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChzdHJpbmcgPSBzdHJjaHIoc3RyaW5nLCAnLycpKSA9PSBOVUxMKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoRk5NX05PTUFUQ0gpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgLyogR2VuZXJhbCBjYXNlLCB1c2UgcmVjdXJzaW9uLiAqLwotICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCh0ZXN0ID0gKnN0cmluZykgIT0gRU9TKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZm5tYXRjaChwYXR0ZXJuLCBzdHJpbmcsIGZsYWdzICYgfkZOTV9QRVJJT0QpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoMCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ZXN0ID09ICcvJyAmJiAoZmxhZ3MgJiBGTk1fUEFUSE5BTUUpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArK3N0cmluZzsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoRk5NX05PTUFUQ0gpOwotICAgICAgICAgICAgICAgIGNhc2UgJ1snOgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCpzdHJpbmcgPT0gRU9TKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKEZOTV9OT01BVENIKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICgqc3RyaW5nID09ICcvJyAmJiAoZmxhZ3MgJiBGTk1fUEFUSE5BTUUpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKEZOTV9OT01BVENIKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICgqc3RyaW5nID09ICcuJyAmJiAoZmxhZ3MgJiBGTk1fUEVSSU9EKSAmJgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJpbmcgPT0gc3RyaW5nc3RhcnQgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGZsYWdzICYgRk5NX1BBVEhOQU1FKSAmJiAqKHN0cmluZyAtIDEpID09ICcvJykpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKEZOTV9OT01BVENIKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChyYW5nZW1hdGNoKHBhdHRlcm4sICpzdHJpbmcsIGZsYWdzLCAmbmV3cCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgUkFOR0VfRVJST1I6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG5vdCBhIGdvb2QgcmFuZ2UsIHRyZWF0IGFzIG5vcm1hbCB0ZXh0ICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gbm9ybWFsOwotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBSQU5HRV9NQVRDSDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0dGVybiA9IG5ld3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBSQU5HRV9OT01BVENIOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKEZOTV9OT01BVENIKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICsrc3RyaW5nOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSAnXFwnOgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEoZmxhZ3MgJiBGTk1fTk9FU0NBUEUpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoYyA9ICpwYXR0ZXJuKyspID09IEVPUykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMgPSAnXFwnOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tcGF0dGVybjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgLyogRkFMTFRIUk9VR0ggKi8KLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIG5vcm1hbDoKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjICE9ICpzdHJpbmcgJiYgISgoZmxhZ3MgJiBGTk1fQ0FTRUZPTEQpICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodG9sb3dlcigodW5zaWduZWQgY2hhciljKSA9PQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9sb3dlcigodW5zaWduZWQgY2hhcikqc3RyaW5nKSkpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKEZOTV9OT01BVENIKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICsrc3RyaW5nOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAvKiBOT1RSRUFDSEVEICovCi19CisjZGVmaW5lCVJBTkdFX01BVENICTEKKyNkZWZpbmUJUkFOR0VfTk9NQVRDSAkwCisjZGVmaW5lCVJBTkdFX0VSUk9SCSgtMSkKIAogc3RhdGljIGludAotcmFuZ2VtYXRjaChjb25zdCBjaGFyICpwYXR0ZXJuLCBjaGFyIHRlc3QsIGludCBmbGFncywgY2hhciAqKm5ld3ApCitjbGFzc21hdGNoKGNvbnN0IGNoYXIgKnBhdHRlcm4sIGNoYXIgdGVzdCwgaW50IGZvbGRjYXNlLCBjb25zdCBjaGFyICoqZXApCiB7Ci0gICAgICAgIGludCBuZWdhdGUsIG9rOwotICAgICAgICBjaGFyIGMsIGMyOworCXN0cnVjdCBjY2xhc3MgKmNjOworCWNvbnN0IGNoYXIgKmNvbG9uOworCXNpemVfdCBsZW47CisJaW50IHJ2YWwgPSBSQU5HRV9OT01BVENIOworCWNvbnN0IGNoYXIgKiBjb25zdCBtaXNtYXRjaCA9IHBhdHRlcm47CiAKLSAgICAgICAgLyoKLSAgICAgICAgICogQSBicmFja2V0IGV4cHJlc3Npb24gc3RhcnRpbmcgd2l0aCBhbiB1bnF1b3RlZCBjaXJjdW1mbGV4Ci0gICAgICAgICAqIGNoYXJhY3RlciBwcm9kdWNlcyB1bnNwZWNpZmllZCByZXN1bHRzIChJRUVFIDEwMDMuMi0xOTkyLAotICAgICAgICAgKiAzLjEzLjIpLiAgVGhpcyBpbXBsZW1lbnRhdGlvbiB0cmVhdHMgaXQgbGlrZSAnIScsIGZvcgotICAgICAgICAgKiBjb25zaXN0ZW5jeSB3aXRoIHRoZSByZWd1bGFyIGV4cHJlc3Npb24gc3ludGF4LgotICAgICAgICAgKiBKLlQuIENvbmtsaW4gKGNvbmtsaW5AbmdhaS5rYWxlaWRhLmNvbSkKKwlpZiAoKnBhdHRlcm4gIT0gJ1snIHx8IHBhdHRlcm5bMV0gIT0gJzonKSB7CisJCSplcCA9IG1pc21hdGNoOworCQlyZXR1cm4oUkFOR0VfRVJST1IpOworCX0KKworCXBhdHRlcm4gKz0gMjsKKworCWlmICgoY29sb24gPSBzdHJjaHIocGF0dGVybiwgJzonKSkgPT0gTlVMTCB8fCBjb2xvblsxXSAhPSAnXScpIHsKKwkJKmVwID0gbWlzbWF0Y2g7CisJCXJldHVybihSQU5HRV9FUlJPUik7CisJfQorCSplcCA9IGNvbG9uICsgMjsKKwlsZW4gPSAoc2l6ZV90KShjb2xvbiAtIHBhdHRlcm4pOworCisJaWYgKGZvbGRjYXNlICYmIHN0cm5jbXAocGF0dGVybiwgInVwcGVyOl0iLCA3KSA9PSAwKQorCQlwYXR0ZXJuID0gImxvd2VyOl0iOworCWZvciAoY2MgPSBjY2xhc3NlczsgY2MtPm5hbWUgIT0gTlVMTDsgY2MrKykgeworCQlpZiAoIXN0cm5jbXAocGF0dGVybiwgY2MtPm5hbWUsIGxlbikgJiYgY2MtPm5hbWVbbGVuXSA9PSAnXDAnKSB7CisJCQlpZiAoY2MtPmlzY3R5cGUoKHVuc2lnbmVkIGNoYXIpdGVzdCkpCisJCQkJcnZhbCA9IFJBTkdFX01BVENIOworCQkJYnJlYWs7CisJCX0KKwl9CisJaWYgKGNjLT5uYW1lID09IE5VTEwpIHsKKwkJLyogaW52YWxpZCBjaGFyYWN0ZXIgY2xhc3MsIHRyZWF0IGFzIG5vcm1hbCB0ZXh0ICovCisJCSplcCA9IG1pc21hdGNoOworCQlydmFsID0gUkFOR0VfRVJST1I7CisJfQorCXJldHVybihydmFsKTsKK30KKworLyogTW9zdCBNQkNTL2NvbGxhdGlvbi9jYXNlIGlzc3VlcyBoYW5kbGVkIGhlcmUuICBXaWxkY2FyZCAnKicgaXMgbm90IGhhbmRsZWQuCisgKiBFT1MgJ1wwJyBhbmQgdGhlIEZOTV9QQVRITkFNRSAnLycgZGVsaW1pdGVycyBhcmUgbm90IGFkdmFuY2VkIG92ZXIsIAorICogaG93ZXZlciB0aGUgIlwvIiBzZXF1ZW5jZSBpcyBhZHZhbmNlZCB0byAnLycuCisgKgorICogQm90aCBwYXR0ZXJuIGFuZCBzdHJpbmcgYXJlICoqY2hhciB0byBzdXBwb3J0IHBvaW50ZXIgaW5jcmVtZW50IG9mIGFyYml0cmFyeQorICogbXVsdGlieXRlIGNoYXJhY3RlcnMgZm9yIHRoZSBnaXZlbiBsb2NhbGUsIGluIGEgbGF0ZXIgaXRlcmF0aW9uIG9mIHRoaXMgY29kZQorICovCitzdGF0aWMgaW50IGZubWF0Y2hfY2goY29uc3QgY2hhciAqKnBhdHRlcm4sIGNvbnN0IGNoYXIgKipzdHJpbmcsIGludCBmbGFncykKK3sKKyAgICBjb25zdCBjaGFyICogY29uc3QgbWlzbWF0Y2ggPSAqcGF0dGVybjsKKyAgICBjb25zdCBpbnQgbm9jYXNlID0gISEoZmxhZ3MgJiBGTk1fQ0FTRUZPTEQpOworICAgIGNvbnN0IGludCBlc2NhcGUgPSAhKGZsYWdzICYgRk5NX05PRVNDQVBFKTsKKyAgICBjb25zdCBpbnQgc2xhc2ggPSAhIShmbGFncyAmIEZOTV9QQVRITkFNRSk7CisgICAgaW50IHJlc3VsdCA9IEZOTV9OT01BVENIOworICAgIGNvbnN0IGNoYXIgKnN0YXJ0Y2g7CisgICAgaW50IG5lZ2F0ZTsKKworICAgIGlmICgqKnBhdHRlcm4gPT0gJ1snKQorICAgIHsKKyAgICAgICAgKysqcGF0dGVybjsKKworICAgICAgICAvKiBIYW5kbGUgbmVnYXRpb24sIGVpdGhlciBsZWFkaW5nICEgb3IgXiBvcGVyYXRvcnMgKG5ldmVyIGJvdGgpICovCisgICAgICAgIG5lZ2F0ZSA9ICgoKipwYXR0ZXJuID09ICchJykgfHwgKCoqcGF0dGVybiA9PSAnXicpKTsKKyAgICAgICAgaWYgKG5lZ2F0ZSkKKyAgICAgICAgICAgICsrKnBhdHRlcm47CisKKyAgICAgICAgLyogJ10nIGlzIGFuIG9yZGluYXJ5IGNoYXJhY3RlciBhdCB0aGUgc3RhcnQgb2YgdGhlIHJhbmdlIHBhdHRlcm4gKi8KKyAgICAgICAgaWYgKCoqcGF0dGVybiA9PSAnXScpCisgICAgICAgICAgICBnb3RvIGxlYWRpbmdjbG9zZWJyYWNlOworCisgICAgICAgIHdoaWxlICgqKnBhdHRlcm4pCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICgqKnBhdHRlcm4gPT0gJ10nKSB7CisgICAgICAgICAgICAgICAgKysqcGF0dGVybjsKKyAgICAgICAgICAgICAgICAvKiBYWFg6IEZpeCBmb3IgTUJDUyBjaGFyYWN0ZXIgd2lkdGggKi8KKyAgICAgICAgICAgICAgICArKypzdHJpbmc7CisgICAgICAgICAgICAgICAgcmV0dXJuIChyZXN1bHQgXiBuZWdhdGUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoZXNjYXBlICYmICgqKnBhdHRlcm4gPT0gJ1xcJykpIHsKKyAgICAgICAgICAgICAgICArKypwYXR0ZXJuOworCisgICAgICAgICAgICAgICAgLyogUGF0dGVybnMgbXVzdCBiZSB0ZXJtaW5hdGVkIHdpdGggJ10nLCBub3QgRU9TICovCisgICAgICAgICAgICAgICAgaWYgKCEqKnBhdHRlcm4pCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvKiBQYXR0ZXJucyBtdXN0IGJlIHRlcm1pbmF0ZWQgd2l0aCAnXScgbm90ICcvJyAqLworICAgICAgICAgICAgaWYgKHNsYXNoICYmICgqKnBhdHRlcm4gPT0gJy8nKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgLyogTWF0Y2ggY2hhcmFjdGVyIGNsYXNzZXMuICovCisgICAgICAgICAgICBpZiAoY2xhc3NtYXRjaCgqcGF0dGVybiwgKipzdHJpbmcsIG5vY2FzZSwgcGF0dGVybikKKyAgICAgICAgICAgICAgICA9PSBSQU5HRV9NQVRDSCkgeworICAgICAgICAgICAgICAgIHJlc3VsdCA9IDA7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisKK2xlYWRpbmdjbG9zZWJyYWNlOgorICAgICAgICAgICAgLyogTG9vayBhdCBvbmx5IHdlbGwtZm9ybWVkIHJhbmdlIHBhdHRlcm5zOyAKKyAgICAgICAgICAgICAqICJ4LV0iIGlzIG5vdCBhbGxvd2VkIHVubGVzcyBlc2NhcGVkICgieC1cXSIpCisgICAgICAgICAgICAgKiBYWFg6IEZpeCBmb3IgbG9jYWxlL01CQ1MgY2hhcmFjdGVyIHdpZHRoCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIGlmICgoKCpwYXR0ZXJuKVsxXSA9PSAnLScpICYmICgoKnBhdHRlcm4pWzJdICE9ICddJykpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc3RhcnRjaCA9ICpwYXR0ZXJuOworICAgICAgICAgICAgICAgICpwYXR0ZXJuICs9IChlc2NhcGUgJiYgKCgqcGF0dGVybilbMl0gPT0gJ1xcJykpID8gMyA6IDI7CisKKyAgICAgICAgICAgICAgICAvKiBOT1QgYSBwcm9wZXJseSBiYWxhbmNlZCBbZXhwcl0gcGF0dGVybiwgRU9TIHRlcm1pbmF0ZWQgCisgICAgICAgICAgICAgICAgICogb3IgcmFuZ2VzIGNvbnRhaW5pbmcgYSBzbGFzaCBpbiBGTk1fUEFUSE5BTUUgbW9kZSBwYXR0ZXJuCisgICAgICAgICAgICAgICAgICogZmFsbCBvdXQgdG8gdG8gdGhlIHJld2luZCBhbmQgdGVzdCAnWycgbGl0ZXJhbCBjb2RlIHBhdGgKKyAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICBpZiAoISoqcGF0dGVybiB8fCAoc2xhc2ggJiYgKCoqcGF0dGVybiA9PSAnLycpKSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICAvKiBYWFg6IGhhbmRsZSBsb2NhbGUvTUJDUyBjb21wYXJpc29uLCBhZHZhbmNlIGJ5IE1CQ1MgY2hhciB3aWR0aCAqLworICAgICAgICAgICAgICAgIGlmICgoKipzdHJpbmcgPj0gKnN0YXJ0Y2gpICYmICgqKnN0cmluZyA8PSAqKnBhdHRlcm4pKQorICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSAwOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5vY2FzZSAmJiAoaXN1cHBlcigqKnN0cmluZykgfHwgaXN1cHBlcigqc3RhcnRjaCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IGlzdXBwZXIoKipwYXR0ZXJuKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAodG9sb3dlcigqKnN0cmluZykgPj0gdG9sb3dlcigqc3RhcnRjaCkpIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmICh0b2xvd2VyKCoqc3RyaW5nKSA8PSB0b2xvd2VyKCoqcGF0dGVybikpKQorICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSAwOworCisgICAgICAgICAgICAgICAgKysqcGF0dGVybjsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLyogWFhYOiBoYW5kbGUgbG9jYWxlL01CQ1MgY29tcGFyaXNvbiwgYWR2YW5jZSBieSBNQkNTIGNoYXIgd2lkdGggKi8KKyAgICAgICAgICAgIGlmICgoKipzdHJpbmcgPT0gKipwYXR0ZXJuKSkKKyAgICAgICAgICAgICAgICByZXN1bHQgPSAwOworICAgICAgICAgICAgZWxzZSBpZiAobm9jYXNlICYmIChpc3VwcGVyKCoqc3RyaW5nKSB8fCBpc3VwcGVyKCoqcGF0dGVybikpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgKHRvbG93ZXIoKipzdHJpbmcpID09IHRvbG93ZXIoKipwYXR0ZXJuKSkpCisgICAgICAgICAgICAgICAgcmVzdWx0ID0gMDsKKworICAgICAgICAgICAgKysqcGF0dGVybjsKKyAgICAgICAgfQorCisgICAgICAgIC8qIE5PVCBhIHByb3Blcmx5IGJhbGFuY2VkIFtleHByXSBwYXR0ZXJuOyBSZXdpbmQKKyAgICAgICAgICogYW5kIHJlc2V0IHJlc3VsdCB0byB0ZXN0ICdbJyBsaXRlcmFsCiAgICAgICAgICAqLwotICAgICAgICBpZiAoKG5lZ2F0ZSA9ICgqcGF0dGVybiA9PSAnIScgfHwgKnBhdHRlcm4gPT0gJ14nKSkpCisgICAgICAgICpwYXR0ZXJuID0gbWlzbWF0Y2g7CisgICAgICAgIHJlc3VsdCA9IEZOTV9OT01BVENIOworICAgIH0KKyAgICBlbHNlIGlmICgqKnBhdHRlcm4gPT0gJz8nKSB7CisgICAgICAgIC8qIE9wdGltaXplICc/JyBtYXRjaCBiZWZvcmUgdW5lc2NhcGluZyAqKnBhdHRlcm4gKi8KKyAgICAgICAgaWYgKCEqKnN0cmluZyB8fCAoc2xhc2ggJiYgKCoqc3RyaW5nID09ICcvJykpKQorICAgICAgICAgICAgcmV0dXJuIEZOTV9OT01BVENIOworICAgICAgICByZXN1bHQgPSAwOworICAgICAgICBnb3RvIGZubWF0Y2hfY2hfc3VjY2VzczsKKyAgICB9CisgICAgZWxzZSBpZiAoZXNjYXBlICYmICgqKnBhdHRlcm4gPT0gJ1xcJykgJiYgKCpwYXR0ZXJuKVsxXSkgeworICAgICAgICArKypwYXR0ZXJuOworICAgIH0KKworICAgIC8qIFhYWDogaGFuZGxlIGxvY2FsZS9NQkNTIGNvbXBhcmlzb24sIGFkdmFuY2UgYnkgdGhlIE1CQ1MgY2hhciB3aWR0aCAqLworICAgIGlmICgqKnN0cmluZyA9PSAqKnBhdHRlcm4pCisgICAgICAgIHJlc3VsdCA9IDA7CisgICAgZWxzZSBpZiAobm9jYXNlICYmIChpc3VwcGVyKCoqc3RyaW5nKSB8fCBpc3VwcGVyKCoqcGF0dGVybikpCisgICAgICAgICAgICAgICAgICAgICYmICh0b2xvd2VyKCoqc3RyaW5nKSA9PSB0b2xvd2VyKCoqcGF0dGVybikpKQorICAgICAgICByZXN1bHQgPSAwOworCisgICAgLyogUmVmdXNlIHRvIGFkdmFuY2Ugb3ZlciB0cmFpbGluZyBzbGFzaCBvciBudWxscworICAgICAqLworICAgIGlmICghKipzdHJpbmcgfHwgISoqcGF0dGVybiB8fCAoc2xhc2ggJiYgKCgqKnN0cmluZyA9PSAnLycpIHx8ICgqKnBhdHRlcm4gPT0gJy8nKSkpKQorICAgICAgICByZXR1cm4gcmVzdWx0OworCitmbm1hdGNoX2NoX3N1Y2Nlc3M6CisgICAgKysqcGF0dGVybjsKKyAgICArKypzdHJpbmc7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworCitpbnQgZm5tYXRjaChjb25zdCBjaGFyICpwYXR0ZXJuLCBjb25zdCBjaGFyICpzdHJpbmcsIGludCBmbGFncykKK3sKKyAgICBzdGF0aWMgY29uc3QgY2hhciBkdW1teXN0cmluZ1syXSA9IHsnICcsIDB9OworICAgIGNvbnN0IGludCBlc2NhcGUgPSAhKGZsYWdzICYgRk5NX05PRVNDQVBFKTsKKyAgICBjb25zdCBpbnQgc2xhc2ggPSAhIShmbGFncyAmIEZOTV9QQVRITkFNRSk7CisgICAgY29uc3QgaW50IGxlYWRpbmdfZGlyID0gISEoZmxhZ3MgJiBGTk1fTEVBRElOR19ESVIpOworICAgIGNvbnN0IGNoYXIgKnN0cmVuZHNlZzsKKyAgICBjb25zdCBjaGFyICpkdW1teXB0cjsKKyAgICBjb25zdCBjaGFyICptYXRjaHB0cjsKKyAgICBpbnQgd2lsZDsKKyAgICAvKiBGb3IgJyonIHdpbGQgcHJvY2Vzc2luZyBvbmx5OyBzdXJwcmVzcyAndXNlZCBiZWZvcmUgaW5pdGlhbGl6YXRpb24nCisgICAgICogd2FybmluZ3Mgd2l0aCBkdW1teSBpbml0aWFsaXphdGlvbiB2YWx1ZXM7CisgICAgICovCisgICAgY29uc3QgY2hhciAqc3Ryc3RhcnRzZWcgPSBOVUxMOworICAgIGNvbnN0IGNoYXIgKm1pc21hdGNoID0gTlVMTDsKKyAgICBpbnQgbWF0Y2hsZW4gPSAwOworCisgICAgaWYgKHN0cm5sZW4ocGF0dGVybiwgUEFUSF9NQVgpID09IFBBVEhfTUFYIHx8CisgICAgICAgIHN0cm5sZW4oc3RyaW5nLCBQQVRIX01BWCkgPT0gUEFUSF9NQVgpCisgICAgICAgICAgICByZXR1cm4gKEZOTV9OT01BVENIKTsKKworICAgIGlmICgqcGF0dGVybiA9PSAnKicpCisgICAgICAgIGdvdG8gZmlyc3RzZWdtZW50OworCisgICAgd2hpbGUgKCpwYXR0ZXJuICYmICpzdHJpbmcpCisgICAgeworICAgICAgICAvKiBQcmUtZGVjb2RlICJcLyIgd2hpY2ggaGFzIG5vIHNwZWNpYWwgc2lnbmlmaWNhbmNlLCBhbmQKKyAgICAgICAgICogbWF0Y2ggYmFsYW5jZWQgc2xhc2hlcywgc3RhcnRpbmcgYSBuZXcgc2VnbWVudCBwYXR0ZXJuCisgICAgICAgICAqLworICAgICAgICBpZiAoc2xhc2ggJiYgZXNjYXBlICYmICgqcGF0dGVybiA9PSAnXFwnKSAmJiAocGF0dGVyblsxXSA9PSAnLycpKQorICAgICAgICAgICAgKytwYXR0ZXJuOworICAgICAgICBpZiAoc2xhc2ggJiYgKCpwYXR0ZXJuID09ICcvJykgJiYgKCpzdHJpbmcgPT0gJy8nKSkgeworICAgICAgICAgICAgKytwYXR0ZXJuOworICAgICAgICAgICAgKytzdHJpbmc7CisgICAgICAgIH0gICAgICAgICAgICAKKworZmlyc3RzZWdtZW50OgorICAgICAgICAvKiBBdCB0aGUgYmVnaW5uaW5nIG9mIGVhY2ggc2VnbWVudCwgdmFsaWRhdGUgbGVhZGluZyBwZXJpb2QgYmVoYXZpb3IuCisgICAgICAgICAqLworICAgICAgICBpZiAoKGZsYWdzICYgRk5NX1BFUklPRCkgJiYgKCpzdHJpbmcgPT0gJy4nKSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCpwYXR0ZXJuID09ICcuJykKICAgICAgICAgICAgICAgICArK3BhdHRlcm47CisgICAgICAgICAgICBlbHNlIGlmIChlc2NhcGUgJiYgKCpwYXR0ZXJuID09ICdcXCcpICYmIChwYXR0ZXJuWzFdID09ICcuJykpCisgICAgICAgICAgICAgICAgcGF0dGVybiArPSAyOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJldHVybiBGTk1fTk9NQVRDSDsKKyAgICAgICAgICAgICsrc3RyaW5nOworICAgICAgICB9CiAKLSAgICAgICAgaWYgKGZsYWdzICYgRk5NX0NBU0VGT0xEKQotICAgICAgICAgICAgICAgIHRlc3QgPSAoY2hhcil0b2xvd2VyKCh1bnNpZ25lZCBjaGFyKXRlc3QpOwotCi0gICAgICAgIC8qCi0gICAgICAgICAqIEEgcmlnaHQgYnJhY2tldCBzaGFsbCBsb3NlIGl0cyBzcGVjaWFsIG1lYW5pbmcgYW5kIHJlcHJlc2VudAotICAgICAgICAgKiBpdHNlbGYgaW4gYSBicmFja2V0IGV4cHJlc3Npb24gaWYgaXQgb2NjdXJzIGZpcnN0IGluIHRoZSBsaXN0LgotICAgICAgICAgKiAtLSBQT1NJWC4yIDIuOC4zLjIKKyAgICAgICAgLyogRGV0ZXJtaW5lIHRoZSBlbmQgb2Ygc3RyaW5nIHNlZ21lbnQKKyAgICAgICAgICoKKyAgICAgICAgICogUHJlc3VtZXMgJy8nIGNoYXJhY3RlciBpcyB1bmlxdWUsIG5vdCBjb21wb3NpdGUgaW4gYW55IE1CQ1MgZW5jb2RpbmcKICAgICAgICAgICovCi0gICAgICAgIG9rID0gMDsKLSAgICAgICAgYyA9ICpwYXR0ZXJuKys7Ci0gICAgICAgIGRvIHsKLSAgICAgICAgICAgICAgICBpZiAoYyA9PSAnXFwnICYmICEoZmxhZ3MgJiBGTk1fTk9FU0NBUEUpKQotICAgICAgICAgICAgICAgICAgICAgICAgYyA9ICpwYXR0ZXJuKys7Ci0gICAgICAgICAgICAgICAgaWYgKGMgPT0gRU9TKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChSQU5HRV9FUlJPUik7Ci0gICAgICAgICAgICAgICAgaWYgKGMgPT0gJy8nICYmIChmbGFncyAmIEZOTV9QQVRITkFNRSkpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFJBTkdFX05PTUFUQ0gpOwotICAgICAgICAgICAgICAgIGlmICgoZmxhZ3MgJiBGTk1fQ0FTRUZPTEQpKQotICAgICAgICAgICAgICAgICAgICAgICAgYyA9IChjaGFyKXRvbG93ZXIoKHVuc2lnbmVkIGNoYXIpYyk7Ci0gICAgICAgICAgICAgICAgaWYgKCpwYXR0ZXJuID09ICctJwotICAgICAgICAgICAgICAgICAgICAmJiAoYzIgPSAqKHBhdHRlcm4rMSkpICE9IEVPUyAmJiBjMiAhPSAnXScpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHBhdHRlcm4gKz0gMjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjMiA9PSAnXFwnICYmICEoZmxhZ3MgJiBGTk1fTk9FU0NBUEUpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjMiA9ICpwYXR0ZXJuKys7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYzIgPT0gRU9TKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFJBTkdFX0VSUk9SKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmbGFncyAmIEZOTV9DQVNFRk9MRCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYzIgPSAoY2hhcil0b2xvd2VyKCh1bnNpZ25lZCBjaGFyKWMyKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjIDw9IHRlc3QgJiYgdGVzdCA8PSBjMikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2sgPSAxOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYyA9PSB0ZXN0KQotICAgICAgICAgICAgICAgICAgICAgICAgb2sgPSAxOwotICAgICAgICB9IHdoaWxlICgoYyA9ICpwYXR0ZXJuKyspICE9ICddJyk7CisgICAgICAgIGlmIChzbGFzaCkgeworICAgICAgICAgICAgc3RyZW5kc2VnID0gc3RyY2hyKHN0cmluZywgJy8nKTsKKyAgICAgICAgICAgIGlmICghc3RyZW5kc2VnKQorICAgICAgICAgICAgICAgIHN0cmVuZHNlZyA9IHN0cmNocihzdHJpbmcsICdcMCcpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgc3RyZW5kc2VnID0gc3RyY2hyKHN0cmluZywgJ1wwJyk7CisgICAgICAgIH0KIAotICAgICAgICAqbmV3cCA9IChjaGFyICopcGF0dGVybjsKLSAgICAgICAgcmV0dXJuIChvayA9PSBuZWdhdGUgPyBSQU5HRV9OT01BVENIIDogUkFOR0VfTUFUQ0gpOworICAgICAgICAvKiBBbGxvdyBwYXR0ZXJuICcqJyB0byBiZSBjb25zdW1lZCBldmVuIHdpdGggbm8gcmVtYWluaW5nIHN0cmluZyB0byBtYXRjaAorICAgICAgICAgKi8KKyAgICAgICAgd2hpbGUgKCpwYXR0ZXJuKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoKHN0cmluZyA+IHN0cmVuZHNlZykKKyAgICAgICAgICAgICAgICB8fCAoKHN0cmluZyA9PSBzdHJlbmRzZWcpICYmICgqcGF0dGVybiAhPSAnKicpKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgaWYgKHNsYXNoICYmICgoKnBhdHRlcm4gPT0gJy8nKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKGVzY2FwZSAmJiAoKnBhdHRlcm4gPT0gJ1xcJykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgKHBhdHRlcm5bMV0gPT0gJy8nKSkpKQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAvKiBSZWR1Y2UgZ3JvdXBzIG9mICcqJyBhbmQgJz8nIHRvIG4gJz8nIG1hdGNoZXMKKyAgICAgICAgICAgICAqIGZvbGxvd2VkIGJ5IG9uZSAnKicgdGVzdCBmb3Igc2ltcGxpY2l0eQorICAgICAgICAgICAgICovCisgICAgICAgICAgICBmb3IgKHdpbGQgPSAwOyAoKCpwYXR0ZXJuID09ICcqJykgfHwgKCpwYXR0ZXJuID09ICc/JykpOyArK3BhdHRlcm4pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKCpwYXR0ZXJuID09ICcqJykgeworICAgICAgICAgICAgICAgICAgICB3aWxkID0gMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoc3RyaW5nIDwgc3RyZW5kc2VnKSB7ICAvKiAmJiAoKnBhdHRlcm4gPT0gJz8nKSAqLworICAgICAgICAgICAgICAgICAgICAvKiBYWFg6IEFkdmFuY2UgMSBjaGFyIGZvciBNQkNTIGxvY2FsZSAqLworICAgICAgICAgICAgICAgICAgICArK3N0cmluZzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7ICAvKiAoc3RyaW5nID49IHN0cmVuZHNlZykgJiYgKCpwYXR0ZXJuID09ICc/JykgKi8KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZOTV9OT01BVENIOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHdpbGQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgc3Ryc3RhcnRzZWcgPSBzdHJpbmc7CisgICAgICAgICAgICAgICAgbWlzbWF0Y2ggPSBwYXR0ZXJuOworCisgICAgICAgICAgICAgICAgLyogQ291bnQgZml4ZWQgKG5vbiAnKicpIGNoYXIgbWF0Y2hlcyByZW1haW5pbmcgaW4gcGF0dGVybgorICAgICAgICAgICAgICAgICAqIGV4Y2x1ZGluZyAnLycgKG9yICJcLyIpIGFuZCAnKicKKyAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICBmb3IgKG1hdGNocHRyID0gcGF0dGVybiwgbWF0Y2hsZW4gPSAwOyAxOyArK21hdGNobGVuKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCgqbWF0Y2hwdHIgPT0gJ1wwJykgCisgICAgICAgICAgICAgICAgICAgICAgICB8fCAoc2xhc2ggJiYgKCgqbWF0Y2hwdHIgPT0gJy8nKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoZXNjYXBlICYmICgqbWF0Y2hwdHIgPT0gJ1xcJykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAobWF0Y2hwdHJbMV0gPT0gJy8nKSkpKSkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgLyogQ29tcGFyZSBwcmVjaXNlbHkgdGhpcyBtYW55IHRyYWlsaW5nIHN0cmluZyBjaGFycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAqIHRoZSByZXN1bHRpbmcgbWF0Y2ggbmVlZHMgbm8gd2lsZGNhcmQgbG9vcAorICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgICAgICAgICAvKiBYWFg6IEFkanVzdCBmb3IgTUJDUyAqLworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0cmluZyArIG1hdGNobGVuID4gc3RyZW5kc2VnKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBGTk1fTk9NQVRDSDsKKworICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nID0gc3RyZW5kc2VnIC0gbWF0Y2hsZW47CisgICAgICAgICAgICAgICAgICAgICAgICB3aWxkID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKCptYXRjaHB0ciA9PSAnKicpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIEVuc3VyZSBhdCBsZWFzdCB0aGlzIG1hbnkgdHJhaWxpbmcgc3RyaW5nIGNoYXJzIHJlbWFpbgorICAgICAgICAgICAgICAgICAgICAgICAgICogZm9yIHRoZSBmaXJzdCBjb21wYXJpc29uCisgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFhYWDogQWRqdXN0IGZvciBNQkNTICovCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RyaW5nICsgbWF0Y2hsZW4gPiBzdHJlbmRzZWcpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZOTV9OT01BVENIOworCisgICAgICAgICAgICAgICAgICAgICAgICAvKiBCZWdpbiBmaXJzdCB3aWxkIGNvbXBhcmlzb24gYXQgdGhlIGN1cnJlbnQgcG9zaXRpb24gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgLyogU2tpcCBmb3J3YXJkIGluIHBhdHRlcm4gYnkgYSBzaW5nbGUgY2hhcmFjdGVyIG1hdGNoCisgICAgICAgICAgICAgICAgICAgICAqIFVzZSBhIGR1bW15IGZubWF0Y2hfY2goKSB0ZXN0IHRvIGNvdW50IG9uZSAiW3JhbmdlXSIgZXNjYXBlCisgICAgICAgICAgICAgICAgICAgICAqLyAKKyAgICAgICAgICAgICAgICAgICAgLyogWFhYOiBBZGp1c3QgZm9yIE1CQ1MgKi8KKyAgICAgICAgICAgICAgICAgICAgaWYgKGVzY2FwZSAmJiAoKm1hdGNocHRyID09ICdcXCcpICYmIG1hdGNocHRyWzFdKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaHB0ciArPSAyOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCptYXRjaHB0ciA9PSAnWycpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGR1bW15cHRyID0gZHVtbXlzdHJpbmc7CisgICAgICAgICAgICAgICAgICAgICAgICBmbm1hdGNoX2NoKCZtYXRjaHB0ciwgJmR1bW15cHRyLCBmbGFncyk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICArK21hdGNocHRyOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvKiBJbmNyZW1lbnRhbGx5IG1hdGNoIHN0cmluZyBhZ2FpbnN0IHRoZSBwYXR0ZXJuCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIHdoaWxlICgqcGF0dGVybiAmJiAoc3RyaW5nIDwgc3RyZW5kc2VnKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvKiBTdWNjZXNzOyBiZWdpbiBhIG5ldyB3aWxkIHBhdHRlcm4gc2VhcmNoCisgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgaWYgKCpwYXR0ZXJuID09ICcqJykKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBpZiAoc2xhc2ggJiYgKCgqc3RyaW5nID09ICcvJykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICgqcGF0dGVybiA9PSAnLycpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoZXNjYXBlICYmICgqcGF0dGVybiA9PSAnXFwnKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAocGF0dGVyblsxXSA9PSAnLycpKSkpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgLyogQ29tcGFyZSBjaCdzICh0aGUgcGF0dGVybiBpcyBhZHZhbmNlZCBvdmVyICJcLyIgdG8gdGhlICcvJywKKyAgICAgICAgICAgICAgICAgKiBidXQgc2xhc2hlcyB3aWxsIG1pc21hdGNoLCBhbmQgYXJlIG5vdCBjb25zdW1lZCkKKyAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICBpZiAoIWZubWF0Y2hfY2goJnBhdHRlcm4sICZzdHJpbmcsIGZsYWdzKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgICAgICAvKiBGYWlsZWQgdG8gbWF0Y2gsIGxvb3AgYWdhaW5zdCBuZXh0IGNoYXIgb2Zmc2V0IG9mIHN0cmluZyBzZWdtZW50IAorICAgICAgICAgICAgICAgICAqIHVudGlsIG5vdCBlbm91Z2ggc3RyaW5nIGNoYXJzIHJlbWFpbiB0byBtYXRjaCB0aGUgZml4ZWQgcGF0dGVybgorICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgIGlmICh3aWxkKSB7CisgICAgICAgICAgICAgICAgICAgIC8qIFhYWDogQWR2YW5jZSAxIGNoYXIgZm9yIE1CQ1MgbG9jYWxlICovCisgICAgICAgICAgICAgICAgICAgIHN0cmluZyA9ICsrc3Ryc3RhcnRzZWc7CisgICAgICAgICAgICAgICAgICAgIGlmIChzdHJpbmcgKyBtYXRjaGxlbiA+IHN0cmVuZHNlZykKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBGTk1fTk9NQVRDSDsKKworICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuID0gbWlzbWF0Y2g7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBGTk1fTk9NQVRDSDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmICgqc3RyaW5nICYmICEoKHNsYXNoIHx8IGxlYWRpbmdfZGlyKSAmJiAoKnN0cmluZyA9PSAnLycpKSkKKyAgICAgICAgICAgIHJldHVybiBGTk1fTk9NQVRDSDsKKworICAgICAgICBpZiAoKnBhdHRlcm4gJiYgIShzbGFzaCAmJiAoKCpwYXR0ZXJuID09ICcvJykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IChlc2NhcGUgJiYgKCpwYXR0ZXJuID09ICdcXCcpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIChwYXR0ZXJuWzFdID09ICcvJykpKSkpCisgICAgICAgICAgICByZXR1cm4gRk5NX05PTUFUQ0g7CisKKyAgICAgICAgaWYgKGxlYWRpbmdfZGlyICYmICEqcGF0dGVybiAmJiAqc3RyaW5nID09ICcvJykKKyAgICAgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIC8qIFdoZXJlIGJvdGggcGF0dGVybiBhbmQgc3RyaW5nIGFyZSBhdCBFT1MsIGRlY2xhcmUgc3VjY2VzcworICAgICAqLworICAgIGlmICghKnN0cmluZyAmJiAhKnBhdHRlcm4pCisgICAgICAgIHJldHVybiAwOworCisgICAgLyogcGF0dGVybiBkaWRuJ3QgbWF0Y2ggdG8gdGhlIGVuZCBvZiBzdHJpbmcgKi8KKyAgICByZXR1cm4gRk5NX05PTUFUQ0g7CiB9CmRpZmYgLS1naXQgYS9saWJjL3VuaXN0ZC9nZXRjd2QuYyBiL2xpYmMvdW5pc3RkL2dldGN3ZC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMTcyNDQ1Li4wMDAwMDAwCi0tLSBhL2xpYmMvdW5pc3RkL2dldGN3ZC5jCisrKyAvZGV2L251bGwKQEAgLTEsNDAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqICAgIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKLSAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi0gKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCi0gKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAotICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCi0gKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKLSAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotI2luY2x1ZGUgPHVuaXN0ZC5oPgotI2luY2x1ZGUgPGVycm5vLmg+Ci0KLWV4dGVybiBpbnQgX19nZXRjd2QoY2hhciAqIGJ1Ziwgc2l6ZV90IHNpemUpOwotCi1jaGFyICpnZXRjd2QoY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSkKLXsKLSAgaWYgKGJ1ZiA9PSBOVUxMIHx8IHNpemUgPT0gMCkgewotICAgIGVycm5vID0gRUlOVkFMOwotICAgIHJldHVybiBOVUxMOwotICB9Ci0gIHJldHVybiAoIF9fZ2V0Y3dkKGJ1Ziwgc2l6ZSkgPCAwICkgPyBOVUxMIDogYnVmOwotfQpkaWZmIC0tZ2l0IGEvbGliYy91bmlzdGQvZ2V0b3B0X2xvbmcuYyBiL2xpYmMvdW5pc3RkL2dldG9wdF9sb25nLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRiZGYwMWEuLjAwMDAwMDAKLS0tIGEvbGliYy91bmlzdGQvZ2V0b3B0X2xvbmcuYworKysgL2Rldi9udWxsCkBAIC0xLDUzNyArMCwwIEBACi0vKgkkT3BlbkJTRDogZ2V0b3B0X2xvbmcuYyx2IDEuMjAgMjAwNS8xMC8yNSAxNTo0OTozNyBqbWMgRXhwICQJKi8KLS8qCSROZXRCU0Q6IGdldG9wdF9sb25nLmMsdiAxLjE1IDIwMDIvMDEvMzEgMjI6NDM6NDAgdHYgRXhwICQJKi8KLQotLyoKLSAqIENvcHlyaWdodCAoYykgMjAwMiBUb2RkIEMuIE1pbGxlciA8VG9kZC5NaWxsZXJAY291cnRlc2FuLmNvbT4KLSAqCi0gKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKLSAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCi0gKgotICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCi0gKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCi0gKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgotICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUwotICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCi0gKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgotICogT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KLSAqCi0gKiBTcG9uc29yZWQgaW4gcGFydCBieSB0aGUgRGVmZW5zZSBBZHZhbmNlZCBSZXNlYXJjaCBQcm9qZWN0cwotICogQWdlbmN5IChEQVJQQSkgYW5kIEFpciBGb3JjZSBSZXNlYXJjaCBMYWJvcmF0b3J5LCBBaXIgRm9yY2UKLSAqIE1hdGVyaWVsIENvbW1hbmQsIFVTQUYsIHVuZGVyIGFncmVlbWVudCBudW1iZXIgRjM5NTAyLTk5LTEtMDUxMi4KLSAqLwotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAgVGhlIE5ldEJTRCBGb3VuZGF0aW9uLCBJbmMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gVGhlIE5ldEJTRCBGb3VuZGF0aW9uCi0gKiBieSBEaWV0ZXIgQmFyb24gYW5kIFRob21hcyBLbGF1c25lci4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQotICogICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgotICogICAgICAgIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE5ldEJTRAotICogICAgICAgIEZvdW5kYXRpb24sIEluYy4gYW5kIGl0cyBjb250cmlidXRvcnMuCi0gKiA0LiBOZWl0aGVyIHRoZSBuYW1lIG9mIFRoZSBOZXRCU0QgRm91bmRhdGlvbiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgTkVUQlNEIEZPVU5EQVRJT04sIElOQy4gQU5EIENPTlRSSUJVVE9SUwotICogYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVECi0gKiBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBGT1VOREFUSU9OIE9SIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQotICogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgPGVyci5oPgotI2luY2x1ZGUgPGVycm5vLmg+Ci0jaW5jbHVkZSA8Z2V0b3B0Lmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLQotI2RlZmluZQlSRVBMQUNFX0dFVE9QVAkJLyogdXNlIHRoaXMgZ2V0b3B0IGFzIHRoZSBzeXN0ZW0gZ2V0b3B0KDMpICovCi0KLSNpZmRlZiBSRVBMQUNFX0dFVE9QVAotaW50CW9wdGVyciA9IDE7CQkvKiBpZiBlcnJvciBtZXNzYWdlIHNob3VsZCBiZSBwcmludGVkICovCi1pbnQJb3B0aW5kID0gMTsJCS8qIGluZGV4IGludG8gcGFyZW50IGFyZ3YgdmVjdG9yICovCi1pbnQJb3B0b3B0ID0gJz8nOwkJLyogY2hhcmFjdGVyIGNoZWNrZWQgZm9yIHZhbGlkaXR5ICovCi1jaGFyICAgICpvcHRhcmc7CQkvKiBhcmd1bWVudCBhc3NvY2lhdGVkIHdpdGggb3B0aW9uICovCi0jZW5kaWYKLWludAlvcHRyZXNldDsJCS8qIHJlc2V0IGdldG9wdCAqLwotCi0jZGVmaW5lIFBSSU5UX0VSUk9SCSgob3B0ZXJyKSAmJiAoKm9wdGlvbnMgIT0gJzonKSkKLQotI2RlZmluZSBGTEFHX1BFUk1VVEUJMHgwMQkvKiBwZXJtdXRlIG5vbi1vcHRpb25zIHRvIHRoZSBlbmQgb2YgYXJndiAqLwotI2RlZmluZSBGTEFHX0FMTEFSR1MJMHgwMgkvKiB0cmVhdCBub24tb3B0aW9ucyBhcyBhcmdzIHRvIG9wdGlvbiAiLTEiICovCi0jZGVmaW5lIEZMQUdfTE9OR09OTFkJMHgwNAkvKiBvcGVyYXRlIGFzIGdldG9wdF9sb25nX29ubHkgKi8KLQotLyogcmV0dXJuIHZhbHVlcyAqLwotI2RlZmluZQlCQURDSAkJKGludCknPycKLSNkZWZpbmUJQkFEQVJHCQkoKCpvcHRpb25zID09ICc6JykgPyAoaW50KSc6JyA6IChpbnQpJz8nKQotI2RlZmluZQlJTk9SREVSIAkoaW50KTEKLQotI2RlZmluZQlFTVNHCQkiIgotCi1zdGF0aWMgaW50IGdldG9wdF9pbnRlcm5hbChpbnQsIGNoYXIgKiBjb25zdCAqLCBjb25zdCBjaGFyICosCi0JCQkgICBjb25zdCBzdHJ1Y3Qgb3B0aW9uICosIGludCAqLCBpbnQpOwotc3RhdGljIGludCBwYXJzZV9sb25nX29wdGlvbnMoY2hhciAqIGNvbnN0ICosIGNvbnN0IGNoYXIgKiwKLQkJCSAgICAgIGNvbnN0IHN0cnVjdCBvcHRpb24gKiwgaW50ICosIGludCk7Ci1zdGF0aWMgaW50IGdjZChpbnQsIGludCk7Ci1zdGF0aWMgdm9pZCBwZXJtdXRlX2FyZ3MoaW50LCBpbnQsIGludCwgY2hhciAqIGNvbnN0ICopOwotCi1zdGF0aWMgY2hhciAqcGxhY2UgPSBFTVNHOyAvKiBvcHRpb24gbGV0dGVyIHByb2Nlc3NpbmcgKi8KLQotLyogWFhYOiBzZXQgb3B0cmVzZXQgdG8gMSByYXRoZXIgdGhhbiB0aGVzZSB0d28gKi8KLXN0YXRpYyBpbnQgbm9ub3B0X3N0YXJ0ID0gLTE7IC8qIGZpcnN0IG5vbiBvcHRpb24gYXJndW1lbnQgKGZvciBwZXJtdXRlKSAqLwotc3RhdGljIGludCBub25vcHRfZW5kID0gLTE7ICAgLyogZmlyc3Qgb3B0aW9uIGFmdGVyIG5vbiBvcHRpb25zIChmb3IgcGVybXV0ZSkgKi8KLQotLyogRXJyb3IgbWVzc2FnZXMgKi8KLXN0YXRpYyBjb25zdCBjaGFyIHJlY2FyZ2NoYXJbXSA9ICJvcHRpb24gcmVxdWlyZXMgYW4gYXJndW1lbnQgLS0gJWMiOwotc3RhdGljIGNvbnN0IGNoYXIgcmVjYXJnc3RyaW5nW10gPSAib3B0aW9uIHJlcXVpcmVzIGFuIGFyZ3VtZW50IC0tICVzIjsKLXN0YXRpYyBjb25zdCBjaGFyIGFtYmlnW10gPSAiYW1iaWd1b3VzIG9wdGlvbiAtLSAlLipzIjsKLXN0YXRpYyBjb25zdCBjaGFyIG5vYXJnW10gPSAib3B0aW9uIGRvZXNuJ3QgdGFrZSBhbiBhcmd1bWVudCAtLSAlLipzIjsKLXN0YXRpYyBjb25zdCBjaGFyIGlsbG9wdGNoYXJbXSA9ICJ1bmtub3duIG9wdGlvbiAtLSAlYyI7Ci1zdGF0aWMgY29uc3QgY2hhciBpbGxvcHRzdHJpbmdbXSA9ICJ1bmtub3duIG9wdGlvbiAtLSAlcyI7Ci0KLS8qCi0gKiBDb21wdXRlIHRoZSBncmVhdGVzdCBjb21tb24gZGl2aXNvciBvZiBhIGFuZCBiLgotICovCi1zdGF0aWMgaW50Ci1nY2QoaW50IGEsIGludCBiKQotewotCWludCBjOwotCi0JYyA9IGEgJSBiOwotCXdoaWxlIChjICE9IDApIHsKLQkJYSA9IGI7Ci0JCWIgPSBjOwotCQljID0gYSAlIGI7Ci0JfQotCi0JcmV0dXJuIChiKTsKLX0KLQotLyoKLSAqIEV4Y2hhbmdlIHRoZSBibG9jayBmcm9tIG5vbm9wdF9zdGFydCB0byBub25vcHRfZW5kIHdpdGggdGhlIGJsb2NrCi0gKiBmcm9tIG5vbm9wdF9lbmQgdG8gb3B0X2VuZCAoa2VlcGluZyB0aGUgc2FtZSBvcmRlciBvZiBhcmd1bWVudHMKLSAqIGluIGVhY2ggYmxvY2spLgotICovCi1zdGF0aWMgdm9pZAotcGVybXV0ZV9hcmdzKGludCBwYW5vbm9wdF9zdGFydCwgaW50IHBhbm9ub3B0X2VuZCwgaW50IG9wdF9lbmQsCi0JY2hhciAqIGNvbnN0ICpuYXJndikKLXsKLQlpbnQgY3N0YXJ0LCBjeWNsZWxlbiwgaSwgaiwgbmN5Y2xlLCBubm9ub3B0cywgbm9wdHMsIHBvczsKLQljaGFyICpzd2FwOwotCi0JLyoKLQkgKiBjb21wdXRlIGxlbmd0aHMgb2YgYmxvY2tzIGFuZCBudW1iZXIgYW5kIHNpemUgb2YgY3ljbGVzCi0JICovCi0Jbm5vbm9wdHMgPSBwYW5vbm9wdF9lbmQgLSBwYW5vbm9wdF9zdGFydDsKLQlub3B0cyA9IG9wdF9lbmQgLSBwYW5vbm9wdF9lbmQ7Ci0JbmN5Y2xlID0gZ2NkKG5ub25vcHRzLCBub3B0cyk7Ci0JY3ljbGVsZW4gPSAob3B0X2VuZCAtIHBhbm9ub3B0X3N0YXJ0KSAvIG5jeWNsZTsKLQotCWZvciAoaSA9IDA7IGkgPCBuY3ljbGU7IGkrKykgewotCQljc3RhcnQgPSBwYW5vbm9wdF9lbmQraTsKLQkJcG9zID0gY3N0YXJ0OwotCQlmb3IgKGogPSAwOyBqIDwgY3ljbGVsZW47IGorKykgewotCQkJaWYgKHBvcyA+PSBwYW5vbm9wdF9lbmQpCi0JCQkJcG9zIC09IG5ub25vcHRzOwotCQkJZWxzZQotCQkJCXBvcyArPSBub3B0czsKLQkJCXN3YXAgPSBuYXJndltwb3NdOwotCQkJLyogTElOVEVEIGNvbnN0IGNhc3QgKi8KLQkJCSgoY2hhciAqKikgbmFyZ3YpW3Bvc10gPSBuYXJndltjc3RhcnRdOwotCQkJLyogTElOVEVEIGNvbnN0IGNhc3QgKi8KLQkJCSgoY2hhciAqKiluYXJndilbY3N0YXJ0XSA9IHN3YXA7Ci0JCX0KLQl9Ci19Ci0KLS8qCi0gKiBwYXJzZV9sb25nX29wdGlvbnMgLS0KLSAqCVBhcnNlIGxvbmcgb3B0aW9ucyBpbiBhcmdjL2FyZ3YgYXJndW1lbnQgdmVjdG9yLgotICogUmV0dXJucyAtMSBpZiBzaG9ydF90b28gaXMgc2V0IGFuZCB0aGUgb3B0aW9uIGRvZXMgbm90IG1hdGNoIGxvbmdfb3B0aW9ucy4KLSAqLwotc3RhdGljIGludAotcGFyc2VfbG9uZ19vcHRpb25zKGNoYXIgKiBjb25zdCAqbmFyZ3YsIGNvbnN0IGNoYXIgKm9wdGlvbnMsCi0JY29uc3Qgc3RydWN0IG9wdGlvbiAqbG9uZ19vcHRpb25zLCBpbnQgKmlkeCwgaW50IHNob3J0X3RvbykKLXsKLQljaGFyICpjdXJyZW50X2FyZ3YsICpoYXNfZXF1YWw7Ci0Jc2l6ZV90IGN1cnJlbnRfYXJndl9sZW47Ci0JaW50IGksIG1hdGNoOwotCi0JY3VycmVudF9hcmd2ID0gcGxhY2U7Ci0JbWF0Y2ggPSAtMTsKLQotCW9wdGluZCsrOwotCi0JaWYgKChoYXNfZXF1YWwgPSBzdHJjaHIoY3VycmVudF9hcmd2LCAnPScpKSAhPSBOVUxMKSB7Ci0JCS8qIGFyZ3VtZW50IGZvdW5kICgtLW9wdGlvbj1hcmcpICovCi0JCWN1cnJlbnRfYXJndl9sZW4gPSBoYXNfZXF1YWwgLSBjdXJyZW50X2FyZ3Y7Ci0JCWhhc19lcXVhbCsrOwotCX0gZWxzZQotCQljdXJyZW50X2FyZ3ZfbGVuID0gc3RybGVuKGN1cnJlbnRfYXJndik7Ci0KLQlmb3IgKGkgPSAwOyBsb25nX29wdGlvbnNbaV0ubmFtZTsgaSsrKSB7Ci0JCS8qIGZpbmQgbWF0Y2hpbmcgbG9uZyBvcHRpb24gKi8KLQkJaWYgKHN0cm5jbXAoY3VycmVudF9hcmd2LCBsb25nX29wdGlvbnNbaV0ubmFtZSwKLQkJICAgIGN1cnJlbnRfYXJndl9sZW4pKQotCQkJY29udGludWU7Ci0KLQkJaWYgKHN0cmxlbihsb25nX29wdGlvbnNbaV0ubmFtZSkgPT0gY3VycmVudF9hcmd2X2xlbikgewotCQkJLyogZXhhY3QgbWF0Y2ggKi8KLQkJCW1hdGNoID0gaTsKLQkJCWJyZWFrOwotCQl9Ci0JCS8qCi0JCSAqIElmIHRoaXMgaXMgYSBrbm93biBzaG9ydCBvcHRpb24sIGRvbid0IGFsbG93Ci0JCSAqIGEgcGFydGlhbCBtYXRjaCBvZiBhIHNpbmdsZSBjaGFyYWN0ZXIuCi0JCSAqLwotCQlpZiAoc2hvcnRfdG9vICYmIGN1cnJlbnRfYXJndl9sZW4gPT0gMSkKLQkJCWNvbnRpbnVlOwotCi0JCWlmIChtYXRjaCA9PSAtMSkJLyogcGFydGlhbCBtYXRjaCAqLwotCQkJbWF0Y2ggPSBpOwotCQllbHNlIHsKLQkJCS8qIGFtYmlndW91cyBhYmJyZXZpYXRpb24gKi8KLQkJCWlmIChQUklOVF9FUlJPUikKLQkJCQlmcHJpbnRmKHN0ZGVyciwgCi0gICAgICAgICAgICAgICAgICAgICAgICBhbWJpZywgKGludCljdXJyZW50X2FyZ3ZfbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudF9hcmd2KTsKLQkJCW9wdG9wdCA9IDA7Ci0JCQlyZXR1cm4gKEJBRENIKTsKLQkJfQotCX0KLQlpZiAobWF0Y2ggIT0gLTEpIHsJCS8qIG9wdGlvbiBmb3VuZCAqLwotCQlpZiAobG9uZ19vcHRpb25zW21hdGNoXS5oYXNfYXJnID09IG5vX2FyZ3VtZW50Ci0JCSAgICAmJiBoYXNfZXF1YWwpIHsKLQkJCWlmIChQUklOVF9FUlJPUikKLQkJCQlmcHJpbnRmKHN0ZGVyciwKLSAgICAgICAgICAgICAgICAgICAgICAgIG5vYXJnLCAoaW50KWN1cnJlbnRfYXJndl9sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50X2FyZ3YpOwotCQkJLyoKLQkJCSAqIFhYWDogR05VIHNldHMgb3B0b3B0IHRvIHZhbCByZWdhcmRsZXNzIG9mIGZsYWcKLQkJCSAqLwotCQkJaWYgKGxvbmdfb3B0aW9uc1ttYXRjaF0uZmxhZyA9PSBOVUxMKQotCQkJCW9wdG9wdCA9IGxvbmdfb3B0aW9uc1ttYXRjaF0udmFsOwotCQkJZWxzZQotCQkJCW9wdG9wdCA9IDA7Ci0JCQlyZXR1cm4gKEJBREFSRyk7Ci0JCX0KLQkJaWYgKGxvbmdfb3B0aW9uc1ttYXRjaF0uaGFzX2FyZyA9PSByZXF1aXJlZF9hcmd1bWVudCB8fAotCQkgICAgbG9uZ19vcHRpb25zW21hdGNoXS5oYXNfYXJnID09IG9wdGlvbmFsX2FyZ3VtZW50KSB7Ci0JCQlpZiAoaGFzX2VxdWFsKQotCQkJCW9wdGFyZyA9IGhhc19lcXVhbDsKLQkJCWVsc2UgaWYgKGxvbmdfb3B0aW9uc1ttYXRjaF0uaGFzX2FyZyA9PQotCQkJICAgIHJlcXVpcmVkX2FyZ3VtZW50KSB7Ci0JCQkJLyoKLQkJCQkgKiBvcHRpb25hbCBhcmd1bWVudCBkb2Vzbid0IHVzZSBuZXh0IG5hcmd2Ci0JCQkJICovCi0JCQkJb3B0YXJnID0gbmFyZ3Zbb3B0aW5kKytdOwotCQkJfQotCQl9Ci0JCWlmICgobG9uZ19vcHRpb25zW21hdGNoXS5oYXNfYXJnID09IHJlcXVpcmVkX2FyZ3VtZW50KQotCQkgICAgJiYgKG9wdGFyZyA9PSBOVUxMKSkgewotCQkJLyoKLQkJCSAqIE1pc3NpbmcgYXJndW1lbnQ7IGxlYWRpbmcgJzonIGluZGljYXRlcyBubyBlcnJvcgotCQkJICogc2hvdWxkIGJlIGdlbmVyYXRlZC4KLQkJCSAqLwotCQkJaWYgKFBSSU5UX0VSUk9SKQotCQkJCWZwcmludGYoc3RkZXJyLCAKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlY2FyZ3N0cmluZywKLSAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRfYXJndik7Ci0JCQkvKgotCQkJICogWFhYOiBHTlUgc2V0cyBvcHRvcHQgdG8gdmFsIHJlZ2FyZGxlc3Mgb2YgZmxhZwotCQkJICovCi0JCQlpZiAobG9uZ19vcHRpb25zW21hdGNoXS5mbGFnID09IE5VTEwpCi0JCQkJb3B0b3B0ID0gbG9uZ19vcHRpb25zW21hdGNoXS52YWw7Ci0JCQllbHNlCi0JCQkJb3B0b3B0ID0gMDsKLQkJCS0tb3B0aW5kOwotCQkJcmV0dXJuIChCQURBUkcpOwotCQl9Ci0JfSBlbHNlIHsJCQkvKiB1bmtub3duIG9wdGlvbiAqLwotCQlpZiAoc2hvcnRfdG9vKSB7Ci0JCQktLW9wdGluZDsKLQkJCXJldHVybiAoLTEpOwotCQl9Ci0JCWlmIChQUklOVF9FUlJPUikKLQkJCWZwcmludGYoc3RkZXJyLCBpbGxvcHRzdHJpbmcsIGN1cnJlbnRfYXJndik7Ci0JCW9wdG9wdCA9IDA7Ci0JCXJldHVybiAoQkFEQ0gpOwotCX0KLQlpZiAoaWR4KQotCQkqaWR4ID0gbWF0Y2g7Ci0JaWYgKGxvbmdfb3B0aW9uc1ttYXRjaF0uZmxhZykgewotCQkqbG9uZ19vcHRpb25zW21hdGNoXS5mbGFnID0gbG9uZ19vcHRpb25zW21hdGNoXS52YWw7Ci0JCXJldHVybiAoMCk7Ci0JfSBlbHNlCi0JCXJldHVybiAobG9uZ19vcHRpb25zW21hdGNoXS52YWwpOwotfQotCi0vKgotICogZ2V0b3B0X2ludGVybmFsIC0tCi0gKglQYXJzZSBhcmdjL2FyZ3YgYXJndW1lbnQgdmVjdG9yLiAgQ2FsbGVkIGJ5IHVzZXIgbGV2ZWwgcm91dGluZXMuCi0gKi8KLXN0YXRpYyBpbnQKLWdldG9wdF9pbnRlcm5hbChpbnQgbmFyZ2MsIGNoYXIgKiBjb25zdCAqbmFyZ3YsIGNvbnN0IGNoYXIgKm9wdGlvbnMsCi0JY29uc3Qgc3RydWN0IG9wdGlvbiAqbG9uZ19vcHRpb25zLCBpbnQgKmlkeCwgaW50IGZsYWdzKQotewotCWNoYXIgKm9saTsJCQkJLyogb3B0aW9uIGxldHRlciBsaXN0IGluZGV4ICovCi0JaW50IG9wdGNoYXIsIHNob3J0X3RvbzsKLQlzdGF0aWMgaW50IHBvc2l4bHlfY29ycmVjdCA9IC0xOwotCi0JaWYgKG9wdGlvbnMgPT0gTlVMTCkKLQkJcmV0dXJuICgtMSk7Ci0KLQkvKgotCSAqIERpc2FibGUgR05VIGV4dGVuc2lvbnMgaWYgUE9TSVhMWV9DT1JSRUNUIGlzIHNldCBvciBvcHRpb25zCi0JICogc3RyaW5nIGJlZ2lucyB3aXRoIGEgJysnLgotCSAqLwotCWlmIChwb3NpeGx5X2NvcnJlY3QgPT0gLTEpCi0JCXBvc2l4bHlfY29ycmVjdCA9IChnZXRlbnYoIlBPU0lYTFlfQ09SUkVDVCIpICE9IE5VTEwpOwotCWlmIChwb3NpeGx5X2NvcnJlY3QgfHwgKm9wdGlvbnMgPT0gJysnKQotCQlmbGFncyAmPSB+RkxBR19QRVJNVVRFOwotCWVsc2UgaWYgKCpvcHRpb25zID09ICctJykKLQkJZmxhZ3MgfD0gRkxBR19BTExBUkdTOwotCWlmICgqb3B0aW9ucyA9PSAnKycgfHwgKm9wdGlvbnMgPT0gJy0nKQotCQlvcHRpb25zKys7Ci0KLQkvKgotCSAqIFhYWCBTb21lIEdOVSBwcm9ncmFtcyAobGlrZSBjdnMpIHNldCBvcHRpbmQgdG8gMCBpbnN0ZWFkIG9mCi0JICogWFhYIHVzaW5nIG9wdHJlc2V0LiAgV29yayBhcm91bmQgdGhpcyBicmFpbmRhbWFnZS4KLQkgKi8KLQlpZiAob3B0aW5kID09IDApCi0JCW9wdGluZCA9IG9wdHJlc2V0ID0gMTsKLQotCW9wdGFyZyA9IE5VTEw7Ci0JaWYgKG9wdHJlc2V0KQotCQlub25vcHRfc3RhcnQgPSBub25vcHRfZW5kID0gLTE7Ci1zdGFydDoKLQlpZiAob3B0cmVzZXQgfHwgISpwbGFjZSkgewkJLyogdXBkYXRlIHNjYW5uaW5nIHBvaW50ZXIgKi8KLQkJb3B0cmVzZXQgPSAwOwotCQlpZiAob3B0aW5kID49IG5hcmdjKSB7ICAgICAgICAgIC8qIGVuZCBvZiBhcmd1bWVudCB2ZWN0b3IgKi8KLQkJCXBsYWNlID0gRU1TRzsKLQkJCWlmIChub25vcHRfZW5kICE9IC0xKSB7Ci0JCQkJLyogZG8gcGVybXV0YXRpb24sIGlmIHdlIGhhdmUgdG8gKi8KLQkJCQlwZXJtdXRlX2FyZ3Mobm9ub3B0X3N0YXJ0LCBub25vcHRfZW5kLAotCQkJCSAgICBvcHRpbmQsIG5hcmd2KTsKLQkJCQlvcHRpbmQgLT0gbm9ub3B0X2VuZCAtIG5vbm9wdF9zdGFydDsKLQkJCX0KLQkJCWVsc2UgaWYgKG5vbm9wdF9zdGFydCAhPSAtMSkgewotCQkJCS8qCi0JCQkJICogSWYgd2Ugc2tpcHBlZCBub24tb3B0aW9ucywgc2V0IG9wdGluZAotCQkJCSAqIHRvIHRoZSBmaXJzdCBvZiB0aGVtLgotCQkJCSAqLwotCQkJCW9wdGluZCA9IG5vbm9wdF9zdGFydDsKLQkJCX0KLQkJCW5vbm9wdF9zdGFydCA9IG5vbm9wdF9lbmQgPSAtMTsKLQkJCXJldHVybiAoLTEpOwotCQl9Ci0JCWlmICgqKHBsYWNlID0gbmFyZ3Zbb3B0aW5kXSkgIT0gJy0nIHx8Ci0JCSAgICAocGxhY2VbMV0gPT0gJ1wwJyAmJiBzdHJjaHIob3B0aW9ucywgJy0nKSA9PSBOVUxMKSkgewotCQkJcGxhY2UgPSBFTVNHOwkJLyogZm91bmQgbm9uLW9wdGlvbiAqLwotCQkJaWYgKGZsYWdzICYgRkxBR19BTExBUkdTKSB7Ci0JCQkJLyoKLQkJCQkgKiBHTlUgZXh0ZW5zaW9uOgotCQkJCSAqIHJldHVybiBub24tb3B0aW9uIGFzIGFyZ3VtZW50IHRvIG9wdGlvbiAxCi0JCQkJICovCi0JCQkJb3B0YXJnID0gbmFyZ3Zbb3B0aW5kKytdOwotCQkJCXJldHVybiAoSU5PUkRFUik7Ci0JCQl9Ci0JCQlpZiAoIShmbGFncyAmIEZMQUdfUEVSTVVURSkpIHsKLQkJCQkvKgotCQkJCSAqIElmIG5vIHBlcm11dGF0aW9uIHdhbnRlZCwgc3RvcCBwYXJzaW5nCi0JCQkJICogYXQgZmlyc3Qgbm9uLW9wdGlvbi4KLQkJCQkgKi8KLQkJCQlyZXR1cm4gKC0xKTsKLQkJCX0KLQkJCS8qIGRvIHBlcm11dGF0aW9uICovCi0JCQlpZiAobm9ub3B0X3N0YXJ0ID09IC0xKQotCQkJCW5vbm9wdF9zdGFydCA9IG9wdGluZDsKLQkJCWVsc2UgaWYgKG5vbm9wdF9lbmQgIT0gLTEpIHsKLQkJCQlwZXJtdXRlX2FyZ3Mobm9ub3B0X3N0YXJ0LCBub25vcHRfZW5kLAotCQkJCSAgICBvcHRpbmQsIG5hcmd2KTsKLQkJCQlub25vcHRfc3RhcnQgPSBvcHRpbmQgLQotCQkJCSAgICAobm9ub3B0X2VuZCAtIG5vbm9wdF9zdGFydCk7Ci0JCQkJbm9ub3B0X2VuZCA9IC0xOwotCQkJfQotCQkJb3B0aW5kKys7Ci0JCQkvKiBwcm9jZXNzIG5leHQgYXJndW1lbnQgKi8KLQkJCWdvdG8gc3RhcnQ7Ci0JCX0KLQkJaWYgKG5vbm9wdF9zdGFydCAhPSAtMSAmJiBub25vcHRfZW5kID09IC0xKQotCQkJbm9ub3B0X2VuZCA9IG9wdGluZDsKLQotCQkvKgotCQkgKiBJZiB3ZSBoYXZlICItIiBkbyBub3RoaW5nLCBpZiAiLS0iIHdlIGFyZSBkb25lLgotCQkgKi8KLQkJaWYgKHBsYWNlWzFdICE9ICdcMCcgJiYgKisrcGxhY2UgPT0gJy0nICYmIHBsYWNlWzFdID09ICdcMCcpIHsKLQkJCW9wdGluZCsrOwotCQkJcGxhY2UgPSBFTVNHOwotCQkJLyoKLQkJCSAqIFdlIGZvdW5kIGFuIG9wdGlvbiAoLS0pLCBzbyBpZiB3ZSBza2lwcGVkCi0JCQkgKiBub24tb3B0aW9ucywgd2UgaGF2ZSB0byBwZXJtdXRlLgotCQkJICovCi0JCQlpZiAobm9ub3B0X2VuZCAhPSAtMSkgewotCQkJCXBlcm11dGVfYXJncyhub25vcHRfc3RhcnQsIG5vbm9wdF9lbmQsCi0JCQkJICAgIG9wdGluZCwgbmFyZ3YpOwotCQkJCW9wdGluZCAtPSBub25vcHRfZW5kIC0gbm9ub3B0X3N0YXJ0OwotCQkJfQotCQkJbm9ub3B0X3N0YXJ0ID0gbm9ub3B0X2VuZCA9IC0xOwotCQkJcmV0dXJuICgtMSk7Ci0JCX0KLQl9Ci0KLQkvKgotCSAqIENoZWNrIGxvbmcgb3B0aW9ucyBpZjoKLQkgKiAgMSkgd2Ugd2VyZSBwYXNzZWQgc29tZQotCSAqICAyKSB0aGUgYXJnIGlzIG5vdCBqdXN0ICItIgotCSAqICAzKSBlaXRoZXIgdGhlIGFyZyBzdGFydHMgd2l0aCAtLSB3ZSBhcmUgZ2V0b3B0X2xvbmdfb25seSgpCi0JICovCi0JaWYgKGxvbmdfb3B0aW9ucyAhPSBOVUxMICYmIHBsYWNlICE9IG5hcmd2W29wdGluZF0gJiYKLQkgICAgKCpwbGFjZSA9PSAnLScgfHwgKGZsYWdzICYgRkxBR19MT05HT05MWSkpKSB7Ci0JCXNob3J0X3RvbyA9IDA7Ci0JCWlmICgqcGxhY2UgPT0gJy0nKQotCQkJcGxhY2UrKzsJCS8qIC0tZm9vIGxvbmcgb3B0aW9uICovCi0JCWVsc2UgaWYgKCpwbGFjZSAhPSAnOicgJiYgc3RyY2hyKG9wdGlvbnMsICpwbGFjZSkgIT0gTlVMTCkKLQkJCXNob3J0X3RvbyA9IDE7CQkvKiBjb3VsZCBiZSBzaG9ydCBvcHRpb24gdG9vICovCi0KLQkJb3B0Y2hhciA9IHBhcnNlX2xvbmdfb3B0aW9ucyhuYXJndiwgb3B0aW9ucywgbG9uZ19vcHRpb25zLAotCQkgICAgaWR4LCBzaG9ydF90b28pOwotCQlpZiAob3B0Y2hhciAhPSAtMSkgewotCQkJcGxhY2UgPSBFTVNHOwotCQkJcmV0dXJuIChvcHRjaGFyKTsKLQkJfQotCX0KLQotCWlmICgoKG9wdGNoYXIgPSAoaW50KSpwbGFjZSsrKSA9PSAoaW50KSc6JykgfHwKLQkgICAgKG9wdGNoYXIgPT0gKGludCknLScgJiYgKnBsYWNlICE9ICdcMCcpIHx8Ci0JICAgIChvbGkgPSBzdHJjaHIob3B0aW9ucywgb3B0Y2hhcikpID09IE5VTEwpIHsKLQkJLyoKLQkJICogSWYgdGhlIHVzZXIgc3BlY2lmaWVkICItIiBhbmQgICctJyBpc24ndCBsaXN0ZWQgaW4KLQkJICogb3B0aW9ucywgcmV0dXJuIC0xIChub24tb3B0aW9uKSBhcyBwZXIgUE9TSVguCi0JCSAqIE90aGVyd2lzZSwgaXQgaXMgYW4gdW5rbm93biBvcHRpb24gY2hhcmFjdGVyIChvciAnOicpLgotCQkgKi8KLQkJaWYgKG9wdGNoYXIgPT0gKGludCknLScgJiYgKnBsYWNlID09ICdcMCcpCi0JCQlyZXR1cm4gKC0xKTsKLQkJaWYgKCEqcGxhY2UpCi0JCQkrK29wdGluZDsKLQkJaWYgKFBSSU5UX0VSUk9SKQotCQkJZnByaW50ZihzdGRlcnIsIGlsbG9wdGNoYXIsIG9wdGNoYXIpOwotCQlvcHRvcHQgPSBvcHRjaGFyOwotCQlyZXR1cm4gKEJBRENIKTsKLQl9Ci0JaWYgKGxvbmdfb3B0aW9ucyAhPSBOVUxMICYmIG9wdGNoYXIgPT0gJ1cnICYmIG9saVsxXSA9PSAnOycpIHsKLQkJLyogLVcgbG9uZy1vcHRpb24gKi8KLQkJaWYgKCpwbGFjZSkJCQkvKiBubyBzcGFjZSAqLwotCQkJLyogTk9USElORyAqLzsKLQkJZWxzZSBpZiAoKytvcHRpbmQgPj0gbmFyZ2MpIHsJLyogbm8gYXJnICovCi0JCQlwbGFjZSA9IEVNU0c7Ci0JCQlpZiAoUFJJTlRfRVJST1IpCi0JCQkJZnByaW50ZihzdGRlcnIsIHJlY2FyZ2NoYXIsIG9wdGNoYXIpOwotCQkJb3B0b3B0ID0gb3B0Y2hhcjsKLQkJCXJldHVybiAoQkFEQVJHKTsKLQkJfSBlbHNlCQkJCS8qIHdoaXRlIHNwYWNlICovCi0JCQlwbGFjZSA9IG5hcmd2W29wdGluZF07Ci0JCW9wdGNoYXIgPSBwYXJzZV9sb25nX29wdGlvbnMobmFyZ3YsIG9wdGlvbnMsIGxvbmdfb3B0aW9ucywKLQkJICAgIGlkeCwgMCk7Ci0JCXBsYWNlID0gRU1TRzsKLQkJcmV0dXJuIChvcHRjaGFyKTsKLQl9Ci0JaWYgKCorK29saSAhPSAnOicpIHsJCQkvKiBkb2Vzbid0IHRha2UgYXJndW1lbnQgKi8KLQkJaWYgKCEqcGxhY2UpCi0JCQkrK29wdGluZDsKLQl9IGVsc2UgewkJCQkvKiB0YWtlcyAob3B0aW9uYWwpIGFyZ3VtZW50ICovCi0JCW9wdGFyZyA9IE5VTEw7Ci0JCWlmICgqcGxhY2UpCQkJLyogbm8gd2hpdGUgc3BhY2UgKi8KLQkJCW9wdGFyZyA9IHBsYWNlOwotCQkvKiBYWFg6IGRpc2FibGUgdGVzdCBmb3IgOjogaWYgUEM/IChHTlUgZG9lc24ndCkgKi8KLQkJZWxzZSBpZiAob2xpWzFdICE9ICc6JykgewkvKiBhcmcgbm90IG9wdGlvbmFsICovCi0JCQlpZiAoKytvcHRpbmQgPj0gbmFyZ2MpIHsJLyogbm8gYXJnICovCi0JCQkJcGxhY2UgPSBFTVNHOwotCQkJCWlmIChQUklOVF9FUlJPUikKLQkJCQkJZnByaW50ZihzdGRlcnIsIHJlY2FyZ2NoYXIsIG9wdGNoYXIpOwotCQkJCW9wdG9wdCA9IG9wdGNoYXI7Ci0JCQkJcmV0dXJuIChCQURBUkcpOwotCQkJfSBlbHNlCi0JCQkJb3B0YXJnID0gbmFyZ3Zbb3B0aW5kXTsKLQkJfSBlbHNlIGlmICghKGZsYWdzICYgRkxBR19QRVJNVVRFKSkgewotCQkJLyoKLQkJCSAqIElmIHBlcm11dGF0aW9uIGlzIGRpc2FibGVkLCB3ZSBjYW4gYWNjZXB0IGFuCi0JCQkgKiBvcHRpb25hbCBhcmcgc2VwYXJhdGVkIGJ5IHdoaXRlc3BhY2Ugc28gbG9uZwotCQkJICogYXMgaXQgZG9lcyBub3Qgc3RhcnQgd2l0aCBhIGRhc2ggKC0pLgotCQkJICovCi0JCQlpZiAob3B0aW5kICsgMSA8IG5hcmdjICYmICpuYXJndltvcHRpbmQgKyAxXSAhPSAnLScpCi0JCQkJb3B0YXJnID0gbmFyZ3ZbKytvcHRpbmRdOwotCQl9Ci0JCXBsYWNlID0gRU1TRzsKLQkJKytvcHRpbmQ7Ci0JfQotCS8qIGR1bXAgYmFjayBvcHRpb24gbGV0dGVyICovCi0JcmV0dXJuIChvcHRjaGFyKTsKLX0KLQotI2lmZGVmIFJFUExBQ0VfR0VUT1BUCi0vKgotICogZ2V0b3B0IC0tCi0gKglQYXJzZSBhcmdjL2FyZ3YgYXJndW1lbnQgdmVjdG9yLgotICoKLSAqIFtldmVudHVhbGx5IHRoaXMgd2lsbCByZXBsYWNlIHRoZSBCU0QgZ2V0b3B0XQotICovCi1pbnQKLWdldG9wdChpbnQgbmFyZ2MsIGNoYXIgKiBjb25zdCAqbmFyZ3YsIGNvbnN0IGNoYXIgKm9wdGlvbnMpCi17Ci0KLQkvKgotCSAqIFdlIGRvbid0IHBhc3MgRkxBR19QRVJNVVRFIHRvIGdldG9wdF9pbnRlcm5hbCgpIHNpbmNlCi0JICogdGhlIEJTRCBnZXRvcHQoMykgKHVubGlrZSBHTlUpIGhhcyBuZXZlciBkb25lIHRoaXMuCi0JICoKLQkgKiBGdXJ0aGVybW9yZSwgc2luY2UgbWFueSBwcml2aWxlZ2VkIHByb2dyYW1zIGNhbGwgZ2V0b3B0KCkKLQkgKiBiZWZvcmUgZHJvcHBpbmcgcHJpdmlsZWdlcyBpdCBtYWtlcyBzZW5zZSB0byBrZWVwIHRoaW5ncwotCSAqIGFzIHNpbXBsZSAoYW5kIGJ1Zy1mcmVlKSBhcyBwb3NzaWJsZS4KLQkgKi8KLQlyZXR1cm4gKGdldG9wdF9pbnRlcm5hbChuYXJnYywgbmFyZ3YsIG9wdGlvbnMsIE5VTEwsIE5VTEwsIDApKTsKLX0KLSNlbmRpZiAvKiBSRVBMQUNFX0dFVE9QVCAqLwotCi0vKgotICogZ2V0b3B0X2xvbmcgLS0KLSAqCVBhcnNlIGFyZ2MvYXJndiBhcmd1bWVudCB2ZWN0b3IuCi0gKi8KLWludAotZ2V0b3B0X2xvbmcoaW50IG5hcmdjLCBjaGFyICogY29uc3QgKm5hcmd2LCBjb25zdCBjaGFyICpvcHRpb25zLAotICAgIGNvbnN0IHN0cnVjdCBvcHRpb24gKmxvbmdfb3B0aW9ucywgaW50ICppZHgpCi17Ci0KLQlyZXR1cm4gKGdldG9wdF9pbnRlcm5hbChuYXJnYywgbmFyZ3YsIG9wdGlvbnMsIGxvbmdfb3B0aW9ucywgaWR4LAotCSAgICBGTEFHX1BFUk1VVEUpKTsKLX0KLQotLyoKLSAqIGdldG9wdF9sb25nX29ubHkgLS0KLSAqCVBhcnNlIGFyZ2MvYXJndiBhcmd1bWVudCB2ZWN0b3IuCi0gKi8KLWludAotZ2V0b3B0X2xvbmdfb25seShpbnQgbmFyZ2MsIGNoYXIgKiBjb25zdCAqbmFyZ3YsIGNvbnN0IGNoYXIgKm9wdGlvbnMsCi0gICAgY29uc3Qgc3RydWN0IG9wdGlvbiAqbG9uZ19vcHRpb25zLCBpbnQgKmlkeCkKLXsKLQotCXJldHVybiAoZ2V0b3B0X2ludGVybmFsKG5hcmdjLCBuYXJndiwgb3B0aW9ucywgbG9uZ19vcHRpb25zLCBpZHgsCi0JICAgIEZMQUdfUEVSTVVURXxGTEFHX0xPTkdPTkxZKSk7Ci19CmRpZmYgLS1naXQgYS9saWJjL3VuaXN0ZC9raWxscGcuYyBiL2xpYmMvdW5pc3RkL2tpbGxwZy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NWIxYWQ5Li4wMDAwMDAwCi0tLSBhL2xpYmMvdW5pc3RkL2tpbGxwZy5jCisrKyAvZGV2L251bGwKQEAgLTEsNDUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykgMTk4OSBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0gKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKLSAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPHNpZ25hbC5oPgotI2luY2x1ZGUgPGVycm5vLmg+Ci0KLS8qCi0gKiBCYWNrd2FyZHMtY29tcGF0aWJsZSBraWxscGcoKS4KLSAqLwotaW50Ci1raWxscGcocGlkX3QgcGdpZCwgaW50IHNpZykKLXsKLQlpZiAocGdpZCA9PSAxKSB7Ci0JCWVycm5vID0gRVNSQ0g7Ci0JCXJldHVybiAoLTEpOwotCX0KLQlyZXR1cm4gKGtpbGwoLXBnaWQsIHNpZykpOwotfQpkaWZmIC0tZ2l0IGEvbGliYy91bmlzdGQvbW1hcC5jIGIvbGliYy91bmlzdGQvbW1hcC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NDhhYmJiLi4wMDAwMDAwCi0tLSBhL2xpYmMvdW5pc3RkL21tYXAuYworKysgL2Rldi9udWxsCkBAIC0xLDQzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0gKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiAgICBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCi0gKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQotICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAotICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKLSAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUwotICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECi0gKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0gKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLSNpbmNsdWRlIDxlcnJuby5oPgotI2luY2x1ZGUgPHN5cy9tbWFuLmg+Ci0KLWV4dGVybiB2b2lkKiAgX19tbWFwMih2b2lkKiwgc2l6ZV90LCBpbnQsIGludCwgaW50LCBzaXplX3QpOwotCi0jZGVmaW5lICBNTUFQMl9TSElGVCAgMTIKLXZvaWQqICAgbW1hcCggdm9pZCogIGFkZHIsICBzaXplX3QgIHNpemUsIGludCAgcHJvdCwgaW50ICBmbGFncywgaW50ICBmZCwgIGxvbmcgIG9mZnNldCApCi17Ci0gICAgaWYgKCBvZmZzZXQgJiAoKDFVTCA8PCBNTUFQMl9TSElGVCktMSkgKSB7Ci0gICAgZXJybm8gPSBFSU5WQUw7Ci0gICAgcmV0dXJuIE1BUF9GQUlMRUQ7Ci0gIH0KLQotICAgIHJldHVybiBfX21tYXAyKGFkZHIsIHNpemUsIHByb3QsIGZsYWdzLCBmZCwgKHNpemVfdClvZmZzZXQgPj4gTU1BUDJfU0hJRlQpOwotfQpkaWZmIC0tZ2l0IGEvbGliYy91bmlzdGQvbmljZS5jIGIvbGliYy91bmlzdGQvbmljZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwOWI2NDY5Li4wMDAwMDAwCi0tLSBhL2xpYmMvdW5pc3RkL25pY2UuYworKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0gKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiAgICBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCi0gKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQotICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAotICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKLSAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUwotICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECi0gKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0gKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLSNpbmNsdWRlIDxzeXMvcmVzb3VyY2UuaD4KLQotaW50IG5pY2UoaW50IGluY3JlbWVudCkKLXsKLSAgICBpbnQgIHByaW9yaXR5ID0gZ2V0cHJpb3JpdHkoUFJJT19QUk9DRVNTLCAwKTsKLQotICAgIHJldHVybiBzZXRwcmlvcml0eSggUFJJT19QUk9DRVNTLCAwLCBwcmlvcml0eStpbmNyZW1lbnQpOwotfQpkaWZmIC0tZ2l0IGEvbGliYy91bmlzdGQvb3Blbi5jIGIvbGliYy91bmlzdGQvb3Blbi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwM2NiYTQ1Li4wMDAwMDAwCi0tLSBhL2xpYmMvdW5pc3RkL29wZW4uYworKysgL2Rldi9udWxsCkBAIC0xLDUxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0gKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiAgICBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCi0gKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQotICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAotICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKLSAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUwotICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECi0gKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0gKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLSNpbmNsdWRlIDxmY250bC5oPgotI2luY2x1ZGUgPHN0ZGFyZy5oPgotCi1leHRlcm4gaW50ICBfX29wZW4oY29uc3QgY2hhciosIGludCwgaW50KTsKLQotaW50IG9wZW4oY29uc3QgY2hhciAqcGF0aG5hbWUsIGludCBmbGFncywgLi4uKQotewotICAgIG1vZGVfdCAgbW9kZSA9IDA7Ci0KLSAgICBmbGFncyB8PSBPX0xBUkdFRklMRTsKLQotICAgIGlmIChmbGFncyAmIE9fQ1JFQVQpCi0gICAgewotICAgICAgICB2YV9saXN0ICBhcmdzOwotCi0gICAgICAgIHZhX3N0YXJ0KGFyZ3MsIGZsYWdzKTsKLSAgICAgICAgbW9kZSA9IChtb2RlX3QpIHZhX2FyZyhhcmdzLCBpbnQpOwotICAgICAgICB2YV9lbmQoYXJncyk7Ci0gICAgfQotCi0gICAgcmV0dXJuIF9fb3BlbihwYXRobmFtZSwgZmxhZ3MsIG1vZGUpOwotfQotCmRpZmYgLS1naXQgYS9saWJjL3VuaXN0ZC9vcGVuYXQuYyBiL2xpYmMvdW5pc3RkL29wZW5hdC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YjdiMzY3Li4wMDAwMDAwCi0tLSBhL2xpYmMvdW5pc3RkL29wZW5hdC5jCisrKyAvZGV2L251bGwKQEAgLTEsNTEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqICAgIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKLSAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi0gKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCi0gKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAotICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCi0gKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKLSAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotI2luY2x1ZGUgPHVuaXN0ZC5oPgotI2luY2x1ZGUgPGZjbnRsLmg+Ci0jaW5jbHVkZSA8c3RkYXJnLmg+Ci0KLWV4dGVybiBpbnQgIF9fb3BlbmF0KGludCwgY29uc3QgY2hhciosIGludCwgaW50KTsKLQotaW50IG9wZW5hdChpbnQgZmQsIGNvbnN0IGNoYXIgKnBhdGhuYW1lLCBpbnQgZmxhZ3MsIC4uLikKLXsKLSAgICBtb2RlX3QgIG1vZGUgPSAwOwotCi0gICAgZmxhZ3MgfD0gT19MQVJHRUZJTEU7Ci0KLSAgICBpZiAoZmxhZ3MgJiBPX0NSRUFUKQotICAgIHsKLSAgICAgICAgdmFfbGlzdCAgYXJnczsKLQotICAgICAgICB2YV9zdGFydChhcmdzLCBmbGFncyk7Ci0gICAgICAgIG1vZGUgPSAobW9kZV90KSB2YV9hcmcoYXJncywgaW50KTsKLSAgICAgICAgdmFfZW5kKGFyZ3MpOwotICAgIH0KLQotICAgIHJldHVybiBfX29wZW5hdChmZCwgcGF0aG5hbWUsIGZsYWdzLCBtb2RlKTsKLX0KLQpkaWZmIC0tZ2l0IGEvbGliYy91bmlzdGQvb3BlbmRpci5jIGIvbGliYy91bmlzdGQvb3BlbmRpci5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMTc4YmM2Li4wMDAwMDAwCi0tLSBhL2xpYmMvdW5pc3RkL29wZW5kaXIuYworKysgL2Rldi9udWxsCkBAIC0xLDI3MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogICAgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUwotICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKLSAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCi0gKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKLSAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAotICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0gKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0jaW5jbHVkZSA8ZGlyZW50Lmg+Ci0jaW5jbHVkZSA8bWVtb3J5Lmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8ZmNudGwuaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxwdGhyZWFkLmg+Ci0jaW5jbHVkZSA8ZXJybm8uaD4KLQotc3RydWN0IERJUgotewotICAgIGludCAgICAgICAgICAgICAgX0RJUl9mZDsKLSAgICBzaXplX3QgICAgICAgICAgIF9ESVJfYXZhaWw7Ci0gICAgc3RydWN0IGRpcmVudCogICBfRElSX25leHQ7Ci0gICAgcHRocmVhZF9tdXRleF90ICBfRElSX2xvY2s7Ci0gICAgc3RydWN0IGRpcmVudCAgICBfRElSX2J1ZmZbMTVdOwotfTsKLQotaW50IGRpcmZkKERJUiogZGlycCkKLXsKLSAgICByZXR1cm4gZGlycC0+X0RJUl9mZDsKLX0KLQotRElSKiAgb3BlbmRpciggY29uc3QgY2hhciogIGRpcnBhdGggKQotewotICAgIERJUiogIGRpciA9IG1hbGxvYyhzaXplb2YoRElSKSk7Ci0KLSAgICBpZiAoIWRpcikKLSAgICAgICAgZ290byBFeGl0OwotCi0gICAgZGlyLT5fRElSX2ZkID0gb3BlbihkaXJwYXRoLCBPX1JET05MWXxPX0RJUkVDVE9SWSk7Ci0gICAgaWYgKGRpci0+X0RJUl9mZCA8IDApCi0gICAgewotICAgICAgICBmcmVlKGRpcik7Ci0gICAgICAgIGRpciA9IE5VTEw7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIGRpci0+X0RJUl9hdmFpbCA9IDA7Ci0gICAgICAgIGRpci0+X0RJUl9uZXh0ICA9IE5VTEw7Ci0gICAgICAgIHB0aHJlYWRfbXV0ZXhfaW5pdCggJmRpci0+X0RJUl9sb2NrLCBOVUxMICk7Ci0gICAgfQotRXhpdDoKLSAgICByZXR1cm4gZGlyOwotfQotCi0KLURJUiogIGZkb3BlbmRpcihpbnQgZmQpCi17Ci0gICAgRElSKiAgZGlyID0gbWFsbG9jKHNpemVvZihESVIpKTsKLQotICAgIGlmICghZGlyKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGRpci0+X0RJUl9mZCA9IGZkOwotICAgIGRpci0+X0RJUl9hdmFpbCA9IDA7Ci0gICAgZGlyLT5fRElSX25leHQgID0gTlVMTDsKLSAgICBwdGhyZWFkX211dGV4X2luaXQoICZkaXItPl9ESVJfbG9jaywgTlVMTCApOwotCi0gICAgcmV0dXJuIGRpcjsKLX0KLQotCi1zdGF0aWMgc3RydWN0IGRpcmVudCoKLV9yZWFkZGlyX3VubG9ja2VkKERJUiogIGRpcikKLXsKLSAgICBzdHJ1Y3QgZGlyZW50KiAgZW50cnk7Ci0jaWZuZGVmIE5ERUJVRwotICAgIHVuc2lnbmVkIHJlY2xlbjsKLSNlbmRpZgotCi0gICAgaWYgKCAhZGlyLT5fRElSX2F2YWlsICkKLSAgICB7Ci0gICAgICAgIGludCAgcmM7Ci0KLSAgICAgICAgZm9yICg7OykgewotICAgICAgICAgICAgcmMgPSBnZXRkZW50cyggZGlyLT5fRElSX2ZkLCBkaXItPl9ESVJfYnVmZiwgc2l6ZW9mKGRpci0+X0RJUl9idWZmKSk7Ci0gICAgICAgICAgICBpZiAocmMgPj0gMCB8fCBlcnJubyAhPSBFSU5UUikKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGlmIChyYyA8PSAwKQotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICAgICAgZGlyLT5fRElSX2F2YWlsID0gcmM7Ci0gICAgICAgIGRpci0+X0RJUl9uZXh0ICA9IGRpci0+X0RJUl9idWZmOwotICAgIH0KLQotICAgIGVudHJ5ID0gZGlyLT5fRElSX25leHQ7Ci0KLSAgICAvKiBwZXJmb3JtIHNvbWUgc2FuaXR5IGNoZWNrcyBoZXJlICovCi0gICAgaWYgKCgobG9uZykodm9pZCopZW50cnkgJiAzKSAhPSAwKQotICAgICAgICByZXR1cm4gTlVMTDsKLQotI2lmbmRlZiBOREVCVUcKLSAgICAvLyBwYXJhbm9pZCB0ZXN0aW5nIG9mIHRoZSBpbnRlcmZhY2Ugd2l0aCB0aGUga2VybmVsIGdldGRlbnRzNjQgc3lzdGVtIGNhbGwKLSAgICByZWNsZW4gPSBvZmZzZXRvZihzdHJ1Y3QgZGlyZW50LCBkX25hbWUpICsgc3RybGVuKGVudHJ5LT5kX25hbWUpICsgMTsKLSAgICBpZiAoIHJlY2xlbiA+IHNpemVvZigqZW50cnkpIHx8IHJlY2xlbiA8PSBvZmZzZXRvZihzdHJ1Y3QgZGlyZW50LCBkX25hbWUpICkKLSAgICAgICAgZ290byBCYWQ7Ci0KLSAgICBpZiAoIChjaGFyKillbnRyeSArIHJlY2xlbiA+IChjaGFyKilkaXItPl9ESVJfYnVmZiArIHNpemVvZihkaXItPl9ESVJfYnVmZikgKQotICAgICAgICBnb3RvIEJhZDsKLQotICAgIGlmICggIW1lbWNociggZW50cnktPmRfbmFtZSwgMCwgcmVjbGVuIC0gb2Zmc2V0b2Yoc3RydWN0IGRpcmVudCwgZF9uYW1lKSkgKQotICAgICAgICBnb3RvIEJhZDsgCi0jZW5kaWYKLQotICAgIGRpci0+X0RJUl9uZXh0ICAgPSAoc3RydWN0IGRpcmVudCopKChjaGFyKillbnRyeSArIGVudHJ5LT5kX3JlY2xlbik7Ci0gICAgZGlyLT5fRElSX2F2YWlsIC09IGVudHJ5LT5kX3JlY2xlbjsKLQotICAgIHJldHVybiBlbnRyeTsKLQotICBCYWQ6Ci0gICAgZXJybm8gPSBFSU5WQUw7Ci0gICAgcmV0dXJuIE5VTEw7Ci19Ci0KLQotc3RydWN0IGRpcmVudCoKLXJlYWRkaXIoRElSICogZGlyKQotewotICAgIHN0cnVjdCBkaXJlbnQgKmVudHJ5ID0gTlVMTDsKLQotICAgIHB0aHJlYWRfbXV0ZXhfbG9jayggJmRpci0+X0RJUl9sb2NrICk7Ci0gICAgZW50cnkgPSBfcmVhZGRpcl91bmxvY2tlZChkaXIpOwotICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCAmZGlyLT5fRElSX2xvY2sgKTsKLQotICAgIHJldHVybiBlbnRyeTsKLX0KLQotCi1pbnQgcmVhZGRpcl9yKERJUiogIGRpciwgc3RydWN0IGRpcmVudCAqZW50cnksIHN0cnVjdCBkaXJlbnQgKipyZXN1bHQpCi17Ci0gICAgc3RydWN0IGRpcmVudCogIGVudDsKLSAgICBpbnQgIHNhdmVfZXJybm8gPSBlcnJubzsKLSAgICBpbnQgIHJldHZhbDsKLQotICAgICpyZXN1bHQgPSBOVUxMOwotICAgIGVycm5vICAgPSAwOwotCi0gICAgcHRocmVhZF9tdXRleF9sb2NrKCAmZGlyLT5fRElSX2xvY2sgKTsKLQotICAgIGVudCAgICA9IF9yZWFkZGlyX3VubG9ja2VkKGRpcik7Ci0gICAgcmV0dmFsID0gZXJybm87Ci0gICAgaWYgKGVudCA9PSBOVUxMKSB7Ci0gICAgICAgIGlmICghcmV0dmFsKSB7Ci0gICAgICAgICAgICBlcnJubyA9IHNhdmVfZXJybm87Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoIXJldHZhbCkgewotICAgICAgICAgICAgZXJybm8gICA9IHNhdmVfZXJybm87Ci0gICAgICAgICAgICAqcmVzdWx0ID0gZW50cnk7Ci0gICAgICAgICAgICBtZW1jcHkoIGVudHJ5LCBlbnQsIGVudC0+ZF9yZWNsZW4gKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCAmZGlyLT5fRElSX2xvY2sgKTsKLQotICAgIHJldHVybiByZXR2YWw7Ci19Ci0KLQotCi1pbnQgY2xvc2VkaXIoRElSICpkaXIpCi17Ci0gIGludCByYzsKLQotICByYyA9IGNsb3NlKGRpci0+X0RJUl9mZCk7Ci0gIGRpci0+X0RJUl9mZCA9IC0xOwotCi0gIHB0aHJlYWRfbXV0ZXhfZGVzdHJveSggJmRpci0+X0RJUl9sb2NrICk7Ci0KLSAgZnJlZShkaXIpOwotICByZXR1cm4gcmM7Ci19Ci0KLQotdm9pZCAgIHJld2luZGRpcihESVIgKmRpcikKLXsKLSAgICBwdGhyZWFkX211dGV4X2xvY2soICZkaXItPl9ESVJfbG9jayApOwotICAgIGxzZWVrKCBkaXItPl9ESVJfZmQsIDAsIFNFRUtfU0VUICk7Ci0gICAgZGlyLT5fRElSX2F2YWlsID0gMDsKLSAgICBwdGhyZWFkX211dGV4X3VubG9jayggJmRpci0+X0RJUl9sb2NrICk7Ci19Ci0KLQotaW50IGFscGhhc29ydChjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiKQotewotICAgICAgICBzdHJ1Y3QgZGlyZW50ICoqZDEsICoqZDI7Ci0KLSAgICAgICAgZDEgPSAoc3RydWN0IGRpcmVudCAqKikgYTsKLSAgICAgICAgZDIgPSAoc3RydWN0IGRpcmVudCAqKikgYjsKLSAgICAgICAgcmV0dXJuIHN0cmNtcCgoKmQxKS0+ZF9uYW1lLCAoKmQyKS0+ZF9uYW1lKTsKLX0KLQotCi1pbnQgc2NhbmRpcihjb25zdCBjaGFyICpkaXIsIHN0cnVjdCBkaXJlbnQgKioqbmFtZWxpc3QsCi0gICAgICAgICAgICBpbnQoKmZpbHRlcikoY29uc3Qgc3RydWN0IGRpcmVudCAqKSwKLSAgICAgICAgICAgIGludCgqY29tcGFyKShjb25zdCBzdHJ1Y3QgZGlyZW50ICoqLCBjb25zdCBzdHJ1Y3QgZGlyZW50ICoqKSkKLXsKLSAgICBESVIgKmQ7Ci0gICAgaW50IG5fZWxlbSA9IDA7Ci0gICAgc3RydWN0IGRpcmVudCAqdGhpc19kZSwgKmRlOwotICAgIHN0cnVjdCBkaXJlbnQgKipkZV9saXN0ID0gTlVMTDsKLSAgICBpbnQgZGVfbGlzdF9zaXplID0gMDsKLQotICAgIGQgPSBvcGVuZGlyKGRpcik7Ci0gICAgaWYgKGQgPT0gTlVMTCkgewotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotCi0gICAgd2hpbGUgKCh0aGlzX2RlID0gcmVhZGRpcihkKSkgIT0gTlVMTCkgewotICAgICAgICBpZiAoZmlsdGVyICYmICgqZmlsdGVyKSh0aGlzX2RlKSA9PSAwKSB7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAgICAgICBpZiAobl9lbGVtID09IDApIHsKLSAgICAgICAgICAgIGRlX2xpc3Rfc2l6ZSA9IDQ7Ci0gICAgICAgICAgICBkZV9saXN0ID0gKHN0cnVjdCBkaXJlbnQgKiopIAotICAgICAgICAgICAgICAgICAgICBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBkaXJlbnQgKikqZGVfbGlzdF9zaXplKTsKLSAgICAgICAgICAgIGlmIChkZV9saXN0ID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAobl9lbGVtID09IGRlX2xpc3Rfc2l6ZSkgewotICAgICAgICAgICAgc3RydWN0IGRpcmVudCAqKmRlX2xpc3RfbmV3OwotCi0gICAgICAgICAgICBkZV9saXN0X3NpemUgKz0gMTA7Ci0gICAgICAgICAgICBkZV9saXN0X25ldyA9IChzdHJ1Y3QgZGlyZW50ICoqKSAKLSAgICAgICAgICAgICAgICAgICAgcmVhbGxvYyhkZV9saXN0LCBzaXplb2Yoc3RydWN0IGRpcmVudCAqKSpkZV9saXN0X3NpemUpOwotICAgICAgICAgICAgaWYgKGRlX2xpc3RfbmV3ID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBmcmVlKGRlX2xpc3QpOwotICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGRlX2xpc3QgPSBkZV9saXN0X25ldzsKLSAgICAgICAgfQotICAgICAgICBkZSA9IChzdHJ1Y3QgZGlyZW50ICopIG1hbGxvYyhzaXplb2Yoc3RydWN0IGRpcmVudCkpOwotICAgICAgICAqZGUgPSAqdGhpc19kZTsKLSAgICAgICAgZGVfbGlzdFtuX2VsZW0rK10gPSBkZTsKLSAgICB9Ci0gICAgY2xvc2VkaXIoZCk7Ci0gICAgaWYgKG5fZWxlbSAmJiBjb21wYXIpIHsKLSAgICAgICAgcXNvcnQoZGVfbGlzdCwgbl9lbGVtLCBzaXplb2Yoc3RydWN0IGRpcmVudCAqKSwgCi0gICAgICAgICAgICAgIChpbnQgKCopKGNvbnN0IHZvaWQgKiwgY29uc3Qgdm9pZCAqKSkgY29tcGFyKTsKLSAgICB9Ci0gICAgKm5hbWVsaXN0ID0gZGVfbGlzdDsKLSAgICByZXR1cm4gbl9lbGVtOwotfQpkaWZmIC0tZ2l0IGEvbGliYy91bmlzdGQvcG9wZW4uYyBiL2xpYmMvdW5pc3RkL3BvcGVuLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMyMzU1YzEuLjAwMDAwMDAKLS0tIGEvbGliYy91bmlzdGQvcG9wZW4uYworKysgL2Rldi9udWxsCkBAIC0xLDE2NCArMCwwIEBACi0vKgkkT3BlbkJTRDogcG9wZW4uYyx2IDEuMTcgMjAwNS8wOC8wOCAwODowNTozNCBlc3BpZSBFeHAgJCAqLwotLyoKLSAqIENvcHlyaWdodCAoYykgMTk4OCwgMTk5MwotICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSB3cml0dGVuIGJ5IEtlbiBBcm5vbGQgYW5kCi0gKiBwdWJsaXNoZWQgaW4gVU5JWCBSZXZpZXcsIFZvbC4gNiwgTm8uIDguCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0gKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KLSNpbmNsdWRlIDxzeXMvd2FpdC5oPgotCi0jaW5jbHVkZSA8c2lnbmFsLmg+Ci0jaW5jbHVkZSA8ZXJybm8uaD4KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPHBhdGhzLmg+Ci0KLXN0YXRpYyBzdHJ1Y3QgcGlkIHsKLQlzdHJ1Y3QgcGlkICpuZXh0OwotCUZJTEUgKmZwOwotCXBpZF90IHBpZDsKLX0gKnBpZGxpc3Q7Ci0KLWV4dGVybiBjaGFyICoqZW52aXJvbjsKLQotRklMRSAqCi1wb3Blbihjb25zdCBjaGFyICpwcm9ncmFtLCBjb25zdCBjaGFyICp0eXBlKQotewotCXN0cnVjdCBwaWQgKiB2b2xhdGlsZSBjdXI7Ci0JRklMRSAqaW9wOwotCWludCBwZGVzWzJdOwotCXBpZF90IHBpZDsKLQljaGFyICphcmdwW10gPSB7InNoIiwgIi1jIiwgTlVMTCwgTlVMTH07Ci0KLQlpZiAoKCp0eXBlICE9ICdyJyAmJiAqdHlwZSAhPSAndycpIHx8IHR5cGVbMV0gIT0gJ1wwJykgewotCQllcnJubyA9IEVJTlZBTDsKLQkJcmV0dXJuIChOVUxMKTsKLQl9Ci0KLQlpZiAoKGN1ciA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IHBpZCkpKSA9PSBOVUxMKQotCQlyZXR1cm4gKE5VTEwpOwotCi0JaWYgKHBpcGUocGRlcykgPCAwKSB7Ci0JCWZyZWUoY3VyKTsKLQkJcmV0dXJuIChOVUxMKTsKLQl9Ci0KLQlzd2l0Y2ggKHBpZCA9IGZvcmsoKSkgewotCWNhc2UgLTE6CQkJLyogRXJyb3IuICovCi0JCSh2b2lkKWNsb3NlKHBkZXNbMF0pOwotCQkodm9pZCljbG9zZShwZGVzWzFdKTsKLQkJZnJlZShjdXIpOwotCQlyZXR1cm4gKE5VTEwpOwotCQkvKiBOT1RSRUFDSEVEICovCi0JY2FzZSAwOgkJCQkvKiBDaGlsZC4gKi8KLQkgICAgewotCQlzdHJ1Y3QgcGlkICpwY3VyOwotCQkvKgotCQkgKiBXZSBmb3JrKCknZCwgd2UgZ290IG91ciBvd24gY29weSBvZiB0aGUgbGlzdCwgbm8KLQkJICogY29udGVudGlvbi4KLQkJICovCi0JCWZvciAocGN1ciA9IHBpZGxpc3Q7IHBjdXI7IHBjdXIgPSBwY3VyLT5uZXh0KQotCQkJY2xvc2UoZmlsZW5vKHBjdXItPmZwKSk7Ci0KLQkJaWYgKCp0eXBlID09ICdyJykgewotCQkJKHZvaWQpIGNsb3NlKHBkZXNbMF0pOwotCQkJaWYgKHBkZXNbMV0gIT0gU1RET1VUX0ZJTEVOTykgewotCQkJCSh2b2lkKWR1cDIocGRlc1sxXSwgU1RET1VUX0ZJTEVOTyk7Ci0JCQkJKHZvaWQpY2xvc2UocGRlc1sxXSk7Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQkodm9pZCljbG9zZShwZGVzWzFdKTsKLQkJCWlmIChwZGVzWzBdICE9IFNURElOX0ZJTEVOTykgewotCQkJCSh2b2lkKWR1cDIocGRlc1swXSwgU1RESU5fRklMRU5PKTsKLQkJCQkodm9pZCljbG9zZShwZGVzWzBdKTsKLQkJCX0KLQkJfQotCQlhcmdwWzJdID0gKGNoYXIgKilwcm9ncmFtOwotCQlleGVjdmUoX1BBVEhfQlNIRUxMLCBhcmdwLCBlbnZpcm9uKTsKLQkJX2V4aXQoMTI3KTsKLQkJLyogTk9UUkVBQ0hFRCAqLwotCSAgICB9Ci0JfQotCi0JLyogUGFyZW50OyBhc3N1bWUgZmRvcGVuIGNhbid0IGZhaWwuICovCi0JaWYgKCp0eXBlID09ICdyJykgewotCQlpb3AgPSBmZG9wZW4ocGRlc1swXSwgdHlwZSk7Ci0JCSh2b2lkKWNsb3NlKHBkZXNbMV0pOwotCX0gZWxzZSB7Ci0JCWlvcCA9IGZkb3BlbihwZGVzWzFdLCB0eXBlKTsKLQkJKHZvaWQpY2xvc2UocGRlc1swXSk7Ci0JfQotCi0JLyogTGluayBpbnRvIGxpc3Qgb2YgZmlsZSBkZXNjcmlwdG9ycy4gKi8KLQljdXItPmZwID0gaW9wOwotCWN1ci0+cGlkID0gIHBpZDsKLQljdXItPm5leHQgPSBwaWRsaXN0OwotCXBpZGxpc3QgPSBjdXI7Ci0KLQlyZXR1cm4gKGlvcCk7Ci19Ci0KLS8qCi0gKiBwY2xvc2UgLS0KLSAqCVBjbG9zZSByZXR1cm5zIC0xIGlmIHN0cmVhbSBpcyBub3QgYXNzb2NpYXRlZCB3aXRoIGEgYHBvcGVuZWQnIGNvbW1hbmQsCi0gKglpZiBhbHJlYWR5IGBwY2xvc2VkJywgb3Igd2FpdHBpZCByZXR1cm5zIGFuIGVycm9yLgotICovCi1pbnQKLXBjbG9zZShGSUxFICppb3ApCi17Ci0Jc3RydWN0IHBpZCAqY3VyLCAqbGFzdDsKLQlpbnQgcHN0YXQ7Ci0JcGlkX3QgcGlkOwotCi0JLyogRmluZCB0aGUgYXBwcm9wcmlhdGUgZmlsZSBwb2ludGVyLiAqLwotCWZvciAobGFzdCA9IE5VTEwsIGN1ciA9IHBpZGxpc3Q7IGN1cjsgbGFzdCA9IGN1ciwgY3VyID0gY3VyLT5uZXh0KQotCQlpZiAoY3VyLT5mcCA9PSBpb3ApCi0JCQlicmVhazsKLQotCWlmIChjdXIgPT0gTlVMTCkKLQkJcmV0dXJuICgtMSk7Ci0KLQkodm9pZClmY2xvc2UoaW9wKTsKLQotCWRvIHsKLQkJcGlkID0gd2FpdHBpZChjdXItPnBpZCwgJnBzdGF0LCAwKTsKLQl9IHdoaWxlIChwaWQgPT0gLTEgJiYgZXJybm8gPT0gRUlOVFIpOwotCi0JLyogUmVtb3ZlIHRoZSBlbnRyeSBmcm9tIHRoZSBsaW5rZWQgbGlzdC4gKi8KLQlpZiAobGFzdCA9PSBOVUxMKQotCQlwaWRsaXN0ID0gY3VyLT5uZXh0OwotCWVsc2UKLQkJbGFzdC0+bmV4dCA9IGN1ci0+bmV4dDsKLQlmcmVlKGN1cik7Ci0KLQlyZXR1cm4gKHBpZCA9PSAtMSA/IC0xIDogcHN0YXQpOwotfQpkaWZmIC0tZ2l0IGEvbGliYy91bmlzdGQvcmFpc2UuYyBiL2xpYmMvdW5pc3RkL3JhaXNlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdiMDNhN2EuLjAwMDAwMDAKLS0tIGEvbGliYy91bmlzdGQvcmFpc2UuYworKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0gKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiAgICBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCi0gKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQotICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAotICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKLSAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUwotICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECi0gKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0gKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLSNpbmNsdWRlIDxzaWduYWwuaD4KLQotaW50IHJhaXNlKGludCBzaWdudW0pCi17Ci0gICAgcmV0dXJuIGtpbGwoZ2V0dGlkKCksIHNpZ251bSk7Ci19CmRpZmYgLS1naXQgYS9saWJjL3VuaXN0ZC9zYnJrLmMgYi9saWJjL3VuaXN0ZC9zYnJrLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGExMTJiNmMuLjAwMDAwMDAKLS0tIGEvbGliYy91bmlzdGQvc2Jyay5jCisrKyAvZGV2L251bGwKQEAgLTEsNjAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqICAgIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKLSAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi0gKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCi0gKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAotICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCi0gKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKLSAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotI2luY2x1ZGUgPHVuaXN0ZC5oPgotI2luY2x1ZGUgPGVycm5vLmg+Ci0KLQotI2RlZmluZSAgU0JSS19BTElHTiAgMzIKLQotLyogc2hhcmVkIHdpdGggYnJrKCkgaW1wbGVtZW50YXRpb24gKi8KLWNoYXIqICAgX19iaW9uaWNfYnJrOwotCi12b2lkICpzYnJrKHB0cmRpZmZfdCBpbmNyZW1lbnQpCi17Ci0gICAgY2hhciogIHN0YXJ0OwotICAgIGNoYXIqICBlbmQ7Ci0gICAgY2hhciogIG5ld19icms7Ci0gIAotICAgIGlmICggIV9fYmlvbmljX2JyaykKLSAgICAgICAgX19iaW9uaWNfYnJrID0gX19icmsoKHZvaWQqKTApOwotCi0gICAgc3RhcnQgPSAoY2hhciopKCgobG9uZylfX2Jpb25pY19icmsgKyBTQlJLX0FMSUdOLTEpICYgfihTQlJLX0FMSUdOLTEpKTsKLSAgZW5kICAgPSBzdGFydCArIGluY3JlbWVudDsKLQotICBuZXdfYnJrID0gX19icmsoZW5kKTsKLSAgICBpZiAobmV3X2JyayA9PSAodm9pZCopLTEpCi0gICAgICAgIHJldHVybiBuZXdfYnJrOwotICAgIGVsc2UgaWYgKG5ld19icmsgPCBlbmQpCi0gICAgewotICAgIGVycm5vID0gRU5PTUVNOwotICAgICAgICByZXR1cm4gKHZvaWQqKS0xOwotICB9Ci0KLSAgICBfX2Jpb25pY19icmsgPSBuZXdfYnJrOwotICByZXR1cm4gc3RhcnQ7Ci19CmRpZmYgLS1naXQgYS9saWJjL3VuaXN0ZC9zaWdzdXNwZW5kLmMgYi9saWJjL3VuaXN0ZC9zaWdzdXNwZW5kLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBkYjA1ZWQuLjAwMDAwMDAKLS0tIGEvbGliYy91bmlzdGQvc2lnc3VzcGVuZC5jCisrKyAvZGV2L251bGwKQEAgLTEsMzcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqICAgIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKLSAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi0gKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCi0gKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAotICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCi0gKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKLSAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotI2luY2x1ZGUgPHNpZ25hbC5oPgotCi1leHRlcm4gaW50IF9fc2lnc3VzcGVuZChpbnQsIGludCwgdW5zaWduZWQgaW50KTsKLQotaW50IHNpZ3N1c3BlbmQoY29uc3Qgc2lnc2V0X3QgKl9tYXNrKQotewotICAgIHVuc2lnbmVkIGludCAgICBtYXNrID0gKHVuc2lnbmVkIGludCkqX21hc2s7Ci0KLQlyZXR1cm4gX19zaWdzdXNwZW5kKDAsIDAsIG1hc2spOwotfQpkaWZmIC0tZ2l0IGEvbGliYy91bmlzdGQvc2lnd2FpdC5jIGIvbGliYy91bmlzdGQvc2lnd2FpdC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOWMyYTU0Li4wMDAwMDAwCi0tLSBhL2xpYmMvdW5pc3RkL3NpZ3dhaXQuYworKysgL2Rldi9udWxsCkBAIC0xLDc0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0gKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiAgICBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCi0gKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQotICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAotICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKLSAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUwotICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECi0gKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0gKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLSNpbmNsdWRlIDxlcnJuby5oPgotI2luY2x1ZGUgPHNpZ25hbC5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPHRpbWUuaD4KLQotaW50IF9fcnRfc2lndGltZWR3YWl0KGNvbnN0IHNpZ3NldF90ICp1dGhlc2UsIHNpZ2luZm9fdCAqdWluZm8sIGNvbnN0IHN0cnVjdCB0aW1lc3BlYyAqdXRzLCBzaXplX3Qgc2lnc2V0c2l6ZSk7Ci0KLS8qIG9rLCB0aGlzIGlzIHJlYWxseSBzdWJ0bGU6IDxhc20vc2lnbmFsLmg+IGRlZmluZXMgc2lnc2V0X3QgZGlmZmVyZW50bHkKLSAqIHdoZW4geW91J3JlIGluIHRoZSBrZXJuZWwgb3IgaW4gdGhlIEMgbGlicmFyeS4KLSAqCi0gKiBpbiB0aGUga2VybmVsLCB0aGlzIGlzIGFuIGFycmF5IG9mIDIgMzItYml0IHVuc2lnbmVkIGxvbmdzCi0gKiBpbiB0aGUgQyBsaWJyYXJ5LCB0aGlzIGlzIGEgc2luZ2xlIDMyLWJpdCB1bnNpZ25lZCBsb25nCi0gKgotICogbW9yZW92ZXIsIHRoZSBrZXJuZWwgaW1wbGVtZW50YXRpb24gb2YgcnRfc2lndGltZWR3YWl0IGRvZXNuJ3QKLSAqIGFjY2VwdCBhbnl0aGluZyBleGNlcHQga2VybmVsLXNpemVkIHNpZ25hbCBzZXRzIChwcm9iYWJseSBhIGJ1ZyAhKQotICoKLSAqIHdlIHRodXMgbmVlZCB0byBjcmVhdGUgYSBmYWtlIGtlcm5lbCBzaWdzZXQgISEKLSAqLwotCi1pbnQgc2lnd2FpdChjb25zdCBzaWdzZXRfdCAqc2V0LCBpbnQgKnNpZykKLXsKLSAgICBpbnQgIHJldDsKLSAgICAvKiB1c2UgYSB1bmlvbiB0byBnZXQgcmlkIG9mIGFsaWFzaW5nIHdhcm5pbmdzICovCi0gICAgdW5pb24gewotICAgICAgdW5zaWduZWQgbG9uZyAga2VybmVsX3NpZ3NldFsyXTsKLSAgICAgIHNpZ3NldF90ICAgICAgIGR1bW15X3NpZ3NldDsKLSAgICB9IHU7Ci0KLSAgICB1Lmtlcm5lbF9zaWdzZXRbMF0gPSAqc2V0OwotICAgIHUua2VybmVsX3NpZ3NldFsxXSA9IDA7ICAvKiBubyByZWFsLXRpbWUgc2lnbmFscyBzdXBwb3J0ZWQgPyAqLwotICAgIGZvciAoOzspCi0gICAgewotICAgICAvKiBfX3J0X3NpZ3RpbWVkd2FpdCBjYW4gcmV0dXJuIEVBR0FJTiBvciBFSU5UUiwgd2UgbmVlZCB0byBsb29wCi0gICAgICAqIGFyb3VuZCB0aGVtIHNpbmNlIHNpZ3dhaXQgaXMgb25seSBhbGxvd2VkIHRvIHJldHVybiBFSU5WQUwKLSAgICAgICovCi0gICAgICByZXQgPSBfX3J0X3NpZ3RpbWVkd2FpdCAoICZ1LmR1bW15X3NpZ3NldCwgTlVMTCwgTlVMTCwgc2l6ZW9mKHUua2VybmVsX3NpZ3NldCkpOwotICAgICAgaWYgKHJldCA+PSAwKQotICAgICAgICBicmVhazsKLQotICAgICAgaWYgKGVycm5vICE9IEVBR0FJTiAmJiBlcnJubyAhPSBFSU5UUikKLSAgICAgICAgcmV0dXJuIGVycm5vOwotICAgIH0KLQotICAgICpzaWcgPSByZXQ7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KZGlmZiAtLWdpdCBhL2xpYmMvdW5pc3RkL3NvY2tldGNhbGxzLmMgYi9saWJjL3VuaXN0ZC9zb2NrZXRjYWxscy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MWJkZjU3Li4wMDAwMDAwCi0tLSBhL2xpYmMvdW5pc3RkL3NvY2tldGNhbGxzLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyNTkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqICAgIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKLSAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi0gKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCi0gKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAotICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCi0gKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKLSAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotI2luY2x1ZGUgPHVuaXN0ZC5oPgotI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KLSNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KLQotZW51bQotewotICAgIFNZU19TT0NLRVQgPSAxLAotICAgIFNZU19CSU5ELAotICAgIFNZU19DT05ORUNULAotICAgIFNZU19MSVNURU4sCi0gICAgU1lTX0FDQ0VQVCwKLSAgICBTWVNfR0VUU09DS05BTUUsCi0gICAgU1lTX0dFVFBFRVJOQU1FLAotICAgIFNZU19TT0NLRVRQQUlSLAotICAgIFNZU19TRU5ELAotICAgIFNZU19SRUNWLAotICAgIFNZU19TRU5EVE8sCi0gICAgU1lTX1JFQ1ZGUk9NLAotICAgIFNZU19TSFVURE9XTiwKLSAgICBTWVNfU0VUU09DS09QVCwKLSAgICBTWVNfR0VUU09DS09QVCwKLSAgICBTWVNfU0VORE1TRywKLSAgICBTWVNfUkVDVk1TRwotfTsKLQotI2lmbmRlZiBfX05SX3NvY2tldAotaW50IHNvY2tldChpbnQgZG9tYWluLCBpbnQgdHlwZSwgaW50IHByb3RvY29sKQotewotICAgIHVuc2lnbmVkIGxvbmcgIHRbM107Ci0KLSAgICB0WzBdID0gKHVuc2lnbmVkIGxvbmcpIGRvbWFpbjsKLSAgICB0WzFdID0gKHVuc2lnbmVkIGxvbmcpIHR5cGU7Ci0gICAgdFsyXSA9ICh1bnNpZ25lZCBsb25nKSBwcm90b2NvbDsKLQotICAgIHJldHVybiAoaW50KSBfX3NvY2tldGNhbGwoIFNZU19TT0NLRVQsIHQgKTsKLX0KLSNlbmRpZiAvKiAhX19OUl9zb2NrZXQgKi8KLQotCi0jaWZuZGVmIF9fTlJfYmluZAotaW50IGJpbmQoaW50IHNvY2tmZCwgY29uc3Qgc3RydWN0IHNvY2thZGRyICpteV9hZGRyLCBzb2NrbGVuX3QgYWRkcmxlbikKLXsKLSAgICB1bnNpZ25lZCBsb25nICB0WzNdOwotCi0gICAgdFswXSA9ICh1bnNpZ25lZCBsb25nKSBzb2NrZmQ7Ci0gICAgdFsxXSA9ICh1bnNpZ25lZCBsb25nKSBteV9hZGRyOwotICAgIHRbMl0gPSAodW5zaWduZWQgbG9uZykgYWRkcmxlbjsKLQotICAgIHJldHVybiAoaW50KSBfX3NvY2tldGNhbGwoIFNZU19CSU5ELCB0ICk7Ci19Ci0jZW5kaWYgIC8qICFfX05SX2JpbmQgKi8KLQotI2lmbmRlZiBfX05SX2Nvbm5lY3QKLWludCBjb25uZWN0KGludCBzb2NrZmQsIGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqc2Vydl9hZGRyLCBzb2NrbGVuX3QgIGFkZHJsZW4gKQotewotICAgIHVuc2lnbmVkIGxvbmcgIHRbM107Ci0KLSAgICB0WzBdID0gKHVuc2lnbmVkIGxvbmcpIHNvY2tmZDsKLSAgICB0WzFdID0gKHVuc2lnbmVkIGxvbmcpIHNlcnZfYWRkcjsKLSAgICB0WzJdID0gKHVuc2lnbmVkIGxvbmcpIGFkZHJsZW47Ci0KLSAgICByZXR1cm4gKGludCkgX19zb2NrZXRjYWxsKCBTWVNfQ09OTkVDVCwgdCApOwotfQotI2VuZGlmIC8qICFfX05SX2Nvbm5lY3QgKi8KLQotI2lmbmRlZiBfX05SX2xpc3RlbgotaW50IGxpc3RlbihpbnQgcywgaW50IGJhY2tsb2cpCi17Ci0gICAgdW5zaWduZWQgbG9uZyAgdFsyXTsKLQotICAgIHRbMF0gPSAodW5zaWduZWQgbG9uZykgczsKLSAgICB0WzFdID0gKHVuc2lnbmVkIGxvbmcpIGJhY2tsb2c7Ci0KLSAgICByZXR1cm4gKGludCkgX19zb2NrZXRjYWxsKCBTWVNfTElTVEVOLCB0ICk7Ci19Ci0jZW5kaWYgLyogX19OUl9saXN0ZW4gKi8KLQotI2lmbmRlZiBfX05SX2FjY2VwdAotaW50IGFjY2VwdChpbnQgc29jaywgc3RydWN0IHNvY2thZGRyICphZHJlc3NlLCBzb2NrbGVuX3QgKmxvbmd1ZXVyKQotewotICAgIHVuc2lnbmVkIGxvbmcgIHRbM107Ci0KLSAgICB0WzBdID0gKHVuc2lnbmVkIGxvbmcpIHNvY2s7Ci0gICAgdFsxXSA9ICh1bnNpZ25lZCBsb25nKSBhZHJlc3NlOwotICAgIHRbMl0gPSAodW5zaWduZWQgbG9uZykgbG9uZ3VldXI7Ci0KLSAgICByZXR1cm4gKGludCkgX19zb2NrZXRjYWxsKCBTWVNfQUNDRVBULCB0ICk7Ci19Ci0jZW5kaWYgLyogX19OUl9hY2NlcHQgKi8KLQotI2lmbmRlZiBfX05SX2dldHNvY2tuYW1lCi1pbnQgZ2V0c29ja25hbWUoaW50IHMsIHN0cnVjdCBzb2NrYWRkciAqIG5hbWUsIHNvY2tsZW5fdCAqIG5hbWVsZW4gKQotewotICAgIHVuc2lnbmVkIGxvbmcgIHRbM107Ci0KLSAgICB0WzBdID0gKHVuc2lnbmVkIGxvbmcpIHM7Ci0gICAgdFsxXSA9ICh1bnNpZ25lZCBsb25nKSBuYW1lOwotICAgIHRbMl0gPSAodW5zaWduZWQgbG9uZykgbmFtZWxlbjsKLQotICAgIHJldHVybiAoaW50KSBfX3NvY2tldGNhbGwoIFNZU19HRVRTT0NLTkFNRSwgdCApOwotfQotI2VuZGlmIC8qIF9fTlJfZ2V0c29ja25hbWUgKi8KLQotI2lmbmRlZiBfX05SX2dldHBlZXJuYW1lCi1pbnQgZ2V0cGVlcm5hbWUoaW50IHMsIHN0cnVjdCBzb2NrYWRkciAqbmFtZSwgc29ja2xlbl90ICpuYW1lbGVuKQotewotICAgIHVuc2lnbmVkIGxvbmcgIHRbM107Ci0KLSAgICB0WzBdID0gKHVuc2lnbmVkIGxvbmcpIHM7Ci0gICAgdFsxXSA9ICh1bnNpZ25lZCBsb25nKSBuYW1lOwotICAgIHRbMl0gPSAodW5zaWduZWQgbG9uZykgbmFtZWxlbjsKLQotICAgIHJldHVybiAoaW50KSBfX3NvY2tldGNhbGwoIFNZU19HRVRQRUVSTkFNRSwgdCApOwotfQotI2VuZGlmIC8qICFfX05SX2dldHBlZXJuYW1lICovCi0KLSNpZm5kZWYgX19OUl9zb2NrZXRwYWlyCi1pbnQgc29ja2V0cGFpcihpbnQgZCwgaW50IHR5cGUsIGludCBwcm90b2NvbCwgaW50IHN2WzJdKQotewotICAgIHVuc2lnbmVkIGxvbmcgIHRbNF07Ci0KLSAgICB0WzBdID0gKHVuc2lnbmVkIGxvbmcpIGQ7Ci0gICAgdFsxXSA9ICh1bnNpZ25lZCBsb25nKSB0eXBlOwotICAgIHRbMl0gPSAodW5zaWduZWQgbG9uZykgcHJvdG9jb2w7Ci0gICAgdFszXSA9ICh1bnNpZ25lZCBsb25nKSBzdjsKLQotICAgIHJldHVybiAoaW50KSBfX3NvY2tldGNhbGwoIFNZU19TT0NLRVRQQUlSLCB0ICk7Ci19Ci0jZW5kaWYgLyogX19OUl9zb2NrZXRwYWlyICovCi0KLSNpZm5kZWYgX19OUl9zZW5kdG8KLXNzaXplX3Qgc2VuZHRvKGludCBzb2NrZXQsIGNvbnN0IHZvaWQgKm1lc3NhZ2UsIHNpemVfdCBsZW5ndGgsIGludCBmbGFncywKLSAgICAgIGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqZGVzdF9hZGRyLCBzb2NrbGVuX3QgZGVzdF9sZW4pCi17Ci0gICAgdW5zaWduZWQgbG9uZyAgdFs2XTsKLQotICAgIHRbMF0gPSAodW5zaWduZWQgbG9uZykgc29ja2V0OwotICAgIHRbMV0gPSAodW5zaWduZWQgbG9uZykgbWVzc2FnZTsKLSAgICB0WzJdID0gKHVuc2lnbmVkIGxvbmcpIGxlbmd0aDsKLSAgICB0WzNdID0gKHVuc2lnbmVkIGxvbmcpIGZsYWdzOwotICAgIHRbNF0gPSAodW5zaWduZWQgbG9uZykgZGVzdF9hZGRyOwotICAgIHRbNV0gPSAodW5zaWduZWQgbG9uZykgZGVzdF9sZW47Ci0KLSAgIHJldHVybiBfX3NvY2tldGNhbGwoIFNZU19TRU5EVE8sIHQgKTsKLX0KLSNlbmRpZiAvKiAhX19OUl9zZW5kdG8gKi8KLQotI2lmbmRlZiBfX05SX3JlY3Zmcm9tCi1zc2l6ZV90IHJlY3Zmcm9tKGludCBzb2NrZXQsIHZvaWQgKmJ1ZmZlciwgc2l6ZV90IGxlbmd0aCwgdW5zaWduZWQgaW50IGZsYWdzLAotICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqYWRkcmVzcywgc29ja2xlbl90ICphZGRyZXNzX2xlbikKLXsKLSAgICB1bnNpZ25lZCBsb25nICB0WzZdOwotCi0gICAgdFswXSA9ICh1bnNpZ25lZCBsb25nKSBzb2NrZXQ7Ci0gICAgdFsxXSA9ICh1bnNpZ25lZCBsb25nKSBidWZmZXI7Ci0gICAgdFsyXSA9ICh1bnNpZ25lZCBsb25nKSBsZW5ndGg7Ci0gICAgdFszXSA9ICh1bnNpZ25lZCBsb25nKSBmbGFnczsKLSAgICB0WzRdID0gKHVuc2lnbmVkIGxvbmcpIGFkZHJlc3M7Ci0gICAgdFs1XSA9ICh1bnNpZ25lZCBsb25nKSBhZGRyZXNzX2xlbjsKLQotICAgcmV0dXJuIF9fc29ja2V0Y2FsbCggU1lTX1JFQ1ZGUk9NLCB0ICk7Ci19Ci0jZW5kaWYgLyogIV9fTlJfcmVjdmZyb20gKi8KLQotI2lmbmRlZiBfX05SX3NodXRkb3duCi1pbnQgc2h1dGRvd24oaW50IHNvY2tldCwgaW50IGhvdykKLXsKLSAgICB1bnNpZ25lZCBsb25nICB0WzJdOwotCi0gICAgdFswXSA9ICh1bnNpZ25lZCBsb25nKSBzb2NrZXQ7Ci0gICAgdFsxXSA9ICh1bnNpZ25lZCBsb25nKSBob3c7Ci0KLSAgIHJldHVybiAoaW50KSBfX3NvY2tldGNhbGwoIFNZU19TSFVURE9XTiwgdCApOwotfQotI2VuZGlmIC8qICFfX05SX3NodXRkb3duICovCi0KLSNpZm5kZWYgX19OUl9zZXRzb2Nrb3B0Ci1pbnQgIHNldHNvY2tvcHQoIGludCAgcywgaW50ICBsZXZlbCwgaW50ICBvcHRuYW1lLCBjb25zdCB2b2lkKiAgb3B0dmFsLCBzb2NrbGVuX3QgIG9wdGxlbiApCi17Ci0gICAgdW5zaWduZWQgbG9uZyAgdFs1XTsKLQotICAgIHRbMF0gPSAodW5zaWduZWQgbG9uZykgczsKLSAgICB0WzFdID0gKHVuc2lnbmVkIGxvbmcpIGxldmVsOwotICAgIHRbMl0gPSAodW5zaWduZWQgbG9uZykgb3B0bmFtZTsKLSAgICB0WzNdID0gKHVuc2lnbmVkIGxvbmcpIG9wdHZhbDsKLSAgICB0WzRdID0gKHVuc2lnbmVkIGxvbmcpIG9wdGxlbjsKLQotICAgcmV0dXJuIChpbnQpIF9fc29ja2V0Y2FsbCggU1lTX1NFVFNPQ0tPUFQsIHQgKTsKLX0KLSNlbmRpZiAvKiAhX19OUl9zZXRzb2Nrb3B0ICovCi0KLSNpZm5kZWYgX19OUl9nZXRzb2Nrb3B0Ci1pbnQgZ2V0c29ja29wdChpbnQgcywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwgdm9pZCAqb3B0dmFsLCBzb2NrbGVuX3QgKm9wdGxlbikKLXsKLSAgICB1bnNpZ25lZCBsb25nICB0WzVdOwotCi0gICAgdFswXSA9ICh1bnNpZ25lZCBsb25nKSBzOwotICAgIHRbMV0gPSAodW5zaWduZWQgbG9uZykgbGV2ZWw7Ci0gICAgdFsyXSA9ICh1bnNpZ25lZCBsb25nKSBvcHRuYW1lOwotICAgIHRbM10gPSAodW5zaWduZWQgbG9uZykgb3B0dmFsOwotICAgIHRbNF0gPSAodW5zaWduZWQgbG9uZykgb3B0bGVuOwotCi0gICAgcmV0dXJuIChpbnQpIF9fc29ja2V0Y2FsbCggU1lTX0dFVFNPQ0tPUFQsIHQgKTsKLX0KLSNlbmRpZiAvKiAhX19OUl9nZXRzb2Nrb3B0ICovCi0KLSNpZm5kZWYgX19OUl9zZW5kbXNnCi1pbnQgc2VuZG1zZyAoaW50IHNvY2tldCwgY29uc3Qgc3RydWN0IG1zZ2hkciAqbWVzc2FnZSwgdW5zaWduZWQgaW50IGZsYWdzKQotewotICAgIHVuc2lnbmVkIGxvbmcgIHRbM107Ci0KLSAgICB0WzBdID0gKHVuc2lnbmVkIGxvbmcpIHNvY2tldDsKLSAgICB0WzFdID0gKHVuc2lnbmVkIGxvbmcpIG1lc3NhZ2U7Ci0gICAgdFsyXSA9ICh1bnNpZ25lZCBsb25nKSBmbGFnczsKLQotICAgcmV0dXJuIF9fc29ja2V0Y2FsbCggU1lTX1NFTkRNU0csIHQgKTsKLX0KLSNlbmRpZiAvKiBfX05SX3NlbmRtc2cgKi8KLQotI2lmbmRlZiBfX05SX3JlY3Ztc2cKLWludCByZWN2bXNnKGludCBzb2NrZXQsIHN0cnVjdCBtc2doZHIgKm1lc3NhZ2UsIHVuc2lnbmVkIGludCBmbGFncykKLXsKLSAgICB1bnNpZ25lZCBsb25nICB0WzNdOwotCi0gICAgdFswXSA9ICh1bnNpZ25lZCBsb25nKSBzb2NrZXQ7Ci0gICAgdFsxXSA9ICh1bnNpZ25lZCBsb25nKSBtZXNzYWdlOwotICAgIHRbMl0gPSAodW5zaWduZWQgbG9uZykgZmxhZ3M7Ci0KLSAgIHJldHVybiBfX3NvY2tldGNhbGwoIFNZU19SRUNWTVNHLCB0ICk7Ci19Ci0jZW5kaWYgLyogX19OUl9yZWN2bXNnICovCi0KZGlmZiAtLWdpdCBhL2xpYmMvdW5pc3RkL3N0cnNpZ25hbC5jIGIvbGliYy91bmlzdGQvc3Ryc2lnbmFsLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE3MWRlM2QuLjAwMDAwMDAKLS0tIGEvbGliYy91bmlzdGQvc3Ryc2lnbmFsLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogICAgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUwotICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKLSAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCi0gKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKLSAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAotICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0gKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0jaW5jbHVkZSA8c2lnbmFsLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0KLWNoYXIqCi1zdHJzaWduYWwoaW50ICBzaWcpCi17Ci0gICAgaWYgKCh1bnNpZ25lZClzaWcgPCBOU0lHKQotICAgICAgICByZXR1cm4gKGNoYXIqKSBzeXNfc2lnbGlzdFtzaWddOwotICAgIGVsc2UKLSAgICAgICAgcmV0dXJuICJJbnZhbGlkIHNpZ25hbCBudW1iZXIiOwotfQpkaWZmIC0tZ2l0IGEvbGliYy91bmlzdGQvc3lzY29uZi5jIGIvbGliYy91bmlzdGQvc3lzY29uZi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5Mzc3ODAyLi4wMDAwMDAwCi0tLSBhL2xpYmMvdW5pc3RkL3N5c2NvbmYuYworKysgL2Rldi9udWxsCkBAIC0xLDQzNCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogICAgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUwotICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKLSAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCi0gKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKLSAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAotICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0gKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0jaW5jbHVkZSA8c3lzL3N5c2NvbmYuaD4KLSNpbmNsdWRlIDxsaW1pdHMuaD4KLSNpbmNsdWRlIDxiaW9uaWNfdGxzLmg+Ci0jaW5jbHVkZSA8YXNtL3BhZ2UuaD4KLSNpbmNsdWRlIDxzdGRpby5oPiAgLyogZm9yIEZPUEVOX01BWCAqLwotI2luY2x1ZGUgPGVycm5vLmg+Ci0jaW5jbHVkZSA8ZmNudGwuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxjdHlwZS5oPgotCi0vKiBzZWVtcyB0byBiZSB0aGUgZGVmYXVsdCBvbiBMaW51eCwgcGVyIHRoZSBHTGliYyBzb3VyY2VzIGFuZCBteSBvd24gZGlnZ2luZyAqLwotCi0jZGVmaW5lICBTWVNURU1fQ0xLX1RDSyAgICAgICAgIDEwMAotI2RlZmluZSAgU1lTVEVNX0lPVl9NQVggICAgICAgICAxMDI0Ci0jZGVmaW5lICBTWVNURU1fREVMQVlUSU1FUl9NQVggIDIxNDc0ODM2NDcKLSNkZWZpbmUgIFNZU1RFTV9NUV9PUEVOX01BWCAgICAgOAotI2RlZmluZSAgU1lTVEVNX01RX1BSSU9fTUFYICAgICAzMjc2OAotI2RlZmluZSAgU1lTVEVNX1NFTV9OU0VNU19NQVggICAyNTYKLSNkZWZpbmUgIFNZU1RFTV9TRU1fVkFMVUVfTUFYICAgMHgzZmZmZmZmZiAgLyogc2VlIGJpb25pYy9zZW1hcGhvcmUuYyAqLwotI2RlZmluZSAgU1lTVEVNX1NJR1FVRVVFX01BWCAgICAzMgotI2RlZmluZSAgU1lTVEVNX1RJTUVSX01BWCAgICAgICAzMgotI2RlZmluZSAgU1lTVEVNX0xPR0lOX05BTUVfTUFYICAyNTYKLSNkZWZpbmUgIFNZU1RFTV9UVFlfTkFNRV9NQVggICAgMzIKLQotLyogdGhlIGZvbGxvd2luZyBkZXBlbmRzIG9uIG91ciBpbXBsZW1lbnRhdGlvbiAqLwotI2RlZmluZSAgU1lTVEVNX0FURVhJVF9NQVggICAgICAgICAgNjU1MzYgICAgLyogb3VyIGltcGxlbWVudGF0aW9uIGlzIHVubGltaXRlZCAqLwotI2RlZmluZSAgU1lTVEVNX1RIUkVBRF9LRVlTX01BWCAgICAgQklPTklDX1RMU19TTE9UUwotI2RlZmluZSAgU1lTVEVNX1RIUkVBRF9TVEFDS19NSU4gICAgMzI3NjggICAgLyogbG93ZXIgdmFsdWVzIG1heSBiZSBwb3NzaWJsZSwgYnV0IGJlIGNvbnNlcnZhdGl2ZSAqLwotI2RlZmluZSAgU1lTVEVNX1RIUkVBRF9USFJFQURTX01BWCAgMjA0OCAgICAgLyogcmVhbGx5IHVubGltaXRlZCAqLwotCi0jZGVmaW5lICBTWVNURU1fMl9DX0JJTkQgICAgIF9QT1NJWF9WRVJTSU9OICAvKiBQb3NpeCBDIGJpbmRpbmcgdmVyc2lvbiAqLwotI2RlZmluZSAgU1lTVEVNXzJfQ19WRVIgICAgICBfUE9TSVgyX0NfVkVSU0lPTgotI2RlZmluZSAgU1lTVEVNXzJfQ19ERVYgICAgICAtMSAgICAgICAvKiBQb3NpeCBDIGRldmVsb3BtZW50IHRvb2xzIHVuc3VwcG9ydGVkIG9uIHRoZSBkZXZpY2UgKi8KLSNkZWZpbmUgIFNZU1RFTV8yX0ZPUlRfREVWICAgLTEgICAgICAgLyogRm9ydHJhbiBkZXZlbG9wbWVudCB1bnN1cHBvcnRlZCAqLwotI2RlZmluZSAgU1lTVEVNXzJfRk9SVF9SVU4gICAtMSAgICAgICAvKiBGb3J0cmFuIHJ1bnRpbWUgdW5zdXBwb3J0ZWQgKi8KLSNkZWZpbmUgIFNZU1RFTV8yX1NXX0RFViAgICAgLTEgICAgICAgLyogcG9zaXggc29mdHdhcmUgZGV2IHV0aWxpdGllcyB1bnN1cHBvcnRlZCAqLwotI2RlZmluZSAgU1lTVEVNXzJfTE9DQUxFREVGICAtMSAgICAgICAvKiBsb2NhbGRlZigpIHVuaW1wbGVtZW50ZWQgKi8KLSNkZWZpbmUgIFNZU1RFTV8yX1VQRSAgICAgICAgLTEgICAgICAgLyogTm8gVVBFIGZvciB5b3UgISAoVXNlciBQb3J0YWJpbGl0eSBVdGlsaXRpZXMpICovCi0jZGVmaW5lICBTWVNURU1fMl9WRVJTSU9OICAgIC0xICAgICAgIC8qIE5vIHBvc2l4IGNvbW1hbmQtbGluZSB0b29scyAqLwotCi1zdGF0aWMgaW50ICBfX2dldF9ucHJvY19jb25mKHZvaWQpOwotc3RhdGljIGludCAgX19nZXRfbnByb2Nfb25sbih2b2lkKTsKLXN0YXRpYyBpbnQgIF9fZ2V0X3BoeXNfcGFnZXModm9pZCk7Ci1zdGF0aWMgaW50ICBfX2dldF9hdnBoeXNfcGFnZXModm9pZCk7Ci0KLWludAotc3lzY29uZiggaW50ICBuYW1lICkKLXsKLSAgICBzd2l0Y2ggKG5hbWUpIHsKLSNpZmRlZiBfUE9TSVhfQVJHX01BWAotICAgIGNhc2UgX1NDX0FSR19NQVg6ICAgICAgICAgICByZXR1cm4gX1BPU0lYX0FSR19NQVg7Ci0jZW5kaWYKLSNpZmRlZiBfUE9TSVgyX0JDX0JBU0VfTUFYCi0gICAgY2FzZSBfU0NfQkNfQkFTRV9NQVg6ICAgICAgIHJldHVybiBfUE9TSVgyX0JDX0JBU0VfTUFYOwotI2VuZGlmCi0jaWZkZWYgX1BPU0lYMl9CQ19ESU1fTUFYCi0gICAgY2FzZSBfU0NfQkNfRElNX01BWDogICAgICAgIHJldHVybiBfUE9TSVgyX0JDX0RJTV9NQVg7Ci0jZW5kaWYKLSNpZmRlZiBfUE9TSVgyX0JDX1NDQUxFX01BWAotICAgIGNhc2UgX1NDX0JDX1NDQUxFX01BWDogICAgICByZXR1cm4gX1BPU0lYMl9CQ19TQ0FMRV9NQVg7Ci0jZW5kaWYKLSNpZmRlZiBfUE9TSVgyX0JDX1NUUklOR19NQVgKLSAgICBjYXNlIF9TQ19CQ19TVFJJTkdfTUFYOiAgICAgcmV0dXJuIF9QT1NJWDJfQkNfU1RSSU5HX01BWDsKLSNlbmRpZgotICAgIGNhc2UgX1NDX0NISUxEX01BWDogICAgICAgICByZXR1cm4gQ0hJTERfTUFYOwotICAgIGNhc2UgX1NDX0NMS19UQ0s6ICAgICAgICAgICByZXR1cm4gU1lTVEVNX0NMS19UQ0s7Ci0jaWZkZWYgX1BPU0lYMl9DT0xMX1dFSUdIVFNfTUFTSwotICAgIGNhc2UgX1NDX0NPTExfV0VJR0hUU19NQVg6ICByZXR1cm4gX1BPU0lYMl9DT0xMX1dFSUdIVFNfTUFTSzsKLSNlbmRpZgotI2lmZGVmIF9QT1NJWDJfRVhQUl9ORVNUX01BWAotICAgIGNhc2UgX1NDX0VYUFJfTkVTVF9NQVg6ICAgIHJldHVybiBfUE9TSVgyX0VYUFJfTkVTVF9NQVg7Ci0jZW5kaWYKLSNpZmRlZiBfUE9TSVgyX0xJTkVfTUFYCi0gICAgY2FzZSBfU0NfTElORV9NQVg6ICAgICAgICAgIHJldHVybiBfUE9TSVgyX0xJTkVfTUFYOwotI2VuZGlmCi0gICAgY2FzZSBfU0NfTkdST1VQU19NQVg6ICAgICAgIHJldHVybiBOR1JPVVBTX01BWDsKLSAgICBjYXNlIF9TQ19PUEVOX01BWDogICAgICAgICAgcmV0dXJuIE9QRU5fTUFYOwotICAgIC8vY2FzZSBfU0NfUEFTU19NQVg6ICAgICAgICAgIHJldHVybiBQQVNTX01BWDsKLSAgICBjYXNlIF9TQ18yX0NfQklORDogICAgICAgICAgcmV0dXJuIFNZU1RFTV8yX0NfQklORDsKLSAgICBjYXNlIF9TQ18yX0NfREVWOiAgICAgICAgICAgcmV0dXJuIFNZU1RFTV8yX0NfREVWOwotICAgIGNhc2UgX1NDXzJfQ19WRVJTSU9OOiAgICAgICByZXR1cm4gU1lTVEVNXzJfQ19WRVI7Ci0gICAgLy9jYXNlIF9TQ18yX0NIQVJfVEVSTTogICAgICAgICByZXR1cm4gOwotICAgIGNhc2UgX1NDXzJfRk9SVF9ERVY6ICAgICAgICByZXR1cm4gU1lTVEVNXzJfRk9SVF9ERVY7Ci0gICAgY2FzZSBfU0NfMl9GT1JUX1JVTjogICAgICAgIHJldHVybiBTWVNURU1fMl9GT1JUX1JVTjsKLSAgICBjYXNlIF9TQ18yX0xPQ0FMRURFRjogICAgICAgcmV0dXJuIFNZU1RFTV8yX0xPQ0FMRURFRjsKLSAgICBjYXNlIF9TQ18yX1NXX0RFVjogICAgICAgICAgcmV0dXJuIFNZU1RFTV8yX1NXX0RFVjsKLSAgICBjYXNlIF9TQ18yX1VQRTogICAgICAgICAgICAgcmV0dXJuIFNZU1RFTV8yX1VQRTsKLSAgICBjYXNlIF9TQ18yX1ZFUlNJT046ICAgICAgICAgcmV0dXJuIFNZU1RFTV8yX1ZFUlNJT047Ci0jaWZkZWYgX1BPU0lYX0pPQl9DT05UUk9MCi0gICAgY2FzZSBfU0NfSk9CX0NPTlRST0w6ICAgICAgIHJldHVybiBfUE9TSVhfSk9CX0NPTlRST0w7Ci0jZW5kaWYKLSNpZmRlZiBfUE9TSVhfU0FWRURfSURTCi0gICAgY2FzZSBfU0NfU0FWRURfSURTOiAgICAgICAgIHJldHVybiBfUE9TSVhfU0FWRURfSURTOwotI2VuZGlmCi0jaWZkZWYgX1BPU0lYX1ZFUlNJT04KLSAgICBjYXNlIF9TQ19WRVJTSU9OOiAgICAgICAgICAgcmV0dXJuIF9QT1NJWF9WRVJTSU9OOwotI2VuZGlmCi0gICAgLy9jYXNlIF9TQ19SRV9EVVBfPEFYOiAgICAgICAgcmV0dXJuIDsKLSAgICBjYXNlIF9TQ19TVFJFQU1fTUFYOiAgICAgICAgcmV0dXJuIEZPUEVOX01BWDsKLSAgICAvL2Nhc2UgX1NDX1RaTkFNRV9NQVg6ICAgICAgICByZXR1cm4gOwotI2lmIF9YT1BFTl9DUllQVAotICAgIGNhc2UgX1NDX1hPUEVOX0NSWVBUOiAgICAgICByZXR1cm4gX1hPUEVOX0NSWVBUOwotI2VuZGlmCi0jaWZkZWYgX1hPUEVOX0VOSF9JMThOCi0gICAgY2FzZSBfU0NfWE9QRU5fRU5IX0kxOE46ICAgIHJldHVybiBfWE9QRU5fRU5IX0kxOE47Ci0jZW5kaWYKLSNpZmRlZiBfWE9QRU5fU0hNCi0gICAgY2FzZSBfU0NfWE9QRU5fU0hNOiAgICAgICAgIHJldHVybiBfWE9QRU5fU0hNOwotI2VuZGlmCi0jaWZkZWYgX1hPUEVOX1ZFUlNJT04KLSAgICBjYXNlIF9TQ19YT1BFTl9WRVJTSU9OOiAgICAgcmV0dXJuIF9YT1BFTl9WRVJTSU9OOwotI2VuZGlmCi0jaWZkZWYgX1hPUEVOX1hDVV9WRVJTSU9OCi0gICAgY2FzZSBfU0NfWE9QRU5fWENVX1ZFUlNJT046IHJldHVybiBfWE9QRU5fWENVX1ZFUlNJT047Ci0jZW5kaWYKLSNpZmRlZiBfWE9QRU5fUkVBTFRJTUUKLSAgICBjYXNlIF9TQ19YT1BFTl9SRUFMVElNRTogICAgcmV0dXJuIF9YT1BFTl9SRUFMVElNRTsKLSNlbmRpZgotI2lmZGVmIF9YT1BFTl9SRUFMVElNRV9USFJFQURTCi0gICAgY2FzZSBfU0NfWE9QRU5fUkVBTFRJTUVfVEhSRUFEUzogcmV0dXJuIF9YT1BFTl9SRUFMVElNRV9USFJFQURTOwotI2VuZGlmCi0jaWZkZWYgX1hPUEVOX0xFR0FDWQotICAgIGNhc2UgX1NDX1hPUEVOX0xFR0FDWTogICAgICByZXR1cm4gX1hPUEVOX0xFR0FDWTsKLSNlbmRpZgotICAgIGNhc2UgX1NDX0FURVhJVF9NQVg6ICAgICAgICByZXR1cm4gU1lTVEVNX0FURVhJVF9NQVg7Ci0gICAgY2FzZSBfU0NfSU9WX01BWDogICAgICAgICAgIHJldHVybiBTWVNURU1fSU9WX01BWDsKLSAgICBjYXNlIF9TQ19QQUdFU0laRTogICAgICAgICAgcmV0dXJuIFBBR0VfU0laRTsKLSAgICBjYXNlIF9TQ19QQUdFX1NJWkU6ICAgICAgICAgcmV0dXJuIFBBR0VfU0laRTsKLSNpZmRlZiBfWE9QRU5fVU5JWAotICAgIGNhc2UgX1NDX1hPUEVOX1VOSVg6ICAgICAgICByZXR1cm4gX1hPUEVOX1VOSVg7Ci0jZW5kaWYKLQotICAgIC8vIFhYWDogVE9ETzogWEJTNSBub25zZW5zZQotCi0jaWZkZWYgQUlPX0xJU1RJT19NQVgKLSAgICBjYXNlIF9TQ19BSU9fTElTVElPX01BWDogICAgICAgcmV0dXJuIEFJT19MSVNUSU9fTUFYOwotI2VuZGlmCi0jaWZkZWYgQUlPX01BWAotICAgIGNhc2UgX1NDX0FJT19NQVg6ICAgICAgICAgICAgICByZXR1cm4gQUlPX01BWDsKLSNlbmRpZgotI2lmZGVmIEFJT19QUklPX0RFTFRBX01BWAotICAgIGNhc2UgX1NDX0FJT19QUklPX0RFTFRBX01BWDogICByZXR1cm4gQUlPX1BSSU9fREVMVEFfTUFYOwotI2VuZGlmCi0gICAgY2FzZSBfU0NfREVMQVlUSU1FUl9NQVg6ICAgIHJldHVybiBTWVNURU1fREVMQVlUSU1FUl9NQVg7Ci0gICAgY2FzZSBfU0NfTVFfT1BFTl9NQVg6ICAgICAgIHJldHVybiBTWVNURU1fTVFfT1BFTl9NQVg7Ci0gICAgY2FzZSBfU0NfTVFfUFJJT19NQVg6ICAgICAgIHJldHVybiBTWVNURU1fTVFfUFJJT19NQVg7Ci0gICAgY2FzZSBfU0NfUlRTSUdfTUFYOiAgICAgICAgIHJldHVybiBSVFNJR19NQVg7Ci0gICAgY2FzZSBfU0NfU0VNX05TRU1TX01BWDogICAgIHJldHVybiBTWVNURU1fU0VNX05TRU1TX01BWDsKLSAgICBjYXNlIF9TQ19TRU1fVkFMVUVfTUFYOiAgICAgcmV0dXJuIFNZU1RFTV9TRU1fVkFMVUVfTUFYOwotICAgIGNhc2UgX1NDX1NJR1FVRVVFX01BWDogICAgICByZXR1cm4gU1lTVEVNX1NJR1FVRVVFX01BWDsKLSAgICBjYXNlIF9TQ19USU1FUl9NQVg6ICAgICAgICAgcmV0dXJuIFNZU1RFTV9USU1FUl9NQVg7Ci0jaWZkZWYgX1BPU0lYX0FTWU5DSFJPTk9VU19JTwotICAgIGNhc2UgX1NDX0FTWU5DSFJPTk9VU19JTzogICByZXR1cm4gX1BPU0lYX0FTWU5DSFJPTk9VU19JTzsKLSNlbmRpZgotI2lmZGVmIF9QT1NJWF9GU1lOQwotICAgIGNhc2UgX1NDX0ZTWU5DOiAgICAgICAgICAgICByZXR1cm4gX1BPU0lYX0ZTWU5DOwotI2VuZGlmCi0jaWZkZWYgX1BPU0lYX01BUFBFRF9GSUxFUwotICAgIGNhc2UgX1NDX01BUFBFRF9GSUxFUzogICAgICByZXR1cm4gX1BPU0lYX01BUFBFRF9GSUxFUzsKLSNlbmRpZgotI2lmZGVmIF9QT1NJWF9NRU1MT0NLCi0gICAgY2FzZSBfU0NfTUVNTE9DSzogICAgICAgICAgIHJldHVybiBfUE9TSVhfTUVNTE9DSzsKLSNlbmRpZgotI2lmZGVmIF9QT1NJWF9NRU1MT0NLX1JBTkdFCi0gICAgY2FzZSBfU0NfTUVNTE9DS19SQU5HRTogICAgIHJldHVybiBfUE9TSVhfTUVNTE9DS19SQU5HRQotI2VuZGlmCi0jaWZkZWYgX1BPU0lYX01FTU9SWV9QUk9URUNUSU9OCi0gICAgY2FzZSBfU0NfTUVNT1JZX1BST1RFQ1RJT046IHJldHVybiBfUE9TSVhfTUVNT1JZX1BST1RFQ1RJT047Ci0jZW5kaWYKLSNpZmRlZiBfUE9TSVhfTUVTU0FHRV9QQVNTSU5HCi0gICAgY2FzZSBfU0NfTUVTU0FHRV9QQVNTSU5HOiAgIHJldHVybiBfUE9TSVhfTUVTU0FHRV9QQVNTSU5HOwotI2VuZGlmCi0jaWZkZWYgX1BPU0lYX1BSSU9SSVRJWkVEX0lPCi0gICAgY2FzZSBfU0NfUFJJT1JJVElaRURfSU86ICAgIHJldHVybiBfUE9TSVhfUFJJT1JJVElaRURfSU87Ci0jZW5kaWYKLSNpZmRlZiBfUE9TSVhfUFJJT1JJVFlfU0NIRURVTElORwotICAgIGNhc2UgX1NDX1BSSU9SSVRZX1NDSEVEVUxJTkc6ICByZXR1cm4gX1BPU0lYX1BSSU9SSVRZX1NDSEVEVUxJTkc7Ci0jZW5kaWYKLSNpZmRlZiBfUE9TSVhfUkVBTFRJTUVfU0lHTkFMUwotICAgIGNhc2UgX1NDX1JFQUxUSU1FX1NJR05BTFM6ICByZXR1cm4gX1BPU0lYX1JFQUxUSU1FX1NJR05BTFM7Ci0jZW5kaWYKLSNpZmRlZiBfUE9TSVhfU0VNQVBIT1JFUwotICAgIGNhc2UgX1NDX1NFTUFQSE9SRVM6ICAgICAgICByZXR1cm4gX1BPU0lYX1NFTUFQSE9SRVM7Ci0jZW5kaWYKLSNpZmRlZiBfUE9TSVhfU0hBUkVEX01FTU9SWV9PQkpFQ1RTCi0gICAgY2FzZSBfU0NfU0hBUkVEX01FTU9SWV9PQkpFQ1RTOiAgcmV0dXJuIF9QT1NJWF9TSEFSRURfTUVNT1JZX09CSkVDVFM7Ci0jZW5kaWYKLSNpZmRlZiBfUE9TSVhfU1lOQ0hST05JWkVEX0lPCi0gICAgY2FzZSBfU0NfU1lOQ0hST05JWkVEX0lPOiAgIHJldHVybiBfUE9TSVhfU1lOQ0hST05JWkVEX0lPOwotI2VuZGlmCi0jaWZkZWYgX1BPU0lYX1RJTUVSUwotICAgIGNhc2UgX1NDX1RJTUVSUzogICAgICAgICAgICByZXR1cm4gX1BPU0lYX1RJTUVSUzsKLSNlbmRpZgotCi0gICAgLy8gR0VUR1JfUl9TSVpFX01BWCA/Ci0gICAgLy8gR0VUUFdfUl9TSVpFX01BWCA/Ci0KLSAgICBjYXNlIF9TQ19MT0dJTl9OQU1FX01BWDogICAgcmV0dXJuIFNZU1RFTV9MT0dJTl9OQU1FX01BWDsKLSNpZmRlZiBfUE9TSVhfVEhSRUFEX0RFU1RSVUNUT1JfSVRFUkFUSU9OUwotICAgIGNhc2UgX1NDX1RIUkVBRF9ERVNUUlVDVE9SX0lURVJBVElPTlM6ICByZXR1cm4gX1BPU0lYX1RIUkVBRF9ERVNUUlVDVE9SX0lURVJBVElPTlM7Ci0jZW5kaWYKLSAgICBjYXNlIF9TQ19USFJFQURfS0VZU19NQVg6ICAgICByZXR1cm4gU1lTVEVNX1RIUkVBRF9LRVlTX01BWDsKLSAgICBjYXNlIF9TQ19USFJFQURfU1RBQ0tfTUlOOiAgICByZXR1cm4gU1lTVEVNX1RIUkVBRF9TVEFDS19NSU47Ci0gICAgY2FzZSBfU0NfVEhSRUFEX1RIUkVBRFNfTUFYOiAgcmV0dXJuIFNZU1RFTV9USFJFQURfVEhSRUFEU19NQVg7Ci0gICAgY2FzZSBfU0NfVFRZX05BTUVfTUFYOiAgICAgICAgcmV0dXJuIFNZU1RFTV9UVFlfTkFNRV9NQVg7Ci0jaWZkZWYgX1BPU0lYX1RIUkVBRFMKLSAgICBjYXNlIF9TQ19USFJFQURTOiAgICAgICAgICAgICByZXR1cm4gX1BPU0lYX1RIUkVBRFM7Ci0jZW5kaWYKLSNpZmRlZiBfUE9TSVhfVEhSRUFEX0FUVFJfU1RBQ0tBRERSCi0gICAgY2FzZSBfU0NfVEhSRUFEX0FUVFJfU1RBQ0tBRERSOiAgIHJldHVybiBfUE9TSVhfVEhSRUFEX0FUVFJfU1RBQ0tBRERSOwotI2VuZGlmCi0jaWZkZWYgX1BPU0lYX1RIUkVBRF9BVFRSX1NUQUNLU0laRQotICAgIGNhc2UgX1NDX1RIUkVBRF9BVFRSX1NUQUNLU0laRTogICByZXR1cm4gX1BPU0lYX1RIUkVBRF9BVFRSX1NUQUNLU0laRTsKLSNlbmRpZgotI2lmZGVmIF9QT1NJWF9USFJFQURfUFJJT1JJVFlfU0NIRURVTElORwotICAgIGNhc2UgX1NDX1RIUkVBRF9QUklPUklUWV9TQ0hFRFVMSU5HOiAgcmV0dXJuIF9QT1NJWF9USFJFQURfUFJJT1JJVFlfU0NIRURVTElORzsKLSNlbmRpZgotI2lmZGVmIF9QT1NJWF9USFJFQURfUFJJT19JTkhFUklUCi0gICAgY2FzZSBfU0NfVEhSRUFEX1BSSU9fSU5IRVJJVDogICAgICAgICByZXR1cm4gX1BPU0lYX1RIUkVBRF9QUklPX0lOSEVSSVQ7Ci0jZW5kaWYKLSNpZmRlZiBfUE9TSVhfVEhSRUFEX1BSSU9fUFJPVEVDVAotICAgIGNhc2UgX1NDX1RIUkVBRF9QUklPX1BST1RFQ1Q6IHJldHVybiBfUE9TSVhfVEhSRUFEX1BSSU9fUFJPVEVDVDsKLSNlbmRpZgotI2lmZGVmIF9QT1NJWF9USFJFQURfU0FGRV9GVU5DVElPTlMKLSAgICBjYXNlIF9TQ19USFJFQURfU0FGRV9GVU5DVElPTlM6ICByZXR1cm4gX1BPU0lYX1RIUkVBRF9TQUZFX0ZVTkNUSU9OUwotI2VuZGlmCi0KLQotICAgIGNhc2UgX1NDX05QUk9DRVNTT1JTX0NPTkY6ICByZXR1cm4gX19nZXRfbnByb2NfY29uZigpOwotICAgIGNhc2UgX1NDX05QUk9DRVNTT1JTX09OTE46ICByZXR1cm4gX19nZXRfbnByb2Nfb25sbigpOwotICAgIGNhc2UgX1NDX1BIWVNfUEFHRVM6ICAgICAgICByZXR1cm4gX19nZXRfcGh5c19wYWdlcygpOwotICAgIGNhc2UgX1NDX0FWUEhZU19QQUdFUzogICAgICByZXR1cm4gX19nZXRfYXZwaHlzX3BhZ2VzKCk7Ci0KLSAgICBkZWZhdWx0OgotICAgICAgIC8qIFBvc2l4IHNheXMgRUlOVkFMIGlzIHRoZSBvbmx5IGVycm9yIHRoYXQgc2hhbGwgYmUgcmV0dXJuZWQsCi0gICAgICAgICogYnV0IEdMaWJjIHVzZXMgRU5PU1lTICovCi0gICAgICAgIGVycm5vID0gRU5PU1lTOwotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotfQotCi0KLXR5cGVkZWYgc3RydWN0IHsKLSAgICBpbnQgICBycG9zOwotICAgIGludCAgIGxlbjsKLSAgICBpbnQgICBvdmVyZmxvdzsKLSAgICBpbnQgICBmZDsKLSAgICBpbnQgICBpbl9sZW47Ci0gICAgaW50ICAgaW5fcG9zOwotICAgIGNoYXIgIGJ1ZmZbMTI4XTsKLSAgICBjaGFyICBpbnB1dFsxMjhdOwotfSBMaW5lUGFyc2VyOwotCi1zdGF0aWMgaW50Ci1saW5lX3BhcnNlcl9pbml0KCBMaW5lUGFyc2VyKiAgcCwgY29uc3QgY2hhciogIHBhdGggKQotewotICAgIHAtPnJwb3MgICAgID0gMDsKLSAgICBwLT5sZW4gICAgICA9IChpbnQpc2l6ZW9mKHAtPmJ1ZmYpOwotICAgIHAtPm92ZXJmbG93ID0gMDsKLQotICAgIHAtPmluX2xlbiAgID0gMDsKLSAgICBwLT5pbl9wb3MgICA9IDA7Ci0gICAgcC0+ZmQgICAgICAgPSBvcGVuKCBwYXRoLCBPX1JET05MWSApOwotCi0gICAgcmV0dXJuIHAtPmZkOwotfQotCi0KLXN0YXRpYyBpbnQKLWxpbmVfcGFyc2VyX2FkZGMoIExpbmVQYXJzZXIqICBwLCBpbnQgIGMgKQotewotICAgIGlmIChwLT5vdmVyZmxvdykgewotICAgICAgICBwLT5vdmVyZmxvdyA9IChjID09ICdcbicpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgaWYgKHAtPnJwb3MgPj0gcC0+bGVuKSB7Ci0gICAgICAgIHAtPm92ZXJmbG93ID0gMTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIGlmIChjID09ICdcbicpIHsKLSAgICAgICAgcC0+YnVmZltwLT5ycG9zXSA9IDA7Ci0gICAgICAgIHAtPnJwb3MgPSAwOwotICAgICAgICByZXR1cm4gMTsKLSAgICB9Ci0gICAgcC0+YnVmZltwLT5ycG9zKytdID0gKGNoYXIpIGM7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQKLWxpbmVfcGFyc2VyX2dldGMoIExpbmVQYXJzZXIqICBwICkKLXsKLSAgICBpZiAocC0+aW5fcG9zID49IHAtPmluX2xlbikgewotICAgICAgICBpbnQgIHJldDsKLQotICAgICAgICBwLT5pbl9sZW4gPSBwLT5pbl9wb3MgPSAwOwotICAgICAgICBkbyB7Ci0gICAgICAgICAgICByZXQgPSByZWFkKHAtPmZkLCBwLT5pbnB1dCwgc2l6ZW9mKHAtPmlucHV0KSk7Ci0gICAgICAgIH0gd2hpbGUgKHJldCA8IDAgJiYgZXJybm8gPT0gRUlOVFIpOwotCi0gICAgICAgIGlmIChyZXQgPD0gMCkKLSAgICAgICAgICAgIHJldHVybiAtMTsKLQotICAgICAgICBwLT5pbl9sZW4gPSByZXQ7Ci0gICAgfQotICAgIHJldHVybiBwLT5pbnB1dFsgcC0+aW5fcG9zKysgXTsKLX0KLQotc3RhdGljIGNvbnN0IGNoYXIqCi1saW5lX3BhcnNlcl9nZXRzKCBMaW5lUGFyc2VyKiAgcCApCi17Ci0gICAgZm9yICg7OykgewotICAgICAgICBmb3IgKDs7KSB7Ci0gICAgICAgICAgICBpbnQgIGMgPSBsaW5lX3BhcnNlcl9nZXRjKHApOwotCi0gICAgICAgICAgICBpZiAoYyA8IDApIHsKLSAgICAgICAgICAgICAgICBjbG9zZShwLT5mZCk7Ci0gICAgICAgICAgICAgICAgcC0+ZmQgPSAtMTsKLSAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgaWYgKGxpbmVfcGFyc2VyX2FkZGMocCwgYykpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHAtPmJ1ZmY7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1saW5lX3BhcnNlcl9kb25lKCBMaW5lUGFyc2VyKiBwICkKLXsKLSAgICBpZiAocC0+ZmQgPj0gMCkgewotICAgICAgICBjbG9zZShwLT5mZCk7Ci0gICAgICAgIHAtPmZkID0gLTE7Ci0gICAgfQotfQotCi1zdGF0aWMgaW50Ci1fX2dldF9ucHJvY19jb25mKHZvaWQpCi17Ci0gICAgTGluZVBhcnNlciAgIHBhcnNlclsxXTsKLSAgICBjb25zdCBjaGFyKiAgcDsKLSAgICBpbnQgICAgICAgICAgY291bnQgPSAwOwotCi0gICAgaWYgKGxpbmVfcGFyc2VyX2luaXQocGFyc2VyLCAiL3Byb2MvY3B1aW5mbyIpIDwgMCkKLSAgICAgICAgcmV0dXJuIDE7Ci0KLSAgICB3aGlsZSAoKHAgPSBsaW5lX3BhcnNlcl9nZXRzKHBhcnNlcikpKSB7Ci0gICAgICAgIGlmICggIW1lbWNtcChwLCAicHJvY2Vzc29yIiwgOSkgKQotICAgICAgICAgICAgY291bnQgKz0gMTsKLSAgICB9Ci0gICAgcmV0dXJuIChjb3VudCA8IDEpID8gMSA6IGNvdW50OwotfQotCi0KLXN0YXRpYyBpbnQKLV9fZ2V0X25wcm9jX29ubG4odm9pZCkKLXsKLSAgICBMaW5lUGFyc2VyICAgcGFyc2VyWzFdOwotICAgIGNvbnN0IGNoYXIqICBwOwotICAgIGludCAgICAgICAgICBjb3VudCA9IDA7Ci0KLSAgICBpZiAobGluZV9wYXJzZXJfaW5pdChwYXJzZXIsICIvcHJvYy9zdGF0IikgPCAwKQotICAgICAgICByZXR1cm4gMTsKLQotICAgIHdoaWxlICgocCA9IGxpbmVfcGFyc2VyX2dldHMocGFyc2VyKSkpIHsKLSAgICAgICAgaWYgKCAhbWVtY21wKHAsICJjcHUiLCAzKSAmJiBpc2RpZ2l0KHBbM10pICkKLSAgICAgICAgICAgIGNvdW50ICs9IDE7Ci0gICAgfQotICAgIHJldHVybiAoY291bnQgPCAxKSA/IDEgOiBjb3VudDsKLX0KLQotc3RhdGljIGludAotX19nZXRfcGh5c19wYWdlcyh2b2lkKQotewotICAgIExpbmVQYXJzZXIgICBwYXJzZXJbMV07Ci0gICAgY29uc3QgY2hhciogIHA7Ci0KLSAgICBpZiAobGluZV9wYXJzZXJfaW5pdChwYXJzZXIsICIvcHJvYy9tZW1pbmZvIikgPCAwKQotICAgICAgICByZXR1cm4gLTI7ICAvKiB3aGF0ID8gKi8KLQotICAgIHdoaWxlICgocCA9IGxpbmVfcGFyc2VyX2dldHMocGFyc2VyKSkpIHsKLSAgICAgICAgbG9uZyAgdG90YWw7Ci0gICAgICAgIGlmICggc3NjYW5mKHAsICJNZW1Ub3RhbDogJWxkIGtCIiwgJnRvdGFsKSA9PSAxICkgewotICAgICAgICAgICAgbGluZV9wYXJzZXJfZG9uZShwYXJzZXIpOwotICAgICAgICAgICAgcmV0dXJuIChpbnQpICh0b3RhbCAvIChQQUdFX1NJWkUvMTAyNCkpOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiAtMzsKLX0KLQotc3RhdGljIGludAotX19nZXRfYXZwaHlzX3BhZ2VzKHZvaWQpCi17Ci0gICAgTGluZVBhcnNlciAgIHBhcnNlclsxXTsKLSAgICBjb25zdCBjaGFyKiAgcDsKLQotICAgIGlmIChsaW5lX3BhcnNlcl9pbml0KHBhcnNlciwgIi9wcm9jL21lbWluZm8iKSA8IDApCi0gICAgICAgIHJldHVybiAtMTsgIC8qIHdoYXQgPyAqLwotCi0gICAgd2hpbGUgKChwID0gbGluZV9wYXJzZXJfZ2V0cyhwYXJzZXIpKSkgewotICAgICAgICBsb25nICB0b3RhbDsKLSAgICAgICAgaWYgKCBzc2NhbmYocCwgIk1lbUZyZWU6ICVsZCBrQiIsICZ0b3RhbCkgPT0gMSApIHsKLSAgICAgICAgICAgIGxpbmVfcGFyc2VyX2RvbmUocGFyc2VyKTsKLSAgICAgICAgICAgIHJldHVybiAoaW50KSAodG90YWwgLyAoUEFHRV9TSVpFLzEwMjQpKTsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gLTE7Ci19CmRpZmYgLS1naXQgYS9saWJjL3VuaXN0ZC9zeXNsb2cuYyBiL2xpYmMvdW5pc3RkL3N5c2xvZy5jCmluZGV4IDM1NzFkNTkuLjc4Nzg0NzUgMTAwNjQ0Ci0tLSBhL2xpYmMvdW5pc3RkL3N5c2xvZy5jCisrKyBiL2xpYmMvdW5pc3RkL3N5c2xvZy5jCkBAIC00Niw3ICs0Niw3IEBACiAKIHN0YXRpYyBzdHJ1Y3Qgc3lzbG9nX2RhdGEgc2RhdGEgPSBTWVNMT0dfREFUQV9JTklUOwogCi1leHRlcm4gY2hhcgkqX19wcm9nbmFtZTsJCS8qIFByb2dyYW0gbmFtZSwgZnJvbSBjcnQwLiAqLworZXh0ZXJuIGNvbnN0IGNoYXIJKl9fcHJvZ25hbWU7CQkvKiBQcm9ncmFtIG5hbWUsIGZyb20gY3J0MC4gKi8KIAogc3RhdGljIHZvaWQJZGlzY29ubmVjdGxvZ19yKHN0cnVjdCBzeXNsb2dfZGF0YSAqKTsJLyogZGlzY29ubmVjdCBmcm9tIHN5c2xvZ2QgKi8KIHN0YXRpYyB2b2lkCWNvbm5lY3Rsb2dfcihzdHJ1Y3Qgc3lzbG9nX2RhdGEgKik7CS8qIChyZSljb25uZWN0IHRvIHN5c2xvZ2QgKi8KZGlmZiAtLWdpdCBhL2xpYmMvdW5pc3RkL3dhaXQuYyBiL2xpYmMvdW5pc3RkL3dhaXQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjFkYjA4Ni4uMDAwMDAwMAotLS0gYS9saWJjL3VuaXN0ZC93YWl0LmMKKysrIC9kZXYvbnVsbApAQCAtMSw1MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogICAgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUwotICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKLSAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCi0gKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKLSAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAotICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0gKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0jaW5jbHVkZSA8c3lzL3dhaXQuaD4KLSNpbmNsdWRlIDxzdGRkZWYuaD4KLQotZXh0ZXJuIHBpZF90ICBfX3dhaXQ0IChwaWRfdCBwaWQsIGludCAqc3RhdHVzLCBpbnQgb3B0aW9ucywgc3RydWN0IHJ1c2FnZSAqcnVzYWdlKTsKLWV4dGVybiBpbnQgICAgX193YWl0aWQoaWR0eXBlX3Qgd2hpY2gsIGlkX3QgaWQsIHNpZ2luZm9fdCAqaW5mbywgaW50IG9wdGlvbnMsIHN0cnVjdCBydXNhZ2UgKnJ1KTsKLQotcGlkX3QgIHdhaXQoIGludCogIHN0YXR1cyApCi17Ci0gICAgcmV0dXJuIF9fd2FpdDQoIChwaWRfdCktMSwgc3RhdHVzLCAwLCBOVUxMICk7Ci19Ci0KLXBpZF90ICB3YWl0MyhpbnQqICBzdGF0dXMsIGludCBvcHRpb25zLCBzdHJ1Y3QgcnVzYWdlKiAgcnVzYWdlKQotewotICAgIHJldHVybiBfX3dhaXQ0KCAocGlkX3QpLTEsIHN0YXR1cywgb3B0aW9ucywgcnVzYWdlICk7Ci19Ci0KLXBpZF90ICB3YWl0cGlkKHBpZF90ICBwaWQsIGludCogIHN0YXR1cywgaW50ICBvcHRpb25zKQotewotICAgIHJldHVybiBfX3dhaXQ0KCBwaWQsIHN0YXR1cywgb3B0aW9ucywgTlVMTCApOwotfQotCi1pbnQgIHdhaXRpZChpZHR5cGVfdCB3aGljaCwgaWRfdCBpZCwgc2lnaW5mb190ICppbmZvLCBpbnQgb3B0aW9ucykKLXsKLSAgICAvKiB0aGUgc3lzdGVtIGNhbGwgdGFrZXMgYW4gb3B0aW9uIHN0cnVjdCBydXNhZ2UgdGhhdCB3ZSBkb24ndCBuZWVkICovCi0gICAgcmV0dXJuIF9fd2FpdGlkKHdoaWNoLCBpZCwgaW5mbywgb3B0aW9ucywgTlVMTCk7Ci19CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLWRsbWFsbG9jL1JFQURNRS50eHQgYi9saWJjL3Vwc3RyZWFtLWRsbWFsbG9jL1JFQURNRS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDg1NzA0YgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tZGxtYWxsb2MvUkVBRE1FLnR4dApAQCAtMCwwICsxLDEwIEBACitUaGlzIGRpcmVjdG9yeSBjb250YWlucyBtYWxsb2MvZnJlZSByb3V0aW5lcyBpbXBsZW1lbnRlZCBieSBEb3VnIExlYQorKGFrYSBkbG1hbGxvYykuIFlvdSBzaG91bGQgbm90IGVkaXQgdGhlc2UgZmlsZXMgZGlyZWN0bHkuIE1ha2UgZml4ZXMKK3Vwc3RyZWFtIGFuZCB0aGVuIHB1bGwgZG93biB0aGUgbmV3IHZlcnNpb24gb2YgdGhlIGZpbGUuCisKK1RoaXMgY29kZSBpcyBpbXBvcnRlZCBmcm9tOiBmdHA6Ly9nLm9zd2Vnby5lZHUvcHViL21pc2MvCitJdCBpcyBjdXJyZW50bHkgdmVyc2lvbiAyLjguNi4KKworQ3VycmVudGx5IHRoZXJlIGFyZSB2ZXJ5IG1pbm9yIG1vZGlmaWNhdGlvbnMgdGhhdCBhcmUgc2lnbmlmaWVkIHdpdGg6CitCRUdJTiBhbmRyb2lkLWNoYW5nZWQ6IGNoYW5nZSBkZXNjcmlwdGlvbgorRU5EIGFuZHJvaWQtY2hhbmdlZApkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1kbG1hbGxvYy9tYWxsb2MuYyBiL2xpYmMvdXBzdHJlYW0tZGxtYWxsb2MvbWFsbG9jLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2VmOWI2MQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tZGxtYWxsb2MvbWFsbG9jLmMKQEAgLTAsMCArMSw2MzA5IEBACisvKgorICBUaGlzIGlzIGEgdmVyc2lvbiAoYWthIGRsbWFsbG9jKSBvZiBtYWxsb2MvZnJlZS9yZWFsbG9jIHdyaXR0ZW4gYnkKKyAgRG91ZyBMZWEgYW5kIHJlbGVhc2VkIHRvIHRoZSBwdWJsaWMgZG9tYWluLCBhcyBleHBsYWluZWQgYXQKKyAgaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvcHVibGljZG9tYWluL3plcm8vMS4wLyBTZW5kIHF1ZXN0aW9ucywKKyAgY29tbWVudHMsIGNvbXBsYWludHMsIHBlcmZvcm1hbmNlIGRhdGEsIGV0YyB0byBkbEBjcy5vc3dlZ28uZWR1CisKKyogVmVyc2lvbiAyLjguNiBXZWQgQXVnIDI5IDA2OjU3OjU4IDIwMTIgIERvdWcgTGVhCisgICBOb3RlOiBUaGVyZSBtYXkgYmUgYW4gdXBkYXRlZCB2ZXJzaW9uIG9mIHRoaXMgbWFsbG9jIG9idGFpbmFibGUgYXQKKyAgICAgICAgICAgZnRwOi8vZ2VlLmNzLm9zd2Vnby5lZHUvcHViL21pc2MvbWFsbG9jLmMKKyAgICAgICAgIENoZWNrIGJlZm9yZSBpbnN0YWxsaW5nIQorCisqIFF1aWNrc3RhcnQKKworICBUaGlzIGxpYnJhcnkgaXMgYWxsIGluIG9uZSBmaWxlIHRvIHNpbXBsaWZ5IHRoZSBtb3N0IGNvbW1vbiB1c2FnZToKKyAgZnRwIGl0LCBjb21waWxlIGl0ICgtTzMpLCBhbmQgbGluayBpdCBpbnRvIGFub3RoZXIgcHJvZ3JhbS4gQWxsIG9mCisgIHRoZSBjb21waWxlLXRpbWUgb3B0aW9ucyBkZWZhdWx0IHRvIHJlYXNvbmFibGUgdmFsdWVzIGZvciB1c2Ugb24KKyAgbW9zdCBwbGF0Zm9ybXMuICBZb3UgbWlnaHQgbGF0ZXIgd2FudCB0byBzdGVwIHRocm91Z2ggdmFyaW91cworICBjb21waWxlLXRpbWUgYW5kIGR5bmFtaWMgdHVuaW5nIG9wdGlvbnMuCisKKyAgRm9yIGNvbnZlbmllbmNlLCBhbiBpbmNsdWRlIGZpbGUgZm9yIGNvZGUgdXNpbmcgdGhpcyBtYWxsb2MgaXMgYXQ6CisgICAgIGZ0cDovL2dlZS5jcy5vc3dlZ28uZWR1L3B1Yi9taXNjL21hbGxvYy0yLjguNi5oCisgIFlvdSBkb24ndCByZWFsbHkgbmVlZCB0aGlzIC5oIGZpbGUgdW5sZXNzIHlvdSBjYWxsIGZ1bmN0aW9ucyBub3QKKyAgZGVmaW5lZCBpbiB5b3VyIHN5c3RlbSBpbmNsdWRlIGZpbGVzLiAgVGhlIC5oIGZpbGUgY29udGFpbnMgb25seSB0aGUKKyAgZXhjZXJwdHMgZnJvbSB0aGlzIGZpbGUgbmVlZGVkIGZvciB1c2luZyB0aGlzIG1hbGxvYyBvbiBBTlNJIEMvQysrCisgIHN5c3RlbXMsIHNvIGxvbmcgYXMgeW91IGhhdmVuJ3QgY2hhbmdlZCBjb21waWxlLXRpbWUgb3B0aW9ucyBhYm91dAorICBuYW1pbmcgYW5kIHR1bmluZyBwYXJhbWV0ZXJzLiAgSWYgeW91IGRvLCB0aGVuIHlvdSBjYW4gY3JlYXRlIHlvdXIKKyAgb3duIG1hbGxvYy5oIHRoYXQgZG9lcyBpbmNsdWRlIGFsbCBzZXR0aW5ncyBieSBjdXR0aW5nIGF0IHRoZSBwb2ludAorICBpbmRpY2F0ZWQgYmVsb3cuIE5vdGUgdGhhdCB5b3UgbWF5IGFscmVhZHkgYnkgZGVmYXVsdCBiZSB1c2luZyBhIEMKKyAgbGlicmFyeSBjb250YWluaW5nIGEgbWFsbG9jIHRoYXQgaXMgYmFzZWQgb24gc29tZSB2ZXJzaW9uIG9mIHRoaXMKKyAgbWFsbG9jIChmb3IgZXhhbXBsZSBpbiBsaW51eCkuIFlvdSBtaWdodCBzdGlsbCB3YW50IHRvIHVzZSB0aGUgb25lCisgIGluIHRoaXMgZmlsZSB0byBjdXN0b21pemUgc2V0dGluZ3Mgb3IgdG8gYXZvaWQgb3ZlcmhlYWRzIGFzc29jaWF0ZWQKKyAgd2l0aCBsaWJyYXJ5IHZlcnNpb25zLgorCisqIFZpdGFsIHN0YXRpc3RpY3M6CisKKyAgU3VwcG9ydGVkIHBvaW50ZXIvc2l6ZV90IHJlcHJlc2VudGF0aW9uOiAgICAgICA0IG9yIDggYnl0ZXMKKyAgICAgICBzaXplX3QgTVVTVCBiZSBhbiB1bnNpZ25lZCB0eXBlIG9mIHRoZSBzYW1lIHdpZHRoIGFzCisgICAgICAgcG9pbnRlcnMuIChJZiB5b3UgYXJlIHVzaW5nIGFuIGFuY2llbnQgc3lzdGVtIHRoYXQgZGVjbGFyZXMKKyAgICAgICBzaXplX3QgYXMgYSBzaWduZWQgdHlwZSwgb3IgbmVlZCBpdCB0byBiZSBhIGRpZmZlcmVudCB3aWR0aAorICAgICAgIHRoYW4gcG9pbnRlcnMsIHlvdSBjYW4gdXNlIGEgcHJldmlvdXMgcmVsZWFzZSBvZiB0aGlzIG1hbGxvYworICAgICAgIChlLmcuIDIuNy4yKSBzdXBwb3J0aW5nIHRoZXNlLikKKworICBBbGlnbm1lbnQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDggYnl0ZXMgKG1pbmltdW0pCisgICAgICAgVGhpcyBzdWZmaWNlcyBmb3IgbmVhcmx5IGFsbCBjdXJyZW50IG1hY2hpbmVzIGFuZCBDIGNvbXBpbGVycy4KKyAgICAgICBIb3dldmVyLCB5b3UgY2FuIGRlZmluZSBNQUxMT0NfQUxJR05NRU5UIHRvIGJlIHdpZGVyIHRoYW4gdGhpcworICAgICAgIGlmIG5lY2Vzc2FyeSAodXAgdG8gMTI4Ynl0ZXMpLCBhdCB0aGUgZXhwZW5zZSBvZiB1c2luZyBtb3JlIHNwYWNlLgorCisgIE1pbmltdW0gb3ZlcmhlYWQgcGVyIGFsbG9jYXRlZCBjaHVuazogICA0IG9yICA4IGJ5dGVzIChpZiA0Ynl0ZSBzaXplcykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDggb3IgMTYgYnl0ZXMgKGlmIDhieXRlIHNpemVzKQorICAgICAgIEVhY2ggbWFsbG9jZWQgY2h1bmsgaGFzIGEgaGlkZGVuIHdvcmQgb2Ygb3ZlcmhlYWQgaG9sZGluZyBzaXplCisgICAgICAgYW5kIHN0YXR1cyBpbmZvcm1hdGlvbiwgYW5kIGFkZGl0aW9uYWwgY3Jvc3MtY2hlY2sgd29yZAorICAgICAgIGlmIEZPT1RFUlMgaXMgZGVmaW5lZC4KKworICBNaW5pbXVtIGFsbG9jYXRlZCBzaXplOiA0LWJ5dGUgcHRyczogIDE2IGJ5dGVzICAgIChpbmNsdWRpbmcgb3ZlcmhlYWQpCisgICAgICAgICAgICAgICAgICAgICAgICAgIDgtYnl0ZSBwdHJzOiAgMzIgYnl0ZXMgICAgKGluY2x1ZGluZyBvdmVyaGVhZCkKKworICAgICAgIEV2ZW4gYSByZXF1ZXN0IGZvciB6ZXJvIGJ5dGVzIChpLmUuLCBtYWxsb2MoMCkpIHJldHVybnMgYQorICAgICAgIHBvaW50ZXIgdG8gc29tZXRoaW5nIG9mIHRoZSBtaW5pbXVtIGFsbG9jYXRhYmxlIHNpemUuCisgICAgICAgVGhlIG1heGltdW0gb3ZlcmhlYWQgd2FzdGFnZSAoaS5lLiwgbnVtYmVyIG9mIGV4dHJhIGJ5dGVzCisgICAgICAgYWxsb2NhdGVkIHRoYW4gd2VyZSByZXF1ZXN0ZWQgaW4gbWFsbG9jKSBpcyBsZXNzIHRoYW4gb3IgZXF1YWwKKyAgICAgICB0byB0aGUgbWluaW11bSBzaXplLCBleGNlcHQgZm9yIHJlcXVlc3RzID49IG1tYXBfdGhyZXNob2xkIHRoYXQKKyAgICAgICBhcmUgc2VydmljZWQgdmlhIG1tYXAoKSwgd2hlcmUgdGhlIHdvcnN0IGNhc2Ugd2FzdGFnZSBpcyBhYm91dAorICAgICAgIDMyIGJ5dGVzIHBsdXMgdGhlIHJlbWFpbmRlciBmcm9tIGEgc3lzdGVtIHBhZ2UgKHRoZSBtaW5pbWFsCisgICAgICAgbW1hcCB1bml0KTsgdHlwaWNhbGx5IDQwOTYgb3IgODE5MiBieXRlcy4KKworICBTZWN1cml0eTogc3RhdGljLXNhZmU7IG9wdGlvbmFsbHkgbW9yZSBvciBsZXNzCisgICAgICAgVGhlICJzZWN1cml0eSIgb2YgbWFsbG9jIHJlZmVycyB0byB0aGUgYWJpbGl0eSBvZiBtYWxpY2lvdXMKKyAgICAgICBjb2RlIHRvIGFjY2VudHVhdGUgdGhlIGVmZmVjdHMgb2YgZXJyb3JzIChmb3IgZXhhbXBsZSwgZnJlZWluZworICAgICAgIHNwYWNlIHRoYXQgaXMgbm90IGN1cnJlbnRseSBtYWxsb2MnZWQgb3Igb3ZlcndyaXRpbmcgcGFzdCB0aGUKKyAgICAgICBlbmRzIG9mIGNodW5rcykgaW4gY29kZSB0aGF0IGNhbGxzIG1hbGxvYy4gIFRoaXMgbWFsbG9jCisgICAgICAgZ3VhcmFudGVlcyBub3QgdG8gbW9kaWZ5IGFueSBtZW1vcnkgbG9jYXRpb25zIGJlbG93IHRoZSBiYXNlIG9mCisgICAgICAgaGVhcCwgaS5lLiwgc3RhdGljIHZhcmlhYmxlcywgZXZlbiBpbiB0aGUgcHJlc2VuY2Ugb2YgdXNhZ2UKKyAgICAgICBlcnJvcnMuICBUaGUgcm91dGluZXMgYWRkaXRpb25hbGx5IGRldGVjdCBtb3N0IGltcHJvcGVyIGZyZWVzCisgICAgICAgYW5kIHJlYWxsb2NzLiAgQWxsIHRoaXMgaG9sZHMgYXMgbG9uZyBhcyB0aGUgc3RhdGljIGJvb2trZWVwaW5nCisgICAgICAgZm9yIG1hbGxvYyBpdHNlbGYgaXMgbm90IGNvcnJ1cHRlZCBieSBzb21lIG90aGVyIG1lYW5zLiAgVGhpcworICAgICAgIGlzIG9ubHkgb25lIGFzcGVjdCBvZiBzZWN1cml0eSAtLSB0aGVzZSBjaGVja3MgZG8gbm90LCBhbmQKKyAgICAgICBjYW5ub3QsIGRldGVjdCBhbGwgcG9zc2libGUgcHJvZ3JhbW1pbmcgZXJyb3JzLgorCisgICAgICAgSWYgRk9PVEVSUyBpcyBkZWZpbmVkIG5vbnplcm8sIHRoZW4gZWFjaCBhbGxvY2F0ZWQgY2h1bmsKKyAgICAgICBjYXJyaWVzIGFuIGFkZGl0aW9uYWwgY2hlY2sgd29yZCB0byB2ZXJpZnkgdGhhdCBpdCB3YXMgbWFsbG9jZWQKKyAgICAgICBmcm9tIGl0cyBzcGFjZS4gIFRoZXNlIGNoZWNrIHdvcmRzIGFyZSB0aGUgc2FtZSB3aXRoaW4gZWFjaAorICAgICAgIGV4ZWN1dGlvbiBvZiBhIHByb2dyYW0gdXNpbmcgbWFsbG9jLCBidXQgZGlmZmVyIGFjcm9zcworICAgICAgIGV4ZWN1dGlvbnMsIHNvIGV4dGVybmFsbHkgY3JhZnRlZCBmYWtlIGNodW5rcyBjYW5ub3QgYmUKKyAgICAgICBmcmVlZC4gVGhpcyBpbXByb3ZlcyBzZWN1cml0eSBieSByZWplY3RpbmcgZnJlZXMvcmVhbGxvY3MgdGhhdAorICAgICAgIGNvdWxkIGNvcnJ1cHQgaGVhcCBtZW1vcnksIGluIGFkZGl0aW9uIHRvIHRoZSBjaGVja3MgcHJldmVudGluZworICAgICAgIHdyaXRlcyB0byBzdGF0aWNzIHRoYXQgYXJlIGFsd2F5cyBvbi4gIFRoaXMgbWF5IGZ1cnRoZXIgaW1wcm92ZQorICAgICAgIHNlY3VyaXR5IGF0IHRoZSBleHBlbnNlIG9mIHRpbWUgYW5kIHNwYWNlIG92ZXJoZWFkLiAgKE5vdGUgdGhhdAorICAgICAgIEZPT1RFUlMgbWF5IGFsc28gYmUgd29ydGggdXNpbmcgd2l0aCBNU1BBQ0VTLikKKworICAgICAgIEJ5IGRlZmF1bHQgZGV0ZWN0ZWQgZXJyb3JzIGNhdXNlIHRoZSBwcm9ncmFtIHRvIGFib3J0IChjYWxsaW5nCisgICAgICAgImFib3J0KCkiKS4gWW91IGNhbiBvdmVycmlkZSB0aGlzIHRvIGluc3RlYWQgcHJvY2VlZCBwYXN0CisgICAgICAgZXJyb3JzIGJ5IGRlZmluaW5nIFBST0NFRURfT05fRVJST1IuICBJbiB0aGlzIGNhc2UsIGEgYmFkIGZyZWUKKyAgICAgICBoYXMgbm8gZWZmZWN0LCBhbmQgYSBtYWxsb2MgdGhhdCBlbmNvdW50ZXJzIGEgYmFkIGFkZHJlc3MKKyAgICAgICBjYXVzZWQgYnkgdXNlciBvdmVyd3JpdGVzIHdpbGwgaWdub3JlIHRoZSBiYWQgYWRkcmVzcyBieQorICAgICAgIGRyb3BwaW5nIHBvaW50ZXJzIGFuZCBpbmRpY2VzIHRvIGFsbCBrbm93biBtZW1vcnkuIFRoaXMgbWF5CisgICAgICAgYmUgYXBwcm9wcmlhdGUgZm9yIHByb2dyYW1zIHRoYXQgc2hvdWxkIGNvbnRpbnVlIGlmIGF0IGFsbAorICAgICAgIHBvc3NpYmxlIGluIHRoZSBmYWNlIG9mIHByb2dyYW1taW5nIGVycm9ycywgYWx0aG91Z2ggdGhleSBtYXkKKyAgICAgICBydW4gb3V0IG9mIG1lbW9yeSBiZWNhdXNlIGRyb3BwZWQgbWVtb3J5IGlzIG5ldmVyIHJlY2xhaW1lZC4KKworICAgICAgIElmIHlvdSBkb24ndCBsaWtlIGVpdGhlciBvZiB0aGVzZSBvcHRpb25zLCB5b3UgY2FuIGRlZmluZQorICAgICAgIENPUlJVUFRJT05fRVJST1JfQUNUSU9OIGFuZCBVU0FHRV9FUlJPUl9BQ1RJT04gdG8gZG8gYW55dGhpbmcKKyAgICAgICBlbHNlLiBBbmQgaWYgaWYgeW91IGFyZSBzdXJlIHRoYXQgeW91ciBwcm9ncmFtIHVzaW5nIG1hbGxvYyBoYXMKKyAgICAgICBubyBlcnJvcnMgb3IgdnVsbmVyYWJpbGl0aWVzLCB5b3UgY2FuIGRlZmluZSBJTlNFQ1VSRSB0byAxLAorICAgICAgIHdoaWNoIG1pZ2h0IChvciBtaWdodCBub3QpIHByb3ZpZGUgYSBzbWFsbCBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudC4KKworICAgICAgIEl0IGlzIGFsc28gcG9zc2libGUgdG8gbGltaXQgdGhlIG1heGltdW0gdG90YWwgYWxsb2NhdGFibGUKKyAgICAgICBzcGFjZSwgdXNpbmcgbWFsbG9jX3NldF9mb290cHJpbnRfbGltaXQuIFRoaXMgaXMgbm90CisgICAgICAgZGVzaWduZWQgYXMgYSBzZWN1cml0eSBmZWF0dXJlIGluIGl0c2VsZiAoY2FsbHMgdG8gc2V0IGxpbWl0cworICAgICAgIGFyZSBub3Qgc2NyZWVuZWQgb3IgcHJpdmlsZWdlZCksIGJ1dCBtYXkgYmUgdXNlZnVsIGFzIG9uZQorICAgICAgIGFzcGVjdCBvZiBhIHNlY3VyZSBpbXBsZW1lbnRhdGlvbi4KKworICBUaHJlYWQtc2FmZXR5OiBOT1QgdGhyZWFkLXNhZmUgdW5sZXNzIFVTRV9MT0NLUyBkZWZpbmVkIG5vbi16ZXJvCisgICAgICAgV2hlbiBVU0VfTE9DS1MgaXMgZGVmaW5lZCwgZWFjaCBwdWJsaWMgY2FsbCB0byBtYWxsb2MsIGZyZWUsCisgICAgICAgZXRjIGlzIHN1cnJvdW5kZWQgd2l0aCBhIGxvY2suIEJ5IGRlZmF1bHQsIHRoaXMgdXNlcyBhIHBsYWluCisgICAgICAgcHRocmVhZCBtdXRleCwgd2luMzIgY3JpdGljYWwgc2VjdGlvbiwgb3IgYSBzcGluLWxvY2sgaWYgaWYKKyAgICAgICBhdmFpbGFibGUgZm9yIHRoZSBwbGF0Zm9ybSBhbmQgbm90IGRpc2FibGVkIGJ5IHNldHRpbmcKKyAgICAgICBVU0VfU1BJTl9MT0NLUz0wLiAgSG93ZXZlciwgaWYgVVNFX1JFQ1VSU0lWRV9MT0NLUyBpcyBkZWZpbmVkLAorICAgICAgIHJlY3Vyc2l2ZSB2ZXJzaW9ucyBhcmUgdXNlZCBpbnN0ZWFkICh3aGljaCBhcmUgbm90IHJlcXVpcmVkIGZvcgorICAgICAgIGJhc2UgZnVuY3Rpb25hbGl0eSBidXQgbWF5IGJlIG5lZWRlZCBpbiBsYXllcmVkIGV4dGVuc2lvbnMpLgorICAgICAgIFVzaW5nIGEgZ2xvYmFsIGxvY2sgaXMgbm90IGVzcGVjaWFsbHkgZmFzdCwgYW5kIGNhbiBiZSBhIG1ham9yCisgICAgICAgYm90dGxlbmVjay4gIEl0IGlzIGRlc2lnbmVkIG9ubHkgdG8gcHJvdmlkZSBtaW5pbWFsIHByb3RlY3Rpb24KKyAgICAgICBpbiBjb25jdXJyZW50IGVudmlyb25tZW50cywgYW5kIHRvIHByb3ZpZGUgYSBiYXNpcyBmb3IKKyAgICAgICBleHRlbnNpb25zLiAgSWYgeW91IGFyZSB1c2luZyBtYWxsb2MgaW4gYSBjb25jdXJyZW50IHByb2dyYW0sCisgICAgICAgY29uc2lkZXIgaW5zdGVhZCB1c2luZyBuZWRtYWxsb2MKKyAgICAgICAoaHR0cDovL3d3dy5uZWRwcm9kLmNvbS9wcm9ncmFtcy9wb3J0YWJsZS9uZWRtYWxsb2MvKSBvcgorICAgICAgIHB0bWFsbG9jIChTZWUgaHR0cDovL3d3dy5tYWxsb2MuZGUpLCB3aGljaCBhcmUgZGVyaXZlZCBmcm9tCisgICAgICAgdmVyc2lvbnMgb2YgdGhpcyBtYWxsb2MuCisKKyAgU3lzdGVtIHJlcXVpcmVtZW50czogQW55IGNvbWJpbmF0aW9uIG9mIE1PUkVDT1JFIGFuZC9vciBNTUFQL01VTk1BUAorICAgICAgIFRoaXMgbWFsbG9jIGNhbiB1c2UgdW5peCBzYnJrIG9yIGFueSBlbXVsYXRpb24gKGludm9rZWQgdXNpbmcKKyAgICAgICB0aGUgQ0FMTF9NT1JFQ09SRSBtYWNybykgYW5kL29yIG1tYXAvbXVubWFwIG9yIGFueSBlbXVsYXRpb24KKyAgICAgICAoaW52b2tlZCB1c2luZyBDQUxMX01NQVAvQ0FMTF9NVU5NQVApIHRvIGdldCBhbmQgcmVsZWFzZSBzeXN0ZW0KKyAgICAgICBtZW1vcnkuICBPbiBtb3N0IHVuaXggc3lzdGVtcywgaXQgdGVuZHMgdG8gd29yayBiZXN0IGlmIGJvdGgKKyAgICAgICBNT1JFQ09SRSBhbmQgTU1BUCBhcmUgZW5hYmxlZC4gIE9uIFdpbjMyLCBpdCB1c2VzIGVtdWxhdGlvbnMKKyAgICAgICBiYXNlZCBvbiBWaXJ0dWFsQWxsb2MuIEl0IGFsc28gdXNlcyBjb21tb24gQyBsaWJyYXJ5IGZ1bmN0aW9ucworICAgICAgIGxpa2UgbWVtc2V0LgorCisgIENvbXBsaWFuY2U6IEkgYmVsaWV2ZSBpdCBpcyBjb21wbGlhbnQgd2l0aCB0aGUgU2luZ2xlIFVuaXggU3BlY2lmaWNhdGlvbgorICAgICAgIChTZWUgaHR0cDovL3d3dy51bml4Lm9yZykuIEFsc28gU1ZJRC9YUEcsIEFOU0kgQywgYW5kIHByb2JhYmx5CisgICAgICAgb3RoZXJzIGFzIHdlbGwuCisKKyogT3ZlcnZpZXcgb2YgYWxnb3JpdGhtcworCisgIFRoaXMgaXMgbm90IHRoZSBmYXN0ZXN0LCBtb3N0IHNwYWNlLWNvbnNlcnZpbmcsIG1vc3QgcG9ydGFibGUsIG9yCisgIG1vc3QgdHVuYWJsZSBtYWxsb2MgZXZlciB3cml0dGVuLiBIb3dldmVyIGl0IGlzIGFtb25nIHRoZSBmYXN0ZXN0CisgIHdoaWxlIGFsc28gYmVpbmcgYW1vbmcgdGhlIG1vc3Qgc3BhY2UtY29uc2VydmluZywgcG9ydGFibGUgYW5kCisgIHR1bmFibGUuICBDb25zaXN0ZW50IGJhbGFuY2UgYWNyb3NzIHRoZXNlIGZhY3RvcnMgcmVzdWx0cyBpbiBhIGdvb2QKKyAgZ2VuZXJhbC1wdXJwb3NlIGFsbG9jYXRvciBmb3IgbWFsbG9jLWludGVuc2l2ZSBwcm9ncmFtcy4KKworICBJbiBtb3N0IHdheXMsIHRoaXMgbWFsbG9jIGlzIGEgYmVzdC1maXQgYWxsb2NhdG9yLiBHZW5lcmFsbHksIGl0CisgIGNob29zZXMgdGhlIGJlc3QtZml0dGluZyBleGlzdGluZyBjaHVuayBmb3IgYSByZXF1ZXN0LCB3aXRoIHRpZXMKKyAgYnJva2VuIGluIGFwcHJveGltYXRlbHkgbGVhc3QtcmVjZW50bHktdXNlZCBvcmRlci4gKFRoaXMgc3RyYXRlZ3kKKyAgbm9ybWFsbHkgbWFpbnRhaW5zIGxvdyBmcmFnbWVudGF0aW9uLikgSG93ZXZlciwgZm9yIHJlcXVlc3RzIGxlc3MKKyAgdGhhbiAyNTZieXRlcywgaXQgZGV2aWF0ZXMgZnJvbSBiZXN0LWZpdCB3aGVuIHRoZXJlIGlzIG5vdCBhbgorICBleGFjdGx5IGZpdHRpbmcgYXZhaWxhYmxlIGNodW5rIGJ5IHByZWZlcnJpbmcgdG8gdXNlIHNwYWNlIGFkamFjZW50CisgIHRvIHRoYXQgdXNlZCBmb3IgdGhlIHByZXZpb3VzIHNtYWxsIHJlcXVlc3QsIGFzIHdlbGwgYXMgYnkgYnJlYWtpbmcKKyAgdGllcyBpbiBhcHByb3hpbWF0ZWx5IG1vc3QtcmVjZW50bHktdXNlZCBvcmRlci4gKFRoZXNlIGVuaGFuY2UKKyAgbG9jYWxpdHkgb2Ygc2VyaWVzIG9mIHNtYWxsIGFsbG9jYXRpb25zLikgIEFuZCBmb3IgdmVyeSBsYXJnZSByZXF1ZXN0cworICAoPj0gMjU2S2IgYnkgZGVmYXVsdCksIGl0IHJlbGllcyBvbiBzeXN0ZW0gbWVtb3J5IG1hcHBpbmcKKyAgZmFjaWxpdGllcywgaWYgc3VwcG9ydGVkLiAgKFRoaXMgaGVscHMgYXZvaWQgY2FycnlpbmcgYXJvdW5kIGFuZAorICBwb3NzaWJseSBmcmFnbWVudGluZyBtZW1vcnkgdXNlZCBvbmx5IGZvciBsYXJnZSBjaHVua3MuKQorCisgIEFsbCBvcGVyYXRpb25zIChleGNlcHQgbWFsbG9jX3N0YXRzIGFuZCBtYWxsaW5mbykgaGF2ZSBleGVjdXRpb24KKyAgdGltZXMgdGhhdCBhcmUgYm91bmRlZCBieSBhIGNvbnN0YW50IGZhY3RvciBvZiB0aGUgbnVtYmVyIG9mIGJpdHMgaW4KKyAgYSBzaXplX3QsIG5vdCBjb3VudGluZyBhbnkgY2xlYXJpbmcgaW4gY2FsbG9jIG9yIGNvcHlpbmcgaW4gcmVhbGxvYywKKyAgb3IgYWN0aW9ucyBzdXJyb3VuZGluZyBNT1JFQ09SRSBhbmQgTU1BUCB0aGF0IGhhdmUgdGltZXMKKyAgcHJvcG9ydGlvbmFsIHRvIHRoZSBudW1iZXIgb2Ygbm9uLWNvbnRpZ3VvdXMgcmVnaW9ucyByZXR1cm5lZCBieQorICBzeXN0ZW0gYWxsb2NhdGlvbiByb3V0aW5lcywgd2hpY2ggaXMgb2Z0ZW4ganVzdCAxLiBJbiByZWFsLXRpbWUKKyAgYXBwbGljYXRpb25zLCB5b3UgY2FuIG9wdGlvbmFsbHkgc3VwcHJlc3Mgc2VnbWVudCB0cmF2ZXJzYWxzIHVzaW5nCisgIE5PX1NFR01FTlRfVFJBVkVSU0FMLCB3aGljaCBhc3N1cmVzIGJvdW5kZWQgZXhlY3V0aW9uIGV2ZW4gd2hlbgorICBzeXN0ZW0gYWxsb2NhdG9ycyByZXR1cm4gbm9uLWNvbnRpZ3VvdXMgc3BhY2VzLCBhdCB0aGUgdHlwaWNhbAorICBleHBlbnNlIG9mIGNhcnJ5aW5nIGFyb3VuZCBtb3JlIG1lbW9yeSBhbmQgaW5jcmVhc2VkIGZyYWdtZW50YXRpb24uCisKKyAgVGhlIGltcGxlbWVudGF0aW9uIGlzIG5vdCB2ZXJ5IG1vZHVsYXIgYW5kIHNlcmlvdXNseSBvdmVydXNlcworICBtYWNyb3MuIFBlcmhhcHMgc29tZWRheSBhbGwgQyBjb21waWxlcnMgd2lsbCBkbyBhcyBnb29kIGEgam9iCisgIGlubGluaW5nIG1vZHVsYXIgY29kZSBhcyBjYW4gbm93IGJlIGRvbmUgYnkgYnJ1dGUtZm9yY2UgZXhwYW5zaW9uLAorICBidXQgbm93LCBlbm91Z2ggb2YgdGhlbSBzZWVtIG5vdCB0by4KKworICBTb21lIGNvbXBpbGVycyBpc3N1ZSBhIGxvdCBvZiB3YXJuaW5ncyBhYm91dCBjb2RlIHRoYXQgaXMKKyAgZGVhZC91bnJlYWNoYWJsZSBvbmx5IG9uIHNvbWUgcGxhdGZvcm1zLCBhbmQgYWxzbyBhYm91dCBpbnRlbnRpb25hbAorICB1c2VzIG9mIG5lZ2F0aW9uIG9uIHVuc2lnbmVkIHR5cGVzLiBBbGwga25vd24gY2FzZXMgb2YgZWFjaCBjYW4gYmUKKyAgaWdub3JlZC4KKworICBGb3IgYSBsb25nZXIgYnV0IG91dCBvZiBkYXRlIGhpZ2gtbGV2ZWwgZGVzY3JpcHRpb24sIHNlZQorICAgICBodHRwOi8vZ2VlLmNzLm9zd2Vnby5lZHUvZGwvaHRtbC9tYWxsb2MuaHRtbAorCisqIE1TUEFDRVMKKyAgSWYgTVNQQUNFUyBpcyBkZWZpbmVkLCB0aGVuIGluIGFkZGl0aW9uIHRvIG1hbGxvYywgZnJlZSwgZXRjLiwKKyAgdGhpcyBmaWxlIGFsc28gZGVmaW5lcyBtc3BhY2VfbWFsbG9jLCBtc3BhY2VfZnJlZSwgZXRjLiBUaGVzZQorICBhcmUgdmVyc2lvbnMgb2YgbWFsbG9jIHJvdXRpbmVzIHRoYXQgdGFrZSBhbiAibXNwYWNlIiBhcmd1bWVudAorICBvYnRhaW5lZCB1c2luZyBjcmVhdGVfbXNwYWNlLCB0byBjb250cm9sIGFsbCBpbnRlcm5hbCBib29ra2VlcGluZy4KKyAgSWYgT05MWV9NU1BBQ0VTIGlzIGRlZmluZWQsIG9ubHkgdGhlc2UgdmVyc2lvbnMgYXJlIGNvbXBpbGVkLgorICBTbyBpZiB5b3Ugd291bGQgbGlrZSB0byB1c2UgdGhpcyBhbGxvY2F0b3IgZm9yIG9ubHkgc29tZSBhbGxvY2F0aW9ucywKKyAgYW5kIHlvdXIgc3lzdGVtIG1hbGxvYyBmb3Igb3RoZXJzLCB5b3UgY2FuIGNvbXBpbGUgd2l0aAorICBPTkxZX01TUEFDRVMgYW5kIHRoZW4gZG8gc29tZXRoaW5nIGxpa2UuLi4KKyAgICBzdGF0aWMgbXNwYWNlIG15bXNwYWNlID0gY3JlYXRlX21zcGFjZSgwLDApOyAvLyBmb3IgZXhhbXBsZQorICAgICNkZWZpbmUgbXltYWxsb2MoYnl0ZXMpICBtc3BhY2VfbWFsbG9jKG15bXNwYWNlLCBieXRlcykKKworICAoTm90ZTogSWYgeW91IG9ubHkgbmVlZCBvbmUgaW5zdGFuY2Ugb2YgYW4gbXNwYWNlLCB5b3UgY2FuIGluc3RlYWQKKyAgdXNlICJVU0VfRExfUFJFRklYIiB0byByZWxhYmVsIHRoZSBnbG9iYWwgbWFsbG9jLikKKworICBZb3UgY2FuIHNpbWlsYXJseSBjcmVhdGUgdGhyZWFkLWxvY2FsIGFsbG9jYXRvcnMgYnkgc3RvcmluZworICBtc3BhY2VzIGFzIHRocmVhZC1sb2NhbHMuIEZvciBleGFtcGxlOgorICAgIHN0YXRpYyBfX3RocmVhZCBtc3BhY2UgdGxtcyA9IDA7CisgICAgdm9pZCogIHRsbWFsbG9jKHNpemVfdCBieXRlcykgeworICAgICAgaWYgKHRsbXMgPT0gMCkgdGxtcyA9IGNyZWF0ZV9tc3BhY2UoMCwgMCk7CisgICAgICByZXR1cm4gbXNwYWNlX21hbGxvYyh0bG1zLCBieXRlcyk7CisgICAgfQorICAgIHZvaWQgIHRsZnJlZSh2b2lkKiBtZW0pIHsgbXNwYWNlX2ZyZWUodGxtcywgbWVtKTsgfQorCisgIFVubGVzcyBGT09URVJTIGlzIGRlZmluZWQsIGVhY2ggbXNwYWNlIGlzIGNvbXBsZXRlbHkgaW5kZXBlbmRlbnQuCisgIFlvdSBjYW5ub3QgYWxsb2NhdGUgZnJvbSBvbmUgYW5kIGZyZWUgdG8gYW5vdGhlciAoYWx0aG91Z2gKKyAgY29uZm9ybWFuY2UgaXMgb25seSB3ZWFrbHkgY2hlY2tlZCwgc28gdXNhZ2UgZXJyb3JzIGFyZSBub3QgYWx3YXlzCisgIGNhdWdodCkuIElmIEZPT1RFUlMgaXMgZGVmaW5lZCwgdGhlbiBlYWNoIGNodW5rIGNhcnJpZXMgYXJvdW5kIGEgdGFnCisgIGluZGljYXRpbmcgaXRzIG9yaWdpbmF0aW5nIG1zcGFjZSwgYW5kIGZyZWVzIGFyZSBkaXJlY3RlZCB0byB0aGVpcgorICBvcmlnaW5hdGluZyBzcGFjZXMuIE5vcm1hbGx5LCB0aGlzIHJlcXVpcmVzIHVzZSBvZiBsb2Nrcy4KKworIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIENvbXBpbGUtdGltZSBvcHRpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitCZSBjYXJlZnVsIGluIHNldHRpbmcgI2RlZmluZSB2YWx1ZXMgZm9yIG51bWVyaWNhbCBjb25zdGFudHMgb2YgdHlwZQorc2l6ZV90LiBPbiBzb21lIHN5c3RlbXMsIGxpdGVyYWwgdmFsdWVzIGFyZSBub3QgYXV0b21hdGljYWxseSBleHRlbmRlZAordG8gc2l6ZV90IHByZWNpc2lvbiB1bmxlc3MgdGhleSBhcmUgZXhwbGljaXRseSBjYXN0ZWQuIFlvdSBjYW4gYWxzbwordXNlIHRoZSBzeW1ib2xpYyB2YWx1ZXMgTUFYX1NJWkVfVCwgU0laRV9UX09ORSwgZXRjIGJlbG93LgorCitXSU4zMiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogZGVmaW5lZCBpZiBfV0lOMzIgZGVmaW5lZAorICBEZWZpbmluZyBXSU4zMiBzZXRzIHVwIGRlZmF1bHRzIGZvciBNUyBlbnZpcm9ubWVudCBhbmQgY29tcGlsZXJzLgorICBPdGhlcndpc2UgZGVmYXVsdHMgYXJlIGZvciB1bml4LiBCZXdhcmUgdGhhdCB0aGVyZSBzZWVtIHRvIGJlIHNvbWUKKyAgY2FzZXMgd2hlcmUgdGhpcyBtYWxsb2MgbWlnaHQgbm90IGJlIGEgcHVyZSBkcm9wLWluIHJlcGxhY2VtZW50IGZvcgorICBXaW4zMiBtYWxsb2M6IFJhbmRvbS1sb29raW5nIGZhaWx1cmVzIGZyb20gV2luMzIgR0RJIEFQSSdzIChlZzsKKyAgU2V0RElCaXRzKCkpIG1heSBiZSBkdWUgdG8gYnVncyBpbiBzb21lIHZpZGVvIGRyaXZlciBpbXBsZW1lbnRhdGlvbnMKKyAgd2hlbiBwaXhlbCBidWZmZXJzIGFyZSBtYWxsb2MoKWVkLCBhbmQgdGhlIHJlZ2lvbiBzcGFucyBtb3JlIHRoYW4KKyAgb25lIFZpcnR1YWxBbGxvYygpZWQgcmVnaW9uLiBCZWNhdXNlIGRsbWFsbG9jIHVzZXMgYSBzbWFsbCAoNjRLYikKKyAgZGVmYXVsdCBncmFudWxhcml0eSwgcGl4ZWwgYnVmZmVycyBtYXkgc3RyYWRkbGUgdmlydHVhbCBhbGxvY2F0aW9uCisgIHJlZ2lvbnMgbW9yZSBvZnRlbiB0aGFuIHdoZW4gdXNpbmcgdGhlIE1pY3Jvc29mdCBhbGxvY2F0b3IuICBZb3UgY2FuCisgIGF2b2lkIHRoaXMgYnkgdXNpbmcgVmlydHVhbEFsbG9jKCkgYW5kIFZpcnR1YWxGcmVlKCkgZm9yIGFsbCBwaXhlbAorICBidWZmZXJzIHJhdGhlciB0aGFuIHVzaW5nIG1hbGxvYygpLiAgSWYgdGhpcyBpcyBub3QgcG9zc2libGUsCisgIHJlY29tcGlsZSB0aGlzIG1hbGxvYyB3aXRoIGEgbGFyZ2VyIERFRkFVTFRfR1JBTlVMQVJJVFkuIE5vdGU6CisgIGluIGNhc2VzIHdoZXJlIE1TQyBhbmQgZ2NjIChjeWd3aW4pIGFyZSBrbm93biB0byBkaWZmZXIgb24gV0lOMzIsCisgIGNvbmRpdGlvbnMgdXNlIF9NU0NfVkVSIHRvIGRpc3Rpbmd1aXNoIHRoZW0uCisKK0RMTUFMTE9DX0VYUE9SVCAgICAgICBkZWZhdWx0OiBleHRlcm4KKyAgRGVmaW5lcyBob3cgcHVibGljIEFQSXMgYXJlIGRlY2xhcmVkLiBJZiB5b3Ugd2FudCB0byBleHBvcnQgdmlhIGEKKyAgV2luZG93cyBETEwsIHlvdSBtaWdodCBkZWZpbmUgdGhpcyBhcworICAgICNkZWZpbmUgRExNQUxMT0NfRVhQT1JUIGV4dGVybiAgX19kZWNsc3BlYyhkbGxleHBvcnQpCisgIElmIHlvdSB3YW50IGEgUE9TSVggRUxGIHNoYXJlZCBvYmplY3QsIHlvdSBtaWdodCB1c2UKKyAgICAjZGVmaW5lIERMTUFMTE9DX0VYUE9SVCBleHRlcm4gX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSkKKworTUFMTE9DX0FMSUdOTUVOVCAgICAgICAgIGRlZmF1bHQ6IChzaXplX3QpKDIgKiBzaXplb2Yodm9pZCAqKSkKKyAgQ29udHJvbHMgdGhlIG1pbmltdW0gYWxpZ25tZW50IGZvciBtYWxsb2MnZWQgY2h1bmtzLiAgSXQgbXVzdCBiZSBhCisgIHBvd2VyIG9mIHR3byBhbmQgYXQgbGVhc3QgOCwgZXZlbiBvbiBtYWNoaW5lcyBmb3Igd2hpY2ggc21hbGxlcgorICBhbGlnbm1lbnRzIHdvdWxkIHN1ZmZpY2UuIEl0IG1heSBiZSBkZWZpbmVkIGFzIGxhcmdlciB0aGFuIHRoaXMKKyAgdGhvdWdoLiBOb3RlIGhvd2V2ZXIgdGhhdCBjb2RlIGFuZCBkYXRhIHN0cnVjdHVyZXMgYXJlIG9wdGltaXplZCBmb3IKKyAgdGhlIGNhc2Ugb2YgOC1ieXRlIGFsaWdubWVudC4KKworTVNQQUNFUyAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IDAgKGZhbHNlKQorICBJZiB0cnVlLCBjb21waWxlIGluIHN1cHBvcnQgZm9yIGluZGVwZW5kZW50IGFsbG9jYXRpb24gc3BhY2VzLgorICBUaGlzIGlzIG9ubHkgc3VwcG9ydGVkIGlmIEhBVkVfTU1BUCBpcyB0cnVlLgorCitPTkxZX01TUEFDRVMgICAgICAgICAgICAgZGVmYXVsdDogMCAoZmFsc2UpCisgIElmIHRydWUsIG9ubHkgY29tcGlsZSBpbiBtc3BhY2UgdmVyc2lvbnMsIG5vdCByZWd1bGFyIHZlcnNpb25zLgorCitVU0VfTE9DS1MgICAgICAgICAgICAgICAgZGVmYXVsdDogMCAoZmFsc2UpCisgIENhdXNlcyBlYWNoIGNhbGwgdG8gZWFjaCBwdWJsaWMgcm91dGluZSB0byBiZSBzdXJyb3VuZGVkIHdpdGgKKyAgcHRocmVhZCBvciBXSU4zMiBtdXRleCBsb2NrL3VubG9jay4gKElmIHNldCB0cnVlLCB0aGlzIGNhbiBiZQorICBvdmVycmlkZGVuIG9uIGEgcGVyLW1zcGFjZSBiYXNpcyBmb3IgbXNwYWNlIHZlcnNpb25zLikgSWYgc2V0IHRvIGEKKyAgbm9uLXplcm8gdmFsdWUgb3RoZXIgdGhhbiAxLCBsb2NrcyBhcmUgdXNlZCwgYnV0IHRoZWlyCisgIGltcGxlbWVudGF0aW9uIGlzIGxlZnQgb3V0LCBzbyBsb2NrIGZ1bmN0aW9ucyBtdXN0IGJlIHN1cHBsaWVkIG1hbnVhbGx5LAorICBhcyBkZXNjcmliZWQgYmVsb3cuCisKK1VTRV9TUElOX0xPQ0tTICAgICAgICAgICBkZWZhdWx0OiAxIGlmZiBVU0VfTE9DS1MgYW5kIHNwaW4gbG9ja3MgYXZhaWxhYmxlCisgIElmIHRydWUsIHVzZXMgY3VzdG9tIHNwaW4gbG9ja3MgZm9yIGxvY2tpbmcuIFRoaXMgaXMgY3VycmVudGx5CisgIHN1cHBvcnRlZCBvbmx5IGdjYyA+PSA0LjEsIG9sZGVyIGdjY3Mgb24geDg2IHBsYXRmb3JtcywgYW5kIHJlY2VudAorICBNUyBjb21waWxlcnMuICBPdGhlcndpc2UsIHBvc2l4IGxvY2tzIG9yIHdpbjMyIGNyaXRpY2FsIHNlY3Rpb25zIGFyZQorICB1c2VkLgorCitVU0VfUkVDVVJTSVZFX0xPQ0tTICAgICAgZGVmYXVsdDogbm90IGRlZmluZWQKKyAgSWYgZGVmaW5lZCBub256ZXJvLCB1c2VzIHJlY3Vyc2l2ZSAoYWthIHJlZW50cmFudCkgbG9ja3MsIG90aGVyd2lzZQorICB1c2VzIHBsYWluIG11dGV4ZXMuIFRoaXMgaXMgbm90IHJlcXVpcmVkIGZvciBtYWxsb2MgcHJvcGVyLCBidXQgbWF5CisgIGJlIG5lZWRlZCBmb3IgbGF5ZXJlZCBhbGxvY2F0b3JzIHN1Y2ggYXMgbmVkbWFsbG9jLgorCitMT0NLX0FUX0ZPUksgICAgICAgICAgICBkZWZhdWx0OiBub3QgZGVmaW5lZAorICBJZiBkZWZpbmVkIG5vbnplcm8sIHBlcmZvcm1zIHB0aHJlYWRfYXRmb3JrIHVwb24gaW5pdGlhbGl6YXRpb24KKyAgdG8gaW5pdGlhbGl6ZSBjaGlsZCBsb2NrIHdoaWxlIGhvbGRpbmcgcGFyZW50IGxvY2suIFRoZSBpbXBsZW1lbnRhdGlvbgorICBhc3N1bWVzIHRoYXQgcHRocmVhZCBsb2NrcyAobm90IGN1c3RvbSBsb2NrcykgYXJlIGJlaW5nIHVzZWQuIEluIG90aGVyCisgIGNhc2VzLCB5b3UgbWF5IG5lZWQgdG8gY3VzdG9taXplIHRoZSBpbXBsZW1lbnRhdGlvbi4KKworRk9PVEVSUyAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IDAKKyAgSWYgdHJ1ZSwgcHJvdmlkZSBleHRyYSBjaGVja2luZyBhbmQgZGlzcGF0Y2hpbmcgYnkgcGxhY2luZworICBpbmZvcm1hdGlvbiBpbiB0aGUgZm9vdGVycyBvZiBhbGxvY2F0ZWQgY2h1bmtzLiBUaGlzIGFkZHMKKyAgc3BhY2UgYW5kIHRpbWUgb3ZlcmhlYWQuCisKK0lOU0VDVVJFICAgICAgICAgICAgICAgICBkZWZhdWx0OiAwCisgIElmIHRydWUsIG9taXQgY2hlY2tzIGZvciB1c2FnZSBlcnJvcnMgYW5kIGhlYXAgc3BhY2Ugb3ZlcndyaXRlcy4KKworVVNFX0RMX1BSRUZJWCAgICAgICAgICAgIGRlZmF1bHQ6IE5PVCBkZWZpbmVkCisgIENhdXNlcyBjb21waWxlciB0byBwcmVmaXggYWxsIHB1YmxpYyByb3V0aW5lcyB3aXRoIHRoZSBzdHJpbmcgJ2RsJy4KKyAgVGhpcyBjYW4gYmUgdXNlZnVsIHdoZW4geW91IG9ubHkgd2FudCB0byB1c2UgdGhpcyBtYWxsb2MgaW4gb25lIHBhcnQKKyAgb2YgYSBwcm9ncmFtLCB1c2luZyB5b3VyIHJlZ3VsYXIgc3lzdGVtIG1hbGxvYyBlbHNld2hlcmUuCisKK01BTExPQ19JTlNQRUNUX0FMTCAgICAgICBkZWZhdWx0OiBOT1QgZGVmaW5lZAorICBJZiBkZWZpbmVkLCBjb21waWxlcyBtYWxsb2NfaW5zcGVjdF9hbGwgYW5kIG1zcGFjZV9pbnNwZWN0X2FsbCwgdGhhdAorICBwZXJmb3JtIHRyYXZlcnNhbCBvZiBhbGwgaGVhcCBzcGFjZS4gIFVubGVzcyBhY2Nlc3MgdG8gdGhlc2UKKyAgZnVuY3Rpb25zIGlzIG90aGVyd2lzZSByZXN0cmljdGVkLCB5b3UgcHJvYmFibHkgZG8gbm90IHdhbnQgdG8KKyAgaW5jbHVkZSB0aGVtIGluIHNlY3VyZSBpbXBsZW1lbnRhdGlvbnMuCisKK0FCT1JUICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiBkZWZpbmVkIGFzIGFib3J0KCkKKyAgRGVmaW5lcyBob3cgdG8gYWJvcnQgb24gZmFpbGVkIGNoZWNrcy4gIE9uIG1vc3Qgc3lzdGVtcywgYSBmYWlsZWQKKyAgY2hlY2sgY2Fubm90IGRpZSB3aXRoIGFuICJhc3NlcnQiIG9yIGV2ZW4gcHJpbnQgYW4gaW5mb3JtYXRpdmUKKyAgbWVzc2FnZSwgYmVjYXVzZSB0aGUgdW5kZXJseWluZyBwcmludCByb3V0aW5lcyBpbiB0dXJuIGNhbGwgbWFsbG9jLAorICB3aGljaCB3aWxsIGZhaWwgYWdhaW4uICBHZW5lcmFsbHksIHRoZSBiZXN0IHBvbGljeSBpcyB0byBzaW1wbHkgY2FsbAorICBhYm9ydCgpLiBJdCdzIG5vdCB2ZXJ5IHVzZWZ1bCB0byBkbyBtb3JlIHRoYW4gdGhpcyBiZWNhdXNlIG1hbnkKKyAgZXJyb3JzIGR1ZSB0byBvdmVyd3JpdGluZyB3aWxsIHNob3cgdXAgYXMgYWRkcmVzcyBmYXVsdHMgKG51bGwsIG9kZAorICBhZGRyZXNzZXMgZXRjKSByYXRoZXIgdGhhbiBtYWxsb2MtdHJpZ2dlcmVkIGNoZWNrcywgc28gd2lsbCBhbHNvCisgIGFib3J0LiAgQWxzbywgbW9zdCBjb21waWxlcnMga25vdyB0aGF0IGFib3J0KCkgZG9lcyBub3QgcmV0dXJuLCBzbworICBjYW4gYmV0dGVyIG9wdGltaXplIGNvZGUgY29uZGl0aW9uYWxseSBjYWxsaW5nIGl0LgorCitQUk9DRUVEX09OX0VSUk9SICAgICAgICAgICBkZWZhdWx0OiBkZWZpbmVkIGFzIDAgKGZhbHNlKQorICBDb250cm9scyB3aGV0aGVyIGRldGVjdGVkIGJhZCBhZGRyZXNzZXMgY2F1c2UgdGhlbSB0byBieXBhc3NlZAorICByYXRoZXIgdGhhbiBhYm9ydGluZy4gSWYgc2V0LCBkZXRlY3RlZCBiYWQgYXJndW1lbnRzIHRvIGZyZWUgYW5kCisgIHJlYWxsb2MgYXJlIGlnbm9yZWQuIEFuZCBhbGwgYm9va2tlZXBpbmcgaW5mb3JtYXRpb24gaXMgemVyb2VkIG91dAorICB1cG9uIGEgZGV0ZWN0ZWQgb3ZlcndyaXRlIG9mIGZyZWVkIGhlYXAgc3BhY2UsIHRodXMgbG9zaW5nIHRoZQorICBhYmlsaXR5IHRvIGV2ZXIgcmV0dXJuIGl0IGZyb20gbWFsbG9jIGFnYWluLCBidXQgZW5hYmxpbmcgdGhlCisgIGFwcGxpY2F0aW9uIHRvIHByb2NlZWQuIElmIFBST0NFRURfT05fRVJST1IgaXMgZGVmaW5lZCwgdGhlCisgIHN0YXRpYyB2YXJpYWJsZSBtYWxsb2NfY29ycnVwdGlvbl9lcnJvcl9jb3VudCBpcyBjb21waWxlZCBpbgorICBhbmQgY2FuIGJlIGV4YW1pbmVkIHRvIHNlZSBpZiBlcnJvcnMgaGF2ZSBvY2N1cnJlZC4gVGhpcyBvcHRpb24KKyAgZ2VuZXJhdGVzIHNsb3dlciBjb2RlIHRoYW4gdGhlIGRlZmF1bHQgYWJvcnQgcG9saWN5LgorCitERUJVRyAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogTk9UIGRlZmluZWQKKyAgVGhlIERFQlVHIHNldHRpbmcgaXMgbWFpbmx5IGludGVuZGVkIGZvciBwZW9wbGUgdHJ5aW5nIHRvIG1vZGlmeQorICB0aGlzIGNvZGUgb3IgZGlhZ25vc2UgcHJvYmxlbXMgd2hlbiBwb3J0aW5nIHRvIG5ldyBwbGF0Zm9ybXMuCisgIEhvd2V2ZXIsIGl0IG1heSBhbHNvIGJlIGFibGUgdG8gYmV0dGVyIGlzb2xhdGUgdXNlciBlcnJvcnMgdGhhbiBqdXN0CisgIHVzaW5nIHJ1bnRpbWUgY2hlY2tzLiAgVGhlIGFzc2VydGlvbnMgaW4gdGhlIGNoZWNrIHJvdXRpbmVzIHNwZWxsCisgIG91dCBpbiBtb3JlIGRldGFpbCB0aGUgYXNzdW1wdGlvbnMgYW5kIGludmFyaWFudHMgdW5kZXJseWluZyB0aGUKKyAgYWxnb3JpdGhtcy4gIFRoZSBjaGVja2luZyBpcyBmYWlybHkgZXh0ZW5zaXZlLCBhbmQgd2lsbCBzbG93IGRvd24KKyAgZXhlY3V0aW9uIG5vdGljZWFibHkuIENhbGxpbmcgbWFsbG9jX3N0YXRzIG9yIG1hbGxpbmZvIHdpdGggREVCVUcKKyAgc2V0IHdpbGwgYXR0ZW1wdCB0byBjaGVjayBldmVyeSBub24tbW1hcHBlZCBhbGxvY2F0ZWQgYW5kIGZyZWUgY2h1bmsKKyAgaW4gdGhlIGNvdXJzZSBvZiBjb21wdXRpbmcgdGhlIHN1bW1hcmllcy4KKworQUJPUlRfT05fQVNTRVJUX0ZBSUxVUkUgICBkZWZhdWx0OiBkZWZpbmVkIGFzIDEgKHRydWUpCisgIERlYnVnZ2luZyBhc3NlcnRpb24gZmFpbHVyZXMgY2FuIGJlIG5lYXJseSBpbXBvc3NpYmxlIGlmIHlvdXIKKyAgdmVyc2lvbiBvZiB0aGUgYXNzZXJ0IG1hY3JvIGNhdXNlcyBtYWxsb2MgdG8gYmUgY2FsbGVkLCB3aGljaCB3aWxsCisgIGxlYWQgdG8gYSBjYXNjYWRlIG9mIGZ1cnRoZXIgZmFpbHVyZXMsIGJsb3dpbmcgdGhlIHJ1bnRpbWUgc3RhY2suCisgIEFCT1JUX09OX0FTU0VSVF9GQUlMVVJFIGNhdXNlIGFzc2VydGlvbnMgZmFpbHVyZXMgdG8gY2FsbCBhYm9ydCgpLAorICB3aGljaCB3aWxsIHVzdWFsbHkgbWFrZSBkZWJ1Z2dpbmcgZWFzaWVyLgorCitNQUxMT0NfRkFJTFVSRV9BQ1RJT04gICAgIGRlZmF1bHQ6IHNldHMgZXJybm8gdG8gRU5PTUVNLCBvciBuby1vcCBvbiB3aW4zMgorICBUaGUgYWN0aW9uIHRvIHRha2UgYmVmb3JlICJyZXR1cm4gMCIgd2hlbiBtYWxsb2MgZmFpbHMgdG8gYmUgYWJsZSB0bworICByZXR1cm4gbWVtb3J5IGJlY2F1c2UgdGhlcmUgaXMgbm9uZSBhdmFpbGFibGUuCisKK0hBVkVfTU9SRUNPUkUgICAgICAgICAgICAgZGVmYXVsdDogMSAodHJ1ZSkgdW5sZXNzIHdpbjMyIG9yIE9OTFlfTVNQQUNFUworICBUcnVlIGlmIHRoaXMgc3lzdGVtIHN1cHBvcnRzIHNicmsgb3IgYW4gZW11bGF0aW9uIG9mIGl0LgorCitNT1JFQ09SRSAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHNicmsKKyAgVGhlIG5hbWUgb2YgdGhlIHNicmstc3R5bGUgc3lzdGVtIHJvdXRpbmUgdG8gY2FsbCB0byBvYnRhaW4gbW9yZQorICBtZW1vcnkuICBTZWUgYmVsb3cgZm9yIGd1aWRhbmNlIG9uIHdyaXRpbmcgY3VzdG9tIE1PUkVDT1JFCisgIGZ1bmN0aW9ucy4gVGhlIHR5cGUgb2YgdGhlIGFyZ3VtZW50IHRvIHNicmsvTU9SRUNPUkUgdmFyaWVzIGFjcm9zcworICBzeXN0ZW1zLiAgSXQgY2Fubm90IGJlIHNpemVfdCwgYmVjYXVzZSBpdCBzdXBwb3J0cyBuZWdhdGl2ZQorICBhcmd1bWVudHMsIHNvIGl0IGlzIG5vcm1hbGx5IHRoZSBzaWduZWQgdHlwZSBvZiB0aGUgc2FtZSB3aWR0aCBhcworICBzaXplX3QgKHNvbWV0aW1lcyBkZWNsYXJlZCBhcyAiaW50cHRyX3QiKS4gIEl0IGRvZXNuJ3QgbXVjaCBtYXR0ZXIKKyAgdGhvdWdoLiBJbnRlcm5hbGx5LCB3ZSBvbmx5IGNhbGwgaXQgd2l0aCBhcmd1bWVudHMgbGVzcyB0aGFuIGhhbGYKKyAgdGhlIG1heCB2YWx1ZSBvZiBhIHNpemVfdCwgd2hpY2ggc2hvdWxkIHdvcmsgYWNyb3NzIGFsbCByZWFzb25hYmxlCisgIHBvc3NpYmlsaXRpZXMsIGFsdGhvdWdoIHNvbWV0aW1lcyBnZW5lcmF0aW5nIGNvbXBpbGVyIHdhcm5pbmdzLgorCitNT1JFQ09SRV9DT05USUdVT1VTICAgICAgIGRlZmF1bHQ6IDEgKHRydWUpIGlmIEhBVkVfTU9SRUNPUkUKKyAgSWYgdHJ1ZSwgdGFrZSBhZHZhbnRhZ2Ugb2YgZmFjdCB0aGF0IGNvbnNlY3V0aXZlIGNhbGxzIHRvIE1PUkVDT1JFCisgIHdpdGggcG9zaXRpdmUgYXJndW1lbnRzIGFsd2F5cyByZXR1cm4gY29udGlndW91cyBpbmNyZWFzaW5nCisgIGFkZHJlc3Nlcy4gIFRoaXMgaXMgdHJ1ZSBvZiB1bml4IHNicmsuIEl0IGRvZXMgbm90IGh1cnQgdG9vIG11Y2ggdG8KKyAgc2V0IGl0IHRydWUgYW55d2F5LCBzaW5jZSBtYWxsb2MgY29wZXMgd2l0aCBub24tY29udGlndWl0aWVzLgorICBTZXR0aW5nIGl0IGZhbHNlIHdoZW4gZGVmaW5pdGVseSBub24tY29udGlndW91cyBzYXZlcyB0aW1lCisgIGFuZCBwb3NzaWJseSB3YXN0ZWQgc3BhY2UgaXQgd291bGQgdGFrZSB0byBkaXNjb3ZlciB0aGlzIHRob3VnaC4KKworTU9SRUNPUkVfQ0FOTk9UX1RSSU0gICAgICBkZWZhdWx0OiBOT1QgZGVmaW5lZAorICBUcnVlIGlmIE1PUkVDT1JFIGNhbm5vdCByZWxlYXNlIHNwYWNlIGJhY2sgdG8gdGhlIHN5c3RlbSB3aGVuIGdpdmVuCisgIG5lZ2F0aXZlIGFyZ3VtZW50cy4gVGhpcyBpcyBnZW5lcmFsbHkgbmVjZXNzYXJ5IG9ubHkgaWYgeW91IGFyZQorICB1c2luZyBhIGhhbmQtY3JhZnRlZCBNT1JFQ09SRSBmdW5jdGlvbiB0aGF0IGNhbm5vdCBoYW5kbGUgbmVnYXRpdmUKKyAgYXJndW1lbnRzLgorCitOT19TRUdNRU5UX1RSQVZFUlNBTCAgICAgICBkZWZhdWx0OiAwCisgIElmIG5vbi16ZXJvLCBzdXBwcmVzc2VzIHRyYXZlcnNhbHMgb2YgbWVtb3J5IHNlZ21lbnRzCisgIHJldHVybmVkIGJ5IGVpdGhlciBNT1JFQ09SRSBvciBDQUxMX01NQVAuIFRoaXMgZGlzYWJsZXMKKyAgbWVyZ2luZyBvZiBzZWdtZW50cyB0aGF0IGFyZSBjb250aWd1b3VzLCBhbmQgc2VsZWN0aXZlbHkKKyAgcmVsZWFzaW5nIHRoZW0gdG8gdGhlIE9TIGlmIHVudXNlZCwgYnV0IGJvdW5kcyBleGVjdXRpb24gdGltZXMuCisKK0hBVkVfTU1BUCAgICAgICAgICAgICAgICAgZGVmYXVsdDogMSAodHJ1ZSkKKyAgVHJ1ZSBpZiB0aGlzIHN5c3RlbSBzdXBwb3J0cyBtbWFwIG9yIGFuIGVtdWxhdGlvbiBvZiBpdC4gIElmIHNvLCBhbmQKKyAgSEFWRV9NT1JFQ09SRSBpcyBub3QgdHJ1ZSwgTU1BUCBpcyB1c2VkIGZvciBhbGwgc3lzdGVtCisgIGFsbG9jYXRpb24uIElmIHNldCBhbmQgSEFWRV9NT1JFQ09SRSBpcyB0cnVlIGFzIHdlbGwsIE1NQVAgaXMKKyAgcHJpbWFyaWx5IHVzZWQgdG8gZGlyZWN0bHkgYWxsb2NhdGUgdmVyeSBsYXJnZSBibG9ja3MuIEl0IGlzIGFsc28KKyAgdXNlZCBhcyBhIGJhY2t1cCBzdHJhdGVneSBpbiBjYXNlcyB3aGVyZSBNT1JFQ09SRSBmYWlscyB0byBwcm92aWRlCisgIHNwYWNlIGZyb20gc3lzdGVtLiBOb3RlOiBBIHNpbmdsZSBjYWxsIHRvIE1VTk1BUCBpcyBhc3N1bWVkIHRvIGJlCisgIGFibGUgdG8gdW5tYXAgbWVtb3J5IHRoYXQgbWF5IGhhdmUgYmUgYWxsb2NhdGVkIHVzaW5nIG11bHRpcGxlIGNhbGxzCisgIHRvIE1NQVAsIHNvIGxvbmcgYXMgdGhleSBhcmUgYWRqYWNlbnQuCisKK0hBVkVfTVJFTUFQICAgICAgICAgICAgICAgZGVmYXVsdDogMSBvbiBsaW51eCwgZWxzZSAwCisgIElmIHRydWUgcmVhbGxvYygpIHVzZXMgbXJlbWFwKCkgdG8gcmUtYWxsb2NhdGUgbGFyZ2UgYmxvY2tzIGFuZAorICBleHRlbmQgb3Igc2hyaW5rIGFsbG9jYXRpb24gc3BhY2VzLgorCitNTUFQX0NMRUFSUyAgICAgICAgICAgICAgIGRlZmF1bHQ6IDEgZXhjZXB0IG9uIFdJTkNFLgorICBUcnVlIGlmIG1tYXAgY2xlYXJzIG1lbW9yeSBzbyBjYWxsb2MgZG9lc24ndCBuZWVkIHRvLiBUaGlzIGlzIHRydWUKKyAgZm9yIHN0YW5kYXJkIHVuaXggbW1hcCB1c2luZyAvZGV2L3plcm8gYW5kIG9uIFdJTjMyIGV4Y2VwdCBmb3IgV0lOQ0UuCisKK1VTRV9CVUlMVElOX0ZGUyAgICAgICAgICAgIGRlZmF1bHQ6IDAgKGkuZS4sIG5vdCB1c2VkKQorICBDYXVzZXMgbWFsbG9jIHRvIHVzZSB0aGUgYnVpbHRpbiBmZnMoKSBmdW5jdGlvbiB0byBjb21wdXRlIGluZGljZXMuCisgIFNvbWUgY29tcGlsZXJzIG1heSByZWNvZ25pemUgYW5kIGludHJpbnNpZnkgZmZzIHRvIGJlIGZhc3RlciB0aGFuIHRoZQorICBzdXBwbGllZCBDIHZlcnNpb24uIEFsc28sIHRoZSBjYXNlIG9mIHg4NiB1c2luZyBnY2MgaXMgc3BlY2lhbC1jYXNlZAorICB0byBhbiBhc20gaW5zdHJ1Y3Rpb24sIHNvIGlzIGFscmVhZHkgYXMgZmFzdCBhcyBpdCBjYW4gYmUsIGFuZCBzbworICB0aGlzIHNldHRpbmcgaGFzIG5vIGVmZmVjdC4gU2ltaWxhcmx5IGZvciBXaW4zMiB1bmRlciByZWNlbnQgTVMgY29tcGlsZXJzLgorICAoT24gbW9zdCB4ODZzLCB0aGUgYXNtIHZlcnNpb24gaXMgb25seSBzbGlnaHRseSBmYXN0ZXIgdGhhbiB0aGUgQyB2ZXJzaW9uLikKKworbWFsbG9jX2dldHBhZ2VzaXplICAgICAgICAgZGVmYXVsdDogZGVyaXZlIGZyb20gc3lzdGVtIGluY2x1ZGVzLCBvciA0MDk2LgorICBUaGUgc3lzdGVtIHBhZ2Ugc2l6ZS4gVG8gdGhlIGV4dGVudCBwb3NzaWJsZSwgdGhpcyBtYWxsb2MgbWFuYWdlcworICBtZW1vcnkgZnJvbSB0aGUgc3lzdGVtIGluIHBhZ2Utc2l6ZSB1bml0cy4gIFRoaXMgbWF5IGJlIChhbmQKKyAgdXN1YWxseSBpcykgYSBmdW5jdGlvbiByYXRoZXIgdGhhbiBhIGNvbnN0YW50LiBUaGlzIGlzIGlnbm9yZWQKKyAgaWYgV0lOMzIsIHdoZXJlIHBhZ2Ugc2l6ZSBpcyBkZXRlcm1pbmVkIHVzaW5nIGdldFN5c3RlbUluZm8gZHVyaW5nCisgIGluaXRpYWxpemF0aW9uLgorCitVU0VfREVWX1JBTkRPTSAgICAgICAgICAgICBkZWZhdWx0OiAwIChpLmUuLCBub3QgdXNlZCkKKyAgQ2F1c2VzIG1hbGxvYyB0byB1c2UgL2Rldi9yYW5kb20gdG8gaW5pdGlhbGl6ZSBzZWN1cmUgbWFnaWMgc2VlZCBmb3IKKyAgc3RhbXBpbmcgZm9vdGVycy4gT3RoZXJ3aXNlLCB0aGUgY3VycmVudCB0aW1lIGlzIHVzZWQuCisKK05PX01BTExJTkZPICAgICAgICAgICAgICAgIGRlZmF1bHQ6IDAKKyAgSWYgZGVmaW5lZCwgZG9uJ3QgY29tcGlsZSAibWFsbGluZm8iLiBUaGlzIGNhbiBiZSBhIHNpbXBsZSB3YXkKKyAgb2YgZGVhbGluZyB3aXRoIG1pc21hdGNoZXMgYmV0d2VlbiBzeXN0ZW0gZGVjbGFyYXRpb25zIGFuZAorICB0aG9zZSBpbiB0aGlzIGZpbGUuCisKK01BTExJTkZPX0ZJRUxEX1RZUEUgICAgICAgIGRlZmF1bHQ6IHNpemVfdAorICBUaGUgdHlwZSBvZiB0aGUgZmllbGRzIGluIHRoZSBtYWxsaW5mbyBzdHJ1Y3QuIFRoaXMgd2FzIG9yaWdpbmFsbHkKKyAgZGVmaW5lZCBhcyAiaW50IiBpbiBTVklEIGV0YywgYnV0IGlzIG1vcmUgdXNlZnVsbHkgZGVmaW5lZCBhcworICBzaXplX3QuIFRoZSB2YWx1ZSBpcyB1c2VkIG9ubHkgaWYgIEhBVkVfVVNSX0lOQ0xVREVfTUFMTE9DX0ggaXMgbm90IHNldAorCitOT19NQUxMT0NfU1RBVFMgICAgICAgICAgICBkZWZhdWx0OiAwCisgIElmIGRlZmluZWQsIGRvbid0IGNvbXBpbGUgIm1hbGxvY19zdGF0cyIuIFRoaXMgYXZvaWRzIGNhbGxzIHRvCisgIGZwcmludGYgYW5kIGJyaW5naW5nIGluIHN0ZGlvIGRlcGVuZGVuY2llcyB5b3UgbWlnaHQgbm90IHdhbnQuCisKK1JFQUxMT0NfWkVST19CWVRFU19GUkVFUyAgICBkZWZhdWx0OiBub3QgZGVmaW5lZAorICBUaGlzIHNob3VsZCBiZSBzZXQgaWYgYSBjYWxsIHRvIHJlYWxsb2Mgd2l0aCB6ZXJvIGJ5dGVzIHNob3VsZAorICBiZSB0aGUgc2FtZSBhcyBhIGNhbGwgdG8gZnJlZS4gU29tZSBwZW9wbGUgdGhpbmsgaXQgc2hvdWxkLiBPdGhlcndpc2UsCisgIHNpbmNlIHRoaXMgbWFsbG9jIHJldHVybnMgYSB1bmlxdWUgcG9pbnRlciBmb3IgbWFsbG9jKDApLCBzbyBkb2VzCisgIHJlYWxsb2MocCwgMCkuCisKK0xBQ0tTX1VOSVNURF9ILCBMQUNLU19GQ05UTF9ILCBMQUNLU19TWVNfUEFSQU1fSCwgTEFDS1NfU1lTX01NQU5fSAorTEFDS1NfU1RSSU5HU19ILCBMQUNLU19TVFJJTkdfSCwgTEFDS1NfU1lTX1RZUEVTX0gsICBMQUNLU19FUlJOT19ICitMQUNLU19TVERMSUJfSCBMQUNLU19TQ0hFRF9IIExBQ0tTX1RJTUVfSCAgZGVmYXVsdDogTk9UIGRlZmluZWQgdW5sZXNzIG9uIFdJTjMyCisgIERlZmluZSB0aGVzZSBpZiB5b3VyIHN5c3RlbSBkb2VzIG5vdCBoYXZlIHRoZXNlIGhlYWRlciBmaWxlcy4KKyAgWW91IG1pZ2h0IG5lZWQgdG8gbWFudWFsbHkgaW5zZXJ0IHNvbWUgb2YgdGhlIGRlY2xhcmF0aW9ucyB0aGV5IHByb3ZpZGUuCisKK0RFRkFVTFRfR1JBTlVMQVJJVFkgICAgICAgIGRlZmF1bHQ6IHBhZ2Ugc2l6ZSBpZiBNT1JFQ09SRV9DT05USUdVT1VTLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXN0ZW1faW5mby5kd0FsbG9jYXRpb25HcmFudWxhcml0eSBpbiBXSU4zMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3RoZXJ3aXNlIDY0Sy4KKyAgICAgIEFsc28gc2V0dGFibGUgdXNpbmcgbWFsbG9wdChNX0dSQU5VTEFSSVRZLCB4KQorICBUaGUgdW5pdCBmb3IgYWxsb2NhdGluZyBhbmQgZGVhbGxvY2F0aW5nIG1lbW9yeSBmcm9tIHRoZSBzeXN0ZW0uICBPbgorICBtb3N0IHN5c3RlbXMgd2l0aCBjb250aWd1b3VzIE1PUkVDT1JFLCB0aGVyZSBpcyBubyByZWFzb24gdG8KKyAgbWFrZSB0aGlzIG1vcmUgdGhhbiBhIHBhZ2UuIEhvd2V2ZXIsIHN5c3RlbXMgd2l0aCBNTUFQIHRlbmQgdG8KKyAgZWl0aGVyIHJlcXVpcmUgb3IgZW5jb3VyYWdlIGxhcmdlciBncmFudWxhcml0aWVzLiAgWW91IGNhbiBpbmNyZWFzZQorICB0aGlzIHZhbHVlIHRvIHByZXZlbnQgc3lzdGVtIGFsbG9jYXRpb24gZnVuY3Rpb25zIHRvIGJlIGNhbGxlZCBzbworICBvZnRlbiwgZXNwZWNpYWxseSBpZiB0aGV5IGFyZSBzbG93LiAgVGhlIHZhbHVlIG11c3QgYmUgYXQgbGVhc3Qgb25lCisgIHBhZ2UgYW5kIG11c3QgYmUgYSBwb3dlciBvZiB0d28uICBTZXR0aW5nIHRvIDAgY2F1c2VzIGluaXRpYWxpemF0aW9uCisgIHRvIGVpdGhlciBwYWdlIHNpemUgb3Igd2luMzIgcmVnaW9uIHNpemUuICAoTm90ZTogSW4gcHJldmlvdXMKKyAgdmVyc2lvbnMgb2YgbWFsbG9jLCB0aGUgZXF1aXZhbGVudCBvZiB0aGlzIG9wdGlvbiB3YXMgY2FsbGVkCisgICJUT1BfUEFEIikKKworREVGQVVMVF9UUklNX1RIUkVTSE9MRCAgICBkZWZhdWx0OiAyTUIKKyAgICAgIEFsc28gc2V0dGFibGUgdXNpbmcgbWFsbG9wdChNX1RSSU1fVEhSRVNIT0xELCB4KQorICBUaGUgbWF4aW11bSBhbW91bnQgb2YgdW51c2VkIHRvcC1tb3N0IG1lbW9yeSB0byBrZWVwIGJlZm9yZQorICByZWxlYXNpbmcgdmlhIG1hbGxvY190cmltIGluIGZyZWUoKS4gIEF1dG9tYXRpYyB0cmltbWluZyBpcyBtYWlubHkKKyAgdXNlZnVsIGluIGxvbmctbGl2ZWQgcHJvZ3JhbXMgdXNpbmcgY29udGlndW91cyBNT1JFQ09SRS4gIEJlY2F1c2UKKyAgdHJpbW1pbmcgdmlhIHNicmsgY2FuIGJlIHNsb3cgb24gc29tZSBzeXN0ZW1zLCBhbmQgY2FuIHNvbWV0aW1lcyBiZQorICB3YXN0ZWZ1bCAoaW4gY2FzZXMgd2hlcmUgcHJvZ3JhbXMgaW1tZWRpYXRlbHkgYWZ0ZXJ3YXJkIGFsbG9jYXRlCisgIG1vcmUgbGFyZ2UgY2h1bmtzKSB0aGUgdmFsdWUgc2hvdWxkIGJlIGhpZ2ggZW5vdWdoIHNvIHRoYXQgeW91cgorICBvdmVyYWxsIHN5c3RlbSBwZXJmb3JtYW5jZSB3b3VsZCBpbXByb3ZlIGJ5IHJlbGVhc2luZyB0aGlzIG11Y2gKKyAgbWVtb3J5LiAgQXMgYSByb3VnaCBndWlkZSwgeW91IG1pZ2h0IHNldCB0byBhIHZhbHVlIGNsb3NlIHRvIHRoZQorICBhdmVyYWdlIHNpemUgb2YgYSBwcm9jZXNzIChwcm9ncmFtKSBydW5uaW5nIG9uIHlvdXIgc3lzdGVtLgorICBSZWxlYXNpbmcgdGhpcyBtdWNoIG1lbW9yeSB3b3VsZCBhbGxvdyBzdWNoIGEgcHJvY2VzcyB0byBydW4gaW4KKyAgbWVtb3J5LiAgR2VuZXJhbGx5LCBpdCBpcyB3b3J0aCB0dW5pbmcgdHJpbSB0aHJlc2hvbGRzIHdoZW4gYQorICBwcm9ncmFtIHVuZGVyZ29lcyBwaGFzZXMgd2hlcmUgc2V2ZXJhbCBsYXJnZSBjaHVua3MgYXJlIGFsbG9jYXRlZAorICBhbmQgcmVsZWFzZWQgaW4gd2F5cyB0aGF0IGNhbiByZXVzZSBlYWNoIG90aGVyJ3Mgc3RvcmFnZSwgcGVyaGFwcworICBtaXhlZCB3aXRoIHBoYXNlcyB3aGVyZSB0aGVyZSBhcmUgbm8gc3VjaCBjaHVua3MgYXQgYWxsLiBUaGUgdHJpbQorICB2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBwYWdlIHNpemUgdG8gaGF2ZSBhbnkgdXNlZnVsIGVmZmVjdC4gIFRvCisgIGRpc2FibGUgdHJpbW1pbmcgY29tcGxldGVseSwgeW91IGNhbiBzZXQgdG8gTUFYX1NJWkVfVC4gTm90ZSB0aGF0IHRoZSB0cmljaworICBzb21lIHBlb3BsZSB1c2Ugb2YgbWFsbG9jaW5nIGEgaHVnZSBzcGFjZSBhbmQgdGhlbiBmcmVlaW5nIGl0IGF0CisgIHByb2dyYW0gc3RhcnR1cCwgaW4gYW4gYXR0ZW1wdCB0byByZXNlcnZlIHN5c3RlbSBtZW1vcnksIGRvZXNuJ3QKKyAgaGF2ZSB0aGUgaW50ZW5kZWQgZWZmZWN0IHVuZGVyIGF1dG9tYXRpYyB0cmltbWluZywgc2luY2UgdGhhdCBtZW1vcnkKKyAgd2lsbCBpbW1lZGlhdGVseSBiZSByZXR1cm5lZCB0byB0aGUgc3lzdGVtLgorCitERUZBVUxUX01NQVBfVEhSRVNIT0xEICAgICAgIGRlZmF1bHQ6IDI1NksKKyAgICAgIEFsc28gc2V0dGFibGUgdXNpbmcgbWFsbG9wdChNX01NQVBfVEhSRVNIT0xELCB4KQorICBUaGUgcmVxdWVzdCBzaXplIHRocmVzaG9sZCBmb3IgdXNpbmcgTU1BUCB0byBkaXJlY3RseSBzZXJ2aWNlIGEKKyAgcmVxdWVzdC4gUmVxdWVzdHMgb2YgYXQgbGVhc3QgdGhpcyBzaXplIHRoYXQgY2Fubm90IGJlIGFsbG9jYXRlZAorICB1c2luZyBhbHJlYWR5LWV4aXN0aW5nIHNwYWNlIHdpbGwgYmUgc2VydmljZWQgdmlhIG1tYXAuICAoSWYgZW5vdWdoCisgIG5vcm1hbCBmcmVlZCBzcGFjZSBhbHJlYWR5IGV4aXN0cyBpdCBpcyB1c2VkIGluc3RlYWQuKSAgVXNpbmcgbW1hcAorICBzZWdyZWdhdGVzIHJlbGF0aXZlbHkgbGFyZ2UgY2h1bmtzIG9mIG1lbW9yeSBzbyB0aGF0IHRoZXkgY2FuIGJlCisgIGluZGl2aWR1YWxseSBvYnRhaW5lZCBhbmQgcmVsZWFzZWQgZnJvbSB0aGUgaG9zdCBzeXN0ZW0uIEEgcmVxdWVzdAorICBzZXJ2aWNlZCB0aHJvdWdoIG1tYXAgaXMgbmV2ZXIgcmV1c2VkIGJ5IGFueSBvdGhlciByZXF1ZXN0IChhdCBsZWFzdAorICBub3QgZGlyZWN0bHk7IHRoZSBzeXN0ZW0gbWF5IGp1c3Qgc28gaGFwcGVuIHRvIHJlbWFwIHN1Y2Nlc3NpdmUKKyAgcmVxdWVzdHMgdG8gdGhlIHNhbWUgbG9jYXRpb25zKS4gIFNlZ3JlZ2F0aW5nIHNwYWNlIGluIHRoaXMgd2F5IGhhcworICB0aGUgYmVuZWZpdHMgdGhhdDogTW1hcHBlZCBzcGFjZSBjYW4gYWx3YXlzIGJlIGluZGl2aWR1YWxseSByZWxlYXNlZAorICBiYWNrIHRvIHRoZSBzeXN0ZW0sIHdoaWNoIGhlbHBzIGtlZXAgdGhlIHN5c3RlbSBsZXZlbCBtZW1vcnkgZGVtYW5kcworICBvZiBhIGxvbmctbGl2ZWQgcHJvZ3JhbSBsb3cuICBBbHNvLCBtYXBwZWQgbWVtb3J5IGRvZXNuJ3QgYmVjb21lCisgIGBsb2NrZWQnIGJldHdlZW4gb3RoZXIgY2h1bmtzLCBhcyBjYW4gaGFwcGVuIHdpdGggbm9ybWFsbHkgYWxsb2NhdGVkCisgIGNodW5rcywgd2hpY2ggbWVhbnMgdGhhdCBldmVuIHRyaW1taW5nIHZpYSBtYWxsb2NfdHJpbSB3b3VsZCBub3QKKyAgcmVsZWFzZSB0aGVtLiAgSG93ZXZlciwgaXQgaGFzIHRoZSBkaXNhZHZhbnRhZ2UgdGhhdCB0aGUgc3BhY2UKKyAgY2Fubm90IGJlIHJlY2xhaW1lZCwgY29uc29saWRhdGVkLCBhbmQgdGhlbiB1c2VkIHRvIHNlcnZpY2UgbGF0ZXIKKyAgcmVxdWVzdHMsIGFzIGhhcHBlbnMgd2l0aCBub3JtYWwgY2h1bmtzLiAgVGhlIGFkdmFudGFnZXMgb2YgbW1hcAorICBuZWFybHkgYWx3YXlzIG91dHdlaWdoIGRpc2FkdmFudGFnZXMgZm9yICJsYXJnZSIgY2h1bmtzLCBidXQgdGhlCisgIHZhbHVlIG9mICJsYXJnZSIgbWF5IHZhcnkgYWNyb3NzIHN5c3RlbXMuICBUaGUgZGVmYXVsdCBpcyBhbgorICBlbXBpcmljYWxseSBkZXJpdmVkIHZhbHVlIHRoYXQgd29ya3Mgd2VsbCBpbiBtb3N0IHN5c3RlbXMuIFlvdSBjYW4KKyAgZGlzYWJsZSBtbWFwIGJ5IHNldHRpbmcgdG8gTUFYX1NJWkVfVC4KKworTUFYX1JFTEVBU0VfQ0hFQ0tfUkFURSAgIGRlZmF1bHQ6IDQwOTUgdW5sZXNzIG5vdCBIQVZFX01NQVAKKyAgVGhlIG51bWJlciBvZiBjb25zb2xpZGF0ZWQgZnJlZXMgYmV0d2VlbiBjaGVja3MgdG8gcmVsZWFzZQorICB1bnVzZWQgc2VnbWVudHMgd2hlbiBmcmVlaW5nLiBXaGVuIHVzaW5nIG5vbi1jb250aWd1b3VzIHNlZ21lbnRzLAorICBlc3BlY2lhbGx5IHdpdGggbXVsdGlwbGUgbXNwYWNlcywgY2hlY2tpbmcgb25seSBmb3IgdG9wbW9zdCBzcGFjZQorICBkb2Vzbid0IGFsd2F5cyBzdWZmaWNlIHRvIHRyaWdnZXIgdHJpbW1pbmcuIFRvIGNvbXBlbnNhdGUgZm9yIHRoaXMsCisgIGZyZWUoKSB3aWxsLCB3aXRoIGEgcGVyaW9kIG9mIE1BWF9SRUxFQVNFX0NIRUNLX1JBVEUgKG9yIHRoZQorICBjdXJyZW50IG51bWJlciBvZiBzZWdtZW50cywgaWYgZ3JlYXRlcikgdHJ5IHRvIHJlbGVhc2UgdW51c2VkCisgIHNlZ21lbnRzIHRvIHRoZSBPUyB3aGVuIGZyZWVpbmcgY2h1bmtzIHRoYXQgcmVzdWx0IGluCisgIGNvbnNvbGlkYXRpb24uIFRoZSBiZXN0IHZhbHVlIGZvciB0aGlzIHBhcmFtZXRlciBpcyBhIGNvbXByb21pc2UKKyAgYmV0d2VlbiBzbG93aW5nIGRvd24gZnJlZXMgd2l0aCByZWxhdGl2ZWx5IGNvc3RseSBjaGVja3MgdGhhdAorICByYXJlbHkgdHJpZ2dlciB2ZXJzdXMgaG9sZGluZyBvbiB0byB1bnVzZWQgbWVtb3J5LiBUbyBlZmZlY3RpdmVseQorICBkaXNhYmxlLCBzZXQgdG8gTUFYX1NJWkVfVC4gVGhpcyBtYXkgbGVhZCB0byBhIHZlcnkgc2xpZ2h0IHNwZWVkCisgIGltcHJvdmVtZW50IGF0IHRoZSBleHBlbnNlIG9mIGNhcnJ5aW5nIGFyb3VuZCBtb3JlIG1lbW9yeS4KKyovCisKKy8qIFZlcnNpb24gaWRlbnRpZmllciB0byBhbGxvdyBwZW9wbGUgdG8gc3VwcG9ydCBtdWx0aXBsZSB2ZXJzaW9ucyAqLworI2lmbmRlZiBETE1BTExPQ19WRVJTSU9OCisjZGVmaW5lIERMTUFMTE9DX1ZFUlNJT04gMjA4MDYKKyNlbmRpZiAvKiBETE1BTExPQ19WRVJTSU9OICovCisKKyNpZm5kZWYgRExNQUxMT0NfRVhQT1JUCisjZGVmaW5lIERMTUFMTE9DX0VYUE9SVCBleHRlcm4KKyNlbmRpZgorCisjaWZuZGVmIFdJTjMyCisjaWZkZWYgX1dJTjMyCisjZGVmaW5lIFdJTjMyIDEKKyNlbmRpZiAgLyogX1dJTjMyICovCisjaWZkZWYgX1dJTjMyX1dDRQorI2RlZmluZSBMQUNLU19GQ05UTF9ICisjZGVmaW5lIFdJTjMyIDEKKyNlbmRpZiAvKiBfV0lOMzJfV0NFICovCisjZW5kaWYgIC8qIFdJTjMyICovCisjaWZkZWYgV0lOMzIKKyNkZWZpbmUgV0lOMzJfTEVBTl9BTkRfTUVBTgorI2luY2x1ZGUgPHdpbmRvd3MuaD4KKyNpbmNsdWRlIDx0Y2hhci5oPgorI2RlZmluZSBIQVZFX01NQVAgMQorI2RlZmluZSBIQVZFX01PUkVDT1JFIDAKKyNkZWZpbmUgTEFDS1NfVU5JU1REX0gKKyNkZWZpbmUgTEFDS1NfU1lTX1BBUkFNX0gKKyNkZWZpbmUgTEFDS1NfU1lTX01NQU5fSAorI2RlZmluZSBMQUNLU19TVFJJTkdfSAorI2RlZmluZSBMQUNLU19TVFJJTkdTX0gKKyNkZWZpbmUgTEFDS1NfU1lTX1RZUEVTX0gKKyNkZWZpbmUgTEFDS1NfRVJSTk9fSAorI2RlZmluZSBMQUNLU19TQ0hFRF9ICisjaWZuZGVmIE1BTExPQ19GQUlMVVJFX0FDVElPTgorI2RlZmluZSBNQUxMT0NfRkFJTFVSRV9BQ1RJT04KKyNlbmRpZiAvKiBNQUxMT0NfRkFJTFVSRV9BQ1RJT04gKi8KKyNpZm5kZWYgTU1BUF9DTEVBUlMKKyNpZmRlZiBfV0lOMzJfV0NFIC8qIFdJTkNFIHJlcG9ydGVkbHkgZG9lcyBub3QgY2xlYXIgKi8KKyNkZWZpbmUgTU1BUF9DTEVBUlMgMAorI2Vsc2UKKyNkZWZpbmUgTU1BUF9DTEVBUlMgMQorI2VuZGlmIC8qIF9XSU4zMl9XQ0UgKi8KKyNlbmRpZiAvKk1NQVBfQ0xFQVJTICovCisjZW5kaWYgIC8qIFdJTjMyICovCisKKyNpZiBkZWZpbmVkKERBUldJTikgfHwgZGVmaW5lZChfREFSV0lOKQorLyogTWFjIE9TWCBkb2NzIGFkdmlzZSBub3QgdG8gdXNlIHNicms7IGl0IHNlZW1zIGJldHRlciB0byB1c2UgbW1hcCAqLworI2lmbmRlZiBIQVZFX01PUkVDT1JFCisjZGVmaW5lIEhBVkVfTU9SRUNPUkUgMAorI2RlZmluZSBIQVZFX01NQVAgMQorLyogT1NYIGFsbG9jYXRvcnMgcHJvdmlkZSAxNiBieXRlIGFsaWdubWVudCAqLworI2lmbmRlZiBNQUxMT0NfQUxJR05NRU5UCisjZGVmaW5lIE1BTExPQ19BTElHTk1FTlQgKChzaXplX3QpMTZVKQorI2VuZGlmCisjZW5kaWYgIC8qIEhBVkVfTU9SRUNPUkUgKi8KKyNlbmRpZiAgLyogREFSV0lOICovCisKKyNpZm5kZWYgTEFDS1NfU1lTX1RZUEVTX0gKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4gIC8qIEZvciBzaXplX3QgKi8KKyNlbmRpZiAgLyogTEFDS1NfU1lTX1RZUEVTX0ggKi8KKworLyogVGhlIG1heGltdW0gcG9zc2libGUgc2l6ZV90IHZhbHVlIGhhcyBhbGwgYml0cyBzZXQgKi8KKyNkZWZpbmUgTUFYX1NJWkVfVCAgICAgICAgICAgKH4oc2l6ZV90KTApCisKKyNpZm5kZWYgVVNFX0xPQ0tTIC8qIGVuc3VyZSB0cnVlIGlmIHNwaW4gb3IgcmVjdXJzaXZlIGxvY2tzIHNldCAqLworI2RlZmluZSBVU0VfTE9DS1MgICgoZGVmaW5lZChVU0VfU1BJTl9MT0NLUykgJiYgVVNFX1NQSU5fTE9DS1MgIT0gMCkgfHwgXAorICAgICAgICAgICAgICAgICAgICAoZGVmaW5lZChVU0VfUkVDVVJTSVZFX0xPQ0tTKSAmJiBVU0VfUkVDVVJTSVZFX0xPQ0tTICE9IDApKQorI2VuZGlmIC8qIFVTRV9MT0NLUyAqLworCisjaWYgVVNFX0xPQ0tTIC8qIFNwaW4gbG9ja3MgZm9yIGdjYyA+PSA0LjEsIG9sZGVyIGdjYyBvbiB4ODYsIE1TQyA+PSAxMzEwICovCisjaWYgKChkZWZpbmVkKF9fR05VQ19fKSAmJiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAoKF9fR05VQ19fID4gNCB8fCAoX19HTlVDX18gPT0gNCAmJiBfX0dOVUNfTUlOT1JfXyA+PSAxKSkgfHwgICAgICBcCisgICAgICAgZGVmaW5lZChfX2kzODZfXykgfHwgZGVmaW5lZChfX3g4Nl82NF9fKSkpIHx8ICAgICAgICAgICAgICAgICAgICBcCisgICAgIChkZWZpbmVkKF9NU0NfVkVSKSAmJiBfTVNDX1ZFUj49MTMxMCkpCisjaWZuZGVmIFVTRV9TUElOX0xPQ0tTCisjZGVmaW5lIFVTRV9TUElOX0xPQ0tTIDEKKyNlbmRpZiAvKiBVU0VfU1BJTl9MT0NLUyAqLworI2VsaWYgVVNFX1NQSU5fTE9DS1MKKyNlcnJvciAiVVNFX1NQSU5fTE9DS1MgZGVmaW5lZCB3aXRob3V0IGltcGxlbWVudGF0aW9uIgorI2VuZGlmIC8qIC4uLiBsb2NrcyBhdmFpbGFibGUuLi4gKi8KKyNlbGlmICFkZWZpbmVkKFVTRV9TUElOX0xPQ0tTKQorI2RlZmluZSBVU0VfU1BJTl9MT0NLUyAwCisjZW5kaWYgLyogVVNFX0xPQ0tTICovCisKKyNpZm5kZWYgT05MWV9NU1BBQ0VTCisjZGVmaW5lIE9OTFlfTVNQQUNFUyAwCisjZW5kaWYgIC8qIE9OTFlfTVNQQUNFUyAqLworI2lmbmRlZiBNU1BBQ0VTCisjaWYgT05MWV9NU1BBQ0VTCisjZGVmaW5lIE1TUEFDRVMgMQorI2Vsc2UgICAvKiBPTkxZX01TUEFDRVMgKi8KKyNkZWZpbmUgTVNQQUNFUyAwCisjZW5kaWYgIC8qIE9OTFlfTVNQQUNFUyAqLworI2VuZGlmICAvKiBNU1BBQ0VTICovCisjaWZuZGVmIE1BTExPQ19BTElHTk1FTlQKKyNkZWZpbmUgTUFMTE9DX0FMSUdOTUVOVCAoKHNpemVfdCkoMiAqIHNpemVvZih2b2lkICopKSkKKyNlbmRpZiAgLyogTUFMTE9DX0FMSUdOTUVOVCAqLworI2lmbmRlZiBGT09URVJTCisjZGVmaW5lIEZPT1RFUlMgMAorI2VuZGlmICAvKiBGT09URVJTICovCisjaWZuZGVmIEFCT1JUCisjZGVmaW5lIEFCT1JUICBhYm9ydCgpCisjZW5kaWYgIC8qIEFCT1JUICovCisjaWZuZGVmIEFCT1JUX09OX0FTU0VSVF9GQUlMVVJFCisjZGVmaW5lIEFCT1JUX09OX0FTU0VSVF9GQUlMVVJFIDEKKyNlbmRpZiAgLyogQUJPUlRfT05fQVNTRVJUX0ZBSUxVUkUgKi8KKyNpZm5kZWYgUFJPQ0VFRF9PTl9FUlJPUgorI2RlZmluZSBQUk9DRUVEX09OX0VSUk9SIDAKKyNlbmRpZiAgLyogUFJPQ0VFRF9PTl9FUlJPUiAqLworCisjaWZuZGVmIElOU0VDVVJFCisjZGVmaW5lIElOU0VDVVJFIDAKKyNlbmRpZiAgLyogSU5TRUNVUkUgKi8KKyNpZm5kZWYgTUFMTE9DX0lOU1BFQ1RfQUxMCisjZGVmaW5lIE1BTExPQ19JTlNQRUNUX0FMTCAwCisjZW5kaWYgIC8qIE1BTExPQ19JTlNQRUNUX0FMTCAqLworI2lmbmRlZiBIQVZFX01NQVAKKyNkZWZpbmUgSEFWRV9NTUFQIDEKKyNlbmRpZiAgLyogSEFWRV9NTUFQICovCisjaWZuZGVmIE1NQVBfQ0xFQVJTCisjZGVmaW5lIE1NQVBfQ0xFQVJTIDEKKyNlbmRpZiAgLyogTU1BUF9DTEVBUlMgKi8KKyNpZm5kZWYgSEFWRV9NUkVNQVAKKyNpZmRlZiBsaW51eAorI2RlZmluZSBIQVZFX01SRU1BUCAxCisjZGVmaW5lIF9HTlVfU09VUkNFIC8qIFR1cm5zIG9uIG1yZW1hcCgpIGRlZmluaXRpb24gKi8KKyNlbHNlICAgLyogbGludXggKi8KKyNkZWZpbmUgSEFWRV9NUkVNQVAgMAorI2VuZGlmICAvKiBsaW51eCAqLworI2VuZGlmICAvKiBIQVZFX01SRU1BUCAqLworI2lmbmRlZiBNQUxMT0NfRkFJTFVSRV9BQ1RJT04KKyNkZWZpbmUgTUFMTE9DX0ZBSUxVUkVfQUNUSU9OICBlcnJubyA9IEVOT01FTTsKKyNlbmRpZiAgLyogTUFMTE9DX0ZBSUxVUkVfQUNUSU9OICovCisjaWZuZGVmIEhBVkVfTU9SRUNPUkUKKyNpZiBPTkxZX01TUEFDRVMKKyNkZWZpbmUgSEFWRV9NT1JFQ09SRSAwCisjZWxzZSAgIC8qIE9OTFlfTVNQQUNFUyAqLworI2RlZmluZSBIQVZFX01PUkVDT1JFIDEKKyNlbmRpZiAgLyogT05MWV9NU1BBQ0VTICovCisjZW5kaWYgIC8qIEhBVkVfTU9SRUNPUkUgKi8KKyNpZiAhSEFWRV9NT1JFQ09SRQorI2RlZmluZSBNT1JFQ09SRV9DT05USUdVT1VTIDAKKyNlbHNlICAgLyogIUhBVkVfTU9SRUNPUkUgKi8KKyNkZWZpbmUgTU9SRUNPUkVfREVGQVVMVCBzYnJrCisjaWZuZGVmIE1PUkVDT1JFX0NPTlRJR1VPVVMKKyNkZWZpbmUgTU9SRUNPUkVfQ09OVElHVU9VUyAxCisjZW5kaWYgIC8qIE1PUkVDT1JFX0NPTlRJR1VPVVMgKi8KKyNlbmRpZiAgLyogSEFWRV9NT1JFQ09SRSAqLworI2lmbmRlZiBERUZBVUxUX0dSQU5VTEFSSVRZCisjaWYgKE1PUkVDT1JFX0NPTlRJR1VPVVMgfHwgZGVmaW5lZChXSU4zMikpCisjZGVmaW5lIERFRkFVTFRfR1JBTlVMQVJJVFkgKDApICAvKiAwIG1lYW5zIHRvIGNvbXB1dGUgaW4gaW5pdF9tcGFyYW1zICovCisjZWxzZSAgIC8qIE1PUkVDT1JFX0NPTlRJR1VPVVMgKi8KKyNkZWZpbmUgREVGQVVMVF9HUkFOVUxBUklUWSAoKHNpemVfdCk2NFUgKiAoc2l6ZV90KTEwMjRVKQorI2VuZGlmICAvKiBNT1JFQ09SRV9DT05USUdVT1VTICovCisjZW5kaWYgIC8qIERFRkFVTFRfR1JBTlVMQVJJVFkgKi8KKyNpZm5kZWYgREVGQVVMVF9UUklNX1RIUkVTSE9MRAorI2lmbmRlZiBNT1JFQ09SRV9DQU5OT1RfVFJJTQorI2RlZmluZSBERUZBVUxUX1RSSU1fVEhSRVNIT0xEICgoc2l6ZV90KTJVICogKHNpemVfdCkxMDI0VSAqIChzaXplX3QpMTAyNFUpCisjZWxzZSAgIC8qIE1PUkVDT1JFX0NBTk5PVF9UUklNICovCisjZGVmaW5lIERFRkFVTFRfVFJJTV9USFJFU0hPTEQgTUFYX1NJWkVfVAorI2VuZGlmICAvKiBNT1JFQ09SRV9DQU5OT1RfVFJJTSAqLworI2VuZGlmICAvKiBERUZBVUxUX1RSSU1fVEhSRVNIT0xEICovCisjaWZuZGVmIERFRkFVTFRfTU1BUF9USFJFU0hPTEQKKyNpZiBIQVZFX01NQVAKKyNkZWZpbmUgREVGQVVMVF9NTUFQX1RIUkVTSE9MRCAoKHNpemVfdCkyNTZVICogKHNpemVfdCkxMDI0VSkKKyNlbHNlICAgLyogSEFWRV9NTUFQICovCisjZGVmaW5lIERFRkFVTFRfTU1BUF9USFJFU0hPTEQgTUFYX1NJWkVfVAorI2VuZGlmICAvKiBIQVZFX01NQVAgKi8KKyNlbmRpZiAgLyogREVGQVVMVF9NTUFQX1RIUkVTSE9MRCAqLworI2lmbmRlZiBNQVhfUkVMRUFTRV9DSEVDS19SQVRFCisjaWYgSEFWRV9NTUFQCisjZGVmaW5lIE1BWF9SRUxFQVNFX0NIRUNLX1JBVEUgNDA5NQorI2Vsc2UKKyNkZWZpbmUgTUFYX1JFTEVBU0VfQ0hFQ0tfUkFURSBNQVhfU0laRV9UCisjZW5kaWYgLyogSEFWRV9NTUFQICovCisjZW5kaWYgLyogTUFYX1JFTEVBU0VfQ0hFQ0tfUkFURSAqLworI2lmbmRlZiBVU0VfQlVJTFRJTl9GRlMKKyNkZWZpbmUgVVNFX0JVSUxUSU5fRkZTIDAKKyNlbmRpZiAgLyogVVNFX0JVSUxUSU5fRkZTICovCisjaWZuZGVmIFVTRV9ERVZfUkFORE9NCisjZGVmaW5lIFVTRV9ERVZfUkFORE9NIDAKKyNlbmRpZiAgLyogVVNFX0RFVl9SQU5ET00gKi8KKyNpZm5kZWYgTk9fTUFMTElORk8KKyNkZWZpbmUgTk9fTUFMTElORk8gMAorI2VuZGlmICAvKiBOT19NQUxMSU5GTyAqLworI2lmbmRlZiBNQUxMSU5GT19GSUVMRF9UWVBFCisjZGVmaW5lIE1BTExJTkZPX0ZJRUxEX1RZUEUgc2l6ZV90CisjZW5kaWYgIC8qIE1BTExJTkZPX0ZJRUxEX1RZUEUgKi8KKyNpZm5kZWYgTk9fTUFMTE9DX1NUQVRTCisjZGVmaW5lIE5PX01BTExPQ19TVEFUUyAwCisjZW5kaWYgIC8qIE5PX01BTExPQ19TVEFUUyAqLworI2lmbmRlZiBOT19TRUdNRU5UX1RSQVZFUlNBTAorI2RlZmluZSBOT19TRUdNRU5UX1RSQVZFUlNBTCAwCisjZW5kaWYgLyogTk9fU0VHTUVOVF9UUkFWRVJTQUwgKi8KKworLyoKKyAgbWFsbG9wdCB0dW5pbmcgb3B0aW9ucy4gIFNWSUQvWFBHIGRlZmluZXMgZm91ciBzdGFuZGFyZCBwYXJhbWV0ZXIKKyAgbnVtYmVycyBmb3IgbWFsbG9wdCwgbm9ybWFsbHkgZGVmaW5lZCBpbiBtYWxsb2MuaC4gIE5vbmUgb2YgdGhlc2UKKyAgYXJlIHVzZWQgaW4gdGhpcyBtYWxsb2MsIHNvIHNldHRpbmcgdGhlbSBoYXMgbm8gZWZmZWN0LiBCdXQgdGhpcworICBtYWxsb2MgZG9lcyBzdXBwb3J0IHRoZSBmb2xsb3dpbmcgb3B0aW9ucy4KKyovCisKKyNkZWZpbmUgTV9UUklNX1RIUkVTSE9MRCAgICAgKC0xKQorI2RlZmluZSBNX0dSQU5VTEFSSVRZICAgICAgICAoLTIpCisjZGVmaW5lIE1fTU1BUF9USFJFU0hPTEQgICAgICgtMykKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIE1hbGxpbmZvIGRlY2xhcmF0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2lmICFOT19NQUxMSU5GTworLyoKKyAgVGhpcyB2ZXJzaW9uIG9mIG1hbGxvYyBzdXBwb3J0cyB0aGUgc3RhbmRhcmQgU1ZJRC9YUEcgbWFsbGluZm8KKyAgcm91dGluZSB0aGF0IHJldHVybnMgYSBzdHJ1Y3QgY29udGFpbmluZyB1c2FnZSBwcm9wZXJ0aWVzIGFuZAorICBzdGF0aXN0aWNzLiBJdCBzaG91bGQgd29yayBvbiBhbnkgc3lzdGVtIHRoYXQgaGFzIGEKKyAgL3Vzci9pbmNsdWRlL21hbGxvYy5oIGRlZmluaW5nIHN0cnVjdCBtYWxsaW5mby4gIFRoZSBtYWluCisgIGRlY2xhcmF0aW9uIG5lZWRlZCBpcyB0aGUgbWFsbGluZm8gc3RydWN0IHRoYXQgaXMgcmV0dXJuZWQgKGJ5LWNvcHkpCisgIGJ5IG1hbGxpbmZvKCkuICBUaGUgbWFsbG9pbmZvIHN0cnVjdCBjb250YWlucyBhIGJ1bmNoIG9mIGZpZWxkcyB0aGF0CisgIGFyZSBub3QgZXZlbiBtZWFuaW5nZnVsIGluIHRoaXMgdmVyc2lvbiBvZiBtYWxsb2MuICBUaGVzZSBmaWVsZHMgYXJlCisgIGFyZSBpbnN0ZWFkIGZpbGxlZCBieSBtYWxsaW5mbygpIHdpdGggb3RoZXIgbnVtYmVycyB0aGF0IG1pZ2h0IGJlIG9mCisgIGludGVyZXN0LgorCisgIEhBVkVfVVNSX0lOQ0xVREVfTUFMTE9DX0ggc2hvdWxkIGJlIHNldCBpZiB5b3UgaGF2ZSBhCisgIC91c3IvaW5jbHVkZS9tYWxsb2MuaCBmaWxlIHRoYXQgaW5jbHVkZXMgYSBkZWNsYXJhdGlvbiBvZiBzdHJ1Y3QKKyAgbWFsbGluZm8uICBJZiBzbywgaXQgaXMgaW5jbHVkZWQ7IGVsc2UgYSBjb21wbGlhbnQgdmVyc2lvbiBpcworICBkZWNsYXJlZCBiZWxvdy4gIFRoZXNlIG11c3QgYmUgcHJlY2lzZWx5IHRoZSBzYW1lIGZvciBtYWxsaW5mbygpIHRvCisgIHdvcmsuICBUaGUgb3JpZ2luYWwgU1ZJRCB2ZXJzaW9uIG9mIHRoaXMgc3RydWN0LCBkZWZpbmVkIG9uIG1vc3QKKyAgc3lzdGVtcyB3aXRoIG1hbGxpbmZvLCBkZWNsYXJlcyBhbGwgZmllbGRzIGFzIGludHMuIEJ1dCBzb21lIG90aGVycworICBkZWZpbmUgYXMgdW5zaWduZWQgbG9uZy4gSWYgeW91ciBzeXN0ZW0gZGVmaW5lcyB0aGUgZmllbGRzIHVzaW5nIGEKKyAgdHlwZSBvZiBkaWZmZXJlbnQgd2lkdGggdGhhbiBsaXN0ZWQgaGVyZSwgeW91IE1VU1QgI2luY2x1ZGUgeW91cgorICBzeXN0ZW0gdmVyc2lvbiBhbmQgI2RlZmluZSBIQVZFX1VTUl9JTkNMVURFX01BTExPQ19ILgorKi8KKworLyogI2RlZmluZSBIQVZFX1VTUl9JTkNMVURFX01BTExPQ19IICovCisKKyNpZmRlZiBIQVZFX1VTUl9JTkNMVURFX01BTExPQ19ICisjaW5jbHVkZSAiL3Vzci9pbmNsdWRlL21hbGxvYy5oIgorI2Vsc2UgLyogSEFWRV9VU1JfSU5DTFVERV9NQUxMT0NfSCAqLworI2lmbmRlZiBTVFJVQ1RfTUFMTElORk9fREVDTEFSRUQKKy8qIEhQLVVYIChhbmQgb3RoZXJzPykgcmVkZWZpbmVzIG1hbGxpbmZvIHVubGVzcyBfU1RSVUNUX01BTExJTkZPIGlzIGRlZmluZWQgKi8KKyNkZWZpbmUgX1NUUlVDVF9NQUxMSU5GTworI2RlZmluZSBTVFJVQ1RfTUFMTElORk9fREVDTEFSRUQgMQorc3RydWN0IG1hbGxpbmZvIHsKKyAgTUFMTElORk9fRklFTERfVFlQRSBhcmVuYTsgICAgLyogbm9uLW1tYXBwZWQgc3BhY2UgYWxsb2NhdGVkIGZyb20gc3lzdGVtICovCisgIE1BTExJTkZPX0ZJRUxEX1RZUEUgb3JkYmxrczsgIC8qIG51bWJlciBvZiBmcmVlIGNodW5rcyAqLworICBNQUxMSU5GT19GSUVMRF9UWVBFIHNtYmxrczsgICAvKiBhbHdheXMgMCAqLworICBNQUxMSU5GT19GSUVMRF9UWVBFIGhibGtzOyAgICAvKiBhbHdheXMgMCAqLworICBNQUxMSU5GT19GSUVMRF9UWVBFIGhibGtoZDsgICAvKiBzcGFjZSBpbiBtbWFwcGVkIHJlZ2lvbnMgKi8KKyAgTUFMTElORk9fRklFTERfVFlQRSB1c21ibGtzOyAgLyogbWF4aW11bSB0b3RhbCBhbGxvY2F0ZWQgc3BhY2UgKi8KKyAgTUFMTElORk9fRklFTERfVFlQRSBmc21ibGtzOyAgLyogYWx3YXlzIDAgKi8KKyAgTUFMTElORk9fRklFTERfVFlQRSB1b3JkYmxrczsgLyogdG90YWwgYWxsb2NhdGVkIHNwYWNlICovCisgIE1BTExJTkZPX0ZJRUxEX1RZUEUgZm9yZGJsa3M7IC8qIHRvdGFsIGZyZWUgc3BhY2UgKi8KKyAgTUFMTElORk9fRklFTERfVFlQRSBrZWVwY29zdDsgLyogcmVsZWFzYWJsZSAodmlhIG1hbGxvY190cmltKSBzcGFjZSAqLworfTsKKyNlbmRpZiAvKiBTVFJVQ1RfTUFMTElORk9fREVDTEFSRUQgKi8KKyNlbmRpZiAvKiBIQVZFX1VTUl9JTkNMVURFX01BTExPQ19IICovCisjZW5kaWYgLyogTk9fTUFMTElORk8gKi8KKworLyoKKyAgVHJ5IHRvIHBlcnN1YWRlIGNvbXBpbGVycyB0byBpbmxpbmUuIFRoZSBtb3N0IGNyaXRpY2FsIGZ1bmN0aW9ucyBmb3IKKyAgaW5saW5pbmcgYXJlIGRlZmluZWQgYXMgbWFjcm9zLCBzbyB0aGVzZSBhcmVuJ3QgdXNlZCBmb3IgdGhlbS4KKyovCisKKyNpZm5kZWYgRk9SQ0VJTkxJTkUKKyAgI2lmIGRlZmluZWQoX19HTlVDX18pCisjZGVmaW5lIEZPUkNFSU5MSU5FIF9faW5saW5lIF9fYXR0cmlidXRlX18gKChhbHdheXNfaW5saW5lKSkKKyAgI2VsaWYgZGVmaW5lZChfTVNDX1ZFUikKKyAgICAjZGVmaW5lIEZPUkNFSU5MSU5FIF9fZm9yY2VpbmxpbmUKKyAgI2VuZGlmCisjZW5kaWYKKyNpZm5kZWYgTk9JTkxJTkUKKyAgI2lmIGRlZmluZWQoX19HTlVDX18pCisgICAgI2RlZmluZSBOT0lOTElORSBfX2F0dHJpYnV0ZV9fICgobm9pbmxpbmUpKQorICAjZWxpZiBkZWZpbmVkKF9NU0NfVkVSKQorICAgICNkZWZpbmUgTk9JTkxJTkUgX19kZWNsc3BlYyhub2lubGluZSkKKyAgI2Vsc2UKKyAgICAjZGVmaW5lIE5PSU5MSU5FCisgICNlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjaWZuZGVmIEZPUkNFSU5MSU5FCisgI2RlZmluZSBGT1JDRUlOTElORSBpbmxpbmUKKyNlbmRpZgorI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisjaWZuZGVmIEZPUkNFSU5MSU5FCisgI2RlZmluZSBGT1JDRUlOTElORQorI2VuZGlmCisKKyNpZiAhT05MWV9NU1BBQ0VTCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0gRGVjbGFyYXRpb25zIG9mIHB1YmxpYyByb3V0aW5lcyAtLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNpZm5kZWYgVVNFX0RMX1BSRUZJWAorI2RlZmluZSBkbGNhbGxvYyAgICAgICAgICAgICAgIGNhbGxvYworI2RlZmluZSBkbGZyZWUgICAgICAgICAgICAgICAgIGZyZWUKKyNkZWZpbmUgZGxtYWxsb2MgICAgICAgICAgICAgICBtYWxsb2MKKyNkZWZpbmUgZGxtZW1hbGlnbiAgICAgICAgICAgICBtZW1hbGlnbgorI2RlZmluZSBkbHBvc2l4X21lbWFsaWduICAgICAgIHBvc2l4X21lbWFsaWduCisjZGVmaW5lIGRscmVhbGxvYyAgICAgICAgICAgICAgcmVhbGxvYworI2RlZmluZSBkbHJlYWxsb2NfaW5fcGxhY2UgICAgIHJlYWxsb2NfaW5fcGxhY2UKKyNkZWZpbmUgZGx2YWxsb2MgICAgICAgICAgICAgICB2YWxsb2MKKyNkZWZpbmUgZGxwdmFsbG9jICAgICAgICAgICAgICBwdmFsbG9jCisjZGVmaW5lIGRsbWFsbGluZm8gICAgICAgICAgICAgbWFsbGluZm8KKyNkZWZpbmUgZGxtYWxsb3B0ICAgICAgICAgICAgICBtYWxsb3B0CisjZGVmaW5lIGRsbWFsbG9jX3RyaW0gICAgICAgICAgbWFsbG9jX3RyaW0KKyNkZWZpbmUgZGxtYWxsb2Nfc3RhdHMgICAgICAgICBtYWxsb2Nfc3RhdHMKKyNkZWZpbmUgZGxtYWxsb2NfdXNhYmxlX3NpemUgICBtYWxsb2NfdXNhYmxlX3NpemUKKyNkZWZpbmUgZGxtYWxsb2NfZm9vdHByaW50ICAgICBtYWxsb2NfZm9vdHByaW50CisjZGVmaW5lIGRsbWFsbG9jX21heF9mb290cHJpbnQgbWFsbG9jX21heF9mb290cHJpbnQKKyNkZWZpbmUgZGxtYWxsb2NfZm9vdHByaW50X2xpbWl0IG1hbGxvY19mb290cHJpbnRfbGltaXQKKyNkZWZpbmUgZGxtYWxsb2Nfc2V0X2Zvb3RwcmludF9saW1pdCBtYWxsb2Nfc2V0X2Zvb3RwcmludF9saW1pdAorI2RlZmluZSBkbG1hbGxvY19pbnNwZWN0X2FsbCAgIG1hbGxvY19pbnNwZWN0X2FsbAorI2RlZmluZSBkbGluZGVwZW5kZW50X2NhbGxvYyAgIGluZGVwZW5kZW50X2NhbGxvYworI2RlZmluZSBkbGluZGVwZW5kZW50X2NvbWFsbG9jIGluZGVwZW5kZW50X2NvbWFsbG9jCisjZGVmaW5lIGRsYnVsa19mcmVlICAgICAgICAgICAgYnVsa19mcmVlCisjZW5kaWYgLyogVVNFX0RMX1BSRUZJWCAqLworCisvKgorICBtYWxsb2Moc2l6ZV90IG4pCisgIFJldHVybnMgYSBwb2ludGVyIHRvIGEgbmV3bHkgYWxsb2NhdGVkIGNodW5rIG9mIGF0IGxlYXN0IG4gYnl0ZXMsIG9yCisgIG51bGwgaWYgbm8gc3BhY2UgaXMgYXZhaWxhYmxlLCBpbiB3aGljaCBjYXNlIGVycm5vIGlzIHNldCB0byBFTk9NRU0KKyAgb24gQU5TSSBDIHN5c3RlbXMuCisKKyAgSWYgbiBpcyB6ZXJvLCBtYWxsb2MgcmV0dXJucyBhIG1pbmltdW0tc2l6ZWQgY2h1bmsuIChUaGUgbWluaW11bQorICBzaXplIGlzIDE2IGJ5dGVzIG9uIG1vc3QgMzJiaXQgc3lzdGVtcywgYW5kIDMyIGJ5dGVzIG9uIDY0Yml0CisgIHN5c3RlbXMuKSAgTm90ZSB0aGF0IHNpemVfdCBpcyBhbiB1bnNpZ25lZCB0eXBlLCBzbyBjYWxscyB3aXRoCisgIGFyZ3VtZW50cyB0aGF0IHdvdWxkIGJlIG5lZ2F0aXZlIGlmIHNpZ25lZCBhcmUgaW50ZXJwcmV0ZWQgYXMKKyAgcmVxdWVzdHMgZm9yIGh1Z2UgYW1vdW50cyBvZiBzcGFjZSwgd2hpY2ggd2lsbCBvZnRlbiBmYWlsLiBUaGUKKyAgbWF4aW11bSBzdXBwb3J0ZWQgdmFsdWUgb2YgbiBkaWZmZXJzIGFjcm9zcyBzeXN0ZW1zLCBidXQgaXMgaW4gYWxsCisgIGNhc2VzIGxlc3MgdGhhbiB0aGUgbWF4aW11bSByZXByZXNlbnRhYmxlIHZhbHVlIG9mIGEgc2l6ZV90LgorKi8KK0RMTUFMTE9DX0VYUE9SVCB2b2lkKiBkbG1hbGxvYyhzaXplX3QpOworCisvKgorICBmcmVlKHZvaWQqIHApCisgIFJlbGVhc2VzIHRoZSBjaHVuayBvZiBtZW1vcnkgcG9pbnRlZCB0byBieSBwLCB0aGF0IGhhZCBiZWVuIHByZXZpb3VzbHkKKyAgYWxsb2NhdGVkIHVzaW5nIG1hbGxvYyBvciBhIHJlbGF0ZWQgcm91dGluZSBzdWNoIGFzIHJlYWxsb2MuCisgIEl0IGhhcyBubyBlZmZlY3QgaWYgcCBpcyBudWxsLiBJZiBwIHdhcyBub3QgbWFsbG9jZWQgb3IgYWxyZWFkeQorICBmcmVlZCwgZnJlZShwKSB3aWxsIGJ5IGRlZmF1bHQgY2F1c2UgdGhlIGN1cnJlbnQgcHJvZ3JhbSB0byBhYm9ydC4KKyovCitETE1BTExPQ19FWFBPUlQgdm9pZCAgZGxmcmVlKHZvaWQqKTsKKworLyoKKyAgY2FsbG9jKHNpemVfdCBuX2VsZW1lbnRzLCBzaXplX3QgZWxlbWVudF9zaXplKTsKKyAgUmV0dXJucyBhIHBvaW50ZXIgdG8gbl9lbGVtZW50cyAqIGVsZW1lbnRfc2l6ZSBieXRlcywgd2l0aCBhbGwgbG9jYXRpb25zCisgIHNldCB0byB6ZXJvLgorKi8KK0RMTUFMTE9DX0VYUE9SVCB2b2lkKiBkbGNhbGxvYyhzaXplX3QsIHNpemVfdCk7CisKKy8qCisgIHJlYWxsb2Modm9pZCogcCwgc2l6ZV90IG4pCisgIFJldHVybnMgYSBwb2ludGVyIHRvIGEgY2h1bmsgb2Ygc2l6ZSBuIHRoYXQgY29udGFpbnMgdGhlIHNhbWUgZGF0YQorICBhcyBkb2VzIGNodW5rIHAgdXAgdG8gdGhlIG1pbmltdW0gb2YgKG4sIHAncyBzaXplKSBieXRlcywgb3IgbnVsbAorICBpZiBubyBzcGFjZSBpcyBhdmFpbGFibGUuCisKKyAgVGhlIHJldHVybmVkIHBvaW50ZXIgbWF5IG9yIG1heSBub3QgYmUgdGhlIHNhbWUgYXMgcC4gVGhlIGFsZ29yaXRobQorICBwcmVmZXJzIGV4dGVuZGluZyBwIGluIG1vc3QgY2FzZXMgd2hlbiBwb3NzaWJsZSwgb3RoZXJ3aXNlIGl0CisgIGVtcGxveXMgdGhlIGVxdWl2YWxlbnQgb2YgYSBtYWxsb2MtY29weS1mcmVlIHNlcXVlbmNlLgorCisgIElmIHAgaXMgbnVsbCwgcmVhbGxvYyBpcyBlcXVpdmFsZW50IHRvIG1hbGxvYy4KKworICBJZiBzcGFjZSBpcyBub3QgYXZhaWxhYmxlLCByZWFsbG9jIHJldHVybnMgbnVsbCwgZXJybm8gaXMgc2V0IChpZiBvbgorICBBTlNJKSBhbmQgcCBpcyBOT1QgZnJlZWQuCisKKyAgaWYgbiBpcyBmb3IgZmV3ZXIgYnl0ZXMgdGhhbiBhbHJlYWR5IGhlbGQgYnkgcCwgdGhlIG5ld2x5IHVudXNlZAorICBzcGFjZSBpcyBsb3BwZWQgb2ZmIGFuZCBmcmVlZCBpZiBwb3NzaWJsZS4gIHJlYWxsb2Mgd2l0aCBhIHNpemUKKyAgYXJndW1lbnQgb2YgemVybyAocmUpYWxsb2NhdGVzIGEgbWluaW11bS1zaXplZCBjaHVuay4KKworICBUaGUgb2xkIHVuaXggcmVhbGxvYyBjb252ZW50aW9uIG9mIGFsbG93aW5nIHRoZSBsYXN0LWZyZWUnZCBjaHVuaworICB0byBiZSB1c2VkIGFzIGFuIGFyZ3VtZW50IHRvIHJlYWxsb2MgaXMgbm90IHN1cHBvcnRlZC4KKyovCitETE1BTExPQ19FWFBPUlQgdm9pZCogZGxyZWFsbG9jKHZvaWQqLCBzaXplX3QpOworCisvKgorICByZWFsbG9jX2luX3BsYWNlKHZvaWQqIHAsIHNpemVfdCBuKQorICBSZXNpemVzIHRoZSBzcGFjZSBhbGxvY2F0ZWQgZm9yIHAgdG8gc2l6ZSBuLCBvbmx5IGlmIHRoaXMgY2FuIGJlCisgIGRvbmUgd2l0aG91dCBtb3ZpbmcgcCAoaS5lLiwgb25seSBpZiB0aGVyZSBpcyBhZGphY2VudCBzcGFjZQorICBhdmFpbGFibGUgaWYgbiBpcyBncmVhdGVyIHRoYW4gcCdzIGN1cnJlbnQgYWxsb2NhdGVkIHNpemUsIG9yIG4gaXMKKyAgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHAncyBzaXplKS4gVGhpcyBtYXkgYmUgdXNlZCBpbnN0ZWFkIG9mIHBsYWluCisgIHJlYWxsb2MgaWYgYW4gYWx0ZXJuYXRpdmUgYWxsb2NhdGlvbiBzdHJhdGVneSBpcyBuZWVkZWQgdXBvbiBmYWlsdXJlCisgIHRvIGV4cGFuZCBzcGFjZTsgZm9yIGV4YW1wbGUsIHJlYWxsb2NhdGlvbiBvZiBhIGJ1ZmZlciB0aGF0IG11c3QgYmUKKyAgbWVtb3J5LWFsaWduZWQgb3IgY2xlYXJlZC4gWW91IGNhbiB1c2UgcmVhbGxvY19pbl9wbGFjZSB0byB0cmlnZ2VyCisgIHRoZXNlIGFsdGVybmF0aXZlcyBvbmx5IHdoZW4gbmVlZGVkLgorCisgIFJldHVybnMgcCBpZiBzdWNjZXNzZnVsOyBvdGhlcndpc2UgbnVsbC4KKyovCitETE1BTExPQ19FWFBPUlQgdm9pZCogZGxyZWFsbG9jX2luX3BsYWNlKHZvaWQqLCBzaXplX3QpOworCisvKgorICBtZW1hbGlnbihzaXplX3QgYWxpZ25tZW50LCBzaXplX3Qgbik7CisgIFJldHVybnMgYSBwb2ludGVyIHRvIGEgbmV3bHkgYWxsb2NhdGVkIGNodW5rIG9mIG4gYnl0ZXMsIGFsaWduZWQKKyAgaW4gYWNjb3JkIHdpdGggdGhlIGFsaWdubWVudCBhcmd1bWVudC4KKworICBUaGUgYWxpZ25tZW50IGFyZ3VtZW50IHNob3VsZCBiZSBhIHBvd2VyIG9mIHR3by4gSWYgdGhlIGFyZ3VtZW50IGlzCisgIG5vdCBhIHBvd2VyIG9mIHR3bywgdGhlIG5lYXJlc3QgZ3JlYXRlciBwb3dlciBpcyB1c2VkLgorICA4LWJ5dGUgYWxpZ25tZW50IGlzIGd1YXJhbnRlZWQgYnkgbm9ybWFsIG1hbGxvYyBjYWxscywgc28gZG9uJ3QKKyAgYm90aGVyIGNhbGxpbmcgbWVtYWxpZ24gd2l0aCBhbiBhcmd1bWVudCBvZiA4IG9yIGxlc3MuCisKKyAgT3ZlcnJlbGlhbmNlIG9uIG1lbWFsaWduIGlzIGEgc3VyZSB3YXkgdG8gZnJhZ21lbnQgc3BhY2UuCisqLworRExNQUxMT0NfRVhQT1JUIHZvaWQqIGRsbWVtYWxpZ24oc2l6ZV90LCBzaXplX3QpOworCisvKgorICBpbnQgcG9zaXhfbWVtYWxpZ24odm9pZCoqIHBwLCBzaXplX3QgYWxpZ25tZW50LCBzaXplX3Qgbik7CisgIEFsbG9jYXRlcyBhIGNodW5rIG9mIG4gYnl0ZXMsIGFsaWduZWQgaW4gYWNjb3JkIHdpdGggdGhlIGFsaWdubWVudAorICBhcmd1bWVudC4gRGlmZmVycyBmcm9tIG1lbWFsaWduIG9ubHkgaW4gdGhhdCBpdCAoMSkgYXNzaWducyB0aGUKKyAgYWxsb2NhdGVkIG1lbW9yeSB0byAqcHAgcmF0aGVyIHRoYW4gcmV0dXJuaW5nIGl0LCAoMikgZmFpbHMgYW5kCisgIHJldHVybnMgRUlOVkFMIGlmIHRoZSBhbGlnbm1lbnQgaXMgbm90IGEgcG93ZXIgb2YgdHdvICgzKSBmYWlscyBhbmQKKyAgcmV0dXJucyBFTk9NRU0gaWYgbWVtb3J5IGNhbm5vdCBiZSBhbGxvY2F0ZWQuCisqLworRExNQUxMT0NfRVhQT1JUIGludCBkbHBvc2l4X21lbWFsaWduKHZvaWQqKiwgc2l6ZV90LCBzaXplX3QpOworCisvKgorICB2YWxsb2Moc2l6ZV90IG4pOworICBFcXVpdmFsZW50IHRvIG1lbWFsaWduKHBhZ2VzaXplLCBuKSwgd2hlcmUgcGFnZXNpemUgaXMgdGhlIHBhZ2UKKyAgc2l6ZSBvZiB0aGUgc3lzdGVtLiBJZiB0aGUgcGFnZXNpemUgaXMgdW5rbm93biwgNDA5NiBpcyB1c2VkLgorKi8KK0RMTUFMTE9DX0VYUE9SVCB2b2lkKiBkbHZhbGxvYyhzaXplX3QpOworCisvKgorICBtYWxsb3B0KGludCBwYXJhbWV0ZXJfbnVtYmVyLCBpbnQgcGFyYW1ldGVyX3ZhbHVlKQorICBTZXRzIHR1bmFibGUgcGFyYW1ldGVycyBUaGUgZm9ybWF0IGlzIHRvIHByb3ZpZGUgYQorICAocGFyYW1ldGVyLW51bWJlciwgcGFyYW1ldGVyLXZhbHVlKSBwYWlyLiAgbWFsbG9wdCB0aGVuIHNldHMgdGhlCisgIGNvcnJlc3BvbmRpbmcgcGFyYW1ldGVyIHRvIHRoZSBhcmd1bWVudCB2YWx1ZSBpZiBpdCBjYW4gKGkuZS4sIHNvCisgIGxvbmcgYXMgdGhlIHZhbHVlIGlzIG1lYW5pbmdmdWwpLCBhbmQgcmV0dXJucyAxIGlmIHN1Y2Nlc3NmdWwgZWxzZQorICAwLiAgVG8gd29ya2Fyb3VuZCB0aGUgZmFjdCB0aGF0IG1hbGxvcHQgaXMgc3BlY2lmaWVkIHRvIHVzZSBpbnQsCisgIG5vdCBzaXplX3QgcGFyYW1ldGVycywgdGhlIHZhbHVlIC0xIGlzIHNwZWNpYWxseSB0cmVhdGVkIGFzIHRoZQorICBtYXhpbXVtIHVuc2lnbmVkIHNpemVfdCB2YWx1ZS4KKworICBTVklEL1hQRy9BTlNJIGRlZmluZXMgZm91ciBzdGFuZGFyZCBwYXJhbSBudW1iZXJzIGZvciBtYWxsb3B0LAorICBub3JtYWxseSBkZWZpbmVkIGluIG1hbGxvYy5oLiAgTm9uZSBvZiB0aGVzZSBhcmUgdXNlIGluIHRoaXMgbWFsbG9jLAorICBzbyBzZXR0aW5nIHRoZW0gaGFzIG5vIGVmZmVjdC4gQnV0IHRoaXMgbWFsbG9jIGFsc28gc3VwcG9ydHMgb3RoZXIKKyAgb3B0aW9ucyBpbiBtYWxsb3B0LiBTZWUgYmVsb3cgZm9yIGRldGFpbHMuICBCcmllZmx5LCBzdXBwb3J0ZWQKKyAgcGFyYW1ldGVycyBhcmUgYXMgZm9sbG93cyAobGlzdGVkIGRlZmF1bHRzIGFyZSBmb3IgInR5cGljYWwiCisgIGNvbmZpZ3VyYXRpb25zKS4KKworICBTeW1ib2wgICAgICAgICAgICBwYXJhbSAjICBkZWZhdWx0ICAgIGFsbG93ZWQgcGFyYW0gdmFsdWVzCisgIE1fVFJJTV9USFJFU0hPTEQgICAgIC0xICAgMioxMDI0KjEwMjQgICBhbnkgICAoLTEgZGlzYWJsZXMpCisgIE1fR1JBTlVMQVJJVFkgICAgICAgIC0yICAgICBwYWdlIHNpemUgICBhbnkgcG93ZXIgb2YgMiA+PSBwYWdlIHNpemUKKyAgTV9NTUFQX1RIUkVTSE9MRCAgICAgLTMgICAgICAyNTYqMTAyNCAgIGFueSAgIChvciAwIGlmIG5vIE1NQVAgc3VwcG9ydCkKKyovCitETE1BTExPQ19FWFBPUlQgaW50IGRsbWFsbG9wdChpbnQsIGludCk7CisKKy8qCisgIG1hbGxvY19mb290cHJpbnQoKTsKKyAgUmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIG9idGFpbmVkIGZyb20gdGhlIHN5c3RlbS4gIFRoZSB0b3RhbAorICBudW1iZXIgb2YgYnl0ZXMgYWxsb2NhdGVkIGJ5IG1hbGxvYywgcmVhbGxvYyBldGMuLCBpcyBsZXNzIHRoYW4gdGhpcworICB2YWx1ZS4gVW5saWtlIG1hbGxpbmZvLCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgb25seSBhIHByZWNvbXB1dGVkCisgIHJlc3VsdCwgc28gY2FuIGJlIGNhbGxlZCBmcmVxdWVudGx5IHRvIG1vbml0b3IgbWVtb3J5IGNvbnN1bXB0aW9uLgorICBFdmVuIGlmIGxvY2tzIGFyZSBvdGhlcndpc2UgZGVmaW5lZCwgdGhpcyBmdW5jdGlvbiBkb2VzIG5vdCB1c2UgdGhlbSwKKyAgc28gcmVzdWx0cyBtaWdodCBub3QgYmUgdXAgdG8gZGF0ZS4KKyovCitETE1BTExPQ19FWFBPUlQgc2l6ZV90IGRsbWFsbG9jX2Zvb3RwcmludCh2b2lkKTsKKworLyoKKyAgbWFsbG9jX21heF9mb290cHJpbnQoKTsKKyAgUmV0dXJucyB0aGUgbWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgb2J0YWluZWQgZnJvbSB0aGUgc3lzdGVtLiBUaGlzCisgIHZhbHVlIHdpbGwgYmUgZ3JlYXRlciB0aGFuIGN1cnJlbnQgZm9vdHByaW50IGlmIGRlYWxsb2NhdGVkIHNwYWNlCisgIGhhcyBiZWVuIHJlY2xhaW1lZCBieSB0aGUgc3lzdGVtLiBUaGUgcGVhayBudW1iZXIgb2YgYnl0ZXMgYWxsb2NhdGVkCisgIGJ5IG1hbGxvYywgcmVhbGxvYyBldGMuLCBpcyBsZXNzIHRoYW4gdGhpcyB2YWx1ZS4gVW5saWtlIG1hbGxpbmZvLAorICB0aGlzIGZ1bmN0aW9uIHJldHVybnMgb25seSBhIHByZWNvbXB1dGVkIHJlc3VsdCwgc28gY2FuIGJlIGNhbGxlZAorICBmcmVxdWVudGx5IHRvIG1vbml0b3IgbWVtb3J5IGNvbnN1bXB0aW9uLiAgRXZlbiBpZiBsb2NrcyBhcmUKKyAgb3RoZXJ3aXNlIGRlZmluZWQsIHRoaXMgZnVuY3Rpb24gZG9lcyBub3QgdXNlIHRoZW0sIHNvIHJlc3VsdHMgbWlnaHQKKyAgbm90IGJlIHVwIHRvIGRhdGUuCisqLworRExNQUxMT0NfRVhQT1JUIHNpemVfdCBkbG1hbGxvY19tYXhfZm9vdHByaW50KHZvaWQpOworCisvKgorICBtYWxsb2NfZm9vdHByaW50X2xpbWl0KCk7CisgIFJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyB0aGF0IHRoZSBoZWFwIGlzIGFsbG93ZWQgdG8gb2J0YWluIGZyb20KKyAgdGhlIHN5c3RlbSwgcmV0dXJuaW5nIHRoZSBsYXN0IHZhbHVlIHJldHVybmVkIGJ5CisgIG1hbGxvY19zZXRfZm9vdHByaW50X2xpbWl0LCBvciB0aGUgbWF4aW11bSBzaXplX3QgdmFsdWUgaWYKKyAgbmV2ZXIgc2V0LiBUaGUgcmV0dXJuZWQgdmFsdWUgcmVmbGVjdHMgYSBwZXJtaXNzaW9uLiBUaGVyZSBpcyBubworICBndWFyYW50ZWUgdGhhdCB0aGlzIG51bWJlciBvZiBieXRlcyBjYW4gYWN0dWFsbHkgYmUgb2J0YWluZWQgZnJvbQorICB0aGUgc3lzdGVtLgorKi8KK0RMTUFMTE9DX0VYUE9SVCBzaXplX3QgZGxtYWxsb2NfZm9vdHByaW50X2xpbWl0KCk7CisKKy8qCisgIG1hbGxvY19zZXRfZm9vdHByaW50X2xpbWl0KCk7CisgIFNldHMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIHRvIG9idGFpbiBmcm9tIHRoZSBzeXN0ZW0sIGNhdXNpbmcKKyAgZmFpbHVyZSByZXR1cm5zIGZyb20gbWFsbG9jIGFuZCByZWxhdGVkIGZ1bmN0aW9ucyB1cG9uIGF0dGVtcHRzIHRvCisgIGV4Y2VlZCB0aGlzIHZhbHVlLiBUaGUgYXJndW1lbnQgdmFsdWUgbWF5IGJlIHN1YmplY3QgdG8gcGFnZQorICByb3VuZGluZyB0byBhbiBlbmZvcmNlYWJsZSBsaW1pdDsgdGhpcyBhY3R1YWwgdmFsdWUgaXMgcmV0dXJuZWQuCisgIFVzaW5nIGFuIGFyZ3VtZW50IG9mIHRoZSBtYXhpbXVtIHBvc3NpYmxlIHNpemVfdCBlZmZlY3RpdmVseQorICBkaXNhYmxlcyBjaGVja3MuIElmIHRoZSBhcmd1bWVudCBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlCisgIGN1cnJlbnQgbWFsbG9jX2Zvb3RwcmludCwgdGhlbiBhbGwgZnV0dXJlIGFsbG9jYXRpb25zIHRoYXQgcmVxdWlyZQorICBhZGRpdGlvbmFsIHN5c3RlbSBtZW1vcnkgd2lsbCBmYWlsLiBIb3dldmVyLCBpbnZvY2F0aW9uIGNhbm5vdAorICByZXRyb2FjdGl2ZWx5IGRlYWxsb2NhdGUgZXhpc3RpbmcgdXNlZCBtZW1vcnkuCisqLworRExNQUxMT0NfRVhQT1JUIHNpemVfdCBkbG1hbGxvY19zZXRfZm9vdHByaW50X2xpbWl0KHNpemVfdCBieXRlcyk7CisKKyNpZiBNQUxMT0NfSU5TUEVDVF9BTEwKKy8qCisgIG1hbGxvY19pbnNwZWN0X2FsbCh2b2lkKCpoYW5kbGVyKSh2b2lkICpzdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmVuZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCB1c2VkX2J5dGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCogY2FsbGJhY2tfYXJnKSwKKyAgICAgICAgICAgICAgICAgICAgICB2b2lkKiBhcmcpOworICBUcmF2ZXJzZXMgdGhlIGhlYXAgYW5kIGNhbGxzIHRoZSBnaXZlbiBoYW5kbGVyIGZvciBlYWNoIG1hbmFnZWQKKyAgcmVnaW9uLCBza2lwcGluZyBhbGwgYnl0ZXMgdGhhdCBhcmUgKG9yIG1heSBiZSkgdXNlZCBmb3IgYm9va2tlZXBpbmcKKyAgcHVycG9zZXMuICBUcmF2ZXJzYWwgZG9lcyBub3QgaW5jbHVkZSBpbmNsdWRlIGNodW5rcyB0aGF0IGhhdmUgYmVlbgorICBkaXJlY3RseSBtZW1vcnkgbWFwcGVkLiBFYWNoIHJlcG9ydGVkIHJlZ2lvbiBiZWdpbnMgYXQgdGhlIHN0YXJ0CisgIGFkZHJlc3MsIGFuZCBjb250aW51ZXMgdXAgdG8gYnV0IG5vdCBpbmNsdWRpbmcgdGhlIGVuZCBhZGRyZXNzLiAgVGhlCisgIGZpcnN0IHVzZWRfYnl0ZXMgb2YgdGhlIHJlZ2lvbiBjb250YWluIGFsbG9jYXRlZCBkYXRhLiBJZgorICB1c2VkX2J5dGVzIGlzIHplcm8sIHRoZSByZWdpb24gaXMgdW5hbGxvY2F0ZWQuIFRoZSBoYW5kbGVyIGlzCisgIGludm9rZWQgd2l0aCB0aGUgZ2l2ZW4gY2FsbGJhY2sgYXJndW1lbnQuIElmIGxvY2tzIGFyZSBkZWZpbmVkLCB0aGV5CisgIGFyZSBoZWxkIGR1cmluZyB0aGUgZW50aXJlIHRyYXZlcnNhbC4gSXQgaXMgYSBiYWQgaWRlYSB0byBpbnZva2UKKyAgb3RoZXIgbWFsbG9jIGZ1bmN0aW9ucyBmcm9tIHdpdGhpbiB0aGUgaGFuZGxlci4KKworICBGb3IgZXhhbXBsZSwgdG8gY291bnQgdGhlIG51bWJlciBvZiBpbi11c2UgY2h1bmtzIHdpdGggc2l6ZSBncmVhdGVyCisgIHRoYW4gMTAwMCwgeW91IGNvdWxkIHdyaXRlOgorICBzdGF0aWMgaW50IGNvdW50ID0gMDsKKyAgdm9pZCBjb3VudF9jaHVua3Modm9pZCogc3RhcnQsIHZvaWQqIGVuZCwgc2l6ZV90IHVzZWQsIHZvaWQqIGFyZykgeworICAgIGlmICh1c2VkID49IDEwMDApICsrY291bnQ7CisgIH0KKyAgdGhlbjoKKyAgICBtYWxsb2NfaW5zcGVjdF9hbGwoY291bnRfY2h1bmtzLCBOVUxMKTsKKworICBtYWxsb2NfaW5zcGVjdF9hbGwgaXMgY29tcGlsZWQgb25seSBpZiBNQUxMT0NfSU5TUEVDVF9BTEwgaXMgZGVmaW5lZC4KKyovCitETE1BTExPQ19FWFBPUlQgdm9pZCBkbG1hbGxvY19pbnNwZWN0X2FsbCh2b2lkKCpoYW5kbGVyKSh2b2lkKiwgdm9pZCAqLCBzaXplX3QsIHZvaWQqKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqIGFyZyk7CisKKyNlbmRpZiAvKiBNQUxMT0NfSU5TUEVDVF9BTEwgKi8KKworI2lmICFOT19NQUxMSU5GTworLyoKKyAgbWFsbGluZm8oKQorICBSZXR1cm5zIChieSBjb3B5KSBhIHN0cnVjdCBjb250YWluaW5nIHZhcmlvdXMgc3VtbWFyeSBzdGF0aXN0aWNzOgorCisgIGFyZW5hOiAgICAgY3VycmVudCB0b3RhbCBub24tbW1hcHBlZCBieXRlcyBhbGxvY2F0ZWQgZnJvbSBzeXN0ZW0KKyAgb3JkYmxrczogICB0aGUgbnVtYmVyIG9mIGZyZWUgY2h1bmtzCisgIHNtYmxrczogICAgYWx3YXlzIHplcm8uCisgIGhibGtzOiAgICAgY3VycmVudCBudW1iZXIgb2YgbW1hcHBlZCByZWdpb25zCisgIGhibGtoZDogICAgdG90YWwgYnl0ZXMgaGVsZCBpbiBtbWFwcGVkIHJlZ2lvbnMKKyAgdXNtYmxrczogICB0aGUgbWF4aW11bSB0b3RhbCBhbGxvY2F0ZWQgc3BhY2UuIFRoaXMgd2lsbCBiZSBncmVhdGVyCisgICAgICAgICAgICAgICAgdGhhbiBjdXJyZW50IHRvdGFsIGlmIHRyaW1taW5nIGhhcyBvY2N1cnJlZC4KKyAgZnNtYmxrczogICBhbHdheXMgemVybworICB1b3JkYmxrczogIGN1cnJlbnQgdG90YWwgYWxsb2NhdGVkIHNwYWNlIChub3JtYWwgb3IgbW1hcHBlZCkKKyAgZm9yZGJsa3M6ICB0b3RhbCBmcmVlIHNwYWNlCisgIGtlZXBjb3N0OiAgdGhlIG1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIHRoYXQgY291bGQgaWRlYWxseSBiZSByZWxlYXNlZAorICAgICAgICAgICAgICAgYmFjayB0byBzeXN0ZW0gdmlhIG1hbGxvY190cmltLiAoImlkZWFsbHkiIG1lYW5zIHRoYXQKKyAgICAgICAgICAgICAgIGl0IGlnbm9yZXMgcGFnZSByZXN0cmljdGlvbnMgZXRjLikKKworICBCZWNhdXNlIHRoZXNlIGZpZWxkcyBhcmUgaW50cywgYnV0IGludGVybmFsIGJvb2trZWVwaW5nIG1heQorICBiZSBrZXB0IGFzIGxvbmdzLCB0aGUgcmVwb3J0ZWQgdmFsdWVzIG1heSB3cmFwIGFyb3VuZCB6ZXJvIGFuZAorICB0aHVzIGJlIGluYWNjdXJhdGUuCisqLworRExNQUxMT0NfRVhQT1JUIHN0cnVjdCBtYWxsaW5mbyBkbG1hbGxpbmZvKHZvaWQpOworI2VuZGlmIC8qIE5PX01BTExJTkZPICovCisKKy8qCisgIGluZGVwZW5kZW50X2NhbGxvYyhzaXplX3Qgbl9lbGVtZW50cywgc2l6ZV90IGVsZW1lbnRfc2l6ZSwgdm9pZCogY2h1bmtzW10pOworCisgIGluZGVwZW5kZW50X2NhbGxvYyBpcyBzaW1pbGFyIHRvIGNhbGxvYywgYnV0IGluc3RlYWQgb2YgcmV0dXJuaW5nIGEKKyAgc2luZ2xlIGNsZWFyZWQgc3BhY2UsIGl0IHJldHVybnMgYW4gYXJyYXkgb2YgcG9pbnRlcnMgdG8gbl9lbGVtZW50cworICBpbmRlcGVuZGVudCBlbGVtZW50cyB0aGF0IGNhbiBob2xkIGNvbnRlbnRzIG9mIHNpemUgZWxlbV9zaXplLCBlYWNoCisgIG9mIHdoaWNoIHN0YXJ0cyBvdXQgY2xlYXJlZCwgYW5kIGNhbiBiZSBpbmRlcGVuZGVudGx5IGZyZWVkLAorICByZWFsbG9jJ2VkIGV0Yy4gVGhlIGVsZW1lbnRzIGFyZSBndWFyYW50ZWVkIHRvIGJlIGFkamFjZW50bHkKKyAgYWxsb2NhdGVkICh0aGlzIGlzIG5vdCBndWFyYW50ZWVkIHRvIG9jY3VyIHdpdGggbXVsdGlwbGUgY2FsbG9jcyBvcgorICBtYWxsb2NzKSwgd2hpY2ggbWF5IGFsc28gaW1wcm92ZSBjYWNoZSBsb2NhbGl0eSBpbiBzb21lCisgIGFwcGxpY2F0aW9ucy4KKworICBUaGUgImNodW5rcyIgYXJndW1lbnQgaXMgb3B0aW9uYWwgKGkuZS4sIG1heSBiZSBudWxsLCB3aGljaCBpcworICBwcm9iYWJseSB0aGUgbW9zdCB0eXBpY2FsIHVzYWdlKS4gSWYgaXQgaXMgbnVsbCwgdGhlIHJldHVybmVkIGFycmF5CisgIGlzIGl0c2VsZiBkeW5hbWljYWxseSBhbGxvY2F0ZWQgYW5kIHNob3VsZCBhbHNvIGJlIGZyZWVkIHdoZW4gaXQgaXMKKyAgbm8gbG9uZ2VyIG5lZWRlZC4gT3RoZXJ3aXNlLCB0aGUgY2h1bmtzIGFycmF5IG11c3QgYmUgb2YgYXQgbGVhc3QKKyAgbl9lbGVtZW50cyBpbiBsZW5ndGguIEl0IGlzIGZpbGxlZCBpbiB3aXRoIHRoZSBwb2ludGVycyB0byB0aGUKKyAgY2h1bmtzLgorCisgIEluIGVpdGhlciBjYXNlLCBpbmRlcGVuZGVudF9jYWxsb2MgcmV0dXJucyB0aGlzIHBvaW50ZXIgYXJyYXksIG9yCisgIG51bGwgaWYgdGhlIGFsbG9jYXRpb24gZmFpbGVkLiAgSWYgbl9lbGVtZW50cyBpcyB6ZXJvIGFuZCAiY2h1bmtzIgorICBpcyBudWxsLCBpdCByZXR1cm5zIGEgY2h1bmsgcmVwcmVzZW50aW5nIGFuIGFycmF5IHdpdGggemVybyBlbGVtZW50cworICAod2hpY2ggc2hvdWxkIGJlIGZyZWVkIGlmIG5vdCB3YW50ZWQpLgorCisgIEVhY2ggZWxlbWVudCBtdXN0IGJlIGZyZWVkIHdoZW4gaXQgaXMgbm8gbG9uZ2VyIG5lZWRlZC4gVGhpcyBjYW4gYmUKKyAgZG9uZSBhbGwgYXQgb25jZSB1c2luZyBidWxrX2ZyZWUuCisKKyAgaW5kZXBlbmRlbnRfY2FsbG9jIHNpbXBsaWZpZXMgYW5kIHNwZWVkcyB1cCBpbXBsZW1lbnRhdGlvbnMgb2YgbWFueQorICBraW5kcyBvZiBwb29scy4gIEl0IG1heSBhbHNvIGJlIHVzZWZ1bCB3aGVuIGNvbnN0cnVjdGluZyBsYXJnZSBkYXRhCisgIHN0cnVjdHVyZXMgdGhhdCBpbml0aWFsbHkgaGF2ZSBhIGZpeGVkIG51bWJlciBvZiBmaXhlZC1zaXplZCBub2RlcywKKyAgYnV0IHRoZSBudW1iZXIgaXMgbm90IGtub3duIGF0IGNvbXBpbGUgdGltZSwgYW5kIHNvbWUgb2YgdGhlIG5vZGVzCisgIG1heSBsYXRlciBuZWVkIHRvIGJlIGZyZWVkLiBGb3IgZXhhbXBsZToKKworICBzdHJ1Y3QgTm9kZSB7IGludCBpdGVtOyBzdHJ1Y3QgTm9kZSogbmV4dDsgfTsKKworICBzdHJ1Y3QgTm9kZSogYnVpbGRfbGlzdCgpIHsKKyAgICBzdHJ1Y3QgTm9kZSoqIHBvb2w7CisgICAgaW50IG4gPSByZWFkX251bWJlcl9vZl9ub2Rlc19uZWVkZWQoKTsKKyAgICBpZiAobiA8PSAwKSByZXR1cm4gMDsKKyAgICBwb29sID0gKHN0cnVjdCBOb2RlKiopKGluZGVwZW5kZW50X2NhbGxvYyhuLCBzaXplb2Yoc3RydWN0IE5vZGUpLCAwKTsKKyAgICBpZiAocG9vbCA9PSAwKSBkaWUoKTsKKyAgICAvLyBvcmdhbml6ZSBpbnRvIGEgbGlua2VkIGxpc3QuLi4KKyAgICBzdHJ1Y3QgTm9kZSogZmlyc3QgPSBwb29sWzBdOworICAgIGZvciAoaSA9IDA7IGkgPCBuLTE7ICsraSkKKyAgICAgIHBvb2xbaV0tPm5leHQgPSBwb29sW2krMV07CisgICAgZnJlZShwb29sKTsgICAgIC8vIENhbiBub3cgZnJlZSB0aGUgYXJyYXkgKG9yIG5vdCwgaWYgaXQgaXMgbmVlZGVkIGxhdGVyKQorICAgIHJldHVybiBmaXJzdDsKKyAgfQorKi8KK0RMTUFMTE9DX0VYUE9SVCB2b2lkKiogZGxpbmRlcGVuZGVudF9jYWxsb2Moc2l6ZV90LCBzaXplX3QsIHZvaWQqKik7CisKKy8qCisgIGluZGVwZW5kZW50X2NvbWFsbG9jKHNpemVfdCBuX2VsZW1lbnRzLCBzaXplX3Qgc2l6ZXNbXSwgdm9pZCogY2h1bmtzW10pOworCisgIGluZGVwZW5kZW50X2NvbWFsbG9jIGFsbG9jYXRlcywgYWxsIGF0IG9uY2UsIGEgc2V0IG9mIG5fZWxlbWVudHMKKyAgY2h1bmtzIHdpdGggc2l6ZXMgaW5kaWNhdGVkIGluIHRoZSAic2l6ZXMiIGFycmF5LiAgICBJdCByZXR1cm5zCisgIGFuIGFycmF5IG9mIHBvaW50ZXJzIHRvIHRoZXNlIGVsZW1lbnRzLCBlYWNoIG9mIHdoaWNoIGNhbiBiZQorICBpbmRlcGVuZGVudGx5IGZyZWVkLCByZWFsbG9jJ2VkIGV0Yy4gVGhlIGVsZW1lbnRzIGFyZSBndWFyYW50ZWVkIHRvCisgIGJlIGFkamFjZW50bHkgYWxsb2NhdGVkICh0aGlzIGlzIG5vdCBndWFyYW50ZWVkIHRvIG9jY3VyIHdpdGgKKyAgbXVsdGlwbGUgY2FsbG9jcyBvciBtYWxsb2NzKSwgd2hpY2ggbWF5IGFsc28gaW1wcm92ZSBjYWNoZSBsb2NhbGl0eQorICBpbiBzb21lIGFwcGxpY2F0aW9ucy4KKworICBUaGUgImNodW5rcyIgYXJndW1lbnQgaXMgb3B0aW9uYWwgKGkuZS4sIG1heSBiZSBudWxsKS4gSWYgaXQgaXMgbnVsbAorICB0aGUgcmV0dXJuZWQgYXJyYXkgaXMgaXRzZWxmIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBhbmQgc2hvdWxkIGFsc28KKyAgYmUgZnJlZWQgd2hlbiBpdCBpcyBubyBsb25nZXIgbmVlZGVkLiBPdGhlcndpc2UsIHRoZSBjaHVua3MgYXJyYXkKKyAgbXVzdCBiZSBvZiBhdCBsZWFzdCBuX2VsZW1lbnRzIGluIGxlbmd0aC4gSXQgaXMgZmlsbGVkIGluIHdpdGggdGhlCisgIHBvaW50ZXJzIHRvIHRoZSBjaHVua3MuCisKKyAgSW4gZWl0aGVyIGNhc2UsIGluZGVwZW5kZW50X2NvbWFsbG9jIHJldHVybnMgdGhpcyBwb2ludGVyIGFycmF5LCBvcgorICBudWxsIGlmIHRoZSBhbGxvY2F0aW9uIGZhaWxlZC4gIElmIG5fZWxlbWVudHMgaXMgemVybyBhbmQgY2h1bmtzIGlzCisgIG51bGwsIGl0IHJldHVybnMgYSBjaHVuayByZXByZXNlbnRpbmcgYW4gYXJyYXkgd2l0aCB6ZXJvIGVsZW1lbnRzCisgICh3aGljaCBzaG91bGQgYmUgZnJlZWQgaWYgbm90IHdhbnRlZCkuCisKKyAgRWFjaCBlbGVtZW50IG11c3QgYmUgZnJlZWQgd2hlbiBpdCBpcyBubyBsb25nZXIgbmVlZGVkLiBUaGlzIGNhbiBiZQorICBkb25lIGFsbCBhdCBvbmNlIHVzaW5nIGJ1bGtfZnJlZS4KKworICBpbmRlcGVuZGVudF9jb21hbGxhYyBkaWZmZXJzIGZyb20gaW5kZXBlbmRlbnRfY2FsbG9jIGluIHRoYXQgZWFjaAorICBlbGVtZW50IG1heSBoYXZlIGEgZGlmZmVyZW50IHNpemUsIGFuZCBhbHNvIHRoYXQgaXQgZG9lcyBub3QKKyAgYXV0b21hdGljYWxseSBjbGVhciBlbGVtZW50cy4KKworICBpbmRlcGVuZGVudF9jb21hbGxvYyBjYW4gYmUgdXNlZCB0byBzcGVlZCB1cCBhbGxvY2F0aW9uIGluIGNhc2VzCisgIHdoZXJlIHNldmVyYWwgc3RydWN0cyBvciBvYmplY3RzIG11c3QgYWx3YXlzIGJlIGFsbG9jYXRlZCBhdCB0aGUKKyAgc2FtZSB0aW1lLiAgRm9yIGV4YW1wbGU6CisKKyAgc3RydWN0IEhlYWQgeyAuLi4gfQorICBzdHJ1Y3QgRm9vdCB7IC4uLiB9CisKKyAgdm9pZCBzZW5kX21lc3NhZ2UoY2hhciogbXNnKSB7CisgICAgaW50IG1zZ2xlbiA9IHN0cmxlbihtc2cpOworICAgIHNpemVfdCBzaXplc1szXSA9IHsgc2l6ZW9mKHN0cnVjdCBIZWFkKSwgbXNnbGVuLCBzaXplb2Yoc3RydWN0IEZvb3QpIH07CisgICAgdm9pZCogY2h1bmtzWzNdOworICAgIGlmIChpbmRlcGVuZGVudF9jb21hbGxvYygzLCBzaXplcywgY2h1bmtzKSA9PSAwKQorICAgICAgZGllKCk7CisgICAgc3RydWN0IEhlYWQqIGhlYWQgPSAoc3RydWN0IEhlYWQqKShjaHVua3NbMF0pOworICAgIGNoYXIqICAgICAgICBib2R5ID0gKGNoYXIqKShjaHVua3NbMV0pOworICAgIHN0cnVjdCBGb290KiBmb290ID0gKHN0cnVjdCBGb290KikoY2h1bmtzWzJdKTsKKyAgICAvLyAuLi4KKyAgfQorCisgIEluIGdlbmVyYWwgdGhvdWdoLCBpbmRlcGVuZGVudF9jb21hbGxvYyBpcyB3b3J0aCB1c2luZyBvbmx5IGZvcgorICBsYXJnZXIgdmFsdWVzIG9mIG5fZWxlbWVudHMuIEZvciBzbWFsbCB2YWx1ZXMsIHlvdSBwcm9iYWJseSB3b24ndAorICBkZXRlY3QgZW5vdWdoIGRpZmZlcmVuY2UgZnJvbSBzZXJpZXMgb2YgbWFsbG9jIGNhbGxzIHRvIGJvdGhlci4KKworICBPdmVydXNlIG9mIGluZGVwZW5kZW50X2NvbWFsbG9jIGNhbiBpbmNyZWFzZSBvdmVyYWxsIG1lbW9yeSB1c2FnZSwKKyAgc2luY2UgaXQgY2Fubm90IHJldXNlIGV4aXN0aW5nIG5vbmNvbnRpZ3VvdXMgc21hbGwgY2h1bmtzIHRoYXQKKyAgbWlnaHQgYmUgYXZhaWxhYmxlIGZvciBzb21lIG9mIHRoZSBlbGVtZW50cy4KKyovCitETE1BTExPQ19FWFBPUlQgdm9pZCoqIGRsaW5kZXBlbmRlbnRfY29tYWxsb2Moc2l6ZV90LCBzaXplX3QqLCB2b2lkKiopOworCisvKgorICBidWxrX2ZyZWUodm9pZCogYXJyYXlbXSwgc2l6ZV90IG5fZWxlbWVudHMpCisgIEZyZWVzIGFuZCBjbGVhcnMgKHNldHMgdG8gbnVsbCkgZWFjaCBub24tbnVsbCBwb2ludGVyIGluIHRoZSBnaXZlbgorICBhcnJheS4gIFRoaXMgaXMgbGlrZWx5IHRvIGJlIGZhc3RlciB0aGFuIGZyZWVpbmcgdGhlbSBvbmUtYnktb25lLgorICBJZiBmb290ZXJzIGFyZSB1c2VkLCBwb2ludGVycyB0aGF0IGhhdmUgYmVlbiBhbGxvY2F0ZWQgaW4gZGlmZmVyZW50CisgIG1zcGFjZXMgYXJlIG5vdCBmcmVlZCBvciBjbGVhcmVkLCBhbmQgdGhlIGNvdW50IG9mIGFsbCBzdWNoIHBvaW50ZXJzCisgIGlzIHJldHVybmVkLiAgRm9yIGxhcmdlIGFycmF5cyBvZiBwb2ludGVycyB3aXRoIHBvb3IgbG9jYWxpdHksIGl0CisgIG1heSBiZSB3b3J0aHdoaWxlIHRvIHNvcnQgdGhpcyBhcnJheSBiZWZvcmUgY2FsbGluZyBidWxrX2ZyZWUuCisqLworRExNQUxMT0NfRVhQT1JUIHNpemVfdCAgZGxidWxrX2ZyZWUodm9pZCoqLCBzaXplX3Qgbl9lbGVtZW50cyk7CisKKy8qCisgIHB2YWxsb2Moc2l6ZV90IG4pOworICBFcXVpdmFsZW50IHRvIHZhbGxvYyhtaW5pbXVtLXBhZ2UtdGhhdC1ob2xkcyhuKSksIHRoYXQgaXMsCisgIHJvdW5kIHVwIG4gdG8gbmVhcmVzdCBwYWdlc2l6ZS4KKyAqLworRExNQUxMT0NfRVhQT1JUIHZvaWQqICBkbHB2YWxsb2Moc2l6ZV90KTsKKworLyoKKyAgbWFsbG9jX3RyaW0oc2l6ZV90IHBhZCk7CisKKyAgSWYgcG9zc2libGUsIGdpdmVzIG1lbW9yeSBiYWNrIHRvIHRoZSBzeXN0ZW0gKHZpYSBuZWdhdGl2ZSBhcmd1bWVudHMKKyAgdG8gc2JyaykgaWYgdGhlcmUgaXMgdW51c2VkIG1lbW9yeSBhdCB0aGUgYGhpZ2gnIGVuZCBvZiB0aGUgbWFsbG9jCisgIHBvb2wgb3IgaW4gdW51c2VkIE1NQVAgc2VnbWVudHMuIFlvdSBjYW4gY2FsbCB0aGlzIGFmdGVyIGZyZWVpbmcKKyAgbGFyZ2UgYmxvY2tzIG9mIG1lbW9yeSB0byBwb3RlbnRpYWxseSByZWR1Y2UgdGhlIHN5c3RlbS1sZXZlbCBtZW1vcnkKKyAgcmVxdWlyZW1lbnRzIG9mIGEgcHJvZ3JhbS4gSG93ZXZlciwgaXQgY2Fubm90IGd1YXJhbnRlZSB0byByZWR1Y2UKKyAgbWVtb3J5LiBVbmRlciBzb21lIGFsbG9jYXRpb24gcGF0dGVybnMsIHNvbWUgbGFyZ2UgZnJlZSBibG9ja3Mgb2YKKyAgbWVtb3J5IHdpbGwgYmUgbG9ja2VkIGJldHdlZW4gdHdvIHVzZWQgY2h1bmtzLCBzbyB0aGV5IGNhbm5vdCBiZQorICBnaXZlbiBiYWNrIHRvIHRoZSBzeXN0ZW0uCisKKyAgVGhlIGBwYWQnIGFyZ3VtZW50IHRvIG1hbGxvY190cmltIHJlcHJlc2VudHMgdGhlIGFtb3VudCBvZiBmcmVlCisgIHRyYWlsaW5nIHNwYWNlIHRvIGxlYXZlIHVudHJpbW1lZC4gSWYgdGhpcyBhcmd1bWVudCBpcyB6ZXJvLCBvbmx5CisgIHRoZSBtaW5pbXVtIGFtb3VudCBvZiBtZW1vcnkgdG8gbWFpbnRhaW4gaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmVzCisgIHdpbGwgYmUgbGVmdC4gTm9uLXplcm8gYXJndW1lbnRzIGNhbiBiZSBzdXBwbGllZCB0byBtYWludGFpbiBlbm91Z2gKKyAgdHJhaWxpbmcgc3BhY2UgdG8gc2VydmljZSBmdXR1cmUgZXhwZWN0ZWQgYWxsb2NhdGlvbnMgd2l0aG91dCBoYXZpbmcKKyAgdG8gcmUtb2J0YWluIG1lbW9yeSBmcm9tIHRoZSBzeXN0ZW0uCisKKyAgTWFsbG9jX3RyaW0gcmV0dXJucyAxIGlmIGl0IGFjdHVhbGx5IHJlbGVhc2VkIGFueSBtZW1vcnksIGVsc2UgMC4KKyovCitETE1BTExPQ19FWFBPUlQgaW50ICBkbG1hbGxvY190cmltKHNpemVfdCk7CisKKy8qCisgIG1hbGxvY19zdGF0cygpOworICBQcmludHMgb24gc3RkZXJyIHRoZSBhbW91bnQgb2Ygc3BhY2Ugb2J0YWluZWQgZnJvbSB0aGUgc3lzdGVtIChib3RoCisgIHZpYSBzYnJrIGFuZCBtbWFwKSwgdGhlIG1heGltdW0gYW1vdW50ICh3aGljaCBtYXkgYmUgbW9yZSB0aGFuCisgIGN1cnJlbnQgaWYgbWFsbG9jX3RyaW0gYW5kL29yIG11bm1hcCBnb3QgY2FsbGVkKSwgYW5kIHRoZSBjdXJyZW50CisgIG51bWJlciBvZiBieXRlcyBhbGxvY2F0ZWQgdmlhIG1hbGxvYyAob3IgcmVhbGxvYywgZXRjKSBidXQgbm90IHlldAorICBmcmVlZC4gTm90ZSB0aGF0IHRoaXMgaXMgdGhlIG51bWJlciBvZiBieXRlcyBhbGxvY2F0ZWQsIG5vdCB0aGUKKyAgbnVtYmVyIHJlcXVlc3RlZC4gSXQgd2lsbCBiZSBsYXJnZXIgdGhhbiB0aGUgbnVtYmVyIHJlcXVlc3RlZAorICBiZWNhdXNlIG9mIGFsaWdubWVudCBhbmQgYm9va2tlZXBpbmcgb3ZlcmhlYWQuIEJlY2F1c2UgaXQgaW5jbHVkZXMKKyAgYWxpZ25tZW50IHdhc3RhZ2UgYXMgYmVpbmcgaW4gdXNlLCB0aGlzIGZpZ3VyZSBtYXkgYmUgZ3JlYXRlciB0aGFuCisgIHplcm8gZXZlbiB3aGVuIG5vIHVzZXItbGV2ZWwgY2h1bmtzIGFyZSBhbGxvY2F0ZWQuCisKKyAgVGhlIHJlcG9ydGVkIGN1cnJlbnQgYW5kIG1heGltdW0gc3lzdGVtIG1lbW9yeSBjYW4gYmUgaW5hY2N1cmF0ZSBpZgorICBhIHByb2dyYW0gbWFrZXMgb3RoZXIgY2FsbHMgdG8gc3lzdGVtIG1lbW9yeSBhbGxvY2F0aW9uIGZ1bmN0aW9ucworICAobm9ybWFsbHkgc2Jyaykgb3V0c2lkZSBvZiBtYWxsb2MuCisKKyAgbWFsbG9jX3N0YXRzIHByaW50cyBvbmx5IHRoZSBtb3N0IGNvbW1vbmx5IGludGVyZXN0aW5nIHN0YXRpc3RpY3MuCisgIE1vcmUgaW5mb3JtYXRpb24gY2FuIGJlIG9idGFpbmVkIGJ5IGNhbGxpbmcgbWFsbGluZm8uCisqLworRExNQUxMT0NfRVhQT1JUIHZvaWQgIGRsbWFsbG9jX3N0YXRzKHZvaWQpOworCisvKgorICBtYWxsb2NfdXNhYmxlX3NpemUodm9pZCogcCk7CisKKyAgUmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHlvdSBjYW4gYWN0dWFsbHkgdXNlIGluCisgIGFuIGFsbG9jYXRlZCBjaHVuaywgd2hpY2ggbWF5IGJlIG1vcmUgdGhhbiB5b3UgcmVxdWVzdGVkIChhbHRob3VnaAorICBvZnRlbiBub3QpIGR1ZSB0byBhbGlnbm1lbnQgYW5kIG1pbmltdW0gc2l6ZSBjb25zdHJhaW50cy4KKyAgWW91IGNhbiB1c2UgdGhpcyBtYW55IGJ5dGVzIHdpdGhvdXQgd29ycnlpbmcgYWJvdXQKKyAgb3ZlcndyaXRpbmcgb3RoZXIgYWxsb2NhdGVkIG9iamVjdHMuIFRoaXMgaXMgbm90IGEgcGFydGljdWxhcmx5IGdyZWF0CisgIHByb2dyYW1taW5nIHByYWN0aWNlLiBtYWxsb2NfdXNhYmxlX3NpemUgY2FuIGJlIG1vcmUgdXNlZnVsIGluCisgIGRlYnVnZ2luZyBhbmQgYXNzZXJ0aW9ucywgZm9yIGV4YW1wbGU6CisKKyAgcCA9IG1hbGxvYyhuKTsKKyAgYXNzZXJ0KG1hbGxvY191c2FibGVfc2l6ZShwKSA+PSAyNTYpOworKi8KKy8qIEJFR0lOIGFuZHJvaWQtY2hhbmdlZDogYWRkZWQgY29uc3QgKi8KK3NpemVfdCBkbG1hbGxvY191c2FibGVfc2l6ZShjb25zdCB2b2lkKik7CisvKiBFTkQgYW5kcm9pZC1jaGFuZ2UgKi8KKworI2VuZGlmIC8qIE9OTFlfTVNQQUNFUyAqLworCisjaWYgTVNQQUNFUworCisvKgorICBtc3BhY2UgaXMgYW4gb3BhcXVlIHR5cGUgcmVwcmVzZW50aW5nIGFuIGluZGVwZW5kZW50CisgIHJlZ2lvbiBvZiBzcGFjZSB0aGF0IHN1cHBvcnRzIG1zcGFjZV9tYWxsb2MsIGV0Yy4KKyovCit0eXBlZGVmIHZvaWQqIG1zcGFjZTsKKworLyoKKyAgY3JlYXRlX21zcGFjZSBjcmVhdGVzIGFuZCByZXR1cm5zIGEgbmV3IGluZGVwZW5kZW50IHNwYWNlIHdpdGggdGhlCisgIGdpdmVuIGluaXRpYWwgY2FwYWNpdHksIG9yLCBpZiAwLCB0aGUgZGVmYXVsdCBncmFudWxhcml0eSBzaXplLiAgSXQKKyAgcmV0dXJucyBudWxsIGlmIHRoZXJlIGlzIG5vIHN5c3RlbSBtZW1vcnkgYXZhaWxhYmxlIHRvIGNyZWF0ZSB0aGUKKyAgc3BhY2UuICBJZiBhcmd1bWVudCBsb2NrZWQgaXMgbm9uLXplcm8sIHRoZSBzcGFjZSB1c2VzIGEgc2VwYXJhdGUKKyAgbG9jayB0byBjb250cm9sIGFjY2Vzcy4gVGhlIGNhcGFjaXR5IG9mIHRoZSBzcGFjZSB3aWxsIGdyb3cKKyAgZHluYW1pY2FsbHkgYXMgbmVlZGVkIHRvIHNlcnZpY2UgbXNwYWNlX21hbGxvYyByZXF1ZXN0cy4gIFlvdSBjYW4KKyAgY29udHJvbCB0aGUgc2l6ZXMgb2YgaW5jcmVtZW50YWwgaW5jcmVhc2VzIG9mIHRoaXMgc3BhY2UgYnkKKyAgY29tcGlsaW5nIHdpdGggYSBkaWZmZXJlbnQgREVGQVVMVF9HUkFOVUxBUklUWSBvciBkeW5hbWljYWxseQorICBzZXR0aW5nIHdpdGggbWFsbG9wdChNX0dSQU5VTEFSSVRZLCB2YWx1ZSkuCisqLworRExNQUxMT0NfRVhQT1JUIG1zcGFjZSBjcmVhdGVfbXNwYWNlKHNpemVfdCBjYXBhY2l0eSwgaW50IGxvY2tlZCk7CisKKy8qCisgIGRlc3Ryb3lfbXNwYWNlIGRlc3Ryb3lzIHRoZSBnaXZlbiBzcGFjZSwgYW5kIGF0dGVtcHRzIHRvIHJldHVybiBhbGwKKyAgb2YgaXRzIG1lbW9yeSBiYWNrIHRvIHRoZSBzeXN0ZW0sIHJldHVybmluZyB0aGUgdG90YWwgbnVtYmVyIG9mCisgIGJ5dGVzIGZyZWVkLiBBZnRlciBkZXN0cnVjdGlvbiwgdGhlIHJlc3VsdHMgb2YgYWNjZXNzIHRvIGFsbCBtZW1vcnkKKyAgdXNlZCBieSB0aGUgc3BhY2UgYmVjb21lIHVuZGVmaW5lZC4KKyovCitETE1BTExPQ19FWFBPUlQgc2l6ZV90IGRlc3Ryb3lfbXNwYWNlKG1zcGFjZSBtc3ApOworCisvKgorICBjcmVhdGVfbXNwYWNlX3dpdGhfYmFzZSB1c2VzIHRoZSBtZW1vcnkgc3VwcGxpZWQgYXMgdGhlIGluaXRpYWwgYmFzZQorICBvZiBhIG5ldyBtc3BhY2UuIFBhcnQgKGxlc3MgdGhhbiAxMjgqc2l6ZW9mKHNpemVfdCkgYnl0ZXMpIG9mIHRoaXMKKyAgc3BhY2UgaXMgdXNlZCBmb3IgYm9va2tlZXBpbmcsIHNvIHRoZSBjYXBhY2l0eSBtdXN0IGJlIGF0IGxlYXN0IHRoaXMKKyAgbGFyZ2UuIChPdGhlcndpc2UgMCBpcyByZXR1cm5lZC4pIFdoZW4gdGhpcyBpbml0aWFsIHNwYWNlIGlzCisgIGV4aGF1c3RlZCwgYWRkaXRpb25hbCBtZW1vcnkgd2lsbCBiZSBvYnRhaW5lZCBmcm9tIHRoZSBzeXN0ZW0uCisgIERlc3Ryb3lpbmcgdGhpcyBzcGFjZSB3aWxsIGRlYWxsb2NhdGUgYWxsIGFkZGl0aW9uYWxseSBhbGxvY2F0ZWQKKyAgc3BhY2UgKGlmIHBvc3NpYmxlKSBidXQgbm90IHRoZSBpbml0aWFsIGJhc2UuCisqLworRExNQUxMT0NfRVhQT1JUIG1zcGFjZSBjcmVhdGVfbXNwYWNlX3dpdGhfYmFzZSh2b2lkKiBiYXNlLCBzaXplX3QgY2FwYWNpdHksIGludCBsb2NrZWQpOworCisvKgorICBtc3BhY2VfdHJhY2tfbGFyZ2VfY2h1bmtzIGNvbnRyb2xzIHdoZXRoZXIgcmVxdWVzdHMgZm9yIGxhcmdlIGNodW5rcworICBhcmUgYWxsb2NhdGVkIGluIHRoZWlyIG93biB1bnRyYWNrZWQgbW1hcHBlZCByZWdpb25zLCBzZXBhcmF0ZSBmcm9tCisgIG90aGVycyBpbiB0aGlzIG1zcGFjZS4gQnkgZGVmYXVsdCBsYXJnZSBjaHVua3MgYXJlIG5vdCB0cmFja2VkLAorICB3aGljaCByZWR1Y2VzIGZyYWdtZW50YXRpb24uIEhvd2V2ZXIsIHN1Y2ggY2h1bmtzIGFyZSBub3QKKyAgbmVjZXNzYXJpbHkgcmVsZWFzZWQgdG8gdGhlIHN5c3RlbSB1cG9uIGRlc3Ryb3lfbXNwYWNlLiAgRW5hYmxpbmcKKyAgdHJhY2tpbmcgYnkgc2V0dGluZyB0byB0cnVlIG1heSBpbmNyZWFzZSBmcmFnbWVudGF0aW9uLCBidXQgYXZvaWRzCisgIGxlYWthZ2Ugd2hlbiByZWx5aW5nIG9uIGRlc3Ryb3lfbXNwYWNlIHRvIHJlbGVhc2UgYWxsIG1lbW9yeQorICBhbGxvY2F0ZWQgdXNpbmcgdGhpcyBzcGFjZS4gIFRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZSBwcmV2aW91cworICBzZXR0aW5nLgorKi8KK0RMTUFMTE9DX0VYUE9SVCBpbnQgbXNwYWNlX3RyYWNrX2xhcmdlX2NodW5rcyhtc3BhY2UgbXNwLCBpbnQgZW5hYmxlKTsKKworCisvKgorICBtc3BhY2VfbWFsbG9jIGJlaGF2ZXMgYXMgbWFsbG9jLCBidXQgb3BlcmF0ZXMgd2l0aGluCisgIHRoZSBnaXZlbiBzcGFjZS4KKyovCitETE1BTExPQ19FWFBPUlQgdm9pZCogbXNwYWNlX21hbGxvYyhtc3BhY2UgbXNwLCBzaXplX3QgYnl0ZXMpOworCisvKgorICBtc3BhY2VfZnJlZSBiZWhhdmVzIGFzIGZyZWUsIGJ1dCBvcGVyYXRlcyB3aXRoaW4KKyAgdGhlIGdpdmVuIHNwYWNlLgorCisgIElmIGNvbXBpbGVkIHdpdGggRk9PVEVSUz09MSwgbXNwYWNlX2ZyZWUgaXMgbm90IGFjdHVhbGx5IG5lZWRlZC4KKyAgZnJlZSBtYXkgYmUgY2FsbGVkIGluc3RlYWQgb2YgbXNwYWNlX2ZyZWUgYmVjYXVzZSBmcmVlZCBjaHVua3MgZnJvbQorICBhbnkgc3BhY2UgYXJlIGhhbmRsZWQgYnkgdGhlaXIgb3JpZ2luYXRpbmcgc3BhY2VzLgorKi8KK0RMTUFMTE9DX0VYUE9SVCB2b2lkIG1zcGFjZV9mcmVlKG1zcGFjZSBtc3AsIHZvaWQqIG1lbSk7CisKKy8qCisgIG1zcGFjZV9yZWFsbG9jIGJlaGF2ZXMgYXMgcmVhbGxvYywgYnV0IG9wZXJhdGVzIHdpdGhpbgorICB0aGUgZ2l2ZW4gc3BhY2UuCisKKyAgSWYgY29tcGlsZWQgd2l0aCBGT09URVJTPT0xLCBtc3BhY2VfcmVhbGxvYyBpcyBub3QgYWN0dWFsbHkKKyAgbmVlZGVkLiAgcmVhbGxvYyBtYXkgYmUgY2FsbGVkIGluc3RlYWQgb2YgbXNwYWNlX3JlYWxsb2MgYmVjYXVzZQorICByZWFsbG9jZWQgY2h1bmtzIGZyb20gYW55IHNwYWNlIGFyZSBoYW5kbGVkIGJ5IHRoZWlyIG9yaWdpbmF0aW5nCisgIHNwYWNlcy4KKyovCitETE1BTExPQ19FWFBPUlQgdm9pZCogbXNwYWNlX3JlYWxsb2MobXNwYWNlIG1zcCwgdm9pZCogbWVtLCBzaXplX3QgbmV3c2l6ZSk7CisKKy8qCisgIG1zcGFjZV9jYWxsb2MgYmVoYXZlcyBhcyBjYWxsb2MsIGJ1dCBvcGVyYXRlcyB3aXRoaW4KKyAgdGhlIGdpdmVuIHNwYWNlLgorKi8KK0RMTUFMTE9DX0VYUE9SVCB2b2lkKiBtc3BhY2VfY2FsbG9jKG1zcGFjZSBtc3AsIHNpemVfdCBuX2VsZW1lbnRzLCBzaXplX3QgZWxlbV9zaXplKTsKKworLyoKKyAgbXNwYWNlX21lbWFsaWduIGJlaGF2ZXMgYXMgbWVtYWxpZ24sIGJ1dCBvcGVyYXRlcyB3aXRoaW4KKyAgdGhlIGdpdmVuIHNwYWNlLgorKi8KK0RMTUFMTE9DX0VYUE9SVCB2b2lkKiBtc3BhY2VfbWVtYWxpZ24obXNwYWNlIG1zcCwgc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IGJ5dGVzKTsKKworLyoKKyAgbXNwYWNlX2luZGVwZW5kZW50X2NhbGxvYyBiZWhhdmVzIGFzIGluZGVwZW5kZW50X2NhbGxvYywgYnV0CisgIG9wZXJhdGVzIHdpdGhpbiB0aGUgZ2l2ZW4gc3BhY2UuCisqLworRExNQUxMT0NfRVhQT1JUIHZvaWQqKiBtc3BhY2VfaW5kZXBlbmRlbnRfY2FsbG9jKG1zcGFjZSBtc3AsIHNpemVfdCBuX2VsZW1lbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGVsZW1fc2l6ZSwgdm9pZCogY2h1bmtzW10pOworCisvKgorICBtc3BhY2VfaW5kZXBlbmRlbnRfY29tYWxsb2MgYmVoYXZlcyBhcyBpbmRlcGVuZGVudF9jb21hbGxvYywgYnV0CisgIG9wZXJhdGVzIHdpdGhpbiB0aGUgZ2l2ZW4gc3BhY2UuCisqLworRExNQUxMT0NfRVhQT1JUIHZvaWQqKiBtc3BhY2VfaW5kZXBlbmRlbnRfY29tYWxsb2MobXNwYWNlIG1zcCwgc2l6ZV90IG5fZWxlbWVudHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBzaXplc1tdLCB2b2lkKiBjaHVua3NbXSk7CisKKy8qCisgIG1zcGFjZV9mb290cHJpbnQoKSByZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgb2J0YWluZWQgZnJvbSB0aGUKKyAgc3lzdGVtIGZvciB0aGlzIHNwYWNlLgorKi8KK0RMTUFMTE9DX0VYUE9SVCBzaXplX3QgbXNwYWNlX2Zvb3RwcmludChtc3BhY2UgbXNwKTsKKworLyoKKyAgbXNwYWNlX21heF9mb290cHJpbnQoKSByZXR1cm5zIHRoZSBwZWFrIG51bWJlciBvZiBieXRlcyBvYnRhaW5lZCBmcm9tIHRoZQorICBzeXN0ZW0gZm9yIHRoaXMgc3BhY2UuCisqLworRExNQUxMT0NfRVhQT1JUIHNpemVfdCBtc3BhY2VfbWF4X2Zvb3RwcmludChtc3BhY2UgbXNwKTsKKworCisjaWYgIU5PX01BTExJTkZPCisvKgorICBtc3BhY2VfbWFsbGluZm8gYmVoYXZlcyBhcyBtYWxsaW5mbywgYnV0IHJlcG9ydHMgcHJvcGVydGllcyBvZgorICB0aGUgZ2l2ZW4gc3BhY2UuCisqLworRExNQUxMT0NfRVhQT1JUIHN0cnVjdCBtYWxsaW5mbyBtc3BhY2VfbWFsbGluZm8obXNwYWNlIG1zcCk7CisjZW5kaWYgLyogTk9fTUFMTElORk8gKi8KKworLyoKKyAgbWFsbG9jX3VzYWJsZV9zaXplKHZvaWQqIHApIGJlaGF2ZXMgdGhlIHNhbWUgYXMgbWFsbG9jX3VzYWJsZV9zaXplOworKi8KK0RMTUFMTE9DX0VYUE9SVCBzaXplX3QgbXNwYWNlX3VzYWJsZV9zaXplKGNvbnN0IHZvaWQqIG1lbSk7CisKKy8qCisgIG1zcGFjZV9tYWxsb2Nfc3RhdHMgYmVoYXZlcyBhcyBtYWxsb2Nfc3RhdHMsIGJ1dCByZXBvcnRzCisgIHByb3BlcnRpZXMgb2YgdGhlIGdpdmVuIHNwYWNlLgorKi8KK0RMTUFMTE9DX0VYUE9SVCB2b2lkIG1zcGFjZV9tYWxsb2Nfc3RhdHMobXNwYWNlIG1zcCk7CisKKy8qCisgIG1zcGFjZV90cmltIGJlaGF2ZXMgYXMgbWFsbG9jX3RyaW0sIGJ1dAorICBvcGVyYXRlcyB3aXRoaW4gdGhlIGdpdmVuIHNwYWNlLgorKi8KK0RMTUFMTE9DX0VYUE9SVCBpbnQgbXNwYWNlX3RyaW0obXNwYWNlIG1zcCwgc2l6ZV90IHBhZCk7CisKKy8qCisgIEFuIGFsaWFzIGZvciBtYWxsb3B0LgorKi8KK0RMTUFMTE9DX0VYUE9SVCBpbnQgbXNwYWNlX21hbGxvcHQoaW50LCBpbnQpOworCisjZW5kaWYgLyogTVNQQUNFUyAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK30gIC8qIGVuZCBvZiBleHRlcm4gIkMiICovCisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworLyoKKyAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgIFRvIG1ha2UgYSBmdWxseSBjdXN0b21pemFibGUgbWFsbG9jLmggaGVhZGVyIGZpbGUsIGN1dCBldmVyeXRoaW5nCisgIGFib3ZlIHRoaXMgbGluZSwgcHV0IGludG8gZmlsZSBtYWxsb2MuaCwgZWRpdCB0byBzdWl0LCBhbmQgI2luY2x1ZGUgaXQKKyAgb24gdGhlIG5leHQgbGluZSwgYXMgd2VsbCBhcyBpbiBwcm9ncmFtcyB0aGF0IHVzZSB0aGlzIG1hbGxvYy4KKyAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworCisvKiAjaW5jbHVkZSAibWFsbG9jLmgiICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGludGVybmFsICNpbmNsdWRlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNpZmRlZiBfTVNDX1ZFUgorI3ByYWdtYSB3YXJuaW5nKCBkaXNhYmxlIDogNDE0NiApIC8qIG5vICJ1bnNpZ25lZCIgd2FybmluZ3MgKi8KKyNlbmRpZiAvKiBfTVNDX1ZFUiAqLworI2lmICFOT19NQUxMT0NfU1RBVFMKKyNpbmNsdWRlIDxzdGRpby5oPiAgICAgICAvKiBmb3IgcHJpbnRpbmcgaW4gbWFsbG9jX3N0YXRzICovCisjZW5kaWYgLyogTk9fTUFMTE9DX1NUQVRTICovCisjaWZuZGVmIExBQ0tTX0VSUk5PX0gKKyNpbmNsdWRlIDxlcnJuby5oPiAgICAgICAvKiBmb3IgTUFMTE9DX0ZBSUxVUkVfQUNUSU9OICovCisjZW5kaWYgLyogTEFDS1NfRVJSTk9fSCAqLworI2lmZGVmIERFQlVHCisjaWYgQUJPUlRfT05fQVNTRVJUX0ZBSUxVUkUKKyN1bmRlZiBhc3NlcnQKKyNkZWZpbmUgYXNzZXJ0KHgpIGlmKCEoeCkpIEFCT1JUCisjZWxzZSAvKiBBQk9SVF9PTl9BU1NFUlRfRkFJTFVSRSAqLworI2luY2x1ZGUgPGFzc2VydC5oPgorI2VuZGlmIC8qIEFCT1JUX09OX0FTU0VSVF9GQUlMVVJFICovCisjZWxzZSAgLyogREVCVUcgKi8KKyNpZm5kZWYgYXNzZXJ0CisjZGVmaW5lIGFzc2VydCh4KQorI2VuZGlmCisjZGVmaW5lIERFQlVHIDAKKyNlbmRpZiAvKiBERUJVRyAqLworI2lmICFkZWZpbmVkKFdJTjMyKSAmJiAhZGVmaW5lZChMQUNLU19USU1FX0gpCisjaW5jbHVkZSA8dGltZS5oPiAgICAgICAgLyogZm9yIG1hZ2ljIGluaXRpYWxpemF0aW9uICovCisjZW5kaWYgLyogV0lOMzIgKi8KKyNpZm5kZWYgTEFDS1NfU1RETElCX0gKKyNpbmNsdWRlIDxzdGRsaWIuaD4gICAgICAvKiBmb3IgYWJvcnQoKSAqLworI2VuZGlmIC8qIExBQ0tTX1NURExJQl9IICovCisjaWZuZGVmIExBQ0tTX1NUUklOR19ICisjaW5jbHVkZSA8c3RyaW5nLmg+ICAgICAgLyogZm9yIG1lbXNldCBldGMgKi8KKyNlbmRpZiAgLyogTEFDS1NfU1RSSU5HX0ggKi8KKyNpZiBVU0VfQlVJTFRJTl9GRlMKKyNpZm5kZWYgTEFDS1NfU1RSSU5HU19ICisjaW5jbHVkZSA8c3RyaW5ncy5oPiAgICAgLyogZm9yIGZmcyAqLworI2VuZGlmIC8qIExBQ0tTX1NUUklOR1NfSCAqLworI2VuZGlmIC8qIFVTRV9CVUlMVElOX0ZGUyAqLworI2lmIEhBVkVfTU1BUAorI2lmbmRlZiBMQUNLU19TWVNfTU1BTl9ICisvKiBPbiBzb21lIHZlcnNpb25zIG9mIGxpbnV4LCBtcmVtYXAgZGVjbCBpbiBtbWFuLmggbmVlZHMgX19VU0VfR05VIHNldCAqLworI2lmIChkZWZpbmVkKGxpbnV4KSAmJiAhZGVmaW5lZChfX1VTRV9HTlUpKQorI2RlZmluZSBfX1VTRV9HTlUgMQorI2luY2x1ZGUgPHN5cy9tbWFuLmg+ICAgIC8qIGZvciBtbWFwICovCisjdW5kZWYgX19VU0VfR05VCisjZWxzZQorI2luY2x1ZGUgPHN5cy9tbWFuLmg+ICAgIC8qIGZvciBtbWFwICovCisjZW5kaWYgLyogbGludXggKi8KKyNlbmRpZiAvKiBMQUNLU19TWVNfTU1BTl9IICovCisjaWZuZGVmIExBQ0tTX0ZDTlRMX0gKKyNpbmNsdWRlIDxmY250bC5oPgorI2VuZGlmIC8qIExBQ0tTX0ZDTlRMX0ggKi8KKyNlbmRpZiAvKiBIQVZFX01NQVAgKi8KKyNpZm5kZWYgTEFDS1NfVU5JU1REX0gKKyNpbmNsdWRlIDx1bmlzdGQuaD4gICAgIC8qIGZvciBzYnJrLCBzeXNjb25mICovCisjZWxzZSAvKiBMQUNLU19VTklTVERfSCAqLworI2lmICFkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiAhZGVmaW5lZChfX09wZW5CU0RfXykgJiYgIWRlZmluZWQoX19OZXRCU0RfXykKK2V4dGVybiB2b2lkKiAgICAgc2JyayhwdHJkaWZmX3QpOworI2VuZGlmIC8qIEZyZWVCU0QgZXRjICovCisjZW5kaWYgLyogTEFDS1NfVU5JU1REX0ggKi8KKworLyogRGVjbGFyYXRpb25zIGZvciBsb2NraW5nICovCisjaWYgVVNFX0xPQ0tTCisjaWZuZGVmIFdJTjMyCisjaWYgZGVmaW5lZCAoX19TVlI0KSAmJiBkZWZpbmVkIChfX3N1bikgIC8qIHNvbGFyaXMgKi8KKyNpbmNsdWRlIDx0aHJlYWQuaD4KKyNlbGlmICFkZWZpbmVkKExBQ0tTX1NDSEVEX0gpCisjaW5jbHVkZSA8c2NoZWQuaD4KKyNlbmRpZiAvKiBzb2xhcmlzIG9yIExBQ0tTX1NDSEVEX0ggKi8KKyNpZiAoZGVmaW5lZChVU0VfUkVDVVJTSVZFX0xPQ0tTKSAmJiBVU0VfUkVDVVJTSVZFX0xPQ0tTICE9IDApIHx8ICFVU0VfU1BJTl9MT0NLUworI2luY2x1ZGUgPHB0aHJlYWQuaD4KKyNlbmRpZiAvKiBVU0VfUkVDVVJTSVZFX0xPQ0tTIC4uLiAqLworI2VsaWYgZGVmaW5lZChfTVNDX1ZFUikKKyNpZm5kZWYgX01fQU1ENjQKKy8qIFRoZXNlIGFyZSBhbHJlYWR5IGRlZmluZWQgb24gQU1ENjQgYnVpbGRzICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCitMT05HIF9fY2RlY2wgX0ludGVybG9ja2VkQ29tcGFyZUV4Y2hhbmdlKExPTkcgdm9sYXRpbGUgKkRlc3QsIExPTkcgRXhjaGFuZ2UsIExPTkcgQ29tcCk7CitMT05HIF9fY2RlY2wgX0ludGVybG9ja2VkRXhjaGFuZ2UoTE9ORyB2b2xhdGlsZSAqVGFyZ2V0LCBMT05HIFZhbHVlKTsKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisjZW5kaWYgLyogX01fQU1ENjQgKi8KKyNwcmFnbWEgaW50cmluc2ljIChfSW50ZXJsb2NrZWRDb21wYXJlRXhjaGFuZ2UpCisjcHJhZ21hIGludHJpbnNpYyAoX0ludGVybG9ja2VkRXhjaGFuZ2UpCisjZGVmaW5lIGludGVybG9ja2VkY29tcGFyZWV4Y2hhbmdlIF9JbnRlcmxvY2tlZENvbXBhcmVFeGNoYW5nZQorI2RlZmluZSBpbnRlcmxvY2tlZGV4Y2hhbmdlIF9JbnRlcmxvY2tlZEV4Y2hhbmdlCisjZWxpZiBkZWZpbmVkKFdJTjMyKSAmJiBkZWZpbmVkKF9fR05VQ19fKQorI2RlZmluZSBpbnRlcmxvY2tlZGNvbXBhcmVleGNoYW5nZShhLCBiLCBjKSBfX3N5bmNfdmFsX2NvbXBhcmVfYW5kX3N3YXAoYSwgYywgYikKKyNkZWZpbmUgaW50ZXJsb2NrZWRleGNoYW5nZSBfX3N5bmNfbG9ja190ZXN0X2FuZF9zZXQKKyNlbmRpZiAvKiBXaW4zMiAqLworI2Vsc2UgLyogVVNFX0xPQ0tTICovCisjZW5kaWYgLyogVVNFX0xPQ0tTICovCisKKyNpZm5kZWYgTE9DS19BVF9GT1JLCisjZGVmaW5lIExPQ0tfQVRfRk9SSyAwCisjZW5kaWYKKworLyogRGVjbGFyYXRpb25zIGZvciBiaXQgc2Nhbm5pbmcgb24gd2luMzIgKi8KKyNpZiBkZWZpbmVkKF9NU0NfVkVSKSAmJiBfTVNDX1ZFUj49MTMwMAorI2lmbmRlZiBCaXRTY2FuRm9yd2FyZCAvKiBUcnkgdG8gYXZvaWQgcHVsbGluZyBpbiBXaW5OVC5oICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCit1bnNpZ25lZCBjaGFyIF9CaXRTY2FuRm9yd2FyZCh1bnNpZ25lZCBsb25nICppbmRleCwgdW5zaWduZWQgbG9uZyBtYXNrKTsKK3Vuc2lnbmVkIGNoYXIgX0JpdFNjYW5SZXZlcnNlKHVuc2lnbmVkIGxvbmcgKmluZGV4LCB1bnNpZ25lZCBsb25nIG1hc2spOworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworI2RlZmluZSBCaXRTY2FuRm9yd2FyZCBfQml0U2NhbkZvcndhcmQKKyNkZWZpbmUgQml0U2NhblJldmVyc2UgX0JpdFNjYW5SZXZlcnNlCisjcHJhZ21hIGludHJpbnNpYyhfQml0U2NhbkZvcndhcmQpCisjcHJhZ21hIGludHJpbnNpYyhfQml0U2NhblJldmVyc2UpCisjZW5kaWYgLyogQml0U2NhbkZvcndhcmQgKi8KKyNlbmRpZiAvKiBkZWZpbmVkKF9NU0NfVkVSKSAmJiBfTVNDX1ZFUj49MTMwMCAqLworCisjaWZuZGVmIFdJTjMyCisjaWZuZGVmIG1hbGxvY19nZXRwYWdlc2l6ZQorIyAgaWZkZWYgX1NDX1BBR0VTSVpFICAgICAgICAgLyogc29tZSBTVlI0IHN5c3RlbXMgb21pdCBhbiB1bmRlcnNjb3JlICovCisjICAgIGlmbmRlZiBfU0NfUEFHRV9TSVpFCisjICAgICAgZGVmaW5lIF9TQ19QQUdFX1NJWkUgX1NDX1BBR0VTSVpFCisjICAgIGVuZGlmCisjICBlbmRpZgorIyAgaWZkZWYgX1NDX1BBR0VfU0laRQorIyAgICBkZWZpbmUgbWFsbG9jX2dldHBhZ2VzaXplIHN5c2NvbmYoX1NDX1BBR0VfU0laRSkKKyMgIGVsc2UKKyMgICAgaWYgZGVmaW5lZChCU0QpIHx8IGRlZmluZWQoREdVWCkgfHwgZGVmaW5lZChIQVZFX0dFVFBBR0VTSVpFKQorICAgICAgIGV4dGVybiBzaXplX3QgZ2V0cGFnZXNpemUoKTsKKyMgICAgICBkZWZpbmUgbWFsbG9jX2dldHBhZ2VzaXplIGdldHBhZ2VzaXplKCkKKyMgICAgZWxzZQorIyAgICAgIGlmZGVmIFdJTjMyIC8qIHVzZSBzdXBwbGllZCBlbXVsYXRpb24gb2YgZ2V0cGFnZXNpemUgKi8KKyMgICAgICAgIGRlZmluZSBtYWxsb2NfZ2V0cGFnZXNpemUgZ2V0cGFnZXNpemUoKQorIyAgICAgIGVsc2UKKyMgICAgICAgIGlmbmRlZiBMQUNLU19TWVNfUEFSQU1fSAorIyAgICAgICAgICBpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyMgICAgICAgIGVuZGlmCisjICAgICAgICBpZmRlZiBFWEVDX1BBR0VTSVpFCisjICAgICAgICAgIGRlZmluZSBtYWxsb2NfZ2V0cGFnZXNpemUgRVhFQ19QQUdFU0laRQorIyAgICAgICAgZWxzZQorIyAgICAgICAgICBpZmRlZiBOQlBHCisjICAgICAgICAgICAgaWZuZGVmIENMU0laRQorIyAgICAgICAgICAgICAgZGVmaW5lIG1hbGxvY19nZXRwYWdlc2l6ZSBOQlBHCisjICAgICAgICAgICAgZWxzZQorIyAgICAgICAgICAgICAgZGVmaW5lIG1hbGxvY19nZXRwYWdlc2l6ZSAoTkJQRyAqIENMU0laRSkKKyMgICAgICAgICAgICBlbmRpZgorIyAgICAgICAgICBlbHNlCisjICAgICAgICAgICAgaWZkZWYgTkJQQworIyAgICAgICAgICAgICAgZGVmaW5lIG1hbGxvY19nZXRwYWdlc2l6ZSBOQlBDCisjICAgICAgICAgICAgZWxzZQorIyAgICAgICAgICAgICAgaWZkZWYgUEFHRVNJWkUKKyMgICAgICAgICAgICAgICAgZGVmaW5lIG1hbGxvY19nZXRwYWdlc2l6ZSBQQUdFU0laRQorIyAgICAgICAgICAgICAgZWxzZSAvKiBqdXN0IGd1ZXNzICovCisjICAgICAgICAgICAgICAgIGRlZmluZSBtYWxsb2NfZ2V0cGFnZXNpemUgKChzaXplX3QpNDA5NlUpCisjICAgICAgICAgICAgICBlbmRpZgorIyAgICAgICAgICAgIGVuZGlmCisjICAgICAgICAgIGVuZGlmCisjICAgICAgICBlbmRpZgorIyAgICAgIGVuZGlmCisjICAgIGVuZGlmCisjICBlbmRpZgorI2VuZGlmCisjZW5kaWYKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLSBzaXplX3QgYW5kIGFsaWdubWVudCBwcm9wZXJ0aWVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIFRoZSBieXRlIGFuZCBiaXQgc2l6ZSBvZiBhIHNpemVfdCAqLworI2RlZmluZSBTSVpFX1RfU0laRSAgICAgICAgIChzaXplb2Yoc2l6ZV90KSkKKyNkZWZpbmUgU0laRV9UX0JJVFNJWkUgICAgICAoc2l6ZW9mKHNpemVfdCkgPDwgMykKKworLyogU29tZSBjb25zdGFudHMgY29lcmNlZCB0byBzaXplX3QgKi8KKy8qIEFubm95aW5nIGJ1dCBuZWNlc3NhcnkgdG8gYXZvaWQgZXJyb3JzIG9uIHNvbWUgcGxhdGZvcm1zICovCisjZGVmaW5lIFNJWkVfVF9aRVJPICAgICAgICAgKChzaXplX3QpMCkKKyNkZWZpbmUgU0laRV9UX09ORSAgICAgICAgICAoKHNpemVfdCkxKQorI2RlZmluZSBTSVpFX1RfVFdPICAgICAgICAgICgoc2l6ZV90KTIpCisjZGVmaW5lIFNJWkVfVF9GT1VSICAgICAgICAgKChzaXplX3QpNCkKKyNkZWZpbmUgVFdPX1NJWkVfVF9TSVpFUyAgICAoU0laRV9UX1NJWkU8PDEpCisjZGVmaW5lIEZPVVJfU0laRV9UX1NJWkVTICAgKFNJWkVfVF9TSVpFPDwyKQorI2RlZmluZSBTSVhfU0laRV9UX1NJWkVTICAgIChGT1VSX1NJWkVfVF9TSVpFUytUV09fU0laRV9UX1NJWkVTKQorI2RlZmluZSBIQUxGX01BWF9TSVpFX1QgICAgIChNQVhfU0laRV9UIC8gMlUpCisKKy8qIFRoZSBiaXQgbWFzayB2YWx1ZSBjb3JyZXNwb25kaW5nIHRvIE1BTExPQ19BTElHTk1FTlQgKi8KKyNkZWZpbmUgQ0hVTktfQUxJR05fTUFTSyAgICAoTUFMTE9DX0FMSUdOTUVOVCAtIFNJWkVfVF9PTkUpCisKKy8qIFRydWUgaWYgYWRkcmVzcyBhIGhhcyBhY2NlcHRhYmxlIGFsaWdubWVudCAqLworI2RlZmluZSBpc19hbGlnbmVkKEEpICAgICAgICgoKHNpemVfdCkoKEEpKSAmIChDSFVOS19BTElHTl9NQVNLKSkgPT0gMCkKKworLyogdGhlIG51bWJlciBvZiBieXRlcyB0byBvZmZzZXQgYW4gYWRkcmVzcyB0byBhbGlnbiBpdCAqLworI2RlZmluZSBhbGlnbl9vZmZzZXQoQSlcCisgKCgoKHNpemVfdCkoQSkgJiBDSFVOS19BTElHTl9NQVNLKSA9PSAwKT8gMCA6XAorICAoKE1BTExPQ19BTElHTk1FTlQgLSAoKHNpemVfdCkoQSkgJiBDSFVOS19BTElHTl9NQVNLKSkgJiBDSFVOS19BTElHTl9NQVNLKSkKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gTU1BUCBwcmVsaW1pbmFyaWVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyoKKyAgIElmIEhBVkVfTU9SRUNPUkUgb3IgSEFWRV9NTUFQIGFyZSBmYWxzZSwgd2UganVzdCBkZWZpbmUgY2FsbHMgYW5kCisgICBjaGVja3MgdG8gZmFpbCBzbyBjb21waWxlciBvcHRpbWl6ZXIgY2FuIGRlbGV0ZSBjb2RlIHJhdGhlciB0aGFuCisgICB1c2luZyBzbyBtYW55ICIjaWYicy4KKyovCisKKworLyogTU9SRUNPUkUgYW5kIE1NQVAgbXVzdCByZXR1cm4gTUZBSUwgb24gZmFpbHVyZSAqLworI2RlZmluZSBNRkFJTCAgICAgICAgICAgICAgICAoKHZvaWQqKShNQVhfU0laRV9UKSkKKyNkZWZpbmUgQ01GQUlMICAgICAgICAgICAgICAgKChjaGFyKikoTUZBSUwpKSAvKiBkZWZpbmVkIGZvciBjb252ZW5pZW5jZSAqLworCisjaWYgSEFWRV9NTUFQCisKKyNpZm5kZWYgV0lOMzIKKyNkZWZpbmUgTVVOTUFQX0RFRkFVTFQoYSwgcykgIG11bm1hcCgoYSksIChzKSkKKyNkZWZpbmUgTU1BUF9QUk9UICAgICAgICAgICAgKFBST1RfUkVBRHxQUk9UX1dSSVRFKQorI2lmICFkZWZpbmVkKE1BUF9BTk9OWU1PVVMpICYmIGRlZmluZWQoTUFQX0FOT04pCisjZGVmaW5lIE1BUF9BTk9OWU1PVVMgICAgICAgIE1BUF9BTk9OCisjZW5kaWYgLyogTUFQX0FOT04gKi8KKyNpZmRlZiBNQVBfQU5PTllNT1VTCisjZGVmaW5lIE1NQVBfRkxBR1MgICAgICAgICAgIChNQVBfUFJJVkFURXxNQVBfQU5PTllNT1VTKQorI2RlZmluZSBNTUFQX0RFRkFVTFQocykgICAgICAgbW1hcCgwLCAocyksIE1NQVBfUFJPVCwgTU1BUF9GTEFHUywgLTEsIDApCisjZWxzZSAvKiBNQVBfQU5PTllNT1VTICovCisvKgorICAgTmVhcmx5IGFsbCB2ZXJzaW9ucyBvZiBtbWFwIHN1cHBvcnQgTUFQX0FOT05ZTU9VUywgc28gdGhlIGZvbGxvd2luZworICAgaXMgdW5saWtlbHkgdG8gYmUgbmVlZGVkLCBidXQgaXMgc3VwcGxpZWQganVzdCBpbiBjYXNlLgorKi8KKyNkZWZpbmUgTU1BUF9GTEFHUyAgICAgICAgICAgKE1BUF9QUklWQVRFKQorc3RhdGljIGludCBkZXZfemVyb19mZCA9IC0xOyAvKiBDYWNoZWQgZmlsZSBkZXNjcmlwdG9yIGZvciAvZGV2L3plcm8uICovCisjZGVmaW5lIE1NQVBfREVGQVVMVChzKSAoKGRldl96ZXJvX2ZkIDwgMCkgPyBcCisgICAgICAgICAgIChkZXZfemVyb19mZCA9IG9wZW4oIi9kZXYvemVybyIsIE9fUkRXUiksIFwKKyAgICAgICAgICAgIG1tYXAoMCwgKHMpLCBNTUFQX1BST1QsIE1NQVBfRkxBR1MsIGRldl96ZXJvX2ZkLCAwKSkgOiBcCisgICAgICAgICAgICBtbWFwKDAsIChzKSwgTU1BUF9QUk9ULCBNTUFQX0ZMQUdTLCBkZXZfemVyb19mZCwgMCkpCisjZW5kaWYgLyogTUFQX0FOT05ZTU9VUyAqLworCisjZGVmaW5lIERJUkVDVF9NTUFQX0RFRkFVTFQocykgTU1BUF9ERUZBVUxUKHMpCisKKyNlbHNlIC8qIFdJTjMyICovCisKKy8qIFdpbjMyIE1NQVAgdmlhIFZpcnR1YWxBbGxvYyAqLworc3RhdGljIEZPUkNFSU5MSU5FIHZvaWQqIHdpbjMybW1hcChzaXplX3Qgc2l6ZSkgeworICB2b2lkKiBwdHIgPSBWaXJ0dWFsQWxsb2MoMCwgc2l6ZSwgTUVNX1JFU0VSVkV8TUVNX0NPTU1JVCwgUEFHRV9SRUFEV1JJVEUpOworICByZXR1cm4gKHB0ciAhPSAwKT8gcHRyOiBNRkFJTDsKK30KKworLyogRm9yIGRpcmVjdCBNTUFQLCB1c2UgTUVNX1RPUF9ET1dOIHRvIG1pbmltaXplIGludGVyZmVyZW5jZSAqLworc3RhdGljIEZPUkNFSU5MSU5FIHZvaWQqIHdpbjMyZGlyZWN0X21tYXAoc2l6ZV90IHNpemUpIHsKKyAgdm9pZCogcHRyID0gVmlydHVhbEFsbG9jKDAsIHNpemUsIE1FTV9SRVNFUlZFfE1FTV9DT01NSVR8TUVNX1RPUF9ET1dOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgUEFHRV9SRUFEV1JJVEUpOworICByZXR1cm4gKHB0ciAhPSAwKT8gcHRyOiBNRkFJTDsKK30KKworLyogVGhpcyBmdW5jdGlvbiBzdXBwb3J0cyByZWxlYXNpbmcgY29hbGVzZWQgc2VnbWVudHMgKi8KK3N0YXRpYyBGT1JDRUlOTElORSBpbnQgd2luMzJtdW5tYXAodm9pZCogcHRyLCBzaXplX3Qgc2l6ZSkgeworICBNRU1PUllfQkFTSUNfSU5GT1JNQVRJT04gbWluZm87CisgIGNoYXIqIGNwdHIgPSAoY2hhciopcHRyOworICB3aGlsZSAoc2l6ZSkgeworICAgIGlmIChWaXJ0dWFsUXVlcnkoY3B0ciwgJm1pbmZvLCBzaXplb2YobWluZm8pKSA9PSAwKQorICAgICAgcmV0dXJuIC0xOworICAgIGlmIChtaW5mby5CYXNlQWRkcmVzcyAhPSBjcHRyIHx8IG1pbmZvLkFsbG9jYXRpb25CYXNlICE9IGNwdHIgfHwKKyAgICAgICAgbWluZm8uU3RhdGUgIT0gTUVNX0NPTU1JVCB8fCBtaW5mby5SZWdpb25TaXplID4gc2l6ZSkKKyAgICAgIHJldHVybiAtMTsKKyAgICBpZiAoVmlydHVhbEZyZWUoY3B0ciwgMCwgTUVNX1JFTEVBU0UpID09IDApCisgICAgICByZXR1cm4gLTE7CisgICAgY3B0ciArPSBtaW5mby5SZWdpb25TaXplOworICAgIHNpemUgLT0gbWluZm8uUmVnaW9uU2l6ZTsKKyAgfQorICByZXR1cm4gMDsKK30KKworI2RlZmluZSBNTUFQX0RFRkFVTFQocykgICAgICAgICAgICAgd2luMzJtbWFwKHMpCisjZGVmaW5lIE1VTk1BUF9ERUZBVUxUKGEsIHMpICAgICAgICB3aW4zMm11bm1hcCgoYSksIChzKSkKKyNkZWZpbmUgRElSRUNUX01NQVBfREVGQVVMVChzKSAgICAgIHdpbjMyZGlyZWN0X21tYXAocykKKyNlbmRpZiAvKiBXSU4zMiAqLworI2VuZGlmIC8qIEhBVkVfTU1BUCAqLworCisjaWYgSEFWRV9NUkVNQVAKKyNpZm5kZWYgV0lOMzIKKyNkZWZpbmUgTVJFTUFQX0RFRkFVTFQoYWRkciwgb3N6LCBuc3osIG12KSBtcmVtYXAoKGFkZHIpLCAob3N6KSwgKG5zeiksIChtdikpCisjZW5kaWYgLyogV0lOMzIgKi8KKyNlbmRpZiAvKiBIQVZFX01SRU1BUCAqLworCisvKioKKyAqIERlZmluZSBDQUxMX01PUkVDT1JFCisgKi8KKyNpZiBIQVZFX01PUkVDT1JFCisgICAgI2lmZGVmIE1PUkVDT1JFCisgICAgICAgICNkZWZpbmUgQ0FMTF9NT1JFQ09SRShTKSAgICBNT1JFQ09SRShTKQorICAgICNlbHNlICAvKiBNT1JFQ09SRSAqLworICAgICAgICAjZGVmaW5lIENBTExfTU9SRUNPUkUoUykgICAgTU9SRUNPUkVfREVGQVVMVChTKQorICAgICNlbmRpZiAvKiBNT1JFQ09SRSAqLworI2Vsc2UgIC8qIEhBVkVfTU9SRUNPUkUgKi8KKyAgICAjZGVmaW5lIENBTExfTU9SRUNPUkUoUykgICAgICAgIE1GQUlMCisjZW5kaWYgLyogSEFWRV9NT1JFQ09SRSAqLworCisvKioKKyAqIERlZmluZSBDQUxMX01NQVAvQ0FMTF9NVU5NQVAvQ0FMTF9ESVJFQ1RfTU1BUAorICovCisjaWYgSEFWRV9NTUFQCisgICAgI2RlZmluZSBVU0VfTU1BUF9CSVQgICAgICAgICAgICAoU0laRV9UX09ORSkKKworICAgICNpZmRlZiBNTUFQCisgICAgICAgICNkZWZpbmUgQ0FMTF9NTUFQKHMpICAgICAgICBNTUFQKHMpCisgICAgI2Vsc2UgLyogTU1BUCAqLworICAgICAgICAjZGVmaW5lIENBTExfTU1BUChzKSAgICAgICAgTU1BUF9ERUZBVUxUKHMpCisgICAgI2VuZGlmIC8qIE1NQVAgKi8KKyAgICAjaWZkZWYgTVVOTUFQCisgICAgICAgICNkZWZpbmUgQ0FMTF9NVU5NQVAoYSwgcykgICBNVU5NQVAoKGEpLCAocykpCisgICAgI2Vsc2UgLyogTVVOTUFQICovCisgICAgICAgICNkZWZpbmUgQ0FMTF9NVU5NQVAoYSwgcykgICBNVU5NQVBfREVGQVVMVCgoYSksIChzKSkKKyAgICAjZW5kaWYgLyogTVVOTUFQICovCisgICAgI2lmZGVmIERJUkVDVF9NTUFQCisgICAgICAgICNkZWZpbmUgQ0FMTF9ESVJFQ1RfTU1BUChzKSBESVJFQ1RfTU1BUChzKQorICAgICNlbHNlIC8qIERJUkVDVF9NTUFQICovCisgICAgICAgICNkZWZpbmUgQ0FMTF9ESVJFQ1RfTU1BUChzKSBESVJFQ1RfTU1BUF9ERUZBVUxUKHMpCisgICAgI2VuZGlmIC8qIERJUkVDVF9NTUFQICovCisjZWxzZSAgLyogSEFWRV9NTUFQICovCisgICAgI2RlZmluZSBVU0VfTU1BUF9CSVQgICAgICAgICAgICAoU0laRV9UX1pFUk8pCisKKyAgICAjZGVmaW5lIE1NQVAocykgICAgICAgICAgICAgICAgIE1GQUlMCisgICAgI2RlZmluZSBNVU5NQVAoYSwgcykgICAgICAgICAgICAoLTEpCisgICAgI2RlZmluZSBESVJFQ1RfTU1BUChzKSAgICAgICAgICBNRkFJTAorICAgICNkZWZpbmUgQ0FMTF9ESVJFQ1RfTU1BUChzKSAgICAgRElSRUNUX01NQVAocykKKyAgICAjZGVmaW5lIENBTExfTU1BUChzKSAgICAgICAgICAgIE1NQVAocykKKyAgICAjZGVmaW5lIENBTExfTVVOTUFQKGEsIHMpICAgICAgIE1VTk1BUCgoYSksIChzKSkKKyNlbmRpZiAvKiBIQVZFX01NQVAgKi8KKworLyoqCisgKiBEZWZpbmUgQ0FMTF9NUkVNQVAKKyAqLworI2lmIEhBVkVfTU1BUCAmJiBIQVZFX01SRU1BUAorICAgICNpZmRlZiBNUkVNQVAKKyAgICAgICAgI2RlZmluZSBDQUxMX01SRU1BUChhZGRyLCBvc3osIG5zeiwgbXYpIE1SRU1BUCgoYWRkciksIChvc3opLCAobnN6KSwgKG12KSkKKyAgICAjZWxzZSAvKiBNUkVNQVAgKi8KKyAgICAgICAgI2RlZmluZSBDQUxMX01SRU1BUChhZGRyLCBvc3osIG5zeiwgbXYpIE1SRU1BUF9ERUZBVUxUKChhZGRyKSwgKG9zeiksIChuc3opLCAobXYpKQorICAgICNlbmRpZiAvKiBNUkVNQVAgKi8KKyNlbHNlICAvKiBIQVZFX01NQVAgJiYgSEFWRV9NUkVNQVAgKi8KKyAgICAjZGVmaW5lIENBTExfTVJFTUFQKGFkZHIsIG9zeiwgbnN6LCBtdikgICAgIE1GQUlMCisjZW5kaWYgLyogSEFWRV9NTUFQICYmIEhBVkVfTVJFTUFQICovCisKKy8qIG1zdGF0ZSBiaXQgc2V0IGlmIGNvbnRpbmd1b3VzIG1vcmVjb3JlIGRpc2FibGVkIG9yIGZhaWxlZCAqLworI2RlZmluZSBVU0VfTk9OQ09OVElHVU9VU19CSVQgKDRVKQorCisvKiBzZWdtZW50IGJpdCBzZXQgaW4gY3JlYXRlX21zcGFjZV93aXRoX2Jhc2UgKi8KKyNkZWZpbmUgRVhURVJOX0JJVCAgICAgICAgICAgICg4VSkKKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gTG9jayBwcmVsaW1pbmFyaWVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKgorICBXaGVuIGxvY2tzIGFyZSBkZWZpbmVkLCB0aGVyZSBpcyBvbmUgZ2xvYmFsIGxvY2ssIHBsdXMKKyAgb25lIHBlci1tc3BhY2UgbG9jay4KKworICBUaGUgZ2xvYmFsIGxvY2tfZW5zdXJlcyB0aGF0IG1wYXJhbXMubWFnaWMgYW5kIG90aGVyIHVuaXF1ZQorICBtcGFyYW1zIHZhbHVlcyBhcmUgaW5pdGlhbGl6ZWQgb25seSBvbmNlLiBJdCBhbHNvIHByb3RlY3RzCisgIHNlcXVlbmNlcyBvZiBjYWxscyB0byBNT1JFQ09SRS4gIEluIG1hbnkgY2FzZXMgc3lzX2FsbG9jIHJlcXVpcmVzCisgIHR3byBjYWxscywgdGhhdCBzaG91bGQgbm90IGJlIGludGVybGVhdmVkIHdpdGggY2FsbHMgYnkgb3RoZXIKKyAgdGhyZWFkcy4gIFRoaXMgZG9lcyBub3QgcHJvdGVjdCBhZ2FpbnN0IGRpcmVjdCBjYWxscyB0byBNT1JFQ09SRQorICBieSBvdGhlciB0aHJlYWRzIG5vdCB1c2luZyB0aGlzIGxvY2ssIHNvIHRoZXJlIGlzIHN0aWxsIGNvZGUgdG8KKyAgY29wZSB0aGUgYmVzdCB3ZSBjYW4gb24gaW50ZXJmZXJlbmNlLgorCisgIFBlci1tc3BhY2UgbG9ja3Mgc3Vycm91bmQgY2FsbHMgdG8gbWFsbG9jLCBmcmVlLCBldGMuCisgIEJ5IGRlZmF1bHQsIGxvY2tzIGFyZSBzaW1wbGUgbm9uLXJlZW50cmFudCBtdXRleGVzLgorCisgIEJlY2F1c2UgbG9jay1wcm90ZWN0ZWQgcmVnaW9ucyBnZW5lcmFsbHkgaGF2ZSBib3VuZGVkIHRpbWVzLCBpdCBpcworICBPSyB0byB1c2UgdGhlIHN1cHBsaWVkIHNpbXBsZSBzcGlubG9ja3MuIFNwaW5sb2NrcyBhcmUgbGlrZWx5IHRvCisgIGltcHJvdmUgcGVyZm9ybWFuY2UgZm9yIGxpZ2h0bHkgY29udGVuZGVkIGFwcGxpY2F0aW9ucywgYnV0IHdvcnNlbgorICBwZXJmb3JtYW5jZSB1bmRlciBoZWF2eSBjb250ZW50aW9uLgorCisgIElmIFVTRV9MT0NLUyBpcyA+IDEsIHRoZSBkZWZpbml0aW9ucyBvZiBsb2NrIHJvdXRpbmVzIGhlcmUgYXJlCisgIGJ5cGFzc2VkLCBpbiB3aGljaCBjYXNlIHlvdSB3aWxsIG5lZWQgdG8gZGVmaW5lIHRoZSB0eXBlIE1MT0NLX1QsCisgIGFuZCBhdCBsZWFzdCBJTklUSUFMX0xPQ0ssIERFU1RST1lfTE9DSywgQUNRVUlSRV9MT0NLLCBSRUxFQVNFX0xPQ0sKKyAgYW5kIFRSWV9MT0NLLiAgWW91IG11c3QgYWxzbyBkZWNsYXJlIGEKKyAgICBzdGF0aWMgTUxPQ0tfVCBtYWxsb2NfZ2xvYmFsX211dGV4ID0geyBpbml0aWFsaXphdGlvbiB2YWx1ZXMgfTsuCisKKyovCisKKyNpZiAhVVNFX0xPQ0tTCisjZGVmaW5lIFVTRV9MT0NLX0JJVCAgICAgICAgICAgICAgICgwVSkKKyNkZWZpbmUgSU5JVElBTF9MT0NLKGwpICAgICAgICAgICAgKDApCisjZGVmaW5lIERFU1RST1lfTE9DSyhsKSAgICAgICAgICAgICgwKQorI2RlZmluZSBBQ1FVSVJFX01BTExPQ19HTE9CQUxfTE9DSygpCisjZGVmaW5lIFJFTEVBU0VfTUFMTE9DX0dMT0JBTF9MT0NLKCkKKworI2Vsc2UKKyNpZiBVU0VfTE9DS1MgPiAxCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgVXNlci1kZWZpbmVkIGxvY2tzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogRGVmaW5lIHlvdXIgb3duIGxvY2sgaW1wbGVtZW50YXRpb24gaGVyZSAqLworLyogI2RlZmluZSBJTklUSUFMX0xPQ0sobGspICAuLi4gKi8KKy8qICNkZWZpbmUgREVTVFJPWV9MT0NLKGxrKSAgLi4uICovCisvKiAjZGVmaW5lIEFDUVVJUkVfTE9DSyhsaykgIC4uLiAqLworLyogI2RlZmluZSBSRUxFQVNFX0xPQ0sobGspICAuLi4gKi8KKy8qICNkZWZpbmUgVFJZX0xPQ0sobGspIC4uLiAqLworLyogc3RhdGljIE1MT0NLX1QgbWFsbG9jX2dsb2JhbF9tdXRleCA9IC4uLiAqLworCisjZWxpZiBVU0VfU1BJTl9MT0NLUworCisvKiBGaXJzdCwgZGVmaW5lIENBU19MT0NLIGFuZCBDTEVBUl9MT0NLIG9uIGludHMgKi8KKy8qIE5vdGUgQ0FTX0xPQ0sgZGVmaW5lZCB0byByZXR1cm4gMCBvbiBzdWNjZXNzICovCisKKyNpZiBkZWZpbmVkKF9fR05VQ19fKSYmIChfX0dOVUNfXyA+IDQgfHwgKF9fR05VQ19fID09IDQgJiYgX19HTlVDX01JTk9SX18gPj0gMSkpCisjZGVmaW5lIENBU19MT0NLKHNsKSAgICAgX19zeW5jX2xvY2tfdGVzdF9hbmRfc2V0KHNsLCAxKQorI2RlZmluZSBDTEVBUl9MT0NLKHNsKSAgIF9fc3luY19sb2NrX3JlbGVhc2Uoc2wpCisKKyNlbGlmIChkZWZpbmVkKF9fR05VQ19fKSAmJiAoZGVmaW5lZChfX2kzODZfXykgfHwgZGVmaW5lZChfX3g4Nl82NF9fKSkpCisvKiBDdXN0b20gc3BpbiBsb2NrcyBmb3Igb2xkZXIgZ2NjIG9uIHg4NiAqLworc3RhdGljIEZPUkNFSU5MSU5FIGludCB4ODZfY2FzX2xvY2soaW50ICpzbCkgeworICBpbnQgcmV0OworICBpbnQgdmFsID0gMTsKKyAgaW50IGNtcCA9IDA7CisgIF9fYXNtX18gX192b2xhdGlsZV9fICAoImxvY2s7IGNtcHhjaGdsICUxLCAlMiIKKyAgICAgICAgICAgICAgICAgICAgICAgICA6ICI9YSIgKHJldCkKKyAgICAgICAgICAgICAgICAgICAgICAgICA6ICJyIiAodmFsKSwgIm0iICgqKHNsKSksICIwIihjbXApCisgICAgICAgICAgICAgICAgICAgICAgICAgOiAibWVtb3J5IiwgImNjIik7CisgIHJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBGT1JDRUlOTElORSB2b2lkIHg4Nl9jbGVhcl9sb2NrKGludCogc2wpIHsKKyAgYXNzZXJ0KCpzbCAhPSAwKTsKKyAgaW50IHByZXYgPSAwOworICBpbnQgcmV0OworICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImxvY2s7IHhjaGdsICUwLCAlMSIKKyAgICAgICAgICAgICAgICAgICAgICAgIDogIj1yIiAocmV0KQorICAgICAgICAgICAgICAgICAgICAgICAgOiAibSIgKCooc2wpKSwgIjAiKHByZXYpCisgICAgICAgICAgICAgICAgICAgICAgICA6ICJtZW1vcnkiKTsKK30KKworI2RlZmluZSBDQVNfTE9DSyhzbCkgICAgIHg4Nl9jYXNfbG9jayhzbCkKKyNkZWZpbmUgQ0xFQVJfTE9DSyhzbCkgICB4ODZfY2xlYXJfbG9jayhzbCkKKworI2Vsc2UgLyogV2luMzIgTVNDICovCisjZGVmaW5lIENBU19MT0NLKHNsKSAgICAgaW50ZXJsb2NrZWRleGNoYW5nZShzbCwgKExPTkcpMSkKKyNkZWZpbmUgQ0xFQVJfTE9DSyhzbCkgICBpbnRlcmxvY2tlZGV4Y2hhbmdlIChzbCwgKExPTkcpMCkKKworI2VuZGlmIC8qIC4uLiBnY2Mgc3BpbnMgbG9ja3MgLi4uICovCisKKy8qIEhvdyB0byB5aWVsZCBmb3IgYSBzcGluIGxvY2sgKi8KKyNkZWZpbmUgU1BJTlNfUEVSX1lJRUxEICAgICAgIDYzCisjaWYgZGVmaW5lZChfTVNDX1ZFUikKKyNkZWZpbmUgU0xFRVBfRVhfRFVSQVRJT04gICAgIDUwIC8qIGRlbGF5IGZvciB5aWVsZC9zbGVlcCAqLworI2RlZmluZSBTUElOX0xPQ0tfWUlFTEQgIFNsZWVwRXgoU0xFRVBfRVhfRFVSQVRJT04sIEZBTFNFKQorI2VsaWYgZGVmaW5lZCAoX19TVlI0KSAmJiBkZWZpbmVkIChfX3N1bikgLyogc29sYXJpcyAqLworI2RlZmluZSBTUElOX0xPQ0tfWUlFTEQgICB0aHJfeWllbGQoKTsKKyNlbGlmICFkZWZpbmVkKExBQ0tTX1NDSEVEX0gpCisjZGVmaW5lIFNQSU5fTE9DS19ZSUVMRCAgIHNjaGVkX3lpZWxkKCk7CisjZWxzZQorI2RlZmluZSBTUElOX0xPQ0tfWUlFTEQKKyNlbmRpZiAvKiAuLi4geWllbGQgLi4uICovCisKKyNpZiAhZGVmaW5lZChVU0VfUkVDVVJTSVZFX0xPQ0tTKSB8fCBVU0VfUkVDVVJTSVZFX0xPQ0tTID09IDAKKy8qIFBsYWluIHNwaW4gbG9ja3MgdXNlIHNpbmdsZSB3b3JkIChlbWJlZGRlZCBpbiBtYWxsb2Nfc3RhdGVzKSAqLworc3RhdGljIGludCBzcGluX2FjcXVpcmVfbG9jayhpbnQgKnNsKSB7CisgIGludCBzcGlucyA9IDA7CisgIHdoaWxlICgqKHZvbGF0aWxlIGludCAqKXNsICE9IDAgfHwgQ0FTX0xPQ0soc2wpKSB7CisgICAgaWYgKCgrK3NwaW5zICYgU1BJTlNfUEVSX1lJRUxEKSA9PSAwKSB7CisgICAgICBTUElOX0xPQ0tfWUlFTEQ7CisgICAgfQorICB9CisgIHJldHVybiAwOworfQorCisjZGVmaW5lIE1MT0NLX1QgICAgICAgICAgICAgICBpbnQKKyNkZWZpbmUgVFJZX0xPQ0soc2wpICAgICAgICAgICFDQVNfTE9DSyhzbCkKKyNkZWZpbmUgUkVMRUFTRV9MT0NLKHNsKSAgICAgIENMRUFSX0xPQ0soc2wpCisjZGVmaW5lIEFDUVVJUkVfTE9DSyhzbCkgICAgICAoQ0FTX0xPQ0soc2wpPyBzcGluX2FjcXVpcmVfbG9jayhzbCkgOiAwKQorI2RlZmluZSBJTklUSUFMX0xPQ0soc2wpICAgICAgKCpzbCA9IDApCisjZGVmaW5lIERFU1RST1lfTE9DSyhzbCkgICAgICAoMCkKK3N0YXRpYyBNTE9DS19UIG1hbGxvY19nbG9iYWxfbXV0ZXggPSAwOworCisjZWxzZSAvKiBVU0VfUkVDVVJTSVZFX0xPQ0tTICovCisvKiB0eXBlcyBmb3IgbG9jayBvd25lcnMgKi8KKyNpZmRlZiBXSU4zMgorI2RlZmluZSBUSFJFQURfSURfVCAgICAgICAgICAgRFdPUkQKKyNkZWZpbmUgQ1VSUkVOVF9USFJFQUQgICAgICAgIEdldEN1cnJlbnRUaHJlYWRJZCgpCisjZGVmaW5lIEVRX09XTkVSKFgsWSkgICAgICAgICAoKFgpID09IChZKSkKKyNlbHNlCisvKgorICBOb3RlOiB0aGUgZm9sbG93aW5nIGFzc3VtZSB0aGF0IHB0aHJlYWRfdCBpcyBhIHR5cGUgdGhhdCBjYW4gYmUKKyAgaW5pdGlhbGl6ZWQgdG8gKGNhc3RlZCkgemVyby4gSWYgdGhpcyBpcyBub3QgdGhlIGNhc2UsIHlvdSB3aWxsIG5lZWQgdG8KKyAgc29tZWhvdyByZWRlZmluZSB0aGVzZSBvciBub3QgdXNlIHNwaW4gbG9ja3MuCisqLworI2RlZmluZSBUSFJFQURfSURfVCAgICAgICAgICAgcHRocmVhZF90CisjZGVmaW5lIENVUlJFTlRfVEhSRUFEICAgICAgICBwdGhyZWFkX3NlbGYoKQorI2RlZmluZSBFUV9PV05FUihYLFkpICAgICAgICAgcHRocmVhZF9lcXVhbChYLCBZKQorI2VuZGlmCisKK3N0cnVjdCBtYWxsb2NfcmVjdXJzaXZlX2xvY2sgeworICBpbnQgc2w7CisgIHVuc2lnbmVkIGludCBjOworICBUSFJFQURfSURfVCB0aHJlYWRpZDsKK307CisKKyNkZWZpbmUgTUxPQ0tfVCAgc3RydWN0IG1hbGxvY19yZWN1cnNpdmVfbG9jaworc3RhdGljIE1MT0NLX1QgbWFsbG9jX2dsb2JhbF9tdXRleCA9IHsgMCwgMCwgKFRIUkVBRF9JRF9UKTB9OworCitzdGF0aWMgRk9SQ0VJTkxJTkUgdm9pZCByZWN1cnNpdmVfcmVsZWFzZV9sb2NrKE1MT0NLX1QgKmxrKSB7CisgIGFzc2VydChsay0+c2wgIT0gMCk7CisgIGlmICgtLWxrLT5jID09IDApIHsKKyAgICBDTEVBUl9MT0NLKCZsay0+c2wpOworICB9Cit9CisKK3N0YXRpYyBGT1JDRUlOTElORSBpbnQgcmVjdXJzaXZlX2FjcXVpcmVfbG9jayhNTE9DS19UICpsaykgeworICBUSFJFQURfSURfVCBteXRocmVhZGlkID0gQ1VSUkVOVF9USFJFQUQ7CisgIGludCBzcGlucyA9IDA7CisgIGZvciAoOzspIHsKKyAgICBpZiAoKigodm9sYXRpbGUgaW50ICopKCZsay0+c2wpKSA9PSAwKSB7CisgICAgICBpZiAoIUNBU19MT0NLKCZsay0+c2wpKSB7CisgICAgICAgIGxrLT50aHJlYWRpZCA9IG15dGhyZWFkaWQ7CisgICAgICAgIGxrLT5jID0gMTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgICB9CisgICAgfQorICAgIGVsc2UgaWYgKEVRX09XTkVSKGxrLT50aHJlYWRpZCwgbXl0aHJlYWRpZCkpIHsKKyAgICAgICsrbGstPmM7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgaWYgKCgrK3NwaW5zICYgU1BJTlNfUEVSX1lJRUxEKSA9PSAwKSB7CisgICAgICBTUElOX0xPQ0tfWUlFTEQ7CisgICAgfQorICB9Cit9CisKK3N0YXRpYyBGT1JDRUlOTElORSBpbnQgcmVjdXJzaXZlX3RyeV9sb2NrKE1MT0NLX1QgKmxrKSB7CisgIFRIUkVBRF9JRF9UIG15dGhyZWFkaWQgPSBDVVJSRU5UX1RIUkVBRDsKKyAgaWYgKCooKHZvbGF0aWxlIGludCAqKSgmbGstPnNsKSkgPT0gMCkgeworICAgIGlmICghQ0FTX0xPQ0soJmxrLT5zbCkpIHsKKyAgICAgIGxrLT50aHJlYWRpZCA9IG15dGhyZWFkaWQ7CisgICAgICBsay0+YyA9IDE7CisgICAgICByZXR1cm4gMTsKKyAgICB9CisgIH0KKyAgZWxzZSBpZiAoRVFfT1dORVIobGstPnRocmVhZGlkLCBteXRocmVhZGlkKSkgeworICAgICsrbGstPmM7CisgICAgcmV0dXJuIDE7CisgIH0KKyAgcmV0dXJuIDA7Cit9CisKKyNkZWZpbmUgUkVMRUFTRV9MT0NLKGxrKSAgICAgIHJlY3Vyc2l2ZV9yZWxlYXNlX2xvY2sobGspCisjZGVmaW5lIFRSWV9MT0NLKGxrKSAgICAgICAgICByZWN1cnNpdmVfdHJ5X2xvY2sobGspCisjZGVmaW5lIEFDUVVJUkVfTE9DSyhsaykgICAgICByZWN1cnNpdmVfYWNxdWlyZV9sb2NrKGxrKQorI2RlZmluZSBJTklUSUFMX0xPQ0sobGspICAgICAgKChsayktPnRocmVhZGlkID0gKFRIUkVBRF9JRF9UKTAsIChsayktPnNsID0gMCwgKGxrKS0+YyA9IDApCisjZGVmaW5lIERFU1RST1lfTE9DSyhsaykgICAgICAoMCkKKyNlbmRpZiAvKiBVU0VfUkVDVVJTSVZFX0xPQ0tTICovCisKKyNlbGlmIGRlZmluZWQoV0lOMzIpIC8qIFdpbjMyIGNyaXRpY2FsIHNlY3Rpb25zICovCisjZGVmaW5lIE1MT0NLX1QgICAgICAgICAgICAgICBDUklUSUNBTF9TRUNUSU9OCisjZGVmaW5lIEFDUVVJUkVfTE9DSyhsaykgICAgICAoRW50ZXJDcml0aWNhbFNlY3Rpb24obGspLCAwKQorI2RlZmluZSBSRUxFQVNFX0xPQ0sobGspICAgICAgTGVhdmVDcml0aWNhbFNlY3Rpb24obGspCisjZGVmaW5lIFRSWV9MT0NLKGxrKSAgICAgICAgICBUcnlFbnRlckNyaXRpY2FsU2VjdGlvbihsaykKKyNkZWZpbmUgSU5JVElBTF9MT0NLKGxrKSAgICAgICghSW5pdGlhbGl6ZUNyaXRpY2FsU2VjdGlvbkFuZFNwaW5Db3VudCgobGspLCAweDgwMDAwMDAwfDQwMDApKQorI2RlZmluZSBERVNUUk9ZX0xPQ0sobGspICAgICAgKERlbGV0ZUNyaXRpY2FsU2VjdGlvbihsayksIDApCisjZGVmaW5lIE5FRURfR0xPQkFMX0xPQ0tfSU5JVAorCitzdGF0aWMgTUxPQ0tfVCBtYWxsb2NfZ2xvYmFsX211dGV4Oworc3RhdGljIHZvbGF0aWxlIExPTkcgbWFsbG9jX2dsb2JhbF9tdXRleF9zdGF0dXM7CisKKy8qIFVzZSBzcGluIGxvb3AgdG8gaW5pdGlhbGl6ZSBnbG9iYWwgbG9jayAqLworc3RhdGljIHZvaWQgaW5pdF9tYWxsb2NfZ2xvYmFsX211dGV4KCkgeworICBmb3IgKDs7KSB7CisgICAgbG9uZyBzdGF0ID0gbWFsbG9jX2dsb2JhbF9tdXRleF9zdGF0dXM7CisgICAgaWYgKHN0YXQgPiAwKQorICAgICAgcmV0dXJuOworICAgIC8qIHRyYW5zaXRpb24gdG8gPCAwIHdoaWxlIGluaXRpYWxpemluZywgdGhlbiB0byA+IDApICovCisgICAgaWYgKHN0YXQgPT0gMCAmJgorICAgICAgICBpbnRlcmxvY2tlZGNvbXBhcmVleGNoYW5nZSgmbWFsbG9jX2dsb2JhbF9tdXRleF9zdGF0dXMsIChMT05HKS0xLCAoTE9ORykwKSA9PSAwKSB7CisgICAgICBJbml0aWFsaXplQ3JpdGljYWxTZWN0aW9uKCZtYWxsb2NfZ2xvYmFsX211dGV4KTsKKyAgICAgIGludGVybG9ja2VkZXhjaGFuZ2UoJm1hbGxvY19nbG9iYWxfbXV0ZXhfc3RhdHVzLCAoTE9ORykxKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisgICAgU2xlZXBFeCgwLCBGQUxTRSk7CisgIH0KK30KKworI2Vsc2UgLyogcHRocmVhZHMtYmFzZWQgbG9ja3MgKi8KKyNkZWZpbmUgTUxPQ0tfVCAgICAgICAgICAgICAgIHB0aHJlYWRfbXV0ZXhfdAorI2RlZmluZSBBQ1FVSVJFX0xPQ0sobGspICAgICAgcHRocmVhZF9tdXRleF9sb2NrKGxrKQorI2RlZmluZSBSRUxFQVNFX0xPQ0sobGspICAgICAgcHRocmVhZF9tdXRleF91bmxvY2sobGspCisjZGVmaW5lIFRSWV9MT0NLKGxrKSAgICAgICAgICAoIXB0aHJlYWRfbXV0ZXhfdHJ5bG9jayhsaykpCisjZGVmaW5lIElOSVRJQUxfTE9DSyhsaykgICAgICBwdGhyZWFkX2luaXRfbG9jayhsaykKKyNkZWZpbmUgREVTVFJPWV9MT0NLKGxrKSAgICAgIHB0aHJlYWRfbXV0ZXhfZGVzdHJveShsaykKKworI2lmIGRlZmluZWQoVVNFX1JFQ1VSU0lWRV9MT0NLUykgJiYgVVNFX1JFQ1VSU0lWRV9MT0NLUyAhPSAwICYmIGRlZmluZWQobGludXgpICYmICFkZWZpbmVkKFBUSFJFQURfTVVURVhfUkVDVVJTSVZFKQorLyogQ29wZSB3aXRoIG9sZC1zdHlsZSBsaW51eCByZWN1cnNpdmUgbG9jayBpbml0aWFsaXphdGlvbiBieSBhZGRpbmcgKi8KKy8qIHNraXBwZWQgaW50ZXJuYWwgZGVjbGFyYXRpb24gZnJvbSBwdGhyZWFkLmggKi8KK2V4dGVybiBpbnQgcHRocmVhZF9tdXRleGF0dHJfc2V0a2luZF9ucCBfX1AgKChwdGhyZWFkX211dGV4YXR0cl90ICpfX2F0dHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fa2luZCkpOworI2RlZmluZSBQVEhSRUFEX01VVEVYX1JFQ1VSU0lWRSBQVEhSRUFEX01VVEVYX1JFQ1VSU0lWRV9OUAorI2RlZmluZSBwdGhyZWFkX211dGV4YXR0cl9zZXR0eXBlKHgseSkgcHRocmVhZF9tdXRleGF0dHJfc2V0a2luZF9ucCh4LHkpCisjZW5kaWYgLyogVVNFX1JFQ1VSU0lWRV9MT0NLUyAuLi4gKi8KKworc3RhdGljIE1MT0NLX1QgbWFsbG9jX2dsb2JhbF9tdXRleCA9IFBUSFJFQURfTVVURVhfSU5JVElBTElaRVI7CisKK3N0YXRpYyBpbnQgcHRocmVhZF9pbml0X2xvY2sgKE1MT0NLX1QgKmxrKSB7CisgIHB0aHJlYWRfbXV0ZXhhdHRyX3QgYXR0cjsKKyAgaWYgKHB0aHJlYWRfbXV0ZXhhdHRyX2luaXQoJmF0dHIpKSByZXR1cm4gMTsKKyNpZiBkZWZpbmVkKFVTRV9SRUNVUlNJVkVfTE9DS1MpICYmIFVTRV9SRUNVUlNJVkVfTE9DS1MgIT0gMAorICBpZiAocHRocmVhZF9tdXRleGF0dHJfc2V0dHlwZSgmYXR0ciwgUFRIUkVBRF9NVVRFWF9SRUNVUlNJVkUpKSByZXR1cm4gMTsKKyNlbmRpZgorICBpZiAocHRocmVhZF9tdXRleF9pbml0KGxrLCAmYXR0cikpIHJldHVybiAxOworICBpZiAocHRocmVhZF9tdXRleGF0dHJfZGVzdHJveSgmYXR0cikpIHJldHVybiAxOworICByZXR1cm4gMDsKK30KKworI2VuZGlmIC8qIC4uLiBsb2NrIHR5cGVzIC4uLiAqLworCisvKiBDb21tb24gY29kZSBmb3IgYWxsIGxvY2sgdHlwZXMgKi8KKyNkZWZpbmUgVVNFX0xPQ0tfQklUICAgICAgICAgICAgICAgKDJVKQorCisjaWZuZGVmIEFDUVVJUkVfTUFMTE9DX0dMT0JBTF9MT0NLCisjZGVmaW5lIEFDUVVJUkVfTUFMTE9DX0dMT0JBTF9MT0NLKCkgIEFDUVVJUkVfTE9DSygmbWFsbG9jX2dsb2JhbF9tdXRleCk7CisjZW5kaWYKKworI2lmbmRlZiBSRUxFQVNFX01BTExPQ19HTE9CQUxfTE9DSworI2RlZmluZSBSRUxFQVNFX01BTExPQ19HTE9CQUxfTE9DSygpICBSRUxFQVNFX0xPQ0soJm1hbGxvY19nbG9iYWxfbXV0ZXgpOworI2VuZGlmCisKKyNlbmRpZiAvKiBVU0VfTE9DS1MgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIENodW5rIHJlcHJlc2VudGF0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyoKKyAgKFRoZSBmb2xsb3dpbmcgaW5jbHVkZXMgbGlnaHRseSBlZGl0ZWQgZXhwbGFuYXRpb25zIGJ5IENvbGluIFBsdW1iLikKKworICBUaGUgbWFsbG9jX2NodW5rIGRlY2xhcmF0aW9uIGJlbG93IGlzIG1pc2xlYWRpbmcgKGJ1dCBhY2N1cmF0ZSBhbmQKKyAgbmVjZXNzYXJ5KS4gIEl0IGRlY2xhcmVzIGEgInZpZXciIGludG8gbWVtb3J5IGFsbG93aW5nIGFjY2VzcyB0bworICBuZWNlc3NhcnkgZmllbGRzIGF0IGtub3duIG9mZnNldHMgZnJvbSBhIGdpdmVuIGJhc2UuCisKKyAgQ2h1bmtzIG9mIG1lbW9yeSBhcmUgbWFpbnRhaW5lZCB1c2luZyBhIGBib3VuZGFyeSB0YWcnIG1ldGhvZCBhcworICBvcmlnaW5hbGx5IGRlc2NyaWJlZCBieSBLbnV0aC4gIChTZWUgdGhlIHBhcGVyIGJ5IFBhdWwgV2lsc29uCisgIGZ0cDovL2Z0cC5jcy51dGV4YXMuZWR1L3B1Yi9nYXJiYWdlL2FsbG9jc3J2LnBzIGZvciBhIHN1cnZleSBvZiBzdWNoCisgIHRlY2huaXF1ZXMuKSAgU2l6ZXMgb2YgZnJlZSBjaHVua3MgYXJlIHN0b3JlZCBib3RoIGluIHRoZSBmcm9udCBvZgorICBlYWNoIGNodW5rIGFuZCBhdCB0aGUgZW5kLiAgVGhpcyBtYWtlcyBjb25zb2xpZGF0aW5nIGZyYWdtZW50ZWQKKyAgY2h1bmtzIGludG8gYmlnZ2VyIGNodW5rcyBmYXN0LiAgVGhlIGhlYWQgZmllbGRzIGFsc28gaG9sZCBiaXRzCisgIHJlcHJlc2VudGluZyB3aGV0aGVyIGNodW5rcyBhcmUgZnJlZSBvciBpbiB1c2UuCisKKyAgSGVyZSBhcmUgc29tZSBwaWN0dXJlcyB0byBtYWtlIGl0IGNsZWFyZXIuICBUaGV5IGFyZSAiZXhwbG9kZWQiIHRvCisgIHNob3cgdGhhdCB0aGUgc3RhdGUgb2YgYSBjaHVuayBjYW4gYmUgdGhvdWdodCBvZiBhcyBleHRlbmRpbmcgZnJvbQorICB0aGUgaGlnaCAzMSBiaXRzIG9mIHRoZSBoZWFkIGZpZWxkIG9mIGl0cyBoZWFkZXIgdGhyb3VnaCB0aGUKKyAgcHJldl9mb290IGFuZCBQSU5VU0VfQklUIGJpdCBvZiB0aGUgZm9sbG93aW5nIGNodW5rIGhlYWRlci4KKworICBBIGNodW5rIHRoYXQncyBpbiB1c2UgbG9va3MgbGlrZToKKworICAgY2h1bmstPiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworICAgICAgICAgICB8IFNpemUgb2YgcHJldmlvdXMgY2h1bmsgKGlmIFAgPSAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworICAgICAgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rIHxQfAorICAgICAgICAgfCBTaXplIG9mIHRoaXMgY2h1bmsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDF8ICstKworICAgbWVtLT4gKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKyAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICArLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKworICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICstICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0rCisgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOgorICAgICAgICAgKy0gICAgICBzaXplIC0gc2l6ZW9mKHNpemVfdCkgYXZhaWxhYmxlIHBheWxvYWQgYnl0ZXMgICAgICAgICAgLSsKKyAgICAgICAgIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgY2h1bmstPiArLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKworICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisgICAgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rIHwxfAorICAgICAgIHwgU2l6ZSBvZiBuZXh0IGNodW5rIChtYXkgb3IgbWF5IG5vdCBiZSBpbiB1c2UpICAgICAgICAgICAgICAgfCArLSsKKyBtZW0tPiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworCisgICAgQW5kIGlmIGl0J3MgZnJlZSwgaXQgbG9va3MgbGlrZSB0aGlzOgorCisgICBjaHVuay0+ICstICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0rCisgICAgICAgICAgIHwgVXNlciBwYXlsb2FkIChtdXN0IGJlIGluIHVzZSwgb3Igd2Ugd291bGQgaGF2ZSBtZXJnZWQhKSAgICAgICB8CisgICAgICAgICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisgICAgICAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsgfFB8CisgICAgICAgICB8IFNpemUgb2YgdGhpcyBjaHVuayAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHwgKy0rCisgICBtZW0tPiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworICAgICAgICAgfCBOZXh0IHBvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisgICAgICAgICB8IFByZXYgcG9pbnRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKyAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6CisgICAgICAgICArLSAgICAgIHNpemUgLSBzaXplb2Yoc3RydWN0IGNodW5rKSB1bnVzZWQgYnl0ZXMgICAgICAgICAgICAgICAtKworICAgICAgICAgOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyBjaHVuay0+ICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisgICAgICAgICB8IFNpemUgb2YgdGhpcyBjaHVuayAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKyAgICAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsgfDB8CisgICAgICAgfCBTaXplIG9mIG5leHQgY2h1bmsgKG11c3QgYmUgaW4gdXNlLCBvciB3ZSB3b3VsZCBoYXZlIG1lcmdlZCl8ICstKworIG1lbS0+ICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDoKKyAgICAgICArLSBVc2VyIHBheWxvYWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKworICAgICAgIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwwfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKy0rCisgIE5vdGUgdGhhdCBzaW5jZSB3ZSBhbHdheXMgbWVyZ2UgYWRqYWNlbnQgZnJlZSBjaHVua3MsIHRoZSBjaHVua3MKKyAgYWRqYWNlbnQgdG8gYSBmcmVlIGNodW5rIG11c3QgYmUgaW4gdXNlLgorCisgIEdpdmVuIGEgcG9pbnRlciB0byBhIGNodW5rICh3aGljaCBjYW4gYmUgZGVyaXZlZCB0cml2aWFsbHkgZnJvbSB0aGUKKyAgcGF5bG9hZCBwb2ludGVyKSB3ZSBjYW4sIGluIE8oMSkgdGltZSwgZmluZCBvdXQgd2hldGhlciB0aGUgYWRqYWNlbnQKKyAgY2h1bmtzIGFyZSBmcmVlLCBhbmQgaWYgc28sIHVubGluayB0aGVtIGZyb20gdGhlIGxpc3RzIHRoYXQgdGhleQorICBhcmUgb24gYW5kIG1lcmdlIHRoZW0gd2l0aCB0aGUgY3VycmVudCBjaHVuay4KKworICBDaHVua3MgYWx3YXlzIGJlZ2luIG9uIGV2ZW4gd29yZCBib3VuZGFyaWVzLCBzbyB0aGUgbWVtIHBvcnRpb24KKyAgKHdoaWNoIGlzIHJldHVybmVkIHRvIHRoZSB1c2VyKSBpcyBhbHNvIG9uIGFuIGV2ZW4gd29yZCBib3VuZGFyeSwgYW5kCisgIHRodXMgYXQgbGVhc3QgZG91YmxlLXdvcmQgYWxpZ25lZC4KKworICBUaGUgUCAoUElOVVNFX0JJVCkgYml0LCBzdG9yZWQgaW4gdGhlIHVudXNlZCBsb3ctb3JkZXIgYml0IG9mIHRoZQorICBjaHVuayBzaXplICh3aGljaCBpcyBhbHdheXMgYSBtdWx0aXBsZSBvZiB0d28gd29yZHMpLCBpcyBhbiBpbi11c2UKKyAgYml0IGZvciB0aGUgKnByZXZpb3VzKiBjaHVuay4gIElmIHRoYXQgYml0IGlzICpjbGVhciosIHRoZW4gdGhlCisgIHdvcmQgYmVmb3JlIHRoZSBjdXJyZW50IGNodW5rIHNpemUgY29udGFpbnMgdGhlIHByZXZpb3VzIGNodW5rCisgIHNpemUsIGFuZCBjYW4gYmUgdXNlZCB0byBmaW5kIHRoZSBmcm9udCBvZiB0aGUgcHJldmlvdXMgY2h1bmsuCisgIFRoZSB2ZXJ5IGZpcnN0IGNodW5rIGFsbG9jYXRlZCBhbHdheXMgaGFzIHRoaXMgYml0IHNldCwgcHJldmVudGluZworICBhY2Nlc3MgdG8gbm9uLWV4aXN0ZW50IChvciBub24tb3duZWQpIG1lbW9yeS4gSWYgcGludXNlIGlzIHNldCBmb3IKKyAgYW55IGdpdmVuIGNodW5rLCB0aGVuIHlvdSBDQU5OT1QgZGV0ZXJtaW5lIHRoZSBzaXplIG9mIHRoZQorICBwcmV2aW91cyBjaHVuaywgYW5kIG1pZ2h0IGV2ZW4gZ2V0IGEgbWVtb3J5IGFkZHJlc3NpbmcgZmF1bHQgd2hlbgorICB0cnlpbmcgdG8gZG8gc28uCisKKyAgVGhlIEMgKENJTlVTRV9CSVQpIGJpdCwgc3RvcmVkIGluIHRoZSB1bnVzZWQgc2Vjb25kLWxvd2VzdCBiaXQgb2YKKyAgdGhlIGNodW5rIHNpemUgcmVkdW5kYW50bHkgcmVjb3JkcyB3aGV0aGVyIHRoZSBjdXJyZW50IGNodW5rIGlzCisgIGludXNlICh1bmxlc3MgdGhlIGNodW5rIGlzIG1tYXBwZWQpLiBUaGlzIHJlZHVuZGFuY3kgZW5hYmxlcyB1c2FnZQorICBjaGVja3Mgd2l0aGluIGZyZWUgYW5kIHJlYWxsb2MsIGFuZCByZWR1Y2VzIGluZGlyZWN0aW9uIHdoZW4gZnJlZWluZworICBhbmQgY29uc29saWRhdGluZyBjaHVua3MuCisKKyAgRWFjaCBmcmVzaGx5IGFsbG9jYXRlZCBjaHVuayBtdXN0IGhhdmUgYm90aCBjaW51c2UgYW5kIHBpbnVzZSBzZXQuCisgIFRoYXQgaXMsIGVhY2ggYWxsb2NhdGVkIGNodW5rIGJvcmRlcnMgZWl0aGVyIGEgcHJldmlvdXNseSBhbGxvY2F0ZWQKKyAgYW5kIHN0aWxsIGluLXVzZSBjaHVuaywgb3IgdGhlIGJhc2Ugb2YgaXRzIG1lbW9yeSBhcmVuYS4gVGhpcyBpcworICBlbnN1cmVkIGJ5IG1ha2luZyBhbGwgYWxsb2NhdGlvbnMgZnJvbSB0aGUgYGxvd2VzdCcgcGFydCBvZiBhbnkKKyAgZm91bmQgY2h1bmsuICBGdXJ0aGVyLCBubyBmcmVlIGNodW5rIHBoeXNpY2FsbHkgYm9yZGVycyBhbm90aGVyIG9uZSwKKyAgc28gZWFjaCBmcmVlIGNodW5rIGlzIGtub3duIHRvIGJlIHByZWNlZGVkIGFuZCBmb2xsb3dlZCBieSBlaXRoZXIKKyAgaW51c2UgY2h1bmtzIG9yIHRoZSBlbmRzIG9mIG1lbW9yeS4KKworICBOb3RlIHRoYXQgdGhlIGBmb290JyBvZiB0aGUgY3VycmVudCBjaHVuayBpcyBhY3R1YWxseSByZXByZXNlbnRlZAorICBhcyB0aGUgcHJldl9mb290IG9mIHRoZSBORVhUIGNodW5rLiBUaGlzIG1ha2VzIGl0IGVhc2llciB0bworICBkZWFsIHdpdGggYWxpZ25tZW50cyBldGMgYnV0IGNhbiBiZSB2ZXJ5IGNvbmZ1c2luZyB3aGVuIHRyeWluZworICB0byBleHRlbmQgb3IgYWRhcHQgdGhpcyBjb2RlLgorCisgIFRoZSBleGNlcHRpb25zIHRvIGFsbCB0aGlzIGFyZQorCisgICAgIDEuIFRoZSBzcGVjaWFsIGNodW5rIGB0b3AnIGlzIHRoZSB0b3AtbW9zdCBhdmFpbGFibGUgY2h1bmsgKGkuZS4sCisgICAgICAgIHRoZSBvbmUgYm9yZGVyaW5nIHRoZSBlbmQgb2YgYXZhaWxhYmxlIG1lbW9yeSkuIEl0IGlzIHRyZWF0ZWQKKyAgICAgICAgc3BlY2lhbGx5LiAgVG9wIGlzIG5ldmVyIGluY2x1ZGVkIGluIGFueSBiaW4sIGlzIHVzZWQgb25seSBpZgorICAgICAgICBubyBvdGhlciBjaHVuayBpcyBhdmFpbGFibGUsIGFuZCBpcyByZWxlYXNlZCBiYWNrIHRvIHRoZQorICAgICAgICBzeXN0ZW0gaWYgaXQgaXMgdmVyeSBsYXJnZSAoc2VlIE1fVFJJTV9USFJFU0hPTEQpLiAgSW4gZWZmZWN0LAorICAgICAgICB0aGUgdG9wIGNodW5rIGlzIHRyZWF0ZWQgYXMgbGFyZ2VyIChhbmQgdGh1cyBsZXNzIHdlbGwKKyAgICAgICAgZml0dGluZykgdGhhbiBhbnkgb3RoZXIgYXZhaWxhYmxlIGNodW5rLiAgVGhlIHRvcCBjaHVuaworICAgICAgICBkb2Vzbid0IHVwZGF0ZSBpdHMgdHJhaWxpbmcgc2l6ZSBmaWVsZCBzaW5jZSB0aGVyZSBpcyBubyBuZXh0CisgICAgICAgIGNvbnRpZ3VvdXMgY2h1bmsgdGhhdCB3b3VsZCBoYXZlIHRvIGluZGV4IG9mZiBpdC4gSG93ZXZlciwKKyAgICAgICAgc3BhY2UgaXMgc3RpbGwgYWxsb2NhdGVkIGZvciBpdCAoVE9QX0ZPT1RfU0laRSkgdG8gZW5hYmxlCisgICAgICAgIHNlcGFyYXRpb24gb3IgbWVyZ2luZyB3aGVuIHNwYWNlIGlzIGV4dGVuZGVkLgorCisgICAgIDMuIENodW5rcyBhbGxvY2F0ZWQgdmlhIG1tYXAsIGhhdmUgYm90aCBjaW51c2UgYW5kIHBpbnVzZSBiaXRzCisgICAgICAgIGNsZWFyZWQgaW4gdGhlaXIgaGVhZCBmaWVsZHMuICBCZWNhdXNlIHRoZXkgYXJlIGFsbG9jYXRlZAorICAgICAgICBvbmUtYnktb25lLCBlYWNoIG11c3QgY2FycnkgaXRzIG93biBwcmV2X2Zvb3QgZmllbGQsIHdoaWNoIGlzCisgICAgICAgIGFsc28gdXNlZCB0byBob2xkIHRoZSBvZmZzZXQgdGhpcyBjaHVuayBoYXMgd2l0aGluIGl0cyBtbWFwcGVkCisgICAgICAgIHJlZ2lvbiwgd2hpY2ggaXMgbmVlZGVkIHRvIHByZXNlcnZlIGFsaWdubWVudC4gRWFjaCBtbWFwcGVkCisgICAgICAgIGNodW5rIGlzIHRyYWlsZWQgYnkgdGhlIGZpcnN0IHR3byBmaWVsZHMgb2YgYSBmYWtlIG5leHQtY2h1bmsKKyAgICAgICAgZm9yIHNha2Ugb2YgdXNhZ2UgY2hlY2tzLgorCisqLworCitzdHJ1Y3QgbWFsbG9jX2NodW5rIHsKKyAgc2l6ZV90ICAgICAgICAgICAgICAgcHJldl9mb290OyAgLyogU2l6ZSBvZiBwcmV2aW91cyBjaHVuayAoaWYgZnJlZSkuICAqLworICBzaXplX3QgICAgICAgICAgICAgICBoZWFkOyAgICAgICAvKiBTaXplIGFuZCBpbnVzZSBiaXRzLiAqLworICBzdHJ1Y3QgbWFsbG9jX2NodW5rKiBmZDsgICAgICAgICAvKiBkb3VibGUgbGlua3MgLS0gdXNlZCBvbmx5IGlmIGZyZWUuICovCisgIHN0cnVjdCBtYWxsb2NfY2h1bmsqIGJrOworfTsKKwordHlwZWRlZiBzdHJ1Y3QgbWFsbG9jX2NodW5rICBtY2h1bms7Cit0eXBlZGVmIHN0cnVjdCBtYWxsb2NfY2h1bmsqIG1jaHVua3B0cjsKK3R5cGVkZWYgc3RydWN0IG1hbGxvY19jaHVuayogc2JpbnB0cjsgIC8qIFRoZSB0eXBlIG9mIGJpbnMgb2YgY2h1bmtzICovCit0eXBlZGVmIHVuc2lnbmVkIGludCBiaW5kZXhfdDsgICAgICAgICAvKiBEZXNjcmliZWQgYmVsb3cgKi8KK3R5cGVkZWYgdW5zaWduZWQgaW50IGJpbm1hcF90OyAgICAgICAgIC8qIERlc2NyaWJlZCBiZWxvdyAqLwordHlwZWRlZiB1bnNpZ25lZCBpbnQgZmxhZ190OyAgICAgICAgICAgLyogVGhlIHR5cGUgb2YgdmFyaW91cyBiaXQgZmxhZyBzZXRzICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0gQ2h1bmtzIHNpemVzIGFuZCBhbGlnbm1lbnRzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgTUNIVU5LX1NJWkUgICAgICAgICAoc2l6ZW9mKG1jaHVuaykpCisKKyNpZiBGT09URVJTCisjZGVmaW5lIENIVU5LX09WRVJIRUFEICAgICAgKFRXT19TSVpFX1RfU0laRVMpCisjZWxzZSAvKiBGT09URVJTICovCisjZGVmaW5lIENIVU5LX09WRVJIRUFEICAgICAgKFNJWkVfVF9TSVpFKQorI2VuZGlmIC8qIEZPT1RFUlMgKi8KKworLyogTU1hcHBlZCBjaHVua3MgbmVlZCBhIHNlY29uZCB3b3JkIG9mIG92ZXJoZWFkIC4uLiAqLworI2RlZmluZSBNTUFQX0NIVU5LX09WRVJIRUFEIChUV09fU0laRV9UX1NJWkVTKQorLyogLi4uIGFuZCBhZGRpdGlvbmFsIHBhZGRpbmcgZm9yIGZha2UgbmV4dC1jaHVuayBhdCBmb290ICovCisjZGVmaW5lIE1NQVBfRk9PVF9QQUQgICAgICAgKEZPVVJfU0laRV9UX1NJWkVTKQorCisvKiBUaGUgc21hbGxlc3Qgc2l6ZSB3ZSBjYW4gbWFsbG9jIGlzIGFuIGFsaWduZWQgbWluaW1hbCBjaHVuayAqLworI2RlZmluZSBNSU5fQ0hVTktfU0laRVwKKyAgKChNQ0hVTktfU0laRSArIENIVU5LX0FMSUdOX01BU0spICYgfkNIVU5LX0FMSUdOX01BU0spCisKKy8qIGNvbnZlcnNpb24gZnJvbSBtYWxsb2MgaGVhZGVycyB0byB1c2VyIHBvaW50ZXJzLCBhbmQgYmFjayAqLworI2RlZmluZSBjaHVuazJtZW0ocCkgICAgICAgICgodm9pZCopKChjaGFyKikocCkgICAgICAgKyBUV09fU0laRV9UX1NJWkVTKSkKKyNkZWZpbmUgbWVtMmNodW5rKG1lbSkgICAgICAoKG1jaHVua3B0cikoKGNoYXIqKShtZW0pIC0gVFdPX1NJWkVfVF9TSVpFUykpCisvKiBjaHVuayBhc3NvY2lhdGVkIHdpdGggYWxpZ25lZCBhZGRyZXNzIEEgKi8KKyNkZWZpbmUgYWxpZ25fYXNfY2h1bmsoQSkgICAobWNodW5rcHRyKSgoQSkgKyBhbGlnbl9vZmZzZXQoY2h1bmsybWVtKEEpKSkKKworLyogQm91bmRzIG9uIHJlcXVlc3QgKG5vdCBjaHVuaykgc2l6ZXMuICovCisjZGVmaW5lIE1BWF9SRVFVRVNUICAgICAgICAgKCgtTUlOX0NIVU5LX1NJWkUpIDw8IDIpCisjZGVmaW5lIE1JTl9SRVFVRVNUICAgICAgICAgKE1JTl9DSFVOS19TSVpFIC0gQ0hVTktfT1ZFUkhFQUQgLSBTSVpFX1RfT05FKQorCisvKiBwYWQgcmVxdWVzdCBieXRlcyBpbnRvIGEgdXNhYmxlIHNpemUgKi8KKyNkZWZpbmUgcGFkX3JlcXVlc3QocmVxKSBcCisgICAoKChyZXEpICsgQ0hVTktfT1ZFUkhFQUQgKyBDSFVOS19BTElHTl9NQVNLKSAmIH5DSFVOS19BTElHTl9NQVNLKQorCisvKiBwYWQgcmVxdWVzdCwgY2hlY2tpbmcgZm9yIG1pbmltdW0gKGJ1dCBub3QgbWF4aW11bSkgKi8KKyNkZWZpbmUgcmVxdWVzdDJzaXplKHJlcSkgXAorICAoKChyZXEpIDwgTUlOX1JFUVVFU1QpPyBNSU5fQ0hVTktfU0laRSA6IHBhZF9yZXF1ZXN0KHJlcSkpCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tIE9wZXJhdGlvbnMgb24gaGVhZCBhbmQgZm9vdCBmaWVsZHMgLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyoKKyAgVGhlIGhlYWQgZmllbGQgb2YgYSBjaHVuayBpcyBvcidlZCB3aXRoIFBJTlVTRV9CSVQgd2hlbiBwcmV2aW91cworICBhZGphY2VudCBjaHVuayBpbiB1c2UsIGFuZCBvcidlZCB3aXRoIENJTlVTRV9CSVQgaWYgdGhpcyBjaHVuayBpcyBpbgorICB1c2UsIHVubGVzcyBtbWFwcGVkLCBpbiB3aGljaCBjYXNlIGJvdGggYml0cyBhcmUgY2xlYXJlZC4KKworICBGTEFHNF9CSVQgaXMgbm90IHVzZWQgYnkgdGhpcyBtYWxsb2MsIGJ1dCBtaWdodCBiZSB1c2VmdWwgaW4gZXh0ZW5zaW9ucy4KKyovCisKKyNkZWZpbmUgUElOVVNFX0JJVCAgICAgICAgICAoU0laRV9UX09ORSkKKyNkZWZpbmUgQ0lOVVNFX0JJVCAgICAgICAgICAoU0laRV9UX1RXTykKKyNkZWZpbmUgRkxBRzRfQklUICAgICAgICAgICAoU0laRV9UX0ZPVVIpCisjZGVmaW5lIElOVVNFX0JJVFMgICAgICAgICAgKFBJTlVTRV9CSVR8Q0lOVVNFX0JJVCkKKyNkZWZpbmUgRkxBR19CSVRTICAgICAgICAgICAoUElOVVNFX0JJVHxDSU5VU0VfQklUfEZMQUc0X0JJVCkKKworLyogSGVhZCB2YWx1ZSBmb3IgZmVuY2Vwb3N0cyAqLworI2RlZmluZSBGRU5DRVBPU1RfSEVBRCAgICAgIChJTlVTRV9CSVRTfFNJWkVfVF9TSVpFKQorCisvKiBleHRyYWN0aW9uIG9mIGZpZWxkcyBmcm9tIGhlYWQgd29yZHMgKi8KKyNkZWZpbmUgY2ludXNlKHApICAgICAgICAgICAoKHApLT5oZWFkICYgQ0lOVVNFX0JJVCkKKyNkZWZpbmUgcGludXNlKHApICAgICAgICAgICAoKHApLT5oZWFkICYgUElOVVNFX0JJVCkKKyNkZWZpbmUgZmxhZzRpbnVzZShwKSAgICAgICAoKHApLT5oZWFkICYgRkxBRzRfQklUKQorI2RlZmluZSBpc19pbnVzZShwKSAgICAgICAgICgoKHApLT5oZWFkICYgSU5VU0VfQklUUykgIT0gUElOVVNFX0JJVCkKKyNkZWZpbmUgaXNfbW1hcHBlZChwKSAgICAgICAoKChwKS0+aGVhZCAmIElOVVNFX0JJVFMpID09IDApCisKKyNkZWZpbmUgY2h1bmtzaXplKHApICAgICAgICAoKHApLT5oZWFkICYgfihGTEFHX0JJVFMpKQorCisjZGVmaW5lIGNsZWFyX3BpbnVzZShwKSAgICAgKChwKS0+aGVhZCAmPSB+UElOVVNFX0JJVCkKKyNkZWZpbmUgc2V0X2ZsYWc0KHApICAgICAgICAoKHApLT5oZWFkIHw9IEZMQUc0X0JJVCkKKyNkZWZpbmUgY2xlYXJfZmxhZzQocCkgICAgICAoKHApLT5oZWFkICY9IH5GTEFHNF9CSVQpCisKKy8qIFRyZWF0IHNwYWNlIGF0IHB0ciArLy0gb2Zmc2V0IGFzIGEgY2h1bmsgKi8KKyNkZWZpbmUgY2h1bmtfcGx1c19vZmZzZXQocCwgcykgICgobWNodW5rcHRyKSgoKGNoYXIqKShwKSkgKyAocykpKQorI2RlZmluZSBjaHVua19taW51c19vZmZzZXQocCwgcykgKChtY2h1bmtwdHIpKCgoY2hhciopKHApKSAtIChzKSkpCisKKy8qIFB0ciB0byBuZXh0IG9yIHByZXZpb3VzIHBoeXNpY2FsIG1hbGxvY19jaHVuay4gKi8KKyNkZWZpbmUgbmV4dF9jaHVuayhwKSAoKG1jaHVua3B0cikoICgoY2hhciopKHApKSArICgocCktPmhlYWQgJiB+RkxBR19CSVRTKSkpCisjZGVmaW5lIHByZXZfY2h1bmsocCkgKChtY2h1bmtwdHIpKCAoKGNoYXIqKShwKSkgLSAoKHApLT5wcmV2X2Zvb3QpICkpCisKKy8qIGV4dHJhY3QgbmV4dCBjaHVuaydzIHBpbnVzZSBiaXQgKi8KKyNkZWZpbmUgbmV4dF9waW51c2UocCkgICgobmV4dF9jaHVuayhwKS0+aGVhZCkgJiBQSU5VU0VfQklUKQorCisvKiBHZXQvc2V0IHNpemUgYXQgZm9vdGVyICovCisjZGVmaW5lIGdldF9mb290KHAsIHMpICAoKChtY2h1bmtwdHIpKChjaGFyKikocCkgKyAocykpKS0+cHJldl9mb290KQorI2RlZmluZSBzZXRfZm9vdChwLCBzKSAgKCgobWNodW5rcHRyKSgoY2hhciopKHApICsgKHMpKSktPnByZXZfZm9vdCA9IChzKSkKKworLyogU2V0IHNpemUsIHBpbnVzZSBiaXQsIGFuZCBmb290ICovCisjZGVmaW5lIHNldF9zaXplX2FuZF9waW51c2Vfb2ZfZnJlZV9jaHVuayhwLCBzKVwKKyAgKChwKS0+aGVhZCA9IChzfFBJTlVTRV9CSVQpLCBzZXRfZm9vdChwLCBzKSkKKworLyogU2V0IHNpemUsIHBpbnVzZSBiaXQsIGZvb3QsIGFuZCBjbGVhciBuZXh0IHBpbnVzZSAqLworI2RlZmluZSBzZXRfZnJlZV93aXRoX3BpbnVzZShwLCBzLCBuKVwKKyAgKGNsZWFyX3BpbnVzZShuKSwgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9mcmVlX2NodW5rKHAsIHMpKQorCisvKiBHZXQgdGhlIGludGVybmFsIG92ZXJoZWFkIGFzc29jaWF0ZWQgd2l0aCBjaHVuayBwICovCisjZGVmaW5lIG92ZXJoZWFkX2ZvcihwKVwKKyAoaXNfbW1hcHBlZChwKT8gTU1BUF9DSFVOS19PVkVSSEVBRCA6IENIVU5LX09WRVJIRUFEKQorCisvKiBSZXR1cm4gdHJ1ZSBpZiBtYWxsb2NlZCBzcGFjZSBpcyBub3QgbmVjZXNzYXJpbHkgY2xlYXJlZCAqLworI2lmIE1NQVBfQ0xFQVJTCisjZGVmaW5lIGNhbGxvY19tdXN0X2NsZWFyKHApICghaXNfbW1hcHBlZChwKSkKKyNlbHNlIC8qIE1NQVBfQ0xFQVJTICovCisjZGVmaW5lIGNhbGxvY19tdXN0X2NsZWFyKHApICgxKQorI2VuZGlmIC8qIE1NQVBfQ0xFQVJTICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gT3ZlcmxhaWQgZGF0YSBzdHJ1Y3R1cmVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qCisgIFdoZW4gY2h1bmtzIGFyZSBub3QgaW4gdXNlLCB0aGV5IGFyZSB0cmVhdGVkIGFzIG5vZGVzIG9mIGVpdGhlcgorICBsaXN0cyBvciB0cmVlcy4KKworICAiU21hbGwiICBjaHVua3MgYXJlIHN0b3JlZCBpbiBjaXJjdWxhciBkb3VibHktbGlua2VkIGxpc3RzLCBhbmQgbG9vaworICBsaWtlIHRoaXM6CisKKyAgICBjaHVuay0+ICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisgICAgICAgICAgICB8ICAgICAgICAgICAgIFNpemUgb2YgcHJldmlvdXMgY2h1bmsgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKyAgICBgaGVhZDonIHwgICAgICAgICAgICAgU2l6ZSBvZiBjaHVuaywgaW4gYnl0ZXMgICAgICAgICAgICAgICAgICAgICAgICAgfFB8CisgICAgICBtZW0tPiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworICAgICAgICAgICAgfCAgICAgICAgICAgICBGb3J3YXJkIHBvaW50ZXIgdG8gbmV4dCBjaHVuayBpbiBsaXN0ICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisgICAgICAgICAgICB8ICAgICAgICAgICAgIEJhY2sgcG9pbnRlciB0byBwcmV2aW91cyBjaHVuayBpbiBsaXN0ICAgICAgICAgICAgfAorICAgICAgICAgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKyAgICAgICAgICAgIHwgICAgICAgICAgICAgVW51c2VkIHNwYWNlIChtYXkgYmUgMCBieXRlcyBsb25nKSAgICAgICAgICAgICAgICAuCisgICAgICAgICAgICAuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLgorICAgICAgICAgICAgLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK25leHRjaHVuay0+ICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisgICAgYGZvb3Q6JyB8ICAgICAgICAgICAgIFNpemUgb2YgY2h1bmssIGluIGJ5dGVzICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKworICBMYXJnZXIgY2h1bmtzIGFyZSBrZXB0IGluIGEgZm9ybSBvZiBiaXR3aXNlIGRpZ2l0YWwgdHJlZXMgKGFrYQorICB0cmllcykga2V5ZWQgb24gY2h1bmtzaXplcy4gIEJlY2F1c2UgbWFsbG9jX3RyZWVfY2h1bmtzIGFyZSBvbmx5IGZvcgorICBmcmVlIGNodW5rcyBncmVhdGVyIHRoYW4gMjU2IGJ5dGVzLCB0aGVpciBzaXplIGRvZXNuJ3QgaW1wb3NlIGFueQorICBjb25zdHJhaW50cyBvbiB1c2VyIGNodW5rIHNpemVzLiAgRWFjaCBub2RlIGxvb2tzIGxpa2U6CisKKyAgICBjaHVuay0+ICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisgICAgICAgICAgICB8ICAgICAgICAgICAgIFNpemUgb2YgcHJldmlvdXMgY2h1bmsgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKyAgICBgaGVhZDonIHwgICAgICAgICAgICAgU2l6ZSBvZiBjaHVuaywgaW4gYnl0ZXMgICAgICAgICAgICAgICAgICAgICAgICAgfFB8CisgICAgICBtZW0tPiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworICAgICAgICAgICAgfCAgICAgICAgICAgICBGb3J3YXJkIHBvaW50ZXIgdG8gbmV4dCBjaHVuayBvZiBzYW1lIHNpemUgICAgICAgIHwKKyAgICAgICAgICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisgICAgICAgICAgICB8ICAgICAgICAgICAgIEJhY2sgcG9pbnRlciB0byBwcmV2aW91cyBjaHVuayBvZiBzYW1lIHNpemUgICAgICAgfAorICAgICAgICAgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKyAgICAgICAgICAgIHwgICAgICAgICAgICAgUG9pbnRlciB0byBsZWZ0IGNoaWxkIChjaGlsZFswXSkgICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworICAgICAgICAgICAgfCAgICAgICAgICAgICBQb2ludGVyIHRvIHJpZ2h0IGNoaWxkIChjaGlsZFsxXSkgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisgICAgICAgICAgICB8ICAgICAgICAgICAgIFBvaW50ZXIgdG8gcGFyZW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKyAgICAgICAgICAgIHwgICAgICAgICAgICAgYmluIGluZGV4IG9mIHRoaXMgY2h1bmsgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworICAgICAgICAgICAgfCAgICAgICAgICAgICBVbnVzZWQgc3BhY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4KKyAgICAgICAgICAgIC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CituZXh0Y2h1bmstPiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworICAgIGBmb290OicgfCAgICAgICAgICAgICBTaXplIG9mIGNodW5rLCBpbiBieXRlcyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisKKyAgRWFjaCB0cmVlIGhvbGRpbmcgdHJlZW5vZGVzIGlzIGEgdHJlZSBvZiB1bmlxdWUgY2h1bmsgc2l6ZXMuICBDaHVua3MKKyAgb2YgdGhlIHNhbWUgc2l6ZSBhcmUgYXJyYW5nZWQgaW4gYSBjaXJjdWxhcmx5LWxpbmtlZCBsaXN0LCB3aXRoIG9ubHkKKyAgdGhlIG9sZGVzdCBjaHVuayAodGhlIG5leHQgdG8gYmUgdXNlZCwgaW4gb3VyIEZJRk8gb3JkZXJpbmcpCisgIGFjdHVhbGx5IGluIHRoZSB0cmVlLiAgKFRyZWUgbWVtYmVycyBhcmUgZGlzdGluZ3Vpc2hlZCBieSBhIG5vbi1udWxsCisgIHBhcmVudCBwb2ludGVyLikgIElmIGEgY2h1bmsgd2l0aCB0aGUgc2FtZSBzaXplIGFuIGFuIGV4aXN0aW5nIG5vZGUKKyAgaXMgaW5zZXJ0ZWQsIGl0IGlzIGxpbmtlZCBvZmYgdGhlIGV4aXN0aW5nIG5vZGUgdXNpbmcgcG9pbnRlcnMgdGhhdAorICB3b3JrIGluIHRoZSBzYW1lIHdheSBhcyBmZC9iayBwb2ludGVycyBvZiBzbWFsbCBjaHVua3MuCisKKyAgRWFjaCB0cmVlIGNvbnRhaW5zIGEgcG93ZXIgb2YgMiBzaXplZCByYW5nZSBvZiBjaHVuayBzaXplcyAodGhlCisgIHNtYWxsZXN0IGlzIDB4MTAwIDw9IHggPCAweDE4MCksIHdoaWNoIGlzIGlzIGRpdmlkZWQgaW4gaGFsZiBhdCBlYWNoCisgIHRyZWUgbGV2ZWwsIHdpdGggdGhlIGNodW5rcyBpbiB0aGUgc21hbGxlciBoYWxmIG9mIHRoZSByYW5nZSAoMHgxMDAKKyAgPD0geCA8IDB4MTQwIGZvciB0aGUgdG9wIG5vc2UpIGluIHRoZSBsZWZ0IHN1YnRyZWUgYW5kIHRoZSBsYXJnZXIKKyAgaGFsZiAoMHgxNDAgPD0geCA8IDB4MTgwKSBpbiB0aGUgcmlnaHQgc3VidHJlZS4gIFRoaXMgaXMsIG9mIGNvdXJzZSwKKyAgZG9uZSBieSBpbnNwZWN0aW5nIGluZGl2aWR1YWwgYml0cy4KKworICBVc2luZyB0aGVzZSBydWxlcywgZWFjaCBub2RlJ3MgbGVmdCBzdWJ0cmVlIGNvbnRhaW5zIGFsbCBzbWFsbGVyCisgIHNpemVzIHRoYW4gaXRzIHJpZ2h0IHN1YnRyZWUuICBIb3dldmVyLCB0aGUgbm9kZSBhdCB0aGUgcm9vdCBvZiBlYWNoCisgIHN1YnRyZWUgaGFzIG5vIHBhcnRpY3VsYXIgb3JkZXJpbmcgcmVsYXRpb25zaGlwIHRvIGVpdGhlci4gIChUaGUKKyAgZGl2aWRpbmcgbGluZSBiZXR3ZWVuIHRoZSBzdWJ0cmVlIHNpemVzIGlzIGJhc2VkIG9uIHRyaWUgcmVsYXRpb24uKQorICBJZiB3ZSByZW1vdmUgdGhlIGxhc3QgY2h1bmsgb2YgYSBnaXZlbiBzaXplIGZyb20gdGhlIGludGVyaW9yIG9mIHRoZQorICB0cmVlLCB3ZSBuZWVkIHRvIHJlcGxhY2UgaXQgd2l0aCBhIGxlYWYgbm9kZS4gIFRoZSB0cmVlIG9yZGVyaW5nCisgIHJ1bGVzIHBlcm1pdCBhIG5vZGUgdG8gYmUgcmVwbGFjZWQgYnkgYW55IGxlYWYgYmVsb3cgaXQuCisKKyAgVGhlIHNtYWxsZXN0IGNodW5rIGluIGEgdHJlZSAoYSBjb21tb24gb3BlcmF0aW9uIGluIGEgYmVzdC1maXQKKyAgYWxsb2NhdG9yKSBjYW4gYmUgZm91bmQgYnkgd2Fsa2luZyBhIHBhdGggdG8gdGhlIGxlZnRtb3N0IGxlYWYgaW4KKyAgdGhlIHRyZWUuICBVbmxpa2UgYSB1c3VhbCBiaW5hcnkgdHJlZSwgd2hlcmUgd2UgZm9sbG93IGxlZnQgY2hpbGQKKyAgcG9pbnRlcnMgdW50aWwgd2UgcmVhY2ggYSBudWxsLCBoZXJlIHdlIGZvbGxvdyB0aGUgcmlnaHQgY2hpbGQKKyAgcG9pbnRlciBhbnkgdGltZSB0aGUgbGVmdCBvbmUgaXMgbnVsbCwgdW50aWwgd2UgcmVhY2ggYSBsZWFmIHdpdGgKKyAgYm90aCBjaGlsZCBwb2ludGVycyBudWxsLiBUaGUgc21hbGxlc3QgY2h1bmsgaW4gdGhlIHRyZWUgd2lsbCBiZQorICBzb21ld2hlcmUgYWxvbmcgdGhhdCBwYXRoLgorCisgIFRoZSB3b3JzdCBjYXNlIG51bWJlciBvZiBzdGVwcyB0byBhZGQsIGZpbmQsIG9yIHJlbW92ZSBhIG5vZGUgaXMKKyAgYm91bmRlZCBieSB0aGUgbnVtYmVyIG9mIGJpdHMgZGlmZmVyZW50aWF0aW5nIGNodW5rcyB3aXRoaW4KKyAgYmlucy4gVW5kZXIgY3VycmVudCBiaW4gY2FsY3VsYXRpb25zLCB0aGlzIHJhbmdlcyBmcm9tIDYgdXAgdG8gMjEKKyAgKGZvciAzMiBiaXQgc2l6ZXMpIG9yIHVwIHRvIDUzIChmb3IgNjQgYml0IHNpemVzKS4gVGhlIHR5cGljYWwgY2FzZQorICBpcyBvZiBjb3Vyc2UgbXVjaCBiZXR0ZXIuCisqLworCitzdHJ1Y3QgbWFsbG9jX3RyZWVfY2h1bmsgeworICAvKiBUaGUgZmlyc3QgZm91ciBmaWVsZHMgbXVzdCBiZSBjb21wYXRpYmxlIHdpdGggbWFsbG9jX2NodW5rICovCisgIHNpemVfdCAgICAgICAgICAgICAgICAgICAgcHJldl9mb290OworICBzaXplX3QgICAgICAgICAgICAgICAgICAgIGhlYWQ7CisgIHN0cnVjdCBtYWxsb2NfdHJlZV9jaHVuayogZmQ7CisgIHN0cnVjdCBtYWxsb2NfdHJlZV9jaHVuayogYms7CisKKyAgc3RydWN0IG1hbGxvY190cmVlX2NodW5rKiBjaGlsZFsyXTsKKyAgc3RydWN0IG1hbGxvY190cmVlX2NodW5rKiBwYXJlbnQ7CisgIGJpbmRleF90ICAgICAgICAgICAgICAgICAgaW5kZXg7Cit9OworCit0eXBlZGVmIHN0cnVjdCBtYWxsb2NfdHJlZV9jaHVuayAgdGNodW5rOwordHlwZWRlZiBzdHJ1Y3QgbWFsbG9jX3RyZWVfY2h1bmsqIHRjaHVua3B0cjsKK3R5cGVkZWYgc3RydWN0IG1hbGxvY190cmVlX2NodW5rKiB0YmlucHRyOyAvKiBUaGUgdHlwZSBvZiBiaW5zIG9mIHRyZWVzICovCisKKy8qIEEgbGl0dGxlIGhlbHBlciBtYWNybyBmb3IgdHJlZXMgKi8KKyNkZWZpbmUgbGVmdG1vc3RfY2hpbGQodCkgKCh0KS0+Y2hpbGRbMF0gIT0gMD8gKHQpLT5jaGlsZFswXSA6ICh0KS0+Y2hpbGRbMV0pCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFNlZ21lbnRzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qCisgIEVhY2ggbWFsbG9jIHNwYWNlIG1heSBpbmNsdWRlIG5vbi1jb250aWd1b3VzIHNlZ21lbnRzLCBoZWxkIGluIGEKKyAgbGlzdCBoZWFkZWQgYnkgYW4gZW1iZWRkZWQgbWFsbG9jX3NlZ21lbnQgcmVjb3JkIHJlcHJlc2VudGluZyB0aGUKKyAgdG9wLW1vc3Qgc3BhY2UuIFNlZ21lbnRzIGFsc28gaW5jbHVkZSBmbGFncyBob2xkaW5nIHByb3BlcnRpZXMgb2YKKyAgdGhlIHNwYWNlLiBMYXJnZSBjaHVua3MgdGhhdCBhcmUgZGlyZWN0bHkgYWxsb2NhdGVkIGJ5IG1tYXAgYXJlIG5vdAorICBpbmNsdWRlZCBpbiB0aGlzIGxpc3QuIFRoZXkgYXJlIGluc3RlYWQgaW5kZXBlbmRlbnRseSBjcmVhdGVkIGFuZAorICBkZXN0cm95ZWQgd2l0aG91dCBvdGhlcndpc2Uga2VlcGluZyB0cmFjayBvZiB0aGVtLgorCisgIFNlZ21lbnQgbWFuYWdlbWVudCBtYWlubHkgY29tZXMgaW50byBwbGF5IGZvciBzcGFjZXMgYWxsb2NhdGVkIGJ5CisgIE1NQVAuICBBbnkgY2FsbCB0byBNTUFQIG1pZ2h0IG9yIG1pZ2h0IG5vdCByZXR1cm4gbWVtb3J5IHRoYXQgaXMKKyAgYWRqYWNlbnQgdG8gYW4gZXhpc3Rpbmcgc2VnbWVudC4gIE1PUkVDT1JFIG5vcm1hbGx5IGNvbnRpZ3VvdXNseQorICBleHRlbmRzIHRoZSBjdXJyZW50IHNwYWNlLCBzbyB0aGlzIHNwYWNlIGlzIGFsbW9zdCBhbHdheXMgYWRqYWNlbnQsCisgIHdoaWNoIGlzIHNpbXBsZXIgYW5kIGZhc3RlciB0byBkZWFsIHdpdGguIChUaGlzIGlzIHdoeSBNT1JFQ09SRSBpcworICB1c2VkIHByZWZlcmVudGlhbGx5IHRvIE1NQVAgd2hlbiBib3RoIGFyZSBhdmFpbGFibGUgLS0gc2VlCisgIHN5c19hbGxvYy4pICBXaGVuIGFsbG9jYXRpbmcgdXNpbmcgTU1BUCwgd2UgZG9uJ3QgdXNlIGFueSBvZiB0aGUKKyAgaGludGluZyBtZWNoYW5pc21zIChpbmNvbnNpc3RlbnRseSkgc3VwcG9ydGVkIGluIHZhcmlvdXMKKyAgaW1wbGVtZW50YXRpb25zIG9mIHVuaXggbW1hcCwgb3IgZGlzdGluZ3Vpc2ggcmVzZXJ2aW5nIGZyb20KKyAgY29tbWl0dGluZyBtZW1vcnkuIEluc3RlYWQsIHdlIGp1c3QgYXNrIGZvciBzcGFjZSwgYW5kIGV4cGxvaXQKKyAgY29udGlndWl0eSB3aGVuIHdlIGdldCBpdC4gIEl0IGlzIHByb2JhYmx5IHBvc3NpYmxlIHRvIGRvCisgIGJldHRlciB0aGFuIHRoaXMgb24gc29tZSBzeXN0ZW1zLCBidXQgbm8gZ2VuZXJhbCBzY2hlbWUgc2VlbXMKKyAgdG8gYmUgc2lnbmlmaWNhbnRseSBiZXR0ZXIuCisKKyAgTWFuYWdlbWVudCBlbnRhaWxzIGEgc2ltcGxlciB2YXJpYW50IG9mIHRoZSBjb25zb2xpZGF0aW9uIHNjaGVtZQorICB1c2VkIGZvciBjaHVua3MgdG8gcmVkdWNlIGZyYWdtZW50YXRpb24gLS0gbmV3IGFkamFjZW50IG1lbW9yeSBpcworICBub3JtYWxseSBwcmVwZW5kZWQgb3IgYXBwZW5kZWQgdG8gYW4gZXhpc3Rpbmcgc2VnbWVudC4gSG93ZXZlciwKKyAgdGhlcmUgYXJlIGxpbWl0YXRpb25zIGNvbXBhcmVkIHRvIGNodW5rIGNvbnNvbGlkYXRpb24gdGhhdCBtb3N0bHkKKyAgcmVmbGVjdCB0aGUgZmFjdCB0aGF0IHNlZ21lbnQgcHJvY2Vzc2luZyBpcyByZWxhdGl2ZWx5IGluZnJlcXVlbnQKKyAgKG9jY3VycmluZyBvbmx5IHdoZW4gZ2V0dGluZyBtZW1vcnkgZnJvbSBzeXN0ZW0pIGFuZCB0aGF0IHdlCisgIGRvbid0IGV4cGVjdCB0byBoYXZlIGh1Z2UgbnVtYmVycyBvZiBzZWdtZW50czoKKworICAqIFNlZ21lbnRzIGFyZSBub3QgaW5kZXhlZCwgc28gdHJhdmVyc2FsIHJlcXVpcmVzIGxpbmVhciBzY2Fucy4gIChJdAorICAgIHdvdWxkIGJlIHBvc3NpYmxlIHRvIGluZGV4IHRoZXNlLCBidXQgaXMgbm90IHdvcnRoIHRoZSBleHRyYQorICAgIG92ZXJoZWFkIGFuZCBjb21wbGV4aXR5IGZvciBtb3N0IHByb2dyYW1zIG9uIG1vc3QgcGxhdGZvcm1zLikKKyAgKiBOZXcgc2VnbWVudHMgYXJlIG9ubHkgYXBwZW5kZWQgdG8gb2xkIG9uZXMgd2hlbiBob2xkaW5nIHRvcC1tb3N0CisgICAgbWVtb3J5OyBpZiB0aGV5IGNhbm5vdCBiZSBwcmVwZW5kZWQgdG8gb3RoZXJzLCB0aGV5IGFyZSBoZWxkIGluCisgICAgZGlmZmVyZW50IHNlZ21lbnRzLgorCisgIEV4Y2VwdCBmb3IgdGhlIHRvcC1tb3N0IHNlZ21lbnQgb2YgYW4gbXN0YXRlLCBlYWNoIHNlZ21lbnQgcmVjb3JkCisgIGlzIGtlcHQgYXQgdGhlIHRhaWwgb2YgaXRzIHNlZ21lbnQuIFNlZ21lbnRzIGFyZSBhZGRlZCBieSBwdXNoaW5nCisgIHNlZ21lbnQgcmVjb3JkcyBvbnRvIHRoZSBsaXN0IGhlYWRlZCBieSAmbXN0YXRlLnNlZyBmb3IgdGhlCisgIGNvbnRhaW5pbmcgbXN0YXRlLgorCisgIFNlZ21lbnQgZmxhZ3MgY29udHJvbCBhbGxvY2F0aW9uL21lcmdlL2RlYWxsb2NhdGlvbiBwb2xpY2llczoKKyAgKiBJZiBFWFRFUk5fQklUIHNldCwgdGhlbiB3ZSBkaWQgbm90IGFsbG9jYXRlIHRoaXMgc2VnbWVudCwKKyAgICBhbmQgc28gc2hvdWxkIG5vdCB0cnkgdG8gZGVhbGxvY2F0ZSBvciBtZXJnZSB3aXRoIG90aGVycy4KKyAgICAoVGhpcyBjdXJyZW50bHkgaG9sZHMgb25seSBmb3IgdGhlIGluaXRpYWwgc2VnbWVudCBwYXNzZWQKKyAgICBpbnRvIGNyZWF0ZV9tc3BhY2Vfd2l0aF9iYXNlLikKKyAgKiBJZiBVU0VfTU1BUF9CSVQgc2V0LCB0aGUgc2VnbWVudCBtYXkgYmUgbWVyZ2VkIHdpdGgKKyAgICBvdGhlciBzdXJyb3VuZGluZyBtbWFwcGVkIHNlZ21lbnRzIGFuZCB0cmltbWVkL2RlLWFsbG9jYXRlZAorICAgIHVzaW5nIG11bm1hcC4KKyAgKiBJZiBuZWl0aGVyIGJpdCBpcyBzZXQsIHRoZW4gdGhlIHNlZ21lbnQgd2FzIG9idGFpbmVkIHVzaW5nCisgICAgTU9SRUNPUkUgc28gY2FuIGJlIG1lcmdlZCB3aXRoIHN1cnJvdW5kaW5nIE1PUkVDT1JFJ2Qgc2VnbWVudHMKKyAgICBhbmQgZGVhbGxvY2F0ZWQvdHJpbW1lZCB1c2luZyBNT1JFQ09SRSB3aXRoIG5lZ2F0aXZlIGFyZ3VtZW50cy4KKyovCisKK3N0cnVjdCBtYWxsb2Nfc2VnbWVudCB7CisgIGNoYXIqICAgICAgICBiYXNlOyAgICAgICAgICAgICAvKiBiYXNlIGFkZHJlc3MgKi8KKyAgc2l6ZV90ICAgICAgIHNpemU7ICAgICAgICAgICAgIC8qIGFsbG9jYXRlZCBzaXplICovCisgIHN0cnVjdCBtYWxsb2Nfc2VnbWVudCogbmV4dDsgICAvKiBwdHIgdG8gbmV4dCBzZWdtZW50ICovCisgIGZsYWdfdCAgICAgICBzZmxhZ3M7ICAgICAgICAgICAvKiBtbWFwIGFuZCBleHRlcm4gZmxhZyAqLworfTsKKworI2RlZmluZSBpc19tbWFwcGVkX3NlZ21lbnQoUykgICgoUyktPnNmbGFncyAmIFVTRV9NTUFQX0JJVCkKKyNkZWZpbmUgaXNfZXh0ZXJuX3NlZ21lbnQoUykgICAoKFMpLT5zZmxhZ3MgJiBFWFRFUk5fQklUKQorCit0eXBlZGVmIHN0cnVjdCBtYWxsb2Nfc2VnbWVudCAgbXNlZ21lbnQ7Cit0eXBlZGVmIHN0cnVjdCBtYWxsb2Nfc2VnbWVudCogbXNlZ21lbnRwdHI7CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gbWFsbG9jX3N0YXRlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qCisgICBBIG1hbGxvY19zdGF0ZSBob2xkcyBhbGwgb2YgdGhlIGJvb2trZWVwaW5nIGZvciBhIHNwYWNlLgorICAgVGhlIG1haW4gZmllbGRzIGFyZToKKworICBUb3AKKyAgICBUaGUgdG9wbW9zdCBjaHVuayBvZiB0aGUgY3VycmVudGx5IGFjdGl2ZSBzZWdtZW50LiBJdHMgc2l6ZSBpcworICAgIGNhY2hlZCBpbiB0b3BzaXplLiAgVGhlIGFjdHVhbCBzaXplIG9mIHRvcG1vc3Qgc3BhY2UgaXMKKyAgICB0b3BzaXplK1RPUF9GT09UX1NJWkUsIHdoaWNoIGluY2x1ZGVzIHNwYWNlIHJlc2VydmVkIGZvciBhZGRpbmcKKyAgICBmZW5jZXBvc3RzIGFuZCBzZWdtZW50IHJlY29yZHMgaWYgbmVjZXNzYXJ5IHdoZW4gZ2V0dGluZyBtb3JlCisgICAgc3BhY2UgZnJvbSB0aGUgc3lzdGVtLiAgVGhlIHNpemUgYXQgd2hpY2ggdG8gYXV0b3RyaW0gdG9wIGlzCisgICAgY2FjaGVkIGZyb20gbXBhcmFtcyBpbiB0cmltX2NoZWNrLCBleGNlcHQgdGhhdCBpdCBpcyBkaXNhYmxlZCBpZgorICAgIGFuIGF1dG90cmltIGZhaWxzLgorCisgIERlc2lnbmF0ZWQgdmljdGltIChkdikKKyAgICBUaGlzIGlzIHRoZSBwcmVmZXJyZWQgY2h1bmsgZm9yIHNlcnZpY2luZyBzbWFsbCByZXF1ZXN0cyB0aGF0CisgICAgZG9uJ3QgaGF2ZSBleGFjdCBmaXRzLiAgSXQgaXMgbm9ybWFsbHkgdGhlIGNodW5rIHNwbGl0IG9mZiBtb3N0CisgICAgcmVjZW50bHkgdG8gc2VydmljZSBhbm90aGVyIHNtYWxsIHJlcXVlc3QuICBJdHMgc2l6ZSBpcyBjYWNoZWQgaW4KKyAgICBkdnNpemUuIFRoZSBsaW5rIGZpZWxkcyBvZiB0aGlzIGNodW5rIGFyZSBub3QgbWFpbnRhaW5lZCBzaW5jZSBpdAorICAgIGlzIG5vdCBrZXB0IGluIGEgYmluLgorCisgIFNtYWxsQmlucworICAgIEFuIGFycmF5IG9mIGJpbiBoZWFkZXJzIGZvciBmcmVlIGNodW5rcy4gIFRoZXNlIGJpbnMgaG9sZCBjaHVua3MKKyAgICB3aXRoIHNpemVzIGxlc3MgdGhhbiBNSU5fTEFSR0VfU0laRSBieXRlcy4gRWFjaCBiaW4gY29udGFpbnMKKyAgICBjaHVua3Mgb2YgYWxsIHRoZSBzYW1lIHNpemUsIHNwYWNlZCA4IGJ5dGVzIGFwYXJ0LiAgVG8gc2ltcGxpZnkKKyAgICB1c2UgaW4gZG91YmxlLWxpbmtlZCBsaXN0cywgZWFjaCBiaW4gaGVhZGVyIGFjdHMgYXMgYSBtYWxsb2NfY2h1bmsKKyAgICBwb2ludGluZyB0byB0aGUgcmVhbCBmaXJzdCBub2RlLCBpZiBpdCBleGlzdHMgKGVsc2UgcG9pbnRpbmcgdG8KKyAgICBpdHNlbGYpLiAgVGhpcyBhdm9pZHMgc3BlY2lhbC1jYXNpbmcgZm9yIGhlYWRlcnMuICBCdXQgdG8gYXZvaWQKKyAgICB3YXN0ZSwgd2UgYWxsb2NhdGUgb25seSB0aGUgZmQvYmsgcG9pbnRlcnMgb2YgYmlucywgYW5kIHRoZW4gdXNlCisgICAgcmVwb3NpdGlvbmluZyB0cmlja3MgdG8gdHJlYXQgdGhlc2UgYXMgdGhlIGZpZWxkcyBvZiBhIGNodW5rLgorCisgIFRyZWVCaW5zCisgICAgVHJlZWJpbnMgYXJlIHBvaW50ZXJzIHRvIHRoZSByb290cyBvZiB0cmVlcyBob2xkaW5nIGEgcmFuZ2Ugb2YKKyAgICBzaXplcy4gVGhlcmUgYXJlIDIgZXF1YWxseSBzcGFjZWQgdHJlZWJpbnMgZm9yIGVhY2ggcG93ZXIgb2YgdHdvCisgICAgZnJvbSBUUkVFX1NISUZUIHRvIFRSRUVfU0hJRlQrMTYuIFRoZSBsYXN0IGJpbiBob2xkcyBhbnl0aGluZworICAgIGxhcmdlci4KKworICBCaW4gbWFwcworICAgIFRoZXJlIGlzIG9uZSBiaXQgbWFwIGZvciBzbWFsbCBiaW5zICgic21hbGxtYXAiKSBhbmQgb25lIGZvcgorICAgIHRyZWViaW5zICgidHJlZW1hcCkuICBFYWNoIGJpbiBzZXRzIGl0cyBiaXQgd2hlbiBub24tZW1wdHksIGFuZAorICAgIGNsZWFycyB0aGUgYml0IHdoZW4gZW1wdHkuICBCaXQgb3BlcmF0aW9ucyBhcmUgdGhlbiB1c2VkIHRvIGF2b2lkCisgICAgYmluLWJ5LWJpbiBzZWFyY2hpbmcgLS0gbmVhcmx5IGFsbCAic2VhcmNoIiBpcyBkb25lIHdpdGhvdXQgZXZlcgorICAgIGxvb2tpbmcgYXQgYmlucyB0aGF0IHdvbid0IGJlIHNlbGVjdGVkLiAgVGhlIGJpdCBtYXBzCisgICAgY29uc2VydmF0aXZlbHkgdXNlIDMyIGJpdHMgcGVyIG1hcCB3b3JkLCBldmVuIGlmIG9uIDY0Yml0IHN5c3RlbS4KKyAgICBGb3IgYSBnb29kIGRlc2NyaXB0aW9uIG9mIHNvbWUgb2YgdGhlIGJpdC1iYXNlZCB0ZWNobmlxdWVzIHVzZWQKKyAgICBoZXJlLCBzZWUgSGVucnkgUy4gV2FycmVuIEpyJ3MgYm9vayAiSGFja2VyJ3MgRGVsaWdodCIgKGFuZAorICAgIHN1cHBsZW1lbnQgYXQgaHR0cDovL2hhY2tlcnNkZWxpZ2h0Lm9yZy8pLiBNYW55IG9mIHRoZXNlIGFyZQorICAgIGludGVuZGVkIHRvIHJlZHVjZSB0aGUgYnJhbmNoaW5lc3Mgb2YgcGF0aHMgdGhyb3VnaCBtYWxsb2MgZXRjLCBhcworICAgIHdlbGwgYXMgdG8gcmVkdWNlIHRoZSBudW1iZXIgb2YgbWVtb3J5IGxvY2F0aW9ucyByZWFkIG9yIHdyaXR0ZW4uCisKKyAgU2VnbWVudHMKKyAgICBBIGxpc3Qgb2Ygc2VnbWVudHMgaGVhZGVkIGJ5IGFuIGVtYmVkZGVkIG1hbGxvY19zZWdtZW50IHJlY29yZAorICAgIHJlcHJlc2VudGluZyB0aGUgaW5pdGlhbCBzcGFjZS4KKworICBBZGRyZXNzIGNoZWNrIHN1cHBvcnQKKyAgICBUaGUgbGVhc3RfYWRkciBmaWVsZCBpcyB0aGUgbGVhc3QgYWRkcmVzcyBldmVyIG9idGFpbmVkIGZyb20KKyAgICBNT1JFQ09SRSBvciBNTUFQLiBBdHRlbXB0ZWQgZnJlZXMgYW5kIHJlYWxsb2NzIG9mIGFueSBhZGRyZXNzIGxlc3MKKyAgICB0aGFuIHRoaXMgYXJlIHRyYXBwZWQgKHVubGVzcyBJTlNFQ1VSRSBpcyBkZWZpbmVkKS4KKworICBNYWdpYyB0YWcKKyAgICBBIGNyb3NzLWNoZWNrIGZpZWxkIHRoYXQgc2hvdWxkIGFsd2F5cyBob2xkIHNhbWUgdmFsdWUgYXMgbXBhcmFtcy5tYWdpYy4KKworICBNYXggYWxsb3dlZCBmb290cHJpbnQKKyAgICBUaGUgbWF4aW11bSBhbGxvd2VkIGJ5dGVzIHRvIGFsbG9jYXRlIGZyb20gc3lzdGVtICh6ZXJvIG1lYW5zIG5vIGxpbWl0KQorCisgIEZsYWdzCisgICAgQml0cyByZWNvcmRpbmcgd2hldGhlciB0byB1c2UgTU1BUCwgbG9ja3MsIG9yIGNvbnRpZ3VvdXMgTU9SRUNPUkUKKworICBTdGF0aXN0aWNzCisgICAgRWFjaCBzcGFjZSBrZWVwcyB0cmFjayBvZiBjdXJyZW50IGFuZCBtYXhpbXVtIHN5c3RlbSBtZW1vcnkKKyAgICBvYnRhaW5lZCB2aWEgTU9SRUNPUkUgb3IgTU1BUC4KKworICBUcmltIHN1cHBvcnQKKyAgICBGaWVsZHMgaG9sZGluZyB0aGUgYW1vdW50IG9mIHVudXNlZCB0b3Btb3N0IG1lbW9yeSB0aGF0IHNob3VsZCB0cmlnZ2VyCisgICAgdHJpbW1pbmcsIGFuZCBhIGNvdW50ZXIgdG8gZm9yY2UgcGVyaW9kaWMgc2Nhbm5pbmcgdG8gcmVsZWFzZSB1bnVzZWQKKyAgICBub24tdG9wbW9zdCBzZWdtZW50cy4KKworICBMb2NraW5nCisgICAgSWYgVVNFX0xPQ0tTIGlzIGRlZmluZWQsIHRoZSAibXV0ZXgiIGxvY2sgaXMgYWNxdWlyZWQgYW5kIHJlbGVhc2VkCisgICAgYXJvdW5kIGV2ZXJ5IHB1YmxpYyBjYWxsIHVzaW5nIHRoaXMgbXNwYWNlLgorCisgIEV4dGVuc2lvbiBzdXBwb3J0CisgICAgQSB2b2lkKiBwb2ludGVyIGFuZCBhIHNpemVfdCBmaWVsZCB0aGF0IGNhbiBiZSB1c2VkIHRvIGhlbHAgaW1wbGVtZW50CisgICAgZXh0ZW5zaW9ucyB0byB0aGlzIG1hbGxvYy4KKyovCisKKy8qIEJpbiB0eXBlcywgd2lkdGhzIGFuZCBzaXplcyAqLworI2RlZmluZSBOU01BTExCSU5TICAgICAgICAoMzJVKQorI2RlZmluZSBOVFJFRUJJTlMgICAgICAgICAoMzJVKQorI2RlZmluZSBTTUFMTEJJTl9TSElGVCAgICAoM1UpCisjZGVmaW5lIFNNQUxMQklOX1dJRFRIICAgIChTSVpFX1RfT05FIDw8IFNNQUxMQklOX1NISUZUKQorI2RlZmluZSBUUkVFQklOX1NISUZUICAgICAoOFUpCisjZGVmaW5lIE1JTl9MQVJHRV9TSVpFICAgIChTSVpFX1RfT05FIDw8IFRSRUVCSU5fU0hJRlQpCisjZGVmaW5lIE1BWF9TTUFMTF9TSVpFICAgIChNSU5fTEFSR0VfU0laRSAtIFNJWkVfVF9PTkUpCisjZGVmaW5lIE1BWF9TTUFMTF9SRVFVRVNUIChNQVhfU01BTExfU0laRSAtIENIVU5LX0FMSUdOX01BU0sgLSBDSFVOS19PVkVSSEVBRCkKKworc3RydWN0IG1hbGxvY19zdGF0ZSB7CisgIGJpbm1hcF90ICAgc21hbGxtYXA7CisgIGJpbm1hcF90ICAgdHJlZW1hcDsKKyAgc2l6ZV90ICAgICBkdnNpemU7CisgIHNpemVfdCAgICAgdG9wc2l6ZTsKKyAgY2hhciogICAgICBsZWFzdF9hZGRyOworICBtY2h1bmtwdHIgIGR2OworICBtY2h1bmtwdHIgIHRvcDsKKyAgc2l6ZV90ICAgICB0cmltX2NoZWNrOworICBzaXplX3QgICAgIHJlbGVhc2VfY2hlY2tzOworICBzaXplX3QgICAgIG1hZ2ljOworICBtY2h1bmtwdHIgIHNtYWxsYmluc1soTlNNQUxMQklOUysxKSoyXTsKKyAgdGJpbnB0ciAgICB0cmVlYmluc1tOVFJFRUJJTlNdOworICBzaXplX3QgICAgIGZvb3RwcmludDsKKyAgc2l6ZV90ICAgICBtYXhfZm9vdHByaW50OworICBzaXplX3QgICAgIGZvb3RwcmludF9saW1pdDsgLyogemVybyBtZWFucyBubyBsaW1pdCAqLworICBmbGFnX3QgICAgIG1mbGFnczsKKyNpZiBVU0VfTE9DS1MKKyAgTUxPQ0tfVCAgICBtdXRleDsgICAgIC8qIGxvY2F0ZSBsb2NrIGFtb25nIGZpZWxkcyB0aGF0IHJhcmVseSBjaGFuZ2UgKi8KKyNlbmRpZiAvKiBVU0VfTE9DS1MgKi8KKyAgbXNlZ21lbnQgICBzZWc7CisgIHZvaWQqICAgICAgZXh0cDsgICAgICAvKiBVbnVzZWQgYnV0IGF2YWlsYWJsZSBmb3IgZXh0ZW5zaW9ucyAqLworICBzaXplX3QgICAgIGV4dHM7Cit9OworCit0eXBlZGVmIHN0cnVjdCBtYWxsb2Nfc3RhdGUqICAgIG1zdGF0ZTsKKworLyogLS0tLS0tLS0tLS0tLSBHbG9iYWwgbWFsbG9jX3N0YXRlIGFuZCBtYWxsb2NfcGFyYW1zIC0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyoKKyAgbWFsbG9jX3BhcmFtcyBob2xkcyBnbG9iYWwgcHJvcGVydGllcywgaW5jbHVkaW5nIHRob3NlIHRoYXQgY2FuIGJlCisgIGR5bmFtaWNhbGx5IHNldCB1c2luZyBtYWxsb3B0LiBUaGVyZSBpcyBhIHNpbmdsZSBpbnN0YW5jZSwgbXBhcmFtcywKKyAgaW5pdGlhbGl6ZWQgaW4gaW5pdF9tcGFyYW1zLiBOb3RlIHRoYXQgdGhlIG5vbi16ZXJvbmVzcyBvZiAibWFnaWMiCisgIGFsc28gc2VydmVzIGFzIGFuIGluaXRpYWxpemF0aW9uIGZsYWcuCisqLworCitzdHJ1Y3QgbWFsbG9jX3BhcmFtcyB7CisgIHNpemVfdCBtYWdpYzsKKyAgc2l6ZV90IHBhZ2Vfc2l6ZTsKKyAgc2l6ZV90IGdyYW51bGFyaXR5OworICBzaXplX3QgbW1hcF90aHJlc2hvbGQ7CisgIHNpemVfdCB0cmltX3RocmVzaG9sZDsKKyAgZmxhZ190IGRlZmF1bHRfbWZsYWdzOworfTsKKworc3RhdGljIHN0cnVjdCBtYWxsb2NfcGFyYW1zIG1wYXJhbXM7CisKKy8qIEVuc3VyZSBtcGFyYW1zIGluaXRpYWxpemVkICovCisjZGVmaW5lIGVuc3VyZV9pbml0aWFsaXphdGlvbigpICh2b2lkKShtcGFyYW1zLm1hZ2ljICE9IDAgfHwgaW5pdF9tcGFyYW1zKCkpCisKKyNpZiAhT05MWV9NU1BBQ0VTCisKKy8qIFRoZSBnbG9iYWwgbWFsbG9jX3N0YXRlIHVzZWQgZm9yIGFsbCBub24tIm1zcGFjZSIgY2FsbHMgKi8KK3N0YXRpYyBzdHJ1Y3QgbWFsbG9jX3N0YXRlIF9nbV87CisjZGVmaW5lIGdtICAgICAgICAgICAgICAgICAoJl9nbV8pCisjZGVmaW5lIGlzX2dsb2JhbChNKSAgICAgICAoKE0pID09ICZfZ21fKQorCisjZW5kaWYgLyogIU9OTFlfTVNQQUNFUyAqLworCisjZGVmaW5lIGlzX2luaXRpYWxpemVkKE0pICAoKE0pLT50b3AgIT0gMCkKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gc3lzdGVtIGFsbG9jIHNldHVwIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogT3BlcmF0aW9ucyBvbiBtZmxhZ3MgKi8KKworI2RlZmluZSB1c2VfbG9jayhNKSAgICAgICAgICAgKChNKS0+bWZsYWdzICYgICBVU0VfTE9DS19CSVQpCisjZGVmaW5lIGVuYWJsZV9sb2NrKE0pICAgICAgICAoKE0pLT5tZmxhZ3MgfD0gIFVTRV9MT0NLX0JJVCkKKyNpZiBVU0VfTE9DS1MKKyNkZWZpbmUgZGlzYWJsZV9sb2NrKE0pICAgICAgICgoTSktPm1mbGFncyAmPSB+VVNFX0xPQ0tfQklUKQorI2Vsc2UKKyNkZWZpbmUgZGlzYWJsZV9sb2NrKE0pCisjZW5kaWYKKworI2RlZmluZSB1c2VfbW1hcChNKSAgICAgICAgICAgKChNKS0+bWZsYWdzICYgICBVU0VfTU1BUF9CSVQpCisjZGVmaW5lIGVuYWJsZV9tbWFwKE0pICAgICAgICAoKE0pLT5tZmxhZ3MgfD0gIFVTRV9NTUFQX0JJVCkKKyNpZiBIQVZFX01NQVAKKyNkZWZpbmUgZGlzYWJsZV9tbWFwKE0pICAgICAgICgoTSktPm1mbGFncyAmPSB+VVNFX01NQVBfQklUKQorI2Vsc2UKKyNkZWZpbmUgZGlzYWJsZV9tbWFwKE0pCisjZW5kaWYKKworI2RlZmluZSB1c2Vfbm9uY29udGlndW91cyhNKSAgKChNKS0+bWZsYWdzICYgICBVU0VfTk9OQ09OVElHVU9VU19CSVQpCisjZGVmaW5lIGRpc2FibGVfY29udGlndW91cyhNKSAoKE0pLT5tZmxhZ3MgfD0gIFVTRV9OT05DT05USUdVT1VTX0JJVCkKKworI2RlZmluZSBzZXRfbG9jayhNLEwpXAorICgoTSktPm1mbGFncyA9IChMKT9cCisgICgoTSktPm1mbGFncyB8IFVTRV9MT0NLX0JJVCkgOlwKKyAgKChNKS0+bWZsYWdzICYgflVTRV9MT0NLX0JJVCkpCisKKy8qIHBhZ2UtYWxpZ24gYSBzaXplICovCisjZGVmaW5lIHBhZ2VfYWxpZ24oUylcCisgKCgoUykgKyAobXBhcmFtcy5wYWdlX3NpemUgLSBTSVpFX1RfT05FKSkgJiB+KG1wYXJhbXMucGFnZV9zaXplIC0gU0laRV9UX09ORSkpCisKKy8qIGdyYW51bGFyaXR5LWFsaWduIGEgc2l6ZSAqLworI2RlZmluZSBncmFudWxhcml0eV9hbGlnbihTKVwKKyAgKCgoUykgKyAobXBhcmFtcy5ncmFudWxhcml0eSAtIFNJWkVfVF9PTkUpKVwKKyAgICYgfihtcGFyYW1zLmdyYW51bGFyaXR5IC0gU0laRV9UX09ORSkpCisKKworLyogRm9yIG1tYXAsIHVzZSBncmFudWxhcml0eSBhbGlnbm1lbnQgb24gd2luZG93cywgZWxzZSBwYWdlLWFsaWduICovCisjaWZkZWYgV0lOMzIKKyNkZWZpbmUgbW1hcF9hbGlnbihTKSBncmFudWxhcml0eV9hbGlnbihTKQorI2Vsc2UKKyNkZWZpbmUgbW1hcF9hbGlnbihTKSBwYWdlX2FsaWduKFMpCisjZW5kaWYKKworLyogRm9yIHN5c19hbGxvYywgZW5vdWdoIHBhZGRpbmcgdG8gZW5zdXJlIGNhbiBtYWxsb2MgcmVxdWVzdCBvbiBzdWNjZXNzICovCisjZGVmaW5lIFNZU19BTExPQ19QQURESU5HIChUT1BfRk9PVF9TSVpFICsgTUFMTE9DX0FMSUdOTUVOVCkKKworI2RlZmluZSBpc19wYWdlX2FsaWduZWQoUylcCisgICAoKChzaXplX3QpKFMpICYgKG1wYXJhbXMucGFnZV9zaXplIC0gU0laRV9UX09ORSkpID09IDApCisjZGVmaW5lIGlzX2dyYW51bGFyaXR5X2FsaWduZWQoUylcCisgICAoKChzaXplX3QpKFMpICYgKG1wYXJhbXMuZ3JhbnVsYXJpdHkgLSBTSVpFX1RfT05FKSkgPT0gMCkKKworLyogIFRydWUgaWYgc2VnbWVudCBTIGhvbGRzIGFkZHJlc3MgQSAqLworI2RlZmluZSBzZWdtZW50X2hvbGRzKFMsIEEpXAorICAoKGNoYXIqKShBKSA+PSBTLT5iYXNlICYmIChjaGFyKikoQSkgPCBTLT5iYXNlICsgUy0+c2l6ZSkKKworLyogUmV0dXJuIHNlZ21lbnQgaG9sZGluZyBnaXZlbiBhZGRyZXNzICovCitzdGF0aWMgbXNlZ21lbnRwdHIgc2VnbWVudF9ob2xkaW5nKG1zdGF0ZSBtLCBjaGFyKiBhZGRyKSB7CisgIG1zZWdtZW50cHRyIHNwID0gJm0tPnNlZzsKKyAgZm9yICg7OykgeworICAgIGlmIChhZGRyID49IHNwLT5iYXNlICYmIGFkZHIgPCBzcC0+YmFzZSArIHNwLT5zaXplKQorICAgICAgcmV0dXJuIHNwOworICAgIGlmICgoc3AgPSBzcC0+bmV4dCkgPT0gMCkKKyAgICAgIHJldHVybiAwOworICB9Cit9CisKKy8qIFJldHVybiB0cnVlIGlmIHNlZ21lbnQgY29udGFpbnMgYSBzZWdtZW50IGxpbmsgKi8KK3N0YXRpYyBpbnQgaGFzX3NlZ21lbnRfbGluayhtc3RhdGUgbSwgbXNlZ21lbnRwdHIgc3MpIHsKKyAgbXNlZ21lbnRwdHIgc3AgPSAmbS0+c2VnOworICBmb3IgKDs7KSB7CisgICAgaWYgKChjaGFyKilzcCA+PSBzcy0+YmFzZSAmJiAoY2hhciopc3AgPCBzcy0+YmFzZSArIHNzLT5zaXplKQorICAgICAgcmV0dXJuIDE7CisgICAgaWYgKChzcCA9IHNwLT5uZXh0KSA9PSAwKQorICAgICAgcmV0dXJuIDA7CisgIH0KK30KKworI2lmbmRlZiBNT1JFQ09SRV9DQU5OT1RfVFJJTQorI2RlZmluZSBzaG91bGRfdHJpbShNLHMpICAoKHMpID4gKE0pLT50cmltX2NoZWNrKQorI2Vsc2UgIC8qIE1PUkVDT1JFX0NBTk5PVF9UUklNICovCisjZGVmaW5lIHNob3VsZF90cmltKE0scykgICgwKQorI2VuZGlmIC8qIE1PUkVDT1JFX0NBTk5PVF9UUklNICovCisKKy8qCisgIFRPUF9GT09UX1NJWkUgaXMgcGFkZGluZyBhdCB0aGUgZW5kIG9mIGEgc2VnbWVudCwgaW5jbHVkaW5nIHNwYWNlCisgIHRoYXQgbWF5IGJlIG5lZWRlZCB0byBwbGFjZSBzZWdtZW50IHJlY29yZHMgYW5kIGZlbmNlcG9zdHMgd2hlbiBuZXcKKyAgbm9uY29udGlndW91cyBzZWdtZW50cyBhcmUgYWRkZWQuCisqLworI2RlZmluZSBUT1BfRk9PVF9TSVpFXAorICAoYWxpZ25fb2Zmc2V0KGNodW5rMm1lbSgwKSkrcGFkX3JlcXVlc3Qoc2l6ZW9mKHN0cnVjdCBtYWxsb2Nfc2VnbWVudCkpK01JTl9DSFVOS19TSVpFKQorCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEhvb2tzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qCisgIFBSRUFDVElPTiBzaG91bGQgYmUgZGVmaW5lZCB0byByZXR1cm4gMCBvbiBzdWNjZXNzLCBhbmQgbm9uemVybyBvbgorICBmYWlsdXJlLiBJZiB5b3UgYXJlIG5vdCB1c2luZyBsb2NraW5nLCB5b3UgY2FuIHJlZGVmaW5lIHRoZXNlIHRvIGRvCisgIGFueXRoaW5nIHlvdSBsaWtlLgorKi8KKworI2lmIFVTRV9MT0NLUworI2RlZmluZSBQUkVBQ1RJT04oTSkgICgodXNlX2xvY2soTSkpPyBBQ1FVSVJFX0xPQ0soJihNKS0+bXV0ZXgpIDogMCkKKyNkZWZpbmUgUE9TVEFDVElPTihNKSB7IGlmICh1c2VfbG9jayhNKSkgUkVMRUFTRV9MT0NLKCYoTSktPm11dGV4KTsgfQorI2Vsc2UgLyogVVNFX0xPQ0tTICovCisKKyNpZm5kZWYgUFJFQUNUSU9OCisjZGVmaW5lIFBSRUFDVElPTihNKSAoMCkKKyNlbmRpZiAgLyogUFJFQUNUSU9OICovCisKKyNpZm5kZWYgUE9TVEFDVElPTgorI2RlZmluZSBQT1NUQUNUSU9OKE0pCisjZW5kaWYgIC8qIFBPU1RBQ1RJT04gKi8KKworI2VuZGlmIC8qIFVTRV9MT0NLUyAqLworCisvKgorICBDT1JSVVBUSU9OX0VSUk9SX0FDVElPTiBpcyB0cmlnZ2VyZWQgdXBvbiBkZXRlY3RlZCBiYWQgYWRkcmVzc2VzLgorICBVU0FHRV9FUlJPUl9BQ1RJT04gaXMgdHJpZ2dlcmVkIG9uIGRldGVjdGVkIGJhZCBmcmVlcyBhbmQKKyAgcmVhbGxvY3MuIFRoZSBhcmd1bWVudCBwIGlzIGFuIGFkZHJlc3MgdGhhdCBtaWdodCBoYXZlIHRyaWdnZXJlZCB0aGUKKyAgZmF1bHQuIEl0IGlzIGlnbm9yZWQgYnkgdGhlIHR3byBwcmVkZWZpbmVkIGFjdGlvbnMsIGJ1dCBtaWdodCBiZQorICB1c2VmdWwgaW4gY3VzdG9tIGFjdGlvbnMgdGhhdCB0cnkgdG8gaGVscCBkaWFnbm9zZSBlcnJvcnMuCisqLworCisjaWYgUFJPQ0VFRF9PTl9FUlJPUgorCisvKiBBIGNvdW50IG9mIHRoZSBudW1iZXIgb2YgY29ycnVwdGlvbiBlcnJvcnMgY2F1c2luZyByZXNldHMgKi8KK2ludCBtYWxsb2NfY29ycnVwdGlvbl9lcnJvcl9jb3VudDsKKworLyogZGVmYXVsdCBjb3JydXB0aW9uIGFjdGlvbiAqLworc3RhdGljIHZvaWQgcmVzZXRfb25fZXJyb3IobXN0YXRlIG0pOworCisjZGVmaW5lIENPUlJVUFRJT05fRVJST1JfQUNUSU9OKG0pICByZXNldF9vbl9lcnJvcihtKQorI2RlZmluZSBVU0FHRV9FUlJPUl9BQ1RJT04obSwgcCkKKworI2Vsc2UgLyogUFJPQ0VFRF9PTl9FUlJPUiAqLworCisjaWZuZGVmIENPUlJVUFRJT05fRVJST1JfQUNUSU9OCisjZGVmaW5lIENPUlJVUFRJT05fRVJST1JfQUNUSU9OKG0pIEFCT1JUCisjZW5kaWYgLyogQ09SUlVQVElPTl9FUlJPUl9BQ1RJT04gKi8KKworI2lmbmRlZiBVU0FHRV9FUlJPUl9BQ1RJT04KKyNkZWZpbmUgVVNBR0VfRVJST1JfQUNUSU9OKG0scCkgQUJPUlQKKyNlbmRpZiAvKiBVU0FHRV9FUlJPUl9BQ1RJT04gKi8KKworI2VuZGlmIC8qIFBST0NFRURfT05fRVJST1IgKi8KKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBEZWJ1Z2dpbmcgc2V0dXAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjaWYgISBERUJVRworCisjZGVmaW5lIGNoZWNrX2ZyZWVfY2h1bmsoTSxQKQorI2RlZmluZSBjaGVja19pbnVzZV9jaHVuayhNLFApCisjZGVmaW5lIGNoZWNrX21hbGxvY2VkX2NodW5rKE0sUCxOKQorI2RlZmluZSBjaGVja19tbWFwcGVkX2NodW5rKE0sUCkKKyNkZWZpbmUgY2hlY2tfbWFsbG9jX3N0YXRlKE0pCisjZGVmaW5lIGNoZWNrX3RvcF9jaHVuayhNLFApCisKKyNlbHNlIC8qIERFQlVHICovCisjZGVmaW5lIGNoZWNrX2ZyZWVfY2h1bmsoTSxQKSAgICAgICBkb19jaGVja19mcmVlX2NodW5rKE0sUCkKKyNkZWZpbmUgY2hlY2tfaW51c2VfY2h1bmsoTSxQKSAgICAgIGRvX2NoZWNrX2ludXNlX2NodW5rKE0sUCkKKyNkZWZpbmUgY2hlY2tfdG9wX2NodW5rKE0sUCkgICAgICAgIGRvX2NoZWNrX3RvcF9jaHVuayhNLFApCisjZGVmaW5lIGNoZWNrX21hbGxvY2VkX2NodW5rKE0sUCxOKSBkb19jaGVja19tYWxsb2NlZF9jaHVuayhNLFAsTikKKyNkZWZpbmUgY2hlY2tfbW1hcHBlZF9jaHVuayhNLFApICAgIGRvX2NoZWNrX21tYXBwZWRfY2h1bmsoTSxQKQorI2RlZmluZSBjaGVja19tYWxsb2Nfc3RhdGUoTSkgICAgICAgZG9fY2hlY2tfbWFsbG9jX3N0YXRlKE0pCisKK3N0YXRpYyB2b2lkICAgZG9fY2hlY2tfYW55X2NodW5rKG1zdGF0ZSBtLCBtY2h1bmtwdHIgcCk7CitzdGF0aWMgdm9pZCAgIGRvX2NoZWNrX3RvcF9jaHVuayhtc3RhdGUgbSwgbWNodW5rcHRyIHApOworc3RhdGljIHZvaWQgICBkb19jaGVja19tbWFwcGVkX2NodW5rKG1zdGF0ZSBtLCBtY2h1bmtwdHIgcCk7CitzdGF0aWMgdm9pZCAgIGRvX2NoZWNrX2ludXNlX2NodW5rKG1zdGF0ZSBtLCBtY2h1bmtwdHIgcCk7CitzdGF0aWMgdm9pZCAgIGRvX2NoZWNrX2ZyZWVfY2h1bmsobXN0YXRlIG0sIG1jaHVua3B0ciBwKTsKK3N0YXRpYyB2b2lkICAgZG9fY2hlY2tfbWFsbG9jZWRfY2h1bmsobXN0YXRlIG0sIHZvaWQqIG1lbSwgc2l6ZV90IHMpOworc3RhdGljIHZvaWQgICBkb19jaGVja190cmVlKG1zdGF0ZSBtLCB0Y2h1bmtwdHIgdCk7CitzdGF0aWMgdm9pZCAgIGRvX2NoZWNrX3RyZWViaW4obXN0YXRlIG0sIGJpbmRleF90IGkpOworc3RhdGljIHZvaWQgICBkb19jaGVja19zbWFsbGJpbihtc3RhdGUgbSwgYmluZGV4X3QgaSk7CitzdGF0aWMgdm9pZCAgIGRvX2NoZWNrX21hbGxvY19zdGF0ZShtc3RhdGUgbSk7CitzdGF0aWMgaW50ICAgIGJpbl9maW5kKG1zdGF0ZSBtLCBtY2h1bmtwdHIgeCk7CitzdGF0aWMgc2l6ZV90IHRyYXZlcnNlX2FuZF9jaGVjayhtc3RhdGUgbSk7CisjZW5kaWYgLyogREVCVUcgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBJbmRleGluZyBCaW5zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBpc19zbWFsbChzKSAgICAgICAgICgoKHMpID4+IFNNQUxMQklOX1NISUZUKSA8IE5TTUFMTEJJTlMpCisjZGVmaW5lIHNtYWxsX2luZGV4KHMpICAgICAgKGJpbmRleF90KSgocykgID4+IFNNQUxMQklOX1NISUZUKQorI2RlZmluZSBzbWFsbF9pbmRleDJzaXplKGkpICgoaSkgIDw8IFNNQUxMQklOX1NISUZUKQorI2RlZmluZSBNSU5fU01BTExfSU5ERVggICAgIChzbWFsbF9pbmRleChNSU5fQ0hVTktfU0laRSkpCisKKy8qIGFkZHJlc3NpbmcgYnkgaW5kZXguIFNlZSBhYm92ZSBhYm91dCBzbWFsbGJpbiByZXBvc2l0aW9uaW5nICovCisvKiBCRUdJTiBhbmRyb2lkLWNoYW5nZWQ6IHN0cmljdCBhbGlhc2luZyBjaGFuZ2U6IGNoYXIqIGNhc3QgdG8gdm9pZCogKi8KKyNkZWZpbmUgc21hbGxiaW5fYXQoTSwgaSkgICAoKHNiaW5wdHIpKCh2b2lkKikmKChNKS0+c21hbGxiaW5zWyhpKTw8MV0pKSkKKy8qIEVORCBhbmRyb2lkLWNoYW5nZWQgKi8KKyNkZWZpbmUgdHJlZWJpbl9hdChNLGkpICAgICAoJigoTSktPnRyZWViaW5zW2ldKSkKKworLyogYXNzaWduIHRyZWUgaW5kZXggZm9yIHNpemUgUyB0byB2YXJpYWJsZSBJLiBVc2UgeDg2IGFzbSBpZiBwb3NzaWJsZSAgKi8KKyNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiAoZGVmaW5lZChfX2kzODZfXykgfHwgZGVmaW5lZChfX3g4Nl82NF9fKSkKKyNkZWZpbmUgY29tcHV0ZV90cmVlX2luZGV4KFMsIEkpXAore1wKKyAgdW5zaWduZWQgaW50IFggPSBTID4+IFRSRUVCSU5fU0hJRlQ7XAorICBpZiAoWCA9PSAwKVwKKyAgICBJID0gMDtcCisgIGVsc2UgaWYgKFggPiAweEZGRkYpXAorICAgIEkgPSBOVFJFRUJJTlMtMTtcCisgIGVsc2Uge1wKKyAgICB1bnNpZ25lZCBpbnQgSyA9ICh1bnNpZ25lZCkgc2l6ZW9mKFgpKl9fQ0hBUl9CSVRfXyAtIDEgLSAodW5zaWduZWQpIF9fYnVpbHRpbl9jbHooWCk7IFwKKyAgICBJID0gIChiaW5kZXhfdCkoKEsgPDwgMSkgKyAoKFMgPj4gKEsgKyAoVFJFRUJJTl9TSElGVC0xKSkgJiAxKSkpO1wKKyAgfVwKK30KKworI2VsaWYgZGVmaW5lZCAoX19JTlRFTF9DT01QSUxFUikKKyNkZWZpbmUgY29tcHV0ZV90cmVlX2luZGV4KFMsIEkpXAore1wKKyAgc2l6ZV90IFggPSBTID4+IFRSRUVCSU5fU0hJRlQ7XAorICBpZiAoWCA9PSAwKVwKKyAgICBJID0gMDtcCisgIGVsc2UgaWYgKFggPiAweEZGRkYpXAorICAgIEkgPSBOVFJFRUJJTlMtMTtcCisgIGVsc2Uge1wKKyAgICB1bnNpZ25lZCBpbnQgSyA9IF9iaXRfc2Nhbl9yZXZlcnNlIChYKTsgXAorICAgIEkgPSAgKGJpbmRleF90KSgoSyA8PCAxKSArICgoUyA+PiAoSyArIChUUkVFQklOX1NISUZULTEpKSAmIDEpKSk7XAorICB9XAorfQorCisjZWxpZiBkZWZpbmVkKF9NU0NfVkVSKSAmJiBfTVNDX1ZFUj49MTMwMAorI2RlZmluZSBjb21wdXRlX3RyZWVfaW5kZXgoUywgSSlcCit7XAorICBzaXplX3QgWCA9IFMgPj4gVFJFRUJJTl9TSElGVDtcCisgIGlmIChYID09IDApXAorICAgIEkgPSAwO1wKKyAgZWxzZSBpZiAoWCA+IDB4RkZGRilcCisgICAgSSA9IE5UUkVFQklOUy0xO1wKKyAgZWxzZSB7XAorICAgIHVuc2lnbmVkIGludCBLO1wKKyAgICBfQml0U2NhblJldmVyc2UoKERXT1JEICopICZLLCAoRFdPUkQpIFgpO1wKKyAgICBJID0gIChiaW5kZXhfdCkoKEsgPDwgMSkgKyAoKFMgPj4gKEsgKyAoVFJFRUJJTl9TSElGVC0xKSkgJiAxKSkpO1wKKyAgfVwKK30KKworI2Vsc2UgLyogR05VQyAqLworI2RlZmluZSBjb21wdXRlX3RyZWVfaW5kZXgoUywgSSlcCit7XAorICBzaXplX3QgWCA9IFMgPj4gVFJFRUJJTl9TSElGVDtcCisgIGlmIChYID09IDApXAorICAgIEkgPSAwO1wKKyAgZWxzZSBpZiAoWCA+IDB4RkZGRilcCisgICAgSSA9IE5UUkVFQklOUy0xO1wKKyAgZWxzZSB7XAorICAgIHVuc2lnbmVkIGludCBZID0gKHVuc2lnbmVkIGludClYO1wKKyAgICB1bnNpZ25lZCBpbnQgTiA9ICgoWSAtIDB4MTAwKSA+PiAxNikgJiA4O1wKKyAgICB1bnNpZ25lZCBpbnQgSyA9ICgoKFkgPDw9IE4pIC0gMHgxMDAwKSA+PiAxNikgJiA0O1wKKyAgICBOICs9IEs7XAorICAgIE4gKz0gSyA9ICgoKFkgPDw9IEspIC0gMHg0MDAwKSA+PiAxNikgJiAyO1wKKyAgICBLID0gMTQgLSBOICsgKChZIDw8PSBLKSA+PiAxNSk7XAorICAgIEkgPSAoSyA8PCAxKSArICgoUyA+PiAoSyArIChUUkVFQklOX1NISUZULTEpKSAmIDEpKTtcCisgIH1cCit9CisjZW5kaWYgLyogR05VQyAqLworCisvKiBCaXQgcmVwcmVzZW50aW5nIG1heGltdW0gcmVzb2x2ZWQgc2l6ZSBpbiBhIHRyZWViaW4gYXQgaSAqLworI2RlZmluZSBiaXRfZm9yX3RyZWVfaW5kZXgoaSkgXAorICAgKGkgPT0gTlRSRUVCSU5TLTEpPyAoU0laRV9UX0JJVFNJWkUtMSkgOiAoKChpKSA+PiAxKSArIFRSRUVCSU5fU0hJRlQgLSAyKQorCisvKiBTaGlmdCBwbGFjaW5nIG1heGltdW0gcmVzb2x2ZWQgYml0IGluIGEgdHJlZWJpbiBhdCBpIGFzIHNpZ24gYml0ICovCisjZGVmaW5lIGxlZnRzaGlmdF9mb3JfdHJlZV9pbmRleChpKSBcCisgICAoKGkgPT0gTlRSRUVCSU5TLTEpPyAwIDogXAorICAgICgoU0laRV9UX0JJVFNJWkUtU0laRV9UX09ORSkgLSAoKChpKSA+PiAxKSArIFRSRUVCSU5fU0hJRlQgLSAyKSkpCisKKy8qIFRoZSBzaXplIG9mIHRoZSBzbWFsbGVzdCBjaHVuayBoZWxkIGluIGJpbiB3aXRoIGluZGV4IGkgKi8KKyNkZWZpbmUgbWluc2l6ZV9mb3JfdHJlZV9pbmRleChpKSBcCisgICAoKFNJWkVfVF9PTkUgPDwgKCgoaSkgPj4gMSkgKyBUUkVFQklOX1NISUZUKSkgfCAgXAorICAgKCgoc2l6ZV90KSgoaSkgJiBTSVpFX1RfT05FKSkgPDwgKCgoaSkgPj4gMSkgKyBUUkVFQklOX1NISUZUIC0gMSkpKQorCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBPcGVyYXRpb25zIG9uIGJpbiBtYXBzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIGJpdCBjb3JyZXNwb25kaW5nIHRvIGdpdmVuIGluZGV4ICovCisjZGVmaW5lIGlkeDJiaXQoaSkgICAgICAgICAgICAgICgoYmlubWFwX3QpKDEpIDw8IChpKSkKKworLyogTWFyay9DbGVhciBiaXRzIHdpdGggZ2l2ZW4gaW5kZXggKi8KKyNkZWZpbmUgbWFya19zbWFsbG1hcChNLGkpICAgICAgKChNKS0+c21hbGxtYXAgfD0gIGlkeDJiaXQoaSkpCisjZGVmaW5lIGNsZWFyX3NtYWxsbWFwKE0saSkgICAgICgoTSktPnNtYWxsbWFwICY9IH5pZHgyYml0KGkpKQorI2RlZmluZSBzbWFsbG1hcF9pc19tYXJrZWQoTSxpKSAoKE0pLT5zbWFsbG1hcCAmICAgaWR4MmJpdChpKSkKKworI2RlZmluZSBtYXJrX3RyZWVtYXAoTSxpKSAgICAgICAoKE0pLT50cmVlbWFwICB8PSAgaWR4MmJpdChpKSkKKyNkZWZpbmUgY2xlYXJfdHJlZW1hcChNLGkpICAgICAgKChNKS0+dHJlZW1hcCAgJj0gfmlkeDJiaXQoaSkpCisjZGVmaW5lIHRyZWVtYXBfaXNfbWFya2VkKE0saSkgICgoTSktPnRyZWVtYXAgICYgICBpZHgyYml0KGkpKQorCisvKiBpc29sYXRlIHRoZSBsZWFzdCBzZXQgYml0IG9mIGEgYml0bWFwICovCisjZGVmaW5lIGxlYXN0X2JpdCh4KSAgICAgICAgICgoeCkgJiAtKHgpKQorCisvKiBtYXNrIHdpdGggYWxsIGJpdHMgdG8gbGVmdCBvZiBsZWFzdCBiaXQgb2YgeCBvbiAqLworI2RlZmluZSBsZWZ0X2JpdHMoeCkgICAgICAgICAoKHg8PDEpIHwgLSh4PDwxKSkKKworLyogbWFzayB3aXRoIGFsbCBiaXRzIHRvIGxlZnQgb2Ygb3IgZXF1YWwgdG8gbGVhc3QgYml0IG9mIHggb24gKi8KKyNkZWZpbmUgc2FtZV9vcl9sZWZ0X2JpdHMoeCkgKCh4KSB8IC0oeCkpCisKKy8qIGluZGV4IGNvcnJlc3BvbmRpbmcgdG8gZ2l2ZW4gYml0LiBVc2UgeDg2IGFzbSBpZiBwb3NzaWJsZSAqLworCisjaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgKGRlZmluZWQoX19pMzg2X18pIHx8IGRlZmluZWQoX194ODZfNjRfXykpCisjZGVmaW5lIGNvbXB1dGVfYml0MmlkeChYLCBJKVwKK3tcCisgIHVuc2lnbmVkIGludCBKO1wKKyAgSiA9IF9fYnVpbHRpbl9jdHooWCk7IFwKKyAgSSA9IChiaW5kZXhfdClKO1wKK30KKworI2VsaWYgZGVmaW5lZCAoX19JTlRFTF9DT01QSUxFUikKKyNkZWZpbmUgY29tcHV0ZV9iaXQyaWR4KFgsIEkpXAore1wKKyAgdW5zaWduZWQgaW50IEo7XAorICBKID0gX2JpdF9zY2FuX2ZvcndhcmQgKFgpOyBcCisgIEkgPSAoYmluZGV4X3QpSjtcCit9CisKKyNlbGlmIGRlZmluZWQoX01TQ19WRVIpICYmIF9NU0NfVkVSPj0xMzAwCisjZGVmaW5lIGNvbXB1dGVfYml0MmlkeChYLCBJKVwKK3tcCisgIHVuc2lnbmVkIGludCBKO1wKKyAgX0JpdFNjYW5Gb3J3YXJkKChEV09SRCAqKSAmSiwgWCk7XAorICBJID0gKGJpbmRleF90KUo7XAorfQorCisjZWxpZiBVU0VfQlVJTFRJTl9GRlMKKyNkZWZpbmUgY29tcHV0ZV9iaXQyaWR4KFgsIEkpIEkgPSBmZnMoWCktMQorCisjZWxzZQorI2RlZmluZSBjb21wdXRlX2JpdDJpZHgoWCwgSSlcCit7XAorICB1bnNpZ25lZCBpbnQgWSA9IFggLSAxO1wKKyAgdW5zaWduZWQgaW50IEsgPSBZID4+ICgxNi00KSAmIDE2O1wKKyAgdW5zaWduZWQgaW50IE4gPSBLOyAgICAgICAgWSA+Pj0gSztcCisgIE4gKz0gSyA9IFkgPj4gKDgtMykgJiAgODsgIFkgPj49IEs7XAorICBOICs9IEsgPSBZID4+ICg0LTIpICYgIDQ7ICBZID4+PSBLO1wKKyAgTiArPSBLID0gWSA+PiAoMi0xKSAmICAyOyAgWSA+Pj0gSztcCisgIE4gKz0gSyA9IFkgPj4gKDEtMCkgJiAgMTsgIFkgPj49IEs7XAorICBJID0gKGJpbmRleF90KShOICsgWSk7XAorfQorI2VuZGlmIC8qIEdOVUMgKi8KKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBSdW50aW1lIENoZWNrIFN1cHBvcnQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKgorICBGb3Igc2VjdXJpdHksIHRoZSBtYWluIGludmFyaWFudCBpcyB0aGF0IG1hbGxvYy9mcmVlL2V0YyBuZXZlcgorICB3cml0ZXMgdG8gYSBzdGF0aWMgYWRkcmVzcyBvdGhlciB0aGFuIG1hbGxvY19zdGF0ZSwgdW5sZXNzIHN0YXRpYworICBtYWxsb2Nfc3RhdGUgaXRzZWxmIGhhcyBiZWVuIGNvcnJ1cHRlZCwgd2hpY2ggY2Fubm90IG9jY3VyIHZpYQorICBtYWxsb2MgKGJlY2F1c2Ugb2YgdGhlc2UgY2hlY2tzKS4gSW4gZXNzZW5jZSB0aGlzIG1lYW5zIHRoYXQgd2UKKyAgYmVsaWV2ZSBhbGwgcG9pbnRlcnMsIHNpemVzLCBtYXBzIGV0YyBoZWxkIGluIG1hbGxvY19zdGF0ZSwgYnV0CisgIGNoZWNrIGFsbCBvZiB0aG9zZSBsaW5rZWQgb3Igb2Zmc2V0dGVkIGZyb20gb3RoZXIgZW1iZWRkZWQgZGF0YQorICBzdHJ1Y3R1cmVzLiAgVGhlc2UgY2hlY2tzIGFyZSBpbnRlcnNwZXJzZWQgd2l0aCBtYWluIGNvZGUgaW4gYSB3YXkKKyAgdGhhdCB0ZW5kcyB0byBtaW5pbWl6ZSB0aGVpciBydW4tdGltZSBjb3N0LgorCisgIFdoZW4gRk9PVEVSUyBpcyBkZWZpbmVkLCBpbiBhZGRpdGlvbiB0byByYW5nZSBjaGVja2luZywgd2UgYWxzbworICB2ZXJpZnkgZm9vdGVyIGZpZWxkcyBvZiBpbnVzZSBjaHVua3MsIHdoaWNoIGNhbiBiZSB1c2VkIGd1YXJhbnRlZQorICB0aGF0IHRoZSBtc3RhdGUgY29udHJvbGxpbmcgbWFsbG9jL2ZyZWUgaXMgaW50YWN0LiAgVGhpcyBpcyBhCisgIHN0cmVhbWxpbmVkIHZlcnNpb24gb2YgdGhlIGFwcHJvYWNoIGRlc2NyaWJlZCBieSBXaWxsaWFtIFJvYmVydHNvbgorICBldCBhbCBpbiAiUnVuLXRpbWUgRGV0ZWN0aW9uIG9mIEhlYXAtYmFzZWQgT3ZlcmZsb3dzIiBMSVNBJzAzCisgIGh0dHA6Ly93d3cudXNlbml4Lm9yZy9ldmVudHMvbGlzYTAzL3RlY2gvcm9iZXJ0c29uLmh0bWwgVGhlIGZvb3RlcgorICBvZiBhbiBpbnVzZSBjaHVuayBob2xkcyB0aGUgeG9yIG9mIGl0cyBtc3RhdGUgYW5kIGEgcmFuZG9tIHNlZWQsCisgIHRoYXQgaXMgY2hlY2tlZCB1cG9uIGNhbGxzIHRvIGZyZWUoKSBhbmQgcmVhbGxvYygpLiAgVGhpcyBpcworICAocHJvYmFiYWxpc3RpY2FsbHkpIHVuZ3Vlc3NhYmxlIGZyb20gb3V0c2lkZSB0aGUgcHJvZ3JhbSwgYnV0IGNhbiBiZQorICBjb21wdXRlZCBieSBhbnkgY29kZSBzdWNjZXNzZnVsbHkgbWFsbG9jJ2luZyBhbnkgY2h1bmssIHNvIGRvZXMgbm90CisgIGl0c2VsZiBwcm92aWRlIHByb3RlY3Rpb24gYWdhaW5zdCBjb2RlIHRoYXQgaGFzIGFscmVhZHkgYnJva2VuCisgIHNlY3VyaXR5IHRocm91Z2ggc29tZSBvdGhlciBtZWFucy4gIFVubGlrZSBSb2JlcnRzb24gZXQgYWwsIHdlCisgIGFsd2F5cyBkeW5hbWljYWxseSBjaGVjayBhZGRyZXNzZXMgb2YgYWxsIG9mZnNldCBjaHVua3MgKHByZXZpb3VzLAorICBuZXh0LCBldGMpLiBUaGlzIHR1cm5zIG91dCB0byBiZSBjaGVhcGVyIHRoYW4gcmVseWluZyBvbiBoYXNoZXMuCisqLworCisjaWYgIUlOU0VDVVJFCisvKiBDaGVjayBpZiBhZGRyZXNzIGEgaXMgYXQgbGVhc3QgYXMgaGlnaCBhcyBhbnkgZnJvbSBNT1JFQ09SRSBvciBNTUFQICovCisjZGVmaW5lIG9rX2FkZHJlc3MoTSwgYSkgKChjaGFyKikoYSkgPj0gKE0pLT5sZWFzdF9hZGRyKQorLyogQ2hlY2sgaWYgYWRkcmVzcyBvZiBuZXh0IGNodW5rIG4gaXMgaGlnaGVyIHRoYW4gYmFzZSBjaHVuayBwICovCisjZGVmaW5lIG9rX25leHQocCwgbikgICAgKChjaGFyKikocCkgPCAoY2hhciopKG4pKQorLyogQ2hlY2sgaWYgcCBoYXMgaW51c2Ugc3RhdHVzICovCisjZGVmaW5lIG9rX2ludXNlKHApICAgICBpc19pbnVzZShwKQorLyogQ2hlY2sgaWYgcCBoYXMgaXRzIHBpbnVzZSBiaXQgb24gKi8KKyNkZWZpbmUgb2tfcGludXNlKHApICAgICBwaW51c2UocCkKKworI2Vsc2UgLyogIUlOU0VDVVJFICovCisjZGVmaW5lIG9rX2FkZHJlc3MoTSwgYSkgKDEpCisjZGVmaW5lIG9rX25leHQoYiwgbikgICAgKDEpCisjZGVmaW5lIG9rX2ludXNlKHApICAgICAgKDEpCisjZGVmaW5lIG9rX3BpbnVzZShwKSAgICAgKDEpCisjZW5kaWYgLyogIUlOU0VDVVJFICovCisKKyNpZiAoRk9PVEVSUyAmJiAhSU5TRUNVUkUpCisvKiBDaGVjayBpZiAoYWxsZWdlZCkgbXN0YXRlIG0gaGFzIGV4cGVjdGVkIG1hZ2ljIGZpZWxkICovCisjZGVmaW5lIG9rX21hZ2ljKE0pICAgICAgKChNKS0+bWFnaWMgPT0gbXBhcmFtcy5tYWdpYykKKyNlbHNlICAvKiAoRk9PVEVSUyAmJiAhSU5TRUNVUkUpICovCisjZGVmaW5lIG9rX21hZ2ljKE0pICAgICAgKDEpCisjZW5kaWYgLyogKEZPT1RFUlMgJiYgIUlOU0VDVVJFKSAqLworCisvKiBJbiBnY2MsIHVzZSBfX2J1aWx0aW5fZXhwZWN0IHRvIG1pbmltaXplIGltcGFjdCBvZiBjaGVja3MgKi8KKyNpZiAhSU5TRUNVUkUKKyNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiBfX0dOVUNfXyA+PSAzCisjZGVmaW5lIFJUQ0hFQ0soZSkgIF9fYnVpbHRpbl9leHBlY3QoZSwgMSkKKyNlbHNlIC8qIEdOVUMgKi8KKyNkZWZpbmUgUlRDSEVDSyhlKSAgKGUpCisjZW5kaWYgLyogR05VQyAqLworI2Vsc2UgLyogIUlOU0VDVVJFICovCisjZGVmaW5lIFJUQ0hFQ0soZSkgICgxKQorI2VuZGlmIC8qICFJTlNFQ1VSRSAqLworCisvKiBtYWNyb3MgdG8gc2V0IHVwIGludXNlIGNodW5rcyB3aXRoIG9yIHdpdGhvdXQgZm9vdGVycyAqLworCisjaWYgIUZPT1RFUlMKKworI2RlZmluZSBtYXJrX2ludXNlX2Zvb3QoTSxwLHMpCisKKy8qIE1hY3JvcyBmb3Igc2V0dGluZyBoZWFkL2Zvb3Qgb2Ygbm9uLW1tYXBwZWQgY2h1bmtzICovCisKKy8qIFNldCBjaW51c2UgYml0IGFuZCBwaW51c2UgYml0IG9mIG5leHQgY2h1bmsgKi8KKyNkZWZpbmUgc2V0X2ludXNlKE0scCxzKVwKKyAgKChwKS0+aGVhZCA9ICgoKHApLT5oZWFkICYgUElOVVNFX0JJVCl8c3xDSU5VU0VfQklUKSxcCisgICgobWNodW5rcHRyKSgoKGNoYXIqKShwKSkgKyAocykpKS0+aGVhZCB8PSBQSU5VU0VfQklUKQorCisvKiBTZXQgY2ludXNlIGFuZCBwaW51c2Ugb2YgdGhpcyBjaHVuayBhbmQgcGludXNlIG9mIG5leHQgY2h1bmsgKi8KKyNkZWZpbmUgc2V0X2ludXNlX2FuZF9waW51c2UoTSxwLHMpXAorICAoKHApLT5oZWFkID0gKHN8UElOVVNFX0JJVHxDSU5VU0VfQklUKSxcCisgICgobWNodW5rcHRyKSgoKGNoYXIqKShwKSkgKyAocykpKS0+aGVhZCB8PSBQSU5VU0VfQklUKQorCisvKiBTZXQgc2l6ZSwgY2ludXNlIGFuZCBwaW51c2UgYml0IG9mIHRoaXMgY2h1bmsgKi8KKyNkZWZpbmUgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9pbnVzZV9jaHVuayhNLCBwLCBzKVwKKyAgKChwKS0+aGVhZCA9IChzfFBJTlVTRV9CSVR8Q0lOVVNFX0JJVCkpCisKKyNlbHNlIC8qIEZPT1RFUlMgKi8KKworLyogU2V0IGZvb3Qgb2YgaW51c2UgY2h1bmsgdG8gYmUgeG9yIG9mIG1zdGF0ZSBhbmQgc2VlZCAqLworI2RlZmluZSBtYXJrX2ludXNlX2Zvb3QoTSxwLHMpXAorICAoKChtY2h1bmtwdHIpKChjaGFyKikocCkgKyAocykpKS0+cHJldl9mb290ID0gKChzaXplX3QpKE0pIF4gbXBhcmFtcy5tYWdpYykpCisKKyNkZWZpbmUgZ2V0X21zdGF0ZV9mb3IocClcCisgICgobXN0YXRlKSgoKG1jaHVua3B0cikoKGNoYXIqKShwKSArXAorICAgIChjaHVua3NpemUocCkpKSktPnByZXZfZm9vdCBeIG1wYXJhbXMubWFnaWMpKQorCisjZGVmaW5lIHNldF9pbnVzZShNLHAscylcCisgICgocCktPmhlYWQgPSAoKChwKS0+aGVhZCAmIFBJTlVTRV9CSVQpfHN8Q0lOVVNFX0JJVCksXAorICAoKChtY2h1bmtwdHIpKCgoY2hhciopKHApKSArIChzKSkpLT5oZWFkIHw9IFBJTlVTRV9CSVQpLCBcCisgIG1hcmtfaW51c2VfZm9vdChNLHAscykpCisKKyNkZWZpbmUgc2V0X2ludXNlX2FuZF9waW51c2UoTSxwLHMpXAorICAoKHApLT5oZWFkID0gKHN8UElOVVNFX0JJVHxDSU5VU0VfQklUKSxcCisgICgoKG1jaHVua3B0cikoKChjaGFyKikocCkpICsgKHMpKSktPmhlYWQgfD0gUElOVVNFX0JJVCksXAorIG1hcmtfaW51c2VfZm9vdChNLHAscykpCisKKyNkZWZpbmUgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9pbnVzZV9jaHVuayhNLCBwLCBzKVwKKyAgKChwKS0+aGVhZCA9IChzfFBJTlVTRV9CSVR8Q0lOVVNFX0JJVCksXAorICBtYXJrX2ludXNlX2Zvb3QoTSwgcCwgcykpCisKKyNlbmRpZiAvKiAhRk9PVEVSUyAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHNldHRpbmcgbXBhcmFtcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjaWYgTE9DS19BVF9GT1JLCitzdGF0aWMgdm9pZCBwcmVfZm9yayh2b2lkKSAgICAgICAgIHsgQUNRVUlSRV9MT0NLKCYoZ20pLT5tdXRleCk7IH0KK3N0YXRpYyB2b2lkIHBvc3RfZm9ya19wYXJlbnQodm9pZCkgeyBSRUxFQVNFX0xPQ0soJihnbSktPm11dGV4KTsgfQorc3RhdGljIHZvaWQgcG9zdF9mb3JrX2NoaWxkKHZvaWQpICB7IElOSVRJQUxfTE9DSygmKGdtKS0+bXV0ZXgpOyB9CisjZW5kaWYgLyogTE9DS19BVF9GT1JLICovCisKKy8qIEluaXRpYWxpemUgbXBhcmFtcyAqLworc3RhdGljIGludCBpbml0X21wYXJhbXModm9pZCkgeworICAvKiBCRUdJTiBhbmRyb2lkLWFkZGVkOiBtb3ZlIHB0aHJlYWRfYXRmb3JrIG91dHNpZGUgb2YgbG9jayAqLworICBpbnQgZmlyc3RfcnVuID0gMDsKKyAgLyogRU5EIGFuZHJvaWQtYWRkZWQgKi8KKyNpZmRlZiBORUVEX0dMT0JBTF9MT0NLX0lOSVQKKyAgaWYgKG1hbGxvY19nbG9iYWxfbXV0ZXhfc3RhdHVzIDw9IDApCisgICAgaW5pdF9tYWxsb2NfZ2xvYmFsX211dGV4KCk7CisjZW5kaWYKKworICBBQ1FVSVJFX01BTExPQ19HTE9CQUxfTE9DSygpOworICBpZiAobXBhcmFtcy5tYWdpYyA9PSAwKSB7CisgICAgc2l6ZV90IG1hZ2ljOworICAgIHNpemVfdCBwc2l6ZTsKKyAgICBzaXplX3QgZ3NpemU7CisgICAgLyogQkVHSU4gYW5kcm9pZC1hZGRlZDogbW92ZSBwdGhyZWFkX2F0Zm9yayBvdXRzaWRlIG9mIGxvY2sgKi8KKyAgICBmaXJzdF9ydW4gPSAxOworICAgIC8qIEVORCBhbmRyb2lkLWFkZGVkICovCisKKyNpZm5kZWYgV0lOMzIKKyAgICBwc2l6ZSA9IG1hbGxvY19nZXRwYWdlc2l6ZTsKKyAgICBnc2l6ZSA9ICgoREVGQVVMVF9HUkFOVUxBUklUWSAhPSAwKT8gREVGQVVMVF9HUkFOVUxBUklUWSA6IHBzaXplKTsKKyNlbHNlIC8qIFdJTjMyICovCisgICAgeworICAgICAgU1lTVEVNX0lORk8gc3lzdGVtX2luZm87CisgICAgICBHZXRTeXN0ZW1JbmZvKCZzeXN0ZW1faW5mbyk7CisgICAgICBwc2l6ZSA9IHN5c3RlbV9pbmZvLmR3UGFnZVNpemU7CisgICAgICBnc2l6ZSA9ICgoREVGQVVMVF9HUkFOVUxBUklUWSAhPSAwKT8KKyAgICAgICAgICAgICAgIERFRkFVTFRfR1JBTlVMQVJJVFkgOiBzeXN0ZW1faW5mby5kd0FsbG9jYXRpb25HcmFudWxhcml0eSk7CisgICAgfQorI2VuZGlmIC8qIFdJTjMyICovCisKKyAgICAvKiBTYW5pdHktY2hlY2sgY29uZmlndXJhdGlvbjoKKyAgICAgICBzaXplX3QgbXVzdCBiZSB1bnNpZ25lZCBhbmQgYXMgd2lkZSBhcyBwb2ludGVyIHR5cGUuCisgICAgICAgaW50cyBtdXN0IGJlIGF0IGxlYXN0IDQgYnl0ZXMuCisgICAgICAgYWxpZ25tZW50IG11c3QgYmUgYXQgbGVhc3QgOC4KKyAgICAgICBBbGlnbm1lbnQsIG1pbiBjaHVuayBzaXplLCBhbmQgcGFnZSBzaXplIG11c3QgYWxsIGJlIHBvd2VycyBvZiAyLgorICAgICovCisgICAgaWYgKChzaXplb2Yoc2l6ZV90KSAhPSBzaXplb2YoY2hhciopKSB8fAorICAgICAgICAoTUFYX1NJWkVfVCA8IE1JTl9DSFVOS19TSVpFKSAgfHwKKyAgICAgICAgKHNpemVvZihpbnQpIDwgNCkgIHx8CisgICAgICAgIChNQUxMT0NfQUxJR05NRU5UIDwgKHNpemVfdCk4VSkgfHwKKyAgICAgICAgKChNQUxMT0NfQUxJR05NRU5UICYgKE1BTExPQ19BTElHTk1FTlQtU0laRV9UX09ORSkpICE9IDApIHx8CisgICAgICAgICgoTUNIVU5LX1NJWkUgICAgICAmIChNQ0hVTktfU0laRS1TSVpFX1RfT05FKSkgICAgICAhPSAwKSB8fAorICAgICAgICAoKGdzaXplICAgICAgICAgICAgJiAoZ3NpemUtU0laRV9UX09ORSkpICAgICAgICAgICAgIT0gMCkgfHwKKyAgICAgICAgKChwc2l6ZSAgICAgICAgICAgICYgKHBzaXplLVNJWkVfVF9PTkUpKSAgICAgICAgICAgICE9IDApKQorICAgICAgQUJPUlQ7CisgICAgbXBhcmFtcy5ncmFudWxhcml0eSA9IGdzaXplOworICAgIG1wYXJhbXMucGFnZV9zaXplID0gcHNpemU7CisgICAgbXBhcmFtcy5tbWFwX3RocmVzaG9sZCA9IERFRkFVTFRfTU1BUF9USFJFU0hPTEQ7CisgICAgbXBhcmFtcy50cmltX3RocmVzaG9sZCA9IERFRkFVTFRfVFJJTV9USFJFU0hPTEQ7CisjaWYgTU9SRUNPUkVfQ09OVElHVU9VUworICAgIG1wYXJhbXMuZGVmYXVsdF9tZmxhZ3MgPSBVU0VfTE9DS19CSVR8VVNFX01NQVBfQklUOworI2Vsc2UgIC8qIE1PUkVDT1JFX0NPTlRJR1VPVVMgKi8KKyAgICBtcGFyYW1zLmRlZmF1bHRfbWZsYWdzID0gVVNFX0xPQ0tfQklUfFVTRV9NTUFQX0JJVHxVU0VfTk9OQ09OVElHVU9VU19CSVQ7CisjZW5kaWYgLyogTU9SRUNPUkVfQ09OVElHVU9VUyAqLworCisjaWYgIU9OTFlfTVNQQUNFUworICAgIC8qIFNldCB1cCBsb2NrIGZvciBtYWluIG1hbGxvYyBhcmVhICovCisgICAgZ20tPm1mbGFncyA9IG1wYXJhbXMuZGVmYXVsdF9tZmxhZ3M7CisgICAgKHZvaWQpSU5JVElBTF9MT0NLKCZnbS0+bXV0ZXgpOworI2VuZGlmCisgICAgLyogQkVHSU4gYW5kcm9pZC1yZW1vdmVkOiBtb3ZlIHB0aHJlYWRfYXRmb3JrIG91dHNpZGUgb2YgbG9jayAqLworI2lmIDAgJiYgTE9DS19BVF9GT1JLCisgICAgcHRocmVhZF9hdGZvcmsoJnByZV9mb3JrLCAmcG9zdF9mb3JrX3BhcmVudCwgJnBvc3RfZm9ya19jaGlsZCk7CisjZW5kaWYKKyAgICAvKiBFTkQgYW5kcm9pZC1yZW1vdmVkICovCisKKyAgICB7CisjaWYgVVNFX0RFVl9SQU5ET00KKyAgICAgIGludCBmZDsKKyAgICAgIHVuc2lnbmVkIGNoYXIgYnVmW3NpemVvZihzaXplX3QpXTsKKyAgICAgIC8qIFRyeSB0byB1c2UgL2Rldi91cmFuZG9tLCBlbHNlIGZhbGwgYmFjayBvbiB1c2luZyB0aW1lICovCisgICAgICBpZiAoKGZkID0gb3BlbigiL2Rldi91cmFuZG9tIiwgT19SRE9OTFkpKSA+PSAwICYmCisgICAgICAgICAgcmVhZChmZCwgYnVmLCBzaXplb2YoYnVmKSkgPT0gc2l6ZW9mKGJ1ZikpIHsKKyAgICAgICAgbWFnaWMgPSAqKChzaXplX3QgKikgYnVmKTsKKyAgICAgICAgY2xvc2UoZmQpOworICAgICAgfQorICAgICAgZWxzZQorI2VuZGlmIC8qIFVTRV9ERVZfUkFORE9NICovCisjaWZkZWYgV0lOMzIKKyAgICAgIG1hZ2ljID0gKHNpemVfdCkoR2V0VGlja0NvdW50KCkgXiAoc2l6ZV90KTB4NTU1NTU1NTVVKTsKKyNlbGlmIGRlZmluZWQoTEFDS1NfVElNRV9IKQorICAgICAgbWFnaWMgPSAoc2l6ZV90KSZtYWdpYyBeIChzaXplX3QpMHg1NTU1NTU1NVU7CisjZWxzZQorICAgICAgbWFnaWMgPSAoc2l6ZV90KSh0aW1lKDApIF4gKHNpemVfdCkweDU1NTU1NTU1VSk7CisjZW5kaWYKKyAgICAgIG1hZ2ljIHw9IChzaXplX3QpOFU7ICAgIC8qIGVuc3VyZSBub256ZXJvICovCisgICAgICBtYWdpYyAmPSB+KHNpemVfdCk3VTsgICAvKiBpbXByb3ZlIGNoYW5jZXMgb2YgZmF1bHQgZm9yIGJhZCB2YWx1ZXMgKi8KKyAgICAgIC8qIFVudGlsIG1lbW9yeSBtb2RlcyBjb21tb25seSBhdmFpbGFibGUsIHVzZSB2b2xhdGlsZS13cml0ZSAqLworICAgICAgKCoodm9sYXRpbGUgc2l6ZV90ICopKCYobXBhcmFtcy5tYWdpYykpKSA9IG1hZ2ljOworICAgIH0KKyAgfQorCisgIFJFTEVBU0VfTUFMTE9DX0dMT0JBTF9MT0NLKCk7CisgIC8qIEJFR0lOIGFuZHJvaWQtYWRkZWQ6IG1vdmUgcHRocmVhZF9hdGZvcmsgb3V0c2lkZSBvZiBsb2NrICovCisgIGlmIChmaXJzdF9ydW4gIT0gMCkgeworI2lmIExPQ0tfQVRfRk9SSworICAgIHB0aHJlYWRfYXRmb3JrKCZwcmVfZm9yaywgJnBvc3RfZm9ya19wYXJlbnQsICZwb3N0X2ZvcmtfY2hpbGQpOworI2VuZGlmCisgIH0KKyAgLyogRU5EIGFuZHJvaWQtYWRkZWQgKi8KKyAgcmV0dXJuIDE7Cit9CisKKy8qIHN1cHBvcnQgZm9yIG1hbGxvcHQgKi8KK3N0YXRpYyBpbnQgY2hhbmdlX21wYXJhbShpbnQgcGFyYW1fbnVtYmVyLCBpbnQgdmFsdWUpIHsKKyAgc2l6ZV90IHZhbDsKKyAgZW5zdXJlX2luaXRpYWxpemF0aW9uKCk7CisgIHZhbCA9ICh2YWx1ZSA9PSAtMSk/IE1BWF9TSVpFX1QgOiAoc2l6ZV90KXZhbHVlOworICBzd2l0Y2gocGFyYW1fbnVtYmVyKSB7CisgIGNhc2UgTV9UUklNX1RIUkVTSE9MRDoKKyAgICBtcGFyYW1zLnRyaW1fdGhyZXNob2xkID0gdmFsOworICAgIHJldHVybiAxOworICBjYXNlIE1fR1JBTlVMQVJJVFk6CisgICAgaWYgKHZhbCA+PSBtcGFyYW1zLnBhZ2Vfc2l6ZSAmJiAoKHZhbCAmICh2YWwtMSkpID09IDApKSB7CisgICAgICBtcGFyYW1zLmdyYW51bGFyaXR5ID0gdmFsOworICAgICAgcmV0dXJuIDE7CisgICAgfQorICAgIGVsc2UKKyAgICAgIHJldHVybiAwOworICBjYXNlIE1fTU1BUF9USFJFU0hPTEQ6CisgICAgbXBhcmFtcy5tbWFwX3RocmVzaG9sZCA9IHZhbDsKKyAgICByZXR1cm4gMTsKKyAgZGVmYXVsdDoKKyAgICByZXR1cm4gMDsKKyAgfQorfQorCisjaWYgREVCVUcKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRGVidWdnaW5nIFN1cHBvcnQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIENoZWNrIHByb3BlcnRpZXMgb2YgYW55IGNodW5rLCB3aGV0aGVyIGZyZWUsIGludXNlLCBtbWFwcGVkIGV0YyAgKi8KK3N0YXRpYyB2b2lkIGRvX2NoZWNrX2FueV9jaHVuayhtc3RhdGUgbSwgbWNodW5rcHRyIHApIHsKKyAgYXNzZXJ0KChpc19hbGlnbmVkKGNodW5rMm1lbShwKSkpIHx8IChwLT5oZWFkID09IEZFTkNFUE9TVF9IRUFEKSk7CisgIGFzc2VydChva19hZGRyZXNzKG0sIHApKTsKK30KKworLyogQ2hlY2sgcHJvcGVydGllcyBvZiB0b3AgY2h1bmsgKi8KK3N0YXRpYyB2b2lkIGRvX2NoZWNrX3RvcF9jaHVuayhtc3RhdGUgbSwgbWNodW5rcHRyIHApIHsKKyAgbXNlZ21lbnRwdHIgc3AgPSBzZWdtZW50X2hvbGRpbmcobSwgKGNoYXIqKXApOworICBzaXplX3QgIHN6ID0gcC0+aGVhZCAmIH5JTlVTRV9CSVRTOyAvKiB0aGlyZC1sb3dlc3QgYml0IGNhbiBiZSBzZXQhICovCisgIGFzc2VydChzcCAhPSAwKTsKKyAgYXNzZXJ0KChpc19hbGlnbmVkKGNodW5rMm1lbShwKSkpIHx8IChwLT5oZWFkID09IEZFTkNFUE9TVF9IRUFEKSk7CisgIGFzc2VydChva19hZGRyZXNzKG0sIHApKTsKKyAgYXNzZXJ0KHN6ID09IG0tPnRvcHNpemUpOworICBhc3NlcnQoc3ogPiAwKTsKKyAgYXNzZXJ0KHN6ID09ICgoc3AtPmJhc2UgKyBzcC0+c2l6ZSkgLSAoY2hhciopcCkgLSBUT1BfRk9PVF9TSVpFKTsKKyAgYXNzZXJ0KHBpbnVzZShwKSk7CisgIGFzc2VydCghcGludXNlKGNodW5rX3BsdXNfb2Zmc2V0KHAsIHN6KSkpOworfQorCisvKiBDaGVjayBwcm9wZXJ0aWVzIG9mIChpbnVzZSkgbW1hcHBlZCBjaHVua3MgKi8KK3N0YXRpYyB2b2lkIGRvX2NoZWNrX21tYXBwZWRfY2h1bmsobXN0YXRlIG0sIG1jaHVua3B0ciBwKSB7CisgIHNpemVfdCAgc3ogPSBjaHVua3NpemUocCk7CisgIHNpemVfdCBsZW4gPSAoc3ogKyAocC0+cHJldl9mb290KSArIE1NQVBfRk9PVF9QQUQpOworICBhc3NlcnQoaXNfbW1hcHBlZChwKSk7CisgIGFzc2VydCh1c2VfbW1hcChtKSk7CisgIGFzc2VydCgoaXNfYWxpZ25lZChjaHVuazJtZW0ocCkpKSB8fCAocC0+aGVhZCA9PSBGRU5DRVBPU1RfSEVBRCkpOworICBhc3NlcnQob2tfYWRkcmVzcyhtLCBwKSk7CisgIGFzc2VydCghaXNfc21hbGwoc3opKTsKKyAgYXNzZXJ0KChsZW4gJiAobXBhcmFtcy5wYWdlX3NpemUtU0laRV9UX09ORSkpID09IDApOworICBhc3NlcnQoY2h1bmtfcGx1c19vZmZzZXQocCwgc3opLT5oZWFkID09IEZFTkNFUE9TVF9IRUFEKTsKKyAgYXNzZXJ0KGNodW5rX3BsdXNfb2Zmc2V0KHAsIHN6K1NJWkVfVF9TSVpFKS0+aGVhZCA9PSAwKTsKK30KKworLyogQ2hlY2sgcHJvcGVydGllcyBvZiBpbnVzZSBjaHVua3MgKi8KK3N0YXRpYyB2b2lkIGRvX2NoZWNrX2ludXNlX2NodW5rKG1zdGF0ZSBtLCBtY2h1bmtwdHIgcCkgeworICBkb19jaGVja19hbnlfY2h1bmsobSwgcCk7CisgIGFzc2VydChpc19pbnVzZShwKSk7CisgIGFzc2VydChuZXh0X3BpbnVzZShwKSk7CisgIC8qIElmIG5vdCBwaW51c2UgYW5kIG5vdCBtbWFwcGVkLCBwcmV2aW91cyBjaHVuayBoYXMgT0sgb2Zmc2V0ICovCisgIGFzc2VydChpc19tbWFwcGVkKHApIHx8IHBpbnVzZShwKSB8fCBuZXh0X2NodW5rKHByZXZfY2h1bmsocCkpID09IHApOworICBpZiAoaXNfbW1hcHBlZChwKSkKKyAgICBkb19jaGVja19tbWFwcGVkX2NodW5rKG0sIHApOworfQorCisvKiBDaGVjayBwcm9wZXJ0aWVzIG9mIGZyZWUgY2h1bmtzICovCitzdGF0aWMgdm9pZCBkb19jaGVja19mcmVlX2NodW5rKG1zdGF0ZSBtLCBtY2h1bmtwdHIgcCkgeworICBzaXplX3Qgc3ogPSBjaHVua3NpemUocCk7CisgIG1jaHVua3B0ciBuZXh0ID0gY2h1bmtfcGx1c19vZmZzZXQocCwgc3opOworICBkb19jaGVja19hbnlfY2h1bmsobSwgcCk7CisgIGFzc2VydCghaXNfaW51c2UocCkpOworICBhc3NlcnQoIW5leHRfcGludXNlKHApKTsKKyAgYXNzZXJ0ICghaXNfbW1hcHBlZChwKSk7CisgIGlmIChwICE9IG0tPmR2ICYmIHAgIT0gbS0+dG9wKSB7CisgICAgaWYgKHN6ID49IE1JTl9DSFVOS19TSVpFKSB7CisgICAgICBhc3NlcnQoKHN6ICYgQ0hVTktfQUxJR05fTUFTSykgPT0gMCk7CisgICAgICBhc3NlcnQoaXNfYWxpZ25lZChjaHVuazJtZW0ocCkpKTsKKyAgICAgIGFzc2VydChuZXh0LT5wcmV2X2Zvb3QgPT0gc3opOworICAgICAgYXNzZXJ0KHBpbnVzZShwKSk7CisgICAgICBhc3NlcnQgKG5leHQgPT0gbS0+dG9wIHx8IGlzX2ludXNlKG5leHQpKTsKKyAgICAgIGFzc2VydChwLT5mZC0+YmsgPT0gcCk7CisgICAgICBhc3NlcnQocC0+YmstPmZkID09IHApOworICAgIH0KKyAgICBlbHNlICAvKiBtYXJrZXJzIGFyZSBhbHdheXMgb2Ygc2l6ZSBTSVpFX1RfU0laRSAqLworICAgICAgYXNzZXJ0KHN6ID09IFNJWkVfVF9TSVpFKTsKKyAgfQorfQorCisvKiBDaGVjayBwcm9wZXJ0aWVzIG9mIG1hbGxvY2VkIGNodW5rcyBhdCB0aGUgcG9pbnQgdGhleSBhcmUgbWFsbG9jZWQgKi8KK3N0YXRpYyB2b2lkIGRvX2NoZWNrX21hbGxvY2VkX2NodW5rKG1zdGF0ZSBtLCB2b2lkKiBtZW0sIHNpemVfdCBzKSB7CisgIGlmIChtZW0gIT0gMCkgeworICAgIG1jaHVua3B0ciBwID0gbWVtMmNodW5rKG1lbSk7CisgICAgc2l6ZV90IHN6ID0gcC0+aGVhZCAmIH5JTlVTRV9CSVRTOworICAgIGRvX2NoZWNrX2ludXNlX2NodW5rKG0sIHApOworICAgIGFzc2VydCgoc3ogJiBDSFVOS19BTElHTl9NQVNLKSA9PSAwKTsKKyAgICBhc3NlcnQoc3ogPj0gTUlOX0NIVU5LX1NJWkUpOworICAgIGFzc2VydChzeiA+PSBzKTsKKyAgICAvKiB1bmxlc3MgbW1hcHBlZCwgc2l6ZSBpcyBsZXNzIHRoYW4gTUlOX0NIVU5LX1NJWkUgbW9yZSB0aGFuIHJlcXVlc3QgKi8KKyAgICBhc3NlcnQoaXNfbW1hcHBlZChwKSB8fCBzeiA8IChzICsgTUlOX0NIVU5LX1NJWkUpKTsKKyAgfQorfQorCisvKiBDaGVjayBhIHRyZWUgYW5kIGl0cyBzdWJ0cmVlcy4gICovCitzdGF0aWMgdm9pZCBkb19jaGVja190cmVlKG1zdGF0ZSBtLCB0Y2h1bmtwdHIgdCkgeworICB0Y2h1bmtwdHIgaGVhZCA9IDA7CisgIHRjaHVua3B0ciB1ID0gdDsKKyAgYmluZGV4X3QgdGluZGV4ID0gdC0+aW5kZXg7CisgIHNpemVfdCB0c2l6ZSA9IGNodW5rc2l6ZSh0KTsKKyAgYmluZGV4X3QgaWR4OworICBjb21wdXRlX3RyZWVfaW5kZXgodHNpemUsIGlkeCk7CisgIGFzc2VydCh0aW5kZXggPT0gaWR4KTsKKyAgYXNzZXJ0KHRzaXplID49IE1JTl9MQVJHRV9TSVpFKTsKKyAgYXNzZXJ0KHRzaXplID49IG1pbnNpemVfZm9yX3RyZWVfaW5kZXgoaWR4KSk7CisgIGFzc2VydCgoaWR4ID09IE5UUkVFQklOUy0xKSB8fCAodHNpemUgPCBtaW5zaXplX2Zvcl90cmVlX2luZGV4KChpZHgrMSkpKSk7CisKKyAgZG8geyAvKiB0cmF2ZXJzZSB0aHJvdWdoIGNoYWluIG9mIHNhbWUtc2l6ZWQgbm9kZXMgKi8KKyAgICBkb19jaGVja19hbnlfY2h1bmsobSwgKChtY2h1bmtwdHIpdSkpOworICAgIGFzc2VydCh1LT5pbmRleCA9PSB0aW5kZXgpOworICAgIGFzc2VydChjaHVua3NpemUodSkgPT0gdHNpemUpOworICAgIGFzc2VydCghaXNfaW51c2UodSkpOworICAgIGFzc2VydCghbmV4dF9waW51c2UodSkpOworICAgIGFzc2VydCh1LT5mZC0+YmsgPT0gdSk7CisgICAgYXNzZXJ0KHUtPmJrLT5mZCA9PSB1KTsKKyAgICBpZiAodS0+cGFyZW50ID09IDApIHsKKyAgICAgIGFzc2VydCh1LT5jaGlsZFswXSA9PSAwKTsKKyAgICAgIGFzc2VydCh1LT5jaGlsZFsxXSA9PSAwKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICBhc3NlcnQoaGVhZCA9PSAwKTsgLyogb25seSBvbmUgbm9kZSBvbiBjaGFpbiBoYXMgcGFyZW50ICovCisgICAgICBoZWFkID0gdTsKKyAgICAgIGFzc2VydCh1LT5wYXJlbnQgIT0gdSk7CisgICAgICBhc3NlcnQgKHUtPnBhcmVudC0+Y2hpbGRbMF0gPT0gdSB8fAorICAgICAgICAgICAgICB1LT5wYXJlbnQtPmNoaWxkWzFdID09IHUgfHwKKyAgICAgICAgICAgICAgKigodGJpbnB0ciopKHUtPnBhcmVudCkpID09IHUpOworICAgICAgaWYgKHUtPmNoaWxkWzBdICE9IDApIHsKKyAgICAgICAgYXNzZXJ0KHUtPmNoaWxkWzBdLT5wYXJlbnQgPT0gdSk7CisgICAgICAgIGFzc2VydCh1LT5jaGlsZFswXSAhPSB1KTsKKyAgICAgICAgZG9fY2hlY2tfdHJlZShtLCB1LT5jaGlsZFswXSk7CisgICAgICB9CisgICAgICBpZiAodS0+Y2hpbGRbMV0gIT0gMCkgeworICAgICAgICBhc3NlcnQodS0+Y2hpbGRbMV0tPnBhcmVudCA9PSB1KTsKKyAgICAgICAgYXNzZXJ0KHUtPmNoaWxkWzFdICE9IHUpOworICAgICAgICBkb19jaGVja190cmVlKG0sIHUtPmNoaWxkWzFdKTsKKyAgICAgIH0KKyAgICAgIGlmICh1LT5jaGlsZFswXSAhPSAwICYmIHUtPmNoaWxkWzFdICE9IDApIHsKKyAgICAgICAgYXNzZXJ0KGNodW5rc2l6ZSh1LT5jaGlsZFswXSkgPCBjaHVua3NpemUodS0+Y2hpbGRbMV0pKTsKKyAgICAgIH0KKyAgICB9CisgICAgdSA9IHUtPmZkOworICB9IHdoaWxlICh1ICE9IHQpOworICBhc3NlcnQoaGVhZCAhPSAwKTsKK30KKworLyogIENoZWNrIGFsbCB0aGUgY2h1bmtzIGluIGEgdHJlZWJpbi4gICovCitzdGF0aWMgdm9pZCBkb19jaGVja190cmVlYmluKG1zdGF0ZSBtLCBiaW5kZXhfdCBpKSB7CisgIHRiaW5wdHIqIHRiID0gdHJlZWJpbl9hdChtLCBpKTsKKyAgdGNodW5rcHRyIHQgPSAqdGI7CisgIGludCBlbXB0eSA9IChtLT50cmVlbWFwICYgKDFVIDw8IGkpKSA9PSAwOworICBpZiAodCA9PSAwKQorICAgIGFzc2VydChlbXB0eSk7CisgIGlmICghZW1wdHkpCisgICAgZG9fY2hlY2tfdHJlZShtLCB0KTsKK30KKworLyogIENoZWNrIGFsbCB0aGUgY2h1bmtzIGluIGEgc21hbGxiaW4uICAqLworc3RhdGljIHZvaWQgZG9fY2hlY2tfc21hbGxiaW4obXN0YXRlIG0sIGJpbmRleF90IGkpIHsKKyAgc2JpbnB0ciBiID0gc21hbGxiaW5fYXQobSwgaSk7CisgIG1jaHVua3B0ciBwID0gYi0+Yms7CisgIHVuc2lnbmVkIGludCBlbXB0eSA9IChtLT5zbWFsbG1hcCAmICgxVSA8PCBpKSkgPT0gMDsKKyAgaWYgKHAgPT0gYikKKyAgICBhc3NlcnQoZW1wdHkpOworICBpZiAoIWVtcHR5KSB7CisgICAgZm9yICg7IHAgIT0gYjsgcCA9IHAtPmJrKSB7CisgICAgICBzaXplX3Qgc2l6ZSA9IGNodW5rc2l6ZShwKTsKKyAgICAgIG1jaHVua3B0ciBxOworICAgICAgLyogZWFjaCBjaHVuayBjbGFpbXMgdG8gYmUgZnJlZSAqLworICAgICAgZG9fY2hlY2tfZnJlZV9jaHVuayhtLCBwKTsKKyAgICAgIC8qIGNodW5rIGJlbG9uZ3MgaW4gYmluICovCisgICAgICBhc3NlcnQoc21hbGxfaW5kZXgoc2l6ZSkgPT0gaSk7CisgICAgICBhc3NlcnQocC0+YmsgPT0gYiB8fCBjaHVua3NpemUocC0+YmspID09IGNodW5rc2l6ZShwKSk7CisgICAgICAvKiBjaHVuayBpcyBmb2xsb3dlZCBieSBhbiBpbnVzZSBjaHVuayAqLworICAgICAgcSA9IG5leHRfY2h1bmsocCk7CisgICAgICBpZiAocS0+aGVhZCAhPSBGRU5DRVBPU1RfSEVBRCkKKyAgICAgICAgZG9fY2hlY2tfaW51c2VfY2h1bmsobSwgcSk7CisgICAgfQorICB9Cit9CisKKy8qIEZpbmQgeCBpbiBhIGJpbi4gVXNlZCBpbiBvdGhlciBjaGVjayBmdW5jdGlvbnMuICovCitzdGF0aWMgaW50IGJpbl9maW5kKG1zdGF0ZSBtLCBtY2h1bmtwdHIgeCkgeworICBzaXplX3Qgc2l6ZSA9IGNodW5rc2l6ZSh4KTsKKyAgaWYgKGlzX3NtYWxsKHNpemUpKSB7CisgICAgYmluZGV4X3Qgc2lkeCA9IHNtYWxsX2luZGV4KHNpemUpOworICAgIHNiaW5wdHIgYiA9IHNtYWxsYmluX2F0KG0sIHNpZHgpOworICAgIGlmIChzbWFsbG1hcF9pc19tYXJrZWQobSwgc2lkeCkpIHsKKyAgICAgIG1jaHVua3B0ciBwID0gYjsKKyAgICAgIGRvIHsKKyAgICAgICAgaWYgKHAgPT0geCkKKyAgICAgICAgICByZXR1cm4gMTsKKyAgICAgIH0gd2hpbGUgKChwID0gcC0+ZmQpICE9IGIpOworICAgIH0KKyAgfQorICBlbHNlIHsKKyAgICBiaW5kZXhfdCB0aWR4OworICAgIGNvbXB1dGVfdHJlZV9pbmRleChzaXplLCB0aWR4KTsKKyAgICBpZiAodHJlZW1hcF9pc19tYXJrZWQobSwgdGlkeCkpIHsKKyAgICAgIHRjaHVua3B0ciB0ID0gKnRyZWViaW5fYXQobSwgdGlkeCk7CisgICAgICBzaXplX3Qgc2l6ZWJpdHMgPSBzaXplIDw8IGxlZnRzaGlmdF9mb3JfdHJlZV9pbmRleCh0aWR4KTsKKyAgICAgIHdoaWxlICh0ICE9IDAgJiYgY2h1bmtzaXplKHQpICE9IHNpemUpIHsKKyAgICAgICAgdCA9IHQtPmNoaWxkWyhzaXplYml0cyA+PiAoU0laRV9UX0JJVFNJWkUtU0laRV9UX09ORSkpICYgMV07CisgICAgICAgIHNpemViaXRzIDw8PSAxOworICAgICAgfQorICAgICAgaWYgKHQgIT0gMCkgeworICAgICAgICB0Y2h1bmtwdHIgdSA9IHQ7CisgICAgICAgIGRvIHsKKyAgICAgICAgICBpZiAodSA9PSAodGNodW5rcHRyKXgpCisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgfSB3aGlsZSAoKHUgPSB1LT5mZCkgIT0gdCk7CisgICAgICB9CisgICAgfQorICB9CisgIHJldHVybiAwOworfQorCisvKiBUcmF2ZXJzZSBlYWNoIGNodW5rIGFuZCBjaGVjayBpdDsgcmV0dXJuIHRvdGFsICovCitzdGF0aWMgc2l6ZV90IHRyYXZlcnNlX2FuZF9jaGVjayhtc3RhdGUgbSkgeworICBzaXplX3Qgc3VtID0gMDsKKyAgaWYgKGlzX2luaXRpYWxpemVkKG0pKSB7CisgICAgbXNlZ21lbnRwdHIgcyA9ICZtLT5zZWc7CisgICAgc3VtICs9IG0tPnRvcHNpemUgKyBUT1BfRk9PVF9TSVpFOworICAgIHdoaWxlIChzICE9IDApIHsKKyAgICAgIG1jaHVua3B0ciBxID0gYWxpZ25fYXNfY2h1bmsocy0+YmFzZSk7CisgICAgICBtY2h1bmtwdHIgbGFzdHEgPSAwOworICAgICAgYXNzZXJ0KHBpbnVzZShxKSk7CisgICAgICB3aGlsZSAoc2VnbWVudF9ob2xkcyhzLCBxKSAmJgorICAgICAgICAgICAgIHEgIT0gbS0+dG9wICYmIHEtPmhlYWQgIT0gRkVOQ0VQT1NUX0hFQUQpIHsKKyAgICAgICAgc3VtICs9IGNodW5rc2l6ZShxKTsKKyAgICAgICAgaWYgKGlzX2ludXNlKHEpKSB7CisgICAgICAgICAgYXNzZXJ0KCFiaW5fZmluZChtLCBxKSk7CisgICAgICAgICAgZG9fY2hlY2tfaW51c2VfY2h1bmsobSwgcSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgYXNzZXJ0KHEgPT0gbS0+ZHYgfHwgYmluX2ZpbmQobSwgcSkpOworICAgICAgICAgIGFzc2VydChsYXN0cSA9PSAwIHx8IGlzX2ludXNlKGxhc3RxKSk7IC8qIE5vdCAyIGNvbnNlY3V0aXZlIGZyZWUgKi8KKyAgICAgICAgICBkb19jaGVja19mcmVlX2NodW5rKG0sIHEpOworICAgICAgICB9CisgICAgICAgIGxhc3RxID0gcTsKKyAgICAgICAgcSA9IG5leHRfY2h1bmsocSk7CisgICAgICB9CisgICAgICBzID0gcy0+bmV4dDsKKyAgICB9CisgIH0KKyAgcmV0dXJuIHN1bTsKK30KKworCisvKiBDaGVjayBhbGwgcHJvcGVydGllcyBvZiBtYWxsb2Nfc3RhdGUuICovCitzdGF0aWMgdm9pZCBkb19jaGVja19tYWxsb2Nfc3RhdGUobXN0YXRlIG0pIHsKKyAgYmluZGV4X3QgaTsKKyAgc2l6ZV90IHRvdGFsOworICAvKiBjaGVjayBiaW5zICovCisgIGZvciAoaSA9IDA7IGkgPCBOU01BTExCSU5TOyArK2kpCisgICAgZG9fY2hlY2tfc21hbGxiaW4obSwgaSk7CisgIGZvciAoaSA9IDA7IGkgPCBOVFJFRUJJTlM7ICsraSkKKyAgICBkb19jaGVja190cmVlYmluKG0sIGkpOworCisgIGlmIChtLT5kdnNpemUgIT0gMCkgeyAvKiBjaGVjayBkdiBjaHVuayAqLworICAgIGRvX2NoZWNrX2FueV9jaHVuayhtLCBtLT5kdik7CisgICAgYXNzZXJ0KG0tPmR2c2l6ZSA9PSBjaHVua3NpemUobS0+ZHYpKTsKKyAgICBhc3NlcnQobS0+ZHZzaXplID49IE1JTl9DSFVOS19TSVpFKTsKKyAgICBhc3NlcnQoYmluX2ZpbmQobSwgbS0+ZHYpID09IDApOworICB9CisKKyAgaWYgKG0tPnRvcCAhPSAwKSB7ICAgLyogY2hlY2sgdG9wIGNodW5rICovCisgICAgZG9fY2hlY2tfdG9wX2NodW5rKG0sIG0tPnRvcCk7CisgICAgLyphc3NlcnQobS0+dG9wc2l6ZSA9PSBjaHVua3NpemUobS0+dG9wKSk7IHJlZHVuZGFudCAqLworICAgIGFzc2VydChtLT50b3BzaXplID4gMCk7CisgICAgYXNzZXJ0KGJpbl9maW5kKG0sIG0tPnRvcCkgPT0gMCk7CisgIH0KKworICB0b3RhbCA9IHRyYXZlcnNlX2FuZF9jaGVjayhtKTsKKyAgYXNzZXJ0KHRvdGFsIDw9IG0tPmZvb3RwcmludCk7CisgIGFzc2VydChtLT5mb290cHJpbnQgPD0gbS0+bWF4X2Zvb3RwcmludCk7Cit9CisjZW5kaWYgLyogREVCVUcgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gc3RhdGlzdGljcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2lmICFOT19NQUxMSU5GTworc3RhdGljIHN0cnVjdCBtYWxsaW5mbyBpbnRlcm5hbF9tYWxsaW5mbyhtc3RhdGUgbSkgeworICBzdHJ1Y3QgbWFsbGluZm8gbm0gPSB7IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAgfTsKKyAgZW5zdXJlX2luaXRpYWxpemF0aW9uKCk7CisgIGlmICghUFJFQUNUSU9OKG0pKSB7CisgICAgY2hlY2tfbWFsbG9jX3N0YXRlKG0pOworICAgIGlmIChpc19pbml0aWFsaXplZChtKSkgeworICAgICAgc2l6ZV90IG5mcmVlID0gU0laRV9UX09ORTsgLyogdG9wIGFsd2F5cyBmcmVlICovCisgICAgICBzaXplX3QgbWZyZWUgPSBtLT50b3BzaXplICsgVE9QX0ZPT1RfU0laRTsKKyAgICAgIHNpemVfdCBzdW0gPSBtZnJlZTsKKyAgICAgIG1zZWdtZW50cHRyIHMgPSAmbS0+c2VnOworICAgICAgd2hpbGUgKHMgIT0gMCkgeworICAgICAgICBtY2h1bmtwdHIgcSA9IGFsaWduX2FzX2NodW5rKHMtPmJhc2UpOworICAgICAgICB3aGlsZSAoc2VnbWVudF9ob2xkcyhzLCBxKSAmJgorICAgICAgICAgICAgICAgcSAhPSBtLT50b3AgJiYgcS0+aGVhZCAhPSBGRU5DRVBPU1RfSEVBRCkgeworICAgICAgICAgIHNpemVfdCBzeiA9IGNodW5rc2l6ZShxKTsKKyAgICAgICAgICBzdW0gKz0gc3o7CisgICAgICAgICAgaWYgKCFpc19pbnVzZShxKSkgeworICAgICAgICAgICAgbWZyZWUgKz0gc3o7CisgICAgICAgICAgICArK25mcmVlOworICAgICAgICAgIH0KKyAgICAgICAgICBxID0gbmV4dF9jaHVuayhxKTsKKyAgICAgICAgfQorICAgICAgICBzID0gcy0+bmV4dDsKKyAgICAgIH0KKworICAgICAgbm0uYXJlbmEgICAgPSBzdW07CisgICAgICBubS5vcmRibGtzICA9IG5mcmVlOworICAgICAgbm0uaGJsa2hkICAgPSBtLT5mb290cHJpbnQgLSBzdW07CisgICAgICBubS51c21ibGtzICA9IG0tPm1heF9mb290cHJpbnQ7CisgICAgICBubS51b3JkYmxrcyA9IG0tPmZvb3RwcmludCAtIG1mcmVlOworICAgICAgbm0uZm9yZGJsa3MgPSBtZnJlZTsKKyAgICAgIG5tLmtlZXBjb3N0ID0gbS0+dG9wc2l6ZTsKKyAgICB9CisKKyAgICBQT1NUQUNUSU9OKG0pOworICB9CisgIHJldHVybiBubTsKK30KKyNlbmRpZiAvKiAhTk9fTUFMTElORk8gKi8KKworI2lmICFOT19NQUxMT0NfU1RBVFMKK3N0YXRpYyB2b2lkIGludGVybmFsX21hbGxvY19zdGF0cyhtc3RhdGUgbSkgeworICBlbnN1cmVfaW5pdGlhbGl6YXRpb24oKTsKKyAgaWYgKCFQUkVBQ1RJT04obSkpIHsKKyAgICBzaXplX3QgbWF4ZnAgPSAwOworICAgIHNpemVfdCBmcCA9IDA7CisgICAgc2l6ZV90IHVzZWQgPSAwOworICAgIGNoZWNrX21hbGxvY19zdGF0ZShtKTsKKyAgICBpZiAoaXNfaW5pdGlhbGl6ZWQobSkpIHsKKyAgICAgIG1zZWdtZW50cHRyIHMgPSAmbS0+c2VnOworICAgICAgbWF4ZnAgPSBtLT5tYXhfZm9vdHByaW50OworICAgICAgZnAgPSBtLT5mb290cHJpbnQ7CisgICAgICB1c2VkID0gZnAgLSAobS0+dG9wc2l6ZSArIFRPUF9GT09UX1NJWkUpOworCisgICAgICB3aGlsZSAocyAhPSAwKSB7CisgICAgICAgIG1jaHVua3B0ciBxID0gYWxpZ25fYXNfY2h1bmsocy0+YmFzZSk7CisgICAgICAgIHdoaWxlIChzZWdtZW50X2hvbGRzKHMsIHEpICYmCisgICAgICAgICAgICAgICBxICE9IG0tPnRvcCAmJiBxLT5oZWFkICE9IEZFTkNFUE9TVF9IRUFEKSB7CisgICAgICAgICAgaWYgKCFpc19pbnVzZShxKSkKKyAgICAgICAgICAgIHVzZWQgLT0gY2h1bmtzaXplKHEpOworICAgICAgICAgIHEgPSBuZXh0X2NodW5rKHEpOworICAgICAgICB9CisgICAgICAgIHMgPSBzLT5uZXh0OworICAgICAgfQorICAgIH0KKyAgICBQT1NUQUNUSU9OKG0pOyAvKiBkcm9wIGxvY2sgKi8KKyAgICBmcHJpbnRmKHN0ZGVyciwgIm1heCBzeXN0ZW0gYnl0ZXMgPSAlMTBsdVxuIiwgKHVuc2lnbmVkIGxvbmcpKG1heGZwKSk7CisgICAgZnByaW50ZihzdGRlcnIsICJzeXN0ZW0gYnl0ZXMgICAgID0gJTEwbHVcbiIsICh1bnNpZ25lZCBsb25nKShmcCkpOworICAgIGZwcmludGYoc3RkZXJyLCAiaW4gdXNlIGJ5dGVzICAgICA9ICUxMGx1XG4iLCAodW5zaWduZWQgbG9uZykodXNlZCkpOworICB9Cit9CisjZW5kaWYgLyogTk9fTUFMTE9DX1NUQVRTICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIE9wZXJhdGlvbnMgb24gc21hbGxiaW5zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qCisgIFZhcmlvdXMgZm9ybXMgb2YgbGlua2luZyBhbmQgdW5saW5raW5nIGFyZSBkZWZpbmVkIGFzIG1hY3Jvcy4gIEV2ZW4KKyAgdGhlIG9uZXMgZm9yIHRyZWVzLCB3aGljaCBhcmUgdmVyeSBsb25nIGJ1dCBoYXZlIHZlcnkgc2hvcnQgdHlwaWNhbAorICBwYXRocy4gIFRoaXMgaXMgdWdseSBidXQgcmVkdWNlcyByZWxpYW5jZSBvbiBpbmxpbmluZyBzdXBwb3J0IG9mCisgIGNvbXBpbGVycy4KKyovCisKKy8qIExpbmsgYSBmcmVlIGNodW5rIGludG8gYSBzbWFsbGJpbiAgKi8KKyNkZWZpbmUgaW5zZXJ0X3NtYWxsX2NodW5rKE0sIFAsIFMpIHtcCisgIGJpbmRleF90IEkgID0gc21hbGxfaW5kZXgoUyk7XAorICBtY2h1bmtwdHIgQiA9IHNtYWxsYmluX2F0KE0sIEkpO1wKKyAgbWNodW5rcHRyIEYgPSBCO1wKKyAgYXNzZXJ0KFMgPj0gTUlOX0NIVU5LX1NJWkUpO1wKKyAgaWYgKCFzbWFsbG1hcF9pc19tYXJrZWQoTSwgSSkpXAorICAgIG1hcmtfc21hbGxtYXAoTSwgSSk7XAorICBlbHNlIGlmIChSVENIRUNLKG9rX2FkZHJlc3MoTSwgQi0+ZmQpKSlcCisgICAgRiA9IEItPmZkO1wKKyAgZWxzZSB7XAorICAgIENPUlJVUFRJT05fRVJST1JfQUNUSU9OKE0pO1wKKyAgfVwKKyAgQi0+ZmQgPSBQO1wKKyAgRi0+YmsgPSBQO1wKKyAgUC0+ZmQgPSBGO1wKKyAgUC0+YmsgPSBCO1wKK30KKworLyogVW5saW5rIGEgY2h1bmsgZnJvbSBhIHNtYWxsYmluICAqLworI2RlZmluZSB1bmxpbmtfc21hbGxfY2h1bmsoTSwgUCwgUykge1wKKyAgbWNodW5rcHRyIEYgPSBQLT5mZDtcCisgIG1jaHVua3B0ciBCID0gUC0+Yms7XAorICBiaW5kZXhfdCBJID0gc21hbGxfaW5kZXgoUyk7XAorICBhc3NlcnQoUCAhPSBCKTtcCisgIGFzc2VydChQICE9IEYpO1wKKyAgYXNzZXJ0KGNodW5rc2l6ZShQKSA9PSBzbWFsbF9pbmRleDJzaXplKEkpKTtcCisgIGlmIChSVENIRUNLKEYgPT0gc21hbGxiaW5fYXQoTSxJKSB8fCAob2tfYWRkcmVzcyhNLCBGKSAmJiBGLT5iayA9PSBQKSkpIHsgXAorICAgIGlmIChCID09IEYpIHtcCisgICAgICBjbGVhcl9zbWFsbG1hcChNLCBJKTtcCisgICAgfVwKKyAgICBlbHNlIGlmIChSVENIRUNLKEIgPT0gc21hbGxiaW5fYXQoTSxJKSB8fFwKKyAgICAgICAgICAgICAgICAgICAgIChva19hZGRyZXNzKE0sIEIpICYmIEItPmZkID09IFApKSkge1wKKyAgICAgIEYtPmJrID0gQjtcCisgICAgICBCLT5mZCA9IEY7XAorICAgIH1cCisgICAgZWxzZSB7XAorICAgICAgQ09SUlVQVElPTl9FUlJPUl9BQ1RJT04oTSk7XAorICAgIH1cCisgIH1cCisgIGVsc2Uge1wKKyAgICBDT1JSVVBUSU9OX0VSUk9SX0FDVElPTihNKTtcCisgIH1cCit9CisKKy8qIFVubGluayB0aGUgZmlyc3QgY2h1bmsgZnJvbSBhIHNtYWxsYmluICovCisjZGVmaW5lIHVubGlua19maXJzdF9zbWFsbF9jaHVuayhNLCBCLCBQLCBJKSB7XAorICBtY2h1bmtwdHIgRiA9IFAtPmZkO1wKKyAgYXNzZXJ0KFAgIT0gQik7XAorICBhc3NlcnQoUCAhPSBGKTtcCisgIGFzc2VydChjaHVua3NpemUoUCkgPT0gc21hbGxfaW5kZXgyc2l6ZShJKSk7XAorICBpZiAoQiA9PSBGKSB7XAorICAgIGNsZWFyX3NtYWxsbWFwKE0sIEkpO1wKKyAgfVwKKyAgZWxzZSBpZiAoUlRDSEVDSyhva19hZGRyZXNzKE0sIEYpICYmIEYtPmJrID09IFApKSB7XAorICAgIEYtPmJrID0gQjtcCisgICAgQi0+ZmQgPSBGO1wKKyAgfVwKKyAgZWxzZSB7XAorICAgIENPUlJVUFRJT05fRVJST1JfQUNUSU9OKE0pO1wKKyAgfVwKK30KKworLyogUmVwbGFjZSBkdiBub2RlLCBiaW5uaW5nIHRoZSBvbGQgb25lICovCisvKiBVc2VkIG9ubHkgd2hlbiBkdnNpemUga25vd24gdG8gYmUgc21hbGwgKi8KKyNkZWZpbmUgcmVwbGFjZV9kdihNLCBQLCBTKSB7XAorICBzaXplX3QgRFZTID0gTS0+ZHZzaXplO1wKKyAgYXNzZXJ0KGlzX3NtYWxsKERWUykpO1wKKyAgaWYgKERWUyAhPSAwKSB7XAorICAgIG1jaHVua3B0ciBEViA9IE0tPmR2O1wKKyAgICBpbnNlcnRfc21hbGxfY2h1bmsoTSwgRFYsIERWUyk7XAorICB9XAorICBNLT5kdnNpemUgPSBTO1wKKyAgTS0+ZHYgPSBQO1wKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBPcGVyYXRpb25zIG9uIHRyZWVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogSW5zZXJ0IGNodW5rIGludG8gdHJlZSAqLworI2RlZmluZSBpbnNlcnRfbGFyZ2VfY2h1bmsoTSwgWCwgUykge1wKKyAgdGJpbnB0ciogSDtcCisgIGJpbmRleF90IEk7XAorICBjb21wdXRlX3RyZWVfaW5kZXgoUywgSSk7XAorICBIID0gdHJlZWJpbl9hdChNLCBJKTtcCisgIFgtPmluZGV4ID0gSTtcCisgIFgtPmNoaWxkWzBdID0gWC0+Y2hpbGRbMV0gPSAwO1wKKyAgaWYgKCF0cmVlbWFwX2lzX21hcmtlZChNLCBJKSkge1wKKyAgICBtYXJrX3RyZWVtYXAoTSwgSSk7XAorICAgICpIID0gWDtcCisgICAgWC0+cGFyZW50ID0gKHRjaHVua3B0cilIO1wKKyAgICBYLT5mZCA9IFgtPmJrID0gWDtcCisgIH1cCisgIGVsc2Uge1wKKyAgICB0Y2h1bmtwdHIgVCA9ICpIO1wKKyAgICBzaXplX3QgSyA9IFMgPDwgbGVmdHNoaWZ0X2Zvcl90cmVlX2luZGV4KEkpO1wKKyAgICBmb3IgKDs7KSB7XAorICAgICAgaWYgKGNodW5rc2l6ZShUKSAhPSBTKSB7XAorICAgICAgICB0Y2h1bmtwdHIqIEMgPSAmKFQtPmNoaWxkWyhLID4+IChTSVpFX1RfQklUU0laRS1TSVpFX1RfT05FKSkgJiAxXSk7XAorICAgICAgICBLIDw8PSAxO1wKKyAgICAgICAgaWYgKCpDICE9IDApXAorICAgICAgICAgIFQgPSAqQztcCisgICAgICAgIGVsc2UgaWYgKFJUQ0hFQ0sob2tfYWRkcmVzcyhNLCBDKSkpIHtcCisgICAgICAgICAgKkMgPSBYO1wKKyAgICAgICAgICBYLT5wYXJlbnQgPSBUO1wKKyAgICAgICAgICBYLT5mZCA9IFgtPmJrID0gWDtcCisgICAgICAgICAgYnJlYWs7XAorICAgICAgICB9XAorICAgICAgICBlbHNlIHtcCisgICAgICAgICAgQ09SUlVQVElPTl9FUlJPUl9BQ1RJT04oTSk7XAorICAgICAgICAgIGJyZWFrO1wKKyAgICAgICAgfVwKKyAgICAgIH1cCisgICAgICBlbHNlIHtcCisgICAgICAgIHRjaHVua3B0ciBGID0gVC0+ZmQ7XAorICAgICAgICBpZiAoUlRDSEVDSyhva19hZGRyZXNzKE0sIFQpICYmIG9rX2FkZHJlc3MoTSwgRikpKSB7XAorICAgICAgICAgIFQtPmZkID0gRi0+YmsgPSBYO1wKKyAgICAgICAgICBYLT5mZCA9IEY7XAorICAgICAgICAgIFgtPmJrID0gVDtcCisgICAgICAgICAgWC0+cGFyZW50ID0gMDtcCisgICAgICAgICAgYnJlYWs7XAorICAgICAgICB9XAorICAgICAgICBlbHNlIHtcCisgICAgICAgICAgQ09SUlVQVElPTl9FUlJPUl9BQ1RJT04oTSk7XAorICAgICAgICAgIGJyZWFrO1wKKyAgICAgICAgfVwKKyAgICAgIH1cCisgICAgfVwKKyAgfVwKK30KKworLyoKKyAgVW5saW5rIHN0ZXBzOgorCisgIDEuIElmIHggaXMgYSBjaGFpbmVkIG5vZGUsIHVubGluayBpdCBmcm9tIGl0cyBzYW1lLXNpemVkIGZkL2JrIGxpbmtzCisgICAgIGFuZCBjaG9vc2UgaXRzIGJrIG5vZGUgYXMgaXRzIHJlcGxhY2VtZW50LgorICAyLiBJZiB4IHdhcyB0aGUgbGFzdCBub2RlIG9mIGl0cyBzaXplLCBidXQgbm90IGEgbGVhZiBub2RlLCBpdCBtdXN0CisgICAgIGJlIHJlcGxhY2VkIHdpdGggYSBsZWFmIG5vZGUgKG5vdCBtZXJlbHkgb25lIHdpdGggYW4gb3BlbiBsZWZ0IG9yCisgICAgIHJpZ2h0KSwgdG8gbWFrZSBzdXJlIHRoYXQgbGVmdHMgYW5kIHJpZ2h0cyBvZiBkZXNjZW5kZW50cworICAgICBjb3JyZXNwb25kIHByb3Blcmx5IHRvIGJpdCBtYXNrcy4gIFdlIHVzZSB0aGUgcmlnaHRtb3N0IGRlc2NlbmRlbnQKKyAgICAgb2YgeC4gIFdlIGNvdWxkIHVzZSBhbnkgb3RoZXIgbGVhZiwgYnV0IHRoaXMgaXMgZWFzeSB0byBsb2NhdGUgYW5kCisgICAgIHRlbmRzIHRvIGNvdW50ZXJhY3QgcmVtb3ZhbCBvZiBsZWZ0bW9zdHMgZWxzZXdoZXJlLCBhbmQgc28ga2VlcHMKKyAgICAgcGF0aHMgc2hvcnRlciB0aGFuIG1pbmltYWxseSBndWFyYW50ZWVkLiAgVGhpcyBkb2Vzbid0IGxvb3AgbXVjaAorICAgICBiZWNhdXNlIG9uIGF2ZXJhZ2UgYSBub2RlIGluIGEgdHJlZSBpcyBuZWFyIHRoZSBib3R0b20uCisgIDMuIElmIHggaXMgdGhlIGJhc2Ugb2YgYSBjaGFpbiAoaS5lLiwgaGFzIHBhcmVudCBsaW5rcykgcmVsaW5rCisgICAgIHgncyBwYXJlbnQgYW5kIGNoaWxkcmVuIHRvIHgncyByZXBsYWNlbWVudCAob3IgbnVsbCBpZiBub25lKS4KKyovCisKKyNkZWZpbmUgdW5saW5rX2xhcmdlX2NodW5rKE0sIFgpIHtcCisgIHRjaHVua3B0ciBYUCA9IFgtPnBhcmVudDtcCisgIHRjaHVua3B0ciBSO1wKKyAgaWYgKFgtPmJrICE9IFgpIHtcCisgICAgdGNodW5rcHRyIEYgPSBYLT5mZDtcCisgICAgUiA9IFgtPmJrO1wKKyAgICBpZiAoUlRDSEVDSyhva19hZGRyZXNzKE0sIEYpICYmIEYtPmJrID09IFggJiYgUi0+ZmQgPT0gWCkpIHtcCisgICAgICBGLT5iayA9IFI7XAorICAgICAgUi0+ZmQgPSBGO1wKKyAgICB9XAorICAgIGVsc2Uge1wKKyAgICAgIENPUlJVUFRJT05fRVJST1JfQUNUSU9OKE0pO1wKKyAgICB9XAorICB9XAorICBlbHNlIHtcCisgICAgdGNodW5rcHRyKiBSUDtcCisgICAgaWYgKCgoUiA9ICooUlAgPSAmKFgtPmNoaWxkWzFdKSkpICE9IDApIHx8XAorICAgICAgICAoKFIgPSAqKFJQID0gJihYLT5jaGlsZFswXSkpKSAhPSAwKSkge1wKKyAgICAgIHRjaHVua3B0ciogQ1A7XAorICAgICAgd2hpbGUgKCgqKENQID0gJihSLT5jaGlsZFsxXSkpICE9IDApIHx8XAorICAgICAgICAgICAgICgqKENQID0gJihSLT5jaGlsZFswXSkpICE9IDApKSB7XAorICAgICAgICBSID0gKihSUCA9IENQKTtcCisgICAgICB9XAorICAgICAgaWYgKFJUQ0hFQ0sob2tfYWRkcmVzcyhNLCBSUCkpKVwKKyAgICAgICAgKlJQID0gMDtcCisgICAgICBlbHNlIHtcCisgICAgICAgIENPUlJVUFRJT05fRVJST1JfQUNUSU9OKE0pO1wKKyAgICAgIH1cCisgICAgfVwKKyAgfVwKKyAgaWYgKFhQICE9IDApIHtcCisgICAgdGJpbnB0ciogSCA9IHRyZWViaW5fYXQoTSwgWC0+aW5kZXgpO1wKKyAgICBpZiAoWCA9PSAqSCkge1wKKyAgICAgIGlmICgoKkggPSBSKSA9PSAwKSBcCisgICAgICAgIGNsZWFyX3RyZWVtYXAoTSwgWC0+aW5kZXgpO1wKKyAgICB9XAorICAgIGVsc2UgaWYgKFJUQ0hFQ0sob2tfYWRkcmVzcyhNLCBYUCkpKSB7XAorICAgICAgaWYgKFhQLT5jaGlsZFswXSA9PSBYKSBcCisgICAgICAgIFhQLT5jaGlsZFswXSA9IFI7XAorICAgICAgZWxzZSBcCisgICAgICAgIFhQLT5jaGlsZFsxXSA9IFI7XAorICAgIH1cCisgICAgZWxzZVwKKyAgICAgIENPUlJVUFRJT05fRVJST1JfQUNUSU9OKE0pO1wKKyAgICBpZiAoUiAhPSAwKSB7XAorICAgICAgaWYgKFJUQ0hFQ0sob2tfYWRkcmVzcyhNLCBSKSkpIHtcCisgICAgICAgIHRjaHVua3B0ciBDMCwgQzE7XAorICAgICAgICBSLT5wYXJlbnQgPSBYUDtcCisgICAgICAgIGlmICgoQzAgPSBYLT5jaGlsZFswXSkgIT0gMCkge1wKKyAgICAgICAgICBpZiAoUlRDSEVDSyhva19hZGRyZXNzKE0sIEMwKSkpIHtcCisgICAgICAgICAgICBSLT5jaGlsZFswXSA9IEMwO1wKKyAgICAgICAgICAgIEMwLT5wYXJlbnQgPSBSO1wKKyAgICAgICAgICB9XAorICAgICAgICAgIGVsc2VcCisgICAgICAgICAgICBDT1JSVVBUSU9OX0VSUk9SX0FDVElPTihNKTtcCisgICAgICAgIH1cCisgICAgICAgIGlmICgoQzEgPSBYLT5jaGlsZFsxXSkgIT0gMCkge1wKKyAgICAgICAgICBpZiAoUlRDSEVDSyhva19hZGRyZXNzKE0sIEMxKSkpIHtcCisgICAgICAgICAgICBSLT5jaGlsZFsxXSA9IEMxO1wKKyAgICAgICAgICAgIEMxLT5wYXJlbnQgPSBSO1wKKyAgICAgICAgICB9XAorICAgICAgICAgIGVsc2VcCisgICAgICAgICAgICBDT1JSVVBUSU9OX0VSUk9SX0FDVElPTihNKTtcCisgICAgICAgIH1cCisgICAgICB9XAorICAgICAgZWxzZVwKKyAgICAgICAgQ09SUlVQVElPTl9FUlJPUl9BQ1RJT04oTSk7XAorICAgIH1cCisgIH1cCit9CisKKy8qIFJlbGF5cyB0byBsYXJnZSB2cyBzbWFsbCBiaW4gb3BlcmF0aW9ucyAqLworCisjZGVmaW5lIGluc2VydF9jaHVuayhNLCBQLCBTKVwKKyAgaWYgKGlzX3NtYWxsKFMpKSBpbnNlcnRfc21hbGxfY2h1bmsoTSwgUCwgUylcCisgIGVsc2UgeyB0Y2h1bmtwdHIgVFAgPSAodGNodW5rcHRyKShQKTsgaW5zZXJ0X2xhcmdlX2NodW5rKE0sIFRQLCBTKTsgfQorCisjZGVmaW5lIHVubGlua19jaHVuayhNLCBQLCBTKVwKKyAgaWYgKGlzX3NtYWxsKFMpKSB1bmxpbmtfc21hbGxfY2h1bmsoTSwgUCwgUylcCisgIGVsc2UgeyB0Y2h1bmtwdHIgVFAgPSAodGNodW5rcHRyKShQKTsgdW5saW5rX2xhcmdlX2NodW5rKE0sIFRQKTsgfQorCisKKy8qIFJlbGF5cyB0byBpbnRlcm5hbCBjYWxscyB0byBtYWxsb2MvZnJlZSBmcm9tIHJlYWxsb2MsIG1lbWFsaWduIGV0YyAqLworCisjaWYgT05MWV9NU1BBQ0VTCisjZGVmaW5lIGludGVybmFsX21hbGxvYyhtLCBiKSBtc3BhY2VfbWFsbG9jKG0sIGIpCisjZGVmaW5lIGludGVybmFsX2ZyZWUobSwgbWVtKSBtc3BhY2VfZnJlZShtLG1lbSk7CisjZWxzZSAvKiBPTkxZX01TUEFDRVMgKi8KKyNpZiBNU1BBQ0VTCisjZGVmaW5lIGludGVybmFsX21hbGxvYyhtLCBiKVwKKyAgKChtID09IGdtKT8gZGxtYWxsb2MoYikgOiBtc3BhY2VfbWFsbG9jKG0sIGIpKQorI2RlZmluZSBpbnRlcm5hbF9mcmVlKG0sIG1lbSlcCisgICBpZiAobSA9PSBnbSkgZGxmcmVlKG1lbSk7IGVsc2UgbXNwYWNlX2ZyZWUobSxtZW0pOworI2Vsc2UgLyogTVNQQUNFUyAqLworI2RlZmluZSBpbnRlcm5hbF9tYWxsb2MobSwgYikgZGxtYWxsb2MoYikKKyNkZWZpbmUgaW50ZXJuYWxfZnJlZShtLCBtZW0pIGRsZnJlZShtZW0pCisjZW5kaWYgLyogTVNQQUNFUyAqLworI2VuZGlmIC8qIE9OTFlfTVNQQUNFUyAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRGlyZWN0LW1tYXBwaW5nIGNodW5rcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKgorICBEaXJlY3RseSBtbWFwcGVkIGNodW5rcyBhcmUgc2V0IHVwIHdpdGggYW4gb2Zmc2V0IHRvIHRoZSBzdGFydCBvZgorICB0aGUgbW1hcHBlZCByZWdpb24gc3RvcmVkIGluIHRoZSBwcmV2X2Zvb3QgZmllbGQgb2YgdGhlIGNodW5rLiBUaGlzCisgIGFsbG93cyByZWNvbnN0cnVjdGlvbiBvZiB0aGUgcmVxdWlyZWQgYXJndW1lbnQgdG8gTVVOTUFQIHdoZW4gZnJlZWQsCisgIGFuZCBhbHNvIGFsbG93cyBhZGp1c3RtZW50IG9mIHRoZSByZXR1cm5lZCBjaHVuayB0byBtZWV0IGFsaWdubWVudAorICByZXF1aXJlbWVudHMgKGVzcGVjaWFsbHkgaW4gbWVtYWxpZ24pLgorKi8KKworLyogTWFsbG9jIHVzaW5nIG1tYXAgKi8KK3N0YXRpYyB2b2lkKiBtbWFwX2FsbG9jKG1zdGF0ZSBtLCBzaXplX3QgbmIpIHsKKyAgc2l6ZV90IG1tc2l6ZSA9IG1tYXBfYWxpZ24obmIgKyBTSVhfU0laRV9UX1NJWkVTICsgQ0hVTktfQUxJR05fTUFTSyk7CisgIGlmIChtLT5mb290cHJpbnRfbGltaXQgIT0gMCkgeworICAgIHNpemVfdCBmcCA9IG0tPmZvb3RwcmludCArIG1tc2l6ZTsKKyAgICBpZiAoZnAgPD0gbS0+Zm9vdHByaW50IHx8IGZwID4gbS0+Zm9vdHByaW50X2xpbWl0KQorICAgICAgcmV0dXJuIDA7CisgIH0KKyAgaWYgKG1tc2l6ZSA+IG5iKSB7ICAgICAvKiBDaGVjayBmb3Igd3JhcCBhcm91bmQgMCAqLworICAgIGNoYXIqIG1tID0gKGNoYXIqKShDQUxMX0RJUkVDVF9NTUFQKG1tc2l6ZSkpOworICAgIGlmIChtbSAhPSBDTUZBSUwpIHsKKyAgICAgIHNpemVfdCBvZmZzZXQgPSBhbGlnbl9vZmZzZXQoY2h1bmsybWVtKG1tKSk7CisgICAgICBzaXplX3QgcHNpemUgPSBtbXNpemUgLSBvZmZzZXQgLSBNTUFQX0ZPT1RfUEFEOworICAgICAgbWNodW5rcHRyIHAgPSAobWNodW5rcHRyKShtbSArIG9mZnNldCk7CisgICAgICBwLT5wcmV2X2Zvb3QgPSBvZmZzZXQ7CisgICAgICBwLT5oZWFkID0gcHNpemU7CisgICAgICBtYXJrX2ludXNlX2Zvb3QobSwgcCwgcHNpemUpOworICAgICAgY2h1bmtfcGx1c19vZmZzZXQocCwgcHNpemUpLT5oZWFkID0gRkVOQ0VQT1NUX0hFQUQ7CisgICAgICBjaHVua19wbHVzX29mZnNldChwLCBwc2l6ZStTSVpFX1RfU0laRSktPmhlYWQgPSAwOworCisgICAgICBpZiAobS0+bGVhc3RfYWRkciA9PSAwIHx8IG1tIDwgbS0+bGVhc3RfYWRkcikKKyAgICAgICAgbS0+bGVhc3RfYWRkciA9IG1tOworICAgICAgaWYgKChtLT5mb290cHJpbnQgKz0gbW1zaXplKSA+IG0tPm1heF9mb290cHJpbnQpCisgICAgICAgIG0tPm1heF9mb290cHJpbnQgPSBtLT5mb290cHJpbnQ7CisgICAgICBhc3NlcnQoaXNfYWxpZ25lZChjaHVuazJtZW0ocCkpKTsKKyAgICAgIGNoZWNrX21tYXBwZWRfY2h1bmsobSwgcCk7CisgICAgICByZXR1cm4gY2h1bmsybWVtKHApOworICAgIH0KKyAgfQorICByZXR1cm4gMDsKK30KKworLyogUmVhbGxvYyB1c2luZyBtbWFwICovCitzdGF0aWMgbWNodW5rcHRyIG1tYXBfcmVzaXplKG1zdGF0ZSBtLCBtY2h1bmtwdHIgb2xkcCwgc2l6ZV90IG5iLCBpbnQgZmxhZ3MpIHsKKyAgc2l6ZV90IG9sZHNpemUgPSBjaHVua3NpemUob2xkcCk7CisgICh2b2lkKWZsYWdzOyAvKiBwbGFjYXRlIHBlb3BsZSBjb21waWxpbmcgLVd1bnVzZWQgKi8KKyAgaWYgKGlzX3NtYWxsKG5iKSkgLyogQ2FuJ3Qgc2hyaW5rIG1tYXAgcmVnaW9ucyBiZWxvdyBzbWFsbCBzaXplICovCisgICAgcmV0dXJuIDA7CisgIC8qIEtlZXAgb2xkIGNodW5rIGlmIGJpZyBlbm91Z2ggYnV0IG5vdCB0b28gYmlnICovCisgIGlmIChvbGRzaXplID49IG5iICsgU0laRV9UX1NJWkUgJiYKKyAgICAgIChvbGRzaXplIC0gbmIpIDw9IChtcGFyYW1zLmdyYW51bGFyaXR5IDw8IDEpKQorICAgIHJldHVybiBvbGRwOworICBlbHNlIHsKKyAgICBzaXplX3Qgb2Zmc2V0ID0gb2xkcC0+cHJldl9mb290OworICAgIHNpemVfdCBvbGRtbXNpemUgPSBvbGRzaXplICsgb2Zmc2V0ICsgTU1BUF9GT09UX1BBRDsKKyAgICBzaXplX3QgbmV3bW1zaXplID0gbW1hcF9hbGlnbihuYiArIFNJWF9TSVpFX1RfU0laRVMgKyBDSFVOS19BTElHTl9NQVNLKTsKKyAgICBjaGFyKiBjcCA9IChjaGFyKilDQUxMX01SRU1BUCgoY2hhciopb2xkcCAtIG9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbGRtbXNpemUsIG5ld21tc2l6ZSwgZmxhZ3MpOworICAgIGlmIChjcCAhPSBDTUZBSUwpIHsKKyAgICAgIG1jaHVua3B0ciBuZXdwID0gKG1jaHVua3B0cikoY3AgKyBvZmZzZXQpOworICAgICAgc2l6ZV90IHBzaXplID0gbmV3bW1zaXplIC0gb2Zmc2V0IC0gTU1BUF9GT09UX1BBRDsKKyAgICAgIG5ld3AtPmhlYWQgPSBwc2l6ZTsKKyAgICAgIG1hcmtfaW51c2VfZm9vdChtLCBuZXdwLCBwc2l6ZSk7CisgICAgICBjaHVua19wbHVzX29mZnNldChuZXdwLCBwc2l6ZSktPmhlYWQgPSBGRU5DRVBPU1RfSEVBRDsKKyAgICAgIGNodW5rX3BsdXNfb2Zmc2V0KG5ld3AsIHBzaXplK1NJWkVfVF9TSVpFKS0+aGVhZCA9IDA7CisKKyAgICAgIGlmIChjcCA8IG0tPmxlYXN0X2FkZHIpCisgICAgICAgIG0tPmxlYXN0X2FkZHIgPSBjcDsKKyAgICAgIGlmICgobS0+Zm9vdHByaW50ICs9IG5ld21tc2l6ZSAtIG9sZG1tc2l6ZSkgPiBtLT5tYXhfZm9vdHByaW50KQorICAgICAgICBtLT5tYXhfZm9vdHByaW50ID0gbS0+Zm9vdHByaW50OworICAgICAgY2hlY2tfbW1hcHBlZF9jaHVuayhtLCBuZXdwKTsKKyAgICAgIHJldHVybiBuZXdwOworICAgIH0KKyAgfQorICByZXR1cm4gMDsKK30KKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBtc3BhY2UgbWFuYWdlbWVudCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiBJbml0aWFsaXplIHRvcCBjaHVuayBhbmQgaXRzIHNpemUgKi8KK3N0YXRpYyB2b2lkIGluaXRfdG9wKG1zdGF0ZSBtLCBtY2h1bmtwdHIgcCwgc2l6ZV90IHBzaXplKSB7CisgIC8qIEVuc3VyZSBhbGlnbm1lbnQgKi8KKyAgc2l6ZV90IG9mZnNldCA9IGFsaWduX29mZnNldChjaHVuazJtZW0ocCkpOworICBwID0gKG1jaHVua3B0cikoKGNoYXIqKXAgKyBvZmZzZXQpOworICBwc2l6ZSAtPSBvZmZzZXQ7CisKKyAgbS0+dG9wID0gcDsKKyAgbS0+dG9wc2l6ZSA9IHBzaXplOworICBwLT5oZWFkID0gcHNpemUgfCBQSU5VU0VfQklUOworICAvKiBzZXQgc2l6ZSBvZiBmYWtlIHRyYWlsaW5nIGNodW5rIGhvbGRpbmcgb3ZlcmhlYWQgc3BhY2Ugb25seSBvbmNlICovCisgIGNodW5rX3BsdXNfb2Zmc2V0KHAsIHBzaXplKS0+aGVhZCA9IFRPUF9GT09UX1NJWkU7CisgIG0tPnRyaW1fY2hlY2sgPSBtcGFyYW1zLnRyaW1fdGhyZXNob2xkOyAvKiByZXNldCBvbiBlYWNoIHVwZGF0ZSAqLworfQorCisvKiBJbml0aWFsaXplIGJpbnMgZm9yIGEgbmV3IG1zdGF0ZSB0aGF0IGlzIG90aGVyd2lzZSB6ZXJvZWQgb3V0ICovCitzdGF0aWMgdm9pZCBpbml0X2JpbnMobXN0YXRlIG0pIHsKKyAgLyogRXN0YWJsaXNoIGNpcmN1bGFyIGxpbmtzIGZvciBzbWFsbGJpbnMgKi8KKyAgYmluZGV4X3QgaTsKKyAgZm9yIChpID0gMDsgaSA8IE5TTUFMTEJJTlM7ICsraSkgeworICAgIHNiaW5wdHIgYmluID0gc21hbGxiaW5fYXQobSxpKTsKKyAgICBiaW4tPmZkID0gYmluLT5iayA9IGJpbjsKKyAgfQorfQorCisjaWYgUFJPQ0VFRF9PTl9FUlJPUgorCisvKiBkZWZhdWx0IGNvcnJ1cHRpb24gYWN0aW9uICovCitzdGF0aWMgdm9pZCByZXNldF9vbl9lcnJvcihtc3RhdGUgbSkgeworICBpbnQgaTsKKyAgKyttYWxsb2NfY29ycnVwdGlvbl9lcnJvcl9jb3VudDsKKyAgLyogUmVpbml0aWFsaXplIGZpZWxkcyB0byBmb3JnZXQgYWJvdXQgYWxsIG1lbW9yeSAqLworICBtLT5zbWFsbG1hcCA9IG0tPnRyZWVtYXAgPSAwOworICBtLT5kdnNpemUgPSBtLT50b3BzaXplID0gMDsKKyAgbS0+c2VnLmJhc2UgPSAwOworICBtLT5zZWcuc2l6ZSA9IDA7CisgIG0tPnNlZy5uZXh0ID0gMDsKKyAgbS0+dG9wID0gbS0+ZHYgPSAwOworICBmb3IgKGkgPSAwOyBpIDwgTlRSRUVCSU5TOyArK2kpCisgICAgKnRyZWViaW5fYXQobSwgaSkgPSAwOworICBpbml0X2JpbnMobSk7Cit9CisjZW5kaWYgLyogUFJPQ0VFRF9PTl9FUlJPUiAqLworCisvKiBBbGxvY2F0ZSBjaHVuayBhbmQgcHJlcGVuZCByZW1haW5kZXIgd2l0aCBjaHVuayBpbiBzdWNjZXNzb3IgYmFzZS4gKi8KK3N0YXRpYyB2b2lkKiBwcmVwZW5kX2FsbG9jKG1zdGF0ZSBtLCBjaGFyKiBuZXdiYXNlLCBjaGFyKiBvbGRiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG5iKSB7CisgIG1jaHVua3B0ciBwID0gYWxpZ25fYXNfY2h1bmsobmV3YmFzZSk7CisgIG1jaHVua3B0ciBvbGRmaXJzdCA9IGFsaWduX2FzX2NodW5rKG9sZGJhc2UpOworICBzaXplX3QgcHNpemUgPSAoY2hhciopb2xkZmlyc3QgLSAoY2hhciopcDsKKyAgbWNodW5rcHRyIHEgPSBjaHVua19wbHVzX29mZnNldChwLCBuYik7CisgIHNpemVfdCBxc2l6ZSA9IHBzaXplIC0gbmI7CisgIHNldF9zaXplX2FuZF9waW51c2Vfb2ZfaW51c2VfY2h1bmsobSwgcCwgbmIpOworCisgIGFzc2VydCgoY2hhciopb2xkZmlyc3QgPiAoY2hhciopcSk7CisgIGFzc2VydChwaW51c2Uob2xkZmlyc3QpKTsKKyAgYXNzZXJ0KHFzaXplID49IE1JTl9DSFVOS19TSVpFKTsKKworICAvKiBjb25zb2xpZGF0ZSByZW1haW5kZXIgd2l0aCBmaXJzdCBjaHVuayBvZiBvbGQgYmFzZSAqLworICBpZiAob2xkZmlyc3QgPT0gbS0+dG9wKSB7CisgICAgc2l6ZV90IHRzaXplID0gbS0+dG9wc2l6ZSArPSBxc2l6ZTsKKyAgICBtLT50b3AgPSBxOworICAgIHEtPmhlYWQgPSB0c2l6ZSB8IFBJTlVTRV9CSVQ7CisgICAgY2hlY2tfdG9wX2NodW5rKG0sIHEpOworICB9CisgIGVsc2UgaWYgKG9sZGZpcnN0ID09IG0tPmR2KSB7CisgICAgc2l6ZV90IGRzaXplID0gbS0+ZHZzaXplICs9IHFzaXplOworICAgIG0tPmR2ID0gcTsKKyAgICBzZXRfc2l6ZV9hbmRfcGludXNlX29mX2ZyZWVfY2h1bmsocSwgZHNpemUpOworICB9CisgIGVsc2UgeworICAgIGlmICghaXNfaW51c2Uob2xkZmlyc3QpKSB7CisgICAgICBzaXplX3QgbnNpemUgPSBjaHVua3NpemUob2xkZmlyc3QpOworICAgICAgdW5saW5rX2NodW5rKG0sIG9sZGZpcnN0LCBuc2l6ZSk7CisgICAgICBvbGRmaXJzdCA9IGNodW5rX3BsdXNfb2Zmc2V0KG9sZGZpcnN0LCBuc2l6ZSk7CisgICAgICBxc2l6ZSArPSBuc2l6ZTsKKyAgICB9CisgICAgc2V0X2ZyZWVfd2l0aF9waW51c2UocSwgcXNpemUsIG9sZGZpcnN0KTsKKyAgICBpbnNlcnRfY2h1bmsobSwgcSwgcXNpemUpOworICAgIGNoZWNrX2ZyZWVfY2h1bmsobSwgcSk7CisgIH0KKworICBjaGVja19tYWxsb2NlZF9jaHVuayhtLCBjaHVuazJtZW0ocCksIG5iKTsKKyAgcmV0dXJuIGNodW5rMm1lbShwKTsKK30KKworLyogQWRkIGEgc2VnbWVudCB0byBob2xkIGEgbmV3IG5vbmNvbnRpZ3VvdXMgcmVnaW9uICovCitzdGF0aWMgdm9pZCBhZGRfc2VnbWVudChtc3RhdGUgbSwgY2hhciogdGJhc2UsIHNpemVfdCB0c2l6ZSwgZmxhZ190IG1tYXBwZWQpIHsKKyAgLyogRGV0ZXJtaW5lIGxvY2F0aW9ucyBhbmQgc2l6ZXMgb2Ygc2VnbWVudCwgZmVuY2Vwb3N0cywgb2xkIHRvcCAqLworICBjaGFyKiBvbGRfdG9wID0gKGNoYXIqKW0tPnRvcDsKKyAgbXNlZ21lbnRwdHIgb2xkc3AgPSBzZWdtZW50X2hvbGRpbmcobSwgb2xkX3RvcCk7CisgIGNoYXIqIG9sZF9lbmQgPSBvbGRzcC0+YmFzZSArIG9sZHNwLT5zaXplOworICBzaXplX3Qgc3NpemUgPSBwYWRfcmVxdWVzdChzaXplb2Yoc3RydWN0IG1hbGxvY19zZWdtZW50KSk7CisgIGNoYXIqIHJhd3NwID0gb2xkX2VuZCAtIChzc2l6ZSArIEZPVVJfU0laRV9UX1NJWkVTICsgQ0hVTktfQUxJR05fTUFTSyk7CisgIHNpemVfdCBvZmZzZXQgPSBhbGlnbl9vZmZzZXQoY2h1bmsybWVtKHJhd3NwKSk7CisgIGNoYXIqIGFzcCA9IHJhd3NwICsgb2Zmc2V0OworICBjaGFyKiBjc3AgPSAoYXNwIDwgKG9sZF90b3AgKyBNSU5fQ0hVTktfU0laRSkpPyBvbGRfdG9wIDogYXNwOworICBtY2h1bmtwdHIgc3AgPSAobWNodW5rcHRyKWNzcDsKKyAgbXNlZ21lbnRwdHIgc3MgPSAobXNlZ21lbnRwdHIpKGNodW5rMm1lbShzcCkpOworICBtY2h1bmtwdHIgdG5leHQgPSBjaHVua19wbHVzX29mZnNldChzcCwgc3NpemUpOworICBtY2h1bmtwdHIgcCA9IHRuZXh0OworICBpbnQgbmZlbmNlcyA9IDA7CisKKyAgLyogcmVzZXQgdG9wIHRvIG5ldyBzcGFjZSAqLworICBpbml0X3RvcChtLCAobWNodW5rcHRyKXRiYXNlLCB0c2l6ZSAtIFRPUF9GT09UX1NJWkUpOworCisgIC8qIFNldCB1cCBzZWdtZW50IHJlY29yZCAqLworICBhc3NlcnQoaXNfYWxpZ25lZChzcykpOworICBzZXRfc2l6ZV9hbmRfcGludXNlX29mX2ludXNlX2NodW5rKG0sIHNwLCBzc2l6ZSk7CisgICpzcyA9IG0tPnNlZzsgLyogUHVzaCBjdXJyZW50IHJlY29yZCAqLworICBtLT5zZWcuYmFzZSA9IHRiYXNlOworICBtLT5zZWcuc2l6ZSA9IHRzaXplOworICBtLT5zZWcuc2ZsYWdzID0gbW1hcHBlZDsKKyAgbS0+c2VnLm5leHQgPSBzczsKKworICAvKiBJbnNlcnQgdHJhaWxpbmcgZmVuY2Vwb3N0cyAqLworICBmb3IgKDs7KSB7CisgICAgbWNodW5rcHRyIG5leHRwID0gY2h1bmtfcGx1c19vZmZzZXQocCwgU0laRV9UX1NJWkUpOworICAgIHAtPmhlYWQgPSBGRU5DRVBPU1RfSEVBRDsKKyAgICArK25mZW5jZXM7CisgICAgaWYgKChjaGFyKikoJihuZXh0cC0+aGVhZCkpIDwgb2xkX2VuZCkKKyAgICAgIHAgPSBuZXh0cDsKKyAgICBlbHNlCisgICAgICBicmVhazsKKyAgfQorICBhc3NlcnQobmZlbmNlcyA+PSAyKTsKKworICAvKiBJbnNlcnQgdGhlIHJlc3Qgb2Ygb2xkIHRvcCBpbnRvIGEgYmluIGFzIGFuIG9yZGluYXJ5IGZyZWUgY2h1bmsgKi8KKyAgaWYgKGNzcCAhPSBvbGRfdG9wKSB7CisgICAgbWNodW5rcHRyIHEgPSAobWNodW5rcHRyKW9sZF90b3A7CisgICAgc2l6ZV90IHBzaXplID0gY3NwIC0gb2xkX3RvcDsKKyAgICBtY2h1bmtwdHIgdG4gPSBjaHVua19wbHVzX29mZnNldChxLCBwc2l6ZSk7CisgICAgc2V0X2ZyZWVfd2l0aF9waW51c2UocSwgcHNpemUsIHRuKTsKKyAgICBpbnNlcnRfY2h1bmsobSwgcSwgcHNpemUpOworICB9CisKKyAgY2hlY2tfdG9wX2NodW5rKG0sIG0tPnRvcCk7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFN5c3RlbSBhbGxvY2F0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIEdldCBtZW1vcnkgZnJvbSBzeXN0ZW0gdXNpbmcgTU9SRUNPUkUgb3IgTU1BUCAqLworc3RhdGljIHZvaWQqIHN5c19hbGxvYyhtc3RhdGUgbSwgc2l6ZV90IG5iKSB7CisgIGNoYXIqIHRiYXNlID0gQ01GQUlMOworICBzaXplX3QgdHNpemUgPSAwOworICBmbGFnX3QgbW1hcF9mbGFnID0gMDsKKyAgc2l6ZV90IGFzaXplOyAvKiBhbGxvY2F0aW9uIHNpemUgKi8KKworICBlbnN1cmVfaW5pdGlhbGl6YXRpb24oKTsKKworICAvKiBEaXJlY3RseSBtYXAgbGFyZ2UgY2h1bmtzLCBidXQgb25seSBpZiBhbHJlYWR5IGluaXRpYWxpemVkICovCisgIGlmICh1c2VfbW1hcChtKSAmJiBuYiA+PSBtcGFyYW1zLm1tYXBfdGhyZXNob2xkICYmIG0tPnRvcHNpemUgIT0gMCkgeworICAgIHZvaWQqIG1lbSA9IG1tYXBfYWxsb2MobSwgbmIpOworICAgIGlmIChtZW0gIT0gMCkKKyAgICAgIHJldHVybiBtZW07CisgIH0KKworICBhc2l6ZSA9IGdyYW51bGFyaXR5X2FsaWduKG5iICsgU1lTX0FMTE9DX1BBRERJTkcpOworICBpZiAoYXNpemUgPD0gbmIpIHsKKyAgICAvKiBCRUdJTiBhbmRyb2lkLWFkZGVkOiBzZXQgZXJybm8gKi8KKyAgICBNQUxMT0NfRkFJTFVSRV9BQ1RJT047CisgICAgLyogRU5EIGFuZHJvaWQtYWRkZWQgKi8KKyAgICByZXR1cm4gMDsgLyogd3JhcGFyb3VuZCAqLworICB9CisgIGlmIChtLT5mb290cHJpbnRfbGltaXQgIT0gMCkgeworICAgIHNpemVfdCBmcCA9IG0tPmZvb3RwcmludCArIGFzaXplOworICAgIGlmIChmcCA8PSBtLT5mb290cHJpbnQgfHwgZnAgPiBtLT5mb290cHJpbnRfbGltaXQpIHsKKyAgICAgIC8qIEJFR0lOIGFuZHJvaWQtYWRkZWQ6IHNldCBlcnJubyAqLworICAgICAgTUFMTE9DX0ZBSUxVUkVfQUNUSU9OOworICAgICAgLyogRU5EIGFuZHJvaWQtYWRkZWQgKi8KKyAgICAgIHJldHVybiAwOworICAgIH0KKyAgfQorCisgIC8qCisgICAgVHJ5IGdldHRpbmcgbWVtb3J5IGluIGFueSBvZiB0aHJlZSB3YXlzIChpbiBtb3N0LXByZWZlcnJlZCB0bworICAgIGxlYXN0LXByZWZlcnJlZCBvcmRlcik6CisgICAgMS4gQSBjYWxsIHRvIE1PUkVDT1JFIHRoYXQgY2FuIG5vcm1hbGx5IGNvbnRpZ3VvdXNseSBleHRlbmQgbWVtb3J5LgorICAgICAgIChkaXNhYmxlZCBpZiBub3QgTU9SRUNPUkVfQ09OVElHVU9VUyBvciBub3QgSEFWRV9NT1JFQ09SRSBvcgorICAgICAgIG9yIG1haW4gc3BhY2UgaXMgbW1hcHBlZCBvciBhIHByZXZpb3VzIGNvbnRpZ3VvdXMgY2FsbCBmYWlsZWQpCisgICAgMi4gQSBjYWxsIHRvIE1NQVAgbmV3IHNwYWNlIChkaXNhYmxlZCBpZiBub3QgSEFWRV9NTUFQKS4KKyAgICAgICBOb3RlIHRoYXQgdW5kZXIgdGhlIGRlZmF1bHQgc2V0dGluZ3MsIGlmIE1PUkVDT1JFIGlzIHVuYWJsZSB0bworICAgICAgIGZ1bGZpbGwgYSByZXF1ZXN0LCBhbmQgSEFWRV9NTUFQIGlzIHRydWUsIHRoZW4gbW1hcCBpcworICAgICAgIHVzZWQgYXMgYSBub25jb250aWd1b3VzIHN5c3RlbSBhbGxvY2F0b3IuIFRoaXMgaXMgYSB1c2VmdWwgYmFja3VwCisgICAgICAgc3RyYXRlZ3kgZm9yIHN5c3RlbXMgd2l0aCBob2xlcyBpbiBhZGRyZXNzIHNwYWNlcyAtLSBpbiB0aGlzIGNhc2UKKyAgICAgICBzYnJrIGNhbm5vdCBjb250aWd1b3VzbHkgZXhwYW5kIHRoZSBoZWFwLCBidXQgbW1hcCBtYXkgYmUgYWJsZSB0bworICAgICAgIGZpbmQgc3BhY2UuCisgICAgMy4gQSBjYWxsIHRvIE1PUkVDT1JFIHRoYXQgY2Fubm90IHVzdWFsbHkgY29udGlndW91c2x5IGV4dGVuZCBtZW1vcnkuCisgICAgICAgKGRpc2FibGVkIGlmIG5vdCBIQVZFX01PUkVDT1JFKQorCisgICBJbiBhbGwgY2FzZXMsIHdlIG5lZWQgdG8gcmVxdWVzdCBlbm91Z2ggYnl0ZXMgZnJvbSBzeXN0ZW0gdG8gZW5zdXJlCisgICB3ZSBjYW4gbWFsbG9jIG5iIGJ5dGVzIHVwb24gc3VjY2Vzcywgc28gcGFkIHdpdGggZW5vdWdoIHNwYWNlIGZvcgorICAgdG9wX2Zvb3QsIHBsdXMgYWxpZ25tZW50LXBhZCB0byBtYWtlIHN1cmUgd2UgZG9uJ3QgbG9zZSBieXRlcyBpZgorICAgbm90IG9uIGJvdW5kYXJ5LCBhbmQgcm91bmQgdGhpcyB1cCB0byBhIGdyYW51bGFyaXR5IHVuaXQuCisgICovCisKKyAgaWYgKE1PUkVDT1JFX0NPTlRJR1VPVVMgJiYgIXVzZV9ub25jb250aWd1b3VzKG0pKSB7CisgICAgY2hhciogYnIgPSBDTUZBSUw7CisgICAgc2l6ZV90IHNzaXplID0gYXNpemU7IC8qIHNicmsgY2FsbCBzaXplICovCisgICAgbXNlZ21lbnRwdHIgc3MgPSAobS0+dG9wID09IDApPyAwIDogc2VnbWVudF9ob2xkaW5nKG0sIChjaGFyKiltLT50b3ApOworICAgIEFDUVVJUkVfTUFMTE9DX0dMT0JBTF9MT0NLKCk7CisKKyAgICBpZiAoc3MgPT0gMCkgeyAgLyogRmlyc3QgdGltZSB0aHJvdWdoIG9yIHJlY292ZXJ5ICovCisgICAgICBjaGFyKiBiYXNlID0gKGNoYXIqKUNBTExfTU9SRUNPUkUoMCk7CisgICAgICBpZiAoYmFzZSAhPSBDTUZBSUwpIHsKKyAgICAgICAgc2l6ZV90IGZwOworICAgICAgICAvKiBBZGp1c3QgdG8gZW5kIG9uIGEgcGFnZSBib3VuZGFyeSAqLworICAgICAgICBpZiAoIWlzX3BhZ2VfYWxpZ25lZChiYXNlKSkKKyAgICAgICAgICBzc2l6ZSArPSAocGFnZV9hbGlnbigoc2l6ZV90KWJhc2UpIC0gKHNpemVfdCliYXNlKTsKKyAgICAgICAgZnAgPSBtLT5mb290cHJpbnQgKyBzc2l6ZTsgLyogcmVjaGVjayBsaW1pdHMgKi8KKyAgICAgICAgaWYgKHNzaXplID4gbmIgJiYgc3NpemUgPCBIQUxGX01BWF9TSVpFX1QgJiYKKyAgICAgICAgICAgIChtLT5mb290cHJpbnRfbGltaXQgPT0gMCB8fAorICAgICAgICAgICAgIChmcCA+IG0tPmZvb3RwcmludCAmJiBmcCA8PSBtLT5mb290cHJpbnRfbGltaXQpKSAmJgorICAgICAgICAgICAgKGJyID0gKGNoYXIqKShDQUxMX01PUkVDT1JFKHNzaXplKSkpID09IGJhc2UpIHsKKyAgICAgICAgICB0YmFzZSA9IGJhc2U7CisgICAgICAgICAgdHNpemUgPSBzc2l6ZTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIC8qIFN1YnRyYWN0IG91dCBleGlzdGluZyBhdmFpbGFibGUgdG9wIHNwYWNlIGZyb20gTU9SRUNPUkUgcmVxdWVzdC4gKi8KKyAgICAgIHNzaXplID0gZ3JhbnVsYXJpdHlfYWxpZ24obmIgLSBtLT50b3BzaXplICsgU1lTX0FMTE9DX1BBRERJTkcpOworICAgICAgLyogVXNlIG1lbSBoZXJlIG9ubHkgaWYgaXQgZGlkIGNvbnRpbnVvdXNseSBleHRlbmQgb2xkIHNwYWNlICovCisgICAgICBpZiAoc3NpemUgPCBIQUxGX01BWF9TSVpFX1QgJiYKKyAgICAgICAgICAoYnIgPSAoY2hhciopKENBTExfTU9SRUNPUkUoc3NpemUpKSkgPT0gc3MtPmJhc2Urc3MtPnNpemUpIHsKKyAgICAgICAgdGJhc2UgPSBicjsKKyAgICAgICAgdHNpemUgPSBzc2l6ZTsKKyAgICAgIH0KKyAgICB9CisKKyAgICBpZiAodGJhc2UgPT0gQ01GQUlMKSB7ICAgIC8qIENvcGUgd2l0aCBwYXJ0aWFsIGZhaWx1cmUgKi8KKyAgICAgIGlmIChiciAhPSBDTUZBSUwpIHsgICAgLyogVHJ5IHRvIHVzZS9leHRlbmQgdGhlIHNwYWNlIHdlIGRpZCBnZXQgKi8KKyAgICAgICAgaWYgKHNzaXplIDwgSEFMRl9NQVhfU0laRV9UICYmCisgICAgICAgICAgICBzc2l6ZSA8IG5iICsgU1lTX0FMTE9DX1BBRERJTkcpIHsKKyAgICAgICAgICBzaXplX3QgZXNpemUgPSBncmFudWxhcml0eV9hbGlnbihuYiArIFNZU19BTExPQ19QQURESU5HIC0gc3NpemUpOworICAgICAgICAgIGlmIChlc2l6ZSA8IEhBTEZfTUFYX1NJWkVfVCkgeworICAgICAgICAgICAgY2hhciogZW5kID0gKGNoYXIqKUNBTExfTU9SRUNPUkUoZXNpemUpOworICAgICAgICAgICAgaWYgKGVuZCAhPSBDTUZBSUwpCisgICAgICAgICAgICAgIHNzaXplICs9IGVzaXplOworICAgICAgICAgICAgZWxzZSB7ICAgICAgICAgICAgLyogQ2FuJ3QgdXNlOyB0cnkgdG8gcmVsZWFzZSAqLworICAgICAgICAgICAgICAodm9pZCkgQ0FMTF9NT1JFQ09SRSgtc3NpemUpOworICAgICAgICAgICAgICBiciA9IENNRkFJTDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIGlmIChiciAhPSBDTUZBSUwpIHsgICAgLyogVXNlIHRoZSBzcGFjZSB3ZSBkaWQgZ2V0ICovCisgICAgICAgIHRiYXNlID0gYnI7CisgICAgICAgIHRzaXplID0gc3NpemU7CisgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIGRpc2FibGVfY29udGlndW91cyhtKTsgLyogRG9uJ3QgdHJ5IGNvbnRpZ3VvdXMgcGF0aCBpbiB0aGUgZnV0dXJlICovCisgICAgfQorCisgICAgUkVMRUFTRV9NQUxMT0NfR0xPQkFMX0xPQ0soKTsKKyAgfQorCisgIGlmIChIQVZFX01NQVAgJiYgdGJhc2UgPT0gQ01GQUlMKSB7ICAvKiBUcnkgTU1BUCAqLworICAgIGNoYXIqIG1wID0gKGNoYXIqKShDQUxMX01NQVAoYXNpemUpKTsKKyAgICBpZiAobXAgIT0gQ01GQUlMKSB7CisgICAgICB0YmFzZSA9IG1wOworICAgICAgdHNpemUgPSBhc2l6ZTsKKyAgICAgIG1tYXBfZmxhZyA9IFVTRV9NTUFQX0JJVDsKKyAgICB9CisgIH0KKworICBpZiAoSEFWRV9NT1JFQ09SRSAmJiB0YmFzZSA9PSBDTUZBSUwpIHsgLyogVHJ5IG5vbmNvbnRpZ3VvdXMgTU9SRUNPUkUgKi8KKyAgICBpZiAoYXNpemUgPCBIQUxGX01BWF9TSVpFX1QpIHsKKyAgICAgIGNoYXIqIGJyID0gQ01GQUlMOworICAgICAgY2hhciogZW5kID0gQ01GQUlMOworICAgICAgQUNRVUlSRV9NQUxMT0NfR0xPQkFMX0xPQ0soKTsKKyAgICAgIGJyID0gKGNoYXIqKShDQUxMX01PUkVDT1JFKGFzaXplKSk7CisgICAgICBlbmQgPSAoY2hhciopKENBTExfTU9SRUNPUkUoMCkpOworICAgICAgUkVMRUFTRV9NQUxMT0NfR0xPQkFMX0xPQ0soKTsKKyAgICAgIGlmIChiciAhPSBDTUZBSUwgJiYgZW5kICE9IENNRkFJTCAmJiBiciA8IGVuZCkgeworICAgICAgICBzaXplX3Qgc3NpemUgPSBlbmQgLSBicjsKKyAgICAgICAgaWYgKHNzaXplID4gbmIgKyBUT1BfRk9PVF9TSVpFKSB7CisgICAgICAgICAgdGJhc2UgPSBicjsKKyAgICAgICAgICB0c2l6ZSA9IHNzaXplOworICAgICAgICB9CisgICAgICB9CisgICAgfQorICB9CisKKyAgaWYgKHRiYXNlICE9IENNRkFJTCkgeworCisgICAgaWYgKChtLT5mb290cHJpbnQgKz0gdHNpemUpID4gbS0+bWF4X2Zvb3RwcmludCkKKyAgICAgIG0tPm1heF9mb290cHJpbnQgPSBtLT5mb290cHJpbnQ7CisKKyAgICBpZiAoIWlzX2luaXRpYWxpemVkKG0pKSB7IC8qIGZpcnN0LXRpbWUgaW5pdGlhbGl6YXRpb24gKi8KKyAgICAgIGlmIChtLT5sZWFzdF9hZGRyID09IDAgfHwgdGJhc2UgPCBtLT5sZWFzdF9hZGRyKQorICAgICAgICBtLT5sZWFzdF9hZGRyID0gdGJhc2U7CisgICAgICBtLT5zZWcuYmFzZSA9IHRiYXNlOworICAgICAgbS0+c2VnLnNpemUgPSB0c2l6ZTsKKyAgICAgIG0tPnNlZy5zZmxhZ3MgPSBtbWFwX2ZsYWc7CisgICAgICBtLT5tYWdpYyA9IG1wYXJhbXMubWFnaWM7CisgICAgICBtLT5yZWxlYXNlX2NoZWNrcyA9IE1BWF9SRUxFQVNFX0NIRUNLX1JBVEU7CisgICAgICBpbml0X2JpbnMobSk7CisjaWYgIU9OTFlfTVNQQUNFUworICAgICAgaWYgKGlzX2dsb2JhbChtKSkKKyAgICAgICAgaW5pdF90b3AobSwgKG1jaHVua3B0cil0YmFzZSwgdHNpemUgLSBUT1BfRk9PVF9TSVpFKTsKKyAgICAgIGVsc2UKKyNlbmRpZgorICAgICAgeworICAgICAgICAvKiBPZmZzZXQgdG9wIGJ5IGVtYmVkZGVkIG1hbGxvY19zdGF0ZSAqLworICAgICAgICBtY2h1bmtwdHIgbW4gPSBuZXh0X2NodW5rKG1lbTJjaHVuayhtKSk7CisgICAgICAgIGluaXRfdG9wKG0sIG1uLCAoc2l6ZV90KSgodGJhc2UgKyB0c2l6ZSkgLSAoY2hhciopbW4pIC1UT1BfRk9PVF9TSVpFKTsKKyAgICAgIH0KKyAgICB9CisKKyAgICBlbHNlIHsKKyAgICAgIC8qIFRyeSB0byBtZXJnZSB3aXRoIGFuIGV4aXN0aW5nIHNlZ21lbnQgKi8KKyAgICAgIG1zZWdtZW50cHRyIHNwID0gJm0tPnNlZzsKKyAgICAgIC8qIE9ubHkgY29uc2lkZXIgbW9zdCByZWNlbnQgc2VnbWVudCBpZiB0cmF2ZXJzYWwgc3VwcHJlc3NlZCAqLworICAgICAgd2hpbGUgKHNwICE9IDAgJiYgdGJhc2UgIT0gc3AtPmJhc2UgKyBzcC0+c2l6ZSkKKyAgICAgICAgc3AgPSAoTk9fU0VHTUVOVF9UUkFWRVJTQUwpID8gMCA6IHNwLT5uZXh0OworICAgICAgaWYgKHNwICE9IDAgJiYKKyAgICAgICAgICAhaXNfZXh0ZXJuX3NlZ21lbnQoc3ApICYmCisgICAgICAgICAgKHNwLT5zZmxhZ3MgJiBVU0VfTU1BUF9CSVQpID09IG1tYXBfZmxhZyAmJgorICAgICAgICAgIHNlZ21lbnRfaG9sZHMoc3AsIG0tPnRvcCkpIHsgLyogYXBwZW5kICovCisgICAgICAgIHNwLT5zaXplICs9IHRzaXplOworICAgICAgICBpbml0X3RvcChtLCBtLT50b3AsIG0tPnRvcHNpemUgKyB0c2l6ZSk7CisgICAgICB9CisgICAgICBlbHNlIHsKKyAgICAgICAgaWYgKHRiYXNlIDwgbS0+bGVhc3RfYWRkcikKKyAgICAgICAgICBtLT5sZWFzdF9hZGRyID0gdGJhc2U7CisgICAgICAgIHNwID0gJm0tPnNlZzsKKyAgICAgICAgd2hpbGUgKHNwICE9IDAgJiYgc3AtPmJhc2UgIT0gdGJhc2UgKyB0c2l6ZSkKKyAgICAgICAgICBzcCA9IChOT19TRUdNRU5UX1RSQVZFUlNBTCkgPyAwIDogc3AtPm5leHQ7CisgICAgICAgIGlmIChzcCAhPSAwICYmCisgICAgICAgICAgICAhaXNfZXh0ZXJuX3NlZ21lbnQoc3ApICYmCisgICAgICAgICAgICAoc3AtPnNmbGFncyAmIFVTRV9NTUFQX0JJVCkgPT0gbW1hcF9mbGFnKSB7CisgICAgICAgICAgY2hhciogb2xkYmFzZSA9IHNwLT5iYXNlOworICAgICAgICAgIHNwLT5iYXNlID0gdGJhc2U7CisgICAgICAgICAgc3AtPnNpemUgKz0gdHNpemU7CisgICAgICAgICAgcmV0dXJuIHByZXBlbmRfYWxsb2MobSwgdGJhc2UsIG9sZGJhc2UsIG5iKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgICAgYWRkX3NlZ21lbnQobSwgdGJhc2UsIHRzaXplLCBtbWFwX2ZsYWcpOworICAgICAgfQorICAgIH0KKworICAgIGlmIChuYiA8IG0tPnRvcHNpemUpIHsgLyogQWxsb2NhdGUgZnJvbSBuZXcgb3IgZXh0ZW5kZWQgdG9wIHNwYWNlICovCisgICAgICBzaXplX3QgcnNpemUgPSBtLT50b3BzaXplIC09IG5iOworICAgICAgbWNodW5rcHRyIHAgPSBtLT50b3A7CisgICAgICBtY2h1bmtwdHIgciA9IG0tPnRvcCA9IGNodW5rX3BsdXNfb2Zmc2V0KHAsIG5iKTsKKyAgICAgIHItPmhlYWQgPSByc2l6ZSB8IFBJTlVTRV9CSVQ7CisgICAgICBzZXRfc2l6ZV9hbmRfcGludXNlX29mX2ludXNlX2NodW5rKG0sIHAsIG5iKTsKKyAgICAgIGNoZWNrX3RvcF9jaHVuayhtLCBtLT50b3ApOworICAgICAgY2hlY2tfbWFsbG9jZWRfY2h1bmsobSwgY2h1bmsybWVtKHApLCBuYik7CisgICAgICByZXR1cm4gY2h1bmsybWVtKHApOworICAgIH0KKyAgfQorCisgIE1BTExPQ19GQUlMVVJFX0FDVElPTjsKKyAgcmV0dXJuIDA7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBzeXN0ZW0gZGVhbGxvY2F0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIFVubWFwIGFuZCB1bmxpbmsgYW55IG1tYXBwZWQgc2VnbWVudHMgdGhhdCBkb24ndCBjb250YWluIHVzZWQgY2h1bmtzICovCitzdGF0aWMgc2l6ZV90IHJlbGVhc2VfdW51c2VkX3NlZ21lbnRzKG1zdGF0ZSBtKSB7CisgIHNpemVfdCByZWxlYXNlZCA9IDA7CisgIGludCBuc2VncyA9IDA7CisgIG1zZWdtZW50cHRyIHByZWQgPSAmbS0+c2VnOworICBtc2VnbWVudHB0ciBzcCA9IHByZWQtPm5leHQ7CisgIHdoaWxlIChzcCAhPSAwKSB7CisgICAgY2hhciogYmFzZSA9IHNwLT5iYXNlOworICAgIHNpemVfdCBzaXplID0gc3AtPnNpemU7CisgICAgbXNlZ21lbnRwdHIgbmV4dCA9IHNwLT5uZXh0OworICAgICsrbnNlZ3M7CisgICAgaWYgKGlzX21tYXBwZWRfc2VnbWVudChzcCkgJiYgIWlzX2V4dGVybl9zZWdtZW50KHNwKSkgeworICAgICAgbWNodW5rcHRyIHAgPSBhbGlnbl9hc19jaHVuayhiYXNlKTsKKyAgICAgIHNpemVfdCBwc2l6ZSA9IGNodW5rc2l6ZShwKTsKKyAgICAgIC8qIENhbiB1bm1hcCBpZiBmaXJzdCBjaHVuayBob2xkcyBlbnRpcmUgc2VnbWVudCBhbmQgbm90IHBpbm5lZCAqLworICAgICAgaWYgKCFpc19pbnVzZShwKSAmJiAoY2hhciopcCArIHBzaXplID49IGJhc2UgKyBzaXplIC0gVE9QX0ZPT1RfU0laRSkgeworICAgICAgICB0Y2h1bmtwdHIgdHAgPSAodGNodW5rcHRyKXA7CisgICAgICAgIGFzc2VydChzZWdtZW50X2hvbGRzKHNwLCAoY2hhciopc3ApKTsKKyAgICAgICAgaWYgKHAgPT0gbS0+ZHYpIHsKKyAgICAgICAgICBtLT5kdiA9IDA7CisgICAgICAgICAgbS0+ZHZzaXplID0gMDsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICB1bmxpbmtfbGFyZ2VfY2h1bmsobSwgdHApOworICAgICAgICB9CisgICAgICAgIGlmIChDQUxMX01VTk1BUChiYXNlLCBzaXplKSA9PSAwKSB7CisgICAgICAgICAgcmVsZWFzZWQgKz0gc2l6ZTsKKyAgICAgICAgICBtLT5mb290cHJpbnQgLT0gc2l6ZTsKKyAgICAgICAgICAvKiB1bmxpbmsgb2Jzb2xldGVkIHJlY29yZCAqLworICAgICAgICAgIHNwID0gcHJlZDsKKyAgICAgICAgICBzcC0+bmV4dCA9IG5leHQ7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7IC8qIGJhY2sgb3V0IGlmIGNhbm5vdCB1bm1hcCAqLworICAgICAgICAgIGluc2VydF9sYXJnZV9jaHVuayhtLCB0cCwgcHNpemUpOworICAgICAgICB9CisgICAgICB9CisgICAgfQorICAgIGlmIChOT19TRUdNRU5UX1RSQVZFUlNBTCkgLyogc2NhbiBvbmx5IGZpcnN0IHNlZ21lbnQgKi8KKyAgICAgIGJyZWFrOworICAgIHByZWQgPSBzcDsKKyAgICBzcCA9IG5leHQ7CisgIH0KKyAgLyogUmVzZXQgY2hlY2sgY291bnRlciAqLworICBtLT5yZWxlYXNlX2NoZWNrcyA9ICgoKHNpemVfdCkgbnNlZ3MgPiAoc2l6ZV90KSBNQVhfUkVMRUFTRV9DSEVDS19SQVRFKT8KKyAgICAgICAgICAgICAgICAgICAgICAgKHNpemVfdCkgbnNlZ3MgOiAoc2l6ZV90KSBNQVhfUkVMRUFTRV9DSEVDS19SQVRFKTsKKyAgcmV0dXJuIHJlbGVhc2VkOworfQorCitzdGF0aWMgaW50IHN5c190cmltKG1zdGF0ZSBtLCBzaXplX3QgcGFkKSB7CisgIHNpemVfdCByZWxlYXNlZCA9IDA7CisgIGVuc3VyZV9pbml0aWFsaXphdGlvbigpOworICBpZiAocGFkIDwgTUFYX1JFUVVFU1QgJiYgaXNfaW5pdGlhbGl6ZWQobSkpIHsKKyAgICBwYWQgKz0gVE9QX0ZPT1RfU0laRTsgLyogZW5zdXJlIGVub3VnaCByb29tIGZvciBzZWdtZW50IG92ZXJoZWFkICovCisKKyAgICBpZiAobS0+dG9wc2l6ZSA+IHBhZCkgeworICAgICAgLyogU2hyaW5rIHRvcCBzcGFjZSBpbiBncmFudWxhcml0eS1zaXplIHVuaXRzLCBrZWVwaW5nIGF0IGxlYXN0IG9uZSAqLworICAgICAgc2l6ZV90IHVuaXQgPSBtcGFyYW1zLmdyYW51bGFyaXR5OworICAgICAgc2l6ZV90IGV4dHJhID0gKChtLT50b3BzaXplIC0gcGFkICsgKHVuaXQgLSBTSVpFX1RfT05FKSkgLyB1bml0IC0KKyAgICAgICAgICAgICAgICAgICAgICBTSVpFX1RfT05FKSAqIHVuaXQ7CisgICAgICBtc2VnbWVudHB0ciBzcCA9IHNlZ21lbnRfaG9sZGluZyhtLCAoY2hhciopbS0+dG9wKTsKKworICAgICAgaWYgKCFpc19leHRlcm5fc2VnbWVudChzcCkpIHsKKyAgICAgICAgaWYgKGlzX21tYXBwZWRfc2VnbWVudChzcCkpIHsKKyAgICAgICAgICBpZiAoSEFWRV9NTUFQICYmCisgICAgICAgICAgICAgIHNwLT5zaXplID49IGV4dHJhICYmCisgICAgICAgICAgICAgICFoYXNfc2VnbWVudF9saW5rKG0sIHNwKSkgeyAvKiBjYW4ndCBzaHJpbmsgaWYgcGlubmVkICovCisgICAgICAgICAgICBzaXplX3QgbmV3c2l6ZSA9IHNwLT5zaXplIC0gZXh0cmE7CisgICAgICAgICAgICAodm9pZCluZXdzaXplOyAvKiBwbGFjYXRlIHBlb3BsZSBjb21waWxpbmcgLVd1bnVzZWQtdmFyaWFibGUgKi8KKyAgICAgICAgICAgIC8qIFByZWZlciBtcmVtYXAsIGZhbGwgYmFjayB0byBtdW5tYXAgKi8KKyAgICAgICAgICAgIGlmICgoQ0FMTF9NUkVNQVAoc3AtPmJhc2UsIHNwLT5zaXplLCBuZXdzaXplLCAwKSAhPSBNRkFJTCkgfHwKKyAgICAgICAgICAgICAgICAoQ0FMTF9NVU5NQVAoc3AtPmJhc2UgKyBuZXdzaXplLCBleHRyYSkgPT0gMCkpIHsKKyAgICAgICAgICAgICAgcmVsZWFzZWQgPSBleHRyYTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoSEFWRV9NT1JFQ09SRSkgeworICAgICAgICAgIGlmIChleHRyYSA+PSBIQUxGX01BWF9TSVpFX1QpIC8qIEF2b2lkIHdyYXBwaW5nIG5lZ2F0aXZlICovCisgICAgICAgICAgICBleHRyYSA9IChIQUxGX01BWF9TSVpFX1QpICsgU0laRV9UX09ORSAtIHVuaXQ7CisgICAgICAgICAgQUNRVUlSRV9NQUxMT0NfR0xPQkFMX0xPQ0soKTsKKyAgICAgICAgICB7CisgICAgICAgICAgICAvKiBNYWtlIHN1cmUgZW5kIG9mIG1lbW9yeSBpcyB3aGVyZSB3ZSBsYXN0IHNldCBpdC4gKi8KKyAgICAgICAgICAgIGNoYXIqIG9sZF9iciA9IChjaGFyKikoQ0FMTF9NT1JFQ09SRSgwKSk7CisgICAgICAgICAgICBpZiAob2xkX2JyID09IHNwLT5iYXNlICsgc3AtPnNpemUpIHsKKyAgICAgICAgICAgICAgY2hhciogcmVsX2JyID0gKGNoYXIqKShDQUxMX01PUkVDT1JFKC1leHRyYSkpOworICAgICAgICAgICAgICBjaGFyKiBuZXdfYnIgPSAoY2hhciopKENBTExfTU9SRUNPUkUoMCkpOworICAgICAgICAgICAgICBpZiAocmVsX2JyICE9IENNRkFJTCAmJiBuZXdfYnIgPCBvbGRfYnIpCisgICAgICAgICAgICAgICAgcmVsZWFzZWQgPSBvbGRfYnIgLSBuZXdfYnI7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICAgIFJFTEVBU0VfTUFMTE9DX0dMT0JBTF9MT0NLKCk7CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgaWYgKHJlbGVhc2VkICE9IDApIHsKKyAgICAgICAgc3AtPnNpemUgLT0gcmVsZWFzZWQ7CisgICAgICAgIG0tPmZvb3RwcmludCAtPSByZWxlYXNlZDsKKyAgICAgICAgaW5pdF90b3AobSwgbS0+dG9wLCBtLT50b3BzaXplIC0gcmVsZWFzZWQpOworICAgICAgICBjaGVja190b3BfY2h1bmsobSwgbS0+dG9wKTsKKyAgICAgIH0KKyAgICB9CisKKyAgICAvKiBVbm1hcCBhbnkgdW51c2VkIG1tYXBwZWQgc2VnbWVudHMgKi8KKyAgICBpZiAoSEFWRV9NTUFQKQorICAgICAgcmVsZWFzZWQgKz0gcmVsZWFzZV91bnVzZWRfc2VnbWVudHMobSk7CisKKyAgICAvKiBPbiBmYWlsdXJlLCBkaXNhYmxlIGF1dG90cmltIHRvIGF2b2lkIHJlcGVhdGVkIGZhaWxlZCBmdXR1cmUgY2FsbHMgKi8KKyAgICBpZiAocmVsZWFzZWQgPT0gMCAmJiBtLT50b3BzaXplID4gbS0+dHJpbV9jaGVjaykKKyAgICAgIG0tPnRyaW1fY2hlY2sgPSBNQVhfU0laRV9UOworICB9CisKKyAgcmV0dXJuIChyZWxlYXNlZCAhPSAwKT8gMSA6IDA7Cit9CisKKy8qIENvbnNvbGlkYXRlIGFuZCBiaW4gYSBjaHVuay4gRGlmZmVycyBmcm9tIGV4cG9ydGVkIHZlcnNpb25zCisgICBvZiBmcmVlIG1haW5seSBpbiB0aGF0IHRoZSBjaHVuayBuZWVkIG5vdCBiZSBtYXJrZWQgYXMgaW51c2UuCisqLworc3RhdGljIHZvaWQgZGlzcG9zZV9jaHVuayhtc3RhdGUgbSwgbWNodW5rcHRyIHAsIHNpemVfdCBwc2l6ZSkgeworICBtY2h1bmtwdHIgbmV4dCA9IGNodW5rX3BsdXNfb2Zmc2V0KHAsIHBzaXplKTsKKyAgaWYgKCFwaW51c2UocCkpIHsKKyAgICBtY2h1bmtwdHIgcHJldjsKKyAgICBzaXplX3QgcHJldnNpemUgPSBwLT5wcmV2X2Zvb3Q7CisgICAgaWYgKGlzX21tYXBwZWQocCkpIHsKKyAgICAgIHBzaXplICs9IHByZXZzaXplICsgTU1BUF9GT09UX1BBRDsKKyAgICAgIGlmIChDQUxMX01VTk1BUCgoY2hhciopcCAtIHByZXZzaXplLCBwc2l6ZSkgPT0gMCkKKyAgICAgICAgbS0+Zm9vdHByaW50IC09IHBzaXplOworICAgICAgcmV0dXJuOworICAgIH0KKyAgICBwcmV2ID0gY2h1bmtfbWludXNfb2Zmc2V0KHAsIHByZXZzaXplKTsKKyAgICBwc2l6ZSArPSBwcmV2c2l6ZTsKKyAgICBwID0gcHJldjsKKyAgICBpZiAoUlRDSEVDSyhva19hZGRyZXNzKG0sIHByZXYpKSkgeyAvKiBjb25zb2xpZGF0ZSBiYWNrd2FyZCAqLworICAgICAgaWYgKHAgIT0gbS0+ZHYpIHsKKyAgICAgICAgdW5saW5rX2NodW5rKG0sIHAsIHByZXZzaXplKTsKKyAgICAgIH0KKyAgICAgIGVsc2UgaWYgKChuZXh0LT5oZWFkICYgSU5VU0VfQklUUykgPT0gSU5VU0VfQklUUykgeworICAgICAgICBtLT5kdnNpemUgPSBwc2l6ZTsKKyAgICAgICAgc2V0X2ZyZWVfd2l0aF9waW51c2UocCwgcHNpemUsIG5leHQpOworICAgICAgICByZXR1cm47CisgICAgICB9CisgICAgfQorICAgIGVsc2UgeworICAgICAgQ09SUlVQVElPTl9FUlJPUl9BQ1RJT04obSk7CisgICAgICByZXR1cm47CisgICAgfQorICB9CisgIGlmIChSVENIRUNLKG9rX2FkZHJlc3MobSwgbmV4dCkpKSB7CisgICAgaWYgKCFjaW51c2UobmV4dCkpIHsgIC8qIGNvbnNvbGlkYXRlIGZvcndhcmQgKi8KKyAgICAgIGlmIChuZXh0ID09IG0tPnRvcCkgeworICAgICAgICBzaXplX3QgdHNpemUgPSBtLT50b3BzaXplICs9IHBzaXplOworICAgICAgICBtLT50b3AgPSBwOworICAgICAgICBwLT5oZWFkID0gdHNpemUgfCBQSU5VU0VfQklUOworICAgICAgICBpZiAocCA9PSBtLT5kdikgeworICAgICAgICAgIG0tPmR2ID0gMDsKKyAgICAgICAgICBtLT5kdnNpemUgPSAwOworICAgICAgICB9CisgICAgICAgIHJldHVybjsKKyAgICAgIH0KKyAgICAgIGVsc2UgaWYgKG5leHQgPT0gbS0+ZHYpIHsKKyAgICAgICAgc2l6ZV90IGRzaXplID0gbS0+ZHZzaXplICs9IHBzaXplOworICAgICAgICBtLT5kdiA9IHA7CisgICAgICAgIHNldF9zaXplX2FuZF9waW51c2Vfb2ZfZnJlZV9jaHVuayhwLCBkc2l6ZSk7CisgICAgICAgIHJldHVybjsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworICAgICAgICBzaXplX3QgbnNpemUgPSBjaHVua3NpemUobmV4dCk7CisgICAgICAgIHBzaXplICs9IG5zaXplOworICAgICAgICB1bmxpbmtfY2h1bmsobSwgbmV4dCwgbnNpemUpOworICAgICAgICBzZXRfc2l6ZV9hbmRfcGludXNlX29mX2ZyZWVfY2h1bmsocCwgcHNpemUpOworICAgICAgICBpZiAocCA9PSBtLT5kdikgeworICAgICAgICAgIG0tPmR2c2l6ZSA9IHBzaXplOworICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIHNldF9mcmVlX3dpdGhfcGludXNlKHAsIHBzaXplLCBuZXh0KTsKKyAgICB9CisgICAgaW5zZXJ0X2NodW5rKG0sIHAsIHBzaXplKTsKKyAgfQorICBlbHNlIHsKKyAgICBDT1JSVVBUSU9OX0VSUk9SX0FDVElPTihtKTsKKyAgfQorfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIG1hbGxvYyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogYWxsb2NhdGUgYSBsYXJnZSByZXF1ZXN0IGZyb20gdGhlIGJlc3QgZml0dGluZyBjaHVuayBpbiBhIHRyZWViaW4gKi8KK3N0YXRpYyB2b2lkKiB0bWFsbG9jX2xhcmdlKG1zdGF0ZSBtLCBzaXplX3QgbmIpIHsKKyAgdGNodW5rcHRyIHYgPSAwOworICBzaXplX3QgcnNpemUgPSAtbmI7IC8qIFVuc2lnbmVkIG5lZ2F0aW9uICovCisgIHRjaHVua3B0ciB0OworICBiaW5kZXhfdCBpZHg7CisgIGNvbXB1dGVfdHJlZV9pbmRleChuYiwgaWR4KTsKKyAgaWYgKCh0ID0gKnRyZWViaW5fYXQobSwgaWR4KSkgIT0gMCkgeworICAgIC8qIFRyYXZlcnNlIHRyZWUgZm9yIHRoaXMgYmluIGxvb2tpbmcgZm9yIG5vZGUgd2l0aCBzaXplID09IG5iICovCisgICAgc2l6ZV90IHNpemViaXRzID0gbmIgPDwgbGVmdHNoaWZ0X2Zvcl90cmVlX2luZGV4KGlkeCk7CisgICAgdGNodW5rcHRyIHJzdCA9IDA7ICAvKiBUaGUgZGVlcGVzdCB1bnRha2VuIHJpZ2h0IHN1YnRyZWUgKi8KKyAgICBmb3IgKDs7KSB7CisgICAgICB0Y2h1bmtwdHIgcnQ7CisgICAgICBzaXplX3QgdHJlbSA9IGNodW5rc2l6ZSh0KSAtIG5iOworICAgICAgaWYgKHRyZW0gPCByc2l6ZSkgeworICAgICAgICB2ID0gdDsKKyAgICAgICAgaWYgKChyc2l6ZSA9IHRyZW0pID09IDApCisgICAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBydCA9IHQtPmNoaWxkWzFdOworICAgICAgdCA9IHQtPmNoaWxkWyhzaXplYml0cyA+PiAoU0laRV9UX0JJVFNJWkUtU0laRV9UX09ORSkpICYgMV07CisgICAgICBpZiAocnQgIT0gMCAmJiBydCAhPSB0KQorICAgICAgICByc3QgPSBydDsKKyAgICAgIGlmICh0ID09IDApIHsKKyAgICAgICAgdCA9IHJzdDsgLyogc2V0IHQgdG8gbGVhc3Qgc3VidHJlZSBob2xkaW5nIHNpemVzID4gbmIgKi8KKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICBzaXplYml0cyA8PD0gMTsKKyAgICB9CisgIH0KKyAgaWYgKHQgPT0gMCAmJiB2ID09IDApIHsgLyogc2V0IHQgdG8gcm9vdCBvZiBuZXh0IG5vbi1lbXB0eSB0cmVlYmluICovCisgICAgYmlubWFwX3QgbGVmdGJpdHMgPSBsZWZ0X2JpdHMoaWR4MmJpdChpZHgpKSAmIG0tPnRyZWVtYXA7CisgICAgaWYgKGxlZnRiaXRzICE9IDApIHsKKyAgICAgIGJpbmRleF90IGk7CisgICAgICBiaW5tYXBfdCBsZWFzdGJpdCA9IGxlYXN0X2JpdChsZWZ0Yml0cyk7CisgICAgICBjb21wdXRlX2JpdDJpZHgobGVhc3RiaXQsIGkpOworICAgICAgdCA9ICp0cmVlYmluX2F0KG0sIGkpOworICAgIH0KKyAgfQorCisgIHdoaWxlICh0ICE9IDApIHsgLyogZmluZCBzbWFsbGVzdCBvZiB0cmVlIG9yIHN1YnRyZWUgKi8KKyAgICBzaXplX3QgdHJlbSA9IGNodW5rc2l6ZSh0KSAtIG5iOworICAgIGlmICh0cmVtIDwgcnNpemUpIHsKKyAgICAgIHJzaXplID0gdHJlbTsKKyAgICAgIHYgPSB0OworICAgIH0KKyAgICB0ID0gbGVmdG1vc3RfY2hpbGQodCk7CisgIH0KKworICAvKiAgSWYgZHYgaXMgYSBiZXR0ZXIgZml0LCByZXR1cm4gMCBzbyBtYWxsb2Mgd2lsbCB1c2UgaXQgKi8KKyAgaWYgKHYgIT0gMCAmJiByc2l6ZSA8IChzaXplX3QpKG0tPmR2c2l6ZSAtIG5iKSkgeworICAgIGlmIChSVENIRUNLKG9rX2FkZHJlc3MobSwgdikpKSB7IC8qIHNwbGl0ICovCisgICAgICBtY2h1bmtwdHIgciA9IGNodW5rX3BsdXNfb2Zmc2V0KHYsIG5iKTsKKyAgICAgIGFzc2VydChjaHVua3NpemUodikgPT0gcnNpemUgKyBuYik7CisgICAgICBpZiAoUlRDSEVDSyhva19uZXh0KHYsIHIpKSkgeworICAgICAgICB1bmxpbmtfbGFyZ2VfY2h1bmsobSwgdik7CisgICAgICAgIGlmIChyc2l6ZSA8IE1JTl9DSFVOS19TSVpFKQorICAgICAgICAgIHNldF9pbnVzZV9hbmRfcGludXNlKG0sIHYsIChyc2l6ZSArIG5iKSk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgIHNldF9zaXplX2FuZF9waW51c2Vfb2ZfaW51c2VfY2h1bmsobSwgdiwgbmIpOworICAgICAgICAgIHNldF9zaXplX2FuZF9waW51c2Vfb2ZfZnJlZV9jaHVuayhyLCByc2l6ZSk7CisgICAgICAgICAgaW5zZXJ0X2NodW5rKG0sIHIsIHJzaXplKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gY2h1bmsybWVtKHYpOworICAgICAgfQorICAgIH0KKyAgICBDT1JSVVBUSU9OX0VSUk9SX0FDVElPTihtKTsKKyAgfQorICByZXR1cm4gMDsKK30KKworLyogYWxsb2NhdGUgYSBzbWFsbCByZXF1ZXN0IGZyb20gdGhlIGJlc3QgZml0dGluZyBjaHVuayBpbiBhIHRyZWViaW4gKi8KK3N0YXRpYyB2b2lkKiB0bWFsbG9jX3NtYWxsKG1zdGF0ZSBtLCBzaXplX3QgbmIpIHsKKyAgdGNodW5rcHRyIHQsIHY7CisgIHNpemVfdCByc2l6ZTsKKyAgYmluZGV4X3QgaTsKKyAgYmlubWFwX3QgbGVhc3RiaXQgPSBsZWFzdF9iaXQobS0+dHJlZW1hcCk7CisgIGNvbXB1dGVfYml0MmlkeChsZWFzdGJpdCwgaSk7CisgIHYgPSB0ID0gKnRyZWViaW5fYXQobSwgaSk7CisgIHJzaXplID0gY2h1bmtzaXplKHQpIC0gbmI7CisKKyAgd2hpbGUgKCh0ID0gbGVmdG1vc3RfY2hpbGQodCkpICE9IDApIHsKKyAgICBzaXplX3QgdHJlbSA9IGNodW5rc2l6ZSh0KSAtIG5iOworICAgIGlmICh0cmVtIDwgcnNpemUpIHsKKyAgICAgIHJzaXplID0gdHJlbTsKKyAgICAgIHYgPSB0OworICAgIH0KKyAgfQorCisgIGlmIChSVENIRUNLKG9rX2FkZHJlc3MobSwgdikpKSB7CisgICAgbWNodW5rcHRyIHIgPSBjaHVua19wbHVzX29mZnNldCh2LCBuYik7CisgICAgYXNzZXJ0KGNodW5rc2l6ZSh2KSA9PSByc2l6ZSArIG5iKTsKKyAgICBpZiAoUlRDSEVDSyhva19uZXh0KHYsIHIpKSkgeworICAgICAgdW5saW5rX2xhcmdlX2NodW5rKG0sIHYpOworICAgICAgaWYgKHJzaXplIDwgTUlOX0NIVU5LX1NJWkUpCisgICAgICAgIHNldF9pbnVzZV9hbmRfcGludXNlKG0sIHYsIChyc2l6ZSArIG5iKSk7CisgICAgICBlbHNlIHsKKyAgICAgICAgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9pbnVzZV9jaHVuayhtLCB2LCBuYik7CisgICAgICAgIHNldF9zaXplX2FuZF9waW51c2Vfb2ZfZnJlZV9jaHVuayhyLCByc2l6ZSk7CisgICAgICAgIHJlcGxhY2VfZHYobSwgciwgcnNpemUpOworICAgICAgfQorICAgICAgcmV0dXJuIGNodW5rMm1lbSh2KTsKKyAgICB9CisgIH0KKworICBDT1JSVVBUSU9OX0VSUk9SX0FDVElPTihtKTsKKyAgcmV0dXJuIDA7Cit9CisKKyNpZiAhT05MWV9NU1BBQ0VTCisKK3ZvaWQqIGRsbWFsbG9jKHNpemVfdCBieXRlcykgeworICAvKgorICAgICBCYXNpYyBhbGdvcml0aG06CisgICAgIElmIGEgc21hbGwgcmVxdWVzdCAoPCAyNTYgYnl0ZXMgbWludXMgcGVyLWNodW5rIG92ZXJoZWFkKToKKyAgICAgICAxLiBJZiBvbmUgZXhpc3RzLCB1c2UgYSByZW1haW5kZXJsZXNzIGNodW5rIGluIGFzc29jaWF0ZWQgc21hbGxiaW4uCisgICAgICAgICAgKFJlbWFpbmRlcmxlc3MgbWVhbnMgdGhhdCB0aGVyZSBhcmUgdG9vIGZldyBleGNlc3MgYnl0ZXMgdG8KKyAgICAgICAgICByZXByZXNlbnQgYXMgYSBjaHVuay4pCisgICAgICAgMi4gSWYgaXQgaXMgYmlnIGVub3VnaCwgdXNlIHRoZSBkdiBjaHVuaywgd2hpY2ggaXMgbm9ybWFsbHkgdGhlCisgICAgICAgICAgY2h1bmsgYWRqYWNlbnQgdG8gdGhlIG9uZSB1c2VkIGZvciB0aGUgbW9zdCByZWNlbnQgc21hbGwgcmVxdWVzdC4KKyAgICAgICAzLiBJZiBvbmUgZXhpc3RzLCBzcGxpdCB0aGUgc21hbGxlc3QgYXZhaWxhYmxlIGNodW5rIGluIGEgYmluLAorICAgICAgICAgIHNhdmluZyByZW1haW5kZXIgaW4gZHYuCisgICAgICAgNC4gSWYgaXQgaXMgYmlnIGVub3VnaCwgdXNlIHRoZSB0b3AgY2h1bmsuCisgICAgICAgNS4gSWYgYXZhaWxhYmxlLCBnZXQgbWVtb3J5IGZyb20gc3lzdGVtIGFuZCB1c2UgaXQKKyAgICAgT3RoZXJ3aXNlLCBmb3IgYSBsYXJnZSByZXF1ZXN0OgorICAgICAgIDEuIEZpbmQgdGhlIHNtYWxsZXN0IGF2YWlsYWJsZSBiaW5uZWQgY2h1bmsgdGhhdCBmaXRzLCBhbmQgdXNlIGl0CisgICAgICAgICAgaWYgaXQgaXMgYmV0dGVyIGZpdHRpbmcgdGhhbiBkdiBjaHVuaywgc3BsaXR0aW5nIGlmIG5lY2Vzc2FyeS4KKyAgICAgICAyLiBJZiBiZXR0ZXIgZml0dGluZyB0aGFuIGFueSBiaW5uZWQgY2h1bmssIHVzZSB0aGUgZHYgY2h1bmsuCisgICAgICAgMy4gSWYgaXQgaXMgYmlnIGVub3VnaCwgdXNlIHRoZSB0b3AgY2h1bmsuCisgICAgICAgNC4gSWYgcmVxdWVzdCBzaXplID49IG1tYXAgdGhyZXNob2xkLCB0cnkgdG8gZGlyZWN0bHkgbW1hcCB0aGlzIGNodW5rLgorICAgICAgIDUuIElmIGF2YWlsYWJsZSwgZ2V0IG1lbW9yeSBmcm9tIHN5c3RlbSBhbmQgdXNlIGl0CisKKyAgICAgVGhlIHVnbHkgZ290bydzIGhlcmUgZW5zdXJlIHRoYXQgcG9zdGFjdGlvbiBvY2N1cnMgYWxvbmcgYWxsIHBhdGhzLgorICAqLworCisjaWYgVVNFX0xPQ0tTCisgIGVuc3VyZV9pbml0aWFsaXphdGlvbigpOyAvKiBpbml0aWFsaXplIGluIHN5c19hbGxvYyBpZiBub3QgdXNpbmcgbG9ja3MgKi8KKyNlbmRpZgorCisgIGlmICghUFJFQUNUSU9OKGdtKSkgeworICAgIHZvaWQqIG1lbTsKKyAgICBzaXplX3QgbmI7CisgICAgaWYgKGJ5dGVzIDw9IE1BWF9TTUFMTF9SRVFVRVNUKSB7CisgICAgICBiaW5kZXhfdCBpZHg7CisgICAgICBiaW5tYXBfdCBzbWFsbGJpdHM7CisgICAgICBuYiA9IChieXRlcyA8IE1JTl9SRVFVRVNUKT8gTUlOX0NIVU5LX1NJWkUgOiBwYWRfcmVxdWVzdChieXRlcyk7CisgICAgICBpZHggPSBzbWFsbF9pbmRleChuYik7CisgICAgICBzbWFsbGJpdHMgPSBnbS0+c21hbGxtYXAgPj4gaWR4OworCisgICAgICBpZiAoKHNtYWxsYml0cyAmIDB4M1UpICE9IDApIHsgLyogUmVtYWluZGVybGVzcyBmaXQgdG8gYSBzbWFsbGJpbi4gKi8KKyAgICAgICAgbWNodW5rcHRyIGIsIHA7CisgICAgICAgIGlkeCArPSB+c21hbGxiaXRzICYgMTsgICAgICAgLyogVXNlcyBuZXh0IGJpbiBpZiBpZHggZW1wdHkgKi8KKyAgICAgICAgYiA9IHNtYWxsYmluX2F0KGdtLCBpZHgpOworICAgICAgICBwID0gYi0+ZmQ7CisgICAgICAgIGFzc2VydChjaHVua3NpemUocCkgPT0gc21hbGxfaW5kZXgyc2l6ZShpZHgpKTsKKyAgICAgICAgdW5saW5rX2ZpcnN0X3NtYWxsX2NodW5rKGdtLCBiLCBwLCBpZHgpOworICAgICAgICBzZXRfaW51c2VfYW5kX3BpbnVzZShnbSwgcCwgc21hbGxfaW5kZXgyc2l6ZShpZHgpKTsKKyAgICAgICAgbWVtID0gY2h1bmsybWVtKHApOworICAgICAgICBjaGVja19tYWxsb2NlZF9jaHVuayhnbSwgbWVtLCBuYik7CisgICAgICAgIGdvdG8gcG9zdGFjdGlvbjsKKyAgICAgIH0KKworICAgICAgZWxzZSBpZiAobmIgPiBnbS0+ZHZzaXplKSB7CisgICAgICAgIGlmIChzbWFsbGJpdHMgIT0gMCkgeyAvKiBVc2UgY2h1bmsgaW4gbmV4dCBub25lbXB0eSBzbWFsbGJpbiAqLworICAgICAgICAgIG1jaHVua3B0ciBiLCBwLCByOworICAgICAgICAgIHNpemVfdCByc2l6ZTsKKyAgICAgICAgICBiaW5kZXhfdCBpOworICAgICAgICAgIGJpbm1hcF90IGxlZnRiaXRzID0gKHNtYWxsYml0cyA8PCBpZHgpICYgbGVmdF9iaXRzKGlkeDJiaXQoaWR4KSk7CisgICAgICAgICAgYmlubWFwX3QgbGVhc3RiaXQgPSBsZWFzdF9iaXQobGVmdGJpdHMpOworICAgICAgICAgIGNvbXB1dGVfYml0MmlkeChsZWFzdGJpdCwgaSk7CisgICAgICAgICAgYiA9IHNtYWxsYmluX2F0KGdtLCBpKTsKKyAgICAgICAgICBwID0gYi0+ZmQ7CisgICAgICAgICAgYXNzZXJ0KGNodW5rc2l6ZShwKSA9PSBzbWFsbF9pbmRleDJzaXplKGkpKTsKKyAgICAgICAgICB1bmxpbmtfZmlyc3Rfc21hbGxfY2h1bmsoZ20sIGIsIHAsIGkpOworICAgICAgICAgIHJzaXplID0gc21hbGxfaW5kZXgyc2l6ZShpKSAtIG5iOworICAgICAgICAgIC8qIEZpdCBoZXJlIGNhbm5vdCBiZSByZW1haW5kZXJsZXNzIGlmIDRieXRlIHNpemVzICovCisgICAgICAgICAgaWYgKFNJWkVfVF9TSVpFICE9IDQgJiYgcnNpemUgPCBNSU5fQ0hVTktfU0laRSkKKyAgICAgICAgICAgIHNldF9pbnVzZV9hbmRfcGludXNlKGdtLCBwLCBzbWFsbF9pbmRleDJzaXplKGkpKTsKKyAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHNldF9zaXplX2FuZF9waW51c2Vfb2ZfaW51c2VfY2h1bmsoZ20sIHAsIG5iKTsKKyAgICAgICAgICAgIHIgPSBjaHVua19wbHVzX29mZnNldChwLCBuYik7CisgICAgICAgICAgICBzZXRfc2l6ZV9hbmRfcGludXNlX29mX2ZyZWVfY2h1bmsociwgcnNpemUpOworICAgICAgICAgICAgcmVwbGFjZV9kdihnbSwgciwgcnNpemUpOworICAgICAgICAgIH0KKyAgICAgICAgICBtZW0gPSBjaHVuazJtZW0ocCk7CisgICAgICAgICAgY2hlY2tfbWFsbG9jZWRfY2h1bmsoZ20sIG1lbSwgbmIpOworICAgICAgICAgIGdvdG8gcG9zdGFjdGlvbjsKKyAgICAgICAgfQorCisgICAgICAgIGVsc2UgaWYgKGdtLT50cmVlbWFwICE9IDAgJiYgKG1lbSA9IHRtYWxsb2Nfc21hbGwoZ20sIG5iKSkgIT0gMCkgeworICAgICAgICAgIGNoZWNrX21hbGxvY2VkX2NodW5rKGdtLCBtZW0sIG5iKTsKKyAgICAgICAgICBnb3RvIHBvc3RhY3Rpb247CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAoYnl0ZXMgPj0gTUFYX1JFUVVFU1QpCisgICAgICBuYiA9IE1BWF9TSVpFX1Q7IC8qIFRvbyBiaWcgdG8gYWxsb2NhdGUuIEZvcmNlIGZhaWx1cmUgKGluIHN5cyBhbGxvYykgKi8KKyAgICBlbHNlIHsKKyAgICAgIG5iID0gcGFkX3JlcXVlc3QoYnl0ZXMpOworICAgICAgaWYgKGdtLT50cmVlbWFwICE9IDAgJiYgKG1lbSA9IHRtYWxsb2NfbGFyZ2UoZ20sIG5iKSkgIT0gMCkgeworICAgICAgICBjaGVja19tYWxsb2NlZF9jaHVuayhnbSwgbWVtLCBuYik7CisgICAgICAgIGdvdG8gcG9zdGFjdGlvbjsKKyAgICAgIH0KKyAgICB9CisKKyAgICBpZiAobmIgPD0gZ20tPmR2c2l6ZSkgeworICAgICAgc2l6ZV90IHJzaXplID0gZ20tPmR2c2l6ZSAtIG5iOworICAgICAgbWNodW5rcHRyIHAgPSBnbS0+ZHY7CisgICAgICBpZiAocnNpemUgPj0gTUlOX0NIVU5LX1NJWkUpIHsgLyogc3BsaXQgZHYgKi8KKyAgICAgICAgbWNodW5rcHRyIHIgPSBnbS0+ZHYgPSBjaHVua19wbHVzX29mZnNldChwLCBuYik7CisgICAgICAgIGdtLT5kdnNpemUgPSByc2l6ZTsKKyAgICAgICAgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9mcmVlX2NodW5rKHIsIHJzaXplKTsKKyAgICAgICAgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9pbnVzZV9jaHVuayhnbSwgcCwgbmIpOworICAgICAgfQorICAgICAgZWxzZSB7IC8qIGV4aGF1c3QgZHYgKi8KKyAgICAgICAgc2l6ZV90IGR2cyA9IGdtLT5kdnNpemU7CisgICAgICAgIGdtLT5kdnNpemUgPSAwOworICAgICAgICBnbS0+ZHYgPSAwOworICAgICAgICBzZXRfaW51c2VfYW5kX3BpbnVzZShnbSwgcCwgZHZzKTsKKyAgICAgIH0KKyAgICAgIG1lbSA9IGNodW5rMm1lbShwKTsKKyAgICAgIGNoZWNrX21hbGxvY2VkX2NodW5rKGdtLCBtZW0sIG5iKTsKKyAgICAgIGdvdG8gcG9zdGFjdGlvbjsKKyAgICB9CisKKyAgICBlbHNlIGlmIChuYiA8IGdtLT50b3BzaXplKSB7IC8qIFNwbGl0IHRvcCAqLworICAgICAgc2l6ZV90IHJzaXplID0gZ20tPnRvcHNpemUgLT0gbmI7CisgICAgICBtY2h1bmtwdHIgcCA9IGdtLT50b3A7CisgICAgICBtY2h1bmtwdHIgciA9IGdtLT50b3AgPSBjaHVua19wbHVzX29mZnNldChwLCBuYik7CisgICAgICByLT5oZWFkID0gcnNpemUgfCBQSU5VU0VfQklUOworICAgICAgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9pbnVzZV9jaHVuayhnbSwgcCwgbmIpOworICAgICAgbWVtID0gY2h1bmsybWVtKHApOworICAgICAgY2hlY2tfdG9wX2NodW5rKGdtLCBnbS0+dG9wKTsKKyAgICAgIGNoZWNrX21hbGxvY2VkX2NodW5rKGdtLCBtZW0sIG5iKTsKKyAgICAgIGdvdG8gcG9zdGFjdGlvbjsKKyAgICB9CisKKyAgICBtZW0gPSBzeXNfYWxsb2MoZ20sIG5iKTsKKworICBwb3N0YWN0aW9uOgorICAgIFBPU1RBQ1RJT04oZ20pOworICAgIHJldHVybiBtZW07CisgIH0KKworICByZXR1cm4gMDsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBmcmVlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCit2b2lkIGRsZnJlZSh2b2lkKiBtZW0pIHsKKyAgLyoKKyAgICAgQ29uc29saWRhdGUgZnJlZWQgY2h1bmtzIHdpdGggcHJlY2VlZGluZyBvciBzdWNjZWVkaW5nIGJvcmRlcmluZworICAgICBmcmVlIGNodW5rcywgaWYgdGhleSBleGlzdCwgYW5kIHRoZW4gcGxhY2UgaW4gYSBiaW4uICBJbnRlcm1peGVkCisgICAgIHdpdGggc3BlY2lhbCBjYXNlcyBmb3IgdG9wLCBkdiwgbW1hcHBlZCBjaHVua3MsIGFuZCB1c2FnZSBlcnJvcnMuCisgICovCisKKyAgaWYgKG1lbSAhPSAwKSB7CisgICAgbWNodW5rcHRyIHAgID0gbWVtMmNodW5rKG1lbSk7CisjaWYgRk9PVEVSUworICAgIG1zdGF0ZSBmbSA9IGdldF9tc3RhdGVfZm9yKHApOworICAgIGlmICghb2tfbWFnaWMoZm0pKSB7CisgICAgICBVU0FHRV9FUlJPUl9BQ1RJT04oZm0sIHApOworICAgICAgcmV0dXJuOworICAgIH0KKyNlbHNlIC8qIEZPT1RFUlMgKi8KKyNkZWZpbmUgZm0gZ20KKyNlbmRpZiAvKiBGT09URVJTICovCisgICAgaWYgKCFQUkVBQ1RJT04oZm0pKSB7CisgICAgICBjaGVja19pbnVzZV9jaHVuayhmbSwgcCk7CisgICAgICBpZiAoUlRDSEVDSyhva19hZGRyZXNzKGZtLCBwKSAmJiBva19pbnVzZShwKSkpIHsKKyAgICAgICAgc2l6ZV90IHBzaXplID0gY2h1bmtzaXplKHApOworICAgICAgICBtY2h1bmtwdHIgbmV4dCA9IGNodW5rX3BsdXNfb2Zmc2V0KHAsIHBzaXplKTsKKyAgICAgICAgaWYgKCFwaW51c2UocCkpIHsKKyAgICAgICAgICBzaXplX3QgcHJldnNpemUgPSBwLT5wcmV2X2Zvb3Q7CisgICAgICAgICAgaWYgKGlzX21tYXBwZWQocCkpIHsKKyAgICAgICAgICAgIHBzaXplICs9IHByZXZzaXplICsgTU1BUF9GT09UX1BBRDsKKyAgICAgICAgICAgIGlmIChDQUxMX01VTk1BUCgoY2hhciopcCAtIHByZXZzaXplLCBwc2l6ZSkgPT0gMCkKKyAgICAgICAgICAgICAgZm0tPmZvb3RwcmludCAtPSBwc2l6ZTsKKyAgICAgICAgICAgIGdvdG8gcG9zdGFjdGlvbjsKKyAgICAgICAgICB9CisgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBtY2h1bmtwdHIgcHJldiA9IGNodW5rX21pbnVzX29mZnNldChwLCBwcmV2c2l6ZSk7CisgICAgICAgICAgICBwc2l6ZSArPSBwcmV2c2l6ZTsKKyAgICAgICAgICAgIHAgPSBwcmV2OworICAgICAgICAgICAgaWYgKFJUQ0hFQ0sob2tfYWRkcmVzcyhmbSwgcHJldikpKSB7IC8qIGNvbnNvbGlkYXRlIGJhY2t3YXJkICovCisgICAgICAgICAgICAgIGlmIChwICE9IGZtLT5kdikgeworICAgICAgICAgICAgICAgIHVubGlua19jaHVuayhmbSwgcCwgcHJldnNpemUpOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIGVsc2UgaWYgKChuZXh0LT5oZWFkICYgSU5VU0VfQklUUykgPT0gSU5VU0VfQklUUykgeworICAgICAgICAgICAgICAgIGZtLT5kdnNpemUgPSBwc2l6ZTsKKyAgICAgICAgICAgICAgICBzZXRfZnJlZV93aXRoX3BpbnVzZShwLCBwc2l6ZSwgbmV4dCk7CisgICAgICAgICAgICAgICAgZ290byBwb3N0YWN0aW9uOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgIGdvdG8gZXJyb3JhY3Rpb247CisgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKFJUQ0hFQ0sob2tfbmV4dChwLCBuZXh0KSAmJiBva19waW51c2UobmV4dCkpKSB7CisgICAgICAgICAgaWYgKCFjaW51c2UobmV4dCkpIHsgIC8qIGNvbnNvbGlkYXRlIGZvcndhcmQgKi8KKyAgICAgICAgICAgIGlmIChuZXh0ID09IGZtLT50b3ApIHsKKyAgICAgICAgICAgICAgc2l6ZV90IHRzaXplID0gZm0tPnRvcHNpemUgKz0gcHNpemU7CisgICAgICAgICAgICAgIGZtLT50b3AgPSBwOworICAgICAgICAgICAgICBwLT5oZWFkID0gdHNpemUgfCBQSU5VU0VfQklUOworICAgICAgICAgICAgICBpZiAocCA9PSBmbS0+ZHYpIHsKKyAgICAgICAgICAgICAgICBmbS0+ZHYgPSAwOworICAgICAgICAgICAgICAgIGZtLT5kdnNpemUgPSAwOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIGlmIChzaG91bGRfdHJpbShmbSwgdHNpemUpKQorICAgICAgICAgICAgICAgIHN5c190cmltKGZtLCAwKTsKKyAgICAgICAgICAgICAgZ290byBwb3N0YWN0aW9uOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAobmV4dCA9PSBmbS0+ZHYpIHsKKyAgICAgICAgICAgICAgc2l6ZV90IGRzaXplID0gZm0tPmR2c2l6ZSArPSBwc2l6ZTsKKyAgICAgICAgICAgICAgZm0tPmR2ID0gcDsKKyAgICAgICAgICAgICAgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9mcmVlX2NodW5rKHAsIGRzaXplKTsKKyAgICAgICAgICAgICAgZ290byBwb3N0YWN0aW9uOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgIHNpemVfdCBuc2l6ZSA9IGNodW5rc2l6ZShuZXh0KTsKKyAgICAgICAgICAgICAgcHNpemUgKz0gbnNpemU7CisgICAgICAgICAgICAgIHVubGlua19jaHVuayhmbSwgbmV4dCwgbnNpemUpOworICAgICAgICAgICAgICBzZXRfc2l6ZV9hbmRfcGludXNlX29mX2ZyZWVfY2h1bmsocCwgcHNpemUpOworICAgICAgICAgICAgICBpZiAocCA9PSBmbS0+ZHYpIHsKKyAgICAgICAgICAgICAgICBmbS0+ZHZzaXplID0gcHNpemU7CisgICAgICAgICAgICAgICAgZ290byBwb3N0YWN0aW9uOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNldF9mcmVlX3dpdGhfcGludXNlKHAsIHBzaXplLCBuZXh0KTsKKworICAgICAgICAgIGlmIChpc19zbWFsbChwc2l6ZSkpIHsKKyAgICAgICAgICAgIGluc2VydF9zbWFsbF9jaHVuayhmbSwgcCwgcHNpemUpOworICAgICAgICAgICAgY2hlY2tfZnJlZV9jaHVuayhmbSwgcCk7CisgICAgICAgICAgfQorICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgdGNodW5rcHRyIHRwID0gKHRjaHVua3B0cilwOworICAgICAgICAgICAgaW5zZXJ0X2xhcmdlX2NodW5rKGZtLCB0cCwgcHNpemUpOworICAgICAgICAgICAgY2hlY2tfZnJlZV9jaHVuayhmbSwgcCk7CisgICAgICAgICAgICBpZiAoLS1mbS0+cmVsZWFzZV9jaGVja3MgPT0gMCkKKyAgICAgICAgICAgICAgcmVsZWFzZV91bnVzZWRfc2VnbWVudHMoZm0pOworICAgICAgICAgIH0KKyAgICAgICAgICBnb3RvIHBvc3RhY3Rpb247CisgICAgICAgIH0KKyAgICAgIH0KKyAgICBlcnJvcmFjdGlvbjoKKyAgICAgIFVTQUdFX0VSUk9SX0FDVElPTihmbSwgcCk7CisgICAgcG9zdGFjdGlvbjoKKyAgICAgIFBPU1RBQ1RJT04oZm0pOworICAgIH0KKyAgfQorI2lmICFGT09URVJTCisjdW5kZWYgZm0KKyNlbmRpZiAvKiBGT09URVJTICovCit9CisKK3ZvaWQqIGRsY2FsbG9jKHNpemVfdCBuX2VsZW1lbnRzLCBzaXplX3QgZWxlbV9zaXplKSB7CisgIHZvaWQqIG1lbTsKKyAgc2l6ZV90IHJlcSA9IDA7CisgIGlmIChuX2VsZW1lbnRzICE9IDApIHsKKyAgICByZXEgPSBuX2VsZW1lbnRzICogZWxlbV9zaXplOworICAgIGlmICgoKG5fZWxlbWVudHMgfCBlbGVtX3NpemUpICYgfihzaXplX3QpMHhmZmZmKSAmJgorICAgICAgICAocmVxIC8gbl9lbGVtZW50cyAhPSBlbGVtX3NpemUpKQorICAgICAgcmVxID0gTUFYX1NJWkVfVDsgLyogZm9yY2UgZG93bnN0cmVhbSBmYWlsdXJlIG9uIG92ZXJmbG93ICovCisgIH0KKyAgbWVtID0gZGxtYWxsb2MocmVxKTsKKyAgaWYgKG1lbSAhPSAwICYmIGNhbGxvY19tdXN0X2NsZWFyKG1lbTJjaHVuayhtZW0pKSkKKyAgICBtZW1zZXQobWVtLCAwLCByZXEpOworICByZXR1cm4gbWVtOworfQorCisjZW5kaWYgLyogIU9OTFlfTVNQQUNFUyAqLworCisvKiAtLS0tLS0tLS0tLS0gSW50ZXJuYWwgc3VwcG9ydCBmb3IgcmVhbGxvYywgbWVtYWxpZ24sIGV0YyAtLS0tLS0tLS0tLS0tLSAqLworCisvKiBUcnkgdG8gcmVhbGxvYzsgb25seSBpbi1wbGFjZSB1bmxlc3MgY2FuX21vdmUgdHJ1ZSAqLworc3RhdGljIG1jaHVua3B0ciB0cnlfcmVhbGxvY19jaHVuayhtc3RhdGUgbSwgbWNodW5rcHRyIHAsIHNpemVfdCBuYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNhbl9tb3ZlKSB7CisgIG1jaHVua3B0ciBuZXdwID0gMDsKKyAgc2l6ZV90IG9sZHNpemUgPSBjaHVua3NpemUocCk7CisgIG1jaHVua3B0ciBuZXh0ID0gY2h1bmtfcGx1c19vZmZzZXQocCwgb2xkc2l6ZSk7CisgIGlmIChSVENIRUNLKG9rX2FkZHJlc3MobSwgcCkgJiYgb2tfaW51c2UocCkgJiYKKyAgICAgICAgICAgICAgb2tfbmV4dChwLCBuZXh0KSAmJiBva19waW51c2UobmV4dCkpKSB7CisgICAgaWYgKGlzX21tYXBwZWQocCkpIHsKKyAgICAgIG5ld3AgPSBtbWFwX3Jlc2l6ZShtLCBwLCBuYiwgY2FuX21vdmUpOworICAgIH0KKyAgICBlbHNlIGlmIChvbGRzaXplID49IG5iKSB7ICAgICAgICAgICAgIC8qIGFscmVhZHkgYmlnIGVub3VnaCAqLworICAgICAgc2l6ZV90IHJzaXplID0gb2xkc2l6ZSAtIG5iOworICAgICAgaWYgKHJzaXplID49IE1JTl9DSFVOS19TSVpFKSB7ICAgICAgLyogc3BsaXQgb2ZmIHJlbWFpbmRlciAqLworICAgICAgICBtY2h1bmtwdHIgciA9IGNodW5rX3BsdXNfb2Zmc2V0KHAsIG5iKTsKKyAgICAgICAgc2V0X2ludXNlKG0sIHAsIG5iKTsKKyAgICAgICAgc2V0X2ludXNlKG0sIHIsIHJzaXplKTsKKyAgICAgICAgZGlzcG9zZV9jaHVuayhtLCByLCByc2l6ZSk7CisgICAgICB9CisgICAgICBuZXdwID0gcDsKKyAgICB9CisgICAgZWxzZSBpZiAobmV4dCA9PSBtLT50b3ApIHsgIC8qIGV4dGVuZCBpbnRvIHRvcCAqLworICAgICAgaWYgKG9sZHNpemUgKyBtLT50b3BzaXplID4gbmIpIHsKKyAgICAgICAgc2l6ZV90IG5ld3NpemUgPSBvbGRzaXplICsgbS0+dG9wc2l6ZTsKKyAgICAgICAgc2l6ZV90IG5ld3RvcHNpemUgPSBuZXdzaXplIC0gbmI7CisgICAgICAgIG1jaHVua3B0ciBuZXd0b3AgPSBjaHVua19wbHVzX29mZnNldChwLCBuYik7CisgICAgICAgIHNldF9pbnVzZShtLCBwLCBuYik7CisgICAgICAgIG5ld3RvcC0+aGVhZCA9IG5ld3RvcHNpemUgfFBJTlVTRV9CSVQ7CisgICAgICAgIG0tPnRvcCA9IG5ld3RvcDsKKyAgICAgICAgbS0+dG9wc2l6ZSA9IG5ld3RvcHNpemU7CisgICAgICAgIG5ld3AgPSBwOworICAgICAgfQorICAgIH0KKyAgICBlbHNlIGlmIChuZXh0ID09IG0tPmR2KSB7IC8qIGV4dGVuZCBpbnRvIGR2ICovCisgICAgICBzaXplX3QgZHZzID0gbS0+ZHZzaXplOworICAgICAgaWYgKG9sZHNpemUgKyBkdnMgPj0gbmIpIHsKKyAgICAgICAgc2l6ZV90IGRzaXplID0gb2xkc2l6ZSArIGR2cyAtIG5iOworICAgICAgICBpZiAoZHNpemUgPj0gTUlOX0NIVU5LX1NJWkUpIHsKKyAgICAgICAgICBtY2h1bmtwdHIgciA9IGNodW5rX3BsdXNfb2Zmc2V0KHAsIG5iKTsKKyAgICAgICAgICBtY2h1bmtwdHIgbiA9IGNodW5rX3BsdXNfb2Zmc2V0KHIsIGRzaXplKTsKKyAgICAgICAgICBzZXRfaW51c2UobSwgcCwgbmIpOworICAgICAgICAgIHNldF9zaXplX2FuZF9waW51c2Vfb2ZfZnJlZV9jaHVuayhyLCBkc2l6ZSk7CisgICAgICAgICAgY2xlYXJfcGludXNlKG4pOworICAgICAgICAgIG0tPmR2c2l6ZSA9IGRzaXplOworICAgICAgICAgIG0tPmR2ID0gcjsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsgLyogZXhoYXVzdCBkdiAqLworICAgICAgICAgIHNpemVfdCBuZXdzaXplID0gb2xkc2l6ZSArIGR2czsKKyAgICAgICAgICBzZXRfaW51c2UobSwgcCwgbmV3c2l6ZSk7CisgICAgICAgICAgbS0+ZHZzaXplID0gMDsKKyAgICAgICAgICBtLT5kdiA9IDA7CisgICAgICAgIH0KKyAgICAgICAgbmV3cCA9IHA7CisgICAgICB9CisgICAgfQorICAgIGVsc2UgaWYgKCFjaW51c2UobmV4dCkpIHsgLyogZXh0ZW5kIGludG8gbmV4dCBmcmVlIGNodW5rICovCisgICAgICBzaXplX3QgbmV4dHNpemUgPSBjaHVua3NpemUobmV4dCk7CisgICAgICBpZiAob2xkc2l6ZSArIG5leHRzaXplID49IG5iKSB7CisgICAgICAgIHNpemVfdCByc2l6ZSA9IG9sZHNpemUgKyBuZXh0c2l6ZSAtIG5iOworICAgICAgICB1bmxpbmtfY2h1bmsobSwgbmV4dCwgbmV4dHNpemUpOworICAgICAgICBpZiAocnNpemUgPCBNSU5fQ0hVTktfU0laRSkgeworICAgICAgICAgIHNpemVfdCBuZXdzaXplID0gb2xkc2l6ZSArIG5leHRzaXplOworICAgICAgICAgIHNldF9pbnVzZShtLCBwLCBuZXdzaXplKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICBtY2h1bmtwdHIgciA9IGNodW5rX3BsdXNfb2Zmc2V0KHAsIG5iKTsKKyAgICAgICAgICBzZXRfaW51c2UobSwgcCwgbmIpOworICAgICAgICAgIHNldF9pbnVzZShtLCByLCByc2l6ZSk7CisgICAgICAgICAgZGlzcG9zZV9jaHVuayhtLCByLCByc2l6ZSk7CisgICAgICAgIH0KKyAgICAgICAgbmV3cCA9IHA7CisgICAgICB9CisgICAgfQorICB9CisgIGVsc2UgeworICAgIFVTQUdFX0VSUk9SX0FDVElPTihtLCBjaHVuazJtZW0ocCkpOworICB9CisgIHJldHVybiBuZXdwOworfQorCitzdGF0aWMgdm9pZCogaW50ZXJuYWxfbWVtYWxpZ24obXN0YXRlIG0sIHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBieXRlcykgeworICB2b2lkKiBtZW0gPSAwOworICBpZiAoYWxpZ25tZW50IDwgIE1JTl9DSFVOS19TSVpFKSAvKiBtdXN0IGJlIGF0IGxlYXN0IGEgbWluaW11bSBjaHVuayBzaXplICovCisgICAgYWxpZ25tZW50ID0gTUlOX0NIVU5LX1NJWkU7CisgIGlmICgoYWxpZ25tZW50ICYgKGFsaWdubWVudC1TSVpFX1RfT05FKSkgIT0gMCkgey8qIEVuc3VyZSBhIHBvd2VyIG9mIDIgKi8KKyAgICBzaXplX3QgYSA9IE1BTExPQ19BTElHTk1FTlQgPDwgMTsKKyAgICB3aGlsZSAoYSA8IGFsaWdubWVudCkgYSA8PD0gMTsKKyAgICBhbGlnbm1lbnQgPSBhOworICB9CisgIGlmIChieXRlcyA+PSBNQVhfUkVRVUVTVCAtIGFsaWdubWVudCkgeworICAgIGlmIChtICE9IDApICB7IC8qIFRlc3QgaXNuJ3QgbmVlZGVkIGJ1dCBhdm9pZHMgY29tcGlsZXIgd2FybmluZyAqLworICAgICAgTUFMTE9DX0ZBSUxVUkVfQUNUSU9OOworICAgIH0KKyAgfQorICBlbHNlIHsKKyAgICBzaXplX3QgbmIgPSByZXF1ZXN0MnNpemUoYnl0ZXMpOworICAgIHNpemVfdCByZXEgPSBuYiArIGFsaWdubWVudCArIE1JTl9DSFVOS19TSVpFIC0gQ0hVTktfT1ZFUkhFQUQ7CisgICAgbWVtID0gaW50ZXJuYWxfbWFsbG9jKG0sIHJlcSk7CisgICAgaWYgKG1lbSAhPSAwKSB7CisgICAgICBtY2h1bmtwdHIgcCA9IG1lbTJjaHVuayhtZW0pOworICAgICAgaWYgKFBSRUFDVElPTihtKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgICBpZiAoKCgoc2l6ZV90KShtZW0pKSAmIChhbGlnbm1lbnQgLSAxKSkgIT0gMCkgeyAvKiBtaXNhbGlnbmVkICovCisgICAgICAgIC8qCisgICAgICAgICAgRmluZCBhbiBhbGlnbmVkIHNwb3QgaW5zaWRlIGNodW5rLiAgU2luY2Ugd2UgbmVlZCB0byBnaXZlCisgICAgICAgICAgYmFjayBsZWFkaW5nIHNwYWNlIGluIGEgY2h1bmsgb2YgYXQgbGVhc3QgTUlOX0NIVU5LX1NJWkUsIGlmCisgICAgICAgICAgdGhlIGZpcnN0IGNhbGN1bGF0aW9uIHBsYWNlcyB1cyBhdCBhIHNwb3Qgd2l0aCBsZXNzIHRoYW4KKyAgICAgICAgICBNSU5fQ0hVTktfU0laRSBsZWFkZXIsIHdlIGNhbiBtb3ZlIHRvIHRoZSBuZXh0IGFsaWduZWQgc3BvdC4KKyAgICAgICAgICBXZSd2ZSBhbGxvY2F0ZWQgZW5vdWdoIHRvdGFsIHJvb20gc28gdGhhdCB0aGlzIGlzIGFsd2F5cworICAgICAgICAgIHBvc3NpYmxlLgorICAgICAgICAqLworICAgICAgICBjaGFyKiBiciA9IChjaGFyKiltZW0yY2h1bmsoKHNpemVfdCkoKChzaXplX3QpKChjaGFyKiltZW0gKyBhbGlnbm1lbnQgLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNJWkVfVF9PTkUpKSAmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtYWxpZ25tZW50KSk7CisgICAgICAgIGNoYXIqIHBvcyA9ICgoc2l6ZV90KShiciAtIChjaGFyKikocCkpID49IE1JTl9DSFVOS19TSVpFKT8KKyAgICAgICAgICBiciA6IGJyK2FsaWdubWVudDsKKyAgICAgICAgbWNodW5rcHRyIG5ld3AgPSAobWNodW5rcHRyKXBvczsKKyAgICAgICAgc2l6ZV90IGxlYWRzaXplID0gcG9zIC0gKGNoYXIqKShwKTsKKyAgICAgICAgc2l6ZV90IG5ld3NpemUgPSBjaHVua3NpemUocCkgLSBsZWFkc2l6ZTsKKworICAgICAgICBpZiAoaXNfbW1hcHBlZChwKSkgeyAvKiBGb3IgbW1hcHBlZCBjaHVua3MsIGp1c3QgYWRqdXN0IG9mZnNldCAqLworICAgICAgICAgIG5ld3AtPnByZXZfZm9vdCA9IHAtPnByZXZfZm9vdCArIGxlYWRzaXplOworICAgICAgICAgIG5ld3AtPmhlYWQgPSBuZXdzaXplOworICAgICAgICB9CisgICAgICAgIGVsc2UgeyAvKiBPdGhlcndpc2UsIGdpdmUgYmFjayBsZWFkZXIsIHVzZSB0aGUgcmVzdCAqLworICAgICAgICAgIHNldF9pbnVzZShtLCBuZXdwLCBuZXdzaXplKTsKKyAgICAgICAgICBzZXRfaW51c2UobSwgcCwgbGVhZHNpemUpOworICAgICAgICAgIGRpc3Bvc2VfY2h1bmsobSwgcCwgbGVhZHNpemUpOworICAgICAgICB9CisgICAgICAgIHAgPSBuZXdwOworICAgICAgfQorCisgICAgICAvKiBHaXZlIGJhY2sgc3BhcmUgcm9vbSBhdCB0aGUgZW5kICovCisgICAgICBpZiAoIWlzX21tYXBwZWQocCkpIHsKKyAgICAgICAgc2l6ZV90IHNpemUgPSBjaHVua3NpemUocCk7CisgICAgICAgIGlmIChzaXplID4gbmIgKyBNSU5fQ0hVTktfU0laRSkgeworICAgICAgICAgIHNpemVfdCByZW1haW5kZXJfc2l6ZSA9IHNpemUgLSBuYjsKKyAgICAgICAgICBtY2h1bmtwdHIgcmVtYWluZGVyID0gY2h1bmtfcGx1c19vZmZzZXQocCwgbmIpOworICAgICAgICAgIHNldF9pbnVzZShtLCBwLCBuYik7CisgICAgICAgICAgc2V0X2ludXNlKG0sIHJlbWFpbmRlciwgcmVtYWluZGVyX3NpemUpOworICAgICAgICAgIGRpc3Bvc2VfY2h1bmsobSwgcmVtYWluZGVyLCByZW1haW5kZXJfc2l6ZSk7CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgbWVtID0gY2h1bmsybWVtKHApOworICAgICAgYXNzZXJ0IChjaHVua3NpemUocCkgPj0gbmIpOworICAgICAgYXNzZXJ0KCgoc2l6ZV90KW1lbSAmIChhbGlnbm1lbnQgLSAxKSkgPT0gMCk7CisgICAgICBjaGVja19pbnVzZV9jaHVuayhtLCBwKTsKKyAgICAgIFBPU1RBQ1RJT04obSk7CisgICAgfQorICB9CisgIHJldHVybiBtZW07Cit9CisKKy8qCisgIENvbW1vbiBzdXBwb3J0IGZvciBpbmRlcGVuZGVudF9YIHJvdXRpbmVzLCBoYW5kbGluZworICAgIGFsbCBvZiB0aGUgY29tYmluYXRpb25zIHRoYXQgY2FuIHJlc3VsdC4KKyAgVGhlIG9wdHMgYXJnIGhhczoKKyAgICBiaXQgMCBzZXQgaWYgYWxsIGVsZW1lbnRzIGFyZSBzYW1lIHNpemUgKHVzaW5nIHNpemVzWzBdKQorICAgIGJpdCAxIHNldCBpZiBlbGVtZW50cyBzaG91bGQgYmUgemVyb2VkCisqLworc3RhdGljIHZvaWQqKiBpYWxsb2MobXN0YXRlIG0sCisgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgbl9lbGVtZW50cywKKyAgICAgICAgICAgICAgICAgICAgIHNpemVfdCogc2l6ZXMsCisgICAgICAgICAgICAgICAgICAgICBpbnQgb3B0cywKKyAgICAgICAgICAgICAgICAgICAgIHZvaWQqIGNodW5rc1tdKSB7CisKKyAgc2l6ZV90ICAgIGVsZW1lbnRfc2l6ZTsgICAvKiBjaHVua3NpemUgb2YgZWFjaCBlbGVtZW50LCBpZiBhbGwgc2FtZSAqLworICBzaXplX3QgICAgY29udGVudHNfc2l6ZTsgIC8qIHRvdGFsIHNpemUgb2YgZWxlbWVudHMgKi8KKyAgc2l6ZV90ICAgIGFycmF5X3NpemU7ICAgICAvKiByZXF1ZXN0IHNpemUgb2YgcG9pbnRlciBhcnJheSAqLworICB2b2lkKiAgICAgbWVtOyAgICAgICAgICAgIC8qIG1hbGxvY2VkIGFnZ3JlZ2F0ZSBzcGFjZSAqLworICBtY2h1bmtwdHIgcDsgICAgICAgICAgICAgIC8qIGNvcnJlc3BvbmRpbmcgY2h1bmsgKi8KKyAgc2l6ZV90ICAgIHJlbWFpbmRlcl9zaXplOyAvKiByZW1haW5pbmcgYnl0ZXMgd2hpbGUgc3BsaXR0aW5nICovCisgIHZvaWQqKiAgICBtYXJyYXk7ICAgICAgICAgLyogZWl0aGVyICJjaHVua3MiIG9yIG1hbGxvY2VkIHB0ciBhcnJheSAqLworICBtY2h1bmtwdHIgYXJyYXlfY2h1bms7ICAgIC8qIGNodW5rIGZvciBtYWxsb2NlZCBwdHIgYXJyYXkgKi8KKyAgZmxhZ190ICAgIHdhc19lbmFibGVkOyAgICAvKiB0byBkaXNhYmxlIG1tYXAgKi8KKyAgc2l6ZV90ICAgIHNpemU7CisgIHNpemVfdCAgICBpOworCisgIGVuc3VyZV9pbml0aWFsaXphdGlvbigpOworICAvKiBjb21wdXRlIGFycmF5IGxlbmd0aCwgaWYgbmVlZGVkICovCisgIGlmIChjaHVua3MgIT0gMCkgeworICAgIGlmIChuX2VsZW1lbnRzID09IDApCisgICAgICByZXR1cm4gY2h1bmtzOyAvKiBub3RoaW5nIHRvIGRvICovCisgICAgbWFycmF5ID0gY2h1bmtzOworICAgIGFycmF5X3NpemUgPSAwOworICB9CisgIGVsc2UgeworICAgIC8qIGlmIGVtcHR5IHJlcSwgbXVzdCBzdGlsbCByZXR1cm4gY2h1bmsgcmVwcmVzZW50aW5nIGVtcHR5IGFycmF5ICovCisgICAgaWYgKG5fZWxlbWVudHMgPT0gMCkKKyAgICAgIHJldHVybiAodm9pZCoqKWludGVybmFsX21hbGxvYyhtLCAwKTsKKyAgICBtYXJyYXkgPSAwOworICAgIGFycmF5X3NpemUgPSByZXF1ZXN0MnNpemUobl9lbGVtZW50cyAqIChzaXplb2Yodm9pZCopKSk7CisgIH0KKworICAvKiBjb21wdXRlIHRvdGFsIGVsZW1lbnQgc2l6ZSAqLworICBpZiAob3B0cyAmIDB4MSkgeyAvKiBhbGwtc2FtZS1zaXplICovCisgICAgZWxlbWVudF9zaXplID0gcmVxdWVzdDJzaXplKCpzaXplcyk7CisgICAgY29udGVudHNfc2l6ZSA9IG5fZWxlbWVudHMgKiBlbGVtZW50X3NpemU7CisgIH0KKyAgZWxzZSB7IC8qIGFkZCB1cCBhbGwgdGhlIHNpemVzICovCisgICAgZWxlbWVudF9zaXplID0gMDsKKyAgICBjb250ZW50c19zaXplID0gMDsKKyAgICBmb3IgKGkgPSAwOyBpICE9IG5fZWxlbWVudHM7ICsraSkKKyAgICAgIGNvbnRlbnRzX3NpemUgKz0gcmVxdWVzdDJzaXplKHNpemVzW2ldKTsKKyAgfQorCisgIHNpemUgPSBjb250ZW50c19zaXplICsgYXJyYXlfc2l6ZTsKKworICAvKgorICAgICBBbGxvY2F0ZSB0aGUgYWdncmVnYXRlIGNodW5rLiAgRmlyc3QgZGlzYWJsZSBkaXJlY3QtbW1hcHBpbmcgc28KKyAgICAgbWFsbG9jIHdvbid0IHVzZSBpdCwgc2luY2Ugd2Ugd291bGQgbm90IGJlIGFibGUgdG8gbGF0ZXIKKyAgICAgZnJlZS9yZWFsbG9jIHNwYWNlIGludGVybmFsIHRvIGEgc2VncmVnYXRlZCBtbWFwIHJlZ2lvbi4KKyAgKi8KKyAgd2FzX2VuYWJsZWQgPSB1c2VfbW1hcChtKTsKKyAgZGlzYWJsZV9tbWFwKG0pOworICBtZW0gPSBpbnRlcm5hbF9tYWxsb2MobSwgc2l6ZSAtIENIVU5LX09WRVJIRUFEKTsKKyAgaWYgKHdhc19lbmFibGVkKQorICAgIGVuYWJsZV9tbWFwKG0pOworICBpZiAobWVtID09IDApCisgICAgcmV0dXJuIDA7CisKKyAgaWYgKFBSRUFDVElPTihtKSkgcmV0dXJuIDA7CisgIHAgPSBtZW0yY2h1bmsobWVtKTsKKyAgcmVtYWluZGVyX3NpemUgPSBjaHVua3NpemUocCk7CisKKyAgYXNzZXJ0KCFpc19tbWFwcGVkKHApKTsKKworICBpZiAob3B0cyAmIDB4MikgeyAgICAgICAvKiBvcHRpb25hbGx5IGNsZWFyIHRoZSBlbGVtZW50cyAqLworICAgIG1lbXNldCgoc2l6ZV90KiltZW0sIDAsIHJlbWFpbmRlcl9zaXplIC0gU0laRV9UX1NJWkUgLSBhcnJheV9zaXplKTsKKyAgfQorCisgIC8qIElmIG5vdCBwcm92aWRlZCwgYWxsb2NhdGUgdGhlIHBvaW50ZXIgYXJyYXkgYXMgZmluYWwgcGFydCBvZiBjaHVuayAqLworICBpZiAobWFycmF5ID09IDApIHsKKyAgICBzaXplX3QgIGFycmF5X2NodW5rX3NpemU7CisgICAgYXJyYXlfY2h1bmsgPSBjaHVua19wbHVzX29mZnNldChwLCBjb250ZW50c19zaXplKTsKKyAgICBhcnJheV9jaHVua19zaXplID0gcmVtYWluZGVyX3NpemUgLSBjb250ZW50c19zaXplOworICAgIG1hcnJheSA9ICh2b2lkKiopIChjaHVuazJtZW0oYXJyYXlfY2h1bmspKTsKKyAgICBzZXRfc2l6ZV9hbmRfcGludXNlX29mX2ludXNlX2NodW5rKG0sIGFycmF5X2NodW5rLCBhcnJheV9jaHVua19zaXplKTsKKyAgICByZW1haW5kZXJfc2l6ZSA9IGNvbnRlbnRzX3NpemU7CisgIH0KKworICAvKiBzcGxpdCBvdXQgZWxlbWVudHMgKi8KKyAgZm9yIChpID0gMDsgOyArK2kpIHsKKyAgICBtYXJyYXlbaV0gPSBjaHVuazJtZW0ocCk7CisgICAgaWYgKGkgIT0gbl9lbGVtZW50cy0xKSB7CisgICAgICBpZiAoZWxlbWVudF9zaXplICE9IDApCisgICAgICAgIHNpemUgPSBlbGVtZW50X3NpemU7CisgICAgICBlbHNlCisgICAgICAgIHNpemUgPSByZXF1ZXN0MnNpemUoc2l6ZXNbaV0pOworICAgICAgcmVtYWluZGVyX3NpemUgLT0gc2l6ZTsKKyAgICAgIHNldF9zaXplX2FuZF9waW51c2Vfb2ZfaW51c2VfY2h1bmsobSwgcCwgc2l6ZSk7CisgICAgICBwID0gY2h1bmtfcGx1c19vZmZzZXQocCwgc2l6ZSk7CisgICAgfQorICAgIGVsc2UgeyAvKiB0aGUgZmluYWwgZWxlbWVudCBhYnNvcmJzIGFueSBvdmVyYWxsb2NhdGlvbiBzbG9wICovCisgICAgICBzZXRfc2l6ZV9hbmRfcGludXNlX29mX2ludXNlX2NodW5rKG0sIHAsIHJlbWFpbmRlcl9zaXplKTsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgfQorCisjaWYgREVCVUcKKyAgaWYgKG1hcnJheSAhPSBjaHVua3MpIHsKKyAgICAvKiBmaW5hbCBlbGVtZW50IG11c3QgaGF2ZSBleGFjdGx5IGV4aGF1c3RlZCBjaHVuayAqLworICAgIGlmIChlbGVtZW50X3NpemUgIT0gMCkgeworICAgICAgYXNzZXJ0KHJlbWFpbmRlcl9zaXplID09IGVsZW1lbnRfc2l6ZSk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgYXNzZXJ0KHJlbWFpbmRlcl9zaXplID09IHJlcXVlc3Qyc2l6ZShzaXplc1tpXSkpOworICAgIH0KKyAgICBjaGVja19pbnVzZV9jaHVuayhtLCBtZW0yY2h1bmsobWFycmF5KSk7CisgIH0KKyAgZm9yIChpID0gMDsgaSAhPSBuX2VsZW1lbnRzOyArK2kpCisgICAgY2hlY2tfaW51c2VfY2h1bmsobSwgbWVtMmNodW5rKG1hcnJheVtpXSkpOworCisjZW5kaWYgLyogREVCVUcgKi8KKworICBQT1NUQUNUSU9OKG0pOworICByZXR1cm4gbWFycmF5OworfQorCisvKiBUcnkgdG8gZnJlZSBhbGwgcG9pbnRlcnMgaW4gdGhlIGdpdmVuIGFycmF5LgorICAgTm90ZTogdGhpcyBjb3VsZCBiZSBtYWRlIGZhc3RlciwgYnkgZGVsYXlpbmcgY29uc29saWRhdGlvbiwKKyAgIGF0IHRoZSBwcmljZSBvZiBkaXNhYmxpbmcgc29tZSB1c2VyIGludGVncml0eSBjaGVja3MsIFdlCisgICBzdGlsbCBvcHRpbWl6ZSBzb21lIGNvbnNvbGlkYXRpb25zIGJ5IGNvbWJpbmluZyBhZGphY2VudAorICAgY2h1bmtzIGJlZm9yZSBmcmVlaW5nLCB3aGljaCB3aWxsIG9jY3VyIG9mdGVuIGlmIGFsbG9jYXRlZAorICAgd2l0aCBpYWxsb2Mgb3IgdGhlIGFycmF5IGlzIHNvcnRlZC4KKyovCitzdGF0aWMgc2l6ZV90IGludGVybmFsX2J1bGtfZnJlZShtc3RhdGUgbSwgdm9pZCogYXJyYXlbXSwgc2l6ZV90IG5lbGVtKSB7CisgIHNpemVfdCB1bmZyZWVkID0gMDsKKyAgaWYgKCFQUkVBQ1RJT04obSkpIHsKKyAgICB2b2lkKiogYTsKKyAgICB2b2lkKiogZmVuY2UgPSAmKGFycmF5W25lbGVtXSk7CisgICAgZm9yIChhID0gYXJyYXk7IGEgIT0gZmVuY2U7ICsrYSkgeworICAgICAgdm9pZCogbWVtID0gKmE7CisgICAgICBpZiAobWVtICE9IDApIHsKKyAgICAgICAgbWNodW5rcHRyIHAgPSBtZW0yY2h1bmsobWVtKTsKKyAgICAgICAgc2l6ZV90IHBzaXplID0gY2h1bmtzaXplKHApOworI2lmIEZPT1RFUlMKKyAgICAgICAgaWYgKGdldF9tc3RhdGVfZm9yKHApICE9IG0pIHsKKyAgICAgICAgICArK3VuZnJlZWQ7CisgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyNlbmRpZgorICAgICAgICBjaGVja19pbnVzZV9jaHVuayhtLCBwKTsKKyAgICAgICAgKmEgPSAwOworICAgICAgICBpZiAoUlRDSEVDSyhva19hZGRyZXNzKG0sIHApICYmIG9rX2ludXNlKHApKSkgeworICAgICAgICAgIHZvaWQgKiogYiA9IGEgKyAxOyAvKiB0cnkgdG8gbWVyZ2Ugd2l0aCBuZXh0IGNodW5rICovCisgICAgICAgICAgbWNodW5rcHRyIG5leHQgPSBuZXh0X2NodW5rKHApOworICAgICAgICAgIGlmIChiICE9IGZlbmNlICYmICpiID09IGNodW5rMm1lbShuZXh0KSkgeworICAgICAgICAgICAgc2l6ZV90IG5ld3NpemUgPSBjaHVua3NpemUobmV4dCkgKyBwc2l6ZTsKKyAgICAgICAgICAgIHNldF9pbnVzZShtLCBwLCBuZXdzaXplKTsKKyAgICAgICAgICAgICpiID0gY2h1bmsybWVtKHApOworICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICBkaXNwb3NlX2NodW5rKG0sIHAsIHBzaXplKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICBDT1JSVVBUSU9OX0VSUk9SX0FDVElPTihtKTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgICBpZiAoc2hvdWxkX3RyaW0obSwgbS0+dG9wc2l6ZSkpCisgICAgICBzeXNfdHJpbShtLCAwKTsKKyAgICBQT1NUQUNUSU9OKG0pOworICB9CisgIHJldHVybiB1bmZyZWVkOworfQorCisvKiBUcmF2ZXJzYWwgKi8KKyNpZiBNQUxMT0NfSU5TUEVDVF9BTEwKK3N0YXRpYyB2b2lkIGludGVybmFsX2luc3BlY3RfYWxsKG1zdGF0ZSBtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCgqaGFuZGxlcikodm9pZCAqc3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICplbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgdXNlZF9ieXRlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqIGNhbGxiYWNrX2FyZyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiBhcmcpIHsKKyAgaWYgKGlzX2luaXRpYWxpemVkKG0pKSB7CisgICAgbWNodW5rcHRyIHRvcCA9IG0tPnRvcDsKKyAgICBtc2VnbWVudHB0ciBzOworICAgIGZvciAocyA9ICZtLT5zZWc7IHMgIT0gMDsgcyA9IHMtPm5leHQpIHsKKyAgICAgIG1jaHVua3B0ciBxID0gYWxpZ25fYXNfY2h1bmsocy0+YmFzZSk7CisgICAgICB3aGlsZSAoc2VnbWVudF9ob2xkcyhzLCBxKSAmJiBxLT5oZWFkICE9IEZFTkNFUE9TVF9IRUFEKSB7CisgICAgICAgIG1jaHVua3B0ciBuZXh0ID0gbmV4dF9jaHVuayhxKTsKKyAgICAgICAgc2l6ZV90IHN6ID0gY2h1bmtzaXplKHEpOworICAgICAgICBzaXplX3QgdXNlZDsKKyAgICAgICAgdm9pZCogc3RhcnQ7CisgICAgICAgIGlmIChpc19pbnVzZShxKSkgeworICAgICAgICAgIHVzZWQgPSBzeiAtIENIVU5LX09WRVJIRUFEOyAvKiBtdXN0IG5vdCBiZSBtbWFwcGVkICovCisgICAgICAgICAgc3RhcnQgPSBjaHVuazJtZW0ocSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgdXNlZCA9IDA7CisgICAgICAgICAgaWYgKGlzX3NtYWxsKHN6KSkgeyAgICAgLyogb2Zmc2V0IGJ5IHBvc3NpYmxlIGJvb2trZWVwaW5nICovCisgICAgICAgICAgICBzdGFydCA9ICh2b2lkKikoKGNoYXIqKXEgKyBzaXplb2Yoc3RydWN0IG1hbGxvY19jaHVuaykpOworICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHN0YXJ0ID0gKHZvaWQqKSgoY2hhciopcSArIHNpemVvZihzdHJ1Y3QgbWFsbG9jX3RyZWVfY2h1bmspKTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKHN0YXJ0IDwgKHZvaWQqKW5leHQpICAvKiBza2lwIGlmIGFsbCBzcGFjZSBpcyBib29ra2VlcGluZyAqLworICAgICAgICAgIGhhbmRsZXIoc3RhcnQsIG5leHQsIHVzZWQsIGFyZyk7CisgICAgICAgIGlmIChxID09IHRvcCkKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgcSA9IG5leHQ7CisgICAgICB9CisgICAgfQorICB9Cit9CisjZW5kaWYgLyogTUFMTE9DX0lOU1BFQ1RfQUxMICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLSBFeHBvcnRlZCByZWFsbG9jLCBtZW1hbGlnbiwgZXRjIC0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNpZiAhT05MWV9NU1BBQ0VTCisKK3ZvaWQqIGRscmVhbGxvYyh2b2lkKiBvbGRtZW0sIHNpemVfdCBieXRlcykgeworICB2b2lkKiBtZW0gPSAwOworICBpZiAob2xkbWVtID09IDApIHsKKyAgICBtZW0gPSBkbG1hbGxvYyhieXRlcyk7CisgIH0KKyAgZWxzZSBpZiAoYnl0ZXMgPj0gTUFYX1JFUVVFU1QpIHsKKyAgICBNQUxMT0NfRkFJTFVSRV9BQ1RJT047CisgIH0KKyNpZmRlZiBSRUFMTE9DX1pFUk9fQllURVNfRlJFRVMKKyAgZWxzZSBpZiAoYnl0ZXMgPT0gMCkgeworICAgIGRsZnJlZShvbGRtZW0pOworICB9CisjZW5kaWYgLyogUkVBTExPQ19aRVJPX0JZVEVTX0ZSRUVTICovCisgIGVsc2UgeworICAgIHNpemVfdCBuYiA9IHJlcXVlc3Qyc2l6ZShieXRlcyk7CisgICAgbWNodW5rcHRyIG9sZHAgPSBtZW0yY2h1bmsob2xkbWVtKTsKKyNpZiAhIEZPT1RFUlMKKyAgICBtc3RhdGUgbSA9IGdtOworI2Vsc2UgLyogRk9PVEVSUyAqLworICAgIG1zdGF0ZSBtID0gZ2V0X21zdGF0ZV9mb3Iob2xkcCk7CisgICAgaWYgKCFva19tYWdpYyhtKSkgeworICAgICAgVVNBR0VfRVJST1JfQUNUSU9OKG0sIG9sZG1lbSk7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisjZW5kaWYgLyogRk9PVEVSUyAqLworICAgIGlmICghUFJFQUNUSU9OKG0pKSB7CisgICAgICBtY2h1bmtwdHIgbmV3cCA9IHRyeV9yZWFsbG9jX2NodW5rKG0sIG9sZHAsIG5iLCAxKTsKKyAgICAgIFBPU1RBQ1RJT04obSk7CisgICAgICBpZiAobmV3cCAhPSAwKSB7CisgICAgICAgIGNoZWNrX2ludXNlX2NodW5rKG0sIG5ld3ApOworICAgICAgICBtZW0gPSBjaHVuazJtZW0obmV3cCk7CisgICAgICB9CisgICAgICBlbHNlIHsKKyAgICAgICAgbWVtID0gaW50ZXJuYWxfbWFsbG9jKG0sIGJ5dGVzKTsKKyAgICAgICAgaWYgKG1lbSAhPSAwKSB7CisgICAgICAgICAgc2l6ZV90IG9jID0gY2h1bmtzaXplKG9sZHApIC0gb3ZlcmhlYWRfZm9yKG9sZHApOworICAgICAgICAgIG1lbWNweShtZW0sIG9sZG1lbSwgKG9jIDwgYnl0ZXMpPyBvYyA6IGJ5dGVzKTsKKyAgICAgICAgICBpbnRlcm5hbF9mcmVlKG0sIG9sZG1lbSk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgIH0KKyAgcmV0dXJuIG1lbTsKK30KKwordm9pZCogZGxyZWFsbG9jX2luX3BsYWNlKHZvaWQqIG9sZG1lbSwgc2l6ZV90IGJ5dGVzKSB7CisgIHZvaWQqIG1lbSA9IDA7CisgIGlmIChvbGRtZW0gIT0gMCkgeworICAgIGlmIChieXRlcyA+PSBNQVhfUkVRVUVTVCkgeworICAgICAgTUFMTE9DX0ZBSUxVUkVfQUNUSU9OOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIHNpemVfdCBuYiA9IHJlcXVlc3Qyc2l6ZShieXRlcyk7CisgICAgICBtY2h1bmtwdHIgb2xkcCA9IG1lbTJjaHVuayhvbGRtZW0pOworI2lmICEgRk9PVEVSUworICAgICAgbXN0YXRlIG0gPSBnbTsKKyNlbHNlIC8qIEZPT1RFUlMgKi8KKyAgICAgIG1zdGF0ZSBtID0gZ2V0X21zdGF0ZV9mb3Iob2xkcCk7CisgICAgICBpZiAoIW9rX21hZ2ljKG0pKSB7CisgICAgICAgIFVTQUdFX0VSUk9SX0FDVElPTihtLCBvbGRtZW0pOworICAgICAgICByZXR1cm4gMDsKKyAgICAgIH0KKyNlbmRpZiAvKiBGT09URVJTICovCisgICAgICBpZiAoIVBSRUFDVElPTihtKSkgeworICAgICAgICBtY2h1bmtwdHIgbmV3cCA9IHRyeV9yZWFsbG9jX2NodW5rKG0sIG9sZHAsIG5iLCAwKTsKKyAgICAgICAgUE9TVEFDVElPTihtKTsKKyAgICAgICAgaWYgKG5ld3AgPT0gb2xkcCkgeworICAgICAgICAgIGNoZWNrX2ludXNlX2NodW5rKG0sIG5ld3ApOworICAgICAgICAgIG1lbSA9IG9sZG1lbTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgfQorICByZXR1cm4gbWVtOworfQorCit2b2lkKiBkbG1lbWFsaWduKHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBieXRlcykgeworICBpZiAoYWxpZ25tZW50IDw9IE1BTExPQ19BTElHTk1FTlQpIHsKKyAgICByZXR1cm4gZGxtYWxsb2MoYnl0ZXMpOworICB9CisgIHJldHVybiBpbnRlcm5hbF9tZW1hbGlnbihnbSwgYWxpZ25tZW50LCBieXRlcyk7Cit9CisKK2ludCBkbHBvc2l4X21lbWFsaWduKHZvaWQqKiBwcCwgc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IGJ5dGVzKSB7CisgIHZvaWQqIG1lbSA9IDA7CisgIGlmIChhbGlnbm1lbnQgPT0gTUFMTE9DX0FMSUdOTUVOVCkKKyAgICBtZW0gPSBkbG1hbGxvYyhieXRlcyk7CisgIGVsc2UgeworICAgIHNpemVfdCBkID0gYWxpZ25tZW50IC8gc2l6ZW9mKHZvaWQqKTsKKyAgICBzaXplX3QgciA9IGFsaWdubWVudCAlIHNpemVvZih2b2lkKik7CisgICAgaWYgKHIgIT0gMCB8fCBkID09IDAgfHwgKGQgJiAoZC1TSVpFX1RfT05FKSkgIT0gMCkKKyAgICAgIHJldHVybiBFSU5WQUw7CisgICAgZWxzZSBpZiAoYnl0ZXMgPD0gTUFYX1JFUVVFU1QgLSBhbGlnbm1lbnQpIHsKKyAgICAgIGlmIChhbGlnbm1lbnQgPCAgTUlOX0NIVU5LX1NJWkUpCisgICAgICAgIGFsaWdubWVudCA9IE1JTl9DSFVOS19TSVpFOworICAgICAgbWVtID0gaW50ZXJuYWxfbWVtYWxpZ24oZ20sIGFsaWdubWVudCwgYnl0ZXMpOworICAgIH0KKyAgfQorICBpZiAobWVtID09IDApCisgICAgcmV0dXJuIEVOT01FTTsKKyAgZWxzZSB7CisgICAgKnBwID0gbWVtOworICAgIHJldHVybiAwOworICB9Cit9CisKK3ZvaWQqIGRsdmFsbG9jKHNpemVfdCBieXRlcykgeworICBzaXplX3QgcGFnZXN6OworICBlbnN1cmVfaW5pdGlhbGl6YXRpb24oKTsKKyAgcGFnZXN6ID0gbXBhcmFtcy5wYWdlX3NpemU7CisgIHJldHVybiBkbG1lbWFsaWduKHBhZ2VzeiwgYnl0ZXMpOworfQorCit2b2lkKiBkbHB2YWxsb2Moc2l6ZV90IGJ5dGVzKSB7CisgIHNpemVfdCBwYWdlc3o7CisgIGVuc3VyZV9pbml0aWFsaXphdGlvbigpOworICBwYWdlc3ogPSBtcGFyYW1zLnBhZ2Vfc2l6ZTsKKyAgcmV0dXJuIGRsbWVtYWxpZ24ocGFnZXN6LCAoYnl0ZXMgKyBwYWdlc3ogLSBTSVpFX1RfT05FKSAmIH4ocGFnZXN6IC0gU0laRV9UX09ORSkpOworfQorCit2b2lkKiogZGxpbmRlcGVuZGVudF9jYWxsb2Moc2l6ZV90IG5fZWxlbWVudHMsIHNpemVfdCBlbGVtX3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCogY2h1bmtzW10pIHsKKyAgc2l6ZV90IHN6ID0gZWxlbV9zaXplOyAvKiBzZXJ2ZXMgYXMgMS1lbGVtZW50IGFycmF5ICovCisgIHJldHVybiBpYWxsb2MoZ20sIG5fZWxlbWVudHMsICZzeiwgMywgY2h1bmtzKTsKK30KKwordm9pZCoqIGRsaW5kZXBlbmRlbnRfY29tYWxsb2Moc2l6ZV90IG5fZWxlbWVudHMsIHNpemVfdCBzaXplc1tdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCogY2h1bmtzW10pIHsKKyAgcmV0dXJuIGlhbGxvYyhnbSwgbl9lbGVtZW50cywgc2l6ZXMsIDAsIGNodW5rcyk7Cit9CisKK3NpemVfdCBkbGJ1bGtfZnJlZSh2b2lkKiBhcnJheVtdLCBzaXplX3QgbmVsZW0pIHsKKyAgcmV0dXJuIGludGVybmFsX2J1bGtfZnJlZShnbSwgYXJyYXksIG5lbGVtKTsKK30KKworI2lmIE1BTExPQ19JTlNQRUNUX0FMTAordm9pZCBkbG1hbGxvY19pbnNwZWN0X2FsbCh2b2lkKCpoYW5kbGVyKSh2b2lkICpzdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqZW5kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgdXNlZF9ieXRlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCogY2FsbGJhY2tfYXJnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCogYXJnKSB7CisgIGVuc3VyZV9pbml0aWFsaXphdGlvbigpOworICBpZiAoIVBSRUFDVElPTihnbSkpIHsKKyAgICBpbnRlcm5hbF9pbnNwZWN0X2FsbChnbSwgaGFuZGxlciwgYXJnKTsKKyAgICBQT1NUQUNUSU9OKGdtKTsKKyAgfQorfQorI2VuZGlmIC8qIE1BTExPQ19JTlNQRUNUX0FMTCAqLworCitpbnQgZGxtYWxsb2NfdHJpbShzaXplX3QgcGFkKSB7CisgIGludCByZXN1bHQgPSAwOworICBlbnN1cmVfaW5pdGlhbGl6YXRpb24oKTsKKyAgaWYgKCFQUkVBQ1RJT04oZ20pKSB7CisgICAgcmVzdWx0ID0gc3lzX3RyaW0oZ20sIHBhZCk7CisgICAgUE9TVEFDVElPTihnbSk7CisgIH0KKyAgcmV0dXJuIHJlc3VsdDsKK30KKworc2l6ZV90IGRsbWFsbG9jX2Zvb3RwcmludCh2b2lkKSB7CisgIHJldHVybiBnbS0+Zm9vdHByaW50OworfQorCitzaXplX3QgZGxtYWxsb2NfbWF4X2Zvb3RwcmludCh2b2lkKSB7CisgIHJldHVybiBnbS0+bWF4X2Zvb3RwcmludDsKK30KKworc2l6ZV90IGRsbWFsbG9jX2Zvb3RwcmludF9saW1pdCh2b2lkKSB7CisgIHNpemVfdCBtYWYgPSBnbS0+Zm9vdHByaW50X2xpbWl0OworICByZXR1cm4gbWFmID09IDAgPyBNQVhfU0laRV9UIDogbWFmOworfQorCitzaXplX3QgZGxtYWxsb2Nfc2V0X2Zvb3RwcmludF9saW1pdChzaXplX3QgYnl0ZXMpIHsKKyAgc2l6ZV90IHJlc3VsdDsgIC8qIGludmVydCBzZW5zZSBvZiAwICovCisgIGlmIChieXRlcyA9PSAwKQorICAgIHJlc3VsdCA9IGdyYW51bGFyaXR5X2FsaWduKDEpOyAvKiBVc2UgbWluaW1hbCBzaXplICovCisgIGlmIChieXRlcyA9PSBNQVhfU0laRV9UKQorICAgIHJlc3VsdCA9IDA7ICAgICAgICAgICAgICAgICAgICAvKiBkaXNhYmxlICovCisgIGVsc2UKKyAgICByZXN1bHQgPSBncmFudWxhcml0eV9hbGlnbihieXRlcyk7CisgIHJldHVybiBnbS0+Zm9vdHByaW50X2xpbWl0ID0gcmVzdWx0OworfQorCisjaWYgIU5PX01BTExJTkZPCitzdHJ1Y3QgbWFsbGluZm8gZGxtYWxsaW5mbyh2b2lkKSB7CisgIHJldHVybiBpbnRlcm5hbF9tYWxsaW5mbyhnbSk7Cit9CisjZW5kaWYgLyogTk9fTUFMTElORk8gKi8KKworI2lmICFOT19NQUxMT0NfU1RBVFMKK3ZvaWQgZGxtYWxsb2Nfc3RhdHMoKSB7CisgIGludGVybmFsX21hbGxvY19zdGF0cyhnbSk7Cit9CisjZW5kaWYgLyogTk9fTUFMTE9DX1NUQVRTICovCisKK2ludCBkbG1hbGxvcHQoaW50IHBhcmFtX251bWJlciwgaW50IHZhbHVlKSB7CisgIHJldHVybiBjaGFuZ2VfbXBhcmFtKHBhcmFtX251bWJlciwgdmFsdWUpOworfQorCisvKiBCRUdJTiBhbmRyb2lkLWNoYW5nZWQ6IGFkZGVkIGNvbnN0ICovCitzaXplX3QgZGxtYWxsb2NfdXNhYmxlX3NpemUoY29uc3Qgdm9pZCogbWVtKSB7CisvKiBFTkQgYW5kcm9pZC1jaGFuZ2UgKi8KKyAgaWYgKG1lbSAhPSAwKSB7CisgICAgbWNodW5rcHRyIHAgPSBtZW0yY2h1bmsobWVtKTsKKyAgICBpZiAoaXNfaW51c2UocCkpCisgICAgICByZXR1cm4gY2h1bmtzaXplKHApIC0gb3ZlcmhlYWRfZm9yKHApOworICB9CisgIHJldHVybiAwOworfQorCisjZW5kaWYgLyogIU9OTFlfTVNQQUNFUyAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB1c2VyIG1zcGFjZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjaWYgTVNQQUNFUworCitzdGF0aWMgbXN0YXRlIGluaXRfdXNlcl9tc3RhdGUoY2hhciogdGJhc2UsIHNpemVfdCB0c2l6ZSkgeworICBzaXplX3QgbXNpemUgPSBwYWRfcmVxdWVzdChzaXplb2Yoc3RydWN0IG1hbGxvY19zdGF0ZSkpOworICBtY2h1bmtwdHIgbW47CisgIG1jaHVua3B0ciBtc3AgPSBhbGlnbl9hc19jaHVuayh0YmFzZSk7CisgIG1zdGF0ZSBtID0gKG1zdGF0ZSkoY2h1bmsybWVtKG1zcCkpOworICBtZW1zZXQobSwgMCwgbXNpemUpOworICAodm9pZClJTklUSUFMX0xPQ0soJm0tPm11dGV4KTsKKyAgbXNwLT5oZWFkID0gKG1zaXplfElOVVNFX0JJVFMpOworICBtLT5zZWcuYmFzZSA9IG0tPmxlYXN0X2FkZHIgPSB0YmFzZTsKKyAgbS0+c2VnLnNpemUgPSBtLT5mb290cHJpbnQgPSBtLT5tYXhfZm9vdHByaW50ID0gdHNpemU7CisgIG0tPm1hZ2ljID0gbXBhcmFtcy5tYWdpYzsKKyAgbS0+cmVsZWFzZV9jaGVja3MgPSBNQVhfUkVMRUFTRV9DSEVDS19SQVRFOworICBtLT5tZmxhZ3MgPSBtcGFyYW1zLmRlZmF1bHRfbWZsYWdzOworICBtLT5leHRwID0gMDsKKyAgbS0+ZXh0cyA9IDA7CisgIGRpc2FibGVfY29udGlndW91cyhtKTsKKyAgaW5pdF9iaW5zKG0pOworICBtbiA9IG5leHRfY2h1bmsobWVtMmNodW5rKG0pKTsKKyAgaW5pdF90b3AobSwgbW4sIChzaXplX3QpKCh0YmFzZSArIHRzaXplKSAtIChjaGFyKiltbikgLSBUT1BfRk9PVF9TSVpFKTsKKyAgY2hlY2tfdG9wX2NodW5rKG0sIG0tPnRvcCk7CisgIHJldHVybiBtOworfQorCittc3BhY2UgY3JlYXRlX21zcGFjZShzaXplX3QgY2FwYWNpdHksIGludCBsb2NrZWQpIHsKKyAgbXN0YXRlIG0gPSAwOworICBzaXplX3QgbXNpemU7CisgIGVuc3VyZV9pbml0aWFsaXphdGlvbigpOworICBtc2l6ZSA9IHBhZF9yZXF1ZXN0KHNpemVvZihzdHJ1Y3QgbWFsbG9jX3N0YXRlKSk7CisgIGlmIChjYXBhY2l0eSA8IChzaXplX3QpIC0obXNpemUgKyBUT1BfRk9PVF9TSVpFICsgbXBhcmFtcy5wYWdlX3NpemUpKSB7CisgICAgc2l6ZV90IHJzID0gKChjYXBhY2l0eSA9PSAwKT8gbXBhcmFtcy5ncmFudWxhcml0eSA6CisgICAgICAgICAgICAgICAgIChjYXBhY2l0eSArIFRPUF9GT09UX1NJWkUgKyBtc2l6ZSkpOworICAgIHNpemVfdCB0c2l6ZSA9IGdyYW51bGFyaXR5X2FsaWduKHJzKTsKKyAgICBjaGFyKiB0YmFzZSA9IChjaGFyKikoQ0FMTF9NTUFQKHRzaXplKSk7CisgICAgaWYgKHRiYXNlICE9IENNRkFJTCkgeworICAgICAgbSA9IGluaXRfdXNlcl9tc3RhdGUodGJhc2UsIHRzaXplKTsKKyAgICAgIG0tPnNlZy5zZmxhZ3MgPSBVU0VfTU1BUF9CSVQ7CisgICAgICBzZXRfbG9jayhtLCBsb2NrZWQpOworICAgIH0KKyAgfQorICByZXR1cm4gKG1zcGFjZSltOworfQorCittc3BhY2UgY3JlYXRlX21zcGFjZV93aXRoX2Jhc2Uodm9pZCogYmFzZSwgc2l6ZV90IGNhcGFjaXR5LCBpbnQgbG9ja2VkKSB7CisgIG1zdGF0ZSBtID0gMDsKKyAgc2l6ZV90IG1zaXplOworICBlbnN1cmVfaW5pdGlhbGl6YXRpb24oKTsKKyAgbXNpemUgPSBwYWRfcmVxdWVzdChzaXplb2Yoc3RydWN0IG1hbGxvY19zdGF0ZSkpOworICBpZiAoY2FwYWNpdHkgPiBtc2l6ZSArIFRPUF9GT09UX1NJWkUgJiYKKyAgICAgIGNhcGFjaXR5IDwgKHNpemVfdCkgLShtc2l6ZSArIFRPUF9GT09UX1NJWkUgKyBtcGFyYW1zLnBhZ2Vfc2l6ZSkpIHsKKyAgICBtID0gaW5pdF91c2VyX21zdGF0ZSgoY2hhciopYmFzZSwgY2FwYWNpdHkpOworICAgIG0tPnNlZy5zZmxhZ3MgPSBFWFRFUk5fQklUOworICAgIHNldF9sb2NrKG0sIGxvY2tlZCk7CisgIH0KKyAgcmV0dXJuIChtc3BhY2UpbTsKK30KKworaW50IG1zcGFjZV90cmFja19sYXJnZV9jaHVua3MobXNwYWNlIG1zcCwgaW50IGVuYWJsZSkgeworICBpbnQgcmV0ID0gMDsKKyAgbXN0YXRlIG1zID0gKG1zdGF0ZSltc3A7CisgIGlmICghUFJFQUNUSU9OKG1zKSkgeworICAgIGlmICghdXNlX21tYXAobXMpKSB7CisgICAgICByZXQgPSAxOworICAgIH0KKyAgICBpZiAoIWVuYWJsZSkgeworICAgICAgZW5hYmxlX21tYXAobXMpOworICAgIH0gZWxzZSB7CisgICAgICBkaXNhYmxlX21tYXAobXMpOworICAgIH0KKyAgICBQT1NUQUNUSU9OKG1zKTsKKyAgfQorICByZXR1cm4gcmV0OworfQorCitzaXplX3QgZGVzdHJveV9tc3BhY2UobXNwYWNlIG1zcCkgeworICBzaXplX3QgZnJlZWQgPSAwOworICBtc3RhdGUgbXMgPSAobXN0YXRlKW1zcDsKKyAgaWYgKG9rX21hZ2ljKG1zKSkgeworICAgIG1zZWdtZW50cHRyIHNwID0gJm1zLT5zZWc7CisgICAgKHZvaWQpREVTVFJPWV9MT0NLKCZtcy0+bXV0ZXgpOyAvKiBkZXN0cm95IGJlZm9yZSB1bm1hcHBlZCAqLworICAgIHdoaWxlIChzcCAhPSAwKSB7CisgICAgICBjaGFyKiBiYXNlID0gc3AtPmJhc2U7CisgICAgICBzaXplX3Qgc2l6ZSA9IHNwLT5zaXplOworICAgICAgZmxhZ190IGZsYWcgPSBzcC0+c2ZsYWdzOworICAgICAgKHZvaWQpYmFzZTsgLyogcGxhY2F0ZSBwZW9wbGUgY29tcGlsaW5nIC1XdW51c2VkLXZhcmlhYmxlICovCisgICAgICBzcCA9IHNwLT5uZXh0OworICAgICAgaWYgKChmbGFnICYgVVNFX01NQVBfQklUKSAmJiAhKGZsYWcgJiBFWFRFUk5fQklUKSAmJgorICAgICAgICAgIENBTExfTVVOTUFQKGJhc2UsIHNpemUpID09IDApCisgICAgICAgIGZyZWVkICs9IHNpemU7CisgICAgfQorICB9CisgIGVsc2UgeworICAgIFVTQUdFX0VSUk9SX0FDVElPTihtcyxtcyk7CisgIH0KKyAgcmV0dXJuIGZyZWVkOworfQorCisvKgorICBtc3BhY2UgdmVyc2lvbnMgb2Ygcm91dGluZXMgYXJlIG5lYXItY2xvbmVzIG9mIHRoZSBnbG9iYWwKKyAgdmVyc2lvbnMuIFRoaXMgaXMgbm90IHNvIG5pY2UgYnV0IGJldHRlciB0aGFuIHRoZSBhbHRlcm5hdGl2ZXMuCisqLworCit2b2lkKiBtc3BhY2VfbWFsbG9jKG1zcGFjZSBtc3AsIHNpemVfdCBieXRlcykgeworICBtc3RhdGUgbXMgPSAobXN0YXRlKW1zcDsKKyAgaWYgKCFva19tYWdpYyhtcykpIHsKKyAgICBVU0FHRV9FUlJPUl9BQ1RJT04obXMsbXMpOworICAgIHJldHVybiAwOworICB9CisgIGlmICghUFJFQUNUSU9OKG1zKSkgeworICAgIHZvaWQqIG1lbTsKKyAgICBzaXplX3QgbmI7CisgICAgaWYgKGJ5dGVzIDw9IE1BWF9TTUFMTF9SRVFVRVNUKSB7CisgICAgICBiaW5kZXhfdCBpZHg7CisgICAgICBiaW5tYXBfdCBzbWFsbGJpdHM7CisgICAgICBuYiA9IChieXRlcyA8IE1JTl9SRVFVRVNUKT8gTUlOX0NIVU5LX1NJWkUgOiBwYWRfcmVxdWVzdChieXRlcyk7CisgICAgICBpZHggPSBzbWFsbF9pbmRleChuYik7CisgICAgICBzbWFsbGJpdHMgPSBtcy0+c21hbGxtYXAgPj4gaWR4OworCisgICAgICBpZiAoKHNtYWxsYml0cyAmIDB4M1UpICE9IDApIHsgLyogUmVtYWluZGVybGVzcyBmaXQgdG8gYSBzbWFsbGJpbi4gKi8KKyAgICAgICAgbWNodW5rcHRyIGIsIHA7CisgICAgICAgIGlkeCArPSB+c21hbGxiaXRzICYgMTsgICAgICAgLyogVXNlcyBuZXh0IGJpbiBpZiBpZHggZW1wdHkgKi8KKyAgICAgICAgYiA9IHNtYWxsYmluX2F0KG1zLCBpZHgpOworICAgICAgICBwID0gYi0+ZmQ7CisgICAgICAgIGFzc2VydChjaHVua3NpemUocCkgPT0gc21hbGxfaW5kZXgyc2l6ZShpZHgpKTsKKyAgICAgICAgdW5saW5rX2ZpcnN0X3NtYWxsX2NodW5rKG1zLCBiLCBwLCBpZHgpOworICAgICAgICBzZXRfaW51c2VfYW5kX3BpbnVzZShtcywgcCwgc21hbGxfaW5kZXgyc2l6ZShpZHgpKTsKKyAgICAgICAgbWVtID0gY2h1bmsybWVtKHApOworICAgICAgICBjaGVja19tYWxsb2NlZF9jaHVuayhtcywgbWVtLCBuYik7CisgICAgICAgIGdvdG8gcG9zdGFjdGlvbjsKKyAgICAgIH0KKworICAgICAgZWxzZSBpZiAobmIgPiBtcy0+ZHZzaXplKSB7CisgICAgICAgIGlmIChzbWFsbGJpdHMgIT0gMCkgeyAvKiBVc2UgY2h1bmsgaW4gbmV4dCBub25lbXB0eSBzbWFsbGJpbiAqLworICAgICAgICAgIG1jaHVua3B0ciBiLCBwLCByOworICAgICAgICAgIHNpemVfdCByc2l6ZTsKKyAgICAgICAgICBiaW5kZXhfdCBpOworICAgICAgICAgIGJpbm1hcF90IGxlZnRiaXRzID0gKHNtYWxsYml0cyA8PCBpZHgpICYgbGVmdF9iaXRzKGlkeDJiaXQoaWR4KSk7CisgICAgICAgICAgYmlubWFwX3QgbGVhc3RiaXQgPSBsZWFzdF9iaXQobGVmdGJpdHMpOworICAgICAgICAgIGNvbXB1dGVfYml0MmlkeChsZWFzdGJpdCwgaSk7CisgICAgICAgICAgYiA9IHNtYWxsYmluX2F0KG1zLCBpKTsKKyAgICAgICAgICBwID0gYi0+ZmQ7CisgICAgICAgICAgYXNzZXJ0KGNodW5rc2l6ZShwKSA9PSBzbWFsbF9pbmRleDJzaXplKGkpKTsKKyAgICAgICAgICB1bmxpbmtfZmlyc3Rfc21hbGxfY2h1bmsobXMsIGIsIHAsIGkpOworICAgICAgICAgIHJzaXplID0gc21hbGxfaW5kZXgyc2l6ZShpKSAtIG5iOworICAgICAgICAgIC8qIEZpdCBoZXJlIGNhbm5vdCBiZSByZW1haW5kZXJsZXNzIGlmIDRieXRlIHNpemVzICovCisgICAgICAgICAgaWYgKFNJWkVfVF9TSVpFICE9IDQgJiYgcnNpemUgPCBNSU5fQ0hVTktfU0laRSkKKyAgICAgICAgICAgIHNldF9pbnVzZV9hbmRfcGludXNlKG1zLCBwLCBzbWFsbF9pbmRleDJzaXplKGkpKTsKKyAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHNldF9zaXplX2FuZF9waW51c2Vfb2ZfaW51c2VfY2h1bmsobXMsIHAsIG5iKTsKKyAgICAgICAgICAgIHIgPSBjaHVua19wbHVzX29mZnNldChwLCBuYik7CisgICAgICAgICAgICBzZXRfc2l6ZV9hbmRfcGludXNlX29mX2ZyZWVfY2h1bmsociwgcnNpemUpOworICAgICAgICAgICAgcmVwbGFjZV9kdihtcywgciwgcnNpemUpOworICAgICAgICAgIH0KKyAgICAgICAgICBtZW0gPSBjaHVuazJtZW0ocCk7CisgICAgICAgICAgY2hlY2tfbWFsbG9jZWRfY2h1bmsobXMsIG1lbSwgbmIpOworICAgICAgICAgIGdvdG8gcG9zdGFjdGlvbjsKKyAgICAgICAgfQorCisgICAgICAgIGVsc2UgaWYgKG1zLT50cmVlbWFwICE9IDAgJiYgKG1lbSA9IHRtYWxsb2Nfc21hbGwobXMsIG5iKSkgIT0gMCkgeworICAgICAgICAgIGNoZWNrX21hbGxvY2VkX2NodW5rKG1zLCBtZW0sIG5iKTsKKyAgICAgICAgICBnb3RvIHBvc3RhY3Rpb247CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAoYnl0ZXMgPj0gTUFYX1JFUVVFU1QpCisgICAgICBuYiA9IE1BWF9TSVpFX1Q7IC8qIFRvbyBiaWcgdG8gYWxsb2NhdGUuIEZvcmNlIGZhaWx1cmUgKGluIHN5cyBhbGxvYykgKi8KKyAgICBlbHNlIHsKKyAgICAgIG5iID0gcGFkX3JlcXVlc3QoYnl0ZXMpOworICAgICAgaWYgKG1zLT50cmVlbWFwICE9IDAgJiYgKG1lbSA9IHRtYWxsb2NfbGFyZ2UobXMsIG5iKSkgIT0gMCkgeworICAgICAgICBjaGVja19tYWxsb2NlZF9jaHVuayhtcywgbWVtLCBuYik7CisgICAgICAgIGdvdG8gcG9zdGFjdGlvbjsKKyAgICAgIH0KKyAgICB9CisKKyAgICBpZiAobmIgPD0gbXMtPmR2c2l6ZSkgeworICAgICAgc2l6ZV90IHJzaXplID0gbXMtPmR2c2l6ZSAtIG5iOworICAgICAgbWNodW5rcHRyIHAgPSBtcy0+ZHY7CisgICAgICBpZiAocnNpemUgPj0gTUlOX0NIVU5LX1NJWkUpIHsgLyogc3BsaXQgZHYgKi8KKyAgICAgICAgbWNodW5rcHRyIHIgPSBtcy0+ZHYgPSBjaHVua19wbHVzX29mZnNldChwLCBuYik7CisgICAgICAgIG1zLT5kdnNpemUgPSByc2l6ZTsKKyAgICAgICAgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9mcmVlX2NodW5rKHIsIHJzaXplKTsKKyAgICAgICAgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9pbnVzZV9jaHVuayhtcywgcCwgbmIpOworICAgICAgfQorICAgICAgZWxzZSB7IC8qIGV4aGF1c3QgZHYgKi8KKyAgICAgICAgc2l6ZV90IGR2cyA9IG1zLT5kdnNpemU7CisgICAgICAgIG1zLT5kdnNpemUgPSAwOworICAgICAgICBtcy0+ZHYgPSAwOworICAgICAgICBzZXRfaW51c2VfYW5kX3BpbnVzZShtcywgcCwgZHZzKTsKKyAgICAgIH0KKyAgICAgIG1lbSA9IGNodW5rMm1lbShwKTsKKyAgICAgIGNoZWNrX21hbGxvY2VkX2NodW5rKG1zLCBtZW0sIG5iKTsKKyAgICAgIGdvdG8gcG9zdGFjdGlvbjsKKyAgICB9CisKKyAgICBlbHNlIGlmIChuYiA8IG1zLT50b3BzaXplKSB7IC8qIFNwbGl0IHRvcCAqLworICAgICAgc2l6ZV90IHJzaXplID0gbXMtPnRvcHNpemUgLT0gbmI7CisgICAgICBtY2h1bmtwdHIgcCA9IG1zLT50b3A7CisgICAgICBtY2h1bmtwdHIgciA9IG1zLT50b3AgPSBjaHVua19wbHVzX29mZnNldChwLCBuYik7CisgICAgICByLT5oZWFkID0gcnNpemUgfCBQSU5VU0VfQklUOworICAgICAgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9pbnVzZV9jaHVuayhtcywgcCwgbmIpOworICAgICAgbWVtID0gY2h1bmsybWVtKHApOworICAgICAgY2hlY2tfdG9wX2NodW5rKG1zLCBtcy0+dG9wKTsKKyAgICAgIGNoZWNrX21hbGxvY2VkX2NodW5rKG1zLCBtZW0sIG5iKTsKKyAgICAgIGdvdG8gcG9zdGFjdGlvbjsKKyAgICB9CisKKyAgICBtZW0gPSBzeXNfYWxsb2MobXMsIG5iKTsKKworICBwb3N0YWN0aW9uOgorICAgIFBPU1RBQ1RJT04obXMpOworICAgIHJldHVybiBtZW07CisgIH0KKworICByZXR1cm4gMDsKK30KKwordm9pZCBtc3BhY2VfZnJlZShtc3BhY2UgbXNwLCB2b2lkKiBtZW0pIHsKKyAgaWYgKG1lbSAhPSAwKSB7CisgICAgbWNodW5rcHRyIHAgID0gbWVtMmNodW5rKG1lbSk7CisjaWYgRk9PVEVSUworICAgIG1zdGF0ZSBmbSA9IGdldF9tc3RhdGVfZm9yKHApOworICAgICh2b2lkKW1zcDsgLyogcGxhY2F0ZSBwZW9wbGUgY29tcGlsaW5nIC1XdW51c2VkICovCisjZWxzZSAvKiBGT09URVJTICovCisgICAgbXN0YXRlIGZtID0gKG1zdGF0ZSltc3A7CisjZW5kaWYgLyogRk9PVEVSUyAqLworICAgIGlmICghb2tfbWFnaWMoZm0pKSB7CisgICAgICBVU0FHRV9FUlJPUl9BQ1RJT04oZm0sIHApOworICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoIVBSRUFDVElPTihmbSkpIHsKKyAgICAgIGNoZWNrX2ludXNlX2NodW5rKGZtLCBwKTsKKyAgICAgIGlmIChSVENIRUNLKG9rX2FkZHJlc3MoZm0sIHApICYmIG9rX2ludXNlKHApKSkgeworICAgICAgICBzaXplX3QgcHNpemUgPSBjaHVua3NpemUocCk7CisgICAgICAgIG1jaHVua3B0ciBuZXh0ID0gY2h1bmtfcGx1c19vZmZzZXQocCwgcHNpemUpOworICAgICAgICBpZiAoIXBpbnVzZShwKSkgeworICAgICAgICAgIHNpemVfdCBwcmV2c2l6ZSA9IHAtPnByZXZfZm9vdDsKKyAgICAgICAgICBpZiAoaXNfbW1hcHBlZChwKSkgeworICAgICAgICAgICAgcHNpemUgKz0gcHJldnNpemUgKyBNTUFQX0ZPT1RfUEFEOworICAgICAgICAgICAgaWYgKENBTExfTVVOTUFQKChjaGFyKilwIC0gcHJldnNpemUsIHBzaXplKSA9PSAwKQorICAgICAgICAgICAgICBmbS0+Zm9vdHByaW50IC09IHBzaXplOworICAgICAgICAgICAgZ290byBwb3N0YWN0aW9uOworICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIG1jaHVua3B0ciBwcmV2ID0gY2h1bmtfbWludXNfb2Zmc2V0KHAsIHByZXZzaXplKTsKKyAgICAgICAgICAgIHBzaXplICs9IHByZXZzaXplOworICAgICAgICAgICAgcCA9IHByZXY7CisgICAgICAgICAgICBpZiAoUlRDSEVDSyhva19hZGRyZXNzKGZtLCBwcmV2KSkpIHsgLyogY29uc29saWRhdGUgYmFja3dhcmQgKi8KKyAgICAgICAgICAgICAgaWYgKHAgIT0gZm0tPmR2KSB7CisgICAgICAgICAgICAgICAgdW5saW5rX2NodW5rKGZtLCBwLCBwcmV2c2l6ZSk7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgZWxzZSBpZiAoKG5leHQtPmhlYWQgJiBJTlVTRV9CSVRTKSA9PSBJTlVTRV9CSVRTKSB7CisgICAgICAgICAgICAgICAgZm0tPmR2c2l6ZSA9IHBzaXplOworICAgICAgICAgICAgICAgIHNldF9mcmVlX3dpdGhfcGludXNlKHAsIHBzaXplLCBuZXh0KTsKKyAgICAgICAgICAgICAgICBnb3RvIHBvc3RhY3Rpb247CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgZ290byBlcnJvcmFjdGlvbjsKKyAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoUlRDSEVDSyhva19uZXh0KHAsIG5leHQpICYmIG9rX3BpbnVzZShuZXh0KSkpIHsKKyAgICAgICAgICBpZiAoIWNpbnVzZShuZXh0KSkgeyAgLyogY29uc29saWRhdGUgZm9yd2FyZCAqLworICAgICAgICAgICAgaWYgKG5leHQgPT0gZm0tPnRvcCkgeworICAgICAgICAgICAgICBzaXplX3QgdHNpemUgPSBmbS0+dG9wc2l6ZSArPSBwc2l6ZTsKKyAgICAgICAgICAgICAgZm0tPnRvcCA9IHA7CisgICAgICAgICAgICAgIHAtPmhlYWQgPSB0c2l6ZSB8IFBJTlVTRV9CSVQ7CisgICAgICAgICAgICAgIGlmIChwID09IGZtLT5kdikgeworICAgICAgICAgICAgICAgIGZtLT5kdiA9IDA7CisgICAgICAgICAgICAgICAgZm0tPmR2c2l6ZSA9IDA7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgaWYgKHNob3VsZF90cmltKGZtLCB0c2l6ZSkpCisgICAgICAgICAgICAgICAgc3lzX3RyaW0oZm0sIDApOworICAgICAgICAgICAgICBnb3RvIHBvc3RhY3Rpb247CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChuZXh0ID09IGZtLT5kdikgeworICAgICAgICAgICAgICBzaXplX3QgZHNpemUgPSBmbS0+ZHZzaXplICs9IHBzaXplOworICAgICAgICAgICAgICBmbS0+ZHYgPSBwOworICAgICAgICAgICAgICBzZXRfc2l6ZV9hbmRfcGludXNlX29mX2ZyZWVfY2h1bmsocCwgZHNpemUpOworICAgICAgICAgICAgICBnb3RvIHBvc3RhY3Rpb247CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgc2l6ZV90IG5zaXplID0gY2h1bmtzaXplKG5leHQpOworICAgICAgICAgICAgICBwc2l6ZSArPSBuc2l6ZTsKKyAgICAgICAgICAgICAgdW5saW5rX2NodW5rKGZtLCBuZXh0LCBuc2l6ZSk7CisgICAgICAgICAgICAgIHNldF9zaXplX2FuZF9waW51c2Vfb2ZfZnJlZV9jaHVuayhwLCBwc2l6ZSk7CisgICAgICAgICAgICAgIGlmIChwID09IGZtLT5kdikgeworICAgICAgICAgICAgICAgIGZtLT5kdnNpemUgPSBwc2l6ZTsKKyAgICAgICAgICAgICAgICBnb3RvIHBvc3RhY3Rpb247CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgc2V0X2ZyZWVfd2l0aF9waW51c2UocCwgcHNpemUsIG5leHQpOworCisgICAgICAgICAgaWYgKGlzX3NtYWxsKHBzaXplKSkgeworICAgICAgICAgICAgaW5zZXJ0X3NtYWxsX2NodW5rKGZtLCBwLCBwc2l6ZSk7CisgICAgICAgICAgICBjaGVja19mcmVlX2NodW5rKGZtLCBwKTsKKyAgICAgICAgICB9CisgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICB0Y2h1bmtwdHIgdHAgPSAodGNodW5rcHRyKXA7CisgICAgICAgICAgICBpbnNlcnRfbGFyZ2VfY2h1bmsoZm0sIHRwLCBwc2l6ZSk7CisgICAgICAgICAgICBjaGVja19mcmVlX2NodW5rKGZtLCBwKTsKKyAgICAgICAgICAgIGlmICgtLWZtLT5yZWxlYXNlX2NoZWNrcyA9PSAwKQorICAgICAgICAgICAgICByZWxlYXNlX3VudXNlZF9zZWdtZW50cyhmbSk7CisgICAgICAgICAgfQorICAgICAgICAgIGdvdG8gcG9zdGFjdGlvbjsKKyAgICAgICAgfQorICAgICAgfQorICAgIGVycm9yYWN0aW9uOgorICAgICAgVVNBR0VfRVJST1JfQUNUSU9OKGZtLCBwKTsKKyAgICBwb3N0YWN0aW9uOgorICAgICAgUE9TVEFDVElPTihmbSk7CisgICAgfQorICB9Cit9CisKK3ZvaWQqIG1zcGFjZV9jYWxsb2MobXNwYWNlIG1zcCwgc2l6ZV90IG5fZWxlbWVudHMsIHNpemVfdCBlbGVtX3NpemUpIHsKKyAgdm9pZCogbWVtOworICBzaXplX3QgcmVxID0gMDsKKyAgbXN0YXRlIG1zID0gKG1zdGF0ZSltc3A7CisgIGlmICghb2tfbWFnaWMobXMpKSB7CisgICAgVVNBR0VfRVJST1JfQUNUSU9OKG1zLG1zKTsKKyAgICByZXR1cm4gMDsKKyAgfQorICBpZiAobl9lbGVtZW50cyAhPSAwKSB7CisgICAgcmVxID0gbl9lbGVtZW50cyAqIGVsZW1fc2l6ZTsKKyAgICBpZiAoKChuX2VsZW1lbnRzIHwgZWxlbV9zaXplKSAmIH4oc2l6ZV90KTB4ZmZmZikgJiYKKyAgICAgICAgKHJlcSAvIG5fZWxlbWVudHMgIT0gZWxlbV9zaXplKSkKKyAgICAgIHJlcSA9IE1BWF9TSVpFX1Q7IC8qIGZvcmNlIGRvd25zdHJlYW0gZmFpbHVyZSBvbiBvdmVyZmxvdyAqLworICB9CisgIG1lbSA9IGludGVybmFsX21hbGxvYyhtcywgcmVxKTsKKyAgaWYgKG1lbSAhPSAwICYmIGNhbGxvY19tdXN0X2NsZWFyKG1lbTJjaHVuayhtZW0pKSkKKyAgICBtZW1zZXQobWVtLCAwLCByZXEpOworICByZXR1cm4gbWVtOworfQorCit2b2lkKiBtc3BhY2VfcmVhbGxvYyhtc3BhY2UgbXNwLCB2b2lkKiBvbGRtZW0sIHNpemVfdCBieXRlcykgeworICB2b2lkKiBtZW0gPSAwOworICBpZiAob2xkbWVtID09IDApIHsKKyAgICBtZW0gPSBtc3BhY2VfbWFsbG9jKG1zcCwgYnl0ZXMpOworICB9CisgIGVsc2UgaWYgKGJ5dGVzID49IE1BWF9SRVFVRVNUKSB7CisgICAgTUFMTE9DX0ZBSUxVUkVfQUNUSU9OOworICB9CisjaWZkZWYgUkVBTExPQ19aRVJPX0JZVEVTX0ZSRUVTCisgIGVsc2UgaWYgKGJ5dGVzID09IDApIHsKKyAgICBtc3BhY2VfZnJlZShtc3AsIG9sZG1lbSk7CisgIH0KKyNlbmRpZiAvKiBSRUFMTE9DX1pFUk9fQllURVNfRlJFRVMgKi8KKyAgZWxzZSB7CisgICAgc2l6ZV90IG5iID0gcmVxdWVzdDJzaXplKGJ5dGVzKTsKKyAgICBtY2h1bmtwdHIgb2xkcCA9IG1lbTJjaHVuayhvbGRtZW0pOworI2lmICEgRk9PVEVSUworICAgIG1zdGF0ZSBtID0gKG1zdGF0ZSltc3A7CisjZWxzZSAvKiBGT09URVJTICovCisgICAgbXN0YXRlIG0gPSBnZXRfbXN0YXRlX2ZvcihvbGRwKTsKKyAgICBpZiAoIW9rX21hZ2ljKG0pKSB7CisgICAgICBVU0FHRV9FUlJPUl9BQ1RJT04obSwgb2xkbWVtKTsKKyAgICAgIHJldHVybiAwOworICAgIH0KKyNlbmRpZiAvKiBGT09URVJTICovCisgICAgaWYgKCFQUkVBQ1RJT04obSkpIHsKKyAgICAgIG1jaHVua3B0ciBuZXdwID0gdHJ5X3JlYWxsb2NfY2h1bmsobSwgb2xkcCwgbmIsIDEpOworICAgICAgUE9TVEFDVElPTihtKTsKKyAgICAgIGlmIChuZXdwICE9IDApIHsKKyAgICAgICAgY2hlY2tfaW51c2VfY2h1bmsobSwgbmV3cCk7CisgICAgICAgIG1lbSA9IGNodW5rMm1lbShuZXdwKTsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworICAgICAgICBtZW0gPSBtc3BhY2VfbWFsbG9jKG0sIGJ5dGVzKTsKKyAgICAgICAgaWYgKG1lbSAhPSAwKSB7CisgICAgICAgICAgc2l6ZV90IG9jID0gY2h1bmtzaXplKG9sZHApIC0gb3ZlcmhlYWRfZm9yKG9sZHApOworICAgICAgICAgIG1lbWNweShtZW0sIG9sZG1lbSwgKG9jIDwgYnl0ZXMpPyBvYyA6IGJ5dGVzKTsKKyAgICAgICAgICBtc3BhY2VfZnJlZShtLCBvbGRtZW0pOworICAgICAgICB9CisgICAgICB9CisgICAgfQorICB9CisgIHJldHVybiBtZW07Cit9CisKK3ZvaWQqIG1zcGFjZV9yZWFsbG9jX2luX3BsYWNlKG1zcGFjZSBtc3AsIHZvaWQqIG9sZG1lbSwgc2l6ZV90IGJ5dGVzKSB7CisgIHZvaWQqIG1lbSA9IDA7CisgIGlmIChvbGRtZW0gIT0gMCkgeworICAgIGlmIChieXRlcyA+PSBNQVhfUkVRVUVTVCkgeworICAgICAgTUFMTE9DX0ZBSUxVUkVfQUNUSU9OOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIHNpemVfdCBuYiA9IHJlcXVlc3Qyc2l6ZShieXRlcyk7CisgICAgICBtY2h1bmtwdHIgb2xkcCA9IG1lbTJjaHVuayhvbGRtZW0pOworI2lmICEgRk9PVEVSUworICAgICAgbXN0YXRlIG0gPSAobXN0YXRlKW1zcDsKKyNlbHNlIC8qIEZPT1RFUlMgKi8KKyAgICAgIG1zdGF0ZSBtID0gZ2V0X21zdGF0ZV9mb3Iob2xkcCk7CisgICAgICAodm9pZCltc3A7IC8qIHBsYWNhdGUgcGVvcGxlIGNvbXBpbGluZyAtV3VudXNlZCAqLworICAgICAgaWYgKCFva19tYWdpYyhtKSkgeworICAgICAgICBVU0FHRV9FUlJPUl9BQ1RJT04obSwgb2xkbWVtKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgICB9CisjZW5kaWYgLyogRk9PVEVSUyAqLworICAgICAgaWYgKCFQUkVBQ1RJT04obSkpIHsKKyAgICAgICAgbWNodW5rcHRyIG5ld3AgPSB0cnlfcmVhbGxvY19jaHVuayhtLCBvbGRwLCBuYiwgMCk7CisgICAgICAgIFBPU1RBQ1RJT04obSk7CisgICAgICAgIGlmIChuZXdwID09IG9sZHApIHsKKyAgICAgICAgICBjaGVja19pbnVzZV9jaHVuayhtLCBuZXdwKTsKKyAgICAgICAgICBtZW0gPSBvbGRtZW07CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgIH0KKyAgcmV0dXJuIG1lbTsKK30KKwordm9pZCogbXNwYWNlX21lbWFsaWduKG1zcGFjZSBtc3AsIHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBieXRlcykgeworICBtc3RhdGUgbXMgPSAobXN0YXRlKW1zcDsKKyAgaWYgKCFva19tYWdpYyhtcykpIHsKKyAgICBVU0FHRV9FUlJPUl9BQ1RJT04obXMsbXMpOworICAgIHJldHVybiAwOworICB9CisgIGlmIChhbGlnbm1lbnQgPD0gTUFMTE9DX0FMSUdOTUVOVCkKKyAgICByZXR1cm4gbXNwYWNlX21hbGxvYyhtc3AsIGJ5dGVzKTsKKyAgcmV0dXJuIGludGVybmFsX21lbWFsaWduKG1zLCBhbGlnbm1lbnQsIGJ5dGVzKTsKK30KKwordm9pZCoqIG1zcGFjZV9pbmRlcGVuZGVudF9jYWxsb2MobXNwYWNlIG1zcCwgc2l6ZV90IG5fZWxlbWVudHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgZWxlbV9zaXplLCB2b2lkKiBjaHVua3NbXSkgeworICBzaXplX3Qgc3ogPSBlbGVtX3NpemU7IC8qIHNlcnZlcyBhcyAxLWVsZW1lbnQgYXJyYXkgKi8KKyAgbXN0YXRlIG1zID0gKG1zdGF0ZSltc3A7CisgIGlmICghb2tfbWFnaWMobXMpKSB7CisgICAgVVNBR0VfRVJST1JfQUNUSU9OKG1zLG1zKTsKKyAgICByZXR1cm4gMDsKKyAgfQorICByZXR1cm4gaWFsbG9jKG1zLCBuX2VsZW1lbnRzLCAmc3osIDMsIGNodW5rcyk7Cit9CisKK3ZvaWQqKiBtc3BhY2VfaW5kZXBlbmRlbnRfY29tYWxsb2MobXNwYWNlIG1zcCwgc2l6ZV90IG5fZWxlbWVudHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBzaXplc1tdLCB2b2lkKiBjaHVua3NbXSkgeworICBtc3RhdGUgbXMgPSAobXN0YXRlKW1zcDsKKyAgaWYgKCFva19tYWdpYyhtcykpIHsKKyAgICBVU0FHRV9FUlJPUl9BQ1RJT04obXMsbXMpOworICAgIHJldHVybiAwOworICB9CisgIHJldHVybiBpYWxsb2MobXMsIG5fZWxlbWVudHMsIHNpemVzLCAwLCBjaHVua3MpOworfQorCitzaXplX3QgbXNwYWNlX2J1bGtfZnJlZShtc3BhY2UgbXNwLCB2b2lkKiBhcnJheVtdLCBzaXplX3QgbmVsZW0pIHsKKyAgcmV0dXJuIGludGVybmFsX2J1bGtfZnJlZSgobXN0YXRlKW1zcCwgYXJyYXksIG5lbGVtKTsKK30KKworI2lmIE1BTExPQ19JTlNQRUNUX0FMTAordm9pZCBtc3BhY2VfaW5zcGVjdF9hbGwobXNwYWNlIG1zcCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQoKmhhbmRsZXIpKHZvaWQgKnN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqZW5kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHVzZWRfYnl0ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiBjYWxsYmFja19hcmcpLAorICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCogYXJnKSB7CisgIG1zdGF0ZSBtcyA9IChtc3RhdGUpbXNwOworICBpZiAob2tfbWFnaWMobXMpKSB7CisgICAgaWYgKCFQUkVBQ1RJT04obXMpKSB7CisgICAgICBpbnRlcm5hbF9pbnNwZWN0X2FsbChtcywgaGFuZGxlciwgYXJnKTsKKyAgICAgIFBPU1RBQ1RJT04obXMpOworICAgIH0KKyAgfQorICBlbHNlIHsKKyAgICBVU0FHRV9FUlJPUl9BQ1RJT04obXMsbXMpOworICB9Cit9CisjZW5kaWYgLyogTUFMTE9DX0lOU1BFQ1RfQUxMICovCisKK2ludCBtc3BhY2VfdHJpbShtc3BhY2UgbXNwLCBzaXplX3QgcGFkKSB7CisgIGludCByZXN1bHQgPSAwOworICBtc3RhdGUgbXMgPSAobXN0YXRlKW1zcDsKKyAgaWYgKG9rX21hZ2ljKG1zKSkgeworICAgIGlmICghUFJFQUNUSU9OKG1zKSkgeworICAgICAgcmVzdWx0ID0gc3lzX3RyaW0obXMsIHBhZCk7CisgICAgICBQT1NUQUNUSU9OKG1zKTsKKyAgICB9CisgIH0KKyAgZWxzZSB7CisgICAgVVNBR0VfRVJST1JfQUNUSU9OKG1zLG1zKTsKKyAgfQorICByZXR1cm4gcmVzdWx0OworfQorCisjaWYgIU5PX01BTExPQ19TVEFUUwordm9pZCBtc3BhY2VfbWFsbG9jX3N0YXRzKG1zcGFjZSBtc3ApIHsKKyAgbXN0YXRlIG1zID0gKG1zdGF0ZSltc3A7CisgIGlmIChva19tYWdpYyhtcykpIHsKKyAgICBpbnRlcm5hbF9tYWxsb2Nfc3RhdHMobXMpOworICB9CisgIGVsc2UgeworICAgIFVTQUdFX0VSUk9SX0FDVElPTihtcyxtcyk7CisgIH0KK30KKyNlbmRpZiAvKiBOT19NQUxMT0NfU1RBVFMgKi8KKworc2l6ZV90IG1zcGFjZV9mb290cHJpbnQobXNwYWNlIG1zcCkgeworICBzaXplX3QgcmVzdWx0ID0gMDsKKyAgbXN0YXRlIG1zID0gKG1zdGF0ZSltc3A7CisgIGlmIChva19tYWdpYyhtcykpIHsKKyAgICByZXN1bHQgPSBtcy0+Zm9vdHByaW50OworICB9CisgIGVsc2UgeworICAgIFVTQUdFX0VSUk9SX0FDVElPTihtcyxtcyk7CisgIH0KKyAgcmV0dXJuIHJlc3VsdDsKK30KKworc2l6ZV90IG1zcGFjZV9tYXhfZm9vdHByaW50KG1zcGFjZSBtc3ApIHsKKyAgc2l6ZV90IHJlc3VsdCA9IDA7CisgIG1zdGF0ZSBtcyA9IChtc3RhdGUpbXNwOworICBpZiAob2tfbWFnaWMobXMpKSB7CisgICAgcmVzdWx0ID0gbXMtPm1heF9mb290cHJpbnQ7CisgIH0KKyAgZWxzZSB7CisgICAgVVNBR0VfRVJST1JfQUNUSU9OKG1zLG1zKTsKKyAgfQorICByZXR1cm4gcmVzdWx0OworfQorCitzaXplX3QgbXNwYWNlX2Zvb3RwcmludF9saW1pdChtc3BhY2UgbXNwKSB7CisgIHNpemVfdCByZXN1bHQgPSAwOworICBtc3RhdGUgbXMgPSAobXN0YXRlKW1zcDsKKyAgaWYgKG9rX21hZ2ljKG1zKSkgeworICAgIHNpemVfdCBtYWYgPSBtcy0+Zm9vdHByaW50X2xpbWl0OworICAgIHJlc3VsdCA9IChtYWYgPT0gMCkgPyBNQVhfU0laRV9UIDogbWFmOworICB9CisgIGVsc2UgeworICAgIFVTQUdFX0VSUk9SX0FDVElPTihtcyxtcyk7CisgIH0KKyAgcmV0dXJuIHJlc3VsdDsKK30KKworc2l6ZV90IG1zcGFjZV9zZXRfZm9vdHByaW50X2xpbWl0KG1zcGFjZSBtc3AsIHNpemVfdCBieXRlcykgeworICBzaXplX3QgcmVzdWx0ID0gMDsKKyAgbXN0YXRlIG1zID0gKG1zdGF0ZSltc3A7CisgIGlmIChva19tYWdpYyhtcykpIHsKKyAgICBpZiAoYnl0ZXMgPT0gMCkKKyAgICAgIHJlc3VsdCA9IGdyYW51bGFyaXR5X2FsaWduKDEpOyAvKiBVc2UgbWluaW1hbCBzaXplICovCisgICAgaWYgKGJ5dGVzID09IE1BWF9TSVpFX1QpCisgICAgICByZXN1bHQgPSAwOyAgICAgICAgICAgICAgICAgICAgLyogZGlzYWJsZSAqLworICAgIGVsc2UKKyAgICAgIHJlc3VsdCA9IGdyYW51bGFyaXR5X2FsaWduKGJ5dGVzKTsKKyAgICBtcy0+Zm9vdHByaW50X2xpbWl0ID0gcmVzdWx0OworICB9CisgIGVsc2UgeworICAgIFVTQUdFX0VSUk9SX0FDVElPTihtcyxtcyk7CisgIH0KKyAgcmV0dXJuIHJlc3VsdDsKK30KKworI2lmICFOT19NQUxMSU5GTworc3RydWN0IG1hbGxpbmZvIG1zcGFjZV9tYWxsaW5mbyhtc3BhY2UgbXNwKSB7CisgIG1zdGF0ZSBtcyA9IChtc3RhdGUpbXNwOworICBpZiAoIW9rX21hZ2ljKG1zKSkgeworICAgIFVTQUdFX0VSUk9SX0FDVElPTihtcyxtcyk7CisgIH0KKyAgcmV0dXJuIGludGVybmFsX21hbGxpbmZvKG1zKTsKK30KKyNlbmRpZiAvKiBOT19NQUxMSU5GTyAqLworCitzaXplX3QgbXNwYWNlX3VzYWJsZV9zaXplKGNvbnN0IHZvaWQqIG1lbSkgeworICBpZiAobWVtICE9IDApIHsKKyAgICBtY2h1bmtwdHIgcCA9IG1lbTJjaHVuayhtZW0pOworICAgIGlmIChpc19pbnVzZShwKSkKKyAgICAgIHJldHVybiBjaHVua3NpemUocCkgLSBvdmVyaGVhZF9mb3IocCk7CisgIH0KKyAgcmV0dXJuIDA7Cit9CisKK2ludCBtc3BhY2VfbWFsbG9wdChpbnQgcGFyYW1fbnVtYmVyLCBpbnQgdmFsdWUpIHsKKyAgcmV0dXJuIGNoYW5nZV9tcGFyYW0ocGFyYW1fbnVtYmVyLCB2YWx1ZSk7Cit9CisKKyNlbmRpZiAvKiBNU1BBQ0VTICovCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0gQWx0ZXJuYXRpdmUgTU9SRUNPUkUgZnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyoKKyAgR3VpZGVsaW5lcyBmb3IgY3JlYXRpbmcgYSBjdXN0b20gdmVyc2lvbiBvZiBNT1JFQ09SRToKKworICAqIEZvciBiZXN0IHBlcmZvcm1hbmNlLCBNT1JFQ09SRSBzaG91bGQgYWxsb2NhdGUgaW4gbXVsdGlwbGVzIG9mIHBhZ2VzaXplLgorICAqIE1PUkVDT1JFIG1heSBhbGxvY2F0ZSBtb3JlIG1lbW9yeSB0aGFuIHJlcXVlc3RlZC4gKE9yIGV2ZW4gbGVzcywKKyAgICAgIGJ1dCB0aGlzIHdpbGwgdXN1YWxseSByZXN1bHQgaW4gYSBtYWxsb2MgZmFpbHVyZS4pCisgICogTU9SRUNPUkUgbXVzdCBub3QgYWxsb2NhdGUgbWVtb3J5IHdoZW4gZ2l2ZW4gYXJndW1lbnQgemVybywgYnV0CisgICAgICBpbnN0ZWFkIHJldHVybiBvbmUgcGFzdCB0aGUgZW5kIGFkZHJlc3Mgb2YgbWVtb3J5IGZyb20gcHJldmlvdXMKKyAgICAgIG5vbnplcm8gY2FsbC4KKyAgKiBGb3IgYmVzdCBwZXJmb3JtYW5jZSwgY29uc2VjdXRpdmUgY2FsbHMgdG8gTU9SRUNPUkUgd2l0aCBwb3NpdGl2ZQorICAgICAgYXJndW1lbnRzIHNob3VsZCByZXR1cm4gaW5jcmVhc2luZyBhZGRyZXNzZXMsIGluZGljYXRpbmcgdGhhdAorICAgICAgc3BhY2UgaGFzIGJlZW4gY29udGlndW91c2x5IGV4dGVuZGVkLgorICAqIEV2ZW4gdGhvdWdoIGNvbnNlY3V0aXZlIGNhbGxzIHRvIE1PUkVDT1JFIG5lZWQgbm90IHJldHVybiBjb250aWd1b3VzCisgICAgICBhZGRyZXNzZXMsIGl0IG11c3QgYmUgT0sgZm9yIG1hbGxvYydlZCBjaHVua3MgdG8gc3BhbiBtdWx0aXBsZQorICAgICAgcmVnaW9ucyBpbiB0aG9zZSBjYXNlcyB3aGVyZSB0aGV5IGRvIGhhcHBlbiB0byBiZSBjb250aWd1b3VzLgorICAqIE1PUkVDT1JFIG5lZWQgbm90IGhhbmRsZSBuZWdhdGl2ZSBhcmd1bWVudHMgLS0gaXQgbWF5IGluc3RlYWQKKyAgICAgIGp1c3QgcmV0dXJuIE1GQUlMIHdoZW4gZ2l2ZW4gbmVnYXRpdmUgYXJndW1lbnRzLgorICAgICAgTmVnYXRpdmUgYXJndW1lbnRzIGFyZSBhbHdheXMgbXVsdGlwbGVzIG9mIHBhZ2VzaXplLiBNT1JFQ09SRQorICAgICAgbXVzdCBub3QgbWlzaW50ZXJwcmV0IG5lZ2F0aXZlIGFyZ3MgYXMgbGFyZ2UgcG9zaXRpdmUgdW5zaWduZWQKKyAgICAgIGFyZ3MuIFlvdSBjYW4gc3VwcHJlc3MgYWxsIHN1Y2ggY2FsbHMgZnJvbSBldmVuIG9jY3VycmluZyBieSBkZWZpbmluZworICAgICAgTU9SRUNPUkVfQ0FOTk9UX1RSSU0sCisKKyAgQXMgYW4gZXhhbXBsZSBhbHRlcm5hdGl2ZSBNT1JFQ09SRSwgaGVyZSBpcyBhIGN1c3RvbSBhbGxvY2F0b3IKKyAga2luZGx5IGNvbnRyaWJ1dGVkIGZvciBwcmUtT1NYIG1hY09TLiAgSXQgdXNlcyB2aXJ0dWFsbHkgYnV0IG5vdAorICBuZWNlc3NhcmlseSBwaHlzaWNhbGx5IGNvbnRpZ3VvdXMgbm9uLXBhZ2VkIG1lbW9yeSAobG9ja2VkIGluLAorICBwcmVzZW50IGFuZCB3b24ndCBnZXQgc3dhcHBlZCBvdXQpLiAgWW91IGNhbiB1c2UgaXQgYnkgdW5jb21tZW50aW5nCisgIHRoaXMgc2VjdGlvbiwgYWRkaW5nIHNvbWUgI2luY2x1ZGVzLCBhbmQgc2V0dGluZyB1cCB0aGUgYXBwcm9wcmlhdGUKKyAgZGVmaW5lcyBhYm92ZToKKworICAgICAgI2RlZmluZSBNT1JFQ09SRSBvc01vcmVDb3JlCisKKyAgVGhlcmUgaXMgYWxzbyBhIHNodXRkb3duIHJvdXRpbmUgdGhhdCBzaG91bGQgc29tZWhvdyBiZSBjYWxsZWQgZm9yCisgIGNsZWFudXAgdXBvbiBwcm9ncmFtIGV4aXQuCisKKyAgI2RlZmluZSBNQVhfUE9PTF9FTlRSSUVTIDEwMAorICAjZGVmaW5lIE1JTklNVU1fTU9SRUNPUkVfU0laRSAgKDY0ICogMTAyNFUpCisgIHN0YXRpYyBpbnQgbmV4dF9vc19wb29sOworICB2b2lkICpvdXJfb3NfcG9vbHNbTUFYX1BPT0xfRU5UUklFU107CisKKyAgdm9pZCAqb3NNb3JlQ29yZShpbnQgc2l6ZSkKKyAgeworICAgIHZvaWQgKnB0ciA9IDA7CisgICAgc3RhdGljIHZvaWQgKnNicmtfdG9wID0gMDsKKworICAgIGlmIChzaXplID4gMCkKKyAgICB7CisgICAgICBpZiAoc2l6ZSA8IE1JTklNVU1fTU9SRUNPUkVfU0laRSkKKyAgICAgICAgIHNpemUgPSBNSU5JTVVNX01PUkVDT1JFX1NJWkU7CisgICAgICBpZiAoQ3VycmVudEV4ZWN1dGlvbkxldmVsKCkgPT0ga1Rhc2tMZXZlbCkKKyAgICAgICAgIHB0ciA9IFBvb2xBbGxvY2F0ZVJlc2lkZW50KHNpemUgKyBSTV9QQUdFX1NJWkUsIDApOworICAgICAgaWYgKHB0ciA9PSAwKQorICAgICAgeworICAgICAgICByZXR1cm4gKHZvaWQgKikgTUZBSUw7CisgICAgICB9CisgICAgICAvLyBzYXZlIHB0cnMgc28gdGhleSBjYW4gYmUgZnJlZWQgZHVyaW5nIGNsZWFudXAKKyAgICAgIG91cl9vc19wb29sc1tuZXh0X29zX3Bvb2xdID0gcHRyOworICAgICAgbmV4dF9vc19wb29sKys7CisgICAgICBwdHIgPSAodm9pZCAqKSAoKCgoc2l6ZV90KSBwdHIpICsgUk1fUEFHRV9NQVNLKSAmIH5STV9QQUdFX01BU0spOworICAgICAgc2Jya190b3AgPSAoY2hhciAqKSBwdHIgKyBzaXplOworICAgICAgcmV0dXJuIHB0cjsKKyAgICB9CisgICAgZWxzZSBpZiAoc2l6ZSA8IDApCisgICAgeworICAgICAgLy8gd2UgZG9uJ3QgY3VycmVudGx5IHN1cHBvcnQgc2hyaW5rIGJlaGF2aW9yCisgICAgICByZXR1cm4gKHZvaWQgKikgTUZBSUw7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICByZXR1cm4gc2Jya190b3A7CisgICAgfQorICB9CisKKyAgLy8gY2xlYW51cCBhbnkgYWxsb2NhdGVkIG1lbW9yeSBwb29scworICAvLyBjYWxsZWQgYXMgbGFzdCB0aGluZyBiZWZvcmUgc2h1dHRpbmcgZG93biBkcml2ZXIKKworICB2b2lkIG9zQ2xlYW51cE1lbSh2b2lkKQorICB7CisgICAgdm9pZCAqKnB0cjsKKworICAgIGZvciAocHRyID0gb3VyX29zX3Bvb2xzOyBwdHIgPCAmb3VyX29zX3Bvb2xzW01BWF9QT09MX0VOVFJJRVNdOyBwdHIrKykKKyAgICAgIGlmICgqcHRyKQorICAgICAgeworICAgICAgICAgUG9vbERlYWxsb2NhdGUoKnB0cik7CisgICAgICAgICAqcHRyID0gMDsKKyAgICAgIH0KKyAgfQorCisqLworCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitIaXN0b3J5OgorICAgIHYyLjguNiBXZWQgQXVnIDI5IDA2OjU3OjU4IDIwMTIgIERvdWcgTGVhCisgICAgICAqIGZpeCBiYWQgY29tcGFyaXNvbiBpbiBkbHBvc2l4X21lbWFsaWduCisgICAgICAqIGRvbid0IHJldXNlIGFkanVzdGVkIGFzaXplIGluIHN5c19hbGxvYworICAgICAgKiBhZGQgTE9DS19BVF9GT1JLIC0tIHRoYW5rcyB0byBLaXJpbGwgQXJ0YW1vbm92IGZvciB0aGUgc3VnZ2VzdGlvbgorICAgICAgKiByZWR1Y2UgY29tcGlsZXIgd2FybmluZ3MgLS0gdGhhbmtzIHRvIGFsbCB3aG8gcmVwb3J0ZWQvc3VnZ2VzdGVkIHRoZXNlCisKKyAgICB2Mi44LjUgU3VuIE1heSAyMiAxMDoyNjowMiAyMDExICBEb3VnIExlYSAgKGRsIGF0IGdlZSkKKyAgICAgICogQWx3YXlzIHBlcmZvcm0gdW5saW5rIGNoZWNrcyB1bmxlc3MgSU5TRUNVUkUKKyAgICAgICogQWRkIHBvc2l4X21lbWFsaWduLgorICAgICAgKiBJbXByb3ZlIHJlYWxsb2MgdG8gZXhwYW5kIGluIG1vcmUgY2FzZXM7IGV4cG9zZSByZWFsbG9jX2luX3BsYWNlLgorICAgICAgICBUaGFua3MgdG8gUGV0ZXIgQnVociBmb3IgdGhlIHN1Z2dlc3Rpb24uCisgICAgICAqIEFkZCBmb290cHJpbnRfbGltaXQsIGluc3BlY3RfYWxsLCBidWxrX2ZyZWUuIFRoYW5rcworICAgICAgICB0byBCYXJyeSBIYXllcyBhbmQgb3RoZXJzIGZvciB0aGUgc3VnZ2VzdGlvbnMuCisgICAgICAqIEludGVybmFsIHJlZmFjdG9yaW5ncyB0byBhdm9pZCBjYWxscyB3aGlsZSBob2xkaW5nIGxvY2tzCisgICAgICAqIFVzZSBub24tcmVlbnRyYW50IGxvY2tzIGJ5IGRlZmF1bHQuIFRoYW5rcyB0byBSb2xhbmQgTWNHcmF0aAorICAgICAgICBmb3IgdGhlIHN1Z2dlc3Rpb24uCisgICAgICAqIFNtYWxsIGZpeGVzIHRvIG1zcGFjZV9kZXN0cm95LCByZXNldF9vbl9lcnJvci4KKyAgICAgICogVmFyaW91cyBjb25maWd1cmF0aW9uIGV4dGVuc2lvbnMvY2hhbmdlcy4gVGhhbmtzCisgICAgICAgICB0byBhbGwgd2hvIGNvbnRyaWJ1dGVkIHRoZXNlLgorCisgICAgVjIuOC40YSBUaHUgQXByIDI4IDE0OjM5OjQzIDIwMTEgKGRsIGF0IGdlZS5jcy5vc3dlZ28uZWR1KQorICAgICAgKiBVcGRhdGUgQ3JlYXRpdmUgQ29tbW9ucyBVUkwKKworICAgIFYyLjguNCBXZWQgTWF5IDI3IDA5OjU2OjIzIDIwMDkgIERvdWcgTGVhICAoZGwgYXQgZ2VlKQorICAgICAgKiBVc2UgemVyb3MgaW5zdGVhZCBvZiBwcmV2IGZvb3QgZm9yIGlzX21tYXBwZWQKKyAgICAgICogQWRkIG1zcGFjZV90cmFja19sYXJnZV9jaHVua3M7IHRoYW5rcyB0byBKZWFuIEJyb3V3ZXJzCisgICAgICAqIEZpeCBzZXRfaW51c2UgaW4gaW50ZXJuYWxfcmVhbGxvYzsgdGhhbmtzIHRvIEplYW4gQnJvdXdlcnMKKyAgICAgICogRml4IGluc3VmZmljaWVudCBzeXNfYWxsb2MgcGFkZGluZyB3aGVuIHVzaW5nIDE2Ynl0ZSBhbGlnbm1lbnQKKyAgICAgICogRml4IGJhZCBlcnJvciBjaGVjayBpbiBtc3BhY2VfZm9vdHByaW50CisgICAgICAqIEFkYXB0YXRpb25zIGZvciBwdG1hbGxvYzsgdGhhbmtzIHRvIFdvbGZyYW0gR2xvZ2VyLgorICAgICAgKiBSZWVudHJhbnQgc3BpbiBsb2NrczsgdGhhbmtzIHRvIEVhcmwgQ2hldyBhbmQgb3RoZXJzCisgICAgICAqIFdpbjMyIGltcHJvdmVtZW50czsgdGhhbmtzIHRvIE5pYWxsIERvdWdsYXMgYW5kIEVhcmwgQ2hldworICAgICAgKiBBZGQgTk9fU0VHTUVOVF9UUkFWRVJTQUwgYW5kIE1BWF9SRUxFQVNFX0NIRUNLX1JBVEUgb3B0aW9ucworICAgICAgKiBFeHRlbnNpb24gaG9vayBpbiBtYWxsb2Nfc3RhdGUKKyAgICAgICogVmFyaW91cyBzbWFsbCBhZGp1c3RtZW50cyB0byByZWR1Y2Ugd2FybmluZ3Mgb24gc29tZSBjb21waWxlcnMKKyAgICAgICogVmFyaW91cyBjb25maWd1cmF0aW9uIGV4dGVuc2lvbnMvY2hhbmdlcyBmb3IgbW9yZSBwbGF0Zm9ybXMuIFRoYW5rcworICAgICAgICAgdG8gYWxsIHdobyBjb250cmlidXRlZCB0aGVzZS4KKworICAgIFYyLjguMyBUaHUgU2VwIDIyIDExOjE2OjMyIDIwMDUgIERvdWcgTGVhICAoZGwgYXQgZ2VlKQorICAgICAgKiBBZGQgbWF4X2Zvb3RwcmludCBmdW5jdGlvbnMKKyAgICAgICogRW5zdXJlIGFsbCBhcHByb3ByaWF0ZSBsaXRlcmFscyBhcmUgc2l6ZV90CisgICAgICAqIEZpeCBjb25kaXRpb25hbCBjb21waWxhdGlvbiBwcm9ibGVtIGZvciBzb21lICNkZWZpbmUgc2V0dGluZ3MKKyAgICAgICogQXZvaWQgY29uY2F0ZW5hdGluZyBzZWdtZW50cyB3aXRoIHRoZSBvbmUgcHJvdmlkZWQKKyAgICAgICAgaW4gY3JlYXRlX21zcGFjZV93aXRoX2Jhc2UKKyAgICAgICogUmVuYW1lIHNvbWUgdmFyaWFibGVzIHRvIGF2b2lkIGNvbXBpbGVyIHNoYWRvd2luZyB3YXJuaW5ncworICAgICAgKiBVc2UgZXhwbGljaXQgbG9jayBpbml0aWFsaXphdGlvbi4KKyAgICAgICogQmV0dGVyIGhhbmRsaW5nIG9mIHNicmsgaW50ZXJmZXJlbmNlLgorICAgICAgKiBTaW1wbGlmeSBhbmQgZml4IHNlZ21lbnQgaW5zZXJ0aW9uLCB0cmltbWluZyBhbmQgbXNwYWNlX2Rlc3Ryb3kKKyAgICAgICogUmVpbnN0YXRlIFJFQUxMT0NfWkVST19CWVRFU19GUkVFUyBvcHRpb24gZnJvbSAyLjcueAorICAgICAgKiBUaGFua3MgZXNwZWNpYWxseSB0byBEZW5uaXMgRmxhbmFnYW4gZm9yIGhlbHAgb24gdGhlc2UuCisKKyAgICBWMi44LjIgU3VuIEp1biAxMiAxNjowMToxMCAyMDA1ICBEb3VnIExlYSAgKGRsIGF0IGdlZSkKKyAgICAgICogRml4IG1lbWFsaWduIGJyYWNlIGVycm9yLgorCisgICAgVjIuOC4xIFdlZCBKdW4gIDggMTY6MTE6NDYgMjAwNSAgRG91ZyBMZWEgIChkbCBhdCBnZWUpCisgICAgICAqIEZpeCBpbXByb3BlciAjZW5kaWYgbmVzdGluZyBpbiBDKysKKyAgICAgICogQWRkIGV4cGxpY2l0IGNhc3RzIG5lZWRlZCBmb3IgQysrCisKKyAgICBWMi44LjAgTW9uIE1heSAzMCAxNDowOTowMiAyMDA1ICBEb3VnIExlYSAgKGRsIGF0IGdlZSkKKyAgICAgICogVXNlIHRyZWVzIGZvciBsYXJnZSBiaW5zCisgICAgICAqIFN1cHBvcnQgbXNwYWNlcworICAgICAgKiBVc2Ugc2VnbWVudHMgdG8gdW5pZnkgc2Jyay1iYXNlZCBhbmQgbW1hcC1iYXNlZCBzeXN0ZW0gYWxsb2NhdGlvbiwKKyAgICAgICAgcmVtb3ZpbmcgbmVlZCBmb3IgZW11bGF0aW9uIG9uIG1vc3QgcGxhdGZvcm1zIHdpdGhvdXQgc2Jyay4KKyAgICAgICogRGVmYXVsdCBzYWZldHkgY2hlY2tzCisgICAgICAqIE9wdGlvbmFsIGZvb3RlciBjaGVja3MuIFRoYW5rcyB0byBXaWxsaWFtIFJvYmVydHNvbiBmb3IgdGhlIGlkZWEuCisgICAgICAqIEludGVybmFsIGNvZGUgcmVmYWN0b3JpbmcKKyAgICAgICogSW5jb3Jwb3JhdGUgc3VnZ2VzdGlvbnMgYW5kIHBsYXRmb3JtLXNwZWNpZmljIGNoYW5nZXMuCisgICAgICAgIFRoYW5rcyB0byBEZW5uaXMgRmxhbmFnYW4sIENvbGluIFBsdW1iLCBOaWFsbCBEb3VnbGFzLAorICAgICAgICBBYXJvbiBCYWNobWFubiwgIEVtZXJ5IEJlcmdlciwgYW5kIG90aGVycy4KKyAgICAgICogU3BlZWQgdXAgbm9uLWZhc3RiaW4gcHJvY2Vzc2luZyBlbm91Z2ggdG8gcmVtb3ZlIGZhc3RiaW5zLgorICAgICAgKiBSZW1vdmUgdXNlbGVzcyBjZnJlZSgpIHRvIGF2b2lkIGNvbmZsaWN0cyB3aXRoIG90aGVyIGFwcHMuCisgICAgICAqIFJlbW92ZSBpbnRlcm5hbCBtZW1jcHksIG1lbXNldC4gQ29tcGlsZXJzIGhhbmRsZSBidWlsdGlucyBiZXR0ZXIuCisgICAgICAqIFJlbW92ZSBzb21lIG9wdGlvbnMgdGhhdCBubyBvbmUgZXZlciB1c2VkIGFuZCByZW5hbWUgb3RoZXJzLgorCisgICAgVjIuNy4yIFNhdCBBdWcgMTcgMDk6MDc6MzAgMjAwMiAgRG91ZyBMZWEgIChkbCBhdCBnZWUpCisgICAgICAqIEZpeCBtYWxsb2Nfc3RhdGUgYml0bWFwIGFycmF5IG1pc2RlY2xhcmF0aW9uCisKKyAgICBWMi43LjEgVGh1IEp1bCAyNSAxMDo1ODowMyAyMDAyICBEb3VnIExlYSAgKGRsIGF0IGdlZSkKKyAgICAgICogQWxsb3cgdHVuaW5nIG9mIEZJUlNUX1NPUlRFRF9CSU5fU0laRQorICAgICAgKiBVc2UgUFRSX1VJTlQgYXMgdHlwZSBmb3IgYWxsIHB0ci0+aW50IGNhc3RzLiBUaGFua3MgdG8gSm9obiBCZWxtb250ZS4KKyAgICAgICogQmV0dGVyIGRldGVjdGlvbiBhbmQgc3VwcG9ydCBmb3Igbm9uLWNvbnRpZ3VvdXNuZXNzIG9mIE1PUkVDT1JFLgorICAgICAgICBUaGFua3MgdG8gQW5kcmVhcyBNdWVsbGVyLCBDb25hbCBXYWxzaCwgYW5kIFdvbGZyYW0gR2xvZ2VyCisgICAgICAqIEJ5cGFzcyBtb3N0IG9mIG1hbGxvYyBpZiBubyBmcmVlcy4gVGhhbmtzIFRvIEVtZXJ5IEJlcmdlci4KKyAgICAgICogRml4IGZyZWVpbmcgb2Ygb2xkIHRvcCBub24tY29udGlndW91cyBjaHVuayBpbSBzeXNtYWxsb2MuCisgICAgICAqIFJhaXNlZCBkZWZhdWx0IHRyaW0gYW5kIG1hcCB0aHJlc2hvbGRzIHRvIDI1NksuCisgICAgICAqIEZpeCBtbWFwLXJlbGF0ZWQgI2RlZmluZXMuIFRoYW5rcyB0byBMdWJvcyBMdW5hay4KKyAgICAgICogRml4IGNvcHkgbWFjcm9zOyBhZGRlZCBMQUNLU19GQ05UTF9ILiBUaGFua3MgdG8gTmVhbCBXYWxmaWVsZC4KKyAgICAgICogQnJhbmNoLWZyZWUgYmluIGNhbGN1bGF0aW9uCisgICAgICAqIERlZmF1bHQgdHJpbSBhbmQgbW1hcCB0aHJlc2hvbGRzIG5vdyAyNTZLLgorCisgICAgVjIuNy4wIFN1biBNYXIgMTEgMTQ6MTQ6MDYgMjAwMSAgRG91ZyBMZWEgIChkbCBhdCBnZWUpCisgICAgICAqIEludHJvZHVjZSBpbmRlcGVuZGVudF9jb21hbGxvYyBhbmQgaW5kZXBlbmRlbnRfY2FsbG9jLgorICAgICAgICBUaGFua3MgdG8gTWljaGFlbCBQYWNob3MgZm9yIG1vdGl2YXRpb24gYW5kIGhlbHAuCisgICAgICAqIE1ha2Ugb3B0aW9uYWwgLmggZmlsZSBhdmFpbGFibGUKKyAgICAgICogQWxsb3cgPiAyR0IgcmVxdWVzdHMgb24gMzJiaXQgc3lzdGVtcy4KKyAgICAgICogbmV3IFdJTjMyIHNicmssIG1tYXAsIG11bm1hcCwgbG9jayBjb2RlIGZyb20gPFdhbHRlckBHZU5lU3lzLWUuZGU+LgorICAgICAgICBUaGFua3MgYWxzbyB0byBBbmRyZWFzIE11ZWxsZXIgPGEubXVlbGxlciBhdCBwYXJhZGF0ZWMuZGU+LAorICAgICAgICBhbmQgQW5vbnltb3VzLgorICAgICAgKiBBbGxvdyBvdmVycmlkZSBvZiBNQUxMT0NfQUxJR05NRU5UIChUaGFua3MgdG8gUnV1ZCBXYWlqIGZvcgorICAgICAgICBoZWxwaW5nIHRlc3QgdGhpcy4pCisgICAgICAqIG1lbWFsaWduOiBjaGVjayBhbGlnbm1lbnQgYXJnCisgICAgICAqIHJlYWxsb2M6IGRvbid0IHRyeSB0byBzaGlmdCBjaHVua3MgYmFja3dhcmRzLCBzaW5jZSB0aGlzCisgICAgICAgIGxlYWRzIHRvICBtb3JlIGZyYWdtZW50YXRpb24gaW4gc29tZSBwcm9ncmFtcyBhbmQgZG9lc24ndAorICAgICAgICBzZWVtIHRvIGhlbHAgaW4gYW55IG90aGVycy4KKyAgICAgICogQ29sbGVjdCBhbGwgY2FzZXMgaW4gbWFsbG9jIHJlcXVpcmluZyBzeXN0ZW0gbWVtb3J5IGludG8gc3lzbWFsbG9jCisgICAgICAqIFVzZSBtbWFwIGFzIGJhY2t1cCB0byBzYnJrCisgICAgICAqIFBsYWNlIGFsbCBpbnRlcm5hbCBzdGF0ZSBpbiBtYWxsb2Nfc3RhdGUKKyAgICAgICogSW50cm9kdWNlIGZhc3RiaW5zIChhbHRob3VnaCBzaW1pbGFyIHRvIDIuNS4xKQorICAgICAgKiBNYW55IG1pbm9yIHR1bmluZ3MgYW5kIGNvc21ldGljIGltcHJvdmVtZW50cworICAgICAgKiBJbnRyb2R1Y2UgVVNFX1BVQkxJQ19NQUxMT0NfV1JBUFBFUlMsIFVTRV9NQUxMT0NfTE9DSworICAgICAgKiBJbnRyb2R1Y2UgTUFMTE9DX0ZBSUxVUkVfQUNUSU9OLCBNT1JFQ09SRV9DT05USUdVT1VTCisgICAgICAgIFRoYW5rcyB0byBUb255IEUuIEJlbm5ldHQgPHRiZW5uZXR0QG52aWRpYS5jb20+IGFuZCBvdGhlcnMuCisgICAgICAqIEluY2x1ZGUgZXJybm8uaCB0byBzdXBwb3J0IGRlZmF1bHQgZmFpbHVyZSBhY3Rpb24uCisKKyAgICBWMi42LjYgU3VuIERlYyAgNSAwNzo0MjoxOSAxOTk5ICBEb3VnIExlYSAgKGRsIGF0IGdlZSkKKyAgICAgICogcmV0dXJuIG51bGwgZm9yIG5lZ2F0aXZlIGFyZ3VtZW50cworICAgICAgKiBBZGRlZCBTZXZlcmFsIFdJTjMyIGNsZWFudXBzIGZyb20gTWFydGluIEMuIEZvbmcgPG1jZm9uZyBhdCB5YWhvby5jb20+CisgICAgICAgICAqIEFkZCAnTEFDS1NfU1lTX1BBUkFNX0gnIGZvciB0aG9zZSBzeXN0ZW1zIHdpdGhvdXQgJ3N5cy9wYXJhbS5oJworICAgICAgICAgIChlLmcuIFdJTjMyIHBsYXRmb3JtcykKKyAgICAgICAgICogQ2xlYW51cCBoZWFkZXIgZmlsZSBpbmNsdXNpb24gZm9yIFdJTjMyIHBsYXRmb3JtcworICAgICAgICAgKiBDbGVhbnVwIGNvZGUgdG8gYXZvaWQgTWljcm9zb2Z0IFZpc3VhbCBDKysgY29tcGlsZXIgY29tcGxhaW50cworICAgICAgICAgKiBBZGQgJ1VTRV9ETF9QUkVGSVgnIHRvIHF1aWNrbHkgYWxsb3cgY28tZXhpc3RlbmNlIHdpdGggZXhpc3RpbmcKKyAgICAgICAgICAgbWVtb3J5IGFsbG9jYXRpb24gcm91dGluZXMKKyAgICAgICAgICogU2V0ICdtYWxsb2NfZ2V0cGFnZXNpemUnIGZvciBXSU4zMiBwbGF0Zm9ybXMgKG5lZWRzIG1vcmUgd29yaykKKyAgICAgICAgICogVXNlICdhc3NlcnQnIHJhdGhlciB0aGFuICdBU1NFUlQnIGluIFdJTjMyIGNvZGUgdG8gY29uZm9ybSB0bworICAgICAgICAgICB1c2FnZSBvZiAnYXNzZXJ0JyBpbiBub24tV0lOMzIgY29kZQorICAgICAgICAgKiBJbXByb3ZlIFdJTjMyICdzYnJrKCknIGVtdWxhdGlvbidzICdmaW5kUmVnaW9uKCknIHJvdXRpbmUgdG8KKyAgICAgICAgICAgYXZvaWQgaW5maW5pdGUgbG9vcAorICAgICAgKiBBbHdheXMgY2FsbCAnZlJFZSgpJyByYXRoZXIgdGhhbiAnZnJlZSgpJworCisgICAgVjIuNi41IFdlZCBKdW4gMTcgMTU6NTc6MzEgMTk5OCAgRG91ZyBMZWEgIChkbCBhdCBnZWUpCisgICAgICAqIEZpeGVkIG9yZGVyaW5nIHByb2JsZW0gd2l0aCBib3VuZGFyeS1zdGFtcGluZworCisgICAgVjIuNi4zIFN1biBNYXkgMTkgMDg6MTc6NTggMTk5NiAgRG91ZyBMZWEgIChkbCBhdCBnZWUpCisgICAgICAqIEFkZGVkIHB2YWxsb2MsIGFzIHJlY29tbWVuZGVkIGJ5IEguSi4gTGl1CisgICAgICAqIEFkZGVkIDY0Yml0IHBvaW50ZXIgc3VwcG9ydCBtYWlubHkgZnJvbSBXb2xmcmFtIEdsb2dlcgorICAgICAgKiBBZGRlZCBhbm9ueW1vdXNseSBkb25hdGVkIFdJTjMyIHNicmsgZW11bGF0aW9uCisgICAgICAqIE1hbGxvYywgY2FsbG9jLCBnZXRwYWdlc2l6ZTogYWRkIG9wdGltaXphdGlvbnMgZnJvbSBSYXltb25kIE5panNzZW4KKyAgICAgICogbWFsbG9jX2V4dGVuZF90b3A6IGZpeCBtYXNrIGVycm9yIHRoYXQgY2F1c2VkIHdhc3RhZ2UgYWZ0ZXIKKyAgICAgICAgZm9yZWlnbiBzYnJrcworICAgICAgKiBBZGQgbGludXggbXJlbWFwIHN1cHBvcnQgY29kZSBmcm9tIEhKIExpdQorCisgICAgVjIuNi4yIFR1ZSBEZWMgIDUgMDY6NTI6NTUgMTk5NSAgRG91ZyBMZWEgIChkbCBhdCBnZWUpCisgICAgICAqIEludGVncmF0ZWQgbW9zdCBkb2N1bWVudGF0aW9uIHdpdGggdGhlIGNvZGUuCisgICAgICAqIEFkZCBzdXBwb3J0IGZvciBtbWFwLCB3aXRoIGhlbHAgZnJvbQorICAgICAgICBXb2xmcmFtIEdsb2dlciAoR2xvZ2VyQGxyei51bmktbXVlbmNoZW4uZGUpLgorICAgICAgKiBVc2UgbGFzdF9yZW1haW5kZXIgaW4gbW9yZSBjYXNlcy4KKyAgICAgICogUGFjayBiaW5zIHVzaW5nIGlkZWEgZnJvbSAgY29saW5Abnl4MTAuY3MuZHUuZWR1CisgICAgICAqIFVzZSBvcmRlcmVkIGJpbnMgaW5zdGVhZCBvZiBiZXN0LWZpdCB0aHJlc2hob2xkCisgICAgICAqIEVsaW1pbmF0ZSBibG9jay1sb2NhbCBkZWNscyB0byBzaW1wbGlmeSB0cmFjaW5nIGFuZCBkZWJ1Z2dpbmcuCisgICAgICAqIFN1cHBvcnQgYW5vdGhlciBjYXNlIG9mIHJlYWxsb2MgdmlhIG1vdmUgaW50byB0b3AKKyAgICAgICogRml4IGVycm9yIG9jY3VyaW5nIHdoZW4gaW5pdGlhbCBzYnJrX2Jhc2Ugbm90IHdvcmQtYWxpZ25lZC4KKyAgICAgICogUmVseSBvbiBwYWdlIHNpemUgZm9yIHVuaXRzIGluc3RlYWQgb2YgU0JSS19VTklUIHRvCisgICAgICAgIGF2b2lkIHN1cnByaXNlcyBhYm91dCBzYnJrIGFsaWdubWVudCBjb252ZW50aW9ucy4KKyAgICAgICogQWRkIG1hbGxpbmZvLCBtYWxsb3B0LiBUaGFua3MgdG8gUmF5bW9uZCBOaWpzc2VuCisgICAgICAgIChyYXltb25kQGVzLmVsZS50dWUubmwpIGZvciB0aGUgc3VnZ2VzdGlvbi4KKyAgICAgICogQWRkIGBwYWQnIGFyZ3VtZW50IHRvIG1hbGxvY190cmltIGFuZCB0b3BfcGFkIG1hbGxvcHQgcGFyYW1ldGVyLgorICAgICAgKiBNb3JlIHByZWNhdXRpb25zIGZvciBjYXNlcyB3aGVyZSBvdGhlciByb3V0aW5lcyBjYWxsIHNicmssCisgICAgICAgIGNvdXJ0ZXN5IG9mIFdvbGZyYW0gR2xvZ2VyIChHbG9nZXJAbHJ6LnVuaS1tdWVuY2hlbi5kZSkuCisgICAgICAqIEFkZGVkIG1hY3JvcyBldGMuLCBhbGxvd2luZyB1c2UgaW4gbGludXggbGliYyBmcm9tCisgICAgICAgIEguSi4gTHUgKGhqbEBnbnUuYWkubWl0LmVkdSkKKyAgICAgICogSW52ZXJ0ZWQgdGhpcyBoaXN0b3J5IGxpc3QKKworICAgIFYyLjYuMSBTYXQgRGVjICAyIDE0OjEwOjU3IDE5OTUgIERvdWcgTGVhICAoZGwgYXQgZ2VlKQorICAgICAgKiBSZS10dW5lZCBhbmQgZml4ZWQgdG8gYmVoYXZlIG1vcmUgbmljZWx5IHdpdGggVjIuNi4wIGNoYW5nZXMuCisgICAgICAqIFJlbW92ZWQgYWxsIHByZWFsbG9jYXRpb24gY29kZSBzaW5jZSB1bmRlciBjdXJyZW50IHNjaGVtZQorICAgICAgICB0aGUgd29yayByZXF1aXJlZCB0byB1bmRvIGJhZCBwcmVhbGxvY2F0aW9ucyBleGNlZWRzCisgICAgICAgIHRoZSB3b3JrIHNhdmVkIGluIGdvb2QgY2FzZXMgZm9yIG1vc3QgdGVzdCBwcm9ncmFtcy4KKyAgICAgICogTm8gbG9uZ2VyIHVzZSByZXR1cm4gbGlzdCBvciB1bmNvbnNvbGlkYXRlZCBiaW5zIHNpbmNlCisgICAgICAgIG5vIHNjaGVtZSB1c2luZyB0aGVtIGNvbnNpc3RlbnRseSBvdXRwZXJmb3JtcyB0aG9zZSB0aGF0IGRvbid0CisgICAgICAgIGdpdmVuIGFib3ZlIGNoYW5nZXMuCisgICAgICAqIFVzZSBiZXN0IGZpdCBmb3IgdmVyeSBsYXJnZSBjaHVua3MgdG8gcHJldmVudCBzb21lIHdvcnN0LWNhc2VzLgorICAgICAgKiBBZGRlZCBzb21lIHN1cHBvcnQgZm9yIGRlYnVnZ2luZworCisgICAgVjIuNi4wIFNhdCBOb3YgIDQgMDc6MDU6MjMgMTk5NSAgRG91ZyBMZWEgIChkbCBhdCBnZWUpCisgICAgICAqIFJlbW92ZWQgZm9vdGVycyB3aGVuIGNodW5rcyBhcmUgaW4gdXNlLiBUaGFua3MgdG8KKyAgICAgICAgUGF1bCBXaWxzb24gKHdpbHNvbkBjcy50ZXhhcy5lZHUpIGZvciB0aGUgc3VnZ2VzdGlvbi4KKworICAgIFYyLjUuNCBXZWQgTm92ICAxIDA3OjU0OjUxIDE5OTUgIERvdWcgTGVhICAoZGwgYXQgZ2VlKQorICAgICAgKiBBZGRlZCBtYWxsb2NfdHJpbSwgd2l0aCBoZWxwIGZyb20gV29sZnJhbSBHbG9nZXIKKyAgICAgICAgKHdtZ2xvQERlbnQuTUVELlVuaS1NdWVuY2hlbi5ERSkuCisKKyAgICBWMi41LjMgVHVlIEFwciAyNiAxMDoxNjowMSAxOTk0ICBEb3VnIExlYSAgKGRsIGF0IGcpCisKKyAgICBWMi41LjIgVHVlIEFwciAgNSAxNjoyMDo0MCAxOTk0ICBEb3VnIExlYSAgKGRsIGF0IGcpCisgICAgICAqIHJlYWxsb2M6IHRyeSB0byBleHBhbmQgaW4gYm90aCBkaXJlY3Rpb25zCisgICAgICAqIG1hbGxvYzogc3dhcCBvcmRlciBvZiBjbGVhbi1iaW4gc3RyYXRlZ3k7CisgICAgICAqIHJlYWxsb2M6IG9ubHkgY29uZGl0aW9uYWxseSBleHBhbmQgYmFja3dhcmRzCisgICAgICAqIFRyeSBub3QgdG8gc2NhdmVuZ2UgdXNlZCBiaW5zCisgICAgICAqIFVzZSBiaW4gY291bnRzIGFzIGEgZ3VpZGUgdG8gcHJlYWxsb2NhdGlvbgorICAgICAgKiBPY2Nhc2lvbmFsbHkgYmluIHJldHVybiBsaXN0IGNodW5rcyBpbiBmaXJzdCBzY2FuCisgICAgICAqIEFkZCBhIGZldyBvcHRpbWl6YXRpb25zIGZyb20gY29saW5Abnl4MTAuY3MuZHUuZWR1CisKKyAgICBWMi41LjEgU2F0IEF1ZyAxNCAxNTo0MDo0MyAxOTkzICBEb3VnIExlYSAgKGRsIGF0IGcpCisgICAgICAqIGZhc3RlciBiaW4gY29tcHV0YXRpb24gJiBzbGlnaHRseSBkaWZmZXJlbnQgYmlubmluZworICAgICAgKiBtZXJnZWQgYWxsIGNvbnNvbGlkYXRpb25zIHRvIG9uZSBwYXJ0IG9mIG1hbGxvYyBwcm9wZXIKKyAgICAgICAgIChlbGltaW5hdGluZyBvbGQgbWFsbG9jX2ZpbmRfc3BhY2UgJiBtYWxsb2NfY2xlYW5fYmluKQorICAgICAgKiBTY2FuIDIgcmV0dXJucyBjaHVua3MgKG5vdCBqdXN0IDEpCisgICAgICAqIFByb3BhZ2F0ZSBmYWlsdXJlIGluIHJlYWxsb2MgaWYgbWFsbG9jIHJldHVybnMgMAorICAgICAgKiBBZGQgc3R1ZmYgdG8gYWxsb3cgY29tcGlsYXRpb24gb24gbm9uLUFOU0kgY29tcGlsZXJzCisgICAgICAgICAgZnJvbSBrcHZAcmVzZWFyY2guYXR0LmNvbQorCisgICAgVjIuNSBTYXQgQXVnICA3IDA3OjQxOjU5IDE5OTMgIERvdWcgTGVhICAoZGwgYXQgZy5vc3dlZ28uZWR1KQorICAgICAgKiByZW1vdmVkIHBvdGVudGlhbCBmb3Igb2RkIGFkZHJlc3MgYWNjZXNzIGluIHByZXZfY2h1bmsKKyAgICAgICogcmVtb3ZlZCBkZXBlbmRlbmN5IG9uIGdldHBhZ2VzaXplLmgKKyAgICAgICogbWlzYyBjb3NtZXRpY3MgYW5kIGEgYml0IG1vcmUgaW50ZXJuYWwgZG9jdW1lbnRhdGlvbgorICAgICAgKiBhbnRpY29zbWV0aWNzOiBtYW5nbGVkIG5hbWVzIGluIG1hY3JvcyB0byBldmFkZSBkZWJ1Z2dlciBzdHJhbmdlbmVzcworICAgICAgKiB0ZXN0ZWQgb24gc3BhcmMsIGhwLTcwMCwgZGVjLW1pcHMsIHJzNjAwMAorICAgICAgICAgIHdpdGggZ2NjICYgbmF0aXZlIGNjIChocCwgZGVjIG9ubHkpIGFsbG93aW5nCisgICAgICAgICAgRGV0bGVmcyAmIFpvcm4gY29tcGFyaXNvbiBzdHVkeSAoaW4gU0lHUExBTiBOb3RpY2VzLikKKworICAgIFRyaWFsIHZlcnNpb24gRnJpIEF1ZyAyOCAxMzoxNDoyOSAxOTkyICBEb3VnIExlYSAgKGRsIGF0IGcub3N3ZWdvLmVkdSkKKyAgICAgICogQmFzZWQgbG9vc2VseSBvbiBsaWJnKystMS4yWCBtYWxsb2MuIChJdCByZXRhaW5zIHNvbWUgb2YgdGhlIG92ZXJhbGwKKyAgICAgICAgIHN0cnVjdHVyZSBvZiBvbGQgdmVyc2lvbiwgIGJ1dCBtb3N0IGRldGFpbHMgZGlmZmVyLikKKworKi8KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tZGxtYWxsb2MvbWFsbG9jLmggYi9saWJjL3Vwc3RyZWFtLWRsbWFsbG9jL21hbGxvYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1MmM5ZTUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLWRsbWFsbG9jL21hbGxvYy5oCkBAIC0wLDAgKzEsNjIwIEBACisvKgorICBEZWZhdWx0IGhlYWRlciBmaWxlIGZvciBtYWxsb2MtMi44LngsIHdyaXR0ZW4gYnkgRG91ZyBMZWEKKyAgYW5kIHJlbGVhc2VkIHRvIHRoZSBwdWJsaWMgZG9tYWluLCBhcyBleHBsYWluZWQgYXQKKyAgaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvcHVibGljZG9tYWluL3plcm8vMS4wLyAKKyAKKyAgVGhpcyBoZWFkZXIgaXMgZm9yIEFOU0kgQy9DKysgb25seS4gIFlvdSBjYW4gc2V0IGFueSBvZgorICB0aGUgZm9sbG93aW5nICNkZWZpbmVzIGJlZm9yZSBpbmNsdWRpbmc6CisKKyAgKiBJZiBVU0VfRExfUFJFRklYIGlzIGRlZmluZWQsIGl0IGlzIGFzc3VtZWQgdGhhdCBtYWxsb2MuYyAKKyAgICB3YXMgYWxzbyBjb21waWxlZCB3aXRoIHRoaXMgb3B0aW9uLCBzbyBhbGwgcm91dGluZXMKKyAgICBoYXZlIG5hbWVzIHN0YXJ0aW5nIHdpdGggImRsIi4KKworICAqIElmIEhBVkVfVVNSX0lOQ0xVREVfTUFMTE9DX0ggaXMgZGVmaW5lZCwgaXQgaXMgYXNzdW1lZCB0aGF0IHRoaXMKKyAgICBmaWxlIHdpbGwgYmUgI2luY2x1ZGVkIEFGVEVSIDxtYWxsb2MuaD4uIFRoaXMgaXMgbmVlZGVkIG9ubHkgaWYKKyAgICB5b3VyIHN5c3RlbSBkZWZpbmVzIGEgc3RydWN0IG1hbGxpbmZvIHRoYXQgaXMgaW5jb21wYXRpYmxlIHdpdGggdGhlCisgICAgc3RhbmRhcmQgb25lIGRlY2xhcmVkIGhlcmUuICBPdGhlcndpc2UsIHlvdSBjYW4gaW5jbHVkZSB0aGlzIGZpbGUKKyAgICBJTlNURUFEIG9mIHlvdXIgc3lzdGVtIHN5c3RlbSA8bWFsbG9jLmg+LiAgQXQgbGVhc3Qgb24gQU5TSSwgYWxsCisgICAgZGVjbGFyYXRpb25zIHNob3VsZCBiZSBjb21wYXRpYmxlIHdpdGggc3lzdGVtIHZlcnNpb25zCisKKyAgKiBJZiBNU1BBQ0VTIGlzIGRlZmluZWQsIGRlY2xhcmF0aW9ucyBmb3IgbXNwYWNlIHZlcnNpb25zIGFyZSBpbmNsdWRlZC4KKyovCisKKyNpZm5kZWYgTUFMTE9DXzI4MF9ICisjZGVmaW5lIE1BTExPQ18yODBfSAorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKyNpbmNsdWRlIDxzdGRkZWYuaD4gICAvKiBmb3Igc2l6ZV90ICovCisKKyNpZm5kZWYgT05MWV9NU1BBQ0VTCisjZGVmaW5lIE9OTFlfTVNQQUNFUyAwICAgICAvKiBkZWZpbmUgdG8gYSB2YWx1ZSAqLworI2VsaWYgT05MWV9NU1BBQ0VTICE9IDAKKyNkZWZpbmUgT05MWV9NU1BBQ0VTIDEKKyNlbmRpZiAgLyogT05MWV9NU1BBQ0VTICovCisjaWZuZGVmIE5PX01BTExJTkZPCisjZGVmaW5lIE5PX01BTExJTkZPIDAKKyNlbmRpZiAgLyogTk9fTUFMTElORk8gKi8KKworI2lmbmRlZiBNU1BBQ0VTCisjaWYgT05MWV9NU1BBQ0VTCisjZGVmaW5lIE1TUEFDRVMgMQorI2Vsc2UgICAvKiBPTkxZX01TUEFDRVMgKi8KKyNkZWZpbmUgTVNQQUNFUyAwCisjZW5kaWYgIC8qIE9OTFlfTVNQQUNFUyAqLworI2VuZGlmICAvKiBNU1BBQ0VTICovCisKKyNpZiAhT05MWV9NU1BBQ0VTCisKKyNpZm5kZWYgVVNFX0RMX1BSRUZJWAorI2RlZmluZSBkbGNhbGxvYyAgICAgICAgICAgICAgIGNhbGxvYworI2RlZmluZSBkbGZyZWUgICAgICAgICAgICAgICAgIGZyZWUKKyNkZWZpbmUgZGxtYWxsb2MgICAgICAgICAgICAgICBtYWxsb2MKKyNkZWZpbmUgZGxtZW1hbGlnbiAgICAgICAgICAgICBtZW1hbGlnbgorI2RlZmluZSBkbHBvc2l4X21lbWFsaWduICAgICAgIHBvc2l4X21lbWFsaWduCisjZGVmaW5lIGRscmVhbGxvYyAgICAgICAgICAgICAgcmVhbGxvYworI2RlZmluZSBkbHZhbGxvYyAgICAgICAgICAgICAgIHZhbGxvYworI2RlZmluZSBkbHB2YWxsb2MgICAgICAgICAgICAgIHB2YWxsb2MKKyNkZWZpbmUgZGxtYWxsaW5mbyAgICAgICAgICAgICBtYWxsaW5mbworI2RlZmluZSBkbG1hbGxvcHQgICAgICAgICAgICAgIG1hbGxvcHQKKyNkZWZpbmUgZGxtYWxsb2NfdHJpbSAgICAgICAgICBtYWxsb2NfdHJpbQorI2RlZmluZSBkbG1hbGxvY19zdGF0cyAgICAgICAgIG1hbGxvY19zdGF0cworI2RlZmluZSBkbG1hbGxvY191c2FibGVfc2l6ZSAgIG1hbGxvY191c2FibGVfc2l6ZQorI2RlZmluZSBkbG1hbGxvY19mb290cHJpbnQgICAgIG1hbGxvY19mb290cHJpbnQKKyNkZWZpbmUgZGxtYWxsb2NfbWF4X2Zvb3RwcmludCBtYWxsb2NfbWF4X2Zvb3RwcmludAorI2RlZmluZSBkbG1hbGxvY19mb290cHJpbnRfbGltaXQgbWFsbG9jX2Zvb3RwcmludF9saW1pdAorI2RlZmluZSBkbG1hbGxvY19zZXRfZm9vdHByaW50X2xpbWl0IG1hbGxvY19zZXRfZm9vdHByaW50X2xpbWl0CisjZGVmaW5lIGRsbWFsbG9jX2luc3BlY3RfYWxsICAgbWFsbG9jX2luc3BlY3RfYWxsCisjZGVmaW5lIGRsaW5kZXBlbmRlbnRfY2FsbG9jICAgaW5kZXBlbmRlbnRfY2FsbG9jCisjZGVmaW5lIGRsaW5kZXBlbmRlbnRfY29tYWxsb2MgaW5kZXBlbmRlbnRfY29tYWxsb2MKKyNkZWZpbmUgZGxidWxrX2ZyZWUgICAgICAgICAgICBidWxrX2ZyZWUKKyNlbmRpZiAvKiBVU0VfRExfUFJFRklYICovCisKKyNpZiAhTk9fTUFMTElORk8gCisjaWZuZGVmIEhBVkVfVVNSX0lOQ0xVREVfTUFMTE9DX0gKKyNpZm5kZWYgX01BTExPQ19ICisjaWZuZGVmIE1BTExJTkZPX0ZJRUxEX1RZUEUKKyNkZWZpbmUgTUFMTElORk9fRklFTERfVFlQRSBzaXplX3QKKyNlbmRpZiAvKiBNQUxMSU5GT19GSUVMRF9UWVBFICovCisjaWZuZGVmIFNUUlVDVF9NQUxMSU5GT19ERUNMQVJFRAorI2RlZmluZSBTVFJVQ1RfTUFMTElORk9fREVDTEFSRUQgMQorc3RydWN0IG1hbGxpbmZvIHsKKyAgTUFMTElORk9fRklFTERfVFlQRSBhcmVuYTsgICAgLyogbm9uLW1tYXBwZWQgc3BhY2UgYWxsb2NhdGVkIGZyb20gc3lzdGVtICovCisgIE1BTExJTkZPX0ZJRUxEX1RZUEUgb3JkYmxrczsgIC8qIG51bWJlciBvZiBmcmVlIGNodW5rcyAqLworICBNQUxMSU5GT19GSUVMRF9UWVBFIHNtYmxrczsgICAvKiBhbHdheXMgMCAqLworICBNQUxMSU5GT19GSUVMRF9UWVBFIGhibGtzOyAgICAvKiBhbHdheXMgMCAqLworICBNQUxMSU5GT19GSUVMRF9UWVBFIGhibGtoZDsgICAvKiBzcGFjZSBpbiBtbWFwcGVkIHJlZ2lvbnMgKi8KKyAgTUFMTElORk9fRklFTERfVFlQRSB1c21ibGtzOyAgLyogbWF4aW11bSB0b3RhbCBhbGxvY2F0ZWQgc3BhY2UgKi8KKyAgTUFMTElORk9fRklFTERfVFlQRSBmc21ibGtzOyAgLyogYWx3YXlzIDAgKi8KKyAgTUFMTElORk9fRklFTERfVFlQRSB1b3JkYmxrczsgLyogdG90YWwgYWxsb2NhdGVkIHNwYWNlICovCisgIE1BTExJTkZPX0ZJRUxEX1RZUEUgZm9yZGJsa3M7IC8qIHRvdGFsIGZyZWUgc3BhY2UgKi8KKyAgTUFMTElORk9fRklFTERfVFlQRSBrZWVwY29zdDsgLyogcmVsZWFzYWJsZSAodmlhIG1hbGxvY190cmltKSBzcGFjZSAqLworfTsKKyNlbmRpZiAvKiBTVFJVQ1RfTUFMTElORk9fREVDTEFSRUQgKi8KKyNlbmRpZiAgLyogX01BTExPQ19IICovCisjZW5kaWYgIC8qIEhBVkVfVVNSX0lOQ0xVREVfTUFMTE9DX0ggKi8KKyNlbmRpZiAgLyogIU5PX01BTExJTkZPICovCisKKy8qCisgIG1hbGxvYyhzaXplX3QgbikKKyAgUmV0dXJucyBhIHBvaW50ZXIgdG8gYSBuZXdseSBhbGxvY2F0ZWQgY2h1bmsgb2YgYXQgbGVhc3QgbiBieXRlcywgb3IKKyAgbnVsbCBpZiBubyBzcGFjZSBpcyBhdmFpbGFibGUsIGluIHdoaWNoIGNhc2UgZXJybm8gaXMgc2V0IHRvIEVOT01FTQorICBvbiBBTlNJIEMgc3lzdGVtcy4KKworICBJZiBuIGlzIHplcm8sIG1hbGxvYyByZXR1cm5zIGEgbWluaW11bS1zaXplZCBjaHVuay4gKFRoZSBtaW5pbXVtCisgIHNpemUgaXMgMTYgYnl0ZXMgb24gbW9zdCAzMmJpdCBzeXN0ZW1zLCBhbmQgMzIgYnl0ZXMgb24gNjRiaXQKKyAgc3lzdGVtcy4pICBOb3RlIHRoYXQgc2l6ZV90IGlzIGFuIHVuc2lnbmVkIHR5cGUsIHNvIGNhbGxzIHdpdGgKKyAgYXJndW1lbnRzIHRoYXQgd291bGQgYmUgbmVnYXRpdmUgaWYgc2lnbmVkIGFyZSBpbnRlcnByZXRlZCBhcworICByZXF1ZXN0cyBmb3IgaHVnZSBhbW91bnRzIG9mIHNwYWNlLCB3aGljaCB3aWxsIG9mdGVuIGZhaWwuIFRoZQorICBtYXhpbXVtIHN1cHBvcnRlZCB2YWx1ZSBvZiBuIGRpZmZlcnMgYWNyb3NzIHN5c3RlbXMsIGJ1dCBpcyBpbiBhbGwKKyAgY2FzZXMgbGVzcyB0aGFuIHRoZSBtYXhpbXVtIHJlcHJlc2VudGFibGUgdmFsdWUgb2YgYSBzaXplX3QuCisqLwordm9pZCogZGxtYWxsb2Moc2l6ZV90KTsKKworLyoKKyAgZnJlZSh2b2lkKiBwKQorICBSZWxlYXNlcyB0aGUgY2h1bmsgb2YgbWVtb3J5IHBvaW50ZWQgdG8gYnkgcCwgdGhhdCBoYWQgYmVlbiBwcmV2aW91c2x5CisgIGFsbG9jYXRlZCB1c2luZyBtYWxsb2Mgb3IgYSByZWxhdGVkIHJvdXRpbmUgc3VjaCBhcyByZWFsbG9jLgorICBJdCBoYXMgbm8gZWZmZWN0IGlmIHAgaXMgbnVsbC4gSWYgcCB3YXMgbm90IG1hbGxvY2VkIG9yIGFscmVhZHkKKyAgZnJlZWQsIGZyZWUocCkgd2lsbCBieSBkZWZhdWx0IGN1YXNlIHRoZSBjdXJyZW50IHByb2dyYW0gdG8gYWJvcnQuCisqLwordm9pZCAgZGxmcmVlKHZvaWQqKTsKKworLyoKKyAgY2FsbG9jKHNpemVfdCBuX2VsZW1lbnRzLCBzaXplX3QgZWxlbWVudF9zaXplKTsKKyAgUmV0dXJucyBhIHBvaW50ZXIgdG8gbl9lbGVtZW50cyAqIGVsZW1lbnRfc2l6ZSBieXRlcywgd2l0aCBhbGwgbG9jYXRpb25zCisgIHNldCB0byB6ZXJvLgorKi8KK3ZvaWQqIGRsY2FsbG9jKHNpemVfdCwgc2l6ZV90KTsKKworLyoKKyAgcmVhbGxvYyh2b2lkKiBwLCBzaXplX3QgbikKKyAgUmV0dXJucyBhIHBvaW50ZXIgdG8gYSBjaHVuayBvZiBzaXplIG4gdGhhdCBjb250YWlucyB0aGUgc2FtZSBkYXRhCisgIGFzIGRvZXMgY2h1bmsgcCB1cCB0byB0aGUgbWluaW11bSBvZiAobiwgcCdzIHNpemUpIGJ5dGVzLCBvciBudWxsCisgIGlmIG5vIHNwYWNlIGlzIGF2YWlsYWJsZS4KKworICBUaGUgcmV0dXJuZWQgcG9pbnRlciBtYXkgb3IgbWF5IG5vdCBiZSB0aGUgc2FtZSBhcyBwLiBUaGUgYWxnb3JpdGhtCisgIHByZWZlcnMgZXh0ZW5kaW5nIHAgaW4gbW9zdCBjYXNlcyB3aGVuIHBvc3NpYmxlLCBvdGhlcndpc2UgaXQKKyAgZW1wbG95cyB0aGUgZXF1aXZhbGVudCBvZiBhIG1hbGxvYy1jb3B5LWZyZWUgc2VxdWVuY2UuCisKKyAgSWYgcCBpcyBudWxsLCByZWFsbG9jIGlzIGVxdWl2YWxlbnQgdG8gbWFsbG9jLgorCisgIElmIHNwYWNlIGlzIG5vdCBhdmFpbGFibGUsIHJlYWxsb2MgcmV0dXJucyBudWxsLCBlcnJubyBpcyBzZXQgKGlmIG9uCisgIEFOU0kpIGFuZCBwIGlzIE5PVCBmcmVlZC4KKworICBpZiBuIGlzIGZvciBmZXdlciBieXRlcyB0aGFuIGFscmVhZHkgaGVsZCBieSBwLCB0aGUgbmV3bHkgdW51c2VkCisgIHNwYWNlIGlzIGxvcHBlZCBvZmYgYW5kIGZyZWVkIGlmIHBvc3NpYmxlLiAgcmVhbGxvYyB3aXRoIGEgc2l6ZQorICBhcmd1bWVudCBvZiB6ZXJvIChyZSlhbGxvY2F0ZXMgYSBtaW5pbXVtLXNpemVkIGNodW5rLgorCisgIFRoZSBvbGQgdW5peCByZWFsbG9jIGNvbnZlbnRpb24gb2YgYWxsb3dpbmcgdGhlIGxhc3QtZnJlZSdkIGNodW5rCisgIHRvIGJlIHVzZWQgYXMgYW4gYXJndW1lbnQgdG8gcmVhbGxvYyBpcyBub3Qgc3VwcG9ydGVkLgorKi8KK3ZvaWQqIGRscmVhbGxvYyh2b2lkKiwgc2l6ZV90KTsKKworLyoKKyAgcmVhbGxvY19pbl9wbGFjZSh2b2lkKiBwLCBzaXplX3QgbikKKyAgUmVzaXplcyB0aGUgc3BhY2UgYWxsb2NhdGVkIGZvciBwIHRvIHNpemUgbiwgb25seSBpZiB0aGlzIGNhbiBiZQorICBkb25lIHdpdGhvdXQgbW92aW5nIHAgKGkuZS4sIG9ubHkgaWYgdGhlcmUgaXMgYWRqYWNlbnQgc3BhY2UKKyAgYXZhaWxhYmxlIGlmIG4gaXMgZ3JlYXRlciB0aGFuIHAncyBjdXJyZW50IGFsbG9jYXRlZCBzaXplLCBvciBuIGlzCisgIGxlc3MgdGhhbiBvciBlcXVhbCB0byBwJ3Mgc2l6ZSkuIFRoaXMgbWF5IGJlIHVzZWQgaW5zdGVhZCBvZiBwbGFpbgorICByZWFsbG9jIGlmIGFuIGFsdGVybmF0aXZlIGFsbG9jYXRpb24gc3RyYXRlZ3kgaXMgbmVlZGVkIHVwb24gZmFpbHVyZQorICB0byBleHBhbmQgc3BhY2U7IGZvciBleGFtcGxlLCByZWFsbG9jYXRpb24gb2YgYSBidWZmZXIgdGhhdCBtdXN0IGJlCisgIG1lbW9yeS1hbGlnbmVkIG9yIGNsZWFyZWQuIFlvdSBjYW4gdXNlIHJlYWxsb2NfaW5fcGxhY2UgdG8gdHJpZ2dlcgorICB0aGVzZSBhbHRlcm5hdGl2ZXMgb25seSB3aGVuIG5lZWRlZC4KKworICBSZXR1cm5zIHAgaWYgc3VjY2Vzc2Z1bDsgb3RoZXJ3aXNlIG51bGwuCisqLwordm9pZCogZGxyZWFsbG9jX2luX3BsYWNlKHZvaWQqLCBzaXplX3QpOworCisvKgorICBtZW1hbGlnbihzaXplX3QgYWxpZ25tZW50LCBzaXplX3Qgbik7CisgIFJldHVybnMgYSBwb2ludGVyIHRvIGEgbmV3bHkgYWxsb2NhdGVkIGNodW5rIG9mIG4gYnl0ZXMsIGFsaWduZWQKKyAgaW4gYWNjb3JkIHdpdGggdGhlIGFsaWdubWVudCBhcmd1bWVudC4KKworICBUaGUgYWxpZ25tZW50IGFyZ3VtZW50IHNob3VsZCBiZSBhIHBvd2VyIG9mIHR3by4gSWYgdGhlIGFyZ3VtZW50IGlzCisgIG5vdCBhIHBvd2VyIG9mIHR3bywgdGhlIG5lYXJlc3QgZ3JlYXRlciBwb3dlciBpcyB1c2VkLgorICA4LWJ5dGUgYWxpZ25tZW50IGlzIGd1YXJhbnRlZWQgYnkgbm9ybWFsIG1hbGxvYyBjYWxscywgc28gZG9uJ3QKKyAgYm90aGVyIGNhbGxpbmcgbWVtYWxpZ24gd2l0aCBhbiBhcmd1bWVudCBvZiA4IG9yIGxlc3MuCisKKyAgT3ZlcnJlbGlhbmNlIG9uIG1lbWFsaWduIGlzIGEgc3VyZSB3YXkgdG8gZnJhZ21lbnQgc3BhY2UuCisqLwordm9pZCogZGxtZW1hbGlnbihzaXplX3QsIHNpemVfdCk7CisKKy8qCisgIGludCBwb3NpeF9tZW1hbGlnbih2b2lkKiogcHAsIHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBuKTsKKyAgQWxsb2NhdGVzIGEgY2h1bmsgb2YgbiBieXRlcywgYWxpZ25lZCBpbiBhY2NvcmQgd2l0aCB0aGUgYWxpZ25tZW50CisgIGFyZ3VtZW50LiBEaWZmZXJzIGZyb20gbWVtYWxpZ24gb25seSBpbiB0aGF0IGl0ICgxKSBhc3NpZ25zIHRoZQorICBhbGxvY2F0ZWQgbWVtb3J5IHRvICpwcCByYXRoZXIgdGhhbiByZXR1cm5pbmcgaXQsICgyKSBmYWlscyBhbmQKKyAgcmV0dXJucyBFSU5WQUwgaWYgdGhlIGFsaWdubWVudCBpcyBub3QgYSBwb3dlciBvZiB0d28gKDMpIGZhaWxzIGFuZAorICByZXR1cm5zIEVOT01FTSBpZiBtZW1vcnkgY2Fubm90IGJlIGFsbG9jYXRlZC4KKyovCitpbnQgZGxwb3NpeF9tZW1hbGlnbih2b2lkKiosIHNpemVfdCwgc2l6ZV90KTsKKworLyoKKyAgdmFsbG9jKHNpemVfdCBuKTsKKyAgRXF1aXZhbGVudCB0byBtZW1hbGlnbihwYWdlc2l6ZSwgbiksIHdoZXJlIHBhZ2VzaXplIGlzIHRoZSBwYWdlCisgIHNpemUgb2YgdGhlIHN5c3RlbS4gSWYgdGhlIHBhZ2VzaXplIGlzIHVua25vd24sIDQwOTYgaXMgdXNlZC4KKyovCit2b2lkKiBkbHZhbGxvYyhzaXplX3QpOworCisvKgorICBtYWxsb3B0KGludCBwYXJhbWV0ZXJfbnVtYmVyLCBpbnQgcGFyYW1ldGVyX3ZhbHVlKQorICBTZXRzIHR1bmFibGUgcGFyYW1ldGVycyBUaGUgZm9ybWF0IGlzIHRvIHByb3ZpZGUgYQorICAocGFyYW1ldGVyLW51bWJlciwgcGFyYW1ldGVyLXZhbHVlKSBwYWlyLiAgbWFsbG9wdCB0aGVuIHNldHMgdGhlCisgIGNvcnJlc3BvbmRpbmcgcGFyYW1ldGVyIHRvIHRoZSBhcmd1bWVudCB2YWx1ZSBpZiBpdCBjYW4gKGkuZS4sIHNvCisgIGxvbmcgYXMgdGhlIHZhbHVlIGlzIG1lYW5pbmdmdWwpLCBhbmQgcmV0dXJucyAxIGlmIHN1Y2Nlc3NmdWwgZWxzZQorICAwLiAgU1ZJRC9YUEcvQU5TSSBkZWZpbmVzIGZvdXIgc3RhbmRhcmQgcGFyYW0gbnVtYmVycyBmb3IgbWFsbG9wdCwKKyAgbm9ybWFsbHkgZGVmaW5lZCBpbiBtYWxsb2MuaC4gIE5vbmUgb2YgdGhlc2UgYXJlIHVzZSBpbiB0aGlzIG1hbGxvYywKKyAgc28gc2V0dGluZyB0aGVtIGhhcyBubyBlZmZlY3QuIEJ1dCB0aGlzIG1hbGxvYyBhbHNvIHN1cHBvcnRzIG90aGVyCisgIG9wdGlvbnMgaW4gbWFsbG9wdDoKKworICBTeW1ib2wgICAgICAgICAgICBwYXJhbSAjICBkZWZhdWx0ICAgIGFsbG93ZWQgcGFyYW0gdmFsdWVzCisgIE1fVFJJTV9USFJFU0hPTEQgICAgIC0xICAgMioxMDI0KjEwMjQgICBhbnkgICAoLTFVIGRpc2FibGVzIHRyaW1taW5nKQorICBNX0dSQU5VTEFSSVRZICAgICAgICAtMiAgICAgcGFnZSBzaXplICAgYW55IHBvd2VyIG9mIDIgPj0gcGFnZSBzaXplCisgIE1fTU1BUF9USFJFU0hPTEQgICAgIC0zICAgICAgMjU2KjEwMjQgICBhbnkgICAob3IgMCBpZiBubyBNTUFQIHN1cHBvcnQpCisqLworaW50IGRsbWFsbG9wdChpbnQsIGludCk7CisKKyNkZWZpbmUgTV9UUklNX1RIUkVTSE9MRCAgICAgKC0xKQorI2RlZmluZSBNX0dSQU5VTEFSSVRZICAgICAgICAoLTIpCisjZGVmaW5lIE1fTU1BUF9USFJFU0hPTEQgICAgICgtMykKKworCisvKgorICBtYWxsb2NfZm9vdHByaW50KCk7CisgIFJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyBvYnRhaW5lZCBmcm9tIHRoZSBzeXN0ZW0uICBUaGUgdG90YWwKKyAgbnVtYmVyIG9mIGJ5dGVzIGFsbG9jYXRlZCBieSBtYWxsb2MsIHJlYWxsb2MgZXRjLiwgaXMgbGVzcyB0aGFuIHRoaXMKKyAgdmFsdWUuIFVubGlrZSBtYWxsaW5mbywgdGhpcyBmdW5jdGlvbiByZXR1cm5zIG9ubHkgYSBwcmVjb21wdXRlZAorICByZXN1bHQsIHNvIGNhbiBiZSBjYWxsZWQgZnJlcXVlbnRseSB0byBtb25pdG9yIG1lbW9yeSBjb25zdW1wdGlvbi4KKyAgRXZlbiBpZiBsb2NrcyBhcmUgb3RoZXJ3aXNlIGRlZmluZWQsIHRoaXMgZnVuY3Rpb24gZG9lcyBub3QgdXNlIHRoZW0sCisgIHNvIHJlc3VsdHMgbWlnaHQgbm90IGJlIHVwIHRvIGRhdGUuCisqLworc2l6ZV90IGRsbWFsbG9jX2Zvb3RwcmludCh2b2lkKTsKKworLyoKKyAgbWFsbG9jX21heF9mb290cHJpbnQoKTsKKyAgUmV0dXJucyB0aGUgbWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgb2J0YWluZWQgZnJvbSB0aGUgc3lzdGVtLiBUaGlzCisgIHZhbHVlIHdpbGwgYmUgZ3JlYXRlciB0aGFuIGN1cnJlbnQgZm9vdHByaW50IGlmIGRlYWxsb2NhdGVkIHNwYWNlCisgIGhhcyBiZWVuIHJlY2xhaW1lZCBieSB0aGUgc3lzdGVtLiBUaGUgcGVhayBudW1iZXIgb2YgYnl0ZXMgYWxsb2NhdGVkCisgIGJ5IG1hbGxvYywgcmVhbGxvYyBldGMuLCBpcyBsZXNzIHRoYW4gdGhpcyB2YWx1ZS4gVW5saWtlIG1hbGxpbmZvLAorICB0aGlzIGZ1bmN0aW9uIHJldHVybnMgb25seSBhIHByZWNvbXB1dGVkIHJlc3VsdCwgc28gY2FuIGJlIGNhbGxlZAorICBmcmVxdWVudGx5IHRvIG1vbml0b3IgbWVtb3J5IGNvbnN1bXB0aW9uLiAgRXZlbiBpZiBsb2NrcyBhcmUKKyAgb3RoZXJ3aXNlIGRlZmluZWQsIHRoaXMgZnVuY3Rpb24gZG9lcyBub3QgdXNlIHRoZW0sIHNvIHJlc3VsdHMgbWlnaHQKKyAgbm90IGJlIHVwIHRvIGRhdGUuCisqLworc2l6ZV90IGRsbWFsbG9jX21heF9mb290cHJpbnQodm9pZCk7CisKKy8qCisgIG1hbGxvY19mb290cHJpbnRfbGltaXQoKTsKKyAgUmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRoYXQgdGhlIGhlYXAgaXMgYWxsb3dlZCB0byBvYnRhaW4gZnJvbQorICB0aGUgc3lzdGVtLCByZXR1cm5pbmcgdGhlIGxhc3QgdmFsdWUgcmV0dXJuZWQgYnkKKyAgbWFsbG9jX3NldF9mb290cHJpbnRfbGltaXQsIG9yIHRoZSBtYXhpbXVtIHNpemVfdCB2YWx1ZSBpZgorICBuZXZlciBzZXQuIFRoZSByZXR1cm5lZCB2YWx1ZSByZWZsZWN0cyBhIHBlcm1pc3Npb24uIFRoZXJlIGlzIG5vCisgIGd1YXJhbnRlZSB0aGF0IHRoaXMgbnVtYmVyIG9mIGJ5dGVzIGNhbiBhY3R1YWxseSBiZSBvYnRhaW5lZCBmcm9tCisgIHRoZSBzeXN0ZW0uICAKKyovCitzaXplX3QgZGxtYWxsb2NfZm9vdHByaW50X2xpbWl0KHZvaWQpOworCisvKgorICBtYWxsb2Nfc2V0X2Zvb3RwcmludF9saW1pdCgpOworICBTZXRzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBieXRlcyB0byBvYnRhaW4gZnJvbSB0aGUgc3lzdGVtLCBjYXVzaW5nCisgIGZhaWx1cmUgcmV0dXJucyBmcm9tIG1hbGxvYyBhbmQgcmVsYXRlZCBmdW5jdGlvbnMgdXBvbiBhdHRlbXB0cyB0bworICBleGNlZWQgdGhpcyB2YWx1ZS4gVGhlIGFyZ3VtZW50IHZhbHVlIG1heSBiZSBzdWJqZWN0IHRvIHBhZ2UKKyAgcm91bmRpbmcgdG8gYW4gZW5mb3JjZWFibGUgbGltaXQ7IHRoaXMgYWN0dWFsIHZhbHVlIGlzIHJldHVybmVkLgorICBVc2luZyBhbiBhcmd1bWVudCBvZiB0aGUgbWF4aW11bSBwb3NzaWJsZSBzaXplX3QgZWZmZWN0aXZlbHkKKyAgZGlzYWJsZXMgY2hlY2tzLiBJZiB0aGUgYXJndW1lbnQgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZQorICBjdXJyZW50IG1hbGxvY19mb290cHJpbnQsIHRoZW4gYWxsIGZ1dHVyZSBhbGxvY2F0aW9ucyB0aGF0IHJlcXVpcmUKKyAgYWRkaXRpb25hbCBzeXN0ZW0gbWVtb3J5IHdpbGwgZmFpbC4gSG93ZXZlciwgaW52b2NhdGlvbiBjYW5ub3QKKyAgcmV0cm9hY3RpdmVseSBkZWFsbG9jYXRlIGV4aXN0aW5nIHVzZWQgbWVtb3J5LgorKi8KK3NpemVfdCBkbG1hbGxvY19zZXRfZm9vdHByaW50X2xpbWl0KHNpemVfdCBieXRlcyk7CisKKy8qCisgIG1hbGxvY19pbnNwZWN0X2FsbCh2b2lkKCpoYW5kbGVyKSh2b2lkICpzdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmVuZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCB1c2VkX2J5dGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCogY2FsbGJhY2tfYXJnKSwKKyAgICAgICAgICAgICAgICAgICAgICB2b2lkKiBhcmcpOworICBUcmF2ZXJzZXMgdGhlIGhlYXAgYW5kIGNhbGxzIHRoZSBnaXZlbiBoYW5kbGVyIGZvciBlYWNoIG1hbmFnZWQKKyAgcmVnaW9uLCBza2lwcGluZyBhbGwgYnl0ZXMgdGhhdCBhcmUgKG9yIG1heSBiZSkgdXNlZCBmb3IgYm9va2tlZXBpbmcKKyAgcHVycG9zZXMuICBUcmF2ZXJzYWwgZG9lcyBub3QgaW5jbHVkZSBpbmNsdWRlIGNodW5rcyB0aGF0IGhhdmUgYmVlbgorICBkaXJlY3RseSBtZW1vcnkgbWFwcGVkLiBFYWNoIHJlcG9ydGVkIHJlZ2lvbiBiZWdpbnMgYXQgdGhlIHN0YXJ0CisgIGFkZHJlc3MsIGFuZCBjb250aW51ZXMgdXAgdG8gYnV0IG5vdCBpbmNsdWRpbmcgdGhlIGVuZCBhZGRyZXNzLiAgVGhlCisgIGZpcnN0IHVzZWRfYnl0ZXMgb2YgdGhlIHJlZ2lvbiBjb250YWluIGFsbG9jYXRlZCBkYXRhLiBJZgorICB1c2VkX2J5dGVzIGlzIHplcm8sIHRoZSByZWdpb24gaXMgdW5hbGxvY2F0ZWQuIFRoZSBoYW5kbGVyIGlzCisgIGludm9rZWQgd2l0aCB0aGUgZ2l2ZW4gY2FsbGJhY2sgYXJndW1lbnQuIElmIGxvY2tzIGFyZSBkZWZpbmVkLCB0aGV5CisgIGFyZSBoZWxkIGR1cmluZyB0aGUgZW50aXJlIHRyYXZlcnNhbC4gSXQgaXMgYSBiYWQgaWRlYSB0byBpbnZva2UKKyAgb3RoZXIgbWFsbG9jIGZ1bmN0aW9ucyBmcm9tIHdpdGhpbiB0aGUgaGFuZGxlci4KKworICBGb3IgZXhhbXBsZSwgdG8gY291bnQgdGhlIG51bWJlciBvZiBpbi11c2UgY2h1bmtzIHdpdGggc2l6ZSBncmVhdGVyCisgIHRoYW4gMTAwMCwgeW91IGNvdWxkIHdyaXRlOgorICBzdGF0aWMgaW50IGNvdW50ID0gMDsKKyAgdm9pZCBjb3VudF9jaHVua3Modm9pZCogc3RhcnQsIHZvaWQqIGVuZCwgc2l6ZV90IHVzZWQsIHZvaWQqIGFyZykgeworICAgIGlmICh1c2VkID49IDEwMDApICsrY291bnQ7CisgIH0KKyAgdGhlbjoKKyAgICBtYWxsb2NfaW5zcGVjdF9hbGwoY291bnRfY2h1bmtzLCBOVUxMKTsKKworICBtYWxsb2NfaW5zcGVjdF9hbGwgaXMgY29tcGlsZWQgb25seSBpZiBNQUxMT0NfSU5TUEVDVF9BTEwgaXMgZGVmaW5lZC4KKyovCit2b2lkIGRsbWFsbG9jX2luc3BlY3RfYWxsKHZvaWQoKmhhbmRsZXIpKHZvaWQqLCB2b2lkICosIHNpemVfdCwgdm9pZCopLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCogYXJnKTsKKworI2lmICFOT19NQUxMSU5GTworLyoKKyAgbWFsbGluZm8oKQorICBSZXR1cm5zIChieSBjb3B5KSBhIHN0cnVjdCBjb250YWluaW5nIHZhcmlvdXMgc3VtbWFyeSBzdGF0aXN0aWNzOgorCisgIGFyZW5hOiAgICAgY3VycmVudCB0b3RhbCBub24tbW1hcHBlZCBieXRlcyBhbGxvY2F0ZWQgZnJvbSBzeXN0ZW0KKyAgb3JkYmxrczogICB0aGUgbnVtYmVyIG9mIGZyZWUgY2h1bmtzCisgIHNtYmxrczogICAgYWx3YXlzIHplcm8uCisgIGhibGtzOiAgICAgY3VycmVudCBudW1iZXIgb2YgbW1hcHBlZCByZWdpb25zCisgIGhibGtoZDogICAgdG90YWwgYnl0ZXMgaGVsZCBpbiBtbWFwcGVkIHJlZ2lvbnMKKyAgdXNtYmxrczogICB0aGUgbWF4aW11bSB0b3RhbCBhbGxvY2F0ZWQgc3BhY2UuIFRoaXMgd2lsbCBiZSBncmVhdGVyCisgICAgICAgICAgICAgICAgdGhhbiBjdXJyZW50IHRvdGFsIGlmIHRyaW1taW5nIGhhcyBvY2N1cnJlZC4KKyAgZnNtYmxrczogICBhbHdheXMgemVybworICB1b3JkYmxrczogIGN1cnJlbnQgdG90YWwgYWxsb2NhdGVkIHNwYWNlIChub3JtYWwgb3IgbW1hcHBlZCkKKyAgZm9yZGJsa3M6ICB0b3RhbCBmcmVlIHNwYWNlCisgIGtlZXBjb3N0OiAgdGhlIG1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIHRoYXQgY291bGQgaWRlYWxseSBiZSByZWxlYXNlZAorICAgICAgICAgICAgICAgYmFjayB0byBzeXN0ZW0gdmlhIG1hbGxvY190cmltLiAoImlkZWFsbHkiIG1lYW5zIHRoYXQKKyAgICAgICAgICAgICAgIGl0IGlnbm9yZXMgcGFnZSByZXN0cmljdGlvbnMgZXRjLikKKworICBCZWNhdXNlIHRoZXNlIGZpZWxkcyBhcmUgaW50cywgYnV0IGludGVybmFsIGJvb2trZWVwaW5nIG1heQorICBiZSBrZXB0IGFzIGxvbmdzLCB0aGUgcmVwb3J0ZWQgdmFsdWVzIG1heSB3cmFwIGFyb3VuZCB6ZXJvIGFuZAorICB0aHVzIGJlIGluYWNjdXJhdGUuCisqLworCitzdHJ1Y3QgbWFsbGluZm8gZGxtYWxsaW5mbyh2b2lkKTsKKyNlbmRpZiAgLyogTk9fTUFMTElORk8gKi8KKworLyoKKyAgaW5kZXBlbmRlbnRfY2FsbG9jKHNpemVfdCBuX2VsZW1lbnRzLCBzaXplX3QgZWxlbWVudF9zaXplLCB2b2lkKiBjaHVua3NbXSk7CisKKyAgaW5kZXBlbmRlbnRfY2FsbG9jIGlzIHNpbWlsYXIgdG8gY2FsbG9jLCBidXQgaW5zdGVhZCBvZiByZXR1cm5pbmcgYQorICBzaW5nbGUgY2xlYXJlZCBzcGFjZSwgaXQgcmV0dXJucyBhbiBhcnJheSBvZiBwb2ludGVycyB0byBuX2VsZW1lbnRzCisgIGluZGVwZW5kZW50IGVsZW1lbnRzIHRoYXQgY2FuIGhvbGQgY29udGVudHMgb2Ygc2l6ZSBlbGVtX3NpemUsIGVhY2gKKyAgb2Ygd2hpY2ggc3RhcnRzIG91dCBjbGVhcmVkLCBhbmQgY2FuIGJlIGluZGVwZW5kZW50bHkgZnJlZWQsCisgIHJlYWxsb2MnZWQgZXRjLiBUaGUgZWxlbWVudHMgYXJlIGd1YXJhbnRlZWQgdG8gYmUgYWRqYWNlbnRseQorICBhbGxvY2F0ZWQgKHRoaXMgaXMgbm90IGd1YXJhbnRlZWQgdG8gb2NjdXIgd2l0aCBtdWx0aXBsZSBjYWxsb2NzIG9yCisgIG1hbGxvY3MpLCB3aGljaCBtYXkgYWxzbyBpbXByb3ZlIGNhY2hlIGxvY2FsaXR5IGluIHNvbWUKKyAgYXBwbGljYXRpb25zLgorCisgIFRoZSAiY2h1bmtzIiBhcmd1bWVudCBpcyBvcHRpb25hbCAoaS5lLiwgbWF5IGJlIG51bGwsIHdoaWNoIGlzCisgIHByb2JhYmx5IHRoZSBtb3N0IHR5cGljYWwgdXNhZ2UpLiBJZiBpdCBpcyBudWxsLCB0aGUgcmV0dXJuZWQgYXJyYXkKKyAgaXMgaXRzZWxmIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBhbmQgc2hvdWxkIGFsc28gYmUgZnJlZWQgd2hlbiBpdCBpcworICBubyBsb25nZXIgbmVlZGVkLiBPdGhlcndpc2UsIHRoZSBjaHVua3MgYXJyYXkgbXVzdCBiZSBvZiBhdCBsZWFzdAorICBuX2VsZW1lbnRzIGluIGxlbmd0aC4gSXQgaXMgZmlsbGVkIGluIHdpdGggdGhlIHBvaW50ZXJzIHRvIHRoZQorICBjaHVua3MuCisKKyAgSW4gZWl0aGVyIGNhc2UsIGluZGVwZW5kZW50X2NhbGxvYyByZXR1cm5zIHRoaXMgcG9pbnRlciBhcnJheSwgb3IKKyAgbnVsbCBpZiB0aGUgYWxsb2NhdGlvbiBmYWlsZWQuICBJZiBuX2VsZW1lbnRzIGlzIHplcm8gYW5kICJjaHVua3MiCisgIGlzIG51bGwsIGl0IHJldHVybnMgYSBjaHVuayByZXByZXNlbnRpbmcgYW4gYXJyYXkgd2l0aCB6ZXJvIGVsZW1lbnRzCisgICh3aGljaCBzaG91bGQgYmUgZnJlZWQgaWYgbm90IHdhbnRlZCkuCisKKyAgRWFjaCBlbGVtZW50IG11c3QgYmUgZnJlZWQgd2hlbiBpdCBpcyBubyBsb25nZXIgbmVlZGVkLiBUaGlzIGNhbiBiZQorICBkb25lIGFsbCBhdCBvbmNlIHVzaW5nIGJ1bGtfZnJlZS4KKworICBpbmRlcGVuZGVudF9jYWxsb2Mgc2ltcGxpZmllcyBhbmQgc3BlZWRzIHVwIGltcGxlbWVudGF0aW9ucyBvZiBtYW55CisgIGtpbmRzIG9mIHBvb2xzLiAgSXQgbWF5IGFsc28gYmUgdXNlZnVsIHdoZW4gY29uc3RydWN0aW5nIGxhcmdlIGRhdGEKKyAgc3RydWN0dXJlcyB0aGF0IGluaXRpYWxseSBoYXZlIGEgZml4ZWQgbnVtYmVyIG9mIGZpeGVkLXNpemVkIG5vZGVzLAorICBidXQgdGhlIG51bWJlciBpcyBub3Qga25vd24gYXQgY29tcGlsZSB0aW1lLCBhbmQgc29tZSBvZiB0aGUgbm9kZXMKKyAgbWF5IGxhdGVyIG5lZWQgdG8gYmUgZnJlZWQuIEZvciBleGFtcGxlOgorCisgIHN0cnVjdCBOb2RlIHsgaW50IGl0ZW07IHN0cnVjdCBOb2RlKiBuZXh0OyB9OworCisgIHN0cnVjdCBOb2RlKiBidWlsZF9saXN0KCkgeworICAgIHN0cnVjdCBOb2RlKiogcG9vbDsKKyAgICBpbnQgbiA9IHJlYWRfbnVtYmVyX29mX25vZGVzX25lZWRlZCgpOworICAgIGlmIChuIDw9IDApIHJldHVybiAwOworICAgIHBvb2wgPSAoc3RydWN0IE5vZGUqKikoaW5kZXBlbmRlbnRfY2FsbG9jKG4sIHNpemVvZihzdHJ1Y3QgTm9kZSksIDApOworICAgIGlmIChwb29sID09IDApIGRpZSgpOworICAgIC8vIG9yZ2FuaXplIGludG8gYSBsaW5rZWQgbGlzdC4uLgorICAgIHN0cnVjdCBOb2RlKiBmaXJzdCA9IHBvb2xbMF07CisgICAgZm9yIChpID0gMDsgaSA8IG4tMTsgKytpKQorICAgICAgcG9vbFtpXS0+bmV4dCA9IHBvb2xbaSsxXTsKKyAgICBmcmVlKHBvb2wpOyAgICAgLy8gQ2FuIG5vdyBmcmVlIHRoZSBhcnJheSAob3Igbm90LCBpZiBpdCBpcyBuZWVkZWQgbGF0ZXIpCisgICAgcmV0dXJuIGZpcnN0OworICB9CisqLwordm9pZCoqIGRsaW5kZXBlbmRlbnRfY2FsbG9jKHNpemVfdCwgc2l6ZV90LCB2b2lkKiopOworCisvKgorICBpbmRlcGVuZGVudF9jb21hbGxvYyhzaXplX3Qgbl9lbGVtZW50cywgc2l6ZV90IHNpemVzW10sIHZvaWQqIGNodW5rc1tdKTsKKworICBpbmRlcGVuZGVudF9jb21hbGxvYyBhbGxvY2F0ZXMsIGFsbCBhdCBvbmNlLCBhIHNldCBvZiBuX2VsZW1lbnRzCisgIGNodW5rcyB3aXRoIHNpemVzIGluZGljYXRlZCBpbiB0aGUgInNpemVzIiBhcnJheS4gICAgSXQgcmV0dXJucworICBhbiBhcnJheSBvZiBwb2ludGVycyB0byB0aGVzZSBlbGVtZW50cywgZWFjaCBvZiB3aGljaCBjYW4gYmUKKyAgaW5kZXBlbmRlbnRseSBmcmVlZCwgcmVhbGxvYydlZCBldGMuIFRoZSBlbGVtZW50cyBhcmUgZ3VhcmFudGVlZCB0bworICBiZSBhZGphY2VudGx5IGFsbG9jYXRlZCAodGhpcyBpcyBub3QgZ3VhcmFudGVlZCB0byBvY2N1ciB3aXRoCisgIG11bHRpcGxlIGNhbGxvY3Mgb3IgbWFsbG9jcyksIHdoaWNoIG1heSBhbHNvIGltcHJvdmUgY2FjaGUgbG9jYWxpdHkKKyAgaW4gc29tZSBhcHBsaWNhdGlvbnMuCisKKyAgVGhlICJjaHVua3MiIGFyZ3VtZW50IGlzIG9wdGlvbmFsIChpLmUuLCBtYXkgYmUgbnVsbCkuIElmIGl0IGlzIG51bGwKKyAgdGhlIHJldHVybmVkIGFycmF5IGlzIGl0c2VsZiBkeW5hbWljYWxseSBhbGxvY2F0ZWQgYW5kIHNob3VsZCBhbHNvCisgIGJlIGZyZWVkIHdoZW4gaXQgaXMgbm8gbG9uZ2VyIG5lZWRlZC4gT3RoZXJ3aXNlLCB0aGUgY2h1bmtzIGFycmF5CisgIG11c3QgYmUgb2YgYXQgbGVhc3Qgbl9lbGVtZW50cyBpbiBsZW5ndGguIEl0IGlzIGZpbGxlZCBpbiB3aXRoIHRoZQorICBwb2ludGVycyB0byB0aGUgY2h1bmtzLgorCisgIEluIGVpdGhlciBjYXNlLCBpbmRlcGVuZGVudF9jb21hbGxvYyByZXR1cm5zIHRoaXMgcG9pbnRlciBhcnJheSwgb3IKKyAgbnVsbCBpZiB0aGUgYWxsb2NhdGlvbiBmYWlsZWQuICBJZiBuX2VsZW1lbnRzIGlzIHplcm8gYW5kIGNodW5rcyBpcworICBudWxsLCBpdCByZXR1cm5zIGEgY2h1bmsgcmVwcmVzZW50aW5nIGFuIGFycmF5IHdpdGggemVybyBlbGVtZW50cworICAod2hpY2ggc2hvdWxkIGJlIGZyZWVkIGlmIG5vdCB3YW50ZWQpLgorCisgIEVhY2ggZWxlbWVudCBtdXN0IGJlIGZyZWVkIHdoZW4gaXQgaXMgbm8gbG9uZ2VyIG5lZWRlZC4gVGhpcyBjYW4gYmUKKyAgZG9uZSBhbGwgYXQgb25jZSB1c2luZyBidWxrX2ZyZWUuCisKKyAgaW5kZXBlbmRlbnRfY29tYWxsYWMgZGlmZmVycyBmcm9tIGluZGVwZW5kZW50X2NhbGxvYyBpbiB0aGF0IGVhY2gKKyAgZWxlbWVudCBtYXkgaGF2ZSBhIGRpZmZlcmVudCBzaXplLCBhbmQgYWxzbyB0aGF0IGl0IGRvZXMgbm90CisgIGF1dG9tYXRpY2FsbHkgY2xlYXIgZWxlbWVudHMuCisKKyAgaW5kZXBlbmRlbnRfY29tYWxsb2MgY2FuIGJlIHVzZWQgdG8gc3BlZWQgdXAgYWxsb2NhdGlvbiBpbiBjYXNlcworICB3aGVyZSBzZXZlcmFsIHN0cnVjdHMgb3Igb2JqZWN0cyBtdXN0IGFsd2F5cyBiZSBhbGxvY2F0ZWQgYXQgdGhlCisgIHNhbWUgdGltZS4gIEZvciBleGFtcGxlOgorCisgIHN0cnVjdCBIZWFkIHsgLi4uIH0KKyAgc3RydWN0IEZvb3QgeyAuLi4gfQorCisgIHZvaWQgc2VuZF9tZXNzYWdlKGNoYXIqIG1zZykgeworICAgIGludCBtc2dsZW4gPSBzdHJsZW4obXNnKTsKKyAgICBzaXplX3Qgc2l6ZXNbM10gPSB7IHNpemVvZihzdHJ1Y3QgSGVhZCksIG1zZ2xlbiwgc2l6ZW9mKHN0cnVjdCBGb290KSB9OworICAgIHZvaWQqIGNodW5rc1szXTsKKyAgICBpZiAoaW5kZXBlbmRlbnRfY29tYWxsb2MoMywgc2l6ZXMsIGNodW5rcykgPT0gMCkKKyAgICAgIGRpZSgpOworICAgIHN0cnVjdCBIZWFkKiBoZWFkID0gKHN0cnVjdCBIZWFkKikoY2h1bmtzWzBdKTsKKyAgICBjaGFyKiAgICAgICAgYm9keSA9IChjaGFyKikoY2h1bmtzWzFdKTsKKyAgICBzdHJ1Y3QgRm9vdCogZm9vdCA9IChzdHJ1Y3QgRm9vdCopKGNodW5rc1syXSk7CisgICAgLy8gLi4uCisgIH0KKworICBJbiBnZW5lcmFsIHRob3VnaCwgaW5kZXBlbmRlbnRfY29tYWxsb2MgaXMgd29ydGggdXNpbmcgb25seSBmb3IKKyAgbGFyZ2VyIHZhbHVlcyBvZiBuX2VsZW1lbnRzLiBGb3Igc21hbGwgdmFsdWVzLCB5b3UgcHJvYmFibHkgd29uJ3QKKyAgZGV0ZWN0IGVub3VnaCBkaWZmZXJlbmNlIGZyb20gc2VyaWVzIG9mIG1hbGxvYyBjYWxscyB0byBib3RoZXIuCisKKyAgT3ZlcnVzZSBvZiBpbmRlcGVuZGVudF9jb21hbGxvYyBjYW4gaW5jcmVhc2Ugb3ZlcmFsbCBtZW1vcnkgdXNhZ2UsCisgIHNpbmNlIGl0IGNhbm5vdCByZXVzZSBleGlzdGluZyBub25jb250aWd1b3VzIHNtYWxsIGNodW5rcyB0aGF0CisgIG1pZ2h0IGJlIGF2YWlsYWJsZSBmb3Igc29tZSBvZiB0aGUgZWxlbWVudHMuCisqLwordm9pZCoqIGRsaW5kZXBlbmRlbnRfY29tYWxsb2Moc2l6ZV90LCBzaXplX3QqLCB2b2lkKiopOworCisvKgorICBidWxrX2ZyZWUodm9pZCogYXJyYXlbXSwgc2l6ZV90IG5fZWxlbWVudHMpCisgIEZyZWVzIGFuZCBjbGVhcnMgKHNldHMgdG8gbnVsbCkgZWFjaCBub24tbnVsbCBwb2ludGVyIGluIHRoZSBnaXZlbgorICBhcnJheS4gIFRoaXMgaXMgbGlrZWx5IHRvIGJlIGZhc3RlciB0aGFuIGZyZWVpbmcgdGhlbSBvbmUtYnktb25lLgorICBJZiBmb290ZXJzIGFyZSB1c2VkLCBwb2ludGVycyB0aGF0IGhhdmUgYmVlbiBhbGxvY2F0ZWQgaW4gZGlmZmVyZW50CisgIG1zcGFjZXMgYXJlIG5vdCBmcmVlZCBvciBjbGVhcmVkLCBhbmQgdGhlIGNvdW50IG9mIGFsbCBzdWNoIHBvaW50ZXJzCisgIGlzIHJldHVybmVkLiAgRm9yIGxhcmdlIGFycmF5cyBvZiBwb2ludGVycyB3aXRoIHBvb3IgbG9jYWxpdHksIGl0CisgIG1heSBiZSB3b3J0aHdoaWxlIHRvIHNvcnQgdGhpcyBhcnJheSBiZWZvcmUgY2FsbGluZyBidWxrX2ZyZWUuCisqLworc2l6ZV90ICBkbGJ1bGtfZnJlZSh2b2lkKiosIHNpemVfdCBuX2VsZW1lbnRzKTsKKworLyoKKyAgcHZhbGxvYyhzaXplX3Qgbik7CisgIEVxdWl2YWxlbnQgdG8gdmFsbG9jKG1pbmltdW0tcGFnZS10aGF0LWhvbGRzKG4pKSwgdGhhdCBpcywKKyAgcm91bmQgdXAgbiB0byBuZWFyZXN0IHBhZ2VzaXplLgorICovCit2b2lkKiAgZGxwdmFsbG9jKHNpemVfdCk7CisKKy8qCisgIG1hbGxvY190cmltKHNpemVfdCBwYWQpOworCisgIElmIHBvc3NpYmxlLCBnaXZlcyBtZW1vcnkgYmFjayB0byB0aGUgc3lzdGVtICh2aWEgbmVnYXRpdmUgYXJndW1lbnRzCisgIHRvIHNicmspIGlmIHRoZXJlIGlzIHVudXNlZCBtZW1vcnkgYXQgdGhlIGBoaWdoJyBlbmQgb2YgdGhlIG1hbGxvYworICBwb29sIG9yIGluIHVudXNlZCBNTUFQIHNlZ21lbnRzLiBZb3UgY2FuIGNhbGwgdGhpcyBhZnRlciBmcmVlaW5nCisgIGxhcmdlIGJsb2NrcyBvZiBtZW1vcnkgdG8gcG90ZW50aWFsbHkgcmVkdWNlIHRoZSBzeXN0ZW0tbGV2ZWwgbWVtb3J5CisgIHJlcXVpcmVtZW50cyBvZiBhIHByb2dyYW0uIEhvd2V2ZXIsIGl0IGNhbm5vdCBndWFyYW50ZWUgdG8gcmVkdWNlCisgIG1lbW9yeS4gVW5kZXIgc29tZSBhbGxvY2F0aW9uIHBhdHRlcm5zLCBzb21lIGxhcmdlIGZyZWUgYmxvY2tzIG9mCisgIG1lbW9yeSB3aWxsIGJlIGxvY2tlZCBiZXR3ZWVuIHR3byB1c2VkIGNodW5rcywgc28gdGhleSBjYW5ub3QgYmUKKyAgZ2l2ZW4gYmFjayB0byB0aGUgc3lzdGVtLgorCisgIFRoZSBgcGFkJyBhcmd1bWVudCB0byBtYWxsb2NfdHJpbSByZXByZXNlbnRzIHRoZSBhbW91bnQgb2YgZnJlZQorICB0cmFpbGluZyBzcGFjZSB0byBsZWF2ZSB1bnRyaW1tZWQuIElmIHRoaXMgYXJndW1lbnQgaXMgemVybywgb25seQorICB0aGUgbWluaW11bSBhbW91bnQgb2YgbWVtb3J5IHRvIG1haW50YWluIGludGVybmFsIGRhdGEgc3RydWN0dXJlcworICB3aWxsIGJlIGxlZnQuIE5vbi16ZXJvIGFyZ3VtZW50cyBjYW4gYmUgc3VwcGxpZWQgdG8gbWFpbnRhaW4gZW5vdWdoCisgIHRyYWlsaW5nIHNwYWNlIHRvIHNlcnZpY2UgZnV0dXJlIGV4cGVjdGVkIGFsbG9jYXRpb25zIHdpdGhvdXQgaGF2aW5nCisgIHRvIHJlLW9idGFpbiBtZW1vcnkgZnJvbSB0aGUgc3lzdGVtLgorCisgIE1hbGxvY190cmltIHJldHVybnMgMSBpZiBpdCBhY3R1YWxseSByZWxlYXNlZCBhbnkgbWVtb3J5LCBlbHNlIDAuCisqLworaW50ICBkbG1hbGxvY190cmltKHNpemVfdCk7CisKKy8qCisgIG1hbGxvY19zdGF0cygpOworICBQcmludHMgb24gc3RkZXJyIHRoZSBhbW91bnQgb2Ygc3BhY2Ugb2J0YWluZWQgZnJvbSB0aGUgc3lzdGVtIChib3RoCisgIHZpYSBzYnJrIGFuZCBtbWFwKSwgdGhlIG1heGltdW0gYW1vdW50ICh3aGljaCBtYXkgYmUgbW9yZSB0aGFuCisgIGN1cnJlbnQgaWYgbWFsbG9jX3RyaW0gYW5kL29yIG11bm1hcCBnb3QgY2FsbGVkKSwgYW5kIHRoZSBjdXJyZW50CisgIG51bWJlciBvZiBieXRlcyBhbGxvY2F0ZWQgdmlhIG1hbGxvYyAob3IgcmVhbGxvYywgZXRjKSBidXQgbm90IHlldAorICBmcmVlZC4gTm90ZSB0aGF0IHRoaXMgaXMgdGhlIG51bWJlciBvZiBieXRlcyBhbGxvY2F0ZWQsIG5vdCB0aGUKKyAgbnVtYmVyIHJlcXVlc3RlZC4gSXQgd2lsbCBiZSBsYXJnZXIgdGhhbiB0aGUgbnVtYmVyIHJlcXVlc3RlZAorICBiZWNhdXNlIG9mIGFsaWdubWVudCBhbmQgYm9va2tlZXBpbmcgb3ZlcmhlYWQuIEJlY2F1c2UgaXQgaW5jbHVkZXMKKyAgYWxpZ25tZW50IHdhc3RhZ2UgYXMgYmVpbmcgaW4gdXNlLCB0aGlzIGZpZ3VyZSBtYXkgYmUgZ3JlYXRlciB0aGFuCisgIHplcm8gZXZlbiB3aGVuIG5vIHVzZXItbGV2ZWwgY2h1bmtzIGFyZSBhbGxvY2F0ZWQuCisKKyAgVGhlIHJlcG9ydGVkIGN1cnJlbnQgYW5kIG1heGltdW0gc3lzdGVtIG1lbW9yeSBjYW4gYmUgaW5hY2N1cmF0ZSBpZgorICBhIHByb2dyYW0gbWFrZXMgb3RoZXIgY2FsbHMgdG8gc3lzdGVtIG1lbW9yeSBhbGxvY2F0aW9uIGZ1bmN0aW9ucworICAobm9ybWFsbHkgc2Jyaykgb3V0c2lkZSBvZiBtYWxsb2MuCisKKyAgbWFsbG9jX3N0YXRzIHByaW50cyBvbmx5IHRoZSBtb3N0IGNvbW1vbmx5IGludGVyZXN0aW5nIHN0YXRpc3RpY3MuCisgIE1vcmUgaW5mb3JtYXRpb24gY2FuIGJlIG9idGFpbmVkIGJ5IGNhbGxpbmcgbWFsbGluZm8uCisgIAorICBtYWxsb2Nfc3RhdHMgaXMgbm90IGNvbXBpbGVkIGlmIE5PX01BTExPQ19TVEFUUyBpcyBkZWZpbmVkLgorKi8KK3ZvaWQgIGRsbWFsbG9jX3N0YXRzKHZvaWQpOworCisjZW5kaWYgLyogIU9OTFlfTVNQQUNFUyAqLworCisvKgorICBtYWxsb2NfdXNhYmxlX3NpemUodm9pZCogcCk7CisKKyAgUmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHlvdSBjYW4gYWN0dWFsbHkgdXNlIGluCisgIGFuIGFsbG9jYXRlZCBjaHVuaywgd2hpY2ggbWF5IGJlIG1vcmUgdGhhbiB5b3UgcmVxdWVzdGVkIChhbHRob3VnaAorICBvZnRlbiBub3QpIGR1ZSB0byBhbGlnbm1lbnQgYW5kIG1pbmltdW0gc2l6ZSBjb25zdHJhaW50cy4KKyAgWW91IGNhbiB1c2UgdGhpcyBtYW55IGJ5dGVzIHdpdGhvdXQgd29ycnlpbmcgYWJvdXQKKyAgb3ZlcndyaXRpbmcgb3RoZXIgYWxsb2NhdGVkIG9iamVjdHMuIFRoaXMgaXMgbm90IGEgcGFydGljdWxhcmx5IGdyZWF0CisgIHByb2dyYW1taW5nIHByYWN0aWNlLiBtYWxsb2NfdXNhYmxlX3NpemUgY2FuIGJlIG1vcmUgdXNlZnVsIGluCisgIGRlYnVnZ2luZyBhbmQgYXNzZXJ0aW9ucywgZm9yIGV4YW1wbGU6CisKKyAgcCA9IG1hbGxvYyhuKTsKKyAgYXNzZXJ0KG1hbGxvY191c2FibGVfc2l6ZShwKSA+PSAyNTYpOworKi8KK3NpemVfdCBkbG1hbGxvY191c2FibGVfc2l6ZShjb25zdCB2b2lkKik7CisKKyNpZiBNU1BBQ0VTCisKKy8qCisgIG1zcGFjZSBpcyBhbiBvcGFxdWUgdHlwZSByZXByZXNlbnRpbmcgYW4gaW5kZXBlbmRlbnQKKyAgcmVnaW9uIG9mIHNwYWNlIHRoYXQgc3VwcG9ydHMgbXNwYWNlX21hbGxvYywgZXRjLgorKi8KK3R5cGVkZWYgdm9pZCogbXNwYWNlOworCisvKgorICBjcmVhdGVfbXNwYWNlIGNyZWF0ZXMgYW5kIHJldHVybnMgYSBuZXcgaW5kZXBlbmRlbnQgc3BhY2Ugd2l0aCB0aGUKKyAgZ2l2ZW4gaW5pdGlhbCBjYXBhY2l0eSwgb3IsIGlmIDAsIHRoZSBkZWZhdWx0IGdyYW51bGFyaXR5IHNpemUuICBJdAorICByZXR1cm5zIG51bGwgaWYgdGhlcmUgaXMgbm8gc3lzdGVtIG1lbW9yeSBhdmFpbGFibGUgdG8gY3JlYXRlIHRoZQorICBzcGFjZS4gIElmIGFyZ3VtZW50IGxvY2tlZCBpcyBub24temVybywgdGhlIHNwYWNlIHVzZXMgYSBzZXBhcmF0ZQorICBsb2NrIHRvIGNvbnRyb2wgYWNjZXNzLiBUaGUgY2FwYWNpdHkgb2YgdGhlIHNwYWNlIHdpbGwgZ3JvdworICBkeW5hbWljYWxseSBhcyBuZWVkZWQgdG8gc2VydmljZSBtc3BhY2VfbWFsbG9jIHJlcXVlc3RzLiAgWW91IGNhbgorICBjb250cm9sIHRoZSBzaXplcyBvZiBpbmNyZW1lbnRhbCBpbmNyZWFzZXMgb2YgdGhpcyBzcGFjZSBieQorICBjb21waWxpbmcgd2l0aCBhIGRpZmZlcmVudCBERUZBVUxUX0dSQU5VTEFSSVRZIG9yIGR5bmFtaWNhbGx5CisgIHNldHRpbmcgd2l0aCBtYWxsb3B0KE1fR1JBTlVMQVJJVFksIHZhbHVlKS4KKyovCittc3BhY2UgY3JlYXRlX21zcGFjZShzaXplX3QgY2FwYWNpdHksIGludCBsb2NrZWQpOworCisvKgorICBkZXN0cm95X21zcGFjZSBkZXN0cm95cyB0aGUgZ2l2ZW4gc3BhY2UsIGFuZCBhdHRlbXB0cyB0byByZXR1cm4gYWxsCisgIG9mIGl0cyBtZW1vcnkgYmFjayB0byB0aGUgc3lzdGVtLCByZXR1cm5pbmcgdGhlIHRvdGFsIG51bWJlciBvZgorICBieXRlcyBmcmVlZC4gQWZ0ZXIgZGVzdHJ1Y3Rpb24sIHRoZSByZXN1bHRzIG9mIGFjY2VzcyB0byBhbGwgbWVtb3J5CisgIHVzZWQgYnkgdGhlIHNwYWNlIGJlY29tZSB1bmRlZmluZWQuCisqLworc2l6ZV90IGRlc3Ryb3lfbXNwYWNlKG1zcGFjZSBtc3ApOworCisvKgorICBjcmVhdGVfbXNwYWNlX3dpdGhfYmFzZSB1c2VzIHRoZSBtZW1vcnkgc3VwcGxpZWQgYXMgdGhlIGluaXRpYWwgYmFzZQorICBvZiBhIG5ldyBtc3BhY2UuIFBhcnQgKGxlc3MgdGhhbiAxMjgqc2l6ZW9mKHNpemVfdCkgYnl0ZXMpIG9mIHRoaXMKKyAgc3BhY2UgaXMgdXNlZCBmb3IgYm9va2tlZXBpbmcsIHNvIHRoZSBjYXBhY2l0eSBtdXN0IGJlIGF0IGxlYXN0IHRoaXMKKyAgbGFyZ2UuIChPdGhlcndpc2UgMCBpcyByZXR1cm5lZC4pIFdoZW4gdGhpcyBpbml0aWFsIHNwYWNlIGlzCisgIGV4aGF1c3RlZCwgYWRkaXRpb25hbCBtZW1vcnkgd2lsbCBiZSBvYnRhaW5lZCBmcm9tIHRoZSBzeXN0ZW0uCisgIERlc3Ryb3lpbmcgdGhpcyBzcGFjZSB3aWxsIGRlYWxsb2NhdGUgYWxsIGFkZGl0aW9uYWxseSBhbGxvY2F0ZWQKKyAgc3BhY2UgKGlmIHBvc3NpYmxlKSBidXQgbm90IHRoZSBpbml0aWFsIGJhc2UuCisqLworbXNwYWNlIGNyZWF0ZV9tc3BhY2Vfd2l0aF9iYXNlKHZvaWQqIGJhc2UsIHNpemVfdCBjYXBhY2l0eSwgaW50IGxvY2tlZCk7CisKKy8qCisgIG1zcGFjZV90cmFja19sYXJnZV9jaHVua3MgY29udHJvbHMgd2hldGhlciByZXF1ZXN0cyBmb3IgbGFyZ2UgY2h1bmtzCisgIGFyZSBhbGxvY2F0ZWQgaW4gdGhlaXIgb3duIHVudHJhY2tlZCBtbWFwcGVkIHJlZ2lvbnMsIHNlcGFyYXRlIGZyb20KKyAgb3RoZXJzIGluIHRoaXMgbXNwYWNlLiBCeSBkZWZhdWx0IGxhcmdlIGNodW5rcyBhcmUgbm90IHRyYWNrZWQsCisgIHdoaWNoIHJlZHVjZXMgZnJhZ21lbnRhdGlvbi4gSG93ZXZlciwgc3VjaCBjaHVua3MgYXJlIG5vdAorICBuZWNlc3NhcmlseSByZWxlYXNlZCB0byB0aGUgc3lzdGVtIHVwb24gZGVzdHJveV9tc3BhY2UuICBFbmFibGluZworICB0cmFja2luZyBieSBzZXR0aW5nIHRvIHRydWUgbWF5IGluY3JlYXNlIGZyYWdtZW50YXRpb24sIGJ1dCBhdm9pZHMKKyAgbGVha2FnZSB3aGVuIHJlbHlpbmcgb24gZGVzdHJveV9tc3BhY2UgdG8gcmVsZWFzZSBhbGwgbWVtb3J5CisgIGFsbG9jYXRlZCB1c2luZyB0aGlzIHNwYWNlLiAgVGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIHByZXZpb3VzCisgIHNldHRpbmcuCisqLworaW50IG1zcGFjZV90cmFja19sYXJnZV9jaHVua3MobXNwYWNlIG1zcCwgaW50IGVuYWJsZSk7CisKKyNpZiAhTk9fTUFMTElORk8KKy8qCisgIG1zcGFjZV9tYWxsaW5mbyBiZWhhdmVzIGFzIG1hbGxpbmZvLCBidXQgcmVwb3J0cyBwcm9wZXJ0aWVzIG9mCisgIHRoZSBnaXZlbiBzcGFjZS4KKyovCitzdHJ1Y3QgbWFsbGluZm8gbXNwYWNlX21hbGxpbmZvKG1zcGFjZSBtc3ApOworI2VuZGlmIC8qIE5PX01BTExJTkZPICovCisKKy8qCisgIEFuIGFsaWFzIGZvciBtYWxsb3B0LgorKi8KK2ludCBtc3BhY2VfbWFsbG9wdChpbnQsIGludCk7CisKKy8qCisgIFRoZSBmb2xsb3dpbmcgb3BlcmF0ZSBpZGVudGljYWxseSB0byB0aGVpciBtYWxsb2MgY291bnRlcnBhcnRzCisgIGJ1dCBvcGVyYXRlIG9ubHkgZm9yIHRoZSBnaXZlbiBtc3BhY2UgYXJndW1lbnQKKyovCit2b2lkKiBtc3BhY2VfbWFsbG9jKG1zcGFjZSBtc3AsIHNpemVfdCBieXRlcyk7Cit2b2lkIG1zcGFjZV9mcmVlKG1zcGFjZSBtc3AsIHZvaWQqIG1lbSk7Cit2b2lkKiBtc3BhY2VfY2FsbG9jKG1zcGFjZSBtc3AsIHNpemVfdCBuX2VsZW1lbnRzLCBzaXplX3QgZWxlbV9zaXplKTsKK3ZvaWQqIG1zcGFjZV9yZWFsbG9jKG1zcGFjZSBtc3AsIHZvaWQqIG1lbSwgc2l6ZV90IG5ld3NpemUpOwordm9pZCogbXNwYWNlX3JlYWxsb2NfaW5fcGxhY2UobXNwYWNlIG1zcCwgdm9pZCogbWVtLCBzaXplX3QgbmV3c2l6ZSk7Cit2b2lkKiBtc3BhY2VfbWVtYWxpZ24obXNwYWNlIG1zcCwgc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IGJ5dGVzKTsKK3ZvaWQqKiBtc3BhY2VfaW5kZXBlbmRlbnRfY2FsbG9jKG1zcGFjZSBtc3AsIHNpemVfdCBuX2VsZW1lbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGVsZW1fc2l6ZSwgdm9pZCogY2h1bmtzW10pOwordm9pZCoqIG1zcGFjZV9pbmRlcGVuZGVudF9jb21hbGxvYyhtc3BhY2UgbXNwLCBzaXplX3Qgbl9lbGVtZW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHNpemVzW10sIHZvaWQqIGNodW5rc1tdKTsKK3NpemVfdCBtc3BhY2VfYnVsa19mcmVlKG1zcGFjZSBtc3AsIHZvaWQqKiwgc2l6ZV90IG5fZWxlbWVudHMpOworc2l6ZV90IG1zcGFjZV91c2FibGVfc2l6ZShjb25zdCB2b2lkKiBtZW0pOwordm9pZCBtc3BhY2VfbWFsbG9jX3N0YXRzKG1zcGFjZSBtc3ApOworaW50IG1zcGFjZV90cmltKG1zcGFjZSBtc3AsIHNpemVfdCBwYWQpOworc2l6ZV90IG1zcGFjZV9mb290cHJpbnQobXNwYWNlIG1zcCk7CitzaXplX3QgbXNwYWNlX21heF9mb290cHJpbnQobXNwYWNlIG1zcCk7CitzaXplX3QgbXNwYWNlX2Zvb3RwcmludF9saW1pdChtc3BhY2UgbXNwKTsKK3NpemVfdCBtc3BhY2Vfc2V0X2Zvb3RwcmludF9saW1pdChtc3BhY2UgbXNwLCBzaXplX3QgYnl0ZXMpOwordm9pZCBtc3BhY2VfaW5zcGVjdF9hbGwobXNwYWNlIG1zcCwgCisgICAgICAgICAgICAgICAgICAgICAgICB2b2lkKCpoYW5kbGVyKSh2b2lkICosIHZvaWQgKiwgc2l6ZV90LCB2b2lkKiksCisgICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiBhcmcpOworI2VuZGlmICAvKiBNU1BBQ0VTICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfTsgIC8qIGVuZCBvZiBleHRlcm4gIkMiICovCisjZW5kaWYKKworI2VuZGlmIC8qIE1BTExPQ18yODBfSCAqLwpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1mcmVlYnNkL1JFQURNRS50eHQgYi9saWJjL3Vwc3RyZWFtLWZyZWVic2QvUkVBRE1FLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYmZjMDRhCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1mcmVlYnNkL1JFQURNRS50eHQKQEAgLTAsMCArMSw1IEBACitUaGlzIGRpcmVjdG9yeSBjb250YWlucyB1cHN0cmVhbSBGcmVlQlNEIHNvdXJjZS4gWW91IHNob3VsZCBub3QgZWRpdCB0aGVzZQorZmlsZXMgZGlyZWN0bHkuIE1ha2UgZml4ZXMgdXBzdHJlYW0gYW5kIHRoZW4gcHVsbCBkb3duIHRoZSBuZXcgdmVyc2lvbiBvZgordGhlIGZpbGUuCisKK1RPRE86IHdyaXRlIGEgc2NyaXB0IHRvIG1ha2UgdGhpcyBwcm9jZXNzIGF1dG9tYXRlZC4KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tZnJlZWJzZC9mcmVlYnNkLWNvbXBhdC5oIGIvbGliYy91cHN0cmVhbS1mcmVlYnNkL2ZyZWVic2QtY29tcGF0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODAzMGVlYQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tZnJlZWJzZC9mcmVlYnNkLWNvbXBhdC5oCkBAIC0wLDAgKzEsMzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaWZuZGVmIF9CSU9OSUNfRlJFRUJTRF9DT01QQVRfSF9pbmNsdWRlZAorI2RlZmluZSBfQklPTklDX0ZSRUVCU0RfQ09NUEFUX0hfaW5jbHVkZWQKKworI2RlZmluZSBfX1VTRV9CU0QKKyNkZWZpbmUgUkVQTEFDRV9HRVRPUFQKKworI2RlZmluZSBfY2xvc2UgY2xvc2UKKyNkZWZpbmUgX2ZjbnRsIGZjbnRsCisjZGVmaW5lIF9mc3RhdCBmc3RhdAorI2RlZmluZSBfb3BlbiBvcGVuCisKKyNkZWZpbmUgX3NzZWVrIF9fc3NlZWsgLyogTmVlZGVkIGFzIGxvbmcgYXMgd2UgaGF2ZSBhIG1peCBvZiBPcGVuQlNEIGFuZCBGcmVlQlNEIHN0ZGlvLiAqLworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdGRpby9jbHJlcnIuYyBiL2xpYmMvdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdGRpby9jbHJlcnIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMTYxYTZlCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0ZGlvL2NscmVyci5jCkBAIC0wLDAgKzEsNjAgQEAKKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5CisgKiBDaHJpcyBUb3Jlay4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2lmIGRlZmluZWQoTElCQ19TQ0NTKSAmJiAhZGVmaW5lZChsaW50KQorc3RhdGljIGNoYXIgc2Njc2lkW10gPSAiQCgjKWNscmVyci5jCTguMSAoQmVya2VsZXkpIDYvNC85MyI7CisjZW5kaWYgLyogTElCQ19TQ0NTIGFuZCBub3QgbGludCAqLworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorX19GQlNESUQoIiRGcmVlQlNEJCIpOworCisjaW5jbHVkZSAibmFtZXNwYWNlLmgiCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlICJ1bi1uYW1lc3BhY2UuaCIKKyNpbmNsdWRlICJsaWJjX3ByaXZhdGUuaCIKKworI3VuZGVmIGNsZWFyZXJyCisjdW5kZWYgY2xlYXJlcnJfdW5sb2NrZWQKKwordm9pZAorY2xlYXJlcnIoRklMRSAqZnApCit7CisJRkxPQ0tGSUxFKGZwKTsKKwlfX3NjbGVhcmVycihmcCk7CisJRlVOTE9DS0ZJTEUoZnApOworfQorCit2b2lkCitjbGVhcmVycl91bmxvY2tlZChGSUxFICpmcCkKK3sKKworCV9fc2NsZWFyZXJyKGZwKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdGRpby9mY2xvc2UuYyBiL2xpYmMvdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdGRpby9mY2xvc2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZWQ4YjJjCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0ZGlvL2ZjbG9zZS5jCkBAIC0wLDAgKzEsODUgQEAKKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5CisgKiBDaHJpcyBUb3Jlay4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2lmIGRlZmluZWQoTElCQ19TQ0NTKSAmJiAhZGVmaW5lZChsaW50KQorc3RhdGljIGNoYXIgc2Njc2lkW10gPSAiQCgjKWZjbG9zZS5jCTguMSAoQmVya2VsZXkpIDYvNC85MyI7CisjZW5kaWYgLyogTElCQ19TQ0NTIGFuZCBub3QgbGludCAqLworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorX19GQlNESUQoIiRGcmVlQlNEJCIpOworCisjaW5jbHVkZSAibmFtZXNwYWNlLmgiCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgInVuLW5hbWVzcGFjZS5oIgorI2luY2x1ZGUgPHNwaW5sb2NrLmg+CisjaW5jbHVkZSAibGliY19wcml2YXRlLmgiCisjaW5jbHVkZSAibG9jYWwuaCIKKworaW50CitmY2xvc2UoRklMRSAqZnApCit7CisJaW50IHI7CisKKwlpZiAoZnAtPl9mbGFncyA9PSAwKSB7CS8qIG5vdCBvcGVuISAqLworCQllcnJubyA9IEVCQURGOworCQlyZXR1cm4gKEVPRik7CisJfQorCUZMT0NLRklMRShmcCk7CisJciA9IGZwLT5fZmxhZ3MgJiBfX1NXUiA/IF9fc2ZsdXNoKGZwKSA6IDA7CisJaWYgKGZwLT5fY2xvc2UgIT0gTlVMTCAmJiAoKmZwLT5fY2xvc2UpKGZwLT5fY29va2llKSA8IDApCisJCXIgPSBFT0Y7CisJaWYgKGZwLT5fZmxhZ3MgJiBfX1NNQkYpCisJCWZyZWUoKGNoYXIgKilmcC0+X2JmLl9iYXNlKTsKKwlpZiAoSEFTVUIoZnApKQorCQlGUkVFVUIoZnApOworCWlmIChIQVNMQihmcCkpCisJCUZSRUVMQihmcCk7CisJZnAtPl9maWxlID0gLTE7CisJZnAtPl9yID0gZnAtPl93ID0gMDsJLyogTWVzcyB1cCBpZiByZWFjY2Vzc2VkLiAqLworCisJLyoKKwkgKiBMb2NrIHRoZSBzcGlubG9jayB1c2VkIHRvIHByb3RlY3QgX19zZ2x1ZSBsaXN0IHdhbGsgaW4KKwkgKiBfX3NmcCgpLiAgVGhlIF9fc2ZwKCkgdXNlcyBmcC0+X2ZsYWdzID09IDAgdGVzdCBhcyBhbgorCSAqIGluZGljYXRpb24gb2YgdGhlIHVudXNlZCBGSUxFLgorCSAqCisJICogVGFraW5nIHRoZSBsb2NrIHByZXZlbnRzIHBvc3NpYmxlIGNvbXBpbGVyIG9yIHByb2Nlc3NvcgorCSAqIHJlb3JkZXJpbmcgb2YgdGhlIHdyaXRlcyBwZXJmb3JtZWQgYmVmb3JlIHRoZSBmaW5hbCBfZmxhZ3MKKwkgKiBjbGVhbnVwLCBtYWtpbmcgc3VyZSB0aGF0IHdlIGFyZSBkb25lIHdpdGggdGhlIEZJTEUgYmVmb3JlCisJICogaXQgaXMgY29uc2lkZXJlZCBhdmFpbGFibGUuCisJICovCisJU1RESU9fVEhSRUFEX0xPQ0soKTsKKwlmcC0+X2ZsYWdzID0gMDsJCS8qIFJlbGVhc2UgdGhpcyBGSUxFIGZvciByZXVzZS4gKi8KKwlTVERJT19USFJFQURfVU5MT0NLKCk7CisJRlVOTE9DS0ZJTEUoZnApOworCXJldHVybiAocik7Cit9CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RkaW8vZmRvcGVuLmMgYi9saWJjL3Vwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RkaW8vZmRvcGVuLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmUxOWI5ZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdGRpby9mZG9wZW4uYwpAQCAtMCwwICsxLDEwMiBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKKyAqIENocmlzIFRvcmVrLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaWYgZGVmaW5lZChMSUJDX1NDQ1MpICYmICFkZWZpbmVkKGxpbnQpCitzdGF0aWMgY2hhciBzY2NzaWRbXSA9ICJAKCMpZmRvcGVuLmMJOC4xIChCZXJrZWxleSkgNi80LzkzIjsKKyNlbmRpZiAvKiBMSUJDX1NDQ1MgYW5kIG5vdCBsaW50ICovCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CitfX0ZCU0RJRCgiJEZyZWVCU0QkIik7CisKKyNpbmNsdWRlICJuYW1lc3BhY2UuaCIKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxsaW1pdHMuaD4KKyNpbmNsdWRlICJ1bi1uYW1lc3BhY2UuaCIKKyNpbmNsdWRlICJsb2NhbC5oIgorCitGSUxFICoKK2Zkb3BlbihpbnQgZmQsIGNvbnN0IGNoYXIgKm1vZGUpCit7CisJRklMRSAqZnA7CisJaW50IGZsYWdzLCBvZmxhZ3MsIGZkZmxhZ3MsIHRtcDsKKworCS8qCisJICogRmlsZSBkZXNjcmlwdG9ycyBhcmUgYSBmdWxsIGludCwgYnV0IF9maWxlIGlzIG9ubHkgYSBzaG9ydC4KKwkgKiBJZiB3ZSBnZXQgYSB2YWxpZCBmaWxlIGRlc2NyaXB0b3IgdGhhdCBpcyBncmVhdGVyIHRoYW4KKwkgKiBTSFJUX01BWCwgdGhlbiB0aGUgZmQgd2lsbCBnZXQgc2lnbi1leHRlbmRlZCBpbnRvIGFuCisJICogaW52YWxpZCBmaWxlIGRlc2NyaXB0b3IuICBIYW5kbGUgdGhpcyBjYXNlIGJ5IGZhaWxpbmcgdGhlCisJICogb3Blbi4KKwkgKi8KKwlpZiAoZmQgPiBTSFJUX01BWCkgeworCQllcnJubyA9IEVNRklMRTsKKwkJcmV0dXJuIChOVUxMKTsKKwl9CisKKwlpZiAoKGZsYWdzID0gX19zZmxhZ3MobW9kZSwgJm9mbGFncykpID09IDApCisJCXJldHVybiAoTlVMTCk7CisKKwkvKiBNYWtlIHN1cmUgdGhlIG1vZGUgdGhlIHVzZXIgd2FudHMgaXMgYSBzdWJzZXQgb2YgdGhlIGFjdHVhbCBtb2RlLiAqLworCWlmICgoZmRmbGFncyA9IF9mY250bChmZCwgRl9HRVRGTCwgMCkpIDwgMCkKKwkJcmV0dXJuIChOVUxMKTsKKwl0bXAgPSBmZGZsYWdzICYgT19BQ0NNT0RFOworCWlmICh0bXAgIT0gT19SRFdSICYmICh0bXAgIT0gKG9mbGFncyAmIE9fQUNDTU9ERSkpKSB7CisJCWVycm5vID0gRUlOVkFMOworCQlyZXR1cm4gKE5VTEwpOworCX0KKworCWlmICgoZnAgPSBfX3NmcCgpKSA9PSBOVUxMKQorCQlyZXR1cm4gKE5VTEwpOworCisJaWYgKChvZmxhZ3MgJiBPX0NMT0VYRUMpICYmIF9mY250bChmZCwgRl9TRVRGRCwgRkRfQ0xPRVhFQykgPT0gLTEpIHsKKwkJZnAtPl9mbGFncyA9IDA7CisJCXJldHVybiAoTlVMTCk7CisJfQorCisJZnAtPl9mbGFncyA9IGZsYWdzOworCS8qCisJICogSWYgb3BlbmVkIGZvciBhcHBlbmRpbmcsIGJ1dCB1bmRlcmx5aW5nIGRlc2NyaXB0b3IgZG9lcyBub3QgaGF2ZQorCSAqIE9fQVBQRU5EIGJpdCBzZXQsIGFzc2VydCBfX1NBUFAgc28gdGhhdCBfX3N3cml0ZSgpIGNhbGxlcgorCSAqIHdpbGwgX3NzZWVrKCkgdG8gdGhlIGVuZCBiZWZvcmUgd3JpdGUuCisJICovCisJaWYgKChvZmxhZ3MgJiBPX0FQUEVORCkgJiYgIShmZGZsYWdzICYgT19BUFBFTkQpKQorCQlmcC0+X2ZsYWdzIHw9IF9fU0FQUDsKKwlmcC0+X2ZpbGUgPSBmZDsKKwlmcC0+X2Nvb2tpZSA9IGZwOworCWZwLT5fcmVhZCA9IF9fc3JlYWQ7CisJZnAtPl93cml0ZSA9IF9fc3dyaXRlOworCWZwLT5fc2VlayA9IF9fc3NlZWs7CisJZnAtPl9jbG9zZSA9IF9fc2Nsb3NlOworCXJldHVybiAoZnApOworfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0ZGlvL2Zlb2YuYyBiL2xpYmMvdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdGRpby9mZW9mLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjk3MDI0OAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdGRpby9mZW9mLmMKQEAgLTAsMCArMSw2MyBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKKyAqIENocmlzIFRvcmVrLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaWYgZGVmaW5lZChMSUJDX1NDQ1MpICYmICFkZWZpbmVkKGxpbnQpCitzdGF0aWMgY2hhciBzY2NzaWRbXSA9ICJAKCMpZmVvZi5jCTguMSAoQmVya2VsZXkpIDYvNC85MyI7CisjZW5kaWYgLyogTElCQ19TQ0NTIGFuZCBub3QgbGludCAqLworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorX19GQlNESUQoIiRGcmVlQlNEJCIpOworCisjaW5jbHVkZSAibmFtZXNwYWNlLmgiCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlICJ1bi1uYW1lc3BhY2UuaCIKKyNpbmNsdWRlICJsaWJjX3ByaXZhdGUuaCIKKworI3VuZGVmIGZlb2YKKyN1bmRlZiBmZW9mX3VubG9ja2VkCisKK2ludAorZmVvZihGSUxFICpmcCkKK3sKKwlpbnQJcmV0OworCisJRkxPQ0tGSUxFKGZwKTsKKwlyZXQ9IF9fc2Zlb2YoZnApOworCUZVTkxPQ0tGSUxFKGZwKTsKKwlyZXR1cm4gKHJldCk7Cit9CisKK2ludAorZmVvZl91bmxvY2tlZChGSUxFICpmcCkKK3sKKworCXJldHVybiAoX19zZmVvZihmcCkpOworfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0ZGlvL2ZlcnJvci5jIGIvbGliYy91cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0ZGlvL2ZlcnJvci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlMGY4ZjkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RkaW8vZmVycm9yLmMKQEAgLTAsMCArMSw2MyBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKKyAqIENocmlzIFRvcmVrLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaWYgZGVmaW5lZChMSUJDX1NDQ1MpICYmICFkZWZpbmVkKGxpbnQpCitzdGF0aWMgY2hhciBzY2NzaWRbXSA9ICJAKCMpZmVycm9yLmMJOC4xIChCZXJrZWxleSkgNi80LzkzIjsKKyNlbmRpZiAvKiBMSUJDX1NDQ1MgYW5kIG5vdCBsaW50ICovCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CitfX0ZCU0RJRCgiJEZyZWVCU0QkIik7CisKKyNpbmNsdWRlICJuYW1lc3BhY2UuaCIKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgInVuLW5hbWVzcGFjZS5oIgorI2luY2x1ZGUgImxpYmNfcHJpdmF0ZS5oIgorCisjdW5kZWYgZmVycm9yCisjdW5kZWYgZmVycm9yX3VubG9ja2VkCisKK2ludAorZmVycm9yKEZJTEUgKmZwKQoreworCWludAlyZXQ7CisKKwlGTE9DS0ZJTEUoZnApOworCXJldCA9IF9fc2ZlcnJvcihmcCk7CisJRlVOTE9DS0ZJTEUoZnApOworCXJldHVybiAocmV0KTsKK30KKworaW50CitmZXJyb3JfdW5sb2NrZWQoRklMRSAqZnApCit7CisKKwlyZXR1cm4gKF9fc2ZlcnJvcihmcCkpOworfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0ZGlvL2ZnZXRsbi5jIGIvbGliYy91cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0ZGlvL2ZnZXRsbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3NzlkZTIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RkaW8vZmdldGxuLmMKQEAgLTAsMCArMSwxNjQgQEAKKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5CisgKiBDaHJpcyBUb3Jlay4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2lmIGRlZmluZWQoTElCQ19TQ0NTKSAmJiAhZGVmaW5lZChsaW50KQorc3RhdGljIGNoYXIgc2Njc2lkW10gPSAiQCgjKWZnZXRsbi5jCTguMiAoQmVya2VsZXkpIDEvMi85NCI7CisjZW5kaWYgLyogTElCQ19TQ0NTIGFuZCBub3QgbGludCAqLworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorX19GQlNESUQoIiRGcmVlQlNEJCIpOworCisjaW5jbHVkZSAibmFtZXNwYWNlLmgiCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlICJ1bi1uYW1lc3BhY2UuaCIKKyNpbmNsdWRlICJsaWJjX3ByaXZhdGUuaCIKKyNpbmNsdWRlICJsb2NhbC5oIgorCisvKgorICogRXhwYW5kIHRoZSBsaW5lIGJ1ZmZlci4gIFJldHVybiAtMSBvbiBlcnJvci4KKyNpZmRlZiBub3RkZWYKKyAqIFRoZSBgbmV3IHNpemUnIGRvZXMgbm90IGFjY291bnQgZm9yIGEgdGVybWluYXRpbmcgJ1wwJywKKyAqIHNvIHdlIGFkZCAxIGhlcmUuCisjZW5kaWYKKyAqLworaW50CitfX3NsYmV4cGFuZChGSUxFICpmcCwgc2l6ZV90IG5ld3NpemUpCit7CisJdm9pZCAqcDsKKworI2lmZGVmIG5vdGRlZgorCSsrbmV3c2l6ZTsKKyNlbmRpZgorCWlmIChmcC0+X2xiLl9zaXplID49IG5ld3NpemUpCisJCXJldHVybiAoMCk7CisJaWYgKChwID0gcmVhbGxvYyhmcC0+X2xiLl9iYXNlLCBuZXdzaXplKSkgPT0gTlVMTCkKKwkJcmV0dXJuICgtMSk7CisJZnAtPl9sYi5fYmFzZSA9IHA7CisJZnAtPl9sYi5fc2l6ZSA9IG5ld3NpemU7CisJcmV0dXJuICgwKTsKK30KKworLyoKKyAqIEdldCBhbiBpbnB1dCBsaW5lLiAgVGhlIHJldHVybmVkIHBvaW50ZXIgb2Z0ZW4gKGJ1dCBub3QgYWx3YXlzKQorICogcG9pbnRzIGludG8gYSBzdGRpbyBidWZmZXIuICBGZ2V0bG4gZG9lcyBub3QgYWx0ZXIgdGhlIHRleHQgb2YKKyAqIHRoZSByZXR1cm5lZCBsaW5lICh3aGljaCBpcyB0aHVzIG5vdCBhIEMgc3RyaW5nIGJlY2F1c2UgaXQgd2lsbAorICogbm90IG5lY2Vzc2FyaWx5IGVuZCB3aXRoICdcMCcpLCBidXQgZG9lcyBhbGxvdyBjYWxsZXJzIHRvIG1vZGlmeQorICogaXQgaWYgdGhleSB3aXNoLiAgVGh1cywgd2Ugc2V0IF9fU01PRCBpbiBjYXNlIHRoZSBjYWxsZXIgZG9lcy4KKyAqLworY2hhciAqCitmZ2V0bG4oRklMRSAqZnAsIHNpemVfdCAqbGVucCkKK3sKKwl1bnNpZ25lZCBjaGFyICpwOworCXNpemVfdCBsZW47CisJc2l6ZV90IG9mZjsKKworCUZMT0NLRklMRShmcCk7CisJT1JJRU5UKGZwLCAtMSk7CisJLyogbWFrZSBzdXJlIHRoZXJlIGlzIGlucHV0ICovCisJaWYgKGZwLT5fciA8PSAwICYmIF9fc3JlZmlsbChmcCkpIHsKKwkJKmxlbnAgPSAwOworCQlGVU5MT0NLRklMRShmcCk7CisJCXJldHVybiAoTlVMTCk7CisJfQorCisJLyogbG9vayBmb3IgYSBuZXdsaW5lIGluIHRoZSBpbnB1dCAqLworCWlmICgocCA9IG1lbWNocigodm9pZCAqKWZwLT5fcCwgJ1xuJywgKHNpemVfdClmcC0+X3IpKSAhPSBOVUxMKSB7CisJCWNoYXIgKnJldDsKKworCQkvKgorCQkgKiBGb3VuZCBvbmUuICBGbGFnIGJ1ZmZlciBhcyBtb2RpZmllZCB0byBrZWVwIGZzZWVrIGZyb20KKwkJICogYG9wdGltaXNpbmcnIGEgYmFja3dhcmQgc2VlaywgaW4gY2FzZSB0aGUgdXNlciBzdG9tcHMgb24KKwkJICogdGhlIHRleHQuCisJCSAqLworCQlwKys7CQkvKiBhZHZhbmNlIG92ZXIgaXQgKi8KKwkJcmV0ID0gKGNoYXIgKilmcC0+X3A7CisJCSpsZW5wID0gbGVuID0gcCAtIGZwLT5fcDsKKwkJZnAtPl9mbGFncyB8PSBfX1NNT0Q7CisJCWZwLT5fciAtPSBsZW47CisJCWZwLT5fcCA9IHA7CisJCUZVTkxPQ0tGSUxFKGZwKTsKKwkJcmV0dXJuIChyZXQpOworCX0KKworCS8qCisJICogV2UgaGF2ZSB0byBjb3B5IHRoZSBjdXJyZW50IGJ1ZmZlcmVkIGRhdGEgdG8gdGhlIGxpbmUgYnVmZmVyLgorCSAqIEFzIGEgYm9udXMsIHRob3VnaCwgd2UgY2FuIGxlYXZlIG9mZiB0aGUgX19TTU9ELgorCSAqCisJICogT1BUSU1JU1RJQyBpcyBsZW5ndGggdGhhdCB3ZSAob3B0aW1pc3RpY2FsbHkpIGV4cGVjdCB3aWxsCisJICogYWNjb21tb2RhdGUgdGhlIGByZXN0JyBvZiB0aGUgc3RyaW5nLCBvbiBlYWNoIHRyaXAgdGhyb3VnaCB0aGUKKwkgKiBsb29wIGJlbG93LgorCSAqLworI2RlZmluZSBPUFRJTUlTVElDIDgwCisKKwlmb3IgKGxlbiA9IGZwLT5fciwgb2ZmID0gMDs7IGxlbiArPSBmcC0+X3IpIHsKKwkJc2l6ZV90IGRpZmY7CisKKwkJLyoKKwkJICogTWFrZSBzdXJlIHRoZXJlIGlzIHJvb20gZm9yIG1vcmUgYnl0ZXMuICBDb3B5IGRhdGEgZnJvbQorCQkgKiBmaWxlIGJ1ZmZlciB0byBsaW5lIGJ1ZmZlciwgcmVmaWxsIGZpbGUgYW5kIGxvb2sgZm9yCisJCSAqIG5ld2xpbmUuICBUaGUgbG9vcCBzdG9wcyBvbmx5IHdoZW4gd2UgZmluZCBhIG5ld2xpbmUuCisJCSAqLworCQlpZiAoX19zbGJleHBhbmQoZnAsIGxlbiArIE9QVElNSVNUSUMpKQorCQkJZ290byBlcnJvcjsKKwkJKHZvaWQpbWVtY3B5KCh2b2lkICopKGZwLT5fbGIuX2Jhc2UgKyBvZmYpLCAodm9pZCAqKWZwLT5fcCwKKwkJICAgIGxlbiAtIG9mZik7CisJCW9mZiA9IGxlbjsKKwkJaWYgKF9fc3JlZmlsbChmcCkpCisJCQlicmVhazsJLyogRU9GIG9yIGVycm9yOiByZXR1cm4gcGFydGlhbCBsaW5lICovCisJCWlmICgocCA9IG1lbWNocigodm9pZCAqKWZwLT5fcCwgJ1xuJywgKHNpemVfdClmcC0+X3IpKSA9PSBOVUxMKQorCQkJY29udGludWU7CisKKwkJLyogZ290IGl0OiBmaW5pc2ggdXAgdGhlIGxpbmUgKGxpa2UgY29kZSBhYm92ZSkgKi8KKwkJcCsrOworCQlkaWZmID0gcCAtIGZwLT5fcDsKKwkJbGVuICs9IGRpZmY7CisJCWlmIChfX3NsYmV4cGFuZChmcCwgbGVuKSkKKwkJCWdvdG8gZXJyb3I7CisJCSh2b2lkKW1lbWNweSgodm9pZCAqKShmcC0+X2xiLl9iYXNlICsgb2ZmKSwgKHZvaWQgKilmcC0+X3AsCisJCSAgICBkaWZmKTsKKwkJZnAtPl9yIC09IGRpZmY7CisJCWZwLT5fcCA9IHA7CisJCWJyZWFrOworCX0KKwkqbGVucCA9IGxlbjsKKyNpZmRlZiBub3RkZWYKKwlmcC0+X2xiLl9iYXNlW2xlbl0gPSAwOworI2VuZGlmCisJRlVOTE9DS0ZJTEUoZnApOworCXJldHVybiAoKGNoYXIgKilmcC0+X2xiLl9iYXNlKTsKKworZXJyb3I6CisJKmxlbnAgPSAwOwkJLyogPz8/ICovCisJRlVOTE9DS0ZJTEUoZnApOworCXJldHVybiAoTlVMTCk7CQkvKiA/Pz8gKi8KK30KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdGRpby9mZ2V0cG9zLmMgYi9saWJjL3Vwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RkaW8vZmdldHBvcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxNjFmNDMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RkaW8vZmdldHBvcy5jCkBAIC0wLDAgKzEsNTEgQEAKKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5CisgKiBDaHJpcyBUb3Jlay4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2lmIGRlZmluZWQoTElCQ19TQ0NTKSAmJiAhZGVmaW5lZChsaW50KQorc3RhdGljIGNoYXIgc2Njc2lkW10gPSAiQCgjKWZnZXRwb3MuYwk4LjEgKEJlcmtlbGV5KSA2LzQvOTMiOworI2VuZGlmIC8qIExJQkNfU0NDUyBhbmQgbm90IGxpbnQgKi8KKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJTRCQiKTsKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisKK2ludAorZmdldHBvcyhGSUxFICogX19yZXN0cmljdCBmcCwgZnBvc190ICogX19yZXN0cmljdCBwb3MpCit7CisJLyoKKwkgKiBmdGVsbG8gaXMgdGhyZWFkLXNhZmU7IG5vIG5lZWQgdG8gbG9jayBmcC4KKwkgKi8KKwlpZiAoKCpwb3MgPSBmdGVsbG8oZnApKSA9PSAoZnBvc190KS0xKQorCQlyZXR1cm4gKC0xKTsKKwllbHNlCisJCXJldHVybiAoMCk7Cit9CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RkaW8vZmdldHMuYyBiL2xpYmMvdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdGRpby9mZ2V0cy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhYmY1NTkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RkaW8vZmdldHMuYwpAQCAtMCwwICsxLDEwOSBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKKyAqIENocmlzIFRvcmVrLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaWYgZGVmaW5lZChMSUJDX1NDQ1MpICYmICFkZWZpbmVkKGxpbnQpCitzdGF0aWMgY2hhciBzY2NzaWRbXSA9ICJAKCMpZmdldHMuYwk4LjIgKEJlcmtlbGV5KSAxMi8yMi85MyI7CisjZW5kaWYgLyogTElCQ19TQ0NTIGFuZCBub3QgbGludCAqLworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorX19GQlNESUQoIiRGcmVlQlNEJCIpOworCisjaW5jbHVkZSAibmFtZXNwYWNlLmgiCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlICJ1bi1uYW1lc3BhY2UuaCIKKyNpbmNsdWRlICJsb2NhbC5oIgorI2luY2x1ZGUgImxpYmNfcHJpdmF0ZS5oIgorCisvKgorICogUmVhZCBhdCBtb3N0IG4tMSBjaGFyYWN0ZXJzIGZyb20gdGhlIGdpdmVuIGZpbGUuCisgKiBTdG9wIHdoZW4gYSBuZXdsaW5lIGhhcyBiZWVuIHJlYWQsIG9yIHRoZSBjb3VudCBydW5zIG91dC4KKyAqIFJldHVybiBmaXJzdCBhcmd1bWVudCwgb3IgTlVMTCBpZiBubyBjaGFyYWN0ZXJzIHdlcmUgcmVhZC4KKyAqLworY2hhciAqCitmZ2V0cyhjaGFyICogX19yZXN0cmljdCBidWYsIGludCBuLCBGSUxFICogX19yZXN0cmljdCBmcCkKK3sKKwlzaXplX3QgbGVuOworCWNoYXIgKnM7CisJdW5zaWduZWQgY2hhciAqcCwgKnQ7CisKKwlpZiAobiA8PSAwKQkJLyogc2FuaXR5IGNoZWNrICovCisJCXJldHVybiAoTlVMTCk7CisKKwlGTE9DS0ZJTEUoZnApOworCU9SSUVOVChmcCwgLTEpOworCXMgPSBidWY7CisJbi0tOwkJCS8qIGxlYXZlIHNwYWNlIGZvciBOVUwgKi8KKwl3aGlsZSAobiAhPSAwKSB7CisJCS8qCisJCSAqIElmIHRoZSBidWZmZXIgaXMgZW1wdHksIHJlZmlsbCBpdC4KKwkJICovCisJCWlmICgobGVuID0gZnAtPl9yKSA8PSAwKSB7CisJCQlpZiAoX19zcmVmaWxsKGZwKSkgeworCQkJCS8qIEVPRi9lcnJvcjogc3RvcCB3aXRoIHBhcnRpYWwgb3Igbm8gbGluZSAqLworCQkJCWlmIChzID09IGJ1ZikgeworCQkJCQlGVU5MT0NLRklMRShmcCk7CisJCQkJCXJldHVybiAoTlVMTCk7CisJCQkJfQorCQkJCWJyZWFrOworCQkJfQorCQkJbGVuID0gZnAtPl9yOworCQl9CisJCXAgPSBmcC0+X3A7CisKKwkJLyoKKwkJICogU2NhbiB0aHJvdWdoIGF0IG1vc3QgbiBieXRlcyBvZiB0aGUgY3VycmVudCBidWZmZXIsCisJCSAqIGxvb2tpbmcgZm9yICdcbicuICBJZiBmb3VuZCwgY29weSB1cCB0byBhbmQgaW5jbHVkaW5nCisJCSAqIG5ld2xpbmUsIGFuZCBzdG9wLiAgT3RoZXJ3aXNlLCBjb3B5IGVudGlyZSBjaHVuaworCQkgKiBhbmQgbG9vcC4KKwkJICovCisJCWlmIChsZW4gPiBuKQorCQkJbGVuID0gbjsKKwkJdCA9IG1lbWNocigodm9pZCAqKXAsICdcbicsIGxlbik7CisJCWlmICh0ICE9IE5VTEwpIHsKKwkJCWxlbiA9ICsrdCAtIHA7CisJCQlmcC0+X3IgLT0gbGVuOworCQkJZnAtPl9wID0gdDsKKwkJCSh2b2lkKW1lbWNweSgodm9pZCAqKXMsICh2b2lkICopcCwgbGVuKTsKKwkJCXNbbGVuXSA9IDA7CisJCQlGVU5MT0NLRklMRShmcCk7CisJCQlyZXR1cm4gKGJ1Zik7CisJCX0KKwkJZnAtPl9yIC09IGxlbjsKKwkJZnAtPl9wICs9IGxlbjsKKwkJKHZvaWQpbWVtY3B5KCh2b2lkICopcywgKHZvaWQgKilwLCBsZW4pOworCQlzICs9IGxlbjsKKwkJbiAtPSBsZW47CisJfQorCSpzID0gMDsKKwlGVU5MT0NLRklMRShmcCk7CisJcmV0dXJuIChidWYpOworfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0ZGlvL2ZpbGVuby5jIGIvbGliYy91cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0ZGlvL2ZpbGVuby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhYzE4MzAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RkaW8vZmlsZW5vLmMKQEAgLTAsMCArMSw2NCBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKKyAqIENocmlzIFRvcmVrLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaWYgZGVmaW5lZChMSUJDX1NDQ1MpICYmICFkZWZpbmVkKGxpbnQpCitzdGF0aWMgY2hhciBzY2NzaWRbXSA9ICJAKCMpZmlsZW5vLmMJOC4xIChCZXJrZWxleSkgNi80LzkzIjsKKyNlbmRpZiAvKiBMSUJDX1NDQ1MgYW5kIG5vdCBsaW50ICovCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CitfX0ZCU0RJRCgiJEZyZWVCU0QkIik7CisKKyNpbmNsdWRlICJuYW1lc3BhY2UuaCIKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgInVuLW5hbWVzcGFjZS5oIgorI2luY2x1ZGUgImxpYmNfcHJpdmF0ZS5oIgorCisjdW5kZWYgZmlsZW5vCisjdW5kZWYgZmlsZW5vX3VubG9ja2VkCisKK2ludAorZmlsZW5vKEZJTEUgKmZwKQoreworCWludCBmZDsKKworCUZMT0NLRklMRShmcCk7CisJZmQgPSBfX3NmaWxlbm8oZnApOworCUZVTkxPQ0tGSUxFKGZwKTsKKworCXJldHVybiAoZmQpOworfQorCitpbnQKK2ZpbGVub191bmxvY2tlZChGSUxFICpmcCkKK3sKKworCXJldHVybiAoX19zZmlsZW5vKGZwKSk7Cit9CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RkaW8vZmxhZ3MuYyBiL2xpYmMvdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdGRpby9mbGFncy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4NzhjMmYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RkaW8vZmxhZ3MuYwpAQCAtMCwwICsxLDExMiBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKKyAqIENocmlzIFRvcmVrLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaWYgZGVmaW5lZChMSUJDX1NDQ1MpICYmICFkZWZpbmVkKGxpbnQpCitzdGF0aWMgY2hhciBzY2NzaWRbXSA9ICJAKCMpZmxhZ3MuYwk4LjEgKEJlcmtlbGV5KSA2LzQvOTMiOworI2VuZGlmIC8qIExJQkNfU0NDUyBhbmQgbm90IGxpbnQgKi8KKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJTRCQiKTsKKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9maWxlLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorCisjaW5jbHVkZSAibG9jYWwuaCIKKworLyoKKyAqIFJldHVybiB0aGUgKHN0ZGlvKSBmbGFncyBmb3IgYSBnaXZlbiBtb2RlLiAgU3RvcmUgdGhlIGZsYWdzCisgKiB0byBiZSBwYXNzZWQgdG8gYW4gX29wZW4oKSBzeXNjYWxsIHRocm91Z2ggKm9wdHIuCisgKiBSZXR1cm4gMCBvbiBlcnJvci4KKyAqLworaW50CitfX3NmbGFncyhjb25zdCBjaGFyICptb2RlLCBpbnQgKm9wdHIpCit7CisJaW50IHJldCwgbSwgbzsKKworCXN3aXRjaCAoKm1vZGUrKykgeworCisJY2FzZSAncic6CS8qIG9wZW4gZm9yIHJlYWRpbmcgKi8KKwkJcmV0ID0gX19TUkQ7CisJCW0gPSBPX1JET05MWTsKKwkJbyA9IDA7CisJCWJyZWFrOworCisJY2FzZSAndyc6CS8qIG9wZW4gZm9yIHdyaXRpbmcgKi8KKwkJcmV0ID0gX19TV1I7CisJCW0gPSBPX1dST05MWTsKKwkJbyA9IE9fQ1JFQVQgfCBPX1RSVU5DOworCQlicmVhazsKKworCWNhc2UgJ2EnOgkvKiBvcGVuIGZvciBhcHBlbmRpbmcgKi8KKwkJcmV0ID0gX19TV1I7CisJCW0gPSBPX1dST05MWTsKKwkJbyA9IE9fQ1JFQVQgfCBPX0FQUEVORDsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgkvKiBpbGxlZ2FsIG1vZGUgKi8KKwkJZXJybm8gPSBFSU5WQUw7CisJCXJldHVybiAoMCk7CisJfQorCisJLyogJ2InIChiaW5hcnkpIGlzIGlnbm9yZWQgKi8KKwlpZiAoKm1vZGUgPT0gJ2InKQorCQltb2RlKys7CisKKwkvKiBbcndhXVtiXVwrIG1lYW5zIHJlYWQgYW5kIHdyaXRlICovCisJaWYgKCptb2RlID09ICcrJykgeworCQltb2RlKys7CisJCXJldCA9IF9fU1JXOworCQltID0gT19SRFdSOworCX0KKworCS8qICdiJyAoYmluYXJ5KSBjYW4gYXBwZWFyIGhlcmUsIHRvbyAtLSBhbmQgaXMgaWdub3JlZCBhZ2FpbiAqLworCWlmICgqbW9kZSA9PSAnYicpCisJCW1vZGUrKzsKKworCS8qICd4JyBtZWFucyBleGNsdXNpdmUgKGZhaWwgaWYgdGhlIGZpbGUgZXhpc3RzKSAqLworCWlmICgqbW9kZSA9PSAneCcpIHsKKwkJbW9kZSsrOworCQlpZiAobSA9PSBPX1JET05MWSkgeworCQkJZXJybm8gPSBFSU5WQUw7CisJCQlyZXR1cm4gKDApOworCQl9CisJCW8gfD0gT19FWENMOworCX0KKworCS8qIHNldCBjbG9zZS1vbi1leGVjICovCisJaWYgKCptb2RlID09ICdlJykKKwkJbyB8PSBPX0NMT0VYRUM7CisKKwkqb3B0ciA9IG0gfCBvOworCXJldHVybiAocmV0KTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdGRpby9mb3Blbi5jIGIvbGliYy91cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0ZGlvL2ZvcGVuLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjA4ZTMzNgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdGRpby9mb3Blbi5jCkBAIC0wLDAgKzEsOTcgQEAKKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5CisgKiBDaHJpcyBUb3Jlay4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2lmIGRlZmluZWQoTElCQ19TQ0NTKSAmJiAhZGVmaW5lZChsaW50KQorc3RhdGljIGNoYXIgc2Njc2lkW10gPSAiQCgjKWZvcGVuLmMJOC4xIChCZXJrZWxleSkgNi80LzkzIjsKKyNlbmRpZiAvKiBMSUJDX1NDQ1MgYW5kIG5vdCBsaW50ICovCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CitfX0ZCU0RJRCgiJEZyZWVCU0QkIik7CisKKyNpbmNsdWRlICJuYW1lc3BhY2UuaCIKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGxpbWl0cy5oPgorI2luY2x1ZGUgInVuLW5hbWVzcGFjZS5oIgorCisjaW5jbHVkZSAibG9jYWwuaCIKKworRklMRSAqCitmb3Blbihjb25zdCBjaGFyICogX19yZXN0cmljdCBmaWxlLCBjb25zdCBjaGFyICogX19yZXN0cmljdCBtb2RlKQoreworCUZJTEUgKmZwOworCWludCBmOworCWludCBmbGFncywgb2ZsYWdzOworCisJaWYgKChmbGFncyA9IF9fc2ZsYWdzKG1vZGUsICZvZmxhZ3MpKSA9PSAwKQorCQlyZXR1cm4gKE5VTEwpOworCWlmICgoZnAgPSBfX3NmcCgpKSA9PSBOVUxMKQorCQlyZXR1cm4gKE5VTEwpOworCWlmICgoZiA9IF9vcGVuKGZpbGUsIG9mbGFncywgREVGRklMRU1PREUpKSA8IDApIHsKKwkJZnAtPl9mbGFncyA9IDA7CQkJLyogcmVsZWFzZSAqLworCQlyZXR1cm4gKE5VTEwpOworCX0KKwkvKgorCSAqIEZpbGUgZGVzY3JpcHRvcnMgYXJlIGEgZnVsbCBpbnQsIGJ1dCBfZmlsZSBpcyBvbmx5IGEgc2hvcnQuCisJICogSWYgd2UgZ2V0IGEgdmFsaWQgZmlsZSBkZXNjcmlwdG9yIHRoYXQgaXMgZ3JlYXRlciB0aGFuCisJICogU0hSVF9NQVgsIHRoZW4gdGhlIGZkIHdpbGwgZ2V0IHNpZ24tZXh0ZW5kZWQgaW50byBhbgorCSAqIGludmFsaWQgZmlsZSBkZXNjcmlwdG9yLiAgSGFuZGxlIHRoaXMgY2FzZSBieSBmYWlsaW5nIHRoZQorCSAqIG9wZW4uCisJICovCisJaWYgKGYgPiBTSFJUX01BWCkgeworCQlmcC0+X2ZsYWdzID0gMDsJCQkvKiByZWxlYXNlICovCisJCV9jbG9zZShmKTsKKwkJZXJybm8gPSBFTUZJTEU7CisJCXJldHVybiAoTlVMTCk7CisJfQorCWZwLT5fZmlsZSA9IGY7CisJZnAtPl9mbGFncyA9IGZsYWdzOworCWZwLT5fY29va2llID0gZnA7CisJZnAtPl9yZWFkID0gX19zcmVhZDsKKwlmcC0+X3dyaXRlID0gX19zd3JpdGU7CisJZnAtPl9zZWVrID0gX19zc2VlazsKKwlmcC0+X2Nsb3NlID0gX19zY2xvc2U7CisJLyoKKwkgKiBXaGVuIG9wZW5pbmcgaW4gYXBwZW5kIG1vZGUsIGV2ZW4gdGhvdWdoIHdlIHVzZSBPX0FQUEVORCwKKwkgKiB3ZSBuZWVkIHRvIHNlZWsgdG8gdGhlIGVuZCBzbyB0aGF0IGZ0ZWxsKCkgZ2V0cyB0aGUgcmlnaHQKKwkgKiBhbnN3ZXIuICBJZiB0aGUgdXNlciB0aGVuIGFsdGVycyB0aGUgc2VlayBwb2ludGVyLCBvcgorCSAqIHRoZSBmaWxlIGV4dGVuZHMsIHRoaXMgd2lsbCBmYWlsLCBidXQgdGhlcmUgaXMgbm90IG11Y2gKKwkgKiB3ZSBjYW4gZG8gYWJvdXQgdGhpcy4gIChXZSBjb3VsZCBzZXQgX19TQVBQIGFuZCBjaGVjayBpbgorCSAqIGZzZWVrIGFuZCBmdGVsbC4pCisJICovCisJaWYgKG9mbGFncyAmIE9fQVBQRU5EKQorCQkodm9pZClfc3NlZWsoZnAsIChmcG9zX3QpMCwgU0VFS19FTkQpOworCXJldHVybiAoZnApOworfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0ZGlvL2ZwdXJnZS5jIGIvbGliYy91cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0ZGlvL2ZwdXJnZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyMDViZGYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RkaW8vZnB1cmdlLmMKQEAgLTAsMCArMSw2OSBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKKyAqIENocmlzIFRvcmVrLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaWYgZGVmaW5lZChMSUJDX1NDQ1MpICYmICFkZWZpbmVkKGxpbnQpCitzdGF0aWMgY2hhciBzY2NzaWRbXSA9ICJAKCMpZnB1cmdlLmMJOC4xIChCZXJrZWxleSkgNi80LzkzIjsKKyNlbmRpZiAvKiBMSUJDX1NDQ1MgYW5kIG5vdCBsaW50ICovCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CitfX0ZCU0RJRCgiJEZyZWVCU0QkIik7CisKKyNpbmNsdWRlICJuYW1lc3BhY2UuaCIKKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSAidW4tbmFtZXNwYWNlLmgiCisjaW5jbHVkZSAibG9jYWwuaCIKKyNpbmNsdWRlICJsaWJjX3ByaXZhdGUuaCIKKworLyoKKyAqIGZwdXJnZTogbGlrZSBmZmx1c2gsIGJ1dCB3aXRob3V0IHdyaXRpbmcgYW55dGhpbmc6IGxlYXZlIHRoZQorICogZ2l2ZW4gRklMRSdzIGJ1ZmZlciBlbXB0eS4KKyAqLworaW50CitmcHVyZ2UoRklMRSAqZnApCit7CisJaW50IHJldHZhbDsKKwlGTE9DS0ZJTEUoZnApOworCWlmICghZnAtPl9mbGFncykgeworCQllcnJubyA9IEVCQURGOworCQlyZXR2YWwgPSBFT0Y7CisJfSBlbHNlIHsKKwkJaWYgKEhBU1VCKGZwKSkKKwkJCUZSRUVVQihmcCk7CisJCWZwLT5fcCA9IGZwLT5fYmYuX2Jhc2U7CisJCWZwLT5fciA9IDA7CisJCWZwLT5fdyA9IGZwLT5fZmxhZ3MgJiAoX19TTEJGfF9fU05CRnxfX1NSRCkgPyAwIDogZnAtPl9iZi5fc2l6ZTsKKwkJcmV0dmFsID0gMDsKKwl9CisJRlVOTE9DS0ZJTEUoZnApOworCXJldHVybiAocmV0dmFsKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdGRpby9mcHV0cy5jIGIvbGliYy91cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0ZGlvL2ZwdXRzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2I4ZjJjOQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdGRpby9mcHV0cy5jCkBAIC0wLDAgKzEsNjYgQEAKKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5CisgKiBDaHJpcyBUb3Jlay4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2lmIGRlZmluZWQoTElCQ19TQ0NTKSAmJiAhZGVmaW5lZChsaW50KQorc3RhdGljIGNoYXIgc2Njc2lkW10gPSAiQCgjKWZwdXRzLmMJOC4xIChCZXJrZWxleSkgNi80LzkzIjsKKyNlbmRpZiAvKiBMSUJDX1NDQ1MgYW5kIG5vdCBsaW50ICovCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CitfX0ZCU0RJRCgiJEZyZWVCU0QkIik7CisKKyNpbmNsdWRlICJuYW1lc3BhY2UuaCIKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgInVuLW5hbWVzcGFjZS5oIgorI2luY2x1ZGUgImZ2d3JpdGUuaCIKKyNpbmNsdWRlICJsaWJjX3ByaXZhdGUuaCIKKyNpbmNsdWRlICJsb2NhbC5oIgorCisvKgorICogV3JpdGUgdGhlIGdpdmVuIHN0cmluZyB0byB0aGUgZ2l2ZW4gZmlsZS4KKyAqLworaW50CitmcHV0cyhjb25zdCBjaGFyICogX19yZXN0cmljdCBzLCBGSUxFICogX19yZXN0cmljdCBmcCkKK3sKKwlpbnQgcmV0dmFsOworCXN0cnVjdCBfX3N1aW8gdWlvOworCXN0cnVjdCBfX3Npb3YgaW92OworCisJaW92Lmlvdl9iYXNlID0gKHZvaWQgKilzOworCWlvdi5pb3ZfbGVuID0gdWlvLnVpb19yZXNpZCA9IHN0cmxlbihzKTsKKwl1aW8udWlvX2lvdiA9ICZpb3Y7CisJdWlvLnVpb19pb3ZjbnQgPSAxOworCUZMT0NLRklMRShmcCk7CisJT1JJRU5UKGZwLCAtMSk7CisJcmV0dmFsID0gX19zZnZ3cml0ZShmcCwgJnVpbyk7CisJRlVOTE9DS0ZJTEUoZnApOworCXJldHVybiAocmV0dmFsKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdGRpby9mc2V0cG9zLmMgYi9saWJjL3Vwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RkaW8vZnNldHBvcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2YjhiNzgKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RkaW8vZnNldHBvcy5jCkBAIC0wLDAgKzEsNDkgQEAKKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5CisgKiBDaHJpcyBUb3Jlay4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2lmIGRlZmluZWQoTElCQ19TQ0NTKSAmJiAhZGVmaW5lZChsaW50KQorc3RhdGljIGNoYXIgc2Njc2lkW10gPSAiQCgjKWZzZXRwb3MuYwk4LjEgKEJlcmtlbGV5KSA2LzQvOTMiOworI2VuZGlmIC8qIExJQkNfU0NDUyBhbmQgbm90IGxpbnQgKi8KKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJTRCQiKTsKKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisKKy8qCisgKiBmc2V0cG9zOiBsaWtlIGZzZWVrLgorICovCitpbnQKK2ZzZXRwb3MoRklMRSAqaW9wLCBjb25zdCBmcG9zX3QgKnBvcykKK3sKKwlyZXR1cm4gKGZzZWVrbyhpb3AsIChvZmZfdCkqcG9zLCBTRUVLX1NFVCkpOworfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0ZGlvL2Z1bm9wZW4uYyBiL2xpYmMvdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdGRpby9mdW5vcGVuLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTgzZmU1MAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdGRpby9mdW5vcGVuLmMKQEAgLTAsMCArMSw3NiBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKKyAqIENocmlzIFRvcmVrLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaWYgZGVmaW5lZChMSUJDX1NDQ1MpICYmICFkZWZpbmVkKGxpbnQpCitzdGF0aWMgY2hhciBzY2NzaWRbXSA9ICJAKCMpZnVub3Blbi5jCTguMSAoQmVya2VsZXkpIDYvNC85MyI7CisjZW5kaWYgLyogTElCQ19TQ0NTIGFuZCBub3QgbGludCAqLworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorX19GQlNESUQoIiRGcmVlQlNEJCIpOworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorCisjaW5jbHVkZSAibG9jYWwuaCIKKworRklMRSAqCitmdW5vcGVuKGNvbnN0IHZvaWQgKmNvb2tpZSwKKwlpbnQgKCpyZWFkZm4pKHZvaWQgKiwgY2hhciAqLCBpbnQpLAorCWludCAoKndyaXRlZm4pKHZvaWQgKiwgY29uc3QgY2hhciAqLCBpbnQpLAorCWZwb3NfdCAoKnNlZWtmbikodm9pZCAqLCBmcG9zX3QsIGludCksCisJaW50ICgqY2xvc2Vmbikodm9pZCAqKSkKK3sKKwlGSUxFICpmcDsKKwlpbnQgZmxhZ3M7CisKKwlpZiAocmVhZGZuID09IE5VTEwpIHsKKwkJaWYgKHdyaXRlZm4gPT0gTlVMTCkgewkJLyogaWxsZWdhbCAqLworCQkJZXJybm8gPSBFSU5WQUw7CisJCQlyZXR1cm4gKE5VTEwpOworCQl9IGVsc2UKKwkJCWZsYWdzID0gX19TV1I7CQkvKiB3cml0ZSBvbmx5ICovCisJfSBlbHNlIHsKKwkJaWYgKHdyaXRlZm4gPT0gTlVMTCkKKwkJCWZsYWdzID0gX19TUkQ7CQkvKiByZWFkIG9ubHkgKi8KKwkJZWxzZQorCQkJZmxhZ3MgPSBfX1NSVzsJCS8qIHJlYWQtd3JpdGUgKi8KKwl9CisJaWYgKChmcCA9IF9fc2ZwKCkpID09IE5VTEwpCisJCXJldHVybiAoTlVMTCk7CisJZnAtPl9mbGFncyA9IGZsYWdzOworCWZwLT5fZmlsZSA9IC0xOworCWZwLT5fY29va2llID0gKHZvaWQgKiljb29raWU7CisJZnAtPl9yZWFkID0gcmVhZGZuOworCWZwLT5fd3JpdGUgPSB3cml0ZWZuOworCWZwLT5fc2VlayA9IHNlZWtmbjsKKwlmcC0+X2Nsb3NlID0gY2xvc2VmbjsKKwlyZXR1cm4gKGZwKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdGRpby9md2Fsay5jIGIvbGliYy91cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0ZGlvL2Z3YWxrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTUxODM3YgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdGRpby9md2Fsay5jCkBAIC0wLDAgKzEsNjUgQEAKKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5CisgKiBDaHJpcyBUb3Jlay4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2lmIGRlZmluZWQoTElCQ19TQ0NTKSAmJiAhZGVmaW5lZChsaW50KQorc3RhdGljIGNoYXIgc2Njc2lkW10gPSAiQCgjKWZ3YWxrLmMJOC4xIChCZXJrZWxleSkgNi80LzkzIjsKKyNlbmRpZiAvKiBMSUJDX1NDQ1MgYW5kIG5vdCBsaW50ICovCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CitfX0ZCU0RJRCgiJEZyZWVCU0QkIik7CisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgImxvY2FsLmgiCisjaW5jbHVkZSAiZ2x1ZS5oIgorCitpbnQKK19md2FsayhpbnQgKCpmdW5jdGlvbikoRklMRSAqKSkKK3sKKwlGSUxFICpmcDsKKwlpbnQgbiwgcmV0OworCXN0cnVjdCBnbHVlICpnOworCisJcmV0ID0gMDsKKwkvKgorCSAqIEl0IHNob3VsZCBiZSBzYWZlIHRvIHdhbGsgdGhlIGxpc3Qgd2l0aG91dCBsb2NraW5nIGl0OworCSAqIG5ldyBub2RlcyBhcmUgb25seSBhZGRlZCB0byB0aGUgZW5kIGFuZCBub25lIGFyZSBldmVyCisJICogcmVtb3ZlZC4KKwkgKgorCSAqIEF2b2lkIGxvY2tpbmcgdGhpcyBsaXN0IHdoaWxlIHdhbGtpbmcgaXQgb3IgZWxzZSB5b3Ugd2lsbAorCSAqIGludHJvZHVjZSBhIHBvdGVudGlhbCBkZWFkbG9jayBpbiBbYXQgbGVhc3RdIHJlZmlsbC5jLgorCSAqLworCWZvciAoZyA9ICZfX3NnbHVlOyBnICE9IE5VTEw7IGcgPSBnLT5uZXh0KQorCQlmb3IgKGZwID0gZy0+aW9icywgbiA9IGctPm5pb2JzOyAtLW4gPj0gMDsgZnArKykKKwkJCWlmICgoZnAtPl9mbGFncyAhPSAwKSAmJiAoKGZwLT5fZmxhZ3MgJiBfX1NJR04pID09IDApKQorCQkJCXJldCB8PSAoKmZ1bmN0aW9uKShmcCk7CisJcmV0dXJuIChyZXQpOworfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0ZGlvL2Z3cml0ZS5jIGIvbGliYy91cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0ZGlvL2Z3cml0ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwN2QzNjIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RkaW8vZndyaXRlLmMKQEAgLTAsMCArMSw5NiBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKKyAqIENocmlzIFRvcmVrLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaWYgZGVmaW5lZChMSUJDX1NDQ1MpICYmICFkZWZpbmVkKGxpbnQpCitzdGF0aWMgY2hhciBzY2NzaWRbXSA9ICJAKCMpZndyaXRlLmMJOC4xIChCZXJrZWxleSkgNi80LzkzIjsKKyNlbmRpZiAvKiBMSUJDX1NDQ1MgYW5kIG5vdCBsaW50ICovCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CitfX0ZCU0RJRCgiJEZyZWVCU0QkIik7CisKKyNpbmNsdWRlICJuYW1lc3BhY2UuaCIKKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSAidW4tbmFtZXNwYWNlLmgiCisjaW5jbHVkZSAibG9jYWwuaCIKKyNpbmNsdWRlICJmdndyaXRlLmgiCisjaW5jbHVkZSAibGliY19wcml2YXRlLmgiCisKKy8qCisgKiBXcml0ZSBgY291bnQnIG9iamVjdHMgKGVhY2ggc2l6ZSBgc2l6ZScpIGZyb20gbWVtb3J5IHRvIHRoZSBnaXZlbiBmaWxlLgorICogUmV0dXJuIHRoZSBudW1iZXIgb2Ygd2hvbGUgb2JqZWN0cyB3cml0dGVuLgorICovCitzaXplX3QKK2Z3cml0ZShjb25zdCB2b2lkICogX19yZXN0cmljdCBidWYsIHNpemVfdCBzaXplLCBzaXplX3QgY291bnQsIEZJTEUgKiBfX3Jlc3RyaWN0IGZwKQoreworCXNpemVfdCBuOworCXN0cnVjdCBfX3N1aW8gdWlvOworCXN0cnVjdCBfX3Npb3YgaW92OworCisJLyoKKwkgKiBBTlNJIGFuZCBTVVN2MiByZXF1aXJlIGEgcmV0dXJuIHZhbHVlIG9mIDAgaWYgc2l6ZSBvciBjb3VudCBhcmUgMC4KKwkgKi8KKwlpZiAoKGNvdW50ID09IDApIHx8IChzaXplID09IDApKQorCQlyZXR1cm4gKDApOworCisJLyoKKwkgKiBDaGVjayBmb3IgaW50ZWdlciBvdmVyZmxvdy4gIEFzIGFuIG9wdGltaXphdGlvbiwgZmlyc3QgY2hlY2sgdGhhdAorCSAqIGF0IGxlYXN0IG9uZSBvZiB7Y291bnQsIHNpemV9IGlzIGF0IGxlYXN0IDJeMTYsIHNpbmNlIGlmIGJvdGgKKwkgKiB2YWx1ZXMgYXJlIGxlc3MgdGhhbiB0aGF0LCB0aGVpciBwcm9kdWN0IGNhbid0IHBvc3NpYmxlIG92ZXJmbG93CisJICogKHNpemVfdCBpcyBhbHdheXMgYXQgbGVhc3QgMzIgYml0cyBvbiBGcmVlQlNEKS4KKwkgKi8KKwlpZiAoKChjb3VudCB8IHNpemUpID4gMHhGRkZGKSAmJgorCSAgICAoY291bnQgPiBTSVpFX01BWCAvIHNpemUpKSB7CisJCWVycm5vID0gRUlOVkFMOworCQlmcC0+X2ZsYWdzIHw9IF9fU0VSUjsKKwkJcmV0dXJuICgwKTsKKwl9CisKKwluID0gY291bnQgKiBzaXplOworCisJaW92Lmlvdl9iYXNlID0gKHZvaWQgKilidWY7CisJdWlvLnVpb19yZXNpZCA9IGlvdi5pb3ZfbGVuID0gbjsKKwl1aW8udWlvX2lvdiA9ICZpb3Y7CisJdWlvLnVpb19pb3ZjbnQgPSAxOworCisJRkxPQ0tGSUxFKGZwKTsKKwlPUklFTlQoZnAsIC0xKTsKKwkvKgorCSAqIFRoZSB1c3VhbCBjYXNlIGlzIHN1Y2Nlc3MgKF9fc2Z2d3JpdGUgcmV0dXJucyAwKTsKKwkgKiBza2lwIHRoZSBkaXZpZGUgaWYgdGhpcyBoYXBwZW5zLCBzaW5jZSBkaXZpZGVzIGFyZQorCSAqIGdlbmVyYWxseSBzbG93IGFuZCBzaW5jZSB0aGlzIG9jY3VycyB3aGVuZXZlciBzaXplPT0wLgorCSAqLworCWlmIChfX3NmdndyaXRlKGZwLCAmdWlvKSAhPSAwKQorCSAgICBjb3VudCA9IChuIC0gdWlvLnVpb19yZXNpZCkgLyBzaXplOworCUZVTkxPQ0tGSUxFKGZwKTsKKwlyZXR1cm4gKGNvdW50KTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdGRpby9nZXRjLmMgYi9saWJjL3Vwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RkaW8vZ2V0Yy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5NjNjOGMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RkaW8vZ2V0Yy5jCkBAIC0wLDAgKzEsNjUgQEAKKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5CisgKiBDaHJpcyBUb3Jlay4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2lmIGRlZmluZWQoTElCQ19TQ0NTKSAmJiAhZGVmaW5lZChsaW50KQorc3RhdGljIGNoYXIgc2Njc2lkW10gPSAiQCgjKWdldGMuYwk4LjEgKEJlcmtlbGV5KSA2LzQvOTMiOworI2VuZGlmIC8qIExJQkNfU0NDUyBhbmQgbm90IGxpbnQgKi8KKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJTRCQiKTsKKworI2luY2x1ZGUgIm5hbWVzcGFjZS5oIgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSAidW4tbmFtZXNwYWNlLmgiCisjaW5jbHVkZSAibGliY19wcml2YXRlLmgiCisjaW5jbHVkZSAibG9jYWwuaCIKKworI3VuZGVmIGdldGMKKyN1bmRlZiBnZXRjX3VubG9ja2VkCisKK2ludAorZ2V0YyhGSUxFICpmcCkKK3sKKwlpbnQgcmV0dmFsOworCUZMT0NLRklMRShmcCk7CisJLyogT3JpZW50YXRpb24gc2V0IGJ5IF9fc2dldGMoKSB3aGVuIGJ1ZmZlciBpcyBlbXB0eS4gKi8KKwkvKiBPUklFTlQoZnAsIC0xKTsgKi8KKwlyZXR2YWwgPSBfX3NnZXRjKGZwKTsKKwlGVU5MT0NLRklMRShmcCk7CisJcmV0dXJuIChyZXR2YWwpOworfQorCitpbnQKK2dldGNfdW5sb2NrZWQoRklMRSAqZnApCit7CisKKwlyZXR1cm4gKF9fc2dldGMoZnApKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdGRpby9nZXRjaGFyLmMgYi9saWJjL3Vwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RkaW8vZ2V0Y2hhci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxMDQwYmMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RkaW8vZ2V0Y2hhci5jCkBAIC0wLDAgKzEsNjggQEAKKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5CisgKiBDaHJpcyBUb3Jlay4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2lmIGRlZmluZWQoTElCQ19TQ0NTKSAmJiAhZGVmaW5lZChsaW50KQorc3RhdGljIGNoYXIgc2Njc2lkW10gPSAiQCgjKWdldGNoYXIuYwk4LjEgKEJlcmtlbGV5KSA2LzQvOTMiOworI2VuZGlmIC8qIExJQkNfU0NDUyBhbmQgbm90IGxpbnQgKi8KKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJTRCQiKTsKKworLyoKKyAqIEEgc3Vicm91dGluZSB2ZXJzaW9uIG9mIHRoZSBtYWNybyBnZXRjaGFyLgorICovCisjaW5jbHVkZSAibmFtZXNwYWNlLmgiCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlICJ1bi1uYW1lc3BhY2UuaCIKKyNpbmNsdWRlICJsb2NhbC5oIgorI2luY2x1ZGUgImxpYmNfcHJpdmF0ZS5oIgorCisjdW5kZWYgZ2V0Y2hhcgorI3VuZGVmIGdldGNoYXJfdW5sb2NrZWQKKworaW50CitnZXRjaGFyKCkKK3sKKwlpbnQgcmV0dmFsOworCUZMT0NLRklMRShzdGRpbik7CisJLyogT3JpZW50YXRpb24gc2V0IGJ5IF9fc2dldGMoKSB3aGVuIGJ1ZmZlciBpcyBlbXB0eS4gKi8KKwkvKiBPUklFTlQoc3RkaW4sIC0xKTsgKi8KKwlyZXR2YWwgPSBfX3NnZXRjKHN0ZGluKTsKKwlGVU5MT0NLRklMRShzdGRpbik7CisJcmV0dXJuIChyZXR2YWwpOworfQorCitpbnQKK2dldGNoYXJfdW5sb2NrZWQodm9pZCkKK3sKKworCXJldHVybiAoX19zZ2V0YyhzdGRpbikpOworfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0ZGlvL21ha2VidWYuYyBiL2xpYmMvdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdGRpby9tYWtlYnVmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTkyMDg3ZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdGRpby9tYWtlYnVmLmMKQEAgLTAsMCArMSwxMTYgQEAKKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5CisgKiBDaHJpcyBUb3Jlay4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2lmIGRlZmluZWQoTElCQ19TQ0NTKSAmJiAhZGVmaW5lZChsaW50KQorc3RhdGljIGNoYXIgc2Njc2lkW10gPSAiQCgjKW1ha2VidWYuYwk4LjEgKEJlcmtlbGV5KSA2LzQvOTMiOworI2VuZGlmIC8qIExJQkNfU0NDUyBhbmQgbm90IGxpbnQgKi8KKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJTRCQiKTsKKworI2luY2x1ZGUgIm5hbWVzcGFjZS5oIgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlICJ1bi1uYW1lc3BhY2UuaCIKKworI2luY2x1ZGUgImxpYmNfcHJpdmF0ZS5oIgorI2luY2x1ZGUgImxvY2FsLmgiCisKKy8qCisgKiBBbGxvY2F0ZSBhIGZpbGUgYnVmZmVyLCBvciBzd2l0Y2ggdG8gdW5idWZmZXJlZCBJL08uCisgKiBQZXIgdGhlIEFOU0kgQyBzdGFuZGFyZCwgQUxMIHR0eSBkZXZpY2VzIGRlZmF1bHQgdG8gbGluZSBidWZmZXJlZC4KKyAqCisgKiBBcyBhIHNpZGUgZWZmZWN0LCB3ZSBzZXQgX19TT1BUIG9yIF9fU05QVCAoZW4vZGlzLWFibGUgZnNlZWsKKyAqIG9wdGltaXNhdGlvbikgcmlnaHQgYWZ0ZXIgdGhlIF9mc3RhdCgpIHRoYXQgZmluZHMgdGhlIGJ1ZmZlciBzaXplLgorICovCit2b2lkCitfX3NtYWtlYnVmKEZJTEUgKmZwKQoreworCXZvaWQgKnA7CisJaW50IGZsYWdzOworCXNpemVfdCBzaXplOworCWludCBjb3VsZGJldHR5OworCisJaWYgKGZwLT5fZmxhZ3MgJiBfX1NOQkYpIHsKKwkJZnAtPl9iZi5fYmFzZSA9IGZwLT5fcCA9IGZwLT5fbmJ1ZjsKKwkJZnAtPl9iZi5fc2l6ZSA9IDE7CisJCXJldHVybjsKKwl9CisJZmxhZ3MgPSBfX3N3aGF0YnVmKGZwLCAmc2l6ZSwgJmNvdWxkYmV0dHkpOworCWlmICgocCA9IG1hbGxvYyhzaXplKSkgPT0gTlVMTCkgeworCQlmcC0+X2ZsYWdzIHw9IF9fU05CRjsKKwkJZnAtPl9iZi5fYmFzZSA9IGZwLT5fcCA9IGZwLT5fbmJ1ZjsKKwkJZnAtPl9iZi5fc2l6ZSA9IDE7CisJCXJldHVybjsKKwl9CisJX19jbGVhbnVwID0gX2NsZWFudXA7CisJZmxhZ3MgfD0gX19TTUJGOworCWZwLT5fYmYuX2Jhc2UgPSBmcC0+X3AgPSBwOworCWZwLT5fYmYuX3NpemUgPSBzaXplOworCWlmIChjb3VsZGJldHR5ICYmIGlzYXR0eShmcC0+X2ZpbGUpKQorCQlmbGFncyB8PSBfX1NMQkY7CisJZnAtPl9mbGFncyB8PSBmbGFnczsKK30KKworLyoKKyAqIEludGVybmFsIHJvdXRpbmUgdG8gZGV0ZXJtaW5lIGBwcm9wZXInIGJ1ZmZlcmluZyBmb3IgYSBmaWxlLgorICovCitpbnQKK19fc3doYXRidWYoRklMRSAqZnAsIHNpemVfdCAqYnVmc2l6ZSwgaW50ICpjb3VsZGJldHR5KQoreworCXN0cnVjdCBzdGF0IHN0OworCisJaWYgKGZwLT5fZmlsZSA8IDAgfHwgX2ZzdGF0KGZwLT5fZmlsZSwgJnN0KSA8IDApIHsKKwkJKmNvdWxkYmV0dHkgPSAwOworCQkqYnVmc2l6ZSA9IEJVRlNJWjsKKwkJcmV0dXJuIChfX1NOUFQpOworCX0KKworCS8qIGNvdWxkIGJlIGEgdHR5IGlmZiBpdCBpcyBhIGNoYXJhY3RlciBkZXZpY2UgKi8KKwkqY291bGRiZXR0eSA9IChzdC5zdF9tb2RlICYgU19JRk1UKSA9PSBTX0lGQ0hSOworCWlmIChzdC5zdF9ibGtzaXplIDw9IDApIHsKKwkJKmJ1ZnNpemUgPSBCVUZTSVo7CisJCXJldHVybiAoX19TTlBUKTsKKwl9CisKKwkvKgorCSAqIE9wdGltaXNlIGZzZWVrKCkgb25seSBpZiBpdCBpcyBhIHJlZ3VsYXIgZmlsZS4gIChUaGUgdGVzdCBmb3IKKwkgKiBfX3NzZWVrIGlzIG1haW5seSBwYXJhbm9pYS4pICBJdCBpcyBzYWZlIHRvIHNldCBfYmxrc2l6ZQorCSAqIHVuY29uZGl0aW9uYWxseTsgaXQgd2lsbCBvbmx5IGJlIHVzZWQgaWYgX19TT1BUIGlzIGFsc28gc2V0LgorCSAqLworCSpidWZzaXplID0gc3Quc3RfYmxrc2l6ZTsKKwlmcC0+X2Jsa3NpemUgPSBzdC5zdF9ibGtzaXplOworCXJldHVybiAoKHN0LnN0X21vZGUgJiBTX0lGTVQpID09IFNfSUZSRUcgJiYgZnAtPl9zZWVrID09IF9fc3NlZWsgPworCSAgICBfX1NPUFQgOiBfX1NOUFQpOworfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0ZGlvL21rdGVtcC5jIGIvbGliYy91cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0ZGlvL21rdGVtcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4NzgzZGQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RkaW8vbWt0ZW1wLmMKQEAgLTAsMCArMSwxOTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDE5ODcsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaWYgZGVmaW5lZChMSUJDX1NDQ1MpICYmICFkZWZpbmVkKGxpbnQpCitzdGF0aWMgY2hhciBzY2NzaWRbXSA9ICJAKCMpbWt0ZW1wLmMJOC4xIChCZXJrZWxleSkgNi80LzkzIjsKKyNlbmRpZiAvKiBMSUJDX1NDQ1MgYW5kIG5vdCBsaW50ICovCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CitfX0ZCU0RJRCgiJEZyZWVCU0QkIik7CisKKyNpbmNsdWRlICJuYW1lc3BhY2UuaCIKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSAidW4tbmFtZXNwYWNlLmgiCisKK2NoYXIgKl9ta3RlbXAoY2hhciAqKTsKKworc3RhdGljIGludCBfZ2V0dGVtcChjaGFyICosIGludCAqLCBpbnQsIGludCk7CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHBhZGNoYXJbXSA9CisiMDEyMzQ1Njc4OUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoiOworCitpbnQKK21rc3RlbXBzKGNoYXIgKnBhdGgsIGludCBzbGVuKQoreworCWludCBmZDsKKworCXJldHVybiAoX2dldHRlbXAocGF0aCwgJmZkLCAwLCBzbGVuKSA/IGZkIDogLTEpOworfQorCitpbnQKK21rc3RlbXAoY2hhciAqcGF0aCkKK3sKKwlpbnQgZmQ7CisKKwlyZXR1cm4gKF9nZXR0ZW1wKHBhdGgsICZmZCwgMCwgMCkgPyBmZCA6IC0xKTsKK30KKworY2hhciAqCitta2R0ZW1wKGNoYXIgKnBhdGgpCit7CisJcmV0dXJuIChfZ2V0dGVtcChwYXRoLCAoaW50ICopTlVMTCwgMSwgMCkgPyBwYXRoIDogKGNoYXIgKilOVUxMKTsKK30KKworY2hhciAqCitfbWt0ZW1wKGNoYXIgKnBhdGgpCit7CisJcmV0dXJuIChfZ2V0dGVtcChwYXRoLCAoaW50ICopTlVMTCwgMCwgMCkgPyBwYXRoIDogKGNoYXIgKilOVUxMKTsKK30KKworX193YXJuX3JlZmVyZW5jZXMobWt0ZW1wLAorICAgICJ3YXJuaW5nOiBta3RlbXAoKSBwb3NzaWJseSB1c2VkIHVuc2FmZWx5OyBjb25zaWRlciB1c2luZyBta3N0ZW1wKCkiKTsKKworY2hhciAqCitta3RlbXAoY2hhciAqcGF0aCkKK3sKKwlyZXR1cm4gKF9ta3RlbXAocGF0aCkpOworfQorCitzdGF0aWMgaW50CitfZ2V0dGVtcChjaGFyICpwYXRoLCBpbnQgKmRvb3BlbiwgaW50IGRvbWtkaXIsIGludCBzbGVuKQoreworCWNoYXIgKnN0YXJ0LCAqdHJ2LCAqc3VmZnAsICpjYXJyeXA7CisJY2hhciAqcGFkOworCXN0cnVjdCBzdGF0IHNidWY7CisJaW50IHJ2YWw7CisJdWludDMyX3QgcmFuZDsKKwljaGFyIGNhcnJ5YnVmW01BWFBBVEhMRU5dOworCisJaWYgKChkb29wZW4gIT0gTlVMTCAmJiBkb21rZGlyKSB8fCBzbGVuIDwgMCkgeworCQllcnJubyA9IEVJTlZBTDsKKwkJcmV0dXJuICgwKTsKKwl9CisKKwlmb3IgKHRydiA9IHBhdGg7ICp0cnYgIT0gJ1wwJzsgKyt0cnYpCisJCTsKKwlpZiAodHJ2IC0gcGF0aCA+PSBNQVhQQVRITEVOKSB7CisJCWVycm5vID0gRU5BTUVUT09MT05HOworCQlyZXR1cm4gKDApOworCX0KKwl0cnYgLT0gc2xlbjsKKwlzdWZmcCA9IHRydjsKKwktLXRydjsKKwlpZiAodHJ2IDwgcGF0aCB8fCBOVUxMICE9IHN0cmNocihzdWZmcCwgJy8nKSkgeworCQllcnJubyA9IEVJTlZBTDsKKwkJcmV0dXJuICgwKTsKKwl9CisKKwkvKiBGaWxsIHNwYWNlIHdpdGggcmFuZG9tIGNoYXJhY3RlcnMgKi8KKwl3aGlsZSAodHJ2ID49IHBhdGggJiYgKnRydiA9PSAnWCcpIHsKKwkJcmFuZCA9IGFyYzRyYW5kb21fdW5pZm9ybShzaXplb2YocGFkY2hhcikgLSAxKTsKKwkJKnRydi0tID0gcGFkY2hhcltyYW5kXTsKKwl9CisJc3RhcnQgPSB0cnYgKyAxOworCisJLyogc2F2ZSBmaXJzdCBjb21iaW5hdGlvbiBvZiByYW5kb20gY2hhcmFjdGVycyAqLworCW1lbWNweShjYXJyeWJ1Ziwgc3RhcnQsIHN1ZmZwIC0gc3RhcnQpOworCisJLyoKKwkgKiBjaGVjayB0aGUgdGFyZ2V0IGRpcmVjdG9yeS4KKwkgKi8KKwlpZiAoZG9vcGVuICE9IE5VTEwgfHwgZG9ta2RpcikgeworCQlmb3IgKDsgdHJ2ID4gcGF0aDsgLS10cnYpIHsKKwkJCWlmICgqdHJ2ID09ICcvJykgeworCQkJCSp0cnYgPSAnXDAnOworCQkJCXJ2YWwgPSBzdGF0KHBhdGgsICZzYnVmKTsKKwkJCQkqdHJ2ID0gJy8nOworCQkJCWlmIChydmFsICE9IDApCisJCQkJCXJldHVybiAoMCk7CisJCQkJaWYgKCFTX0lTRElSKHNidWYuc3RfbW9kZSkpIHsKKwkJCQkJZXJybm8gPSBFTk9URElSOworCQkJCQlyZXR1cm4gKDApOworCQkJCX0KKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKworCWZvciAoOzspIHsKKwkJaWYgKGRvb3BlbikgeworCQkJaWYgKCgqZG9vcGVuID0KKwkJCSAgICBfb3BlbihwYXRoLCBPX0NSRUFUfE9fRVhDTHxPX1JEV1IsIDA2MDApKSA+PSAwKQorCQkJCXJldHVybiAoMSk7CisJCQlpZiAoZXJybm8gIT0gRUVYSVNUKQorCQkJCXJldHVybiAoMCk7CisJCX0gZWxzZSBpZiAoZG9ta2RpcikgeworCQkJaWYgKG1rZGlyKHBhdGgsIDA3MDApID09IDApCisJCQkJcmV0dXJuICgxKTsKKwkJCWlmIChlcnJubyAhPSBFRVhJU1QpCisJCQkJcmV0dXJuICgwKTsKKwkJfSBlbHNlIGlmIChsc3RhdChwYXRoLCAmc2J1ZikpCisJCQlyZXR1cm4gKGVycm5vID09IEVOT0VOVCk7CisKKwkJLyogSWYgd2UgaGF2ZSBhIGNvbGxpc2lvbiwgY3ljbGUgdGhyb3VnaCB0aGUgc3BhY2Ugb2YgZmlsZW5hbWVzICovCisJCWZvciAodHJ2ID0gc3RhcnQsIGNhcnJ5cCA9IGNhcnJ5YnVmOzspIHsKKwkJCS8qIGhhdmUgd2UgdHJpZWQgYWxsIHBvc3NpYmxlIHBlcm11dGF0aW9ucz8gKi8KKwkJCWlmICh0cnYgPT0gc3VmZnApCisJCQkJcmV0dXJuICgwKTsgLyogeWVzIC0gZXhpdCB3aXRoIEVFWElTVCAqLworCQkJcGFkID0gc3RyY2hyKHBhZGNoYXIsICp0cnYpOworCQkJaWYgKHBhZCA9PSBOVUxMKSB7CisJCQkJLyogdGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuICovCisJCQkJZXJybm8gPSBFSU87CisJCQkJcmV0dXJuICgwKTsKKwkJCX0KKwkJCS8qIGluY3JlbWVudCBjaGFyYWN0ZXIgKi8KKwkJCSp0cnYgPSAoKisrcGFkID09ICdcMCcpID8gcGFkY2hhclswXSA6ICpwYWQ7CisJCQkvKiBjYXJyeSB0byBuZXh0IHBvc2l0aW9uPyAqLworCQkJaWYgKCp0cnYgPT0gKmNhcnJ5cCkgeworCQkJCS8qIGluY3JlbWVudCBwb3NpdGlvbiBhbmQgbG9vcCAqLworCQkJCSsrdHJ2OworCQkJCSsrY2FycnlwOworCQkJfSBlbHNlIHsKKwkJCQkvKiB0cnkgd2l0aCBuZXcgbmFtZSAqLworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorCS8qTk9UUkVBQ0hFRCovCit9CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RkaW8vcHV0Yy5jIGIvbGliYy91cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0ZGlvL3B1dGMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYWZmZWNlCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0ZGlvL3B1dGMuYwpAQCAtMCwwICsxLDY1IEBACisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQorICogQ2hyaXMgVG9yZWsuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpZiBkZWZpbmVkKExJQkNfU0NDUykgJiYgIWRlZmluZWQobGludCkKK3N0YXRpYyBjaGFyIHNjY3NpZFtdID0gIkAoIylwdXRjLmMJOC4xIChCZXJrZWxleSkgNi80LzkzIjsKKyNlbmRpZiAvKiBMSUJDX1NDQ1MgYW5kIG5vdCBsaW50ICovCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CitfX0ZCU0RJRCgiJEZyZWVCU0QkIik7CisKKyNpbmNsdWRlICJuYW1lc3BhY2UuaCIKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgInVuLW5hbWVzcGFjZS5oIgorI2luY2x1ZGUgImxvY2FsLmgiCisjaW5jbHVkZSAibGliY19wcml2YXRlLmgiCisKKyN1bmRlZiBwdXRjCisjdW5kZWYgcHV0Y191bmxvY2tlZAorCitpbnQKK3B1dGMoaW50IGMsIEZJTEUgKmZwKQoreworCWludCByZXR2YWw7CisJRkxPQ0tGSUxFKGZwKTsKKwkvKiBPcmllbnRhdGlvbiBzZXQgYnkgX19zcHV0YygpIHdoZW4gYnVmZmVyIGlzIGZ1bGwuICovCisJLyogT1JJRU5UKGZwLCAtMSk7ICovCisJcmV0dmFsID0gX19zcHV0YyhjLCBmcCk7CisJRlVOTE9DS0ZJTEUoZnApOworCXJldHVybiAocmV0dmFsKTsKK30KKworaW50CitwdXRjX3VubG9ja2VkKGludCBjaCwgRklMRSAqZnApCit7CisKKwlyZXR1cm4gKF9fc3B1dGMoY2gsIGZwKSk7Cit9CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RkaW8vcHV0Y2hhci5jIGIvbGliYy91cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0ZGlvL3B1dGNoYXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NTYxNTU5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0ZGlvL3B1dGNoYXIuYwpAQCAtMCwwICsxLDcwIEBACisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQorICogQ2hyaXMgVG9yZWsuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpZiBkZWZpbmVkKExJQkNfU0NDUykgJiYgIWRlZmluZWQobGludCkKK3N0YXRpYyBjaGFyIHNjY3NpZFtdID0gIkAoIylwdXRjaGFyLmMJOC4xIChCZXJrZWxleSkgNi80LzkzIjsKKyNlbmRpZiAvKiBMSUJDX1NDQ1MgYW5kIG5vdCBsaW50ICovCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CitfX0ZCU0RJRCgiJEZyZWVCU0QkIik7CisKKyNpbmNsdWRlICJuYW1lc3BhY2UuaCIKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgInVuLW5hbWVzcGFjZS5oIgorI2luY2x1ZGUgImxvY2FsLmgiCisjaW5jbHVkZSAibGliY19wcml2YXRlLmgiCisKKyN1bmRlZiBwdXRjaGFyCisjdW5kZWYgcHV0Y2hhcl91bmxvY2tlZAorCisvKgorICogQSBzdWJyb3V0aW5lIHZlcnNpb24gb2YgdGhlIG1hY3JvIHB1dGNoYXIKKyAqLworaW50CitwdXRjaGFyKGludCBjKQoreworCWludCByZXR2YWw7CisJRklMRSAqc28gPSBzdGRvdXQ7CisKKwlGTE9DS0ZJTEUoc28pOworCS8qIE9yaWVudGF0aW9uIHNldCBieSBfX3NwdXRjKCkgd2hlbiBidWZmZXIgaXMgZnVsbC4gKi8KKwkvKiBPUklFTlQoc28sIC0xKTsgKi8KKwlyZXR2YWwgPSBfX3NwdXRjKGMsIHNvKTsKKwlGVU5MT0NLRklMRShzbyk7CisJcmV0dXJuIChyZXR2YWwpOworfQorCitpbnQKK3B1dGNoYXJfdW5sb2NrZWQoaW50IGNoKQoreworCisJcmV0dXJuIChfX3NwdXRjKGNoLCBzdGRvdXQpKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdGRpby9wdXRzLmMgYi9saWJjL3Vwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RkaW8vcHV0cy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlZTdmYzEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RkaW8vcHV0cy5jCkBAIC0wLDAgKzEsNzAgQEAKKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5CisgKiBDaHJpcyBUb3Jlay4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2lmIGRlZmluZWQoTElCQ19TQ0NTKSAmJiAhZGVmaW5lZChsaW50KQorc3RhdGljIGNoYXIgc2Njc2lkW10gPSAiQCgjKXB1dHMuYwk4LjEgKEJlcmtlbGV5KSA2LzQvOTMiOworI2VuZGlmIC8qIExJQkNfU0NDUyBhbmQgbm90IGxpbnQgKi8KKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJTRCQiKTsKKworI2luY2x1ZGUgIm5hbWVzcGFjZS5oIgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSAidW4tbmFtZXNwYWNlLmgiCisjaW5jbHVkZSAiZnZ3cml0ZS5oIgorI2luY2x1ZGUgImxpYmNfcHJpdmF0ZS5oIgorI2luY2x1ZGUgImxvY2FsLmgiCisKKy8qCisgKiBXcml0ZSB0aGUgZ2l2ZW4gc3RyaW5nIHRvIHN0ZG91dCwgYXBwZW5kaW5nIGEgbmV3bGluZS4KKyAqLworaW50CitwdXRzKGNoYXIgY29uc3QgKnMpCit7CisJaW50IHJldHZhbDsKKwlzaXplX3QgYyA9IHN0cmxlbihzKTsKKwlzdHJ1Y3QgX19zdWlvIHVpbzsKKwlzdHJ1Y3QgX19zaW92IGlvdlsyXTsKKworCWlvdlswXS5pb3ZfYmFzZSA9ICh2b2lkICopczsKKwlpb3ZbMF0uaW92X2xlbiA9IGM7CisJaW92WzFdLmlvdl9iYXNlID0gIlxuIjsKKwlpb3ZbMV0uaW92X2xlbiA9IDE7CisJdWlvLnVpb19yZXNpZCA9IGMgKyAxOworCXVpby51aW9faW92ID0gJmlvdlswXTsKKwl1aW8udWlvX2lvdmNudCA9IDI7CisJRkxPQ0tGSUxFKHN0ZG91dCk7CisJT1JJRU5UKHN0ZG91dCwgLTEpOworCXJldHZhbCA9IF9fc2Z2d3JpdGUoc3Rkb3V0LCAmdWlvKSA/IEVPRiA6ICdcbic7CisJRlVOTE9DS0ZJTEUoc3Rkb3V0KTsKKwlyZXR1cm4gKHJldHZhbCk7Cit9CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RkaW8vcHV0dy5jIGIvbGliYy91cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0ZGlvL3B1dHcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMzYwY2FmCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0ZGlvL3B1dHcuYwpAQCAtMCwwICsxLDYwIEBACisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQorICogQ2hyaXMgVG9yZWsuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpZiBkZWZpbmVkKExJQkNfU0NDUykgJiYgIWRlZmluZWQobGludCkKK3N0YXRpYyBjaGFyIHNjY3NpZFtdID0gIkAoIylwdXR3LmMJOC4xIChCZXJrZWxleSkgNi80LzkzIjsKKyNlbmRpZiAvKiBMSUJDX1NDQ1MgYW5kIG5vdCBsaW50ICovCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CitfX0ZCU0RJRCgiJEZyZWVCU0QkIik7CisKKyNpbmNsdWRlICJuYW1lc3BhY2UuaCIKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgInVuLW5hbWVzcGFjZS5oIgorI2luY2x1ZGUgImZ2d3JpdGUuaCIKKyNpbmNsdWRlICJsaWJjX3ByaXZhdGUuaCIKKworaW50CitwdXR3KGludCB3LCBGSUxFICpmcCkKK3sKKwlpbnQgcmV0dmFsOworCXN0cnVjdCBfX3N1aW8gdWlvOworCXN0cnVjdCBfX3Npb3YgaW92OworCisJaW92Lmlvdl9iYXNlID0gJnc7CisJaW92Lmlvdl9sZW4gPSB1aW8udWlvX3Jlc2lkID0gc2l6ZW9mKHcpOworCXVpby51aW9faW92ID0gJmlvdjsKKwl1aW8udWlvX2lvdmNudCA9IDE7CisJRkxPQ0tGSUxFKGZwKTsKKwlyZXR2YWwgPSBfX3NmdndyaXRlKGZwLCAmdWlvKTsKKwlGVU5MT0NLRklMRShmcCk7CisJcmV0dXJuIChyZXR2YWwpOworfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0ZGlvL3JlbW92ZS5jIGIvbGliYy91cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0ZGlvL3JlbW92ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlOTg0YmEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RkaW8vcmVtb3ZlLmMKQEAgLTAsMCArMSw1NCBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKKyAqIENocmlzIFRvcmVrLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaWYgZGVmaW5lZChMSUJDX1NDQ1MpICYmICFkZWZpbmVkKGxpbnQpCitzdGF0aWMgY2hhciBzY2NzaWRbXSA9ICJAKCMpcmVtb3ZlLmMJOC4xIChCZXJrZWxleSkgNi80LzkzIjsKKyNlbmRpZiAvKiBMSUJDX1NDQ1MgYW5kIG5vdCBsaW50ICovCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CitfX0ZCU0RJRCgiJEZyZWVCU0QkIik7CisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisKK2ludAorcmVtb3ZlKGNvbnN0IGNoYXIgKmZpbGUpCit7CisJc3RydWN0IHN0YXQgc2I7CisKKwlpZiAobHN0YXQoZmlsZSwgJnNiKSA8IDApCisJCXJldHVybiAoLTEpOworCWlmIChTX0lTRElSKHNiLnN0X21vZGUpKQorCQlyZXR1cm4gKHJtZGlyKGZpbGUpKTsKKwlyZXR1cm4gKHVubGluayhmaWxlKSk7Cit9CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RkaW8vcmdldC5jIGIvbGliYy91cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0ZGlvL3JnZXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZGMwMzExCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0ZGlvL3JnZXQuYwpAQCAtMCwwICsxLDU1IEBACisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQorICogQ2hyaXMgVG9yZWsuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpZiBkZWZpbmVkKExJQkNfU0NDUykgJiYgIWRlZmluZWQobGludCkKK3N0YXRpYyBjaGFyIHNjY3NpZFtdID0gIkAoIylyZ2V0LmMJOC4xIChCZXJrZWxleSkgNi80LzkzIjsKKyNlbmRpZiAvKiBMSUJDX1NDQ1MgYW5kIG5vdCBsaW50ICovCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CitfX0ZCU0RJRCgiJEZyZWVCU0QkIik7CisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgImxvY2FsLmgiCisKKy8qCisgKiBIYW5kbGUgZ2V0YygpIHdoZW4gdGhlIGJ1ZmZlciByYW4gb3V0OgorICogUmVmaWxsLCB0aGVuIHJldHVybiB0aGUgZmlyc3QgY2hhcmFjdGVyCisgKiBpbiB0aGUgbmV3bHktZmlsbGVkIGJ1ZmZlci4KKyAqLworaW50CitfX3NyZ2V0KEZJTEUgKmZwKQoreworCWlmIChfX3NyZWZpbGwoZnApID09IDApIHsKKwkJZnAtPl9yLS07CisJCXJldHVybiAoKmZwLT5fcCsrKTsKKwl9CisJcmV0dXJuIChFT0YpOworfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0ZGlvL3NldGJ1Zi5jIGIvbGliYy91cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0ZGlvL3NldGJ1Zi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjNjVmOTcKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RkaW8vc2V0YnVmLmMKQEAgLTAsMCArMSw0NiBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKKyAqIENocmlzIFRvcmVrLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaWYgZGVmaW5lZChMSUJDX1NDQ1MpICYmICFkZWZpbmVkKGxpbnQpCitzdGF0aWMgY2hhciBzY2NzaWRbXSA9ICJAKCMpc2V0YnVmLmMJOC4xIChCZXJrZWxleSkgNi80LzkzIjsKKyNlbmRpZiAvKiBMSUJDX1NDQ1MgYW5kIG5vdCBsaW50ICovCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CitfX0ZCU0RJRCgiJEZyZWVCU0QkIik7CisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgImxvY2FsLmgiCisKK3ZvaWQKK3NldGJ1ZihGSUxFICogX19yZXN0cmljdCBmcCwgY2hhciAqIF9fcmVzdHJpY3QgYnVmKQoreworCSh2b2lkKSBzZXR2YnVmKGZwLCBidWYsIGJ1ZiA/IF9JT0ZCRiA6IF9JT05CRiwgQlVGU0laKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdGRpby9zZXRidWZmZXIuYyBiL2xpYmMvdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdGRpby9zZXRidWZmZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZjVlYjNjCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0ZGlvL3NldGJ1ZmZlci5jCkBAIC0wLDAgKzEsNTYgQEAKKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5CisgKiBDaHJpcyBUb3Jlay4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2lmIGRlZmluZWQoTElCQ19TQ0NTKSAmJiAhZGVmaW5lZChsaW50KQorc3RhdGljIGNoYXIgc2Njc2lkW10gPSAiQCgjKXNldGJ1ZmZlci5jCTguMSAoQmVya2VsZXkpIDYvNC85MyI7CisjZW5kaWYgLyogTElCQ19TQ0NTIGFuZCBub3QgbGludCAqLworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorX19GQlNESUQoIiRGcmVlQlNEJCIpOworCisjaW5jbHVkZSA8c3RkaW8uaD4KKwordm9pZAorc2V0YnVmZmVyKEZJTEUgKmZwLCBjaGFyICpidWYsIGludCBzaXplKQoreworCisJKHZvaWQpc2V0dmJ1ZihmcCwgYnVmLCBidWYgPyBfSU9GQkYgOiBfSU9OQkYsIChzaXplX3Qpc2l6ZSk7Cit9CisKKy8qCisgKiBzZXQgbGluZSBidWZmZXJpbmcKKyAqLworaW50CitzZXRsaW5lYnVmKEZJTEUgKmZwKQoreworCisJcmV0dXJuIChzZXR2YnVmKGZwLCAoY2hhciAqKU5VTEwsIF9JT0xCRiwgKHNpemVfdCkwKSk7Cit9CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RkaW8vc2V0dmJ1Zi5jIGIvbGliYy91cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0ZGlvL3NldHZidWYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMzk2OTYwCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0ZGlvL3NldHZidWYuYwpAQCAtMCwwICsxLDE2MSBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKKyAqIENocmlzIFRvcmVrLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaWYgZGVmaW5lZChMSUJDX1NDQ1MpICYmICFkZWZpbmVkKGxpbnQpCitzdGF0aWMgY2hhciBzY2NzaWRbXSA9ICJAKCMpc2V0dmJ1Zi5jCTguMiAoQmVya2VsZXkpIDExLzE2LzkzIjsKKyNlbmRpZiAvKiBMSUJDX1NDQ1MgYW5kIG5vdCBsaW50ICovCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CitfX0ZCU0RJRCgiJEZyZWVCU0QkIik7CisKKyNpbmNsdWRlICJuYW1lc3BhY2UuaCIKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgInVuLW5hbWVzcGFjZS5oIgorI2luY2x1ZGUgImxvY2FsLmgiCisjaW5jbHVkZSAibGliY19wcml2YXRlLmgiCisKKy8qCisgKiBTZXQgb25lIG9mIHRoZSB0aHJlZSBraW5kcyBvZiBidWZmZXJpbmcsIG9wdGlvbmFsbHkgaW5jbHVkaW5nCisgKiBhIGJ1ZmZlci4KKyAqLworaW50CitzZXR2YnVmKEZJTEUgKiBfX3Jlc3RyaWN0IGZwLCBjaGFyICogX19yZXN0cmljdCBidWYsIGludCBtb2RlLCBzaXplX3Qgc2l6ZSkKK3sKKwlpbnQgcmV0LCBmbGFnczsKKwlzaXplX3QgaW9zaXplOworCWludCB0dHlmbGFnOworCisJLyoKKwkgKiBWZXJpZnkgYXJndW1lbnRzLiAgVGhlIGBpbnQnIGxpbWl0IG9uIGBzaXplJyBpcyBkdWUgdG8gdGhpcworCSAqIHBhcnRpY3VsYXIgaW1wbGVtZW50YXRpb24uICBOb3RlLCBidWYgYW5kIHNpemUgYXJlIGlnbm9yZWQKKwkgKiB3aGVuIHNldHRpbmcgX0lPTkJGLgorCSAqLworCWlmIChtb2RlICE9IF9JT05CRikKKwkJaWYgKChtb2RlICE9IF9JT0ZCRiAmJiBtb2RlICE9IF9JT0xCRikgfHwgKGludClzaXplIDwgMCkKKwkJCXJldHVybiAoRU9GKTsKKworCUZMT0NLRklMRShmcCk7CisJLyoKKwkgKiBXcml0ZSBjdXJyZW50IGJ1ZmZlciwgaWYgYW55LiAgRGlzY2FyZCB1bnJlYWQgaW5wdXQgKGluY2x1ZGluZworCSAqIHVuZ2V0YyBkYXRhKSwgY2FuY2VsIGxpbmUgYnVmZmVyaW5nLCBhbmQgZnJlZSBvbGQgYnVmZmVyIGlmCisJICogbWFsbG9jKCllZC4gIFdlIGFsc28gY2xlYXIgYW55IGVvZiBjb25kaXRpb24sIGFzIGlmIHRoaXMgd2VyZQorCSAqIGEgc2Vlay4KKwkgKi8KKwlyZXQgPSAwOworCSh2b2lkKV9fc2ZsdXNoKGZwKTsKKwlpZiAoSEFTVUIoZnApKQorCQlGUkVFVUIoZnApOworCWZwLT5fciA9IGZwLT5fbGJmc2l6ZSA9IDA7CisJZmxhZ3MgPSBmcC0+X2ZsYWdzOworCWlmIChmbGFncyAmIF9fU01CRikKKwkJZnJlZSgodm9pZCAqKWZwLT5fYmYuX2Jhc2UpOworCWZsYWdzICY9IH4oX19TTEJGIHwgX19TTkJGIHwgX19TTUJGIHwgX19TT1BUIHwgX19TT0ZGIHwgX19TTlBUIHwgX19TRU9GKTsKKworCS8qIElmIHNldHRpbmcgdW5idWZmZXJlZCBtb2RlLCBza2lwIGFsbCB0aGUgaGFyZCB3b3JrLiAqLworCWlmIChtb2RlID09IF9JT05CRikKKwkJZ290byBuYmY7CisKKwkvKgorCSAqIEZpbmQgb3B0aW1hbCBJL08gc2l6ZSBmb3Igc2VlayBvcHRpbWl6YXRpb24uICBUaGlzIGFsc28gcmV0dXJucworCSAqIGEgYHR0eSBmbGFnJyB0byBzdWdnZXN0IHRoYXQgd2UgY2hlY2sgaXNhdHR5KGZkKSwgYnV0IHdlIGRvIG5vdAorCSAqIGNhcmUgc2luY2Ugb3VyIGNhbGxlciB0b2xkIHVzIGhvdyB0byBidWZmZXIuCisJICovCisJZmxhZ3MgfD0gX19zd2hhdGJ1ZihmcCwgJmlvc2l6ZSwgJnR0eWZsYWcpOworCWlmIChzaXplID09IDApIHsKKwkJYnVmID0gTlVMTDsJLyogZm9yY2UgbG9jYWwgYWxsb2NhdGlvbiAqLworCQlzaXplID0gaW9zaXplOworCX0KKworCS8qIEFsbG9jYXRlIGJ1ZmZlciBpZiBuZWVkZWQuICovCisJaWYgKGJ1ZiA9PSBOVUxMKSB7CisJCWlmICgoYnVmID0gbWFsbG9jKHNpemUpKSA9PSBOVUxMKSB7CisJCQkvKgorCQkJICogVW5hYmxlIHRvIGhvbm9yIHVzZXIncyByZXF1ZXN0LiAgV2Ugd2lsbCByZXR1cm4KKwkJCSAqIGZhaWx1cmUsIGJ1dCB0cnkgYWdhaW4gd2l0aCBmaWxlIHN5c3RlbSBzaXplLgorCQkJICovCisJCQlyZXQgPSBFT0Y7CisJCQlpZiAoc2l6ZSAhPSBpb3NpemUpIHsKKwkJCQlzaXplID0gaW9zaXplOworCQkJCWJ1ZiA9IG1hbGxvYyhzaXplKTsKKwkJCX0KKwkJfQorCQlpZiAoYnVmID09IE5VTEwpIHsKKwkJCS8qIE5vIGx1Y2s7IHN3aXRjaCB0byB1bmJ1ZmZlcmVkIEkvTy4gKi8KK25iZjoKKwkJCWZwLT5fZmxhZ3MgPSBmbGFncyB8IF9fU05CRjsKKwkJCWZwLT5fdyA9IDA7CisJCQlmcC0+X2JmLl9iYXNlID0gZnAtPl9wID0gZnAtPl9uYnVmOworCQkJZnAtPl9iZi5fc2l6ZSA9IDE7CisJCQlGVU5MT0NLRklMRShmcCk7CisJCQlyZXR1cm4gKHJldCk7CisJCX0KKwkJZmxhZ3MgfD0gX19TTUJGOworCX0KKworCS8qCisJICogS2lsbCBhbnkgc2VlayBvcHRpbWl6YXRpb24gaWYgdGhlIGJ1ZmZlciBpcyBub3QgdGhlCisJICogcmlnaHQgc2l6ZS4KKwkgKgorCSAqIFNIT1VMRCBXRSBBTExPVyBNVUxUSVBMRVMgSEVSRSAoaS5lLiwgb2sgaWZmIChzaXplICUgaW9zaXplKSA9PSAwKT8KKwkgKi8KKwlpZiAoc2l6ZSAhPSBpb3NpemUpCisJCWZsYWdzIHw9IF9fU05QVDsKKworCS8qCisJICogRml4IHVwIHRoZSBGSUxFIGZpZWxkcywgYW5kIHNldCBfX2NsZWFudXAgZm9yIG91dHB1dCBmbHVzaCBvbgorCSAqIGV4aXQgKHNpbmNlIHdlIGFyZSBidWZmZXJlZCBpbiBzb21lIHdheSkuCisJICovCisJaWYgKG1vZGUgPT0gX0lPTEJGKQorCQlmbGFncyB8PSBfX1NMQkY7CisJZnAtPl9mbGFncyA9IGZsYWdzOworCWZwLT5fYmYuX2Jhc2UgPSBmcC0+X3AgPSAodW5zaWduZWQgY2hhciAqKWJ1ZjsKKwlmcC0+X2JmLl9zaXplID0gc2l6ZTsKKwkvKiBmcC0+X2xiZnNpemUgaXMgc3RpbGwgMCAqLworCWlmIChmbGFncyAmIF9fU1dSKSB7CisJCS8qCisJCSAqIEJlZ2luIG9yIGNvbnRpbnVlIHdyaXRpbmc6IHNlZSBfX3N3c2V0dXAoKS4gIE5vdGUKKwkJICogdGhhdCBfX1NOQkYgaXMgaW1wb3NzaWJsZSAoaXQgd2FzIGhhbmRsZWQgZWFybGllcikuCisJCSAqLworCQlpZiAoZmxhZ3MgJiBfX1NMQkYpIHsKKwkJCWZwLT5fdyA9IDA7CisJCQlmcC0+X2xiZnNpemUgPSAtZnAtPl9iZi5fc2l6ZTsKKwkJfSBlbHNlCisJCQlmcC0+X3cgPSBzaXplOworCX0gZWxzZSB7CisJCS8qIGJlZ2luL2NvbnRpbnVlIHJlYWRpbmcsIG9yIHN0YXkgaW4gaW50ZXJtZWRpYXRlIHN0YXRlICovCisJCWZwLT5fdyA9IDA7CisJfQorCV9fY2xlYW51cCA9IF9jbGVhbnVwOworCisJRlVOTE9DS0ZJTEUoZnApOworCXJldHVybiAocmV0KTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdGRpby90ZW1wbmFtLmMgYi9saWJjL3Vwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RkaW8vdGVtcG5hbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxNTc0NmYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RkaW8vdGVtcG5hbS5jCkBAIC0wLDAgKzEsODkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDE5ODgsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaWYgZGVmaW5lZChMSUJDX1NDQ1MpICYmICFkZWZpbmVkKGxpbnQpCitzdGF0aWMgY2hhciBzY2NzaWRbXSA9ICJAKCMpdGVtcG5hbS5jCTguMSAoQmVya2VsZXkpIDYvNC85MyI7CisjZW5kaWYgLyogTElCQ19TQ0NTIGFuZCBub3QgbGludCAqLworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorX19GQlNESUQoIiRGcmVlQlNEJCIpOworCisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHBhdGhzLmg+CisKK19fd2Fybl9yZWZlcmVuY2VzKHRlbXBuYW0sCisgICAgIndhcm5pbmc6IHRlbXBuYW0oKSBwb3NzaWJseSB1c2VkIHVuc2FmZWx5OyBjb25zaWRlciB1c2luZyBta3N0ZW1wKCkiKTsKKworZXh0ZXJuIGNoYXIgKl9ta3RlbXAoY2hhciAqKTsKKworY2hhciAqCit0ZW1wbmFtKGNvbnN0IGNoYXIgKmRpciwgY29uc3QgY2hhciAqcGZ4KQoreworCWludCBzdmVycm5vOworCWNoYXIgKmYsICpuYW1lOworCisJaWYgKCEobmFtZSA9IG1hbGxvYyhNQVhQQVRITEVOKSkpCisJCXJldHVybihOVUxMKTsKKworCWlmICghcGZ4KQorCQlwZnggPSAidG1wLiI7CisKKwlpZiAoaXNzZXR1Z2lkKCkgPT0gMCAmJiAoZiA9IGdldGVudigiVE1QRElSIikpKSB7CisJCSh2b2lkKXNucHJpbnRmKG5hbWUsIE1BWFBBVEhMRU4sICIlcyVzJXNYWFhYWFgiLCBmLAorCQkgICAgKihmICsgc3RybGVuKGYpIC0gMSkgPT0gJy8nPyAiIjogIi8iLCBwZngpOworCQlpZiAoKGYgPSBfbWt0ZW1wKG5hbWUpKSkKKwkJCXJldHVybihmKTsKKwl9CisKKwlpZiAoKGYgPSAoY2hhciAqKWRpcikpIHsKKwkJKHZvaWQpc25wcmludGYobmFtZSwgTUFYUEFUSExFTiwgIiVzJXMlc1hYWFhYWCIsIGYsCisJCSAgICAqKGYgKyBzdHJsZW4oZikgLSAxKSA9PSAnLyc/ICIiOiAiLyIsIHBmeCk7CisJCWlmICgoZiA9IF9ta3RlbXAobmFtZSkpKQorCQkJcmV0dXJuKGYpOworCX0KKworCWYgPSBQX3RtcGRpcjsKKwkodm9pZClzbnByaW50ZihuYW1lLCBNQVhQQVRITEVOLCAiJXMlc1hYWFhYWCIsIGYsIHBmeCk7CisJaWYgKChmID0gX21rdGVtcChuYW1lKSkpCisJCXJldHVybihmKTsKKworCWYgPSBfUEFUSF9UTVA7CisJKHZvaWQpc25wcmludGYobmFtZSwgTUFYUEFUSExFTiwgIiVzJXNYWFhYWFgiLCBmLCBwZngpOworCWlmICgoZiA9IF9ta3RlbXAobmFtZSkpKQorCQlyZXR1cm4oZik7CisKKwlzdmVycm5vID0gZXJybm87CisJZnJlZShuYW1lKTsKKwllcnJubyA9IHN2ZXJybm87CisJcmV0dXJuKE5VTEwpOworfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0ZGlvL3RtcG5hbS5jIGIvbGliYy91cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0ZGlvL3RtcG5hbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlMzJkY2MKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RkaW8vdG1wbmFtLmMKQEAgLTAsMCArMSw2MCBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMsIDE5OTQKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKKyAqIENocmlzIFRvcmVrLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaWYgZGVmaW5lZChMSUJDX1NDQ1MpICYmICFkZWZpbmVkKGxpbnQpCitzdGF0aWMgY2hhciBzY2NzaWRbXSA9ICJAKCMpdG1wbmFtLmMJOC4zIChCZXJrZWxleSkgMy8yOC85NCI7CisjZW5kaWYgLyogTElCQ19TQ0NTIGFuZCBub3QgbGludCAqLworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorX19GQlNESUQoIiRGcmVlQlNEJCIpOworCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorCitfX3dhcm5fcmVmZXJlbmNlcyh0bXBuYW0sCisgICAgIndhcm5pbmc6IHRtcG5hbSgpIHBvc3NpYmx5IHVzZWQgdW5zYWZlbHk7IGNvbnNpZGVyIHVzaW5nIG1rc3RlbXAoKSIpOworCitleHRlcm4gY2hhciAqX21rdGVtcChjaGFyICopOworCitjaGFyICoKK3RtcG5hbShjaGFyICpzKQoreworCXN0YXRpYyB1X2xvbmcgdG1wY291bnQ7CisJc3RhdGljIGNoYXIgYnVmW0xfdG1wbmFtXTsKKworCWlmIChzID09IE5VTEwpCisJCXMgPSBidWY7CisJKHZvaWQpc25wcmludGYocywgTF90bXBuYW0sICIlc3RtcC4lbHUuWFhYWFhYIiwgUF90bXBkaXIsIHRtcGNvdW50KTsKKwkrK3RtcGNvdW50OworCXJldHVybiAoX21rdGVtcChzKSk7Cit9CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RkaW8vd3NldHVwLmMgYi9saWJjL3Vwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RkaW8vd3NldHVwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzBmODI0NwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdGRpby93c2V0dXAuYwpAQCAtMCwwICsxLDkyIEBACisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQorICogQ2hyaXMgVG9yZWsuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpZiBkZWZpbmVkKExJQkNfU0NDUykgJiYgIWRlZmluZWQobGludCkKK3N0YXRpYyBjaGFyIHNjY3NpZFtdID0gIkAoIyl3c2V0dXAuYwk4LjEgKEJlcmtlbGV5KSA2LzQvOTMiOworI2VuZGlmIC8qIExJQkNfU0NDUyBhbmQgbm90IGxpbnQgKi8KKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJTRCQiKTsKKworI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlICJsb2NhbC5oIgorCisvKgorICogVmFyaW91cyBvdXRwdXQgcm91dGluZXMgY2FsbCB3c2V0dXAgdG8gYmUgc3VyZSBpdCBpcyBzYWZlIHRvIHdyaXRlLAorICogYmVjYXVzZSBlaXRoZXIgX2ZsYWdzIGRvZXMgbm90IGluY2x1ZGUgX19TV1IsIG9yIF9idWYgaXMgTlVMTC4KKyAqIF93c2V0dXAgcmV0dXJucyAwIGlmIE9LIHRvIHdyaXRlOyBvdGhlcndpc2UsIGl0IHJldHVybnMgRU9GIGFuZCBzZXRzIGVycm5vLgorICovCitpbnQKK19fc3dzZXR1cChGSUxFICpmcCkKK3sKKwkvKiBtYWtlIHN1cmUgc3RkaW8gaXMgc2V0IHVwICovCisJaWYgKCFfX3NkaWRpbml0KQorCQlfX3Npbml0KCk7CisKKwkvKgorCSAqIElmIHdlIGFyZSBub3Qgd3JpdGluZywgd2UgaGFkIGJldHRlciBiZSByZWFkaW5nIGFuZCB3cml0aW5nLgorCSAqLworCWlmICgoZnAtPl9mbGFncyAmIF9fU1dSKSA9PSAwKSB7CisJCWlmICgoZnAtPl9mbGFncyAmIF9fU1JXKSA9PSAwKSB7CisJCQllcnJubyA9IEVCQURGOworCQkJZnAtPl9mbGFncyB8PSBfX1NFUlI7CisJCQlyZXR1cm4gKEVPRik7CisJCX0KKwkJaWYgKGZwLT5fZmxhZ3MgJiBfX1NSRCkgeworCQkJLyogY2xvYmJlciBhbnkgdW5nZXRjIGRhdGEgKi8KKwkJCWlmIChIQVNVQihmcCkpCisJCQkJRlJFRVVCKGZwKTsKKwkJCWZwLT5fZmxhZ3MgJj0gfihfX1NSRHxfX1NFT0YpOworCQkJZnAtPl9yID0gMDsKKwkJCWZwLT5fcCA9IGZwLT5fYmYuX2Jhc2U7CisJCX0KKwkJZnAtPl9mbGFncyB8PSBfX1NXUjsKKwl9CisKKwkvKgorCSAqIE1ha2UgYSBidWZmZXIgaWYgbmVjZXNzYXJ5LCB0aGVuIHNldCBfdy4KKwkgKi8KKwlpZiAoZnAtPl9iZi5fYmFzZSA9PSBOVUxMKQorCQlfX3NtYWtlYnVmKGZwKTsKKwlpZiAoZnAtPl9mbGFncyAmIF9fU0xCRikgeworCQkvKgorCQkgKiBJdCBpcyBsaW5lIGJ1ZmZlcmVkLCBzbyBtYWtlIF9sYmZzaXplIGJlIC1fYnVmc2l6ZQorCQkgKiBmb3IgdGhlIHB1dGMoKSBtYWNyby4gIFdlIHdpbGwgY2hhbmdlIF9sYmZzaXplIGJhY2sKKwkJICogdG8gMCB3aGVuZXZlciB3ZSB0dXJuIG9mZiBfX1NXUi4KKwkJICovCisJCWZwLT5fdyA9IDA7CisJCWZwLT5fbGJmc2l6ZSA9IC1mcC0+X2JmLl9zaXplOworCX0gZWxzZQorCQlmcC0+X3cgPSBmcC0+X2ZsYWdzICYgX19TTkJGID8gMCA6IGZwLT5fYmYuX3NpemU7CisJcmV0dXJuICgwKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdGRsaWIvZ2V0b3B0X2xvbmcuYyBiL2xpYmMvdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdGRsaWIvZ2V0b3B0X2xvbmcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZjdmNmQ1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0ZGxpYi9nZXRvcHRfbG9uZy5jCkBAIC0wLDAgKzEsNjE4IEBACisvKgkkT3BlbkJTRDogZ2V0b3B0X2xvbmcuYyx2IDEuMjIgMjAwNi8xMC8wNCAyMToyOTowNCBqbWMgRXhwICQJKi8KKy8qCSROZXRCU0Q6IGdldG9wdF9sb25nLmMsdiAxLjE1IDIwMDIvMDEvMzEgMjI6NDM6NDAgdHYgRXhwICQJKi8KKworLyoKKyAqIENvcHlyaWdodCAoYykgMjAwMiBUb2RkIEMuIE1pbGxlciA8VG9kZC5NaWxsZXJAY291cnRlc2FuLmNvbT4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisgKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgorICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgorICogT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqCisgKiBTcG9uc29yZWQgaW4gcGFydCBieSB0aGUgRGVmZW5zZSBBZHZhbmNlZCBSZXNlYXJjaCBQcm9qZWN0cworICogQWdlbmN5IChEQVJQQSkgYW5kIEFpciBGb3JjZSBSZXNlYXJjaCBMYWJvcmF0b3J5LCBBaXIgRm9yY2UKKyAqIE1hdGVyaWVsIENvbW1hbmQsIFVTQUYsIHVuZGVyIGFncmVlbWVudCBudW1iZXIgRjM5NTAyLTk5LTEtMDUxMi4KKyAqLworLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMDAgVGhlIE5ldEJTRCBGb3VuZGF0aW9uLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gVGhlIE5ldEJTRCBGb3VuZGF0aW9uCisgKiBieSBEaWV0ZXIgQmFyb24gYW5kIFRob21hcyBLbGF1c25lci4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBORVRCU0QgRk9VTkRBVElPTiwgSU5DLiBBTkQgQ09OVFJJQlVUT1JTCisgKiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQKKyAqIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEZPVU5EQVRJT04gT1IgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWYgMAorI2lmIGRlZmluZWQoTElCQ19TQ0NTKSAmJiAhZGVmaW5lZChsaW50KQorc3RhdGljIGNoYXIgKnJjc2lkID0gIiRPcGVuQlNEOiBnZXRvcHRfbG9uZy5jLHYgMS4xNiAyMDA0LzAyLzA0IDE4OjE3OjI1IG1pbGxlcnQgRXhwICQiOworI2VuZGlmIC8qIExJQkNfU0NDUyBhbmQgbm90IGxpbnQgKi8KKyNlbmRpZgorI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorX19GQlNESUQoIiRGcmVlQlNEJCIpOworCisjaW5jbHVkZSA8ZXJyLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxnZXRvcHQuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2RlZmluZSBHTlVfQ09NUEFUSUJMRQkJLyogQmUgbW9yZSBjb21wYXRpYmxlLCBjb25maWd1cmUncyB1c2UgdXMhICovCisKKyNpZiAwCQkJCS8qIHdlIHByZWZlciB0byBrZWVwIG91ciBnZXRvcHQoMykgKi8KKyNkZWZpbmUJUkVQTEFDRV9HRVRPUFQJCS8qIHVzZSB0aGlzIGdldG9wdCBhcyB0aGUgc3lzdGVtIGdldG9wdCgzKSAqLworI2VuZGlmCisKKyNpZmRlZiBSRVBMQUNFX0dFVE9QVAoraW50CW9wdGVyciA9IDE7CQkvKiBpZiBlcnJvciBtZXNzYWdlIHNob3VsZCBiZSBwcmludGVkICovCitpbnQJb3B0aW5kID0gMTsJCS8qIGluZGV4IGludG8gcGFyZW50IGFyZ3YgdmVjdG9yICovCitpbnQJb3B0b3B0ID0gJz8nOwkJLyogY2hhcmFjdGVyIGNoZWNrZWQgZm9yIHZhbGlkaXR5ICovCitpbnQJb3B0cmVzZXQ7CQkvKiByZXNldCBnZXRvcHQgKi8KK2NoYXIgICAgKm9wdGFyZzsJCS8qIGFyZ3VtZW50IGFzc29jaWF0ZWQgd2l0aCBvcHRpb24gKi8KKyNlbmRpZgorCisjZGVmaW5lIFBSSU5UX0VSUk9SCSgob3B0ZXJyKSAmJiAoKm9wdGlvbnMgIT0gJzonKSkKKworI2RlZmluZSBGTEFHX1BFUk1VVEUJMHgwMQkvKiBwZXJtdXRlIG5vbi1vcHRpb25zIHRvIHRoZSBlbmQgb2YgYXJndiAqLworI2RlZmluZSBGTEFHX0FMTEFSR1MJMHgwMgkvKiB0cmVhdCBub24tb3B0aW9ucyBhcyBhcmdzIHRvIG9wdGlvbiAiLTEiICovCisjZGVmaW5lIEZMQUdfTE9OR09OTFkJMHgwNAkvKiBvcGVyYXRlIGFzIGdldG9wdF9sb25nX29ubHkgKi8KKworLyogcmV0dXJuIHZhbHVlcyAqLworI2RlZmluZQlCQURDSAkJKGludCknPycKKyNkZWZpbmUJQkFEQVJHCQkoKCpvcHRpb25zID09ICc6JykgPyAoaW50KSc6JyA6IChpbnQpJz8nKQorI2RlZmluZQlJTk9SREVSIAkoaW50KTEKKworI2RlZmluZQlFTVNHCQkiIgorCisjaWZkZWYgR05VX0NPTVBBVElCTEUKKyNkZWZpbmUgTk9fUFJFRklYCSgtMSkKKyNkZWZpbmUgRF9QUkVGSVgJMAorI2RlZmluZSBERF9QUkVGSVgJMQorI2RlZmluZSBXX1BSRUZJWAkyCisjZW5kaWYKKworc3RhdGljIGludCBnZXRvcHRfaW50ZXJuYWwoaW50LCBjaGFyICogY29uc3QgKiwgY29uc3QgY2hhciAqLAorCQkJICAgY29uc3Qgc3RydWN0IG9wdGlvbiAqLCBpbnQgKiwgaW50KTsKK3N0YXRpYyBpbnQgcGFyc2VfbG9uZ19vcHRpb25zKGNoYXIgKiBjb25zdCAqLCBjb25zdCBjaGFyICosCisJCQkgICAgICBjb25zdCBzdHJ1Y3Qgb3B0aW9uICosIGludCAqLCBpbnQsIGludCk7CitzdGF0aWMgaW50IGdjZChpbnQsIGludCk7CitzdGF0aWMgdm9pZCBwZXJtdXRlX2FyZ3MoaW50LCBpbnQsIGludCwgY2hhciAqIGNvbnN0ICopOworCitzdGF0aWMgY2hhciAqcGxhY2UgPSBFTVNHOyAvKiBvcHRpb24gbGV0dGVyIHByb2Nlc3NpbmcgKi8KKworLyogWFhYOiBzZXQgb3B0cmVzZXQgdG8gMSByYXRoZXIgdGhhbiB0aGVzZSB0d28gKi8KK3N0YXRpYyBpbnQgbm9ub3B0X3N0YXJ0ID0gLTE7IC8qIGZpcnN0IG5vbiBvcHRpb24gYXJndW1lbnQgKGZvciBwZXJtdXRlKSAqLworc3RhdGljIGludCBub25vcHRfZW5kID0gLTE7ICAgLyogZmlyc3Qgb3B0aW9uIGFmdGVyIG5vbiBvcHRpb25zIChmb3IgcGVybXV0ZSkgKi8KKworLyogRXJyb3IgbWVzc2FnZXMgKi8KK3N0YXRpYyBjb25zdCBjaGFyIHJlY2FyZ2NoYXJbXSA9ICJvcHRpb24gcmVxdWlyZXMgYW4gYXJndW1lbnQgLS0gJWMiOworc3RhdGljIGNvbnN0IGNoYXIgaWxsb3B0Y2hhcltdID0gImlsbGVnYWwgb3B0aW9uIC0tICVjIjsgLyogRnJvbSBQMTAwMy4yICovCisjaWZkZWYgR05VX0NPTVBBVElCTEUKK3N0YXRpYyBpbnQgZGFzaF9wcmVmaXggPSBOT19QUkVGSVg7CitzdGF0aWMgY29uc3QgY2hhciBnbnVvcHRjaGFyW10gPSAiaW52YWxpZCBvcHRpb24gLS0gJWMiOworCitzdGF0aWMgY29uc3QgY2hhciByZWNhcmdzdHJpbmdbXSA9ICJvcHRpb24gYCVzJXMnIHJlcXVpcmVzIGFuIGFyZ3VtZW50IjsKK3N0YXRpYyBjb25zdCBjaGFyIGFtYmlnW10gPSAib3B0aW9uIGAlcyUuKnMnIGlzIGFtYmlndW91cyI7CitzdGF0aWMgY29uc3QgY2hhciBub2FyZ1tdID0gIm9wdGlvbiBgJXMlLipzJyBkb2Vzbid0IGFsbG93IGFuIGFyZ3VtZW50IjsKK3N0YXRpYyBjb25zdCBjaGFyIGlsbG9wdHN0cmluZ1tdID0gInVucmVjb2duaXplZCBvcHRpb24gYCVzJXMnIjsKKyNlbHNlCitzdGF0aWMgY29uc3QgY2hhciByZWNhcmdzdHJpbmdbXSA9ICJvcHRpb24gcmVxdWlyZXMgYW4gYXJndW1lbnQgLS0gJXMiOworc3RhdGljIGNvbnN0IGNoYXIgYW1iaWdbXSA9ICJhbWJpZ3VvdXMgb3B0aW9uIC0tICUuKnMiOworc3RhdGljIGNvbnN0IGNoYXIgbm9hcmdbXSA9ICJvcHRpb24gZG9lc24ndCB0YWtlIGFuIGFyZ3VtZW50IC0tICUuKnMiOworc3RhdGljIGNvbnN0IGNoYXIgaWxsb3B0c3RyaW5nW10gPSAidW5rbm93biBvcHRpb24gLS0gJXMiOworI2VuZGlmCisKKy8qCisgKiBDb21wdXRlIHRoZSBncmVhdGVzdCBjb21tb24gZGl2aXNvciBvZiBhIGFuZCBiLgorICovCitzdGF0aWMgaW50CitnY2QoaW50IGEsIGludCBiKQoreworCWludCBjOworCisJYyA9IGEgJSBiOworCXdoaWxlIChjICE9IDApIHsKKwkJYSA9IGI7CisJCWIgPSBjOworCQljID0gYSAlIGI7CisJfQorCisJcmV0dXJuIChiKTsKK30KKworLyoKKyAqIEV4Y2hhbmdlIHRoZSBibG9jayBmcm9tIG5vbm9wdF9zdGFydCB0byBub25vcHRfZW5kIHdpdGggdGhlIGJsb2NrCisgKiBmcm9tIG5vbm9wdF9lbmQgdG8gb3B0X2VuZCAoa2VlcGluZyB0aGUgc2FtZSBvcmRlciBvZiBhcmd1bWVudHMKKyAqIGluIGVhY2ggYmxvY2spLgorICovCitzdGF0aWMgdm9pZAorcGVybXV0ZV9hcmdzKGludCBwYW5vbm9wdF9zdGFydCwgaW50IHBhbm9ub3B0X2VuZCwgaW50IG9wdF9lbmQsCisJY2hhciAqIGNvbnN0ICpuYXJndikKK3sKKwlpbnQgY3N0YXJ0LCBjeWNsZWxlbiwgaSwgaiwgbmN5Y2xlLCBubm9ub3B0cywgbm9wdHMsIHBvczsKKwljaGFyICpzd2FwOworCisJLyoKKwkgKiBjb21wdXRlIGxlbmd0aHMgb2YgYmxvY2tzIGFuZCBudW1iZXIgYW5kIHNpemUgb2YgY3ljbGVzCisJICovCisJbm5vbm9wdHMgPSBwYW5vbm9wdF9lbmQgLSBwYW5vbm9wdF9zdGFydDsKKwlub3B0cyA9IG9wdF9lbmQgLSBwYW5vbm9wdF9lbmQ7CisJbmN5Y2xlID0gZ2NkKG5ub25vcHRzLCBub3B0cyk7CisJY3ljbGVsZW4gPSAob3B0X2VuZCAtIHBhbm9ub3B0X3N0YXJ0KSAvIG5jeWNsZTsKKworCWZvciAoaSA9IDA7IGkgPCBuY3ljbGU7IGkrKykgeworCQljc3RhcnQgPSBwYW5vbm9wdF9lbmQraTsKKwkJcG9zID0gY3N0YXJ0OworCQlmb3IgKGogPSAwOyBqIDwgY3ljbGVsZW47IGorKykgeworCQkJaWYgKHBvcyA+PSBwYW5vbm9wdF9lbmQpCisJCQkJcG9zIC09IG5ub25vcHRzOworCQkJZWxzZQorCQkJCXBvcyArPSBub3B0czsKKwkJCXN3YXAgPSBuYXJndltwb3NdOworCQkJLyogTElOVEVEIGNvbnN0IGNhc3QgKi8KKwkJCSgoY2hhciAqKikgbmFyZ3YpW3Bvc10gPSBuYXJndltjc3RhcnRdOworCQkJLyogTElOVEVEIGNvbnN0IGNhc3QgKi8KKwkJCSgoY2hhciAqKiluYXJndilbY3N0YXJ0XSA9IHN3YXA7CisJCX0KKwl9Cit9CisKKy8qCisgKiBwYXJzZV9sb25nX29wdGlvbnMgLS0KKyAqCVBhcnNlIGxvbmcgb3B0aW9ucyBpbiBhcmdjL2FyZ3YgYXJndW1lbnQgdmVjdG9yLgorICogUmV0dXJucyAtMSBpZiBzaG9ydF90b28gaXMgc2V0IGFuZCB0aGUgb3B0aW9uIGRvZXMgbm90IG1hdGNoIGxvbmdfb3B0aW9ucy4KKyAqLworc3RhdGljIGludAorcGFyc2VfbG9uZ19vcHRpb25zKGNoYXIgKiBjb25zdCAqbmFyZ3YsIGNvbnN0IGNoYXIgKm9wdGlvbnMsCisJY29uc3Qgc3RydWN0IG9wdGlvbiAqbG9uZ19vcHRpb25zLCBpbnQgKmlkeCwgaW50IHNob3J0X3RvbywgaW50IGZsYWdzKQoreworCWNoYXIgKmN1cnJlbnRfYXJndiwgKmhhc19lcXVhbDsKKyNpZmRlZiBHTlVfQ09NUEFUSUJMRQorCWNoYXIgKmN1cnJlbnRfZGFzaDsKKyNlbmRpZgorCXNpemVfdCBjdXJyZW50X2FyZ3ZfbGVuOworCWludCBpLCBtYXRjaCwgZXhhY3RfbWF0Y2gsIHNlY29uZF9wYXJ0aWFsX21hdGNoOworCisJY3VycmVudF9hcmd2ID0gcGxhY2U7CisjaWZkZWYgR05VX0NPTVBBVElCTEUKKwlzd2l0Y2ggKGRhc2hfcHJlZml4KSB7CisJCWNhc2UgRF9QUkVGSVg6CisJCQljdXJyZW50X2Rhc2ggPSAiLSI7CisJCQlicmVhazsKKwkJY2FzZSBERF9QUkVGSVg6CisJCQljdXJyZW50X2Rhc2ggPSAiLS0iOworCQkJYnJlYWs7CisJCWNhc2UgV19QUkVGSVg6CisJCQljdXJyZW50X2Rhc2ggPSAiLVcgIjsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJY3VycmVudF9kYXNoID0gIiI7CisJCQlicmVhazsKKwl9CisjZW5kaWYKKwltYXRjaCA9IC0xOworCWV4YWN0X21hdGNoID0gMDsKKwlzZWNvbmRfcGFydGlhbF9tYXRjaCA9IDA7CisKKwlvcHRpbmQrKzsKKworCWlmICgoaGFzX2VxdWFsID0gc3RyY2hyKGN1cnJlbnRfYXJndiwgJz0nKSkgIT0gTlVMTCkgeworCQkvKiBhcmd1bWVudCBmb3VuZCAoLS1vcHRpb249YXJnKSAqLworCQljdXJyZW50X2FyZ3ZfbGVuID0gaGFzX2VxdWFsIC0gY3VycmVudF9hcmd2OworCQloYXNfZXF1YWwrKzsKKwl9IGVsc2UKKwkJY3VycmVudF9hcmd2X2xlbiA9IHN0cmxlbihjdXJyZW50X2FyZ3YpOworCisJZm9yIChpID0gMDsgbG9uZ19vcHRpb25zW2ldLm5hbWU7IGkrKykgeworCQkvKiBmaW5kIG1hdGNoaW5nIGxvbmcgb3B0aW9uICovCisJCWlmIChzdHJuY21wKGN1cnJlbnRfYXJndiwgbG9uZ19vcHRpb25zW2ldLm5hbWUsCisJCSAgICBjdXJyZW50X2FyZ3ZfbGVuKSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChzdHJsZW4obG9uZ19vcHRpb25zW2ldLm5hbWUpID09IGN1cnJlbnRfYXJndl9sZW4pIHsKKwkJCS8qIGV4YWN0IG1hdGNoICovCisJCQltYXRjaCA9IGk7CisJCQlleGFjdF9tYXRjaCA9IDE7CisJCQlicmVhazsKKwkJfQorCQkvKgorCQkgKiBJZiB0aGlzIGlzIGEga25vd24gc2hvcnQgb3B0aW9uLCBkb24ndCBhbGxvdworCQkgKiBhIHBhcnRpYWwgbWF0Y2ggb2YgYSBzaW5nbGUgY2hhcmFjdGVyLgorCQkgKi8KKwkJaWYgKHNob3J0X3RvbyAmJiBjdXJyZW50X2FyZ3ZfbGVuID09IDEpCisJCQljb250aW51ZTsKKworCQlpZiAobWF0Y2ggPT0gLTEpICAgICAgICAvKiBmaXJzdCBwYXJ0aWFsIG1hdGNoICovCisJCQltYXRjaCA9IGk7CisJCWVsc2UgaWYgKChmbGFncyAmIEZMQUdfTE9OR09OTFkpIHx8CisJCQkgbG9uZ19vcHRpb25zW2ldLmhhc19hcmcgIT0KKwkJCSAgICAgbG9uZ19vcHRpb25zW21hdGNoXS5oYXNfYXJnIHx8CisJCQkgbG9uZ19vcHRpb25zW2ldLmZsYWcgIT0gbG9uZ19vcHRpb25zW21hdGNoXS5mbGFnIHx8CisJCQkgbG9uZ19vcHRpb25zW2ldLnZhbCAhPSBsb25nX29wdGlvbnNbbWF0Y2hdLnZhbCkKKwkJCXNlY29uZF9wYXJ0aWFsX21hdGNoID0gMTsKKwl9CisJaWYgKCFleGFjdF9tYXRjaCAmJiBzZWNvbmRfcGFydGlhbF9tYXRjaCkgeworCQkvKiBhbWJpZ3VvdXMgYWJicmV2aWF0aW9uICovCisJCWlmIChQUklOVF9FUlJPUikKKwkJCXdhcm54KGFtYmlnLAorI2lmZGVmIEdOVV9DT01QQVRJQkxFCisJCQkgICAgIGN1cnJlbnRfZGFzaCwKKyNlbmRpZgorCQkJICAgICAoaW50KWN1cnJlbnRfYXJndl9sZW4sCisJCQkgICAgIGN1cnJlbnRfYXJndik7CisJCW9wdG9wdCA9IDA7CisJCXJldHVybiAoQkFEQ0gpOworCX0KKwlpZiAobWF0Y2ggIT0gLTEpIHsJCS8qIG9wdGlvbiBmb3VuZCAqLworCQlpZiAobG9uZ19vcHRpb25zW21hdGNoXS5oYXNfYXJnID09IG5vX2FyZ3VtZW50CisJCSAgICAmJiBoYXNfZXF1YWwpIHsKKwkJCWlmIChQUklOVF9FUlJPUikKKwkJCQl3YXJueChub2FyZywKKyNpZmRlZiBHTlVfQ09NUEFUSUJMRQorCQkJCSAgICAgY3VycmVudF9kYXNoLAorI2VuZGlmCisJCQkJICAgICAoaW50KWN1cnJlbnRfYXJndl9sZW4sCisJCQkJICAgICBjdXJyZW50X2FyZ3YpOworCQkJLyoKKwkJCSAqIFhYWDogR05VIHNldHMgb3B0b3B0IHRvIHZhbCByZWdhcmRsZXNzIG9mIGZsYWcKKwkJCSAqLworCQkJaWYgKGxvbmdfb3B0aW9uc1ttYXRjaF0uZmxhZyA9PSBOVUxMKQorCQkJCW9wdG9wdCA9IGxvbmdfb3B0aW9uc1ttYXRjaF0udmFsOworCQkJZWxzZQorCQkJCW9wdG9wdCA9IDA7CisjaWZkZWYgR05VX0NPTVBBVElCTEUKKwkJCXJldHVybiAoQkFEQ0gpOworI2Vsc2UKKwkJCXJldHVybiAoQkFEQVJHKTsKKyNlbmRpZgorCQl9CisJCWlmIChsb25nX29wdGlvbnNbbWF0Y2hdLmhhc19hcmcgPT0gcmVxdWlyZWRfYXJndW1lbnQgfHwKKwkJICAgIGxvbmdfb3B0aW9uc1ttYXRjaF0uaGFzX2FyZyA9PSBvcHRpb25hbF9hcmd1bWVudCkgeworCQkJaWYgKGhhc19lcXVhbCkKKwkJCQlvcHRhcmcgPSBoYXNfZXF1YWw7CisJCQllbHNlIGlmIChsb25nX29wdGlvbnNbbWF0Y2hdLmhhc19hcmcgPT0KKwkJCSAgICByZXF1aXJlZF9hcmd1bWVudCkgeworCQkJCS8qCisJCQkJICogb3B0aW9uYWwgYXJndW1lbnQgZG9lc24ndCB1c2UgbmV4dCBuYXJndgorCQkJCSAqLworCQkJCW9wdGFyZyA9IG5hcmd2W29wdGluZCsrXTsKKwkJCX0KKwkJfQorCQlpZiAoKGxvbmdfb3B0aW9uc1ttYXRjaF0uaGFzX2FyZyA9PSByZXF1aXJlZF9hcmd1bWVudCkKKwkJICAgICYmIChvcHRhcmcgPT0gTlVMTCkpIHsKKwkJCS8qCisJCQkgKiBNaXNzaW5nIGFyZ3VtZW50OyBsZWFkaW5nICc6JyBpbmRpY2F0ZXMgbm8gZXJyb3IKKwkJCSAqIHNob3VsZCBiZSBnZW5lcmF0ZWQuCisJCQkgKi8KKwkJCWlmIChQUklOVF9FUlJPUikKKwkJCQl3YXJueChyZWNhcmdzdHJpbmcsCisjaWZkZWYgR05VX0NPTVBBVElCTEUKKwkJCQkgICAgY3VycmVudF9kYXNoLAorI2VuZGlmCisJCQkJICAgIGN1cnJlbnRfYXJndik7CisJCQkvKgorCQkJICogWFhYOiBHTlUgc2V0cyBvcHRvcHQgdG8gdmFsIHJlZ2FyZGxlc3Mgb2YgZmxhZworCQkJICovCisJCQlpZiAobG9uZ19vcHRpb25zW21hdGNoXS5mbGFnID09IE5VTEwpCisJCQkJb3B0b3B0ID0gbG9uZ19vcHRpb25zW21hdGNoXS52YWw7CisJCQllbHNlCisJCQkJb3B0b3B0ID0gMDsKKwkJCS0tb3B0aW5kOworCQkJcmV0dXJuIChCQURBUkcpOworCQl9CisJfSBlbHNlIHsJCQkvKiB1bmtub3duIG9wdGlvbiAqLworCQlpZiAoc2hvcnRfdG9vKSB7CisJCQktLW9wdGluZDsKKwkJCXJldHVybiAoLTEpOworCQl9CisJCWlmIChQUklOVF9FUlJPUikKKwkJCXdhcm54KGlsbG9wdHN0cmluZywKKyNpZmRlZiBHTlVfQ09NUEFUSUJMRQorCQkJICAgICAgY3VycmVudF9kYXNoLAorI2VuZGlmCisJCQkgICAgICBjdXJyZW50X2FyZ3YpOworCQlvcHRvcHQgPSAwOworCQlyZXR1cm4gKEJBRENIKTsKKwl9CisJaWYgKGlkeCkKKwkJKmlkeCA9IG1hdGNoOworCWlmIChsb25nX29wdGlvbnNbbWF0Y2hdLmZsYWcpIHsKKwkJKmxvbmdfb3B0aW9uc1ttYXRjaF0uZmxhZyA9IGxvbmdfb3B0aW9uc1ttYXRjaF0udmFsOworCQlyZXR1cm4gKDApOworCX0gZWxzZQorCQlyZXR1cm4gKGxvbmdfb3B0aW9uc1ttYXRjaF0udmFsKTsKK30KKworLyoKKyAqIGdldG9wdF9pbnRlcm5hbCAtLQorICoJUGFyc2UgYXJnYy9hcmd2IGFyZ3VtZW50IHZlY3Rvci4gIENhbGxlZCBieSB1c2VyIGxldmVsIHJvdXRpbmVzLgorICovCitzdGF0aWMgaW50CitnZXRvcHRfaW50ZXJuYWwoaW50IG5hcmdjLCBjaGFyICogY29uc3QgKm5hcmd2LCBjb25zdCBjaGFyICpvcHRpb25zLAorCWNvbnN0IHN0cnVjdCBvcHRpb24gKmxvbmdfb3B0aW9ucywgaW50ICppZHgsIGludCBmbGFncykKK3sKKwljaGFyICpvbGk7CQkJCS8qIG9wdGlvbiBsZXR0ZXIgbGlzdCBpbmRleCAqLworCWludCBvcHRjaGFyLCBzaG9ydF90b287CisJaW50IHBvc2l4bHlfY29ycmVjdDsJLyogbm8gc3RhdGljLCBjYW4gYmUgY2hhbmdlZCBvbiB0aGUgZmx5ICovCisKKwlpZiAob3B0aW9ucyA9PSBOVUxMKQorCQlyZXR1cm4gKC0xKTsKKworCS8qCisJICogRGlzYWJsZSBHTlUgZXh0ZW5zaW9ucyBpZiBQT1NJWExZX0NPUlJFQ1QgaXMgc2V0IG9yIG9wdGlvbnMKKwkgKiBzdHJpbmcgYmVnaW5zIHdpdGggYSAnKycuCisJICovCisJcG9zaXhseV9jb3JyZWN0ID0gKGdldGVudigiUE9TSVhMWV9DT1JSRUNUIikgIT0gTlVMTCk7CisjaWZkZWYgR05VX0NPTVBBVElCTEUKKwlpZiAoKm9wdGlvbnMgPT0gJy0nKQorCQlmbGFncyB8PSBGTEFHX0FMTEFSR1M7CisJZWxzZSBpZiAocG9zaXhseV9jb3JyZWN0IHx8ICpvcHRpb25zID09ICcrJykKKwkJZmxhZ3MgJj0gfkZMQUdfUEVSTVVURTsKKyNlbHNlCisJaWYgKHBvc2l4bHlfY29ycmVjdCB8fCAqb3B0aW9ucyA9PSAnKycpCisJCWZsYWdzICY9IH5GTEFHX1BFUk1VVEU7CisJZWxzZSBpZiAoKm9wdGlvbnMgPT0gJy0nKQorCQlmbGFncyB8PSBGTEFHX0FMTEFSR1M7CisjZW5kaWYKKwlpZiAoKm9wdGlvbnMgPT0gJysnIHx8ICpvcHRpb25zID09ICctJykKKwkJb3B0aW9ucysrOworCisJLyoKKwkgKiBYWFggU29tZSBHTlUgcHJvZ3JhbXMgKGxpa2UgY3ZzKSBzZXQgb3B0aW5kIHRvIDAgaW5zdGVhZCBvZgorCSAqIFhYWCB1c2luZyBvcHRyZXNldC4gIFdvcmsgYXJvdW5kIHRoaXMgYnJhaW5kYW1hZ2UuCisJICovCisJaWYgKG9wdGluZCA9PSAwKQorCQlvcHRpbmQgPSBvcHRyZXNldCA9IDE7CisKKwlvcHRhcmcgPSBOVUxMOworCWlmIChvcHRyZXNldCkKKwkJbm9ub3B0X3N0YXJ0ID0gbm9ub3B0X2VuZCA9IC0xOworc3RhcnQ6CisJaWYgKG9wdHJlc2V0IHx8ICEqcGxhY2UpIHsJCS8qIHVwZGF0ZSBzY2FubmluZyBwb2ludGVyICovCisJCW9wdHJlc2V0ID0gMDsKKwkJaWYgKG9wdGluZCA+PSBuYXJnYykgeyAgICAgICAgICAvKiBlbmQgb2YgYXJndW1lbnQgdmVjdG9yICovCisJCQlwbGFjZSA9IEVNU0c7CisJCQlpZiAobm9ub3B0X2VuZCAhPSAtMSkgeworCQkJCS8qIGRvIHBlcm11dGF0aW9uLCBpZiB3ZSBoYXZlIHRvICovCisJCQkJcGVybXV0ZV9hcmdzKG5vbm9wdF9zdGFydCwgbm9ub3B0X2VuZCwKKwkJCQkgICAgb3B0aW5kLCBuYXJndik7CisJCQkJb3B0aW5kIC09IG5vbm9wdF9lbmQgLSBub25vcHRfc3RhcnQ7CisJCQl9CisJCQllbHNlIGlmIChub25vcHRfc3RhcnQgIT0gLTEpIHsKKwkJCQkvKgorCQkJCSAqIElmIHdlIHNraXBwZWQgbm9uLW9wdGlvbnMsIHNldCBvcHRpbmQKKwkJCQkgKiB0byB0aGUgZmlyc3Qgb2YgdGhlbS4KKwkJCQkgKi8KKwkJCQlvcHRpbmQgPSBub25vcHRfc3RhcnQ7CisJCQl9CisJCQlub25vcHRfc3RhcnQgPSBub25vcHRfZW5kID0gLTE7CisJCQlyZXR1cm4gKC0xKTsKKwkJfQorCQlpZiAoKihwbGFjZSA9IG5hcmd2W29wdGluZF0pICE9ICctJyB8fAorI2lmZGVmIEdOVV9DT01QQVRJQkxFCisJCSAgICBwbGFjZVsxXSA9PSAnXDAnKSB7CisjZWxzZQorCQkgICAgKHBsYWNlWzFdID09ICdcMCcgJiYgc3RyY2hyKG9wdGlvbnMsICctJykgPT0gTlVMTCkpIHsKKyNlbmRpZgorCQkJcGxhY2UgPSBFTVNHOwkJLyogZm91bmQgbm9uLW9wdGlvbiAqLworCQkJaWYgKGZsYWdzICYgRkxBR19BTExBUkdTKSB7CisJCQkJLyoKKwkJCQkgKiBHTlUgZXh0ZW5zaW9uOgorCQkJCSAqIHJldHVybiBub24tb3B0aW9uIGFzIGFyZ3VtZW50IHRvIG9wdGlvbiAxCisJCQkJICovCisJCQkJb3B0YXJnID0gbmFyZ3Zbb3B0aW5kKytdOworCQkJCXJldHVybiAoSU5PUkRFUik7CisJCQl9CisJCQlpZiAoIShmbGFncyAmIEZMQUdfUEVSTVVURSkpIHsKKwkJCQkvKgorCQkJCSAqIElmIG5vIHBlcm11dGF0aW9uIHdhbnRlZCwgc3RvcCBwYXJzaW5nCisJCQkJICogYXQgZmlyc3Qgbm9uLW9wdGlvbi4KKwkJCQkgKi8KKwkJCQlyZXR1cm4gKC0xKTsKKwkJCX0KKwkJCS8qIGRvIHBlcm11dGF0aW9uICovCisJCQlpZiAobm9ub3B0X3N0YXJ0ID09IC0xKQorCQkJCW5vbm9wdF9zdGFydCA9IG9wdGluZDsKKwkJCWVsc2UgaWYgKG5vbm9wdF9lbmQgIT0gLTEpIHsKKwkJCQlwZXJtdXRlX2FyZ3Mobm9ub3B0X3N0YXJ0LCBub25vcHRfZW5kLAorCQkJCSAgICBvcHRpbmQsIG5hcmd2KTsKKwkJCQlub25vcHRfc3RhcnQgPSBvcHRpbmQgLQorCQkJCSAgICAobm9ub3B0X2VuZCAtIG5vbm9wdF9zdGFydCk7CisJCQkJbm9ub3B0X2VuZCA9IC0xOworCQkJfQorCQkJb3B0aW5kKys7CisJCQkvKiBwcm9jZXNzIG5leHQgYXJndW1lbnQgKi8KKwkJCWdvdG8gc3RhcnQ7CisJCX0KKwkJaWYgKG5vbm9wdF9zdGFydCAhPSAtMSAmJiBub25vcHRfZW5kID09IC0xKQorCQkJbm9ub3B0X2VuZCA9IG9wdGluZDsKKworCQkvKgorCQkgKiBJZiB3ZSBoYXZlICItIiBkbyBub3RoaW5nLCBpZiAiLS0iIHdlIGFyZSBkb25lLgorCQkgKi8KKwkJaWYgKHBsYWNlWzFdICE9ICdcMCcgJiYgKisrcGxhY2UgPT0gJy0nICYmIHBsYWNlWzFdID09ICdcMCcpIHsKKwkJCW9wdGluZCsrOworCQkJcGxhY2UgPSBFTVNHOworCQkJLyoKKwkJCSAqIFdlIGZvdW5kIGFuIG9wdGlvbiAoLS0pLCBzbyBpZiB3ZSBza2lwcGVkCisJCQkgKiBub24tb3B0aW9ucywgd2UgaGF2ZSB0byBwZXJtdXRlLgorCQkJICovCisJCQlpZiAobm9ub3B0X2VuZCAhPSAtMSkgeworCQkJCXBlcm11dGVfYXJncyhub25vcHRfc3RhcnQsIG5vbm9wdF9lbmQsCisJCQkJICAgIG9wdGluZCwgbmFyZ3YpOworCQkJCW9wdGluZCAtPSBub25vcHRfZW5kIC0gbm9ub3B0X3N0YXJ0OworCQkJfQorCQkJbm9ub3B0X3N0YXJ0ID0gbm9ub3B0X2VuZCA9IC0xOworCQkJcmV0dXJuICgtMSk7CisJCX0KKwl9CisKKwkvKgorCSAqIENoZWNrIGxvbmcgb3B0aW9ucyBpZjoKKwkgKiAgMSkgd2Ugd2VyZSBwYXNzZWQgc29tZQorCSAqICAyKSB0aGUgYXJnIGlzIG5vdCBqdXN0ICItIgorCSAqICAzKSBlaXRoZXIgdGhlIGFyZyBzdGFydHMgd2l0aCAtLSB3ZSBhcmUgZ2V0b3B0X2xvbmdfb25seSgpCisJICovCisJaWYgKGxvbmdfb3B0aW9ucyAhPSBOVUxMICYmIHBsYWNlICE9IG5hcmd2W29wdGluZF0gJiYKKwkgICAgKCpwbGFjZSA9PSAnLScgfHwgKGZsYWdzICYgRkxBR19MT05HT05MWSkpKSB7CisJCXNob3J0X3RvbyA9IDA7CisjaWZkZWYgR05VX0NPTVBBVElCTEUKKwkJZGFzaF9wcmVmaXggPSBEX1BSRUZJWDsKKyNlbmRpZgorCQlpZiAoKnBsYWNlID09ICctJykgeworCQkJcGxhY2UrKzsJCS8qIC0tZm9vIGxvbmcgb3B0aW9uICovCisjaWZkZWYgR05VX0NPTVBBVElCTEUKKwkJCWRhc2hfcHJlZml4ID0gRERfUFJFRklYOworI2VuZGlmCisJCX0gZWxzZSBpZiAoKnBsYWNlICE9ICc6JyAmJiBzdHJjaHIob3B0aW9ucywgKnBsYWNlKSAhPSBOVUxMKQorCQkJc2hvcnRfdG9vID0gMTsJCS8qIGNvdWxkIGJlIHNob3J0IG9wdGlvbiB0b28gKi8KKworCQlvcHRjaGFyID0gcGFyc2VfbG9uZ19vcHRpb25zKG5hcmd2LCBvcHRpb25zLCBsb25nX29wdGlvbnMsCisJCSAgICBpZHgsIHNob3J0X3RvbywgZmxhZ3MpOworCQlpZiAob3B0Y2hhciAhPSAtMSkgeworCQkJcGxhY2UgPSBFTVNHOworCQkJcmV0dXJuIChvcHRjaGFyKTsKKwkJfQorCX0KKworCWlmICgob3B0Y2hhciA9IChpbnQpKnBsYWNlKyspID09IChpbnQpJzonIHx8CisJICAgIChvcHRjaGFyID09IChpbnQpJy0nICYmICpwbGFjZSAhPSAnXDAnKSB8fAorCSAgICAob2xpID0gc3RyY2hyKG9wdGlvbnMsIG9wdGNoYXIpKSA9PSBOVUxMKSB7CisJCS8qCisJCSAqIElmIHRoZSB1c2VyIHNwZWNpZmllZCAiLSIgYW5kICAnLScgaXNuJ3QgbGlzdGVkIGluCisJCSAqIG9wdGlvbnMsIHJldHVybiAtMSAobm9uLW9wdGlvbikgYXMgcGVyIFBPU0lYLgorCQkgKiBPdGhlcndpc2UsIGl0IGlzIGFuIHVua25vd24gb3B0aW9uIGNoYXJhY3RlciAob3IgJzonKS4KKwkJICovCisJCWlmIChvcHRjaGFyID09IChpbnQpJy0nICYmICpwbGFjZSA9PSAnXDAnKQorCQkJcmV0dXJuICgtMSk7CisJCWlmICghKnBsYWNlKQorCQkJKytvcHRpbmQ7CisjaWZkZWYgR05VX0NPTVBBVElCTEUKKwkJaWYgKFBSSU5UX0VSUk9SKQorCQkJd2FybngocG9zaXhseV9jb3JyZWN0ID8gaWxsb3B0Y2hhciA6IGdudW9wdGNoYXIsCisJCQkgICAgICBvcHRjaGFyKTsKKyNlbHNlCisJCWlmIChQUklOVF9FUlJPUikKKwkJCXdhcm54KGlsbG9wdGNoYXIsIG9wdGNoYXIpOworI2VuZGlmCisJCW9wdG9wdCA9IG9wdGNoYXI7CisJCXJldHVybiAoQkFEQ0gpOworCX0KKwlpZiAobG9uZ19vcHRpb25zICE9IE5VTEwgJiYgb3B0Y2hhciA9PSAnVycgJiYgb2xpWzFdID09ICc7JykgeworCQkvKiAtVyBsb25nLW9wdGlvbiAqLworCQlpZiAoKnBsYWNlKQkJCS8qIG5vIHNwYWNlICovCisJCQkvKiBOT1RISU5HICovOworCQllbHNlIGlmICgrK29wdGluZCA+PSBuYXJnYykgewkvKiBubyBhcmcgKi8KKwkJCXBsYWNlID0gRU1TRzsKKwkJCWlmIChQUklOVF9FUlJPUikKKwkJCQl3YXJueChyZWNhcmdjaGFyLCBvcHRjaGFyKTsKKwkJCW9wdG9wdCA9IG9wdGNoYXI7CisJCQlyZXR1cm4gKEJBREFSRyk7CisJCX0gZWxzZQkJCQkvKiB3aGl0ZSBzcGFjZSAqLworCQkJcGxhY2UgPSBuYXJndltvcHRpbmRdOworI2lmZGVmIEdOVV9DT01QQVRJQkxFCisJCWRhc2hfcHJlZml4ID0gV19QUkVGSVg7CisjZW5kaWYKKwkJb3B0Y2hhciA9IHBhcnNlX2xvbmdfb3B0aW9ucyhuYXJndiwgb3B0aW9ucywgbG9uZ19vcHRpb25zLAorCQkgICAgaWR4LCAwLCBmbGFncyk7CisJCXBsYWNlID0gRU1TRzsKKwkJcmV0dXJuIChvcHRjaGFyKTsKKwl9CisJaWYgKCorK29saSAhPSAnOicpIHsJCQkvKiBkb2Vzbid0IHRha2UgYXJndW1lbnQgKi8KKwkJaWYgKCEqcGxhY2UpCisJCQkrK29wdGluZDsKKwl9IGVsc2UgewkJCQkvKiB0YWtlcyAob3B0aW9uYWwpIGFyZ3VtZW50ICovCisJCW9wdGFyZyA9IE5VTEw7CisJCWlmICgqcGxhY2UpCQkJLyogbm8gd2hpdGUgc3BhY2UgKi8KKwkJCW9wdGFyZyA9IHBsYWNlOworCQllbHNlIGlmIChvbGlbMV0gIT0gJzonKSB7CS8qIGFyZyBub3Qgb3B0aW9uYWwgKi8KKwkJCWlmICgrK29wdGluZCA+PSBuYXJnYykgewkvKiBubyBhcmcgKi8KKwkJCQlwbGFjZSA9IEVNU0c7CisJCQkJaWYgKFBSSU5UX0VSUk9SKQorCQkJCQl3YXJueChyZWNhcmdjaGFyLCBvcHRjaGFyKTsKKwkJCQlvcHRvcHQgPSBvcHRjaGFyOworCQkJCXJldHVybiAoQkFEQVJHKTsKKwkJCX0gZWxzZQorCQkJCW9wdGFyZyA9IG5hcmd2W29wdGluZF07CisJCX0KKwkJcGxhY2UgPSBFTVNHOworCQkrK29wdGluZDsKKwl9CisJLyogZHVtcCBiYWNrIG9wdGlvbiBsZXR0ZXIgKi8KKwlyZXR1cm4gKG9wdGNoYXIpOworfQorCisjaWZkZWYgUkVQTEFDRV9HRVRPUFQKKy8qCisgKiBnZXRvcHQgLS0KKyAqCVBhcnNlIGFyZ2MvYXJndiBhcmd1bWVudCB2ZWN0b3IuCisgKgorICogW2V2ZW50dWFsbHkgdGhpcyB3aWxsIHJlcGxhY2UgdGhlIEJTRCBnZXRvcHRdCisgKi8KK2ludAorZ2V0b3B0KGludCBuYXJnYywgY2hhciAqIGNvbnN0ICpuYXJndiwgY29uc3QgY2hhciAqb3B0aW9ucykKK3sKKworCS8qCisJICogV2UgZG9uJ3QgcGFzcyBGTEFHX1BFUk1VVEUgdG8gZ2V0b3B0X2ludGVybmFsKCkgc2luY2UKKwkgKiB0aGUgQlNEIGdldG9wdCgzKSAodW5saWtlIEdOVSkgaGFzIG5ldmVyIGRvbmUgdGhpcy4KKwkgKgorCSAqIEZ1cnRoZXJtb3JlLCBzaW5jZSBtYW55IHByaXZpbGVnZWQgcHJvZ3JhbXMgY2FsbCBnZXRvcHQoKQorCSAqIGJlZm9yZSBkcm9wcGluZyBwcml2aWxlZ2VzIGl0IG1ha2VzIHNlbnNlIHRvIGtlZXAgdGhpbmdzCisJICogYXMgc2ltcGxlIChhbmQgYnVnLWZyZWUpIGFzIHBvc3NpYmxlLgorCSAqLworCXJldHVybiAoZ2V0b3B0X2ludGVybmFsKG5hcmdjLCBuYXJndiwgb3B0aW9ucywgTlVMTCwgTlVMTCwgMCkpOworfQorI2VuZGlmIC8qIFJFUExBQ0VfR0VUT1BUICovCisKKy8qCisgKiBnZXRvcHRfbG9uZyAtLQorICoJUGFyc2UgYXJnYy9hcmd2IGFyZ3VtZW50IHZlY3Rvci4KKyAqLworaW50CitnZXRvcHRfbG9uZyhpbnQgbmFyZ2MsIGNoYXIgKiBjb25zdCAqbmFyZ3YsIGNvbnN0IGNoYXIgKm9wdGlvbnMsCisJY29uc3Qgc3RydWN0IG9wdGlvbiAqbG9uZ19vcHRpb25zLCBpbnQgKmlkeCkKK3sKKworCXJldHVybiAoZ2V0b3B0X2ludGVybmFsKG5hcmdjLCBuYXJndiwgb3B0aW9ucywgbG9uZ19vcHRpb25zLCBpZHgsCisJICAgIEZMQUdfUEVSTVVURSkpOworfQorCisvKgorICogZ2V0b3B0X2xvbmdfb25seSAtLQorICoJUGFyc2UgYXJnYy9hcmd2IGFyZ3VtZW50IHZlY3Rvci4KKyAqLworaW50CitnZXRvcHRfbG9uZ19vbmx5KGludCBuYXJnYywgY2hhciAqIGNvbnN0ICpuYXJndiwgY29uc3QgY2hhciAqb3B0aW9ucywKKwljb25zdCBzdHJ1Y3Qgb3B0aW9uICpsb25nX29wdGlvbnMsIGludCAqaWR4KQoreworCisJcmV0dXJuIChnZXRvcHRfaW50ZXJuYWwobmFyZ2MsIG5hcmd2LCBvcHRpb25zLCBsb25nX29wdGlvbnMsIGlkeCwKKwkgICAgRkxBR19QRVJNVVRFfEZMQUdfTE9OR09OTFkpKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdGRsaWIvcXNvcnQuYyBiL2xpYmMvdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdGRsaWIvcXNvcnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45M2UyMmNkCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0ZGxpYi9xc29ydC5jCkBAIC0wLDAgKzEsMTk1IEBACisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5MiwgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpZiBkZWZpbmVkKExJQkNfU0NDUykgJiYgIWRlZmluZWQobGludCkKK3N0YXRpYyBjaGFyIHNjY3NpZFtdID0gIkAoIylxc29ydC5jCTguMSAoQmVya2VsZXkpIDYvNC85MyI7CisjZW5kaWYgLyogTElCQ19TQ0NTIGFuZCBub3QgbGludCAqLworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorX19GQlNESUQoIiRGcmVlQlNEJCIpOworCisjaW5jbHVkZSA8c3RkbGliLmg+CisKKyNpZmRlZiBJX0FNX1FTT1JUX1IKK3R5cGVkZWYgaW50CQkgY21wX3Qodm9pZCAqLCBjb25zdCB2b2lkICosIGNvbnN0IHZvaWQgKik7CisjZWxzZQordHlwZWRlZiBpbnQJCSBjbXBfdChjb25zdCB2b2lkICosIGNvbnN0IHZvaWQgKik7CisjZW5kaWYKK3N0YXRpYyBpbmxpbmUgY2hhcgkqbWVkMyhjaGFyICosIGNoYXIgKiwgY2hhciAqLCBjbXBfdCAqLCB2b2lkICopOworc3RhdGljIGlubGluZSB2b2lkCSBzd2FwZnVuYyhjaGFyICosIGNoYXIgKiwgaW50LCBpbnQpOworCisjZGVmaW5lIG1pbihhLCBiKQkoYSkgPCAoYikgPyBhIDogYgorCisvKgorICogUXNvcnQgcm91dGluZSBmcm9tIEJlbnRsZXkgJiBNY0lscm95J3MgIkVuZ2luZWVyaW5nIGEgU29ydCBGdW5jdGlvbiIuCisgKi8KKyNkZWZpbmUgc3dhcGNvZGUoVFlQRSwgcGFybWksIHBhcm1qLCBuKSB7IAkJXAorCWxvbmcgaSA9IChuKSAvIHNpemVvZiAoVFlQRSk7IAkJCVwKKwlUWVBFICpwaSA9IChUWVBFICopIChwYXJtaSk7IAkJXAorCVRZUEUgKnBqID0gKFRZUEUgKikgKHBhcm1qKTsgCQlcCisJZG8geyAJCQkJCQlcCisJCVRZUEUJdCA9ICpwaTsJCVwKKwkJKnBpKysgPSAqcGo7CQkJCVwKKwkJKnBqKysgPSB0OwkJCQlcCisgICAgICAgIH0gd2hpbGUgKC0taSA+IDApOwkJCQlcCit9CisKKyNkZWZpbmUgU1dBUElOSVQoYSwgZXMpIHN3YXB0eXBlID0gKChjaGFyICopYSAtIChjaGFyICopMCkgJSBzaXplb2YobG9uZykgfHwgXAorCWVzICUgc2l6ZW9mKGxvbmcpID8gMiA6IGVzID09IHNpemVvZihsb25nKT8gMCA6IDE7CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorc3dhcGZ1bmMoYSwgYiwgbiwgc3dhcHR5cGUpCisJY2hhciAqYSwgKmI7CisJaW50IG4sIHN3YXB0eXBlOworeworCWlmKHN3YXB0eXBlIDw9IDEpCisJCXN3YXBjb2RlKGxvbmcsIGEsIGIsIG4pCisJZWxzZQorCQlzd2FwY29kZShjaGFyLCBhLCBiLCBuKQorfQorCisjZGVmaW5lIHN3YXAoYSwgYikJCQkJCVwKKwlpZiAoc3dhcHR5cGUgPT0gMCkgewkJCQlcCisJCWxvbmcgdCA9ICoobG9uZyAqKShhKTsJCQlcCisJCSoobG9uZyAqKShhKSA9ICoobG9uZyAqKShiKTsJCVwKKwkJKihsb25nICopKGIpID0gdDsJCQlcCisJfSBlbHNlCQkJCQkJXAorCQlzd2FwZnVuYyhhLCBiLCBlcywgc3dhcHR5cGUpCisKKyNkZWZpbmUgdmVjc3dhcChhLCBiLCBuKSAJaWYgKChuKSA+IDApIHN3YXBmdW5jKGEsIGIsIG4sIHN3YXB0eXBlKQorCisjaWZkZWYgSV9BTV9RU09SVF9SCisjZGVmaW5lCUNNUCh0LCB4LCB5KSAoY21wKCh0KSwgKHgpLCAoeSkpKQorI2Vsc2UKKyNkZWZpbmUJQ01QKHQsIHgsIHkpIChjbXAoKHgpLCAoeSkpKQorI2VuZGlmCisKK3N0YXRpYyBpbmxpbmUgY2hhciAqCittZWQzKGNoYXIgKmEsIGNoYXIgKmIsIGNoYXIgKmMsIGNtcF90ICpjbXAsIHZvaWQgKnRodW5rCisjaWZuZGVmIElfQU1fUVNPUlRfUgorX191bnVzZWQKKyNlbmRpZgorKQoreworCXJldHVybiBDTVAodGh1bmssIGEsIGIpIDwgMCA/CisJICAgICAgIChDTVAodGh1bmssIGIsIGMpIDwgMCA/IGIgOiAoQ01QKHRodW5rLCBhLCBjKSA8IDAgPyBjIDogYSApKQorICAgICAgICAgICAgICA6KENNUCh0aHVuaywgYiwgYykgPiAwID8gYiA6IChDTVAodGh1bmssIGEsIGMpIDwgMCA/IGEgOiBjICkpOworfQorCisjaWZkZWYgSV9BTV9RU09SVF9SCit2b2lkCitxc29ydF9yKHZvaWQgKmEsIHNpemVfdCBuLCBzaXplX3QgZXMsIHZvaWQgKnRodW5rLCBjbXBfdCAqY21wKQorI2Vsc2UKKyNkZWZpbmUgdGh1bmsgTlVMTAordm9pZAorcXNvcnQodm9pZCAqYSwgc2l6ZV90IG4sIHNpemVfdCBlcywgY21wX3QgKmNtcCkKKyNlbmRpZgoreworCWNoYXIgKnBhLCAqcGIsICpwYywgKnBkLCAqcGwsICpwbSwgKnBuOworCXNpemVfdCBkLCByOworCWludCBjbXBfcmVzdWx0OworCWludCBzd2FwdHlwZSwgc3dhcF9jbnQ7CisKK2xvb3A6CVNXQVBJTklUKGEsIGVzKTsKKwlzd2FwX2NudCA9IDA7CisJaWYgKG4gPCA3KSB7CisJCWZvciAocG0gPSAoY2hhciAqKWEgKyBlczsgcG0gPCAoY2hhciAqKWEgKyBuICogZXM7IHBtICs9IGVzKQorCQkJZm9yIChwbCA9IHBtOyAKKwkJCSAgICAgcGwgPiAoY2hhciAqKWEgJiYgQ01QKHRodW5rLCBwbCAtIGVzLCBwbCkgPiAwOworCQkJICAgICBwbCAtPSBlcykKKwkJCQlzd2FwKHBsLCBwbCAtIGVzKTsKKwkJcmV0dXJuOworCX0KKwlwbSA9IChjaGFyICopYSArIChuIC8gMikgKiBlczsKKwlpZiAobiA+IDcpIHsKKwkJcGwgPSBhOworCQlwbiA9IChjaGFyICopYSArIChuIC0gMSkgKiBlczsKKwkJaWYgKG4gPiA0MCkgeworCQkJZCA9IChuIC8gOCkgKiBlczsKKwkJCXBsID0gbWVkMyhwbCwgcGwgKyBkLCBwbCArIDIgKiBkLCBjbXAsIHRodW5rKTsKKwkJCXBtID0gbWVkMyhwbSAtIGQsIHBtLCBwbSArIGQsIGNtcCwgdGh1bmspOworCQkJcG4gPSBtZWQzKHBuIC0gMiAqIGQsIHBuIC0gZCwgcG4sIGNtcCwgdGh1bmspOworCQl9CisJCXBtID0gbWVkMyhwbCwgcG0sIHBuLCBjbXAsIHRodW5rKTsKKwl9CisJc3dhcChhLCBwbSk7CisJcGEgPSBwYiA9IChjaGFyICopYSArIGVzOworCisJcGMgPSBwZCA9IChjaGFyICopYSArIChuIC0gMSkgKiBlczsKKwlmb3IgKDs7KSB7CisJCXdoaWxlIChwYiA8PSBwYyAmJiAoY21wX3Jlc3VsdCA9IENNUCh0aHVuaywgcGIsIGEpKSA8PSAwKSB7CisJCQlpZiAoY21wX3Jlc3VsdCA9PSAwKSB7CisJCQkJc3dhcF9jbnQgPSAxOworCQkJCXN3YXAocGEsIHBiKTsKKwkJCQlwYSArPSBlczsKKwkJCX0KKwkJCXBiICs9IGVzOworCQl9CisJCXdoaWxlIChwYiA8PSBwYyAmJiAoY21wX3Jlc3VsdCA9IENNUCh0aHVuaywgcGMsIGEpKSA+PSAwKSB7CisJCQlpZiAoY21wX3Jlc3VsdCA9PSAwKSB7CisJCQkJc3dhcF9jbnQgPSAxOworCQkJCXN3YXAocGMsIHBkKTsKKwkJCQlwZCAtPSBlczsKKwkJCX0KKwkJCXBjIC09IGVzOworCQl9CisJCWlmIChwYiA+IHBjKQorCQkJYnJlYWs7CisJCXN3YXAocGIsIHBjKTsKKwkJc3dhcF9jbnQgPSAxOworCQlwYiArPSBlczsKKwkJcGMgLT0gZXM7CisJfQorCWlmIChzd2FwX2NudCA9PSAwKSB7ICAvKiBTd2l0Y2ggdG8gaW5zZXJ0aW9uIHNvcnQgKi8KKwkJZm9yIChwbSA9IChjaGFyICopYSArIGVzOyBwbSA8IChjaGFyICopYSArIG4gKiBlczsgcG0gKz0gZXMpCisJCQlmb3IgKHBsID0gcG07IAorCQkJICAgICBwbCA+IChjaGFyICopYSAmJiBDTVAodGh1bmssIHBsIC0gZXMsIHBsKSA+IDA7CisJCQkgICAgIHBsIC09IGVzKQorCQkJCXN3YXAocGwsIHBsIC0gZXMpOworCQlyZXR1cm47CisJfQorCisJcG4gPSAoY2hhciAqKWEgKyBuICogZXM7CisJciA9IG1pbihwYSAtIChjaGFyICopYSwgcGIgLSBwYSk7CisJdmVjc3dhcChhLCBwYiAtIHIsIHIpOworCXIgPSBtaW4ocGQgLSBwYywgcG4gLSBwZCAtIGVzKTsKKwl2ZWNzd2FwKHBiLCBwbiAtIHIsIHIpOworCWlmICgociA9IHBiIC0gcGEpID4gZXMpCisjaWZkZWYgSV9BTV9RU09SVF9SCisJCXFzb3J0X3IoYSwgciAvIGVzLCBlcywgdGh1bmssIGNtcCk7CisjZWxzZQorCQlxc29ydChhLCByIC8gZXMsIGVzLCBjbXApOworI2VuZGlmCisJaWYgKChyID0gcGQgLSBwYykgPiBlcykgeworCQkvKiBJdGVyYXRlIHJhdGhlciB0aGFuIHJlY3Vyc2UgdG8gc2F2ZSBzdGFjayBzcGFjZSAqLworCQlhID0gcG4gLSByOworCQluID0gciAvIGVzOworCQlnb3RvIGxvb3A7CisJfQorLyoJCXFzb3J0KHBuIC0gciwgciAvIGVzLCBlcywgY21wKTsqLworfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0ZGxpYi9yZWFscGF0aC5jIGIvbGliYy91cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0ZGxpYi9yZWFscGF0aC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmZDU0NTcKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RkbGliL3JlYWxwYXRoLmMKQEAgLTAsMCArMSwyNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDMgQ29uc3RhbnRpbiBTLiBTdmludHNvZmYgPGtvc3Rpa0BpY2x1Yi5uc3UucnU+CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBUaGUgbmFtZXMgb2YgdGhlIGF1dGhvcnMgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZQorICogICAgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuCisgKiAgICBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpZiBkZWZpbmVkKExJQkNfU0NDUykgJiYgIWRlZmluZWQobGludCkKK3N0YXRpYyBjaGFyIHNjY3NpZFtdID0gIkAoIylyZWFscGF0aC5jCTguMSAoQmVya2VsZXkpIDIvMTYvOTQiOworI2VuZGlmIC8qIExJQkNfU0NDUyBhbmQgbm90IGxpbnQgKi8KKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJTRCQiKTsKKworI2luY2x1ZGUgIm5hbWVzcGFjZS5oIgorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisKKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgInVuLW5hbWVzcGFjZS5oIgorCisvKgorICogRmluZCB0aGUgcmVhbCBuYW1lIG9mIHBhdGgsIGJ5IHJlbW92aW5nIGFsbCAiLiIsICIuLiIgYW5kIHN5bWxpbmsKKyAqIGNvbXBvbmVudHMuICBSZXR1cm5zIChyZXNvbHZlZCkgb24gc3VjY2Vzcywgb3IgKE5VTEwpIG9uIGZhaWx1cmUsCisgKiBpbiB3aGljaCBjYXNlIHRoZSBwYXRoIHdoaWNoIGNhdXNlZCB0cm91YmxlIGlzIGxlZnQgaW4gKHJlc29sdmVkKS4KKyAqLworY2hhciAqCityZWFscGF0aChjb25zdCBjaGFyICogX19yZXN0cmljdCBwYXRoLCBjaGFyICogX19yZXN0cmljdCByZXNvbHZlZCkKK3sKKwlzdHJ1Y3Qgc3RhdCBzYjsKKwljaGFyICpwLCAqcSwgKnM7CisJc2l6ZV90IGxlZnRfbGVuLCByZXNvbHZlZF9sZW47CisJdW5zaWduZWQgc3ltbGlua3M7CisJaW50IG0sIHNsZW47CisJY2hhciBsZWZ0W1BBVEhfTUFYXSwgbmV4dF90b2tlbltQQVRIX01BWF0sIHN5bWxpbmtbUEFUSF9NQVhdOworCisJaWYgKHBhdGggPT0gTlVMTCkgeworCQllcnJubyA9IEVJTlZBTDsKKwkJcmV0dXJuIChOVUxMKTsKKwl9CisJaWYgKHBhdGhbMF0gPT0gJ1wwJykgeworCQllcnJubyA9IEVOT0VOVDsKKwkJcmV0dXJuIChOVUxMKTsKKwl9CisJaWYgKHJlc29sdmVkID09IE5VTEwpIHsKKwkJcmVzb2x2ZWQgPSBtYWxsb2MoUEFUSF9NQVgpOworCQlpZiAocmVzb2x2ZWQgPT0gTlVMTCkKKwkJCXJldHVybiAoTlVMTCk7CisJCW0gPSAxOworCX0gZWxzZQorCQltID0gMDsKKwlzeW1saW5rcyA9IDA7CisJaWYgKHBhdGhbMF0gPT0gJy8nKSB7CisJCXJlc29sdmVkWzBdID0gJy8nOworCQlyZXNvbHZlZFsxXSA9ICdcMCc7CisJCWlmIChwYXRoWzFdID09ICdcMCcpCisJCQlyZXR1cm4gKHJlc29sdmVkKTsKKwkJcmVzb2x2ZWRfbGVuID0gMTsKKwkJbGVmdF9sZW4gPSBzdHJsY3B5KGxlZnQsIHBhdGggKyAxLCBzaXplb2YobGVmdCkpOworCX0gZWxzZSB7CisJCWlmIChnZXRjd2QocmVzb2x2ZWQsIFBBVEhfTUFYKSA9PSBOVUxMKSB7CisJCQlpZiAobSkKKwkJCQlmcmVlKHJlc29sdmVkKTsKKwkJCWVsc2UgeworCQkJCXJlc29sdmVkWzBdID0gJy4nOworCQkJCXJlc29sdmVkWzFdID0gJ1wwJzsKKwkJCX0KKwkJCXJldHVybiAoTlVMTCk7CisJCX0KKwkJcmVzb2x2ZWRfbGVuID0gc3RybGVuKHJlc29sdmVkKTsKKwkJbGVmdF9sZW4gPSBzdHJsY3B5KGxlZnQsIHBhdGgsIHNpemVvZihsZWZ0KSk7CisJfQorCWlmIChsZWZ0X2xlbiA+PSBzaXplb2YobGVmdCkgfHwgcmVzb2x2ZWRfbGVuID49IFBBVEhfTUFYKSB7CisJCWlmIChtKQorCQkJZnJlZShyZXNvbHZlZCk7CisJCWVycm5vID0gRU5BTUVUT09MT05HOworCQlyZXR1cm4gKE5VTEwpOworCX0KKworCS8qCisJICogSXRlcmF0ZSBvdmVyIHBhdGggY29tcG9uZW50cyBpbiBgbGVmdCcuCisJICovCisJd2hpbGUgKGxlZnRfbGVuICE9IDApIHsKKwkJLyoKKwkJICogRXh0cmFjdCB0aGUgbmV4dCBwYXRoIGNvbXBvbmVudCBhbmQgYWRqdXN0IGBsZWZ0JworCQkgKiBhbmQgaXRzIGxlbmd0aC4KKwkJICovCisJCXAgPSBzdHJjaHIobGVmdCwgJy8nKTsKKwkJcyA9IHAgPyBwIDogbGVmdCArIGxlZnRfbGVuOworCQlpZiAocyAtIGxlZnQgPj0gc2l6ZW9mKG5leHRfdG9rZW4pKSB7CisJCQlpZiAobSkKKwkJCQlmcmVlKHJlc29sdmVkKTsKKwkJCWVycm5vID0gRU5BTUVUT09MT05HOworCQkJcmV0dXJuIChOVUxMKTsKKwkJfQorCQltZW1jcHkobmV4dF90b2tlbiwgbGVmdCwgcyAtIGxlZnQpOworCQluZXh0X3Rva2VuW3MgLSBsZWZ0XSA9ICdcMCc7CisJCWxlZnRfbGVuIC09IHMgLSBsZWZ0OworCQlpZiAocCAhPSBOVUxMKQorCQkJbWVtbW92ZShsZWZ0LCBzICsgMSwgbGVmdF9sZW4gKyAxKTsKKwkJaWYgKHJlc29sdmVkW3Jlc29sdmVkX2xlbiAtIDFdICE9ICcvJykgeworCQkJaWYgKHJlc29sdmVkX2xlbiArIDEgPj0gUEFUSF9NQVgpIHsKKwkJCQlpZiAobSkKKwkJCQkJZnJlZShyZXNvbHZlZCk7CisJCQkJZXJybm8gPSBFTkFNRVRPT0xPTkc7CisJCQkJcmV0dXJuIChOVUxMKTsKKwkJCX0KKwkJCXJlc29sdmVkW3Jlc29sdmVkX2xlbisrXSA9ICcvJzsKKwkJCXJlc29sdmVkW3Jlc29sdmVkX2xlbl0gPSAnXDAnOworCQl9CisJCWlmIChuZXh0X3Rva2VuWzBdID09ICdcMCcpIHsKKwkJCS8qCisJCQkgKiBIYW5kbGUgY29uc2VxdWVudGlhbCBzbGFzaGVzLiAgVGhlIHBhdGgKKwkJCSAqIGJlZm9yZSBzbGFzaCBzaGFsbCBwb2ludCB0byBhIGRpcmVjdG9yeS4KKwkJCSAqCisJCQkgKiBPbmx5IHRoZSB0cmFpbGluZyBzbGFzaGVzIGFyZSBub3QgY292ZXJlZAorCQkJICogYnkgb3RoZXIgY2hlY2tzIGluIHRoZSBsb29wLCBidXQgd2UgdmVyaWZ5CisJCQkgKiB0aGUgcHJlZml4IGZvciBhbnkgKHJhcmUpICIvLyIgb3IgIi9cMCIKKwkJCSAqIG9jY3VyZW5jZSB0byBub3QgaW1wbGVtZW50IGxvb2thaGVhZC4KKwkJCSAqLworCQkJaWYgKGxzdGF0KHJlc29sdmVkLCAmc2IpICE9IDApIHsKKwkJCQlpZiAobSkKKwkJCQkJZnJlZShyZXNvbHZlZCk7CisJCQkJcmV0dXJuIChOVUxMKTsKKwkJCX0KKwkJCWlmICghU19JU0RJUihzYi5zdF9tb2RlKSkgeworCQkJCWlmIChtKQorCQkJCQlmcmVlKHJlc29sdmVkKTsKKwkJCQllcnJubyA9IEVOT1RESVI7CisJCQkJcmV0dXJuIChOVUxMKTsKKwkJCX0KKwkJCWNvbnRpbnVlOworCQl9CisJCWVsc2UgaWYgKHN0cmNtcChuZXh0X3Rva2VuLCAiLiIpID09IDApCisJCQljb250aW51ZTsKKwkJZWxzZSBpZiAoc3RyY21wKG5leHRfdG9rZW4sICIuLiIpID09IDApIHsKKwkJCS8qCisJCQkgKiBTdHJpcCB0aGUgbGFzdCBwYXRoIGNvbXBvbmVudCBleGNlcHQgd2hlbiB3ZSBoYXZlCisJCQkgKiBzaW5nbGUgIi8iCisJCQkgKi8KKwkJCWlmIChyZXNvbHZlZF9sZW4gPiAxKSB7CisJCQkJcmVzb2x2ZWRbcmVzb2x2ZWRfbGVuIC0gMV0gPSAnXDAnOworCQkJCXEgPSBzdHJyY2hyKHJlc29sdmVkLCAnLycpICsgMTsKKwkJCQkqcSA9ICdcMCc7CisJCQkJcmVzb2x2ZWRfbGVuID0gcSAtIHJlc29sdmVkOworCQkJfQorCQkJY29udGludWU7CisJCX0KKworCQkvKgorCQkgKiBBcHBlbmQgdGhlIG5leHQgcGF0aCBjb21wb25lbnQgYW5kIGxzdGF0KCkgaXQuCisJCSAqLworCQlyZXNvbHZlZF9sZW4gPSBzdHJsY2F0KHJlc29sdmVkLCBuZXh0X3Rva2VuLCBQQVRIX01BWCk7CisJCWlmIChyZXNvbHZlZF9sZW4gPj0gUEFUSF9NQVgpIHsKKwkJCWlmIChtKQorCQkJCWZyZWUocmVzb2x2ZWQpOworCQkJZXJybm8gPSBFTkFNRVRPT0xPTkc7CisJCQlyZXR1cm4gKE5VTEwpOworCQl9CisJCWlmIChsc3RhdChyZXNvbHZlZCwgJnNiKSAhPSAwKSB7CisJCQlpZiAobSkKKwkJCQlmcmVlKHJlc29sdmVkKTsKKwkJCXJldHVybiAoTlVMTCk7CisJCX0KKwkJaWYgKFNfSVNMTksoc2Iuc3RfbW9kZSkpIHsKKwkJCWlmIChzeW1saW5rcysrID4gTUFYU1lNTElOS1MpIHsKKwkJCQlpZiAobSkKKwkJCQkJZnJlZShyZXNvbHZlZCk7CisJCQkJZXJybm8gPSBFTE9PUDsKKwkJCQlyZXR1cm4gKE5VTEwpOworCQkJfQorCQkJc2xlbiA9IHJlYWRsaW5rKHJlc29sdmVkLCBzeW1saW5rLCBzaXplb2Yoc3ltbGluaykgLSAxKTsKKwkJCWlmIChzbGVuIDwgMCkgeworCQkJCWlmIChtKQorCQkJCQlmcmVlKHJlc29sdmVkKTsKKwkJCQlyZXR1cm4gKE5VTEwpOworCQkJfQorCQkJc3ltbGlua1tzbGVuXSA9ICdcMCc7CisJCQlpZiAoc3ltbGlua1swXSA9PSAnLycpIHsKKwkJCQlyZXNvbHZlZFsxXSA9IDA7CisJCQkJcmVzb2x2ZWRfbGVuID0gMTsKKwkJCX0gZWxzZSBpZiAocmVzb2x2ZWRfbGVuID4gMSkgeworCQkJCS8qIFN0cmlwIHRoZSBsYXN0IHBhdGggY29tcG9uZW50LiAqLworCQkJCXJlc29sdmVkW3Jlc29sdmVkX2xlbiAtIDFdID0gJ1wwJzsKKwkJCQlxID0gc3RycmNocihyZXNvbHZlZCwgJy8nKSArIDE7CisJCQkJKnEgPSAnXDAnOworCQkJCXJlc29sdmVkX2xlbiA9IHEgLSByZXNvbHZlZDsKKwkJCX0KKworCQkJLyoKKwkJCSAqIElmIHRoZXJlIGFyZSBhbnkgcGF0aCBjb21wb25lbnRzIGxlZnQsIHRoZW4KKwkJCSAqIGFwcGVuZCB0aGVtIHRvIHN5bWxpbmsuIFRoZSByZXN1bHQgaXMgcGxhY2VkCisJCQkgKiBpbiBgbGVmdCcuCisJCQkgKi8KKwkJCWlmIChwICE9IE5VTEwpIHsKKwkJCQlpZiAoc3ltbGlua1tzbGVuIC0gMV0gIT0gJy8nKSB7CisJCQkJCWlmIChzbGVuICsgMSA+PSBzaXplb2Yoc3ltbGluaykpIHsKKwkJCQkJCWlmIChtKQorCQkJCQkJCWZyZWUocmVzb2x2ZWQpOworCQkJCQkJZXJybm8gPSBFTkFNRVRPT0xPTkc7CisJCQkJCQlyZXR1cm4gKE5VTEwpOworCQkJCQl9CisJCQkJCXN5bWxpbmtbc2xlbl0gPSAnLyc7CisJCQkJCXN5bWxpbmtbc2xlbiArIDFdID0gMDsKKwkJCQl9CisJCQkJbGVmdF9sZW4gPSBzdHJsY2F0KHN5bWxpbmssIGxlZnQsCisJCQkJICAgIHNpemVvZihzeW1saW5rKSk7CisJCQkJaWYgKGxlZnRfbGVuID49IHNpemVvZihsZWZ0KSkgeworCQkJCQlpZiAobSkKKwkJCQkJCWZyZWUocmVzb2x2ZWQpOworCQkJCQllcnJubyA9IEVOQU1FVE9PTE9ORzsKKwkJCQkJcmV0dXJuIChOVUxMKTsKKwkJCQl9CisJCQl9CisJCQlsZWZ0X2xlbiA9IHN0cmxjcHkobGVmdCwgc3ltbGluaywgc2l6ZW9mKGxlZnQpKTsKKwkJfQorCX0KKworCS8qCisJICogUmVtb3ZlIHRyYWlsaW5nIHNsYXNoIGV4Y2VwdCB3aGVuIHRoZSByZXNvbHZlZCBwYXRobmFtZQorCSAqIGlzIGEgc2luZ2xlICIvIi4KKwkgKi8KKwlpZiAocmVzb2x2ZWRfbGVuID4gMSAmJiByZXNvbHZlZFtyZXNvbHZlZF9sZW4gLSAxXSA9PSAnLycpCisJCXJlc29sdmVkW3Jlc29sdmVkX2xlbiAtIDFdID0gJ1wwJzsKKwlyZXR1cm4gKHJlc29sdmVkKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvd2NoYXIvd2NwY3B5LmMgYi9saWJjL3Vwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RyaW5nL3djcGNweS5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBsaWJjL3djaGFyL3djcGNweS5jCnJlbmFtZSB0byBsaWJjL3Vwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RyaW5nL3djcGNweS5jCmRpZmYgLS1naXQgYS9saWJjL3djaGFyL3djcG5jcHkuYyBiL2xpYmMvdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdHJpbmcvd2NwbmNweS5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBsaWJjL3djaGFyL3djcG5jcHkuYwpyZW5hbWUgdG8gbGliYy91cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0cmluZy93Y3BuY3B5LmMKZGlmZiAtLWdpdCBhL2xpYmMvd2NoYXIvd2NzY2FzZWNtcC5jIGIvbGliYy91cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0cmluZy93Y3NjYXNlY21wLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGxpYmMvd2NoYXIvd2NzY2FzZWNtcC5jCnJlbmFtZSB0byBsaWJjL3Vwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RyaW5nL3djc2Nhc2VjbXAuYwpkaWZmIC0tZ2l0IGEvbGliYy93Y2hhci93Y3NjYXQuYyBiL2xpYmMvdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdHJpbmcvd2NzY2F0LmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGxpYmMvd2NoYXIvd2NzY2F0LmMKcmVuYW1lIHRvIGxpYmMvdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdHJpbmcvd2NzY2F0LmMKZGlmZiAtLWdpdCBhL2xpYmMvd2NoYXIvd2NzY2hyLmMgYi9saWJjL3Vwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RyaW5nL3djc2Noci5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBsaWJjL3djaGFyL3djc2Noci5jCnJlbmFtZSB0byBsaWJjL3Vwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RyaW5nL3djc2Noci5jCmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RyaW5nL3djc2NtcC5jIGIvbGliYy91cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0cmluZy93Y3NjbXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMmFiZTRjCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0cmluZy93Y3NjbXAuYwpAQCAtMCwwICsxLDU2IEBACisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQorICogQ2hyaXMgVG9yZWsuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKyNpZiBkZWZpbmVkKExJQkNfU0NDUykgJiYgIWRlZmluZWQobGludCkKK3N0YXRpYyBjaGFyIHNjY3NpZFtdID0gIkAoIylzdHJjbXAuYwk4LjEgKEJlcmtlbGV5KSA2LzQvOTMiOworI2lmIDAKK19fUkNTSUQoIiROZXRCU0Q6IHdjc2NtcC5jLHYgMS4zIDIwMDEvMDEvMDUgMTI6MTM6MTIgaXRvanVuIEV4cCAkIik7CisjZW5kaWYKKyNlbmRpZiAvKiBMSUJDX1NDQ1MgYW5kIG5vdCBsaW50ICovCitfX0ZCU0RJRCgiJEZyZWVCU0QkIik7CisKKyNpbmNsdWRlIDx3Y2hhci5oPgorCisvKgorICogQ29tcGFyZSBzdHJpbmdzLgorICovCitpbnQKK3djc2NtcChjb25zdCB3Y2hhcl90ICpzMSwgY29uc3Qgd2NoYXJfdCAqczIpCit7CisKKwl3aGlsZSAoKnMxID09ICpzMisrKQorCQlpZiAoKnMxKysgPT0gJ1wwJykKKwkJCXJldHVybiAoMCk7CisJLyogWFhYIGFzc3VtZXMgd2NoYXJfdCA9IGludCAqLworCXJldHVybiAoKihjb25zdCB1bnNpZ25lZCBpbnQgKilzMSAtICooY29uc3QgdW5zaWduZWQgaW50ICopLS1zMik7Cit9CmRpZmYgLS1naXQgYS9saWJjL3djaGFyL3djc2NweS5jIGIvbGliYy91cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0cmluZy93Y3NjcHkuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbGliYy93Y2hhci93Y3NjcHkuYwpyZW5hbWUgdG8gbGliYy91cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0cmluZy93Y3NjcHkuYwpkaWZmIC0tZ2l0IGEvbGliYy93Y2hhci93Y3Njc3BuLmMgYi9saWJjL3Vwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RyaW5nL3djc2NzcG4uYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbGliYy93Y2hhci93Y3Njc3BuLmMKcmVuYW1lIHRvIGxpYmMvdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdHJpbmcvd2NzY3Nwbi5jCmRpZmYgLS1naXQgYS9saWJjL3djaGFyL3djc2R1cC5jIGIvbGliYy91cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0cmluZy93Y3NkdXAuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbGliYy93Y2hhci93Y3NkdXAuYwpyZW5hbWUgdG8gbGliYy91cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0cmluZy93Y3NkdXAuYwpkaWZmIC0tZ2l0IGEvbGliYy93Y2hhci93Y3NsY2F0LmMgYi9saWJjL3Vwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RyaW5nL3djc2xjYXQuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbGliYy93Y2hhci93Y3NsY2F0LmMKcmVuYW1lIHRvIGxpYmMvdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdHJpbmcvd2NzbGNhdC5jCmRpZmYgLS1naXQgYS9saWJjL3djaGFyL3djc2xjcHkuYyBiL2xpYmMvdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdHJpbmcvd2NzbGNweS5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBsaWJjL3djaGFyL3djc2xjcHkuYwpyZW5hbWUgdG8gbGliYy91cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0cmluZy93Y3NsY3B5LmMKZGlmZiAtLWdpdCBhL2xpYmMvd2NoYXIvd2NzbGVuLmMgYi9saWJjL3Vwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RyaW5nL3djc2xlbi5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBsaWJjL3djaGFyL3djc2xlbi5jCnJlbmFtZSB0byBsaWJjL3Vwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RyaW5nL3djc2xlbi5jCmRpZmYgLS1naXQgYS9saWJjL3djaGFyL3djc25jYXNlY21wLmMgYi9saWJjL3Vwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RyaW5nL3djc25jYXNlY21wLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGxpYmMvd2NoYXIvd2NzbmNhc2VjbXAuYwpyZW5hbWUgdG8gbGliYy91cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0cmluZy93Y3NuY2FzZWNtcC5jCmRpZmYgLS1naXQgYS9saWJjL3djaGFyL3djc25jYXQuYyBiL2xpYmMvdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdHJpbmcvd2NzbmNhdC5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBsaWJjL3djaGFyL3djc25jYXQuYwpyZW5hbWUgdG8gbGliYy91cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0cmluZy93Y3NuY2F0LmMKZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdHJpbmcvd2NzbmNtcC5jIGIvbGliYy91cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0cmluZy93Y3NuY21wLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODIzNmQ5NgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdHJpbmcvd2NzbmNtcC5jCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDE5ODksIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisjaWYgMAorI2lmIGRlZmluZWQoTElCQ19TQ0NTKSAmJiAhZGVmaW5lZChsaW50KQorc3RhdGljIGNoYXIgc2Njc2lkW10gPSAiQCgjKXN0cm5jbXAuYwk4LjEgKEJlcmtlbGV5KSA2LzQvOTMiOworX19SQ1NJRCgiJE5ldEJTRDogd2NzbmNtcC5jLHYgMS4zIDIwMDEvMDEvMDUgMTI6MTM6MTMgaXRvanVuIEV4cCAkIik7CisjZW5kaWYgLyogTElCQ19TQ0NTIGFuZCBub3QgbGludCAqLworI2VuZGlmCitfX0ZCU0RJRCgiJEZyZWVCU0QkIik7CisKKyNpbmNsdWRlIDx3Y2hhci5oPgorCitpbnQKK3djc25jbXAoY29uc3Qgd2NoYXJfdCAqczEsIGNvbnN0IHdjaGFyX3QgKnMyLCBzaXplX3QgbikKK3sKKworCWlmIChuID09IDApCisJCXJldHVybiAoMCk7CisJZG8geworCQlpZiAoKnMxICE9ICpzMisrKSB7CisJCQkvKiBYWFggYXNzdW1lcyB3Y2hhcl90ID0gaW50ICovCisJCQlyZXR1cm4gKCooY29uc3QgdW5zaWduZWQgaW50ICopczEgLQorCQkJICAgICooY29uc3QgdW5zaWduZWQgaW50ICopLS1zMik7CisJCX0KKwkJaWYgKCpzMSsrID09IDApCisJCQlicmVhazsKKwl9IHdoaWxlICgtLW4gIT0gMCk7CisJcmV0dXJuICgwKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdHJpbmcvd2NzbmNweS5jIGIvbGliYy91cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0cmluZy93Y3NuY3B5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjE1ZTlhMQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdHJpbmcvd2NzbmNweS5jCkBAIC0wLDAgKzEsNjQgQEAKKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5CisgKiBDaHJpcyBUb3Jlay4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2lmIDAKKyNpZiBkZWZpbmVkKExJQkNfU0NDUykgJiYgIWRlZmluZWQobGludCkKK3N0YXRpYyBjaGFyIHNjY3NpZFtdID0gIkAoIylzdHJuY3B5LmMJOC4xIChCZXJrZWxleSkgNi80LzkzIjsKKyNlbmRpZiAvKiBMSUJDX1NDQ1MgYW5kIG5vdCBsaW50ICovCisjZW5kaWYKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJTRCQiKTsKKworI2luY2x1ZGUgPHdjaGFyLmg+CisKKy8qCisgKiBDb3B5IHNyYyB0byBkc3QsIHRydW5jYXRpbmcgb3IgbnVsbC1wYWRkaW5nIHRvIGFsd2F5cyBjb3B5IG4gYnl0ZXMuCisgKiBSZXR1cm4gZHN0LgorICovCit3Y2hhcl90ICoKK3djc25jcHkod2NoYXJfdCAqIF9fcmVzdHJpY3QgZHN0LCBjb25zdCB3Y2hhcl90ICogX19yZXN0cmljdCBzcmMsIHNpemVfdCBuKQoreworCWlmIChuICE9IDApIHsKKwkJd2NoYXJfdCAqZCA9IGRzdDsKKwkJY29uc3Qgd2NoYXJfdCAqcyA9IHNyYzsKKworCQlkbyB7CisJCQlpZiAoKCpkKysgPSAqcysrKSA9PSBMJ1wwJykgeworCQkJCS8qIE5VTCBwYWQgdGhlIHJlbWFpbmluZyBuLTEgYnl0ZXMgKi8KKwkJCQl3aGlsZSAoLS1uICE9IDApCisJCQkJCSpkKysgPSBMJ1wwJzsKKwkJCQlicmVhazsKKwkJCX0KKwkJfSB3aGlsZSAoLS1uICE9IDApOworCX0KKwlyZXR1cm4gKGRzdCk7Cit9CmRpZmYgLS1naXQgYS9saWJjL3djaGFyL3djc25sZW4uYyBiL2xpYmMvdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdHJpbmcvd2Nzbmxlbi5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBsaWJjL3djaGFyL3djc25sZW4uYwpyZW5hbWUgdG8gbGliYy91cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0cmluZy93Y3NubGVuLmMKZGlmZiAtLWdpdCBhL2xpYmMvd2NoYXIvd2NzcGJyay5jIGIvbGliYy91cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0cmluZy93Y3NwYnJrLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGxpYmMvd2NoYXIvd2NzcGJyay5jCnJlbmFtZSB0byBsaWJjL3Vwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RyaW5nL3djc3BicmsuYwpkaWZmIC0tZ2l0IGEvbGliYy93Y2hhci93Y3NyY2hyLmMgYi9saWJjL3Vwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RyaW5nL3djc3JjaHIuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbGliYy93Y2hhci93Y3NyY2hyLmMKcmVuYW1lIHRvIGxpYmMvdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdHJpbmcvd2NzcmNoci5jCmRpZmYgLS1naXQgYS9saWJjL3djaGFyL3djc3Nwbi5jIGIvbGliYy91cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0cmluZy93Y3NzcG4uYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbGliYy93Y2hhci93Y3NzcG4uYwpyZW5hbWUgdG8gbGliYy91cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0cmluZy93Y3NzcG4uYwpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0cmluZy93Y3NzdHIuYyBiL2xpYmMvdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdHJpbmcvd2Nzc3RyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2U1OThhNgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdHJpbmcvd2Nzc3RyLmMKQEAgLTAsMCArMSw2MyBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKKyAqIENocmlzIFRvcmVrLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaWYgMAorI2lmIGRlZmluZWQoTElCQ19TQ0NTKSAmJiAhZGVmaW5lZChsaW50KQorc3RhdGljIGNoYXIgc2Njc2lkW10gPSAiQCgjKXN0cnN0ci5jCTguMSAoQmVya2VsZXkpIDYvNC85MyI7CisjZW5kaWYgLyogTElCQ19TQ0NTIGFuZCBub3QgbGludCAqLworI2VuZGlmCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CitfX0ZCU0RJRCgiJEZyZWVCU0QkIik7CisKKyNpbmNsdWRlIDx3Y2hhci5oPgorCisvKgorICogRmluZCB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiBmaW5kIGluIHMuCisgKi8KK3djaGFyX3QgKgord2Nzc3RyKGNvbnN0IHdjaGFyX3QgKiBfX3Jlc3RyaWN0IHMsIGNvbnN0IHdjaGFyX3QgKiBfX3Jlc3RyaWN0IGZpbmQpCit7CisJd2NoYXJfdCBjLCBzYzsKKwlzaXplX3QgbGVuOworCisJaWYgKChjID0gKmZpbmQrKykgIT0gTCdcMCcpIHsKKwkJbGVuID0gd2NzbGVuKGZpbmQpOworCQlkbyB7CisJCQlkbyB7CisJCQkJaWYgKChzYyA9ICpzKyspID09IEwnXDAnKQorCQkJCQlyZXR1cm4gKE5VTEwpOworCQkJfSB3aGlsZSAoc2MgIT0gYyk7CisJCX0gd2hpbGUgKHdjc25jbXAocywgZmluZCwgbGVuKSAhPSAwKTsKKwkJcy0tOworCX0KKwlyZXR1cm4gKCh3Y2hhcl90ICopcyk7Cit9CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RyaW5nL3djc3Rvay5jIGIvbGliYy91cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0cmluZy93Y3N0b2suYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NDFmYmQ0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0cmluZy93Y3N0b2suYwpAQCAtMCwwICsxLDg2IEBACisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5OCBTb2Z0d2V5ciBMTEMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIHN0cnRva19yLCBmcm9tIEJlcmtlbGV5IHN0cnRvaworICogT2N0IDEzLCAxOTk4IGJ5IFdlcyBQZXRlcnMgPHdlc0Bzb2Z0d2V5ci5jb20+CisgKgorICogQ29weXJpZ2h0IChjKSAxOTg4LCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2VzLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZXMsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBTT0ZUV0VZUiBMTEMsIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMKKyAqIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBCisgKiBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBTT0ZUV0VZUiBMTEMsIFRIRQorICogUkVHRU5UUywgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQKKyAqIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCisgKiBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJTRCQiKTsKKworI2luY2x1ZGUgPHdjaGFyLmg+CisKK3djaGFyX3QgKgord2NzdG9rKHdjaGFyX3QgKiBfX3Jlc3RyaWN0IHMsIGNvbnN0IHdjaGFyX3QgKiBfX3Jlc3RyaWN0IGRlbGltLAorICAgIHdjaGFyX3QgKiogX19yZXN0cmljdCBsYXN0KQoreworCWNvbnN0IHdjaGFyX3QgKnNwYW5wOworCXdjaGFyX3QgKnRvazsKKwl3Y2hhcl90IGMsIHNjOworCisJaWYgKHMgPT0gTlVMTCAmJiAocyA9ICpsYXN0KSA9PSBOVUxMKQorCQlyZXR1cm4gKE5VTEwpOworCisJLyoKKwkgKiBTa2lwIChzcGFuKSBsZWFkaW5nIGRlbGltaXRlcnMgKHMgKz0gd2Nzc3BuKHMsIGRlbGltKSwgc29ydCBvZikuCisJICovCitjb250OgorCWMgPSAqcysrOworCWZvciAoc3BhbnAgPSBkZWxpbTsgKHNjID0gKnNwYW5wKyspICE9IEwnXDAnOykgeworCQlpZiAoYyA9PSBzYykKKwkJCWdvdG8gY29udDsKKwl9CisKKwlpZiAoYyA9PSBMJ1wwJykgewkvKiBubyBub24tZGVsaW1pdGVyIGNoYXJhY3RlcnMgKi8KKwkJKmxhc3QgPSBOVUxMOworCQlyZXR1cm4gKE5VTEwpOworCX0KKwl0b2sgPSBzIC0gMTsKKworCS8qCisJICogU2NhbiB0b2tlbiAoc2NhbiBmb3IgZGVsaW1pdGVyczogcyArPSB3Y3Njc3BuKHMsIGRlbGltKSwgc29ydCBvZikuCisJICogTm90ZSB0aGF0IGRlbGltIG11c3QgaGF2ZSBvbmUgTlVMOyB3ZSBzdG9wIGlmIHdlIHNlZSB0aGF0LCB0b28uCisJICovCisJZm9yICg7OykgeworCQljID0gKnMrKzsKKwkJc3BhbnAgPSBkZWxpbTsKKwkJZG8geworCQkJaWYgKChzYyA9ICpzcGFucCsrKSA9PSBjKSB7CisJCQkJaWYgKGMgPT0gTCdcMCcpCisJCQkJCXMgPSBOVUxMOworCQkJCWVsc2UKKwkJCQkJc1stMV0gPSBMJ1wwJzsKKwkJCQkqbGFzdCA9IHM7CisJCQkJcmV0dXJuICh0b2spOworCQkJfQorCQl9IHdoaWxlIChzYyAhPSBMJ1wwJyk7CisJfQorCS8qIE5PVFJFQUNIRUQgKi8KK30KZGlmZiAtLWdpdCBhL2xpYmMvd2NoYXIvd21lbWNoci5jIGIvbGliYy91cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0cmluZy93bWVtY2hyLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGxpYmMvd2NoYXIvd21lbWNoci5jCnJlbmFtZSB0byBsaWJjL3Vwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RyaW5nL3dtZW1jaHIuYwpkaWZmIC0tZ2l0IGEvbGliYy93Y2hhci93bWVtY21wLmMgYi9saWJjL3Vwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RyaW5nL3dtZW1jbXAuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbGliYy93Y2hhci93bWVtY21wLmMKcmVuYW1lIHRvIGxpYmMvdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdHJpbmcvd21lbWNtcC5jCmRpZmYgLS1naXQgYS9saWJjL3djaGFyL3dtZW1jcHkuYyBiL2xpYmMvdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdHJpbmcvd21lbWNweS5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBsaWJjL3djaGFyL3dtZW1jcHkuYwpyZW5hbWUgdG8gbGliYy91cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0cmluZy93bWVtY3B5LmMKZGlmZiAtLWdpdCBhL2xpYmMvd2NoYXIvd21lbW1vdmUuYyBiL2xpYmMvdXBzdHJlYW0tZnJlZWJzZC9saWIvbGliYy9zdHJpbmcvd21lbW1vdmUuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbGliYy93Y2hhci93bWVtbW92ZS5jCnJlbmFtZSB0byBsaWJjL3Vwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RyaW5nL3dtZW1tb3ZlLmMKZGlmZiAtLWdpdCBhL2xpYmMvd2NoYXIvd21lbXNldC5jIGIvbGliYy91cHN0cmVhbS1mcmVlYnNkL2xpYi9saWJjL3N0cmluZy93bWVtc2V0LmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGxpYmMvd2NoYXIvd21lbXNldC5jCnJlbmFtZSB0byBsaWJjL3Vwc3RyZWFtLWZyZWVic2QvbGliL2xpYmMvc3RyaW5nL3dtZW1zZXQuYwpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1mcmVlYnNkL2xpYmNfcHJpdmF0ZS5oIGIvbGliYy91cHN0cmVhbS1mcmVlYnNkL2xpYmNfcHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjZGJiN2UKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLWZyZWVic2QvbGliY19wcml2YXRlLmgKQEAgLTAsMCArMSwyOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpZm5kZWYgX0JJT05JQ19GUkVFQlNEX0xJQkNfUFJJVkFURV9IX2luY2x1ZGVkCisjZGVmaW5lIF9CSU9OSUNfRlJFRUJTRF9MSUJDX1BSSVZBVEVfSF9pbmNsdWRlZAorCisjZGVmaW5lIEZMT0NLRklMRShmcCkgICBkbyB7IGlmIChfX2lzdGhyZWFkZWQpIGZsb2NrZmlsZShmcCk7IH0gd2hpbGUgKDApCisjZGVmaW5lIEZVTkxPQ0tGSUxFKGZwKSBkbyB7IGlmIChfX2lzdGhyZWFkZWQpIGZ1bmxvY2tmaWxlKGZwKTsgfSB3aGlsZSAoMCkKKworI2RlZmluZSBTVERJT19USFJFQURfTE9DSygpICAgLyogVE9ETzogdW50aWwgd2UgaGF2ZSB0aGUgRnJlZUJTRCBmaW5kZnAuYywgdGhpcyBpcyB1c2VsZXNzLiAqLworI2RlZmluZSBTVERJT19USFJFQURfVU5MT0NLKCkgLyogVE9ETzogdW50aWwgd2UgaGF2ZSB0aGUgRnJlZUJTRCBmaW5kZnAuYywgdGhpcyBpcyB1c2VsZXNzLiAqLworCisjZGVmaW5lIE9SSUVOVChmcCwgbykgLyogT25seSBuZWVkZWQgZm9yIHdpZGUtY2hhcmFjdGVyIHN0cmVhbSBzdXBwb3J0LiAqLworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tZnJlZWJzZC9uYW1lc3BhY2UuaCBiL2xpYmMvdXBzdHJlYW0tZnJlZWJzZC9uYW1lc3BhY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOTgwYjU3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1mcmVlYnNkL25hbWVzcGFjZS5oCkBAIC0wLDAgKzEsMjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaWZuZGVmIF9CSU9OSUNfRlJFRUJTRF9OQU1FU1BBQ0VfSF9pbmNsdWRlZAorI2RlZmluZSBfQklPTklDX0ZSRUVCU0RfTkFNRVNQQUNFX0hfaW5jbHVkZWQKKworX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiaGlkZGVuIikpKSBjaGFyKiBfbWt0ZW1wKGNoYXIqKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLWZyZWVic2Qvc3BpbmxvY2suaCBiL2xpYmMvdXBzdHJlYW0tZnJlZWJzZC9zcGlubG9jay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1YzM3ODUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLWZyZWVic2Qvc3BpbmxvY2suaApAQCAtMCwwICsxLDIyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2lmbmRlZiBfQklPTklDX0ZSRUVCU0RfU1BJTkxPQ0tfSF9pbmNsdWRlZAorI2RlZmluZSBfQklPTklDX0ZSRUVCU0RfU1BJTkxPQ0tfSF9pbmNsdWRlZAorCisvKiBUT0RPOiB1bnRpbCB3ZSBoYXZlIHRoZSBGcmVlQlNEIGZpbmRmcC5jLCB0aGlzIGlzIHVzZWxlc3MuICovCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1mcmVlYnNkL3VuLW5hbWVzcGFjZS5oIGIvbGliYy91cHN0cmVhbS1mcmVlYnNkL3VuLW5hbWVzcGFjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzZjg1MGUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLWZyZWVic2QvdW4tbmFtZXNwYWNlLmgKQEAgLTAsMCArMSwyMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpZm5kZWYgX0JJT05JQ19GUkVFQlNEX05BTUVTUEFDRV9IX2luY2x1ZGVkCisjZGVmaW5lIF9CSU9OSUNfRlJFRUJTRF9OQU1FU1BBQ0VfSF9pbmNsdWRlZAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tbmV0YnNkL1JFQURNRS50eHQgYi9saWJjL3Vwc3RyZWFtLW5ldGJzZC9SRUFETUUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2YWY2ZWIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW5ldGJzZC9SRUFETUUudHh0CkBAIC0wLDAgKzEsOSBAQAorVGhpcyBkaXJlY3RvcnkgY29udGFpbnMgdXBzdHJlYW0gTmV0QlNEIHNvdXJjZS4gWW91IHNob3VsZCBub3QgZWRpdCB0aGVzZQorZmlsZXMgZGlyZWN0bHkuIE1ha2UgZml4ZXMgdXBzdHJlYW0gYW5kIHRoZW4gcHVsbCBkb3duIHRoZSBuZXcgdmVyc2lvbiBvZgordGhlIGZpbGUuCisKK05vdGUgdGhhdCBjb2RlIGluIHRoZSBvdGhlciAnbmV0YnNkJyBkaXJlY3RvcnkgY29udGFpbnMgQW5kcm9pZCBtb2RpZmljYXRpb25zLgorV2Ugc2hvdWxkIHdvcmsgdG93YXJkcyBnZXR0aW5nIGFzIG1hbnkgb2YgdGhvc2UgY2hhbmdlcyBhcyBwb3NzaWJsZSB1cHN0cmVhbQorYW5kIHRoZW4gbG9zaW5nIHRob3NlIGZpbGVzIGluIGZhdm9yIG9mIHB1cmUgdXBzdHJlYW0gY29waWVzIGhlcmUgaW5zdGVhZC4KKworVE9ETzogd3JpdGUgYSBzY3JpcHQgdG8gbWFrZSB0aGlzIHByb2Nlc3MgYXV0b21hdGVkLgpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1uZXRic2QvY29tbW9uL2xpYi9saWJjL2hhc2gvc2hhMS9zaGExLmMgYi9saWJjL3Vwc3RyZWFtLW5ldGJzZC9jb21tb24vbGliL2xpYmMvaGFzaC9zaGExL3NoYTEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYmQ2MGZjCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1uZXRic2QvY29tbW9uL2xpYi9saWJjL2hhc2gvc2hhMS9zaGExLmMKQEAgLTAsMCArMSwyODkgQEAKKy8qCSROZXRCU0Q6IHNoYTEuYyx2IDEuNiAyMDA5LzExLzA2IDIwOjMxOjE4IGpvZXJnIEV4cCAkCSovCisvKgkkT3BlbkJTRDogc2hhMS5jLHYgMS45IDE5OTcvMDcvMjMgMjE6MTI6MzIga3N0YWlsZXkgRXhwICQJKi8KKworLyoKKyAqIFNIQS0xIGluIEMKKyAqIEJ5IFN0ZXZlIFJlaWQgPHN0ZXZlQGVkbXdlYi5jb20+CisgKiAxMDAlIFB1YmxpYyBEb21haW4KKyAqCisgKiBUZXN0IFZlY3RvcnMgKGZyb20gRklQUyBQVUIgMTgwLTEpCisgKiAiYWJjIgorICogICBBOTk5M0UzNiA0NzA2ODE2QSBCQTNFMjU3MSA3ODUwQzI2QyA5Q0QwRDg5RAorICogImFiY2RiY2RlY2RlZmRlZmdlZmdoZmdoaWdoaWpoaWpraWprbGprbG1rbG1ubG1ub21ub3Bub3BxIgorICogICA4NDk4M0U0NCAxQzNCRDI2RSBCQUFFNEFBMSBGOTUxMjlFNSBFNTQ2NzBGMQorICogQSBtaWxsaW9uIHJlcGV0aXRpb25zIG9mICJhIgorICogICAzNEFBOTczQyBENEM0REFBNCBGNjFFRUIyQiBEQkFEMjczMSA2NTM0MDE2RgorICovCisKKyNkZWZpbmUgU0hBMUhBTkRTT0ZGCQkvKiBDb3BpZXMgZGF0YSBiZWZvcmUgbWVzc2luZyB3aXRoIGl0LiAqLworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisKKyNpZiBkZWZpbmVkKF9LRVJORUwpIHx8IGRlZmluZWQoX1NUQU5EQUxPTkUpCitfX0tFUk5FTF9SQ1NJRCgwLCAiJE5ldEJTRDogc2hhMS5jLHYgMS42IDIwMDkvMTEvMDYgMjA6MzE6MTggam9lcmcgRXhwICQiKTsKKworI2luY2x1ZGUgPGxpYi9saWJrZXJuL2xpYmtlcm4uaD4KKworI2Vsc2UKKworI2lmIGRlZmluZWQoTElCQ19TQ0NTKSAmJiAhZGVmaW5lZChsaW50KQorX19SQ1NJRCgiJE5ldEJTRDogc2hhMS5jLHYgMS42IDIwMDkvMTEvMDYgMjA6MzE6MTggam9lcmcgRXhwICQiKTsKKyNlbmRpZiAvKiBMSUJDX1NDQ1MgYW5kIG5vdCBsaW50ICovCisKKyNpbmNsdWRlICJuYW1lc3BhY2UuaCIKKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2VuZGlmCisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc2hhMS5oPgorCisKKyNpZiBIQVZFX05CVE9PTF9DT05GSUdfSAorI2luY2x1ZGUgIm5idG9vbF9jb25maWcuaCIKKyNlbmRpZgorCisjaWYgIUhBVkVfU0hBMV9ICisKKyNkZWZpbmUgcm9sKHZhbHVlLCBiaXRzKSAoKCh2YWx1ZSkgPDwgKGJpdHMpKSB8ICgodmFsdWUpID4+ICgzMiAtIChiaXRzKSkpKQorCisvKgorICogYmxrMCgpIGFuZCBibGsoKSBwZXJmb3JtIHRoZSBpbml0aWFsIGV4cGFuZC4KKyAqIEkgZ290IHRoZSBpZGVhIG9mIGV4cGFuZGluZyBkdXJpbmcgdGhlIHJvdW5kIGZ1bmN0aW9uIGZyb20gU1NMZWF5CisgKi8KKyNpZiBCWVRFX09SREVSID09IExJVFRMRV9FTkRJQU4KKyMgZGVmaW5lIGJsazAoaSkgKGJsb2NrLT5sW2ldID0gKHJvbChibG9jay0+bFtpXSwyNCkmMHhGRjAwRkYwMCkgXAorICAgIHwocm9sKGJsb2NrLT5sW2ldLDgpJjB4MDBGRjAwRkYpKQorI2Vsc2UKKyMgZGVmaW5lIGJsazAoaSkgYmxvY2stPmxbaV0KKyNlbmRpZgorI2RlZmluZSBibGsoaSkgKGJsb2NrLT5sW2kmMTVdID0gcm9sKGJsb2NrLT5sWyhpKzEzKSYxNV1eYmxvY2stPmxbKGkrOCkmMTVdIFwKKyAgICBeYmxvY2stPmxbKGkrMikmMTVdXmJsb2NrLT5sW2kmMTVdLDEpKQorCisvKgorICogKFIwK1IxKSwgUjIsIFIzLCBSNCBhcmUgdGhlIGRpZmZlcmVudCBvcGVyYXRpb25zIChyb3VuZHMpIHVzZWQgaW4gU0hBMQorICovCisjZGVmaW5lIFIwKHYsdyx4LHkseixpKSB6Kz0oKHcmKHheeSkpXnkpK2JsazAoaSkrMHg1QTgyNzk5OStyb2wodiw1KTt3PXJvbCh3LDMwKTsKKyNkZWZpbmUgUjEodix3LHgseSx6LGkpIHorPSgodyYoeF55KSleeSkrYmxrKGkpKzB4NUE4Mjc5OTkrcm9sKHYsNSk7dz1yb2wodywzMCk7CisjZGVmaW5lIFIyKHYsdyx4LHkseixpKSB6Kz0od154XnkpK2JsayhpKSsweDZFRDlFQkExK3JvbCh2LDUpO3c9cm9sKHcsMzApOworI2RlZmluZSBSMyh2LHcseCx5LHosaSkgeis9KCgod3x4KSZ5KXwodyZ4KSkrYmxrKGkpKzB4OEYxQkJDREMrcm9sKHYsNSk7dz1yb2wodywzMCk7CisjZGVmaW5lIFI0KHYsdyx4LHkseixpKSB6Kz0od154XnkpK2JsayhpKSsweENBNjJDMUQ2K3JvbCh2LDUpO3c9cm9sKHcsMzApOworCisKKyNpZiAhZGVmaW5lZChfS0VSTkVMKSAmJiAhZGVmaW5lZChfU1RBTkRBTE9ORSkKKyNpZiBkZWZpbmVkKF9fd2Vha19hbGlhcykKK19fd2Vha19hbGlhcyhTSEExVHJhbnNmb3JtLF9TSEExVHJhbnNmb3JtKQorX193ZWFrX2FsaWFzKFNIQTFJbml0LF9TSEExSW5pdCkKK19fd2Vha19hbGlhcyhTSEExVXBkYXRlLF9TSEExVXBkYXRlKQorX193ZWFrX2FsaWFzKFNIQTFGaW5hbCxfU0hBMUZpbmFsKQorI2VuZGlmCisjZW5kaWYKKwordHlwZWRlZiB1bmlvbiB7CisgICAgdWludDhfdCBjWzY0XTsKKyAgICB1aW50MzJfdCBsWzE2XTsKK30gQ0hBUjY0TE9ORzE2OworCisvKiBvbGQgc3BhcmM2NCBnY2MgY291bGQgbm90IGNvbXBpbGUgdGhpcyAqLworI3VuZGVmIFNQQVJDNjRfR0NDX1dPUktBUk9VTkQKKyNpZiBkZWZpbmVkKF9fc3BhcmM2NF9fKSAmJiBkZWZpbmVkKF9fR05VQ19fKSAmJiBfX0dOVUNfXyA8IDMKKyNkZWZpbmUgU1BBUkM2NF9HQ0NfV09SS0FST1VORAorI2VuZGlmCisKKyNpZmRlZiBTUEFSQzY0X0dDQ19XT1JLQVJPVU5ECit2b2lkIGRvX1IwMSh1aW50MzJfdCAqYSwgdWludDMyX3QgKmIsIHVpbnQzMl90ICpjLCB1aW50MzJfdCAqZCwgdWludDMyX3QgKmUsIENIQVI2NExPTkcxNiAqKTsKK3ZvaWQgZG9fUjIodWludDMyX3QgKmEsIHVpbnQzMl90ICpiLCB1aW50MzJfdCAqYywgdWludDMyX3QgKmQsIHVpbnQzMl90ICplLCBDSEFSNjRMT05HMTYgKik7Cit2b2lkIGRvX1IzKHVpbnQzMl90ICphLCB1aW50MzJfdCAqYiwgdWludDMyX3QgKmMsIHVpbnQzMl90ICpkLCB1aW50MzJfdCAqZSwgQ0hBUjY0TE9ORzE2ICopOwordm9pZCBkb19SNCh1aW50MzJfdCAqYSwgdWludDMyX3QgKmIsIHVpbnQzMl90ICpjLCB1aW50MzJfdCAqZCwgdWludDMyX3QgKmUsIENIQVI2NExPTkcxNiAqKTsKKworI2RlZmluZSBuUjAodix3LHgseSx6LGkpIFIwKCp2LCp3LCp4LCp5LCp6LGkpCisjZGVmaW5lIG5SMSh2LHcseCx5LHosaSkgUjEoKnYsKncsKngsKnksKnosaSkKKyNkZWZpbmUgblIyKHYsdyx4LHkseixpKSBSMigqdiwqdywqeCwqeSwqeixpKQorI2RlZmluZSBuUjModix3LHgseSx6LGkpIFIzKCp2LCp3LCp4LCp5LCp6LGkpCisjZGVmaW5lIG5SNCh2LHcseCx5LHosaSkgUjQoKnYsKncsKngsKnksKnosaSkKKwordm9pZAorZG9fUjAxKHVpbnQzMl90ICphLCB1aW50MzJfdCAqYiwgdWludDMyX3QgKmMsIHVpbnQzMl90ICpkLCB1aW50MzJfdCAqZSwgQ0hBUjY0TE9ORzE2ICpibG9jaykKK3sKKyAgICBuUjAoYSxiLGMsZCxlLCAwKTsgblIwKGUsYSxiLGMsZCwgMSk7IG5SMChkLGUsYSxiLGMsIDIpOyBuUjAoYyxkLGUsYSxiLCAzKTsKKyAgICBuUjAoYixjLGQsZSxhLCA0KTsgblIwKGEsYixjLGQsZSwgNSk7IG5SMChlLGEsYixjLGQsIDYpOyBuUjAoZCxlLGEsYixjLCA3KTsKKyAgICBuUjAoYyxkLGUsYSxiLCA4KTsgblIwKGIsYyxkLGUsYSwgOSk7IG5SMChhLGIsYyxkLGUsMTApOyBuUjAoZSxhLGIsYyxkLDExKTsKKyAgICBuUjAoZCxlLGEsYixjLDEyKTsgblIwKGMsZCxlLGEsYiwxMyk7IG5SMChiLGMsZCxlLGEsMTQpOyBuUjAoYSxiLGMsZCxlLDE1KTsKKyAgICBuUjEoZSxhLGIsYyxkLDE2KTsgblIxKGQsZSxhLGIsYywxNyk7IG5SMShjLGQsZSxhLGIsMTgpOyBuUjEoYixjLGQsZSxhLDE5KTsKK30KKwordm9pZAorZG9fUjIodWludDMyX3QgKmEsIHVpbnQzMl90ICpiLCB1aW50MzJfdCAqYywgdWludDMyX3QgKmQsIHVpbnQzMl90ICplLCBDSEFSNjRMT05HMTYgKmJsb2NrKQoreworICAgIG5SMihhLGIsYyxkLGUsMjApOyBuUjIoZSxhLGIsYyxkLDIxKTsgblIyKGQsZSxhLGIsYywyMik7IG5SMihjLGQsZSxhLGIsMjMpOworICAgIG5SMihiLGMsZCxlLGEsMjQpOyBuUjIoYSxiLGMsZCxlLDI1KTsgblIyKGUsYSxiLGMsZCwyNik7IG5SMihkLGUsYSxiLGMsMjcpOworICAgIG5SMihjLGQsZSxhLGIsMjgpOyBuUjIoYixjLGQsZSxhLDI5KTsgblIyKGEsYixjLGQsZSwzMCk7IG5SMihlLGEsYixjLGQsMzEpOworICAgIG5SMihkLGUsYSxiLGMsMzIpOyBuUjIoYyxkLGUsYSxiLDMzKTsgblIyKGIsYyxkLGUsYSwzNCk7IG5SMihhLGIsYyxkLGUsMzUpOworICAgIG5SMihlLGEsYixjLGQsMzYpOyBuUjIoZCxlLGEsYixjLDM3KTsgblIyKGMsZCxlLGEsYiwzOCk7IG5SMihiLGMsZCxlLGEsMzkpOworfQorCit2b2lkCitkb19SMyh1aW50MzJfdCAqYSwgdWludDMyX3QgKmIsIHVpbnQzMl90ICpjLCB1aW50MzJfdCAqZCwgdWludDMyX3QgKmUsIENIQVI2NExPTkcxNiAqYmxvY2spCit7CisgICAgblIzKGEsYixjLGQsZSw0MCk7IG5SMyhlLGEsYixjLGQsNDEpOyBuUjMoZCxlLGEsYixjLDQyKTsgblIzKGMsZCxlLGEsYiw0Myk7CisgICAgblIzKGIsYyxkLGUsYSw0NCk7IG5SMyhhLGIsYyxkLGUsNDUpOyBuUjMoZSxhLGIsYyxkLDQ2KTsgblIzKGQsZSxhLGIsYyw0Nyk7CisgICAgblIzKGMsZCxlLGEsYiw0OCk7IG5SMyhiLGMsZCxlLGEsNDkpOyBuUjMoYSxiLGMsZCxlLDUwKTsgblIzKGUsYSxiLGMsZCw1MSk7CisgICAgblIzKGQsZSxhLGIsYyw1Mik7IG5SMyhjLGQsZSxhLGIsNTMpOyBuUjMoYixjLGQsZSxhLDU0KTsgblIzKGEsYixjLGQsZSw1NSk7CisgICAgblIzKGUsYSxiLGMsZCw1Nik7IG5SMyhkLGUsYSxiLGMsNTcpOyBuUjMoYyxkLGUsYSxiLDU4KTsgblIzKGIsYyxkLGUsYSw1OSk7Cit9CisKK3ZvaWQKK2RvX1I0KHVpbnQzMl90ICphLCB1aW50MzJfdCAqYiwgdWludDMyX3QgKmMsIHVpbnQzMl90ICpkLCB1aW50MzJfdCAqZSwgQ0hBUjY0TE9ORzE2ICpibG9jaykKK3sKKyAgICBuUjQoYSxiLGMsZCxlLDYwKTsgblI0KGUsYSxiLGMsZCw2MSk7IG5SNChkLGUsYSxiLGMsNjIpOyBuUjQoYyxkLGUsYSxiLDYzKTsKKyAgICBuUjQoYixjLGQsZSxhLDY0KTsgblI0KGEsYixjLGQsZSw2NSk7IG5SNChlLGEsYixjLGQsNjYpOyBuUjQoZCxlLGEsYixjLDY3KTsKKyAgICBuUjQoYyxkLGUsYSxiLDY4KTsgblI0KGIsYyxkLGUsYSw2OSk7IG5SNChhLGIsYyxkLGUsNzApOyBuUjQoZSxhLGIsYyxkLDcxKTsKKyAgICBuUjQoZCxlLGEsYixjLDcyKTsgblI0KGMsZCxlLGEsYiw3Myk7IG5SNChiLGMsZCxlLGEsNzQpOyBuUjQoYSxiLGMsZCxlLDc1KTsKKyAgICBuUjQoZSxhLGIsYyxkLDc2KTsgblI0KGQsZSxhLGIsYyw3Nyk7IG5SNChjLGQsZSxhLGIsNzgpOyBuUjQoYixjLGQsZSxhLDc5KTsKK30KKyNlbmRpZgorCisvKgorICogSGFzaCBhIHNpbmdsZSA1MTItYml0IGJsb2NrLiBUaGlzIGlzIHRoZSBjb3JlIG9mIHRoZSBhbGdvcml0aG0uCisgKi8KK3ZvaWQgU0hBMVRyYW5zZm9ybSh1aW50MzJfdCBzdGF0ZVs1XSwgY29uc3QgdWludDhfdCBidWZmZXJbNjRdKQoreworICAgIHVpbnQzMl90IGEsIGIsIGMsIGQsIGU7CisgICAgQ0hBUjY0TE9ORzE2ICpibG9jazsKKworI2lmZGVmIFNIQTFIQU5EU09GRgorICAgIENIQVI2NExPTkcxNiB3b3Jrc3BhY2U7CisjZW5kaWYKKworICAgIF9ESUFHQVNTRVJUKGJ1ZmZlciAhPSAwKTsKKyAgICBfRElBR0FTU0VSVChzdGF0ZSAhPSAwKTsKKworI2lmZGVmIFNIQTFIQU5EU09GRgorICAgIGJsb2NrID0gJndvcmtzcGFjZTsKKyAgICAodm9pZCltZW1jcHkoYmxvY2ssIGJ1ZmZlciwgNjQpOworI2Vsc2UKKyAgICBibG9jayA9IChDSEFSNjRMT05HMTYgKikodm9pZCAqKWJ1ZmZlcjsKKyNlbmRpZgorCisgICAgLyogQ29weSBjb250ZXh0LT5zdGF0ZVtdIHRvIHdvcmtpbmcgdmFycyAqLworICAgIGEgPSBzdGF0ZVswXTsKKyAgICBiID0gc3RhdGVbMV07CisgICAgYyA9IHN0YXRlWzJdOworICAgIGQgPSBzdGF0ZVszXTsKKyAgICBlID0gc3RhdGVbNF07CisKKyNpZmRlZiBTUEFSQzY0X0dDQ19XT1JLQVJPVU5ECisgICAgZG9fUjAxKCZhLCAmYiwgJmMsICZkLCAmZSwgYmxvY2spOworICAgIGRvX1IyKCZhLCAmYiwgJmMsICZkLCAmZSwgYmxvY2spOworICAgIGRvX1IzKCZhLCAmYiwgJmMsICZkLCAmZSwgYmxvY2spOworICAgIGRvX1I0KCZhLCAmYiwgJmMsICZkLCAmZSwgYmxvY2spOworI2Vsc2UKKyAgICAvKiA0IHJvdW5kcyBvZiAyMCBvcGVyYXRpb25zIGVhY2guIExvb3AgdW5yb2xsZWQuICovCisgICAgUjAoYSxiLGMsZCxlLCAwKTsgUjAoZSxhLGIsYyxkLCAxKTsgUjAoZCxlLGEsYixjLCAyKTsgUjAoYyxkLGUsYSxiLCAzKTsKKyAgICBSMChiLGMsZCxlLGEsIDQpOyBSMChhLGIsYyxkLGUsIDUpOyBSMChlLGEsYixjLGQsIDYpOyBSMChkLGUsYSxiLGMsIDcpOworICAgIFIwKGMsZCxlLGEsYiwgOCk7IFIwKGIsYyxkLGUsYSwgOSk7IFIwKGEsYixjLGQsZSwxMCk7IFIwKGUsYSxiLGMsZCwxMSk7CisgICAgUjAoZCxlLGEsYixjLDEyKTsgUjAoYyxkLGUsYSxiLDEzKTsgUjAoYixjLGQsZSxhLDE0KTsgUjAoYSxiLGMsZCxlLDE1KTsKKyAgICBSMShlLGEsYixjLGQsMTYpOyBSMShkLGUsYSxiLGMsMTcpOyBSMShjLGQsZSxhLGIsMTgpOyBSMShiLGMsZCxlLGEsMTkpOworICAgIFIyKGEsYixjLGQsZSwyMCk7IFIyKGUsYSxiLGMsZCwyMSk7IFIyKGQsZSxhLGIsYywyMik7IFIyKGMsZCxlLGEsYiwyMyk7CisgICAgUjIoYixjLGQsZSxhLDI0KTsgUjIoYSxiLGMsZCxlLDI1KTsgUjIoZSxhLGIsYyxkLDI2KTsgUjIoZCxlLGEsYixjLDI3KTsKKyAgICBSMihjLGQsZSxhLGIsMjgpOyBSMihiLGMsZCxlLGEsMjkpOyBSMihhLGIsYyxkLGUsMzApOyBSMihlLGEsYixjLGQsMzEpOworICAgIFIyKGQsZSxhLGIsYywzMik7IFIyKGMsZCxlLGEsYiwzMyk7IFIyKGIsYyxkLGUsYSwzNCk7IFIyKGEsYixjLGQsZSwzNSk7CisgICAgUjIoZSxhLGIsYyxkLDM2KTsgUjIoZCxlLGEsYixjLDM3KTsgUjIoYyxkLGUsYSxiLDM4KTsgUjIoYixjLGQsZSxhLDM5KTsKKyAgICBSMyhhLGIsYyxkLGUsNDApOyBSMyhlLGEsYixjLGQsNDEpOyBSMyhkLGUsYSxiLGMsNDIpOyBSMyhjLGQsZSxhLGIsNDMpOworICAgIFIzKGIsYyxkLGUsYSw0NCk7IFIzKGEsYixjLGQsZSw0NSk7IFIzKGUsYSxiLGMsZCw0Nik7IFIzKGQsZSxhLGIsYyw0Nyk7CisgICAgUjMoYyxkLGUsYSxiLDQ4KTsgUjMoYixjLGQsZSxhLDQ5KTsgUjMoYSxiLGMsZCxlLDUwKTsgUjMoZSxhLGIsYyxkLDUxKTsKKyAgICBSMyhkLGUsYSxiLGMsNTIpOyBSMyhjLGQsZSxhLGIsNTMpOyBSMyhiLGMsZCxlLGEsNTQpOyBSMyhhLGIsYyxkLGUsNTUpOworICAgIFIzKGUsYSxiLGMsZCw1Nik7IFIzKGQsZSxhLGIsYyw1Nyk7IFIzKGMsZCxlLGEsYiw1OCk7IFIzKGIsYyxkLGUsYSw1OSk7CisgICAgUjQoYSxiLGMsZCxlLDYwKTsgUjQoZSxhLGIsYyxkLDYxKTsgUjQoZCxlLGEsYixjLDYyKTsgUjQoYyxkLGUsYSxiLDYzKTsKKyAgICBSNChiLGMsZCxlLGEsNjQpOyBSNChhLGIsYyxkLGUsNjUpOyBSNChlLGEsYixjLGQsNjYpOyBSNChkLGUsYSxiLGMsNjcpOworICAgIFI0KGMsZCxlLGEsYiw2OCk7IFI0KGIsYyxkLGUsYSw2OSk7IFI0KGEsYixjLGQsZSw3MCk7IFI0KGUsYSxiLGMsZCw3MSk7CisgICAgUjQoZCxlLGEsYixjLDcyKTsgUjQoYyxkLGUsYSxiLDczKTsgUjQoYixjLGQsZSxhLDc0KTsgUjQoYSxiLGMsZCxlLDc1KTsKKyAgICBSNChlLGEsYixjLGQsNzYpOyBSNChkLGUsYSxiLGMsNzcpOyBSNChjLGQsZSxhLGIsNzgpOyBSNChiLGMsZCxlLGEsNzkpOworI2VuZGlmCisKKyAgICAvKiBBZGQgdGhlIHdvcmtpbmcgdmFycyBiYWNrIGludG8gY29udGV4dC5zdGF0ZVtdICovCisgICAgc3RhdGVbMF0gKz0gYTsKKyAgICBzdGF0ZVsxXSArPSBiOworICAgIHN0YXRlWzJdICs9IGM7CisgICAgc3RhdGVbM10gKz0gZDsKKyAgICBzdGF0ZVs0XSArPSBlOworCisgICAgLyogV2lwZSB2YXJpYWJsZXMgKi8KKyAgICBhID0gYiA9IGMgPSBkID0gZSA9IDA7Cit9CisKKworLyoKKyAqIFNIQTFJbml0IC0gSW5pdGlhbGl6ZSBuZXcgY29udGV4dAorICovCit2b2lkIFNIQTFJbml0KFNIQTFfQ1RYICpjb250ZXh0KQoreworCisgICAgX0RJQUdBU1NFUlQoY29udGV4dCAhPSAwKTsKKworICAgIC8qIFNIQTEgaW5pdGlhbGl6YXRpb24gY29uc3RhbnRzICovCisgICAgY29udGV4dC0+c3RhdGVbMF0gPSAweDY3NDUyMzAxOworICAgIGNvbnRleHQtPnN0YXRlWzFdID0gMHhFRkNEQUI4OTsKKyAgICBjb250ZXh0LT5zdGF0ZVsyXSA9IDB4OThCQURDRkU7CisgICAgY29udGV4dC0+c3RhdGVbM10gPSAweDEwMzI1NDc2OworICAgIGNvbnRleHQtPnN0YXRlWzRdID0gMHhDM0QyRTFGMDsKKyAgICBjb250ZXh0LT5jb3VudFswXSA9IGNvbnRleHQtPmNvdW50WzFdID0gMDsKK30KKworCisvKgorICogUnVuIHlvdXIgZGF0YSB0aHJvdWdoIHRoaXMuCisgKi8KK3ZvaWQgU0hBMVVwZGF0ZShTSEExX0NUWCAqY29udGV4dCwgY29uc3QgdWludDhfdCAqZGF0YSwgdW5zaWduZWQgaW50IGxlbikKK3sKKyAgICB1bnNpZ25lZCBpbnQgaSwgajsKKworICAgIF9ESUFHQVNTRVJUKGNvbnRleHQgIT0gMCk7CisgICAgX0RJQUdBU1NFUlQoZGF0YSAhPSAwKTsKKworICAgIGogPSBjb250ZXh0LT5jb3VudFswXTsKKyAgICBpZiAoKGNvbnRleHQtPmNvdW50WzBdICs9IGxlbiA8PCAzKSA8IGopCisJY29udGV4dC0+Y291bnRbMV0gKz0gKGxlbj4+MjkpKzE7CisgICAgaiA9IChqID4+IDMpICYgNjM7CisgICAgaWYgKChqICsgbGVuKSA+IDYzKSB7CisJKHZvaWQpbWVtY3B5KCZjb250ZXh0LT5idWZmZXJbal0sIGRhdGEsIChpID0gNjQtaikpOworCVNIQTFUcmFuc2Zvcm0oY29udGV4dC0+c3RhdGUsIGNvbnRleHQtPmJ1ZmZlcik7CisJZm9yICggOyBpICsgNjMgPCBsZW47IGkgKz0gNjQpCisJICAgIFNIQTFUcmFuc2Zvcm0oY29udGV4dC0+c3RhdGUsICZkYXRhW2ldKTsKKwlqID0gMDsKKyAgICB9IGVsc2UgeworCWkgPSAwOworICAgIH0KKyAgICAodm9pZCltZW1jcHkoJmNvbnRleHQtPmJ1ZmZlcltqXSwgJmRhdGFbaV0sIGxlbiAtIGkpOworfQorCisKKy8qCisgKiBBZGQgcGFkZGluZyBhbmQgcmV0dXJuIHRoZSBtZXNzYWdlIGRpZ2VzdC4KKyAqLwordm9pZCBTSEExRmluYWwodWludDhfdCBkaWdlc3RbMjBdLCBTSEExX0NUWCAqY29udGV4dCkKK3sKKyAgICB1bnNpZ25lZCBpbnQgaTsKKyAgICB1aW50OF90IGZpbmFsY291bnRbOF07CisKKyAgICBfRElBR0FTU0VSVChkaWdlc3QgIT0gMCk7CisgICAgX0RJQUdBU1NFUlQoY29udGV4dCAhPSAwKTsKKworICAgIGZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKKwlmaW5hbGNvdW50W2ldID0gKHVpbnQ4X3QpKChjb250ZXh0LT5jb3VudFsoaSA+PSA0ID8gMCA6IDEpXQorCSA+PiAoKDMtKGkgJiAzKSkgKiA4KSApICYgMjU1KTsJIC8qIEVuZGlhbiBpbmRlcGVuZGVudCAqLworICAgIH0KKyAgICBTSEExVXBkYXRlKGNvbnRleHQsIChjb25zdCB1aW50OF90ICopIlwyMDAiLCAxKTsKKyAgICB3aGlsZSAoKGNvbnRleHQtPmNvdW50WzBdICYgNTA0KSAhPSA0NDgpCisJU0hBMVVwZGF0ZShjb250ZXh0LCAoY29uc3QgdWludDhfdCAqKSJcMCIsIDEpOworICAgIFNIQTFVcGRhdGUoY29udGV4dCwgZmluYWxjb3VudCwgOCk7ICAvKiBTaG91bGQgY2F1c2UgYSBTSEExVHJhbnNmb3JtKCkgKi8KKworICAgIGlmIChkaWdlc3QpIHsKKwlmb3IgKGkgPSAwOyBpIDwgMjA7IGkrKykKKwkgICAgZGlnZXN0W2ldID0gKHVpbnQ4X3QpCisJCSgoY29udGV4dC0+c3RhdGVbaT4+Ml0gPj4gKCgzLShpICYgMykpICogOCkgKSAmIDI1NSk7CisgICAgfQorfQorCisjZW5kaWYgLyogSEFWRV9TSEExX0ggKi8KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2NvbW1vbi9saWIvbGliYy9pbmV0L2luZXRfYWRkci5jIGIvbGliYy91cHN0cmVhbS1uZXRic2QvY29tbW9uL2xpYi9saWJjL2luZXQvaW5ldF9hZGRyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTM2MGNlOQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2NvbW1vbi9saWIvbGliYy9pbmV0L2luZXRfYWRkci5jCkBAIC0wLDAgKzEsMjI0IEBACisvKgkkTmV0QlNEOiBpbmV0X2FkZHIuYyx2IDEuMyAyMDEyLzAzLzA5IDE1OjQxOjE2IGNocmlzdG9zIEV4cCAkCSovCisKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDE5ODMsIDE5OTAsIDE5OTMKKyAqICAgIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQorICogICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgorICogCVRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIFVuaXZlcnNpdHkgb2YKKyAqIAlDYWxpZm9ybmlhLCBCZXJrZWxleSBhbmQgaXRzIGNvbnRyaWJ1dG9ycy4KKyAqIDQuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKy8qCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTMgYnkgRGlnaXRhbCBFcXVpcG1lbnQgQ29ycG9yYXRpb24uCisgKiAKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQKKyAqIHRoZSBuYW1lIG9mIERpZ2l0YWwgRXF1aXBtZW50IENvcnBvcmF0aW9uIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yCisgKiBwdWJsaWNpdHkgcGVydGFpbmluZyB0byBkaXN0cmlidXRpb24gb2YgdGhlIGRvY3VtZW50IG9yIHNvZnR3YXJlIHdpdGhvdXQKKyAqIHNwZWNpZmljLCB3cml0dGVuIHByaW9yIHBlcm1pc3Npb24uCisgKiAKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBESUdJVEFMIEVRVUlQTUVOVCBDT1JQLiBESVNDTEFJTVMgQUxMCisgKiBXQVJSQU5USUVTIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUsIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuICAgSU4gTk8gRVZFTlQgU0hBTEwgRElHSVRBTCBFUVVJUE1FTlQKKyAqIENPUlBPUkFUSU9OIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUgorICogUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMKKyAqIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUworICogU09GVFdBUkUuCisgKi8KKworLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNCBieSBJbnRlcm5ldCBTeXN0ZW1zIENvbnNvcnRpdW0sIEluYy4gKCJJU0MiKQorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2LTE5OTkgYnkgSW50ZXJuZXQgU29mdHdhcmUgQ29uc29ydGl1bS4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIElTQyBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKKyAqIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gIElOIE5PIEVWRU5UIFNIQUxMIElTQyBCRSBMSUFCTEUgRk9SCisgKiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisgKiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUCisgKiBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorICovCisKKyNpZiAhZGVmaW5lZChfS0VSTkVMKSAmJiAhZGVmaW5lZChfU1RBTkRBTE9ORSkKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKyNpZiBkZWZpbmVkKExJQkNfU0NDUykgJiYgIWRlZmluZWQobGludCkKKyNpZiAwCitzdGF0aWMgY29uc3QgY2hhciBzY2NzaWRbXSA9ICJAKCMpaW5ldF9hZGRyLmMJOC4xIChCZXJrZWxleSkgNi8xNy85MyI7CitzdGF0aWMgY29uc3QgY2hhciByY3NpZFtdID0gIklkOiBpbmV0X2FkZHIuYyx2IDEuMi4yMDYuMiAyMDA0LzAzLzE3IDAwOjI5OjQ1IG1hcmthIEV4cCI7CisjZWxzZQorX19SQ1NJRCgiJE5ldEJTRDogaW5ldF9hZGRyLmMsdiAxLjMgMjAxMi8wMy8wOSAxNTo0MToxNiBjaHJpc3RvcyBFeHAgJCIpOworI2VuZGlmCisjZW5kaWYgLyogTElCQ19TQ0NTIGFuZCBub3QgbGludCAqLworCisjaW5jbHVkZSAicG9ydF9iZWZvcmUuaCIKKworI2luY2x1ZGUgIm5hbWVzcGFjZS5oIgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorCisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2luY2x1ZGUgPGFycGEvaW5ldC5oPgorCisjaW5jbHVkZSA8Y3R5cGUuaD4KKworI2luY2x1ZGUgInBvcnRfYWZ0ZXIuaCIKKworI2lmZGVmIF9fd2Vha19hbGlhcworX193ZWFrX2FsaWFzKGluZXRfYXRvbixfaW5ldF9hdG9uKQorI2VuZGlmCisjZWxzZQorI2luY2x1ZGUgPGxpYi9saWJrZXJuL2xpYmtlcm4uaD4KKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjZW5kaWYKKworLyoKKyAqIEFzY2lpIGludGVybmV0IGFkZHJlc3MgaW50ZXJwcmV0YXRpb24gcm91dGluZS4KKyAqIFRoZSB2YWx1ZSByZXR1cm5lZCBpcyBpbiBuZXR3b3JrIG9yZGVyLgorICovCit1aW50MzJfdAoraW5ldF9hZGRyKGNvbnN0IGNoYXIgKmNwKSB7CisJc3RydWN0IGluX2FkZHIgdmFsOworCisJaWYgKGluZXRfYXRvbihjcCwgJnZhbCkpCisJCXJldHVybiAodmFsLnNfYWRkcik7CisJcmV0dXJuIChJTkFERFJfTk9ORSk7Cit9CisKKy8qIAorICogQ2hlY2sgd2hldGhlciAiY3AiIGlzIGEgdmFsaWQgYXNjaWkgcmVwcmVzZW50YXRpb24KKyAqIG9mIGFuIEludGVybmV0IGFkZHJlc3MgYW5kIGNvbnZlcnQgdG8gYSBiaW5hcnkgYWRkcmVzcy4KKyAqIFJldHVybnMgMSBpZiB0aGUgYWRkcmVzcyBpcyB2YWxpZCwgMCBpZiBub3QuCisgKiBUaGlzIHJlcGxhY2VzIGluZXRfYWRkciwgdGhlIHJldHVybiB2YWx1ZSBmcm9tIHdoaWNoCisgKiBjYW5ub3QgZGlzdGluZ3Vpc2ggYmV0d2VlbiBmYWlsdXJlIGFuZCBhIGxvY2FsIGJyb2FkY2FzdCBhZGRyZXNzLgorICovCitpbnQKK2luZXRfYXRvbihjb25zdCBjaGFyICpjcCwgc3RydWN0IGluX2FkZHIgKmFkZHIpIHsKKwl1aW50MzJfdCB2YWw7CisJaW50IGJhc2U7CisJc2l6ZV90IG47CisJY2hhciBjOworCXVpbnQ4X3QgcGFydHNbNF07CisJdWludDhfdCAqcHAgPSBwYXJ0czsKKwlpbnQgZGlnaXQ7CisKKwljID0gKmNwOworCWZvciAoOzspIHsKKwkJLyoKKwkJICogQ29sbGVjdCBudW1iZXIgdXAgdG8gYGAuJycuCisJCSAqIFZhbHVlcyBhcmUgc3BlY2lmaWVkIGFzIGZvciBDOgorCQkgKiAweD1oZXgsIDA9b2N0YWwsIGlzZGlnaXQ9ZGVjaW1hbC4KKwkJICovCisJCWlmICghaXNkaWdpdCgodW5zaWduZWQgY2hhciljKSkKKwkJCXJldHVybiAoMCk7CisJCXZhbCA9IDA7IGJhc2UgPSAxMDsgZGlnaXQgPSAwOworCQlpZiAoYyA9PSAnMCcpIHsKKwkJCWMgPSAqKytjcDsKKwkJCWlmIChjID09ICd4JyB8fCBjID09ICdYJykKKwkJCQliYXNlID0gMTYsIGMgPSAqKytjcDsKKwkJCWVsc2UgeworCQkJCWJhc2UgPSA4OworCQkJCWRpZ2l0ID0gMSA7CisJCQl9CisJCX0KKwkJZm9yICg7OykgeworCQkJaWYgKGlzYXNjaWkoYykgJiYgaXNkaWdpdCgodW5zaWduZWQgY2hhciljKSkgeworCQkJCWlmIChiYXNlID09IDggJiYgKGMgPT0gJzgnIHx8IGMgPT0gJzknKSkKKwkJCQkJcmV0dXJuICgwKTsKKwkJCQl2YWwgPSAodmFsICogYmFzZSkgKyAoYyAtICcwJyk7CisJCQkJYyA9ICorK2NwOworCQkJCWRpZ2l0ID0gMTsKKwkJCX0gZWxzZSBpZiAoYmFzZSA9PSAxNiAmJiBpc2FzY2lpKGMpICYmIAorCQkJCSAgIGlzeGRpZ2l0KCh1bnNpZ25lZCBjaGFyKWMpKSB7CisJCQkJdmFsID0gKHZhbCA8PCA0KSB8CisJCQkJCShjICsgMTAgLSAoaXNsb3dlcigodW5zaWduZWQgY2hhciljKSA/ICdhJyA6ICdBJykpOworCQkJCWMgPSAqKytjcDsKKwkJCQlkaWdpdCA9IDE7CisJCQl9IGVsc2UKKwkJCQlicmVhazsKKwkJfQorCQlpZiAoYyA9PSAnLicpIHsKKwkJCS8qCisJCQkgKiBJbnRlcm5ldCBmb3JtYXQ6CisJCQkgKglhLmIuYy5kCisJCQkgKglhLmIuYwkod2l0aCBjIHRyZWF0ZWQgYXMgMTYgYml0cykKKwkJCSAqCWEuYgkod2l0aCBiIHRyZWF0ZWQgYXMgMjQgYml0cykKKwkJCSAqLworCQkJaWYgKHBwID49IHBhcnRzICsgMyB8fCB2YWwgPiAweGZmVSkKKwkJCQlyZXR1cm4gKDApOworCQkJKnBwKysgPSB2YWw7CisJCQljID0gKisrY3A7CisJCX0gZWxzZQorCQkJYnJlYWs7CisJfQorCS8qCisJICogQ2hlY2sgZm9yIHRyYWlsaW5nIGNoYXJhY3RlcnMuCisJICovCisJaWYgKGMgIT0gJ1wwJyAmJiAoIWlzYXNjaWkoYykgfHwgIWlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpYykpKQorCQlyZXR1cm4gKDApOworCS8qCisJICogRGlkIHdlIGdldCBhIHZhbGlkIGRpZ2l0PworCSAqLworCWlmICghZGlnaXQpCisJCXJldHVybiAoMCk7CisJLyoKKwkgKiBDb25jb2N0IHRoZSBhZGRyZXNzIGFjY29yZGluZyB0bworCSAqIHRoZSBudW1iZXIgb2YgcGFydHMgc3BlY2lmaWVkLgorCSAqLworCW4gPSBwcCAtIHBhcnRzICsgMTsKKwlzd2l0Y2ggKG4pIHsKKwljYXNlIDE6CQkJCS8qIGEgLS0gMzIgYml0cyAqLworCQlicmVhazsKKworCWNhc2UgMjoJCQkJLyogYS5iIC0tIDguMjQgYml0cyAqLworCQlpZiAodmFsID4gMHhmZmZmZmZVKQorCQkJcmV0dXJuICgwKTsKKwkJdmFsIHw9IHBhcnRzWzBdIDw8IDI0OworCQlicmVhazsKKworCWNhc2UgMzoJCQkJLyogYS5iLmMgLS0gOC44LjE2IGJpdHMgKi8KKwkJaWYgKHZhbCA+IDB4ZmZmZlUpCisJCQlyZXR1cm4gKDApOworCQl2YWwgfD0gKHBhcnRzWzBdIDw8IDI0KSB8IChwYXJ0c1sxXSA8PCAxNik7CisJCWJyZWFrOworCisJY2FzZSA0OgkJCQkvKiBhLmIuYy5kIC0tIDguOC44LjggYml0cyAqLworCQlpZiAodmFsID4gMHhmZlUpCisJCQlyZXR1cm4gKDApOworCQl2YWwgfD0gKHBhcnRzWzBdIDw8IDI0KSB8IChwYXJ0c1sxXSA8PCAxNikgfCAocGFydHNbMl0gPDwgOCk7CisJCWJyZWFrOworCX0KKwlpZiAoYWRkciAhPSBOVUxMKQorCQlhZGRyLT5zX2FkZHIgPSBodG9ubCh2YWwpOworCXJldHVybiAoMSk7Cit9CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW5ldGJzZC9lbnYuaCBiL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2Vudi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmOTlmOWQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW5ldGJzZC9lbnYuaApAQCAtMCwwICsxLDIyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2lmbmRlZiBfQklPTklDX05FVEJTRF9FTlZfSF9pbmNsdWRlZAorI2RlZmluZSBfQklPTklDX05FVEJTRF9FTlZfSF9pbmNsdWRlZAorCisvKiBQbGFjZWhvbGRlci4gKi8KKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW5ldGJzZC9leHRlcm4uaCBiL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2V4dGVybi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxNmJlY2QKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW5ldGJzZC9leHRlcm4uaApAQCAtMCwwICsxLDI4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2lmbmRlZiBfQklPTklDX05FVEJTRF9FWFRFUk5fSF9pbmNsdWRlZAorI2RlZmluZSBfQklPTklDX05FVEJTRF9FWFRFUk5fSF9pbmNsdWRlZAorCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisKK19fQkVHSU5fREVDTFMKKworY29uc3QgY2hhciogX19zdHJzaWduYWwoaW50LCBjaGFyKiwgc2l6ZV90KTsKKworX19FTkRfREVDTFMKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW5ldGJzZC9mZF9zZXRzaXplLmggYi9saWJjL3Vwc3RyZWFtLW5ldGJzZC9mZF9zZXRzaXplLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2ZkX3NldHNpemUuaApkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1uZXRic2QvbGliYy9jb21wYXQtNDMvY3JlYXQuYyBiL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYmMvY29tcGF0LTQzL2NyZWF0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTU2MGJlYQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYmMvY29tcGF0LTQzL2NyZWF0LmMKQEAgLTAsMCArMSw1MiBAQAorLyoJJE5ldEJTRDogY3JlYXQuYyx2IDEuMTAgMjAwMy8wOC8wNyAxNjo0MjozOSBhZ2MgRXhwICQJKi8KKworLyoKKyAqIENvcHlyaWdodCAoYykgMTk4OSwgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKyNpZiBkZWZpbmVkKExJQkNfU0NDUykgJiYgIWRlZmluZWQobGludCkKKyNpZiAwCitzdGF0aWMgY2hhciBzY2NzaWRbXSA9ICJAKCMpY3JlYXQuYwk4LjEgKEJlcmtlbGV5KSA2LzIvOTMiOworI2Vsc2UKK19fUkNTSUQoIiROZXRCU0Q6IGNyZWF0LmMsdiAxLjEwIDIwMDMvMDgvMDcgMTY6NDI6MzkgYWdjIEV4cCAkIik7CisjZW5kaWYKKyNlbmRpZiAvKiBMSUJDX1NDQ1MgYW5kIG5vdCBsaW50ICovCisKKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisKK2ludAorY3JlYXQoY29uc3QgY2hhciAqcGF0aCwgbW9kZV90IG1vZGUpCit7CisKKwlfRElBR0FTU0VSVChwYXRoICE9IE5VTEwpOworCisJcmV0dXJuKG9wZW4ocGF0aCwgT19XUk9OTFl8T19DUkVBVHxPX1RSVU5DLCBtb2RlKSk7Cit9CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW5ldGJzZC9saWJjL2dlbi9mdHcuYyBiL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYmMvZ2VuL2Z0dy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3ZjZiYmQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW5ldGJzZC9saWJjL2dlbi9mdHcuYwpAQCAtMCwwICsxLDk4IEBACisvKiAkTmV0QlNEOiBmdHcuYyx2IDEuMSAyMDA1LzEyLzMwIDIzOjA3OjMyIGFnYyBFeHAgJCAqLworCisvKglGcm9tIE9wZW5CU0Q6IGZ0dy5jLHYgMS4yIDIwMDMvMDcvMjEgMjE6MTU6MzIgbWlsbGVydCBFeHAgCSovCisKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDMgVG9kZCBDLiBNaWxsZXIgPFRvZGQuTWlsbGVyQGNvdXJ0ZXNhbi5jb20+CisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworICogV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKKyAqIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKKyAqIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisgKgorICogU3BvbnNvcmVkIGluIHBhcnQgYnkgdGhlIERlZmVuc2UgQWR2YW5jZWQgUmVzZWFyY2ggUHJvamVjdHMKKyAqIEFnZW5jeSAoREFSUEEpIGFuZCBBaXIgRm9yY2UgUmVzZWFyY2ggTGFib3JhdG9yeSwgQWlyIEZvcmNlCisgKiBNYXRlcmllbCBDb21tYW5kLCBVU0FGLCB1bmRlciBhZ3JlZW1lbnQgbnVtYmVyIEYzOTUwMi05OS0xLTA1MTIuCisgKi8KKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKworI2lmbmRlZiBsaW50CitfX1JDU0lEKCIkTmV0QlNEOiBmdHcuYyx2IDEuMSAyMDA1LzEyLzMwIDIzOjA3OjMyIGFnYyBFeHAgJCIpOworI2VuZGlmCisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8ZnRzLmg+CisjaW5jbHVkZSA8ZnR3Lmg+CisjaW5jbHVkZSA8bGltaXRzLmg+CisKK2ludAorZnR3KGNvbnN0IGNoYXIgKnBhdGgsIGludCAoKmZuKShjb25zdCBjaGFyICosIGNvbnN0IHN0cnVjdCBzdGF0ICosIGludCksCisgICAgaW50IG5mZHMpCit7CisJLyogTElOVEVEICovCisJY2hhciAqIGNvbnN0IHBhdGhzWzJdID0geyBfX1VOQ09OU1QocGF0aCksIE5VTEwgfTsKKwlGVFNFTlQgKmN1cjsKKwlGVFMgKmZ0c3A7CisJaW50IGZuZmxhZywgZXJyb3IsIHN2ZXJybm87CisKKwkvKiBYWFggLSBuZmRzIGlzIGN1cnJlbnRseSB1bnVzZWQgKi8KKwlpZiAobmZkcyA8IDEgfHwgbmZkcyA+IE9QRU5fTUFYKSB7CisJCWVycm5vID0gRUlOVkFMOworCQlyZXR1cm4gKC0xKTsKKwl9CisKKwlmdHNwID0gZnRzX29wZW4ocGF0aHMsIEZUU19DT01GT0xMT1cgfCBGVFNfTk9DSERJUiwgTlVMTCk7CisJaWYgKGZ0c3AgPT0gTlVMTCkKKwkJcmV0dXJuICgtMSk7CisJZXJyb3IgPSAwOworCXdoaWxlICgoY3VyID0gZnRzX3JlYWQoZnRzcCkpICE9IE5VTEwpIHsKKwkJc3dpdGNoIChjdXItPmZ0c19pbmZvKSB7CisJCWNhc2UgRlRTX0Q6CisJCQlmbmZsYWcgPSBGVFdfRDsKKwkJCWJyZWFrOworCQljYXNlIEZUU19ETlI6CisJCQlmbmZsYWcgPSBGVFdfRE5SOworCQkJYnJlYWs7CisJCWNhc2UgRlRTX0RQOgorCQkJLyogd2Ugb25seSB2aXNpdCBpbiBwcmVvcmRlciAqLworCQkJY29udGludWU7CisJCWNhc2UgRlRTX0Y6CisJCWNhc2UgRlRTX0RFRkFVTFQ6CisJCQlmbmZsYWcgPSBGVFdfRjsKKwkJCWJyZWFrOworCQljYXNlIEZUU19OUzoKKwkJY2FzZSBGVFNfTlNPSzoKKwkJY2FzZSBGVFNfU0xOT05FOgorCQkJZm5mbGFnID0gRlRXX05TOworCQkJYnJlYWs7CisJCWNhc2UgRlRTX1NMOgorCQkJZm5mbGFnID0gRlRXX1NMOworCQkJYnJlYWs7CisJCWNhc2UgRlRTX0RDOgorCQkJZXJybm8gPSBFTE9PUDsKKwkJCS8qIEZBTExUSFJPVUdIICovCisJCWRlZmF1bHQ6CisJCQllcnJvciA9IC0xOworCQkJZ290byBkb25lOworCQl9CisJCWVycm9yID0gZm4oY3VyLT5mdHNfcGF0aCwgY3VyLT5mdHNfc3RhdHAsIGZuZmxhZyk7CisJCWlmIChlcnJvciAhPSAwKQorCQkJYnJlYWs7CisJfQorZG9uZToKKwlzdmVycm5vID0gZXJybm87CisJaWYgKGZ0c19jbG9zZShmdHNwKSAhPSAwICYmIGVycm9yID09IDApCisJCWVycm9yID0gLTE7CisJZWxzZQorCQllcnJubyA9IHN2ZXJybm87CisJcmV0dXJuIChlcnJvcik7Cit9CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW5ldGJzZC9saWJjL2dlbi9uZnR3LmMgYi9saWJjL3Vwc3RyZWFtLW5ldGJzZC9saWJjL2dlbi9uZnR3LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGU1MTM0MgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYmMvZ2VuL25mdHcuYwpAQCAtMCwwICsxLDExNCBAQAorLyogJE5ldEJTRCAqLworCisvKglGcm9tIE9wZW5CU0Q6IG5mdHcuYyx2IDEuMiAyMDAzLzA3LzIxIDIxOjE1OjMyIG1pbGxlcnQgRXhwIAkqLworCisvKgorICogQ29weXJpZ2h0IChjKSAyMDAzIFRvZGQgQy4gTWlsbGVyIDxUb2RkLk1pbGxlckBjb3VydGVzYW4uY29tPgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKKyAqIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SCisgKiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisgKiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCisgKiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorICoKKyAqIFNwb25zb3JlZCBpbiBwYXJ0IGJ5IHRoZSBEZWZlbnNlIEFkdmFuY2VkIFJlc2VhcmNoIFByb2plY3RzCisgKiBBZ2VuY3kgKERBUlBBKSBhbmQgQWlyIEZvcmNlIFJlc2VhcmNoIExhYm9yYXRvcnksIEFpciBGb3JjZQorICogTWF0ZXJpZWwgQ29tbWFuZCwgVVNBRiwgdW5kZXIgYWdyZWVtZW50IG51bWJlciBGMzk1MDItOTktMS0wNTEyLgorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKworI2lmbmRlZiBsaW50CitfX1JDU0lEKCIkTmV0QlNEOiBuZnR3LmMsdiAxLjEgMjAwNS8xMi8zMCAyMzowNzozMiBhZ2MgRXhwICQiKTsKKyNlbmRpZgorCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGZ0cy5oPgorI2luY2x1ZGUgPGZ0dy5oPgorI2luY2x1ZGUgPGxpbWl0cy5oPgorCitpbnQKK25mdHcoY29uc3QgY2hhciAqcGF0aCwgaW50ICgqZm4pKGNvbnN0IGNoYXIgKiwgY29uc3Qgc3RydWN0IHN0YXQgKiwgaW50LAorICAgICBzdHJ1Y3QgRlRXICopLCBpbnQgbmZkcywgaW50IGZ0d2ZsYWdzKQoreworCS8qIExJTlRFRCAqLworCWNoYXIgKiBjb25zdCBwYXRoc1syXSA9IHsgX19VTkNPTlNUKHBhdGgpLCBOVUxMIH07CisJc3RydWN0IEZUVyBmOworCUZUU0VOVCAqY3VyOworCUZUUyAqZnRzcDsKKwlpbnQgZnRzZmxhZ3MsIGZuZmxhZywgZXJyb3IsIHBvc3RvcmRlciwgc3ZlcnJubzsKKworCS8qIFhYWCAtIG5mZHMgaXMgY3VycmVudGx5IHVudXNlZCAqLworCWlmIChuZmRzIDwgMSB8fCBuZmRzID4gT1BFTl9NQVgpIHsKKwkJZXJybm8gPSBFSU5WQUw7CisJCXJldHVybiAoLTEpOworCX0KKworCWZ0c2ZsYWdzID0gRlRTX0NPTUZPTExPVzsKKwlpZiAoIShmdHdmbGFncyAmIEZUV19DSERJUikpCisJCWZ0c2ZsYWdzIHw9IEZUU19OT0NIRElSOworCWlmIChmdHdmbGFncyAmIEZUV19NT1VOVCkKKwkJZnRzZmxhZ3MgfD0gRlRTX1hERVY7CisJaWYgKGZ0d2ZsYWdzICYgRlRXX1BIWVMpCisJCWZ0c2ZsYWdzIHw9IEZUU19QSFlTSUNBTDsKKwlwb3N0b3JkZXIgPSAoZnR3ZmxhZ3MgJiBGVFdfREVQVEgpICE9IDA7CisJZnRzcCA9IGZ0c19vcGVuKHBhdGhzLCBmdHNmbGFncywgTlVMTCk7CisJaWYgKGZ0c3AgPT0gTlVMTCkKKwkJcmV0dXJuICgtMSk7CisJZXJyb3IgPSAwOworCXdoaWxlICgoY3VyID0gZnRzX3JlYWQoZnRzcCkpICE9IE5VTEwpIHsKKwkJc3dpdGNoIChjdXItPmZ0c19pbmZvKSB7CisJCWNhc2UgRlRTX0Q6CisJCQlpZiAocG9zdG9yZGVyKQorCQkJCWNvbnRpbnVlOworCQkJZm5mbGFnID0gRlRXX0Q7CisJCQlicmVhazsKKwkJY2FzZSBGVFNfRE5SOgorCQkJZm5mbGFnID0gRlRXX0ROUjsKKwkJCWJyZWFrOworCQljYXNlIEZUU19EUDoKKwkJCWlmICghcG9zdG9yZGVyKQorCQkJCWNvbnRpbnVlOworCQkJZm5mbGFnID0gRlRXX0RQOworCQkJYnJlYWs7CisJCWNhc2UgRlRTX0Y6CisJCWNhc2UgRlRTX0RFRkFVTFQ6CisJCQlmbmZsYWcgPSBGVFdfRjsKKwkJCWJyZWFrOworCQljYXNlIEZUU19OUzoKKwkJY2FzZSBGVFNfTlNPSzoKKwkJCWZuZmxhZyA9IEZUV19OUzsKKwkJCWJyZWFrOworCQljYXNlIEZUU19TTDoKKwkJCWZuZmxhZyA9IEZUV19TTDsKKwkJCWJyZWFrOworCQljYXNlIEZUU19TTE5PTkU6CisJCQlmbmZsYWcgPSBGVFdfU0xOOworCQkJYnJlYWs7CisJCWNhc2UgRlRTX0RDOgorCQkJZXJybm8gPSBFTE9PUDsKKwkJCS8qIEZBTExUSFJPVUdIICovCisJCWRlZmF1bHQ6CisJCQllcnJvciA9IC0xOworCQkJZ290byBkb25lOworCQl9CisJCWYuYmFzZSA9IGN1ci0+ZnRzX3BhdGhsZW4gLSBjdXItPmZ0c19uYW1lbGVuOworCQlmLmxldmVsID0gY3VyLT5mdHNfbGV2ZWw7CisJCWVycm9yID0gZm4oY3VyLT5mdHNfcGF0aCwgY3VyLT5mdHNfc3RhdHAsIGZuZmxhZywgJmYpOworCQlpZiAoZXJyb3IgIT0gMCkKKwkJCWJyZWFrOworCX0KK2RvbmU6CisJc3ZlcnJubyA9IGVycm5vOworCSh2b2lkKSBmdHNfY2xvc2UoZnRzcCk7CisJZXJybm8gPSBzdmVycm5vOworCXJldHVybiAoZXJyb3IpOworfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1uZXRic2QvbGliYy9nZW4vbmljZS5jIGIvbGliYy91cHN0cmVhbS1uZXRic2QvbGliYy9nZW4vbmljZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5ZDY3MTEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW5ldGJzZC9saWJjL2dlbi9uaWNlLmMKQEAgLTAsMCArMSw3MCBAQAorLyoJJE5ldEJTRDogbmljZS5jLHYgMS4xMyAyMDExLzA1LzAxIDAyOjQ5OjU0IGNocmlzdG9zIEV4cCAkCSovCisKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDE5ODMsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisjaWYgZGVmaW5lZChMSUJDX1NDQ1MpICYmICFkZWZpbmVkKGxpbnQpCisjaWYgMAorc3RhdGljIGNoYXIgc2Njc2lkW10gPSAiQCgjKW5pY2UuYwk4LjEgKEJlcmtlbGV5KSA2LzQvOTMiOworI2Vsc2UKK19fUkNTSUQoIiROZXRCU0Q6IG5pY2UuYyx2IDEuMTMgMjAxMS8wNS8wMSAwMjo0OTo1NCBjaHJpc3RvcyBFeHAgJCIpOworI2VuZGlmCisjZW5kaWYgLyogTElCQ19TQ0NTIGFuZCBub3QgbGludCAqLworCisjaW5jbHVkZSAibmFtZXNwYWNlLmgiCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNpbmNsdWRlIDxzeXMvcmVzb3VyY2UuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorCisjaWZkZWYgX193ZWFrX2FsaWFzCitfX3dlYWtfYWxpYXMobmljZSxfbmljZSkKKyNlbmRpZgorCisvKgorICogQmFja3dhcmRzIGNvbXBhdGlibGUgbmljZS4KKyAqLworaW50CituaWNlKGludCBpbmNyKQoreworCWludCBwcmlvOworCisJZXJybm8gPSAwOworCXByaW8gPSBnZXRwcmlvcml0eShQUklPX1BST0NFU1MsIDApOworCWlmIChwcmlvID09IC0xICYmIGVycm5vKQorCQlyZXR1cm4gLTE7CisJaWYgKHNldHByaW9yaXR5KFBSSU9fUFJPQ0VTUywgMCwgcHJpbyArIGluY3IpID09IC0xKSB7CisJCWlmIChlcnJubyA9PSBFQUNDRVMpCisJCQllcnJubyA9IEVQRVJNOworCQlyZXR1cm4gLTE7CisJfQorCXJldHVybiBnZXRwcmlvcml0eShQUklPX1BST0NFU1MsIDApOworfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1uZXRic2QvbGliYy9nZW4vcG9wZW4uYyBiL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYmMvZ2VuL3BvcGVuLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTkzZTM0NgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYmMvZ2VuL3BvcGVuLmMKQEAgLTAsMCArMSwyMjcgQEAKKy8qCSROZXRCU0Q6IHBvcGVuLmMsdiAxLjMyIDIwMTIvMDYvMjUgMjI6MzI6NDMgYWJzIEV4cCAkCSovCisKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDE5ODgsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgd3JpdHRlbiBieSBLZW4gQXJub2xkIGFuZAorICogcHVibGlzaGVkIGluIFVOSVggUmV2aWV3LCBWb2wuIDYsIE5vLiA4LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisjaWYgZGVmaW5lZChMSUJDX1NDQ1MpICYmICFkZWZpbmVkKGxpbnQpCisjaWYgMAorc3RhdGljIGNoYXIgc2Njc2lkW10gPSAiQCgjKXBvcGVuLmMJOC4zIChCZXJrZWxleSkgNS8zLzk1IjsKKyNlbHNlCitfX1JDU0lEKCIkTmV0QlNEOiBwb3Blbi5jLHYgMS4zMiAyMDEyLzA2LzI1IDIyOjMyOjQzIGFicyBFeHAgJCIpOworI2VuZGlmCisjZW5kaWYgLyogTElCQ19TQ0NTIGFuZCBub3QgbGludCAqLworCisjaW5jbHVkZSAibmFtZXNwYWNlLmgiCisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjaW5jbHVkZSA8c3lzL3dhaXQuaD4KKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisKKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHBhdGhzLmg+CisjaW5jbHVkZSA8c2lnbmFsLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxmY250bC5oPgorCisjaW5jbHVkZSAiZW52LmgiCisjaW5jbHVkZSAicmVlbnRyYW50LmgiCisKKyNpZmRlZiBfX3dlYWtfYWxpYXMKK19fd2Vha19hbGlhcyhwb3BlbixfcG9wZW4pCitfX3dlYWtfYWxpYXMocGNsb3NlLF9wY2xvc2UpCisjZW5kaWYKKworc3RhdGljIHN0cnVjdCBwaWQgeworCXN0cnVjdCBwaWQgKm5leHQ7CisJRklMRSAqZnA7CisjaWZkZWYgX1JFRU5UUkFOVAorCWludCBmZDsKKyNlbmRpZgorCXBpZF90IHBpZDsKK30gKnBpZGxpc3Q7IAorCQorI2lmZGVmIF9SRUVOVFJBTlQKK3N0YXRpYyByd2xvY2tfdCBwaWRsaXN0X2xvY2sgPSBSV0xPQ0tfSU5JVElBTElaRVI7CisjZW5kaWYKKworRklMRSAqCitwb3Blbihjb25zdCBjaGFyICpjb21tYW5kLCBjb25zdCBjaGFyICp0eXBlKQoreworCXN0cnVjdCBwaWQgKmN1ciwgKm9sZDsKKwlGSUxFICppb3A7CisJY29uc3QgY2hhciAqIHZvbGF0aWxlIHh0eXBlID0gdHlwZTsKKwlpbnQgcGRlc1syXSwgcGlkLCBzZXJybm87CisJdm9sYXRpbGUgaW50IHR3b3dheTsKKwlpbnQgZmxhZ3M7CisKKwlfRElBR0FTU0VSVChjb21tYW5kICE9IE5VTEwpOworCV9ESUFHQVNTRVJUKHh0eXBlICE9IE5VTEwpOworCisJZmxhZ3MgPSBzdHJjaHIoeHR5cGUsICdlJykgPyBPX0NMT0VYRUMgOiAwOworCWlmIChzdHJjaHIoeHR5cGUsICcrJykpIHsKKwkJaW50IHN0eXBlID0gZmxhZ3MgPyAoU09DS19TVFJFQU0gfCBTT0NLX0NMT0VYRUMpIDogU09DS19TVFJFQU07CisJCXR3b3dheSA9IDE7CisJCXh0eXBlID0gInIrIjsKKwkJaWYgKHNvY2tldHBhaXIoQUZfTE9DQUwsIHN0eXBlLCAwLCBwZGVzKSA8IDApCisJCQlyZXR1cm4gTlVMTDsKKwl9IGVsc2UgIHsKKwkJdHdvd2F5ID0gMDsKKwkJeHR5cGUgPSBzdHJyY2hyKHh0eXBlLCAncicpID8gInIiIDogInciOworCQlpZiAocGlwZTIocGRlcywgZmxhZ3MpID09IC0xKQorCQkJcmV0dXJuIE5VTEw7CisJfQorCisJaWYgKChjdXIgPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBwaWQpKSkgPT0gTlVMTCkgeworCQkodm9pZCljbG9zZShwZGVzWzBdKTsKKwkJKHZvaWQpY2xvc2UocGRlc1sxXSk7CisJCWVycm5vID0gRU5PTUVNOworCQlyZXR1cm4gKE5VTEwpOworCX0KKworCSh2b2lkKXJ3bG9ja19yZGxvY2soJnBpZGxpc3RfbG9jayk7CisJKHZvaWQpX19yZWFkbG9ja2VudigpOworCXN3aXRjaCAocGlkID0gdmZvcmsoKSkgeworCWNhc2UgLTE6CQkJLyogRXJyb3IuICovCisJCXNlcnJubyA9IGVycm5vOworCQkodm9pZClfX3VubG9ja2VudigpOworCQkodm9pZClyd2xvY2tfdW5sb2NrKCZwaWRsaXN0X2xvY2spOworCQlmcmVlKGN1cik7CisJCSh2b2lkKWNsb3NlKHBkZXNbMF0pOworCQkodm9pZCljbG9zZShwZGVzWzFdKTsKKwkJZXJybm8gPSBzZXJybm87CisJCXJldHVybiAoTlVMTCk7CisJCS8qIE5PVFJFQUNIRUQgKi8KKwljYXNlIDA6CQkJCS8qIENoaWxkLiAqLworCQkvKiBQT1NJWC4yIEIuMy4yLjIgInBvcGVuKCkgc2hhbGwgZW5zdXJlIHRoYXQgYW55IHN0cmVhbXMKKwkJICAgZnJvbSBwcmV2aW91cyBwb3BlbigpIGNhbGxzIHRoYXQgcmVtYWluIG9wZW4gaW4gdGhlIAorCQkgICBwYXJlbnQgcHJvY2VzcyBhcmUgY2xvc2VkIGluIHRoZSBuZXcgY2hpbGQgcHJvY2Vzcy4gKi8KKwkJZm9yIChvbGQgPSBwaWRsaXN0OyBvbGQ7IG9sZCA9IG9sZC0+bmV4dCkKKyNpZmRlZiBfUkVFTlRSQU5UCisJCQljbG9zZShvbGQtPmZkKTsgLyogZG9uJ3QgYWxsb3cgYSBmbHVzaCAqLworI2Vsc2UKKwkJCWNsb3NlKGZpbGVubyhvbGQtPmZwKSk7IC8qIGRvbid0IGFsbG93IGEgZmx1c2ggKi8KKyNlbmRpZgorCisJCWlmICgqeHR5cGUgPT0gJ3InKSB7CisJCQkodm9pZCljbG9zZShwZGVzWzBdKTsKKwkJCWlmIChwZGVzWzFdICE9IFNURE9VVF9GSUxFTk8pIHsKKwkJCQkodm9pZClkdXAyKHBkZXNbMV0sIFNURE9VVF9GSUxFTk8pOworCQkJCSh2b2lkKWNsb3NlKHBkZXNbMV0pOworCQkJfQorCQkJaWYgKHR3b3dheSkKKwkJCQkodm9pZClkdXAyKFNURE9VVF9GSUxFTk8sIFNURElOX0ZJTEVOTyk7CisJCX0gZWxzZSB7CisJCQkodm9pZCljbG9zZShwZGVzWzFdKTsKKwkJCWlmIChwZGVzWzBdICE9IFNURElOX0ZJTEVOTykgeworCQkJCSh2b2lkKWR1cDIocGRlc1swXSwgU1RESU5fRklMRU5PKTsKKwkJCQkodm9pZCljbG9zZShwZGVzWzBdKTsKKwkJCX0KKwkJfQorCisJCWV4ZWNsKF9QQVRIX0JTSEVMTCwgInNoIiwgIi1jIiwgY29tbWFuZCwgTlVMTCk7CisJCV9leGl0KDEyNyk7CisJCS8qIE5PVFJFQUNIRUQgKi8KKwl9CisJKHZvaWQpX191bmxvY2tlbnYoKTsKKworCS8qIFBhcmVudDsgYXNzdW1lIGZkb3BlbiBjYW4ndCBmYWlsLiAqLworCWlmICgqeHR5cGUgPT0gJ3InKSB7CisJCWlvcCA9IGZkb3BlbihwZGVzWzBdLCB4dHlwZSk7CisjaWZkZWYgX1JFRU5UUkFOVAorCQljdXItPmZkID0gcGRlc1swXTsKKyNlbmRpZgorCQkodm9pZCljbG9zZShwZGVzWzFdKTsKKwl9IGVsc2UgeworCQlpb3AgPSBmZG9wZW4ocGRlc1sxXSwgeHR5cGUpOworI2lmZGVmIF9SRUVOVFJBTlQKKwkJY3VyLT5mZCA9IHBkZXNbMV07CisjZW5kaWYKKwkJKHZvaWQpY2xvc2UocGRlc1swXSk7CisJfQorCisJLyogTGluayBpbnRvIGxpc3Qgb2YgZmlsZSBkZXNjcmlwdG9ycy4gKi8KKwljdXItPmZwID0gaW9wOworCWN1ci0+cGlkID0gIHBpZDsKKwljdXItPm5leHQgPSBwaWRsaXN0OworCXBpZGxpc3QgPSBjdXI7CisJKHZvaWQpcndsb2NrX3VubG9jaygmcGlkbGlzdF9sb2NrKTsKKworCXJldHVybiAoaW9wKTsKK30KKworLyoKKyAqIHBjbG9zZSAtLQorICoJUGNsb3NlIHJldHVybnMgLTEgaWYgc3RyZWFtIGlzIG5vdCBhc3NvY2lhdGVkIHdpdGggYSBgcG9wZW5lZCcgY29tbWFuZCwKKyAqCWlmIGFscmVhZHkgYHBjbG9zZWQnLCBvciB3YWl0cGlkIHJldHVybnMgYW4gZXJyb3IuCisgKi8KK2ludAorcGNsb3NlKEZJTEUgKmlvcCkKK3sKKwlzdHJ1Y3QgcGlkICpjdXIsICpsYXN0OworCWludCBwc3RhdDsKKwlwaWRfdCBwaWQ7CisKKwlfRElBR0FTU0VSVChpb3AgIT0gTlVMTCk7CisKKwlyd2xvY2tfd3Jsb2NrKCZwaWRsaXN0X2xvY2spOworCisJLyogRmluZCB0aGUgYXBwcm9wcmlhdGUgZmlsZSBwb2ludGVyLiAqLworCWZvciAobGFzdCA9IE5VTEwsIGN1ciA9IHBpZGxpc3Q7IGN1cjsgbGFzdCA9IGN1ciwgY3VyID0gY3VyLT5uZXh0KQorCQlpZiAoY3VyLT5mcCA9PSBpb3ApCisJCQlicmVhazsKKwlpZiAoY3VyID09IE5VTEwpIHsKKwkJKHZvaWQpcndsb2NrX3VubG9jaygmcGlkbGlzdF9sb2NrKTsKKwkJcmV0dXJuICgtMSk7CisJfQorCisJKHZvaWQpZmNsb3NlKGlvcCk7CisKKwkvKiBSZW1vdmUgdGhlIGVudHJ5IGZyb20gdGhlIGxpbmtlZCBsaXN0LiAqLworCWlmIChsYXN0ID09IE5VTEwpCisJCXBpZGxpc3QgPSBjdXItPm5leHQ7CisJZWxzZQorCQlsYXN0LT5uZXh0ID0gY3VyLT5uZXh0OworCisJKHZvaWQpcndsb2NrX3VubG9jaygmcGlkbGlzdF9sb2NrKTsKKworCWRvIHsKKwkJcGlkID0gd2FpdHBpZChjdXItPnBpZCwgJnBzdGF0LCAwKTsKKwl9IHdoaWxlIChwaWQgPT0gLTEgJiYgZXJybm8gPT0gRUlOVFIpOworCisJZnJlZShjdXIpOworCisJcmV0dXJuIChwaWQgPT0gLTEgPyAtMSA6IHBzdGF0KTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYmMvZ2VuL3BzaWduYWwuYyBiL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYmMvZ2VuL3BzaWduYWwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NDcyYmU2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1uZXRic2QvbGliYy9nZW4vcHNpZ25hbC5jCkBAIC0wLDAgKzEsODUgQEAKKy8qCSROZXRCU0Q6IHBzaWduYWwuYyx2IDEuMjMgMjAxMi8wMy8xMyAyMToxMzozNiBjaHJpc3RvcyBFeHAgJAkqLworCisvKgorICogQ29weXJpZ2h0IChjKSAxOTgzLCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorI2lmIGRlZmluZWQoTElCQ19TQ0NTKSAmJiAhZGVmaW5lZChsaW50KQorI2lmIDAKK3N0YXRpYyBjaGFyIHNjY3NpZFtdID0gIkAoIylwc2lnbmFsLmMJOC4xIChCZXJrZWxleSkgNi80LzkzIjsKKyNlbHNlCitfX1JDU0lEKCIkTmV0QlNEOiBwc2lnbmFsLmMsdiAxLjIzIDIwMTIvMDMvMTMgMjE6MTM6MzYgY2hyaXN0b3MgRXhwICQiKTsKKyNlbmRpZgorI2VuZGlmIC8qIExJQkNfU0NDUyBhbmQgbm90IGxpbnQgKi8KKworI2luY2x1ZGUgIm5hbWVzcGFjZS5oIgorCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3Vpby5oPgorCisjaW5jbHVkZSA8bGltaXRzLmg+CisjaW5jbHVkZSA8c2lnbmFsLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKKyNpbmNsdWRlICJleHRlcm4uaCIKKworI2lmZGVmIF9fd2Vha19hbGlhcworX193ZWFrX2FsaWFzKHBzaWduYWwsX3BzaWduYWwpCisjZW5kaWYKKwordm9pZAorcHNpZ25hbChpbnQgc2lnLCBjb25zdCBjaGFyICpzKQoreworCXN0cnVjdCBpb3ZlYyAqdjsKKwlzdHJ1Y3QgaW92ZWMgaW92WzRdOworCWNoYXIgYnVmW05MX1RFWFRNQVhdOworCisJdiA9IGlvdjsKKwlpZiAocyAmJiAqcykgeworCQl2LT5pb3ZfYmFzZSA9IF9fVU5DT05TVChzKTsKKwkJdi0+aW92X2xlbiA9IHN0cmxlbihzKTsKKwkJdisrOworCQl2LT5pb3ZfYmFzZSA9IF9fVU5DT05TVCgiOiAiKTsKKwkJdi0+aW92X2xlbiA9IDI7CisJCXYrKzsKKwl9CisJdi0+aW92X2Jhc2UgPSBfX1VOQ09OU1QoX19zdHJzaWduYWwoKGludClzaWcsIGJ1Ziwgc2l6ZW9mKGJ1ZikpKTsKKwl2LT5pb3ZfbGVuID0gc3RybGVuKHYtPmlvdl9iYXNlKTsKKwl2Kys7CisJdi0+aW92X2Jhc2UgPSBfX1VOQ09OU1QoIlxuIik7CisJdi0+aW92X2xlbiA9IDE7CisJKHZvaWQpd3JpdGV2KFNUREVSUl9GSUxFTk8sIGlvdiwgKGludCkoKHYgLSBpb3YpICsgMSkpOworfQorCit2b2lkCitwc2lnaW5mbyhjb25zdCBzaWdpbmZvX3QgKnNpLCBjb25zdCBjaGFyICpzKQoreworCXBzaWduYWwoc2ktPnNpX3NpZ25vLCBzKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYmMvZ2VuL3NldGptcGVyci5jIGIvbGliYy91cHN0cmVhbS1uZXRic2QvbGliYy9nZW4vc2V0am1wZXJyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWIxNDMyZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYmMvZ2VuL3NldGptcGVyci5jCkBAIC0wLDAgKzEsNTYgQEAKKy8qCSROZXRCU0Q6IHNldGptcGVyci5jLHYgMS44IDIwMTIvMDYvMjQgMTU6MjY6MDMgY2hyaXN0b3MgRXhwICQJKi8KKworLyoKKyAqIENvcHlyaWdodCAoYykgMTk4MCwgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKyNpZiBkZWZpbmVkKExJQkNfU0NDUykgJiYgIWRlZmluZWQobGludCkKKyNpZiAwCitzdGF0aWMgY2hhciBzY2NzaWRbXSA9ICJAKCMpc2V0am1wZXJyLmMJOC4xIChCZXJrZWxleSkgNi80LzkzIjsKKyNlbHNlCitfX1JDU0lEKCIkTmV0QlNEOiBzZXRqbXBlcnIuYyx2IDEuOCAyMDEyLzA2LzI0IDE1OjI2OjAzIGNocmlzdG9zIEV4cCAkIik7CisjZW5kaWYKKyNlbmRpZiAvKiBMSUJDX1NDQ1MgYW5kIG5vdCBsaW50ICovCisKKy8qCisgKiBUaGlzIHJvdXRpbmUgaXMgY2FsbGVkIGZyb20gbG9uZ2ptcCgpIHdoZW4gYW4gZXJyb3Igb2NjdXJzLgorICogUHJvZ3JhbXMgdGhhdCB3aXNoIHRvIGV4aXQgZ3JhY2VmdWxseSBmcm9tIHRoaXMgZXJyb3IgbWF5CisgKiB3cml0ZSB0aGVpciBvd24gdmVyc2lvbnMuCisgKiBJZiB0aGlzIHJvdXRpbmUgcmV0dXJucywgdGhlIHByb2dyYW0gaXMgYWJvcnRlZC4KKyAqLworCisjaW5jbHVkZSA8c2V0am1wLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKK3ZvaWQKK2xvbmdqbXBlcnJvcih2b2lkKQoreworI2RlZmluZQlFUlJNU0cJImxvbmdqbXAgYm90Y2guXG4iCisJKHZvaWQpd3JpdGUoU1RERVJSX0ZJTEVOTywgRVJSTVNHLCBzaXplb2YoRVJSTVNHKSAtIDEpOworfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1uZXRic2QvbGliYy9nZW4vdXRpbWUuYyBiL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYmMvZ2VuL3V0aW1lLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQxYWFjNwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYmMvZ2VuL3V0aW1lLmMKQEAgLTAsMCArMSw2NSBAQAorLyoJJE5ldEJTRDogdXRpbWUuYyx2IDEuMTQgMjAxMi8wNi8yNSAyMjozMjo0NCBhYnMgRXhwICQJKi8KKworLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisjaWYgZGVmaW5lZChMSUJDX1NDQ1MpICYmICFkZWZpbmVkKGxpbnQpCisjaWYgMAorc3RhdGljIGNoYXIgc2Njc2lkW10gPSAiQCgjKXV0aW1lLmMJOC4xIChCZXJrZWxleSkgNi80LzkzIjsKKyNlbHNlCitfX1JDU0lEKCIkTmV0QlNEOiB1dGltZS5jLHYgMS4xNCAyMDEyLzA2LzI1IDIyOjMyOjQ0IGFicyBFeHAgJCIpOworI2VuZGlmCisjZW5kaWYgLyogTElCQ19TQ0NTIGFuZCBub3QgbGludCAqLworCisjaW5jbHVkZSAibmFtZXNwYWNlLmgiCisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKworI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3RkZGVmLmg+CisjaW5jbHVkZSA8dXRpbWUuaD4KKworaW50Cit1dGltZShjb25zdCBjaGFyICpwYXRoLCBjb25zdCBzdHJ1Y3QgdXRpbWJ1ZiAqdGltZXMpCit7CisJc3RydWN0IHRpbWV2YWwgdHZbMl0sICp0dnA7CisKKwlfRElBR0FTU0VSVChwYXRoICE9IE5VTEwpOworCisJaWYgKHRpbWVzID09IChzdHJ1Y3QgdXRpbWJ1ZiAqKSBOVUxMKQorCQl0dnAgPSBOVUxMOworCWVsc2UgeworCQl0dlswXS50dl9zZWMgPSB0aW1lcy0+YWN0aW1lOworCQl0dlsxXS50dl9zZWMgPSB0aW1lcy0+bW9kdGltZTsKKwkJdHZbMF0udHZfdXNlYyA9IHR2WzFdLnR2X3VzZWMgPSAwOworCQl0dnAgPSB0djsKKwl9CisJcmV0dXJuICh1dGltZXMocGF0aCwgdHZwKSk7Cit9CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW5ldGJzZC9saWJjL2luY2x1ZGUvaXNjL2Fzc2VydGlvbnMuaCBiL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYmMvaW5jbHVkZS9pc2MvYXNzZXJ0aW9ucy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkYjczNjEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW5ldGJzZC9saWJjL2luY2x1ZGUvaXNjL2Fzc2VydGlvbnMuaApAQCAtMCwwICsxLDEzMiBAQAorLyoJJE5ldEJTRDogYXNzZXJ0aW9ucy5oLHYgMS41IDIwMDkvMDQvMTIgMTc6MDc6MTYgY2hyaXN0b3MgRXhwICQJKi8KKworLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwOCAgSW50ZXJuZXQgU3lzdGVtcyBDb25zb3J0aXVtLCBJbmMuICgiSVNDIikKKyAqIENvcHlyaWdodCAoQykgMTk5Ny0yMDAxICBJbnRlcm5ldCBTb2Z0d2FyZSBDb25zb3J0aXVtLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgSVNDIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRICisgKiBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkKKyAqIEFORCBGSVRORVNTLiAgSU4gTk8gRVZFTlQgU0hBTEwgSVNDIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCwKKyAqIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTQorICogTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UKKyAqIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IKKyAqIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisgKi8KKworLyoKKyAqIElkOiBhc3NlcnRpb25zLmgsdiAxLjUgMjAwOC8xMS8xNCAwMjozNjo1MSBtYXJrYSBFeHAKKyAqLworCisjaWZuZGVmIEFTU0VSVElPTlNfSAorI2RlZmluZSBBU1NFUlRJT05TX0gJCTEKKwordHlwZWRlZiBlbnVtIHsKKwlhc3NlcnRfcmVxdWlyZSwgYXNzZXJ0X2Vuc3VyZSwgYXNzZXJ0X2luc2lzdCwgYXNzZXJ0X2ludmFyaWFudAorfSBhc3NlcnRpb25fdHlwZTsKKwordHlwZWRlZiB2b2lkICgqYXNzZXJ0aW9uX2ZhaWx1cmVfY2FsbGJhY2spKGNvbnN0IGNoYXIgKiwgaW50LCBhc3NlcnRpb25fdHlwZSwKKwkJCQkJICAgY29uc3QgY2hhciAqLCBpbnQpOworCisvKiBjb3Zlcml0eVsra2lsbF0gKi8KK2V4dGVybiBhc3NlcnRpb25fZmFpbHVyZV9jYWxsYmFjayBfX2Fzc2VydGlvbl9mYWlsZWQ7Cit2b2lkIHNldF9hc3NlcnRpb25fZmFpbHVyZV9jYWxsYmFjayhhc3NlcnRpb25fZmFpbHVyZV9jYWxsYmFjayBmKTsKK2NvbnN0IGNoYXIgKmFzc2VydGlvbl90eXBlX3RvX3RleHQoYXNzZXJ0aW9uX3R5cGUgdHlwZSk7CisKKyNpZiBkZWZpbmVkKENIRUNLX0FMTCkgfHwgZGVmaW5lZChfX0NPVkVSSVRZX18pCisjZGVmaW5lIENIRUNLX1JFUVVJUkUJCTEKKyNkZWZpbmUgQ0hFQ0tfRU5TVVJFCQkxCisjZGVmaW5lIENIRUNLX0lOU0lTVAkJMQorI2RlZmluZSBDSEVDS19JTlZBUklBTlQJCTEKKyNlbmRpZgorCisjaWYgZGVmaW5lZChDSEVDS19OT05FKSAmJiAhZGVmaW5lZChfX0NPVkVSSVRZX18pCisjZGVmaW5lIENIRUNLX1JFUVVJUkUJCTAKKyNkZWZpbmUgQ0hFQ0tfRU5TVVJFCQkwCisjZGVmaW5lIENIRUNLX0lOU0lTVAkJMAorI2RlZmluZSBDSEVDS19JTlZBUklBTlQJCTAKKyNlbmRpZgorCisjaWZkZWYgX0RJQUdOT1NUSUMKKyNpZm5kZWYgQ0hFQ0tfUkVRVUlSRQorI2RlZmluZSBDSEVDS19SRVFVSVJFCQkxCisjZW5kaWYKKworI2lmbmRlZiBDSEVDS19FTlNVUkUKKyNkZWZpbmUgQ0hFQ0tfRU5TVVJFCQkxCisjZW5kaWYKKworI2lmbmRlZiBDSEVDS19JTlNJU1QKKyNkZWZpbmUgQ0hFQ0tfSU5TSVNUCQkxCisjZW5kaWYKKworI2lmbmRlZiBDSEVDS19JTlZBUklBTlQKKyNkZWZpbmUgQ0hFQ0tfSU5WQVJJQU5UCQkxCisjZW5kaWYKKyNlbmRpZgkvKiBfRElBR05PU1RJQyAqLworCisjaWYgQ0hFQ0tfUkVRVUlSRSAhPSAwCisjZGVmaW5lIFJFUVVJUkUoY29uZCkgXAorCSgodm9pZCkgKChjb25kKSB8fCBcCisJCSAoKF9fYXNzZXJ0aW9uX2ZhaWxlZCkoX19GSUxFX18sIF9fTElORV9fLCBhc3NlcnRfcmVxdWlyZSwgXAorCQkJCSAgICAgICAjY29uZCwgMCksIDApKSkKKyNkZWZpbmUgUkVRVUlSRV9FUlIoY29uZCkgXAorCSgodm9pZCkgKChjb25kKSB8fCBcCisJCSAoKF9fYXNzZXJ0aW9uX2ZhaWxlZCkoX19GSUxFX18sIF9fTElORV9fLCBhc3NlcnRfcmVxdWlyZSwgXAorCQkJCSAgICAgICAjY29uZCwgMSksIDApKSkKKyNlbHNlCisjZGVmaW5lIFJFUVVJUkUoY29uZCkJCSgodm9pZCkgKGNvbmQpKQorI2RlZmluZSBSRVFVSVJFX0VSUihjb25kKQkoKHZvaWQpIChjb25kKSkKKyNlbmRpZiAvKiBDSEVDS19SRVFVSVJFICovCisKKyNpZiBDSEVDS19FTlNVUkUgIT0gMAorI2RlZmluZSBFTlNVUkUoY29uZCkgXAorCSgodm9pZCkgKChjb25kKSB8fCBcCisJCSAoKF9fYXNzZXJ0aW9uX2ZhaWxlZCkoX19GSUxFX18sIF9fTElORV9fLCBhc3NlcnRfZW5zdXJlLCBcCisJCQkJICAgICAgICNjb25kLCAwKSwgMCkpKQorI2RlZmluZSBFTlNVUkVfRVJSKGNvbmQpIFwKKwkoKHZvaWQpICgoY29uZCkgfHwgXAorCQkgKChfX2Fzc2VydGlvbl9mYWlsZWQpKF9fRklMRV9fLCBfX0xJTkVfXywgYXNzZXJ0X2Vuc3VyZSwgXAorCQkJCSAgICAgICAjY29uZCwgMSksIDApKSkKKyNlbHNlCisjZGVmaW5lIEVOU1VSRShjb25kKQkJKCh2b2lkKSAoY29uZCkpCisjZGVmaW5lIEVOU1VSRV9FUlIoY29uZCkJKCh2b2lkKSAoY29uZCkpCisjZW5kaWYgLyogQ0hFQ0tfRU5TVVJFICovCisKKyNpZiBDSEVDS19JTlNJU1QgIT0gMAorI2RlZmluZSBJTlNJU1QoY29uZCkgXAorCSgodm9pZCkgKChjb25kKSB8fCBcCisJCSAoKF9fYXNzZXJ0aW9uX2ZhaWxlZCkoX19GSUxFX18sIF9fTElORV9fLCBhc3NlcnRfaW5zaXN0LCBcCisJCQkJICAgICAgICNjb25kLCAwKSwgMCkpKQorI2RlZmluZSBJTlNJU1RfRVJSKGNvbmQpIFwKKwkoKHZvaWQpICgoY29uZCkgfHwgXAorCQkgKChfX2Fzc2VydGlvbl9mYWlsZWQpKF9fRklMRV9fLCBfX0xJTkVfXywgYXNzZXJ0X2luc2lzdCwgXAorCQkJCSAgICAgICAjY29uZCwgMSksIDApKSkKKyNlbHNlCisjaWYgIWRlZmluZWQoX19saW50X18pCisjZGVmaW5lIElOU0lTVChjb25kKQkJKCh2b2lkKSAoY29uZCkpCisjZGVmaW5lIElOU0lTVF9FUlIoY29uZCkJKCh2b2lkKSAoY29uZCkpCisjZWxzZSAvKiAhX19saW50X18gKi8KKyNkZWZpbmUgSU5TSVNUKGNvbmQpCisjZGVmaW5lIElOU0lTVF9FUlIoY29uZCkKKyNlbmRpZiAvKiAhX19saW50X18gKi8KKyNlbmRpZiAvKiBDSEVDS19JTlNJU1QgKi8KKworI2lmIENIRUNLX0lOVkFSSUFOVCAhPSAwCisjZGVmaW5lIElOVkFSSUFOVChjb25kKSBcCisJKCh2b2lkKSAoKGNvbmQpIHx8IFwKKwkJICgoX19hc3NlcnRpb25fZmFpbGVkKShfX0ZJTEVfXywgX19MSU5FX18sIGFzc2VydF9pbnZhcmlhbnQsIFwKKwkJCQkgICAgICAgI2NvbmQsIDApLCAwKSkpCisjZGVmaW5lIElOVkFSSUFOVF9FUlIoY29uZCkgXAorCSgodm9pZCkgKChjb25kKSB8fCBcCisJCSAoKF9fYXNzZXJ0aW9uX2ZhaWxlZCkoX19GSUxFX18sIF9fTElORV9fLCBhc3NlcnRfaW52YXJpYW50LCBcCisJCQkJICAgICAgICNjb25kLCAxKSwgMCkpKQorI2Vsc2UKKyNkZWZpbmUgSU5WQVJJQU5UKGNvbmQpCQkoKHZvaWQpIChjb25kKSkKKyNkZWZpbmUgSU5WQVJJQU5UX0VSUihjb25kKQkoKHZvaWQpIChjb25kKSkKKyNlbmRpZiAvKiBDSEVDS19JTlZBUklBTlQgKi8KKyNlbmRpZiAvKiBBU1NFUlRJT05TX0ggKi8KKy8qISBcZmlsZSAqLwpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1uZXRic2QvbGliYy9pbmNsdWRlL2lzYy9kc3QuaCBiL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYmMvaW5jbHVkZS9pc2MvZHN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTUzN2UzZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYmMvaW5jbHVkZS9pc2MvZHN0LmgKQEAgLTAsMCArMSwxNzAgQEAKKy8qCSROZXRCU0Q6IGRzdC5oLHYgMS4xLjEuNCAyMDA5LzA0LzEyIDE2OjM1OjQ0IGNocmlzdG9zIEV4cCAkCSovCisKKyNpZm5kZWYgRFNUX0gKKyNkZWZpbmUgRFNUX0gKKworI2lmbmRlZiBIQVNfRFNUX0tFWQordHlwZWRlZiBzdHJ1Y3QgZHN0X2tleSB7CisJY2hhcgkqZGtfa2V5X25hbWU7ICAgLyolPCBuYW1lIG9mIHRoZSBrZXkgKi8KKwlpbnQJZGtfa2V5X3NpemU7ICAgIC8qJTwgdGhpcyBpcyB0aGUgc2l6ZSBvZiB0aGUga2V5IGluIGJpdHMgKi8KKwlpbnQJZGtfcHJvdG87ICAgICAgIC8qJTwgd2hhdCBwcm90b2NvbHMgdGhpcyBrZXkgY2FuIGJlIHVzZWQgZm9yICovCisJaW50CWRrX2FsZzsgICAgICAgICAvKiU8IGFsZ29yaXRobSBudW1iZXIgZnJvbSBrZXkgcmVjb3JkICovCisJdV9pbnQzMl90IGRrX2ZsYWdzOyAgICAgLyolPCBhbmQgdGhlIGZsYWdzIG9mIHRoZSBwdWJsaWMga2V5ICovCisJdV9pbnQxNl90IGRrX2lkOyAgICAgICAgLyolPCBpZGVudGlmaWVyIG9mIHRoZSBrZXkgKi8KK30gRFNUX0tFWTsKKyNlbmRpZiAvKiBIQVNfRFNUX0tFWSAqLworLyoKKyAqIGRvIG5vdCB0YWludCBuYW1lc3BhY2UKKyAqLworI2RlZmluZQlkc3RfYnNhZmVfaW5pdAkJX19kc3RfYnNhZmVfaW5pdAorI2RlZmluZQlkc3RfYnVmZmVyX3RvX2tleQlfX2RzdF9idWZmZXJfdG9fa2V5CisjZGVmaW5lCWRzdF9jaGVja19hbGdvcml0aG0JX19kc3RfY2hlY2tfYWxnb3JpdGhtCisjZGVmaW5lCWRzdF9jb21wYXJlX2tleXMJX19kc3RfY29tcGFyZV9rZXlzCisjZGVmaW5lCWRzdF9jeWxpbmtfaW5pdAkJX19kc3RfY3lsaW5rX2luaXQKKyNkZWZpbmUJZHN0X2Ruc2tleV90b19rZXkJX19kc3RfZG5za2V5X3RvX2tleQorI2RlZmluZQlkc3RfZWF5X2Rzc19pbml0CV9fZHN0X2VheV9kc3NfaW5pdAorI2RlZmluZQlkc3RfZnJlZV9rZXkJCV9fZHN0X2ZyZWVfa2V5CisjZGVmaW5lCWRzdF9nZW5lcmF0ZV9rZXkJX19kc3RfZ2VuZXJhdGVfa2V5CisjZGVmaW5lCWRzdF9obWFjX21kNV9pbml0CV9fZHN0X2htYWNfbWQ1X2luaXQKKyNkZWZpbmUJZHN0X2luaXQJCV9fZHN0X2luaXQKKyNkZWZpbmUJZHN0X2tleV90b19idWZmZXIJX19kc3Rfa2V5X3RvX2J1ZmZlcgorI2RlZmluZQlkc3Rfa2V5X3RvX2Ruc2tleQlfX2RzdF9rZXlfdG9fZG5za2V5CisjZGVmaW5lCWRzdF9yZWFkX2tleQkJX19kc3RfcmVhZF9rZXkKKyNkZWZpbmUJZHN0X3JzYXJlZl9pbml0CQlfX2RzdF9yc2FyZWZfaW5pdAorI2RlZmluZQlkc3Rfc19idWlsZF9maWxlbmFtZQlfX2RzdF9zX2J1aWxkX2ZpbGVuYW1lCisjZGVmaW5lCWRzdF9zX2NhbGN1bGF0ZV9iaXRzCV9fZHN0X3NfY2FsY3VsYXRlX2JpdHMKKyNkZWZpbmUJZHN0X3NfY29udl9iaWdudW1fYjY0X3RvX3U4CV9fZHN0X3NfY29udl9iaWdudW1fYjY0X3RvX3U4CisjZGVmaW5lCWRzdF9zX2NvbnZfYmlnbnVtX3U4X3RvX2I2NAlfX2RzdF9zX2NvbnZfYmlnbnVtX3U4X3RvX2I2NAorI2RlZmluZQlkc3Rfc19kbnNfa2V5X2lkCV9fZHN0X3NfZG5zX2tleV9pZAorI2RlZmluZQlkc3Rfc19kdW1wCQlfX2RzdF9zX2R1bXAKKyNkZWZpbmUJZHN0X3NfZmlsZW5hbWVfbGVuZ3RoCV9fZHN0X3NfZmlsZW5hbWVfbGVuZ3RoCisjZGVmaW5lCWRzdF9zX2ZvcGVuCQlfX2RzdF9zX2ZvcGVuCisjZGVmaW5lCWRzdF9zX2dldF9pbnQxNgkJX19kc3Rfc19nZXRfaW50MTYKKyNkZWZpbmUJZHN0X3NfZ2V0X2ludDMyCQlfX2RzdF9zX2dldF9pbnQzMgorI2RlZmluZQlkc3Rfc19pZF9jYWxjCQlfX2RzdF9zX2lkX2NhbGMKKyNkZWZpbmUJZHN0X3NfcHV0X2ludDE2CQlfX2RzdF9zX3B1dF9pbnQxNgorI2RlZmluZQlkc3Rfc19wdXRfaW50MzIJCV9fZHN0X3NfcHV0X2ludDMyCisjZGVmaW5lCWRzdF9zX3F1aWNrX3JhbmRvbQlfX2RzdF9zX3F1aWNrX3JhbmRvbQorI2RlZmluZQlkc3Rfc19xdWlja19yYW5kb21fc2V0CV9fZHN0X3NfcXVpY2tfcmFuZG9tX3NldAorI2RlZmluZQlkc3Rfc19yYW5kb20JCV9fZHN0X3NfcmFuZG9tCisjZGVmaW5lCWRzdF9zX3NlbWlfcmFuZG9tCV9fZHN0X3Nfc2VtaV9yYW5kb20KKyNkZWZpbmUJZHN0X3NfdmVyaWZ5X3N0cglfX2RzdF9zX3ZlcmlmeV9zdHIKKyNkZWZpbmUJZHN0X3NpZ19zaXplCQlfX2RzdF9zaWdfc2l6ZQorI2RlZmluZQlkc3Rfc2lnbl9kYXRhCQlfX2RzdF9zaWduX2RhdGEKKyNkZWZpbmUJZHN0X3ZlcmlmeV9kYXRhCQlfX2RzdF92ZXJpZnlfZGF0YQorI2RlZmluZQlkc3Rfd3JpdGVfa2V5CQlfX2RzdF93cml0ZV9rZXkKKworLyogCisgKiBEU1QgQ3J5cHRvIEFQSSBkZWZpbnRpb25zIAorICovCit2b2lkICAgICBkc3RfaW5pdCh2b2lkKTsKK2ludCAgICAgIGRzdF9jaGVja19hbGdvcml0aG0oY29uc3QgaW50KTsKKworCitpbnQgZHN0X3NpZ25fZGF0YShjb25zdCBpbnQsCSAJLyohPCAgIHNwZWNpZmllcyBJTklUL1VQREFURS9GSU5BTC9BTEwgICovCisJCSAgRFNUX0tFWSAqLAkgCS8qITwgICB0aGUga2V5IHRvIHVzZSAgKi8KKwkJICB2b2lkICoqLAkgCS8qITwgICBwb2ludGVyIHRvIHN0YXRlIHN0cnVjdHVyZSAgKi8KKwkJICBjb25zdCB1X2NoYXIgKiwJLyohPCAgIGRhdGEgdG8gYmUgc2lnbmVkICAqLworCQkgIGNvbnN0IGludCwJIAkvKiE8ICAgbGVuZ3RoIG9mIGlucHV0IGRhdGEgICovCisJCSAgdV9jaGFyICosCSAJLyohPCAgIGJ1ZmZlciB0byB3cml0ZSBzaWduYXR1cmUgdG8gICovCisJCSAgY29uc3QgaW50KTsJIAkvKiE8ICAgc2l6ZSBvZiBvdXRwdXQgYnVmZmVyICAqLworaW50IGRzdF92ZXJpZnlfZGF0YShjb25zdCBpbnQsCSAJLyohPCAgIHNwZWNpZmllcyBJTklUL1VQREFURS9GSU5BTC9BTEwgICovCisJCSAgICBEU1RfS0VZICosCSAJLyohPCAgIHRoZSBrZXkgdG8gdXNlICAqLworCQkgICAgdm9pZCAqKiwJIAkvKiE8ICAgcG9pbnRlciB0byBzdGF0ZSBzdHJ1Y3R1cmUgICovCisJCSAgICBjb25zdCB1X2NoYXIgKiwJLyohPCAgIGRhdGEgdG8gYmUgdmVyaWZpZWQgICovCisJCSAgICBjb25zdCBpbnQsCSAJLyohPCAgIGxlbmd0aCBvZiBpbnB1dCBkYXRhICAqLworCQkgICAgY29uc3QgdV9jaGFyICosCS8qITwgICBidWZmZXIgY29udGFpbmluZyBzaWduYXR1cmUgICovCisJCSAgICBjb25zdCBpbnQpOwkgCS8qITwgICBsZW5ndGggb2Ygc2lnbmF0dXJlICAqLworRFNUX0tFWSAqZHN0X3JlYWRfa2V5KGNvbnN0IGNoYXIgKiwJLyohPCAgIG5hbWUgb2Yga2V5ICAqLworCQkgICAgICBjb25zdCB1X2ludDE2X3QsCS8qITwgICBrZXkgdGFnIGlkZW50aWZpZXIgICovCisJCSAgICAgIGNvbnN0IGludCwJLyohPCAgIGtleSBhbGdvcml0aG0gICovCisJCSAgICAgIGNvbnN0IGludCk7CS8qITwgICBQcml2YXRlL1B1YmxpY0tleSB3YW50ZWQgKi8KK2ludCAgICAgIGRzdF93cml0ZV9rZXkoY29uc3QgRFNUX0tFWSAqLAkvKiE8ICAga2V5IHRvIHdyaXRlIG91dCAgKi8KKwkJICAgICAgIGNvbnN0IGludCk7IAkvKiE8ICAgUHVibGljL1ByaXZhdGUgICovCitEU1RfS0VZICpkc3RfZG5za2V5X3RvX2tleShjb25zdCBjaGFyICosCS8qITwgICBLRVkgcmVjb3JkIG5hbWUgICovCisJCQkgICBjb25zdCB1X2NoYXIgKiwJLyohPCAgIEtFWSBSREFUQSAgKi8KKwkJCSAgIGNvbnN0IGludCk7CQkvKiE8ICAgc2l6ZSBvZiBpbnB1dCBidWZmZXIgKi8KK2ludCAgICAgIGRzdF9rZXlfdG9fZG5za2V5KGNvbnN0IERTVF9LRVkgKiwJLyohPCAgIGtleSB0byB0cmFuc2xhdGUgICovCisJCQkgICB1X2NoYXIgKiwJCS8qITwgICBvdXRwdXQgYnVmZmVyICAqLworCQkJICAgY29uc3QgaW50KTsJCS8qITwgICBzaXplIG9mIG91dF9zdG9yYWdlICovCitEU1RfS0VZICpkc3RfYnVmZmVyX3RvX2tleShjb25zdCBjaGFyICosICAJLyohPCAgIG5hbWUgb2YgdGhlIGtleSAgKi8KKwkJCSAgIGNvbnN0IGludCwJICAJLyohPCAgIGFsZ29yaXRobSAgKi8KKwkJCSAgIGNvbnN0IGludCwJICAJLyohPCAgIGRucyBmbGFncyAgKi8KKwkJCSAgIGNvbnN0IGludCwJICAJLyohPCAgIGRucyBwcm90b2NvbCAgKi8KKwkJCSAgIGNvbnN0IHVfY2hhciAqLCAJLyohPCAgIGtleSBpbiBkbnMgd2lyZSBmbXQgICovCisJCQkgICBjb25zdCBpbnQpOwkgIAkvKiE8ICAgc2l6ZSBvZiBrZXkgICovCitpbnQgICAgIGRzdF9rZXlfdG9fYnVmZmVyKERTVF9LRVkgKiwgdV9jaGFyICosIGludCk7CisKK0RTVF9LRVkgKmRzdF9nZW5lcmF0ZV9rZXkoY29uc3QgY2hhciAqLCAgICAJLyohPCAgIG5hbWUgb2YgbmV3IGtleSAgKi8KKwkJCSAgY29uc3QgaW50LCAgICAgICAJLyohPCAgIGtleSBhbGdvcml0aG0gdG8gZ2VuZXJhdGUgICovCisJCQkgIGNvbnN0IGludCwgICAgICAJLyohPCAgIHNpemUgb2YgbmV3IGtleSAgKi8KKwkJCSAgY29uc3QgaW50LCAgICAgICAJLyohPCAgIGFsZyBkZXBlbmRlbnQgcGFyYW1ldGVyICovCisJCQkgIGNvbnN0IGludCwgICAgIAkvKiE8ICAga2V5IEROUyBmbGFncyAgKi8KKwkJCSAgY29uc3QgaW50KTsJCS8qITwgICBrZXkgRE5TIHByb3RvY29sICAqLworRFNUX0tFWSAqZHN0X2ZyZWVfa2V5KERTVF9LRVkgKik7CitpbnQgICAgICBkc3RfY29tcGFyZV9rZXlzKGNvbnN0IERTVF9LRVkgKiwgY29uc3QgRFNUX0tFWSAqKTsKKworaW50CWRzdF9zaWdfc2l6ZShEU1RfS0VZICopOworCisKKy8qIHN1cHBvcnQgZm9yIGRucyBrZXkgdGFncy9pZHMgKi8KK3VfaW50MTZfdCBkc3Rfc19kbnNfa2V5X2lkKGNvbnN0IHVfY2hhciAqLCBjb25zdCBpbnQpOwordV9pbnQxNl90IGRzdF9zX2lkX2NhbGMoY29uc3QgdV9jaGFyICosIGNvbnN0IGludCk7CisKKy8qIFVzZWQgYnkgY2FsbGVycyBhcyB3ZWxsIGFzIGJ5IHRoZSBsaWJyYXJ5LiAgKi8KKyNkZWZpbmUgUkFXX0tFWV9TSVpFICAgIDgxOTIgICAgICAgIC8qJTwgbGFyZ2UgZW5vdWdoIHRvIHN0b3JlIGFueSBrZXkgKi8KKy8qIERTVF9BUEkgY29udHJvbCBmbGFncyAqLworLyogVGhlc2UgYXJlIHVzZWQgdXNlZCBpbiBmdW5jdGlvbnMgZHN0X3NpZ25fZGF0YSBhbmQgZHN0X3ZlcmlmeV9kYXRhICovCisjZGVmaW5lIFNJR19NT0RFX0lOSVQJCTEgIC8qJTwgaW5pdGlhbGl6ZSBkaWdlc3QgKi8KKyNkZWZpbmUgU0lHX01PREVfVVBEQVRFCQkyICAvKiU8IGFkZCBkYXRhIHRvIGRpZ2VzdCAqLworI2RlZmluZSBTSUdfTU9ERV9GSU5BTAkJNCAgLyolPCBnZW5lcmF0ZS92ZXJpZnkgc2lnbmF0dXJlICovCisjZGVmaW5lIFNJR19NT0RFX0FMTAkJKFNJR19NT0RFX0lOSVR8U0lHX01PREVfVVBEQVRFfFNJR19NT0RFX0ZJTkFMKQorCisvKiBGbGFncyBmb3IgZHN0X3JlYWRfcHJpdmF0ZV9rZXkoKSAgKi8KKyNkZWZpbmUgRFNUX0ZPUkNFX1JFQUQJCTB4MTAwMDAwMAorI2RlZmluZSBEU1RfQ0FOX1NJR04JCTB4MDEwRgorI2RlZmluZSBEU1RfTk9fQVVUSEVOCQkweDgwMDAKKyNkZWZpbmUgRFNUX0VYVEVORF9GTEFHICAgICAgICAgMHgxMDAwCisjZGVmaW5lIERTVF9TVEFOREFSRAkJMAorI2RlZmluZSBEU1RfUFJJVkFURSAgICAgICAgICAgICAweDIwMDAwMDAKKyNkZWZpbmUgRFNUX1BVQkxJQyAgICAgICAgICAgICAgMHg0MDAwMDAwCisjZGVmaW5lIERTVF9SQU5EX1NFTUkgICAgICAgICAgIDEKKyNkZWZpbmUgRFNUX1JBTkRfU1REICAgICAgICAgICAgMgorI2RlZmluZSBEU1RfUkFORF9LRVkgICAgICAgICAgICAzCisjZGVmaW5lIERTVF9SQU5EX0RTUyAgICAgICAgICAgIDQKKworCisvKiBEU1QgYWxnb3JpdGhtIGNvZGVzICovCisjZGVmaW5lIEtFWV9SU0EJCQkxCisjZGVmaW5lIEtFWV9ESAkJCTIKKyNkZWZpbmUgS0VZX0RTQQkJCTMKKyNkZWZpbmUgS0VZX1BSSVZBVEUJCTI1NAorI2RlZmluZSBLRVlfRVhQQU5ECQkyNTUKKyNkZWZpbmUgS0VZX0hNQUNfTUQ1CQkxNTcKKyNkZWZpbmUgS0VZX0hNQUNfU0hBMQkJMTU4CisjZGVmaW5lIFVOS05PV05fS0VZQUxHCQkwCisjZGVmaW5lIERTVF9NQVhfQUxHUyAgICAgICAgICAgIEtFWV9ITUFDX1NIQTEKKworLyogRFNUIGNvbnN0YW50cyB0byBsb2NhdGlvbnMgaW4gS0VZIHJlY29yZCAgY2hhbmdlcyBpbiBuZXcgS0VZIHJlY29yZCAqLworI2RlZmluZSBEU1RfRkxBR1NfU0laRQkJMgorI2RlZmluZSBEU1RfS0VZX1BST1QJCTIKKyNkZWZpbmUgRFNUX0tFWV9BTEcJCTMKKyNkZWZpbmUgRFNUX0VYVF9GTEFHICAgICAgICAgICAgNAorI2RlZmluZSBEU1RfS0VZX1NUQVJUCQk0CisKKyNpZm5kZWYgU0lHTl9GX05PS0VZIAorI2RlZmluZSBTSUdOX0ZfTk9LRVkJCTB4QzAwMAorI2VuZGlmCisKKy8qIGVycm9yIGNvZGVzIGZyb20gZHN0IHJvdXRpbmVzICovCisjZGVmaW5lIFNJR05fSU5JVF9GQUlMVVJFCSgtMjMpCisjZGVmaW5lIFNJR05fVVBEQVRFX0ZBSUxVUkUJKC0yNCkKKyNkZWZpbmUgU0lHTl9GSU5BTF9GQUlMVVJFCSgtMjUpCisjZGVmaW5lIFZFUklGWV9JTklUX0ZBSUxVUkUJKC0yNikKKyNkZWZpbmUgVkVSSUZZX1VQREFURV9GQUlMVVJFCSgtMjcpCisjZGVmaW5lIFZFUklGWV9GSU5BTF9GQUlMVVJFCSgtMjgpCisjZGVmaW5lIE1JU1NJTkdfS0VZX09SX1NJR05BVFVSRSAoLTMwKQorI2RlZmluZSBVTlNVUFBPUlRFRF9LRVlBTEcJKC0zMSkKKworI2VuZGlmIC8qIERTVF9IICovCisvKiEgXGZpbGUgKi8KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYmMvaW5jbHVkZS9pc2MvZXZlbnRsaWIuaCBiL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYmMvaW5jbHVkZS9pc2MvZXZlbnRsaWIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZTljYzJlCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1uZXRic2QvbGliYy9pbmNsdWRlL2lzYy9ldmVudGxpYi5oCkBAIC0wLDAgKzEsMjA2IEBACisvKgkkTmV0QlNEOiBldmVudGxpYi5oLHYgMS4zIDIwMDkvMDQvMTIgMTc6MDc6MTYgY2hyaXN0b3MgRXhwICQJKi8KKworLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwOCAgSW50ZXJuZXQgU3lzdGVtcyBDb25zb3J0aXVtLCBJbmMuICgiSVNDIikKKyAqIENvcHlyaWdodCAoQykgMTk5NS0xOTk5LCAyMDAxLCAyMDAzICBJbnRlcm5ldCBTb2Z0d2FyZSBDb25zb3J0aXVtLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgSVNDIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRICisgKiBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkKKyAqIEFORCBGSVRORVNTLiAgSU4gTk8gRVZFTlQgU0hBTEwgSVNDIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCwKKyAqIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTQorICogTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UKKyAqIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IKKyAqIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisgKi8KKworLyogZXZlbnRsaWIuaCAtIGV4cG9ydGVkIGludGVyZmFjZXMgZm9yIGV2ZW50bGliCisgKiB2aXggMDlzZXA5NSBbaW5pdGlhbF0KKyAqCisgKiBJZDogZXZlbnRsaWIuaCx2IDEuNyAyMDA4LzExLzE0IDAyOjM2OjUxIG1hcmthIEV4cAorICovCisKKyNpZm5kZWYgX0VWRU5UTElCX0gKKyNkZWZpbmUgX0VWRU5UTElCX0gKKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy91aW8uaD4KKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisKKyNpZm5kZWYgX19QCisjIGRlZmluZSBfX0VWRU5UTElCX1BfREVGSU5FRAorIyBpZmRlZiBfX1NURENfXworIyAgZGVmaW5lIF9fUCh4KSB4CisjIGVsc2UKKyMgIGRlZmluZSBfX1AoeCkgKCkKKyMgZW5kaWYKKyNlbmRpZgorCisvKiBJbiB0aGUgYWJzZW5jZSBvZiBicmFuZGVkIHR5cGVzLi4uICovCit0eXBlZGVmIHN0cnVjdCB7IHZvaWQgKm9wYXF1ZTsgfSBldkNvbm5JRDsKK3R5cGVkZWYgc3RydWN0IHsgdm9pZCAqb3BhcXVlOyB9IGV2RmlsZUlEOwordHlwZWRlZiBzdHJ1Y3QgeyB2b2lkICpvcGFxdWU7IH0gZXZTdHJlYW1JRDsKK3R5cGVkZWYgc3RydWN0IHsgdm9pZCAqb3BhcXVlOyB9IGV2VGltZXJJRDsKK3R5cGVkZWYgc3RydWN0IHsgdm9pZCAqb3BhcXVlOyB9IGV2V2FpdElEOwordHlwZWRlZiBzdHJ1Y3QgeyB2b2lkICpvcGFxdWU7IH0gZXZDb250ZXh0OwordHlwZWRlZiBzdHJ1Y3QgeyB2b2lkICpvcGFxdWU7IH0gZXZFdmVudDsKKworI2RlZmluZQlldkluaXRJRChpZCkgKChpZCktPm9wYXF1ZSA9IE5VTEwpCisjZGVmaW5lCWV2VGVzdElEKGlkKSAoKGlkKS5vcGFxdWUgIT0gTlVMTCkKKwordHlwZWRlZiB2b2lkICgqZXZDb25uRnVuYylfX1AoKGV2Q29udGV4dCwgdm9pZCAqLCBpbnQsIGNvbnN0IHZvaWQgKiwgaW50LAorCQkJICAgICAgIGNvbnN0IHZvaWQgKiwgaW50KSk7Cit0eXBlZGVmIHZvaWQgKCpldkZpbGVGdW5jKV9fUCgoZXZDb250ZXh0LCB2b2lkICosIGludCwgaW50KSk7Cit0eXBlZGVmCXZvaWQgKCpldlN0cmVhbUZ1bmMpX19QKChldkNvbnRleHQsIHZvaWQgKiwgaW50LCBpbnQpKTsKK3R5cGVkZWYgdm9pZCAoKmV2VGltZXJGdW5jKV9fUCgoZXZDb250ZXh0LCB2b2lkICosCisJCQkJc3RydWN0IHRpbWVzcGVjLCBzdHJ1Y3QgdGltZXNwZWMpKTsKK3R5cGVkZWYJdm9pZCAoKmV2V2FpdEZ1bmMpX19QKChldkNvbnRleHQsIHZvaWQgKiwgY29uc3Qgdm9pZCAqKSk7CisKK3R5cGVkZWYJc3RydWN0IHsgdW5zaWduZWQgY2hhciBtYXNrWzI1Ni84XTsgfSBldkJ5dGVNYXNrOworI2RlZmluZQlFVl9CWVRFTUFTS19CWVRFKGIpICgoYikgLyA4KQorI2RlZmluZQlFVl9CWVRFTUFTS19NQVNLKGIpICgxIDw8ICgoYikgJSA4KSkKKyNkZWZpbmUJRVZfQllURU1BU0tfU0VUKGJtLCBiKSBcCisJKChibSkubWFza1tFVl9CWVRFTUFTS19CWVRFKGIpXSB8PSBFVl9CWVRFTUFTS19NQVNLKGIpKQorI2RlZmluZQlFVl9CWVRFTUFTS19DTFIoYm0sIGIpIFwKKwkoKGJtKS5tYXNrW0VWX0JZVEVNQVNLX0JZVEUoYildICY9IH5FVl9CWVRFTUFTS19NQVNLKGIpKQorI2RlZmluZQlFVl9CWVRFTUFTS19UU1QoYm0sIGIpIFwKKwkoKGJtKS5tYXNrW0VWX0JZVEVNQVNLX0JZVEUoYildICYgRVZfQllURU1BU0tfTUFTSyhiKSkKKworI2RlZmluZQlFVl9QT0xMCQkxCisjZGVmaW5lCUVWX1dBSVQJCTIKKyNkZWZpbmUJRVZfTlVMTAkJNAorCisjZGVmaW5lCUVWX1JFQUQJCTEKKyNkZWZpbmUJRVZfV1JJVEUJMgorI2RlZmluZQlFVl9FWENFUFQJNAorCisjZGVmaW5lIEVWX1dBU05PTkJMT0NLSU5HIDgJLyogSW50ZXJuYWwgbGlicmFyeSB1c2UuICovCisKKy8qIGV2ZW50bGliLmMgKi8KKyNkZWZpbmUgZXZDcmVhdGUJX19ldkNyZWF0ZQorI2RlZmluZSBldlNldERlYnVnCV9fZXZTZXREZWJ1ZworI2RlZmluZSBldkRlc3Ryb3kJX19ldkRlc3Ryb3kKKyNkZWZpbmUgZXZHZXROZXh0CV9fZXZHZXROZXh0CisjZGVmaW5lIGV2RGlzcGF0Y2gJX19ldkRpc3BhdGNoCisjZGVmaW5lIGV2RHJvcAkJX19ldkRyb3AKKyNkZWZpbmUgZXZNYWluTG9vcAlfX2V2TWFpbkxvb3AKKyNkZWZpbmUgZXZIaWdoZXN0RkQJX19ldkhpZ2hlc3RGRAorI2RlZmluZSBldkdldE9wdGlvbglfX2V2R2V0T3B0aW9uCisjZGVmaW5lIGV2U2V0T3B0aW9uCV9fZXZTZXRPcHRpb24KKworaW50ICBldkNyZWF0ZSBfX1AoKGV2Q29udGV4dCAqKSk7Cit2b2lkIGV2U2V0RGVidWcgX19QKChldkNvbnRleHQsIGludCwgRklMRSAqKSk7CitpbnQgIGV2RGVzdHJveSBfX1AoKGV2Q29udGV4dCkpOworaW50ICBldkdldE5leHQgX19QKChldkNvbnRleHQsIGV2RXZlbnQgKiwgaW50KSk7CitpbnQgIGV2RGlzcGF0Y2ggX19QKChldkNvbnRleHQsIGV2RXZlbnQpKTsKK3ZvaWQgZXZEcm9wIF9fUCgoZXZDb250ZXh0LCBldkV2ZW50KSk7CitpbnQgIGV2TWFpbkxvb3AgX19QKChldkNvbnRleHQpKTsKK2ludCAgZXZIaWdoZXN0RkQgX19QKChldkNvbnRleHQpKTsKK2ludCAgZXZHZXRPcHRpb24gX19QKChldkNvbnRleHQgKiwgY29uc3QgY2hhciAqLCBpbnQgKikpOworaW50ICBldlNldE9wdGlvbiBfX1AoKGV2Q29udGV4dCAqLCBjb25zdCBjaGFyICosIGludCkpOworCisvKiBldl9jb25uZWN0cy5jICovCisjZGVmaW5lIGV2TGlzdGVuCV9fZXZMaXN0ZW4KKyNkZWZpbmUgZXZDb25uZWN0CV9fZXZDb25uZWN0CisjZGVmaW5lIGV2Q2FuY2VsQ29ubglfX2V2Q2FuY2VsQ29ubgorI2RlZmluZSBldkhvbGQJCV9fZXZIb2xkCisjZGVmaW5lIGV2VW5ob2xkCV9fZXZVbmhvbGQKKyNkZWZpbmUgZXZUcnlBY2NlcHQJX19ldlRyeUFjY2VwdAorCitpbnQgZXZMaXN0ZW4gX19QKChldkNvbnRleHQsIGludCwgaW50LCBldkNvbm5GdW5jLCB2b2lkICosIGV2Q29ubklEICopKTsKK2ludCBldkNvbm5lY3QgX19QKChldkNvbnRleHQsIGludCwgY29uc3Qgdm9pZCAqLCBpbnQsCisJCSAgIGV2Q29ubkZ1bmMsIHZvaWQgKiwgZXZDb25uSUQgKikpOworaW50IGV2Q2FuY2VsQ29ubiBfX1AoKGV2Q29udGV4dCwgZXZDb25uSUQpKTsKK2ludCBldkhvbGQgX19QKChldkNvbnRleHQsIGV2Q29ubklEKSk7CitpbnQgZXZVbmhvbGQgX19QKChldkNvbnRleHQsIGV2Q29ubklEKSk7CitpbnQgZXZUcnlBY2NlcHQgX19QKChldkNvbnRleHQsIGV2Q29ubklELCBpbnQgKikpOworCisvKiBldl9maWxlcy5jICovCisjZGVmaW5lIGV2U2VsZWN0RkQJX19ldlNlbGVjdEZECisjZGVmaW5lIGV2RGVzZWxlY3RGRAlfX2V2RGVzZWxlY3RGRAorCitpbnQgZXZTZWxlY3RGRCBfX1AoKGV2Q29udGV4dCwgaW50LCBpbnQsIGV2RmlsZUZ1bmMsIHZvaWQgKiwgZXZGaWxlSUQgKikpOworaW50IGV2RGVzZWxlY3RGRCBfX1AoKGV2Q29udGV4dCwgZXZGaWxlSUQpKTsKKworLyogZXZfc3RyZWFtcy5jICovCisjZGVmaW5lIGV2Q29uc0lvdmVjCV9fZXZDb25zSW92ZWMKKyNkZWZpbmUgZXZXcml0ZQkJX19ldldyaXRlCisjZGVmaW5lIGV2UmVhZAkJX19ldlJlYWQKKyNkZWZpbmUgZXZUaW1lUlcJX19ldlRpbWVSVworI2RlZmluZSBldlVudGltZVJXCV9fZXZVbnRpbWVSVworI2RlZmluZQlldkNhbmNlbFJXCV9fZXZDYW5jZWxSVworCitzdHJ1Y3QgaW92ZWMgZXZDb25zSW92ZWMgX19QKCh2b2lkICosIHNpemVfdCkpOworaW50IGV2V3JpdGUgX19QKChldkNvbnRleHQsIGludCwgY29uc3Qgc3RydWN0IGlvdmVjICosIGludCwKKwkJIGV2U3RyZWFtRnVuYyBmdW5jLCB2b2lkICosIGV2U3RyZWFtSUQgKikpOworaW50IGV2UmVhZCBfX1AoKGV2Q29udGV4dCwgaW50LCBjb25zdCBzdHJ1Y3QgaW92ZWMgKiwgaW50LAorCQlldlN0cmVhbUZ1bmMgZnVuYywgdm9pZCAqLCBldlN0cmVhbUlEICopKTsKK2ludCBldlRpbWVSVyBfX1AoKGV2Q29udGV4dCwgZXZTdHJlYW1JRCwgZXZUaW1lcklEIHRpbWVyKSk7CitpbnQgZXZVbnRpbWVSVyBfX1AoKGV2Q29udGV4dCwgZXZTdHJlYW1JRCkpOworaW50IGV2Q2FuY2VsUlcgX19QKChldkNvbnRleHQsIGV2U3RyZWFtSUQpKTsKKworLyogZXZfdGltZXJzLmMgKi8KKyNkZWZpbmUgZXZDb25zVGltZQlfX2V2Q29uc1RpbWUKKyNkZWZpbmUgZXZBZGRUaW1lCV9fZXZBZGRUaW1lCisjZGVmaW5lIGV2U3ViVGltZQlfX2V2U3ViVGltZQorI2RlZmluZSBldkNtcFRpbWUJX19ldkNtcFRpbWUKKyNkZWZpbmUJZXZUaW1lU3BlYwlfX2V2VGltZVNwZWMKKyNkZWZpbmUJZXZUaW1lVmFsCV9fZXZUaW1lVmFsCisKKyNkZWZpbmUgZXZOb3dUaW1lCQlfX2V2Tm93VGltZQorI2RlZmluZSBldlVUQ1RpbWUJCV9fZXZVVENUaW1lCisjZGVmaW5lIGV2TGFzdEV2ZW50VGltZQkJX19ldkxhc3RFdmVudFRpbWUKKyNkZWZpbmUgZXZTZXRUaW1lcgkJX19ldlNldFRpbWVyCisjZGVmaW5lIGV2Q2xlYXJUaW1lcgkJX19ldkNsZWFyVGltZXIKKyNkZWZpbmUgZXZDb25maWdUaW1lcgkJX19ldkNvbmZpZ1RpbWVyCisjZGVmaW5lIGV2UmVzZXRUaW1lcgkJX19ldlJlc2V0VGltZXIKKyNkZWZpbmUgZXZTZXRJZGxlVGltZXIJCV9fZXZTZXRJZGxlVGltZXIKKyNkZWZpbmUgZXZDbGVhcklkbGVUaW1lcglfX2V2Q2xlYXJJZGxlVGltZXIKKyNkZWZpbmUgZXZSZXNldElkbGVUaW1lcglfX2V2UmVzZXRJZGxlVGltZXIKKyNkZWZpbmUgZXZUb3VjaElkbGVUaW1lcglfX2V2VG91Y2hJZGxlVGltZXIKKworc3RydWN0IHRpbWVzcGVjIGV2Q29uc1RpbWUgX19QKCh0aW1lX3Qgc2VjLCBsb25nIG5zZWMpKTsKK3N0cnVjdCB0aW1lc3BlYyBldkFkZFRpbWUgX19QKChzdHJ1Y3QgdGltZXNwZWMsIHN0cnVjdCB0aW1lc3BlYykpOworc3RydWN0IHRpbWVzcGVjIGV2U3ViVGltZSBfX1AoKHN0cnVjdCB0aW1lc3BlYywgc3RydWN0IHRpbWVzcGVjKSk7CitzdHJ1Y3QgdGltZXNwZWMgZXZOb3dUaW1lIF9fUCgodm9pZCkpOworc3RydWN0IHRpbWVzcGVjIGV2VVRDVGltZSBfX1AoKHZvaWQpKTsKK3N0cnVjdCB0aW1lc3BlYyBldkxhc3RFdmVudFRpbWUgX19QKChldkNvbnRleHQpKTsKK3N0cnVjdCB0aW1lc3BlYyBldlRpbWVTcGVjIF9fUCgoc3RydWN0IHRpbWV2YWwpKTsKK3N0cnVjdCB0aW1ldmFsIGV2VGltZVZhbCBfX1AoKHN0cnVjdCB0aW1lc3BlYykpOworaW50IGV2Q21wVGltZSBfX1AoKHN0cnVjdCB0aW1lc3BlYywgc3RydWN0IHRpbWVzcGVjKSk7CitpbnQgZXZTZXRUaW1lciBfX1AoKGV2Q29udGV4dCwgZXZUaW1lckZ1bmMsIHZvaWQgKiwgc3RydWN0IHRpbWVzcGVjLAorCQkgICAgc3RydWN0IHRpbWVzcGVjLCBldlRpbWVySUQgKikpOworaW50IGV2Q2xlYXJUaW1lciBfX1AoKGV2Q29udGV4dCwgZXZUaW1lcklEKSk7CitpbnQgZXZDb25maWdUaW1lciBfX1AoKGV2Q29udGV4dCwgZXZUaW1lcklELCBjb25zdCBjaGFyICpwYXJhbSwKKwkJICAgICAgaW50IHZhbHVlKSk7CitpbnQgZXZSZXNldFRpbWVyIF9fUCgoZXZDb250ZXh0LCBldlRpbWVySUQsIGV2VGltZXJGdW5jLCB2b2lkICosCisJCSAgICAgIHN0cnVjdCB0aW1lc3BlYywgc3RydWN0IHRpbWVzcGVjKSk7CitpbnQgZXZTZXRJZGxlVGltZXIgX19QKChldkNvbnRleHQsIGV2VGltZXJGdW5jLCB2b2lkICosIHN0cnVjdCB0aW1lc3BlYywKKwkJCWV2VGltZXJJRCAqKSk7CitpbnQgZXZDbGVhcklkbGVUaW1lciBfX1AoKGV2Q29udGV4dCwgZXZUaW1lcklEKSk7CitpbnQgZXZSZXNldElkbGVUaW1lciBfX1AoKGV2Q29udGV4dCwgZXZUaW1lcklELCBldlRpbWVyRnVuYywgdm9pZCAqLAorCQkJICBzdHJ1Y3QgdGltZXNwZWMpKTsKK2ludCBldlRvdWNoSWRsZVRpbWVyIF9fUCgoZXZDb250ZXh0LCBldlRpbWVySUQpKTsKKworLyogZXZfd2FpdHMuYyAqLworI2RlZmluZSBldldhaXRGb3IJX19ldldhaXRGb3IKKyNkZWZpbmUgZXZEbwkJX19ldkRvCisjZGVmaW5lIGV2VW53YWl0CV9fZXZVbndhaXQKKyNkZWZpbmUgZXZEZWZlcgkJX19ldkRlZmVyCisKK2ludCBldldhaXRGb3IgX19QKChldkNvbnRleHQsIGNvbnN0IHZvaWQgKiwgZXZXYWl0RnVuYywgdm9pZCAqLCBldldhaXRJRCAqKSk7CitpbnQgZXZEbyBfX1AoKGV2Q29udGV4dCwgY29uc3Qgdm9pZCAqKSk7CitpbnQgZXZVbndhaXQgX19QKChldkNvbnRleHQsIGV2V2FpdElEKSk7CitpbnQgZXZEZWZlciBfX1AoKGV2Q29udGV4dCwgZXZXYWl0RnVuYywgdm9pZCAqKSk7CisKKyNpZmRlZiBfX0VWRU5UTElCX1BfREVGSU5FRAorIyB1bmRlZiBfX1AKKyNlbmRpZgorCisjZW5kaWYgLypfRVZFTlRMSUJfSCovCisKKy8qISBcZmlsZSAqLwpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1uZXRic2QvbGliYy9pbmNsdWRlL2lzYy9oZWFwLmggYi9saWJjL3Vwc3RyZWFtLW5ldGJzZC9saWJjL2luY2x1ZGUvaXNjL2hlYXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMGNlYzk4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1uZXRic2QvbGliYy9pbmNsdWRlL2lzYy9oZWFwLmgKQEAgLTAsMCArMSw1MSBAQAorLyoJJE5ldEJTRDogaGVhcC5oLHYgMS4xLjEuNCAyMDA5LzA0LzEyIDE2OjM1OjQ0IGNocmlzdG9zIEV4cCAkCSovCisKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDQgYnkgSW50ZXJuZXQgU3lzdGVtcyBDb25zb3J0aXVtLCBJbmMuICgiSVNDIikKKyAqIENvcHlyaWdodCAoYykgMTk5NywxOTk5IGJ5IEludGVybmV0IFNvZnR3YXJlIENvbnNvcnRpdW0uCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBJU0MgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisgKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuICBJTiBOTyBFVkVOVCBTSEFMTCBJU0MgQkUgTElBQkxFIEZPUgorICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVAorICogT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqLworCit0eXBlZGVmIGludCAoKmhlYXBfaGlnaGVyX3ByaW9yaXR5X2Z1bmMpKHZvaWQgKiwgdm9pZCAqKTsKK3R5cGVkZWYgdm9pZCAoKmhlYXBfaW5kZXhfZnVuYykodm9pZCAqLCBpbnQpOwordHlwZWRlZiB2b2lkICgqaGVhcF9mb3JfZWFjaF9mdW5jKSh2b2lkICosIHZvaWQgKik7CisKK3R5cGVkZWYgc3RydWN0IGhlYXBfY29udGV4dCB7CisJaW50IGFycmF5X3NpemU7CisJaW50IGFycmF5X3NpemVfaW5jcmVtZW50OworCWludCBoZWFwX3NpemU7CisJdm9pZCAqKmhlYXA7CisJaGVhcF9oaWdoZXJfcHJpb3JpdHlfZnVuYyBoaWdoZXJfcHJpb3JpdHk7CisJaGVhcF9pbmRleF9mdW5jIGluZGV4OworfSAqaGVhcF9jb250ZXh0OworCisjZGVmaW5lIGhlYXBfbmV3CV9faGVhcF9uZXcKKyNkZWZpbmUgaGVhcF9mcmVlCV9faGVhcF9mcmVlCisjZGVmaW5lIGhlYXBfaW5zZXJ0CV9faGVhcF9pbnNlcnQKKyNkZWZpbmUgaGVhcF9kZWxldGUJX19oZWFwX2RlbGV0ZQorI2RlZmluZSBoZWFwX2luY3JlYXNlZAlfX2hlYXBfaW5jcmVhc2VkCisjZGVmaW5lIGhlYXBfZGVjcmVhc2VkCV9faGVhcF9kZWNyZWFzZWQKKyNkZWZpbmUgaGVhcF9lbGVtZW50CV9faGVhcF9lbGVtZW50CisjZGVmaW5lIGhlYXBfZm9yX2VhY2gJX19oZWFwX2Zvcl9lYWNoCisKK2hlYXBfY29udGV4dAloZWFwX25ldyhoZWFwX2hpZ2hlcl9wcmlvcml0eV9mdW5jLCBoZWFwX2luZGV4X2Z1bmMsIGludCk7CitpbnQJCWhlYXBfZnJlZShoZWFwX2NvbnRleHQpOworaW50CQloZWFwX2luc2VydChoZWFwX2NvbnRleHQsIHZvaWQgKik7CitpbnQJCWhlYXBfZGVsZXRlKGhlYXBfY29udGV4dCwgaW50KTsKK2ludAkJaGVhcF9pbmNyZWFzZWQoaGVhcF9jb250ZXh0LCBpbnQpOworaW50CQloZWFwX2RlY3JlYXNlZChoZWFwX2NvbnRleHQsIGludCk7Cit2b2lkICoJCWhlYXBfZWxlbWVudChoZWFwX2NvbnRleHQsIGludCk7CitpbnQJCWhlYXBfZm9yX2VhY2goaGVhcF9jb250ZXh0LCBoZWFwX2Zvcl9lYWNoX2Z1bmMsIHZvaWQgKik7CisKKy8qISBcZmlsZSAqLwpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1uZXRic2QvbGliYy9pbmNsdWRlL2lzYy9saXN0LmggYi9saWJjL3Vwc3RyZWFtLW5ldGJzZC9saWJjL2luY2x1ZGUvaXNjL2xpc3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NmYyZTc5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1uZXRic2QvbGliYy9pbmNsdWRlL2lzYy9saXN0LmgKQEAgLTAsMCArMSwxMjAgQEAKKy8qCSROZXRCU0Q6IGxpc3QuaCx2IDEuNSAyMDA5LzA0LzEyIDE3OjA3OjE2IGNocmlzdG9zIEV4cCAkCSovCisKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDQgYnkgSW50ZXJuZXQgU3lzdGVtcyBDb25zb3J0aXVtLCBJbmMuICgiSVNDIikKKyAqIENvcHlyaWdodCAoYykgMTk5NywxOTk5IGJ5IEludGVybmV0IFNvZnR3YXJlIENvbnNvcnRpdW0uCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBJU0MgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisgKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuICBJTiBOTyBFVkVOVCBTSEFMTCBJU0MgQkUgTElBQkxFIEZPUgorICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVAorICogT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqLworCisjaWZuZGVmIExJU1RfSAorI2RlZmluZSBMSVNUX0ggMQorI2luY2x1ZGUgPGlzYy9hc3NlcnRpb25zLmg+CisKKyNkZWZpbmUgTElTVCh0eXBlKSBzdHJ1Y3QgeyB0eXBlICpoZWFkLCAqdGFpbDsgfQorI2RlZmluZSBJTklUX0xJU1QobGlzdCkgXAorCWRvIHsgKGxpc3QpLmhlYWQgPSBOVUxMOyAobGlzdCkudGFpbCA9IE5VTEw7IH0gd2hpbGUgKC8qQ09OU1RDT05EKi8wKQorCisjZGVmaW5lIExJTksodHlwZSkgc3RydWN0IHsgdHlwZSAqcHJldiwgKm5leHQ7IH0KKyNkZWZpbmUgSU5JVF9MSU5LX1RZUEUoZWx0LCBsaW5rLCB0eXBlKSBcCisJZG8geyBcCisJCShlbHQpLT5saW5rLnByZXYgPSAodHlwZSAqKSgtMSk7IFwKKwkJKGVsdCktPmxpbmsubmV4dCA9ICh0eXBlICopKC0xKTsgXAorCX0gd2hpbGUgKC8qQ09OU1RDT05EKi8wKQorI2RlZmluZSBJTklUX0xJTksoZWx0LCBsaW5rKSBcCisJSU5JVF9MSU5LX1RZUEUoZWx0LCBsaW5rLCB2b2lkKQorI2RlZmluZSBMSU5LRUQoZWx0LCBsaW5rKSAoKHZvaWQgKikoKGVsdCktPmxpbmsucHJldikgIT0gKHZvaWQgKikoLTEpICYmIFwKKwkJCSAgICh2b2lkICopKChlbHQpLT5saW5rLm5leHQpICE9ICh2b2lkICopKC0xKSkKKworI2RlZmluZSBIRUFEKGxpc3QpICgobGlzdCkuaGVhZCkKKyNkZWZpbmUgVEFJTChsaXN0KSAoKGxpc3QpLnRhaWwpCisjZGVmaW5lIEVNUFRZKGxpc3QpICgobGlzdCkuaGVhZCA9PSBOVUxMKQorCisjZGVmaW5lIFBSRVBFTkQobGlzdCwgZWx0LCBsaW5rKSBcCisJZG8geyBcCisJCUlOU0lTVCghTElOS0VEKGVsdCwgbGluaykpO1wKKwkJaWYgKChsaXN0KS5oZWFkICE9IE5VTEwpIFwKKwkJCShsaXN0KS5oZWFkLT5saW5rLnByZXYgPSAoZWx0KTsgXAorCQllbHNlIFwKKwkJCShsaXN0KS50YWlsID0gKGVsdCk7IFwKKwkJKGVsdCktPmxpbmsucHJldiA9IE5VTEw7IFwKKwkJKGVsdCktPmxpbmsubmV4dCA9IChsaXN0KS5oZWFkOyBcCisJCShsaXN0KS5oZWFkID0gKGVsdCk7IFwKKwl9IHdoaWxlICgvKkNPTlNUQ09ORCovMCkKKworI2RlZmluZSBBUFBFTkQobGlzdCwgZWx0LCBsaW5rKSBcCisJZG8geyBcCisJCUlOU0lTVCghTElOS0VEKGVsdCwgbGluaykpO1wKKwkJaWYgKChsaXN0KS50YWlsICE9IE5VTEwpIFwKKwkJCShsaXN0KS50YWlsLT5saW5rLm5leHQgPSAoZWx0KTsgXAorCQllbHNlIFwKKwkJCShsaXN0KS5oZWFkID0gKGVsdCk7IFwKKwkJKGVsdCktPmxpbmsucHJldiA9IChsaXN0KS50YWlsOyBcCisJCShlbHQpLT5saW5rLm5leHQgPSBOVUxMOyBcCisJCShsaXN0KS50YWlsID0gKGVsdCk7IFwKKwl9IHdoaWxlICgvKkNPTlNUQ09ORCovMCkKKworI2RlZmluZSBVTkxJTktfVFlQRShsaXN0LCBlbHQsIGxpbmssIHR5cGUpIFwKKwlkbyB7IFwKKwkJSU5TSVNUKExJTktFRChlbHQsIGxpbmspKTtcCisJCWlmICgoZWx0KS0+bGluay5uZXh0ICE9IE5VTEwpIFwKKwkJCShlbHQpLT5saW5rLm5leHQtPmxpbmsucHJldiA9IChlbHQpLT5saW5rLnByZXY7IFwKKwkJZWxzZSB7IFwKKwkJCUlOU0lTVCgobGlzdCkudGFpbCA9PSAoZWx0KSk7IFwKKwkJCShsaXN0KS50YWlsID0gKGVsdCktPmxpbmsucHJldjsgXAorCQl9IFwKKwkJaWYgKChlbHQpLT5saW5rLnByZXYgIT0gTlVMTCkgXAorCQkJKGVsdCktPmxpbmsucHJldi0+bGluay5uZXh0ID0gKGVsdCktPmxpbmsubmV4dDsgXAorCQllbHNlIHsgXAorCQkJSU5TSVNUKChsaXN0KS5oZWFkID09IChlbHQpKTsgXAorCQkJKGxpc3QpLmhlYWQgPSAoZWx0KS0+bGluay5uZXh0OyBcCisJCX0gXAorCQlJTklUX0xJTktfVFlQRShlbHQsIGxpbmssIHR5cGUpOyBcCisJfSB3aGlsZSAoLypDT05TVENPTkQqLzApCisjZGVmaW5lIFVOTElOSyhsaXN0LCBlbHQsIGxpbmspIFwKKwlVTkxJTktfVFlQRShsaXN0LCBlbHQsIGxpbmssIHZvaWQpCisKKyNkZWZpbmUgUFJFVihlbHQsIGxpbmspICgoZWx0KS0+bGluay5wcmV2KQorI2RlZmluZSBORVhUKGVsdCwgbGluaykgKChlbHQpLT5saW5rLm5leHQpCisKKyNkZWZpbmUgSU5TRVJUX0JFRk9SRShsaXN0LCBiZWZvcmUsIGVsdCwgbGluaykgXAorCWRvIHsgXAorCQlJTlNJU1QoIUxJTktFRChlbHQsIGxpbmspKTtcCisJCWlmICgoYmVmb3JlKS0+bGluay5wcmV2ID09IE5VTEwpIFwKKwkJCVBSRVBFTkQobGlzdCwgZWx0LCBsaW5rKTsgXAorCQllbHNlIHsgXAorCQkJKGVsdCktPmxpbmsucHJldiA9IChiZWZvcmUpLT5saW5rLnByZXY7IFwKKwkJCShiZWZvcmUpLT5saW5rLnByZXYgPSAoZWx0KTsgXAorCQkJKGVsdCktPmxpbmsucHJldi0+bGluay5uZXh0ID0gKGVsdCk7IFwKKwkJCShlbHQpLT5saW5rLm5leHQgPSAoYmVmb3JlKTsgXAorCQl9IFwKKwl9IHdoaWxlICgvKkNPTlNUQ09ORCovMCkKKworI2RlZmluZSBJTlNFUlRfQUZURVIobGlzdCwgYWZ0ZXIsIGVsdCwgbGluaykgXAorCWRvIHsgXAorCQlJTlNJU1QoIUxJTktFRChlbHQsIGxpbmspKTtcCisJCWlmICgoYWZ0ZXIpLT5saW5rLm5leHQgPT0gTlVMTCkgXAorCQkJQVBQRU5EKGxpc3QsIGVsdCwgbGluayk7IFwKKwkJZWxzZSB7IFwKKwkJCShlbHQpLT5saW5rLm5leHQgPSAoYWZ0ZXIpLT5saW5rLm5leHQ7IFwKKwkJCShhZnRlciktPmxpbmsubmV4dCA9IChlbHQpOyBcCisJCQkoZWx0KS0+bGluay5uZXh0LT5saW5rLnByZXYgPSAoZWx0KTsgXAorCQkJKGVsdCktPmxpbmsucHJldiA9IChhZnRlcik7IFwKKwkJfSBcCisJfSB3aGlsZSAoLypDT05TVENPTkQqLzApCisKKyNkZWZpbmUgRU5RVUVVRShsaXN0LCBlbHQsIGxpbmspIEFQUEVORChsaXN0LCBlbHQsIGxpbmspCisjZGVmaW5lIERFUVVFVUUobGlzdCwgZWx0LCBsaW5rKSBVTkxJTksobGlzdCwgZWx0LCBsaW5rKQorCisjZW5kaWYgLyogTElTVF9IICovCisvKiEgXGZpbGUgKi8KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYmMvaW5jbHVkZS9pc2MvbWVtY2x1c3Rlci5oIGIvbGliYy91cHN0cmVhbS1uZXRic2QvbGliYy9pbmNsdWRlL2lzYy9tZW1jbHVzdGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2MxYjQ4OQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYmMvaW5jbHVkZS9pc2MvbWVtY2x1c3Rlci5oCkBAIC0wLDAgKzEsNTIgQEAKKy8qCSROZXRCU0Q6IG1lbWNsdXN0ZXIuaCx2IDEuMS4xLjQgMjAwOS8wNC8xMiAxNjozNTo0NCBjaHJpc3RvcyBFeHAgJAkqLworCisvKgorICogQ29weXJpZ2h0IChjKSAyMDA0IGJ5IEludGVybmV0IFN5c3RlbXMgQ29uc29ydGl1bSwgSW5jLiAoIklTQyIpCisgKiBDb3B5cmlnaHQgKGMpIDE5OTcsMTk5OSBieSBJbnRlcm5ldCBTb2Z0d2FyZSBDb25zb3J0aXVtLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgSVNDIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworICogV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiAgSU4gTk8gRVZFTlQgU0hBTEwgSVNDIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKKyAqIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQKKyAqIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisgKi8KKworI2lmbmRlZiBNRU1DTFVTVEVSX0gKKyNkZWZpbmUgTUVNQ0xVU1RFUl9ICisKKyNpbmNsdWRlIDxzdGRpby5oPgorCisjZGVmaW5lIG1lbWluaXQJCV9fbWVtaW5pdAorI2lmZGVmIE1FTUNMVVNURVJfREVCVUcKKyNkZWZpbmUgbWVtZ2V0KHMpCV9fbWVtZ2V0X2RlYnVnKHMsIF9fRklMRV9fLCBfX0xJTkVfXykKKyNkZWZpbmUgbWVtcHV0KHAsIHMpCV9fbWVtcHV0X2RlYnVnKHAsIHMsIF9fRklMRV9fLCBfX0xJTkVfXykKKyNlbHNlIC8qTUVNQ0xVU1RFUl9ERUJVRyovCisjaWZkZWYgTUVNQ0xVU1RFUl9SRUNPUkQKKyNkZWZpbmUgbWVtZ2V0KHMpCV9fbWVtZ2V0X3JlY29yZChzLCBfX0ZJTEVfXywgX19MSU5FX18pCisjZGVmaW5lIG1lbXB1dChwLCBzKQlfX21lbXB1dF9yZWNvcmQocCwgcywgX19GSUxFX18sIF9fTElORV9fKQorI2Vsc2UgLypNRU1DTFVTVEVSX1JFQ09SRCovCisjZGVmaW5lIG1lbWdldAkJX19tZW1nZXQKKyNkZWZpbmUgbWVtcHV0CQlfX21lbXB1dAorI2VuZGlmIC8qTUVNQ0xVU1RFUl9SRUNPUkQqLworI2VuZGlmIC8qTUVNQ0xVU1RFUl9ERUJVRyovCisjZGVmaW5lIG1lbXN0YXRzCV9fbWVtc3RhdHMKKyNkZWZpbmUgbWVtYWN0aXZlCV9fbWVtYWN0aXZlCisKK2ludAltZW1pbml0KHNpemVfdCwgc2l6ZV90KTsKK3ZvaWQgKglfX21lbWdldChzaXplX3QpOwordm9pZCAJX19tZW1wdXQodm9pZCAqLCBzaXplX3QpOwordm9pZCAqCV9fbWVtZ2V0X2RlYnVnKHNpemVfdCwgY29uc3QgY2hhciAqLCBpbnQpOwordm9pZCAJX19tZW1wdXRfZGVidWcodm9pZCAqLCBzaXplX3QsIGNvbnN0IGNoYXIgKiwgaW50KTsKK3ZvaWQgKglfX21lbWdldF9yZWNvcmQoc2l6ZV90LCBjb25zdCBjaGFyICosIGludCk7Cit2b2lkIAlfX21lbXB1dF9yZWNvcmQodm9pZCAqLCBzaXplX3QsIGNvbnN0IGNoYXIgKiwgaW50KTsKK3ZvaWQgCW1lbXN0YXRzKEZJTEUgKik7CitpbnQJbWVtYWN0aXZlKHZvaWQpOworCisjZW5kaWYgLyogTUVNQ0xVU1RFUl9IICovCisvKiEgXGZpbGUgKi8KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYmMvaW5ldC9pbmV0X250b2EuYyBiL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYmMvaW5ldC9pbmV0X250b2EuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZWQwMjNiCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1uZXRic2QvbGliYy9pbmV0L2luZXRfbnRvYS5jCkBAIC0wLDAgKzEsNjQgQEAKKy8qCSROZXRCU0Q6IGluZXRfbnRvYS5jLHYgMS4yIDIwMTIvMDMvMTMgMjE6MTM6MzggY2hyaXN0b3MgRXhwICQJKi8KKworLyoKKyAqIENvcHlyaWdodCAoYykgMTk4MywgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKyNpZiBkZWZpbmVkKExJQkNfU0NDUykgJiYgIWRlZmluZWQobGludCkKKyNpZiAwCitzdGF0aWMgY2hhciBzY2NzaWRbXSA9ICJAKCMpaW5ldF9udG9hLmMJOC4xIChCZXJrZWxleSkgNi80LzkzIjsKKyNlbHNlCitfX1JDU0lEKCIkTmV0QlNEOiBpbmV0X250b2EuYyx2IDEuMiAyMDEyLzAzLzEzIDIxOjEzOjM4IGNocmlzdG9zIEV4cCAkIik7CisjZW5kaWYKKyNlbmRpZiAvKiBMSUJDX1NDQ1MgYW5kIG5vdCBsaW50ICovCisKKyNpbmNsdWRlICJuYW1lc3BhY2UuaCIKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2luY2x1ZGUgPGFycGEvaW5ldC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpZmRlZiBfX3dlYWtfYWxpYXMKK19fd2Vha19hbGlhcyhpbmV0X250b2EsX2luZXRfbnRvYSkKKyNlbmRpZgorCisvKgorICogQ29udmVydCBuZXR3b3JrLWZvcm1hdCBpbnRlcm5ldCBhZGRyZXNzCisgKiB0byBiYXNlIDI1NiBkLmQuZC5kIHJlcHJlc2VudGF0aW9uLgorICovCisvKmNvbnN0Ki8gY2hhciAqCitpbmV0X250b2Eoc3RydWN0IGluX2FkZHIgaW4pIHsKKwlzdGF0aWMgY2hhciByZXRbMThdOworCisJc3RybGNweShyZXQsICJbaW5ldF9udG9hIGVycm9yXSIsIHNpemVvZihyZXQpKTsKKwkodm9pZCkgaW5ldF9udG9wKEFGX0lORVQsICZpbiwgcmV0LCAoc29ja2xlbl90KXNpemVvZiByZXQpOworCXJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW5ldGJzZC9saWJjL2luZXQvaW5ldF9udG9wLmMgYi9saWJjL3Vwc3RyZWFtLW5ldGJzZC9saWJjL2luZXQvaW5ldF9udG9wLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDBjNTVhOAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYmMvaW5ldC9pbmV0X250b3AuYwpAQCAtMCwwICsxLDIzMiBAQAorLyoJJE5ldEJTRDogaW5ldF9udG9wLmMsdiAxLjkgMjAxMi8wMy8yMCAxNzowODoxMyBtYXR0IEV4cCAkCSovCisKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDQgYnkgSW50ZXJuZXQgU3lzdGVtcyBDb25zb3J0aXVtLCBJbmMuICgiSVNDIikKKyAqIENvcHlyaWdodCAoYykgMTk5Ni0xOTk5IGJ5IEludGVybmV0IFNvZnR3YXJlIENvbnNvcnRpdW0uCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBJU0MgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisgKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuICBJTiBOTyBFVkVOVCBTSEFMTCBJU0MgQkUgTElBQkxFIEZPUgorICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVAorICogT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqLworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisjaWYgZGVmaW5lZChMSUJDX1NDQ1MpICYmICFkZWZpbmVkKGxpbnQpCisjaWYgMAorc3RhdGljIGNvbnN0IGNoYXIgcmNzaWRbXSA9ICJJZDogaW5ldF9udG9wLmMsdiAxLjUgMjAwNS8xMS8wMyAyMjo1OTo1MiBtYXJrYSBFeHAiOworI2Vsc2UKK19fUkNTSUQoIiROZXRCU0Q6IGluZXRfbnRvcC5jLHYgMS45IDIwMTIvMDMvMjAgMTc6MDg6MTMgbWF0dCBFeHAgJCIpOworI2VuZGlmCisjZW5kaWYgLyogTElCQ19TQ0NTIGFuZCBub3QgbGludCAqLworCisjaW5jbHVkZSAicG9ydF9iZWZvcmUuaCIKKworI2luY2x1ZGUgIm5hbWVzcGFjZS5oIgorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKworI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNpbmNsdWRlIDxhcnBhL2luZXQuaD4KKyNpbmNsdWRlIDxhcnBhL25hbWVzZXIuaD4KKworI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgInBvcnRfYWZ0ZXIuaCIKKworI2lmZGVmIF9fd2Vha19hbGlhcworX193ZWFrX2FsaWFzKGluZXRfbnRvcCxfaW5ldF9udG9wKQorI2VuZGlmCisKKy8qJQorICogV0FSTklORzogRG9uJ3QgZXZlbiBjb25zaWRlciB0cnlpbmcgdG8gY29tcGlsZSB0aGlzIG9uIGEgc3lzdGVtIHdoZXJlCisgKiBzaXplb2YoaW50KSA8IDQuICBzaXplb2YoaW50KSA+IDQgaXMgZmluZTsgYWxsIHRoZSB3b3JsZCdzIG5vdCBhIFZBWC4KKyAqLworCitzdGF0aWMgY29uc3QgY2hhciAqaW5ldF9udG9wNChjb25zdCB1X2NoYXIgKnNyYywgY2hhciAqZHN0LCBzb2NrbGVuX3Qgc2l6ZSk7CitzdGF0aWMgY29uc3QgY2hhciAqaW5ldF9udG9wNihjb25zdCB1X2NoYXIgKnNyYywgY2hhciAqZHN0LCBzb2NrbGVuX3Qgc2l6ZSk7CisKKy8qIGNoYXIgKgorICogaW5ldF9udG9wKGFmLCBzcmMsIGRzdCwgc2l6ZSkKKyAqCWNvbnZlcnQgYSBuZXR3b3JrIGZvcm1hdCBhZGRyZXNzIHRvIHByZXNlbnRhdGlvbiBmb3JtYXQuCisgKiByZXR1cm46CisgKglwb2ludGVyIHRvIHByZXNlbnRhdGlvbiBmb3JtYXQgYWRkcmVzcyAoYGRzdCcpLCBvciBOVUxMIChzZWUgZXJybm8pLgorICogYXV0aG9yOgorICoJUGF1bCBWaXhpZSwgMTk5Ni4KKyAqLworY29uc3QgY2hhciAqCitpbmV0X250b3AoaW50IGFmLCBjb25zdCB2b2lkICpzcmMsIGNoYXIgKmRzdCwgc29ja2xlbl90IHNpemUpCit7CisKKwlfRElBR0FTU0VSVChzcmMgIT0gTlVMTCk7CisJX0RJQUdBU1NFUlQoZHN0ICE9IE5VTEwpOworCisJc3dpdGNoIChhZikgeworCWNhc2UgQUZfSU5FVDoKKwkJcmV0dXJuIChpbmV0X250b3A0KHNyYywgZHN0LCBzaXplKSk7CisJY2FzZSBBRl9JTkVUNjoKKwkJcmV0dXJuIChpbmV0X250b3A2KHNyYywgZHN0LCBzaXplKSk7CisJZGVmYXVsdDoKKwkJZXJybm8gPSBFQUZOT1NVUFBPUlQ7CisJCXJldHVybiAoTlVMTCk7CisJfQorCS8qIE5PVFJFQUNIRUQgKi8KK30KKworLyogY29uc3QgY2hhciAqCisgKiBpbmV0X250b3A0KHNyYywgZHN0LCBzaXplKQorICoJZm9ybWF0IGFuIElQdjQgYWRkcmVzcywgbW9yZSBvciBsZXNzIGxpa2UgaW5ldF9udG9hKCkKKyAqIHJldHVybjoKKyAqCWBkc3QnIChhcyBhIGNvbnN0KQorICogbm90ZXM6CisgKgkoMSkgdXNlcyBubyBzdGF0aWNzCisgKgkoMikgdGFrZXMgYSB1X2NoYXIqIG5vdCBhbiBpbl9hZGRyIGFzIGlucHV0CisgKiBhdXRob3I6CisgKglQYXVsIFZpeGllLCAxOTk2LgorICovCitzdGF0aWMgY29uc3QgY2hhciAqCitpbmV0X250b3A0KGNvbnN0IHVfY2hhciAqc3JjLCBjaGFyICpkc3QsIHNvY2tsZW5fdCBzaXplKQoreworCWNoYXIgdG1wW3NpemVvZiAiMjU1LjI1NS4yNTUuMjU1Il07CisJaW50IGw7CisKKwlfRElBR0FTU0VSVChzcmMgIT0gTlVMTCk7CisJX0RJQUdBU1NFUlQoZHN0ICE9IE5VTEwpOworCisJbCA9IHNucHJpbnRmKHRtcCwgc2l6ZW9mKHRtcCksICIldS4ldS4ldS4ldSIsCisJICAgIHNyY1swXSwgc3JjWzFdLCBzcmNbMl0sIHNyY1szXSk7CisJaWYgKGwgPD0gMCB8fCAoc29ja2xlbl90KSBsID49IHNpemUpIHsKKwkJZXJybm8gPSBFTk9TUEM7CisJCXJldHVybiAoTlVMTCk7CisJfQorCXN0cmxjcHkoZHN0LCB0bXAsIHNpemUpOworCXJldHVybiAoZHN0KTsKK30KKworLyogY29uc3QgY2hhciAqCisgKiBpbmV0X250b3A2KHNyYywgZHN0LCBzaXplKQorICoJY29udmVydCBJUHY2IGJpbmFyeSBhZGRyZXNzIGludG8gcHJlc2VudGF0aW9uIChwcmludGFibGUpIGZvcm1hdAorICogYXV0aG9yOgorICoJUGF1bCBWaXhpZSwgMTk5Ni4KKyAqLworc3RhdGljIGNvbnN0IGNoYXIgKgoraW5ldF9udG9wNihjb25zdCB1X2NoYXIgKnNyYywgY2hhciAqZHN0LCBzb2NrbGVuX3Qgc2l6ZSkKK3sKKwkvKgorCSAqIE5vdGUgdGhhdCBpbnQzMl90IGFuZCBpbnQxNl90IG5lZWQgb25seSBiZSAiYXQgbGVhc3QiIGxhcmdlIGVub3VnaAorCSAqIHRvIGNvbnRhaW4gYSB2YWx1ZSBvZiB0aGUgc3BlY2lmaWVkIHNpemUuICBPbiBzb21lIHN5c3RlbXMsIGxpa2UKKwkgKiBDcmF5cywgdGhlcmUgaXMgbm8gc3VjaCB0aGluZyBhcyBhbiBpbnRlZ2VyIHZhcmlhYmxlIHdpdGggMTYgYml0cy4KKwkgKiBLZWVwIHRoaXMgaW4gbWluZCBpZiB5b3UgdGhpbmsgdGhpcyBmdW5jdGlvbiBzaG91bGQgaGF2ZSBiZWVuIGNvZGVkCisJICogdG8gdXNlIHBvaW50ZXIgb3ZlcmxheXMuICBBbGwgdGhlIHdvcmxkJ3Mgbm90IGEgVkFYLgorCSAqLworCWNoYXIgdG1wW3NpemVvZiAiZmZmZjpmZmZmOmZmZmY6ZmZmZjpmZmZmOmZmZmY6MjU1LjI1NS4yNTUuMjU1Il07CisJY2hhciAqdHAsICplcDsKKwlzdHJ1Y3QgeyBpbnQgYmFzZSwgbGVuOyB9IGJlc3QsIGN1cjsKKwl1X2ludCB3b3Jkc1tOU19JTjZBRERSU1ogLyBOU19JTlQxNlNaXTsKKwlpbnQgaTsKKwlpbnQgYWR2YW5jZTsKKworCV9ESUFHQVNTRVJUKHNyYyAhPSBOVUxMKTsKKwlfRElBR0FTU0VSVChkc3QgIT0gTlVMTCk7CisKKwkvKgorCSAqIFByZXByb2Nlc3M6CisJICoJQ29weSB0aGUgaW5wdXQgKGJ5dGV3aXNlKSBhcnJheSBpbnRvIGEgd29yZHdpc2UgYXJyYXkuCisJICoJRmluZCB0aGUgbG9uZ2VzdCBydW4gb2YgMHgwMCdzIGluIHNyY1tdIGZvciA6OiBzaG9ydGhhbmRpbmcuCisJICovCisJbWVtc2V0KHdvcmRzLCAnXDAnLCBzaXplb2Ygd29yZHMpOworCWZvciAoaSA9IDA7IGkgPCBOU19JTjZBRERSU1o7IGkrKykKKwkJd29yZHNbaSAvIDJdIHw9IChzcmNbaV0gPDwgKCgxIC0gKGkgJSAyKSkgPDwgMykpOworCWJlc3QuYmFzZSA9IC0xOworCWJlc3QubGVuID0gMDsKKwljdXIuYmFzZSA9IC0xOworCWN1ci5sZW4gPSAwOworCWZvciAoaSA9IDA7IGkgPCAoTlNfSU42QUREUlNaIC8gTlNfSU5UMTZTWik7IGkrKykgeworCQlpZiAod29yZHNbaV0gPT0gMCkgeworCQkJaWYgKGN1ci5iYXNlID09IC0xKQorCQkJCWN1ci5iYXNlID0gaSwgY3VyLmxlbiA9IDE7CisJCQllbHNlCisJCQkJY3VyLmxlbisrOworCQl9IGVsc2UgeworCQkJaWYgKGN1ci5iYXNlICE9IC0xKSB7CisJCQkJaWYgKGJlc3QuYmFzZSA9PSAtMSB8fCBjdXIubGVuID4gYmVzdC5sZW4pCisJCQkJCWJlc3QgPSBjdXI7CisJCQkJY3VyLmJhc2UgPSAtMTsKKwkJCX0KKwkJfQorCX0KKwlpZiAoY3VyLmJhc2UgIT0gLTEpIHsKKwkJaWYgKGJlc3QuYmFzZSA9PSAtMSB8fCBjdXIubGVuID4gYmVzdC5sZW4pCisJCQliZXN0ID0gY3VyOworCX0KKwlpZiAoYmVzdC5iYXNlICE9IC0xICYmIGJlc3QubGVuIDwgMikKKwkJYmVzdC5iYXNlID0gLTE7CisKKwkvKgorCSAqIEZvcm1hdCB0aGUgcmVzdWx0LgorCSAqLworCXRwID0gdG1wOworCWVwID0gdG1wICsgc2l6ZW9mKHRtcCk7CisJZm9yIChpID0gMDsgaSA8IChOU19JTjZBRERSU1ogLyBOU19JTlQxNlNaKTsgaSsrKSB7CisJCS8qIEFyZSB3ZSBpbnNpZGUgdGhlIGJlc3QgcnVuIG9mIDB4MDAncz8gKi8KKwkJaWYgKGJlc3QuYmFzZSAhPSAtMSAmJiBpID49IGJlc3QuYmFzZSAmJgorCQkgICAgaSA8IChiZXN0LmJhc2UgKyBiZXN0LmxlbikpIHsKKwkJCWlmIChpID09IGJlc3QuYmFzZSkKKwkJCQkqdHArKyA9ICc6JzsKKwkJCWNvbnRpbnVlOworCQl9CisJCS8qIEFyZSB3ZSBmb2xsb3dpbmcgYW4gaW5pdGlhbCBydW4gb2YgMHgwMHMgb3IgYW55IHJlYWwgaGV4PyAqLworCQlpZiAoaSAhPSAwKSB7CisJCQlpZiAodHAgKyAxID49IGVwKQorCQkJCXJldHVybiAoTlVMTCk7CisJCQkqdHArKyA9ICc6JzsKKwkJfQorCQkvKiBJcyB0aGlzIGFkZHJlc3MgYW4gZW5jYXBzdWxhdGVkIElQdjQ/ICovCisJCWlmIChpID09IDYgJiYgYmVzdC5iYXNlID09IDAgJiYKKwkJICAgIChiZXN0LmxlbiA9PSA2IHx8CisJCSAgICAoYmVzdC5sZW4gPT0gNyAmJiB3b3Jkc1s3XSAhPSAweDAwMDEpIHx8CisJCSAgICAoYmVzdC5sZW4gPT0gNSAmJiB3b3Jkc1s1XSA9PSAweGZmZmYpKSkgeworCQkJaWYgKCFpbmV0X250b3A0KHNyYysxMiwgdHAsIChzb2NrbGVuX3QpKGVwIC0gdHApKSkKKwkJCQlyZXR1cm4gKE5VTEwpOworCQkJdHAgKz0gc3RybGVuKHRwKTsKKwkJCWJyZWFrOworCQl9CisJCWFkdmFuY2UgPSBzbnByaW50Zih0cCwgKHNpemVfdCkoZXAgLSB0cCksICIleCIsIHdvcmRzW2ldKTsKKwkJaWYgKGFkdmFuY2UgPD0gMCB8fCBhZHZhbmNlID49IGVwIC0gdHApCisJCQlyZXR1cm4gKE5VTEwpOworCQl0cCArPSBhZHZhbmNlOworCX0KKwkvKiBXYXMgaXQgYSB0cmFpbGluZyBydW4gb2YgMHgwMCdzPyAqLworCWlmIChiZXN0LmJhc2UgIT0gLTEgJiYgKGJlc3QuYmFzZSArIGJlc3QubGVuKSA9PSAKKwkgICAgKE5TX0lONkFERFJTWiAvIE5TX0lOVDE2U1opKSB7CisJCWlmICh0cCArIDEgPj0gZXApCisJCQlyZXR1cm4gKE5VTEwpOworCQkqdHArKyA9ICc6JzsKKwl9CisJaWYgKHRwICsgMSA+PSBlcCkKKwkJcmV0dXJuIChOVUxMKTsKKwkqdHArKyA9ICdcMCc7CisKKwkvKgorCSAqIENoZWNrIGZvciBvdmVyZmxvdywgY29weSwgYW5kIHdlJ3JlIGRvbmUuCisJICovCisJaWYgKChzaXplX3QpKHRwIC0gdG1wKSA+IHNpemUpIHsKKwkJZXJybm8gPSBFTk9TUEM7CisJCXJldHVybiAoTlVMTCk7CisJfQorCXN0cmxjcHkoZHN0LCB0bXAsIHNpemUpOworCXJldHVybiAoZHN0KTsKK30KKworLyohIFxmaWxlICovCmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW5ldGJzZC9saWJjL2luZXQvaW5ldF9wdG9uLmMgYi9saWJjL3Vwc3RyZWFtLW5ldGJzZC9saWJjL2luZXQvaW5ldF9wdG9uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzFlOWE2OQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYmMvaW5ldC9pbmV0X3B0b24uYwpAQCAtMCwwICsxLDMxMCBAQAorLyoJJE5ldEJTRDogaW5ldF9wdG9uLmMsdiAxLjggMjAxMi8wMy8xMyAyMToxMzozOCBjaHJpc3RvcyBFeHAgJAkqLworCisvKgorICogQ29weXJpZ2h0IChjKSAyMDA0IGJ5IEludGVybmV0IFN5c3RlbXMgQ29uc29ydGl1bSwgSW5jLiAoIklTQyIpCisgKiBDb3B5cmlnaHQgKGMpIDE5OTYsMTk5OSBieSBJbnRlcm5ldCBTb2Z0d2FyZSBDb25zb3J0aXVtLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgSVNDIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworICogV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiAgSU4gTk8gRVZFTlQgU0hBTEwgSVNDIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKKyAqIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQKKyAqIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisgKi8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorI2lmIGRlZmluZWQoTElCQ19TQ0NTKSAmJiAhZGVmaW5lZChsaW50KQorI2lmIDAKK3N0YXRpYyBjb25zdCBjaGFyIHJjc2lkW10gPSAiSWQ6IGluZXRfcHRvbi5jLHYgMS41IDIwMDUvMDcvMjggMDY6NTE6NDcgbWFya2EgRXhwIjsKKyNlbHNlCitfX1JDU0lEKCIkTmV0QlNEOiBpbmV0X3B0b24uYyx2IDEuOCAyMDEyLzAzLzEzIDIxOjEzOjM4IGNocmlzdG9zIEV4cCAkIik7CisjZW5kaWYKKyNlbmRpZiAvKiBMSUJDX1NDQ1MgYW5kIG5vdCBsaW50ICovCisKKyNpbmNsdWRlICJwb3J0X2JlZm9yZS5oIgorCisjaW5jbHVkZSAibmFtZXNwYWNlLmgiCisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNpbmNsdWRlIDxhcnBhL2luZXQuaD4KKyNpbmNsdWRlIDxhcnBhL25hbWVzZXIuaD4KKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisKKyNpbmNsdWRlICJwb3J0X2FmdGVyLmgiCisKKyNpZmRlZiBfX3dlYWtfYWxpYXMKK19fd2Vha19hbGlhcyhpbmV0X3B0b24sX2luZXRfcHRvbikKKyNlbmRpZgorCisvKiUKKyAqIFdBUk5JTkc6IERvbid0IGV2ZW4gY29uc2lkZXIgdHJ5aW5nIHRvIGNvbXBpbGUgdGhpcyBvbiBhIHN5c3RlbSB3aGVyZQorICogc2l6ZW9mKGludCkgPCA0LiAgc2l6ZW9mKGludCkgPiA0IGlzIGZpbmU7IGFsbCB0aGUgd29ybGQncyBub3QgYSBWQVguCisgKi8KKworc3RhdGljIGludAlpbmV0X3B0b240KGNvbnN0IGNoYXIgKnNyYywgdV9jaGFyICpkc3QsIGludCBwdG9uKTsKK3N0YXRpYyBpbnQJaW5ldF9wdG9uNihjb25zdCBjaGFyICpzcmMsIHVfY2hhciAqZHN0KTsKKworLyogaW50CisgKiBpbmV0X3B0b24oYWYsIHNyYywgZHN0KQorICoJY29udmVydCBmcm9tIHByZXNlbnRhdGlvbiBmb3JtYXQgKHdoaWNoIHVzdWFsbHkgbWVhbnMgQVNDSUkgcHJpbnRhYmxlKQorICoJdG8gbmV0d29yayBmb3JtYXQgKHdoaWNoIGlzIHVzdWFsbHkgc29tZSBraW5kIG9mIGJpbmFyeSBmb3JtYXQpLgorICogcmV0dXJuOgorICoJMSBpZiB0aGUgYWRkcmVzcyB3YXMgdmFsaWQgZm9yIHRoZSBzcGVjaWZpZWQgYWRkcmVzcyBmYW1pbHkKKyAqCTAgaWYgdGhlIGFkZHJlc3Mgd2Fzbid0IHZhbGlkIChgZHN0JyBpcyB1bnRvdWNoZWQgaW4gdGhpcyBjYXNlKQorICoJLTEgaWYgc29tZSBvdGhlciBlcnJvciBvY2N1cnJlZCAoYGRzdCcgaXMgdW50b3VjaGVkIGluIHRoaXMgY2FzZSwgdG9vKQorICogYXV0aG9yOgorICoJUGF1bCBWaXhpZSwgMTk5Ni4KKyAqLworaW50CitpbmV0X3B0b24oaW50IGFmLCBjb25zdCBjaGFyICpzcmMsIHZvaWQgKmRzdCkKK3sKKworCV9ESUFHQVNTRVJUKHNyYyAhPSBOVUxMKTsKKwlfRElBR0FTU0VSVChkc3QgIT0gTlVMTCk7CisKKwlzd2l0Y2ggKGFmKSB7CisJY2FzZSBBRl9JTkVUOgorCQlyZXR1cm4gKGluZXRfcHRvbjQoc3JjLCBkc3QsIDEpKTsKKwljYXNlIEFGX0lORVQ2OgorCQlyZXR1cm4gKGluZXRfcHRvbjYoc3JjLCBkc3QpKTsKKwlkZWZhdWx0OgorCQllcnJubyA9IEVBRk5PU1VQUE9SVDsKKwkJcmV0dXJuICgtMSk7CisJfQorCS8qIE5PVFJFQUNIRUQgKi8KK30KKworLyogaW50CisgKiBpbmV0X3B0b240KHNyYywgZHN0LCBwdG9uKQorICoJd2hlbiBsYXN0IGFyZyBpcyAwOiBpbmV0X2F0b24oKS4gd2l0aCBoZXhhZGVjaW1hbCwgb2N0YWwgYW5kIHNob3J0aGFuZC4KKyAqCXdoZW4gbGFzdCBhcmcgaXMgMTogaW5ldF9wdG9uKCkuIGRlY2ltYWwgZG90dGVkLXF1YWQgb25seS4KKyAqIHJldHVybjoKKyAqCTEgaWYgYHNyYycgaXMgYSB2YWxpZCBpbnB1dCwgZWxzZSAwLgorICogbm90aWNlOgorICoJZG9lcyBub3QgdG91Y2ggYGRzdCcgdW5sZXNzIGl0J3MgcmV0dXJuaW5nIDEuCisgKiBhdXRob3I6CisgKglQYXVsIFZpeGllLCAxOTk2LgorICovCitzdGF0aWMgaW50CitpbmV0X3B0b240KGNvbnN0IGNoYXIgKnNyYywgdV9jaGFyICpkc3QsIGludCBwdG9uKQoreworCXVfaW50MzJfdCB2YWw7CisJdV9pbnQgZGlnaXQsIGJhc2U7CisJcHRyZGlmZl90IG47CisJdW5zaWduZWQgY2hhciBjOworCXVfaW50IHBhcnRzWzRdOworCXVfaW50ICpwcCA9IHBhcnRzOworCisJX0RJQUdBU1NFUlQoc3JjICE9IE5VTEwpOworCV9ESUFHQVNTRVJUKGRzdCAhPSBOVUxMKTsKKworCWMgPSAqc3JjOworCWZvciAoOzspIHsKKwkJLyoKKwkJICogQ29sbGVjdCBudW1iZXIgdXAgdG8gYGAuJycuCisJCSAqIFZhbHVlcyBhcmUgc3BlY2lmaWVkIGFzIGZvciBDOgorCQkgKiAweD1oZXgsIDA9b2N0YWwsIGlzZGlnaXQ9ZGVjaW1hbC4KKwkJICovCisJCWlmICghaXNkaWdpdChjKSkKKwkJCXJldHVybiAoMCk7CisJCXZhbCA9IDA7IGJhc2UgPSAxMDsKKwkJaWYgKGMgPT0gJzAnKSB7CisJCQljID0gKisrc3JjOworCQkJaWYgKGMgPT0gJ3gnIHx8IGMgPT0gJ1gnKQorCQkJCWJhc2UgPSAxNiwgYyA9ICorK3NyYzsKKwkJCWVsc2UgaWYgKGlzZGlnaXQoYykgJiYgYyAhPSAnOScpCisJCQkJYmFzZSA9IDg7CisJCX0KKwkJLyogaW5ldF9wdG9uKCkgdGFrZXMgZGVjaW1hbCBvbmx5ICovCisJCWlmIChwdG9uICYmIGJhc2UgIT0gMTApCisJCQlyZXR1cm4gKDApOworCQlmb3IgKDs7KSB7CisJCQlpZiAoaXNkaWdpdChjKSkgeworCQkJCWRpZ2l0ID0gYyAtICcwJzsKKwkJCQlpZiAoZGlnaXQgPj0gYmFzZSkKKwkJCQkJYnJlYWs7CisJCQkJdmFsID0gKHZhbCAqIGJhc2UpICsgZGlnaXQ7CisJCQkJYyA9ICorK3NyYzsKKwkJCX0gZWxzZSBpZiAoYmFzZSA9PSAxNiAmJiBpc3hkaWdpdChjKSkgeworCQkJCWRpZ2l0ID0gYyArIDEwIC0gKGlzbG93ZXIoYykgPyAnYScgOiAnQScpOworCQkJCWlmIChkaWdpdCA+PSAxNikKKwkJCQkJYnJlYWs7CisJCQkJdmFsID0gKHZhbCA8PCA0KSB8IGRpZ2l0OworCQkJCWMgPSAqKytzcmM7CisJCQl9IGVsc2UKKwkJCQlicmVhazsKKwkJfQorCQlpZiAoYyA9PSAnLicpIHsKKwkJCS8qCisJCQkgKiBJbnRlcm5ldCBmb3JtYXQ6CisJCQkgKglhLmIuYy5kCisJCQkgKglhLmIuYwkod2l0aCBjIHRyZWF0ZWQgYXMgMTYgYml0cykKKwkJCSAqCWEuYgkod2l0aCBiIHRyZWF0ZWQgYXMgMjQgYml0cykKKwkJCSAqCWEJKHdpdGggYSB0cmVhdGVkIGFzIDMyIGJpdHMpCisJCQkgKi8KKwkJCWlmIChwcCA+PSBwYXJ0cyArIDMpCisJCQkJcmV0dXJuICgwKTsKKwkJCSpwcCsrID0gdmFsOworCQkJYyA9ICorK3NyYzsKKwkJfSBlbHNlCisJCQlicmVhazsKKwl9CisJLyoKKwkgKiBDaGVjayBmb3IgdHJhaWxpbmcgY2hhcmFjdGVycy4KKwkgKi8KKwlpZiAoYyAhPSAnXDAnICYmICFpc3NwYWNlKGMpKQorCQlyZXR1cm4gKDApOworCS8qCisJICogQ29uY29jdCB0aGUgYWRkcmVzcyBhY2NvcmRpbmcgdG8KKwkgKiB0aGUgbnVtYmVyIG9mIHBhcnRzIHNwZWNpZmllZC4KKwkgKi8KKwluID0gcHAgLSBwYXJ0cyArIDE7CisJLyogaW5ldF9wdG9uKCkgdGFrZXMgZG90dGVkLXF1YWQgb25seS4gIGl0IGRvZXMgbm90IHRha2Ugc2hvcnRoYW5kLiAqLworCWlmIChwdG9uICYmIG4gIT0gNCkKKwkJcmV0dXJuICgwKTsKKwlzd2l0Y2ggKG4pIHsKKworCWNhc2UgMDoKKwkJcmV0dXJuICgwKTsJCS8qIGluaXRpYWwgbm9uZGlnaXQgKi8KKworCWNhc2UgMToJCQkJLyogYSAtLSAzMiBiaXRzICovCisJCWJyZWFrOworCisJY2FzZSAyOgkJCQkvKiBhLmIgLS0gOC4yNCBiaXRzICovCisJCWlmIChwYXJ0c1swXSA+IDB4ZmYgfHwgdmFsID4gMHhmZmZmZmYpCisJCQlyZXR1cm4gKDApOworCQl2YWwgfD0gcGFydHNbMF0gPDwgMjQ7CisJCWJyZWFrOworCisJY2FzZSAzOgkJCQkvKiBhLmIuYyAtLSA4LjguMTYgYml0cyAqLworCQlpZiAoKHBhcnRzWzBdIHwgcGFydHNbMV0pID4gMHhmZiB8fCB2YWwgPiAweGZmZmYpCisJCQlyZXR1cm4gKDApOworCQl2YWwgfD0gKHBhcnRzWzBdIDw8IDI0KSB8IChwYXJ0c1sxXSA8PCAxNik7CisJCWJyZWFrOworCisJY2FzZSA0OgkJCQkvKiBhLmIuYy5kIC0tIDguOC44LjggYml0cyAqLworCQlpZiAoKHBhcnRzWzBdIHwgcGFydHNbMV0gfCBwYXJ0c1syXSB8IHZhbCkgPiAweGZmKQorCQkJcmV0dXJuICgwKTsKKwkJdmFsIHw9IChwYXJ0c1swXSA8PCAyNCkgfCAocGFydHNbMV0gPDwgMTYpIHwgKHBhcnRzWzJdIDw8IDgpOworCQlicmVhazsKKwl9CisJaWYgKGRzdCkgeworCQl2YWwgPSBodG9ubCh2YWwpOworCQltZW1jcHkoZHN0LCAmdmFsLCBOU19JTkFERFJTWik7CisJfQorCXJldHVybiAoMSk7Cit9CisKKy8qIGludAorICogaW5ldF9wdG9uNihzcmMsIGRzdCkKKyAqCWNvbnZlcnQgcHJlc2VudGF0aW9uIGxldmVsIGFkZHJlc3MgdG8gbmV0d29yayBvcmRlciBiaW5hcnkgZm9ybS4KKyAqIHJldHVybjoKKyAqCTEgaWYgYHNyYycgaXMgYSB2YWxpZCBbUkZDMTg4NCAyLjJdIGFkZHJlc3MsIGVsc2UgMC4KKyAqIG5vdGljZToKKyAqCSgxKSBkb2VzIG5vdCB0b3VjaCBgZHN0JyB1bmxlc3MgaXQncyByZXR1cm5pbmcgMS4KKyAqCSgyKSA6OiBpbiBhIGZ1bGwgYWRkcmVzcyBpcyBzaWxlbnRseSBpZ25vcmVkLgorICogY3JlZGl0OgorICoJaW5zcGlyZWQgYnkgTWFyayBBbmRyZXdzLgorICogYXV0aG9yOgorICoJUGF1bCBWaXhpZSwgMTk5Ni4KKyAqLworc3RhdGljIGludAoraW5ldF9wdG9uNihjb25zdCBjaGFyICpzcmMsIHVfY2hhciAqZHN0KQoreworCXN0YXRpYyBjb25zdCBjaGFyIHhkaWdpdHNfbFtdID0gIjAxMjM0NTY3ODlhYmNkZWYiLAorCQkJICB4ZGlnaXRzX3VbXSA9ICIwMTIzNDU2Nzg5QUJDREVGIjsKKwl1X2NoYXIgdG1wW05TX0lONkFERFJTWl0sICp0cCwgKmVuZHAsICpjb2xvbnA7CisJY29uc3QgY2hhciAqeGRpZ2l0cywgKmN1cnRvazsKKwlpbnQgY2gsIHNlZW5feGRpZ2l0czsKKwl1X2ludCB2YWw7CisKKwlfRElBR0FTU0VSVChzcmMgIT0gTlVMTCk7CisJX0RJQUdBU1NFUlQoZHN0ICE9IE5VTEwpOworCisJbWVtc2V0KCh0cCA9IHRtcCksICdcMCcsIE5TX0lONkFERFJTWik7CisJZW5kcCA9IHRwICsgTlNfSU42QUREUlNaOworCWNvbG9ucCA9IE5VTEw7CisJLyogTGVhZGluZyA6OiByZXF1aXJlcyBzb21lIHNwZWNpYWwgaGFuZGxpbmcuICovCisJaWYgKCpzcmMgPT0gJzonKQorCQlpZiAoKisrc3JjICE9ICc6JykKKwkJCXJldHVybiAoMCk7CisJY3VydG9rID0gc3JjOworCXNlZW5feGRpZ2l0cyA9IDA7CisJdmFsID0gMDsKKwl3aGlsZSAoKGNoID0gKnNyYysrKSAhPSAnXDAnKSB7CisJCWNvbnN0IGNoYXIgKnBjaDsKKworCQlpZiAoKHBjaCA9IHN0cmNocigoeGRpZ2l0cyA9IHhkaWdpdHNfbCksIGNoKSkgPT0gTlVMTCkKKwkJCXBjaCA9IHN0cmNocigoeGRpZ2l0cyA9IHhkaWdpdHNfdSksIGNoKTsKKwkJaWYgKHBjaCAhPSBOVUxMKSB7CisJCQl2YWwgPDw9IDQ7CisJCQl2YWwgfD0gKGludCkocGNoIC0geGRpZ2l0cyk7CisJCQlpZiAoKytzZWVuX3hkaWdpdHMgPiA0KQorCQkJCXJldHVybiAoMCk7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoY2ggPT0gJzonKSB7CisJCQljdXJ0b2sgPSBzcmM7CisJCQlpZiAoIXNlZW5feGRpZ2l0cykgeworCQkJCWlmIChjb2xvbnApCisJCQkJCXJldHVybiAoMCk7CisJCQkJY29sb25wID0gdHA7CisJCQkJY29udGludWU7CisJCQl9IGVsc2UgaWYgKCpzcmMgPT0gJ1wwJykKKwkJCQlyZXR1cm4gKDApOworCQkJaWYgKHRwICsgTlNfSU5UMTZTWiA+IGVuZHApCisJCQkJcmV0dXJuICgwKTsKKwkJCSp0cCsrID0gKHVfY2hhcikgKHZhbCA+PiA4KSAmIDB4ZmY7CisJCQkqdHArKyA9ICh1X2NoYXIpIHZhbCAmIDB4ZmY7CisJCQlzZWVuX3hkaWdpdHMgPSAwOworCQkJdmFsID0gMDsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChjaCA9PSAnLicgJiYgKCh0cCArIE5TX0lOQUREUlNaKSA8PSBlbmRwKSAmJgorCQkgICAgaW5ldF9wdG9uNChjdXJ0b2ssIHRwLCAxKSA+IDApIHsKKwkJCXRwICs9IE5TX0lOQUREUlNaOworCQkJc2Vlbl94ZGlnaXRzID0gMDsKKwkJCWJyZWFrOwkvKiU8ICdcXDAnIHdhcyBzZWVuIGJ5IGluZXRfcHRvbjQoKS4gKi8KKwkJfQorCQlyZXR1cm4gKDApOworCX0KKwlpZiAoc2Vlbl94ZGlnaXRzKSB7CisJCWlmICh0cCArIE5TX0lOVDE2U1ogPiBlbmRwKQorCQkJcmV0dXJuICgwKTsKKwkJKnRwKysgPSAodV9jaGFyKSAodmFsID4+IDgpICYgMHhmZjsKKwkJKnRwKysgPSAodV9jaGFyKSB2YWwgJiAweGZmOworCX0KKwlpZiAoY29sb25wICE9IE5VTEwpIHsKKwkJLyoKKwkJICogU2luY2Ugc29tZSBtZW1tb3ZlKCkncyBlcnJvbmVvdXNseSBmYWlsIHRvIGhhbmRsZQorCQkgKiBvdmVybGFwcGluZyByZWdpb25zLCB3ZSdsbCBkbyB0aGUgc2hpZnQgYnkgaGFuZC4KKwkJICovCisJCWNvbnN0IHB0cmRpZmZfdCBuID0gdHAgLSBjb2xvbnA7CisJCWludCBpOworCisJCWlmICh0cCA9PSBlbmRwKQorCQkJcmV0dXJuICgwKTsKKwkJZm9yIChpID0gMTsgaSA8PSBuOyBpKyspIHsKKwkJCWVuZHBbLSBpXSA9IGNvbG9ucFtuIC0gaV07CisJCQljb2xvbnBbbiAtIGldID0gMDsKKwkJfQorCQl0cCA9IGVuZHA7CisJfQorCWlmICh0cCAhPSBlbmRwKQorCQlyZXR1cm4gKDApOworCW1lbWNweShkc3QsIHRtcCwgTlNfSU42QUREUlNaKTsKKwlyZXR1cm4gKDEpOworfQorCisvKiEgXGZpbGUgKi8KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYmMvaXNjL2V2X3N0cmVhbXMuYyBiL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYmMvaXNjL2V2X3N0cmVhbXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yODA0YjlmCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1uZXRic2QvbGliYy9pc2MvZXZfc3RyZWFtcy5jCkBAIC0wLDAgKzEsMzE5IEBACisvKgkkTmV0QlNEOiBldl9zdHJlYW1zLmMsdiAxLjYgMjAwOS8wNC8xMiAxNzowNzoxNyBjaHJpc3RvcyBFeHAgJAkqLworCisvKgorICogQ29weXJpZ2h0IChjKSAyMDA0IGJ5IEludGVybmV0IFN5c3RlbXMgQ29uc29ydGl1bSwgSW5jLiAoIklTQyIpCisgKiBDb3B5cmlnaHQgKGMpIDE5OTYtMTk5OSBieSBJbnRlcm5ldCBTb2Z0d2FyZSBDb25zb3J0aXVtCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBJU0MgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisgKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuICBJTiBOTyBFVkVOVCBTSEFMTCBJU0MgQkUgTElBQkxFIEZPUgorICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVAorICogT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqLworCisvKiBldl9zdHJlYW1zLmMgLSBpbXBsZW1lbnQgYXN5bmNoIHN0cmVhbSBmaWxlIElPIGZvciB0aGUgZXZlbnRsaWIKKyAqIHZpeCAwNG1hcjk2IFtpbml0aWFsXQorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKyNpZiAhZGVmaW5lZChMSU5UKSAmJiAhZGVmaW5lZChDT0RFQ0VOVEVSKSAmJiAhZGVmaW5lZChsaW50KQorI2lmZGVmIG5vdGRlZgorc3RhdGljIGNvbnN0IGNoYXIgcmNzaWRbXSA9ICJJZDogZXZfc3RyZWFtcy5jLHYgMS41IDIwMDUvMDQvMjcgMDQ6NTY6MzYgc3JhIEV4cCI7CisjZWxzZQorX19SQ1NJRCgiJE5ldEJTRDogZXZfc3RyZWFtcy5jLHYgMS42IDIwMDkvMDQvMTIgMTc6MDc6MTcgY2hyaXN0b3MgRXhwICQiKTsKKyNlbmRpZgorI2VuZGlmCisKKyNpbmNsdWRlICJwb3J0X2JlZm9yZS5oIgorI2luY2x1ZGUgImZkX3NldHNpemUuaCIKKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy91aW8uaD4KKworI2luY2x1ZGUgPGVycm5vLmg+CisKKyNpbmNsdWRlIDxpc2MvZXZlbnRsaWIuaD4KKyNpbmNsdWRlIDxpc2MvYXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgImV2ZW50bGliX3AuaCIKKworI2luY2x1ZGUgInBvcnRfYWZ0ZXIuaCIKKworI2lmbmRlZiBfTElCQworc3RhdGljIGludAljb3B5dmVjKGV2U3RyZWFtICpzdHIsIGNvbnN0IHN0cnVjdCBpb3ZlYyAqaW92LCBpbnQgaW9jbnQpOworc3RhdGljIHZvaWQJY29uc3VtZShldlN0cmVhbSAqc3RyLCBzaXplX3QgYnl0ZXMpOworc3RhdGljIHZvaWQJZG9uZShldkNvbnRleHQgb3BhcXVlQ3R4LCBldlN0cmVhbSAqc3RyKTsKK3N0YXRpYyB2b2lkCXdyaXRhYmxlKGV2Q29udGV4dCBvcGFxdWVDdHgsIHZvaWQgKnVhcCwgaW50IGZkLCBpbnQgZXZtYXNrKTsKK3N0YXRpYyB2b2lkCXJlYWRhYmxlKGV2Q29udGV4dCBvcGFxdWVDdHgsIHZvaWQgKnVhcCwgaW50IGZkLCBpbnQgZXZtYXNrKTsKKyNlbmRpZgorCitzdHJ1Y3QgaW92ZWMKK2V2Q29uc0lvdmVjKHZvaWQgKmJ1Ziwgc2l6ZV90IGNudCkgeworCXN0cnVjdCBpb3ZlYyByZXQ7CisKKwltZW1zZXQoJnJldCwgMHhmNSwgc2l6ZW9mIHJldCk7CisJcmV0Lmlvdl9iYXNlID0gYnVmOworCXJldC5pb3ZfbGVuID0gY250OworCXJldHVybiAocmV0KTsKK30KKworI2lmbmRlZiBfTElCQworaW50CitldldyaXRlKGV2Q29udGV4dCBvcGFxdWVDdHgsIGludCBmZCwgY29uc3Qgc3RydWN0IGlvdmVjICppb3YsIGludCBpb2NudCwKKwlldlN0cmVhbUZ1bmMgZnVuYywgdm9pZCAqdWFwLCBldlN0cmVhbUlEICppZCkKK3sKKwlldkNvbnRleHRfcCAqY3R4ID0gb3BhcXVlQ3R4Lm9wYXF1ZTsKKwlldlN0cmVhbSAqbmV3OworCWludCBzYXZlOworCisJT0tORVcobmV3KTsKKwluZXctPmZ1bmMgPSBmdW5jOworCW5ldy0+dWFwID0gdWFwOworCW5ldy0+ZmQgPSBmZDsKKwluZXctPmZsYWdzID0gMDsKKwlpZiAoZXZTZWxlY3RGRChvcGFxdWVDdHgsIGZkLCBFVl9XUklURSwgd3JpdGFibGUsIG5ldywgJm5ldy0+ZmlsZSkgPCAwKQorCQlnb3RvIGZyZWU7CisJaWYgKGNvcHl2ZWMobmV3LCBpb3YsIGlvY250KSA8IDApCisJCWdvdG8gZnJlZTsKKwluZXctPnByZXZEb25lID0gTlVMTDsKKwluZXctPm5leHREb25lID0gTlVMTDsKKwlpZiAoY3R4LT5zdHJlYW1zICE9IE5VTEwpCisJCWN0eC0+c3RyZWFtcy0+cHJldiA9IG5ldzsKKwluZXctPnByZXYgPSBOVUxMOworCW5ldy0+bmV4dCA9IGN0eC0+c3RyZWFtczsKKwljdHgtPnN0cmVhbXMgPSBuZXc7CisJaWYgKGlkICE9IE5VTEwpCisJCWlkLT5vcGFxdWUgPSBuZXc7CisJcmV0dXJuICgwKTsKKyBmcmVlOgorCXNhdmUgPSBlcnJubzsKKwlGUkVFKG5ldyk7CisJZXJybm8gPSBzYXZlOworCXJldHVybiAoLTEpOworfQorCitpbnQKK2V2UmVhZChldkNvbnRleHQgb3BhcXVlQ3R4LCBpbnQgZmQsIGNvbnN0IHN0cnVjdCBpb3ZlYyAqaW92LCBpbnQgaW9jbnQsCisgICAgICAgZXZTdHJlYW1GdW5jIGZ1bmMsIHZvaWQgKnVhcCwgZXZTdHJlYW1JRCAqaWQpCit7CisJZXZDb250ZXh0X3AgKmN0eCA9IG9wYXF1ZUN0eC5vcGFxdWU7CisJZXZTdHJlYW0gKm5ldzsKKwlpbnQgc2F2ZTsKKworCU9LTkVXKG5ldyk7CisJbmV3LT5mdW5jID0gZnVuYzsKKwluZXctPnVhcCA9IHVhcDsKKwluZXctPmZkID0gZmQ7CisJbmV3LT5mbGFncyA9IDA7CisJaWYgKGV2U2VsZWN0RkQob3BhcXVlQ3R4LCBmZCwgRVZfUkVBRCwgcmVhZGFibGUsIG5ldywgJm5ldy0+ZmlsZSkgPCAwKQorCQlnb3RvIGZyZWU7CisJaWYgKGNvcHl2ZWMobmV3LCBpb3YsIGlvY250KSA8IDApCisJCWdvdG8gZnJlZTsKKwluZXctPnByZXZEb25lID0gTlVMTDsKKwluZXctPm5leHREb25lID0gTlVMTDsKKwlpZiAoY3R4LT5zdHJlYW1zICE9IE5VTEwpCisJCWN0eC0+c3RyZWFtcy0+cHJldiA9IG5ldzsKKwluZXctPnByZXYgPSBOVUxMOworCW5ldy0+bmV4dCA9IGN0eC0+c3RyZWFtczsKKwljdHgtPnN0cmVhbXMgPSBuZXc7CisJaWYgKGlkKQorCQlpZC0+b3BhcXVlID0gbmV3OworCXJldHVybiAoMCk7CisgZnJlZToKKwlzYXZlID0gZXJybm87CisJRlJFRShuZXcpOworCWVycm5vID0gc2F2ZTsKKwlyZXR1cm4gKC0xKTsKK30KKworaW50CitldlRpbWVSVyhldkNvbnRleHQgb3BhcXVlQ3R4LCBldlN0cmVhbUlEIGlkLCBldlRpbWVySUQgdGltZXIpIC8qQVJHU1VTRUQqLyB7CisJZXZTdHJlYW0gKnN0ciA9IGlkLm9wYXF1ZTsKKworCVVOVVNFRChvcGFxdWVDdHgpOworCisJc3RyLT50aW1lciA9IHRpbWVyOworCXN0ci0+ZmxhZ3MgfD0gRVZfU1RSX1RJTUVST0s7CisJcmV0dXJuICgwKTsKK30KKworaW50CitldlVudGltZVJXKGV2Q29udGV4dCBvcGFxdWVDdHgsIGV2U3RyZWFtSUQgaWQpIC8qQVJHU1VTRUQqLyB7CisJZXZTdHJlYW0gKnN0ciA9IGlkLm9wYXF1ZTsKKworCVVOVVNFRChvcGFxdWVDdHgpOworCisJc3RyLT5mbGFncyAmPSB+RVZfU1RSX1RJTUVST0s7CisJcmV0dXJuICgwKTsKK30KKworaW50CitldkNhbmNlbFJXKGV2Q29udGV4dCBvcGFxdWVDdHgsIGV2U3RyZWFtSUQgaWQpIHsKKwlldkNvbnRleHRfcCAqY3R4ID0gb3BhcXVlQ3R4Lm9wYXF1ZTsKKwlldlN0cmVhbSAqb2xkID0gaWQub3BhcXVlOworCisJLyoKKwkgKiBUaGUgc3RyZWFtcyBsaXN0IGlzIGRvdWJseSB0aHJlYWRlZC4gIEZpcnN0LCB0aGVyZSdzIGN0eC0+c3RyZWFtcworCSAqIHRoYXQncyB1c2VkIGJ5IGV2RGVzdHJveSgpIHRvIGZpbmQgYW5kIGNhbmNlbCBhbGwgc3RyZWFtcy4gIFNlY29uZCwKKwkgKiB0aGVyZSdzIGN0eC0+c3RyRG9uZSAoaGVhZCkgYW5kIGN0eC0+c3RyTGFzdCAodGFpbCkgd2hpY2ggdGhyZWFkCisJICogdGhyb3VnaCB0aGUgcG90ZW50aWFsbHkgc21hbGxlciBudW1iZXIgb2YgIklPIGNvbXBsZXRlZCIgc3RyZWFtcywKKwkgKiB1c2VkIGluIGV2R2V0TmV4dCgpIHRvIGF2b2lkIHNjYW5uaW5nIHRoZSBlbnRpcmUgbGlzdC4KKwkgKi8KKworCS8qIFVubGluayBmcm9tIGN0eC0+c3RyZWFtcy4gKi8KKwlpZiAob2xkLT5wcmV2ICE9IE5VTEwpCisJCW9sZC0+cHJldi0+bmV4dCA9IG9sZC0+bmV4dDsKKwllbHNlCisJCWN0eC0+c3RyZWFtcyA9IG9sZC0+bmV4dDsKKwlpZiAob2xkLT5uZXh0ICE9IE5VTEwpCisJCW9sZC0+bmV4dC0+cHJldiA9IG9sZC0+cHJldjsKKworCS8qCisJICogSWYgJ29sZCcgaXMgb24gdGhlIGN0eC0+c3RyRG9uZSBsaXN0LCByZW1vdmUgaXQuICBVcGRhdGUKKwkgKiBjdHgtPnN0ckxhc3QgaWYgbmVjZXNzYXJ5LgorCSAqLworCWlmIChvbGQtPnByZXZEb25lID09IE5VTEwgJiYgb2xkLT5uZXh0RG9uZSA9PSBOVUxMKSB7CisJCS8qCisJCSAqIEVpdGhlciAnb2xkJyBpcyB0aGUgb25seSBpdGVtIG9uIHRoZSBkb25lIGxpc3QsIG9yIGl0J3MKKwkJICogbm90IG9uIHRoZSBkb25lIGxpc3QuICBJZiB0aGUgZm9ybWVyLCB0aGVuIHdlIHVubGluayBpdAorCQkgKiBmcm9tIHRoZSBsaXN0LiAgSWYgdGhlIGxhdHRlciwgd2UgbGVhdmUgdGhlIGxpc3QgYWxvbmUuCisJCSAqLworCQlpZiAoY3R4LT5zdHJEb25lID09IG9sZCkgeworCQkJY3R4LT5zdHJEb25lID0gTlVMTDsKKwkJCWN0eC0+c3RyTGFzdCA9IE5VTEw7CisJCX0KKwl9IGVsc2UgeworCQlpZiAob2xkLT5wcmV2RG9uZSAhPSBOVUxMKQorCQkJb2xkLT5wcmV2RG9uZS0+bmV4dERvbmUgPSBvbGQtPm5leHREb25lOworCQllbHNlCisJCQljdHgtPnN0ckRvbmUgPSBvbGQtPm5leHREb25lOworCQlpZiAob2xkLT5uZXh0RG9uZSAhPSBOVUxMKQorCQkJb2xkLT5uZXh0RG9uZS0+cHJldkRvbmUgPSBvbGQtPnByZXZEb25lOworCQllbHNlCisJCQljdHgtPnN0ckxhc3QgPSBvbGQtPnByZXZEb25lOworCX0KKworCS8qIERlYWxsb2NhdGUgdGhlIHN0cmVhbS4gKi8KKwlpZiAob2xkLT5maWxlLm9wYXF1ZSkKKwkJZXZEZXNlbGVjdEZEKG9wYXF1ZUN0eCwgb2xkLT5maWxlKTsKKwltZW1wdXQob2xkLT5pb3ZPcmlnLCBzaXplb2YgKHN0cnVjdCBpb3ZlYykgKiBvbGQtPmlvdk9yaWdDb3VudCk7CisJRlJFRShvbGQpOworCXJldHVybiAoMCk7Cit9CisKKy8qIENvcHkgYSBzY2F0dGVyL2dhdGhlciB2ZWN0b3IgYW5kIGluaXRpYWxpemUgYSBzdHJlYW0gaGFuZGxlcidzIElPLiAqLworc3RhdGljIGludAorY29weXZlYyhldlN0cmVhbSAqc3RyLCBjb25zdCBzdHJ1Y3QgaW92ZWMgKmlvdiwgaW50IGlvY250KSB7CisJaW50IGk7CisKKwlzdHItPmlvdk9yaWcgPSAoc3RydWN0IGlvdmVjICopbWVtZ2V0KHNpemVvZihzdHJ1Y3QgaW92ZWMpICogaW9jbnQpOworCWlmIChzdHItPmlvdk9yaWcgPT0gTlVMTCkgeworCQllcnJubyA9IEVOT01FTTsKKwkJcmV0dXJuICgtMSk7CisJfQorCXN0ci0+aW9Ub3RhbCA9IDA7CisJZm9yIChpID0gMDsgaSA8IGlvY250OyBpKyspIHsKKwkJc3RyLT5pb3ZPcmlnW2ldID0gaW92W2ldOworCQlzdHItPmlvVG90YWwgKz0gaW92W2ldLmlvdl9sZW47CisJfQorCXN0ci0+aW92T3JpZ0NvdW50ID0gaW9jbnQ7CisJc3RyLT5pb3ZDdXIgPSBzdHItPmlvdk9yaWc7CisJc3RyLT5pb3ZDdXJDb3VudCA9IHN0ci0+aW92T3JpZ0NvdW50OworCXN0ci0+aW9Eb25lID0gMDsKKwlyZXR1cm4gKDApOworfQorCisvKiBQdWxsIG9mZiBvciB0cnVuY2F0ZSBsZWFkIGlvdmVjKHMpLiAqLworc3RhdGljIHZvaWQKK2NvbnN1bWUoZXZTdHJlYW0gKnN0ciwgc2l6ZV90IGJ5dGVzKSB7CisJd2hpbGUgKGJ5dGVzID4gMFUpIHsKKwkJaWYgKGJ5dGVzIDwgKHNpemVfdClzdHItPmlvdkN1ci0+aW92X2xlbikgeworCQkJc3RyLT5pb3ZDdXItPmlvdl9sZW4gLT0gYnl0ZXM7CisJCQlzdHItPmlvdkN1ci0+aW92X2Jhc2UgPSAodm9pZCAqKQorCQkJCSgodV9jaGFyICopc3RyLT5pb3ZDdXItPmlvdl9iYXNlICsgYnl0ZXMpOworCQkJc3RyLT5pb0RvbmUgKz0gYnl0ZXM7CisJCQlieXRlcyA9IDA7CisJCX0gZWxzZSB7CisJCQlieXRlcyAtPSBzdHItPmlvdkN1ci0+aW92X2xlbjsKKwkJCXN0ci0+aW9Eb25lICs9IHN0ci0+aW92Q3VyLT5pb3ZfbGVuOworCQkJc3RyLT5pb3ZDdXIrKzsKKwkJCXN0ci0+aW92Q3VyQ291bnQtLTsKKwkJfQorCX0KK30KKworLyogQWRkIGEgc3RyZWFtIHRvIERvbmUgbGlzdCBhbmQgZGVzZWxlY3QgdGhlIEZELiAqLworc3RhdGljIHZvaWQKK2RvbmUoZXZDb250ZXh0IG9wYXF1ZUN0eCwgZXZTdHJlYW0gKnN0cikgeworCWV2Q29udGV4dF9wICpjdHggPSBvcGFxdWVDdHgub3BhcXVlOworCisJaWYgKGN0eC0+c3RyTGFzdCAhPSBOVUxMKSB7CisJCXN0ci0+cHJldkRvbmUgPSBjdHgtPnN0ckxhc3Q7CisJCWN0eC0+c3RyTGFzdC0+bmV4dERvbmUgPSBzdHI7CisJCWN0eC0+c3RyTGFzdCA9IHN0cjsKKwl9IGVsc2UgeworCQlJTlNJU1QoY3R4LT5zdHJEb25lID09IE5VTEwpOworCQljdHgtPnN0ckRvbmUgPSBjdHgtPnN0ckxhc3QgPSBzdHI7CisJfQorCWV2RGVzZWxlY3RGRChvcGFxdWVDdHgsIHN0ci0+ZmlsZSk7CisJc3RyLT5maWxlLm9wYXF1ZSA9IE5VTEw7CisJLyogZXZEcm9wKCkgd2lsbCBjYWxsIGV2Q2FuY2VsUlcoKSBvbiB1cy4gKi8KK30KKworLyogRHJpYmJsZSBvdXQgc29tZSBieXRlcyBvbiB0aGUgc3RyZWFtLiAgKENhbGxlZCBieSBldkRpc3BhdGNoKCkuKSAqLworc3RhdGljIHZvaWQKK3dyaXRhYmxlKGV2Q29udGV4dCBvcGFxdWVDdHgsIHZvaWQgKnVhcCwgaW50IGZkLCBpbnQgZXZtYXNrKSB7CisJZXZTdHJlYW0gKnN0ciA9IHVhcDsKKwlpbnQgYnl0ZXM7CisKKwlVTlVTRUQoZXZtYXNrKTsKKworCWJ5dGVzID0gd3JpdGV2KGZkLCBzdHItPmlvdkN1ciwgc3RyLT5pb3ZDdXJDb3VudCk7CisJaWYgKGJ5dGVzID4gMCkgeworCQlpZiAoKHN0ci0+ZmxhZ3MgJiBFVl9TVFJfVElNRVJPSykgIT0gMCkKKwkJCWV2VG91Y2hJZGxlVGltZXIob3BhcXVlQ3R4LCBzdHItPnRpbWVyKTsKKwkJY29uc3VtZShzdHIsIGJ5dGVzKTsKKwl9IGVsc2UgeworCQlpZiAoYnl0ZXMgPCAwICYmIGVycm5vICE9IEVJTlRSKSB7CisJCQlzdHItPmlvRG9uZSA9IC0xOworCQkJc3RyLT5pb0Vycm5vID0gZXJybm87CisJCX0KKwl9CisJaWYgKHN0ci0+aW9Eb25lID09IC0xIHx8IHN0ci0+aW9Eb25lID09IHN0ci0+aW9Ub3RhbCkKKwkJZG9uZShvcGFxdWVDdHgsIHN0cik7Cit9CisKKy8qIFNjb29wIHVwIHNvbWUgYnl0ZXMgZnJvbSB0aGUgc3RyZWFtLiAgKENhbGxlZCBieSBldkRpc3BhdGNoKCkuKSAqLworc3RhdGljIHZvaWQKK3JlYWRhYmxlKGV2Q29udGV4dCBvcGFxdWVDdHgsIHZvaWQgKnVhcCwgaW50IGZkLCBpbnQgZXZtYXNrKSB7CisJZXZTdHJlYW0gKnN0ciA9IHVhcDsKKwlpbnQgYnl0ZXM7CisKKwlVTlVTRUQoZXZtYXNrKTsKKworCWJ5dGVzID0gcmVhZHYoZmQsIHN0ci0+aW92Q3VyLCBzdHItPmlvdkN1ckNvdW50KTsKKwlpZiAoYnl0ZXMgPiAwKSB7CisJCWlmICgoc3RyLT5mbGFncyAmIEVWX1NUUl9USU1FUk9LKSAhPSAwKQorCQkJZXZUb3VjaElkbGVUaW1lcihvcGFxdWVDdHgsIHN0ci0+dGltZXIpOworCQljb25zdW1lKHN0ciwgYnl0ZXMpOworCX0gZWxzZSB7CisJCWlmIChieXRlcyA9PSAwKQorCQkJc3RyLT5pb0RvbmUgPSAwOworCQllbHNlIHsKKwkJCWlmIChlcnJubyAhPSBFSU5UUikgeworCQkJCXN0ci0+aW9Eb25lID0gLTE7CisJCQkJc3RyLT5pb0Vycm5vID0gZXJybm87CisJCQl9CisJCX0KKwl9CisJaWYgKHN0ci0+aW9Eb25lIDw9IDAgfHwgc3RyLT5pb0RvbmUgPT0gc3RyLT5pb1RvdGFsKQorCQlkb25lKG9wYXF1ZUN0eCwgc3RyKTsKK30KKyNlbmRpZgorCisvKiEgXGZpbGUgKi8KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYmMvaXNjL2V2X3RpbWVycy5jIGIvbGliYy91cHN0cmVhbS1uZXRic2QvbGliYy9pc2MvZXZfdGltZXJzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDA1MjFhNwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYmMvaXNjL2V2X3RpbWVycy5jCkBAIC0wLDAgKzEsNTE5IEBACisvKgkkTmV0QlNEOiBldl90aW1lcnMuYyx2IDEuMTEgMjAxMi8wMy8yMSAwMDozNDo1NCBjaHJpc3RvcyBFeHAgJAkqLworCisvKgorICogQ29weXJpZ2h0IChjKSAyMDA0IGJ5IEludGVybmV0IFN5c3RlbXMgQ29uc29ydGl1bSwgSW5jLiAoIklTQyIpCisgKiBDb3B5cmlnaHQgKGMpIDE5OTUtMTk5OSBieSBJbnRlcm5ldCBTb2Z0d2FyZSBDb25zb3J0aXVtCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBJU0MgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisgKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuICBJTiBOTyBFVkVOVCBTSEFMTCBJU0MgQkUgTElBQkxFIEZPUgorICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVAorICogT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqLworCisvKiBldl90aW1lcnMuYyAtIGltcGxlbWVudCB0aW1lcnMgZm9yIHRoZSBldmVudGxpYgorICogdml4IDA5c2VwOTUgW2luaXRpYWxdCisgKi8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorI2lmICFkZWZpbmVkKExJTlQpICYmICFkZWZpbmVkKENPREVDRU5URVIpICYmICFkZWZpbmVkKGxpbnQpCisjaWZkZWYgbm90ZGVmCitzdGF0aWMgY29uc3QgY2hhciByY3NpZFtdID0gIklkOiBldl90aW1lcnMuYyx2IDEuNiAyMDA1LzA0LzI3IDA0OjU2OjM2IHNyYSBFeHAiOworI2Vsc2UKK19fUkNTSUQoIiROZXRCU0Q6IGV2X3RpbWVycy5jLHYgMS4xMSAyMDEyLzAzLzIxIDAwOjM0OjU0IGNocmlzdG9zIEV4cCAkIik7CisjZW5kaWYKKyNlbmRpZgorCisvKiBJbXBvcnQuICovCisKKyNpbmNsdWRlICJwb3J0X2JlZm9yZS5oIgorI2luY2x1ZGUgImZkX3NldHNpemUuaCIKKworI2luY2x1ZGUgPGVycm5vLmg+CisKKyNpbmNsdWRlIDxpc2MvYXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPGlzYy9ldmVudGxpYi5oPgorI2luY2x1ZGUgImV2ZW50bGliX3AuaCIKKworI2luY2x1ZGUgInBvcnRfYWZ0ZXIuaCIKKworLyogQ29uc3RhbnRzLiAqLworCisjZGVmaW5lCU1JTExJT04gMTAwMDAwMAorI2RlZmluZSBCSUxMSU9OIDEwMDAwMDAwMDAKKworLyogRm9yd2FyZC4gKi8KKworI2lmbmRlZiBfTElCQworc3RhdGljIGludCBkdWVfc29vbmVyKHZvaWQgKiwgdm9pZCAqKTsKK3N0YXRpYyB2b2lkIHNldF9pbmRleCh2b2lkICosIGludCk7CitzdGF0aWMgdm9pZCBmcmVlX3RpbWVyKHZvaWQgKiwgdm9pZCAqKTsKK3N0YXRpYyB2b2lkIHByaW50X3RpbWVyKHZvaWQgKiwgdm9pZCAqKTsKK3N0YXRpYyB2b2lkIGlkbGVfdGltZW91dChldkNvbnRleHQsIHZvaWQgKiwgc3RydWN0IHRpbWVzcGVjLCBzdHJ1Y3QgdGltZXNwZWMpOworCisvKiBQcml2YXRlIHR5cGUuICovCisKK3R5cGVkZWYgc3RydWN0IHsKKwlldlRpbWVyRnVuYwlmdW5jOworCXZvaWQgKgkJdWFwOworCXN0cnVjdCB0aW1lc3BlYwlsYXN0VG91Y2hlZDsKKwlzdHJ1Y3QgdGltZXNwZWMJbWF4X2lkbGU7CisJZXZUaW1lciAqCXRpbWVyOworfSBpZGxlX3RpbWVyOworI2VuZGlmCisKKy8qIFB1YmxpYy4gKi8KKworc3RydWN0IHRpbWVzcGVjCitldkNvbnNUaW1lKHRpbWVfdCBzZWMsIGxvbmcgbnNlYykgeworCXN0cnVjdCB0aW1lc3BlYyB4OworCisJeC50dl9zZWMgPSBzZWM7CisJeC50dl9uc2VjID0gbnNlYzsKKwlyZXR1cm4gKHgpOworfQorCitzdHJ1Y3QgdGltZXNwZWMKK2V2QWRkVGltZShzdHJ1Y3QgdGltZXNwZWMgYWRkZW5kMSwgc3RydWN0IHRpbWVzcGVjIGFkZGVuZDIpIHsKKwlzdHJ1Y3QgdGltZXNwZWMgeDsKKworCXgudHZfc2VjID0gYWRkZW5kMS50dl9zZWMgKyBhZGRlbmQyLnR2X3NlYzsKKwl4LnR2X25zZWMgPSBhZGRlbmQxLnR2X25zZWMgKyBhZGRlbmQyLnR2X25zZWM7CisJaWYgKHgudHZfbnNlYyA+PSBCSUxMSU9OKSB7CisJCXgudHZfc2VjKys7CisJCXgudHZfbnNlYyAtPSBCSUxMSU9OOworCX0KKwlyZXR1cm4gKHgpOworfQorCitzdHJ1Y3QgdGltZXNwZWMKK2V2U3ViVGltZShzdHJ1Y3QgdGltZXNwZWMgbWludWVuZCwgc3RydWN0IHRpbWVzcGVjIHN1YnRyYWhlbmQpIHsKKwlzdHJ1Y3QgdGltZXNwZWMgeDsKKworCXgudHZfc2VjID0gbWludWVuZC50dl9zZWMgLSBzdWJ0cmFoZW5kLnR2X3NlYzsKKwlpZiAobWludWVuZC50dl9uc2VjID49IHN1YnRyYWhlbmQudHZfbnNlYykKKwkJeC50dl9uc2VjID0gbWludWVuZC50dl9uc2VjIC0gc3VidHJhaGVuZC50dl9uc2VjOworCWVsc2UgeworCQl4LnR2X25zZWMgPSBCSUxMSU9OIC0gc3VidHJhaGVuZC50dl9uc2VjICsgbWludWVuZC50dl9uc2VjOworCQl4LnR2X3NlYy0tOworCX0KKwlyZXR1cm4gKHgpOworfQorCitpbnQKK2V2Q21wVGltZShzdHJ1Y3QgdGltZXNwZWMgYSwgc3RydWN0IHRpbWVzcGVjIGIpIHsKKyNkZWZpbmUgU0dOKHgpICgoeCkgPCAwID8gKC0xKSA6ICh4KSA+IDAgPyAoMSkgOiAoMCkpOworCXRpbWVfdCBzID0gYS50dl9zZWMgLSBiLnR2X3NlYzsKKwlsb25nIG47CisKKwlpZiAocyAhPSAwKQorCQlyZXR1cm4gU0dOKHMpOworCisJbiA9IGEudHZfbnNlYyAtIGIudHZfbnNlYzsKKwlyZXR1cm4gU0dOKG4pOworfQorCitzdHJ1Y3QgdGltZXNwZWMKK2V2Tm93VGltZSh2b2lkKQoreworCXN0cnVjdCB0aW1ldmFsIG5vdzsKKyNpZmRlZiBDTE9DS19SRUFMVElNRQorCXN0cnVjdCB0aW1lc3BlYyB0c25vdzsKKwlpbnQgbSA9IENMT0NLX1JFQUxUSU1FOworCisjaWZkZWYgQ0xPQ0tfTU9OT1RPTklDCisjaWZuZGVmIF9MSUJDCisJaWYgKF9fZXZPcHRNb25vVGltZSkKKwkJbSA9IENMT0NLX01PTk9UT05JQzsKKyNlbmRpZgorI2VuZGlmCisJaWYgKGNsb2NrX2dldHRpbWUobSwgJnRzbm93KSA9PSAwKQorCQlyZXR1cm4gKHRzbm93KTsKKyNlbmRpZgorCWlmIChnZXR0aW1lb2ZkYXkoJm5vdywgTlVMTCkgPCAwKQorCQlyZXR1cm4gKGV2Q29uc1RpbWUoKHRpbWVfdCkwLCAwTCkpOworCXJldHVybiAoZXZUaW1lU3BlYyhub3cpKTsKK30KKworc3RydWN0IHRpbWVzcGVjCitldlVUQ1RpbWUodm9pZCkgeworCXN0cnVjdCB0aW1ldmFsIG5vdzsKKyNpZmRlZiBDTE9DS19SRUFMVElNRQorCXN0cnVjdCB0aW1lc3BlYyB0c25vdzsKKwlpZiAoY2xvY2tfZ2V0dGltZShDTE9DS19SRUFMVElNRSwgJnRzbm93KSA9PSAwKQorCQlyZXR1cm4gKHRzbm93KTsKKyNlbmRpZgorCWlmIChnZXR0aW1lb2ZkYXkoJm5vdywgTlVMTCkgPCAwKQorCQlyZXR1cm4gKGV2Q29uc1RpbWUoKHRpbWVfdCkwLCAwTCkpOworCXJldHVybiAoZXZUaW1lU3BlYyhub3cpKTsKK30KKworI2lmbmRlZiBfTElCQworc3RydWN0IHRpbWVzcGVjCitldkxhc3RFdmVudFRpbWUoZXZDb250ZXh0IG9wYXF1ZUN0eCkgeworCWV2Q29udGV4dF9wICpjdHggPSBvcGFxdWVDdHgub3BhcXVlOworCisJcmV0dXJuIChjdHgtPmxhc3RFdmVudFRpbWUpOworfQorI2VuZGlmCisKK3N0cnVjdCB0aW1lc3BlYworZXZUaW1lU3BlYyhzdHJ1Y3QgdGltZXZhbCB0dikgeworCXN0cnVjdCB0aW1lc3BlYyB0czsKKworCXRzLnR2X3NlYyA9IHR2LnR2X3NlYzsKKwl0cy50dl9uc2VjID0gdHYudHZfdXNlYyAqIDEwMDA7CisJcmV0dXJuICh0cyk7Cit9CisKK3N0cnVjdCB0aW1ldmFsCitldlRpbWVWYWwoc3RydWN0IHRpbWVzcGVjIHRzKSB7CisJc3RydWN0IHRpbWV2YWwgdHY7CisKKwl0di50dl9zZWMgPSB0cy50dl9zZWM7CisJdHYudHZfdXNlYyA9IChzdXNlY29uZHNfdCkodHMudHZfbnNlYyAvIDEwMDApOworCXJldHVybiAodHYpOworfQorCisjaWZuZGVmIF9MSUJDCitpbnQKK2V2U2V0VGltZXIoZXZDb250ZXh0IG9wYXF1ZUN0eCwKKwkgICBldlRpbWVyRnVuYyBmdW5jLAorCSAgIHZvaWQgKnVhcCwKKwkgICBzdHJ1Y3QgdGltZXNwZWMgZHVlLAorCSAgIHN0cnVjdCB0aW1lc3BlYyBpbnRlciwKKwkgICBldlRpbWVySUQgKm9wYXF1ZUlECispIHsKKwlldkNvbnRleHRfcCAqY3R4ID0gb3BhcXVlQ3R4Lm9wYXF1ZTsKKwlldlRpbWVyICppZDsKKworCWV2UHJpbnRmKGN0eCwgMSwKKyJldlNldFRpbWVyKGN0eCAlcCwgZnVuYyAlcCwgdWFwICVwLCBkdWUgJWxkLiUwOWxkLCBpbnRlciAlbGQuJTA5bGQpXG4iLAorCQkgY3R4LCBmdW5jLCB1YXAsCisJCSAobG9uZylkdWUudHZfc2VjLCBkdWUudHZfbnNlYywKKwkJIChsb25nKWludGVyLnR2X3NlYywgaW50ZXIudHZfbnNlYyk7CisKKyNpZmRlZiBfX2hwdXgKKwkvKgorCSAqIHR2X3NlYyBhbmQgdHZfbnNlYyBhcmUgdW5zaWduZWQuCisJICovCisJaWYgKGR1ZS50dl9uc2VjID49IEJJTExJT04pCisJCUVWX0VSUihFSU5WQUwpOworCisJaWYgKGludGVyLnR2X25zZWMgPj0gQklMTElPTikKKwkJRVZfRVJSKEVJTlZBTCk7CisjZWxzZQorCWlmIChkdWUudHZfc2VjIDwgMCB8fCBkdWUudHZfbnNlYyA8IDAgfHwgZHVlLnR2X25zZWMgPj0gQklMTElPTikKKwkJRVZfRVJSKEVJTlZBTCk7CisKKwlpZiAoaW50ZXIudHZfc2VjIDwgMCB8fCBpbnRlci50dl9uc2VjIDwgMCB8fCBpbnRlci50dl9uc2VjID49IEJJTExJT04pCisJCUVWX0VSUihFSU5WQUwpOworI2VuZGlmCisKKwkvKiBkdWU9ezAsMH0gaXMgYSBtYWdpYyBjb29raWUgbWVhbmluZyAibm93LiIgKi8KKwlpZiAoZHVlLnR2X3NlYyA9PSAodGltZV90KTAgJiYgZHVlLnR2X25zZWMgPT0gMEwpCisJCWR1ZSA9IGV2Tm93VGltZSgpOworCisJLyogQWxsb2NhdGUgYW5kIGZpbGwuICovCisJT0tORVcoaWQpOworCWlkLT5mdW5jID0gZnVuYzsKKwlpZC0+dWFwID0gdWFwOworCWlkLT5kdWUgPSBkdWU7CisJaWQtPmludGVyID0gaW50ZXI7CisKKwlpZiAoaGVhcF9pbnNlcnQoY3R4LT50aW1lcnMsIGlkKSA8IDApCisJCXJldHVybiAoLTEpOworCisJLyogUmVtZW1iZXIgdGhlIElEIGlmIHRoZSBjYWxsZXIgcHJvdmlkZWQgdXMgYSBwbGFjZSBmb3IgaXQuICovCisJaWYgKG9wYXF1ZUlEKQorCQlvcGFxdWVJRC0+b3BhcXVlID0gaWQ7CisKKwlpZiAoY3R4LT5kZWJ1ZyA+IDcpIHsKKwkJZXZQcmludGYoY3R4LCA3LCAidGltZXJzIGFmdGVyIGV2U2V0VGltZXI6XG4iKTsKKwkJKHZvaWQpIGhlYXBfZm9yX2VhY2goY3R4LT50aW1lcnMsIHByaW50X3RpbWVyLCAodm9pZCAqKWN0eCk7CisJfQorCisJcmV0dXJuICgwKTsKK30KKworaW50CitldkNsZWFyVGltZXIoZXZDb250ZXh0IG9wYXF1ZUN0eCwgZXZUaW1lcklEIGlkKSB7CisJZXZDb250ZXh0X3AgKmN0eCA9IG9wYXF1ZUN0eC5vcGFxdWU7CisJZXZUaW1lciAqZGVsID0gaWQub3BhcXVlOworCisJaWYgKGN0eC0+Y3VyICE9IE5VTEwgJiYKKwkgICAgY3R4LT5jdXItPnR5cGUgPT0gVGltZXIgJiYKKwkgICAgY3R4LT5jdXItPnUudGltZXIudGhpcyA9PSBkZWwpIHsKKwkJZXZQcmludGYoY3R4LCA4LCAiZGVmZXJyaW5nIGRlbGV0ZSBvZiB0aW1lciAoZXhlY3V0aW5nKVxuIik7CisJCS8qCisJCSAqIFNldHRpbmcgdGhlIGludGVydmFsIHRvIHplcm8gZW5zdXJlcyB0aGF0IGV2RHJvcCgpIHdpbGwKKwkJICogY2xlYW4gdXAgdGhlIHRpbWVyLgorCQkgKi8KKwkJZGVsLT5pbnRlciA9IGV2Q29uc1RpbWUoMCwgMCk7CisJCXJldHVybiAoMCk7CisJfQorCisJaWYgKGhlYXBfZWxlbWVudChjdHgtPnRpbWVycywgZGVsLT5pbmRleCkgIT0gZGVsKQorCQlFVl9FUlIoRU5PRU5UKTsKKworCWlmIChoZWFwX2RlbGV0ZShjdHgtPnRpbWVycywgZGVsLT5pbmRleCkgPCAwKQorCQlyZXR1cm4gKC0xKTsKKwlGUkVFKGRlbCk7CisKKwlpZiAoY3R4LT5kZWJ1ZyA+IDcpIHsKKwkJZXZQcmludGYoY3R4LCA3LCAidGltZXJzIGFmdGVyIGV2Q2xlYXJUaW1lcjpcbiIpOworCQkodm9pZCkgaGVhcF9mb3JfZWFjaChjdHgtPnRpbWVycywgcHJpbnRfdGltZXIsICh2b2lkICopY3R4KTsKKwl9CisKKwlyZXR1cm4gKDApOworfQorCitpbnQKK2V2Q29uZmlnVGltZXIoZXZDb250ZXh0IG9wYXF1ZUN0eCwKKwkgICAgIGV2VGltZXJJRCBpZCwKKwkgICAgIGNvbnN0IGNoYXIgKnBhcmFtLAorCSAgICAgaW50IHZhbHVlCispIHsKKwlldkNvbnRleHRfcCAqY3R4ID0gb3BhcXVlQ3R4Lm9wYXF1ZTsKKwlldlRpbWVyICp0aW1lciA9IGlkLm9wYXF1ZTsKKwlpbnQgcmVzdWx0PTA7CisKKwlVTlVTRUQodmFsdWUpOworCisJaWYgKGhlYXBfZWxlbWVudChjdHgtPnRpbWVycywgdGltZXItPmluZGV4KSAhPSB0aW1lcikKKwkJRVZfRVJSKEVOT0VOVCk7CisKKwlpZiAoc3RyY21wKHBhcmFtLCAicmF0ZSIpID09IDApCisJCXRpbWVyLT5tb2RlIHw9IEVWX1RNUl9SQVRFOworCWVsc2UgaWYgKHN0cmNtcChwYXJhbSwgImludGVydmFsIikgPT0gMCkKKwkJdGltZXItPm1vZGUgJj0gfkVWX1RNUl9SQVRFOworCWVsc2UKKwkJRVZfRVJSKEVJTlZBTCk7CisKKwlyZXR1cm4gKHJlc3VsdCk7Cit9CisKK2ludAorZXZSZXNldFRpbWVyKGV2Q29udGV4dCBvcGFxdWVDdHgsCisJICAgICBldlRpbWVySUQgaWQsCisJICAgICBldlRpbWVyRnVuYyBmdW5jLAorCSAgICAgdm9pZCAqdWFwLAorCSAgICAgc3RydWN0IHRpbWVzcGVjIGR1ZSwKKwkgICAgIHN0cnVjdCB0aW1lc3BlYyBpbnRlcgorKSB7CisJZXZDb250ZXh0X3AgKmN0eCA9IG9wYXF1ZUN0eC5vcGFxdWU7CisJZXZUaW1lciAqdGltZXIgPSBpZC5vcGFxdWU7CisJc3RydWN0IHRpbWVzcGVjIG9sZF9kdWU7CisJaW50IHJlc3VsdD0wOworCisJaWYgKGhlYXBfZWxlbWVudChjdHgtPnRpbWVycywgdGltZXItPmluZGV4KSAhPSB0aW1lcikKKwkJRVZfRVJSKEVOT0VOVCk7CisKKyNpZmRlZiBfX2hwdXgKKwkvKgorCSAqIHR2X3NlYyBhbmQgdHZfbnNlYyBhcmUgdW5zaWduZWQuCisJICovCisJaWYgKGR1ZS50dl9uc2VjID49IEJJTExJT04pCisJCUVWX0VSUihFSU5WQUwpOworCisJaWYgKGludGVyLnR2X25zZWMgPj0gQklMTElPTikKKwkJRVZfRVJSKEVJTlZBTCk7CisjZWxzZQorCWlmIChkdWUudHZfc2VjIDwgMCB8fCBkdWUudHZfbnNlYyA8IDAgfHwgZHVlLnR2X25zZWMgPj0gQklMTElPTikKKwkJRVZfRVJSKEVJTlZBTCk7CisKKwlpZiAoaW50ZXIudHZfc2VjIDwgMCB8fCBpbnRlci50dl9uc2VjIDwgMCB8fCBpbnRlci50dl9uc2VjID49IEJJTExJT04pCisJCUVWX0VSUihFSU5WQUwpOworI2VuZGlmCisKKwlvbGRfZHVlID0gdGltZXItPmR1ZTsKKworCXRpbWVyLT5mdW5jID0gZnVuYzsKKwl0aW1lci0+dWFwID0gdWFwOworCXRpbWVyLT5kdWUgPSBkdWU7CisJdGltZXItPmludGVyID0gaW50ZXI7CisKKwlzd2l0Y2ggKGV2Q21wVGltZShkdWUsIG9sZF9kdWUpKSB7CisJY2FzZSAtMToKKwkJcmVzdWx0ID0gaGVhcF9pbmNyZWFzZWQoY3R4LT50aW1lcnMsIHRpbWVyLT5pbmRleCk7CisJCWJyZWFrOworCWNhc2UgMDoKKwkJcmVzdWx0ID0gMDsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlyZXN1bHQgPSBoZWFwX2RlY3JlYXNlZChjdHgtPnRpbWVycywgdGltZXItPmluZGV4KTsKKwkJYnJlYWs7CisJfQorCisJaWYgKGN0eC0+ZGVidWcgPiA3KSB7CisJCWV2UHJpbnRmKGN0eCwgNywgInRpbWVycyBhZnRlciBldlJlc2V0VGltZXI6XG4iKTsKKwkJKHZvaWQpIGhlYXBfZm9yX2VhY2goY3R4LT50aW1lcnMsIHByaW50X3RpbWVyLCAodm9pZCAqKWN0eCk7CisJfQorCisJcmV0dXJuIChyZXN1bHQpOworfQorCitpbnQKK2V2U2V0SWRsZVRpbWVyKGV2Q29udGV4dCBvcGFxdWVDdHgsCisJCWV2VGltZXJGdW5jIGZ1bmMsCisJCXZvaWQgKnVhcCwKKwkJc3RydWN0IHRpbWVzcGVjIG1heF9pZGxlLAorCQlldlRpbWVySUQgKm9wYXF1ZUlECispIHsKKwlldkNvbnRleHRfcCAqY3R4ID0gb3BhcXVlQ3R4Lm9wYXF1ZTsKKwlpZGxlX3RpbWVyICp0dDsKKworCS8qIEFsbG9jYXRlIGFuZCBmaWxsLiAqLworCU9LTkVXKHR0KTsKKwl0dC0+ZnVuYyA9IGZ1bmM7CisJdHQtPnVhcCA9IHVhcDsKKwl0dC0+bGFzdFRvdWNoZWQgPSBjdHgtPmxhc3RFdmVudFRpbWU7CisJdHQtPm1heF9pZGxlID0gbWF4X2lkbGU7CisKKwlpZiAoZXZTZXRUaW1lcihvcGFxdWVDdHgsIGlkbGVfdGltZW91dCwgdHQsCisJCSAgICAgICBldkFkZFRpbWUoY3R4LT5sYXN0RXZlbnRUaW1lLCBtYXhfaWRsZSksCisJCSAgICAgICBtYXhfaWRsZSwgb3BhcXVlSUQpIDwgMCkgeworCQlGUkVFKHR0KTsKKwkJcmV0dXJuICgtMSk7CisJfQorCisJdHQtPnRpbWVyID0gb3BhcXVlSUQtPm9wYXF1ZTsKKworCXJldHVybiAoMCk7Cit9CisKK2ludAorZXZDbGVhcklkbGVUaW1lcihldkNvbnRleHQgb3BhcXVlQ3R4LCBldlRpbWVySUQgaWQpIHsKKwlldlRpbWVyICpkZWwgPSBpZC5vcGFxdWU7CisJaWRsZV90aW1lciAqdHQgPSBkZWwtPnVhcDsKKworCUZSRUUodHQpOworCXJldHVybiAoZXZDbGVhclRpbWVyKG9wYXF1ZUN0eCwgaWQpKTsKK30KKworaW50CitldlJlc2V0SWRsZVRpbWVyKGV2Q29udGV4dCBvcGFxdWVDdHgsCisJCSBldlRpbWVySUQgb3BhcXVlSUQsCisJCSBldlRpbWVyRnVuYyBmdW5jLAorCQkgdm9pZCAqdWFwLAorCQkgc3RydWN0IHRpbWVzcGVjIG1heF9pZGxlCispIHsKKwlldkNvbnRleHRfcCAqY3R4ID0gb3BhcXVlQ3R4Lm9wYXF1ZTsKKwlldlRpbWVyICp0aW1lciA9IG9wYXF1ZUlELm9wYXF1ZTsKKwlpZGxlX3RpbWVyICp0dCA9IHRpbWVyLT51YXA7CisKKwl0dC0+ZnVuYyA9IGZ1bmM7CisJdHQtPnVhcCA9IHVhcDsKKwl0dC0+bGFzdFRvdWNoZWQgPSBjdHgtPmxhc3RFdmVudFRpbWU7CisJdHQtPm1heF9pZGxlID0gbWF4X2lkbGU7CisKKwlyZXR1cm4gKGV2UmVzZXRUaW1lcihvcGFxdWVDdHgsIG9wYXF1ZUlELCBpZGxlX3RpbWVvdXQsIHR0LAorCQkJICAgICBldkFkZFRpbWUoY3R4LT5sYXN0RXZlbnRUaW1lLCBtYXhfaWRsZSksCisJCQkgICAgIG1heF9pZGxlKSk7Cit9CisKK2ludAorZXZUb3VjaElkbGVUaW1lcihldkNvbnRleHQgb3BhcXVlQ3R4LCBldlRpbWVySUQgaWQpIHsKKwlldkNvbnRleHRfcCAqY3R4ID0gb3BhcXVlQ3R4Lm9wYXF1ZTsKKwlldlRpbWVyICp0ID0gaWQub3BhcXVlOworCWlkbGVfdGltZXIgKnR0ID0gdC0+dWFwOworCisJdHQtPmxhc3RUb3VjaGVkID0gY3R4LT5sYXN0RXZlbnRUaW1lOworCisJcmV0dXJuICgwKTsKK30KKworLyogUHVibGljIHRvIHRoZSByZXN0IG9mIGV2ZW50bGliLiAqLworCitoZWFwX2NvbnRleHQKK2V2Q3JlYXRlVGltZXJzKGNvbnN0IGV2Q29udGV4dF9wICpjdHgpIHsKKworCVVOVVNFRChjdHgpOworCisJcmV0dXJuIChoZWFwX25ldyhkdWVfc29vbmVyLCBzZXRfaW5kZXgsIDIwNDgpKTsKK30KKwordm9pZAorZXZEZXN0cm95VGltZXJzKGNvbnN0IGV2Q29udGV4dF9wICpjdHgpIHsKKwkodm9pZCkgaGVhcF9mb3JfZWFjaChjdHgtPnRpbWVycywgZnJlZV90aW1lciwgTlVMTCk7CisJKHZvaWQpIGhlYXBfZnJlZShjdHgtPnRpbWVycyk7Cit9CisKKy8qIFByaXZhdGUuICovCisKK3N0YXRpYyBpbnQKK2R1ZV9zb29uZXIodm9pZCAqYSwgdm9pZCAqYikgeworCWV2VGltZXIgKmFfdGltZXIsICpiX3RpbWVyOworCisJYV90aW1lciA9IGE7CisJYl90aW1lciA9IGI7CisJcmV0dXJuIChldkNtcFRpbWUoYV90aW1lci0+ZHVlLCBiX3RpbWVyLT5kdWUpIDwgMCk7Cit9CisKK3N0YXRpYyB2b2lkCitzZXRfaW5kZXgodm9pZCAqd2hhdCwgaW50IGlkeCkgeworCWV2VGltZXIgKnRpbWVyOworCisJdGltZXIgPSB3aGF0OworCXRpbWVyLT5pbmRleCA9IGlkeDsKK30KKworc3RhdGljIHZvaWQKK2ZyZWVfdGltZXIodm9pZCAqd2hhdCwgdm9pZCAqdWFwKSB7CisJZXZUaW1lciAqdCA9IHdoYXQ7CisKKwlVTlVTRUQodWFwKTsKKworCUZSRUUodCk7Cit9CisKK3N0YXRpYyB2b2lkCitwcmludF90aW1lcih2b2lkICp3aGF0LCB2b2lkICp1YXApIHsKKwlldlRpbWVyICpjdXIgPSB3aGF0OworCWV2Q29udGV4dF9wICpjdHggPSB1YXA7CisKKwljdXIgPSB3aGF0OworCWV2UHJpbnRmKGN0eCwgNywKKwkgICAgIiAgZnVuYyAlcCwgdWFwICVwLCBkdWUgJWxkLiUwOWxkLCBpbnRlciAlbGQuJTA5bGRcbiIsCisJCSBjdXItPmZ1bmMsIGN1ci0+dWFwLAorCQkgKGxvbmcpY3VyLT5kdWUudHZfc2VjLCBjdXItPmR1ZS50dl9uc2VjLAorCQkgKGxvbmcpY3VyLT5pbnRlci50dl9zZWMsIGN1ci0+aW50ZXIudHZfbnNlYyk7Cit9CisKK3N0YXRpYyB2b2lkCitpZGxlX3RpbWVvdXQoZXZDb250ZXh0IG9wYXF1ZUN0eCwKKwkgICAgIHZvaWQgKnVhcCwKKwkgICAgIHN0cnVjdCB0aW1lc3BlYyBkdWUsCisJICAgICBzdHJ1Y3QgdGltZXNwZWMgaW50ZXIKKykgeworCWV2Q29udGV4dF9wICpjdHggPSBvcGFxdWVDdHgub3BhcXVlOworCWlkbGVfdGltZXIgKnRoaXMgPSB1YXA7CisJc3RydWN0IHRpbWVzcGVjIGlkbGU7CisKKwlVTlVTRUQoZHVlKTsKKwlVTlVTRUQoaW50ZXIpOworCQorCWlkbGUgPSBldlN1YlRpbWUoY3R4LT5sYXN0RXZlbnRUaW1lLCB0aGlzLT5sYXN0VG91Y2hlZCk7CisJaWYgKGV2Q21wVGltZShpZGxlLCB0aGlzLT5tYXhfaWRsZSkgPj0gMCkgeworCQkodGhpcy0+ZnVuYykob3BhcXVlQ3R4LCB0aGlzLT51YXAsIHRoaXMtPnRpbWVyLT5kdWUsCisJCQkgICAgIHRoaXMtPm1heF9pZGxlKTsKKwkJLyoKKwkJICogU2V0dGluZyB0aGUgaW50ZXJ2YWwgdG8gemVybyB3aWxsIGNhdXNlIHRoZSB0aW1lciB0bworCQkgKiBiZSBjbGVhbmVkIHVwIGluIGV2RHJvcCgpLgorCQkgKi8KKwkJdGhpcy0+dGltZXItPmludGVyID0gZXZDb25zVGltZSgwTCwgMEwpOworCQlGUkVFKHRoaXMpOworCX0gZWxzZSB7CisJCS8qIGV2RHJvcCgpIHdpbGwgcmVzY2hlZHVsZSB0aGUgdGltZXIuICovCisJCXRoaXMtPnRpbWVyLT5pbnRlciA9IGV2U3ViVGltZSh0aGlzLT5tYXhfaWRsZSwgaWRsZSk7CisJfQorfQorI2VuZGlmCisKKy8qISBcZmlsZSAqLwpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1uZXRic2QvbGliYy9pc2MvZXZlbnRsaWJfcC5oIGIvbGliYy91cHN0cmVhbS1uZXRic2QvbGliYy9pc2MvZXZlbnRsaWJfcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkNmI3ODgKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW5ldGJzZC9saWJjL2lzYy9ldmVudGxpYl9wLmgKQEAgLTAsMCArMSwyODMgQEAKKy8qCSROZXRCU0Q6IGV2ZW50bGliX3AuaCx2IDEuMyAyMDA5LzA0LzEyIDE3OjA3OjE3IGNocmlzdG9zIEV4cCAkCSovCisKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUgYnkgSW50ZXJuZXQgU3lzdGVtcyBDb25zb3J0aXVtLCBJbmMuICgiSVNDIikKKyAqIENvcHlyaWdodCAoYykgMTk5NS0xOTk5IGJ5IEludGVybmV0IFNvZnR3YXJlIENvbnNvcnRpdW0KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIElTQyBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKKyAqIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gIElOIE5PIEVWRU5UIFNIQUxMIElTQyBCRSBMSUFCTEUgRk9SCisgKiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisgKiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUCisgKiBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorICovCisKKy8qISBcZmlsZSAKKyAqIFxicmllZiBwcml2YXRlIGludGVyZmFjZXMgZm9yIGV2ZW50bGliCisgKiBcYXV0aG9yIHZpeCAwOXNlcDk1IFtpbml0aWFsXQorICoKKyAqIElkOiBldmVudGxpYl9wLmgsdiAxLjkgMjAwNi8wMy8wOSAyMzo1Nzo1NiBtYXJrYSBFeHAKKyAqLworCisjaWZuZGVmIF9FVkVOVExJQl9QX0gKKyNkZWZpbmUgX0VWRU5UTElCX1BfSAorCisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNpbmNsdWRlIDxzeXMvdW4uaD4KKworI2RlZmluZSBFVkVOVExJQl9ERUJVRyAxCisKKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgPGlzYy9oZWFwLmg+CisjaW5jbHVkZSA8aXNjL2xpc3QuaD4KKyNpbmNsdWRlIDxpc2MvbWVtY2x1c3Rlci5oPgorCisjZGVmaW5lCUVWX01BU0tfQUxMCShFVl9SRUFEIHwgRVZfV1JJVEUgfCBFVl9FWENFUFQpCisjZGVmaW5lIEVWX0VSUihlKQkJcmV0dXJuIChlcnJubyA9IChlKSwgLTEpCisjZGVmaW5lIE9LKHgpCQlpZiAoKHgpIDwgMCkgRVZfRVJSKGVycm5vKTsgZWxzZSAodm9pZClOVUxMCisjZGVmaW5lIE9LRlJFRSh4LCB5KQlpZiAoKHgpIDwgMCkgeyBGUkVFKCh5KSk7IEVWX0VSUihlcnJubyk7IH0gXAorCQkJZWxzZSAodm9pZClOVUxMCisKKyNkZWZpbmUJTkVXKHApCQlpZiAoKChwKSA9IG1lbWdldChzaXplb2YgKihwKSkpICE9IE5VTEwpIFwKKwkJCQlGSUxMKHApOyBcCisJCQllbHNlIFwKKwkJCQkodm9pZClOVUxMOworI2RlZmluZSBPS05FVyhwKQlpZiAoISgocCkgPSBtZW1nZXQoc2l6ZW9mICoocCkpKSkgeyBcCisJCQkJZXJybm8gPSBFTk9NRU07IFwKKwkJCQlyZXR1cm4gKC0xKTsgXAorCQkJfSBlbHNlIFwKKwkJCQlGSUxMKHApCisjZGVmaW5lIEZSRUUocCkJCW1lbXB1dCgocCksIHNpemVvZiAqKHApKQorCisjaWYgRVZFTlRMSUJfREVCVUcKKyNkZWZpbmUgRklMTChwKQkJbWVtc2V0KChwKSwgMHhGNSwgc2l6ZW9mICoocCkpCisjZWxzZQorI2RlZmluZSBGSUxMKHApCisjZW5kaWYKKworI2lmZGVmIFVTRV9QT0xMCisjaWZkZWYgSEFWRV9TVFJPUFRTX0gKKyNpbmNsdWRlIDxzdHJvcHRzLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxwb2xsLmg+CisjZW5kaWYgLyogVVNFX1BPTEwgKi8KKwordHlwZWRlZiBzdHJ1Y3QgZXZDb25uIHsKKwlldkNvbm5GdW5jCWZ1bmM7CisJdm9pZCAqCQl1YXA7CisJaW50CQlmZDsKKwlpbnQJCWZsYWdzOworI2RlZmluZSBFVl9DT05OX0xJU1RFTgkJMHgwMDAxCQkvKiU8IENvbm5lY3Rpb24gaXMgYSBsaXN0ZW5lci4gKi8KKyNkZWZpbmUgRVZfQ09OTl9TRUxFQ1RFRAkweDAwMDIJCS8qJTwgZXZTZWxlY3RGRChjb25uLT5maWxlKS4gKi8KKyNkZWZpbmUgRVZfQ09OTl9CTE9DSwkJMHgwMDA0CQkvKiU8IExpc3RlbmVyIGZkIHdhcyBibG9ja2luZy4gKi8KKwlldkZpbGVJRAlmaWxlOworCXN0cnVjdCBldkNvbm4gKglwcmV2OworCXN0cnVjdCBldkNvbm4gKgluZXh0OworfSBldkNvbm47CisKK3R5cGVkZWYgc3RydWN0IGV2QWNjZXB0IHsKKwlpbnQJCWZkOworCXVuaW9uIHsKKwkJc3RydWN0IHNvY2thZGRyCQlzYTsKKwkJc3RydWN0IHNvY2thZGRyX2luCWluOworI2lmbmRlZiBOT19TT0NLQUREUl9VTgorCQlzdHJ1Y3Qgc29ja2FkZHJfdW4JdW47CisjZW5kaWYKKwl9CQlsYTsKKwlJU0NfU09DS0xFTl9UCWxhbGVuOworCXVuaW9uIHsKKwkJc3RydWN0IHNvY2thZGRyCQlzYTsKKwkJc3RydWN0IHNvY2thZGRyX2luCWluOworI2lmbmRlZiBOT19TT0NLQUREUl9VTgorCQlzdHJ1Y3Qgc29ja2FkZHJfdW4JdW47CisjZW5kaWYKKwl9CQlyYTsKKwlJU0NfU09DS0xFTl9UCXJhbGVuOworCWludAkJaW9FcnJubzsKKwlldkNvbm4gKgljb25uOworCUxJTksoc3RydWN0IGV2QWNjZXB0KSBsaW5rOworfSBldkFjY2VwdDsKKwordHlwZWRlZiBzdHJ1Y3QgZXZGaWxlIHsKKwlldkZpbGVGdW5jCWZ1bmM7CisJdm9pZCAqCQl1YXA7CisJaW50CQlmZDsKKwlpbnQJCWV2ZW50bWFzazsKKwlpbnQJCXByZWVtcHRpdmU7CisJc3RydWN0IGV2RmlsZSAqCXByZXY7CisJc3RydWN0IGV2RmlsZSAqCW5leHQ7CisJc3RydWN0IGV2RmlsZSAqCWZkcHJldjsKKwlzdHJ1Y3QgZXZGaWxlICoJZmRuZXh0OworfSBldkZpbGU7CisKK3R5cGVkZWYgc3RydWN0IGV2U3RyZWFtIHsKKwlldlN0cmVhbUZ1bmMJZnVuYzsKKwl2b2lkICoJCXVhcDsKKwlldkZpbGVJRAlmaWxlOworCWV2VGltZXJJRAl0aW1lcjsKKwlpbnQJCWZsYWdzOworI2RlZmluZSBFVl9TVFJfVElNRVJPSwkweDAwMDEJLyolPCBJRkYgdGltZXIgdmFsaWQuICovCisJaW50CQlmZDsKKwlzdHJ1Y3QgaW92ZWMgKglpb3ZPcmlnOworCWludAkJaW92T3JpZ0NvdW50OworCXN0cnVjdCBpb3ZlYyAqCWlvdkN1cjsKKwlpbnQJCWlvdkN1ckNvdW50OworCWludAkJaW9Ub3RhbDsKKwlpbnQJCWlvRG9uZTsKKwlpbnQJCWlvRXJybm87CisJc3RydWN0IGV2U3RyZWFtCSpwcmV2RG9uZSwgKm5leHREb25lOworCXN0cnVjdCBldlN0cmVhbQkqcHJldiwgKm5leHQ7Cit9IGV2U3RyZWFtOworCit0eXBlZGVmIHN0cnVjdCBldlRpbWVyIHsKKwlldlRpbWVyRnVuYwlmdW5jOworCXZvaWQgKgkJdWFwOworCXN0cnVjdCB0aW1lc3BlYwlkdWUsIGludGVyOworCWludAkJaW5kZXg7CisJaW50CQltb2RlOworI2RlZmluZSBFVl9UTVJfUkFURQkxCit9IGV2VGltZXI7CisKK3R5cGVkZWYgc3RydWN0IGV2V2FpdCB7CisJZXZXYWl0RnVuYwlmdW5jOworCXZvaWQgKgkJdWFwOworCWNvbnN0IHZvaWQgKgl0YWc7CisJc3RydWN0IGV2V2FpdCAqCW5leHQ7Cit9IGV2V2FpdDsKKwordHlwZWRlZiBzdHJ1Y3QgZXZXYWl0TGlzdCB7CisJZXZXYWl0ICoJCWZpcnN0OworCWV2V2FpdCAqCQlsYXN0OworCXN0cnVjdCBldldhaXRMaXN0ICoJcHJldjsKKwlzdHJ1Y3QgZXZXYWl0TGlzdCAqCW5leHQ7Cit9IGV2V2FpdExpc3Q7CisKK3R5cGVkZWYgc3RydWN0IGV2RXZlbnRfcCB7CisJZW51bSB7ICBBY2NlcHQsIEZpbGUsIFN0cmVhbSwgVGltZXIsIFdhaXQsIEZyZWUsIE51bGwgIH0gdHlwZTsKKwl1bmlvbiB7CisJCXN0cnVjdCB7ICBldkFjY2VwdCAqdGhpczsgIH0JCQlhY2NlcHQ7CisJCXN0cnVjdCB7ICBldkZpbGUgKnRoaXM7IGludCBldmVudG1hc2s7ICB9CWZpbGU7CisJCXN0cnVjdCB7ICBldlN0cmVhbSAqdGhpczsgIH0JCQlzdHJlYW07CisJCXN0cnVjdCB7ICBldlRpbWVyICp0aGlzOyAgfQkJCXRpbWVyOworCQlzdHJ1Y3QgeyAgZXZXYWl0ICp0aGlzOyAgfQkJCXdhaXQ7CisJCXN0cnVjdCB7ICBzdHJ1Y3QgZXZFdmVudF9wICpuZXh0OyAgfQkJZnJlZTsKKwkJc3RydWN0IHsgIGNvbnN0IHZvaWQgKnBsYWNlaG9sZGVyOyAgfQkJbnVsbDsKKwl9IHU7Cit9IGV2RXZlbnRfcDsKKworI2lmZGVmIFVTRV9QT0xMCit0eXBlZGVmIHN0cnVjdCB7IAorCXZvaWQJCSpjdHg7CS8qIHBvaW50ZXIgdG8gdGhlIGV2Q29udGV4dF9wICAgKi8gCisJdWludDMyX3QJdHlwZTsJLyogUkVBRCwgV1JJVEUsIEVYQ0VQVCwgbm9uYmxrICAqLyAKKwl1aW50MzJfdAlyZXN1bHQ7CS8qIDEgPT4gcmV2ZW50cywgMCA9PiBldmVudHMgICAgKi8gCit9IF9fZXZFbXVsTWFzazsgCisKKyNkZWZpbmUgZW11bE1hc2tJbml0KGN0eCwgZmllbGQsIGV2LCBsYXN0bmV4dCkgXAorCWN0eC0+ZmllbGQuY3R4ID0gY3R4OyBcCisJY3R4LT5maWVsZC50eXBlID0gZXY7IFwKKwljdHgtPmZpZWxkLnJlc3VsdCA9IGxhc3RuZXh0OyAKKyAgCitleHRlcm4gc2hvcnQJKl9fZmRfZXZlbnRmaWVsZChpbnQgZmQsIF9fZXZFbXVsTWFzayAqbWFza3ApOyAKK2V4dGVybiBzaG9ydAlfX3BvbGxfZXZlbnQoX19ldkVtdWxNYXNrICptYXNrcCk7IAorZXh0ZXJuIHZvaWQJCV9fZmRfY2xyKGludCBmZCwgX19ldkVtdWxNYXNrICptYXNrcCk7IAorZXh0ZXJuIHZvaWQJCV9fZmRfc2V0KGludCBmZCwgX19ldkVtdWxNYXNrICptYXNrcCk7IAorCisjdW5kZWYgIEZEX1pFUk8gCisjZGVmaW5lIEZEX1pFUk8obWFza3ApIAorICAKKyN1bmRlZiAgRkRfU0VUIAorI2RlZmluZSBGRF9TRVQoZmQsIG1hc2twKSBcCisJX19mZF9zZXQoZmQsIG1hc2twKSAKKworI3VuZGVmICBGRF9DTFIgCisjZGVmaW5lIEZEX0NMUihmZCwgbWFza3ApIFwKKwlfX2ZkX2NscihmZCwgbWFza3ApIAorCisjdW5kZWYgIEZEX0lTU0VUIAorI2RlZmluZSBGRF9JU1NFVChmZCwgbWFza3ApIFwKKwkoKCpfX2ZkX2V2ZW50ZmllbGQoZmQsIG1hc2twKSAmIF9fcG9sbF9ldmVudChtYXNrcCkpICE9IDApIAorCisjZW5kaWYgLyogVVNFX1BPTEwgKi8KKwordHlwZWRlZiBzdHJ1Y3QgeworCS8qIEdsb2JhbC4gKi8KKwljb25zdCBldkV2ZW50X3AJKmN1cjsKKwkvKiBEZWJ1Z2dpbmcuICovCisJaW50CQlkZWJ1ZzsKKwlGSUxFCQkqb3V0cHV0OworCS8qIENvbm5lY3Rpb25zLiAqLworCWV2Q29ubgkJKmNvbm5zOworCUxJU1QoZXZBY2NlcHQpCWFjY2VwdHM7CisJLyogRmlsZXMuICovCisJZXZGaWxlCQkqZmlsZXMsICpmZE5leHQ7CisjaWZuZGVmIFVTRV9QT0xMCisJZmRfc2V0CQlyZExhc3QsIHJkTmV4dDsKKwlmZF9zZXQJCXdyTGFzdCwgd3JOZXh0OworCWZkX3NldAkJZXhMYXN0LCBleE5leHQ7CisJZmRfc2V0CQlub25ibG9ja0JlZm9yZTsKKwlpbnQJCWZkTWF4LCBmZENvdW50LCBoaWdoZXN0RkQ7CisJZXZGaWxlCQkqZmRUYWJsZVtGRF9TRVRTSVpFXTsKKyNlbHNlCisJc3RydWN0IHBvbGxmZAkqcG9sbGZkczsJLyogQWxsb2NhdGVkIGFzIG5lZWRlZCAgKi8gCisJZXZGaWxlCQkqKmZkVGFibGU7CS8qIERpdHRvICAgICAgICAgICAgICAgICovIAorCWludAkJbWF4bmZkczsJLyogIyBlbGVtZW50cyBpbiBhYm92ZSAgKi8gCisJaW50CQlmaXJzdGZkOwkvKiBGaXJzdCBhY3RpdmUgZmQgICAgICAqLyAKKwlpbnQJCWZkTWF4OwkJLyogTGFzdCBhY3RpdmUgZmQgICAgICAgKi8gCisJaW50CQlmZENvdW50OwkvKiAjIGZkOnMgd2l0aCBJL08gICAgICAqLyAKKwlpbnQJCWhpZ2hlc3RGRDsJLyogbWF4IGZkIGFsbG93ZWQgYnkgT1MgKi8gCisJX19ldkVtdWxNYXNrCXJkTGFzdCwgcmROZXh0OyAKKwlfX2V2RW11bE1hc2sJd3JMYXN0LCB3ck5leHQ7IAorCV9fZXZFbXVsTWFzawlleExhc3QsIGV4TmV4dDsgCisJX19ldkVtdWxNYXNrCW5vbmJsb2NrQmVmb3JlOyAKKyNlbmRpZiAvKiBVU0VfUE9MTCAqLworI2lmZGVmIEVWRU5UTElCX1RJTUVfQ0hFQ0tTCisJc3RydWN0IHRpbWVzcGVjCWxhc3RTZWxlY3RUaW1lOworCWludAkJbGFzdEZkQ291bnQ7CisjZW5kaWYKKwkvKiBTdHJlYW1zLiAqLworCWV2U3RyZWFtCSpzdHJlYW1zOworCWV2U3RyZWFtCSpzdHJEb25lLCAqc3RyTGFzdDsKKwkvKiBUaW1lcnMuICovCisJc3RydWN0IHRpbWVzcGVjCWxhc3RFdmVudFRpbWU7CisJaGVhcF9jb250ZXh0CXRpbWVyczsKKwkvKiBXYWl0cy4gKi8KKwlldldhaXRMaXN0CSp3YWl0TGlzdHM7CisJZXZXYWl0TGlzdAl3YWl0RG9uZTsKK30gZXZDb250ZXh0X3A7CisKKy8qIGV2ZW50bGliLmMgKi8KKyNkZWZpbmUgZXZQcmludGYgX19ldlByaW50Zgordm9pZCBldlByaW50Zihjb25zdCBldkNvbnRleHRfcCAqY3R4LCBpbnQgbGV2ZWwsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQorICAgICBJU0NfRk9STUFUX1BSSU5URigzLCA0KTsKKworI2lmZGVmIFVTRV9QT0xMCitleHRlcm4gaW50IGV2UG9sbGZkUmVhbGxvYyhldkNvbnRleHRfcCAqY3R4LCBpbnQgcG9sbGZkX2NodW5rX3NpemUsIGludCBmZCk7CisjZW5kaWYgLyogVVNFX1BPTEwgKi8KKworLyogZXZfdGltZXJzLmMgKi8KKyNkZWZpbmUgZXZDcmVhdGVUaW1lcnMgX19ldkNyZWF0ZVRpbWVycworaGVhcF9jb250ZXh0IGV2Q3JlYXRlVGltZXJzKGNvbnN0IGV2Q29udGV4dF9wICopOworI2RlZmluZSBldkRlc3Ryb3lUaW1lcnMgX19ldkRlc3Ryb3lUaW1lcnMKK3ZvaWQgZXZEZXN0cm95VGltZXJzKGNvbnN0IGV2Q29udGV4dF9wICopOworCisvKiBldl93YWl0cy5jICovCisjZGVmaW5lIGV2RnJlZVdhaXQgX19ldkZyZWVXYWl0CitldldhaXQgKmV2RnJlZVdhaXQoZXZDb250ZXh0X3AgKmN0eCwgZXZXYWl0ICpvbGQpOworCisvKiBHbG9iYWwgb3B0aW9ucyAqLworZXh0ZXJuIGludAlfX2V2T3B0TW9ub1RpbWU7CisKKyNlbmRpZiAvKl9FVkVOVExJQl9QX0gqLwpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1uZXRic2QvbGliYy9yZWdleC9jY2xhc3MuaCBiL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYmMvcmVnZXgvY2NsYXNzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2FiMmNjYgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYmMvcmVnZXgvY2NsYXNzLmgKQEAgLTAsMCArMSwxMDQgQEAKKy8qCSROZXRCU0Q6IGNjbGFzcy5oLHYgMS43IDIwMDMvMDgvMDcgMTY6NDM6MTkgYWdjIEV4cCAkCSovCisKKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkyLCAxOTkzLCAxOTk0CisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5CisgKiBIZW5yeSBTcGVuY2VyLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKglAKCMpY2NsYXNzLmgJOC4zIChCZXJrZWxleSkgMy8yMC85NAorICovCisKKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkyLCAxOTkzLCAxOTk0IEhlbnJ5IFNwZW5jZXIuCisgKgorICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQorICogSGVucnkgU3BlbmNlci4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQorICogICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgorICoJVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgVW5pdmVyc2l0eSBvZgorICoJQ2FsaWZvcm5pYSwgQmVya2VsZXkgYW5kIGl0cyBjb250cmlidXRvcnMuCisgKiA0LiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqCUAoIyljY2xhc3MuaAk4LjMgKEJlcmtlbGV5KSAzLzIwLzk0CisgKi8KKworLyogY2hhcmFjdGVyLWNsYXNzIHRhYmxlICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGNjbGFzcyB7CisJY29uc3QgY2hhciAqbmFtZTsKKwljb25zdCBjaGFyICpjaGFyczsKKwljb25zdCBjaGFyICptdWx0aXM7Cit9IGNjbGFzc2VzW10gPSB7CisJeyAiYWxudW0iLAkiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5elwKKzAxMjM0NTY3ODkiLAkJCQkiIiB9LAorCXsgImFscGhhIiwJIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoiLAorCQkJCQkiIiB9LAorCXsgImJsYW5rIiwJIiBcdCIsCQkiIiB9LAorCXsgImNudHJsIiwJIlwwMDdcYlx0XG5cdlxmXHJcMVwyXDNcNFw1XDZcMTZcMTdcMjBcMjFcMjJcMjNcMjRcCitcMjVcMjZcMjdcMzBcMzFcMzJcMzNcMzRcMzVcMzZcMzdcMTc3IiwJIiIgfSwKKwl7ICJkaWdpdCIsCSIwMTIzNDU2Nzg5IiwJIiIgfSwKKwl7ICJncmFwaCIsCSJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6XAorMDEyMzQ1Njc4OSFcIiMkJSYnKCkqKywtLi86Ozw9Pj9AW1xcXV5fYHt8fX4iLAorCQkJCQkiIiB9LAorCXsgImxvd2VyIiwJImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6IiwKKwkJCQkJIiIgfSwKKwl7ICJwcmludCIsCSJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6XAorMDEyMzQ1Njc4OSFcIiMkJSYnKCkqKywtLi86Ozw9Pj9AW1xcXV5fYHt8fX4gIiwKKwkJCQkJIiIgfSwKKwl7ICJwdW5jdCIsCSIhXCIjJCUmJygpKissLS4vOjs8PT4/QFtcXF1eX2B7fH1+IiwKKwkJCQkJIiIgfSwKKwl7ICJzcGFjZSIsCSJcdFxuXHZcZlxyICIsCSIiIH0sCisJeyAidXBwZXIiLAkiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoiLAorCQkJCQkiIiB9LAorCXsgInhkaWdpdCIsCSIwMTIzNDU2Nzg5QUJDREVGYWJjZGVmIiwKKwkJCQkJIiIgfSwKKwl7IE5VTEwsCQkwLAkJIiIgfQorfTsKZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYmMvcmVnZXgvY25hbWUuaCBiL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYmMvcmVnZXgvY25hbWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YjllZjM5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1uZXRic2QvbGliYy9yZWdleC9jbmFtZS5oCkBAIC0wLDAgKzEsMTc1IEBACisvKgkkTmV0QlNEOiBjbmFtZS5oLHYgMS43IDIwMDMvMDgvMDcgMTY6NDM6MTkgYWdjIEV4cCAkCSovCisKKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkyLCAxOTkzLCAxOTk0CisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5CisgKiBIZW5yeSBTcGVuY2VyLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKglAKCMpY25hbWUuaAk4LjMgKEJlcmtlbGV5KSAzLzIwLzk0CisgKi8KKworLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTIsIDE5OTMsIDE5OTQgSGVucnkgU3BlbmNlci4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5CisgKiBIZW5yeSBTcGVuY2VyLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCisgKiAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6CisgKglUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBVbml2ZXJzaXR5IG9mCisgKglDYWxpZm9ybmlhLCBCZXJrZWxleSBhbmQgaXRzIGNvbnRyaWJ1dG9ycy4KKyAqIDQuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKgorICoJQCgjKWNuYW1lLmgJOC4zIChCZXJrZWxleSkgMy8yMC85NAorICovCisKKy8qIGNoYXJhY3Rlci1uYW1lIHRhYmxlICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGNuYW1lIHsKKwljb25zdCBjaGFyICpuYW1lOworCWNoYXIgY29kZTsKK30gY25hbWVzW10gPSB7CisJeyAiTlVMIiwJCQknXDAnIH0sCisJeyAiU09IIiwJCQknXDAwMScgfSwKKwl7ICJTVFgiLAkJCSdcMDAyJyB9LAorCXsgIkVUWCIsCQkJJ1wwMDMnIH0sCisJeyAiRU9UIiwJCQknXDAwNCcgfSwKKwl7ICJFTlEiLAkJCSdcMDA1JyB9LAorCXsgIkFDSyIsCQkJJ1wwMDYnIH0sCisJeyAiQkVMIiwJCQknXDAwNycgfSwKKwl7ICJhbGVydCIsCQkJJ1wwMDcnIH0sCisJeyAiQlMiLAkJCQknXDAxMCcgfSwKKwl7ICJiYWNrc3BhY2UiLAkJCSdcYicgfSwKKwl7ICJIVCIsCQkJCSdcMDExJyB9LAorCXsgInRhYiIsCQkJJ1x0JyB9LAorCXsgIkxGIiwJCQkJJ1wwMTInIH0sCisJeyAibmV3bGluZSIsCQkJJ1xuJyB9LAorCXsgIlZUIiwJCQkJJ1wwMTMnIH0sCisJeyAidmVydGljYWwtdGFiIiwJCSdcdicgfSwKKwl7ICJGRiIsCQkJCSdcMDE0JyB9LAorCXsgImZvcm0tZmVlZCIsCQkJJ1xmJyB9LAorCXsgIkNSIiwJCQkJJ1wwMTUnIH0sCisJeyAiY2FycmlhZ2UtcmV0dXJuIiwJCSdccicgfSwKKwl7ICJTTyIsCQkJCSdcMDE2JyB9LAorCXsgIlNJIiwJCQkJJ1wwMTcnIH0sCisJeyAiRExFIiwJCQknXDAyMCcgfSwKKwl7ICJEQzEiLAkJCSdcMDIxJyB9LAorCXsgIkRDMiIsCQkJJ1wwMjInIH0sCisJeyAiREMzIiwJCQknXDAyMycgfSwKKwl7ICJEQzQiLAkJCSdcMDI0JyB9LAorCXsgIk5BSyIsCQkJJ1wwMjUnIH0sCisJeyAiU1lOIiwJCQknXDAyNicgfSwKKwl7ICJFVEIiLAkJCSdcMDI3JyB9LAorCXsgIkNBTiIsCQkJJ1wwMzAnIH0sCisJeyAiRU0iLAkJCQknXDAzMScgfSwKKwl7ICJTVUIiLAkJCSdcMDMyJyB9LAorCXsgIkVTQyIsCQkJJ1wwMzMnIH0sCisJeyAiSVM0IiwJCQknXDAzNCcgfSwKKwl7ICJGUyIsCQkJCSdcMDM0JyB9LAorCXsgIklTMyIsCQkJJ1wwMzUnIH0sCisJeyAiR1MiLAkJCQknXDAzNScgfSwKKwl7ICJJUzIiLAkJCSdcMDM2JyB9LAorCXsgIlJTIiwJCQkJJ1wwMzYnIH0sCisJeyAiSVMxIiwJCQknXDAzNycgfSwKKwl7ICJVUyIsCQkJCSdcMDM3JyB9LAorCXsgInNwYWNlIiwJCQknICcgfSwKKwl7ICJleGNsYW1hdGlvbi1tYXJrIiwJCSchJyB9LAorCXsgInF1b3RhdGlvbi1tYXJrIiwJCSciJyB9LAorCXsgIm51bWJlci1zaWduIiwJCScjJyB9LAorCXsgImRvbGxhci1zaWduIiwJCSckJyB9LAorCXsgInBlcmNlbnQtc2lnbiIsCQknJScgfSwKKwl7ICJhbXBlcnNhbmQiLAkJCScmJyB9LAorCXsgImFwb3N0cm9waGUiLAkJCSdcJycgfSwKKwl7ICJsZWZ0LXBhcmVudGhlc2lzIiwJCScoJyB9LAorCXsgInJpZ2h0LXBhcmVudGhlc2lzIiwJCScpJyB9LAorCXsgImFzdGVyaXNrIiwJCQknKicgfSwKKwl7ICJwbHVzLXNpZ24iLAkJCScrJyB9LAorCXsgImNvbW1hIiwJCQknLCcgfSwKKwl7ICJoeXBoZW4iLAkJCSctJyB9LAorCXsgImh5cGhlbi1taW51cyIsCQknLScgfSwKKwl7ICJwZXJpb2QiLAkJCScuJyB9LAorCXsgImZ1bGwtc3RvcCIsCQkJJy4nIH0sCisJeyAic2xhc2giLAkJCScvJyB9LAorCXsgInNvbGlkdXMiLAkJCScvJyB9LAorCXsgInplcm8iLAkJCScwJyB9LAorCXsgIm9uZSIsCQkJJzEnIH0sCisJeyAidHdvIiwJCQknMicgfSwKKwl7ICJ0aHJlZSIsCQkJJzMnIH0sCisJeyAiZm91ciIsCQkJJzQnIH0sCisJeyAiZml2ZSIsCQkJJzUnIH0sCisJeyAic2l4IiwJCQknNicgfSwKKwl7ICJzZXZlbiIsCQkJJzcnIH0sCisJeyAiZWlnaHQiLAkJCSc4JyB9LAorCXsgIm5pbmUiLAkJCSc5JyB9LAorCXsgImNvbG9uIiwJCQknOicgfSwKKwl7ICJzZW1pY29sb24iLAkJCSc7JyB9LAorCXsgImxlc3MtdGhhbi1zaWduIiwJCSc8JyB9LAorCXsgImVxdWFscy1zaWduIiwJCSc9JyB9LAorCXsgImdyZWF0ZXItdGhhbi1zaWduIiwJCSc+JyB9LAorCXsgInF1ZXN0aW9uLW1hcmsiLAkJJz8nIH0sCisJeyAiY29tbWVyY2lhbC1hdCIsCQknQCcgfSwKKwl7ICJsZWZ0LXNxdWFyZS1icmFja2V0IiwJJ1snIH0sCisJeyAiYmFja3NsYXNoIiwJCQknXFwnIH0sCisJeyAicmV2ZXJzZS1zb2xpZHVzIiwJCSdcXCcgfSwKKwl7ICJyaWdodC1zcXVhcmUtYnJhY2tldCIsCSddJyB9LAorCXsgImNpcmN1bWZsZXgiLAkJCSdeJyB9LAorCXsgImNpcmN1bWZsZXgtYWNjZW50IiwJCSdeJyB9LAorCXsgInVuZGVyc2NvcmUiLAkJCSdfJyB9LAorCXsgImxvdy1saW5lIiwJCQknXycgfSwKKwl7ICJncmF2ZS1hY2NlbnQiLAkJJ2AnIH0sCisJeyAibGVmdC1icmFjZSIsCQkJJ3snIH0sCisJeyAibGVmdC1jdXJseS1icmFja2V0IiwJCSd7JyB9LAorCXsgInZlcnRpY2FsLWxpbmUiLAkJJ3wnIH0sCisJeyAicmlnaHQtYnJhY2UiLAkJJ30nIH0sCisJeyAicmlnaHQtY3VybHktYnJhY2tldCIsCSd9JyB9LAorCXsgInRpbGRlIiwJCQknficgfSwKKwl7ICJERUwiLAkJCSdcMTc3JyB9LAorCXsgTlVMTCwJCQkJMCB9LAorfTsKZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYmMvcmVnZXgvZW5naW5lLmMgYi9saWJjL3Vwc3RyZWFtLW5ldGJzZC9saWJjL3JlZ2V4L2VuZ2luZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhODAwZDQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW5ldGJzZC9saWJjL3JlZ2V4L2VuZ2luZS5jCkBAIC0wLDAgKzEsMTE4OCBAQAorLyoJJE5ldEJTRDogZW5naW5lLmMsdiAxLjI0IDIwMTIvMDMvMTMgMjE6MTM6NDIgY2hyaXN0b3MgRXhwICQJKi8KKworLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTIsIDE5OTMsIDE5OTQKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKKyAqIEhlbnJ5IFNwZW5jZXIuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqCUAoIyllbmdpbmUuYwk4LjUgKEJlcmtlbGV5KSAzLzIwLzk0CisgKi8KKworLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTIsIDE5OTMsIDE5OTQgSGVucnkgU3BlbmNlci4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5CisgKiBIZW5yeSBTcGVuY2VyLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCisgKiAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6CisgKglUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBVbml2ZXJzaXR5IG9mCisgKglDYWxpZm9ybmlhLCBCZXJrZWxleSBhbmQgaXRzIGNvbnRyaWJ1dG9ycy4KKyAqIDQuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKgorICoJQCgjKWVuZ2luZS5jCTguNSAoQmVya2VsZXkpIDMvMjAvOTQKKyAqLworCisvKgorICogVGhlIG1hdGNoaW5nIGVuZ2luZSBhbmQgZnJpZW5kcy4gIFRoaXMgZmlsZSBpcyAjaW5jbHVkZWQgYnkgcmVnZXhlYy5jCisgKiBhZnRlciBzdWl0YWJsZSAjZGVmaW5lcyBvZiBhIHZhcmlldHkgb2YgbWFjcm9zIHVzZWQgaGVyZWluLCBzbyB0aGF0CisgKiBkaWZmZXJlbnQgc3RhdGUgcmVwcmVzZW50YXRpb25zIGNhbiBiZSB1c2VkIHdpdGhvdXQgZHVwbGljYXRpbmcgbWFzc2VzCisgKiBvZiBjb2RlLgorICovCisKKyNpZmRlZiBTTkFNRVMKKyNkZWZpbmUJbWF0Y2hlcglzbWF0Y2hlcgorI2RlZmluZQlmYXN0CXNmYXN0CisjZGVmaW5lCXNsb3cJc3Nsb3cKKyNkZWZpbmUJZGlzc2VjdAlzZGlzc2VjdAorI2RlZmluZQliYWNrcmVmCXNiYWNrcmVmCisjZGVmaW5lCXN0ZXAJc3N0ZXAKKyNkZWZpbmUJcHJpbnQJc3ByaW50CisjZGVmaW5lCWF0CXNhdAorI2RlZmluZQltYXRjaAlzbWF0CisjZGVmaW5lCW5vcGUJc25vcGUKKyNlbmRpZgorI2lmZGVmIExOQU1FUworI2RlZmluZQltYXRjaGVyCWxtYXRjaGVyCisjZGVmaW5lCWZhc3QJbGZhc3QKKyNkZWZpbmUJc2xvdwlsc2xvdworI2RlZmluZQlkaXNzZWN0CWxkaXNzZWN0CisjZGVmaW5lCWJhY2tyZWYJbGJhY2tyZWYKKyNkZWZpbmUJc3RlcAlsc3RlcAorI2RlZmluZQlwcmludAlscHJpbnQKKyNkZWZpbmUJYXQJbGF0CisjZGVmaW5lCW1hdGNoCWxtYXQKKyNkZWZpbmUJbm9wZQlsbm9wZQorI2VuZGlmCisKKy8qIGFub3RoZXIgc3RydWN0dXJlIHBhc3NlZCB1cCBhbmQgZG93biB0byBhdm9pZCB6aWxsaW9ucyBvZiBwYXJhbWV0ZXJzICovCitzdHJ1Y3QgbWF0Y2ggeworCXN0cnVjdCByZV9ndXRzICpnOworCWludCBlZmxhZ3M7CisJcmVnbWF0Y2hfdCAqcG1hdGNoOwkvKiBbbnN1YisxXSAoMCBlbGVtZW50IHVudXNlZCkgKi8KKwljb25zdCBjaGFyICpvZmZwOwkvKiBvZmZzZXRzIHdvcmsgZnJvbSBoZXJlICovCisJY29uc3QgY2hhciAqYmVnaW5wOwkvKiBzdGFydCBvZiBzdHJpbmcgLS0gdmlydHVhbCBOVUwgcHJlY2VkZXMgKi8KKwljb25zdCBjaGFyICplbmRwOwkvKiBlbmQgb2Ygc3RyaW5nIC0tIHZpcnR1YWwgTlVMIGhlcmUgKi8KKwljb25zdCBjaGFyICpjb2xkcDsJLyogY2FuIGJlIG5vIG1hdGNoIHN0YXJ0aW5nIGJlZm9yZSBoZXJlICovCisJY29uc3QgY2hhciAqKmxhc3Rwb3M7CS8qIFtucGx1cysxXSAqLworCVNUQVRFVkFSUzsKKwlzdGF0ZXMgc3Q7CQkvKiBjdXJyZW50IHN0YXRlcyAqLworCXN0YXRlcyBmcmVzaDsJCS8qIHN0YXRlcyBmb3IgYSBmcmVzaCBzdGFydCAqLworCXN0YXRlcyB0bXA7CQkvKiB0ZW1wb3JhcnkgKi8KKwlzdGF0ZXMgZW1wdHk7CQkvKiBlbXB0eSBzZXQgb2Ygc3RhdGVzICovCit9OworCisvKiA9PT09PT09PT0gYmVnaW4gaGVhZGVyIGdlbmVyYXRlZCBieSAuL21raCA9PT09PT09PT0gKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyogPT09IGVuZ2luZS5jID09PSAqLworc3RhdGljIGludCBtYXRjaGVyKHN0cnVjdCByZV9ndXRzICpnLCBjb25zdCBjaGFyICpzdHJpbmcsIHNpemVfdCBubWF0Y2gsIHJlZ21hdGNoX3QgcG1hdGNoW10sIGludCBlZmxhZ3MpOworc3RhdGljIGNvbnN0IGNoYXIgKmRpc3NlY3Qoc3RydWN0IG1hdGNoICptLCBjb25zdCBjaGFyICpzdGFydCwgY29uc3QgY2hhciAqc3RvcCwgc29wbm8gc3RhcnRzdCwgc29wbm8gc3RvcHN0KTsKK3N0YXRpYyBjb25zdCBjaGFyICpiYWNrcmVmKHN0cnVjdCBtYXRjaCAqbSwgY29uc3QgY2hhciAqc3RhcnQsIGNvbnN0IGNoYXIgKnN0b3AsIHNvcG5vIHN0YXJ0c3QsIHNvcG5vIHN0b3BzdCwgc29wbm8gbGV2KTsKK3N0YXRpYyBjb25zdCBjaGFyICpmYXN0KHN0cnVjdCBtYXRjaCAqbSwgY29uc3QgY2hhciAqc3RhcnQsIGNvbnN0IGNoYXIgKnN0b3AsIHNvcG5vIHN0YXJ0c3QsIHNvcG5vIHN0b3BzdCk7CitzdGF0aWMgY29uc3QgY2hhciAqc2xvdyhzdHJ1Y3QgbWF0Y2ggKm0sIGNvbnN0IGNoYXIgKnN0YXJ0LCBjb25zdCBjaGFyICpzdG9wLCBzb3BubyBzdGFydHN0LCBzb3BubyBzdG9wc3QpOworc3RhdGljIHN0YXRlcyBzdGVwKHN0cnVjdCByZV9ndXRzICpnLCBzb3BubyBzdGFydCwgc29wbm8gc3RvcCwgc3RhdGVzIGJlZiwgaW50IGNoLCBzdGF0ZXMgYWZ0KTsKKyNkZWZpbmUJQk9MCShPVVQrMSkKKyNkZWZpbmUJRU9MCShCT0wrMSkKKyNkZWZpbmUJQk9MRU9MCShCT0wrMikKKyNkZWZpbmUJTk9USElORwkoQk9MKzMpCisjZGVmaW5lCUJPVwkoQk9MKzQpCisjZGVmaW5lCUVPVwkoQk9MKzUpCisjZGVmaW5lCUNPREVNQVgJKEJPTCs1KQkJLyogaGlnaGVzdCBjb2RlIHVzZWQgKi8KKyNkZWZpbmUJTk9OQ0hBUihjKQkoKGMpID4gQ0hBUl9NQVgpCisjZGVmaW5lCU5OT05DSEFSCShDT0RFTUFYLUNIQVJfTUFYKQorI2lmZGVmIFJFREVCVUcKK3N0YXRpYyB2b2lkIHByaW50KHN0cnVjdCBtYXRjaCAqbSwgY2hhciAqY2FwdGlvbiwgc3RhdGVzIHN0LCBpbnQgY2gsIEZJTEUgKmQpOworI2VuZGlmCisjaWZkZWYgUkVERUJVRworc3RhdGljIHZvaWQgYXQoc3RydWN0IG1hdGNoICptLCBjaGFyICp0aXRsZSwgY2hhciAqc3RhcnQsIGNoYXIgKnN0b3AsIHNvcG5vIHN0YXJ0c3QsIHNvcG5vIHN0b3BzdCk7CisjZW5kaWYKKyNpZmRlZiBSRURFQlVHCitzdGF0aWMgY2hhciAqcGNoYXIoaW50IGNoKTsKKyNlbmRpZgorCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorLyogPT09PT09PT09IGVuZCBoZWFkZXIgZ2VuZXJhdGVkIGJ5IC4vbWtoID09PT09PT09PSAqLworCisjaWZkZWYgUkVERUJVRworI2RlZmluZQlTUCh0LCBzLCBjKQlwcmludChtLCB0LCBzLCBjLCBzdGRvdXQpCisjZGVmaW5lCUFUKHQsIHAxLCBwMiwgczEsIHMyKQlhdChtLCB0LCBwMSwgcDIsIHMxLCBzMikKKyNkZWZpbmUJTk9URShzdHIpCXsgaWYgKG0tPmVmbGFncyZSRUdfVFJBQ0UpIHByaW50ZigiPSVzXG4iLCAoc3RyKSk7IH0KK3N0YXRpYyBpbnQgbm9wZSA9IDA7CisjZWxzZQorI2RlZmluZQlTUCh0LCBzLCBjKQkvKiBub3RoaW5nICovCisjZGVmaW5lCUFUKHQsIHAxLCBwMiwgczEsIHMyKQkvKiBub3RoaW5nICovCisjZGVmaW5lCU5PVEUocykJLyogbm90aGluZyAqLworI2VuZGlmCisKKy8qCisgLSBtYXRjaGVyIC0gdGhlIGFjdHVhbCBtYXRjaGluZyBlbmdpbmUKKyA9PSBzdGF0aWMgaW50IG1hdGNoZXIoc3RydWN0IHJlX2d1dHMgKmcsIGNoYXIgKnN0cmluZywgXAorID09CXNpemVfdCBubWF0Y2gsIHJlZ21hdGNoX3QgcG1hdGNoW10sIGludCBlZmxhZ3MpOworICovCitzdGF0aWMgaW50CQkJLyogMCBzdWNjZXNzLCBSRUdfTk9NQVRDSCBmYWlsdXJlICovCittYXRjaGVyKAorICAgIHN0cnVjdCByZV9ndXRzICpnLAorICAgIGNvbnN0IGNoYXIgKnN0cmluZywKKyAgICBzaXplX3Qgbm1hdGNoLAorICAgIHJlZ21hdGNoX3QgcG1hdGNoW10sCisgICAgaW50IGVmbGFncykKK3sKKwljb25zdCBjaGFyICplbmRwOworCXNpemVfdCBpOworCXN0cnVjdCBtYXRjaCBtdjsKKwlzdHJ1Y3QgbWF0Y2ggKm0gPSAmbXY7CisJY29uc3QgY2hhciAqZHA7CisJY29uc3Qgc29wbm8gZ2YgPSBnLT5maXJzdHN0YXRlKzE7CS8qICsxIGZvciBPRU5EICovCisJY29uc3Qgc29wbm8gZ2wgPSBnLT5sYXN0c3RhdGU7CisJY29uc3QgY2hhciAqc3RhcnQ7CisJY29uc3QgY2hhciAqc3RvcDsKKwlpbnQgZXJyb3IgPSAwOworCisJX0RJQUdBU1NFUlQoZyAhPSBOVUxMKTsKKwlfRElBR0FTU0VSVChzdHJpbmcgIT0gTlVMTCk7CisJLyogcG1hdGNoIGNoZWNrZWQgYmVsb3cgKi8KKworCS8qIHNpbXBsaWZ5IHRoZSBzaXR1YXRpb24gd2hlcmUgcG9zc2libGUgKi8KKwlpZiAoZy0+Y2ZsYWdzJlJFR19OT1NVQikKKwkJbm1hdGNoID0gMDsKKwlpZiAoZWZsYWdzJlJFR19TVEFSVEVORCkgeworCQlfRElBR0FTU0VSVChwbWF0Y2ggIT0gTlVMTCk7CisJCXN0YXJ0ID0gc3RyaW5nICsgKHNpemVfdClwbWF0Y2hbMF0ucm1fc287CisJCXN0b3AgPSBzdHJpbmcgKyAoc2l6ZV90KXBtYXRjaFswXS5ybV9lbzsKKwl9IGVsc2UgeworCQlzdGFydCA9IHN0cmluZzsKKwkJc3RvcCA9IHN0YXJ0ICsgc3RybGVuKHN0YXJ0KTsKKwl9CisJaWYgKHN0b3AgPCBzdGFydCkKKwkJcmV0dXJuKFJFR19JTlZBUkcpOworCisJLyogcHJlc2NyZWVuaW5nOyB0aGlzIGRvZXMgd29uZGVycyBmb3IgdGhpcyByYXRoZXIgc2xvdyBjb2RlICovCisJaWYgKGctPm11c3QgIT0gTlVMTCkgeworCQlmb3IgKGRwID0gc3RhcnQ7IGRwIDwgc3RvcDsgZHArKykKKwkJCWlmICgqZHAgPT0gZy0+bXVzdFswXSAmJiAoc2l6ZV90KShzdG9wIC0gZHApID49IGctPm1sZW4gJiYKKwkJCQltZW1jbXAoZHAsIGctPm11c3QsIGctPm1sZW4pID09IDApCisJCQkJYnJlYWs7CisJCWlmIChkcCA9PSBzdG9wKQkJLyogd2UgZGlkbid0IGZpbmQgZy0+bXVzdCAqLworCQkJcmV0dXJuKFJFR19OT01BVENIKTsKKwl9CisKKwkvKiBtYXRjaCBzdHJ1Y3Qgc2V0dXAgKi8KKwltLT5nID0gZzsKKwltLT5lZmxhZ3MgPSBlZmxhZ3M7CisJbS0+cG1hdGNoID0gTlVMTDsKKwltLT5sYXN0cG9zID0gTlVMTDsKKwltLT5vZmZwID0gc3RyaW5nOworCW0tPmJlZ2lucCA9IHN0YXJ0OworCW0tPmVuZHAgPSBzdG9wOworCVNUQVRFU0VUVVAobSwgNCk7CisJU0VUVVAobS0+c3QpOworCVNFVFVQKG0tPmZyZXNoKTsKKwlTRVRVUChtLT50bXApOworCVNFVFVQKG0tPmVtcHR5KTsKKwlDTEVBUihtLT5lbXB0eSk7CisKKwkvKiB0aGlzIGxvb3AgZG9lcyBvbmx5IG9uZSByZXBldGl0aW9uIGV4Y2VwdCBmb3IgYmFja3JlZnMgKi8KKwlmb3IgKDs7KSB7CisJCWVuZHAgPSBmYXN0KG0sIHN0YXJ0LCBzdG9wLCBnZiwgZ2wpOworCQlpZiAoZW5kcCA9PSBOVUxMKSB7CQkvKiBhIG1pc3MgKi8KKwkJCWVycm9yID0gUkVHX05PTUFUQ0g7CisJCQlnb3RvIGRvbmU7CisJCX0KKwkJaWYgKG5tYXRjaCA9PSAwICYmICFnLT5iYWNrcmVmcykKKwkJCWJyZWFrOwkJLyogbm8gZnVydGhlciBpbmZvIG5lZWRlZCAqLworCisJCS8qIHdoZXJlPyAqLworCQlhc3NlcnQobS0+Y29sZHAgIT0gTlVMTCk7CisJCWZvciAoOzspIHsKKwkJCU5PVEUoImZpbmRpbmcgc3RhcnQiKTsKKwkJCWVuZHAgPSBzbG93KG0sIG0tPmNvbGRwLCBzdG9wLCBnZiwgZ2wpOworCQkJaWYgKGVuZHAgIT0gTlVMTCkKKwkJCQlicmVhazsKKwkJCWFzc2VydChtLT5jb2xkcCA8IG0tPmVuZHApOworCQkJbS0+Y29sZHArKzsKKwkJfQorCQlpZiAobm1hdGNoID09IDEgJiYgIWctPmJhY2tyZWZzKQorCQkJYnJlYWs7CQkvKiBubyBmdXJ0aGVyIGluZm8gbmVlZGVkICovCisKKwkJLyogb2ggbXksIGhlIHdhbnRzIHRoZSBzdWJleHByZXNzaW9ucy4uLiAqLworCQlpZiAobS0+cG1hdGNoID09IE5VTEwpCisJCQltLT5wbWF0Y2ggPSAocmVnbWF0Y2hfdCAqKW1hbGxvYygobS0+Zy0+bnN1YiArIDEpICoKKwkJCQkJCQlzaXplb2YocmVnbWF0Y2hfdCkpOworCQlpZiAobS0+cG1hdGNoID09IE5VTEwpIHsKKwkJCWVycm9yID0gUkVHX0VTUEFDRTsKKwkJCWdvdG8gZG9uZTsKKwkJfQorCQlmb3IgKGkgPSAxOyBpIDw9IG0tPmctPm5zdWI7IGkrKykKKwkJCW0tPnBtYXRjaFtpXS5ybV9zbyA9IG0tPnBtYXRjaFtpXS5ybV9lbyA9IChyZWdvZmZfdCktMTsKKwkJaWYgKCFnLT5iYWNrcmVmcyAmJiAhKG0tPmVmbGFncyZSRUdfQkFDS1IpKSB7CisJCQlOT1RFKCJkaXNzZWN0aW5nIik7CisJCQlkcCA9IGRpc3NlY3QobSwgbS0+Y29sZHAsIGVuZHAsIGdmLCBnbCk7CisJCX0gZWxzZSB7CisJCQlpZiAoZy0+bnBsdXMgPiAwICYmIG0tPmxhc3Rwb3MgPT0gTlVMTCkKKwkJCQltLT5sYXN0cG9zID0gbWFsbG9jKChnLT5ucGx1cysxKSAqCisJCQkJCQkJc2l6ZW9mKGNvbnN0IGNoYXIgKikpOworCQkJaWYgKGctPm5wbHVzID4gMCAmJiBtLT5sYXN0cG9zID09IE5VTEwpIHsKKwkJCQllcnJvciA9IFJFR19FU1BBQ0U7CisJCQkJZ290byBkb25lOworCQkJfQorCQkJTk9URSgiYmFja3JlZiBkaXNzZWN0Iik7CisJCQlkcCA9IGJhY2tyZWYobSwgbS0+Y29sZHAsIGVuZHAsIGdmLCBnbCwgKHNvcG5vKTApOworCQl9CisJCWlmIChkcCAhPSBOVUxMKQorCQkJYnJlYWs7CisKKwkJLyogdWgtb2guLi4gd2UgY291bGRuJ3QgZmluZCBhIHN1YmV4cHJlc3Npb24tbGV2ZWwgbWF0Y2ggKi8KKwkJYXNzZXJ0KGctPmJhY2tyZWZzKTsJLyogbXVzdCBiZSBiYWNrIHJlZmVyZW5jZXMgZG9pbmcgaXQgKi8KKwkJYXNzZXJ0KGctPm5wbHVzID09IDAgfHwgbS0+bGFzdHBvcyAhPSBOVUxMKTsKKwkJZm9yICg7OykgeworCQkJaWYgKGRwICE9IE5VTEwgfHwgZW5kcCA8PSBtLT5jb2xkcCkKKwkJCQlicmVhazsJCS8qIGRlZmVhdCAqLworCQkJTk9URSgiYmFja29mZiIpOworCQkJZW5kcCA9IHNsb3cobSwgbS0+Y29sZHAsIGVuZHAtMSwgZ2YsIGdsKTsKKwkJCWlmIChlbmRwID09IE5VTEwpCisJCQkJYnJlYWs7CQkvKiBkZWZlYXQgKi8KKwkJCS8qIHRyeSBpdCBvbiBhIHNob3J0ZXIgcG9zc2liaWxpdHkgKi8KKyNpZm5kZWYgTkRFQlVHCisJCQlmb3IgKGkgPSAxOyBpIDw9IG0tPmctPm5zdWI7IGkrKykgeworCQkJCWFzc2VydChtLT5wbWF0Y2hbaV0ucm1fc28gPT0gKHJlZ29mZl90KS0xKTsKKwkJCQlhc3NlcnQobS0+cG1hdGNoW2ldLnJtX2VvID09IChyZWdvZmZfdCktMSk7CisJCQl9CisjZW5kaWYKKwkJCU5PVEUoImJhY2tvZmYgZGlzc2VjdCIpOworCQkJZHAgPSBiYWNrcmVmKG0sIG0tPmNvbGRwLCBlbmRwLCBnZiwgZ2wsIChzb3BubykwKTsKKwkJfQorCQlhc3NlcnQoZHAgPT0gTlVMTCB8fCBkcCA9PSBlbmRwKTsKKwkJaWYgKGRwICE9IE5VTEwpCQkvKiBmb3VuZCBhIHNob3J0ZXIgb25lICovCisJCQlicmVhazsKKworCQkvKiBkZXNwaXRlIGluaXRpYWwgYXBwZWFyYW5jZXMsIHRoZXJlIGlzIG5vIG1hdGNoIGhlcmUgKi8KKwkJTk9URSgiZmFsc2UgYWxhcm0iKTsKKwkJc3RhcnQgPSBtLT5jb2xkcCArIDE7CS8qIHJlY3ljbGUgc3RhcnRpbmcgbGF0ZXIgKi8KKwkJYXNzZXJ0KHN0YXJ0IDw9IHN0b3ApOworCX0KKworCS8qIGZpbGwgaW4gdGhlIGRldGFpbHMgaWYgcmVxdWVzdGVkICovCisJaWYgKG5tYXRjaCA+IDApIHsKKwkJX0RJQUdBU1NFUlQocG1hdGNoICE9IE5VTEwpOworCQlwbWF0Y2hbMF0ucm1fc28gPSBtLT5jb2xkcCAtIG0tPm9mZnA7CisJCXBtYXRjaFswXS5ybV9lbyA9IGVuZHAgLSBtLT5vZmZwOworCX0KKwlpZiAobm1hdGNoID4gMSkgeworCQlhc3NlcnQobS0+cG1hdGNoICE9IE5VTEwpOworCQlmb3IgKGkgPSAxOyBpIDwgbm1hdGNoOyBpKyspCisJCQlpZiAoaSA8PSBtLT5nLT5uc3ViKQorCQkJCXBtYXRjaFtpXSA9IG0tPnBtYXRjaFtpXTsKKwkJCWVsc2UgeworCQkJCXBtYXRjaFtpXS5ybV9zbyA9IChyZWdvZmZfdCktMTsKKwkJCQlwbWF0Y2hbaV0ucm1fZW8gPSAocmVnb2ZmX3QpLTE7CisJCQl9CisJfQorCitkb25lOgorCWlmIChtLT5wbWF0Y2ggIT0gTlVMTCkgeworCQlmcmVlKG0tPnBtYXRjaCk7CisJCW0tPnBtYXRjaCA9IE5VTEw7CisJfQorCWlmIChtLT5sYXN0cG9zICE9IE5VTEwpIHsKKwkJZnJlZShtLT5sYXN0cG9zKTsKKwkJbS0+bGFzdHBvcyA9IE5VTEw7CisJfQorCVNUQVRFVEVBUkRPV04obSk7CisJcmV0dXJuIGVycm9yOworfQorCisvKgorIC0gZGlzc2VjdCAtIGZpZ3VyZSBvdXQgd2hhdCBtYXRjaGVkIHdoYXQsIG5vIGJhY2sgcmVmZXJlbmNlcworID09IHN0YXRpYyBjb25zdCBjaGFyICpkaXNzZWN0KHN0cnVjdCBtYXRjaCAqbSwgY29uc3QgY2hhciAqc3RhcnQsIFwKKyA9PQljb25zdCBjaGFyICpzdG9wLCBzb3BubyBzdGFydHN0LCBzb3BubyBzdG9wc3QpOworICovCitzdGF0aWMgY29uc3QgY2hhciAqCQkJLyogPT0gc3RvcCAoc3VjY2VzcykgYWx3YXlzICovCitkaXNzZWN0KAorICAgIHN0cnVjdCBtYXRjaCAqbSwKKyAgICBjb25zdCBjaGFyICpzdGFydCwKKyAgICBjb25zdCBjaGFyICpzdG9wLAorICAgIHNvcG5vIHN0YXJ0c3QsCisgICAgc29wbm8gc3RvcHN0KQoreworCWludCBpOworCXNvcG5vIHNzOwkvKiBzdGFydCBzb3Agb2YgY3VycmVudCBzdWJSRSAqLworCXNvcG5vIGVzOwkvKiBlbmQgc29wIG9mIGN1cnJlbnQgc3ViUkUgKi8KKwljb25zdCBjaGFyICpzcDsJLyogc3RhcnQgb2Ygc3RyaW5nIG1hdGNoZWQgYnkgaXQgKi8KKwljb25zdCBjaGFyICpzdHA7IC8qIHN0cmluZyBtYXRjaGVkIGJ5IGl0IGNhbm5vdCBwYXNzIGhlcmUgKi8KKwljb25zdCBjaGFyICpyZXN0OyAvKiBzdGFydCBvZiByZXN0IG9mIHN0cmluZyAqLworCWNvbnN0IGNoYXIgKnRhaWw7IC8qIHN0cmluZyB1bm1hdGNoZWQgYnkgcmVzdCBvZiBSRSAqLworCXNvcG5vIHNzdWI7CS8qIHN0YXJ0IHNvcCBvZiBzdWJzdWJSRSAqLworCXNvcG5vIGVzdWI7CS8qIGVuZCBzb3Agb2Ygc3Vic3ViUkUgKi8KKwljb25zdCBjaGFyICpzc3A7IC8qIHN0YXJ0IG9mIHN0cmluZyBtYXRjaGVkIGJ5IHN1YnN1YlJFICovCisJY29uc3QgY2hhciAqc2VwOyAvKiBlbmQgb2Ygc3RyaW5nIG1hdGNoZWQgYnkgc3Vic3ViUkUgKi8KKwljb25zdCBjaGFyICpvbGRzc3A7IC8qIHByZXZpb3VzIHNzcCAqLworI2lmbmRlZiBOREVCVUcKKwljb25zdCBjaGFyICpkcDsKKyNlbmRpZgorCisJX0RJQUdBU1NFUlQobSAhPSBOVUxMKTsKKwlfRElBR0FTU0VSVChzdGFydCAhPSBOVUxMKTsKKwlfRElBR0FTU0VSVChzdG9wICE9IE5VTEwpOworCisJQVQoImRpc3MiLCBzdGFydCwgc3RvcCwgc3RhcnRzdCwgc3RvcHN0KTsKKwlzcCA9IHN0YXJ0OworCWZvciAoc3MgPSBzdGFydHN0OyBzcyA8IHN0b3BzdDsgc3MgPSBlcykgeworCQkvKiBpZGVudGlmeSBlbmQgb2Ygc3ViUkUgKi8KKwkJZXMgPSBzczsKKwkJc3dpdGNoIChPUChtLT5nLT5zdHJpcFtlc10pKSB7CisJCWNhc2UgT1BMVVNfOgorCQljYXNlIE9RVUVTVF86CisJCQllcyArPSBPUE5EKG0tPmctPnN0cmlwW2VzXSk7CisJCQlicmVhazsKKwkJY2FzZSBPQ0hfOgorCQkJd2hpbGUgKE9QKG0tPmctPnN0cmlwW2VzXSkgIT0gT19DSCkKKwkJCQllcyArPSBPUE5EKG0tPmctPnN0cmlwW2VzXSk7CisJCQlicmVhazsKKwkJfQorCQllcysrOworCisJCS8qIGZpZ3VyZSBvdXQgd2hhdCBpdCBtYXRjaGVkICovCisJCXN3aXRjaCAoT1AobS0+Zy0+c3RyaXBbc3NdKSkgeworCQljYXNlIE9FTkQ6CisJCQlhc3NlcnQobm9wZSk7CisJCQlicmVhazsKKwkJY2FzZSBPQ0hBUjoKKwkJCXNwKys7CisJCQlicmVhazsKKwkJY2FzZSBPQk9MOgorCQljYXNlIE9FT0w6CisJCWNhc2UgT0JPVzoKKwkJY2FzZSBPRU9XOgorCQkJYnJlYWs7CisJCWNhc2UgT0FOWToKKwkJY2FzZSBPQU5ZT0Y6CisJCQlzcCsrOworCQkJYnJlYWs7CisJCWNhc2UgT0JBQ0tfOgorCQljYXNlIE9fQkFDSzoKKwkJCWFzc2VydChub3BlKTsKKwkJCWJyZWFrOworCQkvKiBjYXNlcyB3aGVyZSBsZW5ndGggb2YgbWF0Y2ggaXMgaGFyZCB0byBmaW5kICovCisJCWNhc2UgT1FVRVNUXzoKKwkJCXN0cCA9IHN0b3A7CisJCQlmb3IgKDs7KSB7CisJCQkJLyogaG93IGxvbmcgY291bGQgdGhpcyBvbmUgYmU/ICovCisJCQkJcmVzdCA9IHNsb3cobSwgc3AsIHN0cCwgc3MsIGVzKTsKKwkJCQlhc3NlcnQocmVzdCAhPSBOVUxMKTsJLyogaXQgZGlkIG1hdGNoICovCisJCQkJLyogY291bGQgdGhlIHJlc3QgbWF0Y2ggdGhlIHJlc3Q/ICovCisJCQkJdGFpbCA9IHNsb3cobSwgcmVzdCwgc3RvcCwgZXMsIHN0b3BzdCk7CisJCQkJaWYgKHRhaWwgPT0gc3RvcCkKKwkJCQkJYnJlYWs7CQkvKiB5ZXMhICovCisJCQkJLyogbm8gLS0gdHJ5IGEgc2hvcnRlciBtYXRjaCBmb3IgdGhpcyBvbmUgKi8KKwkJCQlzdHAgPSByZXN0IC0gMTsKKwkJCQlhc3NlcnQoc3RwID49IHNwKTsJLyogaXQgZGlkIHdvcmsgKi8KKwkJCX0KKwkJCXNzdWIgPSBzcyArIDE7CisJCQllc3ViID0gZXMgLSAxOworCQkJLyogZGlkIGlubmFyZHMgbWF0Y2g/ICovCisJCQlpZiAoc2xvdyhtLCBzcCwgcmVzdCwgc3N1YiwgZXN1YikgIT0gTlVMTCkgeworI2lmZGVmIE5ERUJVRworCQkJCSh2b2lkKQorI2Vsc2UKKwkJCQlkcCA9IAorI2VuZGlmCisJCQkJICAgIGRpc3NlY3QobSwgc3AsIHJlc3QsIHNzdWIsIGVzdWIpOworCQkJCWFzc2VydChkcCA9PSByZXN0KTsKKwkJCX0gZWxzZQkJLyogbm8gKi8KKwkJCQlhc3NlcnQoc3AgPT0gcmVzdCk7CisJCQlzcCA9IHJlc3Q7CisJCQlicmVhazsKKwkJY2FzZSBPUExVU186CisJCQlzdHAgPSBzdG9wOworCQkJZm9yICg7OykgeworCQkJCS8qIGhvdyBsb25nIGNvdWxkIHRoaXMgb25lIGJlPyAqLworCQkJCXJlc3QgPSBzbG93KG0sIHNwLCBzdHAsIHNzLCBlcyk7CisJCQkJYXNzZXJ0KHJlc3QgIT0gTlVMTCk7CS8qIGl0IGRpZCBtYXRjaCAqLworCQkJCS8qIGNvdWxkIHRoZSByZXN0IG1hdGNoIHRoZSByZXN0PyAqLworCQkJCXRhaWwgPSBzbG93KG0sIHJlc3QsIHN0b3AsIGVzLCBzdG9wc3QpOworCQkJCWlmICh0YWlsID09IHN0b3ApCisJCQkJCWJyZWFrOwkJLyogeWVzISAqLworCQkJCS8qIG5vIC0tIHRyeSBhIHNob3J0ZXIgbWF0Y2ggZm9yIHRoaXMgb25lICovCisJCQkJc3RwID0gcmVzdCAtIDE7CisJCQkJYXNzZXJ0KHN0cCA+PSBzcCk7CS8qIGl0IGRpZCB3b3JrICovCisJCQl9CisJCQlzc3ViID0gc3MgKyAxOworCQkJZXN1YiA9IGVzIC0gMTsKKwkJCXNzcCA9IHNwOworCQkJb2xkc3NwID0gc3NwOworCQkJZm9yICg7OykgewkvKiBmaW5kIGxhc3QgbWF0Y2ggb2YgaW5uYXJkcyAqLworCQkJCXNlcCA9IHNsb3cobSwgc3NwLCByZXN0LCBzc3ViLCBlc3ViKTsKKwkJCQlpZiAoc2VwID09IE5VTEwgfHwgc2VwID09IHNzcCkKKwkJCQkJYnJlYWs7CS8qIGZhaWxlZCBvciBtYXRjaGVkIG51bGwgKi8KKwkJCQlvbGRzc3AgPSBzc3A7CS8qIG9uIHRvIG5leHQgdHJ5ICovCisJCQkJc3NwID0gc2VwOworCQkJfQorCQkJaWYgKHNlcCA9PSBOVUxMKSB7CisJCQkJLyogbGFzdCBzdWNjZXNzZnVsIG1hdGNoICovCisJCQkJc2VwID0gc3NwOworCQkJCXNzcCA9IG9sZHNzcDsKKwkJCX0KKwkJCWFzc2VydChzZXAgPT0gcmVzdCk7CS8qIG11c3QgZXhoYXVzdCBzdWJzdHJpbmcgKi8KKwkJCWFzc2VydChzbG93KG0sIHNzcCwgc2VwLCBzc3ViLCBlc3ViKSA9PSByZXN0KTsKKyNpZmRlZiBOREVCVUcKKwkJCSh2b2lkKQorI2Vsc2UKKwkJCWRwID0KKyNlbmRpZgorCQkJICAgIGRpc3NlY3QobSwgc3NwLCBzZXAsIHNzdWIsIGVzdWIpOworCQkJYXNzZXJ0KGRwID09IHNlcCk7CisJCQlzcCA9IHJlc3Q7CisJCQlicmVhazsKKwkJY2FzZSBPQ0hfOgorCQkJc3RwID0gc3RvcDsKKwkJCWZvciAoOzspIHsKKwkJCQkvKiBob3cgbG9uZyBjb3VsZCB0aGlzIG9uZSBiZT8gKi8KKwkJCQlyZXN0ID0gc2xvdyhtLCBzcCwgc3RwLCBzcywgZXMpOworCQkJCWFzc2VydChyZXN0ICE9IE5VTEwpOwkvKiBpdCBkaWQgbWF0Y2ggKi8KKwkJCQkvKiBjb3VsZCB0aGUgcmVzdCBtYXRjaCB0aGUgcmVzdD8gKi8KKwkJCQl0YWlsID0gc2xvdyhtLCByZXN0LCBzdG9wLCBlcywgc3RvcHN0KTsKKwkJCQlpZiAodGFpbCA9PSBzdG9wKQorCQkJCQlicmVhazsJCS8qIHllcyEgKi8KKwkJCQkvKiBubyAtLSB0cnkgYSBzaG9ydGVyIG1hdGNoIGZvciB0aGlzIG9uZSAqLworCQkJCXN0cCA9IHJlc3QgLSAxOworCQkJCWFzc2VydChzdHAgPj0gc3ApOwkvKiBpdCBkaWQgd29yayAqLworCQkJfQorCQkJc3N1YiA9IHNzICsgMTsKKwkJCWVzdWIgPSBzcyArIE9QTkQobS0+Zy0+c3RyaXBbc3NdKSAtIDE7CisJCQlhc3NlcnQoT1AobS0+Zy0+c3RyaXBbZXN1Yl0pID09IE9PUjEpOworCQkJZm9yICg7OykgewkvKiBmaW5kIGZpcnN0IG1hdGNoaW5nIGJyYW5jaCAqLworCQkJCWlmIChzbG93KG0sIHNwLCByZXN0LCBzc3ViLCBlc3ViKSA9PSByZXN0KQorCQkJCQlicmVhazsJLyogaXQgbWF0Y2hlZCBhbGwgb2YgaXQgKi8KKwkJCQkvKiB0aGF0IG9uZSBtaXNzZWQsIHRyeSBuZXh0IG9uZSAqLworCQkJCWFzc2VydChPUChtLT5nLT5zdHJpcFtlc3ViXSkgPT0gT09SMSk7CisJCQkJZXN1YisrOworCQkJCWFzc2VydChPUChtLT5nLT5zdHJpcFtlc3ViXSkgPT0gT09SMik7CisJCQkJc3N1YiA9IGVzdWIgKyAxOworCQkJCWVzdWIgKz0gT1BORChtLT5nLT5zdHJpcFtlc3ViXSk7CisJCQkJaWYgKE9QKG0tPmctPnN0cmlwW2VzdWJdKSA9PSBPT1IyKQorCQkJCQllc3ViLS07CisJCQkJZWxzZQorCQkJCQlhc3NlcnQoT1AobS0+Zy0+c3RyaXBbZXN1Yl0pID09IE9fQ0gpOworCQkJfQorI2lmZGVmIE5ERUJVRworCQkJKHZvaWQpCisjZWxzZQorCQkJZHAgPQorI2VuZGlmCisJCQkgICAgZGlzc2VjdChtLCBzcCwgcmVzdCwgc3N1YiwgZXN1Yik7CisJCQlhc3NlcnQoZHAgPT0gcmVzdCk7CisJCQlzcCA9IHJlc3Q7CisJCQlicmVhazsKKwkJY2FzZSBPX1BMVVM6CisJCWNhc2UgT19RVUVTVDoKKwkJY2FzZSBPT1IxOgorCQljYXNlIE9PUjI6CisJCWNhc2UgT19DSDoKKwkJCWFzc2VydChub3BlKTsKKwkJCWJyZWFrOworCQljYXNlIE9MUEFSRU46CisJCQlpID0gT1BORChtLT5nLT5zdHJpcFtzc10pOworCQkJYXNzZXJ0KDAgPCBpICYmIGkgPD0gbS0+Zy0+bnN1Yik7CisJCQltLT5wbWF0Y2hbaV0ucm1fc28gPSBzcCAtIG0tPm9mZnA7CisJCQlicmVhazsKKwkJY2FzZSBPUlBBUkVOOgorCQkJaSA9IE9QTkQobS0+Zy0+c3RyaXBbc3NdKTsKKwkJCWFzc2VydCgwIDwgaSAmJiBpIDw9IG0tPmctPm5zdWIpOworCQkJbS0+cG1hdGNoW2ldLnJtX2VvID0gc3AgLSBtLT5vZmZwOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CQkvKiB1aCBvaCAqLworCQkJYXNzZXJ0KG5vcGUpOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlhc3NlcnQoc3AgPT0gc3RvcCk7CisJcmV0dXJuKHNwKTsKK30KKworLyoKKyAtIGJhY2tyZWYgLSBmaWd1cmUgb3V0IHdoYXQgbWF0Y2hlZCB3aGF0LCBmaWd1cmluZyBpbiBiYWNrIHJlZmVyZW5jZXMKKyA9PSBzdGF0aWMgY29uc3QgY2hhciAqYmFja3JlZihzdHJ1Y3QgbWF0Y2ggKm0sIGNvbnN0IGNoYXIgKnN0YXJ0LCBcCisgPT0JY29uc3QgY2hhciAqc3RvcCwgc29wbm8gc3RhcnRzdCwgc29wbm8gc3RvcHN0LCBzb3BubyBsZXYpOworICovCitzdGF0aWMgY29uc3QgY2hhciAqCQkvKiA9PSBzdG9wIChzdWNjZXNzKSBvciBOVUxMIChmYWlsdXJlKSAqLworYmFja3JlZigKKyAgICBzdHJ1Y3QgbWF0Y2ggKm0sCisgICAgY29uc3QgY2hhciAqc3RhcnQsCisgICAgY29uc3QgY2hhciAqc3RvcCwKKyAgICBzb3BubyBzdGFydHN0LAorICAgIHNvcG5vIHN0b3BzdCwKKyAgICBzb3BubyBsZXYpCQkJLyogUExVUyBuZXN0aW5nIGxldmVsICovCit7CisJaW50IGk7CisJc29wbm8gc3M7CS8qIHN0YXJ0IHNvcCBvZiBjdXJyZW50IHN1YlJFICovCisJY29uc3QgY2hhciAqc3A7CS8qIHN0YXJ0IG9mIHN0cmluZyBtYXRjaGVkIGJ5IGl0ICovCisJc29wbm8gc3N1YjsJLyogc3RhcnQgc29wIG9mIHN1YnN1YlJFICovCisJc29wbm8gZXN1YjsJLyogZW5kIHNvcCBvZiBzdWJzdWJSRSAqLworCWNvbnN0IGNoYXIgKnNzcDsgLyogc3RhcnQgb2Ygc3RyaW5nIG1hdGNoZWQgYnkgc3Vic3ViUkUgKi8KKwljb25zdCBjaGFyICpkcDsKKwlzaXplX3QgbGVuOworCWludCBoYXJkOworCXNvcCBzOworCXJlZ29mZl90IG9mZnNhdmU7CisJY3NldCAqY3M7CisKKwlfRElBR0FTU0VSVChtICE9IE5VTEwpOworCV9ESUFHQVNTRVJUKHN0YXJ0ICE9IE5VTEwpOworCV9ESUFHQVNTRVJUKHN0b3AgIT0gTlVMTCk7CisKKwlBVCgiYmFjayIsIHN0YXJ0LCBzdG9wLCBzdGFydHN0LCBzdG9wc3QpOworCXNwID0gc3RhcnQ7CisKKwkvKiBnZXQgYXMgZmFyIGFzIHdlIGNhbiB3aXRoIGVhc3kgc3R1ZmYgKi8KKwloYXJkID0gMDsKKwlmb3IgKHNzID0gc3RhcnRzdDsgIWhhcmQgJiYgc3MgPCBzdG9wc3Q7IHNzKyspCisJCXN3aXRjaCAoT1AocyA9IG0tPmctPnN0cmlwW3NzXSkpIHsKKwkJY2FzZSBPQ0hBUjoKKwkJCWlmIChzcCA9PSBzdG9wIHx8ICpzcCsrICE9IChjaGFyKU9QTkQocykpCisJCQkJcmV0dXJuKE5VTEwpOworCQkJYnJlYWs7CisJCWNhc2UgT0FOWToKKwkJCWlmIChzcCA9PSBzdG9wKQorCQkJCXJldHVybihOVUxMKTsKKwkJCXNwKys7CisJCQlicmVhazsKKwkJY2FzZSBPQU5ZT0Y6CisJCQljcyA9ICZtLT5nLT5zZXRzW09QTkQocyldOworCQkJaWYgKHNwID09IHN0b3AgfHwgIUNISU4oY3MsICpzcCsrKSkKKwkJCQlyZXR1cm4oTlVMTCk7CisJCQlicmVhazsKKwkJY2FzZSBPQk9MOgorCQkJaWYgKCAoc3AgPT0gbS0+YmVnaW5wICYmICEobS0+ZWZsYWdzJlJFR19OT1RCT0wpKSB8fAorCQkJCQkoc3AgPCBtLT5lbmRwICYmICooc3AtMSkgPT0gJ1xuJyAmJgorCQkJCQkJKG0tPmctPmNmbGFncyZSRUdfTkVXTElORSkpICkKKwkJCQl7IC8qIHllcyAqLyB9CisJCQllbHNlCisJCQkJcmV0dXJuKE5VTEwpOworCQkJYnJlYWs7CisJCWNhc2UgT0VPTDoKKwkJCWlmICggKHNwID09IG0tPmVuZHAgJiYgIShtLT5lZmxhZ3MmUkVHX05PVEVPTCkpIHx8CisJCQkJCShzcCA8IG0tPmVuZHAgJiYgKnNwID09ICdcbicgJiYKKwkJCQkJCShtLT5nLT5jZmxhZ3MmUkVHX05FV0xJTkUpKSApCisJCQkJeyAvKiB5ZXMgKi8gfQorCQkJZWxzZQorCQkJCXJldHVybihOVUxMKTsKKwkJCWJyZWFrOworCQljYXNlIE9CT1c6CisJCQlpZiAoKCAoc3AgPT0gbS0+YmVnaW5wICYmICEobS0+ZWZsYWdzJlJFR19OT1RCT0wpKSB8fAorCQkJCQkoc3AgPCBtLT5lbmRwICYmICooc3AtMSkgPT0gJ1xuJyAmJgorCQkJCQkJKG0tPmctPmNmbGFncyZSRUdfTkVXTElORSkpIHx8CisJCQkJCShzcCA+IG0tPmJlZ2lucCAmJgorCQkJCQkJCSFJU1dPUkQoKihzcC0xKSkpICkgJiYKKwkJCQkJKHNwIDwgbS0+ZW5kcCAmJiBJU1dPUkQoKnNwKSkgKQorCQkJCXsgLyogeWVzICovIH0KKwkJCWVsc2UKKwkJCQlyZXR1cm4oTlVMTCk7CisJCQlicmVhazsKKwkJY2FzZSBPRU9XOgorCQkJaWYgKCggKHNwID09IG0tPmVuZHAgJiYgIShtLT5lZmxhZ3MmUkVHX05PVEVPTCkpIHx8CisJCQkJCShzcCA8IG0tPmVuZHAgJiYgKnNwID09ICdcbicgJiYKKwkJCQkJCShtLT5nLT5jZmxhZ3MmUkVHX05FV0xJTkUpKSB8fAorCQkJCQkoc3AgPCBtLT5lbmRwICYmICFJU1dPUkQoKnNwKSkgKSAmJgorCQkJCQkoc3AgPiBtLT5iZWdpbnAgJiYgSVNXT1JEKCooc3AtMSkpKSApCisJCQkJeyAvKiB5ZXMgKi8gfQorCQkJZWxzZQorCQkJCXJldHVybihOVUxMKTsKKwkJCWJyZWFrOworCQljYXNlIE9fUVVFU1Q6CisJCQlicmVhazsKKwkJY2FzZSBPT1IxOgkvKiBtYXRjaGVzIG51bGwgYnV0IG5lZWRzIHRvIHNraXAgKi8KKwkJCXNzKys7CisJCQlzID0gbS0+Zy0+c3RyaXBbc3NdOworCQkJZG8geworCQkJCWFzc2VydChPUChzKSA9PSBPT1IyKTsKKwkJCQlzcyArPSBPUE5EKHMpOworCQkJfSB3aGlsZSAoT1AocyA9IG0tPmctPnN0cmlwW3NzXSkgIT0gT19DSCk7CisJCQkvKiBub3RlIHRoYXQgdGhlIHNzKysgZ2V0cyB1cyBwYXN0IHRoZSBPX0NIICovCisJCQlicmVhazsKKwkJZGVmYXVsdDoJLyogaGF2ZSB0byBtYWtlIGEgY2hvaWNlICovCisJCQloYXJkID0gMTsKKwkJCWJyZWFrOworCQl9CisJaWYgKCFoYXJkKSB7CQkvKiB0aGF0IHdhcyBpdCEgKi8KKwkJaWYgKHNwICE9IHN0b3ApCisJCQlyZXR1cm4oTlVMTCk7CisJCXJldHVybihzcCk7CisJfQorCXNzLS07CQkJLyogYWRqdXN0IGZvciB0aGUgZm9yJ3MgZmluYWwgaW5jcmVtZW50ICovCisKKwkvKiB0aGUgaGFyZCBzdHVmZiAqLworCUFUKCJoYXJkIiwgc3AsIHN0b3AsIHNzLCBzdG9wc3QpOworCXMgPSBtLT5nLT5zdHJpcFtzc107CisJc3dpdGNoIChPUChzKSkgeworCWNhc2UgT0JBQ0tfOgkJLyogdGhlIHZpbGVzdCBkZXB0aHMgKi8KKwkJaSA9IE9QTkQocyk7CisJCWFzc2VydCgwIDwgaSAmJiBpIDw9IG0tPmctPm5zdWIpOworCQlpZiAobS0+cG1hdGNoW2ldLnJtX2VvID09IChyZWdvZmZfdCktMSkKKwkJCXJldHVybihOVUxMKTsKKwkJYXNzZXJ0KG0tPnBtYXRjaFtpXS5ybV9zbyAhPSAocmVnb2ZmX3QpLTEpOworCQlsZW4gPSAoc2l6ZV90KShtLT5wbWF0Y2hbaV0ucm1fZW8gLSBtLT5wbWF0Y2hbaV0ucm1fc28pOworCQlpZiAobGVuID09IDApCisJCQlyZXR1cm4oTlVMTCk7CisJCWFzc2VydChzdG9wIC0gbS0+YmVnaW5wID49IGxlbik7CisJCWlmIChzcCA+IHN0b3AgLSBsZW4pCisJCQlyZXR1cm4oTlVMTCk7CS8qIG5vdCBlbm91Z2ggbGVmdCB0byBtYXRjaCAqLworCQlzc3AgPSBtLT5vZmZwICsgKHNpemVfdCltLT5wbWF0Y2hbaV0ucm1fc287CisJCWlmIChtZW1jbXAoc3AsIHNzcCwgbGVuKSAhPSAwKQorCQkJcmV0dXJuKE5VTEwpOworCQl3aGlsZSAobS0+Zy0+c3RyaXBbc3NdICE9IFNPUChPX0JBQ0ssIGkpKQorCQkJc3MrKzsKKwkJcmV0dXJuKGJhY2tyZWYobSwgc3ArbGVuLCBzdG9wLCBzcysxLCBzdG9wc3QsIGxldikpOworCisJY2FzZSBPUVVFU1RfOgkJLyogdG8gbnVsbCBvciBub3QgKi8KKwkJZHAgPSBiYWNrcmVmKG0sIHNwLCBzdG9wLCBzcysxLCBzdG9wc3QsIGxldik7CisJCWlmIChkcCAhPSBOVUxMKQorCQkJcmV0dXJuKGRwKTsJLyogbm90ICovCisJCXJldHVybihiYWNrcmVmKG0sIHNwLCBzdG9wLCBzcytPUE5EKHMpKzEsIHN0b3BzdCwgbGV2KSk7CisKKwljYXNlIE9QTFVTXzoKKwkJYXNzZXJ0KG0tPmxhc3Rwb3MgIT0gTlVMTCk7CisJCWFzc2VydChsZXYrMSA8PSBtLT5nLT5ucGx1cyk7CisJCW0tPmxhc3Rwb3NbbGV2KzFdID0gc3A7CisJCXJldHVybihiYWNrcmVmKG0sIHNwLCBzdG9wLCBzcysxLCBzdG9wc3QsIGxldisxKSk7CisKKwljYXNlIE9fUExVUzoKKwkJaWYgKHNwID09IG0tPmxhc3Rwb3NbbGV2XSkJLyogbGFzdCBwYXNzIG1hdGNoZWQgbnVsbCAqLworCQkJcmV0dXJuKGJhY2tyZWYobSwgc3AsIHN0b3AsIHNzKzEsIHN0b3BzdCwgbGV2LTEpKTsKKwkJLyogdHJ5IGFub3RoZXIgcGFzcyAqLworCQltLT5sYXN0cG9zW2xldl0gPSBzcDsKKwkJZHAgPSBiYWNrcmVmKG0sIHNwLCBzdG9wLCBzcy1PUE5EKHMpKzEsIHN0b3BzdCwgbGV2KTsKKwkJaWYgKGRwID09IE5VTEwpCisJCQlkcCA9IGJhY2tyZWYobSwgc3AsIHN0b3AsIHNzKzEsIHN0b3BzdCwgbGV2LTEpOworCQlyZXR1cm4oZHApOworCisJY2FzZSBPQ0hfOgkJLyogZmluZCB0aGUgcmlnaHQgb25lLCBpZiBhbnkgKi8KKwkJc3N1YiA9IHNzICsgMTsKKwkJZXN1YiA9IHNzICsgT1BORChzKSAtIDE7CisJCWFzc2VydChPUChtLT5nLT5zdHJpcFtlc3ViXSkgPT0gT09SMSk7CisJCWZvciAoOzspIHsJLyogZmluZCBmaXJzdCBtYXRjaGluZyBicmFuY2ggKi8KKwkJCWRwID0gYmFja3JlZihtLCBzcCwgc3RvcCwgc3N1YiwgZXN1YiwgbGV2KTsKKwkJCWlmIChkcCAhPSBOVUxMKQorCQkJCXJldHVybihkcCk7CisJCQkvKiB0aGF0IG9uZSBtaXNzZWQsIHRyeSBuZXh0IG9uZSAqLworCQkJaWYgKE9QKG0tPmctPnN0cmlwW2VzdWJdKSA9PSBPX0NIKQorCQkJCXJldHVybihOVUxMKTsJLyogdGhlcmUgaXMgbm9uZSAqLworCQkJZXN1YisrOworCQkJYXNzZXJ0KE9QKG0tPmctPnN0cmlwW2VzdWJdKSA9PSBPT1IyKTsKKwkJCXNzdWIgPSBlc3ViICsgMTsKKwkJCWVzdWIgKz0gT1BORChtLT5nLT5zdHJpcFtlc3ViXSk7CisJCQlpZiAoT1AobS0+Zy0+c3RyaXBbZXN1Yl0pID09IE9PUjIpCisJCQkJZXN1Yi0tOworCQkJZWxzZQorCQkJCWFzc2VydChPUChtLT5nLT5zdHJpcFtlc3ViXSkgPT0gT19DSCk7CisJCX0KKworCWNhc2UgT0xQQVJFTjoJCS8qIG11c3QgdW5kbyBhc3NpZ25tZW50IGlmIHJlc3QgZmFpbHMgKi8KKwkJaSA9IE9QTkQocyk7CisJCWFzc2VydCgwIDwgaSAmJiBpIDw9IG0tPmctPm5zdWIpOworCQlvZmZzYXZlID0gbS0+cG1hdGNoW2ldLnJtX3NvOworCQltLT5wbWF0Y2hbaV0ucm1fc28gPSBzcCAtIG0tPm9mZnA7CisJCWRwID0gYmFja3JlZihtLCBzcCwgc3RvcCwgc3MrMSwgc3RvcHN0LCBsZXYpOworCQlpZiAoZHAgIT0gTlVMTCkKKwkJCXJldHVybihkcCk7CisJCW0tPnBtYXRjaFtpXS5ybV9zbyA9IG9mZnNhdmU7CisJCXJldHVybihOVUxMKTsKKworCWNhc2UgT1JQQVJFTjoJCS8qIG11c3QgdW5kbyBhc3NpZ25tZW50IGlmIHJlc3QgZmFpbHMgKi8KKwkJaSA9IE9QTkQocyk7CisJCWFzc2VydCgwIDwgaSAmJiBpIDw9IG0tPmctPm5zdWIpOworCQlvZmZzYXZlID0gbS0+cG1hdGNoW2ldLnJtX2VvOworCQltLT5wbWF0Y2hbaV0ucm1fZW8gPSBzcCAtIG0tPm9mZnA7CisJCWRwID0gYmFja3JlZihtLCBzcCwgc3RvcCwgc3MrMSwgc3RvcHN0LCBsZXYpOworCQlpZiAoZHAgIT0gTlVMTCkKKwkJCXJldHVybihkcCk7CisJCW0tPnBtYXRjaFtpXS5ybV9lbyA9IG9mZnNhdmU7CisJCXJldHVybihOVUxMKTsKKworCWRlZmF1bHQ6CQkvKiB1aCBvaCAqLworCQlhc3NlcnQobm9wZSk7CisJCWJyZWFrOworCX0KKworCS8qICJjYW4ndCBoYXBwZW4iICovCisJYXNzZXJ0KG5vcGUpOworCS8qIE5PVFJFQUNIRUQgKi8KKwlyZXR1cm4gTlVMTDsKK30KKworLyoKKyAtIGZhc3QgLSBzdGVwIHRocm91Z2ggdGhlIHN0cmluZyBhdCB0b3Agc3BlZWQKKyA9PSBzdGF0aWMgY29uc3QgY2hhciAqZmFzdChzdHJ1Y3QgbWF0Y2ggKm0sIGNvbnN0IGNoYXIgKnN0YXJ0LCBcCisgPT0JY29uc3QgY2hhciAqc3RvcCwgc29wbm8gc3RhcnRzdCwgc29wbm8gc3RvcHN0KTsKKyAqLworc3RhdGljIGNvbnN0IGNoYXIgKgkJLyogd2hlcmUgdGVudGF0aXZlIG1hdGNoIGVuZGVkLCBvciBOVUxMICovCitmYXN0KAorICAgIHN0cnVjdCBtYXRjaCAqbSwKKyAgICBjb25zdCBjaGFyICpzdGFydCwKKyAgICBjb25zdCBjaGFyICpzdG9wLAorICAgIHNvcG5vIHN0YXJ0c3QsCisgICAgc29wbm8gc3RvcHN0KQoreworCXN0YXRlcyBzdCA9IG0tPnN0OworCXN0YXRlcyBmcmVzaCA9IG0tPmZyZXNoOworCXN0YXRlcyB0bXAgPSBtLT50bXA7CisJY29uc3QgY2hhciAqcCA9IHN0YXJ0OworCWludCBjID0gKHN0YXJ0ID09IG0tPmJlZ2lucCkgPyBPVVQgOiAqKHN0YXJ0LTEpOworCWludCBsYXN0YzsJLyogcHJldmlvdXMgYyAqLworCWludCBmbGFnY2g7CisJc2l6ZV90IGk7CisJY29uc3QgY2hhciAqY29sZHA7IC8qIGxhc3QgcCBhZnRlciB3aGljaCBubyBtYXRjaCB3YXMgdW5kZXJ3YXkgKi8KKworCV9ESUFHQVNTRVJUKG0gIT0gTlVMTCk7CisJX0RJQUdBU1NFUlQoc3RhcnQgIT0gTlVMTCk7CisJX0RJQUdBU1NFUlQoc3RvcCAhPSBOVUxMKTsKKworCUNMRUFSKHN0KTsKKwlTRVQxKHN0LCBzdGFydHN0KTsKKwlzdCA9IHN0ZXAobS0+Zywgc3RhcnRzdCwgc3RvcHN0LCBzdCwgTk9USElORywgc3QpOworCUFTU0lHTihmcmVzaCwgc3QpOworCVNQKCJzdGFydCIsIHN0LCAqcCk7CisJY29sZHAgPSBOVUxMOworCWZvciAoOzspIHsKKwkJLyogbmV4dCBjaGFyYWN0ZXIgKi8KKwkJbGFzdGMgPSBjOworCQljID0gKHAgPT0gbS0+ZW5kcCkgPyBPVVQgOiAqcDsKKwkJaWYgKEVRKHN0LCBmcmVzaCkpCisJCQljb2xkcCA9IHA7CisKKwkJLyogaXMgdGhlcmUgYW4gRU9MIGFuZC9vciBCT0wgYmV0d2VlbiBsYXN0YyBhbmQgYz8gKi8KKwkJZmxhZ2NoID0gJ1wwJzsKKwkJaSA9IDA7CisJCWlmICggKGxhc3RjID09ICdcbicgJiYgbS0+Zy0+Y2ZsYWdzJlJFR19ORVdMSU5FKSB8fAorCQkJCShsYXN0YyA9PSBPVVQgJiYgIShtLT5lZmxhZ3MmUkVHX05PVEJPTCkpICkgeworCQkJZmxhZ2NoID0gQk9MOworCQkJaSA9IG0tPmctPm5ib2w7CisJCX0KKwkJaWYgKCAoYyA9PSAnXG4nICYmIG0tPmctPmNmbGFncyZSRUdfTkVXTElORSkgfHwKKwkJCQkoYyA9PSBPVVQgJiYgIShtLT5lZmxhZ3MmUkVHX05PVEVPTCkpICkgeworCQkJZmxhZ2NoID0gKGZsYWdjaCA9PSBCT0wpID8gQk9MRU9MIDogRU9MOworCQkJaSArPSBtLT5nLT5uZW9sOworCQl9CisJCWlmIChpICE9IDApIHsKKwkJCWZvciAoOyBpID4gMDsgaS0tKQorCQkJCXN0ID0gc3RlcChtLT5nLCBzdGFydHN0LCBzdG9wc3QsIHN0LCBmbGFnY2gsIHN0KTsKKwkJCVNQKCJib2xlb2wiLCBzdCwgYyk7CisJCX0KKworCQkvKiBob3cgYWJvdXQgYSB3b3JkIGJvdW5kYXJ5PyAqLworCQlpZiAoIChmbGFnY2ggPT0gQk9MIHx8IChsYXN0YyAhPSBPVVQgJiYgIUlTV09SRChsYXN0YykpKSAmJgorCQkJCQkoYyAhPSBPVVQgJiYgSVNXT1JEKGMpKSApIHsKKwkJCWZsYWdjaCA9IEJPVzsKKwkJfQorCQlpZiAoIChsYXN0YyAhPSBPVVQgJiYgSVNXT1JEKGxhc3RjKSkgJiYKKwkJCQkoZmxhZ2NoID09IEVPTCB8fCAoYyAhPSBPVVQgJiYgIUlTV09SRChjKSkpICkgeworCQkJZmxhZ2NoID0gRU9XOworCQl9CisJCWlmIChmbGFnY2ggPT0gQk9XIHx8IGZsYWdjaCA9PSBFT1cpIHsKKwkJCXN0ID0gc3RlcChtLT5nLCBzdGFydHN0LCBzdG9wc3QsIHN0LCBmbGFnY2gsIHN0KTsKKwkJCVNQKCJib3dlb3ciLCBzdCwgYyk7CisJCX0KKworCQkvKiBhcmUgd2UgZG9uZT8gKi8KKwkJaWYgKElTU0VUKHN0LCBzdG9wc3QpIHx8IHAgPT0gc3RvcCkKKwkJCWJyZWFrOwkJLyogTk9URSBCUkVBSyBPVVQgKi8KKworCQkvKiBubywgd2UgbXVzdCBkZWFsIHdpdGggdGhpcyBjaGFyYWN0ZXIgKi8KKwkJQVNTSUdOKHRtcCwgc3QpOworCQlBU1NJR04oc3QsIGZyZXNoKTsKKwkJYXNzZXJ0KGMgIT0gT1VUKTsKKwkJc3QgPSBzdGVwKG0tPmcsIHN0YXJ0c3QsIHN0b3BzdCwgdG1wLCBjLCBzdCk7CisJCVNQKCJhZnQiLCBzdCwgYyk7CisJCWFzc2VydChFUShzdGVwKG0tPmcsIHN0YXJ0c3QsIHN0b3BzdCwgc3QsIE5PVEhJTkcsIHN0KSwgc3QpKTsKKwkJcCsrOworCX0KKworCWFzc2VydChjb2xkcCAhPSBOVUxMKTsKKwltLT5jb2xkcCA9IGNvbGRwOworCWlmIChJU1NFVChzdCwgc3RvcHN0KSkKKwkJcmV0dXJuKHArMSk7CisJZWxzZQorCQlyZXR1cm4oTlVMTCk7Cit9CisKKy8qCisgLSBzbG93IC0gc3RlcCB0aHJvdWdoIHRoZSBzdHJpbmcgbW9yZSBkZWxpYmVyYXRlbHkKKyA9PSBzdGF0aWMgY29uc3QgY2hhciAqc2xvdyhzdHJ1Y3QgbWF0Y2ggKm0sIGNvbnN0IGNoYXIgKnN0YXJ0LCBcCisgPT0JY29uc3QgY2hhciAqc3RvcCwgc29wbm8gc3RhcnRzdCwgc29wbm8gc3RvcHN0KTsKKyAqLworc3RhdGljIGNvbnN0IGNoYXIgKgkJCS8qIHdoZXJlIGl0IGVuZGVkICovCitzbG93KAorICAgIHN0cnVjdCBtYXRjaCAqbSwKKyAgICBjb25zdCBjaGFyICpzdGFydCwKKyAgICBjb25zdCBjaGFyICpzdG9wLAorICAgIHNvcG5vIHN0YXJ0c3QsCisgICAgc29wbm8gc3RvcHN0KQoreworCXN0YXRlcyBzdCA9IG0tPnN0OworCXN0YXRlcyBlbXB0eSA9IG0tPmVtcHR5OworCXN0YXRlcyB0bXAgPSBtLT50bXA7CisJY29uc3QgY2hhciAqcCA9IHN0YXJ0OworCWludCBjID0gKHN0YXJ0ID09IG0tPmJlZ2lucCkgPyBPVVQgOiAqKHN0YXJ0LTEpOworCWludCBsYXN0YzsJLyogcHJldmlvdXMgYyAqLworCWludCBmbGFnY2g7CisJc2l6ZV90IGk7CisJY29uc3QgY2hhciAqbWF0Y2hwOwkvKiBsYXN0IHAgYXQgd2hpY2ggYSBtYXRjaCBlbmRlZCAqLworCisJX0RJQUdBU1NFUlQobSAhPSBOVUxMKTsKKwlfRElBR0FTU0VSVChzdGFydCAhPSBOVUxMKTsKKwlfRElBR0FTU0VSVChzdG9wICE9IE5VTEwpOworCisJQVQoInNsb3ciLCBzdGFydCwgc3RvcCwgc3RhcnRzdCwgc3RvcHN0KTsKKwlDTEVBUihzdCk7CisJU0VUMShzdCwgc3RhcnRzdCk7CisJU1AoInNzdGFydCIsIHN0LCAqcCk7CisJc3QgPSBzdGVwKG0tPmcsIHN0YXJ0c3QsIHN0b3BzdCwgc3QsIE5PVEhJTkcsIHN0KTsKKwltYXRjaHAgPSBOVUxMOworCWZvciAoOzspIHsKKwkJLyogbmV4dCBjaGFyYWN0ZXIgKi8KKwkJbGFzdGMgPSBjOworCQljID0gKHAgPT0gbS0+ZW5kcCkgPyBPVVQgOiAqcDsKKworCQkvKiBpcyB0aGVyZSBhbiBFT0wgYW5kL29yIEJPTCBiZXR3ZWVuIGxhc3RjIGFuZCBjPyAqLworCQlmbGFnY2ggPSAnXDAnOworCQlpID0gMDsKKwkJaWYgKCAobGFzdGMgPT0gJ1xuJyAmJiBtLT5nLT5jZmxhZ3MmUkVHX05FV0xJTkUpIHx8CisJCQkJKGxhc3RjID09IE9VVCAmJiAhKG0tPmVmbGFncyZSRUdfTk9UQk9MKSkgKSB7CisJCQlmbGFnY2ggPSBCT0w7CisJCQlpID0gbS0+Zy0+bmJvbDsKKwkJfQorCQlpZiAoIChjID09ICdcbicgJiYgbS0+Zy0+Y2ZsYWdzJlJFR19ORVdMSU5FKSB8fAorCQkJCShjID09IE9VVCAmJiAhKG0tPmVmbGFncyZSRUdfTk9URU9MKSkgKSB7CisJCQlmbGFnY2ggPSAoZmxhZ2NoID09IEJPTCkgPyBCT0xFT0wgOiBFT0w7CisJCQlpICs9IG0tPmctPm5lb2w7CisJCX0KKwkJaWYgKGkgIT0gMCkgeworCQkJZm9yICg7IGkgPiAwOyBpLS0pCisJCQkJc3QgPSBzdGVwKG0tPmcsIHN0YXJ0c3QsIHN0b3BzdCwgc3QsIGZsYWdjaCwgc3QpOworCQkJU1AoInNib2xlb2wiLCBzdCwgYyk7CisJCX0KKworCQkvKiBob3cgYWJvdXQgYSB3b3JkIGJvdW5kYXJ5PyAqLworCQlpZiAoIChmbGFnY2ggPT0gQk9MIHx8IChsYXN0YyAhPSBPVVQgJiYgIUlTV09SRChsYXN0YykpKSAmJgorCQkJCQkoYyAhPSBPVVQgJiYgSVNXT1JEKGMpKSApIHsKKwkJCWZsYWdjaCA9IEJPVzsKKwkJfQorCQlpZiAoIChsYXN0YyAhPSBPVVQgJiYgSVNXT1JEKGxhc3RjKSkgJiYKKwkJCQkoZmxhZ2NoID09IEVPTCB8fCAoYyAhPSBPVVQgJiYgIUlTV09SRChjKSkpICkgeworCQkJZmxhZ2NoID0gRU9XOworCQl9CisJCWlmIChmbGFnY2ggPT0gQk9XIHx8IGZsYWdjaCA9PSBFT1cpIHsKKwkJCXN0ID0gc3RlcChtLT5nLCBzdGFydHN0LCBzdG9wc3QsIHN0LCBmbGFnY2gsIHN0KTsKKwkJCVNQKCJzYm93ZW93Iiwgc3QsIGMpOworCQl9CisKKwkJLyogYXJlIHdlIGRvbmU/ICovCisJCWlmIChJU1NFVChzdCwgc3RvcHN0KSkKKwkJCW1hdGNocCA9IHA7CisJCWlmIChFUShzdCwgZW1wdHkpIHx8IHAgPT0gc3RvcCkKKwkJCWJyZWFrOwkJLyogTk9URSBCUkVBSyBPVVQgKi8KKworCQkvKiBubywgd2UgbXVzdCBkZWFsIHdpdGggdGhpcyBjaGFyYWN0ZXIgKi8KKwkJQVNTSUdOKHRtcCwgc3QpOworCQlBU1NJR04oc3QsIGVtcHR5KTsKKwkJYXNzZXJ0KGMgIT0gT1VUKTsKKwkJc3QgPSBzdGVwKG0tPmcsIHN0YXJ0c3QsIHN0b3BzdCwgdG1wLCBjLCBzdCk7CisJCVNQKCJzYWZ0Iiwgc3QsIGMpOworCQlhc3NlcnQoRVEoc3RlcChtLT5nLCBzdGFydHN0LCBzdG9wc3QsIHN0LCBOT1RISU5HLCBzdCksIHN0KSk7CisJCXArKzsKKwl9CisKKwlyZXR1cm4obWF0Y2hwKTsKK30KKworCisvKgorIC0gc3RlcCAtIG1hcCBzZXQgb2Ygc3RhdGVzIHJlYWNoYWJsZSBiZWZvcmUgY2hhciB0byBzZXQgcmVhY2hhYmxlIGFmdGVyCisgPT0gc3RhdGljIHN0YXRlcyBzdGVwKHN0cnVjdCByZV9ndXRzICpnLCBzb3BubyBzdGFydCwgc29wbm8gc3RvcCwgXAorID09CXN0YXRlcyBiZWYsIGludCBjaCwgc3RhdGVzIGFmdCk7CisgPT0gI2RlZmluZQlCT0wJKE9VVCsxKQorID09ICNkZWZpbmUJRU9MCShCT0wrMSkKKyA9PSAjZGVmaW5lCUJPTEVPTAkoQk9MKzIpCisgPT0gI2RlZmluZQlOT1RISU5HCShCT0wrMykKKyA9PSAjZGVmaW5lCUJPVwkoQk9MKzQpCisgPT0gI2RlZmluZQlFT1cJKEJPTCs1KQorID09ICNkZWZpbmUJQ09ERU1BWAkoQk9MKzUpCQkvLyBoaWdoZXN0IGNvZGUgdXNlZAorID09ICNkZWZpbmUJTk9OQ0hBUihjKQkoKGMpID4gQ0hBUl9NQVgpCisgPT0gI2RlZmluZQlOTk9OQ0hBUgkoQ09ERU1BWC1DSEFSX01BWCkKKyAqLworc3RhdGljIHN0YXRlcworc3RlcCgKKyAgICBzdHJ1Y3QgcmVfZ3V0cyAqZywKKyAgICBzb3BubyBzdGFydCwJCS8qIHN0YXJ0IHN0YXRlIHdpdGhpbiBzdHJpcCAqLworICAgIHNvcG5vIHN0b3AsCQkJLyogc3RhdGUgYWZ0ZXIgc3RvcCBzdGF0ZSB3aXRoaW4gc3RyaXAgKi8KKyAgICBzdGF0ZXMgYmVmLAkJCS8qIHN0YXRlcyByZWFjaGFibGUgYmVmb3JlICovCisgICAgaW50IGNoLAkJCS8qIGNoYXJhY3RlciBvciBOT05DSEFSIGNvZGUgKi8KKyAgICBzdGF0ZXMgYWZ0KQkJCS8qIHN0YXRlcyBhbHJlYWR5IGtub3duIHJlYWNoYWJsZSBhZnRlciAqLworeworCWNzZXQgKmNzOworCXNvcCBzOworCXNvcG5vIHBjOworCW9uZXN0YXRlIGhlcmU7CQkvKiBub3RlLCBtYWNyb3Mga25vdyB0aGlzIG5hbWUgKi8KKwlzb3BubyBsb29rOworCWludCBpOworCisJX0RJQUdBU1NFUlQoZyAhPSBOVUxMKTsKKworCWZvciAocGMgPSBzdGFydCwgSU5JVChoZXJlLCBwYyk7IHBjICE9IHN0b3A7IHBjKyssIElOQyhoZXJlKSkgeworCQlzID0gZy0+c3RyaXBbcGNdOworCQlzd2l0Y2ggKE9QKHMpKSB7CisJCWNhc2UgT0VORDoKKwkJCWFzc2VydChwYyA9PSBzdG9wLTEpOworCQkJYnJlYWs7CisJCWNhc2UgT0NIQVI6CisJCQkvKiBvbmx5IGNoYXJhY3RlcnMgY2FuIG1hdGNoICovCisJCQlhc3NlcnQoIU5PTkNIQVIoY2gpIHx8IGNoICE9IChjaGFyKU9QTkQocykpOworCQkJaWYgKGNoID09IChjaGFyKU9QTkQocykpCisJCQkJRldEKGFmdCwgYmVmLCAxKTsKKwkJCWJyZWFrOworCQljYXNlIE9CT0w6CisJCQlpZiAoY2ggPT0gQk9MIHx8IGNoID09IEJPTEVPTCkKKwkJCQlGV0QoYWZ0LCBiZWYsIDEpOworCQkJYnJlYWs7CisJCWNhc2UgT0VPTDoKKwkJCWlmIChjaCA9PSBFT0wgfHwgY2ggPT0gQk9MRU9MKQorCQkJCUZXRChhZnQsIGJlZiwgMSk7CisJCQlicmVhazsKKwkJY2FzZSBPQk9XOgorCQkJaWYgKGNoID09IEJPVykKKwkJCQlGV0QoYWZ0LCBiZWYsIDEpOworCQkJYnJlYWs7CisJCWNhc2UgT0VPVzoKKwkJCWlmIChjaCA9PSBFT1cpCisJCQkJRldEKGFmdCwgYmVmLCAxKTsKKwkJCWJyZWFrOworCQljYXNlIE9BTlk6CisJCQlpZiAoIU5PTkNIQVIoY2gpKQorCQkJCUZXRChhZnQsIGJlZiwgMSk7CisJCQlicmVhazsKKwkJY2FzZSBPQU5ZT0Y6CisJCQljcyA9ICZnLT5zZXRzW09QTkQocyldOworCQkJaWYgKCFOT05DSEFSKGNoKSAmJiBDSElOKGNzLCBjaCkpCisJCQkJRldEKGFmdCwgYmVmLCAxKTsKKwkJCWJyZWFrOworCQljYXNlIE9CQUNLXzoJCS8qIGlnbm9yZWQgaGVyZSAqLworCQljYXNlIE9fQkFDSzoKKwkJCUZXRChhZnQsIGFmdCwgMSk7CisJCQlicmVhazsKKwkJY2FzZSBPUExVU186CQkvKiBmb3J3YXJkLCB0aGlzIGlzIGp1c3QgYW4gZW1wdHkgKi8KKwkJCUZXRChhZnQsIGFmdCwgMSk7CisJCQlicmVhazsKKwkJY2FzZSBPX1BMVVM6CQkvKiBib3RoIGZvcndhcmQgYW5kIGJhY2sgKi8KKwkJCUZXRChhZnQsIGFmdCwgMSk7CisJCQlpID0gSVNTRVRCQUNLKGFmdCwgT1BORChzKSk7CisJCQlCQUNLKGFmdCwgYWZ0LCBPUE5EKHMpKTsKKwkJCWlmICghaSAmJiBJU1NFVEJBQ0soYWZ0LCBPUE5EKHMpKSkgeworCQkJCS8qIG9obywgbXVzdCByZWNvbnNpZGVyIGxvb3AgYm9keSAqLworCQkJCXBjIC09IE9QTkQocykgKyAxOworCQkJCUlOSVQoaGVyZSwgcGMpOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgT1FVRVNUXzoJCS8qIHR3byBicmFuY2hlcywgYm90aCBmb3J3YXJkICovCisJCQlGV0QoYWZ0LCBhZnQsIDEpOworCQkJRldEKGFmdCwgYWZ0LCBPUE5EKHMpKTsKKwkJCWJyZWFrOworCQljYXNlIE9fUVVFU1Q6CQkvKiBqdXN0IGFuIGVtcHR5ICovCisJCQlGV0QoYWZ0LCBhZnQsIDEpOworCQkJYnJlYWs7CisJCWNhc2UgT0xQQVJFTjoJCS8qIG5vdCBzaWduaWZpY2FudCBoZXJlICovCisJCWNhc2UgT1JQQVJFTjoKKwkJCUZXRChhZnQsIGFmdCwgMSk7CisJCQlicmVhazsKKwkJY2FzZSBPQ0hfOgkJLyogbWFyayB0aGUgZmlyc3QgdHdvIGJyYW5jaGVzICovCisJCQlGV0QoYWZ0LCBhZnQsIDEpOworCQkJYXNzZXJ0KE9QKGctPnN0cmlwW3BjK09QTkQocyldKSA9PSBPT1IyKTsKKwkJCUZXRChhZnQsIGFmdCwgT1BORChzKSk7CisJCQlicmVhazsKKwkJY2FzZSBPT1IxOgkJLyogZG9uZSBhIGJyYW5jaCwgZmluZCB0aGUgT19DSCAqLworCQkJaWYgKElTU1RBVEVJTihhZnQsIGhlcmUpKSB7CisJCQkJZm9yIChsb29rID0gMTsKKwkJCQkJCU9QKHMgPSBnLT5zdHJpcFtwYytsb29rXSkgIT0gT19DSDsKKwkJCQkJCWxvb2sgKz0gT1BORChzKSkKKwkJCQkJYXNzZXJ0KE9QKHMpID09IE9PUjIpOworCQkJCUZXRChhZnQsIGFmdCwgbG9vayk7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBPT1IyOgkJLyogcHJvcGFnYXRlIE9DSF8ncyBtYXJraW5nICovCisJCQlGV0QoYWZ0LCBhZnQsIDEpOworCQkJaWYgKE9QKGctPnN0cmlwW3BjK09QTkQocyldKSAhPSBPX0NIKSB7CisJCQkJYXNzZXJ0KE9QKGctPnN0cmlwW3BjK09QTkQocyldKSA9PSBPT1IyKTsKKwkJCQlGV0QoYWZ0LCBhZnQsIE9QTkQocykpOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgT19DSDoJCS8qIGp1c3QgZW1wdHkgKi8KKwkJCUZXRChhZnQsIGFmdCwgMSk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoJCS8qIG9vb29vcHMuLi4gKi8KKwkJCWFzc2VydChub3BlKTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJcmV0dXJuKGFmdCk7Cit9CisKKyNpZmRlZiBSRURFQlVHCisvKgorIC0gcHJpbnQgLSBwcmludCBhIHNldCBvZiBzdGF0ZXMKKyA9PSAjaWZkZWYgUkVERUJVRworID09IHN0YXRpYyB2b2lkIHByaW50KHN0cnVjdCBtYXRjaCAqbSwgY2hhciAqY2FwdGlvbiwgc3RhdGVzIHN0LCBcCisgPT0JaW50IGNoLCBGSUxFICpkKTsKKyA9PSAjZW5kaWYKKyAqLworc3RhdGljIHZvaWQKK3ByaW50KAorICAgIHN0cnVjdCBtYXRjaCAqbSwKKyAgICBjaGFyICpjYXB0aW9uLAorICAgIHN0YXRlcyBzdCwKKyAgICBpbnQgY2gsCisgICAgRklMRSAqZCkKK3sKKwlzdHJ1Y3QgcmVfZ3V0cyAqZyA9IG0tPmc7CisJaW50IGk7CisJaW50IGZpcnN0ID0gMTsKKworCV9ESUFHQVNTRVJUKG0gIT0gTlVMTCk7CisJX0RJQUdBU1NFUlQoY2FwdGlvbiAhPSBOVUxMKTsKKworCWlmICghKG0tPmVmbGFncyZSRUdfVFJBQ0UpKQorCQlyZXR1cm47CisKKwlfRElBR0FTU0VSVChkICE9IE5VTEwpOworCisJZnByaW50ZihkLCAiJXMiLCBjYXB0aW9uKTsKKwlpZiAoY2ggIT0gJ1wwJykKKwkJZnByaW50ZihkLCAiICVzIiwgcGNoYXIoY2gpKTsKKwlmb3IgKGkgPSAwOyBpIDwgZy0+bnN0YXRlczsgaSsrKQorCQlpZiAoSVNTRVQoc3QsIGkpKSB7CisJCQlmcHJpbnRmKGQsICIlcyVkIiwgKGZpcnN0KSA/ICJcdCIgOiAiLCAiLCBpKTsKKwkJCWZpcnN0ID0gMDsKKwkJfQorCWZwcmludGYoZCwgIlxuIik7Cit9CisKKy8qIAorIC0gYXQgLSBwcmludCBjdXJyZW50IHNpdHVhdGlvbgorID09ICNpZmRlZiBSRURFQlVHCisgPT0gc3RhdGljIHZvaWQgYXQoc3RydWN0IG1hdGNoICptLCBjaGFyICp0aXRsZSwgY2hhciAqc3RhcnQsIGNoYXIgKnN0b3AsIFwKKyA9PQkJCQkJCXNvcG5vIHN0YXJ0c3QsIHNvcG5vIHN0b3BzdCk7CisgPT0gI2VuZGlmCisgKi8KK3N0YXRpYyB2b2lkCithdCgKKyAgICBzdHJ1Y3QgbWF0Y2ggKm0sCisgICAgY2hhciAqdGl0bGUsCisgICAgY2hhciAqc3RhcnQsCisgICAgY2hhciAqc3RvcCwKKyAgICBzb3BubyBzdGFydHN0LAorICAgIHNvcG5vIHN0b3BzdCkKK3sKKworCV9ESUFHQVNTRVJUKG0gIT0gTlVMTCk7CisJX0RJQUdBU1NFUlQodGl0bGUgIT0gTlVMTCk7CisJX0RJQUdBU1NFUlQoc3RhcnQgIT0gTlVMTCk7CisJX0RJQUdBU1NFUlQoc3RvcCAhPSBOVUxMKTsKKworCWlmICghKG0tPmVmbGFncyZSRUdfVFJBQ0UpKQorCQlyZXR1cm47CisKKwlwcmludGYoIiVzICVzLSIsIHRpdGxlLCBwY2hhcigqc3RhcnQpKTsKKwlwcmludGYoIiVzICIsIHBjaGFyKCpzdG9wKSk7CisJcHJpbnRmKCIlbGQtJWxkXG4iLCAobG9uZylzdGFydHN0LCAobG9uZylzdG9wc3QpOworfQorCisjaWZuZGVmIFBDSEFSRE9ORQorI2RlZmluZQlQQ0hBUkRPTkUJLyogbmV2ZXIgYWdhaW4gKi8KKy8qCisgLSBwY2hhciAtIG1ha2UgYSBjaGFyYWN0ZXIgcHJpbnRhYmxlCisgPT0gI2lmZGVmIFJFREVCVUcKKyA9PSBzdGF0aWMgY2hhciAqcGNoYXIoaW50IGNoKTsKKyA9PSAjZW5kaWYKKyAqCisgKiBJcyB0aGlzIGlkZW50aWNhbCB0byByZWdjaGFyKCkgb3ZlciBpbiBkZWJ1Zy5jPyAgV2VsbCwgeWVzLiAgQnV0IGEKKyAqIGR1cGxpY2F0ZSBoZXJlIGF2b2lkcyBoYXZpbmcgYSBkZWJ1Z2dpbmctY2FwYWJsZSByZWdleGVjLm8gdGllZCB0bworICogYSBtYXRjaGluZyBkZWJ1Zy5vLCBhbmQgdGhpcyBpcyBjb252ZW5pZW50LiAgSXQgYWxsIGRpc2FwcGVhcnMgaW4KKyAqIHRoZSBub24tZGVidWcgY29tcGlsYXRpb24gYW55d2F5LCBzbyBpdCBkb2Vzbid0IG1hdHRlciBtdWNoLgorICovCitzdGF0aWMgY2hhciAqCQkJLyogLT4gcmVwcmVzZW50YXRpb24gKi8KK3BjaGFyKAorICAgIGludCBjaCkKK3sKKwlzdGF0aWMgY2hhciBwYnVmWzEwXTsKKworCWlmIChpc3ByaW50KGNoKSB8fCBjaCA9PSAnICcpCisJCSh2b2lkKXNucHJpbnRmKHBidWYsIHNpemVvZiBwYnVmLCAiJWMiLCBjaCk7CisJZWxzZQorCQkodm9pZClzbnByaW50ZihwYnVmLCBzaXplb2YgcGJ1ZiwgIlxcJW8iLCBjaCk7CisJcmV0dXJuKHBidWYpOworfQorI2VuZGlmCisjZW5kaWYKKworI3VuZGVmCW1hdGNoZXIKKyN1bmRlZglmYXN0CisjdW5kZWYJc2xvdworI3VuZGVmCWRpc3NlY3QKKyN1bmRlZgliYWNrcmVmCisjdW5kZWYJc3RlcAorI3VuZGVmCXByaW50CisjdW5kZWYJYXQKKyN1bmRlZgltYXRjaAorI3VuZGVmCW5vcGUKZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYmMvcmVnZXgvcmVnY29tcC5jIGIvbGliYy91cHN0cmVhbS1uZXRic2QvbGliYy9yZWdleC9yZWdjb21wLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjY0NGEyMgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYmMvcmVnZXgvcmVnY29tcC5jCkBAIC0wLDAgKzEsMTk0NCBAQAorLyoJJE5ldEJTRDogcmVnY29tcC5jLHYgMS4zMyAyMDEyLzAzLzEzIDIxOjEzOjQzIGNocmlzdG9zIEV4cCAkCSovCisKKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkyLCAxOTkzLCAxOTk0CisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5CisgKiBIZW5yeSBTcGVuY2VyLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKglAKCMpcmVnY29tcC5jCTguNSAoQmVya2VsZXkpIDMvMjAvOTQKKyAqLworCisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5MiwgMTk5MywgMTk5NCBIZW5yeSBTcGVuY2VyLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKKyAqIEhlbnJ5IFNwZW5jZXIuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKKyAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKKyAqCVRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIFVuaXZlcnNpdHkgb2YKKyAqCUNhbGlmb3JuaWEsIEJlcmtlbGV5IGFuZCBpdHMgY29udHJpYnV0b3JzLgorICogNC4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKglAKCMpcmVnY29tcC5jCTguNSAoQmVya2VsZXkpIDMvMjAvOTQKKyAqLworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisjaWYgZGVmaW5lZChMSUJDX1NDQ1MpICYmICFkZWZpbmVkKGxpbnQpCisjaWYgMAorc3RhdGljIGNoYXIgc2Njc2lkW10gPSAiQCgjKXJlZ2NvbXAuYwk4LjUgKEJlcmtlbGV5KSAzLzIwLzk0IjsKKyNlbHNlCitfX1JDU0lEKCIkTmV0QlNEOiByZWdjb21wLmMsdiAxLjMzIDIwMTIvMDMvMTMgMjE6MTM6NDMgY2hyaXN0b3MgRXhwICQiKTsKKyNlbmRpZgorI2VuZGlmIC8qIExJQkNfU0NDUyBhbmQgbm90IGxpbnQgKi8KKworI2luY2x1ZGUgIm5hbWVzcGFjZS5oIgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxsaW1pdHMuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHJlZ2V4Lmg+CisKKyNpZmRlZiBfX3dlYWtfYWxpYXMKK19fd2Vha19hbGlhcyhyZWdjb21wLF9yZWdjb21wKQorI2VuZGlmCisKKyNpbmNsdWRlICJ1dGlscy5oIgorI2luY2x1ZGUgInJlZ2V4Mi5oIgorCisjaW5jbHVkZSAiY2NsYXNzLmgiCisjaW5jbHVkZSAiY25hbWUuaCIKKworLyoKKyAqIHBhcnNlIHN0cnVjdHVyZSwgcGFzc2VkIHVwIGFuZCBkb3duIHRvIGF2b2lkIGdsb2JhbCB2YXJpYWJsZXMgYW5kCisgKiBvdGhlciBjbHVtc2luZXNzZXMKKyAqLworc3RydWN0IHBhcnNlIHsKKwljb25zdCBjaGFyICpuZXh0OwkvKiBuZXh0IGNoYXJhY3RlciBpbiBSRSAqLworCWNvbnN0IGNoYXIgKmVuZDsJLyogZW5kIG9mIHN0cmluZyAoLT4gTlVMIG5vcm1hbGx5KSAqLworCWludCBlcnJvcjsJCS8qIGhhcyBhbiBlcnJvciBiZWVuIHNlZW4/ICovCisJc29wICpzdHJpcDsJCS8qIG1hbGxvY2VkIHN0cmlwICovCisJc29wbm8gc3NpemU7CQkvKiBtYWxsb2NlZCBzdHJpcCBzaXplIChhbGxvY2F0ZWQpICovCisJc29wbm8gc2xlbjsJCS8qIG1hbGxvY2VkIHN0cmlwIGxlbmd0aCAodXNlZCkgKi8KKwlzaXplX3QgbmNzYWxsb2M7CS8qIG51bWJlciBvZiBjc2V0cyBhbGxvY2F0ZWQgKi8KKwlzdHJ1Y3QgcmVfZ3V0cyAqZzsKKyMJZGVmaW5lCU5QQVJFTgkxMAkvKiB3ZSBuZWVkIHRvIHJlbWVtYmVyICgpIDEtOSBmb3IgYmFjayByZWZzICovCisJc29wbm8gcGJlZ2luW05QQVJFTl07CS8qIC0+ICggKFswXSB1bnVzZWQpICovCisJc29wbm8gcGVuZFtOUEFSRU5dOwkvKiAtPiApIChbMF0gdW51c2VkKSAqLworfTsKKworLyogPT09PT09PT09IGJlZ2luIGhlYWRlciBnZW5lcmF0ZWQgYnkgLi9ta2ggPT09PT09PT09ICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qID09PSByZWdjb21wLmMgPT09ICovCitzdGF0aWMgdm9pZCBwX2VyZShzdHJ1Y3QgcGFyc2UgKnAsIGludCBzdG9wLCBzaXplX3QgcmVjbGltaXQpOworc3RhdGljIHZvaWQgcF9lcmVfZXhwKHN0cnVjdCBwYXJzZSAqcCwgc2l6ZV90IHJlY2xpbWl0KTsKK3N0YXRpYyB2b2lkIHBfc3RyKHN0cnVjdCBwYXJzZSAqcCk7CitzdGF0aWMgdm9pZCBwX2JyZShzdHJ1Y3QgcGFyc2UgKnAsIGludCBlbmQxLCBpbnQgZW5kMiwgc2l6ZV90IHJlY2xpbWl0KTsKK3N0YXRpYyBpbnQgcF9zaW1wX3JlKHN0cnVjdCBwYXJzZSAqcCwgaW50IHN0YXJvcmRpbmFyeSwgc2l6ZV90IHJlY2xpbWl0KTsKK3N0YXRpYyBpbnQgcF9jb3VudChzdHJ1Y3QgcGFyc2UgKnApOworc3RhdGljIHZvaWQgcF9icmFja2V0KHN0cnVjdCBwYXJzZSAqcCk7CitzdGF0aWMgdm9pZCBwX2JfdGVybShzdHJ1Y3QgcGFyc2UgKnAsIGNzZXQgKmNzKTsKK3N0YXRpYyB2b2lkIHBfYl9jY2xhc3Moc3RydWN0IHBhcnNlICpwLCBjc2V0ICpjcyk7CitzdGF0aWMgdm9pZCBwX2JfZWNsYXNzKHN0cnVjdCBwYXJzZSAqcCwgY3NldCAqY3MpOworc3RhdGljIGNoYXIgcF9iX3N5bWJvbChzdHJ1Y3QgcGFyc2UgKnApOworc3RhdGljIGNoYXIgcF9iX2NvbGxfZWxlbShzdHJ1Y3QgcGFyc2UgKnAsIGludCBlbmRjKTsKK3N0YXRpYyBpbnQgb3RoZXJjYXNlKGludCBjaCk7CitzdGF0aWMgdm9pZCBib3RoY2FzZXMoc3RydWN0IHBhcnNlICpwLCBpbnQgY2gpOworc3RhdGljIHZvaWQgb3JkaW5hcnkoc3RydWN0IHBhcnNlICpwLCBpbnQgY2gpOworc3RhdGljIHZvaWQgbm9ubmV3bGluZShzdHJ1Y3QgcGFyc2UgKnApOworc3RhdGljIHZvaWQgcmVwZWF0KHN0cnVjdCBwYXJzZSAqcCwgc29wbm8gc3RhcnQsIGludCBmcm9tLCBpbnQgdG8sIHNpemVfdCByZWNsaW1pdCk7CitzdGF0aWMgaW50IHNldGVycihzdHJ1Y3QgcGFyc2UgKnAsIGludCBlKTsKK3N0YXRpYyBjc2V0ICphbGxvY3NldChzdHJ1Y3QgcGFyc2UgKnApOworc3RhdGljIHZvaWQgZnJlZXNldChzdHJ1Y3QgcGFyc2UgKnAsIGNzZXQgKmNzKTsKK3N0YXRpYyBzb3BubyBmcmVlemVzZXQoc3RydWN0IHBhcnNlICpwLCBjc2V0ICpjcyk7CitzdGF0aWMgaW50IGZpcnN0Y2goc3RydWN0IHBhcnNlICpwLCBjc2V0ICpjcyk7CitzdGF0aWMgaW50IG5jaChzdHJ1Y3QgcGFyc2UgKnAsIGNzZXQgKmNzKTsKK3N0YXRpYyB2b2lkIG1jYWRkKHN0cnVjdCBwYXJzZSAqcCwgY3NldCAqY3MsIGNvbnN0IGNoYXIgKmNwKTsKKyNpZiAwCitzdGF0aWMgdm9pZCBtY3N1Yihjc2V0ICpjcywgY2hhciAqY3ApOworc3RhdGljIGludCBtY2luKGNzZXQgKmNzLCBjaGFyICpjcCk7CitzdGF0aWMgY2hhciAqbWNmaW5kKGNzZXQgKmNzLCBjaGFyICpjcCk7CisjZW5kaWYKK3N0YXRpYyB2b2lkIG1jaW52ZXJ0KHN0cnVjdCBwYXJzZSAqcCwgY3NldCAqY3MpOworc3RhdGljIHZvaWQgbWNjYXNlKHN0cnVjdCBwYXJzZSAqcCwgY3NldCAqY3MpOworc3RhdGljIGludCBpc2luc2V0cyhzdHJ1Y3QgcmVfZ3V0cyAqZywgaW50IGMpOworc3RhdGljIGludCBzYW1lc2V0cyhzdHJ1Y3QgcmVfZ3V0cyAqZywgaW50IGMxLCBpbnQgYzIpOworc3RhdGljIHZvaWQgY2F0ZWdvcml6ZShzdHJ1Y3QgcGFyc2UgKnAsIHN0cnVjdCByZV9ndXRzICpnKTsKK3N0YXRpYyBzb3BubyBkdXBsKHN0cnVjdCBwYXJzZSAqcCwgc29wbm8gc3RhcnQsIHNvcG5vIGZpbmlzaCk7CitzdGF0aWMgdm9pZCBkb2VtaXQoc3RydWN0IHBhcnNlICpwLCBzb3Agb3AsIHNvcG5vIG9wbmQpOworc3RhdGljIHZvaWQgZG9pbnNlcnQoc3RydWN0IHBhcnNlICpwLCBzb3Agb3AsIHNvcG5vIG9wbmQsIHNvcG5vIHBvcyk7CitzdGF0aWMgdm9pZCBkb2Z3ZChzdHJ1Y3QgcGFyc2UgKnAsIHNvcG5vIHBvcywgc29wbm8gdmFsdWUpOworc3RhdGljIGludCBlbmxhcmdlKHN0cnVjdCBwYXJzZSAqcCwgc29wbm8gc2l6ZSk7CitzdGF0aWMgdm9pZCBzdHJpcHNudWcoc3RydWN0IHBhcnNlICpwLCBzdHJ1Y3QgcmVfZ3V0cyAqZyk7CitzdGF0aWMgdm9pZCBmaW5kbXVzdChzdHJ1Y3QgcGFyc2UgKnAsIHN0cnVjdCByZV9ndXRzICpnKTsKK3N0YXRpYyBzb3BubyBwbHVzY291bnQoc3RydWN0IHBhcnNlICpwLCBzdHJ1Y3QgcmVfZ3V0cyAqZyk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisvKiA9PT09PT09PT0gZW5kIGhlYWRlciBnZW5lcmF0ZWQgYnkgLi9ta2ggPT09PT09PT09ICovCisKK3N0YXRpYyBjaGFyIG51bHNbMTBdOwkJLyogcGxhY2UgdG8gcG9pbnQgc2Nhbm5lciBpbiBldmVudCBvZiBlcnJvciAqLworCisvKgorICogbWFjcm9zIGZvciB1c2Ugd2l0aCBwYXJzZSBzdHJ1Y3R1cmUKKyAqIEJFV0FSRTogIHRoZXNlIGtub3cgdGhhdCB0aGUgcGFyc2Ugc3RydWN0dXJlIGlzIG5hbWVkIGBwJyAhISEKKyAqLworI2RlZmluZQlQRUVLKCkJKCpwLT5uZXh0KQorI2RlZmluZQlQRUVLMigpCSgqKHAtPm5leHQrMSkpCisjZGVmaW5lCU1PUkUoKQkocC0+bmV4dCA8IHAtPmVuZCkKKyNkZWZpbmUJTU9SRTIoKQkocC0+bmV4dCsxIDwgcC0+ZW5kKQorI2RlZmluZQlTRUUoYykJKE1PUkUoKSAmJiBQRUVLKCkgPT0gKGMpKQorI2RlZmluZQlTRUVUV08oYSwgYikJKE1PUkUoKSAmJiBNT1JFMigpICYmIFBFRUsoKSA9PSAoYSkgJiYgUEVFSzIoKSA9PSAoYikpCisjZGVmaW5lCUVBVChjKQkoKFNFRShjKSkgPyAoTkVYVCgpLCAxKSA6IDApCisjZGVmaW5lCUVBVFRXTyhhLCBiKQkoKFNFRVRXTyhhLCBiKSkgPyAoTkVYVDIoKSwgMSkgOiAwKQorI2RlZmluZQlORVhUKCkJKHAtPm5leHQrKykKKyNkZWZpbmUJTkVYVDIoKQkocC0+bmV4dCArPSAyKQorI2RlZmluZQlORVhUbihuKQkocC0+bmV4dCArPSAobikpCisjZGVmaW5lCUdFVE5FWFQoKQkoKnAtPm5leHQrKykKKyNkZWZpbmUJU0VURVJST1IoZSkJc2V0ZXJyKHAsIChlKSkKKyNkZWZpbmUJUkVRVUlSRShjbywgZSkJKHZvaWQpICgoY28pIHx8IFNFVEVSUk9SKGUpKQorI2RlZmluZQlNVVNUU0VFKGMsIGUpCShSRVFVSVJFKE1PUkUoKSAmJiBQRUVLKCkgPT0gKGMpLCBlKSkKKyNkZWZpbmUJTVVTVEVBVChjLCBlKQkodm9pZCkgKFJFUVVJUkUoTU9SRSgpICYmIEdFVE5FWFQoKSA9PSAoYyksIGUpKQorI2RlZmluZQlNVVNUTk9UU0VFKGMsIGUpCShSRVFVSVJFKCFNT1JFKCkgfHwgUEVFSygpICE9IChjKSwgZSkpCisjZGVmaW5lCUVNSVQob3AsIHNvcG5kKQlkb2VtaXQocCwgKHNvcCkob3ApLCBzb3BuZCkKKyNkZWZpbmUJSU5TRVJUKG9wLCBwb3MpCWRvaW5zZXJ0KHAsIChzb3ApKG9wKSwgSEVSRSgpLShwb3MpKzEsIHBvcykKKyNkZWZpbmUJQUhFQUQocG9zKQkJZG9md2QocCwgcG9zLCBIRVJFKCktKHBvcykpCisjZGVmaW5lCUFTVEVSTihzb3AsIHBvcykJRU1JVChzb3AsIEhFUkUoKS1wb3MpCisjZGVmaW5lCUhFUkUoKQkJKHAtPnNsZW4pCisjZGVmaW5lCVRIRVJFKCkJCShwLT5zbGVuIC0gMSkKKyNkZWZpbmUJVEhFUkVUSEVSRSgpCShwLT5zbGVuIC0gMikKKyNkZWZpbmUJRFJPUChuKQkocC0+c2xlbiAtPSAobikpCisKKyNpZm5kZWYgTkRFQlVHCitzdGF0aWMgaW50IG5ldmVyID0gMDsJCS8qIGZvciB1c2UgaW4gYXNzZXJ0czsgc2h1dHMgbGludCB1cCAqLworI2Vsc2UKKyNkZWZpbmUJbmV2ZXIJMAkJLyogc29tZSA8YXNzZXJ0Lmg+cyBoYXZlIGJ1Z3MgdG9vICovCisjZW5kaWYKKworI2RlZmluZQlNRU1MSU1JVAkweDgwMDAwMDAKKyNkZWZpbmUgTUVNU0laRShwKSBcCisJKChwKS0+bmNzYWxsb2MgLyBDSEFSX0JJVCAqIChwKS0+Zy0+Y3NldHNpemUgKyBcCisJKHApLT5uY3NhbGxvYyAqIHNpemVvZihjc2V0KSArIFwKKwkocCktPnNzaXplICogc2l6ZW9mKHNvcCkpCisjZGVmaW5lCVJFQ0xJTUlUCTI1NgorCisvKgorIC0gcmVnY29tcCAtIGludGVyZmFjZSBmb3IgcGFyc2VyIGFuZCBjb21waWxhdGlvbgorID0gZXh0ZXJuIGludCByZWdjb21wKHJlZ2V4X3QgKiwgY29uc3QgY2hhciAqLCBpbnQpOworID0gI2RlZmluZQlSRUdfQkFTSUMJMDAwMAorID0gI2RlZmluZQlSRUdfRVhURU5ERUQJMDAwMQorID0gI2RlZmluZQlSRUdfSUNBU0UJMDAwMgorID0gI2RlZmluZQlSRUdfTk9TVUIJMDAwNAorID0gI2RlZmluZQlSRUdfTkVXTElORQkwMDEwCisgPSAjZGVmaW5lCVJFR19OT1NQRUMJMDAyMAorID0gI2RlZmluZQlSRUdfUEVORAkwMDQwCisgPSAjZGVmaW5lCVJFR19EVU1QCTAyMDAKKyAqLworaW50CQkJCS8qIDAgc3VjY2Vzcywgb3RoZXJ3aXNlIFJFR19zb21ldGhpbmcgKi8KK3JlZ2NvbXAoCisgICAgcmVnZXhfdCAqcHJlZywKKyAgICBjb25zdCBjaGFyICpwYXR0ZXJuLAorICAgIGludCBjZmxhZ3MpCit7CisJc3RydWN0IHBhcnNlIHBhOworCXN0cnVjdCByZV9ndXRzICpnOworCXN0cnVjdCBwYXJzZSAqcCA9ICZwYTsKKwlpbnQgaTsKKwlzaXplX3QgbGVuOworI2lmZGVmIFJFREVCVUcKKyMJZGVmaW5lCUdPT0RGTEFHUyhmKQkoZikKKyNlbHNlCisjCWRlZmluZQlHT09ERkxBR1MoZikJKChmKSZ+UkVHX0RVTVApCisjZW5kaWYKKworCV9ESUFHQVNTRVJUKHByZWcgIT0gTlVMTCk7CisJX0RJQUdBU1NFUlQocGF0dGVybiAhPSBOVUxMKTsKKworCWNmbGFncyA9IEdPT0RGTEFHUyhjZmxhZ3MpOworCWlmICgoY2ZsYWdzJlJFR19FWFRFTkRFRCkgJiYgKGNmbGFncyZSRUdfTk9TUEVDKSkKKwkJcmV0dXJuKFJFR19JTlZBUkcpOworCisJaWYgKGNmbGFncyZSRUdfUEVORCkgeworCQlpZiAocHJlZy0+cmVfZW5kcCA8IHBhdHRlcm4pCisJCQlyZXR1cm4oUkVHX0lOVkFSRyk7CisJCWxlbiA9IHByZWctPnJlX2VuZHAgLSBwYXR0ZXJuOworCX0gZWxzZQorCQlsZW4gPSBzdHJsZW4ocGF0dGVybik7CisKKwkvKiBkbyB0aGUgbWFsbG9jcyBlYXJseSBzbyBmYWlsdXJlIGhhbmRsaW5nIGlzIGVhc3kgKi8KKwlnID0gKHN0cnVjdCByZV9ndXRzICopbWFsbG9jKHNpemVvZihzdHJ1Y3QgcmVfZ3V0cykgKworCQkJCQkJCShOQy0xKSpzaXplb2YoY2F0X3QpKTsKKwlpZiAoZyA9PSBOVUxMKQorCQlyZXR1cm4oUkVHX0VTUEFDRSk7CisJcC0+c3NpemUgPSBsZW4vKHNpemVfdCkyKihzaXplX3QpMyArIChzaXplX3QpMTsJLyogdWdoICovCisJcC0+c3RyaXAgPSBtYWxsb2MocC0+c3NpemUgKiBzaXplb2Yoc29wKSk7CisJcC0+c2xlbiA9IDA7CisJaWYgKHAtPnN0cmlwID09IE5VTEwpIHsKKwkJZnJlZShnKTsKKwkJcmV0dXJuKFJFR19FU1BBQ0UpOworCX0KKworCS8qIHNldCB0aGluZ3MgdXAgKi8KKwlwLT5nID0gZzsKKwlwLT5uZXh0ID0gcGF0dGVybjsKKwlwLT5lbmQgPSBwLT5uZXh0ICsgbGVuOworCXAtPmVycm9yID0gMDsKKwlwLT5uY3NhbGxvYyA9IDA7CisJZm9yIChpID0gMDsgaSA8IE5QQVJFTjsgaSsrKSB7CisJCXAtPnBiZWdpbltpXSA9IDA7CisJCXAtPnBlbmRbaV0gPSAwOworCX0KKwlnLT5jc2V0c2l6ZSA9IE5DOworCWctPnNldHMgPSBOVUxMOworCWctPnNldGJpdHMgPSBOVUxMOworCWctPm5jc2V0cyA9IDA7CisJZy0+Y2ZsYWdzID0gY2ZsYWdzOworCWctPmlmbGFncyA9IDA7CisJZy0+bmJvbCA9IDA7CisJZy0+bmVvbCA9IDA7CisJZy0+bXVzdCA9IE5VTEw7CisJZy0+bWxlbiA9IDA7CisJZy0+bnN1YiA9IDA7CisJZy0+bmNhdGVnb3JpZXMgPSAxOwkvKiBjYXRlZ29yeSAwIGlzICJldmVyeXRoaW5nIGVsc2UiICovCisJZy0+Y2F0ZWdvcmllcyA9ICZnLT5jYXRzcGFjZVstKENIQVJfTUlOKV07CisJKHZvaWQpIG1lbXNldCgoY2hhciAqKWctPmNhdHNwYWNlLCAwLCBOQypzaXplb2YoY2F0X3QpKTsKKwlnLT5iYWNrcmVmcyA9IDA7CisKKwkvKiBkbyBpdCAqLworCUVNSVQoT0VORCwgMCk7CisJZy0+Zmlyc3RzdGF0ZSA9IFRIRVJFKCk7CisJaWYgKGNmbGFncyZSRUdfRVhURU5ERUQpCisJCXBfZXJlKHAsIE9VVCwgMCk7CisJZWxzZSBpZiAoY2ZsYWdzJlJFR19OT1NQRUMpCisJCXBfc3RyKHApOworCWVsc2UKKwkJcF9icmUocCwgT1VULCBPVVQsIDApOworCUVNSVQoT0VORCwgMCk7CisJZy0+bGFzdHN0YXRlID0gVEhFUkUoKTsKKworCS8qIHRpZHkgdXAgbG9vc2UgZW5kcyBhbmQgZmlsbCB0aGluZ3MgaW4gKi8KKwljYXRlZ29yaXplKHAsIGcpOworCXN0cmlwc251ZyhwLCBnKTsKKwlmaW5kbXVzdChwLCBnKTsKKwlnLT5ucGx1cyA9IHBsdXNjb3VudChwLCBnKTsKKwlnLT5tYWdpYyA9IE1BR0lDMjsKKwlwcmVnLT5yZV9uc3ViID0gZy0+bnN1YjsKKwlwcmVnLT5yZV9nID0gZzsKKwlwcmVnLT5yZV9tYWdpYyA9IE1BR0lDMTsKKyNpZm5kZWYgUkVERUJVRworCS8qIG5vdCBkZWJ1Z2dpbmcsIHNvIGNhbid0IHJlbHkgb24gdGhlIGFzc2VydCgpIGluIHJlZ2V4ZWMoKSAqLworCWlmIChnLT5pZmxhZ3MmQkFEKQorCQlTRVRFUlJPUihSRUdfQVNTRVJUKTsKKyNlbmRpZgorCisJLyogd2luIG9yIGxvc2UsIHdlJ3JlIGRvbmUgKi8KKwlpZiAocC0+ZXJyb3IgIT0gMCkJLyogbG9zZSAqLworCQlyZWdmcmVlKHByZWcpOworCXJldHVybihwLT5lcnJvcik7Cit9CisKKy8qCisgLSBwX2VyZSAtIEVSRSBwYXJzZXIgdG9wIGxldmVsLCBjb25jYXRlbmF0aW9uIGFuZCBhbHRlcm5hdGlvbgorID09IHN0YXRpYyB2b2lkIHBfZXJlKHN0cnVjdCBwYXJzZSAqcCwgaW50IHN0b3AsIHNpemVfdCByZWNsaW1pdCk7CisgKi8KK3N0YXRpYyB2b2lkCitwX2VyZSgKKyAgICBzdHJ1Y3QgcGFyc2UgKnAsCisgICAgaW50IHN0b3AsCQkJLyogY2hhcmFjdGVyIHRoaXMgRVJFIHNob3VsZCBlbmQgYXQgKi8KKyAgICBzaXplX3QgcmVjbGltaXQpCit7CisJY2hhciBjOworCXNvcG5vIHByZXZiYWNrID0gMDsJLyogcGFjaWZ5IGdjYyAqLworCXNvcG5vIHByZXZmd2QgPSAwOyAJLyogcGFjaWZ5IGdjYyAqLworCXNvcG5vIGNvbmM7CisJaW50IGZpcnN0ID0gMTsJCS8qIGlzIHRoaXMgdGhlIGZpcnN0IGFsdGVybmF0aXZlPyAqLworCisJX0RJQUdBU1NFUlQocCAhPSBOVUxMKTsKKworCWlmIChyZWNsaW1pdCsrID4gUkVDTElNSVQgfHwgcC0+ZXJyb3IgPT0gUkVHX0VTUEFDRSkgeworCQlwLT5lcnJvciA9IFJFR19FU1BBQ0U7CisJCXJldHVybjsKKwl9CisKKwlmb3IgKDs7KSB7CisJCS8qIGRvIGEgYnVuY2ggb2YgY29uY2F0ZW5hdGVkIGV4cHJlc3Npb25zICovCisJCWNvbmMgPSBIRVJFKCk7CisJCXdoaWxlIChNT1JFKCkgJiYgKGMgPSBQRUVLKCkpICE9ICd8JyAmJiBjICE9IHN0b3ApCisJCQlwX2VyZV9leHAocCwgcmVjbGltaXQpOworCQlSRVFVSVJFKEhFUkUoKSAhPSBjb25jLCBSRUdfRU1QVFkpOwkvKiByZXF1aXJlIG5vbmVtcHR5ICovCisKKwkJaWYgKCFFQVQoJ3wnKSkKKwkJCWJyZWFrOwkJLyogTk9URSBCUkVBSyBPVVQgKi8KKworCQlpZiAoZmlyc3QpIHsKKwkJCUlOU0VSVChPQ0hfLCBjb25jKTsJLyogb2Zmc2V0IGlzIHdyb25nICovCisJCQlwcmV2ZndkID0gY29uYzsKKwkJCXByZXZiYWNrID0gY29uYzsKKwkJCWZpcnN0ID0gMDsKKwkJfQorCQlBU1RFUk4oT09SMSwgcHJldmJhY2spOworCQlwcmV2YmFjayA9IFRIRVJFKCk7CisJCUFIRUFEKHByZXZmd2QpOwkJCS8qIGZpeCBwcmV2aW91cyBvZmZzZXQgKi8KKwkJcHJldmZ3ZCA9IEhFUkUoKTsKKwkJRU1JVChPT1IyLCAwKTsJCQkvKiBvZmZzZXQgaXMgdmVyeSB3cm9uZyAqLworCX0KKworCWlmICghZmlyc3QpIHsJCS8qIHRhaWwtZW5kIGZpeHVwcyAqLworCQlBSEVBRChwcmV2ZndkKTsKKwkJQVNURVJOKE9fQ0gsIHByZXZiYWNrKTsKKwl9CisKKwlhc3NlcnQoIU1PUkUoKSB8fCBTRUUoc3RvcCkpOworfQorCisvKgorIC0gcF9lcmVfZXhwIC0gcGFyc2Ugb25lIHN1YkVSRSwgYW4gYXRvbSBwb3NzaWJseSBmb2xsb3dlZCBieSBhIHJlcGV0aXRpb24gb3AKKyA9PSBzdGF0aWMgdm9pZCBwX2VyZV9leHAoc3RydWN0IHBhcnNlICpwLCBzaXplX3QgcmVjbGltaXQpOworICovCitzdGF0aWMgdm9pZAorcF9lcmVfZXhwKAorICAgIHN0cnVjdCBwYXJzZSAqcCwKKyAgICBzaXplX3QgcmVjbGltaXQpCit7CisJY2hhciBjOworCXNvcG5vIHBvczsKKwlpbnQgY291bnQ7CisJaW50IGNvdW50MjsKKwlzb3BubyBzdWJubzsKKwlpbnQgd2FzY2FyZXQgPSAwOworCisJX0RJQUdBU1NFUlQocCAhPSBOVUxMKTsKKworCWFzc2VydChNT1JFKCkpOwkJLyogY2FsbGVyIHNob3VsZCBoYXZlIGVuc3VyZWQgdGhpcyAqLworCWMgPSBHRVRORVhUKCk7CisKKwlwb3MgPSBIRVJFKCk7CisJc3dpdGNoIChjKSB7CisJY2FzZSAnKCc6CisJCVJFUVVJUkUoTU9SRSgpLCBSRUdfRVBBUkVOKTsKKwkJcC0+Zy0+bnN1YisrOworCQlzdWJubyA9IHAtPmctPm5zdWI7CisJCWlmIChzdWJubyA8IE5QQVJFTikKKwkJCXAtPnBiZWdpbltzdWJub10gPSBIRVJFKCk7CisJCUVNSVQoT0xQQVJFTiwgc3Vibm8pOworCQlpZiAoIVNFRSgnKScpKQorCQkJcF9lcmUocCwgJyknLCByZWNsaW1pdCk7CisJCWlmIChzdWJubyA8IE5QQVJFTikgeworCQkJcC0+cGVuZFtzdWJub10gPSBIRVJFKCk7CisJCQlhc3NlcnQocC0+cGVuZFtzdWJub10gIT0gMCk7CisJCX0KKwkJRU1JVChPUlBBUkVOLCBzdWJubyk7CisJCU1VU1RFQVQoJyknLCBSRUdfRVBBUkVOKTsKKwkJYnJlYWs7CisjaWZuZGVmIFBPU0lYX01JU1RBS0UKKwljYXNlICcpJzoJCS8qIGhhcHBlbnMgb25seSBpZiBubyBjdXJyZW50IHVubWF0Y2hlZCAoICovCisJCS8qCisJCSAqIFlvdSBtYXkgYXNrLCB3aHkgdGhlIGlmbmRlZj8gIEJlY2F1c2UgSSBkaWRuJ3Qgbm90aWNlCisJCSAqIHRoaXMgdW50aWwgc2xpZ2h0bHkgdG9vIGxhdGUgZm9yIDEwMDMuMiwgYW5kIG5vbmUgb2YgdGhlCisJCSAqIG90aGVyIDEwMDMuMiByZWd1bGFyLWV4cHJlc3Npb24gcmV2aWV3ZXJzIG5vdGljZWQgaXQgYXQKKwkJICogYWxsLiAgU28gYW4gdW5tYXRjaGVkICkgaXMgbGVnYWwgUE9TSVgsIGF0IGxlYXN0IHVudGlsCisJCSAqIHdlIGNhbiBnZXQgaXQgZml4ZWQuCisJCSAqLworCQlTRVRFUlJPUihSRUdfRVBBUkVOKTsKKwkJYnJlYWs7CisjZW5kaWYKKwljYXNlICdeJzoKKwkJRU1JVChPQk9MLCAwKTsKKwkJcC0+Zy0+aWZsYWdzIHw9IFVTRUJPTDsKKwkJcC0+Zy0+bmJvbCsrOworCQl3YXNjYXJldCA9IDE7CisJCWJyZWFrOworCWNhc2UgJyQnOgorCQlFTUlUKE9FT0wsIDApOworCQlwLT5nLT5pZmxhZ3MgfD0gVVNFRU9MOworCQlwLT5nLT5uZW9sKys7CisJCWJyZWFrOworCWNhc2UgJ3wnOgorCQlTRVRFUlJPUihSRUdfRU1QVFkpOworCQlicmVhazsKKwljYXNlICcqJzoKKwljYXNlICcrJzoKKwljYXNlICc/JzoKKwkJU0VURVJST1IoUkVHX0JBRFJQVCk7CisJCWJyZWFrOworCWNhc2UgJy4nOgorCQlpZiAocC0+Zy0+Y2ZsYWdzJlJFR19ORVdMSU5FKQorCQkJbm9ubmV3bGluZShwKTsKKwkJZWxzZQorCQkJRU1JVChPQU5ZLCAwKTsKKwkJYnJlYWs7CisJY2FzZSAnWyc6CisJCXBfYnJhY2tldChwKTsKKwkJYnJlYWs7CisJY2FzZSAnXFwnOgorCQlSRVFVSVJFKE1PUkUoKSwgUkVHX0VFU0NBUEUpOworCQljID0gR0VUTkVYVCgpOworCQlvcmRpbmFyeShwLCBjKTsKKwkJYnJlYWs7CisJY2FzZSAneyc6CQkvKiBva2F5IGFzIG9yZGluYXJ5IGV4Y2VwdCBpZiBkaWdpdCBmb2xsb3dzICovCisJCVJFUVVJUkUoIU1PUkUoKSB8fCAhaXNkaWdpdCgodW5zaWduZWQgY2hhcilQRUVLKCkpLCBSRUdfQkFEUlBUKTsKKwkJLyogRkFMTFRIUk9VR0ggKi8KKwlkZWZhdWx0OgorCQlvcmRpbmFyeShwLCBjKTsKKwkJYnJlYWs7CisJfQorCisJaWYgKCFNT1JFKCkpCisJCXJldHVybjsKKwljID0gUEVFSygpOworCS8qIHdlIGNhbGwgeyBhIHJlcGV0aXRpb24gaWYgZm9sbG93ZWQgYnkgYSBkaWdpdCAqLworCWlmICghKCBjID09ICcqJyB8fCBjID09ICcrJyB8fCBjID09ICc/JyB8fAorCSAgICAoYyA9PSAneycgJiYgTU9SRTIoKSAmJiBpc2RpZ2l0KCh1bnNpZ25lZCBjaGFyKVBFRUsyKCkpKSApKQorCQlyZXR1cm47CQkvKiBubyByZXBldGl0aW9uLCB3ZSdyZSBkb25lICovCisJTkVYVCgpOworCisJUkVRVUlSRSghd2FzY2FyZXQsIFJFR19CQURSUFQpOworCXN3aXRjaCAoYykgeworCWNhc2UgJyonOgkvKiBpbXBsZW1lbnRlZCBhcyArPyAqLworCQkvKiB0aGlzIGNhc2UgZG9lcyBub3QgcmVxdWlyZSB0aGUgKHl8KSB0cmljaywgbm9LTFVER0UgKi8KKwkJSU5TRVJUKE9QTFVTXywgcG9zKTsKKwkJQVNURVJOKE9fUExVUywgcG9zKTsKKwkJSU5TRVJUKE9RVUVTVF8sIHBvcyk7CisJCUFTVEVSTihPX1FVRVNULCBwb3MpOworCQlicmVhazsKKwljYXNlICcrJzoKKwkJSU5TRVJUKE9QTFVTXywgcG9zKTsKKwkJQVNURVJOKE9fUExVUywgcG9zKTsKKwkJYnJlYWs7CisJY2FzZSAnPyc6CisJCS8qIEtMVURHRTogZW1pdCB5PyBhcyAoeXwpIHVudGlsIHN1YnRsZSBidWcgZ2V0cyBmaXhlZCAqLworCQlJTlNFUlQoT0NIXywgcG9zKTsJCS8qIG9mZnNldCBzbGlnaHRseSB3cm9uZyAqLworCQlBU1RFUk4oT09SMSwgcG9zKTsJCS8qIHRoaXMgb25lJ3MgcmlnaHQgKi8KKwkJQUhFQUQocG9zKTsJCQkvKiBmaXggdGhlIE9DSF8gKi8KKwkJRU1JVChPT1IyLCAwKTsJCQkvKiBvZmZzZXQgdmVyeSB3cm9uZy4uLiAqLworCQlBSEVBRChUSEVSRSgpKTsJCQkvKiAuLi5zbyBmaXggaXQgKi8KKwkJQVNURVJOKE9fQ0gsIFRIRVJFVEhFUkUoKSk7CisJCWJyZWFrOworCWNhc2UgJ3snOgorCQljb3VudCA9IHBfY291bnQocCk7CisJCWlmIChFQVQoJywnKSkgeworCQkJaWYgKGlzZGlnaXQoKHVuc2lnbmVkIGNoYXIpUEVFSygpKSkgeworCQkJCWNvdW50MiA9IHBfY291bnQocCk7CisJCQkJUkVRVUlSRShjb3VudCA8PSBjb3VudDIsIFJFR19CQURCUik7CisJCQl9IGVsc2UJCS8qIHNpbmdsZSBudW1iZXIgd2l0aCBjb21tYSAqLworCQkJCWNvdW50MiA9IElORklOSVRZOworCQl9IGVsc2UJCS8qIGp1c3QgYSBzaW5nbGUgbnVtYmVyICovCisJCQljb3VudDIgPSBjb3VudDsKKwkJcmVwZWF0KHAsIHBvcywgY291bnQsIGNvdW50MiwgMCk7CisJCWlmICghRUFUKCd9JykpIHsJLyogZXJyb3IgaGV1cmlzdGljcyAqLworCQkJd2hpbGUgKE1PUkUoKSAmJiBQRUVLKCkgIT0gJ30nKQorCQkJCU5FWFQoKTsKKwkJCVJFUVVJUkUoTU9SRSgpLCBSRUdfRUJSQUNFKTsKKwkJCVNFVEVSUk9SKFJFR19CQURCUik7CisJCX0KKwkJYnJlYWs7CisJfQorCisJaWYgKCFNT1JFKCkpCisJCXJldHVybjsKKwljID0gUEVFSygpOworCWlmICghKCBjID09ICcqJyB8fCBjID09ICcrJyB8fCBjID09ICc/JyB8fAorCSAgICAoYyA9PSAneycgJiYgTU9SRTIoKSAmJiBpc2RpZ2l0KCh1bnNpZ25lZCBjaGFyKVBFRUsyKCkpKSApICkKKwkJcmV0dXJuOworCVNFVEVSUk9SKFJFR19CQURSUFQpOworfQorCisvKgorIC0gcF9zdHIgLSBzdHJpbmcgKG5vIG1ldGFjaGFyYWN0ZXJzKSAicGFyc2VyIgorID09IHN0YXRpYyB2b2lkIHBfc3RyKHN0cnVjdCBwYXJzZSAqcCk7CisgKi8KK3N0YXRpYyB2b2lkCitwX3N0cigKKyAgICBzdHJ1Y3QgcGFyc2UgKnApCit7CisKKwlfRElBR0FTU0VSVChwICE9IE5VTEwpOworCisJUkVRVUlSRShNT1JFKCksIFJFR19FTVBUWSk7CisJd2hpbGUgKE1PUkUoKSkKKwkJb3JkaW5hcnkocCwgR0VUTkVYVCgpKTsKK30KKworLyoKKyAtIHBfYnJlIC0gQlJFIHBhcnNlciB0b3AgbGV2ZWwsIGFuY2hvcmluZyBhbmQgY29uY2F0ZW5hdGlvbgorID09IHN0YXRpYyB2b2lkIHBfYnJlKHN0cnVjdCBwYXJzZSAqcCwgaW50IGVuZDEsIFwKKyA9PQlpbnQgZW5kMiwgc2l6ZV90IHJlY2xpbWl0KTsKKyAqIEdpdmluZyBlbmQxIGFzIE9VVCBlc3NlbnRpYWxseSBlbGltaW5hdGVzIHRoZSBlbmQxL2VuZDIgY2hlY2suCisgKgorICogVGhpcyBpbXBsZW1lbnRhdGlvbiBpcyBhIGJpdCBvZiBhIGtsdWRnZSwgaW4gdGhhdCBhIHRyYWlsaW5nICQgaXMgZmlyc3QKKyAqIHRha2VuIGFzIGFuIG9yZGluYXJ5IGNoYXJhY3RlciBhbmQgdGhlbiByZXZpc2VkIHRvIGJlIGFuIGFuY2hvci4gIFRoZQorICogb25seSB1bmRlc2lyYWJsZSBzaWRlIGVmZmVjdCBpcyB0aGF0ICckJyBnZXRzIGluY2x1ZGVkIGFzIGEgY2hhcmFjdGVyCisgKiBjYXRlZ29yeSBpbiBzdWNoIGNhc2VzLiAgVGhpcyBpcyBmYWlybHkgaGFybWxlc3M7IG5vdCB3b3J0aCBmaXhpbmcuCisgKiBUaGUgYW1vdW50IG9mIGxvb2thaGVhZCBuZWVkZWQgdG8gYXZvaWQgdGhpcyBrbHVkZ2UgaXMgZXhjZXNzaXZlLgorICovCitzdGF0aWMgdm9pZAorcF9icmUoCisgICAgc3RydWN0IHBhcnNlICpwLAorICAgIGludCBlbmQxLAkJLyogZmlyc3QgdGVybWluYXRpbmcgY2hhcmFjdGVyICovCisgICAgaW50IGVuZDIsCQkvKiBzZWNvbmQgdGVybWluYXRpbmcgY2hhcmFjdGVyICovCisgICAgc2l6ZV90IHJlY2xpbWl0KQoreworCXNvcG5vIHN0YXJ0OworCWludCBmaXJzdCA9IDE7CQkJLyogZmlyc3Qgc3ViZXhwcmVzc2lvbj8gKi8KKwlpbnQgd2FzZG9sbGFyID0gMDsKKworCV9ESUFHQVNTRVJUKHAgIT0gTlVMTCk7CisKKwlpZiAocmVjbGltaXQrKyA+IFJFQ0xJTUlUIHx8IHAtPmVycm9yID09IFJFR19FU1BBQ0UpIHsKKwkJcC0+ZXJyb3IgPSBSRUdfRVNQQUNFOworCQlyZXR1cm47CisJfQorCisJc3RhcnQgPSBIRVJFKCk7CisKKwlpZiAoRUFUKCdeJykpIHsKKwkJRU1JVChPQk9MLCAwKTsKKwkJcC0+Zy0+aWZsYWdzIHw9IFVTRUJPTDsKKwkJcC0+Zy0+bmJvbCsrOworCX0KKwl3aGlsZSAoTU9SRSgpICYmICFTRUVUV08oZW5kMSwgZW5kMikpIHsKKwkJd2FzZG9sbGFyID0gcF9zaW1wX3JlKHAsIGZpcnN0LCByZWNsaW1pdCk7CisJCWZpcnN0ID0gMDsKKwl9CisJaWYgKHdhc2RvbGxhcikgewkvKiBvb3BzLCB0aGF0IHdhcyBhIHRyYWlsaW5nIGFuY2hvciAqLworCQlEUk9QKDEpOworCQlFTUlUKE9FT0wsIDApOworCQlwLT5nLT5pZmxhZ3MgfD0gVVNFRU9MOworCQlwLT5nLT5uZW9sKys7CisJfQorCisJUkVRVUlSRShIRVJFKCkgIT0gc3RhcnQsIFJFR19FTVBUWSk7CS8qIHJlcXVpcmUgbm9uZW1wdHkgKi8KK30KKworLyoKKyAtIHBfc2ltcF9yZSAtIHBhcnNlIGEgc2ltcGxlIFJFLCBhbiBhdG9tIHBvc3NpYmx5IGZvbGxvd2VkIGJ5IGEgcmVwZXRpdGlvbgorID09IHN0YXRpYyBpbnQgcF9zaW1wX3JlKHN0cnVjdCBwYXJzZSAqcCwgaW50IHN0YXJvcmRpbmFyeSwgc2l6ZV90IHJlY2xpbWl0KTsKKyAqLworc3RhdGljIGludAkJCS8qIHdhcyB0aGUgc2ltcGxlIFJFIGFuIHVuYmFja3NsYXNoZWQgJD8gKi8KK3Bfc2ltcF9yZSgKKyAgICBzdHJ1Y3QgcGFyc2UgKnAsCisgICAgaW50IHN0YXJvcmRpbmFyeSwJCS8qIGlzIGEgbGVhZGluZyAqIGFuIG9yZGluYXJ5IGNoYXJhY3Rlcj8gKi8KKyAgICBzaXplX3QgcmVjbGltaXQpCit7CisJaW50IGM7CisJaW50IGNvdW50OworCWludCBjb3VudDI7CisJc29wbm8gcG9zLCBpOworCXNvcG5vIHN1Ym5vOworIwlkZWZpbmUJQkFDS1NMCSgxPDxDSEFSX0JJVCkKKworCV9ESUFHQVNTRVJUKHAgIT0gTlVMTCk7CisKKwlwb3MgPSBIRVJFKCk7CQkvKiByZXBldGlvbiBvcCwgaWYgYW55LCBjb3ZlcnMgZnJvbSBoZXJlICovCisKKwlhc3NlcnQoTU9SRSgpKTsJCS8qIGNhbGxlciBzaG91bGQgaGF2ZSBlbnN1cmVkIHRoaXMgKi8KKwljID0gR0VUTkVYVCgpOworCWlmIChjID09ICdcXCcpIHsKKwkJUkVRVUlSRShNT1JFKCksIFJFR19FRVNDQVBFKTsKKwkJYyA9IEJBQ0tTTCB8ICh1bnNpZ25lZCBjaGFyKUdFVE5FWFQoKTsKKwl9CisJc3dpdGNoIChjKSB7CisJY2FzZSAnLic6CisJCWlmIChwLT5nLT5jZmxhZ3MmUkVHX05FV0xJTkUpCisJCQlub25uZXdsaW5lKHApOworCQllbHNlCisJCQlFTUlUKE9BTlksIDApOworCQlicmVhazsKKwljYXNlICdbJzoKKwkJcF9icmFja2V0KHApOworCQlicmVhazsKKwljYXNlIEJBQ0tTTHwneyc6CisJCVNFVEVSUk9SKFJFR19CQURSUFQpOworCQlicmVhazsKKwljYXNlIEJBQ0tTTHwnKCc6CisJCXAtPmctPm5zdWIrKzsKKwkJc3Vibm8gPSBwLT5nLT5uc3ViOworCQlpZiAoc3Vibm8gPCBOUEFSRU4pCisJCQlwLT5wYmVnaW5bc3Vibm9dID0gSEVSRSgpOworCQlFTUlUKE9MUEFSRU4sIHN1Ym5vKTsKKwkJLyogdGhlIE1PUkUgaGVyZSBpcyBhbiBlcnJvciBoZXVyaXN0aWMgKi8KKwkJaWYgKE1PUkUoKSAmJiAhU0VFVFdPKCdcXCcsICcpJykpCisJCQlwX2JyZShwLCAnXFwnLCAnKScsIHJlY2xpbWl0KTsKKwkJaWYgKHN1Ym5vIDwgTlBBUkVOKSB7CisJCQlwLT5wZW5kW3N1Ym5vXSA9IEhFUkUoKTsKKwkJCWFzc2VydChwLT5wZW5kW3N1Ym5vXSAhPSAwKTsKKwkJfQorCQlFTUlUKE9SUEFSRU4sIHN1Ym5vKTsKKwkJUkVRVUlSRShFQVRUV08oJ1xcJywgJyknKSwgUkVHX0VQQVJFTik7CisJCWJyZWFrOworCWNhc2UgQkFDS1NMfCcpJzoJLyogc2hvdWxkIG5vdCBnZXQgaGVyZSAtLSBtdXN0IGJlIHVzZXIgKi8KKwljYXNlIEJBQ0tTTHwnfSc6CisJCVNFVEVSUk9SKFJFR19FUEFSRU4pOworCQlicmVhazsKKwljYXNlIEJBQ0tTTHwnMSc6CisJY2FzZSBCQUNLU0x8JzInOgorCWNhc2UgQkFDS1NMfCczJzoKKwljYXNlIEJBQ0tTTHwnNCc6CisJY2FzZSBCQUNLU0x8JzUnOgorCWNhc2UgQkFDS1NMfCc2JzoKKwljYXNlIEJBQ0tTTHwnNyc6CisJY2FzZSBCQUNLU0x8JzgnOgorCWNhc2UgQkFDS1NMfCc5JzoKKwkJaSA9IChjJn5CQUNLU0wpIC0gJzAnOworCQlhc3NlcnQoaSA8IE5QQVJFTik7CisJCWlmIChwLT5wZW5kW2ldICE9IDApIHsKKwkJCWFzc2VydChpIDw9IHAtPmctPm5zdWIpOworCQkJRU1JVChPQkFDS18sIGkpOworCQkJYXNzZXJ0KHAtPnBiZWdpbltpXSAhPSAwKTsKKwkJCWFzc2VydChPUChwLT5zdHJpcFtwLT5wYmVnaW5baV1dKSA9PSBPTFBBUkVOKTsKKwkJCWFzc2VydChPUChwLT5zdHJpcFtwLT5wZW5kW2ldXSkgPT0gT1JQQVJFTik7CisJCQkodm9pZCkgZHVwbChwLCBwLT5wYmVnaW5baV0rMSwgcC0+cGVuZFtpXSk7CisJCQlFTUlUKE9fQkFDSywgaSk7CisJCX0gZWxzZQorCQkJU0VURVJST1IoUkVHX0VTVUJSRUcpOworCQlwLT5nLT5iYWNrcmVmcyA9IDE7CisJCWJyZWFrOworCWNhc2UgJyonOgorCQlSRVFVSVJFKHN0YXJvcmRpbmFyeSwgUkVHX0JBRFJQVCk7CisJCS8qIEZBTExUSFJPVUdIICovCisJZGVmYXVsdDoKKwkJb3JkaW5hcnkocCwgYyAmfiBCQUNLU0wpOworCQlicmVhazsKKwl9CisKKwlpZiAoRUFUKCcqJykpIHsJCS8qIGltcGxlbWVudGVkIGFzICs/ICovCisJCS8qIHRoaXMgY2FzZSBkb2VzIG5vdCByZXF1aXJlIHRoZSAoeXwpIHRyaWNrLCBub0tMVURHRSAqLworCQlJTlNFUlQoT1BMVVNfLCBwb3MpOworCQlBU1RFUk4oT19QTFVTLCBwb3MpOworCQlJTlNFUlQoT1FVRVNUXywgcG9zKTsKKwkJQVNURVJOKE9fUVVFU1QsIHBvcyk7CisJfSBlbHNlIGlmIChFQVRUV08oJ1xcJywgJ3snKSkgeworCQljb3VudCA9IHBfY291bnQocCk7CisJCWlmIChFQVQoJywnKSkgeworCQkJaWYgKE1PUkUoKSAmJiBpc2RpZ2l0KCh1bnNpZ25lZCBjaGFyKVBFRUsoKSkpIHsKKwkJCQljb3VudDIgPSBwX2NvdW50KHApOworCQkJCVJFUVVJUkUoY291bnQgPD0gY291bnQyLCBSRUdfQkFEQlIpOworCQkJfSBlbHNlCQkvKiBzaW5nbGUgbnVtYmVyIHdpdGggY29tbWEgKi8KKwkJCQljb3VudDIgPSBJTkZJTklUWTsKKwkJfSBlbHNlCQkvKiBqdXN0IGEgc2luZ2xlIG51bWJlciAqLworCQkJY291bnQyID0gY291bnQ7CisJCXJlcGVhdChwLCBwb3MsIGNvdW50LCBjb3VudDIsIDApOworCQlpZiAoIUVBVFRXTygnXFwnLCAnfScpKSB7CS8qIGVycm9yIGhldXJpc3RpY3MgKi8KKwkJCXdoaWxlIChNT1JFKCkgJiYgIVNFRVRXTygnXFwnLCAnfScpKQorCQkJCU5FWFQoKTsKKwkJCVJFUVVJUkUoTU9SRSgpLCBSRUdfRUJSQUNFKTsKKwkJCVNFVEVSUk9SKFJFR19CQURCUik7CisJCX0KKwl9IGVsc2UgaWYgKGMgPT0gKHVuc2lnbmVkIGNoYXIpJyQnKQkvKiAkIChidXQgbm90IFwkKSBlbmRzIGl0ICovCisJCXJldHVybigxKTsKKworCXJldHVybigwKTsKK30KKworLyoKKyAtIHBfY291bnQgLSBwYXJzZSBhIHJlcGV0aXRpb24gY291bnQKKyA9PSBzdGF0aWMgaW50IHBfY291bnQoc3RydWN0IHBhcnNlICpwKTsKKyAqLworc3RhdGljIGludAkJCS8qIHRoZSB2YWx1ZSAqLworcF9jb3VudCgKKyAgICBzdHJ1Y3QgcGFyc2UgKnApCit7CisJaW50IGNvdW50ID0gMDsKKwlpbnQgbmRpZ2l0cyA9IDA7CisKKwlfRElBR0FTU0VSVChwICE9IE5VTEwpOworCisJd2hpbGUgKE1PUkUoKSAmJiBpc2RpZ2l0KCh1bnNpZ25lZCBjaGFyKVBFRUsoKSkgJiYgY291bnQgPD0gRFVQTUFYKSB7CisJCWNvdW50ID0gY291bnQqMTAgKyAoR0VUTkVYVCgpIC0gJzAnKTsKKwkJbmRpZ2l0cysrOworCX0KKworCVJFUVVJUkUobmRpZ2l0cyA+IDAgJiYgY291bnQgPD0gRFVQTUFYLCBSRUdfQkFEQlIpOworCXJldHVybihjb3VudCk7Cit9CisKKy8qCisgLSBwX2JyYWNrZXQgLSBwYXJzZSBhIGJyYWNrZXRlZCBjaGFyYWN0ZXIgbGlzdAorID09IHN0YXRpYyB2b2lkIHBfYnJhY2tldChzdHJ1Y3QgcGFyc2UgKnApOworICoKKyAqIE5vdGUgYSBzaWduaWZpY2FudCBwcm9wZXJ0eSBvZiB0aGlzIGNvZGU6ICBpZiB0aGUgYWxsb2NzZXQoKSBkaWQgU0VURVJST1IsCisgKiBubyBzZXQgb3BlcmF0aW9ucyBhcmUgZG9uZS4KKyAqLworc3RhdGljIHZvaWQKK3BfYnJhY2tldCgKKyAgICBzdHJ1Y3QgcGFyc2UgKnApCit7CisJY3NldCAqY3M7CisJaW50IGludmVydCA9IDA7CisJX0RJQUdBU1NFUlQocCAhPSBOVUxMKTsKKworCWNzID0gYWxsb2NzZXQocCk7CisJaWYgKGNzID09IE5VTEwpCisJCXJldHVybjsKKworCS8qIERlcHQgb2YgVHJ1bHkgU2lja2VuaW5nIFNwZWNpYWwtQ2FzZSBLbHVkZ2VzICovCisJaWYgKHAtPm5leHQgKyA1IDwgcC0+ZW5kICYmIHN0cm5jbXAocC0+bmV4dCwgIls6PDpdXSIsCisJCQkJCSAgICAoc2l6ZV90KTYpID09IDApIHsKKwkJRU1JVChPQk9XLCAwKTsKKwkJTkVYVG4oNik7CisJCXJldHVybjsKKwl9CisJaWYgKHAtPm5leHQgKyA1IDwgcC0+ZW5kICYmIHN0cm5jbXAocC0+bmV4dCwgIls6PjpdXSIsCisJCQkJCSAgICAoc2l6ZV90KTYpID09IDApIHsKKwkJRU1JVChPRU9XLCAwKTsKKwkJTkVYVG4oNik7CisJCXJldHVybjsKKwl9CisKKwlpZiAoRUFUKCdeJykpCisJCWludmVydCsrOwkvKiBtYWtlIG5vdGUgdG8gaW52ZXJ0IHNldCBhdCBlbmQgKi8KKwlpZiAoRUFUKCddJykpCisJCUNIYWRkKGNzLCAnXScpOworCWVsc2UgaWYgKEVBVCgnLScpKQorCQlDSGFkZChjcywgJy0nKTsKKwl3aGlsZSAoTU9SRSgpICYmIFBFRUsoKSAhPSAnXScgJiYgIVNFRVRXTygnLScsICddJykpCisJCXBfYl90ZXJtKHAsIGNzKTsKKwlpZiAoRUFUKCctJykpCisJCUNIYWRkKGNzLCAnLScpOworCU1VU1RFQVQoJ10nLCBSRUdfRUJSQUNLKTsKKworCWlmIChwLT5lcnJvciAhPSAwKQkvKiBkb24ndCBtZXNzIHRoaW5ncyB1cCBmdXJ0aGVyICovCisJCXJldHVybjsKKworCWlmIChwLT5nLT5jZmxhZ3MmUkVHX0lDQVNFKSB7CisJCXNzaXplX3QgaTsKKwkJaW50IGNpOworCisJCWZvciAoaSA9IHAtPmctPmNzZXRzaXplIC0gMTsgaSA+PSAwOyBpLS0pCisJCQlpZiAoQ0hJTihjcywgaSkgJiYgaXNhbHBoYShpKSkgeworCQkJCWNpID0gb3RoZXJjYXNlKChpbnQpaSk7CisJCQkJaWYgKGNpICE9IGkpCisJCQkJCUNIYWRkKGNzLCBjaSk7CisJCQl9CisJCWlmIChjcy0+bXVsdGlzICE9IE5VTEwpCisJCQltY2Nhc2UocCwgY3MpOworCX0KKwlpZiAoaW52ZXJ0KSB7CisJCXNzaXplX3QgaTsKKworCQlmb3IgKGkgPSBwLT5nLT5jc2V0c2l6ZSAtIDE7IGkgPj0gMDsgaS0tKQorCQkJaWYgKENISU4oY3MsIGkpKQorCQkJCUNIc3ViKGNzLCAoaW50KWkpOworCQkJZWxzZQorCQkJCUNIYWRkKGNzLCAoaW50KWkpOworCQlpZiAocC0+Zy0+Y2ZsYWdzJlJFR19ORVdMSU5FKQorCQkJQ0hzdWIoY3MsICdcbicpOworCQlpZiAoY3MtPm11bHRpcyAhPSBOVUxMKQorCQkJbWNpbnZlcnQocCwgY3MpOworCX0KKworCWFzc2VydChjcy0+bXVsdGlzID09IE5VTEwpOwkJLyogeHh4ICovCisKKwlpZiAobmNoKHAsIGNzKSA9PSAxKSB7CQkvKiBvcHRpbWl6ZSBzaW5nbGV0b24gc2V0cyAqLworCQlvcmRpbmFyeShwLCBmaXJzdGNoKHAsIGNzKSk7CisJCWZyZWVzZXQocCwgY3MpOworCX0gZWxzZQorCQlFTUlUKE9BTllPRiwgZnJlZXplc2V0KHAsIGNzKSk7Cit9CisKKy8qCisgLSBwX2JfdGVybSAtIHBhcnNlIG9uZSB0ZXJtIG9mIGEgYnJhY2tldGVkIGNoYXJhY3RlciBsaXN0CisgPT0gc3RhdGljIHZvaWQgcF9iX3Rlcm0oc3RydWN0IHBhcnNlICpwLCBjc2V0ICpjcyk7CisgKi8KK3N0YXRpYyB2b2lkCitwX2JfdGVybSgKKyAgICBzdHJ1Y3QgcGFyc2UgKnAsCisgICAgY3NldCAqY3MpCit7CisJY2hhciBjOworCWNoYXIgc3RhcnQsIGZpbmlzaDsKKwlpbnQgaTsKKworCV9ESUFHQVNTRVJUKHAgIT0gTlVMTCk7CisJX0RJQUdBU1NFUlQoY3MgIT0gTlVMTCk7CisKKwkvKiBjbGFzc2lmeSB3aGF0IHdlJ3ZlIGdvdCAqLworCXN3aXRjaCAoKE1PUkUoKSkgPyBQRUVLKCkgOiAnXDAnKSB7CisJY2FzZSAnWyc6CisJCWMgPSAoTU9SRTIoKSkgPyBQRUVLMigpIDogJ1wwJzsKKwkJYnJlYWs7CisKKwljYXNlICctJzoKKwkJU0VURVJST1IoUkVHX0VSQU5HRSk7CisJCXJldHVybjsJCQkvKiBOT1RFIFJFVFVSTiAqLworCisJZGVmYXVsdDoKKwkJYyA9ICdcMCc7CisJCWJyZWFrOworCX0KKworCXN3aXRjaCAoYykgeworCWNhc2UgJzonOgkJLyogY2hhcmFjdGVyIGNsYXNzICovCisJCU5FWFQyKCk7CisJCVJFUVVJUkUoTU9SRSgpLCBSRUdfRUJSQUNLKTsKKwkJYyA9IFBFRUsoKTsKKwkJUkVRVUlSRShjICE9ICctJyAmJiBjICE9ICddJywgUkVHX0VDVFlQRSk7CisJCXBfYl9jY2xhc3MocCwgY3MpOworCQlSRVFVSVJFKE1PUkUoKSwgUkVHX0VCUkFDSyk7CisJCVJFUVVJUkUoRUFUVFdPKCc6JywgJ10nKSwgUkVHX0VDVFlQRSk7CisJCWJyZWFrOworCWNhc2UgJz0nOgkJLyogZXF1aXZhbGVuY2UgY2xhc3MgKi8KKwkJTkVYVDIoKTsKKwkJUkVRVUlSRShNT1JFKCksIFJFR19FQlJBQ0spOworCQljID0gUEVFSygpOworCQlSRVFVSVJFKGMgIT0gJy0nICYmIGMgIT0gJ10nLCBSRUdfRUNPTExBVEUpOworCQlwX2JfZWNsYXNzKHAsIGNzKTsKKwkJUkVRVUlSRShNT1JFKCksIFJFR19FQlJBQ0spOworCQlSRVFVSVJFKEVBVFRXTygnPScsICddJyksIFJFR19FQ09MTEFURSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CQkvKiBzeW1ib2wsIG9yZGluYXJ5IGNoYXJhY3Rlciwgb3IgcmFuZ2UgKi8KKy8qIHh4eCByZXZpc2lvbiBuZWVkZWQgZm9yIG11bHRpY2hhciBzdHVmZiAqLworCQlzdGFydCA9IHBfYl9zeW1ib2wocCk7CisJCWlmIChTRUUoJy0nKSAmJiBNT1JFMigpICYmIFBFRUsyKCkgIT0gJ10nKSB7CisJCQkvKiByYW5nZSAqLworCQkJTkVYVCgpOworCQkJaWYgKEVBVCgnLScpKQorCQkJCWZpbmlzaCA9ICctJzsKKwkJCWVsc2UKKwkJCQlmaW5pc2ggPSBwX2Jfc3ltYm9sKHApOworCQl9IGVsc2UKKwkJCWZpbmlzaCA9IHN0YXJ0OworLyogeHh4IHdoYXQgYWJvdXQgc2lnbmVkIGNoYXJzIGhlcmUuLi4gKi8KKwkJUkVRVUlSRShzdGFydCA8PSBmaW5pc2gsIFJFR19FUkFOR0UpOworCQlmb3IgKGkgPSBzdGFydDsgaSA8PSBmaW5pc2g7IGkrKykKKwkJCUNIYWRkKGNzLCBpKTsKKwkJYnJlYWs7CisJfQorfQorCisvKgorIC0gcF9iX2NjbGFzcyAtIHBhcnNlIGEgY2hhcmFjdGVyLWNsYXNzIG5hbWUgYW5kIGRlYWwgd2l0aCBpdAorID09IHN0YXRpYyB2b2lkIHBfYl9jY2xhc3Moc3RydWN0IHBhcnNlICpwLCBjc2V0ICpjcyk7CisgKi8KK3N0YXRpYyB2b2lkCitwX2JfY2NsYXNzKAorICAgIHN0cnVjdCBwYXJzZSAqcCwKKyAgICBjc2V0ICpjcykKK3sKKwljb25zdCBjaGFyICpzcDsKKwljb25zdCBzdHJ1Y3QgY2NsYXNzICpjcDsKKwlzaXplX3QgbGVuOworCWNvbnN0IGNoYXIgKnU7CisJY2hhciBjOworCisJX0RJQUdBU1NFUlQocCAhPSBOVUxMKTsKKwlfRElBR0FTU0VSVChjcyAhPSBOVUxMKTsKKworCXNwID0gcC0+bmV4dDsKKworCXdoaWxlIChNT1JFKCkgJiYgaXNhbHBoYSgodW5zaWduZWQgY2hhcilQRUVLKCkpKQorCQlORVhUKCk7CisJbGVuID0gcC0+bmV4dCAtIHNwOworCWZvciAoY3AgPSBjY2xhc3NlczsgY3AtPm5hbWUgIT0gTlVMTDsgY3ArKykKKwkJaWYgKHN0cm5jbXAoY3AtPm5hbWUsIHNwLCBsZW4pID09IDAgJiYgY3AtPm5hbWVbbGVuXSA9PSAnXDAnKQorCQkJYnJlYWs7CisJaWYgKGNwLT5uYW1lID09IE5VTEwpIHsKKwkJLyogb29wcywgZGlkbid0IGZpbmQgaXQgKi8KKwkJU0VURVJST1IoUkVHX0VDVFlQRSk7CisJCXJldHVybjsKKwl9CisKKwl1ID0gY3AtPmNoYXJzOworCXdoaWxlICgoYyA9ICp1KyspICE9ICdcMCcpCisJCUNIYWRkKGNzLCBjKTsKKwlmb3IgKHUgPSBjcC0+bXVsdGlzOyAqdSAhPSAnXDAnOyB1ICs9IHN0cmxlbih1KSArIDEpCisJCU1DYWRkKHAsIGNzLCB1KTsKK30KKworLyoKKyAtIHBfYl9lY2xhc3MgLSBwYXJzZSBhbiBlcXVpdmFsZW5jZS1jbGFzcyBuYW1lIGFuZCBkZWFsIHdpdGggaXQKKyA9PSBzdGF0aWMgdm9pZCBwX2JfZWNsYXNzKHN0cnVjdCBwYXJzZSAqcCwgY3NldCAqY3MpOworICoKKyAqIFRoaXMgaW1wbGVtZW50YXRpb24gaXMgaW5jb21wbGV0ZS4geHh4CisgKi8KK3N0YXRpYyB2b2lkCitwX2JfZWNsYXNzKAorICAgIHN0cnVjdCBwYXJzZSAqcCwKKyAgICBjc2V0ICpjcykKK3sKKwljaGFyIGM7CisKKwlfRElBR0FTU0VSVChwICE9IE5VTEwpOworCV9ESUFHQVNTRVJUKGNzICE9IE5VTEwpOworCisJYyA9IHBfYl9jb2xsX2VsZW0ocCwgJz0nKTsKKwlDSGFkZChjcywgYyk7Cit9CisKKy8qCisgLSBwX2Jfc3ltYm9sIC0gcGFyc2UgYSBjaGFyYWN0ZXIgb3IgWy4uXWVkIG11bHRpY2hhcmFjdGVyIGNvbGxhdGluZyBzeW1ib2wKKyA9PSBzdGF0aWMgY2hhciBwX2Jfc3ltYm9sKHN0cnVjdCBwYXJzZSAqcCk7CisgKi8KK3N0YXRpYyBjaGFyCQkJLyogdmFsdWUgb2Ygc3ltYm9sICovCitwX2Jfc3ltYm9sKAorICAgIHN0cnVjdCBwYXJzZSAqcCkKK3sKKwljaGFyIHZhbHVlOworCisJX0RJQUdBU1NFUlQocCAhPSBOVUxMKTsKKworCVJFUVVJUkUoTU9SRSgpLCBSRUdfRUJSQUNLKTsKKwlpZiAoIUVBVFRXTygnWycsICcuJykpCisJCXJldHVybihHRVRORVhUKCkpOworCisJLyogY29sbGF0aW5nIHN5bWJvbCAqLworCXZhbHVlID0gcF9iX2NvbGxfZWxlbShwLCAnLicpOworCVJFUVVJUkUoRUFUVFdPKCcuJywgJ10nKSwgUkVHX0VDT0xMQVRFKTsKKwlyZXR1cm4odmFsdWUpOworfQorCisvKgorIC0gcF9iX2NvbGxfZWxlbSAtIHBhcnNlIGEgY29sbGF0aW5nLWVsZW1lbnQgbmFtZSBhbmQgbG9vayBpdCB1cAorID09IHN0YXRpYyBjaGFyIHBfYl9jb2xsX2VsZW0oc3RydWN0IHBhcnNlICpwLCBpbnQgZW5kYyk7CisgKi8KK3N0YXRpYyBjaGFyCQkJLyogdmFsdWUgb2YgY29sbGF0aW5nIGVsZW1lbnQgKi8KK3BfYl9jb2xsX2VsZW0oCisgICAgc3RydWN0IHBhcnNlICpwLAorICAgIGludCBlbmRjKQkJCS8qIG5hbWUgZW5kZWQgYnkgZW5kYywnXScgKi8KK3sKKwljb25zdCBjaGFyICpzcDsKKwljb25zdCBzdHJ1Y3QgY25hbWUgKmNwOworCXNpemVfdCBsZW47CisKKwlfRElBR0FTU0VSVChwICE9IE5VTEwpOworCisJc3AgPSBwLT5uZXh0OworCisJd2hpbGUgKE1PUkUoKSAmJiAhU0VFVFdPKGVuZGMsICddJykpCisJCU5FWFQoKTsKKwlpZiAoIU1PUkUoKSkgeworCQlTRVRFUlJPUihSRUdfRUJSQUNLKTsKKwkJcmV0dXJuKDApOworCX0KKwlsZW4gPSBwLT5uZXh0IC0gc3A7CisJZm9yIChjcCA9IGNuYW1lczsgY3AtPm5hbWUgIT0gTlVMTDsgY3ArKykKKwkJaWYgKHN0cm5jbXAoY3AtPm5hbWUsIHNwLCBsZW4pID09IDAgJiYgY3AtPm5hbWVbbGVuXSA9PSAnXDAnKQorCQkJcmV0dXJuKGNwLT5jb2RlKTsJLyoga25vd24gbmFtZSAqLworCWlmIChsZW4gPT0gMSkKKwkJcmV0dXJuKCpzcCk7CS8qIHNpbmdsZSBjaGFyYWN0ZXIgKi8KKwlTRVRFUlJPUihSRUdfRUNPTExBVEUpOwkJCS8qIG5laXRoZXIgKi8KKwlyZXR1cm4oMCk7Cit9CisKKy8qCisgLSBvdGhlcmNhc2UgLSByZXR1cm4gdGhlIGNhc2UgY291bnRlcnBhcnQgb2YgYW4gYWxwaGFiZXRpYworID09IHN0YXRpYyBpbnQgb3RoZXJjYXNlKGludCBjaCk7CisgKi8KK3N0YXRpYyBpbnQJCQkvKiBpZiBubyBjb3VudGVycGFydCwgcmV0dXJuIGNoICovCitvdGhlcmNhc2UoCisgICAgaW50IGNoKQoreworCWFzc2VydChpc2FscGhhKGNoKSk7CisJaWYgKGlzdXBwZXIoY2gpKQorCQlyZXR1cm4odG9sb3dlcihjaCkpOworCWVsc2UgaWYgKGlzbG93ZXIoY2gpKQorCQlyZXR1cm4odG91cHBlcihjaCkpOworCWVsc2UJCQkvKiBwZWN1bGlhciwgYnV0IGNvdWxkIGhhcHBlbiAqLworCQlyZXR1cm4oY2gpOworfQorCisvKgorIC0gYm90aGNhc2VzIC0gZW1pdCBhIGR1YWxjYXNlIHZlcnNpb24gb2YgYSB0d28tY2FzZSBjaGFyYWN0ZXIKKyA9PSBzdGF0aWMgdm9pZCBib3RoY2FzZXMoc3RydWN0IHBhcnNlICpwLCBpbnQgY2gpOworICoKKyAqIEJveSwgaXMgdGhpcyBpbXBsZW1lbnRhdGlvbiBldmVyIGEga2x1ZGdlLi4uCisgKi8KK3N0YXRpYyB2b2lkCitib3RoY2FzZXMoCisgICAgc3RydWN0IHBhcnNlICpwLAorICAgIGludCBjaCkKK3sKKwljb25zdCBjaGFyICpvbGRuZXh0OworCWNvbnN0IGNoYXIgKm9sZGVuZDsKKwljaGFyIGJyYWNrZXRbM107CisKKwlfRElBR0FTU0VSVChwICE9IE5VTEwpOworCisJb2xkbmV4dCA9IHAtPm5leHQ7CisJb2xkZW5kID0gcC0+ZW5kOworCisJYXNzZXJ0KG90aGVyY2FzZShjaCkgIT0gY2gpOwkvKiBwX2JyYWNrZXQoKSB3b3VsZCByZWN1cnNlICovCisJcC0+bmV4dCA9IGJyYWNrZXQ7CisJcC0+ZW5kID0gYnJhY2tldCsyOworCWJyYWNrZXRbMF0gPSBjaDsKKwlicmFja2V0WzFdID0gJ10nOworCWJyYWNrZXRbMl0gPSAnXDAnOworCXBfYnJhY2tldChwKTsKKwlhc3NlcnQocC0+bmV4dCA9PSBicmFja2V0KzIpOworCXAtPm5leHQgPSBvbGRuZXh0OworCXAtPmVuZCA9IG9sZGVuZDsKK30KKworLyoKKyAtIG9yZGluYXJ5IC0gZW1pdCBhbiBvcmRpbmFyeSBjaGFyYWN0ZXIKKyA9PSBzdGF0aWMgdm9pZCBvcmRpbmFyeShzdHJ1Y3QgcGFyc2UgKnAsIGludCBjaCk7CisgKi8KK3N0YXRpYyB2b2lkCitvcmRpbmFyeSgKKyAgICBzdHJ1Y3QgcGFyc2UgKnAsCisgICAgaW50IGNoKQoreworCWNhdF90ICpjYXA7CisKKwlfRElBR0FTU0VSVChwICE9IE5VTEwpOworCisJY2FwID0gcC0+Zy0+Y2F0ZWdvcmllczsKKwlpZiAoKHAtPmctPmNmbGFncyZSRUdfSUNBU0UpICYmIGlzYWxwaGEoKHVuc2lnbmVkIGNoYXIpIGNoKQorCSAgICAmJiBvdGhlcmNhc2UoKHVuc2lnbmVkIGNoYXIpIGNoKSAhPSAodW5zaWduZWQgY2hhcikgY2gpCisJCWJvdGhjYXNlcyhwLCAodW5zaWduZWQgY2hhcikgY2gpOworCWVsc2UgeworCQlFTUlUKE9DSEFSLCAoc29wbm8pKHVuc2lnbmVkIGNoYXIpY2gpOworCQlpZiAoY2FwW2NoXSA9PSAwKSB7CisJCQlfRElBR0FTU0VSVChfX3R5cGVfZml0KHVuc2lnbmVkIGNoYXIsCisJCQkgICAgcC0+Zy0+bmNhdGVnb3JpZXMgKyAxKSk7CisJCQljYXBbY2hdID0gKHVuc2lnbmVkIGNoYXIpcC0+Zy0+bmNhdGVnb3JpZXMrKzsKKwkJfQorCX0KK30KKworLyoKKyAtIG5vbm5ld2xpbmUgLSBlbWl0IFJFR19ORVdMSU5FIHZlcnNpb24gb2YgT0FOWQorID09IHN0YXRpYyB2b2lkIG5vbm5ld2xpbmUoc3RydWN0IHBhcnNlICpwKTsKKyAqCisgKiBCb3ksIGlzIHRoaXMgaW1wbGVtZW50YXRpb24gZXZlciBhIGtsdWRnZS4uLgorICovCitzdGF0aWMgdm9pZAorbm9ubmV3bGluZSgKKyAgICBzdHJ1Y3QgcGFyc2UgKnApCit7CisJY29uc3QgY2hhciAqb2xkbmV4dDsKKwljb25zdCBjaGFyICpvbGRlbmQ7CisJY2hhciBicmFja2V0WzRdOworCisJX0RJQUdBU1NFUlQocCAhPSBOVUxMKTsKKworCW9sZG5leHQgPSBwLT5uZXh0OworCW9sZGVuZCA9IHAtPmVuZDsKKworCXAtPm5leHQgPSBicmFja2V0OworCXAtPmVuZCA9IGJyYWNrZXQrMzsKKwlicmFja2V0WzBdID0gJ14nOworCWJyYWNrZXRbMV0gPSAnXG4nOworCWJyYWNrZXRbMl0gPSAnXSc7CisJYnJhY2tldFszXSA9ICdcMCc7CisJcF9icmFja2V0KHApOworCWFzc2VydChwLT5uZXh0ID09IGJyYWNrZXQrMyk7CisJcC0+bmV4dCA9IG9sZG5leHQ7CisJcC0+ZW5kID0gb2xkZW5kOworfQorCisvKgorIC0gcmVwZWF0IC0gZ2VuZXJhdGUgY29kZSBmb3IgYSBib3VuZGVkIHJlcGV0aXRpb24sIHJlY3Vyc2l2ZWx5IGlmIG5lZWRlZAorID09IHN0YXRpYyB2b2lkIHJlcGVhdChzdHJ1Y3QgcGFyc2UgKnAsIHNvcG5vIHN0YXJ0LCBpbnQgZnJvbSwgaW50IHRvLAorID09IHNpemVfdCByZWNsaW1pdCk7CisgKi8KK3N0YXRpYyB2b2lkCityZXBlYXQoCisgICAgc3RydWN0IHBhcnNlICpwLAorICAgIHNvcG5vIHN0YXJ0LAkJLyogb3BlcmFuZCBmcm9tIGhlcmUgdG8gZW5kIG9mIHN0cmlwICovCisgICAgaW50IGZyb20sCQkJLyogcmVwZWF0ZWQgZnJvbSB0aGlzIG51bWJlciAqLworICAgIGludCB0bywJCQkvKiB0byB0aGlzIG51bWJlciBvZiB0aW1lcyAobWF5YmUgSU5GSU5JVFkpICovCisgICAgc2l6ZV90IHJlY2xpbWl0KQoreworCXNvcG5vIGZpbmlzaDsKKyMJZGVmaW5lCU4JMgorIwlkZWZpbmUJSU5GCTMKKyMJZGVmaW5lCVJFUChmLCB0KQkoKGYpKjggKyAodCkpCisjCWRlZmluZQlNQVAobikJKCgobikgPD0gMSkgPyAobikgOiAoKG4pID09IElORklOSVRZKSA/IElORiA6IE4pCisJc29wbm8gY29weTsKKworCV9ESUFHQVNTRVJUKHAgIT0gTlVMTCk7CisKKwlpZiAocmVjbGltaXQrKyA+IFJFQ0xJTUlUKSAKKwkJcC0+ZXJyb3IgPSBSRUdfRVNQQUNFOworCWlmIChwLT5lcnJvcikKKwkJcmV0dXJuOworCisJZmluaXNoID0gSEVSRSgpOworCisJYXNzZXJ0KGZyb20gPD0gdG8pOworCisJc3dpdGNoIChSRVAoTUFQKGZyb20pLCBNQVAodG8pKSkgeworCWNhc2UgUkVQKDAsIDApOgkJCS8qIG11c3QgYmUgdXNlciBkb2luZyB0aGlzICovCisJCURST1AoZmluaXNoLXN0YXJ0KTsJLyogZHJvcCB0aGUgb3BlcmFuZCAqLworCQlicmVhazsKKwljYXNlIFJFUCgwLCAxKToJCQkvKiBhcyB4ezEsMX0/ICovCisJY2FzZSBSRVAoMCwgTik6CQkJLyogYXMgeHsxLG59PyAqLworCWNhc2UgUkVQKDAsIElORik6CQkvKiBhcyB4ezEsfT8gKi8KKwkJLyogS0xVREdFOiBlbWl0IHk/IGFzICh5fCkgdW50aWwgc3VidGxlIGJ1ZyBnZXRzIGZpeGVkICovCisJCUlOU0VSVChPQ0hfLCBzdGFydCk7CQkvKiBvZmZzZXQgaXMgd3JvbmcuLi4gKi8KKwkJcmVwZWF0KHAsIHN0YXJ0KzEsIDEsIHRvLCByZWNsaW1pdCk7CisJCUFTVEVSTihPT1IxLCBzdGFydCk7CisJCUFIRUFEKHN0YXJ0KTsJCQkvKiAuLi4gZml4IGl0ICovCisJCUVNSVQoT09SMiwgMCk7CisJCUFIRUFEKFRIRVJFKCkpOworCQlBU1RFUk4oT19DSCwgVEhFUkVUSEVSRSgpKTsKKwkJYnJlYWs7CisJY2FzZSBSRVAoMSwgMSk6CQkJLyogdHJpdmlhbCBjYXNlICovCisJCS8qIGRvbmUgKi8KKwkJYnJlYWs7CisJY2FzZSBSRVAoMSwgTik6CQkJLyogYXMgeD94ezEsbi0xfSAqLworCQkvKiBLTFVER0U6IGVtaXQgeT8gYXMgKHl8KSB1bnRpbCBzdWJ0bGUgYnVnIGdldHMgZml4ZWQgKi8KKwkJSU5TRVJUKE9DSF8sIHN0YXJ0KTsKKwkJQVNURVJOKE9PUjEsIHN0YXJ0KTsKKwkJQUhFQUQoc3RhcnQpOworCQlFTUlUKE9PUjIsIDApOwkJCS8qIG9mZnNldCB2ZXJ5IHdyb25nLi4uICovCisJCUFIRUFEKFRIRVJFKCkpOwkJCS8qIC4uLnNvIGZpeCBpdCAqLworCQlBU1RFUk4oT19DSCwgVEhFUkVUSEVSRSgpKTsKKwkJY29weSA9IGR1cGwocCwgc3RhcnQrMSwgZmluaXNoKzEpOworCQlhc3NlcnQoY29weSA9PSBmaW5pc2grNCk7CisJCXJlcGVhdChwLCBjb3B5LCAxLCB0by0xLCByZWNsaW1pdCk7CisJCWJyZWFrOworCWNhc2UgUkVQKDEsIElORik6CQkvKiBhcyB4KyAqLworCQlJTlNFUlQoT1BMVVNfLCBzdGFydCk7CisJCUFTVEVSTihPX1BMVVMsIHN0YXJ0KTsKKwkJYnJlYWs7CisJY2FzZSBSRVAoTiwgTik6CQkJLyogYXMgeHh7bS0xLG4tMX0gKi8KKwkJY29weSA9IGR1cGwocCwgc3RhcnQsIGZpbmlzaCk7CisJCXJlcGVhdChwLCBjb3B5LCBmcm9tLTEsIHRvLTEsIHJlY2xpbWl0KTsKKwkJYnJlYWs7CisJY2FzZSBSRVAoTiwgSU5GKToJCS8qIGFzIHh4e24tMSxJTkZ9ICovCisJCWNvcHkgPSBkdXBsKHAsIHN0YXJ0LCBmaW5pc2gpOworCQlyZXBlYXQocCwgY29weSwgZnJvbS0xLCB0bywgcmVjbGltaXQpOworCQlicmVhazsKKwlkZWZhdWx0OgkJCS8qICJjYW4ndCBoYXBwZW4iICovCisJCVNFVEVSUk9SKFJFR19BU1NFUlQpOwkvKiBqdXN0IGluIGNhc2UgKi8KKwkJYnJlYWs7CisJfQorfQorCisvKgorIC0gc2V0ZXJyIC0gc2V0IGFuIGVycm9yIGNvbmRpdGlvbgorID09IHN0YXRpYyBpbnQgc2V0ZXJyKHN0cnVjdCBwYXJzZSAqcCwgaW50IGUpOworICovCitzdGF0aWMgaW50CQkJLyogdXNlbGVzcyBidXQgbWFrZXMgdHlwZSBjaGVja2luZyBoYXBweSAqLworc2V0ZXJyKAorICAgIHN0cnVjdCBwYXJzZSAqcCwKKyAgICBpbnQgZSkKK3sKKworCV9ESUFHQVNTRVJUKHAgIT0gTlVMTCk7CisKKwlpZiAocC0+ZXJyb3IgPT0gMCkJLyoga2VlcCBlYXJsaWVzdCBlcnJvciBjb25kaXRpb24gKi8KKwkJcC0+ZXJyb3IgPSBlOworCXAtPm5leHQgPSBudWxzOwkJLyogdHJ5IHRvIGJyaW5nIHRoaW5ncyB0byBhIGhhbHQgKi8KKwlwLT5lbmQgPSBudWxzOworCXJldHVybigwKTsJCS8qIG1ha2UgdGhlIHJldHVybiB2YWx1ZSB3ZWxsLWRlZmluZWQgKi8KK30KKworLyoKKyAtIGFsbG9jc2V0IC0gYWxsb2NhdGUgYSBzZXQgb2YgY2hhcmFjdGVycyBmb3IgW10KKyA9PSBzdGF0aWMgY3NldCAqYWxsb2NzZXQoc3RydWN0IHBhcnNlICpwKTsKKyAqLworc3RhdGljIGNzZXQgKgorYWxsb2NzZXQoCisgICAgc3RydWN0IHBhcnNlICpwKQoreworCXNpemVfdCBubzsKKwlzaXplX3QgbmM7CisJc2l6ZV90IG5ieXRlczsKKwljc2V0ICpjczsKKwlzaXplX3QgY3NzOworCXNpemVfdCBpOworCisJX0RJQUdBU1NFUlQocCAhPSBOVUxMKTsKKworCW5vID0gcC0+Zy0+bmNzZXRzKys7CisJY3NzID0gKHNpemVfdClwLT5nLT5jc2V0c2l6ZTsKKwlpZiAobm8gPj0gcC0+bmNzYWxsb2MpIHsJLyogbmVlZCBhbm90aGVyIGNvbHVtbiBvZiBzcGFjZSAqLworCQlwLT5uY3NhbGxvYyArPSBDSEFSX0JJVDsKKwkJbmMgPSBwLT5uY3NhbGxvYzsKKwkJYXNzZXJ0KG5jICUgQ0hBUl9CSVQgPT0gMCk7CisJCW5ieXRlcyA9IG5jIC8gQ0hBUl9CSVQgKiBjc3M7CisJCWlmIChNRU1TSVpFKHApID4gTUVNTElNSVQpCisJCQlnb3RvIG9vbWVtOworCQlpZiAocC0+Zy0+c2V0cyA9PSBOVUxMKQorCQkJcC0+Zy0+c2V0cyA9IG1hbGxvYyhuYyAqIHNpemVvZihjc2V0KSk7CisJCWVsc2UKKwkJCXAtPmctPnNldHMgPSByZWFsbG9jKHAtPmctPnNldHMsIG5jICogc2l6ZW9mKGNzZXQpKTsKKwkJaWYgKHAtPmctPnNldGJpdHMgPT0gTlVMTCkKKwkJCXAtPmctPnNldGJpdHMgPSBtYWxsb2MobmJ5dGVzKTsKKwkJZWxzZSB7CisJCQlwLT5nLT5zZXRiaXRzID0gcmVhbGxvYyhwLT5nLT5zZXRiaXRzLCBuYnl0ZXMpOworCQkJLyogeHh4IHRoaXMgaXNuJ3QgcmlnaHQgaWYgc2V0Yml0cyBpcyBub3cgTlVMTCAqLworCQkJZm9yIChpID0gMDsgaSA8IG5vOyBpKyspCisJCQkJcC0+Zy0+c2V0c1tpXS5wdHIgPSBwLT5nLT5zZXRiaXRzICsgY3NzKihpL0NIQVJfQklUKTsKKwkJfQorCQlpZiAocC0+Zy0+c2V0cyAhPSBOVUxMICYmIHAtPmctPnNldGJpdHMgIT0gTlVMTCkKKwkJCSh2b2lkKSBtZW1zZXQoKGNoYXIgKilwLT5nLT5zZXRiaXRzICsgKG5ieXRlcyAtIGNzcyksCisJCQkJCQkJCTAsIGNzcyk7CisJCWVsc2Ugeworb29tZW06CisJCQlubyA9IDA7CisJCQlTRVRFUlJPUihSRUdfRVNQQUNFKTsKKwkJCS8qIGNhbGxlcidzIHJlc3BvbnNpYmlsaXR5IG5vdCB0byBkbyBzZXQgb3BzICovCisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCX0KKworCWNzID0gJnAtPmctPnNldHNbbm9dOworCWNzLT5wdHIgPSBwLT5nLT5zZXRiaXRzICsgY3NzKigobm8pL0NIQVJfQklUKTsKKwljcy0+bWFzayA9IDEgPDwgKHVuc2lnbmVkIGludCkoKG5vKSAlIENIQVJfQklUKTsKKwljcy0+aGFzaCA9IDA7CisJY3MtPnNtdWx0aXMgPSAwOworCWNzLT5tdWx0aXMgPSBOVUxMOworCisJcmV0dXJuKGNzKTsKK30KKworLyoKKyAtIGZyZWVzZXQgLSBmcmVlIGEgbm93LXVudXNlZCBzZXQKKyA9PSBzdGF0aWMgdm9pZCBmcmVlc2V0KHN0cnVjdCBwYXJzZSAqcCwgY3NldCAqY3MpOworICovCitzdGF0aWMgdm9pZAorZnJlZXNldCgKKyAgICBzdHJ1Y3QgcGFyc2UgKnAsCisgICAgY3NldCAqY3MpCit7CisJc2l6ZV90IGk7CisJY3NldCAqdG9wOworCXNpemVfdCBjc3M7CisKKwlfRElBR0FTU0VSVChwICE9IE5VTEwpOworCV9ESUFHQVNTRVJUKGNzICE9IE5VTEwpOworCisJdG9wID0gJnAtPmctPnNldHNbcC0+Zy0+bmNzZXRzXTsKKwljc3MgPSAoc2l6ZV90KXAtPmctPmNzZXRzaXplOworCisJZm9yIChpID0gMDsgaSA8IGNzczsgaSsrKQorCQlDSHN1YihjcywgKGludClpKTsKKwlpZiAoY3MgPT0gdG9wLTEpCS8qIHJlY292ZXIgb25seSB0aGUgZWFzeSBjYXNlICovCisJCXAtPmctPm5jc2V0cy0tOworfQorCisvKgorIC0gZnJlZXplc2V0IC0gZmluYWwgcHJvY2Vzc2luZyBvbiBhIHNldCBvZiBjaGFyYWN0ZXJzCisgPT0gc3RhdGljIGludCBmcmVlemVzZXQoc3RydWN0IHBhcnNlICpwLCBjc2V0ICpjcyk7CisgKgorICogVGhlIG1haW4gdGFzayBoZXJlIGlzIG1lcmdpbmcgaWRlbnRpY2FsIHNldHMuICBUaGlzIGlzIHVzdWFsbHkgYSB3YXN0ZQorICogb2YgdGltZSAoYWx0aG91Z2ggdGhlIGhhc2ggY29kZSBtaW5pbWl6ZXMgdGhlIG92ZXJoZWFkKSwgYnV0IGNhbiB3aW4KKyAqIGJpZyBpZiBSRUdfSUNBU0UgaXMgYmVpbmcgdXNlZC4gIFJFR19JQ0FTRSwgYnkgdGhlIHdheSwgaXMgd2h5IHRoZSBoYXNoCisgKiBpcyBkb25lIHVzaW5nIGFkZGl0aW9uIHJhdGhlciB0aGFuIHhvciAtLSBhbGwgQVNDSUkgW2FBXSBzZXRzIHhvciB0bworICogdGhlIHNhbWUgdmFsdWUhCisgKi8KK3N0YXRpYyBzb3BubwkJCS8qIHNldCBudW1iZXIgKi8KK2ZyZWV6ZXNldCgKKyAgICBzdHJ1Y3QgcGFyc2UgKnAsCisgICAgY3NldCAqY3MpCit7CisJdWNoIGg7CisJc2l6ZV90IGk7CisJY3NldCAqdG9wOworCWNzZXQgKmNzMjsKKwlzaXplX3QgY3NzOworCisJX0RJQUdBU1NFUlQocCAhPSBOVUxMKTsKKwlfRElBR0FTU0VSVChjcyAhPSBOVUxMKTsKKworCWggPSBjcy0+aGFzaDsKKwl0b3AgPSAmcC0+Zy0+c2V0c1twLT5nLT5uY3NldHNdOworCWNzcyA9IChzaXplX3QpcC0+Zy0+Y3NldHNpemU7CisKKwkvKiBsb29rIGZvciBhbiBlYXJsaWVyIG9uZSB3aGljaCBpcyB0aGUgc2FtZSAqLworCWZvciAoY3MyID0gJnAtPmctPnNldHNbMF07IGNzMiA8IHRvcDsgY3MyKyspCisJCWlmIChjczItPmhhc2ggPT0gaCAmJiBjczIgIT0gY3MpIHsKKwkJCS8qIG1heWJlICovCisJCQlmb3IgKGkgPSAwOyBpIDwgY3NzOyBpKyspCisJCQkJaWYgKCEhQ0hJTihjczIsIGkpICE9ICEhQ0hJTihjcywgaSkpCisJCQkJCWJyZWFrOwkJLyogbm8gKi8KKwkJCWlmIChpID09IGNzcykKKwkJCQlicmVhazsJCQkvKiB5ZXMgKi8KKwkJfQorCisJaWYgKGNzMiA8IHRvcCkgewkvKiBmb3VuZCBvbmUgKi8KKwkJZnJlZXNldChwLCBjcyk7CisJCWNzID0gY3MyOworCX0KKworCXJldHVybiAoc29wbm8pKGNzIC0gcC0+Zy0+c2V0cyk7Cit9CisKKy8qCisgLSBmaXJzdGNoIC0gcmV0dXJuIGZpcnN0IGNoYXJhY3RlciBpbiBhIHNldCAod2hpY2ggbXVzdCBoYXZlIGF0IGxlYXN0IG9uZSkKKyA9PSBzdGF0aWMgaW50IGZpcnN0Y2goc3RydWN0IHBhcnNlICpwLCBjc2V0ICpjcyk7CisgKi8KK3N0YXRpYyBpbnQJCQkvKiBjaGFyYWN0ZXI7IHRoZXJlIGlzIG5vICJub25lIiB2YWx1ZSAqLworZmlyc3RjaCgKKyAgICBzdHJ1Y3QgcGFyc2UgKnAsCisgICAgY3NldCAqY3MpCit7CisJc2l6ZV90IGk7CisJc2l6ZV90IGNzczsKKworCV9ESUFHQVNTRVJUKHAgIT0gTlVMTCk7CisJX0RJQUdBU1NFUlQoY3MgIT0gTlVMTCk7CisKKwljc3MgPSAoc2l6ZV90KXAtPmctPmNzZXRzaXplOworCisJZm9yIChpID0gMDsgaSA8IGNzczsgaSsrKQorCQlpZiAoQ0hJTihjcywgaSkpCisJCQlyZXR1cm4oKGNoYXIpaSk7CisJYXNzZXJ0KG5ldmVyKTsKKwlyZXR1cm4oMCk7CQkvKiBhcmJpdHJhcnkgKi8KK30KKworLyoKKyAtIG5jaCAtIG51bWJlciBvZiBjaGFyYWN0ZXJzIGluIGEgc2V0CisgPT0gc3RhdGljIGludCBuY2goc3RydWN0IHBhcnNlICpwLCBjc2V0ICpjcyk7CisgKi8KK3N0YXRpYyBpbnQKK25jaCgKKyAgICBzdHJ1Y3QgcGFyc2UgKnAsCisgICAgY3NldCAqY3MpCit7CisJc2l6ZV90IGk7CisJc2l6ZV90IGNzczsKKwlpbnQgbiA9IDA7CisKKwlfRElBR0FTU0VSVChwICE9IE5VTEwpOworCV9ESUFHQVNTRVJUKGNzICE9IE5VTEwpOworCisJY3NzID0gKHNpemVfdClwLT5nLT5jc2V0c2l6ZTsKKworCWZvciAoaSA9IDA7IGkgPCBjc3M7IGkrKykKKwkJaWYgKENISU4oY3MsIGkpKQorCQkJbisrOworCXJldHVybihuKTsKK30KKworLyoKKyAtIG1jYWRkIC0gYWRkIGEgY29sbGF0aW5nIGVsZW1lbnQgdG8gYSBjc2V0CisgPT0gc3RhdGljIHZvaWQgbWNhZGQoc3RydWN0IHBhcnNlICpwLCBjc2V0ICpjcywgXAorID09CWNoYXIgKmNwKTsKKyAqLworc3RhdGljIHZvaWQKK21jYWRkKAorICAgIHN0cnVjdCBwYXJzZSAqcCwKKyAgICBjc2V0ICpjcywKKyAgICBjb25zdCBjaGFyICpjcCkKK3sKKwlzaXplX3Qgb2xkZW5kOworCisJX0RJQUdBU1NFUlQocCAhPSBOVUxMKTsKKwlfRElBR0FTU0VSVChjcyAhPSBOVUxMKTsKKwlfRElBR0FTU0VSVChjcCAhPSBOVUxMKTsKKworCW9sZGVuZCA9IGNzLT5zbXVsdGlzOworCisJY3MtPnNtdWx0aXMgKz0gc3RybGVuKGNwKSArIDE7CisJaWYgKGNzLT5tdWx0aXMgPT0gTlVMTCkKKwkJY3MtPm11bHRpcyA9IG1hbGxvYyhjcy0+c211bHRpcyk7CisJZWxzZQorCQljcy0+bXVsdGlzID0gcmVhbGxvYyhjcy0+bXVsdGlzLCBjcy0+c211bHRpcyk7CisJaWYgKGNzLT5tdWx0aXMgPT0gTlVMTCkgeworCQlTRVRFUlJPUihSRUdfRVNQQUNFKTsKKwkJcmV0dXJuOworCX0KKworCSh2b2lkKSBzdHJjcHkoY3MtPm11bHRpcyArIG9sZGVuZCAtIDEsIGNwKTsKKwljcy0+bXVsdGlzW2NzLT5zbXVsdGlzIC0gMV0gPSAnXDAnOworfQorCisjaWYgMAorLyoKKyAtIG1jc3ViIC0gc3VidHJhY3QgYSBjb2xsYXRpbmcgZWxlbWVudCBmcm9tIGEgY3NldAorID09IHN0YXRpYyB2b2lkIG1jc3ViKGNzZXQgKmNzLCBjaGFyICpjcCk7CisgKi8KK3N0YXRpYyB2b2lkCittY3N1YigKKyAgICBjc2V0ICpjcywKKyAgICBjaGFyICpjcCkKK3sKKwljaGFyICpmcDsKKwlzaXplX3QgbGVuOworCisJX0RJQUdBU1NFUlQoY3MgIT0gTlVMTCk7CisJX0RJQUdBU1NFUlQoY3AgIT0gTlVMTCk7CisKKwlmcCA9IG1jZmluZChjcywgY3ApOworCWxlbiA9IHN0cmxlbihmcCk7CisKKwlhc3NlcnQoZnAgIT0gTlVMTCk7CisJKHZvaWQpIG1lbW1vdmUoZnAsIGZwICsgbGVuICsgMSwKKwkJCQljcy0+c211bHRpcyAtIChmcCArIGxlbiArIDEgLSBjcy0+bXVsdGlzKSk7CisJY3MtPnNtdWx0aXMgLT0gbGVuOworCisJaWYgKGNzLT5zbXVsdGlzID09IDApIHsKKwkJZnJlZShjcy0+bXVsdGlzKTsKKwkJY3MtPm11bHRpcyA9IE5VTEw7CisJCXJldHVybjsKKwl9CisKKwljcy0+bXVsdGlzID0gcmVhbGxvYyhjcy0+bXVsdGlzLCBjcy0+c211bHRpcyk7CisJYXNzZXJ0KGNzLT5tdWx0aXMgIT0gTlVMTCk7Cit9CisKKy8qCisgLSBtY2luIC0gaXMgYSBjb2xsYXRpbmcgZWxlbWVudCBpbiBhIGNzZXQ/CisgPT0gc3RhdGljIGludCBtY2luKGNzZXQgKmNzLCBjaGFyICpjcCk7CisgKi8KK3N0YXRpYyBpbnQKK21jaW4oCisgICAgY3NldCAqY3MsCisgICAgY2hhciAqY3ApCit7CisKKwlfRElBR0FTU0VSVChjcyAhPSBOVUxMKTsKKwlfRElBR0FTU0VSVChjcCAhPSBOVUxMKTsKKworCXJldHVybihtY2ZpbmQoY3MsIGNwKSAhPSBOVUxMKTsKK30KKworLyoKKyAtIG1jZmluZCAtIGZpbmQgYSBjb2xsYXRpbmcgZWxlbWVudCBpbiBhIGNzZXQKKyA9PSBzdGF0aWMgY2hhciAqbWNmaW5kKGNzZXQgKmNzLCBjaGFyICpjcCk7CisgKi8KK3N0YXRpYyBjaGFyICoKK21jZmluZCgKKyAgICBjc2V0ICpjcywKKyAgICBjaGFyICpjcCkKK3sKKwljaGFyICpwOworCisJX0RJQUdBU1NFUlQoY3MgIT0gTlVMTCk7CisJX0RJQUdBU1NFUlQoY3AgIT0gTlVMTCk7CisKKwlpZiAoY3MtPm11bHRpcyA9PSBOVUxMKQorCQlyZXR1cm4oTlVMTCk7CisJZm9yIChwID0gY3MtPm11bHRpczsgKnAgIT0gJ1wwJzsgcCArPSBzdHJsZW4ocCkgKyAxKQorCQlpZiAoc3RyY21wKGNwLCBwKSA9PSAwKQorCQkJcmV0dXJuKHApOworCXJldHVybihOVUxMKTsKK30KKyNlbmRpZgorCisvKgorIC0gbWNpbnZlcnQgLSBpbnZlcnQgdGhlIGxpc3Qgb2YgY29sbGF0aW5nIGVsZW1lbnRzIGluIGEgY3NldAorID09IHN0YXRpYyB2b2lkIG1jaW52ZXJ0KHN0cnVjdCBwYXJzZSAqcCwgY3NldCAqY3MpOworICoKKyAqIFRoaXMgd291bGQgaGF2ZSB0byBrbm93IHRoZSBzZXQgb2YgcG9zc2liaWxpdGllcy4gIEltcGxlbWVudGF0aW9uCisgKiBpcyBkZWZlcnJlZC4KKyAqLworLyogQVJHU1VTRUQgKi8KK3N0YXRpYyB2b2lkCittY2ludmVydCgKKyAgICBzdHJ1Y3QgcGFyc2UgKnAsCisgICAgY3NldCAqY3MpCit7CisKKwlfRElBR0FTU0VSVChwICE9IE5VTEwpOworCV9ESUFHQVNTRVJUKGNzICE9IE5VTEwpOworCisJYXNzZXJ0KGNzLT5tdWx0aXMgPT0gTlVMTCk7CS8qIHh4eCAqLworfQorCisvKgorIC0gbWNjYXNlIC0gYWRkIGNhc2UgY291bnRlcnBhcnRzIG9mIHRoZSBsaXN0IG9mIGNvbGxhdGluZyBlbGVtZW50cyBpbiBhIGNzZXQKKyA9PSBzdGF0aWMgdm9pZCBtY2Nhc2Uoc3RydWN0IHBhcnNlICpwLCBjc2V0ICpjcyk7CisgKgorICogVGhpcyB3b3VsZCBoYXZlIHRvIGtub3cgdGhlIHNldCBvZiBwb3NzaWJpbGl0aWVzLiAgSW1wbGVtZW50YXRpb24KKyAqIGlzIGRlZmVycmVkLgorICovCisvKiBBUkdTVVNFRCAqLworc3RhdGljIHZvaWQKK21jY2FzZSgKKyAgICBzdHJ1Y3QgcGFyc2UgKnAsCisgICAgY3NldCAqY3MpCit7CisKKwlfRElBR0FTU0VSVChwICE9IE5VTEwpOworCV9ESUFHQVNTRVJUKGNzICE9IE5VTEwpOworCisJYXNzZXJ0KGNzLT5tdWx0aXMgPT0gTlVMTCk7CS8qIHh4eCAqLworfQorCisvKgorIC0gaXNpbnNldHMgLSBpcyB0aGlzIGNoYXJhY3RlciBpbiBhbnkgc2V0cz8KKyA9PSBzdGF0aWMgaW50IGlzaW5zZXRzKHN0cnVjdCByZV9ndXRzICpnLCBpbnQgYyk7CisgKi8KK3N0YXRpYyBpbnQJCQkvKiBwcmVkaWNhdGUgKi8KK2lzaW5zZXRzKAorICAgIHN0cnVjdCByZV9ndXRzICpnLAorICAgIGludCBjKQoreworCXVjaCAqY29sOworCXNpemVfdCBpOworCXNpemVfdCBuY29sczsKKwl1bnNpZ25lZCB1YyA9ICh1bnNpZ25lZCBjaGFyKWM7CisKKwlfRElBR0FTU0VSVChnICE9IE5VTEwpOworCisJaWYgKGctPnNldGJpdHMgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisKKwluY29scyA9IChnLT5uY3NldHMrKENIQVJfQklULTEpKSAvIENIQVJfQklUOworCisJZm9yIChpID0gMCwgY29sID0gZy0+c2V0Yml0czsgaSA8IG5jb2xzOyBpKyssIGNvbCArPSBnLT5jc2V0c2l6ZSkKKwkJaWYgKGNvbFt1Y10gIT0gMCkKKwkJCXJldHVybigxKTsKKwlyZXR1cm4oMCk7Cit9CisKKy8qCisgLSBzYW1lc2V0cyAtIGFyZSB0aGVzZSB0d28gY2hhcmFjdGVycyBpbiBleGFjdGx5IHRoZSBzYW1lIHNldHM/CisgPT0gc3RhdGljIGludCBzYW1lc2V0cyhzdHJ1Y3QgcmVfZ3V0cyAqZywgaW50IGMxLCBpbnQgYzIpOworICovCitzdGF0aWMgaW50CQkJLyogcHJlZGljYXRlICovCitzYW1lc2V0cygKKyAgICBzdHJ1Y3QgcmVfZ3V0cyAqZywKKyAgICBpbnQgYzEsCisgICAgaW50IGMyKQoreworCXVjaCAqY29sOworCXNpemVfdCBpOworCXNpemVfdCBuY29sczsKKwl1bnNpZ25lZCB1YzEgPSAodW5zaWduZWQgY2hhciljMTsKKwl1bnNpZ25lZCB1YzIgPSAodW5zaWduZWQgY2hhciljMjsKKworCV9ESUFHQVNTRVJUKGcgIT0gTlVMTCk7CisKKwluY29scyA9IChnLT5uY3NldHMrKENIQVJfQklULTEpKSAvIENIQVJfQklUOworCisJZm9yIChpID0gMCwgY29sID0gZy0+c2V0Yml0czsgaSA8IG5jb2xzOyBpKyssIGNvbCArPSBnLT5jc2V0c2l6ZSkKKwkJaWYgKGNvbFt1YzFdICE9IGNvbFt1YzJdKQorCQkJcmV0dXJuKDApOworCXJldHVybigxKTsKK30KKworLyoKKyAtIGNhdGVnb3JpemUgLSBzb3J0IG91dCBjaGFyYWN0ZXIgY2F0ZWdvcmllcworID09IHN0YXRpYyB2b2lkIGNhdGVnb3JpemUoc3RydWN0IHBhcnNlICpwLCBzdHJ1Y3QgcmVfZ3V0cyAqZyk7CisgKi8KK3N0YXRpYyB2b2lkCitjYXRlZ29yaXplKAorICAgIHN0cnVjdCBwYXJzZSAqcCwKKyAgICBzdHJ1Y3QgcmVfZ3V0cyAqZykKK3sKKwljYXRfdCAqY2F0czsKKwlpbnQgYzsKKwlpbnQgYzI7CisJY2F0X3QgY2F0OworCisJX0RJQUdBU1NFUlQocCAhPSBOVUxMKTsKKwlfRElBR0FTU0VSVChnICE9IE5VTEwpOworCisJY2F0cyA9IGctPmNhdGVnb3JpZXM7CisKKwkvKiBhdm9pZCBtYWtpbmcgZXJyb3Igc2l0dWF0aW9ucyB3b3JzZSAqLworCWlmIChwLT5lcnJvciAhPSAwKQorCQlyZXR1cm47CisKKwlmb3IgKGMgPSBDSEFSX01JTjsgYyA8PSBDSEFSX01BWDsgYysrKQorCQlpZiAoY2F0c1tjXSA9PSAwICYmIGlzaW5zZXRzKGcsIGMpKSB7CisJCQlfRElBR0FTU0VSVChfX3R5cGVfZml0KHVuc2lnbmVkIGNoYXIsCisJCQkgICAgZy0+bmNhdGVnb3JpZXMgKyAxKSk7CisJCQljYXQgPSBnLT5uY2F0ZWdvcmllcysrOworCQkJY2F0c1tjXSA9IGNhdDsKKwkJCWZvciAoYzIgPSBjKzE7IGMyIDw9IENIQVJfTUFYOyBjMisrKQorCQkJCWlmIChjYXRzW2MyXSA9PSAwICYmIHNhbWVzZXRzKGcsIGMsIGMyKSkKKwkJCQkJY2F0c1tjMl0gPSBjYXQ7CisJCX0KK30KKworLyoKKyAtIGR1cGwgLSBlbWl0IGEgZHVwbGljYXRlIG9mIGEgYnVuY2ggb2Ygc29wcworID09IHN0YXRpYyBzb3BubyBkdXBsKHN0cnVjdCBwYXJzZSAqcCwgc29wbm8gc3RhcnQsIHNvcG5vIGZpbmlzaCk7CisgKi8KK3N0YXRpYyBzb3BubwkJCS8qIHN0YXJ0IG9mIGR1cGxpY2F0ZSAqLworZHVwbCgKKyAgICBzdHJ1Y3QgcGFyc2UgKnAsCisgICAgc29wbm8gc3RhcnQsCQkJLyogZnJvbSBoZXJlICovCisgICAgc29wbm8gZmluaXNoKQkJCS8qIHRvIHRoaXMgbGVzcyBvbmUgKi8KK3sKKwlzb3BubyByZXQ7CisJc29wbm8gbGVuID0gZmluaXNoIC0gc3RhcnQ7CisKKwlfRElBR0FTU0VSVChwICE9IE5VTEwpOworCisJcmV0ID0gSEVSRSgpOworCisJYXNzZXJ0KGZpbmlzaCA+PSBzdGFydCk7CisJaWYgKGxlbiA9PSAwKQorCQlyZXR1cm4ocmV0KTsKKwlpZiAoIWVubGFyZ2UocCwgcC0+c3NpemUgKyBsZW4pKS8qIHRoaXMgbWFueSB1bmV4cGVjdGVkIGFkZGl0aW9ucyAqLworCQlyZXR1cm4gcmV0OworCSh2b2lkKW1lbWNweShwLT5zdHJpcCArIHAtPnNsZW4sIHAtPnN0cmlwICsgc3RhcnQsCisJICAgIChzaXplX3QpbGVuICogc2l6ZW9mKHNvcCkpOworCXAtPnNsZW4gKz0gbGVuOworCXJldHVybihyZXQpOworfQorCisvKgorIC0gZG9lbWl0IC0gZW1pdCBhIHN0cmlwIG9wZXJhdG9yCisgPT0gc3RhdGljIHZvaWQgZG9lbWl0KHN0cnVjdCBwYXJzZSAqcCwgc29wIG9wLCBzaXplX3Qgb3BuZCk7CisgKgorICogSXQgbWlnaHQgc2VlbSBiZXR0ZXIgdG8gaW1wbGVtZW50IHRoaXMgYXMgYSBtYWNybyB3aXRoIGEgZnVuY3Rpb24gYXMKKyAqIGhhcmQtY2FzZSBiYWNrdXAsIGJ1dCBpdCdzIGp1c3QgdG9vIGJpZyBhbmQgbWVzc3kgdW5sZXNzIHRoZXJlIGFyZQorICogc29tZSBjaGFuZ2VzIHRvIHRoZSBkYXRhIHN0cnVjdHVyZXMuICBNYXliZSBsYXRlci4KKyAqLworc3RhdGljIHZvaWQKK2RvZW1pdCgKKyAgICBzdHJ1Y3QgcGFyc2UgKnAsCisgICAgc29wIG9wLAorICAgIHNvcG5vIG9wbmQpCit7CisJX0RJQUdBU1NFUlQocCAhPSBOVUxMKTsKKworCS8qIGF2b2lkIG1ha2luZyBlcnJvciBzaXR1YXRpb25zIHdvcnNlICovCisJaWYgKHAtPmVycm9yICE9IDApCisJCXJldHVybjsKKworCS8qIGRlYWwgd2l0aCBvdmVyc2l6ZSBvcGVyYW5kcyAoImNhbid0IGhhcHBlbiIsIG1vcmUgb3IgbGVzcykgKi8KKwlhc3NlcnQob3BuZCA8IDE8PE9QU0hJRlQpOworCisJLyogZGVhbCB3aXRoIHVuZGVyc2l6ZWQgc3RyaXAgKi8KKwlpZiAocC0+c2xlbiA+PSBwLT5zc2l6ZSkKKwkJaWYgKCFlbmxhcmdlKHAsIChwLT5zc2l6ZSsxKSAvIDIgKiAzKSkJLyogKzUwJSAqLworCQkJcmV0dXJuOworCisJLyogZmluYWxseSwgaXQncyBhbGwgcmVkdWNlZCB0byB0aGUgZWFzeSBjYXNlICovCisJcC0+c3RyaXBbcC0+c2xlbisrXSA9IChzb3ApU09QKG9wLCBvcG5kKTsKK30KKworLyoKKyAtIGRvaW5zZXJ0IC0gaW5zZXJ0IGEgc29wIGludG8gdGhlIHN0cmlwCisgPT0gc3RhdGljIHZvaWQgZG9pbnNlcnQoc3RydWN0IHBhcnNlICpwLCBzb3Agb3AsIHNpemVfdCBvcG5kLCBzb3BubyBwb3MpOworICovCitzdGF0aWMgdm9pZAorZG9pbnNlcnQoCisgICAgc3RydWN0IHBhcnNlICpwLAorICAgIHNvcCBvcCwKKyAgICBzb3BubyBvcG5kLAorICAgIHNvcG5vIHBvcykKK3sKKwlzb3BubyBzbjsKKwlzb3AgczsKKwlpbnQgaTsKKworCV9ESUFHQVNTRVJUKHAgIT0gTlVMTCk7CisKKwkvKiBhdm9pZCBtYWtpbmcgZXJyb3Igc2l0dWF0aW9ucyB3b3JzZSAqLworCWlmIChwLT5lcnJvciAhPSAwKQorCQlyZXR1cm47CisKKwlzbiA9IEhFUkUoKTsKKwlFTUlUKG9wLCBvcG5kKTsJCS8qIGRvIGNoZWNrcywgZW5zdXJlIHNwYWNlICovCisJYXNzZXJ0KEhFUkUoKSA9PSBzbisxKTsKKwlzID0gcC0+c3RyaXBbc25dOworCisJLyogYWRqdXN0IHBhcmVuIHBvaW50ZXJzICovCisJYXNzZXJ0KHBvcyA+IDApOworCWZvciAoaSA9IDE7IGkgPCBOUEFSRU47IGkrKykgeworCQlpZiAocC0+cGJlZ2luW2ldID49IHBvcykgeworCQkJcC0+cGJlZ2luW2ldKys7CisJCX0KKwkJaWYgKHAtPnBlbmRbaV0gPj0gcG9zKSB7CisJCQlwLT5wZW5kW2ldKys7CisJCX0KKwl9CisKKwltZW1tb3ZlKCZwLT5zdHJpcFtwb3MrMV0sICZwLT5zdHJpcFtwb3NdLCAoSEVSRSgpLXBvcy0xKSpzaXplb2Yoc29wKSk7CisJcC0+c3RyaXBbcG9zXSA9IHM7Cit9CisKKy8qCisgLSBkb2Z3ZCAtIGNvbXBsZXRlIGEgZm9yd2FyZCByZWZlcmVuY2UKKyA9PSBzdGF0aWMgdm9pZCBkb2Z3ZChzdHJ1Y3QgcGFyc2UgKnAsIHNvcG5vIHBvcywgc29wIHZhbHVlKTsKKyAqLworc3RhdGljIHZvaWQKK2RvZndkKAorICAgIHN0cnVjdCBwYXJzZSAqcCwKKyAgICBzb3BubyBwb3MsCisgICAgc29wbm8gdmFsdWUpCit7CisKKwlfRElBR0FTU0VSVChwICE9IE5VTEwpOworCisJLyogYXZvaWQgbWFraW5nIGVycm9yIHNpdHVhdGlvbnMgd29yc2UgKi8KKwlpZiAocC0+ZXJyb3IgIT0gMCkKKwkJcmV0dXJuOworCisJYXNzZXJ0KHZhbHVlIDwgMTw8T1BTSElGVCk7CisJcC0+c3RyaXBbcG9zXSA9IChzb3ApKE9QKHAtPnN0cmlwW3Bvc10pIHwgdmFsdWUpOworfQorCisvKgorIC0gZW5sYXJnZSAtIGVubGFyZ2UgdGhlIHN0cmlwCisgPT0gc3RhdGljIHZvaWQgZW5sYXJnZShzdHJ1Y3QgcGFyc2UgKnAsIHNvcG5vIHNpemUpOworICovCitzdGF0aWMgaW50CitlbmxhcmdlKAorICAgIHN0cnVjdCBwYXJzZSAqcCwKKyAgICBzb3BubyBzaXplKQoreworCXNvcCAqc3A7CisJc29wbm8gb3NpemU7CisKKwlfRElBR0FTU0VSVChwICE9IE5VTEwpOworCisJaWYgKHAtPnNzaXplID49IHNpemUpCisJCXJldHVybiAxOworCisJb3NpemUgPSBwLT5zc2l6ZTsKKwlwLT5zc2l6ZSA9IHNpemU7CisJaWYgKE1FTVNJWkUocCkgPiBNRU1MSU1JVCkKKwkJZ290byBvb21lbTsKKwlzcCA9IHJlYWxsb2MocC0+c3RyaXAsIHAtPnNzaXplICogc2l6ZW9mKHNvcCkpOworCWlmIChzcCA9PSBOVUxMKSB7Citvb21lbToKKwkJcC0+c3NpemUgPSBvc2l6ZTsKKwkJU0VURVJST1IoUkVHX0VTUEFDRSk7CisJCXJldHVybiAwOworCX0KKwlwLT5zdHJpcCA9IHNwOworCXJldHVybiAxOworfQorCisvKgorIC0gc3RyaXBzbnVnIC0gY29tcGFjdCB0aGUgc3RyaXAKKyA9PSBzdGF0aWMgdm9pZCBzdHJpcHNudWcoc3RydWN0IHBhcnNlICpwLCBzdHJ1Y3QgcmVfZ3V0cyAqZyk7CisgKi8KK3N0YXRpYyB2b2lkCitzdHJpcHNudWcoCisgICAgc3RydWN0IHBhcnNlICpwLAorICAgIHN0cnVjdCByZV9ndXRzICpnKQoreworCisJX0RJQUdBU1NFUlQocCAhPSBOVUxMKTsKKwlfRElBR0FTU0VSVChnICE9IE5VTEwpOworCisJZy0+bnN0YXRlcyA9IHAtPnNsZW47CisJZy0+c3RyaXAgPSByZWFsbG9jKHAtPnN0cmlwLCBwLT5zbGVuICogc2l6ZW9mKHNvcCkpOworCWlmIChnLT5zdHJpcCA9PSBOVUxMKSB7CisJCVNFVEVSUk9SKFJFR19FU1BBQ0UpOworCQlnLT5zdHJpcCA9IHAtPnN0cmlwOworCX0KK30KKworLyoKKyAtIGZpbmRtdXN0IC0gZmlsbCBpbiBtdXN0IGFuZCBtbGVuIHdpdGggbG9uZ2VzdCBtYW5kYXRvcnkgbGl0ZXJhbCBzdHJpbmcKKyA9PSBzdGF0aWMgdm9pZCBmaW5kbXVzdChzdHJ1Y3QgcGFyc2UgKnAsIHN0cnVjdCByZV9ndXRzICpnKTsKKyAqCisgKiBUaGlzIGFsZ29yaXRobSBjb3VsZCBkbyBmYW5jeSB0aGluZ3MgbGlrZSBhbmFseXppbmcgdGhlIG9wZXJhbmRzIG9mIHwKKyAqIGZvciBjb21tb24gc3Vic2VxdWVuY2VzLiAgU29tZWRheS4gIFRoaXMgY29kZSBpcyBzaW1wbGUgYW5kIGZpbmRzIG1vc3QKKyAqIG9mIHRoZSBpbnRlcmVzdGluZyBjYXNlcy4KKyAqCisgKiBOb3RlIHRoYXQgbXVzdCBhbmQgbWxlbiBnb3QgaW5pdGlhbGl6ZWQgZHVyaW5nIHNldHVwLgorICovCitzdGF0aWMgdm9pZAorZmluZG11c3QoCisgICAgc3RydWN0IHBhcnNlICpwLAorICAgIHN0cnVjdCByZV9ndXRzICpnKQoreworCXNvcCAqc2NhbjsKKwlzb3AgKnN0YXJ0ID0gTlVMTDsKKwlzb3AgKm5ld3N0YXJ0ID0gTlVMTDsKKwlzb3BubyBuZXdsZW47CisJc29wIHM7CisJY2hhciAqY3A7CisJc29wbm8gaTsKKworCV9ESUFHQVNTRVJUKHAgIT0gTlVMTCk7CisJX0RJQUdBU1NFUlQoZyAhPSBOVUxMKTsKKworCS8qIGF2b2lkIG1ha2luZyBlcnJvciBzaXR1YXRpb25zIHdvcnNlICovCisJaWYgKHAtPmVycm9yICE9IDApCisJCXJldHVybjsKKworCS8qIGZpbmQgdGhlIGxvbmdlc3QgT0NIQVIgc2VxdWVuY2UgaW4gc3RyaXAgKi8KKwluZXdsZW4gPSAwOworCXNjYW4gPSBnLT5zdHJpcCArIDE7CisJZG8geworCQlzID0gKnNjYW4rKzsKKwkJc3dpdGNoIChPUChzKSkgeworCQljYXNlIE9DSEFSOgkJLyogc2VxdWVuY2UgbWVtYmVyICovCisJCQlpZiAobmV3bGVuID09IDApCQkvKiBuZXcgc2VxdWVuY2UgKi8KKwkJCQluZXdzdGFydCA9IHNjYW4gLSAxOworCQkJbmV3bGVuKys7CisJCQlicmVhazsKKwkJY2FzZSBPUExVU186CQkvKiB0aGluZ3MgdGhhdCBkb24ndCBicmVhayBvbmUgKi8KKwkJY2FzZSBPTFBBUkVOOgorCQljYXNlIE9SUEFSRU46CisJCQlicmVhazsKKwkJY2FzZSBPUVVFU1RfOgkJLyogdGhpbmdzIHRoYXQgbXVzdCBiZSBza2lwcGVkICovCisJCWNhc2UgT0NIXzoKKwkJCXNjYW4tLTsKKwkJCWRvIHsKKwkJCQlzY2FuICs9IE9QTkQocyk7CisJCQkJcyA9ICpzY2FuOworCQkJCS8qIGFzc2VydCgpIGludGVyZmVyZXMgdyBkZWJ1ZyBwcmludG91dHMgKi8KKwkJCQlpZiAoT1AocykgIT0gT19RVUVTVCAmJiBPUChzKSAhPSBPX0NIICYmCisJCQkJCQkJT1AocykgIT0gT09SMikgeworCQkJCQlnLT5pZmxhZ3MgfD0gQkFEOworCQkJCQlyZXR1cm47CisJCQkJfQorCQkJfSB3aGlsZSAoT1AocykgIT0gT19RVUVTVCAmJiBPUChzKSAhPSBPX0NIKTsKKwkJCS8qIEZBTExUSFJPVUdIICovCisJCWRlZmF1bHQ6CQkvKiB0aGluZ3MgdGhhdCBicmVhayBhIHNlcXVlbmNlICovCisJCQlpZiAobmV3bGVuID4gZy0+bWxlbikgewkJLyogZW5kcyBvbmUgKi8KKwkJCQlzdGFydCA9IG5ld3N0YXJ0OworCQkJCWctPm1sZW4gPSBuZXdsZW47CisJCQl9CisJCQluZXdsZW4gPSAwOworCQkJYnJlYWs7CisJCX0KKwl9IHdoaWxlIChPUChzKSAhPSBPRU5EKTsKKworCWlmIChzdGFydCA9PSBOVUxMKQorCQlnLT5tbGVuID0gMDsKKworCWlmIChnLT5tbGVuID09IDApCS8qIHRoZXJlIGlzbid0IG9uZSAqLworCQlyZXR1cm47CisKKwkvKiB0dXJuIGl0IGludG8gYSBjaGFyYWN0ZXIgc3RyaW5nICovCisJZy0+bXVzdCA9IG1hbGxvYygoc2l6ZV90KWctPm1sZW4gKyAxKTsKKwlpZiAoZy0+bXVzdCA9PSBOVUxMKSB7CQkvKiBhcmdoOyBqdXN0IGZvcmdldCBpdCAqLworCQlnLT5tbGVuID0gMDsKKwkJcmV0dXJuOworCX0KKwljcCA9IGctPm11c3Q7CisJc2NhbiA9IHN0YXJ0OworCWZvciAoaSA9IGctPm1sZW47IGkgPiAwOyBpLS0pIHsKKwkJd2hpbGUgKE9QKHMgPSAqc2NhbisrKSAhPSBPQ0hBUikKKwkJCWNvbnRpbnVlOworCQlhc3NlcnQoY3AgPCBnLT5tdXN0ICsgZy0+bWxlbik7CisJCSpjcCsrID0gKGNoYXIpT1BORChzKTsKKwl9CisJYXNzZXJ0KGNwID09IGctPm11c3QgKyBnLT5tbGVuKTsKKwkqY3ArKyA9ICdcMCc7CQkvKiBqdXN0IG9uIGdlbmVyYWwgcHJpbmNpcGxlcyAqLworfQorCisvKgorIC0gcGx1c2NvdW50IC0gY291bnQgKyBuZXN0aW5nCisgPT0gc3RhdGljIHNvcG5vIHBsdXNjb3VudChzdHJ1Y3QgcGFyc2UgKnAsIHN0cnVjdCByZV9ndXRzICpnKTsKKyAqLworc3RhdGljIHNvcG5vCQkJLyogbmVzdGluZyBkZXB0aCAqLworcGx1c2NvdW50KAorICAgIHN0cnVjdCBwYXJzZSAqcCwKKyAgICBzdHJ1Y3QgcmVfZ3V0cyAqZykKK3sKKwlzb3AgKnNjYW47CisJc29wIHM7CisJc29wbm8gcGx1c25lc3QgPSAwOworCXNvcG5vIG1heG5lc3QgPSAwOworCisJX0RJQUdBU1NFUlQocCAhPSBOVUxMKTsKKwlfRElBR0FTU0VSVChnICE9IE5VTEwpOworCisJaWYgKHAtPmVycm9yICE9IDApCisJCXJldHVybigwKTsJLyogdGhlcmUgbWF5IG5vdCBiZSBhbiBPRU5EICovCisKKwlzY2FuID0gZy0+c3RyaXAgKyAxOworCWRvIHsKKwkJcyA9ICpzY2FuKys7CisJCXN3aXRjaCAoT1AocykpIHsKKwkJY2FzZSBPUExVU186CisJCQlwbHVzbmVzdCsrOworCQkJYnJlYWs7CisJCWNhc2UgT19QTFVTOgorCQkJaWYgKHBsdXNuZXN0ID4gbWF4bmVzdCkKKwkJCQltYXhuZXN0ID0gcGx1c25lc3Q7CisJCQlwbHVzbmVzdC0tOworCQkJYnJlYWs7CisJCX0KKwl9IHdoaWxlIChPUChzKSAhPSBPRU5EKTsKKwlpZiAocGx1c25lc3QgIT0gMCkKKwkJZy0+aWZsYWdzIHw9IEJBRDsKKwlyZXR1cm4obWF4bmVzdCk7Cit9CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW5ldGJzZC9saWJjL3JlZ2V4L3JlZ2Vycm9yLmMgYi9saWJjL3Vwc3RyZWFtLW5ldGJzZC9saWJjL3JlZ2V4L3JlZ2Vycm9yLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTAwZDdjMAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYmMvcmVnZXgvcmVnZXJyb3IuYwpAQCAtMCwwICsxLDIyMyBAQAorLyoJJE5ldEJTRDogcmVnZXJyb3IuYyx2IDEuMjMgMjAwNy8wMi8wOSAyMzo0NDoxOCBqdW55b3VuZyBFeHAgJAkqLworCisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5MiwgMTk5MywgMTk5NAorICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQorICogSGVucnkgU3BlbmNlci4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKgorICoJQCgjKXJlZ2Vycm9yLmMJOC40IChCZXJrZWxleSkgMy8yMC85NAorICovCisKKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkyLCAxOTkzLCAxOTk0IEhlbnJ5IFNwZW5jZXIuCisgKgorICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQorICogSGVucnkgU3BlbmNlci4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQorICogICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgorICoJVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgVW5pdmVyc2l0eSBvZgorICoJQ2FsaWZvcm5pYSwgQmVya2VsZXkgYW5kIGl0cyBjb250cmlidXRvcnMuCisgKiA0LiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqCUAoIylyZWdlcnJvci5jCTguNCAoQmVya2VsZXkpIDMvMjAvOTQKKyAqLworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisjaWYgZGVmaW5lZChMSUJDX1NDQ1MpICYmICFkZWZpbmVkKGxpbnQpCisjaWYgMAorc3RhdGljIGNoYXIgc2Njc2lkW10gPSAiQCgjKXJlZ2Vycm9yLmMJOC40IChCZXJrZWxleSkgMy8yMC85NCI7CisjZWxzZQorX19SQ1NJRCgiJE5ldEJTRDogcmVnZXJyb3IuYyx2IDEuMjMgMjAwNy8wMi8wOSAyMzo0NDoxOCBqdW55b3VuZyBFeHAgJCIpOworI2VuZGlmCisjZW5kaWYgLyogTElCQ19TQ0NTIGFuZCBub3QgbGludCAqLworCisjaW5jbHVkZSAibmFtZXNwYWNlLmgiCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisKKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPGxpbWl0cy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8cmVnZXguaD4KKworI2lmZGVmIF9fd2Vha19hbGlhcworX193ZWFrX2FsaWFzKHJlZ2Vycm9yLF9yZWdlcnJvcikKKyNlbmRpZgorCisjaW5jbHVkZSAidXRpbHMuaCIKKworLyogPT09PT09PT09IGJlZ2luIGhlYWRlciBnZW5lcmF0ZWQgYnkgLi9ta2ggPT09PT09PT09ICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qID09PSByZWdlcnJvci5jID09PSAqLworc3RhdGljIGNvbnN0IGNoYXIgKnJlZ2F0b2koY29uc3QgcmVnZXhfdCAqcHJlZywgY2hhciAqbG9jYWxidWYsIHNpemVfdCBidWZsZW4pOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorLyogPT09PT09PT09IGVuZCBoZWFkZXIgZ2VuZXJhdGVkIGJ5IC4vbWtoID09PT09PT09PSAqLworLyoKKyA9ICNkZWZpbmUJUkVHX05PTUFUQ0gJIDEKKyA9ICNkZWZpbmUJUkVHX0JBRFBBVAkgMgorID0gI2RlZmluZQlSRUdfRUNPTExBVEUJIDMKKyA9ICNkZWZpbmUJUkVHX0VDVFlQRQkgNAorID0gI2RlZmluZQlSRUdfRUVTQ0FQRQkgNQorID0gI2RlZmluZQlSRUdfRVNVQlJFRwkgNgorID0gI2RlZmluZQlSRUdfRUJSQUNLCSA3CisgPSAjZGVmaW5lCVJFR19FUEFSRU4JIDgKKyA9ICNkZWZpbmUJUkVHX0VCUkFDRQkgOQorID0gI2RlZmluZQlSRUdfQkFEQlIJMTAKKyA9ICNkZWZpbmUJUkVHX0VSQU5HRQkxMQorID0gI2RlZmluZQlSRUdfRVNQQUNFCTEyCisgPSAjZGVmaW5lCVJFR19CQURSUFQJMTMKKyA9ICNkZWZpbmUJUkVHX0VNUFRZCTE0CisgPSAjZGVmaW5lCVJFR19BU1NFUlQJMTUKKyA9ICNkZWZpbmUJUkVHX0lOVkFSRwkxNgorID0gI2RlZmluZQlSRUdfQVRPSQkyNTUJLy8gY29udmVydCBuYW1lIHRvIG51bWJlciAoISkKKyA9ICNkZWZpbmUJUkVHX0lUT0EJMDQwMAkvLyBjb252ZXJ0IG51bWJlciB0byBuYW1lICghKQorICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHJlcnIgeworCWludCBjb2RlOworCWNvbnN0IGNoYXIgKm5hbWU7CisJY29uc3QgY2hhciAqZXhwbGFpbjsKK30gcmVycnNbXSA9IHsKKwl7IFJFR19OT01BVENILAkiUkVHX05PTUFUQ0giLAkicmVnZXhlYygpIGZhaWxlZCB0byBtYXRjaCIgfSwKKwl7IFJFR19CQURQQVQsCSJSRUdfQkFEUEFUIiwJImludmFsaWQgcmVndWxhciBleHByZXNzaW9uIiB9LAorCXsgUkVHX0VDT0xMQVRFLAkiUkVHX0VDT0xMQVRFIiwJImludmFsaWQgY29sbGF0aW5nIGVsZW1lbnQiIH0sCisJeyBSRUdfRUNUWVBFLAkiUkVHX0VDVFlQRSIsCSJpbnZhbGlkIGNoYXJhY3RlciBjbGFzcyIgfSwKKwl7IFJFR19FRVNDQVBFLAkiUkVHX0VFU0NBUEUiLAkidHJhaWxpbmcgYmFja3NsYXNoIChcXCkiIH0sCisJeyBSRUdfRVNVQlJFRywJIlJFR19FU1VCUkVHIiwJImludmFsaWQgYmFja3JlZmVyZW5jZSBudW1iZXIiIH0sCisJeyBSRUdfRUJSQUNLLAkiUkVHX0VCUkFDSyIsCSJicmFja2V0cyAoWyBdKSBub3QgYmFsYW5jZWQiIH0sCisJeyBSRUdfRVBBUkVOLAkiUkVHX0VQQVJFTiIsCSJwYXJlbnRoZXNlcyBub3QgYmFsYW5jZWQiIH0sCisJeyBSRUdfRUJSQUNFLAkiUkVHX0VCUkFDRSIsCSJicmFjZXMgbm90IGJhbGFuY2VkIiB9LAorCXsgUkVHX0JBREJSLAkiUkVHX0JBREJSIiwJImludmFsaWQgcmVwZXRpdGlvbiBjb3VudChzKSIgfSwKKwl7IFJFR19FUkFOR0UsCSJSRUdfRVJBTkdFIiwJImludmFsaWQgY2hhcmFjdGVyIHJhbmdlIiB9LAorCXsgUkVHX0VTUEFDRSwJIlJFR19FU1BBQ0UiLAkib3V0IG9mIG1lbW9yeSIgfSwKKwl7IFJFR19CQURSUFQsCSJSRUdfQkFEUlBUIiwJInJlcGV0aXRpb24tb3BlcmF0b3Igb3BlcmFuZCBpbnZhbGlkIiB9LAorCXsgUkVHX0VNUFRZLAkiUkVHX0VNUFRZIiwJImVtcHR5IChzdWIpZXhwcmVzc2lvbiIgfSwKKwl7IFJFR19BU1NFUlQsCSJSRUdfQVNTRVJUIiwJIlwiY2FuJ3QgaGFwcGVuXCIgLS0geW91IGZvdW5kIGEgYnVnIiB9LAorCXsgUkVHX0lOVkFSRywJIlJFR19JTlZBUkciLAkiaW52YWxpZCBhcmd1bWVudCB0byByZWdleCByb3V0aW5lIiB9LAorCXsgMCwJCSIiLAkJIioqKiB1bmtub3duIHJlZ2V4cCBlcnJvciBjb2RlICoqKiIgfQorfTsKKworLyoKKyAqIHJlZ2Vycm9yIC0gdGhlIGludGVyZmFjZSB0byBlcnJvciBudW1iZXJzCisgKiBleHRlcm4gc2l6ZV90IHJlZ2Vycm9yKGludCwgY29uc3QgcmVnZXhfdCAqLCBjaGFyICosIHNpemVfdCk7CisgKi8KKy8qIEFSR1NVU0VEICovCitzaXplX3QKK3JlZ2Vycm9yKAorICAgIGludCBlcnJjb2RlLAorICAgIGNvbnN0IHJlZ2V4X3QgKnByZWcsCisgICAgY2hhciAqZXJyYnVmLAorICAgIHNpemVfdCBlcnJidWZfc2l6ZSkKK3sKKwljb25zdCBzdHJ1Y3QgcmVyciAqcjsKKwlzaXplX3QgbGVuOworCWludCB0YXJnZXQgPSBlcnJjb2RlICZ+IFJFR19JVE9BOworCWNvbnN0IGNoYXIgKnM7CisJY2hhciBjb252YnVmWzUwXTsKKworCV9ESUFHQVNTRVJUKGVycmNvZGUgIT0gUkVHX0FUT0kgfHwgcHJlZyAhPSBOVUxMKTsKKwlfRElBR0FTU0VSVChlcnJidWYgIT0gTlVMTCk7CisKKwlpZiAoZXJyY29kZSA9PSBSRUdfQVRPSSkKKwkJcyA9IHJlZ2F0b2kocHJlZywgY29udmJ1Ziwgc2l6ZW9mIGNvbnZidWYpOworCWVsc2UgeworCQlmb3IgKHIgPSByZXJyczsgci0+Y29kZSAhPSAwOyByKyspCisJCQlpZiAoci0+Y29kZSA9PSB0YXJnZXQpCisJCQkJYnJlYWs7CisJCisJCWlmIChlcnJjb2RlICYgUkVHX0lUT0EpIHsKKwkJCWlmIChyLT5jb2RlICE9IDApIHsKKwkJCQkodm9pZClzdHJsY3B5KGNvbnZidWYsIHItPm5hbWUsIHNpemVvZiBjb252YnVmKTsKKwkJCX0gZWxzZQorCQkJCSh2b2lkKXNucHJpbnRmKGNvbnZidWYsIHNpemVvZiBjb252YnVmLAorCQkJCSAgICAiUkVHXzB4JXgiLCB0YXJnZXQpOworCQkJcyA9IGNvbnZidWY7CisJCX0gZWxzZQorCQkJcyA9IHItPmV4cGxhaW47CisJfQorCisJbGVuID0gc3RybGVuKHMpICsgMTsKKwlpZiAoZXJyYnVmX3NpemUgPiAwKQorCQkodm9pZClzdHJsY3B5KGVycmJ1ZiwgcywgZXJyYnVmX3NpemUpOworCisJcmV0dXJuKGxlbik7Cit9CisKKy8qCisgKiByZWdhdG9pIC0gaW50ZXJuYWwgcm91dGluZSB0byBpbXBsZW1lbnQgUkVHX0FUT0kKKyAqIHN0YXRpYyBjb25zdCBjaGFyICpyZWdhdG9pKGNvbnN0IHJlZ2V4X3QgKnByZWcsIGNoYXIgKmxvY2FsYnVmLAorICogc2l6ZV90IGJ1Zmxlbik7CisgKi8KK3N0YXRpYyBjb25zdCBjaGFyICoKK3JlZ2F0b2koCisgICAgY29uc3QgcmVnZXhfdCAqcHJlZywKKyAgICBjaGFyICpsb2NhbGJ1ZiwKKyAgICBzaXplX3QgYnVmbGVuKQoreworCWNvbnN0IHN0cnVjdCByZXJyICpyOworCisJZm9yIChyID0gcmVycnM7IHItPmNvZGUgIT0gMDsgcisrKQorCQlpZiAoc3RyY21wKHItPm5hbWUsIHByZWctPnJlX2VuZHApID09IDApCisJCQlicmVhazsKKwlpZiAoci0+Y29kZSA9PSAwKQorCQlyZXR1cm4gIjAiOworCisJKHZvaWQpc25wcmludGYobG9jYWxidWYsIGJ1ZmxlbiwgIiVkIiwgci0+Y29kZSk7CisJcmV0dXJuIGxvY2FsYnVmOworfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1uZXRic2QvbGliYy9yZWdleC9yZWdleDIuaCBiL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYmMvcmVnZXgvcmVnZXgyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2M4NzdlZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYmMvcmVnZXgvcmVnZXgyLmgKQEAgLTAsMCArMSwyMDkgQEAKKy8qCSROZXRCU0Q6IHJlZ2V4Mi5oLHYgMS4xMyAyMDExLzEwLzA5IDE4OjIzOjAwIGNocmlzdG9zIEV4cCAkCSovCisKKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkyLCAxOTkzLCAxOTk0CisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5CisgKiBIZW5yeSBTcGVuY2VyLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKglAKCMpcmVnZXgyLmgJOC40IChCZXJrZWxleSkgMy8yMC85NAorICovCisKKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkyLCAxOTkzLCAxOTk0IEhlbnJ5IFNwZW5jZXIuCisgKgorICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQorICogSGVucnkgU3BlbmNlci4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQorICogICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgorICoJVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgVW5pdmVyc2l0eSBvZgorICoJQ2FsaWZvcm5pYSwgQmVya2VsZXkgYW5kIGl0cyBjb250cmlidXRvcnMuCisgKiA0LiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqCUAoIylyZWdleDIuaAk4LjQgKEJlcmtlbGV5KSAzLzIwLzk0CisgKi8KKworLyoKKyAqIEZpcnN0LCB0aGUgc3R1ZmYgdGhhdCBlbmRzIHVwIGluIHRoZSBvdXRzaWRlLXdvcmxkIGluY2x1ZGUgZmlsZQorID0gdHlwZWRlZiBvZmZfdCByZWdvZmZfdDsKKyA9IHR5cGVkZWYgc3RydWN0IHsKKyA9IAlpbnQgcmVfbWFnaWM7CisgPSAJc2l6ZV90IHJlX25zdWI7CQkvLyBudW1iZXIgb2YgcGFyZW50aGVzaXplZCBzdWJleHByZXNzaW9ucworID0gCWNvbnN0IGNoYXIgKnJlX2VuZHA7CS8vIGVuZCBwb2ludGVyIGZvciBSRUdfUEVORAorID0gCXN0cnVjdCByZV9ndXRzICpyZV9nOwkvLyBub25lIG9mIHlvdXIgYnVzaW5lc3MgOi0pCisgPSB9IHJlZ2V4X3Q7CisgPSB0eXBlZGVmIHN0cnVjdCB7CisgPSAJcmVnb2ZmX3Qgcm1fc287CQkvLyBzdGFydCBvZiBtYXRjaAorID0gCXJlZ29mZl90IHJtX2VvOwkJLy8gZW5kIG9mIG1hdGNoCisgPSB9IHJlZ21hdGNoX3Q7CisgKi8KKy8qCisgKiBpbnRlcm5hbHMgb2YgcmVnZXhfdAorICovCisjZGVmaW5lCU1BR0lDMQkoKCgncideMDIwMCk8PDgpIHwgJ2UnKQorCisvKgorICogVGhlIGludGVybmFsIHJlcHJlc2VudGF0aW9uIGlzIGEgKnN0cmlwKiwgYSBzZXF1ZW5jZSBvZgorICogb3BlcmF0b3JzIGVuZGluZyB3aXRoIGFuIGVuZG1hcmtlci4gIChTb21lIHRlcm1pbm9sb2d5IGV0Yy4gaXMgYQorICogaGlzdG9yaWNhbCByZWxpYyBvZiBlYXJsaWVyIHZlcnNpb25zIHdoaWNoIHVzZWQgbXVsdGlwbGUgc3RyaXBzLikKKyAqIENlcnRhaW4gb2RkaXRpZXMgaW4gdGhlIHJlcHJlc2VudGF0aW9uIGFyZSB0aGVyZSB0byBwZXJtaXQgcnVubmluZworICogdGhlIG1hY2hpbmVyeSBiYWNrd2FyZHM7IGluIHBhcnRpY3VsYXIsIGFueSBkZXZpYXRpb24gZnJvbSBzZXF1ZW50aWFsCisgKiBmbG93IG11c3QgYmUgbWFya2VkIGF0IGJvdGggaXRzIHNvdXJjZSBhbmQgaXRzIGRlc3RpbmF0aW9uLiAgU29tZQorICogZmluZSBwb2ludHM6CisgKgorICogLSBPUExVU18gYW5kIE9fUExVUyBhcmUgKmluc2lkZSogdGhlIGxvb3AgdGhleSBjcmVhdGUuCisgKiAtIE9RVUVTVF8gYW5kIE9fUVVFU1QgYXJlICpvdXRzaWRlKiB0aGUgYnlwYXNzIHRoZXkgY3JlYXRlLgorICogLSBPQ0hfIGFuZCBPX0NIIGFyZSAqb3V0c2lkZSogdGhlIG11bHRpLXdheSBicmFuY2ggdGhleSBjcmVhdGUsIHdoaWxlCisgKiAgIE9PUjEgYW5kIE9PUjIgYXJlIHJlc3BlY3RpdmVseSB0aGUgZW5kIGFuZCB0aGUgYmVnaW5uaW5nIG9mIG9uZSBvZgorICogICB0aGUgYnJhbmNoZXMuICBOb3RlIHRoYXQgdGhlcmUgaXMgYW4gaW1wbGljaXQgT09SMiBmb2xsb3dpbmcgT0NIXworICogICBhbmQgYW4gaW1wbGljaXQgT09SMSBwcmVjZWRpbmcgT19DSC4KKyAqCisgKiBJbiBzdGF0ZSByZXByZXNlbnRhdGlvbnMsIGFuIG9wZXJhdG9yJ3MgYml0IGlzIG9uIHRvIHNpZ25pZnkgYSBzdGF0ZQorICogaW1tZWRpYXRlbHkgKnByZWNlZGluZyogImV4ZWN1dGlvbiIgb2YgdGhhdCBvcGVyYXRvci4KKyAqLwordHlwZWRlZiB1X2ludDMyX3Qgc29wOwkvKiBzdHJpcCBvcGVyYXRvciAqLwordHlwZWRlZiBzaXplX3Qgc29wbm87CisjZGVmaW5lCU9QUk1BU0sJKCh1X2ludDMyX3QpMHhmODAwMDAwMFVMKQorI2RlZmluZQlPUERNQVNLCSgodV9pbnQzMl90KTB4MDdmZmZmZmZVTCkKKyNkZWZpbmUJT1BTSElGVAkoKHVuc2lnbmVkKTI3KQorI2RlZmluZQlPUChuKQkoKG4pJk9QUk1BU0spCisjZGVmaW5lCU9QTkQobikJKChpbnQpKChuKSZPUERNQVNLKSkKKyNkZWZpbmUJU09QKG9wLCBvcG5kKQkoKG9wKXwob3BuZCkpCisKKyNkZWZpbmUgT1BDKG4pCSgoKHVfaW50MzJfdCkobikpPDxPUFNISUZUKQorLyogb3BlcmF0b3JzCQkgICBtZWFuaW5nCW9wZXJhbmQJCQkqLworLyoJCQkJCShiYWNrLCBmd2QgYXJlIG9mZnNldHMpCSovCisjZGVmaW5lCU9FTkQJT1BDKDEpCS8qIGVuZG1hcmtlcgktCQkJKi8KKyNkZWZpbmUJT0NIQVIJT1BDKDIpCS8qIGNoYXJhY3Rlcgl1bnNpZ25lZCBjaGFyCQkqLworI2RlZmluZQlPQk9MCU9QQygzKQkvKiBsZWZ0IGFuY2hvcgktCQkJKi8KKyNkZWZpbmUJT0VPTAlPUEMoNCkJLyogcmlnaHQgYW5jaG9yCS0JCQkqLworI2RlZmluZQlPQU5ZCU9QQyg1KQkvKiAuCQktCQkJKi8KKyNkZWZpbmUJT0FOWU9GCU9QQyg2KQkvKiBbLi4uXQlzZXQgbnVtYmVyCQkqLworI2RlZmluZQlPQkFDS18JT1BDKDcpCS8qIGJlZ2luIFxkCXBhcmVuIG51bWJlcgkJKi8KKyNkZWZpbmUJT19CQUNLCU9QQyg4KQkvKiBlbmQgXGQJcGFyZW4gbnVtYmVyCQkqLworI2RlZmluZQlPUExVU18JT1BDKDkpCS8qICsgcHJlZml4CWZ3ZCB0byBzdWZmaXgJCSovCisjZGVmaW5lCU9fUExVUwlPUEMoMTApCS8qICsgc3VmZml4CWJhY2sgdG8gcHJlZml4CQkqLworI2RlZmluZQlPUVVFU1RfCU9QQygxMSkJLyogPyBwcmVmaXgJZndkIHRvIHN1ZmZpeAkJKi8KKyNkZWZpbmUJT19RVUVTVAlPUEMoMTIpCS8qID8gc3VmZml4CWJhY2sgdG8gcHJlZml4CQkqLworI2RlZmluZQlPTFBBUkVOCU9QQygxMykJLyogKAkJZndkIHRvICkJCSovCisjZGVmaW5lCU9SUEFSRU4JT1BDKDE0KQkvKiApCQliYWNrIHRvICgJCSovCisjZGVmaW5lCU9DSF8JT1BDKDE1KQkvKiBiZWdpbiBjaG9pY2UJZndkIHRvIE9PUjIJCSovCisjZGVmaW5lCU9PUjEJT1BDKDE2KQkvKiB8IHB0LiAxCWJhY2sgdG8gT09SMSBvciBPQ0hfCSovCisjZGVmaW5lCU9PUjIJT1BDKDE3KQkvKiB8IHB0LiAyCWZ3ZCB0byBPT1IyIG9yIE9fQ0gJKi8KKyNkZWZpbmUJT19DSAlPUEMoMTgpCS8qIGVuZCBjaG9pY2UJYmFjayB0byBPT1IxCQkqLworI2RlZmluZQlPQk9XCU9QQygxOSkJLyogYmVnaW4gd29yZAktCQkJKi8KKyNkZWZpbmUJT0VPVwlPUEMoMjApCS8qIGVuZCB3b3JkCS0JCQkqLworCisvKgorICogU3RydWN0dXJlIGZvciBbXSBjaGFyYWN0ZXItc2V0IHJlcHJlc2VudGF0aW9uLiAgQ2hhcmFjdGVyIHNldHMgYXJlCisgKiBkb25lIGFzIGJpdCB2ZWN0b3JzLCBncm91cGVkIDggdG8gYSBieXRlIHZlY3RvciBmb3IgY29tcGFjdG5lc3MuCisgKiBUaGUgaW5kaXZpZHVhbCBzZXQgdGhlcmVmb3JlIGhhcyBib3RoIGEgcG9pbnRlciB0byB0aGUgYnl0ZSB2ZWN0b3IKKyAqIGFuZCBhIG1hc2sgdG8gcGljayBvdXQgdGhlIHJlbGV2YW50IGJpdCBvZiBlYWNoIGJ5dGUuICBBIGhhc2ggY29kZQorICogc2ltcGxpZmllcyB0ZXN0aW5nIHdoZXRoZXIgdHdvIHNldHMgY291bGQgYmUgaWRlbnRpY2FsLgorICoKKyAqIFRoaXMgd2lsbCBnZXQgdHJpY2tpZXIgZm9yIG11bHRpY2hhcmFjdGVyIGNvbGxhdGluZyBlbGVtZW50cy4gIEFzCisgKiBwcmVsaW1pbmFyeSBob29rcyBmb3IgZGVhbGluZyB3aXRoIHN1Y2ggdGhpbmdzLCB3ZSBhbHNvIGNhcnJ5IGFsb25nCisgKiBhIHN0cmluZyBvZiBtdWx0aS1jaGFyYWN0ZXIgZWxlbWVudHMsIGFuZCBkZWNpZGUgdGhlIHNpemUgb2YgdGhlCisgKiB2ZWN0b3JzIGF0IHJ1biB0aW1lLgorICovCit0eXBlZGVmIHN0cnVjdCB7CisJdWNoICpwdHI7CQkvKiAtPiB1Y2ggW2NzZXRzaXplXSAqLworCXVjaCBtYXNrOwkJLyogYml0IHdpdGhpbiBhcnJheSAqLworCXVjaCBoYXNoOwkJLyogaGFzaCBjb2RlICovCisJc2l6ZV90IHNtdWx0aXM7CisJY2hhciAqbXVsdGlzOwkJLyogLT4gY2hhcltzbXVsdGldICBhYlwwY2RcMGVmXDBcMCAqLworfSBjc2V0OworLyogbm90ZSB0aGF0IENIYWRkIGFuZCBDSHN1YiBhcmUgdW5zYWZlLCBhbmQgQ0hJTiBkb2Vzbid0IHlpZWxkIDAvMSAqLworI2RlZmluZQlDSGFkZChjcywgYykJKChjcyktPnB0clsodWNoKShjKV0gfD0gKGNzKS0+bWFzaywgKGNzKS0+aGFzaCArPSAoYykpCisjZGVmaW5lCUNIc3ViKGNzLCBjKQkoKGNzKS0+cHRyWyh1Y2gpKGMpXSAmPSB+KGNzKS0+bWFzaywgKGNzKS0+aGFzaCAtPSAoYykpCisjZGVmaW5lCUNISU4oY3MsIGMpCSgoY3MpLT5wdHJbKHVjaCkoYyldICYgKGNzKS0+bWFzaykKKyNkZWZpbmUJTUNhZGQocCwgY3MsIGNwKQltY2FkZChwLCBjcywgY3ApCS8qIHJlZ2NvbXAoKSBpbnRlcm5hbCBmbnMgKi8KKyNkZWZpbmUJTUNzdWIocCwgY3MsIGNwKQltY3N1YihwLCBjcywgY3ApCisjZGVmaW5lCU1DaW4ocCwgY3MsIGNwKQltY2luKHAsIGNzLCBjcCkKKworLyogc3R1ZmYgZm9yIGNoYXJhY3RlciBjYXRlZ29yaWVzICovCit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgY2F0X3Q7CisKKy8qCisgKiBtYWluIGNvbXBpbGVkLWV4cHJlc3Npb24gc3RydWN0dXJlCisgKi8KK3N0cnVjdCByZV9ndXRzIHsKKwlpbnQgbWFnaWM7CisjCQlkZWZpbmUJTUFHSUMyCSgoKCdSJ14wMjAwKTw8OCl8J0UnKQorCXNvcCAqc3RyaXA7CQkvKiBtYWxsb2NlZCBhcmVhIGZvciBzdHJpcCAqLworCXNpemVfdCBjc2V0c2l6ZTsJLyogbnVtYmVyIG9mIGJpdHMgaW4gYSBjc2V0IHZlY3RvciAqLworCXNpemVfdCBuY3NldHM7CQkvKiBudW1iZXIgb2YgY3NldHMgaW4gdXNlICovCisJY3NldCAqc2V0czsJCS8qIC0+IGNzZXQgW25jc2V0c10gKi8KKwl1Y2ggKnNldGJpdHM7CQkvKiAtPiB1Y2hbY3NldHNpemVdW25jc2V0cy9DSEFSX0JJVF0gKi8KKwlpbnQgY2ZsYWdzOwkJLyogY29weSBvZiByZWdjb21wKCkgY2ZsYWdzIGFyZ3VtZW50ICovCisJc29wbm8gbnN0YXRlczsJCS8qID0gbnVtYmVyIG9mIHNvcHMgKi8KKwlzb3BubyBmaXJzdHN0YXRlOwkvKiB0aGUgaW5pdGlhbCBPRU5EIChub3JtYWxseSAwKSAqLworCXNvcG5vIGxhc3RzdGF0ZTsJLyogdGhlIGZpbmFsIE9FTkQgKi8KKwlpbnQgaWZsYWdzOwkJLyogaW50ZXJuYWwgZmxhZ3MgKi8KKyMJCWRlZmluZQlVU0VCT0wJMDEJLyogdXNlZCBeICovCisjCQlkZWZpbmUJVVNFRU9MCTAyCS8qIHVzZWQgJCAqLworIwkJZGVmaW5lCUJBRAkwNAkvKiBzb21ldGhpbmcgd3JvbmcgKi8KKwlzaXplX3QgbmJvbDsJCS8qIG51bWJlciBvZiBeIHVzZWQgKi8KKwlzaXplX3QgbmVvbDsJCS8qIG51bWJlciBvZiAkIHVzZWQgKi8KKwlzaXplX3QgbmNhdGVnb3JpZXM7CS8qIGhvdyBtYW55IGNoYXJhY3RlciBjYXRlZ29yaWVzICovCisJY2F0X3QgKmNhdGVnb3JpZXM7CS8qIC0+Y2F0c3BhY2VbLUNIQVJfTUlOXSAqLworCWNoYXIgKm11c3Q7CQkvKiBtYXRjaCBtdXN0IGNvbnRhaW4gdGhpcyBzdHJpbmcgKi8KKwlzaXplX3QgbWxlbjsJCS8qIGxlbmd0aCBvZiBtdXN0ICovCisJc2l6ZV90IG5zdWI7CQkvKiBjb3B5IG9mIHJlX25zdWIgKi8KKwlpbnQgYmFja3JlZnM7CQkvKiBkb2VzIGl0IHVzZSBiYWNrIHJlZmVyZW5jZXM/ICovCisJc29wbm8gbnBsdXM7CQkvKiBob3cgZGVlcCBkb2VzIGl0IG5lc3QgK3M/ICovCisJLyogY2F0c3BhY2UgbXVzdCBiZSBsYXN0ICovCisJY2F0X3QgY2F0c3BhY2VbMV07CS8qIGFjdHVhbGx5IFtOQ10gKi8KK307CisKKy8qIG1pc2MgdXRpbGl0aWVzICovCisjZGVmaW5lCU9VVAkoQ0hBUl9NQVgrMSkJLyogYSBub24tY2hhcmFjdGVyIHZhbHVlICovCisjZGVmaW5lCUlTV09SRChjKQkoaXNhbG51bSgodW5zaWduZWQgY2hhciljKSB8fCAoYykgPT0gJ18nKQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1uZXRic2QvbGliYy9yZWdleC9yZWdleGVjLmMgYi9saWJjL3Vwc3RyZWFtLW5ldGJzZC9saWJjL3JlZ2V4L3JlZ2V4ZWMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMTZlMGI2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1uZXRic2QvbGliYy9yZWdleC9yZWdleGVjLmMKQEAgLTAsMCArMSwyMzQgQEAKKy8qCSROZXRCU0Q6IHJlZ2V4ZWMuYyx2IDEuMjIgMjAxMi8wMy8xMyAyMToxMzo0MyBjaHJpc3RvcyBFeHAgJAkqLworCisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5MiwgMTk5MywgMTk5NAorICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQorICogSGVucnkgU3BlbmNlci4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKgorICoJQCgjKXJlZ2V4ZWMuYwk4LjMgKEJlcmtlbGV5KSAzLzIwLzk0CisgKi8KKworLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTIsIDE5OTMsIDE5OTQgSGVucnkgU3BlbmNlci4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5CisgKiBIZW5yeSBTcGVuY2VyLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCisgKiAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6CisgKglUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBVbml2ZXJzaXR5IG9mCisgKglDYWxpZm9ybmlhLCBCZXJrZWxleSBhbmQgaXRzIGNvbnRyaWJ1dG9ycy4KKyAqIDQuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKgorICoJQCgjKXJlZ2V4ZWMuYwk4LjMgKEJlcmtlbGV5KSAzLzIwLzk0CisgKi8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorI2lmIGRlZmluZWQoTElCQ19TQ0NTKSAmJiAhZGVmaW5lZChsaW50KQorI2lmIDAKK3N0YXRpYyBjaGFyIHNjY3NpZFtdID0gIkAoIylyZWdleGVjLmMJOC4zIChCZXJrZWxleSkgMy8yMC85NCI7CisjZWxzZQorX19SQ1NJRCgiJE5ldEJTRDogcmVnZXhlYy5jLHYgMS4yMiAyMDEyLzAzLzEzIDIxOjEzOjQzIGNocmlzdG9zIEV4cCAkIik7CisjZW5kaWYKKyNlbmRpZiAvKiBMSUJDX1NDQ1MgYW5kIG5vdCBsaW50ICovCisKKy8qCisgKiB0aGUgb3V0ZXIgc2hlbGwgb2YgcmVnZXhlYygpCisgKgorICogVGhpcyBmaWxlIGluY2x1ZGVzIGVuZ2luZS5jICp0d2ljZSosIGFmdGVyIG11Y2hvcyBmaWRkbGluZyB3aXRoIHRoZQorICogbWFjcm9zIHRoYXQgY29kZSB1c2VzLiAgVGhpcyBsZXRzIHRoZSBzYW1lIGNvZGUgb3BlcmF0ZSBvbiB0d28gZGlmZmVyZW50CisgKiByZXByZXNlbnRhdGlvbnMgZm9yIHN0YXRlIHNldHMuCisgKi8KKyNpbmNsdWRlICJuYW1lc3BhY2UuaCIKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKworI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8bGltaXRzLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxyZWdleC5oPgorCisjaWZkZWYgX193ZWFrX2FsaWFzCitfX3dlYWtfYWxpYXMocmVnZXhlYyxfcmVnZXhlYykKKyNlbmRpZgorCisjaW5jbHVkZSAidXRpbHMuaCIKKyNpbmNsdWRlICJyZWdleDIuaCIKKworLyogbWFjcm9zIGZvciBtYW5pcHVsYXRpbmcgc3RhdGVzLCBzbWFsbCB2ZXJzaW9uICovCisjZGVmaW5lCXN0YXRlcwl1bnNpZ25lZCBsb25nCisjZGVmaW5lCXN0YXRlczEJdW5zaWduZWQgbG9uZwkvKiBmb3IgbGF0ZXIgdXNlIGluIHJlZ2V4ZWMoKSBkZWNpc2lvbiAqLworI2RlZmluZQlDTEVBUih2KQkoKHYpID0gMCkKKyNkZWZpbmUJU0VUMCh2LCBuKQkoKHYpICY9IH4oKHVuc2lnbmVkIGxvbmcpMSA8PCAobikpKQorI2RlZmluZQlTRVQxKHYsIG4pCSgodikgfD0gKHVuc2lnbmVkIGxvbmcpMSA8PCAobikpCisjZGVmaW5lCUlTU0VUKHYsIG4pCSgoKHYpICYgKCh1bnNpZ25lZCBsb25nKTEgPDwgKG4pKSkgIT0gMCkKKyNkZWZpbmUJQVNTSUdOKGQsIHMpCSgoZCkgPSAocykpCisjZGVmaW5lCUVRKGEsIGIpCSgoYSkgPT0gKGIpKQorI2RlZmluZQlTVEFURVZBUlMJaW50IGR1bW15CS8qIGR1bW15IHZlcnNpb24gKi8KKyNkZWZpbmUJU1RBVEVTRVRVUChtLCBuKQkvKiBub3RoaW5nICovCisjZGVmaW5lCVNUQVRFVEVBUkRPV04obSkJLyogbm90aGluZyAqLworI2RlZmluZQlTRVRVUCh2KQkoKHYpID0gMCkKKyNkZWZpbmUJb25lc3RhdGUJdW5zaWduZWQgbG9uZworI2RlZmluZQlJTklUKG8sIG4pCSgobykgPSAodW5zaWduZWQgbG9uZykxIDw8IChuKSkKKyNkZWZpbmUJSU5DKG8pCSgobykgPDw9IDEpCisjZGVmaW5lCUlTU1RBVEVJTih2LCBvKQkoKCh2KSAmIChvKSkgIT0gMCkKKy8qIHNvbWUgYWJicmV2aWF0aW9uczsgbm90ZSB0aGF0IHNvbWUgb2YgdGhlc2Uga25vdyB2YXJpYWJsZSBuYW1lcyEgKi8KKy8qIGRvICJpZiBJJ20gaGVyZSwgSSBjYW4gYWxzbyBiZSB0aGVyZSIgZXRjIHdpdGhvdXQgYnJhbmNoZXMgKi8KKyNkZWZpbmUJRldEKGRzdCwgc3JjLCBuKQkoKGRzdCkgfD0gKCh1bnNpZ25lZCBsb25nKShzcmMpJihoZXJlKSkgPDwgKG4pKQorI2RlZmluZQlCQUNLKGRzdCwgc3JjLCBuKQkoKGRzdCkgfD0gKCh1bnNpZ25lZCBsb25nKShzcmMpJihoZXJlKSkgPj4gKG4pKQorI2RlZmluZQlJU1NFVEJBQ0sodiwgbikJKCgodikgJiAoKHVuc2lnbmVkIGxvbmcpaGVyZSA+PiAobikpKSAhPSAwKQorLyogZnVuY3Rpb24gbmFtZXMgKi8KKyNkZWZpbmUgU05BTUVTCQkJLyogZW5naW5lLmMgbG9va3MgYWZ0ZXIgZGV0YWlscyAqLworCisjaW5jbHVkZSAiZW5naW5lLmMiCisKKy8qIG5vdyB1bmRvIHRoaW5ncyAqLworI3VuZGVmCXN0YXRlcworI3VuZGVmCUNMRUFSCisjdW5kZWYJU0VUMAorI3VuZGVmCVNFVDEKKyN1bmRlZglJU1NFVAorI3VuZGVmCUFTU0lHTgorI3VuZGVmCUVRCisjdW5kZWYJU1RBVEVWQVJTCisjdW5kZWYJU1RBVEVTRVRVUAorI3VuZGVmCVNUQVRFVEVBUkRPV04KKyN1bmRlZglTRVRVUAorI3VuZGVmCW9uZXN0YXRlCisjdW5kZWYJSU5JVAorI3VuZGVmCUlOQworI3VuZGVmCUlTU1RBVEVJTgorI3VuZGVmCUZXRAorI3VuZGVmCUJBQ0sKKyN1bmRlZglJU1NFVEJBQ0sKKyN1bmRlZglTTkFNRVMKKworLyogbWFjcm9zIGZvciBtYW5pcHVsYXRpbmcgc3RhdGVzLCBsYXJnZSB2ZXJzaW9uICovCisjZGVmaW5lCXN0YXRlcwljaGFyICoKKyNkZWZpbmUJQ0xFQVIodikJbWVtc2V0KHYsIDAsIChzaXplX3QpbS0+Zy0+bnN0YXRlcykKKyNkZWZpbmUJU0VUMCh2LCBuKQkoKHYpW25dID0gMCkKKyNkZWZpbmUJU0VUMSh2LCBuKQkoKHYpW25dID0gMSkKKyNkZWZpbmUJSVNTRVQodiwgbikJKCh2KVtuXSkKKyNkZWZpbmUJQVNTSUdOKGQsIHMpCW1lbWNweShkLCBzLCAoc2l6ZV90KW0tPmctPm5zdGF0ZXMpCisjZGVmaW5lCUVRKGEsIGIpCShtZW1jbXAoYSwgYiwgKHNpemVfdCltLT5nLT5uc3RhdGVzKSA9PSAwKQorI2RlZmluZQlTVEFURVZBUlMJaW50IHZuOyBjaGFyICpzcGFjZQorI2RlZmluZQlTVEFURVNFVFVQKG0sIG52KSBcCisgICAgaWYgKCgobSktPnNwYWNlID0gbWFsbG9jKChzaXplX3QpKChudikqKG0pLT5nLT5uc3RhdGVzKSkpID09IE5VTEwpIFwKKwlyZXR1cm4oUkVHX0VTUEFDRSk7IFwKKyAgICBlbHNlIFwKKwkobSktPnZuID0gMAorCisjZGVmaW5lCVNUQVRFVEVBUkRPV04obSkJeyBmcmVlKChtKS0+c3BhY2UpOyBtLT5zcGFjZSA9IE5VTEw7IH0KKyNkZWZpbmUJU0VUVVAodikJKCh2KSA9ICZtLT5zcGFjZVsoc2l6ZV90KShtLT52bisrICogbS0+Zy0+bnN0YXRlcyldKQorI2RlZmluZQlvbmVzdGF0ZQlpbnQKKyNkZWZpbmUJSU5JVChvLCBuKQkoKG8pID0gKGludCkobikpCisjZGVmaW5lCUlOQyhvKQkoKG8pKyspCisjZGVmaW5lCUlTU1RBVEVJTih2LCBvKQkoKHYpW29dKQorLyogc29tZSBhYmJyZXZpYXRpb25zOyBub3RlIHRoYXQgc29tZSBvZiB0aGVzZSBrbm93IHZhcmlhYmxlIG5hbWVzISAqLworLyogZG8gImlmIEknbSBoZXJlLCBJIGNhbiBhbHNvIGJlIHRoZXJlIiBldGMgd2l0aG91dCBicmFuY2hlcyAqLworI2RlZmluZQlGV0QoZHN0LCBzcmMsIG4pCSgoZHN0KVtoZXJlKyhuKV0gfD0gKHNyYylbaGVyZV0pCisjZGVmaW5lCUJBQ0soZHN0LCBzcmMsIG4pCSgoZHN0KVtoZXJlLShuKV0gfD0gKHNyYylbaGVyZV0pCisjZGVmaW5lCUlTU0VUQkFDSyh2LCBuKQkoKHYpW2hlcmUgLSAobildKQorLyogZnVuY3Rpb24gbmFtZXMgKi8KKyNkZWZpbmUJTE5BTUVTCQkJLyogZmxhZyAqLworCisjaW5jbHVkZSAiZW5naW5lLmMiCisKKy8qCisgLSByZWdleGVjIC0gaW50ZXJmYWNlIGZvciBtYXRjaGluZworID0gZXh0ZXJuIGludCByZWdleGVjKGNvbnN0IHJlZ2V4X3QgKiwgY29uc3QgY2hhciAqLCBzaXplX3QsIFwKKyA9CQkJCQlyZWdtYXRjaF90IFtdLCBpbnQpOworID0gI2RlZmluZQlSRUdfTk9UQk9MCTAwMDAxCisgPSAjZGVmaW5lCVJFR19OT1RFT0wJMDAwMDIKKyA9ICNkZWZpbmUJUkVHX1NUQVJURU5ECTAwMDA0CisgPSAjZGVmaW5lCVJFR19UUkFDRQkwMDQwMAkvLyB0cmFjaW5nIG9mIGV4ZWN1dGlvbgorID0gI2RlZmluZQlSRUdfTEFSR0UJMDEwMDAJLy8gZm9yY2UgbGFyZ2UgcmVwcmVzZW50YXRpb24KKyA9ICNkZWZpbmUJUkVHX0JBQ0tSCTAyMDAwCS8vIGZvcmNlIHVzZSBvZiBiYWNrcmVmIGNvZGUKKyAqCisgKiBXZSBwdXQgdGhpcyBoZXJlIHNvIHdlIGNhbiBleHBsb2l0IGtub3dsZWRnZSBvZiB0aGUgc3RhdGUgcmVwcmVzZW50YXRpb24KKyAqIHdoZW4gY2hvb3Npbmcgd2hpY2ggbWF0Y2hlciB0byBjYWxsLiAgQWxzbywgYnkgdGhpcyBwb2ludCB0aGUgbWF0Y2hlcnMKKyAqIGhhdmUgYmVlbiBwcm90b3R5cGVkLgorICovCitpbnQJCQkJLyogMCBzdWNjZXNzLCBSRUdfTk9NQVRDSCBmYWlsdXJlICovCityZWdleGVjKAorICAgIGNvbnN0IHJlZ2V4X3QgKnByZWcsCisgICAgY29uc3QgY2hhciAqc3RyaW5nLAorICAgIHNpemVfdCBubWF0Y2gsCisgICAgcmVnbWF0Y2hfdCBwbWF0Y2hbXSwKKyAgICBpbnQgZWZsYWdzKQoreworCXN0cnVjdCByZV9ndXRzICpnID0gcHJlZy0+cmVfZzsKKwljaGFyICpzOworI2lmZGVmIFJFREVCVUcKKyMJZGVmaW5lCUdPT0RGTEFHUyhmKQkoZikKKyNlbHNlCisjCWRlZmluZQlHT09ERkxBR1MoZikJKChmKSYoUkVHX05PVEJPTHxSRUdfTk9URU9MfFJFR19TVEFSVEVORCkpCisjZW5kaWYKKworCV9ESUFHQVNTRVJUKHByZWcgIT0gTlVMTCk7CisJX0RJQUdBU1NFUlQoc3RyaW5nICE9IE5VTEwpOworCisJaWYgKHByZWctPnJlX21hZ2ljICE9IE1BR0lDMSB8fCBnLT5tYWdpYyAhPSBNQUdJQzIpCisJCXJldHVybihSRUdfQkFEUEFUKTsKKwlhc3NlcnQoIShnLT5pZmxhZ3MmQkFEKSk7CisJaWYgKGctPmlmbGFncyZCQUQpCQkvKiBiYWNrc3RvcCBmb3Igbm8tZGVidWcgY2FzZSAqLworCQlyZXR1cm4oUkVHX0JBRFBBVCk7CisJZWZsYWdzID0gR09PREZMQUdTKGVmbGFncyk7CisKKwlzID0gX19VTkNPTlNUKHN0cmluZyk7CisKKwlpZiAoZy0+bnN0YXRlcyA8PSAoc29wbm8pKENIQVJfQklUKnNpemVvZihzdGF0ZXMxKSkgJiYgIShlZmxhZ3MmUkVHX0xBUkdFKSkKKwkJcmV0dXJuKHNtYXRjaGVyKGcsIHMsIG5tYXRjaCwgcG1hdGNoLCBlZmxhZ3MpKTsKKwllbHNlCisJCXJldHVybihsbWF0Y2hlcihnLCBzLCBubWF0Y2gsIHBtYXRjaCwgZWZsYWdzKSk7Cit9CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW5ldGJzZC9saWJjL3JlZ2V4L3JlZ2ZyZWUuYyBiL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYmMvcmVnZXgvcmVnZnJlZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlMDExZWEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW5ldGJzZC9saWJjL3JlZ2V4L3JlZ2ZyZWUuYwpAQCAtMCwwICsxLDEyOSBAQAorLyoJJE5ldEJTRDogcmVnZnJlZS5jLHYgMS4xNSAyMDA3LzAyLzA5IDIzOjQ0OjE4IGp1bnlvdW5nIEV4cCAkCSovCisKKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkyLCAxOTkzLCAxOTk0CisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5CisgKiBIZW5yeSBTcGVuY2VyLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKglAKCMpcmVnZnJlZS5jCTguMyAoQmVya2VsZXkpIDMvMjAvOTQKKyAqLworCisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5MiwgMTk5MywgMTk5NCBIZW5yeSBTcGVuY2VyLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKKyAqIEhlbnJ5IFNwZW5jZXIuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKKyAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKKyAqCVRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIFVuaXZlcnNpdHkgb2YKKyAqCUNhbGlmb3JuaWEsIEJlcmtlbGV5IGFuZCBpdHMgY29udHJpYnV0b3JzLgorICogNC4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKglAKCMpcmVnZnJlZS5jCTguMyAoQmVya2VsZXkpIDMvMjAvOTQKKyAqLworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisjaWYgZGVmaW5lZChMSUJDX1NDQ1MpICYmICFkZWZpbmVkKGxpbnQpCisjaWYgMAorc3RhdGljIGNoYXIgc2Njc2lkW10gPSAiQCgjKXJlZ2ZyZWUuYwk4LjMgKEJlcmtlbGV5KSAzLzIwLzk0IjsKKyNlbHNlCitfX1JDU0lEKCIkTmV0QlNEOiByZWdmcmVlLmMsdiAxLjE1IDIwMDcvMDIvMDkgMjM6NDQ6MTgganVueW91bmcgRXhwICQiKTsKKyNlbmRpZgorI2VuZGlmIC8qIExJQkNfU0NDUyBhbmQgbm90IGxpbnQgKi8KKworI2luY2x1ZGUgIm5hbWVzcGFjZS5oIgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxyZWdleC5oPgorCisjaWZkZWYgX193ZWFrX2FsaWFzCitfX3dlYWtfYWxpYXMocmVnZnJlZSxfcmVnZnJlZSkKKyNlbmRpZgorCisjaW5jbHVkZSAidXRpbHMuaCIKKyNpbmNsdWRlICJyZWdleDIuaCIKKworLyoKKyAtIHJlZ2ZyZWUgLSBmcmVlIGV2ZXJ5dGhpbmcKKyA9IGV4dGVybiB2b2lkIHJlZ2ZyZWUocmVnZXhfdCAqKTsKKyAqLwordm9pZAorcmVnZnJlZSgKKyAgICByZWdleF90ICpwcmVnKQoreworCXN0cnVjdCByZV9ndXRzICpnOworCisJX0RJQUdBU1NFUlQocHJlZyAhPSBOVUxMKTsKKworCV9ESUFHQVNTRVJUKHByZWctPnJlX21hZ2ljID09IE1BR0lDMSk7CisJaWYgKHByZWctPnJlX21hZ2ljICE9IE1BR0lDMSkJLyogb29wcyAqLworCQlyZXR1cm47CQkJLyogbmljZSB0byBjb21wbGFpbiwgYnV0IGhhcmQgKi8KKworCWcgPSBwcmVnLT5yZV9nOworCWlmIChnID09IE5VTEwgfHwgZy0+bWFnaWMgIT0gTUFHSUMyKQkvKiBvb3BzIGFnYWluICovCisJCXJldHVybjsKKwlwcmVnLT5yZV9tYWdpYyA9IDA7CQkvKiBtYXJrIGl0IGludmFsaWQgKi8KKwlnLT5tYWdpYyA9IDA7CQkJLyogbWFyayBpdCBpbnZhbGlkICovCisKKwlpZiAoZy0+c3RyaXAgIT0gTlVMTCkKKwkJZnJlZShnLT5zdHJpcCk7CisJaWYgKGctPnNldHMgIT0gTlVMTCkKKwkJZnJlZShnLT5zZXRzKTsKKwlpZiAoZy0+c2V0Yml0cyAhPSBOVUxMKQorCQlmcmVlKGctPnNldGJpdHMpOworCWlmIChnLT5tdXN0ICE9IE5VTEwpCisJCWZyZWUoZy0+bXVzdCk7CisJZnJlZShnKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYmMvcmVnZXgvdXRpbHMuaCBiL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYmMvcmVnZXgvdXRpbHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NjJjYWVlCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1uZXRic2QvbGliYy9yZWdleC91dGlscy5oCkBAIC0wLDAgKzEsOTEgQEAKKy8qCSROZXRCU0Q6IHV0aWxzLmgsdiAxLjYgMjAwMy8wOC8wNyAxNjo0MzoyMSBhZ2MgRXhwICQJKi8KKworLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTIsIDE5OTMsIDE5OTQKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKKyAqIEhlbnJ5IFNwZW5jZXIuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqCUAoIyl1dGlscy5oCTguMyAoQmVya2VsZXkpIDMvMjAvOTQKKyAqLworCisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5MiwgMTk5MywgMTk5NCBIZW5yeSBTcGVuY2VyLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKKyAqIEhlbnJ5IFNwZW5jZXIuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKKyAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKKyAqCVRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIFVuaXZlcnNpdHkgb2YKKyAqCUNhbGlmb3JuaWEsIEJlcmtlbGV5IGFuZCBpdHMgY29udHJpYnV0b3JzLgorICogNC4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKglAKCMpdXRpbHMuaAk4LjMgKEJlcmtlbGV5KSAzLzIwLzk0CisgKi8KKworLyogdXRpbGl0eSBkZWZpbml0aW9ucyAqLworI2RlZmluZQlEVVBNQVgJCV9QT1NJWDJfUkVfRFVQX01BWAkvKiB4eHggaXMgdGhpcyByaWdodD8gKi8KKyNkZWZpbmUJSU5GSU5JVFkJKERVUE1BWCArIDEpCisjZGVmaW5lCU5DCQkoQ0hBUl9NQVggLSBDSEFSX01JTiArIDEpCit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgdWNoOworCisvKiBzd2l0Y2ggb2ZmIGFzc2VydGlvbnMgKGlmIG5vdCBhbHJlYWR5IG9mZikgaWYgbm8gUkVERUJVRyAqLworI2lmbmRlZiBSRURFQlVHCisjaWZuZGVmIE5ERUJVRworI2RlZmluZQlOREVCVUcJLyogbm8gYXNzZXJ0aW9ucyBwbGVhc2UgKi8KKyNlbmRpZgorI2VuZGlmCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisKKy8qIGZvciBvbGQgc3lzdGVtcyB3aXRoIGJjb3B5KCkgYnV0IG5vIG1lbW1vdmUoKSAqLworI2lmZGVmIFVTRUJDT1BZCisjZGVmaW5lCW1lbW1vdmUoZCwgcywgYykJYmNvcHkocywgZCwgYykKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1uZXRic2QvbGliYy9zdGRpby9nZXRkZWxpbS5jIGIvbGliYy91cHN0cmVhbS1uZXRic2QvbGliYy9zdGRpby9nZXRkZWxpbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjY2UzNzYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW5ldGJzZC9saWJjL3N0ZGlvL2dldGRlbGltLmMKQEAgLTAsMCArMSwxNTQgQEAKKy8qICROZXRCU0Q6IGdldGRlbGltLmMsdiAxLjEzIDIwMTEvMDcvMjIgMjM6MTI6MzAgam9lcmcgRXhwICQgKi8KKworLyoKKyAqIENvcHlyaWdodCAoYykgMjAwOSBUaGUgTmV0QlNEIEZvdW5kYXRpb24sIEluYy4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIFRoZSBOZXRCU0QgRm91bmRhdGlvbgorICogYnkgUm95IE1hcnBsZXMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fUkNTSUQoIiROZXRCU0Q6IGdldGRlbGltLmMsdiAxLjEzIDIwMTEvMDcvMjIgMjM6MTI6MzAgam9lcmcgRXhwICQiKTsKKworI2luY2x1ZGUgIm5hbWVzcGFjZS5oIgorCisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisKKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGxpbWl0cy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlICJyZWVudHJhbnQuaCIKKyNpbmNsdWRlICJsb2NhbC5oIgorCisjaWZkZWYgX193ZWFrX2FsaWFzCitfX3dlYWtfYWxpYXMoZ2V0ZGVsaW0sIF9nZXRkZWxpbSkKKyNlbmRpZgorCisvKiBNaW5pbXVtIGJ1ZmZlciBzaXplIHdlIGNyZWF0ZS4KKyAqIFRoaXMgc2hvdWxkIGFsbG93IGNvbmZpZyBmaWxlcyB0byBmaXQgaW50byBvdXIgcG93ZXIgb2YgMiBidWZmZXIgZ3Jvd3RoCisgKiB3aXRob3V0IHRoZSBuZWVkIGZvciBhIHJlYWxsb2MuICovCisjZGVmaW5lIE1JTkJVRgkxMjgKKworc3NpemVfdAorX19nZXRkZWxpbShjaGFyICoqX19yZXN0cmljdCBidWYsIHNpemVfdCAqX19yZXN0cmljdCBidWZsZW4sCisgICAgaW50IHNlcCwgRklMRSAqX19yZXN0cmljdCBmcCkKK3sKKwl1bnNpZ25lZCBjaGFyICpwOworCXNpemVfdCBsZW4sIG5ld2xlbiwgb2ZmOworCWNoYXIgKm5ld2I7CisKKwlfRElBR0FTU0VSVChmcCAhPSBOVUxMKTsKKworCWlmIChidWYgPT0gTlVMTCB8fCBidWZsZW4gPT0gTlVMTCkgeworCQllcnJubyA9IEVJTlZBTDsKKwkJZ290byBlcnJvcjsKKwl9CisKKwkvKiBJZiBidWYgaXMgTlVMTCwgd2UgaGF2ZSB0byBhc3N1bWUgYSBzaXplIG9mIHplcm8gKi8KKwlpZiAoKmJ1ZiA9PSBOVUxMKQorCQkqYnVmbGVuID0gMDsKKworCV9TRVRfT1JJRU5UQVRJT04oZnAsIC0xKTsKKwlvZmYgPSAwOworCWRvIHsKKwkJLyogSWYgdGhlIGlucHV0IGJ1ZmZlciBpcyBlbXB0eSwgcmVmaWxsIGl0ICovCisJCWlmIChmcC0+X3IgPD0gMCAmJiBfX3NyZWZpbGwoZnApKSB7CisJCQlpZiAoX19zZmVycm9yKGZwKSkKKwkJCQlnb3RvIGVycm9yOworCQkJLyogTm8gZXJyb3IsIHNvIEVPRi4gKi8KKwkJCWJyZWFrOworCQl9CisKKwkJLyogU2NhbiB0aHJvdWdoIGxvb2tpbmcgZm9yIHRoZSBzZXBhcmF0b3IgKi8KKwkJcCA9IG1lbWNocihmcC0+X3AsIHNlcCwgKHNpemVfdClmcC0+X3IpOworCQlpZiAocCA9PSBOVUxMKQorCQkJbGVuID0gZnAtPl9yOworCQllbHNlCisJCQlsZW4gPSAocCAtIGZwLT5fcCkgKyAxOworCisJCW5ld2xlbiA9IG9mZiArIGxlbjsKKwkJLyogRW5zdXJlIHdlIGNhbiBoYW5kbGUgaXQgKi8KKwkJaWYgKG5ld2xlbiA8IG9mZiB8fCBuZXdsZW4gPiBTU0laRV9NQVgpIHsKKwkJCWVycm5vID0gRU9WRVJGTE9XOworCQkJZ290byBlcnJvcjsKKwkJfQorCQluZXdsZW4rKzsgLyogcmVzZXJ2ZSBzcGFjZSBmb3IgdGhlIE5VTEwgdGVybWluYXRvciAqLworCQlpZiAobmV3bGVuID4gKmJ1ZmxlbikgeworCQkJaWYgKG5ld2xlbiA8IE1JTkJVRikKKwkJCQluZXdsZW4gPSBNSU5CVUY7CisJCQlpZiAoIXBvd2Vyb2YyKG5ld2xlbikpIHsKKwkJCQkvKiBHcm93IHRoZSBidWZmZXIgdG8gdGhlIG5leHQgcG93ZXIgb2YgMiAqLworCQkJCW5ld2xlbi0tOworCQkJCW5ld2xlbiB8PSBuZXdsZW4gPj4gMTsKKwkJCQluZXdsZW4gfD0gbmV3bGVuID4+IDI7CisJCQkJbmV3bGVuIHw9IG5ld2xlbiA+PiA0OworCQkJCW5ld2xlbiB8PSBuZXdsZW4gPj4gODsKKwkJCQluZXdsZW4gfD0gbmV3bGVuID4+IDE2OworI2lmIFNJWkVfVF9NQVggPiAweGZmZmZmZmZmVQorCQkJCW5ld2xlbiB8PSBuZXdsZW4gPj4gMzI7CisjZW5kaWYKKwkJCQluZXdsZW4rKzsKKwkJCX0KKworCQkJbmV3YiA9IHJlYWxsb2MoKmJ1ZiwgbmV3bGVuKTsKKwkJCWlmIChuZXdiID09IE5VTEwpCisJCQkJZ290byBlcnJvcjsKKwkJCSpidWYgPSBuZXdiOworCQkJKmJ1ZmxlbiA9IG5ld2xlbjsKKwkJfQorCisJCSh2b2lkKW1lbWNweSgoKmJ1ZiArIG9mZiksIGZwLT5fcCwgbGVuKTsKKwkJLyogU2FmZSwgbGVuIGlzIG5ldmVyIGdyZWF0ZXIgdGhhbiB3aGF0IGZwLT5fciBjYW4gZml0LiAqLworCQlmcC0+X3IgLT0gKGludClsZW47CisJCWZwLT5fcCArPSAoaW50KWxlbjsKKwkJb2ZmICs9IGxlbjsKKwl9IHdoaWxlIChwID09IE5VTEwpOworCisJLyogUE9TSVggZGVtYW5kcyB3ZSByZXR1cm4gLTEgb24gRU9GLiAqLworCWlmIChvZmYgPT0gMCkgCisJCXJldHVybiAtMTsKKworCWlmICgqYnVmICE9IE5VTEwpCisJCSooKmJ1ZiArIG9mZikgPSAnXDAnOworCXJldHVybiBvZmY7CisKK2Vycm9yOgorCWZwLT5fZmxhZ3MgfD0gX19TRVJSOworCXJldHVybiAtMTsKK30KKworc3NpemVfdAorZ2V0ZGVsaW0oY2hhciAqKl9fcmVzdHJpY3QgYnVmLCBzaXplX3QgKl9fcmVzdHJpY3QgYnVmbGVuLAorICAgIGludCBzZXAsIEZJTEUgKl9fcmVzdHJpY3QgZnApCit7CisJc3NpemVfdCBuOworCisJRkxPQ0tGSUxFKGZwKTsKKwluID0gX19nZXRkZWxpbShidWYsIGJ1Zmxlbiwgc2VwLCBmcCk7CisJRlVOTE9DS0ZJTEUoZnApOworCXJldHVybiBuOworfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1uZXRic2QvbGliYy9zdGRpby9nZXRsaW5lLmMgYi9saWJjL3Vwc3RyZWFtLW5ldGJzZC9saWJjL3N0ZGlvL2dldGxpbmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNWQ0YmFiCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1uZXRic2QvbGliYy9zdGRpby9nZXRsaW5lLmMKQEAgLTAsMCArMSw0NSBAQAorLyogJE5ldEJTRDogZ2V0bGluZS5jLHYgMS4zIDIwMDkvMTIvMDIgMDg6NDY6MzMgcm95IEV4cCAkICovCisKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgVGhlIE5ldEJTRCBGb3VuZGF0aW9uLCBJbmMuCisgKgorICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBUaGUgTmV0QlNEIEZvdW5kYXRpb24KKyAqIGJ5IFJveSBNYXJwbGVzLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CitfX1JDU0lEKCIkTmV0QlNEOiBnZXRsaW5lLmMsdiAxLjMgMjAwOS8xMi8wMiAwODo0NjozMyByb3kgRXhwICQiKTsKKworI2luY2x1ZGUgIm5hbWVzcGFjZS5oIgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2lmZGVmIF9fd2Vha19hbGlhcworX193ZWFrX2FsaWFzKGdldGxpbmUsIF9nZXRsaW5lKQorI2VuZGlmCisKK3NzaXplX3QKK2dldGxpbmUoY2hhciAqKl9fcmVzdHJpY3QgYnVmLCBzaXplX3QgKl9fcmVzdHJpY3QgYnVmbGVuLCBGSUxFICpfX3Jlc3RyaWN0IGZwKQoreworCXJldHVybiBnZXRkZWxpbShidWYsIGJ1ZmxlbiwgJ1xuJywgZnApOworfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1uZXRic2QvbGliYy9zdGRsaWIvX3JhbmQ0OC5jIGIvbGliYy91cHN0cmVhbS1uZXRic2QvbGliYy9zdGRsaWIvX3JhbmQ0OC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0NjgwMjYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW5ldGJzZC9saWJjL3N0ZGxpYi9fcmFuZDQ4LmMKQEAgLTAsMCArMSw1NyBAQAorLyoJJE5ldEJTRDogX3JhbmQ0OC5jLHYgMS43IDIwMDUvMDYvMTIgMDU6MjE6MjcgbHVrZW0gRXhwICQJKi8KKworLyoKKyAqIENvcHlyaWdodCAoYykgMTk5MyBNYXJ0aW4gQmlyZ21laWVyCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFlvdSBtYXkgcmVkaXN0cmlidXRlIHVubW9kaWZpZWQgb3IgbW9kaWZpZWQgdmVyc2lvbnMgb2YgdGhpcyBzb3VyY2UKKyAqIGNvZGUgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBhbmQgdGhlCisgKiBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgcmV0YWluZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCBgYGFzIGlzJycsIGFuZCBjb21lcyB3aXRoIG5vIHdhcnJhbnRpZXMKKyAqIG9mIGFueSBraW5kLiBJIHNoYWxsIGluIG5vIGV2ZW50IGJlIGxpYWJsZSBmb3IgYW55dGhpbmcgdGhhdCBoYXBwZW5zCisgKiB0byBhbnlvbmUvYW55dGhpbmcgd2hlbiB1c2luZyB0aGlzIHNvZnR3YXJlLgorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKyNpZiBkZWZpbmVkKExJQkNfU0NDUykgJiYgIWRlZmluZWQobGludCkKK19fUkNTSUQoIiROZXRCU0Q6IF9yYW5kNDguYyx2IDEuNyAyMDA1LzA2LzEyIDA1OjIxOjI3IGx1a2VtIEV4cCAkIik7CisjZW5kaWYgLyogTElCQ19TQ0NTIGFuZCBub3QgbGludCAqLworCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisKKyNpbmNsdWRlICJyYW5kNDguaCIKKwordW5zaWduZWQgc2hvcnQgX19yYW5kNDhfc2VlZFszXSA9IHsKKwlSQU5ENDhfU0VFRF8wLAorCVJBTkQ0OF9TRUVEXzEsCisJUkFORDQ4X1NFRURfMgorfTsKK3Vuc2lnbmVkIHNob3J0IF9fcmFuZDQ4X211bHRbM10gPSB7CisJUkFORDQ4X01VTFRfMCwKKwlSQU5ENDhfTVVMVF8xLAorCVJBTkQ0OF9NVUxUXzIKK307Cit1bnNpZ25lZCBzaG9ydCBfX3JhbmQ0OF9hZGQgPSBSQU5ENDhfQUREOworCit2b2lkCitfX2RvcmFuZDQ4KHVuc2lnbmVkIHNob3J0IHhzZWVkWzNdKQoreworCXVuc2lnbmVkIGxvbmcgYWNjdTsKKwl1bnNpZ25lZCBzaG9ydCB0ZW1wWzJdOworCisJX0RJQUdBU1NFUlQoeHNlZWQgIT0gTlVMTCk7CisKKwlhY2N1ID0gKHVuc2lnbmVkIGxvbmcpIF9fcmFuZDQ4X211bHRbMF0gKiAodW5zaWduZWQgbG9uZykgeHNlZWRbMF0gKworCSAodW5zaWduZWQgbG9uZykgX19yYW5kNDhfYWRkOworCXRlbXBbMF0gPSAodW5zaWduZWQgc2hvcnQpIGFjY3U7CS8qIGxvd2VyIDE2IGJpdHMgKi8KKwlhY2N1ID4+PSBzaXplb2YodW5zaWduZWQgc2hvcnQpICogODsKKwlhY2N1ICs9ICh1bnNpZ25lZCBsb25nKSBfX3JhbmQ0OF9tdWx0WzBdICogKHVuc2lnbmVkIGxvbmcpIHhzZWVkWzFdICsKKwkgKHVuc2lnbmVkIGxvbmcpIF9fcmFuZDQ4X211bHRbMV0gKiAodW5zaWduZWQgbG9uZykgeHNlZWRbMF07CisJdGVtcFsxXSA9ICh1bnNpZ25lZCBzaG9ydCkgYWNjdTsJLyogbWlkZGxlIDE2IGJpdHMgKi8KKwlhY2N1ID4+PSBzaXplb2YodW5zaWduZWQgc2hvcnQpICogODsKKwlhY2N1ICs9IF9fcmFuZDQ4X211bHRbMF0gKiB4c2VlZFsyXSArIF9fcmFuZDQ4X211bHRbMV0gKiB4c2VlZFsxXSArIF9fcmFuZDQ4X211bHRbMl0gKiB4c2VlZFswXTsKKwl4c2VlZFswXSA9IHRlbXBbMF07CisJeHNlZWRbMV0gPSB0ZW1wWzFdOworCXhzZWVkWzJdID0gKHVuc2lnbmVkIHNob3J0KSBhY2N1OworfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1uZXRic2QvbGliYy9zdGRsaWIvYnNlYXJjaC5jIGIvbGliYy91cHN0cmVhbS1uZXRic2QvbGliYy9zdGRsaWIvYnNlYXJjaC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiMGUwZDgKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW5ldGJzZC9saWJjL3N0ZGxpYi9ic2VhcmNoLmMKQEAgLTAsMCArMSw4NSBAQAorLyoJJE5ldEJTRDogYnNlYXJjaC5jLHYgMS4xNSAyMDEyLzAzLzA0IDIwOjAxOjQ1IGNocmlzdG9zIEV4cCAkCSovCisKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisjaWYgZGVmaW5lZChMSUJDX1NDQ1MpICYmICFkZWZpbmVkKGxpbnQpCisjaWYgMAorc3RhdGljIGNoYXIgc2Njc2lkW10gPSAiQCgjKWJzZWFyY2guYwk4LjEgKEJlcmtlbGV5KSA2LzQvOTMiOworI2Vsc2UKK19fUkNTSUQoIiROZXRCU0Q6IGJzZWFyY2guYyx2IDEuMTUgMjAxMi8wMy8wNCAyMDowMTo0NSBjaHJpc3RvcyBFeHAgJCIpOworI2VuZGlmCisjZW5kaWYgLyogTElCQ19TQ0NTIGFuZCBub3QgbGludCAqLworCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworLyoKKyAqIFBlcmZvcm0gYSBiaW5hcnkgc2VhcmNoLgorICoKKyAqIFRoZSBjb2RlIGJlbG93IGlzIGEgYml0IHNuZWFreS4gIEFmdGVyIGEgY29tcGFyaXNvbiBmYWlscywgd2UKKyAqIGRpdmlkZSB0aGUgd29yayBpbiBoYWxmIGJ5IG1vdmluZyBlaXRoZXIgbGVmdCBvciByaWdodC4gSWYgbGltCisgKiBpcyBvZGQsIG1vdmluZyBsZWZ0IHNpbXBseSBpbnZvbHZlcyBoYWx2aW5nIGxpbTogZS5nLiwgd2hlbiBsaW0KKyAqIGlzIDUgd2UgbG9vayBhdCBpdGVtIDIsIHNvIHdlIGNoYW5nZSBsaW0gdG8gMiBzbyB0aGF0IHdlIHdpbGwKKyAqIGxvb2sgYXQgaXRlbXMgMCAmIDEuICBJZiBsaW0gaXMgZXZlbiwgdGhlIHNhbWUgYXBwbGllcy4gIElmIGxpbQorICogaXMgb2RkLCBtb3ZpbmcgcmlnaHQgYWdhaW4gaW52b2xlcyBoYWx2aW5nIGxpbSwgdGhpcyB0aW1lIG1vdmluZworICogdGhlIGJhc2UgdXAgb25lIGl0ZW0gcGFzdCBwOiBlLmcuLCB3aGVuIGxpbSBpcyA1IHdlIGNoYW5nZSBiYXNlCisgKiB0byBpdGVtIDMgYW5kIG1ha2UgbGltIDIgc28gdGhhdCB3ZSB3aWxsIGxvb2sgYXQgaXRlbXMgMyBhbmQgNC4KKyAqIElmIGxpbSBpcyBldmVuLCBob3dldmVyLCB3ZSBoYXZlIHRvIHNocmluayBpdCBieSBvbmUgYmVmb3JlCisgKiBoYWx2aW5nOiBlLmcuLCB3aGVuIGxpbSBpcyA0LCB3ZSBzdGlsbCBsb29rZWQgYXQgaXRlbSAyLCBzbyB3ZQorICogaGF2ZSB0byBtYWtlIGxpbSAzLCB0aGVuIGhhbHZlLCBvYnRhaW5pbmcgMSwgc28gdGhhdCB3ZSB3aWxsIG9ubHkKKyAqIGxvb2sgYXQgaXRlbSAzLgorICovCit2b2lkICoKK2JzZWFyY2goY29uc3Qgdm9pZCAqa2V5LCBjb25zdCB2b2lkICpiYXNlMCwgc2l6ZV90IG5tZW1iLCBzaXplX3Qgc2l6ZSwKKyAgICBpbnQgKCpjb21wYXIpKGNvbnN0IHZvaWQgKiwgY29uc3Qgdm9pZCAqKSkKK3sKKwljb25zdCBjaGFyICpiYXNlID0gYmFzZTA7CisJc2l6ZV90IGxpbTsKKwlpbnQgY21wOworCWNvbnN0IHZvaWQgKnA7CisKKwlfRElBR0FTU0VSVChrZXkgIT0gTlVMTCk7CisJX0RJQUdBU1NFUlQoYmFzZTAgIT0gTlVMTCB8fCBubWVtYiA9PSAwKTsKKwlfRElBR0FTU0VSVChjb21wYXIgIT0gTlVMTCk7CisKKwlmb3IgKGxpbSA9IG5tZW1iOyBsaW0gIT0gMDsgbGltID4+PSAxKSB7CisJCXAgPSBiYXNlICsgKGxpbSA+PiAxKSAqIHNpemU7CisJCWNtcCA9ICgqY29tcGFyKShrZXksIHApOworCQlpZiAoY21wID09IDApCisJCQlyZXR1cm4gX19VTkNPTlNUKHApOworCQlpZiAoY21wID4gMCkgewkvKiBrZXkgPiBwOiBtb3ZlIHJpZ2h0ICovCisJCQliYXNlID0gKGNvbnN0IGNoYXIgKilwICsgc2l6ZTsKKwkJCWxpbS0tOworCQl9CQkvKiBlbHNlIG1vdmUgbGVmdCAqLworCX0KKwlyZXR1cm4gKE5VTEwpOworfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1uZXRic2QvbGliYy9zdGRsaWIvZGl2LmMgYi9saWJjL3Vwc3RyZWFtLW5ldGJzZC9saWJjL3N0ZGxpYi9kaXYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mM2JkMzJmCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1uZXRic2QvbGliYy9zdGRsaWIvZGl2LmMKQEAgLTAsMCArMSw4MSBAQAorLyoJJE5ldEJTRDogZGl2LmMsdiAxLjggMjAxMi8wNi8yNSAyMjozMjo0NSBhYnMgRXhwICQJKi8KKworLyoKKyAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQorICogQ2hyaXMgVG9yZWsuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKyNpZiBkZWZpbmVkKExJQkNfU0NDUykgJiYgIWRlZmluZWQobGludCkKKyNpZiAwCitzdGF0aWMgY2hhciBzY2NzaWRbXSA9ICJAKCMpZGl2LmMJOC4xIChCZXJrZWxleSkgNi80LzkzIjsKKyNlbHNlCitfX1JDU0lEKCIkTmV0QlNEOiBkaXYuYyx2IDEuOCAyMDEyLzA2LzI1IDIyOjMyOjQ1IGFicyBFeHAgJCIpOworI2VuZGlmCisjZW5kaWYgLyogTElCQ19TQ0NTIGFuZCBub3QgbGludCAqLworCisjaW5jbHVkZSA8c3RkbGliLmg+CQkvKiBkaXZfdCAqLworCitkaXZfdAorZGl2KGludCBudW0sIGludCBkZW5vbSkKK3sKKwlkaXZfdCByOworCisJci5xdW90ID0gbnVtIC8gZGVub207CisJci5yZW0gPSBudW0gJSBkZW5vbTsKKwkvKgorCSAqIFRoZSBBTlNJIHN0YW5kYXJkIHNheXMgdGhhdCB8ci5xdW90fCA8PSB8bi9kfCwgd2hlcmUKKwkgKiBuL2QgaXMgdG8gYmUgY29tcHV0ZWQgaW4gaW5maW5pdGUgcHJlY2lzaW9uLiAgSW4gb3RoZXIKKwkgKiB3b3Jkcywgd2Ugc2hvdWxkIGFsd2F5cyB0cnVuY2F0ZSB0aGUgcXVvdGllbnQgdG93YXJkcworCSAqIDAsIG5ldmVyIC1pbmZpbml0eS4KKwkgKgorCSAqIE1hY2hpbmUgZGl2aXNpb24gYW5kIHJlbWFpbmVyIG1heSB3b3JrIGVpdGhlciB3YXkgd2hlbgorCSAqIG9uZSBvciBib3RoIG9mIG4gb3IgZCBpcyBuZWdhdGl2ZS4gIElmIG9ubHkgb25lIGlzCisJICogbmVnYXRpdmUgYW5kIHIucXVvdCBoYXMgYmVlbiB0cnVuY2F0ZWQgdG93YXJkcyAtaW5mLAorCSAqIHIucmVtIHdpbGwgaGF2ZSB0aGUgc2FtZSBzaWduIGFzIGRlbm9tIGFuZCB0aGUgb3Bwb3NpdGUKKwkgKiBzaWduIG9mIG51bTsgaWYgYm90aCBhcmUgbmVnYXRpdmUgYW5kIHIucXVvdCBoYXMgYmVlbgorCSAqIHRydW5jYXRlZCB0b3dhcmRzIC1pbmYsIHIucmVtIHdpbGwgYmUgcG9zaXRpdmUgKHdpbGwKKwkgKiBoYXZlIHRoZSBvcHBvc2l0ZSBzaWduIG9mIG51bSkuICBUaGVzZSBhcmUgY29uc2lkZXJlZAorCSAqIGB3cm9uZycuCisJICoKKwkgKiBJZiBib3RoIGFyZSBudW0gYW5kIGRlbm9tIGFyZSBwb3NpdGl2ZSwgciB3aWxsIGFsd2F5cworCSAqIGJlIHBvc2l0aXZlLgorCSAqCisJICogVGhpcyBhbGwgYm9pbHMgZG93biB0bzoKKwkgKglpZiBudW0gPj0gMCwgYnV0IHIucmVtIDwgMCwgd2UgZ290IHRoZSB3cm9uZyBhbnN3ZXIuCisJICogSW4gdGhhdCBjYXNlLCB0byBnZXQgdGhlIHJpZ2h0IGFuc3dlciwgYWRkIDEgdG8gci5xdW90IGFuZAorCSAqIHN1YnRyYWN0IGRlbm9tIGZyb20gci5yZW0uCisJICovCisJaWYgKG51bSA+PSAwICYmIHIucmVtIDwgMCkgeworCQlyLnF1b3QrKzsKKwkJci5yZW0gLT0gZGVub207CisJfQorCXJldHVybiAocik7Cit9CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW5ldGJzZC9saWJjL3N0ZGxpYi9kcmFuZDQ4LmMgYi9saWJjL3Vwc3RyZWFtLW5ldGJzZC9saWJjL3N0ZGxpYi9kcmFuZDQ4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmZiYTYwNwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYmMvc3RkbGliL2RyYW5kNDguYwpAQCAtMCwwICsxLDMyIEBACisvKgkkTmV0QlNEOiBkcmFuZDQ4LmMsdiAxLjYgMjAwNS8wNi8xMiAwNToyMToyOCBsdWtlbSBFeHAgJAkqLworCisvKgorICogQ29weXJpZ2h0IChjKSAxOTkzIE1hcnRpbiBCaXJnbWVpZXIKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogWW91IG1heSByZWRpc3RyaWJ1dGUgdW5tb2RpZmllZCBvciBtb2RpZmllZCB2ZXJzaW9ucyBvZiB0aGlzIHNvdXJjZQorICogY29kZSBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIGFuZCB0aGUKKyAqIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSByZXRhaW5lZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkIGBgYXMgaXMnJywgYW5kIGNvbWVzIHdpdGggbm8gd2FycmFudGllcworICogb2YgYW55IGtpbmQuIEkgc2hhbGwgaW4gbm8gZXZlbnQgYmUgbGlhYmxlIGZvciBhbnl0aGluZyB0aGF0IGhhcHBlbnMKKyAqIHRvIGFueW9uZS9hbnl0aGluZyB3aGVuIHVzaW5nIHRoaXMgc29mdHdhcmUuCisgKi8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorI2lmIGRlZmluZWQoTElCQ19TQ0NTKSAmJiAhZGVmaW5lZChsaW50KQorX19SQ1NJRCgiJE5ldEJTRDogZHJhbmQ0OC5jLHYgMS42IDIwMDUvMDYvMTIgMDU6MjE6MjggbHVrZW0gRXhwICQiKTsKKyNlbmRpZiAvKiBMSUJDX1NDQ1MgYW5kIG5vdCBsaW50ICovCisKKyNpbmNsdWRlICJuYW1lc3BhY2UuaCIKKyNpbmNsdWRlICJyYW5kNDguaCIKKworI2lmZGVmIF9fd2Vha19hbGlhcworX193ZWFrX2FsaWFzKGRyYW5kNDgsX2RyYW5kNDgpCisjZW5kaWYKKworZG91YmxlCitkcmFuZDQ4KHZvaWQpCit7CisJcmV0dXJuIGVyYW5kNDgoX19yYW5kNDhfc2VlZCk7Cit9CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW5ldGJzZC9saWJjL3N0ZGxpYi9lcmFuZDQ4LmMgYi9saWJjL3Vwc3RyZWFtLW5ldGJzZC9saWJjL3N0ZGxpYi9lcmFuZDQ4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjFkOGI0ZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYmMvc3RkbGliL2VyYW5kNDguYwpAQCAtMCwwICsxLDQyIEBACisvKgkkTmV0QlNEOiBlcmFuZDQ4LmMsdiAxLjkgMjAwNi8wMy8yMiAyMDo1MjoxNiBkcm9jaG5lciBFeHAgJAkqLworCisvKgorICogQ29weXJpZ2h0IChjKSAxOTkzIE1hcnRpbiBCaXJnbWVpZXIKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogWW91IG1heSByZWRpc3RyaWJ1dGUgdW5tb2RpZmllZCBvciBtb2RpZmllZCB2ZXJzaW9ucyBvZiB0aGlzIHNvdXJjZQorICogY29kZSBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIGFuZCB0aGUKKyAqIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSByZXRhaW5lZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkIGBgYXMgaXMnJywgYW5kIGNvbWVzIHdpdGggbm8gd2FycmFudGllcworICogb2YgYW55IGtpbmQuIEkgc2hhbGwgaW4gbm8gZXZlbnQgYmUgbGlhYmxlIGZvciBhbnl0aGluZyB0aGF0IGhhcHBlbnMKKyAqIHRvIGFueW9uZS9hbnl0aGluZyB3aGVuIHVzaW5nIHRoaXMgc29mdHdhcmUuCisgKi8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorI2lmIGRlZmluZWQoTElCQ19TQ0NTKSAmJiAhZGVmaW5lZChsaW50KQorX19SQ1NJRCgiJE5ldEJTRDogZXJhbmQ0OC5jLHYgMS45IDIwMDYvMDMvMjIgMjA6NTI6MTYgZHJvY2huZXIgRXhwICQiKTsKKyNlbmRpZiAvKiBMSUJDX1NDQ1MgYW5kIG5vdCBsaW50ICovCisKKyNpbmNsdWRlICJuYW1lc3BhY2UuaCIKKworI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPG1hdGguaD4KKworI2luY2x1ZGUgInJhbmQ0OC5oIgorCisjaWZkZWYgX193ZWFrX2FsaWFzCitfX3dlYWtfYWxpYXMoZXJhbmQ0OCxfZXJhbmQ0OCkKKyNlbmRpZgorCitkb3VibGUKK2VyYW5kNDgodW5zaWduZWQgc2hvcnQgeHNlZWRbM10pCit7CisKKwlfRElBR0FTU0VSVCh4c2VlZCAhPSBOVUxMKTsKKworCV9fZG9yYW5kNDgoeHNlZWQpOworCXJldHVybiBsZGV4cCgoZG91YmxlKSB4c2VlZFswXSwgLTQ4KSArCisJICAgICAgIGxkZXhwKChkb3VibGUpIHhzZWVkWzFdLCAtMzIpICsKKwkgICAgICAgbGRleHAoKGRvdWJsZSkgeHNlZWRbMl0sIC0xNik7Cit9CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW5ldGJzZC9saWJjL3N0ZGxpYi9qcmFuZDQ4LmMgYi9saWJjL3Vwc3RyZWFtLW5ldGJzZC9saWJjL3N0ZGxpYi9qcmFuZDQ4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGFiNTk0ZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYmMvc3RkbGliL2pyYW5kNDguYwpAQCAtMCwwICsxLDM5IEBACisvKgkkTmV0QlNEOiBqcmFuZDQ4LmMsdiAxLjggMjAwNS8wNi8xMiAwNToyMToyOCBsdWtlbSBFeHAgJAkqLworCisvKgorICogQ29weXJpZ2h0IChjKSAxOTkzIE1hcnRpbiBCaXJnbWVpZXIKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogWW91IG1heSByZWRpc3RyaWJ1dGUgdW5tb2RpZmllZCBvciBtb2RpZmllZCB2ZXJzaW9ucyBvZiB0aGlzIHNvdXJjZQorICogY29kZSBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIGFuZCB0aGUKKyAqIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSByZXRhaW5lZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkIGBgYXMgaXMnJywgYW5kIGNvbWVzIHdpdGggbm8gd2FycmFudGllcworICogb2YgYW55IGtpbmQuIEkgc2hhbGwgaW4gbm8gZXZlbnQgYmUgbGlhYmxlIGZvciBhbnl0aGluZyB0aGF0IGhhcHBlbnMKKyAqIHRvIGFueW9uZS9hbnl0aGluZyB3aGVuIHVzaW5nIHRoaXMgc29mdHdhcmUuCisgKi8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorI2lmIGRlZmluZWQoTElCQ19TQ0NTKSAmJiAhZGVmaW5lZChsaW50KQorX19SQ1NJRCgiJE5ldEJTRDoganJhbmQ0OC5jLHYgMS44IDIwMDUvMDYvMTIgMDU6MjE6MjggbHVrZW0gRXhwICQiKTsKKyNlbmRpZiAvKiBMSUJDX1NDQ1MgYW5kIG5vdCBsaW50ICovCisKKyNpbmNsdWRlICJuYW1lc3BhY2UuaCIKKworI2luY2x1ZGUgPGFzc2VydC5oPgorCisjaW5jbHVkZSAicmFuZDQ4LmgiCisKKyNpZmRlZiBfX3dlYWtfYWxpYXMKK19fd2Vha19hbGlhcyhqcmFuZDQ4LF9qcmFuZDQ4KQorI2VuZGlmCisKK2xvbmcKK2pyYW5kNDgodW5zaWduZWQgc2hvcnQgeHNlZWRbM10pCit7CisKKwlfRElBR0FTU0VSVCh4c2VlZCAhPSBOVUxMKTsKKworCV9fZG9yYW5kNDgoeHNlZWQpOworCXJldHVybiAoKGxvbmcpIHhzZWVkWzJdIDw8IDE2KSArIChsb25nKSB4c2VlZFsxXTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYmMvc3RkbGliL2xkaXYuYyBiL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYmMvc3RkbGliL2xkaXYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MDdjODMxCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1uZXRic2QvbGliYy9zdGRsaWIvbGRpdi5jCkBAIC0wLDAgKzEsNjAgQEAKKy8qCSROZXRCU0Q6IGxkaXYuYyx2IDEuOCAyMDEyLzA2LzI1IDIyOjMyOjQ1IGFicyBFeHAgJAkqLworCisvKgorICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5CisgKiBDaHJpcyBUb3Jlay4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorI2lmIGRlZmluZWQoTElCQ19TQ0NTKSAmJiAhZGVmaW5lZChsaW50KQorI2lmIDAKK3N0YXRpYyBjaGFyIHNjY3NpZFtdID0gIkAoIylsZGl2LmMJOC4xIChCZXJrZWxleSkgNi80LzkzIjsKKyNlbHNlCitfX1JDU0lEKCIkTmV0QlNEOiBsZGl2LmMsdiAxLjggMjAxMi8wNi8yNSAyMjozMjo0NSBhYnMgRXhwICQiKTsKKyNlbmRpZgorI2VuZGlmIC8qIExJQkNfU0NDUyBhbmQgbm90IGxpbnQgKi8KKworI2luY2x1ZGUgPHN0ZGxpYi5oPgkJLyogbGRpdl90ICovCisKK2xkaXZfdAorbGRpdihsb25nIG51bSwgbG9uZyBkZW5vbSkKK3sKKwlsZGl2X3QgcjsKKworCS8qIHNlZSBkaXYuYyBmb3IgY29tbWVudHMgKi8KKworCXIucXVvdCA9IG51bSAvIGRlbm9tOworCXIucmVtID0gbnVtICUgZGVub207CisJaWYgKG51bSA+PSAwICYmIHIucmVtIDwgMCkgeworCQlyLnF1b3QrKzsKKwkJci5yZW0gLT0gZGVub207CisJfQorCXJldHVybiAocik7Cit9CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW5ldGJzZC9saWJjL3N0ZGxpYi9sbGRpdi5jIGIvbGliYy91cHN0cmVhbS1uZXRic2QvbGliYy9zdGRsaWIvbGxkaXYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzEwNGIzCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1uZXRic2QvbGliYy9zdGRsaWIvbGxkaXYuYwpAQCAtMCwwICsxLDY2IEBACisvKgkkTmV0QlNEOiBsbGRpdi5jLHYgMS40IDIwMTIvMDYvMjUgMjI6MzI6NDUgYWJzIEV4cCAkCSovCisKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKKyAqIENocmlzIFRvcmVrLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisjaWYgZGVmaW5lZChMSUJDX1NDQ1MpICYmICFkZWZpbmVkKGxpbnQpCisjaWYgMAorc3RhdGljIGNoYXIgc2Njc2lkW10gPSAiZnJvbTogQCgjKWxkaXYuYwk4LjEgKEJlcmtlbGV5KSA2LzQvOTMiOworI2Vsc2UKK19fUkNTSUQoIiROZXRCU0Q6IGxsZGl2LmMsdiAxLjQgMjAxMi8wNi8yNSAyMjozMjo0NSBhYnMgRXhwICQiKTsKKyNlbmRpZgorI2VuZGlmIC8qIExJQkNfU0NDUyBhbmQgbm90IGxpbnQgKi8KKworI2luY2x1ZGUgIm5hbWVzcGFjZS5oIgorI2luY2x1ZGUgPHN0ZGxpYi5oPgkJLyogbGxkaXZfdCAqLworCisjaWZkZWYgX193ZWFrX2FsaWFzCitfX3dlYWtfYWxpYXMobGxkaXYsIF9sbGRpdikKKyNlbmRpZgorCisvKiBMT05HTE9ORyAqLworbGxkaXZfdAorbGxkaXYobG9uZyBsb25nIGludCBudW0sIGxvbmcgbG9uZyBpbnQgZGVub20pCit7CisJbGxkaXZfdCByOworCisJLyogc2VlIGRpdi5jIGZvciBjb21tZW50cyAqLworCisJci5xdW90ID0gbnVtIC8gZGVub207CisJci5yZW0gPSBudW0gJSBkZW5vbTsKKwlpZiAobnVtID49IDAgJiYgci5yZW0gPCAwKSB7CisJCXIucXVvdCsrOworCQlyLnJlbSAtPSBkZW5vbTsKKwl9CisJcmV0dXJuIChyKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYmMvc3RkbGliL2xyYW5kNDguYyBiL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYmMvc3RkbGliL2xyYW5kNDguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OGY4NjllCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1uZXRic2QvbGliYy9zdGRsaWIvbHJhbmQ0OC5jCkBAIC0wLDAgKzEsMzQgQEAKKy8qCSROZXRCU0Q6IGxyYW5kNDguYyx2IDEuOCAyMDA1LzA2LzEyIDA1OjIxOjI4IGx1a2VtIEV4cCAkCSovCisKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDE5OTMgTWFydGluIEJpcmdtZWllcgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBZb3UgbWF5IHJlZGlzdHJpYnV0ZSB1bm1vZGlmaWVkIG9yIG1vZGlmaWVkIHZlcnNpb25zIG9mIHRoaXMgc291cmNlCisgKiBjb2RlIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgYW5kIHRoZQorICogZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIHJldGFpbmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgYGBhcyBpcycnLCBhbmQgY29tZXMgd2l0aCBubyB3YXJyYW50aWVzCisgKiBvZiBhbnkga2luZC4gSSBzaGFsbCBpbiBubyBldmVudCBiZSBsaWFibGUgZm9yIGFueXRoaW5nIHRoYXQgaGFwcGVucworICogdG8gYW55b25lL2FueXRoaW5nIHdoZW4gdXNpbmcgdGhpcyBzb2Z0d2FyZS4KKyAqLworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisjaWYgZGVmaW5lZChMSUJDX1NDQ1MpICYmICFkZWZpbmVkKGxpbnQpCitfX1JDU0lEKCIkTmV0QlNEOiBscmFuZDQ4LmMsdiAxLjggMjAwNS8wNi8xMiAwNToyMToyOCBsdWtlbSBFeHAgJCIpOworI2VuZGlmIC8qIExJQkNfU0NDUyBhbmQgbm90IGxpbnQgKi8KKworI2luY2x1ZGUgIm5hbWVzcGFjZS5oIgorI2luY2x1ZGUgInJhbmQ0OC5oIgorCisjaWZkZWYgX193ZWFrX2FsaWFzCitfX3dlYWtfYWxpYXMobHJhbmQ0OCxfbHJhbmQ0OCkKKyNlbmRpZgorCitsb25nCitscmFuZDQ4KHZvaWQpCit7CisJX19kb3JhbmQ0OChfX3JhbmQ0OF9zZWVkKTsKKwlyZXR1cm4gKGxvbmcpKCh1bnNpZ25lZCBsb25nKSBfX3JhbmQ0OF9zZWVkWzJdIDw8IDE1KSArCisJICAgICgodW5zaWduZWQgbG9uZykgX19yYW5kNDhfc2VlZFsxXSA+PiAxKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYmMvc3RkbGliL21yYW5kNDguYyBiL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYmMvc3RkbGliL21yYW5kNDguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNzg3Y2U2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1uZXRic2QvbGliYy9zdGRsaWIvbXJhbmQ0OC5jCkBAIC0wLDAgKzEsMzMgQEAKKy8qCSROZXRCU0Q6IG1yYW5kNDguYyx2IDEuNyAyMDA1LzA2LzEyIDA1OjIxOjI4IGx1a2VtIEV4cCAkCSovCisKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDE5OTMgTWFydGluIEJpcmdtZWllcgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBZb3UgbWF5IHJlZGlzdHJpYnV0ZSB1bm1vZGlmaWVkIG9yIG1vZGlmaWVkIHZlcnNpb25zIG9mIHRoaXMgc291cmNlCisgKiBjb2RlIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgYW5kIHRoZQorICogZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIHJldGFpbmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgYGBhcyBpcycnLCBhbmQgY29tZXMgd2l0aCBubyB3YXJyYW50aWVzCisgKiBvZiBhbnkga2luZC4gSSBzaGFsbCBpbiBubyBldmVudCBiZSBsaWFibGUgZm9yIGFueXRoaW5nIHRoYXQgaGFwcGVucworICogdG8gYW55b25lL2FueXRoaW5nIHdoZW4gdXNpbmcgdGhpcyBzb2Z0d2FyZS4KKyAqLworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisjaWYgZGVmaW5lZChMSUJDX1NDQ1MpICYmICFkZWZpbmVkKGxpbnQpCitfX1JDU0lEKCIkTmV0QlNEOiBtcmFuZDQ4LmMsdiAxLjcgMjAwNS8wNi8xMiAwNToyMToyOCBsdWtlbSBFeHAgJCIpOworI2VuZGlmIC8qIExJQkNfU0NDUyBhbmQgbm90IGxpbnQgKi8KKworI2luY2x1ZGUgIm5hbWVzcGFjZS5oIgorI2luY2x1ZGUgInJhbmQ0OC5oIgorCisjaWZkZWYgX193ZWFrX2FsaWFzCitfX3dlYWtfYWxpYXMobXJhbmQ0OCxfbXJhbmQ0OCkKKyNlbmRpZgorCitsb25nCittcmFuZDQ4KHZvaWQpCit7CisJX19kb3JhbmQ0OChfX3JhbmQ0OF9zZWVkKTsKKwlyZXR1cm4gKChsb25nKSBfX3JhbmQ0OF9zZWVkWzJdIDw8IDE2KSArIChsb25nKSBfX3JhbmQ0OF9zZWVkWzFdOworfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1uZXRic2QvbGliYy9zdGRsaWIvbnJhbmQ0OC5jIGIvbGliYy91cHN0cmVhbS1uZXRic2QvbGliYy9zdGRsaWIvbnJhbmQ0OC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjNzMxODUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW5ldGJzZC9saWJjL3N0ZGxpYi9ucmFuZDQ4LmMKQEAgLTAsMCArMSwzOSBAQAorLyoJJE5ldEJTRDogbnJhbmQ0OC5jLHYgMS45IDIwMDUvMDYvMTIgMDU6MjE6MjggbHVrZW0gRXhwICQJKi8KKworLyoKKyAqIENvcHlyaWdodCAoYykgMTk5MyBNYXJ0aW4gQmlyZ21laWVyCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFlvdSBtYXkgcmVkaXN0cmlidXRlIHVubW9kaWZpZWQgb3IgbW9kaWZpZWQgdmVyc2lvbnMgb2YgdGhpcyBzb3VyY2UKKyAqIGNvZGUgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBhbmQgdGhlCisgKiBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgcmV0YWluZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCBgYGFzIGlzJycsIGFuZCBjb21lcyB3aXRoIG5vIHdhcnJhbnRpZXMKKyAqIG9mIGFueSBraW5kLiBJIHNoYWxsIGluIG5vIGV2ZW50IGJlIGxpYWJsZSBmb3IgYW55dGhpbmcgdGhhdCBoYXBwZW5zCisgKiB0byBhbnlvbmUvYW55dGhpbmcgd2hlbiB1c2luZyB0aGlzIHNvZnR3YXJlLgorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKyNpZiBkZWZpbmVkKExJQkNfU0NDUykgJiYgIWRlZmluZWQobGludCkKK19fUkNTSUQoIiROZXRCU0Q6IG5yYW5kNDguYyx2IDEuOSAyMDA1LzA2LzEyIDA1OjIxOjI4IGx1a2VtIEV4cCAkIik7CisjZW5kaWYgLyogTElCQ19TQ0NTIGFuZCBub3QgbGludCAqLworCisjaW5jbHVkZSAibmFtZXNwYWNlLmgiCisKKyNpbmNsdWRlIDxhc3NlcnQuaD4KKworI2luY2x1ZGUgInJhbmQ0OC5oIgorCisjaWZkZWYgX193ZWFrX2FsaWFzCitfX3dlYWtfYWxpYXMobnJhbmQ0OCxfbnJhbmQ0OCkKKyNlbmRpZgorCitsb25nCitucmFuZDQ4KHVuc2lnbmVkIHNob3J0IHhzZWVkWzNdKQoreworCV9ESUFHQVNTRVJUKHhzZWVkICE9IE5VTEwpOworCisJX19kb3JhbmQ0OCh4c2VlZCk7CisJcmV0dXJuIChsb25nKSgodW5zaWduZWQgbG9uZykgeHNlZWRbMl0gPDwgMTUpICsKKwkgICAgKCh1bnNpZ25lZCBsb25nKSB4c2VlZFsxXSA+PiAxKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYmMvc3RkbGliL3NlZWQ0OC5jIGIvbGliYy91cHN0cmVhbS1uZXRic2QvbGliYy9zdGRsaWIvc2VlZDQ4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzZjMDU3MAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYmMvc3RkbGliL3NlZWQ0OC5jCkBAIC0wLDAgKzEsNDkgQEAKKy8qCSROZXRCU0Q6IHNlZWQ0OC5jLHYgMS44IDIwMDUvMDYvMTIgMDU6MjE6MjggbHVrZW0gRXhwICQJKi8KKworLyoKKyAqIENvcHlyaWdodCAoYykgMTk5MyBNYXJ0aW4gQmlyZ21laWVyCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFlvdSBtYXkgcmVkaXN0cmlidXRlIHVubW9kaWZpZWQgb3IgbW9kaWZpZWQgdmVyc2lvbnMgb2YgdGhpcyBzb3VyY2UKKyAqIGNvZGUgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBhbmQgdGhlCisgKiBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgcmV0YWluZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCBgYGFzIGlzJycsIGFuZCBjb21lcyB3aXRoIG5vIHdhcnJhbnRpZXMKKyAqIG9mIGFueSBraW5kLiBJIHNoYWxsIGluIG5vIGV2ZW50IGJlIGxpYWJsZSBmb3IgYW55dGhpbmcgdGhhdCBoYXBwZW5zCisgKiB0byBhbnlvbmUvYW55dGhpbmcgd2hlbiB1c2luZyB0aGlzIHNvZnR3YXJlLgorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKyNpZiBkZWZpbmVkKExJQkNfU0NDUykgJiYgIWRlZmluZWQobGludCkKK19fUkNTSUQoIiROZXRCU0Q6IHNlZWQ0OC5jLHYgMS44IDIwMDUvMDYvMTIgMDU6MjE6MjggbHVrZW0gRXhwICQiKTsKKyNlbmRpZiAvKiBMSUJDX1NDQ1MgYW5kIG5vdCBsaW50ICovCisKKyNpbmNsdWRlICJuYW1lc3BhY2UuaCIKKworI2luY2x1ZGUgPGFzc2VydC5oPgorCisjaW5jbHVkZSAicmFuZDQ4LmgiCisKKyNpZmRlZiBfX3dlYWtfYWxpYXMKK19fd2Vha19hbGlhcyhzZWVkNDgsX3NlZWQ0OCkKKyNlbmRpZgorCit1bnNpZ25lZCBzaG9ydCAqCitzZWVkNDgodW5zaWduZWQgc2hvcnQgeHNlZWRbM10pCit7CisJc3RhdGljIHVuc2lnbmVkIHNob3J0IHNzZWVkWzNdOworCisJX0RJQUdBU1NFUlQoeHNlZWQgIT0gTlVMTCk7CisKKwlzc2VlZFswXSA9IF9fcmFuZDQ4X3NlZWRbMF07CisJc3NlZWRbMV0gPSBfX3JhbmQ0OF9zZWVkWzFdOworCXNzZWVkWzJdID0gX19yYW5kNDhfc2VlZFsyXTsKKwlfX3JhbmQ0OF9zZWVkWzBdID0geHNlZWRbMF07CisJX19yYW5kNDhfc2VlZFsxXSA9IHhzZWVkWzFdOworCV9fcmFuZDQ4X3NlZWRbMl0gPSB4c2VlZFsyXTsKKwlfX3JhbmQ0OF9tdWx0WzBdID0gUkFORDQ4X01VTFRfMDsKKwlfX3JhbmQ0OF9tdWx0WzFdID0gUkFORDQ4X01VTFRfMTsKKwlfX3JhbmQ0OF9tdWx0WzJdID0gUkFORDQ4X01VTFRfMjsKKwlfX3JhbmQ0OF9hZGQgPSBSQU5ENDhfQUREOworCXJldHVybiBzc2VlZDsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYmMvc3RkbGliL3NyYW5kNDguYyBiL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYmMvc3RkbGliL3NyYW5kNDguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOTY3M2ZlCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1uZXRic2QvbGliYy9zdGRsaWIvc3JhbmQ0OC5jCkBAIC0wLDAgKzEsMzggQEAKKy8qCSROZXRCU0Q6IHNyYW5kNDguYyx2IDEuNyAyMDA1LzA2LzEyIDA1OjIxOjI4IGx1a2VtIEV4cCAkCSovCisKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDE5OTMgTWFydGluIEJpcmdtZWllcgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBZb3UgbWF5IHJlZGlzdHJpYnV0ZSB1bm1vZGlmaWVkIG9yIG1vZGlmaWVkIHZlcnNpb25zIG9mIHRoaXMgc291cmNlCisgKiBjb2RlIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgYW5kIHRoZQorICogZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIHJldGFpbmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgYGBhcyBpcycnLCBhbmQgY29tZXMgd2l0aCBubyB3YXJyYW50aWVzCisgKiBvZiBhbnkga2luZC4gSSBzaGFsbCBpbiBubyBldmVudCBiZSBsaWFibGUgZm9yIGFueXRoaW5nIHRoYXQgaGFwcGVucworICogdG8gYW55b25lL2FueXRoaW5nIHdoZW4gdXNpbmcgdGhpcyBzb2Z0d2FyZS4KKyAqLworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisjaWYgZGVmaW5lZChMSUJDX1NDQ1MpICYmICFkZWZpbmVkKGxpbnQpCitfX1JDU0lEKCIkTmV0QlNEOiBzcmFuZDQ4LmMsdiAxLjcgMjAwNS8wNi8xMiAwNToyMToyOCBsdWtlbSBFeHAgJCIpOworI2VuZGlmIC8qIExJQkNfU0NDUyBhbmQgbm90IGxpbnQgKi8KKworI2luY2x1ZGUgIm5hbWVzcGFjZS5oIgorI2luY2x1ZGUgInJhbmQ0OC5oIgorCisjaWZkZWYgX193ZWFrX2FsaWFzCitfX3dlYWtfYWxpYXMoc3JhbmQ0OCxfc3JhbmQ0OCkKKyNlbmRpZgorCit2b2lkCitzcmFuZDQ4KGxvbmcgc2VlZCkKK3sKKwlfX3JhbmQ0OF9zZWVkWzBdID0gUkFORDQ4X1NFRURfMDsKKwlfX3JhbmQ0OF9zZWVkWzFdID0gKHVuc2lnbmVkIHNob3J0KSBzZWVkOworCV9fcmFuZDQ4X3NlZWRbMl0gPSAodW5zaWduZWQgc2hvcnQpICgodW5zaWduZWQgbG9uZylzZWVkID4+IDE2KTsKKwlfX3JhbmQ0OF9tdWx0WzBdID0gUkFORDQ4X01VTFRfMDsKKwlfX3JhbmQ0OF9tdWx0WzFdID0gUkFORDQ4X01VTFRfMTsKKwlfX3JhbmQ0OF9tdWx0WzJdID0gUkFORDQ4X01VTFRfMjsKKwlfX3JhbmQ0OF9hZGQgPSBSQU5ENDhfQUREOworfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1uZXRic2QvbGliYy9zdGRsaWIvdGRlbGV0ZS5jIGIvbGliYy91cHN0cmVhbS1uZXRic2QvbGliYy9zdGRsaWIvdGRlbGV0ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0MDE3ZGMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW5ldGJzZC9saWJjL3N0ZGxpYi90ZGVsZXRlLmMKQEAgLTAsMCArMSw2NyBAQAorLyoJJE5ldEJTRDogdGRlbGV0ZS5jLHYgMS42IDIwMTIvMDYvMjUgMjI6MzI6NDUgYWJzIEV4cCAkCSovCisKKy8qCisgKiBUcmVlIHNlYXJjaCBnZW5lcmFsaXplZCBmcm9tIEtudXRoICg2LjIuMikgQWxnb3JpdGhtIFQganVzdCBsaWtlCisgKiB0aGUgQVQmVCBtYW4gcGFnZSBzYXlzLgorICoKKyAqIFRoZSBub2RlX3Qgc3RydWN0dXJlIGlzIGZvciBpbnRlcm5hbCB1c2Ugb25seSwgbGludCBkb2Vzbid0IGdyb2sgaXQuCisgKgorICogV3JpdHRlbiBieSByZWFkaW5nIHRoZSBTeXN0ZW0gViBJbnRlcmZhY2UgRGVmaW5pdGlvbiwgbm90IHRoZSBjb2RlLgorICoKKyAqIFRvdGFsbHkgcHVibGljIGRvbWFpbi4KKyAqLworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisjaWYgZGVmaW5lZChMSUJDX1NDQ1MpICYmICFkZWZpbmVkKGxpbnQpCitfX1JDU0lEKCIkTmV0QlNEOiB0ZGVsZXRlLmMsdiAxLjYgMjAxMi8wNi8yNSAyMjozMjo0NSBhYnMgRXhwICQiKTsKKyNlbmRpZiAvKiBMSUJDX1NDQ1MgYW5kIG5vdCBsaW50ICovCisKKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNkZWZpbmUgX1NFQVJDSF9QUklWQVRFCisjaW5jbHVkZSA8c2VhcmNoLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisKKworLyogZmluZCBhIG5vZGUgd2l0aCBrZXkgInZrZXkiIGluIHRyZWUgInZyb290cCIgKi8KK3ZvaWQgKgordGRlbGV0ZShjb25zdCB2b2lkICp2a2V5LCB2b2lkICoqdnJvb3RwLAorICAgIGludCAoKmNvbXBhcikoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICopKQoreworCW5vZGVfdCAqKnJvb3RwID0gKG5vZGVfdCAqKil2cm9vdHA7CisJbm9kZV90ICpwLCAqcSwgKnI7CisJaW50ICBjbXA7CisKKwlfRElBR0FTU0VSVCh2a2V5ICE9IE5VTEwpOworCV9ESUFHQVNTRVJUKGNvbXBhciAhPSBOVUxMKTsKKworCWlmIChyb290cCA9PSBOVUxMIHx8IChwID0gKnJvb3RwKSA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKKworCXdoaWxlICgoY21wID0gKCpjb21wYXIpKHZrZXksICgqcm9vdHApLT5rZXkpKSAhPSAwKSB7CisJCXAgPSAqcm9vdHA7CisJCXJvb3RwID0gKGNtcCA8IDApID8KKwkJICAgICYoKnJvb3RwKS0+bGxpbmsgOgkJLyogZm9sbG93IGxsaW5rIGJyYW5jaCAqLworCQkgICAgJigqcm9vdHApLT5ybGluazsJCS8qIGZvbGxvdyBybGluayBicmFuY2ggKi8KKwkJaWYgKCpyb290cCA9PSBOVUxMKQorCQkJcmV0dXJuIE5VTEw7CQkvKiBrZXkgbm90IGZvdW5kICovCisJfQorCXIgPSAoKnJvb3RwKS0+cmxpbms7CQkJLyogRDE6ICovCisJaWYgKChxID0gKCpyb290cCktPmxsaW5rKSA9PSBOVUxMKQkvKiBMZWZ0IE5VTEw/ICovCisJCXEgPSByOworCWVsc2UgaWYgKHIgIT0gTlVMTCkgewkJCS8qIFJpZ2h0IGxpbmsgaXMgTlVMTD8gKi8KKwkJaWYgKHItPmxsaW5rID09IE5VTEwpIHsJCS8qIEQyOiBGaW5kIHN1Y2Nlc3NvciAqLworCQkJci0+bGxpbmsgPSBxOworCQkJcSA9IHI7CisJCX0gZWxzZSB7CQkJLyogRDM6IEZpbmQgTlVMTCBsaW5rICovCisJCQlmb3IgKHEgPSByLT5sbGluazsgcS0+bGxpbmsgIT0gTlVMTDsgcSA9IHItPmxsaW5rKQorCQkJCXIgPSBxOworCQkJci0+bGxpbmsgPSBxLT5ybGluazsKKwkJCXEtPmxsaW5rID0gKCpyb290cCktPmxsaW5rOworCQkJcS0+cmxpbmsgPSAoKnJvb3RwKS0+cmxpbms7CisJCX0KKwl9CisJaWYgKHAgIT0gKnJvb3RwKQorCQlmcmVlKCpyb290cCk7CQkJLyogRDQ6IEZyZWUgbm9kZSAqLworCSpyb290cCA9IHE7CQkJCS8qIGxpbmsgcGFyZW50IHRvIG5ldyBub2RlICovCisJcmV0dXJuIHA7Cit9CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW5ldGJzZC9saWJjL3N0ZGxpYi90ZmluZC5jIGIvbGliYy91cHN0cmVhbS1uZXRic2QvbGliYy9zdGRsaWIvdGZpbmQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZDNmMzYyCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1uZXRic2QvbGliYy9zdGRsaWIvdGZpbmQuYwpAQCAtMCwwICsxLDQ3IEBACisvKgkkTmV0QlNEOiB0ZmluZC5jLHYgMS43IDIwMTIvMDYvMjUgMjI6MzI6NDUgYWJzIEV4cCAkCSovCisKKy8qCisgKiBUcmVlIHNlYXJjaCBnZW5lcmFsaXplZCBmcm9tIEtudXRoICg2LjIuMikgQWxnb3JpdGhtIFQganVzdCBsaWtlCisgKiB0aGUgQVQmVCBtYW4gcGFnZSBzYXlzLgorICoKKyAqIFRoZSBub2RlX3Qgc3RydWN0dXJlIGlzIGZvciBpbnRlcm5hbCB1c2Ugb25seSwgbGludCBkb2Vzbid0IGdyb2sgaXQuCisgKgorICogV3JpdHRlbiBieSByZWFkaW5nIHRoZSBTeXN0ZW0gViBJbnRlcmZhY2UgRGVmaW5pdGlvbiwgbm90IHRoZSBjb2RlLgorICoKKyAqIFRvdGFsbHkgcHVibGljIGRvbWFpbi4KKyAqLworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisjaWYgZGVmaW5lZChMSUJDX1NDQ1MpICYmICFkZWZpbmVkKGxpbnQpCitfX1JDU0lEKCIkTmV0QlNEOiB0ZmluZC5jLHYgMS43IDIwMTIvMDYvMjUgMjI6MzI6NDUgYWJzIEV4cCAkIik7CisjZW5kaWYgLyogTElCQ19TQ0NTIGFuZCBub3QgbGludCAqLworCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjZGVmaW5lIF9TRUFSQ0hfUFJJVkFURQorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHNlYXJjaC5oPgorCisvKiBmaW5kIGEgbm9kZSBieSBrZXkgInZrZXkiIGluIHRyZWUgInZyb290cCIsIG9yIHJldHVybiAwICovCit2b2lkICoKK3RmaW5kKGNvbnN0IHZvaWQgKnZrZXksIHZvaWQgKiBjb25zdCAqdnJvb3RwLAorICAgIGludCAoKmNvbXBhcikoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICopKQoreworCW5vZGVfdCAqIGNvbnN0ICpyb290cCA9IChub2RlX3QgKiBjb25zdCopdnJvb3RwOworCisJX0RJQUdBU1NFUlQodmtleSAhPSBOVUxMKTsKKwlfRElBR0FTU0VSVChjb21wYXIgIT0gTlVMTCk7CisKKwlpZiAocm9vdHAgPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisKKwl3aGlsZSAoKnJvb3RwICE9IE5VTEwpIHsJCS8qIFQxOiAqLworCQlpbnQgcjsKKworCQlpZiAoKHIgPSAoKmNvbXBhcikodmtleSwgKCpyb290cCktPmtleSkpID09IDApCS8qIFQyOiAqLworCQkJcmV0dXJuICpyb290cDsJCS8qIGtleSBmb3VuZCAqLworCQlyb290cCA9IChyIDwgMCkgPworCQkgICAgJigqcm9vdHApLT5sbGluayA6CQkvKiBUMzogZm9sbG93IGxlZnQgYnJhbmNoICovCisJCSAgICAmKCpyb290cCktPnJsaW5rOwkJLyogVDQ6IGZvbGxvdyByaWdodCBicmFuY2ggKi8KKwl9CisJcmV0dXJuIE5VTEw7Cit9CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW5ldGJzZC9saWJjL3N0ZGxpYi90c2VhcmNoLmMgYi9saWJjL3Vwc3RyZWFtLW5ldGJzZC9saWJjL3N0ZGxpYi90c2VhcmNoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWYyZmU5YwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYmMvc3RkbGliL3RzZWFyY2guYwpAQCAtMCwwICsxLDU2IEBACisvKgkkTmV0QlNEOiB0c2VhcmNoLmMsdiAxLjcgMjAxMi8wNi8yNSAyMjozMjo0NSBhYnMgRXhwICQJKi8KKworLyoKKyAqIFRyZWUgc2VhcmNoIGdlbmVyYWxpemVkIGZyb20gS251dGggKDYuMi4yKSBBbGdvcml0aG0gVCBqdXN0IGxpa2UKKyAqIHRoZSBBVCZUIG1hbiBwYWdlIHNheXMuCisgKgorICogVGhlIG5vZGVfdCBzdHJ1Y3R1cmUgaXMgZm9yIGludGVybmFsIHVzZSBvbmx5LCBsaW50IGRvZXNuJ3QgZ3JvayBpdC4KKyAqCisgKiBXcml0dGVuIGJ5IHJlYWRpbmcgdGhlIFN5c3RlbSBWIEludGVyZmFjZSBEZWZpbml0aW9uLCBub3QgdGhlIGNvZGUuCisgKgorICogVG90YWxseSBwdWJsaWMgZG9tYWluLgorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKyNpZiBkZWZpbmVkKExJQkNfU0NDUykgJiYgIWRlZmluZWQobGludCkKK19fUkNTSUQoIiROZXRCU0Q6IHRzZWFyY2guYyx2IDEuNyAyMDEyLzA2LzI1IDIyOjMyOjQ1IGFicyBFeHAgJCIpOworI2VuZGlmIC8qIExJQkNfU0NDUyBhbmQgbm90IGxpbnQgKi8KKworI2luY2x1ZGUgPGFzc2VydC5oPgorI2RlZmluZSBfU0VBUkNIX1BSSVZBVEUKKyNpbmNsdWRlIDxzZWFyY2guaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworLyogZmluZCBvciBpbnNlcnQgZGF0dW0gaW50byBzZWFyY2ggdHJlZSAqLwordm9pZCAqCit0c2VhcmNoKGNvbnN0IHZvaWQgKnZrZXksIHZvaWQgKip2cm9vdHAsCisgICAgaW50ICgqY29tcGFyKShjb25zdCB2b2lkICosIGNvbnN0IHZvaWQgKikpCit7CisJbm9kZV90ICpxOworCW5vZGVfdCAqKnJvb3RwID0gKG5vZGVfdCAqKil2cm9vdHA7CisKKwlfRElBR0FTU0VSVCh2a2V5ICE9IE5VTEwpOworCV9ESUFHQVNTRVJUKGNvbXBhciAhPSBOVUxMKTsKKworCWlmIChyb290cCA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKKworCXdoaWxlICgqcm9vdHAgIT0gTlVMTCkgewkvKiBLbnV0aCdzIFQxOiAqLworCQlpbnQgcjsKKworCQlpZiAoKHIgPSAoKmNvbXBhcikodmtleSwgKCpyb290cCktPmtleSkpID09IDApCS8qIFQyOiAqLworCQkJcmV0dXJuICpyb290cDsJCS8qIHdlIGZvdW5kIGl0ISAqLworCisJCXJvb3RwID0gKHIgPCAwKSA/CisJCSAgICAmKCpyb290cCktPmxsaW5rIDoJCS8qIFQzOiBmb2xsb3cgbGVmdCBicmFuY2ggKi8KKwkJICAgICYoKnJvb3RwKS0+cmxpbms7CQkvKiBUNDogZm9sbG93IHJpZ2h0IGJyYW5jaCAqLworCX0KKworCXEgPSBtYWxsb2Moc2l6ZW9mKG5vZGVfdCkpOwkJLyogVDU6IGtleSBub3QgZm91bmQgKi8KKwlpZiAocSAhPSAwKSB7CQkJCS8qIG1ha2UgbmV3IG5vZGUgKi8KKwkJKnJvb3RwID0gcTsJCQkvKiBsaW5rIG5ldyBub2RlIHRvIG9sZCAqLworCQlxLT5rZXkgPSBfX1VOQ09OU1QodmtleSk7CS8qIGluaXRpYWxpemUgbmV3IG5vZGUgKi8KKwkJcS0+bGxpbmsgPSBxLT5ybGluayA9IE5VTEw7CisJfQorCXJldHVybiBxOworfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1uZXRic2QvbGliYy9zdHJpbmcvbWVtY2NweS5jIGIvbGliYy91cHN0cmVhbS1uZXRic2QvbGliYy9zdHJpbmcvbWVtY2NweS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwODYyNDEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW5ldGJzZC9saWJjL3N0cmluZy9tZW1jY3B5LmMKQEAgLTAsMCArMSw2MSBAQAorLyoJJE5ldEJTRDogbWVtY2NweS5jLHYgMS4xMyAyMDEyLzA2LzI1IDIyOjMyOjQ2IGFicyBFeHAgJAkqLworCisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKyNpZiBkZWZpbmVkKExJQkNfU0NDUykgJiYgIWRlZmluZWQobGludCkKKyNpZiAwCitzdGF0aWMgY2hhciBzY2NzaWRbXSA9ICJAKCMpbWVtY2NweS5jCTguMSAoQmVya2VsZXkpIDYvNC85MyI7CisjZWxzZQorX19SQ1NJRCgiJE5ldEJTRDogbWVtY2NweS5jLHYgMS4xMyAyMDEyLzA2LzI1IDIyOjMyOjQ2IGFicyBFeHAgJCIpOworI2VuZGlmCisjZW5kaWYgLyogTElCQ19TQ0NTIGFuZCBub3QgbGludCAqLworCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKK3ZvaWQgKgorbWVtY2NweSh2b2lkICp0LCBjb25zdCB2b2lkICpmLCBpbnQgYywgc2l6ZV90IG4pCit7CisKKwlfRElBR0FTU0VSVCh0ICE9IDApOworCV9ESUFHQVNTRVJUKGYgIT0gMCk7CisKKwlpZiAobikgeworCQl1bnNpZ25lZCBjaGFyICp0cCA9IHQ7CisJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmZwID0gZjsKKwkJdW5zaWduZWQgY2hhciB1YyA9IGM7CisJCWRvIHsKKwkJCWlmICgoKnRwKysgPSAqZnArKykgPT0gdWMpCisJCQkJcmV0dXJuICh0cCk7CisJCX0gd2hpbGUgKC0tbiAhPSAwKTsKKwl9CisJcmV0dXJuICgwKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYmMvc3RyaW5nL3N0cmNhc2VzdHIuYyBiL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYmMvc3RyaW5nL3N0cmNhc2VzdHIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOGE5NDQ0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1uZXRic2QvbGliYy9zdHJpbmcvc3RyY2FzZXN0ci5jCkBAIC0wLDAgKzEsNjkgQEAKKy8qCSROZXRCU0Q6IHN0cmNhc2VzdHIuYyx2IDEuMyAyMDA1LzExLzI5IDAzOjEyOjAwIGNocmlzdG9zIEV4cCAkCSovCisKKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5CisgKiBDaHJpcyBUb3Jlay4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorI2lmIGRlZmluZWQoTElCQ19TQ0NTKSAmJiAhZGVmaW5lZChsaW50KQorX19SQ1NJRCgiJE5ldEJTRDogc3RyY2FzZXN0ci5jLHYgMS4zIDIwMDUvMTEvMjkgMDM6MTI6MDAgY2hyaXN0b3MgRXhwICQiKTsKKyNlbmRpZiAvKiBMSUJDX1NDQ1MgYW5kIG5vdCBsaW50ICovCisKKyNpbmNsdWRlICJuYW1lc3BhY2UuaCIKKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisvKgorICogRmluZCB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiBmaW5kIGluIHMsIGlnbm9yZSBjYXNlLgorICovCitjaGFyICoKK3N0cmNhc2VzdHIoY29uc3QgY2hhciAqcywgY29uc3QgY2hhciAqZmluZCkKK3sKKwljaGFyIGMsIHNjOworCXNpemVfdCBsZW47CisKKwlfRElBR0FTU0VSVChzICE9IE5VTEwpOworCV9ESUFHQVNTRVJUKGZpbmQgIT0gTlVMTCk7CisKKwlpZiAoKGMgPSAqZmluZCsrKSAhPSAwKSB7CisJCWMgPSB0b2xvd2VyKCh1bnNpZ25lZCBjaGFyKWMpOworCQlsZW4gPSBzdHJsZW4oZmluZCk7CisJCWRvIHsKKwkJCWRvIHsKKwkJCQlpZiAoKHNjID0gKnMrKykgPT0gMCkKKwkJCQkJcmV0dXJuIChOVUxMKTsKKwkJCX0gd2hpbGUgKChjaGFyKXRvbG93ZXIoKHVuc2lnbmVkIGNoYXIpc2MpICE9IGMpOworCQl9IHdoaWxlIChzdHJuY2FzZWNtcChzLCBmaW5kLCBsZW4pICE9IDApOworCQlzLS07CisJfQorCXJldHVybiBfX1VOQ09OU1Qocyk7Cit9CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW5ldGJzZC9saWJjL3N0cmluZy9zdHJjb2xsLmMgYi9saWJjL3Vwc3RyZWFtLW5ldGJzZC9saWJjL3N0cmluZy9zdHJjb2xsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzdhMDk0MgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYmMvc3RyaW5nL3N0cmNvbGwuYwpAQCAtMCwwICsxLDU5IEBACisvKgkkTmV0QlNEOiBzdHJjb2xsLmMsdiAxLjEwIDIwMTIvMDYvMjUgMjI6MzI6NDYgYWJzIEV4cCAkCSovCisKKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5CisgKiBDaHJpcyBUb3Jlay4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorI2lmIGRlZmluZWQoTElCQ19TQ0NTKSAmJiAhZGVmaW5lZChsaW50KQorI2lmIDAKK3N0YXRpYyBjaGFyIHNjY3NpZFtdID0gIkAoIylzdHJjb2xsLmMJOC4xIChCZXJrZWxleSkgNi80LzkzIjsKKyNlbHNlCitfX1JDU0lEKCIkTmV0QlNEOiBzdHJjb2xsLmMsdiAxLjEwIDIwMTIvMDYvMjUgMjI6MzI6NDYgYWJzIEV4cCAkIik7CisjZW5kaWYKKyNlbmRpZiAvKiBMSUJDX1NDQ1MgYW5kIG5vdCBsaW50ICovCisKKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworLyoKKyAqIENvbXBhcmUgc3RyaW5ncyBhY2NvcmRpbmcgdG8gTENfQ09MTEFURSBjYXRlZ29yeSBvZiBjdXJyZW50IGxvY2FsZS4KKyAqLworaW50CitzdHJjb2xsKGNvbnN0IGNoYXIgKnMxLCBjb25zdCBjaGFyICpzMikKK3sKKworCV9ESUFHQVNTRVJUKHMxICE9IE5VTEwpOworCV9ESUFHQVNTRVJUKHMyICE9IE5VTEwpOworCisJLyogTENfQ09MTEFURSBpcyB1bmltcGxlbWVudGVkLCBoZW5jZSBhbHdheXMgIkMiICovCisJcmV0dXJuIChzdHJjbXAoczEsIHMyKSk7Cit9CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW5ldGJzZC9saWJjL3N0cmluZy9zdHJ4ZnJtLmMgYi9saWJjL3Vwc3RyZWFtLW5ldGJzZC9saWJjL3N0cmluZy9zdHJ4ZnJtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDJjMmEyNAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tbmV0YnNkL2xpYmMvc3RyaW5nL3N0cnhmcm0uYwpAQCAtMCwwICsxLDcwIEBACisvKgkkTmV0QlNEOiBzdHJ4ZnJtLmMsdiAxLjEyIDIwMTIvMDYvMjUgMjI6MzI6NDYgYWJzIEV4cCAkCSovCisKKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5CisgKiBDaHJpcyBUb3Jlay4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorI2lmIGRlZmluZWQoTElCQ19TQ0NTKSAmJiAhZGVmaW5lZChsaW50KQorI2lmIDAKK3N0YXRpYyBjaGFyIHNjY3NpZFtdID0gIkAoIylzdHJ4ZnJtLmMJOC4xIChCZXJrZWxleSkgNi80LzkzIjsKKyNlbHNlCitfX1JDU0lEKCIkTmV0QlNEOiBzdHJ4ZnJtLmMsdiAxLjEyIDIwMTIvMDYvMjUgMjI6MzI6NDYgYWJzIEV4cCAkIik7CisjZW5kaWYKKyNlbmRpZiAvKiBMSUJDX1NDQ1MgYW5kIG5vdCBsaW50ICovCisKKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworLyoKKyAqIFRyYW5zZm9ybSBzcmMsIHN0b3JpbmcgdGhlIHJlc3VsdCBpbiBkc3QsIHN1Y2ggdGhhdAorICogc3RyY21wKCkgb24gdHJhbnNmb3JtZWQgc3RyaW5ncyByZXR1cm5zIHdoYXQgc3RyY29sbCgpCisgKiBvbiB0aGUgb3JpZ2luYWwgdW50cmFuc2Zvcm1lZCBzdHJpbmdzIHdvdWxkIHJldHVybi4KKyAqLworc2l6ZV90CitzdHJ4ZnJtKGNoYXIgKmRzdCwgY29uc3QgY2hhciAqc3JjLCBzaXplX3QgbikKK3sKKwlzaXplX3Qgc3JjbGVuLCBjb3B5c2l6ZTsKKworCV9ESUFHQVNTRVJUKHNyYyAhPSBOVUxMKTsKKworCS8qCisJICogU2luY2UgbG9jYWxlcyBhcmUgdW5pbXBsZW1lbnRlZCwgdGhpcyBpcyBqdXN0IGEgY29weS4KKwkgKi8KKwlzcmNsZW4gPSBzdHJsZW4oc3JjKTsKKwlpZiAobiAhPSAwKSB7CisJCV9ESUFHQVNTRVJUKGRzdCAhPSBOVUxMKTsKKwkJY29weXNpemUgPSBzcmNsZW4gPCBuID8gc3JjbGVuIDogbiAtIDE7CisJCSh2b2lkKW1lbWNweShkc3QsIHNyYywgY29weXNpemUpOworCQlkc3RbY29weXNpemVdID0gMDsKKwl9CisJcmV0dXJuIChzcmNsZW4pOworfQpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1uZXRic2QvbGliYy91bmlzdGQva2lsbHBnLmMgYi9saWJjL3Vwc3RyZWFtLW5ldGJzZC9saWJjL3VuaXN0ZC9raWxscGcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZWFjM2Y0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1uZXRic2QvbGliYy91bmlzdGQva2lsbHBnLmMKQEAgLTAsMCArMSw1NiBAQAorLyoJJE5ldEJTRDoga2lsbHBnLmMsdiAxLjggMjAwMy8wOC8wNyAxNjo0MjozOSBhZ2MgRXhwICQJKi8KKworLyoKKyAqIENvcHlyaWdodCAoYykgMTk4OSwgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKyNpZiBkZWZpbmVkKExJQkNfU0NDUykgJiYgIWRlZmluZWQobGludCkKKyNpZiAwCitzdGF0aWMgY2hhciBzY2NzaWRbXSA9ICJAKCMpa2lsbHBnLmMJOC4xIChCZXJrZWxleSkgNi8yLzkzIjsKKyNlbHNlCitfX1JDU0lEKCIkTmV0QlNEOiBraWxscGcuYyx2IDEuOCAyMDAzLzA4LzA3IDE2OjQyOjM5IGFnYyBFeHAgJCIpOworI2VuZGlmCisjZW5kaWYgLyogTElCQ19TQ0NTIGFuZCBub3QgbGludCAqLworCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c2lnbmFsLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKworLyoKKyAqIEJhY2t3YXJkcy1jb21wYXRpYmxlIGtpbGxwZygpLgorICovCitpbnQKK2tpbGxwZyhwaWRfdCBwZ2lkLCBpbnQgc2lnKQoreworCWlmIChwZ2lkID09IDEpIHsKKwkJZXJybm8gPSBFU1JDSDsKKwkJcmV0dXJuICgtMSk7CisJfQorCXJldHVybiAoa2lsbCgtcGdpZCwgc2lnKSk7Cit9CmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW5ldGJzZC9uYW1lc3BhY2UuaCBiL2xpYmMvdXBzdHJlYW0tbmV0YnNkL25hbWVzcGFjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0ZDQxNTEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW5ldGJzZC9uYW1lc3BhY2UuaApAQCAtMCwwICsxLDI1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2lmbmRlZiBfQklPTklDX05FVEJTRF9OQU1FU1BBQ0VfSF9pbmNsdWRlZAorI2RlZmluZSBfQklPTklDX05FVEJTRF9OQU1FU1BBQ0VfSF9pbmNsdWRlZAorCisvLyBOZXRCU0QgdXNlcyBfX3dlYWtfYWxpYXMgb24gYSBsb3Qgb2YgZnVuY3Rpb25zLiBXZSBkb24ndCB3YW50IHRoYXQuCisjaWYgZGVmaW5lZChfX3dlYWtfYWxpYXMpCisjdW5kZWYgX193ZWFrX2FsaWFzCisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL3Vwc3RyZWFtLW5ldGJzZC9uZXRic2QtY29tcGF0LmggYi9saWJjL3Vwc3RyZWFtLW5ldGJzZC9uZXRic2QtY29tcGF0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTMzODg1ZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tbmV0YnNkL25ldGJzZC1jb21wYXQuaApAQCAtMCwwICsxLDM2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2lmbmRlZiBfQklPTklDX05FVEJTRF9DT01QQVRfSF9pbmNsdWRlZAorI2RlZmluZSBfQklPTklDX05FVEJTRF9DT01QQVRfSF9pbmNsdWRlZAorCisvLyBOZXRCU0QgdXNlcyBfRElBR0FTU0VSVCB0byBudWxsLWNoZWNrIGFyZ3VtZW50cyBhbmQgdGhlIGxpa2UuCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjZGVmaW5lIF9ESUFHQVNTRVJUKGUpICgoZSkgPyAodm9pZCkgMCA6IF9fYXNzZXJ0MihfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fLCAjZSkpCisKKy8vIFRPRE86IHVwZGF0ZSBvdXIgPHN5cy9jZGVmcy5oPiB0byBzdXBwb3J0IHRoaXMgcHJvcGVybHkuCisjZGVmaW5lIF9fdHlwZV9maXQodCwgYSkgKDAgPT0gMCkKKworLy8gVE9ETzogb3VyIDIuNiBlbXVsYXRvciBrZXJuZWxzIGRvbid0IHN1cHBvcnQgU09DS19DTE9FWEVDIHlldCwgc28gd2UgaGF2ZSB0byBkbyB3aXRob3V0LgorI2RlZmluZSBTT0NLX0NMT0VYRUMgMAorCisjZGVmaW5lIF9HTlVfU09VUkNFCisKKy8vIFRPRE86IHdlIGRvbid0IHlldCBoYXZlIHRocmVhZC1zYWZlIGVudmlyb25tZW50IHZhcmlhYmxlcy4KKyNkZWZpbmUgX19yZWFkbG9ja2VudigpIDAKKyNkZWZpbmUgX191bmxvY2tlbnYoKSAwCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1uZXRic2QvcG9ydF9hZnRlci5oIGIvbGliYy91cHN0cmVhbS1uZXRic2QvcG9ydF9hZnRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmOGI2ZjgKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Vwc3RyZWFtLW5ldGJzZC9wb3J0X2FmdGVyLmgKQEAgLTAsMCArMSwyMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpZm5kZWYgX0JJT05JQ19ORVRCU0RfUE9SVF9CRUZPUkVfSF9pbmNsdWRlZAorI2RlZmluZSBfQklPTklDX05FVEJTRF9QT1JUX0JFRk9SRV9IX2luY2x1ZGVkCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1uZXRic2QvcG9ydF9iZWZvcmUuaCBiL2xpYmMvdXBzdHJlYW0tbmV0YnNkL3BvcnRfYmVmb3JlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWY3N2Y3OQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdXBzdHJlYW0tbmV0YnNkL3BvcnRfYmVmb3JlLmgKQEAgLTAsMCArMSwyNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpZm5kZWYgX0JJT05JQ19ORVRCU0RfUE9SVF9CRUZPUkVfSF9pbmNsdWRlZAorI2RlZmluZSBfQklPTklDX05FVEJTRF9QT1JUX0JFRk9SRV9IX2luY2x1ZGVkCisKKyNpbmNsdWRlICJuYW1lc3BhY2UuaCIKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKyNpbmNsdWRlIDxhcnBhX25hbWVzZXIuaD4KKworI2RlZmluZSBJU0NfRk9STUFUX1BSSU5URihhLGIpIF9fcHJpbnRmbGlrZShhLGIpCisjZGVmaW5lIElTQ19TT0NLTEVOX1Qgc29ja2xlbl90CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy91cHN0cmVhbS1uZXRic2QvcmVlbnRyYW50LmggYi9saWJjL3Vwc3RyZWFtLW5ldGJzZC9yZWVudHJhbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMjk0NWRhCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy91cHN0cmVhbS1uZXRic2QvcmVlbnRyYW50LmgKQEAgLTAsMCArMSwzOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpZm5kZWYgX0JJT05JQ19ORVRCU0RfUkVFTlRSQU5UX0hfaW5jbHVkZWQKKyNkZWZpbmUgX0JJT05JQ19ORVRCU0RfUkVFTlRSQU5UX0hfaW5jbHVkZWQKKworI2RlZmluZSBfUkVFTlRSQU5UCisKKyNpbmNsdWRlIDxwdGhyZWFkLmg+CisjaW5jbHVkZSA8c2lnbmFsLmg+CisKKy8vCisvLyBNYXAgTmV0QlNEIGxpYmMgaW50ZXJuYWwgbG9ja2luZyB0byBwdGhyZWFkIGxvY2tpbmcuCisvLworCisjZGVmaW5lIE1VVEVYX0lOSVRJQUxJWkVSIFBUSFJFQURfTVVURVhfSU5JVElBTElaRVIKKyNkZWZpbmUgbXV0ZXhfdCBwdGhyZWFkX211dGV4X3QKKworI2RlZmluZSBSV0xPQ0tfSU5JVElBTElaRVIgUFRIUkVBRF9SV0xPQ0tfSU5JVElBTElaRVIKKyNkZWZpbmUgcndsb2NrX3QgcHRocmVhZF9yd2xvY2tfdAorI2RlZmluZSByd2xvY2tfcmRsb2NrIHB0aHJlYWRfcndsb2NrX3JkbG9jaworI2RlZmluZSByd2xvY2tfdW5sb2NrIHB0aHJlYWRfcndsb2NrX3VubG9jaworI2RlZmluZSByd2xvY2tfd3Jsb2NrIHB0aHJlYWRfcndsb2NrX3dybG9jaworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMvd2NoYXIvd2NzY21wLmMgYi9saWJjL3djaGFyL3djc2NtcC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZDQ4OTE0Li4wMDAwMDAwCi0tLSBhL2xpYmMvd2NoYXIvd2NzY21wLmMKKysrIC9kZXYvbnVsbApAQCAtMSw1NiArMCwwIEBACi0vKi0KLSAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MwotICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQotICogQ2hyaXMgVG9yZWsuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiA0LiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0gKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KLSNpZiBkZWZpbmVkKExJQkNfU0NDUykgJiYgIWRlZmluZWQobGludCkKLXN0YXRpYyBjaGFyIHNjY3NpZFtdID0gIkAoIylzdHJjbXAuYwk4LjEgKEJlcmtlbGV5KSA2LzQvOTMiOwotI2lmIDAKLV9fUkNTSUQoIiROZXRCU0Q6IHdjc2NtcC5jLHYgMS4zIDIwMDEvMDEvMDUgMTI6MTM6MTIgaXRvanVuIEV4cCAkIik7Ci0jZW5kaWYKLSNlbmRpZiAvKiBMSUJDX1NDQ1MgYW5kIG5vdCBsaW50ICovCi1fX0ZCU0RJRCgiJEZyZWVCU0QkIik7Ci0KLSNpbmNsdWRlIDx3Y2hhci5oPgotCi0vKgotICogQ29tcGFyZSBzdHJpbmdzLgotICovCi1pbnQKLXdjc2NtcChjb25zdCB3Y2hhcl90ICpzMSwgY29uc3Qgd2NoYXJfdCAqczIpCi17Ci0KLQl3aGlsZSAoKnMxID09ICpzMisrKQotCQlpZiAoKnMxKysgPT0gJ1wwJykKLQkJCXJldHVybiAoMCk7Ci0JLyogWFhYIGFzc3VtZXMgd2NoYXJfdCA9IGludCAqLwotCXJldHVybiAoKihjb25zdCB1bnNpZ25lZCBpbnQgKilzMSAtICooY29uc3QgdW5zaWduZWQgaW50ICopLS1zMik7Ci19CmRpZmYgLS1naXQgYS9saWJjL3djaGFyL3djc25jbXAuYyBiL2xpYmMvd2NoYXIvd2NzbmNtcC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NmQ3YTUxLi4wMDAwMDAwCi0tLSBhL2xpYmMvd2NoYXIvd2NzbmNtcC5jCisrKyAvZGV2L251bGwKQEAgLTEsNTcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykgMTk4OSwgMTk5MwotICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiA0LiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0gKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KLSNpZiAwCi0jaWYgZGVmaW5lZChMSUJDX1NDQ1MpICYmICFkZWZpbmVkKGxpbnQpCi1zdGF0aWMgY2hhciBzY2NzaWRbXSA9ICJAKCMpc3RybmNtcC5jCTguMSAoQmVya2VsZXkpIDYvNC85MyI7Ci1fX1JDU0lEKCIkTmV0QlNEOiB3Y3NuY21wLmMsdiAxLjMgMjAwMS8wMS8wNSAxMjoxMzoxMyBpdG9qdW4gRXhwICQiKTsKLSNlbmRpZiAvKiBMSUJDX1NDQ1MgYW5kIG5vdCBsaW50ICovCi0jZW5kaWYKLV9fRkJTRElEKCIkRnJlZUJTRCQiKTsKLQotI2luY2x1ZGUgPHdjaGFyLmg+Ci0KLWludAotd2NzbmNtcChjb25zdCB3Y2hhcl90ICpzMSwgY29uc3Qgd2NoYXJfdCAqczIsIHNpemVfdCBuKQotewotCi0JaWYgKG4gPT0gMCkKLQkJcmV0dXJuICgwKTsKLQlkbyB7Ci0JCWlmICgqczEgIT0gKnMyKyspIHsKLQkJCS8qIFhYWCBhc3N1bWVzIHdjaGFyX3QgPSBpbnQgKi8KLQkJCXJldHVybiAoKihjb25zdCB1bnNpZ25lZCBpbnQgKilzMSAtCi0JCQkgICAgKihjb25zdCB1bnNpZ25lZCBpbnQgKiktLXMyKTsKLQkJfQotCQlpZiAoKnMxKysgPT0gMCkKLQkJCWJyZWFrOwotCX0gd2hpbGUgKC0tbiAhPSAwKTsKLQlyZXR1cm4gKDApOwotfQpkaWZmIC0tZ2l0IGEvbGliYy93Y2hhci93Y3NuY3B5LmMgYi9saWJjL3djaGFyL3djc25jcHkuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDBkOTg2Yi4uMDAwMDAwMAotLS0gYS9saWJjL3djaGFyL3djc25jcHkuYworKysgL2Rldi9udWxsCkBAIC0xLDY0ICswLDAgQEAKLS8qLQotICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCi0gKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5Ci0gKiBDaHJpcyBUb3Jlay4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDQuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0gKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKLSAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmIDAKLSNpZiBkZWZpbmVkKExJQkNfU0NDUykgJiYgIWRlZmluZWQobGludCkKLXN0YXRpYyBjaGFyIHNjY3NpZFtdID0gIkAoIylzdHJuY3B5LmMJOC4xIChCZXJrZWxleSkgNi80LzkzIjsKLSNlbmRpZiAvKiBMSUJDX1NDQ1MgYW5kIG5vdCBsaW50ICovCi0jZW5kaWYKLSNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KLV9fRkJTRElEKCIkRnJlZUJTRCQiKTsKLQotI2luY2x1ZGUgPHdjaGFyLmg+Ci0KLS8qCi0gKiBDb3B5IHNyYyB0byBkc3QsIHRydW5jYXRpbmcgb3IgbnVsbC1wYWRkaW5nIHRvIGFsd2F5cyBjb3B5IG4gYnl0ZXMuCi0gKiBSZXR1cm4gZHN0LgotICovCi13Y2hhcl90ICoKLXdjc25jcHkod2NoYXJfdCAqIF9fcmVzdHJpY3QgZHN0LCBjb25zdCB3Y2hhcl90ICogX19yZXN0cmljdCBzcmMsIHNpemVfdCBuKQotewotCWlmIChuICE9IDApIHsKLQkJd2NoYXJfdCAqZCA9IGRzdDsKLQkJY29uc3Qgd2NoYXJfdCAqcyA9IHNyYzsKLQotCQlkbyB7Ci0JCQlpZiAoKCpkKysgPSAqcysrKSA9PSBMJ1wwJykgewotCQkJCS8qIE5VTCBwYWQgdGhlIHJlbWFpbmluZyBuLTEgYnl0ZXMgKi8KLQkJCQl3aGlsZSAoLS1uICE9IDApCi0JCQkJCSpkKysgPSBMJ1wwJzsKLQkJCQlicmVhazsKLQkJCX0KLQkJfSB3aGlsZSAoLS1uICE9IDApOwotCX0KLQlyZXR1cm4gKGRzdCk7Ci19CmRpZmYgLS1naXQgYS9saWJjL3djaGFyL3djc3N0ci5jIGIvbGliYy93Y2hhci93Y3NzdHIuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTlkYzI3Yi4uMDAwMDAwMAotLS0gYS9saWJjL3djaGFyL3djc3N0ci5jCisrKyAvZGV2L251bGwKQEAgLTEsNjMgKzAsMCBAQAotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKLSAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKLSAqIENocmlzIFRvcmVrLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogNC4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWYgMAotI2lmIGRlZmluZWQoTElCQ19TQ0NTKSAmJiAhZGVmaW5lZChsaW50KQotc3RhdGljIGNoYXIgc2Njc2lkW10gPSAiQCgjKXN0cnN0ci5jCTguMSAoQmVya2VsZXkpIDYvNC85MyI7Ci0jZW5kaWYgLyogTElCQ19TQ0NTIGFuZCBub3QgbGludCAqLwotI2VuZGlmCi0jaW5jbHVkZSA8c3lzL2NkZWZzLmg+Ci1fX0ZCU0RJRCgiJEZyZWVCU0QkIik7Ci0KLSNpbmNsdWRlIDx3Y2hhci5oPgotCi0vKgotICogRmluZCB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiBmaW5kIGluIHMuCi0gKi8KLXdjaGFyX3QgKgotd2Nzc3RyKGNvbnN0IHdjaGFyX3QgKiBfX3Jlc3RyaWN0IHMsIGNvbnN0IHdjaGFyX3QgKiBfX3Jlc3RyaWN0IGZpbmQpCi17Ci0Jd2NoYXJfdCBjLCBzYzsKLQlzaXplX3QgbGVuOwotCi0JaWYgKChjID0gKmZpbmQrKykgIT0gTCdcMCcpIHsKLQkJbGVuID0gd2NzbGVuKGZpbmQpOwotCQlkbyB7Ci0JCQlkbyB7Ci0JCQkJaWYgKChzYyA9ICpzKyspID09IEwnXDAnKQotCQkJCQlyZXR1cm4gKE5VTEwpOwotCQkJfSB3aGlsZSAoc2MgIT0gYyk7Ci0JCX0gd2hpbGUgKHdjc25jbXAocywgZmluZCwgbGVuKSAhPSAwKTsKLQkJcy0tOwotCX0KLQlyZXR1cm4gKCh3Y2hhcl90ICopcyk7Ci19CmRpZmYgLS1naXQgYS9saWJjL3djaGFyL3djc3Rvay5jIGIvbGliYy93Y2hhci93Y3N0b2suYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWE3NzExNy4uMDAwMDAwMAotLS0gYS9saWJjL3djaGFyL3djc3Rvay5jCisrKyAvZGV2L251bGwKQEAgLTEsODYgKzAsMCBAQAotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTggU29mdHdleXIgTExDLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBzdHJ0b2tfciwgZnJvbSBCZXJrZWxleSBzdHJ0b2sKLSAqIE9jdCAxMywgMTk5OCBieSBXZXMgUGV0ZXJzIDx3ZXNAc29mdHdleXIuY29tPgotICoKLSAqIENvcHlyaWdodCAoYykgMTk4OCwgMTk5MwotICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlcywgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2VzLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDQuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0gKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKLSAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgU09GVFdFWVIgTExDLCBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQQotICogUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgU09GVFdFWVIgTExDLCBUSEUKLSAqIFJFR0VOVFMsIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVECi0gKiBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GCi0gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORwotICogTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCi0gKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSA8c3lzL2NkZWZzLmg+Ci1fX0ZCU0RJRCgiJEZyZWVCU0QkIik7Ci0KLSNpbmNsdWRlIDx3Y2hhci5oPgotCi13Y2hhcl90ICoKLXdjc3Rvayh3Y2hhcl90ICogX19yZXN0cmljdCBzLCBjb25zdCB3Y2hhcl90ICogX19yZXN0cmljdCBkZWxpbSwKLSAgICB3Y2hhcl90ICoqIF9fcmVzdHJpY3QgbGFzdCkKLXsKLQljb25zdCB3Y2hhcl90ICpzcGFucDsKLQl3Y2hhcl90ICp0b2s7Ci0Jd2NoYXJfdCBjLCBzYzsKLQotCWlmIChzID09IE5VTEwgJiYgKHMgPSAqbGFzdCkgPT0gTlVMTCkKLQkJcmV0dXJuIChOVUxMKTsKLQotCS8qCi0JICogU2tpcCAoc3BhbikgbGVhZGluZyBkZWxpbWl0ZXJzIChzICs9IHdjc3NwbihzLCBkZWxpbSksIHNvcnQgb2YpLgotCSAqLwotY29udDoKLQljID0gKnMrKzsKLQlmb3IgKHNwYW5wID0gZGVsaW07IChzYyA9ICpzcGFucCsrKSAhPSBMJ1wwJzspIHsKLQkJaWYgKGMgPT0gc2MpCi0JCQlnb3RvIGNvbnQ7Ci0JfQotCi0JaWYgKGMgPT0gTCdcMCcpIHsJLyogbm8gbm9uLWRlbGltaXRlciBjaGFyYWN0ZXJzICovCi0JCSpsYXN0ID0gTlVMTDsKLQkJcmV0dXJuIChOVUxMKTsKLQl9Ci0JdG9rID0gcyAtIDE7Ci0KLQkvKgotCSAqIFNjYW4gdG9rZW4gKHNjYW4gZm9yIGRlbGltaXRlcnM6IHMgKz0gd2NzY3NwbihzLCBkZWxpbSksIHNvcnQgb2YpLgotCSAqIE5vdGUgdGhhdCBkZWxpbSBtdXN0IGhhdmUgb25lIE5VTDsgd2Ugc3RvcCBpZiB3ZSBzZWUgdGhhdCwgdG9vLgotCSAqLwotCWZvciAoOzspIHsKLQkJYyA9ICpzKys7Ci0JCXNwYW5wID0gZGVsaW07Ci0JCWRvIHsKLQkJCWlmICgoc2MgPSAqc3BhbnArKykgPT0gYykgewotCQkJCWlmIChjID09IEwnXDAnKQotCQkJCQlzID0gTlVMTDsKLQkJCQllbHNlCi0JCQkJCXNbLTFdID0gTCdcMCc7Ci0JCQkJKmxhc3QgPSBzOwotCQkJCXJldHVybiAodG9rKTsKLQkJCX0KLQkJfSB3aGlsZSAoc2MgIT0gTCdcMCcpOwotCX0KLQkvKiBOT1RSRUFDSEVEICovCi19CmRpZmYgLS1naXQgYS9saWJjL3pvbmVpbmZvL0FuZHJvaWQubWsgYi9saWJjL3pvbmVpbmZvL0FuZHJvaWQubWsKaW5kZXggZWY3MDBlOC4uZmU1MDk5ZCAxMDA2NDQKLS0tIGEvbGliYy96b25laW5mby9BbmRyb2lkLm1rCisrKyBiL2xpYmMvem9uZWluZm8vQW5kcm9pZC5tawpAQCAtMSwyNiArMSwyNiBAQAogTE9DQUxfUEFUSDo9ICQoY2FsbCBteS1kaXIpCisKIGluY2x1ZGUgJChDTEVBUl9WQVJTKQotCi1BTExfUFJFQlVJTFQgKz0gJChUQVJHRVRfT1VUKS91c3Ivc2hhcmUvem9uZWluZm8vem9uZWluZm8uZGF0Ci0kKFRBUkdFVF9PVVQpL3Vzci9zaGFyZS96b25laW5mby96b25laW5mby5kYXQgOiAkKExPQ0FMX1BBVEgpL3pvbmVpbmZvLmRhdCB8ICQoQUNQKQotCSQodHJhbnNmb3JtLXByZWJ1aWx0LXRvLXRhcmdldCkKLQotQUxMX1BSRUJVSUxUICs9ICQoVEFSR0VUX09VVCkvdXNyL3NoYXJlL3pvbmVpbmZvL3pvbmVpbmZvLmlkeAotJChUQVJHRVRfT1VUKS91c3Ivc2hhcmUvem9uZWluZm8vem9uZWluZm8uaWR4IDogJChMT0NBTF9QQVRIKS96b25laW5mby5pZHggfCAkKEFDUCkKLQkkKHRyYW5zZm9ybS1wcmVidWlsdC10by10YXJnZXQpCi0KLUFMTF9QUkVCVUlMVCArPSAkKFRBUkdFVF9PVVQpL3Vzci9zaGFyZS96b25laW5mby96b25laW5mby52ZXJzaW9uCi0kKFRBUkdFVF9PVVQpL3Vzci9zaGFyZS96b25laW5mby96b25laW5mby52ZXJzaW9uIDogJChMT0NBTF9QQVRIKS96b25laW5mby52ZXJzaW9uIHwgJChBQ1ApCi0JJCh0cmFuc2Zvcm0tcHJlYnVpbHQtdG8tdGFyZ2V0KQorTE9DQUxfTU9EVUxFIDo9IHR6ZGF0YQorTE9DQUxfQURESVRJT05BTF9ERVBFTkRFTkNJRVMgOj0gJChMT0NBTF9QQVRIKS9BbmRyb2lkLm1rCitMT0NBTF9TUkNfRklMRVMgOj0gJChMT0NBTF9NT0RVTEUpCitMT0NBTF9NT0RVTEVfQ0xBU1MgOj0gRVRDCitMT0NBTF9NT0RVTEVfVEFHUyA6PSBvcHRpb25hbAorTE9DQUxfTU9EVUxFX1BBVEggOj0gJChUQVJHRVRfT1VUKS91c3Ivc2hhcmUvem9uZWluZm8KK2luY2x1ZGUgJChCVUlMRF9QUkVCVUlMVCkKIAogIyBUaGUgaG9zdCBidWlsZCBkb2Vzbid0IHVzZSBiaW9uaWMsIGJ1dCBpdCBkb2VzIHVzZSBiaW9uaWMncyB6b25laW5mbyBkYXRhCiBpZmVxICgkKFdJVEhfSE9TVF9EQUxWSUspLHRydWUpCi0gICAgQUxMX1BSRUJVSUxUICs9ICQoSE9TVF9PVVQpL3Vzci9zaGFyZS96b25laW5mby96b25laW5mby5kYXQKLSAgICAkKGV2YWwgJChjYWxsIGNvcHktb25lLWZpbGUsJChMT0NBTF9QQVRIKS96b25laW5mby5kYXQsJChIT1NUX09VVCkvdXNyL3NoYXJlL3pvbmVpbmZvL3pvbmVpbmZvLmRhdCkpCiAKLSAgICBBTExfUFJFQlVJTFQgKz0gJChIT1NUX09VVCkvdXNyL3NoYXJlL3pvbmVpbmZvL3pvbmVpbmZvLmlkeAotICAgICQoZXZhbCAkKGNhbGwgY29weS1vbmUtZmlsZSwkKExPQ0FMX1BBVEgpL3pvbmVpbmZvLmlkeCwkKEhPU1RfT1VUKS91c3Ivc2hhcmUvem9uZWluZm8vem9uZWluZm8uaWR4KSkKK2luY2x1ZGUgJChDTEVBUl9WQVJTKQorTE9DQUxfTU9EVUxFIDo9IHR6ZGF0YS1ob3N0CitMT0NBTF9BRERJVElPTkFMX0RFUEVOREVOQ0lFUyA6PSAkKExPQ0FMX1BBVEgpL0FuZHJvaWQubWsKK0xPQ0FMX0lTX0hPU1RfTU9EVUxFIDo9IHRydWUKK0xPQ0FMX1NSQ19GSUxFUyA6PSB0emRhdGEKK0xPQ0FMX01PRFVMRV9DTEFTUyA6PSBFVEMKK0xPQ0FMX01PRFVMRV9UQUdTIDo9IG9wdGlvbmFsCitMT0NBTF9NT0RVTEVfU1RFTSA6PSAkKExPQ0FMX1NSQ19GSUxFUykKK0xPQ0FMX01PRFVMRV9QQVRIIDo9ICQoSE9TVF9PVVQpL3Vzci9zaGFyZS96b25laW5mbworaW5jbHVkZSAkKEJVSUxEX1BSRUJVSUxUKQogCi0gICAgQUxMX1BSRUJVSUxUICs9ICQoSE9TVF9PVVQpL3Vzci9zaGFyZS96b25laW5mby96b25laW5mby52ZXJzaW9uCi0gICAgJChldmFsICQoY2FsbCBjb3B5LW9uZS1maWxlLCQoTE9DQUxfUEFUSCkvem9uZWluZm8udmVyc2lvbiwkKEhPU1RfT1VUKS91c3Ivc2hhcmUvem9uZWluZm8vem9uZWluZm8udmVyc2lvbikpCiBlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy96b25laW5mby90emRhdGEgYi9saWJjL3pvbmVpbmZvL3R6ZGF0YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iY2U2ZTUwCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy96b25laW5mby90emRhdGEKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbGliYy96b25laW5mby96b25laW5mby5kYXQgYi9saWJjL3pvbmVpbmZvL3pvbmVpbmZvLmRhdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2MxY2IzOC4uMDAwMDAwMAotLS0gYS9saWJjL3pvbmVpbmZvL3pvbmVpbmZvLmRhdAorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2xpYmMvem9uZWluZm8vem9uZWluZm8uaWR4IGIvbGliYy96b25laW5mby96b25laW5mby5pZHgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA0ODNjMjguLjAwMDAwMDAKLS0tIGEvbGliYy96b25laW5mby96b25laW5mby5pZHgKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9saWJjL3pvbmVpbmZvL3pvbmVpbmZvLnZlcnNpb24gYi9saWJjL3pvbmVpbmZvL3pvbmVpbmZvLnZlcnNpb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk0MTJiOTQuLjAwMDAwMDAKLS0tIGEvbGliYy96b25laW5mby96b25laW5mby52ZXJzaW9uCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotMjAxMmMKZGlmZiAtLWdpdCBhL2xpYmRsL0FuZHJvaWQubWsgYi9saWJkbC9BbmRyb2lkLm1rCmluZGV4IGQyMjg5ZjguLmU2YzZiZjQgMTAwNjQ0Ci0tLSBhL2xpYmRsL0FuZHJvaWQubWsKKysrIGIvbGliZGwvQW5kcm9pZC5tawpAQCAtNiwxMSArNiwxMSBAQAogCiBpbmNsdWRlICQoQ0xFQVJfVkFSUykKIAotIyBOT1RFOiAtLWV4Y2x1ZGUtbGlicz1saWJnY2MuYSBtYWtlcyBzdXJlIHRoYXQgYW55IHN5bWJvbHMgbGliZGwuc28gcHVsbHMgZnJvbSAKKyMgTk9URTogLS1leGNsdWRlLWxpYnM9bGliZ2NjLmEgbWFrZXMgc3VyZSB0aGF0IGFueSBzeW1ib2xzIGxpYmRsLnNvIHB1bGxzIGZyb20KICMgbGliZ2NjLmEgYXJlIG1hZGUgc3RhdGljIHRvIGxpYmRsLnNvLiAgVGhpcyBpbiB0dXJuIGVuc3VyZXMgdGhhdCBsaWJyYXJpZXMgdGhhdAogIyBhKSBwdWxsIHN5bWJvbHMgZnJvbSBsaWJnY2MuYSBhbmQgYikgZGVwZW5kIG9uIGxpYmRsLnNvIHdpbGwgbm90IHJlbHkgb24gbGliZGwuc28KICMgdG8gcHJvdmlkZSB0aG9zZSBzeW1ib2xzLCBidXQgd2lsbCBpbnN0ZWFkIHB1bGwgdGhlbSBmcm9tIGxpYmdjYy5hLiAgU3BlY2lmaWNhbGx5LAotIyB3ZSB1c2UgdGhpcyBwcm9wZXJ0eSB0byBtYWtlIHN1cmUgbGliYy5zbyBoYXMgaXRzIG93biBjb3B5IG9mIHRoZSBjb2RlIGZyb20gCisjIHdlIHVzZSB0aGlzIHByb3BlcnR5IHRvIG1ha2Ugc3VyZSBsaWJjLnNvIGhhcyBpdHMgb3duIGNvcHkgb2YgdGhlIGNvZGUgZnJvbQogIyBsaWJnY2MuYSBpdCB1c2VzLgogIwogIyBETyBOT1QgUkVNT1ZFIC0tZXhjbHVkZS1saWJzIQpAQCAtMjUsNiArMjUsNyBAQAogTE9DQUxfU1JDX0ZJTEVTOj0gbGliZGwuYwogCiBMT0NBTF9NT0RVTEU6PSBsaWJkbAorTE9DQUxfQURESVRJT05BTF9ERVBFTkRFTkNJRVMgOj0gJChMT0NBTF9QQVRIKS9BbmRyb2lkLm1rCiAKICMgTk9URTogbGliZGwgbmVlZHMgX19hZWFiaV91bndpbmRfY3BwX3ByMCBmcm9tIGxpYmdjYy5hIGJ1dCBsaWJnY2MuYSBuZWVkcyBhCiAjIGZldyBzeW1ib2xzIGZyb20gbGliYy4gVXNpbmcgLS1uby11bmRlZmluZWQgaGVyZSByZXN1bHRzIGluIGhhdmluZyB0byBsaW5rCkBAIC0zMiwyMiArMzMsNyBAQAogIyB3aXRoIG1pc3Npbmcgc3ltYm9scy4gU2luY2UgdGhpcyBsaWJyYXJ5IGlzIGp1c3QgYSBidW5jaCBvZiBzdHVicywgd2Ugc2V0CiAjIExPQ0FMX0FMTE9XX1VOREVGSU5FRF9TWU1CT0xTIHRvIHJlbW92ZSAtLW5vLXVuZGVmaW5lZCBmcm9tIHRoZSBsaW5rZXIgZmxhZ3MuCiBMT0NBTF9BTExPV19VTkRFRklORURfU1lNQk9MUyA6PSB0cnVlCi1MT0NBTF9TWVNURU1fU0hBUkVEX0xJQlJBUklFUyA6PSAKLQotaWZlcSAoJChUQVJHRVRfQVJDSCksc2gpCi0jIGZvciBTdXBlckgsIGFkZGl0aW9uYWwgY29kZSBpcyBuZWNlc3NhcnkgdG8gaGFuZGxlIC5jdG9ycyBzZWN0aW9uLgotR0VOX1NPQkVHSU4gOj0gJChUQVJHRVRfT1VUX1NUQVRJQ19MSUJSQVJJRVMpL3NvYmVnaW4ubwotJChHRU5fU09CRUdJTik6ICQoTE9DQUxfUEFUSCkvYXJjaC1zaC9zb2JlZ2luLlMKLQlAbWtkaXIgLXAgJChkaXIgJEApCi0JJChUQVJHRVRfQ0MpIC1vICRAIC1jICQ8Ci0KLUdFTl9TT0VORCA6PSAkKFRBUkdFVF9PVVRfU1RBVElDX0xJQlJBUklFUykvc29lbmQubwotJChHRU5fU09FTkQpOiAkKExPQ0FMX1BBVEgpL2FyY2gtc2gvc29lbmQuUwotCUBta2RpciAtcCAkKGRpciAkQCkKLQkkKFRBUkdFVF9DQykgLW8gJEAgLWMgJDwKLQotTE9DQUxfQURESVRJT05BTF9ERVBFTkRFTkNJRVMgOj0gJChHRU5fU09CRUdJTikgJChHRU5fU09FTkQpCi1lbmRpZgorTE9DQUxfU1lTVEVNX1NIQVJFRF9MSUJSQVJJRVMgOj0KIAogaW5jbHVkZSAkKEJVSUxEX1NIQVJFRF9MSUJSQVJZKQogCkBAIC02Miw3ICs0OCw4IEBACiAKIExPQ0FMX1NSQ19GSUxFUzo9IGRsdGVzdC5jCiAKLUxPQ0FMX01PRFVMRTo9IGRsdGVzdCAKK0xPQ0FMX01PRFVMRTo9IGRsdGVzdAorTE9DQUxfQURESVRJT05BTF9ERVBFTkRFTkNJRVMgOj0gJChMT0NBTF9QQVRIKS9BbmRyb2lkLm1rCiAKIExPQ0FMX1NIQVJFRF9MSUJSQVJJRVMgOj0gbGliZGwKIApkaWZmIC0tZ2l0IGEvbGliZGwvTk9USUNFIGIvbGliZGwvTk9USUNFCmluZGV4IDM4MzFiMzQuLjIzZDcwOWYgMTAwNjQ0Ci0tLSBhL2xpYmRsL05PVElDRQorKysgYi9saWJkbC9OT1RJQ0UKQEAgLTEsMjYgKzEsNDQgQEAKIENvcHlyaWdodCAoQykgMjAwNyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKK0xpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKK1VubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKK2Rpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCitXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KK1NlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKK2xpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CiBBbGwgcmlnaHRzIHJlc2VydmVkLgogCiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwogYXJlIG1ldDoKLTEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CitSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0zLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBwcm9qZWN0IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0gICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KK1JlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAgIGRpc3RyaWJ1dGlvbi4KIAotVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUFJPSkVDVCBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLUFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLUFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFBST0pFQ1QgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLURBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi1PUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLUhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi1MSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi1PVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKK0ZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCitDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCitJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCitPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKK0FORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKK09SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCiBTVUNIIERBTUFHRS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCmRpZmYgLS1naXQgYS9saWJkbC9hcmNoLXNoL3NvYmVnaW4uUyBiL2xpYmRsL2FyY2gtc2gvc29iZWdpbi5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NzZiMWE2Li4wMDAwMDAwCi0tLSBhL2xpYmRsL2FyY2gtc2gvc29iZWdpbi5TCisrKyAvZGV2L251bGwKQEAgLTEsNzAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBUaGUgQW5kcm9pZCBPcGVuIFByb2plY3QKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogICAgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUwotICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKLSAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCi0gKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKLSAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAotICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0gKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0gICAgLnRleHQKLSAgICAuYWxpZ24gNAotICAgIC50eXBlICBfaW5pdCwjZnVuY3Rpb24KLSAgICAuZ2xvYmwgX2luaXQKLQotIyBUaGUgdG9vbGNoYWluIGZvciBTSC1MaW51eCBkb2VzIG5vdCBwcm9kdWNlIElOSVRfQVJSQVkgaW5mb3JtYXRpb24gd2hpY2gKLSMgYmlvbmljIGxpbmtlciByZWxpZXMgb24uICBJbnN0ZWFkIG9mIGl0LCBUaGUgdG9vbGNoYWluIGZvciBTSC1MaW51eCBwcm9kdWNlcwotIyBJTklUIGluZm9ybWF0aW9uIHdoZW4gaXQgZmluZCB0aGUgZnVuY3Rpb24gd2hvc2UgbmFtZSBpcyAnX2luaXQnLgotIwotX2luaXQ6Ci0gICAgc3RzLmwgICBwciwgQC1yMTUKLSAgICBtb3YubCAgIHI4LCBALXIxNQotICAgIG1vdi5sICAgMGYsIHI4ICAgICAgLyogZmlyc3QgZW50cnkgaXMgaW52YWxpZCAqLwotLkxfbG9vcDoKLSAgICBhZGQgICAgICM0LCByOAotICAgIG1vdi5sICAgQHI4LCByMAotICAgIGNtcC9lcSAgIzAsIHIwICAgICAgLyogWmVybyB0ZXJpbW5hdGVkLiBTZWUgJ3NvZW5kLnNvJy4gKi8KLSAgICBidCAgICAgIC5MX2VuZAotICAgIGpzciAgICAgQHIwICAgICAgICAgLyogaW52b2tlIGEgY29uc3RydWN0b3IgKi8KLSAgICBub3AKLSAgICBicmEgICAgIC5MX2xvb3AKLSAgICBub3AKLS5MX2VuZDoKLSAgICBtb3YubCAgIEByMTUrLCByOAotICAgIGxkcy5sICAgQHIxNSssIHByCi0KLSAgICBydHMKLSAgICBub3AKLQotICAgIC5iYWxpZ24gNAotMDogIC5sb25nICAgX19DVE9SX0xJU1RfXwotCi0jIHRoZSAuY3RvcnMgc2VjdGlvbiBjb250YWlucyBhIGxpc3Qgb2YgcG9pbnRlcnMgdG8gImNvbnN0cnVjdG9yIgotIyBmdW5jdGlvbnMgdGhhdCBuZWVkIHRvIGJlIGNhbGxlZCBpbiBvcmRlciBkdXJpbmcgQyBsaWJyYXJ5IGluaXRpYWxpemF0aW9uLAotIyBqdXN0IGJlZm9yZSB0aGUgcHJvZ3JhbSBpcyBiZWluZyBydW4uIFRoaXMgaXMgYSBDKysgcmVxdWlyZW1lbnQKLSMKLSMgdGhlIGxhc3QgZW50cnkgc2hhbGwgYmUgMCwgYW5kIGlzIGRlZmluZWQgaW4gY3J0ZW5kLlMKLSMKLSAgICAuc2VjdGlvbiAuY3RvcnMsICJhdyIKLSAgICAuZ2xvYmwgX19DVE9SX0xJU1RfXwotX19DVE9SX0xJU1RfXzoKLSAgICAubG9uZyAgIC0xCi0KZGlmZiAtLWdpdCBhL2xpYmRsL2FyY2gtc2gvc29lbmQuUyBiL2xpYmRsL2FyY2gtc2gvc29lbmQuUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2ZhOThhNC4uMDAwMDAwMAotLS0gYS9saWJkbC9hcmNoLXNoL3NvZW5kLlMKKysrIC9kZXYvbnVsbApAQCAtMSwzMSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IFRoZSBBbmRyb2lkIE9wZW4gUHJvamVjdAotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0gKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiAgICBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCi0gKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQotICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAotICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKLSAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUwotICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECi0gKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0gKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotICAgIC5zZWN0aW9uIC5jdG9ycywgImF3IgotICAgIC5sb25nIDAKLQpkaWZmIC0tZ2l0IGEvbGliZGwvZGx0ZXN0LmMgYi9saWJkbC9kbHRlc3QuYwpvbGQgbW9kZSAxMDA3NTUKbmV3IG1vZGUgMTAwNjQ0CmRpZmYgLS1naXQgYS9saWJkbC9saWJkbC5jIGIvbGliZGwvbGliZGwuYwppbmRleCAxZDUxYzM3Li4zNzhmNTIxIDEwMDY0NAotLS0gYS9saWJkbC9saWJkbC5jCisrKyBiL2xpYmRsL2xpYmRsLmMKQEAgLTI0LDEzICsyNCwxOCBAQAogaW50IGRsYWRkcihjb25zdCB2b2lkICphZGRyLCBEbF9pbmZvICppbmZvKSB7IHJldHVybiAwOyB9CiBpbnQgZGxjbG9zZSh2b2lkICpoYW5kbGUpIHsgcmV0dXJuIDA7IH0KIAotI2lmZGVmIF9fYXJtX18KK3ZvaWQgYW5kcm9pZF91cGRhdGVfTERfTElCUkFSWV9QQVRIKGNvbnN0IGNoYXIqIGxkX2xpYnJhcnlfcGF0aCkgeyB9CisKKyNpZiBkZWZpbmVkKF9fYXJtX18pCisKIHZvaWQgKmRsX3Vud2luZF9maW5kX2V4aWR4KHZvaWQgKnBjLCBpbnQgKnBjb3VudCkgeyByZXR1cm4gMDsgfQotI2VsaWYgZGVmaW5lZChfX2kzODZfXykgfHwgZGVmaW5lZChfX3NoX18pIHx8IGRlZmluZWQoX19taXBzX18pCisKKyNlbGlmIGRlZmluZWQoX19pMzg2X18pIHx8IGRlZmluZWQoX19taXBzX18pCisKIC8qIHdlIG11bmdlIHRoZSBjYiBkZWZpbml0aW9uIHNvIHdlIGRvbid0IGhhdmUgdG8gaW5jbHVkZSBhbnkgaGVhZGVycyBoZXJlLgogICogSXQgd29uJ3QgYWZmZWN0IGFueXRoaW5nIHNpbmNlIHRoZXNlIGFyZSBqdXN0IHN5bWJvbHMgYW55d2F5ICovCi1pbnQgZGxfaXRlcmF0ZV9waGRyKGludCAoKmNiKSh2b2lkICppbmZvLCB2b2lkICpzaXplLCB2b2lkICpkYXRhKSwKLSAgICAgICAgICAgICAgICAgICAgdm9pZCAqZGF0YSkgeyByZXR1cm4gMDsgfQoraW50IGRsX2l0ZXJhdGVfcGhkcihpbnQgKCpjYikodm9pZCAqaW5mbywgdm9pZCAqc2l6ZSwgdm9pZCAqZGF0YSksIHZvaWQgKmRhdGEpIHsgcmV0dXJuIDA7IH0KKwogI2Vsc2UKICNlcnJvciBVbnN1cHBvcnRlZCBhcmNoaXRlY3R1cmUuIE9ubHkgbWlwcywgYXJtIGFuZCB4ODYgYXJlIHN1cHBvcnRlZC4KICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGlibS9BbmRyb2lkLm1rIGIvbGlibS9BbmRyb2lkLm1rCmluZGV4IDA3Y2I3ZGIuLjBkMmM4NDMgMTAwNjQ0Ci0tLSBhL2xpYm0vQW5kcm9pZC5taworKysgYi9saWJtL0FuZHJvaWQubWsKQEAgLTEsMjI1ICsxLDI1NCBAQAogTE9DQUxfUEFUSDo9ICQoY2FsbCBteS1kaXIpCiAKLWxpYm1fY29tbW9uX3NyY19maWxlczo9IFwKLQlpc2luZi5jICBcCi0JZnBjbGFzc2lmeS5jIFwKLQlzaW5jb3MuYyBcCi0JYnNkc3JjL2JfZXhwLmMgXAotCWJzZHNyYy9iX2xvZy5jIFwKLQlic2RzcmMvYl90Z2FtbWEuYyBcCi0Jc3JjL2VfYWNvcy5jIFwKLQlzcmMvZV9hY29zZi5jIFwKLQlzcmMvZV9hY29zaC5jIFwKLQlzcmMvZV9hY29zaGYuYyBcCi0Jc3JjL2VfYXNpbi5jIFwKLQlzcmMvZV9hc2luZi5jIFwKLQlzcmMvZV9hdGFuMi5jIFwKLQlzcmMvZV9hdGFuMmYuYyBcCi0Jc3JjL2VfYXRhbmguYyBcCi0Jc3JjL2VfYXRhbmhmLmMgXAotCXNyYy9lX2Nvc2guYyBcCi0Jc3JjL2VfY29zaGYuYyBcCi0Jc3JjL2VfZXhwLmMgXAotCXNyYy9lX2V4cGYuYyBcCi0Jc3JjL2VfZm1vZC5jIFwKLQlzcmMvZV9mbW9kZi5jIFwKLQlzcmMvZV9nYW1tYS5jIFwKLQlzcmMvZV9nYW1tYV9yLmMgXAotCXNyYy9lX2dhbW1hZi5jIFwKLQlzcmMvZV9nYW1tYWZfci5jIFwKLQlzcmMvZV9oeXBvdC5jIFwKLQlzcmMvZV9oeXBvdGYuYyBcCi0Jc3JjL2VfajAuYyBcCi0Jc3JjL2VfajBmLmMgXAotCXNyYy9lX2oxLmMgXAotCXNyYy9lX2oxZi5jIFwKLQlzcmMvZV9qbi5jIFwKLQlzcmMvZV9qbmYuYyBcCi0Jc3JjL2VfbGdhbW1hLmMgXAotCXNyYy9lX2xnYW1tYV9yLmMgXAotCXNyYy9lX2xnYW1tYWYuYyBcCi0Jc3JjL2VfbGdhbW1hZl9yLmMgXAotCXNyYy9lX2xvZy5jIFwKLQlzcmMvZV9sb2cxMC5jIFwKLQlzcmMvZV9sb2cxMGYuYyBcCi0Jc3JjL2VfbG9nZi5jIFwKLQlzcmMvZV9wb3cuYyBcCi0Jc3JjL2VfcG93Zi5jIFwKLQlzcmMvZV9yZW1fcGlvMi5jIFwKLQlzcmMvZV9yZW1fcGlvMmYuYyBcCi0Jc3JjL2VfcmVtYWluZGVyLmMgXAotCXNyYy9lX3JlbWFpbmRlcmYuYyBcCi0Jc3JjL2Vfc2NhbGIuYyBcCi0Jc3JjL2Vfc2NhbGJmLmMgXAotCXNyYy9lX3NpbmguYyBcCi0Jc3JjL2Vfc2luaGYuYyBcCi0Jc3JjL2Vfc3FydC5jIFwKLQlzcmMvZV9zcXJ0Zi5jIFwKLQlzcmMva19jb3MuYyBcCi0Jc3JjL2tfY29zZi5jIFwKLQlzcmMva19yZW1fcGlvMi5jIFwKLQlzcmMva19zaW4uYyBcCi0Jc3JjL2tfc2luZi5jIFwKLQlzcmMva190YW4uYyBcCi0Jc3JjL2tfdGFuZi5jIFwKLQlzcmMvc19hc2luaC5jIFwKLQlzcmMvc19hc2luaGYuYyBcCi0Jc3JjL3NfYXRhbi5jIFwKLQlzcmMvc19hdGFuZi5jIFwKLQlzcmMvc19jYnJ0LmMgXAotCXNyYy9zX2NicnRmLmMgXAotCXNyYy9zX2NlaWwuYyBcCi0Jc3JjL3NfY2VpbGYuYyBcCi0Jc3JjL3NfY2VpbGwuYyBcCi0Jc3JjL3NfY29weXNpZ24uYyBcCi0Jc3JjL3NfY29weXNpZ25mLmMgXAotCXNyYy9zX2Nvcy5jIFwKLQlzcmMvc19jb3NmLmMgXAotCXNyYy9zX2VyZi5jIFwKLQlzcmMvc19lcmZmLmMgXAotCXNyYy9zX2V4cDIuYyBcCi0Jc3JjL3NfZXhwMmYuYyBcCi0Jc3JjL3NfZXhwbTEuYyBcCi0Jc3JjL3NfZXhwbTFmLmMgXAotCXNyYy9zX2ZhYnNmLmMgXAotCXNyYy9zX2ZkaW0uYyBcCi0Jc3JjL3NfZmluaXRlLmMgXAotCXNyYy9zX2Zpbml0ZWYuYyBcCi0Jc3JjL3NfZmxvb3IuYyBcCi0Jc3JjL3NfZmxvb3JmLmMgXAotCXNyYy9zX2Zsb29ybC5jIFwKLQlzcmMvc19mbWEuYyBcCi0Jc3JjL3NfZm1hZi5jIFwKLQlzcmMvc19mbWF4LmMgXAotCXNyYy9zX2ZtYXhmLmMgXAotCXNyYy9zX2ZtYXhsLmMgXAotCXNyYy9zX2ZtaW4uYyBcCi0Jc3JjL3NfZm1pbmYuYyBcCi0Jc3JjL3NfZm1pbmwuYyBcCi0Jc3JjL3NfZnJleHBmLmMgXAotCXNyYy9zX2lsb2diLmMgXAotCXNyYy9zX2lsb2diZi5jIFwKLQlzcmMvc19pbG9nYmwuYyBcCi0Jc3JjL3NfaXNmaW5pdGUuYyBcCi0Jc3JjL3NfaXNub3JtYWwuYyBcCi0Jc3JjL3NfbGxyaW50LmMgXAotCXNyYy9zX2xscmludGYuYyBcCi0Jc3JjL3NfbGxyb3VuZC5jIFwKLQlzcmMvc19sbHJvdW5kZi5jIFwKLQlzcmMvc19sbHJvdW5kbC5jIFwKLQlzcmMvc19sb2cxcC5jIFwKLQlzcmMvc19sb2cxcGYuYyBcCi0Jc3JjL3NfbG9nYi5jIFwKLQlzcmMvc19sb2diZi5jIFwKLQlzcmMvc19scmludC5jIFwKLQlzcmMvc19scmludGYuYyBcCi0Jc3JjL3NfbHJvdW5kLmMgXAotCXNyYy9zX2xyb3VuZGYuYyBcCi0Jc3JjL3NfbHJvdW5kbC5jIFwKLQlzcmMvc19tb2RmZi5jIFwKLQlzcmMvc19uYW4uYyBcCi0Jc3JjL3NfbmVhcmJ5aW50LmMgXAotCXNyYy9zX25leHRhZnRlci5jIFwKLQlzcmMvc19uZXh0YWZ0ZXJmLmMgXAotCXNyYy9zX25leHR0b3dhcmRmLmMgXAotCXNyYy9zX3JlbXF1by5jIFwKLQlzcmMvc19yZW1xdW9mLmMgXAotCXNyYy9zX3JpbnQuYyBcCi0Jc3JjL3NfcmludGYuYyBcCi0Jc3JjL3Nfcm91bmQuYyBcCi0Jc3JjL3Nfcm91bmRmLmMgXAotCXNyYy9zX3JvdW5kbC5jIFwKLQlzcmMvc19zaWduYml0LmMgXAotCXNyYy9zX3NpZ25nYW0uYyBcCi0Jc3JjL3Nfc2lnbmlmaWNhbmQuYyBcCi0Jc3JjL3Nfc2lnbmlmaWNhbmRmLmMgXAotCXNyYy9zX3Npbi5jIFwKLQlzcmMvc19zaW5mLmMgXAotCXNyYy9zX3Rhbi5jIFwKLQlzcmMvc190YW5mLmMgXAotCXNyYy9zX3RhbmguYyBcCi0Jc3JjL3NfdGFuaGYuYyBcCi0Jc3JjL3NfdGdhbW1hZi5jIFwKLQlzcmMvc190cnVuYy5jIFwKLQlzcmMvc190cnVuY2YuYyBcCi0Jc3JjL3NfdHJ1bmNsLmMgXAotCXNyYy93X2RyZW0uYyBcCi0Jc3JjL3dfZHJlbWYuYyBcCi0Jc3JjL3NfY29weXNpZ25sLmMgXAotCXNyYy9zX2ZhYnNsLmMgXAotCXNyYy9zX2ZhYnMuYyBcCi0Jc3JjL3NfZnJleHAuYyBcCi0Jc3JjL3NfaXNuYW4uYyBcCi0Jc3JjL3NfbW9kZi5jCisjIFRPRE86IHRoZXNlIGNvbWUgZnJvbSBmcm9tIHVwc3RyZWFtJ3MgbGliYywgbm90IGxpYm0hCitsaWJtX2NvbW1vbl9zcmNfZmlsZXMgOj0gXAorICAgIGRpZ2l0dG9pbnQuYyAgXAorICAgIGZwY2xhc3NpZnkuYyBcCisgICAgaXNpbmYuYyAgXAogCi1saWJtX2NvbW1vbl9jZmxhZ3MgOj0KKyMgVE9ETzogdGhpcyBpcyBub3QgaW4gdGhlIEJTRHMuCitsaWJtX2NvbW1vbl9zcmNfZmlsZXMgKz0gXAorICAgIHNpbmNvcy5jIFwKIAotaWZlcSAoJChUQVJHRVRfQVJDSCksYXJtKQotICBsaWJtX2NvbW1vbl9zcmNfZmlsZXMgKz0gXAotCWFybS9mZW52LmMgXAotCXNyYy9lX2xkZXhwZi5jIFwKLQlzcmMvc19zY2FsYmxuLmMgXAotCXNyYy9zX3NjYWxibi5jIFwKLQlzcmMvc19zY2FsYm5mLmMKK2xpYm1fY29tbW9uX3NyY19maWxlcyArPSBcCisgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9ic2RzcmMvYl9leHAuYyBcCisgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9ic2RzcmMvYl9sb2cuYyBcCisgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9ic2RzcmMvYl90Z2FtbWEuYyBcCisgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvZV9hY29zLmMgXAorICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL2VfYWNvc2YuYyBcCisgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvZV9hY29zaC5jIFwKKyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9lX2Fjb3NoZi5jIFwKKyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9lX2FzaW4uYyBcCisgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvZV9hc2luZi5jIFwKKyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9lX2F0YW4yLmMgXAorICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL2VfYXRhbjJmLmMgXAorICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL2VfYXRhbmguYyBcCisgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvZV9hdGFuaGYuYyBcCisgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvZV9jb3NoLmMgXAorICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL2VfY29zaGYuYyBcCisgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvZV9leHAuYyBcCisgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvZV9leHBmLmMgXAorICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL2VfZm1vZC5jIFwKKyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9lX2Ztb2RmLmMgXAorICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL2VfZ2FtbWEuYyBcCisgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvZV9nYW1tYWYuYyBcCisgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvZV9nYW1tYWZfci5jIFwKKyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9lX2dhbW1hX3IuYyBcCisgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvZV9oeXBvdC5jIFwKKyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9lX2h5cG90Zi5jIFwKKyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9lX2owLmMgXAorICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL2VfajBmLmMgXAorICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL2VfajEuYyBcCisgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvZV9qMWYuYyBcCisgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvZV9qbi5jIFwKKyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9lX2puZi5jIFwKKyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9lX2xnYW1tYS5jIFwKKyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9lX2xnYW1tYWYuYyBcCisgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvZV9sZ2FtbWFmX3IuYyBcCisgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvZV9sZ2FtbWFfci5jIFwKKyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9lX2xvZzEwLmMgXAorICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL2VfbG9nMTBmLmMgXAorICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL2VfbG9nMi5jIFwKKyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9lX2xvZzJmLmMgXAorICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL2VfbG9nLmMgXAorICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL2VfbG9nZi5jIFwKKyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9lX3Bvdy5jIFwKKyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9lX3Bvd2YuYyBcCisgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvZV9yZW1haW5kZXIuYyBcCisgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvZV9yZW1haW5kZXJmLmMgXAorICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL2VfcmVtX3BpbzIuYyBcCisgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvZV9yZW1fcGlvMmYuYyBcCisgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvZV9zY2FsYi5jIFwKKyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9lX3NjYWxiZi5jIFwKKyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9lX3NpbmguYyBcCisgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvZV9zaW5oZi5jIFwKKyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9lX3NxcnQuYyBcCisgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvZV9zcXJ0Zi5jIFwKKyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9rX2Nvcy5jIFwKKyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9rX2Nvc2YuYyBcCisgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMva19leHAuYyBcCisgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMva19leHBmLmMgXAorICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL2tfcmVtX3BpbzIuYyBcCisgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMva19zaW4uYyBcCisgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMva19zaW5mLmMgXAorICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL2tfdGFuLmMgXAorICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL2tfdGFuZi5jIFwKKyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2FzaW5oLmMgXAorICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfYXNpbmhmLmMgXAorICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfYXRhbi5jIFwKKyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2F0YW5mLmMgXAorICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfY2FyZy5jIFwKKyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2NhcmdmLmMgXAorICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfY2JydC5jIFwKKyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2NicnRmLmMgXAorICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfY2Nvc2guYyBcCisgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19jY29zaGYuYyBcCisgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19jZWlsLmMgXAorICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfY2VpbGYuYyBcCisgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19jZXhwLmMgXAorICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfY2V4cGYuYyBcCisgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19jaW1hZy5jIFwKKyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2NpbWFnZi5jIFwKKyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2NvbmouYyBcCisgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19jb25qZi5jIFwKKyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2NvcHlzaWduLmMgXAorICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfY29weXNpZ25mLmMgXAorICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfY29zLmMgXAorICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfY29zZi5jIFwKKyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2Nwcm9qLmMgXAorICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfY3Byb2pmLmMgXAorICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfY3JlYWwuYyBcCisgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19jcmVhbGYuYyBcCisgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19jc2luaC5jIFwKKyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2NzaW5oZi5jIFwKKyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2NzcXJ0LmMgXAorICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfY3NxcnRmLmMgXAorICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfY3RhbmguYyBcCisgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19jdGFuaGYuYyBcCisgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19lcmYuYyBcCisgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19lcmZmLmMgXAorICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfZXhwMi5jIFwKKyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2V4cDJmLmMgXAorICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfZXhwbTEuYyBcCisgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19leHBtMWYuYyBcCisgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19mYWJzLmMgXAorICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfZmFic2YuYyBcCisgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19mZGltLmMgXAorICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfZmluaXRlLmMgXAorICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfZmluaXRlZi5jIFwKKyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2Zsb29yLmMgXAorICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfZmxvb3JmLmMgXAorICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfZm1hLmMgXAorICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfZm1hZi5jIFwKKyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2ZtYXguYyBcCisgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19mbWF4Zi5jIFwKKyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2ZtaW4uYyBcCisgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19mbWluZi5jIFwKKyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2ZyZXhwLmMgXAorICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfZnJleHBmLmMgXAorICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfaWxvZ2IuYyBcCisgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19pbG9nYmYuYyBcCisgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19pc2Zpbml0ZS5jIFwKKyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2lzbmFuLmMgXAorICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfaXNub3JtYWwuYyBcCisgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19sbHJpbnQuYyBcCisgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19sbHJpbnRmLmMgXAorICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfbGxyb3VuZC5jIFwKKyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2xscm91bmRmLmMgXAorICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfbG9nMXAuYyBcCisgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19sb2cxcGYuYyBcCisgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19sb2diLmMgXAorICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfbG9nYmYuYyBcCisgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19scmludC5jIFwKKyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2xyaW50Zi5jIFwKKyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2xyb3VuZC5jIFwKKyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2xyb3VuZGYuYyBcCisgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19tb2RmLmMgXAorICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfbW9kZmYuYyBcCisgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19uYW4uYyBcCisgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19uZWFyYnlpbnQuYyBcCisgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19uZXh0YWZ0ZXIuYyBcCisgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19uZXh0YWZ0ZXJmLmMgXAorICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfbmV4dHRvd2FyZGYuYyBcCisgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19yZW1xdW8uYyBcCisgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19yZW1xdW9mLmMgXAorICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfcmludC5jIFwKKyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX3JpbnRmLmMgXAorICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3Nfcm91bmQuYyBcCisgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19yb3VuZGYuYyBcCisgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19zY2FsYmxuLmMgXAorICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3Nfc2NhbGJuLmMgXAorICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3Nfc2NhbGJuZi5jIFwKKyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX3NpZ25iaXQuYyBcCisgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19zaWduZ2FtLmMgXAorICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3Nfc2lnbmlmaWNhbmQuYyBcCisgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19zaWduaWZpY2FuZGYuYyBcCisgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19zaW4uYyBcCisgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19zaW5mLmMgXAorICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfdGFuLmMgXAorICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfdGFuZi5jIFwKKyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX3RhbmguYyBcCisgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc190YW5oZi5jIFwKKyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX3RnYW1tYWYuYyBcCisgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc190cnVuYy5jIFwKKyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX3RydW5jZi5jIFwKKyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy93X2NhYnMuYyBcCisgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvd19jYWJzZi5jIFwKKyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy93X2RyZW0uYyBcCisgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvd19kcmVtZi5jIFwKIAotICBsaWJtX2NvbW1vbl9pbmNsdWRlcyA9ICQoTE9DQUxfUEFUSCkvYXJtCi1lbmRpZgorbGlibV9jb21tb25fc3JjX2ZpbGVzICs9IGZha2VfbG9uZ19kb3VibGUuYwogCi1pZmVxICgkKFRBUkdFVF9PUyktJChUQVJHRVRfQVJDSCksbGludXgteDg2KQotICBsaWJtX2NvbW1vbl9zcmNfZmlsZXMgKz0gXAotCWkzODcvZmVudi5jIFwKLQlpMzg3L3Nfc2NhbGJubC5TIFwKLQlpMzg3L3Nfc2NhbGJuLlMgXAotCWkzODcvc19zY2FsYm5mLlMKKyMgVE9ETzogb24gQW5kcm9pZCwgImxvbmcgZG91YmxlIiBpcyAiZG91YmxlIi4KKyMgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvZV9hY29zbC5jIFwKKyMgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvZV9hc2lubC5jIFwKKyMgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvZV9hdGFuMmwuYyBcCisjICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL2VfZm1vZGwuYyBcCisjICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL2VfaHlwb3RsLmMgXAorIyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9lX3JlbWFpbmRlcmwuYyBcCisjICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL2Vfc3FydGwuYyBcCisjICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfYXRhbmwuYyBcCisjICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfY2JydGwuYyBcCisjICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfY2VpbGwuYyBcCisjICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfY29weXNpZ25sLmMgXAorIyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2Nvc2wuYyBcCisjICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfZmFic2wuYyBcCisjICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfZmxvb3JsLmMgXAorIyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2ZtYWwuYyBcCisjICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfZm1heGwuYyBcCisjICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfZm1pbmwuYyBcCisjICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfZnJleHBsLmMgXAorIyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2lsb2dibC5jIFwKKyMgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19sbHJpbnRsLmMgXAorIyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2xscm91bmRsLmMgXAorIyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2xvZ2JsLmMgXAorIyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2xyaW50bC5jIFwKKyMgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19scm91bmRsLmMgXAorIyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX21vZGZsLmMgXAorIyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX25leHRhZnRlcmwuYyBcCisjICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfbmV4dHRvd2FyZC5jIFwKKyMgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19yZW1xdW9sLmMgXAorIyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX3JpbnRsLmMgXAorIyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX3JvdW5kbC5jIFwKKyMgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19zY2FsYm5sLmMgXAorIyAgICB1cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX3NpbmwuYyBcCisjICAgIHVwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfdGFubC5jIFwKKyMgICAgdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc190cnVuY2wuYyBcCiAKLSAgbGlibV9jb21tb25faW5jbHVkZXMgPSAkKExPQ0FMX1BBVEgpL2kzODYgJChMT0NBTF9QQVRIKS9pMzg3Ci1lbmRpZgotaWZlcSAoJChUQVJHRVRfQVJDSCksbWlwcykKLSAgbGlibV9jb21tb25fc3JjX2ZpbGVzICs9IFwKLQltaXBzL2ZlbnYuYyBcCi0Jc3JjL2VfbGRleHBmLmMgXAotCXNyYy9zX3NjYWxibG4uYyBcCi0Jc3JjL3Nfc2NhbGJuLmMgXAotCXNyYy9zX3NjYWxibmYuYworIyBUT0RPOiByZS1lbmFibGUgaTM4Ny9lX3NxcnRmLlMgZm9yIHg4NiwgYW5kIG1heWJlIG90aGVycy4KIAotICBsaWJtX2NvbW1vbl9pbmNsdWRlcyA9ICQoTE9DQUxfUEFUSCkvbWlwcwotICAjIE5lZWQgdG8gYnVpbGQgKnJpbnQqIGZ1bmN0aW9ucwotICBsaWJtX2NvbW1vbl9jZmxhZ3MgKz0gLWZuby1idWlsdGluLXJpbnRmIC1mbm8tYnVpbHRpbi1yaW50Ci1lbmRpZgorbGlibV9jb21tb25fY2ZsYWdzIDo9IC1ERkxUX0VWQUxfTUVUSE9EPTAKK2xpYm1fY29tbW9uX2luY2x1ZGVzIDo9ICQoTE9DQUxfUEFUSCkvdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvCiAKLSMgbGlibS5hCi0jID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitsaWJtX2FybV9pbmNsdWRlcyA6PSAkKExPQ0FMX1BBVEgpL2FybQorbGlibV9hcm1fc3JjX2ZpbGVzIDo9IGFybS9mZW52LmMKIAorbGlibV94ODZfaW5jbHVkZXMgOj0gJChMT0NBTF9QQVRIKS9pMzg2ICQoTE9DQUxfUEFUSCkvaTM4NworbGlibV94ODZfc3JjX2ZpbGVzIDo9IGkzODcvZmVudi5jCisKK2xpYm1fbWlwc19jZmxhZ3MgOj0gLWZuby1idWlsdGluLXJpbnRmIC1mbm8tYnVpbHRpbi1yaW50CitsaWJtX21pcHNfaW5jbHVkZXMgOj0gJChMT0NBTF9QQVRIKS9taXBzCitsaWJtX21pcHNfc3JjX2ZpbGVzIDo9IG1pcHMvZmVudi5jCisKKyMKKyMgbGlibS5hIGZvciB0YXJnZXQuCisjCiBpbmNsdWRlICQoQ0xFQVJfVkFSUykKLQotTE9DQUxfU1JDX0ZJTEVTIDo9IFwKLSAgICAkKGxpYm1fY29tbW9uX3NyY19maWxlcykKLQotTE9DQUxfQVJNX01PREUgOj0gYXJtCi1MT0NBTF9DX0lOQ0xVREVTICs9ICQobGlibV9jb21tb25faW5jbHVkZXMpCi1MT0NBTF9DRkxBR1MgOj0gJChsaWJtX2NvbW1vbl9jZmxhZ3MpCi0KIExPQ0FMX01PRFVMRTo9IGxpYm0KLQorTE9DQUxfQURESVRJT05BTF9ERVBFTkRFTkNJRVMgOj0gJChMT0NBTF9QQVRIKS9BbmRyb2lkLm1rCitMT0NBTF9BUk1fTU9ERSA6PSBhcm0KK0xPQ0FMX0NGTEFHUyA6PSAkKGxpYm1fY29tbW9uX2NmbGFncykgJChsaWJtXyQoVEFSR0VUX0FSQ0gpX2NmbGFncykKK0xPQ0FMX0NfSU5DTFVERVMgKz0gJChsaWJtX2NvbW1vbl9pbmNsdWRlcykgJChsaWJtXyQoVEFSR0VUX0FSQ0gpX2luY2x1ZGVzKQorTE9DQUxfU1JDX0ZJTEVTIDo9ICQobGlibV9jb21tb25fc3JjX2ZpbGVzKSAkKGxpYm1fJChUQVJHRVRfQVJDSClfc3JjX2ZpbGVzKQogTE9DQUxfU1lTVEVNX1NIQVJFRF9MSUJSQVJJRVMgOj0gbGliYwotCiBpbmNsdWRlICQoQlVJTERfU1RBVElDX0xJQlJBUlkpCiAKLSMgbGlibS5zbwotIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCisjCisjIGxpYm0uc28gZm9yIHRhcmdldC4KKyMKIGluY2x1ZGUgJChDTEVBUl9WQVJTKQotCi1MT0NBTF9TUkNfRklMRVMgOj0gXAotICAgICQobGlibV9jb21tb25fc3JjX2ZpbGVzKQotCi1MT0NBTF9BUk1fTU9ERSA6PSBhcm0KLQotTE9DQUxfQ19JTkNMVURFUyArPSAkKGxpYm1fY29tbW9uX2luY2x1ZGVzKQotTE9DQUxfQ0ZMQUdTIDo9ICQobGlibV9jb21tb25fY2ZsYWdzKQotCiBMT0NBTF9NT0RVTEU6PSBsaWJtCi0KK0xPQ0FMX0FERElUSU9OQUxfREVQRU5ERU5DSUVTIDo9ICQoTE9DQUxfUEFUSCkvQW5kcm9pZC5tawogTE9DQUxfU1lTVEVNX1NIQVJFRF9MSUJSQVJJRVMgOj0gbGliYwotCitMT0NBTF9XSE9MRV9TVEFUSUNfTElCUkFSSUVTIDo9IGxpYm0KIGluY2x1ZGUgJChCVUlMRF9TSEFSRURfTElCUkFSWSkKZGlmZiAtLWdpdCBhL2xpYm0vTWFrZWZpbGUtb3JpZyBiL2xpYm0vTWFrZWZpbGUtb3JpZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDZkZDA5NS4uMDAwMDAwMAotLS0gYS9saWJtL01ha2VmaWxlLW9yaWcKKysrIC9kZXYvbnVsbApAQCAtMSwxNTggKzAsMCBAQAotIyAgQCgjKU1ha2VmaWxlIDUuMWJldGEgOTMvMDkvMjQKLSMgJEZyZWVCU0Q6IHNyYy9saWIvbXN1bi9NYWtlZmlsZSx2IDEuNzQgMjAwNS8xMS8wNiAxNzo1OTo0MCBiZGUgRXhwICQKLSMKLSMgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSMgIENvcHlyaWdodCAoQykgMTk5MyBieSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0jICBEZXZlbG9wZWQgYXQgU3VuUHJvLCBhIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gYnVzaW5lc3MuCi0jICBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCi0jICBzb2Z0d2FyZSBpcyBmcmVlbHkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGlzIG5vdGljZQotIyAgaXMgcHJlc2VydmVkLgotIyAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotIwotIwotCi0uaWYgJHtNQUNISU5FX0FSQ0h9ID09ICJpMzg2IgotQVJDSF9TVUJESVI9IGkzODcKLS5lbHNlCi1BUkNIX1NVQkRJUj0gJHtNQUNISU5FX0FSQ0h9Ci0uZW5kaWYKLQotLmluY2x1ZGUgIiR7QVJDSF9TVUJESVJ9L01ha2VmaWxlLmluYyIKLQotLlBBVEg6CSR7LkNVUkRJUn0vYnNkc3JjCi0uUEFUSDoJJHsuQ1VSRElSfS9tYW4KLS5QQVRIOgkkey5DVVJESVJ9L3NyYwotCi1MSUI9CW0KLVNITElCRElSPz0gL2xpYgotU0hMSUJfTUFKT1I9IDQKLUNPTU1PTl9TUkNTPSBiX2V4cC5jIGJfbG9nLmMgYl90Z2FtbWEuYyBcCi0JZV9hY29zLmMgZV9hY29zZi5jIGVfYWNvc2guYyBlX2Fjb3NoZi5jIGVfYXNpbi5jIGVfYXNpbmYuYyBcCi0JZV9hdGFuMi5jIGVfYXRhbjJmLmMgZV9hdGFuaC5jIGVfYXRhbmhmLmMgZV9jb3NoLmMgZV9jb3NoZi5jIGVfZXhwLmMgXAotCWVfZXhwZi5jIGVfZm1vZC5jIGVfZm1vZGYuYyBlX2dhbW1hLmMgZV9nYW1tYV9yLmMgZV9nYW1tYWYuYyBcCi0JZV9nYW1tYWZfci5jIGVfaHlwb3QuYyBlX2h5cG90Zi5jIGVfajAuYyBlX2owZi5jIGVfajEuYyBlX2oxZi5jIFwKLQllX2puLmMgZV9qbmYuYyBlX2xnYW1tYS5jIGVfbGdhbW1hX3IuYyBlX2xnYW1tYWYuYyBlX2xnYW1tYWZfci5jIFwKLQllX2xvZy5jIGVfbG9nMTAuYyBlX2xvZzEwZi5jIGVfbG9nZi5jIGVfcG93LmMgZV9wb3dmLmMgZV9yZW1fcGlvMi5jIFwKLQllX3JlbV9waW8yZi5jIGVfcmVtYWluZGVyLmMgZV9yZW1haW5kZXJmLmMgZV9zY2FsYi5jIGVfc2NhbGJmLmMgXAotCWVfc2luaC5jIGVfc2luaGYuYyBlX3NxcnQuYyBlX3NxcnRmLmMgZmVudi5jIFwKLQlrX2Nvcy5jIGtfY29zZi5jIGtfcmVtX3BpbzIuYyBrX3Npbi5jIGtfc2luZi5jIFwKLQlrX3Rhbi5jIGtfdGFuZi5jIFwKLQlzX2FzaW5oLmMgc19hc2luaGYuYyBzX2F0YW4uYyBzX2F0YW5mLmMgc19jYnJ0LmMgc19jYnJ0Zi5jIFwKLQlzX2NlaWwuYyBzX2NlaWxmLmMgc19jZWlsbC5jIFwKLQlzX2NvcHlzaWduLmMgc19jb3B5c2lnbmYuYyBzX2Nvcy5jIHNfY29zZi5jIHNfZXJmLmMgc19lcmZmLmMgXAotCXNfZXhwMi5jIHNfZXhwMmYuYyBzX2V4cG0xLmMgc19leHBtMWYuYyBzX2ZhYnNmLmMgc19mZGltLmMgXAotCXNfZmluaXRlLmMgc19maW5pdGVmLmMgXAotCXNfZmxvb3IuYyBzX2Zsb29yZi5jIHNfZmxvb3JsLmMgc19mbWEuYyBzX2ZtYWYuYyBcCi0Jc19mbWF4LmMgc19mbWF4Zi5jIHNfZm1heGwuYyBzX2ZtaW4uYyBcCi0Jc19mbWluZi5jIHNfZm1pbmwuYyBzX2ZyZXhwLmMgc19mcmV4cGYuYyBzX2lsb2diLmMgc19pbG9nYmYuYyBcCi0Jc19pbG9nYmwuYyBzX2lzZmluaXRlLmMgc19pc25hbi5jIHNfaXNub3JtYWwuYyBcCi0Jc19sbHJpbnQuYyBzX2xscmludGYuYyBzX2xscm91bmQuYyBzX2xscm91bmRmLmMgc19sbHJvdW5kbC5jIFwKLQlzX2xvZzFwLmMgc19sb2cxcGYuYyBzX2xvZ2IuYyBzX2xvZ2JmLmMgc19scmludC5jIHNfbHJpbnRmLmMgXAotCXNfbHJvdW5kLmMgc19scm91bmRmLmMgc19scm91bmRsLmMgc19tb2RmZi5jIFwKLQlzX25lYXJieWludC5jIHNfbmV4dGFmdGVyLmMgc19uZXh0YWZ0ZXJmLmMgXAotCXNfbmV4dHRvd2FyZGYuYyBzX3JlbXF1by5jIHNfcmVtcXVvZi5jIFwKLQlzX3JpbnQuYyBzX3JpbnRmLmMgc19yb3VuZC5jIHNfcm91bmRmLmMgc19yb3VuZGwuYyBcCi0Jc19zY2FsYmxuLmMgc19zY2FsYm4uYyBzX3NjYWxibmYuYyBzX3NpZ25iaXQuYyBcCi0Jc19zaWduZ2FtLmMgc19zaWduaWZpY2FuZC5jIHNfc2lnbmlmaWNhbmRmLmMgc19zaW4uYyBzX3NpbmYuYyBzX3Rhbi5jIFwKLQlzX3RhbmYuYyBzX3RhbmguYyBzX3RhbmhmLmMgc190cnVuYy5jIHNfdHJ1bmNmLmMgc190cnVuY2wuYyBcCi0Jd19jYWJzLmMgd19jYWJzZi5jIHdfZHJlbS5jIHdfZHJlbWYuYwotCi0jIExvY2F0aW9uIG9mIGZwbWF0aC5oIGFuZCBfZnBtYXRoLmgKLUxJQkNESVI9CSR7LkNVUkRJUn0vLi4vbGliYwotQ0ZMQUdTKz0JLUkke0xJQkNESVJ9L2luY2x1ZGUgLUkke0xJQkNESVJ9LyR7TUFDSElORV9BUkNIfQotCi0jIEM5OSBsb25nIGRvdWJsZSBmdW5jdGlvbnMKLUNPTU1PTl9TUkNTKz0Jc19jb3B5c2lnbmwuYyBzX2ZhYnNsLmMKLS5pZiAke0xEQkxfUFJFQ30gIT0gNTMKLSMgSWYgbG9uZyBkb3VibGUgIT0gZG91YmxlIHVzZSB0aGVzZTsgb3RoZXJ3aXNlLCB3ZSBhbGlhcyB0aGUgZG91YmxlIHZlcnNpb25zLgotQ09NTU9OX1NSQ1MrPQlzX2ZtYWwuYyBzX2ZyZXhwbC5jIHNfbmV4dGFmdGVybC5jIHNfbmV4dHRvd2FyZC5jIHNfc2NhbGJubC5jCi0uZW5kaWYKLQotIyBDOTkgY29tcGxleCBmdW5jdGlvbnMKLUNPTU1PTl9TUkNTKz0Jc19jaW1hZy5jIHNfY2ltYWdmLmMgc19jaW1hZ2wuYyBzX2NvbmouYyBzX2NvbmpmLmMgc19jb25qbC5jIFwKLQlzX2NyZWFsLmMgc19jcmVhbGYuYyBzX2NyZWFsbC5jCi0KLSMgRnJlZUJTRCdzIEMgbGlicmFyeSBzdXBwbGllcyB0aGVzZSBmdW5jdGlvbnM6Ci0jQ09NTU9OX1NSQ1MrPQlzX2ZhYnMuYyBzX2ZyZXhwLmMgc19pc25hbi5jIHNfbGRleHAuYyBzX21vZGYuYwotCi0jIEV4Y2x1ZGUgdGhlIGdlbmVyaWMgdmVyc2lvbnMgb2Ygd2hhdCB3ZSBwcm92aWRlIGluIHRoZSBNRCBhcmVhLgotLlBBVEg6CSR7LkNVUkRJUn0vJHtBUkNIX1NVQkRJUn0KLS5pZiBkZWZpbmVkKEFSQ0hfU1JDUykKLS5mb3IgaSBpbiAke0FSQ0hfU1JDU30KLUNPTU1PTl9TUkNTOj0gICR7Q09NTU9OX1NSQ1M6TiR7aTpSfS5jfQotLmVuZGZvcgotLmVuZGlmCi0KLVNSQ1M9CSR7Q09NTU9OX1NSQ1N9ICR7QVJDSF9TUkNTfQotCi1JTkNTPQlmZW52LmggbWF0aC5oCi0KLU1BTj0JYWNvcy4zIGFjb3NoLjMgYXNpbi4zIGFzaW5oLjMgYXRhbi4zIGF0YW4yLjMgYXRhbmguMyBjZWlsLjMgXAotCWNpbWFnLjMgY29weXNpZ24uMyBjb3MuMyBjb3NoLjMgZXJmLjMgZXhwLjMgZmFicy4zIGZkaW0uMyBcCi0JZmVjbGVhcmV4Y2VwdC4zIGZlZW5hYmxlZXhjZXB0LjMgZmVnZXRlbnYuMyBcCi0JZmVnZXRyb3VuZC4zIGZlbnYuMyBmbG9vci4zIFwKLQlmbWEuMyBmbWF4LjMgZm1vZC4zIGh5cG90LjMgaWVlZS4zIGllZWVfdGVzdC4zIGlsb2diLjMgajAuMyBcCi0JbGdhbW1hLjMgbHJpbnQuMyBscm91bmQuMyBtYXRoLjMgbmV4dGFmdGVyLjMgcmVtYWluZGVyLjMgcmludC4zIFwKLQlyb3VuZC4zIHNjYWxibi4zIHNpZ25iaXQuMyBzaW4uMyBzaW5oLjMgc3FydC4zIHRhbi4zIHRhbmguMyB0cnVuYy4zCi0KLU1MSU5LUys9YWNvcy4zIGFjb3NmLjMKLU1MSU5LUys9YWNvc2guMyBhY29zaGYuMwotTUxJTktTKz1hc2luLjMgYXNpbmYuMwotTUxJTktTKz1hc2luaC4zIGFzaW5oZi4zCi1NTElOS1MrPWF0YW4uMyBhdGFuZi4zCi1NTElOS1MrPWF0YW5oLjMgYXRhbmhmLjMKLU1MSU5LUys9YXRhbjIuMyBhdGFuMmYuMwotTUxJTktTKz1jZWlsLjMgY2VpbGYuMyBjZWlsLjMgY2VpbGwuMwotTUxJTktTKz1jaW1hZy4zIGNpbWFnZi4zIGNpbWFnLjMgY2ltYWdsLjMgXAotCWNpbWFnLjMgY29uai4zIGNpbWFnLjMgY29uamYuMyBjaW1hZy4zIGNvbmpsLjMgXAotCWNpbWFnLjMgY3JlYWwuMyBjaW1hZy4zIGNyZWFsZi4zIGNpbWFnLjMgY3JlYWxsLjMKLU1MSU5LUys9Y29weXNpZ24uMyBjb3B5c2lnbmYuMyBjb3B5c2lnbi4zIGNvcHlzaWdubC4zCi1NTElOS1MrPWNvcy4zIGNvc2YuMwotTUxJTktTKz1jb3NoLjMgY29zaGYuMwotTUxJTktTKz1lcmYuMyBlcmZjLjMgZXJmLjMgZXJmZi4zIGVyZi4zIGVyZmNmLjMKLU1MSU5LUys9ZXhwLjMgZXhwbTEuMyBleHAuMyBsb2cuMyBleHAuMyBsb2cxMC4zIGV4cC4zIGxvZzFwLjMgZXhwLjMgcG93LjMgXAotCWV4cC4zIGV4cDIuMyBleHAuMyBleHAyZi4zIGV4cC4zIGV4cGYuMyBcCi0JZXhwLjMgZXhwbTFmLjMgZXhwLjMgbG9nZi4zIGV4cC4zIHBvd2YuMyBcCi0JZXhwLjMgbG9nMTBmLjMgZXhwLjMgbG9nMXBmLjMKLU1MSU5LUys9ZmFicy4zIGZhYnNmLjMgZmFicy4zIGZhYnNsLjMKLU1MSU5LUys9ZmRpbS4zIGZkaW1mLjMgZmRpbS4zIGZkaW1sLjMKLU1MSU5LUys9ZmVjbGVhcmV4Y2VwdC4zIGZlZ2V0ZXhjZXB0ZmxhZy4zIGZlY2xlYXJleGNlcHQuMyBmZXJhaXNlZXhjZXB0LjMgXAotCWZlY2xlYXJleGNlcHQuMyBmZXNldGV4Y2VwdGZsYWcuMyBmZWNsZWFyZXhjZXB0LjMgZmV0ZXN0ZXhjZXB0LjMKLU1MSU5LUys9ZmVlbmFibGVleGNlcHQuMyBmZWRpc2FibGVleGNlcHQuMyBmZWVuYWJsZWV4Y2VwdC4zIGZlZ2V0ZXhjZXB0LjMKLU1MSU5LUys9ZmVnZXRlbnYuMyBmZWhvbGRleGNlcHQuMyBmZWdldGVudi4zIGZlc2V0ZW52LjMgXAotCWZlZ2V0ZW52LjMgZmV1cGRhdGVlbnYuMwotTUxJTktTKz1mZWdldHJvdW5kLjMgZmVzZXRyb3VuZC4zCi1NTElOS1MrPWZsb29yLjMgZmxvb3JmLjMgZmxvb3IuMyBmbG9vcmwuMwotTUxJTktTKz1mbWEuMyBmbWFmLjMgZm1hLjMgZm1hbC4zCi1NTElOS1MrPWZtYXguMyBmbWF4Zi4zIGZtYXguMyBmbWF4bC4zIFwKLQlmbWF4LjMgZm1pbi4zIGZtYXguMyBmbWluZi4zIGZtYXguMyBmbWlubC4zCi1NTElOS1MrPWZtb2QuMyBmbW9kZi4zCi1NTElOS1MrPWh5cG90LjMgY2Ficy4zIGh5cG90LjMgY2Fic2YuMyBoeXBvdC4zIGh5cG90Zi4zCi1NTElOS1MrPWllZWVfdGVzdC4zIHNjYWxiLjMgaWVlZV90ZXN0LjMgc2NhbGJmLjMKLU1MSU5LUys9aWVlZV90ZXN0LjMgc2lnbmlmaWNhbmQuMyBpZWVlX3Rlc3QuMyBzaWduaWZpY2FuZGYuMwotTUxJTktTKz1pbG9nYi4zIGlsb2diZi4zIGlsb2diLjMgaWxvZ2JsLjMgXAotCWlsb2diLjMgbG9nYi4zIGlsb2diLjMgbG9nYmYuMwotTUxJTktTKz1qMC4zIGoxLjMgajAuMyBqbi4zIGowLjMgeTAuMyBqMC4zIHkxLjMgajAuMyB5MWYuMyBqMC4zIHluLjMKLU1MSU5LUys9ajAuMyBqMGYuMyBqMC4zIGoxZi4zIGowLjMgam5mLjMgajAuMyB5MGYuMyBqMC4zIHluZi4zCi1NTElOS1MrPWxnYW1tYS4zIGdhbW1hLjMgbGdhbW1hLjMgZ2FtbWFmLjMgbGdhbW1hLjMgbGdhbW1hZi4zIGxnYW1tYS4zIHRnYW1tYS4zCi1NTElOS1MrPWxyaW50LjMgbGxyaW50LjMgbHJpbnQuMyBsbHJpbnRmLjMgbHJpbnQuMyBscmludGYuMwotTUxJTktTKz1scm91bmQuMyBsbHJvdW5kLjMgbHJvdW5kLjMgbGxyb3VuZGYuMyBscm91bmQuMyBsbHJvdW5kbC4zIFwKLQlscm91bmQuMyBscm91bmRmLjMgbHJvdW5kLjMgbHJvdW5kbC4zCi1NTElOS1MrPW5leHRhZnRlci4zIG5leHRhZnRlcmYuMyBuZXh0YWZ0ZXIuMyBuZXh0YWZ0ZXJsLjMKLU1MSU5LUys9bmV4dGFmdGVyLjMgbmV4dHRvd2FyZC4zIG5leHRhZnRlci4zIG5leHR0b3dhcmRmLjMKLU1MSU5LUys9bmV4dGFmdGVyLjMgbmV4dHRvd2FyZGwuMwotTUxJTktTKz1yZW1haW5kZXIuMyByZW1haW5kZXJmLjMKLU1MSU5LUys9cmVtYWluZGVyLjMgcmVtcXVvLjMgcmVtYWluZGVyLjMgcmVtcXVvZi4zCi1NTElOS1MrPXJpbnQuMyByaW50Zi4zIHJpbnQuMyBuZWFyYnlpbnQuMyByaW50LjMgbmVhcmJ5aW50Zi4zCi1NTElOS1MrPXJvdW5kLjMgcm91bmRmLjMgcm91bmQuMyByb3VuZGwuMwotTUxJTktTKz1zY2FsYm4uMyBzY2FsYmxuLjMgc2NhbGJuLjMgc2NhbGJsbmYuMyBzY2FsYm4uMyBzY2FsYmxubC4zCi1NTElOS1MrPXNjYWxibi4zIHNjYWxibmYuMyBzY2FsYm4uMyBzY2FsYm5sLjMKLU1MSU5LUys9c2luLjMgc2luZi4zCi1NTElOS1MrPXNpbmguMyBzaW5oZi4zCi1NTElOS1MrPXNxcnQuMyBjYnJ0LjMgc3FydC4zIGNicnRmLjMgc3FydC4zIHNxcnRmLjMKLU1MSU5LUys9dGFuLjMgdGFuZi4zCi1NTElOS1MrPXRhbmguMyB0YW5oZi4zCi1NTElOS1MrPXRydW5jLjMgdHJ1bmNmLjMgdHJ1bmMuMyB0cnVuY2wuMwotCi0uaW5jbHVkZSA8YnNkLmxpYi5taz4KZGlmZiAtLWdpdCBhL2xpYm0vTk9USUNFIGIvbGlibS9OT1RJQ0UKaW5kZXggYmYwMTcxZi4uZDZkMGFkOSAxMDA2NDQKLS0tIGEvbGlibS9OT1RJQ0UKKysrIGIvbGlibS9OT1RJQ0UKQEAgLTEsMzU3ICsxLDg3NSBAQAotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDMsIFN0ZXZlbiBHLiBLYXJnbAotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UgdW5tb2RpZmllZCwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMsIGFuZCB0aGUgZm9sbG93aW5nCi0gKiAgICBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKLSAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCi0gKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCi0gKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDb3B5cmlnaHQgKEMpIDE5OTMgYnkgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogCi0vKi0KLSAqIENvcHlyaWdodCAoYykgMjAwMyBNaWtlIEJhcmNyb2Z0IDxtaWtlQEZyZWVCU0Qub3JnPgotICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDAzIERhdmlkIFNjaHVsdHogPGRhc0BGcmVlQlNELk9SRz4KLSAqIENvcHlyaWdodCAoYykgMjAwMyBEYXZpZCBTY2h1bHR6IDxkYXNARnJlZUJTRC5PUkc+Ci0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgRGF2aWQgU2NodWx0eiA8ZGFzQEZyZWVCU0QuT1JHPgotICogQ29weXJpZ2h0IChjKSAyMDA0LTIwMDUgRGF2aWQgU2NodWx0eiA8ZGFzQEZyZWVCU0QuT1JHPgotICogQ29weXJpZ2h0IChjKSAyMDA1IERhdmlkIFNjaHVsdHogPGRhc0BGcmVlQlNELk9SRz4KLSAqIENvcHlyaWdodCAoYykgMjAwMiBEYXZpZCBTY2h1bHR6IDxkYXNARnJlZUJTRC5PUkc+Ci0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCitEZXZlbG9wZWQgYXQgU3VuUHJvLCBhIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gYnVzaW5lc3MuCitQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCitzb2Z0d2FyZSBpcyBmcmVlbHkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGlzIG5vdGljZQoraXMgcHJlc2VydmVkLgogCi0vKi0KLSAqIENvcHlyaWdodCAoYykgMjAwNCBTdGVmYW4gRmFyZmVsZWRlcgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKgotICovCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLS8qLQotICogQ29weXJpZ2h0IChjKSAyMDAzIERhZy1FcmxpbmcgQ2/vZGFuIFNt+HJncmF2Ci0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogICAgaW4gdGhpcyBwb3NpdGlvbiBhbmQgdW5jaGFuZ2VkLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBUaGUgbmFtZSBvZiB0aGUgYXV0aG9yIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKLSAqICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0gKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgotICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAotICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0gKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqCi0gKi8KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NvcHlyaWdodCAoQykgMTk5MyBieSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAKLS8qLQotICogQ29weXJpZ2h0IChjKSAxOTk2IFRoZSBOZXRCU0QgRm91bmRhdGlvbiwgSW5jLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIFRoZSBOZXRCU0QgRm91bmRhdGlvbgotICogYnkgSi5ULiBDb25rbGluLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCi0gKiAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6Ci0gKiAgICAgICAgVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgTmV0QlNECi0gKiAgICAgICAgRm91bmRhdGlvbiwgSW5jLiBhbmQgaXRzIGNvbnRyaWJ1dG9ycy4KLSAqIDQuIE5laXRoZXIgdGhlIG5hbWUgb2YgVGhlIE5ldEJTRCBGb3VuZGF0aW9uIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBORVRCU0QgRk9VTkRBVElPTiwgSU5DLiBBTkQgQ09OVFJJQlVUT1JTCi0gKiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQKLSAqIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEZPVU5EQVRJT04gT1IgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCi0gKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLworRGV2ZWxvcGVkIGF0IFN1blBybywgYSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGJ1c2luZXNzLgorUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcworc29mdHdhcmUgaXMgZnJlZWx5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhpcyBub3RpY2UKK2lzIHByZXNlcnZlZC4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDE5ODUsIDE5OTMKLSAqIENvcHlyaWdodCAoYykgMTk4OCwgMTk5MwotICogQ29weXJpZ2h0IChjKSAxOTkyLCAxOTkzCi0gKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQotICogICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgotICoJVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgVW5pdmVyc2l0eSBvZgotICoJQ2FsaWZvcm5pYSwgQmVya2VsZXkgYW5kIGl0cyBjb250cmlidXRvcnMuCi0gKiA0LiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0gKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCitPcHRpbWl6ZWQgYnkgQnJ1Y2UgRC4gRXZhbnMuCiAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTMsOTQgV2lubmluZyBTdHJhdGVnaWVzLCBJbmMuCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTQgV2lubmluZyBTdHJhdGVnaWVzLCBJbmMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCi0gKiAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6Ci0gKiAgICAgIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgV2lubmluZyBTdHJhdGVnaWVzLCBJbmMuCi0gKiA0LiBUaGUgbmFtZSBvZiB0aGUgYXV0aG9yIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKLSAqICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0gKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgotICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAotICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0gKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi0vKgotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogQ29weXJpZ2h0IChDKSAxOTkzIGJ5IFN1biBNaWNyb3N5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBEZXZlbG9wZWQgYXQgU3VuU29mdCwgYSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGJ1c2luZXNzLgotICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcwotICogc29mdHdhcmUgaXMgZnJlZWx5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhpcyBub3RpY2UgCi0gKiBpcyBwcmVzZXJ2ZWQuCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKi8KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NvcHlyaWdodCAoQykgMTk5MyBieSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAKLS8qCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBDb3B5cmlnaHQgKEMpIDE5OTMgYnkgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIERldmVsb3BlZCBhdCBTdW5Qcm8sIGEgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBidXNpbmVzcy4KLSAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKLSAqIHNvZnR3YXJlIGlzIGZyZWVseSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoaXMgbm90aWNlCi0gKiBpcyBwcmVzZXJ2ZWQuCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKi8KK0RldmVsb3BlZCBhdCBTdW5Tb2Z0LCBhIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gYnVzaW5lc3MuCitQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCitzb2Z0d2FyZSBpcyBmcmVlbHkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGlzIG5vdGljZQoraXMgcHJlc2VydmVkLgogCi0vKgotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogQ29weXJpZ2h0IChDKSAxOTkzIGJ5IFN1biBNaWNyb3N5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBEZXZlbG9wZWQgYXQgU3VuUHJvLCBhIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gYnVzaW5lc3MuCi0gKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCi0gKiBzb2Z0d2FyZSBpcyBmcmVlbHkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGlzIG5vdGljZQotICogaXMgcHJlc2VydmVkLgotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICoKLSAqIE9wdGltaXplZCBieSBCcnVjZSBELiBFdmFucy4KLSAqLworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi0vKgotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogQ29weXJpZ2h0IChDKSAyMDA0IGJ5IFN1biBNaWNyb3N5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCi0gKiBzb2Z0d2FyZSBpcyBmcmVlbHkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGlzIG5vdGljZSAKLSAqIGlzIHByZXNlcnZlZC4KLSAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqLworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ29weXJpZ2h0IChDKSAxOTkzIGJ5IFN1biBNaWNyb3N5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KIAotLyoKLSAqIEJhc2VkIG9uIGNvZGUgd3JpdHRlbiBieSBKLlQuIENvbmtsaW4gPGp0Y0BuZXRic2Qub3JnPi4KLSAqIFB1YmxpYyBkb21haW4uCi0gKi8KK0RldmVsb3BlZCBhdCBTdW5Tb2Z0LCBhIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gYnVzaW5lc3MuCitQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCitzb2Z0d2FyZSBpcyBmcmVlbHkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGlzIG5vdGljZQoraXMgcHJlc2VydmVkLgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCi0vKgotICogV3JpdHRlbiBieSBKLlQuIENvbmtsaW4gPGp0Y0BuZXRic2Qub3JnPi4KLSAqIFB1YmxpYyBkb21haW4uCi0gKi8KK09wdGltaXplZCBieSBCcnVjZSBELiBFdmFucy4KIAotLlwiIENvcHlyaWdodCAoYykgMjAwNCBTdGVmYW4gRmFyZmVsZWRlcgotLlwiIENvcHlyaWdodCAoYykgMjAwNCBEYXZpZCBTY2h1bHR6IDxkYXNARnJlZUJTRC5vcmc+Ci0uXCIgQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IERhdmlkIFNjaHVsdHogPGRhc0BGcmVlQlNELm9yZz4KLS5cIiBDb3B5cmlnaHQgKGMpIDIwMDMgTWlrZSBCYXJjcm9mdCA8bWlrZUBGcmVlQlNELm9yZz4KLS5cIiBDb3B5cmlnaHQgKGMpIDIwMDUgRGF2aWQgU2NodWx0eiA8ZGFzQEZyZWVCU0Qub3JnPgotLlwiIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0uXCIKLS5cIiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS5cIiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLS5cIiBhcmUgbWV0OgotLlwiIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0uXCIgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLlwiIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0uXCIgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotLlwiICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0uXCIKLS5cIiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0uXCIgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0uXCIgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLS5cIiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotLlwiIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0uXCIgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLS5cIiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLS5cIiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotLlwiIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLS5cIiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0uXCIgU1VDSCBEQU1BR0UuCi0uXCIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotLlwiIENvcHlyaWdodCAoYykgMjAwMywgU3RldmVuIEcuIEthcmdsCi0uXCIgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS5cIgotLlwiIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLlwiIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotLlwiIGFyZSBtZXQ6Ci0uXCIgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS5cIiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0uXCIgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS5cIiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0uXCIgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLS5cIgotLlwiIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0uXCIgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0uXCIgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLS5cIiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLS5cIiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotLlwiIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0uXCIgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0uXCIgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLS5cIiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0uXCIgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotLlwiIFNVQ0ggREFNQUdFLgotLlwiCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDb3B5cmlnaHQgKEMpIDE5OTMgYnkgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorQ29weXJpZ2h0IChjKSAyMDA5LTIwMTEsIEJydWNlIEQuIEV2YW5zLCBTdGV2ZW4gRy4gS2FyZ2wsIERhdmlkIFNjaHVsdHouCiAKLS5cIiBDb3B5cmlnaHQgKGMpIDE5OTEgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4KLS5cIiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLlwiCi0uXCIgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0uXCIgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0uXCIgYXJlIG1ldDoKLS5cIiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLlwiICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS5cIiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotLlwiICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLS5cIiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotLlwiIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQotLlwiICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKLS5cIglUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBVbml2ZXJzaXR5IG9mCi0uXCIJQ2FsaWZvcm5pYSwgQmVya2VsZXkgYW5kIGl0cyBjb250cmlidXRvcnMuCi0uXCIgNC4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLS5cIiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKLS5cIiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS5cIgotLlwiIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0uXCIgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0uXCIgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLS5cIiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLS5cIiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotLlwiIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0uXCIgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0uXCIgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLS5cIiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0uXCIgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotLlwiIFNVQ0ggREFNQUdFLgotLlwiCitEZXZlbG9wZWQgYXQgU3VuUHJvLCBhIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gYnVzaW5lc3MuCitQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCitzb2Z0d2FyZSBpcyBmcmVlbHkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGlzIG5vdGljZQoraXMgcHJlc2VydmVkLgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGUgYXJndW1lbnQgcmVkdWN0aW9uIGFuZCB0ZXN0aW5nIGZvciBleGNlcHRpb25hbCBjYXNlcyB3YXMKK3dyaXR0ZW4gYnkgU3RldmVuIEcuIEthcmdsIHdpdGggaW5wdXQgZnJvbSBCcnVjZSBELiBFdmFucworYW5kIERhdmlkIEEuIFNjaHVsdHouCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ29weXJpZ2h0IChDKSAyMDA0IGJ5IFN1biBNaWNyb3N5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcworc29mdHdhcmUgaXMgZnJlZWx5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhpcyBub3RpY2UKK2lzIHByZXNlcnZlZC4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitDb3B5cmlnaHQgMjAwNCBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorCitQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCitzb2Z0d2FyZSBpcyBmcmVlbHkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGlzIG5vdGljZQoraXMgcHJlc2VydmVkLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisKK0xpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKK1VubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKK2Rpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCitXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KK1NlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKK2xpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NvcHlyaWdodCAoYykgMTk4NSwgMTk5MworICAgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCithcmUgbWV0OgorMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKzIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCisgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6CisgICBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBVbml2ZXJzaXR5IG9mCisgICBDYWxpZm9ybmlhLCBCZXJrZWxleSBhbmQgaXRzIGNvbnRyaWJ1dG9ycy4KKzQuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCitJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCitGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKK09SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKK0xJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKK09VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKK1NVQ0ggREFNQUdFLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NvcHlyaWdodCAoYykgMTk4OCwgMTk5MworICAgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCithcmUgbWV0OgorMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKzIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCisgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6CisgICBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBVbml2ZXJzaXR5IG9mCisgICBDYWxpZm9ybmlhLCBCZXJrZWxleSBhbmQgaXRzIGNvbnRyaWJ1dG9ycy4KKzQuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCitJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCitGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKK09SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKK0xJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKK09VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKK1NVQ0ggREFNQUdFLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NvcHlyaWdodCAoYykgMTk5MCBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLgorQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQorV2lsbGlhbSBKb2xpdHouCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCithcmUgbWV0OgorMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKzIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorNC4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECitBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKK0lNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCitBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKK0ZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCitEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCitIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorU1VDSCBEQU1BR0UuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ29weXJpZ2h0IChjKSAxOTkyLCAxOTkzCisgICBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKK2FyZSBtZXQ6CisxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiszLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKKyAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKKyAgIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIFVuaXZlcnNpdHkgb2YKKyAgIENhbGlmb3JuaWEsIEJlcmtlbGV5IGFuZCBpdHMgY29udHJpYnV0b3JzLgorNC4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECitBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKK0lNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCitBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKK0ZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCitEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCitIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorU1VDSCBEQU1BR0UuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ29weXJpZ2h0IChjKSAyMDAxLTIwMTEgVGhlIEZyZWVCU0QgUHJvamVjdC4KK0FsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCithcmUgbWV0OgorMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKzIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECitBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKK0lNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCitBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKK0RBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCitPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKK0hPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCitMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCitPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCitTVUNIIERBTUFHRS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDMgRGF2aWQgU2NodWx0eiA8ZGFzQEZyZWVCU0QuT1JHPgorQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKK2FyZSBtZXQ6CisxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKK0FOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKK0FSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCitGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKK09SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKK0xJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKK09VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKK1NVQ0ggREFNQUdFLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NvcHlyaWdodCAoYykgMjAwMyBEYWctRXJsaW5nIFNtw7hyZ3JhdgorQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKK2FyZSBtZXQ6CisxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgICBpbiB0aGlzIHBvc2l0aW9uIGFuZCB1bmNoYW5nZWQuCisyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKzMuIFRoZSBuYW1lIG9mIHRoZSBhdXRob3IgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCitJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCitPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgorSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCitOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCitEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKK1RIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyhJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDb3B5cmlnaHQgKGMpIDIwMDMgTWlrZSBCYXJjcm9mdCA8bWlrZUBGcmVlQlNELm9yZz4KK0FsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCithcmUgbWV0OgorMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKzIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECitBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKK0lNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCitBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKK0RBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCitPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKK0hPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCitMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCitPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCitTVUNIIERBTUFHRS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDb3B5cmlnaHQgKGMpIDIwMDMgTWlrZSBCYXJjcm9mdCA8bWlrZUBGcmVlQlNELm9yZz4KK0NvcHlyaWdodCAoYykgMjAwMiBEYXZpZCBTY2h1bHR6IDxkYXNARnJlZUJTRC5PUkc+CitBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworYXJlIG1ldDoKKzEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCitJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKK0ZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCitEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCitIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorU1VDSCBEQU1BR0UuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ29weXJpZ2h0IChjKSAyMDAzIE1pa2UgQmFyY3JvZnQgPG1pa2VARnJlZUJTRC5vcmc+CitDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDMgRGF2aWQgU2NodWx0eiA8ZGFzQEZyZWVCU0QuT1JHPgorQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKK2FyZSBtZXQ6CisxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKK0FOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKK0FSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCitGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKK09SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKK0xJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKK09VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKK1NVQ0ggREFNQUdFLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NvcHlyaWdodCAoYykgMjAwMywgU3RldmVuIEcuIEthcmdsCitBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworYXJlIG1ldDoKKzEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UgdW5tb2RpZmllZCwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMsIGFuZCB0aGUgZm9sbG93aW5nCisgICBkaXNjbGFpbWVyLgorMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCitJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCitPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgorSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCitOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCitEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKK1RIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyhJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDb3B5cmlnaHQgKGMpIDIwMDQgRGF2aWQgU2NodWx0eiA8ZGFzQEZyZWVCU0QuT1JHPgorQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKK2FyZSBtZXQ6CisxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKK0FOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKK0FSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCitGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKK09SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKK0xJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKK09VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKK1NVQ0ggREFNQUdFLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NvcHlyaWdodCAoYykgMjAwNCBTdGVmYW4gRmFyZmVsZWRlcgorQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKK2FyZSBtZXQ6CisxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCitJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKK0RBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCitPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKK0hPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCitMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCitPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCitTVUNIIERBTUFHRS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDb3B5cmlnaHQgKGMpIDIwMDQtMjAwNSBEYXZpZCBTY2h1bHR6IDxkYXNARnJlZUJTRC5PUkc+CitBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworYXJlIG1ldDoKKzEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCitJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKK0ZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCitEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCitIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorU1VDSCBEQU1BR0UuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ29weXJpZ2h0IChjKSAyMDA0LTIwMTEgRGF2aWQgU2NodWx0eiA8ZGFzQEZyZWVCU0QuT1JHPgorQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKK2FyZSBtZXQ6CisxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKK0FOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKK0FSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCitGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKK09SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKK0xJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKK09VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKK1NVQ0ggREFNQUdFLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NvcHlyaWdodCAoYykgMjAwNSBCcnVjZSBELiBFdmFucyBhbmQgU3RldmVuIEcuIEthcmdsCitBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworYXJlIG1ldDoKKzEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UgdW5tb2RpZmllZCwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMsIGFuZCB0aGUgZm9sbG93aW5nCisgICBkaXNjbGFpbWVyLgorMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCitJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCitPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgorSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCitOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCitEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKK1RIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyhJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDb3B5cmlnaHQgKGMpIDIwMDUgRGF2aWQgU2NodWx0eiA8ZGFzQEZyZWVCU0QuT1JHPgorQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKK2FyZSBtZXQ6CisxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKK0FOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKK0FSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCitGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKK09SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKK0xJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKK09VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKK1NVQ0ggREFNQUdFLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NvcHlyaWdodCAoYykgMjAwNS0yMDA4IERhdmlkIFNjaHVsdHogPGRhc0BGcmVlQlNELk9SRz4KK0FsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCithcmUgbWV0OgorMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKzIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECitBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKK0lNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCitBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKK0RBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCitPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKK0hPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCitMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCitPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCitTVUNIIERBTUFHRS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDb3B5cmlnaHQgKGMpIDIwMDUtMjAxMSBEYXZpZCBTY2h1bHR6IDxkYXNARnJlZUJTRC5PUkc+CitBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworYXJlIG1ldDoKKzEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCitJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKK0ZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCitEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCitIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorU1VDSCBEQU1BR0UuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ29weXJpZ2h0IChjKSAyMDA3IERhdmlkIFNjaHVsdHoKK0FsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCithcmUgbWV0OgorMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKzIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKK0FOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKK0FSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKK0ZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCitEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCitIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorU1VDSCBEQU1BR0UuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ29weXJpZ2h0IChjKSAyMDA3IERhdmlkIFNjaHVsdHogPGRhc0BGcmVlQlNELk9SRz4KK0FsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCithcmUgbWV0OgorMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKzIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECitBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKK0lNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCitBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKK0RBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCitPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKK0hPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCitMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCitPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCitTVUNIIERBTUFHRS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDb3B5cmlnaHQgKGMpIDIwMDcgRGF2aWQgU2NodWx0eiA8ZGFzQEZyZWVCU0QuT1JHPgorQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKK2FyZSBtZXQ6CisxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKK0FOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKK0FSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCitGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKK09SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKK0xJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKK09VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKK1NVQ0ggREFNQUdFLgorCitEZXJpdmVkIGZyb20gc19tb2RmLmMsIHdoaWNoIGhhcyB0aGUgZm9sbG93aW5nIENvcHlyaWdodDoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0NvcHlyaWdodCAoQykgMTk5MyBieSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKK0RldmVsb3BlZCBhdCBTdW5Qcm8sIGEgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBidXNpbmVzcy4KK1Blcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKK3NvZnR3YXJlIGlzIGZyZWVseSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoaXMgbm90aWNlCitpcyBwcmVzZXJ2ZWQuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ29weXJpZ2h0IChjKSAyMDA3IFN0ZXZlbiBHLiBLYXJnbAorQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKK2FyZSBtZXQ6CisxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlIHVubW9kaWZpZWQsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zLCBhbmQgdGhlIGZvbGxvd2luZworICAgZGlzY2xhaW1lci4KKzIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUgorSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUworT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KK0lOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKK0lOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCitUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKK1RISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ29weXJpZ2h0IChjKSAyMDA3LTIwMDggRGF2aWQgU2NodWx0eiA8ZGFzQEZyZWVCU0QuT1JHPgorQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKK2FyZSBtZXQ6CisxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKK0FOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKK0FSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCitGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKK09SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKK0xJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKK09VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKK1NVQ0ggREFNQUdFLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NvcHlyaWdodCAoYykgMjAwOCBEYXZpZCBTY2h1bHR6IDxkYXNARnJlZUJTRC5PUkc+CitBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworYXJlIG1ldDoKKzEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCitJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKK0ZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCitEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCitIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorU1VDSCBEQU1BR0UuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ29weXJpZ2h0IChjKSAyMDEwIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKK0FsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCithcmUgbWV0OgorMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKzIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECitBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKK0lNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCitBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKK0RBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCitPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKK0hPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCitMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCitPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCitTVUNIIERBTUFHRS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDb3B5cmlnaHQgKGMpIDIwMTEgRGF2aWQgU2NodWx0egorQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKK2FyZSBtZXQ6CisxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlIHVubW9kaWZpZWQsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zLCBhbmQgdGhlIGZvbGxvd2luZworICAgZGlzY2xhaW1lci4KKzIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUgorSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUworT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KK0lOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKK0lOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCitUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKK1RISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ29weXJpZ2h0IChjKSAyMDExIERhdmlkIFNjaHVsdHogPGRhc0BGcmVlQlNELk9SRz4KK0FsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCithcmUgbWV0OgorMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKzIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECitBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKK0lNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCitBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKK0RBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCitPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKK0hPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCitMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCitPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCitTVUNIIERBTUFHRS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitGcm9tOiBAKCMpc19pbG9nYi5jIDUuMSA5My8wOS8yNAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ29weXJpZ2h0IChDKSAxOTkzIGJ5IFN1biBNaWNyb3N5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworRGV2ZWxvcGVkIGF0IFN1blBybywgYSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGJ1c2luZXNzLgorUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcworc29mdHdhcmUgaXMgZnJlZWx5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhpcyBub3RpY2UKK2lzIHByZXNlcnZlZC4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCmRpZmYgLS1naXQgYS9saWJtL2FscGhhL01ha2VmaWxlLmluYyBiL2xpYm0vYWxwaGEvTWFrZWZpbGUuaW5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNzVhY2U5Li4wMDAwMDAwCi0tLSBhL2xpYm0vYWxwaGEvTWFrZWZpbGUuaW5jCisrKyAvZGV2L251bGwKQEAgLTEsMTAgKzAsMCBAQAotIyAkRnJlZUJTRDogc3JjL2xpYi9tc3VuL2FscGhhL01ha2VmaWxlLmluYyx2IDEuMiAyMDA1LzAzLzA3IDA0OjUzOjM1IGRhcyBFeHAgJAotCi1BUkNIX1NSQ1MgPSBzX2NvcHlzaWduLlMgc19jb3B5c2lnbmYuUwotTERCTF9QUkVDID0gNTMKLQotIyBYWFggQ29tbWVudCBmcm9tIE5ldEJTRC9BbHBoYToKLSMgWFhYIExJTlQgU0lHRlBFcyBpbiBlX2V4cC5jJ3Mgc3RydG9kKCkuICBGUCB1bmRlcmZsb3cvZGVub3JtIHNvZnR3YXJlCi0jIGhhbmRsaW5nIGlzIGJyb2tlbiAoZG9lc24ndCBleGlzdCEpIG9uIHRoZSBBbHBoYSBwb3J0LgotIyBTdG9jayBnY2MgMi43LjIuMSBkb2Vzbid0IHVuZGVyc3RhbmQgdGhlc2Ugb3B0aW9ucy4KLSNDRkxBR1MgKz0gLW10cmFwLXByZWNpc2lvbj1pIC1tZnAtdHJhcC1tb2RlPXN1CmRpZmYgLS1naXQgYS9saWJtL2FscGhhL19mcG1hdGguaCBiL2xpYm0vYWxwaGEvX2ZwbWF0aC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZmEyMzVjLi4wMDAwMDAwCi0tLSBhL2xpYm0vYWxwaGEvX2ZwbWF0aC5oCisrKyAvZGV2L251bGwKQEAgLTEsNDkgKzAsMCBAQAotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDMgRGF2aWQgU2NodWx0eiA8ZGFzQEZyZWVCU0QuT1JHPgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqCi0gKiAkRnJlZUJTRDogc3JjL2xpYi9saWJjL2FscGhhL19mcG1hdGguaCx2IDEuNiAyMDA1LzAzLzA3IDA0OjU1OjIxIGRhcyBFeHAgJAotICovCi0KLXVuaW9uIElFRUVsMmJpdHMgewotCWxvbmcgZG91YmxlCWU7Ci0Jc3RydWN0IHsKLQkJdW5zaWduZWQgaW50CW1hbmwJOjMyOwotCQl1bnNpZ25lZCBpbnQJbWFuaAk6MjA7Ci0JCXVuc2lnbmVkIGludAlleHAJOjExOwotCQl1bnNpZ25lZCBpbnQJc2lnbgk6MTsKLQl9IGJpdHM7Ci19OwotCi0jZGVmaW5lCW1hc2tfbmJpdF9sKHUpCSgodm9pZCkwKQotI2RlZmluZQlMREJMX0lNUExJQ0lUX05CSVQKLSNkZWZpbmUJTERCTF9OQklUCTAKLQotI2RlZmluZQlMREJMX01BTkhfU0laRQkyMAotI2RlZmluZQlMREJMX01BTkxfU0laRQkzMgotCi0jZGVmaW5lCUxEQkxfVE9fQVJSQVkzMih1LCBhKSBkbyB7CQkJXAotCShhKVswXSA9ICh1aW50MzJfdCkodSkuYml0cy5tYW5sOwkJXAotCShhKVsxXSA9ICh1aW50MzJfdCkodSkuYml0cy5tYW5oOwkJXAotfSB3aGlsZSgwKQpkaWZmIC0tZ2l0IGEvbGlibS9hbHBoYS9mZW52LmMgYi9saWJtL2FscGhhL2ZlbnYuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZThhYjIwNC4uMDAwMDAwMAotLS0gYS9saWJtL2FscGhhL2ZlbnYuYworKysgL2Rldi9udWxsCkBAIC0xLDE0NCArMCwwIEBACi0vKi0KLSAqIENvcHlyaWdodCAoYykgMjAwNC0yMDA1IERhdmlkIFNjaHVsdHogPGRhc0BGcmVlQlNELk9SRz4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKgotICogJEZyZWVCU0Q6IHNyYy9saWIvbXN1bi9hbHBoYS9mZW52LmMsdiAxLjIgMjAwNS8wMy8xNiAxOTowMzo0NCBkYXMgRXhwICQKLSAqLwotCi0jaW5jbHVkZSA8c3lzL2NkZWZzLmg+Ci0jaW5jbHVkZSA8bWFjaGluZS9zeXNhcmNoLmg+Ci0jaW5jbHVkZSA8ZmVudi5oPgotCi1jb25zdCBmZW52X3QgX19mZV9kZmxfZW52ID0gMHg2ODBlMDAwMDAwMDAwMDAwVUxMOwotCi1zdHJ1Y3QgbWFza19hcmdzIHsKLQlmZW52X3QgbWFzazsKLX07Ci0KLS8qCi0gKiBUaGUgbG93ZXIgNDkgYml0cyBvZiB0aGUgRlBDUiBhcmUgdW51c2VkIGJ5IHRoZSBoYXJkd2FyZSwgc28gd2UgdXNlCi0gKiB0aGUgbG93ZXIgb3JkZXIgYml0cyB0byBzdG9yZSB0aGUga2VybmVsJ3MgaWRlYSBvZiB0aGUgRlAgbWFzayBhcwotICogZGVzY3JpYmVkIGluIHRoZSBBbHBoYSBBcmNoaXRlY3R1cmUgTWFudWFsLgotICovCi1pbnQKLWZlZ2V0ZW52KGZlbnZfdCAqZW52cCkKLXsKLQlzdHJ1Y3QgbWFza19hcmdzIHA7Ci0JdW5pb24gX19mcGNyIHI7Ci0KLQkvKgotCSAqIFRoZSBzeXNjYWxsIGFjdHMgYXMgYW4gaW1wbGljaXQgZXhjZXB0aW9uIGJhcnJpZXIsIHNvIHdlCi0JICogb25seSBuZWVkIHRvIGlzc3VlIGFuIGV4Y2IgYWZ0ZXIgdGhlIG1mX2ZwY3IgdG8gZW5zdXJlIHRoYXQKLQkgKiB0aGUgcmVhZCBpcyBleGVjdXRlZCBiZWZvcmUgYW55IHN1YnNlcXVlbnQgRlAgb3BzLgotCSAqLwotCXN5c2FyY2goQUxQSEFfR0VUX0ZQTUFTSywgKGNoYXIgKikmcCk7Ci0JX19tZl9mcGNyKCZyLl9fZCk7Ci0JKmVudnAgPSByLl9fYml0cyB8IHAubWFzazsKLQlfX2V4Y2IoKTsKLQlyZXR1cm4gKDApOwotfQotCi1pbnQKLWZlaG9sZGV4Y2VwdChmZW52X3QgKmVudnApCi17Ci0Jc3RydWN0IG1hc2tfYXJncyBwOwotCXVuaW9uIF9fZnBjciByOwotCi0Jc3lzYXJjaChBTFBIQV9HRVRfRlBNQVNLLCAoY2hhciAqKSZwKTsKLQlfX21mX2ZwY3IoJnIuX19kKTsKLQkqZW52cCA9IHIuX19iaXRzIHwgcC5tYXNrOwotCXIuX19iaXRzICY9IH4oKGZlbnZfdClGRV9BTExfRVhDRVBUIDw8IF9GUFVTV19TSElGVCk7Ci0JX19tdF9mcGNyKHIuX19kKTsKLQlpZiAocC5tYXNrICYgRkVfQUxMX0VYQ0VQVCkgewotCQlwLm1hc2sgPSAwOwotCQlzeXNhcmNoKEFMUEhBX1NFVF9GUE1BU0ssICZwKTsKLQl9Ci0JX19leGNiKCk7Ci0JcmV0dXJuICgwKTsKLX0KLQotaW50Ci1mZXNldGVudihjb25zdCBmZW52X3QgKmVudnApCi17Ci0Jc3RydWN0IG1hc2tfYXJncyBwOwotCXVuaW9uIF9fZnBjciByOwotCi0JcC5tYXNrID0gKmVudnAgJiBGRV9BTExfRVhDRVBUOwotCXN5c2FyY2goQUxQSEFfU0VUX0ZQTUFTSywgJnApOwotCXIuX19iaXRzID0gKmVudnAgJiB+RkVfQUxMX0VYQ0VQVDsKLQlfX210X2ZwY3Ioci5fX2QpOwotCV9fZXhjYigpOwotCXJldHVybiAoMCk7Ci19Ci0KLWludAotZmV1cGRhdGVlbnYoY29uc3QgZmVudl90ICplbnZwKQotewotCXN0cnVjdCBtYXNrX2FyZ3MgcDsKLQl1bmlvbiBfX2ZwY3Igb2xkciwgbmV3cjsKLQotCXAubWFzayA9ICplbnZwICYgRkVfQUxMX0VYQ0VQVDsKLQlzeXNhcmNoKEFMUEhBX1NFVF9GUE1BU0ssICZwKTsKLQlfX21mX2ZwY3IoJm9sZHIuX19kKTsKLQluZXdyLl9fYml0cyA9ICplbnZwICYgfkZFX0FMTF9FWENFUFQ7Ci0JX19leGNiKCk7Ci0JX19tdF9mcGNyKG5ld3IuX19kKTsKLQlmZXJhaXNlZXhjZXB0KChvbGRyLl9fYml0cyA+PiBfRlBVU1dfU0hJRlQpICYgRkVfQUxMX0VYQ0VQVCk7Ci0JcmV0dXJuICgwKTsgCi19Ci0KLWludAotX19mZWVuYWJsZWV4Y2VwdChpbnQgbWFzaykKLXsKLQlzdHJ1Y3QgbWFza19hcmdzIHA7Ci0KLQlzeXNhcmNoKEFMUEhBX0dFVF9GUE1BU0ssICZwKTsKLQlwLm1hc2sgfD0gKG1hc2sgJiBGRV9BTExfRVhDRVBUKTsKLQlzeXNhcmNoKEFMUEhBX1NFVF9GUE1BU0ssICZwKTsKLQlyZXR1cm4gKHAubWFzayk7Ci19Ci0KLWludAotX19mZWRpc2FibGVleGNlcHQoaW50IG1hc2spCi17Ci0Jc3RydWN0IG1hc2tfYXJncyBwOwotCi0Jc3lzYXJjaChBTFBIQV9HRVRfRlBNQVNLLCAmcCk7Ci0JcC5tYXNrICY9IH4obWFzayAmIEZFX0FMTF9FWENFUFQpOwotCXN5c2FyY2goQUxQSEFfU0VUX0ZQTUFTSywgJnApOwotCXJldHVybiAocC5tYXNrKTsKLX0KLQotaW50Ci1fX2ZlZ2V0ZXhjZXB0KHZvaWQpCi17Ci0Jc3RydWN0IG1hc2tfYXJncyBwOwotCi0Jc3lzYXJjaChBTFBIQV9HRVRfRlBNQVNLLCAmcCk7Ci0JcmV0dXJuIChwLm1hc2spOwotfQotCi1fX3dlYWtfcmVmZXJlbmNlKF9fZmVlbmFibGVleGNlcHQsIGZlZW5hYmxlZXhjZXB0KTsKLV9fd2Vha19yZWZlcmVuY2UoX19mZWRpc2FibGVleGNlcHQsIGZlZGlzYWJsZWV4Y2VwdCk7Ci1fX3dlYWtfcmVmZXJlbmNlKF9fZmVnZXRleGNlcHQsIGZlZ2V0ZXhjZXB0KTsKZGlmZiAtLWdpdCBhL2xpYm0vYWxwaGEvZmVudi5oIGIvbGlibS9hbHBoYS9mZW52LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRjN2JjYjcuLjAwMDAwMDAKLS0tIGEvbGlibS9hbHBoYS9mZW52LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxODUgKzAsMCBAQAotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQtMjAwNSBEYXZpZCBTY2h1bHR6IDxkYXNARnJlZUJTRC5PUkc+Ci0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICoKLSAqICRGcmVlQlNEOiBzcmMvbGliL21zdW4vYWxwaGEvZmVudi5oLHYgMS4zIDIwMDUvMDMvMTYgMTk6MDM6NDQgZGFzIEV4cCAkCi0gKi8KLQotI2lmbmRlZglfRkVOVl9IXwotI2RlZmluZQlfRkVOVl9IXwotCi0jaW5jbHVkZSA8c3lzL190eXBlcy5oPgotCi10eXBlZGVmCV9fdWludDY0X3QJZmVudl90OwotdHlwZWRlZglfX3VpbnQxNl90CWZleGNlcHRfdDsKLQotLyogRXhjZXB0aW9uIGZsYWdzICovCi0jZGVmaW5lCUZFX0lOVkFMSUQJMHgwMgotI2RlZmluZQlGRV9ESVZCWVpFUk8JMHgwNAotI2RlZmluZQlGRV9PVkVSRkxPVwkweDA4Ci0jZGVmaW5lCUZFX1VOREVSRkxPVwkweDEwCi0jZGVmaW5lCUZFX0lORVhBQ1QJMHgyMAotI2RlZmluZQlGRV9JTlRPVkYJMHg0MAkvKiBub3QgbWFza2FibGUgKi8KLSNkZWZpbmUJRkVfQUxMX0VYQ0VQVAkoRkVfRElWQllaRVJPIHwgRkVfSU5FWEFDVCB8IEZFX0lOVE9WRiB8IFwKLQkJCSBGRV9JTlZBTElEIHwgRkVfT1ZFUkZMT1cgfCBGRV9VTkRFUkZMT1cpCi0KLS8qIFJvdW5kaW5nIG1vZGVzICovCi0jZGVmaW5lCUZFX1RPV0FSRFpFUk8JMHgwMAotI2RlZmluZQlGRV9ET1dOV0FSRAkweDAxCi0jZGVmaW5lCUZFX1RPTkVBUkVTVAkweDAyCi0jZGVmaW5lCUZFX1VQV0FSRAkweDAzCi0jZGVmaW5lCV9ST1VORF9NQVNLCShGRV9UT05FQVJFU1QgfCBGRV9ET1dOV0FSRCB8IFwKLQkJCSBGRV9VUFdBUkQgfCBGRV9UT1dBUkRaRVJPKQotI2RlZmluZQlfUk9VTkRfU0hJRlQJNTgKLQotI2RlZmluZQlfRlBVU1dfU0hJRlQJNTEKLQotI2RlZmluZQlfX2V4Y2IoKQlfX2FzbSBfX3ZvbGF0aWxlKCJleGNiIikKLSNkZWZpbmUJX19tZl9mcGNyKF9fY3cpCV9fYXNtIF9fdm9sYXRpbGUoIm1mX2ZwY3IgJTAiIDogIj1mIiAoKihfX2N3KSkpCi0jZGVmaW5lCV9fbXRfZnBjcihfX2N3KQlfX2FzbSBfX3ZvbGF0aWxlKCJtdF9mcGNyICUwIiA6IDogImYiIChfX2N3KSkKLQotdW5pb24gX19mcGNyIHsKLQlkb3VibGUgX19kOwotCWZlbnZfdCBfX2JpdHM7Ci19OwotCi1fX0JFR0lOX0RFQ0xTCi0KLS8qIERlZmF1bHQgZmxvYXRpbmctcG9pbnQgZW52aXJvbm1lbnQgKi8KLWV4dGVybiBjb25zdCBmZW52X3QJX19mZV9kZmxfZW52OwotI2RlZmluZQlGRV9ERkxfRU5WCSgmX19mZV9kZmxfZW52KQotCi1zdGF0aWMgX19pbmxpbmUgaW50Ci1mZWNsZWFyZXhjZXB0KGludCBfX2V4Y2VwdHMpCi17Ci0JdW5pb24gX19mcGNyIF9fcjsKLQotCV9fZXhjYigpOwotCV9fbWZfZnBjcigmX19yLl9fZCk7Ci0JX19yLl9fYml0cyAmPSB+KChmZW52X3QpX19leGNlcHRzIDw8IF9GUFVTV19TSElGVCk7Ci0JX19tdF9mcGNyKF9fci5fX2QpOwotCV9fZXhjYigpOwotCXJldHVybiAoMCk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZSBpbnQKLWZlZ2V0ZXhjZXB0ZmxhZyhmZXhjZXB0X3QgKl9fZmxhZ3AsIGludCBfX2V4Y2VwdHMpCi17Ci0JdW5pb24gX19mcGNyIF9fcjsKLQotCV9fZXhjYigpOwotCV9fbWZfZnBjcigmX19yLl9fZCk7Ci0JX19leGNiKCk7Ci0JKl9fZmxhZ3AgPSAoX19yLl9fYml0cyA+PiBfRlBVU1dfU0hJRlQpICYgX19leGNlcHRzOwotCXJldHVybiAoMCk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZSBpbnQKLWZlc2V0ZXhjZXB0ZmxhZyhjb25zdCBmZXhjZXB0X3QgKl9fZmxhZ3AsIGludCBfX2V4Y2VwdHMpCi17Ci0JdW5pb24gX19mcGNyIF9fcjsKLQlmZW52X3QgX194ZmxhZywgX194ZXhjZXB0czsKLQotCV9feGZsYWcgPSAoZmVudl90KSpfX2ZsYWdwIDw8IF9GUFVTV19TSElGVDsKLQlfX3hleGNlcHRzID0gKGZlbnZfdClfX2V4Y2VwdHMgPDwgX0ZQVVNXX1NISUZUOwotCV9fZXhjYigpOwotCV9fbWZfZnBjcigmX19yLl9fZCk7Ci0JX19yLl9fYml0cyAmPSB+X194ZXhjZXB0czsKLQlfX3IuX19iaXRzIHw9IF9feGZsYWcgJiBfX3hleGNlcHRzOwotCV9fbXRfZnBjcihfX3IuX19kKTsKLQlfX2V4Y2IoKTsKLQlyZXR1cm4gKDApOwotfQotCi1zdGF0aWMgX19pbmxpbmUgaW50Ci1mZXJhaXNlZXhjZXB0KGludCBfX2V4Y2VwdHMpCi17Ci0KLQkvKgotCSAqIFhYWCBHZW5lcmF0aW5nIGV4Y2VwdGlvbnMgdGhpcyB3YXkgZG9lcyBub3QgYWN0dWFsbHkgaW52b2tlCi0JICogYSB1c2VybGFuZCB0cmFwIGhhbmRsZXIgd2hlbiBlbmFibGVkLCBidXQgbmVpdGhlciBkbwotCSAqIGFyaXRobWV0aWMgb3BlcmF0aW9ucyBhcyBmYXIgYXMgSSBjYW4gdGVsbC4gIFBlcmhhcHMgdGhlcmUKLQkgKiBhcmUgbW9yZSBidWdzIGluIHRoZSBrZXJuZWwgdHJhcCBoYW5kbGVyLgotCSAqLwotCWZleGNlcHRfdCBfX2V4ID0gX19leGNlcHRzOwotCWZlc2V0ZXhjZXB0ZmxhZygmX19leCwgX19leGNlcHRzKTsKLQlyZXR1cm4gKDApOwotfQotCi1zdGF0aWMgX19pbmxpbmUgaW50Ci1mZXRlc3RleGNlcHQoaW50IF9fZXhjZXB0cykKLXsKLQl1bmlvbiBfX2ZwY3IgX19yOwotCi0JX19leGNiKCk7Ci0JX19tZl9mcGNyKCZfX3IuX19kKTsKLQlfX2V4Y2IoKTsKLQlyZXR1cm4gKChfX3IuX19iaXRzID4+IF9GUFVTV19TSElGVCkgJiBfX2V4Y2VwdHMpOwotfQotCi1zdGF0aWMgX19pbmxpbmUgaW50Ci1mZWdldHJvdW5kKHZvaWQpCi17Ci0JdW5pb24gX19mcGNyIF9fcjsKLQotCS8qCi0JICogTm8gZXhjZXB0aW9uIGJhcnJpZXJzIHNob3VsZCBiZSByZXF1aXJlZCBoZXJlIGlmIHdlIGFzc3VtZQotCSAqIHRoYXQgb25seSBmZXNldHJvdW5kKCkgY2FuIGNoYW5nZSB0aGUgcm91bmRpbmcgbW9kZS4KLQkgKi8KLQlfX21mX2ZwY3IoJl9fci5fX2QpOwotCXJldHVybiAoKGludCkoX19yLl9fYml0cyA+PiBfUk9VTkRfU0hJRlQpICYgX1JPVU5EX01BU0spOwotfQotCi1zdGF0aWMgX19pbmxpbmUgaW50Ci1mZXNldHJvdW5kKGludCBfX3JvdW5kKQotewotCXVuaW9uIF9fZnBjciBfX3I7Ci0KLQlpZiAoX19yb3VuZCAmIH5fUk9VTkRfTUFTSykKLQkJcmV0dXJuICgtMSk7Ci0JX19leGNiKCk7Ci0JX19tZl9mcGNyKCZfX3IuX19kKTsKLQlfX3IuX19iaXRzICY9IH4oKGZlbnZfdClfUk9VTkRfTUFTSyA8PCBfUk9VTkRfU0hJRlQpOwotCV9fci5fX2JpdHMgfD0gKGZlbnZfdClfX3JvdW5kIDw8IF9ST1VORF9TSElGVDsKLQlfX210X2ZwY3IoX19yLl9fZCk7Ci0JX19leGNiKCk7Ci0JcmV0dXJuICgwKTsKLX0KLQotaW50CWZlZ2V0ZW52KGZlbnZfdCAqX19lbnZwKTsKLWludAlmZWhvbGRleGNlcHQoZmVudl90ICpfX2VudnApOwotaW50CWZlc2V0ZW52KGNvbnN0IGZlbnZfdCAqX19lbnZwKTsKLWludAlmZXVwZGF0ZWVudihjb25zdCBmZW52X3QgKl9fZW52cCk7Ci0KLSNpZiBfX0JTRF9WSVNJQkxFCi0KLWludAlmZWVuYWJsZWV4Y2VwdChpbnQgX19tYXNrKTsKLWludAlmZWRpc2FibGVleGNlcHQoaW50IF9fbWFzayk7Ci1pbnQJZmVnZXRleGNlcHQodm9pZCk7Ci0KLSNlbmRpZiAvKiBfX0JTRF9WSVNJQkxFICovCi0KLV9fRU5EX0RFQ0xTCi0KLSNlbmRpZgkvKiAhX0ZFTlZfSF8gKi8KZGlmZiAtLWdpdCBhL2xpYm0vYWxwaGEvc19jb3B5c2lnbi5TIGIvbGlibS9hbHBoYS9zX2NvcHlzaWduLlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEyMzgxYmIuLjAwMDAwMDAKLS0tIGEvbGlibS9hbHBoYS9zX2NvcHlzaWduLlMKKysrIC9kZXYvbnVsbApAQCAtMSw0NSArMCwwIEBACi0vKiAkRnJlZUJTRDogc3JjL2xpYi9tc3VuL2FscGhhL3NfY29weXNpZ24uUyx2IDEuMiAxOTk5LzA4LzI4IDAwOjA2OjA3IHBldGVyIEV4cCAkICovCi0vKglGcm9tOiBOZXRCU0Q6IHNfY29weXNpZ24uUyx2IDEuMyAxOTk3LzA3LzMwIDIzOjU4OjM4IGp0YyBFeHAJKi8KLQotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTYgVGhlIE5ldEJTRCBGb3VuZGF0aW9uLCBJbmMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gVGhlIE5ldEJTRCBGb3VuZGF0aW9uCi0gKiBieSBKLlQuIENvbmtsaW4uCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKLSAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKLSAqICAgICAgICBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBOZXRCU0QKLSAqICAgICAgICBGb3VuZGF0aW9uLCBJbmMuIGFuZCBpdHMgY29udHJpYnV0b3JzLgotICogNC4gTmVpdGhlciB0aGUgbmFtZSBvZiBUaGUgTmV0QlNEIEZvdW5kYXRpb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE5FVEJTRCBGT1VOREFUSU9OLCBJTkMuIEFORCBDT05UUklCVVRPUlMKLSAqIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRAotICogVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgRk9VTkRBVElPTiBPUiBDT05UUklCVVRPUlMgCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCi0gKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KLQotTEVBRihjb3B5c2lnbiwgMikKLQljcHlzCWZhMSwgZmEwLCBmdjAKLQlSRVQKLUVORChjb3B5c2lnbikKZGlmZiAtLWdpdCBhL2xpYm0vYWxwaGEvc19jb3B5c2lnbmYuUyBiL2xpYm0vYWxwaGEvc19jb3B5c2lnbmYuUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmU1ZWRhMS4uMDAwMDAwMAotLS0gYS9saWJtL2FscGhhL3NfY29weXNpZ25mLlMKKysrIC9kZXYvbnVsbApAQCAtMSw0NSArMCwwIEBACi0vKiAkRnJlZUJTRDogc3JjL2xpYi9tc3VuL2FscGhhL3NfY29weXNpZ25mLlMsdiAxLjIgMTk5OS8wOC8yOCAwMDowNjowOCBwZXRlciBFeHAgJCAqLwotLyoJRnJvbTogTmV0QlNEOiBzX2NvcHlzaWduZi5TLHYgMS4zIDE5OTcvMDcvMzAgMjM6NTg6NDEganRjIEV4cCAqLwotCi0vKi0KLSAqIENvcHlyaWdodCAoYykgMTk5NiBUaGUgTmV0QlNEIEZvdW5kYXRpb24sIEluYy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBUaGUgTmV0QlNEIEZvdW5kYXRpb24KLSAqIGJ5IEouVC4gQ29ua2xpbi4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQotICogICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgotICogICAgICAgIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE5ldEJTRAotICogICAgICAgIEZvdW5kYXRpb24sIEluYy4gYW5kIGl0cyBjb250cmlidXRvcnMuCi0gKiA0LiBOZWl0aGVyIHRoZSBuYW1lIG9mIFRoZSBOZXRCU0QgRm91bmRhdGlvbiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgTkVUQlNEIEZPVU5EQVRJT04sIElOQy4gQU5EIENPTlRSSUJVVE9SUwotICogYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVECi0gKiBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBGT1VOREFUSU9OIE9SIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQotICogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+Ci0KLUxFQUYoY29weXNpZ25mLCAyKQotCWNweXMJZmExLCBmYTAsIGZ2MAotCVJFVAotRU5EKGNvcHlzaWduZikKZGlmZiAtLWdpdCBhL2xpYm0vYW1kNjQvTWFrZWZpbGUuaW5jIGIvbGlibS9hbWQ2NC9NYWtlZmlsZS5pbmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQzZGE3NzUuLjAwMDAwMDAKLS0tIGEvbGlibS9hbWQ2NC9NYWtlZmlsZS5pbmMKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLSMgJEZyZWVCU0Q6IHNyYy9saWIvbXN1bi9hbWQ2NC9NYWtlZmlsZS5pbmMsdiAxLjQgMjAwNS8wNC8xNiAyMToxMjo1NSBkYXMgRXhwICQKLQotQVJDSF9TUkNTID0gZV9zcXJ0LlMgZV9zcXJ0Zi5TIHNfbGxyaW50LlMgc19sbHJpbnRmLlMgc19scmludC5TIHNfbHJpbnRmLlMgXAotCSAgICBzX3JlbXF1by5TIHNfcmVtcXVvZi5TIHNfc2NhbGJuLlMgc19zY2FsYm5mLlMgc19zY2FsYm5sLlMKLUxEQkxfUFJFQyA9IDY0CmRpZmYgLS1naXQgYS9saWJtL2FtZDY0L19mcG1hdGguaCBiL2xpYm0vYW1kNjQvX2ZwbWF0aC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MDFlYzgwLi4wMDAwMDAwCi0tLSBhL2xpYm0vYW1kNjQvX2ZwbWF0aC5oCisrKyAvZGV2L251bGwKQEAgLTEsNTAgKzAsMCBAQAotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDMgRGF2aWQgU2NodWx0eiA8ZGFzQEZyZWVCU0QuT1JHPgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqCi0gKiAkRnJlZUJTRDogc3JjL2xpYi9saWJjL2FtZDY0L19mcG1hdGguaCx2IDEuNiAyMDA1LzAzLzA3IDA0OjU1OjIxIGRhcyBFeHAgJAotICovCi0KLXVuaW9uIElFRUVsMmJpdHMgewotCWxvbmcgZG91YmxlCWU7Ci0Jc3RydWN0IHsKLQkJdW5zaWduZWQgaW50CW1hbmwJOjMyOwotCQl1bnNpZ25lZCBpbnQJbWFuaAk6MzI7Ci0JCXVuc2lnbmVkIGludAlleHAJOjE1OwotCQl1bnNpZ25lZCBpbnQJc2lnbgk6MTsKLQkJdW5zaWduZWQgaW50CWp1bmtsCToxNjsKLQkJdW5zaWduZWQgaW50CWp1bmtoCTozMjsKLQl9IGJpdHM7Ci19OwotCi0jZGVmaW5lCUxEQkxfTkJJVAkweDgwMDAwMDAwCi0jZGVmaW5lCW1hc2tfbmJpdF9sKHUpCSgodSkuYml0cy5tYW5oICY9IH5MREJMX05CSVQpCi0KLSNkZWZpbmUJTERCTF9NQU5IX1NJWkUJMzIKLSNkZWZpbmUJTERCTF9NQU5MX1NJWkUJMzIKLQotI2RlZmluZQlMREJMX1RPX0FSUkFZMzIodSwgYSkgZG8gewkJCVwKLQkoYSlbMF0gPSAodWludDMyX3QpKHUpLmJpdHMubWFubDsJCVwKLQkoYSlbMV0gPSAodWludDMyX3QpKHUpLmJpdHMubWFuaDsJCVwKLX0gd2hpbGUoMCkKZGlmZiAtLWdpdCBhL2xpYm0vYW1kNjQvZV9zcXJ0LlMgYi9saWJtL2FtZDY0L2Vfc3FydC5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNDI5Y2NlLi4wMDAwMDAwCi0tLSBhL2xpYm0vYW1kNjQvZV9zcXJ0LlMKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi0vKi0KLSAqIENvcHlyaWdodCAoYykgMjAwNSBEYXZpZCBTY2h1bHR6IDxkYXNARnJlZUJTRC5PUkc+Ci0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgotX19GQlNESUQoIiRGcmVlQlNEOiBzcmMvbGliL21zdW4vYW1kNjQvZV9zcXJ0LlMsdiAxLjIgMjAwNS8wMi8wNCAxNDowODozMiBkYXMgRXhwICQiKQotCQotRU5UUlkoc3FydCkKLQlzcXJ0c2QJJXhtbTAsICV4bW0wCi0JcmV0Ci0KZGlmZiAtLWdpdCBhL2xpYm0vYW1kNjQvZV9zcXJ0Zi5TIGIvbGlibS9hbWQ2NC9lX3NxcnRmLlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ3MWZhNjYuLjAwMDAwMDAKLS0tIGEvbGlibS9hbWQ2NC9lX3NxcnRmLlMKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi0vKi0KLSAqIENvcHlyaWdodCAoYykgMjAwNSBEYXZpZCBTY2h1bHR6IDxkYXNARnJlZUJTRC5PUkc+Ci0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgotX19GQlNESUQoIiRGcmVlQlNEOiBzcmMvbGliL21zdW4vYW1kNjQvZV9zcXJ0Zi5TLHYgMS4xIDIwMDUvMDQvMTYgMjE6MTI6NTUgZGFzIEV4cCAkIikKLQkKLUVOVFJZKHNxcnRmKQotCXNxcnRzcwkleG1tMCwgJXhtbTAKLQlyZXQKZGlmZiAtLWdpdCBhL2xpYm0vYW1kNjQvZmVudi5jIGIvbGlibS9hbWQ2NC9mZW52LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJiNDM2NzguLjAwMDAwMDAKLS0tIGEvbGlibS9hbWQ2NC9mZW52LmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNDggKzAsMCBAQAotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQtMjAwNSBEYXZpZCBTY2h1bHR6IDxkYXNARnJlZUJTRC5PUkc+Ci0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICoKLSAqICRGcmVlQlNEOiBzcmMvbGliL21zdW4vYW1kNjQvZmVudi5jLHYgMS4zIDIwMDUvMDMvMTYgMTk6MDM6NDUgZGFzIEV4cCAkCi0gKi8KLQotI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPG1hY2hpbmUvZnB1Lmg+Ci0jaW5jbHVkZSA8ZmVudi5oPgotCi1jb25zdCBmZW52X3QgX19mZV9kZmxfZW52ID0gewotCXsgMHhmZmZmMDAwMCB8IF9fSU5JVElBTF9GUFVDV19fLAotCSAgMHhmZmZmMDAwMCwKLQkgIDB4ZmZmZmZmZmYsCi0JICB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYgfQotCX0sCi0JX19JTklUSUFMX01YQ1NSX18KLX07Ci0KLWludAotZmVzZXRleGNlcHRmbGFnKGNvbnN0IGZleGNlcHRfdCAqZmxhZ3AsIGludCBleGNlcHRzKQotewotCWZlbnZfdCBlbnY7Ci0KLQlfX2Zuc3RlbnYoJmVudi5fX3g4Nyk7Ci0JZW52Ll9feDg3Ll9fc3RhdHVzICY9IH5leGNlcHRzOwotCWVudi5fX3g4Ny5fX3N0YXR1cyB8PSAqZmxhZ3AgJiBleGNlcHRzOwotCV9fZmxkZW52KGVudi5fX3g4Nyk7Ci0KLQlfX3N0bXhjc3IoJmVudi5fX214Y3NyKTsKLQllbnYuX19teGNzciAmPSB+ZXhjZXB0czsKLQllbnYuX19teGNzciB8PSAqZmxhZ3AgJiBleGNlcHRzOwotCV9fbGRteGNzcihlbnYuX19teGNzcik7Ci0KLQlyZXR1cm4gKDApOwotfQotCi1pbnQKLWZlcmFpc2VleGNlcHQoaW50IGV4Y2VwdHMpCi17Ci0JZmV4Y2VwdF90IGV4ID0gZXhjZXB0czsKLQotCWZlc2V0ZXhjZXB0ZmxhZygmZXgsIGV4Y2VwdHMpOwotCV9fZndhaXQoKTsKLQlyZXR1cm4gKDApOwotfQotCi1pbnQKLWZlZ2V0ZW52KGZlbnZfdCAqZW52cCkKLXsKLQlpbnQgY29udHJvbDsKLQotCS8qCi0JICogZm5zdGVudiBtYXNrcyBhbGwgZXhjZXB0aW9ucywgc28gd2UgbmVlZCB0byBzYXZlIGFuZAotCSAqIHJlc3RvcmUgdGhlIGNvbnRyb2wgd29yZCB0byBhdm9pZCB0aGlzIHNpZGUgZWZmZWN0LgotCSAqLwotCV9fZm5zdGN3KCZjb250cm9sKTsKLQlfX2Zuc3RlbnYoJmVudnAtPl9feDg3KTsKLQlfX3N0bXhjc3IoJmVudnAtPl9fbXhjc3IpOwotCV9fZmxkY3coY29udHJvbCk7Ci0JcmV0dXJuICgwKTsKLX0KLQotaW50Ci1mZWhvbGRleGNlcHQoZmVudl90ICplbnZwKQotewotCWludCBteGNzcjsKLQotCV9fc3RteGNzcigmbXhjc3IpOwotCV9fZm5zdGVudigmZW52cC0+X194ODcpOwotCV9fZm5jbGV4KCk7Ci0JZW52cC0+X19teGNzciA9IG14Y3NyOwotCW14Y3NyICY9IH5GRV9BTExfRVhDRVBUOwotCW14Y3NyIHw9IEZFX0FMTF9FWENFUFQgPDwgX1NTRV9FTUFTS19TSElGVDsKLQlfX2xkbXhjc3IobXhjc3IpOwotCXJldHVybiAoMCk7Ci19Ci0KLWludAotZmV1cGRhdGVlbnYoY29uc3QgZmVudl90ICplbnZwKQotewotCWludCBteGNzciwgc3RhdHVzOwotCi0JX19mbnN0c3coJnN0YXR1cyk7Ci0JX19zdG14Y3NyKCZteGNzcik7Ci0JZmVzZXRlbnYoZW52cCk7Ci0JZmVyYWlzZWV4Y2VwdCgobXhjc3IgfCBzdGF0dXMpICYgRkVfQUxMX0VYQ0VQVCk7Ci0JcmV0dXJuICgwKTsKLX0KLQotaW50Ci1fX2ZlZW5hYmxlZXhjZXB0KGludCBtYXNrKQotewotCWludCBteGNzciwgY29udHJvbCwgb21hc2s7Ci0KLQltYXNrICY9IEZFX0FMTF9FWENFUFQ7Ci0JX19mbnN0Y3coJmNvbnRyb2wpOwotCV9fc3RteGNzcigmbXhjc3IpOwotCW9tYXNrID0gKGNvbnRyb2wgfCBteGNzciA+PiBfU1NFX0VNQVNLX1NISUZUKSAmIEZFX0FMTF9FWENFUFQ7Ci0JY29udHJvbCAmPSB+bWFzazsKLQlfX2ZsZGN3KGNvbnRyb2wpOwotCW14Y3NyICY9IH4obWFzayA8PCBfU1NFX0VNQVNLX1NISUZUKTsKLQlfX2xkbXhjc3IobXhjc3IpOwotCXJldHVybiAofm9tYXNrKTsKLX0KLQotaW50Ci1fX2ZlZGlzYWJsZWV4Y2VwdChpbnQgbWFzaykKLXsKLQlpbnQgbXhjc3IsIGNvbnRyb2wsIG9tYXNrOwotCi0JbWFzayAmPSBGRV9BTExfRVhDRVBUOwotCV9fZm5zdGN3KCZjb250cm9sKTsKLQlfX3N0bXhjc3IoJm14Y3NyKTsKLQlvbWFzayA9IChjb250cm9sIHwgbXhjc3IgPj4gX1NTRV9FTUFTS19TSElGVCkgJiBGRV9BTExfRVhDRVBUOwotCWNvbnRyb2wgfD0gbWFzazsKLQlfX2ZsZGN3KGNvbnRyb2wpOwotCW14Y3NyIHw9IG1hc2sgPDwgX1NTRV9FTUFTS19TSElGVDsKLQlfX2xkbXhjc3IobXhjc3IpOwotCXJldHVybiAofm9tYXNrKTsKLX0KLQotX193ZWFrX3JlZmVyZW5jZShfX2ZlZW5hYmxlZXhjZXB0LCBmZWVuYWJsZWV4Y2VwdCk7Ci1fX3dlYWtfcmVmZXJlbmNlKF9fZmVkaXNhYmxlZXhjZXB0LCBmZWRpc2FibGVleGNlcHQpOwpkaWZmIC0tZ2l0IGEvbGlibS9hbWQ2NC9mZW52LmggYi9saWJtL2FtZDY0L2ZlbnYuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzRmOTQzMi4uMDAwMDAwMAotLS0gYS9saWJtL2FtZDY0L2ZlbnYuaAorKysgL2Rldi9udWxsCkBAIC0xLDIwMyArMCwwIEBACi0vKi0KLSAqIENvcHlyaWdodCAoYykgMjAwNC0yMDA1IERhdmlkIFNjaHVsdHogPGRhc0BGcmVlQlNELk9SRz4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKgotICogJEZyZWVCU0Q6IHNyYy9saWIvbXN1bi9hbWQ2NC9mZW52LmgsdiAxLjUgMjAwNS8wMy8xNiAyMjozNDoxNCBkYXMgRXhwICQKLSAqLwotCi0jaWZuZGVmCV9GRU5WX0hfCi0jZGVmaW5lCV9GRU5WX0hfCi0KLSNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KLSNpbmNsdWRlIDxzeXMvX3R5cGVzLmg+Ci0KLXR5cGVkZWYgc3RydWN0IHsKLQlzdHJ1Y3QgewotCQlfX3VpbnQzMl90CV9fY29udHJvbDsKLQkJX191aW50MzJfdAlfX3N0YXR1czsKLQkJX191aW50MzJfdAlfX3RhZzsKLQkJY2hhcgkJX19vdGhlclsxNl07Ci0JfSBfX3g4NzsKLQlfX3VpbnQzMl90CQlfX214Y3NyOwotfSBmZW52X3Q7Ci0KLXR5cGVkZWYJX191aW50MTZfdAlmZXhjZXB0X3Q7Ci0KLS8qIEV4Y2VwdGlvbiBmbGFncyAqLwotI2RlZmluZQlGRV9JTlZBTElECTB4MDEKLSNkZWZpbmUJRkVfREVOT1JNQUwJMHgwMgotI2RlZmluZQlGRV9ESVZCWVpFUk8JMHgwNAotI2RlZmluZQlGRV9PVkVSRkxPVwkweDA4Ci0jZGVmaW5lCUZFX1VOREVSRkxPVwkweDEwCi0jZGVmaW5lCUZFX0lORVhBQ1QJMHgyMAotI2RlZmluZQlGRV9BTExfRVhDRVBUCShGRV9ESVZCWVpFUk8gfCBGRV9ERU5PUk1BTCB8IEZFX0lORVhBQ1QgfCBcCi0JCQkgRkVfSU5WQUxJRCB8IEZFX09WRVJGTE9XIHwgRkVfVU5ERVJGTE9XKQotCi0vKiBSb3VuZGluZyBtb2RlcyAqLwotI2RlZmluZQlGRV9UT05FQVJFU1QJMHgwMDAwCi0jZGVmaW5lCUZFX0RPV05XQVJECTB4MDQwMAotI2RlZmluZQlGRV9VUFdBUkQJMHgwODAwCi0jZGVmaW5lCUZFX1RPV0FSRFpFUk8JMHgwYzAwCi0jZGVmaW5lCV9ST1VORF9NQVNLCShGRV9UT05FQVJFU1QgfCBGRV9ET1dOV0FSRCB8IFwKLQkJCSBGRV9VUFdBUkQgfCBGRV9UT1dBUkRaRVJPKQotCi0vKgotICogQXMgY29tcGFyZWQgdG8gdGhlIHg4NyBjb250cm9sIHdvcmQsIHRoZSBTU0UgdW5pdCdzIGNvbnRyb2wgd29yZAotICogaGFzIHRoZSByb3VuZGluZyBjb250cm9sIGJpdHMgb2Zmc2V0IGJ5IDMgYW5kIHRoZSBleGNlcHRpb24gbWFzawotICogYml0cyBvZmZzZXQgYnkgNy4KLSAqLwotI2RlZmluZQlfU1NFX1JPVU5EX1NISUZUCTMKLSNkZWZpbmUJX1NTRV9FTUFTS19TSElGVAk3Ci0KLV9fQkVHSU5fREVDTFMKLQotLyogRGVmYXVsdCBmbG9hdGluZy1wb2ludCBlbnZpcm9ubWVudCAqLwotZXh0ZXJuIGNvbnN0IGZlbnZfdAlfX2ZlX2RmbF9lbnY7Ci0jZGVmaW5lCUZFX0RGTF9FTlYJKCZfX2ZlX2RmbF9lbnYpCi0KLSNkZWZpbmUJX19mbGRjdyhfX2N3KQkJX19hc20gX192b2xhdGlsZSgiZmxkY3cgJTAiIDogOiAibSIgKF9fY3cpKQotI2RlZmluZQlfX2ZsZGVudihfX2VudikJCV9fYXNtIF9fdm9sYXRpbGUoImZsZGVudiAlMCIgOiA6ICJtIiAoX19lbnYpKQotI2RlZmluZQlfX2ZuY2xleCgpCQlfX2FzbSBfX3ZvbGF0aWxlKCJmbmNsZXgiKQotI2RlZmluZQlfX2Zuc3RlbnYoX19lbnYpCV9fYXNtIF9fdm9sYXRpbGUoImZuc3RlbnYgJTAiIDogIj1tIiAoKihfX2VudikpKQotI2RlZmluZQlfX2Zuc3RjdyhfX2N3KQkJX19hc20gX192b2xhdGlsZSgiZm5zdGN3ICUwIiA6ICI9bSIgKCooX19jdykpKQotI2RlZmluZQlfX2Zuc3RzdyhfX3N3KQkJX19hc20gX192b2xhdGlsZSgiZm5zdHN3ICUwIiA6ICI9YW0iICgqKF9fc3cpKSkKLSNkZWZpbmUJX19md2FpdCgpCQlfX2FzbSBfX3ZvbGF0aWxlKCJmd2FpdCIpCi0jZGVmaW5lCV9fbGRteGNzcihfX2NzcikJX19hc20gX192b2xhdGlsZSgibGRteGNzciAlMCIgOiA6ICJtIiAoX19jc3IpKQotI2RlZmluZQlfX3N0bXhjc3IoX19jc3IpCV9fYXNtIF9fdm9sYXRpbGUoInN0bXhjc3IgJTAiIDogIj1tIiAoKihfX2NzcikpKQotCi1zdGF0aWMgX19pbmxpbmUgaW50Ci1mZWNsZWFyZXhjZXB0KGludCBfX2V4Y2VwdHMpCi17Ci0JZmVudl90IF9fZW52OwotCi0JaWYgKF9fZXhjZXB0cyA9PSBGRV9BTExfRVhDRVBUKSB7Ci0JCV9fZm5jbGV4KCk7Ci0JfSBlbHNlIHsKLQkJX19mbnN0ZW52KCZfX2Vudi5fX3g4Nyk7Ci0JCV9fZW52Ll9feDg3Ll9fc3RhdHVzICY9IH5fX2V4Y2VwdHM7Ci0JCV9fZmxkZW52KF9fZW52Ll9feDg3KTsKLQl9Ci0JX19zdG14Y3NyKCZfX2Vudi5fX214Y3NyKTsKLQlfX2Vudi5fX214Y3NyICY9IH5fX2V4Y2VwdHM7Ci0JX19sZG14Y3NyKF9fZW52Ll9fbXhjc3IpOwotCXJldHVybiAoMCk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZSBpbnQKLWZlZ2V0ZXhjZXB0ZmxhZyhmZXhjZXB0X3QgKl9fZmxhZ3AsIGludCBfX2V4Y2VwdHMpCi17Ci0JaW50IF9fbXhjc3IsIF9fc3RhdHVzOwotCi0JX19zdG14Y3NyKCZfX214Y3NyKTsKLQlfX2Zuc3RzdygmX19zdGF0dXMpOwotCSpfX2ZsYWdwID0gKF9fbXhjc3IgfCBfX3N0YXR1cykgJiBfX2V4Y2VwdHM7Ci0JcmV0dXJuICgwKTsKLX0KLQotaW50IGZlc2V0ZXhjZXB0ZmxhZyhjb25zdCBmZXhjZXB0X3QgKl9fZmxhZ3AsIGludCBfX2V4Y2VwdHMpOwotaW50IGZlcmFpc2VleGNlcHQoaW50IF9fZXhjZXB0cyk7Ci0KLXN0YXRpYyBfX2lubGluZSBpbnQKLWZldGVzdGV4Y2VwdChpbnQgX19leGNlcHRzKQotewotCWludCBfX214Y3NyLCBfX3N0YXR1czsKLQotCV9fc3RteGNzcigmX19teGNzcik7Ci0JX19mbnN0c3coJl9fc3RhdHVzKTsKLQlyZXR1cm4gKChfX3N0YXR1cyB8IF9fbXhjc3IpICYgX19leGNlcHRzKTsKLX0KLQotc3RhdGljIF9faW5saW5lIGludAotZmVnZXRyb3VuZCh2b2lkKQotewotCWludCBfX2NvbnRyb2w7Ci0KLQkvKgotCSAqIFdlIGFzc3VtZSB0aGF0IHRoZSB4ODcgYW5kIHRoZSBTU0UgdW5pdCBhZ3JlZSBvbiB0aGUKLQkgKiByb3VuZGluZyBtb2RlLiAgUmVhZGluZyB0aGUgY29udHJvbCB3b3JkIG9uIHRoZSB4ODcgdHVybnMKLQkgKiBvdXQgdG8gYmUgYWJvdXQgNSB0aW1lcyBmYXN0ZXIgdGhhbiByZWFkaW5nIGl0IG9uIHRoZSBTU0UKLQkgKiB1bml0IG9uIGFuIE9wdGVyb24gMjQ0LgotCSAqLwotCV9fZm5zdGN3KCZfX2NvbnRyb2wpOwotCXJldHVybiAoX19jb250cm9sICYgX1JPVU5EX01BU0spOwotfQotCi1zdGF0aWMgX19pbmxpbmUgaW50Ci1mZXNldHJvdW5kKGludCBfX3JvdW5kKQotewotCWludCBfX214Y3NyLCBfX2NvbnRyb2w7Ci0KLQlpZiAoX19yb3VuZCAmIH5fUk9VTkRfTUFTSykKLQkJcmV0dXJuICgtMSk7Ci0KLQlfX2Zuc3RjdygmX19jb250cm9sKTsKLQlfX2NvbnRyb2wgJj0gfl9ST1VORF9NQVNLOwotCV9fY29udHJvbCB8PSBfX3JvdW5kOwotCV9fZmxkY3coX19jb250cm9sKTsKLQotCV9fc3RteGNzcigmX19teGNzcik7Ci0JX19teGNzciAmPSB+KF9ST1VORF9NQVNLIDw8IF9TU0VfUk9VTkRfU0hJRlQpOwotCV9fbXhjc3IgfD0gX19yb3VuZCA8PCBfU1NFX1JPVU5EX1NISUZUOwotCV9fbGRteGNzcihfX214Y3NyKTsKLQotCXJldHVybiAoMCk7Ci19Ci0KLWludCBmZWdldGVudihmZW52X3QgKl9fZW52cCk7Ci1pbnQgZmVob2xkZXhjZXB0KGZlbnZfdCAqX19lbnZwKTsKLQotc3RhdGljIF9faW5saW5lIGludAotZmVzZXRlbnYoY29uc3QgZmVudl90ICpfX2VudnApCi17Ci0KLQlfX2ZsZGVudihfX2VudnAtPl9feDg3KTsKLQlfX2xkbXhjc3IoX19lbnZwLT5fX214Y3NyKTsKLQlyZXR1cm4gKDApOwotfQotCi1pbnQgZmV1cGRhdGVlbnYoY29uc3QgZmVudl90ICpfX2VudnApOwotCi0jaWYgX19CU0RfVklTSUJMRQotCi1pbnQgZmVlbmFibGVleGNlcHQoaW50IF9fbWFzayk7Ci1pbnQgZmVkaXNhYmxlZXhjZXB0KGludCBfX21hc2spOwotCi1zdGF0aWMgX19pbmxpbmUgaW50Ci1mZWdldGV4Y2VwdCh2b2lkKQotewotCWludCBfX2NvbnRyb2w7Ci0KLQkvKgotCSAqIFdlIGFzc3VtZSB0aGF0IHRoZSBtYXNrcyBmb3IgdGhlIHg4NyBhbmQgdGhlIFNTRSB1bml0IGFyZQotCSAqIHRoZSBzYW1lLgotCSAqLwotCV9fZm5zdGN3KCZfX2NvbnRyb2wpOwotCXJldHVybiAofl9fY29udHJvbCAmIEZFX0FMTF9FWENFUFQpOwotfQotCi0jZW5kaWYgLyogX19CU0RfVklTSUJMRSAqLwotCi1fX0VORF9ERUNMUwotCi0jZW5kaWYJLyogIV9GRU5WX0hfICovCmRpZmYgLS1naXQgYS9saWJtL2FtZDY0L3NfbGxyaW50LlMgYi9saWJtL2FtZDY0L3NfbGxyaW50LlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI4MWM3M2EuLjAwMDAwMDAKLS0tIGEvbGlibS9hbWQ2NC9zX2xscmludC5TCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi0jaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KLV9fRkJTRElEKCIkRnJlZUJTRDogc3JjL2xpYi9tc3VuL2FtZDY0L3NfbGxyaW50LlMsdiAxLjEgMjAwNS8wMS8xNSAwMzozMjoyOCBkYXMgRXhwICQiKQotCQotLyogc2l6ZW9mKGxvbmcpID09IHNpemVvZihsb25nIGxvbmcpICovCi0jZGVmaW5lCWZuCWxscmludAotI2luY2x1ZGUgInNfbHJpbnQuUyIKZGlmZiAtLWdpdCBhL2xpYm0vYW1kNjQvc19sbHJpbnRmLlMgYi9saWJtL2FtZDY0L3NfbGxyaW50Zi5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNjJjZmNiLi4wMDAwMDAwCi0tLSBhL2xpYm0vYW1kNjQvc19sbHJpbnRmLlMKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLSNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgotX19GQlNESUQoIiRGcmVlQlNEOiBzcmMvbGliL21zdW4vYW1kNjQvc19sbHJpbnRmLlMsdiAxLjEgMjAwNS8wNC8xNiAyMToxMjo1NSBkYXMgRXhwICQiKQotCQotLyogc2l6ZW9mKGxvbmcpID09IHNpemVvZihsb25nIGxvbmcpICovCi0jZGVmaW5lCWZuCWxscmludGYKLSNpbmNsdWRlICJzX2xyaW50Zi5TIgpkaWZmIC0tZ2l0IGEvbGlibS9hbWQ2NC9zX2xyaW50LlMgYi9saWJtL2FtZDY0L3NfbHJpbnQuUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTYxYjczMS4uMDAwMDAwMAotLS0gYS9saWJtL2FtZDY0L3NfbHJpbnQuUworKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLS8qLQotICogQ29weXJpZ2h0IChjKSAyMDA1IERhdmlkIFNjaHVsdHogPGRhc0BGcmVlQlNELk9SRz4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+Ci0KLSNpZm5kZWYgZm4KLV9fRkJTRElEKCIkRnJlZUJTRDogc3JjL2xpYi9tc3VuL2FtZDY0L3NfbHJpbnQuUyx2IDEuMSAyMDA1LzAxLzE1IDAzOjMyOjI4IGRhcyBFeHAgJCIpCi0jZGVmaW5lCWZuCWxyaW50Ci0jZW5kaWYKLQotRU5UUlkoZm4pCi0JY3Z0c2Qyc2kgJXhtbTAsICVyYXgKLQlyZXQKZGlmZiAtLWdpdCBhL2xpYm0vYW1kNjQvc19scmludGYuUyBiL2xpYm0vYW1kNjQvc19scmludGYuUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTA2ZTgzNC4uMDAwMDAwMAotLS0gYS9saWJtL2FtZDY0L3NfbHJpbnRmLlMKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi0vKi0KLSAqIENvcHlyaWdodCAoYykgMjAwNSBEYXZpZCBTY2h1bHR6IDxkYXNARnJlZUJTRC5PUkc+Ci0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgotCi0jaWZuZGVmIGZuCi1fX0ZCU0RJRCgiJEZyZWVCU0Q6IHNyYy9saWIvbXN1bi9hbWQ2NC9zX2xyaW50Zi5TLHYgMS4xIDIwMDUvMDQvMTYgMjE6MTI6NTUgZGFzIEV4cCAkIikKLSNkZWZpbmUJZm4JbHJpbnRmCi0jZW5kaWYKLQotRU5UUlkoZm4pCi0JY3Z0c3Myc2kgJXhtbTAsICVyYXgKLQlyZXQKZGlmZiAtLWdpdCBhL2xpYm0vYW1kNjQvc19yZW1xdW8uUyBiL2xpYm0vYW1kNjQvc19yZW1xdW8uUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTlmM2I1My4uMDAwMDAwMAotLS0gYS9saWJtL2FtZDY0L3NfcmVtcXVvLlMKKysrIC9kZXYvbnVsbApAQCAtMSw2NSArMCwwIEBACi0vKi0KLSAqIENvcHlyaWdodCAoYykgMjAwNSBEYXZpZCBTY2h1bHR6IDxkYXNARnJlZUJTRC5PUkc+Ci0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLS8qCi0gKiBCYXNlZCBvbiBwdWJsaWMtZG9tYWluIHJlbWFpbmRlciByb3V0aW5lIGJ5IEouVC4gQ29ua2xpbiA8anRjQE5ldEJTRC5vcmc+LgotICovCi0KLSNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgotX19GQlNESUQoIiRGcmVlQlNEOiBzcmMvbGliL21zdW4vYW1kNjQvc19yZW1xdW8uUyx2IDEuMSAyMDA1LzAzLzI1IDA0OjQwOjQ0IGRhcyBFeHAgJCIpOyAKLQkKLUVOVFJZKHJlbXF1bykKLQltb3ZzZAkleG1tMCwtOCglcnNwKQotCW1vdnNkCSV4bW0xLC0xNiglcnNwKQotCWZsZGwJLTE2KCVyc3ApCi0JZmxkbAktOCglcnNwKQotMToJZnByZW0xCi0JZnN0c3cJJWF4Ci0JYnR3CSQxMCwlYXgKLQlqYwkxYgotCWZzdHAJJXN0KDEpCi0vKiBFeHRyYWN0IHRoZSB0aHJlZSBsb3ctb3JkZXIgYml0cyBvZiB0aGUgcXVvdGllbnQgZnJvbSBDMCxDMyxDMS4gKi8KLQlzaHJsCSQ2LCVlYXgKLQltb3ZsCSVlYXgsJWVjeAotCWFuZGwJJDB4MTA4LCVlYXgKLQlyb3JsCSQ3LCVlYXgKLQlvcmwJJWVheCwlZWN4Ci0Jcm9sbAkkNCwlZWF4Ci0Jb3JsCSVlY3gsJWVheAotCWFuZGwJJDcsJWVheAotLyogTmVnYXRlIHRoZSBxdW90aWVudCBiaXRzIGlmIHgqeTwwLiAgQXZvaWQgdXNpbmcgYW4gdW5wcmVkaWN0YWJsZSBicmFuY2guICovCi0JbW92bAktMTIoJXJzcCksJWVjeAotCXhvcmwJLTQoJXJzcCksJWVjeAotCXNhcmwJJDE2LCVlY3gKLQlzYXJsCSQxNiwlZWN4Ci0JeG9ybAklZWN4LCVlYXgKLQlhbmRsCSQxLCVlY3gKLQlhZGRsCSVlY3gsJWVheAotLyogU3RvcmUgdGhlIHF1b3RpZW50IGFuZCByZXR1cm4uICovCi0JbW92bAklZWF4LCglcmRpKQotCWZzdHBsCS04KCVyc3ApCi0JbW92c2QJLTgoJXJzcCksJXhtbTAKLQlyZXQKZGlmZiAtLWdpdCBhL2xpYm0vYW1kNjQvc19yZW1xdW9mLlMgYi9saWJtL2FtZDY0L3NfcmVtcXVvZi5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMmI2MDRmLi4wMDAwMDAwCi0tLSBhL2xpYm0vYW1kNjQvc19yZW1xdW9mLlMKKysrIC9kZXYvbnVsbApAQCAtMSw2NSArMCwwIEBACi0vKi0KLSAqIENvcHlyaWdodCAoYykgMjAwNSBEYXZpZCBTY2h1bHR6IDxkYXNARnJlZUJTRC5PUkc+Ci0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLS8qCi0gKiBCYXNlZCBvbiBwdWJsaWMtZG9tYWluIHJlbWFpbmRlciByb3V0aW5lIGJ5IEouVC4gQ29ua2xpbiA8anRjQE5ldEJTRC5vcmc+LgotICovCi0KLSNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgotX19GQlNESUQoIiRGcmVlQlNEOiBzcmMvbGliL21zdW4vYW1kNjQvc19yZW1xdW9mLlMsdiAxLjEgMjAwNS8wMy8yNSAwNDo0MDo0NCBkYXMgRXhwICQiKTsgCi0JCi1FTlRSWShyZW1xdW9mKQotCW1vdnNzCSV4bW0wLC00KCVyc3ApCi0JbW92c3MJJXhtbTEsLTgoJXJzcCkKLQlmbGRzCS04KCVyc3ApCi0JZmxkcwktNCglcnNwKQotMToJZnByZW0xCi0JZnN0c3cJJWF4Ci0JYnR3CSQxMCwlYXgKLQlqYwkxYgotCWZzdHAJJXN0KDEpCi0vKiBFeHRyYWN0IHRoZSB0aHJlZSBsb3ctb3JkZXIgYml0cyBvZiB0aGUgcXVvdGllbnQgZnJvbSBDMCxDMyxDMS4gKi8KLQlzaHJsCSQ2LCVlYXgKLQltb3ZsCSVlYXgsJWVjeAotCWFuZGwJJDB4MTA4LCVlYXgKLQlyb3JsCSQ3LCVlYXgKLQlvcmwJJWVheCwlZWN4Ci0Jcm9sbAkkNCwlZWF4Ci0Jb3JsCSVlY3gsJWVheAotCWFuZGwJJDcsJWVheAotLyogTmVnYXRlIHRoZSBxdW90aWVudCBiaXRzIGlmIHgqeTwwLiAgQXZvaWQgdXNpbmcgYW4gdW5wcmVkaWN0YWJsZSBicmFuY2guICovCi0JbW92bAktOCglcnNwKSwlZWN4Ci0JeG9ybAktNCglcnNwKSwlZWN4Ci0Jc2FybAkkMTYsJWVjeAotCXNhcmwJJDE2LCVlY3gKLQl4b3JsCSVlY3gsJWVheAotCWFuZGwJJDEsJWVjeAotCWFkZGwJJWVjeCwlZWF4Ci0vKiBTdG9yZSB0aGUgcXVvdGllbnQgYW5kIHJldHVybi4gKi8KLQltb3ZsCSVlYXgsKCVyZGkpCi0JZnN0cHMJLTQoJXJzcCkKLQltb3ZzcwktNCglcnNwKSwleG1tMAotCXJldApkaWZmIC0tZ2l0IGEvbGlibS9hbWQ2NC9zX3NjYWxibi5TIGIvbGlibS9hbWQ2NC9zX3NjYWxibi5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2OTQyZTE4Li4wMDAwMDAwCi0tLSBhL2xpYm0vYW1kNjQvc19zY2FsYm4uUworKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLS8qLQotICogQ29weXJpZ2h0IChjKSAyMDA1IERhdmlkIFNjaHVsdHogPGRhc0BGcmVlQlNELk9SRz4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+Ci1fX0ZCU0RJRCgiJEZyZWVCU0Q6IHNyYy9saWIvbXN1bi9hbWQ2NC9zX3NjYWxibi5TLHYgMS4xIDIwMDUvMDQvMTYgMjE6MTI6NTUgZGFzIEV4cCAkIikKLQotRU5UUlkoc2NhbGJuKQotCW1vdnNkCSV4bW0wLC04KCVyc3ApCi0JbW92bAklZWRpLC0xMiglcnNwKQotCWZpbGRsCS0xMiglcnNwKQotCWZsZGwJLTgoJXJzcCkKLQlmc2NhbGUKLQlmc3RwCSVzdCgxKQotCWZzdHBsCS04KCVyc3ApCi0JbW92c2QJLTgoJXJzcCksJXhtbTAKLQlyZXQKZGlmZiAtLWdpdCBhL2xpYm0vYW1kNjQvc19zY2FsYm5mLlMgYi9saWJtL2FtZDY0L3Nfc2NhbGJuZi5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkN2I5YWI3Li4wMDAwMDAwCi0tLSBhL2xpYm0vYW1kNjQvc19zY2FsYm5mLlMKKysrIC9kZXYvbnVsbApAQCAtMSw0MiArMCwwIEBACi0vKi0KLSAqIENvcHlyaWdodCAoYykgMjAwNSBEYXZpZCBTY2h1bHR6IDxkYXNARnJlZUJTRC5PUkc+Ci0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgotX19GQlNESUQoIiRGcmVlQlNEOiBzcmMvbGliL21zdW4vYW1kNjQvc19zY2FsYm5mLlMsdiAxLjIgMjAwNS8wOS8xMiAyMDo1NDowMCBkYXMgRXhwICQiKQotCi1FTlRSWShzY2FsYm5mKQotCW1vdnNzCSV4bW0wLC04KCVyc3ApCi0JbW92bAklZWRpLC00KCVyc3ApCi0JZmlsZGwJLTQoJXJzcCkKLQlmbGRzCS04KCVyc3ApCi0JZnNjYWxlCi0JZnN0cAklc3QoMSkKLQlmc3RwcwktOCglcnNwKQotCW1vdnNzCS04KCVyc3ApLCV4bW0wCi0JcmV0Ci0KLS5nbG9ibCBDTkFNRShsZGV4cGYpCi0uc2V0CUNOQU1FKGxkZXhwZiksQ05BTUUoc2NhbGJuZikKZGlmZiAtLWdpdCBhL2xpYm0vYW1kNjQvc19zY2FsYm5sLlMgYi9saWJtL2FtZDY0L3Nfc2NhbGJubC5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NzYyOWE0Li4wMDAwMDAwCi0tLSBhL2xpYm0vYW1kNjQvc19zY2FsYm5sLlMKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi0vKgotICogQmFzZWQgb24gY29kZSB3cml0dGVuIGJ5IEouVC4gQ29ua2xpbiA8anRjQG5ldGJzZC5vcmc+LgotICogUHVibGljIGRvbWFpbi4KLSAqLwotCi0jaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KLV9fRkJTRElEKCIkRnJlZUJTRDogc3JjL2xpYi9tc3VuL2FtZDY0L3Nfc2NhbGJubC5TLHYgMS4xIDIwMDUvMDQvMTYgMjE6MTI6NTUgZGFzIEV4cCAkIikKLS8qIFJDU0lEKCIkTmV0QlNEOiBzX3NjYWxibmYuUyx2IDEuNCAxOTk5LzAxLzAyIDA1OjE1OjQwIGtyaXN0ZXJ3IEV4cCAkIikgKi8KLQotRU5UUlkoc2NhbGJubCkKLQltb3ZsCSVlZGksLTQoJXJzcCkKLQlmaWxkbAktNCglcnNwKQotCWZsZHQJOCglcnNwKQotCWZzY2FsZQotCWZzdHAJJXN0KDEpCi0JcmV0Ci0KLS5nbG9ibAlDTkFNRShsZGV4cGwpCi0uc2V0CUNOQU1FKGxkZXhwbCksQ05BTUUoc2NhbGJubCkKZGlmZiAtLWdpdCBhL2xpYm0vYXJtL01ha2VmaWxlLmluYyBiL2xpYm0vYXJtL01ha2VmaWxlLmluYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjU1OWNjMy4uMDAwMDAwMAotLS0gYS9saWJtL2FybS9NYWtlZmlsZS5pbmMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSMgJEZyZWVCU0Q6IHNyYy9saWIvbXN1bi9hcm0vTWFrZWZpbGUuaW5jLHYgMS4xIDIwMDUvMDMvMDcgMDQ6NTM6MzUgZGFzIEV4cCAkCi0KLUxEQkxfUFJFQyA9IDUzCmRpZmYgLS1naXQgYS9saWJtL2FybS9fZnBtYXRoLmggYi9saWJtL2FybS9fZnBtYXRoLmgKaW5kZXggNzllNDM0Ni4uNGMxODk0NSAxMDA2NDQKLS0tIGEvbGlibS9hcm0vX2ZwbWF0aC5oCisrKyBiL2xpYm0vYXJtL19mcG1hdGguaApAQCAtMjMsMTggKzIzLDI5IEBACiAgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCiAgKiBTVUNIIERBTUFHRS4KICAqCi0gKiAkRnJlZUJTRDogc3JjL2xpYi9saWJjL2FybS9fZnBtYXRoLmgsdiAxLjQgMjAwNS8wMy8yMCAwMDo1Mzo1MiBjb2duZXQgRXhwICQKKyAqICRGcmVlQlNEJAogICovCiAKKyNpZiBkZWZpbmVkKF9fVkZQX0ZQX18pCisjZGVmaW5lCV9JRUVFX1dPUkRfT1JERVIJX0JZVEVfT1JERVIKKyNlbHNlCisjZGVmaW5lCV9JRUVFX1dPUkRfT1JERVIJX0JJR19FTkRJQU4KKyNlbmRpZgorCiB1bmlvbiBJRUVFbDJiaXRzIHsKIAlsb25nIGRvdWJsZQllOwogCXN0cnVjdCB7Ci0jaWZuZGVmIF9fQVJNRUJfXworI2lmIF9CWVRFX09SREVSID09IF9MSVRUTEVfRU5ESUFOCisjaWYgX0lFRUVfV09SRF9PUkRFUiA9PSBfTElUVExFX0VORElBTgogCQl1bnNpZ25lZCBpbnQJbWFubAk6MzI7CisjZW5kaWYKIAkJdW5zaWduZWQgaW50CW1hbmgJOjIwOwogCQl1bnNpZ25lZCBpbnQJZXhwCToxMTsKIAkJdW5zaWduZWQgaW50CXNpZ24JOjE7Ci0jZWxzZQorI2lmIF9JRUVFX1dPUkRfT1JERVIgPT0gX0JJR19FTkRJQU4KKwkJdW5zaWduZWQgaW50CW1hbmwJOjMyOworI2VuZGlmCisjZWxzZQkvKiBfQllURV9PUkRFUiA9PSBfTElUVExFX0VORElBTiAqLwogCQl1bnNpZ25lZCBpbnQJCXNpZ24JOjE7CiAJCXVuc2lnbmVkIGludAkJZXhwCToxMTsKIAkJdW5zaWduZWQgaW50CQltYW5oCToyMDsKQEAgLTQ0LDkgKzU1LDEwIEBACiB9OwogCiAjZGVmaW5lCUxEQkxfTkJJVAkwCisjZGVmaW5lCUxEQkxfSU1QTElDSVRfTkJJVAogI2RlZmluZQltYXNrX25iaXRfbCh1KQkoKHZvaWQpMCkKIAotI2RlZmluZQlMREJMX01BTkhfU0laRQkzMgorI2RlZmluZQlMREJMX01BTkhfU0laRQkyMAogI2RlZmluZQlMREJMX01BTkxfU0laRQkzMgogCiAjZGVmaW5lCUxEQkxfVE9fQVJSQVkzMih1LCBhKSBkbyB7CQkJXApkaWZmIC0tZ2l0IGEvbGlibS9hcm0vZmVudi5oIGIvbGlibS9hcm0vZmVudi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OTNhNTk2Li4wMDAwMDAwCi0tLSBhL2xpYm0vYXJtL2ZlbnYuaAorKysgL2Rldi9udWxsCkBAIC0xLDIxNyArMCwwIEBACi0vKi0KLSAqIENvcHlyaWdodCAoYykgMjAwNC0yMDA1IERhdmlkIFNjaHVsdHogPGRhc0BGcmVlQlNELk9SRz4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKgotICogJEZyZWVCU0Q6IHNyYy9saWIvbXN1bi9hcm0vZmVudi5oLHYgMS41IDIwMDUvMDMvMTYgMTk6MDM6NDUgZGFzIEV4cCAkCi0gKi8KLQotI2lmbmRlZglfRkVOVl9IXwotI2RlZmluZQlfRkVOVl9IXwotCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0KLXR5cGVkZWYJdWludDMyX3QJZmVudl90OwotdHlwZWRlZgl1aW50MzJfdAlmZXhjZXB0X3Q7Ci0KLS8qIEV4Y2VwdGlvbiBmbGFncyAqLwotI2RlZmluZQlGRV9JTlZBTElECTB4MDAwMQotI2RlZmluZQlGRV9ESVZCWVpFUk8JMHgwMDAyCi0jZGVmaW5lCUZFX09WRVJGTE9XCTB4MDAwNAotI2RlZmluZQlGRV9VTkRFUkZMT1cJMHgwMDA4Ci0jZGVmaW5lCUZFX0lORVhBQ1QJMHgwMDEwCi0jZGVmaW5lCUZFX0FMTF9FWENFUFQJKEZFX0RJVkJZWkVSTyB8IEZFX0lORVhBQ1QgfCBcCi0JCQkgRkVfSU5WQUxJRCB8IEZFX09WRVJGTE9XIHwgRkVfVU5ERVJGTE9XKQotCi0vKiBSb3VuZGluZyBtb2RlcyAqLwotI2RlZmluZQlGRV9UT05FQVJFU1QJMHgwMDAwCi0jZGVmaW5lCUZFX1RPV0FSRFpFUk8JMHgwMDAxCi0jZGVmaW5lCUZFX1VQV0FSRAkweDAwMDIKLSNkZWZpbmUJRkVfRE9XTldBUkQJMHgwMDAzCi0jZGVmaW5lCV9ST1VORF9NQVNLCShGRV9UT05FQVJFU1QgfCBGRV9ET1dOV0FSRCB8IFwKLQkJCSBGRV9VUFdBUkQgfCBGRV9UT1dBUkRaRVJPKQotLyogX19CRUdJTl9ERUNMUyAqLwotCi0vKiBEZWZhdWx0IGZsb2F0aW5nLXBvaW50IGVudmlyb25tZW50ICovCi1leHRlcm4gY29uc3QgZmVudl90CV9fZmVfZGZsX2VudjsKLSNkZWZpbmUJRkVfREZMX0VOVgkoJl9fZmVfZGZsX2VudikKLQotLyogV2UgbmVlZCB0byBiZSBhYmxlIHRvIG1hcCBzdGF0dXMgZmxhZyBwb3NpdGlvbnMgdG8gbWFzayBmbGFnIHBvc2l0aW9ucyAqLwotI2RlZmluZSBfRlBVU1dfU0hJRlQJMTYKLSNkZWZpbmUJX0VOQUJMRV9NQVNLCShGRV9BTExfRVhDRVBUIDw8IF9GUFVTV19TSElGVCkKLQotI2lmZGVmCUFSTV9IQVJEX0ZMT0FUCi0jZGVmaW5lCV9fcmZzKF9fZnBzcikJX19hc20gX192b2xhdGlsZSgicmZzICUwIiA6ICI9ciIgKCooX19mcHNyKSkpCi0jZGVmaW5lCV9fd2ZzKF9fZnBzcikJX19hc20gX192b2xhdGlsZSgid2ZzICUwIiA6IDogInIiIChfX2Zwc3IpKQotI2Vsc2UKLSNkZWZpbmUgX19yZnMoX19mcHNyKQotI2RlZmluZSBfX3dmcyhfX2Zwc3IpCi0jZW5kaWYKLQotc3RhdGljIF9faW5saW5lIGludAotZmVjbGVhcmV4Y2VwdChpbnQgX19leGNlcHRzKQotewotCWZleGNlcHRfdCBfX2Zwc3I7Ci0KLQlfX3JmcygmX19mcHNyKTsKLQlfX2Zwc3IgJj0gfl9fZXhjZXB0czsKLQlfX3dmcyhfX2Zwc3IpOwotCXJldHVybiAoMCk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZSBpbnQKLWZlZ2V0ZXhjZXB0ZmxhZyhmZXhjZXB0X3QgKl9fZmxhZ3AsIGludCBfX2V4Y2VwdHMpCi17Ci0JZmV4Y2VwdF90IF9fZnBzcjsKLQotCV9fcmZzKCZfX2Zwc3IpOwotCSpfX2ZsYWdwID0gX19mcHNyICYgX19leGNlcHRzOwotCXJldHVybiAoMCk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZSBpbnQKLWZlc2V0ZXhjZXB0ZmxhZyhjb25zdCBmZXhjZXB0X3QgKl9fZmxhZ3AsIGludCBfX2V4Y2VwdHMpCi17Ci0JZmV4Y2VwdF90IF9fZnBzcjsKLQotCV9fcmZzKCZfX2Zwc3IpOwotCV9fZnBzciAmPSB+X19leGNlcHRzOwotCV9fZnBzciB8PSAqX19mbGFncCAmIF9fZXhjZXB0czsKLQlfX3dmcyhfX2Zwc3IpOwotCXJldHVybiAoMCk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZSBpbnQKLWZlcmFpc2VleGNlcHQoaW50IF9fZXhjZXB0cykKLXsKLQlmZXhjZXB0X3QgX19leCA9IF9fZXhjZXB0czsKLQotCWZlc2V0ZXhjZXB0ZmxhZygmX19leCwgX19leGNlcHRzKTsJLyogWFhYICovCi0JcmV0dXJuICgwKTsKLX0KLQotc3RhdGljIF9faW5saW5lIGludAotZmV0ZXN0ZXhjZXB0KGludCBfX2V4Y2VwdHMpCi17Ci0JZmV4Y2VwdF90IF9fZnBzcjsKLQotCV9fcmZzKCZfX2Zwc3IpOwotCXJldHVybiAoX19mcHNyICYgX19leGNlcHRzKTsKLX0KLQotc3RhdGljIF9faW5saW5lIGludAotZmVnZXRyb3VuZCh2b2lkKQotewotCi0JLyoKLQkgKiBBcHBhcmVudGx5LCB0aGUgcm91bmRpbmcgbW9kZSBpcyBzcGVjaWZpZWQgYXMgcGFydCBvZiB0aGUKLQkgKiBpbnN0cnVjdGlvbiBmb3JtYXQgb24gQVJNLCBzbyB0aGUgZHluYW1pYyByb3VuZGluZyBtb2RlIGlzCi0JICogaW5kZXRlcm1pbmF0ZS4gIFNvbWUgRlBVcyBtYXkgZGlmZmVyLgotCSAqLwotCXJldHVybiAoLTEpOwotfQotCi1zdGF0aWMgX19pbmxpbmUgaW50Ci1mZXNldHJvdW5kKGludCBfX3JvdW5kKQotewotCi0JcmV0dXJuICgtMSk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZSBpbnQKLWZlZ2V0ZW52KGZlbnZfdCAqX19lbnZwKQotewotCi0JX19yZnMoX19lbnZwKTsKLQlyZXR1cm4gKDApOwotfQotCi1zdGF0aWMgX19pbmxpbmUgaW50Ci1mZWhvbGRleGNlcHQoZmVudl90ICpfX2VudnApCi17Ci0JZmVudl90IF9fZW52OwotCi0JX19yZnMoJl9fZW52KTsKLQkqX19lbnZwID0gX19lbnY7Ci0JX19lbnYgJj0gfihGRV9BTExfRVhDRVBUIHwgX0VOQUJMRV9NQVNLKTsKLQlfX3dmcyhfX2Vudik7Ci0JcmV0dXJuICgwKTsKLX0KLQotc3RhdGljIF9faW5saW5lIGludAotZmVzZXRlbnYoY29uc3QgZmVudl90ICpfX2VudnApCi17Ci0KLQlfX3dmcygqX19lbnZwKTsKLQlyZXR1cm4gKDApOwotfQotCi1zdGF0aWMgX19pbmxpbmUgaW50Ci1mZXVwZGF0ZWVudihjb25zdCBmZW52X3QgKl9fZW52cCkKLXsKLQlmZXhjZXB0X3QgX19mcHNyOwotCi0JX19yZnMoJl9fZnBzcik7Ci0JX193ZnMoKl9fZW52cCk7Ci0JZmVyYWlzZWV4Y2VwdChfX2Zwc3IgJiBGRV9BTExfRVhDRVBUKTsKLQlyZXR1cm4gKDApOwotfQotCi0jaWYgX19CU0RfVklTSUJMRQotCi1zdGF0aWMgX19pbmxpbmUgaW50Ci1mZWVuYWJsZWV4Y2VwdChpbnQgX19tYXNrKQotewotCWZlbnZfdCBfX29sZF9mcHNyLCBfX25ld19mcHNyOwotCi0JX19yZnMoJl9fb2xkX2Zwc3IpOwotCV9fbmV3X2Zwc3IgPSBfX29sZF9mcHNyIHwgKF9fbWFzayAmIEZFX0FMTF9FWENFUFQpIDw8IF9GUFVTV19TSElGVDsKLQlfX3dmcyhfX25ld19mcHNyKTsKLQlyZXR1cm4gKChfX29sZF9mcHNyID4+IF9GUFVTV19TSElGVCkgJiBGRV9BTExfRVhDRVBUKTsKLX0KLQotc3RhdGljIF9faW5saW5lIGludAotZmVkaXNhYmxlZXhjZXB0KGludCBfX21hc2spCi17Ci0JZmVudl90IF9fb2xkX2Zwc3IsIF9fbmV3X2Zwc3I7Ci0KLQlfX3JmcygmX19vbGRfZnBzcik7Ci0JX19uZXdfZnBzciA9IF9fb2xkX2Zwc3IgJiB+KChfX21hc2sgJiBGRV9BTExfRVhDRVBUKSA8PCBfRlBVU1dfU0hJRlQpOwotCV9fd2ZzKF9fbmV3X2Zwc3IpOwotCXJldHVybiAoKF9fb2xkX2Zwc3IgPj4gX0ZQVVNXX1NISUZUKSAmIEZFX0FMTF9FWENFUFQpOwotfQotCi1zdGF0aWMgX19pbmxpbmUgaW50Ci1mZWdldGV4Y2VwdCh2b2lkKQotewotCWZlbnZfdCBfX2Zwc3I7Ci0KLQlfX3JmcygmX19mcHNyKTsKLQlyZXR1cm4gKChfX2Zwc3IgJiBfRU5BQkxFX01BU0spID4+IF9GUFVTV19TSElGVCk7Ci19Ci0KLSNlbmRpZiAvKiBfX0JTRF9WSVNJQkxFICovCi0KLS8qIF9fRU5EX0RFQ0xTICovCi0KLSNlbmRpZgkvKiAhX0ZFTlZfSF8gKi8KZGlmZiAtLWdpdCBhL2xpYm0vYnNkc3JjL2JfZXhwLmMgYi9saWJtL2JzZHNyYy9iX2V4cC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMDdiYzg5Li4wMDAwMDAwCi0tLSBhL2xpYm0vYnNkc3JjL2JfZXhwLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNzcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykgMTk4NSwgMTk5MwotICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKLSAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKLSAqCVRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIFVuaXZlcnNpdHkgb2YKLSAqCUNhbGlmb3JuaWEsIEJlcmtlbGV5IGFuZCBpdHMgY29udHJpYnV0b3JzLgotICogNC4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIGxpbnQKLXN0YXRpYyBjaGFyIHNjY3NpZFtdID0gIkAoIylleHAuYwk4LjEgKEJlcmtlbGV5KSA2LzQvOTMiOwotI2VuZGlmIC8qIG5vdCBsaW50ICovCi0jaW5jbHVkZSA8c3lzL2NkZWZzLmg+Ci0vKiBfX0ZCU0RJRCgiJEZyZWVCU0Q6IHNyYy9saWIvbXN1bi9ic2RzcmMvYl9leHAuYyx2IDEuNyAyMDA0LzEyLzE2IDIwOjQwOjM3IGRhcyBFeHAgJCIpOyAqLwotCi0KLS8qIEVYUChYKQotICogUkVUVVJOIFRIRSBFWFBPTkVOVElBTCBPRiBYCi0gKiBET1VCTEUgUFJFQ0lTSU9OIChJRUVFIDUzIGJpdHMsIFZBWCBEIEZPUk1BVCA1NiBCSVRTKQotICogQ09ERUQgSU4gQyBCWSBLLkMuIE5HLCAxLzE5Lzg1OwotICogUkVWSVNFRCBCWSBLLkMuIE5HIG9uIDIvNi84NSwgMi8xNS84NSwgMy83Lzg1LCAzLzI0Lzg1LCA0LzE2Lzg1LCA2LzE0Lzg2LgotICoKLSAqIFJlcXVpcmVkIHN5c3RlbSBzdXBwb3J0ZWQgZnVuY3Rpb25zOgotICoJc2NhbGIoeCxuKQotICoJY29weXNpZ24oeCx5KQotICoJZmluaXRlKHgpCi0gKgotICogTWV0aG9kOgotICoJMS4gQXJndW1lbnQgUmVkdWN0aW9uOiBnaXZlbiB0aGUgaW5wdXQgeCwgZmluZCByIGFuZCBpbnRlZ2VyIGsgc3VjaAotICoJICAgdGhhdAotICoJICAgICAgICAgICAgICAgICAgIHggPSBrKmxuMiArIHIsICB8cnwgPD0gMC41KmxuMiAuCi0gKgkgICByIHdpbGwgYmUgcmVwcmVzZW50ZWQgYXMgciA6PSB6K2MgZm9yIGJldHRlciBhY2N1cmFjeS4KLSAqCi0gKgkyLiBDb21wdXRlIGV4cChyKSBieQotICoKLSAqCQlleHAocikgPSAxICsgciArIHIqUjEvKDItUjEpLAotICoJICAgd2hlcmUKLSAqCQlSMSA9IHggLSB4XjIqKHAxK3heMioocDIreF4yKihwMyt4XjIqKHA0K3A1KnheMikpKSkuCi0gKgotICoJMy4gZXhwKHgpID0gMl5rICogZXhwKHIpIC4KLSAqCi0gKiBTcGVjaWFsIGNhc2VzOgotICoJZXhwKElORikgaXMgSU5GLCBleHAoTmFOKSBpcyBOYU47Ci0gKglleHAoLUlORik9ICAwOwotICoJZm9yIGZpbml0ZSBhcmd1bWVudCwgb25seSBleHAoMCk9MSBpcyBleGFjdC4KLSAqCi0gKiBBY2N1cmFjeToKLSAqCWV4cCh4KSByZXR1cm5zIHRoZSBleHBvbmVudGlhbCBvZiB4IG5lYXJseSByb3VuZGVkLiBJbiBhIHRlc3QgcnVuCi0gKgl3aXRoIDEsMTU2LDAwMCByYW5kb20gYXJndW1lbnRzIG9uIGEgVkFYLCB0aGUgbWF4aW11bSBvYnNlcnZlZAotICoJZXJyb3Igd2FzIDAuODY5IHVscHMgKHVuaXRzIGluIHRoZSBsYXN0IHBsYWNlKS4KLSAqLwotCi0jaW5jbHVkZSAibWF0aGltcGwuaCIKLQotc3RhdGljIGNvbnN0IGRvdWJsZSBwMSA9IDB4MS41NTU1NTU1NTU1NTNlcC0zOwotc3RhdGljIGNvbnN0IGRvdWJsZSBwMiA9IC0weDEuNmMxNmMxNmJlYmQ5M3AtOTsKLXN0YXRpYyBjb25zdCBkb3VibGUgcDMgPSAweDEuMTU2NmFhZjI1ZGUyY3AtMTQ7Ci1zdGF0aWMgY29uc3QgZG91YmxlIHA0ID0gLTB4MS5iYmQ0MWM1ZDI2YmYxcC0yMDsKLXN0YXRpYyBjb25zdCBkb3VibGUgcDUgPSAweDEuNjM3Njk3MmJlYTRkMHAtMjU7Ci1zdGF0aWMgY29uc3QgZG91YmxlIGxuMmhpID0gMHgxLjYyZTQyZmVlMDAwMDBwLTE7Ci1zdGF0aWMgY29uc3QgZG91YmxlIGxuMmxvID0gMHgxLmEzOWVmMzU3OTNjNzZwLTMzOwotc3RhdGljIGNvbnN0IGRvdWJsZSBsbmh1Z2UgPSAweDEuNjYwMmIxNWI3ZWNmMnA5Owotc3RhdGljIGNvbnN0IGRvdWJsZSBsbnRpbnkgPSAtMHgxLjc3YWY4ZWJlYWUzNTRwOTsKLXN0YXRpYyBjb25zdCBkb3VibGUgaW52bG4yID0gMHgxLjcxNTQ3NjUyYjgyZmVwMDsKLQotI2lmIDAKLWRvdWJsZSBleHAoeCkKLWRvdWJsZSB4OwotewotCWRvdWJsZSAgeixoaSxsbyxjOwotCWludCBrOwotCi0jaWYgIWRlZmluZWQodmF4KSYmIWRlZmluZWQodGFob2UpCi0JaWYoeCE9eCkgcmV0dXJuKHgpOwkvKiB4IGlzIE5hTiAqLwotI2VuZGlmCS8qICFkZWZpbmVkKHZheCkmJiFkZWZpbmVkKHRhaG9lKSAqLwotCWlmKCB4IDw9IGxuaHVnZSApIHsKLQkJaWYoIHggPj0gbG50aW55ICkgewotCi0JCSAgICAvKiBhcmd1bWVudCByZWR1Y3Rpb24gOiB4IC0tPiB4IC0gaypsbjIgKi8KLQotCQkJaz1pbnZsbjIqeCtjb3B5c2lnbigwLjUseCk7CS8qIGs9TklOVCh4L2xuMikgKi8KLQotCQkgICAgLyogZXhwcmVzcyB4LWsqbG4yIGFzIGhpLWxvIGFuZCBsZXQgeD1oaS1sbyByb3VuZGVkICovCi0KLQkJCWhpPXgtaypsbjJoaTsKLQkJCXg9aGktKGxvPWsqbG4ybG8pOwotCi0JCSAgICAvKiByZXR1cm4gMl5rKlsxK3greCpjLygyK2MpXSAgKi8KLQkJCXo9eCp4OwotCQkJYz0geCAtIHoqKHAxK3oqKHAyK3oqKHAzK3oqKHA0K3oqcDUpKSkpOwotCQkJcmV0dXJuICBzY2FsYigxLjArKGhpLShsby0oeCpjKS8oMi4wLWMpKSksayk7Ci0KLQkJfQotCQkvKiBlbmQgb2YgeCA+IGxudGlueSAqLwotCi0JCWVsc2UKLQkJICAgICAvKiBleHAoLWJpZyMpIHVuZGVyZmxvd3MgdG8gemVybyAqLwotCQkgICAgIGlmKGZpbml0ZSh4KSkgIHJldHVybihzY2FsYigxLjAsLTUwMDApKTsKLQotCQkgICAgIC8qIGV4cCgtSU5GKSBpcyB6ZXJvICovCi0JCSAgICAgZWxzZSByZXR1cm4oMC4wKTsKLQl9Ci0JLyogZW5kIG9mIHggPCBsbmh1Z2UgKi8KLQotCWVsc2UKLQkvKiBleHAoSU5GKSBpcyBJTkYsIGV4cCgrYmlnIykgb3ZlcmZsb3dzIHRvIElORiAqLwotCSAgICByZXR1cm4oIGZpbml0ZSh4KSA/ICBzY2FsYigxLjAsNTAwMCkgIDogeCk7Ci19Ci0jZW5kaWYKLQotLyogcmV0dXJucyBleHAociA9IHggKyBjKSBmb3IgfGN8IDwgfHh8IHdpdGggbm8gb3ZlcmxhcC4gICovCi0KLWRvdWJsZSBfX2V4cF9fRCh4LCBjKQotZG91YmxlIHgsIGM7Ci17Ci0JZG91YmxlICB6LGhpLGxvOwotCWludCBrOwotCi0JaWYgKHggIT0geCkJLyogeCBpcyBOYU4gKi8KLQkJcmV0dXJuKHgpOwotCWlmICggeCA8PSBsbmh1Z2UgKSB7Ci0JCWlmICggeCA+PSBsbnRpbnkgKSB7Ci0KLQkJICAgIC8qIGFyZ3VtZW50IHJlZHVjdGlvbiA6IHggLS0+IHggLSBrKmxuMiAqLwotCQkJeiA9IGludmxuMip4OwotCQkJayA9IHogKyBjb3B5c2lnbiguNSwgeCk7Ci0KLQkJICAgIC8qIGV4cHJlc3MgKHgrYyktaypsbjIgYXMgaGktbG8gYW5kIGxldCB4PWhpLWxvIHJvdW5kZWQgKi8KLQotCQkJaGk9KHgtaypsbjJoaSk7CQkJLyogRXhhY3QuICovCi0JCQl4PSBoaSAtIChsbyA9IGsqbG4ybG8tYyk7Ci0JCSAgICAvKiByZXR1cm4gMl5rKlsxK3greCpjLygyK2MpXSAgKi8KLQkJCXo9eCp4OwotCQkJYz0geCAtIHoqKHAxK3oqKHAyK3oqKHAzK3oqKHA0K3oqcDUpKSkpOwotCQkJYyA9ICh4KmMpLygyLjAtYyk7Ci0KLQkJCXJldHVybiAgc2NhbGIoMS4rKGhpLShsbyAtIGMpKSwgayk7Ci0JCX0KLQkJLyogZW5kIG9mIHggPiBsbnRpbnkgKi8KLQotCQllbHNlCi0JCSAgICAgLyogZXhwKC1iaWcjKSB1bmRlcmZsb3dzIHRvIHplcm8gKi8KLQkJICAgICBpZihmaW5pdGUoeCkpICByZXR1cm4oc2NhbGIoMS4wLC01MDAwKSk7Ci0KLQkJICAgICAvKiBleHAoLUlORikgaXMgemVybyAqLwotCQkgICAgIGVsc2UgcmV0dXJuKDAuMCk7Ci0JfQotCS8qIGVuZCBvZiB4IDwgbG5odWdlICovCi0KLQllbHNlCi0JLyogZXhwKElORikgaXMgSU5GLCBleHAoK2JpZyMpIG92ZXJmbG93cyB0byBJTkYgKi8KLQkgICAgcmV0dXJuKCBmaW5pdGUoeCkgPyAgc2NhbGIoMS4wLDUwMDApICA6IHgpOwotfQpkaWZmIC0tZ2l0IGEvbGlibS9ic2RzcmMvYl9sb2cuYyBiL2xpYm0vYnNkc3JjL2JfbG9nLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ0ZTVmNjUuLjAwMDAwMDAKLS0tIGEvbGlibS9ic2RzcmMvYl9sb2cuYworKysgL2Rldi9udWxsCkBAIC0xLDQ3MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChjKSAxOTkyLCAxOTkzCi0gKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQotICogICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgotICoJVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgVW5pdmVyc2l0eSBvZgotICoJQ2FsaWZvcm5pYSwgQmVya2VsZXkgYW5kIGl0cyBjb250cmlidXRvcnMuCi0gKiA0LiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0gKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgbGludAotc3RhdGljIGNoYXIgc2Njc2lkW10gPSAiQCgjKWxvZy5jCTguMiAoQmVya2VsZXkpIDExLzMwLzkzIjsKLSNlbmRpZiAvKiBub3QgbGludCAqLwotI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgotLyogX19GQlNESUQoIiRGcmVlQlNEOiBzcmMvbGliL21zdW4vYnNkc3JjL2JfbG9nLmMsdiAxLjggMjAwNS8wOS8xOSAxMToyODoxOSBiZGUgRXhwICQiKTsgKi8KLQotI2luY2x1ZGUgPG1hdGguaD4KLSNpbmNsdWRlIDxlcnJuby5oPgotCi0jaW5jbHVkZSAibWF0aGltcGwuaCIKLQotLyogVGFibGUtZHJpdmVuIG5hdHVyYWwgbG9nYXJpdGhtLgotICoKLSAqIFRoaXMgY29kZSB3YXMgZGVyaXZlZCwgd2l0aCBtaW5vciBtb2RpZmljYXRpb25zLCBmcm9tOgotICoJUGV0ZXIgVGFuZywgIlRhYmxlLURyaXZlbiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUKLSAqCUxvZ2FyaXRobSBpbiBJRUVFIEZsb2F0aW5nLVBvaW50IGFyaXRobWV0aWMuIiBBQ00gVHJhbnMuCi0gKglNYXRoIFNvZnR3YXJlLCB2b2wgMTYuIG5vIDQsIHBwIDM3OC00MDAsIERlYyAxOTkwKS4KLSAqCi0gKiBDYWxjdWxhdGVzIGxvZygyXm0qRiooMStmL0YpKSwgfGYvanwgPD0gMS8yNTYsCi0gKiB3aGVyZSBGID0gai8xMjggZm9yIGogYW4gaW50ZWdlciBpbiBbMCwgMTI4XS4KLSAqCi0gKiBsb2coMl5tKSA9IGxvZzJfaGkqbSArIGxvZzJfdGFpbCptCi0gKiBzaW5jZSBtIGlzIGFuIGludGVnZXIsIHRoZSBkb21pbmFudCB0ZXJtIGlzIGV4YWN0LgotICogbSBoYXMgYXQgbW9zdCAxMCBkaWdpdHMgKGZvciBzdWJub3JtYWwgbnVtYmVycyksCi0gKiBhbmQgbG9nMl9oaSBoYXMgMTEgdHJhaWxpbmcgemVybyBiaXRzLgotICoKLSAqIGxvZyhGKSA9IGxvZ0ZfaGlbal0gKyBsb2dGX2xvW2pdIGlzIGluIHRhYnVsYXIgZm9ybSBpbiBsb2dfdGFibGUuaAotICogbG9nRl9oaVtdICsgNTEyIGlzIGV4YWN0LgotICoKLSAqIGxvZygxK2YvRikgPSAyKmYvKDIqRiArIGYpICsgMS8xMiAqICgyKmYvKDIqRiArIGYpKSoqMyArIC4uLgotICogdGhlIGxlYWRpbmcgdGVybSBpcyBjYWxjdWxhdGVkIHRvIGV4dHJhIHByZWNpc2lvbiBpbiB0d28KLSAqIHBhcnRzLCB0aGUgbGFyZ2VyIG9mIHdoaWNoIGFkZHMgZXhhY3RseSB0byB0aGUgZG9taW5hbnQKLSAqIG0gYW5kIEYgdGVybXMuCi0gKiBUaGVyZSBhcmUgdHdvIGNhc2VzOgotICoJMS4gd2hlbiBtLCBqIGFyZSBub24temVybyAobSB8IGopLCB1c2UgYWJzb2x1dGUKLSAqCSAgIHByZWNpc2lvbiBmb3IgdGhlIGxlYWRpbmcgdGVybS4KLSAqCTIuIHdoZW4gbSA9IGogPSAwLCB8MS14fCA8IDEvMjU2LCBhbmQgbG9nKHgpIH49ICh4LTEpLgotICoJICAgSW4gdGhpcyBjYXNlLCB1c2UgYSByZWxhdGl2ZSBwcmVjaXNpb24gb2YgMjQgYml0cy4KLSAqIChUaGlzIGlzIGRvbmUgZGlmZmVyZW50bHkgaW4gdGhlIG9yaWdpbmFsIHBhcGVyKQotICoKLSAqIFNwZWNpYWwgY2FzZXM6Ci0gKgkwCXJldHVybiBzaWduYWxsaW5nIC1JbmYKLSAqCW5lZwlyZXR1cm4gc2lnbmFsbGluZyBOYU4KLSAqCStJbmYJcmV0dXJuICtJbmYKLSovCi0KLSNkZWZpbmUgTiAxMjgKLQotLyogVGFibGUgb2YgbG9nKEZqKSA9IGxvZ0ZfaGVhZFtqXSArIGxvZ0ZfdGFpbFtqXSwgZm9yIEZqID0gMStqLzEyOC4KLSAqIFVzZWQgZm9yIGdlbmVyYXRpb24gb2YgZXh0ZW5kIHByZWNpc2lvbiBsb2dhcml0aG1zLgotICogVGhlIGNvbnN0YW50IDM1MTg0MzcyMDg4ODMyIGlzIDJeNDUsIHNvIHRoZSBkaXZpZGUgaXMgZXhhY3QuCi0gKiBJdCBlbnN1cmVzIGNvcnJlY3QgcmVhZGluZyBvZiBsb2dGX2hlYWQsIGV2ZW4gZm9yIGluYWNjdXJhdGUKLSAqIGRlY2ltYWwtdG8tYmluYXJ5IGNvbnZlcnNpb24gcm91dGluZXMuICAoRXZlcnlib2R5IGdldHMgdGhlCi0gKiByaWdodCBhbnN3ZXIgZm9yIGludGVnZXJzIGxlc3MgdGhhbiAyXjUzLikKLSAqIFZhbHVlcyBmb3IgbG9nKEYpIHdlcmUgZ2VuZXJhdGVkIHVzaW5nIGVycm9yIDwgMTBeLTU3IGFic29sdXRlCi0gKiB3aXRoIHRoZSBiYyAtbCBwYWNrYWdlLgotKi8KLXN0YXRpYyBkb3VibGUJQTEgPSAJICAuMDgzMzMzMzMzMzMzMzMxNzg4Mjc7Ci1zdGF0aWMgZG91YmxlCUEyID0gCSAgLjAxMjUwMDAwMDAwMzc3MTc0OTIzOwotc3RhdGljIGRvdWJsZQlBMyA9CSAuMDAyMjMyMTM5OTg3OTE5NDQ3ODA5Owotc3RhdGljIGRvdWJsZQlBNCA9CS4wMDA0MzQ4ODc3Nzc3MDc2MTQ1NzQyOwotCi1zdGF0aWMgZG91YmxlIGxvZ0ZfaGVhZFtOKzFdID0gewotCTAuLAotCS4wMDc3ODIxNDA0NDIwNjAzODEyNDYsCi0JLjAxNTUwNDE4NjUzNTk2MzUyNjY5NCwKLQkuMDIzMTY3MDU5MjgxNTQ3NjA4NDA2LAotCS4wMzA3NzE2NTg2NjY3NjUyMzM2NDcsCi0JLjAzODMxODg2NDMwMjE0MTI2NDQ4OCwKLQkuMDQ1ODA5NTM2MDMxMjQyNzE0NjcwLAotCS4wNTMyNDQ1MTQ1MTg4Mzc2MDQ1NTUsCi0JLjA2MDYyNDYyMTgxNjQ4Njk3ODc4NiwKLQkuMDY3OTUwNjYxOTA4NTI1OTQ0NDU0LAotCS4wNzUyMjM0MjEyMzc1MjQyMzUwMzksCi0JLjA4MjQ0MzY2OTIxMDk4ODQ0NjEzOCwKLQkuMDg5NjEyMTU4Njg5NzYwNjkwMzIyLAotCS4wOTY3Mjk2MjY0NTg0NTQ3MzE2MTgsCi0JLjEwMzc5Njc5MzY4MTU2NzU3ODQ2MCwKLQkuMTEwODE0MzY2MzQwMjY0MzE0MjAzLAotCS4xMTc3ODMwMzU2NTY0MzAwMDE4MzYsCi0JLjEyNDcwMzQ3ODUwMTAzMjgwNTA3MCwKLQkuMTMxNTc2MzU3Nzg4NjE3MzE1MjM2LAotCS4xMzg0MDIzMjI4NTkyOTIzMjYwMjksCi0JLjE0NTE4MjAwOTg0NDU3NTA3NzI5NSwKLQkuMTUxOTE2MDQyMDI1NzMyMTY3NTMwLAotCS4xNTg2MDUwMzAxNzY2NTkwNTY0NTEsCi0JLjE2NTI0OTU3Mjg5NTM5MDg4Mzc4NiwKLQkuMTcxODUwMjU2OTI2NTE4MzQxMDYwLAotCS4xNzg0MDc2NTc0NzI2ODk2MDY5NDcsCi0JLjE4NDkyMjMzODQ5MzgzNDEwNDE1NiwKLQkuMTkxMzk0ODUyOTk5NTY1MDQ2MDQ3LAotCS4xOTc4MjU3NDMzMjk3NTg1NTIxMzUsCi0JLjIwNDIxNTU0MTQyODc2NjMwMDY2OCwKLQkuMjEwNTY0NzY5MTA3MzUwMDAyNzQxLAotCS4yMTY4NzM5MzgzMDA1MjMxNTAyNDYsCi0JLjIyMzE0MzU1MTMxNDAyNDA4MDA1NiwKLQkuMjI5Mzc0MTAxMDY0ODc3MzIyNjQyLAotCS4yMzU1NjYwNzEzMTI4NjAwMDM2NzIsCi0JLjI0MTcxOTkzNjg4Njk2NjAyNDc1OCwKLQkuMjQ3ODM2MTYzOTA0NTk0Mjg2NTc3LAotCS4yNTM5MTUyMDk5ODA3MzI0NzAyODUsCi0JLjI1OTk1NzUyNDQzNjY4NjA3MTU2NywKLQkuMjY1OTYzNTQ4NDk2OTg0MDAzNTc3LAotCS4yNzE5MzM3MTU0ODQwMTA0NjMxMTQsCi0JLjI3Nzg2ODQ1MTAwMzA4NzEwMjQzNSwKLQkuMjgzNzY4MTczMTMwNzM4NDMyNTE5LAotCS4yODk2MzMyOTI1ODI5NDgzNDI4OTYsCi0JLjI5NTQ2NDIxMjg5MzQyMTA2MzE5OSwKLQkuMzAxMjYxMzMwNTc4MTk5NzA0MTc3LAotCS4zMDcwMjUwMzUyOTQ4Mjc4MzA1MTIsCi0JLjMxMjc1NTcxMDAwNDIzOTUxNzcyOSwKLQkuMzE4NDUzNzMxMTE4MDk3NDkzODkwLAotCS4zMjQxMTk0Njg2NTQzMTY3MzM1OTEsCi0JLjMyOTc1MzI4NjM3MjU3OTE2ODUyOCwKLQkuMzM1MzU1NTQxOTIwNzYyMzM0NDg0LAotCS4zNDA5MjY1ODY5NzA0NTQwODE4OTIsCi0JLjM0NjQ2Njc2NzM0NjEwMDgyMzQ4OCwKLQkuMzUxOTc2NDIzMTU2ODg0MjY2MDYzLAotCS4zNTc0NTU4ODg5MjIyMzE2NzkzMTYsCi0JLjM2MjkwNTQ5MzY4OTE0MDcxMjM3NiwKLQkuMzY4MzI1NTYxMTU4NTk5MTU3MzUyLAotCS4zNzM3MTY0MDk3OTM4MTQ4MTg4NDAsCi0JLjM3OTA3ODM1MjkzNDgxMTg0NjM1MywKLQkuMzg0NDExNjk4OTEwMjk4NTgyNjMyLAotCS4zODk3MTY3NTExNDA0NDA0NjQ5NTEsCi0JLjM5NDk5MzgwODI0MDU0MjQyMTExNywKLQkuNDAwMjQzMTY0MTI3NDU5NzQ5NTc5LAotCS40MDU0NjUxMDgxMDc4MTkxMDU0OTgsCi0JLjQxMDY1OTkyNDk4NTMzODg3NTU1OCwKLQkuNDE1ODI3ODk1MTQzNTkzMTk1ODI1LAotCS40MjA5NjkyOTQ2NDQyMzczNzk1NDMsCi0JLjQyNjA4NDM5NTMxMDY4MTQyOTY5MSwKLQkuNDMxMTczNDY0ODE4MTMwMDE0NDY0LAotCS40MzYyMzY3NjY3NzQ1Mjc0OTU3MjYsCi0JLjQ0MTI3NDU2MDgwNTE0MDkzNjI4MSwKLQkuNDQ2Mjg3MTAyNjI4MDQ4MTYwMTEzLAotCS40NTEyNzQ2NDQxMzk2MzAyNTQzNTgsCi0JLjQ1NjIzNzQzMzQ4MTg3NDE3NzIzMiwKLQkuNDYxMTc1NzE1MTIyNDA4MjkxNzkwLAotCS40NjYwODk3Mjk5MjQ1MzM0NTc5NjAsCi0JLjQ3MDk3OTcxNTIxOTA3MzExMzk4NSwKLQkuNDc1ODQ1OTA0ODY5ODU2ODk0OTQ3LAotCS40ODA2ODg1MjkzNDU1NzA3MTQyMTIsCi0JLjQ4NTUwNzgxNTc4MTYwMjQwMzE0OSwKLQkuNDkwMzAzOTg4MDQ1NTI1MzI5NjUzLAotCS40OTUwNzcyNjY3OTgwMzQ1NDMxNzEsCi0JLjQ5OTgyNzg2OTU1NjYxMTQwMzgyMiwKLQkuNTA0NTU2MDEwNzUxOTEyMjUzOTA4LAotCS41MDkyNjE5MDE3OTA1MjM1NTIzMzUsCi0JLjUxMzk0NTc1MTEwMTM0NjEwNDQwNSwKLQkuNTE4NjA3NzY0MjA4MzU0NjM3OTU4LAotCS41MjMyNDgxNDM3NjUxNTg2MDIwMzYsCi0JLjUyNzg2NzA4OTYyMDQ4NTc4NTQxNywKLQkuNTMyNDY0Nzk4ODY5MTE0MDE5OTA4LAotCS41MzcwNDE0NjU4OTczNDU5MTU0MzYsCi0JLjU0MTU5NzI4MjQzMjEyMTU3Mzk0NywKLQkuNTQ2MTMyNDM3NTk3NDA3MjYwOTA5LAotCS41NTA2NDcxMTc5NTIzOTQxODI3OTMsCi0JLjU1NTE0MTUwNzU0MDYxMTIwMDk2NSwKLQkuNTU5NjE1Nzg3OTM1Mzk5NTY2Nzc3LAotCS41NjQwNzAxMzgyODUzODc2NTY2NTEsCi0JLjU2ODUwNDczNTM1MjY4OTc0OTU2MSwKLQkuNTcyOTE5NzUzNTYyMDE4NzQwOTIyLAotCS41NzczMTUzNjUwMzUyNDY5NDEyNjAsCi0JLjU4MTY5MTczOTYzNTA2MTgyMTkwMCwKLQkuNTg2MDQ5MDQ1MDAzMTY0NzkyNDMzLAotCS41OTAzODc0NDY2MDIxMDc5NTcwMDUsCi0JLjU5NDcwNzEwNzc0NjIxNjkzNDE3NCwKLQkuNTk5MDA4MTg5NjQ1MjQ2NjAyNTk0LAotCS42MDMyOTA4NTE0Mzg5NDE4OTk2ODcsCi0JLjYwNzU1NTI1MDIyNDMyMjY2MjY4OCwKLQkuNjExODAxNTQxMTA2NjE1MzMxOTU1LAotCS42MTYwMjk4NzcyMTU2MjM4NTU1OTAsCi0JLjYyMDI0MDQwOTc1MTIwNDQyNDUzNywKLQkuNjI0NDMzMjg4MDEyMzY5MzAzMDMyLAotCS42Mjg2MDg2NTk0MjI3NTI2ODAyNTYsCi0JLjYzMjc2NjY2OTU3MDYyODQzNzIxMywKLQkuNjM2OTA3NDYyMjM2MTk0OTg3NzgxLAotCS42NDEwMzExNzk0MjA2NzkxMDkxNzEsCi0JLjY0NTEzNzk2MTM3MzYyMDc4Mjk3OCwKLQkuNjQ5MjI3OTQ2NjI1NjE1MDA0NDUwLAotCS42NTMzMDEyNzIwMTE5NTg2NDQ3MjUsCi0JLjY1NzM1ODA3MjcwOTAzMDIzODkxMSwKLQkuNjYxMzk4NDgyMjQ1MjAzOTIyNTAyLAotCS42NjU0MjI2MzI1NDQ1MDUxNzcwNjUsCi0JLjY2OTQzMDY1Mzk0Mjk4MTczNDg3MSwKLQkuNjczNDIyNjc1MjEyMzUwNDQxMTQyLAotCS42NzczOTg4MjM1OTA5MjAwNzM5MTEsCi0JLjY4MTM1OTIyNDgwNzIzODIwNjI2NywKLQkuNjg1MzA0MDAzMDk4MjgxMTAwMzkyLAotCS42ODkyMzMyODEyMzg1NTc1MzgwMTcsCi0JLjY5MzE0NzE4MDU2MDExNzcwMzg2MgotfTsKLQotc3RhdGljIGRvdWJsZSBsb2dGX3RhaWxbTisxXSA9IHsKLQkwLiwKLQktLjAwMDAwMDAwMDAwMDAwNTQzMjI5OTM4NDIwMDQ5LAotCSAuMDAwMDAwMDAwMDAwMDAxNzI3NDU2NzQ5OTcwNjEsCi0JLS4wMDAwMDAwMDAwMDAwMTMyMzAxNzgxODIyOTIzMywKLQktLjAwMDAwMDAwMDAwMDAxMTU0NTI3NjI4Mjg5ODcyLAotCS0uMDAwMDAwMDAwMDAwMDA0NjY1Mjk0Njk5NTgzMDAsCi0JIC4wMDAwMDAwMDAwMDAwNTE0ODg0OTU3MjY4NTgxMCwKLQktLjAwMDAwMDAwMDAwMDAyNTMyMTY4OTQzMTE3NDQ1LAotCS0uMDAwMDAwMDAwMDAwMDUyMTM2MjA2MzkxMzY1MDQsCi0JLS4wMDAwMDAwMDAwMDAwMTgxOTUwNjAwMzAxNjg4MSwKLQkgLjAwMDAwMDAwMDAwMDA2MzI5MDY1OTU4NzI0NTQ0LAotCSAuMDAwMDAwMDAwMDAwMDg2MTQ1MTI5MzYwODc4MTQsCi0JLS4wMDAwMDAwMDAwMDAwNzM1NTc3MDIxOTQzNTAyOCwKLQkgLjAwMDAwMDAwMDAwMDA5NjM4MDY3NjU4NTUyMjc3LAotCSAuMDAwMDAwMDAwMDAwMDc1OTg2MzY1OTcxOTQxNDEsCi0JIC4wMDAwMDAwMDAwMDAwMjU3OTk5OTEyODMwNjk5MCwKLQktLjAwMDAwMDAwMDAwMDA0NjU0NzI5NzQ3NTk4NDQ0LAotCS0uMDAwMDAwMDAwMDAwMDc1NTY5MjA2ODc0NTEzMzYsCi0JIC4wMDAwMDAwMDAwMDAxMDE5NTczNTIyMzcwODQ3MiwKLQktLjAwMDAwMDAwMDAwMDE3MzE5MDM0NDA2NDIyMzA2LAotCS0uMDAwMDAwMDAwMDAwMDc3MTgwMDEzMzY4MjgwOTgsCi0JIC4wMDAwMDAwMDAwMDAxMDk4MDc1NDA5OTg1NTIzOCwKLQktLjAwMDAwMDAwMDAwMDAyMDQ3MjM1NzgwMDQ2MTk1LAotCS0uMDAwMDAwMDAwMDAwMDgzNzIwOTEwOTkyMzU5MTIsCi0JIC4wMDAwMDAwMDAwMDAxNDA4ODEyNzkzNzExMTEzNSwKLQkgLjAwMDAwMDAwMDAwMDEyODY5MDE3MTU3NTg4MjU3LAotCSAuMDAwMDAwMDAwMDAwMTc3ODg4NTA3NzgxOTgxMDYsCi0JIC4wMDAwMDAwMDAwMDAwNjQ0MDg1NjE1MDY5Njg5MSwKLQkgLjAwMDAwMDAwMDAwMDE2MTMyODIyNjY3MjQwODIyLAotCS0uMDAwMDAwMDAwMDAwMDc1NDA5MTY1MTE5NTYxODgsCi0JLS4wMDAwMDAwMDAwMDAwMDAzNjUwNzE4ODgzMTc5MCwKLQkgLjAwMDAwMDAwMDAwMDA5MTIwOTM3MjQ5OTE0OTg0LAotCSAuMDAwMDAwMDAwMDAwMTg1Njc1NzA5NTk3OTYwMTAsCi0JLS4wMDAwMDAwMDAwMDAwMzE0OTI2NTA2NTE5MTQ4MywKLQktLjAwMDAwMDAwMDAwMDA5MzA5NDU5NDk1MTk2ODg5LAotCSAuMDAwMDAwMDAwMDAwMTc5MTQzMzg2MDEzMjkxMTcsCi0JLS4wMDAwMDAwMDAwMDAwMTMwMjk3OTcxNzMzMDg2NiwKLQkgLjAwMDAwMDAwMDAwMDIzMDk3Mzg1MjE3NTg2OTM5LAotCSAuMDAwMDAwMDAwMDAwMjM5OTk1NDA0ODQyMTE3MzcsCi0JIC4wMDAwMDAwMDAwMDAxNTM5Mzc3NjE3NDQ1NTQwOCwKLQktLjAwMDAwMDAwMDAwMDM2ODcwNDI4MzE1ODM3Njc4LAotCSAuMDAwMDAwMDAwMDAwMzY5MjAzNzUwODIwODAwODksCi0JLS4wMDAwMDAwMDAwMDAwOTM4MzQxNzIyMzY2MzY5OSwKLQkgLjAwMDAwMDAwMDAwMDA5NDMzMzk4MTg5NTEyNjkwLAotCSAuMDAwMDAwMDAwMDAwNDE0ODEzMTg3MDQyNTg1NjgsCi0JLS4wMDAwMDAwMDAwMDAwMzc5MjMxNjQ4MDIwOTMxNCwKLQkgLjAwMDAwMDAwMDAwMDA4NDAzMTU2MzA0NzkyNDI0LAotCS0uMDAwMDAwMDAwMDAwMzQyNjI5MzQzNDgyODU0MjksCi0JIC4wMDAwMDAwMDAwMDA0MzcxMjE5MTk1NzQyOTE0NSwKLQktLjAwMDAwMDAwMDAwMDEwNDc1NzUwMDU4Nzc2NTQxLAotCS0uMDAwMDAwMDAwMDAwMTExMTg2NzEzODk1NTkzMjMsCi0JIC4wMDAwMDAwMDAwMDAzNzU0OTU3NzI1NzI1OTg1MywKLQkgLjAwMDAwMDAwMDAwMDEzOTEyODQxMjEyMTk3NTY1LAotCSAuMDAwMDAwMDAwMDAwMTA3NzU3NDMwMzc1NzI2NDAsCi0JIC4wMDAwMDAwMDAwMDAyOTM5MTg1OTE4NzY0ODAwMCwKLQktLjAwMDAwMDAwMDAwMDQyNzkwNTA5MDYwMDYwNzc0LAotCSAuMDAwMDAwMDAwMDAwMjI3NzQwNzYxMTQwMzk1NTUsCi0JIC4wMDAwMDAwMDAwMDAxMDg0OTU2OTYyMjk2NzkxMiwKLQktLjAwMDAwMDAwMDAwMDIzMDczODAxOTQ1NzA1NzU4LAotCSAuMDAwMDAwMDAwMDAwMTU3NjEyMDM3NzM5Njk0MzUsCi0JIC4wMDAwMDAwMDAwMDAwMzM0NTcxMDI2OTU0NDA4MiwKLQktLjAwMDAwMDAwMDAwMDQxNTI1MTU4MDYzNDM2MTIzLAotCSAuMDAwMDAwMDAwMDAwMzI2NTU2OTg4OTY5MDcxNDYsCi0JLS4wMDAwMDAwMDAwMDA0NDcwNDI2NTAxMDQ1MjQ0NiwKLQkgLjAwMDAwMDAwMDAwMDM0NTI3NjQ3OTUyMDM5NzcyLAotCS0uMDAwMDAwMDAwMDAwMDcwNDg5NjIzOTIxMDk3NDYsCi0JIC4wMDAwMDAwMDAwMDAxMTc3Njk3ODc1MTM2OTIxNCwKLQktLjAwMDAwMDAwMDAwMDEwNzc0MzQxNDYxNjA5NTc4LAotCSAuMDAwMDAwMDAwMDAwMjE4NjMzNDMyOTMyMTU5MTAsCi0JIC4wMDAwMDAwMDAwMDAyNDEzMjYzOTQ5MTMzMzEzMSwKLQkgLjAwMDAwMDAwMDAwMDM5MDU3NDYyMjA5ODMwNzAwLAotCS0uMDAwMDAwMDAwMDAwMjY1NzA2NzkyMDM1NjA3NTEsCi0JIC4wMDAwMDAwMDAwMDAzNzEzNTE0MTkxOTU5MjAyMSwKLQktLjAwMDAwMDAwMDAwMDE3MTY2OTIxMzM2MDgyNDMxLAotCS0uMDAwMDAwMDAwMDAwMjg2NTgyODUxNTc5MTQzNTMsCi0JLS4wMDAwMDAwMDAwMDAyMzgxMjU0MjI2MzQ0NjgwOSwKLQkgLjAwMDAwMDAwMDAwMDA2NTc2NjU5NzY4NTgwMDYyLAotCS0uMDAwMDAwMDAwMDAwMjgyMTAxNDM4NDYxODEyNjcsCi0JIC4wMDAwMDAwMDAwMDAxMDcwMTkzMTc2MjExNDI1NCwKLQkgLjAwMDAwMDAwMDAwMDE4MTE5MzQ2MzY2NDQxMTEwLAotCSAuMDAwMDAwMDAwMDAwMDk4NDA0NjUyNzgyMzI2MjcsCi0JLS4wMDAwMDAwMDAwMDAzMzE0OTE1MDI4Mjc1MjU0MiwKLQktLjAwMDAwMDAwMDAwMDE4MzAyODU3MzU2MDQxNjY4LAotCS0uMDAwMDAwMDAwMDAwMTYyMDc0MDAxNTY3NDQ5NDksCi0JIC4wMDAwMDAwMDAwMDA0ODMwMzMxNDk0OTU1MzIwMSwKLQktLjAwMDAwMDAwMDAwMDcxNTYwNTUzMTcyMzgyMTE1LAotCSAuMDAwMDAwMDAwMDAwODg4MjEyMzk1MTg1NzE4NTUsCi0JLS4wMDAwMDAwMDAwMDAzMDkwMDU4MDUxMzIzODI0NCwKLQktLjAwMDAwMDAwMDAwMDYxMDc2NTUxOTcyODUxNDk2LAotCSAuMDAwMDAwMDAwMDAwMzU2NTk5Njk2NjMzNDc4MzAsCi0JIC4wMDAwMDAwMDAwMDAzNTc4MjM5NjU5MTI3NjM4MywKLQktLjAwMDAwMDAwMDAwMDQ2MjI2MDg3MDAxNTQ0NTc4LAotCSAuMDAwMDAwMDAwMDAwNjIyNzk3NjI5MTcyMjUxNTYsCi0JIC4wMDAwMDAwMDAwMDA3MjgzODk0NzI3MjA2NTc0MSwKLQkgLjAwMDAwMDAwMDAwMDI2ODA5NjQ2NjE1MjExNjczLAotCS0uMDAwMDAwMDAwMDAwMTA5NjA4MjUwNDYwNTkyNzgsCi0JIC4wMDAwMDAwMDAwMDAwMjMxMTk0OTM4MzgwMDUzNywKLQktLjAwMDAwMDAwMDAwMDU4NDY5MDU4MDA1Mjk5MjQ3LAotCS0uMDAwMDAwMDAwMDAwMDIxMDM3NDgyNTExNDQ0OTQsCi0JLS4wMDAwMDAwMDAwMDAyMzMyMzE4Mjk0NTU4NzQwOCwKLQktLjAwMDAwMDAwMDAwMDQyMzMzNjk0Mjg4MTQxOTE2LAotCS0uMDAwMDAwMDAwMDAwNDM5MzM5Mzc5Njk3Mzc4NDQsCi0JIC4wMDAwMDAwMDAwMDA0MTM0MTY0NzA3MzgzNTU2NSwKLQkgLjAwMDAwMDAwMDAwMDA2ODQxNzYzNjQxNTkxNDY2LAotCSAuMDAwMDAwMDAwMDAwNDc1ODU1MzQwMDQ0MzA2NDEsCi0JIC4wMDAwMDAwMDAwMDA4MzY3OTY3ODY3NDc1NzY5NSwKLQktLjAwMDAwMDAwMDAwMDg1NzYzNzM0NjQ2NjU4NjQwLAotCSAuMDAwMDAwMDAwMDAwMjE5MTMyODEyMjkzNDAwOTIsCi0JLS4wMDAwMDAwMDAwMDA2MjI0Mjg0MjUzNjQzMTE0OCwKLQktLjAwMDAwMDAwMDAwMDEwOTgzNTk0MzI1NDM4NDMwLAotCSAuMDAwMDAwMDAwMDAwNjUzMTA0MzEzNzc2MzM2NTEsCi0JLS4wMDAwMDAwMDAwMDA0NzU4MDE5OTAyMTcxMDc2OSwKLQktLjAwMDAwMDAwMDAwMDM3ODU0MjUxMjY1NDU3MDQwLAotCSAuMDAwMDAwMDAwMDAwNDA5MzkyMzMyMTg2Nzg2NjQsCi0JIC4wMDAwMDAwMDAwMDA4NzQyNDM4MzkxNDg1ODI5MSwKLQkgLjAwMDAwMDAwMDAwMDI1MjE4MTg4NDU2ODQyODgyLAotCS0uMDAwMDAwMDAwMDAwMDM2MDgxMzEzNjA0MjI1NTcsCi0JLS4wMDAwMDAwMDAwMDA1MDUxODU1NTkyNDI4MDkwMiwKLQkgLjAwMDAwMDAwMDAwMDc4Njk5NDAzMzIzMzU1MzE3LAotCS0uMDAwMDAwMDAwMDAwNjcwMjA4NzY5NjE5NDkwNjAsCi0JIC4wMDAwMDAwMDAwMDAxNjEwODU3NTc1MzkzMjQ1OCwKLQkgLjAwMDAwMDAwMDAwMDU4NTI3MTg4NDM2MjUxNTA5LAotCS0uMDAwMDAwMDAwMDAwMzUyNDY3NTcyOTc5MDQ3OTEsCi0JLS4wMDAwMDAwMDAwMDAxODM3MjA4NDQ5NTYyOTA1OCwKLQkgLjAwMDAwMDAwMDAwMDg4NjA2Njg5ODEzNDk0OTE2LAotCSAuMDAwMDAwMDAwMDAwNjY0ODYyNjgwNzE0Njg3MDAsCi0JIC4wMDAwMDAwMDAwMDA2MzgzMTYxNTE3MDY0NjUxOSwKLQkgLjAwMDAwMDAwMDAwMDI1MTQ0MjMwNzI4Mzc2MDcyLAotCS0uMDAwMDAwMDAwMDAwMTcyMzk0NDQ1MjU2MTQ4MzQKLX07Ci0KLSNpZiAwCi1kb3VibGUKLSNpZmRlZiBfQU5TSV9TT1VSQ0UKLWxvZyhkb3VibGUgeCkKLSNlbHNlCi1sb2coeCkgZG91YmxlIHg7Ci0jZW5kaWYKLXsKLQlpbnQgbSwgajsKLQlkb3VibGUgRiwgZiwgZywgcSwgdSwgdTIsIHYsIHplcm8gPSAwLjAsIG9uZSA9IDEuMDsKLQl2b2xhdGlsZSBkb3VibGUgdTE7Ci0KLQkvKiBDYXRjaCBzcGVjaWFsIGNhc2VzICovCi0JaWYgKHggPD0gMCkKLQkJaWYgKHggPT0gemVybykJLyogbG9nKDApID0gLUluZiAqLwotCQkJcmV0dXJuICgtb25lL3plcm8pOwotCQllbHNlCQkvKiBsb2cobmVnKSA9IE5hTiAqLwotCQkJcmV0dXJuICh6ZXJvL3plcm8pOwotCWVsc2UgaWYgKCFmaW5pdGUoeCkpCi0JCXJldHVybiAoeCt4KTsJCS8qIHggPSBOYU4sIEluZiAqLwotCi0JLyogQXJndW1lbnQgcmVkdWN0aW9uOiAxIDw9IGcgPCAyOyB4LzJebSA9IGc7CSovCi0JLyogeSA9IEYqKDEgKyBmL0YpIGZvciB8ZnwgPD0gMl4tOAkJKi8KLQotCW0gPSBsb2diKHgpOwotCWcgPSBsZGV4cCh4LCAtbSk7Ci0JaWYgKG0gPT0gLTEwMjIpIHsKLQkJaiA9IGxvZ2IoZyksIG0gKz0gajsKLQkJZyA9IGxkZXhwKGcsIC1qKTsKLQl9Ci0JaiA9IE4qKGctMSkgKyAuNTsKLQlGID0gKDEuMC9OKSAqIGogKyAxOwkvKiBGKjEyOCBpcyBhbiBpbnRlZ2VyIGluIFsxMjgsIDUxMl0gKi8KLQlmID0gZyAtIEY7Ci0KLQkvKiBBcHByb3hpbWF0ZSBleHBhbnNpb24gZm9yIGxvZygxK2YvRikgfj0gdSArIHEgKi8KLQlnID0gMS8oMipGK2YpOwotCXUgPSAyKmYqZzsKLQl2ID0gdSp1OwotCXEgPSB1KnYqKEExICsgdiooQTIgKyB2KihBMyArIHYqQTQpKSk7Ci0KLSAgICAvKiBjYXNlIDE6IHUxID0gdSByb3VuZGVkIHRvIDJeLTQzIGFic29sdXRlLiAgU2luY2UgdSA8IDJeLTgsCi0gICAgICogCSAgICAgICB1MSBoYXMgYXQgbW9zdCAzNSBiaXRzLCBhbmQgRip1MSBpcyBleGFjdCwgYXMgRiBoYXMgPCA4IGJpdHMuCi0gICAgICogICAgICAgICBJdCBhbHNvIGFkZHMgZXhhY3RseSB0byB8bSpsb2cyX2hpICsgbG9nX0ZfaGVhZFtqXSB8IDwgNzUwCi0gICAgKi8KLQlpZiAobSB8IGopCi0JCXUxID0gdSArIDUxMywgdTEgLT0gNTEzOwotCi0gICAgLyogY2FzZSAyOgl8MS14fCA8IDEvMjU2LiBUaGUgbS0gYW5kIGotIGRlcGVuZGVudCB0ZXJtcyBhcmUgemVybzsKLSAgICAgKiAJCXUxID0gdSB0byAyNCBiaXRzLgotICAgICovCi0JZWxzZQotCQl1MSA9IHUsIFRSVU5DKHUxKTsKLQl1MiA9ICgyLjAqKGYgLSBGKnUxKSAtIHUxKmYpICogZzsKLQkJCS8qIHUxICsgdTIgPSAyZi8oMkYrZikgdG8gZXh0cmEgcHJlY2lzaW9uLgkqLwotCi0JLyogbG9nKHgpID0gbG9nKDJebSpGKigxK2YvRikpID0JCQkJKi8KLQkvKiAobSpsb2cyX2hpK2xvZ0ZfaGVhZFtqXSt1MSkgKyAobSpsb2cyX2xvK2xvZ0ZfdGFpbFtqXStxKTsJKi8KLQkvKiAoZXhhY3QpICsgKHRpbnkpCQkJCQkJKi8KLQotCXUxICs9IG0qbG9nRl9oZWFkW05dICsgbG9nRl9oZWFkW2pdOwkJLyogZXhhY3QgKi8KLQl1MiA9ICh1MiArIGxvZ0ZfdGFpbFtqXSkgKyBxOwkJCS8qIHRpbnkgKi8KLQl1MiArPSBsb2dGX3RhaWxbTl0qbTsKLQlyZXR1cm4gKHUxICsgdTIpOwotfQotI2VuZGlmCi0KLS8qCi0gKiBFeHRyYSBwcmVjaXNpb24gdmFyaWFudCwgcmV0dXJuaW5nIHN0cnVjdCB7ZG91YmxlIGEsIGI7fTsKLSAqIGxvZyh4KSA9IGErYiB0byA2MyBiaXRzLCB3aXRoIGEgcm91bmRlZCB0byAyNiBiaXRzLgotICovCi1zdHJ1Y3QgRG91YmxlCi0jaWZkZWYgX0FOU0lfU09VUkNFCi1fX2xvZ19fRChkb3VibGUgeCkKLSNlbHNlCi1fX2xvZ19fRCh4KSBkb3VibGUgeDsKLSNlbmRpZgotewotCWludCBtLCBqOwotCWRvdWJsZSBGLCBmLCBnLCBxLCB1LCB2LCB1MjsKLQl2b2xhdGlsZSBkb3VibGUgdTE7Ci0Jc3RydWN0IERvdWJsZSByOwotCi0JLyogQXJndW1lbnQgcmVkdWN0aW9uOiAxIDw9IGcgPCAyOyB4LzJebSA9IGc7CSovCi0JLyogeSA9IEYqKDEgKyBmL0YpIGZvciB8ZnwgPD0gMl4tOAkJKi8KLQotCW0gPSBsb2diKHgpOwotCWcgPSBsZGV4cCh4LCAtbSk7Ci0JaWYgKG0gPT0gLTEwMjIpIHsKLQkJaiA9IGxvZ2IoZyksIG0gKz0gajsKLQkJZyA9IGxkZXhwKGcsIC1qKTsKLQl9Ci0JaiA9IE4qKGctMSkgKyAuNTsKLQlGID0gKDEuMC9OKSAqIGogKyAxOwotCWYgPSBnIC0gRjsKLQotCWcgPSAxLygyKkYrZik7Ci0JdSA9IDIqZipnOwotCXYgPSB1KnU7Ci0JcSA9IHUqdiooQTEgKyB2KihBMiArIHYqKEEzICsgdipBNCkpKTsKLQlpZiAobSB8IGopCi0JCXUxID0gdSArIDUxMywgdTEgLT0gNTEzOwotCWVsc2UKLQkJdTEgPSB1LCBUUlVOQyh1MSk7Ci0JdTIgPSAoMi4wKihmIC0gRip1MSkgLSB1MSpmKSAqIGc7Ci0KLQl1MSArPSBtKmxvZ0ZfaGVhZFtOXSArIGxvZ0ZfaGVhZFtqXTsKLQotCXUyICs9ICBsb2dGX3RhaWxbal07IHUyICs9IHE7Ci0JdTIgKz0gbG9nRl90YWlsW05dKm07Ci0Jci5hID0gdTEgKyB1MjsJCQkvKiBPbmx5IGRpZmZlcmVuY2UgaXMgaGVyZSAqLwotCVRSVU5DKHIuYSk7Ci0Jci5iID0gKHUxIC0gci5hKSArIHUyOwotCXJldHVybiAocik7Ci19CmRpZmYgLS1naXQgYS9saWJtL2JzZHNyYy9iX3RnYW1tYS5jIGIvbGlibS9ic2RzcmMvYl90Z2FtbWEuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmY2YzVhYy4uMDAwMDAwMAotLS0gYS9saWJtL2JzZHNyYy9iX3RnYW1tYS5jCisrKyAvZGV2L251bGwKQEAgLTEsMzE2ICswLDAgQEAKLS8qLQotICogQ29weXJpZ2h0IChjKSAxOTkyLCAxOTkzCi0gKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQotICogICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgotICoJVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgVW5pdmVyc2l0eSBvZgotICoJQ2FsaWZvcm5pYSwgQmVya2VsZXkgYW5kIGl0cyBjb250cmlidXRvcnMuCi0gKiA0LiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0gKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgbGludAotc3RhdGljIGNoYXIgc2Njc2lkW10gPSAiQCgjKWdhbW1hLmMJOC4xIChCZXJrZWxleSkgNi80LzkzIjsKLSNlbmRpZiAvKiBub3QgbGludCAqLwotI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgotLyogX19GQlNESUQoIiRGcmVlQlNEOiBzcmMvbGliL21zdW4vYnNkc3JjL2JfdGdhbW1hLmMsdiAxLjcgMjAwNS8wOS8xOSAxMToyODoxOSBiZGUgRXhwICQiKTsgKi8KLQotLyoKLSAqIFRoaXMgY29kZSBieSBQLiBNY0lscm95LCBPY3QgMTk5MjsKLSAqCi0gKiBUaGUgZmluYW5jaWFsIHN1cHBvcnQgb2YgVVVORVQgQ29tbXVuaWNhdGlvbnMgU2VydmljZXMgaXMgZ3JlYXRmdWxseQotICogYWNrbm93bGVkZ2VkLgotICovCi0KLS8vI2luY2x1ZGUgPG1hdGguaD4KLSNpbmNsdWRlICIuLi9pbmNsdWRlL21hdGguaCIKLSNpbmNsdWRlICJtYXRoaW1wbC5oIgotI2luY2x1ZGUgPGVycm5vLmg+Ci0KLS8qIE1FVEhPRDoKLSAqIHggPCAwOiBVc2UgcmVmbGVjdGlvbiBmb3JtdWxhLCBHKHgpID0gcGkvKHNpbihwaSp4KSp4KkcoeCkpCi0gKiAJQXQgbmVnYXRpdmUgaW50ZWdlcnMsIHJldHVybiArSW5mLCBhbmQgc2V0IGVycm5vLgotICoKLSAqIHggPCA2LjU6Ci0gKglVc2UgYXJndW1lbnQgcmVkdWN0aW9uIEcoeCsxKSA9IHhHKHgpIHRvIHJlYWNoIHRoZQotICoJcmFuZ2UgWzEuMDY2MTI0LDIuMDY2MTI0XS4gIFVzZSBhIHJhdGlvbmFsCi0gKglhcHByb3hpbWF0aW9uIGNlbnRlcmVkIGF0IHRoZSBtaW5pbXVtICh4MCsxKSB0bwotICoJZW5zdXJlIG1vbm90b25pY2l0eS4KLSAqCi0gKiB4ID49IDYuNTogVXNlIHRoZSBhc3ltcHRvdGljIGFwcHJveGltYXRpb24gKFN0aXJsaW5nJ3MgZm9ybXVsYSkKLSAqCWFkanVzdGVkIGZvciBlcXVhbC1yaXBwbGVzOgotICoKLSAqCWxvZyhHKHgpKSB+PSAoeC0uNSkqKGxvZyh4KS0xKSArIC41KGxvZygyKnBpKS0xKSArIDEveCpQKDEvKHgqeCkpCi0gKgotICoJS2VlcCBleHRyYSBwcmVjaXNpb24gaW4gbXVsdGlwbHlpbmcgKHgtLjUpKGxvZyh4KS0xKSwgdG8KLSAqCWF2b2lkIHByZW1hdHVyZSByb3VuZC1vZmYuCi0gKgotICogU3BlY2lhbCB2YWx1ZXM6Ci0gKglub24tcG9zaXRpdmUgaW50ZWdlcjoJU2V0IG92ZXJmbG93IHRyYXA7IHJldHVybiArSW5mOwotICoJeCA+IDE3MS42MzoJCVNldCBvdmVyZmxvdyB0cmFwOyByZXR1cm4gK0luZjsKLSAqCU5hTjogCQkJU2V0IGludmFsaWQgdHJhcDsgIHJldHVybiBOYU4KLSAqCi0gKiBBY2N1cmFjeTogR2FtbWEoeCkgaXMgYWNjdXJhdGUgdG8gd2l0aGluCi0gKgl4ID4gMDogIGVycm9yIHByb3ZhYmx5IDwgMC45dWxwLgotICoJTWF4aW11bSBvYnNlcnZlZCBpbiAxLDAwMCwwMDAgdHJpYWxzIHdhcyAuODd1bHAuCi0gKgl4IDwgMDoKLSAqCU1heGltdW0gb2JzZXJ2ZWQgZXJyb3IgPCA0dWxwIGluIDEsMDAwLDAwMCB0cmlhbHMuCi0gKi8KLQotc3RhdGljIGRvdWJsZSBuZWdfZ2FtKGRvdWJsZSk7Ci1zdGF0aWMgZG91YmxlIHNtYWxsX2dhbShkb3VibGUpOwotc3RhdGljIGRvdWJsZSBzbWFsbGVyX2dhbShkb3VibGUpOwotc3RhdGljIHN0cnVjdCBEb3VibGUgbGFyZ2VfZ2FtKGRvdWJsZSk7Ci1zdGF0aWMgc3RydWN0IERvdWJsZSByYXRmdW5fZ2FtKGRvdWJsZSwgZG91YmxlKTsKLQotLyoKLSAqIFJhdGlvbmFsIGFwcHJveGltYXRpb24sIEEwICsgeCp4KlAoeCkvUSh4KSwgb24gdGhlIGludGVydmFsCi0gKiBbMS4wNjYuLiwgMi4wNjYuLl0gYWNjdXJhdGUgdG8gNC4yNWUtMTkuCi0gKi8KLSNkZWZpbmUgTEVGVCAtLjM5NTUwNzgxMjUJLyogbGVmdCBib3VuZGFyeSBmb3IgcmF0LiBhcHByb3ggKi8KLSNkZWZpbmUgeDAgLjQ2MTYzMjE0NDk2ODM2MjM1Njc4NQkvKiB4bWluIC0gMSAqLwotCi0jZGVmaW5lIGEwX2hpIDAuODg1NjAzMTk0NDEwODg4NzQ5OTIKLSNkZWZpbmUgYTBfbG8gLS4wMDAwMDAwMDAwMDAwMDAwNDk5NjQyNzAzNjQ2OTAxOTY5NQotI2RlZmluZSBQMAkgNi4yMTM4OTU3MTgyMTgyMDg2MzAyOTAxNzgwMDcyN2UtMDEKLSNkZWZpbmUgUDEJIDIuNjU3NTcxOTg2NTE1MzM0NjYxMDQ5NzkxOTc1NTNlLTAxCi0jZGVmaW5lIFAyCSA1LjUzODU5NDQ2NDI5OTE3NDYxMDYzMzA4MDgxNzQ4ZS0wMwotI2RlZmluZSBQMwkgMS4zODQ1NjY5ODMwNDA5NjU3Mzg4NzE0NTI4MjgxMWUtMDMKLSNkZWZpbmUgUDQJIDIuNDA2NTk5NTAwMzI3MTEzNjU4MTkzNDg5Njk4MDhlLTAzCi0jZGVmaW5lIFEwCSAxLjQ1MDE5NTMxMjUwMDAwMDAwMDAwMDAwMDAwMDAwZSswMAotI2RlZmluZSBRMQkgMS4wNjI1ODUyMTk0ODAxNjE3MTM0MzQ1NDA2MTU3MWUrMDAKLSNkZWZpbmUgUTIJLTIuMDc0NzQ1NjE5NDM4NTk5MzY0NDE0Njk5MjY2NDllLTAxCi0jZGVmaW5lIFEzCS0xLjQ2NzM0MTMxNzgyMDA1NDIyNTA2Mjg3NTczMDE1ZS0wMQotI2RlZmluZSBRNAkgMy4wNzg3ODE3NjE1NjE3NTUyMDM2MTU1NzU3Mzc3OWUtMDIKLSNkZWZpbmUgUTUJIDUuMTI0NDkzNDc5ODA2NjYyMjEzMzYwNTQ2MzMxODRlLTAzCi0jZGVmaW5lIFE2CS0xLjc2MDEyNzQxNDMxNjY2OTk1MDE5MjIyODk4ODMzZS0wMwotI2RlZmluZSBRNwkgOS4zNTAyMTAyMzU3Mzc4ODkzNTM3MjE1MzAzMDU1NmUtMDUKLSNkZWZpbmUgUTgJIDYuMTMyNzU1MDc0NzI0NDM5NTg5MjQ3NDU2NTIyMzllLTA2Ci0vKgotICogQ29uc3RhbnRzIGZvciBsYXJnZSB4IGFwcHJveGltYXRpb24gKHggaW4gWzYsIEluZl0pCi0gKiAoQWNjdXJhdGUgdG8gMi44KjEwXi0xOSBhYnNvbHV0ZSkKLSAqLwotI2RlZmluZSBsbnMycGlfaGkgMC40MTg5NDUzMTI1MDAwMDAKLSNkZWZpbmUgbG5zMnBpX2xvIC0uMDAwMDA2Nzc5Mjk1MzI3MjU4MjE5NjcwMjYzNTk1Ci0jZGVmaW5lIFBhMAkgOC4zMzMzMzMzMzMzMzMzMzE0ODI5NjE2MjU2MjQ3NGUtMDIKLSNkZWZpbmUgUGExCS0yLjc3Nzc3Nzc3Nzc0NTQ4MTIzNTc5Mzc4OTY2NDk3ZS0wMwotI2RlZmluZSBQYTIJIDcuOTM2NTA3Nzg3NTQ0MzU2MzE0NzYyODI3ODY0MjNlLTA0Ci0jZGVmaW5lIFBhMwktNS45NTIzNTA4MjU2NjY3Mjg0Nzk1MDcxNzI2MjIyMmUtMDQKLSNkZWZpbmUgUGE0CSA4LjQxNDI4NTYwMzQ2NjUzNzAyMTM1ODIxODA2MjUyZS0wNAotI2RlZmluZSBQYTUJLTEuODk3NzM1MjY0NjM4NzkyMDAzNDg4NzIwODk0MjFlLTAzCi0jZGVmaW5lIFBhNgkgNS42OTM5NDQ2MzQzOTQxMTY0OTQwODA1MDY2NDA3OGUtMDMKLSNkZWZpbmUgUGE3CS0xLjQ0NzA1NTYyNDIxNDI4OTE1NDUzODgwMzkyNzYxZS0wMgotCi1zdGF0aWMgY29uc3QgZG91YmxlIHplcm8gPSAwLiwgb25lID0gMS4wLCB0aW55ID0gMWUtMzAwOwotCi1kb3VibGUKLXRnYW1tYSh4KQotCWRvdWJsZSB4OwotewotCXN0cnVjdCBEb3VibGUgdTsKLQotCWlmICh4ID49IDYpIHsKLQkJaWYoeCA+IDE3MS42MykKLQkJCXJldHVybihvbmUvemVybyk7Ci0JCXUgPSBsYXJnZV9nYW0oeCk7Ci0JCXJldHVybihfX2V4cF9fRCh1LmEsIHUuYikpOwotCX0gZWxzZSBpZiAoeCA+PSAxLjAgKyBMRUZUICsgeDApCi0JCXJldHVybiAoc21hbGxfZ2FtKHgpKTsKLQllbHNlIGlmICh4ID4gMS5lLTE3KQotCQlyZXR1cm4gKHNtYWxsZXJfZ2FtKHgpKTsKLQllbHNlIGlmICh4ID4gLTEuZS0xNykgewotCQlpZiAoeCA9PSAwLjApCi0JCQlyZXR1cm4gKG9uZS94KTsKLQkJb25lKzFlLTIwOwkJLyogUmFpc2UgaW5leGFjdCBmbGFnLiAqLwotCQlyZXR1cm4gKG9uZS94KTsKLQl9IGVsc2UgaWYgKCFmaW5pdGUoeCkpCi0JCXJldHVybiAoeCp4KTsJCS8qIHggPSBOYU4sIC1JbmYgKi8KLQllbHNlCi0JCXJldHVybiAobmVnX2dhbSh4KSk7Ci19Ci0vKgotICogQWNjdXJhdGUgdG8gbWF4KHVscCgxLzEyOCkgYWJzb2x1dGUsIDJeLTY2IHJlbGF0aXZlKSBlcnJvci4KLSAqLwotc3RhdGljIHN0cnVjdCBEb3VibGUKLWxhcmdlX2dhbSh4KQotCWRvdWJsZSB4OwotewotCWRvdWJsZSB6LCBwOwotCXN0cnVjdCBEb3VibGUgdCwgdSwgdjsKLQotCXogPSBvbmUvKHgqeCk7Ci0JcCA9IFBhMCt6KihQYTEreiooUGEyK3oqKFBhMyt6KihQYTQreiooUGE1K3oqKFBhNit6KlBhNykpKSkpKTsKLQlwID0gcC94OwotCi0JdSA9IF9fbG9nX19EKHgpOwotCXUuYSAtPSBvbmU7Ci0Jdi5hID0gKHggLT0gLjUpOwotCVRSVU5DKHYuYSk7Ci0Jdi5iID0geCAtIHYuYTsKLQl0LmEgPSB2LmEqdS5hOwkJCS8qIHQgPSAoeC0uNSkqKGxvZyh4KS0xKSAqLwotCXQuYiA9IHYuYip1LmEgKyB4KnUuYjsKLQkvKiByZXR1cm4gdC5hICsgdC5iICsgbG5zMnBpX2hpICsgbG5zMnBpX2xvICsgcCAqLwotCXQuYiArPSBsbnMycGlfbG87IHQuYiArPSBwOwotCXUuYSA9IGxuczJwaV9oaSArIHQuYjsgdS5hICs9IHQuYTsKLQl1LmIgPSB0LmEgLSB1LmE7Ci0JdS5iICs9IGxuczJwaV9oaTsgdS5iICs9IHQuYjsKLQlyZXR1cm4gKHUpOwotfQotLyoKLSAqIEdvb2QgdG8gPCAxIHVscC4gIChwcm92YWJseSAuOTAgdWxwOyAuODcgdWxwIG9uIDEsMDAwLDAwMCBydW5zLikKLSAqIEl0IGFsc28gaGFzIGNvcnJlY3QgbW9ub3RvbmljaXR5LgotICovCi1zdGF0aWMgZG91YmxlCi1zbWFsbF9nYW0oeCkKLQlkb3VibGUgeDsKLXsKLQlkb3VibGUgeSwgeW0xLCB0OwotCXN0cnVjdCBEb3VibGUgeXksIHI7Ci0JeSA9IHggLSBvbmU7Ci0JeW0xID0geSAtIG9uZTsKLQlpZiAoeSA8PSAxLjAgKyAoTEVGVCArIHgwKSkgewotCQl5eSA9IHJhdGZ1bl9nYW0oeSAtIHgwLCAwKTsKLQkJcmV0dXJuICh5eS5hICsgeXkuYik7Ci0JfQotCXIuYSA9IHk7Ci0JVFJVTkMoci5hKTsKLQl5eS5hID0gci5hIC0gb25lOwotCXkgPSB5bTE7Ci0JeXkuYiA9IHIuYiA9IHkgLSB5eS5hOwotCS8qIEFyZ3VtZW50IHJlZHVjdGlvbjogRyh4KzEpID0geCpHKHgpICovCi0JZm9yICh5bTEgPSB5LW9uZTsgeW0xID4gTEVGVCArIHgwOyB5ID0geW0xLS0sIHl5LmEtLSkgewotCQl0ID0gci5hKnl5LmE7Ci0JCXIuYiA9IHIuYSp5eS5iICsgeSpyLmI7Ci0JCXIuYSA9IHQ7Ci0JCVRSVU5DKHIuYSk7Ci0JCXIuYiArPSAodCAtIHIuYSk7Ci0JfQotCS8qIFJldHVybiByKnRnYW1tYSh5KS4gKi8KLQl5eSA9IHJhdGZ1bl9nYW0oeSAtIHgwLCAwKTsKLQl5ID0gci5iKih5eS5hICsgeXkuYikgKyByLmEqeXkuYjsKLQl5ICs9IHl5LmEqci5hOwotCXJldHVybiAoeSk7Ci19Ci0vKgotICogR29vZCBvbiAoMCwgMSt4MCtMRUZUXS4gIEFjY3VyYXRlIHRvIDF1bHAuCi0gKi8KLXN0YXRpYyBkb3VibGUKLXNtYWxsZXJfZ2FtKHgpCi0JZG91YmxlIHg7Ci17Ci0JZG91YmxlIHQsIGQ7Ci0Jc3RydWN0IERvdWJsZSByLCB4eDsKLQlpZiAoeCA8IHgwICsgTEVGVCkgewotCQl0ID0geCwgVFJVTkModCk7Ci0JCWQgPSAodCt4KSooeC10KTsKLQkJdCAqPSB0OwotCQl4eC5hID0gKHQgKyB4KSwgVFJVTkMoeHguYSk7Ci0JCXh4LmIgPSB4IC0geHguYTsgeHguYiArPSB0OyB4eC5iICs9IGQ7Ci0JCXQgPSAob25lLXgwKTsgdCArPSB4OwotCQlkID0gKG9uZS14MCk7IGQgLT0gdDsgZCArPSB4OwotCQl4ID0geHguYSArIHh4LmI7Ci0JfSBlbHNlIHsKLQkJeHguYSA9ICB4LCBUUlVOQyh4eC5hKTsKLQkJeHguYiA9IHggLSB4eC5hOwotCQl0ID0geCAtIHgwOwotCQlkID0gKC14MCAtdCk7IGQgKz0geDsKLQl9Ci0JciA9IHJhdGZ1bl9nYW0odCwgZCk7Ci0JZCA9IHIuYS94LCBUUlVOQyhkKTsKLQlyLmEgLT0gZCp4eC5hOyByLmEgLT0gZCp4eC5iOyByLmEgKz0gci5iOwotCXJldHVybiAoZCArIHIuYS94KTsKLX0KLS8qCi0gKiByZXR1cm5zICh6K2MpXjIgKiBQKHopL1EoeikgKyBhMAotICovCi1zdGF0aWMgc3RydWN0IERvdWJsZQotcmF0ZnVuX2dhbSh6LCBjKQotCWRvdWJsZSB6LCBjOwotewotCWRvdWJsZSBwLCBxOwotCXN0cnVjdCBEb3VibGUgciwgdDsKLQotCXEgPSBRMCAreiooUTEreiooUTIreiooUTMreiooUTQreiooUTUreiooUTYreiooUTcreipROCkpKSkpKSk7Ci0JcCA9IFAwICsgeiooUDEgKyB6KihQMiArIHoqKFAzICsgeipQNCkpKTsKLQotCS8qIHJldHVybiByLmEgKyByLmIgPSBhMCArICh6K2MpXjIqcC9xLCB3aXRoIHIuYSB0cnVuY2F0ZWQgdG8gMjYgYml0cy4gKi8KLQlwID0gcC9xOwotCXQuYSA9IHosIFRSVU5DKHQuYSk7CQkvKiB0IH49IHogKyBjICovCi0JdC5iID0gKHogLSB0LmEpICsgYzsKLQl0LmIgKj0gKHQuYSArIHopOwotCXEgPSAodC5hICo9IHQuYSk7CQkvKiB0ID0gKHorYyleMiAqLwotCVRSVU5DKHQuYSk7Ci0JdC5iICs9IChxIC0gdC5hKTsKLQlyLmEgPSBwLCBUUlVOQyhyLmEpOwkJLyogciA9IFAvUSAqLwotCXIuYiA9IHAgLSByLmE7Ci0JdC5iID0gdC5iKnAgKyB0LmEqci5iICsgYTBfbG87Ci0JdC5hICo9IHIuYTsJCQkvKiB0ID0gKHorYyleMiooUC9RKSAqLwotCXIuYSA9IHQuYSArIGEwX2hpLCBUUlVOQyhyLmEpOwotCXIuYiA9ICgoYTBfaGktci5hKSArIHQuYSkgKyB0LmI7Ci0JcmV0dXJuIChyKTsJCQkvKiByID0gYTAgKyB0ICovCi19Ci0KLXN0YXRpYyBkb3VibGUKLW5lZ19nYW0oeCkKLQlkb3VibGUgeDsKLXsKLQlpbnQgc2duID0gMTsKLQlzdHJ1Y3QgRG91YmxlIGxnLCBsc2luZTsKLQlkb3VibGUgeSwgejsKLQotCXkgPSBmbG9vcih4ICsgLjUpOwotCWlmICh5ID09IHgpCQkvKiBOZWdhdGl2ZSBpbnRlZ2VyLiAqLwotCQlyZXR1cm4gKG9uZS96ZXJvKTsKLQl6ID0gZmFicyh4IC0geSk7Ci0JeSA9IC41KmNlaWwoeCk7Ci0JaWYgKHkgPT0gY2VpbCh5KSkKLQkJc2duID0gLTE7Ci0JaWYgKHogPCAuMjUpCi0JCXogPSBzaW4oTV9QSSp6KTsKLQllbHNlCi0JCXogPSBjb3MoTV9QSSooMC41LXopKTsKLQkvKiBTcGVjaWFsIGNhc2U6IEcoMS14KSA9IEluZjsgRyh4KSBtYXkgYmUgbm9uemVyby4gKi8KLQlpZiAoeCA8IC0xNzApIHsKLQkJaWYgKHggPCAtMTkwKQotCQkJcmV0dXJuICgoZG91YmxlKXNnbip0aW55KnRpbnkpOwotCQl5ID0gb25lIC0geDsJCS8qIGV4YWN0OiAxMjggPCB8eHwgPCAyNTUgKi8KLQkJbGcgPSBsYXJnZV9nYW0oeSk7Ci0JCWxzaW5lID0gX19sb2dfX0QoTV9QSS96KTsJLyogPSBUUlVOQyhsb2codSkpICsgc21hbGwgKi8KLQkJbGcuYSAtPSBsc2luZS5hOwkJLyogZXhhY3QgKG9wcG9zaXRlIHNpZ25zKSAqLwotCQlsZy5iIC09IGxzaW5lLmI7Ci0JCXkgPSAtKGxnLmEgKyBsZy5iKTsKLQkJeiA9ICh5ICsgbGcuYSkgKyBsZy5iOwotCQl5ID0gX19leHBfX0QoeSwgeik7Ci0JCWlmIChzZ24gPCAwKSB5ID0gLXk7Ci0JCXJldHVybiAoeSk7Ci0JfQotCXkgPSBvbmUteDsKLQlpZiAob25lLXkgPT0geCkKLQkJeSA9IHRnYW1tYSh5KTsKLQllbHNlCQkvKiAxLXggaXMgaW5leGFjdCAqLwotCQl5ID0gLXgqdGdhbW1hKC14KTsKLQlpZiAoc2duIDwgMCkgeSA9IC15OwotCXJldHVybiAoTV9QSSAvICh5KnopKTsKLX0KZGlmZiAtLWdpdCBhL2xpYm0vYnNkc3JjL21hdGhpbXBsLmggYi9saWJtL2JzZHNyYy9tYXRoaW1wbC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYTNiMjQ2Li4wMDAwMDAwCi0tLSBhL2xpYm0vYnNkc3JjL21hdGhpbXBsLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChjKSAxOTg4LCAxOTkzCi0gKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQotICogICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgotICoJVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgVW5pdmVyc2l0eSBvZgotICoJQ2FsaWZvcm5pYSwgQmVya2VsZXkgYW5kIGl0cyBjb250cmlidXRvcnMuCi0gKiA0LiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0gKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICoKLSAqCUAoIyltYXRoaW1wbC5oCTguMSAoQmVya2VsZXkpIDYvNC85MwotICogJEZyZWVCU0Q6IHNyYy9saWIvbXN1bi9ic2RzcmMvbWF0aGltcGwuaCx2IDEuNyAyMDA1LzExLzE4IDA1OjAzOjEyIGJkZSBFeHAgJAotICovCi0KLSNpZm5kZWYgX01BVEhJTVBMX0hfCi0jZGVmaW5lCV9NQVRISU1QTF9IXwotCi0jaW5jbHVkZSA8c3lzL2NkZWZzLmg+Ci0jaW5jbHVkZSA8bWF0aC5oPgotCi0jaW5jbHVkZSAiLi4vc3JjL21hdGhfcHJpdmF0ZS5oIgotCi0vKgotICogVFJVTkMoKSBpcyBhIG1hY3JvIHRoYXQgc2V0cyB0aGUgdHJhaWxpbmcgMjcgYml0cyBpbiB0aGUgbWFudGlzc2Egb2YgYW4KLSAqIElFRUUgZG91YmxlIHZhcmlhYmxlIHRvIHplcm8uICBJdCBtdXN0IGJlIGV4cHJlc3Npb24tbGlrZSBmb3Igc3ludGFjdGljCi0gKiByZWFzb25zLCBhbmQgd2UgaW1wbGVtZW50IHRoaXMgZXhwcmVzc2lvbiB1c2luZyBhbiBpbmxpbmUgZnVuY3Rpb24KLSAqIGluc3RlYWQgb2YgYSBwdXJlIG1hY3JvIHRvIGF2b2lkIGRlcGVuZGluZyBvbiB0aGUgZ2NjIGZlYXR1cmUgb2YKLSAqIHN0YXRlbWVudC1leHByZXNzaW9ucy4KLSAqLwotI2RlZmluZQlUUlVOQyhkKQkoX2JfdHJ1bmMoJihkKSkpCi0KLXN0YXRpYyBfX2lubGluZSB2b2lkCi1fYl90cnVuYyh2b2xhdGlsZSBkb3VibGUgKl9kcCkKLXsKLQl1aW50MzJfdCBfbHc7Ci0KLQlHRVRfTE9XX1dPUkQoX2x3LCAqX2RwKTsKLQlTRVRfTE9XX1dPUkQoKl9kcCwgX2x3ICYgMHhmODAwMDAwMCk7Ci19Ci0KLXN0cnVjdCBEb3VibGUgewotCWRvdWJsZQlhOwotCWRvdWJsZQliOwotfTsKLQotLyoKLSAqIEZ1bmN0aW9ucyBpbnRlcm5hbCB0byB0aGUgbWF0aCBwYWNrYWdlLCB5ZXQgbm90IHN0YXRpYy4KLSAqLwotZG91YmxlCV9fZXhwX19EKGRvdWJsZSwgZG91YmxlKTsKLXN0cnVjdCBEb3VibGUgX19sb2dfX0QoZG91YmxlKTsKLQotI2VuZGlmIC8qICFfTUFUSElNUExfSF8gKi8KZGlmZiAtLWdpdCBhL2xpYm0vZGlnaXR0b2ludC5jIGIvbGlibS9kaWdpdHRvaW50LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTgyNDc4OAotLS0gL2Rldi9udWxsCisrKyBiL2xpYm0vZGlnaXR0b2ludC5jCkBAIC0wLDAgKzEsNDYgQEAKKy8qLQorICogQ29weXJpZ2h0IChjKSAyMDA3IERhdmlkIFNjaHVsdHoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqICRGcmVlQlNEJAorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKworLyogZGlnaXR0b2ludCBpcyBpbiB0aGUgRnJlZUJTRCBDIGxpYnJhcnksIGJ1dCBpbXBsZW1lbnRlZCBpbiB0ZXJtcyBvZiBsb2NhbGUgc3R1ZmYuICovCitfX0xJQkNfSElEREVOX18gaW50IGRpZ2l0dG9pbnQoY2hhciBjaCkgeworICBpbnQgZCA9IGNoIC0gJzAnOworICBpZiAoKHVuc2lnbmVkKSBkIDwgMTApIHsKKyAgICByZXR1cm4gZDsKKyAgfQorICBkID0gY2ggLSAnYSc7CisgIGlmICgodW5zaWduZWQpIGQgPCA2KSB7CisgICAgcmV0dXJuIGQgKyAxMDsKKyAgfQorICBkID0gY2ggLSAnQSc7CisgIGlmICgodW5zaWduZWQpIGQgPCA2KSB7CisgICAgcmV0dXJuIGQgKyAxMDsKKyAgfQorICByZXR1cm4gLTE7Cit9CmRpZmYgLS1naXQgYS9saWJtL2Zha2VfbG9uZ19kb3VibGUuYyBiL2xpYm0vZmFrZV9sb25nX2RvdWJsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhYjMyZmUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJtL2Zha2VfbG9uZ19kb3VibGUuYwpAQCAtMCwwICsxLDcyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2luY2x1ZGUgPGZsb2F0Lmg+CisjaW5jbHVkZSA8bWF0aC5oPgorCitleHRlcm4gaW50IF9faXNpbmYoZG91YmxlKTsgLyogaXNpbmYuYyAqLworaW50IChpc2luZikoZG91YmxlIGExKSB7IHJldHVybiBfX2lzaW5mKGExKTsgfQorCisvKgorICogVGhlIEJTRCAibG9uZyBkb3VibGUiIGZ1bmN0aW9ucyBhcmUgYnJva2VuIHdoZW4gc2l6ZW9mKGxvbmcgZG91YmxlKSA9PSBzaXplb2YoZG91YmxlKS4KKyAqIEFuZHJvaWQgd29ya3MgYXJvdW5kIHRob3NlIGNhc2VzIGJ5IHJlcGxhY2luZyB0aGUgYnJva2VuIGZ1bmN0aW9ucyB3aXRoIG91ciBvd24gdHJpdmlhbCBzdHVicworICogdGhhdCBjYWxsIHRoZSByZWd1bGFyICJkb3VibGUiIGZ1bmN0aW9uLgorICovCisKK2ludCBfX2ZwY2xhc3NpZnlsKGxvbmcgZG91YmxlIGExKSB7IHJldHVybiBfX2ZwY2xhc3NpZnlkKGExKTsgfQoraW50IF9faXNmaW5pdGVsKGxvbmcgZG91YmxlIGExKSB7IHJldHVybiBfX2lzZmluaXRlKGExKTsgfQoraW50IF9faXNpbmZsKGxvbmcgZG91YmxlIGExKSB7IHJldHVybiBfX2lzaW5mKGExKTsgfQoraW50IF9faXNuYW5sKGxvbmcgZG91YmxlIGExKSB7IHJldHVybiBpc25hbihhMSk7IH0KK2ludCBfX2lzbm9ybWFsbChsb25nIGRvdWJsZSBhMSkgeyByZXR1cm4gX19pc25vcm1hbChhMSk7IH0KK2ludCBfX3NpZ25iaXRsKGxvbmcgZG91YmxlIGExKSB7IHJldHVybiBfX3NpZ25iaXQoYTEpOyB9CisKK2xvbmcgZG91YmxlIGFjb3NobChsb25nIGRvdWJsZSBhMSkgeyByZXR1cm4gYWNvc2goYTEpOyB9Citsb25nIGRvdWJsZSBhc2luaGwobG9uZyBkb3VibGUgYTEpIHsgcmV0dXJuIGFzaW5oKGExKTsgfQorbG9uZyBkb3VibGUgYXRhbmhsKGxvbmcgZG91YmxlIGExKSB7IHJldHVybiBhdGFuaChhMSk7IH0KK2xvbmcgZG91YmxlIGNicnRsKGxvbmcgZG91YmxlIGExKSB7IHJldHVybiBjYnJ0KGExKTsgfQorbG9uZyBkb3VibGUgY29weXNpZ25sKGxvbmcgZG91YmxlIGExLCBsb25nIGRvdWJsZSBhMikgeyByZXR1cm4gY29weXNpZ24oYTEsIGEyKTsgfQorbG9uZyBkb3VibGUgY29zaGwobG9uZyBkb3VibGUgYTEpIHsgcmV0dXJuIGNvc2goYTEpOyB9Citsb25nIGRvdWJsZSBjb3NsKGxvbmcgZG91YmxlIGExKSB7IHJldHVybiBjb3MoYTEpOyB9Citsb25nIGRvdWJsZSBlcmZjbChsb25nIGRvdWJsZSBhMSkgeyByZXR1cm4gZXJmYyhhMSk7IH0KK2xvbmcgZG91YmxlIGVyZmwobG9uZyBkb3VibGUgYTEpIHsgcmV0dXJuIGVyZihhMSk7IH0KK2xvbmcgZG91YmxlIGV4cG0xbChsb25nIGRvdWJsZSBhMSkgeyByZXR1cm4gZXhwbTEoYTEpOyB9Citsb25nIGRvdWJsZSBmYWJzbChsb25nIGRvdWJsZSBhMSkgeyByZXR1cm4gZmFicyhhMSk7IH0KK2xvbmcgZG91YmxlIGZtYXhsKGxvbmcgZG91YmxlIGExLCBsb25nIGRvdWJsZSBhMikgeyByZXR1cm4gZm1heChhMSwgYTIpOyB9Citsb25nIGRvdWJsZSBmbW9kbChsb25nIGRvdWJsZSBhMSwgbG9uZyBkb3VibGUgYTIpIHsgcmV0dXJuIGZtb2QoYTEsIGEyKTsgfQorbG9uZyBkb3VibGUgZm1pbmwobG9uZyBkb3VibGUgYTEsIGxvbmcgZG91YmxlIGEyKSB7IHJldHVybiBmbWluKGExLCBhMik7IH0KK2ludCBpbG9nYmwobG9uZyBkb3VibGUgYTEpIHsgcmV0dXJuIGlsb2diKGExKTsgfQorbG9uZyBkb3VibGUgbGdhbW1hbChsb25nIGRvdWJsZSBhMSkgeyByZXR1cm4gbGdhbW1hKGExKTsgfQorbG9uZyBsb25nIGxscmludGwobG9uZyBkb3VibGUgYTEpIHsgcmV0dXJuIGxscmludChhMSk7IH0KK2xvbmcgZG91YmxlIGxvZzEwbChsb25nIGRvdWJsZSBhMSkgeyByZXR1cm4gbG9nMTAoYTEpOyB9Citsb25nIGRvdWJsZSBsb2cxcGwobG9uZyBkb3VibGUgYTEpIHsgcmV0dXJuIGxvZzFwKGExKTsgfQorbG9uZyBkb3VibGUgbG9nMmwobG9uZyBkb3VibGUgYTEpIHsgcmV0dXJuIGxvZzIoYTEpOyB9Citsb25nIGRvdWJsZSBsb2dibChsb25nIGRvdWJsZSBhMSkgeyByZXR1cm4gbG9nYihhMSk7IH0KK2xvbmcgZG91YmxlIGxvZ2wobG9uZyBkb3VibGUgYTEpIHsgcmV0dXJuIGxvZyhhMSk7IH0KK2xvbmcgbHJpbnRsKGxvbmcgZG91YmxlIGExKSB7IHJldHVybiBscmludChhMSk7IH0KK2xvbmcgbG9uZyBsbHJvdW5kbChsb25nIGRvdWJsZSBhMSkgeyByZXR1cm4gbGxyb3VuZChhMSk7IH0KK2xvbmcgbHJvdW5kbChsb25nIGRvdWJsZSBhMSkgeyByZXR1cm4gbHJvdW5kKGExKTsgfQorbG9uZyBkb3VibGUgbW9kZmwobG9uZyBkb3VibGUgYTEsIGxvbmcgZG91YmxlKiBhMikgeyByZXR1cm4gbW9kZihhMSwgKGRvdWJsZSopIGEyKTsgfQorbG9uZyBkb3VibGUgcG93bChsb25nIGRvdWJsZSBhMSwgbG9uZyBkb3VibGUgYTIpIHsgcmV0dXJuIHBvdyhhMSwgYTIpOyB9Citsb25nIGRvdWJsZSByaW50bChsb25nIGRvdWJsZSBhMSkgeyByZXR1cm4gcmludChhMSk7IH0KK2xvbmcgZG91YmxlIHJvdW5kbChsb25nIGRvdWJsZSBhMSkgeyByZXR1cm4gcm91bmQoYTEpOyB9Citsb25nIGRvdWJsZSBzY2FsYm5sKGxvbmcgZG91YmxlIGExLCBpbnQgYTIpIHsgcmV0dXJuIHNjYWxibihhMSwgYTIpOyB9Citsb25nIGRvdWJsZSBzaWduaWZpY2FuZGwobG9uZyBkb3VibGUgYTEpIHsgcmV0dXJuIHNpZ25pZmljYW5kKGExKTsgfQorbG9uZyBkb3VibGUgc2luaGwobG9uZyBkb3VibGUgYTEpIHsgcmV0dXJuIHNpbmgoYTEpOyB9Citsb25nIGRvdWJsZSBzaW5sKGxvbmcgZG91YmxlIGExKSB7IHJldHVybiBzaW4oYTEpOyB9Citsb25nIGRvdWJsZSBzcXJ0bChsb25nIGRvdWJsZSBhMSkgeyByZXR1cm4gc3FydChhMSk7IH0KK2xvbmcgZG91YmxlIHRhbmhsKGxvbmcgZG91YmxlIGExKSB7IHJldHVybiB0YW5oKGExKTsgfQorbG9uZyBkb3VibGUgdGFubChsb25nIGRvdWJsZSBhMSkgeyByZXR1cm4gdGFuKGExKTsgfQorbG9uZyBkb3VibGUgdGdhbW1hbChsb25nIGRvdWJsZSBhMSkgeyByZXR1cm4gdGdhbW1hKGExKTsgfQpkaWZmIC0tZ2l0IGEvbGlibS9mcGNsYXNzaWZ5LmMgYi9saWJtL2ZwY2xhc3NpZnkuYwppbmRleCBiYWYxMTZjLi5hMDM5MTM4IDEwMDY0NAotLS0gYS9saWJtL2ZwY2xhc3NpZnkuYworKysgYi9saWJtL2ZwY2xhc3NpZnkuYwpAQCAtMzIsNyArMzIsNyBAQAogI2luY2x1ZGUgPG1hdGguaD4KICNpbmNsdWRlIDxzdGRpbnQuaD4KIAotI2luY2x1ZGUgInNyYy9mcG1hdGguaCIKKyNpbmNsdWRlICJmcG1hdGguaCIKIAogaW50CiBfX2ZwY2xhc3NpZnlmKGZsb2F0IGYpCmRpZmYgLS1naXQgYS9saWJtL2ZwbWF0aC5oIGIvbGlibS9mcG1hdGguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMzc1M2MxCi0tLSAvZGV2L251bGwKKysrIGIvbGlibS9mcG1hdGguaApAQCAtMCwwICsxLDg0IEBACisvKi0KKyAqIENvcHlyaWdodCAoYykgMjAwMyBNaWtlIEJhcmNyb2Z0IDxtaWtlQEZyZWVCU0Qub3JnPgorICogQ29weXJpZ2h0IChjKSAyMDAyIERhdmlkIFNjaHVsdHogPGRhc0BGcmVlQlNELk9SRz4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKgorICogJEZyZWVCU0Q6IHNyYy9saWIvbGliYy9pbmNsdWRlL2ZwbWF0aC5oLHYgMS4zIDIwMDUvMDIvMDYgMDM6MjM6MzEgZGFzIEV4cCAkCisgKi8KKworI2luY2x1ZGUgPGVuZGlhbi5oPgorI2luY2x1ZGUgIl9mcG1hdGguaCIKKwordW5pb24gSUVFRWYyYml0cyB7CisJZmxvYXQJZjsKKwlzdHJ1Y3QgeworI2lmIF9fQllURV9PUkRFUiA9PSBfX0xJVFRMRV9FTkRJQU4KKwkJdW5zaWduZWQgaW50CW1hbgk6MjM7CisJCXVuc2lnbmVkIGludAlleHAJOjg7CisJCXVuc2lnbmVkIGludAlzaWduCToxOworI2Vsc2UgLyogX0JJR19FTkRJQU4gKi8KKwkJdW5zaWduZWQgaW50CXNpZ24JOjE7CisJCXVuc2lnbmVkIGludAlleHAJOjg7CisJCXVuc2lnbmVkIGludAltYW4JOjIzOworI2VuZGlmCisJfSBiaXRzOworfTsKKworI2RlZmluZQlEQkxfTUFOSF9TSVpFCTIwCisjZGVmaW5lCURCTF9NQU5MX1NJWkUJMzIKKwordW5pb24gSUVFRWQyYml0cyB7CisJZG91YmxlCWQ7CisJc3RydWN0IHsKKy8qICNpZmRlZiBfX0FSTUVCX18gKi8KKyNpZiAoX19CWVRFX09SREVSID09IF9fQklHX0VORElBTikgfHwgKGRlZmluZWQoX19hcm1fXykgJiYgIWRlZmluZWQoX19WRlBfRlBfXykpCisJCXVuc2lnbmVkIGludAltYW5oCToyMDsKKwkJdW5zaWduZWQgaW50CWV4cAk6MTE7CisJCXVuc2lnbmVkIGludAlzaWduCToxOworCQl1bnNpZ25lZCBpbnQJbWFubAk6MzI7CisjZWxpZiAgX19CWVRFX09SREVSID09IF9fTElUVExFX0VORElBTgorCQl1bnNpZ25lZCBpbnQJbWFubAk6MzI7CisJCXVuc2lnbmVkIGludAltYW5oCToyMDsKKwkJdW5zaWduZWQgaW50CWV4cAk6MTE7CisJCXVuc2lnbmVkIGludAlzaWduCToxOworI2VsaWYgX19CWVRFX09SREVSID09IF9fQklHX0VORElBTgorCQl1bnNpZ25lZCBpbnQJc2lnbgk6MTsKKwkJdW5zaWduZWQgaW50CWV4cAk6MTE7CisJCXVuc2lnbmVkIGludAltYW5oCToyMDsKKwkJdW5zaWduZWQgaW50CW1hbmwJOjMyOworI2VuZGlmCisJfSBiaXRzOworfTsKKworLyoKKyAqIFRoZSBCU0QgImxvbmcgZG91YmxlIiBmdW5jdGlvbnMgYXJlIGJyb2tlbiB3aGVuIHNpemVvZihsb25nIGRvdWJsZSkgPT0gc2l6ZW9mKGRvdWJsZSkuCisgKiBBbmRyb2lkIHdvcmtzIGFyb3VuZCB0aG9zZSBjYXNlcyBieSByZXBsYWNpbmcgdGhlIGJyb2tlbiBmdW5jdGlvbnMgd2l0aCBvdXIgb3duIHRyaXZpYWwgc3R1YnMKKyAqIHRoYXQgY2FsbCB0aGUgcmVndWxhciAiZG91YmxlIiBmdW5jdGlvbi4KKyAqLworI2RlZmluZSBfX2ZwY2xhc3NpZnlsIF9fYnJva2VuX19mcGNsYXNzaWZ5CisjZGVmaW5lIF9faXNmaW5pdGVsIF9fYnJva2VuX19pc2Zpbml0ZWwKKyNkZWZpbmUgX19pc2luZmwgX19icm9rZW5fX2lzaW5mbAorI2RlZmluZSBfX2lzbmFubCBfX2Jyb2tlbl9faXNuYW5sCisjZGVmaW5lIF9faXNub3JtYWxsIF9fYnJva2VuX19pc25vcm1hbGwKKyNkZWZpbmUgX19zaWduYml0bCBfX2Jyb2tlbl9zaWduYml0bApkaWZmIC0tZ2l0IGEvbGlibS9pMzg2L19mcG1hdGguaCBiL2xpYm0vaTM4Ni9fZnBtYXRoLmgKaW5kZXggOTI3MTlkOS4uNGYxZjVmNCAxMDA2NDQKLS0tIGEvbGlibS9pMzg2L19mcG1hdGguaAorKysgYi9saWJtL2kzODYvX2ZwbWF0aC5oCkBAIC0yMyw3ICsyMyw3IEBACiAgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCiAgKiBTVUNIIERBTUFHRS4KICAqCi0gKiAkRnJlZUJTRDogc3JjL2xpYi9saWJjL2kzODYvX2ZwbWF0aC5oLHYgMS41IDIwMDUvMDMvMDcgMDQ6NTU6MjIgZGFzIEV4cCAkCisgKiAkRnJlZUJTRCQKICAqLwogCiB1bmlvbiBJRUVFbDJiaXRzIHsKQEAgLTM1LDYgKzM1LDExIEBACiAJCXVuc2lnbmVkIGludAlzaWduCToxOwogCQl1bnNpZ25lZCBpbnQJanVuawk6MTY7CiAJfSBiaXRzOworCXN0cnVjdCB7CisJCXVuc2lnbmVkIGxvbmcgbG9uZyBtYW4JOjY0OworCQl1bnNpZ25lZCBpbnQgCWV4cHNpZ24JOjE2OworCQl1bnNpZ25lZCBpbnQJanVuawk6MTY7CisJfSB4Yml0czsKIH07CiAKICNkZWZpbmUJTERCTF9OQklUCTB4ODAwMDAwMDAKQEAgLTQ2LDQgKzUxLDQgQEAKICNkZWZpbmUJTERCTF9UT19BUlJBWTMyKHUsIGEpIGRvIHsJCQlcCiAJKGEpWzBdID0gKHVpbnQzMl90KSh1KS5iaXRzLm1hbmw7CQlcCiAJKGEpWzFdID0gKHVpbnQzMl90KSh1KS5iaXRzLm1hbmg7CQlcCi19IHdoaWxlKDApCit9IHdoaWxlICgwKQpkaWZmIC0tZ2l0IGEvbGlibS9pMzg3L01ha2VmaWxlLmluYyBiL2xpYm0vaTM4Ny9NYWtlZmlsZS5pbmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ4M2E1NmIuLjAwMDAwMDAKLS0tIGEvbGlibS9pMzg3L01ha2VmaWxlLmluYworKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLSMgJEZyZWVCU0Q6IHNyYy9saWIvbXN1bi9pMzg3L01ha2VmaWxlLmluYyx2IDEuNyAyMDA1LzA0LzE2IDIxOjEyOjU1IGRhcyBFeHAgJAotCi1BUkNIX1NSQ1MgPSBlX2V4cC5TIGVfZm1vZC5TIGVfbG9nLlMgZV9sb2cxMC5TIFwKLQkgICAgZV9yZW1haW5kZXIuUyBlX3NjYWxiLlMgZV9zcXJ0LlMgc19jZWlsLlMgc19jb3B5c2lnbi5TIFwKLQkgICAgc19jb3MuUyBzX2Zpbml0ZS5TIHNfZmxvb3IuUyBzX2xscmludC5TIHNfbG9nYi5TIHNfbHJpbnQuUyBcCi0JICAgIHNfcmVtcXVvLlMgc19yaW50LlMgc19zY2FsYm4uUyBzX3NpZ25pZmljYW5kLlMgc19zaW4uUyBzX3Rhbi5TIFwKLQkgICAgc190cnVuYy5TCi0KLSMgZmxvYXQgY291bnRlcnBhcnRzCi1BUkNIX1NSQ1MrPSBlX2xvZzEwZi5TIGVfbG9nZi5TIGVfcmVtYWluZGVyZi5TIGVfc2NhbGJmLlMgXAotCSAgICBlX3NxcnRmLlMgc19jZWlsZi5TIHNfY29weXNpZ25mLlMgc19mbG9vcmYuUyBcCi0JICAgIHNfbGxyaW50Zi5TIHNfbG9nYmYuUyBzX2xyaW50Zi5TIFwKLQkgICAgc19yZW1xdW9mLlMgc19yaW50Zi5TIHNfc2NhbGJuZi5TIHNfc2lnbmlmaWNhbmRmLlMgc190cnVuY2YuUwotCi0jIGxvbmcgZG91YmxlIGNvdW50ZXJwYXJ0cwotQVJDSF9TUkNTKz0gc19jZWlsbC5TIHNfY29weXNpZ25sLlMgc19mbG9vcmwuUyBzX3NjYWxibmwuUyBzX3RydW5jbC5TCi0KLUxEQkxfUFJFQyA9IDY0CSMgWFhYIDY0LWJpdCBmb3JtYXQsIGJ1dCB0cnVuY2F0ZWQgdG8gNTMgYml0cwpkaWZmIC0tZ2l0IGEvbGlibS9pMzg3L2VfZXhwLlMgYi9saWJtL2kzODcvZV9leHAuUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDA4YTZlMS4uMDAwMDAwMAotLS0gYS9saWJtL2kzODcvZV9leHAuUworKysgL2Rldi9udWxsCkBAIC0xLDk4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTMsOTQgV2lubmluZyBTdHJhdGVnaWVzLCBJbmMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCi0gKiAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6Ci0gKiAgICAgIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgV2lubmluZyBTdHJhdGVnaWVzLCBJbmMuCi0gKiA0LiBUaGUgbmFtZSBvZiB0aGUgYXV0aG9yIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKLSAqICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0gKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgotICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAotICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0gKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vKgotICogV3JpdHRlbiBieToKLSAqCUouVC4gQ29ua2xpbiAoanRjQHdpbXNleS5jb20pLCBXaW5uaW5nIFN0cmF0ZWdpZXMsIEluYy4KLSAqLwotCi0jaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KLQotUkNTSUQoIiRGcmVlQlNEOiBzcmMvbGliL21zdW4vaTM4Ny9lX2V4cC5TLHYgMS4xMSAyMDA1LzEwLzMwIDEyOjIxOjAyIGJkZSBFeHAgJCIpCi0KLS8qIGVeeCA9IDJeKHggKiBsb2cyKGUpKSAqLwotRU5UUlkoZXhwKQotCS8qCi0JICogSWYgeCBpcyArLUluZiwgdGhlbiB0aGUgc3VidHJhY3Rpb24gd291bGQgZ2l2ZSBJbmYtSW5mID0gTmFOLgotCSAqIEF2b2lkIHRoaXMuICBBbHNvIGF2b2lkIGl0IGlmIHggaXMgTmFOIGZvciBjb252ZW5pZW5jZS4KLQkgKi8KLQltb3ZsCTgoJWVzcCksJWVheAotCWFuZGwJJDB4N2ZmZmZmZmYsJWVheAotCWNtcGwJJDB4N2ZmMDAwMDAsJWVheAotCWphZQl4X0luZl9vcl9OYU4KLQotCWZsZGwJNCglZXNwKQotCi0JLyoKLQkgKiBFeHRlbmRlZCBwcmVjaXNpb24gaXMgbmVlZGVkIHRvIHJlZHVjZSB0aGUgbWF4aW11bSBlcnJvciBmcm9tCi0JICogaHVuZHJlZHMgb2YgdWxwcyB0byBsZXNzIHRoYW4gMSB1bHAuICBTd2l0Y2ggdG8gaXQgaWYgbmVjZXNzYXJ5LgotCSAqIFdlIG1heSBhcyB3ZWxsIHNldCB0aGUgcm91bmRpbmcgbW9kZSB0byB0by1uZWFyZXN0IGFuZCBtYXNrIHRyYXBzCi0JICogaWYgd2Ugc3dpdGNoLgotCSAqLwotCWZzdGN3CTQoJWVzcCkKLQltb3ZsCTQoJWVzcCksJWVheAotCWFuZGwJJDB4MDMwMCwlZWF4Ci0JY21wbAkkMHgwMzAwLCVlYXgJCS8qIFJDID09IDAgJiYgUEMgPT0gMz8gKi8KLQlqZQkxZgkJCS8qIGp1bXAgaWYgbW9kZSBpcyBnb29kICovCi0JbW92bAkkMHgxMzdmLDgoJWVzcCkKLQlmbGRjdwk4KCVlc3ApCi0xOgotCWZsZGwyZQotCWZtdWxwCQkJCS8qIHggKiBsb2cyKGUpICovCi0JZnN0CSVzdCgxKQotCWZybmRpbnQJCQkJLyogaW50KHggKiBsb2cyKGUpKSAqLwotCWZzdAklc3QoMikKLQlmc3VicnAJCQkJLyogZnJhY3QoeCAqIGxvZzIoZSkpICovCi0JZjJ4bTEJCQkJLyogMl4oZnJhY3QoeCAqIGxvZzIoZSkpKSAtIDEgKi8gCi0JZmxkMQotCWZhZGRwCQkJCS8qIDJeKGZyYWN0KHggKiBsb2cyKGUpKSkgKi8KLQlmc2NhbGUJCQkJLyogZV54ICovCi0JZnN0cAklc3QoMSkKLQlqZQkxZgotCWZsZGN3CTQoJWVzcCkKLTE6Ci0JcmV0Ci0KLXhfSW5mX29yX05hTjoKLQkvKgotCSAqIFJldHVybiAwIGlmIHggaXMgLUluZi4gIE90aGVyd2lzZSBqdXN0IHJldHVybiB4OyB3aGVuIHggaXMgSW5mCi0JICogdGhpcyBnaXZlcyBJbmYsIGFuZCB3aGVuIHggaXMgYSBOYU4gdGhpcyBnaXZlcyB0aGUgc2FtZSByZXN1bHQKLQkgKiBhcyAoeCArIHgpICh4IHF1aWV0ZWQpLgotCSAqLwotCWNtcGwJJDB4ZmZmMDAwMDAsOCglZXNwKQotCWpuZQl4X25vdF9taW51c19JbmYKLQljbXBsCSQwLDQoJWVzcCkKLQlqbmUJeF9ub3RfbWludXNfSW5mCi0JZmxkegotCXJldAotCi14X25vdF9taW51c19JbmY6Ci0JZmxkbAk0KCVlc3ApCi0JcmV0CmRpZmYgLS1naXQgYS9saWJtL2kzODcvZV9mbW9kLlMgYi9saWJtL2kzODcvZV9mbW9kLlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIzMzQ3NmYuLjAwMDAwMDAKLS0tIGEvbGlibS9pMzg3L2VfZm1vZC5TCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykgMTk5Myw5NCBXaW5uaW5nIFN0cmF0ZWdpZXMsIEluYy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKLSAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKLSAqICAgICAgVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSBXaW5uaW5nIFN0cmF0ZWdpZXMsIEluYy4KLSAqIDQuIFRoZSBuYW1lIG9mIHRoZSBhdXRob3IgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cwotICogICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKLSAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCi0gKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCi0gKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8qCi0gKiBXcml0dGVuIGJ5OgotICoJSi5ULiBDb25rbGluIChqdGNAd2ltc2V5LmNvbSksIFdpbm5pbmcgU3RyYXRlZ2llcywgSW5jLgotICovCi0KLSNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgotCi1SQ1NJRCgiJEZyZWVCU0Q6IHNyYy9saWIvbXN1bi9pMzg3L2VfZm1vZC5TLHYgMS44IDIwMDUvMDIvMDQgMTQ6MDg6MzIgZGFzIEV4cCAkIikKLQotRU5UUlkoZm1vZCkKLQlmbGRsCTEyKCVlc3ApCi0JZmxkbAk0KCVlc3ApCi0xOglmcHJlbQotCWZzdHN3CSVheAotCXNhaGYKLQlqcAkxYgotCWZzdHAJJXN0KDEpCi0JcmV0CmRpZmYgLS1naXQgYS9saWJtL2kzODcvZV9sb2cuUyBiL2xpYm0vaTM4Ny9lX2xvZy5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYWFhYzg3Li4wMDAwMDAwCi0tLSBhL2xpYm0vaTM4Ny9lX2xvZy5TCisrKyAvZGV2L251bGwKQEAgLTEsNDQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykgMTk5Myw5NCBXaW5uaW5nIFN0cmF0ZWdpZXMsIEluYy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKLSAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKLSAqICAgICAgVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSBXaW5uaW5nIFN0cmF0ZWdpZXMsIEluYy4KLSAqIDQuIFRoZSBuYW1lIG9mIHRoZSBhdXRob3IgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cwotICogICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKLSAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCi0gKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCi0gKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8qCi0gKiBXcml0dGVuIGJ5OgotICoJSi5ULiBDb25rbGluIChqdGNAd2ltc2V5LmNvbSksIFdpbm5pbmcgU3RyYXRlZ2llcywgSW5jLgotICovCi0KLSNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgotCi1SQ1NJRCgiJEZyZWVCU0Q6IHNyYy9saWIvbXN1bi9pMzg3L2VfbG9nLlMsdiAxLjcgMjAwNS8wMi8wNCAxNDowODozMiBkYXMgRXhwICQiKQotCi1FTlRSWShsb2cpCi0JZmxkbG4yCi0JZmxkbAk0KCVlc3ApCi0JZnlsMngKLQlyZXQKZGlmZiAtLWdpdCBhL2xpYm0vaTM4Ny9lX2xvZzEwLlMgYi9saWJtL2kzODcvZV9sb2cxMC5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3Njk1ZWY2Li4wMDAwMDAwCi0tLSBhL2xpYm0vaTM4Ny9lX2xvZzEwLlMKKysrIC9kZXYvbnVsbApAQCAtMSw0NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChjKSAxOTkzLDk0IFdpbm5pbmcgU3RyYXRlZ2llcywgSW5jLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQotICogICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgotICogICAgICBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IFdpbm5pbmcgU3RyYXRlZ2llcywgSW5jLgotICogNC4gVGhlIG5hbWUgb2YgdGhlIGF1dGhvciBtYXkgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCi0gKiAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUgotICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KLSAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKLSAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLyoKLSAqIFdyaXR0ZW4gYnk6Ci0gKglKLlQuIENvbmtsaW4gKGp0Y0B3aW1zZXkuY29tKSwgV2lubmluZyBTdHJhdGVnaWVzLCBJbmMuCi0gKi8KLQotI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+Ci0KLVJDU0lEKCIkRnJlZUJTRDogc3JjL2xpYi9tc3VuL2kzODcvZV9sb2cxMC5TLHYgMS43IDIwMDUvMDIvMDQgMTQ6MDg6MzIgZGFzIEV4cCAkIikKLQotRU5UUlkobG9nMTApCi0JZmxkbGcyCi0JZmxkbAk0KCVlc3ApCi0JZnlsMngKLQlyZXQKZGlmZiAtLWdpdCBhL2xpYm0vaTM4Ny9lX2xvZzEwZi5TIGIvbGlibS9pMzg3L2VfbG9nMTBmLlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJkZDY3MDguLjAwMDAwMDAKLS0tIGEvbGlibS9pMzg3L2VfbG9nMTBmLlMKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi0vKgotICogV3JpdHRlbiBieSBKLlQuIENvbmtsaW4gPGp0Y0BuZXRic2Qub3JnPi4KLSAqIFB1YmxpYyBkb21haW4uCi0gKi8KLQotI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+Ci0KLV9fRkJTRElEKCIkRnJlZUJTRDogc3JjL2xpYi9tc3VuL2kzODcvZV9sb2cxMGYuUyx2IDEuMiAyMDA1LzAyLzA0IDE0OjA4OjMyIGRhcyBFeHAgJCIpOwotLyogUkNTSUQoIiROZXRCU0Q6IGVfbG9nMTBmLlMsdiAxLjEgMTk5Ni8wNy8wMyAxNjo1MDoyMiBqdGMgRXhwICQiKSAqLwotCi1FTlRSWShsb2cxMGYpCi0JZmxkbGcyCi0JZmxkcwk0KCVlc3ApCi0JZnlsMngKLQlyZXQKZGlmZiAtLWdpdCBhL2xpYm0vaTM4Ny9lX2xvZ2YuUyBiL2xpYm0vaTM4Ny9lX2xvZ2YuUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWYzYmQwMC4uMDAwMDAwMAotLS0gYS9saWJtL2kzODcvZV9sb2dmLlMKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi0vKgotICogV3JpdHRlbiBieSBKLlQuIENvbmtsaW4gPGp0Y0BuZXRic2Qub3JnPi4KLSAqIFB1YmxpYyBkb21haW4uCi0gKi8KLQotI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+Ci0KLV9fRkJTRElEKCIkRnJlZUJTRDogc3JjL2xpYi9tc3VuL2kzODcvZV9sb2dmLlMsdiAxLjIgMjAwNS8wMi8wNCAxNDowODozMiBkYXMgRXhwICQiKTsKLS8qIFJDU0lEKCIkTmV0QlNEOiBlX2xvZ2YuUyx2IDEuMiAxOTk2LzA3LzA2IDAwOjE1OjQ1IGp0YyBFeHAgJCIpICovCi0KLUVOVFJZKGxvZ2YpCi0JZmxkbG4yCi0JZmxkcwk0KCVlc3ApCi0JZnlsMngKLQlyZXQKZGlmZiAtLWdpdCBhL2xpYm0vaTM4Ny9lX3JlbWFpbmRlci5TIGIvbGlibS9pMzg3L2VfcmVtYWluZGVyLlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVmMGQ2NzkuLjAwMDAwMDAKLS0tIGEvbGlibS9pMzg3L2VfcmVtYWluZGVyLlMKKysrIC9kZXYvbnVsbApAQCAtMSw0OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChjKSAxOTkzLDk0IFdpbm5pbmcgU3RyYXRlZ2llcywgSW5jLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQotICogICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgotICogICAgICBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IFdpbm5pbmcgU3RyYXRlZ2llcywgSW5jLgotICogNC4gVGhlIG5hbWUgb2YgdGhlIGF1dGhvciBtYXkgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCi0gKiAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUgotICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KLSAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKLSAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLyoKLSAqIFdyaXR0ZW4gYnk6Ci0gKglKLlQuIENvbmtsaW4gKGp0Y0B3aW1zZXkuY29tKSwgV2lubmluZyBTdHJhdGVnaWVzLCBJbmMuCi0gKi8KLQotI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+Ci0KLVJDU0lEKCIkRnJlZUJTRDogc3JjL2xpYi9tc3VuL2kzODcvZV9yZW1haW5kZXIuUyx2IDEuOCAyMDA1LzAyLzA0IDE0OjA4OjMyIGRhcyBFeHAgJCIpCi0KLUVOVFJZKHJlbWFpbmRlcikKLQlmbGRsCTEyKCVlc3ApCi0JZmxkbAk0KCVlc3ApCi0xOglmcHJlbTEKLQlmc3RzdwklYXgKLQlzYWhmCi0JanAJMWIKLQlmc3RwCSVzdCgxKQotCXJldApkaWZmIC0tZ2l0IGEvbGlibS9pMzg3L2VfcmVtYWluZGVyZi5TIGIvbGlibS9pMzg3L2VfcmVtYWluZGVyZi5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZDFjYTc5Li4wMDAwMDAwCi0tLSBhL2xpYm0vaTM4Ny9lX3JlbWFpbmRlcmYuUworKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLS8qCi0gKiBXcml0dGVuIGJ5IEouVC4gQ29ua2xpbiA8anRjQG5ldGJzZC5vcmc+LgotICogUHVibGljIGRvbWFpbi4KLSAqLwotCi0jaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KLQotX19GQlNESUQoIiRGcmVlQlNEOiBzcmMvbGliL21zdW4vaTM4Ny9lX3JlbWFpbmRlcmYuUyx2IDEuMiAyMDA1LzAyLzA0IDE0OjA4OjMyIGRhcyBFeHAgJCIpOwotLyogUkNTSUQoIiROZXRCU0Q6IGVfcmVtYWluZGVyZi5TLHYgMS4yIDE5OTUvMDUvMDggMjM6NDk6NDcganRjIEV4cCAkIikgKi8KLQotRU5UUlkocmVtYWluZGVyZikKLQlmbGRzCTgoJWVzcCkKLQlmbGRzCTQoJWVzcCkKLTE6CWZwcmVtMQotCWZzdHN3CSVheAotCXNhaGYKLQlqcAkxYgotCWZzdHAJJXN0KDEpCi0JcmV0CmRpZmYgLS1naXQgYS9saWJtL2kzODcvZV9zY2FsYi5TIGIvbGlibS9pMzg3L2Vfc2NhbGIuUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGQ4NjU3Zi4uMDAwMDAwMAotLS0gYS9saWJtL2kzODcvZV9zY2FsYi5TCisrKyAvZGV2L251bGwKQEAgLTEsNDUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykgMTk5NCBXaW5uaW5nIFN0cmF0ZWdpZXMsIEluYy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKLSAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKLSAqICAgICAgVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSBXaW5uaW5nIFN0cmF0ZWdpZXMsIEluYy4KLSAqIDQuIFRoZSBuYW1lIG9mIHRoZSBhdXRob3IgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cwotICogICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKLSAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCi0gKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCi0gKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8qCi0gKiBXcml0dGVuIGJ5OgotICoJSi5ULiBDb25rbGluIChqdGNAd2ltc2V5LmNvbSksIFdpbm5pbmcgU3RyYXRlZ2llcywgSW5jLgotICovCi0KLSNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgotCi1SQ1NJRCgiJEZyZWVCU0Q6IHNyYy9saWIvbXN1bi9pMzg3L2Vfc2NhbGIuUyx2IDEuOCAyMDA1LzAyLzA0IDE0OjA4OjMyIGRhcyBFeHAgJCIpCi0KLUVOVFJZKHNjYWxiKQotCWZsZGwJMTIoJWVzcCkKLQlmbGRsCTQoJWVzcCkKLQlmc2NhbGUKLQlmc3RwCSVzdCgxKQotCXJldApkaWZmIC0tZ2l0IGEvbGlibS9pMzg3L2Vfc2NhbGJmLlMgYi9saWJtL2kzODcvZV9zY2FsYmYuUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWRlMGQ3MC4uMDAwMDAwMAotLS0gYS9saWJtL2kzODcvZV9zY2FsYmYuUworKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLS8qCi0gKiBXcml0dGVuIGJ5IEouVC4gQ29ua2xpbiA8anRjQG5ldGJzZC5vcmc+LgotICogUHVibGljIGRvbWFpbi4KLSAqLwotCi0jaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KLQotX19GQlNESUQoIiRGcmVlQlNEOiBzcmMvbGliL21zdW4vaTM4Ny9lX3NjYWxiZi5TLHYgMS4yIDIwMDUvMDIvMDQgMTQ6MDg6MzIgZGFzIEV4cCAkIik7Ci0vKiBSQ1NJRCgiJE5ldEJTRDogZV9zY2FsYmYuUyx2IDEuMSAxOTk2LzA3LzAzIDE2OjUwOjI0IGp0YyBFeHAgJCIpICovCi0KLUVOVFJZKHNjYWxiZikKLQlmbGRzCTgoJWVzcCkKLQlmbGRzCTQoJWVzcCkKLQlmc2NhbGUKLQlyZXQKZGlmZiAtLWdpdCBhL2xpYm0vaTM4Ny9lX3NxcnQuUyBiL2xpYm0vaTM4Ny9lX3NxcnQuUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjdlOTYyMS4uMDAwMDAwMAotLS0gYS9saWJtL2kzODcvZV9zcXJ0LlMKKysrIC9kZXYvbnVsbApAQCAtMSw0MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChjKSAxOTkzLDk0IFdpbm5pbmcgU3RyYXRlZ2llcywgSW5jLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQotICogICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgotICogICAgICBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IFdpbm5pbmcgU3RyYXRlZ2llcywgSW5jLgotICogNC4gVGhlIG5hbWUgb2YgdGhlIGF1dGhvciBtYXkgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCi0gKiAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUgotICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KLSAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKLSAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLyoKLSAqIFdyaXR0ZW4gYnk6Ci0gKglKLlQuIENvbmtsaW4gKGp0Y0B3aW1zZXkuY29tKSwgV2lubmluZyBTdHJhdGVnaWVzLCBJbmMuCi0gKi8KLQotI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+Ci0KLVJDU0lEKCIkRnJlZUJTRDogc3JjL2xpYi9tc3VuL2kzODcvZV9zcXJ0LlMsdiAxLjcgMjAwNS8wMi8wNCAxNDowODozMiBkYXMgRXhwICQiKQotCi1FTlRSWShzcXJ0KQotCWZsZGwJNCglZXNwKQotCWZzcXJ0Ci0JcmV0CmRpZmYgLS1naXQgYS9saWJtL2kzODcvZV9zcXJ0Zi5TIGIvbGlibS9pMzg3L2Vfc3FydGYuUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODZjNTZhOS4uMDAwMDAwMAotLS0gYS9saWJtL2kzODcvZV9zcXJ0Zi5TCisrKyAvZGV2L251bGwKQEAgLTEsMTQgKzAsMCBAQAotLyoKLSAqIFdyaXR0ZW4gYnkgSi5ULiBDb25rbGluIDxqdGNAbmV0YnNkLm9yZz4uCi0gKiBQdWJsaWMgZG9tYWluLgotICovCi0KLSNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgotCi1fX0ZCU0RJRCgiJEZyZWVCU0Q6IHNyYy9saWIvbXN1bi9pMzg3L2Vfc3FydGYuUyx2IDEuMiAyMDA1LzAyLzA0IDE0OjA4OjMyIGRhcyBFeHAgJCIpOwotLyogUkNTSUQoIiROZXRCU0Q6IGVfc3FydGYuUyx2IDEuMiAxOTk1LzA1LzA4IDIzOjUwOjE0IGp0YyBFeHAgJCIpICovCi0KLUVOVFJZKHNxcnRmKQotCWZsZHMJNCglZXNwKQotCWZzcXJ0Ci0JcmV0CmRpZmYgLS1naXQgYS9saWJtL2kzODcvc19jZWlsLlMgYi9saWJtL2kzODcvc19jZWlsLlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhlNzNiMzguLjAwMDAwMDAKLS0tIGEvbGlibS9pMzg3L3NfY2VpbC5TCisrKyAvZGV2L251bGwKQEAgLTEsNTggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykgMTk5Myw5NCBXaW5uaW5nIFN0cmF0ZWdpZXMsIEluYy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKLSAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKLSAqICAgICAgVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSBXaW5uaW5nIFN0cmF0ZWdpZXMsIEluYy4KLSAqIDQuIFRoZSBuYW1lIG9mIHRoZSBhdXRob3IgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cwotICogICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKLSAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCi0gKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCi0gKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8qCi0gKiBXcml0dGVuIGJ5OgotICoJSi5ULiBDb25rbGluIChqdGNAd2ltc2V5LmNvbSksIFdpbm5pbmcgU3RyYXRlZ2llcywgSW5jLgotICovCi0KLSNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgotCi1SQ1NJRCgiJEZyZWVCU0Q6IHNyYy9saWIvbXN1bi9pMzg3L3NfY2VpbC5TLHYgMS43IDE5OTkvMDgvMjggMDA6MDY6MTEgcGV0ZXIgRXhwICQiKQotCi1FTlRSWShjZWlsKQotCXB1c2hsCSVlYnAKLQltb3ZsCSVlc3AsJWVicAotCXN1YmwJJDgsJWVzcAotCi0JZnN0Y3cJLTQoJWVicCkJCS8qIHN0b3JlIGZwdSBjb250cm9sIHdvcmQgKi8KLQltb3Z3CS00KCVlYnApLCVkeAotCW9ydwkkMHgwODAwLCVkeAkJLyogcm91bmQgdG93YXJkcyArb28gKi8KLQlhbmR3CSQweGZiZmYsJWR4Ci0JbW92dwklZHgsLTgoJWVicCkKLQlmbGRjdwktOCglZWJwKQkJLyogbG9hZCBtb2RmaWVkIGNvbnRyb2wgd29yZCAqLwotCi0JZmxkbAk4KCVlYnApOwkJLyogcm91bmQgKi8KLQlmcm5kaW50Ci0KLQlmbGRjdwktNCglZWJwKQkJLyogcmVzdG9yZSBvcmlnaW5hbCBjb250cm9sIHdvcmQgKi8KLQotCWxlYXZlCi0JcmV0CmRpZmYgLS1naXQgYS9saWJtL2kzODcvc19jZWlsZi5TIGIvbGlibS9pMzg3L3NfY2VpbGYuUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTUyY2E3Yi4uMDAwMDAwMAotLS0gYS9saWJtL2kzODcvc19jZWlsZi5TCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotLyoKLSAqIFdyaXR0ZW4gYnkgSi5ULiBDb25rbGluIDxqdGNAbmV0YnNkLm9yZz4uCi0gKiBQdWJsaWMgZG9tYWluLgotICovCi0KLSNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgotCi1fX0ZCU0RJRCgiJEZyZWVCU0Q6IHNyYy9saWIvbXN1bi9pMzg3L3NfY2VpbGYuUyx2IDEuMiAyMDA1LzA1LzA2IDE1OjQ0OjIwIGRlaXNjaGVuIEV4cCAkIik7Ci0vKiBSQ1NJRCgiJE5ldEJTRDogc19jZWlsZi5TLHYgMS4zIDE5OTUvMDUvMDggMjM6NTI6NDQganRjIEV4cCAkIikgKi8KLQotRU5UUlkoY2VpbGYpCi0JcHVzaGwJJWVicAotCW1vdmwJJWVzcCwlZWJwCi0Jc3VibAkkOCwlZXNwCi0KLQlmc3RjdwktNCglZWJwKQkJLyogc3RvcmUgZnB1IGNvbnRyb2wgd29yZCAqLwotCW1vdncJLTQoJWVicCksJWR4Ci0Jb3J3CSQweDA4MDAsJWR4CQkvKiByb3VuZCB0b3dhcmRzICtvbyAqLwotCWFuZHcJJDB4ZmJmZiwlZHgKLQltb3Z3CSVkeCwtOCglZWJwKQotCWZsZGN3CS04KCVlYnApCQkvKiBsb2FkIG1vZGZpZWQgY29udHJvbCB3b3JkICovCi0KLQlmbGRzCTgoJWVicCk7CQkvKiByb3VuZCAqLwotCWZybmRpbnQKLQotCWZsZGN3CS00KCVlYnApCQkvKiByZXN0b3JlIG9yaWdpbmFsIGNvbnRyb2wgd29yZCAqLwotCi0JbGVhdmUKLQlyZXQKZGlmZiAtLWdpdCBhL2xpYm0vaTM4Ny9zX2NlaWxsLlMgYi9saWJtL2kzODcvc19jZWlsbC5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNmMzYzQxLi4wMDAwMDAwCi0tLSBhL2xpYm0vaTM4Ny9zX2NlaWxsLlMKKysrIC9kZXYvbnVsbApAQCAtMSwyNyArMCwwIEBACi0vKgotICogQmFzZWQgb24gY29kZSB3cml0dGVuIGJ5IEouVC4gQ29ua2xpbiA8anRjQE5ldEJTRC5vcmc+LgotICogUHVibGljIGRvbWFpbi4KLSAqLwotCQotI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+Ci1fX0ZCU0RJRCgiJEZyZWVCU0Q6IHNyYy9saWIvbXN1bi9pMzg3L3NfY2VpbGwuUyx2IDEuMSAyMDA1LzA0LzE2IDIxOjEyOjU1IGRhcyBFeHAgJCIpCi0KLUVOVFJZKGNlaWxsKQotCXB1c2hsCSVlYnAKLQltb3ZsCSVlc3AsJWVicAotCXN1YmwJJDgsJWVzcAotCi0JZnN0Y3cJLTQoJWVicCkJCS8qIHN0b3JlIGZwdSBjb250cm9sIHdvcmQgKi8KLQltb3Z3CS00KCVlYnApLCVkeAotCW9ydwkkMHgwODAwLCVkeAkJLyogcm91bmQgdG93YXJkcyArb28gKi8KLQlhbmR3CSQweGZiZmYsJWR4Ci0JbW92dwklZHgsLTgoJWVicCkKLQlmbGRjdwktOCglZWJwKQkJLyogbG9hZCBtb2RmaWVkIGNvbnRyb2wgd29yZCAqLwotCi0JZmxkdAk4KCVlYnApCQkJLyogcm91bmQgKi8KLQlmcm5kaW50Ci0KLQlmbGRjdwktNCglZWJwKQkJLyogcmVzdG9yZSBvcmlnaW5hbCBjb250cm9sIHdvcmQgKi8KLQotCWxlYXZlCi0JcmV0CmRpZmYgLS1naXQgYS9saWJtL2kzODcvc19jb3B5c2lnbi5TIGIvbGlibS9pMzg3L3NfY29weXNpZ24uUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmVjYzc3MC4uMDAwMDAwMAotLS0gYS9saWJtL2kzODcvc19jb3B5c2lnbi5TCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykgMTk5Myw5NCBXaW5uaW5nIFN0cmF0ZWdpZXMsIEluYy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKLSAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKLSAqICAgICAgVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSBXaW5uaW5nIFN0cmF0ZWdpZXMsIEluYy4KLSAqIDQuIFRoZSBuYW1lIG9mIHRoZSBhdXRob3IgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cwotICogICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUgotICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KLSAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKLSAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLyoKLSAqIFdyaXR0ZW4gYnk6Ci0gKglKLlQuIENvbmtsaW4gKGp0Y0B3aW1zZXkuY29tKSwgV2lubmluZyBTdHJhdGVnaWVzLCBJbmMuCi0gKi8KLQotI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+Ci0KLVJDU0lEKCIkRnJlZUJTRDogc3JjL2xpYi9tc3VuL2kzODcvc19jb3B5c2lnbi5TLHYgMS42IDE5OTkvMDgvMjggMDA6MDY6MTEgcGV0ZXIgRXhwICQiKQotCi1FTlRSWShjb3B5c2lnbikKLQltb3ZsCTE2KCVlc3ApLCVlZHgKLQlhbmRsCSQweDgwMDAwMDAwLCVlZHgKLQltb3ZsCTgoJWVzcCksJWVheAotCWFuZGwJJDB4N2ZmZmZmZmYsJWVheAotCW9ybAklZWR4LCVlYXgKLQltb3ZsCSVlYXgsOCglZXNwKQotCWZsZGwJNCglZXNwKQotCXJldApkaWZmIC0tZ2l0IGEvbGlibS9pMzg3L3NfY29weXNpZ25mLlMgYi9saWJtL2kzODcvc19jb3B5c2lnbmYuUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzNmYzg5OC4uMDAwMDAwMAotLS0gYS9saWJtL2kzODcvc19jb3B5c2lnbmYuUworKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLS8qCi0gKiBXcml0dGVuIGJ5IEouVC4gQ29ua2xpbiA8anRjQG5ldGJzZC5vcmc+LgotICogUHVibGljIGRvbWFpbi4KLSAqLwotCi0jaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KLQotX19GQlNESUQoIiRGcmVlQlNEOiBzcmMvbGliL21zdW4vaTM4Ny9zX2NvcHlzaWduZi5TLHYgMS4xIDIwMDUvMDEvMTMgMTg6NTg6MjUgZGFzIEV4cCAkIik7Ci0vKiBSQ1NJRCgiJE5ldEJTRDogc19jb3B5c2lnbmYuUyx2IDEuMyAxOTk1LzA1LzA4IDIzOjUzOjI1IGp0YyBFeHAgJCIpICovCi0KLUVOVFJZKGNvcHlzaWduZikKLQltb3ZsCTgoJWVzcCksJWVkeAotCWFuZGwJJDB4ODAwMDAwMDAsJWVkeAotCW1vdmwJNCglZXNwKSwlZWF4Ci0JYW5kbAkkMHg3ZmZmZmZmZiwlZWF4Ci0Jb3JsCSVlZHgsJWVheAotCW1vdmwJJWVheCw0KCVlc3ApCi0JZmxkcwk0KCVlc3ApCi0JcmV0CmRpZmYgLS1naXQgYS9saWJtL2kzODcvc19jb3B5c2lnbmwuUyBiL2xpYm0vaTM4Ny9zX2NvcHlzaWdubC5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YzNhMzc0Li4wMDAwMDAwCi0tLSBhL2xpYm0vaTM4Ny9zX2NvcHlzaWdubC5TCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotLyoKLSAqIEJhc2VkIG9uIGNvZGUgd3JpdHRlbiBieSBKLlQuIENvbmtsaW4gPGp0Y0BOZXRCU0Qub3JnPi4KLSAqIFB1YmxpYyBkb21haW4uCi0gKi8KLQotI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+Ci1fX0ZCU0RJRCgiJEZyZWVCU0Q6IHNyYy9saWIvbXN1bi9pMzg3L3NfY29weXNpZ25sLlMsdiAxLjEgMjAwNS8wNC8xNiAyMToxMjo1NSBkYXMgRXhwICQiKQotCi1FTlRSWShjb3B5c2lnbmwpCi0JbW92bAkyNCglZXNwKSwlZWR4Ci0JYW5kbAkkMHg4MDAwLCVlZHgKLQltb3ZsCTEyKCVlc3ApLCVlYXgKLQlhbmRsCSQweDdmZmYsJWVheAotCW9ybAklZWR4LCVlYXgKLQltb3ZsCSVlYXgsMTIoJWVzcCkKLQlmbGR0CTQoJWVzcCkKLQlyZXQKZGlmZiAtLWdpdCBhL2xpYm0vaTM4Ny9zX2Nvcy5TIGIvbGlibS9pMzg3L3NfY29zLlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMzOGNiN2IuLjAwMDAwMDAKLS0tIGEvbGlibS9pMzg3L3NfY29zLlMKKysrIC9kZXYvbnVsbApAQCAtMSw1NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChjKSAxOTk0IFdpbm5pbmcgU3RyYXRlZ2llcywgSW5jLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQotICogICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgotICogICAgICBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IFdpbm5pbmcgU3RyYXRlZ2llcywgSW5jLgotICogNC4gVGhlIG5hbWUgb2YgdGhlIGF1dGhvciBtYXkgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCi0gKiAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUgotICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KLSAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKLSAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLyoKLSAqIFdyaXR0ZW4gYnk6Ci0gKglKLlQuIENvbmtsaW4gKGp0Y0B3aW1zZXkuY29tKSwgV2lubmluZyBTdHJhdGVnaWVzLCBJbmMuCi0gKi8KLQotI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+Ci0KLVJDU0lEKCIkRnJlZUJTRDogc3JjL2xpYi9tc3VuL2kzODcvc19jb3MuUyx2IDEuNiAxOTk5LzA4LzI4IDAwOjA2OjEyIHBldGVyIEV4cCAkIikKLQotRU5UUlkoY29zKQotCWZsZGwJNCglZXNwKQotCWZjb3MKLQlmbnN0c3cJJWF4Ci0JYW5kdwkkMHg0MDAsJWF4Ci0Jam56CTFmCi0JcmV0CQotMToJZmxkcGkKLQlmYWRkCSVzdCgwKQotCWZ4Y2gJJXN0KDEpCi0yOglmcHJlbTEKLQlmbnN0c3cJJWF4Ci0JYW5kdwkkMHg0MDAsJWF4Ci0Jam56CTJiCi0JZnN0cAklc3QoMSkKLQlmY29zCi0JcmV0CmRpZmYgLS1naXQgYS9saWJtL2kzODcvc19maW5pdGUuUyBiL2xpYm0vaTM4Ny9zX2Zpbml0ZS5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ODM1YjBlLi4wMDAwMDAwCi0tLSBhL2xpYm0vaTM4Ny9zX2Zpbml0ZS5TCisrKyAvZGV2L251bGwKQEAgLTEsNDYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykgMTk5Myw5NCBXaW5uaW5nIFN0cmF0ZWdpZXMsIEluYy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKLSAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKLSAqICAgICAgVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSBXaW5uaW5nIFN0cmF0ZWdpZXMsIEluYy4KLSAqIDQuIFRoZSBuYW1lIG9mIHRoZSBhdXRob3IgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cwotICogICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUgotICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KLSAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKLSAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLyoKLSAqIFdyaXR0ZW4gYnk6Ci0gKglKLlQuIENvbmtsaW4gKGp0Y0B3aW1zZXkuY29tKSwgV2lubmluZyBTdHJhdGVnaWVzLCBJbmMuCi0gKi8KLQotI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+Ci0KLVJDU0lEKCIkRnJlZUJTRDogc3JjL2xpYi9tc3VuL2kzODcvc19maW5pdGUuUyx2IDEuNyAxOTk5LzA4LzI4IDAwOjA2OjEyIHBldGVyIEV4cCAkIikKLQotRU5UUlkoZmluaXRlKQotCW1vdmwJOCglZXNwKSwlZWF4Ci0JYW5kbAkkMHg3ZmYwMDAwMCwgJWVheAotCWNtcGwJJDB4N2ZmMDAwMDAsICVlYXgKLQlzZXRuZWIJJWFsCi0JYW5kbAkkMHgwMDAwMDBmZiwgJWVheAotCXJldApkaWZmIC0tZ2l0IGEvbGlibS9pMzg3L3NfZmxvb3IuUyBiL2xpYm0vaTM4Ny9zX2Zsb29yLlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcyMmY4M2QuLjAwMDAwMDAKLS0tIGEvbGlibS9pMzg3L3NfZmxvb3IuUworKysgL2Rldi9udWxsCkBAIC0xLDU4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTMsOTQgV2lubmluZyBTdHJhdGVnaWVzLCBJbmMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCi0gKiAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6Ci0gKiAgICAgIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgV2lubmluZyBTdHJhdGVnaWVzLCBJbmMuCi0gKiA0LiBUaGUgbmFtZSBvZiB0aGUgYXV0aG9yIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKLSAqICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0gKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgotICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAotICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0gKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vKgotICogV3JpdHRlbiBieToKLSAqCUouVC4gQ29ua2xpbiAoanRjQHdpbXNleS5jb20pLCBXaW5uaW5nIFN0cmF0ZWdpZXMsIEluYy4KLSAqLwotCi0jaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KLQotUkNTSUQoIiRGcmVlQlNEOiBzcmMvbGliL21zdW4vaTM4Ny9zX2Zsb29yLlMsdiAxLjcgMTk5OS8wOC8yOCAwMDowNjoxMiBwZXRlciBFeHAgJCIpCi0KLUVOVFJZKGZsb29yKQotCXB1c2hsCSVlYnAKLQltb3ZsCSVlc3AsJWVicAotCXN1YmwJJDgsJWVzcAotCi0JZnN0Y3cJLTQoJWVicCkJCS8qIHN0b3JlIGZwdSBjb250cm9sIHdvcmQgKi8KLQltb3Z3CS00KCVlYnApLCVkeAotCW9ydwkkMHgwNDAwLCVkeAkJLyogcm91bmQgdG93YXJkcyAtb28gKi8KLQlhbmR3CSQweGY3ZmYsJWR4Ci0JbW92dwklZHgsLTgoJWVicCkKLQlmbGRjdwktOCglZWJwKQkJLyogbG9hZCBtb2RmaWVkIGNvbnRyb2wgd29yZCAqLwotCi0JZmxkbAk4KCVlYnApOwkJLyogcm91bmQgKi8KLQlmcm5kaW50Ci0KLQlmbGRjdwktNCglZWJwKQkJLyogcmVzdG9yZSBvcmlnaW5hbCBjb250cm9sIHdvcmQgKi8KLQotCWxlYXZlCi0JcmV0CmRpZmYgLS1naXQgYS9saWJtL2kzODcvc19mbG9vcmYuUyBiL2xpYm0vaTM4Ny9zX2Zsb29yZi5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZDM5YWNkLi4wMDAwMDAwCi0tLSBhL2xpYm0vaTM4Ny9zX2Zsb29yZi5TCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotLyoKLSAqIFdyaXR0ZW4gYnkgSi5ULiBDb25rbGluIDxqdGNAbmV0YnNkLm9yZz4uCi0gKiBQdWJsaWMgZG9tYWluLgotICovCi0KLSNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgotCi1fX0ZCU0RJRCgiJEZyZWVCU0Q6IHNyYy9saWIvbXN1bi9pMzg3L3NfZmxvb3JmLlMsdiAxLjIgMjAwNS8wNS8wNiAxNTo0NDoyMCBkZWlzY2hlbiBFeHAgJCIpOwotLyogUkNTSUQoIiROZXRCU0Q6IHNfZmxvb3JmLlMsdiAxLjMgMTk5NS8wNS8wOSAwMDowNDozMiBqdGMgRXhwICQiKSAqLwotCi1FTlRSWShmbG9vcmYpCi0JcHVzaGwJJWVicAotCW1vdmwJJWVzcCwlZWJwCi0Jc3VibAkkOCwlZXNwCi0KLQlmc3RjdwktNCglZWJwKQkJLyogc3RvcmUgZnB1IGNvbnRyb2wgd29yZCAqLwotCW1vdncJLTQoJWVicCksJWR4Ci0Jb3J3CSQweDA0MDAsJWR4CQkvKiByb3VuZCB0b3dhcmRzIC1vbyAqLwotCWFuZHcJJDB4ZjdmZiwlZHgKLQltb3Z3CSVkeCwtOCglZWJwKQotCWZsZGN3CS04KCVlYnApCQkvKiBsb2FkIG1vZGZpZWQgY29udHJvbCB3b3JkICovCi0KLQlmbGRzCTgoJWVicCk7CQkvKiByb3VuZCAqLwotCWZybmRpbnQKLQotCWZsZGN3CS00KCVlYnApCQkvKiByZXN0b3JlIG9yaWdpbmFsIGNvbnRyb2wgd29yZCAqLwotCi0JbGVhdmUKLQlyZXQKZGlmZiAtLWdpdCBhL2xpYm0vaTM4Ny9zX2Zsb29ybC5TIGIvbGlibS9pMzg3L3NfZmxvb3JsLlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNjZGUzMzUuLjAwMDAwMDAKLS0tIGEvbGlibS9pMzg3L3NfZmxvb3JsLlMKKysrIC9kZXYvbnVsbApAQCAtMSwyNyArMCwwIEBACi0vKgotICogQmFzZWQgb24gY29kZSB3cml0dGVuIGJ5IEouVC4gQ29ua2xpbiA8anRjQE5ldEJTRC5vcmc+LgotICogUHVibGljIGRvbWFpbi4KLSAqLwotCi0jaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KLV9fRkJTRElEKCIkRnJlZUJTRDogc3JjL2xpYi9tc3VuL2kzODcvc19mbG9vcmwuUyx2IDEuMSAyMDA1LzA0LzE2IDIxOjEyOjU1IGRhcyBFeHAgJCIpCi0KLUVOVFJZKGZsb29ybCkKLQlwdXNobAklZWJwCi0JbW92bAklZXNwLCVlYnAKLQlzdWJsCSQ4LCVlc3AKLQotCWZzdGN3CS00KCVlYnApCQkvKiBzdG9yZSBmcHUgY29udHJvbCB3b3JkICovCi0JbW92dwktNCglZWJwKSwlZHgKLQlvcncJJDB4MDQwMCwlZHgJCS8qIHJvdW5kIHRvd2FyZHMgLW9vICovCi0JYW5kdwkkMHhmN2ZmLCVkeAotCW1vdncJJWR4LC04KCVlYnApCi0JZmxkY3cJLTgoJWVicCkJCS8qIGxvYWQgbW9kZmllZCBjb250cm9sIHdvcmQgKi8KLQotCWZsZHQJOCglZWJwKQkJCS8qIHJvdW5kICovCi0JZnJuZGludAotCi0JZmxkY3cJLTQoJWVicCkJCS8qIHJlc3RvcmUgb3JpZ2luYWwgY29udHJvbCB3b3JkICovCi0KLQlsZWF2ZQotCXJldApkaWZmIC0tZ2l0IGEvbGlibS9pMzg3L3NfbGxyaW50LlMgYi9saWJtL2kzODcvc19sbHJpbnQuUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjI2NmU1Yy4uMDAwMDAwMAotLS0gYS9saWJtL2kzODcvc19sbHJpbnQuUworKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLS8qLQotICogQ29weXJpZ2h0IChjKSAyMDA1IERhdmlkIFNjaHVsdHogPGRhc0BGcmVlQlNELk9SRz4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+Ci1fX0ZCU0RJRCgiJEZyZWVCU0Q6IHNyYy9saWIvbXN1bi9pMzg3L3NfbGxyaW50LlMsdiAxLjEgMjAwNS8wMS8xMSAyMzoxMDo1MyBkYXMgRXhwICQiKTsgCi0JCi1FTlRSWShsbHJpbnQpCi0JZmxkbAk0KCVlc3ApCi0Jc3VibAkkOCwlZXNwCi0JZmlzdHBsbAkoJWVzcCkKLQlwb3BsCSVlYXgKLQlwb3BsCSVlZHgKLQlyZXQKZGlmZiAtLWdpdCBhL2xpYm0vaTM4Ny9zX2xscmludGYuUyBiL2xpYm0vaTM4Ny9zX2xscmludGYuUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTFlZGIwOS4uMDAwMDAwMAotLS0gYS9saWJtL2kzODcvc19sbHJpbnRmLlMKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi0vKi0KLSAqIENvcHlyaWdodCAoYykgMjAwNSBEYXZpZCBTY2h1bHR6IDxkYXNARnJlZUJTRC5PUkc+Ci0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgotX19GQlNESUQoIiRGcmVlQlNEOiBzcmMvbGliL21zdW4vaTM4Ny9zX2xscmludGYuUyx2IDEuMSAyMDA1LzA0LzE2IDIxOjEyOjU1IGRhcyBFeHAgJCIpCi0JCi1FTlRSWShsbHJpbnRmKQotCWZsZHMJNCglZXNwKQotCXN1YmwJJDgsJWVzcAotCWZpc3RwbGwJKCVlc3ApCi0JcG9wbAklZWF4Ci0JcG9wbAklZWR4Ci0JcmV0CmRpZmYgLS1naXQgYS9saWJtL2kzODcvc19sb2diLlMgYi9saWJtL2kzODcvc19sb2diLlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQzZjhkOWQuLjAwMDAwMDAKLS0tIGEvbGlibS9pMzg3L3NfbG9nYi5TCisrKyAvZGV2L251bGwKQEAgLTEsNDQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykgMTk5Myw5NCBXaW5uaW5nIFN0cmF0ZWdpZXMsIEluYy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKLSAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKLSAqICAgICAgVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSBXaW5uaW5nIFN0cmF0ZWdpZXMsIEluYy4KLSAqIDQuIFRoZSBuYW1lIG9mIHRoZSBhdXRob3IgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cwotICogICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUgotICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KLSAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKLSAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLyoKLSAqIFdyaXR0ZW4gYnk6Ci0gKglKLlQuIENvbmtsaW4gKGp0Y0B3aW1zZXkuY29tKSwgV2lubmluZyBTdHJhdGVnaWVzLCBJbmMuCi0gKi8KLQotI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+Ci0KLVJDU0lEKCIkRnJlZUJTRDogc3JjL2xpYi9tc3VuL2kzODcvc19sb2diLlMsdiAxLjcgMjAwMC8wNi8wNiAxMjoxMjozNiBiZGUgRXhwICQiKQotCi1FTlRSWShsb2diKQotCWZsZGwJNCglZXNwKQotCWZ4dHJhY3QKLQlmc3RwCSVzdAotCXJldApkaWZmIC0tZ2l0IGEvbGlibS9pMzg3L3NfbG9nYmYuUyBiL2xpYm0vaTM4Ny9zX2xvZ2JmLlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI2YmM0ODQuLjAwMDAwMDAKLS0tIGEvbGlibS9pMzg3L3NfbG9nYmYuUworKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLS8qCi0gKiBXcml0dGVuIGJ5IEouVC4gQ29ua2xpbiA8anRjQG5ldGJzZC5vcmc+LgotICogUHVibGljIGRvbWFpbi4KLSAqLwotCi0jaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KLQotX19GQlNESUQoIiRGcmVlQlNEOiBzcmMvbGliL21zdW4vaTM4Ny9zX2xvZ2JmLlMsdiAxLjEgMjAwNS8wMS8xMyAxODo1ODoyNSBkYXMgRXhwICQiKTsKLS8qIFJDU0lEKCIkTmV0QlNEOiBzX2xvZ2JmLlMsdiAxLjMgMTk5NS8wNS8wOSAwMDoxNToxMiBqdGMgRXhwICQiKSAqLwotCi1FTlRSWShsb2diZikKLQlmbGRzCTQoJWVzcCkKLQlmeHRyYWN0Ci0JZnN0cAklc3QKLQlyZXQKZGlmZiAtLWdpdCBhL2xpYm0vaTM4Ny9zX2xyaW50LlMgYi9saWJtL2kzODcvc19scmludC5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMjI3ODNjLi4wMDAwMDAwCi0tLSBhL2xpYm0vaTM4Ny9zX2xyaW50LlMKKysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi0vKi0KLSAqIENvcHlyaWdodCAoYykgMjAwNSBEYXZpZCBTY2h1bHR6IDxkYXNARnJlZUJTRC5PUkc+Ci0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgotX19GQlNESUQoIiRGcmVlQlNEOiBzcmMvbGliL21zdW4vaTM4Ny9zX2xyaW50LlMsdiAxLjEgMjAwNS8wMS8xMSAyMzoxMDo1MyBkYXMgRXhwICQiKTsgCi0JCi1FTlRSWShscmludCkKLQlmbGRsCTQoJWVzcCkKLQlzdWJsCSQ0LCVlc3AKLQlmaXN0cGwJKCVlc3ApCi0JcG9wbAklZWF4Ci0JcmV0CmRpZmYgLS1naXQgYS9saWJtL2kzODcvc19scmludGYuUyBiL2xpYm0vaTM4Ny9zX2xyaW50Zi5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYzEyNmYwLi4wMDAwMDAwCi0tLSBhL2xpYm0vaTM4Ny9zX2xyaW50Zi5TCisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgRGF2aWQgU2NodWx0eiA8ZGFzQEZyZWVCU0QuT1JHPgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KLV9fRkJTRElEKCIkRnJlZUJTRDogc3JjL2xpYi9tc3VuL2kzODcvc19scmludGYuUyx2IDEuMSAyMDA1LzA0LzE2IDIxOjEyOjU1IGRhcyBFeHAgJCIpCi0JCi1FTlRSWShscmludGYpCi0JZmxkcwk0KCVlc3ApCi0Jc3VibAkkNCwlZXNwCi0JZmlzdHBsCSglZXNwKQotCXBvcGwJJWVheAotCXJldApkaWZmIC0tZ2l0IGEvbGlibS9pMzg3L3NfcmVtcXVvLlMgYi9saWJtL2kzODcvc19yZW1xdW8uUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjc1MjgzOS4uMDAwMDAwMAotLS0gYS9saWJtL2kzODcvc19yZW1xdW8uUworKysgL2Rldi9udWxsCkBAIC0xLDYyICswLDAgQEAKLS8qLQotICogQ29weXJpZ2h0IChjKSAyMDA1IERhdmlkIFNjaHVsdHogPGRhc0BGcmVlQlNELk9SRz4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotLyoKLSAqIEJhc2VkIG9uIHB1YmxpYy1kb21haW4gcmVtYWluZGVyIHJvdXRpbmUgYnkgSi5ULiBDb25rbGluIDxqdGNATmV0QlNELm9yZz4uCi0gKi8KLQotI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+Ci1fX0ZCU0RJRCgiJEZyZWVCU0Q6IHNyYy9saWIvbXN1bi9pMzg3L3NfcmVtcXVvLlMsdiAxLjEgMjAwNS8wMy8yNSAwNDo0MDo0NCBkYXMgRXhwICQiKTsgCi0JCi1FTlRSWShyZW1xdW8pCi0JZmxkbAkxMiglZXNwKQotCWZsZGwJNCglZXNwKQotMToJZnByZW0xCi0JZnN0c3cJJWF4Ci0Jc2FoZgotCWpwCTFiCi0JZnN0cAklc3QoMSkKLS8qIEV4dHJhY3QgdGhlIHRocmVlIGxvdy1vcmRlciBiaXRzIG9mIHRoZSBxdW90aWVudCBmcm9tIEMwLEMzLEMxLiAqLwotCXNocmwJJDYsJWVheAotCW1vdmwJJWVheCwlZWN4Ci0JYW5kbAkkMHgxMDgsJWVheAotCXJvcmwJJDcsJWVheAotCW9ybAklZWF4LCVlY3gKLQlyb2xsCSQ0LCVlYXgKLQlvcmwJJWVjeCwlZWF4Ci0JYW5kbAkkNywlZWF4Ci0vKiBOZWdhdGUgdGhlIHF1b3RpZW50IGJpdHMgaWYgeCp5PDAuICBBdm9pZCB1c2luZyBhbiB1bnByZWRpY3RhYmxlIGJyYW5jaC4gKi8KLQltb3ZsCTE2KCVlc3ApLCVlY3gKLQl4b3JsCTgoJWVzcCksJWVjeAotCXNhcmwJJDE2LCVlY3gKLQlzYXJsCSQxNiwlZWN4Ci0JeG9ybAklZWN4LCVlYXgKLQlhbmRsCSQxLCVlY3gKLQlhZGRsCSVlY3gsJWVheAotLyogU3RvcmUgdGhlIHF1b3RpZW50IGFuZCByZXR1cm4uICovCi0JbW92bAkyMCglZXNwKSwlZWN4Ci0JbW92bAklZWF4LCglZWN4KQotCXJldApkaWZmIC0tZ2l0IGEvbGlibS9pMzg3L3NfcmVtcXVvZi5TIGIvbGlibS9pMzg3L3NfcmVtcXVvZi5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MGQyNGI4Li4wMDAwMDAwCi0tLSBhL2xpYm0vaTM4Ny9zX3JlbXF1b2YuUworKysgL2Rldi9udWxsCkBAIC0xLDYyICswLDAgQEAKLS8qLQotICogQ29weXJpZ2h0IChjKSAyMDA1IERhdmlkIFNjaHVsdHogPGRhc0BGcmVlQlNELk9SRz4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotLyoKLSAqIEJhc2VkIG9uIHB1YmxpYy1kb21haW4gcmVtYWluZGVyIHJvdXRpbmUgYnkgSi5ULiBDb25rbGluIDxqdGNATmV0QlNELm9yZz4uCi0gKi8KLQotI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+Ci1fX0ZCU0RJRCgiJEZyZWVCU0Q6IHNyYy9saWIvbXN1bi9pMzg3L3NfcmVtcXVvZi5TLHYgMS4xIDIwMDUvMDMvMjUgMDQ6NDA6NDQgZGFzIEV4cCAkIik7IAotCQotRU5UUlkocmVtcXVvZikKLQlmbGRzCTgoJWVzcCkKLQlmbGRzCTQoJWVzcCkKLTE6CWZwcmVtMQotCWZzdHN3CSVheAotCXNhaGYKLQlqcAkxYgotCWZzdHAJJXN0KDEpCi0vKiBFeHRyYWN0IHRoZSB0aHJlZSBsb3ctb3JkZXIgYml0cyBvZiB0aGUgcXVvdGllbnQgZnJvbSBDMCxDMyxDMS4gKi8KLQlzaHJsCSQ2LCVlYXgKLQltb3ZsCSVlYXgsJWVjeAotCWFuZGwJJDB4MTA4LCVlYXgKLQlyb3JsCSQ3LCVlYXgKLQlvcmwJJWVheCwlZWN4Ci0Jcm9sbAkkNCwlZWF4Ci0Jb3JsCSVlY3gsJWVheAotCWFuZGwJJDcsJWVheAotLyogTmVnYXRlIHRoZSBxdW90aWVudCBiaXRzIGlmIHgqeTwwLiAgQXZvaWQgdXNpbmcgYW4gdW5wcmVkaWN0YWJsZSBicmFuY2guICovCi0JbW92bAk4KCVlc3ApLCVlY3gKLQl4b3JsCTQoJWVzcCksJWVjeAotCXNhcmwJJDE2LCVlY3gKLQlzYXJsCSQxNiwlZWN4Ci0JeG9ybAklZWN4LCVlYXgKLQlhbmRsCSQxLCVlY3gKLQlhZGRsCSVlY3gsJWVheAotLyogU3RvcmUgdGhlIHF1b3RpZW50IGFuZCByZXR1cm4uICovCi0JbW92bAkxMiglZXNwKSwlZWN4Ci0JbW92bAklZWF4LCglZWN4KQotCXJldApkaWZmIC0tZ2l0IGEvbGlibS9pMzg3L3NfcmludC5TIGIvbGlibS9pMzg3L3NfcmludC5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjY2RhMzE0Li4wMDAwMDAwCi0tLSBhL2xpYm0vaTM4Ny9zX3JpbnQuUworKysgL2Rldi9udWxsCkBAIC0xLDQzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTMsOTQgV2lubmluZyBTdHJhdGVnaWVzLCBJbmMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCi0gKiAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6Ci0gKiAgICAgIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgV2lubmluZyBTdHJhdGVnaWVzLCBJbmMuCi0gKiA0LiBUaGUgbmFtZSBvZiB0aGUgYXV0aG9yIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKLSAqICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0gKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgotICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAotICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0gKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vKgotICogV3JpdHRlbiBieToKLSAqCUouVC4gQ29ua2xpbiAoanRjQHdpbXNleS5jb20pLCBXaW5uaW5nIFN0cmF0ZWdpZXMsIEluYy4KLSAqLwotCi0jaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KLQotUkNTSUQoIiRGcmVlQlNEOiBzcmMvbGliL21zdW4vaTM4Ny9zX3JpbnQuUyx2IDEuNiAxOTk5LzA4LzI4IDAwOjA2OjEzIHBldGVyIEV4cCAkIikKLQotRU5UUlkocmludCkKLQlmbGRsCTQoJWVzcCkKLQlmcm5kaW50Ci0JcmV0CmRpZmYgLS1naXQgYS9saWJtL2kzODcvc19yaW50Zi5TIGIvbGlibS9pMzg3L3NfcmludGYuUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWQ0NTI2Ny4uMDAwMDAwMAotLS0gYS9saWJtL2kzODcvc19yaW50Zi5TCisrKyAvZGV2L251bGwKQEAgLTEsMTQgKzAsMCBAQAotLyoKLSAqIFdyaXR0ZW4gYnkgSi5ULiBDb25rbGluIDxqdGNAbmV0YnNkLm9yZz4uCi0gKiBQdWJsaWMgZG9tYWluLgotICovCi0KLSNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgotCi1fX0ZCU0RJRCgiJEZyZWVCU0Q6IHNyYy9saWIvbXN1bi9pMzg3L3NfcmludGYuUyx2IDEuMSAyMDA1LzAxLzEzIDE4OjU4OjI1IGRhcyBFeHAgJCIpOwotLyogUkNTSUQoIiROZXRCU0Q6IHNfcmludGYuUyx2IDEuMyAxOTk1LzA1LzA5IDAwOjE3OjIyIGp0YyBFeHAgJCIpICovCi0KLUVOVFJZKHJpbnRmKQotCWZsZHMJNCglZXNwKQotCWZybmRpbnQKLQlyZXQKZGlmZiAtLWdpdCBhL2xpYm0vaTM4Ny9zX3NjYWxibi5TIGIvbGlibS9pMzg3L3Nfc2NhbGJuLlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ2MDA2MDMuLjAwMDAwMDAKLS0tIGEvbGlibS9pMzg3L3Nfc2NhbGJuLlMKKysrIC9kZXYvbnVsbApAQCAtMSw0NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChjKSAxOTk0IFdpbm5pbmcgU3RyYXRlZ2llcywgSW5jLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQotICogICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgotICogICAgICBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IFdpbm5pbmcgU3RyYXRlZ2llcywgSW5jLgotICogNC4gVGhlIG5hbWUgb2YgdGhlIGF1dGhvciBtYXkgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCi0gKiAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUgotICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KLSAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKLSAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLyoKLSAqIFdyaXR0ZW4gYnk6Ci0gKglKLlQuIENvbmtsaW4gKGp0Y0B3aW1zZXkuY29tKSwgV2lubmluZyBTdHJhdGVnaWVzLCBJbmMuCi0gKi8KLQotI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+Ci0KLVJDU0lEKCIkRnJlZUJTRDogc3JjL2xpYi9tc3VuL2kzODcvc19zY2FsYm4uUyx2IDEuNyAxOTk5LzA4LzI4IDAwOjA2OjEzIHBldGVyIEV4cCAkIikKLQotRU5UUlkoc2NhbGJuKQotCWZpbGRsCTEyKCVlc3ApCi0JZmxkbAk0KCVlc3ApCi0JZnNjYWxlCi0JZnN0cAklc3QoMSkKLQlyZXQKZGlmZiAtLWdpdCBhL2xpYm0vaTM4Ny9zX3NjYWxibmYuUyBiL2xpYm0vaTM4Ny9zX3NjYWxibmYuUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2UxYWM0MS4uMDAwMDAwMAotLS0gYS9saWJtL2kzODcvc19zY2FsYm5mLlMKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi0vKgotICogV3JpdHRlbiBieSBKLlQuIENvbmtsaW4gPGp0Y0BuZXRic2Qub3JnPi4KLSAqIFB1YmxpYyBkb21haW4uCi0gKi8KLQotI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+Ci0KLV9fRkJTRElEKCIkRnJlZUJTRDogc3JjL2xpYi9tc3VuL2kzODcvc19zY2FsYm5mLlMsdiAxLjIgMjAwNS8wMy8wNyAwNDo1Mjo0MyBkYXMgRXhwICQiKTsKLS8qIFJDU0lEKCIkTmV0QlNEOiBzX3NjYWxibmYuUyx2IDEuNCAxOTk5LzAxLzAyIDA1OjE1OjQwIGtyaXN0ZXJ3IEV4cCAkIikgKi8KLQotRU5UUlkoc2NhbGJuZikKLQlmaWxkbAk4KCVlc3ApCi0JZmxkcwk0KCVlc3ApCi0JZnNjYWxlCi0JZnN0cAklc3QoMSkJCS8qIGJ1ZyBmaXggZm9yIGZwIHN0YWNrIG92ZXJmbG93ICovCi0JcmV0Ci0KLS5nbG9ibCBDTkFNRShsZGV4cGYpCi0uc2V0CUNOQU1FKGxkZXhwZiksQ05BTUUoc2NhbGJuZikKZGlmZiAtLWdpdCBhL2xpYm0vaTM4Ny9zX3NjYWxibmwuUyBiL2xpYm0vaTM4Ny9zX3NjYWxibmwuUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTEyYWI2MS4uMDAwMDAwMAotLS0gYS9saWJtL2kzODcvc19zY2FsYm5sLlMKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi0vKgotICogV3JpdHRlbiBieSBKLlQuIENvbmtsaW4gPGp0Y0BuZXRic2Qub3JnPi4KLSAqIFB1YmxpYyBkb21haW4uCi0gKi8KLQotI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+Ci0KLV9fRkJTRElEKCIkRnJlZUJTRDogc3JjL2xpYi9tc3VuL2kzODcvc19zY2FsYm5sLlMsdiAxLjEgMjAwNS8wMy8wNyAwNDo1Mjo1NyBkYXMgRXhwICQiKTsKLS8qIFJDU0lEKCIkTmV0QlNEOiBzX3NjYWxibmYuUyx2IDEuNCAxOTk5LzAxLzAyIDA1OjE1OjQwIGtyaXN0ZXJ3IEV4cCAkIikgKi8KLQotRU5UUlkoc2NhbGJubCkKLQlmaWxkbAkxNiglZXNwKQotCWZsZHQJNCglZXNwKQotCWZzY2FsZQotCWZzdHAJJXN0KDEpCi0JcmV0Ci0KLS5nbG9ibCBDTkFNRShsZGV4cGwpCi0uc2V0CUNOQU1FKGxkZXhwbCksQ05BTUUoc2NhbGJubCkKZGlmZiAtLWdpdCBhL2xpYm0vaTM4Ny9zX3NpZ25pZmljYW5kLlMgYi9saWJtL2kzODcvc19zaWduaWZpY2FuZC5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZGRiYzgyLi4wMDAwMDAwCi0tLSBhL2xpYm0vaTM4Ny9zX3NpZ25pZmljYW5kLlMKKysrIC9kZXYvbnVsbApAQCAtMSw0NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChjKSAxOTkzLDk0IFdpbm5pbmcgU3RyYXRlZ2llcywgSW5jLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQotICogICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgotICogICAgICBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IFdpbm5pbmcgU3RyYXRlZ2llcywgSW5jLgotICogNC4gVGhlIG5hbWUgb2YgdGhlIGF1dGhvciBtYXkgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCi0gKiAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0gKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgotICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAotICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0gKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vKgotICogV3JpdHRlbiBieToKLSAqCUouVC4gQ29ua2xpbiAoanRjQHdpbXNleS5jb20pLCBXaW5uaW5nIFN0cmF0ZWdpZXMsIEluYy4KLSAqLwotCi0jaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KLQotUkNTSUQoIiRGcmVlQlNEOiBzcmMvbGliL21zdW4vaTM4Ny9zX3NpZ25pZmljYW5kLlMsdiAxLjcgMjAwMC8wNi8wNiAxMjoxMjozNiBiZGUgRXhwICQiKQotCi1FTlRSWShzaWduaWZpY2FuZCkKLQlmbGRsCTQoJWVzcCkKLQlmeHRyYWN0Ci0JZnN0cAklc3QoMSkKLQlyZXQKZGlmZiAtLWdpdCBhL2xpYm0vaTM4Ny9zX3NpZ25pZmljYW5kZi5TIGIvbGlibS9pMzg3L3Nfc2lnbmlmaWNhbmRmLlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYwOTZlZjAuLjAwMDAwMDAKLS0tIGEvbGlibS9pMzg3L3Nfc2lnbmlmaWNhbmRmLlMKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi0vKgotICogV3JpdHRlbiBieSBKLlQuIENvbmtsaW4gPGp0Y0BuZXRic2Qub3JnPi4KLSAqIFB1YmxpYyBkb21haW4uCi0gKi8KLQotI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+Ci0KLV9fRkJTRElEKCIkRnJlZUJTRDogc3JjL2xpYi9tc3VuL2kzODcvc19zaWduaWZpY2FuZGYuUyx2IDEuMSAyMDA1LzAxLzEzIDE4OjU4OjI1IGRhcyBFeHAgJCIpOwotLyogUkNTSUQoIiROZXRCU0Q6IHNfc2lnbmlmaWNhbmRmLlMsdiAxLjMgMTk5NS8wNS8wOSAwMDoyNDowNyBqdGMgRXhwICQiKSAqLwotCi1FTlRSWShzaWduaWZpY2FuZGYpCi0JZmxkcwk0KCVlc3ApCi0JZnh0cmFjdAotCWZzdHAJJXN0KDEpCi0JcmV0CmRpZmYgLS1naXQgYS9saWJtL2kzODcvc19zaW4uUyBiL2xpYm0vaTM4Ny9zX3Npbi5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjM2Q2NWZkLi4wMDAwMDAwCi0tLSBhL2xpYm0vaTM4Ny9zX3Npbi5TCisrKyAvZGV2L251bGwKQEAgLTEsNTYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykgMTk5NCBXaW5uaW5nIFN0cmF0ZWdpZXMsIEluYy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKLSAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKLSAqICAgICAgVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSBXaW5uaW5nIFN0cmF0ZWdpZXMsIEluYy4KLSAqIDQuIFRoZSBuYW1lIG9mIHRoZSBhdXRob3IgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cwotICogICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKLSAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCi0gKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCi0gKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8qCi0gKiBXcml0dGVuIGJ5OgotICoJSi5ULiBDb25rbGluIChqdGNAd2ltc2V5LmNvbSksIFdpbm5pbmcgU3RyYXRlZ2llcywgSW5jLgotICovCi0KLSNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgotCi1SQ1NJRCgiJEZyZWVCU0Q6IHNyYy9saWIvbXN1bi9pMzg3L3Nfc2luLlMsdiAxLjYgMTk5OS8wOC8yOCAwMDowNjoxNCBwZXRlciBFeHAgJCIpCi0KLUVOVFJZKHNpbikKLQlmbGRsCTQoJWVzcCkKLQlmc2luCi0JZm5zdHN3CSVheAotCWFuZHcJJDB4NDAwLCVheAotCWpuegkxZgotCXJldAotMToJZmxkcGkKLQlmYWRkCSVzdCgwKQotCWZ4Y2gJJXN0KDEpCi0yOglmcHJlbTEKLQlmbnN0c3cJJWF4Ci0JYW5kdwkkMHg0MDAsJWF4Ci0Jam56CTJiCi0JZnN0cAklc3QoMSkKLQlmc2luCi0JcmV0CmRpZmYgLS1naXQgYS9saWJtL2kzODcvc190YW4uUyBiL2xpYm0vaTM4Ny9zX3Rhbi5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MjVlMTFhLi4wMDAwMDAwCi0tLSBhL2xpYm0vaTM4Ny9zX3Rhbi5TCisrKyAvZGV2L251bGwKQEAgLTEsNTggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykgMTk5NCBXaW5uaW5nIFN0cmF0ZWdpZXMsIEluYy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKLSAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKLSAqICAgICAgVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSBXaW5uaW5nIFN0cmF0ZWdpZXMsIEluYy4KLSAqIDQuIFRoZSBuYW1lIG9mIHRoZSBhdXRob3IgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cwotICogICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKLSAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCi0gKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCi0gKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8qCi0gKiBXcml0dGVuIGJ5OgotICoJSi5ULiBDb25rbGluIChqdGNAd2ltc2V5LmNvbSksIFdpbm5pbmcgU3RyYXRlZ2llcywgSW5jLgotICovCi0KLSNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgotCi1SQ1NJRCgiJEZyZWVCU0Q6IHNyYy9saWIvbXN1bi9pMzg3L3NfdGFuLlMsdiAxLjYgMTk5OS8wOC8yOCAwMDowNjoxNCBwZXRlciBFeHAgJCIpCi0KLUVOVFJZKHRhbikKLQlmbGRsCTQoJWVzcCkKLQlmcHRhbgotCWZuc3RzdwklYXgKLQlhbmR3CSQweDQwMCwlYXgKLQlqbnoJMWYKLQlmc3RwCSVzdCgwKQotCXJldAotMToJZmxkcGkKLQlmYWRkCSVzdCgwKQotCWZ4Y2gJJXN0KDEpCi0yOglmcHJlbTEKLQlmc3RzdwklYXgKLQlhbmR3CSQweDQwMCwlYXgKLQlqbnoJMmIKLQlmc3RwCSVzdCgxKQotCWZwdGFuCi0JZnN0cAklc3QoMCkKLQlyZXQKZGlmZiAtLWdpdCBhL2xpYm0vaTM4Ny9zX3RydW5jLlMgYi9saWJtL2kzODcvc190cnVuYy5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZDc4ZTFjLi4wMDAwMDAwCi0tLSBhL2xpYm0vaTM4Ny9zX3RydW5jLlMKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi0vKgotICogQmFzZWQgb24gY29kZSB3cml0dGVuIGJ5IEouVC4gQ29ua2xpbiA8anRjQE5ldEJTRC5vcmc+LgotICogUHVibGljIGRvbWFpbi4KLSAqLwotCi0jaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KLV9fRkJTRElEKCIkRnJlZUJTRDogc3JjL2xpYi9tc3VuL2kzODcvc190cnVuYy5TLHYgMS4xIDIwMDUvMDQvMTYgMjE6MTI6NTUgZGFzIEV4cCAkIikKLQotRU5UUlkodHJ1bmMpCi0JcHVzaGwJJWVicAotCW1vdmwJJWVzcCwlZWJwCi0Jc3VibAkkOCwlZXNwCi0KLQlmc3RjdwktNCglZWJwKQkJLyogc3RvcmUgZnB1IGNvbnRyb2wgd29yZCAqLwotCW1vdncJLTQoJWVicCksJWR4Ci0Jb3J3CSQweDBjMDAsJWR4CQkvKiByb3VuZCB0b3dhcmRzIC1vbyAqLwotCW1vdncJJWR4LC04KCVlYnApCi0JZmxkY3cJLTgoJWVicCkJCS8qIGxvYWQgbW9kZmllZCBjb250cm9sIHdvcmQgKi8KLQotCWZsZGwJOCglZWJwKQkJCS8qIHJvdW5kICovCi0JZnJuZGludAotCi0JZmxkY3cJLTQoJWVicCkJCS8qIHJlc3RvcmUgb3JpZ2luYWwgY29udHJvbCB3b3JkICovCi0KLQlsZWF2ZQotCXJldApkaWZmIC0tZ2l0IGEvbGlibS9pMzg3L3NfdHJ1bmNmLlMgYi9saWJtL2kzODcvc190cnVuY2YuUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGFmYWYzZS4uMDAwMDAwMAotLS0gYS9saWJtL2kzODcvc190cnVuY2YuUworKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLS8qCi0gKiBCYXNlZCBvbiBjb2RlIHdyaXR0ZW4gYnkgSi5ULiBDb25rbGluIDxqdGNATmV0QlNELm9yZz4uCi0gKiBQdWJsaWMgZG9tYWluLgotICovCi0KLSNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgotX19GQlNESUQoIiRGcmVlQlNEOiBzcmMvbGliL21zdW4vaTM4Ny9zX3RydW5jZi5TLHYgMS4yIDIwMDUvMDUvMDYgMTU6NDQ6MjAgZGVpc2NoZW4gRXhwICQiKQotCi1FTlRSWSh0cnVuY2YpCi0JcHVzaGwJJWVicAotCW1vdmwJJWVzcCwlZWJwCi0Jc3VibAkkOCwlZXNwCi0KLQlmc3RjdwktNCglZWJwKQkJLyogc3RvcmUgZnB1IGNvbnRyb2wgd29yZCAqLwotCW1vdncJLTQoJWVicCksJWR4Ci0Jb3J3CSQweDBjMDAsJWR4CQkvKiByb3VuZCB0b3dhcmRzIC1vbyAqLwotCW1vdncJJWR4LC04KCVlYnApCi0JZmxkY3cJLTgoJWVicCkJCS8qIGxvYWQgbW9kZmllZCBjb250cm9sIHdvcmQgKi8KLQotCWZsZHMJOCglZWJwKQkJCS8qIHJvdW5kICovCi0JZnJuZGludAotCi0JZmxkY3cJLTQoJWVicCkJCS8qIHJlc3RvcmUgb3JpZ2luYWwgY29udHJvbCB3b3JkICovCi0KLQlsZWF2ZQotCXJldApkaWZmIC0tZ2l0IGEvbGlibS9pMzg3L3NfdHJ1bmNsLlMgYi9saWJtL2kzODcvc190cnVuY2wuUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2Q1ZGYxYy4uMDAwMDAwMAotLS0gYS9saWJtL2kzODcvc190cnVuY2wuUworKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLS8qCi0gKiBCYXNlZCBvbiBjb2RlIHdyaXR0ZW4gYnkgSi5ULiBDb25rbGluIDxqdGNATmV0QlNELm9yZz4uCi0gKiBQdWJsaWMgZG9tYWluLgotICovCi0KLSNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgotX19GQlNESUQoIiRGcmVlQlNEOiBzcmMvbGliL21zdW4vaTM4Ny9zX3RydW5jbC5TLHYgMS4xIDIwMDUvMDQvMTYgMjE6MTI6NTUgZGFzIEV4cCAkIikKLQotRU5UUlkodHJ1bmNsKQotCXB1c2hsCSVlYnAKLQltb3ZsCSVlc3AsJWVicAotCXN1YmwJJDgsJWVzcAotCi0JZnN0Y3cJLTQoJWVicCkJCS8qIHN0b3JlIGZwdSBjb250cm9sIHdvcmQgKi8KLQltb3Z3CS00KCVlYnApLCVkeAotCW9ydwkkMHgwYzAwLCVkeAkJLyogcm91bmQgdG93YXJkcyAtb28gKi8KLQltb3Z3CSVkeCwtOCglZWJwKQotCWZsZGN3CS04KCVlYnApCQkvKiBsb2FkIG1vZGZpZWQgY29udHJvbCB3b3JkICovCi0KLQlmbGR0CTgoJWVicCkJCQkvKiByb3VuZCAqLwotCWZybmRpbnQKLQotCWZsZGN3CS00KCVlYnApCQkvKiByZXN0b3JlIG9yaWdpbmFsIGNvbnRyb2wgd29yZCAqLwotCi0JbGVhdmUKLQlyZXQKZGlmZiAtLWdpdCBhL2xpYm0vaWE2NC9NYWtlZmlsZS5pbmMgYi9saWJtL2lhNjQvTWFrZWZpbGUuaW5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZGYyMjY3Li4wMDAwMDAwCi0tLSBhL2xpYm0vaWE2NC9NYWtlZmlsZS5pbmMKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLSMgJEZyZWVCU0Q6IHNyYy9saWIvbXN1bi9pYTY0L01ha2VmaWxlLmluYyx2IDEuMiAyMDA1LzAzLzA3IDA0OjU0OjAyIGRhcyBFeHAgJAotCi1BUkNIX1NSQ1MgPSBzX2ZtYS5TIHNfZm1hZi5TIHNfZm1hbC5TCi1MREJMX1BSRUMgPSA2NApkaWZmIC0tZ2l0IGEvbGlibS9pYTY0L19mcG1hdGguaCBiL2xpYm0vaWE2NC9fZnBtYXRoLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIwZTc1ZWQuLjAwMDAwMDAKLS0tIGEvbGlibS9pYTY0L19mcG1hdGguaAorKysgL2Rldi9udWxsCkBAIC0xLDcxICswLDAgQEAKLS8qLQotICogQ29weXJpZ2h0IChjKSAyMDAzIE1pa2UgQmFyY3JvZnQgPG1pa2VARnJlZUJTRC5vcmc+Ci0gKiBDb3B5cmlnaHQgKGMpIDIwMDIsIDIwMDMgRGF2aWQgU2NodWx0eiA8ZGFzQEZyZWVCU0QuT1JHPgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqCi0gKiAkRnJlZUJTRDogc3JjL2xpYi9saWJjL2lhNjQvX2ZwbWF0aC5oLHYgMS42IDIwMDUvMDMvMDcgMDQ6NTU6NDAgZGFzIEV4cCAkCi0gKi8KLQotI2luY2x1ZGUgPHN5cy9lbmRpYW4uaD4KLQotdW5pb24gSUVFRWwyYml0cyB7Ci0JbG9uZyBkb3VibGUJZTsKLQlzdHJ1Y3QgewotI2lmIF9CWVRFX09SREVSID09IF9MSVRUTEVfRU5ESUFOCi0JCXVuc2lnbmVkIGludAltYW5sCTozMjsKLQkJdW5zaWduZWQgaW50CW1hbmgJOjMyOwotCQl1bnNpZ25lZCBpbnQJZXhwCToxNTsKLQkJdW5zaWduZWQgaW50CXNpZ24JOjE7Ci0JCXVuc2lnbmVkIGxvbmcJanVuawk6NDg7Ci0jZWxzZSAvKiBfQklHX0VORElBTiAqLwotCQl1bnNpZ25lZCBsb25nCWp1bmsJOjQ4OwotCQl1bnNpZ25lZCBpbnQJc2lnbgk6MTsKLQkJdW5zaWduZWQgaW50CWV4cAk6MTU7Ci0JCXVuc2lnbmVkIGludAltYW5oCTozMjsKLQkJdW5zaWduZWQgaW50CW1hbmwJOjMyOwotI2VuZGlmCi0JfSBiaXRzOwotfTsKLQotI2lmIF9CWVRFX09SREVSID09IF9MSVRUTEVfRU5ESUFOCi0jZGVmaW5lCUxEQkxfTkJJVAkweDgwMDAwMDAwCi0jZGVmaW5lCW1hc2tfbmJpdF9sKHUpCSgodSkuYml0cy5tYW5oICY9IH5MREJMX05CSVQpCi0jZWxzZSAvKiBfQklHX0VORElBTiAqLwotLyoKLSAqIFhYWCBUaGlzIGRvZXNuJ3QgbG9vayByaWdodC4gIFZlcnkgZmV3IG1hY2hpbmVzIGhhdmUgYSBkaWZmZXJlbnQKLSAqICAgICBlbmRpYW5uZXNzIGZvciBpbnRlZ2VycyBhbmQgZmxvYXRpbmctcG9pbnQsIGFuZCBpbiBuZXh0YWZ0ZXJsKCkKLSAqICAgICB3ZSBhc3N1bWUgdGhhdCBub25lIGRvLiAgSWYgeW91IGhhdmUgYW4gZW52aXJvbm1lbnQgZm9yIHRlc3RpbmcKLSAqICAgICB0aGlzLCBwbGVhc2UgbGV0IG1lIGtub3cuIC0tZGFzCi0gKi8KLSNkZWZpbmUJTERCTF9OQklUCTB4ODAKLSNkZWZpbmUJbWFza19uYml0X2wodSkJKCh1KS5iaXRzLm1hbmggJj0gfkxEQkxfTkJJVCkKLSNlbmRpZgotCi0jZGVmaW5lCUxEQkxfTUFOSF9TSVpFCTMyCi0jZGVmaW5lCUxEQkxfTUFOTF9TSVpFCTMyCi0KLSNkZWZpbmUJTERCTF9UT19BUlJBWTMyKHUsIGEpIGRvIHsJCQlcCi0JKGEpWzBdID0gKHVpbnQzMl90KSh1KS5iaXRzLm1hbmw7CQlcCi0JKGEpWzFdID0gKHVpbnQzMl90KSh1KS5iaXRzLm1hbmg7CQlcCi19IHdoaWxlKDApCmRpZmYgLS1naXQgYS9saWJtL2lhNjQvZmVudi5jIGIvbGlibS9pYTY0L2ZlbnYuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTgyZDM3ZS4uMDAwMDAwMAotLS0gYS9saWJtL2lhNjQvZmVudi5jCisrKyAvZGV2L251bGwKQEAgLTEsNDkgKzAsMCBAQAotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgRGF2aWQgU2NodWx0eiA8ZGFzQEZyZWVCU0QuT1JHPgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqCi0gKiAkRnJlZUJTRDogc3JjL2xpYi9tc3VuL2lhNjQvZmVudi5jLHYgMS4yIDIwMDQvMDYvMTEgMDI6MzU6MzAgZGFzIEV4cCAkCi0gKi8KLQotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPGZlbnYuaD4KLQotY29uc3QgZmVudl90IF9fZmVfZGZsX2VudiA9IDB4MDAwOTgwNGM4YTcwMDMzZlVMTDsKLQotLyoKLSAqIEl0IGRvZXNuJ3QgcGF5IHRvIGlubGluZSBmZXVwZGF0ZWVudigpIGJlY2F1c2UgaXQgaW5jbHVkZXMgb25lIG9mCi0gKiB0aGUgcmFyZSB1c2VzIG9mIGZlcmFpc2VleGNlcHQoKSB3aGVyZSB0aGUgYXJndW1lbnQgaXMgbm90IGEKLSAqIGNvbnN0YW50LiAgVGh1cywgbm8gZGVhZCBjb2RlIGVsaW1pbmF0aW9uIGNhbiBvY2N1ciwgcmVzdWx0aW5nIGluCi0gKiBzaWduaWZpY2FudCBibG9hdC4KLSAqLwotaW50Ci1mZXVwZGF0ZWVudihjb25zdCBmZW52X3QgKmVudnApCi17Ci0JZmVudl90IGZwc3I7Ci0KLQlfX3N0ZnBzcigmZnBzcik7Ci0JX19sZGZwc3IoKmVudnApOwotCWZlcmFpc2VleGNlcHQoKGZwc3IgPj4gX0ZQVVNXX1NISUZUKSAmIEZFX0FMTF9FWENFUFQpOwotCXJldHVybiAoMCk7Ci19CmRpZmYgLS1naXQgYS9saWJtL2lhNjQvZmVudi5oIGIvbGlibS9pYTY0L2ZlbnYuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGM2YjY1Yi4uMDAwMDAwMAotLS0gYS9saWJtL2lhNjQvZmVudi5oCisrKyAvZGV2L251bGwKQEAgLTEsMjQyICswLDAgQEAKLS8qLQotICogQ29weXJpZ2h0IChjKSAyMDA0LTIwMDUgRGF2aWQgU2NodWx0eiA8ZGFzQEZyZWVCU0QuT1JHPgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqCi0gKiAkRnJlZUJTRDogc3JjL2xpYi9tc3VuL2lhNjQvZmVudi5oLHYgMS40IDIwMDUvMDMvMTYgMTk6MDM6NDUgZGFzIEV4cCAkCi0gKi8KLQotI2lmbmRlZglfRkVOVl9IXwotI2RlZmluZQlfRkVOVl9IXwotCi0jaW5jbHVkZSA8c3lzL190eXBlcy5oPgotCi10eXBlZGVmCV9fdWludDY0X3QJZmVudl90OwotdHlwZWRlZglfX3VpbnQxNl90CWZleGNlcHRfdDsKLQotLyogRXhjZXB0aW9uIGZsYWdzICovCi0jZGVmaW5lCUZFX0lOVkFMSUQJMHgwMQotI2RlZmluZQlGRV9ERU5PUk1BTAkweDAyCi0jZGVmaW5lCUZFX0RJVkJZWkVSTwkweDA0Ci0jZGVmaW5lCUZFX09WRVJGTE9XCTB4MDgKLSNkZWZpbmUJRkVfVU5ERVJGTE9XCTB4MTAKLSNkZWZpbmUJRkVfSU5FWEFDVAkweDIwCi0jZGVmaW5lCUZFX0FMTF9FWENFUFQJKEZFX0RJVkJZWkVSTyB8IEZFX0RFTk9STUFMIHwgRkVfSU5FWEFDVCB8IFwKLQkJCSBGRV9JTlZBTElEIHwgRkVfT1ZFUkZMT1cgfCBGRV9VTkRFUkZMT1cpCi0KLS8qIFJvdW5kaW5nIG1vZGVzICovCi0jZGVmaW5lCUZFX1RPTkVBUkVTVAkweDAwMDAKLSNkZWZpbmUJRkVfRE9XTldBUkQJMHgwNDAwCi0jZGVmaW5lCUZFX1VQV0FSRAkweDA4MDAKLSNkZWZpbmUJRkVfVE9XQVJEWkVSTwkweDBjMDAKLSNkZWZpbmUJX1JPVU5EX01BU0sJKEZFX1RPTkVBUkVTVCB8IEZFX0RPV05XQVJEIHwgXAotCQkJIEZFX1VQV0FSRCB8IEZFX1RPV0FSRFpFUk8pCi0KLV9fQkVHSU5fREVDTFMKLQotLyogRGVmYXVsdCBmbG9hdGluZy1wb2ludCBlbnZpcm9ubWVudCAqLwotZXh0ZXJuIGNvbnN0IGZlbnZfdAlfX2ZlX2RmbF9lbnY7Ci0jZGVmaW5lCUZFX0RGTF9FTlYJKCZfX2ZlX2RmbF9lbnYpCi0KLSNkZWZpbmUJX0ZQVVNXX1NISUZUCTEzCi0KLSNkZWZpbmUJX19zdGZwc3IoX19yKQlfX2FzbSBfX3ZvbGF0aWxlKCJtb3YgJTA9YXIuZnBzciIgOiAiPXIiICgqKF9fcikpKQotI2RlZmluZQlfX2xkZnBzcihfX3IpCV9fYXNtIF9fdm9sYXRpbGUoIm1vdiBhci5mcHNyPSUwOzsiIDogOiAiciIgKF9fcikpCi0KLXN0YXRpYyBfX2lubGluZSBpbnQKLWZlY2xlYXJleGNlcHQoaW50IF9fZXhjZXB0cykKLXsKLQlmZW52X3QgX19mcHNyOwotCi0JX19zdGZwc3IoJl9fZnBzcik7Ci0JX19mcHNyICY9IH4oKGZlbnZfdClfX2V4Y2VwdHMgPDwgX0ZQVVNXX1NISUZUKTsKLQlfX2xkZnBzcihfX2Zwc3IpOwotCXJldHVybiAoMCk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZSBpbnQKLWZlZ2V0ZXhjZXB0ZmxhZyhmZXhjZXB0X3QgKl9fZmxhZ3AsIGludCBfX2V4Y2VwdHMpCi17Ci0JZmVudl90IF9fZnBzcjsKLQotCV9fc3RmcHNyKCZfX2Zwc3IpOwotCSpfX2ZsYWdwID0gKGZleGNlcHRfdCkoX19mcHNyID4+IF9GUFVTV19TSElGVCkgJiBfX2V4Y2VwdHM7Ci0JcmV0dXJuICgwKTsKLX0KLQotc3RhdGljIF9faW5saW5lIGludAotZmVzZXRleGNlcHRmbGFnKGNvbnN0IGZleGNlcHRfdCAqX19mbGFncCwgaW50IF9fZXhjZXB0cykKLXsKLQlmZW52X3QgX19mcHNyOwotCi0JX19zdGZwc3IoJl9fZnBzcik7Ci0JX19mcHNyICY9IH4oKGZlbnZfdClfX2V4Y2VwdHMgPDwgX0ZQVVNXX1NISUZUKTsKLQlfX2Zwc3IgfD0gKGZlbnZfdCkoX19leGNlcHRzICYgKl9fZmxhZ3ApIDw8IF9GUFVTV19TSElGVDsKLQlfX2xkZnBzcihfX2Zwc3IpOwotCXJldHVybiAoMCk7Ci19Ci0KLS8qCi0gKiBJdCBpcyB3b3J0aHdoaWxlIHRvIHVzZSB0aGUgaW5saW5lIHZlcnNpb24gb2YgdGhpcyBmdW5jdGlvbiBpZmYgaXQKLSAqIGlzIGNhbGxlZCB3aXRoIGFyZ3VtZW50cyB0aGF0IGFyZSBjb21waWxlLXRpbWUgY29uc3RhbnRzIChkdWUgdG8KLSAqIGRlYWQgY29kZSBlbGltaW5hdGlvbikuICBVbmZvcnR1bmF0ZWx5LCBnY2MgaXNuJ3Qgc21hcnQgZW5vdWdoIHRvCi0gKiBmaWd1cmUgdGhpcyBvdXQgYXV0b21hdGljYWxseSwgYW5kIHRoZXJlJ3Mgbm8gd2F5IHRvIHRlbGwgaXQuCi0gKiBXZSBhc3N1bWUgdGhhdCBjb25zdGFudCBhcmd1bWVudHMgd2lsbCBiZSB0aGUgY29tbW9uIGNhc2UuCi0gKi8KLXN0YXRpYyBfX2lubGluZSBpbnQKLWZlcmFpc2VleGNlcHQoaW50IF9fZXhjZXB0cykKLXsKLQl2b2xhdGlsZSBkb3VibGUgZDsKLQotCS8qCi0JICogV2l0aCBhIGNvbXBpbGVyIHRoYXQgc3VwcG9ydHMgdGhlIEZFTlZfQUNDRVNTIHByYWdtYQotCSAqIHByb3Blcmx5LCBzaW1wbGUgZXhwcmVzc2lvbnMgbGlrZSAnMC4wIC8gMC4wJyBzaG91bGQKLQkgKiBiZSBzdWZmaWNpZW50IHRvIGdlbmVyYXRlIHRyYXBzLiAgVW5mb3J0dW5hdGVseSwgd2UKLQkgKiBuZWVkIHRvIGJyaW5nIGEgdm9sYXRpbGUgdmFyaWFibGUgaW50byB0aGUgZXF1YXRpb24KLQkgKiB0byBwcmV2ZW50IGluY29ycmVjdCBvcHRpbWl6YXRpb25zLgotCSAqLwotCWlmIChfX2V4Y2VwdHMgJiBGRV9JTlZBTElEKSB7Ci0JCWQgPSAwLjA7Ci0JCWQgPSAwLjAgLyBkOwotCX0KLQlpZiAoX19leGNlcHRzICYgRkVfRElWQllaRVJPKSB7Ci0JCWQgPSAwLjA7Ci0JCWQgPSAxLjAgLyBkOwotCX0KLQlpZiAoX19leGNlcHRzICYgRkVfT1ZFUkZMT1cpIHsKLQkJZCA9IDB4MS5mZnAxMDIzOwotCQlkICo9IDIuMDsKLQl9Ci0JaWYgKF9fZXhjZXB0cyAmIEZFX1VOREVSRkxPVykgewotCQlkID0gMHgxcC0xMDIyOwotCQlkIC89IDB4MXAxMDIzOwotCX0KLQlpZiAoX19leGNlcHRzICYgRkVfSU5FWEFDVCkgewotCQlkID0gMHgxcC0xMDIyOwotCQlkICs9IDEuMDsKLQl9Ci0JcmV0dXJuICgwKTsKLX0KLQotc3RhdGljIF9faW5saW5lIGludAotZmV0ZXN0ZXhjZXB0KGludCBfX2V4Y2VwdHMpCi17Ci0JZmVudl90IF9fZnBzcjsKLQotCV9fc3RmcHNyKCZfX2Zwc3IpOwotCXJldHVybiAoKF9fZnBzciA+PiBfRlBVU1dfU0hJRlQpICYgX19leGNlcHRzKTsKLX0KLQotCi1zdGF0aWMgX19pbmxpbmUgaW50Ci1mZWdldHJvdW5kKHZvaWQpCi17Ci0JZmVudl90IF9fZnBzcjsKLQotCV9fc3RmcHNyKCZfX2Zwc3IpOwotCXJldHVybiAoX19mcHNyICYgX1JPVU5EX01BU0spOwotfQotCi1zdGF0aWMgX19pbmxpbmUgaW50Ci1mZXNldHJvdW5kKGludCBfX3JvdW5kKQotewotCWZlbnZfdCBfX2Zwc3I7Ci0KLQlpZiAoX19yb3VuZCAmIH5fUk9VTkRfTUFTSykKLQkJcmV0dXJuICgtMSk7Ci0JX19zdGZwc3IoJl9fZnBzcik7Ci0JX19mcHNyICY9IH5fUk9VTkRfTUFTSzsKLQlfX2Zwc3IgfD0gX19yb3VuZDsKLQlfX2xkZnBzcihfX2Zwc3IpOwotCXJldHVybiAoMCk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZSBpbnQKLWZlZ2V0ZW52KGZlbnZfdCAqX19lbnZwKQotewotCi0JX19zdGZwc3IoX19lbnZwKTsKLQlyZXR1cm4gKDApOwotfQotCi1zdGF0aWMgX19pbmxpbmUgaW50Ci1mZWhvbGRleGNlcHQoZmVudl90ICpfX2VudnApCi17Ci0JZmVudl90IF9fZnBzcjsKLQotCV9fc3RmcHNyKCZfX2Zwc3IpOwotCSpfX2VudnAgPSBfX2Zwc3I7Ci0JX19mcHNyICY9IH4oKGZlbnZfdClGRV9BTExfRVhDRVBUIDw8IF9GUFVTV19TSElGVCk7Ci0JX19mcHNyIHw9IEZFX0FMTF9FWENFUFQ7Ci0JX19sZGZwc3IoX19mcHNyKTsKLQlyZXR1cm4gKDApOwotfQotCi1zdGF0aWMgX19pbmxpbmUgaW50Ci1mZXNldGVudihjb25zdCBmZW52X3QgKl9fZW52cCkKLXsKLQotCV9fbGRmcHNyKCpfX2VudnApOwotCXJldHVybiAoMCk7Ci19Ci0KLWludCBmZXVwZGF0ZWVudihjb25zdCBmZW52X3QgKl9fZW52cCk7Ci0KLSNpZiBfX0JTRF9WSVNJQkxFCi0KLXN0YXRpYyBfX2lubGluZSBpbnQKLWZlZW5hYmxlZXhjZXB0KGludCBfX21hc2spCi17Ci0JZmVudl90IF9fbmV3ZnBzciwgX19vbGRmcHNyOwotCi0JX19zdGZwc3IoJl9fb2xkZnBzcik7Ci0JX19uZXdmcHNyID0gX19vbGRmcHNyICYgfihfX21hc2sgJiBGRV9BTExfRVhDRVBUKTsKLQlfX2xkZnBzcihfX25ld2Zwc3IpOwotCXJldHVybiAofl9fb2xkZnBzciAmIEZFX0FMTF9FWENFUFQpOwotfQotCi1zdGF0aWMgX19pbmxpbmUgaW50Ci1mZWRpc2FibGVleGNlcHQoaW50IF9fbWFzaykKLXsKLQlmZW52X3QgX19uZXdmcHNyLCBfX29sZGZwc3I7Ci0KLQlfX3N0ZnBzcigmX19vbGRmcHNyKTsKLQlfX25ld2Zwc3IgPSBfX29sZGZwc3IgfCAoX19tYXNrICYgRkVfQUxMX0VYQ0VQVCk7Ci0JX19sZGZwc3IoX19uZXdmcHNyKTsKLQlyZXR1cm4gKH5fX29sZGZwc3IgJiBGRV9BTExfRVhDRVBUKTsKLX0KLQotc3RhdGljIF9faW5saW5lIGludAotZmVnZXRleGNlcHQodm9pZCkKLXsKLQlmZW52X3QgX19mcHNyOwotCi0JX19zdGZwc3IoJl9fZnBzcik7Ci0JcmV0dXJuICh+X19mcHNyICYgRkVfQUxMX0VYQ0VQVCk7Ci19Ci0KLSNlbmRpZiAvKiBfX0JTRF9WSVNJQkxFICovCi0KLV9fRU5EX0RFQ0xTCi0KLSNlbmRpZgkvKiAhX0ZFTlZfSF8gKi8KZGlmZiAtLWdpdCBhL2xpYm0vaWE2NC9zX2ZtYS5TIGIvbGlibS9pYTY0L3NfZm1hLlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJkYTZjMTcuLjAwMDAwMDAKLS0tIGEvbGlibS9pYTY0L3NfZm1hLlMKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi0vKi0KLSAqIENvcHlyaWdodCAoYykgMjAwNSBEYXZpZCBTY2h1bHR6IDxkYXNARnJlZUJTRC5PUkc+Ci0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgotX19GQlNESUQoIiRGcmVlQlNEOiBzcmMvbGliL21zdW4vaWE2NC9zX2ZtYS5TLHYgMS4xIDIwMDUvMDEvMjIgMDk6NTM6MTggZGFzIEV4cCAkIikKLQotRU5UUlkoZm1hLCAzKQotewotCWZtYS5kCQlmOCA9IGY4LCBmOSwgZjEwCi0JYnIucmV0LnNwdGsJYjAKLX0KZGlmZiAtLWdpdCBhL2xpYm0vaWE2NC9zX2ZtYWYuUyBiL2xpYm0vaWE2NC9zX2ZtYWYuUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzIwMDUxYi4uMDAwMDAwMAotLS0gYS9saWJtL2lhNjQvc19mbWFmLlMKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi0vKi0KLSAqIENvcHlyaWdodCAoYykgMjAwNSBEYXZpZCBTY2h1bHR6IDxkYXNARnJlZUJTRC5PUkc+Ci0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgotX19GQlNESUQoIiRGcmVlQlNEOiBzcmMvbGliL21zdW4vaWE2NC9zX2ZtYWYuUyx2IDEuMSAyMDA1LzAxLzIyIDA5OjUzOjE4IGRhcyBFeHAgJCIpCi0KLUVOVFJZKGZtYWYsIDMpCi17Ci0JZm1hLnMJCWY4ID0gZjgsIGY5LCBmMTAKLQlici5yZXQuc3B0awliMAotfQpkaWZmIC0tZ2l0IGEvbGlibS9pYTY0L3NfZm1hbC5TIGIvbGlibS9pYTY0L3NfZm1hbC5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YjhjNDA3Li4wMDAwMDAwCi0tLSBhL2xpYm0vaWE2NC9zX2ZtYWwuUworKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLS8qLQotICogQ29weXJpZ2h0IChjKSAyMDA1IERhdmlkIFNjaHVsdHogPGRhc0BGcmVlQlNELk9SRz4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+Ci1fX0ZCU0RJRCgiJEZyZWVCU0Q6IHNyYy9saWIvbXN1bi9pYTY0L3NfZm1hbC5TLHYgMS4xIDIwMDUvMDMvMDcgMDQ6NTM6MTEgZGFzIEV4cCAkIikKLQotRU5UUlkoZm1hbCwgMykKLXsKLQlmbWEJCWY4ID0gZjgsIGY5LCBmMTAKLQlici5yZXQuc3B0awliMAotfQpkaWZmIC0tZ2l0IGEvbGlibS9pbmNsdWRlL2FscGhhL2ZlbnYuaCBiL2xpYm0vaW5jbHVkZS9hbHBoYS9mZW52LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRjN2JjYjcuLjAwMDAwMDAKLS0tIGEvbGlibS9pbmNsdWRlL2FscGhhL2ZlbnYuaAorKysgL2Rldi9udWxsCkBAIC0xLDE4NSArMCwwIEBACi0vKi0KLSAqIENvcHlyaWdodCAoYykgMjAwNC0yMDA1IERhdmlkIFNjaHVsdHogPGRhc0BGcmVlQlNELk9SRz4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKgotICogJEZyZWVCU0Q6IHNyYy9saWIvbXN1bi9hbHBoYS9mZW52LmgsdiAxLjMgMjAwNS8wMy8xNiAxOTowMzo0NCBkYXMgRXhwICQKLSAqLwotCi0jaWZuZGVmCV9GRU5WX0hfCi0jZGVmaW5lCV9GRU5WX0hfCi0KLSNpbmNsdWRlIDxzeXMvX3R5cGVzLmg+Ci0KLXR5cGVkZWYJX191aW50NjRfdAlmZW52X3Q7Ci10eXBlZGVmCV9fdWludDE2X3QJZmV4Y2VwdF90OwotCi0vKiBFeGNlcHRpb24gZmxhZ3MgKi8KLSNkZWZpbmUJRkVfSU5WQUxJRAkweDAyCi0jZGVmaW5lCUZFX0RJVkJZWkVSTwkweDA0Ci0jZGVmaW5lCUZFX09WRVJGTE9XCTB4MDgKLSNkZWZpbmUJRkVfVU5ERVJGTE9XCTB4MTAKLSNkZWZpbmUJRkVfSU5FWEFDVAkweDIwCi0jZGVmaW5lCUZFX0lOVE9WRgkweDQwCS8qIG5vdCBtYXNrYWJsZSAqLwotI2RlZmluZQlGRV9BTExfRVhDRVBUCShGRV9ESVZCWVpFUk8gfCBGRV9JTkVYQUNUIHwgRkVfSU5UT1ZGIHwgXAotCQkJIEZFX0lOVkFMSUQgfCBGRV9PVkVSRkxPVyB8IEZFX1VOREVSRkxPVykKLQotLyogUm91bmRpbmcgbW9kZXMgKi8KLSNkZWZpbmUJRkVfVE9XQVJEWkVSTwkweDAwCi0jZGVmaW5lCUZFX0RPV05XQVJECTB4MDEKLSNkZWZpbmUJRkVfVE9ORUFSRVNUCTB4MDIKLSNkZWZpbmUJRkVfVVBXQVJECTB4MDMKLSNkZWZpbmUJX1JPVU5EX01BU0sJKEZFX1RPTkVBUkVTVCB8IEZFX0RPV05XQVJEIHwgXAotCQkJIEZFX1VQV0FSRCB8IEZFX1RPV0FSRFpFUk8pCi0jZGVmaW5lCV9ST1VORF9TSElGVAk1OAotCi0jZGVmaW5lCV9GUFVTV19TSElGVAk1MQotCi0jZGVmaW5lCV9fZXhjYigpCV9fYXNtIF9fdm9sYXRpbGUoImV4Y2IiKQotI2RlZmluZQlfX21mX2ZwY3IoX19jdykJX19hc20gX192b2xhdGlsZSgibWZfZnBjciAlMCIgOiAiPWYiICgqKF9fY3cpKSkKLSNkZWZpbmUJX19tdF9mcGNyKF9fY3cpCV9fYXNtIF9fdm9sYXRpbGUoIm10X2ZwY3IgJTAiIDogOiAiZiIgKF9fY3cpKQotCi11bmlvbiBfX2ZwY3IgewotCWRvdWJsZSBfX2Q7Ci0JZmVudl90IF9fYml0czsKLX07Ci0KLV9fQkVHSU5fREVDTFMKLQotLyogRGVmYXVsdCBmbG9hdGluZy1wb2ludCBlbnZpcm9ubWVudCAqLwotZXh0ZXJuIGNvbnN0IGZlbnZfdAlfX2ZlX2RmbF9lbnY7Ci0jZGVmaW5lCUZFX0RGTF9FTlYJKCZfX2ZlX2RmbF9lbnYpCi0KLXN0YXRpYyBfX2lubGluZSBpbnQKLWZlY2xlYXJleGNlcHQoaW50IF9fZXhjZXB0cykKLXsKLQl1bmlvbiBfX2ZwY3IgX19yOwotCi0JX19leGNiKCk7Ci0JX19tZl9mcGNyKCZfX3IuX19kKTsKLQlfX3IuX19iaXRzICY9IH4oKGZlbnZfdClfX2V4Y2VwdHMgPDwgX0ZQVVNXX1NISUZUKTsKLQlfX210X2ZwY3IoX19yLl9fZCk7Ci0JX19leGNiKCk7Ci0JcmV0dXJuICgwKTsKLX0KLQotc3RhdGljIF9faW5saW5lIGludAotZmVnZXRleGNlcHRmbGFnKGZleGNlcHRfdCAqX19mbGFncCwgaW50IF9fZXhjZXB0cykKLXsKLQl1bmlvbiBfX2ZwY3IgX19yOwotCi0JX19leGNiKCk7Ci0JX19tZl9mcGNyKCZfX3IuX19kKTsKLQlfX2V4Y2IoKTsKLQkqX19mbGFncCA9IChfX3IuX19iaXRzID4+IF9GUFVTV19TSElGVCkgJiBfX2V4Y2VwdHM7Ci0JcmV0dXJuICgwKTsKLX0KLQotc3RhdGljIF9faW5saW5lIGludAotZmVzZXRleGNlcHRmbGFnKGNvbnN0IGZleGNlcHRfdCAqX19mbGFncCwgaW50IF9fZXhjZXB0cykKLXsKLQl1bmlvbiBfX2ZwY3IgX19yOwotCWZlbnZfdCBfX3hmbGFnLCBfX3hleGNlcHRzOwotCi0JX194ZmxhZyA9IChmZW52X3QpKl9fZmxhZ3AgPDwgX0ZQVVNXX1NISUZUOwotCV9feGV4Y2VwdHMgPSAoZmVudl90KV9fZXhjZXB0cyA8PCBfRlBVU1dfU0hJRlQ7Ci0JX19leGNiKCk7Ci0JX19tZl9mcGNyKCZfX3IuX19kKTsKLQlfX3IuX19iaXRzICY9IH5fX3hleGNlcHRzOwotCV9fci5fX2JpdHMgfD0gX194ZmxhZyAmIF9feGV4Y2VwdHM7Ci0JX19tdF9mcGNyKF9fci5fX2QpOwotCV9fZXhjYigpOwotCXJldHVybiAoMCk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZSBpbnQKLWZlcmFpc2VleGNlcHQoaW50IF9fZXhjZXB0cykKLXsKLQotCS8qCi0JICogWFhYIEdlbmVyYXRpbmcgZXhjZXB0aW9ucyB0aGlzIHdheSBkb2VzIG5vdCBhY3R1YWxseSBpbnZva2UKLQkgKiBhIHVzZXJsYW5kIHRyYXAgaGFuZGxlciB3aGVuIGVuYWJsZWQsIGJ1dCBuZWl0aGVyIGRvCi0JICogYXJpdGhtZXRpYyBvcGVyYXRpb25zIGFzIGZhciBhcyBJIGNhbiB0ZWxsLiAgUGVyaGFwcyB0aGVyZQotCSAqIGFyZSBtb3JlIGJ1Z3MgaW4gdGhlIGtlcm5lbCB0cmFwIGhhbmRsZXIuCi0JICovCi0JZmV4Y2VwdF90IF9fZXggPSBfX2V4Y2VwdHM7Ci0JZmVzZXRleGNlcHRmbGFnKCZfX2V4LCBfX2V4Y2VwdHMpOwotCXJldHVybiAoMCk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZSBpbnQKLWZldGVzdGV4Y2VwdChpbnQgX19leGNlcHRzKQotewotCXVuaW9uIF9fZnBjciBfX3I7Ci0KLQlfX2V4Y2IoKTsKLQlfX21mX2ZwY3IoJl9fci5fX2QpOwotCV9fZXhjYigpOwotCXJldHVybiAoKF9fci5fX2JpdHMgPj4gX0ZQVVNXX1NISUZUKSAmIF9fZXhjZXB0cyk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZSBpbnQKLWZlZ2V0cm91bmQodm9pZCkKLXsKLQl1bmlvbiBfX2ZwY3IgX19yOwotCi0JLyoKLQkgKiBObyBleGNlcHRpb24gYmFycmllcnMgc2hvdWxkIGJlIHJlcXVpcmVkIGhlcmUgaWYgd2UgYXNzdW1lCi0JICogdGhhdCBvbmx5IGZlc2V0cm91bmQoKSBjYW4gY2hhbmdlIHRoZSByb3VuZGluZyBtb2RlLgotCSAqLwotCV9fbWZfZnBjcigmX19yLl9fZCk7Ci0JcmV0dXJuICgoaW50KShfX3IuX19iaXRzID4+IF9ST1VORF9TSElGVCkgJiBfUk9VTkRfTUFTSyk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZSBpbnQKLWZlc2V0cm91bmQoaW50IF9fcm91bmQpCi17Ci0JdW5pb24gX19mcGNyIF9fcjsKLQotCWlmIChfX3JvdW5kICYgfl9ST1VORF9NQVNLKQotCQlyZXR1cm4gKC0xKTsKLQlfX2V4Y2IoKTsKLQlfX21mX2ZwY3IoJl9fci5fX2QpOwotCV9fci5fX2JpdHMgJj0gfigoZmVudl90KV9ST1VORF9NQVNLIDw8IF9ST1VORF9TSElGVCk7Ci0JX19yLl9fYml0cyB8PSAoZmVudl90KV9fcm91bmQgPDwgX1JPVU5EX1NISUZUOwotCV9fbXRfZnBjcihfX3IuX19kKTsKLQlfX2V4Y2IoKTsKLQlyZXR1cm4gKDApOwotfQotCi1pbnQJZmVnZXRlbnYoZmVudl90ICpfX2VudnApOwotaW50CWZlaG9sZGV4Y2VwdChmZW52X3QgKl9fZW52cCk7Ci1pbnQJZmVzZXRlbnYoY29uc3QgZmVudl90ICpfX2VudnApOwotaW50CWZldXBkYXRlZW52KGNvbnN0IGZlbnZfdCAqX19lbnZwKTsKLQotI2lmIF9fQlNEX1ZJU0lCTEUKLQotaW50CWZlZW5hYmxlZXhjZXB0KGludCBfX21hc2spOwotaW50CWZlZGlzYWJsZWV4Y2VwdChpbnQgX19tYXNrKTsKLWludAlmZWdldGV4Y2VwdCh2b2lkKTsKLQotI2VuZGlmIC8qIF9fQlNEX1ZJU0lCTEUgKi8KLQotX19FTkRfREVDTFMKLQotI2VuZGlmCS8qICFfRkVOVl9IXyAqLwpkaWZmIC0tZ2l0IGEvbGlibS9pbmNsdWRlL2FtZDY0L2ZlbnYuaCBiL2xpYm0vaW5jbHVkZS9hbWQ2NC9mZW52LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM0Zjk0MzIuLjAwMDAwMDAKLS0tIGEvbGlibS9pbmNsdWRlL2FtZDY0L2ZlbnYuaAorKysgL2Rldi9udWxsCkBAIC0xLDIwMyArMCwwIEBACi0vKi0KLSAqIENvcHlyaWdodCAoYykgMjAwNC0yMDA1IERhdmlkIFNjaHVsdHogPGRhc0BGcmVlQlNELk9SRz4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKgotICogJEZyZWVCU0Q6IHNyYy9saWIvbXN1bi9hbWQ2NC9mZW52LmgsdiAxLjUgMjAwNS8wMy8xNiAyMjozNDoxNCBkYXMgRXhwICQKLSAqLwotCi0jaWZuZGVmCV9GRU5WX0hfCi0jZGVmaW5lCV9GRU5WX0hfCi0KLSNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KLSNpbmNsdWRlIDxzeXMvX3R5cGVzLmg+Ci0KLXR5cGVkZWYgc3RydWN0IHsKLQlzdHJ1Y3QgewotCQlfX3VpbnQzMl90CV9fY29udHJvbDsKLQkJX191aW50MzJfdAlfX3N0YXR1czsKLQkJX191aW50MzJfdAlfX3RhZzsKLQkJY2hhcgkJX19vdGhlclsxNl07Ci0JfSBfX3g4NzsKLQlfX3VpbnQzMl90CQlfX214Y3NyOwotfSBmZW52X3Q7Ci0KLXR5cGVkZWYJX191aW50MTZfdAlmZXhjZXB0X3Q7Ci0KLS8qIEV4Y2VwdGlvbiBmbGFncyAqLwotI2RlZmluZQlGRV9JTlZBTElECTB4MDEKLSNkZWZpbmUJRkVfREVOT1JNQUwJMHgwMgotI2RlZmluZQlGRV9ESVZCWVpFUk8JMHgwNAotI2RlZmluZQlGRV9PVkVSRkxPVwkweDA4Ci0jZGVmaW5lCUZFX1VOREVSRkxPVwkweDEwCi0jZGVmaW5lCUZFX0lORVhBQ1QJMHgyMAotI2RlZmluZQlGRV9BTExfRVhDRVBUCShGRV9ESVZCWVpFUk8gfCBGRV9ERU5PUk1BTCB8IEZFX0lORVhBQ1QgfCBcCi0JCQkgRkVfSU5WQUxJRCB8IEZFX09WRVJGTE9XIHwgRkVfVU5ERVJGTE9XKQotCi0vKiBSb3VuZGluZyBtb2RlcyAqLwotI2RlZmluZQlGRV9UT05FQVJFU1QJMHgwMDAwCi0jZGVmaW5lCUZFX0RPV05XQVJECTB4MDQwMAotI2RlZmluZQlGRV9VUFdBUkQJMHgwODAwCi0jZGVmaW5lCUZFX1RPV0FSRFpFUk8JMHgwYzAwCi0jZGVmaW5lCV9ST1VORF9NQVNLCShGRV9UT05FQVJFU1QgfCBGRV9ET1dOV0FSRCB8IFwKLQkJCSBGRV9VUFdBUkQgfCBGRV9UT1dBUkRaRVJPKQotCi0vKgotICogQXMgY29tcGFyZWQgdG8gdGhlIHg4NyBjb250cm9sIHdvcmQsIHRoZSBTU0UgdW5pdCdzIGNvbnRyb2wgd29yZAotICogaGFzIHRoZSByb3VuZGluZyBjb250cm9sIGJpdHMgb2Zmc2V0IGJ5IDMgYW5kIHRoZSBleGNlcHRpb24gbWFzawotICogYml0cyBvZmZzZXQgYnkgNy4KLSAqLwotI2RlZmluZQlfU1NFX1JPVU5EX1NISUZUCTMKLSNkZWZpbmUJX1NTRV9FTUFTS19TSElGVAk3Ci0KLV9fQkVHSU5fREVDTFMKLQotLyogRGVmYXVsdCBmbG9hdGluZy1wb2ludCBlbnZpcm9ubWVudCAqLwotZXh0ZXJuIGNvbnN0IGZlbnZfdAlfX2ZlX2RmbF9lbnY7Ci0jZGVmaW5lCUZFX0RGTF9FTlYJKCZfX2ZlX2RmbF9lbnYpCi0KLSNkZWZpbmUJX19mbGRjdyhfX2N3KQkJX19hc20gX192b2xhdGlsZSgiZmxkY3cgJTAiIDogOiAibSIgKF9fY3cpKQotI2RlZmluZQlfX2ZsZGVudihfX2VudikJCV9fYXNtIF9fdm9sYXRpbGUoImZsZGVudiAlMCIgOiA6ICJtIiAoX19lbnYpKQotI2RlZmluZQlfX2ZuY2xleCgpCQlfX2FzbSBfX3ZvbGF0aWxlKCJmbmNsZXgiKQotI2RlZmluZQlfX2Zuc3RlbnYoX19lbnYpCV9fYXNtIF9fdm9sYXRpbGUoImZuc3RlbnYgJTAiIDogIj1tIiAoKihfX2VudikpKQotI2RlZmluZQlfX2Zuc3RjdyhfX2N3KQkJX19hc20gX192b2xhdGlsZSgiZm5zdGN3ICUwIiA6ICI9bSIgKCooX19jdykpKQotI2RlZmluZQlfX2Zuc3RzdyhfX3N3KQkJX19hc20gX192b2xhdGlsZSgiZm5zdHN3ICUwIiA6ICI9YW0iICgqKF9fc3cpKSkKLSNkZWZpbmUJX19md2FpdCgpCQlfX2FzbSBfX3ZvbGF0aWxlKCJmd2FpdCIpCi0jZGVmaW5lCV9fbGRteGNzcihfX2NzcikJX19hc20gX192b2xhdGlsZSgibGRteGNzciAlMCIgOiA6ICJtIiAoX19jc3IpKQotI2RlZmluZQlfX3N0bXhjc3IoX19jc3IpCV9fYXNtIF9fdm9sYXRpbGUoInN0bXhjc3IgJTAiIDogIj1tIiAoKihfX2NzcikpKQotCi1zdGF0aWMgX19pbmxpbmUgaW50Ci1mZWNsZWFyZXhjZXB0KGludCBfX2V4Y2VwdHMpCi17Ci0JZmVudl90IF9fZW52OwotCi0JaWYgKF9fZXhjZXB0cyA9PSBGRV9BTExfRVhDRVBUKSB7Ci0JCV9fZm5jbGV4KCk7Ci0JfSBlbHNlIHsKLQkJX19mbnN0ZW52KCZfX2Vudi5fX3g4Nyk7Ci0JCV9fZW52Ll9feDg3Ll9fc3RhdHVzICY9IH5fX2V4Y2VwdHM7Ci0JCV9fZmxkZW52KF9fZW52Ll9feDg3KTsKLQl9Ci0JX19zdG14Y3NyKCZfX2Vudi5fX214Y3NyKTsKLQlfX2Vudi5fX214Y3NyICY9IH5fX2V4Y2VwdHM7Ci0JX19sZG14Y3NyKF9fZW52Ll9fbXhjc3IpOwotCXJldHVybiAoMCk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZSBpbnQKLWZlZ2V0ZXhjZXB0ZmxhZyhmZXhjZXB0X3QgKl9fZmxhZ3AsIGludCBfX2V4Y2VwdHMpCi17Ci0JaW50IF9fbXhjc3IsIF9fc3RhdHVzOwotCi0JX19zdG14Y3NyKCZfX214Y3NyKTsKLQlfX2Zuc3RzdygmX19zdGF0dXMpOwotCSpfX2ZsYWdwID0gKF9fbXhjc3IgfCBfX3N0YXR1cykgJiBfX2V4Y2VwdHM7Ci0JcmV0dXJuICgwKTsKLX0KLQotaW50IGZlc2V0ZXhjZXB0ZmxhZyhjb25zdCBmZXhjZXB0X3QgKl9fZmxhZ3AsIGludCBfX2V4Y2VwdHMpOwotaW50IGZlcmFpc2VleGNlcHQoaW50IF9fZXhjZXB0cyk7Ci0KLXN0YXRpYyBfX2lubGluZSBpbnQKLWZldGVzdGV4Y2VwdChpbnQgX19leGNlcHRzKQotewotCWludCBfX214Y3NyLCBfX3N0YXR1czsKLQotCV9fc3RteGNzcigmX19teGNzcik7Ci0JX19mbnN0c3coJl9fc3RhdHVzKTsKLQlyZXR1cm4gKChfX3N0YXR1cyB8IF9fbXhjc3IpICYgX19leGNlcHRzKTsKLX0KLQotc3RhdGljIF9faW5saW5lIGludAotZmVnZXRyb3VuZCh2b2lkKQotewotCWludCBfX2NvbnRyb2w7Ci0KLQkvKgotCSAqIFdlIGFzc3VtZSB0aGF0IHRoZSB4ODcgYW5kIHRoZSBTU0UgdW5pdCBhZ3JlZSBvbiB0aGUKLQkgKiByb3VuZGluZyBtb2RlLiAgUmVhZGluZyB0aGUgY29udHJvbCB3b3JkIG9uIHRoZSB4ODcgdHVybnMKLQkgKiBvdXQgdG8gYmUgYWJvdXQgNSB0aW1lcyBmYXN0ZXIgdGhhbiByZWFkaW5nIGl0IG9uIHRoZSBTU0UKLQkgKiB1bml0IG9uIGFuIE9wdGVyb24gMjQ0LgotCSAqLwotCV9fZm5zdGN3KCZfX2NvbnRyb2wpOwotCXJldHVybiAoX19jb250cm9sICYgX1JPVU5EX01BU0spOwotfQotCi1zdGF0aWMgX19pbmxpbmUgaW50Ci1mZXNldHJvdW5kKGludCBfX3JvdW5kKQotewotCWludCBfX214Y3NyLCBfX2NvbnRyb2w7Ci0KLQlpZiAoX19yb3VuZCAmIH5fUk9VTkRfTUFTSykKLQkJcmV0dXJuICgtMSk7Ci0KLQlfX2Zuc3RjdygmX19jb250cm9sKTsKLQlfX2NvbnRyb2wgJj0gfl9ST1VORF9NQVNLOwotCV9fY29udHJvbCB8PSBfX3JvdW5kOwotCV9fZmxkY3coX19jb250cm9sKTsKLQotCV9fc3RteGNzcigmX19teGNzcik7Ci0JX19teGNzciAmPSB+KF9ST1VORF9NQVNLIDw8IF9TU0VfUk9VTkRfU0hJRlQpOwotCV9fbXhjc3IgfD0gX19yb3VuZCA8PCBfU1NFX1JPVU5EX1NISUZUOwotCV9fbGRteGNzcihfX214Y3NyKTsKLQotCXJldHVybiAoMCk7Ci19Ci0KLWludCBmZWdldGVudihmZW52X3QgKl9fZW52cCk7Ci1pbnQgZmVob2xkZXhjZXB0KGZlbnZfdCAqX19lbnZwKTsKLQotc3RhdGljIF9faW5saW5lIGludAotZmVzZXRlbnYoY29uc3QgZmVudl90ICpfX2VudnApCi17Ci0KLQlfX2ZsZGVudihfX2VudnAtPl9feDg3KTsKLQlfX2xkbXhjc3IoX19lbnZwLT5fX214Y3NyKTsKLQlyZXR1cm4gKDApOwotfQotCi1pbnQgZmV1cGRhdGVlbnYoY29uc3QgZmVudl90ICpfX2VudnApOwotCi0jaWYgX19CU0RfVklTSUJMRQotCi1pbnQgZmVlbmFibGVleGNlcHQoaW50IF9fbWFzayk7Ci1pbnQgZmVkaXNhYmxlZXhjZXB0KGludCBfX21hc2spOwotCi1zdGF0aWMgX19pbmxpbmUgaW50Ci1mZWdldGV4Y2VwdCh2b2lkKQotewotCWludCBfX2NvbnRyb2w7Ci0KLQkvKgotCSAqIFdlIGFzc3VtZSB0aGF0IHRoZSBtYXNrcyBmb3IgdGhlIHg4NyBhbmQgdGhlIFNTRSB1bml0IGFyZQotCSAqIHRoZSBzYW1lLgotCSAqLwotCV9fZm5zdGN3KCZfX2NvbnRyb2wpOwotCXJldHVybiAofl9fY29udHJvbCAmIEZFX0FMTF9FWENFUFQpOwotfQotCi0jZW5kaWYgLyogX19CU0RfVklTSUJMRSAqLwotCi1fX0VORF9ERUNMUwotCi0jZW5kaWYJLyogIV9GRU5WX0hfICovCmRpZmYgLS1naXQgYS9saWJtL2luY2x1ZGUvYXJtL2ZlbnYuaCBiL2xpYm0vaW5jbHVkZS9hcm0vZmVudi5oCmluZGV4IGU3YTg4NjAuLmE5NmY5OWUgMTAwNjQ0Ci0tLSBhL2xpYm0vaW5jbHVkZS9hcm0vZmVudi5oCisrKyBiL2xpYm0vaW5jbHVkZS9hcm0vZmVudi5oCkBAIC0yNiwxOTIgKzI2LDE1MSBAQAogICogJEZyZWVCU0Q6IHNyYy9saWIvbXN1bi9hcm0vZmVudi5oLHYgMS41IDIwMDUvMDMvMTYgMTk6MDM6NDUgZGFzIEV4cCAkCiAgKi8KIAotI2lmbmRlZglfRkVOVl9IXwotI2RlZmluZQlfRkVOVl9IXworLyoKKyAqIFJld3JpdHRlbiBmb3IgQW5kcm9pZC4KKyAqCisgKiBUaGUgQVJNIEZQU0NSIGlzIGRlc2NyaWJlZCBoZXJlOgorICogaHR0cDovL2luZm9jZW50ZXIuYXJtLmNvbS9oZWxwL2luZGV4LmpzcD90b3BpYz0vY29tLmFybS5kb2MuZGRpMDM0NGIvQ2hkZmFmaWEuaHRtbAorICovCiAKLSNpbmNsdWRlIDxzeXMvX3R5cGVzLmg+CisjaWZuZGVmIF9GRU5WX0hfCisjZGVmaW5lIF9GRU5WX0hfCiAKLXR5cGVkZWYJX191aW50MzJfdAlmZW52X3Q7Ci10eXBlZGVmCV9fdWludDMyX3QJZmV4Y2VwdF90OworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgogCi0vKiBFeGNlcHRpb24gZmxhZ3MgKi8KLSNkZWZpbmUJRkVfSU5WQUxJRAkweDAwMDEKLSNkZWZpbmUJRkVfRElWQllaRVJPCTB4MDAwMgotI2RlZmluZQlGRV9PVkVSRkxPVwkweDAwMDQKLSNkZWZpbmUJRkVfVU5ERVJGTE9XCTB4MDAwOAotI2RlZmluZQlGRV9JTkVYQUNUCTB4MDAxMAotI2RlZmluZQlGRV9BTExfRVhDRVBUCShGRV9ESVZCWVpFUk8gfCBGRV9JTkVYQUNUIHwgXAotCQkJIEZFX0lOVkFMSUQgfCBGRV9PVkVSRkxPVyB8IEZFX1VOREVSRkxPVykKLQotLyogUm91bmRpbmcgbW9kZXMgKi8KLSNkZWZpbmUJRkVfVE9ORUFSRVNUCTB4MDAwMAotI2RlZmluZQlGRV9UT1dBUkRaRVJPCTB4MDAwMQotI2RlZmluZQlGRV9VUFdBUkQJMHgwMDAyCi0jZGVmaW5lCUZFX0RPV05XQVJECTB4MDAwMwotI2RlZmluZQlfUk9VTkRfTUFTSwkoRkVfVE9ORUFSRVNUIHwgRkVfRE9XTldBUkQgfCBcCi0JCQkgRkVfVVBXQVJEIHwgRkVfVE9XQVJEWkVSTykKIF9fQkVHSU5fREVDTFMKIAotLyogRGVmYXVsdCBmbG9hdGluZy1wb2ludCBlbnZpcm9ubWVudCAqLwotZXh0ZXJuIGNvbnN0IGZlbnZfdAlfX2ZlX2RmbF9lbnY7Ci0jZGVmaW5lCUZFX0RGTF9FTlYJKCZfX2ZlX2RmbF9lbnYpCit0eXBlZGVmIF9fdWludDMyX3QgZmVudl90OwordHlwZWRlZiBfX3VpbnQzMl90IGZleGNlcHRfdDsKIAotLyogV2UgbmVlZCB0byBiZSBhYmxlIHRvIG1hcCBzdGF0dXMgZmxhZyBwb3NpdGlvbnMgdG8gbWFzayBmbGFnIHBvc2l0aW9ucyAqLwotI2RlZmluZSBfRlBVU1dfU0hJRlQJMTYKLSNkZWZpbmUJX0VOQUJMRV9NQVNLCShGRV9BTExfRVhDRVBUIDw8IF9GUFVTV19TSElGVCkKKy8qIEV4Y2VwdGlvbiBmbGFncy4gKi8KKyNkZWZpbmUgRkVfSU5WQUxJRCAgICAweDAxCisjZGVmaW5lIEZFX0RJVkJZWkVSTyAgMHgwMgorI2RlZmluZSBGRV9PVkVSRkxPVyAgIDB4MDQKKyNkZWZpbmUgRkVfVU5ERVJGTE9XICAweDA4CisjZGVmaW5lIEZFX0lORVhBQ1QgICAgMHgxMAorI2RlZmluZSBGRV9BTExfRVhDRVBUIChGRV9ESVZCWVpFUk8gfCBGRV9JTkVYQUNUIHwgRkVfSU5WQUxJRCB8IEZFX09WRVJGTE9XIHwgRkVfVU5ERVJGTE9XKQorI2RlZmluZSBfRlBTQ1JfRU5BQkxFX1NISUZUIDgKKyNkZWZpbmUgX0ZQU0NSX0VOQUJMRV9NQVNLIChGRV9BTExfRVhDRVBUIDw8IF9GUFNDUl9FTkFCTEVfU0hJRlQpCiAKLSNpZmRlZglBUk1fSEFSRF9GTE9BVAotI2RlZmluZQlfX3JmcyhfX2Zwc3IpCV9fYXNtIF9fdm9sYXRpbGUoInJmcyAlMCIgOiAiPXIiICgqKF9fZnBzcikpKQotI2RlZmluZQlfX3dmcyhfX2Zwc3IpCV9fYXNtIF9fdm9sYXRpbGUoIndmcyAlMCIgOiA6ICJyIiAoX19mcHNyKSkKLSNlbHNlCi0jZGVmaW5lIF9fcmZzKF9fZnBzcikKLSNkZWZpbmUgX193ZnMoX19mcHNyKQotI2VuZGlmCisvKiBSb3VuZGluZyBtb2Rlcy4gKi8KKyNkZWZpbmUgRkVfVE9ORUFSRVNUICAweDAKKyNkZWZpbmUgRkVfVVBXQVJEICAgICAweDEKKyNkZWZpbmUgRkVfRE9XTldBUkQgICAweDIKKyNkZWZpbmUgRkVfVE9XQVJEWkVSTyAweDMKKyNkZWZpbmUgX0ZQU0NSX1JNT0RFX1NISUZUIDIyCiAKLXN0YXRpYyBfX2lubGluZSBpbnQKLWZlY2xlYXJleGNlcHQoaW50IF9fZXhjZXB0cykKLXsKLQlmZXhjZXB0X3QgX19mcHNyOworLyogRGVmYXVsdCBmbG9hdGluZy1wb2ludCBlbnZpcm9ubWVudC4gKi8KK2V4dGVybiBjb25zdCBmZW52X3QgX19mZV9kZmxfZW52OworI2RlZmluZSBGRV9ERkxfRU5WICgmX19mZV9kZmxfZW52KQogCi0JX19yZnMoJl9fZnBzcik7Ci0JX19mcHNyICY9IH5fX2V4Y2VwdHM7Ci0JX193ZnMoX19mcHNyKTsKLQlyZXR1cm4gKDApOworc3RhdGljIF9faW5saW5lIGludCBmZWdldGVudihmZW52X3QqIF9fZW52cCkgeworICBmZW52X3QgX2Zwc2NyOworICBfX2FzbV9fIF9fdm9sYXRpbGVfXygidm1ycyAlMCxmcHNjciIgOiAiPXIiIChfZnBzY3IpKTsKKyAgKl9fZW52cCA9IF9mcHNjcjsKKyAgcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBfX2lubGluZSBpbnQKLWZlZ2V0ZXhjZXB0ZmxhZyhmZXhjZXB0X3QgKl9fZmxhZ3AsIGludCBfX2V4Y2VwdHMpCi17Ci0JZmV4Y2VwdF90IF9fZnBzcjsKLQotCV9fcmZzKCZfX2Zwc3IpOwotCSpfX2ZsYWdwID0gX19mcHNyICYgX19leGNlcHRzOwotCXJldHVybiAoMCk7CitzdGF0aWMgX19pbmxpbmUgaW50IGZlc2V0ZW52KGNvbnN0IGZlbnZfdCogX19lbnZwKSB7CisgIGZlbnZfdCBfZnBzY3IgPSAqX19lbnZwOworICBfX2FzbV9fIF9fdm9sYXRpbGVfXygidm1zciBmcHNjciwlMCIgOiA6InJpIiAoX2Zwc2NyKSk7CisgIHJldHVybiAwOwogfQogCi1zdGF0aWMgX19pbmxpbmUgaW50Ci1mZXNldGV4Y2VwdGZsYWcoY29uc3QgZmV4Y2VwdF90ICpfX2ZsYWdwLCBpbnQgX19leGNlcHRzKQotewotCWZleGNlcHRfdCBfX2Zwc3I7Ci0KLQlfX3JmcygmX19mcHNyKTsKLQlfX2Zwc3IgJj0gfl9fZXhjZXB0czsKLQlfX2Zwc3IgfD0gKl9fZmxhZ3AgJiBfX2V4Y2VwdHM7Ci0JX193ZnMoX19mcHNyKTsKLQlyZXR1cm4gKDApOworc3RhdGljIF9faW5saW5lIGludCBmZWNsZWFyZXhjZXB0KGludCBfX2V4Y2VwdHMpIHsKKyAgZmV4Y2VwdF90IF9fZnBzY3I7CisgIGZlZ2V0ZW52KCZfX2Zwc2NyKTsKKyAgX19mcHNjciAmPSB+X19leGNlcHRzOworICBmZXNldGVudigmX19mcHNjcik7CisgIHJldHVybiAwOwogfQogCi1zdGF0aWMgX19pbmxpbmUgaW50Ci1mZXJhaXNlZXhjZXB0KGludCBfX2V4Y2VwdHMpCi17Ci0JZmV4Y2VwdF90IF9fZXggPSBfX2V4Y2VwdHM7Ci0KLQlmZXNldGV4Y2VwdGZsYWcoJl9fZXgsIF9fZXhjZXB0cyk7CS8qIFhYWCAqLwotCXJldHVybiAoMCk7CitzdGF0aWMgX19pbmxpbmUgaW50IGZlZ2V0ZXhjZXB0ZmxhZyhmZXhjZXB0X3QqIF9fZmxhZ3AsIGludCBfX2V4Y2VwdHMpIHsKKyAgZmV4Y2VwdF90IF9fZnBzY3I7CisgIGZlZ2V0ZW52KCZfX2Zwc2NyKTsKKyAgKl9fZmxhZ3AgPSBfX2Zwc2NyICYgX19leGNlcHRzOworICByZXR1cm4gMDsKIH0KIAotc3RhdGljIF9faW5saW5lIGludAotZmV0ZXN0ZXhjZXB0KGludCBfX2V4Y2VwdHMpCi17Ci0JZmV4Y2VwdF90IF9fZnBzcjsKLQotCV9fcmZzKCZfX2Zwc3IpOwotCXJldHVybiAoX19mcHNyICYgX19leGNlcHRzKTsKK3N0YXRpYyBfX2lubGluZSBpbnQgZmVzZXRleGNlcHRmbGFnKGNvbnN0IGZleGNlcHRfdCogX19mbGFncCwgaW50IF9fZXhjZXB0cykgeworICBmZXhjZXB0X3QgX19mcHNjcjsKKyAgZmVnZXRlbnYoJl9fZnBzY3IpOworICBfX2Zwc2NyICY9IH5fX2V4Y2VwdHM7CisgIF9fZnBzY3IgfD0gKl9fZmxhZ3AgJiBfX2V4Y2VwdHM7CisgIGZlc2V0ZW52KCZfX2Zwc2NyKTsKKyAgcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBfX2lubGluZSBpbnQKLWZlZ2V0cm91bmQodm9pZCkKLXsKLQotCS8qCi0JICogQXBwYXJlbnRseSwgdGhlIHJvdW5kaW5nIG1vZGUgaXMgc3BlY2lmaWVkIGFzIHBhcnQgb2YgdGhlCi0JICogaW5zdHJ1Y3Rpb24gZm9ybWF0IG9uIEFSTSwgc28gdGhlIGR5bmFtaWMgcm91bmRpbmcgbW9kZSBpcwotCSAqIGluZGV0ZXJtaW5hdGUuICBTb21lIEZQVXMgbWF5IGRpZmZlci4KLQkgKi8KLQlyZXR1cm4gKC0xKTsKK3N0YXRpYyBfX2lubGluZSBpbnQgZmVyYWlzZWV4Y2VwdChpbnQgX19leGNlcHRzKSB7CisgIGZleGNlcHRfdCBfX2V4ID0gX19leGNlcHRzOworICBmZXNldGV4Y2VwdGZsYWcoJl9fZXgsIF9fZXhjZXB0cyk7CisgIHJldHVybiAwOwogfQogCi1zdGF0aWMgX19pbmxpbmUgaW50Ci1mZXNldHJvdW5kKGludCBfX3JvdW5kKQotewotCi0JcmV0dXJuICgtMSk7CitzdGF0aWMgX19pbmxpbmUgaW50IGZldGVzdGV4Y2VwdChpbnQgX19leGNlcHRzKSB7CisgIGZleGNlcHRfdCBfX2Zwc2NyOworICBmZWdldGVudigmX19mcHNjcik7CisgIHJldHVybiAoX19mcHNjciAmIF9fZXhjZXB0cyk7CiB9CiAKLXN0YXRpYyBfX2lubGluZSBpbnQKLWZlZ2V0ZW52KGZlbnZfdCAqX19lbnZwKQotewotCi0JX19yZnMoX19lbnZwKTsKLQlyZXR1cm4gKDApOworc3RhdGljIF9faW5saW5lIGludCBmZWdldHJvdW5kKHZvaWQpIHsKKyAgZmVudl90IF9mcHNjcjsKKyAgZmVnZXRlbnYoJl9mcHNjcik7CisgIHJldHVybiAoKF9mcHNjciA+PiBfRlBTQ1JfUk1PREVfU0hJRlQpICYgMHgzKTsKIH0KIAotc3RhdGljIF9faW5saW5lIGludAotZmVob2xkZXhjZXB0KGZlbnZfdCAqX19lbnZwKQotewotCWZlbnZfdCBfX2VudjsKLQotCV9fcmZzKCZfX2Vudik7Ci0JKl9fZW52cCA9IF9fZW52OwotCV9fZW52ICY9IH4oRkVfQUxMX0VYQ0VQVCB8IF9FTkFCTEVfTUFTSyk7Ci0JX193ZnMoX19lbnYpOwotCXJldHVybiAoMCk7CitzdGF0aWMgX19pbmxpbmUgaW50IGZlc2V0cm91bmQoaW50IF9fcm91bmQpIHsKKyAgZmVudl90IF9mcHNjcjsKKyAgZmVnZXRlbnYoJl9mcHNjcik7CisgIF9mcHNjciAmPSB+KDB4MyA8PCBfRlBTQ1JfUk1PREVfU0hJRlQpOworICBfZnBzY3IgfD0gKF9fcm91bmQgPDwgX0ZQU0NSX1JNT0RFX1NISUZUKTsKKyAgZmVzZXRlbnYoJl9mcHNjcik7CisgIHJldHVybiAwOwogfQogCi1zdGF0aWMgX19pbmxpbmUgaW50Ci1mZXNldGVudihjb25zdCBmZW52X3QgKl9fZW52cCkKLXsKLQotCV9fd2ZzKCpfX2VudnApOwotCXJldHVybiAoMCk7CitzdGF0aWMgX19pbmxpbmUgaW50IGZlaG9sZGV4Y2VwdChmZW52X3QqIF9fZW52cCkgeworICBmZW52X3QgX19lbnY7CisgIGZlZ2V0ZW52KCZfX2Vudik7CisgICpfX2VudnAgPSBfX2VudjsKKyAgX19lbnYgJj0gfihGRV9BTExfRVhDRVBUIHwgX0ZQU0NSX0VOQUJMRV9NQVNLKTsKKyAgZmVzZXRlbnYoJl9fZW52KTsKKyAgcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBfX2lubGluZSBpbnQKLWZldXBkYXRlZW52KGNvbnN0IGZlbnZfdCAqX19lbnZwKQotewotCWZleGNlcHRfdCBfX2Zwc3I7Ci0KLQlfX3JmcygmX19mcHNyKTsKLQlfX3dmcygqX19lbnZwKTsKLQlmZXJhaXNlZXhjZXB0KF9fZnBzciAmIEZFX0FMTF9FWENFUFQpOwotCXJldHVybiAoMCk7CitzdGF0aWMgX19pbmxpbmUgaW50IGZldXBkYXRlZW52KGNvbnN0IGZlbnZfdCogX19lbnZwKSB7CisgIGZleGNlcHRfdCBfX2Zwc2NyOworICBmZWdldGVudigmX19mcHNjcik7CisgIGZlc2V0ZW52KF9fZW52cCk7CisgIGZlcmFpc2VleGNlcHQoX19mcHNjciAmIEZFX0FMTF9FWENFUFQpOworICByZXR1cm4gMDsKIH0KIAogI2lmIF9fQlNEX1ZJU0lCTEUKIAotc3RhdGljIF9faW5saW5lIGludAotZmVlbmFibGVleGNlcHQoaW50IF9fbWFzaykKLXsKLQlmZW52X3QgX19vbGRfZnBzciwgX19uZXdfZnBzcjsKLQotCV9fcmZzKCZfX29sZF9mcHNyKTsKLQlfX25ld19mcHNyID0gX19vbGRfZnBzciB8IChfX21hc2sgJiBGRV9BTExfRVhDRVBUKSA8PCBfRlBVU1dfU0hJRlQ7Ci0JX193ZnMoX19uZXdfZnBzcik7Ci0JcmV0dXJuICgoX19vbGRfZnBzciA+PiBfRlBVU1dfU0hJRlQpICYgRkVfQUxMX0VYQ0VQVCk7CitzdGF0aWMgX19pbmxpbmUgaW50IGZlZW5hYmxlZXhjZXB0KGludCBfX21hc2spIHsKKyAgZmVudl90IF9fb2xkX2Zwc2NyLCBfX25ld19mcHNjcjsKKyAgZmVnZXRlbnYoJl9fb2xkX2Zwc2NyKTsKKyAgX19uZXdfZnBzY3IgPSBfX29sZF9mcHNjciB8IChfX21hc2sgJiBGRV9BTExfRVhDRVBUKSA8PCBfRlBTQ1JfRU5BQkxFX1NISUZUOworICBmZXNldGVudigmX19uZXdfZnBzY3IpOworICByZXR1cm4gKChfX29sZF9mcHNjciA+PiBfRlBTQ1JfRU5BQkxFX1NISUZUKSAmIEZFX0FMTF9FWENFUFQpOwogfQogCi1zdGF0aWMgX19pbmxpbmUgaW50Ci1mZWRpc2FibGVleGNlcHQoaW50IF9fbWFzaykKLXsKLQlmZW52X3QgX19vbGRfZnBzciwgX19uZXdfZnBzcjsKLQotCV9fcmZzKCZfX29sZF9mcHNyKTsKLQlfX25ld19mcHNyID0gX19vbGRfZnBzciAmIH4oKF9fbWFzayAmIEZFX0FMTF9FWENFUFQpIDw8IF9GUFVTV19TSElGVCk7Ci0JX193ZnMoX19uZXdfZnBzcik7Ci0JcmV0dXJuICgoX19vbGRfZnBzciA+PiBfRlBVU1dfU0hJRlQpICYgRkVfQUxMX0VYQ0VQVCk7CitzdGF0aWMgX19pbmxpbmUgaW50IGZlZGlzYWJsZWV4Y2VwdChpbnQgX19tYXNrKSB7CisgIGZlbnZfdCBfX29sZF9mcHNjciwgX19uZXdfZnBzY3I7CisgIGZlZ2V0ZW52KCZfX29sZF9mcHNjcik7CisgIF9fbmV3X2Zwc2NyID0gX19vbGRfZnBzY3IgJiB+KChfX21hc2sgJiBGRV9BTExfRVhDRVBUKSA8PCBfRlBTQ1JfRU5BQkxFX1NISUZUKTsKKyAgZmVzZXRlbnYoJl9fbmV3X2Zwc2NyKTsKKyAgcmV0dXJuICgoX19vbGRfZnBzY3IgPj4gX0ZQU0NSX0VOQUJMRV9TSElGVCkgJiBGRV9BTExfRVhDRVBUKTsKIH0KIAotc3RhdGljIF9faW5saW5lIGludAotZmVnZXRleGNlcHQodm9pZCkKLXsKLQlmZW52X3QgX19mcHNyOwotCi0JX19yZnMoJl9fZnBzcik7Ci0JcmV0dXJuICgoX19mcHNyICYgX0VOQUJMRV9NQVNLKSA+PiBfRlBVU1dfU0hJRlQpOworc3RhdGljIF9faW5saW5lIGludCBmZWdldGV4Y2VwdCh2b2lkKSB7CisgIGZlbnZfdCBfX2Zwc2NyOworICBmZWdldGVudigmX19mcHNjcik7CisgIHJldHVybiAoKF9fZnBzY3IgJiBfRlBTQ1JfRU5BQkxFX01BU0spID4+IF9GUFNDUl9FTkFCTEVfU0hJRlQpOwogfQogCiAjZW5kaWYgLyogX19CU0RfVklTSUJMRSAqLwogCiBfX0VORF9ERUNMUwogCi0jZW5kaWYJLyogIV9GRU5WX0hfICovCisjZW5kaWYgLyogIV9GRU5WX0hfICovCmRpZmYgLS1naXQgYS9saWJtL2luY2x1ZGUvY29tcGxleC5oIGIvbGlibS9pbmNsdWRlL2NvbXBsZXguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzAyNTQxCi0tLSAvZGV2L251bGwKKysrIGIvbGlibS9pbmNsdWRlL2NvbXBsZXguaApAQCAtMCwwICsxLDkyIEBACisvKi0KKyAqIENvcHlyaWdodCAoYykgMjAwMS0yMDExIFRoZSBGcmVlQlNEIFByb2plY3QuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqICRGcmVlQlNEJAorICovCisKKyNpZm5kZWYgX0NPTVBMRVhfSAorI2RlZmluZQlfQ09NUExFWF9ICisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKworI2lmZGVmIF9fR05VQ19fCisjaWYgX19TVERDX1ZFUlNJT05fXyA8IDE5OTkwMQorI2RlZmluZQlfQ29tcGxleAlfX2NvbXBsZXhfXworI2VuZGlmCisjZGVmaW5lCV9Db21wbGV4X0kJKChmbG9hdCBfQ29tcGxleCkxLjBpKQorI2VuZGlmCisKKyNpZmRlZiBfX2dlbmVyaWMKK19TdGF0aWNfYXNzZXJ0KF9fZ2VuZXJpYyhfQ29tcGxleF9JLCBmbG9hdCBfQ29tcGxleCwgMSwgMCksCisgICAgIl9Db21wbGV4X0kgbXVzdCBiZSBvZiB0eXBlIGZsb2F0IF9Db21wbGV4Iik7CisjZW5kaWYKKworI2RlZmluZQljb21wbGV4CQlfQ29tcGxleAorI2RlZmluZQlJCQlfQ29tcGxleF9JCisKK19fQkVHSU5fREVDTFMKKworZG91YmxlCQljYWJzKGRvdWJsZSBjb21wbGV4KTsKK2Zsb2F0CQljYWJzZihmbG9hdCBjb21wbGV4KTsKK2xvbmcgZG91YmxlCWNhYnNsKGxvbmcgZG91YmxlIGNvbXBsZXgpOworZG91YmxlCQljYXJnKGRvdWJsZSBjb21wbGV4KTsKK2Zsb2F0CQljYXJnZihmbG9hdCBjb21wbGV4KTsKK2xvbmcgZG91YmxlCWNhcmdsKGxvbmcgZG91YmxlIGNvbXBsZXgpOworZG91YmxlIGNvbXBsZXgJY2Nvcyhkb3VibGUgY29tcGxleCk7CitmbG9hdCBjb21wbGV4CWNjb3NmKGZsb2F0IGNvbXBsZXgpOworZG91YmxlIGNvbXBsZXgJY2Nvc2goZG91YmxlIGNvbXBsZXgpOworZmxvYXQgY29tcGxleAljY29zaGYoZmxvYXQgY29tcGxleCk7Citkb3VibGUgY29tcGxleAljZXhwKGRvdWJsZSBjb21wbGV4KTsKK2Zsb2F0IGNvbXBsZXgJY2V4cGYoZmxvYXQgY29tcGxleCk7Citkb3VibGUJCWNpbWFnKGRvdWJsZSBjb21wbGV4KSBfX3B1cmUyOworZmxvYXQJCWNpbWFnZihmbG9hdCBjb21wbGV4KSBfX3B1cmUyOworbG9uZyBkb3VibGUJY2ltYWdsKGxvbmcgZG91YmxlIGNvbXBsZXgpIF9fcHVyZTI7Citkb3VibGUgY29tcGxleAljb25qKGRvdWJsZSBjb21wbGV4KSBfX3B1cmUyOworZmxvYXQgY29tcGxleAljb25qZihmbG9hdCBjb21wbGV4KSBfX3B1cmUyOworbG9uZyBkb3VibGUgY29tcGxleAorCQljb25qbChsb25nIGRvdWJsZSBjb21wbGV4KSBfX3B1cmUyOworZmxvYXQgY29tcGxleAljcHJvamYoZmxvYXQgY29tcGxleCkgX19wdXJlMjsKK2RvdWJsZSBjb21wbGV4CWNwcm9qKGRvdWJsZSBjb21wbGV4KSBfX3B1cmUyOworbG9uZyBkb3VibGUgY29tcGxleAorCQljcHJvamwobG9uZyBkb3VibGUgY29tcGxleCkgX19wdXJlMjsKK2RvdWJsZQkJY3JlYWwoZG91YmxlIGNvbXBsZXgpIF9fcHVyZTI7CitmbG9hdAkJY3JlYWxmKGZsb2F0IGNvbXBsZXgpIF9fcHVyZTI7Citsb25nIGRvdWJsZQljcmVhbGwobG9uZyBkb3VibGUgY29tcGxleCkgX19wdXJlMjsKK2RvdWJsZSBjb21wbGV4CWNzaW4oZG91YmxlIGNvbXBsZXgpOworZmxvYXQgY29tcGxleAljc2luZihmbG9hdCBjb21wbGV4KTsKK2RvdWJsZSBjb21wbGV4CWNzaW5oKGRvdWJsZSBjb21wbGV4KTsKK2Zsb2F0IGNvbXBsZXgJY3NpbmhmKGZsb2F0IGNvbXBsZXgpOworZG91YmxlIGNvbXBsZXgJY3NxcnQoZG91YmxlIGNvbXBsZXgpOworZmxvYXQgY29tcGxleAljc3FydGYoZmxvYXQgY29tcGxleCk7Citsb25nIGRvdWJsZSBjb21wbGV4CisJCWNzcXJ0bChsb25nIGRvdWJsZSBjb21wbGV4KTsKK2RvdWJsZSBjb21wbGV4CWN0YW4oZG91YmxlIGNvbXBsZXgpOworZmxvYXQgY29tcGxleAljdGFuZihmbG9hdCBjb21wbGV4KTsKK2RvdWJsZSBjb21wbGV4CWN0YW5oKGRvdWJsZSBjb21wbGV4KTsKK2Zsb2F0IGNvbXBsZXgJY3RhbmhmKGZsb2F0IGNvbXBsZXgpOworCitfX0VORF9ERUNMUworCisjZW5kaWYgLyogX0NPTVBMRVhfSCAqLwpkaWZmIC0tZ2l0IGEvbGlibS9pbmNsdWRlL2kzODcvZmVudi5oIGIvbGlibS9pbmNsdWRlL2kzODcvZmVudi5oCmluZGV4IDcxMDQ5NGMuLmMwNDIxYzAgMTAwNjQ0Ci0tLSBhL2xpYm0vaW5jbHVkZS9pMzg3L2ZlbnYuaAorKysgYi9saWJtL2luY2x1ZGUvaTM4Ny9mZW52LmgKQEAgLTI5LDggKzI5LDkgQEAKICNpZm5kZWYJX0ZFTlZfSF8KICNkZWZpbmUJX0ZFTlZfSF8KIAotI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgotI2luY2x1ZGUgPHN5cy9fdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKworX19CRUdJTl9ERUNMUwogCiAvKiAgICAgICAgICAgICAgICAgICAKICAqIFRvIHByZXNlcnZlIGJpbmFyeSBjb21wYXRpYmlsaXR5IHdpdGggRnJlZUJTRCA1LjMsIHdlIHBhY2sgdGhlCkBAIC02NSw4ICs2Niw2IEBACiAjZGVmaW5lCV9ST1VORF9NQVNLCShGRV9UT05FQVJFU1QgfCBGRV9ET1dOV0FSRCB8IFwKIAkJCSBGRV9VUFdBUkQgfCBGRV9UT1dBUkRaRVJPKQogCi1fX0JFR0lOX0RFQ0xTCi0KIC8qIERlZmF1bHQgZmxvYXRpbmctcG9pbnQgZW52aXJvbm1lbnQgKi8KIGV4dGVybiBjb25zdCBmZW52X3QJX19mZV9kZmxfZW52OwogI2RlZmluZQlGRV9ERkxfRU5WCSgmX19mZV9kZmxfZW52KQpkaWZmIC0tZ2l0IGEvbGlibS9pbmNsdWRlL2lhNjQvZmVudi5oIGIvbGlibS9pbmNsdWRlL2lhNjQvZmVudi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YzZiNjViLi4wMDAwMDAwCi0tLSBhL2xpYm0vaW5jbHVkZS9pYTY0L2ZlbnYuaAorKysgL2Rldi9udWxsCkBAIC0xLDI0MiArMCwwIEBACi0vKi0KLSAqIENvcHlyaWdodCAoYykgMjAwNC0yMDA1IERhdmlkIFNjaHVsdHogPGRhc0BGcmVlQlNELk9SRz4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKgotICogJEZyZWVCU0Q6IHNyYy9saWIvbXN1bi9pYTY0L2ZlbnYuaCx2IDEuNCAyMDA1LzAzLzE2IDE5OjAzOjQ1IGRhcyBFeHAgJAotICovCi0KLSNpZm5kZWYJX0ZFTlZfSF8KLSNkZWZpbmUJX0ZFTlZfSF8KLQotI2luY2x1ZGUgPHN5cy9fdHlwZXMuaD4KLQotdHlwZWRlZglfX3VpbnQ2NF90CWZlbnZfdDsKLXR5cGVkZWYJX191aW50MTZfdAlmZXhjZXB0X3Q7Ci0KLS8qIEV4Y2VwdGlvbiBmbGFncyAqLwotI2RlZmluZQlGRV9JTlZBTElECTB4MDEKLSNkZWZpbmUJRkVfREVOT1JNQUwJMHgwMgotI2RlZmluZQlGRV9ESVZCWVpFUk8JMHgwNAotI2RlZmluZQlGRV9PVkVSRkxPVwkweDA4Ci0jZGVmaW5lCUZFX1VOREVSRkxPVwkweDEwCi0jZGVmaW5lCUZFX0lORVhBQ1QJMHgyMAotI2RlZmluZQlGRV9BTExfRVhDRVBUCShGRV9ESVZCWVpFUk8gfCBGRV9ERU5PUk1BTCB8IEZFX0lORVhBQ1QgfCBcCi0JCQkgRkVfSU5WQUxJRCB8IEZFX09WRVJGTE9XIHwgRkVfVU5ERVJGTE9XKQotCi0vKiBSb3VuZGluZyBtb2RlcyAqLwotI2RlZmluZQlGRV9UT05FQVJFU1QJMHgwMDAwCi0jZGVmaW5lCUZFX0RPV05XQVJECTB4MDQwMAotI2RlZmluZQlGRV9VUFdBUkQJMHgwODAwCi0jZGVmaW5lCUZFX1RPV0FSRFpFUk8JMHgwYzAwCi0jZGVmaW5lCV9ST1VORF9NQVNLCShGRV9UT05FQVJFU1QgfCBGRV9ET1dOV0FSRCB8IFwKLQkJCSBGRV9VUFdBUkQgfCBGRV9UT1dBUkRaRVJPKQotCi1fX0JFR0lOX0RFQ0xTCi0KLS8qIERlZmF1bHQgZmxvYXRpbmctcG9pbnQgZW52aXJvbm1lbnQgKi8KLWV4dGVybiBjb25zdCBmZW52X3QJX19mZV9kZmxfZW52OwotI2RlZmluZQlGRV9ERkxfRU5WCSgmX19mZV9kZmxfZW52KQotCi0jZGVmaW5lCV9GUFVTV19TSElGVAkxMwotCi0jZGVmaW5lCV9fc3RmcHNyKF9fcikJX19hc20gX192b2xhdGlsZSgibW92ICUwPWFyLmZwc3IiIDogIj1yIiAoKihfX3IpKSkKLSNkZWZpbmUJX19sZGZwc3IoX19yKQlfX2FzbSBfX3ZvbGF0aWxlKCJtb3YgYXIuZnBzcj0lMDs7IiA6IDogInIiIChfX3IpKQotCi1zdGF0aWMgX19pbmxpbmUgaW50Ci1mZWNsZWFyZXhjZXB0KGludCBfX2V4Y2VwdHMpCi17Ci0JZmVudl90IF9fZnBzcjsKLQotCV9fc3RmcHNyKCZfX2Zwc3IpOwotCV9fZnBzciAmPSB+KChmZW52X3QpX19leGNlcHRzIDw8IF9GUFVTV19TSElGVCk7Ci0JX19sZGZwc3IoX19mcHNyKTsKLQlyZXR1cm4gKDApOwotfQotCi1zdGF0aWMgX19pbmxpbmUgaW50Ci1mZWdldGV4Y2VwdGZsYWcoZmV4Y2VwdF90ICpfX2ZsYWdwLCBpbnQgX19leGNlcHRzKQotewotCWZlbnZfdCBfX2Zwc3I7Ci0KLQlfX3N0ZnBzcigmX19mcHNyKTsKLQkqX19mbGFncCA9IChmZXhjZXB0X3QpKF9fZnBzciA+PiBfRlBVU1dfU0hJRlQpICYgX19leGNlcHRzOwotCXJldHVybiAoMCk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZSBpbnQKLWZlc2V0ZXhjZXB0ZmxhZyhjb25zdCBmZXhjZXB0X3QgKl9fZmxhZ3AsIGludCBfX2V4Y2VwdHMpCi17Ci0JZmVudl90IF9fZnBzcjsKLQotCV9fc3RmcHNyKCZfX2Zwc3IpOwotCV9fZnBzciAmPSB+KChmZW52X3QpX19leGNlcHRzIDw8IF9GUFVTV19TSElGVCk7Ci0JX19mcHNyIHw9IChmZW52X3QpKF9fZXhjZXB0cyAmICpfX2ZsYWdwKSA8PCBfRlBVU1dfU0hJRlQ7Ci0JX19sZGZwc3IoX19mcHNyKTsKLQlyZXR1cm4gKDApOwotfQotCi0vKgotICogSXQgaXMgd29ydGh3aGlsZSB0byB1c2UgdGhlIGlubGluZSB2ZXJzaW9uIG9mIHRoaXMgZnVuY3Rpb24gaWZmIGl0Ci0gKiBpcyBjYWxsZWQgd2l0aCBhcmd1bWVudHMgdGhhdCBhcmUgY29tcGlsZS10aW1lIGNvbnN0YW50cyAoZHVlIHRvCi0gKiBkZWFkIGNvZGUgZWxpbWluYXRpb24pLiAgVW5mb3J0dW5hdGVseSwgZ2NjIGlzbid0IHNtYXJ0IGVub3VnaCB0bwotICogZmlndXJlIHRoaXMgb3V0IGF1dG9tYXRpY2FsbHksIGFuZCB0aGVyZSdzIG5vIHdheSB0byB0ZWxsIGl0LgotICogV2UgYXNzdW1lIHRoYXQgY29uc3RhbnQgYXJndW1lbnRzIHdpbGwgYmUgdGhlIGNvbW1vbiBjYXNlLgotICovCi1zdGF0aWMgX19pbmxpbmUgaW50Ci1mZXJhaXNlZXhjZXB0KGludCBfX2V4Y2VwdHMpCi17Ci0Jdm9sYXRpbGUgZG91YmxlIGQ7Ci0KLQkvKgotCSAqIFdpdGggYSBjb21waWxlciB0aGF0IHN1cHBvcnRzIHRoZSBGRU5WX0FDQ0VTUyBwcmFnbWEKLQkgKiBwcm9wZXJseSwgc2ltcGxlIGV4cHJlc3Npb25zIGxpa2UgJzAuMCAvIDAuMCcgc2hvdWxkCi0JICogYmUgc3VmZmljaWVudCB0byBnZW5lcmF0ZSB0cmFwcy4gIFVuZm9ydHVuYXRlbHksIHdlCi0JICogbmVlZCB0byBicmluZyBhIHZvbGF0aWxlIHZhcmlhYmxlIGludG8gdGhlIGVxdWF0aW9uCi0JICogdG8gcHJldmVudCBpbmNvcnJlY3Qgb3B0aW1pemF0aW9ucy4KLQkgKi8KLQlpZiAoX19leGNlcHRzICYgRkVfSU5WQUxJRCkgewotCQlkID0gMC4wOwotCQlkID0gMC4wIC8gZDsKLQl9Ci0JaWYgKF9fZXhjZXB0cyAmIEZFX0RJVkJZWkVSTykgewotCQlkID0gMC4wOwotCQlkID0gMS4wIC8gZDsKLQl9Ci0JaWYgKF9fZXhjZXB0cyAmIEZFX09WRVJGTE9XKSB7Ci0JCWQgPSAweDEuZmZwMTAyMzsKLQkJZCAqPSAyLjA7Ci0JfQotCWlmIChfX2V4Y2VwdHMgJiBGRV9VTkRFUkZMT1cpIHsKLQkJZCA9IDB4MXAtMTAyMjsKLQkJZCAvPSAweDFwMTAyMzsKLQl9Ci0JaWYgKF9fZXhjZXB0cyAmIEZFX0lORVhBQ1QpIHsKLQkJZCA9IDB4MXAtMTAyMjsKLQkJZCArPSAxLjA7Ci0JfQotCXJldHVybiAoMCk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZSBpbnQKLWZldGVzdGV4Y2VwdChpbnQgX19leGNlcHRzKQotewotCWZlbnZfdCBfX2Zwc3I7Ci0KLQlfX3N0ZnBzcigmX19mcHNyKTsKLQlyZXR1cm4gKChfX2Zwc3IgPj4gX0ZQVVNXX1NISUZUKSAmIF9fZXhjZXB0cyk7Ci19Ci0KLQotc3RhdGljIF9faW5saW5lIGludAotZmVnZXRyb3VuZCh2b2lkKQotewotCWZlbnZfdCBfX2Zwc3I7Ci0KLQlfX3N0ZnBzcigmX19mcHNyKTsKLQlyZXR1cm4gKF9fZnBzciAmIF9ST1VORF9NQVNLKTsKLX0KLQotc3RhdGljIF9faW5saW5lIGludAotZmVzZXRyb3VuZChpbnQgX19yb3VuZCkKLXsKLQlmZW52X3QgX19mcHNyOwotCi0JaWYgKF9fcm91bmQgJiB+X1JPVU5EX01BU0spCi0JCXJldHVybiAoLTEpOwotCV9fc3RmcHNyKCZfX2Zwc3IpOwotCV9fZnBzciAmPSB+X1JPVU5EX01BU0s7Ci0JX19mcHNyIHw9IF9fcm91bmQ7Ci0JX19sZGZwc3IoX19mcHNyKTsKLQlyZXR1cm4gKDApOwotfQotCi1zdGF0aWMgX19pbmxpbmUgaW50Ci1mZWdldGVudihmZW52X3QgKl9fZW52cCkKLXsKLQotCV9fc3RmcHNyKF9fZW52cCk7Ci0JcmV0dXJuICgwKTsKLX0KLQotc3RhdGljIF9faW5saW5lIGludAotZmVob2xkZXhjZXB0KGZlbnZfdCAqX19lbnZwKQotewotCWZlbnZfdCBfX2Zwc3I7Ci0KLQlfX3N0ZnBzcigmX19mcHNyKTsKLQkqX19lbnZwID0gX19mcHNyOwotCV9fZnBzciAmPSB+KChmZW52X3QpRkVfQUxMX0VYQ0VQVCA8PCBfRlBVU1dfU0hJRlQpOwotCV9fZnBzciB8PSBGRV9BTExfRVhDRVBUOwotCV9fbGRmcHNyKF9fZnBzcik7Ci0JcmV0dXJuICgwKTsKLX0KLQotc3RhdGljIF9faW5saW5lIGludAotZmVzZXRlbnYoY29uc3QgZmVudl90ICpfX2VudnApCi17Ci0KLQlfX2xkZnBzcigqX19lbnZwKTsKLQlyZXR1cm4gKDApOwotfQotCi1pbnQgZmV1cGRhdGVlbnYoY29uc3QgZmVudl90ICpfX2VudnApOwotCi0jaWYgX19CU0RfVklTSUJMRQotCi1zdGF0aWMgX19pbmxpbmUgaW50Ci1mZWVuYWJsZWV4Y2VwdChpbnQgX19tYXNrKQotewotCWZlbnZfdCBfX25ld2Zwc3IsIF9fb2xkZnBzcjsKLQotCV9fc3RmcHNyKCZfX29sZGZwc3IpOwotCV9fbmV3ZnBzciA9IF9fb2xkZnBzciAmIH4oX19tYXNrICYgRkVfQUxMX0VYQ0VQVCk7Ci0JX19sZGZwc3IoX19uZXdmcHNyKTsKLQlyZXR1cm4gKH5fX29sZGZwc3IgJiBGRV9BTExfRVhDRVBUKTsKLX0KLQotc3RhdGljIF9faW5saW5lIGludAotZmVkaXNhYmxlZXhjZXB0KGludCBfX21hc2spCi17Ci0JZmVudl90IF9fbmV3ZnBzciwgX19vbGRmcHNyOwotCi0JX19zdGZwc3IoJl9fb2xkZnBzcik7Ci0JX19uZXdmcHNyID0gX19vbGRmcHNyIHwgKF9fbWFzayAmIEZFX0FMTF9FWENFUFQpOwotCV9fbGRmcHNyKF9fbmV3ZnBzcik7Ci0JcmV0dXJuICh+X19vbGRmcHNyICYgRkVfQUxMX0VYQ0VQVCk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZSBpbnQKLWZlZ2V0ZXhjZXB0KHZvaWQpCi17Ci0JZmVudl90IF9fZnBzcjsKLQotCV9fc3RmcHNyKCZfX2Zwc3IpOwotCXJldHVybiAofl9fZnBzciAmIEZFX0FMTF9FWENFUFQpOwotfQotCi0jZW5kaWYgLyogX19CU0RfVklTSUJMRSAqLwotCi1fX0VORF9ERUNMUwotCi0jZW5kaWYJLyogIV9GRU5WX0hfICovCmRpZmYgLS1naXQgYS9saWJtL2luY2x1ZGUvbWF0aC5oIGIvbGlibS9pbmNsdWRlL21hdGguaAppbmRleCBhODZhMTZmLi5iMTNlY2E5IDEwMDY0NAotLS0gYS9saWJtL2luY2x1ZGUvbWF0aC5oCisrKyBiL2xpYm0vaW5jbHVkZS9tYXRoLmgKQEAgLTExLDE4ICsxMSwxNiBAQAogCiAvKgogICogZnJvbTogQCgjKWZkbGlibS5oIDUuMSA5My8wOS8yNAotICogJEZyZWVCU0Q6IHNyYy9saWIvbXN1bi9zcmMvbWF0aC5oLHYgMS42MSAyMDA1LzA0LzE2IDIxOjEyOjQ3IGRhcyBFeHAgJAorICogJEZyZWVCU0QkCiAgKi8KIAogI2lmbmRlZiBfTUFUSF9IXwogI2RlZmluZQlfTUFUSF9IXwogCiAjaW5jbHVkZSA8c3lzL2NkZWZzLmg+Ci0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL190eXBlcy5oPgogI2luY2x1ZGUgPGxpbWl0cy5oPgogCi0jZGVmaW5lIF9fcHVyZTIKLQogLyoKICAqIEFOU0kvUE9TSVgKICAqLwpAQCAtMzYsMzcgKzM0LDI5IEBACiAJZmxvYXQJCV9fdWY7CiB9IF9fbmFuOwogCi0vKiAjaWYgX19HTlVDX1BSRVJFUV9fKDMsIDMpIHx8IChkZWZpbmVkKF9fSU5URUxfQ09NUElMRVIpICYmIF9fSU5URUxfQ09NUElMRVIgPj0gODAwKSAqLwotI2lmIDEKKyNpZiBfX0dOVUNfUFJFUkVRX18oMywgMykgfHwgKGRlZmluZWQoX19JTlRFTF9DT01QSUxFUikgJiYgX19JTlRFTF9DT01QSUxFUiA+PSA4MDApCiAjZGVmaW5lCV9fTUFUSF9CVUlMVElOX0NPTlNUQU5UUwogI2VuZGlmCiAKLS8qICNpZiBfX0dOVUNfUFJFUkVRX18oMywgMCkgJiYgIWRlZmluZWQoX19JTlRFTF9DT01QSUxFUikgKi8KLSNpZiAxCisjaWYgX19HTlVDX1BSRVJFUV9fKDMsIDApICYmICFkZWZpbmVkKF9fSU5URUxfQ09NUElMRVIpCiAjZGVmaW5lCV9fTUFUSF9CVUlMVElOX1JFTE9QUwogI2VuZGlmCiAKLS8qICNpZmRlZiBfX01BVEhfQlVJTFRJTl9DT05TVEFOVFMgKi8KLSNpZiAxCisjaWZkZWYgX19NQVRIX0JVSUxUSU5fQ09OU1RBTlRTCiAjZGVmaW5lCUhVR0VfVkFMCV9fYnVpbHRpbl9odWdlX3ZhbCgpCiAjZWxzZQogI2RlZmluZQlIVUdFX1ZBTAkoX19pbmZpbml0eS5fX3VkKQogI2VuZGlmCiAKLS8qICNpZiBfX0lTT19DX1ZJU0lCTEUgPj0gMTk5OSAqLwotI2lmIDAKLSNkZWZpbmUJRlBfSUxPR0IwCSgtX19JTlRfTUFYKQotI2RlZmluZQlGUF9JTE9HQk5BTglfX0lOVF9NQVgKLSNlbHNlCi0jZGVmaW5lCUZQX0lMT0dCMAkoLUlOVF9NQVgpCi0jZGVmaW5lCUZQX0lMT0dCTkFOCUlOVF9NQVgKLSNlbmRpZgorI2lmIF9fSVNPX0NfVklTSUJMRSA+PSAxOTk5CisjZGVmaW5lCUZQX0lMT0dCMAkoLUlOVF9NQVgpIC8qIEFuZHJvaWQtY2hhbmdlZCAqLworI2RlZmluZQlGUF9JTE9HQk5BTglJTlRfTUFYIC8qIEFuZHJvaWQtY2hhbmdlZCAqLwogCiAjaWZkZWYgX19NQVRIX0JVSUxUSU5fQ09OU1RBTlRTCiAjZGVmaW5lCUhVR0VfVkFMRglfX2J1aWx0aW5faHVnZV92YWxmKCkKICNkZWZpbmUJSFVHRV9WQUxMCV9fYnVpbHRpbl9odWdlX3ZhbGwoKQotI2RlZmluZQlJTkZJTklUWQlfX2J1aWx0aW5faW5mKCkKLSNkZWZpbmUJTkFOCQlfX2J1aWx0aW5fbmFuKCIiKQorI2RlZmluZQlJTkZJTklUWQlfX2J1aWx0aW5faW5mZigpCisjZGVmaW5lCU5BTgkJX19idWlsdGluX25hbmYoIiIpCiAjZWxzZQogI2RlZmluZQlIVUdFX1ZBTEYJKGZsb2F0KUhVR0VfVkFMCiAjZGVmaW5lCUhVR0VfVkFMTAkobG9uZyBkb3VibGUpSFVHRV9WQUwKQEAgLTc4LDE0ICs2OCwxMSBAQAogI2RlZmluZQlNQVRIX0VSUkVYQ0VQVAkyCiAjZGVmaW5lCW1hdGhfZXJyaGFuZGxpbmcJTUFUSF9FUlJFWENFUFQKIAotLyogWFhYIFdlIG5lZWQgYSA8bWFjaGluZS9tYXRoLmg+LiAqLwotI2lmIGRlZmluZWQoX19pYTY0X18pIHx8IGRlZmluZWQoX19zcGFyYzY0X18pCi0jZGVmaW5lCUZQX0ZBU1RfRk1BCi0jZW5kaWYKKyNkZWZpbmUJRlBfRkFTVF9GTUFGCTEKICNpZmRlZiBfX2lhNjRfXwotI2RlZmluZQlGUF9GQVNUX0ZNQUwKKyNkZWZpbmUJRlBfRkFTVF9GTUEJMQorI2RlZmluZQlGUF9GQVNUX0ZNQUwJMQogI2VuZGlmCi0jZGVmaW5lCUZQX0ZBU1RfRk1BRgogCiAvKiBTeW1ib2xpYyBjb25zdGFudHMgdG8gY2xhc3NpZnkgZmxvYXRpbmcgcG9pbnQgbnVtYmVycy4gKi8KICNkZWZpbmUJRlBfSU5GSU5JVEUJMHgwMQpAQCAtMTA0LDEwICs5MSwxMCBAQAogICAgIDogX19pc2Zpbml0ZWwoeCkpCiAjZGVmaW5lCWlzaW5mKHgpCQkJCQlcCiAgICAgKChzaXplb2YgKHgpID09IHNpemVvZiAoZmxvYXQpKSA/IF9faXNpbmZmKHgpCVwKLSAgICA6IChzaXplb2YgKHgpID09IHNpemVvZiAoZG91YmxlKSkgPyBfX2lzaW5mKHgpCVwKKyAgICA6IChzaXplb2YgKHgpID09IHNpemVvZiAoZG91YmxlKSkgPyBpc2luZih4KQlcCiAgICAgOiBfX2lzaW5mbCh4KSkKICNkZWZpbmUJaXNuYW4oeCkJCQkJCVwKLSAgICAoKHNpemVvZiAoeCkgPT0gc2l6ZW9mIChmbG9hdCkpID8gaXNuYW5mKHgpCQlcCisgICAgKChzaXplb2YgKHgpID09IHNpemVvZiAoZmxvYXQpKSA/IF9faXNuYW5mKHgpCVwKICAgICA6IChzaXplb2YgKHgpID09IHNpemVvZiAoZG91YmxlKSkgPyBpc25hbih4KQlcCiAgICAgOiBfX2lzbmFubCh4KSkKICNkZWZpbmUJaXNub3JtYWwoeCkJCQkJCVwKQEAgLTEzNywxNiArMTI0LDE0IEBACiAgICAgOiAoc2l6ZW9mICh4KSA9PSBzaXplb2YgKGRvdWJsZSkpID8gX19zaWduYml0KHgpCVwKICAgICA6IF9fc2lnbmJpdGwoeCkpCiAKLSNpZiAwCiB0eXBlZGVmCV9fZG91YmxlX3QJZG91YmxlX3Q7CiB0eXBlZGVmCV9fZmxvYXRfdAlmbG9hdF90OwotI2VuZGlmIAotLyogI2VuZGlmICovIC8qIF9fSVNPX0NfVklTSUJMRSA+PSAxOTk5ICovCisjZW5kaWYgLyogX19JU09fQ19WSVNJQkxFID49IDE5OTkgKi8KIAogLyoKICAqIFhPUEVOL1NWSUQKICAqLwotLyogI2lmIF9fQlNEX1ZJU0lCTEUgfHwgX19YU0lfVklTSUJMRSAqLworI2lmIF9fQlNEX1ZJU0lCTEUgfHwgX19YU0lfVklTSUJMRQogI2RlZmluZQlNX0UJCTIuNzE4MjgxODI4NDU5MDQ1MjM1NAkvKiBlICovCiAjZGVmaW5lCU1fTE9HMkUJCTEuNDQyNjk1MDQwODg4OTYzNDA3NAkvKiBsb2cgMmUgKi8KICNkZWZpbmUJTV9MT0cxMEUJMC40MzQyOTQ0ODE5MDMyNTE4Mjc2NQkvKiBsb2cgMTBlICovCkBAIC0xNjMsNyArMTQ4LDcgQEAKIAogI2RlZmluZQlNQVhGTE9BVAkoKGZsb2F0KTMuNDAyODIzNDY2Mzg1Mjg4NjBlKzM4KQogZXh0ZXJuIGludCBzaWduZ2FtOwotLyogI2VuZGlmICovIC8qIF9fQlNEX1ZJU0lCTEUgfHwgX19YU0lfVklTSUJMRSAqLworI2VuZGlmIC8qIF9fQlNEX1ZJU0lCTEUgfHwgX19YU0lfVklTSUJMRSAqLwogCiAjaWYgX19CU0RfVklTSUJMRQogI2lmIDAKQEAgLTE5MCw4ICsxNzUsOCBAQAogaW50CV9faXNmaW5pdGUoZG91YmxlKSBfX3B1cmUyOwogaW50CV9faXNmaW5pdGVsKGxvbmcgZG91YmxlKSBfX3B1cmUyOwogaW50CV9faXNpbmZmKGZsb2F0KSBfX3B1cmUyOwotaW50ICAgICBfX2lzaW5mKGRvdWJsZSkgX19wdXJlMjsKIGludAlfX2lzaW5mbChsb25nIGRvdWJsZSkgX19wdXJlMjsKK2ludAlfX2lzbmFuZihmbG9hdCkgX19wdXJlMjsKIGludAlfX2lzbmFubChsb25nIGRvdWJsZSkgX19wdXJlMjsKIGludAlfX2lzbm9ybWFsZihmbG9hdCkgX19wdXJlMjsKIGludAlfX2lzbm9ybWFsKGRvdWJsZSkgX19wdXJlMjsKQEAgLTIzMCw3ICsyMTUsNyBAQAogLyoKICAqIFRoZXNlIGZ1bmN0aW9ucyBhcmUgbm90IGluIEM5MC4KICAqLwotLyogI2lmIF9fQlNEX1ZJU0lCTEUgfHwgX19JU09fQ19WSVNJQkxFID49IDE5OTkgfHwgX19YU0lfVklTSUJMRSAqLworI2lmIF9fQlNEX1ZJU0lCTEUgfHwgX19JU09fQ19WSVNJQkxFID49IDE5OTkgfHwgX19YU0lfVklTSUJMRQogZG91YmxlCWFjb3NoKGRvdWJsZSk7CiBkb3VibGUJYXNpbmgoZG91YmxlKTsKIGRvdWJsZQlhdGFuaChkb3VibGUpOwpAQCAtMjQyLDEyICsyMjcsMTMgQEAKIGRvdWJsZQlmbWEoZG91YmxlLCBkb3VibGUsIGRvdWJsZSk7CiBkb3VibGUJaHlwb3QoZG91YmxlLCBkb3VibGUpOwogaW50CWlsb2diKGRvdWJsZSkgX19wdXJlMjsKLS8qIGludAkoaXNpbmYpKGRvdWJsZSkgX19wdXJlMjsgKi8KK2ludAkoaXNpbmYpKGRvdWJsZSkgX19wdXJlMjsKIGludAkoaXNuYW4pKGRvdWJsZSkgX19wdXJlMjsKIGRvdWJsZQlsZ2FtbWEoZG91YmxlKTsKIGxvbmcgbG9uZyBsbHJpbnQoZG91YmxlKTsKIGxvbmcgbG9uZyBsbHJvdW5kKGRvdWJsZSk7CiBkb3VibGUJbG9nMXAoZG91YmxlKTsKK2RvdWJsZQlsb2cyKGRvdWJsZSk7CiBkb3VibGUJbG9nYihkb3VibGUpOwogbG9uZwlscmludChkb3VibGUpOwogbG9uZwlscm91bmQoZG91YmxlKTsKQEAgLTI1NiwyMyArMjQyLDI2IEBACiBkb3VibGUJcmVtYWluZGVyKGRvdWJsZSwgZG91YmxlKTsKIGRvdWJsZQlyZW1xdW8oZG91YmxlLCBkb3VibGUsIGludCAqKTsKIGRvdWJsZQlyaW50KGRvdWJsZSk7Ci0vKiAjZW5kaWYgKi8gLyogX19CU0RfVklTSUJMRSB8fCBfX0lTT19DX1ZJU0lCTEUgPj0gMTk5OSB8fCBfX1hTSV9WSVNJQkxFICovCisjZW5kaWYgLyogX19CU0RfVklTSUJMRSB8fCBfX0lTT19DX1ZJU0lCTEUgPj0gMTk5OSB8fCBfX1hTSV9WSVNJQkxFICovCiAKLS8qICNpZiBfX0JTRF9WSVNJQkxFIHx8IF9fWFNJX1ZJU0lCTEUgKi8KKyNpZiBfX0JTRF9WSVNJQkxFIHx8IF9fWFNJX1ZJU0lCTEUKIGRvdWJsZQlqMChkb3VibGUpOwogZG91YmxlCWoxKGRvdWJsZSk7CiBkb3VibGUJam4oaW50LCBkb3VibGUpOwotZG91YmxlCXNjYWxiKGRvdWJsZSwgZG91YmxlKTsKIGRvdWJsZQl5MChkb3VibGUpOwogZG91YmxlCXkxKGRvdWJsZSk7CiBkb3VibGUJeW4oaW50LCBkb3VibGUpOwogCi0vKiAjaWYgX19YU0lfVklTSUJMRSA8PSA1MDAgfHwgX19CU0RfVklTSUJMRSAqLworI2lmIF9fWFNJX1ZJU0lCTEUgPD0gNTAwIHx8IF9fQlNEX1ZJU0lCTEUKIGRvdWJsZQlnYW1tYShkb3VibGUpOwotLyogI2VuZGlmICovCi0vKiAjZW5kaWYgKi8gLyogX19CU0RfVklTSUJMRSB8fCBfX1hTSV9WSVNJQkxFICovCisjZW5kaWYKIAotLyogI2lmIF9fQlNEX1ZJU0lCTEUgfHwgX19JU09fQ19WSVNJQkxFID49IDE5OTkgKi8KKyNpZiBfX1hTSV9WSVNJQkxFIDw9IDYwMCB8fCBfX0JTRF9WSVNJQkxFCitkb3VibGUJc2NhbGIoZG91YmxlLCBkb3VibGUpOworI2VuZGlmCisjZW5kaWYgLyogX19CU0RfVklTSUJMRSB8fCBfX1hTSV9WSVNJQkxFICovCisKKyNpZiBfX0JTRF9WSVNJQkxFIHx8IF9fSVNPX0NfVklTSUJMRSA+PSAxOTk5CiBkb3VibGUJY29weXNpZ24oZG91YmxlLCBkb3VibGUpIF9fcHVyZTI7CiBkb3VibGUJZmRpbShkb3VibGUsIGRvdWJsZSk7CiBkb3VibGUJZm1heChkb3VibGUsIGRvdWJsZSkgX19wdXJlMjsKQEAgLTI4MywxMiArMjcyLDEyIEBACiBkb3VibGUJc2NhbGJuKGRvdWJsZSwgaW50KTsKIGRvdWJsZQl0Z2FtbWEoZG91YmxlKTsKIGRvdWJsZQl0cnVuYyhkb3VibGUpOwotLyogI2VuZGlmICovCisjZW5kaWYKIAogLyoKICAqIEJTRCBtYXRoIGxpYnJhcnkgZW50cnkgcG9pbnRzCiAgKi8KLS8qICNpZiBfX0JTRF9WSVNJQkxFICovCisjaWYgX19CU0RfVklTSUJMRQogZG91YmxlCWRyZW0oZG91YmxlLCBkb3VibGUpOwogaW50CWZpbml0ZShkb3VibGUpIF9fcHVyZTI7CiBpbnQJaXNuYW5mKGZsb2F0KSBfX3B1cmUyOwpAQCAtMzA0LDEwICsyOTMsMTAgQEAKICAqIElFRUUgVGVzdCBWZWN0b3IKICAqLwogZG91YmxlCXNpZ25pZmljYW5kKGRvdWJsZSk7Ci0vKiAjZW5kaWYgKi8gLyogX19CU0RfVklTSUJMRSAqLworI2VuZGlmIC8qIF9fQlNEX1ZJU0lCTEUgKi8KIAogLyogZmxvYXQgdmVyc2lvbnMgb2YgQU5TSS9QT1NJWCBmdW5jdGlvbnMgKi8KLS8qI2lmIF9fSVNPX0NfVklTSUJMRSA+PSAxOTk5ICovCisjaWYgX19JU09fQ19WSVNJQkxFID49IDE5OTkKIGZsb2F0CWFjb3NmKGZsb2F0KTsKIGZsb2F0CWFzaW5mKGZsb2F0KTsKIGZsb2F0CWF0YW5mKGZsb2F0KTsKQEAgLTMyOCw2ICszMTcsNyBAQAogZmxvYXQJbGRleHBmKGZsb2F0LCBpbnQpOwogZmxvYXQJbG9nMTBmKGZsb2F0KTsKIGZsb2F0CWxvZzFwZihmbG9hdCk7CitmbG9hdAlsb2cyZihmbG9hdCk7CiBmbG9hdAlsb2dmKGZsb2F0KTsKIGZsb2F0CW1vZGZmKGZsb2F0LCBmbG9hdCAqKTsJLyogZnVuZGFtZW50YWxseSAhX19wdXJlMiAqLwogCkBAIC0zNzAsMTIgKzM2MCwxMiBAQAogZmxvYXQJZm1hZihmbG9hdCwgZmxvYXQsIGZsb2F0KTsKIGZsb2F0CWZtYXhmKGZsb2F0LCBmbG9hdCkgX19wdXJlMjsKIGZsb2F0CWZtaW5mKGZsb2F0LCBmbG9hdCkgX19wdXJlMjsKLS8qICNlbmRpZiAqLworI2VuZGlmCiAKIC8qCiAgKiBmbG9hdCB2ZXJzaW9ucyBvZiBCU0QgbWF0aCBsaWJyYXJ5IGVudHJ5IHBvaW50cwogICovCi0vKiAjaWYgX19CU0RfVklTSUJMRSAqLworI2lmIF9fQlNEX1ZJU0lCTEUKIGZsb2F0CWRyZW1mKGZsb2F0LCBmbG9hdCk7CiBpbnQJZmluaXRlZihmbG9hdCkgX19wdXJlMjsKIGZsb2F0CWdhbW1hZihmbG9hdCk7CkBAIC0zOTksOTggKzM4OSw5MiBAQAogICogZmxvYXQgdmVyc2lvbiBvZiBJRUVFIFRlc3QgVmVjdG9yCiAgKi8KIGZsb2F0CXNpZ25pZmljYW5kZihmbG9hdCk7Ci0vKiAjZW5kaWYgKi8JLyogX19CU0RfVklTSUJMRSAqLyAKKyNlbmRpZgkvKiBfX0JTRF9WSVNJQkxFICovCiAKIC8qCiAgKiBsb25nIGRvdWJsZSB2ZXJzaW9ucyBvZiBJU08vUE9TSVggbWF0aCBmdW5jdGlvbnMKICAqLwotLyogI2lmIF9fSVNPX0NfVklTSUJMRSA+PSAxOTk5ICovCi0jaWYgMAotbG9uZyBkb3VibGUJYWNvc2hsKGxvbmcgZG91YmxlKTsKKyNpZiBfX0lTT19DX1ZJU0lCTEUgPj0gMTk5OQogbG9uZyBkb3VibGUJYWNvc2wobG9uZyBkb3VibGUpOwotbG9uZyBkb3VibGUJYXNpbmhsKGxvbmcgZG91YmxlKTsKIGxvbmcgZG91YmxlCWFzaW5sKGxvbmcgZG91YmxlKTsKIGxvbmcgZG91YmxlCWF0YW4ybChsb25nIGRvdWJsZSwgbG9uZyBkb3VibGUpOwotbG9uZyBkb3VibGUJYXRhbmhsKGxvbmcgZG91YmxlKTsKIGxvbmcgZG91YmxlCWF0YW5sKGxvbmcgZG91YmxlKTsKIGxvbmcgZG91YmxlCWNicnRsKGxvbmcgZG91YmxlKTsKLSNlbmRpZgogbG9uZyBkb3VibGUJY2VpbGwobG9uZyBkb3VibGUpOwogbG9uZyBkb3VibGUJY29weXNpZ25sKGxvbmcgZG91YmxlLCBsb25nIGRvdWJsZSkgX19wdXJlMjsKLSNpZiAwCi1sb25nIGRvdWJsZQljb3NobChsb25nIGRvdWJsZSk7CiBsb25nIGRvdWJsZQljb3NsKGxvbmcgZG91YmxlKTsKLWxvbmcgZG91YmxlCWVyZmNsKGxvbmcgZG91YmxlKTsKLWxvbmcgZG91YmxlCWVyZmwobG9uZyBkb3VibGUpOwogbG9uZyBkb3VibGUJZXhwMmwobG9uZyBkb3VibGUpOwogbG9uZyBkb3VibGUJZXhwbChsb25nIGRvdWJsZSk7Ci1sb25nIGRvdWJsZQlleHBtMWwobG9uZyBkb3VibGUpOwotI2VuZGlmCiBsb25nIGRvdWJsZQlmYWJzbChsb25nIGRvdWJsZSkgX19wdXJlMjsKIGxvbmcgZG91YmxlCWZkaW1sKGxvbmcgZG91YmxlLCBsb25nIGRvdWJsZSk7CiBsb25nIGRvdWJsZQlmbG9vcmwobG9uZyBkb3VibGUpOwogbG9uZyBkb3VibGUJZm1hbChsb25nIGRvdWJsZSwgbG9uZyBkb3VibGUsIGxvbmcgZG91YmxlKTsKIGxvbmcgZG91YmxlCWZtYXhsKGxvbmcgZG91YmxlLCBsb25nIGRvdWJsZSkgX19wdXJlMjsKIGxvbmcgZG91YmxlCWZtaW5sKGxvbmcgZG91YmxlLCBsb25nIGRvdWJsZSkgX19wdXJlMjsKLSNpZiAwCiBsb25nIGRvdWJsZQlmbW9kbChsb25nIGRvdWJsZSwgbG9uZyBkb3VibGUpOwotI2VuZGlmCiBsb25nIGRvdWJsZQlmcmV4cGwobG9uZyBkb3VibGUgdmFsdWUsIGludCAqKTsgLyogZnVuZGFtZW50YWxseSAhX19wdXJlMiAqLwotI2lmIDAKIGxvbmcgZG91YmxlCWh5cG90bChsb25nIGRvdWJsZSwgbG9uZyBkb3VibGUpOwotI2VuZGlmCiBpbnQJCWlsb2dibChsb25nIGRvdWJsZSkgX19wdXJlMjsKIGxvbmcgZG91YmxlCWxkZXhwbChsb25nIGRvdWJsZSwgaW50KTsKLSNpZiAwCi1sb25nIGRvdWJsZQlsZ2FtbWFsKGxvbmcgZG91YmxlKTsKIGxvbmcgbG9uZwlsbHJpbnRsKGxvbmcgZG91YmxlKTsKLSNlbmRpZgogbG9uZyBsb25nCWxscm91bmRsKGxvbmcgZG91YmxlKTsKLSNpZiAwCi1sb25nIGRvdWJsZQlsb2cxMGwobG9uZyBkb3VibGUpOwotbG9uZyBkb3VibGUJbG9nMXBsKGxvbmcgZG91YmxlKTsKLWxvbmcgZG91YmxlCWxvZzJsKGxvbmcgZG91YmxlKTsKIGxvbmcgZG91YmxlCWxvZ2JsKGxvbmcgZG91YmxlKTsKLWxvbmcgZG91YmxlCWxvZ2wobG9uZyBkb3VibGUpOwogbG9uZwkJbHJpbnRsKGxvbmcgZG91YmxlKTsKLSNlbmRpZgogbG9uZwkJbHJvdW5kbChsb25nIGRvdWJsZSk7Ci0jaWYgMAogbG9uZyBkb3VibGUJbW9kZmwobG9uZyBkb3VibGUsIGxvbmcgZG91YmxlICopOyAvKiBmdW5kYW1lbnRhbGx5ICFfX3B1cmUyICovCiBsb25nIGRvdWJsZQluYW5sKGNvbnN0IGNoYXIgKikgX19wdXJlMjsKIGxvbmcgZG91YmxlCW5lYXJieWludGwobG9uZyBkb3VibGUpOwotI2VuZGlmCiBsb25nIGRvdWJsZQluZXh0YWZ0ZXJsKGxvbmcgZG91YmxlLCBsb25nIGRvdWJsZSk7CiBkb3VibGUJCW5leHR0b3dhcmQoZG91YmxlLCBsb25nIGRvdWJsZSk7CiBmbG9hdAkJbmV4dHRvd2FyZGYoZmxvYXQsIGxvbmcgZG91YmxlKTsKIGxvbmcgZG91YmxlCW5leHR0b3dhcmRsKGxvbmcgZG91YmxlLCBsb25nIGRvdWJsZSk7Ci0jaWYgMAotbG9uZyBkb3VibGUJcG93bChsb25nIGRvdWJsZSwgbG9uZyBkb3VibGUpOwogbG9uZyBkb3VibGUJcmVtYWluZGVybChsb25nIGRvdWJsZSwgbG9uZyBkb3VibGUpOwogbG9uZyBkb3VibGUJcmVtcXVvbChsb25nIGRvdWJsZSwgbG9uZyBkb3VibGUsIGludCAqKTsKIGxvbmcgZG91YmxlCXJpbnRsKGxvbmcgZG91YmxlKTsKLSNlbmRpZgogbG9uZyBkb3VibGUJcm91bmRsKGxvbmcgZG91YmxlKTsKIGxvbmcgZG91YmxlCXNjYWxibG5sKGxvbmcgZG91YmxlLCBsb25nKTsKIGxvbmcgZG91YmxlCXNjYWxibmwobG9uZyBkb3VibGUsIGludCk7Ci0jaWYgMAotbG9uZyBkb3VibGUJc2luaGwobG9uZyBkb3VibGUpOwogbG9uZyBkb3VibGUJc2lubChsb25nIGRvdWJsZSk7CiBsb25nIGRvdWJsZQlzcXJ0bChsb25nIGRvdWJsZSk7Ci1sb25nIGRvdWJsZQl0YW5obChsb25nIGRvdWJsZSk7CiBsb25nIGRvdWJsZQl0YW5sKGxvbmcgZG91YmxlKTsKLWxvbmcgZG91YmxlCXRnYW1tYWwobG9uZyBkb3VibGUpOwotI2VuZGlmCiBsb25nIGRvdWJsZQl0cnVuY2wobG9uZyBkb3VibGUpOwogCi0vKiBCSU9OSUM6IEdMaWJjIGNvbXBhdGliaWxpdHkgLSByZXF1aXJlZCBieSB0aGUgQVJNIHRvb2xjaGFpbiAqLwotI2lmZGVmIF9HTlVfU09VUkNFCi12b2lkICBzaW5jb3MoZG91YmxlIHgsIGRvdWJsZSAqc2luLCBkb3VibGUgKmNvcyk7Ci12b2lkICBzaW5jb3NmKGZsb2F0IHgsIGZsb2F0ICpzaW4sIGZsb2F0ICpjb3MpOwotdm9pZCAgc2luY29zbChsb25nIGRvdWJsZSB4LCBsb25nIGRvdWJsZSAqc2luLCBsb25nIGRvdWJsZSAqY29zKTsKLSNlbmRpZgotCi0vKiAjZW5kaWYgKi8gLyogX19JU09fQ19WSVNJQkxFID49IDE5OTkgKi8KKyNlbmRpZiAvKiBfX0lTT19DX1ZJU0lCTEUgPj0gMTk5OSAqLwogX19FTkRfREVDTFMKIAogI2VuZGlmIC8qICFfTUFUSF9IXyAqLworCisvKiBzZXBhcmF0ZSBoZWFkZXIgZm9yIGNtYXRoICovCisjaWZuZGVmIF9NQVRIX0VYVFJBX0hfCisjaWYgX19JU09fQ19WSVNJQkxFID49IDE5OTkKKyNpZiBfREVDTEFSRV9DOTlfTERCTF9NQVRICisKKyNkZWZpbmUgX01BVEhfRVhUUkFfSF8KKworLyoKKyAqIGV4dHJhIGxvbmcgZG91YmxlIHZlcnNpb25zIG9mIG1hdGggZnVuY3Rpb25zIGZvciBDOTkgYW5kIGNtYXRoCisgKi8KK19fQkVHSU5fREVDTFMKKworbG9uZyBkb3VibGUJYWNvc2hsKGxvbmcgZG91YmxlKTsKK2xvbmcgZG91YmxlCWFzaW5obChsb25nIGRvdWJsZSk7Citsb25nIGRvdWJsZQlhdGFuaGwobG9uZyBkb3VibGUpOworbG9uZyBkb3VibGUJY29zaGwobG9uZyBkb3VibGUpOworbG9uZyBkb3VibGUJZXJmY2wobG9uZyBkb3VibGUpOworbG9uZyBkb3VibGUJZXJmbChsb25nIGRvdWJsZSk7Citsb25nIGRvdWJsZQlleHBtMWwobG9uZyBkb3VibGUpOworbG9uZyBkb3VibGUJbGdhbW1hbChsb25nIGRvdWJsZSk7Citsb25nIGRvdWJsZQlsb2cxMGwobG9uZyBkb3VibGUpOworbG9uZyBkb3VibGUJbG9nMXBsKGxvbmcgZG91YmxlKTsKK2xvbmcgZG91YmxlCWxvZzJsKGxvbmcgZG91YmxlKTsKK2xvbmcgZG91YmxlCWxvZ2wobG9uZyBkb3VibGUpOworbG9uZyBkb3VibGUJcG93bChsb25nIGRvdWJsZSwgbG9uZyBkb3VibGUpOworbG9uZyBkb3VibGUJc2luaGwobG9uZyBkb3VibGUpOworbG9uZyBkb3VibGUJdGFuaGwobG9uZyBkb3VibGUpOworbG9uZyBkb3VibGUJdGdhbW1hbChsb25nIGRvdWJsZSk7CisKK19fRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiAhX0RFQ0xBUkVfQzk5X0xEQkxfTUFUSCAqLworI2VuZGlmIC8qIF9fSVNPX0NfVklTSUJMRSA+PSAxOTk5ICovCisjZW5kaWYgLyogIV9NQVRIX0VYVFJBX0hfICovCmRpZmYgLS1naXQgYS9saWJtL2luY2x1ZGUvbWlwcy9mZW52LmggYi9saWJtL2luY2x1ZGUvbWlwcy9mZW52LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWQ2OWNmOAotLS0gL2Rldi9udWxsCisrKyBiL2xpYm0vaW5jbHVkZS9taXBzL2ZlbnYuaApAQCAtMCwwICsxLDIyNSBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMDQtMjAwNSBEYXZpZCBTY2h1bHR6IDxkYXNARnJlZUJTRC5PUkc+CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqICRGcmVlQlNEOiBzcmMvbGliL21zdW4vYXJtL2ZlbnYuaCx2IDEuNSAyMDA1LzAzLzE2IDE5OjAzOjQ1IGRhcyBFeHAgJAorICovCisKKy8qCisgICBSZXdyaXR0ZW4gZm9yIEFuZHJvaWQuCisqLworCisvKiBNSVBTIEZQVSBmbG9hdGluZyBwb2ludCBjb250cm9sIHJlZ2lzdGVyIGJpdHMuCisgKgorICogMzEtMjUgIC0+IGZsb2F0aW5nIHBvaW50IGNvbmRpdGlvbnMgY29kZSBiaXRzIHNldCBieSBGUCBjb21wYXJlCisgKiAgICAgICAgICAgaW5zdHJ1Y3Rpb25zCisgKiAyNCAgICAgLT4gZmx1c2ggZGVub3JtYWxpemVkIHJlc3VsdHMgdG8gemVybyBpbnN0ZWFkIG9mCisgKiAgICAgICAgICAgY2F1c2luZyB1bmltcGxlbWVudGVkIG9wZXJhdGlvbiBleGNlcHRpb24uCisgKiAyMyAgICAgLT4gQ29uZGl0aW9uIGJpdAorICogMjIgICAgIC0+IEluIGNvbmp1bmN0aW9uIHdpdGggRlMgZGV0ZWN0cyBkZW5vcm1hbGl6ZWQKKyAqICAgICAgICAgICBvcGVyYW5kcyBhbmQgcmVwbGFjZXMgdGhlbSBpbnRlcm5hbGx5IHdpdGggMC4KKyAqIDIxICAgICAtPiBJbiBjb25qdW5jdGlvbiB3aXRoIEZTIGZvcmNlcyBkZW5vcm1hbGl6ZWQgb3BlcmFuZHMKKyAqICAgICAgICAgICB0byB0aGUgY2xvc2VzdCBub3JtYWxpemVkIHZhbHVlLgorICogMjAtMTggIC0+IHJlc2VydmVkIChyZWFkIGFzIDAsIHdyaXRlIHdpdGggMCkKKyAqIDE3ICAgICAtPiBjYXVzZSBiaXQgZm9yIHVuaW1wbGVtZW50ZWQgb3BlcmF0aW9uCisgKiAxNiAgICAgLT4gY2F1c2UgYml0IGZvciBpbnZhbGlkIGV4Y2VwdGlvbgorICogMTUgICAgIC0+IGNhdXNlIGJpdCBmb3IgZGl2aXNpb24gYnkgemVybyBleGNlcHRpb24KKyAqIDE0ICAgICAtPiBjYXVzZSBiaXQgZm9yIG92ZXJmbG93IGV4Y2VwdGlvbgorICogMTMgICAgIC0+IGNhdXNlIGJpdCBmb3IgdW5kZXJmbG93IGV4Y2VwdGlvbgorICogMTIgICAgIC0+IGNhdXNlIGJpdCBmb3IgaW5leGFjdCBleGNlcHRpb24KKyAqIDExICAgICAtPiBlbmFibGUgZXhjZXB0aW9uIGZvciBpbnZhbGlkIGV4Y2VwdGlvbgorICogMTAgICAgIC0+IGVuYWJsZSBleGNlcHRpb24gZm9yIGRpdmlzaW9uIGJ5IHplcm8gZXhjZXB0aW9uCisgKiAgOSAgICAgLT4gZW5hYmxlIGV4Y2VwdGlvbiBmb3Igb3ZlcmZsb3cgZXhjZXB0aW9uCisgKiAgOCAgICAgLT4gZW5hYmxlIGV4Y2VwdGlvbiBmb3IgdW5kZXJmbG93IGV4Y2VwdGlvbgorICogIDcgICAgIC0+IGVuYWJsZSBleGNlcHRpb24gZm9yIGluZXhhY3QgZXhjZXB0aW9uCisgKiAgNiAgICAgLT4gZmxhZyBpbnZhbGlkIGV4Y2VwdGlvbgorICogIDUgICAgIC0+IGZsYWcgZGl2aXNpb24gYnkgemVybyBleGNlcHRpb24KKyAqICA0ICAgICAtPiBmbGFnIG92ZXJmbG93IGV4Y2VwdGlvbgorICogIDMgICAgIC0+IGZsYWcgdW5kZXJmbG93IGV4Y2VwdGlvbgorICogIDIgICAgIC0+IGZsYWcgaW5leGFjdCBleGNlcHRpb24KKyAqICAxLTAgICAtPiByb3VuZGluZyBjb250cm9sCisgKgorICoKKyAqIFJvdW5kaW5nIENvbnRyb2w6CisgKiAwMCAtIHJvdW5kaW5nIHRvIG5lYXJlc3QgKFJOKQorICogMDEgLSByb3VuZGluZyB0b3dhcmQgemVybyAoUlopCisgKiAxMCAtIHJvdW5kaW5nICh1cCkgdG93YXJkIHBsdXMgaW5maW5pdHkgKFJQKQorICogMTEgLSByb3VuZGluZyAoZG93bil0b3dhcmQgbWludXMgaW5maW5pdHkgKFJNKQorICovCisKKyNpZm5kZWYgX0ZFTlZfSF8KKyNkZWZpbmUgX0ZFTlZfSF8KKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorCitfX0JFR0lOX0RFQ0xTCisKK3R5cGVkZWYgX191aW50MzJfdCAgICBmZW52X3Q7Cit0eXBlZGVmIF9fdWludDMyX3QgICAgZmV4Y2VwdF90OworCisvKiBFeGNlcHRpb24gZmxhZ3MgKi8KKyNkZWZpbmUgRkVfSU5WQUxJRCAgICAgIDB4NDAKKyNkZWZpbmUgRkVfRElWQllaRVJPICAgIDB4MjAKKyNkZWZpbmUgRkVfT1ZFUkZMT1cgICAgIDB4MTAKKyNkZWZpbmUgRkVfVU5ERVJGTE9XICAgIDB4MDgKKyNkZWZpbmUgRkVfSU5FWEFDVCAgICAgIDB4MDQKKyNkZWZpbmUgRkVfQUxMX0VYQ0VQVCAgIChGRV9ESVZCWVpFUk8gfCBGRV9JTkVYQUNUIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgIEZFX0lOVkFMSUQgfCBGRV9PVkVSRkxPVyB8IEZFX1VOREVSRkxPVykKKyNkZWZpbmUgX0ZDU1JfQ0FVU0VfU0hJRlQgIDEwCisjZGVmaW5lIF9FTkFCTEVfU0hJRlQgNQorI2RlZmluZSBfRkNTUl9FTkFCTEVfTUFTSyAoRkVfQUxMX0VYQ0VQVCA8PCBfRU5BQkxFX1NISUZUKQorCisvKiBSb3VuZGluZyBtb2RlcyAqLworI2RlZmluZSBGRV9UT05FQVJFU1QgICAgMHgwMDAwCisjZGVmaW5lIEZFX1RPV0FSRFpFUk8gICAweDAwMDEKKyNkZWZpbmUgRkVfVVBXQVJEICAgICAgIDB4MDAwMgorI2RlZmluZSBGRV9ET1dOV0FSRCAgICAgMHgwMDAzCisjZGVmaW5lIF9GQ1NSX1JNT0RFX1NISUZUIDAKKyNkZWZpbmUgX0ZDU1JfUk1BU0sgICAgICAgMHgzCisvKiBEZWZhdWx0IGZsb2F0aW5nLXBvaW50IGVudmlyb25tZW50ICovCitleHRlcm4gY29uc3QgZmVudl90ICAgIF9fZmVfZGZsX2VudjsKKyNkZWZpbmUgRkVfREZMX0VOViAgICAoJl9fZmVfZGZsX2VudikKKworc3RhdGljIF9faW5saW5lIGludCBmZWdldGVudihmZW52X3QqIF9fZW52cCkgeworICAgZmVudl90IF9mY3NyID0gMDsKKyNpZmRlZiAgX19taXBzX2hhcmRfZmxvYXQKKyAgIF9fYXNtX18gX192b2xhdGlsZV9fKCJjZmMxICUwLCQzMSIgOiAiPXIiIChfZmNzcikpOworI2VuZGlmCisgICAqX19lbnZwID0gX2Zjc3I7CisgICByZXR1cm4gMDsKK30KKworc3RhdGljIF9faW5saW5lIGludCBmZXNldGVudihjb25zdCBmZW52X3QqIF9fZW52cCkgeworICBmZW52X3QgX2Zjc3IgPSAqX19lbnZwOworI2lmZGVmICBfX21pcHNfaGFyZF9mbG9hdAorICBfX2FzbV9fIF9fdm9sYXRpbGVfXygiY3RjMSAlMCwkMzEiIDogOiAiciIgKF9mY3NyKSk7CisjZW5kaWYKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBfX2lubGluZSBpbnQgZmVjbGVhcmV4Y2VwdChpbnQgX19leGNlcHRzKSB7CisgIGZleGNlcHRfdCBfX2Zjc3I7CisgIGZlZ2V0ZW52KCZfX2Zjc3IpOworICBfX2V4Y2VwdHMgJj0gRkVfQUxMX0VYQ0VQVDsKKyAgX19mY3NyICY9IH4oX19leGNlcHRzIHwgKF9fZXhjZXB0cyA8PCBfRkNTUl9DQVVTRV9TSElGVCkpOworICBmZXNldGVudigmX19mY3NyKTsKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBfX2lubGluZSBpbnQgZmVnZXRleGNlcHRmbGFnKGZleGNlcHRfdCogX19mbGFncCwgaW50IF9fZXhjZXB0cykgeworICBmZXhjZXB0X3QgX19mY3NyOworICBmZWdldGVudigmX19mY3NyKTsKKyAgKl9fZmxhZ3AgPSBfX2Zjc3IgJiBfX2V4Y2VwdHMgJiBGRV9BTExfRVhDRVBUOworICByZXR1cm4gMDsKK30KKworc3RhdGljIF9faW5saW5lIGludCBmZXNldGV4Y2VwdGZsYWcoY29uc3QgZmV4Y2VwdF90KiBfX2ZsYWdwLCBpbnQgX19leGNlcHRzKSB7CisgIGZleGNlcHRfdCBfX2Zjc3I7CisgIGZlZ2V0ZW52KCZfX2Zjc3IpOworICAvKiBFbnN1cmUgdGhhdCBmbGFncyBhcmUgYWxsIGxlZ2FsICovCisgIF9fZXhjZXB0cyAmPSBGRV9BTExfRVhDRVBUOworICBfX2Zjc3IgJj0gfl9fZXhjZXB0czsKKyAgX19mY3NyIHw9ICpfX2ZsYWdwICYgX19leGNlcHRzOworICBmZXNldGVudigmX19mY3NyKTsKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBfX2lubGluZSBpbnQgZmVyYWlzZWV4Y2VwdChpbnQgX19leGNlcHRzKSB7CisgIGZleGNlcHRfdCBfX2Zjc3I7CisgIGZlZ2V0ZW52KCZfX2Zjc3IpOworICAvKiBFbnN1cmUgdGhhdCBmbGFncyBhcmUgYWxsIGxlZ2FsICovCisgIF9fZXhjZXB0cyAmPSBGRV9BTExfRVhDRVBUOworICAvKiBDYXVzZSBiaXQgbmVlZHMgdG8gYmUgc2V0IGFzIHdlbGwgZm9yIGdlbmVyYXRpbmcgdGhlIGV4Y2VwdGlvbiovCisgIF9fZmNzciB8PSBfX2V4Y2VwdHMgfCAoX19leGNlcHRzIDw8IF9GQ1NSX0NBVVNFX1NISUZUKTsKKyAgZmVzZXRlbnYoJl9fZmNzcik7CisgIHJldHVybiAwOworfQorCitzdGF0aWMgX19pbmxpbmUgaW50IGZldGVzdGV4Y2VwdChpbnQgX19leGNlcHRzKSB7CisgIGZleGNlcHRfdCBfX0ZDU1I7CisgIGZlZ2V0ZW52KCZfX0ZDU1IpOworICByZXR1cm4gKF9fRkNTUiAmIF9fZXhjZXB0cyAmIEZFX0FMTF9FWENFUFQpOworfQorCitzdGF0aWMgX19pbmxpbmUgaW50IGZlZ2V0cm91bmQodm9pZCkgeworICBmZW52X3QgX2Zjc3I7CisgIGZlZ2V0ZW52KCZfZmNzcik7CisgIHJldHVybiAoX2Zjc3IgJiBfRkNTUl9STUFTSyk7Cit9CisKK3N0YXRpYyBfX2lubGluZSBpbnQgZmVzZXRyb3VuZChpbnQgX19yb3VuZCkgeworICBmZW52X3QgX2Zjc3I7CisgIGZlZ2V0ZW52KCZfZmNzcik7CisgIF9mY3NyICY9IH5fRkNTUl9STUFTSzsKKyAgX2Zjc3IgfD0gKF9fcm91bmQgJiBfRkNTUl9STUFTSyApIDsKKyAgZmVzZXRlbnYoJl9mY3NyKTsKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBfX2lubGluZSBpbnQgZmVob2xkZXhjZXB0KGZlbnZfdCogX19lbnZwKSB7CisgIGZlbnZfdCBfX2VudjsKKyAgZmVnZXRlbnYoJl9fZW52KTsKKyAgKl9fZW52cCA9IF9fZW52OworICBfX2VudiAmPSB+KEZFX0FMTF9FWENFUFQgfCBfRkNTUl9FTkFCTEVfTUFTSyk7CisgIGZlc2V0ZW52KCZfX2Vudik7CisgIHJldHVybiAwOworfQorCitzdGF0aWMgX19pbmxpbmUgaW50IGZldXBkYXRlZW52KGNvbnN0IGZlbnZfdCogX19lbnZwKSB7CisgIGZleGNlcHRfdCBfX2Zjc3I7CisgIGZlZ2V0ZW52KCZfX2Zjc3IpOworICBmZXNldGVudihfX2VudnApOworICBmZXJhaXNlZXhjZXB0KF9fZmNzciAmIEZFX0FMTF9FWENFUFQpOworICByZXR1cm4gMDsKK30KKworI2lmIF9fQlNEX1ZJU0lCTEUKKworc3RhdGljIF9faW5saW5lIGludCBmZWVuYWJsZWV4Y2VwdChpbnQgX19tYXNrKSB7CisgIGZlbnZfdCBfX29sZF9mY3NyLCBfX25ld19mY3NyOworICBmZWdldGVudigmX19vbGRfZmNzcik7CisgIF9fbmV3X2Zjc3IgPSBfX29sZF9mY3NyIHwgKF9fbWFzayAmIEZFX0FMTF9FWENFUFQpIDw8IF9FTkFCTEVfU0hJRlQ7CisgIGZlc2V0ZW52KCZfX25ld19mY3NyKTsKKyAgcmV0dXJuICgoX19vbGRfZmNzciA+PiBfRU5BQkxFX1NISUZUKSAmIEZFX0FMTF9FWENFUFQpOworfQorCitzdGF0aWMgX19pbmxpbmUgaW50IGZlZGlzYWJsZWV4Y2VwdChpbnQgX19tYXNrKSB7CisgIGZlbnZfdCBfX29sZF9mY3NyLCBfX25ld19mY3NyOworICBmZWdldGVudigmX19vbGRfZmNzcik7CisgIF9fbmV3X2Zjc3IgPSBfX29sZF9mY3NyICYgfigoX19tYXNrICYgRkVfQUxMX0VYQ0VQVCkgPDwgX0VOQUJMRV9TSElGVCk7CisgIGZlc2V0ZW52KCZfX25ld19mY3NyKTsKKyAgcmV0dXJuICgoX19vbGRfZmNzciA+PiBfRU5BQkxFX1NISUZUKSAmIEZFX0FMTF9FWENFUFQpOworfQorCitzdGF0aWMgX19pbmxpbmUgaW50IGZlZ2V0ZXhjZXB0KHZvaWQpIHsKKyAgZmVudl90IF9fZmNzcjsKKyAgZmVnZXRlbnYoJl9fZmNzcik7CisgIHJldHVybiAoKF9fZmNzciAmIF9GQ1NSX0VOQUJMRV9NQVNLKSA+PiBfRU5BQkxFX1NISUZUKTsKK30KKworI2VuZGlmIC8qIF9fQlNEX1ZJU0lCTEUgKi8KKworX19FTkRfREVDTFMKKworI2VuZGlmIC8qICFfRkVOVl9IXyAqLwpkaWZmIC0tZ2l0IGEvbGlibS9pbmNsdWRlL3Bvd2VycGMvZmVudi5oIGIvbGlibS9pbmNsdWRlL3Bvd2VycGMvZmVudi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZmQyMzg5Li4wMDAwMDAwCi0tLSBhL2xpYm0vaW5jbHVkZS9wb3dlcnBjL2ZlbnYuaAorKysgL2Rldi9udWxsCkBAIC0xLDI2MyArMCwwIEBACi0vKi0KLSAqIENvcHlyaWdodCAoYykgMjAwNC0yMDA1IERhdmlkIFNjaHVsdHogPGRhc0BGcmVlQlNELk9SRz4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKgotICogJEZyZWVCU0Q6IHNyYy9saWIvbXN1bi9wb3dlcnBjL2ZlbnYuaCx2IDEuMyAyMDA1LzAzLzE2IDE5OjAzOjQ1IGRhcyBFeHAgJAotICovCi0KLSNpZm5kZWYJX0ZFTlZfSF8KLSNkZWZpbmUJX0ZFTlZfSF8KLQotI2luY2x1ZGUgPHN5cy9fdHlwZXMuaD4KLQotdHlwZWRlZglfX3VpbnQzMl90CWZlbnZfdDsKLXR5cGVkZWYJX191aW50MzJfdAlmZXhjZXB0X3Q7Ci0KLS8qIEV4Y2VwdGlvbiBmbGFncyAqLwotI2RlZmluZQlGRV9JTkVYQUNUCTB4MDIwMDAwMDAKLSNkZWZpbmUJRkVfRElWQllaRVJPCTB4MDQwMDAwMDAKLSNkZWZpbmUJRkVfVU5ERVJGTE9XCTB4MDgwMDAwMDAKLSNkZWZpbmUJRkVfT1ZFUkZMT1cJMHgxMDAwMDAwMAotI2RlZmluZQlGRV9JTlZBTElECTB4MjAwMDAwMDAJLyogYWxsIHR5cGVzIG9mIGludmFsaWQgRlAgb3BzICovCi0KLS8qCi0gKiBUaGUgUG93ZXJQQyBhcmNoaXRlY3R1cmUgaGFzIGV4dHJhIGludmFsaWQgZmxhZ3MgdGhhdCBpbmRpY2F0ZSB0aGUKLSAqIHNwZWNpZmljIHR5cGUgb2YgaW52YWxpZCBvcGVyYXRpb24gb2NjdXJyZWQuICBUaGVzZSBmbGFncyBtYXkgYmUKLSAqIHRlc3RlZCwgc2V0LCBhbmQgY2xlYXJlZC0tLWJ1dCBub3QgbWFza2VkLS0tc2VwYXJhdGVseS4gIEFsbCBvZgotICogdGhlc2UgYml0cyBhcmUgY2xlYXJlZCB3aGVuIEZFX0lOVkFMSUQgaXMgY2xlYXJlZCwgYnV0IG9ubHkKLSAqIEZFX1ZYU09GVCBpcyBzZXQgd2hlbiBGRV9JTlZBTElEIGlzIGV4cGxpY2l0bHkgc2V0IGluIHNvZnR3YXJlLgotICovCi0jZGVmaW5lCUZFX1ZYQ1ZJCTB4MDAwMDAxMDAJLyogaW52YWxpZCBpbnRlZ2VyIGNvbnZlcnQgKi8KLSNkZWZpbmUJRkVfVlhTUVJUCTB4MDAwMDAyMDAJLyogc3F1YXJlIHJvb3Qgb2YgYSBuZWdhdGl2ZSAqLwotI2RlZmluZQlGRV9WWFNPRlQJMHgwMDAwMDQwMAkvKiBzb2Z0d2FyZS1yZXF1ZXN0ZWQgZXhjZXB0aW9uICovCi0jZGVmaW5lCUZFX1ZYVkMJCTB4MDAwODAwMDAJLyogb3JkZXJlZCBjb21wYXJpc29uIGludm9sdmluZyBOYU4gKi8KLSNkZWZpbmUJRkVfVlhJTVoJMHgwMDEwMDAwMAkvKiBpbmYgKiAwICovCi0jZGVmaW5lCUZFX1ZYWkRaCTB4MDAyMDAwMDAJLyogMCAvIDAgKi8KLSNkZWZpbmUJRkVfVlhJREkJMHgwMDQwMDAwMAkvKiBpbmYgLyBpbmYgKi8KLSNkZWZpbmUJRkVfVlhJU0kJMHgwMDgwMDAwMAkvKiBpbmYgLSBpbmYgKi8KLSNkZWZpbmUJRkVfVlhTTkFOCTB4MDEwMDAwMDAJLyogb3BlcmF0aW9uIG9uIGEgc2lnbmFsbGluZyBOYU4gKi8KLSNkZWZpbmUJRkVfQUxMX0lOVkFMSUQJKEZFX1ZYQ1ZJIHwgRkVfVlhTUVJUIHwgRkVfVlhTT0ZUIHwgRkVfVlhWQyB8IFwKLQkJCSBGRV9WWElNWiB8IEZFX1ZYWkRaIHwgRkVfVlhJREkgfCBGRV9WWElTSSB8IFwKLQkJCSBGRV9WWFNOQU4gfCBGRV9JTlZBTElEKQotI2RlZmluZQlGRV9BTExfRVhDRVBUCShGRV9ESVZCWVpFUk8gfCBGRV9JTkVYQUNUIHwgXAotCQkJIEZFX0FMTF9JTlZBTElEIHwgRkVfT1ZFUkZMT1cgfCBGRV9VTkRFUkZMT1cpCi0KLS8qIFJvdW5kaW5nIG1vZGVzICovCi0jZGVmaW5lCUZFX1RPTkVBUkVTVAkweDAwMDAKLSNkZWZpbmUJRkVfVE9XQVJEWkVSTwkweDAwMDEKLSNkZWZpbmUJRkVfVVBXQVJECTB4MDAwMgotI2RlZmluZQlGRV9ET1dOV0FSRAkweDAwMDMKLSNkZWZpbmUJX1JPVU5EX01BU0sJKEZFX1RPTkVBUkVTVCB8IEZFX0RPV05XQVJEIHwgXAotCQkJIEZFX1VQV0FSRCB8IEZFX1RPV0FSRFpFUk8pCi0KLV9fQkVHSU5fREVDTFMKLQotLyogRGVmYXVsdCBmbG9hdGluZy1wb2ludCBlbnZpcm9ubWVudCAqLwotZXh0ZXJuIGNvbnN0IGZlbnZfdAlfX2ZlX2RmbF9lbnY7Ci0jZGVmaW5lCUZFX0RGTF9FTlYJKCZfX2ZlX2RmbF9lbnYpCi0KLS8qIFdlIG5lZWQgdG8gYmUgYWJsZSB0byBtYXAgc3RhdHVzIGZsYWcgcG9zaXRpb25zIHRvIG1hc2sgZmxhZyBwb3NpdGlvbnMgKi8KLSNkZWZpbmUJX0ZQVVNXX1NISUZUCTIyCi0jZGVmaW5lCV9FTkFCTEVfTUFTSwkoKEZFX0RJVkJZWkVSTyB8IEZFX0lORVhBQ1QgfCBGRV9JTlZBTElEIHwgXAotCQkJIEZFX09WRVJGTE9XIHwgRkVfVU5ERVJGTE9XKSA+PiBfRlBVU1dfU0hJRlQpCi0KLSNkZWZpbmUJX19tZmZzKF9fZW52KQlfX2FzbSBfX3ZvbGF0aWxlKCJtZmZzICUwIiA6ICI9ZiIgKCooX19lbnYpKSkKLSNkZWZpbmUJX19tdGZzZihfX2VudikJX19hc20gX192b2xhdGlsZSgibXRmc2YgMjU1LCUwIiA6IDogImYiIChfX2VudikpCi0KLXVuaW9uIF9fZnBzY3IgewotCWRvdWJsZSBfX2Q7Ci0Jc3RydWN0IHsKLQkJX191aW50MzJfdCBfX2p1bms7Ci0JCWZlbnZfdCBfX3JlZzsKLQl9IF9fYml0czsKLX07Ci0KLXN0YXRpYyBfX2lubGluZSBpbnQKLWZlY2xlYXJleGNlcHQoaW50IF9fZXhjZXB0cykKLXsKLQl1bmlvbiBfX2Zwc2NyIF9fcjsKLQotCWlmIChfX2V4Y2VwdHMgJiBGRV9JTlZBTElEKQotCQlfX2V4Y2VwdHMgfD0gRkVfQUxMX0lOVkFMSUQ7Ci0JX19tZmZzKCZfX3IuX19kKTsKLQlfX3IuX19iaXRzLl9fcmVnICY9IH5fX2V4Y2VwdHM7Ci0JX19tdGZzZihfX3IuX19kKTsKLQlyZXR1cm4gKDApOwotfQotCi1zdGF0aWMgX19pbmxpbmUgaW50Ci1mZWdldGV4Y2VwdGZsYWcoZmV4Y2VwdF90ICpfX2ZsYWdwLCBpbnQgX19leGNlcHRzKQotewotCXVuaW9uIF9fZnBzY3IgX19yOwotCi0JX19tZmZzKCZfX3IuX19kKTsKLQkqX19mbGFncCA9IF9fci5fX2JpdHMuX19yZWcgJiBfX2V4Y2VwdHM7Ci0JcmV0dXJuICgwKTsKLX0KLQotc3RhdGljIF9faW5saW5lIGludAotZmVzZXRleGNlcHRmbGFnKGNvbnN0IGZleGNlcHRfdCAqX19mbGFncCwgaW50IF9fZXhjZXB0cykKLXsKLQl1bmlvbiBfX2Zwc2NyIF9fcjsKLQotCWlmIChfX2V4Y2VwdHMgJiBGRV9JTlZBTElEKQotCQlfX2V4Y2VwdHMgfD0gRkVfQUxMX0VYQ0VQVDsKLQlfX21mZnMoJl9fci5fX2QpOwotCV9fci5fX2JpdHMuX19yZWcgJj0gfl9fZXhjZXB0czsKLQlfX3IuX19iaXRzLl9fcmVnIHw9ICpfX2ZsYWdwICYgX19leGNlcHRzOwotCV9fbXRmc2YoX19yLl9fZCk7Ci0JcmV0dXJuICgwKTsKLX0KLQotc3RhdGljIF9faW5saW5lIGludAotZmVyYWlzZWV4Y2VwdChpbnQgX19leGNlcHRzKQotewotCXVuaW9uIF9fZnBzY3IgX19yOwotCi0JaWYgKF9fZXhjZXB0cyAmIEZFX0lOVkFMSUQpCi0JCV9fZXhjZXB0cyB8PSBGRV9WWFNPRlQ7Ci0JX19tZmZzKCZfX3IuX19kKTsKLQlfX3IuX19iaXRzLl9fcmVnIHw9IF9fZXhjZXB0czsKLQlfX210ZnNmKF9fci5fX2QpOwotCXJldHVybiAoMCk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZSBpbnQKLWZldGVzdGV4Y2VwdChpbnQgX19leGNlcHRzKQotewotCXVuaW9uIF9fZnBzY3IgX19yOwotCi0JX19tZmZzKCZfX3IuX19kKTsKLQlyZXR1cm4gKF9fci5fX2JpdHMuX19yZWcgJiBfX2V4Y2VwdHMpOwotfQotCi1zdGF0aWMgX19pbmxpbmUgaW50Ci1mZWdldHJvdW5kKHZvaWQpCi17Ci0JdW5pb24gX19mcHNjciBfX3I7Ci0KLQlfX21mZnMoJl9fci5fX2QpOwotCXJldHVybiAoX19yLl9fYml0cy5fX3JlZyAmIF9ST1VORF9NQVNLKTsKLX0KLQotc3RhdGljIF9faW5saW5lIGludAotZmVzZXRyb3VuZChpbnQgX19yb3VuZCkKLXsKLQl1bmlvbiBfX2Zwc2NyIF9fcjsKLQotCWlmIChfX3JvdW5kICYgfl9ST1VORF9NQVNLKQotCQlyZXR1cm4gKC0xKTsKLQlfX21mZnMoJl9fci5fX2QpOwotCV9fci5fX2JpdHMuX19yZWcgJj0gfl9ST1VORF9NQVNLOwotCV9fci5fX2JpdHMuX19yZWcgfD0gX19yb3VuZDsKLQlfX210ZnNmKF9fci5fX2QpOwotCXJldHVybiAoMCk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZSBpbnQKLWZlZ2V0ZW52KGZlbnZfdCAqX19lbnZwKQotewotCXVuaW9uIF9fZnBzY3IgX19yOwotCi0JX19tZmZzKCZfX3IuX19kKTsKLQkqX19lbnZwID0gX19yLl9fYml0cy5fX3JlZzsKLQlyZXR1cm4gKDApOwotfQotCi1zdGF0aWMgX19pbmxpbmUgaW50Ci1mZWhvbGRleGNlcHQoZmVudl90ICpfX2VudnApCi17Ci0JdW5pb24gX19mcHNjciBfX3I7Ci0KLQlfX21mZnMoJl9fci5fX2QpOwotCSpfX2VudnAgPSBfX3IuX19kOwotCV9fci5fX2JpdHMuX19yZWcgJj0gfihGRV9BTExfRVhDRVBUIHwgX0VOQUJMRV9NQVNLKTsKLQlfX210ZnNmKF9fci5fX2QpOwotCXJldHVybiAoMCk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZSBpbnQKLWZlc2V0ZW52KGNvbnN0IGZlbnZfdCAqX19lbnZwKQotewotCXVuaW9uIF9fZnBzY3IgX19yOwotCi0JX19yLl9fYml0cy5fX3JlZyA9ICpfX2VudnA7Ci0JX19tdGZzZihfX3IuX19kKTsKLQlyZXR1cm4gKDApOwotfQotCi1zdGF0aWMgX19pbmxpbmUgaW50Ci1mZXVwZGF0ZWVudihjb25zdCBmZW52X3QgKl9fZW52cCkKLXsKLQl1bmlvbiBfX2Zwc2NyIF9fcjsKLQotCV9fbWZmcygmX19yLl9fZCk7Ci0JX19yLl9fYml0cy5fX3JlZyAmPSBGRV9BTExfRVhDRVBUOwotCV9fci5fX2JpdHMuX19yZWcgfD0gKl9fZW52cDsKLQlfX210ZnNmKF9fci5fX2QpOwotCXJldHVybiAoMCk7Ci19Ci0KLSNpZiBfX0JTRF9WSVNJQkxFCi0KLXN0YXRpYyBfX2lubGluZSBpbnQKLWZlZW5hYmxlZXhjZXB0KGludCBfX21hc2spCi17Ci0JdW5pb24gX19mcHNjciBfX3I7Ci0JZmVudl90IF9fb2xkbWFzazsKLQotCV9fbWZmcygmX19yLl9fZCk7Ci0JX19vbGRtYXNrID0gX19yLl9fYml0cy5fX3JlZzsKLQlfX3IuX19iaXRzLl9fcmVnIHw9IChfX21hc2sgJiBGRV9BTExfRVhDRVBUKSA+PiBfRlBVU1dfU0hJRlQ7Ci0JX19tdGZzZihfX3IuX19kKTsKLQlyZXR1cm4gKChfX29sZG1hc2sgJiBfRU5BQkxFX01BU0spIDw8IF9GUFVTV19TSElGVCk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZSBpbnQKLWZlZGlzYWJsZWV4Y2VwdChpbnQgX19tYXNrKQotewotCXVuaW9uIF9fZnBzY3IgX19yOwotCWZlbnZfdCBfX29sZG1hc2s7Ci0KLQlfX21mZnMoJl9fci5fX2QpOwotCV9fb2xkbWFzayA9IF9fci5fX2JpdHMuX19yZWc7Ci0JX19yLl9fYml0cy5fX3JlZyAmPSB+KChfX21hc2sgJiBGRV9BTExfRVhDRVBUKSA+PiBfRlBVU1dfU0hJRlQpOwotCV9fbXRmc2YoX19yLl9fZCk7Ci0JcmV0dXJuICgoX19vbGRtYXNrICYgX0VOQUJMRV9NQVNLKSA8PCBfRlBVU1dfU0hJRlQpOwotfQotCi1zdGF0aWMgX19pbmxpbmUgaW50Ci1mZWdldGV4Y2VwdCh2b2lkKQotewotCXVuaW9uIF9fZnBzY3IgX19yOwotCi0JX19tZmZzKCZfX3IuX19kKTsKLQlyZXR1cm4gKChfX3IuX19iaXRzLl9fcmVnICYgX0VOQUJMRV9NQVNLKSA8PCBfRlBVU1dfU0hJRlQpOwotfQotCi0jZW5kaWYgLyogX19CU0RfVklTSUJMRSAqLwotCi1fX0VORF9ERUNMUwotCi0jZW5kaWYJLyogIV9GRU5WX0hfICovCmRpZmYgLS1naXQgYS9saWJtL2luY2x1ZGUvc3BhcmM2NC9mZW52LmggYi9saWJtL2luY2x1ZGUvc3BhcmM2NC9mZW52LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY4NGM0YTIuLjAwMDAwMDAKLS0tIGEvbGlibS9pbmNsdWRlL3NwYXJjNjQvZmVudi5oCisrKyAvZGV2L251bGwKQEAgLTEsMjU0ICswLDAgQEAKLS8qLQotICogQ29weXJpZ2h0IChjKSAyMDA0LTIwMDUgRGF2aWQgU2NodWx0eiA8ZGFzQEZyZWVCU0QuT1JHPgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqCi0gKiAkRnJlZUJTRDogc3JjL2xpYi9tc3VuL3NwYXJjNjQvZmVudi5oLHYgMS4zIDIwMDUvMDMvMTYgMTk6MDM6NDYgZGFzIEV4cCAkCi0gKi8KLQotI2lmbmRlZglfRkVOVl9IXwotI2RlZmluZQlfRkVOVl9IXwotCi0jaW5jbHVkZSA8c3lzL190eXBlcy5oPgotCi10eXBlZGVmCV9fdWludDY0X3QJZmVudl90OwotdHlwZWRlZglfX3VpbnQ2NF90CWZleGNlcHRfdDsKLQotLyogRXhjZXB0aW9uIGZsYWdzICovCi0jZGVmaW5lCUZFX0lOVkFMSUQJMHgwMDAwMDIwMAotI2RlZmluZQlGRV9ESVZCWVpFUk8JMHgwMDAwMDA0MAotI2RlZmluZQlGRV9PVkVSRkxPVwkweDAwMDAwMTAwCi0jZGVmaW5lCUZFX1VOREVSRkxPVwkweDAwMDAwMDgwCi0jZGVmaW5lCUZFX0lORVhBQ1QJMHgwMDAwMDAyMAotI2RlZmluZQlGRV9BTExfRVhDRVBUCShGRV9ESVZCWVpFUk8gfCBGRV9JTkVYQUNUIHwgXAotCQkJIEZFX0lOVkFMSUQgfCBGRV9PVkVSRkxPVyB8IEZFX1VOREVSRkxPVykKLQotLyoKLSAqIFJvdW5kaW5nIG1vZGVzCi0gKgotICogV2UgY2FuJ3QganVzdCB1c2UgdGhlIGhhcmR3YXJlIGJpdCB2YWx1ZXMgaGVyZSwgYmVjYXVzZSB0aGF0IHdvdWxkCi0gKiBtYWtlIEZFX1VQV0FSRCBhbmQgRkVfRE9XTldBUkQgbmVnYXRpdmUsIHdoaWNoIGlzIG5vdCBhbGxvd2VkLgotICovCi0jZGVmaW5lCUZFX1RPTkVBUkVTVAkweDAKLSNkZWZpbmUJRkVfVE9XQVJEWkVSTwkweDEKLSNkZWZpbmUJRkVfVVBXQVJECTB4MgotI2RlZmluZQlGRV9ET1dOV0FSRAkweDMKLSNkZWZpbmUJX1JPVU5EX01BU0sJKEZFX1RPTkVBUkVTVCB8IEZFX0RPV05XQVJEIHwgXAotCQkJIEZFX1VQV0FSRCB8IEZFX1RPV0FSRFpFUk8pCi0jZGVmaW5lCV9ST1VORF9TSElGVAkzMAotCi1fX0JFR0lOX0RFQ0xTCi0KLS8qIERlZmF1bHQgZmxvYXRpbmctcG9pbnQgZW52aXJvbm1lbnQgKi8KLWV4dGVybiBjb25zdCBmZW52X3QJX19mZV9kZmxfZW52OwotI2RlZmluZQlGRV9ERkxfRU5WCSgmX19mZV9kZmxfZW52KQotCi0vKiBXZSBuZWVkIHRvIGJlIGFibGUgdG8gbWFwIHN0YXR1cyBmbGFnIHBvc2l0aW9ucyB0byBtYXNrIGZsYWcgcG9zaXRpb25zICovCi0jZGVmaW5lIF9GUFVTV19TSElGVAkxOAotI2RlZmluZQlfRU5BQkxFX01BU0sJKEZFX0FMTF9FWENFUFQgPDwgX0ZQVVNXX1NISUZUKQotCi0jZGVmaW5lCV9fbGR4ZnNyKF9fcikJX19hc20gX192b2xhdGlsZSgibGR4ICUwLCAlJWZzciIgOiA6ICJtIiAoX19yKSkKLSNkZWZpbmUJX19zdHhmc3IoX19yKQlfX2FzbSBfX3ZvbGF0aWxlKCJzdHggJSVmc3IsICUwIiA6ICI9bSIgKCooX19yKSkpCi0KLXN0YXRpYyBfX2lubGluZSBpbnQKLWZlY2xlYXJleGNlcHQoaW50IF9fZXhjZXB0cykKLXsKLQlmZXhjZXB0X3QgX19yOwotCi0JX19zdHhmc3IoJl9fcik7Ci0JX19yICY9IH5fX2V4Y2VwdHM7Ci0JX19sZHhmc3IoX19yKTsKLQlyZXR1cm4gKDApOwotfQotCi1zdGF0aWMgX19pbmxpbmUgaW50Ci1mZWdldGV4Y2VwdGZsYWcoZmV4Y2VwdF90ICpfX2ZsYWdwLCBpbnQgX19leGNlcHRzKQotewotCWZleGNlcHRfdCBfX3I7Ci0KLQlfX3N0eGZzcigmX19yKTsKLQkqX19mbGFncCA9IF9fciAmIF9fZXhjZXB0czsKLQlyZXR1cm4gKDApOwotfQotCi1zdGF0aWMgX19pbmxpbmUgaW50Ci1mZXNldGV4Y2VwdGZsYWcoY29uc3QgZmV4Y2VwdF90ICpfX2ZsYWdwLCBpbnQgX19leGNlcHRzKQotewotCWZleGNlcHRfdCBfX3I7Ci0KLQlfX3N0eGZzcigmX19yKTsKLQlfX3IgJj0gfl9fZXhjZXB0czsKLQlfX3IgfD0gKl9fZmxhZ3AgJiBfX2V4Y2VwdHM7Ci0JX19sZHhmc3IoX19yKTsKLQlyZXR1cm4gKDApOwotfQotCi0vKgotICogSW4gY29udHJhc3Qgd2l0aCB0aGUgaWE2NCBwbGF0Zm9ybSwgaXQgc2VlbXMgdG8gYmUgd29ydGh3aGlsZSB0bwotICogaW5saW5lIHRoaXMgZnVuY3Rpb24gb24gc3BhcmM2NCBldmVuIHdoZW4gdGhlIGFyZ3VtZW50cyBhcmUgbm90Ci0gKiBjb21waWxlLXRpbWUgY29uc3RhbnRzLiAgUGVyaGFwcyB0aGlzIGRlcGVuZHMgb24gdGhlIHJlZ2lzdGVyIHdpbmRvdy4KLSAqLwotc3RhdGljIF9faW5saW5lIGludAotZmVyYWlzZWV4Y2VwdChpbnQgX19leGNlcHRzKQotewotCXZvbGF0aWxlIGRvdWJsZSBkOwotCi0JLyoKLQkgKiBXaXRoIGEgY29tcGlsZXIgdGhhdCBzdXBwb3J0cyB0aGUgRkVOVl9BQ0NFU1MgcHJhZ21hCi0JICogcHJvcGVybHksIHNpbXBsZSBleHByZXNzaW9ucyBsaWtlICcwLjAgLyAwLjAnIHNob3VsZAotCSAqIGJlIHN1ZmZpY2llbnQgdG8gZ2VuZXJhdGUgdHJhcHMuICBVbmZvcnR1bmF0ZWx5LCB3ZQotCSAqIG5lZWQgdG8gYnJpbmcgYSB2b2xhdGlsZSB2YXJpYWJsZSBpbnRvIHRoZSBlcXVhdGlvbgotCSAqIHRvIHByZXZlbnQgaW5jb3JyZWN0IG9wdGltaXphdGlvbnMuCi0JICovCi0JaWYgKF9fZXhjZXB0cyAmIEZFX0lOVkFMSUQpIHsKLQkJZCA9IDAuMDsKLQkJZCA9IDAuMCAvIGQ7Ci0JfQotCWlmIChfX2V4Y2VwdHMgJiBGRV9ESVZCWVpFUk8pIHsKLQkJZCA9IDAuMDsKLQkJZCA9IDEuMCAvIGQ7Ci0JfQotCWlmIChfX2V4Y2VwdHMgJiBGRV9PVkVSRkxPVykgewotCQlkID0gMHgxLmZmcDEwMjM7Ci0JCWQgKj0gMi4wOwotCX0KLQlpZiAoX19leGNlcHRzICYgRkVfVU5ERVJGTE9XKSB7Ci0JCWQgPSAweDFwLTEwMjI7Ci0JCWQgLz0gMHgxcDEwMjM7Ci0JfQotCWlmIChfX2V4Y2VwdHMgJiBGRV9JTkVYQUNUKSB7Ci0JCWQgPSAweDFwLTEwMjI7Ci0JCWQgKz0gMS4wOwotCX0KLQlyZXR1cm4gKDApOwotfQotCi1zdGF0aWMgX19pbmxpbmUgaW50Ci1mZXRlc3RleGNlcHQoaW50IF9fZXhjZXB0cykKLXsKLQlmZXhjZXB0X3QgX19yOwotCi0JX19zdHhmc3IoJl9fcik7Ci0JcmV0dXJuIChfX3IgJiBfX2V4Y2VwdHMpOwotfQotCi1zdGF0aWMgX19pbmxpbmUgaW50Ci1mZWdldHJvdW5kKHZvaWQpCi17Ci0JZmVudl90IF9fcjsKLQotCV9fc3R4ZnNyKCZfX3IpOwotCXJldHVybiAoKF9fciA+PiBfUk9VTkRfU0hJRlQpICYgX1JPVU5EX01BU0spOwotfQotCi1zdGF0aWMgX19pbmxpbmUgaW50Ci1mZXNldHJvdW5kKGludCBfX3JvdW5kKQotewotCWZlbnZfdCBfX3I7Ci0KLQlpZiAoX19yb3VuZCAmIH5fUk9VTkRfTUFTSykKLQkJcmV0dXJuICgtMSk7Ci0JX19zdHhmc3IoJl9fcik7Ci0JX19yICY9IH4oX1JPVU5EX01BU0sgPDwgX1JPVU5EX1NISUZUKTsKLQlfX3IgfD0gX19yb3VuZCA8PCBfUk9VTkRfU0hJRlQ7Ci0JX19sZHhmc3IoX19yKTsKLQlyZXR1cm4gKDApOwotfQotCi1zdGF0aWMgX19pbmxpbmUgaW50Ci1mZWdldGVudihmZW52X3QgKl9fZW52cCkKLXsKLQotCV9fc3R4ZnNyKF9fZW52cCk7Ci0JcmV0dXJuICgwKTsKLX0KLQotc3RhdGljIF9faW5saW5lIGludAotZmVob2xkZXhjZXB0KGZlbnZfdCAqX19lbnZwKQotewotCWZlbnZfdCBfX3I7Ci0KLQlfX3N0eGZzcigmX19yKTsKLQkqX19lbnZwID0gX19yOwotCV9fciAmPSB+KEZFX0FMTF9FWENFUFQgfCBfRU5BQkxFX01BU0spOwotCV9fbGR4ZnNyKF9fcik7Ci0JcmV0dXJuICgwKTsKLX0KLQotc3RhdGljIF9faW5saW5lIGludAotZmVzZXRlbnYoY29uc3QgZmVudl90ICpfX2VudnApCi17Ci0KLQlfX2xkeGZzcigqX19lbnZwKTsKLQlyZXR1cm4gKDApOwotfQotCi1zdGF0aWMgX19pbmxpbmUgaW50Ci1mZXVwZGF0ZWVudihjb25zdCBmZW52X3QgKl9fZW52cCkKLXsKLQlmZXhjZXB0X3QgX19yOwotCi0JX19zdHhmc3IoJl9fcik7Ci0JX19sZHhmc3IoKl9fZW52cCk7Ci0JZmVyYWlzZWV4Y2VwdChfX3IgJiBGRV9BTExfRVhDRVBUKTsKLQlyZXR1cm4gKDApOwotfQotCi0jaWYgX19CU0RfVklTSUJMRQotCi1zdGF0aWMgX19pbmxpbmUgaW50Ci1mZWVuYWJsZWV4Y2VwdChpbnQgX19tYXNrKQotewotCWZlbnZfdCBfX29sZF9yLCBfX25ld19yOwotCi0JX19zdHhmc3IoJl9fb2xkX3IpOwotCV9fbmV3X3IgPSBfX29sZF9yIHwgKChfX21hc2sgJiBGRV9BTExfRVhDRVBUKSA8PCBfRlBVU1dfU0hJRlQpOwotCV9fbGR4ZnNyKF9fbmV3X3IpOwotCXJldHVybiAoKF9fb2xkX3IgPj4gX0ZQVVNXX1NISUZUKSAmIEZFX0FMTF9FWENFUFQpOwotfQotCi1zdGF0aWMgX19pbmxpbmUgaW50Ci1mZWRpc2FibGVleGNlcHQoaW50IF9fbWFzaykKLXsKLQlmZW52X3QgX19vbGRfciwgX19uZXdfcjsKLQotCV9fc3R4ZnNyKCZfX29sZF9yKTsKLQlfX25ld19yID0gX19vbGRfciAmIH4oKF9fbWFzayAmIEZFX0FMTF9FWENFUFQpIDw8IF9GUFVTV19TSElGVCk7Ci0JX19sZHhmc3IoX19uZXdfcik7Ci0JcmV0dXJuICgoX19vbGRfciA+PiBfRlBVU1dfU0hJRlQpICYgRkVfQUxMX0VYQ0VQVCk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZSBpbnQKLWZlZ2V0ZXhjZXB0KHZvaWQpCi17Ci0JZmVudl90IF9fcjsKLQotCV9fc3R4ZnNyKCZfX3IpOwotCXJldHVybiAoKF9fciAmIF9FTkFCTEVfTUFTSykgPj4gX0ZQVVNXX1NISUZUKTsKLX0KLQotI2VuZGlmIC8qIF9fQlNEX1ZJU0lCTEUgKi8KLQotX19FTkRfREVDTFMKLQotI2VuZGlmCS8qICFfRkVOVl9IXyAqLwpkaWZmIC0tZ2l0IGEvbGlibS9pc2luZi5jIGIvbGlibS9pc2luZi5jCmluZGV4IDJkYThmNTguLmM5MTdmMTYgMTAwNjQ0Ci0tLSBhL2xpYm0vaXNpbmYuYworKysgYi9saWJtL2lzaW5mLmMKQEAgLTI4LDcgKzI4LDcgQEAKIAogI2luY2x1ZGUgPG1hdGguaD4KICNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KLSNpbmNsdWRlICJzcmMvZnBtYXRoLmgiCisjaW5jbHVkZSAiZnBtYXRoLmgiCiAKIC8qCiAgKiBYWFggVGhlc2Ugcm91dGluZXMgYmVsb25nIGluIGxpYm0sIGJ1dCB0aGV5IG11c3QgcmVtYWluIGluIGxpYmMgZm9yCkBAIC02Niw0ICs2NiwzIEBACiAJcmV0dXJuICh1LmJpdHMuZXhwID09IDIwNDcgJiYgdS5iaXRzLm1hbmwgPT0gMCAmJiB1LmJpdHMubWFuaCA9PSAwKTsKICNlbmRpZgogfQotCmRpZmYgLS1naXQgYS9saWJtL21hbi9hY29zLjMgYi9saWJtL21hbi9hY29zLjMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlmMDNkNjAuLjAwMDAwMDAKLS0tIGEvbGlibS9tYW4vYWNvcy4zCisrKyAvZGV2L251bGwKQEAgLTEsOTIgKzAsMCBAQAotLlwiIENvcHlyaWdodCAoYykgMTk5MSBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLgotLlwiIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0uXCIKLS5cIiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS5cIiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLS5cIiBhcmUgbWV0OgotLlwiIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0uXCIgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLlwiIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0uXCIgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotLlwiICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0uXCIgMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCi0uXCIgICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgotLlwiCVRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIFVuaXZlcnNpdHkgb2YKLS5cIglDYWxpZm9ybmlhLCBCZXJrZWxleSBhbmQgaXRzIGNvbnRyaWJ1dG9ycy4KLS5cIiA0LiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotLlwiICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotLlwiICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLlwiCi0uXCIgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLS5cIiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLS5cIiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotLlwiIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotLlwiIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0uXCIgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLS5cIiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLS5cIiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotLlwiIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLS5cIiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0uXCIgU1VDSCBEQU1BR0UuCi0uXCIKLS5cIiAgICAgZnJvbTogQCgjKWFjb3MuMwk1LjEgKEJlcmtlbGV5KSA1LzIvOTEKLS5cIiAkRnJlZUJTRDogc3JjL2xpYi9tc3VuL21hbi9hY29zLjMsdiAxLjEzIDIwMDUvMDEvMTQgMjM6Mjg6MjggZGFzIEV4cCAkCi0uXCIKLS5EZCBKYW51YXJ5IDE0LCAyMDA1Ci0uRHQgQUNPUyAzCi0uT3MKLS5TaCBOQU1FCi0uTm0gYWNvcyAsCi0uTm0gYWNvc2YKLS5OZCBhcmMgY29zaW5lIGZ1bmN0aW9ucwotLlNoIExJQlJBUlkKLS5MYiBsaWJtCi0uU2ggU1lOT1BTSVMKLS5JbiBtYXRoLmgKLS5GdCBkb3VibGUKLS5GbiBhY29zICJkb3VibGUgeCIKLS5GdCBmbG9hdAotLkZuIGFjb3NmICJmbG9hdCB4IgotLlNoIERFU0NSSVBUSU9OCi1UaGUKLS5GbiBhY29zCi1hbmQgdGhlCi0uRm4gYWNvc2YKLWZ1bmN0aW9ucyBjb21wdXRlIHRoZSBwcmluY2lwYWwgdmFsdWUgb2YgdGhlIGFyYyBjb3NpbmUgb2YKLS5GYSB4IC4KLUEgZG9tYWluIGVycm9yIG9jY3VycyBmb3IgYXJndW1lbnRzIG5vdCBpbiB0aGUgcmFuZ2UKLS5CcSAtMSAsICsxIC4KLUZvciBhIGRpc2N1c3Npb24gb2YgZXJyb3IgZHVlIHRvIHJvdW5kb2ZmLCBzZWUKLS5YciBtYXRoIDMgLgotLlNoIFJFVFVSTiBWQUxVRVMKLVRoZQotLkZuIGFjb3MKLWFuZCB0aGUKLS5GbiBhY29zZgotZnVuY3Rpb25zIHJldHVybiB0aGUgYXJjIGNvc2luZSBpbiB0aGUgcmFuZ2UKLS5CcSAwICwgXCooUGkKLXJhZGlhbnMuCi1JZjoKLS5CZCAtdW5maWxsZWQgLW9mZnNldCBpbmRlbnQKLS5QZiBcJnwgTnMgQXIgeCBOcyBcJnwgPiAxICwKLS5FZAotLlBwCi0uRm4gYWNvcyB4Ci1yYWlzZXMgYW4gaW52YWxpZCBleGNlcHRpb24gYW5kIHJldHVybnMgYW4gXCooTmEuCi0uU2ggU0VFIEFMU08KLS5YciBhc2luIDMgLAotLlhyIGF0YW4gMyAsCi0uWHIgYXRhbjIgMyAsCi0uWHIgY29zIDMgLAotLlhyIGNvc2ggMyAsCi0uWHIgZmVudiAzICwKLS5YciBtYXRoIDMgLAotLlhyIHNpbiAzICwKLS5YciBzaW5oIDMgLAotLlhyIHRhbiAzICwKLS5YciB0YW5oIDMKLS5TaCBTVEFOREFSRFMKLVRoZQotLkZuIGFjb3MKLWZ1bmN0aW9uIGNvbmZvcm1zIHRvCi0uU3QgLWlzb0MgLgpkaWZmIC0tZ2l0IGEvbGlibS9tYW4vYWNvc2guMyBiL2xpYm0vbWFuL2Fjb3NoLjMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYyNTM0YWIuLjAwMDAwMDAKLS0tIGEvbGlibS9tYW4vYWNvc2guMworKysgL2Rldi9udWxsCkBAIC0xLDgyICswLDAgQEAKLS5cIiBDb3B5cmlnaHQgKGMpIDE5OTEgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLgotLlwiIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0uXCIKLS5cIiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS5cIiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLS5cIiBhcmUgbWV0OgotLlwiIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0uXCIgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLlwiIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0uXCIgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotLlwiICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0uXCIgMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCi0uXCIgICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgotLlwiCVRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIFVuaXZlcnNpdHkgb2YKLS5cIglDYWxpZm9ybmlhLCBCZXJrZWxleSBhbmQgaXRzIGNvbnRyaWJ1dG9ycy4KLS5cIiA0LiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotLlwiICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotLlwiICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLlwiCi0uXCIgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLS5cIiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLS5cIiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotLlwiIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotLlwiIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0uXCIgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLS5cIiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLS5cIiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotLlwiIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLS5cIiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0uXCIgU1VDSCBEQU1BR0UuCi0uXCIKLS5cIiAgICAgZnJvbTogQCgjKWFjb3NoLjMJNS4yIChCZXJrZWxleSkgNS82LzkxCi0uXCIgJEZyZWVCU0Q6IHNyYy9saWIvbXN1bi9tYW4vYWNvc2guMyx2IDEuMTEgMjAwNS8wMS8xNCAyMzoyODoyOCBkYXMgRXhwICQKLS5cIgotLkRkIEphbnVhcnkgMTQsIDIwMDUKLS5EdCBBQ09TSCAzCi0uT3MKLS5TaCBOQU1FCi0uTm0gYWNvc2ggLAotLk5tIGFjb3NoZgotLk5kIGludmVyc2UgaHlwZXJib2xpYyBjb3NpbmUgZnVuY3Rpb25zCi0uU2ggTElCUkFSWQotLkxiIGxpYm0KLS5TaCBTWU5PUFNJUwotLkluIG1hdGguaAotLkZ0IGRvdWJsZQotLkZuIGFjb3NoICJkb3VibGUgeCIKLS5GdCBmbG9hdAotLkZuIGFjb3NoZiAiZmxvYXQgeCIKLS5TaCBERVNDUklQVElPTgotVGhlCi0uRm4gYWNvc2gKLWFuZCB0aGUKLS5GbiBhY29zaGYKLWZ1bmN0aW9ucyBjb21wdXRlIHRoZSBpbnZlcnNlIGh5cGVyYm9saWMgY29zaW5lCi1vZiB0aGUgcmVhbAotYXJndW1lbnQKLS5BciB4IC4KLUZvciBhIGRpc2N1c3Npb24gb2YgZXJyb3IgZHVlIHRvIHJvdW5kb2ZmLCBzZWUKLS5YciBtYXRoIDMgLgotLlNoIFJFVFVSTiBWQUxVRVMKLVRoZQotLkZuIGFjb3NoCi1hbmQgdGhlCi0uRm4gYWNvc2hmCi1mdW5jdGlvbnMKLXJldHVybiB0aGUgaW52ZXJzZSBoeXBlcmJvbGljIGNvc2luZSBvZgotLkFyIHggLgotSWYgdGhlIGFyZ3VtZW50IGlzIGxlc3MgdGhhbiAxLAotLkZuIGFjb3NoCi1yYWlzZXMgYW4gaW52YWxpZCBleGNlcHRpb24gYW5kIHJldHVybnMgYW4gXCooTmEuCi0uU2ggU0VFIEFMU08KLS5YciBhc2luaCAzICwKLS5YciBhdGFuaCAzICwKLS5YciBleHAgMyAsCi0uWHIgZmVudiAzICwKLS5YciBtYXRoIDMKLS5TaCBISVNUT1JZCi1UaGUKLS5GbiBhY29zaAotZnVuY3Rpb24gYXBwZWFyZWQgaW4KLS5CeCA0LjMgLgpkaWZmIC0tZ2l0IGEvbGlibS9tYW4vYXNpbi4zIGIvbGlibS9tYW4vYXNpbi4zCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMDE4OTkwLi4wMDAwMDAwCi0tLSBhL2xpYm0vbWFuL2FzaW4uMworKysgL2Rldi9udWxsCkBAIC0xLDk0ICswLDAgQEAKLS5cIiBDb3B5cmlnaHQgKGMpIDE5OTEgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4KLS5cIiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLlwiCi0uXCIgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0uXCIgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0uXCIgYXJlIG1ldDoKLS5cIiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLlwiICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS5cIiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotLlwiICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLS5cIiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotLlwiIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQotLlwiICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKLS5cIglUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBVbml2ZXJzaXR5IG9mCi0uXCIJQ2FsaWZvcm5pYSwgQmVya2VsZXkgYW5kIGl0cyBjb250cmlidXRvcnMuCi0uXCIgNC4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLS5cIiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKLS5cIiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS5cIgotLlwiIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0uXCIgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0uXCIgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLS5cIiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLS5cIiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotLlwiIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0uXCIgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0uXCIgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLS5cIiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0uXCIgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotLlwiIFNVQ0ggREFNQUdFLgotLlwiCi0uXCIgICAgIGZyb206IEAoIylhc2luLjMJNS4xIChCZXJrZWxleSkgNS8yLzkxCi0uXCIgJEZyZWVCU0Q6IHNyYy9saWIvbXN1bi9tYW4vYXNpbi4zLHYgMS4xNSAyMDA1LzAxLzE0IDIzOjI4OjI4IGRhcyBFeHAgJAotLlwiCi0uRGQgSmFudWFyeSAxNCwgMjAwNQotLkR0IEFTSU4gMwotLk9zCi0uU2ggTkFNRQotLk5tIGFzaW4gLAotLk5tIGFzaW5mCi0uTmQgYXJjIHNpbmUgZnVuY3Rpb25zCi0uU2ggTElCUkFSWQotLkxiIGxpYm0KLS5TaCBTWU5PUFNJUwotLkluIG1hdGguaAotLkZ0IGRvdWJsZQotLkZuIGFzaW4gImRvdWJsZSB4IgotLkZ0IGZsb2F0Ci0uRm4gYXNpbmYgImZsb2F0IHgiCi0uU2ggREVTQ1JJUFRJT04KLVRoZQotLkZuIGFzaW4KLWFuZCB0aGUKLS5GbiBhc2luZgotZnVuY3Rpb25zIGNvbXB1dGUgdGhlIHByaW5jaXBhbCB2YWx1ZSBvZiB0aGUgYXJjIHNpbmUgb2YKLS5GYSB4IC4KLUEgZG9tYWluIGVycm9yIG9jY3VycyBmb3IgYXJndW1lbnRzIG5vdCBpbiB0aGUgcmFuZ2UKLS5CcSAtMSAsICsxIC4KLUZvciBhIGRpc2N1c3Npb24gb2YgZXJyb3IgZHVlIHRvIHJvdW5kb2ZmLCBzZWUKLS5YciBtYXRoIDMgLgotLlNoIFJFVFVSTiBWQUxVRVMKLVRoZQotLkZuIGFzaW4KLWFuZCB0aGUKLS5GbiBhc2luZgotZnVuY3Rpb25zIHJldHVybiB0aGUgYXJjIHNpbmUgaW4gdGhlIHJhbmdlCi0uQmsgLXdvcmRzCi0uQnEgLVwqKFBpLzIgLCArXCooUGkvMgotLkVrCi1yYWRpYW5zLgotSWY6Ci0uQmQgLXVuZmlsbGVkIC1vZmZzZXQgaW5kZW50Ci0uUGYgXCZ8IE5zIEFyIHggTnMgXCZ8ID4gMQotLkVkCi0uUHAKLS5GbiBhc2luIHgKLXJhaXNlcyBhbiBpbnZhbGlkIGV4Y2VwdGlvbiBhbmQgcmV0dXJucyBhbiBcKihOYS4KLS5TaCBTRUUgQUxTTwotLlhyIGFjb3MgMyAsCi0uWHIgYXRhbiAzICwKLS5YciBhdGFuMiAzICwKLS5YciBjb3MgMyAsCi0uWHIgY29zaCAzICwKLS5YciBmZW52IDMgLAotLlhyIG1hdGggMyAsCi0uWHIgc2luIDMgLAotLlhyIHNpbmggMyAsCi0uWHIgdGFuIDMgLAotLlhyIHRhbmggMwotLlNoIFNUQU5EQVJEUwotVGhlCi0uRm4gYXNpbgotZnVuY3Rpb24gY29uZm9ybXMgdG8KLS5TdCAtaXNvQyAuCmRpZmYgLS1naXQgYS9saWJtL21hbi9hc2luaC4zIGIvbGlibS9tYW4vYXNpbmguMwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmEwZDlhMC4uMDAwMDAwMAotLS0gYS9saWJtL21hbi9hc2luaC4zCisrKyAvZGV2L251bGwKQEAgLTEsNzggKzAsMCBAQAotLlwiIENvcHlyaWdodCAoYykgMTk4NSwgMTk5MSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuCi0uXCIgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS5cIgotLlwiIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLlwiIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotLlwiIGFyZSBtZXQ6Ci0uXCIgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS5cIiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0uXCIgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS5cIiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0uXCIgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLS5cIiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKLS5cIiAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6Ci0uXCIJVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgVW5pdmVyc2l0eSBvZgotLlwiCUNhbGlmb3JuaWEsIEJlcmtlbGV5IGFuZCBpdHMgY29udHJpYnV0b3JzLgotLlwiIDQuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0uXCIgICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0uXCIgICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0uXCIKLS5cIiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotLlwiIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotLlwiIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0uXCIgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0uXCIgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLS5cIiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotLlwiIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotLlwiIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0uXCIgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotLlwiIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLS5cIiBTVUNIIERBTUFHRS4KLS5cIgotLlwiICAgICBmcm9tOiBAKCMpYXNpbmguMwk2LjQgKEJlcmtlbGV5KSA1LzYvOTEKLS5cIiAkRnJlZUJTRDogc3JjL2xpYi9tc3VuL21hbi9hc2luaC4zLHYgMS4xMCAyMDAxLzEwLzEzIDEyOjIzOjIyIGJkZSBFeHAgJAotLlwiCi0uRGQgTWF5IDYsIDE5OTEKLS5EdCBBU0lOSCAzCi0uT3MKLS5TaCBOQU1FCi0uTm0gYXNpbmggLAotLk5tIGFzaW5oZgotLk5kIGludmVyc2UgaHlwZXJib2xpYyBzaW5lIGZ1bmN0aW9ucwotLlNoIExJQlJBUlkKLS5MYiBsaWJtCi0uU2ggU1lOT1BTSVMKLS5JbiBtYXRoLmgKLS5GdCBkb3VibGUKLS5GbiBhc2luaCAiZG91YmxlIHgiCi0uRnQgZmxvYXQKLS5GbiBhc2luaGYgImZsb2F0IHgiCi0uU2ggREVTQ1JJUFRJT04KLVRoZQotLkZuIGFzaW5oCi1hbmQgdGhlCi0uRm4gYXNpbmhmCi1mdW5jdGlvbnMgY29tcHV0ZSB0aGUgaW52ZXJzZSBoeXBlcmJvbGljIHNpbmUKLW9mIHRoZSByZWFsCi1hcmd1bWVudAotLkFyIHggLgotRm9yIGEgZGlzY3Vzc2lvbiBvZiBlcnJvciBkdWUgdG8gcm91bmRvZmYsIHNlZQotLlhyIG1hdGggMyAuCi0uU2ggUkVUVVJOIFZBTFVFUwotVGhlCi0uRm4gYXNpbmgKLWFuZCB0aGUKLS5GbiBhc2luaGYKLWZ1bmN0aW9ucwotcmV0dXJuIHRoZSBpbnZlcnNlIGh5cGVyYm9saWMgc2luZSBvZgotLkFyIHggLgotLlNoIFNFRSBBTFNPCi0uWHIgYWNvc2ggMyAsCi0uWHIgYXRhbmggMyAsCi0uWHIgZXhwIDMgLAotLlhyIG1hdGggMwotLlNoIEhJU1RPUlkKLVRoZQotLkZuIGFzaW5oCi1mdW5jdGlvbiBhcHBlYXJlZCBpbgotLkJ4IDQuMyAuCmRpZmYgLS1naXQgYS9saWJtL21hbi9hdGFuLjMgYi9saWJtL21hbi9hdGFuLjMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM0Y2VmZWQuLjAwMDAwMDAKLS0tIGEvbGlibS9tYW4vYXRhbi4zCisrKyAvZGV2L251bGwKQEAgLTEsODQgKzAsMCBAQAotLlwiIENvcHlyaWdodCAoYykgMTk5MSBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLgotLlwiIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0uXCIKLS5cIiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS5cIiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLS5cIiBhcmUgbWV0OgotLlwiIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0uXCIgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLlwiIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0uXCIgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotLlwiICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0uXCIgMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCi0uXCIgICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgotLlwiCVRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIFVuaXZlcnNpdHkgb2YKLS5cIglDYWxpZm9ybmlhLCBCZXJrZWxleSBhbmQgaXRzIGNvbnRyaWJ1dG9ycy4KLS5cIiA0LiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotLlwiICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotLlwiICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLlwiCi0uXCIgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLS5cIiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLS5cIiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotLlwiIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotLlwiIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0uXCIgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLS5cIiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLS5cIiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotLlwiIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLS5cIiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0uXCIgU1VDSCBEQU1BR0UuCi0uXCIKLS5cIiAgICAgZnJvbTogQCgjKWF0YW4uMwk1LjEgKEJlcmtlbGV5KSA1LzIvOTEKLS5cIiAkRnJlZUJTRDogc3JjL2xpYi9tc3VuL21hbi9hdGFuLjMsdiAxLjEwIDIwMDEvMTAvMTMgMTI6MjM6MjIgYmRlIEV4cCAkCi0uXCIKLS5EZCBNYXkgMiwgMTk5MQotLkR0IEFUQU4gMwotLk9zCi0uU2ggTkFNRQotLk5tIGF0YW4gLAotLk5tIGF0YW5mCi0uTmQgYXJjIHRhbmdlbnQgZnVuY3Rpb25zIG9mIG9uZSB2YXJpYWJsZQotLlNoIExJQlJBUlkKLS5MYiBsaWJtCi0uU2ggU1lOT1BTSVMKLS5JbiBtYXRoLmgKLS5GdCBkb3VibGUKLS5GbiBhdGFuICJkb3VibGUgeCIKLS5GdCBmbG9hdAotLkZuIGF0YW5mICJmbG9hdCB4IgotLlNoIERFU0NSSVBUSU9OCi1UaGUKLS5GbiBhdGFuCi1hbmQgdGhlCi0uRm4gYXRhbmYKLWZ1bmN0aW9ucyBjb21wdXRlIHRoZSBwcmluY2lwYWwgdmFsdWUgb2YgdGhlIGFyYyB0YW5nZW50IG9mCi0uRmEgeCAuCi1Gb3IgYSBkaXNjdXNzaW9uIG9mIGVycm9yIGR1ZSB0byByb3VuZG9mZiwgc2VlCi0uWHIgbWF0aCAzIC4KLS5TaCBSRVRVUk4gVkFMVUVTCi1UaGUKLS5GbiBhdGFuCi1hbmQgdGhlCi0uRm4gYXRhbmYKLWZ1bmN0aW9uIHJldHVybnMgdGhlIGFyYyB0YW5nZW50IGluIHRoZSByYW5nZQotLkJrIC13b3JkcwotLkJxIC1cKihQaS8yICwgK1wqKFBpLzIKLS5FawotcmFkaWFucy4KLS5TaCBTRUUgQUxTTwotLlhyIGFjb3MgMyAsCi0uWHIgYXNpbiAzICwKLS5YciBhdGFuMiAzICwKLS5YciBjb3MgMyAsCi0uWHIgY29zaCAzICwKLS5YciBtYXRoIDMgLAotLlhyIHNpbiAzICwKLS5YciBzaW5oIDMgLAotLlhyIHRhbiAzICwKLS5YciB0YW5oIDMKLS5TaCBTVEFOREFSRFMKLVRoZQotLkZuIGF0YW4KLWZ1bmN0aW9uIGNvbmZvcm1zIHRvCi0uU3QgLWlzb0MgLgpkaWZmIC0tZ2l0IGEvbGlibS9tYW4vYXRhbjIuMyBiL2xpYm0vbWFuL2F0YW4yLjMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQyMWUxN2QuLjAwMDAwMDAKLS0tIGEvbGlibS9tYW4vYXRhbjIuMworKysgL2Rldi9udWxsCkBAIC0xLDE4NyArMCwwIEBACi0uXCIgQ29weXJpZ2h0IChjKSAxOTkxIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuCi0uXCIgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS5cIgotLlwiIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLlwiIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotLlwiIGFyZSBtZXQ6Ci0uXCIgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS5cIiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0uXCIgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS5cIiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0uXCIgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLS5cIiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKLS5cIiAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6Ci0uXCIJVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgVW5pdmVyc2l0eSBvZgotLlwiCUNhbGlmb3JuaWEsIEJlcmtlbGV5IGFuZCBpdHMgY29udHJpYnV0b3JzLgotLlwiIDQuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0uXCIgICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0uXCIgICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0uXCIKLS5cIiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotLlwiIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotLlwiIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0uXCIgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0uXCIgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLS5cIiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotLlwiIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotLlwiIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0uXCIgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotLlwiIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLS5cIiBTVUNIIERBTUFHRS4KLS5cIgotLlwiICAgICBmcm9tOiBAKCMpYXRhbjIuMwk1LjEgKEJlcmtlbGV5KSA1LzIvOTEKLS5cIiAkRnJlZUJTRDogc3JjL2xpYi9tc3VuL21hbi9hdGFuMi4zLHYgMS4xNCAyMDA1LzAxLzI4IDIxOjEzOjM0IHJ1IEV4cCAkCi0uXCIKLS5EZCBKYW51YXJ5IDE0LCAyMDA1Ci0uRHQgQVRBTjIgMwotLk9zCi0uU2ggTkFNRQotLk5tIGF0YW4yICwKLS5ObSBhdGFuMmYKLS5OZCBhcmMgdGFuZ2VudCBmdW5jdGlvbnMgb2YgdHdvIHZhcmlhYmxlcwotLlNoIExJQlJBUlkKLS5MYiBsaWJtCi0uU2ggU1lOT1BTSVMKLS5JbiBtYXRoLmgKLS5GdCBkb3VibGUKLS5GbiBhdGFuMiAiZG91YmxlIHkiICJkb3VibGUgeCIKLS5GdCBmbG9hdAotLkZuIGF0YW4yZiAiZmxvYXQgeSIgImZsb2F0IHgiCi0uU2ggREVTQ1JJUFRJT04KLVRoZQotLkZuIGF0YW4yCi1hbmQgdGhlCi0uRm4gYXRhbjJmCi1mdW5jdGlvbnMgY29tcHV0ZSB0aGUgcHJpbmNpcGFsIHZhbHVlIG9mIHRoZSBhcmMgdGFuZ2VudCBvZgotLkZhIHkvIE5zIEFyIHggLAotdXNpbmcgdGhlIHNpZ25zIG9mIGJvdGggYXJndW1lbnRzIHRvIGRldGVybWluZSB0aGUgcXVhZHJhbnQgb2YKLXRoZSByZXR1cm4gdmFsdWUuCi0uU2ggUkVUVVJOIFZBTFVFUwotVGhlCi0uRm4gYXRhbjIKLWFuZCB0aGUKLS5GbiBhdGFuMmYKLWZ1bmN0aW9ucywgaWYgc3VjY2Vzc2Z1bCwKLXJldHVybiB0aGUgYXJjIHRhbmdlbnQgb2YKLS5GYSB5LyBOcyBBciB4Ci1pbiB0aGUgcmFuZ2UKLS5CayAtd29yZHMKLS5CcSBcJi0gTnMgXCooUGkgLCBcJisgTnMgXCooUGkKLS5FawotcmFkaWFucy4KLUhlcmUgYXJlIHNvbWUgb2YgdGhlIHNwZWNpYWwgY2FzZXM6Ci0uQmwgLWNvbHVtbiBhdGFuXyh5LHgpXzo9X19fXyAgc2lnbih5KV8oUGlfYXRhbjIoWHlfeFgpKV9fXwotLkl0IEZuIGF0YW4yIHkgeCBObyA6PSBUYQotLkZuIGF0YW4geS94IFRhCi1pZgotLkFyIHgKLT4gMCwKLS5JdCBUYSBzaWduKCBOcyBBciB5IE5zICkqKFwqKFBpIC0KLS5GbiBhdGFuICJcXCooQmF5L3hcXCooQmEiICkgVGEKLWlmCi0uQXIgeAotPCAwLAotLkl0IFRhCi0uTm8gMCBUYQotaWYgeCA9IHkgPSAwLCBvcgotLkl0IFRhCi0uUGYgc2lnbiggQXIgeSBOcyApKlxcKihQaS8yIFRhCi1pZgotLkFyIHgKLT0gMCBcKCE9Ci0uQXIgeSAuCi0uRWwKLS5TaCBOT1RFUwotVGhlIGZ1bmN0aW9uCi0uRm4gYXRhbjIKLWRlZmluZXMgImlmIHggPiAwLCIKLS5GbiBhdGFuMiAwIDAKLT0gMCBkZXNwaXRlIHRoYXQgcHJldmlvdXNseQotLkZuIGF0YW4yIDAgMAotbWF5IGhhdmUgZ2VuZXJhdGVkIGFuIGVycm9yIG1lc3NhZ2UuCi1UaGUgcmVhc29ucyBmb3IgYXNzaWduaW5nIGEgdmFsdWUgdG8KLS5GbiBhdGFuMiAwIDAKLWFyZSB0aGVzZToKLS5CbCAtZW51bSAtb2Zmc2V0IGluZGVudAotLkl0Ci1Qcm9ncmFtcyB0aGF0IHRlc3QgYXJndW1lbnRzIHRvIGF2b2lkIGNvbXB1dGluZwotLkZuIGF0YW4yIDAgMAotbXVzdCBiZSBpbmRpZmZlcmVudCB0byBpdHMgdmFsdWUuCi1Qcm9ncmFtcyB0aGF0IHJlcXVpcmUgaXQgdG8gYmUgaW52YWxpZCBhcmUgdnVsbmVyYWJsZQotdG8gZGl2ZXJzZSByZWFjdGlvbnMgdG8gdGhhdCBpbnZhbGlkaXR5IG9uIGRpdmVyc2UgY29tcHV0ZXIgc3lzdGVtcy4KLS5JdAotVGhlCi0uRm4gYXRhbjIKLWZ1bmN0aW9uIGlzIHVzZWQgbW9zdGx5IHRvIGNvbnZlcnQgZnJvbSByZWN0YW5ndWxhciAoeCx5KQotdG8gcG9sYXIKLS5pZiBuXAotKHIsdGhldGEpCi0uaWYgdFwKLShyLFwoKmgpCi1jb29yZGluYXRlcyB0aGF0IG11c3Qgc2F0aXNmeSB4ID0KLS5pZiBuXAotclwoKipjb3MgdGhldGEKLS5pZiB0XAotclwoKipjb3NcKCpoCi1hbmQgeSA9Ci0uaWYgblwKLXJcKCoqc2luIHRoZXRhLgotLmlmIHRcCi1yXCgqKnNpblwoKmguCi1UaGVzZSBlcXVhdGlvbnMgYXJlIHNhdGlzZmllZCB3aGVuICh4PTAseT0wKQotaXMgbWFwcGVkIHRvCi0uaWYgbiBcCi0ocj0wLHRoZXRhPTApLgotLmlmIHQgXAotKHI9MCxcKCpoPTApLgotSW4gZ2VuZXJhbCwgY29udmVyc2lvbnMgdG8gcG9sYXIgY29vcmRpbmF0ZXMKLXNob3VsZCBiZSBjb21wdXRlZCB0aHVzOgotLkJkIC11bmZpbGxlZCAtb2Zmc2V0IGluZGVudAotLmlmIG4gXHtcCi1yCTo9IGh5cG90KHgseSk7ICAuLi4gOj0gc3FydCh4XCgqKngreVwoKip5KQotdGhldGEJOj0gYXRhbjIoeSx4KS4KLS5cfQotLmlmIHQgXHtcCi1yCTo9IGh5cG90KHgseSk7ICAuLi4gOj0gXChzcih4XHVcczgyXHMxMFxkK3lcdVxzODJcczEwXGQpCi1cKCpoCTo9IGF0YW4yKHkseCkuCi0uXH0KLS5FZAotLkl0Ci1UaGUgZm9yZWdvaW5nIGZvcm11bGFzIG5lZWQgbm90IGJlIGFsdGVyZWQgdG8gY29wZSBpbiBhCi1yZWFzb25hYmxlIHdheSB3aXRoIHNpZ25lZCB6ZXJvcyBhbmQgaW5maW5pdGllcwotb24gYSBtYWNoaW5lIHRoYXQgY29uZm9ybXMgdG8KLS5UbiBJRUVFIDc1NCA7Ci10aGUgdmVyc2lvbnMgb2YKLS5YciBoeXBvdCAzCi1hbmQKLS5GbiBhdGFuMgotcHJvdmlkZWQgZm9yCi1zdWNoIGEgbWFjaGluZSBhcmUgZGVzaWduZWQgdG8gaGFuZGxlIGFsbCBjYXNlcy4KLVRoYXQgaXMgd2h5Ci0uRm4gYXRhbjIgXCgrLTAgXC0wCi09IFwoKy1cKihQaQotZm9yIGluc3RhbmNlLgotSW4gZ2VuZXJhbCB0aGUgZm9ybXVsYXMgYWJvdmUgYXJlIGVxdWl2YWxlbnQgdG8gdGhlc2U6Ci0uQmQgLXVuZmlsbGVkIC1vZmZzZXQgaW5kZW50Ci0uaWYgbiBcCi1yIDo9IHNxcnQoeFwoKip4K3lcKCoqeSk7IGlmIHIgPSAwIHRoZW4geCA6PSBjb3B5c2lnbigxLHgpOwotLmlmIHQgXAotciA6PSBcKHNyKHhcKCoqeCt5XCgqKnkpO1wwXDBpZiByID0gMCB0aGVuIHggOj0gY29weXNpZ24oMSx4KTsKLS5FZAotLkVsCi0uU2ggU0VFIEFMU08KLS5YciBhY29zIDMgLAotLlhyIGFzaW4gMyAsCi0uWHIgYXRhbiAzICwKLS5YciBjb3MgMyAsCi0uWHIgY29zaCAzICwKLS5YciBtYXRoIDMgLAotLlhyIHNpbiAzICwKLS5YciBzaW5oIDMgLAotLlhyIHRhbiAzICwKLS5YciB0YW5oIDMKLS5TaCBTVEFOREFSRFMKLVRoZQotLkZuIGF0YW4yCi1mdW5jdGlvbiBjb25mb3JtcyB0bwotLlN0IC1pc29DIC4KZGlmZiAtLWdpdCBhL2xpYm0vbWFuL2F0YW5oLjMgYi9saWJtL21hbi9hdGFuaC4zCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZGNjMDFhLi4wMDAwMDAwCi0tLSBhL2xpYm0vbWFuL2F0YW5oLjMKKysrIC9kZXYvbnVsbApAQCAtMSw4NSArMCwwIEBACi0uXCIgQ29weXJpZ2h0IChjKSAxOTg1LCAxOTkxIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4KLS5cIiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLlwiCi0uXCIgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0uXCIgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0uXCIgYXJlIG1ldDoKLS5cIiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLlwiICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS5cIiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotLlwiICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLS5cIiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotLlwiIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQotLlwiICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKLS5cIglUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBVbml2ZXJzaXR5IG9mCi0uXCIJQ2FsaWZvcm5pYSwgQmVya2VsZXkgYW5kIGl0cyBjb250cmlidXRvcnMuCi0uXCIgNC4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLS5cIiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKLS5cIiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS5cIgotLlwiIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0uXCIgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0uXCIgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLS5cIiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLS5cIiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotLlwiIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0uXCIgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0uXCIgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLS5cIiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0uXCIgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotLlwiIFNVQ0ggREFNQUdFLgotLlwiCi0uXCIgICAgIGZyb206IEAoIylhdGFuaC4zCTUuMiAoQmVya2VsZXkpIDUvNi85MQotLlwiICRGcmVlQlNEOiBzcmMvbGliL21zdW4vbWFuL2F0YW5oLjMsdiAxLjEzIDIwMDUvMDEvMjggMjE6MTQ6MTYgcnUgRXhwICQKLS5cIgotLkRkIEphbnVhcnkgMTQsIDIwMDUKLS5EdCBBVEFOSCAzCi0uT3MKLS5TaCBOQU1FCi0uTm0gYXRhbmggLAotLk5tIGF0YW5oZgotLk5kIGludmVyc2UgaHlwZXJib2xpYyB0YW5nZW50IGZ1bmN0aW9ucwotLlNoIExJQlJBUlkKLS5MYiBsaWJtCi0uU2ggU1lOT1BTSVMKLS5JbiBtYXRoLmgKLS5GdCBkb3VibGUKLS5GbiBhdGFuaCAiZG91YmxlIHgiCi0uRnQgZmxvYXQKLS5GbiBhdGFuaGYgImZsb2F0IHgiCi0uU2ggREVTQ1JJUFRJT04KLVRoZQotLkZuIGF0YW5oCi1hbmQgdGhlCi0uRm4gYXRhbmhmCi1mdW5jdGlvbnMgY29tcHV0ZSB0aGUgaW52ZXJzZSBoeXBlcmJvbGljIHRhbmdlbnQKLW9mIHRoZSByZWFsCi1hcmd1bWVudAotLkFyIHggLgotRm9yIGEgZGlzY3Vzc2lvbiBvZiBlcnJvciBkdWUgdG8gcm91bmRvZmYsIHNlZQotLlhyIG1hdGggMyAuCi0uU2ggUkVUVVJOIFZBTFVFUwotVGhlCi0uRm4gYXRhbmgKLWFuZCB0aGUKLS5GbiBhdGFuaGYKLWZ1bmN0aW9ucwotcmV0dXJuIHRoZSBpbnZlcnNlIGh5cGVyYm9saWMgdGFuZ2VudCBvZgotLkFyIHgKLWlmIHN1Y2Nlc3NmdWwuCi1JZiB0aGUgYXJndW1lbnQgaGFzIGFic29sdXRlIHZhbHVlIDEsIGEgZGl2aWRlLWJ5LXplcm8gZXhjZXB0aW9uCi1pcyByYWlzZWQgYW5kIGFuIGluZmluaXR5IGlzIHJldHVybmVkLgotSWYKLS5BciB8eHwKLT4gMSwgYW4gaW52YWxpZCBleGNlcHRpb24gaXMgcmFpc2VkIGFuZCBhbiBcKihOYSBpcyByZXR1cm5lZC4KLS5TaCBTRUUgQUxTTwotLlhyIGFjb3NoIDMgLAotLlhyIGFzaW5oIDMgLAotLlhyIGV4cCAzICwKLS5YciBmZW52IDMgLAotLlhyIG1hdGggMwotLlNoIEhJU1RPUlkKLVRoZQotLkZuIGF0YW5oCi1mdW5jdGlvbiBhcHBlYXJlZCBpbgotLkJ4IDQuMyAuCmRpZmYgLS1naXQgYS9saWJtL21hbi9jZWlsLjMgYi9saWJtL21hbi9jZWlsLjMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU1NzkwM2UuLjAwMDAwMDAKLS0tIGEvbGlibS9tYW4vY2VpbC4zCisrKyAvZGV2L251bGwKQEAgLTEsODIgKzAsMCBAQAotLlwiIENvcHlyaWdodCAoYykgMTk5MSBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLgotLlwiIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0uXCIKLS5cIiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS5cIiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLS5cIiBhcmUgbWV0OgotLlwiIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0uXCIgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLlwiIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0uXCIgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotLlwiICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0uXCIgMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCi0uXCIgICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgotLlwiCVRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIFVuaXZlcnNpdHkgb2YKLS5cIglDYWxpZm9ybmlhLCBCZXJrZWxleSBhbmQgaXRzIGNvbnRyaWJ1dG9ycy4KLS5cIiA0LiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotLlwiICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotLlwiICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLlwiCi0uXCIgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLS5cIiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLS5cIiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotLlwiIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotLlwiIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0uXCIgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLS5cIiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLS5cIiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotLlwiIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLS5cIiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0uXCIgU1VDSCBEQU1BR0UuCi0uXCIKLS5cIiAgICAgZnJvbTogQCgjKWNlaWwuMwk1LjEgKEJlcmtlbGV5KSA1LzIvOTEKLS5cIiAkRnJlZUJTRDogc3JjL2xpYi9tc3VuL21hbi9jZWlsLjMsdiAxLjE1IDIwMDUvMDEvMTMgMjA6MzM6NDIgc3RlZmFuZiBFeHAgJAotLlwiCi0uRGQgSmFudWFyeSAxMywgMjAwNQotLkR0IENFSUwgMwotLk9zCi0uU2ggTkFNRQotLk5tIGNlaWwgLAotLk5tIGNlaWxmICwKLS5ObSBjZWlsbAotLk5kIHNtYWxsZXN0IGludGVncmFsIHZhbHVlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB4Ci0uU2ggTElCUkFSWQotLkxiIGxpYm0KLS5TaCBTWU5PUFNJUwotLkluIG1hdGguaAotLkZ0IGRvdWJsZQotLkZuIGNlaWwgImRvdWJsZSB4IgotLkZ0IGZsb2F0Ci0uRm4gY2VpbGYgImZsb2F0IHgiCi0uRnQgImxvbmcgZG91YmxlIgotLkZuIGNlaWxsICJsb25nIGRvdWJsZSB4IgotLlNoIERFU0NSSVBUSU9OCi1UaGUKLS5GbiBjZWlsICwKLS5GbiBjZWlsZgotYW5kCi0uRm4gY2VpbGwKLWZ1bmN0aW9ucyByZXR1cm4gdGhlIHNtYWxsZXN0IGludGVncmFsIHZhbHVlCi1ncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8KLS5GYSB4ICwKLWV4cHJlc3NlZCBhcyBhIGZsb2F0aW5nLXBvaW50IG51bWJlci4KLS5TaCBTRUUgQUxTTwotLlhyIGFicyAzICwKLS5YciBmYWJzIDMgLAotLlhyIGZsb29yIDMgLAotLlhyIGllZWUgMyAsCi0uWHIgbWF0aCAzICwKLS5YciByaW50IDMgLAotLlhyIHJvdW5kIDMgLAotLlhyIHRydW5jIDMKLS5TaCBTVEFOREFSRFMKLVRoZQotLkZuIGNlaWwKLWZ1bmN0aW9uIGNvbmZvcm1zIHRvCi0uU3QgLWlzb0MgLgotVGhlCi0uRm4gY2VpbGYKLWFuZAotLkZuIGNlaWxsCi1mdW5jdGlvbnMgY29uZm9ybSB0bwotLlN0IC1pc29DLTk5IC4KZGlmZiAtLWdpdCBhL2xpYm0vbWFuL2NpbWFnLjMgYi9saWJtL21hbi9jaW1hZy4zCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNjllODQ4Li4wMDAwMDAwCi0tLSBhL2xpYm0vbWFuL2NpbWFnLjMKKysrIC9kZXYvbnVsbApAQCAtMSw5NiArMCwwIEBACi0uXCIgQ29weXJpZ2h0IChjKSAyMDA0IFN0ZWZhbiBGYXJmZWxlZGVyCi0uXCIgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS5cIgotLlwiIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLlwiIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotLlwiIGFyZSBtZXQ6Ci0uXCIgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS5cIiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0uXCIgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS5cIiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0uXCIgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLS5cIgotLlwiIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLS5cIiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLS5cIiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotLlwiIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0uXCIgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLS5cIiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotLlwiIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotLlwiIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0uXCIgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotLlwiIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLS5cIiBTVUNIIERBTUFHRS4KLS5cIgotLlwiICRGcmVlQlNEOiBzcmMvbGliL21zdW4vbWFuL2NpbWFnLjMsdiAxLjIgMjAwNS8wMS8xMyAxMDo0MzowMSBydSBFeHAgJAotLlwiCi0uRGQgQXVndXN0IDcsIDIwMDQKLS5EdCBDSU1BRyAzCi0uT3MKLS5TaCBOQU1FCi0uTm0gY2ltYWcgLCBjaW1hZ2YgLCBjaW1hZ2wgLAotLk5tIGNvbmogLCBjb25qZiAsIGNvbmpsICwKLS5ObSBjcmVhbCAsIGNyZWFsZiAsIGNyZWFsbAotLk5kICJmdW5jdGlvbnMgdG8gbWFuaXB1bGF0ZSBjb21wbGV4IG51bWJlcnMiCi0uU2ggTElCUkFSWQotLkxiIGxpYm0KLS5TaCBTWU5PUFNJUwotLkluIGNvbXBsZXguaAotLkZ0IGRvdWJsZQotLkZuIGNpbWFnICJkb3VibGUgY29tcGxleCB6IgotLkZ0IGZsb2F0Ci0uRm4gY2ltYWdmICJmbG9hdCBjb21wbGV4IHoiCi0uRnQgImxvbmcgZG91YmxlIgotLkZuIGNpbWFnbCAibG9uZyBkb3VibGUgY29tcGxleCB6IgotLkZ0ICJkb3VibGUgY29tcGxleCIKLS5GbiBjb25qICJkb3VibGUgY29tcGxleCB6IgotLkZ0ICJmbG9hdCBjb21wbGV4IgotLkZuIGNvbmpmICJmbG9hdCBjb21wbGV4IHoiCi0uRnQgImxvbmcgZG91YmxlIGNvbXBsZXgiCi0uRm4gY29uamwgImxvbmcgZG91YmxlIGNvbXBsZXggeiIKLS5GdCBkb3VibGUKLS5GbiBjcmVhbCAiZG91YmxlIGNvbXBsZXggeiIKLS5GdCBmbG9hdAotLkZuIGNyZWFsZiAiZmxvYXQgY29tcGxleCB6IgotLkZ0ICJsb25nIGRvdWJsZSIKLS5GbiBjcmVhbGwgImxvbmcgZG91YmxlIGNvbXBsZXggeiIKLS5TaCBERVNDUklQVElPTgotTGV0Ci0uU20gb2ZmCi0uRmEgYSArIGIgKiBFbSBpCi0uU20gb24KLWRlbm90ZSB0aGUgY29tcGxleCBudW1iZXIKLS5GYSB6IC4KLS5QcAotVGhlCi0uRm4gY2ltYWcKLWZ1bmN0aW9ucyByZXR1cm4gdGhlIGltYWdpbmFyeSBwYXJ0Ci0uRmEgYiAuCi0uUHAKLVRoZQotLkZuIGNvbmoKLWZ1bmN0aW9ucyByZXR1cm4gdGhlIGNvbXBsZXggY29uanVnYXRlCi0uU20gb2ZmCi0uRmEgYSAtIGIgKiBFbSBpIC4KLS5TbSBvbgotLlBwCi1UaGUKLS5GbiBjcmVhbAotZnVuY3Rpb25zIHJldHVybiB0aGUgcmVhbCBwYXJ0Ci0uRmEgYSAuCi0uU2ggU1RBTkRBUkRTCi1UaGUKLS5GbiBjaW1hZyAsCi0uRm4gY29uagotYW5kCi0uRm4gY3JlYWwKLWZ1bmN0aW9ucyBjb25mb3JtIHRvCi0uU3QgLWlzb0MtOTkgLgotLlNoIEhJU1RPUlkKLVRoZQotLkZuIGNpbWFnICwKLS5GbiBjb25qCi1hbmQKLS5GbiBjcmVhbAotZnVuY3Rpb25zIGZpcnN0IGFwcGVhcmVkIGluCi0uRnggNS4zIC4KZGlmZiAtLWdpdCBhL2xpYm0vbWFuL2NvcHlzaWduLjMgYi9saWJtL21hbi9jb3B5c2lnbi4zCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjM2NlM2RjLi4wMDAwMDAwCi0tLSBhL2xpYm0vbWFuL2NvcHlzaWduLjMKKysrIC9kZXYvbnVsbApAQCAtMSw5MCArMCwwIEBACi0uXCIgQ29weXJpZ2h0IChjKSAxOTg1LCAxOTkxIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4KLS5cIiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLlwiCi0uXCIgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0uXCIgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0uXCIgYXJlIG1ldDoKLS5cIiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLlwiICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS5cIiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotLlwiICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLS5cIiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotLlwiIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQotLlwiICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKLS5cIglUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBVbml2ZXJzaXR5IG9mCi0uXCIJQ2FsaWZvcm5pYSwgQmVya2VsZXkgYW5kIGl0cyBjb250cmlidXRvcnMuCi0uXCIgNC4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLS5cIiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKLS5cIiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS5cIgotLlwiIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0uXCIgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0uXCIgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLS5cIiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLS5cIiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotLlwiIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0uXCIgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0uXCIgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLS5cIiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0uXCIgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotLlwiIFNVQ0ggREFNQUdFLgotLlwiCi0uXCIgICAgIGZyb206IEAoIylpZWVlLjMJNi40IChCZXJrZWxleSkgNS82LzkxCi0uXCIgJEZyZWVCU0Q6IHNyYy9saWIvbXN1bi9tYW4vY29weXNpZ24uMyx2IDEuMSAyMDA1LzAxLzI3IDA1OjQ2OjE2IGRhcyBFeHAgJAotLlwiCi0uRGQgSmFudWFyeSAyNiwgMjAwNQotLkR0IENPUFlTSUdOIDMKLS5PcwotLlNoIE5BTUUKLS5ObSBjb3B5c2lnbiAsCi0uTm0gY29weXNpZ25mICwKLS5ObSBjb3B5c2lnbmwKLS5OZCBjb3B5IHNpZ24KLS5TaCBMSUJSQVJZCi0uTGIgbGlibQotLlNoIFNZTk9QU0lTCi0uSW4gbWF0aC5oCi0uRnQgZG91YmxlCi0uRm4gY29weXNpZ24gImRvdWJsZSB4IiAiZG91YmxlIHkiCi0uRnQgZmxvYXQKLS5GbiBjb3B5c2lnbmYgImZsb2F0IHgiICJmbG9hdCB5IgotLkZ0IGxvbmcgZG91YmxlCi0uRm4gY29weXNpZ25sICJsb25nIGRvdWJsZSB4IiAibG9uZyBkb3VibGUgeSIKLS5TaCBERVNDUklQVElPTgotVGhlCi0uRm4gY29weXNpZ24gLAotLkZuIGNvcHlzaWduZgotYW5kCi0uRm4gY29weXNpZ25sCi1mdW5jdGlvbnMKLXJldHVybgotLkZhIHgKLXdpdGggaXRzIHNpZ24gY2hhbmdlZCB0bwotLkZhIHkgTnMgJ3MgLgotLlNoIFNFRSBBTFNPCi0uWHIgZmFicyAzICwKLS5YciBmZGltIDMgLAotLlhyIGllZWUgMyAsCi0uWHIgbWF0aCAzCi0uU2ggU1RBTkRBUkRTCi1UaGUKLS5GbiBjb3B5c2lnbiAsCi0uRm4gY29weXNpZ25mICwKLWFuZAotLkZuIGNvcHlzaWdubAotcm91dGluZXMgY29uZm9ybSB0bwotLlN0IC1pc29DLTk5IC4KLVRoZXkgaW1wbGVtZW50IHRoZSBDb3B5c2lnbiBmdW5jdGlvbiByZWNvbW1lbmRlZCBieQotLlN0IC1pZWVlNzU0IC4KLS5TaCBISVNUT1JZCi1UaGUKLS5GbiBjb3B5c2lnbiAsCi0uRm4gY29weXNpZ25mICwKLWFuZAotLkZuIGNvcHlzaWdubAotZnVuY3Rpb25zIGFwcGVhcmVkIGluCi0uQnggNC4zICwKLS5GeCAyLjAgLAotYW5kCi0uRnggNS4zICwKLXJlc3BlY3RpdmVseS4KZGlmZiAtLWdpdCBhL2xpYm0vbWFuL2Nvcy4zIGIvbGlibS9tYW4vY29zLjMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhlMGJkOTEuLjAwMDAwMDAKLS0tIGEvbGlibS9tYW4vY29zLjMKKysrIC9kZXYvbnVsbApAQCAtMSw4MyArMCwwIEBACi0uXCIgQ29weXJpZ2h0IChjKSAxOTkxIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuCi0uXCIgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS5cIgotLlwiIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLlwiIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotLlwiIGFyZSBtZXQ6Ci0uXCIgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS5cIiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0uXCIgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS5cIiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0uXCIgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLS5cIiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKLS5cIiAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6Ci0uXCIJVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgVW5pdmVyc2l0eSBvZgotLlwiCUNhbGlmb3JuaWEsIEJlcmtlbGV5IGFuZCBpdHMgY29udHJpYnV0b3JzLgotLlwiIDQuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0uXCIgICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0uXCIgICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0uXCIKLS5cIiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotLlwiIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotLlwiIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0uXCIgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0uXCIgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLS5cIiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotLlwiIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotLlwiIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0uXCIgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotLlwiIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLS5cIiBTVUNIIERBTUFHRS4KLS5cIgotLlwiICAgICBmcm9tOiBAKCMpY29zLjMJNS4xIChCZXJrZWxleSkgNS8yLzkxCi0uXCIgJEZyZWVCU0Q6IHNyYy9saWIvbXN1bi9tYW4vY29zLjMsdiAxLjExIDIwMDEvMTAvMTMgMTI6MjM6MjMgYmRlIEV4cCAkCi0uXCIKLS5EZCBNYXkgMiwgMTk5MQotLkR0IENPUyAzCi0uT3MKLS5TaCBOQU1FCi0uTm0gY29zICwKLS5ObSBjb3NmCi0uTmQgY29zaW5lIGZ1bmN0aW9ucwotLlNoIExJQlJBUlkKLS5MYiBsaWJtCi0uU2ggU1lOT1BTSVMKLS5JbiBtYXRoLmgKLS5GdCBkb3VibGUKLS5GbiBjb3MgImRvdWJsZSB4IgotLkZ0IGZsb2F0Ci0uRm4gY29zZiAiZmxvYXQgeCIKLS5TaCBERVNDUklQVElPTgotVGhlCi0uRm4gY29zCi1hbmQgdGhlCi0uRm4gY29zZgotZnVuY3Rpb25zIGNvbXB1dGUgdGhlIGNvc2luZSBvZgotLkZhIHgKLShtZWFzdXJlZCBpbiByYWRpYW5zKS4KLUEgbGFyZ2UgbWFnbml0dWRlIGFyZ3VtZW50IG1heSB5aWVsZCBhIHJlc3VsdCB3aXRoIGxpdHRsZSBvciBubwotc2lnbmlmaWNhbmNlLgotRm9yIGEgZGlzY3Vzc2lvbiBvZiBlcnJvciBkdWUgdG8gcm91bmRvZmYsIHNlZQotLlhyIG1hdGggMyAuCi0uU2ggUkVUVVJOIFZBTFVFUwotVGhlCi0uRm4gY29zCi1hbmQgdGhlCi0uRm4gY29zZgotZnVuY3Rpb25zIHJldHVybiB0aGUgY29zaW5lIHZhbHVlLgotLlNoIFNFRSBBTFNPCi0uWHIgYWNvcyAzICwKLS5YciBhc2luIDMgLAotLlhyIGF0YW4gMyAsCi0uWHIgYXRhbjIgMyAsCi0uWHIgY29zaCAzICwKLS5YciBtYXRoIDMgLAotLlhyIHNpbiAzICwKLS5YciBzaW5oIDMgLAotLlhyIHRhbiAzICwKLS5YciB0YW5oIDMKLS5TaCBTVEFOREFSRFMKLVRoZQotLkZuIGNvcwotZnVuY3Rpb24gY29uZm9ybXMgdG8KLS5TdCAtaXNvQyAuCmRpZmYgLS1naXQgYS9saWJtL21hbi9jb3NoLjMgYi9saWJtL21hbi9jb3NoLjMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk0N2MzM2UuLjAwMDAwMDAKLS0tIGEvbGlibS9tYW4vY29zaC4zCisrKyAvZGV2L251bGwKQEAgLTEsNzIgKzAsMCBAQAotLlwiIENvcHlyaWdodCAoYykgMTk4OSwgMTk5MSBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLgotLlwiIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0uXCIKLS5cIiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS5cIiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLS5cIiBhcmUgbWV0OgotLlwiIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0uXCIgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLlwiIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0uXCIgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotLlwiICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0uXCIgMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCi0uXCIgICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgotLlwiCVRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIFVuaXZlcnNpdHkgb2YKLS5cIglDYWxpZm9ybmlhLCBCZXJrZWxleSBhbmQgaXRzIGNvbnRyaWJ1dG9ycy4KLS5cIiA0LiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotLlwiICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotLlwiICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLlwiCi0uXCIgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLS5cIiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLS5cIiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotLlwiIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotLlwiIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0uXCIgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLS5cIiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLS5cIiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotLlwiIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLS5cIiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0uXCIgU1VDSCBEQU1BR0UuCi0uXCIKLS5cIiAgICAgZnJvbTogQCgjKWNvc2guMwk1LjEgKEJlcmtlbGV5KSA1LzIvOTEKLS5cIiAkRnJlZUJTRDogc3JjL2xpYi9tc3VuL21hbi9jb3NoLjMsdiAxLjEyIDIwMDUvMDEvMTQgMjM6Mjg6MjggZGFzIEV4cCAkCi0uXCIKLS5EZCBKYW51YXJ5IDE0LCAyMDA1Ci0uRHQgQ09TSCAzCi0uT3MKLS5TaCBOQU1FCi0uTm0gY29zaCAsCi0uTm0gY29zaGYKLS5OZCBoeXBlcmJvbGljIGNvc2luZSBmdW5jdGlvbnMKLS5TaCBMSUJSQVJZCi0uTGIgbGlibQotLlNoIFNZTk9QU0lTCi0uSW4gbWF0aC5oCi0uRnQgZG91YmxlCi0uRm4gY29zaCAiZG91YmxlIHgiCi0uRnQgZmxvYXQKLS5GbiBjb3NoZiAiZmxvYXQgeCIKLS5TaCBERVNDUklQVElPTgotVGhlCi0uRm4gY29zaAotYW5kIHRoZQotLkZuIGNvc2hmCi1mdW5jdGlvbnMgY29tcHV0ZSB0aGUgaHlwZXJib2xpYyBjb3NpbmUgb2YKLS5GYSB4IC4KLS5TaCBTRUUgQUxTTwotLlhyIGFjb3MgMyAsCi0uWHIgYXNpbiAzICwKLS5YciBhdGFuIDMgLAotLlhyIGF0YW4yIDMgLAotLlhyIGNvcyAzICwKLS5YciBtYXRoIDMgLAotLlhyIHNpbiAzICwKLS5YciBzaW5oIDMgLAotLlhyIHRhbiAzICwKLS5YciB0YW5oIDMKLS5TaCBTVEFOREFSRFMKLVRoZQotLkZuIGNvc2gKLWZ1bmN0aW9uIGNvbmZvcm1zIHRvCi0uU3QgLWlzb0MgLgpkaWZmIC0tZ2l0IGEvbGlibS9tYW4vZXJmLjMgYi9saWJtL21hbi9lcmYuMwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODI0Nzg3Zi4uMDAwMDAwMAotLS0gYS9saWJtL21hbi9lcmYuMworKysgL2Rldi9udWxsCkBAIC0xLDk3ICswLDAgQEAKLS5cIiBDb3B5cmlnaHQgKGMpIDE5ODUsIDE5OTEgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLgotLlwiIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0uXCIKLS5cIiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS5cIiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLS5cIiBhcmUgbWV0OgotLlwiIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0uXCIgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLlwiIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0uXCIgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotLlwiICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0uXCIgMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCi0uXCIgICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgotLlwiCVRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIFVuaXZlcnNpdHkgb2YKLS5cIglDYWxpZm9ybmlhLCBCZXJrZWxleSBhbmQgaXRzIGNvbnRyaWJ1dG9ycy4KLS5cIiA0LiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotLlwiICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotLlwiICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLlwiCi0uXCIgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLS5cIiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLS5cIiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotLlwiIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotLlwiIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0uXCIgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLS5cIiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLS5cIiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotLlwiIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLS5cIiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0uXCIgU1VDSCBEQU1BR0UuCi0uXCIKLS5cIiAgICAgZnJvbTogQCgjKWVyZi4zCTYuNCAoQmVya2VsZXkpIDQvMjAvOTEKLS5cIiAkRnJlZUJTRDogc3JjL2xpYi9tc3VuL21hbi9lcmYuMyx2IDEuMTEgMjAwNC8wNy8wMiAyMzo1MjoyMCBydSBFeHAgJAotLlwiCi0uRGQgQXByaWwgMjAsIDE5OTEKLS5EdCBFUkYgMwotLk9zCi0uU2ggTkFNRQotLk5tIGVyZiAsCi0uTm0gZXJmZiAsCi0uTm0gZXJmYyAsCi0uTm0gZXJmY2YKLS5OZCBlcnJvciBmdW5jdGlvbiBvcGVyYXRvcnMKLS5TaCBMSUJSQVJZCi0uTGIgbGlibQotLlNoIFNZTk9QU0lTCi0uSW4gbWF0aC5oCi0uRnQgZG91YmxlCi0uRm4gZXJmICJkb3VibGUgeCIKLS5GdCBmbG9hdAotLkZuIGVyZmYgImZsb2F0IHgiCi0uRnQgZG91YmxlCi0uRm4gZXJmYyAiZG91YmxlIHgiCi0uRnQgZmxvYXQKLS5GbiBlcmZjZiAiZmxvYXQgeCIKLS5TaCBERVNDUklQVElPTgotVGhlc2UgZnVuY3Rpb25zIGNhbGN1bGF0ZSB0aGUgZXJyb3IgZnVuY3Rpb24gb2YKLS5GYSB4IC4KLS5QcAotVGhlCi0uRm4gZXJmCi1hbmQgdGhlCi0uRm4gZXJmZgotZnVuY3Rpb25zIGNhbGN1bGF0ZSB0aGUgZXJyb3IgZnVuY3Rpb24gb2YgeDsgd2hlcmUKLS5CZCAtcmFnZ2VkIC1vZmZzZXQgaW5kZW50Ci0uaWYgbiBce1wKLWVyZih4KSA9IDIvc3FydChwaSlcKCoqXHxpbnRlZ3JhbCBmcm9tIDAgdG8geCBvZiBleHAoXC10XCgqKnQpIGR0LgotXH0KLS5pZiB0IFx7XAotZXJmXHwoeCkgOj0KLSgyL1woc3JcKCpwKVx8XChpc1xkXHM4XHowXHMxMFx1XHVcczh4XHMxMFxkXHxleHAoXC10XHVcczgyXHMxMFxkKVx8ZHQuCi1cfQotLkVkCi0uUHAKLVRoZQotLkZuIGVyZmMKLWFuZCB0aGUKLS5GbiBlcmZjZgotZnVuY3Rpb25zIGNhbGN1bGF0ZSB0aGUgY29tcGxlbWVudGFyeSBlcnJvciBmdW5jdGlvbiBvZgotLkZhIHggOwotdGhhdCBpcwotLkZuIGVyZmMKLXN1YnRyYWN0cyB0aGUgcmVzdWx0IG9mIHRoZSBlcnJvciBmdW5jdGlvbgotLkZuIGVyZiB4Ci1mcm9tIDEuMC4KLVRoaXMgaXMgdXNlZnVsLCBzaW5jZSBmb3IgbGFyZ2UKLS5GYSB4Ci1wbGFjZXMgZGlzYXBwZWFyLgotLlNoIFNFRSBBTFNPCi0uWHIgbWF0aCAzCi0uU2ggSElTVE9SWQotVGhlCi0uRm4gZXJmCi1hbmQKLS5GbiBlcmZjCi1mdW5jdGlvbnMgYXBwZWFyZWQgaW4KLS5CeCA0LjMgLgpkaWZmIC0tZ2l0IGEvbGlibS9tYW4vZXhwLjMgYi9saWJtL21hbi9leHAuMwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjZhZWQ4Zi4uMDAwMDAwMAotLS0gYS9saWJtL21hbi9leHAuMworKysgL2Rldi9udWxsCkBAIC0xLDIzNiArMCwwIEBACi0uXCIgQ29weXJpZ2h0IChjKSAxOTg1LCAxOTkxIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4KLS5cIiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLlwiCi0uXCIgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0uXCIgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0uXCIgYXJlIG1ldDoKLS5cIiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLlwiICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS5cIiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotLlwiICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLS5cIiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotLlwiIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQotLlwiICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKLS5cIglUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBVbml2ZXJzaXR5IG9mCi0uXCIJQ2FsaWZvcm5pYSwgQmVya2VsZXkgYW5kIGl0cyBjb250cmlidXRvcnMuCi0uXCIgNC4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLS5cIiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKLS5cIiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS5cIgotLlwiIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0uXCIgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0uXCIgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLS5cIiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLS5cIiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotLlwiIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0uXCIgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0uXCIgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLS5cIiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0uXCIgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotLlwiIFNVQ0ggREFNQUdFLgotLlwiCi0uXCIgICAgIGZyb206IEAoIylleHAuMwk2LjEyIChCZXJrZWxleSkgNy8zMS85MQotLlwiICRGcmVlQlNEOiBzcmMvbGliL21zdW4vbWFuL2V4cC4zLHYgMS4yMiAyMDA1LzA0LzA1IDAyOjU3OjI4IGRhcyBFeHAgJAotLlwiCi0uRGQgQXByaWwgNSwgMjAwNQotLkR0IEVYUCAzCi0uT3MKLS5TaCBOQU1FCi0uTm0gZXhwICwKLS5ObSBleHBmICwKLS5cIiBUaGUgc29ydGluZyBlcnJvciBpcyBpbnRlbnRpb25hbC4gIGV4cCBhbmQgZXhwZiBzaG91bGQgYmUgYWRqYWNlbnQuCi0uTm0gZXhwMiAsCi0uTm0gZXhwMmYgLAotLk5tIGV4cG0xICwKLS5ObSBleHBtMWYgLAotLk5tIGxvZyAsCi0uTm0gbG9nZiAsCi0uTm0gbG9nMTAgLAotLk5tIGxvZzEwZiAsCi0uTm0gbG9nMXAgLAotLk5tIGxvZzFwZiAsCi0uTm0gcG93ICwKLS5ObSBwb3dmCi0uTmQgZXhwb25lbnRpYWwsIGxvZ2FyaXRobSwgcG93ZXIgZnVuY3Rpb25zCi0uU2ggTElCUkFSWQotLkxiIGxpYm0KLS5TaCBTWU5PUFNJUwotLkluIG1hdGguaAotLkZ0IGRvdWJsZQotLkZuIGV4cCAiZG91YmxlIHgiCi0uRnQgZmxvYXQKLS5GbiBleHBmICJmbG9hdCB4IgotLkZ0IGRvdWJsZQotLkZuIGV4cDIgImRvdWJsZSB4IgotLkZ0IGZsb2F0Ci0uRm4gZXhwMmYgImZsb2F0IHgiCi0uRnQgZG91YmxlCi0uRm4gZXhwbTEgImRvdWJsZSB4IgotLkZ0IGZsb2F0Ci0uRm4gZXhwbTFmICJmbG9hdCB4IgotLkZ0IGRvdWJsZQotLkZuIGxvZyAiZG91YmxlIHgiCi0uRnQgZmxvYXQKLS5GbiBsb2dmICJmbG9hdCB4IgotLkZ0IGRvdWJsZQotLkZuIGxvZzEwICJkb3VibGUgeCIKLS5GdCBmbG9hdAotLkZuIGxvZzEwZiAiZmxvYXQgeCIKLS5GdCBkb3VibGUKLS5GbiBsb2cxcCAiZG91YmxlIHgiCi0uRnQgZmxvYXQKLS5GbiBsb2cxcGYgImZsb2F0IHgiCi0uRnQgZG91YmxlCi0uRm4gcG93ICJkb3VibGUgeCIgImRvdWJsZSB5IgotLkZ0IGZsb2F0Ci0uRm4gcG93ZiAiZmxvYXQgeCIgImZsb2F0IHkiCi0uU2ggREVTQ1JJUFRJT04KLVRoZQotLkZuIGV4cAotYW5kIHRoZQotLkZuIGV4cGYKLWZ1bmN0aW9ucyBjb21wdXRlIHRoZSBiYXNlCi0uTXMgZQotZXhwb25lbnRpYWwgdmFsdWUgb2YgdGhlIGdpdmVuIGFyZ3VtZW50Ci0uRmEgeCAuCi0uUHAKLVRoZQotLkZuIGV4cDIKLWFuZCB0aGUKLS5GbiBleHAyZgotZnVuY3Rpb25zIGNvbXB1dGUgdGhlIGJhc2UgMiBleHBvbmVudGlhbCBvZiB0aGUgZ2l2ZW4gYXJndW1lbnQKLS5GYSB4IC4KLS5QcAotVGhlCi0uRm4gZXhwbTEKLWFuZCB0aGUKLS5GbiBleHBtMWYKLWZ1bmN0aW9ucyBjb21wdXRlIHRoZSB2YWx1ZSBleHAoeClcLTEgYWNjdXJhdGVseSBldmVuIGZvciB0aW55IGFyZ3VtZW50Ci0uRmEgeCAuCi0uUHAKLVRoZQotLkZuIGxvZwotYW5kIHRoZQotLkZuIGxvZ2YKLWZ1bmN0aW9ucyBjb21wdXRlIHRoZSB2YWx1ZSBvZiB0aGUgbmF0dXJhbCBsb2dhcml0aG0gb2YgYXJndW1lbnQKLS5GYSB4IC4KLS5QcAotVGhlCi0uRm4gbG9nMTAKLWFuZCB0aGUKLS5GbiBsb2cxMGYKLWZ1bmN0aW9ucyBjb21wdXRlIHRoZSB2YWx1ZSBvZiB0aGUgbG9nYXJpdGhtIG9mIGFyZ3VtZW50Ci0uRmEgeAotdG8gYmFzZSAxMC4KLS5QcAotVGhlCi0uRm4gbG9nMXAKLWFuZCB0aGUKLS5GbiBsb2cxcGYKLWZ1bmN0aW9ucyBjb21wdXRlCi10aGUgdmFsdWUgb2YgbG9nKDEreCkgYWNjdXJhdGVseSBldmVuIGZvciB0aW55IGFyZ3VtZW50Ci0uRmEgeCAuCi0uUHAKLVRoZQotLkZuIHBvdwotYW5kIHRoZQotLkZuIHBvd2YKLWZ1bmN0aW9ucyBjb21wdXRlIHRoZSB2YWx1ZQotb2YKLS5BciB4Ci10byB0aGUgZXhwb25lbnQKLS5BciB5IC4KLS5TaCBFUlJPUiAoZHVlIHRvIFJvdW5kb2ZmIGV0Yy4pCi1UaGUgdmFsdWVzIG9mCi0uRm4gZXhwIDAgLAotLkZuIGV4cG0xIDAgLAotLkZuIGV4cDIgaW50ZWdlciAsCi1hbmQKLS5GbiBwb3cgaW50ZWdlciBpbnRlZ2VyCi1hcmUgZXhhY3QgcHJvdmlkZWQgdGhhdCB0aGV5IGFyZSByZXByZXNlbnRhYmxlLgotLlwiIFhYWCBJcyB0aGlzIHJlYWxseSB0cnVlIGZvciBwb3coKT8KLU90aGVyd2lzZSB0aGUgZXJyb3IgaW4gdGhlc2UgZnVuY3Rpb25zIGlzIGdlbmVyYWxseSBiZWxvdyBvbmUKLS5FbSB1bHAgLgotLlNoIFJFVFVSTiBWQUxVRVMKLVRoZXNlIGZ1bmN0aW9ucyB3aWxsIHJldHVybiB0aGUgYXBwcm9wcmlhdGUgY29tcHV0YXRpb24gdW5sZXNzIGFuIGVycm9yCi1vY2N1cnMgb3IgYW4gYXJndW1lbnQgaXMgb3V0IG9mIHJhbmdlLgotVGhlIGZ1bmN0aW9ucwotLkZuIHBvdyB4IHkKLWFuZAotLkZuIHBvd2YgeCB5Ci1yYWlzZSBhbiBpbnZhbGlkIGV4Y2VwdGlvbiBhbmQgcmV0dXJuIGFuIFwqKE5hIGlmCi0uRmEgeAotPCAwIGFuZAotLkZhIHkKLWlzIG5vdCBhbiBpbnRlZ2VyLgotQW4gYXR0ZW1wdCB0byB0YWtlIHRoZSBsb2dhcml0aG0gb2YgXCooUG0wIHdpbGwgcmVzdWx0IGluCi1hIGRpdmlkZS1ieS16ZXJvIGV4Y2VwdGlvbiwgYW5kIGFuIGluZmluaXR5IHdpbGwgYmUgcmV0dXJuZWQuCi1BbiBhdHRlbXB0IHRvIHRha2UgdGhlIGxvZ2FyaXRobSBvZiBhIG5lZ2F0aXZlIG51bWJlciB3aWxsCi1yZXN1bHQgaW4gYW4gaW52YWxpZCBleGNlcHRpb24sIGFuZCBhbiBcKihOYSB3aWxsIGJlIGdlbmVyYXRlZC4KLS5TaCBOT1RFUwotVGhlIGZ1bmN0aW9ucyBleHAoeClcLTEgYW5kIGxvZygxK3gpIGFyZSBjYWxsZWQKLWV4cG0xIGFuZCBsb2dwMSBpbgotLlRuIEJBU0lDCi1vbiB0aGUgSGV3bGV0dFwtUGFja2FyZAotLlRuIEhQIE5zIFwtNzFCCi1hbmQKLS5UbiBBUFBMRQotTWFjaW50b3NoLAotLlRuIEVYUDEKLWFuZAotLlRuIExOMQotaW4gUGFzY2FsLCBleHAxIGFuZCBsb2cxIGluIEMKLW9uCi0uVG4gQVBQTEUKLU1hY2ludG9zaGVzLCB3aGVyZSB0aGV5IGhhdmUgYmVlbiBwcm92aWRlZCB0byBtYWtlCi1zdXJlIGZpbmFuY2lhbCBjYWxjdWxhdGlvbnMgb2YgKCgxK3gpKipuXC0xKS94LCBuYW1lbHkKLWV4cG0xKG5cKCoqbG9nMXAoeCkpL3gsIHdpbGwgYmUgYWNjdXJhdGUgd2hlbiB4IGlzIHRpbnkuCi1UaGV5IGFsc28gcHJvdmlkZSBhY2N1cmF0ZSBpbnZlcnNlIGh5cGVyYm9saWMgZnVuY3Rpb25zLgotLlBwCi1UaGUgZnVuY3Rpb24KLS5GbiBwb3cgeCAwCi1yZXR1cm5zIHgqKjAgPSAxIGZvciBhbGwgeCBpbmNsdWRpbmcgeCA9IDAsIFwqKElmLCBhbmQgXCooTmEgLgotUHJldmlvdXMgaW1wbGVtZW50YXRpb25zIG9mIHBvdyBtYXkKLWhhdmUgZGVmaW5lZCB4KiowIHRvIGJlIHVuZGVmaW5lZCBpbiBzb21lIG9yIGFsbCBvZiB0aGVzZQotY2FzZXMuCi1IZXJlIGFyZSByZWFzb25zIGZvciByZXR1cm5pbmcgeCoqMCA9IDEgYWx3YXlzOgotLkJsIC1lbnVtIC13aWR0aCBpbmRlbnQKLS5JdAotQW55IHByb2dyYW0gdGhhdCBhbHJlYWR5IHRlc3RzIHdoZXRoZXIgeCBpcyB6ZXJvIChvcgotaW5maW5pdGUgb3IgXCooTmEpIGJlZm9yZSBjb21wdXRpbmcgeCoqMCBjYW5ub3QgY2FyZQotd2hldGhlciAwKiowID0gMSBvciBub3QuCi1BbnkgcHJvZ3JhbSB0aGF0IGRlcGVuZHMKLXVwb24gMCoqMCB0byBiZSBpbnZhbGlkIGlzIGR1YmlvdXMgYW55d2F5IHNpbmNlIHRoYXQKLWV4cHJlc3Npb24ncyBtZWFuaW5nIGFuZCwgaWYgaW52YWxpZCwgaXRzIGNvbnNlcXVlbmNlcwotdmFyeSBmcm9tIG9uZSBjb21wdXRlciBzeXN0ZW0gdG8gYW5vdGhlci4KLS5JdAotU29tZSBBbGdlYnJhIHRleHRzIChlLmcuXCYgU2lnbGVyJ3MpIGRlZmluZSB4KiowID0gMSBmb3IKLWFsbCB4LCBpbmNsdWRpbmcgeCA9IDAuCi1UaGlzIGlzIGNvbXBhdGlibGUgd2l0aCB0aGUgY29udmVudGlvbiB0aGF0IGFjY2VwdHMgYVswXQotYXMgdGhlIHZhbHVlIG9mIHBvbHlub21pYWwKLS5CZCAtbGl0ZXJhbCAtb2Zmc2V0IGluZGVudAotcCh4KSA9IGFbMF1cKCoqeCoqMCArIGFbMV1cKCoqeCoqMSArIGFbMl1cKCoqeCoqMiArLi4uKyBhW25dXCgqKngqKm4KLS5FZAotLlBwCi1hdCB4ID0gMCByYXRoZXIgdGhhbiByZWplY3QgYVswXVwoKiowKiowIGFzIGludmFsaWQuCi0uSXQKLUFuYWx5c3RzIHdpbGwgYWNjZXB0IDAqKjAgPSAxIGRlc3BpdGUgdGhhdCB4Kip5IGNhbgotYXBwcm9hY2ggYW55dGhpbmcgb3Igbm90aGluZyBhcyB4IGFuZCB5IGFwcHJvYWNoIDAKLWluZGVwZW5kZW50bHkuCi1UaGUgcmVhc29uIGZvciBzZXR0aW5nIDAqKjAgPSAxIGFueXdheSBpcyB0aGlzOgotLkJkIC1yYWdnZWQgLW9mZnNldCBpbmRlbnQKLUlmIHgoeikgYW5kIHkoeikgYXJlCi0uRW0gYW55Ci1mdW5jdGlvbnMgYW5hbHl0aWMgKGV4cGFuZGFibGUKLWluIHBvd2VyIHNlcmllcykgaW4geiBhcm91bmQgeiA9IDAsIGFuZCBpZiB0aGVyZQoteCgwKSA9IHkoMCkgPSAwLCB0aGVuIHgoeikqKnkoeikgXCgtPiAxIGFzIHogXCgtPiAwLgotLkVkCi0uSXQKLUlmIDAqKjAgPSAxLCB0aGVuCi1cKihJZioqMCA9IDEvMCoqMCA9IDEgdG9vOyBhbmQKLXRoZW4gXCooTmEqKjAgPSAxIHRvbyBiZWNhdXNlIHgqKjAgPSAxIGZvciBhbGwgZmluaXRlCi1hbmQgaW5maW5pdGUgeCwgaS5lLiwgaW5kZXBlbmRlbnRseSBvZiB4LgotLkVsCi0uU2ggU0VFIEFMU08KLS5YciBmZW52IDMgLAotLlhyIG1hdGggMwpkaWZmIC0tZ2l0IGEvbGlibS9tYW4vZmFicy4zIGIvbGlibS9tYW4vZmFicy4zCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NmIzYTIzLi4wMDAwMDAwCi0tLSBhL2xpYm0vbWFuL2ZhYnMuMworKysgL2Rldi9udWxsCkBAIC0xLDg3ICswLDAgQEAKLS5cIiBDb3B5cmlnaHQgKGMpIDE5OTEgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4KLS5cIiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLlwiCi0uXCIJQCgjKWZhYnMuMwk1LjEgKEJlcmtlbGV5KSA1LzIvOTEKLS5cIiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS5cIiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLS5cIiBhcmUgbWV0OgotLlwiIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0uXCIgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLlwiIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0uXCIgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotLlwiICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0uXCIgMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCi0uXCIgICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgotLlwiCVRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIFVuaXZlcnNpdHkgb2YKLS5cIglDYWxpZm9ybmlhLCBCZXJrZWxleSBhbmQgaXRzIGNvbnRyaWJ1dG9ycy4KLS5cIiA0LiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotLlwiICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotLlwiICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLlwiCi0uXCIgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLS5cIiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLS5cIiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotLlwiIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotLlwiIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0uXCIgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLS5cIiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLS5cIiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotLlwiIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLS5cIiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0uXCIgU1VDSCBEQU1BR0UuCi0uXCIKLS5cIiAgICAgZnJvbTogQCgjKWZhYnMuMwk1LjEgKEJlcmtlbGV5KSA1LzIvOTEKLS5cIiAkRnJlZUJTRDogc3JjL2xpYi9tc3VuL21hbi9mYWJzLjMsdiAxLjExIDIwMDQvMDcvMDEgMTg6MjA6NTcgcnUgRXhwICQKLS5cIgotLkRkIE9jdG9iZXIgMjUsIDIwMDMKLS5EdCBGQUJTIDMKLS5PcwotLlNoIE5BTUUKLS5ObSBmYWJzICwKLS5ObSBmYWJzZiAsCi0uTm0gZmFic2wKLS5OZCBmbG9hdGluZy1wb2ludCBhYnNvbHV0ZSB2YWx1ZSBmdW5jdGlvbnMKLS5TaCBMSUJSQVJZCi0uTGIgbGlibQotLlNoIFNZTk9QU0lTCi0uSW4gbWF0aC5oCi0uRnQgZG91YmxlCi0uRm4gZmFicyAiZG91YmxlIHgiCi0uRnQgZmxvYXQKLS5GbiBmYWJzZiAiZmxvYXQgeCIKLS5GdCBsb25nIGRvdWJsZQotLkZuIGZhYnNsICJsb25nIGRvdWJsZSB4IgotLlNoIERFU0NSSVBUSU9OCi1UaGUKLS5GbiBmYWJzICwKLS5GbiBmYWJzZgotYW5kCi0uRm4gZmFic2wKLWZ1bmN0aW9ucyBjb21wdXRlIHRoZSBhYnNvbHV0ZSB2YWx1ZSBvZiBhIGZsb2F0aW5nLXBvaW50IG51bWJlcgotLkZhIHggLgotLlNoIFJFVFVSTiBWQUxVRVMKLVRoZQotLkZuIGZhYnMgLAotLkZuIGZhYnNmCi1hbmQKLS5GbiBmYWJzbAotZnVuY3Rpb25zIHJldHVybiB0aGUgYWJzb2x1dGUgdmFsdWUgb2YKLS5GYSB4IC4KLS5TaCBTRUUgQUxTTwotLlhyIGFicyAzICwKLS5YciBjZWlsIDMgLAotLlhyIGZsb29yIDMgLAotLlhyIGllZWUgMyAsCi0uWHIgbWF0aCAzICwKLS5YciByaW50IDMKLS5TaCBTVEFOREFSRFMKLVRoZQotLkZuIGZhYnMKLWZ1bmN0aW9uIGNvbmZvcm1zIHRvCi0uU3QgLWlzb0MgLgotVGhlCi0uRm4gZmFic2YKLWFuZAotLkZuIGZhYnNsCi1mdW5jdGlvbnMgY29uZm9ybSB0bwotLlN0IC1pc29DLTk5IC4KZGlmZiAtLWdpdCBhL2xpYm0vbWFuL2ZkaW0uMyBiL2xpYm0vbWFuL2ZkaW0uMwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2E0ZTVlYy4uMDAwMDAwMAotLS0gYS9saWJtL21hbi9mZGltLjMKKysrIC9kZXYvbnVsbApAQCAtMSw4NiArMCwwIEBACi0uXCIgQ29weXJpZ2h0IChjKSAyMDA0IERhdmlkIFNjaHVsdHogPGRhc0BGcmVlQlNELm9yZz4KLS5cIiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLlwiCi0uXCIgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0uXCIgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0uXCIgYXJlIG1ldDoKLS5cIiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLlwiICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS5cIiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotLlwiICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLS5cIiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotLlwiCi0uXCIgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotLlwiIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotLlwiIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0uXCIgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLS5cIiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotLlwiIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0uXCIgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0uXCIgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLS5cIiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0uXCIgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotLlwiIFNVQ0ggREFNQUdFLgotLlwiCi0uXCIgJEZyZWVCU0Q6IHNyYy9saWIvbXN1bi9tYW4vZmRpbS4zLHYgMS4xIDIwMDQvMDYvMzAgMDc6MDQ6MDEgZGFzIEV4cCAkCi0uXCIKLS5EZCBKdW5lIDI5LCAyMDA0Ci0uRHQgRkRJTSAzCi0uT3MKLS5TaCBOQU1FCi0uTm0gZmRpbSAsCi0uTm0gZmRpbWYgLAotLk5tIGZkaW1sCi0uTmQgcG9zaXRpdmUgZGlmZmVyZW5jZSBmdW5jdGlvbnMKLS5TaCBMSUJSQVJZCi0uTGIgbGlibQotLlNoIFNZTk9QU0lTCi0uSW4gbWF0aC5oCi0uRnQgZG91YmxlCi0uRm4gZmRpbSAiZG91YmxlIHgiICJkb3VibGUgeSIKLS5GdCBmbG9hdAotLkZuIGZkaW1mICJmbG9hdCB4IiAiZmxvYXQgeSIKLS5GdCBsb25nIGRvdWJsZQotLkZuIGZkaW1sICJsb25nIGRvdWJsZSB4IiAibG9uZyBkb3VibGUgeSIKLS5TaCBERVNDUklQVElPTgotVGhlCi0uRm4gZmRpbSAsCi0uRm4gZmRpbWYgLAotYW5kCi0uRm4gZmRpbWwKLWZ1bmN0aW9ucyByZXR1cm4gdGhlIHBvc2l0aXZlIGRpZmZlcmVuY2UgYmV0d2VlbgotLkZhIHgKLWFuZAotLkZhIHkgLgotVGhhdCBpcywgaWYKLS5GYSB4XC0gTnMgRmEgeQotaXMgcG9zaXRpdmUsIHRoZW4KLS5GYSB4XC0gTnMgRmEgeQotaXMgcmV0dXJuZWQuCi1JZiBlaXRoZXIKLS5GYSB4Ci1vcgotLkZhIHkKLWlzIGFuIFwqKE5hLCB0aGVuIGFuIFwqKE5hIGlzIHJldHVybmVkLgotT3RoZXJ3aXNlLCB0aGUgcmVzdWx0IGlzCi0uTGkgKzAuMCAuCi0uUHAKLU92ZXJmbG93IG9yIHVuZGVyZmxvdyBtYXkgb2NjdXIgaWZmIHRoZSBleGFjdCByZXN1bHQgaXMgbm90Ci1yZXByZXNlbnRhYmxlIGluIHRoZSByZXR1cm4gdHlwZS4KLU5vIG90aGVyIGV4Y2VwdGlvbnMgYXJlIHJhaXNlZC4KLS5TaCBTRUUgQUxTTwotLlhyIGZhYnMgMyAsCi0uWHIgZm1heCAzICwKLS5YciBmbWluIDMgLAotLlhyIG1hdGggMwotLlNoIFNUQU5EQVJEUwotVGhlCi0uRm4gZmRpbSAsCi0uRm4gZmRpbWYgLAotYW5kCi0uRm4gZmRpbWwKLWZ1bmN0aW9ucyBjb25mb3JtIHRvCi0uU3QgLWlzb0MtOTkgLgotLlNoIEhJU1RPUlkKLVRoZXNlIHJvdXRpbmVzIGZpcnN0IGFwcGVhcmVkIGluCi0uRnggNS4zIC4KZGlmZiAtLWdpdCBhL2xpYm0vbWFuL2ZlY2xlYXJleGNlcHQuMyBiL2xpYm0vbWFuL2ZlY2xlYXJleGNlcHQuMwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDczZGU2Ny4uMDAwMDAwMAotLS0gYS9saWJtL21hbi9mZWNsZWFyZXhjZXB0LjMKKysrIC9kZXYvbnVsbApAQCAtMSwxMzkgKzAsMCBAQAotLlwiIENvcHlyaWdodCAoYykgMjAwNCBEYXZpZCBTY2h1bHR6IDxkYXNARnJlZUJTRC5vcmc+Ci0uXCIgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS5cIgotLlwiIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLlwiIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotLlwiIGFyZSBtZXQ6Ci0uXCIgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS5cIiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0uXCIgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS5cIiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0uXCIgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLS5cIgotLlwiIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLS5cIiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLS5cIiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotLlwiIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0uXCIgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLS5cIiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotLlwiIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotLlwiIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0uXCIgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotLlwiIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLS5cIiBTVUNIIERBTUFHRS4KLS5cIgotLlwiICRGcmVlQlNEOiBzcmMvbGliL21zdW4vbWFuL2ZlY2xlYXJleGNlcHQuMyx2IDEuMyAyMDA1LzAxLzE0IDA5OjEyOjA1IHJ1IEV4cCAkCi0uXCIKLS5EZCBNYXkgOCwgMjAwNAotLkR0IEZFQ0xFQVJFWENFUFQgMwotLk9zCi0uU2ggTkFNRQotLk5tIGZlY2xlYXJleGNlcHQgLAotLk5tIGZlZ2V0ZXhjZXB0ZmxhZyAsCi0uTm0gZmVyYWlzZWV4Y2VwdCAsCi0uTm0gZmVzZXRleGNlcHRmbGFnICwKLS5ObSBmZXRlc3RleGNlcHQKLS5OZCBmbG9hdGluZy1wb2ludCBleGNlcHRpb24gZmxhZyBtYW5pcHVsYXRpb24KLS5TaCBMSUJSQVJZCi0uTGIgbGlibQotLlNoIFNZTk9QU0lTCi0uSW4gZmVudi5oCi0uRmQgIiNwcmFnbWEgU1REQyBGRU5WX0FDQ0VTUyBPTiIKLS5GdCBpbnQKLS5GbiBmZWNsZWFyZXhjZXB0ICJpbnQgZXhjZXB0cyIKLS5GdCBpbnQKLS5GbiBmZWdldGV4Y2VwdGZsYWcgImZleGNlcHRfdCAqZmxhZ3AiICJpbnQgZXhjZXB0cyIKLS5GdCBpbnQKLS5GbiBmZXJhaXNlZXhjZXB0ICJpbnQgZXhjZXB0cyIKLS5GdCBpbnQKLS5GbiBmZXNldGV4Y2VwdGZsYWcgImNvbnN0IGZleGNlcHRfdCAqZmxhZ3AiICJpbnQgZXhjZXB0cyIKLS5GdCBpbnQKLS5GbiBmZXRlc3RleGNlcHQgImludCBleGNlcHRzIgotLlNoIERFU0NSSVBUSU9OCi1UaGUKLS5GbiBmZWNsZWFyZXhjZXB0Ci1yb3V0aW5lIGNsZWFycyB0aGUgZmxvYXRpbmctcG9pbnQgZXhjZXB0aW9uIGZsYWdzIHNwZWNpZmllZCBieQotLkZhIGV4Y2VwdHMgLAotd2hlcmVhcwotLkZuIGZlcmFpc2VleGNlcHQKLXJhaXNlcyB0aGUgc3BlY2lmaWVkIGV4Y2VwdGlvbnMuCi1SYWlzaW5nIGFuIGV4Y2VwdGlvbiBjYXVzZXMgdGhlIGNvcnJlc3BvbmRpbmcgZmxhZyB0byBiZSBzZXQsCi1hbmQgYQotLkR2IFNJR0ZQRQotaXMgZGVsaXZlcmVkIHRvIHRoZSBwcm9jZXNzIGlmIHRoZSBleGNlcHRpb24gaXMgdW5tYXNrZWQuCi0uUHAKLVRoZQotLkZuIGZldGVzdGV4Y2VwdAotZnVuY3Rpb24gZGV0ZXJtaW5lcyB3aGljaCBmbGFncyBhcmUgY3VycmVudGx5IHNldCwgb2YgdGhvc2Ugc3BlY2lmaWVkIGJ5Ci0uRmEgZXhjZXB0cyAuCi0uUHAKLVRoZQotLkZuIGZlZ2V0ZXhjZXB0ZmxhZwotZnVuY3Rpb24gc3RvcmVzIHRoZSBzdGF0ZSBvZiB0aGUgZXhjZXB0aW9uIGZsYWdzIHNwZWNpZmllZCBpbgotLkZhIGV4Y2VwdHMKLWluIHRoZSBvcGFxdWUgb2JqZWN0IHBvaW50ZWQgdG8gYnkKLS5GYSBmbGFncCAuCi1TaW1pbGFybHksCi0uRm4gZmVzZXRleGNlcHRmbGFnCi1jaGFuZ2VzIHRoZSBzcGVjaWZpZWQgZXhjZXB0aW9uIGZsYWdzIHRvIHJlZmxlY3QgdGhlIHN0YXRlIHN0b3JlZCBpbgotdGhlIG9iamVjdCBwb2ludGVkIHRvIGJ5Ci0uRmEgZmxhZ3AgLgotTm90ZSB0aGF0IHRoZSBmbGFncyByZXN0b3JlZCB3aXRoCi0uRm4gZmVzZXRleGNlcHRmbGFnCi1tdXN0IGJlIGEgKG5vdCBuZWNlc3NhcmlseSBwcm9wZXIpIHN1YnNldCBvZiB0aGUgZmxhZ3MgcmVjb3JkZWQgYnkKLWEgcHJpb3IgY2FsbCB0bwotLkZuIGZlZ2V0ZXhjZXB0ZmxhZyAuCi0uUHAKLUZvciBhbGwgb2YgdGhlc2UgZnVuY3Rpb25zLCB0aGUgcG9zc2libGUgdHlwZXMgb2YgZXhjZXB0aW9ucwotaW5jbHVkZSB0aG9zZSBkZXNjcmliZWQgaW4KLS5YciBmZW52IDMgLgotU29tZSBhcmNoaXRlY3R1cmVzIG1heSBkZWZpbmUgb3RoZXIgdHlwZXMgb2YgZmxvYXRpbmctcG9pbnQgZXhjZXB0aW9ucy4KLS5TaCBJTVBMRU1FTlRBVElPTiBOT1RFUwotT24gc29tZSBhcmNoaXRlY3R1cmVzLCByYWlzaW5nIGFuIG92ZXJmbG93IG9yIHVuZGVyZmxvdyBleGNlcHRpb24KLWFsc28gY2F1c2VzIGFuIGluZXhhY3QgZXhjZXB0aW9uIHRvIGJlIHJhaXNlZC4KLUluIHRoZXNlIGNhc2VzLCB0aGUgb3ZlcmZsb3cgb3IgdW5kZXJmbG93IHdpbGwgYmUgcmFpc2VkIGZpcnN0LgotLlBwCi1UaGUKLS5GbiBmZWdldGV4Y2VwdGZsYWcKLWFuZAotLkZuIGZlc2V0ZXhjZXB0ZmxhZwotcm91dGluZXMgYXJlIHByZWZlcnJlZCB0bwotLkZuIGZldGVzdGV4Y2VwdAotYW5kCi0uRm4gZmVyYWlzZWV4Y2VwdCAsCi1yZXNwZWN0aXZlbHksIGZvciBzYXZpbmcgYW5kIHJlc3RvcmluZyBleGNlcHRpb24gZmxhZ3MuCi1UaGUgbGF0dGVyIGRvIG5vdCByZS1yYWlzZSBleGNlcHRpb25zIGFuZCBtYXkgcHJlc2VydmUKLWFyY2hpdGVjdHVyZS1zcGVjaWZpYyBpbmZvcm1hdGlvbiBzdWNoIGFzIGFkZHJlc3NlcyB3aGVyZQotZXhjZXB0aW9ucyBvY2N1cnJlZC4KLS5TaCBSRVRVUk4gVkFMVUVTCi1UaGUKLS5GbiBmZWNsZWFyZXhjZXB0ICwKLS5GbiBmZWdldGV4Y2VwdGZsYWcgLAotLkZuIGZlcmFpc2VleGNlcHQgLAotYW5kCi0uRm4gZmVzZXRleGNlcHRmbGFnCi1mdW5jdGlvbnMgcmV0dXJuIDAgdXBvbiBzdWNjZXNzLCBhbmQgbm9uLXplcm8gb3RoZXJ3aXNlLgotVGhlCi0uRm4gZmV0ZXN0ZXhjZXB0Ci1mdW5jdGlvbiByZXR1cm5zIHRoZSBiaXR3aXNlIE9SIG9mIHRoZSB2YWx1ZXMgb2YgdGhlIGN1cnJlbnQgZXhjZXB0aW9uCi1mbGFncyB0aGF0IHdlcmUgcmVxdWVzdGVkLgotLlNoIFNFRSBBTFNPCi0uWHIgc2lnYWN0aW9uIDIgLAotLlhyIGZlaG9sZGV4Y2VwdCAzICwKLS5YciBmZW52IDMgLAotLlhyIGZldXBkYXRlZW52IDMgLAotLlhyIGZwZ2V0c3RpY2t5IDMgLAotLlhyIGZwcmVzZXRzdGlja3kgMwotLlNoIFNUQU5EQVJEUwotVGhlCi0uRm4gZmVjbGVhcmV4Y2VwdCAsCi0uRm4gZmVnZXRleGNlcHRmbGFnICwKLS5GbiBmZXJhaXNlZXhjZXB0ICwKLS5GbiBmZXNldGV4Y2VwdGZsYWcgLAotYW5kCi0uRm4gZmV0ZXN0ZXhjZXB0Ci1yb3V0aW5lcyBjb25mb3JtIHRvCi0uU3QgLWlzb0MtOTkgLgotLlNoIEhJU1RPUlkKLVRoZXNlIGZ1bmN0aW9ucyBmaXJzdCBhcHBlYXJlZCBpbgotLkZ4IDUuMyAuCmRpZmYgLS1naXQgYS9saWJtL21hbi9mZWVuYWJsZWV4Y2VwdC4zIGIvbGlibS9tYW4vZmVlbmFibGVleGNlcHQuMwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGI3OTBlNy4uMDAwMDAwMAotLS0gYS9saWJtL21hbi9mZWVuYWJsZWV4Y2VwdC4zCisrKyAvZGV2L251bGwKQEAgLTEsOTggKzAsMCBAQAotLlwiIENvcHlyaWdodCAoYykgMjAwNCBEYXZpZCBTY2h1bHR6IDxkYXNARnJlZUJTRC5vcmc+Ci0uXCIgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS5cIgotLlwiIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLlwiIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotLlwiIGFyZSBtZXQ6Ci0uXCIgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS5cIiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0uXCIgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS5cIiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0uXCIgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLS5cIgotLlwiIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLS5cIiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLS5cIiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotLlwiIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0uXCIgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLS5cIiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotLlwiIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotLlwiIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0uXCIgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotLlwiIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLS5cIiBTVUNIIERBTUFHRS4KLS5cIgotLlwiICRGcmVlQlNEOiBzcmMvbGliL21zdW4vbWFuL2ZlZW5hYmxlZXhjZXB0LjMsdiAxLjEgMjAwNS8wMy8xNiAxOTowNDoyOCBkYXMgRXhwICQKLS5cIgotLkRkIE1hcmNoIDE2LCAyMDA1Ci0uRHQgRkVFTkFCTEVFWENFUFQgMwotLk9zCi0uU2ggTkFNRQotLk5tIGZlZW5hYmxlZXhjZXB0ICwKLS5ObSBmZWRpc2FibGVleGNlcHQgLAotLk5tIGZlZ2V0ZXhjZXB0Ci0uTmQgZmxvYXRpbmctcG9pbnQgZXhjZXB0aW9uIG1hc2tpbmcKLS5TaCBMSUJSQVJZCi0uTGIgbGlibQotLlNoIFNZTk9QU0lTCi0uSW4gZmVudi5oCi0uRmQgIiNwcmFnbWEgU1REQyBGRU5WX0FDQ0VTUyBPTiIKLS5GdCBpbnQKLS5GbiBmZWVuYWJsZWV4Y2VwdCAiaW50IGV4Y2VwdHMiCi0uRnQgaW50Ci0uRm4gZmVkaXNhYmxlZXhjZXB0ICJpbnQgZXhjZXB0cyIKLS5GdCBpbnQKLS5GbiBmZWdldGV4Y2VwdCAidm9pZCIKLS5TaCBERVNDUklQVElPTgotVGhlCi0uRm4gZmVlbmFibGVleGNlcHQKLWFuZAotLkZuIGZlZGlzYWJsZWV4Y2VwdAotZnVuY3Rpb25zCi11bm1hc2sgYW5kIG1hc2sgKHJlc3BlY3RpdmVseSkgZXhjZXB0aW9ucyBzcGVjaWZpZWQgaW4KLS5GYSBleGNlcHRzIC4KLVRoZQotLkZuIGZlZ2V0ZXhjZXB0Ci1mdW5jdGlvbgotcmV0dXJucyB0aGUgY3VycmVudCBleGNlcHRpb24gbWFzay4KLUFsbCBleGNlcHRpb25zIGFyZSBtYXNrZWQgYnkgZGVmYXVsdC4KLS5QcAotRmxvYXRpbmctcG9pbnQgb3BlcmF0aW9ucyB0aGF0IHByb2R1Y2UgdW5tYXNrZWQgZXhjZXB0aW9ucyB3aWxsIHRyYXAsIGFuZCBhCi0uRHYgU0lHRlBFCi13aWxsIGJlIGRlbGl2ZXJlZCB0byB0aGUgcHJvY2Vzcy4KLUJ5IGluc3RhbGxpbmcgYSBzaWduYWwgaGFuZGxlciBmb3IKLS5EdiBTSUdGUEUgLAotYXBwbGljYXRpb25zIGNhbiB0YWtlIGFwcHJvcHJpYXRlIGFjdGlvbiBpbW1lZGlhdGVseSB3aXRob3V0Ci10ZXN0aW5nIHRoZSBleGNlcHRpb24gZmxhZ3MgYWZ0ZXIgZXZlcnkgb3BlcmF0aW9uLgotTm90ZSB0aGF0IHRoZSB0cmFwIG1heSBub3QgYmUgaW1tZWRpYXRlLCBidXQgaXQgc2hvdWxkIG9jY3VyCi1iZWZvcmUgdGhlIG5leHQgZmxvYXRpbmctcG9pbnQgaW5zdHJ1Y3Rpb24gaXMgZXhlY3V0ZWQuCi0uUHAKLUZvciBhbGwgb2YgdGhlc2UgZnVuY3Rpb25zLCB0aGUgcG9zc2libGUgdHlwZXMgb2YgZXhjZXB0aW9ucwotaW5jbHVkZSB0aG9zZSBkZXNjcmliZWQgaW4KLS5YciBmZW52IDMgLgotU29tZSBhcmNoaXRlY3R1cmVzIG1heSBkZWZpbmUgb3RoZXIgdHlwZXMgb2YgZmxvYXRpbmctcG9pbnQgZXhjZXB0aW9ucy4KLS5TaCBSRVRVUk4gVkFMVUVTCi1UaGUKLS5GbiBmZWVuYWJsZWV4Y2VwdCAsCi0uRm4gZmVkaXNhYmxlZXhjZXB0ICwKLWFuZAotLkZuIGZlZ2V0ZXhjZXB0Ci1mdW5jdGlvbnMgcmV0dXJuIGEgYml0bWFwIG9mIHRoZSBleGNlcHRpb25zIHRoYXQgd2VyZSB1bm1hc2tlZAotcHJpb3IgdG8gdGhlIGNhbGwuCi0uU2ggU0VFIEFMU08KLS5YciBzaWdhY3Rpb24gMiAsCi0uWHIgZmVjbGVhcmV4Y2VwdCAzICwKLS5YciBmZWhvbGRleGNlcHQgMyAsCi0uWHIgZmVudiAzICwKLS5YciBmZXVwZGF0ZWVudiAzCi0uU2ggQlVHUwotRnVuY3Rpb25zIGluIHRoZSBzdGFuZGFyZCBsaWJyYXJ5IG1heSB0cmlnZ2VyIGV4Y2VwdGlvbnMgbXVsdGlwbGUKLXRpbWVzIGFzIGEgcmVzdWx0IG9mIGludGVybWVkaWF0ZSBjb21wdXRhdGlvbnM7Ci1ob3dldmVyLCB0aGV5IGdlbmVyYWxseSBkbyBub3QgdHJpZ2dlciBzcHVyaW91cyBleGNlcHRpb25zLgotLlBwCi1ObyBpbnRlcmZhY2UgaXMgcHJvdmlkZWQgdG8gcGVybWl0IGV4Y2VwdGlvbnMgdG8gYmUgaGFuZGxlZCBpbgotbm9udHJpdmlhbCB3YXlzLgotVGhlcmUgaXMgbm8gdW5pZm9ybSB3YXkgZm9yIGFuIGV4Y2VwdGlvbiBoYW5kbGVyIHRvIGFjY2VzcwotaW5mb3JtYXRpb24gYWJvdXQgdGhlIGV4Y2VwdGlvbi1jYXVzaW5nIGluc3RydWN0aW9uLCBvcgotdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhhdCBpbnN0cnVjdGlvbiBzaG91bGQgYmUgcmVleGVjdXRlZAotYWZ0ZXIgcmV0dXJuaW5nIGZyb20gdGhlIGhhbmRsZXIuCmRpZmYgLS1naXQgYS9saWJtL21hbi9mZWdldGVudi4zIGIvbGlibS9tYW4vZmVnZXRlbnYuMwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmUzODZhZC4uMDAwMDAwMAotLS0gYS9saWJtL21hbi9mZWdldGVudi4zCisrKyAvZGV2L251bGwKQEAgLTEsMTEzICswLDAgQEAKLS5cIiBDb3B5cmlnaHQgKGMpIDIwMDQgRGF2aWQgU2NodWx0eiA8ZGFzQEZyZWVCU0Qub3JnPgotLlwiIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0uXCIKLS5cIiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS5cIiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLS5cIiBhcmUgbWV0OgotLlwiIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0uXCIgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLlwiIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0uXCIgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotLlwiICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0uXCIKLS5cIiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0uXCIgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0uXCIgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLS5cIiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotLlwiIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0uXCIgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLS5cIiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLS5cIiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotLlwiIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLS5cIiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0uXCIgU1VDSCBEQU1BR0UuCi0uXCIKLS5cIiAkRnJlZUJTRDogc3JjL2xpYi9tc3VuL21hbi9mZWdldGVudi4zLHYgMS4xIDIwMDQvMDYvMDYgMTA6MDY6MjYgZGFzIEV4cCAkCi0uXCIKLS5EZCBNYXkgOCwgMjAwNAotLkR0IEZFR0VURU5WIDMKLS5PcwotLlNoIE5BTUUKLS5ObSBmZWdldGVudiAsCi0uTm0gZmVob2xkZXhjZXB0ICwKLS5ObSBmZXNldGVudiAsCi0uTm0gZmV1cGRhdGVlbnYKLS5OZCBmbG9hdGluZy1wb2ludCBlbnZpcm9ubWVudCBzYXZlIGFuZCByZXN0b3JlCi0uU2ggTElCUkFSWQotLkxiIGxpYm0KLS5TaCBTWU5PUFNJUwotLkluIGZlbnYuaAotLkZkICIjcHJhZ21hIFNUREMgRkVOVl9BQ0NFU1MgT04iCi0uRnQgaW50Ci0uRm4gZmVnZXRlbnYgImZlbnZfdCAqZW52cCIKLS5GdCBpbnQKLS5GbiBmZWhvbGRleGNlcHQgImZlbnZfdCAqZW52cCIKLS5GdCBpbnQKLS5GbiBmZXNldGVudiAiY29uc3QgZmVudl90ICplbnZwIgotLkZ0IGludAotLkZuIGZldXBkYXRlZW52ICJjb25zdCBmZW52X3QgKmVudnAiCi0uU2ggREVTQ1JJUFRJT04KLVRoZSBmbG9hdGluZy1wb2ludCBlbnZpcm9ubWVudCBpbmNsdWRlcyBleGNlcHRpb24gZmxhZ3MgYW5kIG1hc2tzLCB0aGUKLWN1cnJlbnQgcm91bmRpbmcgbW9kZSwgYW5kIG90aGVyIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBzZXR0aW5ncy4KLUhvd2V2ZXIsIGl0IGRvZXMgbm90IGluY2x1ZGUgdGhlIGZsb2F0aW5nLXBvaW50IHJlZ2lzdGVyIGZpbGUuCi0uUHAKLVRoZQotLkZuIGZlZ2V0ZW52Ci1mdW5jdGlvbiBzdG9yZXMgdGhlIGN1cnJlbnQgZmxvYXRpbmctcG9pbnQgZW52aXJvbm1lbnQgaW4gdGhlIG9iamVjdAotcG9pbnRlZCB0byBieQotLkZhIGVudnAgLAotd2hlcmVhcwotLkZuIGZlaG9sZGV4Y2VwdAotc2F2ZXMgdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQsIHRoZW4gY2xlYXJzIGFsbCBleGNlcHRpb24gZmxhZ3MKLWFuZCBtYXNrcyBhbGwgZmxvYXRpbmctcG9pbnQgZXhjZXB0aW9ucy4KLS5QcAotVGhlCi0uRm4gZmVzZXRlbnYKLWZ1bmN0aW9uIHJlc3RvcmVzIGEgcHJldmlvdXNseSBzYXZlZCBlbnZpcm9ubWVudC4KLVRoZQotLkZuIGZldXBkYXRlZW52Ci1mdW5jdGlvbiByZXN0b3JlcyBhIHNhdmVkIGVudmlyb25tZW50IGFzIHdlbGwsIGJ1dCBpdCBhbHNvCi1yYWlzZXMgYW55IGV4Y2VwdGlvbnMgdGhhdCB3ZXJlIHNldCBpbiB0aGUgZW52aXJvbm1lbnQgaXQKLXJlcGxhY2VzLgotLlBwCi1UaGUKLS5GbiBmZWhvbGRleGNlcHQKLWZ1bmN0aW9uIGlzIG9mdGVuIHVzZWQgd2l0aAotLkZuIGZldXBkYXRlZW52Ci1vcgotLkZuIGZlc2V0ZW52Ci10byBzdXBwcmVzcyBzcHVyaW91cyBleGNlcHRpb25zIHRoYXQgb2NjdXIgYXMgYSByZXN1bHQgb2YKLWludGVybWVkaWF0ZSBjb21wdXRhdGlvbnMuCi1BbiBleGFtcGxlIGluCi0uWHIgZmVudiAzCi1kZW1vbnN0cmF0ZXMgaG93IHRvIGRvIHRoaXMuCi0uU2ggUkVUVVJOIFZBTFVFUwotVGhlCi0uRm4gZmVnZXRlbnYgLAotLkZuIGZlaG9sZGV4Y2VwdCAsCi0uRm4gZmVzZXRlbnYgLAotYW5kCi0uRm4gZmV1cGRhdGVlbnYKLWZ1bmN0aW9ucyByZXR1cm4gMCBpZiB0aGV5IHN1Y2NlZWQsIGFuZCBub24temVybyBvdGhlcndpc2UuCi0uU2ggU0VFIEFMU08KLS5YciBmZWNsZWFyZXhjZXB0IDMgLAotLlhyIGZlbnYgMyAsCi0uWHIgZmVyYWlzZWV4Y2VwdCAzICwKLS5YciBmZXNldGVudiAzICwKLS5YciBmZXRlc3RleGNlcHQgMyAsCi0uWHIgZnBnZXRtYXNrIDMgLAotLlhyIGZwZ2V0cHJlYyAzICwKLS5YciBmcHNldG1hc2sgMyAsCi0uWHIgZnBzZXRwcmVjIDMKLS5TaCBTVEFOREFSRFMKLVRoZQotLkZuIGZlZ2V0ZW52ICwKLS5GbiBmZWhvbGRleGNlcHQgLAotLkZuIGZlc2V0ZW52ICwKLWFuZAotLkZuIGZldXBkYXRlZW52Ci1mdW5jdGlvbnMgY29uZm9ybSB0bwotLlN0IC1pc29DLTk5IC4KLS5TaCBISVNUT1JZCi1UaGVzZSByb3V0aW5lcyBmaXJzdCBhcHBlYXJlZCBpbgotLkZ4IDUuMyAuCmRpZmYgLS1naXQgYS9saWJtL21hbi9mZWdldHJvdW5kLjMgYi9saWJtL21hbi9mZWdldHJvdW5kLjMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkzODQxNTguLjAwMDAwMDAKLS0tIGEvbGlibS9tYW4vZmVnZXRyb3VuZC4zCisrKyAvZGV2L251bGwKQEAgLTEsODMgKzAsMCBAQAotLlwiIENvcHlyaWdodCAoYykgMjAwNCBEYXZpZCBTY2h1bHR6IDxkYXNARnJlZUJTRC5vcmc+Ci0uXCIgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS5cIgotLlwiIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLlwiIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotLlwiIGFyZSBtZXQ6Ci0uXCIgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS5cIiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0uXCIgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS5cIiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0uXCIgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLS5cIgotLlwiIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLS5cIiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLS5cIiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotLlwiIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0uXCIgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLS5cIiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotLlwiIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotLlwiIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0uXCIgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotLlwiIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLS5cIiBTVUNIIERBTUFHRS4KLS5cIgotLlwiICRGcmVlQlNEOiBzcmMvbGliL21zdW4vbWFuL2ZlZ2V0cm91bmQuMyx2IDEuMiAyMDA1LzAxLzE0IDA5OjEyOjA1IHJ1IEV4cCAkCi0uXCIKLS5EZCBNYXkgOCwgMjAwNAotLkR0IEZFR0VUUk9VTkQgMwotLk9zCi0uU2ggTkFNRQotLk5tIGZlZ2V0cm91bmQgLAotLk5tIGZlc2V0cm91bmQKLS5OZCBmbG9hdGluZy1wb2ludCByb3VuZGluZyBjb250cm9sCi0uU2ggTElCUkFSWQotLkxiIGxpYm0KLS5TaCBTWU5PUFNJUwotLkluIGZlbnYuaAotLkZkICIjcHJhZ21hIFNUREMgRkVOVl9BQ0NFU1MgT04iCi0uRnQgaW50Ci0uRm4gZmVnZXRyb3VuZCB2b2lkCi0uRnQgaW50Ci0uRm4gZmVzZXRyb3VuZCAiaW50IHJvdW5kIgotLlNoIERFU0NSSVBUSU9OCi1UaGUKLS5GbiBmZWdldHJvdW5kCi1mdW5jdGlvbiBkZXRlcm1pbmVzIHRoZSBjdXJyZW50IGZsb2F0aW5nLXBvaW50IHJvdW5kaW5nIG1vZGUsCi1hbmQgdGhlCi0uRm4gZmVzZXRyb3VuZAotZnVuY3Rpb24gc2V0cyB0aGUgY3VycmVudCByb3VuZGluZyBtb2RlIHRvCi0uRmEgcm91bmQgLgotVGhlIHJvdW5kaW5nIG1vZGUgaXMgb25lIG9mCi0uRHYgRkVfVE9ORUFSRVNUICwgRkVfRE9XTldBUkQgLCBGRV9VUFdBUkQgLAotb3IKLS5EdiBGRV9UT1dBUkRaRVJPICwKLWFzIGRlc2NyaWJlZCBpbgotLlhyIGZlbnYgMyAuCi0uU2ggUkVUVVJOIFZBTFVFUwotVGhlCi0uRm4gZmVnZXRyb3VuZAotcm91dGluZSByZXR1cm5zIHRoZSBjdXJyZW50IHJvdW5kaW5nIG1vZGUuCi1UaGUKLS5GbiBmZXNldHJvdW5kCi1mdW5jdGlvbiByZXR1cm5zIDAgb24gc3VjY2VzcyBhbmQgbm9uLXplcm8gb3RoZXJ3aXNlOwotaG93ZXZlciwgdGhlIHByZXNlbnQgaW1wbGVtZW50YXRpb24gYWx3YXlzIHN1Y2NlZWRzLgotLlNoIFNFRSBBTFNPCi0uWHIgZmVudiAzICwKLS5YciBmcGdldHJvdW5kIDMgLAotLlhyIGZwc2V0cm91bmQgMwotLlNoIFNUQU5EQVJEUwotVGhlCi0uRm4gZmVnZXRyb3VuZAotYW5kCi0uRm4gZmVzZXRyb3VuZAotZnVuY3Rpb25zIGNvbmZvcm0gdG8KLS5TdCAtaXNvQy05OSAuCi0uU2ggSElTVE9SWQotVGhlc2Ugcm91dGluZXMgZmlyc3QgYXBwZWFyZWQgaW4KLS5GeCA1LjMgLgotVGhleSBzdXBlcnNlZGUgdGhlIG5vbi1zdGFuZGFyZAotLlhyIGZwZ2V0cm91bmQgMwotYW5kCi0uWHIgZnBzZXRyb3VuZCAzCi1mdW5jdGlvbnMuCmRpZmYgLS1naXQgYS9saWJtL21hbi9mZW52LjMgYi9saWJtL21hbi9mZW52LjMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMzYWQ1NDEuLjAwMDAwMDAKLS0tIGEvbGlibS9tYW4vZmVudi4zCisrKyAvZGV2L251bGwKQEAgLTEsMjg5ICswLDAgQEAKLS5cIiBDb3B5cmlnaHQgKGMpIDIwMDQgRGF2aWQgU2NodWx0eiA8ZGFzQEZyZWVCU0Qub3JnPgotLlwiIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0uXCIKLS5cIiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS5cIiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLS5cIiBhcmUgbWV0OgotLlwiIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0uXCIgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLlwiIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0uXCIgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotLlwiICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0uXCIKLS5cIiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0uXCIgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0uXCIgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLS5cIiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotLlwiIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0uXCIgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLS5cIiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLS5cIiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotLlwiIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLS5cIiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0uXCIgU1VDSCBEQU1BR0UuCi0uXCIKLS5cIiAkRnJlZUJTRDogc3JjL2xpYi9tc3VuL21hbi9mZW52LjMsdiAxLjUgMjAwNS8wNi8xNSAxOTowNDowNCBydSBFeHAgJAotLlwiCi0uRGQgTWFyY2ggMTYsIDIwMDUKLS5EdCBGRU5WIDMKLS5PcwotLlNoIE5BTUUKLS5ObSBmZWNsZWFyZXhjZXB0ICwKLS5ObSBmZWdldGV4Y2VwdGZsYWcgLAotLk5tIGZlcmFpc2VleGNlcHQgLAotLk5tIGZlc2V0ZXhjZXB0ZmxhZyAsCi0uTm0gZmV0ZXN0ZXhjZXB0ICwKLS5ObSBmZWdldHJvdW5kICwKLS5ObSBmZXNldHJvdW5kICwKLS5ObSBmZWdldGVudiAsCi0uTm0gZmVob2xkZXhjZXB0ICwKLS5ObSBmZXNldGVudiAsCi0uTm0gZmV1cGRhdGVlbnYgLAotLk5tIGZlZW5hYmxlZXhjZXB0ICwKLS5ObSBmZWRpc2FibGVleGNlcHQgLAotLk5tIGZlZ2V0ZXhjZXB0Ci0uTmQgZmxvYXRpbmctcG9pbnQgZW52aXJvbm1lbnQgY29udHJvbAotLlNoIExJQlJBUlkKLS5MYiBsaWJtCi0uU2ggU1lOT1BTSVMKLS5JbiBmZW52LmgKLS5GZCAiI3ByYWdtYSBTVERDIEZFTlZfQUNDRVNTIE9OIgotLkZ0IGludAotLkZuIGZlY2xlYXJleGNlcHQgImludCBleGNlcHRzIgotLkZ0IGludAotLkZuIGZlZ2V0ZXhjZXB0ZmxhZyAiZmV4Y2VwdF90ICpmbGFncCIgImludCBleGNlcHRzIgotLkZ0IGludAotLkZuIGZlcmFpc2VleGNlcHQgImludCBleGNlcHRzIgotLkZ0IGludAotLkZuIGZlc2V0ZXhjZXB0ZmxhZyAiY29uc3QgZmV4Y2VwdF90ICpmbGFncCIgImludCBleGNlcHRzIgotLkZ0IGludAotLkZuIGZldGVzdGV4Y2VwdCAiaW50IGV4Y2VwdHMiCi0uRnQgaW50Ci0uRm4gZmVnZXRyb3VuZCB2b2lkCi0uRnQgaW50Ci0uRm4gZmVzZXRyb3VuZCAiaW50IHJvdW5kIgotLkZ0IGludAotLkZuIGZlZ2V0ZW52ICJmZW52X3QgKmVudnAiCi0uRnQgaW50Ci0uRm4gZmVob2xkZXhjZXB0ICJmZW52X3QgKmVudnAiCi0uRnQgaW50Ci0uRm4gZmVzZXRlbnYgImNvbnN0IGZlbnZfdCAqZW52cCIKLS5GdCBpbnQKLS5GbiBmZXVwZGF0ZWVudiAiY29uc3QgZmVudl90ICplbnZwIgotLkZ0IGludAotLkZuIGZlZW5hYmxlZXhjZXB0ICJpbnQgZXhjZXB0cyIKLS5GdCBpbnQKLS5GbiBmZWRpc2FibGVleGNlcHQgImludCBleGNlcHRzIgotLkZ0IGludAotLkZuIGZlZ2V0ZXhjZXB0IHZvaWQKLS5TaCBERVNDUklQVElPTgotVGhlCi0uSW4gZmVudi5oCi1yb3V0aW5lcyBtYW5pcHVsYXRlIHRoZSBmbG9hdGluZy1wb2ludCBlbnZpcm9ubWVudCwKLXdoaWNoIGluY2x1ZGVzIHRoZSBleGNlcHRpb24gZmxhZ3MgYW5kIHJvdW5kaW5nIG1vZGVzIGRlZmluZWQgaW4KLS5TdCAtaWVlZTc1NCAuCi0uU3MgRXhjZXB0aW9ucwotRXhjZXB0aW9uIGZsYWdzIGFyZSBzZXQgYXMgc2lkZS1lZmZlY3RzIG9mIGZsb2F0aW5nLXBvaW50IGFyaXRobWV0aWMKLW9wZXJhdGlvbnMgYW5kIG1hdGggbGlicmFyeSByb3V0aW5lcywgYW5kIHRoZXkgcmVtYWluIHNldCB1bnRpbAotZXhwbGljaXRseSBjbGVhcmVkLgotVGhlIGZvbGxvd2luZyBtYWNyb3MgZXhwYW5kIHRvIGJpdCBmbGFncyBvZiB0eXBlCi0uVnQgaW50Ci1yZXByZXNlbnRpbmcgdGhlIGZpdmUgc3RhbmRhcmQgZmxvYXRpbmctcG9pbnQgZXhjZXB0aW9ucy4KLS5CbCAtdGFnIC13aWR0aCAiLkR2IEZFX0RJVkJZWkVSTyIKLS5JdCBEdiBGRV9ESVZCWVpFUk8KLUEgZGl2aWRlLWJ5LXplcm8gZXhjZXB0aW9uIG9jY3VycyB3aGVuIHRoZSBwcm9ncmFtIGF0dGVtcHRzIHRvCi1kaXZpZGUgYSBmaW5pdGUgbm9uLXplcm8gbnVtYmVyIGJ5IHplcm8uCi0uSXQgRHYgRkVfSU5FWEFDVAotQW4gaW5leGFjdCBleGNlcHRpb24gaXMgcmFpc2VkIHdoZW5ldmVyIHRoZXJlIGlzIGEgbG9zcyBvZiBwcmVjaXNpb24KLWR1ZSB0byByb3VuZGluZy4KLS5JdCBEdiBGRV9JTlZBTElECi1JbnZhbGlkIG9wZXJhdGlvbiBleGNlcHRpb25zIG9jY3VyIHdoZW4gYSBwcm9ncmFtIGF0dGVtcHRzIHRvCi1wZXJmb3JtIGNhbGN1bGF0aW9ucyBmb3Igd2hpY2ggdGhlcmUgaXMgbm8gcmVhc29uYWJsZSByZXByZXNlbnRhYmxlCi1hbnN3ZXIuCi1Gb3IgaW5zdGFuY2UsIHN1YnRyYWN0aW9uIG9mIGluZmluaXRpZXMsIGRpdmlzaW9uIG9mIHplcm8gYnkgemVybywKLW9yZGVyZWQgY29tcGFyaXNvbiBpbnZvbHZpbmcgXCooTmFzLCBhbmQgdGFraW5nIHRoZSBzcXVhcmUgcm9vdCBvZiBhCi1uZWdhdGl2ZSBudW1iZXIgYXJlIGFsbCBpbnZhbGlkIG9wZXJhdGlvbnMuCi0uSXQgRHYgRkVfT1ZFUkZMT1cKLUFuIG92ZXJmbG93IGV4Y2VwdGlvbiBvY2N1cnMgd2hlbiB0aGUgbWFnbml0dWRlIG9mIHRoZSByZXN1bHQgb2YgYQotY29tcHV0YXRpb24gaXMgdG9vIGxhcmdlIHRvIGZpdCBpbiB0aGUgZGVzdGluYXRpb24gdHlwZS4KLS5JdCBEdiBGRV9VTkRFUkZMT1cKLVVuZGVyZmxvdyBvY2N1cnMgd2hlbiB0aGUgcmVzdWx0IG9mIGEgY29tcHV0YXRpb24gaXMgdG9vIGNsb3NlIHRvIHplcm8KLXRvIGJlIHJlcHJlc2VudGVkIGFzIGEgbm9uLXplcm8gdmFsdWUgaW4gdGhlIGRlc3RpbmF0aW9uIHR5cGUuCi0uRWwKLS5QcAotQWRkaXRpb25hbGx5LCB0aGUKLS5EdiBGRV9BTExfRVhDRVBUCi1tYWNybyBleHBhbmRzIHRvIHRoZSBiaXR3aXNlIE9SIG9mIHRoZSBhYm92ZSBmbGFncyBhbmQgYW55Ci1hcmNoaXRlY3R1cmUtc3BlY2lmaWMgZmxhZ3MuCi1Db21iaW5hdGlvbnMgb2YgdGhlc2UgZmxhZ3MgYXJlIHBhc3NlZCB0byB0aGUKLS5GbiBmZWNsZWFyZXhjZXB0ICwKLS5GbiBmZWdldGV4Y2VwdGZsYWcgLAotLkZuIGZlcmFpc2VleGNlcHQgLAotLkZuIGZlc2V0ZXhjZXB0ZmxhZyAsCi1hbmQKLS5GbiBmZXRlc3RleGNlcHQKLWZ1bmN0aW9ucyB0byBjbGVhciwgc2F2ZSwgcmFpc2UsIHJlc3RvcmUsIGFuZCBleGFtaW5lIHRoZQotcHJvY2Vzc29yJ3MgZmxvYXRpbmctcG9pbnQgZXhjZXB0aW9uIGZsYWdzLCByZXNwZWN0aXZlbHkuCi0uUHAKLUV4Y2VwdGlvbnMgbWF5IGJlCi0uRW0gdW5tYXNrZWQKLXdpdGgKLS5GbiBmZWVuYWJsZWV4Y2VwdAotYW5kIG1hc2tlZCB3aXRoCi0uRm4gZmVkaXNhYmxlZXhjZXB0IC4KLVVubWFza2VkIGV4Y2VwdGlvbnMgY2F1c2UgYSB0cmFwIHdoZW4gdGhleSBhcmUgcHJvZHVjZWQsIGFuZAotYWxsIGV4Y2VwdGlvbnMgYXJlIG1hc2tlZCBieSBkZWZhdWx0LgotVGhlIGN1cnJlbnQgbWFzayBjYW4gYmUgdGVzdGVkIHdpdGgKLS5GbiBmZWdldGV4Y2VwdCAuCi0uU3MgUm91bmRpbmcgTW9kZXMKLS5TdCAtaWVlZTc1NAotc3BlY2lmaWVzIGZvdXIgcm91bmRpbmcgbW9kZXMuCi1UaGVzZSBtb2RlcyBjb250cm9sIHRoZSBkaXJlY3Rpb24gaW4gd2hpY2ggcmVzdWx0cyBhcmUgcm91bmRlZAotZnJvbSB0aGVpciBleGFjdCB2YWx1ZXMgaW4gb3JkZXIgdG8gZml0IHRoZW0gaW50byBiaW5hcnkKLWZsb2F0aW5nLXBvaW50IHZhcmlhYmxlcy4KLVRoZSBmb3VyIG1vZGVzIGNvcnJlc3BvbmQgd2l0aCB0aGUgZm9sbG93aW5nIHN5bWJvbGljIGNvbnN0YW50cy4KLS5CbCAtdGFnIC13aWR0aCAiLkR2IEZFX1RPV0FSRFpFUk8iCi0uSXQgRHYgRkVfVE9ORUFSRVNUCi1SZXN1bHRzIGFyZSByb3VuZGVkIHRvIHRoZSBjbG9zZXN0IHJlcHJlc2VudGFibGUgdmFsdWUuCi1JZiB0aGUgZXhhY3QgcmVzdWx0IGlzIGV4YWN0bHkgaGFsZiB3YXkgYmV0d2VlbiB0d28gcmVwcmVzZW50YWJsZQotdmFsdWVzLCB0aGUgdmFsdWUgd2hvc2UgbGFzdCBiaW5hcnkgZGlnaXQgaXMgZXZlbiAoemVybykgaXMgY2hvc2VuLgotVGhpcyBpcyB0aGUgZGVmYXVsdCBtb2RlLgotLkl0IER2IEZFX0RPV05XQVJECi1SZXN1bHRzIGFyZSByb3VuZGVkIHRvd2FyZHMgbmVnYXRpdmUgXCpbSWZdLgotLkl0IER2IEZFX1VQV0FSRAotUmVzdWx0cyBhcmUgcm91bmRlZCB0b3dhcmRzIHBvc2l0aXZlIFwqW0lmXS4KLS5JdCBEdiBGRV9UT1dBUkRaRVJPCi1SZXN1bHRzIGFyZSByb3VuZGVkIHRvd2FyZHMgemVyby4KLS5FbAotLlBwCi1UaGUKLS5GbiBmZWdldHJvdW5kCi1hbmQKLS5GbiBmZXNldHJvdW5kCi1mdW5jdGlvbnMgcXVlcnkgYW5kIHNldCB0aGUgcm91bmRpbmcgbW9kZS4KLS5TcyBFbnZpcm9ubWVudCBDb250cm9sCi1UaGUKLS5GbiBmZWdldGVudgotYW5kCi0uRm4gZmVzZXRlbnYKLWZ1bmN0aW9ucyBzYXZlIGFuZCByZXN0b3JlIHRoZSBmbG9hdGluZy1wb2ludCBlbnZpcm9ubWVudCwKLXdoaWNoIGluY2x1ZGVzIGV4Y2VwdGlvbiBmbGFncywgdGhlIGN1cnJlbnQgZXhjZXB0aW9uIG1hc2ssCi10aGUgcm91bmRpbmcgbW9kZSwgYW5kIHBvc3NpYmx5IG90aGVyIGltcGxlbWVudGF0aW9uLXNwZWNpZmljCi1zdGF0ZS4KLVRoZQotLkZuIGZlaG9sZGV4Y2VwdAotZnVuY3Rpb24gYmVoYXZlcyBsaWtlCi0uRm4gZmVnZXRlbnYgLAotYnV0IHdpdGggdGhlIGFkZGl0aW9uYWwgZWZmZWN0IG9mIGNsZWFyaW5nIHRoZSBleGNlcHRpb24gZmxhZ3MgYW5kCi1pbnN0YWxsaW5nIGEKLS5FbSBub24tc3RvcAotbW9kZS4KLUluIG5vbi1zdG9wIG1vZGUsIGZsb2F0aW5nLXBvaW50IG9wZXJhdGlvbnMgd2lsbCBzZXQgZXhjZXB0aW9uIGZsYWdzCi1hcyB1c3VhbCwgYnV0IG5vCi0uRHYgU0lHRlBFCi1zaWduYWxzIHdpbGwgYmUgZ2VuZXJhdGVkIGFzIGEgcmVzdWx0LgotTm9uLXN0b3AgbW9kZSBpcyB0aGUgZGVmYXVsdCwgYnV0IGl0IG1heSBiZSBhbHRlcmVkIGJ5Ci1ub24tc3RhbmRhcmQgbWVjaGFuaXNtcy4KLS5cIiBYWFggTWVudGlvbiBmZVtnc11ldG1hc2soKSBoZXJlIGFmdGVyIHRoZSBpbnRlcmZhY2UgaXMgZmluYWxpemVkCi0uXCIgWFhYIGFuZCByZWFkeSB0byBiZSBvZmZpY2lhbGx5IGRvY3VtZW50ZWQuCi1UaGUKLS5GbiBmZXVwZGF0ZWVudgotZnVuY3Rpb24gcmVzdG9yZXMgYSBzYXZlZCBlbnZpcm9ubWVudCBzaW1pbGFybHkgdG8KLS5GbiBmZXNldGVudiAsCi1idXQgaXQgYWxzbyByZS1yYWlzZXMgYW55IGZsb2F0aW5nLXBvaW50IGV4Y2VwdGlvbnMgZnJvbSB0aGUgb2xkCi1lbnZpcm9ubWVudC4KLS5QcAotVGhlIG1hY3JvCi0uRHYgRkVfREZMX0VOVgotZXhwYW5kcyB0byBhIHBvaW50ZXIgdG8gdGhlIGRlZmF1bHQgZW52aXJvbm1lbnQuCi0uU2ggQ0FWRUFUUwotVGhlIEZFTlZfQUNDRVNTIHByYWdtYSBjYW4gYmUgZW5hYmxlZCB3aXRoCi0uRGwgIiNwcmFnbWEgU1REQyBGRU5WX0FDQ0VTUyBPTiIKLWFuZCBkaXNhYmxlZCB3aXRoIHRoZQotLkRsICIjcHJhZ21hIFNUREMgRkVOVl9BQ0NFU1MgT0ZGIgotZGlyZWN0aXZlLgotVGhpcyBsZXhpY2FsbHktc2NvcGVkIGFubm90YXRpb24gdGVsbHMgdGhlIGNvbXBpbGVyIHRoYXQgdGhlIHByb2dyYW0KLW1heSBhY2Nlc3MgdGhlIGZsb2F0aW5nLXBvaW50IGVudmlyb25tZW50LCBzbyBvcHRpbWl6YXRpb25zIHRoYXQgd291bGQKLXZpb2xhdGUgc3RyaWN0IElFRUUtNzU0IHNlbWFudGljcyBhcmUgZGlzYWJsZWQuCi1JZiBleGVjdXRpb24gcmVhY2hlcyBhIGJsb2NrIG9mIGNvZGUgZm9yIHdoaWNoCi0uRHYgRkVOVl9BQ0NFU1MKLWlzIG9mZiwgdGhlIGZsb2F0aW5nLXBvaW50IGVudmlyb25tZW50IHdpbGwgYmVjb21lIHVuZGVmaW5lZC4KLS5TaCBFWEFNUExFUwotVGhlIGZvbGxvd2luZyByb3V0aW5lIGNvbXB1dGVzIHRoZSBzcXVhcmUgcm9vdCBmdW5jdGlvbi4KLUl0IGV4cGxpY2l0bHkgcmFpc2VzIGFuIGludmFsaWQgZXhjZXB0aW9uIG9uIGFwcHJvcHJpYXRlIGlucHV0cyB1c2luZwotLkZuIGZlcmFpc2VleGNlcHQgLgotSXQgYWxzbyBkZWZlcnMgaW5leGFjdCBleGNlcHRpb25zIHdoaWxlIGl0IGNvbXB1dGVzIGludGVybWVkaWF0ZQotdmFsdWVzLCBhbmQgdGhlbiBpdCBhbGxvd3MgYW4gaW5leGFjdCBleGNlcHRpb24gdG8gYmUgcmFpc2VkIG9ubHkgaWYKLXRoZSBmaW5hbCBhbnN3ZXIgaXMgaW5leGFjdC4KLS5CZCAtbGl0ZXJhbCAtb2Zmc2V0IGluZGVudAotI3ByYWdtYSBTVERDIEZFTlZfQUNDRVNTIE9OCi1kb3VibGUgc3FydChkb3VibGUgbikgewotCWRvdWJsZSB4ID0gMS4wOwotCWZlbnZfdCBlbnY7Ci0KLQlpZiAoaXNuYW4obikgfHwgbiA8IDAuMCkgewotCQlmZXJhaXNlZXhjZXB0KEZFX0lOVkFMSUQpOwotCQlyZXR1cm4gKE5BTik7Ci0JfQotCWlmIChpc2luZihuKSB8fCBuID09IDAuMCkKLQkJcmV0dXJuIChuKTsKLQlmZWhvbGRleGNlcHQoJmVudik7Ci0Jd2hpbGUgKGZhYnMoKHggKiB4KSAtIG4pID4gREJMX0VQU0lMT04gKiAyICogeCkKLQkJeCA9ICh4IC8gMikgKyAobiAvICgyICogeCkpOwotCWlmICh4ICogeCA9PSBuKQotCQlmZWNsZWFyZXhjZXB0KEZFX0lORVhBQ1QpOwotCWZldXBkYXRlZW52KCZlbnYpOwotCXJldHVybiAoeCk7Ci19Ci0uRWQKLS5TaCBTRUUgQUxTTwotLlhyIGNjIDEgLAotLlhyIGZlY2xlYXJleGNlcHQgMyAsCi0uWHIgZmVkaXNhYmxlZXhjZXB0IDMgLAotLlhyIGZlZW5hYmxlZXhjZXB0IDMgLAotLlhyIGZlZ2V0ZW52IDMgLAotLlhyIGZlZ2V0ZXhjZXB0IDMgLAotLlhyIGZlZ2V0ZXhjZXB0ZmxhZyAzICwKLS5YciBmZWdldHJvdW5kIDMgLAotLlhyIGZlaG9sZGV4Y2VwdCAzICwKLS5YciBmZXJhaXNlZXhjZXB0IDMgLAotLlhyIGZlc2V0ZW52IDMgLAotLlhyIGZlc2V0ZXhjZXB0ZmxhZyAzICwKLS5YciBmZXNldHJvdW5kIDMgLAotLlhyIGZldGVzdGV4Y2VwdCAzICwKLS5YciBmZXVwZGF0ZWVudiAzICwKLS5YciBmcGdldHByZWMgMyAsCi0uWHIgZnBzZXRwcmVjIDMKLS5TaCBTVEFOREFSRFMKLUV4Y2VwdCBhcyBub3RlZCBiZWxvdywKLS5JbiBmZW52LmgKLWNvbmZvcm1zIHRvCi0uU3QgLWlzb0MtOTkgLgotVGhlCi0uRm4gZmVlbmFibGVleGNlcHQgLAotLkZuIGZlZGlzYWJsZWV4Y2VwdCAsCi1hbmQKLS5GbiBmZWdldGV4Y2VwdAotcm91dGluZXMgYXJlIGV4dGVuc2lvbnMuCi0uU2ggSElTVE9SWQotVGhlCi0uSW4gZmVudi5oCi1oZWFkZXIgZmlyc3QgYXBwZWFyZWQgaW4KLS5GeCA1LjMgLgotSXQgc3VwZXJzZWRlcyB0aGUgbm9uLXN0YW5kYXJkIHJvdXRpbmVzIGRlZmluZWQgaW4KLS5JbiBpZWVlZnAuaAotYW5kIGRvY3VtZW50ZWQgaW4KLS5YciBmcGdldHJvdW5kIDMgLgotLlNoIEJVR1MKLVRoZQotLkR2IEZFTlZfQUNDRVNTCi1wcmFnbWEgaXMgdW5pbXBsZW1lbnRlZCBpbiB0aGUgc3lzdGVtIGNvbXBpbGVyLgotSG93ZXZlciwgbm9uLWNvbnN0YW50IGV4cHJlc3Npb25zIGdlbmVyYWxseSBwcm9kdWNlIHRoZSBjb3JyZWN0Ci1zaWRlLWVmZmVjdHMgYXQgbG93IG9wdGltaXphdGlvbiBsZXZlbHMuCi0uUHAKLU9uIHRoZSBBbHBoYSBwbGF0Zm9ybSwKLS5YciBjYyAxCi1tdXN0IGJlIHBhc3NlZCB0aGUKLS5GbCBtaWVlZS13aXRoLWluZXhhY3QgbWZwLXJvdW5kaW5nLW1vZGU9ZAotb3B0aW9ucyBpbiBvcmRlciB0byBnZW5lcmF0ZSBjb2RlIHRoYXQgaGFzIHRoZSBzdGFuZGFyZAotc2lkZS1lZmZlY3RzIGFuZCB1c2VzIHRoZSBzcGVjaWZpZWQgcm91bmRpbmcgbW9kZXMuCmRpZmYgLS1naXQgYS9saWJtL21hbi9mbG9vci4zIGIvbGlibS9tYW4vZmxvb3IuMwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWYwMmRhZi4uMDAwMDAwMAotLS0gYS9saWJtL21hbi9mbG9vci4zCisrKyAvZGV2L251bGwKQEAgLTEsODIgKzAsMCBAQAotLlwiIENvcHlyaWdodCAoYykgMTk4NSwgMTk5MSBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLgotLlwiIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0uXCIKLS5cIiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS5cIiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLS5cIiBhcmUgbWV0OgotLlwiIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0uXCIgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLlwiIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0uXCIgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotLlwiICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0uXCIgMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCi0uXCIgICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgotLlwiCVRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIFVuaXZlcnNpdHkgb2YKLS5cIglDYWxpZm9ybmlhLCBCZXJrZWxleSBhbmQgaXRzIGNvbnRyaWJ1dG9ycy4KLS5cIiA0LiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotLlwiICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotLlwiICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLlwiCi0uXCIgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLS5cIiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLS5cIiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotLlwiIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotLlwiIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0uXCIgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLS5cIiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLS5cIiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotLlwiIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLS5cIiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0uXCIgU1VDSCBEQU1BR0UuCi0uXCIKLS5cIiAgICAgZnJvbTogQCgjKWZsb29yLjMJNi41IChCZXJrZWxleSkgNC8xOS85MQotLlwiICRGcmVlQlNEOiBzcmMvbGliL21zdW4vbWFuL2Zsb29yLjMsdiAxLjE3IDIwMDUvMDEvMTMgMDk6MzU6NDcgcnUgRXhwICQKLS5cIgotLkRkIEphbnVhcnkgMTMsIDIwMDUKLS5EdCBGTE9PUiAzCi0uT3MKLS5TaCBOQU1FCi0uTm0gZmxvb3IgLAotLk5tIGZsb29yZiAsCi0uTm0gZmxvb3JsCi0uTmQgbGFyZ2VzdCBpbnRlZ3JhbCB2YWx1ZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8geAotLlNoIExJQlJBUlkKLS5MYiBsaWJtCi0uU2ggU1lOT1BTSVMKLS5JbiBtYXRoLmgKLS5GdCBkb3VibGUKLS5GbiBmbG9vciAiZG91YmxlIHgiCi0uRnQgZmxvYXQKLS5GbiBmbG9vcmYgImZsb2F0IHgiCi0uRnQgImxvbmcgZG91YmxlIgotLkZuIGZsb29ybCAibG9uZyBkb3VibGUgeCIKLS5TaCBERVNDUklQVElPTgotVGhlCi0uRm4gZmxvb3IgLAotLkZuIGZsb29yZgotYW5kCi0uRm4gZmxvb3JsCi1mdW5jdGlvbnMgcmV0dXJuIHRoZSBsYXJnZXN0IGludGVncmFsIHZhbHVlCi1sZXNzIHRoYW4gb3IgZXF1YWwgdG8KLS5GYSB4ICwKLWV4cHJlc3NlZCBhcyBhIGZsb2F0aW5nLXBvaW50IG51bWJlci4KLS5TaCBTRUUgQUxTTwotLlhyIGFicyAzICwKLS5YciBjZWlsIDMgLAotLlhyIGZhYnMgMyAsCi0uWHIgaWVlZSAzICwKLS5YciBtYXRoIDMgLAotLlhyIHJpbnQgMyAsCi0uWHIgcm91bmQgMyAsCi0uWHIgdHJ1bmMgMwotLlNoIFNUQU5EQVJEUwotVGhlCi0uRm4gZmxvb3IKLWZ1bmN0aW9uIGNvbmZvcm1zIHRvCi0uU3QgLWlzb0MgLgotVGhlCi0uRm4gZmxvb3JmCi1hbmQKLS5GbiBmbG9vcmwKLWZ1bmN0aW9ucyBjb25mb3JtIHRvCi0uU3QgLWlzb0MtOTkgLgpkaWZmIC0tZ2l0IGEvbGlibS9tYW4vZm1hLjMgYi9saWJtL21hbi9mbWEuMwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDc4YTZlMi4uMDAwMDAwMAotLS0gYS9saWJtL21hbi9mbWEuMworKysgL2Rldi9udWxsCkBAIC0xLDExNiArMCwwIEBACi0uXCIgQ29weXJpZ2h0IChjKSAyMDA1IERhdmlkIFNjaHVsdHogPGRhc0BGcmVlQlNELm9yZz4KLS5cIiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLlwiCi0uXCIgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0uXCIgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0uXCIgYXJlIG1ldDoKLS5cIiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLlwiICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS5cIiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotLlwiICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLS5cIiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotLlwiCi0uXCIgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotLlwiIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotLlwiIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0uXCIgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLS5cIiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotLlwiIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0uXCIgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0uXCIgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLS5cIiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0uXCIgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotLlwiIFNVQ0ggREFNQUdFLgotLlwiCi0uXCIgJEZyZWVCU0Q6IHNyYy9saWIvbXN1bi9tYW4vZm1hLjMsdiAxLjMgMjAwNS8xMS8yNCAwOToyNToxMCBqb2VsIEV4cCAkCi0uXCIKLS5EZCBKYW51YXJ5IDIyLCAyMDA1Ci0uRHQgRk1BIDMKLS5PcwotLlNoIE5BTUUKLS5ObSBmbWEgLAotLk5tIGZtYWYgLAotLk5tIGZtYWwKLS5OZCBmdXNlZCBtdWx0aXBseS1hZGQKLS5TaCBMSUJSQVJZCi0uTGIgbGlibQotLlNoIFNZTk9QU0lTCi0uSW4gbWF0aC5oCi0uRnQgZG91YmxlCi0uRm4gZm1hICJkb3VibGUgeCIgImRvdWJsZSB5IiAiZG91YmxlIHoiCi0uRnQgZmxvYXQKLS5GbiBmbWFmICJmbG9hdCB4IiAiZmxvYXQgeSIgImZsb2F0IHoiCi0uRnQgbG9uZyBkb3VibGUKLS5GbiBmbWFsICJsb25nIGRvdWJsZSB4IiAibG9uZyBkb3VibGUgeSIgImxvbmcgZG91YmxlIHoiCi0uU2ggREVTQ1JJUFRJT04KLVRoZQotLkZuIGZtYSAsCi0uRm4gZm1hZiAsCi1hbmQKLS5GbiBmbWFsCi1mdW5jdGlvbnMgcmV0dXJuCi0uTm8gIih4ICogeSkgKyB6IiAsCi1jb21wdXRlZCB3aXRoIG9ubHkgb25lIHJvdW5kaW5nIGVycm9yLgotVXNpbmcgdGhlIG9yZGluYXJ5IG11bHRpcGxpY2F0aW9uIGFuZCBhZGRpdGlvbiBvcGVyYXRvcnMsIGJ5IGNvbnRyYXN0LAotcmVzdWx0cyBpbiB0d28gcm91bmRpbmdzOiBvbmUgZm9yIHRoZSBpbnRlcm1lZGlhdGUgcHJvZHVjdCBhbmQgb25lIGZvcgotdGhlIGZpbmFsIHJlc3VsdC4KLS5QcAotRm9yIGluc3RhbmNlLCB0aGUgZXhwcmVzc2lvbgotLk5vICIxLjJlMTAwICogMi4wZTIwOCAtIDEuNGUzMDgiCi1wcm9kdWNlcyBcKihJZiBkdWUgdG8gb3ZlcmZsb3cgaW4gdGhlIGludGVybWVkaWF0ZSBwcm9kdWN0LCB3aGVyZWFzCi0uTm8gImZtYSgxLjJlMTAwLCAyLjBlMjA4LCAtMS40ZTMwOCkiCi1yZXR1cm5zIGFwcHJveGltYXRlbHkgMS4wZTMwOC4KLS5QcAotVGhlIGZ1c2VkIG11bHRpcGx5LWFkZCBvcGVyYXRpb24gaXMgb2Z0ZW4gdXNlZCB0byBpbXByb3ZlIHRoZQotYWNjdXJhY3kgb2YgY2FsY3VsYXRpb25zIHN1Y2ggYXMgZG90IHByb2R1Y3RzLgotSXQgbWF5IGFsc28gYmUgdXNlZCB0byBpbXByb3ZlIHBlcmZvcm1hbmNlIG9uIG1hY2hpbmVzIHRoYXQgaW1wbGVtZW50Ci1pdCBuYXRpdmVseS4KLVRoZSBtYWNyb3MKLS5EdiBGUF9GQVNUX0ZNQSAsCi0uRHYgRlBfRkFTVF9GTUFGCi1hbmQKLS5EdiBGUF9GQVNUX0ZNQUwKLW1heSBiZSBkZWZpbmVkIGluCi0uSW4gbWF0aC5oCi10byBpbmRpY2F0ZSB0aGF0Ci0uRm4gZm1hICwKLS5GbiBmbWFmICwKLWFuZAotLkZuIGZtYWwKLShyZXNwZWN0aXZlbHkpIGhhdmUgY29tcGFyYWJsZSBvciBmYXN0ZXIgc3BlZWQgdGhhbiBhIG11bHRpcGx5Ci1vcGVyYXRpb24gZm9sbG93ZWQgYnkgYW4gYWRkIG9wZXJhdGlvbi4KLS5TaCBJTVBMRU1FTlRBVElPTiBOT1RFUwotSW4gZ2VuZXJhbCwgdGhlc2Ugcm91dGluZXMgd2lsbCBiZWhhdmUgYXMgb25lIHdvdWxkIGV4cGVjdCBpZgotLk5vICJ4ICogeSArIHoiCi13ZXJlIGNvbXB1dGVkIHdpdGggdW5ib3VuZGVkIHByZWNpc2lvbiBhbmQgcmFuZ2UsCi10aGVuIHJvdW5kZWQgdG8gdGhlIHByZWNpc2lvbiBvZiB0aGUgcmV0dXJuIHR5cGUuCi1Ib3dldmVyLCBvbiBzb21lIHBsYXRmb3JtcywgaWYKLS5GYSB6Ci1pcyBcKihOYSwgdGhlc2UgZnVuY3Rpb25zIG1heSBub3QgcmFpc2UgYW4gZXhjZXB0aW9uIGV2ZW4KLXdoZW4gdGhlIGNvbXB1dGF0aW9uIG9mCi0uTm8gInggKiB5Igotd291bGQgaGF2ZSBvdGhlcndpc2UgZ2VuZXJhdGVkIGFuIGludmFsaWQgZXhjZXB0aW9uLgotLlNoIFNFRSBBTFNPCi0uWHIgZmVudiAzICwKLS5YciBtYXRoIDMKLS5TaCBTVEFOREFSRFMKLVRoZQotLkZuIGZtYSAsCi0uRm4gZm1hZiAsCi1hbmQKLS5GbiBmbWFsCi1mdW5jdGlvbnMgY29uZm9ybSB0bwotLlN0IC1pc29DLTk5IC4KLUEgZnVzZWQgbXVsdGlwbHktYWRkIG9wZXJhdGlvbiB3aXRoIHZpcnR1YWxseSBpZGVudGljYWwKLWNoYXJhY3RlcmlzdGljcyBhcHBlYXJzIGluIElFRUUgZHJhZnQgc3RhbmRhcmQgNzU0Ui4KLS5TaCBISVNUT1JZCi1UaGUKLS5GbiBmbWEKLWFuZAotLkZuIGZtYWYKLXJvdXRpbmVzIGZpcnN0IGFwcGVhcmVkIGluCi0uRnggNS40ICwKLWFuZAotLkZuIGZtYWwKLWFwcGVhcmVkIGluCi0uRnggNi4wIC4KZGlmZiAtLWdpdCBhL2xpYm0vbWFuL2ZtYXguMyBiL2xpYm0vbWFuL2ZtYXguMwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDMyNDlhMy4uMDAwMDAwMAotLS0gYS9saWJtL21hbi9mbWF4LjMKKysrIC9kZXYvbnVsbApAQCAtMSw5NyArMCwwIEBACi0uXCIgQ29weXJpZ2h0IChjKSAyMDA0IERhdmlkIFNjaHVsdHogPGRhc0BGcmVlQlNELm9yZz4KLS5cIiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLlwiCi0uXCIgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0uXCIgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0uXCIgYXJlIG1ldDoKLS5cIiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLlwiICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS5cIiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotLlwiICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLS5cIiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotLlwiCi0uXCIgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotLlwiIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotLlwiIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0uXCIgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLS5cIiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotLlwiIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0uXCIgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0uXCIgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLS5cIiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0uXCIgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotLlwiIFNVQ0ggREFNQUdFLgotLlwiCi0uXCIgJEZyZWVCU0Q6IHNyYy9saWIvbXN1bi9tYW4vZm1heC4zLHYgMS4yIDIwMDUvMDEvMTQgMDk6MTI6MDUgcnUgRXhwICQKLS5cIgotLkRkIEp1bmUgMjksIDIwMDQKLS5EdCBGTUFYIDMKLS5PcwotLlNoIE5BTUUKLS5ObSBmbWF4ICwKLS5ObSBmbWF4ZiAsCi0uTm0gZm1heGwgLAotLk5tIGZtaW4gLAotLk5tIGZtaW5mICwKLS5ObSBmbWlubAotLk5kIGZsb2F0aW5nLXBvaW50IG1heGltdW0gYW5kIG1pbmltdW0gZnVuY3Rpb25zCi0uU2ggTElCUkFSWQotLkxiIGxpYm0KLS5TaCBTWU5PUFNJUwotLkluIG1hdGguaAotLkZ0IGRvdWJsZQotLkZuIGZtYXggImRvdWJsZSB4IiAiZG91YmxlIHkiCi0uRnQgZmxvYXQKLS5GbiBmbWF4ZiAiZmxvYXQgeCIgImZsb2F0IHkiCi0uRnQgImxvbmcgZG91YmxlIgotLkZuIGZtYXhsICJsb25nIGRvdWJsZSB4IiAibG9uZyBkb3VibGUgeSIKLS5GdCBkb3VibGUKLS5GbiBmbWluICJkb3VibGUgeCIgImRvdWJsZSB5IgotLkZ0IGZsb2F0Ci0uRm4gZm1pbmYgImZsb2F0IHgiICJmbG9hdCB5IgotLkZ0ICJsb25nIGRvdWJsZSIKLS5GbiBmbWlubCAibG9uZyBkb3VibGUgeCIgImxvbmcgZG91YmxlIHkiCi0uU2ggREVTQ1JJUFRJT04KLVRoZQotLkZuIGZtYXggLAotLkZuIGZtYXhmICwKLWFuZAotLkZuIGZtYXhsCi1mdW5jdGlvbnMgcmV0dXJuIHRoZSBsYXJnZXIgb2YKLS5GYSB4Ci1hbmQKLS5GYSB5ICwKLWFuZCBsaWtld2lzZSwgdGhlCi0uRm4gZm1pbiAsCi0uRm4gZm1pbmYgLAotYW5kCi0uRm4gZm1pbmwKLWZ1bmN0aW9ucyByZXR1cm4gdGhlIHNtYWxsZXIgb2YKLS5GYSB4Ci1hbmQKLS5GYSB5IC4KLVRoZXkgdHJlYXQKLS5MaSArMC4wCi1hcyBiZWluZyBsYXJnZXIgdGhhbgotLkxpIC0wLjAgLgotSWYgb25lIGFyZ3VtZW50IGlzIGFuIFwqKE5hLCB0aGVuIHRoZSBvdGhlciBhcmd1bWVudCBpcyByZXR1cm5lZC4KLUlmIGJvdGggYXJndW1lbnRzIGFyZSBcKihOYXMsIHRoZW4gdGhlIHJlc3VsdCBpcyBhbiBcKihOYS4KLVRoZXNlIHJvdXRpbmVzIGRvIG5vdCByYWlzZSBhbnkgZmxvYXRpbmctcG9pbnQgZXhjZXB0aW9ucy4KLS5TaCBTRUUgQUxTTwotLlhyIGZhYnMgMyAsCi0uWHIgZmRpbSAzICwKLS5YciBtYXRoIDMKLS5TaCBTVEFOREFSRFMKLVRoZQotLkZuIGZtYXggLAotLkZuIGZtYXhmICwKLS5GbiBmbWF4bCAsCi0uRm4gZm1pbiAsCi0uRm4gZm1pbmYgLAotYW5kCi0uRm4gZm1pbmwKLWZ1bmN0aW9ucyBjb25mb3JtIHRvCi0uU3QgLWlzb0MtOTkgLgotLlNoIEhJU1RPUlkKLVRoZXNlIHJvdXRpbmVzIGZpcnN0IGFwcGVhcmVkIGluCi0uRnggNS4zIC4KZGlmZiAtLWdpdCBhL2xpYm0vbWFuL2Ztb2QuMyBiL2xpYm0vbWFuL2Ztb2QuMwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzBkNGVkOC4uMDAwMDAwMAotLS0gYS9saWJtL21hbi9mbW9kLjMKKysrIC9kZXYvbnVsbApAQCAtMSw4NyArMCwwIEBACi0uXCIgQ29weXJpZ2h0IChjKSAxOTkxIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuCi0uXCIgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS5cIgotLlwiIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLlwiIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotLlwiIGFyZSBtZXQ6Ci0uXCIgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS5cIiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0uXCIgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS5cIiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0uXCIgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLS5cIiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKLS5cIiAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6Ci0uXCIJVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgVW5pdmVyc2l0eSBvZgotLlwiCUNhbGlmb3JuaWEsIEJlcmtlbGV5IGFuZCBpdHMgY29udHJpYnV0b3JzLgotLlwiIDQuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0uXCIgICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0uXCIgICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0uXCIKLS5cIiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotLlwiIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotLlwiIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0uXCIgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0uXCIgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLS5cIiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotLlwiIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotLlwiIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0uXCIgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotLlwiIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLS5cIiBTVUNIIERBTUFHRS4KLS5cIgotLlwiICAgICBmcm9tOiBAKCMpZm1vZC4zCTUuMSAoQmVya2VsZXkpIDUvMi85MQotLlwiICRGcmVlQlNEOiBzcmMvbGliL21zdW4vbWFuL2Ztb2QuMyx2IDEuOCAyMDAxLzEwLzEzIDEyOjIzOjIzIGJkZSBFeHAgJAotLlwiCi0uRGQgTWF5IDIsIDE5OTEKLS5EdCBGTU9EIDMKLS5PcwotLlNoIE5BTUUKLS5ObSBmbW9kICwKLS5ObSBmbW9kZgotLk5kIGZsb2F0aW5nLXBvaW50IHJlbWFpbmRlciBmdW5jdGlvbnMKLS5TaCBMSUJSQVJZCi0uTGIgbGlibQotLlNoIFNZTk9QU0lTCi0uSW4gbWF0aC5oCi0uRnQgZG91YmxlCi0uRm4gZm1vZCAiZG91YmxlIHgiICJkb3VibGUgeSIKLS5GdCBmbG9hdAotLkZuIGZtb2RmICJmbG9hdCB4IiAiZmxvYXQgeSIKLS5TaCBERVNDUklQVElPTgotVGhlCi0uRm4gZm1vZAotYW5kIHRoZQotLkZuIGZtb2RmCi1mdW5jdGlvbnMgY29tcHV0ZSB0aGUgZmxvYXRpbmctcG9pbnQgcmVtYWluZGVyIG9mCi0uRmEgeCBOcyAvIEZhIHkgLgotLlNoIFJFVFVSTiBWQUxVRVMKLVRoZQotLkZuIGZtb2QKLWFuZCB0aGUKLS5GbiBmbW9kZgotZnVuY3Rpb25zIHJldHVybiB0aGUgdmFsdWUKLS5TbSBvZmYKLS5GYSB4IC0gRW0gaSAqIEZhIHkgLAotLlNtIG9uCi1mb3Igc29tZSBpbnRlZ2VyCi0uRW0gaQotc3VjaCB0aGF0LCBpZgotLkZhIHkKLWlzIG5vbi16ZXJvLCB0aGUgcmVzdWx0IGhhcyB0aGUgc2FtZSBzaWduIGFzCi0uRmEgeAotYW5kIG1hZ25pdHVkZSBsZXNzIHRoYW4gdGhlIG1hZ25pdHVkZSBvZgotLkZhIHkgLgotSWYKLS5GYSB5Ci1pcyB6ZXJvLCB3aGV0aGVyIGEgZG9tYWluIGVycm9yIG9jY3VycyBvciB0aGUKLS5GbiBmbW9kCi1hbmQgdGhlCi0uRm4gZm1vZGYKLWZ1bmN0aW9uIHJldHVybnMgemVybyBpcyBpbXBsZW1lbnRhdGlvbi1kZWZpbmVkLgotLlNoIFNFRSBBTFNPCi0uWHIgbWF0aCAzCi0uU2ggU1RBTkRBUkRTCi1UaGUKLS5GbiBmbW9kCi1mdW5jdGlvbiBjb25mb3JtcyB0bwotLlN0IC1pc29DIC4KZGlmZiAtLWdpdCBhL2xpYm0vbWFuL2h5cG90LjMgYi9saWJtL21hbi9oeXBvdC4zCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhOTJhMmE2Li4wMDAwMDAwCi0tLSBhL2xpYm0vbWFuL2h5cG90LjMKKysrIC9kZXYvbnVsbApAQCAtMSwxMzQgKzAsMCBAQAotLlwiIENvcHlyaWdodCAoYykgMTk4NSwgMTk5MSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuCi0uXCIgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS5cIgotLlwiIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLlwiIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotLlwiIGFyZSBtZXQ6Ci0uXCIgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS5cIiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0uXCIgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS5cIiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0uXCIgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLS5cIiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKLS5cIiAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6Ci0uXCIJVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgVW5pdmVyc2l0eSBvZgotLlwiCUNhbGlmb3JuaWEsIEJlcmtlbGV5IGFuZCBpdHMgY29udHJpYnV0b3JzLgotLlwiIDQuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0uXCIgICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0uXCIgICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0uXCIKLS5cIiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotLlwiIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotLlwiIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0uXCIgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0uXCIgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLS5cIiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotLlwiIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotLlwiIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0uXCIgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotLlwiIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLS5cIiBTVUNIIERBTUFHRS4KLS5cIgotLlwiICAgICBmcm9tOiBAKCMpaHlwb3QuMwk2LjcgKEJlcmtlbGV5KSA1LzYvOTEKLS5cIiAkRnJlZUJTRDogc3JjL2xpYi9tc3VuL21hbi9oeXBvdC4zLHYgMS4xMyAyMDA1LzAxLzE0IDIzOjI4OjI4IGRhcyBFeHAgJAotLlwiCi0uRGQgSmFudWFyeSAxNCwgMjAwNQotLkR0IEhZUE9UIDMKLS5PcwotLlNoIE5BTUUKLS5ObSBoeXBvdCAsCi0uTm0gaHlwb3RmICwKLS5ObSBjYWJzICwKLS5ObSBjYWJzZgotLk5kIEV1Y2xpZGVhbiBkaXN0YW5jZSBhbmQgY29tcGxleCBhYnNvbHV0ZSB2YWx1ZSBmdW5jdGlvbnMKLS5TaCBMSUJSQVJZCi0uTGIgbGlibQotLlNoIFNZTk9QU0lTCi0uSW4gbWF0aC5oCi0uRnQgZG91YmxlCi0uRm4gaHlwb3QgImRvdWJsZSB4IiAiZG91YmxlIHkiCi0uRnQgZmxvYXQKLS5GbiBoeXBvdGYgImZsb2F0IHgiICJmbG9hdCB5IgotLkluIGNvbXBsZXguaAotLkZ0IGRvdWJsZQotLkZuIGNhYnMgImRvdWJsZSBjb21wbGV4IHoiCi0uRnQgZmxvYXQKLS5GbiBjYWJzZiAiZmxvYXQgY29tcGxleCB6IgotLlNoIERFU0NSSVBUSU9OCi1UaGUKLS5GbiBoeXBvdAotYW5kCi0uRm4gaHlwb3RmCi1mdW5jdGlvbnMKLWNvbXB1dGUgdGhlCi1zcXJ0KHgqeCt5KnkpCi1pbiBzdWNoIGEgd2F5IHRoYXQgdW5kZXJmbG93IHdpbGwgbm90IGhhcHBlbiwgYW5kIG92ZXJmbG93Ci1vY2N1cnMgb25seSBpZiB0aGUgZmluYWwgcmVzdWx0IGRlc2VydmVzIGl0LgotVGhlCi0uRm4gY2FicwotYW5kCi0uRm4gY2Fic2YKLWZ1bmN0aW9ucyBjb21wdXRlIHRoZSBjb21wbGV4IGFic29sdXRlIHZhbHVlIG9mCi0uRmEgeiAuCi0uUHAKLS5GbiBoeXBvdCAiXCooSWYiICJ2IgotPQotLkZuIGh5cG90ICJ2IiAiXCooSWYiCi09ICtcKihJZiBmb3IgYWxsCi0uRmEgdiAsCi1pbmNsdWRpbmcgXCooTmEuCi0uU2ggRVJST1IgKGR1ZSB0byBSb3VuZG9mZiwgZXRjLikKLUJlbG93IDAuOTcKLS5FbSB1bHBzIC4KLUNvbnNlcXVlbnRseQotLkZuIGh5cG90ICI1LjAiICIxMi4wIgotPSAxMy4wCi1leGFjdGx5OwotaW4gZ2VuZXJhbCwgaHlwb3QgYW5kIGNhYnMgcmV0dXJuIGFuIGludGVnZXIgd2hlbmV2ZXIgYW4KLWludGVnZXIgbWlnaHQgYmUgZXhwZWN0ZWQuCi0uUHAKLVRoZSBzYW1lIGNhbm5vdCBiZSBzYWlkIGZvciB0aGUgc2hvcnRlciBhbmQgZmFzdGVyIHZlcnNpb24gb2YgaHlwb3QKLWFuZCBjYWJzIHRoYXQgaXMgcHJvdmlkZWQgaW4gdGhlIGNvbW1lbnRzIGluIGNhYnMuYzsgaXRzIGVycm9yIGNhbgotZXhjZWVkIDEuMgotLkVtIHVscHMgLgotLlNoIE5PVEVTCi1BcyBtaWdodCBiZSBleHBlY3RlZCwKLS5GbiBoeXBvdCAidiIgIlwqKE5hIgotYW5kCi0uRm4gaHlwb3QgIlwqKE5hIiAidiIKLWFyZSBcKihOYSBmb3IgYWxsCi0uRW0gZmluaXRlCi0uRmEgdiAuCi1CdXQgcHJvZ3JhbW1lcnMKLW1pZ2h0IGJlIHN1cnByaXNlZCBhdCBmaXJzdCB0byBkaXNjb3ZlciB0aGF0Ci0uRm4gaHlwb3QgIlwoKy1cKihJZiIgIlwqKE5hIgotPSArXCooSWYuCi1UaGlzIGlzIGludGVudGlvbmFsOyBpdCBoYXBwZW5zIGJlY2F1c2UKLS5GbiBoeXBvdCAiXCooSWYiICJ2IgotPSArXCooSWYKLWZvcgotLkVtIGFsbAotLkZhIHYgLAotZmluaXRlIG9yIGluZmluaXRlLgotSGVuY2UKLS5GbiBoeXBvdCAiXCooSWYiICJ2IgotaXMgaW5kZXBlbmRlbnQgb2YKLS5GYSB2IC4KLVVubGlrZSB0aGUgcmVzZXJ2ZWQgb3BlcmFuZCBmYXVsdCBvbiBhCi0uVG4gVkFYICwKLXRoZQotLlRuIElFRUUKLVwqKE5hIGlzIGRlc2lnbmVkIHRvCi1kaXNhcHBlYXIgd2hlbiBpdCB0dXJucyBvdXQgdG8gYmUgaXJyZWxldmFudCwgYXMgaXQgZG9lcyBpbgotLkZuIGh5cG90ICJcKihJZiIgIlwqKE5hIiAuCi0uU2ggU0VFIEFMU08KLS5YciBtYXRoIDMgLAotLlhyIHNxcnQgMwotLlNoIEhJU1RPUlkKLUJvdGggYQotLkZuIGh5cG90Ci1mdW5jdGlvbiBhbmQgYQotLkZuIGNhYnMKLWZ1bmN0aW9uCi1hcHBlYXJlZCBpbgotLkF0IHY3IC4KZGlmZiAtLWdpdCBhL2xpYm0vbWFuL2llZWUuMyBiL2xpYm0vbWFuL2llZWUuMwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2I3MDg3ZC4uMDAwMDAwMAotLS0gYS9saWJtL21hbi9pZWVlLjMKKysrIC9kZXYvbnVsbApAQCAtMSw0NDggKzAsMCBAQAotLlwiIENvcHlyaWdodCAoYykgMTk4NSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuCi0uXCIgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS5cIgotLlwiIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLlwiIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotLlwiIGFyZSBtZXQ6Ci0uXCIgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS5cIiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0uXCIgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS5cIiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0uXCIgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLS5cIiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKLS5cIiAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6Ci0uXCIJVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgVW5pdmVyc2l0eSBvZgotLlwiCUNhbGlmb3JuaWEsIEJlcmtlbGV5IGFuZCBpdHMgY29udHJpYnV0b3JzLgotLlwiIDQuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0uXCIgICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0uXCIgICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0uXCIKLS5cIiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotLlwiIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotLlwiIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0uXCIgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0uXCIgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLS5cIiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotLlwiIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotLlwiIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0uXCIgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotLlwiIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLS5cIiBTVUNIIERBTUFHRS4KLS5cIgotLlwiICAgICBmcm9tOiBAKCMpaWVlZS4zCTYuNCAoQmVya2VsZXkpIDUvNi85MQotLlwiICRGcmVlQlNEOiBzcmMvbGliL21zdW4vbWFuL2llZWUuMyx2IDEuMjIgMjAwNS8wNi8xNiAyMTo1NTo0NSBydSBFeHAgJAotLlwiCi0uRGQgSmFudWFyeSAyNiwgMjAwNQotLkR0IElFRUUgMwotLk9zCi0uU2ggTkFNRQotLk5tIGllZWUKLS5OZCBJRUVFIHN0YW5kYXJkIDc1NCBmb3IgZmxvYXRpbmctcG9pbnQgYXJpdGhtZXRpYwotLlNoIERFU0NSSVBUSU9OCi1UaGUgSUVFRSBTdGFuZGFyZCA3NTQgZm9yIEJpbmFyeSBGbG9hdGluZy1Qb2ludCBBcml0aG1ldGljCi1kZWZpbmVzIHJlcHJlc2VudGF0aW9ucyBvZiBmbG9hdGluZy1wb2ludCBudW1iZXJzIGFuZCBhYnN0cmFjdAotcHJvcGVydGllcyBvZiBhcml0aG1ldGljIG9wZXJhdGlvbnMgcmVsYXRpbmcgdG8gcHJlY2lzaW9uLAotcm91bmRpbmcsIGFuZCBleGNlcHRpb25hbCBjYXNlcywgYXMgZGVzY3JpYmVkIGJlbG93LgotLlNzIElFRUUgU1RBTkRBUkQgNzU0IEZsb2F0aW5nLVBvaW50IEFyaXRobWV0aWMKLVJhZGl4OiBCaW5hcnkuCi0uUHAKLU92ZXJmbG93IGFuZCB1bmRlcmZsb3c6Ci0uQmQgLXJhZ2dlZCAtb2Zmc2V0IGluZGVudCAtY29tcGFjdAotT3ZlcmZsb3cgZ29lcyBieSBkZWZhdWx0IHRvIGEgc2lnbmVkIFwqKElmLgotVW5kZXJmbG93IGlzCi0uRW0gZ3JhZHVhbCAuCi0uRWQKLS5QcAotWmVybyBpcyByZXByZXNlbnRlZCBhbWJpZ3VvdXNseSBhcyArMCBvciBcLTAuCi0uQmQgLXJhZ2dlZCAtb2Zmc2V0IGluZGVudCAtY29tcGFjdAotSXRzIHNpZ24gdHJhbnNmb3JtcyBjb3JyZWN0bHkgdGhyb3VnaCBtdWx0aXBsaWNhdGlvbiBvcgotZGl2aXNpb24sIGFuZCBpcyBwcmVzZXJ2ZWQgYnkgYWRkaXRpb24gb2YgemVyb3MKLXdpdGggbGlrZSBzaWduczsgYnV0IHhcLXggeWllbGRzICswIGZvciBldmVyeQotZmluaXRlIHguCi1UaGUgb25seSBvcGVyYXRpb25zIHRoYXQgcmV2ZWFsIHplcm8ncwotc2lnbiBhcmUgZGl2aXNpb24gYnkgemVybyBhbmQKLS5GbiBjb3B5c2lnbiB4IFwoKy0wIC4KLUluIHBhcnRpY3VsYXIsIGNvbXBhcmlzb24gKHggPiB5LCB4IFwoPj0geSwgZXRjLilcJgotY2Fubm90IGJlIGFmZmVjdGVkIGJ5IHRoZSBzaWduIG9mIHplcm87IGJ1dCBpZgotZmluaXRlIHggPSB5IHRoZW4gXCooSWYgPSAxLyh4XC15KSBcKCE9IFwtMS8oeVwteCkgPSBcLVwqKElmLgotLkVkCi0uUHAKLUluZmluaXR5IGlzIHNpZ25lZC4KLS5CZCAtcmFnZ2VkIC1vZmZzZXQgaW5kZW50IC1jb21wYWN0Ci1JdCBwZXJzaXN0cyB3aGVuIGFkZGVkIHRvIGl0c2VsZgotb3IgdG8gYW55IGZpbml0ZSBudW1iZXIuCi1JdHMgc2lnbiB0cmFuc2Zvcm1zCi1jb3JyZWN0bHkgdGhyb3VnaCBtdWx0aXBsaWNhdGlvbiBhbmQgZGl2aXNpb24sIGFuZAotKGZpbml0ZSkvXCgrLVwqKElmXDA9XDBcKCstMAotKG5vbnplcm8pLzAgPSBcKCstXCooSWYuCi1CdXQKLVwqKElmXC1cKihJZiwgXCooSWZcKCoqMCBhbmQgXCooSWYvXCooSWYKLWFyZSwgbGlrZSAwLzAgYW5kIHNxcnQoXC0zKSwKLWludmFsaWQgb3BlcmF0aW9ucyB0aGF0IHByb2R1Y2UgXCooTmEuIC4uLgotLkVkCi0uUHAKLVJlc2VydmVkIG9wZXJhbmRzIChcKihOYXMpOgotLkJkIC1yYWdnZWQgLW9mZnNldCBpbmRlbnQgLWNvbXBhY3QKLUFuIFwqKE5hIGlzCi0uRW0gKCBOIE5zIG90IEVtIGEgTiBOcyB1bWJlciApIC4KLVNvbWUgXCooTmFzLCBjYWxsZWQgU2lnbmFsaW5nIFwqKE5hcywgdHJhcCBhbnkgZmxvYXRpbmctcG9pbnQgb3BlcmF0aW9uCi1wZXJmb3JtZWQgdXBvbiB0aGVtOyB0aGV5IGFyZSB1c2VkIHRvIG1hcmsgbWlzc2luZwotb3IgdW5pbml0aWFsaXplZCB2YWx1ZXMsIG9yIG5vbmV4aXN0ZW50IGVsZW1lbnRzCi1vZiBhcnJheXMuCi1UaGUgcmVzdCBhcmUgUXVpZXQgXCooTmFzOyB0aGV5IGFyZQotdGhlIGRlZmF1bHQgcmVzdWx0cyBvZiBJbnZhbGlkIE9wZXJhdGlvbnMsIGFuZAotcHJvcGFnYXRlIHRocm91Z2ggc3Vic2VxdWVudCBhcml0aG1ldGljIG9wZXJhdGlvbnMuCi1JZiB4IFwoIT0geCB0aGVuIHggaXMgXCooTmE7IGV2ZXJ5IG90aGVyIHByZWRpY2F0ZQotKHggPiB5LCB4ID0geSwgeCA8IHksIC4uLikgaXMgRkFMU0UgaWYgXCooTmEgaXMgaW52b2x2ZWQuCi0uRWQKLS5QcAotUm91bmRpbmc6Ci0uQmQgLXJhZ2dlZCAtb2Zmc2V0IGluZGVudCAtY29tcGFjdAotRXZlcnkgYWxnZWJyYWljIG9wZXJhdGlvbiAoKywgXC0sIFwoKiosIC8sCi1cKHNyKQotaXMgcm91bmRlZCBieSBkZWZhdWx0IHRvIHdpdGhpbiBoYWxmIGFuCi0uRW0gdWxwICwKLWFuZCB3aGVuIHRoZSByb3VuZGluZyBlcnJvciBpcyBleGFjdGx5IGhhbGYgYW4KLS5FbSB1bHAKLXRoZW4KLXRoZSByb3VuZGVkIHZhbHVlJ3MgbGVhc3Qgc2lnbmlmaWNhbnQgYml0IGlzIHplcm8uCi0oQW4KLS5FbSB1bHAKLWlzIG9uZQotLkVtIFUgTnMgbml0Ci1pbiB0aGUKLS5FbSBMIE5zIGFzdAotLkVtIFAgTnMgbGFjZSAuICkKLVRoaXMga2luZCBvZiByb3VuZGluZyBpcyB1c3VhbGx5IHRoZSBiZXN0IGtpbmQsCi1zb21ldGltZXMgcHJvdmFibHkgc287IGZvciBpbnN0YW5jZSwgZm9yIGV2ZXJ5Ci14ID0gMS4wLCAyLjAsIDMuMCwgNC4wLCAuLi4sIDIuMCoqNTIsIHdlIGZpbmQKLSh4LzMuMClcKCoqMy4wID09IHggYW5kICh4LzEwLjApXCgqKjEwLjAgPT0geCBhbmQgLi4uCi1kZXNwaXRlIHRoYXQgYm90aCB0aGUgcXVvdGllbnRzIGFuZCB0aGUgcHJvZHVjdHMKLWhhdmUgYmVlbiByb3VuZGVkLgotT25seSByb3VuZGluZyBsaWtlIElFRUUgNzU0IGNhbiBkbyB0aGF0LgotQnV0IG5vIHNpbmdsZSBraW5kIG9mIHJvdW5kaW5nIGNhbiBiZQotcHJvdmVkIGJlc3QgZm9yIGV2ZXJ5IGNpcmN1bXN0YW5jZSwgc28gSUVFRSA3NTQKLXByb3ZpZGVzIHJvdW5kaW5nIHRvd2FyZHMgemVybyBvciB0b3dhcmRzCi0rXCooSWYgb3IgdG93YXJkcyBcLVwqKElmCi1hdCB0aGUgcHJvZ3JhbW1lcidzIG9wdGlvbi4KLS5FZAotLlBwCi1FeGNlcHRpb25zOgotLkJkIC1yYWdnZWQgLW9mZnNldCBpbmRlbnQgLWNvbXBhY3QKLUlFRUUgNzU0IHJlY29nbml6ZXMgZml2ZSBraW5kcyBvZiBmbG9hdGluZy1wb2ludCBleGNlcHRpb25zLAotbGlzdGVkIGJlbG93IGluIGRlY2xpbmluZyBvcmRlciBvZiBwcm9iYWJsZSBpbXBvcnRhbmNlLgotLkJsIC1jb2x1bW4gLW9mZnNldCBpbmRlbnQgIkludmFsaWQgT3BlcmF0aW9uIiAiR3JhZHVhbCBVbmRlcmZsb3ciCi0uRW0gIkV4Y2VwdGlvbglEZWZhdWx0IFJlc3VsdCIKLUludmFsaWQgT3BlcmF0aW9uCVwqKE5hLCBvciBGQUxTRQotT3ZlcmZsb3cJXCgrLVwqKElmCi1EaXZpZGUgYnkgWmVybwlcKCstXCooSWYKLVVuZGVyZmxvdwlHcmFkdWFsIFVuZGVyZmxvdwotSW5leGFjdAlSb3VuZGVkIHZhbHVlCi0uRWwKLS5QcAotTk9URTogQW4gRXhjZXB0aW9uIGlzIG5vdCBhbiBFcnJvciB1bmxlc3MgaGFuZGxlZAotYmFkbHkuCi1XaGF0IG1ha2VzIGEgY2xhc3Mgb2YgZXhjZXB0aW9ucyBleGNlcHRpb25hbAotaXMgdGhhdCBubyBzaW5nbGUgZGVmYXVsdCByZXNwb25zZSBjYW4gYmUgc2F0aXNmYWN0b3J5Ci1pbiBldmVyeSBpbnN0YW5jZS4KLU9uIHRoZSBvdGhlciBoYW5kLCBpZiBhIGRlZmF1bHQKLXJlc3BvbnNlIHdpbGwgc2VydmUgbW9zdCBpbnN0YW5jZXMgc2F0aXNmYWN0b3JpbHksCi10aGUgdW5zYXRpc2ZhY3RvcnkgaW5zdGFuY2VzIGNhbm5vdCBqdXN0aWZ5IGFib3J0aW5nCi1jb21wdXRhdGlvbiBldmVyeSB0aW1lIHRoZSBleGNlcHRpb24gb2NjdXJzLgotLkVkCi0uU3MgRGF0YSBGb3JtYXRzCi1TaW5nbGUtcHJlY2lzaW9uOgotLkJkIC1yYWdnZWQgLW9mZnNldCBpbmRlbnQgLWNvbXBhY3QKLVR5cGUgbmFtZToKLS5WdCBmbG9hdAotLlBwCi1Xb3Jkc2l6ZTogMzIgYml0cy4KLS5QcAotUHJlY2lzaW9uOiAyNCBzaWduaWZpY2FudCBiaXRzLAotcm91Z2hseSBsaWtlIDcgc2lnbmlmaWNhbnQgZGVjaW1hbHMuCi0uQmQgLXJhZ2dlZCAtb2Zmc2V0IGluZGVudCAtY29tcGFjdAotSWYgeCBhbmQgeCcgYXJlIGNvbnNlY3V0aXZlIHBvc2l0aXZlIHNpbmdsZS1wcmVjaXNpb24KLW51bWJlcnMgKHRoZXkgZGlmZmVyIGJ5IDEKLS5FbSB1bHAgKSAsCi10aGVuCi0uQmQgLXJhZ2dlZCAtY29tcGFjdAotNS45ZVwtMDggPCAwLjUqKjI0IDwgKHgnXC14KS94IFwoPD0gMC41KioyMyA8IDEuMmVcLTA3LgotLkVkCi0uRWQKLS5QcAotLkJsIC1jb2x1bW4gIlhYWCIgLWNvbXBhY3QKLVJhbmdlOglPdmVyZmxvdyB0aHJlc2hvbGQgID0gMi4wKioxMjggPSAzLjRlMzgKLQlVbmRlcmZsb3cgdGhyZXNob2xkID0gMC41KioxMjYgPSAxLjJlXC0zOAotLkVsCi0uQmQgLXJhZ2dlZCAtb2Zmc2V0IGluZGVudCAtY29tcGFjdAotVW5kZXJmbG93ZWQgcmVzdWx0cyByb3VuZCB0byB0aGUgbmVhcmVzdAotaW50ZWdlciBtdWx0aXBsZSBvZiAwLjUqKjE0OSA9IDEuNGVcLTQ1LgotLkVkCi0uRWQKLS5QcAotRG91YmxlLXByZWNpc2lvbjoKLS5CZCAtcmFnZ2VkIC1vZmZzZXQgaW5kZW50IC1jb21wYWN0Ci1UeXBlIG5hbWU6Ci0uVnQgZG91YmxlCi0uQmQgLXJhZ2dlZCAtb2Zmc2V0IGluZGVudCAtY29tcGFjdAotT24gc29tZSBhcmNoaXRlY3R1cmVzLAotLlZ0IGxvbmcgZG91YmxlCi1pcyB0aGUgdGhlIHNhbWUgYXMKLS5WdCBkb3VibGUgLgotLkVkCi0uUHAKLVdvcmRzaXplOiA2NCBiaXRzLgotLlBwCi1QcmVjaXNpb246IDUzIHNpZ25pZmljYW50IGJpdHMsCi1yb3VnaGx5IGxpa2UgMTYgc2lnbmlmaWNhbnQgZGVjaW1hbHMuCi0uQmQgLXJhZ2dlZCAtb2Zmc2V0IGluZGVudCAtY29tcGFjdAotSWYgeCBhbmQgeCcgYXJlIGNvbnNlY3V0aXZlIHBvc2l0aXZlIGRvdWJsZS1wcmVjaXNpb24KLW51bWJlcnMgKHRoZXkgZGlmZmVyIGJ5IDEKLS5FbSB1bHAgKSAsCi10aGVuCi0uQmQgLXJhZ2dlZCAtY29tcGFjdAotMS4xZVwtMTYgPCAwLjUqKjUzIDwgKHgnXC14KS94IFwoPD0gMC41Kio1MiA8IDIuM2VcLTE2LgotLkVkCi0uRWQKLS5QcAotLkJsIC1jb2x1bW4gIlhYWCIgLWNvbXBhY3QKLVJhbmdlOglPdmVyZmxvdyB0aHJlc2hvbGQgID0gMi4wKioxMDI0ID0gMS44ZTMwOAotCVVuZGVyZmxvdyB0aHJlc2hvbGQgPSAwLjUqKjEwMjIgPSAyLjJlXC0zMDgKLS5FbAotLkJkIC1yYWdnZWQgLW9mZnNldCBpbmRlbnQgLWNvbXBhY3QKLVVuZGVyZmxvd2VkIHJlc3VsdHMgcm91bmQgdG8gdGhlIG5lYXJlc3QKLWludGVnZXIgbXVsdGlwbGUgb2YgMC41KioxMDc0ID0gNC45ZVwtMzI0LgotLkVkCi0uRWQKLS5QcAotRXh0ZW5kZWQtcHJlY2lzaW9uOgotLkJkIC1yYWdnZWQgLW9mZnNldCBpbmRlbnQgLWNvbXBhY3QKLVR5cGUgbmFtZToKLS5WdCBsb25nIGRvdWJsZQotKHdoZW4gc3VwcG9ydGVkIGJ5IHRoZSBoYXJkd2FyZSkKLS5QcAotV29yZHNpemU6IDk2IGJpdHMuCi0uUHAKLVByZWNpc2lvbjogNjQgc2lnbmlmaWNhbnQgYml0cywKLXJvdWdobHkgbGlrZSAxOSBzaWduaWZpY2FudCBkZWNpbWFscy4KLS5CZCAtcmFnZ2VkIC1vZmZzZXQgaW5kZW50IC1jb21wYWN0Ci1JZiB4IGFuZCB4JyBhcmUgY29uc2VjdXRpdmUgcG9zaXRpdmUgZG91YmxlLXByZWNpc2lvbgotbnVtYmVycyAodGhleSBkaWZmZXIgYnkgMQotLkVtIHVscCApICwKLXRoZW4KLS5CZCAtcmFnZ2VkIC1jb21wYWN0Ci0xLjBlXC0xOSA8IDAuNSoqNjMgPCAoeCdcLXgpL3ggXCg8PSAwLjUqKjYyIDwgMi4yZVwtMTkuCi0uRWQKLS5FZAotLlBwCi0uQmwgLWNvbHVtbiAiWFhYIiAtY29tcGFjdAotUmFuZ2U6CU92ZXJmbG93IHRocmVzaG9sZCAgPSAyLjAqKjE2Mzg0ID0gMS4yZTQ5MzIKLQlVbmRlcmZsb3cgdGhyZXNob2xkID0gMC41KioxNjM4MiA9IDMuNGVcLTQ5MzIKLS5FbAotLkJkIC1yYWdnZWQgLW9mZnNldCBpbmRlbnQgLWNvbXBhY3QKLVVuZGVyZmxvd2VkIHJlc3VsdHMgcm91bmQgdG8gdGhlIG5lYXJlc3QKLWludGVnZXIgbXVsdGlwbGUgb2YgMC41KioxNjQ0NSA9IDUuN2VcLTQ5NTMuCi0uRWQKLS5FZAotLlBwCi1RdWFkLWV4dGVuZGVkLXByZWNpc2lvbjoKLS5CZCAtcmFnZ2VkIC1vZmZzZXQgaW5kZW50IC1jb21wYWN0Ci1UeXBlIG5hbWU6Ci0uVnQgbG9uZyBkb3VibGUKLSh3aGVuIHN1cHBvcnRlZCBieSB0aGUgaGFyZHdhcmUpCi0uUHAKLVdvcmRzaXplOiAxMjggYml0cy4KLS5QcAotUHJlY2lzaW9uOiAxMTMgc2lnbmlmaWNhbnQgYml0cywKLXJvdWdobHkgbGlrZSAzNCBzaWduaWZpY2FudCBkZWNpbWFscy4KLS5CZCAtcmFnZ2VkIC1vZmZzZXQgaW5kZW50IC1jb21wYWN0Ci1JZiB4IGFuZCB4JyBhcmUgY29uc2VjdXRpdmUgcG9zaXRpdmUgZG91YmxlLXByZWNpc2lvbgotbnVtYmVycyAodGhleSBkaWZmZXIgYnkgMQotLkVtIHVscCApICwKLXRoZW4KLS5CZCAtcmFnZ2VkIC1jb21wYWN0Ci05LjZlXC0zNSA8IDAuNSoqMTEzIDwgKHgnXC14KS94IFwoPD0gMC41KioxMTIgPCAyLjBlXC0zNC4KLS5FZAotLkVkCi0uUHAKLS5CbCAtY29sdW1uICJYWFgiIC1jb21wYWN0Ci1SYW5nZToJT3ZlcmZsb3cgdGhyZXNob2xkICA9IDIuMCoqMTYzODQgPSAxLjJlNDkzMgotCVVuZGVyZmxvdyB0aHJlc2hvbGQgPSAwLjUqKjE2MzgyID0gMy40ZVwtNDkzMgotLkVsCi0uQmQgLXJhZ2dlZCAtb2Zmc2V0IGluZGVudCAtY29tcGFjdAotVW5kZXJmbG93ZWQgcmVzdWx0cyByb3VuZCB0byB0aGUgbmVhcmVzdAotaW50ZWdlciBtdWx0aXBsZSBvZiAwLjUqKjE2NDk0ID0gNi41ZVwtNDk2Ni4KLS5FZAotLkVkCi0uU3MgQWRkaXRpb25hbCBJbmZvcm1hdGlvbiBSZWdhcmRpbmcgRXhjZXB0aW9ucwotLlBwCi1Gb3IgZWFjaCBraW5kIG9mIGZsb2F0aW5nLXBvaW50IGV4Y2VwdGlvbiwgSUVFRSA3NTQKLXByb3ZpZGVzIGEgRmxhZyB0aGF0IGlzIHJhaXNlZCBlYWNoIHRpbWUgaXRzIGV4Y2VwdGlvbgotaXMgc2lnbmFsZWQsIGFuZCBzdGF5cyByYWlzZWQgdW50aWwgdGhlIHByb2dyYW0gcmVzZXRzCi1pdC4KLVByb2dyYW1zIG1heSBhbHNvIHRlc3QsIHNhdmUgYW5kIHJlc3RvcmUgYSBmbGFnLgotVGh1cywgSUVFRSA3NTQgcHJvdmlkZXMgdGhyZWUgd2F5cyBieSB3aGljaCBwcm9ncmFtcwotbWF5IGNvcGUgd2l0aCBleGNlcHRpb25zIGZvciB3aGljaCB0aGUgZGVmYXVsdCByZXN1bHQKLW1pZ2h0IGJlIHVuc2F0aXNmYWN0b3J5OgotLkJsIC1lbnVtCi0uSXQKLVRlc3QgZm9yIGEgY29uZGl0aW9uIHRoYXQgbWlnaHQgY2F1c2UgYW4gZXhjZXB0aW9uCi1sYXRlciwgYW5kIGJyYW5jaCB0byBhdm9pZCB0aGUgZXhjZXB0aW9uLgotLkl0Ci1UZXN0IGEgZmxhZyB0byBzZWUgd2hldGhlciBhbiBleGNlcHRpb24gaGFzIG9jY3VycmVkCi1zaW5jZSB0aGUgcHJvZ3JhbSBsYXN0IHJlc2V0IGl0cyBmbGFnLgotLkl0Ci1UZXN0IGEgcmVzdWx0IHRvIHNlZSB3aGV0aGVyIGl0IGlzIGEgdmFsdWUgdGhhdCBvbmx5Ci1hbiBleGNlcHRpb24gY291bGQgaGF2ZSBwcm9kdWNlZC4KLS5QcAotQ0FVVElPTjogVGhlIG9ubHkgcmVsaWFibGUgd2F5cyB0byBkaXNjb3Zlcgotd2hldGhlciBVbmRlcmZsb3cgaGFzIG9jY3VycmVkIGFyZSB0byB0ZXN0IHdoZXRoZXIKLXByb2R1Y3RzIG9yIHF1b3RpZW50cyBsaWUgY2xvc2VyIHRvIHplcm8gdGhhbiB0aGUKLXVuZGVyZmxvdyB0aHJlc2hvbGQsIG9yIHRvIHRlc3QgdGhlIFVuZGVyZmxvdwotZmxhZy4KLShTdW1zIGFuZCBkaWZmZXJlbmNlcyBjYW5ub3QgdW5kZXJmbG93IGluCi1JRUVFIDc1NDsgaWYgeCBcKCE9IHkgdGhlbiB4XC15IGlzIGNvcnJlY3QgdG8KLWZ1bGwgcHJlY2lzaW9uIGFuZCBjZXJ0YWlubHkgbm9uemVybyByZWdhcmRsZXNzIG9mCi1ob3cgdGlueSBpdCBtYXkgYmUuKQotUHJvZHVjdHMgYW5kIHF1b3RpZW50cyB0aGF0Ci11bmRlcmZsb3cgZ3JhZHVhbGx5IGNhbiBsb3NlIGFjY3VyYWN5IGdyYWR1YWxseQotd2l0aG91dCB2YW5pc2hpbmcsIHNvIGNvbXBhcmluZyB0aGVtIHdpdGggemVybwotKGFzIG9uZSBtaWdodCBvbiBhIFZBWCkgd2lsbCBub3QgcmV2ZWFsIHRoZSBsb3NzLgotRm9ydHVuYXRlbHksIGlmIGEgZ3JhZHVhbGx5IHVuZGVyZmxvd2VkIHZhbHVlIGlzCi1kZXN0aW5lZCB0byBiZSBhZGRlZCB0byBzb21ldGhpbmcgYmlnZ2VyIHRoYW4gdGhlCi11bmRlcmZsb3cgdGhyZXNob2xkLCBhcyBpcyBhbG1vc3QgYWx3YXlzIHRoZSBjYXNlLAotZGlnaXRzIGxvc3QgdG8gZ3JhZHVhbCB1bmRlcmZsb3cgd2lsbCBub3QgYmUgbWlzc2VkCi1iZWNhdXNlIHRoZXkgd291bGQgaGF2ZSBiZWVuIHJvdW5kZWQgb2ZmIGFueXdheS4KLVNvIGdyYWR1YWwgdW5kZXJmbG93cyBhcmUgdXN1YWxseQotLkVtIHByb3ZhYmx5Ci1pZ25vcmFibGUuCi1UaGUgc2FtZSBjYW5ub3QgYmUgc2FpZCBvZiB1bmRlcmZsb3dzIGZsdXNoZWQgdG8gMC4KLS5FbAotLlBwCi1BdCB0aGUgb3B0aW9uIG9mIGFuIGltcGxlbWVudG9yIGNvbmZvcm1pbmcgdG8gSUVFRSA3NTQsCi1vdGhlciB3YXlzIHRvIGNvcGUgd2l0aCBleGNlcHRpb25zIG1heSBiZSBwcm92aWRlZDoKLS5CbCAtZW51bQotLkl0Ci1BQk9SVC4KLVRoaXMgbWVjaGFuaXNtIGNsYXNzaWZpZXMgYW4gZXhjZXB0aW9uIGluCi1hZHZhbmNlIGFzIGFuIGluY2lkZW50IHRvIGJlIGhhbmRsZWQgYnkgbWVhbnMKLXRyYWRpdGlvbmFsbHkgYXNzb2NpYXRlZCB3aXRoIGVycm9yLWhhbmRsaW5nCi1zdGF0ZW1lbnRzIGxpa2UgIk9OIEVSUk9SIEdPIFRPIC4uLiIuCi1EaWZmZXJlbnQKLWxhbmd1YWdlcyBvZmZlciBkaWZmZXJlbnQgZm9ybXMgb2YgdGhpcyBzdGF0ZW1lbnQsCi1idXQgbW9zdCBzaGFyZSB0aGUgZm9sbG93aW5nIGNoYXJhY3RlcmlzdGljczoKLS5CbCAtZGFzaAotLkl0Ci1ObyBtZWFucyBpcyBwcm92aWRlZCB0byBzdWJzdGl0dXRlIGEgdmFsdWUgZm9yCi10aGUgb2ZmZW5kaW5nIG9wZXJhdGlvbidzIHJlc3VsdCBhbmQgcmVzdW1lCi1jb21wdXRhdGlvbiBmcm9tIHdoYXQgbWF5IGJlIHRoZSBtaWRkbGUgb2YgYW4KLWV4cHJlc3Npb24uCi1BbiBleGNlcHRpb25hbCByZXN1bHQgaXMgYWJhbmRvbmVkLgotLkl0Ci1JbiBhIHN1YnByb2dyYW0gdGhhdCBsYWNrcyBhbiBlcnJvci1oYW5kbGluZwotc3RhdGVtZW50LCBhbiBleGNlcHRpb24gY2F1c2VzIHRoZSBzdWJwcm9ncmFtIHRvCi1hYm9ydCB3aXRoaW4gd2hhdGV2ZXIgcHJvZ3JhbSBjYWxsZWQgaXQsIGFuZCBzbwotb24gYmFjayB1cCB0aGUgY2hhaW4gb2YgY2FsbGluZyBzdWJwcm9ncmFtcyB1bnRpbAotYW4gZXJyb3ItaGFuZGxpbmcgc3RhdGVtZW50IGlzIGVuY291bnRlcmVkIG9yIHRoZQotd2hvbGUgdGFzayBpcyBhYm9ydGVkIGFuZCBtZW1vcnkgaXMgZHVtcGVkLgotLkVsCi0uSXQKLVNUT1AuCi1UaGlzIG1lY2hhbmlzbSwgcmVxdWlyaW5nIGFuIGludGVyYWN0aXZlCi1kZWJ1Z2dpbmcgZW52aXJvbm1lbnQsIGlzIG1vcmUgZm9yIHRoZSBwcm9ncmFtbWVyCi10aGFuIHRoZSBwcm9ncmFtLgotSXQgY2xhc3NpZmllcyBhbiBleGNlcHRpb24gaW4KLWFkdmFuY2UgYXMgYSBzeW1wdG9tIG9mIGEgcHJvZ3JhbW1lcidzIGVycm9yOyB0aGUKLWV4Y2VwdGlvbiBzdXNwZW5kcyBleGVjdXRpb24gYXMgbmVhciBhcyBpdCBjYW4gdG8KLXRoZSBvZmZlbmRpbmcgb3BlcmF0aW9uIHNvIHRoYXQgdGhlIHByb2dyYW1tZXIgY2FuCi1sb29rIGFyb3VuZCB0byBzZWUgaG93IGl0IGhhcHBlbmVkLgotUXVpdGUgb2Z0ZW4KLXRoZSBmaXJzdCBzZXZlcmFsIGV4Y2VwdGlvbnMgdHVybiBvdXQgdG8gYmUgcXVpdGUKLXVuZXhjZXB0aW9uYWJsZSwgc28gdGhlIHByb2dyYW1tZXIgb3VnaHQgaWRlYWxseQotdG8gYmUgYWJsZSB0byByZXN1bWUgZXhlY3V0aW9uIGFmdGVyIGVhY2ggb25lIGFzIGlmCi1leGVjdXRpb24gaGFkIG5vdCBiZWVuIHN0b3BwZWQuCi0uSXQKLVwmLi4uIE90aGVyIHdheXMgbGllIGJleW9uZCB0aGUgc2NvcGUgb2YgdGhpcyBkb2N1bWVudC4KLS5FbAotLlBwCi1JZGVhbGx5LCBlYWNoCi1lbGVtZW50YXJ5IGZ1bmN0aW9uIHNob3VsZCBhY3QgYXMgaWYgaXQgd2VyZSBpbmRpdmlzaWJsZSwgb3IKLWF0b21pYywgaW4gdGhlIHNlbnNlIHRoYXQgLi4uCi0uQmwgLWVudW0KLS5JdAotTm8gZXhjZXB0aW9uIHNob3VsZCBiZSBzaWduYWxlZCB0aGF0IGlzIG5vdCBkZXNlcnZlZCBieQotdGhlIGRhdGEgc3VwcGxpZWQgdG8gdGhhdCBmdW5jdGlvbi4KLS5JdAotQW55IGV4Y2VwdGlvbiBzaWduYWxlZCBzaG91bGQgYmUgaWRlbnRpZmllZCB3aXRoIHRoYXQKLWZ1bmN0aW9uIHJhdGhlciB0aGFuIHdpdGggb25lIG9mIGl0cyBzdWJyb3V0aW5lcy4KLS5JdAotVGhlIGludGVybmFsIGJlaGF2aW9yIG9mIGFuIGF0b21pYyBmdW5jdGlvbiBzaG91bGQgbm90Ci1iZSBkaXNydXB0ZWQgd2hlbiBhIGNhbGxpbmcgcHJvZ3JhbSBjaGFuZ2VzIGZyb20KLW9uZSB0byBhbm90aGVyIG9mIHRoZSBmaXZlIG9yIHNvIHdheXMgb2YgaGFuZGxpbmcKLWV4Y2VwdGlvbnMgbGlzdGVkIGFib3ZlLCBhbHRob3VnaCB0aGUgZGVmaW5pdGlvbgotb2YgdGhlIGZ1bmN0aW9uIG1heSBiZSBjb3JyZWxhdGVkIGludGVudGlvbmFsbHkKLXdpdGggZXhjZXB0aW9uIGhhbmRsaW5nLgotLkVsCi0uUHAKLVRoZSBmdW5jdGlvbnMgaW4KLS5ObSBsaWJtCi1hcmUgb25seSBhcHByb3hpbWF0ZWx5IGF0b21pYy4KLVRoZXkgc2lnbmFsIG5vIGluYXBwcm9wcmlhdGUgZXhjZXB0aW9uIGV4Y2VwdCBwb3NzaWJseSAuLi4KLS5CbCAtdGFnIC13aWR0aCBpbmRlbnQgLW9mZnNldCBpbmRlbnQgLWNvbXBhY3QKLS5JdCBYbwotT3Zlci9VbmRlcmZsb3cKLS5YYwotd2hlbiBhIHJlc3VsdCwgaWYgcHJvcGVybHkgY29tcHV0ZWQsIG1pZ2h0IGhhdmUgbGFpbiBiYXJlbHkgd2l0aGluIHJhbmdlLCBhbmQKLS5JdCBYbwotSW5leGFjdCBpbgotLkZuIGNhYnMgLAotLkZuIGNicnQgLAotLkZuIGh5cG90ICwKLS5GbiBsb2cxMAotYW5kCi0uRm4gcG93Ci0uWGMKLXdoZW4gaXQgaGFwcGVucyB0byBiZSBleGFjdCwgdGhhbmtzIHRvIGZvcnR1aXRvdXMgY2FuY2VsbGF0aW9uIG9mIGVycm9ycy4KLS5FbAotT3RoZXJ3aXNlLCAuLi4KLS5CbCAtdGFnIC13aWR0aCBpbmRlbnQgLW9mZnNldCBpbmRlbnQgLWNvbXBhY3QKLS5JdCBYbwotSW52YWxpZCBPcGVyYXRpb24gaXMgc2lnbmFsZWQgb25seSB3aGVuCi0uWGMKLWFueSByZXN1bHQgYnV0IFwqKE5hIHdvdWxkIHByb2JhYmx5IGJlIG1pc2xlYWRpbmcuCi0uSXQgWG8KLU92ZXJmbG93IGlzIHNpZ25hbGVkIG9ubHkgd2hlbgotLlhjCi10aGUgZXhhY3QgcmVzdWx0IHdvdWxkIGJlIGZpbml0ZSBidXQgYmV5b25kIHRoZSBvdmVyZmxvdyB0aHJlc2hvbGQuCi0uSXQgWG8KLURpdmlkZS1ieS1aZXJvIGlzIHNpZ25hbGVkIG9ubHkgd2hlbgotLlhjCi1hIGZ1bmN0aW9uIHRha2VzIGV4YWN0bHkgaW5maW5pdGUgdmFsdWVzIGF0IGZpbml0ZSBvcGVyYW5kcy4KLS5JdCBYbwotVW5kZXJmbG93IGlzIHNpZ25hbGVkIG9ubHkgd2hlbgotLlhjCi10aGUgZXhhY3QgcmVzdWx0IHdvdWxkIGJlIG5vbnplcm8gYnV0IHRpbmllciB0aGFuIHRoZSB1bmRlcmZsb3cgdGhyZXNob2xkLgotLkl0IFhvCi1JbmV4YWN0IGlzIHNpZ25hbGVkIG9ubHkgd2hlbgotLlhjCi1ncmVhdGVyIHJhbmdlIG9yIHByZWNpc2lvbiB3b3VsZCBiZSBuZWVkZWQgdG8gcmVwcmVzZW50IHRoZSBleGFjdCByZXN1bHQuCi0uRWwKLS5TaCBTRUUgQUxTTwotLlhyIGZlbnYgMyAsCi0uWHIgaWVlZV90ZXN0IDMgLAotLlhyIG1hdGggMwotLlBwCi1BbiBleHBsYW5hdGlvbiBvZiBJRUVFIDc1NCBhbmQgaXRzIHByb3Bvc2VkIGV4dGVuc2lvbiBwODU0Ci13YXMgcHVibGlzaGVkIGluIHRoZSBJRUVFIG1hZ2F6aW5lIE1JQ1JPIGluIEF1Z3VzdCAxOTg0IHVuZGVyCi10aGUgdGl0bGUgIkEgUHJvcG9zZWQgUmFkaXgtIGFuZCBXb3JkLWxlbmd0aC1pbmRlcGVuZGVudAotU3RhbmRhcmQgZm9yIEZsb2F0aW5nLXBvaW50IEFyaXRobWV0aWMiIGJ5Ci0uQW4gIlcuIEouIENvZHkiCi1ldCBhbC4KLVRoZSBtYW51YWxzIGZvciBQYXNjYWwsIEMgYW5kIEJBU0lDIG9uIHRoZSBBcHBsZSBNYWNpbnRvc2gKLWRvY3VtZW50IHRoZSBmZWF0dXJlcyBvZiBJRUVFIDc1NCBwcmV0dHkgd2VsbC4KLUFydGljbGVzIGluIHRoZSBJRUVFIG1hZ2F6aW5lIENPTVBVVEVSIHZvbC5cJiAxNCBuby5cJiAzIChNYXIuXCYKLTE5ODEpLCBhbmQgaW4gdGhlIEFDTSBTSUdOVU0gTmV3c2xldHRlciBTcGVjaWFsIElzc3VlIG9mCi1PY3QuXCYgMTk3OSwgbWF5IGJlIGhlbHBmdWwgYWx0aG91Z2ggdGhleSBwZXJ0YWluIHRvCi1zdXBlcnNlZGVkIGRyYWZ0cyBvZiB0aGUgc3RhbmRhcmQuCi0uU2ggU1RBTkRBUkRTCi0uU3QgLWllZWU3NTQKZGlmZiAtLWdpdCBhL2xpYm0vbWFuL2llZWVfdGVzdC4zIGIvbGlibS9tYW4vaWVlZV90ZXN0LjMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRlYmI2YzguLjAwMDAwMDAKLS0tIGEvbGlibS9tYW4vaWVlZV90ZXN0LjMKKysrIC9kZXYvbnVsbApAQCAtMSw5MyArMCwwIEBACi0uXCIgQ29weXJpZ2h0IChjKSAxOTg1LCAxOTkxIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4KLS5cIiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLlwiCi0uXCIgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0uXCIgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0uXCIgYXJlIG1ldDoKLS5cIiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLlwiICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS5cIiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotLlwiICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLS5cIiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotLlwiIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQotLlwiICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKLS5cIglUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBVbml2ZXJzaXR5IG9mCi0uXCIJQ2FsaWZvcm5pYSwgQmVya2VsZXkgYW5kIGl0cyBjb250cmlidXRvcnMuCi0uXCIgNC4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLS5cIiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKLS5cIiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS5cIgotLlwiIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0uXCIgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0uXCIgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLS5cIiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLS5cIiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotLlwiIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0uXCIgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0uXCIgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLS5cIiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0uXCIgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotLlwiIFNVQ0ggREFNQUdFLgotLlwiCi0uXCIgICAgIGZyb206IEAoIylpZWVlLjMJNi40IChCZXJrZWxleSkgNS82LzkxCi0uXCIgJEZyZWVCU0Q6IHNyYy9saWIvbXN1bi9tYW4vaWVlZV90ZXN0LjMsdiAxLjEzIDIwMDUvMTEvMTcgMTM6MDA6MDAgcnUgRXhwICQKLS5cIgotLkRkIE5vdmVtYmVyIDYsIDIwMDUKLS5EdCBJRUVFX1RFU1QgMwotLk9zCi0uU2ggTkFNRQotLk5tIHNjYWxiICwKLS5ObSBzY2FsYmYgLAotLk5tIHNpZ25pZmljYW5kICwKLS5ObSBzaWduaWZpY2FuZGYKLS5OZCBJRUVFIHRlc3QgZnVuY3Rpb25zCi0uU2ggTElCUkFSWQotLkxiIGxpYm0KLS5TaCBTWU5PUFNJUwotLkluIG1hdGguaAotLkZ0IGRvdWJsZQotLkZuIHNjYWxiICJkb3VibGUgeCIgImRvdWJsZSBuIgotLkZ0IGZsb2F0Ci0uRm4gc2NhbGJmICJmbG9hdCB4IiAiZmxvYXQgbiIKLS5GdCBkb3VibGUKLS5GbiBzaWduaWZpY2FuZCAiZG91YmxlIHgiCi0uRnQgZmxvYXQKLS5GbiBzaWduaWZpY2FuZGYgImZsb2F0IHgiCi0uU2ggREVTQ1JJUFRJT04KLVRoZXNlIGZ1bmN0aW9ucyBhbGxvdyB1c2VycyB0byB0ZXN0IGNvbmZvcm1hbmNlIHRvCi0uU3QgLWllZWU3NTQgLgotVGhlaXIgdXNlIGlzIG5vdCBvdGhlcndpc2UgcmVjb21tZW5kZWQuCi0uUHAKLS5GbiBzY2FsYiB4IG4KLWFuZAotLkZuIHNjYWxiZiB4IG4KLXJldHVybgotLkZhIHggTnMgXCgqKigyKiogTnMgRmEgbiApCi1jb21wdXRlZCBieSBleHBvbmVudCBtYW5pcHVsYXRpb24uCi1JZgotLkZhIG4KLWlzIG5vdCBhbiBpbnRlZ2VyLCBcKihQbVwqKElmLCBvciBhbiBcKihOYSwgdGhlIHJlc3VsdCBpcyB1bnNwZWNpZmllZC4KLS5QcAotLkZuIHNpZ25pZmljYW5kIHgKLWFuZAotLkZuIHNpZ25pZmljYW5kZiB4Ci1yZXR1cm4KLS5GYSBzaWcgLAotd2hlcmUKLS5GYSB4Ci06PQotLkZhIHNpZyBObyBcKCoqIDIqKiBOcyBGYSBuCi13aXRoIDEgXCg8PQotLkZhIHNpZwotPCAyLgotLkZuIHNpZ25pZmljYW5kIHgKLWFuZAotLkZuIHNpZ25pZmljYW5kZiB4Ci1hcmUgbm90IGRlZmluZWQgd2hlbgotLkZhIHgKLWlzIDAsIFwqKFBtXCooSWYsIG9yIFwqKE5hLgotLlNoIFNFRSBBTFNPCi0uWHIgaWVlZSAzICwKLS5YciBtYXRoIDMKLS5TaCBTVEFOREFSRFMKLS5TdCAtaWVlZTc1NApkaWZmIC0tZ2l0IGEvbGlibS9tYW4vaWxvZ2IuMyBiL2xpYm0vbWFuL2lsb2diLjMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwYWM3NTQuLjAwMDAwMDAKLS0tIGEvbGlibS9tYW4vaWxvZ2IuMworKysgL2Rldi9udWxsCkBAIC0xLDEyNyArMCwwIEBACi0uXCIgQ29weXJpZ2h0IChjKSAxOTg1LCAxOTkxIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4KLS5cIiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLlwiCi0uXCIgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0uXCIgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0uXCIgYXJlIG1ldDoKLS5cIiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLlwiICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS5cIiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotLlwiICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLS5cIiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotLlwiIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQotLlwiICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKLS5cIglUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBVbml2ZXJzaXR5IG9mCi0uXCIJQ2FsaWZvcm5pYSwgQmVya2VsZXkgYW5kIGl0cyBjb250cmlidXRvcnMuCi0uXCIgNC4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLS5cIiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKLS5cIiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS5cIgotLlwiIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0uXCIgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0uXCIgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLS5cIiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLS5cIiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotLlwiIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0uXCIgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0uXCIgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLS5cIiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0uXCIgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotLlwiIFNVQ0ggREFNQUdFLgotLlwiCi0uXCIgICAgIGZyb206IEAoIylpZWVlLjMJNi40IChCZXJrZWxleSkgNS82LzkxCi0uXCIgJEZyZWVCU0Q6IHNyYy9saWIvbXN1bi9tYW4vaWxvZ2IuMyx2IDEuMyAyMDA1LzExLzE3IDEzOjAwOjAwIHJ1IEV4cCAkCi0uXCIKLS5EZCBOb3ZlbWJlciA2LCAyMDA1Ci0uRHQgSUxPR0IgMwotLk9zCi0uU2ggTkFNRQotLk5tIGlsb2diICwKLS5ObSBpbG9nYmYgLAotLk5tIGlsb2dibCAsCi0uTm0gbG9nYiAsCi0uTm0gbG9nYmYKLS5OZCBleHRyYWN0IGV4cG9uZW50Ci0uU2ggTElCUkFSWQotLkxiIGxpYm0KLS5TaCBTWU5PUFNJUwotLkluIG1hdGguaAotLkZ0IGludAotLkZuIGlsb2diICJkb3VibGUgeCIKLS5GdCBpbnQKLS5GbiBpbG9nYmYgImZsb2F0IHgiCi0uRnQgaW50Ci0uRm4gaWxvZ2JsICJsb25nIGRvdWJsZSB4IgotLkZ0IGRvdWJsZQotLkZuIGxvZ2IgImRvdWJsZSB4IgotLkZ0IGZsb2F0Ci0uRm4gbG9nYmYgImZsb2F0IHgiCi0uU2ggREVTQ1JJUFRJT04KLS5GbiBpbG9nYiAsCi0uRm4gaWxvZ2JmCi1hbmQKLS5GbiBpbG9nYmwKLXJldHVybgotLkZhIHggTnMgJ3MgZXhwb25lbnQKLWluIGludGVnZXIgZm9ybWF0LgotLkZuIGlsb2diIFwqKFBtXCooSWYKLXJldHVybnMKLS5EdiBJTlRfTUFYICwKLS5GbiBpbG9nYiBcKihQbVwqKE5hCi1yZXR1cm5zCi0uRHYgRlBfSUxPR0JOQU4gLAotYW5kCi0uRm4gaWxvZ2IgMAotcmV0dXJucwotLkR2IEZQX0lMT0dCMCAuCi0uUHAKLS5GbiBsb2diIHgKLWFuZAotLkZuIGxvZ2JmIHgKLXJldHVybgotLkZhIHggTnMgJ3MgZXhwb25lbnQKLWluIGZsb2F0aW5nXC1wb2ludCBmb3JtYXQgd2l0aCB0aGUgc2FtZSBwcmVjaXNpb24gYXMKLS5GYSB4IC4KLS5GbiBsb2diIFwqKFBtXCooSWYKLXJldHVybnMgK1wqKElmLCBhbmQKLS5GbiBsb2diIDAKLXJldHVybnMgLVwqKElmIHdpdGggYSBkaXZpc2lvbiBieSB6ZXJvIGV4Y2VwdGlvbi4KLS5TaCBTRUUgQUxTTwotLlhyIGZyZXhwIDMgLAotLlhyIGllZWUgMyAsCi0uWHIgbWF0aCAzICwKLS5YciBzY2FsYm4gMwotLlNoIFNUQU5EQVJEUwotVGhlCi0uRm4gaWxvZ2IgLAotLkZuIGlsb2diZiAsCi0uRm4gaWxvZ2JsICwKLS5GbiBsb2diCi1hbmQKLS5GbiBsb2diZgotcm91dGluZXMgY29uZm9ybSB0bwotLlN0IC1pc29DLTk5IC4KLS5GbiBsb2diCi1hbmQKLS5GbiBsb2diZgotaW1wbGVtZW50IHRoZSBsb2diIGZ1bmN0aW9uIHJlY29tbWVuZGVkIGJ5Ci0uU3QgLWllZWU3NTQgLgotLlNoIEhJU1RPUlkKLVRoZQotLkZuIGxvZ2IKLWZ1bmN0aW9uIGFwcGVhcmVkIGluCi0uQnggNC4zIC4KLVRoZQotLkZuIGlsb2diCi1mdW5jdGlvbiBhcHBlYXJlZCBpbgotLkZ4IDEuMS41IC4KLVRoZQotLkZuIGlsb2diZgotYW5kCi0uRm4gbG9nYmYKLWZ1bmN0aW9ucyBhcHBlYXJlZCBpbgotLkZ4IDIuMCAuCi1UaGUKLS5GbiBpbG9nYmwKLWZ1bmN0aW9uIGFwcGVhcmVkIGluCi0uRnggNS40IC4KZGlmZiAtLWdpdCBhL2xpYm0vbWFuL2owLjMgYi9saWJtL21hbi9qMC4zCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NmNkNTFjLi4wMDAwMDAwCi0tLSBhL2xpYm0vbWFuL2owLjMKKysrIC9kZXYvbnVsbApAQCAtMSwxNDIgKzAsMCBAQAotLlwiIENvcHlyaWdodCAoYykgMTk4NSwgMTk5MSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuCi0uXCIgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS5cIgotLlwiIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLlwiIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotLlwiIGFyZSBtZXQ6Ci0uXCIgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS5cIiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0uXCIgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS5cIiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0uXCIgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLS5cIiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKLS5cIiAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6Ci0uXCIJVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgVW5pdmVyc2l0eSBvZgotLlwiCUNhbGlmb3JuaWEsIEJlcmtlbGV5IGFuZCBpdHMgY29udHJpYnV0b3JzLgotLlwiIDQuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0uXCIgICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0uXCIgICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0uXCIKLS5cIiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotLlwiIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotLlwiIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0uXCIgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0uXCIgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLS5cIiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotLlwiIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotLlwiIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0uXCIgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotLlwiIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLS5cIiBTVUNIIERBTUFHRS4KLS5cIgotLlwiICAgICBmcm9tOiBAKCMpajAuMwk2LjcgKEJlcmtlbGV5KSA0LzE5LzkxCi0uXCIgJEZyZWVCU0Q6IHNyYy9saWIvbXN1bi9tYW4vajAuMyx2IDEuMTMgMjAwNS8wMS8xNCAyMzoyODoyOCBkYXMgRXhwICQKLS5cIgotLkRkIEphbnVhcnkgMTQsIDIwMDUKLS5EdCBKMCAzCi0uT3MKLS5TaCBOQU1FCi0uTm0gajAgLAotLk5tIGowZiAsCi0uTm0gajEgLAotLk5tIGoxZiAsCi0uTm0gam4gLAotLk5tIGpuZiAsCi0uTm0geTAgLAotLk5tIHkwZiAsCi0uTm0geTEgLAotLk5tIHkxZiAsCi0uTm0geW4gLAotLk5tIHluZgotLk5kIEJlc3NlbCBmdW5jdGlvbnMgb2YgZmlyc3QgYW5kIHNlY29uZCBraW5kCi0uU2ggTElCUkFSWQotLkxiIGxpYm0KLS5TaCBTWU5PUFNJUwotLkluIG1hdGguaAotLkZ0IGRvdWJsZQotLkZuIGowICJkb3VibGUgeCIKLS5GdCBmbG9hdAotLkZuIGowZiAiZmxvYXQgeCIKLS5GdCBkb3VibGUKLS5GbiBqMSAiZG91YmxlIHgiCi0uRnQgZmxvYXQKLS5GbiBqMWYgImZsb2F0IHgiCi0uRnQgZG91YmxlCi0uRm4gam4gImludCBuIiAiZG91YmxlIHgiCi0uRnQgZmxvYXQKLS5GbiBqbmYgImludCBuIiAiZmxvYXQgeCIKLS5GdCBkb3VibGUKLS5GbiB5MCAiZG91YmxlIHgiCi0uRnQgZmxvYXQKLS5GbiB5MGYgImZsb2F0IHgiCi0uRnQgZG91YmxlCi0uRm4geTEgImRvdWJsZSB4IgotLkZ0IGZsb2F0Ci0uRm4geTFmICJmbG9hdCB4IgotLkZ0IGRvdWJsZQotLkZuIHluICJpbnQgbiIgImRvdWJsZSB4IgotLkZ0IGZsb2F0Ci0uRm4geW5mICJpbnQgbiIgImZsb2F0IHgiCi0uU2ggREVTQ1JJUFRJT04KLVRoZSBmdW5jdGlvbnMKLS5GbiBqMCAsCi0uRm4gajBmICwKLS5GbiBqMQotYW5kCi0uRm4gajFmCi1jb21wdXRlIHRoZQotLkVtIEJlc3NlbCBmdW5jdGlvbiBvZiB0aGUgZmlyc3Qga2luZCBvZiB0aGUgb3JkZXIKLTAgYW5kIHRoZQotLkVtIG9yZGVyCi0xLCByZXNwZWN0aXZlbHksCi1mb3IgdGhlCi1yZWFsIHZhbHVlCi0uRmEgeCA7Ci10aGUgZnVuY3Rpb25zCi0uRm4gam4KLWFuZAotLkZuIGpuZgotY29tcHV0ZSB0aGUKLS5FbSBCZXNzZWwgZnVuY3Rpb24gb2YgdGhlIGZpcnN0IGtpbmQgb2YgdGhlIGludGVnZXIKLS5FbSBvcmRlcgotLkZhIG4KLWZvciB0aGUgcmVhbCB2YWx1ZQotLkZhIHggLgotLlBwCi1UaGUgZnVuY3Rpb25zCi0uRm4geTAgLAotLkZuIHkwZiAsCi0uRm4geTEgLAotYW5kCi0uRm4geTFmCi1jb21wdXRlIHRoZSBsaW5lYXJseSBpbmRlcGVuZGVudAotLkVtIEJlc3NlbCBmdW5jdGlvbiBvZiB0aGUgc2Vjb25kIGtpbmQgb2YgdGhlIG9yZGVyCi0wIGFuZCB0aGUKLS5FbSBvcmRlcgotMSwgcmVzcGVjdGl2ZWx5LAotZm9yIHRoZQotcG9zaXRpdmUKLS5FbSByZWFsCi12YWx1ZQotLkZhIHggOwotdGhlIGZ1bmN0aW9ucwotLkZuIHluCi1hbmQKLS5GbiB5bmYKLWNvbXB1dGUgdGhlCi0uRW0gQmVzc2VsIGZ1bmN0aW9uIG9mIHRoZSBzZWNvbmQga2luZCBmb3IgdGhlIGludGVnZXIKLS5FbSBvcmRlcgotLkZhIG4KLWZvciB0aGUgcG9zaXRpdmUKLS5FbSByZWFsCi12YWx1ZQotLkZhIHggLgotLlNoIFJFVFVSTiBWQUxVRVMKLUlmIHRoZXNlIGZ1bmN0aW9ucyBhcmUgc3VjY2Vzc2Z1bCwKLXRoZSBjb21wdXRlZCB2YWx1ZSBpcyByZXR1cm5lZC4KLS5TaCBTRUUgQUxTTwotLlhyIG1hdGggMwotLlNoIEhJU1RPUlkKLVRoaXMgc2V0IG9mIGZ1bmN0aW9ucwotYXBwZWFyZWQgaW4KLS5BdCB2NyAuCmRpZmYgLS1naXQgYS9saWJtL21hbi9sZ2FtbWEuMyBiL2xpYm0vbWFuL2xnYW1tYS4zCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDY0YTQ4Li4wMDAwMDAwCi0tLSBhL2xpYm0vbWFuL2xnYW1tYS4zCisrKyAvZGV2L251bGwKQEAgLTEsMTg1ICswLDAgQEAKLS5cIiBDb3B5cmlnaHQgKGMpIDE5ODUsIDE5OTEgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLgotLlwiIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0uXCIKLS5cIiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS5cIiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLS5cIiBhcmUgbWV0OgotLlwiIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0uXCIgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLlwiIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0uXCIgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotLlwiICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0uXCIgMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCi0uXCIgICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgotLlwiCVRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIFVuaXZlcnNpdHkgb2YKLS5cIglDYWxpZm9ybmlhLCBCZXJrZWxleSBhbmQgaXRzIGNvbnRyaWJ1dG9ycy4KLS5cIiA0LiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotLlwiICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotLlwiICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLlwiCi0uXCIgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLS5cIiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLS5cIiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotLlwiIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotLlwiIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0uXCIgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLS5cIiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLS5cIiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotLlwiIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLS5cIiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0uXCIgU1VDSCBEQU1BR0UuCi0uXCIKLS5cIiAgICAgZnJvbTogQCgjKWxnYW1tYS4zCTYuNiAoQmVya2VsZXkpIDEyLzMvOTIKLS5cIiAkRnJlZUJTRDogc3JjL2xpYi9tc3VuL21hbi9sZ2FtbWEuMyx2IDEuMjIgMjAwNS8wMS8xNiAxNjo0NjoxNCBydSBFeHAgJAotLlwiCi0uRGQgSmFudWFyeSAxNCwgMjAwNQotLkR0IExHQU1NQSAzCi0uT3MKLS5TaCBOQU1FCi0uTm0gbGdhbW1hICwKLS5ObSBsZ2FtbWFfciAsCi0uTm0gbGdhbW1hZiAsCi0uTm0gbGdhbW1hZl9yICwKLS5ObSBnYW1tYSAsCi0uTm0gZ2FtbWFfciAsCi0uTm0gZ2FtbWFmICwKLS5ObSBnYW1tYWZfciAsCi0uTm0gdGdhbW1hCi0uTmQgbG9nIGdhbW1hIGZ1bmN0aW9ucywgZ2FtbWEgZnVuY3Rpb24KLS5TaCBMSUJSQVJZCi0uTGIgbGlibQotLlNoIFNZTk9QU0lTCi0uSW4gbWF0aC5oCi0uRnQgZXh0ZXJuIGludAotLkZhIHNpZ25nYW0gOwotLnNwCi0uRnQgZG91YmxlCi0uRm4gbGdhbW1hICJkb3VibGUgeCIKLS5GdCBkb3VibGUKLS5GbiBsZ2FtbWFfciAiZG91YmxlIHgiICJpbnQgKnNpZ25nYW1wIgotLkZ0IGZsb2F0Ci0uRm4gbGdhbW1hZiAiZmxvYXQgeCIKLS5GdCBmbG9hdAotLkZuIGxnYW1tYWZfciAiZmxvYXQgeCIgImludCAqc2lnbmdhbXAiCi0uRnQgZG91YmxlCi0uRm4gZ2FtbWEgImRvdWJsZSB4IgotLkZ0IGRvdWJsZQotLkZuIGdhbW1hX3IgImRvdWJsZSB4IiAiaW50ICpzaWduZ2FtcCIKLS5GdCBmbG9hdAotLkZuIGdhbW1hZiAiZmxvYXQgeCIKLS5GdCBmbG9hdAotLkZuIGdhbW1hZl9yICJmbG9hdCB4IiAiaW50ICpzaWduZ2FtcCIKLS5GdCBkb3VibGUKLS5GbiB0Z2FtbWEgImRvdWJsZSB4IgotLlNoIERFU0NSSVBUSU9OCi0uRm4gbGdhbW1hIHgKLWFuZAotLkZuIGxnYW1tYWYgeAotLmlmIHQgXHtcCi1yZXR1cm4gbG5cfHxcKCpHKHgpfCB3aGVyZQotLkJkIC11bmZpbGxlZCAtb2Zmc2V0IGluZGVudAotXCgqRyh4KSA9IFwoaXNcZFxzOFx6MFxzMTBcdVx1XHM4XChpZlxzMTBcZCB0XHVcczh4XC0xXHMxMFxkIGVcdVxzOFwtdFxzMTBcZCBkdAlmb3IgeCA+IDAgYW5kCi1cKCpHKHgpID0gXCgqcC8oXCgqRygxXC14KVx8c2luKFwoKnB4KSkJZm9yIHggPCAxLgotLkVkCi0uXH0KLS5pZiBuIFwKLXJldHVybiBsblx8fFwoKkcoeCl8LgotLlBwCi1UaGUgZXh0ZXJuYWwgaW50ZWdlcgotLkZhIHNpZ25nYW0KLXJldHVybnMgdGhlIHNpZ24gb2YgXCgqRyh4KS4KLS5QcAotLkZuIGxnYW1tYV9yIHggc2lnbmdhbXAKLWFuZAotLkZuIGxnYW1tYWZfciB4IHNpZ25nYW1wCi1wcm92aWRlIHRoZSBzYW1lIGZ1bmN0aW9uYWxpdHkgYXMKLS5GbiBsZ2FtbWEgeAotYW5kCi0uRm4gbGdhbW1hZiB4Ci1idXQgdGhlIGNhbGxlciBtdXN0IHByb3ZpZGUgYW4gaW50ZWdlciB0byBzdG9yZSB0aGUgc2lnbiBvZiBcKCpHKHgpLgotLlBwCi0uRm4gZ2FtbWEgLAotLkZuIGdhbW1hZiAsCi0uRm4gZ2FtbWFfciAsCi1hbmQKLS5GbiBnYW1tYWZfcgotYXJlIGRlcHJlY2F0ZWQgYWxpYXNlcyBmb3IKLS5GbiBsZ2FtbWEgLAotLkZuIGxnYW1tYWYgLAotLkZuIGxnYW1tYV9yICwKLWFuZAotLkZuIGxnYW1tYWZfciAsCi1yZXNwZWN0aXZlbHkuCi0uRm4gdGdhbW1hIHgKLXJldHVybnMgXCgqRyh4KSwgd2l0aCBubyBlZmZlY3Qgb24KLS5GYSBzaWduZ2FtIC4KLS5TaCBJRElPU1lOQ1JBU0lFUwotRG8gbm90IHVzZSB0aGUgZXhwcmVzc2lvbgotLkRxIExpIHNpZ25nYW1cKCoqZXhwKGxnYW1tYSh4KSkKLXRvIGNvbXB1dGUgZyA6PSBcKCpHKHgpLgotSW5zdGVhZCB1c2UgYSBwcm9ncmFtIGxpa2UgdGhpcyAoaW4gQyk6Ci0uQmQgLWxpdGVyYWwgLW9mZnNldCBpbmRlbnQKLWxnID0gbGdhbW1hKHgpOyBnID0gc2lnbmdhbVwoKipleHAobGcpOwotLkVkCi0uUHAKLU9ubHkgYWZ0ZXIKLS5GbiBsZ2FtbWEKLW9yCi0uRm4gbGdhbW1hZgotaGFzIHJldHVybmVkIGNhbiBzaWduZ2FtIGJlIGNvcnJlY3QuCi0uUHAKLUZvciBhcmd1bWVudHMgaW4gaXRzIHJhbmdlLAotLkZuIHRnYW1tYQotaXMgcHJlZmVycmVkLCBhcyBmb3IgcG9zaXRpdmUgYXJndW1lbnRzCi1pdCBpcyBhY2N1cmF0ZSB0byB3aXRoaW4gb25lIHVuaXQgaW4gdGhlIGxhc3QgcGxhY2UuCi1FeHBvbmVudGlhdGlvbiBvZgotLkZuIGxnYW1tYQotd2lsbCBsb3NlIHVwIHRvIDEwIHNpZ25pZmljYW50IGJpdHMuCi0uU2ggUkVUVVJOIFZBTFVFUwotLkZuIGdhbW1hICwKLS5GbiBnYW1tYV9yICwKLS5GbiBnYW1tYWYgLAotLkZuIGdhbW1hZl9yICwKLS5GbiBsZ2FtbWEgLAotLkZuIGxnYW1tYV9yICwKLS5GbiBsZ2FtbWFmICwKLWFuZAotLkZuIGxnYW1tYWZfcgotcmV0dXJuIGFwcHJvcHJpYXRlIHZhbHVlcyB1bmxlc3MgYW4gYXJndW1lbnQgaXMgb3V0IG9mIHJhbmdlLgotT3ZlcmZsb3cgd2lsbCBvY2N1ciBmb3Igc3VmZmljaWVudGx5IGxhcmdlIHBvc2l0aXZlIHZhbHVlcywgYW5kCi1ub24tcG9zaXRpdmUgaW50ZWdlcnMuCi1Gb3IgbGFyZ2Ugbm9uLWludGVnZXIgbmVnYXRpdmUgdmFsdWVzLAotLkZuIHRnYW1tYQotd2lsbCB1bmRlcmZsb3cuCi0uU2ggU0VFIEFMU08KLS5YciBtYXRoIDMKLS5TaCBTVEFOREFSRFMKLVRoZQotLkZuIGxnYW1tYQotYW5kCi0uRm4gdGdhbW1hCi1mdW5jdGlvbnMgYXJlIGV4cGVjdGVkIHRvIGNvbmZvcm0gdG8KLS5TdCAtaXNvQy05OSAuCi0uU2ggSElTVE9SWQotVGhlCi0uRm4gbGdhbW1hCi1mdW5jdGlvbiBhcHBlYXJlZCBpbgotLkJ4IDQuMyAuCi1UaGUKLS5GbiBnYW1tYQotZnVuY3Rpb24gYXBwZWFyZWQgaW4KLS5CeCA0LjQKLWFzIGEgZnVuY3Rpb24gd2hpY2ggY29tcHV0ZWQgXCgqRyh4KS4KLVRoaXMgdmVyc2lvbiB3YXMgdXNlZCBpbgotLkZ4IDEuMSAuCi1UaGUgbmFtZQotLkZuIGdhbW1hCi13YXMgb3JpZ2luYWxseSBkZWRpY2F0ZWQgdG8gdGhlCi0uRm4gbGdhbW1hCi1mdW5jdGlvbiwKLWFuZCB0aGF0IHVzYWdlIHdhcyByZXN0b3JlZCBieSBzd2l0Y2hpbmcgdG8gU3VuJ3MgZmRsaWJtIGluCi0uRnggMS4xLjUgLgotVGhlCi0uRm4gdGdhbW1hCi1mdW5jdGlvbiBhcHBlYXJlZCBpbgotLkZ4IDUuMCAuCmRpZmYgLS1naXQgYS9saWJtL21hbi9scmludC4zIGIvbGlibS9tYW4vbHJpbnQuMwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDdkZTA5My4uMDAwMDAwMAotLS0gYS9saWJtL21hbi9scmludC4zCisrKyAvZGV2L251bGwKQEAgLTEsOTQgKzAsMCBAQAotLlwiIENvcHlyaWdodCAoYykgMjAwNSBEYXZpZCBTY2h1bHR6IDxkYXNARnJlZUJTRC5vcmc+Ci0uXCIgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS5cIgotLlwiIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLlwiIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotLlwiIGFyZSBtZXQ6Ci0uXCIgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS5cIiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0uXCIgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS5cIiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0uXCIgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLS5cIgotLlwiIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLS5cIiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLS5cIiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotLlwiIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0uXCIgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLS5cIiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotLlwiIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotLlwiIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0uXCIgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotLlwiIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLS5cIiBTVUNIIERBTUFHRS4KLS5cIgotLlwiICRGcmVlQlNEOiBzcmMvbGliL21zdW4vbWFuL2xyaW50LjMsdiAxLjIgMjAwNS8wMS8xMyAxMDo0MzowMSBydSBFeHAgJAotLlwiCi0uRGQgSmFudWFyeSAxMSwgMjAwNQotLkR0IExSSU5UIDMKLS5PcwotLlNoIE5BTUUKLS5ObSBsbHJpbnQgLAotLk5tIGxscmludGYgLAotLk5tIGxyaW50ICwKLS5ObSBscmludGYKLS5OZCAiY29udmVydCB0byBpbnRlZ2VyIgotLlNoIExJQlJBUlkKLS5MYiBsaWJtCi0uU2ggU1lOT1BTSVMKLS5JbiBtYXRoLmgKLS5GdCAibG9uZyBsb25nIgotLkZuIGxscmludCAiZG91YmxlIHgiCi0uRnQgImxvbmcgbG9uZyIKLS5GbiBsbHJpbnRmICJmbG9hdCB4IgotLkZ0IGxvbmcKLS5GbiBscmludCAiZG91YmxlIHgiCi0uRnQgbG9uZwotLkZuIGxyaW50ZiAiZmxvYXQgeCIKLS5TaCBERVNDUklQVElPTgotVGhlCi0uRm4gbHJpbnQKLWZ1bmN0aW9uIHJldHVybnMgdGhlIGludGVnZXIgbmVhcmVzdCB0byBpdHMgYXJndW1lbnQKLS5GYSB4Ci1hY2NvcmRpbmcgdG8gdGhlIGN1cnJlbnQgcm91bmRpbmcgbW9kZS4KLUlmIHRoZSByb3VuZGVkIHJlc3VsdCBpcyB0b28gbGFyZ2UgdG8gYmUgcmVwcmVzZW50ZWQgYXMgYQotLlZ0IGxvbmcKLXZhbHVlLCBhbiBpbnZhbGlkIGV4Y2VwdGlvbiBpcyByYWlzZWQgYW5kIHRoZSByZXR1cm4gdmFsdWUgaXMgdW5kZWZpbmVkLgotT3RoZXJ3aXNlLCBpZgotLkZhIHgKLWlzIG5vdCBhbiBpbnRlZ2VyLAotLkZuIGxyaW50Ci1yYWlzZXMgYW4gaW5leGFjdCBleGNlcHRpb24uCi1XaGVuIHRoZSByb3VuZGVkIHJlc3VsdCBpcyByZXByZXNlbnRhYmxlIGFzIGEKLS5WdCBsb25nICwKLXRoZSBleHByZXNzaW9uCi0uRm4gbHJpbnQgeAotaXMgZXF1aXZhbGVudCB0bwotLlBvIFZ0IGxvbmcgUGMgTnMgRm4gcmludCB4Ci0oYWx0aG91Z2ggdGhlIGZvcm1lciBtYXkgYmUgbW9yZSBlZmZpY2llbnQpLgotLlBwCi1UaGUKLS5GbiBsbHJpbnQgLAotLkZuIGxscmludGYgLAotYW5kCi0uRm4gbHJpbnRmCi1mdW5jdGlvbnMgZGlmZmVyIGZyb20KLS5GbiBscmludAotb25seSBpbiB0aGVpciBpbnB1dCBhbmQgb3V0cHV0IHR5cGVzLgotLlNoIFNFRSBBTFNPCi0uWHIgbHJvdW5kIDMgLAotLlhyIG1hdGggMyAsCi0uWHIgcmludCAzICwKLS5YciByb3VuZCAzCi0uU2ggU1RBTkRBUkRTCi1UaGUKLS5GbiBsbHJpbnQgLAotLkZuIGxscmludGYgLAotLkZuIGxyaW50ICwKLWFuZAotLkZuIGxyaW50ZgotZnVuY3Rpb25zIGNvbmZvcm0gdG8KLS5TdCAtaXNvQy05OSAuCi0uU2ggSElTVE9SWQotVGhlc2Ugcm91dGluZXMgZmlyc3QgYXBwZWFyZWQgaW4KLS5GeCA1LjQgLgpkaWZmIC0tZ2l0IGEvbGlibS9tYW4vbHJvdW5kLjMgYi9saWJtL21hbi9scm91bmQuMwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDNlNTNjMi4uMDAwMDAwMAotLS0gYS9saWJtL21hbi9scm91bmQuMworKysgL2Rldi9udWxsCkBAIC0xLDExMiArMCwwIEBACi0uXCIgQ29weXJpZ2h0IChjKSAyMDA1IERhdmlkIFNjaHVsdHogPGRhc0BGcmVlQlNELm9yZz4KLS5cIiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLlwiCi0uXCIgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0uXCIgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0uXCIgYXJlIG1ldDoKLS5cIiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLlwiICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS5cIiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotLlwiICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLS5cIiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotLlwiCi0uXCIgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotLlwiIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotLlwiIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0uXCIgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLS5cIiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotLlwiIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0uXCIgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0uXCIgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLS5cIiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0uXCIgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotLlwiIFNVQ0ggREFNQUdFLgotLlwiCi0uXCIgJEZyZWVCU0Q6IHNyYy9saWIvbXN1bi9tYW4vbHJvdW5kLjMsdiAxLjQgMjAwNS8wNi8xNSAxOTowNDowNCBydSBFeHAgJAotLlwiCi0uRGQgQXByaWwgNywgMjAwNQotLkR0IExST1VORCAzCi0uT3MKLS5TaCBOQU1FCi0uTm0gbGxyb3VuZCAsCi0uTm0gbGxyb3VuZGYgLAotLk5tIGxscm91bmRsICwKLS5ObSBscm91bmQgLAotLk5tIGxyb3VuZGYgLAotLk5tIGxyb3VuZGwKLS5OZCAiY29udmVydCB0byBuZWFyZXN0IGludGVncmFsIHZhbHVlIgotLlNoIExJQlJBUlkKLS5MYiBsaWJtCi0uU2ggU1lOT1BTSVMKLS5JbiBtYXRoLmgKLS5GdCAibG9uZyBsb25nIgotLkZuIGxscm91bmQgImRvdWJsZSB4IgotLkZ0ICJsb25nIGxvbmciCi0uRm4gbGxyb3VuZGYgImZsb2F0IHgiCi0uRnQgImxvbmcgbG9uZyIKLS5GbiBsbHJvdW5kbCAibG9uZyBkb3VibGUgeCIKLS5GdCBsb25nCi0uRm4gbHJvdW5kICJkb3VibGUgeCIKLS5GdCBsb25nCi0uRm4gbHJvdW5kZiAiZmxvYXQgeCIKLS5GdCBsb25nCi0uRm4gbHJvdW5kbCAibG9uZyBkb3VibGUgeCIKLS5TaCBERVNDUklQVElPTgotVGhlCi0uRm4gbHJvdW5kCi1mdW5jdGlvbiByZXR1cm5zIHRoZSBpbnRlZ2VyIG5lYXJlc3QgdG8gaXRzIGFyZ3VtZW50Ci0uRmEgeCAsCi1yb3VuZGluZyBhd2F5IGZyb20gemVybyBpbiBoYWxmd2F5IGNhc2VzLgotSWYgdGhlIHJvdW5kZWQgcmVzdWx0IGlzIHRvbyBsYXJnZSB0byBiZSByZXByZXNlbnRlZCBhcyBhCi0uVnQgbG9uZwotdmFsdWUsIGFuIGludmFsaWQgZXhjZXB0aW9uIGlzIHJhaXNlZCBhbmQgdGhlIHJldHVybiB2YWx1ZSBpcyB1bmRlZmluZWQuCi1PdGhlcndpc2UsIGlmCi0uRmEgeAotaXMgbm90IGFuIGludGVnZXIsCi0uRm4gbHJvdW5kCi1tYXkgcmFpc2UgYW4gaW5leGFjdCBleGNlcHRpb24uCi1XaGVuIHRoZSByb3VuZGVkIHJlc3VsdCBpcyByZXByZXNlbnRhYmxlIGFzIGEKLS5WdCBsb25nICwKLXRoZSBleHByZXNzaW9uCi0uRm4gbHJvdW5kIHgKLWlzIGVxdWl2YWxlbnQgdG8KLS5QbyBWdCBsb25nIFBjIE5zIEZuIHJvdW5kIHgKLShhbHRob3VnaCB0aGUgZm9ybWVyIG1heSBiZSBtb3JlIGVmZmljaWVudCkuCi0uUHAKLVRoZQotLkZuIGxscm91bmQgLAotLkZuIGxscm91bmRmICwKLS5GbiBsbHJvdW5kbCAsCi0uRm4gbHJvdW5kZgotYW5kCi0uRm4gbHJvdW5kbAotZnVuY3Rpb25zIGRpZmZlciBmcm9tCi0uRm4gbHJvdW5kCi1vbmx5IGluIHRoZWlyIGlucHV0IGFuZCBvdXRwdXQgdHlwZXMuCi0uU2ggU0VFIEFMU08KLS5YciBscmludCAzICwKLS5YciBtYXRoIDMgLAotLlhyIHJpbnQgMyAsCi0uWHIgcm91bmQgMwotLlNoIFNUQU5EQVJEUwotVGhlCi0uRm4gbGxyb3VuZCAsCi0uRm4gbGxyb3VuZGYgLAotLkZuIGxscm91bmRsICwKLS5GbiBscm91bmQgLAotLkZuIGxyb3VuZGYgLAotYW5kCi0uRm4gbHJvdW5kbAotZnVuY3Rpb25zIGNvbmZvcm0gdG8KLS5TdCAtaXNvQy05OSAuCi0uU2ggSElTVE9SWQotVGhlCi0uVnQgZmxvYXQKLWFuZAotLlZ0IGRvdWJsZQotdmVyc2lvbnMgb2YgdGhlc2Ugcm91dGluZXMgZmlyc3QgYXBwZWFyZWQgaW4KLS5GeCA1LjQgLgotVGhlCi0uVnQgImxvbmcgZG91YmxlIgotdmVyc2lvbnMgYXBwZWFyZWQgaW4KLS5GeCA2LjAgLgpkaWZmIC0tZ2l0IGEvbGlibS9tYW4vbWF0aC4zIGIvbGlibS9tYW4vbWF0aC4zCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MjhiNWUwLi4wMDAwMDAwCi0tLSBhL2xpYm0vbWFuL21hdGguMworKysgL2Rldi9udWxsCkBAIC0xLDI0MiArMCwwIEBACi0uXCIgQ29weXJpZ2h0IChjKSAxOTg1IFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4KLS5cIiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLlwiCi0uXCIgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0uXCIgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0uXCIgYXJlIG1ldDoKLS5cIiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLlwiICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS5cIiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotLlwiICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLS5cIiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotLlwiIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQotLlwiICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKLS5cIglUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBVbml2ZXJzaXR5IG9mCi0uXCIJQ2FsaWZvcm5pYSwgQmVya2VsZXkgYW5kIGl0cyBjb250cmlidXRvcnMuCi0uXCIgNC4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLS5cIiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKLS5cIiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS5cIgotLlwiIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0uXCIgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0uXCIgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLS5cIiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLS5cIiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotLlwiIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0uXCIgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0uXCIgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLS5cIiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0uXCIgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotLlwiIFNVQ0ggREFNQUdFLgotLlwiCi0uXCIJZnJvbTogQCgjKW1hdGguMwk2LjEwIChCZXJrZWxleSkgNS82LzkxCi0uXCIgJEZyZWVCU0Q6IHNyYy9saWIvbXN1bi9tYW4vbWF0aC4zLHYgMS4yNyAyMDA1LzExLzE3IDEzOjAwOjAwIHJ1IEV4cCAkCi0uXCIKLS5EZCBOb3ZlbWJlciA2LCAyMDA1Ci0uRHQgTUFUSCAzCi0uT3MKLS5pZiBuIFx7XAotLmNoYXIgXFtzcl0gInNxcnQKLS5cfQotLlNoIE5BTUUKLS5ObSBtYXRoCi0uTmQgImZsb2F0aW5nLXBvaW50IG1hdGhlbWF0aWNhbCBsaWJyYXJ5IgotLlNoIExJQlJBUlkKLS5MYiBsaWJtCi0uU2ggU1lOT1BTSVMKLS5JbiBtYXRoLmgKLS5TaCBERVNDUklQVElPTgotVGhlc2UgZnVuY3Rpb25zIGNvbnN0aXR1dGUgdGhlIEMgbWF0aCBsaWJyYXJ5LgotLlNoICJMSVNUIE9GIEZVTkNUSU9OUyIKLUVhY2ggb2YgdGhlIGZvbGxvd2luZwotLlZ0IGRvdWJsZQotZnVuY3Rpb25zIGhhcyBhCi0uVnQgZmxvYXQKLWNvdW50ZXJwYXJ0IHdpdGggYW4KLS5RbCBmCi1hcHBlbmRlZCB0byB0aGUgbmFtZSBhbmQgYQotLlZ0ICJsb25nIGRvdWJsZSIKLWNvdW50ZXJwYXJ0IHdpdGggYW4KLS5RbCBsCi1hcHBlbmRlZC4KLUFzIGFuIGV4YW1wbGUsIHRoZQotLlZ0IGZsb2F0Ci1hbmQKLS5WdCAibG9uZyBkb3VibGUiCi1jb3VudGVycGFydHMgb2YKLS5GdCBkb3VibGUKLS5GbiBhY29zICJkb3VibGUgeCIKLWFyZQotLkZ0IGZsb2F0Ci0uRm4gYWNvc2YgImZsb2F0IHgiCi1hbmQKLS5GdCAibG9uZyBkb3VibGUiCi0uRm4gYWNvc2wgImxvbmcgZG91YmxlIHgiICwKLXJlc3BlY3RpdmVseS4KLS5kZSBDbAotLkJsIC1jb2x1bW4gImlzZ3JlYXRlcmVxdWFsIiAiYmVzc2VsIGZ1bmN0aW9uIG9mIHRoZSBzZWNvbmQga2luZCBvZiB0aGUgb3JkZXIgMCIKLS5FbSAiTmFtZQlEZXNjcmlwdGlvbiIKLS4uCi0uU3MgQWxnZWJyYWljIEZ1bmN0aW9ucwotLkNsCi1jYnJ0CWN1YmUgcm9vdAotZm1hCWZ1c2VkIG11bHRpcGx5LWFkZAotaHlwb3QJRXVjbGlkZWFuIGRpc3RhbmNlCi1zcXJ0CXNxdWFyZSByb290Ci0uRWwKLS5TcyBDbGFzc2lmaWNhdGlvbiBGdW5jdGlvbnMKLS5DbAotZnBjbGFzc2lmeQljbGFzc2lmeSBhIGZsb2F0aW5nLXBvaW50IHZhbHVlCi1pc2Zpbml0ZQlkZXRlcm1pbmUgd2hldGhlciBhIHZhbHVlIGlzIGZpbml0ZQotaXNpbmYJZGV0ZXJtaW5lIHdoZXRoZXIgYSB2YWx1ZSBpcyBpbmZpbml0ZQotaXNuYW4JZGV0ZXJtaW5lIHdoZXRoZXIgYSB2YWx1ZSBpcyBcKihOYQotaXNub3JtYWwJZGV0ZXJtaW5lIHdoZXRoZXIgYSB2YWx1ZSBpcyBub3JtYWxpemVkCi0uRWwKLS5TcyBFeHBvbmVudCBNYW5pcHVsYXRpb24gRnVuY3Rpb25zCi0uQ2wKLWZyZXhwCWV4dHJhY3QgZXhwb25lbnQgYW5kIG1hbnRpc3NhCi1pbG9nYglleHRyYWN0IGV4cG9uZW50Ci1sZGV4cAltdWx0aXBseSBieSBwb3dlciBvZiAyCi1sb2diCWV4dHJhY3QgZXhwb25lbnQKLXNjYWxibG4JYWRqdXN0IGV4cG9uZW50Ci1zY2FsYm4JYWRqdXN0IGV4cG9uZW50Ci0uRWwKLS5TcyBFeHRyZW11bS0gYW5kIFNpZ24tUmVsYXRlZCBGdW5jdGlvbnMKLS5DbAotY29weXNpZ24JY29weSBzaWduIGJpdAotZmFicwlhYnNvbHV0ZSB2YWx1ZQotZmRpbQlwb3NpdGl2ZSBkaWZmZXJlbmNlCi1mbWF4CW1heGltdW0gZnVuY3Rpb24KLWZtaW4JbWluaW11bSBmdW5jdGlvbgotc2lnbmJpdAlleHRyYWN0IHNpZ24gYml0Ci0uRWwKLS5cIiAuU3MgTm90IGEgTnVtYmVyCi0uXCIgLkNsCi0uXCIgbmFuCXJldHVybiBxdWlldCBcKihOYSkJMAotLlwiIC5FbAotLlNzIFJlc2lkdWUgYW5kIFJvdW5kaW5nIEZ1bmN0aW9ucwotLkNsCi1jZWlsCWludGVnZXIgbm8gbGVzcyB0aGFuCi1mbG9vcglpbnRlZ2VyIG5vIGdyZWF0ZXIgdGhhbgotZm1vZAlwb3NpdGl2ZSByZW1haW5kZXIKLWxscmludAlyb3VuZCB0byBpbnRlZ2VyIGluIGZpeGVkLXBvaW50IGZvcm1hdAotbGxyb3VuZAlyb3VuZCB0byBuZWFyZXN0IGludGVnZXIgaW4gZml4ZWQtcG9pbnQgZm9ybWF0Ci1scmludAlyb3VuZCB0byBpbnRlZ2VyIGluIGZpeGVkLXBvaW50IGZvcm1hdAotbHJvdW5kCXJvdW5kIHRvIG5lYXJlc3QgaW50ZWdlciBpbiBmaXhlZC1wb2ludCBmb3JtYXQKLW1vZGYJZXh0cmFjdCBpbnRlZ2VyIGFuZCBmcmFjdGlvbmFsIHBhcnRzCi1uZWFyYnlpbnQJcm91bmQgdG8gaW50ZWdlciAoc2lsZW50KQotbmV4dGFmdGVyCW5leHQgcmVwcmVzZW50YWJsZSB2YWx1ZQotbmV4dHRvd2FyZAluZXh0IHJlcHJlc2VudGFibGUgdmFsdWUKLXJlbWFpbmRlcglyZW1haW5kZXIKLXJlbXF1bwlyZW1haW5kZXIgd2l0aCBwYXJ0aWFsIHF1b3RpZW50Ci1yaW50CXJvdW5kIHRvIGludGVnZXIKLXJvdW5kCXJvdW5kIHRvIG5lYXJlc3QgaW50ZWdlcgotdHJ1bmMJaW50ZWdlciBubyBncmVhdGVyIGluIG1hZ25pdHVkZSB0aGFuCi0uRWwKLS5QcAotVGhlCi0uRm4gY2VpbCAsCi0uRm4gZmxvb3IgLAotLkZuIGxscm91bmQgLAotLkZuIGxyb3VuZCAsCi0uRm4gcm91bmQgLAotYW5kCi0uRm4gdHJ1bmMKLWZ1bmN0aW9ucyByb3VuZCBpbiBwcmVkZXRlcm1pbmVkIGRpcmVjdGlvbnMsIHdoZXJlYXMKLS5GbiBsbHJpbnQgLAotLkZuIGxyaW50ICwKLWFuZAotLkZuIHJpbnQKLXJvdW5kIGFjY29yZGluZyB0byB0aGUgY3VycmVudCAoZHluYW1pYykgcm91bmRpbmcgbW9kZS4KLUZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGNvbnRyb2xsaW5nIHRoZSBkeW5hbWljIHJvdW5kaW5nIG1vZGUsIHNlZQotLlhyIGZlbnYgMwotYW5kCi0uWHIgZmVzZXRyb3VuZCAzIC4KLS5TcyBTaWxlbnQgT3JkZXIgUHJlZGljYXRlcwotLkNsCi1pc2dyZWF0ZXIJZ3JlYXRlciB0aGFuIHJlbGF0aW9uCi1pc2dyZWF0ZXJlcXVhbAlncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gcmVsYXRpb24KLWlzbGVzcwlsZXNzIHRoYW4gcmVsYXRpb24KLWlzbGVzc2VxdWFsCWxlc3MgdGhhbiBvciBlcXVhbCB0byByZWxhdGlvbgotaXNsZXNzZ3JlYXRlcglsZXNzIHRoYW4gb3IgZ3JlYXRlciB0aGFuIHJlbGF0aW9uCi1pc3Vub3JkZXJlZAl1bm9yZGVyZWQgcmVsYXRpb24KLS5FbAotLlNzIFRyYW5zY2VuZGVudGFsIEZ1bmN0aW9ucwotLkNsCi1hY29zCWludmVyc2UgY29zaW5lCi1hY29zaAlpbnZlcnNlIGh5cGVyYm9saWMgY29zaW5lCi1hc2luCWludmVyc2Ugc2luZQotYXNpbmgJaW52ZXJzZSBoeXBlcmJvbGljIHNpbmUKLWF0YW4JaW52ZXJzZSB0YW5nZW50Ci1hdGFuaAlpbnZlcnNlIGh5cGVyYm9saWMgdGFuZ2VudAotYXRhbjIJYXRhbih5L3gpOyBjb21wbGV4IGFyZ3VtZW50Ci1jb3MJY29zaW5lCi1jb3NoCWh5cGVyYm9saWMgY29zaW5lCi1lcmYJZXJyb3IgZnVuY3Rpb24KLWVyZmMJY29tcGxlbWVudGFyeSBlcnJvciBmdW5jdGlvbgotZXhwCWV4cG9uZW50aWFsIGJhc2UgZQotZXhwMglleHBvbmVudGlhbCBiYXNlIDIKLWV4cG0xCWV4cCh4KVwtMQotajAJQmVzc2VsIGZ1bmN0aW9uIG9mIHRoZSBmaXJzdCBraW5kIG9mIHRoZSBvcmRlciAwCi1qMQlCZXNzZWwgZnVuY3Rpb24gb2YgdGhlIGZpcnN0IGtpbmQgb2YgdGhlIG9yZGVyIDEKLWpuCUJlc3NlbCBmdW5jdGlvbiBvZiB0aGUgZmlyc3Qga2luZCBvZiB0aGUgb3JkZXIgbgotbGdhbW1hCWxvZyBnYW1tYSBmdW5jdGlvbgotbG9nCW5hdHVyYWwgbG9nYXJpdGhtCi1sb2cxMAlsb2dhcml0aG0gdG8gYmFzZSAxMAotbG9nMXAJbG9nKDEreCkKLS5cIiBsb2cyCWJhc2UgMiBsb2dhcml0aG0KLXBvdwlleHBvbmVudGlhbCB4Kip5Ci1zaW4JdHJpZ29ub21ldHJpYyBmdW5jdGlvbgotc2luaAloeXBlcmJvbGljIGZ1bmN0aW9uCi10YW4JdHJpZ29ub21ldHJpYyBmdW5jdGlvbgotdGFuaAloeXBlcmJvbGljIGZ1bmN0aW9uCi10Z2FtbWEJZ2FtbWEgZnVuY3Rpb24KLXkwCUJlc3NlbCBmdW5jdGlvbiBvZiB0aGUgc2Vjb25kIGtpbmQgb2YgdGhlIG9yZGVyIDAKLXkxCUJlc3NlbCBmdW5jdGlvbiBvZiB0aGUgc2Vjb25kIGtpbmQgb2YgdGhlIG9yZGVyIDEKLXluCUJlc3NlbCBmdW5jdGlvbiBvZiB0aGUgc2Vjb25kIGtpbmQgb2YgdGhlIG9yZGVyIG4KLS5FbAotLlBwCi1Vbmxpa2UgdGhlIGFsZ2VicmFpYyBmdW5jdGlvbnMgbGlzdGVkIGVhcmxpZXIsIHRoZSByb3V0aW5lcwotaW4gdGhpcyBzZWN0aW9uIG1heSBub3QgcHJvZHVjZSBhIHJlc3VsdCB0aGF0IGlzIGNvcnJlY3RseSByb3VuZGVkLAotc28gcmVwcm9kdWNpYmxlIHJlc3VsdHMgY2Fubm90IGJlIGd1YXJhbnRlZWQgYWNyb3NzIHBsYXRmb3Jtcy4KLUZvciBtb3N0IG9mIHRoZXNlIGZ1bmN0aW9ucywgaG93ZXZlciwgaW5jb3JyZWN0IHJvdW5kaW5nIG9jY3VycwotcmFyZWx5LCBhbmQgdGhlbiBvbmx5IGluIHZlcnktY2xvc2UtdG8taGFsZndheSBjYXNlcy4KLS5TaCBTRUUgQUxTTwotLlhyIGZlbnYgMyAsCi0uWHIgaWVlZSAzCi0uU2ggSElTVE9SWQotQSBtYXRoIGxpYnJhcnkgd2l0aCBtYW55IG9mIHRoZSBwcmVzZW50IGZ1bmN0aW9ucyBhcHBlYXJlZCBpbgotLkF0IHY3IC4KLVRoZSBsaWJyYXJ5IHdhcyBzdWJzdGFudGlhbGx5IHJld3JpdHRlbiBmb3IKLS5CeCA0LjMKLXRvIHByb3ZpZGUKLWJldHRlciBhY2N1cmFjeSBhbmQgc3BlZWQgb24gbWFjaGluZXMgc3VwcG9ydGluZyBlaXRoZXIgVkFYCi1vciBJRUVFIDc1NCBmbG9hdGluZy1wb2ludC4KLU1vc3Qgb2YgdGhpcyBsaWJyYXJ5IHdhcyByZXBsYWNlZCB3aXRoIEZETElCTSwgZGV2ZWxvcGVkIGF0IFN1bgotTWljcm9zeXN0ZW1zLCBpbgotLkZ4IDEuMS41IC4KLUFkZGl0aW9uYWwgcm91dGluZXMsIGluY2x1ZGluZyBvbmVzIGZvcgotLlZ0IGZsb2F0Ci1hbmQKLS5WdCBsb25nIGRvdWJsZQotdmFsdWVzLCB3ZXJlIHdyaXR0ZW4gZm9yIG9yIGltcG9ydGVkIGludG8gc3Vic2VxdWVudCB2ZXJzaW9ucyBvZiBGcmVlQlNELgotLlNoIEJVR1MKLVRoZQotLkZuIGxvZzIKLWFuZAotLkZuIG5hbgotZnVuY3Rpb25zIGFyZSBtaXNzaW5nLCBhbmQgbWFueSBmdW5jdGlvbnMgYXJlIG5vdCBhdmFpbGFibGUgaW4gdGhlaXIKLS5WdCAibG9uZyBkb3VibGUiCi12YXJpYW50cy4KLS5QcAotTWFueSBvZiB0aGUgcm91dGluZXMgdG8gY29tcHV0ZSB0cmFuc2NlbmRlbnRhbCBmdW5jdGlvbnMgcHJvZHVjZQotaW5hY2N1cmF0ZSByZXN1bHRzIGluIG90aGVyIHRoYW4gdGhlIGRlZmF1bHQgcm91bmRpbmcgbW9kZS4KLS5QcAotT24gc29tZSBhcmNoaXRlY3R1cmVzLCB0cmlnb25vbWV0cmljIGFyZ3VtZW50IHJlZHVjdGlvbiBpcyBub3QKLXBlcmZvcm1lZCBhY2N1cmF0ZWx5LCByZXN1bHRpbmcgaW4gZXJyb3JzIGdyZWF0ZXIgdGhhbiAxCi0uRW0gdWxwCi1mb3IgbGFyZ2UgYXJndW1lbnRzIHRvCi0uRm4gY29zICwKLS5GbiBzaW4gLAotYW5kCi0uRm4gdGFuIC4KZGlmZiAtLWdpdCBhL2xpYm0vbWFuL25leHRhZnRlci4zIGIvbGlibS9tYW4vbmV4dGFmdGVyLjMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFjOTRmYjcuLjAwMDAwMDAKLS0tIGEvbGlibS9tYW4vbmV4dGFmdGVyLjMKKysrIC9kZXYvbnVsbApAQCAtMSwxMDAgKzAsMCBAQAotLlwiIENvcHlyaWdodCAoYykgMTk4NSwgMTk5MSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuCi0uXCIgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS5cIgotLlwiIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLlwiIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotLlwiIGFyZSBtZXQ6Ci0uXCIgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS5cIiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0uXCIgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS5cIiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0uXCIgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLS5cIiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKLS5cIiAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6Ci0uXCIJVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgVW5pdmVyc2l0eSBvZgotLlwiCUNhbGlmb3JuaWEsIEJlcmtlbGV5IGFuZCBpdHMgY29udHJpYnV0b3JzLgotLlwiIDQuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0uXCIgICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0uXCIgICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0uXCIKLS5cIiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotLlwiIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotLlwiIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0uXCIgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0uXCIgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLS5cIiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotLlwiIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotLlwiIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0uXCIgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotLlwiIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLS5cIiBTVUNIIERBTUFHRS4KLS5cIgotLlwiICAgICBmcm9tOiBAKCMpaWVlZS4zCTYuNCAoQmVya2VsZXkpIDUvNi85MQotLlwiICRGcmVlQlNEOiBzcmMvbGliL21zdW4vbWFuL25leHRhZnRlci4zLHYgMS4yIDIwMDUvMDMvMDcgMDU6MDA6MjkgZGFzIEV4cCAkCi0uXCIKLS5EZCBNYXkgNCwgMjAwNQotLkR0IE5FWFRBRlRFUiAzCi0uT3MKLS5TaCBOQU1FCi0uTm0gbmV4dGFmdGVyICwKLS5ObSBuZXh0YWZ0ZXJmICwKLS5ObSBuZXh0YWZ0ZXJsICwKLS5ObSBuZXh0dG93YXJkICwKLS5ObSBuZXh0dG93YXJkZiAsCi0uTm0gbmV4dHRvd2FyZGwKLS5OZCBuZXh0IHJlcHJlc2VudGFibGUgdmFsdWUKLS5TaCBMSUJSQVJZCi0uTGIgbGlibQotLlNoIFNZTk9QU0lTCi0uSW4gbWF0aC5oCi0uRnQgZG91YmxlCi0uRm4gbmV4dGFmdGVyICJkb3VibGUgeCIgImRvdWJsZSB5IgotLkZ0IGZsb2F0Ci0uRm4gbmV4dGFmdGVyZiAiZmxvYXQgeCIgImZsb2F0IHkiCi0uRnQgbG9uZyBkb3VibGUKLS5GbiBuZXh0YWZ0ZXJsICJsb25nIGRvdWJsZSB4IiAibG9uZyBkb3VibGUgeSIKLS5GdCBkb3VibGUKLS5GbiBuZXh0dG93YXJkICJkb3VibGUgeCIgImxvbmcgZG91YmxlIHkiCi0uRnQgZmxvYXQKLS5GbiBuZXh0dG93YXJkZiAiZmxvYXQgeCIgImxvbmcgZG91YmxlIHkiCi0uRnQgbG9uZyBkb3VibGUKLS5GbiBuZXh0dG93YXJkbCAibG9uZyBkb3VibGUgeCIgImxvbmcgZG91YmxlIHkiCi0uU2ggREVTQ1JJUFRJT04KLVRoZXNlIGZ1bmN0aW9ucwotcmV0dXJuIHRoZSBuZXh0IG1hY2hpbmUgcmVwcmVzZW50YWJsZSBudW1iZXIgZnJvbQotLkZhIHgKLWluIGRpcmVjdGlvbgotLkZhIHkgLgotLlNoIFNFRSBBTFNPCi0uWHIgaWVlZSAzICwKLS5YciBtYXRoIDMKLS5TaCBTVEFOREFSRFMKLVRoZQotLkZuIG5leHRhZnRlciAsCi0uRm4gbmV4dGFmdGVyZiAsCi0uRm4gbmV4dGFmdGVybCAsCi0uRm4gbmV4dHRvd2FyZCAsCi0uRm4gbmV4dHRvd2FyZGYgLAotYW5kCi0uRm4gbmV4dHRvd2FyZGwKLXJvdXRpbmVzIGNvbmZvcm0gdG8KLS5TdCAtaXNvQy05OSAuCi1UaGV5IGltcGxlbWVudCB0aGUgTmV4dGFmdGVyIGZ1bmN0aW9uIHJlY29tbWVuZGVkIGJ5Ci0uU3QgLWllZWU3NTQgLAotd2l0aCB0aGUgZXh0ZW5zaW9uIHRoYXQKLS5GbiBuZXh0YWZ0ZXIgKzAuMCwgLTAuMAotcmV0dXJucwotLkxpIC0wLjAgLAotYW5kCi0uRm4gbmV4dGFmdGVyIC0wLjAsICswLjAKLXJldHVybnMKLS5MaSArMC4wIC4KLS5TaCBISVNUT1JZCi1UaGUKLS5GbiBuZXh0YWZ0ZXIKLWZ1bmN0aW9uIGFwcGVhcmVkIGluCi0uQnggNC4zICwKLWFuZAotLkZuIG5leHRhZnRlcmYKLWFwcGVhcmVkIGluCi0uRnggMi4wIC4KZGlmZiAtLWdpdCBhL2xpYm0vbWFuL3JlbWFpbmRlci4zIGIvbGlibS9tYW4vcmVtYWluZGVyLjMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDliNjIxZTMuLjAwMDAwMDAKLS0tIGEvbGlibS9tYW4vcmVtYWluZGVyLjMKKysrIC9kZXYvbnVsbApAQCAtMSwxNDYgKzAsMCBAQAotLlwiIENvcHlyaWdodCAoYykgMTk4NSwgMTk5MSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuCi0uXCIgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS5cIgotLlwiIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLlwiIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotLlwiIGFyZSBtZXQ6Ci0uXCIgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS5cIiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0uXCIgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS5cIiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0uXCIgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLS5cIiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKLS5cIiAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6Ci0uXCIJVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgVW5pdmVyc2l0eSBvZgotLlwiCUNhbGlmb3JuaWEsIEJlcmtlbGV5IGFuZCBpdHMgY29udHJpYnV0b3JzLgotLlwiIDQuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0uXCIgICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0uXCIgICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0uXCIKLS5cIiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotLlwiIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotLlwiIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0uXCIgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0uXCIgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLS5cIiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotLlwiIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotLlwiIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0uXCIgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotLlwiIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLS5cIiBTVUNIIERBTUFHRS4KLS5cIgotLlwiICAgICBmcm9tOiBAKCMpaWVlZS4zCTYuNCAoQmVya2VsZXkpIDUvNi85MQotLlwiICRGcmVlQlNEOiBzcmMvbGliL21zdW4vbWFuL3JlbWFpbmRlci4zLHYgMS40IDIwMDUvMTEvMjQgMDk6MjU6MTAgam9lbCBFeHAgJAotLlwiCi0uRGQgTWFyY2ggMjQsIDIwMDUKLS5EdCBSRU1BSU5ERVIgMwotLk9zCi0uU2ggTkFNRQotLk5tIHJlbWFpbmRlciAsCi0uTm0gcmVtYWluZGVyZiAsCi0uTm0gcmVtcXVvICwKLS5ObSByZW1xdW9mCi0uTmQgbWluaW1hbCByZXNpZHVlIGZ1bmN0aW9ucwotLlNoIExJQlJBUlkKLS5MYiBsaWJtCi0uU2ggU1lOT1BTSVMKLS5JbiBtYXRoLmgKLS5GdCBkb3VibGUKLS5GbiByZW1haW5kZXIgImRvdWJsZSB4IiAiZG91YmxlIHkiCi0uRnQgZmxvYXQKLS5GbiByZW1haW5kZXJmICJmbG9hdCB4IiAiZmxvYXQgeSIKLS5GdCBkb3VibGUKLS5GbiByZW1xdW8gImRvdWJsZSB4IiAiZG91YmxlIHkiICJpbnQgKnF1byIKLS5GdCBmbG9hdAotLkZuIHJlbXF1b2YgImZsb2F0IHgiICJmbG9hdCB5IiAiaW50ICpxdW8iCi0uU2ggREVTQ1JJUFRJT04KLS5GbiByZW1haW5kZXIgLAotLkZuIHJlbWFpbmRlcmYgLAotLkZuIHJlbXF1byAsCi1hbmQKLS5GbiByZW1xdW9mCi1yZXR1cm4gdGhlIHJlbWFpbmRlcgotLkZhIHIKLTo9Ci0uRmEgeAotXC0KLS5GYSBuXCgqKnkKLXdoZXJlCi0uRmEgbgotaXMgdGhlIGludGVnZXIgbmVhcmVzdCB0aGUgZXhhY3QgdmFsdWUgb2YKLS5CayAtd29yZHMKLS5GYSB4IE5zIC8gTnMgRmEgeSA7Ci0uRWsKLW1vcmVvdmVyIGlmCi0uUGYgXFwqKEJhIEZhIG4KLVwtCi0uU20gb2ZmCi0uRmEgeCBObyAvIEZhIHkgTm8gXFwqKEJhCi0uU20gb24KLT0KLTEvMgotdGhlbgotLkZhIG4KLWlzIGV2ZW4uCi1Db25zZXF1ZW50bHkKLXRoZSByZW1haW5kZXIgaXMgY29tcHV0ZWQgZXhhY3RseSBhbmQKLS5TbSBvZmYKLS5QZiBcXCooQmEgRmEgciBObyBcXCooQmEKLS5TbSBvbgotXCooTGUKLS5TbSBvZmYKLS5QZiBcXCooQmEgRmEgeSBObyBcXCooQmEvMiAuCi0uU20gb24KLUJ1dCBhdHRlbXB0aW5nIHRvIHRha2UgdGhlIHJlbWFpbmRlciB3aGVuCi0uRmEgeQotaXMgMCBvcgotLkZhIHgKLWlzIFwqKFBtXCooSWYgaXMgYW4gaW52YWxpZCBvcGVyYXRpb24gdGhhdCBwcm9kdWNlcyBhIFwqKE5hLgotLlBwCi1UaGUKLS5GbiByZW1xdW8KLWFuZAotLkZuIHJlbXF1b2YKLWZ1bmN0aW9ucyBhbHNvIHN0b3JlIHRoZSBsYXN0Ci0uVmEgawotYml0cyBvZgotLkZhIG4KLWluIHRoZSBsb2NhdGlvbiBwb2ludGVkIHRvIGJ5Ci0uRmEgcXVvICwKLXByb3ZpZGVkIHRoYXQKLS5GYSBuCi1leGlzdHMuCi1UaGUgbnVtYmVyIG9mIGJpdHMKLS5WYSBrCi1pcyBwbGF0Zm9ybS1zcGVjaWZpYywgYnV0IGlzIGd1YXJhbnRlZWQgdG8gYmUgYXQgbGVhc3QgMy4KLS5TaCBTRUUgQUxTTwotLlhyIGZtb2QgMyAsCi0uWHIgaWVlZSAzICwKLS5YciBtYXRoIDMKLS5TaCBTVEFOREFSRFMKLVRoZQotLkZuIHJlbWFpbmRlciAsCi0uRm4gcmVtYWluZGVyZiAsCi0uRm4gcmVtcXVvICwKLWFuZAotLkZuIHJlbXF1b2YKLXJvdXRpbmVzIGNvbmZvcm0gdG8KLS5TdCAtaXNvQy05OSAuCi1UaGUgcmVtYWluZGVyIGlzIGFzIGRlZmluZWQgaW4KLS5TdCAtaWVlZTc1NCAuCi0uU2ggSElTVE9SWQotVGhlCi0uRm4gcmVtYWluZGVyCi1hbmQKLS5GbiByZW1haW5kZXJmCi1mdW5jdGlvbnMgYXBwZWFyZWQgaW4KLS5CeCA0LjMKLWFuZAotLkZ4IDIuMCAsCi1yZXNwZWN0aXZlbHkuCi1UaGUKLS5GbiByZW1xdW8KLWFuZAotLkZuIHJlbXF1b2YKLWZ1bmN0aW9ucyB3ZXJlIGFkZGVkIGluCi0uRnggNi4wIC4KZGlmZiAtLWdpdCBhL2xpYm0vbWFuL3JpbnQuMyBiL2xpYm0vbWFuL3JpbnQuMwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWU1NWZlYS4uMDAwMDAwMAotLS0gYS9saWJtL21hbi9yaW50LjMKKysrIC9kZXYvbnVsbApAQCAtMSwxMDMgKzAsMCBAQAotLlwiIENvcHlyaWdodCAoYykgMTk4NSwgMTk5MSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuCi0uXCIgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS5cIgotLlwiIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLlwiIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotLlwiIGFyZSBtZXQ6Ci0uXCIgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS5cIiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0uXCIgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS5cIiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0uXCIgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLS5cIiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKLS5cIiAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6Ci0uXCIJVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgVW5pdmVyc2l0eSBvZgotLlwiCUNhbGlmb3JuaWEsIEJlcmtlbGV5IGFuZCBpdHMgY29udHJpYnV0b3JzLgotLlwiIDQuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0uXCIgICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0uXCIgICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0uXCIKLS5cIiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotLlwiIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotLlwiIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0uXCIgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0uXCIgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLS5cIiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotLlwiIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotLlwiIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0uXCIgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotLlwiIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLS5cIiBTVUNIIERBTUFHRS4KLS5cIgotLlwiICAgICBmcm9tOiBAKCMpcmludC4zCTUuMSAoQmVya2VsZXkpIDUvMi85MQotLlwiICRGcmVlQlNEOiBzcmMvbGliL21zdW4vbWFuL3JpbnQuMyx2IDEuMTEgMjAwNS8wMS8xMSAyMzoxMjoxNyBkYXMgRXhwICQKLS5cIgotLkRkIEp1bHkgNSwgMjAwNAotLkR0IFJJTlQgMwotLk9zCi0uU2ggTkFNRQotLk5tIG5lYXJieWludCAsCi0uTm0gbmVhcmJ5aW50ZiAsCi0uTm0gcmludCAsCi0uTm0gcmludGYKLS5OZCByb3VuZCB0byBpbnRlZ3JhbCB2YWx1ZSBpbiBmbG9hdGluZy1wb2ludCBmb3JtYXQKLS5TaCBMSUJSQVJZCi0uTGIgbGlibQotLlNoIFNZTk9QU0lTCi0uSW4gbWF0aC5oCi0uRnQgZG91YmxlCi0uRm4gbmVhcmJ5aW50ICJkb3VibGUgeCIKLS5GdCBmbG9hdAotLkZuIG5lYXJieWludGYgImZsb2F0IHgiCi0uRnQgZG91YmxlCi0uRm4gcmludCAiZG91YmxlIHgiCi0uRnQgZmxvYXQKLS5GbiByaW50ZiAiZmxvYXQgeCIKLS5TaCBERVNDUklQVElPTgotVGhlCi0uRm4gcmludAotYW5kIHRoZQotLkZuIHJpbnRmCi1mdW5jdGlvbnMgcmV0dXJuIHRoZSBpbnRlZ3JhbCB2YWx1ZSBuZWFyZXN0IHRvCi0uRmEgeAotYWNjb3JkaW5nIHRvIHRoZSBwcmV2YWlsaW5nIHJvdW5kaW5nIG1vZGUuCi1UaGVzZSBmdW5jdGlvbnMgcmFpc2UgYW4gaW5leGFjdCBleGNlcHRpb24gd2hlbiB0aGUgb3JpZ2luYWwgYXJndW1lbnQKLWlzIG5vdCBhbiBleGFjdCBpbnRlZ2VyLgotLlBwCi1UaGUKLS5GbiBuZWFyYnlpbnQKLWFuZAotLkZuIG5lYXJieWludGYKLWZ1bmN0aW9ucyBwZXJmb3JtIHRoZSBzYW1lIG9wZXJhdGlvbiwgZXhjZXB0IHRoYXQgdGhleSBkbyBub3QgcmFpc2UKLWFuIGluZXhhY3QgZXhjZXB0aW9uLgotLlNoIFNFRSBBTFNPCi0uWHIgYWJzIDMgLAotLlhyIGNlaWwgMyAsCi0uWHIgZmFicyAzICwKLS5YciBmZW52IDMgLAotLlhyIGZsb29yIDMgLAotLlhyIGllZWUgMyAsCi0uWHIgbHJpbnQgMyAsCi0uWHIgbHJvdW5kIDMgLAotLlhyIG1hdGggMyAsCi0uWHIgcm91bmQgMwotLlNoIFNUQU5EQVJEUwotVGhlCi0uRm4gbmVhcmJ5aW50ICwKLS5GbiBuZWFyYnlpbnRmICwKLS5GbiByaW50ICwKLWFuZAotLkZuIHJpbnRmCi1mdW5jdGlvbnMgY29uZm9ybSB0bwotLlN0IC1pc29DLTk5IC4KLS5TaCBISVNUT1JZCi1BCi0uRm4gcmludAotZnVuY3Rpb24gYXBwZWFyZWQgaW4KLS5BdCB2NiAuCi1UaGUKLS5GbiBuZWFyYnlpbnQKLWFuZAotLkZuIG5lYXJieWludGYKLWZ1bmN0aW9ucyBhcHBlYXJlZCBpbgotLkZ4IDUuMyAuCmRpZmYgLS1naXQgYS9saWJtL21hbi9yb3VuZC4zIGIvbGlibS9tYW4vcm91bmQuMwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjA3N2Q3Ny4uMDAwMDAwMAotLS0gYS9saWJtL21hbi9yb3VuZC4zCisrKyAvZGV2L251bGwKQEAgLTEsODAgKzAsMCBAQAotLlwiIENvcHlyaWdodCAoYykgMjAwMywgU3RldmVuIEcuIEthcmdsCi0uXCIgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS5cIgotLlwiIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLlwiIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotLlwiIGFyZSBtZXQ6Ci0uXCIgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS5cIiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0uXCIgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS5cIiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0uXCIgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLS5cIgotLlwiIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0uXCIgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0uXCIgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLS5cIiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLS5cIiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotLlwiIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0uXCIgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0uXCIgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLS5cIiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0uXCIgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotLlwiIFNVQ0ggREFNQUdFLgotLlwiCi0uXCIgJEZyZWVCU0Q6IHNyYy9saWIvbXN1bi9tYW4vcm91bmQuMyx2IDEuNiAyMDA1LzA2LzE1IDE5OjA0OjA0IHJ1IEV4cCAkCi0uXCIKLS5EZCBBcHJpbCA3LCAyMDA1Ci0uRHQgUk9VTkQgMwotLk9zCi0uU2ggTkFNRQotLk5tIHJvdW5kICwKLS5ObSByb3VuZGYgLAotLk5tIHJvdW5kbAotLk5kIHJvdW5kIHRvIG5lYXJlc3QgaW50ZWdyYWwgdmFsdWUKLS5TaCBMSUJSQVJZCi0uTGIgbGlibQotLlNoIFNZTk9QU0lTCi0uSW4gbWF0aC5oCi0uRnQgZG91YmxlCi0uRm4gcm91bmQgImRvdWJsZSB4IgotLkZ0IGZsb2F0Ci0uRm4gcm91bmRmICJmbG9hdCB4IgotLkZ0ICJsb25nIGRvdWJsZSIKLS5GbiByb3VuZGwgImxvbmcgZG91YmxlIHgiCi0uU2ggREVTQ1JJUFRJT04KLVRoZQotLkZuIHJvdW5kICwKLS5GbiByb3VuZGYgLAotYW5kCi0uRm4gcm91bmRsCi1mdW5jdGlvbnMgcmV0dXJuIHRoZSBuZWFyZXN0IGludGVncmFsIHZhbHVlIHRvCi0uRmEgeCA7Ci1pZgotLkZhIHgKLWxpZXMgaGFsZndheSBiZXR3ZWVuIHR3byBpbnRlZ3JhbCB2YWx1ZXMsIHRoZW4gdGhlc2UKLWZ1bmN0aW9ucyByZXR1cm4gdGhlIGludGVncmFsIHZhbHVlIHdpdGggdGhlIGxhcmdlcgotYWJzb2x1dGUgdmFsdWUgKGkuZS4sIHRoZXkgcm91bmQgYXdheSBmcm9tIHplcm8pLgotLlNoIFNFRSBBTFNPCi0uWHIgY2VpbCAzICwKLS5YciBmbG9vciAzICwKLS5YciBpZWVlIDMgLAotLlhyIGxyaW50IDMgLAotLlhyIGxyb3VuZCAzICwKLS5YciBtYXRoIDMgLAotLlhyIHJpbnQgMyAsCi0uWHIgdHJ1bmMgMwotLlNoIFNUQU5EQVJEUwotVGhlc2UgZnVuY3Rpb25zIGNvbmZvcm0gdG8KLS5TdCAtaXNvQy05OSAuCi0uU2ggSElTVE9SWQotVGhlCi0uRm4gcm91bmQKLWFuZAotLkZuIHJvdW5kZgotZnVuY3Rpb25zIGFwcGVhcmVkIGluCi0uRnggNS4zIC4KLVRoZQotLkZuIHJvdW5kbAotZnVuY3Rpb24gYXBwZWFyZWQgaW4KLS5GeCA2LjAgLgpkaWZmIC0tZ2l0IGEvbGlibS9tYW4vc2NhbGJuLjMgYi9saWJtL21hbi9zY2FsYm4uMwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTIzY2FhYi4uMDAwMDAwMAotLS0gYS9saWJtL21hbi9zY2FsYm4uMworKysgL2Rldi9udWxsCkBAIC0xLDk1ICswLDAgQEAKLS5cIiBDb3B5cmlnaHQgKGMpIDE5ODUsIDE5OTEgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLgotLlwiIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0uXCIKLS5cIiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS5cIiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLS5cIiBhcmUgbWV0OgotLlwiIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0uXCIgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLlwiIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0uXCIgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotLlwiICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0uXCIgMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCi0uXCIgICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgotLlwiCVRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIFVuaXZlcnNpdHkgb2YKLS5cIglDYWxpZm9ybmlhLCBCZXJrZWxleSBhbmQgaXRzIGNvbnRyaWJ1dG9ycy4KLS5cIiA0LiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotLlwiICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotLlwiICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLlwiCi0uXCIgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLS5cIiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLS5cIiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotLlwiIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotLlwiIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0uXCIgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLS5cIiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLS5cIiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotLlwiIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLS5cIiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0uXCIgU1VDSCBEQU1BR0UuCi0uXCIKLS5cIiAgICAgZnJvbTogQCgjKWllZWUuMwk2LjQgKEJlcmtlbGV5KSA1LzYvOTEKLS5cIiAkRnJlZUJTRDogc3JjL2xpYi9tc3VuL21hbi9zY2FsYm4uMyx2IDEuMyAyMDA1LzExLzI0IDA5OjI1OjEwIGpvZWwgRXhwICQKLS5cIgotLkRkIE1hcmNoIDQsIDIwMDUKLS5EdCBTQ0FMQk4gMwotLk9zCi0uU2ggTkFNRQotLk5tIHNjYWxibG4gLAotLk5tIHNjYWxibG5mICwKLS5ObSBzY2FsYmxubCAsCi0uTm0gc2NhbGJuICwKLS5ObSBzY2FsYm5mICwKLS5ObSBzY2FsYm5sCi0uTmQgYWRqdXN0IGV4cG9uZW50Ci0uU2ggTElCUkFSWQotLkxiIGxpYm0KLS5TaCBTWU5PUFNJUwotLkluIG1hdGguaAotLkZ0IGRvdWJsZQotLkZuIHNjYWxibG4gImRvdWJsZSB4IiAibG9uZyBuIgotLkZ0IGZsb2F0Ci0uRm4gc2NhbGJsbmYgImZsb2F0IHgiICJsb25nIG4iCi0uRnQgbG9uZyBkb3VibGUKLS5GbiBzY2FsYmxubCAibG9uZyBkb3VibGUgeCIgImxvbmcgbiIKLS5GdCBkb3VibGUKLS5GbiBzY2FsYm4gImRvdWJsZSB4IiAiaW50IG4iCi0uRnQgZmxvYXQKLS5GbiBzY2FsYm5mICJmbG9hdCB4IiAiaW50IG4iCi0uRnQgbG9uZyBkb3VibGUKLS5GbiBzY2FsYm5sICJsb25nIGRvdWJsZSB4IiAiaW50IG4iCi0uU2ggREVTQ1JJUFRJT04KLVRoZXNlIHJvdXRpbmVzIHJldHVybgotLkZhIHggTnMgXCgqKigyKiogTnMgRmEgbiApCi1jb21wdXRlZCBieSBleHBvbmVudCBtYW5pcHVsYXRpb24uCi0uU2ggU0VFIEFMU08KLS5YciBpZWVlIDMgLAotLlhyIG1hdGggMwotLlNoIFNUQU5EQVJEUwotVGhlc2Ugcm91dGluZXMgY29uZm9ybSB0bwotLlN0IC1pc29DLTk5ICwKLWFuZCB0aGV5IGltcGxlbWVudCB0aGUgU2NhbGIgZnVuY3Rpb24gcmVjb21tZW5kZWQgYnkKLS5TdCAtaWVlZTc1NCAuCi0uU2ggSElTVE9SWQotVGhlCi0uRm4gc2NhbGJuCi1hbmQKLS5GbiBzY2FsYm5mCi1mdW5jdGlvbnMgYXBwZWFyZWQgaW4KLS5CeCA0LjMKLWFuZAotLkZ4IDIuMCAsCi1yZXNwZWN0aXZlbHkuCi1UaGUKLS5GbiBzY2FsYmxuCi1hbmQKLS5GbiBzY2FsYmxuZgotZnVuY3Rpb25zIGZpcnN0IGFwcGVhcmVkIGluCi0uRnggNS4zICwKLWFuZAotLkZuIHNjYWxibG5sCi1hbmQKLS5GbiBzY2FsYmxuCi1pbgotLkZ4IDYuMCAuCmRpZmYgLS1naXQgYS9saWJtL21hbi9zaWduYml0LjMgYi9saWJtL21hbi9zaWduYml0LjMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI3NDk2NzEuLjAwMDAwMDAKLS0tIGEvbGlibS9tYW4vc2lnbmJpdC4zCisrKyAvZGV2L251bGwKQEAgLTEsNTcgKzAsMCBAQAotLlwiIENvcHlyaWdodCAoYykgMjAwMyBNaWtlIEJhcmNyb2Z0IDxtaWtlQEZyZWVCU0Qub3JnPgotLlwiIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0uXCIKLS5cIiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS5cIiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLS5cIiBhcmUgbWV0OgotLlwiIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0uXCIgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLlwiIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0uXCIgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotLlwiICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0uXCIKLS5cIiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0uXCIgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0uXCIgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLS5cIiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotLlwiIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0uXCIgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLS5cIiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLS5cIiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotLlwiIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLS5cIiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0uXCIgU1VDSCBEQU1BR0UuCi0uXCIKLS5cIiAkRnJlZUJTRDogc3JjL2xpYi9tc3VuL21hbi9zaWduYml0LjMsdiAxLjEgMjAwNC8wNy8xOSAwODoxNjoxMCBkYXMgRXhwICQKLS5cIgotLkRkIEp1bHkgMTgsIDIwMDQKLS5EdCBTSUdOQklUIDMKLS5PcwotLlNoIE5BTUUKLS5ObSBzaWduYml0Ci0uTmQgImRldGVybWluZSB3aGV0aGVyIGEgZmxvYXRpbmctcG9pbnQgbnVtYmVyJ3Mgc2lnbiBpcyBuZWdhdGl2ZSIKLS5TaCBMSUJSQVJZCi0uTGIgbGlibQotLlNoIFNZTk9QU0lTCi0uSW4gbWF0aC5oCi0uRnQgaW50Ci0uRm4gc2lnbmJpdCAicmVhbC1mbG9hdGluZyB4IgotLlNoIERFU0NSSVBUSU9OCi1UaGUKLS5GbiBzaWduYml0Ci1tYWNybyB0YWtlcyBhbiBhcmd1bWVudCBvZgotLkZhIHgKLWFuZCByZXR1cm5zIG5vbi16ZXJvIGlmIHRoZSB2YWx1ZSBvZiBpdHMgc2lnbiBpcyBuZWdhdGl2ZSwgb3RoZXJ3aXNlIDAuCi0uU2ggU0VFIEFMU08KLS5YciBmcGNsYXNzaWZ5IDMgLAotLlhyIG1hdGggMwotLlNoIFNUQU5EQVJEUwotVGhlCi0uRm4gc2lnbmJpdAotbWFjcm8gY29uZm9ybXMgdG8KLS5TdCAtaXNvQy05OSAuCi0uU2ggSElTVE9SWQotVGhlCi0uRm4gc2lnbmJpdAotbWFjcm8gd2FzIGFkZGVkIGluCi0uRnggNS4xIC4KZGlmZiAtLWdpdCBhL2xpYm0vbWFuL3Npbi4zIGIvbGlibS9tYW4vc2luLjMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNhNDA4YTcuLjAwMDAwMDAKLS0tIGEvbGlibS9tYW4vc2luLjMKKysrIC9kZXYvbnVsbApAQCAtMSw4MiArMCwwIEBACi0uXCIgQ29weXJpZ2h0IChjKSAxOTkxIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuCi0uXCIgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS5cIgotLlwiCUAoIylzaW4uMwk2LjcgKEJlcmtlbGV5KSA0LzE5LzkxCi0uXCIgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0uXCIgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0uXCIgYXJlIG1ldDoKLS5cIiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLlwiICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS5cIiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotLlwiICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLS5cIiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotLlwiIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQotLlwiICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKLS5cIglUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBVbml2ZXJzaXR5IG9mCi0uXCIJQ2FsaWZvcm5pYSwgQmVya2VsZXkgYW5kIGl0cyBjb250cmlidXRvcnMuCi0uXCIgNC4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLS5cIiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKLS5cIiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLS5cIgotLlwiIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0uXCIgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0uXCIgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLS5cIiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLS5cIiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotLlwiIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0uXCIgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0uXCIgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLS5cIiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0uXCIgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotLlwiIFNVQ0ggREFNQUdFLgotLlwiCi0uXCIgICAgIGZyb206IEAoIylzaW4uMwk2LjcgKEJlcmtlbGV5KSA0LzE5LzkxCi0uXCIgJEZyZWVCU0Q6IHNyYy9saWIvbXN1bi9tYW4vc2luLjMsdiAxLjkgMjAwMS8xMC8xMyAxMjoyMzoyMyBiZGUgRXhwICQKLS5cIgotLkRkIEFwcmlsIDE5LCAxOTkxCi0uRHQgU0lOIDMKLS5PcwotLlNoIE5BTUUKLS5ObSBzaW4gLAotLk5tIHNpbmYKLS5OZCBzaW5lIGZ1bmN0aW9ucwotLlNoIExJQlJBUlkKLS5MYiBsaWJtCi0uU2ggU1lOT1BTSVMKLS5JbiBtYXRoLmgKLS5GdCBkb3VibGUKLS5GbiBzaW4gImRvdWJsZSB4IgotLkZ0IGZsb2F0Ci0uRm4gc2luZiAiZmxvYXQgeCIKLS5TaCBERVNDUklQVElPTgotVGhlCi0uRm4gc2luCi1hbmQgdGhlCi0uRm4gc2luZgotZnVuY3Rpb25zIGNvbXB1dGUgdGhlIHNpbmUgb2YKLS5GYSB4Ci0obWVhc3VyZWQgaW4gcmFkaWFucykuCi1BIGxhcmdlIG1hZ25pdHVkZSBhcmd1bWVudCBtYXkgeWllbGQgYSByZXN1bHQgd2l0aCBsaXR0bGUKLW9yIG5vIHNpZ25pZmljYW5jZS4KLS5TaCBSRVRVUk4gVkFMVUVTCi1UaGUKLS5GbiBzaW4KLWFuZCB0aGUKLS5GbiBzaW5mCi1mdW5jdGlvbnMgcmV0dXJuIHRoZSBzaW5lIHZhbHVlLgotLlNoIFNFRSBBTFNPCi0uWHIgYWNvcyAzICwKLS5YciBhc2luIDMgLAotLlhyIGF0YW4gMyAsCi0uWHIgYXRhbjIgMyAsCi0uWHIgY29zIDMgLAotLlhyIGNvc2ggMyAsCi0uWHIgbWF0aCAzICwKLS5YciBzaW5oIDMgLAotLlhyIHRhbiAzICwKLS5YciB0YW5oIDMKLS5TaCBTVEFOREFSRFMKLVRoZQotLkZuIHNpbgotZnVuY3Rpb24gY29uZm9ybXMgdG8KLS5TdCAtaXNvQyAuCmRpZmYgLS1naXQgYS9saWJtL21hbi9zaW5oLjMgYi9saWJtL21hbi9zaW5oLjMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgzNDc4NjIuLjAwMDAwMDAKLS0tIGEvbGlibS9tYW4vc2luaC4zCisrKyAvZGV2L251bGwKQEAgLTEsNzEgKzAsMCBAQAotLlwiIENvcHlyaWdodCAoYykgMTk5MSBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLgotLlwiIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0uXCIKLS5cIiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS5cIiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLS5cIiBhcmUgbWV0OgotLlwiIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0uXCIgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLlwiIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0uXCIgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotLlwiICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0uXCIgMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCi0uXCIgICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgotLlwiCVRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIFVuaXZlcnNpdHkgb2YKLS5cIglDYWxpZm9ybmlhLCBCZXJrZWxleSBhbmQgaXRzIGNvbnRyaWJ1dG9ycy4KLS5cIiA0LiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotLlwiICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotLlwiICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLlwiCi0uXCIgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLS5cIiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLS5cIiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotLlwiIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotLlwiIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0uXCIgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLS5cIiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLS5cIiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotLlwiIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLS5cIiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0uXCIgU1VDSCBEQU1BR0UuCi0uXCIKLS5cIglmcm9tOiBAKCMpc2luaC4zCTYuNiAoQmVya2VsZXkpIDQvMTkvOTEKLS5cIiAkRnJlZUJTRDogc3JjL2xpYi9tc3VuL21hbi9zaW5oLjMsdiAxLjEyIDIwMDUvMDEvMTQgMjM6Mjg6MjggZGFzIEV4cCAkCi0uRGQgSmFudWFyeSAxNCwgMjAwNQotLkR0IFNJTkggMwotLk9zCi0uU2ggTkFNRQotLk5tIHNpbmggLAotLk5tIHNpbmhmCi0uTmQgaHlwZXJib2xpYyBzaW5lIGZ1bmN0aW9uCi0uU2ggTElCUkFSWQotLkxiIGxpYm0KLS5TaCBTWU5PUFNJUwotLkluIG1hdGguaAotLkZ0IGRvdWJsZQotLkZuIHNpbmggImRvdWJsZSB4IgotLkZ0IGZsb2F0Ci0uRm4gc2luaGYgImZsb2F0IHgiCi0uU2ggREVTQ1JJUFRJT04KLVRoZQotLkZuIHNpbmgKLWFuZCB0aGUKLS5GbiBzaW5oZgotZnVuY3Rpb25zIGNvbXB1dGUgdGhlIGh5cGVyYm9saWMgc2luZSBvZgotLkZhIHggLgotLlNoIFNFRSBBTFNPCi0uWHIgYWNvcyAzICwKLS5YciBhc2luIDMgLAotLlhyIGF0YW4gMyAsCi0uWHIgYXRhbjIgMyAsCi0uWHIgY29zIDMgLAotLlhyIGNvc2ggMyAsCi0uWHIgbWF0aCAzICwKLS5YciBzaW4gMyAsCi0uWHIgdGFuIDMgLAotLlhyIHRhbmggMwotLlNoIFNUQU5EQVJEUwotVGhlCi0uRm4gc2luaAotZnVuY3Rpb24gY29uZm9ybXMgdG8KLS5TdCAtaXNvQyAuCmRpZmYgLS1naXQgYS9saWJtL21hbi9zcXJ0LjMgYi9saWJtL21hbi9zcXJ0LjMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIyZjhiN2IuLjAwMDAwMDAKLS0tIGEvbGlibS9tYW4vc3FydC4zCisrKyAvZGV2L251bGwKQEAgLTEsMTAwICswLDAgQEAKLS5cIiBDb3B5cmlnaHQgKGMpIDE5ODUsIDE5OTEgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLgotLlwiIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0uXCIKLS5cIiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS5cIiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLS5cIiBhcmUgbWV0OgotLlwiIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0uXCIgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLlwiIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0uXCIgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotLlwiICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0uXCIgMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCi0uXCIgICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgotLlwiCVRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIFVuaXZlcnNpdHkgb2YKLS5cIglDYWxpZm9ybmlhLCBCZXJrZWxleSBhbmQgaXRzIGNvbnRyaWJ1dG9ycy4KLS5cIiA0LiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotLlwiICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotLlwiICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLlwiCi0uXCIgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLS5cIiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLS5cIiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotLlwiIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotLlwiIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0uXCIgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLS5cIiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLS5cIiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotLlwiIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLS5cIiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0uXCIgU1VDSCBEQU1BR0UuCi0uXCIKLS5cIiAgICAgZnJvbTogQCgjKXNxcnQuMwk2LjQgKEJlcmtlbGV5KSA1LzYvOTEKLS5cIiAkRnJlZUJTRDogc3JjL2xpYi9tc3VuL21hbi9zcXJ0LjMsdiAxLjEyIDIwMDUvMDEvMTQgMjM6Mjg6MjggZGFzIEV4cCAkCi0uXCIKLS5EZCBNYXkgNiwgMTk5MQotLkR0IFNRUlQgMwotLk9zCi0uU2ggTkFNRQotLk5tIGNicnQgLAotLk5tIGNicnRmICwKLS5ObSBzcXJ0ICwKLS5ObSBzcXJ0ZgotLk5kIGN1YmUgcm9vdCBhbmQgc3F1YXJlIHJvb3QgZnVuY3Rpb25zCi0uU2ggTElCUkFSWQotLkxiIGxpYm0KLS5TaCBTWU5PUFNJUwotLkluIG1hdGguaAotLkZ0IGRvdWJsZQotLkZuIGNicnQgImRvdWJsZSB4IgotLkZ0IGZsb2F0Ci0uRm4gY2JydGYgImZsb2F0IHgiCi0uRnQgZG91YmxlCi0uRm4gc3FydCAiZG91YmxlIHgiCi0uRnQgZmxvYXQKLS5GbiBzcXJ0ZiAiZmxvYXQgeCIKLS5TaCBERVNDUklQVElPTgotVGhlCi0uRm4gY2JydAotYW5kIHRoZQotLkZuIGNicnRmCi1mdW5jdGlvbnMgY29tcHV0ZQotdGhlIGN1YmUgcm9vdCBvZgotLkFyIHggLgotLlBwCi1UaGUKLS5GbiBzcXJ0Ci1hbmQgdGhlCi0uRm4gc3FydGYKLWZ1bmN0aW9ucyBjb21wdXRlIHRoZQotbm9uLW5lZ2F0aXZlIHNxdWFyZSByb290IG9mIHguCi0uU2ggUkVUVVJOIFZBTFVFUwotVGhlCi0uRm4gY2JydAotYW5kIHRoZQotLkZuIGNicnRmCi1mdW5jdGlvbnMgcmV0dXJuIHRoZSByZXF1ZXN0ZWQgY3ViZSByb290LgotVGhlCi0uRm4gc3FydAotYW5kIHRoZQotLkZuIHNxcnRmCi1mdW5jdGlvbnMgcmV0dXJuIHRoZSByZXF1ZXN0ZWQgc3F1YXJlIHJvb3QKLXVubGVzcyBhbiBlcnJvciBvY2N1cnMuCi1BbiBhdHRlbXB0IHRvIHRha2UgdGhlCi0uRm4gc3FydAotb2YgbmVnYXRpdmUKLS5GYSB4Ci1yYWlzZXMgYW4gaW52YWxpZCBleGNlcHRpb24gYW5kIGNhdXNlcyBhbiBcKihOYSB0byBiZSByZXR1cm5lZC4KLS5TaCBTRUUgQUxTTwotLlhyIGZlbnYgMyAsCi0uWHIgbWF0aCAzCi0uU2ggU1RBTkRBUkRTCi1UaGUKLS5GbiBzcXJ0Ci1mdW5jdGlvbiBjb25mb3JtcyB0bwotLlN0IC1pc29DIC4KLS5TaCBISVNUT1JZCi1UaGUKLS5GbiBjYnJ0Ci1mdW5jdGlvbiBhcHBlYXJlZCBpbgotLkJ4IDQuMyAuCmRpZmYgLS1naXQgYS9saWJtL21hbi90YW4uMyBiL2xpYm0vbWFuL3Rhbi4zCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OTk1YTNiLi4wMDAwMDAwCi0tLSBhL2xpYm0vbWFuL3Rhbi4zCisrKyAvZGV2L251bGwKQEAgLTEsODEgKzAsMCBAQAotLlwiIENvcHlyaWdodCAoYykgMTk5MSBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLgotLlwiIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0uXCIKLS5cIiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLS5cIiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLS5cIiBhcmUgbWV0OgotLlwiIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0uXCIgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotLlwiIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0uXCIgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotLlwiICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0uXCIgMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCi0uXCIgICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgotLlwiCVRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIFVuaXZlcnNpdHkgb2YKLS5cIglDYWxpZm9ybmlhLCBCZXJrZWxleSBhbmQgaXRzIGNvbnRyaWJ1dG9ycy4KLS5cIiA0LiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotLlwiICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotLlwiICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotLlwiCi0uXCIgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLS5cIiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLS5cIiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotLlwiIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotLlwiIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0uXCIgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLS5cIiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLS5cIiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotLlwiIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLS5cIiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0uXCIgU1VDSCBEQU1BR0UuCi0uXCIKLS5cIiAgICAgZnJvbTogQCgjKXRhbi4zCTUuMSAoQmVya2VsZXkpIDUvMi85MQotLlwiICRGcmVlQlNEOiBzcmMvbGliL21zdW4vbWFuL3Rhbi4zLHYgMS45IDIwMDEvMTAvMTMgMTI6MjM6MjMgYmRlIEV4cCAkCi0uXCIKLS5EZCBNYXkgMiwgMTk5MQotLkR0IFRBTiAzCi0uT3MKLS5TaCBOQU1FCi0uTm0gdGFuICwKLS5ObSB0YW5mCi0uTmQgdGFuZ2VudCBmdW5jdGlvbnMKLS5TaCBMSUJSQVJZCi0uTGIgbGlibQotLlNoIFNZTk9QU0lTCi0uSW4gbWF0aC5oCi0uRnQgZG91YmxlCi0uRm4gdGFuICJkb3VibGUgeCIKLS5GdCBmbG9hdAotLkZuIHRhbmYgImZsb2F0IHgiCi0uU2ggREVTQ1JJUFRJT04KLVRoZQotLkZuIHRhbgotYW5kIHRoZQotLkZuIHRhbmYKLWZ1bmN0aW9ucyBjb21wdXRlIHRoZSB0YW5nZW50IG9mCi0uRmEgeAotKG1lYXN1cmVkIGluIHJhZGlhbnMpLgotQSBsYXJnZSBtYWduaXR1ZGUgYXJndW1lbnQgbWF5IHlpZWxkIGEgcmVzdWx0Ci13aXRoIGxpdHRsZSBvciBubyBzaWduaWZpY2FuY2UuCi1Gb3IgYSBkaXNjdXNzaW9uIG9mIGVycm9yIGR1ZSB0byByb3VuZG9mZiwgc2VlCi0uWHIgbWF0aCAzIC4KLS5TaCBSRVRVUk4gVkFMVUVTCi1UaGUKLS5GbiB0YW4KLWZ1bmN0aW9uIHJldHVybnMgdGhlIHRhbmdlbnQgdmFsdWUuCi0uU2ggU0VFIEFMU08KLS5YciBhY29zIDMgLAotLlhyIGFzaW4gMyAsCi0uWHIgYXRhbiAzICwKLS5YciBhdGFuMiAzICwKLS5YciBjb3MgMyAsCi0uWHIgY29zaCAzICwKLS5YciBtYXRoIDMgLAotLlhyIHNpbiAzICwKLS5YciBzaW5oIDMgLAotLlhyIHRhbmggMwotLlNoIFNUQU5EQVJEUwotVGhlCi0uRm4gdGFuCi1mdW5jdGlvbiBjb25mb3JtcyB0bwotLlN0IC1pc29DIC4KZGlmZiAtLWdpdCBhL2xpYm0vbWFuL3RhbmguMyBiL2xpYm0vbWFuL3RhbmguMwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzkxYmMxNS4uMDAwMDAwMAotLS0gYS9saWJtL21hbi90YW5oLjMKKysrIC9kZXYvbnVsbApAQCAtMSw4MCArMCwwIEBACi0uXCIgQ29weXJpZ2h0IChjKSAxOTkxIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuCi0uXCIgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS5cIgotLlwiIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotLlwiIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotLlwiIGFyZSBtZXQ6Ci0uXCIgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS5cIiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0uXCIgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLS5cIiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0uXCIgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLS5cIiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKLS5cIiAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6Ci0uXCIJVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgVW5pdmVyc2l0eSBvZgotLlwiCUNhbGlmb3JuaWEsIEJlcmtlbGV5IGFuZCBpdHMgY29udHJpYnV0b3JzLgotLlwiIDQuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0uXCIgICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0uXCIgICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0uXCIKLS5cIiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotLlwiIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotLlwiIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0uXCIgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0uXCIgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLS5cIiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotLlwiIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotLlwiIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0uXCIgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotLlwiIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLS5cIiBTVUNIIERBTUFHRS4KLS5cIgotLlwiICAgICBmcm9tOiBAKCMpdGFuaC4zCTUuMSAoQmVya2VsZXkpIDUvMi85MQotLlwiICRGcmVlQlNEOiBzcmMvbGliL21zdW4vbWFuL3RhbmguMyx2IDEuMTAgMjAwMS8xMC8xMyAxMjoyMzoyMyBiZGUgRXhwICQKLS5cIgotLkRkIE1heSAyLCAxOTkxCi0uRHQgVEFOSCAzCi0uT3MKLS5TaCBOQU1FCi0uTm0gdGFuaCAsCi0uTm0gdGFuaGYKLS5OZCBoeXBlcmJvbGljIHRhbmdlbnQgZnVuY3Rpb25zCi0uU2ggTElCUkFSWQotLkxiIGxpYm0KLS5TaCBTWU5PUFNJUwotLkluIG1hdGguaAotLkZ0IGRvdWJsZQotLkZuIHRhbmggImRvdWJsZSB4IgotLkZ0IGZsb2F0Ci0uRm4gdGFuaGYgImZsb2F0IHgiCi0uU2ggREVTQ1JJUFRJT04KLVRoZQotLkZuIHRhbmgKLWFuZCB0aGUKLS5GbiB0YW5oZgotZnVuY3Rpb25zIGNvbXB1dGUgdGhlIGh5cGVyYm9saWMgdGFuZ2VudCBvZgotLkZhIHggLgotRm9yIGEgZGlzY3Vzc2lvbiBvZiBlcnJvciBkdWUgdG8gcm91bmRvZmYsIHNlZQotLlhyIG1hdGggMyAuCi0uU2ggUkVUVVJOIFZBTFVFUwotVGhlCi0uRm4gdGFuaAotYW5kIHRoZQotLkZuIHRhbmhmCi1mdW5jdGlvbnMgcmV0dXJuIHRoZSBoeXBlcmJvbGljIHRhbmdlbnQgdmFsdWUuCi0uU2ggU0VFIEFMU08KLS5YciBhY29zIDMgLAotLlhyIGFzaW4gMyAsCi0uWHIgYXRhbiAzICwKLS5YciBhdGFuMiAzICwKLS5YciBjb3MgMyAsCi0uWHIgY29zaCAzICwKLS5YciBtYXRoIDMgLAotLlhyIHNpbiAzICwKLS5YciBzaW5oIDMgLAotLlhyIHRhbiAzCi0uU2ggU1RBTkRBUkRTCi1UaGUKLS5GbiB0YW5oCi1mdW5jdGlvbiBjb25mb3JtcyB0bwotLlN0IC1pc29DIC4KZGlmZiAtLWdpdCBhL2xpYm0vbWFuL3RydW5jLjMgYi9saWJtL21hbi90cnVuYy4zCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYjZjMjZmLi4wMDAwMDAwCi0tLSBhL2xpYm0vbWFuL3RydW5jLjMKKysrIC9kZXYvbnVsbApAQCAtMSw4MCArMCwwIEBACi0uXCIgQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IERhdmlkIFNjaHVsdHogPGRhc0BGcmVlQlNELm9yZz4KLS5cIiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLlwiCi0uXCIgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0uXCIgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0uXCIgYXJlIG1ldDoKLS5cIiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotLlwiICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLS5cIiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotLlwiICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLS5cIiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotLlwiCi0uXCIgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotLlwiIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotLlwiIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0uXCIgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLS5cIiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotLlwiIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0uXCIgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0uXCIgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLS5cIiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0uXCIgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotLlwiIFNVQ0ggREFNQUdFLgotLlwiCi0uXCIgJEZyZWVCU0Q6IHNyYy9saWIvbXN1bi9tYW4vdHJ1bmMuMyx2IDEuMyAyMDA1LzA2LzE1IDE5OjA0OjA0IHJ1IEV4cCAkCi0uXCIKLS5EZCBBcHJpbCAxNiwgMjAwNQotLkR0IFRSVU5DIDMKLS5PcwotLlNoIE5BTUUKLS5ObSB0cnVuYyAsCi0uTm0gdHJ1bmNmICwKLS5ObSB0cnVuY2wKLS5OZCBuZWFyZXN0IGludGVncmFsIHZhbHVlIHdpdGggbWFnbml0dWRlIGxlc3MgdGhhbiBvciBlcXVhbCB0byB8eHwKLS5TaCBMSUJSQVJZCi0uTGIgbGlibQotLlNoIFNZTk9QU0lTCi0uSW4gbWF0aC5oCi0uRnQgZG91YmxlCi0uRm4gdHJ1bmMgImRvdWJsZSB4IgotLkZ0IGZsb2F0Ci0uRm4gdHJ1bmNmICJmbG9hdCB4IgotLkZ0ICJsb25nIGRvdWJsZSIKLS5GbiB0cnVuY2wgImxvbmcgZG91YmxlIHgiCi0uU2ggREVTQ1JJUFRJT04KLVRoZQotLkZuIHRydW5jICwKLS5GbiB0cnVuY2YgLAotYW5kCi0uRm4gdHJ1bmNsCi1mdW5jdGlvbnMgcmV0dXJuIHRoZSBuZWFyZXN0IGludGVncmFsIHZhbHVlIHdpdGggbWFnbml0dWRlIGxlc3MgdGhhbgotb3IgZXF1YWwgdG8KLS5QZiB8IEZhIHggTnMgfCAuCi1UaGV5IGFyZSBlcXVpdmFsZW50IHRvCi0uRm4gcmludCAsCi0uRm4gcmludGYgLAotYW5kCi0uRm4gcmludGwgLAotcmVzcGVjdGl2ZWx5LCBpbiB0aGUKLS5EdiBGRV9UT1dBUkRaRVJPCi1yb3VuZGluZyBtb2RlLgotLlNoIFNFRSBBTFNPCi0uWHIgY2VpbCAzICwKLS5YciBmZXNldHJvdW5kIDMgLAotLlhyIGZsb29yIDMgLAotLlhyIG1hdGggMyAsCi0uWHIgbmV4dGFmdGVyIDMgLAotLlhyIHJpbnQgMyAsCi0uWHIgcm91bmQgMwotLlNoIFNUQU5EQVJEUwotVGhlCi0uRm4gdHJ1bmMgLAotLkZuIHRydW5jZiAsCi1hbmQKLS5GbiB0cnVuY2wKLWZ1bmN0aW9ucyBjb25mb3JtIHRvCi0uU3QgLWlzb0MtOTkgLgotLlNoIEhJU1RPUlkKLVRoZXNlIHJvdXRpbmVzIGZpcnN0IGFwcGVhcmVkIGluCi0uRnggNS4zIC4KZGlmZiAtLWdpdCBhL2xpYm0vbWlwcy9NYWtlZmlsZS5pbmMgYi9saWJtL21pcHMvTWFrZWZpbGUuaW5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YmJmYWExLi4wMDAwMDAwCi0tLSBhL2xpYm0vbWlwcy9NYWtlZmlsZS5pbmMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSMgJEZyZWVCU0Q6IHNyYy9saWIvbXN1bi9taXBzL01ha2VmaWxlLmluYyx2IDEuMSAyMDA4LzA0LzI2IDEyOjIwOjI5IGltcCBFeHAgJAotCi1MREJMX1BSRUMgPSA1MwpkaWZmIC0tZ2l0IGEvbGlibS9taXBzL19mcG1hdGguaCBiL2xpYm0vbWlwcy9fZnBtYXRoLmgKaW5kZXggY2I2ZThjMC4uZjAwNmE1OCAxMDA2NDQKLS0tIGEvbGlibS9taXBzL19mcG1hdGguaAorKysgYi9saWJtL21pcHMvX2ZwbWF0aC5oCkBAIC0yMyw3ICsyMyw3IEBACiAgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCiAgKiBTVUNIIERBTUFHRS4KICAqCi0gKiAkRnJlZUJTRDogc3JjL2xpYi9saWJjL21pcHMvX2ZwbWF0aC5oLHYgMS4xIDIwMDgvMDQvMjYgMTI6MDc6NTkgaW1wIEV4cCAkCisgKiAkRnJlZUJTRCQKICAqLwogCiB1bmlvbiBJRUVFbDJiaXRzIHsKZGlmZiAtLWdpdCBhL2xpYm0vbWlwcy9mZW52LmggYi9saWJtL21pcHMvZmVudi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNjFhNjk2Li4wMDAwMDAwCi0tLSBhL2xpYm0vbWlwcy9mZW52LmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMTggKzAsMCBAQAotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQtMjAwNSBEYXZpZCBTY2h1bHR6IDxkYXNARnJlZUJTRC5PUkc+Ci0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICoKLSAqICRGcmVlQlNEOiBzcmMvbGliL21zdW4vbWlwcy9mZW52LmgsdiAxLjEgMjAwOC8wNC8yNiAxMjoyMDoyOSBpbXAgRXhwICQKLSAqLwotCi0jaWZuZGVmCV9GRU5WX0hfCi0jZGVmaW5lCV9GRU5WX0hfCi0KLSNpbmNsdWRlIDxzeXMvX3R5cGVzLmg+Ci0KLXR5cGVkZWYJX191aW50MzJfdAlmZW52X3Q7Ci10eXBlZGVmCV9fdWludDMyX3QJZmV4Y2VwdF90OwotCi0vKiBFeGNlcHRpb24gZmxhZ3MgKi8KLSNkZWZpbmUJRkVfSU5WQUxJRAkweDAwMDEKLSNkZWZpbmUJRkVfRElWQllaRVJPCTB4MDAwMgotI2RlZmluZQlGRV9PVkVSRkxPVwkweDAwMDQKLSNkZWZpbmUJRkVfVU5ERVJGTE9XCTB4MDAwOAotI2RlZmluZQlGRV9JTkVYQUNUCTB4MDAxMAotI2RlZmluZQlGRV9BTExfRVhDRVBUCShGRV9ESVZCWVpFUk8gfCBGRV9JTkVYQUNUIHwgXAotCQkJIEZFX0lOVkFMSUQgfCBGRV9PVkVSRkxPVyB8IEZFX1VOREVSRkxPVykKLQotLyogUm91bmRpbmcgbW9kZXMgKi8KLSNkZWZpbmUJRkVfVE9ORUFSRVNUCTB4MDAwMAotI2RlZmluZQlGRV9UT1dBUkRaRVJPCTB4MDAwMQotI2RlZmluZQlGRV9VUFdBUkQJMHgwMDAyCi0jZGVmaW5lCUZFX0RPV05XQVJECTB4MDAwMwotI2RlZmluZQlfUk9VTkRfTUFTSwkoRkVfVE9ORUFSRVNUIHwgRkVfRE9XTldBUkQgfCBcCi0JCQkgRkVfVVBXQVJEIHwgRkVfVE9XQVJEWkVSTykKLS8qIF9fQkVHSU5fREVDTFMgKi8KLQotLyogRGVmYXVsdCBmbG9hdGluZy1wb2ludCBlbnZpcm9ubWVudCAqLwotZXh0ZXJuIGNvbnN0IGZlbnZfdAlfX2ZlX2RmbF9lbnY7Ci0jZGVmaW5lCUZFX0RGTF9FTlYJKCZfX2ZlX2RmbF9lbnYpCi0KLS8qIFdlIG5lZWQgdG8gYmUgYWJsZSB0byBtYXAgc3RhdHVzIGZsYWcgcG9zaXRpb25zIHRvIG1hc2sgZmxhZyBwb3NpdGlvbnMgKi8KLSNkZWZpbmUgX0ZQVVNXX1NISUZUCTE2Ci0jZGVmaW5lCV9FTkFCTEVfTUFTSwkoRkVfQUxMX0VYQ0VQVCA8PCBfRlBVU1dfU0hJRlQpCi0KLSNpZmRlZglBUk1fSEFSRF9GTE9BVAotI2RlZmluZQlfX3JmcyhfX2Zwc3IpCV9fYXNtIF9fdm9sYXRpbGUoInJmcyAlMCIgOiAiPXIiICgqKF9fZnBzcikpKQotI2RlZmluZQlfX3dmcyhfX2Zwc3IpCV9fYXNtIF9fdm9sYXRpbGUoIndmcyAlMCIgOiA6ICJyIiAoX19mcHNyKSkKLSNlbHNlCi0jZGVmaW5lIF9fcmZzKF9fZnBzcikKLSNkZWZpbmUgX193ZnMoX19mcHNyKQotI2VuZGlmCi0KLXN0YXRpYyBfX2lubGluZSBpbnQKLWZlY2xlYXJleGNlcHQoaW50IF9fZXhjZXB0cykKLXsKLQlmZXhjZXB0X3QgX19mcHNyOwotCi0JX19yZnMoJl9fZnBzcik7Ci0JX19mcHNyICY9IH5fX2V4Y2VwdHM7Ci0JX193ZnMoX19mcHNyKTsKLQlyZXR1cm4gKDApOwotfQotCi1zdGF0aWMgX19pbmxpbmUgaW50Ci1mZWdldGV4Y2VwdGZsYWcoZmV4Y2VwdF90ICpfX2ZsYWdwLCBpbnQgX19leGNlcHRzKQotewotCWZleGNlcHRfdCBfX2Zwc3I7Ci0KLQlfX3JmcygmX19mcHNyKTsKLQkqX19mbGFncCA9IF9fZnBzciAmIF9fZXhjZXB0czsKLQlyZXR1cm4gKDApOwotfQotCi1zdGF0aWMgX19pbmxpbmUgaW50Ci1mZXNldGV4Y2VwdGZsYWcoY29uc3QgZmV4Y2VwdF90ICpfX2ZsYWdwLCBpbnQgX19leGNlcHRzKQotewotCWZleGNlcHRfdCBfX2Zwc3I7Ci0KLQlfX3JmcygmX19mcHNyKTsKLQlfX2Zwc3IgJj0gfl9fZXhjZXB0czsKLQlfX2Zwc3IgfD0gKl9fZmxhZ3AgJiBfX2V4Y2VwdHM7Ci0JX193ZnMoX19mcHNyKTsKLQlyZXR1cm4gKDApOwotfQotCi1zdGF0aWMgX19pbmxpbmUgaW50Ci1mZXJhaXNlZXhjZXB0KGludCBfX2V4Y2VwdHMpCi17Ci0JZmV4Y2VwdF90IF9fZXggPSBfX2V4Y2VwdHM7Ci0KLQlmZXNldGV4Y2VwdGZsYWcoJl9fZXgsIF9fZXhjZXB0cyk7CS8qIFhYWCAqLwotCXJldHVybiAoMCk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZSBpbnQKLWZldGVzdGV4Y2VwdChpbnQgX19leGNlcHRzKQotewotCWZleGNlcHRfdCBfX2Zwc3I7Ci0KLQlfX3JmcygmX19mcHNyKTsKLQlyZXR1cm4gKF9fZnBzciAmIF9fZXhjZXB0cyk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZSBpbnQKLWZlZ2V0cm91bmQodm9pZCkKLXsKLQotCS8qCi0JICogQXBwYXJlbnRseSwgdGhlIHJvdW5kaW5nIG1vZGUgaXMgc3BlY2lmaWVkIGFzIHBhcnQgb2YgdGhlCi0JICogaW5zdHJ1Y3Rpb24gZm9ybWF0IG9uIEFSTSwgc28gdGhlIGR5bmFtaWMgcm91bmRpbmcgbW9kZSBpcwotCSAqIGluZGV0ZXJtaW5hdGUuICBTb21lIEZQVXMgbWF5IGRpZmZlci4KLQkgKi8KLQlyZXR1cm4gKC0xKTsKLX0KLQotc3RhdGljIF9faW5saW5lIGludAotZmVzZXRyb3VuZChpbnQgX19yb3VuZCkKLXsKLQotCXJldHVybiAoLTEpOwotfQotCi1zdGF0aWMgX19pbmxpbmUgaW50Ci1mZWdldGVudihmZW52X3QgKl9fZW52cCkKLXsKLQotCV9fcmZzKF9fZW52cCk7Ci0JcmV0dXJuICgwKTsKLX0KLQotc3RhdGljIF9faW5saW5lIGludAotZmVob2xkZXhjZXB0KGZlbnZfdCAqX19lbnZwKQotewotCWZlbnZfdCBfX2VudjsKLQotCV9fcmZzKCZfX2Vudik7Ci0JKl9fZW52cCA9IF9fZW52OwotCV9fZW52ICY9IH4oRkVfQUxMX0VYQ0VQVCB8IF9FTkFCTEVfTUFTSyk7Ci0JX193ZnMoX19lbnYpOwotCXJldHVybiAoMCk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZSBpbnQKLWZlc2V0ZW52KGNvbnN0IGZlbnZfdCAqX19lbnZwKQotewotCi0JX193ZnMoKl9fZW52cCk7Ci0JcmV0dXJuICgwKTsKLX0KLQotc3RhdGljIF9faW5saW5lIGludAotZmV1cGRhdGVlbnYoY29uc3QgZmVudl90ICpfX2VudnApCi17Ci0JZmV4Y2VwdF90IF9fZnBzcjsKLQotCV9fcmZzKCZfX2Zwc3IpOwotCV9fd2ZzKCpfX2VudnApOwotCWZlcmFpc2VleGNlcHQoX19mcHNyICYgRkVfQUxMX0VYQ0VQVCk7Ci0JcmV0dXJuICgwKTsKLX0KLQotI2lmIF9fQlNEX1ZJU0lCTEUKLQotc3RhdGljIF9faW5saW5lIGludAotZmVlbmFibGVleGNlcHQoaW50IF9fbWFzaykKLXsKLQlmZW52X3QgX19vbGRfZnBzciwgX19uZXdfZnBzcjsKLQotCV9fcmZzKCZfX29sZF9mcHNyKTsKLQlfX25ld19mcHNyID0gX19vbGRfZnBzciB8IChfX21hc2sgJiBGRV9BTExfRVhDRVBUKSA8PCBfRlBVU1dfU0hJRlQ7Ci0JX193ZnMoX19uZXdfZnBzcik7Ci0JcmV0dXJuICgoX19vbGRfZnBzciA+PiBfRlBVU1dfU0hJRlQpICYgRkVfQUxMX0VYQ0VQVCk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZSBpbnQKLWZlZGlzYWJsZWV4Y2VwdChpbnQgX19tYXNrKQotewotCWZlbnZfdCBfX29sZF9mcHNyLCBfX25ld19mcHNyOwotCi0JX19yZnMoJl9fb2xkX2Zwc3IpOwotCV9fbmV3X2Zwc3IgPSBfX29sZF9mcHNyICYgfigoX19tYXNrICYgRkVfQUxMX0VYQ0VQVCkgPDwgX0ZQVVNXX1NISUZUKTsKLQlfX3dmcyhfX25ld19mcHNyKTsKLQlyZXR1cm4gKChfX29sZF9mcHNyID4+IF9GUFVTV19TSElGVCkgJiBGRV9BTExfRVhDRVBUKTsKLX0KLQotc3RhdGljIF9faW5saW5lIGludAotZmVnZXRleGNlcHQodm9pZCkKLXsKLQlmZW52X3QgX19mcHNyOwotCi0JX19yZnMoJl9fZnBzcik7Ci0JcmV0dXJuICgoX19mcHNyICYgX0VOQUJMRV9NQVNLKSA+PiBfRlBVU1dfU0hJRlQpOwotfQotCi0jZW5kaWYgLyogX19CU0RfVklTSUJMRSAqLwotCi0vKiBfX0VORF9ERUNMUyAqLwotCi0jZW5kaWYJLyogIV9GRU5WX0hfICovCi0KZGlmZiAtLWdpdCBhL2xpYm0vcG93ZXJwYy9NYWtlZmlsZS5pbmMgYi9saWJtL3Bvd2VycGMvTWFrZWZpbGUuaW5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZWIzNzAwLi4wMDAwMDAwCi0tLSBhL2xpYm0vcG93ZXJwYy9NYWtlZmlsZS5pbmMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSMgJEZyZWVCU0Q6IHNyYy9saWIvbXN1bi9wb3dlcnBjL01ha2VmaWxlLmluYyx2IDEuMSAyMDA1LzAzLzA3IDA0OjUzOjM2IGRhcyBFeHAgJAotCi1MREJMX1BSRUMgPSA1MwpkaWZmIC0tZ2l0IGEvbGlibS9wb3dlcnBjL19mcG1hdGguaCBiL2xpYm0vcG93ZXJwYy9fZnBtYXRoLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUyODVjYjkuLjAwMDAwMDAKLS0tIGEvbGlibS9wb3dlcnBjL19mcG1hdGguaAorKysgL2Rldi9udWxsCkBAIC0xLDQ5ICswLDAgQEAKLS8qLQotICogQ29weXJpZ2h0IChjKSAyMDAzIERhdmlkIFNjaHVsdHogPGRhc0BGcmVlQlNELk9SRz4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKgotICogJEZyZWVCU0Q6IHNyYy9saWIvbGliYy9wb3dlcnBjL19mcG1hdGguaCx2IDEuNyAyMDA1LzAzLzA3IDA0OjU1OjIyIGRhcyBFeHAgJAotICovCi0KLXVuaW9uIElFRUVsMmJpdHMgewotCWxvbmcgZG91YmxlCWU7Ci0Jc3RydWN0IHsKLQkJdW5zaWduZWQgaW50CQlzaWduCToxOwotCQl1bnNpZ25lZCBpbnQJCWV4cAk6MTE7Ci0JCXVuc2lnbmVkIGludAkJbWFuaAk6MjA7Ci0JCXVuc2lnbmVkIGludAkJbWFubAk6MzI7Ci0JfSBiaXRzOwotfTsKLQotI2RlZmluZQltYXNrX25iaXRfbCh1KQkoKHZvaWQpMCkKLSNkZWZpbmUJTERCTF9JTVBMSUNJVF9OQklUCi0jZGVmaW5lCUxEQkxfTkJJVAkwCi0KLSNkZWZpbmUJTERCTF9NQU5IX1NJWkUJMjAKLSNkZWZpbmUJTERCTF9NQU5MX1NJWkUJMzIKLQotI2RlZmluZQlMREJMX1RPX0FSUkFZMzIodSwgYSkgZG8gewkJCVwKLQkoYSlbMF0gPSAodWludDMyX3QpKHUpLmJpdHMubWFubDsJCVwKLQkoYSlbMV0gPSAodWludDMyX3QpKHUpLmJpdHMubWFuaDsJCVwKLX0gd2hpbGUoMCkKZGlmZiAtLWdpdCBhL2xpYm0vcG93ZXJwYy9mZW52LmMgYi9saWJtL3Bvd2VycGMvZmVudi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhOGZhODdhLi4wMDAwMDAwCi0tLSBhL2xpYm0vcG93ZXJwYy9mZW52LmMKKysrIC9kZXYvbnVsbApAQCAtMSwzMSArMCwwIEBACi0vKi0KLSAqIENvcHlyaWdodCAoYykgMjAwNCBEYXZpZCBTY2h1bHR6IDxkYXNARnJlZUJTRC5PUkc+Ci0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICoKLSAqICRGcmVlQlNEOiBzcmMvbGliL21zdW4vcG93ZXJwYy9mZW52LmMsdiAxLjEgMjAwNC8wNi8wNiAxMDowNToxMCBkYXMgRXhwICQKLSAqLwotCi0jaW5jbHVkZSA8ZmVudi5oPgotCi1jb25zdCBmZW52X3QgX19mZV9kZmxfZW52ID0gMHgwMDAwMDAwMDsKZGlmZiAtLWdpdCBhL2xpYm0vcG93ZXJwYy9mZW52LmggYi9saWJtL3Bvd2VycGMvZmVudi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZmQyMzg5Li4wMDAwMDAwCi0tLSBhL2xpYm0vcG93ZXJwYy9mZW52LmgKKysrIC9kZXYvbnVsbApAQCAtMSwyNjMgKzAsMCBAQAotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQtMjAwNSBEYXZpZCBTY2h1bHR6IDxkYXNARnJlZUJTRC5PUkc+Ci0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICoKLSAqICRGcmVlQlNEOiBzcmMvbGliL21zdW4vcG93ZXJwYy9mZW52LmgsdiAxLjMgMjAwNS8wMy8xNiAxOTowMzo0NSBkYXMgRXhwICQKLSAqLwotCi0jaWZuZGVmCV9GRU5WX0hfCi0jZGVmaW5lCV9GRU5WX0hfCi0KLSNpbmNsdWRlIDxzeXMvX3R5cGVzLmg+Ci0KLXR5cGVkZWYJX191aW50MzJfdAlmZW52X3Q7Ci10eXBlZGVmCV9fdWludDMyX3QJZmV4Y2VwdF90OwotCi0vKiBFeGNlcHRpb24gZmxhZ3MgKi8KLSNkZWZpbmUJRkVfSU5FWEFDVAkweDAyMDAwMDAwCi0jZGVmaW5lCUZFX0RJVkJZWkVSTwkweDA0MDAwMDAwCi0jZGVmaW5lCUZFX1VOREVSRkxPVwkweDA4MDAwMDAwCi0jZGVmaW5lCUZFX09WRVJGTE9XCTB4MTAwMDAwMDAKLSNkZWZpbmUJRkVfSU5WQUxJRAkweDIwMDAwMDAwCS8qIGFsbCB0eXBlcyBvZiBpbnZhbGlkIEZQIG9wcyAqLwotCi0vKgotICogVGhlIFBvd2VyUEMgYXJjaGl0ZWN0dXJlIGhhcyBleHRyYSBpbnZhbGlkIGZsYWdzIHRoYXQgaW5kaWNhdGUgdGhlCi0gKiBzcGVjaWZpYyB0eXBlIG9mIGludmFsaWQgb3BlcmF0aW9uIG9jY3VycmVkLiAgVGhlc2UgZmxhZ3MgbWF5IGJlCi0gKiB0ZXN0ZWQsIHNldCwgYW5kIGNsZWFyZWQtLS1idXQgbm90IG1hc2tlZC0tLXNlcGFyYXRlbHkuICBBbGwgb2YKLSAqIHRoZXNlIGJpdHMgYXJlIGNsZWFyZWQgd2hlbiBGRV9JTlZBTElEIGlzIGNsZWFyZWQsIGJ1dCBvbmx5Ci0gKiBGRV9WWFNPRlQgaXMgc2V0IHdoZW4gRkVfSU5WQUxJRCBpcyBleHBsaWNpdGx5IHNldCBpbiBzb2Z0d2FyZS4KLSAqLwotI2RlZmluZQlGRV9WWENWSQkweDAwMDAwMTAwCS8qIGludmFsaWQgaW50ZWdlciBjb252ZXJ0ICovCi0jZGVmaW5lCUZFX1ZYU1FSVAkweDAwMDAwMjAwCS8qIHNxdWFyZSByb290IG9mIGEgbmVnYXRpdmUgKi8KLSNkZWZpbmUJRkVfVlhTT0ZUCTB4MDAwMDA0MDAJLyogc29mdHdhcmUtcmVxdWVzdGVkIGV4Y2VwdGlvbiAqLwotI2RlZmluZQlGRV9WWFZDCQkweDAwMDgwMDAwCS8qIG9yZGVyZWQgY29tcGFyaXNvbiBpbnZvbHZpbmcgTmFOICovCi0jZGVmaW5lCUZFX1ZYSU1aCTB4MDAxMDAwMDAJLyogaW5mICogMCAqLwotI2RlZmluZQlGRV9WWFpEWgkweDAwMjAwMDAwCS8qIDAgLyAwICovCi0jZGVmaW5lCUZFX1ZYSURJCTB4MDA0MDAwMDAJLyogaW5mIC8gaW5mICovCi0jZGVmaW5lCUZFX1ZYSVNJCTB4MDA4MDAwMDAJLyogaW5mIC0gaW5mICovCi0jZGVmaW5lCUZFX1ZYU05BTgkweDAxMDAwMDAwCS8qIG9wZXJhdGlvbiBvbiBhIHNpZ25hbGxpbmcgTmFOICovCi0jZGVmaW5lCUZFX0FMTF9JTlZBTElECShGRV9WWENWSSB8IEZFX1ZYU1FSVCB8IEZFX1ZYU09GVCB8IEZFX1ZYVkMgfCBcCi0JCQkgRkVfVlhJTVogfCBGRV9WWFpEWiB8IEZFX1ZYSURJIHwgRkVfVlhJU0kgfCBcCi0JCQkgRkVfVlhTTkFOIHwgRkVfSU5WQUxJRCkKLSNkZWZpbmUJRkVfQUxMX0VYQ0VQVAkoRkVfRElWQllaRVJPIHwgRkVfSU5FWEFDVCB8IFwKLQkJCSBGRV9BTExfSU5WQUxJRCB8IEZFX09WRVJGTE9XIHwgRkVfVU5ERVJGTE9XKQotCi0vKiBSb3VuZGluZyBtb2RlcyAqLwotI2RlZmluZQlGRV9UT05FQVJFU1QJMHgwMDAwCi0jZGVmaW5lCUZFX1RPV0FSRFpFUk8JMHgwMDAxCi0jZGVmaW5lCUZFX1VQV0FSRAkweDAwMDIKLSNkZWZpbmUJRkVfRE9XTldBUkQJMHgwMDAzCi0jZGVmaW5lCV9ST1VORF9NQVNLCShGRV9UT05FQVJFU1QgfCBGRV9ET1dOV0FSRCB8IFwKLQkJCSBGRV9VUFdBUkQgfCBGRV9UT1dBUkRaRVJPKQotCi1fX0JFR0lOX0RFQ0xTCi0KLS8qIERlZmF1bHQgZmxvYXRpbmctcG9pbnQgZW52aXJvbm1lbnQgKi8KLWV4dGVybiBjb25zdCBmZW52X3QJX19mZV9kZmxfZW52OwotI2RlZmluZQlGRV9ERkxfRU5WCSgmX19mZV9kZmxfZW52KQotCi0vKiBXZSBuZWVkIHRvIGJlIGFibGUgdG8gbWFwIHN0YXR1cyBmbGFnIHBvc2l0aW9ucyB0byBtYXNrIGZsYWcgcG9zaXRpb25zICovCi0jZGVmaW5lCV9GUFVTV19TSElGVAkyMgotI2RlZmluZQlfRU5BQkxFX01BU0sJKChGRV9ESVZCWVpFUk8gfCBGRV9JTkVYQUNUIHwgRkVfSU5WQUxJRCB8IFwKLQkJCSBGRV9PVkVSRkxPVyB8IEZFX1VOREVSRkxPVykgPj4gX0ZQVVNXX1NISUZUKQotCi0jZGVmaW5lCV9fbWZmcyhfX2VudikJX19hc20gX192b2xhdGlsZSgibWZmcyAlMCIgOiAiPWYiICgqKF9fZW52KSkpCi0jZGVmaW5lCV9fbXRmc2YoX19lbnYpCV9fYXNtIF9fdm9sYXRpbGUoIm10ZnNmIDI1NSwlMCIgOiA6ICJmIiAoX19lbnYpKQotCi11bmlvbiBfX2Zwc2NyIHsKLQlkb3VibGUgX19kOwotCXN0cnVjdCB7Ci0JCV9fdWludDMyX3QgX19qdW5rOwotCQlmZW52X3QgX19yZWc7Ci0JfSBfX2JpdHM7Ci19OwotCi1zdGF0aWMgX19pbmxpbmUgaW50Ci1mZWNsZWFyZXhjZXB0KGludCBfX2V4Y2VwdHMpCi17Ci0JdW5pb24gX19mcHNjciBfX3I7Ci0KLQlpZiAoX19leGNlcHRzICYgRkVfSU5WQUxJRCkKLQkJX19leGNlcHRzIHw9IEZFX0FMTF9JTlZBTElEOwotCV9fbWZmcygmX19yLl9fZCk7Ci0JX19yLl9fYml0cy5fX3JlZyAmPSB+X19leGNlcHRzOwotCV9fbXRmc2YoX19yLl9fZCk7Ci0JcmV0dXJuICgwKTsKLX0KLQotc3RhdGljIF9faW5saW5lIGludAotZmVnZXRleGNlcHRmbGFnKGZleGNlcHRfdCAqX19mbGFncCwgaW50IF9fZXhjZXB0cykKLXsKLQl1bmlvbiBfX2Zwc2NyIF9fcjsKLQotCV9fbWZmcygmX19yLl9fZCk7Ci0JKl9fZmxhZ3AgPSBfX3IuX19iaXRzLl9fcmVnICYgX19leGNlcHRzOwotCXJldHVybiAoMCk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZSBpbnQKLWZlc2V0ZXhjZXB0ZmxhZyhjb25zdCBmZXhjZXB0X3QgKl9fZmxhZ3AsIGludCBfX2V4Y2VwdHMpCi17Ci0JdW5pb24gX19mcHNjciBfX3I7Ci0KLQlpZiAoX19leGNlcHRzICYgRkVfSU5WQUxJRCkKLQkJX19leGNlcHRzIHw9IEZFX0FMTF9FWENFUFQ7Ci0JX19tZmZzKCZfX3IuX19kKTsKLQlfX3IuX19iaXRzLl9fcmVnICY9IH5fX2V4Y2VwdHM7Ci0JX19yLl9fYml0cy5fX3JlZyB8PSAqX19mbGFncCAmIF9fZXhjZXB0czsKLQlfX210ZnNmKF9fci5fX2QpOwotCXJldHVybiAoMCk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZSBpbnQKLWZlcmFpc2VleGNlcHQoaW50IF9fZXhjZXB0cykKLXsKLQl1bmlvbiBfX2Zwc2NyIF9fcjsKLQotCWlmIChfX2V4Y2VwdHMgJiBGRV9JTlZBTElEKQotCQlfX2V4Y2VwdHMgfD0gRkVfVlhTT0ZUOwotCV9fbWZmcygmX19yLl9fZCk7Ci0JX19yLl9fYml0cy5fX3JlZyB8PSBfX2V4Y2VwdHM7Ci0JX19tdGZzZihfX3IuX19kKTsKLQlyZXR1cm4gKDApOwotfQotCi1zdGF0aWMgX19pbmxpbmUgaW50Ci1mZXRlc3RleGNlcHQoaW50IF9fZXhjZXB0cykKLXsKLQl1bmlvbiBfX2Zwc2NyIF9fcjsKLQotCV9fbWZmcygmX19yLl9fZCk7Ci0JcmV0dXJuIChfX3IuX19iaXRzLl9fcmVnICYgX19leGNlcHRzKTsKLX0KLQotc3RhdGljIF9faW5saW5lIGludAotZmVnZXRyb3VuZCh2b2lkKQotewotCXVuaW9uIF9fZnBzY3IgX19yOwotCi0JX19tZmZzKCZfX3IuX19kKTsKLQlyZXR1cm4gKF9fci5fX2JpdHMuX19yZWcgJiBfUk9VTkRfTUFTSyk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZSBpbnQKLWZlc2V0cm91bmQoaW50IF9fcm91bmQpCi17Ci0JdW5pb24gX19mcHNjciBfX3I7Ci0KLQlpZiAoX19yb3VuZCAmIH5fUk9VTkRfTUFTSykKLQkJcmV0dXJuICgtMSk7Ci0JX19tZmZzKCZfX3IuX19kKTsKLQlfX3IuX19iaXRzLl9fcmVnICY9IH5fUk9VTkRfTUFTSzsKLQlfX3IuX19iaXRzLl9fcmVnIHw9IF9fcm91bmQ7Ci0JX19tdGZzZihfX3IuX19kKTsKLQlyZXR1cm4gKDApOwotfQotCi1zdGF0aWMgX19pbmxpbmUgaW50Ci1mZWdldGVudihmZW52X3QgKl9fZW52cCkKLXsKLQl1bmlvbiBfX2Zwc2NyIF9fcjsKLQotCV9fbWZmcygmX19yLl9fZCk7Ci0JKl9fZW52cCA9IF9fci5fX2JpdHMuX19yZWc7Ci0JcmV0dXJuICgwKTsKLX0KLQotc3RhdGljIF9faW5saW5lIGludAotZmVob2xkZXhjZXB0KGZlbnZfdCAqX19lbnZwKQotewotCXVuaW9uIF9fZnBzY3IgX19yOwotCi0JX19tZmZzKCZfX3IuX19kKTsKLQkqX19lbnZwID0gX19yLl9fZDsKLQlfX3IuX19iaXRzLl9fcmVnICY9IH4oRkVfQUxMX0VYQ0VQVCB8IF9FTkFCTEVfTUFTSyk7Ci0JX19tdGZzZihfX3IuX19kKTsKLQlyZXR1cm4gKDApOwotfQotCi1zdGF0aWMgX19pbmxpbmUgaW50Ci1mZXNldGVudihjb25zdCBmZW52X3QgKl9fZW52cCkKLXsKLQl1bmlvbiBfX2Zwc2NyIF9fcjsKLQotCV9fci5fX2JpdHMuX19yZWcgPSAqX19lbnZwOwotCV9fbXRmc2YoX19yLl9fZCk7Ci0JcmV0dXJuICgwKTsKLX0KLQotc3RhdGljIF9faW5saW5lIGludAotZmV1cGRhdGVlbnYoY29uc3QgZmVudl90ICpfX2VudnApCi17Ci0JdW5pb24gX19mcHNjciBfX3I7Ci0KLQlfX21mZnMoJl9fci5fX2QpOwotCV9fci5fX2JpdHMuX19yZWcgJj0gRkVfQUxMX0VYQ0VQVDsKLQlfX3IuX19iaXRzLl9fcmVnIHw9ICpfX2VudnA7Ci0JX19tdGZzZihfX3IuX19kKTsKLQlyZXR1cm4gKDApOwotfQotCi0jaWYgX19CU0RfVklTSUJMRQotCi1zdGF0aWMgX19pbmxpbmUgaW50Ci1mZWVuYWJsZWV4Y2VwdChpbnQgX19tYXNrKQotewotCXVuaW9uIF9fZnBzY3IgX19yOwotCWZlbnZfdCBfX29sZG1hc2s7Ci0KLQlfX21mZnMoJl9fci5fX2QpOwotCV9fb2xkbWFzayA9IF9fci5fX2JpdHMuX19yZWc7Ci0JX19yLl9fYml0cy5fX3JlZyB8PSAoX19tYXNrICYgRkVfQUxMX0VYQ0VQVCkgPj4gX0ZQVVNXX1NISUZUOwotCV9fbXRmc2YoX19yLl9fZCk7Ci0JcmV0dXJuICgoX19vbGRtYXNrICYgX0VOQUJMRV9NQVNLKSA8PCBfRlBVU1dfU0hJRlQpOwotfQotCi1zdGF0aWMgX19pbmxpbmUgaW50Ci1mZWRpc2FibGVleGNlcHQoaW50IF9fbWFzaykKLXsKLQl1bmlvbiBfX2Zwc2NyIF9fcjsKLQlmZW52X3QgX19vbGRtYXNrOwotCi0JX19tZmZzKCZfX3IuX19kKTsKLQlfX29sZG1hc2sgPSBfX3IuX19iaXRzLl9fcmVnOwotCV9fci5fX2JpdHMuX19yZWcgJj0gfigoX19tYXNrICYgRkVfQUxMX0VYQ0VQVCkgPj4gX0ZQVVNXX1NISUZUKTsKLQlfX210ZnNmKF9fci5fX2QpOwotCXJldHVybiAoKF9fb2xkbWFzayAmIF9FTkFCTEVfTUFTSykgPDwgX0ZQVVNXX1NISUZUKTsKLX0KLQotc3RhdGljIF9faW5saW5lIGludAotZmVnZXRleGNlcHQodm9pZCkKLXsKLQl1bmlvbiBfX2Zwc2NyIF9fcjsKLQotCV9fbWZmcygmX19yLl9fZCk7Ci0JcmV0dXJuICgoX19yLl9fYml0cy5fX3JlZyAmIF9FTkFCTEVfTUFTSykgPDwgX0ZQVVNXX1NISUZUKTsKLX0KLQotI2VuZGlmIC8qIF9fQlNEX1ZJU0lCTEUgKi8KLQotX19FTkRfREVDTFMKLQotI2VuZGlmCS8qICFfRkVOVl9IXyAqLwpkaWZmIC0tZ2l0IGEvbGlibS9zaC9fZnBtYXRoLmggYi9saWJtL3NoL19mcG1hdGguaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjc1ZWM3Yi4uMDAwMDAwMAotLS0gYS9saWJtL3NoL19mcG1hdGguaAorKysgL2Rldi9udWxsCkBAIC0xLDU4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0LCBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogICBEZXJpdmVkIGZyb20gImJpb25pYy9saWJtL2FybS9fZnBtYXRoLmgiCi0gKiAgIENvcHlyaWdodCAoYykgMjAwMiwgMjAwMyBEYXZpZCBTY2h1bHR6IDxkYXNARnJlZUJTRC5PUkc+Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogICAgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUwotICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKLSAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCi0gKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKLSAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAotICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0gKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLS8qCi0gKiBBc3N1bWVzIHRoYXQgJ2xvbmcgZG91YmxlJyBvbiBTSC1saW51eCBpcyBqdXN0IGFuIGFsaWFzIGZvciAnZG91YmxlJy4KLSAqLwotdW5pb24gSUVFRWwyYml0cyB7Ci0JbG9uZyBkb3VibGUJZTsKLQlzdHJ1Y3QgewotI2lmICBfX0JZVEVfT1JERVIgPT0gX19MSVRUTEVfRU5ESUFOCi0JCXVuc2lnbmVkIGludAltYW5sCTozMjsKLQkJdW5zaWduZWQgaW50CW1hbmgJOjIwOwotCQl1bnNpZ25lZCBpbnQJZXhwCToxMTsKLQkJdW5zaWduZWQgaW50CXNpZ24JOjE7Ci0jZWxpZiBfX0JZVEVfT1JERVIgPT0gX19CSUdfRU5ESUFOCi0JCXVuc2lnbmVkIGludAlzaWduCToxOwotCQl1bnNpZ25lZCBpbnQJZXhwCToxMTsKLQkJdW5zaWduZWQgaW50CW1hbmgJOjIwOwotCQl1bnNpZ25lZCBpbnQJbWFubAk6MzI7Ci0jZW5kaWYKLQl9IGJpdHM7Ci19OwotCi0vKgotICogTERCTF9OQklUIGlzIGEgbWFzayBpbmRpY2F0aW5nIHRoZSBwb3NpdGlvbiBvZiB0aGUgaW50ZWdlcgotICogYml0IGluIGEgbG9uZyBkb3VibGUuICBCdXQgU0g0IGRvZXMgbm90IHN1cHBvcnQgaXQuCi0gKi8KLSNkZWZpbmUJTERCTF9OQklUCTAKLSNkZWZpbmUJbWFza19uYml0X2wodSkJKCh2b2lkKTApCi0KLSNkZWZpbmUJTERCTF9NQU5IX1NJWkUJMjAKLSNkZWZpbmUJTERCTF9NQU5MX1NJWkUJMzIKZGlmZiAtLWdpdCBhL2xpYm0vc2gvZmVudi5jIGIvbGlibS9zaC9mZW52LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNhOGY0NzYuLjAwMDAwMDAKLS0tIGEvbGlibS9zaC9mZW52LmMKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdCwgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqICAgRGVyaXZlZCBmcm9tICJiaW9uaWMvbGlibS9hcm0vZmVudi5jIgotICogICBDb3B5cmlnaHQgKGMpIDIwMDQgRGF2aWQgU2NodWx0eiA8ZGFzQEZyZWVCU0QuT1JHPgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqICAgIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKLSAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi0gKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCi0gKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAotICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCi0gKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKLSAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi1sb25nIF9fZnBzY3JfdmFsdWVzWzJdID0geyAwTCwgMHg4MDAwMEwgfTsKZGlmZiAtLWdpdCBhL2xpYm0vc2gvZmVudi5oIGIvbGlibS9zaC9mZW52LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU4NzJmNDcuLjAwMDAwMDAKLS0tIGEvbGlibS9zaC9mZW52LmgKKysrIC9kZXYvbnVsbApAQCAtMSwyNDAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QsIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAgIERlcml2ZWQgZnJvbSAiYmlvbmljL2xpYm0vYXJtL2ZlbnYuaCIKLSAqICAgQ29weXJpZ2h0IChjKSAyMDA0LTIwMDUgRGF2aWQgU2NodWx0eiA8ZGFzQEZyZWVCU0QuT1JHPgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqICAgIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKLSAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi0gKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCi0gKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAotICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCi0gKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKLSAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIF9GRU5WX0hfCi0jZGVmaW5lIF9GRU5WX0hfCi0KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotCi10eXBlZGVmCXVpbnQzMl90CWZlbnZfdDsKLXR5cGVkZWYJdWludDMyX3QJZmV4Y2VwdF90OwotCi0vKiBFeGNlcHRpb24gZmxhZ3MgKi8KLSNkZWZpbmUJRkVfSU5WQUxJRAkJMHgwMDEwCi0jZGVmaW5lCUZFX0RJVkJZWkVSTwkweDAwMDgKLSNkZWZpbmUJRkVfT1ZFUkZMT1cJCTB4MDAwNAotI2RlZmluZQlGRV9VTkRFUkZMT1cJMHgwMDAyCi0jZGVmaW5lCUZFX0lORVhBQ1QJCTB4MDAwMQotI2RlZmluZQlGRV9BTExfRVhDRVBUCShGRV9ESVZCWVpFUk8gfCBGRV9JTkVYQUNUIHwgXAotCQkJCSBGRV9JTlZBTElEIHwgRkVfT1ZFUkZMT1cgfCBGRV9VTkRFUkZMT1cpCi0KLS8qIFJvdW5kaW5nIG1vZGVzICovCi0jZGVmaW5lCUZFX1RPTkVBUkVTVAkweDAwMDAKLSNkZWZpbmUJRkVfVE9XQVJEWkVSTwkweDAwMDEKLSNkZWZpbmUJRkVfVVBXQVJECTB4MDAwMiAvKiBub3Qgc3VwcG9yZXRkICovCi0jZGVmaW5lCUZFX0RPV05XQVJECTB4MDAwMyAvKiBub3Qgc3VwcG9yZXRkICovCi0jZGVmaW5lCV9ST1VORF9NQVNLCShGRV9UT05FQVJFU1QgfCBGRV9ET1dOV0FSRCB8IFwKLQkJCQkgRkVfVVBXQVJEIHwgRkVfVE9XQVJEWkVSTykKLQotLyogYml0IHNoaWZ0IGZvciBGUFNDUiBtYXBwaW5nICovCi0jZGVmaW5lCV9GUFVFX0NBVVNFX1NISUZUCTEyCi0jZGVmaW5lCV9GUFVFX0VOQUJMRV9TSElGVAkxNwotI2RlZmluZQlfRlBVRV9GTEFHX1NISUZUCSAyCi0KLS8qIGJpdCBzaGlmdGVycyAqLwotI2RlZmluZQlfRlBVRV9DQVVTRShfRVhDUykJKChfRVhDUykgPDwgX0ZQVUVfQ0FVU0VfU0hJRlQpCi0jZGVmaW5lCV9GUFVFX0VOQUJMRShfRVhDUykJKChfRVhDUykgPDwgX0ZQVUVfRU5BQkxFX1NISUZUKQotI2RlZmluZQlfRlBVRV9GTEFHKF9FWENTKQkoKF9FWENTKSA8PCBfRlBVRV9GTEFHX1NISUZUKQotCi0jZGVmaW5lCV9HRVRfRlBVRV9DQVVTRShfRlBVRSkJCSgoKF9GUFVFKSA+PiBfRlBVRV9DQVVTRV9TSElGVCkgJiBGRV9BTExfRVhDRVBUKQotI2RlZmluZQlfR0VUX0ZQVUVfRU5BQkxFKF9GUFVFKQkoKChfRlBVRSkgPj4gX0ZQVUVfRU5BQkxFX1NISUZUKSYgRkVfQUxMX0VYQ0VQVCkKLSNkZWZpbmUJX0dFVF9GUFVFX0ZMQUcoX0ZQVUUpCQkoKChfRlBVRSkgPj4gX0ZQVUVfRkxBR19TSElGVCkgJiBGRV9BTExfRVhDRVBUKQotCi0KLS8qIEZQU0NSIHJlZ2lzdGVyIGFjY2Vzc29ycyAqLwotI2lmZGVmCV9fU0g0X05PRlBVX18KLSNkZWZpbmUJX19yZWFkX2Zwc2NyKF9wdHIpCi0jZGVmaW5lCV9fd3JpdGVfZnBzY3IoX3ZhbCkKLSNlbHNlCi0jZGVmaW5lCV9fcmVhZF9mcHNjcihfcHRyKQlfX2FzbSBfX3ZvbGF0aWxlKCJzdHMgZnBzY3IsICUwIiA6ICI9ciIgKCooX3B0cikpKQotI2RlZmluZQlfX3dyaXRlX2Zwc2NyKF92YWwpCV9fYXNtIF9fdm9sYXRpbGUoImxkcyAlMCwgZnBzY3IiIDogOiAiciIgKF92YWwpKQotI2VuZGlmCi0KLQotLyogZnVuY3Rpb25zIGZvciBsaWJtICovCi1zdGF0aWMgX19pbmxpbmUgaW50Ci1mZWNsZWFyZXhjZXB0KGludCBfX2V4Y2VwdHMpCi17Ci0JdWludDMyX3QgX19mcHNjcjsKLQotCV9fcmVhZF9mcHNjcigmX19mcHNjcik7Ci0JX19mcHNjciAmPSB+X0ZQVUVfRkxBRyhfX2V4Y2VwdHMpOwotCV9fd3JpdGVfZnBzY3IoX19mcHNjcik7Ci0JcmV0dXJuICgwKTsKLX0KLQotc3RhdGljIF9faW5saW5lIGludAotZmVnZXRleGNlcHRmbGFnKGZleGNlcHRfdCAqX19mbGFncCwgaW50IF9fZXhjZXB0cykKLXsKLQl1aW50MzJfdCBfX2Zwc2NyOwotCi0JX19yZWFkX2Zwc2NyKCZfX2Zwc2NyKTsKLQkqX19mbGFncCA9IF9HRVRfRlBVRV9GTEFHKF9fZnBzY3IpICYgX19leGNlcHRzOwotCXJldHVybiAoMCk7Ci19Ci0KLQotc3RhdGljIF9faW5saW5lIGludAotZmVzZXRleGNlcHRmbGFnKGNvbnN0IGZleGNlcHRfdCAqX19mbGFncCwgaW50IF9fZXhjZXB0cykKLXsKLQl1aW50MzJfdCBfX2Zwc2NyOwotCi0JX19yZWFkX2Zwc2NyKCZfX2Zwc2NyKTsKLQlfX2Zwc2NyICY9IH5fRlBVRV9GTEFHKF9fZXhjZXB0cyk7Ci0JX19mcHNjciB8PSB+X0ZQVUVfRkxBRygqX19mbGFncCAmIF9fZXhjZXB0cyk7Ci0JX193cml0ZV9mcHNjcihfX2Zwc2NyKTsKLQlyZXR1cm4gKDApOwotfQotCi0KLXN0YXRpYyBfX2lubGluZSBpbnQKLWZlcmFpc2VleGNlcHQoaW50IF9fZXhjZXB0cykKLXsKLQlmZXhjZXB0X3QgX19leCA9IF9fZXhjZXB0czsKLQotCWZlc2V0ZXhjZXB0ZmxhZygmX19leCwgX19leGNlcHRzKTsJLyogWFhYICovCi0JcmV0dXJuICgwKTsKLX0KLQotCi1zdGF0aWMgX19pbmxpbmUgaW50Ci1mZXRlc3RleGNlcHQoaW50IF9fZXhjZXB0cykKLXsKLQlmZXhjZXB0X3QgX19leDsKLQotCWZlZ2V0ZXhjZXB0ZmxhZygmX19leCwgIF9fZXhjZXB0cyk7Ci0JcmV0dXJuIChfX2V4KTsKLX0KLQotCi1zdGF0aWMgX19pbmxpbmUgaW50Ci1mZWdldHJvdW5kKHZvaWQpCi17Ci0JdWludDMyX3QgX19mcHNjciA9IDA7Ci0KLQlfX3JlYWRfZnBzY3IoJl9fZnBzY3IpOwotCXJldHVybiAoX19mcHNjciAmIF9ST1VORF9NQVNLKTsJCi19Ci0KLXN0YXRpYyBfX2lubGluZSBpbnQKLWZlc2V0cm91bmQoaW50IF9fcm91bmQpCi17Ci0JdWludDMyX3QgX19mcHNjciA9IDA7Ci0KLQlpZiAoX19yb3VuZCA9PSBGRV9VUFdBUkQgfHwgX19yb3VuZCA9PSBGRV9ET1dOV0FSRCkgewotCQlmcHJpbnRmKHN0ZGVyciwgImxpYm0gc3VwZXJoIDogIgotCQkJInVwd2FyZC9kb3dud2FyZCByb3VuZGluZyBub3Qgc3VwcG9yZXRkLlxuIik7Ci0JCXJldHVybiAtMTsKLQl9Ci0KLQlfX3JlYWRfZnBzY3IoJl9fZnBzY3IpOwotCV9fZnBzY3IgJj0gfl9ST1VORF9NQVNLOwotCV9fZnBzY3IgfD0gKF9fcm91bmQgJiBfUk9VTkRfTUFTSyk7Ci0JX193cml0ZV9mcHNjcihfX2Zwc2NyKTsKLQlyZXR1cm4gKDApOwotfQotCi1zdGF0aWMgX19pbmxpbmUgaW50Ci1mZWdldGVudihmZW52X3QgKl9fZW52cCkKLXsKLQlfX3JlYWRfZnBzY3IoX19lbnZwKTsKLQlyZXR1cm4gKDApOwotfQotCi1zdGF0aWMgX19pbmxpbmUgaW50Ci1mZWhvbGRleGNlcHQoZmVudl90ICpfX2VudnApCi17Ci0JdWludDMyX3QgX19mcHNjcjsKLQotCV9fcmVhZF9mcHNjcigmX19mcHNjcik7Ci0JKl9fZW52cCA9IF9fZnBzY3I7Ci0JX19mcHNjciAmPSB+X0ZQVUVfRkxBRyhGRV9BTExfRVhDRVBUKTsKLQlfX3dyaXRlX2Zwc2NyKF9fZnBzY3IpOwotCXJldHVybiAoMCk7Ci19Ci0KLQotc3RhdGljIF9faW5saW5lIGludAotZmVzZXRlbnYoY29uc3QgZmVudl90ICpfX2VudnApCi17Ci0JX193cml0ZV9mcHNjcigqX19lbnZwKTsKLQlyZXR1cm4gKDApOwotfQotCi0KLXN0YXRpYyBfX2lubGluZSBpbnQKLWZldXBkYXRlZW52KGNvbnN0IGZlbnZfdCAqX19lbnZwKQotewotCXVpbnQzMl90IF9fZnBzY3I7Ci0KLQlfX3JlYWRfZnBzY3IoJl9fZnBzY3IpOwotCV9fd3JpdGVfZnBzY3IoKl9fZW52cCk7Ci0JZmVyYWlzZWV4Y2VwdChfR0VUX0ZQVUVfRkxBRyhfX2Zwc2NyKSk7Ci0JcmV0dXJuICgwKTsKLX0KLQotI2lmIF9fQlNEX1ZJU0lCTEUKLQotc3RhdGljIF9faW5saW5lIGludAotZmVlbmFibGVleGNlcHQoaW50IF9fbWFzaykKLXsKLQl1aW50MzJfdCBfX29sZF9mcHNjciwgX19uZXdfZnBzY3I7Ci0KLQlfX3JlYWRfZnBzY3IoJl9fb2xkX2Zwc2NyKTsKLQlfX25ld19mcHNjciA9IF9fb2xkX2Zwc2NyIHwgX0ZQVUVfRU5BQkxFKF9fbWFzayAmIEZFX0FMTF9FWENFUFQpOwotCV9fd3JpdGVfZnBzY3IoX19uZXdfZnBzY3IpOwotCXJldHVybiAoX0dFVF9GUFVFX0VOQUJMRShfX29sZF9mcHNjcikpOwotfQotCi1zdGF0aWMgX19pbmxpbmUgaW50Ci1mZWRpc2FibGVleGNlcHQoaW50IF9fbWFzaykKLXsKLQl1aW50MzJfdCBfX29sZF9mcHNjciwgX19uZXdfZnBzY3I7Ci0KLQlfX3JlYWRfZnBzY3IoJl9fb2xkX2Zwc2NyKTsKLQlfX25ld19mcHNjciA9IF9fb2xkX2Zwc2NyICYgfihfRlBVRV9FTkFCTEUoX19tYXNrICYgRkVfQUxMX0VYQ0VQVCkpOwotCV9fd3JpdGVfZnBzY3IoX19uZXdfZnBzY3IpOwotCXJldHVybiAoX0dFVF9GUFVFX0VOQUJMRShfX29sZF9mcHNjcikpOwotfQotCi1zdGF0aWMgX19pbmxpbmUgaW50Ci1mZWdldGV4Y2VwdCh2b2lkKQotewotCXVpbnQzMl90IF9fZnBzY3I7Ci0KLQlfX3JlYWRfZnBzY3IoJl9fZnBzY3IpOwotCXJldHVybiAoX0dFVF9GUFVFX0VOQUJMRShfX2Zwc2NyKSk7Ci19Ci0KLSNlbmRpZiAvKiBfX0JTRF9WSVNJQkxFICovCi0KLQotI2VuZGlmIC8qIF9GRU5WX0hfICovCi0KZGlmZiAtLWdpdCBhL2xpYm0vc2luY29zLmMgYi9saWJtL3NpbmNvcy5jCmluZGV4IGU5ZjZkY2MuLjg5MWFhMzEgMTAwNjQ0Ci0tLSBhL2xpYm0vc2luY29zLmMKKysrIGIvbGlibS9zaW5jb3MuYwpAQCAtMzUsMjAgKzM1LDE3IEBACiAvLyBUaHVzIHdlIGp1c3QgZW5mb3JjZSAtTzAgd2hlbiBjb21waWxpbmcgdGhpcyBmaWxlLgogI3ByYWdtYSBHQ0Mgb3B0aW1pemUgKCJPMCIpCiAKLXZvaWQgIHNpbmNvcyhkb3VibGUgeCwgZG91YmxlICpwc2luLCBkb3VibGUgKnBjb3MpCi17Ci0gICAgKnBzaW4gPSBzaW4oeCk7Ci0gICAgKnBjb3MgPSBjb3MoeCk7Cit2b2lkIHNpbmNvcyhkb3VibGUgeCwgZG91YmxlKiBwX3NpbiwgZG91YmxlKiBwX2NvcykgeworICAqcF9zaW4gPSBzaW4oeCk7CisgICpwX2NvcyA9IGNvcyh4KTsKIH0KIAotdm9pZCAgc2luY29zZihmbG9hdCB4LCBmbG9hdCAqcHNpbiwgZmxvYXQgKnBjb3MpCi17Ci0gICAgKnBzaW4gPSBzaW5mKHgpOwotICAgICpwY29zID0gY29zZih4KTsKK3ZvaWQgc2luY29zZihmbG9hdCB4LCBmbG9hdCogcF9zaW5mLCBmbG9hdCogcF9jb3NmKSB7CisgICpwX3NpbmYgPSBzaW5mKHgpOworICAqcF9jb3NmID0gY29zZih4KTsKIH0KIAotdm9pZCAgc2luY29zbChsb25nIGRvdWJsZSB4LCBsb25nIGRvdWJsZSAqcHNpbiwgbG9uZyBkb3VibGUgKnBjb3MpCi17Ci0gICAgKnBzaW4gPSBzaW4oeCk7Ci0gICAgKnBjb3MgPSBjb3MoeCk7Cit2b2lkIHNpbmNvc2wobG9uZyBkb3VibGUgeCwgbG9uZyBkb3VibGUqIHBfc2lubCwgbG9uZyBkb3VibGUqIHBfY29zbCkgeworICAqcF9zaW5sID0gc2lubCh4KTsKKyAgKnBfY29zbCA9IGNvc2woeCk7CiB9CmRpZmYgLS1naXQgYS9saWJtL3NwYXJjNjQvTWFrZWZpbGUuaW5jIGIvbGlibS9zcGFyYzY0L01ha2VmaWxlLmluYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTg4M2ZhOS4uMDAwMDAwMAotLS0gYS9saWJtL3NwYXJjNjQvTWFrZWZpbGUuaW5jCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi0jICRGcmVlQlNEOiBzcmMvbGliL21zdW4vc3BhcmM2NC9NYWtlZmlsZS5pbmMsdiAxLjIgMjAwNS8wMy8wNyAwNDo1MzozNiBkYXMgRXhwICQKLQotQVJDSF9TUkNTPSBlX3NxcnQuUyBlX3NxcnRmLlMKLUxEQkxfUFJFQz0gMTEzCmRpZmYgLS1naXQgYS9saWJtL3NwYXJjNjQvX2ZwbWF0aC5oIGIvbGlibS9zcGFyYzY0L19mcG1hdGguaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGFmYWFiOS4uMDAwMDAwMAotLS0gYS9saWJtL3NwYXJjNjQvX2ZwbWF0aC5oCisrKyAvZGV2L251bGwKQEAgLTEsNTIgKzAsMCBAQAotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDMgTWlrZSBCYXJjcm9mdCA8bWlrZUBGcmVlQlNELm9yZz4KLSAqIENvcHlyaWdodCAoYykgMjAwMiwgMjAwMyBEYXZpZCBTY2h1bHR6IDxkYXNARnJlZUJTRC5PUkc+Ci0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICoKLSAqICRGcmVlQlNEOiBzcmMvbGliL2xpYmMvc3BhcmM2NC9fZnBtYXRoLmgsdiAxLjUgMjAwNS8wMy8wNyAwNDo1NToyMiBkYXMgRXhwICQKLSAqLwotCi11bmlvbiBJRUVFbDJiaXRzIHsKLQlsb25nIGRvdWJsZQllOwotCXN0cnVjdCB7Ci0JCXVuc2lnbmVkIGludAlzaWduCToxOwotCQl1bnNpZ25lZCBpbnQJZXhwCToxNTsKLQkJdW5zaWduZWQgbG9uZwltYW5oCTo0ODsKLQkJdW5zaWduZWQgbG9uZwltYW5sCTo2NDsKLQl9IGJpdHM7Ci19OwotCi0jZGVmaW5lCW1hc2tfbmJpdF9sKHUpCSgodm9pZCkwKQotI2RlZmluZQlMREJMX0lNUExJQ0lUX05CSVQKLSNkZWZpbmUJTERCTF9OQklUCTAKLQotI2RlZmluZQlMREJMX01BTkhfU0laRQk0OAotI2RlZmluZQlMREJMX01BTkxfU0laRQk2NAotCi0jZGVmaW5lCUxEQkxfVE9fQVJSQVkzMih1LCBhKSBkbyB7CQkJXAotCShhKVswXSA9ICh1aW50MzJfdCkodSkuYml0cy5tYW5sOwkJXAotCShhKVsxXSA9ICh1aW50MzJfdCkoKHUpLmJpdHMubWFubCA+PiAzMik7ICAgICAgCVwKLQkoYSlbMl0gPSAodWludDMyX3QpKHUpLmJpdHMubWFuaDsJCVwKLQkoYSlbM10gPSAodWludDMyX3QpKCh1KS5iaXRzLm1hbmggPj4gMzIpOwlcCi19IHdoaWxlKDApCmRpZmYgLS1naXQgYS9saWJtL3NwYXJjNjQvZV9zcXJ0LlMgYi9saWJtL3NwYXJjNjQvZV9zcXJ0LlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk1Zjc5YTYuLjAwMDAwMDAKLS0tIGEvbGlibS9zcGFyYzY0L2Vfc3FydC5TCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgRGF2aWQgU2NodWx0eiA8ZGFzQEZyZWVCU0QuT1JHPgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KLV9fRkJTRElEKCIkRnJlZUJTRDogc3JjL2xpYi9tc3VuL3NwYXJjNjQvZV9zcXJ0LlMsdiAxLjEgMjAwNS8wMi8yMSAxODoyNzo1NyBkYXMgRXhwICQiKQotCi1FTlRSWShzcXJ0KQotCXJldGwKLQlmc3FydGQgJWYwLCAlZjAKLUVORChzcXJ0KQpkaWZmIC0tZ2l0IGEvbGlibS9zcGFyYzY0L2Vfc3FydGYuUyBiL2xpYm0vc3BhcmM2NC9lX3NxcnRmLlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUxZjdjZjYuLjAwMDAwMDAKLS0tIGEvbGlibS9zcGFyYzY0L2Vfc3FydGYuUworKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLS8qLQotICogQ29weXJpZ2h0IChjKSAyMDA1IERhdmlkIFNjaHVsdHogPGRhc0BGcmVlQlNELk9SRz4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+Ci1fX0ZCU0RJRCgiJEZyZWVCU0Q6IHNyYy9saWIvbXN1bi9zcGFyYzY0L2Vfc3FydGYuUyx2IDEuMSAyMDA1LzAyLzIxIDE4OjI3OjU3IGRhcyBFeHAgJCIpCi0KLUVOVFJZKHNxcnRmKQotCXJldGwKLQlmc3FydHMgJWYxLCAlZjAKLUVORChzcXJ0ZikKZGlmZiAtLWdpdCBhL2xpYm0vc3BhcmM2NC9mZW52LmMgYi9saWJtL3NwYXJjNjQvZmVudi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3OWEwZjY0Li4wMDAwMDAwCi0tLSBhL2xpYm0vc3BhcmM2NC9mZW52LmMKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi0vKi0KLSAqIENvcHlyaWdodCAoYykgMjAwNCBEYXZpZCBTY2h1bHR6IDxkYXNARnJlZUJTRC5PUkc+Ci0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICoKLSAqICRGcmVlQlNEOiBzcmMvbGliL21zdW4vc3BhcmM2NC9mZW52LmMsdiAxLjEgMjAwNC8wNi8wNiAxMDowNTo1NyBkYXMgRXhwICQKLSAqLwotCi0jaW5jbHVkZSA8ZmVudi5oPgotCi0vKgotICogVGhlIEZTUl92ZXJzaW9uIGZpZWxkIG1heSBiZSBkaWZmZXJlbnQgb24gZGlmZmVyZW50Ci0gKiBpbXBsZW1lbnRhdGlvbnMsIGJ1dCBpdCBpcyBpbW11dGFibGUgYW5kIG9wYXF1ZSB0byB0aGUKLSAqIGFwcGxpY2F0aW9uLiAgVGh1cywgMCBpcyB2YWxpZCBhcyB0aGUgZGVmYXVsdCBlbnZpcm9ubWVudC4KLSAqLwotY29uc3QgZmVudl90IF9fZmVfZGZsX2VudiA9IDA7CmRpZmYgLS1naXQgYS9saWJtL3NwYXJjNjQvZmVudi5oIGIvbGlibS9zcGFyYzY0L2ZlbnYuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjg0YzRhMi4uMDAwMDAwMAotLS0gYS9saWJtL3NwYXJjNjQvZmVudi5oCisrKyAvZGV2L251bGwKQEAgLTEsMjU0ICswLDAgQEAKLS8qLQotICogQ29weXJpZ2h0IChjKSAyMDA0LTIwMDUgRGF2aWQgU2NodWx0eiA8ZGFzQEZyZWVCU0QuT1JHPgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqCi0gKiAkRnJlZUJTRDogc3JjL2xpYi9tc3VuL3NwYXJjNjQvZmVudi5oLHYgMS4zIDIwMDUvMDMvMTYgMTk6MDM6NDYgZGFzIEV4cCAkCi0gKi8KLQotI2lmbmRlZglfRkVOVl9IXwotI2RlZmluZQlfRkVOVl9IXwotCi0jaW5jbHVkZSA8c3lzL190eXBlcy5oPgotCi10eXBlZGVmCV9fdWludDY0X3QJZmVudl90OwotdHlwZWRlZglfX3VpbnQ2NF90CWZleGNlcHRfdDsKLQotLyogRXhjZXB0aW9uIGZsYWdzICovCi0jZGVmaW5lCUZFX0lOVkFMSUQJMHgwMDAwMDIwMAotI2RlZmluZQlGRV9ESVZCWVpFUk8JMHgwMDAwMDA0MAotI2RlZmluZQlGRV9PVkVSRkxPVwkweDAwMDAwMTAwCi0jZGVmaW5lCUZFX1VOREVSRkxPVwkweDAwMDAwMDgwCi0jZGVmaW5lCUZFX0lORVhBQ1QJMHgwMDAwMDAyMAotI2RlZmluZQlGRV9BTExfRVhDRVBUCShGRV9ESVZCWVpFUk8gfCBGRV9JTkVYQUNUIHwgXAotCQkJIEZFX0lOVkFMSUQgfCBGRV9PVkVSRkxPVyB8IEZFX1VOREVSRkxPVykKLQotLyoKLSAqIFJvdW5kaW5nIG1vZGVzCi0gKgotICogV2UgY2FuJ3QganVzdCB1c2UgdGhlIGhhcmR3YXJlIGJpdCB2YWx1ZXMgaGVyZSwgYmVjYXVzZSB0aGF0IHdvdWxkCi0gKiBtYWtlIEZFX1VQV0FSRCBhbmQgRkVfRE9XTldBUkQgbmVnYXRpdmUsIHdoaWNoIGlzIG5vdCBhbGxvd2VkLgotICovCi0jZGVmaW5lCUZFX1RPTkVBUkVTVAkweDAKLSNkZWZpbmUJRkVfVE9XQVJEWkVSTwkweDEKLSNkZWZpbmUJRkVfVVBXQVJECTB4MgotI2RlZmluZQlGRV9ET1dOV0FSRAkweDMKLSNkZWZpbmUJX1JPVU5EX01BU0sJKEZFX1RPTkVBUkVTVCB8IEZFX0RPV05XQVJEIHwgXAotCQkJIEZFX1VQV0FSRCB8IEZFX1RPV0FSRFpFUk8pCi0jZGVmaW5lCV9ST1VORF9TSElGVAkzMAotCi1fX0JFR0lOX0RFQ0xTCi0KLS8qIERlZmF1bHQgZmxvYXRpbmctcG9pbnQgZW52aXJvbm1lbnQgKi8KLWV4dGVybiBjb25zdCBmZW52X3QJX19mZV9kZmxfZW52OwotI2RlZmluZQlGRV9ERkxfRU5WCSgmX19mZV9kZmxfZW52KQotCi0vKiBXZSBuZWVkIHRvIGJlIGFibGUgdG8gbWFwIHN0YXR1cyBmbGFnIHBvc2l0aW9ucyB0byBtYXNrIGZsYWcgcG9zaXRpb25zICovCi0jZGVmaW5lIF9GUFVTV19TSElGVAkxOAotI2RlZmluZQlfRU5BQkxFX01BU0sJKEZFX0FMTF9FWENFUFQgPDwgX0ZQVVNXX1NISUZUKQotCi0jZGVmaW5lCV9fbGR4ZnNyKF9fcikJX19hc20gX192b2xhdGlsZSgibGR4ICUwLCAlJWZzciIgOiA6ICJtIiAoX19yKSkKLSNkZWZpbmUJX19zdHhmc3IoX19yKQlfX2FzbSBfX3ZvbGF0aWxlKCJzdHggJSVmc3IsICUwIiA6ICI9bSIgKCooX19yKSkpCi0KLXN0YXRpYyBfX2lubGluZSBpbnQKLWZlY2xlYXJleGNlcHQoaW50IF9fZXhjZXB0cykKLXsKLQlmZXhjZXB0X3QgX19yOwotCi0JX19zdHhmc3IoJl9fcik7Ci0JX19yICY9IH5fX2V4Y2VwdHM7Ci0JX19sZHhmc3IoX19yKTsKLQlyZXR1cm4gKDApOwotfQotCi1zdGF0aWMgX19pbmxpbmUgaW50Ci1mZWdldGV4Y2VwdGZsYWcoZmV4Y2VwdF90ICpfX2ZsYWdwLCBpbnQgX19leGNlcHRzKQotewotCWZleGNlcHRfdCBfX3I7Ci0KLQlfX3N0eGZzcigmX19yKTsKLQkqX19mbGFncCA9IF9fciAmIF9fZXhjZXB0czsKLQlyZXR1cm4gKDApOwotfQotCi1zdGF0aWMgX19pbmxpbmUgaW50Ci1mZXNldGV4Y2VwdGZsYWcoY29uc3QgZmV4Y2VwdF90ICpfX2ZsYWdwLCBpbnQgX19leGNlcHRzKQotewotCWZleGNlcHRfdCBfX3I7Ci0KLQlfX3N0eGZzcigmX19yKTsKLQlfX3IgJj0gfl9fZXhjZXB0czsKLQlfX3IgfD0gKl9fZmxhZ3AgJiBfX2V4Y2VwdHM7Ci0JX19sZHhmc3IoX19yKTsKLQlyZXR1cm4gKDApOwotfQotCi0vKgotICogSW4gY29udHJhc3Qgd2l0aCB0aGUgaWE2NCBwbGF0Zm9ybSwgaXQgc2VlbXMgdG8gYmUgd29ydGh3aGlsZSB0bwotICogaW5saW5lIHRoaXMgZnVuY3Rpb24gb24gc3BhcmM2NCBldmVuIHdoZW4gdGhlIGFyZ3VtZW50cyBhcmUgbm90Ci0gKiBjb21waWxlLXRpbWUgY29uc3RhbnRzLiAgUGVyaGFwcyB0aGlzIGRlcGVuZHMgb24gdGhlIHJlZ2lzdGVyIHdpbmRvdy4KLSAqLwotc3RhdGljIF9faW5saW5lIGludAotZmVyYWlzZWV4Y2VwdChpbnQgX19leGNlcHRzKQotewotCXZvbGF0aWxlIGRvdWJsZSBkOwotCi0JLyoKLQkgKiBXaXRoIGEgY29tcGlsZXIgdGhhdCBzdXBwb3J0cyB0aGUgRkVOVl9BQ0NFU1MgcHJhZ21hCi0JICogcHJvcGVybHksIHNpbXBsZSBleHByZXNzaW9ucyBsaWtlICcwLjAgLyAwLjAnIHNob3VsZAotCSAqIGJlIHN1ZmZpY2llbnQgdG8gZ2VuZXJhdGUgdHJhcHMuICBVbmZvcnR1bmF0ZWx5LCB3ZQotCSAqIG5lZWQgdG8gYnJpbmcgYSB2b2xhdGlsZSB2YXJpYWJsZSBpbnRvIHRoZSBlcXVhdGlvbgotCSAqIHRvIHByZXZlbnQgaW5jb3JyZWN0IG9wdGltaXphdGlvbnMuCi0JICovCi0JaWYgKF9fZXhjZXB0cyAmIEZFX0lOVkFMSUQpIHsKLQkJZCA9IDAuMDsKLQkJZCA9IDAuMCAvIGQ7Ci0JfQotCWlmIChfX2V4Y2VwdHMgJiBGRV9ESVZCWVpFUk8pIHsKLQkJZCA9IDAuMDsKLQkJZCA9IDEuMCAvIGQ7Ci0JfQotCWlmIChfX2V4Y2VwdHMgJiBGRV9PVkVSRkxPVykgewotCQlkID0gMHgxLmZmcDEwMjM7Ci0JCWQgKj0gMi4wOwotCX0KLQlpZiAoX19leGNlcHRzICYgRkVfVU5ERVJGTE9XKSB7Ci0JCWQgPSAweDFwLTEwMjI7Ci0JCWQgLz0gMHgxcDEwMjM7Ci0JfQotCWlmIChfX2V4Y2VwdHMgJiBGRV9JTkVYQUNUKSB7Ci0JCWQgPSAweDFwLTEwMjI7Ci0JCWQgKz0gMS4wOwotCX0KLQlyZXR1cm4gKDApOwotfQotCi1zdGF0aWMgX19pbmxpbmUgaW50Ci1mZXRlc3RleGNlcHQoaW50IF9fZXhjZXB0cykKLXsKLQlmZXhjZXB0X3QgX19yOwotCi0JX19zdHhmc3IoJl9fcik7Ci0JcmV0dXJuIChfX3IgJiBfX2V4Y2VwdHMpOwotfQotCi1zdGF0aWMgX19pbmxpbmUgaW50Ci1mZWdldHJvdW5kKHZvaWQpCi17Ci0JZmVudl90IF9fcjsKLQotCV9fc3R4ZnNyKCZfX3IpOwotCXJldHVybiAoKF9fciA+PiBfUk9VTkRfU0hJRlQpICYgX1JPVU5EX01BU0spOwotfQotCi1zdGF0aWMgX19pbmxpbmUgaW50Ci1mZXNldHJvdW5kKGludCBfX3JvdW5kKQotewotCWZlbnZfdCBfX3I7Ci0KLQlpZiAoX19yb3VuZCAmIH5fUk9VTkRfTUFTSykKLQkJcmV0dXJuICgtMSk7Ci0JX19zdHhmc3IoJl9fcik7Ci0JX19yICY9IH4oX1JPVU5EX01BU0sgPDwgX1JPVU5EX1NISUZUKTsKLQlfX3IgfD0gX19yb3VuZCA8PCBfUk9VTkRfU0hJRlQ7Ci0JX19sZHhmc3IoX19yKTsKLQlyZXR1cm4gKDApOwotfQotCi1zdGF0aWMgX19pbmxpbmUgaW50Ci1mZWdldGVudihmZW52X3QgKl9fZW52cCkKLXsKLQotCV9fc3R4ZnNyKF9fZW52cCk7Ci0JcmV0dXJuICgwKTsKLX0KLQotc3RhdGljIF9faW5saW5lIGludAotZmVob2xkZXhjZXB0KGZlbnZfdCAqX19lbnZwKQotewotCWZlbnZfdCBfX3I7Ci0KLQlfX3N0eGZzcigmX19yKTsKLQkqX19lbnZwID0gX19yOwotCV9fciAmPSB+KEZFX0FMTF9FWENFUFQgfCBfRU5BQkxFX01BU0spOwotCV9fbGR4ZnNyKF9fcik7Ci0JcmV0dXJuICgwKTsKLX0KLQotc3RhdGljIF9faW5saW5lIGludAotZmVzZXRlbnYoY29uc3QgZmVudl90ICpfX2VudnApCi17Ci0KLQlfX2xkeGZzcigqX19lbnZwKTsKLQlyZXR1cm4gKDApOwotfQotCi1zdGF0aWMgX19pbmxpbmUgaW50Ci1mZXVwZGF0ZWVudihjb25zdCBmZW52X3QgKl9fZW52cCkKLXsKLQlmZXhjZXB0X3QgX19yOwotCi0JX19zdHhmc3IoJl9fcik7Ci0JX19sZHhmc3IoKl9fZW52cCk7Ci0JZmVyYWlzZWV4Y2VwdChfX3IgJiBGRV9BTExfRVhDRVBUKTsKLQlyZXR1cm4gKDApOwotfQotCi0jaWYgX19CU0RfVklTSUJMRQotCi1zdGF0aWMgX19pbmxpbmUgaW50Ci1mZWVuYWJsZWV4Y2VwdChpbnQgX19tYXNrKQotewotCWZlbnZfdCBfX29sZF9yLCBfX25ld19yOwotCi0JX19zdHhmc3IoJl9fb2xkX3IpOwotCV9fbmV3X3IgPSBfX29sZF9yIHwgKChfX21hc2sgJiBGRV9BTExfRVhDRVBUKSA8PCBfRlBVU1dfU0hJRlQpOwotCV9fbGR4ZnNyKF9fbmV3X3IpOwotCXJldHVybiAoKF9fb2xkX3IgPj4gX0ZQVVNXX1NISUZUKSAmIEZFX0FMTF9FWENFUFQpOwotfQotCi1zdGF0aWMgX19pbmxpbmUgaW50Ci1mZWRpc2FibGVleGNlcHQoaW50IF9fbWFzaykKLXsKLQlmZW52X3QgX19vbGRfciwgX19uZXdfcjsKLQotCV9fc3R4ZnNyKCZfX29sZF9yKTsKLQlfX25ld19yID0gX19vbGRfciAmIH4oKF9fbWFzayAmIEZFX0FMTF9FWENFUFQpIDw8IF9GUFVTV19TSElGVCk7Ci0JX19sZHhmc3IoX19uZXdfcik7Ci0JcmV0dXJuICgoX19vbGRfciA+PiBfRlBVU1dfU0hJRlQpICYgRkVfQUxMX0VYQ0VQVCk7Ci19Ci0KLXN0YXRpYyBfX2lubGluZSBpbnQKLWZlZ2V0ZXhjZXB0KHZvaWQpCi17Ci0JZmVudl90IF9fcjsKLQotCV9fc3R4ZnNyKCZfX3IpOwotCXJldHVybiAoKF9fciAmIF9FTkFCTEVfTUFTSykgPj4gX0ZQVVNXX1NISUZUKTsKLX0KLQotI2VuZGlmIC8qIF9fQlNEX1ZJU0lCTEUgKi8KLQotX19FTkRfREVDTFMKLQotI2VuZGlmCS8qICFfRkVOVl9IXyAqLwpkaWZmIC0tZ2l0IGEvbGlibS9zcmMvZV9hY29zLmMgYi9saWJtL3NyYy9lX2Fjb3MuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGJhNjcyYS4uMDAwMDAwMAotLS0gYS9saWJtL3NyYy9lX2Fjb3MuYworKysgL2Rldi9udWxsCkBAIC0xLDEwNCArMCwwIEBACi0KLS8qIEAoIyllX2Fjb3MuYyAxLjMgOTUvMDEvMTggKi8KLS8qCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBDb3B5cmlnaHQgKEMpIDE5OTMgYnkgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIERldmVsb3BlZCBhdCBTdW5Tb2Z0LCBhIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gYnVzaW5lc3MuCi0gKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCi0gKiBzb2Z0d2FyZSBpcyBmcmVlbHkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGlzIG5vdGljZSAKLSAqIGlzIHByZXNlcnZlZC4KLSAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqLwotCi0jaWZuZGVmIGxpbnQKLXN0YXRpYyBjaGFyIHJjc2lkW10gPSAiJEZyZWVCU0Q6IHNyYy9saWIvbXN1bi9zcmMvZV9hY29zLmMsdiAxLjEwIDIwMDUvMDIvMDQgMTg6MjY6MDUgZGFzIEV4cCAkIjsKLSNlbmRpZgotCi0vKiBfX2llZWU3NTRfYWNvcyh4KQotICogTWV0aG9kIDogICAgICAgICAgICAgICAgICAKLSAqCWFjb3MoeCkgID0gcGkvMiAtIGFzaW4oeCkKLSAqCWFjb3MoLXgpID0gcGkvMiArIGFzaW4oeCkKLSAqIEZvciB8eHw8PTAuNQotICoJYWNvcyh4KSA9IHBpLzIgLSAoeCArIHgqeF4yKlIoeF4yKSkJKHNlZSBhc2luLmMpCi0gKiBGb3IgeD4wLjUKLSAqIAlhY29zKHgpID0gcGkvMiAtIChwaS8yIC0gMmFzaW4oc3FydCgoMS14KS8yKSkpCi0gKgkJPSAyYXNpbihzcXJ0KCgxLXgpLzIpKSAgCi0gKgkJPSAycyArIDJzKnoqUih6KSAJLi4uej0oMS14KS8yLCBzPXNxcnQoeikKLSAqCQk9IDJmICsgKDJjICsgMnMqeipSKHopKQotICogICAgIHdoZXJlIGY9aGkgcGFydCBvZiBzLCBhbmQgYyA9ICh6LWYqZikvKHMrZikgaXMgdGhlIGNvcnJlY3Rpb24gdGVybQotICogICAgIGZvciBmIHNvIHRoYXQgZitjIH4gc3FydCh6KS4KLSAqIEZvciB4PC0wLjUKLSAqCWFjb3MoeCkgPSBwaSAtIDJhc2luKHNxcnQoKDEtfHh8KS8yKSkKLSAqCQk9IHBpIC0gMC41KihzK3MqeipSKHopKSwgd2hlcmUgej0oMS18eHwpLzIscz1zcXJ0KHopCi0gKgotICogU3BlY2lhbCBjYXNlczoKLSAqCWlmIHggaXMgTmFOLCByZXR1cm4geCBpdHNlbGY7Ci0gKglpZiB8eHw+MSwgcmV0dXJuIE5hTiB3aXRoIGludmFsaWQgc2lnbmFsLgotICoKLSAqIEZ1bmN0aW9uIG5lZWRlZDogc3FydAotICovCi0KLSNpbmNsdWRlICJtYXRoLmgiCi0jaW5jbHVkZSAibWF0aF9wcml2YXRlLmgiCi0KLXN0YXRpYyBjb25zdCBkb3VibGUKLW9uZT0gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDBlKzAwLCAvKiAweDNGRjAwMDAwLCAweDAwMDAwMDAwICovCi1waSA9ICAzLjE0MTU5MjY1MzU4OTc5MzExNjAwZSswMCwgLyogMHg0MDA5MjFGQiwgMHg1NDQ0MkQxOCAqLwotcGlvMl9oaSA9ICAxLjU3MDc5NjMyNjc5NDg5NjU1ODAwZSswMCwgLyogMHgzRkY5MjFGQiwgMHg1NDQ0MkQxOCAqLwotcGlvMl9sbyA9ICA2LjEyMzIzMzk5NTczNjc2NjAzNTg3ZS0xNywgLyogMHgzQzkxQTYyNiwgMHgzMzE0NUMwNyAqLwotcFMwID0gIDEuNjY2NjY2NjY2NjY2NjY2NTc0MTVlLTAxLCAvKiAweDNGQzU1NTU1LCAweDU1NTU1NTU1ICovCi1wUzEgPSAtMy4yNTU2NTgxODYyMjQwMDkxNTQwNWUtMDEsIC8qIDB4QkZENEQ2MTIsIDB4MDNFQjZGN0QgKi8KLXBTMiA9ICAyLjAxMjEyNTMyMTM0ODYyOTI1ODgxZS0wMSwgLyogMHgzRkM5QzE1NSwgMHgwRTg4NDQ1NSAqLwotcFMzID0gLTQuMDA1NTUzNDUwMDY3OTQxMTQwMjdlLTAyLCAvKiAweEJGQTQ4MjI4LCAweEI1Njg4RjNCICovCi1wUzQgPSAgNy45MTUzNDk5NDI4OTgxNDUzMjE3NmUtMDQsIC8qIDB4M0Y0OUVGRTAsIDB4NzUwMUIyODggKi8KLXBTNSA9ICAzLjQ3OTMzMTA3NTk2MDIxMTY3NTcwZS0wNSwgLyogMHgzRjAyM0RFMSwgMHgwREZERjcwOSAqLwotcVMxID0gLTIuNDAzMzk0OTExNzM0NDE0MjE4NzhlKzAwLCAvKiAweEMwMDMzQTI3LCAweDFDOEEyRDRCICovCi1xUzIgPSAgMi4wMjA5NDU3NjAyMzM1MDU2OTQ3MWUrMDAsIC8qIDB4NDAwMDJBRTUsIDB4OUM1OThBQzggKi8KLXFTMyA9IC02Ljg4MjgzOTcxNjA1NDUzMjkzMDMwZS0wMSwgLyogMHhCRkU2MDY2QywgMHgxQjhEMDE1OSAqLwotcVM0ID0gIDcuNzAzODE1MDU1NTkwMTkzNTI3OTFlLTAyOyAvKiAweDNGQjNCOEM1LCAweEIxMkU5MjgyICovCi0KLWRvdWJsZQotX19pZWVlNzU0X2Fjb3MoZG91YmxlIHgpCi17Ci0JZG91YmxlIHoscCxxLHIsdyxzLGMsZGY7Ci0JaW50MzJfdCBoeCxpeDsKLQlHRVRfSElHSF9XT1JEKGh4LHgpOwotCWl4ID0gaHgmMHg3ZmZmZmZmZjsKLQlpZihpeD49MHgzZmYwMDAwMCkgewkvKiB8eHwgPj0gMSAqLwotCSAgICB1X2ludDMyX3QgbHg7Ci0JICAgIEdFVF9MT1dfV09SRChseCx4KTsKLQkgICAgaWYoKChpeC0weDNmZjAwMDAwKXxseCk9PTApIHsJLyogfHh8PT0xICovCi0JCWlmKGh4PjApIHJldHVybiAwLjA7CQkvKiBhY29zKDEpID0gMCAgKi8KLQkJZWxzZSByZXR1cm4gcGkrMi4wKnBpbzJfbG87CS8qIGFjb3MoLTEpPSBwaSAqLwotCSAgICB9Ci0JICAgIHJldHVybiAoeC14KS8oeC14KTsJCS8qIGFjb3MofHh8PjEpIGlzIE5hTiAqLwotCX0KLQlpZihpeDwweDNmZTAwMDAwKSB7CS8qIHx4fCA8IDAuNSAqLwotCSAgICBpZihpeDw9MHgzYzYwMDAwMCkgcmV0dXJuIHBpbzJfaGkrcGlvMl9sbzsvKmlmfHh8PDIqKi01NyovCi0JICAgIHogPSB4Kng7Ci0JICAgIHAgPSB6KihwUzAreioocFMxK3oqKHBTMit6KihwUzMreioocFM0K3oqcFM1KSkpKSk7Ci0JICAgIHEgPSBvbmUreioocVMxK3oqKHFTMit6KihxUzMreipxUzQpKSk7Ci0JICAgIHIgPSBwL3E7Ci0JICAgIHJldHVybiBwaW8yX2hpIC0gKHggLSAocGlvMl9sby14KnIpKTsKLQl9IGVsc2UgIGlmIChoeDwwKSB7CQkvKiB4IDwgLTAuNSAqLwotCSAgICB6ID0gKG9uZSt4KSowLjU7Ci0JICAgIHAgPSB6KihwUzAreioocFMxK3oqKHBTMit6KihwUzMreioocFM0K3oqcFM1KSkpKSk7Ci0JICAgIHEgPSBvbmUreioocVMxK3oqKHFTMit6KihxUzMreipxUzQpKSk7Ci0JICAgIHMgPSBzcXJ0KHopOwotCSAgICByID0gcC9xOwotCSAgICB3ID0gcipzLXBpbzJfbG87Ci0JICAgIHJldHVybiBwaSAtIDIuMCoocyt3KTsKLQl9IGVsc2UgewkJCS8qIHggPiAwLjUgKi8KLQkgICAgeiA9IChvbmUteCkqMC41OwotCSAgICBzID0gc3FydCh6KTsKLQkgICAgZGYgPSBzOwotCSAgICBTRVRfTE9XX1dPUkQoZGYsMCk7Ci0JICAgIGMgID0gKHotZGYqZGYpLyhzK2RmKTsKLQkgICAgcCA9IHoqKHBTMCt6KihwUzEreioocFMyK3oqKHBTMyt6KihwUzQreipwUzUpKSkpKTsKLQkgICAgcSA9IG9uZSt6KihxUzEreioocVMyK3oqKHFTMyt6KnFTNCkpKTsKLQkgICAgciA9IHAvcTsKLQkgICAgdyA9IHIqcytjOwotCSAgICByZXR1cm4gMi4wKihkZit3KTsKLQl9Ci19CmRpZmYgLS1naXQgYS9saWJtL3NyYy9lX2Fjb3NmLmMgYi9saWJtL3NyYy9lX2Fjb3NmLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGExMWY0OGUuLjAwMDAwMDAKLS0tIGEvbGlibS9zcmMvZV9hY29zZi5jCisrKyAvZGV2L251bGwKQEAgLTEsODEgKzAsMCBAQAotLyogZV9hY29zZi5jIC0tIGZsb2F0IHZlcnNpb24gb2YgZV9hY29zLmMuCi0gKiBDb252ZXJzaW9uIHRvIGZsb2F0IGJ5IElhbiBMYW5jZSBUYXlsb3IsIEN5Z251cyBTdXBwb3J0LCBpYW5AY3lnbnVzLmNvbS4KLSAqLwotCi0vKgotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogQ29weXJpZ2h0IChDKSAxOTkzIGJ5IFN1biBNaWNyb3N5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBEZXZlbG9wZWQgYXQgU3VuUHJvLCBhIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gYnVzaW5lc3MuCi0gKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCi0gKiBzb2Z0d2FyZSBpcyBmcmVlbHkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGlzIG5vdGljZQotICogaXMgcHJlc2VydmVkLgotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICovCi0KLSNpZm5kZWYgbGludAotc3RhdGljIGNoYXIgcmNzaWRbXSA9ICIkRnJlZUJTRDogc3JjL2xpYi9tc3VuL3NyYy9lX2Fjb3NmLmMsdiAxLjcgMjAwMi8wNS8yOCAxNzowMzoxMiBhbGZyZWQgRXhwICQiOwotI2VuZGlmCi0KLSNpbmNsdWRlICJtYXRoLmgiCi0jaW5jbHVkZSAibWF0aF9wcml2YXRlLmgiCi0KLXN0YXRpYyBjb25zdCBmbG9hdAotb25lID0gIDEuMDAwMDAwMDAwMGUrMDAsIC8qIDB4M0Y4MDAwMDAgKi8KLXBpID0gIDMuMTQxNTkyNTAyNmUrMDAsIC8qIDB4NDA0OTBmZGEgKi8KLXBpbzJfaGkgPSAgMS41NzA3OTYyNTEzZSswMCwgLyogMHgzZmM5MGZkYSAqLwotcGlvMl9sbyA9ICA3LjU0OTc4OTQxNTllLTA4LCAvKiAweDMzYTIyMTY4ICovCi1wUzAgPSAgMS42NjY2NjY3MTYzZS0wMSwgLyogMHgzZTJhYWFhYiAqLwotcFMxID0gLTMuMjU1NjU4MTQ5N2UtMDEsIC8qIDB4YmVhNmIwOTAgKi8KLXBTMiA9ICAyLjAxMjEyNTI1MzdlLTAxLCAvKiAweDNlNGUwYWE4ICovCi1wUzMgPSAtNC4wMDU1NTM1NzM0ZS0wMiwgLyogMHhiZDI0MTE0NiAqLwotcFM0ID0gIDcuOTE1MzUwMTQyOWUtMDQsIC8qIDB4M2E0ZjdmMDQgKi8KLXBTNSA9ICAzLjQ3OTMzMDkxNjllLTA1LCAvKiAweDM4MTFlZjA4ICovCi1xUzEgPSAtMi40MDMzOTQ5Mzc1ZSswMCwgLyogMHhjMDE5ZDEzOSAqLwotcVMyID0gIDIuMDIwOTQ1Nzg3NGUrMDAsIC8qIDB4NDAwMTU3MmQgKi8KLXFTMyA9IC02Ljg4MjgzOTc5ODllLTAxLCAvKiAweGJmMzAzMzYxICovCi1xUzQgPSAgNy43MDM4MTU0MDA2ZS0wMjsgLyogMHgzZDlkYzYyZSAqLwotCi1mbG9hdAotX19pZWVlNzU0X2Fjb3NmKGZsb2F0IHgpCi17Ci0JZmxvYXQgeixwLHEscix3LHMsYyxkZjsKLQlpbnQzMl90IGh4LGl4OwotCUdFVF9GTE9BVF9XT1JEKGh4LHgpOwotCWl4ID0gaHgmMHg3ZmZmZmZmZjsKLQlpZihpeD09MHgzZjgwMDAwMCkgewkJLyogfHh8PT0xICovCi0JICAgIGlmKGh4PjApIHJldHVybiAwLjA7CS8qIGFjb3MoMSkgPSAwICAqLwotCSAgICBlbHNlIHJldHVybiBwaSsoZmxvYXQpMi4wKnBpbzJfbG87CS8qIGFjb3MoLTEpPSBwaSAqLwotCX0gZWxzZSBpZihpeD4weDNmODAwMDAwKSB7CS8qIHx4fCA+PSAxICovCi0JICAgIHJldHVybiAoeC14KS8oeC14KTsJCS8qIGFjb3MofHh8PjEpIGlzIE5hTiAqLwotCX0KLQlpZihpeDwweDNmMDAwMDAwKSB7CS8qIHx4fCA8IDAuNSAqLwotCSAgICBpZihpeDw9MHgyMzAwMDAwMCkgcmV0dXJuIHBpbzJfaGkrcGlvMl9sbzsvKmlmfHh8PDIqKi01NyovCi0JICAgIHogPSB4Kng7Ci0JICAgIHAgPSB6KihwUzAreioocFMxK3oqKHBTMit6KihwUzMreioocFM0K3oqcFM1KSkpKSk7Ci0JICAgIHEgPSBvbmUreioocVMxK3oqKHFTMit6KihxUzMreipxUzQpKSk7Ci0JICAgIHIgPSBwL3E7Ci0JICAgIHJldHVybiBwaW8yX2hpIC0gKHggLSAocGlvMl9sby14KnIpKTsKLQl9IGVsc2UgIGlmIChoeDwwKSB7CQkvKiB4IDwgLTAuNSAqLwotCSAgICB6ID0gKG9uZSt4KSooZmxvYXQpMC41OwotCSAgICBwID0geioocFMwK3oqKHBTMSt6KihwUzIreioocFMzK3oqKHBTNCt6KnBTNSkpKSkpOwotCSAgICBxID0gb25lK3oqKHFTMSt6KihxUzIreioocVMzK3oqcVM0KSkpOwotCSAgICBzID0gX19pZWVlNzU0X3NxcnRmKHopOwotCSAgICByID0gcC9xOwotCSAgICB3ID0gcipzLXBpbzJfbG87Ci0JICAgIHJldHVybiBwaSAtIChmbG9hdCkyLjAqKHMrdyk7Ci0JfSBlbHNlIHsJCQkvKiB4ID4gMC41ICovCi0JICAgIGludDMyX3QgaWRmOwotCSAgICB6ID0gKG9uZS14KSooZmxvYXQpMC41OwotCSAgICBzID0gX19pZWVlNzU0X3NxcnRmKHopOwotCSAgICBkZiA9IHM7Ci0JICAgIEdFVF9GTE9BVF9XT1JEKGlkZixkZik7Ci0JICAgIFNFVF9GTE9BVF9XT1JEKGRmLGlkZiYweGZmZmZmMDAwKTsKLQkgICAgYyAgPSAoei1kZipkZikvKHMrZGYpOwotCSAgICBwID0geioocFMwK3oqKHBTMSt6KihwUzIreioocFMzK3oqKHBTNCt6KnBTNSkpKSkpOwotCSAgICBxID0gb25lK3oqKHFTMSt6KihxUzIreioocVMzK3oqcVM0KSkpOwotCSAgICByID0gcC9xOwotCSAgICB3ID0gcipzK2M7Ci0JICAgIHJldHVybiAoZmxvYXQpMi4wKihkZit3KTsKLQl9Ci19CmRpZmYgLS1naXQgYS9saWJtL3NyYy9lX2Fjb3NoLmMgYi9saWJtL3NyYy9lX2Fjb3NoLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNjYjE1MjEuLjAwMDAwMDAKLS0tIGEvbGlibS9zcmMvZV9hY29zaC5jCisrKyAvZGV2L251bGwKQEAgLTEsNjMgKzAsMCBAQAotCi0vKiBAKCMpZV9hY29zaC5jIDEuMyA5NS8wMS8xOCAqLwotLyoKLSAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIENvcHlyaWdodCAoQykgMTk5MyBieSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogRGV2ZWxvcGVkIGF0IFN1blNvZnQsIGEgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBidXNpbmVzcy4KLSAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKLSAqIHNvZnR3YXJlIGlzIGZyZWVseSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoaXMgbm90aWNlIAotICogaXMgcHJlc2VydmVkLgotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICoKLSAqLwotCi0jaWZuZGVmIGxpbnQKLXN0YXRpYyBjaGFyIHJjc2lkW10gPSAiJEZyZWVCU0Q6IHNyYy9saWIvbXN1bi9zcmMvZV9hY29zaC5jLHYgMS44IDIwMDUvMDIvMDQgMTg6MjY6MDUgZGFzIEV4cCAkIjsKLSNlbmRpZgotCi0vKiBfX2llZWU3NTRfYWNvc2goeCkKLSAqIE1ldGhvZCA6Ci0gKglCYXNlZCBvbiAKLSAqCQlhY29zaCh4KSA9IGxvZyBbIHggKyBzcXJ0KHgqeC0xKSBdCi0gKgl3ZSBoYXZlCi0gKgkJYWNvc2goeCkgOj0gbG9nKHgpK2xuMiwJaWYgeCBpcyBsYXJnZTsgZWxzZQotICoJCWFjb3NoKHgpIDo9IGxvZygyeC0xLyhzcXJ0KHgqeC0xKSt4KSkgaWYgeD4yOyBlbHNlCi0gKgkJYWNvc2goeCkgOj0gbG9nMXAodCtzcXJ0KDIuMCp0K3QqdCkpOyB3aGVyZSB0PXgtMS4KLSAqCi0gKiBTcGVjaWFsIGNhc2VzOgotICoJYWNvc2goeCkgaXMgTmFOIHdpdGggc2lnbmFsIGlmIHg8MS4KLSAqCWFjb3NoKE5hTikgaXMgTmFOIHdpdGhvdXQgc2lnbmFsLgotICovCi0KLSNpbmNsdWRlICJtYXRoLmgiCi0jaW5jbHVkZSAibWF0aF9wcml2YXRlLmgiCi0KLXN0YXRpYyBjb25zdCBkb3VibGUKLW9uZQk9IDEuMCwKLWxuMgk9IDYuOTMxNDcxODA1NTk5NDUyODYyMjdlLTAxOyAgLyogMHgzRkU2MkU0MiwgMHhGRUZBMzlFRiAqLwotCi1kb3VibGUKLV9faWVlZTc1NF9hY29zaChkb3VibGUgeCkKLXsKLQlkb3VibGUgdDsKLQlpbnQzMl90IGh4OwotCXVfaW50MzJfdCBseDsKLQlFWFRSQUNUX1dPUkRTKGh4LGx4LHgpOwotCWlmKGh4PDB4M2ZmMDAwMDApIHsJCS8qIHggPCAxICovCi0JICAgIHJldHVybiAoeC14KS8oeC14KTsKLQl9IGVsc2UgaWYoaHggPj0weDQxYjAwMDAwKSB7CS8qIHggPiAyKioyOCAqLwotCSAgICBpZihoeCA+PTB4N2ZmMDAwMDApIHsJLyogeCBpcyBpbmYgb2YgTmFOICovCi0JICAgICAgICByZXR1cm4geCt4OwotCSAgICB9IGVsc2UgCi0JCXJldHVybiBfX2llZWU3NTRfbG9nKHgpK2xuMjsJLyogYWNvc2goaHVnZSk9bG9nKDJ4KSAqLwotCX0gZWxzZSBpZigoKGh4LTB4M2ZmMDAwMDApfGx4KT09MCkgewotCSAgICByZXR1cm4gMC4wOwkJCS8qIGFjb3NoKDEpID0gMCAqLwotCX0gZWxzZSBpZiAoaHggPiAweDQwMDAwMDAwKSB7CS8qIDIqKjI4ID4geCA+IDIgKi8KLQkgICAgdD14Kng7Ci0JICAgIHJldHVybiBfX2llZWU3NTRfbG9nKDIuMCp4LW9uZS8oeCtzcXJ0KHQtb25lKSkpOwotCX0gZWxzZSB7CQkJLyogMTx4PDIgKi8KLQkgICAgdCA9IHgtb25lOwotCSAgICByZXR1cm4gbG9nMXAodCtzcXJ0KDIuMCp0K3QqdCkpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2xpYm0vc3JjL2VfYWNvc2hmLmMgYi9saWJtL3NyYy9lX2Fjb3NoZi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MjU3OTE0Li4wMDAwMDAwCi0tLSBhL2xpYm0vc3JjL2VfYWNvc2hmLmMKKysrIC9kZXYvbnVsbApAQCAtMSw0OSArMCwwIEBACi0vKiBlX2Fjb3NoZi5jIC0tIGZsb2F0IHZlcnNpb24gb2YgZV9hY29zaC5jLgotICogQ29udmVyc2lvbiB0byBmbG9hdCBieSBJYW4gTGFuY2UgVGF5bG9yLCBDeWdudXMgU3VwcG9ydCwgaWFuQGN5Z251cy5jb20uCi0gKi8KLQotLyoKLSAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIENvcHlyaWdodCAoQykgMTk5MyBieSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogRGV2ZWxvcGVkIGF0IFN1blBybywgYSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGJ1c2luZXNzLgotICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcwotICogc29mdHdhcmUgaXMgZnJlZWx5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhpcyBub3RpY2UKLSAqIGlzIHByZXNlcnZlZC4KLSAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqLwotCi0jaWZuZGVmIGxpbnQKLXN0YXRpYyBjaGFyIHJjc2lkW10gPSAiJEZyZWVCU0Q6IHNyYy9saWIvbXN1bi9zcmMvZV9hY29zaGYuYyx2IDEuNyAyMDAyLzA1LzI4IDE3OjAzOjEyIGFsZnJlZCBFeHAgJCI7Ci0jZW5kaWYKLQotI2luY2x1ZGUgIm1hdGguaCIKLSNpbmNsdWRlICJtYXRoX3ByaXZhdGUuaCIKLQotc3RhdGljIGNvbnN0IGZsb2F0Ci1vbmUJPSAxLjAsCi1sbjIJPSA2LjkzMTQ3MTgyNDZlLTAxOyAgLyogMHgzZjMxNzIxOCAqLwotCi1mbG9hdAotX19pZWVlNzU0X2Fjb3NoZihmbG9hdCB4KQotewotCWZsb2F0IHQ7Ci0JaW50MzJfdCBoeDsKLQlHRVRfRkxPQVRfV09SRChoeCx4KTsKLQlpZihoeDwweDNmODAwMDAwKSB7CQkvKiB4IDwgMSAqLwotCSAgICByZXR1cm4gKHgteCkvKHgteCk7Ci0JfSBlbHNlIGlmKGh4ID49MHg0ZDgwMDAwMCkgewkvKiB4ID4gMioqMjggKi8KLQkgICAgaWYoaHggPj0weDdmODAwMDAwKSB7CS8qIHggaXMgaW5mIG9mIE5hTiAqLwotCSAgICAgICAgcmV0dXJuIHgreDsKLQkgICAgfSBlbHNlCi0JCXJldHVybiBfX2llZWU3NTRfbG9nZih4KStsbjI7CS8qIGFjb3NoKGh1Z2UpPWxvZygyeCkgKi8KLQl9IGVsc2UgaWYgKGh4PT0weDNmODAwMDAwKSB7Ci0JICAgIHJldHVybiAwLjA7CQkJLyogYWNvc2goMSkgPSAwICovCi0JfSBlbHNlIGlmIChoeCA+IDB4NDAwMDAwMDApIHsJLyogMioqMjggPiB4ID4gMiAqLwotCSAgICB0PXgqeDsKLQkgICAgcmV0dXJuIF9faWVlZTc1NF9sb2dmKChmbG9hdCkyLjAqeC1vbmUvKHgrX19pZWVlNzU0X3NxcnRmKHQtb25lKSkpOwotCX0gZWxzZSB7CQkJLyogMTx4PDIgKi8KLQkgICAgdCA9IHgtb25lOwotCSAgICByZXR1cm4gbG9nMXBmKHQrX19pZWVlNzU0X3NxcnRmKChmbG9hdCkyLjAqdCt0KnQpKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9saWJtL3NyYy9lX2FzaW4uYyBiL2xpYm0vc3JjL2VfYXNpbi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYmE3MDI2Li4wMDAwMDAwCi0tLSBhL2xpYm0vc3JjL2VfYXNpbi5jCisrKyAvZGV2L251bGwKQEAgLTEsMTEzICswLDAgQEAKLQotLyogQCgjKWVfYXNpbi5jIDEuMyA5NS8wMS8xOCAqLwotLyoKLSAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIENvcHlyaWdodCAoQykgMTk5MyBieSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogRGV2ZWxvcGVkIGF0IFN1blNvZnQsIGEgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBidXNpbmVzcy4KLSAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKLSAqIHNvZnR3YXJlIGlzIGZyZWVseSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoaXMgbm90aWNlIAotICogaXMgcHJlc2VydmVkLgotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICovCi0KLSNpZm5kZWYgbGludAotc3RhdGljIGNoYXIgcmNzaWRbXSA9ICIkRnJlZUJTRDogc3JjL2xpYi9tc3VuL3NyYy9lX2FzaW4uYyx2IDEuMTEgMjAwNS8wMi8wNCAxODoyNjowNSBkYXMgRXhwICQiOwotI2VuZGlmCi0KLS8qIF9faWVlZTc1NF9hc2luKHgpCi0gKiBNZXRob2QgOiAgICAgICAgICAgICAgICAgIAotICoJU2luY2UgIGFzaW4oeCkgPSB4ICsgeF4zLzYgKyB4XjUqMy80MCArIHheNyoxNS8zMzYgKyAuLi4KLSAqCXdlIGFwcHJveGltYXRlIGFzaW4oeCkgb24gWzAsMC41XSBieQotICoJCWFzaW4oeCkgPSB4ICsgeCp4XjIqUih4XjIpCi0gKgl3aGVyZQotICoJCVIoeF4yKSBpcyBhIHJhdGlvbmFsIGFwcHJveGltYXRpb24gb2YgKGFzaW4oeCkteCkveF4zIAotICoJYW5kIGl0cyByZW1leiBlcnJvciBpcyBib3VuZGVkIGJ5Ci0gKgkJfChhc2luKHgpLXgpL3heMyAtIFIoeF4yKXwgPCAyXigtNTguNzUpCi0gKgotICoJRm9yIHggaW4gWzAuNSwxXQotICoJCWFzaW4oeCkgPSBwaS8yLTIqYXNpbihzcXJ0KCgxLXgpLzIpKQotICoJTGV0IHkgPSAoMS14KSwgeiA9IHkvMiwgcyA6PSBzcXJ0KHopLCBhbmQgcGlvMl9oaStwaW8yX2xvPXBpLzI7Ci0gKgl0aGVuIGZvciB4PjAuOTgKLSAqCQlhc2luKHgpID0gcGkvMiAtIDIqKHMrcyp6KlIoeikpCi0gKgkJCT0gcGlvMl9oaSAtICgyKihzK3MqeipSKHopKSAtIHBpbzJfbG8pCi0gKglGb3IgeDw9MC45OCwgbGV0IHBpbzRfaGkgPSBwaW8yX2hpLzIsIHRoZW4KLSAqCQlmID0gaGkgcGFydCBvZiBzOwotICoJCWMgPSBzcXJ0KHopIC0gZiA9ICh6LWYqZikvKHMrZikgCS4uLmYrYz1zcXJ0KHopCi0gKglhbmQKLSAqCQlhc2luKHgpID0gcGkvMiAtIDIqKHMrcyp6KlIoeikpCi0gKgkJCT0gcGlvNF9oaSsocGlvNC0ycyktKDJzKnoqUih6KS1waW8yX2xvKQotICoJCQk9IHBpbzRfaGkrKHBpbzQtMmYpLSgycyp6KlIoeiktKHBpbzJfbG8rMmMpKQotICoKLSAqIFNwZWNpYWwgY2FzZXM6Ci0gKglpZiB4IGlzIE5hTiwgcmV0dXJuIHggaXRzZWxmOwotICoJaWYgfHh8PjEsIHJldHVybiBOYU4gd2l0aCBpbnZhbGlkIHNpZ25hbC4KLSAqCi0gKi8KLQotCi0jaW5jbHVkZSAibWF0aC5oIgotI2luY2x1ZGUgIm1hdGhfcHJpdmF0ZS5oIgotCi1zdGF0aWMgY29uc3QgZG91YmxlCi1vbmUgPSAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMGUrMDAsIC8qIDB4M0ZGMDAwMDAsIDB4MDAwMDAwMDAgKi8KLWh1Z2UgPSAgMS4wMDBlKzMwMCwKLXBpbzJfaGkgPSAgMS41NzA3OTYzMjY3OTQ4OTY1NTgwMGUrMDAsIC8qIDB4M0ZGOTIxRkIsIDB4NTQ0NDJEMTggKi8KLXBpbzJfbG8gPSAgNi4xMjMyMzM5OTU3MzY3NjYwMzU4N2UtMTcsIC8qIDB4M0M5MUE2MjYsIDB4MzMxNDVDMDcgKi8KLXBpbzRfaGkgPSAgNy44NTM5ODE2MzM5NzQ0ODI3ODk5OWUtMDEsIC8qIDB4M0ZFOTIxRkIsIDB4NTQ0NDJEMTggKi8KLQkvKiBjb2VmZmljaWVudCBmb3IgUih4XjIpICovCi1wUzAgPSAgMS42NjY2NjY2NjY2NjY2NjY1NzQxNWUtMDEsIC8qIDB4M0ZDNTU1NTUsIDB4NTU1NTU1NTUgKi8KLXBTMSA9IC0zLjI1NTY1ODE4NjIyNDAwOTE1NDA1ZS0wMSwgLyogMHhCRkQ0RDYxMiwgMHgwM0VCNkY3RCAqLwotcFMyID0gIDIuMDEyMTI1MzIxMzQ4NjI5MjU4ODFlLTAxLCAvKiAweDNGQzlDMTU1LCAweDBFODg0NDU1ICovCi1wUzMgPSAtNC4wMDU1NTM0NTAwNjc5NDExNDAyN2UtMDIsIC8qIDB4QkZBNDgyMjgsIDB4QjU2ODhGM0IgKi8KLXBTNCA9ICA3LjkxNTM0OTk0Mjg5ODE0NTMyMTc2ZS0wNCwgLyogMHgzRjQ5RUZFMCwgMHg3NTAxQjI4OCAqLwotcFM1ID0gIDMuNDc5MzMxMDc1OTYwMjExNjc1NzBlLTA1LCAvKiAweDNGMDIzREUxLCAweDBERkRGNzA5ICovCi1xUzEgPSAtMi40MDMzOTQ5MTE3MzQ0MTQyMTg3OGUrMDAsIC8qIDB4QzAwMzNBMjcsIDB4MUM4QTJENEIgKi8KLXFTMiA9ICAyLjAyMDk0NTc2MDIzMzUwNTY5NDcxZSswMCwgLyogMHg0MDAwMkFFNSwgMHg5QzU5OEFDOCAqLwotcVMzID0gLTYuODgyODM5NzE2MDU0NTMyOTMwMzBlLTAxLCAvKiAweEJGRTYwNjZDLCAweDFCOEQwMTU5ICovCi1xUzQgPSAgNy43MDM4MTUwNTU1OTAxOTM1Mjc5MWUtMDI7IC8qIDB4M0ZCM0I4QzUsIDB4QjEyRTkyODIgKi8KLQotZG91YmxlCi1fX2llZWU3NTRfYXNpbihkb3VibGUgeCkKLXsKLQlkb3VibGUgdD0wLjAsdyxwLHEsYyxyLHM7Ci0JaW50MzJfdCBoeCxpeDsKLQlHRVRfSElHSF9XT1JEKGh4LHgpOwotCWl4ID0gaHgmMHg3ZmZmZmZmZjsKLQlpZihpeD49IDB4M2ZmMDAwMDApIHsJCS8qIHx4fD49IDEgKi8KLQkgICAgdV9pbnQzMl90IGx4OwotCSAgICBHRVRfTE9XX1dPUkQobHgseCk7Ci0JICAgIGlmKCgoaXgtMHgzZmYwMDAwMCl8bHgpPT0wKQotCQkgICAgLyogYXNpbigxKT0rLXBpLzIgd2l0aCBpbmV4YWN0ICovCi0JCXJldHVybiB4KnBpbzJfaGkreCpwaW8yX2xvOwkKLQkgICAgcmV0dXJuICh4LXgpLyh4LXgpOwkJLyogYXNpbih8eHw+MSkgaXMgTmFOICovICAgCi0JfSBlbHNlIGlmIChpeDwweDNmZTAwMDAwKSB7CS8qIHx4fDwwLjUgKi8KLQkgICAgaWYoaXg8MHgzZTQwMDAwMCkgewkJLyogaWYgfHh8IDwgMioqLTI3ICovCi0JCWlmKGh1Z2UreD5vbmUpIHJldHVybiB4Oy8qIHJldHVybiB4IHdpdGggaW5leGFjdCBpZiB4IT0wKi8KLQkgICAgfSBlbHNlIAotCQl0ID0geCp4OwotCQlwID0gdCoocFMwK3QqKHBTMSt0KihwUzIrdCoocFMzK3QqKHBTNCt0KnBTNSkpKSkpOwotCQlxID0gb25lK3QqKHFTMSt0KihxUzIrdCoocVMzK3QqcVM0KSkpOwotCQl3ID0gcC9xOwotCQlyZXR1cm4geCt4Knc7Ci0JfQotCS8qIDE+IHx4fD49IDAuNSAqLwotCXcgPSBvbmUtZmFicyh4KTsKLQl0ID0gdyowLjU7Ci0JcCA9IHQqKHBTMCt0KihwUzErdCoocFMyK3QqKHBTMyt0KihwUzQrdCpwUzUpKSkpKTsKLQlxID0gb25lK3QqKHFTMSt0KihxUzIrdCoocVMzK3QqcVM0KSkpOwotCXMgPSBzcXJ0KHQpOwotCWlmKGl4Pj0weDNGRUYzMzMzKSB7IAkvKiBpZiB8eHwgPiAwLjk3NSAqLwotCSAgICB3ID0gcC9xOwotCSAgICB0ID0gcGlvMl9oaS0oMi4wKihzK3MqdyktcGlvMl9sbyk7Ci0JfSBlbHNlIHsKLQkgICAgdyAgPSBzOwotCSAgICBTRVRfTE9XX1dPUkQodywwKTsKLQkgICAgYyAgPSAodC13KncpLyhzK3cpOwotCSAgICByICA9IHAvcTsKLQkgICAgcCAgPSAyLjAqcypyLShwaW8yX2xvLTIuMCpjKTsKLQkgICAgcSAgPSBwaW80X2hpLTIuMCp3OwotCSAgICB0ICA9IHBpbzRfaGktKHAtcSk7Ci0JfSAgICAKLQlpZihoeD4wKSByZXR1cm4gdDsgZWxzZSByZXR1cm4gLXQ7ICAgIAotfQpkaWZmIC0tZ2l0IGEvbGlibS9zcmMvZV9hc2luZi5jIGIvbGlibS9zcmMvZV9hc2luZi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNDA1ZmFmLi4wMDAwMDAwCi0tLSBhL2xpYm0vc3JjL2VfYXNpbmYuYworKysgL2Rldi9udWxsCkBAIC0xLDg0ICswLDAgQEAKLS8qIGVfYXNpbmYuYyAtLSBmbG9hdCB2ZXJzaW9uIG9mIGVfYXNpbi5jLgotICogQ29udmVyc2lvbiB0byBmbG9hdCBieSBJYW4gTGFuY2UgVGF5bG9yLCBDeWdudXMgU3VwcG9ydCwgaWFuQGN5Z251cy5jb20uCi0gKi8KLQotLyoKLSAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIENvcHlyaWdodCAoQykgMTk5MyBieSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogRGV2ZWxvcGVkIGF0IFN1blBybywgYSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGJ1c2luZXNzLgotICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcwotICogc29mdHdhcmUgaXMgZnJlZWx5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhpcyBub3RpY2UKLSAqIGlzIHByZXNlcnZlZC4KLSAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqLwotCi0jaWZuZGVmIGxpbnQKLXN0YXRpYyBjaGFyIHJjc2lkW10gPSAiJEZyZWVCU0Q6IHNyYy9saWIvbXN1bi9zcmMvZV9hc2luZi5jLHYgMS45IDIwMDUvMTIvMDQgMTM6NTI6NDYgYmRlIEV4cCAkIjsKLSNlbmRpZgotCi0jaW5jbHVkZSAibWF0aC5oIgotI2luY2x1ZGUgIm1hdGhfcHJpdmF0ZS5oIgotCi1zdGF0aWMgY29uc3QgZmxvYXQKLW9uZSA9ICAxLjAwMDAwMDAwMDBlKzAwLCAvKiAweDNGODAwMDAwICovCi1odWdlID0gIDEuMDAwZSszMCwKLXBpbzJfaGkgPSAgMS41NzA3OTYyNTEzZSswMCwgLyogMHgzZmM5MGZkYSAqLwotcGlvMl9sbyA9ICA3LjU0OTc4OTQxNTllLTA4LCAvKiAweDMzYTIyMTY4ICovCi1waW80X2hpID0gIDcuODUzOTgxMjU2NWUtMDEsIC8qIDB4M2Y0OTBmZGEgKi8KLQkvKiBjb2VmZmljaWVudCBmb3IgUih4XjIpICovCi1wUzAgPSAgMS42NjY2NjY3MTYzZS0wMSwgLyogMHgzZTJhYWFhYiAqLwotcFMxID0gLTMuMjU1NjU4MTQ5N2UtMDEsIC8qIDB4YmVhNmIwOTAgKi8KLXBTMiA9ICAyLjAxMjEyNTI1MzdlLTAxLCAvKiAweDNlNGUwYWE4ICovCi1wUzMgPSAtNC4wMDU1NTM1NzM0ZS0wMiwgLyogMHhiZDI0MTE0NiAqLwotcFM0ID0gIDcuOTE1MzUwMTQyOWUtMDQsIC8qIDB4M2E0ZjdmMDQgKi8KLXBTNSA9ICAzLjQ3OTMzMDkxNjllLTA1LCAvKiAweDM4MTFlZjA4ICovCi1xUzEgPSAtMi40MDMzOTQ5Mzc1ZSswMCwgLyogMHhjMDE5ZDEzOSAqLwotcVMyID0gIDIuMDIwOTQ1Nzg3NGUrMDAsIC8qIDB4NDAwMTU3MmQgKi8KLXFTMyA9IC02Ljg4MjgzOTc5ODllLTAxLCAvKiAweGJmMzAzMzYxICovCi1xUzQgPSAgNy43MDM4MTU0MDA2ZS0wMjsgLyogMHgzZDlkYzYyZSAqLwotCi1mbG9hdAotX19pZWVlNzU0X2FzaW5mKGZsb2F0IHgpCi17Ci0JZmxvYXQgdD0wLjAsdyxwLHEsYyxyLHM7Ci0JaW50MzJfdCBoeCxpeDsKLQlHRVRfRkxPQVRfV09SRChoeCx4KTsKLQlpeCA9IGh4JjB4N2ZmZmZmZmY7Ci0JaWYoaXg9PTB4M2Y4MDAwMDApIHsKLQkJLyogYXNpbigxKT0rLXBpLzIgd2l0aCBpbmV4YWN0ICovCi0JICAgIHJldHVybiB4KnBpbzJfaGkreCpwaW8yX2xvOwotCX0gZWxzZSBpZihpeD4gMHgzZjgwMDAwMCkgewkvKiB8eHw+PSAxICovCi0JICAgIHJldHVybiAoeC14KS8oeC14KTsJCS8qIGFzaW4ofHh8PjEpIGlzIE5hTiAqLwotCX0gZWxzZSBpZiAoaXg8MHgzZjAwMDAwMCkgewkvKiB8eHw8MC41ICovCi0JICAgIGlmKGl4PDB4MzIwMDAwMDApIHsJCS8qIGlmIHx4fCA8IDIqKi0yNyAqLwotCQlpZihodWdlK3g+b25lKSByZXR1cm4geDsvKiByZXR1cm4geCB3aXRoIGluZXhhY3QgaWYgeCE9MCovCi0JICAgIH0gZWxzZQotCQl0ID0geCp4OwotCQlwID0gdCoocFMwK3QqKHBTMSt0KihwUzIrdCoocFMzK3QqKHBTNCt0KnBTNSkpKSkpOwotCQlxID0gb25lK3QqKHFTMSt0KihxUzIrdCoocVMzK3QqcVM0KSkpOwotCQl3ID0gcC9xOwotCQlyZXR1cm4geCt4Knc7Ci0JfQotCS8qIDE+IHx4fD49IDAuNSAqLwotCXcgPSBvbmUtZmFic2YoeCk7Ci0JdCA9IHcqKGZsb2F0KTAuNTsKLQlwID0gdCoocFMwK3QqKHBTMSt0KihwUzIrdCoocFMzK3QqKHBTNCt0KnBTNSkpKSkpOwotCXEgPSBvbmUrdCoocVMxK3QqKHFTMit0KihxUzMrdCpxUzQpKSk7Ci0JcyA9IF9faWVlZTc1NF9zcXJ0Zih0KTsKLQlpZihpeD49MHgzRjc5OTk5QSkgeyAJLyogaWYgfHh8ID4gMC45NzUgKi8KLQkgICAgdyA9IHAvcTsKLQkgICAgdCA9IHBpbzJfaGktKChmbG9hdCkyLjAqKHMrcyp3KS1waW8yX2xvKTsKLQl9IGVsc2UgewotCSAgICBpbnQzMl90IGl3OwotCSAgICB3ICA9IHM7Ci0JICAgIEdFVF9GTE9BVF9XT1JEKGl3LHcpOwotCSAgICBTRVRfRkxPQVRfV09SRCh3LGl3JjB4ZmZmZmYwMDApOwotCSAgICBjICA9ICh0LXcqdykvKHMrdyk7Ci0JICAgIHIgID0gcC9xOwotCSAgICBwICA9IChmbG9hdCkyLjAqcypyLShwaW8yX2xvLShmbG9hdCkyLjAqYyk7Ci0JICAgIHEgID0gcGlvNF9oaS0oZmxvYXQpMi4wKnc7Ci0JICAgIHQgID0gcGlvNF9oaS0ocC1xKTsKLQl9Ci0JaWYoaHg+MCkgcmV0dXJuIHQ7IGVsc2UgcmV0dXJuIC10OwotfQpkaWZmIC0tZ2l0IGEvbGlibS9zcmMvZV9hdGFuMi5jIGIvbGlibS9zcmMvZV9hdGFuMi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NmMwNWE1Li4wMDAwMDAwCi0tLSBhL2xpYm0vc3JjL2VfYXRhbjIuYworKysgL2Rldi9udWxsCkBAIC0xLDEyNCArMCwwIEBACi0KLS8qIEAoIyllX2F0YW4yLmMgMS4zIDk1LzAxLzE4ICovCi0vKgotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogQ29weXJpZ2h0IChDKSAxOTkzIGJ5IFN1biBNaWNyb3N5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBEZXZlbG9wZWQgYXQgU3VuU29mdCwgYSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGJ1c2luZXNzLgotICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcwotICogc29mdHdhcmUgaXMgZnJlZWx5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhpcyBub3RpY2UgCi0gKiBpcyBwcmVzZXJ2ZWQuCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKgotICovCi0KLSNpZm5kZWYgbGludAotc3RhdGljIGNoYXIgcmNzaWRbXSA9ICIkRnJlZUJTRDogc3JjL2xpYi9tc3VuL3NyYy9lX2F0YW4yLmMsdiAxLjEwIDIwMDUvMDIvMDQgMTg6MjY6MDUgZGFzIEV4cCAkIjsKLSNlbmRpZgotCi0vKiBfX2llZWU3NTRfYXRhbjIoeSx4KQotICogTWV0aG9kIDoKLSAqCTEuIFJlZHVjZSB5IHRvIHBvc2l0aXZlIGJ5IGF0YW4yKHkseCk9LWF0YW4yKC15LHgpLgotICoJMi4gUmVkdWNlIHggdG8gcG9zaXRpdmUgYnkgKGlmIHggYW5kIHkgYXJlIHVuZXhjZXB0aW9uYWwpOiAKLSAqCQlBUkcgKHgraXkpID0gYXJjdGFuKHkveCkgICAJICAgLi4uIGlmIHggPiAwLAotICoJCUFSRyAoeCtpeSkgPSBwaSAtIGFyY3Rhblt5LygteCldICAgLi4uIGlmIHggPCAwLAotICoKLSAqIFNwZWNpYWwgY2FzZXM6Ci0gKgotICoJQVRBTjIoKGFueXRoaW5nKSwgTmFOICkgaXMgTmFOOwotICoJQVRBTjIoTkFOICwgKGFueXRoaW5nKSApIGlzIE5hTjsKLSAqCUFUQU4yKCstMCwgKyhhbnl0aGluZyBidXQgTmFOKSkgaXMgKy0wICA7Ci0gKglBVEFOMigrLTAsIC0oYW55dGhpbmcgYnV0IE5hTikpIGlzICstcGkgOwotICoJQVRBTjIoKy0oYW55dGhpbmcgYnV0IDAgYW5kIE5hTiksIDApIGlzICstcGkvMjsKLSAqCUFUQU4yKCstKGFueXRoaW5nIGJ1dCBJTkYgYW5kIE5hTiksICtJTkYpIGlzICstMCA7Ci0gKglBVEFOMigrLShhbnl0aGluZyBidXQgSU5GIGFuZCBOYU4pLCAtSU5GKSBpcyArLXBpOwotICoJQVRBTjIoKy1JTkYsK0lORiApIGlzICstcGkvNCA7Ci0gKglBVEFOMigrLUlORiwtSU5GICkgaXMgKy0zcGkvNDsKLSAqCUFUQU4yKCstSU5GLCAoYW55dGhpbmcgYnV0LDAsTmFOLCBhbmQgSU5GKSkgaXMgKy1waS8yOwotICoKLSAqIENvbnN0YW50czoKLSAqIFRoZSBoZXhhZGVjaW1hbCB2YWx1ZXMgYXJlIHRoZSBpbnRlbmRlZCBvbmVzIGZvciB0aGUgZm9sbG93aW5nIAotICogY29uc3RhbnRzLiBUaGUgZGVjaW1hbCB2YWx1ZXMgbWF5IGJlIHVzZWQsIHByb3ZpZGVkIHRoYXQgdGhlIAotICogY29tcGlsZXIgd2lsbCBjb252ZXJ0IGZyb20gZGVjaW1hbCB0byBiaW5hcnkgYWNjdXJhdGVseSBlbm91Z2ggCi0gKiB0byBwcm9kdWNlIHRoZSBoZXhhZGVjaW1hbCB2YWx1ZXMgc2hvd24uCi0gKi8KLQotI2luY2x1ZGUgIm1hdGguaCIKLSNpbmNsdWRlICJtYXRoX3ByaXZhdGUuaCIKLQotc3RhdGljIGNvbnN0IGRvdWJsZQotdGlueSAgPSAxLjBlLTMwMCwKLXplcm8gID0gMC4wLAotcGlfb180ICA9IDcuODUzOTgxNjMzOTc0NDgyNzkwMEUtMDEsIC8qIDB4M0ZFOTIxRkIsIDB4NTQ0NDJEMTggKi8KLXBpX29fMiAgPSAxLjU3MDc5NjMyNjc5NDg5NjU1ODBFKzAwLCAvKiAweDNGRjkyMUZCLCAweDU0NDQyRDE4ICovCi1waSAgICAgID0gMy4xNDE1OTI2NTM1ODk3OTMxMTYwRSswMCwgLyogMHg0MDA5MjFGQiwgMHg1NDQ0MkQxOCAqLwotcGlfbG8gICA9IDEuMjI0NjQ2Nzk5MTQ3MzUzMTc3MkUtMTY7IC8qIDB4M0NBMUE2MjYsIDB4MzMxNDVDMDcgKi8KLQotZG91YmxlCi1fX2llZWU3NTRfYXRhbjIoZG91YmxlIHksIGRvdWJsZSB4KQotewotCWRvdWJsZSB6OwotCWludDMyX3QgayxtLGh4LGh5LGl4LGl5OwotCXVfaW50MzJfdCBseCxseTsKLQotCUVYVFJBQ1RfV09SRFMoaHgsbHgseCk7Ci0JaXggPSBoeCYweDdmZmZmZmZmOwotCUVYVFJBQ1RfV09SRFMoaHksbHkseSk7Ci0JaXkgPSBoeSYweDdmZmZmZmZmOwotCWlmKCgoaXh8KChseHwtbHgpPj4zMSkpPjB4N2ZmMDAwMDApfHwKLQkgICAoKGl5fCgobHl8LWx5KT4+MzEpKT4weDdmZjAwMDAwKSkJLyogeCBvciB5IGlzIE5hTiAqLwotCSAgIHJldHVybiB4K3k7Ci0JaWYoKChoeC0weDNmZjAwMDAwKSB8IGx4KT09MCkgcmV0dXJuIGF0YW4oeSk7ICAgLyogeD0xLjAgKi8KLQltID0gKChoeT4+MzEpJjEpfCgoaHg+PjMwKSYyKTsJLyogMipzaWduKHgpK3NpZ24oeSkgKi8KLQotICAgIC8qIHdoZW4geSA9IDAgKi8KLQlpZigoaXl8bHkpPT0wKSB7Ci0JICAgIHN3aXRjaChtKSB7Ci0JCWNhc2UgMDogCi0JCWNhc2UgMTogcmV0dXJuIHk7IAkvKiBhdGFuKCstMCwrYW55dGhpbmcpPSstMCAqLwotCQljYXNlIDI6IHJldHVybiAgcGkrdGlueTsvKiBhdGFuKCswLC1hbnl0aGluZykgPSBwaSAqLwotCQljYXNlIDM6IHJldHVybiAtcGktdGlueTsvKiBhdGFuKC0wLC1hbnl0aGluZykgPS1waSAqLwotCSAgICB9Ci0JfQotICAgIC8qIHdoZW4geCA9IDAgKi8KLQlpZigoaXh8bHgpPT0wKSByZXR1cm4gKGh5PDApPyAgLXBpX29fMi10aW55OiBwaV9vXzIrdGlueTsKLQkgICAgCi0gICAgLyogd2hlbiB4IGlzIElORiAqLwotCWlmKGl4PT0weDdmZjAwMDAwKSB7Ci0JICAgIGlmKGl5PT0weDdmZjAwMDAwKSB7Ci0JCXN3aXRjaChtKSB7Ci0JCSAgICBjYXNlIDA6IHJldHVybiAgcGlfb180K3Rpbnk7LyogYXRhbigrSU5GLCtJTkYpICovCi0JCSAgICBjYXNlIDE6IHJldHVybiAtcGlfb180LXRpbnk7LyogYXRhbigtSU5GLCtJTkYpICovCi0JCSAgICBjYXNlIDI6IHJldHVybiAgMy4wKnBpX29fNCt0aW55Oy8qYXRhbigrSU5GLC1JTkYpKi8KLQkJICAgIGNhc2UgMzogcmV0dXJuIC0zLjAqcGlfb180LXRpbnk7LyphdGFuKC1JTkYsLUlORikqLwotCQl9Ci0JICAgIH0gZWxzZSB7Ci0JCXN3aXRjaChtKSB7Ci0JCSAgICBjYXNlIDA6IHJldHVybiAgemVybyAgOwkvKiBhdGFuKCsuLi4sK0lORikgKi8KLQkJICAgIGNhc2UgMTogcmV0dXJuIC16ZXJvICA7CS8qIGF0YW4oLS4uLiwrSU5GKSAqLwotCQkgICAgY2FzZSAyOiByZXR1cm4gIHBpK3RpbnkgIDsJLyogYXRhbigrLi4uLC1JTkYpICovCi0JCSAgICBjYXNlIDM6IHJldHVybiAtcGktdGlueSAgOwkvKiBhdGFuKC0uLi4sLUlORikgKi8KLQkJfQotCSAgICB9Ci0JfQotICAgIC8qIHdoZW4geSBpcyBJTkYgKi8KLQlpZihpeT09MHg3ZmYwMDAwMCkgcmV0dXJuIChoeTwwKT8gLXBpX29fMi10aW55OiBwaV9vXzIrdGlueTsKLQotICAgIC8qIGNvbXB1dGUgeS94ICovCi0JayA9IChpeS1peCk+PjIwOwotCWlmKGsgPiA2MCkgej1waV9vXzIrMC41KnBpX2xvOyAJLyogfHkveHwgPiAgMioqNjAgKi8KLQllbHNlIGlmKGh4PDAmJms8LTYwKSB6PTAuMDsgCS8qIHx5fC94IDwgLTIqKjYwICovCi0JZWxzZSB6PWF0YW4oZmFicyh5L3gpKTsJCS8qIHNhZmUgdG8gZG8geS94ICovCi0Jc3dpdGNoIChtKSB7Ci0JICAgIGNhc2UgMDogcmV0dXJuICAgICAgIHogIDsJLyogYXRhbigrLCspICovCi0JICAgIGNhc2UgMTogewotCSAgICAJICAgICAgdV9pbnQzMl90IHpoOwotCQkgICAgICBHRVRfSElHSF9XT1JEKHpoLHopOwotCQkgICAgICBTRVRfSElHSF9XT1JEKHosemggXiAweDgwMDAwMDAwKTsKLQkJICAgIH0KLQkJICAgIHJldHVybiAgICAgICB6ICA7CS8qIGF0YW4oLSwrKSAqLwotCSAgICBjYXNlIDI6IHJldHVybiAgcGktKHotcGlfbG8pOy8qIGF0YW4oKywtKSAqLwotCSAgICBkZWZhdWx0OiAvKiBjYXNlIDMgKi8KLQkgICAgCSAgICByZXR1cm4gICh6LXBpX2xvKS1waTsvKiBhdGFuKC0sLSkgKi8KLQl9Ci19CmRpZmYgLS1naXQgYS9saWJtL3NyYy9lX2F0YW4yZi5jIGIvbGlibS9zcmMvZV9hdGFuMmYuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDY2ZDVkNC4uMDAwMDAwMAotLS0gYS9saWJtL3NyYy9lX2F0YW4yZi5jCisrKyAvZGV2L251bGwKQEAgLTEsOTcgKzAsMCBAQAotLyogZV9hdGFuMmYuYyAtLSBmbG9hdCB2ZXJzaW9uIG9mIGVfYXRhbjIuYy4KLSAqIENvbnZlcnNpb24gdG8gZmxvYXQgYnkgSWFuIExhbmNlIFRheWxvciwgQ3lnbnVzIFN1cHBvcnQsIGlhbkBjeWdudXMuY29tLgotICovCi0KLS8qCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBDb3B5cmlnaHQgKEMpIDE5OTMgYnkgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIERldmVsb3BlZCBhdCBTdW5Qcm8sIGEgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBidXNpbmVzcy4KLSAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKLSAqIHNvZnR3YXJlIGlzIGZyZWVseSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoaXMgbm90aWNlCi0gKiBpcyBwcmVzZXJ2ZWQuCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKi8KLQotI2lmbmRlZiBsaW50Ci1zdGF0aWMgY2hhciByY3NpZFtdID0gIiRGcmVlQlNEOiBzcmMvbGliL21zdW4vc3JjL2VfYXRhbjJmLmMsdiAxLjcgMjAwNC8wNi8wMiAxNzowOTowNSBiZGUgRXhwICQiOwotI2VuZGlmCi0KLSNpbmNsdWRlICJtYXRoLmgiCi0jaW5jbHVkZSAibWF0aF9wcml2YXRlLmgiCi0KLXN0YXRpYyBjb25zdCBmbG9hdAotdGlueSAgPSAxLjBlLTMwLAotemVybyAgPSAwLjAsCi1waV9vXzQgID0gNy44NTM5ODE4NTI1ZS0wMSwgLyogMHgzZjQ5MGZkYiAqLwotcGlfb18yICA9IDEuNTcwNzk2MzcwNWUrMDAsIC8qIDB4M2ZjOTBmZGIgKi8KLXBpICAgICAgPSAzLjE0MTU5Mjc0MTBlKzAwLCAvKiAweDQwNDkwZmRiICovCi1waV9sbyAgID0gLTguNzQyMjc3NjU3M2UtMDg7IC8qIDB4YjNiYmJkMmUgKi8KLQotZmxvYXQKLV9faWVlZTc1NF9hdGFuMmYoZmxvYXQgeSwgZmxvYXQgeCkKLXsKLQlmbG9hdCB6OwotCWludDMyX3QgayxtLGh4LGh5LGl4LGl5OwotCi0JR0VUX0ZMT0FUX1dPUkQoaHgseCk7Ci0JaXggPSBoeCYweDdmZmZmZmZmOwotCUdFVF9GTE9BVF9XT1JEKGh5LHkpOwotCWl5ID0gaHkmMHg3ZmZmZmZmZjsKLQlpZigoaXg+MHg3ZjgwMDAwMCl8fAotCSAgIChpeT4weDdmODAwMDAwKSkJLyogeCBvciB5IGlzIE5hTiAqLwotCSAgIHJldHVybiB4K3k7Ci0JaWYoaHg9PTB4M2Y4MDAwMDApIHJldHVybiBhdGFuZih5KTsgICAvKiB4PTEuMCAqLwotCW0gPSAoKGh5Pj4zMSkmMSl8KChoeD4+MzApJjIpOwkvKiAyKnNpZ24oeCkrc2lnbih5KSAqLwotCi0gICAgLyogd2hlbiB5ID0gMCAqLwotCWlmKGl5PT0wKSB7Ci0JICAgIHN3aXRjaChtKSB7Ci0JCWNhc2UgMDoKLQkJY2FzZSAxOiByZXR1cm4geTsgCS8qIGF0YW4oKy0wLCthbnl0aGluZyk9Ky0wICovCi0JCWNhc2UgMjogcmV0dXJuICBwaSt0aW55Oy8qIGF0YW4oKzAsLWFueXRoaW5nKSA9IHBpICovCi0JCWNhc2UgMzogcmV0dXJuIC1waS10aW55Oy8qIGF0YW4oLTAsLWFueXRoaW5nKSA9LXBpICovCi0JICAgIH0KLQl9Ci0gICAgLyogd2hlbiB4ID0gMCAqLwotCWlmKGl4PT0wKSByZXR1cm4gKGh5PDApPyAgLXBpX29fMi10aW55OiBwaV9vXzIrdGlueTsKLQotICAgIC8qIHdoZW4geCBpcyBJTkYgKi8KLQlpZihpeD09MHg3ZjgwMDAwMCkgewotCSAgICBpZihpeT09MHg3ZjgwMDAwMCkgewotCQlzd2l0Y2gobSkgewotCQkgICAgY2FzZSAwOiByZXR1cm4gIHBpX29fNCt0aW55Oy8qIGF0YW4oK0lORiwrSU5GKSAqLwotCQkgICAgY2FzZSAxOiByZXR1cm4gLXBpX29fNC10aW55Oy8qIGF0YW4oLUlORiwrSU5GKSAqLwotCQkgICAgY2FzZSAyOiByZXR1cm4gIChmbG9hdCkzLjAqcGlfb180K3Rpbnk7LyphdGFuKCtJTkYsLUlORikqLwotCQkgICAgY2FzZSAzOiByZXR1cm4gKGZsb2F0KS0zLjAqcGlfb180LXRpbnk7LyphdGFuKC1JTkYsLUlORikqLwotCQl9Ci0JICAgIH0gZWxzZSB7Ci0JCXN3aXRjaChtKSB7Ci0JCSAgICBjYXNlIDA6IHJldHVybiAgemVybyAgOwkvKiBhdGFuKCsuLi4sK0lORikgKi8KLQkJICAgIGNhc2UgMTogcmV0dXJuIC16ZXJvICA7CS8qIGF0YW4oLS4uLiwrSU5GKSAqLwotCQkgICAgY2FzZSAyOiByZXR1cm4gIHBpK3RpbnkgIDsJLyogYXRhbigrLi4uLC1JTkYpICovCi0JCSAgICBjYXNlIDM6IHJldHVybiAtcGktdGlueSAgOwkvKiBhdGFuKC0uLi4sLUlORikgKi8KLQkJfQotCSAgICB9Ci0JfQotICAgIC8qIHdoZW4geSBpcyBJTkYgKi8KLQlpZihpeT09MHg3ZjgwMDAwMCkgcmV0dXJuIChoeTwwKT8gLXBpX29fMi10aW55OiBwaV9vXzIrdGlueTsKLQotICAgIC8qIGNvbXB1dGUgeS94ICovCi0JayA9IChpeS1peCk+PjIzOwotCWlmKGsgPiA2MCkgej1waV9vXzIrKGZsb2F0KTAuNSpwaV9sbzsgCS8qIHx5L3h8ID4gIDIqKjYwICovCi0JZWxzZSBpZihoeDwwJiZrPC02MCkgej0wLjA7IAkvKiB8eXwveCA8IC0yKio2MCAqLwotCWVsc2Ugej1hdGFuZihmYWJzZih5L3gpKTsJLyogc2FmZSB0byBkbyB5L3ggKi8KLQlzd2l0Y2ggKG0pIHsKLQkgICAgY2FzZSAwOiByZXR1cm4gICAgICAgeiAgOwkvKiBhdGFuKCssKykgKi8KLQkgICAgY2FzZSAxOiB7Ci0JICAgIAkgICAgICB1X2ludDMyX3Qgemg7Ci0JCSAgICAgIEdFVF9GTE9BVF9XT1JEKHpoLHopOwotCQkgICAgICBTRVRfRkxPQVRfV09SRCh6LHpoIF4gMHg4MDAwMDAwMCk7Ci0JCSAgICB9Ci0JCSAgICByZXR1cm4gICAgICAgeiAgOwkvKiBhdGFuKC0sKykgKi8KLQkgICAgY2FzZSAyOiByZXR1cm4gIHBpLSh6LXBpX2xvKTsvKiBhdGFuKCssLSkgKi8KLQkgICAgZGVmYXVsdDogLyogY2FzZSAzICovCi0JICAgIAkgICAgcmV0dXJuICAoei1waV9sbyktcGk7LyogYXRhbigtLC0pICovCi0JfQotfQpkaWZmIC0tZ2l0IGEvbGlibS9zcmMvZV9hdGFuaC5jIGIvbGlibS9zcmMvZV9hdGFuaC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MDQ4NzVjLi4wMDAwMDAwCi0tLSBhL2xpYm0vc3JjL2VfYXRhbmguYworKysgL2Rldi9udWxsCkBAIC0xLDYzICswLDAgQEAKLQotLyogQCgjKWVfYXRhbmguYyAxLjMgOTUvMDEvMTggKi8KLS8qCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBDb3B5cmlnaHQgKEMpIDE5OTMgYnkgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIERldmVsb3BlZCBhdCBTdW5Tb2Z0LCBhIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gYnVzaW5lc3MuCi0gKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCi0gKiBzb2Z0d2FyZSBpcyBmcmVlbHkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGlzIG5vdGljZSAKLSAqIGlzIHByZXNlcnZlZC4KLSAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqCi0gKi8KLQotI2lmbmRlZiBsaW50Ci1zdGF0aWMgY2hhciByY3NpZFtdID0gIiRGcmVlQlNEOiBzcmMvbGliL21zdW4vc3JjL2VfYXRhbmguYyx2IDEuNyAyMDA1LzAyLzA0IDE4OjI2OjA1IGRhcyBFeHAgJCI7Ci0jZW5kaWYKLQotLyogX19pZWVlNzU0X2F0YW5oKHgpCi0gKiBNZXRob2QgOgotICogICAgMS5SZWR1Y2VkIHggdG8gcG9zaXRpdmUgYnkgYXRhbmgoLXgpID0gLWF0YW5oKHgpCi0gKiAgICAyLkZvciB4Pj0wLjUKLSAqICAgICAgICAgICAgICAgICAgMSAgICAgICAgICAgICAgMnggICAgICAgICAgICAgICAgICAgICAgICAgIHgKLSAqCWF0YW5oKHgpID0gLS0tICogbG9nKDEgKyAtLS0tLS0tKSA9IDAuNSAqIGxvZzFwKDIgKiAtLS0tLS0tLSkKLSAqICAgICAgICAgICAgICAgICAgMiAgICAgICAgICAgICAxIC0geCAgICAgICAgICAgICAgICAgICAgICAxIC0geAotICoJCi0gKiAJRm9yIHg8MC41Ci0gKglhdGFuaCh4KSA9IDAuNSpsb2cxcCgyeCsyeCp4LygxLXgpKQotICoKLSAqIFNwZWNpYWwgY2FzZXM6Ci0gKglhdGFuaCh4KSBpcyBOYU4gaWYgfHh8ID4gMSB3aXRoIHNpZ25hbDsKLSAqCWF0YW5oKE5hTikgaXMgdGhhdCBOYU4gd2l0aCBubyBzaWduYWw7Ci0gKglhdGFuaCgrLTEpIGlzICstSU5GIHdpdGggc2lnbmFsLgotICoKLSAqLwotCi0jaW5jbHVkZSAibWF0aC5oIgotI2luY2x1ZGUgIm1hdGhfcHJpdmF0ZS5oIgotCi1zdGF0aWMgY29uc3QgZG91YmxlIG9uZSA9IDEuMCwgaHVnZSA9IDFlMzAwOwotc3RhdGljIGNvbnN0IGRvdWJsZSB6ZXJvID0gMC4wOwotCi1kb3VibGUKLV9faWVlZTc1NF9hdGFuaChkb3VibGUgeCkKLXsKLQlkb3VibGUgdDsKLQlpbnQzMl90IGh4LGl4OwotCXVfaW50MzJfdCBseDsKLQlFWFRSQUNUX1dPUkRTKGh4LGx4LHgpOwotCWl4ID0gaHgmMHg3ZmZmZmZmZjsKLQlpZiAoKGl4fCgobHh8KC1seCkpPj4zMSkpPjB4M2ZmMDAwMDApIC8qIHx4fD4xICovCi0JICAgIHJldHVybiAoeC14KS8oeC14KTsKLQlpZihpeD09MHgzZmYwMDAwMCkgCi0JICAgIHJldHVybiB4L3plcm87Ci0JaWYoaXg8MHgzZTMwMDAwMCYmKGh1Z2UreCk+emVybykgcmV0dXJuIHg7CS8qIHg8MioqLTI4ICovCi0JU0VUX0hJR0hfV09SRCh4LGl4KTsKLQlpZihpeDwweDNmZTAwMDAwKSB7CQkvKiB4IDwgMC41ICovCi0JICAgIHQgPSB4K3g7Ci0JICAgIHQgPSAwLjUqbG9nMXAodCt0KngvKG9uZS14KSk7Ci0JfSBlbHNlIAotCSAgICB0ID0gMC41KmxvZzFwKCh4K3gpLyhvbmUteCkpOwotCWlmKGh4Pj0wKSByZXR1cm4gdDsgZWxzZSByZXR1cm4gLXQ7Ci19CmRpZmYgLS1naXQgYS9saWJtL3NyYy9lX2F0YW5oZi5jIGIvbGlibS9zcmMvZV9hdGFuaGYuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjRlYmQzZC4uMDAwMDAwMAotLS0gYS9saWJtL3NyYy9lX2F0YW5oZi5jCisrKyAvZGV2L251bGwKQEAgLTEsNDYgKzAsMCBAQAotLyogZV9hdGFuaGYuYyAtLSBmbG9hdCB2ZXJzaW9uIG9mIGVfYXRhbmguYy4KLSAqIENvbnZlcnNpb24gdG8gZmxvYXQgYnkgSWFuIExhbmNlIFRheWxvciwgQ3lnbnVzIFN1cHBvcnQsIGlhbkBjeWdudXMuY29tLgotICovCi0KLS8qCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBDb3B5cmlnaHQgKEMpIDE5OTMgYnkgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIERldmVsb3BlZCBhdCBTdW5Qcm8sIGEgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBidXNpbmVzcy4KLSAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKLSAqIHNvZnR3YXJlIGlzIGZyZWVseSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoaXMgbm90aWNlCi0gKiBpcyBwcmVzZXJ2ZWQuCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKi8KLQotI2lmbmRlZiBsaW50Ci1zdGF0aWMgY2hhciByY3NpZFtdID0gIiRGcmVlQlNEOiBzcmMvbGliL21zdW4vc3JjL2VfYXRhbmhmLmMsdiAxLjYgMjAwMi8wNS8yOCAxNzowMzoxMiBhbGZyZWQgRXhwICQiOwotI2VuZGlmCi0KLSNpbmNsdWRlICJtYXRoLmgiCi0jaW5jbHVkZSAibWF0aF9wcml2YXRlLmgiCi0KLXN0YXRpYyBjb25zdCBmbG9hdCBvbmUgPSAxLjAsIGh1Z2UgPSAxZTMwOwotCi1zdGF0aWMgY29uc3QgZmxvYXQgemVybyA9IDAuMDsKLQotZmxvYXQKLV9faWVlZTc1NF9hdGFuaGYoZmxvYXQgeCkKLXsKLQlmbG9hdCB0OwotCWludDMyX3QgaHgsaXg7Ci0JR0VUX0ZMT0FUX1dPUkQoaHgseCk7Ci0JaXggPSBoeCYweDdmZmZmZmZmOwotCWlmIChpeD4weDNmODAwMDAwKSAJCS8qIHx4fD4xICovCi0JICAgIHJldHVybiAoeC14KS8oeC14KTsKLQlpZihpeD09MHgzZjgwMDAwMCkKLQkgICAgcmV0dXJuIHgvemVybzsKLQlpZihpeDwweDMxODAwMDAwJiYoaHVnZSt4KT56ZXJvKSByZXR1cm4geDsJLyogeDwyKiotMjggKi8KLQlTRVRfRkxPQVRfV09SRCh4LGl4KTsKLQlpZihpeDwweDNmMDAwMDAwKSB7CQkvKiB4IDwgMC41ICovCi0JICAgIHQgPSB4K3g7Ci0JICAgIHQgPSAoZmxvYXQpMC41KmxvZzFwZih0K3QqeC8ob25lLXgpKTsKLQl9IGVsc2UKLQkgICAgdCA9IChmbG9hdCkwLjUqbG9nMXBmKCh4K3gpLyhvbmUteCkpOwotCWlmKGh4Pj0wKSByZXR1cm4gdDsgZWxzZSByZXR1cm4gLXQ7Ci19CmRpZmYgLS1naXQgYS9saWJtL3NyYy9lX2Nvc2guYyBiL2xpYm0vc3JjL2VfY29zaC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MGE5NDNhLi4wMDAwMDAwCi0tLSBhL2xpYm0vc3JjL2VfY29zaC5jCisrKyAvZGV2L251bGwKQEAgLTEsODYgKzAsMCBAQAotCi0vKiBAKCMpZV9jb3NoLmMgMS4zIDk1LzAxLzE4ICovCi0vKgotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogQ29weXJpZ2h0IChDKSAxOTkzIGJ5IFN1biBNaWNyb3N5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBEZXZlbG9wZWQgYXQgU3VuU29mdCwgYSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGJ1c2luZXNzLgotICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcwotICogc29mdHdhcmUgaXMgZnJlZWx5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhpcyBub3RpY2UgCi0gKiBpcyBwcmVzZXJ2ZWQuCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKi8KLQotI2lmbmRlZiBsaW50Ci1zdGF0aWMgY2hhciByY3NpZFtdID0gIiRGcmVlQlNEOiBzcmMvbGliL21zdW4vc3JjL2VfY29zaC5jLHYgMS44IDIwMDUvMDIvMDQgMTg6MjY6MDUgZGFzIEV4cCAkIjsKLSNlbmRpZgotCi0vKiBfX2llZWU3NTRfY29zaCh4KQotICogTWV0aG9kIDogCi0gKiBtYXRoZW1hdGljYWxseSBjb3NoKHgpIGlmIGRlZmluZWQgdG8gYmUgKGV4cCh4KStleHAoLXgpKS8yCi0gKgkxLiBSZXBsYWNlIHggYnkgfHh8IChjb3NoKHgpID0gY29zaCgteCkpLiAKLSAqCTIuIAotICoJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbIGV4cCh4KSAtIDEgXV4yIAotICoJICAgIDAgICAgICAgIDw9IHggPD0gbG4yLzIgIDogIGNvc2goeCkgOj0gMSArIC0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqCQkJICAgICAgIAkJCSAgICAgICAgICAgMipleHAoeCkKLSAqCi0gKgkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cCh4KSArICAxL2V4cCh4KQotICoJICAgIGxuMi8yICAgIDw9IHggPD0gMjIgICAgIDogIGNvc2goeCkgOj0gLS0tLS0tLS0tLS0tLS0tLS0tLQotICoJCQkgICAgICAgCQkJICAgICAgICAgIDIKLSAqCSAgICAyMiAgICAgICA8PSB4IDw9IGxub3ZmdCA6ICBjb3NoKHgpIDo9IGV4cCh4KS8yIAotICoJICAgIGxub3ZmdCAgIDw9IHggPD0gbG4yb3ZmdDogIGNvc2goeCkgOj0gZXhwKHgvMikvMiAqIGV4cCh4LzIpCi0gKgkgICAgbG4yb3ZmdCAgPCAgeAkgICAgOiAgY29zaCh4KSA6PSBodWdlKmh1Z2UgKG92ZXJmbG93KQotICoKLSAqIFNwZWNpYWwgY2FzZXM6Ci0gKgljb3NoKHgpIGlzIHx4fCBpZiB4IGlzICtJTkYsIC1JTkYsIG9yIE5hTi4KLSAqCW9ubHkgY29zaCgwKT0xIGlzIGV4YWN0IGZvciBmaW5pdGUgeC4KLSAqLwotCi0jaW5jbHVkZSAibWF0aC5oIgotI2luY2x1ZGUgIm1hdGhfcHJpdmF0ZS5oIgotCi1zdGF0aWMgY29uc3QgZG91YmxlIG9uZSA9IDEuMCwgaGFsZj0wLjUsIGh1Z2UgPSAxLjBlMzAwOwotCi1kb3VibGUKLV9faWVlZTc1NF9jb3NoKGRvdWJsZSB4KQotewotCWRvdWJsZSB0LHc7Ci0JaW50MzJfdCBpeDsKLQl1X2ludDMyX3QgbHg7Ci0KLSAgICAvKiBIaWdoIHdvcmQgb2YgfHh8LiAqLwotCUdFVF9ISUdIX1dPUkQoaXgseCk7Ci0JaXggJj0gMHg3ZmZmZmZmZjsKLQotICAgIC8qIHggaXMgSU5GIG9yIE5hTiAqLwotCWlmKGl4Pj0weDdmZjAwMDAwKSByZXR1cm4geCp4OwkKLQotICAgIC8qIHx4fCBpbiBbMCwwLjUqbG4yXSwgcmV0dXJuIDErZXhwbTEofHh8KV4yLygyKmV4cCh8eHwpKSAqLwotCWlmKGl4PDB4M2ZkNjJlNDMpIHsKLQkgICAgdCA9IGV4cG0xKGZhYnMoeCkpOwotCSAgICB3ID0gb25lK3Q7Ci0JICAgIGlmIChpeDwweDNjODAwMDAwKSByZXR1cm4gdzsJLyogY29zaCh0aW55KSA9IDEgKi8KLQkgICAgcmV0dXJuIG9uZSsodCp0KS8odyt3KTsKLQl9Ci0KLSAgICAvKiB8eHwgaW4gWzAuNSpsbjIsMjJdLCByZXR1cm4gKGV4cCh8eHwpKzEvZXhwKHx4fCkvMjsgKi8KLQlpZiAoaXggPCAweDQwMzYwMDAwKSB7Ci0JCXQgPSBfX2llZWU3NTRfZXhwKGZhYnMoeCkpOwotCQlyZXR1cm4gaGFsZip0K2hhbGYvdDsKLQl9Ci0KLSAgICAvKiB8eHwgaW4gWzIyLCBsb2cobWF4ZG91YmxlKV0gcmV0dXJuIGhhbGYqZXhwKHx4fCkgKi8KLQlpZiAoaXggPCAweDQwODYyRTQyKSAgcmV0dXJuIGhhbGYqX19pZWVlNzU0X2V4cChmYWJzKHgpKTsKLQotICAgIC8qIHx4fCBpbiBbbG9nKG1heGRvdWJsZSksIG92ZXJmbG93dGhyZXNvbGRdICovCi0JR0VUX0xPV19XT1JEKGx4LHgpOwotCWlmIChpeDwweDQwODYzM0NFIHx8Ci0JICAgICAgKChpeD09MHg0MDg2MzNjZSkmJihseDw9KHVfaW50MzJfdCkweDhmYjlmODdkKSkpIHsKLQkgICAgdyA9IF9faWVlZTc1NF9leHAoaGFsZipmYWJzKHgpKTsKLQkgICAgdCA9IGhhbGYqdzsKLQkgICAgcmV0dXJuIHQqdzsKLQl9Ci0KLSAgICAvKiB8eHwgPiBvdmVyZmxvd3RocmVzb2xkLCBjb3NoKHgpIG92ZXJmbG93ICovCi0JcmV0dXJuIGh1Z2UqaHVnZTsKLX0KZGlmZiAtLWdpdCBhL2xpYm0vc3JjL2VfY29zaGYuYyBiL2xpYm0vc3JjL2VfY29zaGYuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjlkZjliMC4uMDAwMDAwMAotLS0gYS9saWJtL3NyYy9lX2Nvc2hmLmMKKysrIC9kZXYvbnVsbApAQCAtMSw2MyArMCwwIEBACi0vKiBlX2Nvc2hmLmMgLS0gZmxvYXQgdmVyc2lvbiBvZiBlX2Nvc2guYy4KLSAqIENvbnZlcnNpb24gdG8gZmxvYXQgYnkgSWFuIExhbmNlIFRheWxvciwgQ3lnbnVzIFN1cHBvcnQsIGlhbkBjeWdudXMuY29tLgotICovCi0KLS8qCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBDb3B5cmlnaHQgKEMpIDE5OTMgYnkgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIERldmVsb3BlZCBhdCBTdW5Qcm8sIGEgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBidXNpbmVzcy4KLSAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKLSAqIHNvZnR3YXJlIGlzIGZyZWVseSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoaXMgbm90aWNlCi0gKiBpcyBwcmVzZXJ2ZWQuCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKi8KLQotI2lmbmRlZiBsaW50Ci1zdGF0aWMgY2hhciByY3NpZFtdID0gIiRGcmVlQlNEOiBzcmMvbGliL21zdW4vc3JjL2VfY29zaGYuYyx2IDEuNyAyMDA1LzExLzEzIDAwOjA4OjIzIGJkZSBFeHAgJCI7Ci0jZW5kaWYKLQotI2luY2x1ZGUgIm1hdGguaCIKLSNpbmNsdWRlICJtYXRoX3ByaXZhdGUuaCIKLQotc3RhdGljIGNvbnN0IGZsb2F0IG9uZSA9IDEuMCwgaGFsZj0wLjUsIGh1Z2UgPSAxLjBlMzA7Ci0KLWZsb2F0Ci1fX2llZWU3NTRfY29zaGYoZmxvYXQgeCkKLXsKLQlmbG9hdCB0LHc7Ci0JaW50MzJfdCBpeDsKLQotCUdFVF9GTE9BVF9XT1JEKGl4LHgpOwotCWl4ICY9IDB4N2ZmZmZmZmY7Ci0KLSAgICAvKiB4IGlzIElORiBvciBOYU4gKi8KLQlpZihpeD49MHg3ZjgwMDAwMCkgcmV0dXJuIHgqeDsKLQotICAgIC8qIHx4fCBpbiBbMCwwLjUqbG4yXSwgcmV0dXJuIDErZXhwbTEofHh8KV4yLygyKmV4cCh8eHwpKSAqLwotCWlmKGl4PDB4M2ViMTcyMTgpIHsKLQkgICAgdCA9IGV4cG0xZihmYWJzZih4KSk7Ci0JICAgIHcgPSBvbmUrdDsKLQkgICAgaWYgKGl4PDB4Mzk4MDAwMDApIHJldHVybiBvbmU7CS8qIGNvc2godGlueSkgPSAxICovCi0JICAgIHJldHVybiBvbmUrKHQqdCkvKHcrdyk7Ci0JfQotCi0gICAgLyogfHh8IGluIFswLjUqbG4yLDldLCByZXR1cm4gKGV4cCh8eHwpKzEvZXhwKHx4fCkpLzI7ICovCi0JaWYgKGl4IDwgMHg0MTEwMDAwMCkgewotCQl0ID0gX19pZWVlNzU0X2V4cGYoZmFic2YoeCkpOwotCQlyZXR1cm4gaGFsZip0K2hhbGYvdDsKLQl9Ci0KLSAgICAvKiB8eHwgaW4gWzksIGxvZyhtYXhmbG9hdCldIHJldHVybiBoYWxmKmV4cCh8eHwpICovCi0JaWYgKGl4IDwgMHg0MmIxNzIxNykgIHJldHVybiBoYWxmKl9faWVlZTc1NF9leHBmKGZhYnNmKHgpKTsKLQotICAgIC8qIHx4fCBpbiBbbG9nKG1heGZsb2F0KSwgb3ZlcmZsb3d0aHJlc29sZF0gKi8KLQlpZiAoaXg8PTB4NDJiMmQ0ZmMpIHsKLQkgICAgdyA9IF9faWVlZTc1NF9leHBmKGhhbGYqZmFic2YoeCkpOwotCSAgICB0ID0gaGFsZip3OwotCSAgICByZXR1cm4gdCp3OwotCX0KLQotICAgIC8qIHx4fCA+IG92ZXJmbG93dGhyZXNvbGQsIGNvc2goeCkgb3ZlcmZsb3cgKi8KLQlyZXR1cm4gaHVnZSpodWdlOwotfQpkaWZmIC0tZ2l0IGEvbGlibS9zcmMvZV9leHAuYyBiL2xpYm0vc3JjL2VfZXhwLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUyNjE4OTUuLjAwMDAwMDAKLS0tIGEvbGlibS9zcmMvZV9leHAuYworKysgL2Rldi9udWxsCkBAIC0xLDE1OSArMCwwIEBACi0KLS8qIEAoIyllX2V4cC5jIDEuNiAwNC8wNC8yMiAqLwotLyoKLSAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIENvcHlyaWdodCAoQykgMjAwNCBieSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcwotICogc29mdHdhcmUgaXMgZnJlZWx5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhpcyBub3RpY2UgCi0gKiBpcyBwcmVzZXJ2ZWQuCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKi8KLQotI2lmbmRlZiBsaW50Ci1zdGF0aWMgY2hhciByY3NpZFtdID0gIiRGcmVlQlNEOiBzcmMvbGliL21zdW4vc3JjL2VfZXhwLmMsdiAxLjEwIDIwMDUvMDIvMDQgMTg6MjY6MDUgZGFzIEV4cCAkIjsKLSNlbmRpZgotCi0vKiBfX2llZWU3NTRfZXhwKHgpCi0gKiBSZXR1cm5zIHRoZSBleHBvbmVudGlhbCBvZiB4LgotICoKLSAqIE1ldGhvZAotICogICAxLiBBcmd1bWVudCByZWR1Y3Rpb246Ci0gKiAgICAgIFJlZHVjZSB4IHRvIGFuIHIgc28gdGhhdCB8cnwgPD0gMC41KmxuMiB+IDAuMzQ2NTguCi0gKglHaXZlbiB4LCBmaW5kIHIgYW5kIGludGVnZXIgayBzdWNoIHRoYXQKLSAqCi0gKiAgICAgICAgICAgICAgIHggPSBrKmxuMiArIHIsICB8cnwgPD0gMC41KmxuMi4gIAotICoKLSAqICAgICAgSGVyZSByIHdpbGwgYmUgcmVwcmVzZW50ZWQgYXMgciA9IGhpLWxvIGZvciBiZXR0ZXIgCi0gKglhY2N1cmFjeS4KLSAqCi0gKiAgIDIuIEFwcHJveGltYXRpb24gb2YgZXhwKHIpIGJ5IGEgc3BlY2lhbCByYXRpb25hbCBmdW5jdGlvbiBvbgotICoJdGhlIGludGVydmFsIFswLDAuMzQ2NThdOgotICoJV3JpdGUKLSAqCSAgICBSKHIqKjIpID0gciooZXhwKHIpKzEpLyhleHAociktMSkgPSAyICsgcipyLzYgLSByKio0LzM2MCArIC4uLgotICogICAgICBXZSB1c2UgYSBzcGVjaWFsIFJlbWVzIGFsZ29yaXRobSBvbiBbMCwwLjM0NjU4XSB0byBnZW5lcmF0ZSAKLSAqIAlhIHBvbHlub21pYWwgb2YgZGVncmVlIDUgdG8gYXBwcm94aW1hdGUgUi4gVGhlIG1heGltdW0gZXJyb3IgCi0gKglvZiB0aGlzIHBvbHlub21pYWwgYXBwcm94aW1hdGlvbiBpcyBib3VuZGVkIGJ5IDIqKi01OS4gSW4KLSAqCW90aGVyIHdvcmRzLAotICoJICAgIFIoeikgfiAyLjAgKyBQMSp6ICsgUDIqeioqMiArIFAzKnoqKjMgKyBQNCp6Kio0ICsgUDUqeioqNQotICogIAkod2hlcmUgej1yKnIsIGFuZCB0aGUgdmFsdWVzIG9mIFAxIHRvIFA1IGFyZSBsaXN0ZWQgYmVsb3cpCi0gKglhbmQKLSAqCSAgICB8ICAgICAgICAgICAgICAgICAgNSAgICAgICAgICB8ICAgICAtNTkKLSAqCSAgICB8IDIuMCtQMSp6Ky4uLitQNSp6ICAgLSAgUih6KSB8IDw9IDIgCi0gKgkgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICoJVGhlIGNvbXB1dGF0aW9uIG9mIGV4cChyKSB0aHVzIGJlY29tZXMKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyKnIKLSAqCQlleHAocikgPSAxICsgLS0tLS0tLQotICoJCSAgICAgICAgICAgICAgUiAtIHIKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcipSMShyKQkKLSAqCQkgICAgICAgPSAxICsgciArIC0tLS0tLS0tLS0tIChmb3IgYmV0dGVyIGFjY3VyYWN5KQotICoJCSAgICAgICAgICAgICAgICAgIDIgLSBSMShyKQotICoJd2hlcmUKLSAqCQkJICAgICAgICAgMiAgICAgICA0ICAgICAgICAgICAgIDEwCi0gKgkJUjEocikgPSByIC0gKFAxKnIgICsgUDIqciAgKyAuLi4gKyBQNSpyICAgKS4KLSAqCQotICogICAzLiBTY2FsZSBiYWNrIHRvIG9idGFpbiBleHAoeCk6Ci0gKglGcm9tIHN0ZXAgMSwgd2UgaGF2ZQotICoJICAgZXhwKHgpID0gMl5rICogZXhwKHIpCi0gKgotICogU3BlY2lhbCBjYXNlczoKLSAqCWV4cChJTkYpIGlzIElORiwgZXhwKE5hTikgaXMgTmFOOwotICoJZXhwKC1JTkYpIGlzIDAsIGFuZAotICoJZm9yIGZpbml0ZSBhcmd1bWVudCwgb25seSBleHAoMCk9MSBpcyBleGFjdC4KLSAqCi0gKiBBY2N1cmFjeToKLSAqCWFjY29yZGluZyB0byBhbiBlcnJvciBhbmFseXNpcywgdGhlIGVycm9yIGlzIGFsd2F5cyBsZXNzIHRoYW4KLSAqCTEgdWxwICh1bml0IGluIHRoZSBsYXN0IHBsYWNlKS4KLSAqCi0gKiBNaXNjLiBpbmZvLgotICoJRm9yIElFRUUgZG91YmxlIAotICoJICAgIGlmIHggPiAgNy4wOTc4MjcxMjg5MzM4Mzk3MzA5NmUrMDIgdGhlbiBleHAoeCkgb3ZlcmZsb3cKLSAqCSAgICBpZiB4IDwgLTcuNDUxMzMyMTkxMDE5NDExMDg0MjBlKzAyIHRoZW4gZXhwKHgpIHVuZGVyZmxvdwotICoKLSAqIENvbnN0YW50czoKLSAqIFRoZSBoZXhhZGVjaW1hbCB2YWx1ZXMgYXJlIHRoZSBpbnRlbmRlZCBvbmVzIGZvciB0aGUgZm9sbG93aW5nIAotICogY29uc3RhbnRzLiBUaGUgZGVjaW1hbCB2YWx1ZXMgbWF5IGJlIHVzZWQsIHByb3ZpZGVkIHRoYXQgdGhlIAotICogY29tcGlsZXIgd2lsbCBjb252ZXJ0IGZyb20gZGVjaW1hbCB0byBiaW5hcnkgYWNjdXJhdGVseSBlbm91Z2gKLSAqIHRvIHByb2R1Y2UgdGhlIGhleGFkZWNpbWFsIHZhbHVlcyBzaG93bi4KLSAqLwotCi0jaW5jbHVkZSAibWF0aC5oIgotI2luY2x1ZGUgIm1hdGhfcHJpdmF0ZS5oIgotCi1zdGF0aWMgY29uc3QgZG91YmxlCi1vbmUJPSAxLjAsCi1oYWxGWzJdCT0gezAuNSwtMC41LH0sCi1odWdlCT0gMS4wZSszMDAsCi10d29tMTAwMD0gOS4zMzI2MzYxODUwMzIxODg3ODk5MGUtMzAyLCAgICAgLyogMioqLTEwMDA9MHgwMTcwMDAwMCwwKi8KLW9fdGhyZXNob2xkPSAgNy4wOTc4MjcxMjg5MzM4Mzk3MzA5NmUrMDIsICAvKiAweDQwODYyRTQyLCAweEZFRkEzOUVGICovCi11X3RocmVzaG9sZD0gLTcuNDUxMzMyMTkxMDE5NDExMDg0MjBlKzAyLCAgLyogMHhjMDg3NDkxMCwgMHhENTJEMzA1MSAqLwotbG4ySElbMl0gICA9eyA2LjkzMTQ3MTgwMzY5MTIzODE2NDkwZS0wMSwgIC8qIDB4M2ZlNjJlNDIsIDB4ZmVlMDAwMDAgKi8KLQkgICAgIC02LjkzMTQ3MTgwMzY5MTIzODE2NDkwZS0wMSx9LC8qIDB4YmZlNjJlNDIsIDB4ZmVlMDAwMDAgKi8KLWxuMkxPWzJdICAgPXsgMS45MDgyMTQ5MjkyNzA1ODc3MDAwMmUtMTAsICAvKiAweDNkZWEzOWVmLCAweDM1NzkzYzc2ICovCi0JICAgICAtMS45MDgyMTQ5MjkyNzA1ODc3MDAwMmUtMTAsfSwvKiAweGJkZWEzOWVmLCAweDM1NzkzYzc2ICovCi1pbnZsbjIgPSAgMS40NDI2OTUwNDA4ODg5NjMzODcwMGUrMDAsIC8qIDB4M2ZmNzE1NDcsIDB4NjUyYjgyZmUgKi8KLVAxICAgPSAgMS42NjY2NjY2NjY2NjY2NjAxOTAzN2UtMDEsIC8qIDB4M0ZDNTU1NTUsIDB4NTU1NTU1M0UgKi8KLVAyICAgPSAtMi43Nzc3Nzc3Nzc3MDE1NTkzMzg0MmUtMDMsIC8qIDB4QkY2NkMxNkMsIDB4MTZCRUJEOTMgKi8KLVAzICAgPSAgNi42MTM3NTYzMjE0Mzc5MzQzNjExN2UtMDUsIC8qIDB4M0YxMTU2NkEsIDB4QUYyNURFMkMgKi8KLVA0ICAgPSAtMS42NTMzOTAyMjA1NDY1MjUxNTM5MGUtMDYsIC8qIDB4QkVCQkJENDEsIDB4QzVEMjZCRjEgKi8KLVA1ICAgPSAgNC4xMzgxMzY3OTcwNTcyMzg0NjAzOWUtMDg7IC8qIDB4M0U2NjM3NjksIDB4NzJCRUE0RDAgKi8KLQotCi1kb3VibGUKLV9faWVlZTc1NF9leHAoZG91YmxlIHgpCS8qIGRlZmF1bHQgSUVFRSBkb3VibGUgZXhwICovCi17Ci0JZG91YmxlIHksaGk9MC4wLGxvPTAuMCxjLHQ7Ci0JaW50MzJfdCBrPTAseHNiOwotCXVfaW50MzJfdCBoeDsKLQotCUdFVF9ISUdIX1dPUkQoaHgseCk7Ci0JeHNiID0gKGh4Pj4zMSkmMTsJCS8qIHNpZ24gYml0IG9mIHggKi8KLQloeCAmPSAweDdmZmZmZmZmOwkJLyogaGlnaCB3b3JkIG9mIHx4fCAqLwotCi0gICAgLyogZmlsdGVyIG91dCBub24tZmluaXRlIGFyZ3VtZW50ICovCi0JaWYoaHggPj0gMHg0MDg2MkU0MikgewkJCS8qIGlmIHx4fD49NzA5Ljc4Li4uICovCi0gICAgICAgICAgICBpZihoeD49MHg3ZmYwMDAwMCkgewotCSAgICAgICAgdV9pbnQzMl90IGx4OwotCQlHRVRfTE9XX1dPUkQobHgseCk7Ci0JCWlmKCgoaHgmMHhmZmZmZil8bHgpIT0wKQotCQkgICAgIHJldHVybiB4K3g7IAkJLyogTmFOICovCi0JCWVsc2UgcmV0dXJuICh4c2I9PTApPyB4OjAuMDsJLyogZXhwKCstaW5mKT17aW5mLDB9ICovCi0JICAgIH0KLQkgICAgaWYoeCA+IG9fdGhyZXNob2xkKSByZXR1cm4gaHVnZSpodWdlOyAvKiBvdmVyZmxvdyAqLwotCSAgICBpZih4IDwgdV90aHJlc2hvbGQpIHJldHVybiB0d29tMTAwMCp0d29tMTAwMDsgLyogdW5kZXJmbG93ICovCi0JfQotCi0gICAgLyogYXJndW1lbnQgcmVkdWN0aW9uICovCi0JaWYoaHggPiAweDNmZDYyZTQyKSB7CQkvKiBpZiAgfHh8ID4gMC41IGxuMiAqLyAKLQkgICAgaWYoaHggPCAweDNGRjBBMkIyKSB7CS8qIGFuZCB8eHwgPCAxLjUgbG4yICovCi0JCWhpID0geC1sbjJISVt4c2JdOyBsbz1sbjJMT1t4c2JdOyBrID0gMS14c2IteHNiOwotCSAgICB9IGVsc2UgewotCQlrICA9IChpbnQpKGludmxuMip4K2hhbEZbeHNiXSk7Ci0JCXQgID0gazsKLQkJaGkgPSB4IC0gdCpsbjJISVswXTsJLyogdCpsbjJISSBpcyBleGFjdCBoZXJlICovCi0JCWxvID0gdCpsbjJMT1swXTsKLQkgICAgfQotCSAgICB4ICA9IGhpIC0gbG87Ci0JfSAKLQllbHNlIGlmKGh4IDwgMHgzZTMwMDAwMCkgIHsJLyogd2hlbiB8eHw8MioqLTI4ICovCi0JICAgIGlmKGh1Z2UreD5vbmUpIHJldHVybiBvbmUreDsvKiB0cmlnZ2VyIGluZXhhY3QgKi8KLQl9Ci0JZWxzZSBrID0gMDsKLQotICAgIC8qIHggaXMgbm93IGluIHByaW1hcnkgcmFuZ2UgKi8KLQl0ICA9IHgqeDsKLQljICA9IHggLSB0KihQMSt0KihQMit0KihQMyt0KihQNCt0KlA1KSkpKTsKLQlpZihrPT0wKSAJcmV0dXJuIG9uZS0oKHgqYykvKGMtMi4wKS14KTsgCi0JZWxzZSAJCXkgPSBvbmUtKChsby0oeCpjKS8oMi4wLWMpKS1oaSk7Ci0JaWYoayA+PSAtMTAyMSkgewotCSAgICB1X2ludDMyX3QgaHk7Ci0JICAgIEdFVF9ISUdIX1dPUkQoaHkseSk7Ci0JICAgIFNFVF9ISUdIX1dPUkQoeSxoeSsoazw8MjApKTsJLyogYWRkIGsgdG8geSdzIGV4cG9uZW50ICovCi0JICAgIHJldHVybiB5OwotCX0gZWxzZSB7Ci0JICAgIHVfaW50MzJfdCBoeTsKLQkgICAgR0VUX0hJR0hfV09SRChoeSx5KTsKLQkgICAgU0VUX0hJR0hfV09SRCh5LGh5KygoaysxMDAwKTw8MjApKTsJLyogYWRkIGsgdG8geSdzIGV4cG9uZW50ICovCi0JICAgIHJldHVybiB5KnR3b20xMDAwOwotCX0KLX0KZGlmZiAtLWdpdCBhL2xpYm0vc3JjL2VfZXhwZi5jIGIvbGlibS9zcmMvZV9leHBmLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRlMDY1NTYuLjAwMDAwMDAKLS0tIGEvbGlibS9zcmMvZV9leHBmLmMKKysrIC9kZXYvbnVsbApAQCAtMSw5NSArMCwwIEBACi0vKiBlX2V4cGYuYyAtLSBmbG9hdCB2ZXJzaW9uIG9mIGVfZXhwLmMuCi0gKiBDb252ZXJzaW9uIHRvIGZsb2F0IGJ5IElhbiBMYW5jZSBUYXlsb3IsIEN5Z251cyBTdXBwb3J0LCBpYW5AY3lnbnVzLmNvbS4KLSAqLwotCi0vKgotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogQ29weXJpZ2h0IChDKSAxOTkzIGJ5IFN1biBNaWNyb3N5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBEZXZlbG9wZWQgYXQgU3VuUHJvLCBhIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gYnVzaW5lc3MuCi0gKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCi0gKiBzb2Z0d2FyZSBpcyBmcmVlbHkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGlzIG5vdGljZQotICogaXMgcHJlc2VydmVkLgotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICovCi0KLSNpZm5kZWYgbGludAotc3RhdGljIGNoYXIgcmNzaWRbXSA9ICIkRnJlZUJTRDogc3JjL2xpYi9tc3VuL3NyYy9lX2V4cGYuYyx2IDEuMTAgMjAwNS8xMS8zMCAwNDo1Njo0OSBiZGUgRXhwICQiOwotI2VuZGlmCi0KLSNpbmNsdWRlICJtYXRoLmgiCi0jaW5jbHVkZSAibWF0aF9wcml2YXRlLmgiCi0KLXN0YXRpYyBjb25zdCBmbG9hdAotb25lCT0gMS4wLAotaGFsRlsyXQk9IHswLjUsLTAuNSx9LAotaHVnZQk9IDEuMGUrMzAsCi10d29tMTAwID0gNy44ODg2MDkwNTIyZS0zMSwgICAgICAvKiAyKiotMTAwPTB4MGQ4MDAwMDAgKi8KLW9fdGhyZXNob2xkPSAgOC44NzIxNjc5Njg4ZSswMSwgIC8qIDB4NDJiMTcxODAgKi8KLXVfdGhyZXNob2xkPSAtMS4wMzk3MjA4NDA1ZSswMiwgIC8qIDB4YzJjZmYxYjUgKi8KLWxuMkhJWzJdICAgPXsgNi45MzE0NTc1MTk1ZS0wMSwJCS8qIDB4M2YzMTcyMDAgKi8KLQkgICAgIC02LjkzMTQ1NzUxOTVlLTAxLH0sCS8qIDB4YmYzMTcyMDAgKi8KLWxuMkxPWzJdICAgPXsgMS40Mjg2MDY3NjUzZS0wNiwgIAkvKiAweDM1YmZiZThlICovCi0JICAgICAtMS40Mjg2MDY3NjUzZS0wNix9LAkvKiAweGI1YmZiZThlICovCi1pbnZsbjIgPSAgMS40NDI2OTUwMjE2ZSswMCwgCQkvKiAweDNmYjhhYTNiICovCi1QMSAgID0gIDEuNjY2NjY2NzE2M2UtMDEsIC8qIDB4M2UyYWFhYWIgKi8KLVAyICAgPSAtMi43Nzc3Nzc4NDUwZS0wMywgLyogMHhiYjM2MGI2MSAqLwotUDMgICA9ICA2LjYxMzc1NTk3NzBlLTA1LCAvKiAweDM4OGFiMzU1ICovCi1QNCAgID0gLTEuNjUzMzkwMTk5OWUtMDYsIC8qIDB4YjVkZGVhMGUgKi8KLVA1ICAgPSAgNC4xMzgxMzY5NDQyZS0wODsgLyogMHgzMzMxYmI0YyAqLwotCi1mbG9hdAotX19pZWVlNzU0X2V4cGYoZmxvYXQgeCkJLyogZGVmYXVsdCBJRUVFIGRvdWJsZSBleHAgKi8KLXsKLQlmbG9hdCB5LGhpPTAuMCxsbz0wLjAsYyx0OwotCWludDMyX3Qgaz0wLHhzYjsKLQl1X2ludDMyX3QgaHg7Ci0KLQlHRVRfRkxPQVRfV09SRChoeCx4KTsKLQl4c2IgPSAoaHg+PjMxKSYxOwkJLyogc2lnbiBiaXQgb2YgeCAqLwotCWh4ICY9IDB4N2ZmZmZmZmY7CQkvKiBoaWdoIHdvcmQgb2YgfHh8ICovCi0KLSAgICAvKiBmaWx0ZXIgb3V0IG5vbi1maW5pdGUgYXJndW1lbnQgKi8KLQlpZihoeCA+PSAweDQyYjE3MjE4KSB7CQkJLyogaWYgfHh8Pj04OC43MjEuLi4gKi8KLQkgICAgaWYoaHg+MHg3ZjgwMDAwMCkKLQkJIHJldHVybiB4K3g7CSAJCS8qIE5hTiAqLwotICAgICAgICAgICAgaWYoaHg9PTB4N2Y4MDAwMDApCi0JCXJldHVybiAoeHNiPT0wKT8geDowLjA7CQkvKiBleHAoKy1pbmYpPXtpbmYsMH0gKi8KLQkgICAgaWYoeCA+IG9fdGhyZXNob2xkKSByZXR1cm4gaHVnZSpodWdlOyAvKiBvdmVyZmxvdyAqLwotCSAgICBpZih4IDwgdV90aHJlc2hvbGQpIHJldHVybiB0d29tMTAwKnR3b20xMDA7IC8qIHVuZGVyZmxvdyAqLwotCX0KLQotICAgIC8qIGFyZ3VtZW50IHJlZHVjdGlvbiAqLwotCWlmKGh4ID4gMHgzZWIxNzIxOCkgewkJLyogaWYgIHx4fCA+IDAuNSBsbjIgKi8KLQkgICAgaWYoaHggPCAweDNGODUxNTkyKSB7CS8qIGFuZCB8eHwgPCAxLjUgbG4yICovCi0JCWhpID0geC1sbjJISVt4c2JdOyBsbz1sbjJMT1t4c2JdOyBrID0gMS14c2IteHNiOwotCSAgICB9IGVsc2UgewotCQlrICA9IGludmxuMip4K2hhbEZbeHNiXTsKLQkJdCAgPSBrOwotCQloaSA9IHggLSB0KmxuMkhJWzBdOwkvKiB0KmxuMkhJIGlzIGV4YWN0IGhlcmUgKi8KLQkJbG8gPSB0KmxuMkxPWzBdOwotCSAgICB9Ci0JICAgIHggID0gaGkgLSBsbzsKLQl9Ci0JZWxzZSBpZihoeCA8IDB4MzE4MDAwMDApICB7CS8qIHdoZW4gfHh8PDIqKi0yOCAqLwotCSAgICBpZihodWdlK3g+b25lKSByZXR1cm4gb25lK3g7LyogdHJpZ2dlciBpbmV4YWN0ICovCi0JfQotCWVsc2UgayA9IDA7Ci0KLSAgICAvKiB4IGlzIG5vdyBpbiBwcmltYXJ5IHJhbmdlICovCi0JdCAgPSB4Kng7Ci0JYyAgPSB4IC0gdCooUDErdCooUDIrdCooUDMrdCooUDQrdCpQNSkpKSk7Ci0JaWYoaz09MCkgCXJldHVybiBvbmUtKCh4KmMpLyhjLShmbG9hdCkyLjApLXgpOwotCWVsc2UgCQl5ID0gb25lLSgobG8tKHgqYykvKChmbG9hdCkyLjAtYykpLWhpKTsKLQlpZihrID49IC0xMjUpIHsKLQkgICAgdV9pbnQzMl90IGh5OwotCSAgICBHRVRfRkxPQVRfV09SRChoeSx5KTsKLQkgICAgU0VUX0ZMT0FUX1dPUkQoeSxoeSsoazw8MjMpKTsJLyogYWRkIGsgdG8geSdzIGV4cG9uZW50ICovCi0JICAgIHJldHVybiB5OwotCX0gZWxzZSB7Ci0JICAgIHVfaW50MzJfdCBoeTsKLQkgICAgR0VUX0ZMT0FUX1dPUkQoaHkseSk7Ci0JICAgIFNFVF9GTE9BVF9XT1JEKHksaHkrKChrKzEwMCk8PDIzKSk7CS8qIGFkZCBrIHRvIHkncyBleHBvbmVudCAqLwotCSAgICByZXR1cm4geSp0d29tMTAwOwotCX0KLX0KZGlmZiAtLWdpdCBhL2xpYm0vc3JjL2VfZm1vZC5jIGIvbGlibS9zcmMvZV9mbW9kLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNiM2MxNjkuLjAwMDAwMDAKLS0tIGEvbGlibS9zcmMvZV9mbW9kLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMzMgKzAsMCBAQAotCi0vKiBAKCMpZV9mbW9kLmMgMS4zIDk1LzAxLzE4ICovCi0vKgotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogQ29weXJpZ2h0IChDKSAxOTkzIGJ5IFN1biBNaWNyb3N5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBEZXZlbG9wZWQgYXQgU3VuU29mdCwgYSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGJ1c2luZXNzLgotICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcwotICogc29mdHdhcmUgaXMgZnJlZWx5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhpcyBub3RpY2UgCi0gKiBpcyBwcmVzZXJ2ZWQuCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKi8KLQotI2lmbmRlZiBsaW50Ci1zdGF0aWMgY2hhciByY3NpZFtdID0gIiRGcmVlQlNEOiBzcmMvbGliL21zdW4vc3JjL2VfZm1vZC5jLHYgMS45IDIwMDUvMDIvMDQgMTg6MjY6MDUgZGFzIEV4cCAkIjsKLSNlbmRpZgotCi0vKiAKLSAqIF9faWVlZTc1NF9mbW9kKHgseSkKLSAqIFJldHVybiB4IG1vZCB5IGluIGV4YWN0IGFyaXRobWV0aWMKLSAqIE1ldGhvZDogc2hpZnQgYW5kIHN1YnRyYWN0Ci0gKi8KLQotI2luY2x1ZGUgIm1hdGguaCIKLSNpbmNsdWRlICJtYXRoX3ByaXZhdGUuaCIKLQotc3RhdGljIGNvbnN0IGRvdWJsZSBvbmUgPSAxLjAsIFplcm9bXSA9IHswLjAsIC0wLjAsfTsKLQotZG91YmxlCi1fX2llZWU3NTRfZm1vZChkb3VibGUgeCwgZG91YmxlIHkpCi17Ci0JaW50MzJfdCBuLGh4LGh5LGh6LGl4LGl5LHN4LGk7Ci0JdV9pbnQzMl90IGx4LGx5LGx6OwotCi0JRVhUUkFDVF9XT1JEUyhoeCxseCx4KTsKLQlFWFRSQUNUX1dPUkRTKGh5LGx5LHkpOwotCXN4ID0gaHgmMHg4MDAwMDAwMDsJCS8qIHNpZ24gb2YgeCAqLwotCWh4IF49c3g7CQkvKiB8eHwgKi8KLQloeSAmPSAweDdmZmZmZmZmOwkvKiB8eXwgKi8KLQotICAgIC8qIHB1cmdlIG9mZiBleGNlcHRpb24gdmFsdWVzICovCi0JaWYoKGh5fGx5KT09MHx8KGh4Pj0weDdmZjAwMDAwKXx8CS8qIHk9MCxvciB4IG5vdCBmaW5pdGUgKi8KLQkgICgoaHl8KChseXwtbHkpPj4zMSkpPjB4N2ZmMDAwMDApKQkvKiBvciB5IGlzIE5hTiAqLwotCSAgICByZXR1cm4gKHgqeSkvKHgqeSk7Ci0JaWYoaHg8PWh5KSB7Ci0JICAgIGlmKChoeDxoeSl8fChseDxseSkpIHJldHVybiB4OwkvKiB8eHw8fHl8IHJldHVybiB4ICovCi0JICAgIGlmKGx4PT1seSkgCi0JCXJldHVybiBaZXJvWyh1X2ludDMyX3Qpc3g+PjMxXTsJLyogfHh8PXx5fCByZXR1cm4geCowKi8KLQl9Ci0KLSAgICAvKiBkZXRlcm1pbmUgaXggPSBpbG9nYih4KSAqLwotCWlmKGh4PDB4MDAxMDAwMDApIHsJLyogc3Vibm9ybWFsIHggKi8KLQkgICAgaWYoaHg9PTApIHsKLQkJZm9yIChpeCA9IC0xMDQzLCBpPWx4OyBpPjA7IGk8PD0xKSBpeCAtPTE7Ci0JICAgIH0gZWxzZSB7Ci0JCWZvciAoaXggPSAtMTAyMixpPShoeDw8MTEpOyBpPjA7IGk8PD0xKSBpeCAtPTE7Ci0JICAgIH0KLQl9IGVsc2UgaXggPSAoaHg+PjIwKS0xMDIzOwotCi0gICAgLyogZGV0ZXJtaW5lIGl5ID0gaWxvZ2IoeSkgKi8KLQlpZihoeTwweDAwMTAwMDAwKSB7CS8qIHN1Ym5vcm1hbCB5ICovCi0JICAgIGlmKGh5PT0wKSB7Ci0JCWZvciAoaXkgPSAtMTA0MywgaT1seTsgaT4wOyBpPDw9MSkgaXkgLT0xOwotCSAgICB9IGVsc2UgewotCQlmb3IgKGl5ID0gLTEwMjIsaT0oaHk8PDExKTsgaT4wOyBpPDw9MSkgaXkgLT0xOwotCSAgICB9Ci0JfSBlbHNlIGl5ID0gKGh5Pj4yMCktMTAyMzsKLQotICAgIC8qIHNldCB1cCB7aHgsbHh9LCB7aHksbHl9IGFuZCBhbGlnbiB5IHRvIHggKi8KLQlpZihpeCA+PSAtMTAyMikgCi0JICAgIGh4ID0gMHgwMDEwMDAwMHwoMHgwMDBmZmZmZiZoeCk7Ci0JZWxzZSB7CQkvKiBzdWJub3JtYWwgeCwgc2hpZnQgeCB0byBub3JtYWwgKi8KLQkgICAgbiA9IC0xMDIyLWl4OwotCSAgICBpZihuPD0zMSkgewotCSAgICAgICAgaHggPSAoaHg8PG4pfChseD4+KDMyLW4pKTsKLQkgICAgICAgIGx4IDw8PSBuOwotCSAgICB9IGVsc2UgewotCQloeCA9IGx4PDwobi0zMik7Ci0JCWx4ID0gMDsKLQkgICAgfQotCX0KLQlpZihpeSA+PSAtMTAyMikgCi0JICAgIGh5ID0gMHgwMDEwMDAwMHwoMHgwMDBmZmZmZiZoeSk7Ci0JZWxzZSB7CQkvKiBzdWJub3JtYWwgeSwgc2hpZnQgeSB0byBub3JtYWwgKi8KLQkgICAgbiA9IC0xMDIyLWl5OwotCSAgICBpZihuPD0zMSkgewotCSAgICAgICAgaHkgPSAoaHk8PG4pfChseT4+KDMyLW4pKTsKLQkgICAgICAgIGx5IDw8PSBuOwotCSAgICB9IGVsc2UgewotCQloeSA9IGx5PDwobi0zMik7Ci0JCWx5ID0gMDsKLQkgICAgfQotCX0KLQotICAgIC8qIGZpeCBwb2ludCBmbW9kICovCi0JbiA9IGl4IC0gaXk7Ci0Jd2hpbGUobi0tKSB7Ci0JICAgIGh6PWh4LWh5O2x6PWx4LWx5OyBpZihseDxseSkgaHogLT0gMTsKLQkgICAgaWYoaHo8MCl7aHggPSBoeCtoeCsobHg+PjMxKTsgbHggPSBseCtseDt9Ci0JICAgIGVsc2UgewotCSAgICAJaWYoKGh6fGx6KT09MCkgCQkvKiByZXR1cm4gc2lnbih4KSowICovCi0JCSAgICByZXR1cm4gWmVyb1sodV9pbnQzMl90KXN4Pj4zMV07Ci0JICAgIAloeCA9IGh6K2h6Kyhsej4+MzEpOyBseCA9IGx6K2x6OwotCSAgICB9Ci0JfQotCWh6PWh4LWh5O2x6PWx4LWx5OyBpZihseDxseSkgaHogLT0gMTsKLQlpZihoej49MCkge2h4PWh6O2x4PWx6O30KLQotICAgIC8qIGNvbnZlcnQgYmFjayB0byBmbG9hdGluZyB2YWx1ZSBhbmQgcmVzdG9yZSB0aGUgc2lnbiAqLwotCWlmKChoeHxseCk9PTApIAkJCS8qIHJldHVybiBzaWduKHgpKjAgKi8KLQkgICAgcmV0dXJuIFplcm9bKHVfaW50MzJfdClzeD4+MzFdOwotCXdoaWxlKGh4PDB4MDAxMDAwMDApIHsJCS8qIG5vcm1hbGl6ZSB4ICovCi0JICAgIGh4ID0gaHgraHgrKGx4Pj4zMSk7IGx4ID0gbHgrbHg7Ci0JICAgIGl5IC09IDE7Ci0JfQotCWlmKGl5Pj0gLTEwMjIpIHsJLyogbm9ybWFsaXplIG91dHB1dCAqLwotCSAgICBoeCA9ICgoaHgtMHgwMDEwMDAwMCl8KChpeSsxMDIzKTw8MjApKTsKLQkgICAgSU5TRVJUX1dPUkRTKHgsaHh8c3gsbHgpOwotCX0gZWxzZSB7CQkvKiBzdWJub3JtYWwgb3V0cHV0ICovCi0JICAgIG4gPSAtMTAyMiAtIGl5OwotCSAgICBpZihuPD0yMCkgewotCQlseCA9IChseD4+bil8KCh1X2ludDMyX3QpaHg8PCgzMi1uKSk7Ci0JCWh4ID4+PSBuOwotCSAgICB9IGVsc2UgaWYgKG48PTMxKSB7Ci0JCWx4ID0gKGh4PDwoMzItbikpfChseD4+bik7IGh4ID0gc3g7Ci0JICAgIH0gZWxzZSB7Ci0JCWx4ID0gaHg+PihuLTMyKTsgaHggPSBzeDsKLQkgICAgfQotCSAgICBJTlNFUlRfV09SRFMoeCxoeHxzeCxseCk7Ci0JICAgIHggKj0gb25lOwkJLyogY3JlYXRlIG5lY2Vzc2FyeSBzaWduYWwgKi8KLQl9Ci0JcmV0dXJuIHg7CQkvKiBleGFjdCBvdXRwdXQgKi8KLX0KZGlmZiAtLWdpdCBhL2xpYm0vc3JjL2VfZm1vZGYuYyBiL2xpYm0vc3JjL2VfZm1vZGYuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGI0ODdhYy4uMDAwMDAwMAotLS0gYS9saWJtL3NyYy9lX2Ztb2RmLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMDUgKzAsMCBAQAotLyogZV9mbW9kZi5jIC0tIGZsb2F0IHZlcnNpb24gb2YgZV9mbW9kLmMuCi0gKiBDb252ZXJzaW9uIHRvIGZsb2F0IGJ5IElhbiBMYW5jZSBUYXlsb3IsIEN5Z251cyBTdXBwb3J0LCBpYW5AY3lnbnVzLmNvbS4KLSAqLwotCi0vKgotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogQ29weXJpZ2h0IChDKSAxOTkzIGJ5IFN1biBNaWNyb3N5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBEZXZlbG9wZWQgYXQgU3VuUHJvLCBhIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gYnVzaW5lc3MuCi0gKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCi0gKiBzb2Z0d2FyZSBpcyBmcmVlbHkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGlzIG5vdGljZQotICogaXMgcHJlc2VydmVkLgotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICovCi0KLSNpZm5kZWYgbGludAotc3RhdGljIGNoYXIgcmNzaWRbXSA9ICIkRnJlZUJTRDogc3JjL2xpYi9tc3VuL3NyYy9lX2Ztb2RmLmMsdiAxLjYgMjAwMi8wNS8yOCAxNzowMzoxMiBhbGZyZWQgRXhwICQiOwotI2VuZGlmCi0KLS8qCi0gKiBfX2llZWU3NTRfZm1vZGYoeCx5KQotICogUmV0dXJuIHggbW9kIHkgaW4gZXhhY3QgYXJpdGhtZXRpYwotICogTWV0aG9kOiBzaGlmdCBhbmQgc3VidHJhY3QKLSAqLwotCi0jaW5jbHVkZSAibWF0aC5oIgotI2luY2x1ZGUgIm1hdGhfcHJpdmF0ZS5oIgotCi1zdGF0aWMgY29uc3QgZmxvYXQgb25lID0gMS4wLCBaZXJvW10gPSB7MC4wLCAtMC4wLH07Ci0KLWZsb2F0Ci1fX2llZWU3NTRfZm1vZGYoZmxvYXQgeCwgZmxvYXQgeSkKLXsKLQlpbnQzMl90IG4saHgsaHksaHosaXgsaXksc3gsaTsKLQotCUdFVF9GTE9BVF9XT1JEKGh4LHgpOwotCUdFVF9GTE9BVF9XT1JEKGh5LHkpOwotCXN4ID0gaHgmMHg4MDAwMDAwMDsJCS8qIHNpZ24gb2YgeCAqLwotCWh4IF49c3g7CQkvKiB8eHwgKi8KLQloeSAmPSAweDdmZmZmZmZmOwkvKiB8eXwgKi8KLQotICAgIC8qIHB1cmdlIG9mZiBleGNlcHRpb24gdmFsdWVzICovCi0JaWYoaHk9PTB8fChoeD49MHg3ZjgwMDAwMCl8fAkJLyogeT0wLG9yIHggbm90IGZpbml0ZSAqLwotCSAgIChoeT4weDdmODAwMDAwKSkJCQkvKiBvciB5IGlzIE5hTiAqLwotCSAgICByZXR1cm4gKHgqeSkvKHgqeSk7Ci0JaWYoaHg8aHkpIHJldHVybiB4OwkJCS8qIHx4fDx8eXwgcmV0dXJuIHggKi8KLQlpZihoeD09aHkpCi0JICAgIHJldHVybiBaZXJvWyh1X2ludDMyX3Qpc3g+PjMxXTsJLyogfHh8PXx5fCByZXR1cm4geCowKi8KLQotICAgIC8qIGRldGVybWluZSBpeCA9IGlsb2diKHgpICovCi0JaWYoaHg8MHgwMDgwMDAwMCkgewkvKiBzdWJub3JtYWwgeCAqLwotCSAgICBmb3IgKGl4ID0gLTEyNixpPShoeDw8OCk7IGk+MDsgaTw8PTEpIGl4IC09MTsKLQl9IGVsc2UgaXggPSAoaHg+PjIzKS0xMjc7Ci0KLSAgICAvKiBkZXRlcm1pbmUgaXkgPSBpbG9nYih5KSAqLwotCWlmKGh5PDB4MDA4MDAwMDApIHsJLyogc3Vibm9ybWFsIHkgKi8KLQkgICAgZm9yIChpeSA9IC0xMjYsaT0oaHk8PDgpOyBpPj0wOyBpPDw9MSkgaXkgLT0xOwotCX0gZWxzZSBpeSA9IChoeT4+MjMpLTEyNzsKLQotICAgIC8qIHNldCB1cCB7aHgsbHh9LCB7aHksbHl9IGFuZCBhbGlnbiB5IHRvIHggKi8KLQlpZihpeCA+PSAtMTI2KQotCSAgICBoeCA9IDB4MDA4MDAwMDB8KDB4MDA3ZmZmZmYmaHgpOwotCWVsc2UgewkJLyogc3Vibm9ybWFsIHgsIHNoaWZ0IHggdG8gbm9ybWFsICovCi0JICAgIG4gPSAtMTI2LWl4OwotCSAgICBoeCA9IGh4PDxuOwotCX0KLQlpZihpeSA+PSAtMTI2KQotCSAgICBoeSA9IDB4MDA4MDAwMDB8KDB4MDA3ZmZmZmYmaHkpOwotCWVsc2UgewkJLyogc3Vibm9ybWFsIHksIHNoaWZ0IHkgdG8gbm9ybWFsICovCi0JICAgIG4gPSAtMTI2LWl5OwotCSAgICBoeSA9IGh5PDxuOwotCX0KLQotICAgIC8qIGZpeCBwb2ludCBmbW9kICovCi0JbiA9IGl4IC0gaXk7Ci0Jd2hpbGUobi0tKSB7Ci0JICAgIGh6PWh4LWh5OwotCSAgICBpZihoejwwKXtoeCA9IGh4K2h4O30KLQkgICAgZWxzZSB7Ci0JICAgIAlpZihoej09MCkgCQkvKiByZXR1cm4gc2lnbih4KSowICovCi0JCSAgICByZXR1cm4gWmVyb1sodV9pbnQzMl90KXN4Pj4zMV07Ci0JICAgIAloeCA9IGh6K2h6OwotCSAgICB9Ci0JfQotCWh6PWh4LWh5OwotCWlmKGh6Pj0wKSB7aHg9aHo7fQotCi0gICAgLyogY29udmVydCBiYWNrIHRvIGZsb2F0aW5nIHZhbHVlIGFuZCByZXN0b3JlIHRoZSBzaWduICovCi0JaWYoaHg9PTApIAkJCS8qIHJldHVybiBzaWduKHgpKjAgKi8KLQkgICAgcmV0dXJuIFplcm9bKHVfaW50MzJfdClzeD4+MzFdOwotCXdoaWxlKGh4PDB4MDA4MDAwMDApIHsJCS8qIG5vcm1hbGl6ZSB4ICovCi0JICAgIGh4ID0gaHgraHg7Ci0JICAgIGl5IC09IDE7Ci0JfQotCWlmKGl5Pj0gLTEyNikgewkJLyogbm9ybWFsaXplIG91dHB1dCAqLwotCSAgICBoeCA9ICgoaHgtMHgwMDgwMDAwMCl8KChpeSsxMjcpPDwyMykpOwotCSAgICBTRVRfRkxPQVRfV09SRCh4LGh4fHN4KTsKLQl9IGVsc2UgewkJLyogc3Vibm9ybWFsIG91dHB1dCAqLwotCSAgICBuID0gLTEyNiAtIGl5OwotCSAgICBoeCA+Pj0gbjsKLQkgICAgU0VUX0ZMT0FUX1dPUkQoeCxoeHxzeCk7Ci0JICAgIHggKj0gb25lOwkJLyogY3JlYXRlIG5lY2Vzc2FyeSBzaWduYWwgKi8KLQl9Ci0JcmV0dXJuIHg7CQkvKiBleGFjdCBvdXRwdXQgKi8KLX0KZGlmZiAtLWdpdCBhL2xpYm0vc3JjL2VfZ2FtbWEuYyBiL2xpYm0vc3JjL2VfZ2FtbWEuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjUyZmYxNy4uMDAwMDAwMAotLS0gYS9saWJtL3NyYy9lX2dhbW1hLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi0KLS8qIEAoIyllX2dhbW1hLmMgMS4zIDk1LzAxLzE4ICovCi0vKgotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogQ29weXJpZ2h0IChDKSAxOTkzIGJ5IFN1biBNaWNyb3N5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBEZXZlbG9wZWQgYXQgU3VuU29mdCwgYSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGJ1c2luZXNzLgotICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcwotICogc29mdHdhcmUgaXMgZnJlZWx5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhpcyBub3RpY2UgCi0gKiBpcyBwcmVzZXJ2ZWQuCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKgotICovCi0KLSNpZm5kZWYgbGludAotc3RhdGljIGNoYXIgcmNzaWRbXSA9ICIkRnJlZUJTRDogc3JjL2xpYi9tc3VuL3NyYy9lX2dhbW1hLmMsdiAxLjcgMjAwNS8wMi8wNCAxODoyNjowNSBkYXMgRXhwICQiOwotI2VuZGlmCi0KLS8qIF9faWVlZTc1NF9nYW1tYSh4KQotICogUmV0dXJuIHRoZSBsb2dhcml0aG0gb2YgdGhlIEdhbW1hIGZ1bmN0aW9uIG9mIHguCi0gKgotICogTWV0aG9kOiBjYWxsIF9faWVlZTc1NF9nYW1tYV9yCi0gKi8KLQotI2luY2x1ZGUgIm1hdGguaCIKLSNpbmNsdWRlICJtYXRoX3ByaXZhdGUuaCIKLQotZXh0ZXJuIGludCBzaWduZ2FtOwotCi1kb3VibGUKLV9faWVlZTc1NF9nYW1tYShkb3VibGUgeCkKLXsKLQlyZXR1cm4gX19pZWVlNzU0X2dhbW1hX3IoeCwmc2lnbmdhbSk7Ci19CmRpZmYgLS1naXQgYS9saWJtL3NyYy9lX2dhbW1hX3IuYyBiL2xpYm0vc3JjL2VfZ2FtbWFfci5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZTgzMzlkLi4wMDAwMDAwCi0tLSBhL2xpYm0vc3JjL2VfZ2FtbWFfci5jCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotCi0vKiBAKCMpZV9nYW1tYV9yLmMgMS4zIDk1LzAxLzE4ICovCi0vKgotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogQ29weXJpZ2h0IChDKSAxOTkzIGJ5IFN1biBNaWNyb3N5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBEZXZlbG9wZWQgYXQgU3VuU29mdCwgYSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGJ1c2luZXNzLgotICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcwotICogc29mdHdhcmUgaXMgZnJlZWx5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhpcyBub3RpY2UgCi0gKiBpcyBwcmVzZXJ2ZWQuCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKgotICovCi0KLSNpZm5kZWYgbGludAotc3RhdGljIGNoYXIgcmNzaWRbXSA9ICIkRnJlZUJTRDogc3JjL2xpYi9tc3VuL3NyYy9lX2dhbW1hX3IuYyx2IDEuNyAyMDA1LzAyLzA0IDE4OjI2OjA1IGRhcyBFeHAgJCI7Ci0jZW5kaWYKLQotLyogX19pZWVlNzU0X2dhbW1hX3IoeCwgc2lnbmdhbXApCi0gKiBSZWVudHJhbnQgdmVyc2lvbiBvZiB0aGUgbG9nYXJpdGhtIG9mIHRoZSBHYW1tYSBmdW5jdGlvbiAKLSAqIHdpdGggdXNlciBwcm92aWRlIHBvaW50ZXIgZm9yIHRoZSBzaWduIG9mIEdhbW1hKHgpLiAKLSAqCi0gKiBNZXRob2Q6IFNlZSBfX2llZWU3NTRfbGdhbW1hX3IKLSAqLwotCi0jaW5jbHVkZSAibWF0aC5oIgotI2luY2x1ZGUgIm1hdGhfcHJpdmF0ZS5oIgotCi1kb3VibGUKLV9faWVlZTc1NF9nYW1tYV9yKGRvdWJsZSB4LCBpbnQgKnNpZ25nYW1wKQotewotCXJldHVybiBfX2llZWU3NTRfbGdhbW1hX3IoeCxzaWduZ2FtcCk7Ci19CmRpZmYgLS1naXQgYS9saWJtL3NyYy9lX2dhbW1hZi5jIGIvbGlibS9zcmMvZV9nYW1tYWYuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjVjMmVjMS4uMDAwMDAwMAotLS0gYS9saWJtL3NyYy9lX2dhbW1hZi5jCisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotLyogZV9nYW1tYWYuYyAtLSBmbG9hdCB2ZXJzaW9uIG9mIGVfZ2FtbWEuYy4KLSAqIENvbnZlcnNpb24gdG8gZmxvYXQgYnkgSWFuIExhbmNlIFRheWxvciwgQ3lnbnVzIFN1cHBvcnQsIGlhbkBjeWdudXMuY29tLgotICovCi0KLS8qCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBDb3B5cmlnaHQgKEMpIDE5OTMgYnkgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIERldmVsb3BlZCBhdCBTdW5Qcm8sIGEgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBidXNpbmVzcy4KLSAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKLSAqIHNvZnR3YXJlIGlzIGZyZWVseSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoaXMgbm90aWNlCi0gKiBpcyBwcmVzZXJ2ZWQuCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKi8KLQotI2lmbmRlZiBsaW50Ci1zdGF0aWMgY2hhciByY3NpZFtdID0gIiRGcmVlQlNEOiBzcmMvbGliL21zdW4vc3JjL2VfZ2FtbWFmLmMsdiAxLjYgMjAwMi8wNS8yOCAxNzowMzoxMiBhbGZyZWQgRXhwICQiOwotI2VuZGlmCi0KLS8qIF9faWVlZTc1NF9nYW1tYWYoeCkKLSAqIFJldHVybiB0aGUgbG9nYXJpdGhtIG9mIHRoZSBHYW1tYSBmdW5jdGlvbiBvZiB4LgotICoKLSAqIE1ldGhvZDogY2FsbCBfX2llZWU3NTRfZ2FtbWFmX3IKLSAqLwotCi0jaW5jbHVkZSAibWF0aC5oIgotI2luY2x1ZGUgIm1hdGhfcHJpdmF0ZS5oIgotCi1leHRlcm4gaW50IHNpZ25nYW07Ci0KLWZsb2F0Ci1fX2llZWU3NTRfZ2FtbWFmKGZsb2F0IHgpCi17Ci0JcmV0dXJuIF9faWVlZTc1NF9nYW1tYWZfcih4LCZzaWduZ2FtKTsKLX0KZGlmZiAtLWdpdCBhL2xpYm0vc3JjL2VfZ2FtbWFmX3IuYyBiL2xpYm0vc3JjL2VfZ2FtbWFmX3IuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDQzMDBjMy4uMDAwMDAwMAotLS0gYS9saWJtL3NyYy9lX2dhbW1hZl9yLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi0vKiBlX2dhbW1hZl9yLmMgLS0gZmxvYXQgdmVyc2lvbiBvZiBlX2dhbW1hX3IuYy4KLSAqIENvbnZlcnNpb24gdG8gZmxvYXQgYnkgSWFuIExhbmNlIFRheWxvciwgQ3lnbnVzIFN1cHBvcnQsIGlhbkBjeWdudXMuY29tLgotICovCi0KLS8qCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBDb3B5cmlnaHQgKEMpIDE5OTMgYnkgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIERldmVsb3BlZCBhdCBTdW5Qcm8sIGEgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBidXNpbmVzcy4KLSAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKLSAqIHNvZnR3YXJlIGlzIGZyZWVseSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoaXMgbm90aWNlCi0gKiBpcyBwcmVzZXJ2ZWQuCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKi8KLQotI2lmbmRlZiBsaW50Ci1zdGF0aWMgY2hhciByY3NpZFtdID0gIiRGcmVlQlNEOiBzcmMvbGliL21zdW4vc3JjL2VfZ2FtbWFmX3IuYyx2IDEuNyAyMDAyLzA1LzI4IDE4OjE1OjAzIGFsZnJlZCBFeHAgJCI7Ci0jZW5kaWYKLQotLyogX19pZWVlNzU0X2dhbW1hZl9yKHgsIHNpZ25nYW1wKQotICogUmVlbnRyYW50IHZlcnNpb24gb2YgdGhlIGxvZ2FyaXRobSBvZiB0aGUgR2FtbWEgZnVuY3Rpb24KLSAqIHdpdGggdXNlciBwcm92aWRlIHBvaW50ZXIgZm9yIHRoZSBzaWduIG9mIEdhbW1hKHgpLgotICoKLSAqIE1ldGhvZDogU2VlIF9faWVlZTc1NF9sZ2FtbWFmX3IKLSAqLwotCi0jaW5jbHVkZSAibWF0aC5oIgotI2luY2x1ZGUgIm1hdGhfcHJpdmF0ZS5oIgotCi1mbG9hdAotX19pZWVlNzU0X2dhbW1hZl9yKGZsb2F0IHgsIGludCAqc2lnbmdhbXApCi17Ci0JcmV0dXJuIF9faWVlZTc1NF9sZ2FtbWFmX3IoeCxzaWduZ2FtcCk7Ci19CmRpZmYgLS1naXQgYS9saWJtL3NyYy9lX2h5cG90LmMgYi9saWJtL3NyYy9lX2h5cG90LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDExMzg1ZjUuLjAwMDAwMDAKLS0tIGEvbGlibS9zcmMvZV9oeXBvdC5jCisrKyAvZGV2L251bGwKQEAgLTEsMTI1ICswLDAgQEAKLQotLyogQCgjKWVfaHlwb3QuYyAxLjMgOTUvMDEvMTggKi8KLS8qCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBDb3B5cmlnaHQgKEMpIDE5OTMgYnkgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIERldmVsb3BlZCBhdCBTdW5Tb2Z0LCBhIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gYnVzaW5lc3MuCi0gKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCi0gKiBzb2Z0d2FyZSBpcyBmcmVlbHkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGlzIG5vdGljZSAKLSAqIGlzIHByZXNlcnZlZC4KLSAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqLwotCi0jaWZuZGVmIGxpbnQKLXN0YXRpYyBjaGFyIHJjc2lkW10gPSAiJEZyZWVCU0Q6IHNyYy9saWIvbXN1bi9zcmMvZV9oeXBvdC5jLHYgMS45IDIwMDUvMDIvMDQgMTg6MjY6MDUgZGFzIEV4cCAkIjsKLSNlbmRpZgotCi0vKiBfX2llZWU3NTRfaHlwb3QoeCx5KQotICoKLSAqIE1ldGhvZCA6ICAgICAgICAgICAgICAgICAgCi0gKglJZiAoYXNzdW1lIHJvdW5kLXRvLW5lYXJlc3QpIHo9eCp4K3kqeSAKLSAqCWhhcyBlcnJvciBsZXNzIHRoYW4gc3FydCgyKS8yIHVscCwgdGhhbiAKLSAqCXNxcnQoeikgaGFzIGVycm9yIGxlc3MgdGhhbiAxIHVscCAoZXhlcmNpc2UpLgotICoKLSAqCVNvLCBjb21wdXRlIHNxcnQoeCp4K3kqeSkgd2l0aCBzb21lIGNhcmUgYXMgCi0gKglmb2xsb3dzIHRvIGdldCB0aGUgZXJyb3IgYmVsb3cgMSB1bHA6Ci0gKgotICoJQXNzdW1lIHg+eT4wOwotICoJKGlmIHBvc3NpYmxlLCBzZXQgcm91bmRpbmcgdG8gcm91bmQtdG8tbmVhcmVzdCkKLSAqCTEuIGlmIHggPiAyeSAgdXNlCi0gKgkJeDEqeDErKHkqeSsoeDIqKHgreDEpKSkgZm9yIHgqeCt5KnkKLSAqCXdoZXJlIHgxID0geCB3aXRoIGxvd2VyIDMyIGJpdHMgY2xlYXJlZCwgeDIgPSB4LXgxOyBlbHNlCi0gKgkyLiBpZiB4IDw9IDJ5IHVzZQotICoJCXQxKnkxKygoeC15KSooeC15KSsodDEqeTIrdDIqeSkpCi0gKgl3aGVyZSB0MSA9IDJ4IHdpdGggbG93ZXIgMzIgYml0cyBjbGVhcmVkLCB0MiA9IDJ4LXQxLCAKLSAqCXkxPSB5IHdpdGggbG93ZXIgMzIgYml0cyBjaG9wcGVkLCB5MiA9IHkteTEuCi0gKgkJCi0gKglOT1RFOiBzY2FsaW5nIG1heSBiZSBuZWNlc3NhcnkgaWYgc29tZSBhcmd1bWVudCBpcyB0b28gCi0gKgkgICAgICBsYXJnZSBvciB0b28gdGlueQotICoKLSAqIFNwZWNpYWwgY2FzZXM6Ci0gKgloeXBvdCh4LHkpIGlzIElORiBpZiB4IG9yIHkgaXMgK0lORiBvciAtSU5GOyBlbHNlCi0gKgloeXBvdCh4LHkpIGlzIE5BTiBpZiB4IG9yIHkgaXMgTkFOLgotICoKLSAqIEFjY3VyYWN5OgotICogCWh5cG90KHgseSkgcmV0dXJucyBzcXJ0KHheMit5XjIpIHdpdGggZXJyb3IgbGVzcyAKLSAqIAl0aGFuIDEgdWxwcyAodW5pdHMgaW4gdGhlIGxhc3QgcGxhY2UpIAotICovCi0KLSNpbmNsdWRlICJtYXRoLmgiCi0jaW5jbHVkZSAibWF0aF9wcml2YXRlLmgiCi0KLWRvdWJsZQotX19pZWVlNzU0X2h5cG90KGRvdWJsZSB4LCBkb3VibGUgeSkKLXsKLQlkb3VibGUgYT14LGI9eSx0MSx0Mix5MSx5Mix3OwotCWludDMyX3QgaixrLGhhLGhiOwotCi0JR0VUX0hJR0hfV09SRChoYSx4KTsKLQloYSAmPSAweDdmZmZmZmZmOwotCUdFVF9ISUdIX1dPUkQoaGIseSk7Ci0JaGIgJj0gMHg3ZmZmZmZmZjsKLQlpZihoYiA+IGhhKSB7YT15O2I9eDtqPWhhOyBoYT1oYjtoYj1qO30gZWxzZSB7YT14O2I9eTt9Ci0JU0VUX0hJR0hfV09SRChhLGhhKTsJLyogYSA8LSB8YXwgKi8KLQlTRVRfSElHSF9XT1JEKGIsaGIpOwkvKiBiIDwtIHxifCAqLwotCWlmKChoYS1oYik+MHgzYzAwMDAwKSB7cmV0dXJuIGErYjt9IC8qIHgveSA+IDIqKjYwICovCi0Jaz0wOwotCWlmKGhhID4gMHg1ZjMwMDAwMCkgewkvKiBhPjIqKjUwMCAqLwotCSAgIGlmKGhhID49IDB4N2ZmMDAwMDApIHsJLyogSW5mIG9yIE5hTiAqLwotCSAgICAgICB1X2ludDMyX3QgbG93OwotCSAgICAgICB3ID0gYStiOwkJCS8qIGZvciBzTmFOICovCi0JICAgICAgIEdFVF9MT1dfV09SRChsb3csYSk7Ci0JICAgICAgIGlmKCgoaGEmMHhmZmZmZil8bG93KT09MCkgdyA9IGE7Ci0JICAgICAgIEdFVF9MT1dfV09SRChsb3csYik7Ci0JICAgICAgIGlmKCgoaGJeMHg3ZmYwMDAwMCl8bG93KT09MCkgdyA9IGI7Ci0JICAgICAgIHJldHVybiB3OwotCSAgIH0KLQkgICAvKiBzY2FsZSBhIGFuZCBiIGJ5IDIqKi02MDAgKi8KLQkgICBoYSAtPSAweDI1ODAwMDAwOyBoYiAtPSAweDI1ODAwMDAwOwlrICs9IDYwMDsKLQkgICBTRVRfSElHSF9XT1JEKGEsaGEpOwotCSAgIFNFVF9ISUdIX1dPUkQoYixoYik7Ci0JfQotCWlmKGhiIDwgMHgyMGIwMDAwMCkgewkvKiBiIDwgMioqLTUwMCAqLwotCSAgICBpZihoYiA8PSAweDAwMGZmZmZmKSB7CS8qIHN1Ym5vcm1hbCBiIG9yIDAgKi8KLQkgICAgICAgIHVfaW50MzJfdCBsb3c7Ci0JCUdFVF9MT1dfV09SRChsb3csYik7Ci0JCWlmKChoYnxsb3cpPT0wKSByZXR1cm4gYTsKLQkJdDE9MDsKLQkJU0VUX0hJR0hfV09SRCh0MSwweDdmZDAwMDAwKTsJLyogdDE9Ml4xMDIyICovCi0JCWIgKj0gdDE7Ci0JCWEgKj0gdDE7Ci0JCWsgLT0gMTAyMjsKLQkgICAgfSBlbHNlIHsJCS8qIHNjYWxlIGEgYW5kIGIgYnkgMl42MDAgKi8KLQkgICAgICAgIGhhICs9IDB4MjU4MDAwMDA7IAkvKiBhICo9IDJeNjAwICovCi0JCWhiICs9IDB4MjU4MDAwMDA7CS8qIGIgKj0gMl42MDAgKi8KLQkJayAtPSA2MDA7Ci0JCVNFVF9ISUdIX1dPUkQoYSxoYSk7Ci0JCVNFVF9ISUdIX1dPUkQoYixoYik7Ci0JICAgIH0KLQl9Ci0gICAgLyogbWVkaXVtIHNpemUgYSBhbmQgYiAqLwotCXcgPSBhLWI7Ci0JaWYgKHc+YikgewotCSAgICB0MSA9IDA7Ci0JICAgIFNFVF9ISUdIX1dPUkQodDEsaGEpOwotCSAgICB0MiA9IGEtdDE7Ci0JICAgIHcgID0gc3FydCh0MSp0MS0oYiooLWIpLXQyKihhK3QxKSkpOwotCX0gZWxzZSB7Ci0JICAgIGEgID0gYSthOwotCSAgICB5MSA9IDA7Ci0JICAgIFNFVF9ISUdIX1dPUkQoeTEsaGIpOwotCSAgICB5MiA9IGIgLSB5MTsKLQkgICAgdDEgPSAwOwotCSAgICBTRVRfSElHSF9XT1JEKHQxLGhhKzB4MDAxMDAwMDApOwotCSAgICB0MiA9IGEgLSB0MTsKLQkgICAgdyAgPSBzcXJ0KHQxKnkxLSh3KigtdyktKHQxKnkyK3QyKmIpKSk7Ci0JfQotCWlmKGshPTApIHsKLQkgICAgdV9pbnQzMl90IGhpZ2g7Ci0JICAgIHQxID0gMS4wOwotCSAgICBHRVRfSElHSF9XT1JEKGhpZ2gsdDEpOwotCSAgICBTRVRfSElHSF9XT1JEKHQxLGhpZ2grKGs8PDIwKSk7Ci0JICAgIHJldHVybiB0MSp3OwotCX0gZWxzZSByZXR1cm4gdzsKLX0KZGlmZiAtLWdpdCBhL2xpYm0vc3JjL2VfaHlwb3RmLmMgYi9saWJtL3NyYy9lX2h5cG90Zi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNTQwNzVhLi4wMDAwMDAwCi0tLSBhL2xpYm0vc3JjL2VfaHlwb3RmLmMKKysrIC9kZXYvbnVsbApAQCAtMSw4MyArMCwwIEBACi0vKiBlX2h5cG90Zi5jIC0tIGZsb2F0IHZlcnNpb24gb2YgZV9oeXBvdC5jLgotICogQ29udmVyc2lvbiB0byBmbG9hdCBieSBJYW4gTGFuY2UgVGF5bG9yLCBDeWdudXMgU3VwcG9ydCwgaWFuQGN5Z251cy5jb20uCi0gKi8KLQotLyoKLSAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIENvcHlyaWdodCAoQykgMTk5MyBieSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogRGV2ZWxvcGVkIGF0IFN1blBybywgYSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGJ1c2luZXNzLgotICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcwotICogc29mdHdhcmUgaXMgZnJlZWx5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhpcyBub3RpY2UKLSAqIGlzIHByZXNlcnZlZC4KLSAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqLwotCi0jaWZuZGVmIGxpbnQKLXN0YXRpYyBjaGFyIHJjc2lkW10gPSAiJEZyZWVCU0Q6IHNyYy9saWIvbXN1bi9zcmMvZV9oeXBvdGYuYyx2IDEuOSAyMDAyLzA1LzI4IDE4OjE1OjAzIGFsZnJlZCBFeHAgJCI7Ci0jZW5kaWYKLQotI2luY2x1ZGUgIm1hdGguaCIKLSNpbmNsdWRlICJtYXRoX3ByaXZhdGUuaCIKLQotZmxvYXQKLV9faWVlZTc1NF9oeXBvdGYoZmxvYXQgeCwgZmxvYXQgeSkKLXsKLQlmbG9hdCBhPXgsYj15LHQxLHQyLHkxLHkyLHc7Ci0JaW50MzJfdCBqLGssaGEsaGI7Ci0KLQlHRVRfRkxPQVRfV09SRChoYSx4KTsKLQloYSAmPSAweDdmZmZmZmZmOwotCUdFVF9GTE9BVF9XT1JEKGhiLHkpOwotCWhiICY9IDB4N2ZmZmZmZmY7Ci0JaWYoaGIgPiBoYSkge2E9eTtiPXg7aj1oYTsgaGE9aGI7aGI9ajt9IGVsc2Uge2E9eDtiPXk7fQotCVNFVF9GTE9BVF9XT1JEKGEsaGEpOwkvKiBhIDwtIHxhfCAqLwotCVNFVF9GTE9BVF9XT1JEKGIsaGIpOwkvKiBiIDwtIHxifCAqLwotCWlmKChoYS1oYik+MHhmMDAwMDAwKSB7cmV0dXJuIGErYjt9IC8qIHgveSA+IDIqKjMwICovCi0Jaz0wOwotCWlmKGhhID4gMHg1ODgwMDAwMCkgewkvKiBhPjIqKjUwICovCi0JICAgaWYoaGEgPj0gMHg3ZjgwMDAwMCkgewkvKiBJbmYgb3IgTmFOICovCi0JICAgICAgIHcgPSBhK2I7CQkJLyogZm9yIHNOYU4gKi8KLQkgICAgICAgaWYoaGEgPT0gMHg3ZjgwMDAwMCkgdyA9IGE7Ci0JICAgICAgIGlmKGhiID09IDB4N2Y4MDAwMDApIHcgPSBiOwotCSAgICAgICByZXR1cm4gdzsKLQkgICB9Ci0JICAgLyogc2NhbGUgYSBhbmQgYiBieSAyKiotNjggKi8KLQkgICBoYSAtPSAweDIyMDAwMDAwOyBoYiAtPSAweDIyMDAwMDAwOwlrICs9IDY4OwotCSAgIFNFVF9GTE9BVF9XT1JEKGEsaGEpOwotCSAgIFNFVF9GTE9BVF9XT1JEKGIsaGIpOwotCX0KLQlpZihoYiA8IDB4MjY4MDAwMDApIHsJLyogYiA8IDIqKi01MCAqLwotCSAgICBpZihoYiA8PSAweDAwN2ZmZmZmKSB7CS8qIHN1Ym5vcm1hbCBiIG9yIDAgKi8KLQkgICAgICAgIGlmKGhiPT0wKSByZXR1cm4gYTsKLQkJU0VUX0ZMT0FUX1dPUkQodDEsMHg3ZTgwMDAwMCk7CS8qIHQxPTJeMTI2ICovCi0JCWIgKj0gdDE7Ci0JCWEgKj0gdDE7Ci0JCWsgLT0gMTI2OwotCSAgICB9IGVsc2UgewkJLyogc2NhbGUgYSBhbmQgYiBieSAyXjY4ICovCi0JICAgICAgICBoYSArPSAweDIyMDAwMDAwOyAJLyogYSAqPSAyXjY4ICovCi0JCWhiICs9IDB4MjIwMDAwMDA7CS8qIGIgKj0gMl42OCAqLwotCQlrIC09IDY4OwotCQlTRVRfRkxPQVRfV09SRChhLGhhKTsKLQkJU0VUX0ZMT0FUX1dPUkQoYixoYik7Ci0JICAgIH0KLQl9Ci0gICAgLyogbWVkaXVtIHNpemUgYSBhbmQgYiAqLwotCXcgPSBhLWI7Ci0JaWYgKHc+YikgewotCSAgICBTRVRfRkxPQVRfV09SRCh0MSxoYSYweGZmZmZmMDAwKTsKLQkgICAgdDIgPSBhLXQxOwotCSAgICB3ICA9IF9faWVlZTc1NF9zcXJ0Zih0MSp0MS0oYiooLWIpLXQyKihhK3QxKSkpOwotCX0gZWxzZSB7Ci0JICAgIGEgID0gYSthOwotCSAgICBTRVRfRkxPQVRfV09SRCh5MSxoYiYweGZmZmZmMDAwKTsKLQkgICAgeTIgPSBiIC0geTE7Ci0JICAgIFNFVF9GTE9BVF9XT1JEKHQxLGhhKzB4MDA4MDAwMDApOwotCSAgICB0MiA9IGEgLSB0MTsKLQkgICAgdyAgPSBfX2llZWU3NTRfc3FydGYodDEqeTEtKHcqKC13KS0odDEqeTIrdDIqYikpKTsKLQl9Ci0JaWYoayE9MCkgewotCSAgICBTRVRfRkxPQVRfV09SRCh0MSwweDNmODAwMDAwKyhrPDwyMykpOwotCSAgICByZXR1cm4gdDEqdzsKLQl9IGVsc2UgcmV0dXJuIHc7Ci19CmRpZmYgLS1naXQgYS9saWJtL3NyYy9lX2owLmMgYi9saWJtL3NyYy9lX2owLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ5OWJmMTEuLjAwMDAwMDAKLS0tIGEvbGlibS9zcmMvZV9qMC5jCisrKyAvZGV2L251bGwKQEAgLTEsMzgyICswLDAgQEAKLQotLyogQCgjKWVfajAuYyAxLjMgOTUvMDEvMTggKi8KLS8qCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBDb3B5cmlnaHQgKEMpIDE5OTMgYnkgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIERldmVsb3BlZCBhdCBTdW5Tb2Z0LCBhIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gYnVzaW5lc3MuCi0gKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCi0gKiBzb2Z0d2FyZSBpcyBmcmVlbHkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGlzIG5vdGljZSAKLSAqIGlzIHByZXNlcnZlZC4KLSAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqLwotCi0jaWZuZGVmIGxpbnQKLXN0YXRpYyBjaGFyIHJjc2lkW10gPSAiJEZyZWVCU0Q6IHNyYy9saWIvbXN1bi9zcmMvZV9qMC5jLHYgMS44IDIwMDUvMDIvMDQgMTg6MjY6MDUgZGFzIEV4cCAkIjsKLSNlbmRpZgotCi0vKiBfX2llZWU3NTRfajAoeCksIF9faWVlZTc1NF95MCh4KQotICogQmVzc2VsIGZ1bmN0aW9uIG9mIHRoZSBmaXJzdCBhbmQgc2Vjb25kIGtpbmRzIG9mIG9yZGVyIHplcm8uCi0gKiBNZXRob2QgLS0gajAoeCk6Ci0gKgkxLiBGb3IgdGlueSB4LCB3ZSB1c2UgajAoeCkgPSAxIC0geF4yLzQgKyB4XjQvNjQgLSAuLi4KLSAqCTIuIFJlZHVjZSB4IHRvIHx4fCBzaW5jZSBqMCh4KT1qMCgteCksICBhbmQKLSAqCSAgIGZvciB4IGluICgwLDIpCi0gKgkJajAoeCkgPSAxLXovNCsgel4yKlIwL1MwLCAgd2hlcmUgeiA9IHgqeDsKLSAqCSAgIChwcmVjaXNpb246ICB8ajAtMSt6LzQtel4yUjAvUzAgfDwyKiotNjMuNjcgKQotICoJICAgZm9yIHggaW4gKDIsaW5mKQotICogCQlqMCh4KSA9IHNxcnQoMi8ocGkqeCkpKihwMCh4KSpjb3MoeDApLXEwKHgpKnNpbih4MCkpCi0gKiAJICAgd2hlcmUgeDAgPSB4LXBpLzQuIEl0IGlzIGJldHRlciB0byBjb21wdXRlIHNpbih4MCksY29zKHgwKQotICoJICAgYXMgZm9sbG93OgotICoJCWNvcyh4MCkgPSBjb3MoeCljb3MocGkvNCkrc2luKHgpc2luKHBpLzQpCi0gKgkJCT0gMS9zcXJ0KDIpICogKGNvcyh4KSArIHNpbih4KSkKLSAqCQlzaW4oeDApID0gc2luKHgpY29zKHBpLzQpLWNvcyh4KXNpbihwaS80KQotICoJCQk9IDEvc3FydCgyKSAqIChzaW4oeCkgLSBjb3MoeCkpCi0gKiAJICAgKFRvIGF2b2lkIGNhbmNlbGxhdGlvbiwgdXNlCi0gKgkJc2luKHgpICstIGNvcyh4KSA9IC1jb3MoMngpLyhzaW4oeCkgLSsgY29zKHgpKQotICogCSAgICB0byBjb21wdXRlIHRoZSB3b3JzZSBvbmUuKQotICoJICAgCi0gKgkzIFNwZWNpYWwgY2FzZXMKLSAqCQlqMChuYW4pPSBuYW4KLSAqCQlqMCgwKSA9IDEKLSAqCQlqMChpbmYpID0gMAotICoJCQotICogTWV0aG9kIC0tIHkwKHgpOgotICoJMS4gRm9yIHg8Mi4KLSAqCSAgIFNpbmNlIAotICoJCXkwKHgpID0gMi9waSooajAoeCkqKGxuKHgvMikrRXVsZXIpICsgeF4yLzQgLSAuLi4pCi0gKgkgICB0aGVyZWZvcmUgeTAoeCktMi9waSpqMCh4KSpsbih4KSBpcyBhbiBldmVuIGZ1bmN0aW9uLgotICoJICAgV2UgdXNlIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb24gdG8gYXBwcm94aW1hdGUgeTAsCi0gKgkJeTAoeCkgPSBVKHopL1YoeikgKyAoMi9waSkqKGowKHgpKmxuKHgpKSwgej0geF4yCi0gKgkgICB3aGVyZSAKLSAqCQlVKHopID0gdTAwICsgdTAxKnogKyAuLi4gKyB1MDYqel42Ci0gKgkJVih6KSA9IDEgICsgdjAxKnogKyAuLi4gKyB2MDQqel40Ci0gKgkgICB3aXRoIGFic29sdXRlIGFwcHJveGltYXRpb24gZXJyb3IgYm91bmRlZCBieSAyKiotNzIuCi0gKgkgICBOb3RlOiBGb3IgdGlueSB4LCBVL1YgPSB1MCBhbmQgajAoeCl+MSwgaGVuY2UKLSAqCQl5MCh0aW55KSA9IHUwICsgKDIvcGkpKmxuKHRpbnkpLCAoY2hvb3NlIHRpbnk8MioqLTI3KQotICoJMi4gRm9yIHg+PTIuCi0gKiAJCXkwKHgpID0gc3FydCgyLyhwaSp4KSkqKHAwKHgpKmNvcyh4MCkrcTAoeCkqc2luKHgwKSkKLSAqIAkgICB3aGVyZSB4MCA9IHgtcGkvNC4gSXQgaXMgYmV0dGVyIHRvIGNvbXB1dGUgc2luKHgwKSxjb3MoeDApCi0gKgkgICBieSB0aGUgbWV0aG9kIG1lbnRpb25lZCBhYm92ZS4KLSAqCTMuIFNwZWNpYWwgY2FzZXM6IHkwKDApPS1pbmYsIHkwKHg8MCk9TmFOLCB5MChpbmYpPTAuCi0gKi8KLQotI2luY2x1ZGUgIm1hdGguaCIKLSNpbmNsdWRlICJtYXRoX3ByaXZhdGUuaCIKLQotc3RhdGljIGRvdWJsZSBwemVybyhkb3VibGUpLCBxemVybyhkb3VibGUpOwotCi1zdGF0aWMgY29uc3QgZG91YmxlCi1odWdlIAk9IDFlMzAwLAotb25lCT0gMS4wLAotaW52c3FydHBpPSAgNS42NDE4OTU4MzU0Nzc1NjI3OTI4MGUtMDEsIC8qIDB4M0ZFMjBERDcsIDB4NTA0MjlCNkQgKi8KLXRwaSAgICAgID0gIDYuMzY2MTk3NzIzNjc1ODEzODI0MzNlLTAxLCAvKiAweDNGRTQ1RjMwLCAweDZEQzlDODgzICovCi0gCQkvKiBSMC9TMCBvbiBbMCwgMi4wMF0gKi8KLVIwMiAgPSAgMS41NjI0OTk5OTk5OTk5OTk0Nzk1OGUtMDIsIC8qIDB4M0Y4RkZGRkYsIDB4RkZGRkZGRkQgKi8KLVIwMyAgPSAtMS44OTk3OTI5NDIzODg1NDcyMTc1MWUtMDQsIC8qIDB4QkYyOEU2QTUsIDB4QjYxQUM2RTkgKi8KLVIwNCAgPSAgMS44Mjk1NDA0OTUzMjcwMDY2NTY3MGUtMDYsIC8qIDB4M0VCRUIxRDEsIDB4MEM1MDM5MTkgKi8KLVIwNSAgPSAtNC42MTgzMjY4ODUzMjEwMzE4OTE5OWUtMDksIC8qIDB4QkUzM0Q1RTcsIDB4NzNENjNGQ0UgKi8KLVMwMSAgPSAgMS41NjE5MTAyOTQ2NDg5MDAxMDQ5MmUtMDIsIC8qIDB4M0Y4RkZDRTgsIDB4ODJDOEMyQTQgKi8KLVMwMiAgPSAgMS4xNjkyNjc4NDY2MzMzNzQ1MDI2MGUtMDQsIC8qIDB4M0YxRUE2RDIsIDB4REQ1N0RCRjQgKi8KLVMwMyAgPSAgNS4xMzU0NjU1MDIwNzMxODExMTQ0NmUtMDcsIC8qIDB4M0VBMTNCNTQsIDB4Q0U4NEQ1QTkgKi8KLVMwNCAgPSAgMS4xNjYxNDAwMzMzMzc5MDAwMDIwNWUtMDk7IC8qIDB4M0UxNDA4QkMsIDB4RjQ3NDVEOEYgKi8KLQotc3RhdGljIGNvbnN0IGRvdWJsZSB6ZXJvID0gMC4wOwotCi1kb3VibGUKLV9faWVlZTc1NF9qMChkb3VibGUgeCkKLXsKLQlkb3VibGUgeiwgcyxjLHNzLGNjLHIsdSx2OwotCWludDMyX3QgaHgsaXg7Ci0KLQlHRVRfSElHSF9XT1JEKGh4LHgpOwotCWl4ID0gaHgmMHg3ZmZmZmZmZjsKLQlpZihpeD49MHg3ZmYwMDAwMCkgcmV0dXJuIG9uZS8oeCp4KTsKLQl4ID0gZmFicyh4KTsKLQlpZihpeCA+PSAweDQwMDAwMDAwKSB7CS8qIHx4fCA+PSAyLjAgKi8KLQkJcyA9IHNpbih4KTsKLQkJYyA9IGNvcyh4KTsKLQkJc3MgPSBzLWM7Ci0JCWNjID0gcytjOwotCQlpZihpeDwweDdmZTAwMDAwKSB7ICAvKiBtYWtlIHN1cmUgeCt4IG5vdCBvdmVyZmxvdyAqLwotCQkgICAgeiA9IC1jb3MoeCt4KTsKLQkJICAgIGlmICgocypjKTx6ZXJvKSBjYyA9IHovc3M7Ci0JCSAgICBlbHNlIAkgICAgc3MgPSB6L2NjOwotCQl9Ci0JLyoKLQkgKiBqMCh4KSA9IDEvc3FydChwaSkgKiAoUCgwLHgpKmNjIC0gUSgwLHgpKnNzKSAvIHNxcnQoeCkKLQkgKiB5MCh4KSA9IDEvc3FydChwaSkgKiAoUCgwLHgpKnNzICsgUSgwLHgpKmNjKSAvIHNxcnQoeCkKLQkgKi8KLQkJaWYoaXg+MHg0ODAwMDAwMCkgeiA9IChpbnZzcXJ0cGkqY2MpL3NxcnQoeCk7Ci0JCWVsc2UgewotCQkgICAgdSA9IHB6ZXJvKHgpOyB2ID0gcXplcm8oeCk7Ci0JCSAgICB6ID0gaW52c3FydHBpKih1KmNjLXYqc3MpL3NxcnQoeCk7Ci0JCX0KLQkJcmV0dXJuIHo7Ci0JfQotCWlmKGl4PDB4M2YyMDAwMDApIHsJLyogfHh8IDwgMioqLTEzICovCi0JICAgIGlmKGh1Z2UreD5vbmUpIHsJLyogcmFpc2UgaW5leGFjdCBpZiB4ICE9IDAgKi8KLQkgICAgICAgIGlmKGl4PDB4M2U0MDAwMDApIHJldHVybiBvbmU7CS8qIHx4fDwyKiotMjcgKi8KLQkgICAgICAgIGVsc2UgCSAgICAgIHJldHVybiBvbmUgLSAwLjI1KngqeDsKLQkgICAgfQotCX0KLQl6ID0geCp4OwotCXIgPSAgeiooUjAyK3oqKFIwMyt6KihSMDQreipSMDUpKSk7Ci0JcyA9ICBvbmUreiooUzAxK3oqKFMwMit6KihTMDMreipTMDQpKSk7Ci0JaWYoaXggPCAweDNGRjAwMDAwKSB7CS8qIHx4fCA8IDEuMDAgKi8KLQkgICAgcmV0dXJuIG9uZSArIHoqKC0wLjI1KyhyL3MpKTsKLQl9IGVsc2UgewotCSAgICB1ID0gMC41Kng7Ci0JICAgIHJldHVybigob25lK3UpKihvbmUtdSkreiooci9zKSk7Ci0JfQotfQotCi1zdGF0aWMgY29uc3QgZG91YmxlCi11MDAgID0gLTcuMzgwNDI5NTEwODY4NzIzMTc1MjNlLTAyLCAvKiAweEJGQjJFNEQ2LCAweDk5Q0JEMDFGICovCi11MDEgID0gIDEuNzY2NjY0NTI1MDkxODExMTU1MzhlLTAxLCAvKiAweDNGQzY5RDAxLCAweDlERTlFM0ZDICovCi11MDIgID0gLTEuMzgxODU2NzE5NDU1OTY4OTg4OTZlLTAyLCAvKiAweEJGOEM0Q0U4LCAweEIxNkNGQTk3ICovCi11MDMgID0gIDMuNDc0NTM0MzIwOTM2ODM2NTAyMzhlLTA0LCAvKiAweDNGMzZDNTRELCAweDIwQjI5QjZCICovCi11MDQgID0gLTMuODE0MDcwNTM3MjQzNjQxNjExMjVlLTA2LCAvKiAweEJFQ0ZGRUE3LCAweDczRDI1Q0FEICovCi11MDUgID0gIDEuOTU1OTAxMzcwMzUwMjI5MjAyMDZlLTA4LCAvKiAweDNFNTUwMDU3LCAweDNCNEVBQkQ0ICovCi11MDYgID0gLTMuOTgyMDUxOTQxMzIxMDMzOTg0NTNlLTExLCAvKiAweEJEQzVFNDNELCAweDY5M0ZCM0M4ICovCi12MDEgID0gIDEuMjczMDQ4MzQ4MzQxMjM2OTkzMjhlLTAyLCAvKiAweDNGOEExMjcwLCAweDkxQzlDNzFBICovCi12MDIgID0gIDcuNjAwNjg2MjczNTAzNTMyNTM3MDJlLTA1LCAvKiAweDNGMTNFQ0JCLCAweEY1NzhDNkMxICovCi12MDMgID0gIDIuNTkxNTA4NTE4NDA0NTc4MDU0NjdlLTA3LCAvKiAweDNFOTE2NDJELCAweDdGRjIwMkZEICovCi12MDQgID0gIDQuNDExMTAzMTEzMzI2NzU0Njc0MDNlLTEwOyAvKiAweDNERkU1MDE4LCAweDNCRDZEOUVGICovCi0KLWRvdWJsZQotX19pZWVlNzU0X3kwKGRvdWJsZSB4KQotewotCWRvdWJsZSB6LCBzLGMsc3MsY2MsdSx2OwotCWludDMyX3QgaHgsaXgsbHg7Ci0KLQlFWFRSQUNUX1dPUkRTKGh4LGx4LHgpOwotICAgICAgICBpeCA9IDB4N2ZmZmZmZmYmaHg7Ci0gICAgLyogWTAoTmFOKSBpcyBOYU4sIHkwKC1pbmYpIGlzIE5hbiwgeTAoaW5mKSBpcyAwICAqLwotCWlmKGl4Pj0weDdmZjAwMDAwKSByZXR1cm4gIG9uZS8oeCt4KngpOyAKLSAgICAgICAgaWYoKGl4fGx4KT09MCkgcmV0dXJuIC1vbmUvemVybzsKLSAgICAgICAgaWYoaHg8MCkgcmV0dXJuIHplcm8vemVybzsKLSAgICAgICAgaWYoaXggPj0gMHg0MDAwMDAwMCkgeyAgLyogfHh8ID49IDIuMCAqLwotICAgICAgICAvKiB5MCh4KSA9IHNxcnQoMi8ocGkqeCkpKihwMCh4KSpzaW4oeDApK3EwKHgpKmNvcyh4MCkpCi0gICAgICAgICAqIHdoZXJlIHgwID0geC1waS80Ci0gICAgICAgICAqICAgICAgQmV0dGVyIGZvcm11bGE6Ci0gICAgICAgICAqICAgICAgICAgICAgICBjb3MoeDApID0gY29zKHgpY29zKHBpLzQpK3Npbih4KXNpbihwaS80KQotICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICA9ICAxL3NxcnQoMikgKiAoc2luKHgpICsgY29zKHgpKQotICAgICAgICAgKiAgICAgICAgICAgICAgc2luKHgwKSA9IHNpbih4KWNvcygzcGkvNCktY29zKHgpc2luKDNwaS80KQotICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICA9ICAxL3NxcnQoMikgKiAoc2luKHgpIC0gY29zKHgpKQotICAgICAgICAgKiBUbyBhdm9pZCBjYW5jZWxsYXRpb24sIHVzZQotICAgICAgICAgKiAgICAgICAgICAgICAgc2luKHgpICstIGNvcyh4KSA9IC1jb3MoMngpLyhzaW4oeCkgLSsgY29zKHgpKQotICAgICAgICAgKiB0byBjb21wdXRlIHRoZSB3b3JzZSBvbmUuCi0gICAgICAgICAqLwotICAgICAgICAgICAgICAgIHMgPSBzaW4oeCk7Ci0gICAgICAgICAgICAgICAgYyA9IGNvcyh4KTsKLSAgICAgICAgICAgICAgICBzcyA9IHMtYzsKLSAgICAgICAgICAgICAgICBjYyA9IHMrYzsKLQkvKgotCSAqIGowKHgpID0gMS9zcXJ0KHBpKSAqIChQKDAseCkqY2MgLSBRKDAseCkqc3MpIC8gc3FydCh4KQotCSAqIHkwKHgpID0gMS9zcXJ0KHBpKSAqIChQKDAseCkqc3MgKyBRKDAseCkqY2MpIC8gc3FydCh4KQotCSAqLwotICAgICAgICAgICAgICAgIGlmKGl4PDB4N2ZlMDAwMDApIHsgIC8qIG1ha2Ugc3VyZSB4K3ggbm90IG92ZXJmbG93ICovCi0gICAgICAgICAgICAgICAgICAgIHogPSAtY29zKHgreCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICgocypjKTx6ZXJvKSBjYyA9IHovc3M7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgICAgICAgICAgICBzcyA9IHovY2M7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmKGl4PjB4NDgwMDAwMDApIHogPSAoaW52c3FydHBpKnNzKS9zcXJ0KHgpOwotICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICB1ID0gcHplcm8oeCk7IHYgPSBxemVybyh4KTsKLSAgICAgICAgICAgICAgICAgICAgeiA9IGludnNxcnRwaSoodSpzcyt2KmNjKS9zcXJ0KHgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gejsKLQl9Ci0JaWYoaXg8PTB4M2U0MDAwMDApIHsJLyogeCA8IDIqKi0yNyAqLwotCSAgICByZXR1cm4odTAwICsgdHBpKl9faWVlZTc1NF9sb2coeCkpOwotCX0KLQl6ID0geCp4OwotCXUgPSB1MDAreioodTAxK3oqKHUwMit6Kih1MDMreioodTA0K3oqKHUwNSt6KnUwNikpKSkpOwotCXYgPSBvbmUreioodjAxK3oqKHYwMit6Kih2MDMreip2MDQpKSk7Ci0JcmV0dXJuKHUvdiArIHRwaSooX19pZWVlNzU0X2owKHgpKl9faWVlZTc1NF9sb2coeCkpKTsKLX0KLQotLyogVGhlIGFzeW1wdG90aWMgZXhwYW5zaW9ucyBvZiBwemVybyBpcwotICoJMSAtIDkvMTI4IHNeMiArIDExMDI1Lzk4MzA0IHNeNCAtIC4uLiwJd2hlcmUgcyA9IDEveC4KLSAqIEZvciB4ID49IDIsIFdlIGFwcHJveGltYXRlIHB6ZXJvIGJ5Ci0gKiAJcHplcm8oeCkgPSAxICsgKFIvUykKLSAqIHdoZXJlICBSID0gcFIwICsgcFIxKnNeMiArIHBSMipzXjQgKyAuLi4gKyBwUjUqc14xMAotICogCSAgUyA9IDEgKyBwUzAqc14yICsgLi4uICsgcFM0KnNeMTAKLSAqIGFuZAotICoJfCBwemVybyh4KS0xLVIvUyB8IDw9IDIgICoqICggLTYwLjI2KQotICovCi1zdGF0aWMgY29uc3QgZG91YmxlIHBSOFs2XSA9IHsgLyogZm9yIHggaW4gW2luZiwgOF09MS9bMCwwLjEyNV0gKi8KLSAgMC4wMDAwMDAwMDAwMDAwMDAwMDAwMGUrMDAsIC8qIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgKi8KLSAtNy4wMzEyNDk5OTk5OTkwMDM1NzQ4NGUtMDIsIC8qIDB4QkZCMUZGRkYsIDB4RkZGRkZEMzIgKi8KLSAtOC4wODE2NzA0MTI3NTM0OTc5NTYyNmUrMDAsIC8qIDB4QzAyMDI5RDAsIDB4QjQ0RkE3NzkgKi8KLSAtMi41NzA2MzEwNTY3OTcwNDg0NzI2MmUrMDIsIC8qIDB4QzA3MDExMDIsIDB4N0IxOUU4NjMgKi8KLSAtMi40ODUyMTY0MTAwOTQyODgyMjE0NGUrMDMsIC8qIDB4QzBBMzZBNkUsIDB4Q0Q0RENBRkMgKi8KLSAtNS4yNTMwNDM4MDQ5MDcyOTU0NTI3MmUrMDMsIC8qIDB4QzBCNDg1MEIsIDB4MzZDQzY0M0QgKi8KLX07Ci1zdGF0aWMgY29uc3QgZG91YmxlIHBTOFs1XSA9IHsKLSAgMS4xNjUzNDM2NDYxOTY2ODE4MTcxN2UrMDIsIC8qIDB4NDA1RDIyMzMsIDB4MDdBOTY3NTEgKi8KLSAgMy44MzM3NDQ3NTM2NDEyMTgyNjcxNWUrMDMsIC8qIDB4NDBBREYzN0QsIDB4NTA1OTY5MzggKi8KLSAgNC4wNTk3ODU3MjY0ODQ3MjU0NTU1MmUrMDQsIC8qIDB4NDBFM0QyQkIsIDB4NkVCNkIwNUYgKi8KLSAgMS4xNjc1Mjk3MjU2NDM3NTkxNTY4MWUrMDUsIC8qIDB4NDBGQzgxMEYsIDB4OEY5RkE5QkQgKi8KLSAgNC43NjI3NzI4NDE0NjczMDk2MjY3NWUrMDQsIC8qIDB4NDBFNzQxNzcsIDB4NEYyQzQ5REMgKi8KLX07Ci0KLXN0YXRpYyBjb25zdCBkb3VibGUgcFI1WzZdID0geyAvKiBmb3IgeCBpbiBbOCw0LjU0NTRdPTEvWzAuMTI1LDAuMjIwMDFdICovCi0gLTEuMTQxMjU0NjQ2OTE4OTQ1MDI1ODRlLTExLCAvKiAweEJEQTkxOEIxLCAweDQ3RTQ5NUNDICovCi0gLTcuMDMxMjQ5NDA4NzM1OTkyODAwNzhlLTAyLCAvKiAweEJGQjFGRkZGLCAweEU2OUFGQkM2ICovCi0gLTQuMTU5NjEwNjQ0NzA1ODc3ODI0MzhlKzAwLCAvKiAweEMwMTBBMzcwLCAweEY5MEM2QkJGICovCi0gLTYuNzY3NDc2NTIyNjUxNjcyNjEwMjFlKzAxLCAvKiAweEMwNTBFQjJGLCAweDVBN0QxNzgzICovCi0gLTMuMzEyMzEyOTk2NDkxNzI5Njc3NDdlKzAyLCAvKiAweEMwNzRCM0IzLCAweDY3NDJDQzYzICovCi0gLTMuNDY0MzMzODgzNjU2MDQ5MTI0NTFlKzAyLCAvKiAweEMwNzVBNkVGLCAweDI4QTM4QkQ3ICovCi19Owotc3RhdGljIGNvbnN0IGRvdWJsZSBwUzVbNV0gPSB7Ci0gIDYuMDc1MzkzODI2OTIzMDAzMzU5NzVlKzAxLCAvKiAweDQwNEU2MDgxLCAweDBDOThDNURFICovCi0gIDEuMDUxMjUyMzA1OTU3MDQ1NzkxNzNlKzAzLCAvKiAweDQwOTA2RDAyLCAweDVDN0UyODY0ICovCi0gIDUuOTc4OTcwOTQzMzM4NTU3ODQ0OThlKzAzLCAvKiAweDQwQjc1QUY4LCAweDhGQkUxRDYwICovCi0gIDkuNjI1NDQ1MTQzNTc3NzQ0NjAyMjNlKzAzLCAvKiAweDQwQzJDQ0I4LCAweEZBNzZGQTM4ICovCi0gIDIuNDA2MDU4MTU5MjI5MzkxMDk0NDFlKzAzLCAvKiAweDQwQTJDQzFELCAweEM3MEJFODY0ICovCi19OwotCi1zdGF0aWMgY29uc3QgZG91YmxlIHBSM1s2XSA9IHsvKiBmb3IgeCBpbiBbNC41NDcsMi44NTcxXT0xL1swLjIxOTksMC4zNTAwMV0gKi8KLSAtMi41NDcwNDYwMTc3MTk1MTkxNTYyMGUtMDksIC8qIDB4QkUyNUUxMDMsIDB4NkZFMUFBODYgKi8KLSAtNy4wMzExOTYxNjM4MTQ4MTY1NDY1NGUtMDIsIC8qIDB4QkZCMUZGRjYsIDB4RjdDMEUyNEIgKi8KLSAtMi40MDkwMzIyMTU0OTUyOTYxMTQyM2UrMDAsIC8qIDB4QzAwMzQ1QjIsIDB4QUVBNDgwNzQgKi8KLSAtMi4xOTY1OTc3NDczNDg4MzA4NjQ2N2UrMDEsIC8qIDB4QzAzNUY3NEEsIDB4NENCOTRFMTQgKi8KLSAtNS44MDc5MTcwNDcwMTczNzU3MjIzNmUrMDEsIC8qIDB4QzA0RDBBMjIsIDB4NDIwQTFBNDUgKi8KLSAtMy4xNDQ3OTQ3MDU5NDg4ODUwMzg1NGUrMDEsIC8qIDB4QzAzRjcyQUMsIDB4QTg5MkQ4MEYgKi8KLX07Ci1zdGF0aWMgY29uc3QgZG91YmxlIHBTM1s1XSA9IHsKLSAgMy41ODU2MDMzODA1NTIwOTcyNjM0OWUrMDEsIC8qIDB4NDA0MUVEOTIsIDB4ODQwNzdERDMgKi8KLSAgMy42MTUxMzk4MzA1MDMwMzg2MzgyMGUrMDIsIC8qIDB4NDA3Njk4MzksIDB4NDY0QTdDMEUgKi8KLSAgMS4xOTM2MDc4Mzc5MjExMTUzMzMzMGUrMDMsIC8qIDB4NDA5MkE2NkUsIDB4NkQxMDYxRDYgKi8KLSAgMS4xMjc5OTY3OTg1NjkwNzQxNDQzMmUrMDMsIC8qIDB4NDA5MTlGRkMsIDB4QjhDMzlCN0UgKi8KLSAgMS43MzU4MDkzMDgxMzMzNTc1NDY5MmUrMDIsIC8qIDB4NDA2NUIyOTYsIDB4RkMzNzkwODEgKi8KLX07Ci0KLXN0YXRpYyBjb25zdCBkb3VibGUgcFIyWzZdID0gey8qIGZvciB4IGluIFsyLjg1NzAsMl09MS9bMC4zNDk5LDAuNV0gKi8KLSAtOC44NzUzNDMzMzAzMjUyNjQxMTI1NGUtMDgsIC8qIDB4QkU3N0QzMTYsIDB4RTkyNzAyNkQgKi8KLSAtNy4wMzAzMDk5NTQ4MzYyNDc0MzI0N2UtMDIsIC8qIDB4QkZCMUZGNjIsIDB4NDk1RTFFNDIgKi8KLSAtMS40NTA3Mzg0Njc4MDk1Mjk4NjM1N2UrMDAsIC8qIDB4QkZGNzM2MzksIDB4OEEyNEE4NDMgKi8KLSAtNy42MzU2OTYxMzgyMzUyNzc3MDc5MWUrMDAsIC8qIDB4QzAxRThBRjMsIDB4RURBRkE3RjMgKi8KLSAtMS4xMTkzMTY2ODg2MDM1Njc0Nzc4NmUrMDEsIC8qIDB4QzAyNjYyRTYsIDB4QzUyNDYzMDMgKi8KLSAtMy4yMzM2NDU3OTM1MTMzNTMzNTAzM2UrMDAsIC8qIDB4QzAwOURFODEsIDB4QUY4RkU3MEYgKi8KLX07Ci1zdGF0aWMgY29uc3QgZG91YmxlIHBTMls1XSA9IHsKLSAgMi4yMjIwMjk5NzUzMjA4ODgwODQ0MWUrMDEsIC8qIDB4NDAzNjM4NjUsIDB4OTA4QjU5NTkgKi8KLSAgMS4zNjIwNjc5NDIxODIxNTIwODA0OGUrMDIsIC8qIDB4NDA2MTA2OUUsIDB4MEVFODg3OEYgKi8KLSAgMi43MDQ3MDI3ODY1ODA4MzQ4Njc4OWUrMDIsIC8qIDB4NDA3MEU3ODYsIDB4NDJFQTA3OUIgKi8KLSAgMS41Mzg3NTM5NDIwODMyMDMyOTg4MWUrMDIsIC8qIDB4NDA2MzNDMDMsIDB4M0FCNkZBRkYgKi8KLSAgMS40NjU3NjE3Njk0ODI1NjE5MzgxMGUrMDEsIC8qIDB4NDAyRDUwQjMsIDB4NDQzOTE4MDkgKi8KLX07Ci0KLQlzdGF0aWMgZG91YmxlIHB6ZXJvKGRvdWJsZSB4KQotewotCWNvbnN0IGRvdWJsZSAqcCwqcTsKLQlkb3VibGUgeixyLHM7Ci0JaW50MzJfdCBpeDsKLQlHRVRfSElHSF9XT1JEKGl4LHgpOwotCWl4ICY9IDB4N2ZmZmZmZmY7Ci0JaWYoaXg+PTB4NDAyMDAwMDApICAgICB7cCA9IHBSODsgcT0gcFM4O30KLQllbHNlIGlmKGl4Pj0weDQwMTIyRThCKXtwID0gcFI1OyBxPSBwUzU7fQotCWVsc2UgaWYoaXg+PTB4NDAwNkRCNkQpe3AgPSBwUjM7IHE9IHBTMzt9Ci0JZWxzZSBpZihpeD49MHg0MDAwMDAwMCl7cCA9IHBSMjsgcT0gcFMyO30KLQl6ID0gb25lLyh4KngpOwotCXIgPSBwWzBdK3oqKHBbMV0reioocFsyXSt6KihwWzNdK3oqKHBbNF0reipwWzVdKSkpKTsKLQlzID0gb25lK3oqKHFbMF0reioocVsxXSt6KihxWzJdK3oqKHFbM10reipxWzRdKSkpKTsKLQlyZXR1cm4gb25lKyByL3M7Ci19Ci0JCQotCi0vKiBGb3IgeCA+PSA4LCB0aGUgYXN5bXB0b3RpYyBleHBhbnNpb25zIG9mIHF6ZXJvIGlzCi0gKgktMS84IHMgKyA3NS8xMDI0IHNeMyAtIC4uLiwgd2hlcmUgcyA9IDEveC4KLSAqIFdlIGFwcHJveGltYXRlIHB6ZXJvIGJ5Ci0gKiAJcXplcm8oeCkgPSBzKigtMS4yNSArIChSL1MpKQotICogd2hlcmUgIFIgPSBxUjAgKyBxUjEqc14yICsgcVIyKnNeNCArIC4uLiArIHFSNSpzXjEwCi0gKiAJICBTID0gMSArIHFTMCpzXjIgKyAuLi4gKyBxUzUqc14xMgotICogYW5kCi0gKgl8IHF6ZXJvKHgpL3MgKzEuMjUtUi9TIHwgPD0gMiAgKiogKCAtNjEuMjIpCi0gKi8KLXN0YXRpYyBjb25zdCBkb3VibGUgcVI4WzZdID0geyAvKiBmb3IgeCBpbiBbaW5mLCA4XT0xL1swLDAuMTI1XSAqLwotICAwLjAwMDAwMDAwMDAwMDAwMDAwMDAwZSswMCwgLyogMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCAqLwotICA3LjMyNDIxODc0OTk5OTM1MDUxOTUzZS0wMiwgLyogMHgzRkIyQkZGRiwgMHhGRkZGRkUyQyAqLwotICAxLjE3NjgyMDY0NjgyMjUyNjkzODk5ZSswMSwgLyogMHg0MDI3ODk1MiwgMHg1QkIzMzRENiAqLwotICA1LjU3NjczMzgwMjU2NDAxODU2MDU5ZSswMiwgLyogMHg0MDgxNkQ2MywgMHgxNTMwMTgyNSAqLwotICA4Ljg1OTE5NzIwNzU2NDY4NjMyMzE3ZSswMywgLyogMHg0MEMxNEQ5OSwgMHgzRTE4RjQ2RCAqLwotICAzLjcwMTQ2MjY3Nzc2ODg3ODM0NzcxZSswNCwgLyogMHg0MEUyMTJENCwgMHgwRTkwMTU2NiAqLwotfTsKLXN0YXRpYyBjb25zdCBkb3VibGUgcVM4WzZdID0gewotICAxLjYzNzc2MDI2ODk1Njg5ODI0NDE0ZSswMiwgLyogMHg0MDY0NzhENSwgMHgzNjVCMzlCQyAqLwotICA4LjA5ODM0NDk0NjU2NDQ5ODA1OTE2ZSswMywgLyogMHg0MEJGQTI1OCwgMHg0RTZCMDU2MyAqLwotICAxLjQyNTM4MjkxNDE5MTIwNDc2MzQ4ZSswNSwgLyogMHg0MTAxNjY1MiwgMHg1NEQzOEMzRiAqLwotICA4LjAzMzA5MjU3MTE5NTE0Mzk3MzQ1ZSswNSwgLyogMHg0MTI4ODNEQSwgMHg4M0E1MkI0MyAqLwotICA4LjQwNTAxNTc5ODE5MDYwNTEyODE4ZSswNSwgLyogMHg0MTI5QTY2QiwgMHgyOERFMEIzRCAqLwotIC0zLjQzODk5MjkzNTM3ODY2NjE1MjI1ZSswNSwgLyogMHhDMTE0RkQ2RCwgMHgyQzk1MzBDNSAqLwotfTsKLQotc3RhdGljIGNvbnN0IGRvdWJsZSBxUjVbNl0gPSB7IC8qIGZvciB4IGluIFs4LDQuNTQ1NF09MS9bMC4xMjUsMC4yMjAwMV0gKi8KLSAgMS44NDA4NTk2MzU5NDUxNTUzMTM4MWUtMTEsIC8qIDB4M0RCNDNEOEYsIDB4MjlDQzhDRDkgKi8KLSAgNy4zMjQyMTc2NjYxMjY4NDc2NTg5NmUtMDIsIC8qIDB4M0ZCMkJGRkYsIDB4RDE3MkIwNEMgKi8KLSAgNS44MzU2MzUwODk2MjA1Njk1Mzc3N2UrMDAsIC8qIDB4NDAxNzU3QjAsIDB4Qjk5NTNERDMgKi8KLSAgMS4zNTExMTU3NzI4NjQ0OTgyOTY3MWUrMDIsIC8qIDB4NDA2MEUzOTIsIDB4MEE4Nzg4RTkgKi8KLSAgMS4wMjcyNDM3NjU5NjE2NDA5NzQ2NGUrMDMsIC8qIDB4NDA5MDBDRjksIDB4OURDOEM0ODEgKi8KLSAgMS45ODk5Nzc4NTg2NDYwNTM4NDYzMWUrMDMsIC8qIDB4NDA5RjE3RTksIDB4NTNDNkUzQTYgKi8KLX07Ci1zdGF0aWMgY29uc3QgZG91YmxlIHFTNVs2XSA9IHsKLSAgOC4yNzc2NjEwMjIzNjUzNzc2MTg4M2UrMDEsIC8qIDB4NDA1NEIxQjMsIDB4RkI1RTE1NDMgKi8KLSAgMi4wNzc4MTQxNjQyMTM5Mjk4NzEwNGUrMDMsIC8qIDB4NDBBMDNCQTAsIDB4REEyMUMwQ0UgKi8KLSAgMS44ODQ3Mjg4Nzc4NTcxODA4NTA3MGUrMDQsIC8qIDB4NDBEMjY3RDIsIDB4N0I1OTFFNkQgKi8KLSAgNS42NzUxMTEyMjg5NDk0NzMyOTc2OWUrMDQsIC8qIDB4NDBFQkI1RTMsIDB4OTdFMDIzNzIgKi8KLSAgMy41OTc2NzUzODQyNTExNDQ3MTQ2NWUrMDQsIC8qIDB4NDBFMTkxMTgsIDB4MUY3QTU0QTAgKi8KLSAtNS4zNTQzNDI3NTYwMTk0NDc3MzM3MWUrMDMsIC8qIDB4QzBCNEVBNTcsIDB4QkVEQkM2MDkgKi8KLX07Ci0KLXN0YXRpYyBjb25zdCBkb3VibGUgcVIzWzZdID0gey8qIGZvciB4IGluIFs0LjU0NywyLjg1NzFdPTEvWzAuMjE5OSwwLjM1MDAxXSAqLwotICA0LjM3NzQxMDE0MDg5NzM4NjIwOTA2ZS0wOSwgLyogMHgzRTMyQ0QwMywgMHg2QURFQ0I4MiAqLwotICA3LjMyNDExMTgwMDQyOTExNDQ3MTYzZS0wMiwgLyogMHgzRkIyQkZFRSwgMHgwRThEMDg0MiAqLwotICAzLjM0NDIzMTM3NTE2MTcwNzIwOTI5ZSswMCwgLyogMHg0MDBBQzBGQywgMHg2MTE0OUNGNSAqLwotICA0LjI2MjE4NDQwNzQ1NDEyNjUwMDE3ZSswMSwgLyogMHg0MDQ1NEY5OCwgMHg5NjJEQUVERCAqLwotICAxLjcwODA4MDkxMzQwNTY1NTk2MjgzZSswMiwgLyogMHg0MDY1NTlEQiwgMHhFMjVFRkQxRiAqLwotICAxLjY2NzMzOTQ4Njk2NjUxMTY4NTc1ZSswMiwgLyogMHg0MDY0RDc3QywgMHg4MUZBMjFFMCAqLwotfTsKLXN0YXRpYyBjb25zdCBkb3VibGUgcVMzWzZdID0gewotICA0Ljg3NTg4NzI5NzI0NTg3MTgyMDkxZSswMSwgLyogMHg0MDQ4NjEyMiwgMHhCRkUzNDNBNiAqLwotICA3LjA5Njg5MjIxMDU2NjA2MDE1NzM2ZSswMiwgLyogMHg0MDg2MkQ4MywgMHg4NjU0NEVCMyAqLwotICAzLjcwNDE0ODIyNjIwMTExMzYyOTk0ZSswMywgLyogMHg0MEFDRjA0QiwgMHhFNDRERkM2MyAqLwotICA2LjQ2MDQyNTE2NzUyNTY4OTE3NTgyZSswMywgLyogMHg0MEI5M0M2QywgMHhEN0M3NkEyOCAqLwotICAyLjUxNjMzMzY4OTIwMzY4OTU3MzMzZSswMywgLyogMHg0MEEzQThBQSwgMHhEOTRGQjFDMCAqLwotIC0xLjQ5MjQ3NDUxODM2MTU2Mzg2NjYyZSswMiwgLyogMHhDMDYyQTdFQiwgMHgyMDFDRjQwRiAqLwotfTsKLQotc3RhdGljIGNvbnN0IGRvdWJsZSBxUjJbNl0gPSB7LyogZm9yIHggaW4gWzIuODU3MCwyXT0xL1swLjM0OTksMC41XSAqLwotICAxLjUwNDQ0NDQ0ODg2OTgzMjcyMzc5ZS0wNywgLyogMHgzRTg0MzEzQiwgMHg1NEY3NkJEQiAqLwotICA3LjMyMjM0MjY1OTYzMDc5Mjc4MjcyZS0wMiwgLyogMHgzRkIyQkVDNSwgMHgzRTg4M0UzNCAqLwotICAxLjk5ODE5MTc0MDkzODE1OTk4ODE2ZSswMCwgLyogMHgzRkZGRjg5NywgMHhFNzI3Nzc5QyAqLwotICAxLjQ0OTU2MDI5MzQ3ODg1NzM1MzQ4ZSswMSwgLyogMHg0MDJDRkRCRiwgMHhBQUY5NkZFNSAqLwotICAzLjE2NjYyMzE3NTA0NzgxNTQwODMzZSswMSwgLyogMHg0MDNGQUE4RSwgMHgyOUZCREM0QSAqLwotICAxLjYyNTI3MDc1NzEwOTI5MjY3NDE2ZSswMSwgLyogMHg0MDMwNDBCMSwgMHg3MTgxNEJCNCAqLwotfTsKLXN0YXRpYyBjb25zdCBkb3VibGUgcVMyWzZdID0gewotICAzLjAzNjU1ODQ4MzU1MjE5MTg0NDk4ZSswMSwgLyogMHg0MDNFNUQ5NiwgMHhGN0MwN0FFRCAqLwotICAyLjY5MzQ4MTE4NjA4MDQ5ODQ0NjI0ZSswMiwgLyogMHg0MDcwRDU5MSwgMHhFNEQxNEI0MCAqLwotICA4LjQ0NzgzNzU3NTk1MzIwMTM5NDQ0ZSswMiwgLyogMHg0MDhBNjY0NSwgMHgyMkIzQkYyMiAqLwotICA4LjgyOTM1ODQ1MTEyNDg4NTUwNTEyZSswMiwgLyogMHg0MDhCOTc3QywgMHg5QzVDQzIxNCAqLwotICAyLjEyNjY2Mzg4NTExNzk4ODI4NjMxZSswMiwgLyogMHg0MDZBOTU1MywgMHgwRTAwMTM2NSAqLwotIC01LjMxMDk1NDkzODgyNjY2OTQ2OTE3ZSswMCwgLyogMHhDMDE1M0U2QSwgMHhGOEIzMjkzMSAqLwotfTsKLQotCXN0YXRpYyBkb3VibGUgcXplcm8oZG91YmxlIHgpCi17Ci0JY29uc3QgZG91YmxlICpwLCpxOwotCWRvdWJsZSBzLHIsejsKLQlpbnQzMl90IGl4OwotCUdFVF9ISUdIX1dPUkQoaXgseCk7Ci0JaXggJj0gMHg3ZmZmZmZmZjsKLQlpZihpeD49MHg0MDIwMDAwMCkgICAgIHtwID0gcVI4OyBxPSBxUzg7fQotCWVsc2UgaWYoaXg+PTB4NDAxMjJFOEIpe3AgPSBxUjU7IHE9IHFTNTt9Ci0JZWxzZSBpZihpeD49MHg0MDA2REI2RCl7cCA9IHFSMzsgcT0gcVMzO30KLQllbHNlIGlmKGl4Pj0weDQwMDAwMDAwKXtwID0gcVIyOyBxPSBxUzI7fQotCXogPSBvbmUvKHgqeCk7Ci0JciA9IHBbMF0reioocFsxXSt6KihwWzJdK3oqKHBbM10reioocFs0XSt6KnBbNV0pKSkpOwotCXMgPSBvbmUreioocVswXSt6KihxWzFdK3oqKHFbMl0reioocVszXSt6KihxWzRdK3oqcVs1XSkpKSkpOwotCXJldHVybiAoLS4xMjUgKyByL3MpL3g7Ci19CmRpZmYgLS1naXQgYS9saWJtL3NyYy9lX2owZi5jIGIvbGlibS9zcmMvZV9qMGYuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmI1NjZiZi4uMDAwMDAwMAotLS0gYS9saWJtL3NyYy9lX2owZi5jCisrKyAvZGV2L251bGwKQEAgLTEsMzM5ICswLDAgQEAKLS8qIGVfajBmLmMgLS0gZmxvYXQgdmVyc2lvbiBvZiBlX2owLmMuCi0gKiBDb252ZXJzaW9uIHRvIGZsb2F0IGJ5IElhbiBMYW5jZSBUYXlsb3IsIEN5Z251cyBTdXBwb3J0LCBpYW5AY3lnbnVzLmNvbS4KLSAqIEJ1Z3MgaW4gX19pZWVlNzU0X2owZiBhbmQgX19pZWVlNzU0X3kwZiBmaXhlZCBieSBTY290dCBUdXJuZXIgMDEvMTYvMjAxMAotICovCi0KLS8qCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBDb3B5cmlnaHQgKEMpIDE5OTMgYnkgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIERldmVsb3BlZCBhdCBTdW5Qcm8sIGEgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBidXNpbmVzcy4KLSAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKLSAqIHNvZnR3YXJlIGlzIGZyZWVseSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoaXMgbm90aWNlCi0gKiBpcyBwcmVzZXJ2ZWQuCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKi8KLQotI2lmbmRlZiBsaW50Ci1zdGF0aWMgY2hhciByY3NpZFtdID0gIiRGcmVlQlNEOiBzcmMvbGliL21zdW4vc3JjL2VfajBmLmMsdiAxLjcgMjAwMi8wNS8yOCAxODoxNTowMyBhbGZyZWQgRXhwICQiOwotI2VuZGlmCi0KLSNpbmNsdWRlICJtYXRoLmgiCi0jaW5jbHVkZSAibWF0aF9wcml2YXRlLmgiCi0KLXN0YXRpYyBmbG9hdCBwemVyb2YoZmxvYXQpLCBxemVyb2YoZmxvYXQpOwotCi1zdGF0aWMgY29uc3QgZmxvYXQKLWh1Z2UgCT0gMWUzMCwKLW9uZQk9IDEuMCwKLWludnNxcnRwaT0gIDUuNjQxODk2MTI4N2UtMDEsIC8qIDB4M2YxMDZlYmIgKi8KLXRwaSAgICAgID0gIDYuMzY2MTk3NDY2OWUtMDEsIC8qIDB4M2YyMmY5ODMgKi8KLSAJCS8qIFIwL1MwIG9uIFswLCAyLjAwXSAqLwotUjAyICA9ICAxLjU2MjUwMDAwMDBlLTAyLCAvKiAweDNjODAwMDAwICovCi1SMDMgID0gLTEuODk5NzkyOTg3NGUtMDQsIC8qIDB4Yjk0NzM1MmUgKi8KLVIwNCAgPSAgMS44Mjk1NDA0NTE2ZS0wNiwgLyogMHgzNWY1OGU4OCAqLwotUjA1ICA9IC00LjYxODMyNzA1NDFlLTA5LCAvKiAweGIxOWVhZjNjICovCi1TMDEgID0gIDEuNTYxOTEwMjg2NWUtMDIsIC8qIDB4M2M3ZmU3NDQgKi8KLVMwMiAgPSAgMS4xNjkyNjc4NTI3ZS0wNCwgLyogMHgzOGY1MzY5NyAqLwotUzAzICA9ICA1LjEzNTQ2NTI0NDJlLTA3LCAvKiAweDM1MDlkYWE2ICovCi1TMDQgID0gIDEuMTY2MTQwMDczNGUtMDk7IC8qIDB4MzBhMDQ1ZTggKi8KLQotc3RhdGljIGNvbnN0IGZsb2F0IHplcm8gPSAwLjA7Ci0KLWZsb2F0Ci1fX2llZWU3NTRfajBmKGZsb2F0IHgpCi17Ci0JZmxvYXQgeiwgcyxjLHNzLGNjLHIsdSx2OwotCWludDMyX3QgaHgsaXg7Ci0KLQlHRVRfRkxPQVRfV09SRChoeCx4KTsKLQlpeCA9IGh4JjB4N2ZmZmZmZmY7Ci0JaWYoaXg+PTB4N2Y4MDAwMDApIHJldHVybiBvbmUvKHgqeCk7Ci0JeCA9IGZhYnNmKHgpOwotCWlmKGl4ID49IDB4NDAwMDAwMDApIHsJLyogfHh8ID49IDIuMCAqLwotCQlzID0gc2luZih4KTsKLQkJYyA9IGNvc2YoeCk7Ci0JCXNzID0gcy1jOwotCQljYyA9IHMrYzsKLQkJaWYoaXg8MHg3ZjAwMDAwMCkgeyAgLyogbWFrZSBzdXJlIHgreCBub3Qgb3ZlcmZsb3cgKi8KLQkJICAgIHogPSAtY29zZih4K3gpOwotCQkgICAgaWYgKChzKmMpPHplcm8pIGNjID0gei9zczsKLQkJICAgIGVsc2UgCSAgICBzcyA9IHovY2M7Ci0JCX0KLQkvKgotCSAqIGowKHgpID0gMS9zcXJ0KHBpKSAqIChQKDAseCkqY2MgLSBRKDAseCkqc3MpIC8gc3FydCh4KQotCSAqIHkwKHgpID0gMS9zcXJ0KHBpKSAqIChQKDAseCkqc3MgKyBRKDAseCkqY2MpIC8gc3FydCh4KQotCSAqLwotCQlpZigoKHVpbnQzMl90KWh4KT4weDgwMDAwMDAwKSB6ID0gKGludnNxcnRwaSpjYykvc3FydGYoeCk7Ci0JCWVsc2UgewotCQkgICAgdSA9IHB6ZXJvZih4KTsgdiA9IHF6ZXJvZih4KTsKLQkJICAgIHogPSBpbnZzcXJ0cGkqKHUqY2Mtdipzcykvc3FydGYoeCk7Ci0JCX0KLQkJcmV0dXJuIHo7Ci0JfQotCWlmKGl4PDB4MzkwMDAwMDApIHsJLyogfHh8IDwgMioqLTEzICovCi0JICAgIGlmKGh1Z2UreD5vbmUpIHsJLyogcmFpc2UgaW5leGFjdCBpZiB4ICE9IDAgKi8KLQkgICAgICAgIGlmKGl4PDB4MzIwMDAwMDApIHJldHVybiBvbmU7CS8qIHx4fDwyKiotMjcgKi8KLQkgICAgICAgIGVsc2UgCSAgICAgIHJldHVybiBvbmUgLSAoZmxvYXQpMC4yNSp4Kng7Ci0JICAgIH0KLQl9Ci0JeiA9IHgqeDsKLQlyID0gIHoqKFIwMit6KihSMDMreiooUjA0K3oqUjA1KSkpOwotCXMgPSAgb25lK3oqKFMwMSt6KihTMDIreiooUzAzK3oqUzA0KSkpOwotCWlmKGl4IDwgMHgzRjgwMDAwMCkgewkvKiB8eHwgPCAxLjAwICovCi0JICAgIHJldHVybiBvbmUgKyB6KigoZmxvYXQpLTAuMjUrKHIvcykpOwotCX0gZWxzZSB7Ci0JICAgIHUgPSAoZmxvYXQpMC41Kng7Ci0JICAgIHJldHVybigob25lK3UpKihvbmUtdSkreiooci9zKSk7Ci0JfQotfQotCi1zdGF0aWMgY29uc3QgZmxvYXQKLXUwMCAgPSAtNy4zODA0Mjk2NTUzZS0wMiwgLyogMHhiZDk3MjZiNSAqLwotdTAxICA9ICAxLjc2NjY2NDUzNDhlLTAxLCAvKiAweDNlMzRlODBkICovCi11MDIgID0gLTEuMzgxODU2NzYxOWUtMDIsIC8qIDB4YmM2MjY3NDYgKi8KLXUwMyAgPSAgMy40NzQ1MzQzMTQ2ZS0wNCwgLyogMHgzOWI2MmE2OSAqLwotdTA0ICA9IC0zLjgxNDA3MDYyMzhlLTA2LCAvKiAweGI2N2ZmNTNjICovCi11MDUgID0gIDEuOTU1OTAxMzk2NGUtMDgsIC8qIDB4MzJhODAyYmEgKi8KLXUwNiAgPSAtMy45ODIwNTE4NDEwZS0xMSwgLyogMHhhZTJmMjFlYiAqLwotdjAxICA9ICAxLjI3MzA0ODM4OTdlLTAyLCAvKiAweDNjNTA5Mzg1ICovCi12MDIgID0gIDcuNjAwNjg2NTEyOWUtMDUsIC8qIDB4Mzg5ZjY1ZTAgKi8KLXYwMyAgPSAgMi41OTE1MDg1MTg5ZS0wNywgLyogMHgzNDhiMjE2YyAqLwotdjA0ICA9ICA0LjQxMTEwMzE0OTRlLTEwOyAvKiAweDJmZjI4MGMyICovCi0KLWZsb2F0Ci1fX2llZWU3NTRfeTBmKGZsb2F0IHgpCi17Ci0JZmxvYXQgeiwgcyxjLHNzLGNjLHUsdjsKLQlpbnQzMl90IGh4LGl4OwotCi0JR0VUX0ZMT0FUX1dPUkQoaHgseCk7Ci0gICAgICAgIGl4ID0gaHgmMHg3ZmZmZmZmZjsKLSAgICAvKiBZMChOYU4pIGlzIE5hTiwgeTAoLWluZikgaXMgTmFuLCB5MChpbmYpIGlzIDAgICovCi0JaWYoaXg+PTB4N2Y4MDAwMDApIHJldHVybiAgb25lLyh4K3gqeCk7Ci0gICAgICAgIGlmKGl4PT0wKSByZXR1cm4gLW9uZS96ZXJvOwotICAgICAgICBpZihoeDwwKSByZXR1cm4gemVyby96ZXJvOwotICAgICAgICBpZihpeCA+PSAweDQwMDAwMDAwKSB7ICAvKiB8eHwgPj0gMi4wICovCi0gICAgICAgIC8qIHkwKHgpID0gc3FydCgyLyhwaSp4KSkqKHAwKHgpKnNpbih4MCkrcTAoeCkqY29zKHgwKSkKLSAgICAgICAgICogd2hlcmUgeDAgPSB4LXBpLzQKLSAgICAgICAgICogICAgICBCZXR0ZXIgZm9ybXVsYToKLSAgICAgICAgICogICAgICAgICAgICAgIGNvcyh4MCkgPSBjb3MoeCljb3MocGkvNCkrc2luKHgpc2luKHBpLzQpCi0gICAgICAgICAqICAgICAgICAgICAgICAgICAgICAgID0gIDEvc3FydCgyKSAqIChzaW4oeCkgKyBjb3MoeCkpCi0gICAgICAgICAqICAgICAgICAgICAgICBzaW4oeDApID0gc2luKHgpY29zKDNwaS80KS1jb3MoeClzaW4oM3BpLzQpCi0gICAgICAgICAqICAgICAgICAgICAgICAgICAgICAgID0gIDEvc3FydCgyKSAqIChzaW4oeCkgLSBjb3MoeCkpCi0gICAgICAgICAqIFRvIGF2b2lkIGNhbmNlbGxhdGlvbiwgdXNlCi0gICAgICAgICAqICAgICAgICAgICAgICBzaW4oeCkgKy0gY29zKHgpID0gLWNvcygyeCkvKHNpbih4KSAtKyBjb3MoeCkpCi0gICAgICAgICAqIHRvIGNvbXB1dGUgdGhlIHdvcnNlIG9uZS4KLSAgICAgICAgICovCi0gICAgICAgICAgICAgICAgcyA9IHNpbmYoeCk7Ci0gICAgICAgICAgICAgICAgYyA9IGNvc2YoeCk7Ci0gICAgICAgICAgICAgICAgc3MgPSBzLWM7Ci0gICAgICAgICAgICAgICAgY2MgPSBzK2M7Ci0JLyoKLQkgKiBqMCh4KSA9IDEvc3FydChwaSkgKiAoUCgwLHgpKmNjIC0gUSgwLHgpKnNzKSAvIHNxcnQoeCkKLQkgKiB5MCh4KSA9IDEvc3FydChwaSkgKiAoUCgwLHgpKnNzICsgUSgwLHgpKmNjKSAvIHNxcnQoeCkKLQkgKi8KLSAgICAgICAgICAgICAgICBpZihpeDwweDdmMDAwMDAwKSB7ICAvKiBtYWtlIHN1cmUgeCt4IG5vdCBvdmVyZmxvdyAqLwotICAgICAgICAgICAgICAgICAgICB6ID0gLWNvc2YoeCt4KTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKChzKmMpPHplcm8pIGNjID0gei9zczsKLSAgICAgICAgICAgICAgICAgICAgZWxzZSAgICAgICAgICAgIHNzID0gei9jYzsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYoKCh1aW50MzJfdCloeCk+MHg4MDAwMDAwMCkgeiA9IChpbnZzcXJ0cGkqc3MpL3NxcnRmKHgpOwotICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICB1ID0gcHplcm9mKHgpOyB2ID0gcXplcm9mKHgpOwotICAgICAgICAgICAgICAgICAgICB6ID0gaW52c3FydHBpKih1KnNzK3YqY2MpL3NxcnRmKHgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gejsKLQl9Ci0JaWYoaXg8PTB4MzIwMDAwMDApIHsJLyogeCA8IDIqKi0yNyAqLwotCSAgICByZXR1cm4odTAwICsgdHBpKl9faWVlZTc1NF9sb2dmKHgpKTsKLQl9Ci0JeiA9IHgqeDsKLQl1ID0gdTAwK3oqKHUwMSt6Kih1MDIreioodTAzK3oqKHUwNCt6Kih1MDUreip1MDYpKSkpKTsKLQl2ID0gb25lK3oqKHYwMSt6Kih2MDIreioodjAzK3oqdjA0KSkpOwotCXJldHVybih1L3YgKyB0cGkqKF9faWVlZTc1NF9qMGYoeCkqX19pZWVlNzU0X2xvZ2YoeCkpKTsKLX0KLQotLyogVGhlIGFzeW1wdG90aWMgZXhwYW5zaW9ucyBvZiBwemVybyBpcwotICoJMSAtIDkvMTI4IHNeMiArIDExMDI1Lzk4MzA0IHNeNCAtIC4uLiwJd2hlcmUgcyA9IDEveC4KLSAqIEZvciB4ID49IDIsIFdlIGFwcHJveGltYXRlIHB6ZXJvIGJ5Ci0gKiAJcHplcm8oeCkgPSAxICsgKFIvUykKLSAqIHdoZXJlICBSID0gcFIwICsgcFIxKnNeMiArIHBSMipzXjQgKyAuLi4gKyBwUjUqc14xMAotICogCSAgUyA9IDEgKyBwUzAqc14yICsgLi4uICsgcFM0KnNeMTAKLSAqIGFuZAotICoJfCBwemVybyh4KS0xLVIvUyB8IDw9IDIgICoqICggLTYwLjI2KQotICovCi1zdGF0aWMgY29uc3QgZmxvYXQgcFI4WzZdID0geyAvKiBmb3IgeCBpbiBbaW5mLCA4XT0xL1swLDAuMTI1XSAqLwotICAwLjAwMDAwMDAwMDBlKzAwLCAvKiAweDAwMDAwMDAwICovCi0gLTcuMDMxMjUwMDAwMGUtMDIsIC8qIDB4YmQ5MDAwMDAgKi8KLSAtOC4wODE2NzA3NjExZSswMCwgLyogMHhjMTAxNGU4NiAqLwotIC0yLjU3MDYzMTEwMzVlKzAyLCAvKiAweGMzODA4ODE0ICovCi0gLTIuNDg1MjE2MzA4NmUrMDMsIC8qIDB4YzUxYjUzNzYgKi8KLSAtNS4yNTMwNDM5NDUzZSswMywgLyogMHhjNWE0Mjg1YSAqLwotfTsKLXN0YXRpYyBjb25zdCBmbG9hdCBwUzhbNV0gPSB7Ci0gIDEuMTY1MzQzNjI3OWUrMDIsIC8qIDB4NDJlOTExOTggKi8KLSAgMy44MzM3NDQ4NzMwZSswMywgLyogMHg0NTZmOWJlYiAqLwotICA0LjA1OTc4NTU0NjllKzA0LCAvKiAweDQ3MWU5NWRiICovCi0gIDEuMTY3NTI5Njg3NWUrMDUsIC8qIDB4NDdlNDA4N2MgKi8KLSAgNC43NjI3NzI2NTYyZSswNCwgLyogMHg0NzNhMGJiYSAqLwotfTsKLXN0YXRpYyBjb25zdCBmbG9hdCBwUjVbNl0gPSB7IC8qIGZvciB4IGluIFs4LDQuNTQ1NF09MS9bMC4xMjUsMC4yMjAwMV0gKi8KLSAtMS4xNDEyNTQ2MjU1ZS0xMSwgLyogMHhhZDQ4YzU4YSAqLwotIC03LjAzMTI0OTI1NDllLTAyLCAvKiAweGJkOGZmZmZmICovCi0gLTQuMTU5NjEwNzQ4M2UrMDAsIC8qIDB4YzA4NTFiODggKi8KLSAtNi43Njc0NzY2NTQxZSswMSwgLyogMHhjMjg3NTk3YiAqLwotIC0zLjMxMjMxMjkyNzJlKzAyLCAvKiAweGMzYTU5ZDliICovCi0gLTMuNDY0MzMzODAxM2UrMDIsIC8qIDB4YzNhZDM3NzkgKi8KLX07Ci1zdGF0aWMgY29uc3QgZmxvYXQgcFM1WzVdID0gewotICA2LjA3NTM5MzY3NjhlKzAxLCAvKiAweDQyNzMwNDA4ICovCi0gIDEuMDUxMjUyMzE5M2UrMDMsIC8qIDB4NDQ4MzY4MTMgKi8KLSAgNS45Nzg5NzA3MDMxZSswMywgLyogMHg0NWJhZDdjNCAqLwotICA5LjYyNTQ0NTMxMjVlKzAzLCAvKiAweDQ2MTY2NWM4ICovCi0gIDIuNDA2MDU4MTA1NWUrMDMsIC8qIDB4NDUxNjYwZWUgKi8KLX07Ci0KLXN0YXRpYyBjb25zdCBmbG9hdCBwUjNbNl0gPSB7LyogZm9yIHggaW4gWzQuNTQ3LDIuODU3MV09MS9bMC4yMTk5LDAuMzUwMDFdICovCi0gLTIuNTQ3MDQ1OTA3NWUtMDksIC8qIDB4YjEyZjA4MWIgKi8KLSAtNy4wMzExOTYzNTU4ZS0wMiwgLyogMHhiZDhmZmZiOCAqLwotIC0yLjQwOTAzMjEwNjRlKzAwLCAvKiAweGMwMWEyZDk1ICovCi0gLTIuMTk2NTk3NjcxNWUrMDEsIC8qIDB4YzFhZmJhNTIgKi8KLSAtNS44MDc5MTcwMjI3ZSswMSwgLyogMHhjMjY4NTExMiAqLwotIC0zLjE0NDc5NDY1NDhlKzAxLCAvKiAweGMxZmI5NTY1ICovCi19Owotc3RhdGljIGNvbnN0IGZsb2F0IHBTM1s1XSA9IHsKLSAgMy41ODU2MDMzMzI1ZSswMSwgLyogMHg0MjBmNmM5NCAqLwotICAzLjYxNTEzOTc3MDVlKzAyLCAvKiAweDQzYjRjMWNhICovCi0gIDEuMTkzNjA3Nzg4MWUrMDMsIC8qIDB4NDQ5NTMzNzMgKi8KLSAgMS4xMjc5OTY4MjYyZSswMywgLyogMHg0NDhjZmZlNiAqLwotICAxLjczNTgwOTMyNjJlKzAyLCAvKiAweDQzMmQ5NGI4ICovCi19OwotCi1zdGF0aWMgY29uc3QgZmxvYXQgcFIyWzZdID0gey8qIGZvciB4IGluIFsyLjg1NzAsMl09MS9bMC4zNDk5LDAuNV0gKi8KLSAtOC44NzUzNDMxMjcxZS0wOCwgLyogMHhiM2JlOThiNyAqLwotIC03LjAzMDMwOTczNjdlLTAyLCAvKiAweGJkOGZmYjEyICovCi0gLTEuNDUwNzM4NDMwMGUrMDAsIC8qIDB4YmZiOWIxY2MgKi8KLSAtNy42MzU2OTU5MzQzZSswMCwgLyogMHhjMGY0NTc5ZiAqLwotIC0xLjExOTMxNjY3MzNlKzAxLCAvKiAweGMxMzMxNzM2ICovCi0gLTMuMjMzNjQ1Njc3NmUrMDAsIC8qIDB4YzA0ZWY0MGQgKi8KLX07Ci1zdGF0aWMgY29uc3QgZmxvYXQgcFMyWzVdID0gewotICAyLjIyMjAzMDA2NzRlKzAxLCAvKiAweDQxYjFjMzJkICovCi0gIDEuMzYyMDY3ODcxMWUrMDIsIC8qIDB4NDMwODM0ZjAgKi8KLSAgMi43MDQ3MDI3NTg4ZSswMiwgLyogMHg0Mzg3M2MzMiAqLwotICAxLjUzODc1Mzk2NzNlKzAyLCAvKiAweDQzMTllMDFhICovCi0gIDEuNDY1NzYxNzU2OWUrMDEsIC8qIDB4NDE2YTg1OWEgKi8KLX07Ci0KLQlzdGF0aWMgZmxvYXQgcHplcm9mKGZsb2F0IHgpCi17Ci0JY29uc3QgZmxvYXQgKnAsKnE7Ci0JZmxvYXQgeixyLHM7Ci0JaW50MzJfdCBpeDsKLQlHRVRfRkxPQVRfV09SRChpeCx4KTsKLQlpeCAmPSAweDdmZmZmZmZmOwotCWlmKGl4Pj0weDQxMDAwMDAwKSAgICAge3AgPSBwUjg7IHE9IHBTODt9Ci0JZWxzZSBpZihpeD49MHg0MGY3MWM1OCl7cCA9IHBSNTsgcT0gcFM1O30KLQllbHNlIGlmKGl4Pj0weDQwMzZkYjY4KXtwID0gcFIzOyBxPSBwUzM7fQotCWVsc2UgaWYoaXg+PTB4NDAwMDAwMDApe3AgPSBwUjI7IHE9IHBTMjt9Ci0JeiA9IG9uZS8oeCp4KTsKLQlyID0gcFswXSt6KihwWzFdK3oqKHBbMl0reioocFszXSt6KihwWzRdK3oqcFs1XSkpKSk7Ci0JcyA9IG9uZSt6KihxWzBdK3oqKHFbMV0reioocVsyXSt6KihxWzNdK3oqcVs0XSkpKSk7Ci0JcmV0dXJuIG9uZSsgci9zOwotfQotCi0KLS8qIEZvciB4ID49IDgsIHRoZSBhc3ltcHRvdGljIGV4cGFuc2lvbnMgb2YgcXplcm8gaXMKLSAqCS0xLzggcyArIDc1LzEwMjQgc14zIC0gLi4uLCB3aGVyZSBzID0gMS94LgotICogV2UgYXBwcm94aW1hdGUgcHplcm8gYnkKLSAqIAlxemVybyh4KSA9IHMqKC0xLjI1ICsgKFIvUykpCi0gKiB3aGVyZSAgUiA9IHFSMCArIHFSMSpzXjIgKyBxUjIqc140ICsgLi4uICsgcVI1KnNeMTAKLSAqIAkgIFMgPSAxICsgcVMwKnNeMiArIC4uLiArIHFTNSpzXjEyCi0gKiBhbmQKLSAqCXwgcXplcm8oeCkvcyArMS4yNS1SL1MgfCA8PSAyICAqKiAoIC02MS4yMikKLSAqLwotc3RhdGljIGNvbnN0IGZsb2F0IHFSOFs2XSA9IHsgLyogZm9yIHggaW4gW2luZiwgOF09MS9bMCwwLjEyNV0gKi8KLSAgMC4wMDAwMDAwMDAwZSswMCwgLyogMHgwMDAwMDAwMCAqLwotICA3LjMyNDIxODc1MDBlLTAyLCAvKiAweDNkOTYwMDAwICovCi0gIDEuMTc2ODIwNjU5NmUrMDEsIC8qIDB4NDEzYzRhOTMgKi8KLSAgNS41NzY3MzQwMDg4ZSswMiwgLyogMHg0NDBiNmIxOSAqLwotICA4Ljg1OTE5NzI2NTZlKzAzLCAvKiAweDQ2MGE2Y2NhICovCi0gIDMuNzAxNDYyNTAwMGUrMDQsIC8qIDB4NDcxMDk2YTAgKi8KLX07Ci1zdGF0aWMgY29uc3QgZmxvYXQgcVM4WzZdID0gewotICAxLjYzNzc2MDMxNDllKzAyLCAvKiAweDQzMjNjNmFhICovCi0gIDguMDk4MzQ0NzI2NmUrMDMsIC8qIDB4NDVmZDEyYzIgKi8KLSAgMS40MjUzODI5Njg4ZSswNSwgLyogMHg0ODBiMzI5MyAqLwotICA4LjAzMzA5MjUwMDBlKzA1LCAvKiAweDQ5NDQxZWQ0ICovCi0gIDguNDA1MDE1NjI1MGUrMDUsIC8qIDB4NDk0ZDMzNTkgKi8KLSAtMy40Mzg5OTI4MTI1ZSswNSwgLyogMHhjOGE3ZWI2OSAqLwotfTsKLQotc3RhdGljIGNvbnN0IGZsb2F0IHFSNVs2XSA9IHsgLyogZm9yIHggaW4gWzgsNC41NDU0XT0xL1swLjEyNSwwLjIyMDAxXSAqLwotICAxLjg0MDg1OTU4MjhlLTExLCAvKiAweDJkYTFlYzc5ICovCi0gIDcuMzI0MjE4MDA0OWUtMDIsIC8qIDB4M2Q5NWZmZmYgKi8KLSAgNS44MzU2MzUxODUyZSswMCwgLyogMHg0MGJhYmQ4NiAqLwotICAxLjM1MTExNTcyMjdlKzAyLCAvKiAweDQzMDcxYzkwICovCi0gIDEuMDI3MjQzNzc0NGUrMDMsIC8qIDB4NDQ4MDY3Y2QgKi8KLSAgMS45ODk5Nzc5MDUzZSswMywgLyogMHg0NGY4YmY0YiAqLwotfTsKLXN0YXRpYyBjb25zdCBmbG9hdCBxUzVbNl0gPSB7Ci0gIDguMjc3NjYxMTMyOGUrMDEsIC8qIDB4NDJhNThkYTAgKi8KLSAgMi4wNzc4MTQyMDkwZSswMywgLyogMHg0NTAxZGQwNyAqLwotICAxLjg4NDcyODkwNjJlKzA0LCAvKiAweDQ2OTMzZTk0ICovCi0gIDUuNjc1MTExMzI4MWUrMDQsIC8qIDB4NDc1ZGFmMWQgKi8KLSAgMy41OTc2NzUzOTA2ZSswNCwgLyogMHg0NzBjODhjMSAqLwotIC01LjM1NDM0Mjc3MzRlKzAzLCAvKiAweGM1YTc1MmJlICovCi19OwotCi1zdGF0aWMgY29uc3QgZmxvYXQgcVIzWzZdID0gey8qIGZvciB4IGluIFs0LjU0NywyLjg1NzFdPTEvWzAuMjE5OSwwLjM1MDAxXSAqLwotICA0LjM3NzQwOTk5MDBlLTA5LCAvKiAweDMxOTY2ODFiICovCi0gIDcuMzI0MTExNDYxNmUtMDIsIC8qIDB4M2Q5NWZmNzAgKi8KLSAgMy4zNDQyMzEzNjcxZSswMCwgLyogMHg0MDU2MDdlMyAqLwotICA0LjI2MjE4NDUyNDVlKzAxLCAvKiAweDQyMmE3Y2M1ICovCi0gIDEuNzA4MDgwOTAyMWUrMDIsIC8qIDB4NDMyYWNlZGYgKi8KLSAgMS42NjczMzk0Nzc1ZSswMiwgLyogMHg0MzI2YmJlNCAqLwotfTsKLXN0YXRpYyBjb25zdCBmbG9hdCBxUzNbNl0gPSB7Ci0gIDQuODc1ODg3Mjk4NmUrMDEsIC8qIDB4NDI0MzA5MTYgKi8KLSAgNy4wOTY4OTIwODk4ZSswMiwgLyogMHg0NDMxNmMxYyAqLwotICAzLjcwNDE0ODE5MzRlKzAzLCAvKiAweDQ1Njc4MjVmICovCi0gIDYuNDYwNDI1MjkzMGUrMDMsIC8qIDB4NDVjOWUzNjcgKi8KLSAgMi41MTYzMzM3NDAyZSswMywgLyogMHg0NTFkNDU1NyAqLwotIC0xLjQ5MjQ3NDUxNzhlKzAyLCAvKiAweGMzMTUzZjU5ICovCi19OwotCi1zdGF0aWMgY29uc3QgZmxvYXQgcVIyWzZdID0gey8qIGZvciB4IGluIFsyLjg1NzAsMl09MS9bMC4zNDk5LDAuNV0gKi8KLSAgMS41MDQ0NDQ0OTc5ZS0wNywgLyogMHgzNDIxODlkYiAqLwotICA3LjMyMjM0MjY5MzhlLTAyLCAvKiAweDNkOTVmNjJhICovCi0gIDEuOTk4MTkxNzE0M2UrMDAsIC8qIDB4M2ZmZmM0YmYgKi8KLSAgMS40NDk1NjAyNjA4ZSswMSwgLyogMHg0MTY3ZWRmZCAqLwotICAzLjE2NjYyMzExNTVlKzAxLCAvKiAweDQxZmQ1NDcxICovCi0gIDEuNjI1MjcwODQzNWUrMDEsIC8qIDB4NDE4MjA1OGMgKi8KLX07Ci1zdGF0aWMgY29uc3QgZmxvYXQgcVMyWzZdID0gewotICAzLjAzNjU1ODUzMjdlKzAxLCAvKiAweDQxZjJlY2I4ICovCi0gIDIuNjkzNDgxMTQwMWUrMDIsIC8qIDB4NDM4NmFjOGYgKi8KLSAgOC40NDc4Mzc1MjQ0ZSswMiwgLyogMHg0NDUzMzIyOSAqLwotICA4LjgyOTM1ODUyMDVlKzAyLCAvKiAweDQ0NWNiYmU1ICovCi0gIDIuMTI2NjYzODE4NGUrMDIsIC8qIDB4NDM1NGFhOTggKi8KLSAtNS4zMTA5NTUwNDc2ZSswMCwgLyogMHhjMGE5ZjM1OCAqLwotfTsKLQotCXN0YXRpYyBmbG9hdCBxemVyb2YoZmxvYXQgeCkKLXsKLQljb25zdCBmbG9hdCAqcCwqcTsKLQlmbG9hdCBzLHIsejsKLQlpbnQzMl90IGl4OwotCUdFVF9GTE9BVF9XT1JEKGl4LHgpOwotCWl4ICY9IDB4N2ZmZmZmZmY7Ci0JaWYoaXg+PTB4NDEwMDAwMDApICAgICB7cCA9IHFSODsgcT0gcVM4O30KLQllbHNlIGlmKGl4Pj0weDQwZjcxYzU4KXtwID0gcVI1OyBxPSBxUzU7fQotCWVsc2UgaWYoaXg+PTB4NDAzNmRiNjgpe3AgPSBxUjM7IHE9IHFTMzt9Ci0JZWxzZSBpZihpeD49MHg0MDAwMDAwMCl7cCA9IHFSMjsgcT0gcVMyO30KLQl6ID0gb25lLyh4KngpOwotCXIgPSBwWzBdK3oqKHBbMV0reioocFsyXSt6KihwWzNdK3oqKHBbNF0reipwWzVdKSkpKTsKLQlzID0gb25lK3oqKHFbMF0reioocVsxXSt6KihxWzJdK3oqKHFbM10reioocVs0XSt6KnFbNV0pKSkpKTsKLQlyZXR1cm4gKC0oZmxvYXQpLjEyNSArIHIvcykveDsKLX0KZGlmZiAtLWdpdCBhL2xpYm0vc3JjL2VfajEuYyBiL2xpYm0vc3JjL2VfajEuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGRiZjIyMi4uMDAwMDAwMAotLS0gYS9saWJtL3NyYy9lX2oxLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzNzcgKzAsMCBAQAotCi0vKiBAKCMpZV9qMS5jIDEuMyA5NS8wMS8xOCAqLwotLyoKLSAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIENvcHlyaWdodCAoQykgMTk5MyBieSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogRGV2ZWxvcGVkIGF0IFN1blNvZnQsIGEgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBidXNpbmVzcy4KLSAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKLSAqIHNvZnR3YXJlIGlzIGZyZWVseSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoaXMgbm90aWNlIAotICogaXMgcHJlc2VydmVkLgotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICovCi0KLSNpZm5kZWYgbGludAotc3RhdGljIGNoYXIgcmNzaWRbXSA9ICIkRnJlZUJTRDogc3JjL2xpYi9tc3VuL3NyYy9lX2oxLmMsdiAxLjggMjAwNS8wMi8wNCAxODoyNjowNiBkYXMgRXhwICQiOwotI2VuZGlmCi0KLS8qIF9faWVlZTc1NF9qMSh4KSwgX19pZWVlNzU0X3kxKHgpCi0gKiBCZXNzZWwgZnVuY3Rpb24gb2YgdGhlIGZpcnN0IGFuZCBzZWNvbmQga2luZHMgb2Ygb3JkZXIgemVyby4KLSAqIE1ldGhvZCAtLSBqMSh4KToKLSAqCTEuIEZvciB0aW55IHgsIHdlIHVzZSBqMSh4KSA9IHgvMiAtIHheMy8xNiArIHheNS8zODQgLSAuLi4KLSAqCTIuIFJlZHVjZSB4IHRvIHx4fCBzaW5jZSBqMSh4KT0tajEoLXgpLCAgYW5kCi0gKgkgICBmb3IgeCBpbiAoMCwyKQotICoJCWoxKHgpID0geC8yICsgeCp6KlIwL1MwLCAgd2hlcmUgeiA9IHgqeDsKLSAqCSAgIChwcmVjaXNpb246ICB8ajEveCAtIDEvMiAtIFIwL1MwIHw8MioqLTYxLjUxICkKLSAqCSAgIGZvciB4IGluICgyLGluZikKLSAqIAkJajEoeCkgPSBzcXJ0KDIvKHBpKngpKSoocDEoeCkqY29zKHgxKS1xMSh4KSpzaW4oeDEpKQotICogCQl5MSh4KSA9IHNxcnQoMi8ocGkqeCkpKihwMSh4KSpzaW4oeDEpK3ExKHgpKmNvcyh4MSkpCi0gKiAJICAgd2hlcmUgeDEgPSB4LTMqcGkvNC4gSXQgaXMgYmV0dGVyIHRvIGNvbXB1dGUgc2luKHgxKSxjb3MoeDEpCi0gKgkgICBhcyBmb2xsb3c6Ci0gKgkJY29zKHgxKSA9ICBjb3MoeCljb3MoM3BpLzQpK3Npbih4KXNpbigzcGkvNCkKLSAqCQkJPSAgMS9zcXJ0KDIpICogKHNpbih4KSAtIGNvcyh4KSkKLSAqCQlzaW4oeDEpID0gIHNpbih4KWNvcygzcGkvNCktY29zKHgpc2luKDNwaS80KQotICoJCQk9IC0xL3NxcnQoMikgKiAoc2luKHgpICsgY29zKHgpKQotICogCSAgIChUbyBhdm9pZCBjYW5jZWxsYXRpb24sIHVzZQotICoJCXNpbih4KSArLSBjb3MoeCkgPSAtY29zKDJ4KS8oc2luKHgpIC0rIGNvcyh4KSkKLSAqIAkgICAgdG8gY29tcHV0ZSB0aGUgd29yc2Ugb25lLikKLSAqCSAgIAotICoJMyBTcGVjaWFsIGNhc2VzCi0gKgkJajEobmFuKT0gbmFuCi0gKgkJajEoMCkgPSAwCi0gKgkJajEoaW5mKSA9IDAKLSAqCQkKLSAqIE1ldGhvZCAtLSB5MSh4KToKLSAqCTEuIHNjcmVlbiBvdXQgeDw9MCBjYXNlczogeTEoMCk9LWluZiwgeTEoeDwwKT1OYU4gCi0gKgkyLiBGb3IgeDwyLgotICoJICAgU2luY2UgCi0gKgkJeTEoeCkgPSAyL3BpKihqMSh4KSoobG4oeC8yKStFdWxlciktMS94LXgvMis1LzY0KnheMy0uLi4pCi0gKgkgICB0aGVyZWZvcmUgeTEoeCktMi9waSpqMSh4KSpsbih4KS0xL3ggaXMgYW4gb2RkIGZ1bmN0aW9uLgotICoJICAgV2UgdXNlIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb24gdG8gYXBwcm94aW1hdGUgeTEsCi0gKgkJeTEoeCkgPSB4KlUoeikvVih6KSArICgyL3BpKSooajEoeCkqbG4oeCktMS94KSwgej0geF4yCi0gKgkgICB3aGVyZSBmb3IgeCBpbiBbMCwyXSAoYWJzIGVyciBsZXNzIHRoYW4gMioqLTY1Ljg5KQotICoJCVUoeikgPSBVMFswXSArIFUwWzFdKnogKyAuLi4gKyBVMFs0XSp6XjQKLSAqCQlWKHopID0gMSAgKyB2MFswXSp6ICsgLi4uICsgdjBbNF0qel41Ci0gKgkgICBOb3RlOiBGb3IgdGlueSB4LCAxL3ggZG9taW5hdGUgeTEgYW5kIGhlbmNlCi0gKgkJeTEodGlueSkgPSAtMi9waS90aW55LCAoY2hvb3NlIHRpbnk8MioqLTU0KQotICoJMy4gRm9yIHg+PTIuCi0gKiAJCXkxKHgpID0gc3FydCgyLyhwaSp4KSkqKHAxKHgpKnNpbih4MSkrcTEoeCkqY29zKHgxKSkKLSAqIAkgICB3aGVyZSB4MSA9IHgtMypwaS80LiBJdCBpcyBiZXR0ZXIgdG8gY29tcHV0ZSBzaW4oeDEpLGNvcyh4MSkKLSAqCSAgIGJ5IG1ldGhvZCBtZW50aW9uZWQgYWJvdmUuCi0gKi8KLQotI2luY2x1ZGUgIm1hdGguaCIKLSNpbmNsdWRlICJtYXRoX3ByaXZhdGUuaCIKLQotc3RhdGljIGRvdWJsZSBwb25lKGRvdWJsZSksIHFvbmUoZG91YmxlKTsKLQotc3RhdGljIGNvbnN0IGRvdWJsZQotaHVnZSAgICA9IDFlMzAwLAotb25lCT0gMS4wLAotaW52c3FydHBpPSAgNS42NDE4OTU4MzU0Nzc1NjI3OTI4MGUtMDEsIC8qIDB4M0ZFMjBERDcsIDB4NTA0MjlCNkQgKi8KLXRwaSAgICAgID0gIDYuMzY2MTk3NzIzNjc1ODEzODI0MzNlLTAxLCAvKiAweDNGRTQ1RjMwLCAweDZEQzlDODgzICovCi0JLyogUjAvUzAgb24gWzAsMl0gKi8KLXIwMCAgPSAtNi4yNTAwMDAwMDAwMDAwMDAwMDAwMGUtMDIsIC8qIDB4QkZCMDAwMDAsIDB4MDAwMDAwMDAgKi8KLXIwMSAgPSAgMS40MDcwNTY2Njk1NTE4OTcwNjA0OGUtMDMsIC8qIDB4M0Y1NzBEOUYsIDB4OTg0NzJDNjEgKi8KLXIwMiAgPSAtMS41OTk1NTYzMTA4NDAzNTU5NzUyMGUtMDUsIC8qIDB4QkVGMEM1QzYsIDB4QkExNjk2NjggKi8KLXIwMyAgPSAgNC45NjcyNzk5OTYwOTU4NDQ0ODQxMmUtMDgsIC8qIDB4M0U2QUFBRkEsIDB4NDZDQTBCRDkgKi8KLXMwMSAgPSAgMS45MTUzNzU5OTUzODM2MzQ2MDgwNWUtMDIsIC8qIDB4M0Y5MzlEMEIsIDB4MTI2MzdFNTMgKi8KLXMwMiAgPSAgMS44NTk0Njc4NTU4ODYzMDkxNTU2MGUtMDQsIC8qIDB4M0YyODVGNTYsIDB4QjlDREY2NjQgKi8KLXMwMyAgPSAgMS4xNzcxODQ2NDA0MjYyMzY4MzI2M2UtMDYsIC8qIDB4M0VCM0JGRjgsIDB4MzMzRjg0OTggKi8KLXMwNCAgPSAgNS4wNDYzNjI1NzA3NjIxNzA0MjcxNWUtMDksIC8qIDB4M0UzNUFDODgsIDB4Qzk3REZGMkMgKi8KLXMwNSAgPSAgMS4yMzU0MjI3NDQyNjEzNzkxMzkwOGUtMTE7IC8qIDB4M0RBQjJBQ0YsIDB4Q0ZCOTdFRDggKi8KLQotc3RhdGljIGNvbnN0IGRvdWJsZSB6ZXJvICAgID0gMC4wOwotCi1kb3VibGUKLV9faWVlZTc1NF9qMShkb3VibGUgeCkKLXsKLQlkb3VibGUgeiwgcyxjLHNzLGNjLHIsdSx2LHk7Ci0JaW50MzJfdCBoeCxpeDsKLQotCUdFVF9ISUdIX1dPUkQoaHgseCk7Ci0JaXggPSBoeCYweDdmZmZmZmZmOwotCWlmKGl4Pj0weDdmZjAwMDAwKSByZXR1cm4gb25lL3g7Ci0JeSA9IGZhYnMoeCk7Ci0JaWYoaXggPj0gMHg0MDAwMDAwMCkgewkvKiB8eHwgPj0gMi4wICovCi0JCXMgPSBzaW4oeSk7Ci0JCWMgPSBjb3MoeSk7Ci0JCXNzID0gLXMtYzsKLQkJY2MgPSBzLWM7Ci0JCWlmKGl4PDB4N2ZlMDAwMDApIHsgIC8qIG1ha2Ugc3VyZSB5K3kgbm90IG92ZXJmbG93ICovCi0JCSAgICB6ID0gY29zKHkreSk7Ci0JCSAgICBpZiAoKHMqYyk+emVybykgY2MgPSB6L3NzOwotCQkgICAgZWxzZSAJICAgIHNzID0gei9jYzsKLQkJfQotCS8qCi0JICogajEoeCkgPSAxL3NxcnQocGkpICogKFAoMSx4KSpjYyAtIFEoMSx4KSpzcykgLyBzcXJ0KHgpCi0JICogeTEoeCkgPSAxL3NxcnQocGkpICogKFAoMSx4KSpzcyArIFEoMSx4KSpjYykgLyBzcXJ0KHgpCi0JICovCi0JCWlmKGl4PjB4NDgwMDAwMDApIHogPSAoaW52c3FydHBpKmNjKS9zcXJ0KHkpOwotCQllbHNlIHsKLQkJICAgIHUgPSBwb25lKHkpOyB2ID0gcW9uZSh5KTsKLQkJICAgIHogPSBpbnZzcXJ0cGkqKHUqY2Mtdipzcykvc3FydCh5KTsKLQkJfQotCQlpZihoeDwwKSByZXR1cm4gLXo7Ci0JCWVsc2UgIAkgcmV0dXJuICB6OwotCX0KLQlpZihpeDwweDNlNDAwMDAwKSB7CS8qIHx4fDwyKiotMjcgKi8KLQkgICAgaWYoaHVnZSt4Pm9uZSkgcmV0dXJuIDAuNSp4Oy8qIGluZXhhY3QgaWYgeCE9MCBuZWNlc3NhcnkgKi8KLQl9Ci0JeiA9IHgqeDsKLQlyID0gIHoqKHIwMCt6KihyMDEreioocjAyK3oqcjAzKSkpOwotCXMgPSAgb25lK3oqKHMwMSt6KihzMDIreiooczAzK3oqKHMwNCt6KnMwNSkpKSk7Ci0JciAqPSB4OwotCXJldHVybih4KjAuNStyL3MpOwotfQotCi1zdGF0aWMgY29uc3QgZG91YmxlIFUwWzVdID0gewotIC0xLjk2MDU3MDkwNjQ2MjM4OTQwNjY4ZS0wMSwgLyogMHhCRkM5MTg2NiwgMHgxNDNDQkM4QSAqLwotICA1LjA0NDM4NzE2NjM5ODExMjgyNjE2ZS0wMiwgLyogMHgzRkE5RDNDNywgMHg3NjI5MkNEMSAqLwotIC0xLjkxMjU2ODk1ODc1NzYzNTQ3Mjk4ZS0wMywgLyogMHhCRjVGNTVFNSwgMHg0ODQ0RjUwRiAqLwotICAyLjM1MjUyNjAwNTYxNjEwNDk1OTI4ZS0wNSwgLyogMHgzRUY4QUIwMywgMHg4RkE2Qjg4RSAqLwotIC05LjE5MDk5MTU4MDM5ODc4ODc0NTA0ZS0wOCwgLyogMHhCRTc4QUMwMCwgMHg1NjkxMDVCOCAqLwotfTsKLXN0YXRpYyBjb25zdCBkb3VibGUgVjBbNV0gPSB7Ci0gIDEuOTkxNjczMTgyMzY2NDk5MDM5NzNlLTAyLCAvKiAweDNGOTQ2NTBELCAweDNGNERBOUYwICovCi0gIDIuMDI1NTI1ODEwMjUxMzUxNzE0OTZlLTA0LCAvKiAweDNGMkE4Qzg5LCAweDZDMjU3NzY0ICovCi0gIDEuMzU2MDg4MDEwOTc1MTYyMjk0MDRlLTA2LCAvKiAweDNFQjZDMDVBLCAweDg5NEU4Q0E2ICovCi0gIDYuMjI3NDE0NTIzNjQ2MjE1MDEyOTVlLTA5LCAvKiAweDNFM0FCRjFELCAweDVCQTY5QTg2ICovCi0gIDEuNjY1NTkyNDYyMDc5OTIwNzkxMTRlLTExLCAvKiAweDNEQjI1MDM5LCAweERBQ0E3NzJBICovCi19OwotCi1kb3VibGUKLV9faWVlZTc1NF95MShkb3VibGUgeCkKLXsKLQlkb3VibGUgeiwgcyxjLHNzLGNjLHUsdjsKLQlpbnQzMl90IGh4LGl4LGx4OwotCi0JRVhUUkFDVF9XT1JEUyhoeCxseCx4KTsKLSAgICAgICAgaXggPSAweDdmZmZmZmZmJmh4OwotICAgIC8qIGlmIFkxKE5hTikgaXMgTmFOLCBZMSgtaW5mKSBpcyBOYU4sIFkxKGluZikgaXMgMCAqLwotCWlmKGl4Pj0weDdmZjAwMDAwKSByZXR1cm4gIG9uZS8oeCt4KngpOyAKLSAgICAgICAgaWYoKGl4fGx4KT09MCkgcmV0dXJuIC1vbmUvemVybzsKLSAgICAgICAgaWYoaHg8MCkgcmV0dXJuIHplcm8vemVybzsKLSAgICAgICAgaWYoaXggPj0gMHg0MDAwMDAwMCkgeyAgLyogfHh8ID49IDIuMCAqLwotICAgICAgICAgICAgICAgIHMgPSBzaW4oeCk7Ci0gICAgICAgICAgICAgICAgYyA9IGNvcyh4KTsKLSAgICAgICAgICAgICAgICBzcyA9IC1zLWM7Ci0gICAgICAgICAgICAgICAgY2MgPSBzLWM7Ci0gICAgICAgICAgICAgICAgaWYoaXg8MHg3ZmUwMDAwMCkgeyAgLyogbWFrZSBzdXJlIHgreCBub3Qgb3ZlcmZsb3cgKi8KLSAgICAgICAgICAgICAgICAgICAgeiA9IGNvcyh4K3gpOwotICAgICAgICAgICAgICAgICAgICBpZiAoKHMqYyk+emVybykgY2MgPSB6L3NzOwotICAgICAgICAgICAgICAgICAgICBlbHNlICAgICAgICAgICAgc3MgPSB6L2NjOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgLyogeTEoeCkgPSBzcXJ0KDIvKHBpKngpKSoocDEoeCkqc2luKHgwKStxMSh4KSpjb3MoeDApKQotICAgICAgICAgKiB3aGVyZSB4MCA9IHgtM3BpLzQKLSAgICAgICAgICogICAgICBCZXR0ZXIgZm9ybXVsYToKLSAgICAgICAgICogICAgICAgICAgICAgIGNvcyh4MCkgPSBjb3MoeCljb3MoM3BpLzQpK3Npbih4KXNpbigzcGkvNCkKLSAgICAgICAgICogICAgICAgICAgICAgICAgICAgICAgPSAgMS9zcXJ0KDIpICogKHNpbih4KSAtIGNvcyh4KSkKLSAgICAgICAgICogICAgICAgICAgICAgIHNpbih4MCkgPSBzaW4oeCljb3MoM3BpLzQpLWNvcyh4KXNpbigzcGkvNCkKLSAgICAgICAgICogICAgICAgICAgICAgICAgICAgICAgPSAtMS9zcXJ0KDIpICogKGNvcyh4KSArIHNpbih4KSkKLSAgICAgICAgICogVG8gYXZvaWQgY2FuY2VsbGF0aW9uLCB1c2UKLSAgICAgICAgICogICAgICAgICAgICAgIHNpbih4KSArLSBjb3MoeCkgPSAtY29zKDJ4KS8oc2luKHgpIC0rIGNvcyh4KSkKLSAgICAgICAgICogdG8gY29tcHV0ZSB0aGUgd29yc2Ugb25lLgotICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICBpZihpeD4weDQ4MDAwMDAwKSB6ID0gKGludnNxcnRwaSpzcykvc3FydCh4KTsKLSAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgdSA9IHBvbmUoeCk7IHYgPSBxb25lKHgpOwotICAgICAgICAgICAgICAgICAgICB6ID0gaW52c3FydHBpKih1KnNzK3YqY2MpL3NxcnQoeCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVybiB6OwotICAgICAgICB9IAotICAgICAgICBpZihpeDw9MHgzYzkwMDAwMCkgeyAgICAvKiB4IDwgMioqLTU0ICovCi0gICAgICAgICAgICByZXR1cm4oLXRwaS94KTsKLSAgICAgICAgfSAKLSAgICAgICAgeiA9IHgqeDsKLSAgICAgICAgdSA9IFUwWzBdK3oqKFUwWzFdK3oqKFUwWzJdK3oqKFUwWzNdK3oqVTBbNF0pKSk7Ci0gICAgICAgIHYgPSBvbmUreiooVjBbMF0reiooVjBbMV0reiooVjBbMl0reiooVjBbM10reipWMFs0XSkpKSk7Ci0gICAgICAgIHJldHVybih4Kih1L3YpICsgdHBpKihfX2llZWU3NTRfajEoeCkqX19pZWVlNzU0X2xvZyh4KS1vbmUveCkpOwotfQotCi0vKiBGb3IgeCA+PSA4LCB0aGUgYXN5bXB0b3RpYyBleHBhbnNpb25zIG9mIHBvbmUgaXMKLSAqCTEgKyAxNS8xMjggc14yIC0gNDcyNS8yXjE1IHNeNCAtIC4uLiwJd2hlcmUgcyA9IDEveC4KLSAqIFdlIGFwcHJveGltYXRlIHBvbmUgYnkKLSAqIAlwb25lKHgpID0gMSArIChSL1MpCi0gKiB3aGVyZSAgUiA9IHByMCArIHByMSpzXjIgKyBwcjIqc140ICsgLi4uICsgcHI1KnNeMTAKLSAqIAkgIFMgPSAxICsgcHMwKnNeMiArIC4uLiArIHBzNCpzXjEwCi0gKiBhbmQKLSAqCXwgcG9uZSh4KS0xLVIvUyB8IDw9IDIgICoqICggLTYwLjA2KQotICovCi0KLXN0YXRpYyBjb25zdCBkb3VibGUgcHI4WzZdID0geyAvKiBmb3IgeCBpbiBbaW5mLCA4XT0xL1swLDAuMTI1XSAqLwotICAwLjAwMDAwMDAwMDAwMDAwMDAwMDAwZSswMCwgLyogMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCAqLwotICAxLjE3MTg3NDk5OTk5OTg4NjQ3OTcwZS0wMSwgLyogMHgzRkJERkZGRiwgMHhGRkZGRkNDRSAqLwotICAxLjMyMzk0ODA2NTkzMDczNTc1MTI5ZSswMSwgLyogMHg0MDJBN0E5RCwgMHgzNTdGN0ZDRSAqLwotICA0LjEyMDUxODU0MzA3Mzc4NTYyMjI1ZSswMiwgLyogMHg0MDc5QzBENCwgMHg2NTJFQTU5MCAqLwotICAzLjg3NDc0NTM4OTEzOTYwNTMyMjI3ZSswMywgLyogMHg0MEFFNDU3RCwgMHhBM0E1MzJDQyAqLwotICA3LjkxNDQ3OTU0MDMxODkxNzMxNTc0ZSswMywgLyogMHg0MEJFRUE3QSwgMHhDMzI3ODJERCAqLwotfTsKLXN0YXRpYyBjb25zdCBkb3VibGUgcHM4WzVdID0gewotICAxLjE0MjA3MzcwMzc1Njc4NDA4NDM2ZSswMiwgLyogMHg0MDVDOEQ0NSwgMHg4RTY1NkNBQyAqLwotICAzLjY1MDkzMDgzNDIwODUzNDYzMzk0ZSswMywgLyogMHg0MEFDODVEQywgMHg5NjREMjc0RiAqLwotICAzLjY5NTYyMDYwMjY5MDMzNDYzNTU1ZSswNCwgLyogMHg0MEUyMEI4NiwgMHg5N0M1QkI3RiAqLwotICA5Ljc2MDI3OTM1OTM0OTUwODAxMzExZSswNCwgLyogMHg0MEY3RDQyQywgMHhCMjhGMTdCQiAqLwotICAzLjA4MDQyNzIwNjI3ODg4ODExNTc4ZSswNCwgLyogMHg0MERFMTUxMSwgMHg2OTdBMEIyRCAqLwotfTsKLQotc3RhdGljIGNvbnN0IGRvdWJsZSBwcjVbNl0gPSB7IC8qIGZvciB4IGluIFs4LDQuNTQ1NF09MS9bMC4xMjUsMC4yMjAwMV0gKi8KLSAgMS4zMTk5MDUxOTU1NjI0MzUyMjc0OWUtMTEsIC8qIDB4M0RBRDA2NjcsIDB4REFFMUNBN0QgKi8KLSAgMS4xNzE4NzQ5MzE5MDYxNDA5NzYzOGUtMDEsIC8qIDB4M0ZCREZGRkYsIDB4RTJDMTAwNDMgKi8KLSAgNi44MDI3NTEyNzg2ODQzMjg3MTczNmUrMDAsIC8qIDB4NDAxQjM2MDQsIDB4NkU2MzE1RTMgKi8KLSAgMS4wODMwODE4Mjk5MDE4OTEwOTc3M2UrMDIsIC8qIDB4NDA1QjEzQjksIDB4NDUyNjAyRUQgKi8KLSAgNS4xNzYzNjEzOTUzMzE5OTc1MjgwNWUrMDIsIC8qIDB4NDA4MDJEMTYsIDB4RDA1MkQ2NDkgKi8KLSAgNS4yODcxNTIwMTM2MzMzNzU0MTgwN2UrMDIsIC8qIDB4NDA4MDg1QjgsIDB4QkI3RTBDQjcgKi8KLX07Ci1zdGF0aWMgY29uc3QgZG91YmxlIHBzNVs1XSA9IHsKLSAgNS45MjgwNTk4NzIyMTEzMTMzMTkyMWUrMDEsIC8qIDB4NDA0REEzRUEsIDB4QThBRjYzM0QgKi8KLSAgOS45MTQwMTQxODczMzYxNDM3Nzc0M2UrMDIsIC8qIDB4NDA4RUZCMzYsIDB4MUIwNjY3MDEgKi8KLSAgNS4zNTMyNjY5NTI5MTQ4Nzk3NjY0N2UrMDMsIC8qIDB4NDBCNEU5NDQsIDB4NTcwNkI2RkIgKi8KLSAgNy44NDQ2OTAzMTc0OTU1MTIzMTc2OWUrMDMsIC8qIDB4NDBCRUE0QjAsIDB4QjhBNUJCMTUgKi8KLSAgMS41MDQwNDY4ODgxMDM2MTA2MjY3OWUrMDMsIC8qIDB4NDA5NzgwMzAsIDB4MDM2RjVFNTEgKi8KLX07Ci0KLXN0YXRpYyBjb25zdCBkb3VibGUgcHIzWzZdID0gewotICAzLjAyNTAzOTE2MTM3MzczNjE4MDI0ZS0wOSwgLyogMHgzRTI5RkMyMSwgMHhBN0FEOUVERCAqLwotICAxLjE3MTg2ODY1NTY3MjUzNTkyNDkxZS0wMSwgLyogMHgzRkJERkZGNSwgMHg1QjIxRDE3QiAqLwotICAzLjkzMjk3NzUwMDMzMzE1NjQwNjUwZSswMCwgLyogMHg0MDBGNzZCQywgMHhFODVFQUQ4QSAqLwotICAzLjUxMTk0MDM1NTkxNjM2OTMyNzM2ZSswMSwgLyogMHg0MDQxOEY0OCwgMHg5REE2RDEyOSAqLwotICA5LjEwNTUwMTEwNzUwNzgxMjcxOTE4ZSswMSwgLyogMHg0MDU2QzM4NSwgMHg0RDJDMTgzNyAqLwotICA0Ljg1NTkwNjg1MTk3MzY0OTE5NjQ1ZSswMSwgLyogMHg0MDQ4NDc4RiwgMHg4RUE4M0VFNSAqLwotfTsKLXN0YXRpYyBjb25zdCBkb3VibGUgcHMzWzVdID0gewotICAzLjQ3OTEzMDk1MDAxMjUxNTE5OTg5ZSswMSwgLyogMHg0MDQxNjU0OSwgMHhBMTM0MDY5QyAqLwotICAzLjM2NzYyNDU4NzQ3ODI1NzQ2NzQxZSswMiwgLyogMHg0MDc1MEMzMywgMHgwN0YxQTc1RiAqLwotICAxLjA0Njg3MTM5OTc1Nzc1MTMwNTUxZSswMywgLyogMHg0MDkwNUI3QywgMHg1MDM3RDUyMyAqLwotICA4LjkwODExMzQ2Mzk4MjU2NDMyNjIyZSswMiwgLyogMHg0MDhCRDY3RCwgMHhBMzJFMzFFOSAqLwotICAxLjAzNzg3OTMyNDM5NjM5Mjc3NTA0ZSswMiwgLyogMHg0MDU5RjI2RCwgMHg3QzJFRUQ1MyAqLwotfTsKLQotc3RhdGljIGNvbnN0IGRvdWJsZSBwcjJbNl0gPSB7LyogZm9yIHggaW4gWzIuODU3MCwyXT0xL1swLjM0OTksMC41XSAqLwotICAxLjA3NzEwODMwMTA2ODczNzQzMDgyZS0wNywgLyogMHgzRTdDRTlENCwgMHhGNjU1NDRGNCAqLwotICAxLjE3MTc2MjE5NDYyNjgzMzQ4MDk0ZS0wMSwgLyogMHgzRkJERkY0MiwgMHhCRTc2MEQ4MyAqLwotICAyLjM2ODUxNDk2NjY3NjA4Nzg1MTc0ZSswMCwgLyogMHg0MDAyRjJCNywgMHhGOThGQUVDMCAqLwotICAxLjIyNDI2MTA5MTQ4MjYxMjMyOTE3ZSswMSwgLyogMHg0MDI4N0MzNywgMHg3RjcxQTk2NCAqLwotICAxLjc2OTM5NzExMjcxNjg3NzI3MzkwZSswMSwgLyogMHg0MDMxQjFBOCwgMHgxNzdGOEVFMiAqLwotICA1LjA3MzUyMzEyNTg4ODE4NDk5MjUwZSswMCwgLyogMHg0MDE0NEI0OSwgMHhBNTc0QzFGRSAqLwotfTsKLXN0YXRpYyBjb25zdCBkb3VibGUgcHMyWzVdID0gewotICAyLjE0MzY0ODU5MzYzODIxNDA5NDg4ZSswMSwgLyogMHg0MDM1NkZCRCwgMHg4QUQ1RUNEQyAqLwotICAxLjI1MjkwMjI3MTY4NDAyNzUxMDkwZSswMiwgLyogMHg0MDVGNTI5MywgMHgxNEY5MkNENSAqLwotICAyLjMyMjc2NDY5MDU3MTYyODEzNjY5ZSswMiwgLyogMHg0MDZEMDhEOCwgMHhENUEyREJEOSAqLwotICAxLjE3Njc5MzczMjg3MTQ3MTAwNzY4ZSswMiwgLyogMHg0MDVENkI3QSwgMHhEQTE4ODRBOSAqLwotICA4LjM2NDYzODkzMzcxNjE4MjgzMzY4ZSswMCwgLyogMHg0MDIwQkFCMSwgMHhGNDRFNTE5MiAqLwotfTsKLQotCXN0YXRpYyBkb3VibGUgcG9uZShkb3VibGUgeCkKLXsKLQljb25zdCBkb3VibGUgKnAsKnE7Ci0JZG91YmxlIHoscixzOwotICAgICAgICBpbnQzMl90IGl4OwotCUdFVF9ISUdIX1dPUkQoaXgseCk7Ci0JaXggJj0gMHg3ZmZmZmZmZjsKLSAgICAgICAgaWYoaXg+PTB4NDAyMDAwMDApICAgICB7cCA9IHByODsgcT0gcHM4O30KLSAgICAgICAgZWxzZSBpZihpeD49MHg0MDEyMkU4Qil7cCA9IHByNTsgcT0gcHM1O30KLSAgICAgICAgZWxzZSBpZihpeD49MHg0MDA2REI2RCl7cCA9IHByMzsgcT0gcHMzO30KLSAgICAgICAgZWxzZSBpZihpeD49MHg0MDAwMDAwMCl7cCA9IHByMjsgcT0gcHMyO30KLSAgICAgICAgeiA9IG9uZS8oeCp4KTsKLSAgICAgICAgciA9IHBbMF0reioocFsxXSt6KihwWzJdK3oqKHBbM10reioocFs0XSt6KnBbNV0pKSkpOwotICAgICAgICBzID0gb25lK3oqKHFbMF0reioocVsxXSt6KihxWzJdK3oqKHFbM10reipxWzRdKSkpKTsKLSAgICAgICAgcmV0dXJuIG9uZSsgci9zOwotfQotCQkKLQotLyogRm9yIHggPj0gOCwgdGhlIGFzeW1wdG90aWMgZXhwYW5zaW9ucyBvZiBxb25lIGlzCi0gKgkzLzggcyAtIDEwNS8xMDI0IHNeMyAtIC4uLiwgd2hlcmUgcyA9IDEveC4KLSAqIFdlIGFwcHJveGltYXRlIHBvbmUgYnkKLSAqIAlxb25lKHgpID0gcyooMC4zNzUgKyAoUi9TKSkKLSAqIHdoZXJlICBSID0gcXIxKnNeMiArIHFyMipzXjQgKyAuLi4gKyBxcjUqc14xMAotICogCSAgUyA9IDEgKyBxczEqc14yICsgLi4uICsgcXM2KnNeMTIKLSAqIGFuZAotICoJfCBxb25lKHgpL3MgLTAuMzc1LVIvUyB8IDw9IDIgICoqICggLTYxLjEzKQotICovCi0KLXN0YXRpYyBjb25zdCBkb3VibGUgcXI4WzZdID0geyAvKiBmb3IgeCBpbiBbaW5mLCA4XT0xL1swLDAuMTI1XSAqLwotICAwLjAwMDAwMDAwMDAwMDAwMDAwMDAwZSswMCwgLyogMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCAqLwotIC0xLjAyNTM5MDYyNDk5OTkyNzE0MTYxZS0wMSwgLyogMHhCRkJBM0ZGRiwgMHhGRkZGRkRGMyAqLwotIC0xLjYyNzE3NTM0NTQ0NTg5OTg3ODg4ZSswMSwgLyogMHhDMDMwNDU5MSwgMHhBMjY3NzlGNyAqLwotIC03LjU5NjAxNzIyNTEzOTUwMTA3ODk2ZSswMiwgLyogMHhDMDg3QkNEMCwgMHg1M0U0QjU3NiAqLwotIC0xLjE4NDk4MDY2NzAyNDI5NTg3MTY3ZSswNCwgLyogMHhDMEM3MjRFNywgMHg0MEY4NzQxNSAqLwotIC00Ljg0Mzg1MTI0Mjg1NzUwMzUzMDEwZSswNCwgLyogMHhDMEU3QTZEMCwgMHg2NUQwOUM2QSAqLwotfTsKLXN0YXRpYyBjb25zdCBkb3VibGUgcXM4WzZdID0gewotICAxLjYxMzk1MzY5NzAwNzIyOTA5NTU2ZSswMiwgLyogMHg0MDY0MkNBNiwgMHhERTVCQ0RFNSAqLwotICA3LjgyNTM4NTk5OTIzMzQ4NDY1MzgxZSswMywgLyogMHg0MEJFOTE2MiwgMHhEMEQ4ODQxOSAqLwotICAxLjMzODc1MzM2Mjg3MjQ5NTc4MTYzZSswNSwgLyogMHg0MTAwNTc5QSwgMHhCMEI3NUU5OCAqLwotICA3LjE5NjU3NzIzNjgzMjQwOTM5ODYzZSswNSwgLyogMHg0MTI1RjY1MywgMHg3Mjg2OUMxOSAqLwotICA2LjY2NjAxMjMyNjE3Nzc2Mzc1MjY0ZSswNSwgLyogMHg0MTI0NTdEMiwgMHg3NzE5QUQ1QyAqLwotIC0yLjk0NDkwMjY0MzAzODM0NjQzMjE1ZSswNSwgLyogMHhDMTExRjk2OSwgMHgwRUE1QUExOCAqLwotfTsKLQotc3RhdGljIGNvbnN0IGRvdWJsZSBxcjVbNl0gPSB7IC8qIGZvciB4IGluIFs4LDQuNTQ1NF09MS9bMC4xMjUsMC4yMjAwMV0gKi8KLSAtMi4wODk3OTkzMTE0MTc2NDEwNDI5N2UtMTEsIC8qIDB4QkRCNkZBNDMsIDB4MUFBMUEwOTggKi8KLSAtMS4wMjUzOTA1MDI0MTM3NTQyNjIzMWUtMDEsIC8qIDB4QkZCQTNGRkYsIDB4Q0I1OTdGRUYgKi8KLSAtOC4wNTY0NDgyODEyMzkzNjAyOTg0MGUrMDAsIC8qIDB4QzAyMDFDRTYsIDB4Q0EwM0FENEIgKi8KLSAtMS44MzY2OTYwNzQ3NDg4ODM4MDIzOWUrMDIsIC8qIDB4QzA2NkY1NkQsIDB4NkNBN0I5QjAgKi8KLSAtMS4zNzMxOTM3NjA2NTUwODE2MzI2NWUrMDMsIC8qIDB4QzA5NTc0QzYsIDB4NjkzMTczNEYgKi8KLSAtMi42MTI0NDQ0MDQ1MzIxNTY1NjgxN2UrMDMsIC8qIDB4QzBBNDY4RTMsIDB4ODhGREE3OUQgKi8KLX07Ci1zdGF0aWMgY29uc3QgZG91YmxlIHFzNVs2XSA9IHsKLSAgOC4xMjc2NTUwMTM4NDMzNTc3Nzg1N2UrMDEsIC8qIDB4NDA1NDUxQjIsIDB4RkY1QTExQjIgKi8KLSAgMS45OTE3OTg3MzQ2MDQ4NTk2NDY0MmUrMDMsIC8qIDB4NDA5RjFGMzEsIDB4RTc3QkY4MzkgKi8KLSAgMS43NDY4NDg1MTkyNDkwODkwNzY3N2UrMDQsIC8qIDB4NDBEMTBGMUYsIDB4MEQ2NENFMjkgKi8KLSAgNC45ODUxNDI3MDkxMDM1MjI3OTMxNmUrMDQsIC8qIDB4NDBFODU3NkQsIDB4QUFCQUQxOTcgKi8KLSAgMi43OTQ4MDc1MTYzODkxODExODI2MGUrMDQsIC8qIDB4NDBEQjRCMDQsIDB4Q0Y3QzM2NEIgKi8KLSAtNC43MTkxODM1NDc5NTEyODQ3MDg2OWUrMDMsIC8qIDB4QzBCMjZGMkUsIDB4RkNGRkEwMDQgKi8KLX07Ci0KLXN0YXRpYyBjb25zdCBkb3VibGUgcXIzWzZdID0gewotIC01LjA3ODMxMjI2NDYxNzY2NTYxMzY5ZS0wOSwgLyogMHhCRTM1Q0ZBOSwgMHhEMzhGQzg0RiAqLwotIC0xLjAyNTM3ODI5ODIwODM3MDg5NzQ1ZS0wMSwgLyogMHhCRkJBM0ZFQiwgMHg1MUFFRUQ1NCAqLwotIC00LjYxMDExNTgxMTM5NDczNDAzMTEzZSswMCwgLyogMHhDMDEyNzBDMiwgMHgzMzAyRDlGRiAqLwotIC01Ljc4NDcyMjE2NTYyNzgzNjQzMjEyZSswMSwgLyogMHhDMDRDRUM3MSwgMHhDMjVEMTZEQSAqLwotIC0yLjI4MjQ0NTQwNzM3NjMxNjk1MDM4ZSswMiwgLyogMHhDMDZDODdEMywgMHg0NzE4RDU1RiAqLwotIC0yLjE5MjEwMTI4NDc4OTA5MzI1NjIyZSswMiwgLyogMHhDMDZCNjZCOSwgMHg1RjVDMUJGNiAqLwotfTsKLXN0YXRpYyBjb25zdCBkb3VibGUgcXMzWzZdID0gewotICA0Ljc2NjUxNTUwMzIzNzI5NTA5MjczZSswMSwgLyogMHg0MDQ3RDUyMywgMHhDQ0QzNjdFNCAqLwotICA2LjczODY1MTEyNjc2Njk5NzA5NDgyZSswMiwgLyogMHg0MDg1MEVFQiwgMHhDMDMxRUUzRSAqLwotICAzLjM4MDE1Mjg2Njc5NTI2MzQzNTA1ZSswMywgLyogMHg0MEFBNjg0RSwgMHg0NDhFN0M5QSAqLwotICA1LjU0NzcyOTA5NzIwNzIyNzgyMzY3ZSswMywgLyogMHg0MEI1QUJCQSwgMHhBNjFENTRBNiAqLwotICAxLjkwMzExOTE5MzM4ODEwNzk4NzYzZSswMywgLyogMHg0MDlEQkM3QSwgMHgwREQ0REY0QiAqLwotIC0xLjM1MjAxMTkxNDQ0MzA3MzQwODE3ZSswMiwgLyogMHhDMDYwRTY3MCwgMHgyOTBBMzExRiAqLwotfTsKLQotc3RhdGljIGNvbnN0IGRvdWJsZSBxcjJbNl0gPSB7LyogZm9yIHggaW4gWzIuODU3MCwyXT0xL1swLjM0OTksMC41XSAqLwotIC0xLjc4MzgxNzI3NTEwOTU4ODY1NTcyZS0wNywgLyogMHhCRTg3RjEyNiwgMHg0NEM2MjZEMiAqLwotIC0xLjAyNTE3MDQyNjA3OTg1NTUzNDYwZS0wMSwgLyogMHhCRkJBM0U4RSwgMHg5MTQ4QjAxMCAqLwotIC0yLjc1MjIwNTY4Mjc4MTg3NDYwNzIwZSswMCwgLyogMHhDMDA2MDQ4NCwgMHg2OUJCNEVEQSAqLwotIC0xLjk2NjM2MTYyNjQzNzAzNzIwMjIxZSswMSwgLyogMHhDMDMzQTlFMiwgMHhDMTY4OTA3RiAqLwotIC00LjIzMjUzMTMzMzcyODMwNDkwMDg5ZSswMSwgLyogMHhDMDQ1MjlBMywgMHhERTEwNEFBQSAqLwotIC0yLjEzNzE5MjExNzAzNzA0MDYxNzMzZSswMSwgLyogMHhDMDM1NUYzNiwgMHgzOUNGNkU1MiAqLwotfTsKLXN0YXRpYyBjb25zdCBkb3VibGUgcXMyWzZdID0gewotICAyLjk1MzMzNjI5MDYwNTIzODU0NTQ4ZSswMSwgLyogMHg0MDNEODg4QSwgMHg3OEFFNjRGRiAqLwotICAyLjUyOTgxNTQ5OTgyMTkwNTI5MTM2ZSswMiwgLyogMHg0MDZGOUY2OCwgMHhEQjgyMUNCQSAqLwotICA3LjU3NTAyODM0ODY4NjQ1NDM2NDcyZSswMiwgLyogMHg0MDg3QUMwNSwgMHhDRTQ5QTBGNyAqLwotICA3LjM5MzkzMjA1MzIwNDY3MjQ1NjU2ZSswMiwgLyogMHg0MDg3MUIyNSwgMHg0OEQ0QzAyOSAqLwotICAxLjU1OTQ5MDAzMzM2NjY2MTIzNjg3ZSswMiwgLyogMHg0MDYzN0U1RSwgMHgzQzNFRDhENCAqLwotIC00Ljk1OTQ5ODk4ODIyNjI4MjEwMTI3ZSswMCwgLyogMHhDMDEzRDY4NiwgMHhFNzFCRTg2QiAqLwotfTsKLQotCXN0YXRpYyBkb3VibGUgcW9uZShkb3VibGUgeCkKLXsKLQljb25zdCBkb3VibGUgKnAsKnE7Ci0JZG91YmxlICBzLHIsejsKLQlpbnQzMl90IGl4OwotCUdFVF9ISUdIX1dPUkQoaXgseCk7Ci0JaXggJj0gMHg3ZmZmZmZmZjsKLQlpZihpeD49MHg0MDIwMDAwMCkgICAgIHtwID0gcXI4OyBxPSBxczg7fQotCWVsc2UgaWYoaXg+PTB4NDAxMjJFOEIpe3AgPSBxcjU7IHE9IHFzNTt9Ci0JZWxzZSBpZihpeD49MHg0MDA2REI2RCl7cCA9IHFyMzsgcT0gcXMzO30KLQllbHNlIGlmKGl4Pj0weDQwMDAwMDAwKXtwID0gcXIyOyBxPSBxczI7fQotCXogPSBvbmUvKHgqeCk7Ci0JciA9IHBbMF0reioocFsxXSt6KihwWzJdK3oqKHBbM10reioocFs0XSt6KnBbNV0pKSkpOwotCXMgPSBvbmUreioocVswXSt6KihxWzFdK3oqKHFbMl0reioocVszXSt6KihxWzRdK3oqcVs1XSkpKSkpOwotCXJldHVybiAoLjM3NSArIHIvcykveDsKLX0KZGlmZiAtLWdpdCBhL2xpYm0vc3JjL2VfajFmLmMgYi9saWJtL3NyYy9lX2oxZi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYTA1Nzc0Li4wMDAwMDAwCi0tLSBhL2xpYm0vc3JjL2VfajFmLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzMzUgKzAsMCBAQAotLyogZV9qMWYuYyAtLSBmbG9hdCB2ZXJzaW9uIG9mIGVfajEuYy4KLSAqIENvbnZlcnNpb24gdG8gZmxvYXQgYnkgSWFuIExhbmNlIFRheWxvciwgQ3lnbnVzIFN1cHBvcnQsIGlhbkBjeWdudXMuY29tLgotICogQnVnIGluIF9faWVlZTc1NF9qMWYgZml4ZWQgYnkgU2NvdHQgVHVybmVyIDEvMTYvMjAxMAotICovCi0KLS8qCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBDb3B5cmlnaHQgKEMpIDE5OTMgYnkgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIERldmVsb3BlZCBhdCBTdW5Qcm8sIGEgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBidXNpbmVzcy4KLSAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKLSAqIHNvZnR3YXJlIGlzIGZyZWVseSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoaXMgbm90aWNlCi0gKiBpcyBwcmVzZXJ2ZWQuCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKi8KLQotI2lmbmRlZiBsaW50Ci1zdGF0aWMgY2hhciByY3NpZFtdID0gIiRGcmVlQlNEOiBzcmMvbGliL21zdW4vc3JjL2VfajFmLmMsdiAxLjcgMjAwMi8wNS8yOCAxODoxNTowNCBhbGZyZWQgRXhwICQiOwotI2VuZGlmCi0KLSNpbmNsdWRlICJtYXRoLmgiCi0jaW5jbHVkZSAibWF0aF9wcml2YXRlLmgiCi0KLXN0YXRpYyBmbG9hdCBwb25lZihmbG9hdCksIHFvbmVmKGZsb2F0KTsKLQotc3RhdGljIGNvbnN0IGZsb2F0Ci1odWdlICAgID0gMWUzMCwKLW9uZQk9IDEuMCwKLWludnNxcnRwaT0gIDUuNjQxODk2MTI4N2UtMDEsIC8qIDB4M2YxMDZlYmIgKi8KLXRwaSAgICAgID0gIDYuMzY2MTk3NDY2OWUtMDEsIC8qIDB4M2YyMmY5ODMgKi8KLQkvKiBSMC9TMCBvbiBbMCwyXSAqLwotcjAwICA9IC02LjI1MDAwMDAwMDBlLTAyLCAvKiAweGJkODAwMDAwICovCi1yMDEgID0gIDEuNDA3MDU2Njk3NmUtMDMsIC8qIDB4M2FiODZjZmQgKi8KLXIwMiAgPSAtMS41OTk1NTYzNDQ0ZS0wNSwgLyogMHhiNzg2MmUzNiAqLwotcjAzICA9ICA0Ljk2NzI3OTkyMDdlLTA4LCAvKiAweDMzNTU1N2QyICovCi1zMDEgID0gIDEuOTE1Mzc2MDc0NmUtMDIsIC8qIDB4M2M5Y2U4NTkgKi8KLXMwMiAgPSAgMS44NTk0Njc4ODQxZS0wNCwgLyogMHgzOTQyZmFiNiAqLwotczAzICA9ICAxLjE3NzE4NDY4NTdlLTA2LCAvKiAweDM1OWRmZmMyICovCi1zMDQgID0gIDUuMDQ2MzYyNDM5MGUtMDksIC8qIDB4MzFhZDY0NDYgKi8KLXMwNSAgPSAgMS4yMzU0MjI3MDE2ZS0xMTsgLyogMHgyZDU5NTY3ZSAqLwotCi1zdGF0aWMgY29uc3QgZmxvYXQgemVybyAgICA9IDAuMDsKLQotZmxvYXQKLV9faWVlZTc1NF9qMWYoZmxvYXQgeCkKLXsKLQlmbG9hdCB6LCBzLGMsc3MsY2Mscix1LHYseTsKLQlpbnQzMl90IGh4LGl4OwotCi0JR0VUX0ZMT0FUX1dPUkQoaHgseCk7Ci0JaXggPSBoeCYweDdmZmZmZmZmOwotCWlmKGl4Pj0weDdmODAwMDAwKSByZXR1cm4gb25lL3g7Ci0JeSA9IGZhYnNmKHgpOwotCWlmKGl4ID49IDB4NDAwMDAwMDApIHsJLyogfHh8ID49IDIuMCAqLwotCQlzID0gc2luZih5KTsKLQkJYyA9IGNvc2YoeSk7Ci0JCXNzID0gLXMtYzsKLQkJY2MgPSBzLWM7Ci0JCWlmKGl4PDB4N2YwMDAwMDApIHsgIC8qIG1ha2Ugc3VyZSB5K3kgbm90IG92ZXJmbG93ICovCi0JCSAgICB6ID0gY29zZih5K3kpOwotCQkgICAgaWYgKChzKmMpPnplcm8pIGNjID0gei9zczsKLQkJICAgIGVsc2UgCSAgICBzcyA9IHovY2M7Ci0JCX0KLQkvKgotCSAqIGoxKHgpID0gMS9zcXJ0KHBpKSAqIChQKDEseCkqY2MgLSBRKDEseCkqc3MpIC8gc3FydCh4KQotCSAqIHkxKHgpID0gMS9zcXJ0KHBpKSAqIChQKDEseCkqc3MgKyBRKDEseCkqY2MpIC8gc3FydCh4KQotCSAqLwotCQlpZigoKHVpbnQzMl90KWh4KT4weDgwMDAwMDAwKSB6ID0gKGludnNxcnRwaSpjYykvc3FydGYoeSk7Ci0JCWVsc2UgewotCQkgICAgdSA9IHBvbmVmKHkpOyB2ID0gcW9uZWYoeSk7Ci0JCSAgICB6ID0gaW52c3FydHBpKih1KmNjLXYqc3MpL3NxcnRmKHkpOwotCQl9Ci0JCWlmKGh4PDApIHJldHVybiAtejsKLQkJZWxzZSAgCSByZXR1cm4gIHo7Ci0JfQotCWlmKGl4PDB4MzIwMDAwMDApIHsJLyogfHh8PDIqKi0yNyAqLwotCSAgICBpZihodWdlK3g+b25lKSByZXR1cm4gKGZsb2F0KTAuNSp4Oy8qIGluZXhhY3QgaWYgeCE9MCBuZWNlc3NhcnkgKi8KLQl9Ci0JeiA9IHgqeDsKLQlyID0gIHoqKHIwMCt6KihyMDEreioocjAyK3oqcjAzKSkpOwotCXMgPSAgb25lK3oqKHMwMSt6KihzMDIreiooczAzK3oqKHMwNCt6KnMwNSkpKSk7Ci0JciAqPSB4OwotCXJldHVybih4KihmbG9hdCkwLjUrci9zKTsKLX0KLQotc3RhdGljIGNvbnN0IGZsb2F0IFUwWzVdID0gewotIC0xLjk2MDU3MDk2MTJlLTAxLCAvKiAweGJlNDhjMzMxICovCi0gIDUuMDQ0Mzg3MjgwOWUtMDIsIC8qIDB4M2Q0ZTllM2MgKi8KLSAtMS45MTI1Njg5Mjg3ZS0wMywgLyogMHhiYWZhYWYyYSAqLwotICAyLjM1MjUyNTkxNjZlLTA1LCAvKiAweDM3YzU1ODFjICovCi0gLTkuMTkwOTkxNzg5OWUtMDgsIC8qIDB4YjNjNTYwMDMgKi8KLX07Ci1zdGF0aWMgY29uc3QgZmxvYXQgVjBbNV0gPSB7Ci0gIDEuOTkxNjczMTg2NGUtMDIsIC8qIDB4M2NhMzI4NmEgKi8KLSAgMi4wMjU1MjU3NTUwZS0wNCwgLyogMHgzOTU0NjQ0YiAqLwotICAxLjM1NjA4Nzk3NzllLTA2LCAvKiAweDM1YjYwMmQ0ICovCi0gIDYuMjI3NDE0NTg0MGUtMDksIC8qIDB4MzFkNWY4ZWIgKi8KLSAgMS42NjU1OTI0OTAzZS0xMSwgLyogMHgyZDkyODFjZiAqLwotfTsKLQotZmxvYXQKLV9faWVlZTc1NF95MWYoZmxvYXQgeCkKLXsKLQlmbG9hdCB6LCBzLGMsc3MsY2MsdSx2OwotCWludDMyX3QgaHgsaXg7Ci0KLQlHRVRfRkxPQVRfV09SRChoeCx4KTsKLSAgICAgICAgaXggPSAweDdmZmZmZmZmJmh4OwotICAgIC8qIGlmIFkxKE5hTikgaXMgTmFOLCBZMSgtaW5mKSBpcyBOYU4sIFkxKGluZikgaXMgMCAqLwotCWlmKGl4Pj0weDdmODAwMDAwKSByZXR1cm4gIG9uZS8oeCt4KngpOwotICAgICAgICBpZihpeD09MCkgcmV0dXJuIC1vbmUvemVybzsKLSAgICAgICAgaWYoaHg8MCkgcmV0dXJuIHplcm8vemVybzsKLSAgICAgICAgaWYoaXggPj0gMHg0MDAwMDAwMCkgeyAgLyogfHh8ID49IDIuMCAqLwotICAgICAgICAgICAgICAgIHMgPSBzaW5mKHgpOwotICAgICAgICAgICAgICAgIGMgPSBjb3NmKHgpOwotICAgICAgICAgICAgICAgIHNzID0gLXMtYzsKLSAgICAgICAgICAgICAgICBjYyA9IHMtYzsKLSAgICAgICAgICAgICAgICBpZihpeDwweDdmMDAwMDAwKSB7ICAvKiBtYWtlIHN1cmUgeCt4IG5vdCBvdmVyZmxvdyAqLwotICAgICAgICAgICAgICAgICAgICB6ID0gY29zZih4K3gpOwotICAgICAgICAgICAgICAgICAgICBpZiAoKHMqYyk+emVybykgY2MgPSB6L3NzOwotICAgICAgICAgICAgICAgICAgICBlbHNlICAgICAgICAgICAgc3MgPSB6L2NjOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgLyogeTEoeCkgPSBzcXJ0KDIvKHBpKngpKSoocDEoeCkqc2luKHgwKStxMSh4KSpjb3MoeDApKQotICAgICAgICAgKiB3aGVyZSB4MCA9IHgtM3BpLzQKLSAgICAgICAgICogICAgICBCZXR0ZXIgZm9ybXVsYToKLSAgICAgICAgICogICAgICAgICAgICAgIGNvcyh4MCkgPSBjb3MoeCljb3MoM3BpLzQpK3Npbih4KXNpbigzcGkvNCkKLSAgICAgICAgICogICAgICAgICAgICAgICAgICAgICAgPSAgMS9zcXJ0KDIpICogKHNpbih4KSAtIGNvcyh4KSkKLSAgICAgICAgICogICAgICAgICAgICAgIHNpbih4MCkgPSBzaW4oeCljb3MoM3BpLzQpLWNvcyh4KXNpbigzcGkvNCkKLSAgICAgICAgICogICAgICAgICAgICAgICAgICAgICAgPSAtMS9zcXJ0KDIpICogKGNvcyh4KSArIHNpbih4KSkKLSAgICAgICAgICogVG8gYXZvaWQgY2FuY2VsbGF0aW9uLCB1c2UKLSAgICAgICAgICogICAgICAgICAgICAgIHNpbih4KSArLSBjb3MoeCkgPSAtY29zKDJ4KS8oc2luKHgpIC0rIGNvcyh4KSkKLSAgICAgICAgICogdG8gY29tcHV0ZSB0aGUgd29yc2Ugb25lLgotICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICBpZihpeD4weDQ4MDAwMDAwKSB6ID0gKGludnNxcnRwaSpzcykvc3FydGYoeCk7Ci0gICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHUgPSBwb25lZih4KTsgdiA9IHFvbmVmKHgpOwotICAgICAgICAgICAgICAgICAgICB6ID0gaW52c3FydHBpKih1KnNzK3YqY2MpL3NxcnRmKHgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gejsKLSAgICAgICAgfQotICAgICAgICBpZihpeDw9MHgyNDgwMDAwMCkgeyAgICAvKiB4IDwgMioqLTU0ICovCi0gICAgICAgICAgICByZXR1cm4oLXRwaS94KTsKLSAgICAgICAgfQotICAgICAgICB6ID0geCp4OwotICAgICAgICB1ID0gVTBbMF0reiooVTBbMV0reiooVTBbMl0reiooVTBbM10reipVMFs0XSkpKTsKLSAgICAgICAgdiA9IG9uZSt6KihWMFswXSt6KihWMFsxXSt6KihWMFsyXSt6KihWMFszXSt6KlYwWzRdKSkpKTsKLSAgICAgICAgcmV0dXJuKHgqKHUvdikgKyB0cGkqKF9faWVlZTc1NF9qMWYoeCkqX19pZWVlNzU0X2xvZ2YoeCktb25lL3gpKTsKLX0KLQotLyogRm9yIHggPj0gOCwgdGhlIGFzeW1wdG90aWMgZXhwYW5zaW9ucyBvZiBwb25lIGlzCi0gKgkxICsgMTUvMTI4IHNeMiAtIDQ3MjUvMl4xNSBzXjQgLSAuLi4sCXdoZXJlIHMgPSAxL3guCi0gKiBXZSBhcHByb3hpbWF0ZSBwb25lIGJ5Ci0gKiAJcG9uZSh4KSA9IDEgKyAoUi9TKQotICogd2hlcmUgIFIgPSBwcjAgKyBwcjEqc14yICsgcHIyKnNeNCArIC4uLiArIHByNSpzXjEwCi0gKiAJICBTID0gMSArIHBzMCpzXjIgKyAuLi4gKyBwczQqc14xMAotICogYW5kCi0gKgl8IHBvbmUoeCktMS1SL1MgfCA8PSAyICAqKiAoIC02MC4wNikKLSAqLwotCi1zdGF0aWMgY29uc3QgZmxvYXQgcHI4WzZdID0geyAvKiBmb3IgeCBpbiBbaW5mLCA4XT0xL1swLDAuMTI1XSAqLwotICAwLjAwMDAwMDAwMDBlKzAwLCAvKiAweDAwMDAwMDAwICovCi0gIDEuMTcxODc1MDAwMGUtMDEsIC8qIDB4M2RmMDAwMDAgKi8KLSAgMS4zMjM5NDgwOTcyZSswMSwgLyogMHg0MTUzZDRlYSAqLwotICA0LjEyMDUxODQ5MzdlKzAyLCAvKiAweDQzY2UwNmEzICovCi0gIDMuODc0NzQ1MzYxM2UrMDMsIC8qIDB4NDU3MjJiZWQgKi8KLSAgNy45MTQ0Nzk0OTIyZSswMywgLyogMHg0NWY3NTNkNiAqLwotfTsKLXN0YXRpYyBjb25zdCBmbG9hdCBwczhbNV0gPSB7Ci0gIDEuMTQyMDczNjY5NGUrMDIsIC8qIDB4NDJlNDZhMmMgKi8KLSAgMy42NTA5MzA5MDgyZSswMywgLyogMHg0NTY0MmVlNSAqLwotICAzLjY5NTYyMDcwMzFlKzA0LCAvKiAweDQ3MTA1YzM1ICovCi0gIDkuNzYwMjc5Njg3NWUrMDQsIC8qIDB4NDdiZWExNjYgKi8KLSAgMy4wODA0MjcxNDg0ZSswNCwgLyogMHg0NmYwYTg4YiAqLwotfTsKLQotc3RhdGljIGNvbnN0IGZsb2F0IHByNVs2XSA9IHsgLyogZm9yIHggaW4gWzgsNC41NDU0XT0xL1swLjEyNSwwLjIyMDAxXSAqLwotICAxLjMxOTkwNTIwOTRlLTExLCAvKiAweDJkNjgzMzNmICovCi0gIDEuMTcxODc0OTI1NWUtMDEsIC8qIDB4M2RlZmZmZmYgKi8KLSAgNi44MDI3NTEwNjQzZSswMCwgLyogMHg0MGQ5YjAyMyAqLwotICAxLjA4MzA4MTgxNzZlKzAyLCAvKiAweDQyZDg5ZGNhICovCi0gIDUuMTc2MzYxNjk0M2UrMDIsIC8qIDB4NDQwMTY4YjcgKi8KLSAgNS4yODcxNTIwOTk2ZSswMiwgLyogMHg0NDA0MmRjNiAqLwotfTsKLXN0YXRpYyBjb25zdCBmbG9hdCBwczVbNV0gPSB7Ci0gIDUuOTI4MDU5NzY4N2UrMDEsIC8qIDB4NDI2ZDFmNTUgKi8KLSAgOS45MTQwMTQyODIyZSswMiwgLyogMHg0NDc3ZDliMSAqLwotICA1LjM1MzI2NzA4OThlKzAzLCAvKiAweDQ1YTc0YTIzICovCi0gIDcuODQ0NjkwNDI5N2UrMDMsIC8qIDB4NDVmNTI1ODYgKi8KLSAgMS41MDQwNDY4NzUwZSswMywgLyogMHg0NGJjMDE4MCAqLwotfTsKLQotc3RhdGljIGNvbnN0IGZsb2F0IHByM1s2XSA9IHsKLSAgMy4wMjUwMzkxMDgxZS0wOSwgLyogMHgzMTRmZTEwZCAqLwotICAxLjE3MTg2ODY2NzBlLTAxLCAvKiAweDNkZWZmZmFiICovCi0gIDMuOTMyOTc3NDM4MGUrMDAsIC8qIDB4NDA3YmI1ZTcgKi8KLSAgMy41MTE5NDAzODM5ZSswMSwgLyogMHg0MjBjN2E0NSAqLwotICA5LjEwNTUwMDc5MzVlKzAxLCAvKiAweDQyYjYxYzJhICovCi0gIDQuODU1OTA2Njc3MmUrMDEsIC8qIDB4NDI0MjNjN2MgKi8KLX07Ci1zdGF0aWMgY29uc3QgZmxvYXQgcHMzWzVdID0gewotICAzLjQ3OTEzMDkzNTdlKzAxLCAvKiAweDQyMGIyYTRkICovCi0gIDMuMzY3NjI0NTExN2UrMDIsIC8qIDB4NDNhODYxOTggKi8KLSAgMS4wNDY4NzE0NjAwZSswMywgLyogMHg0NDgyZGJlMyAqLwotICA4LjkwODExMzQwMzNlKzAyLCAvKiAweDQ0NWViM2VkICovCi0gIDEuMDM3ODc5MzMzNWUrMDIsIC8qIDB4NDJjZjkzNmMgKi8KLX07Ci0KLXN0YXRpYyBjb25zdCBmbG9hdCBwcjJbNl0gPSB7LyogZm9yIHggaW4gWzIuODU3MCwyXT0xL1swLjM0OTksMC41XSAqLwotICAxLjA3NzEwODMyMjVlLTA3LCAvKiAweDMzZTc0ZWE4ICovCi0gIDEuMTcxNzYyMTk4MmUtMDEsIC8qIDB4M2RlZmZhMTYgKi8KLSAgMi4zNjg1MTUwMTQ2ZSswMCwgLyogMHg0MDE3OTVjMCAqLwotICAxLjIyNDI2MTA5MzFlKzAxLCAvKiAweDQxNDNlMWJjICovCi0gIDEuNzY5Mzk3MTYzNGUrMDEsIC8qIDB4NDE4ZDhkNDEgKi8KLSAgNS4wNzM1MjMwNDQ2ZSswMCwgLyogMHg0MGEyNWE0ZCAqLwotfTsKLXN0YXRpYyBjb25zdCBmbG9hdCBwczJbNV0gPSB7Ci0gIDIuMTQzNjQ4NTI5MWUrMDEsIC8qIDB4NDFhYjdkZWMgKi8KLSAgMS4yNTI5MDIyOTgwZSswMiwgLyogMHg0MmZhOTQ5OSAqLwotICAyLjMyMjc2NDc0MDBlKzAyLCAvKiAweDQzNjg0NmM3ICovCi0gIDEuMTc2NzkzNzQ2OWUrMDIsIC8qIDB4NDJlYjViZDcgKi8KLSAgOC4zNjQ2MzkyODIyZSswMCwgLyogMHg0MTA1ZDU5MCAqLwotfTsKLQotCXN0YXRpYyBmbG9hdCBwb25lZihmbG9hdCB4KQotewotCWNvbnN0IGZsb2F0ICpwLCpxOwotCWZsb2F0IHoscixzOwotICAgICAgICBpbnQzMl90IGl4OwotCUdFVF9GTE9BVF9XT1JEKGl4LHgpOwotCWl4ICY9IDB4N2ZmZmZmZmY7Ci0gICAgICAgIGlmKGl4Pj0weDQxMDAwMDAwKSAgICAge3AgPSBwcjg7IHE9IHBzODt9Ci0gICAgICAgIGVsc2UgaWYoaXg+PTB4NDBmNzFjNTgpe3AgPSBwcjU7IHE9IHBzNTt9Ci0gICAgICAgIGVsc2UgaWYoaXg+PTB4NDAzNmRiNjgpe3AgPSBwcjM7IHE9IHBzMzt9Ci0gICAgICAgIGVsc2UgaWYoaXg+PTB4NDAwMDAwMDApe3AgPSBwcjI7IHE9IHBzMjt9Ci0gICAgICAgIHogPSBvbmUvKHgqeCk7Ci0gICAgICAgIHIgPSBwWzBdK3oqKHBbMV0reioocFsyXSt6KihwWzNdK3oqKHBbNF0reipwWzVdKSkpKTsKLSAgICAgICAgcyA9IG9uZSt6KihxWzBdK3oqKHFbMV0reioocVsyXSt6KihxWzNdK3oqcVs0XSkpKSk7Ci0gICAgICAgIHJldHVybiBvbmUrIHIvczsKLX0KLQotCi0vKiBGb3IgeCA+PSA4LCB0aGUgYXN5bXB0b3RpYyBleHBhbnNpb25zIG9mIHFvbmUgaXMKLSAqCTMvOCBzIC0gMTA1LzEwMjQgc14zIC0gLi4uLCB3aGVyZSBzID0gMS94LgotICogV2UgYXBwcm94aW1hdGUgcG9uZSBieQotICogCXFvbmUoeCkgPSBzKigwLjM3NSArIChSL1MpKQotICogd2hlcmUgIFIgPSBxcjEqc14yICsgcXIyKnNeNCArIC4uLiArIHFyNSpzXjEwCi0gKiAJICBTID0gMSArIHFzMSpzXjIgKyAuLi4gKyBxczYqc14xMgotICogYW5kCi0gKgl8IHFvbmUoeCkvcyAtMC4zNzUtUi9TIHwgPD0gMiAgKiogKCAtNjEuMTMpCi0gKi8KLQotc3RhdGljIGNvbnN0IGZsb2F0IHFyOFs2XSA9IHsgLyogZm9yIHggaW4gW2luZiwgOF09MS9bMCwwLjEyNV0gKi8KLSAgMC4wMDAwMDAwMDAwZSswMCwgLyogMHgwMDAwMDAwMCAqLwotIC0xLjAyNTM5MDYyNTBlLTAxLCAvKiAweGJkZDIwMDAwICovCi0gLTEuNjI3MTc1MzMxMWUrMDEsIC8qIDB4YzE4MjJjOGQgKi8KLSAtNy41OTYwMTc0NTYxZSswMiwgLyogMHhjNDNkZTY4MyAqLwotIC0xLjE4NDk4MDY2NDFlKzA0LCAvKiAweGM2MzkyNzNhICovCi0gLTQuODQzODUxMTcxOWUrMDQsIC8qIDB4YzczZDM2ODMgKi8KLX07Ci1zdGF0aWMgY29uc3QgZmxvYXQgcXM4WzZdID0gewotICAxLjYxMzk1MzcwNDhlKzAyLCAvKiAweDQzMjE2NTM3ICovCi0gIDcuODI1Mzg2MjMwNWUrMDMsIC8qIDB4NDVmNDhiMTcgKi8KLSAgMS4zMzg3NTM0Mzc1ZSswNSwgLyogMHg0ODAyYmNkNiAqLwotICA3LjE5NjU3NzUwMDBlKzA1LCAvKiAweDQ5MmZiMjljICovCi0gIDYuNjY2MDEyNTAwMGUrMDUsIC8qIDB4NDkyMmJlOTQgKi8KLSAtMi45NDQ5MDI1MDAwZSswNSwgLyogMHhjODhmY2I0OCAqLwotfTsKLQotc3RhdGljIGNvbnN0IGZsb2F0IHFyNVs2XSA9IHsgLyogZm9yIHggaW4gWzgsNC41NDU0XT0xL1swLjEyNSwwLjIyMDAxXSAqLwotIC0yLjA4OTc5OTM0MDVlLTExLCAvKiAweGFkYjdkMjE5ICovCi0gLTEuMDI1MzkwNDc2MGUtMDEsIC8qIDB4YmRkMWZmZmUgKi8KLSAtOC4wNTY0NDc5ODI4ZSswMCwgLyogMHhjMTAwZTczNiAqLwotIC0xLjgzNjY5NjAxNDRlKzAyLCAvKiAweGMzMzdhYjZiICovCi0gLTEuMzczMTkzNzI1NmUrMDMsIC8qIDB4YzRhYmE2MzMgKi8KLSAtMi42MTI0NDQzMzU5ZSswMywgLyogMHhjNTIzNDcxYyAqLwotfTsKLXN0YXRpYyBjb25zdCBmbG9hdCBxczVbNl0gPSB7Ci0gIDguMTI3NjU1MDI5M2UrMDEsIC8qIDB4NDJhMjhkOTggKi8KLSAgMS45OTE3OTg3MDYxZSswMywgLyogMHg0NGY4Zjk4ZiAqLwotICAxLjc0Njg0ODQzNzVlKzA0LCAvKiAweDQ2ODg3OGY4ICovCi0gIDQuOTg1MTQyNTc4MWUrMDQsIC8qIDB4NDc0MmJiNmQgKi8KLSAgMi43OTQ4MDc0MjE5ZSswNCwgLyogMHg0NmRhNTgyNiAqLwotIC00LjcxOTE4MzU5MzhlKzAzLCAvKiAweGM1OTM3OTc4ICovCi19OwotCi1zdGF0aWMgY29uc3QgZmxvYXQgcXIzWzZdID0gewotIC01LjA3ODMxMjQzNzJlLTA5LCAvKiAweGIxYWU3ZDRmICovCi0gLTEuMDI1Mzc4MzMxNWUtMDEsIC8qIDB4YmRkMWZmNWIgKi8KLSAtNC42MTAxMTYwMDQ5ZSswMCwgLyogMHhjMDkzODYxMiAqLwotIC01Ljc4NDcyMjEzNzVlKzAxLCAvKiAweGMyNjc2MzhlICovCi0gLTIuMjgyNDQ1MzczNWUrMDIsIC8qIDB4YzM2NDNlOWEgKi8KLSAtMi4xOTIxMDEyODc4ZSswMiwgLyogMHhjMzViMzVjYiAqLwotfTsKLXN0YXRpYyBjb25zdCBmbG9hdCBxczNbNl0gPSB7Ci0gIDQuNzY2NTE1MzUwM2UrMDEsIC8qIDB4NDIzZWE5MWUgKi8KLSAgNi43Mzg2NTExMjMwZSswMiwgLyogMHg0NDI4Nzc1ZSAqLwotICAzLjM4MDE1MjgzMjBlKzAzLCAvKiAweDQ1NTM0MjcyICovCi0gIDUuNTQ3NzI5MDAzOWUrMDMsIC8qIDB4NDVhZDVkZDUgKi8KLSAgMS45MDMxMTkxNDA2ZSswMywgLyogMHg0NGVkZTNkMCAqLwotIC0xLjM1MjAxMTg3MTNlKzAyLCAvKiAweGMzMDczMzgxICovCi19OwotCi1zdGF0aWMgY29uc3QgZmxvYXQgcXIyWzZdID0gey8qIGZvciB4IGluIFsyLjg1NzAsMl09MS9bMC4zNDk5LDAuNV0gKi8KLSAtMS43ODM4MTcyNTM5ZS0wNywgLyogMHhiNDNmODkzMiAqLwotIC0xLjAyNTE3MDQ2MDNlLTAxLCAvKiAweGJkZDFmNDc1ICovCi0gLTIuNzUyMjA1NjEwM2UrMDAsIC8qIDB4YzAzMDI0MjMgKi8KLSAtMS45NjYzNjE2MTgwZSswMSwgLyogMHhjMTlkNGYxNiAqLwotIC00LjIzMjUzMTM1NjhlKzAxLCAvKiAweGMyMjk0ZDFmICovCi0gLTIuMTM3MTkyMTUzOWUrMDEsIC8qIDB4YzFhYWY5YjIgKi8KLX07Ci1zdGF0aWMgY29uc3QgZmxvYXQgcXMyWzZdID0gewotICAyLjk1MzMzNjMzNDJlKzAxLCAvKiAweDQxZWM0NDU0ICovCi0gIDIuNTI5ODE1NTIxMmUrMDIsIC8qIDB4NDM3Y2ZiNDcgKi8KLSAgNy41NzUwMjgwNzYyZSswMiwgLyogMHg0NDNkNjAyZSAqLwotICA3LjM5MzkzMTg4NDhlKzAyLCAvKiAweDQ0MzhkOTJhICovCi0gIDEuNTU5NDkwMDUxM2UrMDIsIC8qIDB4NDMxYmYyZjIgKi8KLSAtNC45NTk0OTg4ODIzZSswMCwgLyogMHhjMDllYjQzNyAqLwotfTsKLQotCXN0YXRpYyBmbG9hdCBxb25lZihmbG9hdCB4KQotewotCWNvbnN0IGZsb2F0ICpwLCpxOwotCWZsb2F0ICBzLHIsejsKLQlpbnQzMl90IGl4OwotCUdFVF9GTE9BVF9XT1JEKGl4LHgpOwotCWl4ICY9IDB4N2ZmZmZmZmY7Ci0JaWYoaXg+PTB4NDAyMDAwMDApICAgICB7cCA9IHFyODsgcT0gcXM4O30KLQllbHNlIGlmKGl4Pj0weDQwZjcxYzU4KXtwID0gcXI1OyBxPSBxczU7fQotCWVsc2UgaWYoaXg+PTB4NDAzNmRiNjgpe3AgPSBxcjM7IHE9IHFzMzt9Ci0JZWxzZSBpZihpeD49MHg0MDAwMDAwMCl7cCA9IHFyMjsgcT0gcXMyO30KLQl6ID0gb25lLyh4KngpOwotCXIgPSBwWzBdK3oqKHBbMV0reioocFsyXSt6KihwWzNdK3oqKHBbNF0reipwWzVdKSkpKTsKLQlzID0gb25lK3oqKHFbMF0reioocVsxXSt6KihxWzJdK3oqKHFbM10reioocVs0XSt6KnFbNV0pKSkpKTsKLQlyZXR1cm4gKChmbG9hdCkuMzc1ICsgci9zKS94OwotfQpkaWZmIC0tZ2l0IGEvbGlibS9zcmMvZV9qbi5jIGIvbGlibS9zcmMvZV9qbi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MTNiMjJkLi4wMDAwMDAwCi0tLSBhL2xpYm0vc3JjL2Vfam4uYworKysgL2Rldi9udWxsCkBAIC0xLDI2NiArMCwwIEBACi0KLS8qIEAoIyllX2puLmMgMS40IDk1LzAxLzE4ICovCi0vKgotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogQ29weXJpZ2h0IChDKSAxOTkzIGJ5IFN1biBNaWNyb3N5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBEZXZlbG9wZWQgYXQgU3VuU29mdCwgYSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGJ1c2luZXNzLgotICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcwotICogc29mdHdhcmUgaXMgZnJlZWx5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhpcyBub3RpY2UgCi0gKiBpcyBwcmVzZXJ2ZWQuCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKi8KLQotI2lmbmRlZiBsaW50Ci1zdGF0aWMgY2hhciByY3NpZFtdID0gIiRGcmVlQlNEOiBzcmMvbGliL21zdW4vc3JjL2Vfam4uYyx2IDEuOSAyMDA1LzAyLzA0IDE4OjI2OjA2IGRhcyBFeHAgJCI7Ci0jZW5kaWYKLQotLyoKLSAqIF9faWVlZTc1NF9qbihuLCB4KSwgX19pZWVlNzU0X3luKG4sIHgpCi0gKiBmbG9hdGluZyBwb2ludCBCZXNzZWwncyBmdW5jdGlvbiBvZiB0aGUgMXN0IGFuZCAybmQga2luZAotICogb2Ygb3JkZXIgbgotICogICAgICAgICAgCi0gKiBTcGVjaWFsIGNhc2VzOgotICoJeTAoMCk9eTEoMCk9eW4obiwwKSA9IC1pbmYgd2l0aCBkaXZpc2lvbiBieSB6ZXJvIHNpZ25hbDsKLSAqCXkwKC12ZSk9eTEoLXZlKT15bihuLC12ZSkgYXJlIE5hTiB3aXRoIGludmFsaWQgc2lnbmFsLgotICogTm90ZSAyLiBBYm91dCBqbihuLHgpLCB5bihuLHgpCi0gKglGb3Igbj0wLCBqMCh4KSBpcyBjYWxsZWQsCi0gKglmb3Igbj0xLCBqMSh4KSBpcyBjYWxsZWQsCi0gKglmb3Igbjx4LCBmb3J3YXJkIHJlY3Vyc2lvbiB1cyB1c2VkIHN0YXJ0aW5nCi0gKglmcm9tIHZhbHVlcyBvZiBqMCh4KSBhbmQgajEoeCkuCi0gKglmb3Igbj54LCBhIGNvbnRpbnVlZCBmcmFjdGlvbiBhcHByb3hpbWF0aW9uIHRvCi0gKglqKG4seCkvaihuLTEseCkgaXMgZXZhbHVhdGVkIGFuZCB0aGVuIGJhY2t3YXJkCi0gKglyZWN1cnNpb24gaXMgdXNlZCBzdGFydGluZyBmcm9tIGEgc3VwcG9zZWQgdmFsdWUKLSAqCWZvciBqKG4seCkuIFRoZSByZXN1bHRpbmcgdmFsdWUgb2YgaigwLHgpIGlzCi0gKgljb21wYXJlZCB3aXRoIHRoZSBhY3R1YWwgdmFsdWUgdG8gY29ycmVjdCB0aGUKLSAqCXN1cHBvc2VkIHZhbHVlIG9mIGoobix4KS4KLSAqCi0gKgl5bihuLHgpIGlzIHNpbWlsYXIgaW4gYWxsIHJlc3BlY3RzLCBleGNlcHQKLSAqCXRoYXQgZm9yd2FyZCByZWN1cnNpb24gaXMgdXNlZCBmb3IgYWxsCi0gKgl2YWx1ZXMgb2Ygbj4xLgotICoJCi0gKi8KLQotI2luY2x1ZGUgIm1hdGguaCIKLSNpbmNsdWRlICJtYXRoX3ByaXZhdGUuaCIKLQotc3RhdGljIGNvbnN0IGRvdWJsZQotaW52c3FydHBpPSAgNS42NDE4OTU4MzU0Nzc1NjI3OTI4MGUtMDEsIC8qIDB4M0ZFMjBERDcsIDB4NTA0MjlCNkQgKi8KLXR3byAgID0gIDIuMDAwMDAwMDAwMDAwMDAwMDAwMDBlKzAwLCAvKiAweDQwMDAwMDAwLCAweDAwMDAwMDAwICovCi1vbmUgICA9ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwZSswMDsgLyogMHgzRkYwMDAwMCwgMHgwMDAwMDAwMCAqLwotCi1zdGF0aWMgY29uc3QgZG91YmxlIHplcm8gID0gIDAuMDAwMDAwMDAwMDAwMDAwMDAwMDBlKzAwOwotCi1kb3VibGUKLV9faWVlZTc1NF9qbihpbnQgbiwgZG91YmxlIHgpCi17Ci0JaW50MzJfdCBpLGh4LGl4LGx4LCBzZ247Ci0JZG91YmxlIGEsIGIsIHRlbXAsIGRpOwotCWRvdWJsZSB6LCB3OwotCi0gICAgLyogSigtbix4KSA9ICgtMSlebiAqIEoobiwgeCksIEoobiwgLXgpID0gKC0xKV5uICogSihuLCB4KQotICAgICAqIFRodXMsIEooLW4seCkgPSBKKG4sLXgpCi0gICAgICovCi0JRVhUUkFDVF9XT1JEUyhoeCxseCx4KTsKLQlpeCA9IDB4N2ZmZmZmZmYmaHg7Ci0gICAgLyogaWYgSihuLE5hTikgaXMgTmFOICovCi0JaWYoKGl4fCgodV9pbnQzMl90KShseHwtbHgpKT4+MzEpPjB4N2ZmMDAwMDApIHJldHVybiB4K3g7Ci0JaWYobjwwKXsJCQotCQluID0gLW47Ci0JCXggPSAteDsKLQkJaHggXj0gMHg4MDAwMDAwMDsKLQl9Ci0JaWYobj09MCkgcmV0dXJuKF9faWVlZTc1NF9qMCh4KSk7Ci0JaWYobj09MSkgcmV0dXJuKF9faWVlZTc1NF9qMSh4KSk7Ci0Jc2duID0gKG4mMSkmKGh4Pj4zMSk7CS8qIGV2ZW4gbiAtLSAwLCBvZGQgbiAtLSBzaWduKHgpICovCi0JeCA9IGZhYnMoeCk7Ci0JaWYoKGl4fGx4KT09MHx8aXg+PTB4N2ZmMDAwMDApIAkvKiBpZiB4IGlzIDAgb3IgaW5mICovCi0JICAgIGIgPSB6ZXJvOwotCWVsc2UgaWYoKGRvdWJsZSluPD14KSB7ICAgCi0JCS8qIFNhZmUgdG8gdXNlIEoobisxLHgpPTJuL3ggKkoobix4KS1KKG4tMSx4KSAqLwotCSAgICBpZihpeD49MHg1MkQwMDAwMCkgeyAvKiB4ID4gMioqMzAyICovCi0gICAgLyogKHggPj4gbioqMikgCi0gICAgICoJICAgIEpuKHgpID0gY29zKHgtKDJuKzEpKnBpLzQpKnNxcnQoMi94KnBpKQotICAgICAqCSAgICBZbih4KSA9IHNpbih4LSgybisxKSpwaS80KSpzcXJ0KDIveCpwaSkKLSAgICAgKgkgICAgTGV0IHM9c2luKHgpLCBjPWNvcyh4KSwgCi0gICAgICoJCXhuPXgtKDJuKzEpKnBpLzQsIHNxdDIgPSBzcXJ0KDIpLHRoZW4KLSAgICAgKgotICAgICAqCQkgICBuCXNpbih4bikqc3F0Mgljb3MoeG4pKnNxdDIKLSAgICAgKgkJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgICAqCQkgICAwCSBzLWMJCSBjK3MKLSAgICAgKgkJICAgMQktcy1jIAkJLWMrcwotICAgICAqCQkgICAyCS1zK2MJCS1jLXMKLSAgICAgKgkJICAgMwkgcytjCQkgYy1zCi0gICAgICovCi0JCXN3aXRjaChuJjMpIHsKLQkJICAgIGNhc2UgMDogdGVtcCA9ICBjb3MoeCkrc2luKHgpOyBicmVhazsKLQkJICAgIGNhc2UgMTogdGVtcCA9IC1jb3MoeCkrc2luKHgpOyBicmVhazsKLQkJICAgIGNhc2UgMjogdGVtcCA9IC1jb3MoeCktc2luKHgpOyBicmVhazsKLQkJICAgIGNhc2UgMzogdGVtcCA9ICBjb3MoeCktc2luKHgpOyBicmVhazsKLQkJfQotCQliID0gaW52c3FydHBpKnRlbXAvc3FydCh4KTsKLQkgICAgfSBlbHNlIHsJCi0JICAgICAgICBhID0gX19pZWVlNzU0X2owKHgpOwotCSAgICAgICAgYiA9IF9faWVlZTc1NF9qMSh4KTsKLQkgICAgICAgIGZvcihpPTE7aTxuO2krKyl7Ci0JCSAgICB0ZW1wID0gYjsKLQkJICAgIGIgPSBiKigoZG91YmxlKShpK2kpL3gpIC0gYTsgLyogYXZvaWQgdW5kZXJmbG93ICovCi0JCSAgICBhID0gdGVtcDsKLQkgICAgICAgIH0KLQkgICAgfQotCX0gZWxzZSB7Ci0JICAgIGlmKGl4PDB4M2UxMDAwMDApIHsJLyogeCA8IDIqKi0yOSAqLwotICAgIC8qIHggaXMgdGlueSwgcmV0dXJuIHRoZSBmaXJzdCBUYXlsb3IgZXhwYW5zaW9uIG9mIEoobix4KSAKLSAgICAgKiBKKG4seCkgPSAxL24hKih4LzIpXm4gIC0gLi4uCi0gICAgICovCi0JCWlmKG4+MzMpCS8qIHVuZGVyZmxvdyAqLwotCQkgICAgYiA9IHplcm87Ci0JCWVsc2UgewotCQkgICAgdGVtcCA9IHgqMC41OyBiID0gdGVtcDsKLQkJICAgIGZvciAoYT1vbmUsaT0yO2k8PW47aSsrKSB7Ci0JCQlhICo9IChkb3VibGUpaTsJCS8qIGEgPSBuISAqLwotCQkJYiAqPSB0ZW1wOwkJLyogYiA9ICh4LzIpXm4gKi8KLQkJICAgIH0KLQkJICAgIGIgPSBiL2E7Ci0JCX0KLQkgICAgfSBlbHNlIHsKLQkJLyogdXNlIGJhY2t3YXJkIHJlY3VycmVuY2UgKi8KLQkJLyogCQkJeCAgICAgIHheMiAgICAgIHheMiAgICAgICAKLQkJICogIEoobix4KS9KKG4tMSx4KSA9ICAtLS0tICAgLS0tLS0tICAgLS0tLS0tICAgLi4uLi4KLQkJICoJCQkybiAgLSAyKG4rMSkgLSAyKG4rMikKLQkJICoKLQkJICogCQkJMSAgICAgIDEgICAgICAgIDEgICAgICAgCi0JCSAqICAoZm9yIGxhcmdlIHgpICAgPSAgLS0tLSAgLS0tLS0tICAgLS0tLS0tICAgLi4uLi4KLQkJICoJCQkybiAgIDIobisxKSAgIDIobisyKQotCQkgKgkJCS0tIC0gLS0tLS0tIC0gLS0tLS0tIC0gCi0JCSAqCQkJIHggICAgIHggICAgICAgICB4Ci0JCSAqCi0JCSAqIExldCB3ID0gMm4veCBhbmQgaD0yL3gsIHRoZW4gdGhlIGFib3ZlIHF1b3RpZW50Ci0JCSAqIGlzIGVxdWFsIHRvIHRoZSBjb250aW51ZWQgZnJhY3Rpb246Ci0JCSAqCQkgICAgMQotCQkgKgk9IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0JCSAqCQkgICAgICAgMQotCQkgKgkgICB3IC0gLS0tLS0tLS0tLS0tLS0tLS0KLQkJICoJCQkgIDEKLQkJICogCSAgICAgICAgdytoIC0gLS0tLS0tLS0tCi0JCSAqCQkgICAgICAgdysyaCAtIC4uLgotCQkgKgotCQkgKiBUbyBkZXRlcm1pbmUgaG93IG1hbnkgdGVybXMgbmVlZGVkLCBsZXQKLQkJICogUSgwKSA9IHcsIFEoMSkgPSB3KHcraCkgLSAxLAotCQkgKiBRKGspID0gKHcraypoKSpRKGstMSkgLSBRKGstMiksCi0JCSAqIFdoZW4gUShrKSA+IDFlNAlnb29kIGZvciBzaW5nbGUgCi0JCSAqIFdoZW4gUShrKSA+IDFlOQlnb29kIGZvciBkb3VibGUgCi0JCSAqIFdoZW4gUShrKSA+IDFlMTcJZ29vZCBmb3IgcXVhZHJ1cGxlIAotCQkgKi8KLQkgICAgLyogZGV0ZXJtaW5lIGsgKi8KLQkJZG91YmxlIHQsdjsKLQkJZG91YmxlIHEwLHExLGgsdG1wOyBpbnQzMl90IGssbTsKLQkJdyAgPSAobituKS8oZG91YmxlKXg7IGggPSAyLjAvKGRvdWJsZSl4OwotCQlxMCA9IHc7ICB6ID0gdytoOyBxMSA9IHcqeiAtIDEuMDsgaz0xOwotCQl3aGlsZShxMTwxLjBlOSkgewotCQkJayArPSAxOyB6ICs9IGg7Ci0JCQl0bXAgPSB6KnExIC0gcTA7Ci0JCQlxMCA9IHExOwotCQkJcTEgPSB0bXA7Ci0JCX0KLQkJbSA9IG4rbjsKLQkJZm9yKHQ9emVybywgaSA9IDIqKG4rayk7IGk+PW07IGkgLT0gMikgdCA9IG9uZS8oaS94LXQpOwotCQlhID0gdDsKLQkJYiA9IG9uZTsKLQkJLyogIGVzdGltYXRlIGxvZygoMi94KV5uKm4hKSA9IG4qbG9nKDIveCkrbipsbihuKQotCQkgKiAgSGVuY2UsIGlmIG4qKGxvZygybi94KSkgPiAuLi4KLQkJICogIHNpbmdsZSA4Ljg3MjI4MzkzNTVlKzAxCi0JCSAqICBkb3VibGUgNy4wOTc4MjcxMjg5MzM4Mzk3MzA5NmUrMDIKLQkJICogIGxvbmcgZG91YmxlIDEuMTM1NjUyMzQwNjI5NDE0Mzk0OTQ5MTkzMTA3Nzk3MDc2NTAwNjE3MGUrMDQKLQkJICogIHRoZW4gcmVjdXJyZW50IHZhbHVlIG1heSBvdmVyZmxvdyBhbmQgdGhlIHJlc3VsdCBpcwotCQkgKiAgbGlrZWx5IHVuZGVyZmxvdyB0byB6ZXJvCi0JCSAqLwotCQl0bXAgPSBuOwotCQl2ID0gdHdvL3g7Ci0JCXRtcCA9IHRtcCpfX2llZWU3NTRfbG9nKGZhYnModip0bXApKTsKLQkJaWYodG1wPDcuMDk3ODI3MTI4OTMzODM5NzMwOTZlKzAyKSB7Ci0JICAgIAkgICAgZm9yKGk9bi0xLGRpPShkb3VibGUpKGkraSk7aT4wO2ktLSl7Ci0JCSAgICAgICAgdGVtcCA9IGI7Ci0JCQliICo9IGRpOwotCQkJYiAgPSBiL3ggLSBhOwotCQkgICAgICAgIGEgPSB0ZW1wOwotCQkJZGkgLT0gdHdvOwotCSAgICAgCSAgICB9Ci0JCX0gZWxzZSB7Ci0JICAgIAkgICAgZm9yKGk9bi0xLGRpPShkb3VibGUpKGkraSk7aT4wO2ktLSl7Ci0JCSAgICAgICAgdGVtcCA9IGI7Ci0JCQliICo9IGRpOwotCQkJYiAgPSBiL3ggLSBhOwotCQkgICAgICAgIGEgPSB0ZW1wOwotCQkJZGkgLT0gdHdvOwotCQkgICAgLyogc2NhbGUgYiB0byBhdm9pZCBzcHVyaW91cyBvdmVyZmxvdyAqLwotCQkJaWYoYj4xZTEwMCkgewotCQkJICAgIGEgLz0gYjsKLQkJCSAgICB0IC89IGI7Ci0JCQkgICAgYiAgPSBvbmU7Ci0JCQl9Ci0JICAgICAJICAgIH0KLQkJfQotCSAgICAJYiA9ICh0Kl9faWVlZTc1NF9qMCh4KS9iKTsKLQkgICAgfQotCX0KLQlpZihzZ249PTEpIHJldHVybiAtYjsgZWxzZSByZXR1cm4gYjsKLX0KLQotZG91YmxlCi1fX2llZWU3NTRfeW4oaW50IG4sIGRvdWJsZSB4KQotewotCWludDMyX3QgaSxoeCxpeCxseDsKLQlpbnQzMl90IHNpZ247Ci0JZG91YmxlIGEsIGIsIHRlbXA7Ci0KLQlFWFRSQUNUX1dPUkRTKGh4LGx4LHgpOwotCWl4ID0gMHg3ZmZmZmZmZiZoeDsKLSAgICAvKiBpZiBZKG4sTmFOKSBpcyBOYU4gKi8KLQlpZigoaXh8KCh1X2ludDMyX3QpKGx4fC1seCkpPj4zMSk+MHg3ZmYwMDAwMCkgcmV0dXJuIHgreDsKLQlpZigoaXh8bHgpPT0wKSByZXR1cm4gLW9uZS96ZXJvOwotCWlmKGh4PDApIHJldHVybiB6ZXJvL3plcm87Ci0Jc2lnbiA9IDE7Ci0JaWYobjwwKXsKLQkJbiA9IC1uOwotCQlzaWduID0gMSAtICgobiYxKTw8MSk7Ci0JfQotCWlmKG49PTApIHJldHVybihfX2llZWU3NTRfeTAoeCkpOwotCWlmKG49PTEpIHJldHVybihzaWduKl9faWVlZTc1NF95MSh4KSk7Ci0JaWYoaXg9PTB4N2ZmMDAwMDApIHJldHVybiB6ZXJvOwotCWlmKGl4Pj0weDUyRDAwMDAwKSB7IC8qIHggPiAyKiozMDIgKi8KLSAgICAvKiAoeCA+PiBuKioyKSAKLSAgICAgKgkgICAgSm4oeCkgPSBjb3MoeC0oMm4rMSkqcGkvNCkqc3FydCgyL3gqcGkpCi0gICAgICoJICAgIFluKHgpID0gc2luKHgtKDJuKzEpKnBpLzQpKnNxcnQoMi94KnBpKQotICAgICAqCSAgICBMZXQgcz1zaW4oeCksIGM9Y29zKHgpLCAKLSAgICAgKgkJeG49eC0oMm4rMSkqcGkvNCwgc3F0MiA9IHNxcnQoMiksdGhlbgotICAgICAqCi0gICAgICoJCSAgIG4Jc2luKHhuKSpzcXQyCWNvcyh4bikqc3F0MgotICAgICAqCQktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgICoJCSAgIDAJIHMtYwkJIGMrcwotICAgICAqCQkgICAxCS1zLWMgCQktYytzCi0gICAgICoJCSAgIDIJLXMrYwkJLWMtcwotICAgICAqCQkgICAzCSBzK2MJCSBjLXMKLSAgICAgKi8KLQkJc3dpdGNoKG4mMykgewotCQkgICAgY2FzZSAwOiB0ZW1wID0gIHNpbih4KS1jb3MoeCk7IGJyZWFrOwotCQkgICAgY2FzZSAxOiB0ZW1wID0gLXNpbih4KS1jb3MoeCk7IGJyZWFrOwotCQkgICAgY2FzZSAyOiB0ZW1wID0gLXNpbih4KStjb3MoeCk7IGJyZWFrOwotCQkgICAgY2FzZSAzOiB0ZW1wID0gIHNpbih4KStjb3MoeCk7IGJyZWFrOwotCQl9Ci0JCWIgPSBpbnZzcXJ0cGkqdGVtcC9zcXJ0KHgpOwotCX0gZWxzZSB7Ci0JICAgIHVfaW50MzJfdCBoaWdoOwotCSAgICBhID0gX19pZWVlNzU0X3kwKHgpOwotCSAgICBiID0gX19pZWVlNzU0X3kxKHgpOwotCS8qIHF1aXQgaWYgYiBpcyAtaW5mICovCi0JICAgIEdFVF9ISUdIX1dPUkQoaGlnaCxiKTsKLQkgICAgZm9yKGk9MTtpPG4mJmhpZ2ghPTB4ZmZmMDAwMDA7aSsrKXsKLQkJdGVtcCA9IGI7Ci0JCWIgPSAoKGRvdWJsZSkoaStpKS94KSpiIC0gYTsKLQkJR0VUX0hJR0hfV09SRChoaWdoLGIpOwotCQlhID0gdGVtcDsKLQkgICAgfQotCX0KLQlpZihzaWduPjApIHJldHVybiBiOyBlbHNlIHJldHVybiAtYjsKLX0KZGlmZiAtLWdpdCBhL2xpYm0vc3JjL2Vfam5mLmMgYi9saWJtL3NyYy9lX2puZi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNjFmYjY4Li4wMDAwMDAwCi0tLSBhL2xpYm0vc3JjL2Vfam5mLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxOTYgKzAsMCBAQAotLyogZV9qbmYuYyAtLSBmbG9hdCB2ZXJzaW9uIG9mIGVfam4uYy4KLSAqIENvbnZlcnNpb24gdG8gZmxvYXQgYnkgSWFuIExhbmNlIFRheWxvciwgQ3lnbnVzIFN1cHBvcnQsIGlhbkBjeWdudXMuY29tLgotICovCi0KLS8qCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBDb3B5cmlnaHQgKEMpIDE5OTMgYnkgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIERldmVsb3BlZCBhdCBTdW5Qcm8sIGEgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBidXNpbmVzcy4KLSAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKLSAqIHNvZnR3YXJlIGlzIGZyZWVseSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoaXMgbm90aWNlCi0gKiBpcyBwcmVzZXJ2ZWQuCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKi8KLQotI2lmbmRlZiBsaW50Ci1zdGF0aWMgY2hhciByY3NpZFtdID0gIiRGcmVlQlNEOiBzcmMvbGliL21zdW4vc3JjL2Vfam5mLmMsdiAxLjggMjAwMi8wNS8yOCAxODoxNTowNCBhbGZyZWQgRXhwICQiOwotI2VuZGlmCi0KLSNpbmNsdWRlICJtYXRoLmgiCi0jaW5jbHVkZSAibWF0aF9wcml2YXRlLmgiCi0KLXN0YXRpYyBjb25zdCBmbG9hdAotaW52c3FydHBpPSAgNS42NDE4OTYxMjg3ZS0wMSwgLyogMHgzZjEwNmViYiAqLwotdHdvICAgPSAgMi4wMDAwMDAwMDAwZSswMCwgLyogMHg0MDAwMDAwMCAqLwotb25lICAgPSAgMS4wMDAwMDAwMDAwZSswMDsgLyogMHgzRjgwMDAwMCAqLwotCi1zdGF0aWMgY29uc3QgZmxvYXQgemVybyAgPSAgMC4wMDAwMDAwMDAwZSswMDsKLQotZmxvYXQKLV9faWVlZTc1NF9qbmYoaW50IG4sIGZsb2F0IHgpCi17Ci0JaW50MzJfdCBpLGh4LGl4LCBzZ247Ci0JZmxvYXQgYSwgYiwgdGVtcCwgZGk7Ci0JZmxvYXQgeiwgdzsKLQotICAgIC8qIEooLW4seCkgPSAoLTEpXm4gKiBKKG4sIHgpLCBKKG4sIC14KSA9ICgtMSlebiAqIEoobiwgeCkKLSAgICAgKiBUaHVzLCBKKC1uLHgpID0gSihuLC14KQotICAgICAqLwotCUdFVF9GTE9BVF9XT1JEKGh4LHgpOwotCWl4ID0gMHg3ZmZmZmZmZiZoeDsKLSAgICAvKiBpZiBKKG4sTmFOKSBpcyBOYU4gKi8KLQlpZihpeD4weDdmODAwMDAwKSByZXR1cm4geCt4OwotCWlmKG48MCl7Ci0JCW4gPSAtbjsKLQkJeCA9IC14OwotCQloeCBePSAweDgwMDAwMDAwOwotCX0KLQlpZihuPT0wKSByZXR1cm4oX19pZWVlNzU0X2owZih4KSk7Ci0JaWYobj09MSkgcmV0dXJuKF9faWVlZTc1NF9qMWYoeCkpOwotCXNnbiA9IChuJjEpJihoeD4+MzEpOwkvKiBldmVuIG4gLS0gMCwgb2RkIG4gLS0gc2lnbih4KSAqLwotCXggPSBmYWJzZih4KTsKLQlpZihpeD09MHx8aXg+PTB4N2Y4MDAwMDApIAkvKiBpZiB4IGlzIDAgb3IgaW5mICovCi0JICAgIGIgPSB6ZXJvOwotCWVsc2UgaWYoKGZsb2F0KW48PXgpIHsKLQkJLyogU2FmZSB0byB1c2UgSihuKzEseCk9Mm4veCAqSihuLHgpLUoobi0xLHgpICovCi0JICAgIGEgPSBfX2llZWU3NTRfajBmKHgpOwotCSAgICBiID0gX19pZWVlNzU0X2oxZih4KTsKLQkgICAgZm9yKGk9MTtpPG47aSsrKXsKLQkJdGVtcCA9IGI7Ci0JCWIgPSBiKigoZmxvYXQpKGkraSkveCkgLSBhOyAvKiBhdm9pZCB1bmRlcmZsb3cgKi8KLQkJYSA9IHRlbXA7Ci0JICAgIH0KLQl9IGVsc2UgewotCSAgICBpZihpeDwweDMwODAwMDAwKSB7CS8qIHggPCAyKiotMjkgKi8KLSAgICAvKiB4IGlzIHRpbnksIHJldHVybiB0aGUgZmlyc3QgVGF5bG9yIGV4cGFuc2lvbiBvZiBKKG4seCkKLSAgICAgKiBKKG4seCkgPSAxL24hKih4LzIpXm4gIC0gLi4uCi0gICAgICovCi0JCWlmKG4+MzMpCS8qIHVuZGVyZmxvdyAqLwotCQkgICAgYiA9IHplcm87Ci0JCWVsc2UgewotCQkgICAgdGVtcCA9IHgqKGZsb2F0KTAuNTsgYiA9IHRlbXA7Ci0JCSAgICBmb3IgKGE9b25lLGk9MjtpPD1uO2krKykgewotCQkJYSAqPSAoZmxvYXQpaTsJCS8qIGEgPSBuISAqLwotCQkJYiAqPSB0ZW1wOwkJLyogYiA9ICh4LzIpXm4gKi8KLQkJICAgIH0KLQkJICAgIGIgPSBiL2E7Ci0JCX0KLQkgICAgfSBlbHNlIHsKLQkJLyogdXNlIGJhY2t3YXJkIHJlY3VycmVuY2UgKi8KLQkJLyogCQkJeCAgICAgIHheMiAgICAgIHheMgotCQkgKiAgSihuLHgpL0oobi0xLHgpID0gIC0tLS0gICAtLS0tLS0gICAtLS0tLS0gICAuLi4uLgotCQkgKgkJCTJuICAtIDIobisxKSAtIDIobisyKQotCQkgKgotCQkgKiAJCQkxICAgICAgMSAgICAgICAgMQotCQkgKiAgKGZvciBsYXJnZSB4KSAgID0gIC0tLS0gIC0tLS0tLSAgIC0tLS0tLSAgIC4uLi4uCi0JCSAqCQkJMm4gICAyKG4rMSkgICAyKG4rMikKLQkJICoJCQktLSAtIC0tLS0tLSAtIC0tLS0tLSAtCi0JCSAqCQkJIHggICAgIHggICAgICAgICB4Ci0JCSAqCi0JCSAqIExldCB3ID0gMm4veCBhbmQgaD0yL3gsIHRoZW4gdGhlIGFib3ZlIHF1b3RpZW50Ci0JCSAqIGlzIGVxdWFsIHRvIHRoZSBjb250aW51ZWQgZnJhY3Rpb246Ci0JCSAqCQkgICAgMQotCQkgKgk9IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0JCSAqCQkgICAgICAgMQotCQkgKgkgICB3IC0gLS0tLS0tLS0tLS0tLS0tLS0KLQkJICoJCQkgIDEKLQkJICogCSAgICAgICAgdytoIC0gLS0tLS0tLS0tCi0JCSAqCQkgICAgICAgdysyaCAtIC4uLgotCQkgKgotCQkgKiBUbyBkZXRlcm1pbmUgaG93IG1hbnkgdGVybXMgbmVlZGVkLCBsZXQKLQkJICogUSgwKSA9IHcsIFEoMSkgPSB3KHcraCkgLSAxLAotCQkgKiBRKGspID0gKHcraypoKSpRKGstMSkgLSBRKGstMiksCi0JCSAqIFdoZW4gUShrKSA+IDFlNAlnb29kIGZvciBzaW5nbGUKLQkJICogV2hlbiBRKGspID4gMWU5CWdvb2QgZm9yIGRvdWJsZQotCQkgKiBXaGVuIFEoaykgPiAxZTE3CWdvb2QgZm9yIHF1YWRydXBsZQotCQkgKi8KLQkgICAgLyogZGV0ZXJtaW5lIGsgKi8KLQkJZmxvYXQgdCx2OwotCQlmbG9hdCBxMCxxMSxoLHRtcDsgaW50MzJfdCBrLG07Ci0JCXcgID0gKG4rbikvKGZsb2F0KXg7IGggPSAoZmxvYXQpMi4wLyhmbG9hdCl4OwotCQlxMCA9IHc7ICB6ID0gdytoOyBxMSA9IHcqeiAtIChmbG9hdCkxLjA7IGs9MTsKLQkJd2hpbGUocTE8KGZsb2F0KTEuMGU5KSB7Ci0JCQlrICs9IDE7IHogKz0gaDsKLQkJCXRtcCA9IHoqcTEgLSBxMDsKLQkJCXEwID0gcTE7Ci0JCQlxMSA9IHRtcDsKLQkJfQotCQltID0gbituOwotCQlmb3IodD16ZXJvLCBpID0gMioobitrKTsgaT49bTsgaSAtPSAyKSB0ID0gb25lLyhpL3gtdCk7Ci0JCWEgPSB0OwotCQliID0gb25lOwotCQkvKiAgZXN0aW1hdGUgbG9nKCgyL3gpXm4qbiEpID0gbipsb2coMi94KStuKmxuKG4pCi0JCSAqICBIZW5jZSwgaWYgbioobG9nKDJuL3gpKSA+IC4uLgotCQkgKiAgc2luZ2xlIDguODcyMjgzOTM1NWUrMDEKLQkJICogIGRvdWJsZSA3LjA5NzgyNzEyODkzMzgzOTczMDk2ZSswMgotCQkgKiAgbG9uZyBkb3VibGUgMS4xMzU2NTIzNDA2Mjk0MTQzOTQ5NDkxOTMxMDc3OTcwNzY1MDA2MTcwZSswNAotCQkgKiAgdGhlbiByZWN1cnJlbnQgdmFsdWUgbWF5IG92ZXJmbG93IGFuZCB0aGUgcmVzdWx0IGlzCi0JCSAqICBsaWtlbHkgdW5kZXJmbG93IHRvIHplcm8KLQkJICovCi0JCXRtcCA9IG47Ci0JCXYgPSB0d28veDsKLQkJdG1wID0gdG1wKl9faWVlZTc1NF9sb2dmKGZhYnNmKHYqdG1wKSk7Ci0JCWlmKHRtcDwoZmxvYXQpOC44NzIxNjc5Njg4ZSswMSkgewotCSAgICAJICAgIGZvcihpPW4tMSxkaT0oZmxvYXQpKGkraSk7aT4wO2ktLSl7Ci0JCSAgICAgICAgdGVtcCA9IGI7Ci0JCQliICo9IGRpOwotCQkJYiAgPSBiL3ggLSBhOwotCQkgICAgICAgIGEgPSB0ZW1wOwotCQkJZGkgLT0gdHdvOwotCSAgICAgCSAgICB9Ci0JCX0gZWxzZSB7Ci0JICAgIAkgICAgZm9yKGk9bi0xLGRpPShmbG9hdCkoaStpKTtpPjA7aS0tKXsKLQkJICAgICAgICB0ZW1wID0gYjsKLQkJCWIgKj0gZGk7Ci0JCQliICA9IGIveCAtIGE7Ci0JCSAgICAgICAgYSA9IHRlbXA7Ci0JCQlkaSAtPSB0d287Ci0JCSAgICAvKiBzY2FsZSBiIHRvIGF2b2lkIHNwdXJpb3VzIG92ZXJmbG93ICovCi0JCQlpZihiPihmbG9hdCkxZTEwKSB7Ci0JCQkgICAgYSAvPSBiOwotCQkJICAgIHQgLz0gYjsKLQkJCSAgICBiICA9IG9uZTsKLQkJCX0KLQkgICAgIAkgICAgfQotCQl9Ci0JICAgIAliID0gKHQqX19pZWVlNzU0X2owZih4KS9iKTsKLQkgICAgfQotCX0KLQlpZihzZ249PTEpIHJldHVybiAtYjsgZWxzZSByZXR1cm4gYjsKLX0KLQotZmxvYXQKLV9faWVlZTc1NF95bmYoaW50IG4sIGZsb2F0IHgpCi17Ci0JaW50MzJfdCBpLGh4LGl4LGliOwotCWludDMyX3Qgc2lnbjsKLQlmbG9hdCBhLCBiLCB0ZW1wOwotCi0JR0VUX0ZMT0FUX1dPUkQoaHgseCk7Ci0JaXggPSAweDdmZmZmZmZmJmh4OwotICAgIC8qIGlmIFkobixOYU4pIGlzIE5hTiAqLwotCWlmKGl4PjB4N2Y4MDAwMDApIHJldHVybiB4K3g7Ci0JaWYoaXg9PTApIHJldHVybiAtb25lL3plcm87Ci0JaWYoaHg8MCkgcmV0dXJuIHplcm8vemVybzsKLQlzaWduID0gMTsKLQlpZihuPDApewotCQluID0gLW47Ci0JCXNpZ24gPSAxIC0gKChuJjEpPDwxKTsKLQl9Ci0JaWYobj09MCkgcmV0dXJuKF9faWVlZTc1NF95MGYoeCkpOwotCWlmKG49PTEpIHJldHVybihzaWduKl9faWVlZTc1NF95MWYoeCkpOwotCWlmKGl4PT0weDdmODAwMDAwKSByZXR1cm4gemVybzsKLQotCWEgPSBfX2llZWU3NTRfeTBmKHgpOwotCWIgPSBfX2llZWU3NTRfeTFmKHgpOwotCS8qIHF1aXQgaWYgYiBpcyAtaW5mICovCi0JR0VUX0ZMT0FUX1dPUkQoaWIsYik7Ci0JZm9yKGk9MTsgaTxuICYmICgoKHVpbnQzMl90KWliKSAhPSAweGZmODAwMDAwKTsgaSsrKXsKLQkgICAgdGVtcCA9IGI7Ci0JICAgIGIgPSAoKGZsb2F0KShpK2kpL3gpKmIgLSBhOwotCSAgICBHRVRfRkxPQVRfV09SRChpYixiKTsKLQkgICAgYSA9IHRlbXA7Ci0JfQotCWlmKHNpZ24+MCkgcmV0dXJuIGI7IGVsc2UgcmV0dXJuIC1iOwotfQpkaWZmIC0tZ2l0IGEvbGlibS9zcmMvZV9sZGV4cGYuYyBiL2xpYm0vc3JjL2VfbGRleHBmLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg2Mjk3ZmMuLjAwMDAwMDAKLS0tIGEvbGlibS9zcmMvZV9sZGV4cGYuYworKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLS8qIGVfc2NhbGJmLmMgLS0gZmxvYXQgdmVyc2lvbiBvZiBlX3NjYWxiLmMuCi0gKiBDb252ZXJzaW9uIHRvIGZsb2F0IGJ5IElhbiBMYW5jZSBUYXlsb3IsIEN5Z251cyBTdXBwb3J0LCBpYW5AY3lnbnVzLmNvbS4KLSAqLwotCi0vKgotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogQ29weXJpZ2h0IChDKSAxOTkzIGJ5IFN1biBNaWNyb3N5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBEZXZlbG9wZWQgYXQgU3VuUHJvLCBhIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gYnVzaW5lc3MuCi0gKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCi0gKiBzb2Z0d2FyZSBpcyBmcmVlbHkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGlzIG5vdGljZQotICogaXMgcHJlc2VydmVkLgotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICovCi0jaW5jbHVkZSAibWF0aC5oIgotI2luY2x1ZGUgIm1hdGhfcHJpdmF0ZS5oIgotCi1mbG9hdAotX19pZWVlNzU0X2xkZXhwZihmbG9hdCB4LCBpbnQgZm4pCi17Ci0gICAgcmV0dXJuIF9faWVlZTc1NF9zY2FsYmYoeCxmbik7Ci19CmRpZmYgLS1naXQgYS9saWJtL3NyYy9lX2xnYW1tYS5jIGIvbGlibS9zcmMvZV9sZ2FtbWEuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODdhZDQxYS4uMDAwMDAwMAotLS0gYS9saWJtL3NyYy9lX2xnYW1tYS5jCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotCi0vKiBAKCMpZV9sZ2FtbWEuYyAxLjMgOTUvMDEvMTggKi8KLS8qCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBDb3B5cmlnaHQgKEMpIDE5OTMgYnkgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIERldmVsb3BlZCBhdCBTdW5Tb2Z0LCBhIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gYnVzaW5lc3MuCi0gKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCi0gKiBzb2Z0d2FyZSBpcyBmcmVlbHkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGlzIG5vdGljZSAKLSAqIGlzIHByZXNlcnZlZC4KLSAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqCi0gKi8KLQotI2lmbmRlZiBsaW50Ci1zdGF0aWMgY2hhciByY3NpZFtdID0gIiRGcmVlQlNEOiBzcmMvbGliL21zdW4vc3JjL2VfbGdhbW1hLmMsdiAxLjggMjAwNS8wMi8wNCAxODoyNjowNiBkYXMgRXhwICQiOwotI2VuZGlmCi0KLS8qIF9faWVlZTc1NF9sZ2FtbWEoeCkKLSAqIFJldHVybiB0aGUgbG9nYXJpdGhtIG9mIHRoZSBHYW1tYSBmdW5jdGlvbiBvZiB4LgotICoKLSAqIE1ldGhvZDogY2FsbCBfX2llZWU3NTRfbGdhbW1hX3IKLSAqLwotCi0jaW5jbHVkZSAibWF0aC5oIgotI2luY2x1ZGUgIm1hdGhfcHJpdmF0ZS5oIgotCi1leHRlcm4gaW50IHNpZ25nYW07Ci0KLWRvdWJsZQotX19pZWVlNzU0X2xnYW1tYShkb3VibGUgeCkKLXsKLQlyZXR1cm4gX19pZWVlNzU0X2xnYW1tYV9yKHgsJnNpZ25nYW0pOwotfQpkaWZmIC0tZ2l0IGEvbGlibS9zcmMvZV9sZ2FtbWFfci5jIGIvbGlibS9zcmMvZV9sZ2FtbWFfci5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2OGRiZmQwLi4wMDAwMDAwCi0tLSBhL2xpYm0vc3JjL2VfbGdhbW1hX3IuYworKysgL2Rldi9udWxsCkBAIC0xLDI5NyArMCwwIEBACi0KLS8qIEAoIyllX2xnYW1tYV9yLmMgMS4zIDk1LzAxLzE4ICovCi0vKgotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogQ29weXJpZ2h0IChDKSAxOTkzIGJ5IFN1biBNaWNyb3N5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBEZXZlbG9wZWQgYXQgU3VuU29mdCwgYSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGJ1c2luZXNzLgotICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcwotICogc29mdHdhcmUgaXMgZnJlZWx5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhpcyBub3RpY2UgCi0gKiBpcyBwcmVzZXJ2ZWQuCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKgotICovCi0KLSNpZm5kZWYgbGludAotc3RhdGljIGNoYXIgcmNzaWRbXSA9ICIkRnJlZUJTRDogc3JjL2xpYi9tc3VuL3NyYy9lX2xnYW1tYV9yLmMsdiAxLjggMjAwNS8wMi8wNCAxODoyNjowNiBkYXMgRXhwICQiOwotI2VuZGlmCi0KLS8qIF9faWVlZTc1NF9sZ2FtbWFfcih4LCBzaWduZ2FtcCkKLSAqIFJlZW50cmFudCB2ZXJzaW9uIG9mIHRoZSBsb2dhcml0aG0gb2YgdGhlIEdhbW1hIGZ1bmN0aW9uIAotICogd2l0aCB1c2VyIHByb3ZpZGUgcG9pbnRlciBmb3IgdGhlIHNpZ24gb2YgR2FtbWEoeCkuIAotICoKLSAqIE1ldGhvZDoKLSAqICAgMS4gQXJndW1lbnQgUmVkdWN0aW9uIGZvciAwIDwgeCA8PSA4Ci0gKiAJU2luY2UgZ2FtbWEoMStzKT1zKmdhbW1hKHMpLCBmb3IgeCBpbiBbMCw4XSwgd2UgbWF5IAotICogCXJlZHVjZSB4IHRvIGEgbnVtYmVyIGluIFsxLjUsMi41XSBieQotICogCQlsZ2FtbWEoMStzKSA9IGxvZyhzKSArIGxnYW1tYShzKQotICoJZm9yIGV4YW1wbGUsCi0gKgkJbGdhbW1hKDcuMykgPSBsb2coNi4zKSArIGxnYW1tYSg2LjMpCi0gKgkJCSAgICA9IGxvZyg2LjMqNS4zKSArIGxnYW1tYSg1LjMpCi0gKgkJCSAgICA9IGxvZyg2LjMqNS4zKjQuMyozLjMqMi4zKSArIGxnYW1tYSgyLjMpCi0gKiAgIDIuIFBvbHlub21pYWwgYXBwcm94aW1hdGlvbiBvZiBsZ2FtbWEgYXJvdW5kIGl0cwotICoJbWluaW11biB5bWluPTEuNDYxNjMyMTQ0OTY4MzYyMjQ1IHRvIG1haW50YWluIG1vbm90b25pY2l0eS4KLSAqCU9uIFt5bWluLTAuMjMsIHltaW4rMC4yN10gKGkuZS4sIFsxLjIzMTY0LDEuNzMxNjNdKSwgdXNlCi0gKgkJTGV0IHogPSB4LXltaW47Ci0gKgkJbGdhbW1hKHgpID0gLTEuMjE0ODYyOTA1MzU4NDk2MDc4MjE4ICsgel4yKnBvbHkoeikKLSAqCXdoZXJlCi0gKgkJcG9seSh6KSBpcyBhIDE0IGRlZ3JlZSBwb2x5bm9taWFsLgotICogICAyLiBSYXRpb25hbCBhcHByb3hpbWF0aW9uIGluIHRoZSBwcmltYXJ5IGludGVydmFsIFsyLDNdCi0gKglXZSB1c2UgdGhlIGZvbGxvd2luZyBhcHByb3hpbWF0aW9uOgotICoJCXMgPSB4LTIuMDsKLSAqCQlsZ2FtbWEoeCkgPSAwLjUqcyArIHMqUChzKS9RKHMpCi0gKgl3aXRoIGFjY3VyYWN5Ci0gKgkJfFAvUSAtIChsZ2FtbWEoeCktMC41cyl8IDwgMioqLTYxLjcxCi0gKglPdXIgYWxnb3JpdGhtcyBhcmUgYmFzZWQgb24gdGhlIGZvbGxvd2luZyBvYnNlcnZhdGlvbgotICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6ZXRhKDIpLTEgICAgMiAgICB6ZXRhKDMpLTEgICAgMwotICogbGdhbW1hKDIrcykgPSBzKigxLUV1bGVyKSArIC0tLS0tLS0tLSAqIHMgIC0gIC0tLS0tLS0tLSAqIHMgICsgLi4uCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIgICAgICAgICAgICAgICAgIDMKLSAqCi0gKgl3aGVyZSBFdWxlciA9IDAuNTc3MS4uLiBpcyB0aGUgRXVsZXIgY29uc3RhbnQsIHdoaWNoIGlzIHZlcnkKLSAqCWNsb3NlIHRvIDAuNS4KLSAqCi0gKiAgIDMuIEZvciB4Pj04LCB3ZSBoYXZlCi0gKglsZ2FtbWEoeCl+KHgtMC41KWxvZyh4KS14KzAuNSpsb2coMnBpKSsxLygxMngpLTEvKDM2MHgqKjMpKy4uLi4KLSAqCShiZXR0ZXIgZm9ybXVsYToKLSAqCSAgIGxnYW1tYSh4KX4oeC0wLjUpKihsb2coeCktMSktLjUqKGxvZygycGkpLTEpICsgLi4uKQotICoJTGV0IHogPSAxL3gsIHRoZW4gd2UgYXBwcm94aW1hdGlvbgotICoJCWYoeikgPSBsZ2FtbWEoeCkgLSAoeC0wLjUpKGxvZyh4KS0xKQotICoJYnkKLSAqCSAgCQkJICAgIDMgICAgICAgNSAgICAgICAgICAgICAxMQotICoJCXcgPSB3MCArIHcxKnogKyB3Mip6ICArIHczKnogICsgLi4uICsgdzYqegotICoJd2hlcmUgCi0gKgkJfHcgLSBmKHopfCA8IDIqKi01OC43NAotICoJCQotICogICA0LiBGb3IgbmVnYXRpdmUgeCwgc2luY2UgKEcgaXMgZ2FtbWEgZnVuY3Rpb24pCi0gKgkJLXgqRygteCkqRyh4KSA9IHBpL3NpbihwaSp4KSwKLSAqIAl3ZSBoYXZlCi0gKiAJCUcoeCkgPSBwaS8oc2luKHBpKngpKigteCkqRygteCkpCi0gKglzaW5jZSBHKC14KSBpcyBwb3NpdGl2ZSwgc2lnbihHKHgpKSA9IHNpZ24oc2luKHBpKngpKSBmb3IgeDwwCi0gKglIZW5jZSwgZm9yIHg8MCwgc2lnbmdhbSA9IHNpZ24oc2luKHBpKngpKSBhbmQgCi0gKgkJbGdhbW1hKHgpID0gbG9nKHxHYW1tYSh4KXwpCi0gKgkJCSAgPSBsb2cocGkvKHx4KnNpbihwaSp4KXwpKSAtIGxnYW1tYSgteCk7Ci0gKglOb3RlOiBvbmUgc2hvdWxkIGF2b2lkIGNvbXB1dGUgcGkqKC14KSBkaXJlY3RseSBpbiB0aGUgCi0gKgkgICAgICBjb21wdXRhdGlvbiBvZiBzaW4ocGkqKC14KSkuCi0gKgkJCi0gKiAgIDUuIFNwZWNpYWwgQ2FzZXMKLSAqCQlsZ2FtbWEoMitzKSB+IHMqKDEtRXVsZXIpIGZvciB0aW55IHMKLSAqCQlsZ2FtbWEoMSk9bGdhbW1hKDIpPTAKLSAqCQlsZ2FtbWEoeCkgfiAtbG9nKHgpIGZvciB0aW55IHgKLSAqCQlsZ2FtbWEoMCkgPSBsZ2FtbWEoaW5mKSA9IGluZgotICoJIAlsZ2FtbWEoLWludGVnZXIpID0gKy1pbmYKLSAqCQotICovCi0KLSNpbmNsdWRlICJtYXRoLmgiCi0jaW5jbHVkZSAibWF0aF9wcml2YXRlLmgiCi0KLXN0YXRpYyBjb25zdCBkb3VibGUKLXR3bzUyPSAgNC41MDM1OTk2MjczNzA0OTYwMDAwMGUrMTUsIC8qIDB4NDMzMDAwMDAsIDB4MDAwMDAwMDAgKi8KLWhhbGY9ICA1LjAwMDAwMDAwMDAwMDAwMDAwMDAwZS0wMSwgLyogMHgzRkUwMDAwMCwgMHgwMDAwMDAwMCAqLwotb25lID0gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDBlKzAwLCAvKiAweDNGRjAwMDAwLCAweDAwMDAwMDAwICovCi1waSAgPSAgMy4xNDE1OTI2NTM1ODk3OTMxMTYwMGUrMDAsIC8qIDB4NDAwOTIxRkIsIDB4NTQ0NDJEMTggKi8KLWEwICA9ICA3LjcyMTU2NjQ5MDE1MzI4NjU1NDk0ZS0wMiwgLyogMHgzRkIzQzQ2NywgMHhFMzdEQjBDOCAqLwotYTEgID0gIDMuMjI0NjcwMzM0MjQxMTM1OTE2MTFlLTAxLCAvKiAweDNGRDRBMzRDLCAweEM0QTYwRkFEICovCi1hMiAgPSAgNi43MzUyMzAxMDUzMTI5MjY4MTgyNGUtMDIsIC8qIDB4M0ZCMTNFMDAsIDB4MUE1NTYyQTcgKi8KLWEzICA9ICAyLjA1ODA4MDg0MzI1MTY3MzMyODA2ZS0wMiwgLyogMHgzRjk1MTMyMiwgMHhBQzkyNTQ3QiAqLwotYTQgID0gIDcuMzg1NTUwODYwODE0MDI4ODM5NTdlLTAzLCAvKiAweDNGN0U0MDRGLCAweEI2OEZFRkU4ICovCi1hNSAgPSAgMi44OTA1MTM4MzY3MzQxNTYyOTA5MWUtMDMsIC8qIDB4M0Y2N0FERDgsIDB4Q0NCNzkyNkIgKi8KLWE2ICA9ICAxLjE5MjcwNzYzMTgzMzYyMDY3ODQ1ZS0wMywgLyogMHgzRjUzOEE5NCwgMHgxMTZGM0Y1RCAqLwotYTcgID0gIDUuMTAwNjk3OTIxNTM1MTEzMzY2MDhlLTA0LCAvKiAweDNGNDBCNkM2LCAweDg5Qjk5QzAwICovCi1hOCAgPSAgMi4yMDg2Mjc5MDcxMzkwODM4NTU1N2UtMDQsIC8qIDB4M0YyQ0YyRUMsIDB4RUQxMEU1NEQgKi8KLWE5ICA9ICAxLjA4MDExNTY3MjQ3NTgzOTM5OTU0ZS0wNCwgLyogMHgzRjFDNTA4OCwgMHg5ODdERkIwNyAqLwotYTEwID0gIDIuNTIxNDQ1NjU0NTEyNTczMjY5MzllLTA1LCAvKiAweDNFRkE3MDc0LCAweDQyOENGQTUyICovCi1hMTEgPSAgNC40ODY0MDk0OTYxODkxNTE2MDE1MGUtMDUsIC8qIDB4M0YwNzg1OEUsIDB4OTBBNDU4MzcgKi8KLXRjICA9ICAxLjQ2MTYzMjE0NDk2ODM2MjI0NTc2ZSswMCwgLyogMHgzRkY3NjJEOCwgMHg2MzU2QkUzRiAqLwotdGYgID0gLTEuMjE0ODYyOTA1MzU4NDk2MTE0NjFlLTAxLCAvKiAweEJGQkYxOUI5LCAweEJDQzM4QTQyICovCi0vKiB0dCA9IC0odGFpbCBvZiB0ZikgKi8KLXR0ICA9IC0zLjYzODY3Njk5NzAzOTUwNTM2NTQxZS0xOCwgLyogMHhCQzUwQzdDQSwgMHhBNDhBOTcxRiAqLwotdDAgID0gIDQuODM4MzYxMjI3MjM4MTAwNDcwNDJlLTAxLCAvKiAweDNGREVGNzJCLCAweEM4RUUzOEEyICovCi10MSAgPSAtMS40NzU4NzcyMjk5NDU5MzkxMTc1MmUtMDEsIC8qIDB4QkZDMkU0MjcsIDB4OERDNkM1MDkgKi8KLXQyICA9ICA2LjQ2MjQ5NDAyMzkxMzMzODU0Nzc4ZS0wMiwgLyogMHgzRkIwOEI0MiwgMHg5NEQ1NDE5QiAqLwotdDMgID0gLTMuMjc4ODU0MTA3NTk4NTk2NDk1NjVlLTAyLCAvKiAweEJGQTBDOUE4LCAweERGMzVCNzEzICovCi10NCAgPSAgMS43OTcwNjc1MDgxMTgyMDM4NzEyNmUtMDIsIC8qIDB4M0Y5MjY2RTcsIDB4OTcwQUY5RUMgKi8KLXQ1ICA9IC0xLjAzMTQyMjQxMjk4MzQxNDM3NDUwZS0wMiwgLyogMHhCRjg1MUY5RiwgMHhCQTkxRUM2QSAqLwotdDYgID0gIDYuMTAwNTM4NzAyNDYyOTEzMzI2MzVlLTAzLCAvKiAweDNGNzhGQ0UwLCAweEUzNzBFMzQ0ICovCi10NyAgPSAtMy42ODQ1MjAxNjc4MTEzODI1Njc2MGUtMDMsIC8qIDB4QkY2RTJFRkYsIDB4QjNFOTE0RDcgKi8KLXQ4ICA9ICAyLjI1OTY0NzgwOTAwNjEyNDcyMjUwZS0wMywgLyogMHgzRjYyODJEMywgMHgyRTE1QzkxNSAqLwotdDkgID0gLTEuNDAzNDY0Njk5ODkyMzI4NDM4MTNlLTAzLCAvKiAweEJGNTZGRThFLCAweEJGMkQxQUYxICovCi10MTAgPSAgOC44MTA4MTg4MjQzNzY1NDAxMTM4MmUtMDQsIC8qIDB4M0Y0Q0RGMEMsIDB4RUY2MUE4RTkgKi8KLXQxMSA9IC01LjM4NTk1MzA1MzU2NzQwNTQ2NzE1ZS0wNCwgLyogMHhCRjQxQTYxMCwgMHg5QzczRTBFQyAqLwotdDEyID0gIDMuMTU2MzIwNzA5MDM2MjU5NTAzNjFlLTA0LCAvKiAweDNGMzRBRjZELCAweDZDMEVCQkY3ICovCi10MTMgPSAtMy4xMjc1NDE2ODM3NTEyMDg2MDUxOGUtMDQsIC8qIDB4QkYzNDdGMjQsIDB4RUNDMzhDMzggKi8KLXQxNCA9ICAzLjM1NTI5MTkyNjM1NTE5MDczNTQzZS0wNCwgLyogMHgzRjM1RkQzRSwgMHhFOEMyRDNGNCAqLwotdTAgID0gLTcuNzIxNTY2NDkwMTUzMjg2NTU0OTRlLTAyLCAvKiAweEJGQjNDNDY3LCAweEUzN0RCMEM4ICovCi11MSAgPSAgNi4zMjgyNzA2NDAyNTA5MzM2NjUxN2UtMDEsIC8qIDB4M0ZFNDQwMUUsIDB4OEIwMDVERkYgKi8KLXUyICA9ICAxLjQ1NDkyMjUwMTM3MjM0NzY4NzM3ZSswMCwgLyogMHgzRkY3NDc1QywgMHhEMTE5QkQ2RiAqLwotdTMgID0gIDkuNzc3MTc1Mjc5NjMzNzI3NDU2MDNlLTAxLCAvKiAweDNGRUY0OTc2LCAweDQ0RUE4NDUwICovCi11NCAgPSAgMi4yODk2MzcyODA2NDY5MjQ1MTA5MmUtMDEsIC8qIDB4M0ZDRDRFQUUsIDB4RjYwMTA5MjQgKi8KLXU1ICA9ICAxLjMzODEwOTE4NTM2Nzg3NjYwMzc3ZS0wMiwgLyogMHgzRjhCNjc4QiwgMHhCRjJCQUIwOSAqLwotdjEgID0gIDIuNDU1OTc3OTM3MTMwNDExMzQ4MjJlKzAwLCAvKiAweDQwMDNBNUQ3LCAweEMyQkQ2MTlDICovCi12MiAgPSAgMi4xMjg0ODk3NjM3OTg5MzM5NTM2MWUrMDAsIC8qIDB4NDAwMTA3MjUsIDB4QTQyQjE4RjUgKi8KLXYzICA9ICA3LjY5Mjg1MTUwNDU2NjcyNzgzODI1ZS0wMSwgLyogMHgzRkU4OURGQiwgMHhFNDUwNTBBRiAqLwotdjQgID0gIDEuMDQyMjI2NDU1OTMzNjkxMzQyNTRlLTAxLCAvKiAweDNGQkFBRTU1LCAweEQ2NTM3Qzg4ICovCi12NSAgPSAgMy4yMTcwOTI0MjI4MjQyMzkxMTgxMGUtMDMsIC8qIDB4M0Y2QTVBQkIsIDB4NTdEMENGNjEgKi8KLXMwICA9IC03LjcyMTU2NjQ5MDE1MzI4NjU1NDk0ZS0wMiwgLyogMHhCRkIzQzQ2NywgMHhFMzdEQjBDOCAqLwotczEgID0gIDIuMTQ5ODI0MTU5NjA2MDg4NTI1MDFlLTAxLCAvKiAweDNGQ0I4NDhCLCAweDM2RTIwODc4ICovCi1zMiAgPSAgMy4yNTc3ODc5NjQwODkzMDk4MTc4N2UtMDEsIC8qIDB4M0ZENEQ5OEYsIDB4NEYxMzlGNTkgKi8KLXMzICA9ICAxLjQ2MzUwNDcyNjUyNDY0NDUyODA1ZS0wMSwgLyogMHgzRkMyQkI5QywgMHhCRUU1RjJGNyAqLwotczQgID0gIDIuNjY0MjI3MDMwMzM2Mzg2MDk1NjBlLTAyLCAvKiAweDNGOUI0ODFDLCAweDdFOTM5OTYxICovCi1zNSAgPSAgMS44NDAyODQ1MTQwNzMzNzcxNTY1MmUtMDMsIC8qIDB4M0Y1RTI2QjYsIDB4NzM2OEYyMzkgKi8KLXM2ICA9ICAzLjE5NDc1MzI2NTg0MTAwODY3NjE3ZS0wNSwgLyogMHgzRjAwQkZFQywgMHhERDE3RTk0NSAqLwotcjEgID0gIDEuMzkyMDA1MzM0Njc2MjEwNDU5NThlKzAwLCAvKiAweDNGRjY0NUE3LCAweDYyQzRBQjc0ICovCi1yMiAgPSAgNy4yMTkzNTU0NzU2NzEzODA2OTUyNWUtMDEsIC8qIDB4M0ZFNzFBMTgsIDB4OTNEM0RDREMgKi8KLXIzICA9ICAxLjcxOTMzODY1NjMyODAzMDc4OTkzZS0wMSwgLyogMHgzRkM2MDFFRCwgMHhDQ0ZCREYyNyAqLwotcjQgID0gIDEuODY0NTkxOTE3MTU2NTI5MDEzNDRlLTAyLCAvKiAweDNGOTMxN0VBLCAweDc0MkVENDc1ICovCi1yNSAgPSAgNy43Nzk0MjQ5NjM4MTg5MzU5NjQzNGUtMDQsIC8qIDB4M0Y0OTdEREEsIDB4Q0E0MUE5NUIgKi8KLXI2ICA9ICA3LjMyNjY4NDMwNzQ0NjI1NjM2MTg5ZS0wNiwgLyogMHgzRURFQkFGNywgMHhBNUIzODE0MCAqLwotdzAgID0gIDQuMTg5Mzg1MzMyMDQ2NzI3MjUwNTJlLTAxLCAvKiAweDNGREFDRkUzLCAweDkwQzk3RDY5ICovCi13MSAgPSAgOC4zMzMzMzMzMzMzMzMyOTY3ODg0OWUtMDIsIC8qIDB4M0ZCNTU1NTUsIDB4NTU1NTU1M0IgKi8KLXcyICA9IC0yLjc3Nzc3Nzc3NzI4Nzc1NTM2NDcwZS0wMywgLyogMHhCRjY2QzE2QywgMHgxNkIwMkU1QyAqLwotdzMgID0gIDcuOTM2NTA1NTg2NDMwMTk1NTg1MDBlLTA0LCAvKiAweDNGNEEwMTlGLCAweDk4Q0YzOEI2ICovCi13NCAgPSAtNS45NTE4NzU1NzQ1MDMzOTk2MzEzNWUtMDQsIC8qIDB4QkY0MzgwQ0IsIDB4OEMwRkU3NDEgKi8KLXc1ICA9ICA4LjM2MzM5OTE4OTk2MjgyMTM5MTI2ZS0wNCwgLyogMHgzRjRCNjdCQSwgMHg0Q0RBRDVEMSAqLwotdzYgID0gLTEuNjMwOTI5MzQwOTY1NzUyNzM5ODllLTAzOyAvKiAweEJGNUFCODlELCAweDBCOUU0M0U0ICovCi0KLXN0YXRpYyBjb25zdCBkb3VibGUgemVybz0gIDAuMDAwMDAwMDAwMDAwMDAwMDAwMDBlKzAwOwotCi0Jc3RhdGljIGRvdWJsZSBzaW5fcGkoZG91YmxlIHgpCi17Ci0JZG91YmxlIHksejsKLQlpbnQgbixpeDsKLQotCUdFVF9ISUdIX1dPUkQoaXgseCk7Ci0JaXggJj0gMHg3ZmZmZmZmZjsKLQotCWlmKGl4PDB4M2ZkMDAwMDApIHJldHVybiBfX2tlcm5lbF9zaW4ocGkqeCx6ZXJvLDApOwotCXkgPSAteDsJCS8qIHggaXMgYXNzdW1lIG5lZ2F0aXZlICovCi0KLSAgICAvKgotICAgICAqIGFyZ3VtZW50IHJlZHVjdGlvbiwgbWFrZSBzdXJlIGluZXhhY3QgZmxhZyBub3QgcmFpc2VkIGlmIGlucHV0Ci0gICAgICogaXMgYW4gaW50ZWdlcgotICAgICAqLwotCXogPSBmbG9vcih5KTsKLQlpZih6IT15KSB7CQkJCS8qIGluZXhhY3QgYW55d2F5ICovCi0JICAgIHkgICo9IDAuNTsKLQkgICAgeSAgID0gMi4wKih5IC0gZmxvb3IoeSkpOwkJLyogeSA9IHx4fCBtb2QgMi4wICovCi0JICAgIG4gICA9IChpbnQpICh5KjQuMCk7Ci0JfSBlbHNlIHsKLSAgICAgICAgICAgIGlmKGl4Pj0weDQzNDAwMDAwKSB7Ci0gICAgICAgICAgICAgICAgeSA9IHplcm87IG4gPSAwOyAgICAgICAgICAgICAgICAgLyogeSBtdXN0IGJlIGV2ZW4gKi8KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYoaXg8MHg0MzMwMDAwMCkgeiA9IHkrdHdvNTI7CS8qIGV4YWN0ICovCi0JCUdFVF9MT1dfV09SRChuLHopOwotCQluICY9IDE7Ci0gICAgICAgICAgICAgICAgeSAgPSBuOwotICAgICAgICAgICAgICAgIG48PD0gMjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCXN3aXRjaCAobikgewotCSAgICBjYXNlIDA6ICAgeSA9ICBfX2tlcm5lbF9zaW4ocGkqeSx6ZXJvLDApOyBicmVhazsKLQkgICAgY2FzZSAxOiAgIAotCSAgICBjYXNlIDI6ICAgeSA9ICBfX2tlcm5lbF9jb3MocGkqKDAuNS15KSx6ZXJvKTsgYnJlYWs7Ci0JICAgIGNhc2UgMzogIAotCSAgICBjYXNlIDQ6ICAgeSA9ICBfX2tlcm5lbF9zaW4ocGkqKG9uZS15KSx6ZXJvLDApOyBicmVhazsKLQkgICAgY2FzZSA1OgotCSAgICBjYXNlIDY6ICAgeSA9IC1fX2tlcm5lbF9jb3MocGkqKHktMS41KSx6ZXJvKTsgYnJlYWs7Ci0JICAgIGRlZmF1bHQ6ICB5ID0gIF9fa2VybmVsX3NpbihwaSooeS0yLjApLHplcm8sMCk7IGJyZWFrOwotCSAgICB9Ci0JcmV0dXJuIC15OwotfQotCi0KLWRvdWJsZQotX19pZWVlNzU0X2xnYW1tYV9yKGRvdWJsZSB4LCBpbnQgKnNpZ25nYW1wKQotewotCWRvdWJsZSB0LHkseixuYWRqLHAscDEscDIscDMscSxyLHc7Ci0JaW50IGksaHgsbHgsaXg7Ci0KLQlFWFRSQUNUX1dPUkRTKGh4LGx4LHgpOwotCi0gICAgLyogcHVyZ2Ugb2ZmICstaW5mLCBOYU4sICstMCwgYW5kIG5lZ2F0aXZlIGFyZ3VtZW50cyAqLwotCSpzaWduZ2FtcCA9IDE7Ci0JaXggPSBoeCYweDdmZmZmZmZmOwotCWlmKGl4Pj0weDdmZjAwMDAwKSByZXR1cm4geCp4OwotCWlmKChpeHxseCk9PTApIHJldHVybiBvbmUvemVybzsKLQlpZihpeDwweDNiOTAwMDAwKSB7CS8qIHx4fDwyKiotNzAsIHJldHVybiAtbG9nKHx4fCkgKi8KLQkgICAgaWYoaHg8MCkgewotCSAgICAgICAgKnNpZ25nYW1wID0gLTE7Ci0JICAgICAgICByZXR1cm4gLV9faWVlZTc1NF9sb2coLXgpOwotCSAgICB9IGVsc2UgcmV0dXJuIC1fX2llZWU3NTRfbG9nKHgpOwotCX0KLQlpZihoeDwwKSB7Ci0JICAgIGlmKGl4Pj0weDQzMzAwMDAwKSAJLyogfHh8Pj0yKio1MiwgbXVzdCBiZSAtaW50ZWdlciAqLwotCQlyZXR1cm4gb25lL3plcm87Ci0JICAgIHQgPSBzaW5fcGkoeCk7Ci0JICAgIGlmKHQ9PXplcm8pIHJldHVybiBvbmUvemVybzsgLyogLWludGVnZXIgKi8KLQkgICAgbmFkaiA9IF9faWVlZTc1NF9sb2cocGkvZmFicyh0KngpKTsKLQkgICAgaWYodDx6ZXJvKSAqc2lnbmdhbXAgPSAtMTsKLQkgICAgeCA9IC14OwotCX0KLQotICAgIC8qIHB1cmdlIG9mZiAxIGFuZCAyICovCi0JaWYoKCgoaXgtMHgzZmYwMDAwMCl8bHgpPT0wKXx8KCgoaXgtMHg0MDAwMDAwMCl8bHgpPT0wKSkgciA9IDA7Ci0gICAgLyogZm9yIHggPCAyLjAgKi8KLQllbHNlIGlmKGl4PDB4NDAwMDAwMDApIHsKLQkgICAgaWYoaXg8PTB4M2ZlY2NjY2MpIHsgCS8qIGxnYW1tYSh4KSA9IGxnYW1tYSh4KzEpLWxvZyh4KSAqLwotCQlyID0gLV9faWVlZTc1NF9sb2coeCk7Ci0JCWlmKGl4Pj0weDNGRTc2OTQ0KSB7eSA9IG9uZS14OyBpPSAwO30KLQkJZWxzZSBpZihpeD49MHgzRkNEQTY2MSkge3k9IHgtKHRjLW9uZSk7IGk9MTt9Ci0JICAJZWxzZSB7eSA9IHg7IGk9Mjt9Ci0JICAgIH0gZWxzZSB7Ci0JICAJciA9IHplcm87Ci0JICAgICAgICBpZihpeD49MHgzRkZCQjRDMykge3k9Mi4wLXg7aT0wO30gLyogWzEuNzMxNiwyXSAqLwotCSAgICAgICAgZWxzZSBpZihpeD49MHgzRkYzQjRDNCkge3k9eC10YztpPTE7fSAvKiBbMS4yMywxLjczXSAqLwotCQllbHNlIHt5PXgtb25lO2k9Mjt9Ci0JICAgIH0KLQkgICAgc3dpdGNoKGkpIHsKLQkgICAgICBjYXNlIDA6Ci0JCXogPSB5Knk7Ci0JCXAxID0gYTAreiooYTIreiooYTQreiooYTYreiooYTgreiphMTApKSkpOwotCQlwMiA9IHoqKGExK3oqKGEzK3oqKGE1K3oqKGE3K3oqKGE5K3oqYTExKSkpKSk7Ci0JCXAgID0geSpwMStwMjsKLQkJciAgKz0gKHAtMC41KnkpOyBicmVhazsKLQkgICAgICBjYXNlIDE6Ci0JCXogPSB5Knk7Ci0JCXcgPSB6Knk7Ci0JCXAxID0gdDArdyoodDMrdyoodDYrdyoodDkgK3cqdDEyKSkpOwkvKiBwYXJhbGxlbCBjb21wICovCi0JCXAyID0gdDErdyoodDQrdyoodDcrdyoodDEwK3cqdDEzKSkpOwotCQlwMyA9IHQyK3cqKHQ1K3cqKHQ4K3cqKHQxMSt3KnQxNCkpKTsKLQkJcCAgPSB6KnAxLSh0dC13KihwMit5KnAzKSk7Ci0JCXIgKz0gKHRmICsgcCk7IGJyZWFrOwotCSAgICAgIGNhc2UgMjoJCi0JCXAxID0geSoodTAreSoodTEreSoodTIreSoodTMreSoodTQreSp1NSkpKSkpOwotCQlwMiA9IG9uZSt5Kih2MSt5Kih2Mit5Kih2Myt5Kih2NCt5KnY1KSkpKTsKLQkJciArPSAoLTAuNSp5ICsgcDEvcDIpOwotCSAgICB9Ci0JfQotCWVsc2UgaWYoaXg8MHg0MDIwMDAwMCkgeyAJCQkvKiB4IDwgOC4wICovCi0JICAgIGkgPSAoaW50KXg7Ci0JICAgIHQgPSB6ZXJvOwotCSAgICB5ID0geC0oZG91YmxlKWk7Ci0JICAgIHAgPSB5KihzMCt5KihzMSt5KihzMit5KihzMyt5KihzNCt5KihzNSt5KnM2KSkpKSkpOwotCSAgICBxID0gb25lK3kqKHIxK3kqKHIyK3kqKHIzK3kqKHI0K3kqKHI1K3kqcjYpKSkpKTsKLQkgICAgciA9IGhhbGYqeStwL3E7Ci0JICAgIHogPSBvbmU7CS8qIGxnYW1tYSgxK3MpID0gbG9nKHMpICsgbGdhbW1hKHMpICovCi0JICAgIHN3aXRjaChpKSB7Ci0JICAgIGNhc2UgNzogeiAqPSAoeSs2LjApOwkvKiBGQUxMVEhSVSAqLwotCSAgICBjYXNlIDY6IHogKj0gKHkrNS4wKTsJLyogRkFMTFRIUlUgKi8KLQkgICAgY2FzZSA1OiB6ICo9ICh5KzQuMCk7CS8qIEZBTExUSFJVICovCi0JICAgIGNhc2UgNDogeiAqPSAoeSszLjApOwkvKiBGQUxMVEhSVSAqLwotCSAgICBjYXNlIDM6IHogKj0gKHkrMi4wKTsJLyogRkFMTFRIUlUgKi8KLQkJICAgIHIgKz0gX19pZWVlNzU0X2xvZyh6KTsgYnJlYWs7Ci0JICAgIH0KLSAgICAvKiA4LjAgPD0geCA8IDIqKjU4ICovCi0JfSBlbHNlIGlmIChpeCA8IDB4NDM5MDAwMDApIHsKLQkgICAgdCA9IF9faWVlZTc1NF9sb2coeCk7Ci0JICAgIHogPSBvbmUveDsKLQkgICAgeSA9IHoqejsKLQkgICAgdyA9IHcwK3oqKHcxK3kqKHcyK3kqKHczK3kqKHc0K3kqKHc1K3kqdzYpKSkpKTsKLQkgICAgciA9ICh4LWhhbGYpKih0LW9uZSkrdzsKLQl9IGVsc2UgCi0gICAgLyogMioqNTggPD0geCA8PSBpbmYgKi8KLQkgICAgciA9ICB4KihfX2llZWU3NTRfbG9nKHgpLW9uZSk7Ci0JaWYoaHg8MCkgciA9IG5hZGogLSByOwotCXJldHVybiByOwotfQpkaWZmIC0tZ2l0IGEvbGlibS9zcmMvZV9sZ2FtbWFmLmMgYi9saWJtL3NyYy9lX2xnYW1tYWYuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjFmNDhkNS4uMDAwMDAwMAotLS0gYS9saWJtL3NyYy9lX2xnYW1tYWYuYworKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAgQEAKLS8qIGVfbGdhbW1hZi5jIC0tIGZsb2F0IHZlcnNpb24gb2YgZV9sZ2FtbWEuYy4KLSAqIENvbnZlcnNpb24gdG8gZmxvYXQgYnkgSWFuIExhbmNlIFRheWxvciwgQ3lnbnVzIFN1cHBvcnQsIGlhbkBjeWdudXMuY29tLgotICovCi0KLS8qCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBDb3B5cmlnaHQgKEMpIDE5OTMgYnkgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIERldmVsb3BlZCBhdCBTdW5Qcm8sIGEgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBidXNpbmVzcy4KLSAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKLSAqIHNvZnR3YXJlIGlzIGZyZWVseSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoaXMgbm90aWNlCi0gKiBpcyBwcmVzZXJ2ZWQuCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKi8KLQotI2lmbmRlZiBsaW50Ci1zdGF0aWMgY2hhciByY3NpZFtdID0gIiRGcmVlQlNEOiBzcmMvbGliL21zdW4vc3JjL2VfbGdhbW1hZi5jLHYgMS43IDIwMDIvMDUvMjggMTg6MTU6MDQgYWxmcmVkIEV4cCAkIjsKLSNlbmRpZgotCi0vKiBfX2llZWU3NTRfbGdhbW1hZih4KQotICogUmV0dXJuIHRoZSBsb2dhcml0aG0gb2YgdGhlIEdhbW1hIGZ1bmN0aW9uIG9mIHguCi0gKgotICogTWV0aG9kOiBjYWxsIF9faWVlZTc1NF9sZ2FtbWFmX3IKLSAqLwotCi0jaW5jbHVkZSAibWF0aC5oIgotI2luY2x1ZGUgIm1hdGhfcHJpdmF0ZS5oIgotCi1leHRlcm4gaW50IHNpZ25nYW07Ci0KLWZsb2F0Ci1fX2llZWU3NTRfbGdhbW1hZihmbG9hdCB4KQotewotCXJldHVybiBfX2llZWU3NTRfbGdhbW1hZl9yKHgsJnNpZ25nYW0pOwotfQpkaWZmIC0tZ2l0IGEvbGlibS9zcmMvZV9sZ2FtbWFmX3IuYyBiL2xpYm0vc3JjL2VfbGdhbW1hZl9yLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNiNTUyMDguLjAwMDAwMDAKLS0tIGEvbGlibS9zcmMvZV9sZ2FtbWFmX3IuYworKysgL2Rldi9udWxsCkBAIC0xLDIzMSArMCwwIEBACi0vKiBlX2xnYW1tYWZfci5jIC0tIGZsb2F0IHZlcnNpb24gb2YgZV9sZ2FtbWFfci5jLgotICogQ29udmVyc2lvbiB0byBmbG9hdCBieSBJYW4gTGFuY2UgVGF5bG9yLCBDeWdudXMgU3VwcG9ydCwgaWFuQGN5Z251cy5jb20uCi0gKi8KLQotLyoKLSAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIENvcHlyaWdodCAoQykgMTk5MyBieSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogRGV2ZWxvcGVkIGF0IFN1blBybywgYSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGJ1c2luZXNzLgotICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcwotICogc29mdHdhcmUgaXMgZnJlZWx5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhpcyBub3RpY2UKLSAqIGlzIHByZXNlcnZlZC4KLSAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqLwotCi0jaWZuZGVmIGxpbnQKLXN0YXRpYyBjaGFyIHJjc2lkW10gPSAiJEZyZWVCU0Q6IHNyYy9saWIvbXN1bi9zcmMvZV9sZ2FtbWFmX3IuYyx2IDEuOSAyMDA1LzExLzI4IDA4OjMyOjE1IGJkZSBFeHAgJCI7Ci0jZW5kaWYKLQotI2luY2x1ZGUgIm1hdGguaCIKLSNpbmNsdWRlICJtYXRoX3ByaXZhdGUuaCIKLQotc3RhdGljIGNvbnN0IGZsb2F0Ci10d28yMz0gIDguMzg4NjA4MDAwMGUrMDYsIC8qIDB4NGIwMDAwMDAgKi8KLWhhbGY9ICA1LjAwMDAwMDAwMDBlLTAxLCAvKiAweDNmMDAwMDAwICovCi1vbmUgPSAgMS4wMDAwMDAwMDAwZSswMCwgLyogMHgzZjgwMDAwMCAqLwotcGkgID0gIDMuMTQxNTkyNzQxMGUrMDAsIC8qIDB4NDA0OTBmZGIgKi8KLWEwICA9ICA3LjcyMTU2NjQwODllLTAyLCAvKiAweDNkOWUyMzNmICovCi1hMSAgPSAgMy4yMjQ2NzAyOTA5ZS0wMSwgLyogMHgzZWE1MWE2NiAqLwotYTIgID0gIDYuNzM1MjMwMjM3MmUtMDIsIC8qIDB4M2Q4OWYwMDEgKi8KLWEzICA9ICAyLjA1ODA4MDc3MDFlLTAyLCAvKiAweDNjYTg5OTE1ICovCi1hNCAgPSAgNy4zODU1NTA5OTgyZS0wMywgLyogMHgzYmYyMDI3ZSAqLwotYTUgID0gIDIuODkwNTEzNzQ0MmUtMDMsIC8qIDB4M2IzZDZlYzYgKi8KLWE2ICA9ICAxLjE5MjcwNzY4NDhlLTAzLCAvKiAweDNhOWM1NGExICovCi1hNyAgPSAgNS4xMDA2OTc3NDQ2ZS0wNCwgLyogMHgzYTA1YjYzNCAqLwotYTggID0gIDIuMjA4NjI3ODQ3N2UtMDQsIC8qIDB4Mzk2Nzk3NjcgKi8KLWE5ICA9ICAxLjA4MDExNTY4OTVlLTA0LCAvKiAweDM4ZTI4NDQ1ICovCi1hMTAgPSAgMi41MjE0NDU2NDAwZS0wNSwgLyogMHgzN2QzODNhMiAqLwotYTExID0gIDQuNDg2NDA5NjcwOGUtMDUsIC8qIDB4MzgzYzJjNzUgKi8KLXRjICA9ICAxLjQ2MTYzMjEzMjVlKzAwLCAvKiAweDNmYmIxNmMzICovCi10ZiAgPSAtMS4yMTQ4NjI4Mzg0ZS0wMSwgLyogMHhiZGY4Y2RjZCAqLwotLyogdHQgPSAtKHRhaWwgb2YgdGYpICovCi10dCAgPSAgNi42OTcxMDA2NTE4ZS0wOSwgLyogMHgzMWU2MWM1MiAqLwotdDAgID0gIDQuODM4MzYxMTQ0MWUtMDEsIC8qIDB4M2VmN2I5NWUgKi8KLXQxICA9IC0xLjQ3NTg3NzE2NThlLTAxLCAvKiAweGJlMTcyMTNjICovCi10MiAgPSAgNi40NjI0OTQyODM5ZS0wMiwgLyogMHgzZDg0NWExNSAqLwotdDMgID0gLTMuMjc4ODU0MTE2OGUtMDIsIC8qIDB4YmQwNjRkNDcgKi8KLXQ0ICA9ICAxLjc5NzA2NzU2MDNlLTAyLCAvKiAweDNjOTMzNzNkICovCi10NSAgPSAtMS4wMzE0MjI0Mjg4ZS0wMiwgLyogMHhiYzI4ZmNmZSAqLwotdDYgID0gIDYuMTAwNTM4NjUyNGUtMDMsIC8qIDB4M2JjN2U3MDcgKi8KLXQ3ICA9IC0zLjY4NDUyMDI1NThlLTAzLCAvKiAweGJiNzE3N2ZlICovCi10OCAgPSAgMi4yNTk2NDc3MDY1ZS0wMywgLyogMHgzYjE0MTY5OSAqLwotdDkgID0gLTEuNDAzNDY0NzAyOWUtMDMsIC8qIDB4YmFiN2Y0NzYgKi8KLXQxMCA9ICA4LjgxMDgxODU0NDZlLTA0LCAvKiAweDNhNjZmODY3ICovCi10MTEgPSAtNS4zODU5NTMxMTgxZS0wNCwgLyogMHhiYTBkMzA4NSAqLwotdDEyID0gIDMuMTU2MzIwNTk5NGUtMDQsIC8qIDB4MzlhNTdiNmIgKi8KLXQxMyA9IC0zLjEyNzU0MTU2NzdlLTA0LCAvKiAweGI5YTNmOTI3ICovCi10MTQgPSAgMy4zNTUyOTE4NDY3ZS0wNCwgLyogMHgzOWFmZTlmNyAqLwotdTAgID0gLTcuNzIxNTY2NDA4OWUtMDIsIC8qIDB4YmQ5ZTIzM2YgKi8KLXUxICA9ICA2LjMyODI3MDQzNTNlLTAxLCAvKiAweDNmMjIwMGY0ICovCi11MiAgPSAgMS40NTQ5MjI1NTY5ZSswMCwgLyogMHgzZmJhM2FlNyAqLwotdTMgID0gIDkuNzc3MTc1MTg4MWUtMDEsIC8qIDB4M2Y3YTRiYjIgKi8KLXU0ICA9ICAyLjI4OTYzNzMyNzJlLTAxLCAvKiAweDNlNmE3NTc4ICovCi11NSAgPSAgMS4zMzgxMDkxODc4ZS0wMiwgLyogMHgzYzViM2M1ZSAqLwotdjEgID0gIDIuNDU1OTc3OTE2N2UrMDAsIC8qIDB4NDAxZDJlYmUgKi8KLXYyICA9ICAyLjEyODQ4OTczMjdlKzAwLCAvKiAweDQwMDgzOTJkICovCi12MyAgPSAgNy42OTI4NTE0MjQyZS0wMSwgLyogMHgzZjQ0ZWZkZiAqLwotdjQgID0gIDEuMDQyMjI2NDc4NWUtMDEsIC8qIDB4M2RkNTcyYWYgKi8KLXY1ICA9ICAzLjIxNzA5MjQ4MjRlLTAzLCAvKiAweDNiNTJkNWRiICovCi1zMCAgPSAtNy43MjE1NjY0MDg5ZS0wMiwgLyogMHhiZDllMjMzZiAqLwotczEgID0gIDIuMTQ5ODI0MjAyMWUtMDEsIC8qIDB4M2U1YzI0NWEgKi8KLXMyICA9ICAzLjI1Nzc4NzgyMzdlLTAxLCAvKiAweDNlYTZjYzdhICovCi1zMyAgPSAgMS40NjM1MDQ3MzE3ZS0wMSwgLyogMHgzZTE1ZGNlNiAqLwotczQgID0gIDIuNjY0MjI3MDM4NmUtMDIsIC8qIDB4M2NkYTQwZTQgKi8KLXM1ICA9ICAxLjg0MDI4NDU1OTllLTAzLCAvKiAweDNhZjEzNWI0ICovCi1zNiAgPSAgMy4xOTQ3NTMyOTg5ZS0wNSwgLyogMHgzODA1ZmY2NyAqLwotcjEgID0gIDEuMzkyMDA1MzI0NGUrMDAsIC8qIDB4M2ZiMjJkM2IgKi8KLXIyICA9ICA3LjIxOTM1NTcwMjRlLTAxLCAvKiAweDNmMzhkMGM1ICovCi1yMyAgPSAgMS43MTkzMzg1OTU5ZS0wMSwgLyogMHgzZTMwMGY2ZSAqLwotcjQgID0gIDEuODY0NTkxOTg1OWUtMDIsIC8qIDB4M2M5OGJmNTQgKi8KLXI1ICA9ICA3Ljc3OTQyNDc3NzNlLTA0LCAvKiAweDNhNGJlZWQ2ICovCi1yNiAgPSAgNy4zMjY2ODQyMjY0ZS0wNiwgLyogMHgzNmY1ZDdiZCAqLwotdzAgID0gIDQuMTg5Mzg1NDczN2UtMDEsIC8qIDB4M2VkNjdmMWQgKi8KLXcxICA9ICA4LjMzMzMzMzU4MTdlLTAyLCAvKiAweDNkYWFhYWFiICovCi13MiAgPSAtMi43Nzc3Nzc4NDUwZS0wMywgLyogMHhiYjM2MGI2MSAqLwotdzMgID0gIDcuOTM2NTA1NzE3MmUtMDQsIC8qIDB4M2E1MDBjZmQgKi8KLXc0ICA9IC01Ljk1MTg3NTM1NTFlLTA0LCAvKiAweGJhMWMwNjVjICovCi13NSAgPSAgOC4zNjMzOTg5NTYxZS0wNCwgLyogMHgzYTViM2RkMiAqLwotdzYgID0gLTEuNjMwOTI5Mjk4N2UtMDM7IC8qIDB4YmFkNWM0ZTggKi8KLQotc3RhdGljIGNvbnN0IGZsb2F0IHplcm89ICAwLjAwMDAwMDAwMDBlKzAwOwotCi0Jc3RhdGljIGZsb2F0IHNpbl9waWYoZmxvYXQgeCkKLXsKLQlmbG9hdCB5LHo7Ci0JaW50IG4saXg7Ci0KLQlHRVRfRkxPQVRfV09SRChpeCx4KTsKLQlpeCAmPSAweDdmZmZmZmZmOwotCi0JaWYoaXg8MHgzZTgwMDAwMCkgcmV0dXJuIF9fa2VybmVsX3NpbmRmKHBpKngpOwotCXkgPSAteDsJCS8qIHggaXMgYXNzdW1lIG5lZ2F0aXZlICovCi0KLSAgICAvKgotICAgICAqIGFyZ3VtZW50IHJlZHVjdGlvbiwgbWFrZSBzdXJlIGluZXhhY3QgZmxhZyBub3QgcmFpc2VkIGlmIGlucHV0Ci0gICAgICogaXMgYW4gaW50ZWdlcgotICAgICAqLwotCXogPSBmbG9vcmYoeSk7Ci0JaWYoeiE9eSkgewkJCQkvKiBpbmV4YWN0IGFueXdheSAqLwotCSAgICB5ICAqPSAoZmxvYXQpMC41OwotCSAgICB5ICAgPSAoZmxvYXQpMi4wKih5IC0gZmxvb3JmKHkpKTsJLyogeSA9IHx4fCBtb2QgMi4wICovCi0JICAgIG4gICA9IChpbnQpICh5KihmbG9hdCk0LjApOwotCX0gZWxzZSB7Ci0gICAgICAgICAgICBpZihpeD49MHg0YjgwMDAwMCkgewotICAgICAgICAgICAgICAgIHkgPSB6ZXJvOyBuID0gMDsgICAgICAgICAgICAgICAgIC8qIHkgbXVzdCBiZSBldmVuICovCi0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGlmKGl4PDB4NGIwMDAwMDApIHogPSB5K3R3bzIzOwkvKiBleGFjdCAqLwotCQlHRVRfRkxPQVRfV09SRChuLHopOwotCQluICY9IDE7Ci0gICAgICAgICAgICAgICAgeSAgPSBuOwotICAgICAgICAgICAgICAgIG48PD0gMjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCXN3aXRjaCAobikgewotCSAgICBjYXNlIDA6ICAgeSA9ICBfX2tlcm5lbF9zaW5kZihwaSp5KTsgYnJlYWs7Ci0JICAgIGNhc2UgMToKLQkgICAgY2FzZSAyOiAgIHkgPSAgX19rZXJuZWxfY29zZGYocGkqKChmbG9hdCkwLjUteSkpOyBicmVhazsKLQkgICAgY2FzZSAzOgotCSAgICBjYXNlIDQ6ICAgeSA9ICBfX2tlcm5lbF9zaW5kZihwaSoob25lLXkpKTsgYnJlYWs7Ci0JICAgIGNhc2UgNToKLQkgICAgY2FzZSA2OiAgIHkgPSAtX19rZXJuZWxfY29zZGYocGkqKHktKGZsb2F0KTEuNSkpOyBicmVhazsKLQkgICAgZGVmYXVsdDogIHkgPSAgX19rZXJuZWxfc2luZGYocGkqKHktKGZsb2F0KTIuMCkpOyBicmVhazsKLQkgICAgfQotCXJldHVybiAteTsKLX0KLQotCi1mbG9hdAotX19pZWVlNzU0X2xnYW1tYWZfcihmbG9hdCB4LCBpbnQgKnNpZ25nYW1wKQotewotCWZsb2F0IHQseSx6LG5hZGoscCxwMSxwMixwMyxxLHIsdzsKLQlpbnQgaSxoeCxpeDsKLQotCUdFVF9GTE9BVF9XT1JEKGh4LHgpOwotCi0gICAgLyogcHVyZ2Ugb2ZmICstaW5mLCBOYU4sICstMCwgYW5kIG5lZ2F0aXZlIGFyZ3VtZW50cyAqLwotCSpzaWduZ2FtcCA9IDE7Ci0JaXggPSBoeCYweDdmZmZmZmZmOwotCWlmKGl4Pj0weDdmODAwMDAwKSByZXR1cm4geCp4OwotCWlmKGl4PT0wKSByZXR1cm4gb25lL3plcm87Ci0JaWYoaXg8MHgzNTAwMDAwMCkgewkvKiB8eHw8MioqLTIxLCByZXR1cm4gLWxvZyh8eHwpICovCi0JICAgIGlmKGh4PDApIHsKLQkgICAgICAgICpzaWduZ2FtcCA9IC0xOwotCSAgICAgICAgcmV0dXJuIC1fX2llZWU3NTRfbG9nZigteCk7Ci0JICAgIH0gZWxzZSByZXR1cm4gLV9faWVlZTc1NF9sb2dmKHgpOwotCX0KLQlpZihoeDwwKSB7Ci0JICAgIGlmKGl4Pj0weDRiMDAwMDAwKSAJLyogfHh8Pj0yKioyMywgbXVzdCBiZSAtaW50ZWdlciAqLwotCQlyZXR1cm4gb25lL3plcm87Ci0JICAgIHQgPSBzaW5fcGlmKHgpOwotCSAgICBpZih0PT16ZXJvKSByZXR1cm4gb25lL3plcm87IC8qIC1pbnRlZ2VyICovCi0JICAgIG5hZGogPSBfX2llZWU3NTRfbG9nZihwaS9mYWJzZih0KngpKTsKLQkgICAgaWYodDx6ZXJvKSAqc2lnbmdhbXAgPSAtMTsKLQkgICAgeCA9IC14OwotCX0KLQotICAgIC8qIHB1cmdlIG9mZiAxIGFuZCAyICovCi0JaWYgKGl4PT0weDNmODAwMDAwfHxpeD09MHg0MDAwMDAwMCkgciA9IDA7Ci0gICAgLyogZm9yIHggPCAyLjAgKi8KLQllbHNlIGlmKGl4PDB4NDAwMDAwMDApIHsKLQkgICAgaWYoaXg8PTB4M2Y2NjY2NjYpIHsgCS8qIGxnYW1tYSh4KSA9IGxnYW1tYSh4KzEpLWxvZyh4KSAqLwotCQlyID0gLV9faWVlZTc1NF9sb2dmKHgpOwotCQlpZihpeD49MHgzZjNiNGEyMCkge3kgPSBvbmUteDsgaT0gMDt9Ci0JCWVsc2UgaWYoaXg+PTB4M2U2ZDMzMDgpIHt5PSB4LSh0Yy1vbmUpOyBpPTE7fQotCSAgCWVsc2Uge3kgPSB4OyBpPTI7fQotCSAgICB9IGVsc2UgewotCSAgCXIgPSB6ZXJvOwotCSAgICAgICAgaWYoaXg+PTB4M2ZkZGE2MTgpIHt5PShmbG9hdCkyLjAteDtpPTA7fSAvKiBbMS43MzE2LDJdICovCi0JICAgICAgICBlbHNlIGlmKGl4Pj0weDNGOWRhNjIwKSB7eT14LXRjO2k9MTt9IC8qIFsxLjIzLDEuNzNdICovCi0JCWVsc2Uge3k9eC1vbmU7aT0yO30KLQkgICAgfQotCSAgICBzd2l0Y2goaSkgewotCSAgICAgIGNhc2UgMDoKLQkJeiA9IHkqeTsKLQkJcDEgPSBhMCt6KihhMit6KihhNCt6KihhNit6KihhOCt6KmExMCkpKSk7Ci0JCXAyID0geiooYTEreiooYTMreiooYTUreiooYTcreiooYTkreiphMTEpKSkpKTsKLQkJcCAgPSB5KnAxK3AyOwotCQlyICArPSAocC0oZmxvYXQpMC41KnkpOyBicmVhazsKLQkgICAgICBjYXNlIDE6Ci0JCXogPSB5Knk7Ci0JCXcgPSB6Knk7Ci0JCXAxID0gdDArdyoodDMrdyoodDYrdyoodDkgK3cqdDEyKSkpOwkvKiBwYXJhbGxlbCBjb21wICovCi0JCXAyID0gdDErdyoodDQrdyoodDcrdyoodDEwK3cqdDEzKSkpOwotCQlwMyA9IHQyK3cqKHQ1K3cqKHQ4K3cqKHQxMSt3KnQxNCkpKTsKLQkJcCAgPSB6KnAxLSh0dC13KihwMit5KnAzKSk7Ci0JCXIgKz0gKHRmICsgcCk7IGJyZWFrOwotCSAgICAgIGNhc2UgMjoKLQkJcDEgPSB5Kih1MCt5Kih1MSt5Kih1Mit5Kih1Myt5Kih1NCt5KnU1KSkpKSk7Ci0JCXAyID0gb25lK3kqKHYxK3kqKHYyK3kqKHYzK3kqKHY0K3kqdjUpKSkpOwotCQlyICs9ICgtKGZsb2F0KTAuNSp5ICsgcDEvcDIpOwotCSAgICB9Ci0JfQotCWVsc2UgaWYoaXg8MHg0MTAwMDAwMCkgeyAJCQkvKiB4IDwgOC4wICovCi0JICAgIGkgPSAoaW50KXg7Ci0JICAgIHQgPSB6ZXJvOwotCSAgICB5ID0geC0oZmxvYXQpaTsKLQkgICAgcCA9IHkqKHMwK3kqKHMxK3kqKHMyK3kqKHMzK3kqKHM0K3kqKHM1K3kqczYpKSkpKSk7Ci0JICAgIHEgPSBvbmUreSoocjEreSoocjIreSoocjMreSoocjQreSoocjUreSpyNikpKSkpOwotCSAgICByID0gaGFsZip5K3AvcTsKLQkgICAgeiA9IG9uZTsJLyogbGdhbW1hKDErcykgPSBsb2cocykgKyBsZ2FtbWEocykgKi8KLQkgICAgc3dpdGNoKGkpIHsKLQkgICAgY2FzZSA3OiB6ICo9ICh5KyhmbG9hdCk2LjApOwkvKiBGQUxMVEhSVSAqLwotCSAgICBjYXNlIDY6IHogKj0gKHkrKGZsb2F0KTUuMCk7CS8qIEZBTExUSFJVICovCi0JICAgIGNhc2UgNTogeiAqPSAoeSsoZmxvYXQpNC4wKTsJLyogRkFMTFRIUlUgKi8KLQkgICAgY2FzZSA0OiB6ICo9ICh5KyhmbG9hdCkzLjApOwkvKiBGQUxMVEhSVSAqLwotCSAgICBjYXNlIDM6IHogKj0gKHkrKGZsb2F0KTIuMCk7CS8qIEZBTExUSFJVICovCi0JCSAgICByICs9IF9faWVlZTc1NF9sb2dmKHopOyBicmVhazsKLQkgICAgfQotICAgIC8qIDguMCA8PSB4IDwgMioqNTggKi8KLQl9IGVsc2UgaWYgKGl4IDwgMHg1YzgwMDAwMCkgewotCSAgICB0ID0gX19pZWVlNzU0X2xvZ2YoeCk7Ci0JICAgIHogPSBvbmUveDsKLQkgICAgeSA9IHoqejsKLQkgICAgdyA9IHcwK3oqKHcxK3kqKHcyK3kqKHczK3kqKHc0K3kqKHc1K3kqdzYpKSkpKTsKLQkgICAgciA9ICh4LWhhbGYpKih0LW9uZSkrdzsKLQl9IGVsc2UKLSAgICAvKiAyKio1OCA8PSB4IDw9IGluZiAqLwotCSAgICByID0gIHgqKF9faWVlZTc1NF9sb2dmKHgpLW9uZSk7Ci0JaWYoaHg8MCkgciA9IG5hZGogLSByOwotCXJldHVybiByOwotfQpkaWZmIC0tZ2l0IGEvbGlibS9zcmMvZV9sb2cuYyBiL2xpYm0vc3JjL2VfbG9nLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJkYmYwNTcuLjAwMDAwMDAKLS0tIGEvbGlibS9zcmMvZV9sb2cuYworKysgL2Rldi9udWxsCkBAIC0xLDEzNSArMCwwIEBACi0KLS8qIEAoIyllX2xvZy5jIDEuMyA5NS8wMS8xOCAqLwotLyoKLSAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIENvcHlyaWdodCAoQykgMTk5MyBieSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogRGV2ZWxvcGVkIGF0IFN1blNvZnQsIGEgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBidXNpbmVzcy4KLSAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKLSAqIHNvZnR3YXJlIGlzIGZyZWVseSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoaXMgbm90aWNlIAotICogaXMgcHJlc2VydmVkLgotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICovCi0KLSNpZm5kZWYgbGludAotc3RhdGljIGNoYXIgcmNzaWRbXSA9ICIkRnJlZUJTRDogc3JjL2xpYi9tc3VuL3NyYy9lX2xvZy5jLHYgMS4xMCAyMDA1LzAyLzA0IDE4OjI2OjA2IGRhcyBFeHAgJCI7Ci0jZW5kaWYKLQotLyogX19pZWVlNzU0X2xvZyh4KQotICogUmV0dXJuIHRoZSBsb2dyaXRobSBvZiB4Ci0gKgotICogTWV0aG9kIDogICAgICAgICAgICAgICAgICAKLSAqICAgMS4gQXJndW1lbnQgUmVkdWN0aW9uOiBmaW5kIGsgYW5kIGYgc3VjaCB0aGF0IAotICoJCQl4ID0gMl5rICogKDErZiksIAotICoJICAgd2hlcmUgIHNxcnQoMikvMiA8IDErZiA8IHNxcnQoMikgLgotICoKLSAqICAgMi4gQXBwcm94aW1hdGlvbiBvZiBsb2coMStmKS4KLSAqCUxldCBzID0gZi8oMitmKSA7IGJhc2VkIG9uIGxvZygxK2YpID0gbG9nKDErcykgLSBsb2coMS1zKQotICoJCSA9IDJzICsgMi8zIHMqKjMgKyAyLzUgcyoqNSArIC4uLi4uLAotICoJICAgICAJID0gMnMgKyBzKlIKLSAqICAgICAgV2UgdXNlIGEgc3BlY2lhbCBSZW1lIGFsZ29yaXRobSBvbiBbMCwwLjE3MTZdIHRvIGdlbmVyYXRlIAotICogCWEgcG9seW5vbWlhbCBvZiBkZWdyZWUgMTQgdG8gYXBwcm94aW1hdGUgUiBUaGUgbWF4aW11bSBlcnJvciAKLSAqCW9mIHRoaXMgcG9seW5vbWlhbCBhcHByb3hpbWF0aW9uIGlzIGJvdW5kZWQgYnkgMioqLTU4LjQ1LiBJbgotICoJb3RoZXIgd29yZHMsCi0gKgkJICAgICAgICAyICAgICAgNCAgICAgIDYgICAgICA4ICAgICAgMTAgICAgICAxMiAgICAgIDE0Ci0gKgkgICAgUih6KSB+IExnMSpzICtMZzIqcyArTGczKnMgK0xnNCpzICtMZzUqcyAgK0xnNipzICArTGc3KnMKLSAqICAJKHRoZSB2YWx1ZXMgb2YgTGcxIHRvIExnNyBhcmUgbGlzdGVkIGluIHRoZSBwcm9ncmFtKQotICoJYW5kCi0gKgkgICAgfCAgICAgIDIgICAgICAgICAgMTQgICAgICAgICAgfCAgICAgLTU4LjQ1Ci0gKgkgICAgfCBMZzEqcyArLi4uK0xnNypzICAgIC0gIFIoeikgfCA8PSAyIAotICoJICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAqCU5vdGUgdGhhdCAycyA9IGYgLSBzKmYgPSBmIC0gaGZzcSArIHMqaGZzcSwgd2hlcmUgaGZzcSA9IGYqZi8yLgotICoJSW4gb3JkZXIgdG8gZ3VhcmFudGVlIGVycm9yIGluIGxvZyBiZWxvdyAxdWxwLCB3ZSBjb21wdXRlIGxvZwotICoJYnkKLSAqCQlsb2coMStmKSA9IGYgLSBzKihmIC0gUikJKGlmIGYgaXMgbm90IHRvbyBsYXJnZSkKLSAqCQlsb2coMStmKSA9IGYgLSAoaGZzcSAtIHMqKGhmc3ErUikpLgkoYmV0dGVyIGFjY3VyYWN5KQotICoJCi0gKgkzLiBGaW5hbGx5LCAgbG9nKHgpID0gaypsbjIgKyBsb2coMStmKS4gIAotICoJCQkgICAgPSBrKmxuMl9oaSsoZi0oaGZzcS0ocyooaGZzcStSKStrKmxuMl9sbykpKQotICoJICAgSGVyZSBsbjIgaXMgc3BsaXQgaW50byB0d28gZmxvYXRpbmcgcG9pbnQgbnVtYmVyOiAKLSAqCQkJbG4yX2hpICsgbG4yX2xvLAotICoJICAgd2hlcmUgbipsbjJfaGkgaXMgYWx3YXlzIGV4YWN0IGZvciB8bnwgPCAyMDAwLgotICoKLSAqIFNwZWNpYWwgY2FzZXM6Ci0gKglsb2coeCkgaXMgTmFOIHdpdGggc2lnbmFsIGlmIHggPCAwIChpbmNsdWRpbmcgLUlORikgOyAKLSAqCWxvZygrSU5GKSBpcyArSU5GOyBsb2coMCkgaXMgLUlORiB3aXRoIHNpZ25hbDsKLSAqCWxvZyhOYU4pIGlzIHRoYXQgTmFOIHdpdGggbm8gc2lnbmFsLgotICoKLSAqIEFjY3VyYWN5OgotICoJYWNjb3JkaW5nIHRvIGFuIGVycm9yIGFuYWx5c2lzLCB0aGUgZXJyb3IgaXMgYWx3YXlzIGxlc3MgdGhhbgotICoJMSB1bHAgKHVuaXQgaW4gdGhlIGxhc3QgcGxhY2UpLgotICoKLSAqIENvbnN0YW50czoKLSAqIFRoZSBoZXhhZGVjaW1hbCB2YWx1ZXMgYXJlIHRoZSBpbnRlbmRlZCBvbmVzIGZvciB0aGUgZm9sbG93aW5nIAotICogY29uc3RhbnRzLiBUaGUgZGVjaW1hbCB2YWx1ZXMgbWF5IGJlIHVzZWQsIHByb3ZpZGVkIHRoYXQgdGhlIAotICogY29tcGlsZXIgd2lsbCBjb252ZXJ0IGZyb20gZGVjaW1hbCB0byBiaW5hcnkgYWNjdXJhdGVseSBlbm91Z2ggCi0gKiB0byBwcm9kdWNlIHRoZSBoZXhhZGVjaW1hbCB2YWx1ZXMgc2hvd24uCi0gKi8KLQotI2luY2x1ZGUgIm1hdGguaCIKLSNpbmNsdWRlICJtYXRoX3ByaXZhdGUuaCIKLQotc3RhdGljIGNvbnN0IGRvdWJsZQotbG4yX2hpICA9ICA2LjkzMTQ3MTgwMzY5MTIzODE2NDkwZS0wMSwJLyogM2ZlNjJlNDIgZmVlMDAwMDAgKi8KLWxuMl9sbyAgPSAgMS45MDgyMTQ5MjkyNzA1ODc3MDAwMmUtMTAsCS8qIDNkZWEzOWVmIDM1NzkzYzc2ICovCi10d281NCAgID0gIDEuODAxNDM5ODUwOTQ4MTk4NDAwMDBlKzE2LCAgLyogNDM1MDAwMDAgMDAwMDAwMDAgKi8KLUxnMSA9IDYuNjY2NjY2NjY2NjY2NzM1MTMwZS0wMSwgIC8qIDNGRTU1NTU1IDU1NTU1NTkzICovCi1MZzIgPSAzLjk5OTk5OTk5OTk0MDk0MTkwOGUtMDEsICAvKiAzRkQ5OTk5OSA5OTk3RkEwNCAqLwotTGczID0gMi44NTcxNDI4NzQzNjYyMzkxNDllLTAxLCAgLyogM0ZEMjQ5MjQgOTQyMjkzNTkgKi8KLUxnNCA9IDIuMjIyMjE5ODQzMjE0OTc4Mzk2ZS0wMSwgIC8qIDNGQ0M3MUM1IDFEOEU3OEFGICovCi1MZzUgPSAxLjgxODM1NzIxNjE2MTgwNTAxMmUtMDEsICAvKiAzRkM3NDY2NCA5NkNCMDNERSAqLwotTGc2ID0gMS41MzEzODM3Njk5MjA5MzczMzJlLTAxLCAgLyogM0ZDMzlBMDkgRDA3OEM2OUYgKi8KLUxnNyA9IDEuNDc5ODE5ODYwNTExNjU4NTkxZS0wMTsgIC8qIDNGQzJGMTEyIERGM0U1MjQ0ICovCi0KLXN0YXRpYyBjb25zdCBkb3VibGUgemVybyAgID0gIDAuMDsKLQotZG91YmxlCi1fX2llZWU3NTRfbG9nKGRvdWJsZSB4KQotewotCWRvdWJsZSBoZnNxLGYscyx6LFIsdyx0MSx0MixkazsKLQlpbnQzMl90IGssaHgsaSxqOwotCXVfaW50MzJfdCBseDsKLQotCUVYVFJBQ1RfV09SRFMoaHgsbHgseCk7Ci0KLQlrPTA7Ci0JaWYgKGh4IDwgMHgwMDEwMDAwMCkgewkJCS8qIHggPCAyKiotMTAyMiAgKi8KLQkgICAgaWYgKCgoaHgmMHg3ZmZmZmZmZil8bHgpPT0wKSAKLQkJcmV0dXJuIC10d281NC96ZXJvOwkJLyogbG9nKCstMCk9LWluZiAqLwotCSAgICBpZiAoaHg8MCkgcmV0dXJuICh4LXgpL3plcm87CS8qIGxvZygtIykgPSBOYU4gKi8KLQkgICAgayAtPSA1NDsgeCAqPSB0d281NDsgLyogc3Vibm9ybWFsIG51bWJlciwgc2NhbGUgdXAgeCAqLwotCSAgICBHRVRfSElHSF9XT1JEKGh4LHgpOwotCX0gCi0JaWYgKGh4ID49IDB4N2ZmMDAwMDApIHJldHVybiB4K3g7Ci0JayArPSAoaHg+PjIwKS0xMDIzOwotCWh4ICY9IDB4MDAwZmZmZmY7Ci0JaSA9IChoeCsweDk1ZjY0KSYweDEwMDAwMDsKLQlTRVRfSElHSF9XT1JEKHgsaHh8KGleMHgzZmYwMDAwMCkpOwkvKiBub3JtYWxpemUgeCBvciB4LzIgKi8KLQlrICs9IChpPj4yMCk7Ci0JZiA9IHgtMS4wOwotCWlmKCgweDAwMGZmZmZmJigyK2h4KSk8MykgewkvKiB8ZnwgPCAyKiotMjAgKi8KLQkgICAgaWYoZj09emVybykgaWYoaz09MCkgcmV0dXJuIHplcm87ICBlbHNlIHtkaz0oZG91YmxlKWs7Ci0JCQkJIHJldHVybiBkaypsbjJfaGkrZGsqbG4yX2xvO30KLQkgICAgUiA9IGYqZiooMC41LTAuMzMzMzMzMzMzMzMzMzMzMzMqZik7Ci0JICAgIGlmKGs9PTApIHJldHVybiBmLVI7IGVsc2Uge2RrPShkb3VibGUpazsKLQkgICAgCSAgICAgcmV0dXJuIGRrKmxuMl9oaS0oKFItZGsqbG4yX2xvKS1mKTt9Ci0JfQotIAlzID0gZi8oMi4wK2YpOyAKLQlkayA9IChkb3VibGUpazsKLQl6ID0gcypzOwotCWkgPSBoeC0weDYxNDdhOwotCXcgPSB6Kno7Ci0JaiA9IDB4NmI4NTEtaHg7Ci0JdDE9IHcqKExnMit3KihMZzQrdypMZzYpKTsgCi0JdDI9IHoqKExnMSt3KihMZzMrdyooTGc1K3cqTGc3KSkpOyAKLQlpIHw9IGo7Ci0JUiA9IHQyK3QxOwotCWlmKGk+MCkgewotCSAgICBoZnNxPTAuNSpmKmY7Ci0JICAgIGlmKGs9PTApIHJldHVybiBmLShoZnNxLXMqKGhmc3ErUikpOyBlbHNlCi0JCSAgICAgcmV0dXJuIGRrKmxuMl9oaS0oKGhmc3EtKHMqKGhmc3ErUikrZGsqbG4yX2xvKSktZik7Ci0JfSBlbHNlIHsKLQkgICAgaWYoaz09MCkgcmV0dXJuIGYtcyooZi1SKTsgZWxzZQotCQkgICAgIHJldHVybiBkaypsbjJfaGktKChzKihmLVIpLWRrKmxuMl9sbyktZik7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvbGlibS9zcmMvZV9sb2cxMC5jIGIvbGlibS9zcmMvZV9sb2cxMC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlODRjMGM3Li4wMDAwMDAwCi0tLSBhL2xpYm0vc3JjL2VfbG9nMTAuYworKysgL2Rldi9udWxsCkBAIC0xLDg3ICswLDAgQEAKLQotLyogQCgjKWVfbG9nMTAuYyAxLjMgOTUvMDEvMTggKi8KLS8qCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBDb3B5cmlnaHQgKEMpIDE5OTMgYnkgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIERldmVsb3BlZCBhdCBTdW5Tb2Z0LCBhIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gYnVzaW5lc3MuCi0gKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCi0gKiBzb2Z0d2FyZSBpcyBmcmVlbHkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGlzIG5vdGljZSAKLSAqIGlzIHByZXNlcnZlZC4KLSAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqLwotCi0jaWZuZGVmIGxpbnQKLXN0YXRpYyBjaGFyIHJjc2lkW10gPSAiJEZyZWVCU0Q6IHNyYy9saWIvbXN1bi9zcmMvZV9sb2cxMC5jLHYgMS4xMSAyMDA1LzAyLzA0IDE4OjI2OjA2IGRhcyBFeHAgJCI7Ci0jZW5kaWYKLQotLyogX19pZWVlNzU0X2xvZzEwKHgpCi0gKiBSZXR1cm4gdGhlIGJhc2UgMTAgbG9nYXJpdGhtIG9mIHgKLSAqIAotICogTWV0aG9kIDoKLSAqCUxldCBsb2cxMF8yaGkgPSBsZWFkaW5nIDQwIGJpdHMgb2YgbG9nMTAoMikgYW5kCi0gKgkgICAgbG9nMTBfMmxvID0gbG9nMTAoMikgLSBsb2cxMF8yaGksCi0gKgkgICAgaXZsbjEwICAgPSAxL2xvZygxMCkgcm91bmRlZC4KLSAqCVRoZW4KLSAqCQluID0gaWxvZ2IoeCksIAotICoJCWlmKG48MCkgIG4gPSBuKzE7Ci0gKgkJeCA9IHNjYWxibih4LC1uKTsKLSAqCQlsb2cxMCh4KSA6PSBuKmxvZzEwXzJoaSArIChuKmxvZzEwXzJsbyArIGl2bG4xMCpsb2coeCkpCi0gKgotICogTm90ZSAxOgotICoJVG8gZ3VhcmFudGVlIGxvZzEwKDEwKipuKT1uLCB3aGVyZSAxMCoqbiBpcyBub3JtYWwsIHRoZSByb3VuZGluZyAKLSAqCW1vZGUgbXVzdCBzZXQgdG8gUm91bmQtdG8tTmVhcmVzdC4KLSAqIE5vdGUgMjoKLSAqCVsxL2xvZygxMCldIHJvdW5kZWQgdG8gNTMgYml0cyBoYXMgZXJyb3IgIC4xOTggICB1bHBzOwotICoJbG9nMTAgaXMgbW9ub3RvbmljIGF0IGFsbCBiaW5hcnkgYnJlYWsgcG9pbnRzLgotICoKLSAqIFNwZWNpYWwgY2FzZXM6Ci0gKglsb2cxMCh4KSBpcyBOYU4gd2l0aCBzaWduYWwgaWYgeCA8IDA7IAotICoJbG9nMTAoK0lORikgaXMgK0lORiB3aXRoIG5vIHNpZ25hbDsgbG9nMTAoMCkgaXMgLUlORiB3aXRoIHNpZ25hbDsKLSAqCWxvZzEwKE5hTikgaXMgdGhhdCBOYU4gd2l0aCBubyBzaWduYWw7Ci0gKglsb2cxMCgxMCoqTikgPSBOICBmb3IgTj0wLDEsLi4uLDIyLgotICoKLSAqIENvbnN0YW50czoKLSAqIFRoZSBoZXhhZGVjaW1hbCB2YWx1ZXMgYXJlIHRoZSBpbnRlbmRlZCBvbmVzIGZvciB0aGUgZm9sbG93aW5nIGNvbnN0YW50cy4KLSAqIFRoZSBkZWNpbWFsIHZhbHVlcyBtYXkgYmUgdXNlZCwgcHJvdmlkZWQgdGhhdCB0aGUgY29tcGlsZXIgd2lsbCBjb252ZXJ0Ci0gKiBmcm9tIGRlY2ltYWwgdG8gYmluYXJ5IGFjY3VyYXRlbHkgZW5vdWdoIHRvIHByb2R1Y2UgdGhlIGhleGFkZWNpbWFsIHZhbHVlcwotICogc2hvd24uCi0gKi8KLQotI2luY2x1ZGUgIm1hdGguaCIKLSNpbmNsdWRlICJtYXRoX3ByaXZhdGUuaCIKLQotc3RhdGljIGNvbnN0IGRvdWJsZQotdHdvNTQgICAgICA9ICAxLjgwMTQzOTg1MDk0ODE5ODQwMDAwZSsxNiwgLyogMHg0MzUwMDAwMCwgMHgwMDAwMDAwMCAqLwotaXZsbjEwICAgICA9ICA0LjM0Mjk0NDgxOTAzMjUxODE2NjY4ZS0wMSwgLyogMHgzRkRCQ0I3QiwgMHgxNTI2RTUwRSAqLwotbG9nMTBfMmhpICA9ICAzLjAxMDI5OTk1NjYzNjExNzcxMzA2ZS0wMSwgLyogMHgzRkQzNDQxMywgMHg1MDlGNjAwMCAqLwotbG9nMTBfMmxvICA9ICAzLjY5NDIzOTA3NzE1ODkzMDc4NjE2ZS0xMzsgLyogMHgzRDU5RkVGMywgMHgxMUYxMkIzNiAqLwotCi1zdGF0aWMgY29uc3QgZG91YmxlIHplcm8gICA9ICAwLjA7Ci0KLWRvdWJsZQotX19pZWVlNzU0X2xvZzEwKGRvdWJsZSB4KQotewotCWRvdWJsZSB5LHo7Ci0JaW50MzJfdCBpLGssaHg7Ci0JdV9pbnQzMl90IGx4OwotCi0JRVhUUkFDVF9XT1JEUyhoeCxseCx4KTsKLQotICAgICAgICBrPTA7Ci0gICAgICAgIGlmIChoeCA8IDB4MDAxMDAwMDApIHsgICAgICAgICAgICAgICAgICAvKiB4IDwgMioqLTEwMjIgICovCi0gICAgICAgICAgICBpZiAoKChoeCYweDdmZmZmZmZmKXxseCk9PTApCi0gICAgICAgICAgICAgICAgcmV0dXJuIC10d281NC96ZXJvOyAgICAgICAgICAgICAvKiBsb2coKy0wKT0taW5mICovCi0gICAgICAgICAgICBpZiAoaHg8MCkgcmV0dXJuICh4LXgpL3plcm87ICAgICAgICAvKiBsb2coLSMpID0gTmFOICovCi0gICAgICAgICAgICBrIC09IDU0OyB4ICo9IHR3bzU0OyAvKiBzdWJub3JtYWwgbnVtYmVyLCBzY2FsZSB1cCB4ICovCi0JICAgIEdFVF9ISUdIX1dPUkQoaHgseCk7Ci0gICAgICAgIH0KLQlpZiAoaHggPj0gMHg3ZmYwMDAwMCkgcmV0dXJuIHgreDsKLQlrICs9IChoeD4+MjApLTEwMjM7Ci0JaSAgPSAoKHVfaW50MzJfdClrJjB4ODAwMDAwMDApPj4zMTsKLSAgICAgICAgaHggPSAoaHgmMHgwMDBmZmZmZil8KCgweDNmZi1pKTw8MjApOwotICAgICAgICB5ICA9IChkb3VibGUpKGsraSk7Ci0JU0VUX0hJR0hfV09SRCh4LGh4KTsKLQl6ICA9IHkqbG9nMTBfMmxvICsgaXZsbjEwKl9faWVlZTc1NF9sb2coeCk7Ci0JcmV0dXJuICB6K3kqbG9nMTBfMmhpOwotfQpkaWZmIC0tZ2l0IGEvbGlibS9zcmMvZV9sb2cxMGYuYyBiL2xpYm0vc3JjL2VfbG9nMTBmLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM0NzMwODguLjAwMDAwMDAKLS0tIGEvbGlibS9zcmMvZV9sb2cxMGYuYworKysgL2Rldi9udWxsCkBAIC0xLDU1ICswLDAgQEAKLS8qIGVfbG9nMTBmLmMgLS0gZmxvYXQgdmVyc2lvbiBvZiBlX2xvZzEwLmMuCi0gKiBDb252ZXJzaW9uIHRvIGZsb2F0IGJ5IElhbiBMYW5jZSBUYXlsb3IsIEN5Z251cyBTdXBwb3J0LCBpYW5AY3lnbnVzLmNvbS4KLSAqLwotCi0vKgotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogQ29weXJpZ2h0IChDKSAxOTkzIGJ5IFN1biBNaWNyb3N5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBEZXZlbG9wZWQgYXQgU3VuUHJvLCBhIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gYnVzaW5lc3MuCi0gKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCi0gKiBzb2Z0d2FyZSBpcyBmcmVlbHkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGlzIG5vdGljZQotICogaXMgcHJlc2VydmVkLgotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICovCi0KLSNpZm5kZWYgbGludAotc3RhdGljIGNoYXIgcmNzaWRbXSA9ICIkRnJlZUJTRDogc3JjL2xpYi9tc3VuL3NyYy9lX2xvZzEwZi5jLHYgMS44IDIwMDIvMDUvMjggMTg6MTU6MDQgYWxmcmVkIEV4cCAkIjsKLSNlbmRpZgotCi0jaW5jbHVkZSAibWF0aC5oIgotI2luY2x1ZGUgIm1hdGhfcHJpdmF0ZS5oIgotCi1zdGF0aWMgY29uc3QgZmxvYXQKLXR3bzI1ICAgICAgPSAgMy4zNTU0NDMyMDAwZSswNywgLyogMHg0YzAwMDAwMCAqLwotaXZsbjEwICAgICA9ICA0LjM0Mjk0NDkyMDFlLTAxLCAvKiAweDNlZGU1YmQ5ICovCi1sb2cxMF8yaGkgID0gIDMuMDEwMjkyMDUzMmUtMDEsIC8qIDB4M2U5YTIwODAgKi8KLWxvZzEwXzJsbyAgPSAgNy45MDM0MTUxNjY4ZS0wNzsgLyogMHgzNTU0MjdkYiAqLwotCi1zdGF0aWMgY29uc3QgZmxvYXQgemVybyAgID0gIDAuMDsKLQotZmxvYXQKLV9faWVlZTc1NF9sb2cxMGYoZmxvYXQgeCkKLXsKLQlmbG9hdCB5LHo7Ci0JaW50MzJfdCBpLGssaHg7Ci0KLQlHRVRfRkxPQVRfV09SRChoeCx4KTsKLQotICAgICAgICBrPTA7Ci0gICAgICAgIGlmIChoeCA8IDB4MDA4MDAwMDApIHsgICAgICAgICAgICAgICAgICAvKiB4IDwgMioqLTEyNiAgKi8KLSAgICAgICAgICAgIGlmICgoaHgmMHg3ZmZmZmZmZik9PTApCi0gICAgICAgICAgICAgICAgcmV0dXJuIC10d28yNS96ZXJvOyAgICAgICAgICAgICAvKiBsb2coKy0wKT0taW5mICovCi0gICAgICAgICAgICBpZiAoaHg8MCkgcmV0dXJuICh4LXgpL3plcm87ICAgICAgICAvKiBsb2coLSMpID0gTmFOICovCi0gICAgICAgICAgICBrIC09IDI1OyB4ICo9IHR3bzI1OyAvKiBzdWJub3JtYWwgbnVtYmVyLCBzY2FsZSB1cCB4ICovCi0JICAgIEdFVF9GTE9BVF9XT1JEKGh4LHgpOwotICAgICAgICB9Ci0JaWYgKGh4ID49IDB4N2Y4MDAwMDApIHJldHVybiB4K3g7Ci0JayArPSAoaHg+PjIzKS0xMjc7Ci0JaSAgPSAoKHVfaW50MzJfdClrJjB4ODAwMDAwMDApPj4zMTsKLSAgICAgICAgaHggPSAoaHgmMHgwMDdmZmZmZil8KCgweDdmLWkpPDwyMyk7Ci0gICAgICAgIHkgID0gKGZsb2F0KShrK2kpOwotCVNFVF9GTE9BVF9XT1JEKHgsaHgpOwotCXogID0geSpsb2cxMF8ybG8gKyBpdmxuMTAqX19pZWVlNzU0X2xvZ2YoeCk7Ci0JcmV0dXJuICB6K3kqbG9nMTBfMmhpOwotfQpkaWZmIC0tZ2l0IGEvbGlibS9zcmMvZV9sb2dmLmMgYi9saWJtL3NyYy9lX2xvZ2YuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2NlZTJhYi4uMDAwMDAwMAotLS0gYS9saWJtL3NyYy9lX2xvZ2YuYworKysgL2Rldi9udWxsCkBAIC0xLDgzICswLDAgQEAKLS8qIGVfbG9nZi5jIC0tIGZsb2F0IHZlcnNpb24gb2YgZV9sb2cuYy4KLSAqIENvbnZlcnNpb24gdG8gZmxvYXQgYnkgSWFuIExhbmNlIFRheWxvciwgQ3lnbnVzIFN1cHBvcnQsIGlhbkBjeWdudXMuY29tLgotICovCi0KLS8qCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBDb3B5cmlnaHQgKEMpIDE5OTMgYnkgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIERldmVsb3BlZCBhdCBTdW5Qcm8sIGEgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBidXNpbmVzcy4KLSAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKLSAqIHNvZnR3YXJlIGlzIGZyZWVseSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoaXMgbm90aWNlCi0gKiBpcyBwcmVzZXJ2ZWQuCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKi8KLQotI2lmbmRlZiBsaW50Ci1zdGF0aWMgY2hhciByY3NpZFtdID0gIiRGcmVlQlNEOiBzcmMvbGliL21zdW4vc3JjL2VfbG9nZi5jLHYgMS44IDIwMDUvMTEvMTIgMTg6MjA6MDkgYmRlIEV4cCAkIjsKLSNlbmRpZgotCi0jaW5jbHVkZSAibWF0aC5oIgotI2luY2x1ZGUgIm1hdGhfcHJpdmF0ZS5oIgotCi1zdGF0aWMgY29uc3QgZmxvYXQKLWxuMl9oaSA9ICAgNi45MzEzODEyMjU2ZS0wMSwJLyogMHgzZjMxNzE4MCAqLwotbG4yX2xvID0gICA5LjA1ODAwMDYxNDVlLTA2LAkvKiAweDM3MTdmN2QxICovCi10d28yNSA9ICAgIDMuMzU1NDQzMjAwZSswNywJLyogMHg0YzAwMDAwMCAqLwotLyogfChsb2coMStzKS1sb2coMS1zKSkvcyAtIExnKHMpfCA8IDIqKi0zNC4yNCAoflstNC45NWUtMTEsIDQuOTdlLTExXSkuICovCi1MZzEgPSAgICAgIDB4YWFhYWFhLjBwLTI0LAkvKiAwLjY2NjY2NjYyNjkzICovCi1MZzIgPSAgICAgIDB4Y2NjZTEzLjBwLTI1LAkvKiAwLjQwMDAwOTcyMTUyICovCi1MZzMgPSAgICAgIDB4OTFlOWVlLjBwLTI1LAkvKiAwLjI4NDk4Nzg2Njg4ICovCi1MZzQgPSAgICAgIDB4Zjg5ZTI2LjBwLTI2OwkvKiAwLjI0Mjc5MDc4ODQxICovCi0KLXN0YXRpYyBjb25zdCBmbG9hdCB6ZXJvICAgPSAgMC4wOwotCi1mbG9hdAotX19pZWVlNzU0X2xvZ2YoZmxvYXQgeCkKLXsKLQlmbG9hdCBoZnNxLGYscyx6LFIsdyx0MSx0MixkazsKLQlpbnQzMl90IGssaXgsaSxqOwotCi0JR0VUX0ZMT0FUX1dPUkQoaXgseCk7Ci0KLQlrPTA7Ci0JaWYgKGl4IDwgMHgwMDgwMDAwMCkgewkJCS8qIHggPCAyKiotMTI2ICAqLwotCSAgICBpZiAoKGl4JjB4N2ZmZmZmZmYpPT0wKQotCQlyZXR1cm4gLXR3bzI1L3plcm87CQkvKiBsb2coKy0wKT0taW5mICovCi0JICAgIGlmIChpeDwwKSByZXR1cm4gKHgteCkvemVybzsJLyogbG9nKC0jKSA9IE5hTiAqLwotCSAgICBrIC09IDI1OyB4ICo9IHR3bzI1OyAvKiBzdWJub3JtYWwgbnVtYmVyLCBzY2FsZSB1cCB4ICovCi0JICAgIEdFVF9GTE9BVF9XT1JEKGl4LHgpOwotCX0KLQlpZiAoaXggPj0gMHg3ZjgwMDAwMCkgcmV0dXJuIHgreDsKLQlrICs9IChpeD4+MjMpLTEyNzsKLQlpeCAmPSAweDAwN2ZmZmZmOwotCWkgPSAoaXgrKDB4OTVmNjQ8PDMpKSYweDgwMDAwMDsKLQlTRVRfRkxPQVRfV09SRCh4LGl4fChpXjB4M2Y4MDAwMDApKTsJLyogbm9ybWFsaXplIHggb3IgeC8yICovCi0JayArPSAoaT4+MjMpOwotCWYgPSB4LShmbG9hdCkxLjA7Ci0JaWYoKDB4MDA3ZmZmZmYmKDE1K2l4KSk8MTYpIHsJLyogfGZ8IDwgMioqLTIwICovCi0JICAgIGlmKGY9PXplcm8pIGlmKGs9PTApIHJldHVybiB6ZXJvOyAgZWxzZSB7ZGs9KGZsb2F0KWs7Ci0JCQkJIHJldHVybiBkaypsbjJfaGkrZGsqbG4yX2xvO30KLQkgICAgUiA9IGYqZiooKGZsb2F0KTAuNS0oZmxvYXQpMC4zMzMzMzMzMzMzMzMzMzMzMypmKTsKLQkgICAgaWYoaz09MCkgcmV0dXJuIGYtUjsgZWxzZSB7ZGs9KGZsb2F0KWs7Ci0JICAgIAkgICAgIHJldHVybiBkaypsbjJfaGktKChSLWRrKmxuMl9sbyktZik7fQotCX0KLSAJcyA9IGYvKChmbG9hdCkyLjArZik7Ci0JZGsgPSAoZmxvYXQpazsKLQl6ID0gcypzOwotCWkgPSBpeC0oMHg2MTQ3YTw8Myk7Ci0JdyA9IHoqejsKLQlqID0gKDB4NmI4NTE8PDMpLWl4OwotCXQxPSB3KihMZzIrdypMZzQpOwotCXQyPSB6KihMZzErdypMZzMpOwotCWkgfD0gajsKLQlSID0gdDIrdDE7Ci0JaWYoaT4wKSB7Ci0JICAgIGhmc3E9KGZsb2F0KTAuNSpmKmY7Ci0JICAgIGlmKGs9PTApIHJldHVybiBmLShoZnNxLXMqKGhmc3ErUikpOyBlbHNlCi0JCSAgICAgcmV0dXJuIGRrKmxuMl9oaS0oKGhmc3EtKHMqKGhmc3ErUikrZGsqbG4yX2xvKSktZik7Ci0JfSBlbHNlIHsKLQkgICAgaWYoaz09MCkgcmV0dXJuIGYtcyooZi1SKTsgZWxzZQotCQkgICAgIHJldHVybiBkaypsbjJfaGktKChzKihmLVIpLWRrKmxuMl9sbyktZik7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvbGlibS9zcmMvZV9wb3cuYyBiL2xpYm0vc3JjL2VfcG93LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQyMTMxMzIuLjAwMDAwMDAKLS0tIGEvbGlibS9zcmMvZV9wb3cuYworKysgL2Rldi9udWxsCkBAIC0xLDMwNCArMCwwIEBACi0vKiBAKCMpZV9wb3cuYyAxLjUgMDQvMDQvMjIgU01JICovCi0vKgotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogQ29weXJpZ2h0IChDKSAyMDA0IGJ5IFN1biBNaWNyb3N5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCi0gKiBzb2Z0d2FyZSBpcyBmcmVlbHkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGlzIG5vdGljZSAKLSAqIGlzIHByZXNlcnZlZC4KLSAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqLwotCi0jaWZuZGVmIGxpbnQKLXN0YXRpYyBjaGFyIHJjc2lkW10gPSAiJEZyZWVCU0Q6IHNyYy9saWIvbXN1bi9zcmMvZV9wb3cuYyx2IDEuMTEgMjAwNS8wMi8wNCAxODoyNjowNiBkYXMgRXhwICQiOwotI2VuZGlmCi0KLS8qIF9faWVlZTc1NF9wb3coeCx5KSByZXR1cm4geCoqeQotICoKLSAqCQkgICAgICBuCi0gKiBNZXRob2Q6ICBMZXQgeCA9ICAyICAgKiAoMStmKQotICoJMS4gQ29tcHV0ZSBhbmQgcmV0dXJuIGxvZzIoeCkgaW4gdHdvIHBpZWNlczoKLSAqCQlsb2cyKHgpID0gdzEgKyB3MiwKLSAqCSAgIHdoZXJlIHcxIGhhcyA1My0yNCA9IDI5IGJpdCB0cmFpbGluZyB6ZXJvcy4KLSAqCTIuIFBlcmZvcm0geSpsb2cyKHgpID0gbit5JyBieSBzaW11bGF0aW5nIG11dGktcHJlY2lzaW9uIAotICoJICAgYXJpdGhtZXRpYywgd2hlcmUgfHknfDw9MC41LgotICoJMy4gUmV0dXJuIHgqKnkgPSAyKipuKmV4cCh5Jypsb2cyKQotICoKLSAqIFNwZWNpYWwgY2FzZXM6Ci0gKgkxLiAgKGFueXRoaW5nKSAqKiAwICBpcyAxCi0gKgkyLiAgKGFueXRoaW5nKSAqKiAxICBpcyBpdHNlbGYKLSAqCTMuICAoYW55dGhpbmcpICoqIE5BTiBpcyBOQU4KLSAqCTQuICBOQU4gKiogKGFueXRoaW5nIGV4Y2VwdCAwKSBpcyBOQU4KLSAqCTUuICArLSh8eHwgPiAxKSAqKiAgK0lORiBpcyArSU5GCi0gKgk2LiAgKy0ofHh8ID4gMSkgKiogIC1JTkYgaXMgKzAKLSAqCTcuICArLSh8eHwgPCAxKSAqKiAgK0lORiBpcyArMAotICoJOC4gICstKHx4fCA8IDEpICoqICAtSU5GIGlzICtJTkYKLSAqCTkuICArLTEgICAgICAgICAqKiArLUlORiBpcyBOQU4KLSAqCTEwLiArMCAqKiAoK2FueXRoaW5nIGV4Y2VwdCAwLCBOQU4pICAgICAgICAgICAgICAgaXMgKzAKLSAqCTExLiAtMCAqKiAoK2FueXRoaW5nIGV4Y2VwdCAwLCBOQU4sIG9kZCBpbnRlZ2VyKSAgaXMgKzAKLSAqCTEyLiArMCAqKiAoLWFueXRoaW5nIGV4Y2VwdCAwLCBOQU4pICAgICAgICAgICAgICAgaXMgK0lORgotICoJMTMuIC0wICoqICgtYW55dGhpbmcgZXhjZXB0IDAsIE5BTiwgb2RkIGludGVnZXIpICBpcyArSU5GCi0gKgkxNC4gLTAgKiogKG9kZCBpbnRlZ2VyKSA9IC0oICswICoqIChvZGQgaW50ZWdlcikgKQotICoJMTUuICtJTkYgKiogKCthbnl0aGluZyBleGNlcHQgMCxOQU4pIGlzICtJTkYKLSAqCTE2LiArSU5GICoqICgtYW55dGhpbmcgZXhjZXB0IDAsTkFOKSBpcyArMAotICoJMTcuIC1JTkYgKiogKGFueXRoaW5nKSAgPSAtMCAqKiAoLWFueXRoaW5nKQotICoJMTguICgtYW55dGhpbmcpICoqIChpbnRlZ2VyKSBpcyAoLTEpKiooaW50ZWdlcikqKCthbnl0aGluZyoqaW50ZWdlcikKLSAqCTE5LiAoLWFueXRoaW5nIGV4Y2VwdCAwIGFuZCBpbmYpICoqIChub24taW50ZWdlcikgaXMgTkFOCi0gKgotICogQWNjdXJhY3k6Ci0gKglwb3coeCx5KSByZXR1cm5zIHgqKnkgbmVhcmx5IHJvdW5kZWQuIEluIHBhcnRpY3VsYXIKLSAqCQkJcG93KGludGVnZXIsaW50ZWdlcikKLSAqCWFsd2F5cyByZXR1cm5zIHRoZSBjb3JyZWN0IGludGVnZXIgcHJvdmlkZWQgaXQgaXMgCi0gKglyZXByZXNlbnRhYmxlLgotICoKLSAqIENvbnN0YW50cyA6Ci0gKiBUaGUgaGV4YWRlY2ltYWwgdmFsdWVzIGFyZSB0aGUgaW50ZW5kZWQgb25lcyBmb3IgdGhlIGZvbGxvd2luZyAKLSAqIGNvbnN0YW50cy4gVGhlIGRlY2ltYWwgdmFsdWVzIG1heSBiZSB1c2VkLCBwcm92aWRlZCB0aGF0IHRoZSAKLSAqIGNvbXBpbGVyIHdpbGwgY29udmVydCBmcm9tIGRlY2ltYWwgdG8gYmluYXJ5IGFjY3VyYXRlbHkgZW5vdWdoIAotICogdG8gcHJvZHVjZSB0aGUgaGV4YWRlY2ltYWwgdmFsdWVzIHNob3duLgotICovCi0KLSNpbmNsdWRlICJtYXRoLmgiCi0jaW5jbHVkZSAibWF0aF9wcml2YXRlLmgiCi0KLXN0YXRpYyBjb25zdCBkb3VibGUKLWJwW10gPSB7MS4wLCAxLjUsfSwKLWRwX2hbXSA9IHsgMC4wLCA1Ljg0OTYyNDg3MjIwNzY0MTYwMTU2ZS0wMSx9LCAvKiAweDNGRTJCODAzLCAweDQwMDAwMDAwICovCi1kcF9sW10gPSB7IDAuMCwgMS4zNTAwMzkyMDIxMjk3NDg5NzEyOGUtMDgsfSwgLyogMHgzRTRDRkRFQiwgMHg0M0NGRDAwNiAqLwotemVybyAgICA9ICAwLjAsCi1vbmUJPSAgMS4wLAotdHdvCT0gIDIuMCwKLXR3bzUzCT0gIDkwMDcxOTkyNTQ3NDA5OTIuMCwJLyogMHg0MzQwMDAwMCwgMHgwMDAwMDAwMCAqLwotaHVnZQk9ICAxLjBlMzAwLAotdGlueSAgICA9ICAxLjBlLTMwMCwKLQkvKiBwb2x5IGNvZWZzIGZvciAoMy8yKSoobG9nKHgpLTJzLTIvMypzKiozICovCi1MMSAgPSAgNS45OTk5OTk5OTk5OTk5NDY0ODcyNWUtMDEsIC8qIDB4M0ZFMzMzMzMsIDB4MzMzMzMzMDMgKi8KLUwyICA9ICA0LjI4NTcxNDI4NTc4NTUwMTg0MjUyZS0wMSwgLyogMHgzRkRCNkRCNiwgMHhEQjZGQUJGRiAqLwotTDMgID0gIDMuMzMzMzMzMjk4MTgzNzc0MzI5MThlLTAxLCAvKiAweDNGRDU1NTU1LCAweDUxOEYyNjREICovCi1MNCAgPSAgMi43MjcyODEyMzgwODUzNDAwNjQ4OWUtMDEsIC8qIDB4M0ZEMTc0NjAsIDB4QTkxRDQxMDEgKi8KLUw1ICA9ICAyLjMwNjYwNzQ1Nzc1NTYxNzU0MDY3ZS0wMSwgLyogMHgzRkNEODY0QSwgMHg5M0M5REI2NSAqLwotTDYgID0gIDIuMDY5NzUwMTc4MDAzMzg0MTc3ODRlLTAxLCAvKiAweDNGQ0E3RTI4LCAweDRBNDU0RUVGICovCi1QMSAgID0gIDEuNjY2NjY2NjY2NjY2NjYwMTkwMzdlLTAxLCAvKiAweDNGQzU1NTU1LCAweDU1NTU1NTNFICovCi1QMiAgID0gLTIuNzc3Nzc3Nzc3NzAxNTU5MzM4NDJlLTAzLCAvKiAweEJGNjZDMTZDLCAweDE2QkVCRDkzICovCi1QMyAgID0gIDYuNjEzNzU2MzIxNDM3OTM0MzYxMTdlLTA1LCAvKiAweDNGMTE1NjZBLCAweEFGMjVERTJDICovCi1QNCAgID0gLTEuNjUzMzkwMjIwNTQ2NTI1MTUzOTBlLTA2LCAvKiAweEJFQkJCRDQxLCAweEM1RDI2QkYxICovCi1QNSAgID0gIDQuMTM4MTM2Nzk3MDU3MjM4NDYwMzllLTA4LCAvKiAweDNFNjYzNzY5LCAweDcyQkVBNEQwICovCi1sZzIgID0gIDYuOTMxNDcxODA1NTk5NDUyODYyMjdlLTAxLCAvKiAweDNGRTYyRTQyLCAweEZFRkEzOUVGICovCi1sZzJfaCAgPSAgNi45MzE0NzE4MjQ2NDU5OTYwOTM3NWUtMDEsIC8qIDB4M0ZFNjJFNDMsIDB4MDAwMDAwMDAgKi8KLWxnMl9sICA9IC0xLjkwNDY1NDI5OTk1Nzc2ODA0NTI1ZS0wOSwgLyogMHhCRTIwNUM2MSwgMHgwQ0E4NkMzOSAqLwotb3Z0ID0gIDguMDA4NTY2MjU5NTM3Mjk0NDM3MmUtMDAxNywgLyogLSgxMDI0LWxvZzIob3ZmbCsuNXVscCkpICovCi1jcCAgICA9ICA5LjYxNzk2NjkzOTI1OTc1NTU0MzI5ZS0wMSwgLyogMHgzRkVFQzcwOSwgMHhEQzNBMDNGRCA9Mi8oM2xuMikgKi8KLWNwX2ggID0gIDkuNjE3OTY3MDA5NTQ0MzcyNTU4NTllLTAxLCAvKiAweDNGRUVDNzA5LCAweEUwMDAwMDAwID0oZmxvYXQpY3AgKi8KLWNwX2wgID0gLTcuMDI4NDYxNjUwOTUyNzU4MjY1MTZlLTA5LCAvKiAweEJFM0UyRkUwLCAweDE0NUIwMUY1ID10YWlsIG9mIGNwX2gqLwotaXZsbjIgICAgPSAgMS40NDI2OTUwNDA4ODg5NjMzODcwMGUrMDAsIC8qIDB4M0ZGNzE1NDcsIDB4NjUyQjgyRkUgPTEvbG4yICovCi1pdmxuMl9oICA9ICAxLjQ0MjY5NTAyMTYyOTMzMzQ5NjA5ZSswMCwgLyogMHgzRkY3MTU0NywgMHg2MDAwMDAwMCA9MjRiIDEvbG4yKi8KLWl2bG4yX2wgID0gIDEuOTI1OTYyOTkxMTI2NjE3NDY4ODdlLTA4OyAvKiAweDNFNTRBRTBCLCAweEY4NURERjQ0ID0xL2xuMiB0YWlsKi8KLQotZG91YmxlCi1fX2llZWU3NTRfcG93KGRvdWJsZSB4LCBkb3VibGUgeSkKLXsKLQlkb3VibGUgeixheCx6X2gsel9sLHBfaCxwX2w7Ci0JZG91YmxlIHkxLHQxLHQyLHIscyx0LHUsdix3OwotCWludDMyX3QgaSxqLGsseWlzaW50LG47Ci0JaW50MzJfdCBoeCxoeSxpeCxpeTsKLQl1X2ludDMyX3QgbHgsbHk7Ci0KLQlFWFRSQUNUX1dPUkRTKGh4LGx4LHgpOwotCUVYVFJBQ1RfV09SRFMoaHksbHkseSk7Ci0JaXggPSBoeCYweDdmZmZmZmZmOyAgaXkgPSBoeSYweDdmZmZmZmZmOwotCi0gICAgLyogeT09emVybzogeCoqMCA9IDEgKi8KLQlpZigoaXl8bHkpPT0wKSByZXR1cm4gb25lOyAJCi0KLSAgICAvKiArLU5hTiByZXR1cm4geCt5ICovCi0JaWYoaXggPiAweDdmZjAwMDAwIHx8ICgoaXg9PTB4N2ZmMDAwMDApJiYobHghPTApKSB8fAotCSAgIGl5ID4gMHg3ZmYwMDAwMCB8fCAoKGl5PT0weDdmZjAwMDAwKSYmKGx5IT0wKSkpIAotCQlyZXR1cm4geCt5OwkKLQotICAgIC8qIGRldGVybWluZSBpZiB5IGlzIGFuIG9kZCBpbnQgd2hlbiB4IDwgMAotICAgICAqIHlpc2ludCA9IDAJLi4uIHkgaXMgbm90IGFuIGludGVnZXIKLSAgICAgKiB5aXNpbnQgPSAxCS4uLiB5IGlzIGFuIG9kZCBpbnQKLSAgICAgKiB5aXNpbnQgPSAyCS4uLiB5IGlzIGFuIGV2ZW4gaW50Ci0gICAgICovCi0JeWlzaW50ICA9IDA7Ci0JaWYoaHg8MCkgewkKLQkgICAgaWYoaXk+PTB4NDM0MDAwMDApIHlpc2ludCA9IDI7IC8qIGV2ZW4gaW50ZWdlciB5ICovCi0JICAgIGVsc2UgaWYoaXk+PTB4M2ZmMDAwMDApIHsKLQkJayA9IChpeT4+MjApLTB4M2ZmOwkgICAvKiBleHBvbmVudCAqLwotCQlpZihrPjIwKSB7Ci0JCSAgICBqID0gbHk+Pig1Mi1rKTsKLQkJICAgIGlmKChqPDwoNTItaykpPT1seSkgeWlzaW50ID0gMi0oaiYxKTsKLQkJfSBlbHNlIGlmKGx5PT0wKSB7Ci0JCSAgICBqID0gaXk+PigyMC1rKTsKLQkJICAgIGlmKChqPDwoMjAtaykpPT1peSkgeWlzaW50ID0gMi0oaiYxKTsKLQkJfQotCSAgICB9CQkKLQl9IAotCi0gICAgLyogc3BlY2lhbCB2YWx1ZSBvZiB5ICovCi0JaWYobHk9PTApIHsgCQotCSAgICBpZiAoaXk9PTB4N2ZmMDAwMDApIHsJLyogeSBpcyArLWluZiAqLwotCSAgICAgICAgaWYoKChpeC0weDNmZjAwMDAwKXxseCk9PTApCi0JCSAgICByZXR1cm4gIHkgLSB5OwkvKiBpbmYqKistMSBpcyBOYU4gKi8KLQkgICAgICAgIGVsc2UgaWYgKGl4ID49IDB4M2ZmMDAwMDApLyogKHx4fD4xKSoqKy1pbmYgPSBpbmYsMCAqLwotCQkgICAgcmV0dXJuIChoeT49MCk/IHk6IHplcm87Ci0JICAgICAgICBlbHNlCQkJLyogKHx4fDwxKSoqLSwraW5mID0gaW5mLDAgKi8KLQkJICAgIHJldHVybiAoaHk8MCk/LXk6IHplcm87Ci0JICAgIH0gCi0JICAgIGlmKGl5PT0weDNmZjAwMDAwKSB7CS8qIHkgaXMgICstMSAqLwotCQlpZihoeTwwKSByZXR1cm4gb25lL3g7IGVsc2UgcmV0dXJuIHg7Ci0JICAgIH0KLQkgICAgaWYoaHk9PTB4NDAwMDAwMDApIHJldHVybiB4Kng7IC8qIHkgaXMgIDIgKi8KLQkgICAgaWYoaHk9PTB4M2ZlMDAwMDApIHsJLyogeSBpcyAgMC41ICovCi0JCWlmKGh4Pj0wKQkvKiB4ID49ICswICovCi0JCXJldHVybiBzcXJ0KHgpOwkKLQkgICAgfQotCX0KLQotCWF4ICAgPSBmYWJzKHgpOwotICAgIC8qIHNwZWNpYWwgdmFsdWUgb2YgeCAqLwotCWlmKGx4PT0wKSB7Ci0JICAgIGlmKGl4PT0weDdmZjAwMDAwfHxpeD09MHx8aXg9PTB4M2ZmMDAwMDApewotCQl6ID0gYXg7CQkJLyp4IGlzICstMCwrLWluZiwrLTEqLwotCQlpZihoeTwwKSB6ID0gb25lL3o7CS8qIHogPSAoMS98eHwpICovCi0JCWlmKGh4PDApIHsKLQkJICAgIGlmKCgoaXgtMHgzZmYwMDAwMCl8eWlzaW50KT09MCkgewotCQkJeiA9ICh6LXopLyh6LXopOyAvKiAoLTEpKipub24taW50IGlzIE5hTiAqLwotCQkgICAgfSBlbHNlIGlmKHlpc2ludD09MSkgCi0JCQl6ID0gLXo7CQkvKiAoeDwwKSoqb2RkID0gLSh8eHwqKm9kZCkgKi8KLQkJfQotCQlyZXR1cm4gejsKLQkgICAgfQotCX0KLSAgICAKLSAgICAvKiBDWUdOVVMgTE9DQUwgKyBmZGxpYm0tNS4zIGZpeDogVGhpcyB1c2VkIHRvIGJlCi0JbiA9IChoeD4+MzEpKzE7Ci0gICAgICAgYnV0IEFOU0kgQyBzYXlzIGEgcmlnaHQgc2hpZnQgb2YgYSBzaWduZWQgbmVnYXRpdmUgcXVhbnRpdHkgaXMKLSAgICAgICBpbXBsZW1lbnRhdGlvbiBkZWZpbmVkLiAgKi8KLQluID0gKCh1X2ludDMyX3QpaHg+PjMxKS0xOwotCi0gICAgLyogKHg8MCkqKihub24taW50KSBpcyBOYU4gKi8KLQlpZigobnx5aXNpbnQpPT0wKSByZXR1cm4gKHgteCkvKHgteCk7Ci0KLQlzID0gb25lOyAvKiBzIChzaWduIG9mIHJlc3VsdCAtdmUqKm9kZCkgPSAtMSBlbHNlID0gMSAqLwotCWlmKChufCh5aXNpbnQtMSkpPT0wKSBzID0gLW9uZTsvKiAoLXZlKSoqKG9kZCBpbnQpICovCi0KLSAgICAvKiB8eXwgaXMgaHVnZSAqLwotCWlmKGl5PjB4NDFlMDAwMDApIHsgLyogaWYgfHl8ID4gMioqMzEgKi8KLQkgICAgaWYoaXk+MHg0M2YwMDAwMCl7CS8qIGlmIHx5fCA+IDIqKjY0LCBtdXN0IG8vdWZsb3cgKi8KLQkJaWYoaXg8PTB4M2ZlZmZmZmYpIHJldHVybiAoaHk8MCk/IGh1Z2UqaHVnZTp0aW55KnRpbnk7Ci0JCWlmKGl4Pj0weDNmZjAwMDAwKSByZXR1cm4gKGh5PjApPyBodWdlKmh1Z2U6dGlueSp0aW55OwotCSAgICB9Ci0JLyogb3Zlci91bmRlcmZsb3cgaWYgeCBpcyBub3QgY2xvc2UgdG8gb25lICovCi0JICAgIGlmKGl4PDB4M2ZlZmZmZmYpIHJldHVybiAoaHk8MCk/IHMqaHVnZSpodWdlOnMqdGlueSp0aW55OwotCSAgICBpZihpeD4weDNmZjAwMDAwKSByZXR1cm4gKGh5PjApPyBzKmh1Z2UqaHVnZTpzKnRpbnkqdGlueTsKLQkvKiBub3cgfDEteHwgaXMgdGlueSA8PSAyKiotMjAsIHN1ZmZpY2UgdG8gY29tcHV0ZSAKLQkgICBsb2coeCkgYnkgeC14XjIvMit4XjMvMy14XjQvNCAqLwotCSAgICB0ID0gYXgtb25lOwkJLyogdCBoYXMgMjAgdHJhaWxpbmcgemVyb3MgKi8KLQkgICAgdyA9ICh0KnQpKigwLjUtdCooMC4zMzMzMzMzMzMzMzMzMzMzMzMzMzMzLXQqMC4yNSkpOwotCSAgICB1ID0gaXZsbjJfaCp0OwkvKiBpdmxuMl9oIGhhcyAyMSBzaWcuIGJpdHMgKi8KLQkgICAgdiA9IHQqaXZsbjJfbC13Kml2bG4yOwotCSAgICB0MSA9IHUrdjsKLQkgICAgU0VUX0xPV19XT1JEKHQxLDApOwotCSAgICB0MiA9IHYtKHQxLXUpOwotCX0gZWxzZSB7Ci0JICAgIGRvdWJsZSBzcyxzMixzX2gsc19sLHRfaCx0X2w7Ci0JICAgIG4gPSAwOwotCS8qIHRha2UgY2FyZSBzdWJub3JtYWwgbnVtYmVyICovCi0JICAgIGlmKGl4PDB4MDAxMDAwMDApCi0JCXtheCAqPSB0d281MzsgbiAtPSA1MzsgR0VUX0hJR0hfV09SRChpeCxheCk7IH0KLQkgICAgbiAgKz0gKChpeCk+PjIwKS0weDNmZjsKLQkgICAgaiAgPSBpeCYweDAwMGZmZmZmOwotCS8qIGRldGVybWluZSBpbnRlcnZhbCAqLwotCSAgICBpeCA9IGp8MHgzZmYwMDAwMDsJCS8qIG5vcm1hbGl6ZSBpeCAqLwotCSAgICBpZihqPD0weDM5ODhFKSBrPTA7CQkvKiB8eHw8c3FydCgzLzIpICovCi0JICAgIGVsc2UgaWYoajwweEJCNjdBKSBrPTE7CS8qIHx4fDxzcXJ0KDMpICAgKi8KLQkgICAgZWxzZSB7az0wO24rPTE7aXggLT0gMHgwMDEwMDAwMDt9Ci0JICAgIFNFVF9ISUdIX1dPUkQoYXgsaXgpOwotCi0JLyogY29tcHV0ZSBzcyA9IHNfaCtzX2wgPSAoeC0xKS8oeCsxKSBvciAoeC0xLjUpLyh4KzEuNSkgKi8KLQkgICAgdSA9IGF4LWJwW2tdOwkJLyogYnBbMF09MS4wLCBicFsxXT0xLjUgKi8KLQkgICAgdiA9IG9uZS8oYXgrYnBba10pOwotCSAgICBzcyA9IHUqdjsKLQkgICAgc19oID0gc3M7Ci0JICAgIFNFVF9MT1dfV09SRChzX2gsMCk7Ci0JLyogdF9oPWF4K2JwW2tdIEhpZ2ggKi8KLQkgICAgdF9oID0gemVybzsKLQkgICAgU0VUX0hJR0hfV09SRCh0X2gsKChpeD4+MSl8MHgyMDAwMDAwMCkrMHgwMDA4MDAwMCsoazw8MTgpKTsKLQkgICAgdF9sID0gYXggLSAodF9oLWJwW2tdKTsKLQkgICAgc19sID0gdiooKHUtc19oKnRfaCktc19oKnRfbCk7Ci0JLyogY29tcHV0ZSBsb2coYXgpICovCi0JICAgIHMyID0gc3Mqc3M7Ci0JICAgIHIgPSBzMipzMiooTDErczIqKEwyK3MyKihMMytzMiooTDQrczIqKEw1K3MyKkw2KSkpKSk7Ci0JICAgIHIgKz0gc19sKihzX2grc3MpOwotCSAgICBzMiAgPSBzX2gqc19oOwotCSAgICB0X2ggPSAzLjArczIrcjsKLQkgICAgU0VUX0xPV19XT1JEKHRfaCwwKTsKLQkgICAgdF9sID0gci0oKHRfaC0zLjApLXMyKTsKLQkvKiB1K3YgPSBzcyooMSsuLi4pICovCi0JICAgIHUgPSBzX2gqdF9oOwotCSAgICB2ID0gc19sKnRfaCt0X2wqc3M7Ci0JLyogMi8oM2xvZzIpKihzcysuLi4pICovCi0JICAgIHBfaCA9IHUrdjsKLQkgICAgU0VUX0xPV19XT1JEKHBfaCwwKTsKLQkgICAgcF9sID0gdi0ocF9oLXUpOwotCSAgICB6X2ggPSBjcF9oKnBfaDsJCS8qIGNwX2grY3BfbCA9IDIvKDMqbG9nMikgKi8KLQkgICAgel9sID0gY3BfbCpwX2grcF9sKmNwK2RwX2xba107Ci0JLyogbG9nMihheCkgPSAoc3MrLi4pKjIvKDMqbG9nMikgPSBuICsgZHBfaCArIHpfaCArIHpfbCAqLwotCSAgICB0ID0gKGRvdWJsZSluOwotCSAgICB0MSA9ICgoKHpfaCt6X2wpK2RwX2hba10pK3QpOwotCSAgICBTRVRfTE9XX1dPUkQodDEsMCk7Ci0JICAgIHQyID0gel9sLSgoKHQxLXQpLWRwX2hba10pLXpfaCk7Ci0JfQotCi0gICAgLyogc3BsaXQgdXAgeSBpbnRvIHkxK3kyIGFuZCBjb21wdXRlICh5MSt5MikqKHQxK3QyKSAqLwotCXkxICA9IHk7Ci0JU0VUX0xPV19XT1JEKHkxLDApOwotCXBfbCA9ICh5LXkxKSp0MSt5KnQyOwotCXBfaCA9IHkxKnQxOwotCXogPSBwX2wrcF9oOwotCUVYVFJBQ1RfV09SRFMoaixpLHopOwotCWlmIChqPj0weDQwOTAwMDAwKSB7CQkJCS8qIHogPj0gMTAyNCAqLwotCSAgICBpZigoKGotMHg0MDkwMDAwMCl8aSkhPTApCQkJLyogaWYgeiA+IDEwMjQgKi8KLQkJcmV0dXJuIHMqaHVnZSpodWdlOwkJCS8qIG92ZXJmbG93ICovCi0JICAgIGVsc2UgewotCQlpZihwX2wrb3Z0PnotcF9oKSByZXR1cm4gcypodWdlKmh1Z2U7CS8qIG92ZXJmbG93ICovCi0JICAgIH0KLQl9IGVsc2UgaWYoKGomMHg3ZmZmZmZmZik+PTB4NDA5MGNjMDAgKSB7CS8qIHogPD0gLTEwNzUgKi8KLQkgICAgaWYoKChqLTB4YzA5MGNjMDApfGkpIT0wKSAJCS8qIHogPCAtMTA3NSAqLwotCQlyZXR1cm4gcyp0aW55KnRpbnk7CQkvKiB1bmRlcmZsb3cgKi8KLQkgICAgZWxzZSB7Ci0JCWlmKHBfbDw9ei1wX2gpIHJldHVybiBzKnRpbnkqdGlueTsJLyogdW5kZXJmbG93ICovCi0JICAgIH0KLQl9Ci0gICAgLyoKLSAgICAgKiBjb21wdXRlIDIqKihwX2grcF9sKQotICAgICAqLwotCWkgPSBqJjB4N2ZmZmZmZmY7Ci0JayA9IChpPj4yMCktMHgzZmY7Ci0JbiA9IDA7Ci0JaWYoaT4weDNmZTAwMDAwKSB7CQkvKiBpZiB8enwgPiAwLjUsIHNldCBuID0gW3orMC41XSAqLwotCSAgICBuID0gaisoMHgwMDEwMDAwMD4+KGsrMSkpOwotCSAgICBrID0gKChuJjB4N2ZmZmZmZmYpPj4yMCktMHgzZmY7CS8qIG5ldyBrIGZvciBuICovCi0JICAgIHQgPSB6ZXJvOwotCSAgICBTRVRfSElHSF9XT1JEKHQsbiZ+KDB4MDAwZmZmZmY+PmspKTsKLQkgICAgbiA9ICgobiYweDAwMGZmZmZmKXwweDAwMTAwMDAwKT4+KDIwLWspOwotCSAgICBpZihqPDApIG4gPSAtbjsKLQkgICAgcF9oIC09IHQ7Ci0JfSAKLQl0ID0gcF9sK3BfaDsKLQlTRVRfTE9XX1dPUkQodCwwKTsKLQl1ID0gdCpsZzJfaDsKLQl2ID0gKHBfbC0odC1wX2gpKSpsZzIrdCpsZzJfbDsKLQl6ID0gdSt2OwotCXcgPSB2LSh6LXUpOwotCXQgID0geip6OwotCXQxICA9IHogLSB0KihQMSt0KihQMit0KihQMyt0KihQNCt0KlA1KSkpKTsKLQlyICA9ICh6KnQxKS8odDEtdHdvKS0odyt6KncpOwotCXogID0gb25lLShyLXopOwotCUdFVF9ISUdIX1dPUkQoaix6KTsKLQlqICs9IChuPDwyMCk7Ci0JaWYoKGo+PjIwKTw9MCkgeiA9IHNjYWxibih6LG4pOwkvKiBzdWJub3JtYWwgb3V0cHV0ICovCi0JZWxzZSBTRVRfSElHSF9XT1JEKHosaik7Ci0JcmV0dXJuIHMqejsKLX0KZGlmZiAtLWdpdCBhL2xpYm0vc3JjL2VfcG93Zi5jIGIvbGlibS9zcmMvZV9wb3dmLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQxZjA4ZGQuLjAwMDAwMDAKLS0tIGEvbGlibS9zcmMvZV9wb3dmLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyNDcgKzAsMCBAQAotLyogZV9wb3dmLmMgLS0gZmxvYXQgdmVyc2lvbiBvZiBlX3Bvdy5jLgotICogQ29udmVyc2lvbiB0byBmbG9hdCBieSBJYW4gTGFuY2UgVGF5bG9yLCBDeWdudXMgU3VwcG9ydCwgaWFuQGN5Z251cy5jb20uCi0gKi8KLQotLyoKLSAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIENvcHlyaWdodCAoQykgMTk5MyBieSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogRGV2ZWxvcGVkIGF0IFN1blBybywgYSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGJ1c2luZXNzLgotICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcwotICogc29mdHdhcmUgaXMgZnJlZWx5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhpcyBub3RpY2UKLSAqIGlzIHByZXNlcnZlZC4KLSAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqLwotCi0jaWZuZGVmIGxpbnQKLXN0YXRpYyBjaGFyIHJjc2lkW10gPSAiJEZyZWVCU0Q6IHNyYy9saWIvbXN1bi9zcmMvZV9wb3dmLmMsdiAxLjEyIDIwMDQvMDYvMDEgMTk6MzM6MzAgYmRlIEV4cCAkIjsKLSNlbmRpZgotCi0jaW5jbHVkZSAibWF0aC5oIgotI2luY2x1ZGUgIm1hdGhfcHJpdmF0ZS5oIgotCi1zdGF0aWMgY29uc3QgZmxvYXQKLWJwW10gPSB7MS4wLCAxLjUsfSwKLWRwX2hbXSA9IHsgMC4wLCA1Ljg0OTYwOTM4ZS0wMSx9LCAvKiAweDNmMTVjMDAwICovCi1kcF9sW10gPSB7IDAuMCwgMS41NjMyMjA4NWUtMDYsfSwgLyogMHgzNWQxY2ZkYyAqLwotemVybyAgICA9ICAwLjAsCi1vbmUJPSAgMS4wLAotdHdvCT0gIDIuMCwKLXR3bzI0CT0gIDE2Nzc3MjE2LjAsCS8qIDB4NGI4MDAwMDAgKi8KLWh1Z2UJPSAgMS4wZTMwLAotdGlueSAgICA9ICAxLjBlLTMwLAotCS8qIHBvbHkgY29lZnMgZm9yICgzLzIpKihsb2coeCktMnMtMi8zKnMqKjMgKi8KLUwxICA9ICA2LjAwMDAwMDIzODRlLTAxLCAvKiAweDNmMTk5OTlhICovCi1MMiAgPSAgNC4yODU3MTQzMjgzZS0wMSwgLyogMHgzZWRiNmRiNyAqLwotTDMgID0gIDMuMzMzMzMzNDMyN2UtMDEsIC8qIDB4M2VhYWFhYWIgKi8KLUw0ICA9ICAyLjcyNzI4MTE1MzJlLTAxLCAvKiAweDNlOGJhMzA1ICovCi1MNSAgPSAgMi4zMDY2MDc1MTQ2ZS0wMSwgLyogMHgzZTZjMzI1NSAqLwotTDYgID0gIDIuMDY5NzUwMTMwMmUtMDEsIC8qIDB4M2U1M2YxNDIgKi8KLVAxICAgPSAgMS42NjY2NjY3MTYzZS0wMSwgLyogMHgzZTJhYWFhYiAqLwotUDIgICA9IC0yLjc3Nzc3Nzg0NTBlLTAzLCAvKiAweGJiMzYwYjYxICovCi1QMyAgID0gIDYuNjEzNzU1OTc3MGUtMDUsIC8qIDB4Mzg4YWIzNTUgKi8KLVA0ICAgPSAtMS42NTMzOTAxOTk5ZS0wNiwgLyogMHhiNWRkZWEwZSAqLwotUDUgICA9ICA0LjEzODEzNjk0NDJlLTA4LCAvKiAweDMzMzFiYjRjICovCi1sZzIgID0gIDYuOTMxNDcxODI0NmUtMDEsIC8qIDB4M2YzMTcyMTggKi8KLWxnMl9oICA9ICA2LjkzMTQ1NzUyZS0wMSwgLyogMHgzZjMxNzIwMCAqLwotbGcyX2wgID0gIDEuNDI4NjA2NTRlLTA2LCAvKiAweDM1YmZiZThjICovCi1vdnQgPSAgNC4yOTk1NjY1Njk0ZS0wOCwgLyogLSgxMjgtbG9nMihvdmZsKy41dWxwKSkgKi8KLWNwICAgID0gIDkuNjE3OTY3MDA5NWUtMDEsIC8qIDB4M2Y3NjM4NGYgPTIvKDNsbjIpICovCi1jcF9oICA9ICA5LjYxNzkxOTkyMTllLTAxLCAvKiAweDNmNzYzODAwID1oZWFkIG9mIGNwICovCi1jcF9sICA9ICA0LjcwMTczODM2MjJlLTA2LCAvKiAweDM2OWRjM2EwID10YWlsIG9mIGNwX2ggKi8KLWl2bG4yICAgID0gIDEuNDQyNjk1MDIxNmUrMDAsIC8qIDB4M2ZiOGFhM2IgPTEvbG4yICovCi1pdmxuMl9oICA9ICAxLjQ0MjY4Nzk4ODNlKzAwLCAvKiAweDNmYjhhYTAwID0xNmIgMS9sbjIqLwotaXZsbjJfbCAgPSAgNy4wNTI2MDc1NDMzZS0wNjsgLyogMHgzNmVjYTU3MCA9MS9sbjIgdGFpbCovCi0KLWZsb2F0Ci1fX2llZWU3NTRfcG93ZihmbG9hdCB4LCBmbG9hdCB5KQotewotCWZsb2F0IHosYXgsel9oLHpfbCxwX2gscF9sOwotCWZsb2F0IHkxLHQxLHQyLHIscyxzbix0LHUsdix3OwotCWludDMyX3QgaSxqLGsseWlzaW50LG47Ci0JaW50MzJfdCBoeCxoeSxpeCxpeSxpczsKLQotCUdFVF9GTE9BVF9XT1JEKGh4LHgpOwotCUdFVF9GTE9BVF9XT1JEKGh5LHkpOwotCWl4ID0gaHgmMHg3ZmZmZmZmZjsgIGl5ID0gaHkmMHg3ZmZmZmZmZjsKLQotICAgIC8qIHk9PXplcm86IHgqKjAgPSAxICovCi0JaWYoaXk9PTApIHJldHVybiBvbmU7Ci0KLSAgICAvKiArLU5hTiByZXR1cm4geCt5ICovCi0JaWYoaXggPiAweDdmODAwMDAwIHx8Ci0JICAgaXkgPiAweDdmODAwMDAwKQotCQlyZXR1cm4geCt5OwotCi0gICAgLyogZGV0ZXJtaW5lIGlmIHkgaXMgYW4gb2RkIGludCB3aGVuIHggPCAwCi0gICAgICogeWlzaW50ID0gMAkuLi4geSBpcyBub3QgYW4gaW50ZWdlcgotICAgICAqIHlpc2ludCA9IDEJLi4uIHkgaXMgYW4gb2RkIGludAotICAgICAqIHlpc2ludCA9IDIJLi4uIHkgaXMgYW4gZXZlbiBpbnQKLSAgICAgKi8KLQl5aXNpbnQgID0gMDsKLQlpZihoeDwwKSB7Ci0JICAgIGlmKGl5Pj0weDRiODAwMDAwKSB5aXNpbnQgPSAyOyAvKiBldmVuIGludGVnZXIgeSAqLwotCSAgICBlbHNlIGlmKGl5Pj0weDNmODAwMDAwKSB7Ci0JCWsgPSAoaXk+PjIzKS0weDdmOwkgICAvKiBleHBvbmVudCAqLwotCQlqID0gaXk+PigyMy1rKTsKLQkJaWYoKGo8PCgyMy1rKSk9PWl5KSB5aXNpbnQgPSAyLShqJjEpOwotCSAgICB9Ci0JfQotCi0gICAgLyogc3BlY2lhbCB2YWx1ZSBvZiB5ICovCi0JaWYgKGl5PT0weDdmODAwMDAwKSB7CS8qIHkgaXMgKy1pbmYgKi8KLQkgICAgaWYgKGl4PT0weDNmODAwMDAwKQotCSAgICAgICAgcmV0dXJuICB5IC0geTsJLyogaW5mKiorLTEgaXMgTmFOICovCi0JICAgIGVsc2UgaWYgKGl4ID4gMHgzZjgwMDAwMCkvKiAofHh8PjEpKiorLWluZiA9IGluZiwwICovCi0JICAgICAgICByZXR1cm4gKGh5Pj0wKT8geTogemVybzsKLQkgICAgZWxzZQkJCS8qICh8eHw8MSkqKi0sK2luZiA9IGluZiwwICovCi0JICAgICAgICByZXR1cm4gKGh5PDApPy15OiB6ZXJvOwotCX0KLQlpZihpeT09MHgzZjgwMDAwMCkgewkvKiB5IGlzICArLTEgKi8KLQkgICAgaWYoaHk8MCkgcmV0dXJuIG9uZS94OyBlbHNlIHJldHVybiB4OwotCX0KLQlpZihoeT09MHg0MDAwMDAwMCkgcmV0dXJuIHgqeDsgLyogeSBpcyAgMiAqLwotCWlmKGh5PT0weDNmMDAwMDAwKSB7CS8qIHkgaXMgIDAuNSAqLwotCSAgICBpZihoeD49MCkJLyogeCA+PSArMCAqLwotCSAgICByZXR1cm4gX19pZWVlNzU0X3NxcnRmKHgpOwotCX0KLQotCWF4ICAgPSBmYWJzZih4KTsKLSAgICAvKiBzcGVjaWFsIHZhbHVlIG9mIHggKi8KLQlpZihpeD09MHg3ZjgwMDAwMHx8aXg9PTB8fGl4PT0weDNmODAwMDAwKXsKLQkgICAgeiA9IGF4OwkJCS8qeCBpcyArLTAsKy1pbmYsKy0xKi8KLQkgICAgaWYoaHk8MCkgeiA9IG9uZS96OwkvKiB6ID0gKDEvfHh8KSAqLwotCSAgICBpZihoeDwwKSB7Ci0JCWlmKCgoaXgtMHgzZjgwMDAwMCl8eWlzaW50KT09MCkgewotCQkgICAgeiA9ICh6LXopLyh6LXopOyAvKiAoLTEpKipub24taW50IGlzIE5hTiAqLwotCQl9IGVsc2UgaWYoeWlzaW50PT0xKQotCQkgICAgeiA9IC16OwkJLyogKHg8MCkqKm9kZCA9IC0ofHh8KipvZGQpICovCi0JICAgIH0KLQkgICAgcmV0dXJuIHo7Ci0JfQotCi0JbiA9ICgodV9pbnQzMl90KWh4Pj4zMSktMTsKLQotICAgIC8qICh4PDApKioobm9uLWludCkgaXMgTmFOICovCi0JaWYoKG58eWlzaW50KT09MCkgcmV0dXJuICh4LXgpLyh4LXgpOwotCi0Jc24gPSBvbmU7IC8qIHMgKHNpZ24gb2YgcmVzdWx0IC12ZSoqb2RkKSA9IC0xIGVsc2UgPSAxICovCi0JaWYoKG58KHlpc2ludC0xKSk9PTApIHNuID0gLW9uZTsvKiAoLXZlKSoqKG9kZCBpbnQpICovCi0KLSAgICAvKiB8eXwgaXMgaHVnZSAqLwotCWlmKGl5PjB4NGQwMDAwMDApIHsgLyogaWYgfHl8ID4gMioqMjcgKi8KLQkvKiBvdmVyL3VuZGVyZmxvdyBpZiB4IGlzIG5vdCBjbG9zZSB0byBvbmUgKi8KLQkgICAgaWYoaXg8MHgzZjdmZmZmOCkgcmV0dXJuIChoeTwwKT8gc24qaHVnZSpodWdlOnNuKnRpbnkqdGlueTsKLQkgICAgaWYoaXg+MHgzZjgwMDAwNykgcmV0dXJuIChoeT4wKT8gc24qaHVnZSpodWdlOnNuKnRpbnkqdGlueTsKLQkvKiBub3cgfDEteHwgaXMgdGlueSA8PSAyKiotMjAsIHN1ZmZpY2UgdG8gY29tcHV0ZQotCSAgIGxvZyh4KSBieSB4LXheMi8yK3heMy8zLXheNC80ICovCi0JICAgIHQgPSBheC0xOwkJLyogdCBoYXMgMjAgdHJhaWxpbmcgemVyb3MgKi8KLQkgICAgdyA9ICh0KnQpKigoZmxvYXQpMC41LXQqKChmbG9hdCkwLjMzMzMzMzMzMzMzMy10KihmbG9hdCkwLjI1KSk7Ci0JICAgIHUgPSBpdmxuMl9oKnQ7CS8qIGl2bG4yX2ggaGFzIDE2IHNpZy4gYml0cyAqLwotCSAgICB2ID0gdCppdmxuMl9sLXcqaXZsbjI7Ci0JICAgIHQxID0gdSt2OwotCSAgICBHRVRfRkxPQVRfV09SRChpcyx0MSk7Ci0JICAgIFNFVF9GTE9BVF9XT1JEKHQxLGlzJjB4ZmZmZmYwMDApOwotCSAgICB0MiA9IHYtKHQxLXUpOwotCX0gZWxzZSB7Ci0JICAgIGZsb2F0IHMyLHNfaCxzX2wsdF9oLHRfbDsKLQkgICAgbiA9IDA7Ci0JLyogdGFrZSBjYXJlIHN1Ym5vcm1hbCBudW1iZXIgKi8KLQkgICAgaWYoaXg8MHgwMDgwMDAwMCkKLQkJe2F4ICo9IHR3bzI0OyBuIC09IDI0OyBHRVRfRkxPQVRfV09SRChpeCxheCk7IH0KLQkgICAgbiAgKz0gKChpeCk+PjIzKS0weDdmOwotCSAgICBqICA9IGl4JjB4MDA3ZmZmZmY7Ci0JLyogZGV0ZXJtaW5lIGludGVydmFsICovCi0JICAgIGl4ID0ganwweDNmODAwMDAwOwkJLyogbm9ybWFsaXplIGl4ICovCi0JICAgIGlmKGo8PTB4MWNjNDcxKSBrPTA7CS8qIHx4fDxzcXJ0KDMvMikgKi8KLQkgICAgZWxzZSBpZihqPDB4NWRiM2Q3KSBrPTE7CS8qIHx4fDxzcXJ0KDMpICAgKi8KLQkgICAgZWxzZSB7az0wO24rPTE7aXggLT0gMHgwMDgwMDAwMDt9Ci0JICAgIFNFVF9GTE9BVF9XT1JEKGF4LGl4KTsKLQotCS8qIGNvbXB1dGUgcyA9IHNfaCtzX2wgPSAoeC0xKS8oeCsxKSBvciAoeC0xLjUpLyh4KzEuNSkgKi8KLQkgICAgdSA9IGF4LWJwW2tdOwkJLyogYnBbMF09MS4wLCBicFsxXT0xLjUgKi8KLQkgICAgdiA9IG9uZS8oYXgrYnBba10pOwotCSAgICBzID0gdSp2OwotCSAgICBzX2ggPSBzOwotCSAgICBHRVRfRkxPQVRfV09SRChpcyxzX2gpOwotCSAgICBTRVRfRkxPQVRfV09SRChzX2gsaXMmMHhmZmZmZjAwMCk7Ci0JLyogdF9oPWF4K2JwW2tdIEhpZ2ggKi8KLQkgICAgaXMgPSAoKGl4Pj4xKSYweGZmZmZmMDAwKXwweDIwMDAwMDAwOwotCSAgICBTRVRfRkxPQVRfV09SRCh0X2gsaXMrMHgwMDQwMDAwMCsoazw8MjEpKTsKLQkgICAgdF9sID0gYXggLSAodF9oLWJwW2tdKTsKLQkgICAgc19sID0gdiooKHUtc19oKnRfaCktc19oKnRfbCk7Ci0JLyogY29tcHV0ZSBsb2coYXgpICovCi0JICAgIHMyID0gcypzOwotCSAgICByID0gczIqczIqKEwxK3MyKihMMitzMiooTDMrczIqKEw0K3MyKihMNStzMipMNikpKSkpOwotCSAgICByICs9IHNfbCooc19oK3MpOwotCSAgICBzMiAgPSBzX2gqc19oOwotCSAgICB0X2ggPSAoZmxvYXQpMy4wK3MyK3I7Ci0JICAgIEdFVF9GTE9BVF9XT1JEKGlzLHRfaCk7Ci0JICAgIFNFVF9GTE9BVF9XT1JEKHRfaCxpcyYweGZmZmZmMDAwKTsKLQkgICAgdF9sID0gci0oKHRfaC0oZmxvYXQpMy4wKS1zMik7Ci0JLyogdSt2ID0gcyooMSsuLi4pICovCi0JICAgIHUgPSBzX2gqdF9oOwotCSAgICB2ID0gc19sKnRfaCt0X2wqczsKLQkvKiAyLygzbG9nMikqKHMrLi4uKSAqLwotCSAgICBwX2ggPSB1K3Y7Ci0JICAgIEdFVF9GTE9BVF9XT1JEKGlzLHBfaCk7Ci0JICAgIFNFVF9GTE9BVF9XT1JEKHBfaCxpcyYweGZmZmZmMDAwKTsKLQkgICAgcF9sID0gdi0ocF9oLXUpOwotCSAgICB6X2ggPSBjcF9oKnBfaDsJCS8qIGNwX2grY3BfbCA9IDIvKDMqbG9nMikgKi8KLQkgICAgel9sID0gY3BfbCpwX2grcF9sKmNwK2RwX2xba107Ci0JLyogbG9nMihheCkgPSAocysuLikqMi8oMypsb2cyKSA9IG4gKyBkcF9oICsgel9oICsgel9sICovCi0JICAgIHQgPSAoZmxvYXQpbjsKLQkgICAgdDEgPSAoKCh6X2grel9sKStkcF9oW2tdKSt0KTsKLQkgICAgR0VUX0ZMT0FUX1dPUkQoaXMsdDEpOwotCSAgICBTRVRfRkxPQVRfV09SRCh0MSxpcyYweGZmZmZmMDAwKTsKLQkgICAgdDIgPSB6X2wtKCgodDEtdCktZHBfaFtrXSktel9oKTsKLQl9Ci0KLSAgICAvKiBzcGxpdCB1cCB5IGludG8geTEreTIgYW5kIGNvbXB1dGUgKHkxK3kyKSoodDErdDIpICovCi0JR0VUX0ZMT0FUX1dPUkQoaXMseSk7Ci0JU0VUX0ZMT0FUX1dPUkQoeTEsaXMmMHhmZmZmZjAwMCk7Ci0JcF9sID0gKHkteTEpKnQxK3kqdDI7Ci0JcF9oID0geTEqdDE7Ci0JeiA9IHBfbCtwX2g7Ci0JR0VUX0ZMT0FUX1dPUkQoaix6KTsKLQlpZiAoaj4weDQzMDAwMDAwKQkJCQkvKiBpZiB6ID4gMTI4ICovCi0JICAgIHJldHVybiBzbipodWdlKmh1Z2U7CQkJLyogb3ZlcmZsb3cgKi8KLQllbHNlIGlmIChqPT0weDQzMDAwMDAwKSB7CQkJLyogaWYgeiA9PSAxMjggKi8KLQkgICAgaWYocF9sK292dD56LXBfaCkgcmV0dXJuIHNuKmh1Z2UqaHVnZTsJLyogb3ZlcmZsb3cgKi8KLQl9Ci0JZWxzZSBpZiAoKGomMHg3ZmZmZmZmZik+MHg0MzE2MDAwMCkJCS8qIHogPD0gLTE1MCAqLwotCSAgICByZXR1cm4gc24qdGlueSp0aW55OwkJCS8qIHVuZGVyZmxvdyAqLwotCWVsc2UgaWYgKGo9PTB4YzMxNjAwMDApewkJCS8qIHogPT0gLTE1MCAqLwotCSAgICBpZihwX2w8PXotcF9oKSByZXR1cm4gc24qdGlueSp0aW55OwkJLyogdW5kZXJmbG93ICovCi0JfQotICAgIC8qCi0gICAgICogY29tcHV0ZSAyKioocF9oK3BfbCkKLSAgICAgKi8KLQlpID0gaiYweDdmZmZmZmZmOwotCWsgPSAoaT4+MjMpLTB4N2Y7Ci0JbiA9IDA7Ci0JaWYoaT4weDNmMDAwMDAwKSB7CQkvKiBpZiB8enwgPiAwLjUsIHNldCBuID0gW3orMC41XSAqLwotCSAgICBuID0gaisoMHgwMDgwMDAwMD4+KGsrMSkpOwotCSAgICBrID0gKChuJjB4N2ZmZmZmZmYpPj4yMyktMHg3ZjsJLyogbmV3IGsgZm9yIG4gKi8KLQkgICAgU0VUX0ZMT0FUX1dPUkQodCxuJn4oMHgwMDdmZmZmZj4+aykpOwotCSAgICBuID0gKChuJjB4MDA3ZmZmZmYpfDB4MDA4MDAwMDApPj4oMjMtayk7Ci0JICAgIGlmKGo8MCkgbiA9IC1uOwotCSAgICBwX2ggLT0gdDsKLQl9Ci0JdCA9IHBfbCtwX2g7Ci0JR0VUX0ZMT0FUX1dPUkQoaXMsdCk7Ci0JU0VUX0ZMT0FUX1dPUkQodCxpcyYweGZmZmY4MDAwKTsKLQl1ID0gdCpsZzJfaDsKLQl2ID0gKHBfbC0odC1wX2gpKSpsZzIrdCpsZzJfbDsKLQl6ID0gdSt2OwotCXcgPSB2LSh6LXUpOwotCXQgID0geip6OwotCXQxICA9IHogLSB0KihQMSt0KihQMit0KihQMyt0KihQNCt0KlA1KSkpKTsKLQlyICA9ICh6KnQxKS8odDEtdHdvKS0odyt6KncpOwotCXogID0gb25lLShyLXopOwotCUdFVF9GTE9BVF9XT1JEKGoseik7Ci0JaiArPSAobjw8MjMpOwotCWlmKChqPj4yMyk8PTApIHogPSBzY2FsYm5mKHosbik7CS8qIHN1Ym5vcm1hbCBvdXRwdXQgKi8KLQllbHNlIFNFVF9GTE9BVF9XT1JEKHosaik7Ci0JcmV0dXJuIHNuKno7Ci19CmRpZmYgLS1naXQgYS9saWJtL3NyYy9lX3JlbV9waW8yLmMgYi9saWJtL3NyYy9lX3JlbV9waW8yLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEyMWJhMjkuLjAwMDAwMDAKLS0tIGEvbGlibS9zcmMvZV9yZW1fcGlvMi5jCisrKyAvZGV2L251bGwKQEAgLTEsMTY4ICswLDAgQEAKLQotLyogQCgjKWVfcmVtX3BpbzIuYyAxLjQgOTUvMDEvMTggKi8KLS8qCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBDb3B5cmlnaHQgKEMpIDE5OTMgYnkgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIERldmVsb3BlZCBhdCBTdW5Tb2Z0LCBhIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gYnVzaW5lc3MuCi0gKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCi0gKiBzb2Z0d2FyZSBpcyBmcmVlbHkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGlzIG5vdGljZSAKLSAqIGlzIHByZXNlcnZlZC4KLSAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqCi0gKi8KLQotI2lmbmRlZiBsaW50Ci1zdGF0aWMgY2hhciByY3NpZFtdID0gIiRGcmVlQlNEOiBzcmMvbGliL21zdW4vc3JjL2VfcmVtX3BpbzIuYyx2IDEuOCAyMDA1LzAyLzA0IDE4OjI2OjA2IGRhcyBFeHAgJCI7Ci0jZW5kaWYKLQotLyogX19pZWVlNzU0X3JlbV9waW8yKHgseSkKLSAqIAotICogcmV0dXJuIHRoZSByZW1haW5kZXIgb2YgeCByZW0gcGkvMiBpbiB5WzBdK3lbMV0gCi0gKiB1c2UgX19rZXJuZWxfcmVtX3BpbzIoKQotICovCi0KLSNpbmNsdWRlICJtYXRoLmgiCi0jaW5jbHVkZSAibWF0aF9wcml2YXRlLmgiCi0KLS8qCi0gKiBUYWJsZSBvZiBjb25zdGFudHMgZm9yIDIvcGksIDM5NiBIZXggZGlnaXRzICg0NzYgZGVjaW1hbCkgb2YgMi9waSAKLSAqLwotc3RhdGljIGNvbnN0IGludDMyX3QgdHdvX292ZXJfcGlbXSA9IHsKLTB4QTJGOTgzLCAweDZFNEU0NCwgMHgxNTI5RkMsIDB4Mjc1N0QxLCAweEY1MzRERCwgMHhDMERCNjIsIAotMHg5NTk5M0MsIDB4NDM5MDQxLCAweEZFNTE2MywgMHhBQkRFQkIsIDB4QzU2MUI3LCAweDI0NkUzQSwgCi0weDQyNEREMiwgMHhFMDA2NDksIDB4MkVFQTA5LCAweEQxOTIxQywgMHhGRTFERUIsIDB4MUNCMTI5LCAKLTB4QTczRUU4LCAweDgyMzVGNSwgMHgyRUJCNDQsIDB4ODRFOTlDLCAweDcwMjZCNCwgMHg1RjdFNDEsIAotMHgzOTkxRDYsIDB4Mzk4MzUzLCAweDM5RjQ5QywgMHg4NDVGOEIsIDB4QkRGOTI4LCAweDNCMUZGOCwgCi0weDk3RkZERSwgMHgwNTk4MEYsIDB4RUYyRjExLCAweDhCNUEwQSwgMHg2RDFGNkQsIDB4MzY3RUNGLCAKLTB4MjdDQjA5LCAweEI3NEY0NiwgMHgzRjY2OUUsIDB4NUZFQTJELCAweDc1MjdCQSwgMHhDN0VCRTUsIAotMHhGMTdCM0QsIDB4MDczOUY3LCAweDhBNTI5MiwgMHhFQTZCRkIsIDB4NUZCMTFGLCAweDhENUQwOCwgCi0weDU2MDMzMCwgMHg0NkZDN0IsIDB4NkJBQkYwLCAweENGQkMyMCwgMHg5QUY0MzYsIDB4MURBOUUzLCAKLTB4OTE2MTVFLCAweEU2MUIwOCwgMHg2NTk5ODUsIDB4NUYxNEEwLCAweDY4NDA4RCwgMHhGRkQ4ODAsIAotMHg0RDczMjcsIDB4MzEwNjA2LCAweDE1NTZDQSwgMHg3M0E4QzksIDB4NjBFMjdCLCAweEMwOEM2QiwgCi19OwotCi1zdGF0aWMgY29uc3QgaW50MzJfdCBucGlvMl9od1tdID0gewotMHgzRkY5MjFGQiwgMHg0MDA5MjFGQiwgMHg0MDEyRDk3QywgMHg0MDE5MjFGQiwgMHg0MDFGNkE3QSwgMHg0MDIyRDk3QywKLTB4NDAyNUZEQkIsIDB4NDAyOTIxRkIsIDB4NDAyQzQ2M0EsIDB4NDAyRjZBN0EsIDB4NDAzMTQ3NUMsIDB4NDAzMkQ5N0MsCi0weDQwMzQ2QjlDLCAweDQwMzVGREJCLCAweDQwMzc4RkRCLCAweDQwMzkyMUZCLCAweDQwM0FCNDFCLCAweDQwM0M0NjNBLAotMHg0MDNERDg1QSwgMHg0MDNGNkE3QSwgMHg0MDQwN0U0QywgMHg0MDQxNDc1QywgMHg0MDQyMTA2QywgMHg0MDQyRDk3QywKLTB4NDA0M0EyOEMsIDB4NDA0NDZCOUMsIDB4NDA0NTM0QUMsIDB4NDA0NUZEQkIsIDB4NDA0NkM2Q0IsIDB4NDA0NzhGREIsCi0weDQwNDg1OEVCLCAweDQwNDkyMUZCLAotfTsKLQotLyoKLSAqIGludnBpbzI6ICA1MyBiaXRzIG9mIDIvcGkKLSAqIHBpbzJfMTogICBmaXJzdCAgMzMgYml0IG9mIHBpLzIKLSAqIHBpbzJfMXQ6ICBwaS8yIC0gcGlvMl8xCi0gKiBwaW8yXzI6ICAgc2Vjb25kIDMzIGJpdCBvZiBwaS8yCi0gKiBwaW8yXzJ0OiAgcGkvMiAtIChwaW8yXzErcGlvMl8yKQotICogcGlvMl8zOiAgIHRoaXJkICAzMyBiaXQgb2YgcGkvMgotICogcGlvMl8zdDogIHBpLzIgLSAocGlvMl8xK3BpbzJfMitwaW8yXzMpCi0gKi8KLQotc3RhdGljIGNvbnN0IGRvdWJsZQotemVybyA9ICAwLjAwMDAwMDAwMDAwMDAwMDAwMDAwZSswMCwgLyogMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCAqLwotaGFsZiA9ICA1LjAwMDAwMDAwMDAwMDAwMDAwMDAwZS0wMSwgLyogMHgzRkUwMDAwMCwgMHgwMDAwMDAwMCAqLwotdHdvMjQgPSAgMS42Nzc3MjE2MDAwMDAwMDAwMDAwMGUrMDcsIC8qIDB4NDE3MDAwMDAsIDB4MDAwMDAwMDAgKi8KLWludnBpbzIgPSAgNi4zNjYxOTc3MjM2NzU4MTM4MjQzM2UtMDEsIC8qIDB4M0ZFNDVGMzAsIDB4NkRDOUM4ODMgKi8KLXBpbzJfMSAgPSAgMS41NzA3OTYzMjY3MzQxMjU2MTQxN2UrMDAsIC8qIDB4M0ZGOTIxRkIsIDB4NTQ0MDAwMDAgKi8KLXBpbzJfMXQgPSAgNi4wNzcxMDA1MDY1MDYxOTIyNDkzMmUtMTEsIC8qIDB4M0REMEI0NjEsIDB4MUE2MjYzMzEgKi8KLXBpbzJfMiAgPSAgNi4wNzcxMDA1MDYzMDM5NjU5NzY2MGUtMTEsIC8qIDB4M0REMEI0NjEsIDB4MUE2MDAwMDAgKi8KLXBpbzJfMnQgPSAgMi4wMjIyNjYyNDg3OTU5NTA2MzE1NGUtMjEsIC8qIDB4M0JBMzE5OEEsIDB4MkUwMzcwNzMgKi8KLXBpbzJfMyAgPSAgMi4wMjIyNjYyNDg3MTExNjY0NTU4MGUtMjEsIC8qIDB4M0JBMzE5OEEsIDB4MkUwMDAwMDAgKi8KLXBpbzJfM3QgPSAgOC40Nzg0Mjc2NjAzNjg4OTk1Njk5N2UtMzI7IC8qIDB4Mzk3QjgzOUEsIDB4MjUyMDQ5QzEgKi8KLQotCWludDMyX3QgX19pZWVlNzU0X3JlbV9waW8yKGRvdWJsZSB4LCBkb3VibGUgKnkpCi17Ci0JZG91YmxlIHosdyx0LHIsZm47Ci0JZG91YmxlIHR4WzNdOwotCWludDMyX3QgZTAsaSxqLG54LG4saXgsaHg7Ci0JdV9pbnQzMl90IGxvdzsKLQotCUdFVF9ISUdIX1dPUkQoaHgseCk7CQkvKiBoaWdoIHdvcmQgb2YgeCAqLwotCWl4ID0gaHgmMHg3ZmZmZmZmZjsKLQlpZihpeDw9MHgzZmU5MjFmYikgICAvKiB8eHwgfjw9IHBpLzQgLCBubyBuZWVkIGZvciByZWR1Y3Rpb24gKi8KLQkgICAge3lbMF0gPSB4OyB5WzFdID0gMDsgcmV0dXJuIDA7fQotCWlmKGl4PDB4NDAwMmQ5N2MpIHsgIC8qIHx4fCA8IDNwaS80LCBzcGVjaWFsIGNhc2Ugd2l0aCBuPSstMSAqLwotCSAgICBpZihoeD4wKSB7IAotCQl6ID0geCAtIHBpbzJfMTsKLQkJaWYoaXghPTB4M2ZmOTIxZmIpIHsgCS8qIDMzKzUzIGJpdCBwaSBpcyBnb29kIGVub3VnaCAqLwotCQkgICAgeVswXSA9IHogLSBwaW8yXzF0OwotCQkgICAgeVsxXSA9ICh6LXlbMF0pLXBpbzJfMXQ7Ci0JCX0gZWxzZSB7CQkvKiBuZWFyIHBpLzIsIHVzZSAzMyszMys1MyBiaXQgcGkgKi8KLQkJICAgIHogLT0gcGlvMl8yOwotCQkgICAgeVswXSA9IHogLSBwaW8yXzJ0OwotCQkgICAgeVsxXSA9ICh6LXlbMF0pLXBpbzJfMnQ7Ci0JCX0KLQkJcmV0dXJuIDE7Ci0JICAgIH0gZWxzZSB7CS8qIG5lZ2F0aXZlIHggKi8KLQkJeiA9IHggKyBwaW8yXzE7Ci0JCWlmKGl4IT0weDNmZjkyMWZiKSB7IAkvKiAzMys1MyBiaXQgcGkgaXMgZ29vZCBlbm91Z2ggKi8KLQkJICAgIHlbMF0gPSB6ICsgcGlvMl8xdDsKLQkJICAgIHlbMV0gPSAoei15WzBdKStwaW8yXzF0OwotCQl9IGVsc2UgewkJLyogbmVhciBwaS8yLCB1c2UgMzMrMzMrNTMgYml0IHBpICovCi0JCSAgICB6ICs9IHBpbzJfMjsKLQkJICAgIHlbMF0gPSB6ICsgcGlvMl8ydDsKLQkJICAgIHlbMV0gPSAoei15WzBdKStwaW8yXzJ0OwotCQl9Ci0JCXJldHVybiAtMTsKLQkgICAgfQotCX0KLQlpZihpeDw9MHg0MTM5MjFmYikgeyAvKiB8eHwgfjw9IDJeMTkqKHBpLzIpLCBtZWRpdW0gc2l6ZSAqLwotCSAgICB0ICA9IGZhYnMoeCk7Ci0JICAgIG4gID0gKGludDMyX3QpICh0KmludnBpbzIraGFsZik7Ci0JICAgIGZuID0gKGRvdWJsZSluOwotCSAgICByICA9IHQtZm4qcGlvMl8xOwotCSAgICB3ICA9IGZuKnBpbzJfMXQ7CS8qIDFzdCByb3VuZCBnb29kIHRvIDg1IGJpdCAqLwotCSAgICBpZihuPDMyJiZpeCE9bnBpbzJfaHdbbi0xXSkgewkKLQkJeVswXSA9IHItdzsJLyogcXVpY2sgY2hlY2sgbm8gY2FuY2VsbGF0aW9uICovCi0JICAgIH0gZWxzZSB7Ci0JICAgICAgICB1X2ludDMyX3QgaGlnaDsKLQkgICAgICAgIGogID0gaXg+PjIwOwotCSAgICAgICAgeVswXSA9IHItdzsgCi0JCUdFVF9ISUdIX1dPUkQoaGlnaCx5WzBdKTsKLQkgICAgICAgIGkgPSBqLSgoaGlnaD4+MjApJjB4N2ZmKTsKLQkgICAgICAgIGlmKGk+MTYpIHsgIC8qIDJuZCBpdGVyYXRpb24gbmVlZGVkLCBnb29kIHRvIDExOCAqLwotCQkgICAgdCAgPSByOwotCQkgICAgdyAgPSBmbipwaW8yXzI7CQotCQkgICAgciAgPSB0LXc7Ci0JCSAgICB3ICA9IGZuKnBpbzJfMnQtKCh0LXIpLXcpOwkKLQkJICAgIHlbMF0gPSByLXc7Ci0JCSAgICBHRVRfSElHSF9XT1JEKGhpZ2gseVswXSk7Ci0JCSAgICBpID0gai0oKGhpZ2g+PjIwKSYweDdmZik7Ci0JCSAgICBpZihpPjQ5KSAgewkvKiAzcmQgaXRlcmF0aW9uIG5lZWQsIDE1MSBiaXRzIGFjYyAqLwotCQkgICAgCXQgID0gcjsJLyogd2lsbCBjb3ZlciBhbGwgcG9zc2libGUgY2FzZXMgKi8KLQkJICAgIAl3ICA9IGZuKnBpbzJfMzsJCi0JCSAgICAJciAgPSB0LXc7Ci0JCSAgICAJdyAgPSBmbipwaW8yXzN0LSgodC1yKS13KTsJCi0JCSAgICAJeVswXSA9IHItdzsKLQkJICAgIH0KLQkJfQotCSAgICB9Ci0JICAgIHlbMV0gPSAoci15WzBdKS13OwotCSAgICBpZihoeDwwKSAJe3lbMF0gPSAteVswXTsgeVsxXSA9IC15WzFdOyByZXR1cm4gLW47fQotCSAgICBlbHNlCSByZXR1cm4gbjsKLQl9Ci0gICAgLyogCi0gICAgICogYWxsIG90aGVyIChsYXJnZSkgYXJndW1lbnRzCi0gICAgICovCi0JaWYoaXg+PTB4N2ZmMDAwMDApIHsJCS8qIHggaXMgaW5mIG9yIE5hTiAqLwotCSAgICB5WzBdPXlbMV09eC14OyByZXR1cm4gMDsKLQl9Ci0gICAgLyogc2V0IHogPSBzY2FsYm4ofHh8LGlsb2diKHgpLTIzKSAqLwotCUdFVF9MT1dfV09SRChsb3cseCk7Ci0JU0VUX0xPV19XT1JEKHosbG93KTsKLQllMCAJPSAoaXg+PjIwKS0xMDQ2OwkvKiBlMCA9IGlsb2diKHopLTIzOyAqLwotCVNFVF9ISUdIX1dPUkQoeiwgaXggLSAoKGludDMyX3QpKGUwPDwyMCkpKTsKLQlmb3IoaT0wO2k8MjtpKyspIHsKLQkJdHhbaV0gPSAoZG91YmxlKSgoaW50MzJfdCkoeikpOwotCQl6ICAgICA9ICh6LXR4W2ldKSp0d28yNDsKLQl9Ci0JdHhbMl0gPSB6OwotCW54ID0gMzsKLQl3aGlsZSh0eFtueC0xXT09emVybykgbngtLTsJLyogc2tpcCB6ZXJvIHRlcm0gKi8KLQluICA9ICBfX2tlcm5lbF9yZW1fcGlvMih0eCx5LGUwLG54LDIsdHdvX292ZXJfcGkpOwotCWlmKGh4PDApIHt5WzBdID0gLXlbMF07IHlbMV0gPSAteVsxXTsgcmV0dXJuIC1uO30KLQlyZXR1cm4gbjsKLX0KZGlmZiAtLWdpdCBhL2xpYm0vc3JjL2VfcmVtX3BpbzJmLmMgYi9saWJtL3NyYy9lX3JlbV9waW8yZi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MjMxY2Q0Li4wMDAwMDAwCi0tLSBhL2xpYm0vc3JjL2VfcmVtX3BpbzJmLmMKKysrIC9kZXYvbnVsbApAQCAtMSw5OCArMCwwIEBACi0vKiBlX3JlbV9waW8yZi5jIC0tIGZsb2F0IHZlcnNpb24gb2YgZV9yZW1fcGlvMi5jCi0gKiBDb252ZXJzaW9uIHRvIGZsb2F0IGJ5IElhbiBMYW5jZSBUYXlsb3IsIEN5Z251cyBTdXBwb3J0LCBpYW5AY3lnbnVzLmNvbS4KLSAqIERlYnVnZ2VkIGFuZCBvcHRpbWl6ZWQgYnkgQnJ1Y2UgRC4gRXZhbnMuCi0gKi8KLQotLyoKLSAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIENvcHlyaWdodCAoQykgMTk5MyBieSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogRGV2ZWxvcGVkIGF0IFN1blBybywgYSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGJ1c2luZXNzLgotICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcwotICogc29mdHdhcmUgaXMgZnJlZWx5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhpcyBub3RpY2UKLSAqIGlzIHByZXNlcnZlZC4KLSAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqLwotCi0jaWZuZGVmIGxpbnQKLXN0YXRpYyBjaGFyIHJjc2lkW10gPSAiJEZyZWVCU0Q6IHNyYy9saWIvbXN1bi9zcmMvZV9yZW1fcGlvMmYuYyx2IDEuMTkgMjAwNS8xMS8yMyAwMzowMzowOSBiZGUgRXhwICQiOwotI2VuZGlmCi0KLS8qIF9faWVlZTc1NF9yZW1fcGlvMmYoeCx5KQotICoKLSAqIHJldHVybiB0aGUgcmVtYWluZGVyIG9mIHggcmVtIHBpLzIgaW4geVswXSt5WzFdCi0gKiB1c2UgZG91YmxlIHByZWNpc2lvbiBpbnRlcm5hbGx5Ci0gKiB1c2UgX19rZXJuZWxfcmVtX3BpbzIoKSBmb3IgbGFyZ2UgeAotICovCi0KLSNpbmNsdWRlICJtYXRoLmgiCi0jaW5jbHVkZSAibWF0aF9wcml2YXRlLmgiCi0KLS8qCi0gKiBUYWJsZSBvZiBjb25zdGFudHMgZm9yIDIvcGksIDM5NiBIZXggZGlnaXRzICg0NzYgZGVjaW1hbCkgb2YgMi9waQotICovCi1zdGF0aWMgY29uc3QgaW50MzJfdCB0d29fb3Zlcl9waVtdID0gewotMHhBMkY5ODMsIDB4NkU0RTQ0LCAweDE1MjlGQywgMHgyNzU3RDEsIDB4RjUzNERELCAweEMwREI2MiwgCi0weDk1OTkzQywgMHg0MzkwNDEsIDB4RkU1MTYzLCAweEFCREVCQiwgMHhDNTYxQjcsIDB4MjQ2RTNBLCAKLTB4NDI0REQyLCAweEUwMDY0OSwgMHgyRUVBMDksIDB4RDE5MjFDLCAweEZFMURFQiwgMHgxQ0IxMjksIAotMHhBNzNFRTgsIDB4ODIzNUY1LCAweDJFQkI0NCwgMHg4NEU5OUMsIDB4NzAyNkI0LCAweDVGN0U0MSwgCi0weDM5OTFENiwgMHgzOTgzNTMsIDB4MzlGNDlDLCAweDg0NUY4QiwgMHhCREY5MjgsIDB4M0IxRkY4LCAKLTB4OTdGRkRFLCAweDA1OTgwRiwgMHhFRjJGMTEsIDB4OEI1QTBBLCAweDZEMUY2RCwgMHgzNjdFQ0YsIAotMHgyN0NCMDksIDB4Qjc0RjQ2LCAweDNGNjY5RSwgMHg1RkVBMkQsIDB4NzUyN0JBLCAweEM3RUJFNSwgCi0weEYxN0IzRCwgMHgwNzM5RjcsIDB4OEE1MjkyLCAweEVBNkJGQiwgMHg1RkIxMUYsIDB4OEQ1RDA4LCAKLTB4NTYwMzMwLCAweDQ2RkM3QiwgMHg2QkFCRjAsIDB4Q0ZCQzIwLCAweDlBRjQzNiwgMHgxREE5RTMsIAotMHg5MTYxNUUsIDB4RTYxQjA4LCAweDY1OTk4NSwgMHg1RjE0QTAsIDB4Njg0MDhELCAweEZGRDg4MCwgCi0weDRENzMyNywgMHgzMTA2MDYsIDB4MTU1NkNBLCAweDczQThDOSwgMHg2MEUyN0IsIDB4QzA4QzZCLCAKLX07Ci0KLS8qCi0gKiBpbnZwaW8yOiAgNTMgYml0cyBvZiAyL3BpCi0gKiBwaW8yXzE6ICAgZmlyc3QgIDMzIGJpdCBvZiBwaS8yCi0gKiBwaW8yXzF0OiAgcGkvMiAtIHBpbzJfMQotICovCi0KLXN0YXRpYyBjb25zdCBkb3VibGUKLXplcm8gPSAgMC4wMDAwMDAwMDAwMDAwMDAwMDAwMGUrMDAsIC8qIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgKi8KLWhhbGYgPSAgNS4wMDAwMDAwMDAwMDAwMDAwMDAwMGUtMDEsIC8qIDB4M0ZFMDAwMDAsIDB4MDAwMDAwMDAgKi8KLXR3bzI0ID0gIDEuNjc3NzIxNjAwMDAwMDAwMDAwMDBlKzA3LCAvKiAweDQxNzAwMDAwLCAweDAwMDAwMDAwICovCi1pbnZwaW8yID0gIDYuMzY2MTk3NzIzNjc1ODEzODI0MzNlLTAxLCAvKiAweDNGRTQ1RjMwLCAweDZEQzlDODgzICovCi1waW8yXzEgID0gIDEuNTcwNzk2MzI2NzM0MTI1NjE0MTdlKzAwLCAvKiAweDNGRjkyMUZCLCAweDU0NDAwMDAwICovCi1waW8yXzF0ID0gIDYuMDc3MTAwNTA2NTA2MTkyMjQ5MzJlLTExOyAvKiAweDNERDBCNDYxLCAweDFBNjI2MzMxICovCi0KLQlpbnQzMl90IF9faWVlZTc1NF9yZW1fcGlvMmYoZmxvYXQgeCwgZmxvYXQgKnkpCi17Ci0JZG91YmxlIHcsdCxyLGZuOwotCWRvdWJsZSB0eFsxXSx0eVsyXTsKLQlmbG9hdCB6OwotCWludDMyX3QgZTAsbixpeCxoeDsKLQotCUdFVF9GTE9BVF9XT1JEKGh4LHgpOwotCWl4ID0gaHgmMHg3ZmZmZmZmZjsKLSAgICAvKiAzMys1MyBiaXQgcGkgaXMgZ29vZCBlbm91Z2ggZm9yIG1lZGl1bSBzaXplICovCi0JaWYoaXg8PTB4NDk0OTBmODApIHsJCS8qIHx4fCB+PD0gMl4xOSoocGkvMiksIG1lZGl1bSBzaXplICovCi0JICAgIHQgID0gZmFic2YoeCk7Ci0JICAgIG4gID0gKGludDMyX3QpICh0KmludnBpbzIraGFsZik7Ci0JICAgIGZuID0gKGRvdWJsZSluOwotCSAgICByICA9IHQtZm4qcGlvMl8xOwotCSAgICB3ICA9IGZuKnBpbzJfMXQ7Ci0JICAgIHlbMF0gPSByLXc7Ci0JICAgIHlbMV0gPSAoci15WzBdKS13OwotCSAgICBpZihoeDwwKSAJe3lbMF0gPSAteVswXTsgeVsxXSA9IC15WzFdOyByZXR1cm4gLW47fQotCSAgICBlbHNlCSByZXR1cm4gbjsKLQl9Ci0gICAgLyoKLSAgICAgKiBhbGwgb3RoZXIgKGxhcmdlKSBhcmd1bWVudHMKLSAgICAgKi8KLQlpZihpeD49MHg3ZjgwMDAwMCkgewkJLyogeCBpcyBpbmYgb3IgTmFOICovCi0JICAgIHlbMF09eVsxXT14LXg7IHJldHVybiAwOwotCX0KLSAgICAvKiBzZXQgeiA9IHNjYWxibih8eHwsaWxvZ2IofHh8KS0yMykgKi8KLQllMCA9IChpeD4+MjMpLTE1MDsJCS8qIGUwID0gaWxvZ2IofHh8KS0yMzsgKi8KLQlTRVRfRkxPQVRfV09SRCh6LCBpeCAtICgoaW50MzJfdCkoZTA8PDIzKSkpOwotCXR4WzBdID0gejsKLQluICA9ICBfX2tlcm5lbF9yZW1fcGlvMih0eCx0eSxlMCwxLDEsdHdvX292ZXJfcGkpOwotCXlbMF0gPSB0eVswXTsKLQl5WzFdID0gdHlbMF0gLSB5WzBdOwotCWlmKGh4PDApIHt5WzBdID0gLXlbMF07IHlbMV0gPSAteVsxXTsgcmV0dXJuIC1uO30KLQlyZXR1cm4gbjsKLX0KZGlmZiAtLWdpdCBhL2xpYm0vc3JjL2VfcmVtYWluZGVyLmMgYi9saWJtL3NyYy9lX3JlbWFpbmRlci5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NjkzMmEyLi4wMDAwMDAwCi0tLSBhL2xpYm0vc3JjL2VfcmVtYWluZGVyLmMKKysrIC9kZXYvbnVsbApAQCAtMSw3MyArMCwwIEBACi0KLS8qIEAoIyllX3JlbWFpbmRlci5jIDEuMyA5NS8wMS8xOCAqLwotLyoKLSAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIENvcHlyaWdodCAoQykgMTk5MyBieSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogRGV2ZWxvcGVkIGF0IFN1blNvZnQsIGEgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBidXNpbmVzcy4KLSAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKLSAqIHNvZnR3YXJlIGlzIGZyZWVseSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoaXMgbm90aWNlIAotICogaXMgcHJlc2VydmVkLgotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICovCi0KLSNpZm5kZWYgbGludAotc3RhdGljIGNoYXIgcmNzaWRbXSA9ICIkRnJlZUJTRDogc3JjL2xpYi9tc3VuL3NyYy9lX3JlbWFpbmRlci5jLHYgMS4xMCAyMDA1LzAyLzA0IDE4OjI2OjA2IGRhcyBFeHAgJCI7Ci0jZW5kaWYKLQotLyogX19pZWVlNzU0X3JlbWFpbmRlcih4LHApCi0gKiBSZXR1cm4gOiAgICAgICAgICAgICAgICAgIAotICogCXJldHVybnMgIHggUkVNIHAgID0gIHggLSBbeC9wXSpwIGFzIGlmIGluIGluZmluaXRlIAotICogCXByZWNpc2UgYXJpdGhtZXRpYywgd2hlcmUgW3gvcF0gaXMgdGhlIChpbmZpbml0ZSBiaXQpIAotICoJaW50ZWdlciBuZWFyZXN0IHgvcCAoaW4gaGFsZiB3YXkgY2FzZSBjaG9vc2UgdGhlIGV2ZW4gb25lKS4KLSAqIE1ldGhvZCA6IAotICoJQmFzZWQgb24gZm1vZCgpIHJldHVybiB4LVt4L3BdY2hvcHBlZCpwIGV4YWN0bHAuCi0gKi8KLQotI2luY2x1ZGUgIm1hdGguaCIKLSNpbmNsdWRlICJtYXRoX3ByaXZhdGUuaCIKLQotc3RhdGljIGNvbnN0IGRvdWJsZSB6ZXJvID0gMC4wOwotCi0KLWRvdWJsZQotX19pZWVlNzU0X3JlbWFpbmRlcihkb3VibGUgeCwgZG91YmxlIHApCi17Ci0JaW50MzJfdCBoeCxocDsKLQl1X2ludDMyX3Qgc3gsbHgsbHA7Ci0JZG91YmxlIHBfaGFsZjsKLQotCUVYVFJBQ1RfV09SRFMoaHgsbHgseCk7Ci0JRVhUUkFDVF9XT1JEUyhocCxscCxwKTsKLQlzeCA9IGh4JjB4ODAwMDAwMDA7Ci0JaHAgJj0gMHg3ZmZmZmZmZjsKLQloeCAmPSAweDdmZmZmZmZmOwotCi0gICAgLyogcHVyZ2Ugb2ZmIGV4Y2VwdGlvbiB2YWx1ZXMgKi8KLQlpZigoaHB8bHApPT0wKSByZXR1cm4gKHgqcCkvKHgqcCk7IAkvKiBwID0gMCAqLwotCWlmKChoeD49MHg3ZmYwMDAwMCl8fAkJCS8qIHggbm90IGZpbml0ZSAqLwotCSAgKChocD49MHg3ZmYwMDAwMCkmJgkJCS8qIHAgaXMgTmFOICovCi0JICAoKChocC0weDdmZjAwMDAwKXxscCkhPTApKSkKLQkgICAgcmV0dXJuICh4KnApLyh4KnApOwotCi0KLQlpZiAoaHA8PTB4N2ZkZmZmZmYpIHggPSBfX2llZWU3NTRfZm1vZCh4LHArcCk7CS8qIG5vdyB4IDwgMnAgKi8KLQlpZiAoKChoeC1ocCl8KGx4LWxwKSk9PTApIHJldHVybiB6ZXJvKng7Ci0JeCAgPSBmYWJzKHgpOwotCXAgID0gZmFicyhwKTsKLQlpZiAoaHA8MHgwMDIwMDAwMCkgewotCSAgICBpZih4K3g+cCkgewotCQl4LT1wOwotCQlpZih4K3g+PXApIHggLT0gcDsKLQkgICAgfQotCX0gZWxzZSB7Ci0JICAgIHBfaGFsZiA9IDAuNSpwOwotCSAgICBpZih4PnBfaGFsZikgewotCQl4LT1wOwotCQlpZih4Pj1wX2hhbGYpIHggLT0gcDsKLQkgICAgfQotCX0KLQlHRVRfSElHSF9XT1JEKGh4LHgpOwotCVNFVF9ISUdIX1dPUkQoeCxoeF5zeCk7Ci0JcmV0dXJuIHg7Ci19CmRpZmYgLS1naXQgYS9saWJtL3NyYy9lX3JlbWFpbmRlcmYuYyBiL2xpYm0vc3JjL2VfcmVtYWluZGVyZi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MDQ1MDg4Li4wMDAwMDAwCi0tLSBhL2xpYm0vc3JjL2VfcmVtYWluZGVyZi5jCisrKyAvZGV2L251bGwKQEAgLTEsNjUgKzAsMCBAQAotLyogZV9yZW1haW5kZXJmLmMgLS0gZmxvYXQgdmVyc2lvbiBvZiBlX3JlbWFpbmRlci5jLgotICogQ29udmVyc2lvbiB0byBmbG9hdCBieSBJYW4gTGFuY2UgVGF5bG9yLCBDeWdudXMgU3VwcG9ydCwgaWFuQGN5Z251cy5jb20uCi0gKi8KLQotLyoKLSAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIENvcHlyaWdodCAoQykgMTk5MyBieSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogRGV2ZWxvcGVkIGF0IFN1blBybywgYSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGJ1c2luZXNzLgotICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcwotICogc29mdHdhcmUgaXMgZnJlZWx5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhpcyBub3RpY2UKLSAqIGlzIHByZXNlcnZlZC4KLSAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqLwotCi0jaWZuZGVmIGxpbnQKLXN0YXRpYyBjaGFyIHJjc2lkW10gPSAiJEZyZWVCU0Q6IHNyYy9saWIvbXN1bi9zcmMvZV9yZW1haW5kZXJmLmMsdiAxLjcgMjAwMi8wNS8yOCAxODoxNTowNCBhbGZyZWQgRXhwICQiOwotI2VuZGlmCi0KLSNpbmNsdWRlICJtYXRoLmgiCi0jaW5jbHVkZSAibWF0aF9wcml2YXRlLmgiCi0KLXN0YXRpYyBjb25zdCBmbG9hdCB6ZXJvID0gMC4wOwotCi0KLWZsb2F0Ci1fX2llZWU3NTRfcmVtYWluZGVyZihmbG9hdCB4LCBmbG9hdCBwKQotewotCWludDMyX3QgaHgsaHA7Ci0JdV9pbnQzMl90IHN4OwotCWZsb2F0IHBfaGFsZjsKLQotCUdFVF9GTE9BVF9XT1JEKGh4LHgpOwotCUdFVF9GTE9BVF9XT1JEKGhwLHApOwotCXN4ID0gaHgmMHg4MDAwMDAwMDsKLQlocCAmPSAweDdmZmZmZmZmOwotCWh4ICY9IDB4N2ZmZmZmZmY7Ci0KLSAgICAvKiBwdXJnZSBvZmYgZXhjZXB0aW9uIHZhbHVlcyAqLwotCWlmKGhwPT0wKSByZXR1cm4gKHgqcCkvKHgqcCk7CSAJLyogcCA9IDAgKi8KLQlpZigoaHg+PTB4N2Y4MDAwMDApfHwJCQkvKiB4IG5vdCBmaW5pdGUgKi8KLQkgICgoaHA+MHg3ZjgwMDAwMCkpKQkJCS8qIHAgaXMgTmFOICovCi0JICAgIHJldHVybiAoeCpwKS8oeCpwKTsKLQotCi0JaWYgKGhwPD0weDdlZmZmZmZmKSB4ID0gX19pZWVlNzU0X2Ztb2RmKHgscCtwKTsJLyogbm93IHggPCAycCAqLwotCWlmICgoaHgtaHApPT0wKSByZXR1cm4gemVybyp4OwotCXggID0gZmFic2YoeCk7Ci0JcCAgPSBmYWJzZihwKTsKLQlpZiAoaHA8MHgwMTAwMDAwMCkgewotCSAgICBpZih4K3g+cCkgewotCQl4LT1wOwotCQlpZih4K3g+PXApIHggLT0gcDsKLQkgICAgfQotCX0gZWxzZSB7Ci0JICAgIHBfaGFsZiA9IChmbG9hdCkwLjUqcDsKLQkgICAgaWYoeD5wX2hhbGYpIHsKLQkJeC09cDsKLQkJaWYoeD49cF9oYWxmKSB4IC09IHA7Ci0JICAgIH0KLQl9Ci0JR0VUX0ZMT0FUX1dPUkQoaHgseCk7Ci0JU0VUX0ZMT0FUX1dPUkQoeCxoeF5zeCk7Ci0JcmV0dXJuIHg7Ci19CmRpZmYgLS1naXQgYS9saWJtL3NyYy9lX3NjYWxiLmMgYi9saWJtL3NyYy9lX3NjYWxiLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI4MTY2NmUuLjAwMDAwMDAKLS0tIGEvbGlibS9zcmMvZV9zY2FsYi5jCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotCi0vKiBAKCMpZV9zY2FsYi5jIDEuMyA5NS8wMS8xOCAqLwotLyoKLSAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIENvcHlyaWdodCAoQykgMTk5MyBieSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogRGV2ZWxvcGVkIGF0IFN1blNvZnQsIGEgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBidXNpbmVzcy4KLSAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKLSAqIHNvZnR3YXJlIGlzIGZyZWVseSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoaXMgbm90aWNlIAotICogaXMgcHJlc2VydmVkLgotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICovCi0KLSNpZm5kZWYgbGludAotc3RhdGljIGNoYXIgcmNzaWRbXSA9ICIkRnJlZUJTRDogc3JjL2xpYi9tc3VuL3NyYy9lX3NjYWxiLmMsdiAxLjEyIDIwMDUvMDIvMDQgMTg6MjY6MDYgZGFzIEV4cCAkIjsKLSNlbmRpZgotCi0vKgotICogX19pZWVlNzU0X3NjYWxiKHgsIGZuKSBpcyBwcm92aWRlIGZvcgotICogcGFzc2luZyB2YXJpb3VzIHN0YW5kYXJkIHRlc3Qgc3VpdGUuIE9uZSAKLSAqIHNob3VsZCB1c2Ugc2NhbGJuKCkgaW5zdGVhZC4KLSAqLwotCi0jaW5jbHVkZSAibWF0aC5oIgotI2luY2x1ZGUgIm1hdGhfcHJpdmF0ZS5oIgotCi0jaWZkZWYgX1NDQUxCX0lOVAotZG91YmxlCi1fX2llZWU3NTRfc2NhbGIoZG91YmxlIHgsIGludCBmbikKLSNlbHNlCi1kb3VibGUKLV9faWVlZTc1NF9zY2FsYihkb3VibGUgeCwgZG91YmxlIGZuKQotI2VuZGlmCi17Ci0jaWZkZWYgX1NDQUxCX0lOVAotCXJldHVybiBzY2FsYm4oeCxmbik7Ci0jZWxzZQotCWlmIChpc25hbih4KXx8aXNuYW4oZm4pKSByZXR1cm4geCpmbjsKLQlpZiAoIWZpbml0ZShmbikpIHsKLQkgICAgaWYoZm4+MC4wKSByZXR1cm4geCpmbjsKLQkgICAgZWxzZSAgICAgICByZXR1cm4geC8oLWZuKTsKLQl9Ci0JaWYgKHJpbnQoZm4pIT1mbikgcmV0dXJuIChmbi1mbikvKGZuLWZuKTsKLQlpZiAoIGZuID4gNjUwMDAuMCkgcmV0dXJuIHNjYWxibih4LCA2NTAwMCk7Ci0JaWYgKC1mbiA+IDY1MDAwLjApIHJldHVybiBzY2FsYm4oeCwtNjUwMDApOwotCXJldHVybiBzY2FsYm4oeCwoaW50KWZuKTsKLSNlbmRpZgotfQpkaWZmIC0tZ2l0IGEvbGlibS9zcmMvZV9zY2FsYmYuYyBiL2xpYm0vc3JjL2Vfc2NhbGJmLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA3YWMxZjQuLjAwMDAwMDAKLS0tIGEvbGlibS9zcmMvZV9zY2FsYmYuYworKysgL2Rldi9udWxsCkBAIC0xLDQ2ICswLDAgQEAKLS8qIGVfc2NhbGJmLmMgLS0gZmxvYXQgdmVyc2lvbiBvZiBlX3NjYWxiLmMuCi0gKiBDb252ZXJzaW9uIHRvIGZsb2F0IGJ5IElhbiBMYW5jZSBUYXlsb3IsIEN5Z251cyBTdXBwb3J0LCBpYW5AY3lnbnVzLmNvbS4KLSAqLwotCi0vKgotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogQ29weXJpZ2h0IChDKSAxOTkzIGJ5IFN1biBNaWNyb3N5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBEZXZlbG9wZWQgYXQgU3VuUHJvLCBhIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gYnVzaW5lc3MuCi0gKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCi0gKiBzb2Z0d2FyZSBpcyBmcmVlbHkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGlzIG5vdGljZQotICogaXMgcHJlc2VydmVkLgotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICovCi0KLSNpZm5kZWYgbGludAotc3RhdGljIGNoYXIgcmNzaWRbXSA9ICIkRnJlZUJTRDogc3JjL2xpYi9tc3VuL3NyYy9lX3NjYWxiZi5jLHYgMS4xMCAyMDA1LzEyLzA2IDIwOjEyOjM4IG9icmllbiBFeHAgJCI7Ci0jZW5kaWYKLQotI2luY2x1ZGUgIm1hdGguaCIKLSNpbmNsdWRlICJtYXRoX3ByaXZhdGUuaCIKLQotI2lmZGVmIF9TQ0FMQl9JTlQKLWZsb2F0Ci1fX2llZWU3NTRfc2NhbGJmKGZsb2F0IHgsIGludCBmbikKLSNlbHNlCi1mbG9hdAotX19pZWVlNzU0X3NjYWxiZihmbG9hdCB4LCBmbG9hdCBmbikKLSNlbmRpZgotewotI2lmZGVmIF9TQ0FMQl9JTlQKLQlyZXR1cm4gc2NhbGJuZih4LGZuKTsKLSNlbHNlCi0JaWYgKChpc25hbmYpKHgpfHwoaXNuYW5mKShmbikpIHJldHVybiB4KmZuOwotCWlmICghZmluaXRlZihmbikpIHsKLQkgICAgaWYoZm4+KGZsb2F0KTAuMCkgcmV0dXJuIHgqZm47Ci0JICAgIGVsc2UgICAgICAgcmV0dXJuIHgvKC1mbik7Ci0JfQotCWlmIChyaW50ZihmbikhPWZuKSByZXR1cm4gKGZuLWZuKS8oZm4tZm4pOwotCWlmICggZm4gPiAoZmxvYXQpNjUwMDAuMCkgcmV0dXJuIHNjYWxibmYoeCwgNjUwMDApOwotCWlmICgtZm4gPiAoZmxvYXQpNjUwMDAuMCkgcmV0dXJuIHNjYWxibmYoeCwtNjUwMDApOwotCXJldHVybiBzY2FsYm5mKHgsKGludClmbik7Ci0jZW5kaWYKLX0KLQotX193ZWFrX3JlZmVyZW5jZShzY2FsYmYsIGxkZXhwZik7CmRpZmYgLS1naXQgYS9saWJtL3NyYy9lX3NpbmguYyBiL2xpYm0vc3JjL2Vfc2luaC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NTg0YjI3Li4wMDAwMDAwCi0tLSBhL2xpYm0vc3JjL2Vfc2luaC5jCisrKyAvZGV2L251bGwKQEAgLTEsNzkgKzAsMCBAQAotCi0vKiBAKCMpZV9zaW5oLmMgMS4zIDk1LzAxLzE4ICovCi0vKgotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogQ29weXJpZ2h0IChDKSAxOTkzIGJ5IFN1biBNaWNyb3N5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBEZXZlbG9wZWQgYXQgU3VuU29mdCwgYSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGJ1c2luZXNzLgotICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcwotICogc29mdHdhcmUgaXMgZnJlZWx5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhpcyBub3RpY2UgCi0gKiBpcyBwcmVzZXJ2ZWQuCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKi8KLQotI2lmbmRlZiBsaW50Ci1zdGF0aWMgY2hhciByY3NpZFtdID0gIiRGcmVlQlNEOiBzcmMvbGliL21zdW4vc3JjL2Vfc2luaC5jLHYgMS45IDIwMDUvMDIvMDQgMTg6MjY6MDYgZGFzIEV4cCAkIjsKLSNlbmRpZgotCi0vKiBfX2llZWU3NTRfc2luaCh4KQotICogTWV0aG9kIDogCi0gKiBtYXRoZW1hdGljYWxseSBzaW5oKHgpIGlmIGRlZmluZWQgdG8gYmUgKGV4cCh4KS1leHAoLXgpKS8yCi0gKgkxLiBSZXBsYWNlIHggYnkgfHh8IChzaW5oKC14KSA9IC1zaW5oKHgpKS4gCi0gKgkyLiAKLSAqCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFICsgRS8oRSsxKQotICoJICAgIDAgICAgICAgIDw9IHggPD0gMjIgICAgIDogIHNpbmgoeCkgOj0gLS0tLS0tLS0tLS0tLS0sIEU9ZXhwbTEoeCkKLSAqCQkJICAgICAgIAkJCSAgICAgICAgMgotICoKLSAqCSAgICAyMiAgICAgICA8PSB4IDw9IGxub3ZmdCA6ICBzaW5oKHgpIDo9IGV4cCh4KS8yIAotICoJICAgIGxub3ZmdCAgIDw9IHggPD0gbG4yb3ZmdDogIHNpbmgoeCkgOj0gZXhwKHgvMikvMiAqIGV4cCh4LzIpCi0gKgkgICAgbG4yb3ZmdCAgPCAgeAkgICAgOiAgc2luaCh4KSA6PSB4KnNodWdlIChvdmVyZmxvdykKLSAqCi0gKiBTcGVjaWFsIGNhc2VzOgotICoJc2luaCh4KSBpcyB8eHwgaWYgeCBpcyArSU5GLCAtSU5GLCBvciBOYU4uCi0gKglvbmx5IHNpbmgoMCk9MCBpcyBleGFjdCBmb3IgZmluaXRlIHguCi0gKi8KLQotI2luY2x1ZGUgIm1hdGguaCIKLSNpbmNsdWRlICJtYXRoX3ByaXZhdGUuaCIKLQotc3RhdGljIGNvbnN0IGRvdWJsZSBvbmUgPSAxLjAsIHNodWdlID0gMS4wZTMwNzsKLQotZG91YmxlCi1fX2llZWU3NTRfc2luaChkb3VibGUgeCkKLXsKLQlkb3VibGUgdCx3LGg7Ci0JaW50MzJfdCBpeCxqeDsKLQl1X2ludDMyX3QgbHg7Ci0KLSAgICAvKiBIaWdoIHdvcmQgb2YgfHh8LiAqLwotCUdFVF9ISUdIX1dPUkQoangseCk7Ci0JaXggPSBqeCYweDdmZmZmZmZmOwotCi0gICAgLyogeCBpcyBJTkYgb3IgTmFOICovCi0JaWYoaXg+PTB4N2ZmMDAwMDApIHJldHVybiB4K3g7CQotCi0JaCA9IDAuNTsKLQlpZiAoang8MCkgaCA9IC1oOwotICAgIC8qIHx4fCBpbiBbMCwyMl0sIHJldHVybiBzaWduKHgpKjAuNSooRStFLyhFKzEpKSkgKi8KLQlpZiAoaXggPCAweDQwMzYwMDAwKSB7CQkvKiB8eHw8MjIgKi8KLQkgICAgaWYgKGl4PDB4M2UzMDAwMDApIAkJLyogfHh8PDIqKi0yOCAqLwotCQlpZihzaHVnZSt4Pm9uZSkgcmV0dXJuIHg7Lyogc2luaCh0aW55KSA9IHRpbnkgd2l0aCBpbmV4YWN0ICovCi0JICAgIHQgPSBleHBtMShmYWJzKHgpKTsKLQkgICAgaWYoaXg8MHgzZmYwMDAwMCkgcmV0dXJuIGgqKDIuMCp0LXQqdC8odCtvbmUpKTsKLQkgICAgcmV0dXJuIGgqKHQrdC8odCtvbmUpKTsKLQl9Ci0KLSAgICAvKiB8eHwgaW4gWzIyLCBsb2cobWF4ZG91YmxlKV0gcmV0dXJuIDAuNSpleHAofHh8KSAqLwotCWlmIChpeCA8IDB4NDA4NjJFNDIpICByZXR1cm4gaCpfX2llZWU3NTRfZXhwKGZhYnMoeCkpOwotCi0gICAgLyogfHh8IGluIFtsb2cobWF4ZG91YmxlKSwgb3ZlcmZsb3d0aHJlc29sZF0gKi8KLQlHRVRfTE9XX1dPUkQobHgseCk7Ci0JaWYgKGl4PDB4NDA4NjMzQ0UgfHwgKChpeD09MHg0MDg2MzNjZSkmJihseDw9KHVfaW50MzJfdCkweDhmYjlmODdkKSkpIHsKLQkgICAgdyA9IF9faWVlZTc1NF9leHAoMC41KmZhYnMoeCkpOwotCSAgICB0ID0gaCp3OwotCSAgICByZXR1cm4gdCp3OwotCX0KLQotICAgIC8qIHx4fCA+IG92ZXJmbG93dGhyZXNvbGQsIHNpbmgoeCkgb3ZlcmZsb3cgKi8KLQlyZXR1cm4geCpzaHVnZTsKLX0KZGlmZiAtLWdpdCBhL2xpYm0vc3JjL2Vfc2luaGYuYyBiL2xpYm0vc3JjL2Vfc2luaGYuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDJlNzUzZi4uMDAwMDAwMAotLS0gYS9saWJtL3NyYy9lX3NpbmhmLmMKKysrIC9kZXYvbnVsbApAQCAtMSw2MCArMCwwIEBACi0vKiBlX3NpbmhmLmMgLS0gZmxvYXQgdmVyc2lvbiBvZiBlX3NpbmguYy4KLSAqIENvbnZlcnNpb24gdG8gZmxvYXQgYnkgSWFuIExhbmNlIFRheWxvciwgQ3lnbnVzIFN1cHBvcnQsIGlhbkBjeWdudXMuY29tLgotICovCi0KLS8qCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBDb3B5cmlnaHQgKEMpIDE5OTMgYnkgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIERldmVsb3BlZCBhdCBTdW5Qcm8sIGEgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBidXNpbmVzcy4KLSAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKLSAqIHNvZnR3YXJlIGlzIGZyZWVseSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoaXMgbm90aWNlCi0gKiBpcyBwcmVzZXJ2ZWQuCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKi8KLQotI2lmbmRlZiBsaW50Ci1zdGF0aWMgY2hhciByY3NpZFtdID0gIiRGcmVlQlNEOiBzcmMvbGliL21zdW4vc3JjL2Vfc2luaGYuYyx2IDEuOCAyMDA1LzExLzEzIDAwOjQxOjQ2IGJkZSBFeHAgJCI7Ci0jZW5kaWYKLQotI2luY2x1ZGUgIm1hdGguaCIKLSNpbmNsdWRlICJtYXRoX3ByaXZhdGUuaCIKLQotc3RhdGljIGNvbnN0IGZsb2F0IG9uZSA9IDEuMCwgc2h1Z2UgPSAxLjBlMzc7Ci0KLWZsb2F0Ci1fX2llZWU3NTRfc2luaGYoZmxvYXQgeCkKLXsKLQlmbG9hdCB0LHcsaDsKLQlpbnQzMl90IGl4LGp4OwotCi0JR0VUX0ZMT0FUX1dPUkQoangseCk7Ci0JaXggPSBqeCYweDdmZmZmZmZmOwotCi0gICAgLyogeCBpcyBJTkYgb3IgTmFOICovCi0JaWYoaXg+PTB4N2Y4MDAwMDApIHJldHVybiB4K3g7Ci0KLQloID0gMC41OwotCWlmIChqeDwwKSBoID0gLWg7Ci0gICAgLyogfHh8IGluIFswLDldLCByZXR1cm4gc2lnbih4KSowLjUqKEUrRS8oRSsxKSkpICovCi0JaWYgKGl4IDwgMHg0MTEwMDAwMCkgewkJLyogfHh8PDkgKi8KLQkgICAgaWYgKGl4PDB4Mzk4MDAwMDApIAkJLyogfHh8PDIqKi0xMiAqLwotCQlpZihzaHVnZSt4Pm9uZSkgcmV0dXJuIHg7Lyogc2luaCh0aW55KSA9IHRpbnkgd2l0aCBpbmV4YWN0ICovCi0JICAgIHQgPSBleHBtMWYoZmFic2YoeCkpOwotCSAgICBpZihpeDwweDNmODAwMDAwKSByZXR1cm4gaCooKGZsb2F0KTIuMCp0LXQqdC8odCtvbmUpKTsKLQkgICAgcmV0dXJuIGgqKHQrdC8odCtvbmUpKTsKLQl9Ci0KLSAgICAvKiB8eHwgaW4gWzksIGxvZ2YobWF4ZmxvYXQpXSByZXR1cm4gMC41KmV4cCh8eHwpICovCi0JaWYgKGl4IDwgMHg0MmIxNzIxNykgIHJldHVybiBoKl9faWVlZTc1NF9leHBmKGZhYnNmKHgpKTsKLQotICAgIC8qIHx4fCBpbiBbbG9nZihtYXhmbG9hdCksIG92ZXJmbG93dGhyZXNvbGRdICovCi0JaWYgKGl4PD0weDQyYjJkNGZjKSB7Ci0JICAgIHcgPSBfX2llZWU3NTRfZXhwZigoZmxvYXQpMC41KmZhYnNmKHgpKTsKLQkgICAgdCA9IGgqdzsKLQkgICAgcmV0dXJuIHQqdzsKLQl9Ci0KLSAgICAvKiB8eHwgPiBvdmVyZmxvd3RocmVzb2xkLCBzaW5oKHgpIG92ZXJmbG93ICovCi0JcmV0dXJuIHgqc2h1Z2U7Ci19CmRpZmYgLS1naXQgYS9saWJtL3NyYy9lX3NxcnQuYyBiL2xpYm0vc3JjL2Vfc3FydC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNzVjYjEwLi4wMDAwMDAwCi0tLSBhL2xpYm0vc3JjL2Vfc3FydC5jCisrKyAvZGV2L251bGwKQEAgLTEsNDQ2ICswLDAgQEAKLQotLyogQCgjKWVfc3FydC5jIDEuMyA5NS8wMS8xOCAqLwotLyoKLSAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIENvcHlyaWdodCAoQykgMTk5MyBieSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogRGV2ZWxvcGVkIGF0IFN1blNvZnQsIGEgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBidXNpbmVzcy4KLSAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKLSAqIHNvZnR3YXJlIGlzIGZyZWVseSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoaXMgbm90aWNlIAotICogaXMgcHJlc2VydmVkLgotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICovCi0KLSNpZm5kZWYgbGludAotc3RhdGljIGNoYXIgcmNzaWRbXSA9ICIkRnJlZUJTRDogc3JjL2xpYi9tc3VuL3NyYy9lX3NxcnQuYyx2IDEuMTAgMjAwNS8wMi8wNCAxODoyNjowNiBkYXMgRXhwICQiOwotI2VuZGlmCi0KLS8qIF9faWVlZTc1NF9zcXJ0KHgpCi0gKiBSZXR1cm4gY29ycmVjdGx5IHJvdW5kZWQgc3FydC4KLSAqICAgICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqCSAgICAgfCAgVXNlIHRoZSBoYXJkd2FyZSBzcXJ0IGlmIHlvdSBoYXZlIG9uZSB8Ci0gKiAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBNZXRob2Q6IAotICogICBCaXQgYnkgYml0IG1ldGhvZCB1c2luZyBpbnRlZ2VyIGFyaXRobWV0aWMuIChTbG93LCBidXQgcG9ydGFibGUpIAotICogICAxLiBOb3JtYWxpemF0aW9uCi0gKglTY2FsZSB4IHRvIHkgaW4gWzEsNCkgd2l0aCBldmVuIHBvd2VycyBvZiAyOiAKLSAqCWZpbmQgYW4gaW50ZWdlciBrIHN1Y2ggdGhhdCAgMSA8PSAoeT14KjJeKDJrKSkgPCA0LCB0aGVuCi0gKgkJc3FydCh4KSA9IDJeayAqIHNxcnQoeSkKLSAqICAgMi4gQml0IGJ5IGJpdCBjb21wdXRhdGlvbgotICoJTGV0IHEgID0gc3FydCh5KSB0cnVuY2F0ZWQgdG8gaSBiaXQgYWZ0ZXIgYmluYXJ5IHBvaW50IChxID0gMSksCi0gKgkgICAgIGkJCQkJCQkJIDAKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkrMSAgICAgICAgIDIKLSAqCSAgICBzICA9IDIqcSAsIGFuZAl5ICA9ICAyICAgKiAoIHkgLSBxICApLgkJKDEpCi0gKgkgICAgIGkgICAgICBpICAgICAgICAgICAgaSAgICAgICAgICAgICAgICAgaQotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICoJVG8gY29tcHV0ZSBxICAgIGZyb20gcSAsIG9uZSBjaGVja3Mgd2hldGhlciAKLSAqCQkgICAgaSsxICAgICAgIGkgICAgICAgICAgICAgICAgICAgICAgIAotICoKLSAqCQkJICAgICAgLShpKzEpIDIKLSAqCQkJKHEgKyAyICAgICAgKSA8PSB5LgkJCSgyKQotICogICAgIAkJCSAgaQotICoJCQkJCQkJICAgICAgLShpKzEpCi0gKglJZiAoMikgaXMgZmFsc2UsIHRoZW4gcSAgID0gcSA7IG90aGVyd2lzZSBxICAgPSBxICArIDIgICAgICAuCi0gKgkJIAkgICAgICAgaSsxICAgaSAgICAgICAgICAgICBpKzEgICBpCi0gKgotICoJV2l0aCBzb21lIGFsZ2VicmljIG1hbmlwdWxhdGlvbiwgaXQgaXMgbm90IGRpZmZpY3VsdCB0byBzZWUKLSAqCXRoYXQgKDIpIGlzIGVxdWl2YWxlbnQgdG8gCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLShpKzEpCi0gKgkJCXMgICsgIDIgICAgICAgPD0geQkJCSgzKQotICoJCQkgaSAgICAgICAgICAgICAgICBpCi0gKgotICoJVGhlIGFkdmFudGFnZSBvZiAoMykgaXMgdGhhdCBzICBhbmQgeSAgY2FuIGJlIGNvbXB1dGVkIGJ5IAotICoJCQkJICAgICAgaSAgICAgIGkKLSAqCXRoZSBmb2xsb3dpbmcgcmVjdXJyZW5jZSBmb3JtdWxhOgotICoJICAgIGlmICgzKSBpcyBmYWxzZQotICoKLSAqCSAgICBzICAgICA9ICBzICAsCXkgICAgPSB5ICAgOwkJCSg0KQotICoJICAgICBpKzEgICAgICBpCQkgaSsxICAgIGkKLSAqCi0gKgkgICAgb3RoZXJ3aXNlLAotICogICAgICAgICAgICAgICAgICAgICAgICAgLWkgICAgICAgICAgICAgICAgICAgICAtKGkrMSkKLSAqCSAgICBzCSAgPSAgcyAgKyAyICAsICB5ICAgID0geSAgLSAgcyAgLSAyICAJCSg1KQotICogICAgICAgICAgIGkrMSAgICAgIGkgICAgICAgICAgaSsxICAgIGkgICAgIGkKLSAqCQkJCQotICoJT25lIG1heSBlYXNpbHkgdXNlIGluZHVjdGlvbiB0byBwcm92ZSAoNCkgYW5kICg1KS4gCi0gKglOb3RlLiBTaW5jZSB0aGUgbGVmdCBoYW5kIHNpZGUgb2YgKDMpIGNvbnRhaW4gb25seSBpKzIgYml0cywKLSAqCSAgICAgIGl0IGRvZXMgbm90IG5lY2Vzc2FyeSB0byBkbyBhIGZ1bGwgKDUzLWJpdCkgY29tcGFyaXNvbiAKLSAqCSAgICAgIGluICgzKS4KLSAqICAgMy4gRmluYWwgcm91bmRpbmcKLSAqCUFmdGVyIGdlbmVyYXRpbmcgdGhlIDUzIGJpdHMgcmVzdWx0LCB3ZSBjb21wdXRlIG9uZSBtb3JlIGJpdC4KLSAqCVRvZ2V0aGVyIHdpdGggdGhlIHJlbWFpbmRlciwgd2UgY2FuIGRlY2lkZSB3aGV0aGVyIHRoZQotICoJcmVzdWx0IGlzIGV4YWN0LCBiaWdnZXIgdGhhbiAxLzJ1bHAsIG9yIGxlc3MgdGhhbiAxLzJ1bHAKLSAqCShpdCB3aWxsIG5ldmVyIGVxdWFsIHRvIDEvMnVscCkuCi0gKglUaGUgcm91bmRpbmcgbW9kZSBjYW4gYmUgZGV0ZWN0ZWQgYnkgY2hlY2tpbmcgd2hldGhlcgotICoJaHVnZSArIHRpbnkgaXMgZXF1YWwgdG8gaHVnZSwgYW5kIHdoZXRoZXIgaHVnZSAtIHRpbnkgaXMKLSAqCWVxdWFsIHRvIGh1Z2UgZm9yIHNvbWUgZmxvYXRpbmcgcG9pbnQgbnVtYmVyICJodWdlIiBhbmQgInRpbnkiLgotICoJCQotICogU3BlY2lhbCBjYXNlczoKLSAqCXNxcnQoKy0wKSA9ICstMCAJLi4uIGV4YWN0Ci0gKglzcXJ0KGluZikgPSBpbmYKLSAqCXNxcnQoLXZlKSA9IE5hTgkJLi4uIHdpdGggaW52YWxpZCBzaWduYWwKLSAqCXNxcnQoTmFOKSA9IE5hTgkJLi4uIHdpdGggaW52YWxpZCBzaWduYWwgZm9yIHNpZ25hbGluZyBOYU4KLSAqCi0gKiBPdGhlciBtZXRob2RzIDogc2VlIHRoZSBhcHBlbmRlZCBmaWxlIGF0IHRoZSBlbmQgb2YgdGhlIHByb2dyYW0gYmVsb3cuCi0gKi0tLS0tLS0tLS0tLS0tLQotICovCi0KLSNpbmNsdWRlICJtYXRoLmgiCi0jaW5jbHVkZSAibWF0aF9wcml2YXRlLmgiCi0KLXN0YXRpYwljb25zdCBkb3VibGUJb25lCT0gMS4wLCB0aW55PTEuMGUtMzAwOwotCi1kb3VibGUKLV9faWVlZTc1NF9zcXJ0KGRvdWJsZSB4KQotewotCWRvdWJsZSB6OwotCWludDMyX3Qgc2lnbiA9IChpbnQpMHg4MDAwMDAwMDsKLQlpbnQzMl90IGl4MCxzMCxxLG0sdCxpOwotCXVfaW50MzJfdCByLHQxLHMxLGl4MSxxMTsKLQotCUVYVFJBQ1RfV09SRFMoaXgwLGl4MSx4KTsKLQotICAgIC8qIHRha2UgY2FyZSBvZiBJbmYgYW5kIE5hTiAqLwotCWlmKChpeDAmMHg3ZmYwMDAwMCk9PTB4N2ZmMDAwMDApIHsJCQkKLQkgICAgcmV0dXJuIHgqeCt4OwkJLyogc3FydChOYU4pPU5hTiwgc3FydCgraW5mKT0raW5mCi0JCQkJCSAgIHNxcnQoLWluZik9c05hTiAqLwotCX0gCi0gICAgLyogdGFrZSBjYXJlIG9mIHplcm8gKi8KLQlpZihpeDA8PTApIHsKLQkgICAgaWYoKChpeDAmKH5zaWduKSl8aXgxKT09MCkgcmV0dXJuIHg7Lyogc3FydCgrLTApID0gKy0wICovCi0JICAgIGVsc2UgaWYoaXgwPDApCi0JCXJldHVybiAoeC14KS8oeC14KTsJCS8qIHNxcnQoLXZlKSA9IHNOYU4gKi8KLQl9Ci0gICAgLyogbm9ybWFsaXplIHggKi8KLQltID0gKGl4MD4+MjApOwotCWlmKG09PTApIHsJCQkJLyogc3Vibm9ybWFsIHggKi8KLQkgICAgd2hpbGUoaXgwPT0wKSB7Ci0JCW0gLT0gMjE7Ci0JCWl4MCB8PSAoaXgxPj4xMSk7IGl4MSA8PD0gMjE7Ci0JICAgIH0KLQkgICAgZm9yKGk9MDsoaXgwJjB4MDAxMDAwMDApPT0wO2krKykgaXgwPDw9MTsKLQkgICAgbSAtPSBpLTE7Ci0JICAgIGl4MCB8PSAoaXgxPj4oMzItaSkpOwotCSAgICBpeDEgPDw9IGk7Ci0JfQotCW0gLT0gMTAyMzsJLyogdW5iaWFzIGV4cG9uZW50ICovCi0JaXgwID0gKGl4MCYweDAwMGZmZmZmKXwweDAwMTAwMDAwOwotCWlmKG0mMSl7CS8qIG9kZCBtLCBkb3VibGUgeCB0byBtYWtlIGl0IGV2ZW4gKi8KLQkgICAgaXgwICs9IGl4MCArICgoaXgxJnNpZ24pPj4zMSk7Ci0JICAgIGl4MSArPSBpeDE7Ci0JfQotCW0gPj49IDE7CS8qIG0gPSBbbS8yXSAqLwotCi0gICAgLyogZ2VuZXJhdGUgc3FydCh4KSBiaXQgYnkgYml0ICovCi0JaXgwICs9IGl4MCArICgoaXgxJnNpZ24pPj4zMSk7Ci0JaXgxICs9IGl4MTsKLQlxID0gcTEgPSBzMCA9IHMxID0gMDsJLyogW3EscTFdID0gc3FydCh4KSAqLwotCXIgPSAweDAwMjAwMDAwOwkJLyogciA9IG1vdmluZyBiaXQgZnJvbSByaWdodCB0byBsZWZ0ICovCi0KLQl3aGlsZShyIT0wKSB7Ci0JICAgIHQgPSBzMCtyOyAKLQkgICAgaWYodDw9aXgwKSB7IAotCQlzMCAgID0gdCtyOyAKLQkJaXgwIC09IHQ7IAotCQlxICAgKz0gcjsgCi0JICAgIH0gCi0JICAgIGl4MCArPSBpeDAgKyAoKGl4MSZzaWduKT4+MzEpOwotCSAgICBpeDEgKz0gaXgxOwotCSAgICByPj49MTsKLQl9Ci0KLQlyID0gc2lnbjsKLQl3aGlsZShyIT0wKSB7Ci0JICAgIHQxID0gczErcjsgCi0JICAgIHQgID0gczA7Ci0JICAgIGlmKCh0PGl4MCl8fCgodD09aXgwKSYmKHQxPD1peDEpKSkgeyAKLQkJczEgID0gdDErcjsKLQkJaWYoKCh0MSZzaWduKT09c2lnbikmJihzMSZzaWduKT09MCkgczAgKz0gMTsKLQkJaXgwIC09IHQ7Ci0JCWlmIChpeDEgPCB0MSkgaXgwIC09IDE7Ci0JCWl4MSAtPSB0MTsKLQkJcTEgICs9IHI7Ci0JICAgIH0KLQkgICAgaXgwICs9IGl4MCArICgoaXgxJnNpZ24pPj4zMSk7Ci0JICAgIGl4MSArPSBpeDE7Ci0JICAgIHI+Pj0xOwotCX0KLQotICAgIC8qIHVzZSBmbG9hdGluZyBhZGQgdG8gZmluZCBvdXQgcm91bmRpbmcgZGlyZWN0aW9uICovCi0JaWYoKGl4MHxpeDEpIT0wKSB7Ci0JICAgIHogPSBvbmUtdGlueTsgLyogdHJpZ2dlciBpbmV4YWN0IGZsYWcgKi8KLQkgICAgaWYgKHo+PW9uZSkgewotCSAgICAgICAgeiA9IG9uZSt0aW55OwotCSAgICAgICAgaWYgKHExPT0odV9pbnQzMl90KTB4ZmZmZmZmZmYpIHsgcTE9MDsgcSArPSAxO30KLQkJZWxzZSBpZiAoej5vbmUpIHsKLQkJICAgIGlmIChxMT09KHVfaW50MzJfdCkweGZmZmZmZmZlKSBxKz0xOwotCQkgICAgcTErPTI7IAotCQl9IGVsc2UKLQkgICAgICAgICAgICBxMSArPSAocTEmMSk7Ci0JICAgIH0KLQl9Ci0JaXgwID0gKHE+PjEpKzB4M2ZlMDAwMDA7Ci0JaXgxID0gIHExPj4xOwotCWlmICgocSYxKT09MSkgaXgxIHw9IHNpZ247Ci0JaXgwICs9IChtIDw8MjApOwotCUlOU0VSVF9XT1JEUyh6LGl4MCxpeDEpOwotCXJldHVybiB6OwotfQotCi0vKgotT3RoZXIgbWV0aG9kcyAgKHVzZSBmbG9hdGluZy1wb2ludCBhcml0aG1ldGljKQotLS0tLS0tLS0tLS0tLQotKFRoaXMgaXMgYSBjb3B5IG9mIGEgZHJhZnRlZCBwYXBlciBieSBQcm9mIFcuIEthaGFuIAotYW5kIEsuQy4gTmcsIHdyaXR0ZW4gaW4gTWF5LCAxOTg2KQotCi0JVHdvIGFsZ29yaXRobXMgYXJlIGdpdmVuIGhlcmUgdG8gaW1wbGVtZW50IHNxcnQoeCkgCi0JKElFRUUgZG91YmxlIHByZWNpc2lvbiBhcml0aG1ldGljKSBpbiBzb2Z0d2FyZS4KLQlCb3RoIHN1cHBseSBzcXJ0KHgpIGNvcnJlY3RseSByb3VuZGVkLiBUaGUgZmlyc3QgYWxnb3JpdGhtIChpbgotCVNlY3Rpb24gQSkgdXNlcyBuZXd0b24gaXRlcmF0aW9ucyBhbmQgaW52b2x2ZXMgZm91ciBkaXZpc2lvbnMuCi0JVGhlIHNlY29uZCBvbmUgdXNlcyByZWNpcHJvb3QgaXRlcmF0aW9ucyB0byBhdm9pZCBkaXZpc2lvbiwgYnV0Ci0JcmVxdWlyZXMgbW9yZSBtdWx0aXBsaWNhdGlvbnMuIEJvdGggYWxnb3JpdGhtcyBuZWVkIHRoZSBhYmlsaXR5Ci0JdG8gY2hvcCByZXN1bHRzIG9mIGFyaXRobWV0aWMgb3BlcmF0aW9ucyBpbnN0ZWFkIG9mIHJvdW5kIHRoZW0sIAotCWFuZCB0aGUgSU5FWEFDVCBmbGFnIHRvIGluZGljYXRlIHdoZW4gYW4gYXJpdGhtZXRpYyBvcGVyYXRpb24KLQlpcyBleGVjdXRlZCBleGFjdGx5IHdpdGggbm8gcm91bmRvZmYgZXJyb3IsIGFsbCBwYXJ0IG9mIHRoZSAKLQlzdGFuZGFyZCAoSUVFRSA3NTQtMTk4NSkuIFRoZSBhYmlsaXR5IHRvIHBlcmZvcm0gc2hpZnQsIGFkZCwKLQlzdWJ0cmFjdCBhbmQgbG9naWNhbCBBTkQgb3BlcmF0aW9ucyB1cG9uIDMyLWJpdCB3b3JkcyBpcyBuZWVkZWQKLQl0b28sIHRob3VnaCBub3QgcGFydCBvZiB0aGUgc3RhbmRhcmQuCi0KLUEuICBzcXJ0KHgpIGJ5IE5ld3RvbiBJdGVyYXRpb24KLQotICAgKDEpCUluaXRpYWwgYXBwcm94aW1hdGlvbgotCi0JTGV0IHgwIGFuZCB4MSBiZSB0aGUgbGVhZGluZyBhbmQgdGhlIHRyYWlsaW5nIDMyLWJpdCB3b3JkcyBvZgotCWEgZmxvYXRpbmcgcG9pbnQgbnVtYmVyIHggKGluIElFRUUgZG91YmxlIGZvcm1hdCkgcmVzcGVjdGl2ZWx5IAotCi0JICAgIDEgICAgMTEJCSAgICAgNTIJCQkJICAuLi53aWR0aHMKLQkgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQl4OiB8c3wJICBlICAgICB8CSAgICAgIGYJCQkJfAotCSAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCSAgICAgIG1zYiAgICBsc2IgIG1zYgkJCQkgICAgICBsc2IgLi4ub3JkZXIKLQotIAotCSAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAJICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQl4MDogIHxzfCAgIGUgICAgfCAgICBmMSAgICAgfAkgeDE6IHwgICAgICAgICAgZjIgICAgICAgICAgIHwKLQkgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgCSAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLQlCeSBwZXJmb3JtaW5nIHNoaWZ0cyBhbmQgc3VidHJhY3RzIG9uIHgwIGFuZCB4MSAoYm90aCByZWdhcmRlZAotCWFzIGludGVnZXJzKSwgd2Ugb2J0YWluIGFuIDgtYml0IGFwcHJveGltYXRpb24gb2Ygc3FydCh4KSBhcwotCWZvbGxvd3MuCi0KLQkJayAgOj0gKHgwPj4xKSArIDB4MWZmODAwMDA7Ci0JCXkwIDo9IGsgLSBUMVszMSYoaz4+MTUpXS4JLi4uIHkgfiBzcXJ0KHgpIHRvIDggYml0cwotCUhlcmUgayBpcyBhIDMyLWJpdCBpbnRlZ2VyIGFuZCBUMVtdIGlzIGFuIGludGVnZXIgYXJyYXkgY29udGFpbmluZwotCWNvcnJlY3Rpb24gdGVybXMuIE5vdyBtYWdpY2FsbHkgdGhlIGZsb2F0aW5nIHZhbHVlIG9mIHkgKHkncwotCWxlYWRpbmcgMzItYml0IHdvcmQgaXMgeTAsIHRoZSB2YWx1ZSBvZiBpdHMgdHJhaWxpbmcgd29yZCBpcyAwKQotCWFwcHJveGltYXRlcyBzcXJ0KHgpIHRvIGFsbW9zdCA4LWJpdC4KLQotCVZhbHVlIG9mIFQxOgotCXN0YXRpYyBpbnQgVDFbMzJdPSB7Ci0JMCwJMTAyNCwJMzA2MiwJNTc0NiwJOTE5MywJMTMzNDgsCTE4MTYyLAkyMzU5MiwKLQkyOTU5OCwJMzYxNDUsCTQzMjAyLAk1MDc0MCwJNTg3MzMsCTY3MTU4LAk3NTk5MiwJODUyMTUsCi0JODM1OTksCTcxMzc4LAk2MDQyOCwJNTA2NDcsCTQxOTQ1LAkzNDI0NiwJMjc0NzgsCTIxNTgxLAotCTE2NDk5LAkxMjE4MywJODU4OCwJNTY3NCwJMzQwMywJMTc0MiwJNjYxLAkxMzAsfTsKLQotICAgICgyKQlJdGVyYXRpdmUgcmVmaW5lbWVudAotCi0JQXBwbHkgSGVyb24ncyBydWxlIHRocmVlIHRpbWVzIHRvIHksIHdlIGhhdmUgeSBhcHByb3hpbWF0ZXMgCi0Jc3FydCh4KSB0byB3aXRoaW4gMSB1bHAgKFVuaXQgaW4gdGhlIExhc3QgUGxhY2UpOgotCi0JCXkgOj0gKHkreC95KS8yCQkuLi4gYWxtb3N0IDE3IHNpZy4gYml0cwotCQl5IDo9ICh5K3gveSkvMgkJLi4uIGFsbW9zdCAzNSBzaWcuIGJpdHMKLQkJeSA6PSB5LSh5LXgveSkvMgkuLi4gd2l0aGluIDEgdWxwCi0KLQotCVJlbWFyayAxLgotCSAgICBBbm90aGVyIHdheSB0byBpbXByb3ZlIHkgdG8gd2l0aGluIDEgdWxwIGlzOgotCi0JCXkgOj0gKHkreC95KQkJLi4uIGFsbW9zdCAxNyBzaWcuIGJpdHMgdG8gMipzcXJ0KHgpCi0JCXkgOj0geSAtIDB4MDAxMDAwMDYJLi4uIGFsbW9zdCAxOCBzaWcuIGJpdHMgdG8gc3FydCh4KQotCi0JCQkJMgotCQkJICAgICh4LXkgKSp5Ci0JCXkgOj0geSArIDIqIC0tLS0tLS0tLS0JLi4ud2l0aGluIDEgdWxwCi0JCQkgICAgICAgMgotCQkJICAgICAzeSAgKyB4Ci0KLQotCVRoaXMgZm9ybXVsYSBoYXMgb25lIGRpdmlzaW9uIGZld2VyIHRoYW4gdGhlIG9uZSBhYm92ZTsgaG93ZXZlciwKLQlpdCByZXF1aXJlcyBtb3JlIG11bHRpcGxpY2F0aW9ucyBhbmQgYWRkaXRpb25zLiBBbHNvIHggbXVzdCBiZQotCXNjYWxlZCBpbiBhZHZhbmNlIHRvIGF2b2lkIHNwdXJpb3VzIG92ZXJmbG93IGluIGV2YWx1YXRpbmcgdGhlCi0JZXhwcmVzc2lvbiAzeSp5K3guIEhlbmNlIGl0IGlzIG5vdCByZWNvbW1lbmRlZCB1bGVzcyBkaXZpc2lvbgotCWlzIHNsb3cuIElmIGRpdmlzaW9uIGlzIHZlcnkgc2xvdywgdGhlbiBvbmUgc2hvdWxkIHVzZSB0aGUgCi0JcmVjaXByb290IGFsZ29yaXRobSBnaXZlbiBpbiBzZWN0aW9uIEIuCi0KLSAgICAoMykgRmluYWwgYWRqdXN0bWVudAotCi0JQnkgdHdpZGRsaW5nIHkncyBsYXN0IGJpdCBpdCBpcyBwb3NzaWJsZSB0byBmb3JjZSB5IHRvIGJlIAotCWNvcnJlY3RseSByb3VuZGVkIGFjY29yZGluZyB0byB0aGUgcHJldmFpbGluZyByb3VuZGluZyBtb2RlCi0JYXMgZm9sbG93cy4gTGV0IHIgYW5kIGkgYmUgY29waWVzIG9mIHRoZSByb3VuZGluZyBtb2RlIGFuZAotCWluZXhhY3QgZmxhZyBiZWZvcmUgZW50ZXJpbmcgdGhlIHNxdWFyZSByb290IHByb2dyYW0uIEFsc28gd2UKLQl1c2UgdGhlIGV4cHJlc3Npb24geSstdWxwIGZvciB0aGUgbmV4dCByZXByZXNlbnRhYmxlIGZsb2F0aW5nCi0JbnVtYmVycyAodXAgYW5kIGRvd24pIG9mIHkuIE5vdGUgdGhhdCB5Ky11bHAgPSBlaXRoZXIgZml4ZWQKLQlwb2ludCB5Ky0xLCBvciBtdWx0aXBseSB5IGJ5IG5leHRhZnRlcigxLCstaW5mKSBpbiBjaG9wcGVkCi0JbW9kZS4KLQotCQlJIDo9IEZBTFNFOwkuLi4gcmVzZXQgSU5FWEFDVCBmbGFnIEkKLQkJUiA6PSBSWjsJLi4uIHNldCByb3VuZGluZyBtb2RlIHRvIHJvdW5kLXRvd2FyZC16ZXJvCi0JCXogOj0geC95OwkuLi4gY2hvcHBlZCBxdW90aWVudCwgcG9zc2libHkgaW5leGFjdAotCQlJZihub3QgSSkgdGhlbiB7CS4uLiBpZiB0aGUgcXVvdGllbnQgaXMgZXhhY3QKLQkJICAgIGlmKHo9eSkgewotCQkgICAgICAgIEkgOj0gaTsJIC4uLiByZXN0b3JlIGluZXhhY3QgZmxhZwotCQkgICAgICAgIFIgOj0gcjsgIC4uLiByZXN0b3JlIHJvdW5kZWQgbW9kZQotCQkgICAgICAgIHJldHVybiBzcXJ0KHgpOj15LgotCQkgICAgfSBlbHNlIHsKLQkJCXogOj0geiAtIHVscDsJLi4uIHNwZWNpYWwgcm91bmRpbmcKLQkJICAgIH0KLQkJfQotCQlpIDo9IFRSVUU7CQkuLi4gc3FydCh4KSBpcyBpbmV4YWN0Ci0JCUlmIChyPVJOKSB0aGVuIHo9eit1bHAJLi4uIHJvdW5kZWQtdG8tbmVhcmVzdAotCQlJZiAocj1SUCkgdGhlbiB7CS4uLiByb3VuZC10b3dhcmQtK2luZgotCQkgICAgeSA9IHkrdWxwOyB6PXordWxwOwotCQl9Ci0JCXkgOj0geSt6OwkJLi4uIGNob3BwZWQgc3VtCi0JCXkwOj15MC0weDAwMTAwMDAwOwkuLi4geSA6PSB5LzIgaXMgY29ycmVjdGx5IHJvdW5kZWQuCi0JICAgICAgICBJIDo9IGk7CSAJCS4uLiByZXN0b3JlIGluZXhhY3QgZmxhZwotCSAgICAgICAgUiA6PSByOyAgCQkuLi4gcmVzdG9yZSByb3VuZGVkIG1vZGUKLQkgICAgICAgIHJldHVybiBzcXJ0KHgpOj15LgotCQkgICAgCi0gICAgKDQpCVNwZWNpYWwgY2FzZXMKLQotCVNxdWFyZSByb290IG9mICtpbmYsICstMCwgb3IgTmFOIGlzIGl0c2VsZjsKLQlTcXVhcmUgcm9vdCBvZiBhIG5lZ2F0aXZlIG51bWJlciBpcyBOYU4gd2l0aCBpbnZhbGlkIHNpZ25hbC4KLQotCi1CLiAgc3FydCh4KSBieSBSZWNpcHJvb3QgSXRlcmF0aW9uCi0KLSAgICgxKQlJbml0aWFsIGFwcHJveGltYXRpb24KLQotCUxldCB4MCBhbmQgeDEgYmUgdGhlIGxlYWRpbmcgYW5kIHRoZSB0cmFpbGluZyAzMi1iaXQgd29yZHMgb2YKLQlhIGZsb2F0aW5nIHBvaW50IG51bWJlciB4IChpbiBJRUVFIGRvdWJsZSBmb3JtYXQpIHJlc3BlY3RpdmVseQotCShzZWUgc2VjdGlvbiBBKS4gQnkgcGVyZm9ybWluZyBzaGlmcyBhbmQgc3VidHJhY3RzIG9uIHgwIGFuZCB5MCwKLQl3ZSBvYnRhaW4gYSA3LjgtYml0IGFwcHJveGltYXRpb24gb2YgMS9zcXJ0KHgpIGFzIGZvbGxvd3MuCi0KLQkgICAgayA6PSAweDVmZTgwMDAwIC0gKHgwPj4xKTsKLQkgICAgeTA6PSBrIC0gVDJbNjMmKGs+PjE0KV0uCS4uLiB5IH4gMS9zcXJ0KHgpIHRvIDcuOCBiaXRzCi0KLQlIZXJlIGsgaXMgYSAzMi1iaXQgaW50ZWdlciBhbmQgVDJbXSBpcyBhbiBpbnRlZ2VyIGFycmF5IAotCWNvbnRhaW5pbmcgY29ycmVjdGlvbiB0ZXJtcy4gTm93IG1hZ2ljYWxseSB0aGUgZmxvYXRpbmcKLQl2YWx1ZSBvZiB5ICh5J3MgbGVhZGluZyAzMi1iaXQgd29yZCBpcyB5MCwgdGhlIHZhbHVlIG9mCi0JaXRzIHRyYWlsaW5nIHdvcmQgeTEgaXMgc2V0IHRvIHplcm8pIGFwcHJveGltYXRlcyAxL3NxcnQoeCkKLQl0byBhbG1vc3QgNy44LWJpdC4KLQotCVZhbHVlIG9mIFQyOgotCXN0YXRpYyBpbnQgVDJbNjRdPSB7Ci0JMHgxNTAwLAkweDJlZjgsCTB4NGQ2NywJMHg2YjAyLAkweDg3YmUsCTB4YTM5NSwJMHhiZTdhLAkweGQ4NjYsCi0JMHhmMTRhLAkweDEwOTFiLDB4MTFmY2QsMHgxMzU1MiwweDE0OTk5LDB4MTVjOTgsMHgxNmUzNCwweDE3ZTVmLAotCTB4MThkMDMsMHgxOWEwMSwweDFhNTQ1LDB4MWFlOGEsMHgxYjVjNCwweDFiYjAxLDB4MWJmZGUsMHgxYzI4ZCwKLQkweDFjMmRlLDB4MWMwZGIsMHgxYmE3MywweDFiMTFjLDB4MWE0YjUsMHgxOTUzZCwweDE4MjY2LDB4MTZiZTAsCi0JMHgxNjgzZSwweDE3OWQ4LDB4MThhNGQsMHgxOTk5MiwweDFhNzg5LDB4MWI0NDUsMHgxYmY2MSwweDFjOTg5LAotCTB4MWQxNmQsMHgxZDc3YiwweDFkZGRmLDB4MWUyYWQsMHgxZTViZiwweDFlNmU4LDB4MWU2NTQsMHgxZTNjZCwKLQkweDFkZjJhLDB4MWQ2MzUsMHgxY2IxNiwweDFiZTJjLDB4MWFlNGUsMHgxOWJkZSwweDE4NjhlLDB4MTZlMmUsCi0JMHgxNTI3ZiwweDEzMzRhLDB4MTEwNTEsMHhlOTUxLAkweGJlMDEsCTB4OGUwZCwJMHg1OTI0LAkweDFlZGQsfTsKLQotICAgICgyKQlJdGVyYXRpdmUgcmVmaW5lbWVudAotCi0JQXBwbHkgUmVjaXByb290IGl0ZXJhdGlvbiB0aHJlZSB0aW1lcyB0byB5IGFuZCBtdWx0aXBseSB0aGUKLQlyZXN1bHQgYnkgeCB0byBnZXQgYW4gYXBwcm94aW1hdGlvbiB6IHRoYXQgbWF0Y2hlcyBzcXJ0KHgpCi0JdG8gYWJvdXQgMSB1bHAuIFRvIGJlIGV4YWN0LCB3ZSB3aWxsIGhhdmUgCi0JCS0xdWxwIDwgc3FydCh4KS16PDEuMDYyNXVscC4KLQkKLQkuLi4gc2V0IHJvdW5kaW5nIG1vZGUgdG8gUm91bmQtdG8tbmVhcmVzdAotCSAgIHkgOj0geSooMS41LTAuNSp4KnkqeSkJLi4uIGFsbW9zdCAxNSBzaWcuIGJpdHMgdG8gMS9zcXJ0KHgpCi0JICAgeSA6PSB5KigoMS41LTJeLTMwKSswLjUqeCp5KnkpLi4uIGFib3V0IDI5IHNpZy4gYml0cyB0byAxL3NxcnQoeCkKLQkuLi4gc3BlY2lhbCBhcnJhbmdlbWVudCBmb3IgYmV0dGVyIGFjY3VyYWN5Ci0JICAgeiA6PSB4KnkJCQkuLi4gMjkgYml0cyB0byBzcXJ0KHgpLCB3aXRoIHoqeTwxCi0JICAgeiA6PSB6ICsgMC41KnoqKDEteip5KQkuLi4gYWJvdXQgMSB1bHAgdG8gc3FydCh4KQotCi0JUmVtYXJrIDIuIFRoZSBjb25zdGFudCAxLjUtMl4tMzAgaXMgY2hvc2VuIHRvIGJpYXMgdGhlIGVycm9yIHNvIHRoYXQKLQkoYSkgdGhlIHRlcm0geip5IGluIHRoZSBmaW5hbCBpdGVyYXRpb24gaXMgYWx3YXlzIGxlc3MgdGhhbiAxOyAKLQkoYikgdGhlIGVycm9yIGluIHRoZSBmaW5hbCByZXN1bHQgaXMgYmlhc2VkIHVwd2FyZCBzbyB0aGF0Ci0JCS0xIHVscCA8IHNxcnQoeCkgLSB6IDwgMS4wNjI1IHVscAotCSAgICBpbnN0ZWFkIG9mIHxzcXJ0KHgpLXp8PDEuMDMxMjV1bHAuCi0KLSAgICAoMykJRmluYWwgYWRqdXN0bWVudAotCi0JQnkgdHdpZGRsaW5nIHkncyBsYXN0IGJpdCBpdCBpcyBwb3NzaWJsZSB0byBmb3JjZSB5IHRvIGJlIAotCWNvcnJlY3RseSByb3VuZGVkIGFjY29yZGluZyB0byB0aGUgcHJldmFpbGluZyByb3VuZGluZyBtb2RlCi0JYXMgZm9sbG93cy4gTGV0IHIgYW5kIGkgYmUgY29waWVzIG9mIHRoZSByb3VuZGluZyBtb2RlIGFuZAotCWluZXhhY3QgZmxhZyBiZWZvcmUgZW50ZXJpbmcgdGhlIHNxdWFyZSByb290IHByb2dyYW0uIEFsc28gd2UKLQl1c2UgdGhlIGV4cHJlc3Npb24geSstdWxwIGZvciB0aGUgbmV4dCByZXByZXNlbnRhYmxlIGZsb2F0aW5nCi0JbnVtYmVycyAodXAgYW5kIGRvd24pIG9mIHkuIE5vdGUgdGhhdCB5Ky11bHAgPSBlaXRoZXIgZml4ZWQKLQlwb2ludCB5Ky0xLCBvciBtdWx0aXBseSB5IGJ5IG5leHRhZnRlcigxLCstaW5mKSBpbiBjaG9wcGVkCi0JbW9kZS4KLQotCVIgOj0gUlo7CQkuLi4gc2V0IHJvdW5kaW5nIG1vZGUgdG8gcm91bmQtdG93YXJkLXplcm8KLQlzd2l0Y2gocikgewotCSAgICBjYXNlIFJOOgkJLi4uIHJvdW5kLXRvLW5lYXJlc3QKLQkgICAgICAgaWYoeDw9IHoqKHotdWxwKS4uLmNob3BwZWQpIHogPSB6IC0gdWxwOyBlbHNlCi0JICAgICAgIGlmKHg8PSB6Kih6K3VscCkuLi5jaG9wcGVkKSB6ID0gejsgZWxzZSB6ID0geit1bHA7Ci0JICAgICAgIGJyZWFrOwotCSAgICBjYXNlIFJaOmNhc2UgUk06CS4uLiByb3VuZC10by16ZXJvIG9yIHJvdW5kLXRvLS1pbmYKLQkgICAgICAgUjo9UlA7CQkuLi4gcmVzZXQgcm91bmRpbmcgbW9kIHRvIHJvdW5kLXRvLStpbmYKLQkgICAgICAgaWYoeDx6KnogLi4uIHJvdW5kZWQgdXApIHogPSB6IC0gdWxwOyBlbHNlCi0JICAgICAgIGlmKHg+PSh6K3VscCkqKHordWxwKSAuLi5yb3VuZGVkIHVwKSB6ID0geit1bHA7Ci0JICAgICAgIGJyZWFrOwotCSAgICBjYXNlIFJQOgkJLi4uIHJvdW5kLXRvLStpbmYKLQkgICAgICAgaWYoeD4oeit1bHApKih6K3VscCkuLi5jaG9wcGVkKSB6ID0geisyKnVscDsgZWxzZQotCSAgICAgICBpZih4PnoqeiAuLi5jaG9wcGVkKSB6ID0geit1bHA7Ci0JICAgICAgIGJyZWFrOwotCX0KLQotCVJlbWFyayAzLiBUaGUgYWJvdmUgY29tcGFyaXNvbnMgY2FuIGJlIGRvbmUgaW4gZml4ZWQgcG9pbnQuIEZvcgotCWV4YW1wbGUsIHRvIGNvbXBhcmUgeCBhbmQgdz16KnogY2hvcHBlZCwgaXQgc3VmZmljZXMgdG8gY29tcGFyZQotCXgxIGFuZCB3MSAodGhlIHRyYWlsaW5nIHBhcnRzIG9mIHggYW5kIHcpLCByZWdhcmRpbmcgdGhlbSBhcwotCXR3bydzIGNvbXBsZW1lbnQgaW50ZWdlcnMuCi0KLQkuLi5JcyB6IGFuIGV4YWN0IHNxdWFyZSByb290PwotCVRvIGRldGVybWluZSB3aGV0aGVyIHogaXMgYW4gZXhhY3Qgc3F1YXJlIHJvb3Qgb2YgeCwgbGV0IHoxIGJlIHRoZQotCXRyYWlsaW5nIHBhcnQgb2YgeiwgYW5kIGFsc28gbGV0IHgwIGFuZCB4MSBiZSB0aGUgbGVhZGluZyBhbmQKLQl0cmFpbGluZyBwYXJ0cyBvZiB4LgotCi0JSWYgKCh6MSYweDAzZmZmZmZmKSE9MCkJLi4uIG5vdCBleGFjdCBpZiB0cmFpbGluZyAyNiBiaXRzIG9mIHohPTAKLQkgICAgSSA6PSAxOwkJLi4uIFJhaXNlIEluZXhhY3QgZmxhZzogeiBpcyBub3QgZXhhY3QKLQllbHNlIHsKLQkgICAgaiA6PSAxIC0gWyh4MD4+MjApJjFdCS4uLiBqID0gbG9nYih4KSBtb2QgMgotCSAgICBrIDo9IHoxID4+IDI2OwkJLi4uIGdldCB6J3MgMjUtdGggYW5kIDI2LXRoIAotCQkJCQkgICAgZnJhY3Rpb24gYml0cwotCSAgICBJIDo9IGkgb3IgKGsmaikgb3IgKChrJihqK2orMSkpIT0oeDEmMykpOwotCX0KLQlSOj0gcgkJLi4uIHJlc3RvcmUgcm91bmRlZCBtb2RlCi0JcmV0dXJuIHNxcnQoeCk6PXouCi0KLQlJZiBtdWx0aXBsaWNhdGlvbiBpcyBjaGVhcGVyIHRoZW4gdGhlIGZvcmVnb2luZyByZWQgdGFwZSwgdGhlIAotCUluZXhhY3QgZmxhZyBjYW4gYmUgZXZhbHVhdGVkIGJ5Ci0KLQkgICAgSSA6PSBpOwotCSAgICBJIDo9ICh6KnohPXgpIG9yIEkuCi0KLQlOb3RlIHRoYXQgeip6IGNhbiBvdmVyd3JpdGUgSTsgdGhpcyB2YWx1ZSBtdXN0IGJlIHNlbnNlZCBpZiBpdCBpcyAKLQlUcnVlLgotCi0JUmVtYXJrIDQuIElmIHoqeiA9IHggZXhhY3RseSwgdGhlbiBiaXQgMjUgdG8gYml0IDAgb2YgejEgbXVzdCBiZQotCXplcm8uCi0KLQkJICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tCi0JCXoxOiB8ICAgICAgICBmMiAgICAgICAgfCAKLQkJICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tCi0JCWJpdCAzMQkJICAgYml0IDAKLQotCUZ1cnRoZXIgbW9yZSwgYml0IDI3IGFuZCAyNiBvZiB6MSwgYml0IDAgYW5kIDEgb2YgeDEsIGFuZCB0aGUgb2RkCi0Jb3IgZXZlbiBvZiBsb2diKHgpIGhhdmUgdGhlIGZvbGxvd2luZyByZWxhdGlvbnM6Ci0KLQktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0JYml0IDI3LDI2IG9mIHoxCQliaXQgMSwwIG9mIHgxCWxvZ2IoeCkKLQktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0JMDAJCQkwMAkJb2RkIGFuZCBldmVuCi0JMDEJCQkwMQkJZXZlbgotCTEwCQkJMTAJCW9kZAotCTEwCQkJMDAJCWV2ZW4KLQkxMQkJCTAxCQlldmVuCi0JLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gICAgKDQpCVNwZWNpYWwgY2FzZXMgKHNlZSAoNCkgb2YgU2VjdGlvbiBBKS4JCi0gCi0gKi8KLSAKZGlmZiAtLWdpdCBhL2xpYm0vc3JjL2Vfc3FydGYuYyBiL2xpYm0vc3JjL2Vfc3FydGYuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWRjOWVmMi4uMDAwMDAwMAotLS0gYS9saWJtL3NyYy9lX3NxcnRmLmMKKysrIC9kZXYvbnVsbApAQCAtMSw4OSArMCwwIEBACi0vKiBlX3NxcnRmLmMgLS0gZmxvYXQgdmVyc2lvbiBvZiBlX3NxcnQuYy4KLSAqIENvbnZlcnNpb24gdG8gZmxvYXQgYnkgSWFuIExhbmNlIFRheWxvciwgQ3lnbnVzIFN1cHBvcnQsIGlhbkBjeWdudXMuY29tLgotICovCi0KLS8qCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBDb3B5cmlnaHQgKEMpIDE5OTMgYnkgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIERldmVsb3BlZCBhdCBTdW5Qcm8sIGEgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBidXNpbmVzcy4KLSAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKLSAqIHNvZnR3YXJlIGlzIGZyZWVseSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoaXMgbm90aWNlCi0gKiBpcyBwcmVzZXJ2ZWQuCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKi8KLQotI2lmbmRlZiBsaW50Ci1zdGF0aWMgY2hhciByY3NpZFtdID0gIiRGcmVlQlNEOiBzcmMvbGliL21zdW4vc3JjL2Vfc3FydGYuYyx2IDEuNyAyMDAyLzA1LzI4IDE4OjE1OjA0IGFsZnJlZCBFeHAgJCI7Ci0jZW5kaWYKLQotI2luY2x1ZGUgIm1hdGguaCIKLSNpbmNsdWRlICJtYXRoX3ByaXZhdGUuaCIKLQotc3RhdGljCWNvbnN0IGZsb2F0CW9uZQk9IDEuMCwgdGlueT0xLjBlLTMwOwotCi1mbG9hdAotX19pZWVlNzU0X3NxcnRmKGZsb2F0IHgpCi17Ci0JZmxvYXQgejsKLQlpbnQzMl90IHNpZ24gPSAoaW50KTB4ODAwMDAwMDA7Ci0JaW50MzJfdCBpeCxzLHEsbSx0LGk7Ci0JdV9pbnQzMl90IHI7Ci0KLQlHRVRfRkxPQVRfV09SRChpeCx4KTsKLQotICAgIC8qIHRha2UgY2FyZSBvZiBJbmYgYW5kIE5hTiAqLwotCWlmKChpeCYweDdmODAwMDAwKT09MHg3ZjgwMDAwMCkgewotCSAgICByZXR1cm4geCp4K3g7CQkvKiBzcXJ0KE5hTik9TmFOLCBzcXJ0KCtpbmYpPStpbmYKLQkJCQkJICAgc3FydCgtaW5mKT1zTmFOICovCi0JfQotICAgIC8qIHRha2UgY2FyZSBvZiB6ZXJvICovCi0JaWYoaXg8PTApIHsKLQkgICAgaWYoKGl4Jih+c2lnbikpPT0wKSByZXR1cm4geDsvKiBzcXJ0KCstMCkgPSArLTAgKi8KLQkgICAgZWxzZSBpZihpeDwwKQotCQlyZXR1cm4gKHgteCkvKHgteCk7CQkvKiBzcXJ0KC12ZSkgPSBzTmFOICovCi0JfQotICAgIC8qIG5vcm1hbGl6ZSB4ICovCi0JbSA9IChpeD4+MjMpOwotCWlmKG09PTApIHsJCQkJLyogc3Vibm9ybWFsIHggKi8KLQkgICAgZm9yKGk9MDsoaXgmMHgwMDgwMDAwMCk9PTA7aSsrKSBpeDw8PTE7Ci0JICAgIG0gLT0gaS0xOwotCX0KLQltIC09IDEyNzsJLyogdW5iaWFzIGV4cG9uZW50ICovCi0JaXggPSAoaXgmMHgwMDdmZmZmZil8MHgwMDgwMDAwMDsKLQlpZihtJjEpCS8qIG9kZCBtLCBkb3VibGUgeCB0byBtYWtlIGl0IGV2ZW4gKi8KLQkgICAgaXggKz0gaXg7Ci0JbSA+Pj0gMTsJLyogbSA9IFttLzJdICovCi0KLSAgICAvKiBnZW5lcmF0ZSBzcXJ0KHgpIGJpdCBieSBiaXQgKi8KLQlpeCArPSBpeDsKLQlxID0gcyA9IDA7CQkvKiBxID0gc3FydCh4KSAqLwotCXIgPSAweDAxMDAwMDAwOwkJLyogciA9IG1vdmluZyBiaXQgZnJvbSByaWdodCB0byBsZWZ0ICovCi0KLQl3aGlsZShyIT0wKSB7Ci0JICAgIHQgPSBzK3I7Ci0JICAgIGlmKHQ8PWl4KSB7Ci0JCXMgICAgPSB0K3I7Ci0JCWl4ICAtPSB0OwotCQlxICAgKz0gcjsKLQkgICAgfQotCSAgICBpeCArPSBpeDsKLQkgICAgcj4+PTE7Ci0JfQotCi0gICAgLyogdXNlIGZsb2F0aW5nIGFkZCB0byBmaW5kIG91dCByb3VuZGluZyBkaXJlY3Rpb24gKi8KLQlpZihpeCE9MCkgewotCSAgICB6ID0gb25lLXRpbnk7IC8qIHRyaWdnZXIgaW5leGFjdCBmbGFnICovCi0JICAgIGlmICh6Pj1vbmUpIHsKLQkgICAgICAgIHogPSBvbmUrdGlueTsKLQkJaWYgKHo+b25lKQotCQkgICAgcSArPSAyOwotCQllbHNlCi0JCSAgICBxICs9IChxJjEpOwotCSAgICB9Ci0JfQotCWl4ID0gKHE+PjEpKzB4M2YwMDAwMDA7Ci0JaXggKz0gKG0gPDwyMyk7Ci0JU0VUX0ZMT0FUX1dPUkQoeixpeCk7Ci0JcmV0dXJuIHo7Ci19CmRpZmYgLS1naXQgYS9saWJtL3NyYy9mcG1hdGguaCBiL2xpYm0vc3JjL2ZwbWF0aC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NzliZDdiLi4wMDAwMDAwCi0tLSBhL2xpYm0vc3JjL2ZwbWF0aC5oCisrKyAvZGV2L251bGwKQEAgLTEsNzIgKzAsMCBAQAotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDMgTWlrZSBCYXJjcm9mdCA8bWlrZUBGcmVlQlNELm9yZz4KLSAqIENvcHlyaWdodCAoYykgMjAwMiBEYXZpZCBTY2h1bHR6IDxkYXNARnJlZUJTRC5PUkc+Ci0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICoKLSAqICRGcmVlQlNEOiBzcmMvbGliL2xpYmMvaW5jbHVkZS9mcG1hdGguaCx2IDEuMyAyMDA1LzAyLzA2IDAzOjIzOjMxIGRhcyBFeHAgJAotICovCi0KLSNpbmNsdWRlIDxlbmRpYW4uaD4KLSNpbmNsdWRlICJfZnBtYXRoLmgiCi0KLXVuaW9uIElFRUVmMmJpdHMgewotCWZsb2F0CWY7Ci0Jc3RydWN0IHsKLSNpZiBfX0JZVEVfT1JERVIgPT0gX19MSVRUTEVfRU5ESUFOCi0JCXVuc2lnbmVkIGludAltYW4JOjIzOwotCQl1bnNpZ25lZCBpbnQJZXhwCTo4OwotCQl1bnNpZ25lZCBpbnQJc2lnbgk6MTsKLSNlbHNlIC8qIF9CSUdfRU5ESUFOICovCi0JCXVuc2lnbmVkIGludAlzaWduCToxOwotCQl1bnNpZ25lZCBpbnQJZXhwCTo4OwotCQl1bnNpZ25lZCBpbnQJbWFuCToyMzsKLSNlbmRpZgotCX0gYml0czsKLX07Ci0KLSNkZWZpbmUJREJMX01BTkhfU0laRQkyMAotI2RlZmluZQlEQkxfTUFOTF9TSVpFCTMyCi0KLXVuaW9uIElFRUVkMmJpdHMgewotCWRvdWJsZQlkOwotCXN0cnVjdCB7Ci0vKiAjaWZkZWYgX19BUk1FQl9fICovCi0jaWYgKF9fQllURV9PUkRFUiA9PSBfX0JJR19FTkRJQU4pIHx8IChkZWZpbmVkKF9fYXJtX18pICYmICFkZWZpbmVkKF9fVkZQX0ZQX18pKQotCQl1bnNpZ25lZCBpbnQJbWFuaAk6MjA7Ci0JCXVuc2lnbmVkIGludAlleHAJOjExOwotCQl1bnNpZ25lZCBpbnQJc2lnbgk6MTsKLQkJdW5zaWduZWQgaW50CW1hbmwJOjMyOwotI2VsaWYgIF9fQllURV9PUkRFUiA9PSBfX0xJVFRMRV9FTkRJQU4gCi0JCXVuc2lnbmVkIGludAltYW5sCTozMjsKLQkJdW5zaWduZWQgaW50CW1hbmgJOjIwOwotCQl1bnNpZ25lZCBpbnQJZXhwCToxMTsKLQkJdW5zaWduZWQgaW50CXNpZ24JOjE7Ci0jZWxpZiBfX0JZVEVfT1JERVIgPT0gX19CSUdfRU5ESUFOCi0JCXVuc2lnbmVkIGludAlzaWduCToxOwotCQl1bnNpZ25lZCBpbnQJZXhwCToxMTsKLQkJdW5zaWduZWQgaW50CW1hbmgJOjIwOwotCQl1bnNpZ25lZCBpbnQJbWFubAk6MzI7Ci0jZW5kaWYKLQl9IGJpdHM7Ci19OwpkaWZmIC0tZ2l0IGEvbGlibS9zcmMva19jb3MuYyBiL2xpYm0vc3JjL2tfY29zLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwOTE2ZDcuLjAwMDAwMDAKLS0tIGEvbGlibS9zcmMva19jb3MuYworKysgL2Rldi9udWxsCkBAIC0xLDc5ICswLDAgQEAKLQotLyogQCgjKWtfY29zLmMgMS4zIDk1LzAxLzE4ICovCi0vKgotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogQ29weXJpZ2h0IChDKSAxOTkzIGJ5IFN1biBNaWNyb3N5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBEZXZlbG9wZWQgYXQgU3VuU29mdCwgYSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGJ1c2luZXNzLgotICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcwotICogc29mdHdhcmUgaXMgZnJlZWx5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhpcyBub3RpY2UgCi0gKiBpcyBwcmVzZXJ2ZWQuCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKi8KLQotI2lmbmRlZiBsaW50Ci1zdGF0aWMgY2hhciByY3NpZFtdID0gIiRGcmVlQlNEOiBzcmMvbGliL21zdW4vc3JjL2tfY29zLmMsdiAxLjEwIDIwMDUvMTAvMjYgMTI6MzY6MTggYmRlIEV4cCAkIjsKLSNlbmRpZgotCi0vKgotICogX19rZXJuZWxfY29zKCB4LCAgeSApCi0gKiBrZXJuZWwgY29zIGZ1bmN0aW9uIG9uIFstcGkvNCwgcGkvNF0sIHBpLzQgfiAwLjc4NTM5ODE2NAotICogSW5wdXQgeCBpcyBhc3N1bWVkIHRvIGJlIGJvdW5kZWQgYnkgfnBpLzQgaW4gbWFnbml0dWRlLgotICogSW5wdXQgeSBpcyB0aGUgdGFpbCBvZiB4LiAKLSAqCi0gKiBBbGdvcml0aG0KLSAqCTEuIFNpbmNlIGNvcygteCkgPSBjb3MoeCksIHdlIG5lZWQgb25seSB0byBjb25zaWRlciBwb3NpdGl2ZSB4LgotICoJMi4gaWYgeCA8IDJeLTI3IChoeDwweDNlNDAwMDAwIDApLCByZXR1cm4gMSB3aXRoIGluZXhhY3QgaWYgeCE9MC4KLSAqCTMuIGNvcyh4KSBpcyBhcHByb3hpbWF0ZWQgYnkgYSBwb2x5bm9taWFsIG9mIGRlZ3JlZSAxNCBvbgotICoJICAgWzAscGkvNF0KLSAqCQkgIAkgICAgICAgICAgICAgICAgIDQgICAgICAgICAgICAxNAotICoJICAgCWNvcyh4KSB+IDEgLSB4KngvMiArIEMxKnggKyAuLi4gKyBDNip4Ci0gKgkgICB3aGVyZSB0aGUgcmVtZXogZXJyb3IgaXMKLSAqCQotICogCXwgICAgICAgICAgICAgIDIgICAgIDQgICAgIDYgICAgIDggICAgIDEwICAgIDEyICAgICAxNCB8ICAgICAtNTgKLSAqIAl8Y29zKHgpLSgxLS41KnggK0MxKnggK0MyKnggK0MzKnggK0M0KnggK0M1KnggICtDNip4ICApfCA8PSAyCi0gKiAJfCAgICAJCQkJCSAgICAgICAgICAgICAgIHwgCi0gKiAKLSAqIAkgICAgICAgICAgICAgICA0ICAgICA2ICAgICA4ICAgICAxMCAgICAxMiAgICAgMTQgCi0gKgk0LiBsZXQgciA9IEMxKnggK0MyKnggK0MzKnggK0M0KnggK0M1KnggICtDNip4ICAsIHRoZW4KLSAqCSAgICAgICBjb3MoeCkgfiAxIC0geCp4LzIgKyByCi0gKgkgICBzaW5jZSBjb3MoeCt5KSB+IGNvcyh4KSAtIHNpbih4KSp5IAotICoJCQkgIH4gY29zKHgpIC0geCp5LAotICoJICAgYSBjb3JyZWN0aW9uIHRlcm0gaXMgbmVjZXNzYXJ5IGluIGNvcyh4KSBhbmQgaGVuY2UKLSAqCQljb3MoeCt5KSA9IDEgLSAoeCp4LzIgLSAociAtIHgqeSkpCi0gKgkgICBGb3IgYmV0dGVyIGFjY3VyYWN5LCByZWFycmFuZ2UgdG8KLSAqCQljb3MoeCt5KSB+IHcgKyAodG1wICsgKHIteCp5KSkKLSAqCSAgIHdoZXJlIHcgPSAxIC0geCp4LzIgYW5kIHRtcCBpcyBhIHRpbnkgY29ycmVjdGlvbiB0ZXJtCi0gKgkgICAoMSAtIHgqeC8yID09IHcgKyB0bXAgZXhhY3RseSBpbiBpbmZpbml0ZSBwcmVjaXNpb24pLgotICoJICAgVGhlIGV4YWN0bmVzcyBvZiB3ICsgdG1wIGluIGluZmluaXRlIHByZWNpc2lvbiBkZXBlbmRzIG9uIHcKLSAqCSAgIGFuZCB0bXAgaGF2aW5nIHRoZSBzYW1lIHByZWNpc2lvbiBhcyB4LiAgSWYgdGhleSBoYXZlIGV4dHJhCi0gKgkgICBwcmVjaXNpb24gZHVlIHRvIGNvbXBpbGVyIGJ1Z3MsIHRoZW4gdGhlIGV4dHJhIHByZWNpc2lvbiBpcwotICoJICAgb25seSBnb29kIHByb3ZpZGVkIGl0IGlzIHJldGFpbmVkIGluIGFsbCB0ZXJtcyBvZiB0aGUgZmluYWwKLSAqCSAgIGV4cHJlc3Npb24gZm9yIGNvcygpLiAgUmV0ZW50aW9uIGhhcHBlbnMgaW4gYWxsIGNhc2VzIHRlc3RlZAotICoJICAgdW5kZXIgRnJlZUJTRCwgc28gZG9uJ3QgcGVzc2ltaXplIHRoaW5ncyBieSBmb3JjaWJseSBjbGlwcGluZwotICoJICAgYW55IGV4dHJhIHByZWNpc2lvbiBpbiB3LgotICovCi0KLSNpbmNsdWRlICJtYXRoLmgiCi0jaW5jbHVkZSAibWF0aF9wcml2YXRlLmgiCi0KLXN0YXRpYyBjb25zdCBkb3VibGUKLW9uZSA9ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwZSswMCwgLyogMHgzRkYwMDAwMCwgMHgwMDAwMDAwMCAqLwotQzEgID0gIDQuMTY2NjY2NjY2NjY2NjYwMTkwMzdlLTAyLCAvKiAweDNGQTU1NTU1LCAweDU1NTU1NTRDICovCi1DMiAgPSAtMS4zODg4ODg4ODg4ODc0MTA5NTc0OWUtMDMsIC8qIDB4QkY1NkMxNkMsIDB4MTZDMTUxNzcgKi8KLUMzICA9ICAyLjQ4MDE1ODcyODk0NzY3Mjk0MTc4ZS0wNSwgLyogMHgzRUZBMDFBMCwgMHgxOUNCMTU5MCAqLwotQzQgID0gLTIuNzU1NzMxNDM1MTM5MDY2MzMwMzVlLTA3LCAvKiAweEJFOTI3RTRGLCAweDgwOUM1MkFEICovCi1DNSAgPSAgMi4wODc1NzIzMjEyOTgxNzQ4Mjc5MGUtMDksIC8qIDB4M0UyMUVFOUUsIDB4QkRCNEIxQzQgKi8KLUM2ICA9IC0xLjEzNTk2NDc1NTc3ODgxOTQ4MjY1ZS0xMTsgLyogMHhCREE4RkFFOSwgMHhCRTg4MzhENCAqLwotCi1kb3VibGUKLV9fa2VybmVsX2Nvcyhkb3VibGUgeCwgZG91YmxlIHkpCi17Ci0JZG91YmxlIGh6LHoscix3OwotCi0JeiAgPSB4Kng7Ci0JciAgPSB6KihDMSt6KihDMit6KihDMyt6KihDNCt6KihDNSt6KkM2KSkpKSk7Ci0JaHogPSAoZmxvYXQpMC41Kno7Ci0JdyAgPSBvbmUtaHo7Ci0JcmV0dXJuIHcgKyAoKChvbmUtdyktaHopICsgKHoqci14KnkpKTsKLX0KZGlmZiAtLWdpdCBhL2xpYm0vc3JjL2tfY29zZi5jIGIvbGlibS9zcmMva19jb3NmLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZmMDhkNWYuLjAwMDAwMDAKLS0tIGEvbGlibS9zcmMva19jb3NmLmMKKysrIC9kZXYvbnVsbApAQCAtMSw0NyArMCwwIEBACi0vKiBrX2Nvc2YuYyAtLSBmbG9hdCB2ZXJzaW9uIG9mIGtfY29zLmMKLSAqIENvbnZlcnNpb24gdG8gZmxvYXQgYnkgSWFuIExhbmNlIFRheWxvciwgQ3lnbnVzIFN1cHBvcnQsIGlhbkBjeWdudXMuY29tLgotICogRGVidWdnZWQgYW5kIG9wdGltaXplZCBieSBCcnVjZSBELiBFdmFucy4KLSAqLwotCi0vKgotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogQ29weXJpZ2h0IChDKSAxOTkzIGJ5IFN1biBNaWNyb3N5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBEZXZlbG9wZWQgYXQgU3VuUHJvLCBhIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gYnVzaW5lc3MuCi0gKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCi0gKiBzb2Z0d2FyZSBpcyBmcmVlbHkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGlzIG5vdGljZQotICogaXMgcHJlc2VydmVkLgotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICovCi0KLSNpZm5kZWYgSU5MSU5FX0tFUk5FTF9DT1NERgotI2lmbmRlZiBsaW50Ci1zdGF0aWMgY2hhciByY3NpZFtdID0gIiRGcmVlQlNEOiBzcmMvbGliL21zdW4vc3JjL2tfY29zZi5jLHYgMS4xNSAyMDA1LzExLzMwIDExOjUxOjE3IGJkZSBFeHAgJCI7Ci0jZW5kaWYKLSNlbmRpZgotCi0jaW5jbHVkZSAibWF0aC5oIgotI2luY2x1ZGUgIm1hdGhfcHJpdmF0ZS5oIgotCi0vKiB8Y29zKHgpIC0gYyh4KXwgPCAyKiotMzQuMSAoflstNS4zN2UtMTEsIDUuMjk1ZS0xMV0pLiAqLwotc3RhdGljIGNvbnN0IGRvdWJsZQotb25lID0gIDEuMCwKLUMwICA9IC0weDFmZmZmZmZkMGM1ZTgxLjBwLTU0LAkvKiAtMC40OTk5OTk5OTcyNTEwMzEwMDMxMjAgKi8KLUMxICA9ICAweDE1NTU1M2UxMDUzYTQyLjBwLTU3LAkvKiAgMC4wNDE2NjY2MjMzMjM3MzkwNjMxODk0ICovCi1DMiAgPSAtMHgxNmMwODdlODBmMWUyNy4wcC02MiwJLyogLTAuMDAxMzg4Njc2Mzc3NDYwOTkyOTQ2OTIgKi8KLUMzICA9ICAweDE5OTM0MmUwZWU1MDY5LjBwLTY4OwkvKiAgMC4wMDAwMjQzOTA0NDg3OTYyNzc0MDkwNjU0ICovCi0KLSNpZmRlZiBJTkxJTkVfS0VSTkVMX0NPU0RGCi1leHRlcm4gaW5saW5lCi0jZW5kaWYKLWZsb2F0Ci1fX2tlcm5lbF9jb3NkZihkb3VibGUgeCkKLXsKLQlkb3VibGUgciwgdywgejsKLQotCS8qIFRyeSB0byBvcHRpbWl6ZSBmb3IgcGFyYWxsZWwgZXZhbHVhdGlvbiBhcyBpbiBrX3RhbmYuYy4gKi8KLQl6ID0geCp4OwotCXcgPSB6Kno7Ci0JciA9IEMyK3oqQzM7Ci0JcmV0dXJuICgob25lK3oqQzApICsgdypDMSkgKyAodyp6KSpyOwotfQpkaWZmIC0tZ2l0IGEvbGlibS9zcmMva19yZW1fcGlvMi5jIGIvbGlibS9zcmMva19yZW1fcGlvMi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MTE2ZjMxLi4wMDAwMDAwCi0tLSBhL2xpYm0vc3JjL2tfcmVtX3BpbzIuYworKysgL2Rldi9udWxsCkBAIC0xLDMwNCArMCwwIEBACi0KLS8qIEAoIylrX3JlbV9waW8yLmMgMS4zIDk1LzAxLzE4ICovCi0vKgotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogQ29weXJpZ2h0IChDKSAxOTkzIGJ5IFN1biBNaWNyb3N5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBEZXZlbG9wZWQgYXQgU3VuU29mdCwgYSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGJ1c2luZXNzLgotICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcwotICogc29mdHdhcmUgaXMgZnJlZWx5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhpcyBub3RpY2UgCi0gKiBpcyBwcmVzZXJ2ZWQuCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKi8KLQotI2lmbmRlZiBsaW50Ci1zdGF0aWMgY2hhciByY3NpZFtdID0gIiRGcmVlQlNEOiBzcmMvbGliL21zdW4vc3JjL2tfcmVtX3BpbzIuYyx2IDEuNyAyMDA1LzAyLzA0IDE4OjI2OjA2IGRhcyBFeHAgJCI7Ci0jZW5kaWYKLQotLyoKLSAqIF9fa2VybmVsX3JlbV9waW8yKHgseSxlMCxueCxwcmVjLGlwaW8yKQotICogZG91YmxlIHhbXSx5W107IGludCBlMCxueCxwcmVjOyBpbnQgaXBpbzJbXTsKLSAqIAotICogX19rZXJuZWxfcmVtX3BpbzIgcmV0dXJuIHRoZSBsYXN0IHRocmVlIGRpZ2l0cyBvZiBOIHdpdGggCi0gKgkJeSA9IHggLSBOKnBpLzIKLSAqIHNvIHRoYXQgfHl8IDwgcGkvMi4KLSAqCi0gKiBUaGUgbWV0aG9kIGlzIHRvIGNvbXB1dGUgdGhlIGludGVnZXIgKG1vZCA4KSBhbmQgZnJhY3Rpb24gcGFydHMgb2YgCi0gKiAoMi9waSkqeCB3aXRob3V0IGRvaW5nIHRoZSBmdWxsIG11bHRpcGxpY2F0aW9uLiBJbiBnZW5lcmFsIHdlCi0gKiBza2lwIHRoZSBwYXJ0IG9mIHRoZSBwcm9kdWN0IHRoYXQgYXJlIGtub3duIHRvIGJlIGEgaHVnZSBpbnRlZ2VyICgKLSAqIG1vcmUgYWNjdXJhdGVseSwgPSAwIG1vZCA4ICkuIFRodXMgdGhlIG51bWJlciBvZiBvcGVyYXRpb25zIGFyZQotICogaW5kZXBlbmRlbnQgb2YgdGhlIGV4cG9uZW50IG9mIHRoZSBpbnB1dC4KLSAqCi0gKiAoMi9waSkgaXMgcmVwcmVzZW50ZWQgYnkgYW4gYXJyYXkgb2YgMjQtYml0IGludGVnZXJzIGluIGlwaW8yW10uCi0gKgotICogSW5wdXQgcGFyYW1ldGVyczoKLSAqIAl4W10JVGhlIGlucHV0IHZhbHVlIChtdXN0IGJlIHBvc2l0aXZlKSBpcyBicm9rZW4gaW50byBueCAKLSAqCQlwaWVjZXMgb2YgMjQtYml0IGludGVnZXJzIGluIGRvdWJsZSBwcmVjaXNpb24gZm9ybWF0LgotICoJCXhbaV0gd2lsbCBiZSB0aGUgaS10aCAyNCBiaXQgb2YgeC4gVGhlIHNjYWxlZCBleHBvbmVudCAKLSAqCQlvZiB4WzBdIGlzIGdpdmVuIGluIGlucHV0IHBhcmFtZXRlciBlMCAoaS5lLiwgeFswXSoyXmUwIAotICoJCW1hdGNoIHgncyB1cCB0byAyNCBiaXRzLgotICoKLSAqCQlFeGFtcGxlIG9mIGJyZWFraW5nIGEgZG91YmxlIHBvc2l0aXZlIHogaW50byB4WzBdK3hbMV0reFsyXToKLSAqCQkJZTAgPSBpbG9nYih6KS0yMwotICoJCQl6ICA9IHNjYWxibih6LC1lMCkKLSAqCQlmb3IgaSA9IDAsMSwyCi0gKgkJCXhbaV0gPSBmbG9vcih6KQotICoJCQl6ICAgID0gKHoteFtpXSkqMioqMjQKLSAqCi0gKgotICoJeVtdCW91cHV0IHJlc3VsdCBpbiBhbiBhcnJheSBvZiBkb3VibGUgcHJlY2lzaW9uIG51bWJlcnMuCi0gKgkJVGhlIGRpbWVuc2lvbiBvZiB5W10gaXM6Ci0gKgkJCTI0LWJpdCAgcHJlY2lzaW9uCTEKLSAqCQkJNTMtYml0ICBwcmVjaXNpb24JMgotICoJCQk2NC1iaXQgIHByZWNpc2lvbgkyCi0gKgkJCTExMy1iaXQgcHJlY2lzaW9uCTMKLSAqCQlUaGUgYWN0dWFsIHZhbHVlIGlzIHRoZSBzdW0gb2YgdGhlbS4gVGh1cyBmb3IgMTEzLWJpdAotICoJCXByZWNpc29uLCBvbmUgbWF5IGhhdmUgdG8gZG8gc29tZXRoaW5nIGxpa2U6Ci0gKgotICoJCWxvbmcgZG91YmxlIHQsdyxyX2hlYWQsIHJfdGFpbDsKLSAqCQl0ID0gKGxvbmcgZG91YmxlKXlbMl0gKyAobG9uZyBkb3VibGUpeVsxXTsKLSAqCQl3ID0gKGxvbmcgZG91YmxlKXlbMF07Ci0gKgkJcl9oZWFkID0gdCt3OwotICoJCXJfdGFpbCA9IHcgLSAocl9oZWFkIC0gdCk7Ci0gKgotICoJZTAJVGhlIGV4cG9uZW50IG9mIHhbMF0KLSAqCi0gKglueAlkaW1lbnNpb24gb2YgeFtdCi0gKgotICogIAlwcmVjCWFuIGludGVnZXIgaW5kaWNhdGluZyB0aGUgcHJlY2lzaW9uOgotICoJCQkwCTI0ICBiaXRzIChzaW5nbGUpCi0gKgkJCTEJNTMgIGJpdHMgKGRvdWJsZSkKLSAqCQkJMgk2NCAgYml0cyAoZXh0ZW5kZWQpCi0gKgkJCTMJMTEzIGJpdHMgKHF1YWQpCi0gKgotICoJaXBpbzJbXQotICoJCWludGVnZXIgYXJyYXksIGNvbnRhaW5zIHRoZSAoMjQqaSktdGggdG8gKDI0KmkrMjMpLXRoIAotICoJCWJpdCBvZiAyL3BpIGFmdGVyIGJpbmFyeSBwb2ludC4gVGhlIGNvcnJlc3BvbmRpbmcgCi0gKgkJZmxvYXRpbmcgdmFsdWUgaXMKLSAqCi0gKgkJCWlwaW8yW2ldICogMl4oLTI0KGkrMSkpLgotICoKLSAqIEV4dGVybmFsIGZ1bmN0aW9uOgotICoJZG91YmxlIHNjYWxibigpLCBmbG9vcigpOwotICoKLSAqCi0gKiBIZXJlIGlzIHRoZSBkZXNjcmlwdGlvbiBvZiBzb21lIGxvY2FsIHZhcmlhYmxlczoKLSAqCi0gKiAJamsJamsrMSBpcyB0aGUgaW5pdGlhbCBudW1iZXIgb2YgdGVybXMgb2YgaXBpbzJbXSBuZWVkZWQKLSAqCQlpbiB0aGUgY29tcHV0YXRpb24uIFRoZSByZWNvbW1lbmRlZCB2YWx1ZSBpcyAyLDMsNCwKLSAqCQk2IGZvciBzaW5nbGUsIGRvdWJsZSwgZXh0ZW5kZWQsYW5kIHF1YWQuCi0gKgotICogCWp6CWxvY2FsIGludGVnZXIgdmFyaWFibGUgaW5kaWNhdGluZyB0aGUgbnVtYmVyIG9mIAotICoJCXRlcm1zIG9mIGlwaW8yW10gdXNlZC4gCi0gKgotICoJangJbnggLSAxCi0gKgotICoJanYJaW5kZXggZm9yIHBvaW50aW5nIHRvIHRoZSBzdWl0YWJsZSBpcGlvMltdIGZvciB0aGUKLSAqCQljb21wdXRhdGlvbi4gSW4gZ2VuZXJhbCwgd2Ugd2FudAotICoJCQkoIDJeZTAqeFswXSAqIGlwaW8yW2p2LTFdKjJeKC0yNGp2KSApLzgKLSAqCQlpcyBhbiBpbnRlZ2VyLiBUaHVzCi0gKgkJCWUwLTMtMjQqanYgPj0gMCBvciAoZTAtMykvMjQgPj0ganYKLSAqCQlIZW5jZSBqdiA9IG1heCgwLChlMC0zKS8yNCkuCi0gKgotICoJanAJanArMSBpcyB0aGUgbnVtYmVyIG9mIHRlcm1zIGluIFBJbzJbXSBuZWVkZWQsIGpwID0gamsuCi0gKgotICogCXFbXQlkb3VibGUgYXJyYXkgd2l0aCBpbnRlZ3JhbCB2YWx1ZSwgcmVwcmVzZW50aW5nIHRoZQotICoJCTI0LWJpdHMgY2h1bmsgb2YgdGhlIHByb2R1Y3Qgb2YgeCBhbmQgMi9waS4KLSAqCi0gKglxMAl0aGUgY29ycmVzcG9uZGluZyBleHBvbmVudCBvZiBxWzBdLiBOb3RlIHRoYXQgdGhlCi0gKgkJZXhwb25lbnQgZm9yIHFbaV0gd291bGQgYmUgcTAtMjQqaS4KLSAqCi0gKglQSW8yW10JZG91YmxlIHByZWNpc2lvbiBhcnJheSwgb2J0YWluZWQgYnkgY3V0dGluZyBwaS8yCi0gKgkJaW50byAyNCBiaXRzIGNodW5rcy4gCi0gKgotICoJZltdCWlwaW8yW10gaW4gZmxvYXRpbmcgcG9pbnQgCi0gKgotICoJaXFbXQlpbnRlZ2VyIGFycmF5IGJ5IGJyZWFraW5nIHVwIHFbXSBpbiAyNC1iaXRzIGNodW5rLgotICoKLSAqCWZxW10JZmluYWwgcHJvZHVjdCBvZiB4KigyL3BpKSBpbiBmcVswXSwuLixmcVtqa10KLSAqCi0gKglpaAlpbnRlZ2VyLiBJZiA+MCBpdCBpbmRpY2F0ZXMgcVtdIGlzID49IDAuNSwgaGVuY2UKLSAqCQlpdCBhbHNvIGluZGljYXRlcyB0aGUgKnNpZ24qIG9mIHRoZSByZXN1bHQuCi0gKgotICovCi0KLQotLyoKLSAqIENvbnN0YW50czoKLSAqIFRoZSBoZXhhZGVjaW1hbCB2YWx1ZXMgYXJlIHRoZSBpbnRlbmRlZCBvbmVzIGZvciB0aGUgZm9sbG93aW5nIAotICogY29uc3RhbnRzLiBUaGUgZGVjaW1hbCB2YWx1ZXMgbWF5IGJlIHVzZWQsIHByb3ZpZGVkIHRoYXQgdGhlIAotICogY29tcGlsZXIgd2lsbCBjb252ZXJ0IGZyb20gZGVjaW1hbCB0byBiaW5hcnkgYWNjdXJhdGVseSBlbm91Z2ggCi0gKiB0byBwcm9kdWNlIHRoZSBoZXhhZGVjaW1hbCB2YWx1ZXMgc2hvd24uCi0gKi8KLQotI2luY2x1ZGUgIm1hdGguaCIKLSNpbmNsdWRlICJtYXRoX3ByaXZhdGUuaCIKLQotc3RhdGljIGNvbnN0IGludCBpbml0X2prW10gPSB7MiwzLDQsNn07IC8qIGluaXRpYWwgdmFsdWUgZm9yIGprICovCi0KLXN0YXRpYyBjb25zdCBkb3VibGUgUElvMltdID0gewotICAxLjU3MDc5NjI1MTI5Njk5NzA3MDMxZSswMCwgLyogMHgzRkY5MjFGQiwgMHg0MDAwMDAwMCAqLwotICA3LjU0OTc4OTQxNTg2MTU5NjM1MzM1ZS0wOCwgLyogMHgzRTc0NDQyRCwgMHgwMDAwMDAwMCAqLwotICA1LjM5MDMwMjUyOTk1Nzc2NDc2NTU0ZS0xNSwgLyogMHgzQ0Y4NDY5OCwgMHg4MDAwMDAwMCAqLwotICAzLjI4MjAwMzQxNTgwNzkxMjk0MTIzZS0yMiwgLyogMHgzQjc4Q0M1MSwgMHg2MDAwMDAwMCAqLwotICAxLjI3MDY1NTc1MzA4MDY3NjA3MzQ5ZS0yOSwgLyogMHgzOUYwMUI4MywgMHg4MDAwMDAwMCAqLwotICAxLjIyOTMzMzA4OTgxMTExMzI4OTMyZS0zNiwgLyogMHgzODdBMjUyMCwgMHg0MDAwMDAwMCAqLwotICAyLjczMzcwMDUzODE2NDY0NTU5NjI0ZS00NCwgLyogMHgzNkUzODIyMiwgMHg4MDAwMDAwMCAqLwotICAyLjE2NzQxNjgzODc3ODA0ODE5NDQ0ZS01MSwgLyogMHgzNTY5RjMxRCwgMHgwMDAwMDAwMCAqLwotfTsKLQotc3RhdGljIGNvbnN0IGRvdWJsZQkJCQotemVybyAgID0gMC4wLAotb25lICAgID0gMS4wLAotdHdvMjQgICA9ICAxLjY3NzcyMTYwMDAwMDAwMDAwMDAwZSswNywgLyogMHg0MTcwMDAwMCwgMHgwMDAwMDAwMCAqLwotdHdvbjI0ICA9ICA1Ljk2MDQ2NDQ3NzUzOTA2MjUwMDAwZS0wODsgLyogMHgzRTcwMDAwMCwgMHgwMDAwMDAwMCAqLwotCi0JaW50IF9fa2VybmVsX3JlbV9waW8yKGRvdWJsZSAqeCwgZG91YmxlICp5LCBpbnQgZTAsIGludCBueCwgaW50IHByZWMsIGNvbnN0IGludDMyX3QgKmlwaW8yKQotewotCWludDMyX3QganosangsanYsanAsamssY2FycnksbixpcVsyMF0saSxqLGssbSxxMCxpaDsKLQlkb3VibGUgeixmdyxmWzIwXSxmcVsyMF0scVsyMF07Ci0KLSAgICAvKiBpbml0aWFsaXplIGprKi8KLQlqayA9IGluaXRfamtbcHJlY107Ci0JanAgPSBqazsKLQotICAgIC8qIGRldGVybWluZSBqeCxqdixxMCwgbm90ZSB0aGF0IDM+cTAgKi8KLQlqeCA9ICBueC0xOwotCWp2ID0gKGUwLTMpLzI0OyBpZihqdjwwKSBqdj0wOwotCXEwID0gIGUwLTI0KihqdisxKTsKLQotICAgIC8qIHNldCB1cCBmWzBdIHRvIGZbangramtdIHdoZXJlIGZbangramtdID0gaXBpbzJbanYramtdICovCi0JaiA9IGp2LWp4OyBtID0gangrams7Ci0JZm9yKGk9MDtpPD1tO2krKyxqKyspIGZbaV0gPSAoajwwKT8gemVybyA6IChkb3VibGUpIGlwaW8yW2pdOwotCi0gICAgLyogY29tcHV0ZSBxWzBdLHFbMV0sLi4ucVtqa10gKi8KLQlmb3IgKGk9MDtpPD1qaztpKyspIHsKLQkgICAgZm9yKGo9MCxmdz0wLjA7ajw9ang7aisrKSBmdyArPSB4W2pdKmZbangraS1qXTsgcVtpXSA9IGZ3OwotCX0KLQotCWp6ID0gams7Ci1yZWNvbXB1dGU6Ci0gICAgLyogZGlzdGlsbCBxW10gaW50byBpcVtdIHJldmVyc2luZ2x5ICovCi0JZm9yKGk9MCxqPWp6LHo9cVtqel07aj4wO2krKyxqLS0pIHsKLQkgICAgZncgICAgPSAgKGRvdWJsZSkoKGludDMyX3QpKHR3b24yNCogeikpOwotCSAgICBpcVtpXSA9ICAoaW50MzJfdCkoei10d28yNCpmdyk7Ci0JICAgIHogICAgID0gIHFbai0xXStmdzsKLQl9Ci0KLSAgICAvKiBjb21wdXRlIG4gKi8KLQl6ICA9IHNjYWxibih6LHEwKTsJCS8qIGFjdHVhbCB2YWx1ZSBvZiB6ICovCi0JeiAtPSA4LjAqZmxvb3IoeiowLjEyNSk7CQkvKiB0cmltIG9mZiBpbnRlZ2VyID49IDggKi8KLQluICA9IChpbnQzMl90KSB6OwotCXogLT0gKGRvdWJsZSluOwotCWloID0gMDsKLQlpZihxMD4wKSB7CS8qIG5lZWQgaXFbanotMV0gdG8gZGV0ZXJtaW5lIG4gKi8KLQkgICAgaSAgPSAoaXFbanotMV0+PigyNC1xMCkpOyBuICs9IGk7Ci0JICAgIGlxW2p6LTFdIC09IGk8PCgyNC1xMCk7Ci0JICAgIGloID0gaXFbanotMV0+PigyMy1xMCk7Ci0JfSAKLQllbHNlIGlmKHEwPT0wKSBpaCA9IGlxW2p6LTFdPj4yMzsKLQllbHNlIGlmKHo+PTAuNSkgaWg9MjsKLQotCWlmKGloPjApIHsJLyogcSA+IDAuNSAqLwotCSAgICBuICs9IDE7IGNhcnJ5ID0gMDsKLQkgICAgZm9yKGk9MDtpPGp6IDtpKyspIHsJLyogY29tcHV0ZSAxLXEgKi8KLQkJaiA9IGlxW2ldOwotCQlpZihjYXJyeT09MCkgewotCQkgICAgaWYoaiE9MCkgewotCQkJY2FycnkgPSAxOyBpcVtpXSA9IDB4MTAwMDAwMC0gajsKLQkJICAgIH0KLQkJfSBlbHNlICBpcVtpXSA9IDB4ZmZmZmZmIC0gajsKLQkgICAgfQotCSAgICBpZihxMD4wKSB7CQkvKiByYXJlIGNhc2U6IGNoYW5jZSBpcyAxIGluIDEyICovCi0JICAgICAgICBzd2l0Y2gocTApIHsKLQkgICAgICAgIGNhc2UgMToKLQkgICAgCSAgIGlxW2p6LTFdICY9IDB4N2ZmZmZmOyBicmVhazsKLQkgICAgCWNhc2UgMjoKLQkgICAgCSAgIGlxW2p6LTFdICY9IDB4M2ZmZmZmOyBicmVhazsKLQkgICAgICAgIH0KLQkgICAgfQotCSAgICBpZihpaD09MikgewotCQl6ID0gb25lIC0gejsKLQkJaWYoY2FycnkhPTApIHogLT0gc2NhbGJuKG9uZSxxMCk7Ci0JICAgIH0KLQl9Ci0KLSAgICAvKiBjaGVjayBpZiByZWNvbXB1dGF0aW9uIGlzIG5lZWRlZCAqLwotCWlmKHo9PXplcm8pIHsKLQkgICAgaiA9IDA7Ci0JICAgIGZvciAoaT1qei0xO2k+PWprO2ktLSkgaiB8PSBpcVtpXTsKLQkgICAgaWYoaj09MCkgeyAvKiBuZWVkIHJlY29tcHV0YXRpb24gKi8KLQkJZm9yKGs9MTtpcVtqay1rXT09MDtrKyspOyAgIC8qIGsgPSBuby4gb2YgdGVybXMgbmVlZGVkICovCi0KLQkJZm9yKGk9anorMTtpPD1qeitrO2krKykgeyAgIC8qIGFkZCBxW2p6KzFdIHRvIHFbanora10gKi8KLQkJICAgIGZbangraV0gPSAoZG91YmxlKSBpcGlvMltqditpXTsKLQkJICAgIGZvcihqPTAsZnc9MC4wO2o8PWp4O2orKykgZncgKz0geFtqXSpmW2p4K2ktal07Ci0JCSAgICBxW2ldID0gZnc7Ci0JCX0KLQkJanogKz0gazsKLQkJZ290byByZWNvbXB1dGU7Ci0JICAgIH0KLQl9Ci0KLSAgICAvKiBjaG9wIG9mZiB6ZXJvIHRlcm1zICovCi0JaWYoej09MC4wKSB7Ci0JICAgIGp6IC09IDE7IHEwIC09IDI0OwotCSAgICB3aGlsZShpcVtqel09PTApIHsganotLTsgcTAtPTI0O30KLQl9IGVsc2UgeyAvKiBicmVhayB6IGludG8gMjQtYml0IGlmIG5lY2Vzc2FyeSAqLwotCSAgICB6ID0gc2NhbGJuKHosLXEwKTsKLQkgICAgaWYoej49dHdvMjQpIHsgCi0JCWZ3ID0gKGRvdWJsZSkoKGludDMyX3QpKHR3b24yNCp6KSk7Ci0JCWlxW2p6XSA9IChpbnQzMl90KSh6LXR3bzI0KmZ3KTsKLQkJanogKz0gMTsgcTAgKz0gMjQ7Ci0JCWlxW2p6XSA9IChpbnQzMl90KSBmdzsKLQkgICAgfSBlbHNlIGlxW2p6XSA9IChpbnQzMl90KSB6IDsKLQl9Ci0KLSAgICAvKiBjb252ZXJ0IGludGVnZXIgImJpdCIgY2h1bmsgdG8gZmxvYXRpbmctcG9pbnQgdmFsdWUgKi8KLQlmdyA9IHNjYWxibihvbmUscTApOwotCWZvcihpPWp6O2k+PTA7aS0tKSB7Ci0JICAgIHFbaV0gPSBmdyooZG91YmxlKWlxW2ldOyBmdyo9dHdvbjI0OwotCX0KLQotICAgIC8qIGNvbXB1dGUgUElvMlswLC4uLixqcF0qcVtqeiwuLi4sMF0gKi8KLQlmb3IoaT1qejtpPj0wO2ktLSkgewotCSAgICBmb3IoZnc9MC4wLGs9MDtrPD1qcCYmazw9anotaTtrKyspIGZ3ICs9IFBJbzJba10qcVtpK2tdOwotCSAgICBmcVtqei1pXSA9IGZ3OwotCX0KLQotICAgIC8qIGNvbXByZXNzIGZxW10gaW50byB5W10gKi8KLQlzd2l0Y2gocHJlYykgewotCSAgICBjYXNlIDA6Ci0JCWZ3ID0gMC4wOwotCQlmb3IgKGk9ano7aT49MDtpLS0pIGZ3ICs9IGZxW2ldOwotCQl5WzBdID0gKGloPT0wKT8gZnc6IC1mdzsgCi0JCWJyZWFrOwotCSAgICBjYXNlIDE6Ci0JICAgIGNhc2UgMjoKLQkJZncgPSAwLjA7Ci0JCWZvciAoaT1qejtpPj0wO2ktLSkgZncgKz0gZnFbaV07IAotCQl5WzBdID0gKGloPT0wKT8gZnc6IC1mdzsgCi0JCWZ3ID0gZnFbMF0tZnc7Ci0JCWZvciAoaT0xO2k8PWp6O2krKykgZncgKz0gZnFbaV07Ci0JCXlbMV0gPSAoaWg9PTApPyBmdzogLWZ3OyAKLQkJYnJlYWs7Ci0JICAgIGNhc2UgMzoJLyogcGFpbmZ1bCAqLwotCQlmb3IgKGk9ano7aT4wO2ktLSkgewotCQkgICAgZncgICAgICA9IGZxW2ktMV0rZnFbaV07IAotCQkgICAgZnFbaV0gICs9IGZxW2ktMV0tZnc7Ci0JCSAgICBmcVtpLTFdID0gZnc7Ci0JCX0KLQkJZm9yIChpPWp6O2k+MTtpLS0pIHsKLQkJICAgIGZ3ICAgICAgPSBmcVtpLTFdK2ZxW2ldOyAKLQkJICAgIGZxW2ldICArPSBmcVtpLTFdLWZ3OwotCQkgICAgZnFbaS0xXSA9IGZ3OwotCQl9Ci0JCWZvciAoZnc9MC4wLGk9ano7aT49MjtpLS0pIGZ3ICs9IGZxW2ldOyAKLQkJaWYoaWg9PTApIHsKLQkJICAgIHlbMF0gPSAgZnFbMF07IHlbMV0gPSAgZnFbMV07IHlbMl0gPSAgZnc7Ci0JCX0gZWxzZSB7Ci0JCSAgICB5WzBdID0gLWZxWzBdOyB5WzFdID0gLWZxWzFdOyB5WzJdID0gLWZ3OwotCQl9Ci0JfQotCXJldHVybiBuJjc7Ci19CmRpZmYgLS1naXQgYS9saWJtL3NyYy9rX3JlbV9waW8yZi5jIGIvbGlibS9zcmMva19yZW1fcGlvMmYuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzVjMjhmNS4uMDAwMDAwMAotLS0gYS9saWJtL3NyYy9rX3JlbV9waW8yZi5jCisrKyAvZGV2L251bGwKQEAgLTEsMTk3ICswLDAgQEAKLS8qIGtfcmVtX3BpbzJmLmMgLS0gZmxvYXQgdmVyc2lvbiBvZiBrX3JlbV9waW8yLmMKLSAqIENvbnZlcnNpb24gdG8gZmxvYXQgYnkgSWFuIExhbmNlIFRheWxvciwgQ3lnbnVzIFN1cHBvcnQsIGlhbkBjeWdudXMuY29tLgotICovCi0KLS8qCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBDb3B5cmlnaHQgKEMpIDE5OTMgYnkgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIERldmVsb3BlZCBhdCBTdW5Qcm8sIGEgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBidXNpbmVzcy4KLSAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKLSAqIHNvZnR3YXJlIGlzIGZyZWVseSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoaXMgbm90aWNlCi0gKiBpcyBwcmVzZXJ2ZWQuCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKi8KLQotI2lmbmRlZiBsaW50Ci1zdGF0aWMgY2hhciByY3NpZFtdID0gIiRGcmVlQlNEOiBzcmMvbGliL21zdW4vc3JjL2tfcmVtX3BpbzJmLmMsdiAxLjggMjAwNS8xMC8xMSAwNzo1NjowNSBiZGUgRXhwICQiOwotI2VuZGlmCi0KLSNpbmNsdWRlICJtYXRoLmgiCi0jaW5jbHVkZSAibWF0aF9wcml2YXRlLmgiCi0KLS8qIEluIHRoZSBmbG9hdCB2ZXJzaW9uLCB0aGUgaW5wdXQgcGFyYW1ldGVyIHggY29udGFpbnMgOCBiaXQKLSAgIGludGVnZXJzLCBub3QgMjQgYml0IGludGVnZXJzLiAgMTEzIGJpdCBwcmVjaXNpb24gaXMgbm90IHN1cHBvcnRlZC4gICovCi0KLXN0YXRpYyBjb25zdCBpbnQgaW5pdF9qa1tdID0gezQsNyw5fTsgLyogaW5pdGlhbCB2YWx1ZSBmb3IgamsgKi8KLQotc3RhdGljIGNvbnN0IGZsb2F0IFBJbzJbXSA9IHsKLSAgMS41NzAzMTI1MDAwZSswMCwgLyogMHgzZmM5MDAwMCAqLwotICA0LjU3NzYzNjcxODhlLTA0LCAvKiAweDM5ZjAwMDAwICovCi0gIDIuNTk4NzYyNTEyMmUtMDUsIC8qIDB4MzdkYTAwMDAgKi8KLSAgNy41NDM3MTI4NTQ0ZS0wOCwgLyogMHgzM2EyMDAwMCAqLwotICA2LjAwMjY2NTAzMTdlLTExLCAvKiAweDJlODQwMDAwICovCi0gIDcuMzg5NjQ0NDUxOWUtMTMsIC8qIDB4MmI1MDAwMDAgKi8KLSAgNS4zODQ1ODE2Njk0ZS0xNSwgLyogMHgyN2MyMDAwMCAqLwotICA1LjYzNzg1MTI5NjllLTE4LCAvKiAweDIyZDAwMDAwICovCi0gIDguMzAwOTIyODgzMWUtMjAsIC8qIDB4MWZjNDAwMDAgKi8KLSAgMy4yNzU2MzUyMjU3ZS0yMiwgLyogMHgxYmM2MDAwMCAqLwotICA2LjMzMzEwMTU2NDllLTI1LCAvKiAweDE3NDQwMDAwICovCi19OwotCi1zdGF0aWMgY29uc3QgZmxvYXQKLXplcm8gICA9IDAuMCwKLW9uZSAgICA9IDEuMCwKLXR3bzggICA9ICAyLjU2MDAwMDAwMDBlKzAyLCAvKiAweDQzODAwMDAwICovCi10d29uOCAgPSAgMy45MDYyNTAwMDAwZS0wMzsgLyogMHgzYjgwMDAwMCAqLwotCi0JaW50IF9fa2VybmVsX3JlbV9waW8yZihmbG9hdCAqeCwgZmxvYXQgKnksIGludCBlMCwgaW50IG54LCBpbnQgcHJlYywgY29uc3QgaW50MzJfdCAqaXBpbzIpCi17Ci0JaW50MzJfdCBqeixqeCxqdixqcCxqayxjYXJyeSxuLGlxWzIwXSxpLGosayxtLHEwLGloOwotCWZsb2F0IHosZncsZlsyMF0sZnFbMjBdLHFbMjBdOwotCi0gICAgLyogaW5pdGlhbGl6ZSBqayovCi0JamsgPSBpbml0X2prW3ByZWNdOwotCWpwID0gams7Ci0KLSAgICAvKiBkZXRlcm1pbmUgangsanYscTAsIG5vdGUgdGhhdCAzPnEwICovCi0JanggPSAgbngtMTsKLQlqdiA9IChlMC0zKS84OyBpZihqdjwwKSBqdj0wOwotCXEwID0gIGUwLTgqKGp2KzEpOwotCi0gICAgLyogc2V0IHVwIGZbMF0gdG8gZltqeCtqa10gd2hlcmUgZltqeCtqa10gPSBpcGlvMltqditqa10gKi8KLQlqID0ganYtang7IG0gPSBqeCtqazsKLQlmb3IoaT0wO2k8PW07aSsrLGorKykgZltpXSA9IChqPDApPyB6ZXJvIDogKGZsb2F0KSBpcGlvMltqXTsKLQotICAgIC8qIGNvbXB1dGUgcVswXSxxWzFdLC4uLnFbamtdICovCi0JZm9yIChpPTA7aTw9ams7aSsrKSB7Ci0JICAgIGZvcihqPTAsZnc9MC4wO2o8PWp4O2orKykgZncgKz0geFtqXSpmW2p4K2ktal07IHFbaV0gPSBmdzsKLQl9Ci0KLQlqeiA9IGprOwotcmVjb21wdXRlOgotICAgIC8qIGRpc3RpbGwgcVtdIGludG8gaXFbXSByZXZlcnNpbmdseSAqLwotCWZvcihpPTAsaj1qeix6PXFbanpdO2o+MDtpKyssai0tKSB7Ci0JICAgIGZ3ICAgID0gIChmbG9hdCkoKGludDMyX3QpKHR3b244KiB6KSk7Ci0JICAgIGlxW2ldID0gIChpbnQzMl90KSh6LXR3bzgqZncpOwotCSAgICB6ICAgICA9ICBxW2otMV0rZnc7Ci0JfQotCi0gICAgLyogY29tcHV0ZSBuICovCi0JeiAgPSBzY2FsYm5mKHoscTApOwkJLyogYWN0dWFsIHZhbHVlIG9mIHogKi8KLQl6IC09IChmbG9hdCk4LjAqZmxvb3JmKHoqKGZsb2F0KTAuMTI1KTsJLyogdHJpbSBvZmYgaW50ZWdlciA+PSA4ICovCi0JbiAgPSAoaW50MzJfdCkgejsKLQl6IC09IChmbG9hdCluOwotCWloID0gMDsKLQlpZihxMD4wKSB7CS8qIG5lZWQgaXFbanotMV0gdG8gZGV0ZXJtaW5lIG4gKi8KLQkgICAgaSAgPSAoaXFbanotMV0+Pig4LXEwKSk7IG4gKz0gaTsKLQkgICAgaXFbanotMV0gLT0gaTw8KDgtcTApOwotCSAgICBpaCA9IGlxW2p6LTFdPj4oNy1xMCk7Ci0JfQotCWVsc2UgaWYocTA9PTApIGloID0gaXFbanotMV0+Pjc7Ci0JZWxzZSBpZih6Pj0oZmxvYXQpMC41KSBpaD0yOwotCi0JaWYoaWg+MCkgewkvKiBxID4gMC41ICovCi0JICAgIG4gKz0gMTsgY2FycnkgPSAwOwotCSAgICBmb3IoaT0wO2k8anogO2krKykgewkvKiBjb21wdXRlIDEtcSAqLwotCQlqID0gaXFbaV07Ci0JCWlmKGNhcnJ5PT0wKSB7Ci0JCSAgICBpZihqIT0wKSB7Ci0JCQljYXJyeSA9IDE7IGlxW2ldID0gMHgxMDAtIGo7Ci0JCSAgICB9Ci0JCX0gZWxzZSAgaXFbaV0gPSAweGZmIC0gajsKLQkgICAgfQotCSAgICBpZihxMD4wKSB7CQkvKiByYXJlIGNhc2U6IGNoYW5jZSBpcyAxIGluIDEyICovCi0JICAgICAgICBzd2l0Y2gocTApIHsKLQkgICAgICAgIGNhc2UgMToKLQkgICAgCSAgIGlxW2p6LTFdICY9IDB4N2Y7IGJyZWFrOwotCSAgICAJY2FzZSAyOgotCSAgICAJICAgaXFbanotMV0gJj0gMHgzZjsgYnJlYWs7Ci0JICAgICAgICB9Ci0JICAgIH0KLQkgICAgaWYoaWg9PTIpIHsKLQkJeiA9IG9uZSAtIHo7Ci0JCWlmKGNhcnJ5IT0wKSB6IC09IHNjYWxibmYob25lLHEwKTsKLQkgICAgfQotCX0KLQotICAgIC8qIGNoZWNrIGlmIHJlY29tcHV0YXRpb24gaXMgbmVlZGVkICovCi0JaWYoej09emVybykgewotCSAgICBqID0gMDsKLQkgICAgZm9yIChpPWp6LTE7aT49ams7aS0tKSBqIHw9IGlxW2ldOwotCSAgICBpZihqPT0wKSB7IC8qIG5lZWQgcmVjb21wdXRhdGlvbiAqLwotCQlmb3Ioaz0xO2lxW2prLWtdPT0wO2srKyk7ICAgLyogayA9IG5vLiBvZiB0ZXJtcyBuZWVkZWQgKi8KLQotCQlmb3IoaT1qeisxO2k8PWp6K2s7aSsrKSB7ICAgLyogYWRkIHFbanorMV0gdG8gcVtqeitrXSAqLwotCQkgICAgZltqeCtpXSA9IChmbG9hdCkgaXBpbzJbanYraV07Ci0JCSAgICBmb3Ioaj0wLGZ3PTAuMDtqPD1qeDtqKyspIGZ3ICs9IHhbal0qZltqeCtpLWpdOwotCQkgICAgcVtpXSA9IGZ3OwotCQl9Ci0JCWp6ICs9IGs7Ci0JCWdvdG8gcmVjb21wdXRlOwotCSAgICB9Ci0JfQotCi0gICAgLyogY2hvcCBvZmYgemVybyB0ZXJtcyAqLwotCWlmKHo9PShmbG9hdCkwLjApIHsKLQkgICAganogLT0gMTsgcTAgLT0gODsKLQkgICAgd2hpbGUoaXFbanpdPT0wKSB7IGp6LS07IHEwLT04O30KLQl9IGVsc2UgeyAvKiBicmVhayB6IGludG8gOC1iaXQgaWYgbmVjZXNzYXJ5ICovCi0JICAgIHogPSBzY2FsYm5mKHosLXEwKTsKLQkgICAgaWYoej49dHdvOCkgewotCQlmdyA9IChmbG9hdCkoKGludDMyX3QpKHR3b244KnopKTsKLQkJaXFbanpdID0gKGludDMyX3QpKHotdHdvOCpmdyk7Ci0JCWp6ICs9IDE7IHEwICs9IDg7Ci0JCWlxW2p6XSA9IChpbnQzMl90KSBmdzsKLQkgICAgfSBlbHNlIGlxW2p6XSA9IChpbnQzMl90KSB6IDsKLQl9Ci0KLSAgICAvKiBjb252ZXJ0IGludGVnZXIgImJpdCIgY2h1bmsgdG8gZmxvYXRpbmctcG9pbnQgdmFsdWUgKi8KLQlmdyA9IHNjYWxibmYob25lLHEwKTsKLQlmb3IoaT1qejtpPj0wO2ktLSkgewotCSAgICBxW2ldID0gZncqKGZsb2F0KWlxW2ldOyBmdyo9dHdvbjg7Ci0JfQotCi0gICAgLyogY29tcHV0ZSBQSW8yWzAsLi4uLGpwXSpxW2p6LC4uLiwwXSAqLwotCWZvcihpPWp6O2k+PTA7aS0tKSB7Ci0JICAgIGZvcihmdz0wLjAsaz0wO2s8PWpwJiZrPD1qei1pO2srKykgZncgKz0gUElvMltrXSpxW2kra107Ci0JICAgIGZxW2p6LWldID0gZnc7Ci0JfQotCi0gICAgLyogY29tcHJlc3MgZnFbXSBpbnRvIHlbXSAqLwotCXN3aXRjaChwcmVjKSB7Ci0JICAgIGNhc2UgMDoKLQkJZncgPSAwLjA7Ci0JCWZvciAoaT1qejtpPj0wO2ktLSkgZncgKz0gZnFbaV07Ci0JCXlbMF0gPSAoaWg9PTApPyBmdzogLWZ3OwotCQlicmVhazsKLQkgICAgY2FzZSAxOgotCSAgICBjYXNlIDI6Ci0JCWZ3ID0gMC4wOwotCQlmb3IgKGk9ano7aT49MDtpLS0pIGZ3ICs9IGZxW2ldOwotCQlmdyA9ICoodm9sYXRpbGUgZmxvYXQgKikmZnc7CS8qIGNsaXAgYW55IGV4dHJhIHByZWNpc2lvbiAqLwotCQl5WzBdID0gKGloPT0wKT8gZnc6IC1mdzsKLQkJZncgPSBmcVswXS1mdzsKLQkJZm9yIChpPTE7aTw9ano7aSsrKSBmdyArPSBmcVtpXTsKLQkJeVsxXSA9IChpaD09MCk/IGZ3OiAtZnc7Ci0JCWJyZWFrOwotCSAgICBjYXNlIDM6CS8qIHBhaW5mdWwgKi8KLQkJZm9yIChpPWp6O2k+MDtpLS0pIHsKLQkJICAgIGZ3ICAgICAgPSBmcVtpLTFdK2ZxW2ldOwotCQkgICAgZnFbaV0gICs9IGZxW2ktMV0tZnc7Ci0JCSAgICBmcVtpLTFdID0gZnc7Ci0JCX0KLQkJZm9yIChpPWp6O2k+MTtpLS0pIHsKLQkJICAgIGZ3ICAgICAgPSBmcVtpLTFdK2ZxW2ldOwotCQkgICAgZnFbaV0gICs9IGZxW2ktMV0tZnc7Ci0JCSAgICBmcVtpLTFdID0gZnc7Ci0JCX0KLQkJZm9yIChmdz0wLjAsaT1qejtpPj0yO2ktLSkgZncgKz0gZnFbaV07Ci0JCWlmKGloPT0wKSB7Ci0JCSAgICB5WzBdID0gIGZxWzBdOyB5WzFdID0gIGZxWzFdOyB5WzJdID0gIGZ3OwotCQl9IGVsc2UgewotCQkgICAgeVswXSA9IC1mcVswXTsgeVsxXSA9IC1mcVsxXTsgeVsyXSA9IC1mdzsKLQkJfQotCX0KLQlyZXR1cm4gbiY3OwotfQpkaWZmIC0tZ2l0IGEvbGlibS9zcmMva19zaW4uYyBiL2xpYm0vc3JjL2tfc2luLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFlMDZhOWQuLjAwMDAwMDAKLS0tIGEvbGlibS9zcmMva19zaW4uYworKysgL2Rldi9udWxsCkBAIC0xLDcwICswLDAgQEAKLQotLyogQCgjKWtfc2luLmMgMS4zIDk1LzAxLzE4ICovCi0vKgotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogQ29weXJpZ2h0IChDKSAxOTkzIGJ5IFN1biBNaWNyb3N5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBEZXZlbG9wZWQgYXQgU3VuU29mdCwgYSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGJ1c2luZXNzLgotICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcwotICogc29mdHdhcmUgaXMgZnJlZWx5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhpcyBub3RpY2UgCi0gKiBpcyBwcmVzZXJ2ZWQuCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKi8KLQotI2lmbmRlZiBsaW50Ci1zdGF0aWMgY2hhciByY3NpZFtdID0gIiRGcmVlQlNEOiBzcmMvbGliL21zdW4vc3JjL2tfc2luLmMsdiAxLjEwIDIwMDUvMTEvMDIgMTM6MDY6NDkgYmRlIEV4cCAkIjsKLSNlbmRpZgotCi0vKiBfX2tlcm5lbF9zaW4oIHgsIHksIGl5KQotICoga2VybmVsIHNpbiBmdW5jdGlvbiBvbiB+Wy1waS80LCBwaS80XSAoZXhjZXB0IG9uIC0wKSwgcGkvNCB+IDAuNzg1NAotICogSW5wdXQgeCBpcyBhc3N1bWVkIHRvIGJlIGJvdW5kZWQgYnkgfnBpLzQgaW4gbWFnbml0dWRlLgotICogSW5wdXQgeSBpcyB0aGUgdGFpbCBvZiB4LgotICogSW5wdXQgaXkgaW5kaWNhdGVzIHdoZXRoZXIgeSBpcyAwLiAoaWYgaXk9MCwgeSBhc3N1bWUgdG8gYmUgMCkuIAotICoKLSAqIEFsZ29yaXRobQotICoJMS4gU2luY2Ugc2luKC14KSA9IC1zaW4oeCksIHdlIG5lZWQgb25seSB0byBjb25zaWRlciBwb3NpdGl2ZSB4LiAKLSAqCTIuIENhbGxlcnMgbXVzdCByZXR1cm4gc2luKC0wKSA9IC0wIHdpdGhvdXQgY2FsbGluZyBoZXJlIHNpbmNlIG91cgotICoJICAgb2RkIHBvbHlub21pYWwgaXMgbm90IGV2YWx1YXRlZCBpbiBhIHdheSB0aGF0IHByZXNlcnZlcyAtMC4KLSAqCSAgIENhbGxlcnMgbWF5IGRvIHRoZSBvcHRpbWl6YXRpb24gc2luKHgpIH4geCBmb3IgdGlueSB4LgotICoJMy4gc2luKHgpIGlzIGFwcHJveGltYXRlZCBieSBhIHBvbHlub21pYWwgb2YgZGVncmVlIDEzIG9uCi0gKgkgICBbMCxwaS80XQotICoJCSAgCSAgICAgICAgIDMgICAgICAgICAgICAxMwotICoJICAgCXNpbih4KSB+IHggKyBTMSp4ICsgLi4uICsgUzYqeAotICoJICAgd2hlcmUKLSAqCQotICogCXxzaW4oeCkgICAgICAgICAyICAgICA0ICAgICA2ICAgICA4ICAgICAxMCAgICAgMTIgIHwgICAgIC01OAotICogCXwtLS0tLSAtICgxK1MxKnggK1MyKnggK1MzKnggK1M0KnggK1M1KnggICtTNip4ICAgKXwgPD0gMgotICogCXwgIHggCQkJCQkgICAgICAgICAgIHwgCi0gKiAKLSAqCTQuIHNpbih4K3kpID0gc2luKHgpICsgc2luJyh4JykqeQotICoJCSAgICB+IHNpbih4KSArICgxLXgqeC8yKSp5Ci0gKgkgICBGb3IgYmV0dGVyIGFjY3VyYWN5LCBsZXQgCi0gKgkJICAgICAzICAgICAgMiAgICAgIDIgICAgICAyICAgICAgMgotICoJCXIgPSB4ICooUzIreCAqKFMzK3ggKihTNCt4ICooUzUreCAqUzYpKSkpCi0gKgkgICB0aGVuICAgICAgICAgICAgICAgICAgIDMgICAgMgotICoJCXNpbih4KSA9IHggKyAoUzEqeCArICh4ICooci15LzIpK3kpKQotICovCi0KLSNpbmNsdWRlICJtYXRoLmgiCi0jaW5jbHVkZSAibWF0aF9wcml2YXRlLmgiCi0KLXN0YXRpYyBjb25zdCBkb3VibGUKLWhhbGYgPSAgNS4wMDAwMDAwMDAwMDAwMDAwMDAwMGUtMDEsIC8qIDB4M0ZFMDAwMDAsIDB4MDAwMDAwMDAgKi8KLVMxICA9IC0xLjY2NjY2NjY2NjY2NjY2MzI0MzQ4ZS0wMSwgLyogMHhCRkM1NTU1NSwgMHg1NTU1NTU0OSAqLwotUzIgID0gIDguMzMzMzMzMzMzMzIyNDg5NDYxMjRlLTAzLCAvKiAweDNGODExMTExLCAweDExMTBGOEE2ICovCi1TMyAgPSAtMS45ODQxMjY5ODI5ODU3OTQ5MzEzNGUtMDQsIC8qIDB4QkYyQTAxQTAsIDB4MTlDMTYxRDUgKi8KLVM0ICA9ICAyLjc1NTczMTM3MDcwNzAwNjc2Nzg5ZS0wNiwgLyogMHgzRUM3MURFMywgMHg1N0IxRkU3RCAqLwotUzUgID0gLTIuNTA1MDc2MDI1MzQwNjg2MzQxOTVlLTA4LCAvKiAweEJFNUFFNUU2LCAweDhBMkI5Q0VCICovCi1TNiAgPSAgMS41ODk2OTA5OTUyMTE1NTAxMDIyMWUtMTA7IC8qIDB4M0RFNUQ5M0EsIDB4NUFDRkQ1N0MgKi8KLQotZG91YmxlCi1fX2tlcm5lbF9zaW4oZG91YmxlIHgsIGRvdWJsZSB5LCBpbnQgaXkpCi17Ci0JZG91YmxlIHoscix2OwotCi0Jegk9ICB4Kng7Ci0Jdgk9ICB6Kng7Ci0Jcgk9ICBTMit6KihTMyt6KihTNCt6KihTNSt6KlM2KSkpOwotCWlmKGl5PT0wKSByZXR1cm4geCt2KihTMSt6KnIpOwotCWVsc2UgICAgICByZXR1cm4geC0oKHoqKGhhbGYqeS12KnIpLXkpLXYqUzEpOwotfQpkaWZmIC0tZ2l0IGEvbGlibS9zcmMva19zaW5mLmMgYi9saWJtL3NyYy9rX3NpbmYuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTQ1ZGM0Mi4uMDAwMDAwMAotLS0gYS9saWJtL3NyYy9rX3NpbmYuYworKysgL2Rldi9udWxsCkBAIC0xLDQ3ICswLDAgQEAKLS8qIGtfc2luZi5jIC0tIGZsb2F0IHZlcnNpb24gb2Yga19zaW4uYwotICogQ29udmVyc2lvbiB0byBmbG9hdCBieSBJYW4gTGFuY2UgVGF5bG9yLCBDeWdudXMgU3VwcG9ydCwgaWFuQGN5Z251cy5jb20uCi0gKiBPcHRpbWl6ZWQgYnkgQnJ1Y2UgRC4gRXZhbnMuCi0gKi8KLQotLyoKLSAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIENvcHlyaWdodCAoQykgMTk5MyBieSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogRGV2ZWxvcGVkIGF0IFN1blBybywgYSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGJ1c2luZXNzLgotICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcwotICogc29mdHdhcmUgaXMgZnJlZWx5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhpcyBub3RpY2UKLSAqIGlzIHByZXNlcnZlZC4KLSAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqLwotCi0jaWZuZGVmIElOTElORV9LRVJORUxfU0lOREYKLSNpZm5kZWYgbGludAotc3RhdGljIGNoYXIgcmNzaWRbXSA9ICIkRnJlZUJTRDogc3JjL2xpYi9tc3VuL3NyYy9rX3NpbmYuYyx2IDEuMTMgMjAwNS8xMS8zMCAxMTo1MToxNyBiZGUgRXhwICQiOwotI2VuZGlmCi0jZW5kaWYKLQotI2luY2x1ZGUgIm1hdGguaCIKLSNpbmNsdWRlICJtYXRoX3ByaXZhdGUuaCIKLQotLyogfHNpbih4KS94IC0gcyh4KXwgPCAyKiotMzcuNSAoflstNC44OWUtMTIsIDQuODI0ZS0xMl0pLiAqLwotc3RhdGljIGNvbnN0IGRvdWJsZQotUzEgPSAtMHgxNTU1NTU1NGNiYWM3Ny4wcC01NSwJLyogLTAuMTY2NjY2NjY2NDE2MjY1MjM1NTk1ICovCi1TMiA9ICAweDExMTExMDg5NmVmYmIyLjBwLTU5LAkvKiAgMC4wMDgzMzMzMjkzODU4ODk0NjMxNzU2ICovCi1TMyA9IC0weDFhMDBmOWUyY2FlNzc0LjBwLTY1LAkvKiAtMC4wMDAxOTgzOTMzNDgzNjA5NjYzMTczNDcgKi8KLVM0ID0gIDB4MTZjZDg3OGMzYjQ2YTcuMHAtNzE7CS8qICAwLjAwMDAwMjcxODMxMTQ5Mzk4OTgyMTkwNjQgKi8KLQotI2lmZGVmIElOTElORV9LRVJORUxfU0lOREYKLWV4dGVybiBpbmxpbmUKLSNlbmRpZgotZmxvYXQKLV9fa2VybmVsX3NpbmRmKGRvdWJsZSB4KQotewotCWRvdWJsZSByLCBzLCB3LCB6OwotCi0JLyogVHJ5IHRvIG9wdGltaXplIGZvciBwYXJhbGxlbCBldmFsdWF0aW9uIGFzIGluIGtfdGFuZi5jLiAqLwotCXogPSB4Kng7Ci0JdyA9IHoqejsKLQlyID0gUzMreipTNDsKLQlzID0geip4OwotCXJldHVybiAoeCArIHMqKFMxK3oqUzIpKSArIHMqdypyOwotfQpkaWZmIC0tZ2l0IGEvbGlibS9zcmMva190YW4uYyBiL2xpYm0vc3JjL2tfdGFuLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgyZmUxNTUuLjAwMDAwMDAKLS0tIGEvbGlibS9zcmMva190YW4uYworKysgL2Rldi9udWxsCkBAIC0xLDEzMyArMCwwIEBACi0vKiBAKCMpa190YW4uYyAxLjUgMDQvMDQvMjIgU01JICovCi0KLS8qCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBDb3B5cmlnaHQgMjAwNCBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKLSAqIHNvZnR3YXJlIGlzIGZyZWVseSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoaXMgbm90aWNlCi0gKiBpcyBwcmVzZXJ2ZWQuCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKi8KLQotLyogSU5ERU5UIE9GRiAqLwotI2lmbmRlZiBsaW50Ci1zdGF0aWMgY2hhciByY3NpZFtdID0gIiRGcmVlQlNEOiBzcmMvbGliL21zdW4vc3JjL2tfdGFuLmMsdiAxLjEyIDIwMDUvMTEvMDIgMTQ6MDE6NDUgYmRlIEV4cCAkIjsKLSNlbmRpZgotCi0vKiBfX2tlcm5lbF90YW4oIHgsIHksIGsgKQotICoga2VybmVsIHRhbiBmdW5jdGlvbiBvbiB+Wy1waS80LCBwaS80XSAoZXhjZXB0IG9uIC0wKSwgcGkvNCB+IDAuNzg1NAotICogSW5wdXQgeCBpcyBhc3N1bWVkIHRvIGJlIGJvdW5kZWQgYnkgfnBpLzQgaW4gbWFnbml0dWRlLgotICogSW5wdXQgeSBpcyB0aGUgdGFpbCBvZiB4LgotICogSW5wdXQgayBpbmRpY2F0ZXMgd2hldGhlciB0YW4gKGlmIGsgPSAxKSBvciAtMS90YW4gKGlmIGsgPSAtMSkgaXMgcmV0dXJuZWQuCi0gKgotICogQWxnb3JpdGhtCi0gKgkxLiBTaW5jZSB0YW4oLXgpID0gLXRhbih4KSwgd2UgbmVlZCBvbmx5IHRvIGNvbnNpZGVyIHBvc2l0aXZlIHguCi0gKgkyLiBDYWxsZXJzIG11c3QgcmV0dXJuIHRhbigtMCkgPSAtMCB3aXRob3V0IGNhbGxpbmcgaGVyZSBzaW5jZSBvdXIKLSAqCSAgIG9kZCBwb2x5bm9taWFsIGlzIG5vdCBldmFsdWF0ZWQgaW4gYSB3YXkgdGhhdCBwcmVzZXJ2ZXMgLTAuCi0gKgkgICBDYWxsZXJzIG1heSBkbyB0aGUgb3B0aW1pemF0aW9uIHRhbih4KSB+IHggZm9yIHRpbnkgeC4KLSAqCTMuIHRhbih4KSBpcyBhcHByb3hpbWF0ZWQgYnkgYSBvZGQgcG9seW5vbWlhbCBvZiBkZWdyZWUgMjcgb24KLSAqCSAgIFswLDAuNjc0MzRdCi0gKgkJICAJICAgICAgICAgMyAgICAgICAgICAgICAyNwotICoJICAgCXRhbih4KSB+IHggKyBUMSp4ICsgLi4uICsgVDEzKngKLSAqCSAgIHdoZXJlCi0gKgotICogCSAgICAgICAgfHRhbih4KSAgICAgICAgIDIgICAgIDQgICAgICAgICAgICAyNiAgIHwgICAgIC01OS4yCi0gKiAJICAgICAgICB8LS0tLS0gLSAoMStUMSp4ICtUMip4ICsuLi4uICtUMTMqeCAgICApfCA8PSAyCi0gKiAJICAgICAgICB8ICB4IAkJCQkJfAotICoKLSAqCSAgIE5vdGU6IHRhbih4K3kpID0gdGFuKHgpICsgdGFuJyh4KSp5Ci0gKgkJICAgICAgICAgIH4gdGFuKHgpICsgKDEreCp4KSp5Ci0gKgkgICBUaGVyZWZvcmUsIGZvciBiZXR0ZXIgYWNjdXJhY3kgaW4gY29tcHV0aW5nIHRhbih4K3kpLCBsZXQKLSAqCQkgICAgIDMgICAgICAyICAgICAgMiAgICAgICAyICAgICAgIDIKLSAqCQlyID0geCAqKFQyK3ggKihUMyt4ICooLi4uK3ggKihUMTIreCAqVDEzKSkpKQotICoJICAgdGhlbgotICoJCSAJCSAgICAzICAgIDIKLSAqCQl0YW4oeCt5KSA9IHggKyAoVDEqeCArICh4ICoocit5KSt5KSkKLSAqCi0gKiAgICAgIDQuIEZvciB4IGluIFswLjY3NDM0LHBpLzRdLCAgbGV0IHkgPSBwaS80IC0geCwgdGhlbgotICoJCXRhbih4KSA9IHRhbihwaS80LXkpID0gKDEtdGFuKHkpKS8oMSt0YW4oeSkpCi0gKgkJICAgICAgID0gMSAtIDIqKHRhbih5KSAtICh0YW4oeSleMikvKDErdGFuKHkpKSkKLSAqLwotCi0jaW5jbHVkZSAibWF0aC5oIgotI2luY2x1ZGUgIm1hdGhfcHJpdmF0ZS5oIgotc3RhdGljIGNvbnN0IGRvdWJsZSB4eHhbXSA9IHsKLQkJIDMuMzMzMzMzMzMzMzMzMzQwOTE5ODZlLTAxLAkvKiAzRkQ1NTU1NSwgNTU1NTU1NjMgKi8KLQkJIDEuMzMzMzMzMzMzMzMyMDEyNDI2OTllLTAxLAkvKiAzRkMxMTExMSwgMTExMEZFN0EgKi8KLQkJIDUuMzk2ODI1Mzk3NjIyNjA1MjEzNzdlLTAyLAkvKiAzRkFCQTFCQSwgMUJCMzQxRkUgKi8KLQkJIDIuMTg2OTQ4ODI5NDg1OTU0MjQ1OTllLTAyLAkvKiAzRjk2NjRGNCwgODQwNkQ2MzcgKi8KLQkJIDguODYzMjM5ODIzNTk5MzAwMDU3MzdlLTAzLAkvKiAzRjgyMjZFMywgRTk2RTg0OTMgKi8KLQkJIDMuNTkyMDc5MTA3NTkxMzEyMzUzNTZlLTAzLAkvKiAzRjZENkQyMiwgQzk1NjAzMjggKi8KLQkJIDEuNDU2MjA5NDU0MzI1MjkwMjU1MTZlLTAzLAkvKiAzRjU3REJDOCwgRkVFMDgzMTUgKi8KLQkJIDUuODgwNDEyNDA4MjAyNjQwOTY4NzRlLTA0LAkvKiAzRjQzNDREOCwgRjJGMjY1MDEgKi8KLQkJIDIuNDY0NjMxMzQ4MTg0Njk5MDY4MTJlLTA0LAkvKiAzRjMwMjZGNywgMUE4RDEwNjggKi8KLQkJIDcuODE3OTQ0NDI5Mzk1NTcwOTIzMDBlLTA1LAkvKiAzRjE0N0U4OCwgQTAzNzkyQTYgKi8KLQkJIDcuMTQwNzI0OTEzODI2MDgxOTAzMDVlLTA1LAkvKiAzRjEyQjgwRiwgMzJGMEE3RTkgKi8KLQkJLTEuODU1ODYzNzQ4NTUyNzU0NTY2NTRlLTA1LAkvKiBCRUYzNzVDQiwgREI2MDUzNzMgKi8KLQkJIDIuNTkwNzMwNTE4NjM2MzM3MTI4ODRlLTA1LAkvKiAzRUZCMkE3MCwgNzRCRjdBRDQgKi8KLS8qIG9uZSAqLwkgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMGUrMDAsCS8qIDNGRjAwMDAwLCAwMDAwMDAwMCAqLwotLyogcGlvNCAqLwkgNy44NTM5ODE2MzM5NzQ0ODI3ODk5OWUtMDEsCS8qIDNGRTkyMUZCLCA1NDQ0MkQxOCAqLwotLyogcGlvNGxvICovCSAzLjA2MTYxNjk5Nzg2ODM4MzAxNzkzZS0xNwkvKiAzQzgxQTYyNiwgMzMxNDVDMDcgKi8KLX07Ci0jZGVmaW5lCW9uZQl4eHhbMTNdCi0jZGVmaW5lCXBpbzQJeHh4WzE0XQotI2RlZmluZQlwaW80bG8JeHh4WzE1XQotI2RlZmluZQlUCXh4eAotLyogSU5ERU5UIE9OICovCi0KLWRvdWJsZQotX19rZXJuZWxfdGFuKGRvdWJsZSB4LCBkb3VibGUgeSwgaW50IGl5KSB7Ci0JZG91YmxlIHosIHIsIHYsIHcsIHM7Ci0JaW50MzJfdCBpeCwgaHg7Ci0KLQlHRVRfSElHSF9XT1JEKGh4LHgpOwotCWl4ID0gaHggJiAweDdmZmZmZmZmOwkJCS8qIGhpZ2ggd29yZCBvZiB8eHwgKi8KLQlpZiAoaXggPj0gMHgzRkU1OTQyOCkgewkvKiB8eHwgPj0gMC42NzQ0ICovCi0JCWlmIChoeCA8IDApIHsKLQkJCXggPSAteDsKLQkJCXkgPSAteTsKLQkJfQotCQl6ID0gcGlvNCAtIHg7Ci0JCXcgPSBwaW80bG8gLSB5OwotCQl4ID0geiArIHc7Ci0JCXkgPSAwLjA7Ci0JfQotCXogPSB4ICogeDsKLQl3ID0geiAqIHo7Ci0JLyoKLQkgKiBCcmVhayB4XjUqKFRbMV0reF4yKlRbMl0rLi4uKSBpbnRvCi0JICogeF41KFRbMV0reF40KlRbM10rLi4uK3heMjAqVFsxMV0pICsKLQkgKiB4XjUoeF4yKihUWzJdK3heNCpUWzRdKy4uLit4XjIyKltUMTJdKSkKLQkgKi8KLQlyID0gVFsxXSArIHcgKiAoVFszXSArIHcgKiAoVFs1XSArIHcgKiAoVFs3XSArIHcgKiAoVFs5XSArCi0JCXcgKiBUWzExXSkpKSk7Ci0JdiA9IHogKiAoVFsyXSArIHcgKiAoVFs0XSArIHcgKiAoVFs2XSArIHcgKiAoVFs4XSArIHcgKiAoVFsxMF0gKwotCQl3ICogVFsxMl0pKSkpKTsKLQlzID0geiAqIHg7Ci0JciA9IHkgKyB6ICogKHMgKiAociArIHYpICsgeSk7Ci0JciArPSBUWzBdICogczsKLQl3ID0geCArIHI7Ci0JaWYgKGl4ID49IDB4M0ZFNTk0MjgpIHsKLQkJdiA9IChkb3VibGUpIGl5OwotCQlyZXR1cm4gKGRvdWJsZSkgKDEgLSAoKGh4ID4+IDMwKSAmIDIpKSAqCi0JCQkodiAtIDIuMCAqICh4IC0gKHcgKiB3IC8gKHcgKyB2KSAtIHIpKSk7Ci0JfQotCWlmIChpeSA9PSAxKQotCQlyZXR1cm4gdzsKLQllbHNlIHsKLQkJLyoKLQkJICogaWYgYWxsb3cgZXJyb3IgdXAgdG8gMiB1bHAsIHNpbXBseSByZXR1cm4KLQkJICogLTEuMCAvICh4K3IpIGhlcmUKLQkJICovCi0JCS8qIGNvbXB1dGUgLTEuMCAvICh4K3IpIGFjY3VyYXRlbHkgKi8KLQkJZG91YmxlIGEsIHQ7Ci0JCXogPSB3OwotCQlTRVRfTE9XX1dPUkQoeiwwKTsKLQkJdiA9IHIgLSAoeiAtIHgpOwkvKiB6K3YgPSByK3ggKi8KLQkJdCA9IGEgPSAtMS4wIC8gdzsJLyogYSA9IC0xLjAvdyAqLwotCQlTRVRfTE9XX1dPUkQodCwwKTsKLQkJcyA9IDEuMCArIHQgKiB6OwotCQlyZXR1cm4gdCArIGEgKiAocyArIHQgKiB2KTsKLQl9Ci19CmRpZmYgLS1naXQgYS9saWJtL3NyYy9rX3RhbmYuYyBiL2xpYm0vc3JjL2tfdGFuZi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NTc0MDMwLi4wMDAwMDAwCi0tLSBhL2xpYm0vc3JjL2tfdGFuZi5jCisrKyAvZGV2L251bGwKQEAgLTEsNjcgKzAsMCBAQAotLyoga190YW5mLmMgLS0gZmxvYXQgdmVyc2lvbiBvZiBrX3Rhbi5jCi0gKiBDb252ZXJzaW9uIHRvIGZsb2F0IGJ5IElhbiBMYW5jZSBUYXlsb3IsIEN5Z251cyBTdXBwb3J0LCBpYW5AY3lnbnVzLmNvbS4KLSAqIE9wdGltaXplZCBieSBCcnVjZSBELiBFdmFucy4KLSAqLwotCi0vKgotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogQ29weXJpZ2h0IDIwMDQgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCi0gKiBzb2Z0d2FyZSBpcyBmcmVlbHkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGlzIG5vdGljZQotICogaXMgcHJlc2VydmVkLgotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICovCi0KLSNpZm5kZWYgSU5MSU5FX0tFUk5FTF9UQU5ERgotI2lmbmRlZiBsaW50Ci1zdGF0aWMgY2hhciByY3NpZFtdID0gIiRGcmVlQlNEOiBzcmMvbGliL21zdW4vc3JjL2tfdGFuZi5jLHYgMS4yMCAyMDA1LzExLzI4IDExOjQ2OjIwIGJkZSBFeHAgJCI7Ci0jZW5kaWYKLSNlbmRpZgotCi0jaW5jbHVkZSAibWF0aC5oIgotI2luY2x1ZGUgIm1hdGhfcHJpdmF0ZS5oIgotCi0vKiB8dGFuKHgpL3ggLSB0KHgpfCA8IDIqKi0yNS41ICh+Wy0yZS0wOCwgMmUtMDhdKS4gKi8KLXN0YXRpYyBjb25zdCBkb3VibGUKLVRbXSA9ICB7Ci0gIDB4MTU1NTRkMzQxOGM5OWYuMHAtNTQsCS8qIDAuMzMzMzMxMzk1MDMwNzkxMzk5NzU4ICovCi0gIDB4MTExMmZkMzg5OTlmNzIuMHAtNTUsCS8qIDAuMTMzMzkyMDAyNzEyOTc2NzQyNzE4ICovCi0gIDB4MWI1NGM5MWQ4NjVhZmUuMHAtNTcsCS8qIDAuMDUzMzgxMjM3ODQ0NTY3MDM5MzUyMyAqLwotICAweDE5MWRmMzkwOGMzM2NlLjBwLTU4LAkvKiAwLjAyNDUyODMxODExNjY1NDcyNzg4NzMgKi8KLSAgMHgxODVkYWRmY2VjZjQ0ZS4wcC02MSwJLyogMC4wMDI5NzQzNTc0MzM1OTk2NzMwNDkyNyAqLwotICAweDEzNjJiOWJmOTcxYmNkLjBwLTU5LAkvKiAwLjAwOTQ2NTY0Nzg0OTQzNjczMTY2NzI4ICovCi19OwotCi0jaWZkZWYgSU5MSU5FX0tFUk5FTF9UQU5ERgotZXh0ZXJuIGlubGluZQotI2VuZGlmCi1mbG9hdAotX19rZXJuZWxfdGFuZGYoZG91YmxlIHgsIGludCBpeSkKLXsKLQlkb3VibGUgeixyLHcscyx0LHU7Ci0KLQl6CT0gIHgqeDsKLQkvKgotCSAqIFNwbGl0IHVwIHRoZSBwb2x5bm9taWFsIGludG8gc21hbGwgaW5kZXBlbmRlbnQgdGVybXMgdG8gZ2l2ZQotCSAqIG9wcG9ydHVuaXRpZXMgZm9yIHBhcmFsbGVsIGV2YWx1YXRpb24uICBUaGUgY2hvc2VuIHNwbGl0dGluZyBpcwotCSAqIG1pY3JvLW9wdGltaXplZCBmb3IgQXRobG9ucyAoWFAsIFg2NCkuICBJdCBjb3N0cyAyIG11bHRpcGxpY2F0aW9ucwotCSAqIHJlbGF0aXZlIHRvIEhvcm5lcidzIG1ldGhvZCBvbiBzZXF1ZW50aWFsIG1hY2hpbmVzLgotCSAqCi0JICogV2UgYWRkIHRoZSBzbWFsbCB0ZXJtcyBmcm9tIGxvd2VzdCBkZWdyZWUgdXAgZm9yIGVmZmljaWVuY3kgb24KLQkgKiBub24tc2VxdWVudGlhbCBtYWNoaW5lcyAodGhlIGxvd2VzdCBkZWdyZWUgdGVybXMgdGVuZCB0byBiZSByZWFkeQotCSAqIGVhcmxpZXIpLiAgQXBhcnQgZnJvbSB0aGlzLCB3ZSBkb24ndCBjYXJlIGFib3V0IG9yZGVyIG9mCi0JICogb3BlcmF0aW9ucywgYW5kIGRvbid0IG5lZWQgdG8gdG8gY2FyZSBzaW5jZSB3ZSBoYXZlIHByZWNpc2lvbiB0bwotCSAqIHNwYXJlLiAgSG93ZXZlciwgdGhlIGNob3NlbiBzcGxpdHRpbmcgaXMgZ29vZCBmb3IgYWNjdXJhY3kgdG9vLAotCSAqIGFuZCB3b3VsZCBnaXZlIHJlc3VsdHMgYXMgYWNjdXJhdGUgYXMgSG9ybmVyJ3MgbWV0aG9kIGlmIHRoZQotCSAqIHNtYWxsIHRlcm1zIHdlcmUgYWRkZWQgZnJvbSBoaWdoZXN0IGRlZ3JlZSBkb3duLgotCSAqLwotCXIgPSBUWzRdK3oqVFs1XTsKLQl0ID0gVFsyXSt6KlRbM107Ci0JdyA9IHoqejsKLQlzID0geip4OwotCXUgPSBUWzBdK3oqVFsxXTsKLQlyID0gKHgrcyp1KSsocyp3KSoodCt3KnIpOwotCWlmKGl5PT0xKSByZXR1cm4gcjsKLQllbHNlIHJldHVybiAtMS4wL3I7Ci19CmRpZmYgLS1naXQgYS9saWJtL3NyYy9tYXRoX3ByaXZhdGUuaCBiL2xpYm0vc3JjL21hdGhfcHJpdmF0ZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZjZlMDg4Li4wMDAwMDAwCi0tLSBhL2xpYm0vc3JjL21hdGhfcHJpdmF0ZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMjczICswLDAgQEAKLS8qCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBDb3B5cmlnaHQgKEMpIDE5OTMgYnkgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIERldmVsb3BlZCBhdCBTdW5Qcm8sIGEgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBidXNpbmVzcy4KLSAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKLSAqIHNvZnR3YXJlIGlzIGZyZWVseSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoaXMgbm90aWNlCi0gKiBpcyBwcmVzZXJ2ZWQuCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKi8KLQotLyoKLSAqIGZyb206IEAoIylmZGxpYm0uaCA1LjEgOTMvMDkvMjQKLSAqICRGcmVlQlNEOiBzcmMvbGliL21zdW4vc3JjL21hdGhfcHJpdmF0ZS5oLHYgMS4yMCAyMDA1LzExLzI4IDA0OjU4OjU3IGJkZSBFeHAgJAotICovCi0KLSNpZm5kZWYgX01BVEhfUFJJVkFURV9IXwotI2RlZmluZQlfTUFUSF9QUklWQVRFX0hfCi0KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpbmNsdWRlIDxlbmRpYW4uaD4KLQotLyoKLSAqIFRoZSBvcmlnaW5hbCBmZGxpYm0gY29kZSB1c2VkIHN0YXRlbWVudHMgbGlrZToKLSAqCW4wID0gKCgqKGludCopJm9uZSk+PjI5KV4xOwkJKiBpbmRleCBvZiBoaWdoIHdvcmQgKgotICoJaXgwID0gKihuMCsoaW50KikmeCk7CQkJKiBoaWdoIHdvcmQgb2YgeCAqCi0gKglpeDEgPSAqKCgxLW4wKSsoaW50KikmeCk7CQkqIGxvdyB3b3JkIG9mIHggKgotICogdG8gZGlnIHR3byAzMiBiaXQgd29yZHMgb3V0IG9mIHRoZSA2NCBiaXQgSUVFRSBmbG9hdGluZyBwb2ludAotICogdmFsdWUuICBUaGF0IGlzIG5vbi1BTlNJLCBhbmQsIG1vcmVvdmVyLCB0aGUgZ2NjIGluc3RydWN0aW9uCi0gKiBzY2hlZHVsZXIgZ2V0cyBpdCB3cm9uZy4gIFdlIGluc3RlYWQgdXNlIHRoZSBmb2xsb3dpbmcgbWFjcm9zLgotICogVW5saWtlIHRoZSBvcmlnaW5hbCBjb2RlLCB3ZSBkZXRlcm1pbmUgdGhlIGVuZGlhbm5lc3MgYXQgY29tcGlsZQotICogdGltZSwgbm90IGF0IHJ1biB0aW1lOyBJIGRvbid0IHNlZSBtdWNoIGJlbmVmaXQgdG8gc2VsZWN0aW5nCi0gKiBlbmRpYW5uZXNzIGF0IHJ1biB0aW1lLgotICovCi0KLS8qCi0gKiBBIHVuaW9uIHdoaWNoIHBlcm1pdHMgdXMgdG8gY29udmVydCBiZXR3ZWVuIGEgZG91YmxlIGFuZCB0d28gMzIgYml0Ci0gKiBpbnRzLgotICovCi0KLSNpZiAoX19CWVRFX09SREVSID09IF9fQklHX0VORElBTikgfHwgKGRlZmluZWQoX19hcm1fXykgJiYgIWRlZmluZWQoX19WRlBfRlBfXykpCi0KLXR5cGVkZWYgdW5pb24KLXsKLSAgZG91YmxlIHZhbHVlOwotICBzdHJ1Y3QKLSAgewotICAgIHVfaW50MzJfdCBtc3c7Ci0gICAgdV9pbnQzMl90IGxzdzsKLSAgfSBwYXJ0czsKLX0gaWVlZV9kb3VibGVfc2hhcGVfdHlwZTsKLQotI2VuZGlmCi0KLSNpZiBfX0JZVEVfT1JERVIgPT0gX19MSVRUTEVfRU5ESUFOICAmJiAhKGRlZmluZWQoX19hcm1fXykgJiYgIWRlZmluZWQoX19WRlBfRlBfXykpCi0KLXR5cGVkZWYgdW5pb24KLXsKLSAgZG91YmxlIHZhbHVlOwotICBzdHJ1Y3QKLSAgewotICAgIHVfaW50MzJfdCBsc3c7Ci0gICAgdV9pbnQzMl90IG1zdzsKLSAgfSBwYXJ0czsKLX0gaWVlZV9kb3VibGVfc2hhcGVfdHlwZTsKLQotI2VuZGlmCi0KLS8qIEdldCB0d28gMzIgYml0IGludHMgZnJvbSBhIGRvdWJsZS4gICovCi0KLSNkZWZpbmUgRVhUUkFDVF9XT1JEUyhpeDAsaXgxLGQpCQkJCVwKLWRvIHsJCQkJCQkJCVwKLSAgaWVlZV9kb3VibGVfc2hhcGVfdHlwZSBld191OwkJCQkJXAotICBld191LnZhbHVlID0gKGQpOwkJCQkJCVwKLSAgKGl4MCkgPSBld191LnBhcnRzLm1zdzsJCQkJCVwKLSAgKGl4MSkgPSBld191LnBhcnRzLmxzdzsJCQkJCVwKLX0gd2hpbGUgKDApCi0KLS8qIEdldCB0aGUgbW9yZSBzaWduaWZpY2FudCAzMiBiaXQgaW50IGZyb20gYSBkb3VibGUuICAqLwotCi0jZGVmaW5lIEdFVF9ISUdIX1dPUkQoaSxkKQkJCQkJXAotZG8gewkJCQkJCQkJXAotICBpZWVlX2RvdWJsZV9zaGFwZV90eXBlIGdoX3U7CQkJCQlcCi0gIGdoX3UudmFsdWUgPSAoZCk7CQkJCQkJXAotICAoaSkgPSBnaF91LnBhcnRzLm1zdzsJCQkJCQlcCi19IHdoaWxlICgwKQotCi0vKiBHZXQgdGhlIGxlc3Mgc2lnbmlmaWNhbnQgMzIgYml0IGludCBmcm9tIGEgZG91YmxlLiAgKi8KLQotI2RlZmluZSBHRVRfTE9XX1dPUkQoaSxkKQkJCQkJXAotZG8gewkJCQkJCQkJXAotICBpZWVlX2RvdWJsZV9zaGFwZV90eXBlIGdsX3U7CQkJCQlcCi0gIGdsX3UudmFsdWUgPSAoZCk7CQkJCQkJXAotICAoaSkgPSBnbF91LnBhcnRzLmxzdzsJCQkJCQlcCi19IHdoaWxlICgwKQotCi0vKiBTZXQgYSBkb3VibGUgZnJvbSB0d28gMzIgYml0IGludHMuICAqLwotCi0jZGVmaW5lIElOU0VSVF9XT1JEUyhkLGl4MCxpeDEpCQkJCQlcCi1kbyB7CQkJCQkJCQlcCi0gIGllZWVfZG91YmxlX3NoYXBlX3R5cGUgaXdfdTsJCQkJCVwKLSAgaXdfdS5wYXJ0cy5tc3cgPSAoaXgwKTsJCQkJCVwKLSAgaXdfdS5wYXJ0cy5sc3cgPSAoaXgxKTsJCQkJCVwKLSAgKGQpID0gaXdfdS52YWx1ZTsJCQkJCQlcCi19IHdoaWxlICgwKQotCi0vKiBTZXQgdGhlIG1vcmUgc2lnbmlmaWNhbnQgMzIgYml0cyBvZiBhIGRvdWJsZSBmcm9tIGFuIGludC4gICovCi0KLSNkZWZpbmUgU0VUX0hJR0hfV09SRChkLHYpCQkJCQlcCi1kbyB7CQkJCQkJCQlcCi0gIGllZWVfZG91YmxlX3NoYXBlX3R5cGUgc2hfdTsJCQkJCVwKLSAgc2hfdS52YWx1ZSA9IChkKTsJCQkJCQlcCi0gIHNoX3UucGFydHMubXN3ID0gKHYpOwkJCQkJCVwKLSAgKGQpID0gc2hfdS52YWx1ZTsJCQkJCQlcCi19IHdoaWxlICgwKQotCi0vKiBTZXQgdGhlIGxlc3Mgc2lnbmlmaWNhbnQgMzIgYml0cyBvZiBhIGRvdWJsZSBmcm9tIGFuIGludC4gICovCi0KLSNkZWZpbmUgU0VUX0xPV19XT1JEKGQsdikJCQkJCVwKLWRvIHsJCQkJCQkJCVwKLSAgaWVlZV9kb3VibGVfc2hhcGVfdHlwZSBzbF91OwkJCQkJXAotICBzbF91LnZhbHVlID0gKGQpOwkJCQkJCVwKLSAgc2xfdS5wYXJ0cy5sc3cgPSAodik7CQkJCQkJXAotICAoZCkgPSBzbF91LnZhbHVlOwkJCQkJCVwKLX0gd2hpbGUgKDApCi0KLS8qCi0gKiBBIHVuaW9uIHdoaWNoIHBlcm1pdHMgdXMgdG8gY29udmVydCBiZXR3ZWVuIGEgZmxvYXQgYW5kIGEgMzIgYml0Ci0gKiBpbnQuCi0gKi8KLQotdHlwZWRlZiB1bmlvbgotewotICBmbG9hdCB2YWx1ZTsKLSAgLyogRklYTUU6IEFzc3VtZXMgMzIgYml0IGludC4gICovCi0gIHVuc2lnbmVkIGludCB3b3JkOwotfSBpZWVlX2Zsb2F0X3NoYXBlX3R5cGU7Ci0KLS8qIEdldCBhIDMyIGJpdCBpbnQgZnJvbSBhIGZsb2F0LiAgKi8KLQotI2RlZmluZSBHRVRfRkxPQVRfV09SRChpLGQpCQkJCQlcCi1kbyB7CQkJCQkJCQlcCi0gIGllZWVfZmxvYXRfc2hhcGVfdHlwZSBnZl91OwkJCQkJXAotICBnZl91LnZhbHVlID0gKGQpOwkJCQkJCVwKLSAgKGkpID0gZ2ZfdS53b3JkOwkJCQkJCVwKLX0gd2hpbGUgKDApCi0KLS8qIFNldCBhIGZsb2F0IGZyb20gYSAzMiBiaXQgaW50LiAgKi8KLQotI2RlZmluZSBTRVRfRkxPQVRfV09SRChkLGkpCQkJCQlcCi1kbyB7CQkJCQkJCQlcCi0gIGllZWVfZmxvYXRfc2hhcGVfdHlwZSBzZl91OwkJCQkJXAotICBzZl91LndvcmQgPSAoaSk7CQkJCQkJXAotICAoZCkgPSBzZl91LnZhbHVlOwkJCQkJCVwKLX0gd2hpbGUgKDApCi0KLSNpZmRlZiBfQ09NUExFWF9ICi0vKgotICogSW5saW5lIGZ1bmN0aW9ucyB0aGF0IGNhbiBiZSB1c2VkIHRvIGNvbnN0cnVjdCBjb21wbGV4IHZhbHVlcy4KLSAqCi0gKiBUaGUgQzk5IHN0YW5kYXJkIGludGVuZHMgeCtJKnkgdG8gYmUgdXNlZCBmb3IgdGhpcywgYnV0IHgrSSp5IGlzCi0gKiBjdXJyZW50bHkgdW51c2FibGUgaW4gZ2VuZXJhbCBzaW5jZSBnY2MgaW50cm9kdWNlcyBtYW55IG92ZXJmbG93LAotICogdW5kZXJmbG93LCBzaWduIGFuZCBlZmZpY2llbmN5IGJ1Z3MgYnkgcmV3cml0aW5nIEkqeSBhcwotICogKDAuMCtJKSooeSswLjAqSSkgYW5kIGxhYm9yaW91c2x5IGNvbXB1dGluZyB0aGUgZnVsbCBjb21wbGV4IHByb2R1Y3QuCi0gKiBJbiBwYXJ0aWN1bGFyLCBJKkluZiBpcyBjb3JydXB0ZWQgdG8gTmFOK0kqSW5mLCBhbmQgSSotMCBpcyBjb3JydXB0ZWQKLSAqIHRvIC0wLjArSSowLjAuCi0gKi8KLXN0YXRpYyBfX2lubGluZSBmbG9hdCBjb21wbGV4Ci1jcGFja2YoZmxvYXQgeCwgZmxvYXQgeSkKLXsKLQlmbG9hdCBjb21wbGV4IHo7Ci0KLQlfX3JlYWxfXyB6ID0geDsKLQlfX2ltYWdfXyB6ID0geTsKLQlyZXR1cm4gKHopOwotfQotCi1zdGF0aWMgX19pbmxpbmUgZG91YmxlIGNvbXBsZXgKLWNwYWNrKGRvdWJsZSB4LCBkb3VibGUgeSkKLXsKLQlkb3VibGUgY29tcGxleCB6OwotCi0JX19yZWFsX18geiA9IHg7Ci0JX19pbWFnX18geiA9IHk7Ci0JcmV0dXJuICh6KTsKLX0KLQotc3RhdGljIF9faW5saW5lIGxvbmcgZG91YmxlIGNvbXBsZXgKLWNwYWNrbChsb25nIGRvdWJsZSB4LCBsb25nIGRvdWJsZSB5KQotewotCWxvbmcgZG91YmxlIGNvbXBsZXggejsKLQotCV9fcmVhbF9fIHogPSB4OwotCV9faW1hZ19fIHogPSB5OwotCXJldHVybiAoeik7Ci19Ci0jZW5kaWYgLyogX0NPTVBMRVhfSCAqLwotIAotLyoKLSAqIGllZWUgc3R5bGUgZWxlbWVudGFyeSBmdW5jdGlvbnMKLSAqCi0gKiBXZSByZW5hbWUgZnVuY3Rpb25zIGhlcmUgdG8gaW1wcm92ZSBvdGhlciBzb3VyY2VzJyBkaWZmYWJpbGl0eQotICogYWdhaW5zdCBmZGxpYm0uCi0gKi8KLSNkZWZpbmUJX19pZWVlNzU0X3NxcnQJc3FydAotI2RlZmluZQlfX2llZWU3NTRfYWNvcwlhY29zCi0jZGVmaW5lCV9faWVlZTc1NF9hY29zaAlhY29zaAotI2RlZmluZQlfX2llZWU3NTRfbG9nCWxvZwotI2RlZmluZQlfX2llZWU3NTRfYXRhbmgJYXRhbmgKLSNkZWZpbmUJX19pZWVlNzU0X2FzaW4JYXNpbgotI2RlZmluZQlfX2llZWU3NTRfYXRhbjIJYXRhbjIKLSNkZWZpbmUJX19pZWVlNzU0X2V4cAlleHAKLSNkZWZpbmUJX19pZWVlNzU0X2Nvc2gJY29zaAotI2RlZmluZQlfX2llZWU3NTRfZm1vZAlmbW9kCi0jZGVmaW5lCV9faWVlZTc1NF9wb3cJcG93Ci0jZGVmaW5lCV9faWVlZTc1NF9sZ2FtbWEgbGdhbW1hCi0jZGVmaW5lCV9faWVlZTc1NF9nYW1tYQlnYW1tYQotI2RlZmluZQlfX2llZWU3NTRfbGdhbW1hX3IgbGdhbW1hX3IKLSNkZWZpbmUJX19pZWVlNzU0X2dhbW1hX3IgZ2FtbWFfcgotI2RlZmluZQlfX2llZWU3NTRfbG9nMTAJbG9nMTAKLSNkZWZpbmUJX19pZWVlNzU0X3NpbmgJc2luaAotI2RlZmluZQlfX2llZWU3NTRfaHlwb3QJaHlwb3QKLSNkZWZpbmUJX19pZWVlNzU0X2owCWowCi0jZGVmaW5lCV9faWVlZTc1NF9qMQlqMQotI2RlZmluZQlfX2llZWU3NTRfeTAJeTAKLSNkZWZpbmUJX19pZWVlNzU0X3kxCXkxCi0jZGVmaW5lCV9faWVlZTc1NF9qbglqbgotI2RlZmluZQlfX2llZWU3NTRfeW4JeW4KLSNkZWZpbmUJX19pZWVlNzU0X3JlbWFpbmRlciByZW1haW5kZXIKLSNkZWZpbmUJX19pZWVlNzU0X3NjYWxiCXNjYWxiCi0jZGVmaW5lCV9faWVlZTc1NF9zcXJ0ZglzcXJ0ZgotI2RlZmluZQlfX2llZWU3NTRfYWNvc2YJYWNvc2YKLSNkZWZpbmUJX19pZWVlNzU0X2Fjb3NoZiBhY29zaGYKLSNkZWZpbmUJX19pZWVlNzU0X2xvZ2YJbG9nZgotI2RlZmluZQlfX2llZWU3NTRfYXRhbmhmIGF0YW5oZgotI2RlZmluZQlfX2llZWU3NTRfYXNpbmYJYXNpbmYKLSNkZWZpbmUJX19pZWVlNzU0X2F0YW4yZiBhdGFuMmYKLSNkZWZpbmUJX19pZWVlNzU0X2V4cGYJZXhwZgotI2RlZmluZQlfX2llZWU3NTRfY29zaGYJY29zaGYKLSNkZWZpbmUJX19pZWVlNzU0X2Ztb2RmCWZtb2RmCi0jZGVmaW5lCV9faWVlZTc1NF9wb3dmCXBvd2YKLSNkZWZpbmUJX19pZWVlNzU0X2xnYW1tYWYgbGdhbW1hZgotI2RlZmluZQlfX2llZWU3NTRfZ2FtbWFmIGdhbW1hZgotI2RlZmluZQlfX2llZWU3NTRfbGdhbW1hZl9yIGxnYW1tYWZfcgotI2RlZmluZQlfX2llZWU3NTRfZ2FtbWFmX3IgZ2FtbWFmX3IKLSNkZWZpbmUJX19pZWVlNzU0X2xvZzEwZiBsb2cxMGYKLSNkZWZpbmUJX19pZWVlNzU0X3NpbmhmCXNpbmhmCi0jZGVmaW5lCV9faWVlZTc1NF9oeXBvdGYgaHlwb3RmCi0jZGVmaW5lCV9faWVlZTc1NF9qMGYJajBmCi0jZGVmaW5lCV9faWVlZTc1NF9qMWYJajFmCi0jZGVmaW5lCV9faWVlZTc1NF95MGYJeTBmCi0jZGVmaW5lCV9faWVlZTc1NF95MWYJeTFmCi0jZGVmaW5lCV9faWVlZTc1NF9qbmYJam5mCi0jZGVmaW5lCV9faWVlZTc1NF95bmYJeW5mCi0jZGVmaW5lCV9faWVlZTc1NF9yZW1haW5kZXJmIHJlbWFpbmRlcmYKLSNkZWZpbmUJX19pZWVlNzU0X3NjYWxiZiBzY2FsYmYKLSNkZWZpbmUgX19pZWVlNzU0X2xkZXhwZiBsZGV4cGYKLQotLyogZmRsaWJtIGtlcm5lbCBmdW5jdGlvbiAqLwotaW50CV9faWVlZTc1NF9yZW1fcGlvMihkb3VibGUsZG91YmxlKik7Ci1kb3VibGUJX19rZXJuZWxfc2luKGRvdWJsZSxkb3VibGUsaW50KTsKLWRvdWJsZQlfX2tlcm5lbF9jb3MoZG91YmxlLGRvdWJsZSk7Ci1kb3VibGUJX19rZXJuZWxfdGFuKGRvdWJsZSxkb3VibGUsaW50KTsKLWludAlfX2tlcm5lbF9yZW1fcGlvMihkb3VibGUqLGRvdWJsZSosaW50LGludCxpbnQsY29uc3QgaW50Kik7Ci0KLS8qIGZsb2F0IHZlcnNpb25zIG9mIGZkbGlibSBrZXJuZWwgZnVuY3Rpb25zICovCi1pbnQJX19pZWVlNzU0X3JlbV9waW8yZihmbG9hdCxmbG9hdCopOwotZmxvYXQJX19rZXJuZWxfc2luZGYoZG91YmxlKTsKLWZsb2F0CV9fa2VybmVsX2Nvc2RmKGRvdWJsZSk7Ci1mbG9hdAlfX2tlcm5lbF90YW5kZihkb3VibGUsaW50KTsKLWludAlfX2tlcm5lbF9yZW1fcGlvMmYoZmxvYXQqLGZsb2F0KixpbnQsaW50LGludCxjb25zdCBpbnQqKTsKLQotI2VuZGlmIC8qICFfTUFUSF9QUklWQVRFX0hfICovCmRpZmYgLS1naXQgYS9saWJtL3NyYy9zX2FzaW5oLmMgYi9saWJtL3NyYy9zX2FzaW5oLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA3OTAwN2YuLjAwMDAwMDAKLS0tIGEvbGlibS9zcmMvc19hc2luaC5jCisrKyAvZGV2L251bGwKQEAgLTEsNTcgKzAsMCBAQAotLyogQCgjKXNfYXNpbmguYyA1LjEgOTMvMDkvMjQgKi8KLS8qCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBDb3B5cmlnaHQgKEMpIDE5OTMgYnkgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIERldmVsb3BlZCBhdCBTdW5Qcm8sIGEgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBidXNpbmVzcy4KLSAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKLSAqIHNvZnR3YXJlIGlzIGZyZWVseSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoaXMgbm90aWNlCi0gKiBpcyBwcmVzZXJ2ZWQuCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKi8KLQotI2lmbmRlZiBsaW50Ci1zdGF0aWMgY2hhciByY3NpZFtdID0gIiRGcmVlQlNEOiBzcmMvbGliL21zdW4vc3JjL3NfYXNpbmguYyx2IDEuOCAyMDAyLzA1LzI4IDE4OjE1OjA0IGFsZnJlZCBFeHAgJCI7Ci0jZW5kaWYKLQotLyogYXNpbmgoeCkKLSAqIE1ldGhvZCA6Ci0gKglCYXNlZCBvbgotICoJCWFzaW5oKHgpID0gc2lnbih4KSAqIGxvZyBbIHx4fCArIHNxcnQoeCp4KzEpIF0KLSAqCXdlIGhhdmUKLSAqCWFzaW5oKHgpIDo9IHggIGlmICAxK3gqeD0xLAotICoJCSA6PSBzaWduKHgpKihsb2coeCkrbG4yKSkgZm9yIGxhcmdlIHx4fCwgZWxzZQotICoJCSA6PSBzaWduKHgpKmxvZygyfHh8KzEvKHx4fCtzcXJ0KHgqeCsxKSkpIGlmfHh8PjIsIGVsc2UKLSAqCQkgOj0gc2lnbih4KSpsb2cxcCh8eHwgKyB4XjIvKDEgKyBzcXJ0KDEreF4yKSkpCi0gKi8KLQotI2luY2x1ZGUgIm1hdGguaCIKLSNpbmNsdWRlICJtYXRoX3ByaXZhdGUuaCIKLQotc3RhdGljIGNvbnN0IGRvdWJsZQotb25lID0gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDBlKzAwLCAvKiAweDNGRjAwMDAwLCAweDAwMDAwMDAwICovCi1sbjIgPSAgNi45MzE0NzE4MDU1OTk0NTI4NjIyN2UtMDEsIC8qIDB4M0ZFNjJFNDIsIDB4RkVGQTM5RUYgKi8KLWh1Z2U9ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwZSszMDA7Ci0KLWRvdWJsZQotYXNpbmgoZG91YmxlIHgpCi17Ci0JZG91YmxlIHQsdzsKLQlpbnQzMl90IGh4LGl4OwotCUdFVF9ISUdIX1dPUkQoaHgseCk7Ci0JaXggPSBoeCYweDdmZmZmZmZmOwotCWlmKGl4Pj0weDdmZjAwMDAwKSByZXR1cm4geCt4OwkvKiB4IGlzIGluZiBvciBOYU4gKi8KLQlpZihpeDwgMHgzZTMwMDAwMCkgewkvKiB8eHw8MioqLTI4ICovCi0JICAgIGlmKGh1Z2UreD5vbmUpIHJldHVybiB4OwkvKiByZXR1cm4geCBpbmV4YWN0IGV4Y2VwdCAwICovCi0JfQotCWlmKGl4PjB4NDFiMDAwMDApIHsJLyogfHh8ID4gMioqMjggKi8KLQkgICAgdyA9IF9faWVlZTc1NF9sb2coZmFicyh4KSkrbG4yOwotCX0gZWxzZSBpZiAoaXg+MHg0MDAwMDAwMCkgewkvKiAyKioyOCA+IHx4fCA+IDIuMCAqLwotCSAgICB0ID0gZmFicyh4KTsKLQkgICAgdyA9IF9faWVlZTc1NF9sb2coMi4wKnQrb25lLyhfX2llZWU3NTRfc3FydCh4Kngrb25lKSt0KSk7Ci0JfSBlbHNlIHsJCS8qIDIuMCA+IHx4fCA+IDIqKi0yOCAqLwotCSAgICB0ID0geCp4OwotCSAgICB3ID1sb2cxcChmYWJzKHgpK3QvKG9uZStfX2llZWU3NTRfc3FydChvbmUrdCkpKTsKLQl9Ci0JaWYoaHg+MCkgcmV0dXJuIHc7IGVsc2UgcmV0dXJuIC13OwotfQpkaWZmIC0tZ2l0IGEvbGlibS9zcmMvc19hc2luaGYuYyBiL2xpYm0vc3JjL3NfYXNpbmhmLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDczZGM3OTguLjAwMDAwMDAKLS0tIGEvbGlibS9zcmMvc19hc2luaGYuYworKysgL2Rldi9udWxsCkBAIC0xLDQ5ICswLDAgQEAKLS8qIHNfYXNpbmhmLmMgLS0gZmxvYXQgdmVyc2lvbiBvZiBzX2FzaW5oLmMuCi0gKiBDb252ZXJzaW9uIHRvIGZsb2F0IGJ5IElhbiBMYW5jZSBUYXlsb3IsIEN5Z251cyBTdXBwb3J0LCBpYW5AY3lnbnVzLmNvbS4KLSAqLwotCi0vKgotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogQ29weXJpZ2h0IChDKSAxOTkzIGJ5IFN1biBNaWNyb3N5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBEZXZlbG9wZWQgYXQgU3VuUHJvLCBhIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gYnVzaW5lc3MuCi0gKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCi0gKiBzb2Z0d2FyZSBpcyBmcmVlbHkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGlzIG5vdGljZQotICogaXMgcHJlc2VydmVkLgotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICovCi0KLSNpZm5kZWYgbGludAotc3RhdGljIGNoYXIgcmNzaWRbXSA9ICIkRnJlZUJTRDogc3JjL2xpYi9tc3VuL3NyYy9zX2FzaW5oZi5jLHYgMS44IDIwMDIvMDUvMjggMTg6MTU6MDQgYWxmcmVkIEV4cCAkIjsKLSNlbmRpZgotCi0jaW5jbHVkZSAibWF0aC5oIgotI2luY2x1ZGUgIm1hdGhfcHJpdmF0ZS5oIgotCi1zdGF0aWMgY29uc3QgZmxvYXQKLW9uZSA9ICAxLjAwMDAwMDAwMDBlKzAwLCAvKiAweDNGODAwMDAwICovCi1sbjIgPSAgNi45MzE0NzE4MjQ2ZS0wMSwgLyogMHgzZjMxNzIxOCAqLwotaHVnZT0gIDEuMDAwMDAwMDAwMGUrMzA7Ci0KLWZsb2F0Ci1hc2luaGYoZmxvYXQgeCkKLXsKLQlmbG9hdCB0LHc7Ci0JaW50MzJfdCBoeCxpeDsKLQlHRVRfRkxPQVRfV09SRChoeCx4KTsKLQlpeCA9IGh4JjB4N2ZmZmZmZmY7Ci0JaWYoaXg+PTB4N2Y4MDAwMDApIHJldHVybiB4K3g7CS8qIHggaXMgaW5mIG9yIE5hTiAqLwotCWlmKGl4PCAweDMxODAwMDAwKSB7CS8qIHx4fDwyKiotMjggKi8KLQkgICAgaWYoaHVnZSt4Pm9uZSkgcmV0dXJuIHg7CS8qIHJldHVybiB4IGluZXhhY3QgZXhjZXB0IDAgKi8KLQl9Ci0JaWYoaXg+MHg0ZDgwMDAwMCkgewkvKiB8eHwgPiAyKioyOCAqLwotCSAgICB3ID0gX19pZWVlNzU0X2xvZ2YoZmFic2YoeCkpK2xuMjsKLQl9IGVsc2UgaWYgKGl4PjB4NDAwMDAwMDApIHsJLyogMioqMjggPiB8eHwgPiAyLjAgKi8KLQkgICAgdCA9IGZhYnNmKHgpOwotCSAgICB3ID0gX19pZWVlNzU0X2xvZ2YoKGZsb2F0KTIuMCp0K29uZS8oX19pZWVlNzU0X3NxcnRmKHgqeCtvbmUpK3QpKTsKLQl9IGVsc2UgewkJLyogMi4wID4gfHh8ID4gMioqLTI4ICovCi0JICAgIHQgPSB4Kng7Ci0JICAgIHcgPWxvZzFwZihmYWJzZih4KSt0LyhvbmUrX19pZWVlNzU0X3NxcnRmKG9uZSt0KSkpOwotCX0KLQlpZihoeD4wKSByZXR1cm4gdzsgZWxzZSByZXR1cm4gLXc7Ci19CmRpZmYgLS1naXQgYS9saWJtL3NyYy9zX2F0YW4uYyBiL2xpYm0vc3JjL3NfYXRhbi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyM2Q3YWE4Li4wMDAwMDAwCi0tLSBhL2xpYm0vc3JjL3NfYXRhbi5jCisrKyAvZGV2L251bGwKQEAgLTEsMTE5ICswLDAgQEAKLS8qIEAoIylzX2F0YW4uYyA1LjEgOTMvMDkvMjQgKi8KLS8qCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBDb3B5cmlnaHQgKEMpIDE5OTMgYnkgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIERldmVsb3BlZCBhdCBTdW5Qcm8sIGEgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBidXNpbmVzcy4KLSAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKLSAqIHNvZnR3YXJlIGlzIGZyZWVseSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoaXMgbm90aWNlCi0gKiBpcyBwcmVzZXJ2ZWQuCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKi8KLQotI2lmbmRlZiBsaW50Ci1zdGF0aWMgY2hhciByY3NpZFtdID0gIiRGcmVlQlNEOiBzcmMvbGliL21zdW4vc3JjL3NfYXRhbi5jLHYgMS45IDIwMDMvMDcvMjMgMDQ6NTM6NDYgcGV0ZXIgRXhwICQiOwotI2VuZGlmCi0KLS8qIGF0YW4oeCkKLSAqIE1ldGhvZAotICogICAxLiBSZWR1Y2UgeCB0byBwb3NpdGl2ZSBieSBhdGFuKHgpID0gLWF0YW4oLXgpLgotICogICAyLiBBY2NvcmRpbmcgdG8gdGhlIGludGVnZXIgaz00dCswLjI1IGNob3BwZWQsIHQ9eCwgdGhlIGFyZ3VtZW50Ci0gKiAgICAgIGlzIGZ1cnRoZXIgcmVkdWNlZCB0byBvbmUgb2YgdGhlIGZvbGxvd2luZyBpbnRlcnZhbHMgYW5kIHRoZQotICogICAgICBhcmN0YW5nZW50IG9mIHQgaXMgZXZhbHVhdGVkIGJ5IHRoZSBjb3JyZXNwb25kaW5nIGZvcm11bGE6Ci0gKgotICogICAgICBbMCw3LzE2XSAgICAgIGF0YW4oeCkgPSB0LXReMyooYTErdF4yKihhMisuLi4oYTEwK3ReMiphMTEpLi4uKQotICogICAgICBbNy8xNiwxMS8xNl0gIGF0YW4oeCkgPSBhdGFuKDEvMikgKyBhdGFuKCAodC0wLjUpLygxK3QvMikgKQotICogICAgICBbMTEvMTYuMTkvMTZdIGF0YW4oeCkgPSBhdGFuKCAxICkgKyBhdGFuKCAodC0xKS8oMSt0KSApCi0gKiAgICAgIFsxOS8xNiwzOS8xNl0gYXRhbih4KSA9IGF0YW4oMy8yKSArIGF0YW4oICh0LTEuNSkvKDErMS41dCkgKQotICogICAgICBbMzkvMTYsSU5GXSAgIGF0YW4oeCkgPSBhdGFuKElORikgKyBhdGFuKCAtMS90ICkKLSAqCi0gKiBDb25zdGFudHM6Ci0gKiBUaGUgaGV4YWRlY2ltYWwgdmFsdWVzIGFyZSB0aGUgaW50ZW5kZWQgb25lcyBmb3IgdGhlIGZvbGxvd2luZwotICogY29uc3RhbnRzLiBUaGUgZGVjaW1hbCB2YWx1ZXMgbWF5IGJlIHVzZWQsIHByb3ZpZGVkIHRoYXQgdGhlCi0gKiBjb21waWxlciB3aWxsIGNvbnZlcnQgZnJvbSBkZWNpbWFsIHRvIGJpbmFyeSBhY2N1cmF0ZWx5IGVub3VnaAotICogdG8gcHJvZHVjZSB0aGUgaGV4YWRlY2ltYWwgdmFsdWVzIHNob3duLgotICovCi0KLSNpbmNsdWRlICJtYXRoLmgiCi0jaW5jbHVkZSAibWF0aF9wcml2YXRlLmgiCi0KLXN0YXRpYyBjb25zdCBkb3VibGUgYXRhbmhpW10gPSB7Ci0gIDQuNjM2NDc2MDkwMDA4MDYwOTM1MTVlLTAxLCAvKiBhdGFuKDAuNSloaSAweDNGRERBQzY3LCAweDA1NjFCQjRGICovCi0gIDcuODUzOTgxNjMzOTc0NDgyNzg5OTllLTAxLCAvKiBhdGFuKDEuMCloaSAweDNGRTkyMUZCLCAweDU0NDQyRDE4ICovCi0gIDkuODI3OTM3MjMyNDczMjkwNTQwODJlLTAxLCAvKiBhdGFuKDEuNSloaSAweDNGRUY3MzBCLCAweEQyODFGNjlCICovCi0gIDEuNTcwNzk2MzI2Nzk0ODk2NTU4MDBlKzAwLCAvKiBhdGFuKGluZiloaSAweDNGRjkyMUZCLCAweDU0NDQyRDE4ICovCi19OwotCi1zdGF0aWMgY29uc3QgZG91YmxlIGF0YW5sb1tdID0gewotICAyLjI2OTg3Nzc0NTI5NjE2ODcwOTI0ZS0xNywgLyogYXRhbigwLjUpbG8gMHgzQzdBMkI3RiwgMHgyMjJGNjVFMiAqLwotICAzLjA2MTYxNjk5Nzg2ODM4MzAxNzkzZS0xNywgLyogYXRhbigxLjApbG8gMHgzQzgxQTYyNiwgMHgzMzE0NUMwNyAqLwotICAxLjM5MDMzMTEwMzEyMzA5OTg0NTE2ZS0xNywgLyogYXRhbigxLjUpbG8gMHgzQzcwMDc4OCwgMHg3QUYwQ0JCRCAqLwotICA2LjEyMzIzMzk5NTczNjc2NjAzNTg3ZS0xNywgLyogYXRhbihpbmYpbG8gMHgzQzkxQTYyNiwgMHgzMzE0NUMwNyAqLwotfTsKLQotc3RhdGljIGNvbnN0IGRvdWJsZSBhVFtdID0gewotICAzLjMzMzMzMzMzMzMzMzI5MzE4MDI3ZS0wMSwgLyogMHgzRkQ1NTU1NSwgMHg1NTU1NTUwRCAqLwotIC0xLjk5OTk5OTk5OTk4NzY0ODMyNDc2ZS0wMSwgLyogMHhCRkM5OTk5OSwgMHg5OTk4RUJDNCAqLwotICAxLjQyODU3MTQyNzI1MDM0NjYzNzExZS0wMSwgLyogMHgzRkMyNDkyNCwgMHg5MjAwODNGRiAqLwotIC0xLjExMTExMTA0MDU0NjIzNTU3ODgwZS0wMSwgLyogMHhCRkJDNzFDNiwgMHhGRTIzMTY3MSAqLwotICA5LjA5MDg4NzEzMzQzNjUwNjU2MTk2ZS0wMiwgLyogMHgzRkI3NDVDRCwgMHhDNTRDMjA2RSAqLwotIC03LjY5MTg3NjIwNTA0NDgyOTk5NDk1ZS0wMiwgLyogMHhCRkIzQjBGMiwgMHhBRjc0OUE2RCAqLwotICA2LjY2MTA3MzEzNzM4NzUzMTIwNjY5ZS0wMiwgLyogMHgzRkIxMEQ2NiwgMHhBMEQwM0Q1MSAqLwotIC01LjgzMzU3MDEzMzc5MDU3MzQ4NjQ1ZS0wMiwgLyogMHhCRkFEREUyRCwgMHg1MkRFRkQ5QSAqLwotICA0Ljk3Njg3Nzk5NDYxNTkzMjM2MDE3ZS0wMiwgLyogMHgzRkE5N0I0QiwgMHgyNDc2MERFQiAqLwotIC0zLjY1MzE1NzI3NDQyMTY5MTU1MjcwZS0wMiwgLyogMHhCRkEyQjQ0NCwgMHgyQzZBNkMyRiAqLwotICAxLjYyODU4MjAxMTUzNjU3ODIzNjIzZS0wMiwgLyogMHgzRjkwQUQzQSwgMHhFMzIyREExMSAqLwotfTsKLQotCXN0YXRpYyBjb25zdCBkb3VibGUKLW9uZSAgID0gMS4wLAotaHVnZSAgID0gMS4wZTMwMDsKLQotZG91YmxlCi1hdGFuKGRvdWJsZSB4KQotewotCWRvdWJsZSB3LHMxLHMyLHo7Ci0JaW50MzJfdCBpeCxoeCxpZDsKLQotCUdFVF9ISUdIX1dPUkQoaHgseCk7Ci0JaXggPSBoeCYweDdmZmZmZmZmOwotCWlmKGl4Pj0weDQ0MTAwMDAwKSB7CS8qIGlmIHx4fCA+PSAyXjY2ICovCi0JICAgIHVfaW50MzJfdCBsb3c7Ci0JICAgIEdFVF9MT1dfV09SRChsb3cseCk7Ci0JICAgIGlmKGl4PjB4N2ZmMDAwMDB8fAotCQkoaXg9PTB4N2ZmMDAwMDAmJihsb3chPTApKSkKLQkJcmV0dXJuIHgreDsJCS8qIE5hTiAqLwotCSAgICBpZihoeD4wKSByZXR1cm4gIGF0YW5oaVszXSthdGFubG9bM107Ci0JICAgIGVsc2UgICAgIHJldHVybiAtYXRhbmhpWzNdLWF0YW5sb1szXTsKLQl9IGlmIChpeCA8IDB4M2ZkYzAwMDApIHsJLyogfHh8IDwgMC40Mzc1ICovCi0JICAgIGlmIChpeCA8IDB4M2UyMDAwMDApIHsJLyogfHh8IDwgMl4tMjkgKi8KLQkJaWYoaHVnZSt4Pm9uZSkgcmV0dXJuIHg7CS8qIHJhaXNlIGluZXhhY3QgKi8KLQkgICAgfQotCSAgICBpZCA9IC0xOwotCX0gZWxzZSB7Ci0JeCA9IGZhYnMoeCk7Ci0JaWYgKGl4IDwgMHgzZmYzMDAwMCkgewkJLyogfHh8IDwgMS4xODc1ICovCi0JICAgIGlmIChpeCA8IDB4M2ZlNjAwMDApIHsJLyogNy8xNiA8PXx4fDwxMS8xNiAqLwotCQlpZCA9IDA7IHggPSAoMi4wKngtb25lKS8oMi4wK3gpOwotCSAgICB9IGVsc2UgewkJCS8qIDExLzE2PD18eHw8IDE5LzE2ICovCi0JCWlkID0gMTsgeCAgPSAoeC1vbmUpLyh4K29uZSk7Ci0JICAgIH0KLQl9IGVsc2UgewotCSAgICBpZiAoaXggPCAweDQwMDM4MDAwKSB7CS8qIHx4fCA8IDIuNDM3NSAqLwotCQlpZCA9IDI7IHggID0gKHgtMS41KS8ob25lKzEuNSp4KTsKLQkgICAgfSBlbHNlIHsJCQkvKiAyLjQzNzUgPD0gfHh8IDwgMl42NiAqLwotCQlpZCA9IDM7IHggID0gLTEuMC94OwotCSAgICB9Ci0JfX0KLSAgICAvKiBlbmQgb2YgYXJndW1lbnQgcmVkdWN0aW9uICovCi0JeiA9IHgqeDsKLQl3ID0geip6OwotICAgIC8qIGJyZWFrIHN1bSBmcm9tIGk9MCB0byAxMCBhVFtpXXoqKihpKzEpIGludG8gb2RkIGFuZCBldmVuIHBvbHkgKi8KLQlzMSA9IHoqKGFUWzBdK3cqKGFUWzJdK3cqKGFUWzRdK3cqKGFUWzZdK3cqKGFUWzhdK3cqYVRbMTBdKSkpKSk7Ci0JczIgPSB3KihhVFsxXSt3KihhVFszXSt3KihhVFs1XSt3KihhVFs3XSt3KmFUWzldKSkpKTsKLQlpZiAoaWQ8MCkgcmV0dXJuIHggLSB4KihzMStzMik7Ci0JZWxzZSB7Ci0JICAgIHogPSBhdGFuaGlbaWRdIC0gKCh4KihzMStzMikgLSBhdGFubG9baWRdKSAtIHgpOwotCSAgICByZXR1cm4gKGh4PDApPyAtejp6OwotCX0KLX0KZGlmZiAtLWdpdCBhL2xpYm0vc3JjL3NfYXRhbmYuYyBiL2xpYm0vc3JjL3NfYXRhbmYuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjkwYjM1ZC4uMDAwMDAwMAotLS0gYS9saWJtL3NyYy9zX2F0YW5mLmMKKysrIC9kZXYvbnVsbApAQCAtMSw5OSArMCwwIEBACi0vKiBzX2F0YW5mLmMgLS0gZmxvYXQgdmVyc2lvbiBvZiBzX2F0YW4uYy4KLSAqIENvbnZlcnNpb24gdG8gZmxvYXQgYnkgSWFuIExhbmNlIFRheWxvciwgQ3lnbnVzIFN1cHBvcnQsIGlhbkBjeWdudXMuY29tLgotICovCi0KLS8qCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBDb3B5cmlnaHQgKEMpIDE5OTMgYnkgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIERldmVsb3BlZCBhdCBTdW5Qcm8sIGEgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBidXNpbmVzcy4KLSAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKLSAqIHNvZnR3YXJlIGlzIGZyZWVseSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoaXMgbm90aWNlCi0gKiBpcyBwcmVzZXJ2ZWQuCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKi8KLQotI2lmbmRlZiBsaW50Ci1zdGF0aWMgY2hhciByY3NpZFtdID0gIiRGcmVlQlNEOiBzcmMvbGliL21zdW4vc3JjL3NfYXRhbmYuYyx2IDEuNyAyMDAyLzA1LzI4IDE4OjE1OjA0IGFsZnJlZCBFeHAgJCI7Ci0jZW5kaWYKLQotI2luY2x1ZGUgIm1hdGguaCIKLSNpbmNsdWRlICJtYXRoX3ByaXZhdGUuaCIKLQotc3RhdGljIGNvbnN0IGZsb2F0IGF0YW5oaVtdID0gewotICA0LjYzNjQ3NjAzOTllLTAxLCAvKiBhdGFuKDAuNSloaSAweDNlZWQ2MzM4ICovCi0gIDcuODUzOTgxMjU2NWUtMDEsIC8qIGF0YW4oMS4wKWhpIDB4M2Y0OTBmZGEgKi8KLSAgOS44Mjc5MzY4ODc3ZS0wMSwgLyogYXRhbigxLjUpaGkgMHgzZjdiOTg1ZSAqLwotICAxLjU3MDc5NjI1MTNlKzAwLCAvKiBhdGFuKGluZiloaSAweDNmYzkwZmRhICovCi19OwotCi1zdGF0aWMgY29uc3QgZmxvYXQgYXRhbmxvW10gPSB7Ci0gIDUuMDEyMTU4MjQ0MGUtMDksIC8qIGF0YW4oMC41KWxvIDB4MzFhYzM3NjkgKi8KLSAgMy43NzQ4OTQ3MDc5ZS0wOCwgLyogYXRhbigxLjApbG8gMHgzMzIyMjE2OCAqLwotICAzLjQ0NzMyMTcxNzBlLTA4LCAvKiBhdGFuKDEuNSlsbyAweDMzMTQwZmI0ICovCi0gIDcuNTQ5Nzg5NDE1OWUtMDgsIC8qIGF0YW4oaW5mKWxvIDB4MzNhMjIxNjggKi8KLX07Ci0KLXN0YXRpYyBjb25zdCBmbG9hdCBhVFtdID0gewotICAzLjMzMzMzMzQzMjdlLTAxLCAvKiAweDNlYWFhYWFhICovCi0gLTIuMDAwMDAwMDI5OGUtMDEsIC8qIDB4YmU0Y2NjY2QgKi8KLSAgMS40Mjg1NzE0OTI0ZS0wMSwgLyogMHgzZTEyNDkyNSAqLwotIC0xLjExMTExMTA0NDllLTAxLCAvKiAweGJkZTM4ZTM4ICovCi0gIDkuMDkwODg3MDEwMWUtMDIsIC8qIDB4M2RiYTJlNmUgKi8KLSAtNy42OTE4NzU4NDUyZS0wMiwgLyogMHhiZDlkODc5NSAqLwotICA2LjY2MTA3MzExODRlLTAyLCAvKiAweDNkODg2YjM1ICovCi0gLTUuODMzNTcwMjg2NmUtMDIsIC8qIDB4YmQ2ZWYxNmIgKi8KLSAgNC45NzY4Nzc5NDI3ZS0wMiwgLyogMHgzZDRiZGE1OSAqLwotIC0zLjY1MzE1NzEyOTllLTAyLCAvKiAweGJkMTVhMjIxICovCi0gIDEuNjI4NTgxOTkzM2UtMDIsIC8qIDB4M2M4NTY5ZDcgKi8KLX07Ci0KLQlzdGF0aWMgY29uc3QgZmxvYXQKLW9uZSAgID0gMS4wLAotaHVnZSAgID0gMS4wZTMwOwotCi1mbG9hdAotYXRhbmYoZmxvYXQgeCkKLXsKLQlmbG9hdCB3LHMxLHMyLHo7Ci0JaW50MzJfdCBpeCxoeCxpZDsKLQotCUdFVF9GTE9BVF9XT1JEKGh4LHgpOwotCWl4ID0gaHgmMHg3ZmZmZmZmZjsKLQlpZihpeD49MHg1MDgwMDAwMCkgewkvKiBpZiB8eHwgPj0gMl4zNCAqLwotCSAgICBpZihpeD4weDdmODAwMDAwKQotCQlyZXR1cm4geCt4OwkJLyogTmFOICovCi0JICAgIGlmKGh4PjApIHJldHVybiAgYXRhbmhpWzNdK2F0YW5sb1szXTsKLQkgICAgZWxzZSAgICAgcmV0dXJuIC1hdGFuaGlbM10tYXRhbmxvWzNdOwotCX0gaWYgKGl4IDwgMHgzZWUwMDAwMCkgewkvKiB8eHwgPCAwLjQzNzUgKi8KLQkgICAgaWYgKGl4IDwgMHgzMTAwMDAwMCkgewkvKiB8eHwgPCAyXi0yOSAqLwotCQlpZihodWdlK3g+b25lKSByZXR1cm4geDsJLyogcmFpc2UgaW5leGFjdCAqLwotCSAgICB9Ci0JICAgIGlkID0gLTE7Ci0JfSBlbHNlIHsKLQl4ID0gZmFic2YoeCk7Ci0JaWYgKGl4IDwgMHgzZjk4MDAwMCkgewkJLyogfHh8IDwgMS4xODc1ICovCi0JICAgIGlmIChpeCA8IDB4M2YzMDAwMDApIHsJLyogNy8xNiA8PXx4fDwxMS8xNiAqLwotCQlpZCA9IDA7IHggPSAoKGZsb2F0KTIuMCp4LW9uZSkvKChmbG9hdCkyLjAreCk7Ci0JICAgIH0gZWxzZSB7CQkJLyogMTEvMTY8PXx4fDwgMTkvMTYgKi8KLQkJaWQgPSAxOyB4ICA9ICh4LW9uZSkvKHgrb25lKTsKLQkgICAgfQotCX0gZWxzZSB7Ci0JICAgIGlmIChpeCA8IDB4NDAxYzAwMDApIHsJLyogfHh8IDwgMi40Mzc1ICovCi0JCWlkID0gMjsgeCAgPSAoeC0oZmxvYXQpMS41KS8ob25lKyhmbG9hdCkxLjUqeCk7Ci0JICAgIH0gZWxzZSB7CQkJLyogMi40Mzc1IDw9IHx4fCA8IDJeNjYgKi8KLQkJaWQgPSAzOyB4ICA9IC0oZmxvYXQpMS4wL3g7Ci0JICAgIH0KLQl9fQotICAgIC8qIGVuZCBvZiBhcmd1bWVudCByZWR1Y3Rpb24gKi8KLQl6ID0geCp4OwotCXcgPSB6Kno7Ci0gICAgLyogYnJlYWsgc3VtIGZyb20gaT0wIHRvIDEwIGFUW2ldeioqKGkrMSkgaW50byBvZGQgYW5kIGV2ZW4gcG9seSAqLwotCXMxID0geiooYVRbMF0rdyooYVRbMl0rdyooYVRbNF0rdyooYVRbNl0rdyooYVRbOF0rdyphVFsxMF0pKSkpKTsKLQlzMiA9IHcqKGFUWzFdK3cqKGFUWzNdK3cqKGFUWzVdK3cqKGFUWzddK3cqYVRbOV0pKSkpOwotCWlmIChpZDwwKSByZXR1cm4geCAtIHgqKHMxK3MyKTsKLQllbHNlIHsKLQkgICAgeiA9IGF0YW5oaVtpZF0gLSAoKHgqKHMxK3MyKSAtIGF0YW5sb1tpZF0pIC0geCk7Ci0JICAgIHJldHVybiAoaHg8MCk/IC16Ono7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvbGlibS9zcmMvc19jYnJ0LmMgYi9saWJtL3NyYy9zX2NicnQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjYwMDY3Ny4uMDAwMDAwMAotLS0gYS9saWJtL3NyYy9zX2NicnQuYworKysgL2Rldi9udWxsCkBAIC0xLDkyICswLDAgQEAKLS8qIEAoIylzX2NicnQuYyA1LjEgOTMvMDkvMjQgKi8KLS8qCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBDb3B5cmlnaHQgKEMpIDE5OTMgYnkgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIERldmVsb3BlZCBhdCBTdW5Qcm8sIGEgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBidXNpbmVzcy4KLSAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKLSAqIHNvZnR3YXJlIGlzIGZyZWVseSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoaXMgbm90aWNlCi0gKiBpcyBwcmVzZXJ2ZWQuCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKgotICogT3B0aW1pemVkIGJ5IEJydWNlIEQuIEV2YW5zLgotICovCi0KLSNpZm5kZWYgbGludAotc3RhdGljIGNoYXIgcmNzaWRbXSA9ICIkRnJlZUJTRDogc3JjL2xpYi9tc3VuL3NyYy9zX2NicnQuYyx2IDEuMTAgMjAwNS8xMi8xMyAyMDoxNzoyMyBiZGUgRXhwICQiOwotI2VuZGlmCi0KLSNpbmNsdWRlICJtYXRoLmgiCi0jaW5jbHVkZSAibWF0aF9wcml2YXRlLmgiCi0KLS8qIGNicnQoeCkKLSAqIFJldHVybiBjdWJlIHJvb3Qgb2YgeAotICovCi1zdGF0aWMgY29uc3QgdV9pbnQzMl90Ci0JQjEgPSA3MTUwOTQxNjMsIC8qIEIxID0gKDEwMjMtMTAyMy8zLTAuMDMzMDYyMzU2NTEpKjIqKjIwICovCi0JQjIgPSA2OTYyMTk3OTU7IC8qIEIyID0gKDEwMjMtMTAyMy8zLTU0LzMtMC4wMzMwNjIzNTY1MSkqMioqMjAgKi8KLQotc3RhdGljIGNvbnN0IGRvdWJsZQotQyA9ICA1LjQyODU3MTQyODU3MTQyODE1OTA2ZS0wMSwgLyogMTkvMzUgICAgID0gMHgzRkUxNUYxNSwgMHhGMTVGMTVGMSAqLwotRCA9IC03LjA1MzA2MTIyNDQ4OTc5NjExMDUwZS0wMSwgLyogLTg2NC8xMjI1ID0gMHhCRkU2OTFERSwgMHgyNTMyQzgzNCAqLwotRSA9ICAxLjQxNDI4NTcxNDI4NTcxNDM2ODE5ZSswMCwgLyogOTkvNzAgICAgID0gMHgzRkY2QTBFQSwgMHgwRUEwRUEwRiAqLwotRiA9ICAxLjYwNzE0Mjg1NzE0Mjg1NzIwNjMwZSswMCwgLyogNDUvMjggICAgID0gMHgzRkY5QjZEQiwgMHg2REI2REI2RSAqLwotRyA9ICAzLjU3MTQyODU3MTQyODU3MTUwNzg3ZS0wMTsgLyogNS8xNCAgICAgID0gMHgzRkQ2REI2RCwgMHhCNkRCNkRCNyAqLwotCi1kb3VibGUKLWNicnQoZG91YmxlIHgpCi17Ci0JaW50MzJfdAloeDsKLQlkb3VibGUgcixzLHQ9MC4wLHc7Ci0JdV9pbnQzMl90IHNpZ247Ci0JdV9pbnQzMl90IGhpZ2gsbG93OwotCi0JR0VUX0hJR0hfV09SRChoeCx4KTsKLQlzaWduPWh4JjB4ODAwMDAwMDA7IAkJLyogc2lnbj0gc2lnbih4KSAqLwotCWh4ICBePXNpZ247Ci0JaWYoaHg+PTB4N2ZmMDAwMDApIHJldHVybih4K3gpOyAvKiBjYnJ0KE5hTixJTkYpIGlzIGl0c2VsZiAqLwotCUdFVF9MT1dfV09SRChsb3cseCk7Ci0JaWYoKGh4fGxvdyk9PTApCi0JICAgIHJldHVybih4KTsJCS8qIGNicnQoMCkgaXMgaXRzZWxmICovCi0KLSAgICAvKgotICAgICAqIFJvdWdoIGNicnQgdG8gNSBiaXRzOgotICAgICAqICAgIGNicnQoMioqZSooMSttKSB+PSAyKiooZS8zKSooMSsoZSUzK20pLzMpCi0gICAgICogd2hlcmUgZSBpcyBpbnRlZ3JhbCBhbmQgPj0gMCwgbSBpcyByZWFsIGFuZCBpbiBbMCwgMSksIGFuZCAiLyIgYW5kCi0gICAgICogIiUiIGFyZSBpbnRlZ2VyIGRpdmlzaW9uIGFuZCBtb2R1bHVzIHdpdGggcm91bmRpbmcgdG93YXJkcyBtaW51cwotICAgICAqIGluZmluaXR5LiAgVGhlIFJIUyBpcyBhbHdheXMgPj0gdGhlIExIUyBhbmQgaGFzIGEgbWF4aW11bSByZWxhdGl2ZQotICAgICAqIGVycm9yIG9mIGFib3V0IDEgaW4gMTYuICBBZGRpbmcgYSBiaWFzIG9mIC0wLjAzMzA2MjM1NjUxIHRvIHRoZQotICAgICAqIChlJTMrbSkvMyB0ZXJtIHJlZHVjZXMgdGhlIGVycm9yIHRvIGFib3V0IDEgaW4gMzIuIFdpdGggdGhlIElFRUUKLSAgICAgKiBmbG9hdGluZyBwb2ludCByZXByZXNlbnRhdGlvbiwgZm9yIGZpbml0ZSBwb3NpdGl2ZSBub3JtYWwgdmFsdWVzLAotICAgICAqIG9yZGluYXJ5IGludGVnZXIgZGl2aXNvbiBvZiB0aGUgdmFsdWUgaW4gYml0cyBtYWdpY2FsbHkgZ2l2ZXMKLSAgICAgKiBhbG1vc3QgZXhhY3RseSB0aGUgUkhTIG9mIHRoZSBhYm92ZSBwcm92aWRlZCB3ZSBmaXJzdCBzdWJ0cmFjdCB0aGUKLSAgICAgKiBleHBvbmVudCBiaWFzICgxMDIzIGZvciBkb3VibGVzKSBhbmQgbGF0ZXIgYWRkIGl0IGJhY2suICBXZSBkbyB0aGUKLSAgICAgKiBzdWJ0cmFjdGlvbiB2aXJ0dWFsbHkgdG8ga2VlcCBlID49IDAgc28gdGhhdCBvcmRpbmFyeSBpbnRlZ2VyCi0gICAgICogZGl2aXNpb24gcm91bmRzIHRvd2FyZHMgbWludXMgaW5maW5pdHk7IHRoaXMgaXMgYWxzbyBlZmZpY2llbnQuCi0gICAgICovCi0JaWYoaHg8MHgwMDEwMDAwMCkgeyAJCS8qIHN1Ym5vcm1hbCBudW1iZXIgKi8KLQkgICAgU0VUX0hJR0hfV09SRCh0LDB4NDM1MDAwMDApOyAvKiBzZXQgdD0gMioqNTQgKi8KLQkgICAgdCo9eDsKLQkgICAgR0VUX0hJR0hfV09SRChoaWdoLHQpOwotCSAgICBTRVRfSElHSF9XT1JEKHQsc2lnbnwoKGhpZ2gmMHg3ZmZmZmZmZikvMytCMikpOwotCX0gZWxzZQotCSAgICBTRVRfSElHSF9XT1JEKHQsc2lnbnwoaHgvMytCMSkpOwotCi0gICAgLyogbmV3IGNicnQgdG8gMjMgYml0czsgbWF5IGJlIGltcGxlbWVudGVkIGluIHNpbmdsZSBwcmVjaXNpb24gKi8KLQlyPXQqdC94OwotCXM9QytyKnQ7Ci0JdCo9RytGLyhzK0UrRC9zKTsKLQotICAgIC8qIGNob3AgdCB0byAyMCBiaXRzIGFuZCBtYWtlIGl0IGxhcmdlciBpbiBtYWduaXR1ZGUgdGhhbiBjYnJ0KHgpICovCi0JR0VUX0hJR0hfV09SRChoaWdoLHQpOwotCUlOU0VSVF9XT1JEUyh0LGhpZ2grMHgwMDAwMDAwMSwwKTsKLQotICAgIC8qIG9uZSBzdGVwIE5ld3RvbiBpdGVyYXRpb24gdG8gNTMgYml0cyB3aXRoIGVycm9yIGxlc3MgdGhhbiAwLjY2NyB1bHBzICovCi0Jcz10KnQ7CQkvKiB0KnQgaXMgZXhhY3QgKi8KLQlyPXgvczsKLQl3PXQrdDsKLQlyPShyLXQpLyh3K3IpOwkvKiByLXQgaXMgZXhhY3QgKi8KLQl0PXQrdCpyOwotCi0JcmV0dXJuKHQpOwotfQpkaWZmIC0tZ2l0IGEvbGlibS9zcmMvc19jYnJ0Zi5jIGIvbGlibS9zcmMvc19jYnJ0Zi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NTU2OWEyLi4wMDAwMDAwCi0tLSBhL2xpYm0vc3JjL3NfY2JydGYuYworKysgL2Rldi9udWxsCkBAIC0xLDc5ICswLDAgQEAKLS8qIHNfY2JydGYuYyAtLSBmbG9hdCB2ZXJzaW9uIG9mIHNfY2JydC5jLgotICogQ29udmVyc2lvbiB0byBmbG9hdCBieSBJYW4gTGFuY2UgVGF5bG9yLCBDeWdudXMgU3VwcG9ydCwgaWFuQGN5Z251cy5jb20uCi0gKiBEZWJ1Z2dlZCBhbmQgb3B0aW1pemVkIGJ5IEJydWNlIEQuIEV2YW5zLgotICovCi0KLS8qCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBDb3B5cmlnaHQgKEMpIDE5OTMgYnkgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIERldmVsb3BlZCBhdCBTdW5Qcm8sIGEgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBidXNpbmVzcy4KLSAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKLSAqIHNvZnR3YXJlIGlzIGZyZWVseSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoaXMgbm90aWNlCi0gKiBpcyBwcmVzZXJ2ZWQuCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKi8KLQotI2lmbmRlZiBsaW50Ci1zdGF0aWMgY2hhciByY3NpZFtdID0gIiRGcmVlQlNEOiBzcmMvbGliL21zdW4vc3JjL3NfY2JydGYuYyx2IDEuMTIgMjAwNS8xMi8xMyAyMDoxNzoyMyBiZGUgRXhwICQiOwotI2VuZGlmCi0KLSNpbmNsdWRlICJtYXRoLmgiCi0jaW5jbHVkZSAibWF0aF9wcml2YXRlLmgiCi0KLS8qIGNicnRmKHgpCi0gKiBSZXR1cm4gY3ViZSByb290IG9mIHgKLSAqLwotc3RhdGljIGNvbnN0IHVuc2lnbmVkCi0JQjEgPSA3MDk5NTgxMzAsIC8qIEIxID0gKDEyNy0xMjcuMC8zLTAuMDMzMDYyMzU2NTEpKjIqKjIzICovCi0JQjIgPSA2NDI4NDkyNjY7IC8qIEIyID0gKDEyNy0xMjcuMC8zLTI0LzMtMC4wMzMwNjIzNTY1MSkqMioqMjMgKi8KLQotc3RhdGljIGNvbnN0IGZsb2F0Ci1DID0gIDUuNDI4NTcxNzAxMGUtMDEsIC8qIDE5LzM1ICAgICA9IDB4M2YwYWY4YjAgKi8KLUQgPSAtNy4wNTMwNjExMjc3ZS0wMSwgLyogLTg2NC8xMjI1ID0gMHhiZjM0OGVmMSAqLwotRSA9ICAxLjQxNDI4NTY1OThlKzAwLCAvKiA5OS83MCAgICAgPSAweDNmYjUwNzUwICovCi1GID0gIDEuNjA3MTQyODA2MWUrMDAsIC8qIDQ1LzI4ICAgICA9IDB4M2ZjZGI2ZGIgKi8KLUcgPSAgMy41NzE0Mjg2NTY2ZS0wMTsgLyogNS8xNCAgICAgID0gMHgzZWI2ZGI2ZSAqLwotCi1mbG9hdAotY2JydGYoZmxvYXQgeCkKLXsKLQlmbG9hdCByLHMsdCx3OwotCWludDMyX3QgaHg7Ci0JdV9pbnQzMl90IHNpZ247Ci0JdV9pbnQzMl90IGhpZ2g7Ci0KLQlHRVRfRkxPQVRfV09SRChoeCx4KTsKLQlzaWduPWh4JjB4ODAwMDAwMDA7IAkJLyogc2lnbj0gc2lnbih4KSAqLwotCWh4ICBePXNpZ247Ci0JaWYoaHg+PTB4N2Y4MDAwMDApIHJldHVybih4K3gpOyAvKiBjYnJ0KE5hTixJTkYpIGlzIGl0c2VsZiAqLwotCWlmKGh4PT0wKQotCSAgICByZXR1cm4oeCk7CQkvKiBjYnJ0KDApIGlzIGl0c2VsZiAqLwotCi0gICAgLyogcm91Z2ggY2JydCB0byA1IGJpdHMgKi8KLQlpZihoeDwweDAwODAwMDAwKSB7IAkJLyogc3Vibm9ybWFsIG51bWJlciAqLwotCSAgICBTRVRfRkxPQVRfV09SRCh0LDB4NGI4MDAwMDApOyAvKiBzZXQgdD0gMioqMjQgKi8KLQkgICAgdCo9eDsKLQkgICAgR0VUX0ZMT0FUX1dPUkQoaGlnaCx0KTsKLQkgICAgU0VUX0ZMT0FUX1dPUkQodCxzaWdufCgoaGlnaCYweDdmZmZmZmZmKS8zK0IyKSk7Ci0JfSBlbHNlCi0JICAgIFNFVF9GTE9BVF9XT1JEKHQsc2lnbnwoaHgvMytCMSkpOwotCi0gICAgLyogbmV3IGNicnQgdG8gMjMgYml0cyAqLwotCXI9dCp0L3g7Ci0Jcz1DK3IqdDsKLQl0Kj1HK0YvKHMrRStEL3MpOwotCi0gICAgLyogY2hvcCB0IHRvIDEyIGJpdHMgYW5kIG1ha2UgaXQgbGFyZ2VyIGluIG1hZ25pdHVkZSB0aGFuIGNicnQoeCkgKi8KLQlHRVRfRkxPQVRfV09SRChoaWdoLHQpOwotCVNFVF9GTE9BVF9XT1JEKHQsKGhpZ2gmMHhmZmZmZjAwMCkrMHgwMDAwMTAwMCk7Ci0KLSAgICAvKiBvbmUgc3RlcCBOZXd0b24gaXRlcmF0aW9uIHRvIDI0IGJpdHMgd2l0aCBlcnJvciBsZXNzIHRoYW4gMC42NjcgdWxwcyAqLwotCXM9dCp0OwkJLyogdCp0IGlzIGV4YWN0ICovCi0Jcj14L3M7Ci0Jdz10K3Q7Ci0Jcj0oci10KS8odytyKTsJLyogci10IGlzIGV4YWN0ICovCi0JdD10K3QqcjsKLQotCXJldHVybih0KTsKLX0KZGlmZiAtLWdpdCBhL2xpYm0vc3JjL3NfY2VpbC5jIGIvbGlibS9zcmMvc19jZWlsLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU1NDQwZTIuLjAwMDAwMDAKLS0tIGEvbGlibS9zcmMvc19jZWlsLmMKKysrIC9kZXYvbnVsbApAQCAtMSw3MiArMCwwIEBACi0vKiBAKCMpc19jZWlsLmMgNS4xIDkzLzA5LzI0ICovCi0vKgotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogQ29weXJpZ2h0IChDKSAxOTkzIGJ5IFN1biBNaWNyb3N5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBEZXZlbG9wZWQgYXQgU3VuUHJvLCBhIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gYnVzaW5lc3MuCi0gKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCi0gKiBzb2Z0d2FyZSBpcyBmcmVlbHkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGlzIG5vdGljZQotICogaXMgcHJlc2VydmVkLgotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICovCi0KLSNpZm5kZWYgbGludAotc3RhdGljIGNoYXIgcmNzaWRbXSA9ICIkRnJlZUJTRDogc3JjL2xpYi9tc3VuL3NyYy9zX2NlaWwuYyx2IDEuOSAyMDAzLzA3LzIzIDA0OjUzOjQ2IHBldGVyIEV4cCAkIjsKLSNlbmRpZgotCi0vKgotICogY2VpbCh4KQotICogUmV0dXJuIHggcm91bmRlZCB0b3dhcmQgLWluZiB0byBpbnRlZ3JhbCB2YWx1ZQotICogTWV0aG9kOgotICoJQml0IHR3aWRkbGluZy4KLSAqIEV4Y2VwdGlvbjoKLSAqCUluZXhhY3QgZmxhZyByYWlzZWQgaWYgeCBub3QgZXF1YWwgdG8gY2VpbCh4KS4KLSAqLwotCi0jaW5jbHVkZSAibWF0aC5oIgotI2luY2x1ZGUgIm1hdGhfcHJpdmF0ZS5oIgotCi1zdGF0aWMgY29uc3QgZG91YmxlIGh1Z2UgPSAxLjBlMzAwOwotCi1kb3VibGUKLWNlaWwoZG91YmxlIHgpCi17Ci0JaW50MzJfdCBpMCxpMSxqMDsKLQl1X2ludDMyX3QgaSxqOwotCUVYVFJBQ1RfV09SRFMoaTAsaTEseCk7Ci0JajAgPSAoKGkwPj4yMCkmMHg3ZmYpLTB4M2ZmOwotCWlmKGowPDIwKSB7Ci0JICAgIGlmKGowPDApIHsgCS8qIHJhaXNlIGluZXhhY3QgaWYgeCAhPSAwICovCi0JCWlmKGh1Z2UreD4wLjApIHsvKiByZXR1cm4gMCpzaWduKHgpIGlmIHx4fDwxICovCi0JCSAgICBpZihpMDwwKSB7aTA9MHg4MDAwMDAwMDtpMT0wO30KLQkJICAgIGVsc2UgaWYoKGkwfGkxKSE9MCkgeyBpMD0weDNmZjAwMDAwO2kxPTA7fQotCQl9Ci0JICAgIH0gZWxzZSB7Ci0JCWkgPSAoMHgwMDBmZmZmZik+PmowOwotCQlpZigoKGkwJmkpfGkxKT09MCkgcmV0dXJuIHg7IC8qIHggaXMgaW50ZWdyYWwgKi8KLQkJaWYoaHVnZSt4PjAuMCkgewkvKiByYWlzZSBpbmV4YWN0IGZsYWcgKi8KLQkJICAgIGlmKGkwPjApIGkwICs9ICgweDAwMTAwMDAwKT4+ajA7Ci0JCSAgICBpMCAmPSAofmkpOyBpMT0wOwotCQl9Ci0JICAgIH0KLQl9IGVsc2UgaWYgKGowPjUxKSB7Ci0JICAgIGlmKGowPT0weDQwMCkgcmV0dXJuIHgreDsJLyogaW5mIG9yIE5hTiAqLwotCSAgICBlbHNlIHJldHVybiB4OwkJLyogeCBpcyBpbnRlZ3JhbCAqLwotCX0gZWxzZSB7Ci0JICAgIGkgPSAoKHVfaW50MzJfdCkoMHhmZmZmZmZmZikpPj4oajAtMjApOwotCSAgICBpZigoaTEmaSk9PTApIHJldHVybiB4OwkvKiB4IGlzIGludGVncmFsICovCi0JICAgIGlmKGh1Z2UreD4wLjApIHsgCQkvKiByYWlzZSBpbmV4YWN0IGZsYWcgKi8KLQkJaWYoaTA+MCkgewotCQkgICAgaWYoajA9PTIwKSBpMCs9MTsKLQkJICAgIGVsc2UgewotCQkJaiA9IGkxICsgKDE8PCg1Mi1qMCkpOwotCQkJaWYoajxpMSkgaTArPTE7CS8qIGdvdCBhIGNhcnJ5ICovCi0JCQlpMSA9IGo7Ci0JCSAgICB9Ci0JCX0KLQkJaTEgJj0gKH5pKTsKLQkgICAgfQotCX0KLQlJTlNFUlRfV09SRFMoeCxpMCxpMSk7Ci0JcmV0dXJuIHg7Ci19CmRpZmYgLS1naXQgYS9saWJtL3NyYy9zX2NlaWxmLmMgYi9saWJtL3NyYy9zX2NlaWxmLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVjNDY1YjMuLjAwMDAwMDAKLS0tIGEvbGlibS9zcmMvc19jZWlsZi5jCisrKyAvZGV2L251bGwKQEAgLTEsNTMgKzAsMCBAQAotLyogc19jZWlsZi5jIC0tIGZsb2F0IHZlcnNpb24gb2Ygc19jZWlsLmMuCi0gKiBDb252ZXJzaW9uIHRvIGZsb2F0IGJ5IElhbiBMYW5jZSBUYXlsb3IsIEN5Z251cyBTdXBwb3J0LCBpYW5AY3lnbnVzLmNvbS4KLSAqLwotCi0vKgotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogQ29weXJpZ2h0IChDKSAxOTkzIGJ5IFN1biBNaWNyb3N5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBEZXZlbG9wZWQgYXQgU3VuUHJvLCBhIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gYnVzaW5lc3MuCi0gKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCi0gKiBzb2Z0d2FyZSBpcyBmcmVlbHkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGlzIG5vdGljZQotICogaXMgcHJlc2VydmVkLgotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICovCi0KLSNpZm5kZWYgbGludAotc3RhdGljIGNoYXIgcmNzaWRbXSA9ICIkRnJlZUJTRDogc3JjL2xpYi9tc3VuL3NyYy9zX2NlaWxmLmMsdiAxLjcgMjAwMi8wNS8yOCAxODoxNTowNCBhbGZyZWQgRXhwICQiOwotI2VuZGlmCi0KLSNpbmNsdWRlICJtYXRoLmgiCi0jaW5jbHVkZSAibWF0aF9wcml2YXRlLmgiCi0KLXN0YXRpYyBjb25zdCBmbG9hdCBodWdlID0gMS4wZTMwOwotCi1mbG9hdAotY2VpbGYoZmxvYXQgeCkKLXsKLQlpbnQzMl90IGkwLGowOwotCXVfaW50MzJfdCBpOwotCi0JR0VUX0ZMT0FUX1dPUkQoaTAseCk7Ci0JajAgPSAoKGkwPj4yMykmMHhmZiktMHg3ZjsKLQlpZihqMDwyMykgewotCSAgICBpZihqMDwwKSB7IAkvKiByYWlzZSBpbmV4YWN0IGlmIHggIT0gMCAqLwotCQlpZihodWdlK3g+KGZsb2F0KTAuMCkgey8qIHJldHVybiAwKnNpZ24oeCkgaWYgfHh8PDEgKi8KLQkJICAgIGlmKGkwPDApIHtpMD0weDgwMDAwMDAwO30KLQkJICAgIGVsc2UgaWYoaTAhPTApIHsgaTA9MHgzZjgwMDAwMDt9Ci0JCX0KLQkgICAgfSBlbHNlIHsKLQkJaSA9ICgweDAwN2ZmZmZmKT4+ajA7Ci0JCWlmKChpMCZpKT09MCkgcmV0dXJuIHg7IC8qIHggaXMgaW50ZWdyYWwgKi8KLQkJaWYoaHVnZSt4PihmbG9hdCkwLjApIHsJLyogcmFpc2UgaW5leGFjdCBmbGFnICovCi0JCSAgICBpZihpMD4wKSBpMCArPSAoMHgwMDgwMDAwMCk+PmowOwotCQkgICAgaTAgJj0gKH5pKTsKLQkJfQotCSAgICB9Ci0JfSBlbHNlIHsKLQkgICAgaWYoajA9PTB4ODApIHJldHVybiB4K3g7CS8qIGluZiBvciBOYU4gKi8KLQkgICAgZWxzZSByZXR1cm4geDsJCS8qIHggaXMgaW50ZWdyYWwgKi8KLQl9Ci0JU0VUX0ZMT0FUX1dPUkQoeCxpMCk7Ci0JcmV0dXJuIHg7Ci19CmRpZmYgLS1naXQgYS9saWJtL3NyYy9zX2NlaWxsLmMgYi9saWJtL3NyYy9zX2NlaWxsLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdlODgxN2MuLjAwMDAwMDAKLS0tIGEvbGlibS9zcmMvc19jZWlsbC5jCisrKyAvZGV2L251bGwKQEAgLTEsMTAyICswLDAgQEAKLS8qCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBDb3B5cmlnaHQgKEMpIDE5OTMgYnkgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIERldmVsb3BlZCBhdCBTdW5Qcm8sIGEgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBidXNpbmVzcy4KLSAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKLSAqIHNvZnR3YXJlIGlzIGZyZWVseSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoaXMgbm90aWNlCi0gKiBpcyBwcmVzZXJ2ZWQuCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKgotICogRnJvbTogQCgjKXNfY2VpbC5jIDUuMSA5My8wOS8yNAotICovCi0KLSNpZm5kZWYgbGludAotc3RhdGljIGNoYXIgcmNzaWRbXSA9ICIkRnJlZUJTRDogc3JjL2xpYi9tc3VuL3NyYy9zX2NlaWxsLmMsdiAxLjQgMjAwNS8wNC8yOCAxOTo0NTo1NSBzdGVmYW5mIEV4cCAkIjsKLSNlbmRpZgotCi0vKgotICogY2VpbGwoeCkKLSAqIFJldHVybiB4IHJvdW5kZWQgdG93YXJkIC1pbmYgdG8gaW50ZWdyYWwgdmFsdWUKLSAqIE1ldGhvZDoKLSAqCUJpdCB0d2lkZGxpbmcuCi0gKiBFeGNlcHRpb246Ci0gKglJbmV4YWN0IGZsYWcgcmFpc2VkIGlmIHggbm90IGVxdWFsIHRvIGNlaWxsKHgpLgotICovCi0KLSNpbmNsdWRlIDxmbG9hdC5oPgotI2luY2x1ZGUgPG1hdGguaD4KLSNpbmNsdWRlIDxzdGRpbnQuaD4KLQotI2luY2x1ZGUgImZwbWF0aC5oIgotCi0jaWZkZWYgTERCTF9JTVBMSUNJVF9OQklUCi0jZGVmaW5lCU1BTkhfU0laRQkoTERCTF9NQU5IX1NJWkUgKyAxKQotI2RlZmluZQlJTkNfTUFOSCh1LCBjKQlkbyB7CQkJCQlcCi0JdWludDY0X3QgbyA9IHUuYml0cy5tYW5oOwkJCQlcCi0JdS5iaXRzLm1hbmggKz0gKGMpOwkJCQkJXAotCWlmICh1LmJpdHMubWFuaCA8IG8pCQkJCQlcCi0JCXUuYml0cy5leHArKzsJCQkJCVwKLX0gd2hpbGUgKDApCi0jZWxzZQotI2RlZmluZQlNQU5IX1NJWkUJTERCTF9NQU5IX1NJWkUKLSNkZWZpbmUJSU5DX01BTkgodSwgYykJZG8gewkJCQkJXAotCXVpbnQ2NF90IG8gPSB1LmJpdHMubWFuaDsJCQkJXAotCXUuYml0cy5tYW5oICs9IChjKTsJCQkJCVwKLQlpZiAodS5iaXRzLm1hbmggPCBvKSB7CQkJCQlcCi0JCXUuYml0cy5leHArKzsJCQkJCVwKLQkJdS5iaXRzLm1hbmggfD0gMWxsdSA8PCAoTERCTF9NQU5IX1NJWkUgLSAxKTsJXAotCX0JCQkJCQkJXAotfSB3aGlsZSAoMCkKLSNlbmRpZgotCi1zdGF0aWMgY29uc3QgbG9uZyBkb3VibGUgaHVnZSA9IDEuMGUzMDA7Ci0KLWxvbmcgZG91YmxlCi1jZWlsbChsb25nIGRvdWJsZSB4KQotewotCXVuaW9uIElFRUVsMmJpdHMgdSA9IHsgLmUgPSB4IH07Ci0JaW50IGUgPSB1LmJpdHMuZXhwIC0gTERCTF9NQVhfRVhQICsgMTsKLQotCWlmIChlIDwgTUFOSF9TSVpFIC0gMSkgewotCQlpZiAoZSA8IDApIHsJCQkvKiByYWlzZSBpbmV4YWN0IGlmIHggIT0gMCAqLwotCQkJaWYgKGh1Z2UgKyB4ID4gMC4wKQotCQkJCWlmICh1LmJpdHMuZXhwID4gMCB8fAotCQkJCSAgICAodS5iaXRzLm1hbmggfCB1LmJpdHMubWFubCkgIT0gMCkKLQkJCQkJdS5lID0gdS5iaXRzLnNpZ24gPyAwLjAgOiAxLjA7Ci0JCX0gZWxzZSB7Ci0JCQl1aW50NjRfdCBtID0gKCgxbGx1IDw8IE1BTkhfU0laRSkgLSAxKSA+PiAoZSArIDEpOwotCQkJaWYgKCgodS5iaXRzLm1hbmggJiBtKSB8IHUuYml0cy5tYW5sKSA9PSAwKQotCQkJCXJldHVybiAoeCk7CS8qIHggaXMgaW50ZWdyYWwgKi8KLQkJCWlmICghdS5iaXRzLnNpZ24pIHsKLSNpZmRlZiBMREJMX0lNUExJQ0lUX05CSVQKLQkJCQlpZiAoZSA9PSAwKQotCQkJCQl1LmJpdHMuZXhwKys7Ci0JCQkJZWxzZQotI2VuZGlmCi0JCQkJSU5DX01BTkgodSwgMWxsdSA8PCAoTUFOSF9TSVpFIC0gZSAtIDEpKTsKLQkJCX0KLQkJCWlmIChodWdlICsgeCA+IDAuMCkgewkvKiByYWlzZSBpbmV4YWN0IGZsYWcgKi8KLQkJCQl1LmJpdHMubWFuaCAmPSB+bTsKLQkJCQl1LmJpdHMubWFubCA9IDA7Ci0JCQl9Ci0JCX0KLQl9IGVsc2UgaWYgKGUgPCBMREJMX01BTlRfRElHIC0gMSkgewotCQl1aW50NjRfdCBtID0gKHVpbnQ2NF90KS0xID4+ICg2NCAtIExEQkxfTUFOVF9ESUcgKyBlICsgMSk7Ci0JCWlmICgodS5iaXRzLm1hbmwgJiBtKSA9PSAwKQotCQkJcmV0dXJuICh4KTsJLyogeCBpcyBpbnRlZ3JhbCAqLwotCQlpZiAoIXUuYml0cy5zaWduKSB7Ci0JCQlpZiAoZSA9PSBNQU5IX1NJWkUgLSAxKQotCQkJCUlOQ19NQU5IKHUsIDEpOwotCQkJZWxzZSB7Ci0JCQkJdWludDY0X3QgbyA9IHUuYml0cy5tYW5sOwotCQkJCXUuYml0cy5tYW5sICs9IDFsbHUgPDwgKExEQkxfTUFOVF9ESUcgLSBlIC0gMSk7Ci0JCQkJaWYgKHUuYml0cy5tYW5sIDwgbykJLyogZ290IGEgY2FycnkgKi8KLQkJCQkJSU5DX01BTkgodSwgMSk7Ci0JCQl9Ci0JCX0KLQkJaWYgKGh1Z2UgKyB4ID4gMC4wKQkJLyogcmFpc2UgaW5leGFjdCBmbGFnICovCi0JCQl1LmJpdHMubWFubCAmPSB+bTsKLQl9Ci0JcmV0dXJuICh1LmUpOwotfQpkaWZmIC0tZ2l0IGEvbGlibS9zcmMvc19jaW1hZy5jIGIvbGlibS9zcmMvc19jaW1hZy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNGJlMGIzLi4wMDAwMDAwCi0tLSBhL2xpYm0vc3JjL3NfY2ltYWcuYworKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAgQEAKLS8qLQotICogQ29weXJpZ2h0IChjKSAyMDA0IFN0ZWZhbiBGYXJmZWxlZGVyCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqCi0gKiAkRnJlZUJTRDogc3JjL2xpYi9tc3VuL3NyYy9zX2NpbWFnLmMsdiAxLjEgMjAwNC8wNS8zMCAwOToyMTo1NiBzdGVmYW5mIEV4cCAkCi0gKi8KLQotI2luY2x1ZGUgPGNvbXBsZXguaD4KLQotZG91YmxlCi1jaW1hZyhkb3VibGUgY29tcGxleCB6KQotewotCXJldHVybiAteiAqIEk7Ci19CmRpZmYgLS1naXQgYS9saWJtL3NyYy9zX2NpbWFnZi5jIGIvbGlibS9zcmMvc19jaW1hZ2YuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWUwZjUzZi4uMDAwMDAwMAotLS0gYS9saWJtL3NyYy9zX2NpbWFnZi5jCisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgU3RlZmFuIEZhcmZlbGVkZXIKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICoKLSAqICRGcmVlQlNEOiBzcmMvbGliL21zdW4vc3JjL3NfY2ltYWdmLmMsdiAxLjEgMjAwNC8wNS8zMCAwOToyMTo1NiBzdGVmYW5mIEV4cCAkCi0gKi8KLQotI2luY2x1ZGUgPGNvbXBsZXguaD4KLQotZmxvYXQKLWNpbWFnZihmbG9hdCBjb21wbGV4IHopCi17Ci0JcmV0dXJuIC16ICogSTsKLX0KZGlmZiAtLWdpdCBhL2xpYm0vc3JjL3NfY2ltYWdsLmMgYi9saWJtL3NyYy9zX2NpbWFnbC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhODc2NzdlLi4wMDAwMDAwCi0tLSBhL2xpYm0vc3JjL3NfY2ltYWdsLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi0vKi0KLSAqIENvcHlyaWdodCAoYykgMjAwNCBTdGVmYW4gRmFyZmVsZWRlcgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKgotICogJEZyZWVCU0Q6IHNyYy9saWIvbXN1bi9zcmMvc19jaW1hZ2wuYyx2IDEuMSAyMDA0LzA1LzMwIDA5OjIxOjU2IHN0ZWZhbmYgRXhwICQKLSAqLwotCi0jaW5jbHVkZSA8Y29tcGxleC5oPgotCi1sb25nIGRvdWJsZQotY2ltYWdsKGxvbmcgZG91YmxlIGNvbXBsZXggeikKLXsKLQlyZXR1cm4gLXogKiBJOwotfQpkaWZmIC0tZ2l0IGEvbGlibS9zcmMvc19jb25qLmMgYi9saWJtL3NyYy9zX2NvbmouYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDQ3YTE1ZC4uMDAwMDAwMAotLS0gYS9saWJtL3NyYy9zX2NvbmouYworKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAgQEAKLS8qLQotICogQ29weXJpZ2h0IChjKSAyMDA0IFN0ZWZhbiBGYXJmZWxlZGVyCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqCi0gKiAkRnJlZUJTRDogc3JjL2xpYi9tc3VuL3NyYy9zX2NvbmouYyx2IDEuMSAyMDA0LzA1LzMwIDA5OjIxOjU2IHN0ZWZhbmYgRXhwICQKLSAqLwotCi0jaW5jbHVkZSA8Y29tcGxleC5oPgotCi1kb3VibGUgY29tcGxleAotY29uaihkb3VibGUgY29tcGxleCB6KQotewotCXJldHVybiBjcmVhbCh6KSAtIEkgKiBjaW1hZyh6KTsKLX0KZGlmZiAtLWdpdCBhL2xpYm0vc3JjL3NfY29uamYuYyBiL2xpYm0vc3JjL3NfY29uamYuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjRlMDM5OC4uMDAwMDAwMAotLS0gYS9saWJtL3NyYy9zX2NvbmpmLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi0vKi0KLSAqIENvcHlyaWdodCAoYykgMjAwNCBTdGVmYW4gRmFyZmVsZWRlcgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKgotICogJEZyZWVCU0Q6IHNyYy9saWIvbXN1bi9zcmMvc19jb25qZi5jLHYgMS4xIDIwMDQvMDUvMzAgMDk6MjE6NTYgc3RlZmFuZiBFeHAgJAotICovCi0KLSNpbmNsdWRlIDxjb21wbGV4Lmg+Ci0KLWZsb2F0IGNvbXBsZXgKLWNvbmpmKGZsb2F0IGNvbXBsZXggeikKLXsKLQlyZXR1cm4gY3JlYWxmKHopIC0gSSAqIGNpbWFnZih6KTsKLX0KZGlmZiAtLWdpdCBhL2xpYm0vc3JjL3NfY29uamwuYyBiL2xpYm0vc3JjL3NfY29uamwuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTNkODBjMi4uMDAwMDAwMAotLS0gYS9saWJtL3NyYy9zX2NvbmpsLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi0vKi0KLSAqIENvcHlyaWdodCAoYykgMjAwNCBTdGVmYW4gRmFyZmVsZWRlcgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKgotICogJEZyZWVCU0Q6IHNyYy9saWIvbXN1bi9zcmMvc19jb25qbC5jLHYgMS4xIDIwMDQvMDUvMzAgMDk6MjE6NTYgc3RlZmFuZiBFeHAgJAotICovCi0KLSNpbmNsdWRlIDxjb21wbGV4Lmg+Ci0KLWxvbmcgZG91YmxlIGNvbXBsZXgKLWNvbmpsKGxvbmcgZG91YmxlIGNvbXBsZXggeikKLXsKLQlyZXR1cm4gY3JlYWxsKHopIC0gSSAqIGNpbWFnbCh6KTsKLX0KZGlmZiAtLWdpdCBhL2xpYm0vc3JjL3NfY29weXNpZ24uYyBiL2xpYm0vc3JjL3NfY29weXNpZ24uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjM3YmUwZC4uMDAwMDAwMAotLS0gYS9saWJtL3NyYy9zX2NvcHlzaWduLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi0vKiBAKCMpc19jb3B5c2lnbi5jIDUuMSA5My8wOS8yNCAqLwotLyoKLSAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIENvcHlyaWdodCAoQykgMTk5MyBieSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogRGV2ZWxvcGVkIGF0IFN1blBybywgYSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGJ1c2luZXNzLgotICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcwotICogc29mdHdhcmUgaXMgZnJlZWx5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhpcyBub3RpY2UKLSAqIGlzIHByZXNlcnZlZC4KLSAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqLwotCi0jaWZuZGVmIGxpbnQKLXN0YXRpYyBjaGFyIHJjc2lkW10gPSAiJEZyZWVCU0Q6IHNyYy9saWIvbXN1bi9zcmMvc19jb3B5c2lnbi5jLHYgMS45IDIwMDMvMDcvMjMgMDQ6NTM6NDYgcGV0ZXIgRXhwICQiOwotI2VuZGlmCi0KLS8qCi0gKiBjb3B5c2lnbihkb3VibGUgeCwgZG91YmxlIHkpCi0gKiBjb3B5c2lnbih4LHkpIHJldHVybnMgYSB2YWx1ZSB3aXRoIHRoZSBtYWduaXR1ZGUgb2YgeCBhbmQKLSAqIHdpdGggdGhlIHNpZ24gYml0IG9mIHkuCi0gKi8KLQotI2luY2x1ZGUgIm1hdGguaCIKLSNpbmNsdWRlICJtYXRoX3ByaXZhdGUuaCIKLQotZG91YmxlCi1jb3B5c2lnbihkb3VibGUgeCwgZG91YmxlIHkpCi17Ci0JdV9pbnQzMl90IGh4LGh5OwotCUdFVF9ISUdIX1dPUkQoaHgseCk7Ci0JR0VUX0hJR0hfV09SRChoeSx5KTsKLQlTRVRfSElHSF9XT1JEKHgsKGh4JjB4N2ZmZmZmZmYpfChoeSYweDgwMDAwMDAwKSk7Ci0gICAgICAgIHJldHVybiB4OwotfQpkaWZmIC0tZ2l0IGEvbGlibS9zcmMvc19jb3B5c2lnbmYuYyBiL2xpYm0vc3JjL3NfY29weXNpZ25mLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc5YzQ0ODAuLjAwMDAwMDAKLS0tIGEvbGlibS9zcmMvc19jb3B5c2lnbmYuYworKysgL2Rldi9udWxsCkBAIC0xLDM3ICswLDAgQEAKLS8qIHNfY29weXNpZ25mLmMgLS0gZmxvYXQgdmVyc2lvbiBvZiBzX2NvcHlzaWduLmMuCi0gKiBDb252ZXJzaW9uIHRvIGZsb2F0IGJ5IElhbiBMYW5jZSBUYXlsb3IsIEN5Z251cyBTdXBwb3J0LCBpYW5AY3lnbnVzLmNvbS4KLSAqLwotCi0vKgotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogQ29weXJpZ2h0IChDKSAxOTkzIGJ5IFN1biBNaWNyb3N5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBEZXZlbG9wZWQgYXQgU3VuUHJvLCBhIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gYnVzaW5lc3MuCi0gKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCi0gKiBzb2Z0d2FyZSBpcyBmcmVlbHkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGlzIG5vdGljZQotICogaXMgcHJlc2VydmVkLgotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICovCi0KLSNpZm5kZWYgbGludAotc3RhdGljIGNoYXIgcmNzaWRbXSA9ICIkRnJlZUJTRDogc3JjL2xpYi9tc3VuL3NyYy9zX2NvcHlzaWduZi5jLHYgMS45IDIwMDMvMDcvMjMgMDQ6NTM6NDYgcGV0ZXIgRXhwICQiOwotI2VuZGlmCi0KLS8qCi0gKiBjb3B5c2lnbmYoZmxvYXQgeCwgZmxvYXQgeSkKLSAqIGNvcHlzaWduZih4LHkpIHJldHVybnMgYSB2YWx1ZSB3aXRoIHRoZSBtYWduaXR1ZGUgb2YgeCBhbmQKLSAqIHdpdGggdGhlIHNpZ24gYml0IG9mIHkuCi0gKi8KLQotI2luY2x1ZGUgIm1hdGguaCIKLSNpbmNsdWRlICJtYXRoX3ByaXZhdGUuaCIKLQotZmxvYXQKLWNvcHlzaWduZihmbG9hdCB4LCBmbG9hdCB5KQotewotCXVfaW50MzJfdCBpeCxpeTsKLQlHRVRfRkxPQVRfV09SRChpeCx4KTsKLQlHRVRfRkxPQVRfV09SRChpeSx5KTsKLQlTRVRfRkxPQVRfV09SRCh4LChpeCYweDdmZmZmZmZmKXwoaXkmMHg4MDAwMDAwMCkpOwotICAgICAgICByZXR1cm4geDsKLX0KZGlmZiAtLWdpdCBhL2xpYm0vc3JjL3NfY29weXNpZ25sLmMgYi9saWJtL3NyYy9zX2NvcHlzaWdubC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YzViZDM5Li4wMDAwMDAwCi0tLSBhL2xpYm0vc3JjL3NfY29weXNpZ25sLmMKKysrIC9kZXYvbnVsbApAQCAtMSw0MiArMCwwIEBACi0vKi0KLSAqIENvcHlyaWdodCAoYykgMjAwNCBTdGVmYW4gRmFyZmVsZWRlcgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKgotICogJEZyZWVCU0Q6IHNyYy9saWIvbXN1bi9zcmMvc19jb3B5c2lnbmwuYyx2IDEuMSAyMDA0LzA1LzA3IDE4OjU2OjMxIHN0ZWZhbmYgRXhwICQKLSAqLwotCi0jaW5jbHVkZSA8bWF0aC5oPgotCi0jaW5jbHVkZSAiZnBtYXRoLmgiCi0KLWxvbmcgZG91YmxlCi1jb3B5c2lnbmwobG9uZyBkb3VibGUgeCwgbG9uZyBkb3VibGUgeSkKLXsKLQl1bmlvbiBJRUVFbDJiaXRzIHV4LCB1eTsKLQotCXV4LmUgPSB4OwotCXV5LmUgPSB5OwotCXV4LmJpdHMuc2lnbiA9IHV5LmJpdHMuc2lnbjsKLQlyZXR1cm4gKHV4LmUpOwotfQpkaWZmIC0tZ2l0IGEvbGlibS9zcmMvc19jb3MuYyBiL2xpYm0vc3JjL3NfY29zLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBmYWY5MWUuLjAwMDAwMDAKLS0tIGEvbGlibS9zcmMvc19jb3MuYworKysgL2Rldi9udWxsCkBAIC0xLDgyICswLDAgQEAKLS8qIEAoIylzX2Nvcy5jIDUuMSA5My8wOS8yNCAqLwotLyoKLSAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIENvcHlyaWdodCAoQykgMTk5MyBieSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogRGV2ZWxvcGVkIGF0IFN1blBybywgYSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGJ1c2luZXNzLgotICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcwotICogc29mdHdhcmUgaXMgZnJlZWx5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhpcyBub3RpY2UKLSAqIGlzIHByZXNlcnZlZC4KLSAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqLwotCi0jaWZuZGVmIGxpbnQKLXN0YXRpYyBjaGFyIHJjc2lkW10gPSAiJEZyZWVCU0Q6IHNyYy9saWIvbXN1bi9zcmMvc19jb3MuYyx2IDEuMTAgMjAwNS8xMC8yNCAxNDowODozNiBiZGUgRXhwICQiOwotI2VuZGlmCi0KLS8qIGNvcyh4KQotICogUmV0dXJuIGNvc2luZSBmdW5jdGlvbiBvZiB4LgotICoKLSAqIGtlcm5lbCBmdW5jdGlvbjoKLSAqCV9fa2VybmVsX3NpbgkJLi4uIHNpbmUgZnVuY3Rpb24gb24gWy1waS80LHBpLzRdCi0gKglfX2tlcm5lbF9jb3MJCS4uLiBjb3NpbmUgZnVuY3Rpb24gb24gWy1waS80LHBpLzRdCi0gKglfX2llZWU3NTRfcmVtX3BpbzIJLi4uIGFyZ3VtZW50IHJlZHVjdGlvbiByb3V0aW5lCi0gKgotICogTWV0aG9kLgotICogICAgICBMZXQgUyxDIGFuZCBUIGRlbm90ZSB0aGUgc2luLCBjb3MgYW5kIHRhbiByZXNwZWN0aXZlbHkgb24KLSAqCVstUEkvNCwgK1BJLzRdLiBSZWR1Y2UgdGhlIGFyZ3VtZW50IHggdG8geTEreTIgPSB4LWsqcGkvMgotICoJaW4gWy1waS80ICwgK3BpLzRdLCBhbmQgbGV0IG4gPSBrIG1vZCA0LgotICoJV2UgaGF2ZQotICoKLSAqICAgICAgICAgIG4gICAgICAgIHNpbih4KSAgICAgIGNvcyh4KSAgICAgICAgdGFuKHgpCi0gKiAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICoJICAgIDAJICAgICAgIFMJICAgQwkJIFQKLSAqCSAgICAxCSAgICAgICBDCSAgLVMJCS0xL1QKLSAqCSAgICAyCSAgICAgIC1TCSAgLUMJCSBUCi0gKgkgICAgMwkgICAgICAtQwkgICBTCQktMS9UCi0gKiAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICoKLSAqIFNwZWNpYWwgY2FzZXM6Ci0gKiAgICAgIExldCB0cmlnIGJlIGFueSBvZiBzaW4sIGNvcywgb3IgdGFuLgotICogICAgICB0cmlnKCstSU5GKSAgaXMgTmFOLCB3aXRoIHNpZ25hbHM7Ci0gKiAgICAgIHRyaWcoTmFOKSAgICBpcyB0aGF0IE5hTjsKLSAqCi0gKiBBY2N1cmFjeToKLSAqCVRSSUcoeCkgcmV0dXJucyB0cmlnKHgpIG5lYXJseSByb3VuZGVkCi0gKi8KLQotI2luY2x1ZGUgIm1hdGguaCIKLSNpbmNsdWRlICJtYXRoX3ByaXZhdGUuaCIKLQotZG91YmxlCi1jb3MoZG91YmxlIHgpCi17Ci0JZG91YmxlIHlbMl0sej0wLjA7Ci0JaW50MzJfdCBuLCBpeDsKLQotICAgIC8qIEhpZ2ggd29yZCBvZiB4LiAqLwotCUdFVF9ISUdIX1dPUkQoaXgseCk7Ci0KLSAgICAvKiB8eHwgfjwgcGkvNCAqLwotCWl4ICY9IDB4N2ZmZmZmZmY7Ci0JaWYoaXggPD0gMHgzZmU5MjFmYikgewotCSAgICBpZihpeDwweDNlNDAwMDAwKQkJCS8qIGlmIHggPCAyKiotMjcgKi8KLQkJaWYoKChpbnQpeCk9PTApIHJldHVybiAxLjA7CS8qIGdlbmVyYXRlIGluZXhhY3QgKi8KLQkgICAgcmV0dXJuIF9fa2VybmVsX2Nvcyh4LHopOwotCX0KLQotICAgIC8qIGNvcyhJbmYgb3IgTmFOKSBpcyBOYU4gKi8KLQllbHNlIGlmIChpeD49MHg3ZmYwMDAwMCkgcmV0dXJuIHgteDsKLQotICAgIC8qIGFyZ3VtZW50IHJlZHVjdGlvbiBuZWVkZWQgKi8KLQllbHNlIHsKLQkgICAgbiA9IF9faWVlZTc1NF9yZW1fcGlvMih4LHkpOwotCSAgICBzd2l0Y2gobiYzKSB7Ci0JCWNhc2UgMDogcmV0dXJuICBfX2tlcm5lbF9jb3MoeVswXSx5WzFdKTsKLQkJY2FzZSAxOiByZXR1cm4gLV9fa2VybmVsX3Npbih5WzBdLHlbMV0sMSk7Ci0JCWNhc2UgMjogcmV0dXJuIC1fX2tlcm5lbF9jb3MoeVswXSx5WzFdKTsKLQkJZGVmYXVsdDoKLQkJICAgICAgICByZXR1cm4gIF9fa2VybmVsX3Npbih5WzBdLHlbMV0sMSk7Ci0JICAgIH0KLQl9Ci19CmRpZmYgLS1naXQgYS9saWJtL3NyYy9zX2Nvc2YuYyBiL2xpYm0vc3JjL3NfY29zZi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMWFkYWRlLi4wMDAwMDAwCi0tLSBhL2xpYm0vc3JjL3NfY29zZi5jCisrKyAvZGV2L251bGwKQEAgLTEsODQgKzAsMCBAQAotLyogc19jb3NmLmMgLS0gZmxvYXQgdmVyc2lvbiBvZiBzX2Nvcy5jLgotICogQ29udmVyc2lvbiB0byBmbG9hdCBieSBJYW4gTGFuY2UgVGF5bG9yLCBDeWdudXMgU3VwcG9ydCwgaWFuQGN5Z251cy5jb20uCi0gKiBPcHRpbWl6ZWQgYnkgQnJ1Y2UgRC4gRXZhbnMuCi0gKi8KLQotLyoKLSAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIENvcHlyaWdodCAoQykgMTk5MyBieSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogRGV2ZWxvcGVkIGF0IFN1blBybywgYSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGJ1c2luZXNzLgotICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcwotICogc29mdHdhcmUgaXMgZnJlZWx5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhpcyBub3RpY2UKLSAqIGlzIHByZXNlcnZlZC4KLSAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqLwotCi0jaWZuZGVmIGxpbnQKLXN0YXRpYyBjaGFyIHJjc2lkW10gPSAiJEZyZWVCU0Q6IHNyYy9saWIvbXN1bi9zcmMvc19jb3NmLmMsdiAxLjE1IDIwMDUvMTEvMzAgMDY6NDc6MTggYmRlIEV4cCAkIjsKLSNlbmRpZgotCi0jaW5jbHVkZSAibWF0aC5oIgotI2RlZmluZQlJTkxJTkVfS0VSTkVMX0NPU0RGCi0jZGVmaW5lCUlOTElORV9LRVJORUxfU0lOREYKLSNpbmNsdWRlICJtYXRoX3ByaXZhdGUuaCIKLSNpbmNsdWRlICJrX2Nvc2YuYyIKLSNpbmNsdWRlICJrX3NpbmYuYyIKLQotLyogU21hbGwgbXVsdGlwbGVzIG9mIHBpLzIgcm91bmRlZCB0byBkb3VibGUgcHJlY2lzaW9uLiAqLwotc3RhdGljIGNvbnN0IGRvdWJsZQotYzFwaW8yID0gMSpNX1BJXzIsCQkJLyogMHgzRkY5MjFGQiwgMHg1NDQ0MkQxOCAqLwotYzJwaW8yID0gMipNX1BJXzIsCQkJLyogMHg0MDA5MjFGQiwgMHg1NDQ0MkQxOCAqLwotYzNwaW8yID0gMypNX1BJXzIsCQkJLyogMHg0MDEyRDk3QywgMHg3RjMzMjFEMiAqLwotYzRwaW8yID0gNCpNX1BJXzI7CQkJLyogMHg0MDE5MjFGQiwgMHg1NDQ0MkQxOCAqLwotCi1mbG9hdAotY29zZihmbG9hdCB4KQotewotCWZsb2F0IHlbMl07Ci0JaW50MzJfdCBuLCBoeCwgaXg7Ci0KLQlHRVRfRkxPQVRfV09SRChoeCx4KTsKLQlpeCA9IGh4ICYgMHg3ZmZmZmZmZjsKLQotCWlmKGl4IDw9IDB4M2Y0OTBmZGEpIHsJCS8qIHx4fCB+PD0gcGkvNCAqLwotCSAgICBpZihpeDwweDM5ODAwMDAwKQkJLyogfHh8IDwgMioqLTEyICovCi0JCWlmKCgoaW50KXgpPT0wKSByZXR1cm4gMS4wOwkvKiAxIHdpdGggaW5leGFjdCBpZiB4ICE9IDAgKi8KLQkgICAgcmV0dXJuIF9fa2VybmVsX2Nvc2RmKHgpOwotCX0KLQlpZihpeDw9MHg0MDdiNTNkMSkgewkJLyogfHh8IH48PSA1KnBpLzQgKi8KLQkgICAgaWYoaXg+MHg0MDE2Y2JlMykJCS8qIHx4fCAgfj4gMypwaS80ICovCi0JCXJldHVybiAtX19rZXJuZWxfY29zZGYoeCArIChoeCA+IDAgPyAtYzJwaW8yIDogYzJwaW8yKSk7Ci0JICAgIGVsc2UgewotCQlpZihoeD4wKQotCQkgICAgcmV0dXJuIF9fa2VybmVsX3NpbmRmKGMxcGlvMiAtIHgpOwotCQllbHNlCi0JCSAgICByZXR1cm4gX19rZXJuZWxfc2luZGYoeCArIGMxcGlvMik7Ci0JICAgIH0KLQl9Ci0JaWYoaXg8PTB4NDBlMjMxZDUpIHsJCS8qIHx4fCB+PD0gOSpwaS80ICovCi0JICAgIGlmKGl4PjB4NDBhZmVkZGYpCQkvKiB8eHwgIH4+IDcqcGkvNCAqLwotCQlyZXR1cm4gX19rZXJuZWxfY29zZGYoeCArIChoeCA+IDAgPyAtYzRwaW8yIDogYzRwaW8yKSk7Ci0JICAgIGVsc2UgewotCQlpZihoeD4wKQotCQkgICAgcmV0dXJuIF9fa2VybmVsX3NpbmRmKHggLSBjM3BpbzIpOwotCQllbHNlCi0JCSAgICByZXR1cm4gX19rZXJuZWxfc2luZGYoLWMzcGlvMiAtIHgpOwotCSAgICB9Ci0JfQotCi0gICAgLyogY29zKEluZiBvciBOYU4pIGlzIE5hTiAqLwotCWVsc2UgaWYgKGl4Pj0weDdmODAwMDAwKSByZXR1cm4geC14OwotCi0gICAgLyogZ2VuZXJhbCBhcmd1bWVudCByZWR1Y3Rpb24gbmVlZGVkICovCi0JZWxzZSB7Ci0JICAgIG4gPSBfX2llZWU3NTRfcmVtX3BpbzJmKHgseSk7Ci0JICAgIHN3aXRjaChuJjMpIHsKLQkJY2FzZSAwOiByZXR1cm4gIF9fa2VybmVsX2Nvc2RmKChkb3VibGUpeVswXSt5WzFdKTsKLQkJY2FzZSAxOiByZXR1cm4gIF9fa2VybmVsX3NpbmRmKC0oZG91YmxlKXlbMF0teVsxXSk7Ci0JCWNhc2UgMjogcmV0dXJuIC1fX2tlcm5lbF9jb3NkZigoZG91YmxlKXlbMF0reVsxXSk7Ci0JCWRlZmF1bHQ6Ci0JCSAgICAgICAgcmV0dXJuICBfX2tlcm5lbF9zaW5kZigoZG91YmxlKXlbMF0reVsxXSk7Ci0JICAgIH0KLQl9Ci19CmRpZmYgLS1naXQgYS9saWJtL3NyYy9zX2NyZWFsLmMgYi9saWJtL3NyYy9zX2NyZWFsLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFkMTRjZGYuLjAwMDAwMDAKLS0tIGEvbGlibS9zcmMvc19jcmVhbC5jCisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgU3RlZmFuIEZhcmZlbGVkZXIKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICoKLSAqICRGcmVlQlNEOiBzcmMvbGliL21zdW4vc3JjL3NfY3JlYWwuYyx2IDEuMSAyMDA0LzA1LzMwIDA5OjIxOjU2IHN0ZWZhbmYgRXhwICQKLSAqLwotCi0jaW5jbHVkZSA8Y29tcGxleC5oPgotCi1kb3VibGUKLWNyZWFsKGRvdWJsZSBjb21wbGV4IHopCi17Ci0JcmV0dXJuIHo7Ci19CmRpZmYgLS1naXQgYS9saWJtL3NyYy9zX2NyZWFsZi5jIGIvbGlibS9zcmMvc19jcmVhbGYuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTVjMTU2Mi4uMDAwMDAwMAotLS0gYS9saWJtL3NyYy9zX2NyZWFsZi5jCisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgU3RlZmFuIEZhcmZlbGVkZXIKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICoKLSAqICRGcmVlQlNEOiBzcmMvbGliL21zdW4vc3JjL3NfY3JlYWxmLmMsdiAxLjEgMjAwNC8wNS8zMCAwOToyMTo1NiBzdGVmYW5mIEV4cCAkCi0gKi8KLQotI2luY2x1ZGUgPGNvbXBsZXguaD4KLQotZmxvYXQKLWNyZWFsZihmbG9hdCBjb21wbGV4IHopCi17Ci0JcmV0dXJuIHo7Ci19CmRpZmYgLS1naXQgYS9saWJtL3NyYy9zX2NyZWFsbC5jIGIvbGlibS9zcmMvc19jcmVhbGwuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTUzMWQxNi4uMDAwMDAwMAotLS0gYS9saWJtL3NyYy9zX2NyZWFsbC5jCisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgU3RlZmFuIEZhcmZlbGVkZXIKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICoKLSAqICRGcmVlQlNEOiBzcmMvbGliL21zdW4vc3JjL3NfY3JlYWxsLmMsdiAxLjEgMjAwNC8wNS8zMCAwOToyMTo1NiBzdGVmYW5mIEV4cCAkCi0gKi8KLQotI2luY2x1ZGUgPGNvbXBsZXguaD4KLQotbG9uZyBkb3VibGUKLWNyZWFsbChsb25nIGRvdWJsZSBjb21wbGV4IHopCi17Ci0JcmV0dXJuIHo7Ci19CmRpZmYgLS1naXQgYS9saWJtL3NyYy9zX2VyZi5jIGIvbGlibS9zcmMvc19lcmYuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjMzYTJhNS4uMDAwMDAwMAotLS0gYS9saWJtL3NyYy9zX2VyZi5jCisrKyAvZGV2L251bGwKQEAgLTEsMzAyICswLDAgQEAKLS8qIEAoIylzX2VyZi5jIDUuMSA5My8wOS8yNCAqLwotLyoKLSAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIENvcHlyaWdodCAoQykgMTk5MyBieSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogRGV2ZWxvcGVkIGF0IFN1blBybywgYSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGJ1c2luZXNzLgotICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcwotICogc29mdHdhcmUgaXMgZnJlZWx5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhpcyBub3RpY2UKLSAqIGlzIHByZXNlcnZlZC4KLSAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqLwotCi0jaWZuZGVmIGxpbnQKLXN0YXRpYyBjaGFyIHJjc2lkW10gPSAiJEZyZWVCU0Q6IHNyYy9saWIvbXN1bi9zcmMvc19lcmYuYyx2IDEuNyAyMDAyLzA1LzI4IDE4OjE1OjA0IGFsZnJlZCBFeHAgJCI7Ci0jZW5kaWYKLQotLyogZG91YmxlIGVyZihkb3VibGUgeCkKLSAqIGRvdWJsZSBlcmZjKGRvdWJsZSB4KQotICoJCQkgICAgIHgKLSAqCQkgICAgICAyICAgICAgfFwKLSAqICAgICBlcmYoeCkgID0gIC0tLS0tLS0tLSAgfCBleHAoLXQqdClkdAotICoJIAkgICBzcXJ0KHBpKSBcfAotICoJCQkgICAgIDAKLSAqCi0gKiAgICAgZXJmYyh4KSA9ICAxLWVyZih4KQotICogIE5vdGUgdGhhdAotICoJCWVyZigteCkgPSAtZXJmKHgpCi0gKgkJZXJmYygteCkgPSAyIC0gZXJmYyh4KQotICoKLSAqIE1ldGhvZDoKLSAqCTEuIEZvciB8eHwgaW4gWzAsIDAuODQzNzVdCi0gKgkgICAgZXJmKHgpICA9IHggKyB4KlIoeF4yKQotICogICAgICAgICAgZXJmYyh4KSA9IDEgLSBlcmYoeCkgICAgICAgICAgIGlmIHggaW4gWy0uODQzNzUsMC4yNV0KLSAqICAgICAgICAgICAgICAgICAgPSAwLjUgKyAoKDAuNS14KS14KlIpICBpZiB4IGluIFswLjI1LDAuODQzNzVdCi0gKgkgICB3aGVyZSBSID0gUC9RIHdoZXJlIFAgaXMgYW4gb2RkIHBvbHkgb2YgZGVncmVlIDggYW5kCi0gKgkgICBRIGlzIGFuIG9kZCBwb2x5IG9mIGRlZ3JlZSAxMC4KLSAqCQkJCQkJIC01Ny45MAotICoJCQl8IFIgLSAoZXJmKHgpLXgpL3ggfCA8PSAyCi0gKgotICoKLSAqCSAgIFJlbWFyay4gVGhlIGZvcm11bGEgaXMgZGVyaXZlZCBieSBub3RpbmcKLSAqICAgICAgICAgIGVyZih4KSA9ICgyL3NxcnQocGkpKSooeCAtIHheMy8zICsgeF41LzEwIC0geF43LzQyICsgLi4uLikKLSAqCSAgIGFuZCB0aGF0Ci0gKiAgICAgICAgICAyL3NxcnQocGkpID0gMS4xMjgzNzkxNjcwOTU1MTI1NzM4OTYxNTg5MDMxMjE1NDUxNzE2ODgKLSAqCSAgIGlzIGNsb3NlIHRvIG9uZS4gVGhlIGludGVydmFsIGlzIGNob3NlbiBiZWNhdXNlIHRoZSBmaXgKLSAqCSAgIHBvaW50IG9mIGVyZih4KSBpcyBuZWFyIDAuNjE3NCAoaS5lLiwgZXJmKHgpPXggd2hlbiB4IGlzCi0gKgkgICBuZWFyIDAuNjE3NCksIGFuZCBieSBzb21lIGV4cGVyaW1lbnQsIDAuODQzNzUgaXMgY2hvc2VuIHRvCi0gKiAJICAgZ3VhcmFudGVlIHRoZSBlcnJvciBpcyBsZXNzIHRoYW4gb25lIHVscCBmb3IgZXJmLgotICoKLSAqICAgICAgMi4gRm9yIHx4fCBpbiBbMC44NDM3NSwxLjI1XSwgbGV0IHMgPSB8eHwgLSAxLCBhbmQKLSAqICAgICAgICAgYyA9IDAuODQ1MDYyOTExNTEgcm91bmRlZCB0byBzaW5nbGUgKDI0IGJpdHMpCi0gKiAgICAgICAgIAllcmYoeCkgID0gc2lnbih4KSAqIChjICArIFAxKHMpL1ExKHMpKQotICogICAgICAgICAJZXJmYyh4KSA9ICgxLWMpICAtIFAxKHMpL1ExKHMpIGlmIHggPiAwCi0gKgkJCSAgMSsoYytQMShzKS9RMShzKSkgICAgaWYgeCA8IDAKLSAqICAgICAgICAgCXxQMS9RMSAtIChlcmYofHh8KS1jKXwgPD0gMioqLTU5LjA2Ci0gKgkgICBSZW1hcms6IGhlcmUgd2UgdXNlIHRoZSB0YXlsb3Igc2VyaWVzIGV4cGFuc2lvbiBhdCB4PTEuCi0gKgkJZXJmKDErcykgPSBlcmYoMSkgKyBzKlBvbHkocykKLSAqCQkJID0gMC44NDUuLiArIFAxKHMpL1ExKHMpCi0gKgkgICBUaGF0IGlzLCB3ZSB1c2UgcmF0aW9uYWwgYXBwcm94aW1hdGlvbiB0byBhcHByb3hpbWF0ZQotICoJCQllcmYoMStzKSAtIChjID0gKHNpbmdsZSkwLjg0NTA2MjkxMTUxKQotICoJICAgTm90ZSB0aGF0IHxQMS9RMXw8IDAuMDc4IGZvciB4IGluIFswLjg0Mzc1LDEuMjVdCi0gKgkgICB3aGVyZQotICoJCVAxKHMpID0gZGVncmVlIDYgcG9seSBpbiBzCi0gKgkJUTEocykgPSBkZWdyZWUgNiBwb2x5IGluIHMKLSAqCi0gKiAgICAgIDMuIEZvciB4IGluIFsxLjI1LDEvMC4zNSh+Mi44NTcxNDMpXSwKLSAqICAgICAgICAgCWVyZmMoeCkgPSAoMS94KSpleHAoLXgqeC0wLjU2MjUrUjEvUzEpCi0gKiAgICAgICAgIAllcmYoeCkgID0gMSAtIGVyZmMoeCkKLSAqCSAgIHdoZXJlCi0gKgkJUjEoeikgPSBkZWdyZWUgNyBwb2x5IGluIHosICh6PTEveF4yKQotICoJCVMxKHopID0gZGVncmVlIDggcG9seSBpbiB6Ci0gKgotICogICAgICA0LiBGb3IgeCBpbiBbMS8wLjM1LDI4XQotICogICAgICAgICAJZXJmYyh4KSA9ICgxL3gpKmV4cCgteCp4LTAuNTYyNStSMi9TMikgaWYgeCA+IDAKLSAqCQkJPSAyLjAgLSAoMS94KSpleHAoLXgqeC0wLjU2MjUrUjIvUzIpIGlmIC02PHg8MAotICoJCQk9IDIuMCAtIHRpbnkJCShpZiB4IDw9IC02KQotICogICAgICAgICAJZXJmKHgpICA9IHNpZ24oeCkqKDEuMCAtIGVyZmMoeCkpIGlmIHggPCA2LCBlbHNlCi0gKiAgICAgICAgIAllcmYoeCkgID0gc2lnbih4KSooMS4wIC0gdGlueSkKLSAqCSAgIHdoZXJlCi0gKgkJUjIoeikgPSBkZWdyZWUgNiBwb2x5IGluIHosICh6PTEveF4yKQotICoJCVMyKHopID0gZGVncmVlIDcgcG9seSBpbiB6Ci0gKgotICogICAgICBOb3RlMToKLSAqCSAgIFRvIGNvbXB1dGUgZXhwKC14KngtMC41NjI1K1IvUyksIGxldCBzIGJlIGEgc2luZ2xlCi0gKgkgICBwcmVjaXNpb24gbnVtYmVyIGFuZCBzIDo9IHg7IHRoZW4KLSAqCQkteCp4ID0gLXMqcyArIChzLXgpKihzK3gpCi0gKgkgICAgICAgIGV4cCgteCp4LTAuNTYyNitSL1MpID0KLSAqCQkJZXhwKC1zKnMtMC41NjI1KSpleHAoKHMteCkqKHMreCkrUi9TKTsKLSAqICAgICAgTm90ZTI6Ci0gKgkgICBIZXJlIDQgYW5kIDUgbWFrZSB1c2Ugb2YgdGhlIGFzeW1wdG90aWMgc2VyaWVzCi0gKgkJCSAgZXhwKC14KngpCi0gKgkJZXJmYyh4KSB+IC0tLS0tLS0tLS0gKiAoIDEgKyBQb2x5KDEveF4yKSApCi0gKgkJCSAgeCpzcXJ0KHBpKQotICoJICAgV2UgdXNlIHJhdGlvbmFsIGFwcHJveGltYXRpb24gdG8gYXBwcm94aW1hdGUKLSAqICAgICAgCWcocyk9ZigxL3heMikgPSBsb2coZXJmYyh4KSp4KSAtIHgqeCArIDAuNTYyNQotICoJICAgSGVyZSBpcyB0aGUgZXJyb3IgYm91bmQgZm9yIFIxL1MxIGFuZCBSMi9TMgotICogICAgICAJfFIxL1MxIC0gZih4KXwgIDwgMioqKC02Mi41NykKLSAqICAgICAgCXxSMi9TMiAtIGYoeCl8ICA8IDIqKigtNjEuNTIpCi0gKgotICogICAgICA1LiBGb3IgaW5mID4geCA+PSAyOAotICogICAgICAgICAJZXJmKHgpICA9IHNpZ24oeCkgKigxIC0gdGlueSkgIChyYWlzZSBpbmV4YWN0KQotICogICAgICAgICAJZXJmYyh4KSA9IHRpbnkqdGlueSAocmFpc2UgdW5kZXJmbG93KSBpZiB4ID4gMAotICoJCQk9IDIgLSB0aW55IGlmIHg8MAotICoKLSAqICAgICAgNy4gU3BlY2lhbCBjYXNlOgotICogICAgICAgICAJZXJmKDApICA9IDAsIGVyZihpbmYpICA9IDEsIGVyZigtaW5mKSA9IC0xLAotICogICAgICAgICAJZXJmYygwKSA9IDEsIGVyZmMoaW5mKSA9IDAsIGVyZmMoLWluZikgPSAyLAotICoJICAgCWVyZmMvZXJmKE5hTikgaXMgTmFOCi0gKi8KLQotCi0jaW5jbHVkZSAibWF0aC5oIgotI2luY2x1ZGUgIm1hdGhfcHJpdmF0ZS5oIgotCi1zdGF0aWMgY29uc3QgZG91YmxlCi10aW55CSAgICA9IDFlLTMwMCwKLWhhbGY9ICA1LjAwMDAwMDAwMDAwMDAwMDAwMDAwZS0wMSwgLyogMHgzRkUwMDAwMCwgMHgwMDAwMDAwMCAqLwotb25lID0gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDBlKzAwLCAvKiAweDNGRjAwMDAwLCAweDAwMDAwMDAwICovCi10d28gPSAgMi4wMDAwMDAwMDAwMDAwMDAwMDAwMGUrMDAsIC8qIDB4NDAwMDAwMDAsIDB4MDAwMDAwMDAgKi8KLQkvKiBjID0gKGZsb2F0KTAuODQ1MDYyOTExNTEgKi8KLWVyeCA9ICA4LjQ1MDYyOTExNTEwNDY3NTI5Mjk3ZS0wMSwgLyogMHgzRkVCMEFDMSwgMHg2MDAwMDAwMCAqLwotLyoKLSAqIENvZWZmaWNpZW50cyBmb3IgYXBwcm94aW1hdGlvbiB0byAgZXJmIG9uIFswLDAuODQzNzVdCi0gKi8KLWVmeCA9ICAxLjI4Mzc5MTY3MDk1NTEyNTg2MzE2ZS0wMSwgLyogMHgzRkMwNkVCQSwgMHg4MjE0REI2OSAqLwotZWZ4OD0gIDEuMDI3MDMzMzM2NzY0MTAwNjkwNTNlKzAwLCAvKiAweDNGRjA2RUJBLCAweDgyMTREQjY5ICovCi1wcDAgID0gIDEuMjgzNzkxNjcwOTU1MTI1NTg1NjFlLTAxLCAvKiAweDNGQzA2RUJBLCAweDgyMTREQjY4ICovCi1wcDEgID0gLTMuMjUwNDIxMDcyNDcwMDE0OTkzNzBlLTAxLCAvKiAweEJGRDRDRDdELCAweDY5MUNCOTEzICovCi1wcDIgID0gLTIuODQ4MTc0OTU3NTU5ODUxMDQ3NjZlLTAyLCAvKiAweEJGOUQyQTUxLCAweERCRDcxOTRGICovCi1wcDMgID0gLTUuNzcwMjcwMjk2NDg5NDQxNTkxNTdlLTAzLCAvKiAweEJGNzdBMjkxLCAweDIzNjY2OEU0ICovCi1wcDQgID0gLTIuMzc2MzAxNjY1NjY1MDE2MjYwODRlLTA1LCAvKiAweEJFRjhFQUQ2LCAweDEyMDAxNkFDICovCi1xcTEgID0gIDMuOTc5MTcyMjM5NTkxNTUzNTI4MTllLTAxLCAvKiAweDNGRDk3Nzc5LCAweENEREFEQzA5ICovCi1xcTIgID0gIDYuNTAyMjI0OTk4ODc2NzI5NDQ0ODVlLTAyLCAvKiAweDNGQjBBNTRDLCAweDU1MzZDRUJBICovCi1xcTMgID0gIDUuMDgxMzA2MjgxODc1NzY1NjI3NzZlLTAzLCAvKiAweDNGNzREMDIyLCAweEM0RDM2QjBGICovCi1xcTQgID0gIDEuMzI0OTQ3MzgwMDQzMjE2NDQ1MjZlLTA0LCAvKiAweDNGMjE1REM5LCAweDIyMUMxQTEwICovCi1xcTUgID0gLTMuOTYwMjI4Mjc4Nzc1MzY4MTIzMjBlLTA2LCAvKiAweEJFRDA5QzQzLCAweDQyQTI2MTIwICovCi0vKgotICogQ29lZmZpY2llbnRzIGZvciBhcHByb3hpbWF0aW9uIHRvICBlcmYgIGluIFswLjg0Mzc1LDEuMjVdCi0gKi8KLXBhMCAgPSAtMi4zNjIxMTg1NjA3NTI2NTk0NDA3N2UtMDMsIC8qIDB4QkY2MzU5QjgsIDB4QkVGNzc1MzggKi8KLXBhMSAgPSAgNC4xNDg1NjExODY4Mzc0ODMzMTY2NmUtMDEsIC8qIDB4M0ZEQThEMDAsIDB4QUQ5MkIzNEQgKi8KLXBhMiAgPSAtMy43MjIwNzg3NjAzNTcwMTMyMzg0N2UtMDEsIC8qIDB4QkZEN0QyNDAsIDB4RkJCOEMzRjEgKi8KLXBhMyAgPSAgMy4xODM0NjYxOTkwMTE2MTc1MzY3NGUtMDEsIC8qIDB4M0ZENDVGQ0EsIDB4ODA1MTIwRTQgKi8KLXBhNCAgPSAtMS4xMDg5NDY5NDI4MjM5NjY3NzQ3NmUtMDEsIC8qIDB4QkZCQzYzOTgsIDB4M0QzRTI4RUMgKi8KLXBhNSAgPSAgMy41NDc4MzA0MzI1NjE4MjM1OTM3MWUtMDIsIC8qIDB4M0ZBMjJBMzYsIDB4NTk5Nzk1RUIgKi8KLXBhNiAgPSAtMi4xNjYzNzU1OTQ4Njg3OTA4NDMwMGUtMDMsIC8qIDB4QkY2MUJGMzgsIDB4MEE5NjA3M0YgKi8KLXFhMSAgPSAgMS4wNjQyMDg4MDQwMDg0NDIyODI4NmUtMDEsIC8qIDB4M0ZCQjNFNjYsIDB4MThFRUUzMjMgKi8KLXFhMiAgPSAgNS40MDM5NzkxNzcwMjE3MTA0ODkzN2UtMDEsIC8qIDB4M0ZFMTRBRjAsIDB4OTJFQjZGMzMgKi8KLXFhMyAgPSAgNy4xODI4NjU0NDE0MTk2MjY2Mjg2OGUtMDIsIC8qIDB4M0ZCMjYzNUMsIDB4RDk5RkU5QTcgKi8KLXFhNCAgPSAgMS4yNjE3MTIxOTgwODc2MTY0MjExMmUtMDEsIC8qIDB4M0ZDMDI2NjAsIDB4RTc2MzM1MUYgKi8KLXFhNSAgPSAgMS4zNjM3MDgzOTEyMDI5MDUwNzM2MmUtMDIsIC8qIDB4M0Y4QkVEQzIsIDB4NkI1MUREMUMgKi8KLXFhNiAgPSAgMS4xOTg0NDk5ODQ2Nzk5MTA3NDE3MGUtMDIsIC8qIDB4M0Y4ODhCNTQsIDB4NTczNTE1MUQgKi8KLS8qCi0gKiBDb2VmZmljaWVudHMgZm9yIGFwcHJveGltYXRpb24gdG8gIGVyZmMgaW4gWzEuMjUsMS8wLjM1XQotICovCi1yYTAgID0gLTkuODY0OTQ0MDM0ODQ3MTQ4MjI3MDVlLTAzLCAvKiAweEJGODQzNDEyLCAweDYwMEQ2NDM1ICovCi1yYTEgID0gLTYuOTM4NTg1NzI3MDcxODE3NjQzNzJlLTAxLCAvKiAweEJGRTYzNDE2LCAweEU0QkE3MzYwICovCi1yYTIgID0gLTEuMDU1ODYyNjIyNTMyMzI5MDk4MTRlKzAxLCAvKiAweEMwMjUxRTA0LCAweDQxQjBFNzI2ICovCi1yYTMgID0gLTYuMjM3NTMzMjQ1MDMyNjAwNjAzOTZlKzAxLCAvKiAweEMwNEYzMDBBLCAweEU0Q0JBMzhEICovCi1yYTQgID0gLTEuNjIzOTY2Njk0NjI1NzM0NzAzNTVlKzAyLCAvKiAweEMwNjQ0Q0IxLCAweDg0MjgyMjY2ICovCi1yYTUgID0gLTEuODQ2MDUwOTI5MDY3MTEwMzU5OTRlKzAyLCAvKiAweEMwNjcxMzVDLCAweEVCQ0NBQkIyICovCi1yYTYgID0gLTguMTI4NzQzNTUwNjMwNjU5MzQyNDZlKzAxLCAvKiAweEMwNTQ1MjY1LCAweDU3RTREMkYyICovCi1yYTcgID0gLTkuODE0MzI5MzQ0MTY5MTQ1NDg1OTJlKzAwLCAvKiAweEMwMjNBMEVGLCAweEM2OUFDMjVDICovCi1zYTEgID0gIDEuOTY1MTI3MTY2NzQzOTI1NzEyOTJlKzAxLCAvKiAweDQwMzNBNkI5LCAweEJENzA3Njg3ICovCi1zYTIgID0gIDEuMzc2NTc3NTQxNDM1MTkwNDI2MDBlKzAyLCAvKiAweDQwNjEzNTBDLCAweDUyNkFFNzIxICovCi1zYTMgID0gIDQuMzQ1NjU4Nzc0NzUyMjkyMjg4MjFlKzAyLCAvKiAweDQwN0IyOTBELCAweEQ1OEExQTcxICovCi1zYTQgID0gIDYuNDUzODcyNzE3MzMyNjc4ODAzMzZlKzAyLCAvKiAweDQwODQyQjE5LCAweDIxRUMyODY4ICovCi1zYTUgID0gIDQuMjkwMDgxNDAwMjc1Njc4MzMzODZlKzAyLCAvKiAweDQwN0FEMDIxLCAweDU3NzAwMzE0ICovCi1zYTYgID0gIDEuMDg2MzUwMDU1NDE3Nzk0MzUxMzRlKzAyLCAvKiAweDQwNUIyOEEzLCAweEVFNDhBRTJDICovCi1zYTcgID0gIDYuNTcwMjQ5NzcwMzE5MjgxNzAxMzVlKzAwLCAvKiAweDQwMUE0N0VGLCAweDhFNDg0QTkzICovCi1zYTggID0gLTYuMDQyNDQxNTIxNDg1ODA5ODc0MzhlLTAyLCAvKiAweEJGQUVFRkYyLCAweEVFNzQ5QTYyICovCi0vKgotICogQ29lZmZpY2llbnRzIGZvciBhcHByb3hpbWF0aW9uIHRvICBlcmZjIGluIFsxLy4zNSwyOF0KLSAqLwotcmIwICA9IC05Ljg2NDk0MjkyNDcwMDA5OTI4NTk3ZS0wMywgLyogMHhCRjg0MzQxMiwgMHgzOUU4NkY0QSAqLwotcmIxICA9IC03Ljk5MjgzMjM3NjgwNTIzMDA2NTc0ZS0wMSwgLyogMHhCRkU5OTNCQSwgMHg3MEMyODVERSAqLwotcmIyICA9IC0xLjc3NTc5NTQ5MTc3NTQ3NTE5ODg5ZSswMSwgLyogMHhDMDMxQzIwOSwgMHg1NTVGOTk1QSAqLwotcmIzICA9IC0xLjYwNjM2Mzg0ODU1ODIxOTE2MDYyZSswMiwgLyogMHhDMDY0MTQ1RCwgMHg0M0M1RUQ5OCAqLwotcmI0ICA9IC02LjM3NTY2NDQzMzY4Mzg5NjI3NzIyZSswMiwgLyogMHhDMDgzRUM4OCwgMHgxMzc1RjIyOCAqLwotcmI1ICA9IC0xLjAyNTA5NTEzMTYxMTA3NzI0OTU0ZSswMywgLyogMHhDMDkwMDQ2MSwgMHg2QTJFNTk5MiAqLwotcmI2ICA9IC00LjgzNTE5MTkxNjA4NjUxMzk3MDE5ZSswMiwgLyogMHhDMDdFMzg0RSwgMHg5QkRDMzgzRiAqLwotc2IxICA9ICAzLjAzMzgwNjA3NDM0ODI0NTgyOTI0ZSswMSwgLyogMHg0MDNFNTY4QiwgMHgyNjFENTE5MCAqLwotc2IyICA9ICAzLjI1NzkyNTEyOTk2NTczOTE4ODI2ZSswMiwgLyogMHg0MDc0NUNBRSwgMHgyMjFCOUYwQSAqLwotc2IzICA9ICAxLjUzNjcyOTU4NjA4NDQzNjk1OTk0ZSswMywgLyogMHg0MDk4MDJFQiwgMHgxODlENTExOCAqLwotc2I0ICA9ICAzLjE5OTg1ODIxOTUwODU5NTUzOTA4ZSswMywgLyogMHg0MEE4RkZCNywgMHg2ODhDMjQ2QSAqLwotc2I1ICA9ICAyLjU1MzA1MDQwNjQzMzE2NDQyNTgzZSswMywgLyogMHg0MEEzRjIxOSwgMHhDRURGM0JFNiAqLwotc2I2ICA9ICA0Ljc0NTI4NTQxMjA2OTU1MzY3MjE1ZSswMiwgLyogMHg0MDdEQTg3NCwgMHhFNzlGRTc2MyAqLwotc2I3ICA9IC0yLjI0NDA5NTI0NDY1ODU4MTgzMzYyZSswMTsgLyogMHhDMDM2NzBFMiwgMHg0MjcxMkQ2MiAqLwotCi1kb3VibGUKLWVyZihkb3VibGUgeCkKLXsKLQlpbnQzMl90IGh4LGl4LGk7Ci0JZG91YmxlIFIsUyxQLFEscyx5LHoscjsKLQlHRVRfSElHSF9XT1JEKGh4LHgpOwotCWl4ID0gaHgmMHg3ZmZmZmZmZjsKLQlpZihpeD49MHg3ZmYwMDAwMCkgewkJLyogZXJmKG5hbik9bmFuICovCi0JICAgIGkgPSAoKHVfaW50MzJfdCloeD4+MzEpPDwxOwotCSAgICByZXR1cm4gKGRvdWJsZSkoMS1pKStvbmUveDsJLyogZXJmKCstaW5mKT0rLTEgKi8KLQl9Ci0KLQlpZihpeCA8IDB4M2ZlYjAwMDApIHsJCS8qIHx4fDwwLjg0Mzc1ICovCi0JICAgIGlmKGl4IDwgMHgzZTMwMDAwMCkgeyAJLyogfHh8PDIqKi0yOCAqLwotCSAgICAgICAgaWYgKGl4IDwgMHgwMDgwMDAwMCkKLQkJICAgIHJldHVybiAwLjEyNSooOC4wKngrZWZ4OCp4KTsgIC8qYXZvaWQgdW5kZXJmbG93ICovCi0JCXJldHVybiB4ICsgZWZ4Kng7Ci0JICAgIH0KLQkgICAgeiA9IHgqeDsKLQkgICAgciA9IHBwMCt6KihwcDEreioocHAyK3oqKHBwMyt6KnBwNCkpKTsKLQkgICAgcyA9IG9uZSt6KihxcTEreioocXEyK3oqKHFxMyt6KihxcTQreipxcTUpKSkpOwotCSAgICB5ID0gci9zOwotCSAgICByZXR1cm4geCArIHgqeTsKLQl9Ci0JaWYoaXggPCAweDNmZjQwMDAwKSB7CQkvKiAwLjg0Mzc1IDw9IHx4fCA8IDEuMjUgKi8KLQkgICAgcyA9IGZhYnMoeCktb25lOwotCSAgICBQID0gcGEwK3MqKHBhMStzKihwYTIrcyoocGEzK3MqKHBhNCtzKihwYTUrcypwYTYpKSkpKTsKLQkgICAgUSA9IG9uZStzKihxYTErcyoocWEyK3MqKHFhMytzKihxYTQrcyoocWE1K3MqcWE2KSkpKSk7Ci0JICAgIGlmKGh4Pj0wKSByZXR1cm4gZXJ4ICsgUC9ROyBlbHNlIHJldHVybiAtZXJ4IC0gUC9ROwotCX0KLQlpZiAoaXggPj0gMHg0MDE4MDAwMCkgewkJLyogaW5mPnx4fD49NiAqLwotCSAgICBpZihoeD49MCkgcmV0dXJuIG9uZS10aW55OyBlbHNlIHJldHVybiB0aW55LW9uZTsKLQl9Ci0JeCA9IGZhYnMoeCk7Ci0gCXMgPSBvbmUvKHgqeCk7Ci0JaWYoaXg8IDB4NDAwNkRCNkUpIHsJLyogfHh8IDwgMS8wLjM1ICovCi0JICAgIFI9cmEwK3MqKHJhMStzKihyYTIrcyoocmEzK3MqKHJhNCtzKigKLQkJCQlyYTUrcyoocmE2K3MqcmE3KSkpKSkpOwotCSAgICBTPW9uZStzKihzYTErcyooc2EyK3MqKHNhMytzKihzYTQrcyooCi0JCQkJc2E1K3MqKHNhNitzKihzYTcrcypzYTgpKSkpKSkpOwotCX0gZWxzZSB7CS8qIHx4fCA+PSAxLzAuMzUgKi8KLQkgICAgUj1yYjArcyoocmIxK3MqKHJiMitzKihyYjMrcyoocmI0K3MqKAotCQkJCXJiNStzKnJiNikpKSkpOwotCSAgICBTPW9uZStzKihzYjErcyooc2IyK3MqKHNiMytzKihzYjQrcyooCi0JCQkJc2I1K3MqKHNiNitzKnNiNykpKSkpKTsKLQl9Ci0JeiAgPSB4OwotCVNFVF9MT1dfV09SRCh6LDApOwotCXIgID0gIF9faWVlZTc1NF9leHAoLXoqei0wLjU2MjUpKl9faWVlZTc1NF9leHAoKHoteCkqKHoreCkrUi9TKTsKLQlpZihoeD49MCkgcmV0dXJuIG9uZS1yL3g7IGVsc2UgcmV0dXJuICByL3gtb25lOwotfQotCi1kb3VibGUKLWVyZmMoZG91YmxlIHgpCi17Ci0JaW50MzJfdCBoeCxpeDsKLQlkb3VibGUgUixTLFAsUSxzLHkseixyOwotCUdFVF9ISUdIX1dPUkQoaHgseCk7Ci0JaXggPSBoeCYweDdmZmZmZmZmOwotCWlmKGl4Pj0weDdmZjAwMDAwKSB7CQkJLyogZXJmYyhuYW4pPW5hbiAqLwotCQkJCQkJLyogZXJmYygrLWluZik9MCwyICovCi0JICAgIHJldHVybiAoZG91YmxlKSgoKHVfaW50MzJfdCloeD4+MzEpPDwxKStvbmUveDsKLQl9Ci0KLQlpZihpeCA8IDB4M2ZlYjAwMDApIHsJCS8qIHx4fDwwLjg0Mzc1ICovCi0JICAgIGlmKGl4IDwgMHgzYzcwMDAwMCkgIAkvKiB8eHw8MioqLTU2ICovCi0JCXJldHVybiBvbmUteDsKLQkgICAgeiA9IHgqeDsKLQkgICAgciA9IHBwMCt6KihwcDEreioocHAyK3oqKHBwMyt6KnBwNCkpKTsKLQkgICAgcyA9IG9uZSt6KihxcTEreioocXEyK3oqKHFxMyt6KihxcTQreipxcTUpKSkpOwotCSAgICB5ID0gci9zOwotCSAgICBpZihoeCA8IDB4M2ZkMDAwMDApIHsgIAkvKiB4PDEvNCAqLwotCQlyZXR1cm4gb25lLSh4K3gqeSk7Ci0JICAgIH0gZWxzZSB7Ci0JCXIgPSB4Knk7Ci0JCXIgKz0gKHgtaGFsZik7Ci0JICAgICAgICByZXR1cm4gaGFsZiAtIHIgOwotCSAgICB9Ci0JfQotCWlmKGl4IDwgMHgzZmY0MDAwMCkgewkJLyogMC44NDM3NSA8PSB8eHwgPCAxLjI1ICovCi0JICAgIHMgPSBmYWJzKHgpLW9uZTsKLQkgICAgUCA9IHBhMCtzKihwYTErcyoocGEyK3MqKHBhMytzKihwYTQrcyoocGE1K3MqcGE2KSkpKSk7Ci0JICAgIFEgPSBvbmUrcyoocWExK3MqKHFhMitzKihxYTMrcyoocWE0K3MqKHFhNStzKnFhNikpKSkpOwotCSAgICBpZihoeD49MCkgewotCSAgICAgICAgeiAgPSBvbmUtZXJ4OyByZXR1cm4geiAtIFAvUTsKLQkgICAgfSBlbHNlIHsKLQkJeiA9IGVyeCtQL1E7IHJldHVybiBvbmUrejsKLQkgICAgfQotCX0KLQlpZiAoaXggPCAweDQwM2MwMDAwKSB7CQkvKiB8eHw8MjggKi8KLQkgICAgeCA9IGZhYnMoeCk7Ci0gCSAgICBzID0gb25lLyh4KngpOwotCSAgICBpZihpeDwgMHg0MDA2REI2RCkgewkvKiB8eHwgPCAxLy4zNSB+IDIuODU3MTQzKi8KLQkgICAgICAgIFI9cmEwK3MqKHJhMStzKihyYTIrcyoocmEzK3MqKHJhNCtzKigKLQkJCQlyYTUrcyoocmE2K3MqcmE3KSkpKSkpOwotCSAgICAgICAgUz1vbmUrcyooc2ExK3MqKHNhMitzKihzYTMrcyooc2E0K3MqKAotCQkJCXNhNStzKihzYTYrcyooc2E3K3Mqc2E4KSkpKSkpKTsKLQkgICAgfSBlbHNlIHsJCQkvKiB8eHwgPj0gMS8uMzUgfiAyLjg1NzE0MyAqLwotCQlpZihoeDwwJiZpeD49MHg0MDE4MDAwMCkgcmV0dXJuIHR3by10aW55Oy8qIHggPCAtNiAqLwotCSAgICAgICAgUj1yYjArcyoocmIxK3MqKHJiMitzKihyYjMrcyoocmI0K3MqKAotCQkJCXJiNStzKnJiNikpKSkpOwotCSAgICAgICAgUz1vbmUrcyooc2IxK3MqKHNiMitzKihzYjMrcyooc2I0K3MqKAotCQkJCXNiNStzKihzYjYrcypzYjcpKSkpKSk7Ci0JICAgIH0KLQkgICAgeiAgPSB4OwotCSAgICBTRVRfTE9XX1dPUkQoeiwwKTsKLQkgICAgciAgPSAgX19pZWVlNzU0X2V4cCgteip6LTAuNTYyNSkqCi0JCQlfX2llZWU3NTRfZXhwKCh6LXgpKih6K3gpK1IvUyk7Ci0JICAgIGlmKGh4PjApIHJldHVybiByL3g7IGVsc2UgcmV0dXJuIHR3by1yL3g7Ci0JfSBlbHNlIHsKLQkgICAgaWYoaHg+MCkgcmV0dXJuIHRpbnkqdGlueTsgZWxzZSByZXR1cm4gdHdvLXRpbnk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvbGlibS9zcmMvc19lcmZmLmMgYi9saWJtL3NyYy9zX2VyZmYuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjRlMDUzYy4uMDAwMDAwMAotLS0gYS9saWJtL3NyYy9zX2VyZmYuYworKysgL2Rldi9udWxsCkBAIC0xLDIxMSArMCwwIEBACi0vKiBzX2VyZmYuYyAtLSBmbG9hdCB2ZXJzaW9uIG9mIHNfZXJmLmMuCi0gKiBDb252ZXJzaW9uIHRvIGZsb2F0IGJ5IElhbiBMYW5jZSBUYXlsb3IsIEN5Z251cyBTdXBwb3J0LCBpYW5AY3lnbnVzLmNvbS4KLSAqLwotCi0vKgotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogQ29weXJpZ2h0IChDKSAxOTkzIGJ5IFN1biBNaWNyb3N5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBEZXZlbG9wZWQgYXQgU3VuUHJvLCBhIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gYnVzaW5lc3MuCi0gKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCi0gKiBzb2Z0d2FyZSBpcyBmcmVlbHkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGlzIG5vdGljZQotICogaXMgcHJlc2VydmVkLgotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICovCi0KLSNpZm5kZWYgbGludAotc3RhdGljIGNoYXIgcmNzaWRbXSA9ICIkRnJlZUJTRDogc3JjL2xpYi9tc3VuL3NyYy9zX2VyZmYuYyx2IDEuNyAyMDAyLzA1LzI4IDE4OjE1OjA0IGFsZnJlZCBFeHAgJCI7Ci0jZW5kaWYKLQotI2luY2x1ZGUgIm1hdGguaCIKLSNpbmNsdWRlICJtYXRoX3ByaXZhdGUuaCIKLQotc3RhdGljIGNvbnN0IGZsb2F0Ci10aW55CSAgICA9IDFlLTMwLAotaGFsZj0gIDUuMDAwMDAwMDAwMGUtMDEsIC8qIDB4M0YwMDAwMDAgKi8KLW9uZSA9ICAxLjAwMDAwMDAwMDBlKzAwLCAvKiAweDNGODAwMDAwICovCi10d28gPSAgMi4wMDAwMDAwMDAwZSswMCwgLyogMHg0MDAwMDAwMCAqLwotCS8qIGMgPSAoc3ViZmxvYXQpMC44NDUwNjI5MTE1MSAqLwotZXJ4ID0gIDguNDUwNjI5MTE1MWUtMDEsIC8qIDB4M2Y1ODU2MGIgKi8KLS8qCi0gKiBDb2VmZmljaWVudHMgZm9yIGFwcHJveGltYXRpb24gdG8gIGVyZiBvbiBbMCwwLjg0Mzc1XQotICovCi1lZnggPSAgMS4yODM3OTE2NjEzZS0wMSwgLyogMHgzZTAzNzVkNCAqLwotZWZ4OD0gIDEuMDI3MDMzMzI5MGUrMDAsIC8qIDB4M2Y4Mzc1ZDQgKi8KLXBwMCAgPSAgMS4yODM3OTE2NjEzZS0wMSwgLyogMHgzZTAzNzVkNCAqLwotcHAxICA9IC0zLjI1MDQyMDk4NzZlLTAxLCAvKiAweGJlYTY2YmViICovCi1wcDIgID0gLTIuODQ4MTc0OTgxOGUtMDIsIC8qIDB4YmNlOTUyOGYgKi8KLXBwMyAgPSAtNS43NzAyNzAyNDcwZS0wMywgLyogMHhiYmJkMTQ4OSAqLwotcHA0ICA9IC0yLjM3NjMwMTc0NTJlLTA1LCAvKiAweGI3Yzc1NmIxICovCi1xcTEgID0gIDMuOTc5MTcyMTEwNmUtMDEsIC8qIDB4M2VjYmJiY2UgKi8KLXFxMiAgPSAgNi41MDIyMjUyNTAwZS0wMiwgLyogMHgzZDg1MmE2MyAqLwotcXEzICA9ICA1LjA4MTMwNjIxMTdlLTAzLCAvKiAweDNiYTY4MTE2ICovCi1xcTQgID0gIDEuMzI0OTQ3MzcwNGUtMDQsIC8qIDB4MzkwYWVlNDkgKi8KLXFxNSAgPSAtMy45NjAyMjgyNDEzZS0wNiwgLyogMHhiNjg0ZTIxYSAqLwotLyoKLSAqIENvZWZmaWNpZW50cyBmb3IgYXBwcm94aW1hdGlvbiB0byAgZXJmICBpbiBbMC44NDM3NSwxLjI1XQotICovCi1wYTAgID0gLTIuMzYyMTE4NTY4M2UtMDMsIC8qIDB4YmIxYWNkYzYgKi8KLXBhMSAgPSAgNC4xNDg1NjEwNjA0ZS0wMSwgLyogMHgzZWQ0NjgwNSAqLwotcGEyICA9IC0zLjcyMjA3ODgwMDJlLTAxLCAvKiAweGJlYmU5MjA4ICovCi1wYTMgID0gIDMuMTgzNDY2MTk2MWUtMDEsIC8qIDB4M2VhMmZlNTQgKi8KLXBhNCAgPSAtMS4xMDg5NDY5NDkyZS0wMSwgLyogMHhiZGUzMWNjMiAqLwotcGE1ICA9ICAzLjU0NzgzMDUwNzJlLTAyLCAvKiAweDNkMTE1MWIzICovCi1wYTYgID0gLTIuMTY2Mzc1NTE3OGUtMDMsIC8qIDB4YmIwZGY5YzAgKi8KLXFhMSAgPSAgMS4wNjQyMDg4MjA1ZS0wMSwgLyogMHgzZGQ5ZjMzMSAqLwotcWEyICA9ICA1LjQwMzk3OTQyMDdlLTAxLCAvKiAweDNmMGE1Nzg1ICovCi1xYTMgID0gIDcuMTgyODY1NTg5OWUtMDIsIC8qIDB4M2Q5MzFhZTcgKi8KLXFhNCAgPSAgMS4yNjE3MTIxNjM3ZS0wMSwgLyogMHgzZTAxMzMwNyAqLwotcWE1ICA9ICAxLjM2MzcwODM1ODNlLTAyLCAvKiAweDNjNWY2ZTEzICovCi1xYTYgID0gIDEuMTk4NDUwMDEwM2UtMDIsIC8qIDB4M2M0NDVhYTMgKi8KLS8qCi0gKiBDb2VmZmljaWVudHMgZm9yIGFwcHJveGltYXRpb24gdG8gIGVyZmMgaW4gWzEuMjUsMS8wLjM1XQotICovCi1yYTAgID0gLTkuODY0OTQ0MDMzM2UtMDMsIC8qIDB4YmMyMWEwOTMgKi8KLXJhMSAgPSAtNi45Mzg1ODU2MzkwZS0wMSwgLyogMHhiZjMxYTBiNyAqLwotcmEyICA9IC0xLjA1NTg2MjYxNzVlKzAxLCAvKiAweGMxMjhmMDIyICovCi1yYTMgID0gLTYuMjM3NTMzMTg3OWUrMDEsIC8qIDB4YzI3OTgwNTcgKi8KLXJhNCAgPSAtMS42MjM5NjY2NzQ4ZSswMiwgLyogMHhjMzIyNjU4YyAqLwotcmE1ICA9IC0xLjg0NjA1MDg3MjhlKzAyLCAvKiAweGMzMzg5YWU3ICovCi1yYTYgID0gLTguMTI4NzQzNzQzOWUrMDEsIC8qIDB4YzJhMjkzMmIgKi8KLXJhNyAgPSAtOS44MTQzMjkxNDczZSswMCwgLyogMHhjMTFkMDc3ZSAqLwotc2ExICA9ICAxLjk2NTEyNzE4MjBlKzAxLCAvKiAweDQxOWQzNWNlICovCi1zYTIgID0gIDEuMzc2NTc3NjA2MmUrMDIsIC8qIDB4NDMwOWE4NjMgKi8KLXNhMyAgPSAgNC4zNDU2NTg4NzQ1ZSswMiwgLyogMHg0M2Q5NDg2ZiAqLwotc2E0ICA9ICA2LjQ1Mzg3MjY4MDdlKzAyLCAvKiAweDQ0MjE1OGM5ICovCi1zYTUgID0gIDQuMjkwMDgxNDgxOWUrMDIsIC8qIDB4NDNkNjgxMGIgKi8KLXNhNiAgPSAgMS4wODYzNTAwMjE0ZSswMiwgLyogMHg0MmQ5NDUxZiAqLwotc2E3ICA9ICA2LjU3MDI0OTU1NzVlKzAwLCAvKiAweDQwZDIzZjdjICovCi1zYTggID0gLTYuMDQyNDQxMzUzMmUtMDIsIC8qIDB4YmQ3NzdmOTcgKi8KLS8qCi0gKiBDb2VmZmljaWVudHMgZm9yIGFwcHJveGltYXRpb24gdG8gIGVyZmMgaW4gWzEvLjM1LDI4XQotICovCi1yYjAgID0gLTkuODY0OTQzMTAyMGUtMDMsIC8qIDB4YmMyMWEwOTIgKi8KLXJiMSAgPSAtNy45OTI4MzI2NjA3ZS0wMSwgLyogMHhiZjRjOWRkNCAqLwotcmIyICA9IC0xLjc3NTc5NTU1NTFlKzAxLCAvKiAweGMxOGUxMDRiICovCi1yYjMgID0gLTEuNjA2MzYzODMwNmUrMDIsIC8qIDB4YzMyMGEyZWEgKi8KLXJiNCAgPSAtNi4zNzU2NjQ2NzI5ZSswMiwgLyogMHhjNDFmNjQ0MSAqLwotcmI1ICA9IC0xLjAyNTA5NTA5MjhlKzAzLCAvKiAweGM0ODAyMzBiICovCi1yYjYgID0gLTQuODM1MTkxOTU1NmUrMDIsIC8qIDB4YzNmMWMyNzUgKi8KLXNiMSAgPSAgMy4wMzM4MDYwMzc5ZSswMSwgLyogMHg0MWYyYjQ1OSAqLwotc2IyICA9ICAzLjI1NzkyNTEwOTllKzAyLCAvKiAweDQzYTJlNTcxICovCi1zYjMgID0gIDEuNTM2NzI5NjE0M2UrMDMsIC8qIDB4NDRjMDE3NTkgKi8KLXNiNCAgPSAgMy4xOTk4NTgxNTQzZSswMywgLyogMHg0NTQ3ZmRiYiAqLwotc2I1ICA9ICAyLjU1MzA1MDI5MzBlKzAzLCAvKiAweDQ1MWY5MGNlICovCi1zYjYgID0gIDQuNzQ1Mjg1MzM5NGUrMDIsIC8qIDB4NDNlZDQzYTcgKi8KLXNiNyAgPSAtMi4yNDQwOTUyMzAxZSswMTsgLyogMHhjMWIzODcxMiAqLwotCi1mbG9hdAotZXJmZihmbG9hdCB4KQotewotCWludDMyX3QgaHgsaXgsaTsKLQlmbG9hdCBSLFMsUCxRLHMseSx6LHI7Ci0JR0VUX0ZMT0FUX1dPUkQoaHgseCk7Ci0JaXggPSBoeCYweDdmZmZmZmZmOwotCWlmKGl4Pj0weDdmODAwMDAwKSB7CQkvKiBlcmYobmFuKT1uYW4gKi8KLQkgICAgaSA9ICgodV9pbnQzMl90KWh4Pj4zMSk8PDE7Ci0JICAgIHJldHVybiAoZmxvYXQpKDEtaSkrb25lL3g7CS8qIGVyZigrLWluZik9Ky0xICovCi0JfQotCi0JaWYoaXggPCAweDNmNTgwMDAwKSB7CQkvKiB8eHw8MC44NDM3NSAqLwotCSAgICBpZihpeCA8IDB4MzE4MDAwMDApIHsgCS8qIHx4fDwyKiotMjggKi8KLQkgICAgICAgIGlmIChpeCA8IDB4MDQwMDAwMDApCi0JCSAgICAvKmF2b2lkIHVuZGVyZmxvdyAqLwotCQkgICAgcmV0dXJuIChmbG9hdCkwLjEyNSooKGZsb2F0KTguMCp4K2VmeDgqeCk7Ci0JCXJldHVybiB4ICsgZWZ4Kng7Ci0JICAgIH0KLQkgICAgeiA9IHgqeDsKLQkgICAgciA9IHBwMCt6KihwcDEreioocHAyK3oqKHBwMyt6KnBwNCkpKTsKLQkgICAgcyA9IG9uZSt6KihxcTEreioocXEyK3oqKHFxMyt6KihxcTQreipxcTUpKSkpOwotCSAgICB5ID0gci9zOwotCSAgICByZXR1cm4geCArIHgqeTsKLQl9Ci0JaWYoaXggPCAweDNmYTAwMDAwKSB7CQkvKiAwLjg0Mzc1IDw9IHx4fCA8IDEuMjUgKi8KLQkgICAgcyA9IGZhYnNmKHgpLW9uZTsKLQkgICAgUCA9IHBhMCtzKihwYTErcyoocGEyK3MqKHBhMytzKihwYTQrcyoocGE1K3MqcGE2KSkpKSk7Ci0JICAgIFEgPSBvbmUrcyoocWExK3MqKHFhMitzKihxYTMrcyoocWE0K3MqKHFhNStzKnFhNikpKSkpOwotCSAgICBpZihoeD49MCkgcmV0dXJuIGVyeCArIFAvUTsgZWxzZSByZXR1cm4gLWVyeCAtIFAvUTsKLQl9Ci0JaWYgKGl4ID49IDB4NDBjMDAwMDApIHsJCS8qIGluZj58eHw+PTYgKi8KLQkgICAgaWYoaHg+PTApIHJldHVybiBvbmUtdGlueTsgZWxzZSByZXR1cm4gdGlueS1vbmU7Ci0JfQotCXggPSBmYWJzZih4KTsKLSAJcyA9IG9uZS8oeCp4KTsKLQlpZihpeDwgMHg0MDM2REI2RSkgewkvKiB8eHwgPCAxLzAuMzUgKi8KLQkgICAgUj1yYTArcyoocmExK3MqKHJhMitzKihyYTMrcyoocmE0K3MqKAotCQkJCXJhNStzKihyYTYrcypyYTcpKSkpKSk7Ci0JICAgIFM9b25lK3MqKHNhMStzKihzYTIrcyooc2EzK3MqKHNhNCtzKigKLQkJCQlzYTUrcyooc2E2K3MqKHNhNytzKnNhOCkpKSkpKSk7Ci0JfSBlbHNlIHsJLyogfHh8ID49IDEvMC4zNSAqLwotCSAgICBSPXJiMCtzKihyYjErcyoocmIyK3MqKHJiMytzKihyYjQrcyooCi0JCQkJcmI1K3MqcmI2KSkpKSk7Ci0JICAgIFM9b25lK3MqKHNiMStzKihzYjIrcyooc2IzK3MqKHNiNCtzKigKLQkJCQlzYjUrcyooc2I2K3Mqc2I3KSkpKSkpOwotCX0KLQlHRVRfRkxPQVRfV09SRChpeCx4KTsKLQlTRVRfRkxPQVRfV09SRCh6LGl4JjB4ZmZmZmYwMDApOwotCXIgID0gIF9faWVlZTc1NF9leHBmKC16KnotKGZsb2F0KTAuNTYyNSkqX19pZWVlNzU0X2V4cGYoKHoteCkqKHoreCkrUi9TKTsKLQlpZihoeD49MCkgcmV0dXJuIG9uZS1yL3g7IGVsc2UgcmV0dXJuICByL3gtb25lOwotfQotCi1mbG9hdAotZXJmY2YoZmxvYXQgeCkKLXsKLQlpbnQzMl90IGh4LGl4OwotCWZsb2F0IFIsUyxQLFEscyx5LHoscjsKLQlHRVRfRkxPQVRfV09SRChoeCx4KTsKLQlpeCA9IGh4JjB4N2ZmZmZmZmY7Ci0JaWYoaXg+PTB4N2Y4MDAwMDApIHsJCQkvKiBlcmZjKG5hbik9bmFuICovCi0JCQkJCQkvKiBlcmZjKCstaW5mKT0wLDIgKi8KLQkgICAgcmV0dXJuIChmbG9hdCkoKCh1X2ludDMyX3QpaHg+PjMxKTw8MSkrb25lL3g7Ci0JfQotCi0JaWYoaXggPCAweDNmNTgwMDAwKSB7CQkvKiB8eHw8MC44NDM3NSAqLwotCSAgICBpZihpeCA8IDB4MjM4MDAwMDApICAJLyogfHh8PDIqKi01NiAqLwotCQlyZXR1cm4gb25lLXg7Ci0JICAgIHogPSB4Kng7Ci0JICAgIHIgPSBwcDAreioocHAxK3oqKHBwMit6KihwcDMreipwcDQpKSk7Ci0JICAgIHMgPSBvbmUreioocXExK3oqKHFxMit6KihxcTMreioocXE0K3oqcXE1KSkpKTsKLQkgICAgeSA9IHIvczsKLQkgICAgaWYoaHggPCAweDNlODAwMDAwKSB7ICAJLyogeDwxLzQgKi8KLQkJcmV0dXJuIG9uZS0oeCt4KnkpOwotCSAgICB9IGVsc2UgewotCQlyID0geCp5OwotCQlyICs9ICh4LWhhbGYpOwotCSAgICAgICAgcmV0dXJuIGhhbGYgLSByIDsKLQkgICAgfQotCX0KLQlpZihpeCA8IDB4M2ZhMDAwMDApIHsJCS8qIDAuODQzNzUgPD0gfHh8IDwgMS4yNSAqLwotCSAgICBzID0gZmFic2YoeCktb25lOwotCSAgICBQID0gcGEwK3MqKHBhMStzKihwYTIrcyoocGEzK3MqKHBhNCtzKihwYTUrcypwYTYpKSkpKTsKLQkgICAgUSA9IG9uZStzKihxYTErcyoocWEyK3MqKHFhMytzKihxYTQrcyoocWE1K3MqcWE2KSkpKSk7Ci0JICAgIGlmKGh4Pj0wKSB7Ci0JICAgICAgICB6ICA9IG9uZS1lcng7IHJldHVybiB6IC0gUC9ROwotCSAgICB9IGVsc2UgewotCQl6ID0gZXJ4K1AvUTsgcmV0dXJuIG9uZSt6OwotCSAgICB9Ci0JfQotCWlmIChpeCA8IDB4NDFlMDAwMDApIHsJCS8qIHx4fDwyOCAqLwotCSAgICB4ID0gZmFic2YoeCk7Ci0gCSAgICBzID0gb25lLyh4KngpOwotCSAgICBpZihpeDwgMHg0MDM2REI2RCkgewkvKiB8eHwgPCAxLy4zNSB+IDIuODU3MTQzKi8KLQkgICAgICAgIFI9cmEwK3MqKHJhMStzKihyYTIrcyoocmEzK3MqKHJhNCtzKigKLQkJCQlyYTUrcyoocmE2K3MqcmE3KSkpKSkpOwotCSAgICAgICAgUz1vbmUrcyooc2ExK3MqKHNhMitzKihzYTMrcyooc2E0K3MqKAotCQkJCXNhNStzKihzYTYrcyooc2E3K3Mqc2E4KSkpKSkpKTsKLQkgICAgfSBlbHNlIHsJCQkvKiB8eHwgPj0gMS8uMzUgfiAyLjg1NzE0MyAqLwotCQlpZihoeDwwJiZpeD49MHg0MGMwMDAwMCkgcmV0dXJuIHR3by10aW55Oy8qIHggPCAtNiAqLwotCSAgICAgICAgUj1yYjArcyoocmIxK3MqKHJiMitzKihyYjMrcyoocmI0K3MqKAotCQkJCXJiNStzKnJiNikpKSkpOwotCSAgICAgICAgUz1vbmUrcyooc2IxK3MqKHNiMitzKihzYjMrcyooc2I0K3MqKAotCQkJCXNiNStzKihzYjYrcypzYjcpKSkpKSk7Ci0JICAgIH0KLQkgICAgR0VUX0ZMT0FUX1dPUkQoaXgseCk7Ci0JICAgIFNFVF9GTE9BVF9XT1JEKHosaXgmMHhmZmZmZjAwMCk7Ci0JICAgIHIgID0gIF9faWVlZTc1NF9leHBmKC16KnotKGZsb2F0KTAuNTYyNSkqCi0JCQlfX2llZWU3NTRfZXhwZigoei14KSooeit4KStSL1MpOwotCSAgICBpZihoeD4wKSByZXR1cm4gci94OyBlbHNlIHJldHVybiB0d28tci94OwotCX0gZWxzZSB7Ci0JICAgIGlmKGh4PjApIHJldHVybiB0aW55KnRpbnk7IGVsc2UgcmV0dXJuIHR3by10aW55OwotCX0KLX0KZGlmZiAtLWdpdCBhL2xpYm0vc3JjL3NfZXhwMi5jIGIvbGlibS9zcmMvc19leHAyLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFkZGVmMDQuLjAwMDAwMDAKLS0tIGEvbGlibS9zcmMvc19leHAyLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzODkgKzAsMCBAQAotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgRGF2aWQgU2NodWx0eiA8ZGFzQEZyZWVCU0QuT1JHPgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSA8c3lzL2NkZWZzLmg+Ci0vKiBfX0ZCU0RJRCgiJEZyZWVCU0Q6IHNyYy9saWIvbXN1bi9zcmMvc19leHAyLmMsdiAxLjEgMjAwNS8wNC8wNSAwMjo1NzoxNSBkYXMgRXhwICQiKTsgKi8KLQotI2luY2x1ZGUgIm1hdGguaCIKLSNpbmNsdWRlICJtYXRoX3ByaXZhdGUuaCIKLQotI2RlZmluZQlUQkxCSVRTCTgKLSNkZWZpbmUJVEJMU0laRQkoMSA8PCBUQkxCSVRTKQotCi1zdGF0aWMgY29uc3QgZG91YmxlCi0gICAgaHVnZSAgICAgPSAweDFwMTAwMCwKLSAgICB0d29tMTAwMCA9IDB4MXAtMTAwMCwKLSAgICByZWR1eCAgICA9IDB4MS44cDUyIC8gVEJMU0laRSwKLSAgICBQMQkgICAgID0gMHgxLjYyZTQyZmVmYTM5ZWZwLTEsCi0gICAgUDIJICAgICA9IDB4MS5lYmZiZGZmODJjNTc1cC0zLAotICAgIFAzCSAgICAgPSAweDEuYzZiMDhkNzA0YTBhNnAtNSwKLSAgICBQNAkgICAgID0gMHgxLjNiMmFiODhmNzA0MDBwLTcsCi0gICAgUDUJICAgICA9IDB4MS41ZDg4MDAzODc1Yzc0cC0xMDsKLQotc3RhdGljIGNvbnN0IGRvdWJsZSB0YmxbVEJMU0laRSAqIDJdID0gewotLyoJZXhwMih6ICsgZXBzKQkJZXBzCSovCi0JMHgxLjZhMDllNjY3ZjNkNWRwLTEsCSAweDEuOTg4MHAtNDQsCi0JMHgxLjZiMDUyZmE3NTE3NDRwLTEsCSAweDEuODAwMHAtNTAsCi0JMHgxLjZjMDEyNzUwYmQ5ZmVwLTEsCS0weDEuODc4MHAtNDUsCi0JMHgxLjZjZmRjZGRkNDc2YmZwLTEsCSAweDEuZWMwMHAtNDYsCi0JMHgxLjZkZmIyM2M2NTFhMjlwLTEsCS0weDEuODAwMHAtNTAsCi0JMHgxLjZlZjkyOTg1OTNhZTNwLTEsCS0weDEuYzAwMHAtNTIsCi0JMHgxLjZmZjdkZjk1MTkzODZwLTEsCS0weDEuZmQ4MHAtNDUsCi0JMHgxLjcwZjc0NjZmNDJkYTNwLTEsCS0weDEuYzg4MHAtNDUsCi0JMHgxLjcxZjc1ZThlYzVmYzNwLTEsCSAweDEuM2MwMHAtNDYsCi0JMHgxLjcyZjgyODZlYWNmMDVwLTEsCS0weDEuODMwMHAtNDQsCi0JMHgxLjczZjlhNDhhNTgxNTJwLTEsCS0weDEuMGMwMHAtNDcsCi0JMHgxLjc0ZmJkMzVkN2NjZmNwLTEsCSAweDEuZjg4MHAtNDUsCi0JMHgxLjc1ZmViNTY0MjY3ZjFwLTEsCSAweDEuM2UwMHAtNDcsCi0JMHgxLjc3MDI0YjFhYjZkNDhwLTEsCS0weDEuN2QwMHAtNDUsCi0JMHgxLjc4MDY5NGZkZTVkMzhwLTEsCS0weDEuZDAwMHAtNTAsCi0JMHgxLjc5MGI5MzhhYzFkMDBwLTEsCSAweDEuMzAwMHAtNDksCi0JMHgxLjdhMTE0NzNlYjAxNzhwLTEsCS0weDEuZDAwMHAtNDksCi0JMHgxLjdiMTdiMDk3NmQwNjBwLTEsCSAweDEuMDQwMHAtNDUsCi0JMHgxLjdjMWVkMDEzMGMxMzNwLTEsCSAweDEuMDAwMHAtNTMsCi0JMHgxLjdkMjZhNjJmZjg2MzZwLTEsCS0weDEuNjkwMHAtNDUsCi0JMHgxLjdlMmYzMzZjZjRlM2JwLTEsCS0weDEuMmUwMHAtNDcsCi0JMHgxLjdmMzg3ODQ5MWMzZThwLTEsCS0weDEuNDU4MHAtNDUsCi0JMHgxLjgwNDI3NTQzZTFiNGVwLTEsCSAweDEuMzAwMHAtNDQsCi0JMHgxLjgxNGQyYWRkMTA3MWFwLTEsCSAweDEuZjAwMHAtNDcsCi0JMHgxLjgyNTg5OTk0Y2NkN2VwLTEsCS0weDEuMWMwMHAtNDUsCi0JMHgxLjgzNjRjMWViOTQyZDBwLTEsCSAweDEuOWQwMHAtNDUsCi0JMHgxLjg0NzFhNDYyM2NhYjVwLTEsCSAweDEuNzEwMHAtNDMsCi0JMHgxLjg1N2Y0MTc5ZjViYmNwLTEsCSAweDEuMjYwMHAtNDUsCi0JMHgxLjg2OGQ5OWI0NDkxYWZwLTEsCS0weDEuMmM0MHAtNDQsCi0JMHgxLjg3OWNhZDkzMWEzOTVwLTEsCS0weDEuMzAwMHAtNDUsCi0JMHgxLjg4YWM3ZDk4YTY1YjhwLTEsCS0weDEuYTgwMHAtNDUsCi0JMHgxLjg5YmQwYTQ3ODU4MDBwLTEsCS0weDEuZDAwMHAtNDksCi0JMHgxLjhhY2U1NDIyYWEyMjNwLTEsCSAweDEuMzI4MHAtNDQsCi0JMHgxLjhiZTA1YmFkNjE5ZmFwLTEsCSAweDEuMmI0MHAtNDMsCi0JMHgxLjhjZjMyMTZiNTQzODNwLTEsCS0weDEuZWQwMHAtNDUsCi0JMHgxLjhlMDZhNWUwODY2NGNwLTEsCS0weDEuMDUwMHAtNDUsCi0JMHgxLjhmMWFlOTkxNTc4MDdwLTEsCSAweDEuODI4MHAtNDUsCi0JMHgxLjkwMmZlZDAyODJjMGVwLTEsCS0weDEuY2IwMHAtNDYsCi0JMHgxLjkxNDViMGI5MWZmOTZwLTEsCS0weDEuNWUwMHAtNDcsCi0JMHgxLjkyNWMzNTNhYTJmZjlwLTEsCSAweDEuNTQwMHAtNDgsCi0JMHgxLjkzNzM3YjBjZGM2NGFwLTEsCSAweDEuNzIwMHAtNDYsCi0JMHgxLjk0OGI4MmI1Zjk4YWVwLTEsCS0weDEuOTAwMHAtNDcsCi0JMHgxLjk1YTQ0Y2JjODUyY2JwLTEsCSAweDEuNTY4MHAtNDUsCi0JMHgxLjk2YmRkOWE3NjZmMjFwLTEsCS0weDEuNmQwMHAtNDQsCi0JMHgxLjk3ZDgyOWZkZTRlMmFwLTEsCS0weDEuMTAwMHAtNDcsCi0JMHgxLjk4ZjMzZTQ3YTIzYTNwLTEsCSAweDEuZDAwMHAtNDUsCi0JMHgxLjlhMGYxNzBjYTA2MDRwLTEsCS0weDEuOGE0MHAtNDQsCi0JMHgxLjliMmJiNGQ1M2ZmODlwLTEsCSAweDEuNTVjMHAtNDQsCi0JMHgxLjljNDkxODJhM2YxNWJwLTEsCSAweDEuNmI4MHAtNDUsCi0JMHgxLjlkNjc0MTk0YmI4YzVwLTEsCS0weDEuYzAwMHAtNDksCi0JMHgxLjllODYzMTllMzIzOGVwLTEsCSAweDEuN2QwMHAtNDYsCi0JMHgxLjlmYTVlOGQwN2YzMDJwLTEsCSAweDEuNjQwMHAtNDYsCi0JMHgxLmEwYzY2N2I1ZGU1NGRwLTEsCS0weDEuNTAwMHAtNDgsCi0JMHgxLmExZTdhZWQ4ZWI4ZjZwLTEsCSAweDEuOWUwMHAtNDcsCi0JMHgxLmEzMDliZWM0YTJlMjdwLTEsCSAweDEuYWQ4MHAtNDUsCi0JMHgxLmE0MmM5ODA0NjBhNWRwLTEsCS0weDEuYWYwMHAtNDYsCi0JMHgxLmE1NTAzYjIzZTI1OWJwLTEsCSAweDEuYjYwMHAtNDcsCi0JMHgxLmE2NzRhOGFmNDYyMTNwLTEsCSAweDEuODg4MHAtNDQsCi0JMHgxLmE3OTllMTMzMGIzYTdwLTEsCSAweDEuMTIwMHAtNDYsCi0JMHgxLmE4YmZlNTNjMTJlOGRwLTEsCSAweDEuNmMwMHAtNDcsCi0JMHgxLmE5ZTZiNTU3OWZjZDJwLTEsCS0weDEuOWI4MHAtNDUsCi0JMHgxLmFiMGU1MjEzNTZmYjhwLTEsCSAweDEuYjcwMHAtNDUsCi0JMHgxLmFjMzZiYmZkM2YzODFwLTEsCSAweDEuOTAwMHAtNTAsCi0JMHgxLmFkNWZmM2EzYzI3ODBwLTEsCSAweDEuNDAwMHAtNDksCi0JMHgxLmFlODlmOTk1YWQyYTNwLTEsCS0weDEuYzkwMHAtNDUsCi0JMHgxLmFmYjRjZTYyMmYzNjdwLTEsCSAweDEuNjUwMHAtNDYsCi0JMHgxLmIwZTA3Mjk4ZGI3OTBwLTEsCSAweDEuZmQ0MHAtNDUsCi0JMHgxLmIyMGNlNmM5YTg5YTlwLTEsCSAweDEuMjcwMHAtNDYsCi0JMHgxLmIzM2EyYjg0ZjFhNGJwLTEsCSAweDEuZDQ3MHAtNDMsCi0JMHgxLmI0Njg0MTViNzQ3ZTdwLTEsCS0weDEuODM4MHAtNDQsCi0JMHgxLmI1OTcyOGRlNTU5M2FwLTEsCSAweDEuODAwMHAtNTQsCi0JMHgxLmI2YzZlMjlmMWM1NmFwLTEsCSAweDEuYWQwMHAtNDcsCi0JMHgxLmI3Zjc2ZjJmYjVlNTBwLTEsCSAweDEuZTgwMHAtNTAsCi0JMHgxLmI5MjhjZjIyNzQ5YjJwLTEsCS0weDEuNGMwMHAtNDcsCi0JMHgxLmJhNWIwMzBhMTA2MDNwLTEsCS0weDEuZDcwMHAtNDcsCi0JMHgxLmJiOGUwYjc5YTZmNjZwLTEsCSAweDEuZDkwMHAtNDcsCi0JMHgxLmJjYzFlOTA0YmMxZmZwLTEsCSAweDEuMmEwMHAtNDcsCi0JMHgxLmJkZjY5YzNmM2ExNmZwLTEsCS0weDEuZjc4MHAtNDYsCi0JMHgxLmJmMmMyNWJkNzFkYjhwLTEsCS0weDEuMGEwMHAtNDYsCi0JMHgxLmMwNjI4NjE0MWIyZTlwLTEsCS0weDEuMTQwMHAtNDYsCi0JMHgxLmMxOTliZGQ4NTUyZTBwLTEsCSAweDEuYmUwMHAtNDcsCi0JMHgxLmMyZDFjZDlmYTY0ZWVwLTEsCS0weDEuOTQwMHAtNDcsCi0JMHgxLmM0MGFiNWZmZmQwMmZwLTEsCS0weDEuZWQwMHAtNDcsCi0JMHgxLmM1NDQ3NzhmYWZkMTVwLTEsCSAweDEuOTY2MHAtNDQsCi0JMHgxLmM2N2YxMmU1N2QwY2JwLTEsCS0weDEuYTEwMHAtNDYsCi0JMHgxLmM3YmE4ODk4OGMxYjZwLTEsCS0weDEuODQ1OHAtNDIsCi0JMHgxLmM4ZjZkOTQwNmU3MzNwLTEsCS0weDEuYTQ4MHAtNDYsCi0JMHgxLmNhMzQwNTc1MWM0ZGZwLTEsCSAweDEuYjAwMHAtNTEsCi0JMHgxLmNiNzIwZGNlZjkwOTRwLTEsCSAweDEuMTQwMHAtNDcsCi0JMHgxLmNjYjBmMmU2ZDE2ODlwLTEsCSAweDEuMDIwMHAtNDgsCi0JMHgxLmNkZjBiNTU1ZGM0MTJwLTEsCSAweDEuMzYwMHAtNDgsCi0JMHgxLmNmMzE1NWI1YmFiM2JwLTEsCS0weDEuNjkwMHAtNDcsCi0JMHgxLmQwNzJkNGEwNzg5YmNwLTEsCSAweDEuOWEwMHAtNDcsCi0JMHgxLmQxYjUzMmIwOGM4ZmFwLTEsCS0weDEuNWUwMHAtNDYsCi0JMHgxLmQyZjg3MDgwZDhhODVwLTEsCSAweDEuZDI4MHAtNDYsCi0JMHgxLmQ0M2M4ZWFjYWEyMDNwLTEsCSAweDEuMWEwMHAtNDcsCi0JMHgxLmQ1ODE4ZGNmYmE0OTFwLTEsCSAweDEuZjAwMHAtNTAsCi0JMHgxLmQ2Yzc2ZTg2MmU2YTFwLTEsCS0weDEuM2EwMHAtNDcsCi0JMHgxLmQ4MGUzMTZjOTgzNGVwLTEsCS0weDEuY2Q4MHAtNDcsCi0JMHgxLmQ5NTVkNzFmZjYwOTBwLTEsCSAweDEuNGMwMHAtNDgsCi0JMHgxLmRhOWU2MDNkYjMyYWVwLTEsCSAweDEuZjkwMHAtNDgsCi0JMHgxLmRiZTdjZDYzYTgzMjVwLTEsCSAweDEuOTgwMHAtNDksCi0JMHgxLmRkMzIxZjMwMWI0NDVwLTEsCS0weDEuNTIwMHAtNDgsCi0JMHgxLmRlN2Q1NjQxYzA1YmZwLTEsCS0weDEuZDcwMHAtNDYsCi0JMHgxLmRmYzk3MzM3YjlhZWNwLTEsCS0weDEuNjE0MHAtNDYsCi0JMHgxLmUxMTY3NmIxOTdkNWVwLTEsCSAweDEuYjQ4MHAtNDcsCi0JMHgxLmUyNjQ2MTRmNWEzZTdwLTEsCSAweDEuMGNlMHAtNDMsCi0JMHgxLmUzYjMzM2IxNmVlNWNwLTEsCSAweDEuYzY4MHAtNDcsCi0JMHgxLmU1MDJlZTc4YjNmYjRwLTEsCS0weDEuOTMwMHAtNDcsCi0JMHgxLmU2NTM5MjQ2NzZkNjhwLTEsCS0weDEuNTAwMHAtNDksCi0JMHgxLmU3YTUxZmJjNzRjNDRwLTEsCS0weDEuN2Y4MHAtNDcsCi0JMHgxLmU4Zjc5NzdjZGI3MjZwLTEsCS0weDEuMzcwMHAtNDgsCi0JMHgxLmVhNGFmYTJhNDkwZThwLTEsCSAweDEuNWQwMHAtNDksCi0JMHgxLmViOWY0ODY3Y2NhZTRwLTEsCSAweDEuNjFhMHAtNDYsCi0JMHgxLmVjZjQ4MmQ4ZTY4MGRwLTEsCSAweDEuNTUwMHAtNDgsCi0JMHgxLmVlNGFhYTIxODg1MTRwLTEsCSAweDEuNjQwMHAtNTEsCi0JMHgxLmVmYTFiZWU2MTVhMTNwLTEsCS0weDEuZTgwMHAtNDksCi0JMHgxLmYwZjljMWNiNjQxMDZwLTEsCS0weDEuYTg4MHAtNDgsCi0JMHgxLmYyNTJiMzc2YmI5NjNwLTEsCS0weDEuYzkwMHAtNDUsCi0JMHgxLmYzYWM5NDhkZDcyNzVwLTEsCSAweDEuYTAwMHAtNTMsCi0JMHgxLmY1MDc2NWI2ZTQ1MjRwLTEsCS0weDEuNGYwMHAtNDgsCi0JMHgxLmY2NjMyNzk4ODQ0ZmRwLTEsCSAweDEuYTgwMHAtNTEsCi0JMHgxLmY3YmZkYWQ5Y2JlMzhwLTEsCSAweDEuYWJjMHAtNDgsCi0JMHgxLmY5MWQ4MDIyNDNjODJwLTEsCS0weDEuNDYwMHAtNTAsCi0JMHgxLmZhN2MxODE5ZTkwOGVwLTEsCS0weDEuYjBjMHAtNDcsCi0JMHgxLmZiZGJhMzY5MmQ1MTFwLTEsCS0weDEuMGUwMHAtNTEsCi0JMHgxLmZkM2MyMmI4ZjcxOTRwLTEsCS0weDEuMGRlOHAtNDYsCi0JMHgxLmZlOWQ5NmIyYTIzZWVwLTEsCSAweDEuZTQzMHAtNDksCi0JMHgxLjAwMDAwMDAwMDAwMDBwKzAsCSAweDAuMDAwMHArMCwKLQkweDEuMDBiMWFmYTVhYmNiZXArMCwJLTB4MS4zNDAwcC01MiwKLQkweDEuMDE2M2RhOWZiMzMwM3ArMCwJLTB4MS4yMTcwcC00NiwKLQkweDEuMDIxNjgxNDNiMDI4MnArMCwJIDB4MS5hNDAwcC01MiwKLQkweDEuMDJjOWEzZTc3ODA2Y3ArMCwJIDB4MS5mOTgwcC00OSwKLQkweDEuMDM3ZDQyZTExYmJjYXArMCwJLTB4MS43NDAwcC01MSwKLQkweDEuMDQzMTVlODZlN2Y4OXArMCwJIDB4MS44MzAwcC01MCwKLQkweDEuMDRlNWY3MmY2NTQ2N3ArMCwJLTB4MS5hM2YwcC00NiwKLQkweDEuMDU5YjBkMzE1ODU1YXArMCwJLTB4MS4yODQwcC00NywKLQkweDEuMDY1MGEwZTNjMWY5NXArMCwJIDB4MS4xNjAwcC00OCwKLQkweDEuMDcwNmIyOWRkZjcxYXArMCwJIDB4MS41MjQwcC00NiwKLQkweDEuMDdiZDQyYjcyYTgyZHArMCwJLTB4MS45YTAwcC00OSwKLQkweDEuMDg3NDUxODc1OWJkMHArMCwJIDB4MS42NDAwcC00OSwKLQkweDEuMDkyYmRmNjY2MDdjOHArMCwJLTB4MS4wNzgwcC00NywKLQkweDEuMDllM2VjYWM2ZjM4M3ArMCwJLTB4MS44MDAwcC01NCwKLQkweDEuMGE5Yzc5YjFmMzkzMHArMCwJIDB4MS5mYTAwcC00OCwKLQkweDEuMGI1NTg2Y2Y5ODhmY3ArMCwJLTB4MS5hYzgwcC00OCwKLQkweDEuMGMwZjE0NWU0NmM4YXArMCwJIDB4MS45YzAwcC01MCwKLQkweDEuMGNjOTIyYjcyNDgxNnArMCwJIDB4MS41MjAwcC00NywKLQkweDEuMGQ4M2IyMzM5NWRkOHArMCwJLTB4MS5hZDAwcC00OCwKLQkweDEuMGUzZWMzMmQzZDFmM3ArMCwJIDB4MS5iYWMwcC00NiwKLQkweDEuMGVmYTU1ZmRmYTlhNnArMCwJLTB4MS40ZTgwcC00NywKLQkweDEuMGZiNjZhZmZlZDJmMHArMCwJLTB4MS5kMzAwcC00NywKLQkweDEuMTA3MzAyOGQ3MjM0YnArMCwJIDB4MS4xNTAwcC00OCwKLQkweDEuMTEzMDFkMDEyNWI1YnArMCwJIDB4MS5jMDAwcC00OSwKLQkweDEuMTFlZGJhYjVlMmFmOXArMCwJIDB4MS42YmMwcC00NiwKLQkweDEuMTJhYmRjMDZjMzFkNXArMCwJIDB4MS44NDAwcC00OSwKLQkweDEuMTM2YTgxNGYyMDQ3ZHArMCwJLTB4MS5lZDAwcC00NywKLQkweDEuMTQyOWFhZWE5MmRlOXArMCwJIDB4MS44ZTAwcC00OSwKLQkweDEuMTRlOTU5MzRmMzEzOHArMCwJIDB4MS5iNDAwcC00OSwKLQkweDEuMTVhOThjOGE1OGU3MXArMCwJIDB4MS41MzAwcC00NywKLQkweDEuMTY2YTQ1NDcxYzNkZnArMCwJIDB4MS4zMzgwcC00NywKLQkweDEuMTcyYjgzYzdkNTIxMXArMCwJIDB4MS44ZDQwcC00NSwKLQkweDEuMTdlZDQ4Njk1YmI5ZnArMCwJLTB4MS41ZDAwcC00NywKLQkweDEuMThhZjkzODhjOGQ5M3ArMCwJLTB4MS5jODgwcC00NiwKLQkweDEuMTk3MjY1ODM3NWQ2NnArMCwJIDB4MS4xZjAwcC00NiwKLQkweDEuMWEzNWJlYjZmY2JhN3ArMCwJIDB4MS4wNDgwcC00NiwKLQkweDEuMWFmOTlmODEzODdlM3ArMCwJLTB4MS43MzkwcC00MywKLQkweDEuMWJiZTA4NDA0NWQ1NHArMCwJIDB4MS40ZTQwcC00NSwKLQkweDEuMWM4MmY5NTI4MWM0M3ArMCwJLTB4MS5hMjAwcC00NywKLQkweDEuMWQ0ODczMTY4YjliMnArMCwJIDB4MS4zODAwcC00OSwKLQkweDEuMWUwZTc1ZWI0NDAzMXArMCwJIDB4MS5hYzAwcC00OSwKLQkweDEuMWVkNTAyMmZjZDkzOHArMCwJIDB4MS4xOTAwcC00NywKLQkweDEuMWY5YzE4NDM4Y2RmN3ArMCwJLTB4MS5iNzgwcC00NiwKLQkweDEuMjA2M2I4ODYyOGQ4ZnArMCwJIDB4MS5kOTQwcC00NSwKLQkweDEuMjEyYmUzNTc4YTgxZXArMCwJIDB4MS44MDAwcC01MCwKLQkweDEuMjFmNDk5MTdkZGQ0MXArMCwJIDB4MS5iMzQwcC00NSwKLQkweDEuMjJiZGRhMjc5MTMyM3ArMCwJIDB4MS45ZjgwcC00NiwKLQkweDEuMjM4N2E2ZTc1NjFlN3ArMCwJLTB4MS45YzgwcC00NiwKLQkweDEuMjQ1MWZmYjgyMTQyN3ArMCwJIDB4MS4yMzAwcC00NywKLQkweDEuMjUxY2U0ZmIyYTYwMnArMCwJLTB4MS4zNDgwcC00NiwKLQkweDEuMjVlODU3MTFlY2ViMHArMCwJIDB4MS4yNzAwcC00NiwKLQkweDEuMjZiNDU2NWUyN2QxNnArMCwJIDB4MS4xZDAwcC00NiwKLQkweDEuMjc4MGUzNDFkZTAwZnArMCwJIDB4MS4xZWUwcC00NCwKLQkweDEuMjg0ZGZlMWY1NjMzZXArMCwJLTB4MS40YzAwcC00NiwKLQkweDEuMjkxYmE3NTkxYmIzMHArMCwJLTB4MS4zZDgwcC00NiwKLQkweDEuMjllOWRmNTFmZGYwOXArMCwJIDB4MS44YjAwcC00NywKLQkweDEuMmFiOGE2NmQxMGU5YnArMCwJLTB4MS4yN2MwcC00NSwKLQkweDEuMmI4N2ZkMGRhZGEzYXArMCwJIDB4MS5hMzQwcC00NSwKLQkweDEuMmM1N2UzOTc3MWFmOXArMCwJLTB4MS4wODAwcC00NiwKLQkweDEuMmQyODVhNmU0MDJkOXArMCwJLTB4MS5lZDAwcC00NywKLQkweDEuMmRmOTYxZjY0MTU3OXArMCwJLTB4MS40MjAwcC00OCwKLQkweDEuMmVjYWZhOTNlMmVjZnArMCwJLTB4MS40OTgwcC00NSwKLQkweDEuMmY5ZDI0YWJkODgyMnArMCwJLTB4MS42MzAwcC00NiwKLQkweDEuMzA2ZmUwYTMxYjYyNXArMCwJLTB4MS4yMzYwcC00NCwKLQkweDEuMzE0MzJlZGVlYTUwYnArMCwJLTB4MS4wZGY4cC00MCwKLQkweDEuMzIxNzBmYzRjZDdiOHArMCwJLTB4MS4yNDgwcC00NSwKLQkweDEuMzJlYjgzYmE4ZTlhMnArMCwJLTB4MS41OTgwcC00NSwKLQkweDEuMzNjMDhiMjY0MTc2NnArMCwJIDB4MS5lZDAwcC00NiwKLQkweDEuMzQ5NjI2NmUzZmEyN3ArMCwJLTB4MS5jMDAwcC01MCwKLQkweDEuMzU2YzU1ZjkyOWYwZnArMCwJLTB4MS4wZDgwcC00NCwKLQkweDEuMzY0MzFhMmRlODhiOXArMCwJIDB4MS4yYzgwcC00NSwKLQkweDEuMzcxYTczNzNhYWEzOXArMCwJIDB4MS4wNjAwcC00NSwKLQkweDEuMzdmMjYyMzFlNzRmZXArMCwJLTB4MS42NjAwcC00NiwKLQkweDEuMzhjYWU2ZDA1ZDgzOHArMCwJLTB4MS5hZTAwcC00NywKLQkweDEuMzlhNDAxYjcxM2VjM3ArMCwJLTB4MS40NzIwcC00MywKLQkweDEuM2E3ZGIzNGU1YTAyMHArMCwJIDB4MS44MjAwcC00NywKLQkweDEuM2I1N2ZiZmVjNmU5NXArMCwJIDB4MS5lODAwcC00NCwKLQkweDEuM2MzMmRjMzEzYThmMnArMCwJIDB4MS5mODAwcC00OSwKLQkweDEuM2QwZTU0NGVkZTEyMnArMCwJLTB4MS43YTAwcC00NiwKLQkweDEuM2RlYTY0YzEyMzRiYnArMCwJIDB4MS42MzAwcC00NSwKLQkweDEuM2VjNzBkZjFjNGVjY3ArMCwJLTB4MS44YTYwcC00MywKLQkweDEuM2ZhNDUwNGFjN2U4Y3ArMCwJLTB4MS5jZGMwcC00NCwKLQkweDEuNDA4MjJjMzY3YTBiYnArMCwJIDB4MS41YjgwcC00NSwKLQkweDEuNDE2MGEyMWY3MmU5NXArMCwJIDB4MS5lYzAwcC00NiwKLQkweDEuNDIzZmIyNzA5NDY0NnArMCwJLTB4MS4zNjAwcC00NiwKLQkweDEuNDMxZjVkOTUwYTkyMHArMCwJIDB4MS4zOTgwcC00NSwKLQkweDEuNDNmZmEzZjg0YjllYnArMCwJIDB4MS5hMDAwcC00OCwKLQkweDEuNDRlMDg2MDYxODkxOXArMCwJLTB4MS42YzAwcC00OCwKLQkweDEuNDVjMjA0MmE3ZDIwMXArMCwJLTB4MS5iYzAwcC00NywKLQkweDEuNDZhNDFlZDFkMDAxNnArMCwJLTB4MS4yODAwcC00NiwKLQkweDEuNDc4NmQ2NjhiMzMyNnArMCwJIDB4MS4wZTAwcC00NCwKLQkweDEuNDg2YTJiNWMxM2MwMHArMCwJLTB4MS5kNDAwcC00NSwKLQkweDEuNDk0ZTFlMTkyYWYwNHArMCwJIDB4MS5jMjAwcC00NywKLQkweDEuNGEzMmFmMGQ3ZDM3MnArMCwJLTB4MS5lNTAwcC00NiwKLQkweDEuNGIxN2RlYTZkYjgwMXArMCwJIDB4MS43ODAwcC00NywKLQkweDEuNGJmZGFkNTM2MjllMXArMCwJLTB4MS4zODAwcC00NiwKLQkweDEuNGNlNDFiODE3YzEzMnArMCwJIDB4MS4wODAwcC00NywKLQkweDEuNGRjYjI5OWZkZGRkYnArMCwJIDB4MS5jNzAwcC00NSwKLQkweDEuNGViMmQ4MWQ4YWI5NnArMCwJLTB4MS5jZTAwcC00NiwKLQkweDEuNGY5YjI3NjlkMmQwMnArMCwJIDB4MS45MjAwcC00NiwKLQkweDEuNTA4NDE3ZjQ1MzFjMXArMCwJLTB4MS44YzAwcC00NywKLQkweDEuNTE2ZGFhMmNmNjYyYXArMCwJLTB4MS5hMDAwcC00OCwKLQkweDEuNTI1N2RlODNmNTFlYXArMCwJIDB4MS5hMDgwcC00MywKLQkweDEuNTM0MmI1NjlkNGVkYXArMCwJLTB4MS42ZDgwcC00NSwKLQkweDEuNTQyZTJmNGY2YWMxYXArMCwJLTB4MS4yNDQwcC00NCwKLQkweDEuNTUxYTRjYTVkOTRkYnArMCwJIDB4MS44M2MwcC00MywKLQkweDEuNTYwNzBkZGU5MTE2YnArMCwJIDB4MS40YjAwcC00NSwKLQkweDEuNTZmNDczNmI1MjlkZXArMCwJIDB4MS4xNWEwcC00MywKLQkweDEuNTdlMjdkYmUyYzQwZXArMCwJLTB4MS45ZTAwcC00NSwKLQkweDEuNThkMTJkNDk3Yzc2ZnArMCwJLTB4MS4zMDgwcC00NSwKLQkweDEuNTljMDgyN2ZmMGI0Y3ArMCwJIDB4MS5kZWMwcC00MywKLQkweDEuNWFiMDdkZDQ4NTQyN3ArMCwJLTB4MS40MDAwcC01MSwKLQkweDEuNWJhMTFmYmE4N2FmNHArMCwJIDB4MS4wMDgwcC00NCwKLQkweDEuNWM5MjY4YTU5NDYwYnArMCwJLTB4MS42YzgwcC00NSwKLQkweDEuNWQ4NDU5MDk5OGUzZnArMCwJIDB4MS42OWEwcC00MywKLQkweDEuNWU3NmYxNWFkMjBlMXArMCwJLTB4MS5iNDAwcC00NiwKLQkweDEuNWY2YTMyMGRjZWJjYXArMCwJIDB4MS43NzAwcC00NiwKLQkweDEuNjA1ZTFiOTc2ZGNiOHArMCwJIDB4MS42ZjgwcC00NSwKLQkweDEuNjE1MmFlNmNkZjcxNXArMCwJIDB4MS4xMDAwcC00NywKLQkweDEuNjI0N2ViMDNhNTUzMXArMCwJLTB4MS41ZDAwcC00NiwKLQkweDEuNjMzZGQxZDE5MjliNXArMCwJLTB4MS4yZDAwcC00NiwKLQkweDEuNjQzNDYzNGNjYzMxM3ArMCwJLTB4MS5hODAwcC00OSwKLQkweDEuNjUyYjlmZWJjOGVmYXArMCwJLTB4MS44NjAwcC00NSwKLQkweDEuNjYyMzg4MjU1MzM5N3ArMCwJIDB4MS4xZmUwcC00MCwKLQkweDEuNjcxYzFjNzA4MzI4ZXArMCwJLTB4MS43MjAwcC00NCwKLQkweDEuNjgxNTVkNDRjYTk3ZXArMCwJIDB4MS42ODAwcC00OSwKLQkweDEuNjkwZjRiMTllOTQ3MXArMCwJLTB4MS45NzgwcC00NSwKLX07Ci0KLS8qCi0gKiBleHAyKHgpOiBjb21wdXRlIHRoZSBiYXNlIDIgZXhwb25lbnRpYWwgb2YgeAotICoKLSAqIEFjY3VyYWN5OiBQZWFrIGVycm9yIDwgMC41MDMgdWxwIGZvciBub3JtYWxpemVkIHJlc3VsdHMuCi0gKgotICogTWV0aG9kOiAoYWNjdXJhdGUgdGFibGVzKQotICoKLSAqICAgUmVkdWNlIHg6Ci0gKiAgICAgeCA9IDIqKmsgKyB5LCBmb3IgaW50ZWdlciBrIGFuZCB8eXwgPD0gMS8yLgotICogICAgIFRodXMgd2UgaGF2ZSBleHAyKHgpID0gMioqayAqIGV4cDIoeSkuCi0gKgotICogICBSZWR1Y2UgeToKLSAqICAgICB5ID0gaS9UQkxTSVpFICsgeiAtIGVwc1tpXSBmb3IgaW50ZWdlciBpIG5lYXIgeSAqIFRCTFNJWkUuCi0gKiAgICAgVGh1cyB3ZSBoYXZlIGV4cDIoeSkgPSBleHAyKGkvVEJMU0laRSkgKiBleHAyKHogLSBlcHNbaV0pLAotICogICAgIHdpdGggfHogLSBlcHNbaV18IDw9IDIqKi05ICsgMioqLTM5IGZvciB0aGUgdGFibGUgdXNlZC4KLSAqCi0gKiAgIFdlIGNvbXB1dGUgZXhwMihpL1RCTFNJWkUpIHZpYSB0YWJsZSBsb29rdXAgYW5kIGV4cDIoeiAtIGVwc1tpXSkgdmlhCi0gKiAgIGEgZGVncmVlLTUgbWluaW1heCBwb2x5bm9taWFsIHdpdGggbWF4aW11bSBlcnJvciB1bmRlciAxLjMgKiAyKiotNjEuCi0gKiAgIFRoZSB2YWx1ZXMgaW4gZXhwMnRbXSBhbmQgZXBzW10gYXJlIGNob3NlbiBzdWNoIHRoYXQKLSAqICAgZXhwMnRbaV0gPSBleHAyKGkvVEJMU0laRSArIGVwc1tpXSksIGFuZCBlcHNbaV0gaXMgYSBzbWFsbCBvZmZzZXQgc3VjaAotICogICB0aGF0IGV4cDJ0W2ldIGlzIGFjY3VyYXRlIHRvIDIqKi02NC4KLSAqCi0gKiAgIE5vdGUgdGhhdCB0aGUgcmFuZ2Ugb2YgaSBpcyArLVRCTFNJWkUvMiwgc28gd2UgYWN0dWFsbHkgaW5kZXggdGhlIHRhYmxlcwotICogICBieSBpMCA9IGkgKyBUQkxTSVpFLzIuICBGb3IgY2FjaGUgZWZmaWNpZW5jeSwgZXhwMnRbXSBhbmQgZXBzW10gYXJlCi0gKiAgIHZpcnR1YWwgdGFibGVzLCBpbnRlcmxlYXZlZCBpbiB0aGUgcmVhbCB0YWJsZSB0YmxbXS4KLSAqCi0gKiAgIFRoaXMgbWV0aG9kIGlzIGR1ZSB0byBHYWwsIHdpdGggbWFueSBkZXRhaWxzIGR1ZSB0byBHYWwgYW5kIEJhY2hlbGlzOgotICoKLSAqCUdhbCwgUy4gYW5kIEJhY2hlbGlzLCBCLiAgQW4gQWNjdXJhdGUgRWxlbWVudGFyeSBNYXRoZW1hdGljYWwgTGlicmFyeQotICoJZm9yIHRoZSBJRUVFIEZsb2F0aW5nIFBvaW50IFN0YW5kYXJkLiAgVE9NUyAxNygxKSwgMjYtNDYgKDE5OTEpLgotICovCi1kb3VibGUKLWV4cDIoZG91YmxlIHgpCi17Ci0JZG91YmxlIHIsIHQsIHo7Ci0JdWludDMyX3QgaHgsIGhyLCBpeCwgbHgsIGkwOwotCWludCBrOwotCi0JLyogRmlsdGVyIG91dCBleGNlcHRpb25hbCBjYXNlcy4gKi8KLQlHRVRfSElHSF9XT1JEKGh4LHgpOwotCWl4ID0gaHggJiAweDdmZmZmZmZmOwkJLyogaGlnaCB3b3JkIG9mIHx4fCAqLwotCWlmKGl4ID49IDB4NDA5MDAwMDApIHsJCQkvKiB8eHwgPj0gMTAyNCAqLwotCQlpZihpeCA+PSAweDdmZjAwMDAwKSB7Ci0JCQlHRVRfTE9XX1dPUkQobHgseCk7Ci0JCQlpZigoKGl4ICYgMHhmZmZmZikgfCBseCkgIT0gMCB8fCAoaHggJiAweDgwMDAwMDAwKSA9PSAwKQotCQkJCXJldHVybiAoeCk7IAkvKiB4IGlzIE5hTiBvciArSW5mICovCi0JCQllbHNlIAotCQkJCXJldHVybiAoMC4wKTsJLyogeCBpcyAtSW5mICovCi0JCX0KLQkJaWYoeCA+PSAweDEuMHAxMCkKLQkJCXJldHVybiAoaHVnZSAqIGh1Z2UpOyAvKiBvdmVyZmxvdyAqLwotCQlpZih4IDw9IC0weDEuMGNjcDEwKQotCQkJcmV0dXJuICh0d29tMTAwMCAqIHR3b20xMDAwKTsgLyogdW5kZXJmbG93ICovCi0JfSBlbHNlIGlmIChpeCA8IDB4M2M5MDAwMDApIHsJCS8qIHx4fCA8IDB4MXAtNTQgKi8KLQkJcmV0dXJuICgxLjAgKyB4KTsKLQl9Ci0KLQkvKiBSZWR1Y2UgeCwgY29tcHV0aW5nIHosIGkwLCBhbmQgay4gKi8KLQl0ID0geCArIHJlZHV4OwotCUdFVF9MT1dfV09SRChpMCwgdCk7Ci0JaTAgKz0gVEJMU0laRSAvIDI7Ci0JayA9IChpMCA+PiBUQkxCSVRTKSA8PCAyMDsKLQlpMCA9IChpMCAmIChUQkxTSVpFIC0gMSkpIDw8IDE7Ci0JdCAtPSByZWR1eDsKLQl6ID0geCAtIHQ7Ci0KLQkvKiBDb21wdXRlIHIgPSBleHAyKHkpID0gZXhwMnRbaTBdICogcCh6IC0gZXBzW2ldKS4gKi8KLQl0ID0gdGJsW2kwXTsJCS8qIGV4cDJ0W2kwXSAqLwotCXogLT0gdGJsW2kwICsgMV07CS8qIGVwc1tpMF0gICAqLwotCXIgPSB0ICsgdCAqIHogKiAoUDEgKyB6ICogKFAyICsgeiAqIChQMyArIHogKiAoUDQgKyB6ICogUDUpKSkpOwotCi0JLyogU2NhbGUgYnkgMioqKGs+PjIwKS4gKi8KLQlpZihrID49IC0xMDIxIDw8IDIwKSB7Ci0JCWlmIChrICE9IDApIHsKLQkJCUdFVF9ISUdIX1dPUkQoaHIsIHIpOwotCQkJU0VUX0hJR0hfV09SRChyLCBociArIGspOwotCQl9Ci0JCXJldHVybiAocik7Ci0JfSBlbHNlIHsKLQkJR0VUX0hJR0hfV09SRChociwgcik7Ci0JCVNFVF9ISUdIX1dPUkQociwgaHIgKyAoayArICgxMDAwIDw8IDIwKSkpOwotCQlyZXR1cm4gKHIgKiB0d29tMTAwMCk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvbGlibS9zcmMvc19leHAyZi5jIGIvbGlibS9zcmMvc19leHAyZi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZTk4ZThhLi4wMDAwMDAwCi0tLSBhL2xpYm0vc3JjL3NfZXhwMmYuYworKysgL2Rldi9udWxsCkBAIC0xLDE0MSArMCwwIEBACi0vKi0KLSAqIENvcHlyaWdodCAoYykgMjAwNSBEYXZpZCBTY2h1bHR6IDxkYXNARnJlZUJTRC5PUkc+Ci0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KLS8qIF9fRkJTRElEKCIkRnJlZUJTRDogc3JjL2xpYi9tc3VuL3NyYy9zX2V4cDJmLmMsdiAxLjEgMjAwNS8wNC8wNSAwMjo1NzoxNSBkYXMgRXhwICQiKTsgKi8KLQotI2luY2x1ZGUgIm1hdGguaCIKLSNpbmNsdWRlICJtYXRoX3ByaXZhdGUuaCIKLQotI2RlZmluZQlUQkxCSVRTCTQKLSNkZWZpbmUJVEJMU0laRQkoMSA8PCBUQkxCSVRTKQotCi1zdGF0aWMgY29uc3QgZmxvYXQKLSAgICBodWdlICAgID0gMHgxcDEwMGYsCi0gICAgdHdvbTEwMCA9IDB4MXAtMTAwZiwKLSAgICByZWR1eCAgID0gMHgxLjhwMjNmIC8gVEJMU0laRSwKLSAgICBQMQkgICAgPSAweDEuNjJlNDMwcC0xZiwKLSAgICBQMgkgICAgPSAweDEuZWJmYmUwcC0zZiwKLSAgICBQMwkgICAgPSAweDEuYzZiMzQ4cC01ZiwKLSAgICBQNAkgICAgPSAweDEuM2IyYzljcC03ZjsKLQotc3RhdGljIGNvbnN0IGRvdWJsZSBleHAyZnRbVEJMU0laRV0gPSB7Ci0JMHgxLjZhMDllNjY3ZjNiY2RwLTEsCi0JMHgxLjdhMTE0NzNlYjAxODdwLTEsCi0JMHgxLjhhY2U1NDIyYWEwZGJwLTEsCi0JMHgxLjljNDkxODJhM2YwOTBwLTEsCi0JMHgxLmFlODlmOTk1YWQzYWRwLTEsCi0JMHgxLmMxOTliZGQ4NTUyOWNwLTEsCi0JMHgxLmQ1ODE4ZGNmYmE0ODdwLTEsCi0JMHgxLmVhNGFmYTJhNDkwZGFwLTEsCi0JMHgxLjAwMDAwMDAwMDAwMDBwKzAsCi0JMHgxLjBiNTU4NmNmOTg5MGZwKzAsCi0JMHgxLjE3MmI4M2M3ZDUxN2JwKzAsCi0JMHgxLjIzODdhNmU3NTYyMzhwKzAsCi0JMHgxLjMwNmZlMGEzMWI3MTVwKzAsCi0JMHgxLjNkZWE2NGMxMjM0MjJwKzAsCi0JMHgxLjRiZmRhZDUzNjJhMjdwKzAsCi0JMHgxLjVhYjA3ZGQ0ODU0MjlwKzAsCi19OwotCQotLyoKLSAqIGV4cDJmKHgpOiBjb21wdXRlIHRoZSBiYXNlIDIgZXhwb25lbnRpYWwgb2YgeAotICoKLSAqIEFjY3VyYWN5OiBQZWFrIGVycm9yIDwgMC41MDEgdWxwOyBsb2NhdGlvbiBvZiBwZWFrOiAtMC4wMzAxMTA5MjcuCi0gKgotICogTWV0aG9kOiAoZXF1YWxseS1zcGFjZWQgdGFibGVzKQotICoKLSAqICAgUmVkdWNlIHg6Ci0gKiAgICAgeCA9IDIqKmsgKyB5LCBmb3IgaW50ZWdlciBrIGFuZCB8eXwgPD0gMS8yLgotICogICAgIFRodXMgd2UgaGF2ZSBleHAyZih4KSA9IDIqKmsgKiBleHAyKHkpLgotICoKLSAqICAgUmVkdWNlIHk6Ci0gKiAgICAgeSA9IGkvVEJMU0laRSArIHogZm9yIGludGVnZXIgaSBuZWFyIHkgKiBUQkxTSVpFLgotICogICAgIFRodXMgd2UgaGF2ZSBleHAyKHkpID0gZXhwMihpL1RCTFNJWkUpICogZXhwMih6KSwKLSAqICAgICB3aXRoIHx6fCA8PSAyKiotKFRCTFNJWkUrMSkuCi0gKgotICogICBXZSBjb21wdXRlIGV4cDIoaS9UQkxTSVpFKSB2aWEgdGFibGUgbG9va3VwIGFuZCBleHAyKHopIHZpYSBhCi0gKiAgIGRlZ3JlZS00IG1pbmltYXggcG9seW5vbWlhbCB3aXRoIG1heGltdW0gZXJyb3IgdW5kZXIgMS40ICogMioqLTMzLgotICogICBVc2luZyBkb3VibGUgcHJlY2lzaW9uIGluIHRoZSBmaW5hbCBjYWxjdWxhdGlvbiBhdm9pZHMgcm91bmRvZmYgZXJyb3IuCi0gKgotICogICBUaGlzIG1ldGhvZCBpcyBkdWUgdG8gVGFuZywgYnV0IEkgZG8gbm90IHVzZSBoaXMgc3VnZ2VzdGVkIHBhcmFtZXRlcnM6Ci0gKgotICoJVGFuZywgUC4gIFRhYmxlLWRyaXZlbiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgRXhwb25lbnRpYWwgRnVuY3Rpb24KLSAqCWluIElFRUUgRmxvYXRpbmctUG9pbnQgQXJpdGhtZXRpYy4gIFRPTVMgMTUoMiksIDE0NC0xNTcgKDE5ODkpLgotICovCi1mbG9hdAotZXhwMmYoZmxvYXQgeCkKLXsKLQlkb3VibGUgdHY7Ci0JZmxvYXQgciwgejsKLQl2b2xhdGlsZSBmbG9hdCB0OwkvKiBwcmV2ZW50IGdjYyBmcm9tIHVzaW5nIHRvbyBtdWNoIHByZWNpc2lvbiAqLwotCXVpbnQzMl90IGh4LCBociwgaXgsIGkwOwotCWludDMyX3QgazsKLQotCS8qIEZpbHRlciBvdXQgZXhjZXB0aW9uYWwgY2FzZXMuICovCi0JR0VUX0ZMT0FUX1dPUkQoaHgseCk7Ci0JaXggPSBoeCAmIDB4N2ZmZmZmZmY7CQkvKiBoaWdoIHdvcmQgb2YgfHh8ICovCi0JaWYoaXggPj0gMHg0MzAwMDAwMCkgewkJCS8qIHx4fCA+PSAxMjggKi8KLQkJaWYoaXggPj0gMHg3ZjgwMDAwMCkgewotCQkJaWYgKChpeCAmIDB4N2ZmZmZmKSAhPSAwIHx8IChoeCAmIDB4ODAwMDAwMDApID09IDApCi0JCQkJcmV0dXJuICh4KTsgCS8qIHggaXMgTmFOIG9yICtJbmYgKi8KLQkJCWVsc2UgCi0JCQkJcmV0dXJuICgwLjApOwkvKiB4IGlzIC1JbmYgKi8KLQkJfQotCQlpZih4ID49IDB4MS4wcDdmKQotCQkJcmV0dXJuIChodWdlICogaHVnZSk7CS8qIG92ZXJmbG93ICovCi0JCWlmKHggPD0gLTB4MS4yY3A3ZikKLQkJCXJldHVybiAodHdvbTEwMCAqIHR3b20xMDApOyAvKiB1bmRlcmZsb3cgKi8KLQl9IGVsc2UgaWYgKGl4IDw9IDB4MzMwMDAwMDApIHsJCS8qIHx4fCA8PSAweDFwLTI1ICovCi0JCXJldHVybiAoMS4wZiArIHgpOwotCX0KLQotCS8qIFJlZHVjZSB4LCBjb21wdXRpbmcgeiwgaTAsIGFuZCBrLiAqLwotCXQgPSB4ICsgcmVkdXg7Ci0JR0VUX0ZMT0FUX1dPUkQoaTAsIHQpOwotCWkwICs9IFRCTFNJWkUgLyAyOwotCWsgPSAoaTAgPj4gVEJMQklUUykgPDwgMjM7Ci0JaTAgJj0gVEJMU0laRSAtIDE7Ci0JdCAtPSByZWR1eDsKLQl6ID0geCAtIHQ7Ci0KLQkvKiBDb21wdXRlIHIgPSBleHAyKHkpID0gZXhwMmZ0W2kwXSAqIHAoeikuICovCi0JdHYgPSBleHAyZnRbaTBdOwotCXIgPSB0diArIHR2ICogKHogKiAoUDEgKyB6ICogKFAyICsgeiAqIChQMyArIHogKiBQNCkpKSk7Ci0KLQkvKiBTY2FsZSBieSAyKiooaz4+MjMpLiAqLwotCWlmKGsgPj0gLTEyNSA8PCAyMykgewotCQlpZiAoayAhPSAwKSB7Ci0JCQlHRVRfRkxPQVRfV09SRChociwgcik7Ci0JCQlTRVRfRkxPQVRfV09SRChyLCBociArIGspOwotCQl9Ci0JCXJldHVybiAocik7Ci0JfSBlbHNlIHsKLQkJR0VUX0ZMT0FUX1dPUkQoaHIsIHIpOwotCQlTRVRfRkxPQVRfV09SRChyLCBociArIChrICsgKDEwMCA8PCAyMykpKTsKLQkJcmV0dXJuIChyICogdHdvbTEwMCk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvbGlibS9zcmMvc19leHBtMS5jIGIvbGlibS9zcmMvc19leHBtMS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1N2FhM2YyLi4wMDAwMDAwCi0tLSBhL2xpYm0vc3JjL3NfZXhwbTEuYworKysgL2Rldi9udWxsCkBAIC0xLDIyMCArMCwwIEBACi0vKiBAKCMpc19leHBtMS5jIDUuMSA5My8wOS8yNCAqLwotLyoKLSAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIENvcHlyaWdodCAoQykgMTk5MyBieSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogRGV2ZWxvcGVkIGF0IFN1blBybywgYSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGJ1c2luZXNzLgotICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcwotICogc29mdHdhcmUgaXMgZnJlZWx5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhpcyBub3RpY2UKLSAqIGlzIHByZXNlcnZlZC4KLSAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqLwotCi0jaWZuZGVmIGxpbnQKLXN0YXRpYyBjaGFyIHJjc2lkW10gPSAiJEZyZWVCU0Q6IHNyYy9saWIvbXN1bi9zcmMvc19leHBtMS5jLHYgMS43IDIwMDIvMDUvMjggMTg6MTU6MDQgYWxmcmVkIEV4cCAkIjsKLSNlbmRpZgotCi0vKiBleHBtMSh4KQotICogUmV0dXJucyBleHAoeCktMSwgdGhlIGV4cG9uZW50aWFsIG9mIHggbWludXMgMS4KLSAqCi0gKiBNZXRob2QKLSAqICAgMS4gQXJndW1lbnQgcmVkdWN0aW9uOgotICoJR2l2ZW4geCwgZmluZCByIGFuZCBpbnRlZ2VyIGsgc3VjaCB0aGF0Ci0gKgotICogICAgICAgICAgICAgICB4ID0gaypsbjIgKyByLCAgfHJ8IDw9IDAuNSpsbjIgfiAwLjM0NjU4Ci0gKgotICogICAgICBIZXJlIGEgY29ycmVjdGlvbiB0ZXJtIGMgd2lsbCBiZSBjb21wdXRlZCB0byBjb21wZW5zYXRlCi0gKgl0aGUgZXJyb3IgaW4gciB3aGVuIHJvdW5kZWQgdG8gYSBmbG9hdGluZy1wb2ludCBudW1iZXIuCi0gKgotICogICAyLiBBcHByb3hpbWF0aW5nIGV4cG0xKHIpIGJ5IGEgc3BlY2lhbCByYXRpb25hbCBmdW5jdGlvbiBvbgotICoJdGhlIGludGVydmFsIFswLDAuMzQ2NThdOgotICoJU2luY2UKLSAqCSAgICByKihleHAocikrMSkvKGV4cChyKS0xKSA9IDIrIHJeMi82IC0gcl40LzM2MCArIC4uLgotICoJd2UgZGVmaW5lIFIxKHIqcikgYnkKLSAqCSAgICByKihleHAocikrMSkvKGV4cChyKS0xKSA9IDIrIHJeMi82ICogUjEocipyKQotICoJVGhhdCBpcywKLSAqCSAgICBSMShyKioyKSA9IDYvciAqKChleHAocikrMSkvKGV4cChyKS0xKSAtIDIvcikKLSAqCQkgICAgID0gNi9yICogKCAxICsgMi4wKigxLyhleHAociktMSkgLSAxL3IpKQotICoJCSAgICAgPSAxIC0gcl4yLzYwICsgcl40LzI1MjAgLSByXjYvMTAwODAwICsgLi4uCi0gKiAgICAgIFdlIHVzZSBhIHNwZWNpYWwgUmVtZSBhbGdvcml0aG0gb24gWzAsMC4zNDddIHRvIGdlbmVyYXRlCi0gKiAJYSBwb2x5bm9taWFsIG9mIGRlZ3JlZSA1IGluIHIqciB0byBhcHByb3hpbWF0ZSBSMS4gVGhlCi0gKgltYXhpbXVtIGVycm9yIG9mIHRoaXMgcG9seW5vbWlhbCBhcHByb3hpbWF0aW9uIGlzIGJvdW5kZWQKLSAqCWJ5IDIqKi02MS4gSW4gb3RoZXIgd29yZHMsCi0gKgkgICAgUjEoeikgfiAxLjAgKyBRMSp6ICsgUTIqeioqMiArIFEzKnoqKjMgKyBRNCp6Kio0ICsgUTUqeioqNQotICoJd2hlcmUgCVExICA9ICAtMS42NjY2NjY2NjY2NjY2NTY3Mzg0RS0yLAotICogCQlRMiAgPSAgIDMuOTY4MjUzOTY4MTM3MDM2NTg3M0UtNCwKLSAqIAkJUTMgID0gIC05LjkyMDYzNDQ3MzM0MzU5ODczNTdFLTYsCi0gKiAJCVE0ICA9ICAgMi41MDUxMzYxNDIwODA4NTE3MDAyRS03LAotICogCQlRNSAgPSAgLTYuMjg0MzUwNTY4MjM4MjYxNzEwMkUtOTsKLSAqICAJKHdoZXJlIHo9cipyLCBhbmQgdGhlIHZhbHVlcyBvZiBRMSB0byBRNSBhcmUgbGlzdGVkIGJlbG93KQotICoJd2l0aCBlcnJvciBib3VuZGVkIGJ5Ci0gKgkgICAgfCAgICAgICAgICAgICAgICAgIDUgICAgICAgICAgIHwgICAgIC02MQotICoJICAgIHwgMS4wK1ExKnorLi4uK1E1KnogICAtICBSMSh6KSB8IDw9IDIKLSAqCSAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICoKLSAqCWV4cG0xKHIpID0gZXhwKHIpLTEgaXMgdGhlbiBjb21wdXRlZCBieSB0aGUgZm9sbG93aW5nCi0gKiAJc3BlY2lmaWMgd2F5IHdoaWNoIG1pbmltaXplIHRoZSBhY2N1bXVsYXRpb24gcm91bmRpbmcgZXJyb3I6Ci0gKgkJCSAgICAgICAyICAgICAzCi0gKgkJCSAgICAgIHIgICAgIHIgICAgWyAzIC0gKFIxICsgUjEqci8yKSAgXQotICoJICAgICAgZXhwbTEocikgPSByICsgLS0tICsgLS0tICogWy0tLS0tLS0tLS0tLS0tLS0tLS0tXQotICoJCSAgICAgICAgICAgICAgMiAgICAgMiAgICBbIDYgLSByKigzIC0gUjEqci8yKSBdCi0gKgotICoJVG8gY29tcGVuc2F0ZSB0aGUgZXJyb3IgaW4gdGhlIGFyZ3VtZW50IHJlZHVjdGlvbiwgd2UgdXNlCi0gKgkJZXhwbTEocitjKSA9IGV4cG0xKHIpICsgYyArIGV4cG0xKHIpKmMKLSAqCQkJICAgfiBleHBtMShyKSArIGMgKyByKmMKLSAqCVRodXMgYytyKmMgd2lsbCBiZSBhZGRlZCBpbiBhcyB0aGUgY29ycmVjdGlvbiB0ZXJtcyBmb3IKLSAqCWV4cG0xKHIrYykuIE5vdyByZWFycmFuZ2UgdGhlIHRlcm0gdG8gYXZvaWQgb3B0aW1pemF0aW9uCi0gKiAJc2NyZXcgdXA6Ci0gKgkJICAgICAgICAoICAgICAgMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIgKQotICoJCSAgICAgICAgKHsgICggciAgICBbIFIxIC0gICgzIC0gUjEqci8yKSBdICApICB9ICAgIHIgICkKLSAqCSBleHBtMShyK2MpfnIgLSAoe3IqKC0tLSAqIFstLS0tLS0tLS0tLS0tLS0tLS0tLV0tYyktY30gLSAtLS0gKQotICoJICAgICAgICAgICAgICAgICh7ICAoIDIgICAgWyA2IC0gciooMyAtIFIxKnIvMikgXSAgKSAgfSAgICAyICApCi0gKiAgICAgICAgICAgICAgICAgICAgICAoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQotICoKLSAqCQkgICA9IHIgLSBFCi0gKiAgIDMuIFNjYWxlIGJhY2sgdG8gb2J0YWluIGV4cG0xKHgpOgotICoJRnJvbSBzdGVwIDEsIHdlIGhhdmUKLSAqCSAgIGV4cG0xKHgpID0gZWl0aGVyIDJeaypbZXhwbTEocikrMV0gLSAxCi0gKgkJICAgID0gb3IgICAgIDJeaypbZXhwbTEocikgKyAoMS0yXi1rKV0KLSAqICAgNC4gSW1wbGVtZW50YXRpb24gbm90ZXM6Ci0gKgkoQSkuIFRvIHNhdmUgb25lIG11bHRpcGxpY2F0aW9uLCB3ZSBzY2FsZSB0aGUgY29lZmZpY2llbnQgUWkKLSAqCSAgICAgdG8gUWkqMl5pLCBhbmQgcmVwbGFjZSB6IGJ5ICh4XjIpLzIuCi0gKgkoQikuIFRvIGFjaGlldmUgbWF4aW11bSBhY2N1cmFjeSwgd2UgY29tcHV0ZSBleHBtMSh4KSBieQotICoJICAoaSkgICBpZiB4IDwgLTU2KmxuMiwgcmV0dXJuIC0xLjAsIChyYWlzZSBpbmV4YWN0IGlmIHghPWluZikKLSAqCSAgKGlpKSAgaWYgaz0wLCByZXR1cm4gci1FCi0gKgkgIChpaWkpIGlmIGs9LTEsIHJldHVybiAwLjUqKHItRSktMC41Ci0gKiAgICAgICAgKGl2KQlpZiBrPTEgaWYgciA8IC0wLjI1LCByZXR1cm4gMiooKHIrMC41KS0gRSkKLSAqCSAgICAgICAJICAgICAgIGVsc2UJICAgICByZXR1cm4gIDEuMCsyLjAqKHItRSk7Ci0gKgkgICh2KSAgIGlmIChrPC0yfHxrPjU2KSByZXR1cm4gMl5rKDEtKEUtcikpIC0gMSAob3IgZXhwKHgpLTEpCi0gKgkgICh2aSkgIGlmIGsgPD0gMjAsIHJldHVybiAyXmsoKDEtMl4tayktKEUtcikpLCBlbHNlCi0gKgkgICh2aWkpIHJldHVybiAyXmsoMS0oKEUrMl4tayktcikpCi0gKgotICogU3BlY2lhbCBjYXNlczoKLSAqCWV4cG0xKElORikgaXMgSU5GLCBleHBtMShOYU4pIGlzIE5hTjsKLSAqCWV4cG0xKC1JTkYpIGlzIC0xLCBhbmQKLSAqCWZvciBmaW5pdGUgYXJndW1lbnQsIG9ubHkgZXhwbTEoMCk9MCBpcyBleGFjdC4KLSAqCi0gKiBBY2N1cmFjeToKLSAqCWFjY29yZGluZyB0byBhbiBlcnJvciBhbmFseXNpcywgdGhlIGVycm9yIGlzIGFsd2F5cyBsZXNzIHRoYW4KLSAqCTEgdWxwICh1bml0IGluIHRoZSBsYXN0IHBsYWNlKS4KLSAqCi0gKiBNaXNjLiBpbmZvLgotICoJRm9yIElFRUUgZG91YmxlCi0gKgkgICAgaWYgeCA+ICA3LjA5NzgyNzEyODkzMzgzOTczMDk2ZSswMiB0aGVuIGV4cG0xKHgpIG92ZXJmbG93Ci0gKgotICogQ29uc3RhbnRzOgotICogVGhlIGhleGFkZWNpbWFsIHZhbHVlcyBhcmUgdGhlIGludGVuZGVkIG9uZXMgZm9yIHRoZSBmb2xsb3dpbmcKLSAqIGNvbnN0YW50cy4gVGhlIGRlY2ltYWwgdmFsdWVzIG1heSBiZSB1c2VkLCBwcm92aWRlZCB0aGF0IHRoZQotICogY29tcGlsZXIgd2lsbCBjb252ZXJ0IGZyb20gZGVjaW1hbCB0byBiaW5hcnkgYWNjdXJhdGVseSBlbm91Z2gKLSAqIHRvIHByb2R1Y2UgdGhlIGhleGFkZWNpbWFsIHZhbHVlcyBzaG93bi4KLSAqLwotCi0jaW5jbHVkZSAibWF0aC5oIgotI2luY2x1ZGUgIm1hdGhfcHJpdmF0ZS5oIgotCi1zdGF0aWMgY29uc3QgZG91YmxlCi1vbmUJCT0gMS4wLAotaHVnZQkJPSAxLjBlKzMwMCwKLXRpbnkJCT0gMS4wZS0zMDAsCi1vX3RocmVzaG9sZAk9IDcuMDk3ODI3MTI4OTMzODM5NzMwOTZlKzAyLC8qIDB4NDA4NjJFNDIsIDB4RkVGQTM5RUYgKi8KLWxuMl9oaQkJPSA2LjkzMTQ3MTgwMzY5MTIzODE2NDkwZS0wMSwvKiAweDNmZTYyZTQyLCAweGZlZTAwMDAwICovCi1sbjJfbG8JCT0gMS45MDgyMTQ5MjkyNzA1ODc3MDAwMmUtMTAsLyogMHgzZGVhMzllZiwgMHgzNTc5M2M3NiAqLwotaW52bG4yCQk9IDEuNDQyNjk1MDQwODg4OTYzMzg3MDBlKzAwLC8qIDB4M2ZmNzE1NDcsIDB4NjUyYjgyZmUgKi8KLQkvKiBzY2FsZWQgY29lZmZpY2llbnRzIHJlbGF0ZWQgdG8gZXhwbTEgKi8KLVExICA9ICAtMy4zMzMzMzMzMzMzMzMzMTMxNjQyOGUtMDIsIC8qIEJGQTExMTExIDExMTExMEY0ICovCi1RMiAgPSAgIDEuNTg3MzAxNTg3MjU0ODE0NjAxNjVlLTAzLCAvKiAzRjVBMDFBMCAxOUZFNTU4NSAqLwotUTMgID0gIC03LjkzNjUwNzU3ODY3NDg3OTQyNDczZS0wNSwgLyogQkYxNENFMTkgOUVBQURCQjcgKi8KLVE0ICA9ICAgNC4wMDgyMTc4MjczMjkzNjIzOTU1MmUtMDYsIC8qIDNFRDBDRkNBIDg2RTY1MjM5ICovCi1RNSAgPSAgLTIuMDEwOTkyMTgxODM2MjQzNzEzMjZlLTA3OyAvKiBCRThBRkRCNyA2RTA5QzMyRCAqLwotCi1kb3VibGUKLWV4cG0xKGRvdWJsZSB4KQotewotCWRvdWJsZSB5LGhpLGxvLGMsdCxlLGh4cyxoZngscjE7Ci0JaW50MzJfdCBrLHhzYjsKLQl1X2ludDMyX3QgaHg7Ci0KLQlHRVRfSElHSF9XT1JEKGh4LHgpOwotCXhzYiA9IGh4JjB4ODAwMDAwMDA7CQkvKiBzaWduIGJpdCBvZiB4ICovCi0JaWYoeHNiPT0wKSB5PXg7IGVsc2UgeT0gLXg7CS8qIHkgPSB8eHwgKi8KLQloeCAmPSAweDdmZmZmZmZmOwkJLyogaGlnaCB3b3JkIG9mIHx4fCAqLwotCi0gICAgLyogZmlsdGVyIG91dCBodWdlIGFuZCBub24tZmluaXRlIGFyZ3VtZW50ICovCi0JaWYoaHggPj0gMHg0MDQzNjg3QSkgewkJCS8qIGlmIHx4fD49NTYqbG4yICovCi0JICAgIGlmKGh4ID49IDB4NDA4NjJFNDIpIHsJCS8qIGlmIHx4fD49NzA5Ljc4Li4uICovCi0gICAgICAgICAgICAgICAgaWYoaHg+PTB4N2ZmMDAwMDApIHsKLQkJICAgIHVfaW50MzJfdCBsb3c7Ci0JCSAgICBHRVRfTE9XX1dPUkQobG93LHgpOwotCQkgICAgaWYoKChoeCYweGZmZmZmKXxsb3cpIT0wKQotCQkgICAgICAgICByZXR1cm4geCt4OyAJIC8qIE5hTiAqLwotCQkgICAgZWxzZSByZXR1cm4gKHhzYj09MCk/IHg6LTEuMDsvKiBleHAoKy1pbmYpPXtpbmYsLTF9ICovCi0JICAgICAgICB9Ci0JICAgICAgICBpZih4ID4gb190aHJlc2hvbGQpIHJldHVybiBodWdlKmh1Z2U7IC8qIG92ZXJmbG93ICovCi0JICAgIH0KLQkgICAgaWYoeHNiIT0wKSB7IC8qIHggPCAtNTYqbG4yLCByZXR1cm4gLTEuMCB3aXRoIGluZXhhY3QgKi8KLQkJaWYoeCt0aW55PDAuMCkJCS8qIHJhaXNlIGluZXhhY3QgKi8KLQkJcmV0dXJuIHRpbnktb25lOwkvKiByZXR1cm4gLTEgKi8KLQkgICAgfQotCX0KLQotICAgIC8qIGFyZ3VtZW50IHJlZHVjdGlvbiAqLwotCWlmKGh4ID4gMHgzZmQ2MmU0MikgewkJLyogaWYgIHx4fCA+IDAuNSBsbjIgKi8KLQkgICAgaWYoaHggPCAweDNGRjBBMkIyKSB7CS8qIGFuZCB8eHwgPCAxLjUgbG4yICovCi0JCWlmKHhzYj09MCkKLQkJICAgIHtoaSA9IHggLSBsbjJfaGk7IGxvID0gIGxuMl9sbzsgIGsgPSAgMTt9Ci0JCWVsc2UKLQkJICAgIHtoaSA9IHggKyBsbjJfaGk7IGxvID0gLWxuMl9sbzsgIGsgPSAtMTt9Ci0JICAgIH0gZWxzZSB7Ci0JCWsgID0gaW52bG4yKngrKCh4c2I9PTApPzAuNTotMC41KTsKLQkJdCAgPSBrOwotCQloaSA9IHggLSB0KmxuMl9oaTsJLyogdCpsbjJfaGkgaXMgZXhhY3QgaGVyZSAqLwotCQlsbyA9IHQqbG4yX2xvOwotCSAgICB9Ci0JICAgIHggID0gaGkgLSBsbzsKLQkgICAgYyAgPSAoaGkteCktbG87Ci0JfQotCWVsc2UgaWYoaHggPCAweDNjOTAwMDAwKSB7ICAJLyogd2hlbiB8eHw8MioqLTU0LCByZXR1cm4geCAqLwotCSAgICB0ID0gaHVnZSt4OwkvKiByZXR1cm4geCB3aXRoIGluZXhhY3QgZmxhZ3Mgd2hlbiB4IT0wICovCi0JICAgIHJldHVybiB4IC0gKHQtKGh1Z2UreCkpOwotCX0KLQllbHNlIGsgPSAwOwotCi0gICAgLyogeCBpcyBub3cgaW4gcHJpbWFyeSByYW5nZSAqLwotCWhmeCA9IDAuNSp4OwotCWh4cyA9IHgqaGZ4OwotCXIxID0gb25lK2h4cyooUTEraHhzKihRMitoeHMqKFEzK2h4cyooUTQraHhzKlE1KSkpKTsKLQl0ICA9IDMuMC1yMSpoZng7Ci0JZSAgPSBoeHMqKChyMS10KS8oNi4wIC0geCp0KSk7Ci0JaWYoaz09MCkgcmV0dXJuIHggLSAoeCplLWh4cyk7CQkvKiBjIGlzIDAgKi8KLQllbHNlIHsKLQkgICAgZSAgPSAoeCooZS1jKS1jKTsKLQkgICAgZSAtPSBoeHM7Ci0JICAgIGlmKGs9PSAtMSkgcmV0dXJuIDAuNSooeC1lKS0wLjU7Ci0JICAgIGlmKGs9PTEpCi0JICAgICAgIAlpZih4IDwgLTAuMjUpIHJldHVybiAtMi4wKihlLSh4KzAuNSkpOwotCSAgICAgICAJZWxzZSAJICAgICAgcmV0dXJuICBvbmUrMi4wKih4LWUpOwotCSAgICBpZiAoayA8PSAtMiB8fCBrPjU2KSB7ICAgLyogc3VmZmljZSB0byByZXR1cm4gZXhwKHgpLTEgKi8KLQkgICAgICAgIHVfaW50MzJfdCBoaWdoOwotCSAgICAgICAgeSA9IG9uZS0oZS14KTsKLQkJR0VUX0hJR0hfV09SRChoaWdoLHkpOwotCQlTRVRfSElHSF9XT1JEKHksaGlnaCsoazw8MjApKTsJLyogYWRkIGsgdG8geSdzIGV4cG9uZW50ICovCi0JICAgICAgICByZXR1cm4geS1vbmU7Ci0JICAgIH0KLQkgICAgdCA9IG9uZTsKLQkgICAgaWYoazwyMCkgewotCSAgICAgICAgdV9pbnQzMl90IGhpZ2g7Ci0JICAgICAgICBTRVRfSElHSF9XT1JEKHQsMHgzZmYwMDAwMCAtICgweDIwMDAwMD4+aykpOyAgLyogdD0xLTJeLWsgKi8KLQkgICAgICAgCXkgPSB0LShlLXgpOwotCQlHRVRfSElHSF9XT1JEKGhpZ2gseSk7Ci0JCVNFVF9ISUdIX1dPUkQoeSxoaWdoKyhrPDwyMCkpOwkvKiBhZGQgayB0byB5J3MgZXhwb25lbnQgKi8KLQkgICB9IGVsc2UgewotCSAgICAgICAgdV9pbnQzMl90IGhpZ2g7Ci0JCVNFVF9ISUdIX1dPUkQodCwoKDB4M2ZmLWspPDwyMCkpOwkvKiAyXi1rICovCi0JICAgICAgIAl5ID0geC0oZSt0KTsKLQkgICAgICAgCXkgKz0gb25lOwotCQlHRVRfSElHSF9XT1JEKGhpZ2gseSk7Ci0JCVNFVF9ISUdIX1dPUkQoeSxoaWdoKyhrPDwyMCkpOwkvKiBhZGQgayB0byB5J3MgZXhwb25lbnQgKi8KLQkgICAgfQotCX0KLQlyZXR1cm4geTsKLX0KZGlmZiAtLWdpdCBhL2xpYm0vc3JjL3NfZXhwbTFmLmMgYi9saWJtL3NyYy9zX2V4cG0xZi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNjcwYTcyLi4wMDAwMDAwCi0tLSBhL2xpYm0vc3JjL3NfZXhwbTFmLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMjUgKzAsMCBAQAotLyogc19leHBtMWYuYyAtLSBmbG9hdCB2ZXJzaW9uIG9mIHNfZXhwbTEuYy4KLSAqIENvbnZlcnNpb24gdG8gZmxvYXQgYnkgSWFuIExhbmNlIFRheWxvciwgQ3lnbnVzIFN1cHBvcnQsIGlhbkBjeWdudXMuY29tLgotICovCi0KLS8qCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBDb3B5cmlnaHQgKEMpIDE5OTMgYnkgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIERldmVsb3BlZCBhdCBTdW5Qcm8sIGEgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBidXNpbmVzcy4KLSAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKLSAqIHNvZnR3YXJlIGlzIGZyZWVseSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoaXMgbm90aWNlCi0gKiBpcyBwcmVzZXJ2ZWQuCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKi8KLQotI2lmbmRlZiBsaW50Ci1zdGF0aWMgY2hhciByY3NpZFtdID0gIiRGcmVlQlNEOiBzcmMvbGliL21zdW4vc3JjL3NfZXhwbTFmLmMsdiAxLjcgMjAwMi8wNS8yOCAxODoxNTowNCBhbGZyZWQgRXhwICQiOwotI2VuZGlmCi0KLSNpbmNsdWRlICJtYXRoLmgiCi0jaW5jbHVkZSAibWF0aF9wcml2YXRlLmgiCi0KLXN0YXRpYyBjb25zdCBmbG9hdAotb25lCQk9IDEuMCwKLWh1Z2UJCT0gMS4wZSszMCwKLXRpbnkJCT0gMS4wZS0zMCwKLW9fdGhyZXNob2xkCT0gOC44NzIxNjc5Njg4ZSswMSwvKiAweDQyYjE3MTgwICovCi1sbjJfaGkJCT0gNi45MzEzODEyMjU2ZS0wMSwvKiAweDNmMzE3MTgwICovCi1sbjJfbG8JCT0gOS4wNTgwMDA2MTQ1ZS0wNiwvKiAweDM3MTdmN2QxICovCi1pbnZsbjIJCT0gMS40NDI2OTUwMjE2ZSswMCwvKiAweDNmYjhhYTNiICovCi0JLyogc2NhbGVkIGNvZWZmaWNpZW50cyByZWxhdGVkIHRvIGV4cG0xICovCi1RMSAgPSAgLTMuMzMzMzMzNTA3MmUtMDIsIC8qIDB4YmQwODg4ODkgKi8KLVEyICA9ICAgMS41ODczMDE2MDkxZS0wMywgLyogMHgzYWQwMGQwMSAqLwotUTMgID0gIC03LjkzNjUwNzYwOTBlLTA1LCAvKiAweGI4YTY3MGNkICovCi1RNCAgPSAgIDQuMDA4MjE3NzI5M2UtMDYsIC8qIDB4MzY4NjdlNTQgKi8KLVE1ICA9ICAtMi4wMTA5OTIxMTk1ZS0wNzsgLyogMHhiNDU3ZWRiYiAqLwotCi1mbG9hdAotZXhwbTFmKGZsb2F0IHgpCi17Ci0JZmxvYXQgeSxoaSxsbyxjLHQsZSxoeHMsaGZ4LHIxOwotCWludDMyX3Qgayx4c2I7Ci0JdV9pbnQzMl90IGh4OwotCi0JR0VUX0ZMT0FUX1dPUkQoaHgseCk7Ci0JeHNiID0gaHgmMHg4MDAwMDAwMDsJCS8qIHNpZ24gYml0IG9mIHggKi8KLQlpZih4c2I9PTApIHk9eDsgZWxzZSB5PSAteDsJLyogeSA9IHx4fCAqLwotCWh4ICY9IDB4N2ZmZmZmZmY7CQkvKiBoaWdoIHdvcmQgb2YgfHh8ICovCi0KLSAgICAvKiBmaWx0ZXIgb3V0IGh1Z2UgYW5kIG5vbi1maW5pdGUgYXJndW1lbnQgKi8KLQlpZihoeCA+PSAweDQxOTViODQ0KSB7CQkJLyogaWYgfHh8Pj0yNypsbjIgKi8KLQkgICAgaWYoaHggPj0gMHg0MmIxNzIxOCkgewkJLyogaWYgfHh8Pj04OC43MjEuLi4gKi8KLSAgICAgICAgICAgICAgICBpZihoeD4weDdmODAwMDAwKQotCQkgICAgcmV0dXJuIHgreDsgCSAvKiBOYU4gKi8KLQkJaWYoaHg9PTB4N2Y4MDAwMDApCi0JCSAgICByZXR1cm4gKHhzYj09MCk/IHg6LTEuMDsvKiBleHAoKy1pbmYpPXtpbmYsLTF9ICovCi0JICAgICAgICBpZih4ID4gb190aHJlc2hvbGQpIHJldHVybiBodWdlKmh1Z2U7IC8qIG92ZXJmbG93ICovCi0JICAgIH0KLQkgICAgaWYoeHNiIT0wKSB7IC8qIHggPCAtMjcqbG4yLCByZXR1cm4gLTEuMCB3aXRoIGluZXhhY3QgKi8KLQkJaWYoeCt0aW55PChmbG9hdCkwLjApCS8qIHJhaXNlIGluZXhhY3QgKi8KLQkJcmV0dXJuIHRpbnktb25lOwkvKiByZXR1cm4gLTEgKi8KLQkgICAgfQotCX0KLQotICAgIC8qIGFyZ3VtZW50IHJlZHVjdGlvbiAqLwotCWlmKGh4ID4gMHgzZWIxNzIxOCkgewkJLyogaWYgIHx4fCA+IDAuNSBsbjIgKi8KLQkgICAgaWYoaHggPCAweDNGODUxNTkyKSB7CS8qIGFuZCB8eHwgPCAxLjUgbG4yICovCi0JCWlmKHhzYj09MCkKLQkJICAgIHtoaSA9IHggLSBsbjJfaGk7IGxvID0gIGxuMl9sbzsgIGsgPSAgMTt9Ci0JCWVsc2UKLQkJICAgIHtoaSA9IHggKyBsbjJfaGk7IGxvID0gLWxuMl9sbzsgIGsgPSAtMTt9Ci0JICAgIH0gZWxzZSB7Ci0JCWsgID0gaW52bG4yKngrKCh4c2I9PTApPyhmbG9hdCkwLjU6KGZsb2F0KS0wLjUpOwotCQl0ICA9IGs7Ci0JCWhpID0geCAtIHQqbG4yX2hpOwkvKiB0KmxuMl9oaSBpcyBleGFjdCBoZXJlICovCi0JCWxvID0gdCpsbjJfbG87Ci0JICAgIH0KLQkgICAgeCAgPSBoaSAtIGxvOwotCSAgICBjICA9IChoaS14KS1sbzsKLQl9Ci0JZWxzZSBpZihoeCA8IDB4MzMwMDAwMDApIHsgIAkvKiB3aGVuIHx4fDwyKiotMjUsIHJldHVybiB4ICovCi0JICAgIHQgPSBodWdlK3g7CS8qIHJldHVybiB4IHdpdGggaW5leGFjdCBmbGFncyB3aGVuIHghPTAgKi8KLQkgICAgcmV0dXJuIHggLSAodC0oaHVnZSt4KSk7Ci0JfQotCWVsc2UgayA9IDA7Ci0KLSAgICAvKiB4IGlzIG5vdyBpbiBwcmltYXJ5IHJhbmdlICovCi0JaGZ4ID0gKGZsb2F0KTAuNSp4OwotCWh4cyA9IHgqaGZ4OwotCXIxID0gb25lK2h4cyooUTEraHhzKihRMitoeHMqKFEzK2h4cyooUTQraHhzKlE1KSkpKTsKLQl0ICA9IChmbG9hdCkzLjAtcjEqaGZ4OwotCWUgID0gaHhzKigocjEtdCkvKChmbG9hdCk2LjAgLSB4KnQpKTsKLQlpZihrPT0wKSByZXR1cm4geCAtICh4KmUtaHhzKTsJCS8qIGMgaXMgMCAqLwotCWVsc2UgewotCSAgICBlICA9ICh4KihlLWMpLWMpOwotCSAgICBlIC09IGh4czsKLQkgICAgaWYoaz09IC0xKSByZXR1cm4gKGZsb2F0KTAuNSooeC1lKS0oZmxvYXQpMC41OwotCSAgICBpZihrPT0xKQotCSAgICAgICAJaWYoeCA8IChmbG9hdCktMC4yNSkgcmV0dXJuIC0oZmxvYXQpMi4wKihlLSh4KyhmbG9hdCkwLjUpKTsKLQkgICAgICAgCWVsc2UgCSAgICAgIHJldHVybiAgb25lKyhmbG9hdCkyLjAqKHgtZSk7Ci0JICAgIGlmIChrIDw9IC0yIHx8IGs+NTYpIHsgICAvKiBzdWZmaWNlIHRvIHJldHVybiBleHAoeCktMSAqLwotCSAgICAgICAgaW50MzJfdCBpOwotCSAgICAgICAgeSA9IG9uZS0oZS14KTsKLQkJR0VUX0ZMT0FUX1dPUkQoaSx5KTsKLQkJU0VUX0ZMT0FUX1dPUkQoeSxpKyhrPDwyMykpOwkvKiBhZGQgayB0byB5J3MgZXhwb25lbnQgKi8KLQkgICAgICAgIHJldHVybiB5LW9uZTsKLQkgICAgfQotCSAgICB0ID0gb25lOwotCSAgICBpZihrPDIzKSB7Ci0JICAgICAgICBpbnQzMl90IGk7Ci0JICAgICAgICBTRVRfRkxPQVRfV09SRCh0LDB4M2Y4MDAwMDAgLSAoMHgxMDAwMDAwPj5rKSk7IC8qIHQ9MS0yXi1rICovCi0JICAgICAgIAl5ID0gdC0oZS14KTsKLQkJR0VUX0ZMT0FUX1dPUkQoaSx5KTsKLQkJU0VUX0ZMT0FUX1dPUkQoeSxpKyhrPDwyMykpOwkvKiBhZGQgayB0byB5J3MgZXhwb25lbnQgKi8KLQkgICB9IGVsc2UgewotCSAgICAgICAgaW50MzJfdCBpOwotCQlTRVRfRkxPQVRfV09SRCh0LCgoMHg3Zi1rKTw8MjMpKTsJLyogMl4tayAqLwotCSAgICAgICAJeSA9IHgtKGUrdCk7Ci0JICAgICAgIAl5ICs9IG9uZTsKLQkJR0VUX0ZMT0FUX1dPUkQoaSx5KTsKLQkJU0VUX0ZMT0FUX1dPUkQoeSxpKyhrPDwyMykpOwkvKiBhZGQgayB0byB5J3MgZXhwb25lbnQgKi8KLQkgICAgfQotCX0KLQlyZXR1cm4geTsKLX0KZGlmZiAtLWdpdCBhL2xpYm0vc3JjL3NfZmFicy5jIGIvbGlibS9zcmMvc19mYWJzLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBkZmE5NDAuLjAwMDAwMDAKLS0tIGEvbGlibS9zcmMvc19mYWJzLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzMSArMCwwIEBACi0vKiBAKCMpc19mYWJzLmMgNS4xIDkzLzA5LzI0ICovCi0vKgotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogQ29weXJpZ2h0IChDKSAxOTkzIGJ5IFN1biBNaWNyb3N5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBEZXZlbG9wZWQgYXQgU3VuUHJvLCBhIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gYnVzaW5lc3MuCi0gKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCi0gKiBzb2Z0d2FyZSBpcyBmcmVlbHkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGlzIG5vdGljZQotICogaXMgcHJlc2VydmVkLgotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICovCi0KLSNpZm5kZWYgbGludAotc3RhdGljIGNoYXIgcmNzaWRbXSA9ICIkRnJlZUJTRDogc3JjL2xpYi9tc3VuL3NyYy9zX2ZhYnMuYyx2IDEuNyAyMDAyLzA1LzI4IDE4OjE1OjA0IGFsZnJlZCBFeHAgJCI7Ci0jZW5kaWYKLQotLyoKLSAqIGZhYnMoeCkgcmV0dXJucyB0aGUgYWJzb2x1dGUgdmFsdWUgb2YgeC4KLSAqLwotCi0jaW5jbHVkZSAibWF0aC5oIgotI2luY2x1ZGUgIm1hdGhfcHJpdmF0ZS5oIgotCi1kb3VibGUKLWZhYnMoZG91YmxlIHgpCi17Ci0JdV9pbnQzMl90IGhpZ2g7Ci0JR0VUX0hJR0hfV09SRChoaWdoLHgpOwotCVNFVF9ISUdIX1dPUkQoeCxoaWdoJjB4N2ZmZmZmZmYpOwotICAgICAgICByZXR1cm4geDsKLX0KZGlmZiAtLWdpdCBhL2xpYm0vc3JjL3NfZmFic2YuYyBiL2xpYm0vc3JjL3NfZmFic2YuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjIwMDcwNS4uMDAwMDAwMAotLS0gYS9saWJtL3NyYy9zX2ZhYnNmLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi0vKiBzX2ZhYnNmLmMgLS0gZmxvYXQgdmVyc2lvbiBvZiBzX2ZhYnMuYy4KLSAqIENvbnZlcnNpb24gdG8gZmxvYXQgYnkgSWFuIExhbmNlIFRheWxvciwgQ3lnbnVzIFN1cHBvcnQsIGlhbkBjeWdudXMuY29tLgotICovCi0KLS8qCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBDb3B5cmlnaHQgKEMpIDE5OTMgYnkgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIERldmVsb3BlZCBhdCBTdW5Qcm8sIGEgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBidXNpbmVzcy4KLSAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKLSAqIHNvZnR3YXJlIGlzIGZyZWVseSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoaXMgbm90aWNlCi0gKiBpcyBwcmVzZXJ2ZWQuCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKi8KLQotI2lmbmRlZiBsaW50Ci1zdGF0aWMgY2hhciByY3NpZFtdID0gIiRGcmVlQlNEOiBzcmMvbGliL21zdW4vc3JjL3NfZmFic2YuYyx2IDEuNyAyMDAyLzA1LzI4IDE4OjE1OjA0IGFsZnJlZCBFeHAgJCI7Ci0jZW5kaWYKLQotLyoKLSAqIGZhYnNmKHgpIHJldHVybnMgdGhlIGFic29sdXRlIHZhbHVlIG9mIHguCi0gKi8KLQotI2luY2x1ZGUgIm1hdGguaCIKLSNpbmNsdWRlICJtYXRoX3ByaXZhdGUuaCIKLQotZmxvYXQKLWZhYnNmKGZsb2F0IHgpCi17Ci0JdV9pbnQzMl90IGl4OwotCUdFVF9GTE9BVF9XT1JEKGl4LHgpOwotCVNFVF9GTE9BVF9XT1JEKHgsaXgmMHg3ZmZmZmZmZik7Ci0gICAgICAgIHJldHVybiB4OwotfQpkaWZmIC0tZ2l0IGEvbGlibS9zcmMvc19mZGltLmMgYi9saWJtL3NyYy9zX2ZkaW0uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmEzNDdjMS4uMDAwMDAwMAotLS0gYS9saWJtL3NyYy9zX2ZkaW0uYworKysgL2Rldi9udWxsCkBAIC0xLDQ2ICswLDAgQEAKLS8qLQotICogQ29weXJpZ2h0IChjKSAyMDA0IERhdmlkIFNjaHVsdHogPGRhc0BGcmVlQlNELk9SRz4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgotLyogX19GQlNESUQoIiRGcmVlQlNEOiBzcmMvbGliL21zdW4vc3JjL3NfZmRpbS5jLHYgMS4xIDIwMDQvMDYvMzAgMDc6MDQ6MDEgZGFzIEV4cCAkIik7ICovCi0KLSNpbmNsdWRlIDxtYXRoLmg+Ci0KLSNkZWZpbmUJREVDTCh0eXBlLCBmbikJCQlcCi10eXBlCQkJCQlcCi1mbih0eXBlIHgsIHR5cGUgeSkJCQlcCi17CQkJCQlcCi0JCQkJCVwKLQlpZiAoaXNuYW4oeCkpCQkJXAotCQlyZXR1cm4gKHgpOwkJXAotCWlmIChpc25hbih5KSkJCQlcCi0JCXJldHVybiAoeSk7CQlcCi0JcmV0dXJuICh4ID4geSA/IHggLSB5IDogMC4wKTsJXAotfQotCi1ERUNMKGRvdWJsZSwgZmRpbSkKLURFQ0woZmxvYXQsIGZkaW1mKQotREVDTChsb25nIGRvdWJsZSwgZmRpbWwpCmRpZmYgLS1naXQgYS9saWJtL3NyYy9zX2Zpbml0ZS5jIGIvbGlibS9zcmMvc19maW5pdGUuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzA0ZDFkOC4uMDAwMDAwMAotLS0gYS9saWJtL3NyYy9zX2Zpbml0ZS5jCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotLyogQCgjKXNfZmluaXRlLmMgNS4xIDkzLzA5LzI0ICovCi0vKgotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogQ29weXJpZ2h0IChDKSAxOTkzIGJ5IFN1biBNaWNyb3N5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBEZXZlbG9wZWQgYXQgU3VuUHJvLCBhIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gYnVzaW5lc3MuCi0gKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCi0gKiBzb2Z0d2FyZSBpcyBmcmVlbHkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGlzIG5vdGljZQotICogaXMgcHJlc2VydmVkLgotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICovCi0KLSNpZm5kZWYgbGludAotc3RhdGljIGNoYXIgcmNzaWRbXSA9ICIkRnJlZUJTRDogc3JjL2xpYi9tc3VuL3NyYy9zX2Zpbml0ZS5jLHYgMS44IDIwMDMvMDcvMjMgMDQ6NTM6NDYgcGV0ZXIgRXhwICQiOwotI2VuZGlmCi0KLS8qCi0gKiBmaW5pdGUoeCkgcmV0dXJucyAxIGlzIHggaXMgZmluaXRlLCBlbHNlIDA7Ci0gKiBubyBicmFuY2hpbmchCi0gKi8KLQotI2luY2x1ZGUgIm1hdGguaCIKLSNpbmNsdWRlICJtYXRoX3ByaXZhdGUuaCIKLQotCWludCBmaW5pdGUoZG91YmxlIHgpCi17Ci0JaW50MzJfdCBoeDsKLQlHRVRfSElHSF9XT1JEKGh4LHgpOwotCXJldHVybiAoaW50KSgodV9pbnQzMl90KSgoaHgmMHg3ZmZmZmZmZiktMHg3ZmYwMDAwMCk+PjMxKTsKLX0KZGlmZiAtLWdpdCBhL2xpYm0vc3JjL3NfZmluaXRlZi5jIGIvbGlibS9zcmMvc19maW5pdGVmLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI0MzA2MzkuLjAwMDAwMDAKLS0tIGEvbGlibS9zcmMvc19maW5pdGVmLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi0vKiBzX2Zpbml0ZWYuYyAtLSBmbG9hdCB2ZXJzaW9uIG9mIHNfZmluaXRlLmMuCi0gKiBDb252ZXJzaW9uIHRvIGZsb2F0IGJ5IElhbiBMYW5jZSBUYXlsb3IsIEN5Z251cyBTdXBwb3J0LCBpYW5AY3lnbnVzLmNvbS4KLSAqLwotCi0vKgotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogQ29weXJpZ2h0IChDKSAxOTkzIGJ5IFN1biBNaWNyb3N5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBEZXZlbG9wZWQgYXQgU3VuUHJvLCBhIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gYnVzaW5lc3MuCi0gKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCi0gKiBzb2Z0d2FyZSBpcyBmcmVlbHkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGlzIG5vdGljZQotICogaXMgcHJlc2VydmVkLgotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICovCi0KLSNpZm5kZWYgbGludAotc3RhdGljIGNoYXIgcmNzaWRbXSA9ICIkRnJlZUJTRDogc3JjL2xpYi9tc3VuL3NyYy9zX2Zpbml0ZWYuYyx2IDEuNiAyMDAyLzA1LzI4IDE3OjUxOjQ2IGFsZnJlZCBFeHAgJCI7Ci0jZW5kaWYKLQotLyoKLSAqIGZpbml0ZWYoeCkgcmV0dXJucyAxIGlzIHggaXMgZmluaXRlLCBlbHNlIDA7Ci0gKiBubyBicmFuY2hpbmchCi0gKi8KLQotI2luY2x1ZGUgIm1hdGguaCIKLSNpbmNsdWRlICJtYXRoX3ByaXZhdGUuaCIKLQotCWludCBmaW5pdGVmKGZsb2F0IHgpCi17Ci0JaW50MzJfdCBpeDsKLQlHRVRfRkxPQVRfV09SRChpeCx4KTsKLQlyZXR1cm4gKGludCkoKHVfaW50MzJfdCkoKGl4JjB4N2ZmZmZmZmYpLTB4N2Y4MDAwMDApPj4zMSk7Ci19CmRpZmYgLS1naXQgYS9saWJtL3NyYy9zX2Zsb29yLmMgYi9saWJtL3NyYy9zX2Zsb29yLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFjYzMyMTQuLjAwMDAwMDAKLS0tIGEvbGlibS9zcmMvc19mbG9vci5jCisrKyAvZGV2L251bGwKQEAgLTEsNzMgKzAsMCBAQAotLyogQCgjKXNfZmxvb3IuYyA1LjEgOTMvMDkvMjQgKi8KLS8qCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBDb3B5cmlnaHQgKEMpIDE5OTMgYnkgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIERldmVsb3BlZCBhdCBTdW5Qcm8sIGEgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBidXNpbmVzcy4KLSAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKLSAqIHNvZnR3YXJlIGlzIGZyZWVseSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoaXMgbm90aWNlCi0gKiBpcyBwcmVzZXJ2ZWQuCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKi8KLQotI2lmbmRlZiBsaW50Ci1zdGF0aWMgY2hhciByY3NpZFtdID0gIiRGcmVlQlNEOiBzcmMvbGliL21zdW4vc3JjL3NfZmxvb3IuYyx2IDEuOSAyMDAzLzA3LzIzIDA0OjUzOjQ2IHBldGVyIEV4cCAkIjsKLSNlbmRpZgotCi0vKgotICogZmxvb3IoeCkKLSAqIFJldHVybiB4IHJvdW5kZWQgdG93YXJkIC1pbmYgdG8gaW50ZWdyYWwgdmFsdWUKLSAqIE1ldGhvZDoKLSAqCUJpdCB0d2lkZGxpbmcuCi0gKiBFeGNlcHRpb246Ci0gKglJbmV4YWN0IGZsYWcgcmFpc2VkIGlmIHggbm90IGVxdWFsIHRvIGZsb29yKHgpLgotICovCi0KLSNpbmNsdWRlICJtYXRoLmgiCi0jaW5jbHVkZSAibWF0aF9wcml2YXRlLmgiCi0KLXN0YXRpYyBjb25zdCBkb3VibGUgaHVnZSA9IDEuMGUzMDA7Ci0KLWRvdWJsZQotZmxvb3IoZG91YmxlIHgpCi17Ci0JaW50MzJfdCBpMCxpMSxqMDsKLQl1X2ludDMyX3QgaSxqOwotCUVYVFJBQ1RfV09SRFMoaTAsaTEseCk7Ci0JajAgPSAoKGkwPj4yMCkmMHg3ZmYpLTB4M2ZmOwotCWlmKGowPDIwKSB7Ci0JICAgIGlmKGowPDApIHsgCS8qIHJhaXNlIGluZXhhY3QgaWYgeCAhPSAwICovCi0JCWlmKGh1Z2UreD4wLjApIHsvKiByZXR1cm4gMCpzaWduKHgpIGlmIHx4fDwxICovCi0JCSAgICBpZihpMD49MCkge2kwPWkxPTA7fQotCQkgICAgZWxzZSBpZigoKGkwJjB4N2ZmZmZmZmYpfGkxKSE9MCkKLQkJCXsgaTA9MHhiZmYwMDAwMDtpMT0wO30KLQkJfQotCSAgICB9IGVsc2UgewotCQlpID0gKDB4MDAwZmZmZmYpPj5qMDsKLQkJaWYoKChpMCZpKXxpMSk9PTApIHJldHVybiB4OyAvKiB4IGlzIGludGVncmFsICovCi0JCWlmKGh1Z2UreD4wLjApIHsJLyogcmFpc2UgaW5leGFjdCBmbGFnICovCi0JCSAgICBpZihpMDwwKSBpMCArPSAoMHgwMDEwMDAwMCk+PmowOwotCQkgICAgaTAgJj0gKH5pKTsgaTE9MDsKLQkJfQotCSAgICB9Ci0JfSBlbHNlIGlmIChqMD41MSkgewotCSAgICBpZihqMD09MHg0MDApIHJldHVybiB4K3g7CS8qIGluZiBvciBOYU4gKi8KLQkgICAgZWxzZSByZXR1cm4geDsJCS8qIHggaXMgaW50ZWdyYWwgKi8KLQl9IGVsc2UgewotCSAgICBpID0gKCh1X2ludDMyX3QpKDB4ZmZmZmZmZmYpKT4+KGowLTIwKTsKLQkgICAgaWYoKGkxJmkpPT0wKSByZXR1cm4geDsJLyogeCBpcyBpbnRlZ3JhbCAqLwotCSAgICBpZihodWdlK3g+MC4wKSB7IAkJLyogcmFpc2UgaW5leGFjdCBmbGFnICovCi0JCWlmKGkwPDApIHsKLQkJICAgIGlmKGowPT0yMCkgaTArPTE7Ci0JCSAgICBlbHNlIHsKLQkJCWogPSBpMSsoMTw8KDUyLWowKSk7Ci0JCQlpZihqPGkxKSBpMCArPTEgOyAJLyogZ290IGEgY2FycnkgKi8KLQkJCWkxPWo7Ci0JCSAgICB9Ci0JCX0KLQkJaTEgJj0gKH5pKTsKLQkgICAgfQotCX0KLQlJTlNFUlRfV09SRFMoeCxpMCxpMSk7Ci0JcmV0dXJuIHg7Ci19CmRpZmYgLS1naXQgYS9saWJtL3NyYy9zX2Zsb29yZi5jIGIvbGlibS9zcmMvc19mbG9vcmYuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzBhNzFmMy4uMDAwMDAwMAotLS0gYS9saWJtL3NyYy9zX2Zsb29yZi5jCisrKyAvZGV2L251bGwKQEAgLTEsNjIgKzAsMCBAQAotLyogc19mbG9vcmYuYyAtLSBmbG9hdCB2ZXJzaW9uIG9mIHNfZmxvb3IuYy4KLSAqIENvbnZlcnNpb24gdG8gZmxvYXQgYnkgSWFuIExhbmNlIFRheWxvciwgQ3lnbnVzIFN1cHBvcnQsIGlhbkBjeWdudXMuY29tLgotICovCi0KLS8qCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBDb3B5cmlnaHQgKEMpIDE5OTMgYnkgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIERldmVsb3BlZCBhdCBTdW5Qcm8sIGEgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBidXNpbmVzcy4KLSAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKLSAqIHNvZnR3YXJlIGlzIGZyZWVseSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoaXMgbm90aWNlCi0gKiBpcyBwcmVzZXJ2ZWQuCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKi8KLQotI2lmbmRlZiBsaW50Ci1zdGF0aWMgY2hhciByY3NpZFtdID0gIiRGcmVlQlNEOiBzcmMvbGliL21zdW4vc3JjL3NfZmxvb3JmLmMsdiAxLjcgMjAwMi8wNS8yOCAxODoxNTowNCBhbGZyZWQgRXhwICQiOwotI2VuZGlmCi0KLS8qCi0gKiBmbG9vcmYoeCkKLSAqIFJldHVybiB4IHJvdW5kZWQgdG93YXJkIC1pbmYgdG8gaW50ZWdyYWwgdmFsdWUKLSAqIE1ldGhvZDoKLSAqCUJpdCB0d2lkZGxpbmcuCi0gKiBFeGNlcHRpb246Ci0gKglJbmV4YWN0IGZsYWcgcmFpc2VkIGlmIHggbm90IGVxdWFsIHRvIGZsb29yZih4KS4KLSAqLwotCi0jaW5jbHVkZSAibWF0aC5oIgotI2luY2x1ZGUgIm1hdGhfcHJpdmF0ZS5oIgotCi1zdGF0aWMgY29uc3QgZmxvYXQgaHVnZSA9IDEuMGUzMDsKLQotZmxvYXQKLWZsb29yZihmbG9hdCB4KQotewotCWludDMyX3QgaTAsajA7Ci0JdV9pbnQzMl90IGk7Ci0JR0VUX0ZMT0FUX1dPUkQoaTAseCk7Ci0JajAgPSAoKGkwPj4yMykmMHhmZiktMHg3ZjsKLQlpZihqMDwyMykgewotCSAgICBpZihqMDwwKSB7IAkvKiByYWlzZSBpbmV4YWN0IGlmIHggIT0gMCAqLwotCQlpZihodWdlK3g+KGZsb2F0KTAuMCkgey8qIHJldHVybiAwKnNpZ24oeCkgaWYgfHh8PDEgKi8KLQkJICAgIGlmKGkwPj0wKSB7aTA9MDt9Ci0JCSAgICBlbHNlIGlmKChpMCYweDdmZmZmZmZmKSE9MCkKLQkJCXsgaTA9MHhiZjgwMDAwMDt9Ci0JCX0KLQkgICAgfSBlbHNlIHsKLQkJaSA9ICgweDAwN2ZmZmZmKT4+ajA7Ci0JCWlmKChpMCZpKT09MCkgcmV0dXJuIHg7IC8qIHggaXMgaW50ZWdyYWwgKi8KLQkJaWYoaHVnZSt4PihmbG9hdCkwLjApIHsJLyogcmFpc2UgaW5leGFjdCBmbGFnICovCi0JCSAgICBpZihpMDwwKSBpMCArPSAoMHgwMDgwMDAwMCk+PmowOwotCQkgICAgaTAgJj0gKH5pKTsKLQkJfQotCSAgICB9Ci0JfSBlbHNlIHsKLQkgICAgaWYoajA9PTB4ODApIHJldHVybiB4K3g7CS8qIGluZiBvciBOYU4gKi8KLQkgICAgZWxzZSByZXR1cm4geDsJCS8qIHggaXMgaW50ZWdyYWwgKi8KLQl9Ci0JU0VUX0ZMT0FUX1dPUkQoeCxpMCk7Ci0JcmV0dXJuIHg7Ci19CmRpZmYgLS1naXQgYS9saWJtL3NyYy9zX2Zsb29ybC5jIGIvbGlibS9zcmMvc19mbG9vcmwuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmVmMGFjYy4uMDAwMDAwMAotLS0gYS9saWJtL3NyYy9zX2Zsb29ybC5jCisrKyAvZGV2L251bGwKQEAgLTEsMTAyICswLDAgQEAKLS8qCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBDb3B5cmlnaHQgKEMpIDE5OTMgYnkgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIERldmVsb3BlZCBhdCBTdW5Qcm8sIGEgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBidXNpbmVzcy4KLSAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKLSAqIHNvZnR3YXJlIGlzIGZyZWVseSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoaXMgbm90aWNlCi0gKiBpcyBwcmVzZXJ2ZWQuCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKgotICogRnJvbTogQCgjKXNfZmxvb3IuYyA1LjEgOTMvMDkvMjQKLSAqLwotCi0jaWZuZGVmIGxpbnQKLXN0YXRpYyBjaGFyIHJjc2lkW10gPSAiJEZyZWVCU0Q6IHNyYy9saWIvbXN1bi9zcmMvc19mbG9vcmwuYyx2IDEuNCAyMDA1LzA0LzI4IDE5OjQ1OjU1IHN0ZWZhbmYgRXhwICQiOwotI2VuZGlmCi0KLS8qCi0gKiBmbG9vcmwoeCkKLSAqIFJldHVybiB4IHJvdW5kZWQgdG93YXJkIC1pbmYgdG8gaW50ZWdyYWwgdmFsdWUKLSAqIE1ldGhvZDoKLSAqCUJpdCB0d2lkZGxpbmcuCi0gKiBFeGNlcHRpb246Ci0gKglJbmV4YWN0IGZsYWcgcmFpc2VkIGlmIHggbm90IGVxdWFsIHRvIGZsb29ybCh4KS4KLSAqLwotCi0jaW5jbHVkZSA8ZmxvYXQuaD4KLSNpbmNsdWRlIDxtYXRoLmg+Ci0jaW5jbHVkZSA8c3RkaW50Lmg+Ci0KLSNpbmNsdWRlICJmcG1hdGguaCIKLQotI2lmZGVmIExEQkxfSU1QTElDSVRfTkJJVAotI2RlZmluZQlNQU5IX1NJWkUJKExEQkxfTUFOSF9TSVpFICsgMSkKLSNkZWZpbmUJSU5DX01BTkgodSwgYykJZG8gewkJCQkJXAotCXVpbnQ2NF90IG8gPSB1LmJpdHMubWFuaDsJCQkJXAotCXUuYml0cy5tYW5oICs9IChjKTsJCQkJCVwKLQlpZiAodS5iaXRzLm1hbmggPCBvKQkJCQkJXAotCQl1LmJpdHMuZXhwKys7CQkJCQlcCi19IHdoaWxlICgwKQotI2Vsc2UKLSNkZWZpbmUJTUFOSF9TSVpFCUxEQkxfTUFOSF9TSVpFCi0jZGVmaW5lCUlOQ19NQU5IKHUsIGMpCWRvIHsJCQkJCVwKLQl1aW50NjRfdCBvID0gdS5iaXRzLm1hbmg7CQkJCVwKLQl1LmJpdHMubWFuaCArPSAoYyk7CQkJCQlcCi0JaWYgKHUuYml0cy5tYW5oIDwgbykgewkJCQkJXAotCQl1LmJpdHMuZXhwKys7CQkJCQlcCi0JCXUuYml0cy5tYW5oIHw9IDFsbHUgPDwgKExEQkxfTUFOSF9TSVpFIC0gMSk7CVwKLQl9CQkJCQkJCVwKLX0gd2hpbGUgKDApCi0jZW5kaWYKLQotc3RhdGljIGNvbnN0IGxvbmcgZG91YmxlIGh1Z2UgPSAxLjBlMzAwOwotCi1sb25nIGRvdWJsZQotZmxvb3JsKGxvbmcgZG91YmxlIHgpCi17Ci0JdW5pb24gSUVFRWwyYml0cyB1ID0geyAuZSA9IHggfTsKLQlpbnQgZSA9IHUuYml0cy5leHAgLSBMREJMX01BWF9FWFAgKyAxOwotCi0JaWYgKGUgPCBNQU5IX1NJWkUgLSAxKSB7Ci0JCWlmIChlIDwgMCkgewkJCS8qIHJhaXNlIGluZXhhY3QgaWYgeCAhPSAwICovCi0JCQlpZiAoaHVnZSArIHggPiAwLjApCi0JCQkJaWYgKHUuYml0cy5leHAgPiAwIHx8Ci0JCQkJICAgICh1LmJpdHMubWFuaCB8IHUuYml0cy5tYW5sKSAhPSAwKQotCQkJCQl1LmUgPSB1LmJpdHMuc2lnbiA/IC0xLjAgOiAwLjA7Ci0JCX0gZWxzZSB7Ci0JCQl1aW50NjRfdCBtID0gKCgxbGx1IDw8IE1BTkhfU0laRSkgLSAxKSA+PiAoZSArIDEpOwotCQkJaWYgKCgodS5iaXRzLm1hbmggJiBtKSB8IHUuYml0cy5tYW5sKSA9PSAwKQotCQkJCXJldHVybiAoeCk7CS8qIHggaXMgaW50ZWdyYWwgKi8KLQkJCWlmICh1LmJpdHMuc2lnbikgewotI2lmZGVmIExEQkxfSU1QTElDSVRfTkJJVAotCQkJCWlmIChlID09IDApCi0JCQkJCXUuYml0cy5leHArKzsKLQkJCQllbHNlCi0jZW5kaWYKLQkJCQlJTkNfTUFOSCh1LCAxbGx1IDw8IChNQU5IX1NJWkUgLSBlIC0gMSkpOwotCQkJfQotCQkJaWYgKGh1Z2UgKyB4ID4gMC4wKSB7CS8qIHJhaXNlIGluZXhhY3QgZmxhZyAqLwotCQkJCXUuYml0cy5tYW5oICY9IH5tOwotCQkJCXUuYml0cy5tYW5sID0gMDsKLQkJCX0KLQkJfQotCX0gZWxzZSBpZiAoZSA8IExEQkxfTUFOVF9ESUcgLSAxKSB7Ci0JCXVpbnQ2NF90IG0gPSAodWludDY0X3QpLTEgPj4gKDY0IC0gTERCTF9NQU5UX0RJRyArIGUgKyAxKTsKLQkJaWYgKCh1LmJpdHMubWFubCAmIG0pID09IDApCi0JCQlyZXR1cm4gKHgpOwkvKiB4IGlzIGludGVncmFsICovCi0JCWlmICh1LmJpdHMuc2lnbikgewotCQkJaWYgKGUgPT0gTUFOSF9TSVpFIC0gMSkKLQkJCQlJTkNfTUFOSCh1LCAxKTsKLQkJCWVsc2UgewotCQkJCXVpbnQ2NF90IG8gPSB1LmJpdHMubWFubDsKLQkJCQl1LmJpdHMubWFubCArPSAxbGx1IDw8IChMREJMX01BTlRfRElHIC0gZSAtIDEpOwotCQkJCWlmICh1LmJpdHMubWFubCA8IG8pCS8qIGdvdCBhIGNhcnJ5ICovCi0JCQkJCUlOQ19NQU5IKHUsIDEpOwotCQkJfQotCQl9Ci0JCWlmIChodWdlICsgeCA+IDAuMCkJCS8qIHJhaXNlIGluZXhhY3QgZmxhZyAqLwotCQkJdS5iaXRzLm1hbmwgJj0gfm07Ci0JfQotCXJldHVybiAodS5lKTsKLX0KZGlmZiAtLWdpdCBhL2xpYm0vc3JjL3NfZm1hLmMgYi9saWJtL3NyYy9zX2ZtYS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZmNjMjZjLi4wMDAwMDAwCi0tLSBhL2xpYm0vc3JjL3NfZm1hLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyMDIgKzAsMCBAQAotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgRGF2aWQgU2NodWx0eiA8ZGFzQEZyZWVCU0QuT1JHPgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSA8c3lzL2NkZWZzLmg+Ci0vKiBfX0ZCU0RJRCgiJEZyZWVCU0Q6IHNyYy9saWIvbXN1bi9zcmMvc19mbWEuYyx2IDEuNCAyMDA1LzAzLzE4IDAyOjI3OjU5IGRhcyBFeHAgJCIpOyAqLwotCi0jaW5jbHVkZSA8ZmVudi5oPgotI2luY2x1ZGUgPGZsb2F0Lmg+Ci0jaW5jbHVkZSA8bWF0aC5oPgotCi0vKgotICogRnVzZWQgbXVsdGlwbHktYWRkOiBDb21wdXRlIHggKiB5ICsgeiB3aXRoIGEgc2luZ2xlIHJvdW5kaW5nIGVycm9yLgotICoKLSAqIFdlIHVzZSBzY2FsaW5nIHRvIGF2b2lkIG92ZXJmbG93L3VuZGVyZmxvdywgYWxvbmcgd2l0aCB0aGUKLSAqIGNhbm9uaWNhbCBwcmVjaXNpb24tZG91YmxpbmcgdGVjaG5pcXVlIGFkYXB0ZWQgZnJvbToKLSAqCi0gKglEZWtrZXIsIFQuICBBIEZsb2F0aW5nLVBvaW50IFRlY2huaXF1ZSBmb3IgRXh0ZW5kaW5nIHRoZQotICoJQXZhaWxhYmxlIFByZWNpc2lvbi4gIE51bWVyLiBNYXRoLiAxOCwgMjI0LTI0MiAoMTk3MSkuCi0gKgotICogVGhpcyBhbGdvcml0aG0gaXMgc2Vuc2l0aXZlIHRvIHRoZSByb3VuZGluZyBwcmVjaXNpb24uICBGUFVzIHN1Y2gKLSAqIGFzIHRoZSBpMzg3IG11c3QgYmUgc2V0IGluIGRvdWJsZS1wcmVjaXNpb24gbW9kZSBpZiB2YXJpYWJsZXMgYXJlCi0gKiB0byBiZSBzdG9yZWQgaW4gRlAgcmVnaXN0ZXJzIGluIG9yZGVyIHRvIGF2b2lkIGluY29ycmVjdCByZXN1bHRzLgotICogVGhpcyBpcyB0aGUgZGVmYXVsdCBvbiBGcmVlQlNELCBidXQgbm90IG9uIG1hbnkgb3RoZXIgc3lzdGVtcy4KLSAqCi0gKiBIYXJkd2FyZSBpbnN0cnVjdGlvbnMgc2hvdWxkIGJlIHVzZWQgb24gYXJjaGl0ZWN0dXJlcyB0aGF0IHN1cHBvcnQgaXQsCi0gKiBzaW5jZSB0aGlzIGltcGxlbWVudGF0aW9uIHdpbGwgbGlrZWx5IGJlIHNldmVyYWwgdGltZXMgc2xvd2VyLgotICovCi0jaWYgTERCTF9NQU5UX0RJRyAhPSAxMTMKLWRvdWJsZQotZm1hKGRvdWJsZSB4LCBkb3VibGUgeSwgZG91YmxlIHopCi17Ci0Jc3RhdGljIGNvbnN0IGRvdWJsZSBzcGxpdCA9IDB4MXAyNyArIDEuMDsKLQlkb3VibGUgeHMsIHlzLCB6czsKLQlkb3VibGUgYywgY2MsIGh4LCBoeSwgcCwgcSwgdHgsIHR5OwotCWRvdWJsZSByLCByciwgczsKLQlpbnQgb3JvdW5kOwotCWludCBleCwgZXksIGV6OwotCWludCBzcHJlYWQ7Ci0KLQlpZiAoeiA9PSAwLjApCi0JCXJldHVybiAoeCAqIHkpOwotCWlmICh4ID09IDAuMCB8fCB5ID09IDAuMCkKLQkJcmV0dXJuICh4ICogeSArIHopOwotCi0JLyogUmVzdWx0cyBvZiBmcmV4cCgpIGFyZSB1bmRlZmluZWQgZm9yIHRoZXNlIGNhc2VzLiAqLwotCWlmICghaXNmaW5pdGUoeCkgfHwgIWlzZmluaXRlKHkpIHx8ICFpc2Zpbml0ZSh6KSkKLQkJcmV0dXJuICh4ICogeSArIHopOwotCi0JeHMgPSBmcmV4cCh4LCAmZXgpOwotCXlzID0gZnJleHAoeSwgJmV5KTsKLQl6cyA9IGZyZXhwKHosICZleik7Ci0Jb3JvdW5kID0gZmVnZXRyb3VuZCgpOwotCXNwcmVhZCA9IGV4ICsgZXkgLSBlejsKLQotCS8qCi0JICogSWYgeCAqIHkgYW5kIHogYXJlIG1hbnkgb3JkZXJzIG9mIG1hZ25pdHVkZSBhcGFydCwgdGhlIHNjYWxpbmcKLQkgKiB3aWxsIG92ZXJmbG93LCBzbyB3ZSBoYW5kbGUgdGhlc2UgY2FzZXMgc3BlY2lhbGx5LiAgUm91bmRpbmcKLQkgKiBtb2RlcyBvdGhlciB0aGFuIEZFX1RPTkVBUkVTVCBhcmUgcGFpbmZ1bC4KLQkgKi8KLQlpZiAoc3ByZWFkID4gREJMX01BTlRfRElHICogMikgewotCQlmZW52X3QgZW52OwotCQlmZXJhaXNlZXhjZXB0KEZFX0lORVhBQ1QpOwotCQlzd2l0Y2gob3JvdW5kKSB7Ci0JCWNhc2UgRkVfVE9ORUFSRVNUOgotCQkJcmV0dXJuICh4ICogeSk7Ci0JCWNhc2UgRkVfVE9XQVJEWkVSTzoKLQkJCWlmICh4ID4gMC4wIF4geSA8IDAuMCBeIHogPCAwLjApCi0JCQkJcmV0dXJuICh4ICogeSk7Ci0JCQlmZWhvbGRleGNlcHQoJmVudik7Ci0JCQlyID0geCAqIHk7Ci0JCQlpZiAoIWZldGVzdGV4Y2VwdChGRV9JTkVYQUNUKSkKLQkJCQlyID0gbmV4dGFmdGVyKHIsIDApOwotCQkJZmV1cGRhdGVlbnYoJmVudik7Ci0JCQlyZXR1cm4gKHIpOwotCQljYXNlIEZFX0RPV05XQVJEOgotCQkJaWYgKHogPiAwLjApCi0JCQkJcmV0dXJuICh4ICogeSk7Ci0JCQlmZWhvbGRleGNlcHQoJmVudik7Ci0JCQlyID0geCAqIHk7Ci0JCQlpZiAoIWZldGVzdGV4Y2VwdChGRV9JTkVYQUNUKSkKLQkJCQlyID0gbmV4dGFmdGVyKHIsIC1JTkZJTklUWSk7Ci0JCQlmZXVwZGF0ZWVudigmZW52KTsKLQkJCXJldHVybiAocik7Ci0JCWRlZmF1bHQ6CS8qIEZFX1VQV0FSRCAqLwotCQkJaWYgKHogPCAwLjApCi0JCQkJcmV0dXJuICh4ICogeSk7Ci0JCQlmZWhvbGRleGNlcHQoJmVudik7Ci0JCQlyID0geCAqIHk7Ci0JCQlpZiAoIWZldGVzdGV4Y2VwdChGRV9JTkVYQUNUKSkKLQkJCQlyID0gbmV4dGFmdGVyKHIsIElORklOSVRZKTsKLQkJCWZldXBkYXRlZW52KCZlbnYpOwotCQkJcmV0dXJuIChyKTsKLQkJfQotCX0KLQlpZiAoc3ByZWFkIDwgLURCTF9NQU5UX0RJRykgewotCQlmZXJhaXNlZXhjZXB0KEZFX0lORVhBQ1QpOwotCQlpZiAoIWlzbm9ybWFsKHopKQotCQkJZmVyYWlzZWV4Y2VwdChGRV9VTkRFUkZMT1cpOwotCQlzd2l0Y2ggKG9yb3VuZCkgewotCQljYXNlIEZFX1RPTkVBUkVTVDoKLQkJCXJldHVybiAoeik7Ci0JCWNhc2UgRkVfVE9XQVJEWkVSTzoKLQkJCWlmICh4ID4gMC4wIF4geSA8IDAuMCBeIHogPCAwLjApCi0JCQkJcmV0dXJuICh6KTsKLQkJCWVsc2UKLQkJCQlyZXR1cm4gKG5leHRhZnRlcih6LCAwKSk7Ci0JCWNhc2UgRkVfRE9XTldBUkQ6Ci0JCQlpZiAoeCA+IDAuMCBeIHkgPCAwLjApCi0JCQkJcmV0dXJuICh6KTsKLQkJCWVsc2UKLQkJCQlyZXR1cm4gKG5leHRhZnRlcih6LCAtSU5GSU5JVFkpKTsKLQkJZGVmYXVsdDoJLyogRkVfVVBXQVJEICovCi0JCQlpZiAoeCA+IDAuMCBeIHkgPCAwLjApCi0JCQkJcmV0dXJuIChuZXh0YWZ0ZXIoeiwgSU5GSU5JVFkpKTsKLQkJCWVsc2UKLQkJCQlyZXR1cm4gKHopOwotCQl9Ci0JfQotCi0JLyoKLQkgKiBVc2UgRGVra2VyJ3MgYWxnb3JpdGhtIHRvIHBlcmZvcm0gdGhlIG11bHRpcGxpY2F0aW9uIGFuZAotCSAqIHN1YnNlcXVlbnQgYWRkaXRpb24gaW4gdHdpY2UgdGhlIG1hY2hpbmUgcHJlY2lzaW9uLgotCSAqIEFycmFuZ2Ugc28gdGhhdCB4ICogeSA9IGMgKyBjYywgYW5kIHggKiB5ICsgeiA9IHIgKyByci4KLQkgKi8KLQlmZXNldHJvdW5kKEZFX1RPTkVBUkVTVCk7Ci0KLQlwID0geHMgKiBzcGxpdDsKLQloeCA9IHhzIC0gcDsKLQloeCArPSBwOwotCXR4ID0geHMgLSBoeDsKLQotCXAgPSB5cyAqIHNwbGl0OwotCWh5ID0geXMgLSBwOwotCWh5ICs9IHA7Ci0JdHkgPSB5cyAtIGh5OwotCi0JcCA9IGh4ICogaHk7Ci0JcSA9IGh4ICogdHkgKyB0eCAqIGh5OwotCWMgPSBwICsgcTsKLQljYyA9IHAgLSBjICsgcSArIHR4ICogdHk7Ci0KLQl6cyA9IGxkZXhwKHpzLCAtc3ByZWFkKTsKLQlyID0gYyArIHpzOwotCXMgPSByIC0gYzsKLQlyciA9IChjIC0gKHIgLSBzKSkgKyAoenMgLSBzKSArIGNjOwotCi0Jc3ByZWFkID0gZXggKyBleTsKLQlpZiAoc3ByZWFkICsgaWxvZ2IocikgPiAtMTAyMykgewotCQlmZXNldHJvdW5kKG9yb3VuZCk7Ci0JCXIgPSByICsgcnI7Ci0JfSBlbHNlIHsKLQkJLyoKLQkJICogVGhlIHJlc3VsdCBpcyBzdWJub3JtYWwsIHNvIHdlIHJvdW5kIGJlZm9yZSBzY2FsaW5nIHRvCi0JCSAqIGF2b2lkIGRvdWJsZSByb3VuZGluZy4KLQkJICovCi0JCXAgPSBsZGV4cChjb3B5c2lnbigweDFwLTEwMjIsIHIpLCAtc3ByZWFkKTsKLQkJYyA9IHIgKyBwOwotCQlzID0gYyAtIHI7Ci0JCWNjID0gKHIgLSAoYyAtIHMpKSArIChwIC0gcykgKyBycjsKLQkJZmVzZXRyb3VuZChvcm91bmQpOwotCQlyID0gKGMgKyBjYykgLSBwOwotCX0KLQlyZXR1cm4gKGxkZXhwKHIsIHNwcmVhZCkpOwotfQotI2Vsc2UJLyogTERCTF9NQU5UX0RJRyA9PSAxMTMgKi8KLS8qCi0gKiAxMTMgYml0cyBvZiBwcmVjaXNpb24gaXMgbW9yZSB0aGFuIHR3aWNlIHRoZSBwcmVjaXNpb24gb2YgYSBkb3VibGUsCi0gKiBzbyBpdCBpcyBlbm91Z2ggdG8gcmVwcmVzZW50IHRoZSBpbnRlcm1lZGlhdGUgcHJvZHVjdCBleGFjdGx5LgotICovCi1kb3VibGUKLWZtYShkb3VibGUgeCwgZG91YmxlIHksIGRvdWJsZSB6KQotewotCXJldHVybiAoKGxvbmcgZG91YmxlKXggKiB5ICsgeik7Ci19Ci0jZW5kaWYJLyogTERCTF9NQU5UX0RJRyAhPSAxMTMgKi8KLQotI2lmIChMREJMX01BTlRfRElHID09IDUzKQotX193ZWFrX3JlZmVyZW5jZShmbWEsIGZtYWwpOwotI2VuZGlmCmRpZmYgLS1naXQgYS9saWJtL3NyYy9zX2ZtYWYuYyBiL2xpYm0vc3JjL3NfZm1hZi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMWFhYWE5Li4wMDAwMDAwCi0tLSBhL2xpYm0vc3JjL3NfZm1hZi5jCisrKyAvZGV2L251bGwKQEAgLTEsNDcgKzAsMCBAQAotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgRGF2aWQgU2NodWx0eiA8ZGFzQEZyZWVCU0QuT1JHPgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSA8c3lzL2NkZWZzLmg+Ci0vKiBfX0ZCU0RJRCgiJEZyZWVCU0Q6IHNyYy9saWIvbXN1bi9zcmMvc19mbWFmLmMsdiAxLjEgMjAwNS8wMS8yMiAwOTo1MzoxOCBkYXMgRXhwICQiKTsgKi8KLQotLyoKLSAqIEZ1c2VkIG11bHRpcGx5LWFkZDogQ29tcHV0ZSB4ICogeSArIHogd2l0aCBhIHNpbmdsZSByb3VuZGluZyBlcnJvci4KLSAqCi0gKiBBIGRvdWJsZSBoYXMgbW9yZSB0aGFuIHR3aWNlIGFzIG11Y2ggcHJlY2lzaW9uIHRoYW4gYSBmbG9hdCwgc28KLSAqIGRpcmVjdCBkb3VibGUtcHJlY2lzaW9uIGFyaXRobWV0aWMgc3VmZmljZXMuCi0gKgotICogWFhYIFdlIGFyZSByZWx5aW5nIG9uIHRoZSBjb21waWxlciB0byBjb252ZXJ0IGZyb20gZG91YmxlIHRvIGZsb2F0Ci0gKiAgICAgdXNpbmcgdGhlIGN1cnJlbnQgcm91bmRpbmcgbW9kZSBhbmQgd2l0aCB0aGUgYXBwcm9wcmlhdGUKLSAqICAgICBzaWRlLWVmZmVjdHMuICBCdXQgb24gYXQgbGVhc3Qgb25lIHBsYXRmb3JtIChnY2MgMy40LjIvc3BhcmM2NCksCi0gKiAgICAgdGhpcyBhcHBlYXJzIHRvIGJlIHRvbyBtdWNoIHRvIGFzayBmb3IuICBUaGUgcHJlY2lzaW9uCi0gKiAgICAgcmVkdWN0aW9uIHNob3VsZCBiZSBkb25lIG1hbnVhbGx5LgotICovCi1mbG9hdAotZm1hZihmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB6KQotewotCi0JcmV0dXJuICgoZG91YmxlKXggKiB5ICsgeik7Ci19CmRpZmYgLS1naXQgYS9saWJtL3NyYy9zX2ZtYWwuYyBiL2xpYm0vc3JjL3NfZm1hbC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMTczNmZhLi4wMDAwMDAwCi0tLSBhL2xpYm0vc3JjL3NfZm1hbC5jCisrKyAvZGV2L251bGwKQEAgLTEsMTgyICswLDAgQEAKLS8qLQotICogQ29weXJpZ2h0IChjKSAyMDA1IERhdmlkIFNjaHVsdHogPGRhc0BGcmVlQlNELk9SRz4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgotLyogX19GQlNESUQoIiRGcmVlQlNEOiBzcmMvbGliL21zdW4vc3JjL3NfZm1hbC5jLHYgMS4yIDIwMDUvMDMvMTggMDI6Mjc6NTkgZGFzIEV4cCAkIik7ICovCi0KLSNpbmNsdWRlIDxmZW52Lmg+Ci0jaW5jbHVkZSA8ZmxvYXQuaD4KLSNpbmNsdWRlIDxtYXRoLmg+Ci0KLS8qCi0gKiBGdXNlZCBtdWx0aXBseS1hZGQ6IENvbXB1dGUgeCAqIHkgKyB6IHdpdGggYSBzaW5nbGUgcm91bmRpbmcgZXJyb3IuCi0gKgotICogV2UgdXNlIHNjYWxpbmcgdG8gYXZvaWQgb3ZlcmZsb3cvdW5kZXJmbG93LCBhbG9uZyB3aXRoIHRoZQotICogY2Fub25pY2FsIHByZWNpc2lvbi1kb3VibGluZyB0ZWNobmlxdWUgYWRhcHRlZCBmcm9tOgotICoKLSAqCURla2tlciwgVC4gIEEgRmxvYXRpbmctUG9pbnQgVGVjaG5pcXVlIGZvciBFeHRlbmRpbmcgdGhlCi0gKglBdmFpbGFibGUgUHJlY2lzaW9uLiAgTnVtZXIuIE1hdGguIDE4LCAyMjQtMjQyICgxOTcxKS4KLSAqLwotbG9uZyBkb3VibGUKLWZtYWwobG9uZyBkb3VibGUgeCwgbG9uZyBkb3VibGUgeSwgbG9uZyBkb3VibGUgeikKLXsKLSNpZiBMREJMX01BTlRfRElHID09IDY0Ci0Jc3RhdGljIGNvbnN0IGxvbmcgZG91YmxlIHNwbGl0ID0gMHgxcDMyTCArIDEuMDsKLSNlbGlmIExEQkxfTUFOVF9ESUcgPT0gMTEzCi0Jc3RhdGljIGNvbnN0IGxvbmcgZG91YmxlIHNwbGl0ID0gMHgxcDU3TCArIDEuMDsKLSNlbmRpZgotCWxvbmcgZG91YmxlIHhzLCB5cywgenM7Ci0JbG9uZyBkb3VibGUgYywgY2MsIGh4LCBoeSwgcCwgcSwgdHgsIHR5OwotCWxvbmcgZG91YmxlIHIsIHJyLCBzOwotCWludCBvcm91bmQ7Ci0JaW50IGV4LCBleSwgZXo7Ci0JaW50IHNwcmVhZDsKLQotCWlmICh6ID09IDAuMCkKLQkJcmV0dXJuICh4ICogeSk7Ci0JaWYgKHggPT0gMC4wIHx8IHkgPT0gMC4wKQotCQlyZXR1cm4gKHggKiB5ICsgeik7Ci0KLQkvKiBSZXN1bHRzIG9mIGZyZXhwKCkgYXJlIHVuZGVmaW5lZCBmb3IgdGhlc2UgY2FzZXMuICovCi0JaWYgKCFpc2Zpbml0ZSh4KSB8fCAhaXNmaW5pdGUoeSkgfHwgIWlzZmluaXRlKHopKQotCQlyZXR1cm4gKHggKiB5ICsgeik7Ci0KLQl4cyA9IGZyZXhwbCh4LCAmZXgpOwotCXlzID0gZnJleHBsKHksICZleSk7Ci0JenMgPSBmcmV4cGwoeiwgJmV6KTsKLQlvcm91bmQgPSBmZWdldHJvdW5kKCk7Ci0Jc3ByZWFkID0gZXggKyBleSAtIGV6OwotCi0JLyoKLQkgKiBJZiB4ICogeSBhbmQgeiBhcmUgbWFueSBvcmRlcnMgb2YgbWFnbml0dWRlIGFwYXJ0LCB0aGUgc2NhbGluZwotCSAqIHdpbGwgb3ZlcmZsb3csIHNvIHdlIGhhbmRsZSB0aGVzZSBjYXNlcyBzcGVjaWFsbHkuICBSb3VuZGluZwotCSAqIG1vZGVzIG90aGVyIHRoYW4gRkVfVE9ORUFSRVNUIGFyZSBwYWluZnVsLgotCSAqLwotCWlmIChzcHJlYWQgPiBMREJMX01BTlRfRElHICogMikgewotCQlmZW52X3QgZW52OwotCQlmZXJhaXNlZXhjZXB0KEZFX0lORVhBQ1QpOwotCQlzd2l0Y2gob3JvdW5kKSB7Ci0JCWNhc2UgRkVfVE9ORUFSRVNUOgotCQkJcmV0dXJuICh4ICogeSk7Ci0JCWNhc2UgRkVfVE9XQVJEWkVSTzoKLQkJCWlmICh4ID4gMC4wIF4geSA8IDAuMCBeIHogPCAwLjApCi0JCQkJcmV0dXJuICh4ICogeSk7Ci0JCQlmZWhvbGRleGNlcHQoJmVudik7Ci0JCQlyID0geCAqIHk7Ci0JCQlpZiAoIWZldGVzdGV4Y2VwdChGRV9JTkVYQUNUKSkKLQkJCQlyID0gbmV4dGFmdGVybChyLCAwKTsKLQkJCWZldXBkYXRlZW52KCZlbnYpOwotCQkJcmV0dXJuIChyKTsKLQkJY2FzZSBGRV9ET1dOV0FSRDoKLQkJCWlmICh6ID4gMC4wKQotCQkJCXJldHVybiAoeCAqIHkpOwotCQkJZmVob2xkZXhjZXB0KCZlbnYpOwotCQkJciA9IHggKiB5OwotCQkJaWYgKCFmZXRlc3RleGNlcHQoRkVfSU5FWEFDVCkpCi0JCQkJciA9IG5leHRhZnRlcmwociwgLUlORklOSVRZKTsKLQkJCWZldXBkYXRlZW52KCZlbnYpOwotCQkJcmV0dXJuIChyKTsKLQkJZGVmYXVsdDoJLyogRkVfVVBXQVJEICovCi0JCQlpZiAoeiA8IDAuMCkKLQkJCQlyZXR1cm4gKHggKiB5KTsKLQkJCWZlaG9sZGV4Y2VwdCgmZW52KTsKLQkJCXIgPSB4ICogeTsKLQkJCWlmICghZmV0ZXN0ZXhjZXB0KEZFX0lORVhBQ1QpKQotCQkJCXIgPSBuZXh0YWZ0ZXJsKHIsIElORklOSVRZKTsKLQkJCWZldXBkYXRlZW52KCZlbnYpOwotCQkJcmV0dXJuIChyKTsKLQkJfQotCX0KLQlpZiAoc3ByZWFkIDwgLUxEQkxfTUFOVF9ESUcpIHsKLQkJZmVyYWlzZWV4Y2VwdChGRV9JTkVYQUNUKTsKLQkJaWYgKCFpc25vcm1hbCh6KSkKLQkJCWZlcmFpc2VleGNlcHQoRkVfVU5ERVJGTE9XKTsKLQkJc3dpdGNoIChvcm91bmQpIHsKLQkJY2FzZSBGRV9UT05FQVJFU1Q6Ci0JCQlyZXR1cm4gKHopOwotCQljYXNlIEZFX1RPV0FSRFpFUk86Ci0JCQlpZiAoeCA+IDAuMCBeIHkgPCAwLjAgXiB6IDwgMC4wKQotCQkJCXJldHVybiAoeik7Ci0JCQllbHNlCi0JCQkJcmV0dXJuIChuZXh0YWZ0ZXJsKHosIDApKTsKLQkJY2FzZSBGRV9ET1dOV0FSRDoKLQkJCWlmICh4ID4gMC4wIF4geSA8IDAuMCkKLQkJCQlyZXR1cm4gKHopOwotCQkJZWxzZQotCQkJCXJldHVybiAobmV4dGFmdGVybCh6LCAtSU5GSU5JVFkpKTsKLQkJZGVmYXVsdDoJLyogRkVfVVBXQVJEICovCi0JCQlpZiAoeCA+IDAuMCBeIHkgPCAwLjApCi0JCQkJcmV0dXJuIChuZXh0YWZ0ZXJsKHosIElORklOSVRZKSk7Ci0JCQllbHNlCi0JCQkJcmV0dXJuICh6KTsKLQkJfQotCX0KLQotCS8qCi0JICogVXNlIERla2tlcidzIGFsZ29yaXRobSB0byBwZXJmb3JtIHRoZSBtdWx0aXBsaWNhdGlvbiBhbmQKLQkgKiBzdWJzZXF1ZW50IGFkZGl0aW9uIGluIHR3aWNlIHRoZSBtYWNoaW5lIHByZWNpc2lvbi4KLQkgKiBBcnJhbmdlIHNvIHRoYXQgeCAqIHkgPSBjICsgY2MsIGFuZCB4ICogeSArIHogPSByICsgcnIuCi0JICovCi0JZmVzZXRyb3VuZChGRV9UT05FQVJFU1QpOwotCi0JcCA9IHhzICogc3BsaXQ7Ci0JaHggPSB4cyAtIHA7Ci0JaHggKz0gcDsKLQl0eCA9IHhzIC0gaHg7Ci0KLQlwID0geXMgKiBzcGxpdDsKLQloeSA9IHlzIC0gcDsKLQloeSArPSBwOwotCXR5ID0geXMgLSBoeTsKLQotCXAgPSBoeCAqIGh5OwotCXEgPSBoeCAqIHR5ICsgdHggKiBoeTsKLQljID0gcCArIHE7Ci0JY2MgPSBwIC0gYyArIHEgKyB0eCAqIHR5OwotCi0JenMgPSBsZGV4cGwoenMsIC1zcHJlYWQpOwotCXIgPSBjICsgenM7Ci0JcyA9IHIgLSBjOwotCXJyID0gKGMgLSAociAtIHMpKSArICh6cyAtIHMpICsgY2M7Ci0KLQlzcHJlYWQgPSBleCArIGV5OwotCWlmIChzcHJlYWQgKyBpbG9nYmwocikgPiAtMTYzODMpIHsKLQkJZmVzZXRyb3VuZChvcm91bmQpOwotCQlyID0gciArIHJyOwotCX0gZWxzZSB7Ci0JCS8qCi0JCSAqIFRoZSByZXN1bHQgaXMgc3Vibm9ybWFsLCBzbyB3ZSByb3VuZCBiZWZvcmUgc2NhbGluZyB0bwotCQkgKiBhdm9pZCBkb3VibGUgcm91bmRpbmcuCi0JCSAqLwotCQlwID0gbGRleHBsKGNvcHlzaWdubCgweDFwLTE2MzgyTCwgciksIC1zcHJlYWQpOwotCQljID0gciArIHA7Ci0JCXMgPSBjIC0gcjsKLQkJY2MgPSAociAtIChjIC0gcykpICsgKHAgLSBzKSArIHJyOwotCQlmZXNldHJvdW5kKG9yb3VuZCk7Ci0JCXIgPSAoYyArIGNjKSAtIHA7Ci0JfQotCXJldHVybiAobGRleHBsKHIsIHNwcmVhZCkpOwotfQpkaWZmIC0tZ2l0IGEvbGlibS9zcmMvc19mbWF4LmMgYi9saWJtL3NyYy9zX2ZtYXguYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzM0NWY2Ny4uMDAwMDAwMAotLS0gYS9saWJtL3NyYy9zX2ZtYXguYworKysgL2Rldi9udWxsCkBAIC0xLDUzICswLDAgQEAKLS8qLQotICogQ29weXJpZ2h0IChjKSAyMDA0IERhdmlkIFNjaHVsdHogPGRhc0BGcmVlQlNELk9SRz4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgotLyogX19GQlNESUQoIiRGcmVlQlNEOiBzcmMvbGliL21zdW4vc3JjL3NfZm1heC5jLHYgMS4xIDIwMDQvMDYvMzAgMDc6MDQ6MDEgZGFzIEV4cCAkIik7ICovCi0KLSNpbmNsdWRlIDxtYXRoLmg+Ci0KLSNpbmNsdWRlICJmcG1hdGguaCIKLQotZG91YmxlCi1mbWF4KGRvdWJsZSB4LCBkb3VibGUgeSkKLXsKLQl1bmlvbiBJRUVFZDJiaXRzIHVbMl07Ci0KLQl1WzBdLmQgPSB4OwotCXVbMV0uZCA9IHk7Ci0KLQkvKiBDaGVjayBmb3IgTmFOcyB0byBhdm9pZCByYWlzaW5nIHNwdXJpb3VzIGV4Y2VwdGlvbnMuICovCi0JaWYgKHVbMF0uYml0cy5leHAgPT0gMjA0NyAmJiAodVswXS5iaXRzLm1hbmggfCB1WzBdLmJpdHMubWFubCkgIT0gMCkKLQkJcmV0dXJuICh5KTsKLQlpZiAodVsxXS5iaXRzLmV4cCA9PSAyMDQ3ICYmICh1WzFdLmJpdHMubWFuaCB8IHVbMV0uYml0cy5tYW5sKSAhPSAwKQotCQlyZXR1cm4gKHgpOwotCi0JLyogSGFuZGxlIGNvbXBhcmlzb25zIG9mIHNpZ25lZCB6ZXJvZXMuICovCi0JaWYgKHVbMF0uYml0cy5zaWduICE9IHVbMV0uYml0cy5zaWduKQotCQlyZXR1cm4gKHVbdVswXS5iaXRzLnNpZ25dLmQpOwotCi0JcmV0dXJuICh4ID4geSA/IHggOiB5KTsKLX0KZGlmZiAtLWdpdCBhL2xpYm0vc3JjL3NfZm1heGYuYyBiL2xpYm0vc3JjL3NfZm1heGYuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjY3ZjY1NC4uMDAwMDAwMAotLS0gYS9saWJtL3NyYy9zX2ZtYXhmLmMKKysrIC9kZXYvbnVsbApAQCAtMSw1MyArMCwwIEBACi0vKi0KLSAqIENvcHlyaWdodCAoYykgMjAwNCBEYXZpZCBTY2h1bHR6IDxkYXNARnJlZUJTRC5PUkc+Ci0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KLS8qIF9fRkJTRElEKCIkRnJlZUJTRDogc3JjL2xpYi9tc3VuL3NyYy9zX2ZtYXhmLmMsdiAxLjEgMjAwNC8wNi8zMCAwNzowNDowMSBkYXMgRXhwICQiKTsgKi8KLQotI2luY2x1ZGUgPG1hdGguaD4KLQotI2luY2x1ZGUgImZwbWF0aC5oIgotCi1mbG9hdAotZm1heGYoZmxvYXQgeCwgZmxvYXQgeSkKLXsKLQl1bmlvbiBJRUVFZjJiaXRzIHVbMl07Ci0KLQl1WzBdLmYgPSB4OwotCXVbMV0uZiA9IHk7Ci0KLQkvKiBDaGVjayBmb3IgTmFOcyB0byBhdm9pZCByYWlzaW5nIHNwdXJpb3VzIGV4Y2VwdGlvbnMuICovCi0JaWYgKHVbMF0uYml0cy5leHAgPT0gMjU1ICYmIHVbMF0uYml0cy5tYW4gIT0gMCkKLQkJcmV0dXJuICh5KTsKLQlpZiAodVsxXS5iaXRzLmV4cCA9PSAyNTUgJiYgdVsxXS5iaXRzLm1hbiAhPSAwKQotCQlyZXR1cm4gKHgpOwotCi0JLyogSGFuZGxlIGNvbXBhcmlzb25zIG9mIHNpZ25lZCB6ZXJvZXMuICovCi0JaWYgKHVbMF0uYml0cy5zaWduICE9IHVbMV0uYml0cy5zaWduKQotCQlyZXR1cm4gKHVbdVswXS5iaXRzLnNpZ25dLmYpOwotCi0JcmV0dXJuICh4ID4geSA/IHggOiB5KTsKLX0KZGlmZiAtLWdpdCBhL2xpYm0vc3JjL3NfZm1heGwuYyBiL2xpYm0vc3JjL3NfZm1heGwuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzFhOWRiZS4uMDAwMDAwMAotLS0gYS9saWJtL3NyYy9zX2ZtYXhsLmMKKysrIC9kZXYvbnVsbApAQCAtMSw1NSArMCwwIEBACi0vKi0KLSAqIENvcHlyaWdodCAoYykgMjAwNCBEYXZpZCBTY2h1bHR6IDxkYXNARnJlZUJTRC5PUkc+Ci0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KLS8qIF9fRkJTRElEKCIkRnJlZUJTRDogc3JjL2xpYi9tc3VuL3NyYy9zX2ZtYXhsLmMsdiAxLjEgMjAwNC8wNi8zMCAwNzowNDowMSBkYXMgRXhwICQiKTsgKi8KLQotI2luY2x1ZGUgPG1hdGguaD4KLQotI2luY2x1ZGUgImZwbWF0aC5oIgotCi1sb25nIGRvdWJsZQotZm1heGwobG9uZyBkb3VibGUgeCwgbG9uZyBkb3VibGUgeSkKLXsKLQl1bmlvbiBJRUVFbDJiaXRzIHVbMl07Ci0KLQl1WzBdLmUgPSB4OwotCW1hc2tfbmJpdF9sKHVbMF0pOwotCXVbMV0uZSA9IHk7Ci0JbWFza19uYml0X2wodVsxXSk7Ci0KLQkvKiBDaGVjayBmb3IgTmFOcyB0byBhdm9pZCByYWlzaW5nIHNwdXJpb3VzIGV4Y2VwdGlvbnMuICovCi0JaWYgKHVbMF0uYml0cy5leHAgPT0gMzI3NjcgJiYgKHVbMF0uYml0cy5tYW5oIHwgdVswXS5iaXRzLm1hbmwpICE9IDApCi0JCXJldHVybiAoeSk7Ci0JaWYgKHVbMV0uYml0cy5leHAgPT0gMzI3NjcgJiYgKHVbMV0uYml0cy5tYW5oIHwgdVsxXS5iaXRzLm1hbmwpICE9IDApCi0JCXJldHVybiAoeCk7Ci0KLQkvKiBIYW5kbGUgY29tcGFyaXNvbnMgb2Ygc2lnbmVkIHplcm9lcy4gKi8KLQlpZiAodVswXS5iaXRzLnNpZ24gIT0gdVsxXS5iaXRzLnNpZ24pCi0JCXJldHVybiAodVswXS5iaXRzLnNpZ24gPyB5IDogeCk7Ci0KLQlyZXR1cm4gKHggPiB5ID8geCA6IHkpOwotfQpkaWZmIC0tZ2l0IGEvbGlibS9zcmMvc19mbWluLmMgYi9saWJtL3NyYy9zX2ZtaW4uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDliOWNjNC4uMDAwMDAwMAotLS0gYS9saWJtL3NyYy9zX2ZtaW4uYworKysgL2Rldi9udWxsCkBAIC0xLDUzICswLDAgQEAKLS8qLQotICogQ29weXJpZ2h0IChjKSAyMDA0IERhdmlkIFNjaHVsdHogPGRhc0BGcmVlQlNELk9SRz4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgotLyogX19GQlNESUQoIiRGcmVlQlNEOiBzcmMvbGliL21zdW4vc3JjL3NfZm1pbi5jLHYgMS4xIDIwMDQvMDYvMzAgMDc6MDQ6MDEgZGFzIEV4cCAkIik7ICovCi0KLSNpbmNsdWRlIDxtYXRoLmg+Ci0KLSNpbmNsdWRlICJmcG1hdGguaCIKLQotZG91YmxlCi1mbWluKGRvdWJsZSB4LCBkb3VibGUgeSkKLXsKLQl1bmlvbiBJRUVFZDJiaXRzIHVbMl07Ci0KLQl1WzBdLmQgPSB4OwotCXVbMV0uZCA9IHk7Ci0KLQkvKiBDaGVjayBmb3IgTmFOcyB0byBhdm9pZCByYWlzaW5nIHNwdXJpb3VzIGV4Y2VwdGlvbnMuICovCi0JaWYgKHVbMF0uYml0cy5leHAgPT0gMjA0NyAmJiAodVswXS5iaXRzLm1hbmggfCB1WzBdLmJpdHMubWFubCkgIT0gMCkKLQkJcmV0dXJuICh5KTsKLQlpZiAodVsxXS5iaXRzLmV4cCA9PSAyMDQ3ICYmICh1WzFdLmJpdHMubWFuaCB8IHVbMV0uYml0cy5tYW5sKSAhPSAwKQotCQlyZXR1cm4gKHgpOwotCi0JLyogSGFuZGxlIGNvbXBhcmlzb25zIG9mIHNpZ25lZCB6ZXJvZXMuICovCi0JaWYgKHVbMF0uYml0cy5zaWduICE9IHVbMV0uYml0cy5zaWduKQotCQlyZXR1cm4gKHVbdVsxXS5iaXRzLnNpZ25dLmQpOwotCi0JcmV0dXJuICh4IDwgeSA/IHggOiB5KTsKLX0KZGlmZiAtLWdpdCBhL2xpYm0vc3JjL3NfZm1pbmYuYyBiL2xpYm0vc3JjL3NfZm1pbmYuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTZmYjU3NS4uMDAwMDAwMAotLS0gYS9saWJtL3NyYy9zX2ZtaW5mLmMKKysrIC9kZXYvbnVsbApAQCAtMSw1MyArMCwwIEBACi0vKi0KLSAqIENvcHlyaWdodCAoYykgMjAwNCBEYXZpZCBTY2h1bHR6IDxkYXNARnJlZUJTRC5PUkc+Ci0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KLS8qIF9fRkJTRElEKCIkRnJlZUJTRDogc3JjL2xpYi9tc3VuL3NyYy9zX2ZtaW5mLmMsdiAxLjEgMjAwNC8wNi8zMCAwNzowNDowMSBkYXMgRXhwICQiKTsgKi8KLQotI2luY2x1ZGUgPG1hdGguaD4KLQotI2luY2x1ZGUgImZwbWF0aC5oIgotCi1mbG9hdAotZm1pbmYoZmxvYXQgeCwgZmxvYXQgeSkKLXsKLQl1bmlvbiBJRUVFZjJiaXRzIHVbMl07Ci0KLQl1WzBdLmYgPSB4OwotCXVbMV0uZiA9IHk7Ci0KLQkvKiBDaGVjayBmb3IgTmFOcyB0byBhdm9pZCByYWlzaW5nIHNwdXJpb3VzIGV4Y2VwdGlvbnMuICovCi0JaWYgKHVbMF0uYml0cy5leHAgPT0gMjU1ICYmIHVbMF0uYml0cy5tYW4gIT0gMCkKLQkJcmV0dXJuICh5KTsKLQlpZiAodVsxXS5iaXRzLmV4cCA9PSAyNTUgJiYgdVsxXS5iaXRzLm1hbiAhPSAwKQotCQlyZXR1cm4gKHgpOwotCi0JLyogSGFuZGxlIGNvbXBhcmlzb25zIG9mIHNpZ25lZCB6ZXJvZXMuICovCi0JaWYgKHVbMF0uYml0cy5zaWduICE9IHVbMV0uYml0cy5zaWduKQotCQlyZXR1cm4gKHVbdVsxXS5iaXRzLnNpZ25dLmYpOwotCi0JcmV0dXJuICh4IDwgeSA/IHggOiB5KTsKLX0KZGlmZiAtLWdpdCBhL2xpYm0vc3JjL3NfZm1pbmwuYyBiL2xpYm0vc3JjL3NfZm1pbmwuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWY4YzUwZS4uMDAwMDAwMAotLS0gYS9saWJtL3NyYy9zX2ZtaW5sLmMKKysrIC9kZXYvbnVsbApAQCAtMSw1NSArMCwwIEBACi0vKi0KLSAqIENvcHlyaWdodCAoYykgMjAwNCBEYXZpZCBTY2h1bHR6IDxkYXNARnJlZUJTRC5PUkc+Ci0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KLS8qIF9fRkJTRElEKCIkRnJlZUJTRDogc3JjL2xpYi9tc3VuL3NyYy9zX2ZtaW5sLmMsdiAxLjEgMjAwNC8wNi8zMCAwNzowNDowMSBkYXMgRXhwICQiKTsgKi8KLQotI2luY2x1ZGUgPG1hdGguaD4KLQotI2luY2x1ZGUgImZwbWF0aC5oIgotCi1sb25nIGRvdWJsZQotZm1pbmwobG9uZyBkb3VibGUgeCwgbG9uZyBkb3VibGUgeSkKLXsKLQl1bmlvbiBJRUVFbDJiaXRzIHVbMl07Ci0KLQl1WzBdLmUgPSB4OwotCW1hc2tfbmJpdF9sKHVbMF0pOwotCXVbMV0uZSA9IHk7Ci0JbWFza19uYml0X2wodVsxXSk7Ci0KLQkvKiBDaGVjayBmb3IgTmFOcyB0byBhdm9pZCByYWlzaW5nIHNwdXJpb3VzIGV4Y2VwdGlvbnMuICovCi0JaWYgKHVbMF0uYml0cy5leHAgPT0gMzI3NjcgJiYgKHVbMF0uYml0cy5tYW5oIHwgdVswXS5iaXRzLm1hbmwpICE9IDApCi0JCXJldHVybiAoeSk7Ci0JaWYgKHVbMV0uYml0cy5leHAgPT0gMzI3NjcgJiYgKHVbMV0uYml0cy5tYW5oIHwgdVsxXS5iaXRzLm1hbmwpICE9IDApCi0JCXJldHVybiAoeCk7Ci0KLQkvKiBIYW5kbGUgY29tcGFyaXNvbnMgb2Ygc2lnbmVkIHplcm9lcy4gKi8KLQlpZiAodVswXS5iaXRzLnNpZ24gIT0gdVsxXS5iaXRzLnNpZ24pCi0JCXJldHVybiAodVsxXS5iaXRzLnNpZ24gPyB5IDogeCk7Ci0KLQlyZXR1cm4gKHggPCB5ID8geCA6IHkpOwotfQpkaWZmIC0tZ2l0IGEvbGlibS9zcmMvc19mcmV4cC5jIGIvbGlibS9zcmMvc19mcmV4cC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkODllMTM1Li4wMDAwMDAwCi0tLSBhL2xpYm0vc3JjL3NfZnJleHAuYworKysgL2Rldi9udWxsCkBAIC0xLDU4ICswLDAgQEAKLS8qIEAoIylzX2ZyZXhwLmMgNS4xIDkzLzA5LzI0ICovCi0vKgotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogQ29weXJpZ2h0IChDKSAxOTkzIGJ5IFN1biBNaWNyb3N5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBEZXZlbG9wZWQgYXQgU3VuUHJvLCBhIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gYnVzaW5lc3MuCi0gKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCi0gKiBzb2Z0d2FyZSBpcyBmcmVlbHkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGlzIG5vdGljZQotICogaXMgcHJlc2VydmVkLgotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICovCi0KLSNpZm5kZWYgbGludAotc3RhdGljIGNoYXIgcmNzaWRbXSA9ICIkRnJlZUJTRDogc3JjL2xpYi9tc3VuL3NyYy9zX2ZyZXhwLmMsdiAxLjEwIDIwMDUvMDMvMDcgMjE6Mjc6MzcgZGFzIEV4cCAkIjsKLSNlbmRpZgotCi0vKgotICogZm9yIG5vbi16ZXJvIHgKLSAqCXggPSBmcmV4cChhcmcsJmV4cCk7Ci0gKiByZXR1cm4gYSBkb3VibGUgZnAgcXVhbnRpdHkgeCBzdWNoIHRoYXQgMC41IDw9IHx4fCA8MS4wCi0gKiBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgYmluYXJ5IGV4cG9uZW50ICJleHAiLiBUaGF0IGlzCi0gKglhcmcgPSB4KjJeZXhwLgotICogSWYgYXJnIGlzIGluZiwgMC4wLCBvciBOYU4sIHRoZW4gZnJleHAoYXJnLCZleHApIHJldHVybnMgYXJnCi0gKiB3aXRoICpleHA9MC4KLSAqLwotCi0jaW5jbHVkZSA8c3lzL2NkZWZzLmg+Ci0jaW5jbHVkZSA8ZmxvYXQuaD4KLQotI2luY2x1ZGUgIm1hdGguaCIKLSNpbmNsdWRlICJtYXRoX3ByaXZhdGUuaCIKLQotc3RhdGljIGNvbnN0IGRvdWJsZQotdHdvNTQgPSAgMS44MDE0Mzk4NTA5NDgxOTg0MDAwMGUrMTY7IC8qIDB4NDM1MDAwMDAsIDB4MDAwMDAwMDAgKi8KLQotZG91YmxlCi1mcmV4cChkb3VibGUgeCwgaW50ICplcHRyKQotewotCWludDMyX3QgaHgsIGl4LCBseDsKLQlFWFRSQUNUX1dPUkRTKGh4LGx4LHgpOwotCWl4ID0gMHg3ZmZmZmZmZiZoeDsKLQkqZXB0ciA9IDA7Ci0JaWYoaXg+PTB4N2ZmMDAwMDB8fCgoaXh8bHgpPT0wKSkgcmV0dXJuIHg7CS8qIDAsaW5mLG5hbiAqLwotCWlmIChpeDwweDAwMTAwMDAwKSB7CQkvKiBzdWJub3JtYWwgKi8KLQkgICAgeCAqPSB0d281NDsKLQkgICAgR0VUX0hJR0hfV09SRChoeCx4KTsKLQkgICAgaXggPSBoeCYweDdmZmZmZmZmOwotCSAgICAqZXB0ciA9IC01NDsKLQl9Ci0JKmVwdHIgKz0gKGl4Pj4yMCktMTAyMjsKLQloeCA9IChoeCYweDgwMGZmZmZmKXwweDNmZTAwMDAwOwotCVNFVF9ISUdIX1dPUkQoeCxoeCk7Ci0JcmV0dXJuIHg7Ci19Ci0KLSNpZiAoTERCTF9NQU5UX0RJRyA9PSA1MykKLV9fd2Vha19yZWZlcmVuY2UoZnJleHAsIGZyZXhwbCk7Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL2xpYm0vc3JjL3NfZnJleHBmLmMgYi9saWJtL3NyYy9zX2ZyZXhwZi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMThjZDU0Li4wMDAwMDAwCi0tLSBhL2xpYm0vc3JjL3NfZnJleHBmLmMKKysrIC9kZXYvbnVsbApAQCAtMSw0NCArMCwwIEBACi0vKiBzX2ZyZXhwZi5jIC0tIGZsb2F0IHZlcnNpb24gb2Ygc19mcmV4cC5jLgotICogQ29udmVyc2lvbiB0byBmbG9hdCBieSBJYW4gTGFuY2UgVGF5bG9yLCBDeWdudXMgU3VwcG9ydCwgaWFuQGN5Z251cy5jb20uCi0gKi8KLQotLyoKLSAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIENvcHlyaWdodCAoQykgMTk5MyBieSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogRGV2ZWxvcGVkIGF0IFN1blBybywgYSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGJ1c2luZXNzLgotICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcwotICogc29mdHdhcmUgaXMgZnJlZWx5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhpcyBub3RpY2UKLSAqIGlzIHByZXNlcnZlZC4KLSAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqLwotCi0jaWZuZGVmIGxpbnQKLXN0YXRpYyBjaGFyIHJjc2lkW10gPSAiJEZyZWVCU0Q6IHNyYy9saWIvbXN1bi9zcmMvc19mcmV4cGYuYyx2IDEuOCAyMDAyLzA1LzI4IDE4OjE1OjA0IGFsZnJlZCBFeHAgJCI7Ci0jZW5kaWYKLQotI2luY2x1ZGUgIm1hdGguaCIKLSNpbmNsdWRlICJtYXRoX3ByaXZhdGUuaCIKLQotc3RhdGljIGNvbnN0IGZsb2F0Ci10d28yNSA9ICAzLjM1NTQ0MzIwMDBlKzA3OyAvKiAweDRjMDAwMDAwICovCi0KLWZsb2F0Ci1mcmV4cGYoZmxvYXQgeCwgaW50ICplcHRyKQotewotCWludDMyX3QgaHgsaXg7Ci0JR0VUX0ZMT0FUX1dPUkQoaHgseCk7Ci0JaXggPSAweDdmZmZmZmZmJmh4OwotCSplcHRyID0gMDsKLQlpZihpeD49MHg3ZjgwMDAwMHx8KGl4PT0wKSkgcmV0dXJuIHg7CS8qIDAsaW5mLG5hbiAqLwotCWlmIChpeDwweDAwODAwMDAwKSB7CQkvKiBzdWJub3JtYWwgKi8KLQkgICAgeCAqPSB0d28yNTsKLQkgICAgR0VUX0ZMT0FUX1dPUkQoaHgseCk7Ci0JICAgIGl4ID0gaHgmMHg3ZmZmZmZmZjsKLQkgICAgKmVwdHIgPSAtMjU7Ci0JfQotCSplcHRyICs9IChpeD4+MjMpLTEyNjsKLQloeCA9IChoeCYweDgwN2ZmZmZmKXwweDNmMDAwMDAwOwotCVNFVF9GTE9BVF9XT1JEKHgsaHgpOwotCXJldHVybiB4OwotfQpkaWZmIC0tZ2l0IGEvbGlibS9zcmMvc19mcmV4cGwuYyBiL2xpYm0vc3JjL3NfZnJleHBsLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIwYjMxNjcuLjAwMDAwMDAKLS0tIGEvbGlibS9zcmMvc19mcmV4cGwuYworKysgL2Rldi9udWxsCkBAIC0xLDYyICswLDAgQEAKLS8qLQotICogQ29weXJpZ2h0IChjKSAyMDA0LTIwMDUgRGF2aWQgU2NodWx0eiA8ZGFzQEZyZWVCU0QuT1JHPgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqCi0gKiAkRnJlZUJTRDogc3JjL2xpYi9tc3VuL3NyYy9zX2ZyZXhwbC5jLHYgMS4xIDIwMDUvMDMvMDcgMDQ6NTQ6NTEgZGFzIEV4cCAkCi0gKi8KLQotI2luY2x1ZGUgPGZsb2F0Lmg+Ci0jaW5jbHVkZSA8bWF0aC5oPgotCi0jaW5jbHVkZSAiZnBtYXRoLmgiCi0KLSNpZiBMREJMX01BWF9FWFAgIT0gMHg0MDAwCi0jZXJyb3IgIlVuc3VwcG9ydGVkIGxvbmcgZG91YmxlIGZvcm1hdCIKLSNlbmRpZgotCi1sb25nIGRvdWJsZQotZnJleHBsKGxvbmcgZG91YmxlIHgsIGludCAqZXgpCi17Ci0JdW5pb24gSUVFRWwyYml0cyB1OwotCi0JdS5lID0geDsKLQlzd2l0Y2ggKHUuYml0cy5leHApIHsKLQljYXNlIDA6CQkvKiAwIG9yIHN1Ym5vcm1hbCAqLwotCQlpZiAoKHUuYml0cy5tYW5sIHwgdS5iaXRzLm1hbmgpID09IDApIHsKLQkJCSpleCA9IDA7Ci0JCX0gZWxzZSB7Ci0JCQl1LmUgKj0gMHgxLjBwNTE0OwotCQkJKmV4ID0gdS5iaXRzLmV4cCAtIDB4NDIwMDsKLQkJCXUuYml0cy5leHAgPSAweDNmZmU7Ci0JCX0KLQkJYnJlYWs7Ci0JY2FzZSAweDdmZmY6CS8qIGluZmluaXR5IG9yIE5hTjsgdmFsdWUgb2YgKmV4IGlzIHVuc3BlY2lmaWVkICovCi0JCWJyZWFrOwotCWRlZmF1bHQ6CS8qIG5vcm1hbCAqLwotCQkqZXggPSB1LmJpdHMuZXhwIC0gMHgzZmZlOwotCQl1LmJpdHMuZXhwID0gMHgzZmZlOwotCQlicmVhazsKLQl9Ci0JcmV0dXJuICh1LmUpOwotfQpkaWZmIC0tZ2l0IGEvbGlibS9zcmMvc19pbG9nYi5jIGIvbGlibS9zcmMvc19pbG9nYi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZDRhNDRiLi4wMDAwMDAwCi0tLSBhL2xpYm0vc3JjL3NfaWxvZ2IuYworKysgL2Rldi9udWxsCkBAIC0xLDQ5ICswLDAgQEAKLS8qIEAoIylzX2lsb2diLmMgNS4xIDkzLzA5LzI0ICovCi0vKgotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogQ29weXJpZ2h0IChDKSAxOTkzIGJ5IFN1biBNaWNyb3N5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBEZXZlbG9wZWQgYXQgU3VuUHJvLCBhIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gYnVzaW5lc3MuCi0gKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCi0gKiBzb2Z0d2FyZSBpcyBmcmVlbHkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGlzIG5vdGljZQotICogaXMgcHJlc2VydmVkLgotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICovCi0KLSNpZm5kZWYgbGludAotc3RhdGljIGNoYXIgcmNzaWRbXSA9ICIkRnJlZUJTRDogc3JjL2xpYi9tc3VuL3NyYy9zX2lsb2diLmMsdiAxLjkgMjAwNC8xMC8wOSAxNzoxNDoyOCBzdGVmYW5mIEV4cCAkIjsKLSNlbmRpZgotCi0vKiBpbG9nYihkb3VibGUgeCkKLSAqIHJldHVybiB0aGUgYmluYXJ5IGV4cG9uZW50IG9mIG5vbi16ZXJvIHgKLSAqIGlsb2diKDApID0gRlBfSUxPR0IwCi0gKiBpbG9nYihOYU4pID0gRlBfSUxPR0JOQU4gKG5vIHNpZ25hbCBpcyByYWlzZWQpCi0gKiBpbG9nYihpbmYpID0gSU5UX01BWCAobm8gc2lnbmFsIGlzIHJhaXNlZCkKLSAqLwotCi0jaW5jbHVkZSA8bGltaXRzLmg+Ci0KLSNpbmNsdWRlICJtYXRoLmgiCi0jaW5jbHVkZSAibWF0aF9wcml2YXRlLmgiCi0KLQlpbnQgaWxvZ2IoZG91YmxlIHgpCi17Ci0JaW50MzJfdCBoeCxseCxpeDsKLQotCUVYVFJBQ1RfV09SRFMoaHgsbHgseCk7Ci0JaHggJj0gMHg3ZmZmZmZmZjsKLQlpZihoeDwweDAwMTAwMDAwKSB7Ci0JICAgIGlmKChoeHxseCk9PTApCi0JCXJldHVybiBGUF9JTE9HQjA7Ci0JICAgIGVsc2UJCQkvKiBzdWJub3JtYWwgeCAqLwotCQlpZihoeD09MCkgewotCQkgICAgZm9yIChpeCA9IC0xMDQzOyBseD4wOyBseDw8PTEpIGl4IC09MTsKLQkJfSBlbHNlIHsKLQkJICAgIGZvciAoaXggPSAtMTAyMixoeDw8PTExOyBoeD4wOyBoeDw8PTEpIGl4IC09MTsKLQkJfQotCSAgICByZXR1cm4gaXg7Ci0JfQotCWVsc2UgaWYgKGh4PDB4N2ZmMDAwMDApIHJldHVybiAoaHg+PjIwKS0xMDIzOwotCWVsc2UgaWYgKGh4PjB4N2ZmMDAwMDAgfHwgbHghPTApIHJldHVybiBGUF9JTE9HQk5BTjsKLQllbHNlIHJldHVybiBJTlRfTUFYOwotfQpkaWZmIC0tZ2l0IGEvbGlibS9zcmMvc19pbG9nYmYuYyBiL2xpYm0vc3JjL3NfaWxvZ2JmLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNjOWM0ZGUuLjAwMDAwMDAKLS0tIGEvbGlibS9zcmMvc19pbG9nYmYuYworKysgL2Rldi9udWxsCkBAIC0xLDQxICswLDAgQEAKLS8qIHNfaWxvZ2JmLmMgLS0gZmxvYXQgdmVyc2lvbiBvZiBzX2lsb2diLmMuCi0gKiBDb252ZXJzaW9uIHRvIGZsb2F0IGJ5IElhbiBMYW5jZSBUYXlsb3IsIEN5Z251cyBTdXBwb3J0LCBpYW5AY3lnbnVzLmNvbS4KLSAqLwotCi0vKgotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogQ29weXJpZ2h0IChDKSAxOTkzIGJ5IFN1biBNaWNyb3N5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBEZXZlbG9wZWQgYXQgU3VuUHJvLCBhIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gYnVzaW5lc3MuCi0gKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCi0gKiBzb2Z0d2FyZSBpcyBmcmVlbHkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGlzIG5vdGljZQotICogaXMgcHJlc2VydmVkLgotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICovCi0KLSNpZm5kZWYgbGludAotc3RhdGljIGNoYXIgcmNzaWRbXSA9ICIkRnJlZUJTRDogc3JjL2xpYi9tc3VuL3NyYy9zX2lsb2diZi5jLHYgMS43IDIwMDQvMTAvMDkgMTc6MTQ6Mjggc3RlZmFuZiBFeHAgJCI7Ci0jZW5kaWYKLQotI2luY2x1ZGUgPGxpbWl0cy5oPgotCi0jaW5jbHVkZSAibWF0aC5oIgotI2luY2x1ZGUgIm1hdGhfcHJpdmF0ZS5oIgotCi0JaW50IGlsb2diZihmbG9hdCB4KQotewotCWludDMyX3QgaHgsaXg7Ci0KLQlHRVRfRkxPQVRfV09SRChoeCx4KTsKLQloeCAmPSAweDdmZmZmZmZmOwotCWlmKGh4PDB4MDA4MDAwMDApIHsKLQkgICAgaWYoaHg9PTApCi0JCXJldHVybiBGUF9JTE9HQjA7Ci0JICAgIGVsc2UJCQkvKiBzdWJub3JtYWwgeCAqLwotCSAgICAgICAgZm9yIChpeCA9IC0xMjYsaHg8PD04OyBoeD4wOyBoeDw8PTEpIGl4IC09MTsKLQkgICAgcmV0dXJuIGl4OwotCX0KLQllbHNlIGlmIChoeDwweDdmODAwMDAwKSByZXR1cm4gKGh4Pj4yMyktMTI3OwotCWVsc2UgaWYgKGh4PjB4N2Y4MDAwMDApIHJldHVybiBGUF9JTE9HQk5BTjsKLQllbHNlIHJldHVybiBJTlRfTUFYOwotfQpkaWZmIC0tZ2l0IGEvbGlibS9zcmMvc19pbG9nYmwuYyBiL2xpYm0vc3JjL3NfaWxvZ2JsLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQwNmFkNTYuLjAwMDAwMDAKLS0tIGEvbGlibS9zcmMvc19pbG9nYmwuYworKysgL2Rldi9udWxsCkBAIC0xLDU0ICswLDAgQEAKLS8qCi0gKiBGcm9tOiBAKCMpc19pbG9nYi5jIDUuMSA5My8wOS8yNAotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogQ29weXJpZ2h0IChDKSAxOTkzIGJ5IFN1biBNaWNyb3N5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBEZXZlbG9wZWQgYXQgU3VuUHJvLCBhIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gYnVzaW5lc3MuCi0gKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCi0gKiBzb2Z0d2FyZSBpcyBmcmVlbHkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGlzIG5vdGljZQotICogaXMgcHJlc2VydmVkLgotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICovCi0KLSNpZm5kZWYgbGludAotc3RhdGljIGNoYXIgcmNzaWRbXSA9ICIkRnJlZUJTRDogc3JjL2xpYi9tc3VuL3NyYy9zX2lsb2dibC5jLHYgMS4xIDIwMDQvMTAvMTEgMTg6MTM6NTIgc3RlZmFuZiBFeHAgJCI7Ci0jZW5kaWYKLQotI2luY2x1ZGUgPGZsb2F0Lmg+Ci0jaW5jbHVkZSA8bGltaXRzLmg+Ci0jaW5jbHVkZSA8bWF0aC5oPgotCi0jaW5jbHVkZSAiZnBtYXRoLmgiCi0KLWludAotaWxvZ2JsKGxvbmcgZG91YmxlIHgpCi17Ci0JdW5pb24gSUVFRWwyYml0cyB1OwotCXVuc2lnbmVkIGxvbmcgbTsKLQlpbnQgYjsKLQotCXUuZSA9IHg7Ci0JaWYgKHUuYml0cy5leHAgPT0gMCkgewotCQlpZiAoKHUuYml0cy5tYW5sIHwgdS5iaXRzLm1hbmgpID09IDApCi0JCQlyZXR1cm4gKEZQX0lMT0dCMCk7Ci0JCS8qIGRlbm9ybWFsaXplZCAqLwotCQlpZiAodS5iaXRzLm1hbmggPT0gMCkgewotCQkJbSA9IDFsdSA8PCAoTERCTF9NQU5MX1NJWkUgLSAxKTsKLQkJCWZvciAoYiA9IExEQkxfTUFOSF9TSVpFOyAhKHUuYml0cy5tYW5sICYgbSk7IG0gPj49IDEpCi0JCQkJYisrOwotCQl9IGVsc2UgewotCQkJbSA9IDFsdSA8PCAoTERCTF9NQU5IX1NJWkUgLSAxKTsKLQkJCWZvciAoYiA9IDA7ICEodS5iaXRzLm1hbmggJiBtKTsgbSA+Pj0gMSkKLQkJCQliKys7Ci0JCX0KLSNpZmRlZiBMREJMX0lNUExJQ0lUX05CSVQKLQkJYisrOwotI2VuZGlmCi0JCXJldHVybiAoTERCTF9NSU5fRVhQIC0gYiAtIDEpOwotCX0gZWxzZSBpZiAodS5iaXRzLmV4cCA8IChMREJMX01BWF9FWFAgPDwgMSkgLSAxKQotCQlyZXR1cm4gKHUuYml0cy5leHAgLSBMREJMX01BWF9FWFAgKyAxKTsKLQllbHNlIGlmICh1LmJpdHMubWFubCAhPSAwIHx8IHUuYml0cy5tYW5oICE9IDApCi0JCXJldHVybiAoRlBfSUxPR0JOQU4pOwotCWVsc2UKLQkJcmV0dXJuIChJTlRfTUFYKTsKLX0KZGlmZiAtLWdpdCBhL2xpYm0vc3JjL3NfaXNmaW5pdGUuYyBiL2xpYm0vc3JjL3NfaXNmaW5pdGUuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzk0NTA1ZC4uMDAwMDAwMAotLS0gYS9saWJtL3NyYy9zX2lzZmluaXRlLmMKKysrIC9kZXYvbnVsbApAQCAtMSw1OCArMCwwIEBACi0vKi0KLSAqIENvcHlyaWdodCAoYykgMjAwNCBEYXZpZCBTY2h1bHR6IDxkYXNARnJlZUJTRC5PUkc+Ci0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICoKLSAqICRGcmVlQlNEOiBzcmMvbGliL21zdW4vc3JjL3NfaXNmaW5pdGUuYyx2IDEuMSAyMDA0LzA3LzA5IDAzOjMyOjM5IGRhcyBFeHAgJAotICovCi0KLSNpbmNsdWRlIDxtYXRoLmg+Ci0KLSNpbmNsdWRlICJmcG1hdGguaCIKLQotaW50Ci1fX2lzZmluaXRlKGRvdWJsZSBkKQotewotCXVuaW9uIElFRUVkMmJpdHMgdTsKLQotCXUuZCA9IGQ7Ci0JcmV0dXJuICh1LmJpdHMuZXhwICE9IDIwNDcpOwotfQotCi1pbnQKLV9faXNmaW5pdGVmKGZsb2F0IGYpCi17Ci0JdW5pb24gSUVFRWYyYml0cyB1OwotCi0JdS5mID0gZjsKLQlyZXR1cm4gKHUuYml0cy5leHAgIT0gMjU1KTsKLX0KLQotaW50Ci1fX2lzZmluaXRlbChsb25nIGRvdWJsZSBlKQotewotCXVuaW9uIElFRUVsMmJpdHMgdTsKLQotCXUuZSA9IGU7Ci0JcmV0dXJuICh1LmJpdHMuZXhwICE9IDMyNzY3KTsKLX0KZGlmZiAtLWdpdCBhL2xpYm0vc3JjL3NfaXNuYW4uYyBiL2xpYm0vc3JjL3NfaXNuYW4uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjc2MzUyZC4uMDAwMDAwMAotLS0gYS9saWJtL3NyYy9zX2lzbmFuLmMKKysrIC9kZXYvbnVsbApAQCAtMSw2MiArMCwwIEBACi0vKi0KLSAqIENvcHlyaWdodCAoYykgMjAwNCBEYXZpZCBTY2h1bHR6IDxkYXNARnJlZUJTRC5PUkc+Ci0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICoKLSAqICRGcmVlQlNEOiBzcmMvbGliL21zdW4vc3JjL3NfaXNuYW4uYyx2IDEuOCAyMDA0LzA4LzA1IDAxOjQ2OjExIGRhcyBFeHAgJAotICovCi0KLSNpbmNsdWRlIDxtYXRoLmg+Ci0KLSNpbmNsdWRlICJmcG1hdGguaCIKLQotLyogUHJvdmlkZWQgYnkgbGliYyAqLwotI2lmIDEKLWludAotKGlzbmFuKShkb3VibGUgZCkKLXsKLQl1bmlvbiBJRUVFZDJiaXRzIHU7Ci0KLQl1LmQgPSBkOwotCXJldHVybiAodS5iaXRzLmV4cCA9PSAyMDQ3ICYmICh1LmJpdHMubWFubCAhPSAwIHx8IHUuYml0cy5tYW5oICE9IDApKTsKLX0KLSNlbmRpZgotCi1pbnQKLWlzbmFuZihmbG9hdCBmKQotewotCXVuaW9uIElFRUVmMmJpdHMgdTsKLQotCXUuZiA9IGY7Ci0JcmV0dXJuICh1LmJpdHMuZXhwID09IDI1NSAmJiB1LmJpdHMubWFuICE9IDApOwotfQotCi1pbnQKLV9faXNuYW5sKGxvbmcgZG91YmxlIGUpCi17Ci0JdW5pb24gSUVFRWwyYml0cyB1OwotCi0JdS5lID0gZTsKLQltYXNrX25iaXRfbCh1KTsKLQlyZXR1cm4gKHUuYml0cy5leHAgPT0gMzI3NjcgJiYgKHUuYml0cy5tYW5sICE9IDAgfHwgdS5iaXRzLm1hbmggIT0gMCkpOwotfQpkaWZmIC0tZ2l0IGEvbGlibS9zcmMvc19pc25vcm1hbC5jIGIvbGlibS9zcmMvc19pc25vcm1hbC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMzQ1ZGJhLi4wMDAwMDAwCi0tLSBhL2xpYm0vc3JjL3NfaXNub3JtYWwuYworKysgL2Rldi9udWxsCkBAIC0xLDU4ICswLDAgQEAKLS8qLQotICogQ29weXJpZ2h0IChjKSAyMDA0IERhdmlkIFNjaHVsdHogPGRhc0BGcmVlQlNELk9SRz4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKgotICogJEZyZWVCU0Q6IHNyYy9saWIvbXN1bi9zcmMvc19pc25vcm1hbC5jLHYgMS4xIDIwMDQvMDcvMDkgMDM6MzI6MzkgZGFzIEV4cCAkCi0gKi8KLQotI2luY2x1ZGUgPG1hdGguaD4KLQotI2luY2x1ZGUgImZwbWF0aC5oIgotCi1pbnQKLV9faXNub3JtYWwoZG91YmxlIGQpCi17Ci0JdW5pb24gSUVFRWQyYml0cyB1OwotCi0JdS5kID0gZDsKLQlyZXR1cm4gKHUuYml0cy5leHAgIT0gMCAmJiB1LmJpdHMuZXhwICE9IDIwNDcpOwotfQotCi1pbnQKLV9faXNub3JtYWxmKGZsb2F0IGYpCi17Ci0JdW5pb24gSUVFRWYyYml0cyB1OwotCi0JdS5mID0gZjsKLQlyZXR1cm4gKHUuYml0cy5leHAgIT0gMCAmJiB1LmJpdHMuZXhwICE9IDI1NSk7Ci19Ci0KLWludAotX19pc25vcm1hbGwobG9uZyBkb3VibGUgZSkKLXsKLQl1bmlvbiBJRUVFbDJiaXRzIHU7Ci0KLQl1LmUgPSBlOwotCXJldHVybiAodS5iaXRzLmV4cCAhPSAwICYmIHUuYml0cy5leHAgIT0gMzI3NjcpOwotfQpkaWZmIC0tZ2l0IGEvbGlibS9zcmMvc19sbHJpbnQuYyBiL2xpYm0vc3JjL3NfbGxyaW50LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhhNjdmM2EuLjAwMDAwMDAKLS0tIGEvbGlibS9zcmMvc19sbHJpbnQuYworKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgotLyogX19GQlNESUQoIiRGcmVlQlNEOiBzcmMvbGliL21zdW4vc3JjL3NfbGxyaW50LmMsdiAxLjEgMjAwNS8wMS8xMSAyMzoxMjo1NSBkYXMgRXhwICQiKTsgKi8KLQotI2RlZmluZSB0eXBlCQlkb3VibGUKLSNkZWZpbmUJcm91bmRpdAkJcmludAotI2RlZmluZSBkdHlwZQkJbG9uZyBsb25nCi0jZGVmaW5lCWZuCQlsbHJpbnQKLQotI2luY2x1ZGUgInNfbHJpbnQuYyIKZGlmZiAtLWdpdCBhL2xpYm0vc3JjL3NfbGxyaW50Zi5jIGIvbGlibS9zcmMvc19sbHJpbnRmLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRkNzVlMzguLjAwMDAwMDAKLS0tIGEvbGlibS9zcmMvc19sbHJpbnRmLmMKKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLSNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KLS8qIF9fRkJTRElEKCIkRnJlZUJTRDogc3JjL2xpYi9tc3VuL3NyYy9zX2xscmludGYuYyx2IDEuMSAyMDA1LzAxLzExIDIzOjEyOjU1IGRhcyBFeHAgJCIpOyAqLwotCi0jZGVmaW5lIHR5cGUJCWZsb2F0Ci0jZGVmaW5lCXJvdW5kaXQJCXJpbnRmCi0jZGVmaW5lIGR0eXBlCQlsb25nIGxvbmcKLSNkZWZpbmUJZm4JCWxscmludGYKLQotI2luY2x1ZGUgInNfbHJpbnQuYyIKZGlmZiAtLWdpdCBhL2xpYm0vc3JjL3NfbGxyb3VuZC5jIGIvbGlibS9zcmMvc19sbHJvdW5kLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI4YWIxM2UuLjAwMDAwMDAKLS0tIGEvbGlibS9zcmMvc19sbHJvdW5kLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMSArMCwwIEBACi0jaW5jbHVkZSA8c3lzL2NkZWZzLmg+Ci0vKiBfX0ZCU0RJRCgiJEZyZWVCU0Q6IHNyYy9saWIvbXN1bi9zcmMvc19sbHJvdW5kLmMsdiAxLjIgMjAwNS8wNC8wOCAwMDo1MjoyNyBkYXMgRXhwICQiKTsgKi8KLQotI2RlZmluZSB0eXBlCQlkb3VibGUKLSNkZWZpbmUJcm91bmRpdAkJcm91bmQKLSNkZWZpbmUgZHR5cGUJCWxvbmcgbG9uZwotI2RlZmluZQlEVFlQRV9NSU4JTE9OR0xPTkdfTUlOCi0jZGVmaW5lCURUWVBFX01BWAlMT05HTE9OR19NQVgKLSNkZWZpbmUJZm4JCWxscm91bmQKLQotI2luY2x1ZGUgInNfbHJvdW5kLmMiCmRpZmYgLS1naXQgYS9saWJtL3NyYy9zX2xscm91bmRmLmMgYi9saWJtL3NyYy9zX2xscm91bmRmLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNkZDY5MDUuLjAwMDAwMDAKLS0tIGEvbGlibS9zcmMvc19sbHJvdW5kZi5jCisrKyAvZGV2L251bGwKQEAgLTEsMTEgKzAsMCBAQAotI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgotLyogX19GQlNESUQoIiRGcmVlQlNEOiBzcmMvbGliL21zdW4vc3JjL3NfbGxyb3VuZGYuYyx2IDEuMiAyMDA1LzA0LzA4IDAwOjUyOjI3IGRhcyBFeHAgJCIpOyAqLwotCi0jZGVmaW5lIHR5cGUJCWZsb2F0Ci0jZGVmaW5lCXJvdW5kaXQJCXJvdW5kZgotI2RlZmluZSBkdHlwZQkJbG9uZyBsb25nCi0jZGVmaW5lCURUWVBFX01JTglMT05HTE9OR19NSU4KLSNkZWZpbmUJRFRZUEVfTUFYCUxPTkdMT05HX01BWAotI2RlZmluZQlmbgkJbGxyb3VuZGYKLQotI2luY2x1ZGUgInNfbHJvdW5kLmMiCmRpZmYgLS1naXQgYS9saWJtL3NyYy9zX2xscm91bmRsLmMgYi9saWJtL3NyYy9zX2xscm91bmRsLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg5YmFlNTQuLjAwMDAwMDAKLS0tIGEvbGlibS9zcmMvc19sbHJvdW5kbC5jCisrKyAvZGV2L251bGwKQEAgLTEsMTEgKzAsMCBAQAotI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgotLyogX19GQlNESUQoIiRGcmVlQlNEOiBzcmMvbGliL21zdW4vc3JjL3NfbGxyb3VuZGwuYyx2IDEuMSAyMDA1LzA0LzA4IDAxOjI0OjA4IGRhcyBFeHAgJCIpOyAqLwotCi0jZGVmaW5lIHR5cGUJCWxvbmcgZG91YmxlCi0jZGVmaW5lCXJvdW5kaXQJCXJvdW5kbAotI2RlZmluZSBkdHlwZQkJbG9uZyBsb25nCi0jZGVmaW5lCURUWVBFX01JTglMT05HTE9OR19NSU4KLSNkZWZpbmUJRFRZUEVfTUFYCUxPTkdMT05HX01BWAotI2RlZmluZQlmbgkJbGxyb3VuZGwKLQotI2luY2x1ZGUgInNfbHJvdW5kLmMiCmRpZmYgLS1naXQgYS9saWJtL3NyYy9zX2xvZzFwLmMgYi9saWJtL3NyYy9zX2xvZzFwLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU2ZTE1MTYuLjAwMDAwMDAKLS0tIGEvbGlibS9zcmMvc19sb2cxcC5jCisrKyAvZGV2L251bGwKQEAgLTEsMTY4ICswLDAgQEAKLS8qIEAoIylzX2xvZzFwLmMgNS4xIDkzLzA5LzI0ICovCi0vKgotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogQ29weXJpZ2h0IChDKSAxOTkzIGJ5IFN1biBNaWNyb3N5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBEZXZlbG9wZWQgYXQgU3VuUHJvLCBhIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gYnVzaW5lc3MuCi0gKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCi0gKiBzb2Z0d2FyZSBpcyBmcmVlbHkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGlzIG5vdGljZQotICogaXMgcHJlc2VydmVkLgotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICovCi0KLSNpZm5kZWYgbGludAotc3RhdGljIGNoYXIgcmNzaWRbXSA9ICIkRnJlZUJTRDogc3JjL2xpYi9tc3VuL3NyYy9zX2xvZzFwLmMsdiAxLjggMjAwNS8xMi8wNCAxMjoyODozMyBiZGUgRXhwICQiOwotI2VuZGlmCi0KLS8qIGRvdWJsZSBsb2cxcChkb3VibGUgeCkKLSAqCi0gKiBNZXRob2QgOgotICogICAxLiBBcmd1bWVudCBSZWR1Y3Rpb246IGZpbmQgayBhbmQgZiBzdWNoIHRoYXQKLSAqCQkJMSt4ID0gMl5rICogKDErZiksCi0gKgkgICB3aGVyZSAgc3FydCgyKS8yIDwgMStmIDwgc3FydCgyKSAuCi0gKgotICogICAgICBOb3RlLiBJZiBrPTAsIHRoZW4gZj14IGlzIGV4YWN0LiBIb3dldmVyLCBpZiBrIT0wLCB0aGVuIGYKLSAqCW1heSBub3QgYmUgcmVwcmVzZW50YWJsZSBleGFjdGx5LiBJbiB0aGF0IGNhc2UsIGEgY29ycmVjdGlvbgotICoJdGVybSBpcyBuZWVkLiBMZXQgdT0xK3ggcm91bmRlZC4gTGV0IGMgPSAoMSt4KS11LCB0aGVuCi0gKglsb2coMSt4KSAtIGxvZyh1KSB+IGMvdS4gVGh1cywgd2UgcHJvY2VlZCB0byBjb21wdXRlIGxvZyh1KSwKLSAqCWFuZCBhZGQgYmFjayB0aGUgY29ycmVjdGlvbiB0ZXJtIGMvdS4KLSAqCShOb3RlOiB3aGVuIHggPiAyKio1Mywgb25lIGNhbiBzaW1wbHkgcmV0dXJuIGxvZyh4KSkKLSAqCi0gKiAgIDIuIEFwcHJveGltYXRpb24gb2YgbG9nMXAoZikuCi0gKglMZXQgcyA9IGYvKDIrZikgOyBiYXNlZCBvbiBsb2coMStmKSA9IGxvZygxK3MpIC0gbG9nKDEtcykKLSAqCQkgPSAycyArIDIvMyBzKiozICsgMi81IHMqKjUgKyAuLi4uLiwKLSAqCSAgICAgCSA9IDJzICsgcypSCi0gKiAgICAgIFdlIHVzZSBhIHNwZWNpYWwgUmVtZSBhbGdvcml0aG0gb24gWzAsMC4xNzE2XSB0byBnZW5lcmF0ZQotICogCWEgcG9seW5vbWlhbCBvZiBkZWdyZWUgMTQgdG8gYXBwcm94aW1hdGUgUiBUaGUgbWF4aW11bSBlcnJvcgotICoJb2YgdGhpcyBwb2x5bm9taWFsIGFwcHJveGltYXRpb24gaXMgYm91bmRlZCBieSAyKiotNTguNDUuIEluCi0gKglvdGhlciB3b3JkcywKLSAqCQkgICAgICAgIDIgICAgICA0ICAgICAgNiAgICAgIDggICAgICAxMCAgICAgIDEyICAgICAgMTQKLSAqCSAgICBSKHopIH4gTHAxKnMgK0xwMipzICtMcDMqcyArTHA0KnMgK0xwNSpzICArTHA2KnMgICtMcDcqcwotICogIAkodGhlIHZhbHVlcyBvZiBMcDEgdG8gTHA3IGFyZSBsaXN0ZWQgaW4gdGhlIHByb2dyYW0pCi0gKglhbmQKLSAqCSAgICB8ICAgICAgMiAgICAgICAgICAxNCAgICAgICAgICB8ICAgICAtNTguNDUKLSAqCSAgICB8IExwMSpzICsuLi4rTHA3KnMgICAgLSAgUih6KSB8IDw9IDIKLSAqCSAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gKglOb3RlIHRoYXQgMnMgPSBmIC0gcypmID0gZiAtIGhmc3EgKyBzKmhmc3EsIHdoZXJlIGhmc3EgPSBmKmYvMi4KLSAqCUluIG9yZGVyIHRvIGd1YXJhbnRlZSBlcnJvciBpbiBsb2cgYmVsb3cgMXVscCwgd2UgY29tcHV0ZSBsb2cKLSAqCWJ5Ci0gKgkJbG9nMXAoZikgPSBmIC0gKGhmc3EgLSBzKihoZnNxK1IpKS4KLSAqCi0gKgkzLiBGaW5hbGx5LCBsb2cxcCh4KSA9IGsqbG4yICsgbG9nMXAoZikuCi0gKgkJIAkgICAgID0gaypsbjJfaGkrKGYtKGhmc3EtKHMqKGhmc3ErUikraypsbjJfbG8pKSkKLSAqCSAgIEhlcmUgbG4yIGlzIHNwbGl0IGludG8gdHdvIGZsb2F0aW5nIHBvaW50IG51bWJlcjoKLSAqCQkJbG4yX2hpICsgbG4yX2xvLAotICoJICAgd2hlcmUgbipsbjJfaGkgaXMgYWx3YXlzIGV4YWN0IGZvciB8bnwgPCAyMDAwLgotICoKLSAqIFNwZWNpYWwgY2FzZXM6Ci0gKglsb2cxcCh4KSBpcyBOYU4gd2l0aCBzaWduYWwgaWYgeCA8IC0xIChpbmNsdWRpbmcgLUlORikgOwotICoJbG9nMXAoK0lORikgaXMgK0lORjsgbG9nMXAoLTEpIGlzIC1JTkYgd2l0aCBzaWduYWw7Ci0gKglsb2cxcChOYU4pIGlzIHRoYXQgTmFOIHdpdGggbm8gc2lnbmFsLgotICoKLSAqIEFjY3VyYWN5OgotICoJYWNjb3JkaW5nIHRvIGFuIGVycm9yIGFuYWx5c2lzLCB0aGUgZXJyb3IgaXMgYWx3YXlzIGxlc3MgdGhhbgotICoJMSB1bHAgKHVuaXQgaW4gdGhlIGxhc3QgcGxhY2UpLgotICoKLSAqIENvbnN0YW50czoKLSAqIFRoZSBoZXhhZGVjaW1hbCB2YWx1ZXMgYXJlIHRoZSBpbnRlbmRlZCBvbmVzIGZvciB0aGUgZm9sbG93aW5nCi0gKiBjb25zdGFudHMuIFRoZSBkZWNpbWFsIHZhbHVlcyBtYXkgYmUgdXNlZCwgcHJvdmlkZWQgdGhhdCB0aGUKLSAqIGNvbXBpbGVyIHdpbGwgY29udmVydCBmcm9tIGRlY2ltYWwgdG8gYmluYXJ5IGFjY3VyYXRlbHkgZW5vdWdoCi0gKiB0byBwcm9kdWNlIHRoZSBoZXhhZGVjaW1hbCB2YWx1ZXMgc2hvd24uCi0gKgotICogTm90ZTogQXNzdW1pbmcgbG9nKCkgcmV0dXJuIGFjY3VyYXRlIGFuc3dlciwgdGhlIGZvbGxvd2luZwotICogCSBhbGdvcml0aG0gY2FuIGJlIHVzZWQgdG8gY29tcHV0ZSBsb2cxcCh4KSB0byB3aXRoaW4gYSBmZXcgVUxQOgotICoKLSAqCQl1ID0gMSt4OwotICoJCWlmKHU9PTEuMCkgcmV0dXJuIHggOyBlbHNlCi0gKgkJCSAgIHJldHVybiBsb2codSkqKHgvKHUtMS4wKSk7Ci0gKgotICoJIFNlZSBIUC0xNUMgQWR2YW5jZWQgRnVuY3Rpb25zIEhhbmRib29rLCBwLjE5My4KLSAqLwotCi0jaW5jbHVkZSAibWF0aC5oIgotI2luY2x1ZGUgIm1hdGhfcHJpdmF0ZS5oIgotCi1zdGF0aWMgY29uc3QgZG91YmxlCi1sbjJfaGkgID0gIDYuOTMxNDcxODAzNjkxMjM4MTY0OTBlLTAxLAkvKiAzZmU2MmU0MiBmZWUwMDAwMCAqLwotbG4yX2xvICA9ICAxLjkwODIxNDkyOTI3MDU4NzcwMDAyZS0xMCwJLyogM2RlYTM5ZWYgMzU3OTNjNzYgKi8KLXR3bzU0ICAgPSAgMS44MDE0Mzk4NTA5NDgxOTg0MDAwMGUrMTYsICAvKiA0MzUwMDAwMCAwMDAwMDAwMCAqLwotTHAxID0gNi42NjY2NjY2NjY2NjY3MzUxMzBlLTAxLCAgLyogM0ZFNTU1NTUgNTU1NTU1OTMgKi8KLUxwMiA9IDMuOTk5OTk5OTk5OTQwOTQxOTA4ZS0wMSwgIC8qIDNGRDk5OTk5IDk5OTdGQTA0ICovCi1McDMgPSAyLjg1NzE0Mjg3NDM2NjIzOTE0OWUtMDEsICAvKiAzRkQyNDkyNCA5NDIyOTM1OSAqLwotTHA0ID0gMi4yMjIyMTk4NDMyMTQ5NzgzOTZlLTAxLCAgLyogM0ZDQzcxQzUgMUQ4RTc4QUYgKi8KLUxwNSA9IDEuODE4MzU3MjE2MTYxODA1MDEyZS0wMSwgIC8qIDNGQzc0NjY0IDk2Q0IwM0RFICovCi1McDYgPSAxLjUzMTM4Mzc2OTkyMDkzNzMzMmUtMDEsICAvKiAzRkMzOUEwOSBEMDc4QzY5RiAqLwotTHA3ID0gMS40Nzk4MTk4NjA1MTE2NTg1OTFlLTAxOyAgLyogM0ZDMkYxMTIgREYzRTUyNDQgKi8KLQotc3RhdGljIGNvbnN0IGRvdWJsZSB6ZXJvID0gMC4wOwotCi1kb3VibGUKLWxvZzFwKGRvdWJsZSB4KQotewotCWRvdWJsZSBoZnNxLGYsYyxzLHosUix1OwotCWludDMyX3QgayxoeCxodSxheDsKLQotCUdFVF9ISUdIX1dPUkQoaHgseCk7Ci0JYXggPSBoeCYweDdmZmZmZmZmOwotCi0JayA9IDE7Ci0JaWYgKGh4IDwgMHgzRkRBODI3QSkgewkJCS8qIDEreCA8IHNxcnQoMikrICovCi0JICAgIGlmKGF4Pj0weDNmZjAwMDAwKSB7CQkvKiB4IDw9IC0xLjAgKi8KLQkJaWYoeD09LTEuMCkgcmV0dXJuIC10d281NC96ZXJvOyAvKiBsb2cxcCgtMSk9K2luZiAqLwotCQllbHNlIHJldHVybiAoeC14KS8oeC14KTsJLyogbG9nMXAoeDwtMSk9TmFOICovCi0JICAgIH0KLQkgICAgaWYoYXg8MHgzZTIwMDAwMCkgewkJCS8qIHx4fCA8IDIqKi0yOSAqLwotCQlpZih0d281NCt4Pnplcm8JCQkvKiByYWlzZSBpbmV4YWN0ICovCi0JICAgICAgICAgICAgJiZheDwweDNjOTAwMDAwKSAJCS8qIHx4fCA8IDIqKi01NCAqLwotCQkgICAgcmV0dXJuIHg7Ci0JCWVsc2UKLQkJICAgIHJldHVybiB4IC0geCp4KjAuNTsKLQkgICAgfQotCSAgICBpZihoeD4wfHxoeDw9KChpbnQzMl90KTB4YmZkMmJlYzQpKSB7Ci0JCWs9MDtmPXg7aHU9MTt9CQkvKiBzcXJ0KDIpLzItIDw9IDEreCA8IHNxcnQoMikrICovCi0JfQotCWlmIChoeCA+PSAweDdmZjAwMDAwKSByZXR1cm4geCt4OwotCWlmKGshPTApIHsKLQkgICAgaWYoaHg8MHg0MzQwMDAwMCkgewotCQl1ICA9IDEuMCt4OwotCQlHRVRfSElHSF9XT1JEKGh1LHUpOwotCSAgICAgICAgayAgPSAoaHU+PjIwKS0xMDIzOwotCSAgICAgICAgYyAgPSAoaz4wKT8gMS4wLSh1LXgpOngtKHUtMS4wKTsvKiBjb3JyZWN0aW9uIHRlcm0gKi8KLQkJYyAvPSB1OwotCSAgICB9IGVsc2UgewotCQl1ICA9IHg7Ci0JCUdFVF9ISUdIX1dPUkQoaHUsdSk7Ci0JICAgICAgICBrICA9IChodT4+MjApLTEwMjM7Ci0JCWMgID0gMDsKLQkgICAgfQotCSAgICBodSAmPSAweDAwMGZmZmZmOwotCSAgICAvKgotCSAgICAgKiBUaGUgYXBwcm94aW1hdGlvbiB0byBzcXJ0KDIpIHVzZWQgaW4gdGhyZXNob2xkcyBpcyBub3QKLQkgICAgICogY3JpdGljYWwuICBIb3dldmVyLCB0aGUgb25lcyB1c2VkIGFib3ZlIG11c3QgZ2l2ZSBsZXNzCi0JICAgICAqIHN0cmljdCBib3VuZHMgdGhhbiB0aGUgb25lIGhlcmUgc28gdGhhdCB0aGUgaz09MCBjYXNlIGlzCi0JICAgICAqIG5ldmVyIHJlYWNoZWQgZnJvbSBoZXJlLCBzaW5jZSBoZXJlIHdlIGhhdmUgY29tbWl0dGVkIHRvCi0JICAgICAqIHVzaW5nIHRoZSBjb3JyZWN0aW9uIHRlcm0gYnV0IGRvbid0IHVzZSBpdCBpZiBrPT0wLgotCSAgICAgKi8KLQkgICAgaWYoaHU8MHg2YTA5ZSkgewkJCS8qIHUgfjwgc3FydCgyKSAqLwotCSAgICAgICAgU0VUX0hJR0hfV09SRCh1LGh1fDB4M2ZmMDAwMDApOwkvKiBub3JtYWxpemUgdSAqLwotCSAgICB9IGVsc2UgewotCSAgICAgICAgayArPSAxOwotCQlTRVRfSElHSF9XT1JEKHUsaHV8MHgzZmUwMDAwMCk7CS8qIG5vcm1hbGl6ZSB1LzIgKi8KLQkgICAgICAgIGh1ID0gKDB4MDAxMDAwMDAtaHUpPj4yOwotCSAgICB9Ci0JICAgIGYgPSB1LTEuMDsKLQl9Ci0JaGZzcT0wLjUqZipmOwotCWlmKGh1PT0wKSB7CS8qIHxmfCA8IDIqKi0yMCAqLwotCSAgICBpZihmPT16ZXJvKSBpZihrPT0wKSByZXR1cm4gemVybzsKLQkJCWVsc2Uge2MgKz0gaypsbjJfbG87IHJldHVybiBrKmxuMl9oaStjO30KLQkgICAgUiA9IGhmc3EqKDEuMC0wLjY2NjY2NjY2NjY2NjY2NjY2KmYpOwotCSAgICBpZihrPT0wKSByZXR1cm4gZi1SOyBlbHNlCi0JICAgIAkgICAgIHJldHVybiBrKmxuMl9oaS0oKFItKGsqbG4yX2xvK2MpKS1mKTsKLQl9Ci0gCXMgPSBmLygyLjArZik7Ci0JeiA9IHMqczsKLQlSID0geiooTHAxK3oqKExwMit6KihMcDMreiooTHA0K3oqKExwNSt6KihMcDYreipMcDcpKSkpKSk7Ci0JaWYoaz09MCkgcmV0dXJuIGYtKGhmc3EtcyooaGZzcStSKSk7IGVsc2UKLQkJIHJldHVybiBrKmxuMl9oaS0oKGhmc3EtKHMqKGhmc3ErUikrKGsqbG4yX2xvK2MpKSktZik7Ci19CmRpZmYgLS1naXQgYS9saWJtL3NyYy9zX2xvZzFwZi5jIGIvbGlibS9zcmMvc19sb2cxcGYuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODM2NGRhMC4uMDAwMDAwMAotLS0gYS9saWJtL3NyYy9zX2xvZzFwZi5jCisrKyAvZGV2L251bGwKQEAgLTEsMTA3ICswLDAgQEAKLS8qIHNfbG9nMXBmLmMgLS0gZmxvYXQgdmVyc2lvbiBvZiBzX2xvZzFwLmMuCi0gKiBDb252ZXJzaW9uIHRvIGZsb2F0IGJ5IElhbiBMYW5jZSBUYXlsb3IsIEN5Z251cyBTdXBwb3J0LCBpYW5AY3lnbnVzLmNvbS4KLSAqLwotCi0vKgotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogQ29weXJpZ2h0IChDKSAxOTkzIGJ5IFN1biBNaWNyb3N5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBEZXZlbG9wZWQgYXQgU3VuUHJvLCBhIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gYnVzaW5lc3MuCi0gKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCi0gKiBzb2Z0d2FyZSBpcyBmcmVlbHkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGlzIG5vdGljZQotICogaXMgcHJlc2VydmVkLgotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICovCi0KLSNpZm5kZWYgbGludAotc3RhdGljIGNoYXIgcmNzaWRbXSA9ICIkRnJlZUJTRDogc3JjL2xpYi9tc3VuL3NyYy9zX2xvZzFwZi5jLHYgMS45IDIwMDUvMTIvMDQgMTI6MzA6NDQgYmRlIEV4cCAkIjsKLSNlbmRpZgotCi0jaW5jbHVkZSAibWF0aC5oIgotI2luY2x1ZGUgIm1hdGhfcHJpdmF0ZS5oIgotCi1zdGF0aWMgY29uc3QgZmxvYXQKLWxuMl9oaSA9ICAgNi45MzEzODEyMjU2ZS0wMSwJLyogMHgzZjMxNzE4MCAqLwotbG4yX2xvID0gICA5LjA1ODAwMDYxNDVlLTA2LAkvKiAweDM3MTdmN2QxICovCi10d28yNSA9ICAgIDMuMzU1NDQzMjAwZSswNywJLyogMHg0YzAwMDAwMCAqLwotTHAxID0gNi42NjY2NjY4NjUzZS0wMSwJLyogM0YyQUFBQUIgKi8KLUxwMiA9IDQuMDAwMDAwMDU5NmUtMDEsCS8qIDNFQ0NDQ0NEICovCi1McDMgPSAyLjg1NzE0Mjk4NDllLTAxLCAvKiAzRTkyNDkyNSAqLwotTHA0ID0gMi4yMjIyMTk4NTQ2ZS0wMSwgLyogM0U2MzhFMjkgKi8KLUxwNSA9IDEuODE4MzU3MjU5MGUtMDEsIC8qIDNFM0EzMzI1ICovCi1McDYgPSAxLjUzMTM4Mzg0MjJlLTAxLCAvKiAzRTFDRDA0RiAqLwotTHA3ID0gMS40Nzk4MTk4NjQwZS0wMTsgLyogM0UxNzg4OTcgKi8KLQotc3RhdGljIGNvbnN0IGZsb2F0IHplcm8gPSAwLjA7Ci0KLWZsb2F0Ci1sb2cxcGYoZmxvYXQgeCkKLXsKLQlmbG9hdCBoZnNxLGYsYyxzLHosUix1OwotCWludDMyX3QgayxoeCxodSxheDsKLQotCUdFVF9GTE9BVF9XT1JEKGh4LHgpOwotCWF4ID0gaHgmMHg3ZmZmZmZmZjsKLQotCWsgPSAxOwotCWlmIChoeCA8IDB4M2VkNDEzZDApIHsJCQkvKiAxK3ggPCBzcXJ0KDIpKyAgKi8KLQkgICAgaWYoYXg+PTB4M2Y4MDAwMDApIHsJCS8qIHggPD0gLTEuMCAqLwotCQlpZih4PT0oZmxvYXQpLTEuMCkgcmV0dXJuIC10d28yNS96ZXJvOyAvKiBsb2cxcCgtMSk9K2luZiAqLwotCQllbHNlIHJldHVybiAoeC14KS8oeC14KTsJLyogbG9nMXAoeDwtMSk9TmFOICovCi0JICAgIH0KLQkgICAgaWYoYXg8MHgzMTAwMDAwMCkgewkJCS8qIHx4fCA8IDIqKi0yOSAqLwotCQlpZih0d28yNSt4Pnplcm8JCQkvKiByYWlzZSBpbmV4YWN0ICovCi0JICAgICAgICAgICAgJiZheDwweDI0ODAwMDAwKSAJCS8qIHx4fCA8IDIqKi01NCAqLwotCQkgICAgcmV0dXJuIHg7Ci0JCWVsc2UKLQkJICAgIHJldHVybiB4IC0geCp4KihmbG9hdCkwLjU7Ci0JICAgIH0KLQkgICAgaWYoaHg+MHx8aHg8PSgoaW50MzJfdCkweGJlOTVmNjE5KSkgewotCQlrPTA7Zj14O2h1PTE7fQkJLyogc3FydCgyKS8yLSA8PSAxK3ggPCBzcXJ0KDIpKyAqLwotCX0KLQlpZiAoaHggPj0gMHg3ZjgwMDAwMCkgcmV0dXJuIHgreDsKLQlpZihrIT0wKSB7Ci0JICAgIGlmKGh4PDB4NWEwMDAwMDApIHsKLQkJKih2b2xhdGlsZSBmbG9hdCAqKSZ1ID0gKGZsb2F0KTEuMCt4OwotCQlHRVRfRkxPQVRfV09SRChodSx1KTsKLQkgICAgICAgIGsgID0gKGh1Pj4yMyktMTI3OwotCQkvKiBjb3JyZWN0aW9uIHRlcm0gKi8KLQkgICAgICAgIGMgID0gKGs+MCk/IChmbG9hdCkxLjAtKHUteCk6eC0odS0oZmxvYXQpMS4wKTsKLQkJYyAvPSB1OwotCSAgICB9IGVsc2UgewotCQl1ICA9IHg7Ci0JCUdFVF9GTE9BVF9XT1JEKGh1LHUpOwotCSAgICAgICAgayAgPSAoaHU+PjIzKS0xMjc7Ci0JCWMgID0gMDsKLQkgICAgfQotCSAgICBodSAmPSAweDAwN2ZmZmZmOwotCSAgICAvKgotCSAgICAgKiBUaGUgYXBwcm94aW1hdGlvbiB0byBzcXJ0KDIpIHVzZWQgaW4gdGhyZXNob2xkcyBpcyBub3QKLQkgICAgICogY3JpdGljYWwuICBIb3dldmVyLCB0aGUgb25lcyB1c2VkIGFib3ZlIG11c3QgZ2l2ZSBsZXNzCi0JICAgICAqIHN0cmljdCBib3VuZHMgdGhhbiB0aGUgb25lIGhlcmUgc28gdGhhdCB0aGUgaz09MCBjYXNlIGlzCi0JICAgICAqIG5ldmVyIHJlYWNoZWQgZnJvbSBoZXJlLCBzaW5jZSBoZXJlIHdlIGhhdmUgY29tbWl0dGVkIHRvCi0JICAgICAqIHVzaW5nIHRoZSBjb3JyZWN0aW9uIHRlcm0gYnV0IGRvbid0IHVzZSBpdCBpZiBrPT0wLgotCSAgICAgKi8KLQkgICAgaWYoaHU8MHgzNTA0ZjQpIHsJCQkvKiB1IDwgc3FydCgyKSAqLwotCSAgICAgICAgU0VUX0ZMT0FUX1dPUkQodSxodXwweDNmODAwMDAwKTsvKiBub3JtYWxpemUgdSAqLwotCSAgICB9IGVsc2UgewotCSAgICAgICAgayArPSAxOwotCQlTRVRfRkxPQVRfV09SRCh1LGh1fDB4M2YwMDAwMDApOwkvKiBub3JtYWxpemUgdS8yICovCi0JICAgICAgICBodSA9ICgweDAwODAwMDAwLWh1KT4+MjsKLQkgICAgfQotCSAgICBmID0gdS0oZmxvYXQpMS4wOwotCX0KLQloZnNxPShmbG9hdCkwLjUqZipmOwotCWlmKGh1PT0wKSB7CS8qIHxmfCA8IDIqKi0yMCAqLwotCSAgICBpZihmPT16ZXJvKSBpZihrPT0wKSByZXR1cm4gemVybzsKLQkJCWVsc2Uge2MgKz0gaypsbjJfbG87IHJldHVybiBrKmxuMl9oaStjO30KLQkgICAgUiA9IGhmc3EqKChmbG9hdCkxLjAtKGZsb2F0KTAuNjY2NjY2NjY2NjY2NjY2NjYqZik7Ci0JICAgIGlmKGs9PTApIHJldHVybiBmLVI7IGVsc2UKLQkgICAgCSAgICAgcmV0dXJuIGsqbG4yX2hpLSgoUi0oaypsbjJfbG8rYykpLWYpOwotCX0KLSAJcyA9IGYvKChmbG9hdCkyLjArZik7Ci0JeiA9IHMqczsKLQlSID0geiooTHAxK3oqKExwMit6KihMcDMreiooTHA0K3oqKExwNSt6KihMcDYreipMcDcpKSkpKSk7Ci0JaWYoaz09MCkgcmV0dXJuIGYtKGhmc3EtcyooaGZzcStSKSk7IGVsc2UKLQkJIHJldHVybiBrKmxuMl9oaS0oKGhmc3EtKHMqKGhmc3ErUikrKGsqbG4yX2xvK2MpKSktZik7Ci19CmRpZmYgLS1naXQgYS9saWJtL3NyYy9zX2xvZ2IuYyBiL2xpYm0vc3JjL3NfbG9nYi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1N2Y5MWM0Li4wMDAwMDAwCi0tLSBhL2xpYm0vc3JjL3NfbG9nYi5jCisrKyAvZGV2L251bGwKQEAgLTEsNDQgKzAsMCBAQAotLyogQCgjKXNfbG9nYi5jIDUuMSA5My8wOS8yNCAqLwotLyoKLSAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIENvcHlyaWdodCAoQykgMTk5MyBieSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogRGV2ZWxvcGVkIGF0IFN1blBybywgYSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGJ1c2luZXNzLgotICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcwotICogc29mdHdhcmUgaXMgZnJlZWx5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhpcyBub3RpY2UKLSAqIGlzIHByZXNlcnZlZC4KLSAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqLwotCi0jaWZuZGVmIGxpbnQKLXN0YXRpYyBjaGFyIHJjc2lkW10gPSAiJEZyZWVCU0Q6IHNyYy9saWIvbXN1bi9zcmMvc19sb2diLmMsdiAxLjEwIDIwMDUvMTIvMDMgMTE6NTc6MTkgYmRlIEV4cCAkIjsKLSNlbmRpZgotCi0vKgotICogZG91YmxlIGxvZ2IoeCkKLSAqIElFRUUgNzU0IGxvZ2IuIEluY2x1ZGVkIHRvIHBhc3MgSUVFRSB0ZXN0IHN1aXRlLiBOb3QgcmVjb21tZW5kLgotICogVXNlIGlsb2diIGluc3RlYWQuCi0gKi8KLQotI2luY2x1ZGUgIm1hdGguaCIKLSNpbmNsdWRlICJtYXRoX3ByaXZhdGUuaCIKLQotc3RhdGljIGNvbnN0IGRvdWJsZQotdHdvNTQgPSAxLjgwMTQzOTg1MDk0ODE5ODQwMDAwZSsxNjsJLyogNDM1MDAwMDAgMDAwMDAwMDAgKi8KLQotZG91YmxlCi1sb2diKGRvdWJsZSB4KQotewotCWludDMyX3QgbHgsaXg7Ci0JRVhUUkFDVF9XT1JEUyhpeCxseCx4KTsKLQlpeCAmPSAweDdmZmZmZmZmOwkJCS8qIGhpZ2ggfHh8ICovCi0JaWYoKGl4fGx4KT09MCkgcmV0dXJuIC0xLjAvZmFicyh4KTsKLQlpZihpeD49MHg3ZmYwMDAwMCkgcmV0dXJuIHgqeDsKLQlpZihpeDwweDAwMTAwMDAwKSB7Ci0JCXggKj0gdHdvNTQ7CQkgLyogY29udmVydCBzdWJub3JtYWwgeCB0byBub3JtYWwgKi8KLQkJR0VUX0hJR0hfV09SRChpeCx4KTsKLQkJaXggJj0gMHg3ZmZmZmZmZjsKLQkJcmV0dXJuIChkb3VibGUpICgoaXg+PjIwKS0xMDIzLTU0KTsKLQl9IGVsc2UKLQkJcmV0dXJuIChkb3VibGUpICgoaXg+PjIwKS0xMDIzKTsKLX0KZGlmZiAtLWdpdCBhL2xpYm0vc3JjL3NfbG9nYmYuYyBiL2xpYm0vc3JjL3NfbG9nYmYuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzU0OTI4Yy4uMDAwMDAwMAotLS0gYS9saWJtL3NyYy9zX2xvZ2JmLmMKKysrIC9kZXYvbnVsbApAQCAtMSw0MSArMCwwIEBACi0vKiBzX2xvZ2JmLmMgLS0gZmxvYXQgdmVyc2lvbiBvZiBzX2xvZ2IuYy4KLSAqIENvbnZlcnNpb24gdG8gZmxvYXQgYnkgSWFuIExhbmNlIFRheWxvciwgQ3lnbnVzIFN1cHBvcnQsIGlhbkBjeWdudXMuY29tLgotICovCi0KLS8qCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBDb3B5cmlnaHQgKEMpIDE5OTMgYnkgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIERldmVsb3BlZCBhdCBTdW5Qcm8sIGEgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBidXNpbmVzcy4KLSAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKLSAqIHNvZnR3YXJlIGlzIGZyZWVseSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoaXMgbm90aWNlCi0gKiBpcyBwcmVzZXJ2ZWQuCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKi8KLQotI2lmbmRlZiBsaW50Ci1zdGF0aWMgY2hhciByY3NpZFtdID0gIiRGcmVlQlNEOiBzcmMvbGliL21zdW4vc3JjL3NfbG9nYmYuYyx2IDEuOCAyMDA1LzEyLzAzIDExOjU3OjE5IGJkZSBFeHAgJCI7Ci0jZW5kaWYKLQotI2luY2x1ZGUgIm1hdGguaCIKLSNpbmNsdWRlICJtYXRoX3ByaXZhdGUuaCIKLQotc3RhdGljIGNvbnN0IGZsb2F0Ci10d28yNSA9IDMuMzU1NDQzMjAwZSswNzsJCS8qIDB4NGMwMDAwMDAgKi8KLQotZmxvYXQKLWxvZ2JmKGZsb2F0IHgpCi17Ci0JaW50MzJfdCBpeDsKLQlHRVRfRkxPQVRfV09SRChpeCx4KTsKLQlpeCAmPSAweDdmZmZmZmZmOwkJCS8qIGhpZ2ggfHh8ICovCi0JaWYoaXg9PTApIHJldHVybiAoZmxvYXQpLTEuMC9mYWJzZih4KTsKLQlpZihpeD49MHg3ZjgwMDAwMCkgcmV0dXJuIHgqeDsKLQlpZihpeDwweDAwODAwMDAwKSB7Ci0JCXggKj0gdHdvMjU7CQkgLyogY29udmVydCBzdWJub3JtYWwgeCB0byBub3JtYWwgKi8KLQkJR0VUX0ZMT0FUX1dPUkQoaXgseCk7Ci0JCWl4ICY9IDB4N2ZmZmZmZmY7Ci0JCXJldHVybiAoZmxvYXQpICgoaXg+PjIzKS0xMjctMjUpOwotCX0gZWxzZQotCQlyZXR1cm4gKGZsb2F0KSAoKGl4Pj4yMyktMTI3KTsKLX0KZGlmZiAtLWdpdCBhL2xpYm0vc3JjL3NfbHJpbnQuYyBiL2xpYm0vc3JjL3NfbHJpbnQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzRhMDlkMy4uMDAwMDAwMAotLS0gYS9saWJtL3NyYy9zX2xyaW50LmMKKysrIC9kZXYvbnVsbApAQCAtMSw1OCArMCwwIEBACi0vKi0KLSAqIENvcHlyaWdodCAoYykgMjAwNSBEYXZpZCBTY2h1bHR6IDxkYXNARnJlZUJTRC5PUkc+Ci0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KLSNpbmNsdWRlIDxmZW52Lmg+Ci0jaW5jbHVkZSA8bWF0aC5oPgotCi0jaWZuZGVmIHR5cGUKLS8qIF9fRkJTRElEKCIkRnJlZUJTRDogc3JjL2xpYi9tc3VuL3NyYy9zX2xyaW50LmMsdiAxLjEgMjAwNS8wMS8xMSAyMzoxMjo1NSBkYXMgRXhwICQiKTsgKi8KLSNkZWZpbmUgdHlwZQkJZG91YmxlCi0jZGVmaW5lCXJvdW5kaXQJCXJpbnQKLSNkZWZpbmUgZHR5cGUJCWxvbmcKLSNkZWZpbmUJZm4JCWxyaW50Ci0jZW5kaWYKLQotLyoKLSAqIEM5OSBzYXlzIHdlIHNob3VsZCBub3QgcmFpc2UgYSBzcHVyaW91cyBpbmV4YWN0IGV4Y2VwdGlvbiB3aGVuIGFuCi0gKiBpbnZhbGlkIGV4Y2VwdGlvbiBpcyByYWlzZWQuICBVbmZvcnR1bmF0ZWx5LCB0aGUgc2V0IG9mIGlucHV0cwotICogdGhhdCBvdmVyZmxvd3MgZGVwZW5kcyBvbiB0aGUgcm91bmRpbmcgbW9kZSB3aGVuICdkdHlwZScgaGFzIG1vcmUKLSAqIHNpZ25pZmljYW50IGJpdHMgdGhhbiAndHlwZScuICBIZW5jZSwgd2UgYmVuZCBvdmVyIGJhY2t3YXJkcyBmb3IgdGhlCi0gKiBzYWtlIG9mIGNvcnJlY3RuZXNzOyBhbiBNRCBpbXBsZW1lbnRhdGlvbiBjb3VsZCBiZSBtb3JlIGVmZmljaWVudC4KLSAqLwotZHR5cGUKLWZuKHR5cGUgeCkKLXsKLQlmZW52X3QgZW52OwotCWR0eXBlIGQ7Ci0KLQlmZWhvbGRleGNlcHQoJmVudik7Ci0JZCA9IChkdHlwZSlyb3VuZGl0KHgpOwotCWlmIChmZXRlc3RleGNlcHQoRkVfSU5WQUxJRCkpCi0JCWZlY2xlYXJleGNlcHQoRkVfSU5FWEFDVCk7Ci0JZmV1cGRhdGVlbnYoJmVudik7Ci0JcmV0dXJuIChkKTsKLX0KZGlmZiAtLWdpdCBhL2xpYm0vc3JjL3NfbHJpbnRmLmMgYi9saWJtL3NyYy9zX2xyaW50Zi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMjU4ZTAzLi4wMDAwMDAwCi0tLSBhL2xpYm0vc3JjL3NfbHJpbnRmLmMKKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLSNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KLS8qIF9fRkJTRElEKCIkRnJlZUJTRDogc3JjL2xpYi9tc3VuL3NyYy9zX2xyaW50Zi5jLHYgMS4xIDIwMDUvMDEvMTEgMjM6MTI6NTUgZGFzIEV4cCAkIik7ICovCi0KLSNkZWZpbmUgdHlwZQkJZmxvYXQKLSNkZWZpbmUJcm91bmRpdAkJcmludGYKLSNkZWZpbmUgZHR5cGUJCWxvbmcKLSNkZWZpbmUJZm4JCWxyaW50ZgotCi0jaW5jbHVkZSAic19scmludC5jIgpkaWZmIC0tZ2l0IGEvbGlibS9zcmMvc19scm91bmQuYyBiL2xpYm0vc3JjL3NfbHJvdW5kLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU5OWY0NmYuLjAwMDAwMDAKLS0tIGEvbGlibS9zcmMvc19scm91bmQuYworKysgL2Rldi9udWxsCkBAIC0xLDY2ICswLDAgQEAKLS8qLQotICogQ29weXJpZ2h0IChjKSAyMDA1IERhdmlkIFNjaHVsdHogPGRhc0BGcmVlQlNELk9SRz4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgotI2luY2x1ZGUgPGxpbWl0cy5oPgotI2luY2x1ZGUgPGZlbnYuaD4KLSNpbmNsdWRlIDxtYXRoLmg+Ci0KLSNpZm5kZWYgdHlwZQotLyogX19GQlNESUQoIiRGcmVlQlNEOiBzcmMvbGliL21zdW4vc3JjL3NfbHJvdW5kLmMsdiAxLjIgMjAwNS8wNC8wOCAwMDo1MjoxNiBkYXMgRXhwICQiKTsgKi8KLSNkZWZpbmUgdHlwZQkJZG91YmxlCi0jZGVmaW5lCXJvdW5kaXQJCXJvdW5kCi0jZGVmaW5lIGR0eXBlCQlsb25nCi0jZGVmaW5lCURUWVBFX01JTglMT05HX01JTgotI2RlZmluZQlEVFlQRV9NQVgJTE9OR19NQVgKLSNkZWZpbmUJZm4JCWxyb3VuZAotI2VuZGlmCi0KLS8qCi0gKiBJZiB0eXBlIGhhcyBtb3JlIHByZWNpc2lvbiB0aGFuIGR0eXBlLCB0aGUgZW5kcG9pbnRzIGR0eXBlXyhtaW58bWF4KSBhcmUKLSAqIG9mIHRoZSBmb3JtIHh4eC41OyB0aGV5IGFyZSAib3V0IG9mIHJhbmdlIiBiZWNhdXNlIGxyb3VuZCgpIHJvdW5kcyBhd2F5Ci0gKiBmcm9tIDAuICBPbiB0aGUgb3RoZXIgaGFuZCwgaWYgdHlwZSBoYXMgbGVzcyBwcmVjaXNpb24gdGhhbiBkdHlwZSwgdGhlbgotICogYWxsIHZhbHVlcyB0aGF0IGFyZSBvdXQgb2YgcmFuZ2UgYXJlIGludGVncmFsLCBzbyB3ZSBtaWdodCBhcyB3ZWxsIGFzc3VtZQotICogdGhhdCBldmVyeXRoaW5nIGlzIGluIHJhbmdlLiAgQXQgY29tcGlsZSB0aW1lLCBJTlJBTkdFKHgpIHNob3VsZCByZWR1Y2UgdG8KLSAqIHR3byBmbG9hdGluZy1wb2ludCBjb21wYXJpc29ucyBpbiB0aGUgZm9ybWVyIGNhc2UsIG9yIFRSVUUgb3RoZXJ3aXNlLgotICovCi1zdGF0aWMgY29uc3QgdHlwZSBkdHlwZV9taW4gPSBEVFlQRV9NSU4gLSAwLjU7Ci1zdGF0aWMgY29uc3QgdHlwZSBkdHlwZV9tYXggPSBEVFlQRV9NQVggKyAwLjU7Ci0jZGVmaW5lCUlOUkFOR0UoeCkJKGR0eXBlX21heCAtIERUWVBFX01BWCAhPSAwLjUgfHwgXAotCQkJICgoeCkgPiBkdHlwZV9taW4gJiYgKHgpIDwgZHR5cGVfbWF4KSkKLQotZHR5cGUKLWZuKHR5cGUgeCkKLXsKLQotCWlmIChJTlJBTkdFKHgpKSB7Ci0JCXggPSByb3VuZGl0KHgpOwotCQlyZXR1cm4gKChkdHlwZSl4KTsKLQl9IGVsc2UgewotCQlmZXJhaXNlZXhjZXB0KEZFX0lOVkFMSUQpOwotCQlyZXR1cm4gKERUWVBFX01BWCk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvbGlibS9zcmMvc19scm91bmRmLmMgYi9saWJtL3NyYy9zX2xyb3VuZGYuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTA2OWM5Yy4uMDAwMDAwMAotLS0gYS9saWJtL3NyYy9zX2xyb3VuZGYuYworKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLSNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KLS8qIF9fRkJTRElEKCIkRnJlZUJTRDogc3JjL2xpYi9tc3VuL3NyYy9zX2xyb3VuZGYuYyx2IDEuMiAyMDA1LzA0LzA4IDAwOjUyOjI3IGRhcyBFeHAgJCIpOyAqLwotCi0jZGVmaW5lIHR5cGUJCWZsb2F0Ci0jZGVmaW5lCXJvdW5kaXQJCXJvdW5kZgotI2RlZmluZSBkdHlwZQkJbG9uZwotI2RlZmluZQlEVFlQRV9NSU4JTE9OR19NSU4KLSNkZWZpbmUJRFRZUEVfTUFYCUxPTkdfTUFYCi0jZGVmaW5lCWZuCQlscm91bmRmCi0KLSNpbmNsdWRlICJzX2xyb3VuZC5jIgpkaWZmIC0tZ2l0IGEvbGlibS9zcmMvc19scm91bmRsLmMgYi9saWJtL3NyYy9zX2xyb3VuZGwuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2MzZjg1NC4uMDAwMDAwMAotLS0gYS9saWJtL3NyYy9zX2xyb3VuZGwuYworKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLSNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KLS8qIF9fRkJTRElEKCIkRnJlZUJTRDogc3JjL2xpYi9tc3VuL3NyYy9zX2xyb3VuZGwuYyx2IDEuMSAyMDA1LzA0LzA4IDAxOjI0OjA4IGRhcyBFeHAgJCIpOyAqLwotCi0jZGVmaW5lIHR5cGUJCWxvbmcgZG91YmxlCi0jZGVmaW5lCXJvdW5kaXQJCXJvdW5kbAotI2RlZmluZSBkdHlwZQkJbG9uZwotI2RlZmluZQlEVFlQRV9NSU4JTE9OR19NSU4KLSNkZWZpbmUJRFRZUEVfTUFYCUxPTkdfTUFYCi0jZGVmaW5lCWZuCQlscm91bmRsCi0KLSNpbmNsdWRlICJzX2xyb3VuZC5jIgpkaWZmIC0tZ2l0IGEvbGlibS9zcmMvc19tb2RmLmMgYi9saWJtL3NyYy9zX21vZGYuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjgzZmJkYS4uMDAwMDAwMAotLS0gYS9saWJtL3NyYy9zX21vZGYuYworKysgL2Rldi9udWxsCkBAIC0xLDc1ICswLDAgQEAKLS8qIEAoIylzX21vZGYuYyA1LjEgOTMvMDkvMjQgKi8KLS8qCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBDb3B5cmlnaHQgKEMpIDE5OTMgYnkgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIERldmVsb3BlZCBhdCBTdW5Qcm8sIGEgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBidXNpbmVzcy4KLSAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKLSAqIHNvZnR3YXJlIGlzIGZyZWVseSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoaXMgbm90aWNlCi0gKiBpcyBwcmVzZXJ2ZWQuCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKi8KLQotI2lmbmRlZiBsaW50Ci1zdGF0aWMgY2hhciByY3NpZFtdID0gIiRGcmVlQlNEOiBzcmMvbGliL21zdW4vc3JjL3NfbW9kZi5jLHYgMS43IDIwMDIvMDUvMjggMTg6MTU6MDQgYWxmcmVkIEV4cCAkIjsKLSNlbmRpZgotCi0vKgotICogbW9kZihkb3VibGUgeCwgZG91YmxlICppcHRyKQotICogcmV0dXJuIGZyYWN0aW9uIHBhcnQgb2YgeCwgYW5kIHJldHVybiB4J3MgaW50ZWdyYWwgcGFydCBpbiAqaXB0ci4KLSAqIE1ldGhvZDoKLSAqCUJpdCB0d2lkZGxpbmcuCi0gKgotICogRXhjZXB0aW9uOgotICoJTm8gZXhjZXB0aW9uLgotICovCi0KLSNpbmNsdWRlICJtYXRoLmgiCi0jaW5jbHVkZSAibWF0aF9wcml2YXRlLmgiCi0KLXN0YXRpYyBjb25zdCBkb3VibGUgb25lID0gMS4wOwotCi1kb3VibGUKLW1vZGYoZG91YmxlIHgsIGRvdWJsZSAqaXB0cikKLXsKLQlpbnQzMl90IGkwLGkxLGowOwotCXVfaW50MzJfdCBpOwotCUVYVFJBQ1RfV09SRFMoaTAsaTEseCk7Ci0JajAgPSAoKGkwPj4yMCkmMHg3ZmYpLTB4M2ZmOwkvKiBleHBvbmVudCBvZiB4ICovCi0JaWYoajA8MjApIHsJCQkvKiBpbnRlZ2VyIHBhcnQgaW4gaGlnaCB4ICovCi0JICAgIGlmKGowPDApIHsJCQkvKiB8eHw8MSAqLwotCSAgICAgICAgSU5TRVJUX1dPUkRTKCppcHRyLGkwJjB4ODAwMDAwMDAsMCk7CS8qICppcHRyID0gKy0wICovCi0JCXJldHVybiB4OwotCSAgICB9IGVsc2UgewotCQlpID0gKDB4MDAwZmZmZmYpPj5qMDsKLQkJaWYoKChpMCZpKXxpMSk9PTApIHsJCS8qIHggaXMgaW50ZWdyYWwgKi8KLQkJICAgIHVfaW50MzJfdCBoaWdoOwotCQkgICAgKmlwdHIgPSB4OwotCQkgICAgR0VUX0hJR0hfV09SRChoaWdoLHgpOwotCQkgICAgSU5TRVJUX1dPUkRTKHgsaGlnaCYweDgwMDAwMDAwLDApOwkvKiByZXR1cm4gKy0wICovCi0JCSAgICByZXR1cm4geDsKLQkJfSBlbHNlIHsKLQkJICAgIElOU0VSVF9XT1JEUygqaXB0cixpMCYofmkpLDApOwotCQkgICAgcmV0dXJuIHggLSAqaXB0cjsKLQkJfQotCSAgICB9Ci0JfSBlbHNlIGlmIChqMD41MSkgewkJLyogbm8gZnJhY3Rpb24gcGFydCAqLwotCSAgICB1X2ludDMyX3QgaGlnaDsKLQkgICAgKmlwdHIgPSB4Km9uZTsKLQkgICAgR0VUX0hJR0hfV09SRChoaWdoLHgpOwotCSAgICBJTlNFUlRfV09SRFMoeCxoaWdoJjB4ODAwMDAwMDAsMCk7CS8qIHJldHVybiArLTAgKi8KLQkgICAgcmV0dXJuIHg7Ci0JfSBlbHNlIHsJCQkvKiBmcmFjdGlvbiBwYXJ0IGluIGxvdyB4ICovCi0JICAgIGkgPSAoKHVfaW50MzJfdCkoMHhmZmZmZmZmZikpPj4oajAtMjApOwotCSAgICBpZigoaTEmaSk9PTApIHsgCQkvKiB4IGlzIGludGVncmFsICovCi0JICAgICAgICB1X2ludDMyX3QgaGlnaDsKLQkJKmlwdHIgPSB4OwotCQlHRVRfSElHSF9XT1JEKGhpZ2gseCk7Ci0JCUlOU0VSVF9XT1JEUyh4LGhpZ2gmMHg4MDAwMDAwMCwwKTsJLyogcmV0dXJuICstMCAqLwotCQlyZXR1cm4geDsKLQkgICAgfSBlbHNlIHsKLQkgICAgICAgIElOU0VSVF9XT1JEUygqaXB0cixpMCxpMSYofmkpKTsKLQkJcmV0dXJuIHggLSAqaXB0cjsKLQkgICAgfQotCX0KLX0KZGlmZiAtLWdpdCBhL2xpYm0vc3JjL3NfbW9kZmYuYyBiL2xpYm0vc3JjL3NfbW9kZmYuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmM3NWZmZC4uMDAwMDAwMAotLS0gYS9saWJtL3NyYy9zX21vZGZmLmMKKysrIC9kZXYvbnVsbApAQCAtMSw1NiArMCwwIEBACi0vKiBzX21vZGZmLmMgLS0gZmxvYXQgdmVyc2lvbiBvZiBzX21vZGYuYy4KLSAqIENvbnZlcnNpb24gdG8gZmxvYXQgYnkgSWFuIExhbmNlIFRheWxvciwgQ3lnbnVzIFN1cHBvcnQsIGlhbkBjeWdudXMuY29tLgotICovCi0KLS8qCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBDb3B5cmlnaHQgKEMpIDE5OTMgYnkgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIERldmVsb3BlZCBhdCBTdW5Qcm8sIGEgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBidXNpbmVzcy4KLSAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKLSAqIHNvZnR3YXJlIGlzIGZyZWVseSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoaXMgbm90aWNlCi0gKiBpcyBwcmVzZXJ2ZWQuCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKi8KLQotI2lmbmRlZiBsaW50Ci1zdGF0aWMgY2hhciByY3NpZFtdID0gIiRGcmVlQlNEOiBzcmMvbGliL21zdW4vc3JjL3NfbW9kZmYuYyx2IDEuNyAyMDAyLzA1LzI4IDE4OjE1OjA0IGFsZnJlZCBFeHAgJCI7Ci0jZW5kaWYKLQotI2luY2x1ZGUgIm1hdGguaCIKLSNpbmNsdWRlICJtYXRoX3ByaXZhdGUuaCIKLQotc3RhdGljIGNvbnN0IGZsb2F0IG9uZSA9IDEuMDsKLQotZmxvYXQKLW1vZGZmKGZsb2F0IHgsIGZsb2F0ICppcHRyKQotewotCWludDMyX3QgaTAsajA7Ci0JdV9pbnQzMl90IGk7Ci0JR0VUX0ZMT0FUX1dPUkQoaTAseCk7Ci0JajAgPSAoKGkwPj4yMykmMHhmZiktMHg3ZjsJLyogZXhwb25lbnQgb2YgeCAqLwotCWlmKGowPDIzKSB7CQkJLyogaW50ZWdlciBwYXJ0IGluIHggKi8KLQkgICAgaWYoajA8MCkgewkJCS8qIHx4fDwxICovCi0JICAgICAgICBTRVRfRkxPQVRfV09SRCgqaXB0cixpMCYweDgwMDAwMDAwKTsJLyogKmlwdHIgPSArLTAgKi8KLQkJcmV0dXJuIHg7Ci0JICAgIH0gZWxzZSB7Ci0JCWkgPSAoMHgwMDdmZmZmZik+PmowOwotCQlpZigoaTAmaSk9PTApIHsJCQkvKiB4IGlzIGludGVncmFsICovCi0JCSAgICB1X2ludDMyX3QgaXg7Ci0JCSAgICAqaXB0ciA9IHg7Ci0JCSAgICBHRVRfRkxPQVRfV09SRChpeCx4KTsKLQkJICAgIFNFVF9GTE9BVF9XT1JEKHgsaXgmMHg4MDAwMDAwMCk7CS8qIHJldHVybiArLTAgKi8KLQkJICAgIHJldHVybiB4OwotCQl9IGVsc2UgewotCQkgICAgU0VUX0ZMT0FUX1dPUkQoKmlwdHIsaTAmKH5pKSk7Ci0JCSAgICByZXR1cm4geCAtICppcHRyOwotCQl9Ci0JICAgIH0KLQl9IGVsc2UgewkJCS8qIG5vIGZyYWN0aW9uIHBhcnQgKi8KLQkgICAgdV9pbnQzMl90IGl4OwotCSAgICAqaXB0ciA9IHgqb25lOwotCSAgICBHRVRfRkxPQVRfV09SRChpeCx4KTsKLQkgICAgU0VUX0ZMT0FUX1dPUkQoeCxpeCYweDgwMDAwMDAwKTsJLyogcmV0dXJuICstMCAqLwotCSAgICByZXR1cm4geDsKLQl9Ci19CmRpZmYgLS1naXQgYS9saWJtL3NyYy9zX25hbi5jIGIvbGlibS9zcmMvc19uYW4uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTM2NmU2Yi4uMDAwMDAwMAotLS0gYS9saWJtL3NyYy9zX25hbi5jCisrKyAvZGV2L251bGwKQEAgLTEsMTMxICswLDAgQEAKLS8qLQotICogQ29weXJpZ2h0IChjKSAyMDA3IERhdmlkIFNjaHVsdHoKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICoKLSAqICRGcmVlQlNEJAotICovCi0KLSNpbmNsdWRlIDxzeXMvZW5kaWFuLmg+Ci0jaW5jbHVkZSA8Y3R5cGUuaD4KLSNpbmNsdWRlIDxmbG9hdC5oPgotI2luY2x1ZGUgPG1hdGguaD4KLSNpbmNsdWRlIDxzdGRpbnQuaD4KLSNpbmNsdWRlIDxzdHJpbmdzLmg+Ci0KLSNpbmNsdWRlICJtYXRoX3ByaXZhdGUuaCIKLQotLyogZGlnaXR0b2ludCBpcyBpbiB0aGUgRnJlZUJTRCBDIGxpYnJhcnksIGJ1dCBub3QgQmlvbmljIGF0IHRoaXMgcG9pbnQgKi8KLXN0YXRpYyBpbnQKLWRpZ2l0dG9pbnQoY2hhciBjaCkKLXsKLSAgICBpbnQgZDsKLQotICAgIGQgPSBjaCAtICcwJzsKLSAgICBpZiAoKHVuc2lnbmVkKWQgPCAxMCkgewotICAgICAgICByZXR1cm4gZDsKLSAgICB9Ci0gICAgZCA9IGNoIC0gJ2EnOwotICAgIGlmICgodW5zaWduZWQpZCA8IDYpIHsKLSAgICAgICAgcmV0dXJuIGQgKyAxMDsKLSAgICB9Ci0gICAgZCA9IGNoIC0gJ0EnOwotICAgIGlmICgodW5zaWduZWQpZCA8IDYpIHsKLSAgICAgICAgcmV0dXJuIGQgKyAxMDsKLSAgICB9Ci0gICAgcmV0dXJuIC0xOwotfQotCi0vKgotICogU2NhbiBhIHN0cmluZyBvZiBoZXhhZGVjaW1hbCBkaWdpdHMgKHRoZSBmb3JtYXQgbmFuKDMpIGV4cGVjdHMpIGFuZAotICogbWFrZSBhIGJpdCBhcnJheSAodXNpbmcgdGhlIGxvY2FsIGVuZGlhbm5lc3MpLiBXZSBzdG9wIHdoZW4gd2UKLSAqIGVuY291bnRlciBhbiBpbnZhbGlkIGNoYXJhY3RlciwgTlVMLCBldGMuICBJZiB3ZSBvdmVyZmxvdywgd2UgZG8KLSAqIHRoZSBzYW1lIGFzIGdjYydzIF9fYnVpbHRpbl9uYW4oKSwgbmFtZWx5LCBkaXNjYXJkIHRoZSBoaWdoIG9yZGVyIGJpdHMuCi0gKgotICogVGhlIGZvcm1hdCB0aGlzIHJvdXRpbmUgYWNjZXB0cyBuZWVkcyB0byBiZSBjb21wYXRpYmxlIHdpdGggd2hhdCBpcyB1c2VkCi0gKiBpbiBjb250cmliL2dkdG9hL2hleG5hbi5jIChmb3Igc3RydG9kL3NjYW5mKSBhbmQgd2hhdCBpcyB1c2VkIGluCi0gKiBfX2J1aWx0aW5fbmFuKCkuIEluIGZhY3QsIHdlJ3JlIG9ubHkgMTAwJSBjb21wYXRpYmxlIGZvciBzdHJpbmdzIHdlCi0gKiBjb25zaWRlciB2YWxpZCwgc28gd2UgbWlnaHQgYmUgdmlvbGF0aW5nIHRoZSBDIHN0YW5kYXJkLiBCdXQgaXQncwotICogaW1wb3NzaWJsZSB0byB1c2UgbmFuKDMpIHBvcnRhYmx5IGFueXdheSwgc28gdGhpcyBzZWVtcyBnb29kIGVub3VnaC4KLSAqLwotdm9pZAotX3NjYW5fbmFuKHVpbnQzMl90ICp3b3JkcywgaW50IG51bV93b3JkcywgY29uc3QgY2hhciAqcykKLXsKLQlpbnQgc2k7CQkvKiBpbmRleCBpbnRvIHMgKi8KLQlpbnQgYml0cG9zOwkvKiBpbmRleCBpbnRvIHdvcmRzIChpbiBiaXRzKSAqLwotCi0JYnplcm8od29yZHMsIG51bV93b3JkcyAqIHNpemVvZih1aW50MzJfdCkpOwotCi0JLyogQWxsb3cgYSBsZWFkaW5nICcweCcuIChJdCdzIGV4cGVjdGVkLCBidXQgcmVkdW5kYW50LikgKi8KLQlpZiAoc1swXSA9PSAnMCcgJiYgKHNbMV0gPT0gJ3gnIHx8IHNbMV0gPT0gJ1gnKSkKLQkJcyArPSAyOwotCi0JLyogU2NhbiBmb3J3YXJkcyBpbiB0aGUgc3RyaW5nLCBsb29raW5nIGZvciB0aGUgZW5kIG9mIHRoZSBzZXF1ZW5jZS4gKi8KLQlmb3IgKHNpID0gMDsgaXN4ZGlnaXQoc1tzaV0pOyBzaSsrKQotCQk7Ci0KLQkvKiBTY2FuIGJhY2t3YXJkcywgZmlsbGluZyBpbiB0aGUgYml0cyBpbiB3b3Jkc1tdIGFzIHdlIGdvLiAqLwotI2lmIF9CWVRFX09SREVSID09IF9MSVRUTEVfRU5ESUFOCi0JZm9yIChiaXRwb3MgPSAwOyBiaXRwb3MgPCAzMiAqIG51bV93b3JkczsgYml0cG9zICs9IDQpIHsKLSNlbHNlCi0JZm9yIChiaXRwb3MgPSAzMiAqIG51bV93b3JkcyAtIDQ7IGJpdHBvcyA+PSAwOyBiaXRwb3MgLT0gNCkgewotI2VuZGlmCi0JCWlmICgtLXNpIDwgMCkKLQkJCWJyZWFrOwotCQl3b3Jkc1tiaXRwb3MgLyAzMl0gfD0gZGlnaXR0b2ludChzW3NpXSkgPDwgKGJpdHBvcyAlIDMyKTsKLQl9Ci19Ci0KLWRvdWJsZQotbmFuKGNvbnN0IGNoYXIgKnMpCi17Ci0JdW5pb24gewotCQlkb3VibGUgZDsKLQkJdWludDMyX3QgYml0c1syXTsKLQl9IHU7Ci0KLQlfc2Nhbl9uYW4odS5iaXRzLCAyLCBzKTsKLSNpZiBfQllURV9PUkRFUiA9PSBfTElUVExFX0VORElBTgotCXUuYml0c1sxXSB8PSAweDdmZjgwMDAwOwotI2Vsc2UKLQl1LmJpdHNbMF0gfD0gMHg3ZmY4MDAwMDsKLSNlbmRpZgotCXJldHVybiAodS5kKTsKLX0KLQotZmxvYXQKLW5hbmYoY29uc3QgY2hhciAqcykKLXsKLQl1bmlvbiB7Ci0JCWZsb2F0IGY7Ci0JCXVpbnQzMl90IGJpdHNbMV07Ci0JfSB1OwotCi0JX3NjYW5fbmFuKHUuYml0cywgMSwgcyk7Ci0JdS5iaXRzWzBdIHw9IDB4N2ZjMDAwMDA7Ci0JcmV0dXJuICh1LmYpOwotfQotCi0jaWYgKExEQkxfTUFOVF9ESUcgPT0gNTMpCi1fX3dlYWtfYWxpYXMobmFubCwgbmFuKTsKLSNlbmRpZgpkaWZmIC0tZ2l0IGEvbGlibS9zcmMvc19uZWFyYnlpbnQuYyBiL2xpYm0vc3JjL3NfbmVhcmJ5aW50LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI0NmQzMjUuLjAwMDAwMDAKLS0tIGEvbGlibS9zcmMvc19uZWFyYnlpbnQuYworKysgL2Rldi9udWxsCkBAIC0xLDU0ICswLDAgQEAKLS8qLQotICogQ29weXJpZ2h0IChjKSAyMDA0IERhdmlkIFNjaHVsdHogPGRhc0BGcmVlQlNELk9SRz4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgotLyogX19GQlNESUQoIiRGcmVlQlNEOiBzcmMvbGliL21zdW4vc3JjL3NfbmVhcmJ5aW50LmMsdiAxLjEgMjAwNC8wNy8wNiAwNDo0NjowOCBkYXMgRXhwICQiKTsgKi8KLQotI2luY2x1ZGUgPGZlbnYuaD4KLSNpbmNsdWRlIDxtYXRoLmg+Ci0KLS8qCi0gKiBXZSBzYXZlIGFuZCByZXN0b3JlIHRoZSBmbG9hdGluZy1wb2ludCBlbnZpcm9ubWVudCB0byBhdm9pZCByYWlzaW5nCi0gKiBhbiBpbmV4YWN0IGV4Y2VwdGlvbi4gIFdlIGNhbiBnZXQgYXdheSB3aXRoIHVzaW5nIGZlc2V0ZW52KCkKLSAqIGluc3RlYWQgb2YgZmVjbGVhcmV4Y2VwdCgpL2ZldXBkYXRlZW52KCkgdG8gcmVzdG9yZSB0aGUgZW52aXJvbm1lbnQKLSAqIGJlY2F1c2UgdGhlIG9ubHkgZXhjZXB0aW9uIGRlZmluZWQgZm9yIHJpbnQoKSBpcyBvdmVyZmxvdywgYW5kCi0gKiByb3VuZGluZyBjYW4ndCBvdmVyZmxvdyBhcyBsb25nIGFzIGVtYXggPj0gcC4KLSAqLwotI2RlZmluZQlERUNMKHR5cGUsIGZuLCByaW50KQlcCi10eXBlCQkJCVwKLWZuKHR5cGUgeCkJCQlcCi17CQkJCVwKLQl0eXBlIHJldDsJCVwKLQlmZW52X3QgZW52OwkJXAotCQkJCVwKLQlmZWdldGVudigmZW52KTsJCVwKLQlyZXQgPSByaW50KHgpOwkJXAotCWZlc2V0ZW52KCZlbnYpOwkJXAotCXJldHVybiAocmV0KTsJCVwKLX0KLQotREVDTChkb3VibGUsIG5lYXJieWludCwgcmludCkKLURFQ0woZmxvYXQsIG5lYXJieWludGYsIHJpbnRmKQpkaWZmIC0tZ2l0IGEvbGlibS9zcmMvc19uZXh0YWZ0ZXIuYyBiL2xpYm0vc3JjL3NfbmV4dGFmdGVyLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNlZDAzNjEuLjAwMDAwMDAKLS0tIGEvbGlibS9zcmMvc19uZXh0YWZ0ZXIuYworKysgL2Rldi9udWxsCkBAIC0xLDg1ICswLDAgQEAKLS8qIEAoIylzX25leHRhZnRlci5jIDUuMSA5My8wOS8yNCAqLwotLyoKLSAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIENvcHlyaWdodCAoQykgMTk5MyBieSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogRGV2ZWxvcGVkIGF0IFN1blBybywgYSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGJ1c2luZXNzLgotICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcwotICogc29mdHdhcmUgaXMgZnJlZWx5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhpcyBub3RpY2UKLSAqIGlzIHByZXNlcnZlZC4KLSAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqLwotCi0jaWZuZGVmIGxpbnQKLXN0YXRpYyBjaGFyIHJjc2lkW10gPSAiJEZyZWVCU0Q6IHNyYy9saWIvbXN1bi9zcmMvc19uZXh0YWZ0ZXIuYyx2IDEuMTEgMjAwNS8wMy8wNyAyMToyNzozNyBkYXMgRXhwICQiOwotI2VuZGlmCi0KLS8qIElFRUUgZnVuY3Rpb25zCi0gKgluZXh0YWZ0ZXIoeCx5KQotICoJcmV0dXJuIHRoZSBuZXh0IG1hY2hpbmUgZmxvYXRpbmctcG9pbnQgbnVtYmVyIG9mIHggaW4gdGhlCi0gKglkaXJlY3Rpb24gdG93YXJkIHkuCi0gKiAgIFNwZWNpYWwgY2FzZXM6Ci0gKi8KLQotI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgotI2luY2x1ZGUgPGZsb2F0Lmg+Ci0KLSNpbmNsdWRlICJtYXRoLmgiCi0jaW5jbHVkZSAibWF0aF9wcml2YXRlLmgiCi0KLWRvdWJsZQotbmV4dGFmdGVyKGRvdWJsZSB4LCBkb3VibGUgeSkKLXsKLQl2b2xhdGlsZSBkb3VibGUgdDsKLQlpbnQzMl90IGh4LGh5LGl4LGl5OwotCXVfaW50MzJfdCBseCxseTsKLQotCUVYVFJBQ1RfV09SRFMoaHgsbHgseCk7Ci0JRVhUUkFDVF9XT1JEUyhoeSxseSx5KTsKLQlpeCA9IGh4JjB4N2ZmZmZmZmY7CQkvKiB8eHwgKi8KLQlpeSA9IGh5JjB4N2ZmZmZmZmY7CQkvKiB8eXwgKi8KLQotCWlmKCgoaXg+PTB4N2ZmMDAwMDApJiYoKGl4LTB4N2ZmMDAwMDApfGx4KSE9MCkgfHwgICAvKiB4IGlzIG5hbiAqLwotCSAgICgoaXk+PTB4N2ZmMDAwMDApJiYoKGl5LTB4N2ZmMDAwMDApfGx5KSE9MCkpICAgICAvKiB5IGlzIG5hbiAqLwotCSAgIHJldHVybiB4K3k7Ci0JaWYoeD09eSkgcmV0dXJuIHk7CQkvKiB4PXksIHJldHVybiB5ICovCi0JaWYoKGl4fGx4KT09MCkgewkJCS8qIHggPT0gMCAqLwotCSAgICBJTlNFUlRfV09SRFMoeCxoeSYweDgwMDAwMDAwLDEpOwkvKiByZXR1cm4gKy1taW5zdWJub3JtYWwgKi8KLQkgICAgdCA9IHgqeDsKLQkgICAgaWYodD09eCkgcmV0dXJuIHQ7IGVsc2UgcmV0dXJuIHg7CS8qIHJhaXNlIHVuZGVyZmxvdyBmbGFnICovCi0JfQotCWlmKGh4Pj0wKSB7CQkJCS8qIHggPiAwICovCi0JICAgIGlmKGh4Pmh5fHwoKGh4PT1oeSkmJihseD5seSkpKSB7CS8qIHggPiB5LCB4IC09IHVscCAqLwotCQlpZihseD09MCkgaHggLT0gMTsKLQkJbHggLT0gMTsKLQkgICAgfSBlbHNlIHsJCQkJLyogeCA8IHksIHggKz0gdWxwICovCi0JCWx4ICs9IDE7Ci0JCWlmKGx4PT0wKSBoeCArPSAxOwotCSAgICB9Ci0JfSBlbHNlIHsJCQkJLyogeCA8IDAgKi8KLQkgICAgaWYoaHk+PTB8fGh4Pmh5fHwoKGh4PT1oeSkmJihseD5seSkpKXsvKiB4IDwgeSwgeCAtPSB1bHAgKi8KLQkJaWYobHg9PTApIGh4IC09IDE7Ci0JCWx4IC09IDE7Ci0JICAgIH0gZWxzZSB7CQkJCS8qIHggPiB5LCB4ICs9IHVscCAqLwotCQlseCArPSAxOwotCQlpZihseD09MCkgaHggKz0gMTsKLQkgICAgfQotCX0KLQloeSA9IGh4JjB4N2ZmMDAwMDA7Ci0JaWYoaHk+PTB4N2ZmMDAwMDApIHJldHVybiB4K3g7CS8qIG92ZXJmbG93ICAqLwotCWlmKGh5PDB4MDAxMDAwMDApIHsJCS8qIHVuZGVyZmxvdyAqLwotCSAgICB0ID0geCp4OwotCSAgICBpZih0IT14KSB7CQkvKiByYWlzZSB1bmRlcmZsb3cgZmxhZyAqLwotCSAgICAgICAgSU5TRVJUX1dPUkRTKHksaHgsbHgpOwotCQlyZXR1cm4geTsKLQkgICAgfQotCX0KLQlJTlNFUlRfV09SRFMoeCxoeCxseCk7Ci0JcmV0dXJuIHg7Ci19Ci0KLSNpZiAoTERCTF9NQU5UX0RJRyA9PSA1MykKLV9fd2Vha19yZWZlcmVuY2UobmV4dGFmdGVyLCBuZXh0dG93YXJkKTsKLV9fd2Vha19yZWZlcmVuY2UobmV4dGFmdGVyLCBuZXh0dG93YXJkbCk7Ci1fX3dlYWtfcmVmZXJlbmNlKG5leHRhZnRlciwgbmV4dGFmdGVybCk7Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL2xpYm0vc3JjL3NfbmV4dGFmdGVyZi5jIGIvbGlibS9zcmMvc19uZXh0YWZ0ZXJmLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGViZWFjNGEuLjAwMDAwMDAKLS0tIGEvbGlibS9zcmMvc19uZXh0YWZ0ZXJmLmMKKysrIC9kZXYvbnVsbApAQCAtMSw2NyArMCwwIEBACi0vKiBzX25leHRhZnRlcmYuYyAtLSBmbG9hdCB2ZXJzaW9uIG9mIHNfbmV4dGFmdGVyLmMuCi0gKiBDb252ZXJzaW9uIHRvIGZsb2F0IGJ5IElhbiBMYW5jZSBUYXlsb3IsIEN5Z251cyBTdXBwb3J0LCBpYW5AY3lnbnVzLmNvbS4KLSAqLwotCi0vKgotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogQ29weXJpZ2h0IChDKSAxOTkzIGJ5IFN1biBNaWNyb3N5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBEZXZlbG9wZWQgYXQgU3VuUHJvLCBhIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gYnVzaW5lc3MuCi0gKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCi0gKiBzb2Z0d2FyZSBpcyBmcmVlbHkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGlzIG5vdGljZQotICogaXMgcHJlc2VydmVkLgotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICovCi0KLSNpZm5kZWYgbGludAotc3RhdGljIGNoYXIgcmNzaWRbXSA9ICIkRnJlZUJTRDogc3JjL2xpYi9tc3VuL3NyYy9zX25leHRhZnRlcmYuYyx2IDEuMTAgMjAwNS8wMy8wNyAwNDo1NTo1OCBkYXMgRXhwICQiOwotI2VuZGlmCi0KLSNpbmNsdWRlICJtYXRoLmgiCi0jaW5jbHVkZSAibWF0aF9wcml2YXRlLmgiCi0KLWZsb2F0Ci1uZXh0YWZ0ZXJmKGZsb2F0IHgsIGZsb2F0IHkpCi17Ci0Jdm9sYXRpbGUgZmxvYXQgdDsKLQlpbnQzMl90IGh4LGh5LGl4LGl5OwotCi0JR0VUX0ZMT0FUX1dPUkQoaHgseCk7Ci0JR0VUX0ZMT0FUX1dPUkQoaHkseSk7Ci0JaXggPSBoeCYweDdmZmZmZmZmOwkJLyogfHh8ICovCi0JaXkgPSBoeSYweDdmZmZmZmZmOwkJLyogfHl8ICovCi0KLQlpZigoaXg+MHg3ZjgwMDAwMCkgfHwgICAvKiB4IGlzIG5hbiAqLwotCSAgIChpeT4weDdmODAwMDAwKSkgICAgIC8qIHkgaXMgbmFuICovCi0JICAgcmV0dXJuIHgreTsKLQlpZih4PT15KSByZXR1cm4geTsJCS8qIHg9eSwgcmV0dXJuIHkgKi8KLQlpZihpeD09MCkgewkJCQkvKiB4ID09IDAgKi8KLQkgICAgU0VUX0ZMT0FUX1dPUkQoeCwoaHkmMHg4MDAwMDAwMCl8MSk7LyogcmV0dXJuICstbWluc3Vibm9ybWFsICovCi0JICAgIHQgPSB4Kng7Ci0JICAgIGlmKHQ9PXgpIHJldHVybiB0OyBlbHNlIHJldHVybiB4OwkvKiByYWlzZSB1bmRlcmZsb3cgZmxhZyAqLwotCX0KLQlpZihoeD49MCkgewkJCQkvKiB4ID4gMCAqLwotCSAgICBpZihoeD5oeSkgewkJCQkvKiB4ID4geSwgeCAtPSB1bHAgKi8KLQkJaHggLT0gMTsKLQkgICAgfSBlbHNlIHsJCQkJLyogeCA8IHksIHggKz0gdWxwICovCi0JCWh4ICs9IDE7Ci0JICAgIH0KLQl9IGVsc2UgewkJCQkvKiB4IDwgMCAqLwotCSAgICBpZihoeT49MHx8aHg+aHkpewkJCS8qIHggPCB5LCB4IC09IHVscCAqLwotCQloeCAtPSAxOwotCSAgICB9IGVsc2UgewkJCQkvKiB4ID4geSwgeCArPSB1bHAgKi8KLQkJaHggKz0gMTsKLQkgICAgfQotCX0KLQloeSA9IGh4JjB4N2Y4MDAwMDA7Ci0JaWYoaHk+PTB4N2Y4MDAwMDApIHJldHVybiB4K3g7CS8qIG92ZXJmbG93ICAqLwotCWlmKGh5PDB4MDA4MDAwMDApIHsJCS8qIHVuZGVyZmxvdyAqLwotCSAgICB0ID0geCp4OwotCSAgICBpZih0IT14KSB7CQkvKiByYWlzZSB1bmRlcmZsb3cgZmxhZyAqLwotCSAgICAgICAgU0VUX0ZMT0FUX1dPUkQoeSxoeCk7Ci0JCXJldHVybiB5OwotCSAgICB9Ci0JfQotCVNFVF9GTE9BVF9XT1JEKHgsaHgpOwotCXJldHVybiB4OwotfQpkaWZmIC0tZ2l0IGEvbGlibS9zcmMvc19uZXh0YWZ0ZXJsLmMgYi9saWJtL3NyYy9zX25leHRhZnRlcmwuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWFjZmQzMy4uMDAwMDAwMAotLS0gYS9saWJtL3NyYy9zX25leHRhZnRlcmwuYworKysgL2Rldi9udWxsCkBAIC0xLDgyICswLDAgQEAKLS8qIEAoIylzX25leHRhZnRlci5jIDUuMSA5My8wOS8yNCAqLwotLyoKLSAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIENvcHlyaWdodCAoQykgMTk5MyBieSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogRGV2ZWxvcGVkIGF0IFN1blBybywgYSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGJ1c2luZXNzLgotICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcwotICogc29mdHdhcmUgaXMgZnJlZWx5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhpcyBub3RpY2UKLSAqIGlzIHByZXNlcnZlZC4KLSAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqLwotCi0jaWZuZGVmIGxpbnQKLXN0YXRpYyBjaGFyIHJjc2lkW10gPSAiJEZyZWVCU0Q6IHNyYy9saWIvbXN1bi9zcmMvc19uZXh0YWZ0ZXJsLmMsdiAxLjEgMjAwNS8wMy8wNyAwNDo1Njo0NiBkYXMgRXhwICQiOwotI2VuZGlmCi0KLS8qIElFRUUgZnVuY3Rpb25zCi0gKgluZXh0YWZ0ZXIoeCx5KQotICoJcmV0dXJuIHRoZSBuZXh0IG1hY2hpbmUgZmxvYXRpbmctcG9pbnQgbnVtYmVyIG9mIHggaW4gdGhlCi0gKglkaXJlY3Rpb24gdG93YXJkIHkuCi0gKiAgIFNwZWNpYWwgY2FzZXM6Ci0gKi8KLQotI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgotI2luY2x1ZGUgPGZsb2F0Lmg+Ci0KLSNpbmNsdWRlICJmcG1hdGguaCIKLSNpbmNsdWRlICJtYXRoLmgiCi0jaW5jbHVkZSAibWF0aF9wcml2YXRlLmgiCi0KLSNpZiBMREJMX01BWF9FWFAgIT0gMHg0MDAwCi0jZXJyb3IgIlVuc3VwcG9ydGVkIGxvbmcgZG91YmxlIGZvcm1hdCIKLSNlbmRpZgotCi1sb25nIGRvdWJsZQotbmV4dGFmdGVybChsb25nIGRvdWJsZSB4LCBsb25nIGRvdWJsZSB5KQotewotCXZvbGF0aWxlIGxvbmcgZG91YmxlIHQ7Ci0JdW5pb24gSUVFRWwyYml0cyB1eCwgdXk7Ci0KLQl1eC5lID0geDsKLQl1eS5lID0geTsKLQotCWlmICgodXguYml0cy5leHAgPT0gMHg3ZmZmICYmCi0JICAgICAoKHV4LmJpdHMubWFuaCZ+TERCTF9OQklUKXx1eC5iaXRzLm1hbmwpICE9IDApIHx8Ci0JICAgICh1eS5iaXRzLmV4cCA9PSAweDdmZmYgJiYKLQkgICAgICgodXkuYml0cy5tYW5oJn5MREJMX05CSVQpfHV5LmJpdHMubWFubCkgIT0gMCkpCi0JICAgcmV0dXJuIHgreTsJLyogeCBvciB5IGlzIG5hbiAqLwotCWlmKHg9PXkpIHJldHVybiB5OwkJLyogeD15LCByZXR1cm4geSAqLwotCWlmKHg9PTAuMCkgewotCSAgICB1eC5iaXRzLm1hbmggPSAwOwkJCS8qIHJldHVybiArLW1pbnN1Ym5vcm1hbCAqLwotCSAgICB1eC5iaXRzLm1hbmwgPSAxOwotCSAgICB1eC5iaXRzLnNpZ24gPSB1eS5iaXRzLnNpZ247Ci0JICAgIHQgPSB1eC5lKnV4LmU7Ci0JICAgIGlmKHQ9PXV4LmUpIHJldHVybiB0OyBlbHNlIHJldHVybiB1eC5lOyAvKiByYWlzZSB1bmRlcmZsb3cgZmxhZyAqLwotCX0KLQlpZih4PjAuMCBeIHg8eSkgewkJCS8qIHggLT0gdWxwICovCi0JICAgIGlmKHV4LmJpdHMubWFubD09MCkgewotCQlpZiAoKHV4LmJpdHMubWFuaCZ+TERCTF9OQklUKT09MCkKLQkJICAgIHV4LmJpdHMuZXhwIC09IDE7Ci0JCXV4LmJpdHMubWFuaCA9ICh1eC5iaXRzLm1hbmggLSAxKSB8ICh1eC5iaXRzLm1hbmggJiBMREJMX05CSVQpOwotCSAgICB9Ci0JICAgIHV4LmJpdHMubWFubCAtPSAxOwotCX0gZWxzZSB7CQkJCS8qIHggKz0gdWxwICovCi0JICAgIHV4LmJpdHMubWFubCArPSAxOwotCSAgICBpZih1eC5iaXRzLm1hbmw9PTApIHsKLQkJdXguYml0cy5tYW5oID0gKHV4LmJpdHMubWFuaCArIDEpIHwgKHV4LmJpdHMubWFuaCAmIExEQkxfTkJJVCk7Ci0JCWlmICgodXguYml0cy5tYW5oJn5MREJMX05CSVQpPT0wKQotCQkgICAgdXguYml0cy5leHAgKz0gMTsKLQkgICAgfQotCX0KLQlpZih1eC5iaXRzLmV4cD09MHg3ZmZmKSByZXR1cm4geCt4OwkvKiBvdmVyZmxvdyAgKi8KLQlpZih1eC5iaXRzLmV4cD09MCkgewkJCS8qIHVuZGVyZmxvdyAqLwotCSAgICBtYXNrX25iaXRfbCh1eCk7Ci0JICAgIHQgPSB1eC5lICogdXguZTsKLQkgICAgaWYodCE9dXguZSkJCQkvKiByYWlzZSB1bmRlcmZsb3cgZmxhZyAqLwotCQlyZXR1cm4gdXguZTsKLQl9Ci0JcmV0dXJuIHV4LmU7Ci19Ci0KLV9fc3Ryb25nX3JlZmVyZW5jZShuZXh0YWZ0ZXJsLCBuZXh0dG93YXJkbCk7CmRpZmYgLS1naXQgYS9saWJtL3NyYy9zX25leHR0b3dhcmQuYyBiL2xpYm0vc3JjL3NfbmV4dHRvd2FyZC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NWRhNGFkLi4wMDAwMDAwCi0tLSBhL2xpYm0vc3JjL3NfbmV4dHRvd2FyZC5jCisrKyAvZGV2L251bGwKQEAgLTEsNzMgKzAsMCBAQAotLyogQCgjKXNfbmV4dGFmdGVyLmMgNS4xIDkzLzA5LzI0ICovCi0vKgotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogQ29weXJpZ2h0IChDKSAxOTkzIGJ5IFN1biBNaWNyb3N5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBEZXZlbG9wZWQgYXQgU3VuUHJvLCBhIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gYnVzaW5lc3MuCi0gKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCi0gKiBzb2Z0d2FyZSBpcyBmcmVlbHkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGlzIG5vdGljZQotICogaXMgcHJlc2VydmVkLgotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICovCi0KLSNpZm5kZWYgbGludAotc3RhdGljIGNoYXIgcmNzaWRbXSA9ICIkRnJlZUJTRDogc3JjL2xpYi9tc3VuL3NyYy9zX25leHR0b3dhcmQuYyx2IDEuMSAyMDA1LzAzLzA3IDA0OjU2OjQ2IGRhcyBFeHAgJCI7Ci0jZW5kaWYKLQotLyoKLSAqIFdlIGFzc3VtZSB0aGF0IGEgbG9uZyBkb3VibGUgaGFzIGEgMTUtYml0IGV4cG9uZW50LiAgT24gc3lzdGVtcwotICogd2hlcmUgbG9uZyBkb3VibGUgaXMgdGhlIHNhbWUgYXMgZG91YmxlLCBuZXh0dG93YXJkKCkgaXMgYW4gYWxpYXMKLSAqIGZvciBuZXh0YWZ0ZXIoKSwgc28gd2UgZG9uJ3QgdXNlIHRoaXMgcm91dGluZS4KLSAqLwotCi0jaW5jbHVkZSA8ZmxvYXQuaD4KLQotI2luY2x1ZGUgImZwbWF0aC5oIgotI2luY2x1ZGUgIm1hdGguaCIKLSNpbmNsdWRlICJtYXRoX3ByaXZhdGUuaCIKLQotI2lmIExEQkxfTUFYX0VYUCAhPSAweDQwMDAKLSNlcnJvciAiVW5zdXBwb3J0ZWQgbG9uZyBkb3VibGUgZm9ybWF0IgotI2VuZGlmCi0KLWRvdWJsZQotbmV4dHRvd2FyZChkb3VibGUgeCwgbG9uZyBkb3VibGUgeSkKLXsKLQl1bmlvbiBJRUVFbDJiaXRzIHV5OwotCXZvbGF0aWxlIGRvdWJsZSB0OwotCWludDMyX3QgaHgsaXg7Ci0JdV9pbnQzMl90IGx4OwotCi0JRVhUUkFDVF9XT1JEUyhoeCxseCx4KTsKLQlpeCA9IGh4JjB4N2ZmZmZmZmY7CQkvKiB8eHwgKi8KLQl1eS5lID0geTsKLQotCWlmKCgoaXg+PTB4N2ZmMDAwMDApJiYoKGl4LTB4N2ZmMDAwMDApfGx4KSE9MCkgfHwKLQkgICAgKHV5LmJpdHMuZXhwID09IDB4N2ZmZiAmJgotCSAgICAgKCh1eS5iaXRzLm1hbmgmfkxEQkxfTkJJVCl8dXkuYml0cy5tYW5sKSAhPSAwKSkKLQkgICByZXR1cm4geCt5OwkvKiB4IG9yIHkgaXMgbmFuICovCi0JaWYoeD09eSkgcmV0dXJuIChkb3VibGUpeTsJCS8qIHg9eSwgcmV0dXJuIHkgKi8KLQlpZih4PT0wLjApIHsKLQkgICAgSU5TRVJUX1dPUkRTKHgsdXkuYml0cy5zaWduPDwzMSwxKTsJLyogcmV0dXJuICstbWluc3Vibm9ybWFsICovCi0JICAgIHQgPSB4Kng7Ci0JICAgIGlmKHQ9PXgpIHJldHVybiB0OyBlbHNlIHJldHVybiB4OwkvKiByYWlzZSB1bmRlcmZsb3cgZmxhZyAqLwotCX0KLQlpZihoeD4wLjAgXiB4IDwgeSkgewkJCS8qIHggLT0gdWxwICovCi0JICAgIGlmKGx4PT0wKSBoeCAtPSAxOwotCSAgICBseCAtPSAxOwotCX0gZWxzZSB7CQkJCS8qIHggKz0gdWxwICovCi0JICAgIGx4ICs9IDE7Ci0JICAgIGlmKGx4PT0wKSBoeCArPSAxOwotCX0KLQlpeCA9IGh4JjB4N2ZmMDAwMDA7Ci0JaWYoaXg+PTB4N2ZmMDAwMDApIHJldHVybiB4K3g7CS8qIG92ZXJmbG93ICAqLwotCWlmKGl4PDB4MDAxMDAwMDApIHsJCS8qIHVuZGVyZmxvdyAqLwotCSAgICB0ID0geCp4OwotCSAgICBpZih0IT14KSB7CQkvKiByYWlzZSB1bmRlcmZsb3cgZmxhZyAqLwotCSAgICAgICAgSU5TRVJUX1dPUkRTKHksaHgsbHgpOwotCQlyZXR1cm4geTsKLQkgICAgfQotCX0KLQlJTlNFUlRfV09SRFMoeCxoeCxseCk7Ci0JcmV0dXJuIHg7Ci19CmRpZmYgLS1naXQgYS9saWJtL3NyYy9zX25leHR0b3dhcmRmLmMgYi9saWJtL3NyYy9zX25leHR0b3dhcmRmLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU0MTU2ZTYuLjAwMDAwMDAKLS0tIGEvbGlibS9zcmMvc19uZXh0dG93YXJkZi5jCisrKyAvZGV2L251bGwKQEAgLTEsNjAgKzAsMCBAQAotLyoKLSAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIENvcHlyaWdodCAoQykgMTk5MyBieSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogRGV2ZWxvcGVkIGF0IFN1blBybywgYSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGJ1c2luZXNzLgotICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcwotICogc29mdHdhcmUgaXMgZnJlZWx5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhpcyBub3RpY2UKLSAqIGlzIHByZXNlcnZlZC4KLSAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqLwotCi0jaWZuZGVmIGxpbnQKLXN0YXRpYyBjaGFyIHJjc2lkW10gPSAiJEZyZWVCU0Q6IHNyYy9saWIvbXN1bi9zcmMvc19uZXh0dG93YXJkZi5jLHYgMS4xIDIwMDUvMDMvMDcgMDQ6NTc6MzggZGFzIEV4cCAkIjsKLSNlbmRpZgotCi0jaW5jbHVkZSA8ZmxvYXQuaD4KLQotI2luY2x1ZGUgImZwbWF0aC5oIgotI2luY2x1ZGUgIm1hdGguaCIKLSNpbmNsdWRlICJtYXRoX3ByaXZhdGUuaCIKLQotI2RlZmluZQlMREJMX0lORk5BTl9FWFAJKExEQkxfTUFYX0VYUCAqIDIgLSAxKQotCi1mbG9hdAotbmV4dHRvd2FyZGYoZmxvYXQgeCwgbG9uZyBkb3VibGUgeSkKLXsKLQl1bmlvbiBJRUVFbDJiaXRzIHV5OwotCXZvbGF0aWxlIGZsb2F0IHQ7Ci0JaW50MzJfdCBoeCxpeDsKLQotCUdFVF9GTE9BVF9XT1JEKGh4LHgpOwotCWl4ID0gaHgmMHg3ZmZmZmZmZjsJCS8qIHx4fCAqLwotCXV5LmUgPSB5OwotCi0JaWYoKGl4PjB4N2Y4MDAwMDApIHx8Ci0JICAgKHV5LmJpdHMuZXhwID09IExEQkxfSU5GTkFOX0VYUCAmJgotCSAgICAoKHV5LmJpdHMubWFuaCZ+TERCTF9OQklUKXx1eS5iaXRzLm1hbmwpICE9IDApKQotCSAgIHJldHVybiB4K3k7CS8qIHggb3IgeSBpcyBuYW4gKi8KLQlpZih4PT15KSByZXR1cm4gKGZsb2F0KXk7CQkvKiB4PXksIHJldHVybiB5ICovCi0JaWYoaXg9PTApIHsJCQkJLyogeCA9PSAwICovCi0JICAgIFNFVF9GTE9BVF9XT1JEKHgsKHV5LmJpdHMuc2lnbjw8MzEpfDEpOy8qIHJldHVybiArLW1pbnN1Ym5vcm1hbCAqLwotCSAgICB0ID0geCp4OwotCSAgICBpZih0PT14KSByZXR1cm4gdDsgZWxzZSByZXR1cm4geDsJLyogcmFpc2UgdW5kZXJmbG93IGZsYWcgKi8KLQl9Ci0JaWYoaHg+PTAgXiB4IDwgeSkJCQkvKiB4IC09IHVscCAqLwotCSAgICBoeCAtPSAxOwotCWVsc2UJCQkJCS8qIHggKz0gdWxwICovCi0JICAgIGh4ICs9IDE7Ci0JaXggPSBoeCYweDdmODAwMDAwOwotCWlmKGl4Pj0weDdmODAwMDAwKSByZXR1cm4geCt4OwkvKiBvdmVyZmxvdyAgKi8KLQlpZihpeDwweDAwODAwMDAwKSB7CQkvKiB1bmRlcmZsb3cgKi8KLQkgICAgdCA9IHgqeDsKLQkgICAgaWYodCE9eCkgewkJLyogcmFpc2UgdW5kZXJmbG93IGZsYWcgKi8KLQkgICAgICAgIFNFVF9GTE9BVF9XT1JEKHksaHgpOwotCQlyZXR1cm4geTsKLQkgICAgfQotCX0KLQlTRVRfRkxPQVRfV09SRCh4LGh4KTsKLQlyZXR1cm4geDsKLX0KZGlmZiAtLWdpdCBhL2xpYm0vc3JjL3NfcmVtcXVvLmMgYi9saWJtL3NyYy9zX3JlbXF1by5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YWQxZTRjLi4wMDAwMDAwCi0tLSBhL2xpYm0vc3JjL3NfcmVtcXVvLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNTMgKzAsMCBAQAotLyogQCgjKWVfZm1vZC5jIDEuMyA5NS8wMS8xOCAqLwotLyotCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBDb3B5cmlnaHQgKEMpIDE5OTMgYnkgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIERldmVsb3BlZCBhdCBTdW5Tb2Z0LCBhIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gYnVzaW5lc3MuCi0gKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCi0gKiBzb2Z0d2FyZSBpcyBmcmVlbHkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGlzIG5vdGljZSAKLSAqIGlzIHByZXNlcnZlZC4KLSAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqLwotCi0jaW5jbHVkZSA8c3lzL2NkZWZzLmg+Ci0vKiBfX0ZCU0RJRCgiJEZyZWVCU0Q6IHNyYy9saWIvbXN1bi9zcmMvc19yZW1xdW8uYyx2IDEuMSAyMDA1LzAzLzI1IDA0OjQwOjQ0IGRhcyBFeHAgJCIpOyAqLwotCi0jaW5jbHVkZSAibWF0aC5oIgotI2luY2x1ZGUgIm1hdGhfcHJpdmF0ZS5oIgotCi1zdGF0aWMgY29uc3QgZG91YmxlIFplcm9bXSA9IHswLjAsIC0wLjAsfTsKLQotLyoKLSAqIFJldHVybiB0aGUgSUVFRSByZW1haW5kZXIgYW5kIHNldCAqcXVvIHRvIHRoZSBsYXN0IG4gYml0cyBvZiB0aGUKLSAqIHF1b3RpZW50LCByb3VuZGVkIHRvIHRoZSBuZWFyZXN0IGludGVnZXIuICBXZSBjaG9vc2Ugbj0zMSBiZWNhdXNlCi0gKiB3ZSB3aW5kIHVwIGNvbXB1dGluZyBhbGwgdGhlIGludGVnZXIgYml0cyBvZiB0aGUgcXVvdGllbnQgYW55d2F5IGFzCi0gKiBhIHNpZGUtZWZmZWN0IG9mIGNvbXB1dGluZyB0aGUgcmVtYWluZGVyIGJ5IHRoZSBzaGlmdCBhbmQgc3VidHJhY3QKLSAqIG1ldGhvZC4gIEluIHByYWN0aWNlLCB0aGlzIGlzIGZhciBtb3JlIGJpdHMgdGhhbiBhcmUgbmVlZGVkIHRvIHVzZQotICogcmVtcXVvIGluIHJlZHVjdGlvbiBhbGdvcml0aG1zLgotICovCi1kb3VibGUKLXJlbXF1byhkb3VibGUgeCwgZG91YmxlIHksIGludCAqcXVvKQotewotCWludDMyX3QgbixoeCxoeSxoeixpeCxpeSxzeCxpOwotCXVfaW50MzJfdCBseCxseSxseixxLHN4eTsKLQotCUVYVFJBQ1RfV09SRFMoaHgsbHgseCk7Ci0JRVhUUkFDVF9XT1JEUyhoeSxseSx5KTsKLQlzeHkgPSAoaHggXiBoeSkgJiAweDgwMDAwMDAwOwotCXN4ID0gaHgmMHg4MDAwMDAwMDsJCS8qIHNpZ24gb2YgeCAqLwotCWh4IF49c3g7CQkvKiB8eHwgKi8KLQloeSAmPSAweDdmZmZmZmZmOwkvKiB8eXwgKi8KLQotICAgIC8qIHB1cmdlIG9mZiBleGNlcHRpb24gdmFsdWVzICovCi0JaWYoKGh5fGx5KT09MHx8KGh4Pj0weDdmZjAwMDAwKXx8CS8qIHk9MCxvciB4IG5vdCBmaW5pdGUgKi8KLQkgICgoaHl8KChseXwtbHkpPj4zMSkpPjB4N2ZmMDAwMDApKQkvKiBvciB5IGlzIE5hTiAqLwotCSAgICByZXR1cm4gKHgqeSkvKHgqeSk7Ci0JaWYoaHg8PWh5KSB7Ci0JICAgIGlmKChoeDxoeSl8fChseDxseSkpIHsKLQkJcSA9IDA7Ci0JCWdvdG8gZml4dXA7CS8qIHx4fDx8eXwgcmV0dXJuIHggb3IgeC15ICovCi0JICAgIH0KLQkgICAgaWYobHg9PWx5KSB7Ci0gICAgICAgICAgICAgICAgKnF1byA9IChzeHkgPyAtMSA6IDEpOwotCQlyZXR1cm4gWmVyb1sodV9pbnQzMl90KXN4Pj4zMV07CS8qIHx4fD18eXwgcmV0dXJuIHgqMCovCi0JICAgIH0KLQl9Ci0KLSAgICAvKiBkZXRlcm1pbmUgaXggPSBpbG9nYih4KSAqLwotCWlmKGh4PDB4MDAxMDAwMDApIHsJLyogc3Vibm9ybWFsIHggKi8KLQkgICAgaWYoaHg9PTApIHsKLQkJZm9yIChpeCA9IC0xMDQzLCBpPWx4OyBpPjA7IGk8PD0xKSBpeCAtPTE7Ci0JICAgIH0gZWxzZSB7Ci0JCWZvciAoaXggPSAtMTAyMixpPShoeDw8MTEpOyBpPjA7IGk8PD0xKSBpeCAtPTE7Ci0JICAgIH0KLQl9IGVsc2UgaXggPSAoaHg+PjIwKS0xMDIzOwotCi0gICAgLyogZGV0ZXJtaW5lIGl5ID0gaWxvZ2IoeSkgKi8KLQlpZihoeTwweDAwMTAwMDAwKSB7CS8qIHN1Ym5vcm1hbCB5ICovCi0JICAgIGlmKGh5PT0wKSB7Ci0JCWZvciAoaXkgPSAtMTA0MywgaT1seTsgaT4wOyBpPDw9MSkgaXkgLT0xOwotCSAgICB9IGVsc2UgewotCQlmb3IgKGl5ID0gLTEwMjIsaT0oaHk8PDExKTsgaT4wOyBpPDw9MSkgaXkgLT0xOwotCSAgICB9Ci0JfSBlbHNlIGl5ID0gKGh5Pj4yMCktMTAyMzsKLQotICAgIC8qIHNldCB1cCB7aHgsbHh9LCB7aHksbHl9IGFuZCBhbGlnbiB5IHRvIHggKi8KLQlpZihpeCA+PSAtMTAyMikgCi0JICAgIGh4ID0gMHgwMDEwMDAwMHwoMHgwMDBmZmZmZiZoeCk7Ci0JZWxzZSB7CQkvKiBzdWJub3JtYWwgeCwgc2hpZnQgeCB0byBub3JtYWwgKi8KLQkgICAgbiA9IC0xMDIyLWl4OwotCSAgICBpZihuPD0zMSkgewotCSAgICAgICAgaHggPSAoaHg8PG4pfChseD4+KDMyLW4pKTsKLQkgICAgICAgIGx4IDw8PSBuOwotCSAgICB9IGVsc2UgewotCQloeCA9IGx4PDwobi0zMik7Ci0JCWx4ID0gMDsKLQkgICAgfQotCX0KLQlpZihpeSA+PSAtMTAyMikgCi0JICAgIGh5ID0gMHgwMDEwMDAwMHwoMHgwMDBmZmZmZiZoeSk7Ci0JZWxzZSB7CQkvKiBzdWJub3JtYWwgeSwgc2hpZnQgeSB0byBub3JtYWwgKi8KLQkgICAgbiA9IC0xMDIyLWl5OwotCSAgICBpZihuPD0zMSkgewotCSAgICAgICAgaHkgPSAoaHk8PG4pfChseT4+KDMyLW4pKTsKLQkgICAgICAgIGx5IDw8PSBuOwotCSAgICB9IGVsc2UgewotCQloeSA9IGx5PDwobi0zMik7Ci0JCWx5ID0gMDsKLQkgICAgfQotCX0KLQotICAgIC8qIGZpeCBwb2ludCBmbW9kICovCi0JbiA9IGl4IC0gaXk7Ci0JcSA9IDA7Ci0Jd2hpbGUobi0tKSB7Ci0JICAgIGh6PWh4LWh5O2x6PWx4LWx5OyBpZihseDxseSkgaHogLT0gMTsKLQkgICAgaWYoaHo8MCl7aHggPSBoeCtoeCsobHg+PjMxKTsgbHggPSBseCtseDt9Ci0JICAgIGVsc2Uge2h4ID0gaHoraHorKGx6Pj4zMSk7IGx4ID0gbHorbHo7IHErKzt9Ci0JICAgIHEgPDw9IDE7Ci0JfQotCWh6PWh4LWh5O2x6PWx4LWx5OyBpZihseDxseSkgaHogLT0gMTsKLQlpZihoej49MCkge2h4PWh6O2x4PWx6O3ErKzt9Ci0KLSAgICAvKiBjb252ZXJ0IGJhY2sgdG8gZmxvYXRpbmcgdmFsdWUgYW5kIHJlc3RvcmUgdGhlIHNpZ24gKi8KLQlpZigoaHh8bHgpPT0wKSB7CQkJLyogcmV0dXJuIHNpZ24oeCkqMCAqLwotICAgICAgICAgICAgcSAmPSAweDdmZmZmZmZmOwotICAgICAgICAgICAgKnF1byA9IChzeHkgPyAtcSA6IHEpOwotCSAgICByZXR1cm4gWmVyb1sodV9pbnQzMl90KXN4Pj4zMV07Ci0JfQotCXdoaWxlKGh4PDB4MDAxMDAwMDApIHsJCS8qIG5vcm1hbGl6ZSB4ICovCi0JICAgIGh4ID0gaHgraHgrKGx4Pj4zMSk7IGx4ID0gbHgrbHg7Ci0JICAgIGl5IC09IDE7Ci0JfQotCWlmKGl5Pj0gLTEwMjIpIHsJLyogbm9ybWFsaXplIG91dHB1dCAqLwotCSAgICBoeCA9ICgoaHgtMHgwMDEwMDAwMCl8KChpeSsxMDIzKTw8MjApKTsKLQl9IGVsc2UgewkJLyogc3Vibm9ybWFsIG91dHB1dCAqLwotCSAgICBuID0gLTEwMjIgLSBpeTsKLQkgICAgaWYobjw9MjApIHsKLQkJbHggPSAobHg+Pm4pfCgodV9pbnQzMl90KWh4PDwoMzItbikpOwotCQloeCA+Pj0gbjsKLQkgICAgfSBlbHNlIGlmIChuPD0zMSkgewotICAgICAgICAgICAgICAgIGx4ID0gKGh4PDwoMzItbikpfChseD4+bik7IGh4ID0gMDsKLQkgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBseCA9IGh4Pj4obi0zMik7IGh4ID0gMDsKLQkgICAgfQotCX0KLWZpeHVwOgotCUlOU0VSVF9XT1JEUyh4LGh4LGx4KTsKLQl5ID0gZmFicyh5KTsKLQlpZiAoeSA8IDB4MXAtMTAyMSkgewotCSAgICBpZiAoeCt4PnkgfHwgKHgreD09eSAmJiAocSAmIDEpKSkgewotCQlxKys7Ci0JCXgtPXk7Ci0JICAgIH0KLQl9IGVsc2UgaWYgKHg+MC41KnkgfHwgKHg9PTAuNSp5ICYmIChxICYgMSkpKSB7Ci0JICAgIHErKzsKLQkgICAgeC09eTsKLQl9Ci0JR0VUX0hJR0hfV09SRChoeCx4KTsKLQlTRVRfSElHSF9XT1JEKHgsaHhec3gpOwotCXEgJj0gMHg3ZmZmZmZmZjsKLQkqcXVvID0gKHN4eSA/IC1xIDogcSk7Ci0JcmV0dXJuIHg7Ci19CmRpZmYgLS1naXQgYS9saWJtL3NyYy9zX3JlbXF1b2YuYyBiL2xpYm0vc3JjL3NfcmVtcXVvZi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0M2UwNWNiLi4wMDAwMDAwCi0tLSBhL2xpYm0vc3JjL3NfcmVtcXVvZi5jCisrKyAvZGV2L251bGwKQEAgLTEsMTIyICswLDAgQEAKLS8qIEAoIyllX2Ztb2QuYyAxLjMgOTUvMDEvMTggKi8KLS8qLQotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogQ29weXJpZ2h0IChDKSAxOTkzIGJ5IFN1biBNaWNyb3N5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBEZXZlbG9wZWQgYXQgU3VuU29mdCwgYSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGJ1c2luZXNzLgotICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcwotICogc29mdHdhcmUgaXMgZnJlZWx5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhpcyBub3RpY2UgCi0gKiBpcyBwcmVzZXJ2ZWQuCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKi8KLQotI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgotLyogX19GQlNESUQoIiRGcmVlQlNEOiBzcmMvbGliL21zdW4vc3JjL3NfcmVtcXVvZi5jLHYgMS4xIDIwMDUvMDMvMjUgMDQ6NDA6NDQgZGFzIEV4cCAkIik7ICovCi0KLSNpbmNsdWRlICJtYXRoLmgiCi0jaW5jbHVkZSAibWF0aF9wcml2YXRlLmgiCi0KLXN0YXRpYyBjb25zdCBmbG9hdCBaZXJvW10gPSB7MC4wLCAtMC4wLH07Ci0KLS8qCi0gKiBSZXR1cm4gdGhlIElFRUUgcmVtYWluZGVyIGFuZCBzZXQgKnF1byB0byB0aGUgbGFzdCBuIGJpdHMgb2YgdGhlCi0gKiBxdW90aWVudCwgcm91bmRlZCB0byB0aGUgbmVhcmVzdCBpbnRlZ2VyLiAgV2UgY2hvb3NlIG49MzEgYmVjYXVzZQotICogd2Ugd2luZCB1cCBjb21wdXRpbmcgYWxsIHRoZSBpbnRlZ2VyIGJpdHMgb2YgdGhlIHF1b3RpZW50IGFueXdheSBhcwotICogYSBzaWRlLWVmZmVjdCBvZiBjb21wdXRpbmcgdGhlIHJlbWFpbmRlciBieSB0aGUgc2hpZnQgYW5kIHN1YnRyYWN0Ci0gKiBtZXRob2QuICBJbiBwcmFjdGljZSwgdGhpcyBpcyBmYXIgbW9yZSBiaXRzIHRoYW4gYXJlIG5lZWRlZCB0byB1c2UKLSAqIHJlbXF1byBpbiByZWR1Y3Rpb24gYWxnb3JpdGhtcy4KLSAqLwotZmxvYXQKLXJlbXF1b2YoZmxvYXQgeCwgZmxvYXQgeSwgaW50ICpxdW8pCi17Ci0JaW50MzJfdCBuLGh4LGh5LGh6LGl4LGl5LHN4LGk7Ci0JdV9pbnQzMl90IHEsc3h5OwotCi0JR0VUX0ZMT0FUX1dPUkQoaHgseCk7Ci0JR0VUX0ZMT0FUX1dPUkQoaHkseSk7Ci0Jc3h5ID0gKGh4IF4gaHkpICYgMHg4MDAwMDAwMDsKLQlzeCA9IGh4JjB4ODAwMDAwMDA7CQkvKiBzaWduIG9mIHggKi8KLQloeCBePXN4OwkJLyogfHh8ICovCi0JaHkgJj0gMHg3ZmZmZmZmZjsJLyogfHl8ICovCi0KLSAgICAvKiBwdXJnZSBvZmYgZXhjZXB0aW9uIHZhbHVlcyAqLwotCWlmKGh5PT0wfHxoeD49MHg3ZjgwMDAwMHx8aHk+MHg3ZjgwMDAwMCkgLyogeT0wLE5hTjtvciB4IG5vdCBmaW5pdGUgKi8KLQkgICAgcmV0dXJuICh4KnkpLyh4KnkpOwotCWlmKGh4PGh5KSB7Ci0JICAgIHEgPSAwOwotCSAgICBnb3RvIGZpeHVwOwkvKiB8eHw8fHl8IHJldHVybiB4IG9yIHgteSAqLwotCX0gZWxzZSBpZihoeD09aHkpIHsKLSAgICAgICAgICAgICpxdW8gPSAoc3h5ID8gLTEgOiAxKTsKLQkgICAgcmV0dXJuIFplcm9bKHVfaW50MzJfdClzeD4+MzFdOwkvKiB8eHw9fHl8IHJldHVybiB4KjAqLwotCX0KLQotICAgIC8qIGRldGVybWluZSBpeCA9IGlsb2diKHgpICovCi0JaWYoaHg8MHgwMDgwMDAwMCkgewkvKiBzdWJub3JtYWwgeCAqLwotCSAgICBmb3IgKGl4ID0gLTEyNixpPShoeDw8OCk7IGk+MDsgaTw8PTEpIGl4IC09MTsKLQl9IGVsc2UgaXggPSAoaHg+PjIzKS0xMjc7Ci0KLSAgICAvKiBkZXRlcm1pbmUgaXkgPSBpbG9nYih5KSAqLwotCWlmKGh5PDB4MDA4MDAwMDApIHsJLyogc3Vibm9ybWFsIHkgKi8KLQkgICAgZm9yIChpeSA9IC0xMjYsaT0oaHk8PDgpOyBpPjA7IGk8PD0xKSBpeSAtPTE7Ci0JfSBlbHNlIGl5ID0gKGh5Pj4yMyktMTI3OwotCi0gICAgLyogc2V0IHVwIHtoeCxseH0sIHtoeSxseX0gYW5kIGFsaWduIHkgdG8geCAqLwotCWlmKGl4ID49IC0xMjYpCi0JICAgIGh4ID0gMHgwMDgwMDAwMHwoMHgwMDdmZmZmZiZoeCk7Ci0JZWxzZSB7CQkvKiBzdWJub3JtYWwgeCwgc2hpZnQgeCB0byBub3JtYWwgKi8KLQkgICAgbiA9IC0xMjYtaXg7Ci0JICAgIGh4IDw8PSBuOwotCX0KLQlpZihpeSA+PSAtMTI2KQotCSAgICBoeSA9IDB4MDA4MDAwMDB8KDB4MDA3ZmZmZmYmaHkpOwotCWVsc2UgewkJLyogc3Vibm9ybWFsIHksIHNoaWZ0IHkgdG8gbm9ybWFsICovCi0JICAgIG4gPSAtMTI2LWl5OwotCSAgICBoeSA8PD0gbjsKLQl9Ci0KLSAgICAvKiBmaXggcG9pbnQgZm1vZCAqLwotCW4gPSBpeCAtIGl5OwotCXEgPSAwOwotCXdoaWxlKG4tLSkgewotCSAgICBoej1oeC1oeTsKLQkgICAgaWYoaHo8MCkgaHggPSBoeCA8PCAxOwotCSAgICBlbHNlIHtoeCA9IGh6IDw8IDE7IHErKzt9Ci0JICAgIHEgPDw9IDE7Ci0JfQotCWh6PWh4LWh5OwotCWlmKGh6Pj0wKSB7aHg9aHo7cSsrO30KLQotICAgIC8qIGNvbnZlcnQgYmFjayB0byBmbG9hdGluZyB2YWx1ZSBhbmQgcmVzdG9yZSB0aGUgc2lnbiAqLwotCWlmKGh4PT0wKSB7CQkJCS8qIHJldHVybiBzaWduKHgpKjAgKi8KLSAgICAgICAgICAgIHEgJj0gMHg3ZmZmZmZmZjsKLSAgICAgICAgICAgICpxdW8gPSAoc3h5ID8gLXEgOiBxKTsKLQkgICAgcmV0dXJuIFplcm9bKHVfaW50MzJfdClzeD4+MzFdOwotCX0KLQl3aGlsZShoeDwweDAwODAwMDAwKSB7CQkvKiBub3JtYWxpemUgeCAqLwotCSAgICBoeCA8PD0gMTsKLQkgICAgaXkgLT0gMTsKLQl9Ci0JaWYoaXk+PSAtMTI2KSB7CQkvKiBub3JtYWxpemUgb3V0cHV0ICovCi0JICAgIGh4ID0gKChoeC0weDAwODAwMDAwKXwoKGl5KzEyNyk8PDIzKSk7Ci0JfSBlbHNlIHsJCS8qIHN1Ym5vcm1hbCBvdXRwdXQgKi8KLQkgICAgbiA9IC0xMjYgLSBpeTsKLQkgICAgaHggPj49IG47Ci0JfQotZml4dXA6Ci0JU0VUX0ZMT0FUX1dPUkQoeCxoeCk7Ci0JeSA9IGZhYnNmKHkpOwotCWlmICh5IDwgMHgxcC0xMjVmKSB7Ci0JICAgIGlmICh4K3g+eSB8fCAoeCt4PT15ICYmIChxICYgMSkpKSB7Ci0JCXErKzsKLQkJeC09eTsKLQkgICAgfQotCX0gZWxzZSBpZiAoeD4wLjVmKnkgfHwgKHg9PTAuNWYqeSAmJiAocSAmIDEpKSkgewotCSAgICBxKys7Ci0JICAgIHgtPXk7Ci0JfQotCUdFVF9GTE9BVF9XT1JEKGh4LHgpOwotCVNFVF9GTE9BVF9XT1JEKHgsaHhec3gpOwotCXEgJj0gMHg3ZmZmZmZmZjsKLQkqcXVvID0gKHN4eSA/IC1xIDogcSk7Ci0JcmV0dXJuIHg7Ci19CmRpZmYgLS1naXQgYS9saWJtL3NyYy9zX3JpbnQuYyBiL2xpYm0vc3JjL3NfcmludC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhODhkN2I3Li4wMDAwMDAwCi0tLSBhL2xpYm0vc3JjL3NfcmludC5jCisrKyAvZGV2L251bGwKQEAgLTEsODcgKzAsMCBAQAotLyogQCgjKXNfcmludC5jIDUuMSA5My8wOS8yNCAqLwotLyoKLSAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIENvcHlyaWdodCAoQykgMTk5MyBieSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogRGV2ZWxvcGVkIGF0IFN1blBybywgYSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGJ1c2luZXNzLgotICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcwotICogc29mdHdhcmUgaXMgZnJlZWx5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhpcyBub3RpY2UKLSAqIGlzIHByZXNlcnZlZC4KLSAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqLwotCi0jaWZuZGVmIGxpbnQKLXN0YXRpYyBjaGFyIHJjc2lkW10gPSAiJEZyZWVCU0Q6IHNyYy9saWIvbXN1bi9zcmMvc19yaW50LmMsdiAxLjEzIDIwMDUvMTIvMDMgMDc6Mzg6MzUgYmRlIEV4cCAkIjsKLSNlbmRpZgotCi0vKgotICogcmludCh4KQotICogUmV0dXJuIHggcm91bmRlZCB0byBpbnRlZ3JhbCB2YWx1ZSBhY2NvcmRpbmcgdG8gdGhlIHByZXZhaWxpbmcKLSAqIHJvdW5kaW5nIG1vZGUuCi0gKiBNZXRob2Q6Ci0gKglVc2luZyBmbG9hdGluZyBhZGRpdGlvbi4KLSAqIEV4Y2VwdGlvbjoKLSAqCUluZXhhY3QgZmxhZyByYWlzZWQgaWYgeCBub3QgZXF1YWwgdG8gcmludCh4KS4KLSAqLwotCi0jaW5jbHVkZSAibWF0aC5oIgotI2luY2x1ZGUgIm1hdGhfcHJpdmF0ZS5oIgotCi1zdGF0aWMgY29uc3QgZG91YmxlCi1UV081MlsyXT17Ci0gIDQuNTAzNTk5NjI3MzcwNDk2MDAwMDBlKzE1LCAvKiAweDQzMzAwMDAwLCAweDAwMDAwMDAwICovCi0gLTQuNTAzNTk5NjI3MzcwNDk2MDAwMDBlKzE1LCAvKiAweEMzMzAwMDAwLCAweDAwMDAwMDAwICovCi19OwotCi1kb3VibGUKLXJpbnQoZG91YmxlIHgpCi17Ci0JaW50MzJfdCBpMCxqMCxzeDsKLQl1X2ludDMyX3QgaSxpMTsKLQlkb3VibGUgdyx0OwotCUVYVFJBQ1RfV09SRFMoaTAsaTEseCk7Ci0Jc3ggPSAoaTA+PjMxKSYxOwotCWowID0gKChpMD4+MjApJjB4N2ZmKS0weDNmZjsKLQlpZihqMDwyMCkgewotCSAgICBpZihqMDwwKSB7Ci0JCWlmKCgoaTAmMHg3ZmZmZmZmZil8aTEpPT0wKSByZXR1cm4geDsKLQkJaTEgfD0gKGkwJjB4MGZmZmZmKTsKLQkJaTAgJj0gMHhmZmZlMDAwMDsKLQkJaTAgfD0gKChpMXwtaTEpPj4xMikmMHg4MDAwMDsKLQkJU0VUX0hJR0hfV09SRCh4LGkwKTsKLQkgICAgICAgIHcgPSBUV081MltzeF0reDsKLQkgICAgICAgIHQgPSAgdy1UV081MltzeF07Ci0JCUdFVF9ISUdIX1dPUkQoaTAsdCk7Ci0JCVNFVF9ISUdIX1dPUkQodCwoaTAmMHg3ZmZmZmZmZil8KHN4PDwzMSkpOwotCSAgICAgICAgcmV0dXJuIHQ7Ci0JICAgIH0gZWxzZSB7Ci0JCWkgPSAoMHgwMDBmZmZmZik+PmowOwotCQlpZigoKGkwJmkpfGkxKT09MCkgcmV0dXJuIHg7IC8qIHggaXMgaW50ZWdyYWwgKi8KLQkJaT4+PTE7Ci0JCWlmKCgoaTAmaSl8aTEpIT0wKSB7Ci0JCSAgICAvKgotCQkgICAgICogU29tZSBiaXQgaXMgc2V0IGFmdGVyIHRoZSAwLjUgYml0LiAgVG8gYXZvaWQgdGhlCi0JCSAgICAgKiBwb3NzaWJpbGl0eSBvZiBlcnJvcnMgZnJvbSBkb3VibGUgcm91bmRpbmcgaW4KLQkJICAgICAqIHcgPSBUV081MltzeF0reCwgYWRqdXN0IHRoZSAwLjI1IGJpdCB0byBhIGxvd2VyCi0JCSAgICAgKiBndWFyZCBiaXQuICBXZSBkbyB0aGlzIGZvciBhbGwgajA8PTUxLiAgVGhlCi0JCSAgICAgKiBhZGp1c3RtZW50IGlzIHRyaWNraWVzdCBmb3IgajA9PTE4IGFuZCBqMD09MTkKLQkJICAgICAqIHNpbmNlIHRoZW4gaXQgc3BhbnMgdGhlIHdvcmQgYm91bmRhcnkuCi0JCSAgICAgKi8KLQkJICAgIGlmKGowPT0xOSkgaTEgPSAweDQwMDAwMDAwOyBlbHNlCi0JCSAgICBpZihqMD09MTgpIGkxID0gMHg4MDAwMDAwMDsgZWxzZQotCQkgICAgaTAgPSAoaTAmKH5pKSl8KCgweDIwMDAwKT4+ajApOwotCQl9Ci0JICAgIH0KLQl9IGVsc2UgaWYgKGowPjUxKSB7Ci0JICAgIGlmKGowPT0weDQwMCkgcmV0dXJuIHgreDsJLyogaW5mIG9yIE5hTiAqLwotCSAgICBlbHNlIHJldHVybiB4OwkJLyogeCBpcyBpbnRlZ3JhbCAqLwotCX0gZWxzZSB7Ci0JICAgIGkgPSAoKHVfaW50MzJfdCkoMHhmZmZmZmZmZikpPj4oajAtMjApOwotCSAgICBpZigoaTEmaSk9PTApIHJldHVybiB4OwkvKiB4IGlzIGludGVncmFsICovCi0JICAgIGk+Pj0xOwotCSAgICBpZigoaTEmaSkhPTApIGkxID0gKGkxJih+aSkpfCgoMHg0MDAwMDAwMCk+PihqMC0yMCkpOwotCX0KLQlJTlNFUlRfV09SRFMoeCxpMCxpMSk7Ci0JKih2b2xhdGlsZSBkb3VibGUgKikmdyA9IFRXTzUyW3N4XSt4OwkvKiBjbGlwIGFueSBleHRyYSBwcmVjaXNpb24gKi8KLQlyZXR1cm4gdy1UV081MltzeF07Ci19CmRpZmYgLS1naXQgYS9saWJtL3NyYy9zX3JpbnRmLmMgYi9saWJtL3NyYy9zX3JpbnRmLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY3NzQyMWEuLjAwMDAwMDAKLS0tIGEvbGlibS9zcmMvc19yaW50Zi5jCisrKyAvZGV2L251bGwKQEAgLTEsNTIgKzAsMCBAQAotLyogc19yaW50Zi5jIC0tIGZsb2F0IHZlcnNpb24gb2Ygc19yaW50LmMuCi0gKiBDb252ZXJzaW9uIHRvIGZsb2F0IGJ5IElhbiBMYW5jZSBUYXlsb3IsIEN5Z251cyBTdXBwb3J0LCBpYW5AY3lnbnVzLmNvbS4KLSAqLwotCi0vKgotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogQ29weXJpZ2h0IChDKSAxOTkzIGJ5IFN1biBNaWNyb3N5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBEZXZlbG9wZWQgYXQgU3VuUHJvLCBhIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gYnVzaW5lc3MuCi0gKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCi0gKiBzb2Z0d2FyZSBpcyBmcmVlbHkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGlzIG5vdGljZQotICogaXMgcHJlc2VydmVkLgotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICovCi0KLSNpZm5kZWYgbGludAotc3RhdGljIGNoYXIgcmNzaWRbXSA9ICIkRnJlZUJTRDogc3JjL2xpYi9tc3VuL3NyYy9zX3JpbnRmLmMsdiAxLjEwIDIwMDUvMTIvMDMgMDk6MDA6MjkgYmRlIEV4cCAkIjsKLSNlbmRpZgotCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSAibWF0aC5oIgotI2luY2x1ZGUgIm1hdGhfcHJpdmF0ZS5oIgotCi1zdGF0aWMgY29uc3QgZmxvYXQKLVRXTzIzWzJdPXsKLSAgOC4zODg2MDgwMDAwZSswNiwgLyogMHg0YjAwMDAwMCAqLwotIC04LjM4ODYwODAwMDBlKzA2LCAvKiAweGNiMDAwMDAwICovCi19OwotCi1mbG9hdAotcmludGYoZmxvYXQgeCkKLXsKLQlpbnQzMl90IGkwLGowLHN4OwotCXZvbGF0aWxlIGZsb2F0IHcsdDsJLyogdm9sYXRpbGUgd29ya3MgYXJvdW5kIGdjYyBidWcgKi8KLQlHRVRfRkxPQVRfV09SRChpMCx4KTsKLQlzeCA9IChpMD4+MzEpJjE7Ci0JajAgPSAoKGkwPj4yMykmMHhmZiktMHg3ZjsKLQlpZihqMDwyMykgewotCSAgICBpZihqMDwwKSB7Ci0JCWlmKChpMCYweDdmZmZmZmZmKT09MCkgcmV0dXJuIHg7Ci0JICAgICAgICB3ID0gVFdPMjNbc3hdK3g7Ci0JICAgICAgICB0ID0gIHctVFdPMjNbc3hdOwotCQlHRVRfRkxPQVRfV09SRChpMCx0KTsKLQkJU0VUX0ZMT0FUX1dPUkQodCwoaTAmMHg3ZmZmZmZmZil8KHN4PDwzMSkpOwotCSAgICAgICAgcmV0dXJuIHQ7Ci0JICAgIH0KLQkgICAgdyA9IFRXTzIzW3N4XSt4OwotCSAgICByZXR1cm4gdy1UV08yM1tzeF07Ci0JfQotCWlmKGowPT0weDgwKSByZXR1cm4geCt4OwkvKiBpbmYgb3IgTmFOICovCi0JZWxzZSByZXR1cm4geDsJCQkvKiB4IGlzIGludGVncmFsICovCi19CmRpZmYgLS1naXQgYS9saWJtL3NyYy9zX3JvdW5kLmMgYi9saWJtL3NyYy9zX3JvdW5kLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI3NGMxMTkuLjAwMDAwMDAKLS0tIGEvbGlibS9zcmMvc19yb3VuZC5jCisrKyAvZGV2L251bGwKQEAgLTEsNTEgKzAsMCBAQAotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDMsIFN0ZXZlbiBHLiBLYXJnbAotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UgdW5tb2RpZmllZCwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMsIGFuZCB0aGUgZm9sbG93aW5nCi0gKiAgICBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKLSAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKLSAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCi0gKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCi0gKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KLS8qIF9fRkJTRElEKCIkRnJlZUJTRDogc3JjL2xpYi9tc3VuL3NyYy9zX3JvdW5kLmMsdiAxLjQgMjAwNS8xMi8wMiAxMzo0NTowNiBiZGUgRXhwICQiKTsgKi8KLQotI2luY2x1ZGUgPG1hdGguaD4KLQotZG91YmxlCi1yb3VuZChkb3VibGUgeCkKLXsKLQlkb3VibGUgdDsKLQotCWlmICghaXNmaW5pdGUoeCkpCi0JCXJldHVybiAoeCk7Ci0KLQlpZiAoeCA+PSAwLjApIHsKLQkJdCA9IGZsb29yKHgpOwotCQlpZiAodCAtIHggPD0gLTAuNSkKLQkJCXQgKz0gMS4wOwotCQlyZXR1cm4gKHQpOwotCX0gZWxzZSB7Ci0JCXQgPSBmbG9vcigteCk7Ci0JCWlmICh0ICsgeCA8PSAtMC41KQotCQkJdCArPSAxLjA7Ci0JCXJldHVybiAoLXQpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2xpYm0vc3JjL3Nfcm91bmRmLmMgYi9saWJtL3NyYy9zX3JvdW5kZi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MjNiZTliLi4wMDAwMDAwCi0tLSBhL2xpYm0vc3JjL3Nfcm91bmRmLmMKKysrIC9kZXYvbnVsbApAQCAtMSw1MSArMCwwIEBACi0vKi0KLSAqIENvcHlyaWdodCAoYykgMjAwMywgU3RldmVuIEcuIEthcmdsCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSB1bm1vZGlmaWVkLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucywgYW5kIHRoZSBmb2xsb3dpbmcKLSAqICAgIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUgotICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KLSAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKLSAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgotLyogX19GQlNESUQoIiRGcmVlQlNEOiBzcmMvbGliL21zdW4vc3JjL3Nfcm91bmRmLmMsdiAxLjQgMjAwNS8xMi8wMiAxMzo0NTowNiBiZGUgRXhwICQiKTsgKi8KLQotI2luY2x1ZGUgPG1hdGguaD4KLQotZmxvYXQKLXJvdW5kZihmbG9hdCB4KQotewotCWZsb2F0IHQ7Ci0KLQlpZiAoIWlzZmluaXRlKHgpKQotCQlyZXR1cm4gKHgpOwotCi0JaWYgKHggPj0gMC4wKSB7Ci0JCXQgPSBmbG9vcmYoeCk7Ci0JCWlmICh0IC0geCA8PSAtMC41KQotCQkJdCArPSAxLjA7Ci0JCXJldHVybiAodCk7Ci0JfSBlbHNlIHsKLQkJdCA9IGZsb29yZigteCk7Ci0JCWlmICh0ICsgeCA8PSAtMC41KQotCQkJdCArPSAxLjA7Ci0JCXJldHVybiAoLXQpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2xpYm0vc3JjL3Nfcm91bmRsLmMgYi9saWJtL3NyYy9zX3JvdW5kbC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNjVmMzMwLi4wMDAwMDAwCi0tLSBhL2xpYm0vc3JjL3Nfcm91bmRsLmMKKysrIC9kZXYvbnVsbApAQCAtMSw1MSArMCwwIEBACi0vKi0KLSAqIENvcHlyaWdodCAoYykgMjAwMywgU3RldmVuIEcuIEthcmdsCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSB1bm1vZGlmaWVkLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucywgYW5kIHRoZSBmb2xsb3dpbmcKLSAqICAgIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUgotICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KLSAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKLSAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgotLyogX19GQlNESUQoIiRGcmVlQlNEOiBzcmMvbGliL21zdW4vc3JjL3Nfcm91bmRsLmMsdiAxLjIgMjAwNS8xMi8wMiAxMzo0NTowNiBiZGUgRXhwICQiKTsgKi8KLQotI2luY2x1ZGUgPG1hdGguaD4KLQotbG9uZyBkb3VibGUKLXJvdW5kbChsb25nIGRvdWJsZSB4KQotewotCWxvbmcgZG91YmxlIHQ7Ci0KLQlpZiAoIWlzZmluaXRlKHgpKQotCQlyZXR1cm4gKHgpOwotCi0JaWYgKHggPj0gMC4wKSB7Ci0JCXQgPSBmbG9vcmwoeCk7Ci0JCWlmICh0IC0geCA8PSAtMC41KQotCQkJdCArPSAxLjA7Ci0JCXJldHVybiAodCk7Ci0JfSBlbHNlIHsKLQkJdCA9IGZsb29ybCgteCk7Ci0JCWlmICh0ICsgeCA8PSAtMC41KQotCQkJdCArPSAxLjA7Ci0JCXJldHVybiAoLXQpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2xpYm0vc3JjL3Nfc2NhbGJsbi5jIGIvbGlibS9zcmMvc19zY2FsYmxuLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQxOTA4ZDIuLjAwMDAwMDAKLS0tIGEvbGlibS9zcmMvc19zY2FsYmxuLmMKKysrIC9kZXYvbnVsbApAQCAtMSw3NiArMCwwIEBACi0vKi0KLSAqIENvcHlyaWdodCAoYykgMjAwNCBEYXZpZCBTY2h1bHR6IDxkYXNARnJlZUJTRC5PUkc+Ci0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KLS8qIF9fRkJTRElEKCIkRnJlZUJTRDogc3JjL2xpYi9tc3VuL3NyYy9zX3NjYWxibG4uYyx2IDEuMiAyMDA1LzAzLzA3IDA0OjU3OjUwIGRhcyBFeHAgJCIpOyAqLwotCi0jaW5jbHVkZSA8bGltaXRzLmg+Ci0jaW5jbHVkZSA8bWF0aC5oPgotCi1kb3VibGUKLXNjYWxibG4gKGRvdWJsZSB4LCBsb25nIG4pCi17Ci0JaW50IGluOwotCi0JaW4gPSAoaW50KW47Ci0JaWYgKGluICE9IG4pIHsKLQkJaWYgKG4gPiAwKQotCQkJaW4gPSBJTlRfTUFYOwotCQllbHNlCi0JCQlpbiA9IElOVF9NSU47Ci0JfQotCXJldHVybiAoc2NhbGJuKHgsIGluKSk7Ci19Ci0KLWZsb2F0Ci1zY2FsYmxuZiAoZmxvYXQgeCwgbG9uZyBuKQotewotCWludCBpbjsKLQotCWluID0gKGludCluOwotCWlmIChpbiAhPSBuKSB7Ci0JCWlmIChuID4gMCkKLQkJCWluID0gSU5UX01BWDsKLQkJZWxzZQotCQkJaW4gPSBJTlRfTUlOOwotCX0KLQlyZXR1cm4gKHNjYWxibmYoeCwgaW4pKTsKLX0KLQotbG9uZyBkb3VibGUKLXNjYWxibG5sIChsb25nIGRvdWJsZSB4LCBsb25nIG4pCi17Ci0JaW50IGluOwotCi0JaW4gPSAoaW50KW47Ci0JaWYgKGluICE9IG4pIHsKLQkJaWYgKG4gPiAwKQotCQkJaW4gPSBJTlRfTUFYOwotCQllbHNlCi0JCQlpbiA9IElOVF9NSU47Ci0JfQotCXJldHVybiAoc2NhbGJubCh4LCAoaW50KW4pKTsKLX0KZGlmZiAtLWdpdCBhL2xpYm0vc3JjL3Nfc2NhbGJuLmMgYi9saWJtL3NyYy9zX3NjYWxibi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MjE4YzExLi4wMDAwMDAwCi0tLSBhL2xpYm0vc3JjL3Nfc2NhbGJuLmMKKysrIC9kZXYvbnVsbApAQCAtMSw3OSArMCwwIEBACi0vKiBAKCMpc19zY2FsYm4uYyA1LjEgOTMvMDkvMjQgKi8KLS8qCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBDb3B5cmlnaHQgKEMpIDE5OTMgYnkgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIERldmVsb3BlZCBhdCBTdW5Qcm8sIGEgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBidXNpbmVzcy4KLSAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKLSAqIHNvZnR3YXJlIGlzIGZyZWVseSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoaXMgbm90aWNlCi0gKiBpcyBwcmVzZXJ2ZWQuCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKi8KLQotI2lmbmRlZiBsaW50Ci1zdGF0aWMgY2hhciByY3NpZFtdID0gIiRGcmVlQlNEOiBzcmMvbGliL21zdW4vc3JjL3Nfc2NhbGJuLmMsdiAxLjExIDIwMDUvMDMvMDcgMjE6Mjc6MzcgZGFzIEV4cCAkIjsKLSNlbmRpZgotCi0vKgotICogc2NhbGJuIChkb3VibGUgeCwgaW50IG4pCi0gKiBzY2FsYm4oeCxuKSByZXR1cm5zIHgqIDIqKm4gIGNvbXB1dGVkIGJ5ICBleHBvbmVudAotICogbWFuaXB1bGF0aW9uIHJhdGhlciB0aGFuIGJ5IGFjdHVhbGx5IHBlcmZvcm1pbmcgYW4KLSAqIGV4cG9uZW50aWF0aW9uIG9yIGEgbXVsdGlwbGljYXRpb24uCi0gKi8KLQotI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgotI2luY2x1ZGUgPGZsb2F0Lmg+Ci0KLSNpbmNsdWRlICJtYXRoLmgiCi0jaW5jbHVkZSAibWF0aF9wcml2YXRlLmgiCi0KLXN0YXRpYyBjb25zdCBkb3VibGUKLXR3bzU0ICAgPSAgMS44MDE0Mzk4NTA5NDgxOTg0MDAwMGUrMTYsIC8qIDB4NDM1MDAwMDAsIDB4MDAwMDAwMDAgKi8KLXR3b201NCAgPSAgNS41NTExMTUxMjMxMjU3ODI3MDIxMmUtMTcsIC8qIDB4M0M5MDAwMDAsIDB4MDAwMDAwMDAgKi8KLWh1Z2UgICA9IDEuMGUrMzAwLAotdGlueSAgID0gMS4wZS0zMDA7Ci0KLWRvdWJsZQotc2NhbGJuIChkb3VibGUgeCwgaW50IG4pCi17Ci0JaW50MzJfdCBrLGh4LGx4OwotCUVYVFJBQ1RfV09SRFMoaHgsbHgseCk7Ci0gICAgICAgIGsgPSAoaHgmMHg3ZmYwMDAwMCk+PjIwOwkJLyogZXh0cmFjdCBleHBvbmVudCAqLwotICAgICAgICBpZiAoaz09MCkgewkJCQkvKiAwIG9yIHN1Ym5vcm1hbCB4ICovCi0gICAgICAgICAgICBpZiAoKGx4fChoeCYweDdmZmZmZmZmKSk9PTApIHJldHVybiB4OyAvKiArLTAgKi8KLQkgICAgeCAqPSB0d281NDsKLQkgICAgR0VUX0hJR0hfV09SRChoeCx4KTsKLQkgICAgayA9ICgoaHgmMHg3ZmYwMDAwMCk+PjIwKSAtIDU0OwotICAgICAgICAgICAgaWYgKG48IC01MDAwMCkgcmV0dXJuIHRpbnkqeDsgCS8qdW5kZXJmbG93Ki8KLQkgICAgfQotICAgICAgICBpZiAoaz09MHg3ZmYpIHJldHVybiB4K3g7CQkvKiBOYU4gb3IgSW5mICovCi0gICAgICAgIGsgPSBrK247Ci0gICAgICAgIGlmIChrID4gIDB4N2ZlKSByZXR1cm4gaHVnZSpjb3B5c2lnbihodWdlLHgpOyAvKiBvdmVyZmxvdyAgKi8KLSAgICAgICAgaWYgKGsgPiAwKSAJCQkJLyogbm9ybWFsIHJlc3VsdCAqLwotCSAgICB7U0VUX0hJR0hfV09SRCh4LChoeCYweDgwMGZmZmZmKXwoazw8MjApKTsgcmV0dXJuIHg7fQotICAgICAgICBpZiAoayA8PSAtNTQpCi0gICAgICAgICAgICBpZiAobiA+IDUwMDAwKSAJLyogaW4gY2FzZSBpbnRlZ2VyIG92ZXJmbG93IGluIG4rayAqLwotCQlyZXR1cm4gaHVnZSpjb3B5c2lnbihodWdlLHgpOwkvKm92ZXJmbG93Ki8KLQkgICAgZWxzZSByZXR1cm4gdGlueSpjb3B5c2lnbih0aW55LHgpOyAJLyp1bmRlcmZsb3cqLwotICAgICAgICBrICs9IDU0OwkJCQkvKiBzdWJub3JtYWwgcmVzdWx0ICovCi0JU0VUX0hJR0hfV09SRCh4LChoeCYweDgwMGZmZmZmKXwoazw8MjApKTsKLSAgICAgICAgcmV0dXJuIHgqdHdvbTU0OwotfQotCi0vLyB0aGlzIGlzIG5vcm1hbGx5IGluIEZyZWVCU0QncyBsaWJjLgotZG91YmxlCi1sZGV4cCAoZG91YmxlIHgsIGludCBuKQotewotICAgIHJldHVybiBzY2FsYm4oeCxuKTsKLX0KLQotI2lmIChMREJMX01BTlRfRElHID09IDUzKSAgICAvL1hYWDogYnJpYW4gRklYTUUgX193ZWFrX3JlZmVyZW5jZSBkb2VzbiB3b3JrCi1sb25nIGRvdWJsZSBsZGV4cGwgKGxvbmcgZG91YmxlIHgsIGludCBuKSB7Ci0gICAgcmV0dXJuIHNjYWxibigoZG91YmxlKXgsbik7Ci19Ci1sb25nIGRvdWJsZSBzY2FsYm5sIChsb25nIGRvdWJsZSB4LCBpbnQgbikgewotICAgIHJldHVybiBzY2FsYm4oKGRvdWJsZSl4LG4pOwotfQotX193ZWFrX3JlZmVyZW5jZShzY2FsYm4sIGxkZXhwbCk7Ci1fX3dlYWtfcmVmZXJlbmNlKHNjYWxibiwgc2NhbGJubCk7Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL2xpYm0vc3JjL3Nfc2NhbGJuZi5jIGIvbGlibS9zcmMvc19zY2FsYm5mLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ2YzdiYWYuLjAwMDAwMDAKLS0tIGEvbGlibS9zcmMvc19zY2FsYm5mLmMKKysrIC9kZXYvbnVsbApAQCAtMSw1OCArMCwwIEBACi0vKiBzX3NjYWxibmYuYyAtLSBmbG9hdCB2ZXJzaW9uIG9mIHNfc2NhbGJuLmMuCi0gKiBDb252ZXJzaW9uIHRvIGZsb2F0IGJ5IElhbiBMYW5jZSBUYXlsb3IsIEN5Z251cyBTdXBwb3J0LCBpYW5AY3lnbnVzLmNvbS4KLSAqLwotCi0vKgotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogQ29weXJpZ2h0IChDKSAxOTkzIGJ5IFN1biBNaWNyb3N5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBEZXZlbG9wZWQgYXQgU3VuUHJvLCBhIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gYnVzaW5lc3MuCi0gKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCi0gKiBzb2Z0d2FyZSBpcyBmcmVlbHkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGlzIG5vdGljZQotICogaXMgcHJlc2VydmVkLgotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICovCi0KLSNpZm5kZWYgbGludAotc3RhdGljIGNoYXIgcmNzaWRbXSA9ICIkRnJlZUJTRDogc3JjL2xpYi9tc3VuL3NyYy9zX3NjYWxibmYuYyx2IDEuOCAyMDA1LzAzLzA3IDA0OjUyOjQzIGRhcyBFeHAgJCI7Ci0jZW5kaWYKLQotI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgotCi0jaW5jbHVkZSAibWF0aC5oIgotI2luY2x1ZGUgIm1hdGhfcHJpdmF0ZS5oIgotCi1zdGF0aWMgY29uc3QgZmxvYXQKLXR3bzI1ICAgPSAgMy4zNTU0NDMyMDBlKzA3LAkvKiAweDRjMDAwMDAwICovCi10d29tMjUgID0gIDIuOTgwMjMyMjM4OGUtMDgsCS8qIDB4MzMwMDAwMDAgKi8KLWh1Z2UgICA9IDEuMGUrMzAsCi10aW55ICAgPSAxLjBlLTMwOwotCi1mbG9hdAotc2NhbGJuZiAoZmxvYXQgeCwgaW50IG4pCi17Ci0JaW50MzJfdCBrLGl4OwotCUdFVF9GTE9BVF9XT1JEKGl4LHgpOwotICAgICAgICBrID0gKGl4JjB4N2Y4MDAwMDApPj4yMzsJCS8qIGV4dHJhY3QgZXhwb25lbnQgKi8KLSAgICAgICAgaWYgKGs9PTApIHsJCQkJLyogMCBvciBzdWJub3JtYWwgeCAqLwotICAgICAgICAgICAgaWYgKChpeCYweDdmZmZmZmZmKT09MCkgcmV0dXJuIHg7IC8qICstMCAqLwotCSAgICB4ICo9IHR3bzI1OwotCSAgICBHRVRfRkxPQVRfV09SRChpeCx4KTsKLQkgICAgayA9ICgoaXgmMHg3ZjgwMDAwMCk+PjIzKSAtIDI1OwotICAgICAgICAgICAgaWYgKG48IC01MDAwMCkgcmV0dXJuIHRpbnkqeDsgCS8qdW5kZXJmbG93Ki8KLQkgICAgfQotICAgICAgICBpZiAoaz09MHhmZikgcmV0dXJuIHgreDsJCS8qIE5hTiBvciBJbmYgKi8KLSAgICAgICAgayA9IGsrbjsKLSAgICAgICAgaWYgKGsgPiAgMHhmZSkgcmV0dXJuIGh1Z2UqY29weXNpZ25mKGh1Z2UseCk7IC8qIG92ZXJmbG93ICAqLwotICAgICAgICBpZiAoayA+IDApIAkJCQkvKiBub3JtYWwgcmVzdWx0ICovCi0JICAgIHtTRVRfRkxPQVRfV09SRCh4LChpeCYweDgwN2ZmZmZmKXwoazw8MjMpKTsgcmV0dXJuIHg7fQotICAgICAgICBpZiAoayA8PSAtMjUpCi0gICAgICAgICAgICBpZiAobiA+IDUwMDAwKSAJLyogaW4gY2FzZSBpbnRlZ2VyIG92ZXJmbG93IGluIG4rayAqLwotCQlyZXR1cm4gaHVnZSpjb3B5c2lnbmYoaHVnZSx4KTsJLypvdmVyZmxvdyovCi0JICAgIGVsc2UgcmV0dXJuIHRpbnkqY29weXNpZ25mKHRpbnkseCk7CS8qdW5kZXJmbG93Ki8KLSAgICAgICAgayArPSAyNTsJCQkJLyogc3Vibm9ybWFsIHJlc3VsdCAqLwotCVNFVF9GTE9BVF9XT1JEKHgsKGl4JjB4ODA3ZmZmZmYpfChrPDwyMykpOwotICAgICAgICByZXR1cm4geCp0d29tMjU7Ci19Ci0KLV9fc3Ryb25nX3JlZmVyZW5jZShzY2FsYm5mLCBsZGV4cGYpOwpkaWZmIC0tZ2l0IGEvbGlibS9zcmMvc19zY2FsYm5sLmMgYi9saWJtL3NyYy9zX3NjYWxibmwuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzY0NWQwMC4uMDAwMDAwMAotLS0gYS9saWJtL3NyYy9zX3NjYWxibmwuYworKysgL2Rldi9udWxsCkBAIC0xLDcxICswLDAgQEAKLS8qIEAoIylzX3NjYWxibi5jIDUuMSA5My8wOS8yNCAqLwotLyoKLSAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIENvcHlyaWdodCAoQykgMTk5MyBieSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogRGV2ZWxvcGVkIGF0IFN1blBybywgYSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGJ1c2luZXNzLgotICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcwotICogc29mdHdhcmUgaXMgZnJlZWx5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhpcyBub3RpY2UKLSAqIGlzIHByZXNlcnZlZC4KLSAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqLwotCi0jaWZuZGVmIGxpbnQKLXN0YXRpYyBjaGFyIHJjc2lkW10gPSAiJEZyZWVCU0Q6IHNyYy9saWIvbXN1bi9zcmMvc19zY2FsYm5sLmMsdiAxLjEgMjAwNS8wMy8wNyAwNDo1Mjo1OCBkYXMgRXhwICQiOwotI2VuZGlmCi0KLS8qCi0gKiBzY2FsYm5sIChsb25nIGRvdWJsZSB4LCBpbnQgbikKLSAqIHNjYWxibmwoeCxuKSByZXR1cm5zIHgqIDIqKm4gIGNvbXB1dGVkIGJ5ICBleHBvbmVudAotICogbWFuaXB1bGF0aW9uIHJhdGhlciB0aGFuIGJ5IGFjdHVhbGx5IHBlcmZvcm1pbmcgYW4KLSAqIGV4cG9uZW50aWF0aW9uIG9yIGEgbXVsdGlwbGljYXRpb24uCi0gKi8KLQotLyoKLSAqIFdlIGFzc3VtZSB0aGF0IGEgbG9uZyBkb3VibGUgaGFzIGEgMTUtYml0IGV4cG9uZW50LiAgT24gc3lzdGVtcwotICogd2hlcmUgbG9uZyBkb3VibGUgaXMgdGhlIHNhbWUgYXMgZG91YmxlLCBzY2FsYm5sKCkgaXMgYW4gYWxpYXMKLSAqIGZvciBzY2FsYm4oKSwgc28gd2UgZG9uJ3QgdXNlIHRoaXMgcm91dGluZS4KLSAqLwotCi0jaW5jbHVkZSA8c3lzL2NkZWZzLmg+Ci0jaW5jbHVkZSA8ZmxvYXQuaD4KLSNpbmNsdWRlIDxtYXRoLmg+Ci0KLSNpbmNsdWRlICJmcG1hdGguaCIKLQotI2lmIExEQkxfTUFYX0VYUCAhPSAweDQwMDAKLSNlcnJvciAiVW5zdXBwb3J0ZWQgbG9uZyBkb3VibGUgZm9ybWF0IgotI2VuZGlmCi0KLXN0YXRpYyBjb25zdCBsb25nIGRvdWJsZQotaHVnZSA9IDB4MXAxNjAwMEwsCi10aW55ID0gMHgxcC0xNjAwMEw7Ci0KLWxvbmcgZG91YmxlCi1zY2FsYm5sIChsb25nIGRvdWJsZSB4LCBpbnQgbikKLXsKLQl1bmlvbiBJRUVFbDJiaXRzIHU7Ci0JaW50IGs7Ci0JdS5lID0geDsKLSAgICAgICAgayA9IHUuYml0cy5leHA7CQkJCS8qIGV4dHJhY3QgZXhwb25lbnQgKi8KLSAgICAgICAgaWYgKGs9PTApIHsJCQkJLyogMCBvciBzdWJub3JtYWwgeCAqLwotICAgICAgICAgICAgaWYgKCh1LmJpdHMubWFuaHx1LmJpdHMubWFubCk9PTApIHJldHVybiB4OwkvKiArLTAgKi8KLQkgICAgdS5lICo9IDB4MXArMTI4OwotCSAgICBrID0gdS5iaXRzLmV4cCAtIDEyODsKLSAgICAgICAgICAgIGlmIChuPCAtNTAwMDApIHJldHVybiB0aW55Kng7IAkvKnVuZGVyZmxvdyovCi0JICAgIH0KLSAgICAgICAgaWYgKGs9PTB4N2ZmZikgcmV0dXJuIHgreDsJCS8qIE5hTiBvciBJbmYgKi8KLSAgICAgICAgayA9IGsrbjsKLSAgICAgICAgaWYgKGsgPj0gMHg3ZmZmKSByZXR1cm4gaHVnZSpjb3B5c2lnbmwoaHVnZSx4KTsgLyogb3ZlcmZsb3cgICovCi0gICAgICAgIGlmIChrID4gMCkgCQkJCS8qIG5vcm1hbCByZXN1bHQgKi8KLQkgICAge3UuYml0cy5leHAgPSBrOyByZXR1cm4gdS5lO30KLSAgICAgICAgaWYgKGsgPD0gLTEyOCkKLSAgICAgICAgICAgIGlmIChuID4gNTAwMDApIAkvKiBpbiBjYXNlIGludGVnZXIgb3ZlcmZsb3cgaW4gbitrICovCi0JCXJldHVybiBodWdlKmNvcHlzaWduKGh1Z2UseCk7CS8qb3ZlcmZsb3cqLwotCSAgICBlbHNlIHJldHVybiB0aW55KmNvcHlzaWduKHRpbnkseCk7IAkvKnVuZGVyZmxvdyovCi0gICAgICAgIGsgKz0gMTI4OwkJCQkvKiBzdWJub3JtYWwgcmVzdWx0ICovCi0JdS5iaXRzLmV4cCA9IGs7Ci0gICAgICAgIHJldHVybiB1LmUqMHgxcC0xMjg7Ci19Ci0KLV9fc3Ryb25nX3JlZmVyZW5jZShzY2FsYm5sLCBsZGV4cGwpOwpkaWZmIC0tZ2l0IGEvbGlibS9zcmMvc19zaWduYml0LmMgYi9saWJtL3NyYy9zX3NpZ25iaXQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmZjMDhmMy4uMDAwMDAwMAotLS0gYS9saWJtL3NyYy9zX3NpZ25iaXQuYworKysgL2Rldi9udWxsCkBAIC0xLDU4ICswLDAgQEAKLS8qLQotICogQ29weXJpZ2h0IChjKSAyMDAzIE1pa2UgQmFyY3JvZnQgPG1pa2VARnJlZUJTRC5vcmc+Ci0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICoKLSAqICRGcmVlQlNEOiBzcmMvbGliL21zdW4vc3JjL3Nfc2lnbmJpdC5jLHYgMS4xIDIwMDQvMDcvMTkgMDg6MTY6MTAgZGFzIEV4cCAkCi0gKi8KLQotI2luY2x1ZGUgPG1hdGguaD4KLQotI2luY2x1ZGUgImZwbWF0aC5oIgotCi1pbnQKLV9fc2lnbmJpdChkb3VibGUgZCkKLXsKLQl1bmlvbiBJRUVFZDJiaXRzIHU7Ci0KLQl1LmQgPSBkOwotCXJldHVybiAodS5iaXRzLnNpZ24pOwotfQotCi1pbnQKLV9fc2lnbmJpdGYoZmxvYXQgZikKLXsKLQl1bmlvbiBJRUVFZjJiaXRzIHU7Ci0KLQl1LmYgPSBmOwotCXJldHVybiAodS5iaXRzLnNpZ24pOwotfQotCi1pbnQKLV9fc2lnbmJpdGwobG9uZyBkb3VibGUgZSkKLXsKLQl1bmlvbiBJRUVFbDJiaXRzIHU7Ci0KLQl1LmUgPSBlOwotCXJldHVybiAodS5iaXRzLnNpZ24pOwotfQpkaWZmIC0tZ2l0IGEvbGlibS9zcmMvc19zaWduaWZpY2FuZC5jIGIvbGlibS9zcmMvc19zaWduaWZpY2FuZC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwOGJiMzAzLi4wMDAwMDAwCi0tLSBhL2xpYm0vc3JjL3Nfc2lnbmlmaWNhbmQuYworKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLS8qIEAoIylzX3NpZ25pZi5jIDUuMSA5My8wOS8yNCAqLwotLyoKLSAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIENvcHlyaWdodCAoQykgMTk5MyBieSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogRGV2ZWxvcGVkIGF0IFN1blBybywgYSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGJ1c2luZXNzLgotICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcwotICogc29mdHdhcmUgaXMgZnJlZWx5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhpcyBub3RpY2UKLSAqIGlzIHByZXNlcnZlZC4KLSAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqLwotCi0jaWZuZGVmIGxpbnQKLXN0YXRpYyBjaGFyIHJjc2lkW10gPSAiJEZyZWVCU0Q6IHNyYy9saWIvbXN1bi9zcmMvc19zaWduaWZpY2FuZC5jLHYgMS45IDIwMDMvMDcvMjMgMDQ6NTM6NDcgcGV0ZXIgRXhwICQiOwotI2VuZGlmCi0KLS8qCi0gKiBzaWduaWZpY2FuZCh4KSBjb21wdXRlcyBqdXN0Ci0gKiAJc2NhbGIoeCwgKGRvdWJsZSkgLWlsb2diKHgpKSwKLSAqIGZvciBleGVyY2lzaW5nIHRoZSBmcmFjdGlvbi1wYXJ0KEYpIElFRUUgNzU0LTE5ODUgdGVzdCB2ZWN0b3IuCi0gKi8KLQotI2luY2x1ZGUgIm1hdGguaCIKLSNpbmNsdWRlICJtYXRoX3ByaXZhdGUuaCIKLQotZG91YmxlCi1zaWduaWZpY2FuZChkb3VibGUgeCkKLXsKLQlyZXR1cm4gX19pZWVlNzU0X3NjYWxiKHgsKGRvdWJsZSkgLWlsb2diKHgpKTsKLX0KZGlmZiAtLWdpdCBhL2xpYm0vc3JjL3Nfc2lnbmlmaWNhbmRmLmMgYi9saWJtL3NyYy9zX3NpZ25pZmljYW5kZi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiM2UzNDFkLi4wMDAwMDAwCi0tLSBhL2xpYm0vc3JjL3Nfc2lnbmlmaWNhbmRmLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyNyArMCwwIEBACi0vKiBzX3NpZ25pZmljYW5kZi5jIC0tIGZsb2F0IHZlcnNpb24gb2Ygc19zaWduaWZpY2FuZC5jLgotICogQ29udmVyc2lvbiB0byBmbG9hdCBieSBJYW4gTGFuY2UgVGF5bG9yLCBDeWdudXMgU3VwcG9ydCwgaWFuQGN5Z251cy5jb20uCi0gKi8KLQotLyoKLSAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIENvcHlyaWdodCAoQykgMTk5MyBieSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogRGV2ZWxvcGVkIGF0IFN1blBybywgYSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGJ1c2luZXNzLgotICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcwotICogc29mdHdhcmUgaXMgZnJlZWx5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhpcyBub3RpY2UKLSAqIGlzIHByZXNlcnZlZC4KLSAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqLwotCi0jaWZuZGVmIGxpbnQKLXN0YXRpYyBjaGFyIHJjc2lkW10gPSAiJEZyZWVCU0Q6IHNyYy9saWIvbXN1bi9zcmMvc19zaWduaWZpY2FuZGYuYyx2IDEuNyAyMDAyLzA1LzI4IDE4OjE1OjA0IGFsZnJlZCBFeHAgJCI7Ci0jZW5kaWYKLQotI2luY2x1ZGUgIm1hdGguaCIKLSNpbmNsdWRlICJtYXRoX3ByaXZhdGUuaCIKLQotZmxvYXQKLXNpZ25pZmljYW5kZihmbG9hdCB4KQotewotCXJldHVybiBfX2llZWU3NTRfc2NhbGJmKHgsKGZsb2F0KSAtaWxvZ2JmKHgpKTsKLX0KZGlmZiAtLWdpdCBhL2xpYm0vc3JjL3Nfc2luLmMgYi9saWJtL3NyYy9zX3Npbi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlODkzZTIzLi4wMDAwMDAwCi0tLSBhL2xpYm0vc3JjL3Nfc2luLmMKKysrIC9kZXYvbnVsbApAQCAtMSw4MiArMCwwIEBACi0vKiBAKCMpc19zaW4uYyA1LjEgOTMvMDkvMjQgKi8KLS8qCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBDb3B5cmlnaHQgKEMpIDE5OTMgYnkgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIERldmVsb3BlZCBhdCBTdW5Qcm8sIGEgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBidXNpbmVzcy4KLSAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKLSAqIHNvZnR3YXJlIGlzIGZyZWVseSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoaXMgbm90aWNlCi0gKiBpcyBwcmVzZXJ2ZWQuCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKi8KLQotI2lmbmRlZiBsaW50Ci1zdGF0aWMgY2hhciByY3NpZFtdID0gIiRGcmVlQlNEOiBzcmMvbGliL21zdW4vc3JjL3Nfc2luLmMsdiAxLjEwIDIwMDUvMTAvMjQgMTQ6MDg6MzYgYmRlIEV4cCAkIjsKLSNlbmRpZgotCi0vKiBzaW4oeCkKLSAqIFJldHVybiBzaW5lIGZ1bmN0aW9uIG9mIHguCi0gKgotICoga2VybmVsIGZ1bmN0aW9uOgotICoJX19rZXJuZWxfc2luCQkuLi4gc2luZSBmdW5jdGlvbiBvbiBbLXBpLzQscGkvNF0KLSAqCV9fa2VybmVsX2NvcwkJLi4uIGNvc2UgZnVuY3Rpb24gb24gWy1waS80LHBpLzRdCi0gKglfX2llZWU3NTRfcmVtX3BpbzIJLi4uIGFyZ3VtZW50IHJlZHVjdGlvbiByb3V0aW5lCi0gKgotICogTWV0aG9kLgotICogICAgICBMZXQgUyxDIGFuZCBUIGRlbm90ZSB0aGUgc2luLCBjb3MgYW5kIHRhbiByZXNwZWN0aXZlbHkgb24KLSAqCVstUEkvNCwgK1BJLzRdLiBSZWR1Y2UgdGhlIGFyZ3VtZW50IHggdG8geTEreTIgPSB4LWsqcGkvMgotICoJaW4gWy1waS80ICwgK3BpLzRdLCBhbmQgbGV0IG4gPSBrIG1vZCA0LgotICoJV2UgaGF2ZQotICoKLSAqICAgICAgICAgIG4gICAgICAgIHNpbih4KSAgICAgIGNvcyh4KSAgICAgICAgdGFuKHgpCi0gKiAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICoJICAgIDAJICAgICAgIFMJICAgQwkJIFQKLSAqCSAgICAxCSAgICAgICBDCSAgLVMJCS0xL1QKLSAqCSAgICAyCSAgICAgIC1TCSAgLUMJCSBUCi0gKgkgICAgMwkgICAgICAtQwkgICBTCQktMS9UCi0gKiAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICoKLSAqIFNwZWNpYWwgY2FzZXM6Ci0gKiAgICAgIExldCB0cmlnIGJlIGFueSBvZiBzaW4sIGNvcywgb3IgdGFuLgotICogICAgICB0cmlnKCstSU5GKSAgaXMgTmFOLCB3aXRoIHNpZ25hbHM7Ci0gKiAgICAgIHRyaWcoTmFOKSAgICBpcyB0aGF0IE5hTjsKLSAqCi0gKiBBY2N1cmFjeToKLSAqCVRSSUcoeCkgcmV0dXJucyB0cmlnKHgpIG5lYXJseSByb3VuZGVkCi0gKi8KLQotI2luY2x1ZGUgIm1hdGguaCIKLSNpbmNsdWRlICJtYXRoX3ByaXZhdGUuaCIKLQotZG91YmxlCi1zaW4oZG91YmxlIHgpCi17Ci0JZG91YmxlIHlbMl0sej0wLjA7Ci0JaW50MzJfdCBuLCBpeDsKLQotICAgIC8qIEhpZ2ggd29yZCBvZiB4LiAqLwotCUdFVF9ISUdIX1dPUkQoaXgseCk7Ci0KLSAgICAvKiB8eHwgfjwgcGkvNCAqLwotCWl4ICY9IDB4N2ZmZmZmZmY7Ci0JaWYoaXggPD0gMHgzZmU5MjFmYikgewotCSAgICBpZihpeDwweDNlNDAwMDAwKQkJCS8qIHx4fCA8IDIqKi0yNyAqLwotCSAgICAgICB7aWYoKGludCl4PT0wKSByZXR1cm4geDt9CS8qIGdlbmVyYXRlIGluZXhhY3QgKi8KLQkgICAgcmV0dXJuIF9fa2VybmVsX3Npbih4LHosMCk7Ci0JfQotCi0gICAgLyogc2luKEluZiBvciBOYU4pIGlzIE5hTiAqLwotCWVsc2UgaWYgKGl4Pj0weDdmZjAwMDAwKSByZXR1cm4geC14OwotCi0gICAgLyogYXJndW1lbnQgcmVkdWN0aW9uIG5lZWRlZCAqLwotCWVsc2UgewotCSAgICBuID0gX19pZWVlNzU0X3JlbV9waW8yKHgseSk7Ci0JICAgIHN3aXRjaChuJjMpIHsKLQkJY2FzZSAwOiByZXR1cm4gIF9fa2VybmVsX3Npbih5WzBdLHlbMV0sMSk7Ci0JCWNhc2UgMTogcmV0dXJuICBfX2tlcm5lbF9jb3MoeVswXSx5WzFdKTsKLQkJY2FzZSAyOiByZXR1cm4gLV9fa2VybmVsX3Npbih5WzBdLHlbMV0sMSk7Ci0JCWRlZmF1bHQ6Ci0JCQlyZXR1cm4gLV9fa2VybmVsX2Nvcyh5WzBdLHlbMV0pOwotCSAgICB9Ci0JfQotfQpkaWZmIC0tZ2l0IGEvbGlibS9zcmMvc19zaW5mLmMgYi9saWJtL3NyYy9zX3NpbmYuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWRjM2NhZS4uMDAwMDAwMAotLS0gYS9saWJtL3NyYy9zX3NpbmYuYworKysgL2Rldi9udWxsCkBAIC0xLDgyICswLDAgQEAKLS8qIHNfc2luZi5jIC0tIGZsb2F0IHZlcnNpb24gb2Ygc19zaW4uYy4KLSAqIENvbnZlcnNpb24gdG8gZmxvYXQgYnkgSWFuIExhbmNlIFRheWxvciwgQ3lnbnVzIFN1cHBvcnQsIGlhbkBjeWdudXMuY29tLgotICogT3B0aW1pemVkIGJ5IEJydWNlIEQuIEV2YW5zLgotICovCi0KLS8qCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBDb3B5cmlnaHQgKEMpIDE5OTMgYnkgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIERldmVsb3BlZCBhdCBTdW5Qcm8sIGEgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBidXNpbmVzcy4KLSAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKLSAqIHNvZnR3YXJlIGlzIGZyZWVseSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoaXMgbm90aWNlCi0gKiBpcyBwcmVzZXJ2ZWQuCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKi8KLQotI2lmbmRlZiBsaW50Ci1zdGF0aWMgY2hhciByY3NpZFtdID0gIiRGcmVlQlNEOiBzcmMvbGliL21zdW4vc3JjL3Nfc2luZi5jLHYgMS4xNCAyMDA1LzExLzI4IDA2OjE1OjEwIGJkZSBFeHAgJCI7Ci0jZW5kaWYKLQotI2luY2x1ZGUgIm1hdGguaCIKLSNkZWZpbmUJSU5MSU5FX0tFUk5FTF9DT1NERgotI2RlZmluZQlJTkxJTkVfS0VSTkVMX1NJTkRGCi0jaW5jbHVkZSAibWF0aF9wcml2YXRlLmgiCi0jaW5jbHVkZSAia19jb3NmLmMiCi0jaW5jbHVkZSAia19zaW5mLmMiCi0KLS8qIFNtYWxsIG11bHRpcGxlcyBvZiBwaS8yIHJvdW5kZWQgdG8gZG91YmxlIHByZWNpc2lvbi4gKi8KLXN0YXRpYyBjb25zdCBkb3VibGUKLXMxcGlvMiA9IDEqTV9QSV8yLAkJCS8qIDB4M0ZGOTIxRkIsIDB4NTQ0NDJEMTggKi8KLXMycGlvMiA9IDIqTV9QSV8yLAkJCS8qIDB4NDAwOTIxRkIsIDB4NTQ0NDJEMTggKi8KLXMzcGlvMiA9IDMqTV9QSV8yLAkJCS8qIDB4NDAxMkQ5N0MsIDB4N0YzMzIxRDIgKi8KLXM0cGlvMiA9IDQqTV9QSV8yOwkJCS8qIDB4NDAxOTIxRkIsIDB4NTQ0NDJEMTggKi8KLQotZmxvYXQKLXNpbmYoZmxvYXQgeCkKLXsKLQlmbG9hdCB5WzJdOwotCWludDMyX3QgbiwgaHgsIGl4OwotCi0JR0VUX0ZMT0FUX1dPUkQoaHgseCk7Ci0JaXggPSBoeCAmIDB4N2ZmZmZmZmY7Ci0KLQlpZihpeCA8PSAweDNmNDkwZmRhKSB7CQkvKiB8eHwgfjw9IHBpLzQgKi8KLQkgICAgaWYoaXg8MHgzOTgwMDAwMCkJCS8qIHx4fCA8IDIqKi0xMiAqLwotCQlpZigoKGludCl4KT09MCkgcmV0dXJuIHg7CS8qIHggd2l0aCBpbmV4YWN0IGlmIHggIT0gMCAqLwotCSAgICByZXR1cm4gX19rZXJuZWxfc2luZGYoeCk7Ci0JfQotCWlmKGl4PD0weDQwN2I1M2QxKSB7CQkvKiB8eHwgfjw9IDUqcGkvNCAqLwotCSAgICBpZihpeDw9MHg0MDE2Y2JlMykgewkvKiB8eHwgfjw9IDNwaS80ICovCi0JCWlmKGh4PjApCi0JCSAgICByZXR1cm4gX19rZXJuZWxfY29zZGYoeCAtIHMxcGlvMik7Ci0JCWVsc2UKLQkJICAgIHJldHVybiAtX19rZXJuZWxfY29zZGYoeCArIHMxcGlvMik7Ci0JICAgIH0gZWxzZQotCQlyZXR1cm4gX19rZXJuZWxfc2luZGYoKGh4ID4gMCA/IHMycGlvMiA6IC1zMnBpbzIpIC0geCk7Ci0JfQotCWlmKGl4PD0weDQwZTIzMWQ1KSB7CQkvKiB8eHwgfjw9IDkqcGkvNCAqLwotCSAgICBpZihpeDw9MHg0MGFmZWRkZikgewkvKiB8eHwgfjw9IDcqcGkvNCAqLwotCQlpZihoeD4wKQotCQkgICAgcmV0dXJuIC1fX2tlcm5lbF9jb3NkZih4IC0gczNwaW8yKTsKLQkJZWxzZQotCQkgICAgcmV0dXJuIF9fa2VybmVsX2Nvc2RmKHggKyBzM3BpbzIpOwotCSAgICB9IGVsc2UKLQkJcmV0dXJuIF9fa2VybmVsX3NpbmRmKHggKyAoaHggPiAwID8gLXM0cGlvMiA6IHM0cGlvMikpOwotCX0KLQotICAgIC8qIHNpbihJbmYgb3IgTmFOKSBpcyBOYU4gKi8KLQllbHNlIGlmIChpeD49MHg3ZjgwMDAwMCkgcmV0dXJuIHgteDsKLQotICAgIC8qIGdlbmVyYWwgYXJndW1lbnQgcmVkdWN0aW9uIG5lZWRlZCAqLwotCWVsc2UgewotCSAgICBuID0gX19pZWVlNzU0X3JlbV9waW8yZih4LHkpOwotCSAgICBzd2l0Y2gobiYzKSB7Ci0JCWNhc2UgMDogcmV0dXJuICBfX2tlcm5lbF9zaW5kZigoZG91YmxlKXlbMF0reVsxXSk7Ci0JCWNhc2UgMTogcmV0dXJuICBfX2tlcm5lbF9jb3NkZigoZG91YmxlKXlbMF0reVsxXSk7Ci0JCWNhc2UgMjogcmV0dXJuICBfX2tlcm5lbF9zaW5kZigtKGRvdWJsZSl5WzBdLXlbMV0pOwotCQlkZWZhdWx0OgotCQkJcmV0dXJuIC1fX2tlcm5lbF9jb3NkZigoZG91YmxlKXlbMF0reVsxXSk7Ci0JICAgIH0KLQl9Ci19CmRpZmYgLS1naXQgYS9saWJtL3NyYy9zX3Rhbi5jIGIvbGlibS9zcmMvc190YW4uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2YwYjRhMC4uMDAwMDAwMAotLS0gYS9saWJtL3NyYy9zX3Rhbi5jCisrKyAvZGV2L251bGwKQEAgLTEsNzYgKzAsMCBAQAotLyogQCgjKXNfdGFuLmMgNS4xIDkzLzA5LzI0ICovCi0vKgotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogQ29weXJpZ2h0IChDKSAxOTkzIGJ5IFN1biBNaWNyb3N5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBEZXZlbG9wZWQgYXQgU3VuUHJvLCBhIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gYnVzaW5lc3MuCi0gKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCi0gKiBzb2Z0d2FyZSBpcyBmcmVlbHkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGlzIG5vdGljZQotICogaXMgcHJlc2VydmVkLgotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICovCi0KLSNpZm5kZWYgbGludAotc3RhdGljIGNoYXIgcmNzaWRbXSA9ICIkRnJlZUJTRDogc3JjL2xpYi9tc3VuL3NyYy9zX3Rhbi5jLHYgMS4xMCAyMDA1LzExLzAyIDE0OjAxOjQ1IGJkZSBFeHAgJCI7Ci0jZW5kaWYKLQotLyogdGFuKHgpCi0gKiBSZXR1cm4gdGFuZ2VudCBmdW5jdGlvbiBvZiB4LgotICoKLSAqIGtlcm5lbCBmdW5jdGlvbjoKLSAqCV9fa2VybmVsX3RhbgkJLi4uIHRhbmdlbnQgZnVuY3Rpb24gb24gWy1waS80LHBpLzRdCi0gKglfX2llZWU3NTRfcmVtX3BpbzIJLi4uIGFyZ3VtZW50IHJlZHVjdGlvbiByb3V0aW5lCi0gKgotICogTWV0aG9kLgotICogICAgICBMZXQgUyxDIGFuZCBUIGRlbm90ZSB0aGUgc2luLCBjb3MgYW5kIHRhbiByZXNwZWN0aXZlbHkgb24KLSAqCVstUEkvNCwgK1BJLzRdLiBSZWR1Y2UgdGhlIGFyZ3VtZW50IHggdG8geTEreTIgPSB4LWsqcGkvMgotICoJaW4gWy1waS80ICwgK3BpLzRdLCBhbmQgbGV0IG4gPSBrIG1vZCA0LgotICoJV2UgaGF2ZQotICoKLSAqICAgICAgICAgIG4gICAgICAgIHNpbih4KSAgICAgIGNvcyh4KSAgICAgICAgdGFuKHgpCi0gKiAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICoJICAgIDAJICAgICAgIFMJICAgQwkJIFQKLSAqCSAgICAxCSAgICAgICBDCSAgLVMJCS0xL1QKLSAqCSAgICAyCSAgICAgIC1TCSAgLUMJCSBUCi0gKgkgICAgMwkgICAgICAtQwkgICBTCQktMS9UCi0gKiAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICoKLSAqIFNwZWNpYWwgY2FzZXM6Ci0gKiAgICAgIExldCB0cmlnIGJlIGFueSBvZiBzaW4sIGNvcywgb3IgdGFuLgotICogICAgICB0cmlnKCstSU5GKSAgaXMgTmFOLCB3aXRoIHNpZ25hbHM7Ci0gKiAgICAgIHRyaWcoTmFOKSAgICBpcyB0aGF0IE5hTjsKLSAqCi0gKiBBY2N1cmFjeToKLSAqCVRSSUcoeCkgcmV0dXJucyB0cmlnKHgpIG5lYXJseSByb3VuZGVkCi0gKi8KLQotI2luY2x1ZGUgIm1hdGguaCIKLSNpbmNsdWRlICJtYXRoX3ByaXZhdGUuaCIKLQotZG91YmxlCi10YW4oZG91YmxlIHgpCi17Ci0JZG91YmxlIHlbMl0sej0wLjA7Ci0JaW50MzJfdCBuLCBpeDsKLQotICAgIC8qIEhpZ2ggd29yZCBvZiB4LiAqLwotCUdFVF9ISUdIX1dPUkQoaXgseCk7Ci0KLSAgICAvKiB8eHwgfjwgcGkvNCAqLwotCWl4ICY9IDB4N2ZmZmZmZmY7Ci0JaWYoaXggPD0gMHgzZmU5MjFmYikgewotCSAgICBpZihpeDwweDNlMzAwMDAwKQkJCS8qIHggPCAyKiotMjggKi8KLQkJaWYoKGludCl4PT0wKSByZXR1cm4geDsJCS8qIGdlbmVyYXRlIGluZXhhY3QgKi8KLQkgICAgcmV0dXJuIF9fa2VybmVsX3Rhbih4LHosMSk7Ci0JfQotCi0gICAgLyogdGFuKEluZiBvciBOYU4pIGlzIE5hTiAqLwotCWVsc2UgaWYgKGl4Pj0weDdmZjAwMDAwKSByZXR1cm4geC14OwkJLyogTmFOICovCi0KLSAgICAvKiBhcmd1bWVudCByZWR1Y3Rpb24gbmVlZGVkICovCi0JZWxzZSB7Ci0JICAgIG4gPSBfX2llZWU3NTRfcmVtX3BpbzIoeCx5KTsKLQkgICAgcmV0dXJuIF9fa2VybmVsX3Rhbih5WzBdLHlbMV0sMS0oKG4mMSk8PDEpKTsgLyogICAxIC0tIG4gZXZlbgotCQkJCQkJCS0xIC0tIG4gb2RkICovCi0JfQotfQpkaWZmIC0tZ2l0IGEvbGlibS9zcmMvc190YW5mLmMgYi9saWJtL3NyYy9zX3RhbmYuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2U4MGQ2OS4uMDAwMDAwMAotLS0gYS9saWJtL3NyYy9zX3RhbmYuYworKysgL2Rldi9udWxsCkBAIC0xLDY5ICswLDAgQEAKLS8qIHNfdGFuZi5jIC0tIGZsb2F0IHZlcnNpb24gb2Ygc190YW4uYy4KLSAqIENvbnZlcnNpb24gdG8gZmxvYXQgYnkgSWFuIExhbmNlIFRheWxvciwgQ3lnbnVzIFN1cHBvcnQsIGlhbkBjeWdudXMuY29tLgotICogT3B0aW1pemVkIGJ5IEJydWNlIEQuIEV2YW5zLgotICovCi0KLS8qCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBDb3B5cmlnaHQgKEMpIDE5OTMgYnkgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIERldmVsb3BlZCBhdCBTdW5Qcm8sIGEgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBidXNpbmVzcy4KLSAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKLSAqIHNvZnR3YXJlIGlzIGZyZWVseSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoaXMgbm90aWNlCi0gKiBpcyBwcmVzZXJ2ZWQuCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKi8KLQotI2lmbmRlZiBsaW50Ci1zdGF0aWMgY2hhciByY3NpZFtdID0gIiRGcmVlQlNEOiBzcmMvbGliL21zdW4vc3JjL3NfdGFuZi5jLHYgMS4xNCAyMDA1LzExLzI4IDA1OjM1OjMyIGJkZSBFeHAgJCI7Ci0jZW5kaWYKLQotI2luY2x1ZGUgIm1hdGguaCIKLSNkZWZpbmUJSU5MSU5FX0tFUk5FTF9UQU5ERgotI2luY2x1ZGUgIm1hdGhfcHJpdmF0ZS5oIgotI2luY2x1ZGUgImtfdGFuZi5jIgotCi0vKiBTbWFsbCBtdWx0aXBsZXMgb2YgcGkvMiByb3VuZGVkIHRvIGRvdWJsZSBwcmVjaXNpb24uICovCi1zdGF0aWMgY29uc3QgZG91YmxlCi10MXBpbzIgPSAxKk1fUElfMiwJCQkvKiAweDNGRjkyMUZCLCAweDU0NDQyRDE4ICovCi10MnBpbzIgPSAyKk1fUElfMiwJCQkvKiAweDQwMDkyMUZCLCAweDU0NDQyRDE4ICovCi10M3BpbzIgPSAzKk1fUElfMiwJCQkvKiAweDQwMTJEOTdDLCAweDdGMzMyMUQyICovCi10NHBpbzIgPSA0Kk1fUElfMjsJCQkvKiAweDQwMTkyMUZCLCAweDU0NDQyRDE4ICovCi0KLWZsb2F0Ci10YW5mKGZsb2F0IHgpCi17Ci0JZmxvYXQgeVsyXTsKLQlpbnQzMl90IG4sIGh4LCBpeDsKLQotCUdFVF9GTE9BVF9XT1JEKGh4LHgpOwotCWl4ID0gaHggJiAweDdmZmZmZmZmOwotCi0JaWYoaXggPD0gMHgzZjQ5MGZkYSkgewkJLyogfHh8IH48PSBwaS80ICovCi0JICAgIGlmKGl4PDB4Mzk4MDAwMDApCQkvKiB8eHwgPCAyKiotMTIgKi8KLQkJaWYoKChpbnQpeCk9PTApIHJldHVybiB4OwkvKiB4IHdpdGggaW5leGFjdCBpZiB4ICE9IDAgKi8KLQkgICAgcmV0dXJuIF9fa2VybmVsX3RhbmRmKHgsMSk7Ci0JfQotCWlmKGl4PD0weDQwN2I1M2QxKSB7CQkvKiB8eHwgfjw9IDUqcGkvNCAqLwotCSAgICBpZihpeDw9MHg0MDE2Y2JlMykJCS8qIHx4fCB+PD0gM3BpLzQgKi8KLQkJcmV0dXJuIF9fa2VybmVsX3RhbmRmKHggKyAoaHg+MCA/IC10MXBpbzIgOiB0MXBpbzIpLCAtMSk7Ci0JICAgIGVsc2UKLQkJcmV0dXJuIF9fa2VybmVsX3RhbmRmKHggKyAoaHg+MCA/IC10MnBpbzIgOiB0MnBpbzIpLCAxKTsKLQl9Ci0JaWYoaXg8PTB4NDBlMjMxZDUpIHsJCS8qIHx4fCB+PD0gOSpwaS80ICovCi0JICAgIGlmKGl4PD0weDQwYWZlZGRmKQkJLyogfHh8IH48PSA3KnBpLzQgKi8KLQkJcmV0dXJuIF9fa2VybmVsX3RhbmRmKHggKyAoaHg+MCA/IC10M3BpbzIgOiB0M3BpbzIpLCAtMSk7Ci0JICAgIGVsc2UKLQkJcmV0dXJuIF9fa2VybmVsX3RhbmRmKHggKyAoaHg+MCA/IC10NHBpbzIgOiB0NHBpbzIpLCAxKTsKLQl9Ci0KLSAgICAvKiB0YW4oSW5mIG9yIE5hTikgaXMgTmFOICovCi0JZWxzZSBpZiAoaXg+PTB4N2Y4MDAwMDApIHJldHVybiB4LXg7Ci0KLSAgICAvKiBnZW5lcmFsIGFyZ3VtZW50IHJlZHVjdGlvbiBuZWVkZWQgKi8KLQllbHNlIHsKLQkgICAgbiA9IF9faWVlZTc1NF9yZW1fcGlvMmYoeCx5KTsKLQkgICAgLyogaW50ZWdlciBwYXJhbWV0ZXI6IDEgLS0gbiBldmVuOyAtMSAtLSBuIG9kZCAqLwotCSAgICByZXR1cm4gX19rZXJuZWxfdGFuZGYoKGRvdWJsZSl5WzBdK3lbMV0sMS0oKG4mMSk8PDEpKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9saWJtL3NyYy9zX3RhbmguYyBiL2xpYm0vc3JjL3NfdGFuaC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NzI5MTQ1Li4wMDAwMDAwCi0tLSBhL2xpYm0vc3JjL3NfdGFuaC5jCisrKyAvZGV2L251bGwKQEAgLTEsNzggKzAsMCBAQAotLyogQCgjKXNfdGFuaC5jIDUuMSA5My8wOS8yNCAqLwotLyoKLSAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIENvcHlyaWdodCAoQykgMTk5MyBieSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogRGV2ZWxvcGVkIGF0IFN1blBybywgYSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGJ1c2luZXNzLgotICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcwotICogc29mdHdhcmUgaXMgZnJlZWx5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhpcyBub3RpY2UKLSAqIGlzIHByZXNlcnZlZC4KLSAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqLwotCi0jaWZuZGVmIGxpbnQKLXN0YXRpYyBjaGFyIHJjc2lkW10gPSAiJEZyZWVCU0Q6IHNyYy9saWIvbXN1bi9zcmMvc190YW5oLmMsdiAxLjcgMjAwMi8wNS8yOCAxODoxNTowNCBhbGZyZWQgRXhwICQiOwotI2VuZGlmCi0KLS8qIFRhbmgoeCkKLSAqIFJldHVybiB0aGUgSHlwZXJib2xpYyBUYW5nZW50IG9mIHgKLSAqCi0gKiBNZXRob2QgOgotICoJCQkJICAgICAgIHggICAgLXgKLSAqCQkJCSAgICAgIGUgIC0gZQotICoJMC4gdGFuaCh4KSBpcyBkZWZpbmVkIHRvIGJlIC0tLS0tLS0tLS0tCi0gKgkJCQkgICAgICAgeCAgICAteAotICoJCQkJICAgICAgZSAgKyBlCi0gKgkxLiByZWR1Y2UgeCB0byBub24tbmVnYXRpdmUgYnkgdGFuaCgteCkgPSAtdGFuaCh4KS4KLSAqCTIuICAwICAgICAgPD0geCA8PSAyKiotNTUgOiB0YW5oKHgpIDo9IHgqKG9uZSt4KQotICoJCQkJCSAgICAgICAgLXQKLSAqCSAgICAyKiotNTUgPCAgeCA8PSAgMSAgICAgOiB0YW5oKHgpIDo9IC0tLS0tOyB0ID0gZXhwbTEoLTJ4KQotICoJCQkJCSAgICAgICB0ICsgMgotICoJCQkJCQkgICAgIDIKLSAqCSAgICAxICAgICAgPD0geCA8PSAgMjIuMCAgOiB0YW5oKHgpIDo9IDEtICAtLS0tLSA7IHQ9ZXhwbTEoMngpCi0gKgkJCQkJCSAgIHQgKyAyCi0gKgkgICAgMjIuMCAgIDwgIHggPD0gSU5GICAgIDogdGFuaCh4KSA6PSAxLgotICoKLSAqIFNwZWNpYWwgY2FzZXM6Ci0gKgl0YW5oKE5hTikgaXMgTmFOOwotICoJb25seSB0YW5oKDApPTAgaXMgZXhhY3QgZm9yIGZpbml0ZSBhcmd1bWVudC4KLSAqLwotCi0jaW5jbHVkZSAibWF0aC5oIgotI2luY2x1ZGUgIm1hdGhfcHJpdmF0ZS5oIgotCi1zdGF0aWMgY29uc3QgZG91YmxlIG9uZT0xLjAsIHR3bz0yLjAsIHRpbnkgPSAxLjBlLTMwMDsKLQotZG91YmxlCi10YW5oKGRvdWJsZSB4KQotewotCWRvdWJsZSB0LHo7Ci0JaW50MzJfdCBqeCxpeDsKLQotICAgIC8qIEhpZ2ggd29yZCBvZiB8eHwuICovCi0JR0VUX0hJR0hfV09SRChqeCx4KTsKLQlpeCA9IGp4JjB4N2ZmZmZmZmY7Ci0KLSAgICAvKiB4IGlzIElORiBvciBOYU4gKi8KLQlpZihpeD49MHg3ZmYwMDAwMCkgewotCSAgICBpZiAoang+PTApIHJldHVybiBvbmUveCtvbmU7ICAgIC8qIHRhbmgoKy1pbmYpPSstMSAqLwotCSAgICBlbHNlICAgICAgIHJldHVybiBvbmUveC1vbmU7ICAgIC8qIHRhbmgoTmFOKSA9IE5hTiAqLwotCX0KLQotICAgIC8qIHx4fCA8IDIyICovCi0JaWYgKGl4IDwgMHg0MDM2MDAwMCkgewkJLyogfHh8PDIyICovCi0JICAgIGlmIChpeDwweDNjODAwMDAwKSAJCS8qIHx4fDwyKiotNTUgKi8KLQkJcmV0dXJuIHgqKG9uZSt4KTsgICAgCS8qIHRhbmgoc21hbGwpID0gc21hbGwgKi8KLQkgICAgaWYgKGl4Pj0weDNmZjAwMDAwKSB7CS8qIHx4fD49MSAgKi8KLQkJdCA9IGV4cG0xKHR3bypmYWJzKHgpKTsKLQkJeiA9IG9uZSAtIHR3by8odCt0d28pOwotCSAgICB9IGVsc2UgewotCSAgICAgICAgdCA9IGV4cG0xKC10d28qZmFicyh4KSk7Ci0JICAgICAgICB6PSAtdC8odCt0d28pOwotCSAgICB9Ci0gICAgLyogfHh8ID4gMjIsIHJldHVybiArLTEgKi8KLQl9IGVsc2UgewotCSAgICB6ID0gb25lIC0gdGlueTsJCS8qIHJhaXNlZCBpbmV4YWN0IGZsYWcgKi8KLQl9Ci0JcmV0dXJuIChqeD49MCk/IHo6IC16OwotfQpkaWZmIC0tZ2l0IGEvbGlibS9zcmMvc190YW5oZi5jIGIvbGlibS9zcmMvc190YW5oZi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYWNhNmNjLi4wMDAwMDAwCi0tLSBhL2xpYm0vc3JjL3NfdGFuaGYuYworKysgL2Rldi9udWxsCkBAIC0xLDU2ICswLDAgQEAKLS8qIHNfdGFuaGYuYyAtLSBmbG9hdCB2ZXJzaW9uIG9mIHNfdGFuaC5jLgotICogQ29udmVyc2lvbiB0byBmbG9hdCBieSBJYW4gTGFuY2UgVGF5bG9yLCBDeWdudXMgU3VwcG9ydCwgaWFuQGN5Z251cy5jb20uCi0gKi8KLQotLyoKLSAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIENvcHlyaWdodCAoQykgMTk5MyBieSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogRGV2ZWxvcGVkIGF0IFN1blBybywgYSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGJ1c2luZXNzLgotICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcwotICogc29mdHdhcmUgaXMgZnJlZWx5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhpcyBub3RpY2UKLSAqIGlzIHByZXNlcnZlZC4KLSAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqLwotCi0jaWZuZGVmIGxpbnQKLXN0YXRpYyBjaGFyIHJjc2lkW10gPSAiJEZyZWVCU0Q6IHNyYy9saWIvbXN1bi9zcmMvc190YW5oZi5jLHYgMS44IDIwMDUvMTIvMTEgMTE6NDA6NTUgYmRlIEV4cCAkIjsKLSNlbmRpZgotCi0jaW5jbHVkZSAibWF0aC5oIgotI2luY2x1ZGUgIm1hdGhfcHJpdmF0ZS5oIgotCi1zdGF0aWMgY29uc3QgZmxvYXQgb25lPTEuMCwgdHdvPTIuMCwgdGlueSA9IDEuMGUtMzAsIGh1Z2UgPSAxLjBlMzA7Ci1mbG9hdAotdGFuaGYoZmxvYXQgeCkKLXsKLQlmbG9hdCB0LHo7Ci0JaW50MzJfdCBqeCxpeDsKLQotCUdFVF9GTE9BVF9XT1JEKGp4LHgpOwotCWl4ID0gangmMHg3ZmZmZmZmZjsKLQotICAgIC8qIHggaXMgSU5GIG9yIE5hTiAqLwotCWlmKGl4Pj0weDdmODAwMDAwKSB7Ci0JICAgIGlmIChqeD49MCkgcmV0dXJuIG9uZS94K29uZTsgICAgLyogdGFuaCgrLWluZik9Ky0xICovCi0JICAgIGVsc2UgICAgICAgcmV0dXJuIG9uZS94LW9uZTsgICAgLyogdGFuaChOYU4pID0gTmFOICovCi0JfQotCi0gICAgLyogfHh8IDwgOSAqLwotCWlmIChpeCA8IDB4NDExMDAwMDApIHsJCS8qIHx4fDw5ICovCi0JICAgIGlmIChpeDwweDM5ODAwMDAwKSB7CS8qIHx4fDwyKiotMTIgKi8KLQkJaWYoaHVnZSt4Pm9uZSkgcmV0dXJuIHg7IC8qIHRhbmgodGlueSkgPSB0aW55IHdpdGggaW5leGFjdCAqLwotCSAgICB9Ci0JICAgIGlmIChpeD49MHgzZjgwMDAwMCkgewkvKiB8eHw+PTEgICovCi0JCXQgPSBleHBtMWYodHdvKmZhYnNmKHgpKTsKLQkJeiA9IG9uZSAtIHR3by8odCt0d28pOwotCSAgICB9IGVsc2UgewotCSAgICAgICAgdCA9IGV4cG0xZigtdHdvKmZhYnNmKHgpKTsKLQkgICAgICAgIHo9IC10Lyh0K3R3byk7Ci0JICAgIH0KLSAgICAvKiB8eHwgPj0gOSwgcmV0dXJuICstMSAqLwotCX0gZWxzZSB7Ci0JICAgIHogPSBvbmUgLSB0aW55OwkJLyogcmFpc2UgaW5leGFjdCBmbGFnICovCi0JfQotCXJldHVybiAoang+PTApPyB6OiAtejsKLX0KZGlmZiAtLWdpdCBhL2xpYm0vc3JjL3NfdHJ1bmMuYyBiL2xpYm0vc3JjL3NfdHJ1bmMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDUyODdlYi4uMDAwMDAwMAotLS0gYS9saWJtL3NyYy9zX3RydW5jLmMKKysrIC9kZXYvbnVsbApAQCAtMSw2MSArMCwwIEBACi0vKiBAKCMpc19mbG9vci5jIDUuMSA5My8wOS8yNCAqLwotLyoKLSAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIENvcHlyaWdodCAoQykgMTk5MyBieSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogRGV2ZWxvcGVkIGF0IFN1blBybywgYSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGJ1c2luZXNzLgotICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcwotICogc29mdHdhcmUgaXMgZnJlZWx5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhpcyBub3RpY2UKLSAqIGlzIHByZXNlcnZlZC4KLSAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqLwotCi0jaW5jbHVkZSA8c3lzL2NkZWZzLmg+Ci0vKiBfX0ZCU0RJRCgiJEZyZWVCU0Q6IHNyYy9saWIvbXN1bi9zcmMvc190cnVuYy5jLHYgMS4xIDIwMDQvMDYvMjAgMDk6MjU6NDMgZGFzIEV4cCAkIik7ICovCi0KLS8qCi0gKiB0cnVuYyh4KQotICogUmV0dXJuIHggcm91bmRlZCB0b3dhcmQgMCB0byBpbnRlZ3JhbCB2YWx1ZQotICogTWV0aG9kOgotICoJQml0IHR3aWRkbGluZy4KLSAqIEV4Y2VwdGlvbjoKLSAqCUluZXhhY3QgZmxhZyByYWlzZWQgaWYgeCBub3QgZXF1YWwgdG8gdHJ1bmMoeCkuCi0gKi8KLQotI2luY2x1ZGUgIm1hdGguaCIKLSNpbmNsdWRlICJtYXRoX3ByaXZhdGUuaCIKLQotc3RhdGljIGNvbnN0IGRvdWJsZSBodWdlID0gMS4wZTMwMDsKLQotZG91YmxlCi10cnVuYyhkb3VibGUgeCkKLXsKLQlpbnQzMl90IGkwLGkxLGowOwotCXVfaW50MzJfdCBpLGo7Ci0JRVhUUkFDVF9XT1JEUyhpMCxpMSx4KTsKLQlqMCA9ICgoaTA+PjIwKSYweDdmZiktMHgzZmY7Ci0JaWYoajA8MjApIHsKLQkgICAgaWYoajA8MCkgeyAJLyogcmFpc2UgaW5leGFjdCBpZiB4ICE9IDAgKi8KLQkJaWYoaHVnZSt4PjAuMCkgey8qIHx4fDwxLCBzbyByZXR1cm4gMCpzaWduKHgpICovCi0JCSAgICBpMCAmPSAweDgwMDAwMDAwVTsKLQkJICAgIGkxID0gMDsKLQkJfQotCSAgICB9IGVsc2UgewotCQlpID0gKDB4MDAwZmZmZmYpPj5qMDsKLQkJaWYoKChpMCZpKXxpMSk9PTApIHJldHVybiB4OyAvKiB4IGlzIGludGVncmFsICovCi0JCWlmKGh1Z2UreD4wLjApIHsJLyogcmFpc2UgaW5leGFjdCBmbGFnICovCi0JCSAgICBpMCAmPSAofmkpOyBpMT0wOwotCQl9Ci0JICAgIH0KLQl9IGVsc2UgaWYgKGowPjUxKSB7Ci0JICAgIGlmKGowPT0weDQwMCkgcmV0dXJuIHgreDsJLyogaW5mIG9yIE5hTiAqLwotCSAgICBlbHNlIHJldHVybiB4OwkJLyogeCBpcyBpbnRlZ3JhbCAqLwotCX0gZWxzZSB7Ci0JICAgIGkgPSAoKHVfaW50MzJfdCkoMHhmZmZmZmZmZikpPj4oajAtMjApOwotCSAgICBpZigoaTEmaSk9PTApIHJldHVybiB4OwkvKiB4IGlzIGludGVncmFsICovCi0JICAgIGlmKGh1Z2UreD4wLjApCQkvKiByYWlzZSBpbmV4YWN0IGZsYWcgKi8KLQkJaTEgJj0gKH5pKTsKLQl9Ci0JSU5TRVJUX1dPUkRTKHgsaTAsaTEpOwotCXJldHVybiB4OwotfQpkaWZmIC0tZ2l0IGEvbGlibS9zcmMvc190cnVuY2YuYyBiL2xpYm0vc3JjL3NfdHJ1bmNmLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg2YjcyNDcuLjAwMDAwMDAKLS0tIGEvbGlibS9zcmMvc190cnVuY2YuYworKysgL2Rldi9udWxsCkBAIC0xLDUzICswLDAgQEAKLS8qIEAoIylzX2Zsb29yLmMgNS4xIDkzLzA5LzI0ICovCi0vKgotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogQ29weXJpZ2h0IChDKSAxOTkzIGJ5IFN1biBNaWNyb3N5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBEZXZlbG9wZWQgYXQgU3VuUHJvLCBhIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gYnVzaW5lc3MuCi0gKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCi0gKiBzb2Z0d2FyZSBpcyBmcmVlbHkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGlzIG5vdGljZQotICogaXMgcHJlc2VydmVkLgotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICovCi0KLSNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KLS8qIF9fRkJTRElEKCIkRnJlZUJTRDogc3JjL2xpYi9tc3VuL3NyYy9zX3RydW5jZi5jLHYgMS4xIDIwMDQvMDYvMjAgMDk6MjU6NDMgZGFzIEV4cCAkIik7ICovCi0KLS8qCi0gKiB0cnVuY2YoeCkKLSAqIFJldHVybiB4IHJvdW5kZWQgdG93YXJkIDAgdG8gaW50ZWdyYWwgdmFsdWUKLSAqIE1ldGhvZDoKLSAqCUJpdCB0d2lkZGxpbmcuCi0gKiBFeGNlcHRpb246Ci0gKglJbmV4YWN0IGZsYWcgcmFpc2VkIGlmIHggbm90IGVxdWFsIHRvIHRydW5jZih4KS4KLSAqLwotCi0jaW5jbHVkZSAibWF0aC5oIgotI2luY2x1ZGUgIm1hdGhfcHJpdmF0ZS5oIgotCi1zdGF0aWMgY29uc3QgZmxvYXQgaHVnZSA9IDEuMGUzMEY7Ci0KLWZsb2F0Ci10cnVuY2YoZmxvYXQgeCkKLXsKLQlpbnQzMl90IGkwLGowOwotCXVfaW50MzJfdCBpOwotCUdFVF9GTE9BVF9XT1JEKGkwLHgpOwotCWowID0gKChpMD4+MjMpJjB4ZmYpLTB4N2Y7Ci0JaWYoajA8MjMpIHsKLQkgICAgaWYoajA8MCkgeyAJLyogcmFpc2UgaW5leGFjdCBpZiB4ICE9IDAgKi8KLQkJaWYoaHVnZSt4PjAuMEYpCQkvKiB8eHw8MSwgc28gcmV0dXJuIDAqc2lnbih4KSAqLwotCQkgICAgaTAgJj0gMHg4MDAwMDAwMDsKLQkgICAgfSBlbHNlIHsKLQkJaSA9ICgweDAwN2ZmZmZmKT4+ajA7Ci0JCWlmKChpMCZpKT09MCkgcmV0dXJuIHg7IC8qIHggaXMgaW50ZWdyYWwgKi8KLQkJaWYoaHVnZSt4PjAuMEYpCQkvKiByYWlzZSBpbmV4YWN0IGZsYWcgKi8KLQkJICAgIGkwICY9ICh+aSk7Ci0JICAgIH0KLQl9IGVsc2UgewotCSAgICBpZihqMD09MHg4MCkgcmV0dXJuIHgreDsJLyogaW5mIG9yIE5hTiAqLwotCSAgICBlbHNlIHJldHVybiB4OwkJLyogeCBpcyBpbnRlZ3JhbCAqLwotCX0KLQlTRVRfRkxPQVRfV09SRCh4LGkwKTsKLQlyZXR1cm4geDsKLX0KZGlmZiAtLWdpdCBhL2xpYm0vc3JjL3NfdHJ1bmNsLmMgYi9saWJtL3NyYy9zX3RydW5jbC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzOTkyNmE1Li4wMDAwMDAwCi0tLSBhL2xpYm0vc3JjL3NfdHJ1bmNsLmMKKysrIC9kZXYvbnVsbApAQCAtMSw2OCArMCwwIEBACi0vKgotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICogQ29weXJpZ2h0IChDKSAxOTkzIGJ5IFN1biBNaWNyb3N5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBEZXZlbG9wZWQgYXQgU3VuUHJvLCBhIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gYnVzaW5lc3MuCi0gKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCi0gKiBzb2Z0d2FyZSBpcyBmcmVlbHkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGlzIG5vdGljZQotICogaXMgcHJlc2VydmVkLgotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICoKLSAqIEZyb206IEAoIylzX2Zsb29yLmMgNS4xIDkzLzA5LzI0Ci0gKi8KLQotI2lmbmRlZiBsaW50Ci1zdGF0aWMgY2hhciByY3NpZFtdID0gIiRGcmVlQlNEOiBzcmMvbGliL21zdW4vc3JjL3NfdHJ1bmNsLmMsdiAxLjQgMjAwNS8wNC8yOCAxOTo0NTo1NSBzdGVmYW5mIEV4cCAkIjsKLSNlbmRpZgotCi0vKgotICogdHJ1bmNsKHgpCi0gKiBSZXR1cm4geCByb3VuZGVkIHRvd2FyZCAwIHRvIGludGVncmFsIHZhbHVlCi0gKiBNZXRob2Q6Ci0gKglCaXQgdHdpZGRsaW5nLgotICogRXhjZXB0aW9uOgotICoJSW5leGFjdCBmbGFnIHJhaXNlZCBpZiB4IG5vdCBlcXVhbCB0byB0cnVuY2woeCkuCi0gKi8KLQotI2luY2x1ZGUgPGZsb2F0Lmg+Ci0jaW5jbHVkZSA8bWF0aC5oPgotI2luY2x1ZGUgPHN0ZGludC5oPgotCi0jaW5jbHVkZSAiZnBtYXRoLmgiCi0KLSNpZmRlZiBMREJMX0lNUExJQ0lUX05CSVQKLSNkZWZpbmUJTUFOSF9TSVpFCShMREJMX01BTkhfU0laRSArIDEpCi0jZWxzZQotI2RlZmluZQlNQU5IX1NJWkUJTERCTF9NQU5IX1NJWkUKLSNlbmRpZgotCi1zdGF0aWMgY29uc3QgbG9uZyBkb3VibGUgaHVnZSA9IDEuMGUzMDA7Ci0KLWxvbmcgZG91YmxlCi10cnVuY2wobG9uZyBkb3VibGUgeCkKLXsKLQl1bmlvbiBJRUVFbDJiaXRzIHUgPSB7IC5lID0geCB9OwotCWludCBlID0gdS5iaXRzLmV4cCAtIExEQkxfTUFYX0VYUCArIDE7Ci0KLQlpZiAoZSA8IE1BTkhfU0laRSAtIDEpIHsKLQkJaWYgKGUgPCAwKSB7CQkJLyogcmFpc2UgaW5leGFjdCBpZiB4ICE9IDAgKi8KLQkJCWlmIChodWdlICsgeCA+IDAuMCkKLQkJCQl1LmUgPSAwLjA7Ci0JCX0gZWxzZSB7Ci0JCQl1aW50NjRfdCBtID0gKCgxbGx1IDw8IE1BTkhfU0laRSkgLSAxKSA+PiAoZSArIDEpOwotCQkJaWYgKCgodS5iaXRzLm1hbmggJiBtKSB8IHUuYml0cy5tYW5sKSA9PSAwKQotCQkJCXJldHVybiAoeCk7CS8qIHggaXMgaW50ZWdyYWwgKi8KLQkJCWlmIChodWdlICsgeCA+IDAuMCkgewkvKiByYWlzZSBpbmV4YWN0IGZsYWcgKi8KLQkJCQl1LmJpdHMubWFuaCAmPSB+bTsKLQkJCQl1LmJpdHMubWFubCA9IDA7Ci0JCQl9Ci0JCX0KLQl9IGVsc2UgaWYgKGUgPCBMREJMX01BTlRfRElHIC0gMSkgewotCQl1aW50NjRfdCBtID0gKHVpbnQ2NF90KS0xID4+ICg2NCAtIExEQkxfTUFOVF9ESUcgKyBlICsgMSk7Ci0JCWlmICgodS5iaXRzLm1hbmwgJiBtKSA9PSAwKQotCQkJcmV0dXJuICh4KTsJLyogeCBpcyBpbnRlZ3JhbCAqLwotCQlpZiAoaHVnZSArIHggPiAwLjApCQkvKiByYWlzZSBpbmV4YWN0IGZsYWcgKi8KLQkJCXUuYml0cy5tYW5sICY9IH5tOwotCX0KLQlyZXR1cm4gKHUuZSk7Ci19CmRpZmYgLS1naXQgYS9saWJtL3NyYy93X2NhYnMuYyBiL2xpYm0vc3JjL3dfY2Ficy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NzdlNWUwLi4wMDAwMDAwCi0tLSBhL2xpYm0vc3JjL3dfY2Ficy5jCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotLyoKLSAqIGNhYnMoKSB3cmFwcGVyIGZvciBoeXBvdCgpLgotICoKLSAqIFdyaXR0ZW4gYnkgSi5ULiBDb25rbGluLCA8anRjQHdpbXNleS5jb20+Ci0gKiBQbGFjZWQgaW50byB0aGUgUHVibGljIERvbWFpbiwgMTk5NC4KLSAqLwotCi0jaWZuZGVmIGxpbnQKLXN0YXRpYyBjb25zdCBjaGFyIHJjc2lkW10gPQotICAiJEZyZWVCU0Q6IHNyYy9saWIvbXN1bi9zcmMvd19jYWJzLmMsdiAxLjQgMjAwMS8wNi8xMyAxNToxNjozMCBydSBFeHAgJCI7Ci0jZW5kaWYgLyogbm90IGxpbnQgKi8KLQotI2luY2x1ZGUgPGNvbXBsZXguaD4KLSNpbmNsdWRlIDxtYXRoLmg+Ci0KLWRvdWJsZQotY2Ficyh6KQotCWRvdWJsZSBjb21wbGV4IHo7Ci17Ci0JcmV0dXJuIGh5cG90KGNyZWFsKHopLCBjaW1hZyh6KSk7Ci19Ci0KLWRvdWJsZQotel9hYnMoeikKLQlkb3VibGUgY29tcGxleCAqejsKLXsKLQlyZXR1cm4gaHlwb3QoY3JlYWwoKnopLCBjaW1hZygqeikpOwotfQpkaWZmIC0tZ2l0IGEvbGlibS9zcmMvd19jYWJzZi5jIGIvbGlibS9zcmMvd19jYWJzZi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYWMxNTJmLi4wMDAwMDAwCi0tLSBhL2xpYm0vc3JjL3dfY2Fic2YuYworKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLS8qCi0gKiBjYWJzZigpIHdyYXBwZXIgZm9yIGh5cG90ZigpLgotICoKLSAqIFdyaXR0ZW4gYnkgSi5ULiBDb25rbGluLCA8anRjQHdpbXNleS5jb20+Ci0gKiBQbGFjZWQgaW50byB0aGUgUHVibGljIERvbWFpbiwgMTk5NC4KLSAqLwotCi0jaWZuZGVmIGxpbnQKLXN0YXRpYyBjb25zdCBjaGFyIHJjc2lkW10gPQotICAiJEZyZWVCU0Q6IHNyYy9saWIvbXN1bi9zcmMvd19jYWJzZi5jLHYgMS4zIDIwMDEvMDYvMTMgMTU6MTY6MzAgcnUgRXhwICQiOwotI2VuZGlmIC8qIG5vdCBsaW50ICovCi0KLSNpbmNsdWRlIDxjb21wbGV4Lmg+Ci0jaW5jbHVkZSA8bWF0aC5oPgotI2luY2x1ZGUgIm1hdGhfcHJpdmF0ZS5oIgotCi1mbG9hdAotY2Fic2YoeikKLQlmbG9hdCBjb21wbGV4IHo7Ci17Ci0KLQlyZXR1cm4gaHlwb3RmKGNyZWFsZih6KSwgY2ltYWdmKHopKTsKLX0KZGlmZiAtLWdpdCBhL2xpYm0vc3JjL3dfZHJlbWYuYyBiL2xpYm0vc3JjL3dfZHJlbWYuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTgzYWMwZS4uMDAwMDAwMAotLS0gYS9saWJtL3NyYy93X2RyZW1mLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi0vKgotICogZHJlbWYoKSB3cmFwcGVyIGZvciByZW1haW5kZXJmKCkuCi0gKgotICogV3JpdHRlbiBieSBKLlQuIENvbmtsaW4sIDxqdGNAd2ltc2V5LmNvbT4KLSAqIFBsYWNlZCBpbnRvIHRoZSBQdWJsaWMgRG9tYWluLCAxOTk0LgotICovCi0vKiAkRnJlZUJTRDogc3JjL2xpYi9tc3VuL3NyYy93X2RyZW1mLmMsdiAxLjMgMjAwNC8wNy8yOCAwNTo1MzoxOCBrYW4gRXhwICQgKi8KLQotI2luY2x1ZGUgIm1hdGguaCIKLSNpbmNsdWRlICJtYXRoX3ByaXZhdGUuaCIKLQotZmxvYXQKLWRyZW1mKGZsb2F0IHgsIGZsb2F0IHkpCi17Ci0JcmV0dXJuIHJlbWFpbmRlcmYoeCwgeSk7Ci19CmRpZmYgLS1naXQgYS9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vYnNkc3JjL2JfZXhwLmMgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vYnNkc3JjL2JfZXhwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQwMDk5MgotLS0gL2Rldi9udWxsCisrKyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9ic2RzcmMvYl9leHAuYwpAQCAtMCwwICsxLDE3NSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMTk4NSwgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKKyAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKKyAqCVRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIFVuaXZlcnNpdHkgb2YKKyAqCUNhbGlmb3JuaWEsIEJlcmtlbGV5IGFuZCBpdHMgY29udHJpYnV0b3JzLgorICogNC4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisvKiBAKCMpZXhwLmMJOC4xIChCZXJrZWxleSkgNi80LzkzICovCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CitfX0ZCU0RJRCgiJEZyZWVCU0QkIik7CisKKworLyogRVhQKFgpCisgKiBSRVRVUk4gVEhFIEVYUE9ORU5USUFMIE9GIFgKKyAqIERPVUJMRSBQUkVDSVNJT04gKElFRUUgNTMgYml0cywgVkFYIEQgRk9STUFUIDU2IEJJVFMpCisgKiBDT0RFRCBJTiBDIEJZIEsuQy4gTkcsIDEvMTkvODU7CisgKiBSRVZJU0VEIEJZIEsuQy4gTkcgb24gMi82Lzg1LCAyLzE1Lzg1LCAzLzcvODUsIDMvMjQvODUsIDQvMTYvODUsIDYvMTQvODYuCisgKgorICogUmVxdWlyZWQgc3lzdGVtIHN1cHBvcnRlZCBmdW5jdGlvbnM6CisgKglzY2FsYih4LG4pCisgKgljb3B5c2lnbih4LHkpCisgKglmaW5pdGUoeCkKKyAqCisgKiBNZXRob2Q6CisgKgkxLiBBcmd1bWVudCBSZWR1Y3Rpb246IGdpdmVuIHRoZSBpbnB1dCB4LCBmaW5kIHIgYW5kIGludGVnZXIgayBzdWNoCisgKgkgICB0aGF0CisgKgkgICAgICAgICAgICAgICAgICAgeCA9IGsqbG4yICsgciwgIHxyfCA8PSAwLjUqbG4yIC4KKyAqCSAgIHIgd2lsbCBiZSByZXByZXNlbnRlZCBhcyByIDo9IHorYyBmb3IgYmV0dGVyIGFjY3VyYWN5LgorICoKKyAqCTIuIENvbXB1dGUgZXhwKHIpIGJ5CisgKgorICoJCWV4cChyKSA9IDEgKyByICsgcipSMS8oMi1SMSksCisgKgkgICB3aGVyZQorICoJCVIxID0geCAtIHheMioocDEreF4yKihwMit4XjIqKHAzK3heMioocDQrcDUqeF4yKSkpKS4KKyAqCisgKgkzLiBleHAoeCkgPSAyXmsgKiBleHAocikgLgorICoKKyAqIFNwZWNpYWwgY2FzZXM6CisgKglleHAoSU5GKSBpcyBJTkYsIGV4cChOYU4pIGlzIE5hTjsKKyAqCWV4cCgtSU5GKT0gIDA7CisgKglmb3IgZmluaXRlIGFyZ3VtZW50LCBvbmx5IGV4cCgwKT0xIGlzIGV4YWN0LgorICoKKyAqIEFjY3VyYWN5OgorICoJZXhwKHgpIHJldHVybnMgdGhlIGV4cG9uZW50aWFsIG9mIHggbmVhcmx5IHJvdW5kZWQuIEluIGEgdGVzdCBydW4KKyAqCXdpdGggMSwxNTYsMDAwIHJhbmRvbSBhcmd1bWVudHMgb24gYSBWQVgsIHRoZSBtYXhpbXVtIG9ic2VydmVkCisgKgllcnJvciB3YXMgMC44NjkgdWxwcyAodW5pdHMgaW4gdGhlIGxhc3QgcGxhY2UpLgorICovCisKKyNpbmNsdWRlICJtYXRoaW1wbC5oIgorCitzdGF0aWMgY29uc3QgZG91YmxlIHAxID0gMHgxLjU1NTU1NTU1NTU1M2VwLTM7CitzdGF0aWMgY29uc3QgZG91YmxlIHAyID0gLTB4MS42YzE2YzE2YmViZDkzcC05Oworc3RhdGljIGNvbnN0IGRvdWJsZSBwMyA9IDB4MS4xNTY2YWFmMjVkZTJjcC0xNDsKK3N0YXRpYyBjb25zdCBkb3VibGUgcDQgPSAtMHgxLmJiZDQxYzVkMjZiZjFwLTIwOworc3RhdGljIGNvbnN0IGRvdWJsZSBwNSA9IDB4MS42Mzc2OTcyYmVhNGQwcC0yNTsKK3N0YXRpYyBjb25zdCBkb3VibGUgbG4yaGkgPSAweDEuNjJlNDJmZWUwMDAwMHAtMTsKK3N0YXRpYyBjb25zdCBkb3VibGUgbG4ybG8gPSAweDEuYTM5ZWYzNTc5M2M3NnAtMzM7CitzdGF0aWMgY29uc3QgZG91YmxlIGxuaHVnZSA9IDB4MS42NjAyYjE1YjdlY2YycDk7CitzdGF0aWMgY29uc3QgZG91YmxlIGxudGlueSA9IC0weDEuNzdhZjhlYmVhZTM1NHA5Oworc3RhdGljIGNvbnN0IGRvdWJsZSBpbnZsbjIgPSAweDEuNzE1NDc2NTJiODJmZXAwOworCisjaWYgMAorZG91YmxlIGV4cCh4KQorZG91YmxlIHg7Cit7CisJZG91YmxlICB6LGhpLGxvLGM7CisJaW50IGs7CisKKyNpZiAhZGVmaW5lZCh2YXgpJiYhZGVmaW5lZCh0YWhvZSkKKwlpZih4IT14KSByZXR1cm4oeCk7CS8qIHggaXMgTmFOICovCisjZW5kaWYJLyogIWRlZmluZWQodmF4KSYmIWRlZmluZWQodGFob2UpICovCisJaWYoIHggPD0gbG5odWdlICkgeworCQlpZiggeCA+PSBsbnRpbnkgKSB7CisKKwkJICAgIC8qIGFyZ3VtZW50IHJlZHVjdGlvbiA6IHggLS0+IHggLSBrKmxuMiAqLworCisJCQlrPWludmxuMip4K2NvcHlzaWduKDAuNSx4KTsJLyogaz1OSU5UKHgvbG4yKSAqLworCisJCSAgICAvKiBleHByZXNzIHgtaypsbjIgYXMgaGktbG8gYW5kIGxldCB4PWhpLWxvIHJvdW5kZWQgKi8KKworCQkJaGk9eC1rKmxuMmhpOworCQkJeD1oaS0obG89aypsbjJsbyk7CisKKwkJICAgIC8qIHJldHVybiAyXmsqWzEreCt4KmMvKDIrYyldICAqLworCQkJej14Kng7CisJCQljPSB4IC0geioocDEreioocDIreioocDMreioocDQreipwNSkpKSk7CisJCQlyZXR1cm4gIHNjYWxiKDEuMCsoaGktKGxvLSh4KmMpLygyLjAtYykpKSxrKTsKKworCQl9CisJCS8qIGVuZCBvZiB4ID4gbG50aW55ICovCisKKwkJZWxzZQorCQkgICAgIC8qIGV4cCgtYmlnIykgdW5kZXJmbG93cyB0byB6ZXJvICovCisJCSAgICAgaWYoZmluaXRlKHgpKSAgcmV0dXJuKHNjYWxiKDEuMCwtNTAwMCkpOworCisJCSAgICAgLyogZXhwKC1JTkYpIGlzIHplcm8gKi8KKwkJICAgICBlbHNlIHJldHVybigwLjApOworCX0KKwkvKiBlbmQgb2YgeCA8IGxuaHVnZSAqLworCisJZWxzZQorCS8qIGV4cChJTkYpIGlzIElORiwgZXhwKCtiaWcjKSBvdmVyZmxvd3MgdG8gSU5GICovCisJICAgIHJldHVybiggZmluaXRlKHgpID8gIHNjYWxiKDEuMCw1MDAwKSAgOiB4KTsKK30KKyNlbmRpZgorCisvKiByZXR1cm5zIGV4cChyID0geCArIGMpIGZvciB8Y3wgPCB8eHwgd2l0aCBubyBvdmVybGFwLiAgKi8KKworZG91YmxlIF9fZXhwX19EKHgsIGMpCitkb3VibGUgeCwgYzsKK3sKKwlkb3VibGUgIHosaGksbG87CisJaW50IGs7CisKKwlpZiAoeCAhPSB4KQkvKiB4IGlzIE5hTiAqLworCQlyZXR1cm4oeCk7CisJaWYgKCB4IDw9IGxuaHVnZSApIHsKKwkJaWYgKCB4ID49IGxudGlueSApIHsKKworCQkgICAgLyogYXJndW1lbnQgcmVkdWN0aW9uIDogeCAtLT4geCAtIGsqbG4yICovCisJCQl6ID0gaW52bG4yKng7CisJCQlrID0geiArIGNvcHlzaWduKC41LCB4KTsKKworCQkgICAgLyogZXhwcmVzcyAoeCtjKS1rKmxuMiBhcyBoaS1sbyBhbmQgbGV0IHg9aGktbG8gcm91bmRlZCAqLworCisJCQloaT0oeC1rKmxuMmhpKTsJCQkvKiBFeGFjdC4gKi8KKwkJCXg9IGhpIC0gKGxvID0gaypsbjJsby1jKTsKKwkJICAgIC8qIHJldHVybiAyXmsqWzEreCt4KmMvKDIrYyldICAqLworCQkJej14Kng7CisJCQljPSB4IC0geioocDEreioocDIreioocDMreioocDQreipwNSkpKSk7CisJCQljID0gKHgqYykvKDIuMC1jKTsKKworCQkJcmV0dXJuICBzY2FsYigxLisoaGktKGxvIC0gYykpLCBrKTsKKwkJfQorCQkvKiBlbmQgb2YgeCA+IGxudGlueSAqLworCisJCWVsc2UKKwkJICAgICAvKiBleHAoLWJpZyMpIHVuZGVyZmxvd3MgdG8gemVybyAqLworCQkgICAgIGlmKGZpbml0ZSh4KSkgIHJldHVybihzY2FsYigxLjAsLTUwMDApKTsKKworCQkgICAgIC8qIGV4cCgtSU5GKSBpcyB6ZXJvICovCisJCSAgICAgZWxzZSByZXR1cm4oMC4wKTsKKwl9CisJLyogZW5kIG9mIHggPCBsbmh1Z2UgKi8KKworCWVsc2UKKwkvKiBleHAoSU5GKSBpcyBJTkYsIGV4cCgrYmlnIykgb3ZlcmZsb3dzIHRvIElORiAqLworCSAgICByZXR1cm4oIGZpbml0ZSh4KSA/ICBzY2FsYigxLjAsNTAwMCkgIDogeCk7Cit9CmRpZmYgLS1naXQgYS9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vYnNkc3JjL2JfbG9nLmMgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vYnNkc3JjL2JfbG9nLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWE0Yjk2NAotLS0gL2Rldi9udWxsCisrKyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9ic2RzcmMvYl9sb2cuYwpAQCAtMCwwICsxLDQ3MSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMTk5MiwgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKKyAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKKyAqCVRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIFVuaXZlcnNpdHkgb2YKKyAqCUNhbGlmb3JuaWEsIEJlcmtlbGV5IGFuZCBpdHMgY29udHJpYnV0b3JzLgorICogNC4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisvKiBAKCMpbG9nLmMJOC4yIChCZXJrZWxleSkgMTEvMzAvOTMgKi8KKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJTRCQiKTsKKworI2luY2x1ZGUgPG1hdGguaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorCisjaW5jbHVkZSAibWF0aGltcGwuaCIKKworLyogVGFibGUtZHJpdmVuIG5hdHVyYWwgbG9nYXJpdGhtLgorICoKKyAqIFRoaXMgY29kZSB3YXMgZGVyaXZlZCwgd2l0aCBtaW5vciBtb2RpZmljYXRpb25zLCBmcm9tOgorICoJUGV0ZXIgVGFuZywgIlRhYmxlLURyaXZlbiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUKKyAqCUxvZ2FyaXRobSBpbiBJRUVFIEZsb2F0aW5nLVBvaW50IGFyaXRobWV0aWMuIiBBQ00gVHJhbnMuCisgKglNYXRoIFNvZnR3YXJlLCB2b2wgMTYuIG5vIDQsIHBwIDM3OC00MDAsIERlYyAxOTkwKS4KKyAqCisgKiBDYWxjdWxhdGVzIGxvZygyXm0qRiooMStmL0YpKSwgfGYvanwgPD0gMS8yNTYsCisgKiB3aGVyZSBGID0gai8xMjggZm9yIGogYW4gaW50ZWdlciBpbiBbMCwgMTI4XS4KKyAqCisgKiBsb2coMl5tKSA9IGxvZzJfaGkqbSArIGxvZzJfdGFpbCptCisgKiBzaW5jZSBtIGlzIGFuIGludGVnZXIsIHRoZSBkb21pbmFudCB0ZXJtIGlzIGV4YWN0LgorICogbSBoYXMgYXQgbW9zdCAxMCBkaWdpdHMgKGZvciBzdWJub3JtYWwgbnVtYmVycyksCisgKiBhbmQgbG9nMl9oaSBoYXMgMTEgdHJhaWxpbmcgemVybyBiaXRzLgorICoKKyAqIGxvZyhGKSA9IGxvZ0ZfaGlbal0gKyBsb2dGX2xvW2pdIGlzIGluIHRhYnVsYXIgZm9ybSBpbiBsb2dfdGFibGUuaAorICogbG9nRl9oaVtdICsgNTEyIGlzIGV4YWN0LgorICoKKyAqIGxvZygxK2YvRikgPSAyKmYvKDIqRiArIGYpICsgMS8xMiAqICgyKmYvKDIqRiArIGYpKSoqMyArIC4uLgorICogdGhlIGxlYWRpbmcgdGVybSBpcyBjYWxjdWxhdGVkIHRvIGV4dHJhIHByZWNpc2lvbiBpbiB0d28KKyAqIHBhcnRzLCB0aGUgbGFyZ2VyIG9mIHdoaWNoIGFkZHMgZXhhY3RseSB0byB0aGUgZG9taW5hbnQKKyAqIG0gYW5kIEYgdGVybXMuCisgKiBUaGVyZSBhcmUgdHdvIGNhc2VzOgorICoJMS4gd2hlbiBtLCBqIGFyZSBub24temVybyAobSB8IGopLCB1c2UgYWJzb2x1dGUKKyAqCSAgIHByZWNpc2lvbiBmb3IgdGhlIGxlYWRpbmcgdGVybS4KKyAqCTIuIHdoZW4gbSA9IGogPSAwLCB8MS14fCA8IDEvMjU2LCBhbmQgbG9nKHgpIH49ICh4LTEpLgorICoJICAgSW4gdGhpcyBjYXNlLCB1c2UgYSByZWxhdGl2ZSBwcmVjaXNpb24gb2YgMjQgYml0cy4KKyAqIChUaGlzIGlzIGRvbmUgZGlmZmVyZW50bHkgaW4gdGhlIG9yaWdpbmFsIHBhcGVyKQorICoKKyAqIFNwZWNpYWwgY2FzZXM6CisgKgkwCXJldHVybiBzaWduYWxsaW5nIC1JbmYKKyAqCW5lZwlyZXR1cm4gc2lnbmFsbGluZyBOYU4KKyAqCStJbmYJcmV0dXJuICtJbmYKKyovCisKKyNkZWZpbmUgTiAxMjgKKworLyogVGFibGUgb2YgbG9nKEZqKSA9IGxvZ0ZfaGVhZFtqXSArIGxvZ0ZfdGFpbFtqXSwgZm9yIEZqID0gMStqLzEyOC4KKyAqIFVzZWQgZm9yIGdlbmVyYXRpb24gb2YgZXh0ZW5kIHByZWNpc2lvbiBsb2dhcml0aG1zLgorICogVGhlIGNvbnN0YW50IDM1MTg0MzcyMDg4ODMyIGlzIDJeNDUsIHNvIHRoZSBkaXZpZGUgaXMgZXhhY3QuCisgKiBJdCBlbnN1cmVzIGNvcnJlY3QgcmVhZGluZyBvZiBsb2dGX2hlYWQsIGV2ZW4gZm9yIGluYWNjdXJhdGUKKyAqIGRlY2ltYWwtdG8tYmluYXJ5IGNvbnZlcnNpb24gcm91dGluZXMuICAoRXZlcnlib2R5IGdldHMgdGhlCisgKiByaWdodCBhbnN3ZXIgZm9yIGludGVnZXJzIGxlc3MgdGhhbiAyXjUzLikKKyAqIFZhbHVlcyBmb3IgbG9nKEYpIHdlcmUgZ2VuZXJhdGVkIHVzaW5nIGVycm9yIDwgMTBeLTU3IGFic29sdXRlCisgKiB3aXRoIHRoZSBiYyAtbCBwYWNrYWdlLgorKi8KK3N0YXRpYyBkb3VibGUJQTEgPSAJICAuMDgzMzMzMzMzMzMzMzMxNzg4Mjc7CitzdGF0aWMgZG91YmxlCUEyID0gCSAgLjAxMjUwMDAwMDAwMzc3MTc0OTIzOworc3RhdGljIGRvdWJsZQlBMyA9CSAuMDAyMjMyMTM5OTg3OTE5NDQ3ODA5Oworc3RhdGljIGRvdWJsZQlBNCA9CS4wMDA0MzQ4ODc3Nzc3MDc2MTQ1NzQyOworCitzdGF0aWMgZG91YmxlIGxvZ0ZfaGVhZFtOKzFdID0geworCTAuLAorCS4wMDc3ODIxNDA0NDIwNjAzODEyNDYsCisJLjAxNTUwNDE4NjUzNTk2MzUyNjY5NCwKKwkuMDIzMTY3MDU5MjgxNTQ3NjA4NDA2LAorCS4wMzA3NzE2NTg2NjY3NjUyMzM2NDcsCisJLjAzODMxODg2NDMwMjE0MTI2NDQ4OCwKKwkuMDQ1ODA5NTM2MDMxMjQyNzE0NjcwLAorCS4wNTMyNDQ1MTQ1MTg4Mzc2MDQ1NTUsCisJLjA2MDYyNDYyMTgxNjQ4Njk3ODc4NiwKKwkuMDY3OTUwNjYxOTA4NTI1OTQ0NDU0LAorCS4wNzUyMjM0MjEyMzc1MjQyMzUwMzksCisJLjA4MjQ0MzY2OTIxMDk4ODQ0NjEzOCwKKwkuMDg5NjEyMTU4Njg5NzYwNjkwMzIyLAorCS4wOTY3Mjk2MjY0NTg0NTQ3MzE2MTgsCisJLjEwMzc5Njc5MzY4MTU2NzU3ODQ2MCwKKwkuMTEwODE0MzY2MzQwMjY0MzE0MjAzLAorCS4xMTc3ODMwMzU2NTY0MzAwMDE4MzYsCisJLjEyNDcwMzQ3ODUwMTAzMjgwNTA3MCwKKwkuMTMxNTc2MzU3Nzg4NjE3MzE1MjM2LAorCS4xMzg0MDIzMjI4NTkyOTIzMjYwMjksCisJLjE0NTE4MjAwOTg0NDU3NTA3NzI5NSwKKwkuMTUxOTE2MDQyMDI1NzMyMTY3NTMwLAorCS4xNTg2MDUwMzAxNzY2NTkwNTY0NTEsCisJLjE2NTI0OTU3Mjg5NTM5MDg4Mzc4NiwKKwkuMTcxODUwMjU2OTI2NTE4MzQxMDYwLAorCS4xNzg0MDc2NTc0NzI2ODk2MDY5NDcsCisJLjE4NDkyMjMzODQ5MzgzNDEwNDE1NiwKKwkuMTkxMzk0ODUyOTk5NTY1MDQ2MDQ3LAorCS4xOTc4MjU3NDMzMjk3NTg1NTIxMzUsCisJLjIwNDIxNTU0MTQyODc2NjMwMDY2OCwKKwkuMjEwNTY0NzY5MTA3MzUwMDAyNzQxLAorCS4yMTY4NzM5MzgzMDA1MjMxNTAyNDYsCisJLjIyMzE0MzU1MTMxNDAyNDA4MDA1NiwKKwkuMjI5Mzc0MTAxMDY0ODc3MzIyNjQyLAorCS4yMzU1NjYwNzEzMTI4NjAwMDM2NzIsCisJLjI0MTcxOTkzNjg4Njk2NjAyNDc1OCwKKwkuMjQ3ODM2MTYzOTA0NTk0Mjg2NTc3LAorCS4yNTM5MTUyMDk5ODA3MzI0NzAyODUsCisJLjI1OTk1NzUyNDQzNjY4NjA3MTU2NywKKwkuMjY1OTYzNTQ4NDk2OTg0MDAzNTc3LAorCS4yNzE5MzM3MTU0ODQwMTA0NjMxMTQsCisJLjI3Nzg2ODQ1MTAwMzA4NzEwMjQzNSwKKwkuMjgzNzY4MTczMTMwNzM4NDMyNTE5LAorCS4yODk2MzMyOTI1ODI5NDgzNDI4OTYsCisJLjI5NTQ2NDIxMjg5MzQyMTA2MzE5OSwKKwkuMzAxMjYxMzMwNTc4MTk5NzA0MTc3LAorCS4zMDcwMjUwMzUyOTQ4Mjc4MzA1MTIsCisJLjMxMjc1NTcxMDAwNDIzOTUxNzcyOSwKKwkuMzE4NDUzNzMxMTE4MDk3NDkzODkwLAorCS4zMjQxMTk0Njg2NTQzMTY3MzM1OTEsCisJLjMyOTc1MzI4NjM3MjU3OTE2ODUyOCwKKwkuMzM1MzU1NTQxOTIwNzYyMzM0NDg0LAorCS4zNDA5MjY1ODY5NzA0NTQwODE4OTIsCisJLjM0NjQ2Njc2NzM0NjEwMDgyMzQ4OCwKKwkuMzUxOTc2NDIzMTU2ODg0MjY2MDYzLAorCS4zNTc0NTU4ODg5MjIyMzE2NzkzMTYsCisJLjM2MjkwNTQ5MzY4OTE0MDcxMjM3NiwKKwkuMzY4MzI1NTYxMTU4NTk5MTU3MzUyLAorCS4zNzM3MTY0MDk3OTM4MTQ4MTg4NDAsCisJLjM3OTA3ODM1MjkzNDgxMTg0NjM1MywKKwkuMzg0NDExNjk4OTEwMjk4NTgyNjMyLAorCS4zODk3MTY3NTExNDA0NDA0NjQ5NTEsCisJLjM5NDk5MzgwODI0MDU0MjQyMTExNywKKwkuNDAwMjQzMTY0MTI3NDU5NzQ5NTc5LAorCS40MDU0NjUxMDgxMDc4MTkxMDU0OTgsCisJLjQxMDY1OTkyNDk4NTMzODg3NTU1OCwKKwkuNDE1ODI3ODk1MTQzNTkzMTk1ODI1LAorCS40MjA5NjkyOTQ2NDQyMzczNzk1NDMsCisJLjQyNjA4NDM5NTMxMDY4MTQyOTY5MSwKKwkuNDMxMTczNDY0ODE4MTMwMDE0NDY0LAorCS40MzYyMzY3NjY3NzQ1Mjc0OTU3MjYsCisJLjQ0MTI3NDU2MDgwNTE0MDkzNjI4MSwKKwkuNDQ2Mjg3MTAyNjI4MDQ4MTYwMTEzLAorCS40NTEyNzQ2NDQxMzk2MzAyNTQzNTgsCisJLjQ1NjIzNzQzMzQ4MTg3NDE3NzIzMiwKKwkuNDYxMTc1NzE1MTIyNDA4MjkxNzkwLAorCS40NjYwODk3Mjk5MjQ1MzM0NTc5NjAsCisJLjQ3MDk3OTcxNTIxOTA3MzExMzk4NSwKKwkuNDc1ODQ1OTA0ODY5ODU2ODk0OTQ3LAorCS40ODA2ODg1MjkzNDU1NzA3MTQyMTIsCisJLjQ4NTUwNzgxNTc4MTYwMjQwMzE0OSwKKwkuNDkwMzAzOTg4MDQ1NTI1MzI5NjUzLAorCS40OTUwNzcyNjY3OTgwMzQ1NDMxNzEsCisJLjQ5OTgyNzg2OTU1NjYxMTQwMzgyMiwKKwkuNTA0NTU2MDEwNzUxOTEyMjUzOTA4LAorCS41MDkyNjE5MDE3OTA1MjM1NTIzMzUsCisJLjUxMzk0NTc1MTEwMTM0NjEwNDQwNSwKKwkuNTE4NjA3NzY0MjA4MzU0NjM3OTU4LAorCS41MjMyNDgxNDM3NjUxNTg2MDIwMzYsCisJLjUyNzg2NzA4OTYyMDQ4NTc4NTQxNywKKwkuNTMyNDY0Nzk4ODY5MTE0MDE5OTA4LAorCS41MzcwNDE0NjU4OTczNDU5MTU0MzYsCisJLjU0MTU5NzI4MjQzMjEyMTU3Mzk0NywKKwkuNTQ2MTMyNDM3NTk3NDA3MjYwOTA5LAorCS41NTA2NDcxMTc5NTIzOTQxODI3OTMsCisJLjU1NTE0MTUwNzU0MDYxMTIwMDk2NSwKKwkuNTU5NjE1Nzg3OTM1Mzk5NTY2Nzc3LAorCS41NjQwNzAxMzgyODUzODc2NTY2NTEsCisJLjU2ODUwNDczNTM1MjY4OTc0OTU2MSwKKwkuNTcyOTE5NzUzNTYyMDE4NzQwOTIyLAorCS41NzczMTUzNjUwMzUyNDY5NDEyNjAsCisJLjU4MTY5MTczOTYzNTA2MTgyMTkwMCwKKwkuNTg2MDQ5MDQ1MDAzMTY0NzkyNDMzLAorCS41OTAzODc0NDY2MDIxMDc5NTcwMDUsCisJLjU5NDcwNzEwNzc0NjIxNjkzNDE3NCwKKwkuNTk5MDA4MTg5NjQ1MjQ2NjAyNTk0LAorCS42MDMyOTA4NTE0Mzg5NDE4OTk2ODcsCisJLjYwNzU1NTI1MDIyNDMyMjY2MjY4OCwKKwkuNjExODAxNTQxMTA2NjE1MzMxOTU1LAorCS42MTYwMjk4NzcyMTU2MjM4NTU1OTAsCisJLjYyMDI0MDQwOTc1MTIwNDQyNDUzNywKKwkuNjI0NDMzMjg4MDEyMzY5MzAzMDMyLAorCS42Mjg2MDg2NTk0MjI3NTI2ODAyNTYsCisJLjYzMjc2NjY2OTU3MDYyODQzNzIxMywKKwkuNjM2OTA3NDYyMjM2MTk0OTg3NzgxLAorCS42NDEwMzExNzk0MjA2NzkxMDkxNzEsCisJLjY0NTEzNzk2MTM3MzYyMDc4Mjk3OCwKKwkuNjQ5MjI3OTQ2NjI1NjE1MDA0NDUwLAorCS42NTMzMDEyNzIwMTE5NTg2NDQ3MjUsCisJLjY1NzM1ODA3MjcwOTAzMDIzODkxMSwKKwkuNjYxMzk4NDgyMjQ1MjAzOTIyNTAyLAorCS42NjU0MjI2MzI1NDQ1MDUxNzcwNjUsCisJLjY2OTQzMDY1Mzk0Mjk4MTczNDg3MSwKKwkuNjczNDIyNjc1MjEyMzUwNDQxMTQyLAorCS42NzczOTg4MjM1OTA5MjAwNzM5MTEsCisJLjY4MTM1OTIyNDgwNzIzODIwNjI2NywKKwkuNjg1MzA0MDAzMDk4MjgxMTAwMzkyLAorCS42ODkyMzMyODEyMzg1NTc1MzgwMTcsCisJLjY5MzE0NzE4MDU2MDExNzcwMzg2MgorfTsKKworc3RhdGljIGRvdWJsZSBsb2dGX3RhaWxbTisxXSA9IHsKKwkwLiwKKwktLjAwMDAwMDAwMDAwMDAwNTQzMjI5OTM4NDIwMDQ5LAorCSAuMDAwMDAwMDAwMDAwMDAxNzI3NDU2NzQ5OTcwNjEsCisJLS4wMDAwMDAwMDAwMDAwMTMyMzAxNzgxODIyOTIzMywKKwktLjAwMDAwMDAwMDAwMDAxMTU0NTI3NjI4Mjg5ODcyLAorCS0uMDAwMDAwMDAwMDAwMDA0NjY1Mjk0Njk5NTgzMDAsCisJIC4wMDAwMDAwMDAwMDAwNTE0ODg0OTU3MjY4NTgxMCwKKwktLjAwMDAwMDAwMDAwMDAyNTMyMTY4OTQzMTE3NDQ1LAorCS0uMDAwMDAwMDAwMDAwMDUyMTM2MjA2MzkxMzY1MDQsCisJLS4wMDAwMDAwMDAwMDAwMTgxOTUwNjAwMzAxNjg4MSwKKwkgLjAwMDAwMDAwMDAwMDA2MzI5MDY1OTU4NzI0NTQ0LAorCSAuMDAwMDAwMDAwMDAwMDg2MTQ1MTI5MzYwODc4MTQsCisJLS4wMDAwMDAwMDAwMDAwNzM1NTc3MDIxOTQzNTAyOCwKKwkgLjAwMDAwMDAwMDAwMDA5NjM4MDY3NjU4NTUyMjc3LAorCSAuMDAwMDAwMDAwMDAwMDc1OTg2MzY1OTcxOTQxNDEsCisJIC4wMDAwMDAwMDAwMDAwMjU3OTk5OTEyODMwNjk5MCwKKwktLjAwMDAwMDAwMDAwMDA0NjU0NzI5NzQ3NTk4NDQ0LAorCS0uMDAwMDAwMDAwMDAwMDc1NTY5MjA2ODc0NTEzMzYsCisJIC4wMDAwMDAwMDAwMDAxMDE5NTczNTIyMzcwODQ3MiwKKwktLjAwMDAwMDAwMDAwMDE3MzE5MDM0NDA2NDIyMzA2LAorCS0uMDAwMDAwMDAwMDAwMDc3MTgwMDEzMzY4MjgwOTgsCisJIC4wMDAwMDAwMDAwMDAxMDk4MDc1NDA5OTg1NTIzOCwKKwktLjAwMDAwMDAwMDAwMDAyMDQ3MjM1NzgwMDQ2MTk1LAorCS0uMDAwMDAwMDAwMDAwMDgzNzIwOTEwOTkyMzU5MTIsCisJIC4wMDAwMDAwMDAwMDAxNDA4ODEyNzkzNzExMTEzNSwKKwkgLjAwMDAwMDAwMDAwMDEyODY5MDE3MTU3NTg4MjU3LAorCSAuMDAwMDAwMDAwMDAwMTc3ODg4NTA3NzgxOTgxMDYsCisJIC4wMDAwMDAwMDAwMDAwNjQ0MDg1NjE1MDY5Njg5MSwKKwkgLjAwMDAwMDAwMDAwMDE2MTMyODIyNjY3MjQwODIyLAorCS0uMDAwMDAwMDAwMDAwMDc1NDA5MTY1MTE5NTYxODgsCisJLS4wMDAwMDAwMDAwMDAwMDAzNjUwNzE4ODgzMTc5MCwKKwkgLjAwMDAwMDAwMDAwMDA5MTIwOTM3MjQ5OTE0OTg0LAorCSAuMDAwMDAwMDAwMDAwMTg1Njc1NzA5NTk3OTYwMTAsCisJLS4wMDAwMDAwMDAwMDAwMzE0OTI2NTA2NTE5MTQ4MywKKwktLjAwMDAwMDAwMDAwMDA5MzA5NDU5NDk1MTk2ODg5LAorCSAuMDAwMDAwMDAwMDAwMTc5MTQzMzg2MDEzMjkxMTcsCisJLS4wMDAwMDAwMDAwMDAwMTMwMjk3OTcxNzMzMDg2NiwKKwkgLjAwMDAwMDAwMDAwMDIzMDk3Mzg1MjE3NTg2OTM5LAorCSAuMDAwMDAwMDAwMDAwMjM5OTk1NDA0ODQyMTE3MzcsCisJIC4wMDAwMDAwMDAwMDAxNTM5Mzc3NjE3NDQ1NTQwOCwKKwktLjAwMDAwMDAwMDAwMDM2ODcwNDI4MzE1ODM3Njc4LAorCSAuMDAwMDAwMDAwMDAwMzY5MjAzNzUwODIwODAwODksCisJLS4wMDAwMDAwMDAwMDAwOTM4MzQxNzIyMzY2MzY5OSwKKwkgLjAwMDAwMDAwMDAwMDA5NDMzMzk4MTg5NTEyNjkwLAorCSAuMDAwMDAwMDAwMDAwNDE0ODEzMTg3MDQyNTg1NjgsCisJLS4wMDAwMDAwMDAwMDAwMzc5MjMxNjQ4MDIwOTMxNCwKKwkgLjAwMDAwMDAwMDAwMDA4NDAzMTU2MzA0NzkyNDI0LAorCS0uMDAwMDAwMDAwMDAwMzQyNjI5MzQzNDgyODU0MjksCisJIC4wMDAwMDAwMDAwMDA0MzcxMjE5MTk1NzQyOTE0NSwKKwktLjAwMDAwMDAwMDAwMDEwNDc1NzUwMDU4Nzc2NTQxLAorCS0uMDAwMDAwMDAwMDAwMTExMTg2NzEzODk1NTkzMjMsCisJIC4wMDAwMDAwMDAwMDAzNzU0OTU3NzI1NzI1OTg1MywKKwkgLjAwMDAwMDAwMDAwMDEzOTEyODQxMjEyMTk3NTY1LAorCSAuMDAwMDAwMDAwMDAwMTA3NzU3NDMwMzc1NzI2NDAsCisJIC4wMDAwMDAwMDAwMDAyOTM5MTg1OTE4NzY0ODAwMCwKKwktLjAwMDAwMDAwMDAwMDQyNzkwNTA5MDYwMDYwNzc0LAorCSAuMDAwMDAwMDAwMDAwMjI3NzQwNzYxMTQwMzk1NTUsCisJIC4wMDAwMDAwMDAwMDAxMDg0OTU2OTYyMjk2NzkxMiwKKwktLjAwMDAwMDAwMDAwMDIzMDczODAxOTQ1NzA1NzU4LAorCSAuMDAwMDAwMDAwMDAwMTU3NjEyMDM3NzM5Njk0MzUsCisJIC4wMDAwMDAwMDAwMDAwMzM0NTcxMDI2OTU0NDA4MiwKKwktLjAwMDAwMDAwMDAwMDQxNTI1MTU4MDYzNDM2MTIzLAorCSAuMDAwMDAwMDAwMDAwMzI2NTU2OTg4OTY5MDcxNDYsCisJLS4wMDAwMDAwMDAwMDA0NDcwNDI2NTAxMDQ1MjQ0NiwKKwkgLjAwMDAwMDAwMDAwMDM0NTI3NjQ3OTUyMDM5NzcyLAorCS0uMDAwMDAwMDAwMDAwMDcwNDg5NjIzOTIxMDk3NDYsCisJIC4wMDAwMDAwMDAwMDAxMTc3Njk3ODc1MTM2OTIxNCwKKwktLjAwMDAwMDAwMDAwMDEwNzc0MzQxNDYxNjA5NTc4LAorCSAuMDAwMDAwMDAwMDAwMjE4NjMzNDMyOTMyMTU5MTAsCisJIC4wMDAwMDAwMDAwMDAyNDEzMjYzOTQ5MTMzMzEzMSwKKwkgLjAwMDAwMDAwMDAwMDM5MDU3NDYyMjA5ODMwNzAwLAorCS0uMDAwMDAwMDAwMDAwMjY1NzA2NzkyMDM1NjA3NTEsCisJIC4wMDAwMDAwMDAwMDAzNzEzNTE0MTkxOTU5MjAyMSwKKwktLjAwMDAwMDAwMDAwMDE3MTY2OTIxMzM2MDgyNDMxLAorCS0uMDAwMDAwMDAwMDAwMjg2NTgyODUxNTc5MTQzNTMsCisJLS4wMDAwMDAwMDAwMDAyMzgxMjU0MjI2MzQ0NjgwOSwKKwkgLjAwMDAwMDAwMDAwMDA2NTc2NjU5NzY4NTgwMDYyLAorCS0uMDAwMDAwMDAwMDAwMjgyMTAxNDM4NDYxODEyNjcsCisJIC4wMDAwMDAwMDAwMDAxMDcwMTkzMTc2MjExNDI1NCwKKwkgLjAwMDAwMDAwMDAwMDE4MTE5MzQ2MzY2NDQxMTEwLAorCSAuMDAwMDAwMDAwMDAwMDk4NDA0NjUyNzgyMzI2MjcsCisJLS4wMDAwMDAwMDAwMDAzMzE0OTE1MDI4Mjc1MjU0MiwKKwktLjAwMDAwMDAwMDAwMDE4MzAyODU3MzU2MDQxNjY4LAorCS0uMDAwMDAwMDAwMDAwMTYyMDc0MDAxNTY3NDQ5NDksCisJIC4wMDAwMDAwMDAwMDA0ODMwMzMxNDk0OTU1MzIwMSwKKwktLjAwMDAwMDAwMDAwMDcxNTYwNTUzMTcyMzgyMTE1LAorCSAuMDAwMDAwMDAwMDAwODg4MjEyMzk1MTg1NzE4NTUsCisJLS4wMDAwMDAwMDAwMDAzMDkwMDU4MDUxMzIzODI0NCwKKwktLjAwMDAwMDAwMDAwMDYxMDc2NTUxOTcyODUxNDk2LAorCSAuMDAwMDAwMDAwMDAwMzU2NTk5Njk2NjMzNDc4MzAsCisJIC4wMDAwMDAwMDAwMDAzNTc4MjM5NjU5MTI3NjM4MywKKwktLjAwMDAwMDAwMDAwMDQ2MjI2MDg3MDAxNTQ0NTc4LAorCSAuMDAwMDAwMDAwMDAwNjIyNzk3NjI5MTcyMjUxNTYsCisJIC4wMDAwMDAwMDAwMDA3MjgzODk0NzI3MjA2NTc0MSwKKwkgLjAwMDAwMDAwMDAwMDI2ODA5NjQ2NjE1MjExNjczLAorCS0uMDAwMDAwMDAwMDAwMTA5NjA4MjUwNDYwNTkyNzgsCisJIC4wMDAwMDAwMDAwMDAwMjMxMTk0OTM4MzgwMDUzNywKKwktLjAwMDAwMDAwMDAwMDU4NDY5MDU4MDA1Mjk5MjQ3LAorCS0uMDAwMDAwMDAwMDAwMDIxMDM3NDgyNTExNDQ0OTQsCisJLS4wMDAwMDAwMDAwMDAyMzMyMzE4Mjk0NTU4NzQwOCwKKwktLjAwMDAwMDAwMDAwMDQyMzMzNjk0Mjg4MTQxOTE2LAorCS0uMDAwMDAwMDAwMDAwNDM5MzM5Mzc5Njk3Mzc4NDQsCisJIC4wMDAwMDAwMDAwMDA0MTM0MTY0NzA3MzgzNTU2NSwKKwkgLjAwMDAwMDAwMDAwMDA2ODQxNzYzNjQxNTkxNDY2LAorCSAuMDAwMDAwMDAwMDAwNDc1ODU1MzQwMDQ0MzA2NDEsCisJIC4wMDAwMDAwMDAwMDA4MzY3OTY3ODY3NDc1NzY5NSwKKwktLjAwMDAwMDAwMDAwMDg1NzYzNzM0NjQ2NjU4NjQwLAorCSAuMDAwMDAwMDAwMDAwMjE5MTMyODEyMjkzNDAwOTIsCisJLS4wMDAwMDAwMDAwMDA2MjI0Mjg0MjUzNjQzMTE0OCwKKwktLjAwMDAwMDAwMDAwMDEwOTgzNTk0MzI1NDM4NDMwLAorCSAuMDAwMDAwMDAwMDAwNjUzMTA0MzEzNzc2MzM2NTEsCisJLS4wMDAwMDAwMDAwMDA0NzU4MDE5OTAyMTcxMDc2OSwKKwktLjAwMDAwMDAwMDAwMDM3ODU0MjUxMjY1NDU3MDQwLAorCSAuMDAwMDAwMDAwMDAwNDA5MzkyMzMyMTg2Nzg2NjQsCisJIC4wMDAwMDAwMDAwMDA4NzQyNDM4MzkxNDg1ODI5MSwKKwkgLjAwMDAwMDAwMDAwMDI1MjE4MTg4NDU2ODQyODgyLAorCS0uMDAwMDAwMDAwMDAwMDM2MDgxMzEzNjA0MjI1NTcsCisJLS4wMDAwMDAwMDAwMDA1MDUxODU1NTkyNDI4MDkwMiwKKwkgLjAwMDAwMDAwMDAwMDc4Njk5NDAzMzIzMzU1MzE3LAorCS0uMDAwMDAwMDAwMDAwNjcwMjA4NzY5NjE5NDkwNjAsCisJIC4wMDAwMDAwMDAwMDAxNjEwODU3NTc1MzkzMjQ1OCwKKwkgLjAwMDAwMDAwMDAwMDU4NTI3MTg4NDM2MjUxNTA5LAorCS0uMDAwMDAwMDAwMDAwMzUyNDY3NTcyOTc5MDQ3OTEsCisJLS4wMDAwMDAwMDAwMDAxODM3MjA4NDQ5NTYyOTA1OCwKKwkgLjAwMDAwMDAwMDAwMDg4NjA2Njg5ODEzNDk0OTE2LAorCSAuMDAwMDAwMDAwMDAwNjY0ODYyNjgwNzE0Njg3MDAsCisJIC4wMDAwMDAwMDAwMDA2MzgzMTYxNTE3MDY0NjUxOSwKKwkgLjAwMDAwMDAwMDAwMDI1MTQ0MjMwNzI4Mzc2MDcyLAorCS0uMDAwMDAwMDAwMDAwMTcyMzk0NDQ1MjU2MTQ4MzQKK307CisKKyNpZiAwCitkb3VibGUKKyNpZmRlZiBfQU5TSV9TT1VSQ0UKK2xvZyhkb3VibGUgeCkKKyNlbHNlCitsb2coeCkgZG91YmxlIHg7CisjZW5kaWYKK3sKKwlpbnQgbSwgajsKKwlkb3VibGUgRiwgZiwgZywgcSwgdSwgdTIsIHYsIHplcm8gPSAwLjAsIG9uZSA9IDEuMDsKKwl2b2xhdGlsZSBkb3VibGUgdTE7CisKKwkvKiBDYXRjaCBzcGVjaWFsIGNhc2VzICovCisJaWYgKHggPD0gMCkKKwkJaWYgKHggPT0gemVybykJLyogbG9nKDApID0gLUluZiAqLworCQkJcmV0dXJuICgtb25lL3plcm8pOworCQllbHNlCQkvKiBsb2cobmVnKSA9IE5hTiAqLworCQkJcmV0dXJuICh6ZXJvL3plcm8pOworCWVsc2UgaWYgKCFmaW5pdGUoeCkpCisJCXJldHVybiAoeCt4KTsJCS8qIHggPSBOYU4sIEluZiAqLworCisJLyogQXJndW1lbnQgcmVkdWN0aW9uOiAxIDw9IGcgPCAyOyB4LzJebSA9IGc7CSovCisJLyogeSA9IEYqKDEgKyBmL0YpIGZvciB8ZnwgPD0gMl4tOAkJKi8KKworCW0gPSBsb2diKHgpOworCWcgPSBsZGV4cCh4LCAtbSk7CisJaWYgKG0gPT0gLTEwMjIpIHsKKwkJaiA9IGxvZ2IoZyksIG0gKz0gajsKKwkJZyA9IGxkZXhwKGcsIC1qKTsKKwl9CisJaiA9IE4qKGctMSkgKyAuNTsKKwlGID0gKDEuMC9OKSAqIGogKyAxOwkvKiBGKjEyOCBpcyBhbiBpbnRlZ2VyIGluIFsxMjgsIDUxMl0gKi8KKwlmID0gZyAtIEY7CisKKwkvKiBBcHByb3hpbWF0ZSBleHBhbnNpb24gZm9yIGxvZygxK2YvRikgfj0gdSArIHEgKi8KKwlnID0gMS8oMipGK2YpOworCXUgPSAyKmYqZzsKKwl2ID0gdSp1OworCXEgPSB1KnYqKEExICsgdiooQTIgKyB2KihBMyArIHYqQTQpKSk7CisKKyAgICAvKiBjYXNlIDE6IHUxID0gdSByb3VuZGVkIHRvIDJeLTQzIGFic29sdXRlLiAgU2luY2UgdSA8IDJeLTgsCisgICAgICogCSAgICAgICB1MSBoYXMgYXQgbW9zdCAzNSBiaXRzLCBhbmQgRip1MSBpcyBleGFjdCwgYXMgRiBoYXMgPCA4IGJpdHMuCisgICAgICogICAgICAgICBJdCBhbHNvIGFkZHMgZXhhY3RseSB0byB8bSpsb2cyX2hpICsgbG9nX0ZfaGVhZFtqXSB8IDwgNzUwCisgICAgKi8KKwlpZiAobSB8IGopCisJCXUxID0gdSArIDUxMywgdTEgLT0gNTEzOworCisgICAgLyogY2FzZSAyOgl8MS14fCA8IDEvMjU2LiBUaGUgbS0gYW5kIGotIGRlcGVuZGVudCB0ZXJtcyBhcmUgemVybzsKKyAgICAgKiAJCXUxID0gdSB0byAyNCBiaXRzLgorICAgICovCisJZWxzZQorCQl1MSA9IHUsIFRSVU5DKHUxKTsKKwl1MiA9ICgyLjAqKGYgLSBGKnUxKSAtIHUxKmYpICogZzsKKwkJCS8qIHUxICsgdTIgPSAyZi8oMkYrZikgdG8gZXh0cmEgcHJlY2lzaW9uLgkqLworCisJLyogbG9nKHgpID0gbG9nKDJebSpGKigxK2YvRikpID0JCQkJKi8KKwkvKiAobSpsb2cyX2hpK2xvZ0ZfaGVhZFtqXSt1MSkgKyAobSpsb2cyX2xvK2xvZ0ZfdGFpbFtqXStxKTsJKi8KKwkvKiAoZXhhY3QpICsgKHRpbnkpCQkJCQkJKi8KKworCXUxICs9IG0qbG9nRl9oZWFkW05dICsgbG9nRl9oZWFkW2pdOwkJLyogZXhhY3QgKi8KKwl1MiA9ICh1MiArIGxvZ0ZfdGFpbFtqXSkgKyBxOwkJCS8qIHRpbnkgKi8KKwl1MiArPSBsb2dGX3RhaWxbTl0qbTsKKwlyZXR1cm4gKHUxICsgdTIpOworfQorI2VuZGlmCisKKy8qCisgKiBFeHRyYSBwcmVjaXNpb24gdmFyaWFudCwgcmV0dXJuaW5nIHN0cnVjdCB7ZG91YmxlIGEsIGI7fTsKKyAqIGxvZyh4KSA9IGErYiB0byA2MyBiaXRzLCB3aXRoIGEgcm91bmRlZCB0byAyNiBiaXRzLgorICovCitzdHJ1Y3QgRG91YmxlCisjaWZkZWYgX0FOU0lfU09VUkNFCitfX2xvZ19fRChkb3VibGUgeCkKKyNlbHNlCitfX2xvZ19fRCh4KSBkb3VibGUgeDsKKyNlbmRpZgoreworCWludCBtLCBqOworCWRvdWJsZSBGLCBmLCBnLCBxLCB1LCB2LCB1MjsKKwl2b2xhdGlsZSBkb3VibGUgdTE7CisJc3RydWN0IERvdWJsZSByOworCisJLyogQXJndW1lbnQgcmVkdWN0aW9uOiAxIDw9IGcgPCAyOyB4LzJebSA9IGc7CSovCisJLyogeSA9IEYqKDEgKyBmL0YpIGZvciB8ZnwgPD0gMl4tOAkJKi8KKworCW0gPSBsb2diKHgpOworCWcgPSBsZGV4cCh4LCAtbSk7CisJaWYgKG0gPT0gLTEwMjIpIHsKKwkJaiA9IGxvZ2IoZyksIG0gKz0gajsKKwkJZyA9IGxkZXhwKGcsIC1qKTsKKwl9CisJaiA9IE4qKGctMSkgKyAuNTsKKwlGID0gKDEuMC9OKSAqIGogKyAxOworCWYgPSBnIC0gRjsKKworCWcgPSAxLygyKkYrZik7CisJdSA9IDIqZipnOworCXYgPSB1KnU7CisJcSA9IHUqdiooQTEgKyB2KihBMiArIHYqKEEzICsgdipBNCkpKTsKKwlpZiAobSB8IGopCisJCXUxID0gdSArIDUxMywgdTEgLT0gNTEzOworCWVsc2UKKwkJdTEgPSB1LCBUUlVOQyh1MSk7CisJdTIgPSAoMi4wKihmIC0gRip1MSkgLSB1MSpmKSAqIGc7CisKKwl1MSArPSBtKmxvZ0ZfaGVhZFtOXSArIGxvZ0ZfaGVhZFtqXTsKKworCXUyICs9ICBsb2dGX3RhaWxbal07IHUyICs9IHE7CisJdTIgKz0gbG9nRl90YWlsW05dKm07CisJci5hID0gdTEgKyB1MjsJCQkvKiBPbmx5IGRpZmZlcmVuY2UgaXMgaGVyZSAqLworCVRSVU5DKHIuYSk7CisJci5iID0gKHUxIC0gci5hKSArIHUyOworCXJldHVybiAocik7Cit9CmRpZmYgLS1naXQgYS9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vYnNkc3JjL2JfdGdhbW1hLmMgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vYnNkc3JjL2JfdGdhbW1hLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWQwYWY0NAotLS0gL2Rldi9udWxsCisrKyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9ic2RzcmMvYl90Z2FtbWEuYwpAQCAtMCwwICsxLDMxNyBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTIsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCisgKiAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6CisgKglUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBVbml2ZXJzaXR5IG9mCisgKglDYWxpZm9ybmlhLCBCZXJrZWxleSBhbmQgaXRzIGNvbnRyaWJ1dG9ycy4KKyAqIDQuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworLyogQCgjKWdhbW1hLmMJOC4xIChCZXJrZWxleSkgNi80LzkzICovCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CitfX0ZCU0RJRCgiJEZyZWVCU0QkIik7CisKKy8qCisgKiBUaGlzIGNvZGUgYnkgUC4gTWNJbHJveSwgT2N0IDE5OTI7CisgKgorICogVGhlIGZpbmFuY2lhbCBzdXBwb3J0IG9mIFVVTkVUIENvbW11bmljYXRpb25zIFNlcnZpY2VzIGlzIGdyZWF0ZnVsbHkKKyAqIGFja25vd2xlZGdlZC4KKyAqLworCisjaW5jbHVkZSA8bWF0aC5oPgorI2luY2x1ZGUgIm1hdGhpbXBsLmgiCisKKy8qIE1FVEhPRDoKKyAqIHggPCAwOiBVc2UgcmVmbGVjdGlvbiBmb3JtdWxhLCBHKHgpID0gcGkvKHNpbihwaSp4KSp4KkcoeCkpCisgKiAJQXQgbmVnYXRpdmUgaW50ZWdlcnMsIHJldHVybiBOYU4gYW5kIHJhaXNlIGludmFsaWQuCisgKgorICogeCA8IDYuNToKKyAqCVVzZSBhcmd1bWVudCByZWR1Y3Rpb24gRyh4KzEpID0geEcoeCkgdG8gcmVhY2ggdGhlCisgKglyYW5nZSBbMS4wNjYxMjQsMi4wNjYxMjRdLiAgVXNlIGEgcmF0aW9uYWwKKyAqCWFwcHJveGltYXRpb24gY2VudGVyZWQgYXQgdGhlIG1pbmltdW0gKHgwKzEpIHRvCisgKgllbnN1cmUgbW9ub3RvbmljaXR5LgorICoKKyAqIHggPj0gNi41OiBVc2UgdGhlIGFzeW1wdG90aWMgYXBwcm94aW1hdGlvbiAoU3RpcmxpbmcncyBmb3JtdWxhKQorICoJYWRqdXN0ZWQgZm9yIGVxdWFsLXJpcHBsZXM6CisgKgorICoJbG9nKEcoeCkpIH49ICh4LS41KSoobG9nKHgpLTEpICsgLjUobG9nKDIqcGkpLTEpICsgMS94KlAoMS8oeCp4KSkKKyAqCisgKglLZWVwIGV4dHJhIHByZWNpc2lvbiBpbiBtdWx0aXBseWluZyAoeC0uNSkobG9nKHgpLTEpLCB0bworICoJYXZvaWQgcHJlbWF0dXJlIHJvdW5kLW9mZi4KKyAqCisgKiBTcGVjaWFsIHZhbHVlczoKKyAqCS1JbmY6CQkJcmV0dXJuIE5hTiBhbmQgcmFpc2UgaW52YWxpZDsKKyAqCW5lZ2F0aXZlIGludGVnZXI6CXJldHVybiBOYU4gYW5kIHJhaXNlIGludmFsaWQ7CisgKglvdGhlciB4IH48IDE3Ny43OToJcmV0dXJuICstMCBhbmQgcmFpc2UgdW5kZXJmbG93OworICoJKy0wOgkJCXJldHVybiArLUluZiBhbmQgcmFpc2UgZGl2aWRlLWJ5LXplcm87CisgKglmaW5pdGUgeCB+PiAxNzEuNjM6CXJldHVybiArSW5mIGFuZCByYWlzZSBvdmVyZmxvdzsKKyAqCStJbmY6CQkJcmV0dXJuICtJbmY7CisgKglOYU46IAkJCXJldHVybiBOYU4uCisgKgorICogQWNjdXJhY3k6IHRnYW1tYSh4KSBpcyBhY2N1cmF0ZSB0byB3aXRoaW4KKyAqCXggPiAwOiAgZXJyb3IgcHJvdmFibHkgPCAwLjl1bHAuCisgKglNYXhpbXVtIG9ic2VydmVkIGluIDEsMDAwLDAwMCB0cmlhbHMgd2FzIC44N3VscC4KKyAqCXggPCAwOgorICoJTWF4aW11bSBvYnNlcnZlZCBlcnJvciA8IDR1bHAgaW4gMSwwMDAsMDAwIHRyaWFscy4KKyAqLworCitzdGF0aWMgZG91YmxlIG5lZ19nYW0oZG91YmxlKTsKK3N0YXRpYyBkb3VibGUgc21hbGxfZ2FtKGRvdWJsZSk7CitzdGF0aWMgZG91YmxlIHNtYWxsZXJfZ2FtKGRvdWJsZSk7CitzdGF0aWMgc3RydWN0IERvdWJsZSBsYXJnZV9nYW0oZG91YmxlKTsKK3N0YXRpYyBzdHJ1Y3QgRG91YmxlIHJhdGZ1bl9nYW0oZG91YmxlLCBkb3VibGUpOworCisvKgorICogUmF0aW9uYWwgYXBwcm94aW1hdGlvbiwgQTAgKyB4KngqUCh4KS9RKHgpLCBvbiB0aGUgaW50ZXJ2YWwKKyAqIFsxLjA2Ni4uLCAyLjA2Ni4uXSBhY2N1cmF0ZSB0byA0LjI1ZS0xOS4KKyAqLworI2RlZmluZSBMRUZUIC0uMzk1NTA3ODEyNQkvKiBsZWZ0IGJvdW5kYXJ5IGZvciByYXQuIGFwcHJveCAqLworI2RlZmluZSB4MCAuNDYxNjMyMTQ0OTY4MzYyMzU2Nzg1CS8qIHhtaW4gLSAxICovCisKKyNkZWZpbmUgYTBfaGkgMC44ODU2MDMxOTQ0MTA4ODg3NDk5MgorI2RlZmluZSBhMF9sbyAtLjAwMDAwMDAwMDAwMDAwMDA0OTk2NDI3MDM2NDY5MDE5Njk1CisjZGVmaW5lIFAwCSA2LjIxMzg5NTcxODIxODIwODYzMDI5MDE3ODAwNzI3ZS0wMQorI2RlZmluZSBQMQkgMi42NTc1NzE5ODY1MTUzMzQ2NjEwNDk3OTE5NzU1M2UtMDEKKyNkZWZpbmUgUDIJIDUuNTM4NTk0NDY0Mjk5MTc0NjEwNjMzMDgwODE3NDhlLTAzCisjZGVmaW5lIFAzCSAxLjM4NDU2Njk4MzA0MDk2NTczODg3MTQ1MjgyODExZS0wMworI2RlZmluZSBQNAkgMi40MDY1OTk1MDAzMjcxMTM2NTgxOTM0ODk2OTgwOGUtMDMKKyNkZWZpbmUgUTAJIDEuNDUwMTk1MzEyNTAwMDAwMDAwMDAwMDAwMDAwMDBlKzAwCisjZGVmaW5lIFExCSAxLjA2MjU4NTIxOTQ4MDE2MTcxMzQzNDU0MDYxNTcxZSswMAorI2RlZmluZSBRMgktMi4wNzQ3NDU2MTk0Mzg1OTkzNjQ0MTQ2OTkyNjY0OWUtMDEKKyNkZWZpbmUgUTMJLTEuNDY3MzQxMzE3ODIwMDU0MjI1MDYyODc1NzMwMTVlLTAxCisjZGVmaW5lIFE0CSAzLjA3ODc4MTc2MTU2MTc1NTIwMzYxNTU3NTczNzc5ZS0wMgorI2RlZmluZSBRNQkgNS4xMjQ0OTM0Nzk4MDY2NjIyMTMzNjA1NDYzMzE4NGUtMDMKKyNkZWZpbmUgUTYJLTEuNzYwMTI3NDE0MzE2NjY5OTUwMTkyMjI4OTg4MzNlLTAzCisjZGVmaW5lIFE3CSA5LjM1MDIxMDIzNTczNzg4OTM1MzcyMTUzMDMwNTU2ZS0wNQorI2RlZmluZSBROAkgNi4xMzI3NTUwNzQ3MjQ0Mzk1ODkyNDc0NTY1MjIzOWUtMDYKKy8qCisgKiBDb25zdGFudHMgZm9yIGxhcmdlIHggYXBwcm94aW1hdGlvbiAoeCBpbiBbNiwgSW5mXSkKKyAqIChBY2N1cmF0ZSB0byAyLjgqMTBeLTE5IGFic29sdXRlKQorICovCisjZGVmaW5lIGxuczJwaV9oaSAwLjQxODk0NTMxMjUwMDAwMAorI2RlZmluZSBsbnMycGlfbG8gLS4wMDAwMDY3NzkyOTUzMjcyNTgyMTk2NzAyNjM1OTUKKyNkZWZpbmUgUGEwCSA4LjMzMzMzMzMzMzMzMzMzMTQ4Mjk2MTYyNTYyNDc0ZS0wMgorI2RlZmluZSBQYTEJLTIuNzc3Nzc3Nzc3NzQ1NDgxMjM1NzkzNzg5NjY0OTdlLTAzCisjZGVmaW5lIFBhMgkgNy45MzY1MDc3ODc1NDQzNTYzMTQ3NjI4Mjc4NjQyM2UtMDQKKyNkZWZpbmUgUGEzCS01Ljk1MjM1MDgyNTY2NjcyODQ3OTUwNzE3MjYyMjIyZS0wNAorI2RlZmluZSBQYTQJIDguNDE0Mjg1NjAzNDY2NTM3MDIxMzU4MjE4MDYyNTJlLTA0CisjZGVmaW5lIFBhNQktMS44OTc3MzUyNjQ2Mzg3OTIwMDM0ODg3MjA4OTQyMWUtMDMKKyNkZWZpbmUgUGE2CSA1LjY5Mzk0NDYzNDM5NDExNjQ5NDA4MDUwNjY0MDc4ZS0wMworI2RlZmluZSBQYTcJLTEuNDQ3MDU1NjI0MjE0Mjg5MTU0NTM4ODAzOTI3NjFlLTAyCisKK3N0YXRpYyBjb25zdCBkb3VibGUgemVybyA9IDAuLCBvbmUgPSAxLjAsIHRpbnkgPSAxZS0zMDA7CisKK2RvdWJsZQordGdhbW1hKHgpCisJZG91YmxlIHg7Cit7CisJc3RydWN0IERvdWJsZSB1OworCisJaWYgKHggPj0gNikgeworCQlpZih4ID4gMTcxLjYzKQorCQkJcmV0dXJuICh4IC8gemVybyk7CisJCXUgPSBsYXJnZV9nYW0oeCk7CisJCXJldHVybihfX2V4cF9fRCh1LmEsIHUuYikpOworCX0gZWxzZSBpZiAoeCA+PSAxLjAgKyBMRUZUICsgeDApCisJCXJldHVybiAoc21hbGxfZ2FtKHgpKTsKKwllbHNlIGlmICh4ID4gMS5lLTE3KQorCQlyZXR1cm4gKHNtYWxsZXJfZ2FtKHgpKTsKKwllbHNlIGlmICh4ID4gLTEuZS0xNykgeworCQlpZiAoeCAhPSAwLjApCisJCQl1LmEgPSBvbmUgLSB0aW55OwkvKiByYWlzZSBpbmV4YWN0ICovCisJCXJldHVybiAob25lL3gpOworCX0gZWxzZSBpZiAoIWZpbml0ZSh4KSkKKwkJcmV0dXJuICh4IC0geCk7CQkvKiB4IGlzIE5hTiBvciAtSW5mICovCisJZWxzZQorCQlyZXR1cm4gKG5lZ19nYW0oeCkpOworfQorLyoKKyAqIEFjY3VyYXRlIHRvIG1heCh1bHAoMS8xMjgpIGFic29sdXRlLCAyXi02NiByZWxhdGl2ZSkgZXJyb3IuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgRG91YmxlCitsYXJnZV9nYW0oeCkKKwlkb3VibGUgeDsKK3sKKwlkb3VibGUgeiwgcDsKKwlzdHJ1Y3QgRG91YmxlIHQsIHUsIHY7CisKKwl6ID0gb25lLyh4KngpOworCXAgPSBQYTAreiooUGExK3oqKFBhMit6KihQYTMreiooUGE0K3oqKFBhNSt6KihQYTYreipQYTcpKSkpKSk7CisJcCA9IHAveDsKKworCXUgPSBfX2xvZ19fRCh4KTsKKwl1LmEgLT0gb25lOworCXYuYSA9ICh4IC09IC41KTsKKwlUUlVOQyh2LmEpOworCXYuYiA9IHggLSB2LmE7CisJdC5hID0gdi5hKnUuYTsJCQkvKiB0ID0gKHgtLjUpKihsb2coeCktMSkgKi8KKwl0LmIgPSB2LmIqdS5hICsgeCp1LmI7CisJLyogcmV0dXJuIHQuYSArIHQuYiArIGxuczJwaV9oaSArIGxuczJwaV9sbyArIHAgKi8KKwl0LmIgKz0gbG5zMnBpX2xvOyB0LmIgKz0gcDsKKwl1LmEgPSBsbnMycGlfaGkgKyB0LmI7IHUuYSArPSB0LmE7CisJdS5iID0gdC5hIC0gdS5hOworCXUuYiArPSBsbnMycGlfaGk7IHUuYiArPSB0LmI7CisJcmV0dXJuICh1KTsKK30KKy8qCisgKiBHb29kIHRvIDwgMSB1bHAuICAocHJvdmFibHkgLjkwIHVscDsgLjg3IHVscCBvbiAxLDAwMCwwMDAgcnVucy4pCisgKiBJdCBhbHNvIGhhcyBjb3JyZWN0IG1vbm90b25pY2l0eS4KKyAqLworc3RhdGljIGRvdWJsZQorc21hbGxfZ2FtKHgpCisJZG91YmxlIHg7Cit7CisJZG91YmxlIHksIHltMSwgdDsKKwlzdHJ1Y3QgRG91YmxlIHl5LCByOworCXkgPSB4IC0gb25lOworCXltMSA9IHkgLSBvbmU7CisJaWYgKHkgPD0gMS4wICsgKExFRlQgKyB4MCkpIHsKKwkJeXkgPSByYXRmdW5fZ2FtKHkgLSB4MCwgMCk7CisJCXJldHVybiAoeXkuYSArIHl5LmIpOworCX0KKwlyLmEgPSB5OworCVRSVU5DKHIuYSk7CisJeXkuYSA9IHIuYSAtIG9uZTsKKwl5ID0geW0xOworCXl5LmIgPSByLmIgPSB5IC0geXkuYTsKKwkvKiBBcmd1bWVudCByZWR1Y3Rpb246IEcoeCsxKSA9IHgqRyh4KSAqLworCWZvciAoeW0xID0geS1vbmU7IHltMSA+IExFRlQgKyB4MDsgeSA9IHltMS0tLCB5eS5hLS0pIHsKKwkJdCA9IHIuYSp5eS5hOworCQlyLmIgPSByLmEqeXkuYiArIHkqci5iOworCQlyLmEgPSB0OworCQlUUlVOQyhyLmEpOworCQlyLmIgKz0gKHQgLSByLmEpOworCX0KKwkvKiBSZXR1cm4gcip0Z2FtbWEoeSkuICovCisJeXkgPSByYXRmdW5fZ2FtKHkgLSB4MCwgMCk7CisJeSA9IHIuYiooeXkuYSArIHl5LmIpICsgci5hKnl5LmI7CisJeSArPSB5eS5hKnIuYTsKKwlyZXR1cm4gKHkpOworfQorLyoKKyAqIEdvb2Qgb24gKDAsIDEreDArTEVGVF0uICBBY2N1cmF0ZSB0byAxdWxwLgorICovCitzdGF0aWMgZG91YmxlCitzbWFsbGVyX2dhbSh4KQorCWRvdWJsZSB4OworeworCWRvdWJsZSB0LCBkOworCXN0cnVjdCBEb3VibGUgciwgeHg7CisJaWYgKHggPCB4MCArIExFRlQpIHsKKwkJdCA9IHgsIFRSVU5DKHQpOworCQlkID0gKHQreCkqKHgtdCk7CisJCXQgKj0gdDsKKwkJeHguYSA9ICh0ICsgeCksIFRSVU5DKHh4LmEpOworCQl4eC5iID0geCAtIHh4LmE7IHh4LmIgKz0gdDsgeHguYiArPSBkOworCQl0ID0gKG9uZS14MCk7IHQgKz0geDsKKwkJZCA9IChvbmUteDApOyBkIC09IHQ7IGQgKz0geDsKKwkJeCA9IHh4LmEgKyB4eC5iOworCX0gZWxzZSB7CisJCXh4LmEgPSAgeCwgVFJVTkMoeHguYSk7CisJCXh4LmIgPSB4IC0geHguYTsKKwkJdCA9IHggLSB4MDsKKwkJZCA9ICgteDAgLXQpOyBkICs9IHg7CisJfQorCXIgPSByYXRmdW5fZ2FtKHQsIGQpOworCWQgPSByLmEveCwgVFJVTkMoZCk7CisJci5hIC09IGQqeHguYTsgci5hIC09IGQqeHguYjsgci5hICs9IHIuYjsKKwlyZXR1cm4gKGQgKyByLmEveCk7Cit9CisvKgorICogcmV0dXJucyAoeitjKV4yICogUCh6KS9RKHopICsgYTAKKyAqLworc3RhdGljIHN0cnVjdCBEb3VibGUKK3JhdGZ1bl9nYW0oeiwgYykKKwlkb3VibGUgeiwgYzsKK3sKKwlkb3VibGUgcCwgcTsKKwlzdHJ1Y3QgRG91YmxlIHIsIHQ7CisKKwlxID0gUTAgK3oqKFExK3oqKFEyK3oqKFEzK3oqKFE0K3oqKFE1K3oqKFE2K3oqKFE3K3oqUTgpKSkpKSkpOworCXAgPSBQMCArIHoqKFAxICsgeiooUDIgKyB6KihQMyArIHoqUDQpKSk7CisKKwkvKiByZXR1cm4gci5hICsgci5iID0gYTAgKyAoeitjKV4yKnAvcSwgd2l0aCByLmEgdHJ1bmNhdGVkIHRvIDI2IGJpdHMuICovCisJcCA9IHAvcTsKKwl0LmEgPSB6LCBUUlVOQyh0LmEpOwkJLyogdCB+PSB6ICsgYyAqLworCXQuYiA9ICh6IC0gdC5hKSArIGM7CisJdC5iICo9ICh0LmEgKyB6KTsKKwlxID0gKHQuYSAqPSB0LmEpOwkJLyogdCA9ICh6K2MpXjIgKi8KKwlUUlVOQyh0LmEpOworCXQuYiArPSAocSAtIHQuYSk7CisJci5hID0gcCwgVFJVTkMoci5hKTsJCS8qIHIgPSBQL1EgKi8KKwlyLmIgPSBwIC0gci5hOworCXQuYiA9IHQuYipwICsgdC5hKnIuYiArIGEwX2xvOworCXQuYSAqPSByLmE7CQkJLyogdCA9ICh6K2MpXjIqKFAvUSkgKi8KKwlyLmEgPSB0LmEgKyBhMF9oaSwgVFJVTkMoci5hKTsKKwlyLmIgPSAoKGEwX2hpLXIuYSkgKyB0LmEpICsgdC5iOworCXJldHVybiAocik7CQkJLyogciA9IGEwICsgdCAqLworfQorCitzdGF0aWMgZG91YmxlCituZWdfZ2FtKHgpCisJZG91YmxlIHg7Cit7CisJaW50IHNnbiA9IDE7CisJc3RydWN0IERvdWJsZSBsZywgbHNpbmU7CisJZG91YmxlIHksIHo7CisKKwl5ID0gY2VpbCh4KTsKKwlpZiAoeSA9PSB4KQkJLyogTmVnYXRpdmUgaW50ZWdlci4gKi8KKwkJcmV0dXJuICgoeCAtIHgpIC8gemVybyk7CisJeiA9IHkgLSB4OworCWlmICh6ID4gMC41KQorCQl6ID0gb25lIC0gejsKKwl5ID0gMC41ICogeTsKKwlpZiAoeSA9PSBjZWlsKHkpKQorCQlzZ24gPSAtMTsKKwlpZiAoeiA8IC4yNSkKKwkJeiA9IHNpbihNX1BJKnopOworCWVsc2UKKwkJeiA9IGNvcyhNX1BJKigwLjUteikpOworCS8qIFNwZWNpYWwgY2FzZTogRygxLXgpID0gSW5mOyBHKHgpIG1heSBiZSBub256ZXJvLiAqLworCWlmICh4IDwgLTE3MCkgeworCQlpZiAoeCA8IC0xOTApCisJCQlyZXR1cm4gKChkb3VibGUpc2duKnRpbnkqdGlueSk7CisJCXkgPSBvbmUgLSB4OwkJLyogZXhhY3Q6IDEyOCA8IHx4fCA8IDI1NSAqLworCQlsZyA9IGxhcmdlX2dhbSh5KTsKKwkJbHNpbmUgPSBfX2xvZ19fRChNX1BJL3opOwkvKiA9IFRSVU5DKGxvZyh1KSkgKyBzbWFsbCAqLworCQlsZy5hIC09IGxzaW5lLmE7CQkvKiBleGFjdCAob3Bwb3NpdGUgc2lnbnMpICovCisJCWxnLmIgLT0gbHNpbmUuYjsKKwkJeSA9IC0obGcuYSArIGxnLmIpOworCQl6ID0gKHkgKyBsZy5hKSArIGxnLmI7CisJCXkgPSBfX2V4cF9fRCh5LCB6KTsKKwkJaWYgKHNnbiA8IDApIHkgPSAteTsKKwkJcmV0dXJuICh5KTsKKwl9CisJeSA9IG9uZS14OworCWlmIChvbmUteSA9PSB4KQorCQl5ID0gdGdhbW1hKHkpOworCWVsc2UJCS8qIDEteCBpcyBpbmV4YWN0ICovCisJCXkgPSAteCp0Z2FtbWEoLXgpOworCWlmIChzZ24gPCAwKSB5ID0gLXk7CisJcmV0dXJuIChNX1BJIC8gKHkqeikpOworfQpkaWZmIC0tZ2l0IGEvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL2JzZHNyYy9tYXRoaW1wbC5oIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL2JzZHNyYy9tYXRoaW1wbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0YTRiNmUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vYnNkc3JjL21hdGhpbXBsLmgKQEAgLTAsMCArMSw3NCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMTk4OCwgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKKyAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKKyAqCVRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIFVuaXZlcnNpdHkgb2YKKyAqCUNhbGlmb3JuaWEsIEJlcmtlbGV5IGFuZCBpdHMgY29udHJpYnV0b3JzLgorICogNC4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKglAKCMpbWF0aGltcGwuaAk4LjEgKEJlcmtlbGV5KSA2LzQvOTMKKyAqICRGcmVlQlNEJAorICovCisKKyNpZm5kZWYgX01BVEhJTVBMX0hfCisjZGVmaW5lCV9NQVRISU1QTF9IXworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisjaW5jbHVkZSA8bWF0aC5oPgorCisjaW5jbHVkZSAiLi4vc3JjL21hdGhfcHJpdmF0ZS5oIgorCisvKgorICogVFJVTkMoKSBpcyBhIG1hY3JvIHRoYXQgc2V0cyB0aGUgdHJhaWxpbmcgMjcgYml0cyBpbiB0aGUgbWFudGlzc2Egb2YgYW4KKyAqIElFRUUgZG91YmxlIHZhcmlhYmxlIHRvIHplcm8uICBJdCBtdXN0IGJlIGV4cHJlc3Npb24tbGlrZSBmb3Igc3ludGFjdGljCisgKiByZWFzb25zLCBhbmQgd2UgaW1wbGVtZW50IHRoaXMgZXhwcmVzc2lvbiB1c2luZyBhbiBpbmxpbmUgZnVuY3Rpb24KKyAqIGluc3RlYWQgb2YgYSBwdXJlIG1hY3JvIHRvIGF2b2lkIGRlcGVuZGluZyBvbiB0aGUgZ2NjIGZlYXR1cmUgb2YKKyAqIHN0YXRlbWVudC1leHByZXNzaW9ucy4KKyAqLworI2RlZmluZQlUUlVOQyhkKQkoX2JfdHJ1bmMoJihkKSkpCisKK3N0YXRpYyBfX2lubGluZSB2b2lkCitfYl90cnVuYyh2b2xhdGlsZSBkb3VibGUgKl9kcCkKK3sKKwl1aW50MzJfdCBfbHc7CisKKwlHRVRfTE9XX1dPUkQoX2x3LCAqX2RwKTsKKwlTRVRfTE9XX1dPUkQoKl9kcCwgX2x3ICYgMHhmODAwMDAwMCk7Cit9CisKK3N0cnVjdCBEb3VibGUgeworCWRvdWJsZQlhOworCWRvdWJsZQliOworfTsKKworLyoKKyAqIEZ1bmN0aW9ucyBpbnRlcm5hbCB0byB0aGUgbWF0aCBwYWNrYWdlLCB5ZXQgbm90IHN0YXRpYy4KKyAqLworZG91YmxlCV9fZXhwX19EKGRvdWJsZSwgZG91YmxlKTsKK3N0cnVjdCBEb3VibGUgX19sb2dfX0QoZG91YmxlKTsKKworI2VuZGlmIC8qICFfTUFUSElNUExfSF8gKi8KZGlmZiAtLWdpdCBhL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvZV9hY29zLmMgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL2VfYWNvcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmNmRjYTUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL2VfYWNvcy5jCkBAIC0wLDAgKzEsMTExIEBACisKKy8qIEAoIyllX2Fjb3MuYyAxLjMgOTUvMDEvMTggKi8KKy8qCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBDb3B5cmlnaHQgKEMpIDE5OTMgYnkgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIERldmVsb3BlZCBhdCBTdW5Tb2Z0LCBhIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gYnVzaW5lc3MuCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCisgKiBzb2Z0d2FyZSBpcyBmcmVlbHkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGlzIG5vdGljZSAKKyAqIGlzIHByZXNlcnZlZC4KKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CitfX0ZCU0RJRCgiJEZyZWVCU0QkIik7CisKKy8qIF9faWVlZTc1NF9hY29zKHgpCisgKiBNZXRob2QgOiAgICAgICAgICAgICAgICAgIAorICoJYWNvcyh4KSAgPSBwaS8yIC0gYXNpbih4KQorICoJYWNvcygteCkgPSBwaS8yICsgYXNpbih4KQorICogRm9yIHx4fDw9MC41CisgKglhY29zKHgpID0gcGkvMiAtICh4ICsgeCp4XjIqUih4XjIpKQkoc2VlIGFzaW4uYykKKyAqIEZvciB4PjAuNQorICogCWFjb3MoeCkgPSBwaS8yIC0gKHBpLzIgLSAyYXNpbihzcXJ0KCgxLXgpLzIpKSkKKyAqCQk9IDJhc2luKHNxcnQoKDEteCkvMikpICAKKyAqCQk9IDJzICsgMnMqeipSKHopIAkuLi56PSgxLXgpLzIsIHM9c3FydCh6KQorICoJCT0gMmYgKyAoMmMgKyAycyp6KlIoeikpCisgKiAgICAgd2hlcmUgZj1oaSBwYXJ0IG9mIHMsIGFuZCBjID0gKHotZipmKS8ocytmKSBpcyB0aGUgY29ycmVjdGlvbiB0ZXJtCisgKiAgICAgZm9yIGYgc28gdGhhdCBmK2MgfiBzcXJ0KHopLgorICogRm9yIHg8LTAuNQorICoJYWNvcyh4KSA9IHBpIC0gMmFzaW4oc3FydCgoMS18eHwpLzIpKQorICoJCT0gcGkgLSAwLjUqKHMrcyp6KlIoeikpLCB3aGVyZSB6PSgxLXx4fCkvMixzPXNxcnQoeikKKyAqCisgKiBTcGVjaWFsIGNhc2VzOgorICoJaWYgeCBpcyBOYU4sIHJldHVybiB4IGl0c2VsZjsKKyAqCWlmIHx4fD4xLCByZXR1cm4gTmFOIHdpdGggaW52YWxpZCBzaWduYWwuCisgKgorICogRnVuY3Rpb24gbmVlZGVkOiBzcXJ0CisgKi8KKworI2luY2x1ZGUgPGZsb2F0Lmg+CisKKyNpbmNsdWRlICJtYXRoLmgiCisjaW5jbHVkZSAibWF0aF9wcml2YXRlLmgiCisKK3N0YXRpYyBjb25zdCBkb3VibGUKK29uZT0gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDBlKzAwLCAvKiAweDNGRjAwMDAwLCAweDAwMDAwMDAwICovCitwaSA9ICAzLjE0MTU5MjY1MzU4OTc5MzExNjAwZSswMCwgLyogMHg0MDA5MjFGQiwgMHg1NDQ0MkQxOCAqLworcGlvMl9oaSA9ICAxLjU3MDc5NjMyNjc5NDg5NjU1ODAwZSswMDsgLyogMHgzRkY5MjFGQiwgMHg1NDQ0MkQxOCAqLworc3RhdGljIHZvbGF0aWxlIGRvdWJsZQorcGlvMl9sbyA9ICA2LjEyMzIzMzk5NTczNjc2NjAzNTg3ZS0xNzsgLyogMHgzQzkxQTYyNiwgMHgzMzE0NUMwNyAqLworc3RhdGljIGNvbnN0IGRvdWJsZQorcFMwID0gIDEuNjY2NjY2NjY2NjY2NjY2NTc0MTVlLTAxLCAvKiAweDNGQzU1NTU1LCAweDU1NTU1NTU1ICovCitwUzEgPSAtMy4yNTU2NTgxODYyMjQwMDkxNTQwNWUtMDEsIC8qIDB4QkZENEQ2MTIsIDB4MDNFQjZGN0QgKi8KK3BTMiA9ICAyLjAxMjEyNTMyMTM0ODYyOTI1ODgxZS0wMSwgLyogMHgzRkM5QzE1NSwgMHgwRTg4NDQ1NSAqLworcFMzID0gLTQuMDA1NTUzNDUwMDY3OTQxMTQwMjdlLTAyLCAvKiAweEJGQTQ4MjI4LCAweEI1Njg4RjNCICovCitwUzQgPSAgNy45MTUzNDk5NDI4OTgxNDUzMjE3NmUtMDQsIC8qIDB4M0Y0OUVGRTAsIDB4NzUwMUIyODggKi8KK3BTNSA9ICAzLjQ3OTMzMTA3NTk2MDIxMTY3NTcwZS0wNSwgLyogMHgzRjAyM0RFMSwgMHgwREZERjcwOSAqLworcVMxID0gLTIuNDAzMzk0OTExNzM0NDE0MjE4NzhlKzAwLCAvKiAweEMwMDMzQTI3LCAweDFDOEEyRDRCICovCitxUzIgPSAgMi4wMjA5NDU3NjAyMzM1MDU2OTQ3MWUrMDAsIC8qIDB4NDAwMDJBRTUsIDB4OUM1OThBQzggKi8KK3FTMyA9IC02Ljg4MjgzOTcxNjA1NDUzMjkzMDMwZS0wMSwgLyogMHhCRkU2MDY2QywgMHgxQjhEMDE1OSAqLworcVM0ID0gIDcuNzAzODE1MDU1NTkwMTkzNTI3OTFlLTAyOyAvKiAweDNGQjNCOEM1LCAweEIxMkU5MjgyICovCisKK2RvdWJsZQorX19pZWVlNzU0X2Fjb3MoZG91YmxlIHgpCit7CisJZG91YmxlIHoscCxxLHIsdyxzLGMsZGY7CisJaW50MzJfdCBoeCxpeDsKKwlHRVRfSElHSF9XT1JEKGh4LHgpOworCWl4ID0gaHgmMHg3ZmZmZmZmZjsKKwlpZihpeD49MHgzZmYwMDAwMCkgewkvKiB8eHwgPj0gMSAqLworCSAgICB1X2ludDMyX3QgbHg7CisJICAgIEdFVF9MT1dfV09SRChseCx4KTsKKwkgICAgaWYoKChpeC0weDNmZjAwMDAwKXxseCk9PTApIHsJLyogfHh8PT0xICovCisJCWlmKGh4PjApIHJldHVybiAwLjA7CQkvKiBhY29zKDEpID0gMCAgKi8KKwkJZWxzZSByZXR1cm4gcGkrMi4wKnBpbzJfbG87CS8qIGFjb3MoLTEpPSBwaSAqLworCSAgICB9CisJICAgIHJldHVybiAoeC14KS8oeC14KTsJCS8qIGFjb3MofHh8PjEpIGlzIE5hTiAqLworCX0KKwlpZihpeDwweDNmZTAwMDAwKSB7CS8qIHx4fCA8IDAuNSAqLworCSAgICBpZihpeDw9MHgzYzYwMDAwMCkgcmV0dXJuIHBpbzJfaGkrcGlvMl9sbzsvKmlmfHh8PDIqKi01NyovCisJICAgIHogPSB4Kng7CisJICAgIHAgPSB6KihwUzAreioocFMxK3oqKHBTMit6KihwUzMreioocFM0K3oqcFM1KSkpKSk7CisJICAgIHEgPSBvbmUreioocVMxK3oqKHFTMit6KihxUzMreipxUzQpKSk7CisJICAgIHIgPSBwL3E7CisJICAgIHJldHVybiBwaW8yX2hpIC0gKHggLSAocGlvMl9sby14KnIpKTsKKwl9IGVsc2UgIGlmIChoeDwwKSB7CQkvKiB4IDwgLTAuNSAqLworCSAgICB6ID0gKG9uZSt4KSowLjU7CisJICAgIHAgPSB6KihwUzAreioocFMxK3oqKHBTMit6KihwUzMreioocFM0K3oqcFM1KSkpKSk7CisJICAgIHEgPSBvbmUreioocVMxK3oqKHFTMit6KihxUzMreipxUzQpKSk7CisJICAgIHMgPSBzcXJ0KHopOworCSAgICByID0gcC9xOworCSAgICB3ID0gcipzLXBpbzJfbG87CisJICAgIHJldHVybiBwaSAtIDIuMCoocyt3KTsKKwl9IGVsc2UgewkJCS8qIHggPiAwLjUgKi8KKwkgICAgeiA9IChvbmUteCkqMC41OworCSAgICBzID0gc3FydCh6KTsKKwkgICAgZGYgPSBzOworCSAgICBTRVRfTE9XX1dPUkQoZGYsMCk7CisJICAgIGMgID0gKHotZGYqZGYpLyhzK2RmKTsKKwkgICAgcCA9IHoqKHBTMCt6KihwUzEreioocFMyK3oqKHBTMyt6KihwUzQreipwUzUpKSkpKTsKKwkgICAgcSA9IG9uZSt6KihxUzEreioocVMyK3oqKHFTMyt6KnFTNCkpKTsKKwkgICAgciA9IHAvcTsKKwkgICAgdyA9IHIqcytjOworCSAgICByZXR1cm4gMi4wKihkZit3KTsKKwl9Cit9CisKKyNpZiBMREJMX01BTlRfRElHID09IDUzCitfX3dlYWtfcmVmZXJlbmNlKGFjb3MsIGFjb3NsKTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9lX2Fjb3NmLmMgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL2VfYWNvc2YuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOWY2MmNjCi0tLSAvZGV2L251bGwKKysrIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9lX2Fjb3NmLmMKQEAgLTAsMCArMSw3NyBAQAorLyogZV9hY29zZi5jIC0tIGZsb2F0IHZlcnNpb24gb2YgZV9hY29zLmMuCisgKiBDb252ZXJzaW9uIHRvIGZsb2F0IGJ5IElhbiBMYW5jZSBUYXlsb3IsIEN5Z251cyBTdXBwb3J0LCBpYW5AY3lnbnVzLmNvbS4KKyAqLworCisvKgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogQ29weXJpZ2h0IChDKSAxOTkzIGJ5IFN1biBNaWNyb3N5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBEZXZlbG9wZWQgYXQgU3VuUHJvLCBhIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gYnVzaW5lc3MuCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCisgKiBzb2Z0d2FyZSBpcyBmcmVlbHkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGlzIG5vdGljZQorICogaXMgcHJlc2VydmVkLgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJTRCQiKTsKKworI2luY2x1ZGUgIm1hdGguaCIKKyNpbmNsdWRlICJtYXRoX3ByaXZhdGUuaCIKKworc3RhdGljIGNvbnN0IGZsb2F0CitvbmUgPSAgMS4wMDAwMDAwMDAwZSswMCwgLyogMHgzRjgwMDAwMCAqLworcGkgPSAgMy4xNDE1OTI1MDI2ZSswMCwgLyogMHg0MDQ5MGZkYSAqLworcGlvMl9oaSA9ICAxLjU3MDc5NjI1MTNlKzAwOyAvKiAweDNmYzkwZmRhICovCitzdGF0aWMgdm9sYXRpbGUgZmxvYXQKK3BpbzJfbG8gPSAgNy41NDk3ODk0MTU5ZS0wODsgLyogMHgzM2EyMjE2OCAqLworc3RhdGljIGNvbnN0IGZsb2F0CitwUzAgPSAgMS42NjY2NTg2Njk3ZS0wMSwKK3BTMSA9IC00LjI3NDM0MjIwOTFlLTAyLAorcFMyID0gLTguNjU2MzYzMDAzMGUtMDMsCitxUzEgPSAtNy4wNjYyOTYzMzkwZS0wMTsKKworZmxvYXQKK19faWVlZTc1NF9hY29zZihmbG9hdCB4KQoreworCWZsb2F0IHoscCxxLHIsdyxzLGMsZGY7CisJaW50MzJfdCBoeCxpeDsKKwlHRVRfRkxPQVRfV09SRChoeCx4KTsKKwlpeCA9IGh4JjB4N2ZmZmZmZmY7CisJaWYoaXg+PTB4M2Y4MDAwMDApIHsJCS8qIHx4fCA+PSAxICovCisJICAgIGlmKGl4PT0weDNmODAwMDAwKSB7CS8qIHx4fCA9PSAxICovCisJCWlmKGh4PjApIHJldHVybiAwLjA7CS8qIGFjb3MoMSkgPSAwICovCisJCWVsc2UgcmV0dXJuIHBpKyhmbG9hdCkyLjAqcGlvMl9sbzsJLyogYWNvcygtMSk9IHBpICovCisJICAgIH0KKwkgICAgcmV0dXJuICh4LXgpLyh4LXgpOwkJLyogYWNvcyh8eHw+MSkgaXMgTmFOICovCisJfQorCWlmKGl4PDB4M2YwMDAwMDApIHsJLyogfHh8IDwgMC41ICovCisJICAgIGlmKGl4PD0weDMyODAwMDAwKSByZXR1cm4gcGlvMl9oaStwaW8yX2xvOy8qaWZ8eHw8MioqLTI2Ki8KKwkgICAgeiA9IHgqeDsKKwkgICAgcCA9IHoqKHBTMCt6KihwUzEreipwUzIpKTsKKwkgICAgcSA9IG9uZSt6KnFTMTsKKwkgICAgciA9IHAvcTsKKwkgICAgcmV0dXJuIHBpbzJfaGkgLSAoeCAtIChwaW8yX2xvLXgqcikpOworCX0gZWxzZSAgaWYgKGh4PDApIHsJCS8qIHggPCAtMC41ICovCisJICAgIHogPSAob25lK3gpKihmbG9hdCkwLjU7CisJICAgIHAgPSB6KihwUzAreioocFMxK3oqcFMyKSk7CisJICAgIHEgPSBvbmUreipxUzE7CisJICAgIHMgPSBzcXJ0Zih6KTsKKwkgICAgciA9IHAvcTsKKwkgICAgdyA9IHIqcy1waW8yX2xvOworCSAgICByZXR1cm4gcGkgLSAoZmxvYXQpMi4wKihzK3cpOworCX0gZWxzZSB7CQkJLyogeCA+IDAuNSAqLworCSAgICBpbnQzMl90IGlkZjsKKwkgICAgeiA9IChvbmUteCkqKGZsb2F0KTAuNTsKKwkgICAgcyA9IHNxcnRmKHopOworCSAgICBkZiA9IHM7CisJICAgIEdFVF9GTE9BVF9XT1JEKGlkZixkZik7CisJICAgIFNFVF9GTE9BVF9XT1JEKGRmLGlkZiYweGZmZmZmMDAwKTsKKwkgICAgYyAgPSAoei1kZipkZikvKHMrZGYpOworCSAgICBwID0geioocFMwK3oqKHBTMSt6KnBTMikpOworCSAgICBxID0gb25lK3oqcVMxOworCSAgICByID0gcC9xOworCSAgICB3ID0gcipzK2M7CisJICAgIHJldHVybiAoZmxvYXQpMi4wKihkZit3KTsKKwl9Cit9CmRpZmYgLS1naXQgYS9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL2VfYWNvc2guYyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvZV9hY29zaC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1OGM4YmQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL2VfYWNvc2guYwpAQCAtMCwwICsxLDY4IEBACisKKy8qIEAoIyllX2Fjb3NoLmMgMS4zIDk1LzAxLzE4ICovCisvKgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogQ29weXJpZ2h0IChDKSAxOTkzIGJ5IFN1biBNaWNyb3N5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBEZXZlbG9wZWQgYXQgU3VuU29mdCwgYSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGJ1c2luZXNzLgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcworICogc29mdHdhcmUgaXMgZnJlZWx5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhpcyBub3RpY2UgCisgKiBpcyBwcmVzZXJ2ZWQuCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKgorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJTRCQiKTsKKworLyogX19pZWVlNzU0X2Fjb3NoKHgpCisgKiBNZXRob2QgOgorICoJQmFzZWQgb24gCisgKgkJYWNvc2goeCkgPSBsb2cgWyB4ICsgc3FydCh4KngtMSkgXQorICoJd2UgaGF2ZQorICoJCWFjb3NoKHgpIDo9IGxvZyh4KStsbjIsCWlmIHggaXMgbGFyZ2U7IGVsc2UKKyAqCQlhY29zaCh4KSA6PSBsb2coMngtMS8oc3FydCh4KngtMSkreCkpIGlmIHg+MjsgZWxzZQorICoJCWFjb3NoKHgpIDo9IGxvZzFwKHQrc3FydCgyLjAqdCt0KnQpKTsgd2hlcmUgdD14LTEuCisgKgorICogU3BlY2lhbCBjYXNlczoKKyAqCWFjb3NoKHgpIGlzIE5hTiB3aXRoIHNpZ25hbCBpZiB4PDEuCisgKglhY29zaChOYU4pIGlzIE5hTiB3aXRob3V0IHNpZ25hbC4KKyAqLworCisjaW5jbHVkZSA8ZmxvYXQuaD4KKworI2luY2x1ZGUgIm1hdGguaCIKKyNpbmNsdWRlICJtYXRoX3ByaXZhdGUuaCIKKworc3RhdGljIGNvbnN0IGRvdWJsZQorb25lCT0gMS4wLAorbG4yCT0gNi45MzE0NzE4MDU1OTk0NTI4NjIyN2UtMDE7ICAvKiAweDNGRTYyRTQyLCAweEZFRkEzOUVGICovCisKK2RvdWJsZQorX19pZWVlNzU0X2Fjb3NoKGRvdWJsZSB4KQoreworCWRvdWJsZSB0OworCWludDMyX3QgaHg7CisJdV9pbnQzMl90IGx4OworCUVYVFJBQ1RfV09SRFMoaHgsbHgseCk7CisJaWYoaHg8MHgzZmYwMDAwMCkgewkJLyogeCA8IDEgKi8KKwkgICAgcmV0dXJuICh4LXgpLyh4LXgpOworCX0gZWxzZSBpZihoeCA+PTB4NDFiMDAwMDApIHsJLyogeCA+IDIqKjI4ICovCisJICAgIGlmKGh4ID49MHg3ZmYwMDAwMCkgewkvKiB4IGlzIGluZiBvZiBOYU4gKi8KKwkgICAgICAgIHJldHVybiB4K3g7CisJICAgIH0gZWxzZSAKKwkJcmV0dXJuIF9faWVlZTc1NF9sb2coeCkrbG4yOwkvKiBhY29zaChodWdlKT1sb2coMngpICovCisJfSBlbHNlIGlmKCgoaHgtMHgzZmYwMDAwMCl8bHgpPT0wKSB7CisJICAgIHJldHVybiAwLjA7CQkJLyogYWNvc2goMSkgPSAwICovCisJfSBlbHNlIGlmIChoeCA+IDB4NDAwMDAwMDApIHsJLyogMioqMjggPiB4ID4gMiAqLworCSAgICB0PXgqeDsKKwkgICAgcmV0dXJuIF9faWVlZTc1NF9sb2coMi4wKngtb25lLyh4K3NxcnQodC1vbmUpKSk7CisJfSBlbHNlIHsJCQkvKiAxPHg8MiAqLworCSAgICB0ID0geC1vbmU7CisJICAgIHJldHVybiBsb2cxcCh0K3NxcnQoMi4wKnQrdCp0KSk7CisJfQorfQorCisjaWYgTERCTF9NQU5UX0RJRyA9PSA1MworX193ZWFrX3JlZmVyZW5jZShhY29zaCwgYWNvc2hsKTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9lX2Fjb3NoZi5jIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9lX2Fjb3NoZi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1MjliMjAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL2VfYWNvc2hmLmMKQEAgLTAsMCArMSw0OCBAQAorLyogZV9hY29zaGYuYyAtLSBmbG9hdCB2ZXJzaW9uIG9mIGVfYWNvc2guYy4KKyAqIENvbnZlcnNpb24gdG8gZmxvYXQgYnkgSWFuIExhbmNlIFRheWxvciwgQ3lnbnVzIFN1cHBvcnQsIGlhbkBjeWdudXMuY29tLgorICovCisKKy8qCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBDb3B5cmlnaHQgKEMpIDE5OTMgYnkgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIERldmVsb3BlZCBhdCBTdW5Qcm8sIGEgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBidXNpbmVzcy4KKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKKyAqIHNvZnR3YXJlIGlzIGZyZWVseSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoaXMgbm90aWNlCisgKiBpcyBwcmVzZXJ2ZWQuCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorX19GQlNESUQoIiRGcmVlQlNEJCIpOworCisjaW5jbHVkZSAibWF0aC5oIgorI2luY2x1ZGUgIm1hdGhfcHJpdmF0ZS5oIgorCitzdGF0aWMgY29uc3QgZmxvYXQKK29uZQk9IDEuMCwKK2xuMgk9IDYuOTMxNDcxODI0NmUtMDE7ICAvKiAweDNmMzE3MjE4ICovCisKK2Zsb2F0CitfX2llZWU3NTRfYWNvc2hmKGZsb2F0IHgpCit7CisJZmxvYXQgdDsKKwlpbnQzMl90IGh4OworCUdFVF9GTE9BVF9XT1JEKGh4LHgpOworCWlmKGh4PDB4M2Y4MDAwMDApIHsJCS8qIHggPCAxICovCisJICAgIHJldHVybiAoeC14KS8oeC14KTsKKwl9IGVsc2UgaWYoaHggPj0weDRkODAwMDAwKSB7CS8qIHggPiAyKioyOCAqLworCSAgICBpZihoeCA+PTB4N2Y4MDAwMDApIHsJLyogeCBpcyBpbmYgb2YgTmFOICovCisJICAgICAgICByZXR1cm4geCt4OworCSAgICB9IGVsc2UKKwkJcmV0dXJuIF9faWVlZTc1NF9sb2dmKHgpK2xuMjsJLyogYWNvc2goaHVnZSk9bG9nKDJ4KSAqLworCX0gZWxzZSBpZiAoaHg9PTB4M2Y4MDAwMDApIHsKKwkgICAgcmV0dXJuIDAuMDsJCQkvKiBhY29zaCgxKSA9IDAgKi8KKwl9IGVsc2UgaWYgKGh4ID4gMHg0MDAwMDAwMCkgewkvKiAyKioyOCA+IHggPiAyICovCisJICAgIHQ9eCp4OworCSAgICByZXR1cm4gX19pZWVlNzU0X2xvZ2YoKGZsb2F0KTIuMCp4LW9uZS8oeCtfX2llZWU3NTRfc3FydGYodC1vbmUpKSk7CisJfSBlbHNlIHsJCQkvKiAxPHg8MiAqLworCSAgICB0ID0geC1vbmU7CisJICAgIHJldHVybiBsb2cxcGYodCtfX2llZWU3NTRfc3FydGYoKGZsb2F0KTIuMCp0K3QqdCkpOworCX0KK30KZGlmZiAtLWdpdCBhL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvZV9hY29zbC5jIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9lX2Fjb3NsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDMzYzhmZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvZV9hY29zbC5jCkBAIC0wLDAgKzEsODcgQEAKKworLyogQCgjKWVfYWNvcy5jIDEuMyA5NS8wMS8xOCAqLworLyogRnJlZUJTRDogaGVhZC9saWIvbXN1bi9zcmMvZV9hY29zLmMgMTc2NDUxIDIwMDgtMDItMjIgMDI6MzA6MzZaIGRhcyAqLworLyoKKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIENvcHlyaWdodCAoQykgMTk5MyBieSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogRGV2ZWxvcGVkIGF0IFN1blNvZnQsIGEgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBidXNpbmVzcy4KKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKKyAqIHNvZnR3YXJlIGlzIGZyZWVseSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoaXMgbm90aWNlIAorICogaXMgcHJlc2VydmVkLgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJTRCQiKTsKKworLyoKKyAqIFNlZSBjb21tZW50cyBpbiBlX2Fjb3MuYy4KKyAqIENvbnZlcnRlZCB0byBsb25nIGRvdWJsZSBieSBEYXZpZCBTY2h1bHR6IDxkYXNARnJlZUJTRC5PUkc+LgorICovCisKKyNpbmNsdWRlIDxmbG9hdC5oPgorCisjaW5jbHVkZSAiaW52dHJpZy5oIgorI2luY2x1ZGUgIm1hdGguaCIKKyNpbmNsdWRlICJtYXRoX3ByaXZhdGUuaCIKKworc3RhdGljIGNvbnN0IGxvbmcgZG91YmxlCitvbmU9ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwZSswMDsKKworI2lmZGVmIF9faTM4Nl9fCisvKiBYWFggV29yayBhcm91bmQgdGhlIGZhY3QgdGhhdCBnY2MgdHJ1bmNhdGVzIGxvbmcgZG91YmxlIGNvbnN0YW50cyBvbiBpMzg2ICovCitzdGF0aWMgdm9sYXRpbGUgZG91YmxlCitwaTEgPSAgMy4xNDE1OTI2NTM1ODk3OTMxMTYwMGUrMDAsCS8qICAweDEuOTIxZmI1NDQ0MmQxOHArMSAgKi8KK3BpMiA9ICAxLjIyNTE0ODQ1NDkwODYyMDAxMDQzZS0xNjsJLyogIDB4MS4xYTgwMDAwMDAwMDAwcC01MyAqLworI2RlZmluZQlwaQkoKGxvbmcgZG91YmxlKXBpMSArIHBpMikKKyNlbHNlCitzdGF0aWMgY29uc3QgbG9uZyBkb3VibGUKK3BpID0gIDMuMTQxNTkyNjUzNTg5NzkzMjM4NDYyNjQzMzgzMjc5NTAyODBlKzAwTDsKKyNlbmRpZgorCitsb25nIGRvdWJsZQorYWNvc2wobG9uZyBkb3VibGUgeCkKK3sKKwl1bmlvbiBJRUVFbDJiaXRzIHU7CisJbG9uZyBkb3VibGUgeixwLHEscix3LHMsYyxkZjsKKwlpbnQxNl90IGV4cHNpZ24sIGV4cHQ7CisJdS5lID0geDsKKwlleHBzaWduID0gdS54Yml0cy5leHBzaWduOworCWV4cHQgPSBleHBzaWduICYgMHg3ZmZmOworCWlmKGV4cHQgPj0gQklBUykgewkvKiB8eHwgPj0gMSAqLworCSAgICBpZihleHB0PT1CSUFTICYmICgodS5iaXRzLm1hbmgmfkxEQkxfTkJJVCl8dS5iaXRzLm1hbmwpPT0wKSB7CisJCWlmIChleHBzaWduPjApIHJldHVybiAwLjA7CS8qIGFjb3MoMSkgPSAwICAqLworCQllbHNlIHJldHVybiBwaSsyLjAqcGlvMl9sbzsJLyogYWNvcygtMSk9IHBpICovCisJICAgIH0KKwkgICAgcmV0dXJuICh4LXgpLyh4LXgpOwkJLyogYWNvcyh8eHw+MSkgaXMgTmFOICovCisJfQorCWlmKGV4cHQ8QklBUy0xKSB7CS8qIHx4fCA8IDAuNSAqLworCSAgICBpZihleHB0PEFDT1NfQ09OU1QpIHJldHVybiBwaW8yX2hpK3BpbzJfbG87Lyp4IHRpbnk6IGFjb3NsPXBpLzIqLworCSAgICB6ID0geCp4OworCSAgICBwID0gUCh6KTsKKwkgICAgcSA9IFEoeik7CisJICAgIHIgPSBwL3E7CisJICAgIHJldHVybiBwaW8yX2hpIC0gKHggLSAocGlvMl9sby14KnIpKTsKKwl9IGVsc2UgIGlmIChleHBzaWduPDApIHsJLyogeCA8IC0wLjUgKi8KKwkgICAgeiA9IChvbmUreCkqMC41OworCSAgICBwID0gUCh6KTsKKwkgICAgcSA9IFEoeik7CisJICAgIHMgPSBzcXJ0bCh6KTsKKwkgICAgciA9IHAvcTsKKwkgICAgdyA9IHIqcy1waW8yX2xvOworCSAgICByZXR1cm4gcGkgLSAyLjAqKHMrdyk7CisJfSBlbHNlIHsJCQkvKiB4ID4gMC41ICovCisJICAgIHogPSAob25lLXgpKjAuNTsKKwkgICAgcyA9IHNxcnRsKHopOworCSAgICB1LmUgPSBzOworCSAgICB1LmJpdHMubWFubCA9IDA7CisJICAgIGRmID0gdS5lOworCSAgICBjICA9ICh6LWRmKmRmKS8ocytkZik7CisJICAgIHAgPSBQKHopOworCSAgICBxID0gUSh6KTsKKwkgICAgciA9IHAvcTsKKwkgICAgdyA9IHIqcytjOworCSAgICByZXR1cm4gMi4wKihkZit3KTsKKwl9Cit9CmRpZmYgLS1naXQgYS9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL2VfYXNpbi5jIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9lX2FzaW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yN2RlMjA3Ci0tLSAvZGV2L251bGwKKysrIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9lX2FzaW4uYwpAQCAtMCwwICsxLDExNyBAQAorCisvKiBAKCMpZV9hc2luLmMgMS4zIDk1LzAxLzE4ICovCisvKgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogQ29weXJpZ2h0IChDKSAxOTkzIGJ5IFN1biBNaWNyb3N5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBEZXZlbG9wZWQgYXQgU3VuU29mdCwgYSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGJ1c2luZXNzLgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcworICogc29mdHdhcmUgaXMgZnJlZWx5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhpcyBub3RpY2UgCisgKiBpcyBwcmVzZXJ2ZWQuCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorX19GQlNESUQoIiRGcmVlQlNEJCIpOworCisvKiBfX2llZWU3NTRfYXNpbih4KQorICogTWV0aG9kIDogICAgICAgICAgICAgICAgICAKKyAqCVNpbmNlICBhc2luKHgpID0geCArIHheMy82ICsgeF41KjMvNDAgKyB4XjcqMTUvMzM2ICsgLi4uCisgKgl3ZSBhcHByb3hpbWF0ZSBhc2luKHgpIG9uIFswLDAuNV0gYnkKKyAqCQlhc2luKHgpID0geCArIHgqeF4yKlIoeF4yKQorICoJd2hlcmUKKyAqCQlSKHheMikgaXMgYSByYXRpb25hbCBhcHByb3hpbWF0aW9uIG9mIChhc2luKHgpLXgpL3heMyAKKyAqCWFuZCBpdHMgcmVtZXogZXJyb3IgaXMgYm91bmRlZCBieQorICoJCXwoYXNpbih4KS14KS94XjMgLSBSKHheMil8IDwgMl4oLTU4Ljc1KQorICoKKyAqCUZvciB4IGluIFswLjUsMV0KKyAqCQlhc2luKHgpID0gcGkvMi0yKmFzaW4oc3FydCgoMS14KS8yKSkKKyAqCUxldCB5ID0gKDEteCksIHogPSB5LzIsIHMgOj0gc3FydCh6KSwgYW5kIHBpbzJfaGkrcGlvMl9sbz1waS8yOworICoJdGhlbiBmb3IgeD4wLjk4CisgKgkJYXNpbih4KSA9IHBpLzIgLSAyKihzK3MqeipSKHopKQorICoJCQk9IHBpbzJfaGkgLSAoMioocytzKnoqUih6KSkgLSBwaW8yX2xvKQorICoJRm9yIHg8PTAuOTgsIGxldCBwaW80X2hpID0gcGlvMl9oaS8yLCB0aGVuCisgKgkJZiA9IGhpIHBhcnQgb2YgczsKKyAqCQljID0gc3FydCh6KSAtIGYgPSAoei1mKmYpLyhzK2YpIAkuLi5mK2M9c3FydCh6KQorICoJYW5kCisgKgkJYXNpbih4KSA9IHBpLzIgLSAyKihzK3MqeipSKHopKQorICoJCQk9IHBpbzRfaGkrKHBpbzQtMnMpLSgycyp6KlIoeiktcGlvMl9sbykKKyAqCQkJPSBwaW80X2hpKyhwaW80LTJmKS0oMnMqeipSKHopLShwaW8yX2xvKzJjKSkKKyAqCisgKiBTcGVjaWFsIGNhc2VzOgorICoJaWYgeCBpcyBOYU4sIHJldHVybiB4IGl0c2VsZjsKKyAqCWlmIHx4fD4xLCByZXR1cm4gTmFOIHdpdGggaW52YWxpZCBzaWduYWwuCisgKgorICovCisKKyNpbmNsdWRlIDxmbG9hdC5oPgorCisjaW5jbHVkZSAibWF0aC5oIgorI2luY2x1ZGUgIm1hdGhfcHJpdmF0ZS5oIgorCitzdGF0aWMgY29uc3QgZG91YmxlCitvbmUgPSAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMGUrMDAsIC8qIDB4M0ZGMDAwMDAsIDB4MDAwMDAwMDAgKi8KK2h1Z2UgPSAgMS4wMDBlKzMwMCwKK3BpbzJfaGkgPSAgMS41NzA3OTYzMjY3OTQ4OTY1NTgwMGUrMDAsIC8qIDB4M0ZGOTIxRkIsIDB4NTQ0NDJEMTggKi8KK3BpbzJfbG8gPSAgNi4xMjMyMzM5OTU3MzY3NjYwMzU4N2UtMTcsIC8qIDB4M0M5MUE2MjYsIDB4MzMxNDVDMDcgKi8KK3BpbzRfaGkgPSAgNy44NTM5ODE2MzM5NzQ0ODI3ODk5OWUtMDEsIC8qIDB4M0ZFOTIxRkIsIDB4NTQ0NDJEMTggKi8KKwkvKiBjb2VmZmljaWVudCBmb3IgUih4XjIpICovCitwUzAgPSAgMS42NjY2NjY2NjY2NjY2NjY1NzQxNWUtMDEsIC8qIDB4M0ZDNTU1NTUsIDB4NTU1NTU1NTUgKi8KK3BTMSA9IC0zLjI1NTY1ODE4NjIyNDAwOTE1NDA1ZS0wMSwgLyogMHhCRkQ0RDYxMiwgMHgwM0VCNkY3RCAqLworcFMyID0gIDIuMDEyMTI1MzIxMzQ4NjI5MjU4ODFlLTAxLCAvKiAweDNGQzlDMTU1LCAweDBFODg0NDU1ICovCitwUzMgPSAtNC4wMDU1NTM0NTAwNjc5NDExNDAyN2UtMDIsIC8qIDB4QkZBNDgyMjgsIDB4QjU2ODhGM0IgKi8KK3BTNCA9ICA3LjkxNTM0OTk0Mjg5ODE0NTMyMTc2ZS0wNCwgLyogMHgzRjQ5RUZFMCwgMHg3NTAxQjI4OCAqLworcFM1ID0gIDMuNDc5MzMxMDc1OTYwMjExNjc1NzBlLTA1LCAvKiAweDNGMDIzREUxLCAweDBERkRGNzA5ICovCitxUzEgPSAtMi40MDMzOTQ5MTE3MzQ0MTQyMTg3OGUrMDAsIC8qIDB4QzAwMzNBMjcsIDB4MUM4QTJENEIgKi8KK3FTMiA9ICAyLjAyMDk0NTc2MDIzMzUwNTY5NDcxZSswMCwgLyogMHg0MDAwMkFFNSwgMHg5QzU5OEFDOCAqLworcVMzID0gLTYuODgyODM5NzE2MDU0NTMyOTMwMzBlLTAxLCAvKiAweEJGRTYwNjZDLCAweDFCOEQwMTU5ICovCitxUzQgPSAgNy43MDM4MTUwNTU1OTAxOTM1Mjc5MWUtMDI7IC8qIDB4M0ZCM0I4QzUsIDB4QjEyRTkyODIgKi8KKworZG91YmxlCitfX2llZWU3NTRfYXNpbihkb3VibGUgeCkKK3sKKwlkb3VibGUgdD0wLjAsdyxwLHEsYyxyLHM7CisJaW50MzJfdCBoeCxpeDsKKwlHRVRfSElHSF9XT1JEKGh4LHgpOworCWl4ID0gaHgmMHg3ZmZmZmZmZjsKKwlpZihpeD49IDB4M2ZmMDAwMDApIHsJCS8qIHx4fD49IDEgKi8KKwkgICAgdV9pbnQzMl90IGx4OworCSAgICBHRVRfTE9XX1dPUkQobHgseCk7CisJICAgIGlmKCgoaXgtMHgzZmYwMDAwMCl8bHgpPT0wKQorCQkgICAgLyogYXNpbigxKT0rLXBpLzIgd2l0aCBpbmV4YWN0ICovCisJCXJldHVybiB4KnBpbzJfaGkreCpwaW8yX2xvOwkKKwkgICAgcmV0dXJuICh4LXgpLyh4LXgpOwkJLyogYXNpbih8eHw+MSkgaXMgTmFOICovICAgCisJfSBlbHNlIGlmIChpeDwweDNmZTAwMDAwKSB7CS8qIHx4fDwwLjUgKi8KKwkgICAgaWYoaXg8MHgzZTUwMDAwMCkgewkJLyogaWYgfHh8IDwgMioqLTI2ICovCisJCWlmKGh1Z2UreD5vbmUpIHJldHVybiB4Oy8qIHJldHVybiB4IHdpdGggaW5leGFjdCBpZiB4IT0wKi8KKwkgICAgfQorCSAgICB0ID0geCp4OworCSAgICBwID0gdCoocFMwK3QqKHBTMSt0KihwUzIrdCoocFMzK3QqKHBTNCt0KnBTNSkpKSkpOworCSAgICBxID0gb25lK3QqKHFTMSt0KihxUzIrdCoocVMzK3QqcVM0KSkpOworCSAgICB3ID0gcC9xOworCSAgICByZXR1cm4geCt4Knc7CisJfQorCS8qIDE+IHx4fD49IDAuNSAqLworCXcgPSBvbmUtZmFicyh4KTsKKwl0ID0gdyowLjU7CisJcCA9IHQqKHBTMCt0KihwUzErdCoocFMyK3QqKHBTMyt0KihwUzQrdCpwUzUpKSkpKTsKKwlxID0gb25lK3QqKHFTMSt0KihxUzIrdCoocVMzK3QqcVM0KSkpOworCXMgPSBzcXJ0KHQpOworCWlmKGl4Pj0weDNGRUYzMzMzKSB7IAkvKiBpZiB8eHwgPiAwLjk3NSAqLworCSAgICB3ID0gcC9xOworCSAgICB0ID0gcGlvMl9oaS0oMi4wKihzK3MqdyktcGlvMl9sbyk7CisJfSBlbHNlIHsKKwkgICAgdyAgPSBzOworCSAgICBTRVRfTE9XX1dPUkQodywwKTsKKwkgICAgYyAgPSAodC13KncpLyhzK3cpOworCSAgICByICA9IHAvcTsKKwkgICAgcCAgPSAyLjAqcypyLShwaW8yX2xvLTIuMCpjKTsKKwkgICAgcSAgPSBwaW80X2hpLTIuMCp3OworCSAgICB0ICA9IHBpbzRfaGktKHAtcSk7CisJfSAgICAKKwlpZihoeD4wKSByZXR1cm4gdDsgZWxzZSByZXR1cm4gLXQ7ICAgIAorfQorCisjaWYgTERCTF9NQU5UX0RJRyA9PSA1MworX193ZWFrX3JlZmVyZW5jZShhc2luLCBhc2lubCk7CisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvZV9hc2luZi5jIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9lX2FzaW5mLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGVhYWJiNgotLS0gL2Rldi9udWxsCisrKyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvZV9hc2luZi5jCkBAIC0wLDAgKzEsNjUgQEAKKy8qIGVfYXNpbmYuYyAtLSBmbG9hdCB2ZXJzaW9uIG9mIGVfYXNpbi5jLgorICogQ29udmVyc2lvbiB0byBmbG9hdCBieSBJYW4gTGFuY2UgVGF5bG9yLCBDeWdudXMgU3VwcG9ydCwgaWFuQGN5Z251cy5jb20uCisgKi8KKworLyoKKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIENvcHlyaWdodCAoQykgMTk5MyBieSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogRGV2ZWxvcGVkIGF0IFN1blBybywgYSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGJ1c2luZXNzLgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcworICogc29mdHdhcmUgaXMgZnJlZWx5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhpcyBub3RpY2UKKyAqIGlzIHByZXNlcnZlZC4KKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CitfX0ZCU0RJRCgiJEZyZWVCU0QkIik7CisKKyNpbmNsdWRlICJtYXRoLmgiCisjaW5jbHVkZSAibWF0aF9wcml2YXRlLmgiCisKK3N0YXRpYyBjb25zdCBmbG9hdAorb25lID0gIDEuMDAwMDAwMDAwMGUrMDAsIC8qIDB4M0Y4MDAwMDAgKi8KK2h1Z2UgPSAgMS4wMDBlKzMwLAorCS8qIGNvZWZmaWNpZW50IGZvciBSKHheMikgKi8KK3BTMCA9ICAxLjY2NjY1ODY2OTdlLTAxLAorcFMxID0gLTQuMjc0MzQyMjA5MWUtMDIsCitwUzIgPSAtOC42NTYzNjMwMDMwZS0wMywKK3FTMSA9IC03LjA2NjI5NjMzOTBlLTAxOworCitzdGF0aWMgY29uc3QgZG91YmxlCitwaW8yID0gIDEuNTcwNzk2MzI2Nzk0ODk2NTU4ZSswMDsKKworZmxvYXQKK19faWVlZTc1NF9hc2luZihmbG9hdCB4KQoreworCWRvdWJsZSBzOworCWZsb2F0IHQsdyxwLHE7CisJaW50MzJfdCBoeCxpeDsKKwlHRVRfRkxPQVRfV09SRChoeCx4KTsKKwlpeCA9IGh4JjB4N2ZmZmZmZmY7CisJaWYoaXg+PTB4M2Y4MDAwMDApIHsJCS8qIHx4fCA+PSAxICovCisJICAgIGlmKGl4PT0weDNmODAwMDAwKQkJLyogfHh8ID09IDEgKi8KKwkJcmV0dXJuIHgqcGlvMjsJCS8qIGFzaW4oKy0xKSA9ICstcGkvMiB3aXRoIGluZXhhY3QgKi8KKwkgICAgcmV0dXJuICh4LXgpLyh4LXgpOwkJLyogYXNpbih8eHw+MSkgaXMgTmFOICovCisJfSBlbHNlIGlmIChpeDwweDNmMDAwMDAwKSB7CS8qIHx4fDwwLjUgKi8KKwkgICAgaWYoaXg8MHgzOTgwMDAwMCkgewkJLyogfHh8IDwgMioqLTEyICovCisJCWlmKGh1Z2UreD5vbmUpIHJldHVybiB4Oy8qIHJldHVybiB4IHdpdGggaW5leGFjdCBpZiB4IT0wKi8KKwkgICAgfQorCSAgICB0ID0geCp4OworCSAgICBwID0gdCoocFMwK3QqKHBTMSt0KnBTMikpOworCSAgICBxID0gb25lK3QqcVMxOworCSAgICB3ID0gcC9xOworCSAgICByZXR1cm4geCt4Knc7CisJfQorCS8qIDE+IHx4fD49IDAuNSAqLworCXcgPSBvbmUtZmFic2YoeCk7CisJdCA9IHcqKGZsb2F0KTAuNTsKKwlwID0gdCoocFMwK3QqKHBTMSt0KnBTMikpOworCXEgPSBvbmUrdCpxUzE7CisJcyA9IHNxcnQodCk7CisJdyA9IHAvcTsKKwl0ID0gcGlvMi0yLjAqKHMrcyp3KTsKKwlpZihoeD4wKSByZXR1cm4gdDsgZWxzZSByZXR1cm4gLXQ7Cit9CmRpZmYgLS1naXQgYS9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL2VfYXNpbmwuYyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvZV9hc2lubC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4NTc2NWYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL2VfYXNpbmwuYwpAQCAtMCwwICsxLDc3IEBACisKKy8qIEAoIyllX2FzaW4uYyAxLjMgOTUvMDEvMTggKi8KKy8qIEZyZWVCU0Q6IGhlYWQvbGliL21zdW4vc3JjL2VfYXNpbi5jIDE3NjQ1MSAyMDA4LTAyLTIyIDAyOjMwOjM2WiBkYXMgKi8KKy8qCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBDb3B5cmlnaHQgKEMpIDE5OTMgYnkgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIERldmVsb3BlZCBhdCBTdW5Tb2Z0LCBhIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gYnVzaW5lc3MuCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCisgKiBzb2Z0d2FyZSBpcyBmcmVlbHkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGlzIG5vdGljZSAKKyAqIGlzIHByZXNlcnZlZC4KKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CitfX0ZCU0RJRCgiJEZyZWVCU0QkIik7CisKKy8qCisgKiBTZWUgY29tbWVudHMgaW4gZV9hc2luLmMuCisgKiBDb252ZXJ0ZWQgdG8gbG9uZyBkb3VibGUgYnkgRGF2aWQgU2NodWx0eiA8ZGFzQEZyZWVCU0QuT1JHPi4KKyAqLworCisjaW5jbHVkZSA8ZmxvYXQuaD4KKworI2luY2x1ZGUgImludnRyaWcuaCIKKyNpbmNsdWRlICJtYXRoLmgiCisjaW5jbHVkZSAibWF0aF9wcml2YXRlLmgiCisKK3N0YXRpYyBjb25zdCBsb25nIGRvdWJsZQorb25lID0gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDBlKzAwLAoraHVnZSA9IDEuMDAwZSszMDA7CisKK2xvbmcgZG91YmxlCithc2lubChsb25nIGRvdWJsZSB4KQoreworCXVuaW9uIElFRUVsMmJpdHMgdTsKKwlsb25nIGRvdWJsZSB0PTAuMCx3LHAscSxjLHIsczsKKwlpbnQxNl90IGV4cHNpZ24sIGV4cHQ7CisJdS5lID0geDsKKwlleHBzaWduID0gdS54Yml0cy5leHBzaWduOworCWV4cHQgPSBleHBzaWduICYgMHg3ZmZmOworCWlmKGV4cHQgPj0gQklBUykgewkJLyogfHh8Pj0gMSAqLworCQlpZihleHB0PT1CSUFTICYmICgodS5iaXRzLm1hbmgmfkxEQkxfTkJJVCl8dS5iaXRzLm1hbmwpPT0wKQorCQkgICAgLyogYXNpbigxKT0rLXBpLzIgd2l0aCBpbmV4YWN0ICovCisJCSAgICByZXR1cm4geCpwaW8yX2hpK3gqcGlvMl9sbzsJCisJICAgIHJldHVybiAoeC14KS8oeC14KTsJCS8qIGFzaW4ofHh8PjEpIGlzIE5hTiAqLyAgIAorCX0gZWxzZSBpZiAoZXhwdDxCSUFTLTEpIHsJLyogfHh8PDAuNSAqLworCSAgICBpZihleHB0PEFTSU5fTElORUFSKSB7CS8qIGlmIHx4fCBpcyBzbWFsbCwgYXNpbmwoeCk9eCAqLworCQlpZihodWdlK3g+b25lKSByZXR1cm4geDsvKiByZXR1cm4geCB3aXRoIGluZXhhY3QgaWYgeCE9MCovCisJICAgIH0KKwkgICAgdCA9IHgqeDsKKwkgICAgcCA9IFAodCk7CisJICAgIHEgPSBRKHQpOworCSAgICB3ID0gcC9xOworCSAgICByZXR1cm4geCt4Knc7CisJfQorCS8qIDE+IHx4fD49IDAuNSAqLworCXcgPSBvbmUtZmFic2woeCk7CisJdCA9IHcqMC41OworCXAgPSBQKHQpOworCXEgPSBRKHQpOworCXMgPSBzcXJ0bCh0KTsKKwlpZih1LmJpdHMubWFuaD49VEhSRVNIKSB7IAkvKiBpZiB8eHwgaXMgY2xvc2UgdG8gMSAqLworCSAgICB3ID0gcC9xOworCSAgICB0ID0gcGlvMl9oaS0oMi4wKihzK3MqdyktcGlvMl9sbyk7CisJfSBlbHNlIHsKKwkgICAgdS5lID0gczsKKwkgICAgdS5iaXRzLm1hbmwgPSAwOworCSAgICB3ID0gdS5lOworCSAgICBjICA9ICh0LXcqdykvKHMrdyk7CisJICAgIHIgID0gcC9xOworCSAgICBwICA9IDIuMCpzKnItKHBpbzJfbG8tMi4wKmMpOworCSAgICBxICA9IHBpbzRfaGktMi4wKnc7CisJICAgIHQgID0gcGlvNF9oaS0ocC1xKTsKKwl9ICAgIAorCWlmKGV4cHNpZ24+MCkgcmV0dXJuIHQ7IGVsc2UgcmV0dXJuIC10OyAgICAKK30KZGlmZiAtLWdpdCBhL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvZV9hdGFuMi5jIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9lX2F0YW4yLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTRhOTg1YgotLS0gL2Rldi9udWxsCisrKyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvZV9hdGFuMi5jCkBAIC0wLDAgKzEsMTI5IEBACisKKy8qIEAoIyllX2F0YW4yLmMgMS4zIDk1LzAxLzE4ICovCisvKgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogQ29weXJpZ2h0IChDKSAxOTkzIGJ5IFN1biBNaWNyb3N5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBEZXZlbG9wZWQgYXQgU3VuU29mdCwgYSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGJ1c2luZXNzLgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcworICogc29mdHdhcmUgaXMgZnJlZWx5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhpcyBub3RpY2UgCisgKiBpcyBwcmVzZXJ2ZWQuCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKgorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJTRCQiKTsKKworLyogX19pZWVlNzU0X2F0YW4yKHkseCkKKyAqIE1ldGhvZCA6CisgKgkxLiBSZWR1Y2UgeSB0byBwb3NpdGl2ZSBieSBhdGFuMih5LHgpPS1hdGFuMigteSx4KS4KKyAqCTIuIFJlZHVjZSB4IHRvIHBvc2l0aXZlIGJ5IChpZiB4IGFuZCB5IGFyZSB1bmV4Y2VwdGlvbmFsKTogCisgKgkJQVJHICh4K2l5KSA9IGFyY3Rhbih5L3gpICAgCSAgIC4uLiBpZiB4ID4gMCwKKyAqCQlBUkcgKHgraXkpID0gcGkgLSBhcmN0YW5beS8oLXgpXSAgIC4uLiBpZiB4IDwgMCwKKyAqCisgKiBTcGVjaWFsIGNhc2VzOgorICoKKyAqCUFUQU4yKChhbnl0aGluZyksIE5hTiApIGlzIE5hTjsKKyAqCUFUQU4yKE5BTiAsIChhbnl0aGluZykgKSBpcyBOYU47CisgKglBVEFOMigrLTAsICsoYW55dGhpbmcgYnV0IE5hTikpIGlzICstMCAgOworICoJQVRBTjIoKy0wLCAtKGFueXRoaW5nIGJ1dCBOYU4pKSBpcyArLXBpIDsKKyAqCUFUQU4yKCstKGFueXRoaW5nIGJ1dCAwIGFuZCBOYU4pLCAwKSBpcyArLXBpLzI7CisgKglBVEFOMigrLShhbnl0aGluZyBidXQgSU5GIGFuZCBOYU4pLCArSU5GKSBpcyArLTAgOworICoJQVRBTjIoKy0oYW55dGhpbmcgYnV0IElORiBhbmQgTmFOKSwgLUlORikgaXMgKy1waTsKKyAqCUFUQU4yKCstSU5GLCtJTkYgKSBpcyArLXBpLzQgOworICoJQVRBTjIoKy1JTkYsLUlORiApIGlzICstM3BpLzQ7CisgKglBVEFOMigrLUlORiwgKGFueXRoaW5nIGJ1dCwwLE5hTiwgYW5kIElORikpIGlzICstcGkvMjsKKyAqCisgKiBDb25zdGFudHM6CisgKiBUaGUgaGV4YWRlY2ltYWwgdmFsdWVzIGFyZSB0aGUgaW50ZW5kZWQgb25lcyBmb3IgdGhlIGZvbGxvd2luZyAKKyAqIGNvbnN0YW50cy4gVGhlIGRlY2ltYWwgdmFsdWVzIG1heSBiZSB1c2VkLCBwcm92aWRlZCB0aGF0IHRoZSAKKyAqIGNvbXBpbGVyIHdpbGwgY29udmVydCBmcm9tIGRlY2ltYWwgdG8gYmluYXJ5IGFjY3VyYXRlbHkgZW5vdWdoIAorICogdG8gcHJvZHVjZSB0aGUgaGV4YWRlY2ltYWwgdmFsdWVzIHNob3duLgorICovCisKKyNpbmNsdWRlIDxmbG9hdC5oPgorCisjaW5jbHVkZSAibWF0aC5oIgorI2luY2x1ZGUgIm1hdGhfcHJpdmF0ZS5oIgorCitzdGF0aWMgdm9sYXRpbGUgZG91YmxlCit0aW55ICA9IDEuMGUtMzAwOworc3RhdGljIGNvbnN0IGRvdWJsZQoremVybyAgPSAwLjAsCitwaV9vXzQgID0gNy44NTM5ODE2MzM5NzQ0ODI3OTAwRS0wMSwgLyogMHgzRkU5MjFGQiwgMHg1NDQ0MkQxOCAqLworcGlfb18yICA9IDEuNTcwNzk2MzI2Nzk0ODk2NTU4MEUrMDAsIC8qIDB4M0ZGOTIxRkIsIDB4NTQ0NDJEMTggKi8KK3BpICAgICAgPSAzLjE0MTU5MjY1MzU4OTc5MzExNjBFKzAwOyAvKiAweDQwMDkyMUZCLCAweDU0NDQyRDE4ICovCitzdGF0aWMgdm9sYXRpbGUgZG91YmxlCitwaV9sbyAgID0gMS4yMjQ2NDY3OTkxNDczNTMxNzcyRS0xNjsgLyogMHgzQ0ExQTYyNiwgMHgzMzE0NUMwNyAqLworCitkb3VibGUKK19faWVlZTc1NF9hdGFuMihkb3VibGUgeSwgZG91YmxlIHgpCit7CisJZG91YmxlIHo7CisJaW50MzJfdCBrLG0saHgsaHksaXgsaXk7CisJdV9pbnQzMl90IGx4LGx5OworCisJRVhUUkFDVF9XT1JEUyhoeCxseCx4KTsKKwlpeCA9IGh4JjB4N2ZmZmZmZmY7CisJRVhUUkFDVF9XT1JEUyhoeSxseSx5KTsKKwlpeSA9IGh5JjB4N2ZmZmZmZmY7CisJaWYoKChpeHwoKGx4fC1seCk+PjMxKSk+MHg3ZmYwMDAwMCl8fAorCSAgICgoaXl8KChseXwtbHkpPj4zMSkpPjB4N2ZmMDAwMDApKQkvKiB4IG9yIHkgaXMgTmFOICovCisJICAgcmV0dXJuIHgreTsKKwlpZigoaHgtMHgzZmYwMDAwMHxseCk9PTApIHJldHVybiBhdGFuKHkpOyAgIC8qIHg9MS4wICovCisJbSA9ICgoaHk+PjMxKSYxKXwoKGh4Pj4zMCkmMik7CS8qIDIqc2lnbih4KStzaWduKHkpICovCisKKyAgICAvKiB3aGVuIHkgPSAwICovCisJaWYoKGl5fGx5KT09MCkgeworCSAgICBzd2l0Y2gobSkgeworCQljYXNlIDA6IAorCQljYXNlIDE6IHJldHVybiB5OyAJLyogYXRhbigrLTAsK2FueXRoaW5nKT0rLTAgKi8KKwkJY2FzZSAyOiByZXR1cm4gIHBpK3Rpbnk7LyogYXRhbigrMCwtYW55dGhpbmcpID0gcGkgKi8KKwkJY2FzZSAzOiByZXR1cm4gLXBpLXRpbnk7LyogYXRhbigtMCwtYW55dGhpbmcpID0tcGkgKi8KKwkgICAgfQorCX0KKyAgICAvKiB3aGVuIHggPSAwICovCisJaWYoKGl4fGx4KT09MCkgcmV0dXJuIChoeTwwKT8gIC1waV9vXzItdGlueTogcGlfb18yK3Rpbnk7CisJICAgIAorICAgIC8qIHdoZW4geCBpcyBJTkYgKi8KKwlpZihpeD09MHg3ZmYwMDAwMCkgeworCSAgICBpZihpeT09MHg3ZmYwMDAwMCkgeworCQlzd2l0Y2gobSkgeworCQkgICAgY2FzZSAwOiByZXR1cm4gIHBpX29fNCt0aW55Oy8qIGF0YW4oK0lORiwrSU5GKSAqLworCQkgICAgY2FzZSAxOiByZXR1cm4gLXBpX29fNC10aW55Oy8qIGF0YW4oLUlORiwrSU5GKSAqLworCQkgICAgY2FzZSAyOiByZXR1cm4gIDMuMCpwaV9vXzQrdGlueTsvKmF0YW4oK0lORiwtSU5GKSovCisJCSAgICBjYXNlIDM6IHJldHVybiAtMy4wKnBpX29fNC10aW55Oy8qYXRhbigtSU5GLC1JTkYpKi8KKwkJfQorCSAgICB9IGVsc2UgeworCQlzd2l0Y2gobSkgeworCQkgICAgY2FzZSAwOiByZXR1cm4gIHplcm8gIDsJLyogYXRhbigrLi4uLCtJTkYpICovCisJCSAgICBjYXNlIDE6IHJldHVybiAtemVybyAgOwkvKiBhdGFuKC0uLi4sK0lORikgKi8KKwkJICAgIGNhc2UgMjogcmV0dXJuICBwaSt0aW55ICA7CS8qIGF0YW4oKy4uLiwtSU5GKSAqLworCQkgICAgY2FzZSAzOiByZXR1cm4gLXBpLXRpbnkgIDsJLyogYXRhbigtLi4uLC1JTkYpICovCisJCX0KKwkgICAgfQorCX0KKyAgICAvKiB3aGVuIHkgaXMgSU5GICovCisJaWYoaXk9PTB4N2ZmMDAwMDApIHJldHVybiAoaHk8MCk/IC1waV9vXzItdGlueTogcGlfb18yK3Rpbnk7CisKKyAgICAvKiBjb21wdXRlIHkveCAqLworCWsgPSAoaXktaXgpPj4yMDsKKwlpZihrID4gNjApIHsJCSAJLyogfHkveHwgPiAgMioqNjAgKi8KKwkgICAgej1waV9vXzIrMC41KnBpX2xvOworCSAgICBtJj0xOworCX0KKwllbHNlIGlmKGh4PDAmJms8LTYwKSB6PTAuMDsgCS8qIDAgPiB8eXwveCA+IC0yKiotNjAgKi8KKwllbHNlIHo9YXRhbihmYWJzKHkveCkpOwkJLyogc2FmZSB0byBkbyB5L3ggKi8KKwlzd2l0Y2ggKG0pIHsKKwkgICAgY2FzZSAwOiByZXR1cm4gICAgICAgeiAgOwkvKiBhdGFuKCssKykgKi8KKwkgICAgY2FzZSAxOiByZXR1cm4gICAgICAteiAgOwkvKiBhdGFuKC0sKykgKi8KKwkgICAgY2FzZSAyOiByZXR1cm4gIHBpLSh6LXBpX2xvKTsvKiBhdGFuKCssLSkgKi8KKwkgICAgZGVmYXVsdDogLyogY2FzZSAzICovCisJICAgIAkgICAgcmV0dXJuICAoei1waV9sbyktcGk7LyogYXRhbigtLC0pICovCisJfQorfQorCisjaWYgTERCTF9NQU5UX0RJRyA9PSA1MworX193ZWFrX3JlZmVyZW5jZShhdGFuMiwgYXRhbjJsKTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9lX2F0YW4yZi5jIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9lX2F0YW4yZi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjNzdiZmYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL2VfYXRhbjJmLmMKQEAgLTAsMCArMSw5NiBAQAorLyogZV9hdGFuMmYuYyAtLSBmbG9hdCB2ZXJzaW9uIG9mIGVfYXRhbjIuYy4KKyAqIENvbnZlcnNpb24gdG8gZmxvYXQgYnkgSWFuIExhbmNlIFRheWxvciwgQ3lnbnVzIFN1cHBvcnQsIGlhbkBjeWdudXMuY29tLgorICovCisKKy8qCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBDb3B5cmlnaHQgKEMpIDE5OTMgYnkgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIERldmVsb3BlZCBhdCBTdW5Qcm8sIGEgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBidXNpbmVzcy4KKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKKyAqIHNvZnR3YXJlIGlzIGZyZWVseSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoaXMgbm90aWNlCisgKiBpcyBwcmVzZXJ2ZWQuCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorX19GQlNESUQoIiRGcmVlQlNEJCIpOworCisjaW5jbHVkZSAibWF0aC5oIgorI2luY2x1ZGUgIm1hdGhfcHJpdmF0ZS5oIgorCitzdGF0aWMgdm9sYXRpbGUgZmxvYXQKK3RpbnkgID0gMS4wZS0zMDsKK3N0YXRpYyBjb25zdCBmbG9hdAoremVybyAgPSAwLjAsCitwaV9vXzQgID0gNy44NTM5ODE4NTI1ZS0wMSwgLyogMHgzZjQ5MGZkYiAqLworcGlfb18yICA9IDEuNTcwNzk2MzcwNWUrMDAsIC8qIDB4M2ZjOTBmZGIgKi8KK3BpICAgICAgPSAzLjE0MTU5Mjc0MTBlKzAwOyAvKiAweDQwNDkwZmRiICovCitzdGF0aWMgdm9sYXRpbGUgZmxvYXQKK3BpX2xvICAgPSAtOC43NDIyNzc2NTczZS0wODsgLyogMHhiM2JiYmQyZSAqLworCitmbG9hdAorX19pZWVlNzU0X2F0YW4yZihmbG9hdCB5LCBmbG9hdCB4KQoreworCWZsb2F0IHo7CisJaW50MzJfdCBrLG0saHgsaHksaXgsaXk7CisKKwlHRVRfRkxPQVRfV09SRChoeCx4KTsKKwlpeCA9IGh4JjB4N2ZmZmZmZmY7CisJR0VUX0ZMT0FUX1dPUkQoaHkseSk7CisJaXkgPSBoeSYweDdmZmZmZmZmOworCWlmKChpeD4weDdmODAwMDAwKXx8CisJICAgKGl5PjB4N2Y4MDAwMDApKQkvKiB4IG9yIHkgaXMgTmFOICovCisJICAgcmV0dXJuIHgreTsKKwlpZihoeD09MHgzZjgwMDAwMCkgcmV0dXJuIGF0YW5mKHkpOyAgIC8qIHg9MS4wICovCisJbSA9ICgoaHk+PjMxKSYxKXwoKGh4Pj4zMCkmMik7CS8qIDIqc2lnbih4KStzaWduKHkpICovCisKKyAgICAvKiB3aGVuIHkgPSAwICovCisJaWYoaXk9PTApIHsKKwkgICAgc3dpdGNoKG0pIHsKKwkJY2FzZSAwOgorCQljYXNlIDE6IHJldHVybiB5OyAJLyogYXRhbigrLTAsK2FueXRoaW5nKT0rLTAgKi8KKwkJY2FzZSAyOiByZXR1cm4gIHBpK3Rpbnk7LyogYXRhbigrMCwtYW55dGhpbmcpID0gcGkgKi8KKwkJY2FzZSAzOiByZXR1cm4gLXBpLXRpbnk7LyogYXRhbigtMCwtYW55dGhpbmcpID0tcGkgKi8KKwkgICAgfQorCX0KKyAgICAvKiB3aGVuIHggPSAwICovCisJaWYoaXg9PTApIHJldHVybiAoaHk8MCk/ICAtcGlfb18yLXRpbnk6IHBpX29fMit0aW55OworCisgICAgLyogd2hlbiB4IGlzIElORiAqLworCWlmKGl4PT0weDdmODAwMDAwKSB7CisJICAgIGlmKGl5PT0weDdmODAwMDAwKSB7CisJCXN3aXRjaChtKSB7CisJCSAgICBjYXNlIDA6IHJldHVybiAgcGlfb180K3Rpbnk7LyogYXRhbigrSU5GLCtJTkYpICovCisJCSAgICBjYXNlIDE6IHJldHVybiAtcGlfb180LXRpbnk7LyogYXRhbigtSU5GLCtJTkYpICovCisJCSAgICBjYXNlIDI6IHJldHVybiAgKGZsb2F0KTMuMCpwaV9vXzQrdGlueTsvKmF0YW4oK0lORiwtSU5GKSovCisJCSAgICBjYXNlIDM6IHJldHVybiAoZmxvYXQpLTMuMCpwaV9vXzQtdGlueTsvKmF0YW4oLUlORiwtSU5GKSovCisJCX0KKwkgICAgfSBlbHNlIHsKKwkJc3dpdGNoKG0pIHsKKwkJICAgIGNhc2UgMDogcmV0dXJuICB6ZXJvICA7CS8qIGF0YW4oKy4uLiwrSU5GKSAqLworCQkgICAgY2FzZSAxOiByZXR1cm4gLXplcm8gIDsJLyogYXRhbigtLi4uLCtJTkYpICovCisJCSAgICBjYXNlIDI6IHJldHVybiAgcGkrdGlueSAgOwkvKiBhdGFuKCsuLi4sLUlORikgKi8KKwkJICAgIGNhc2UgMzogcmV0dXJuIC1waS10aW55ICA7CS8qIGF0YW4oLS4uLiwtSU5GKSAqLworCQl9CisJICAgIH0KKwl9CisgICAgLyogd2hlbiB5IGlzIElORiAqLworCWlmKGl5PT0weDdmODAwMDAwKSByZXR1cm4gKGh5PDApPyAtcGlfb18yLXRpbnk6IHBpX29fMit0aW55OworCisgICAgLyogY29tcHV0ZSB5L3ggKi8KKwlrID0gKGl5LWl4KT4+MjM7CisJaWYoayA+IDI2KSB7CQkJLyogfHkveHwgPiAgMioqMjYgKi8KKwkgICAgej1waV9vXzIrKGZsb2F0KTAuNSpwaV9sbzsKKwkgICAgbSY9MTsKKwl9CisJZWxzZSBpZihrPC0yNiYmaHg8MCkgej0wLjA7IAkvKiAwID4gfHl8L3ggPiAtMioqLTI2ICovCisJZWxzZSB6PWF0YW5mKGZhYnNmKHkveCkpOwkvKiBzYWZlIHRvIGRvIHkveCAqLworCXN3aXRjaCAobSkgeworCSAgICBjYXNlIDA6IHJldHVybiAgICAgICB6ICA7CS8qIGF0YW4oKywrKSAqLworCSAgICBjYXNlIDE6IHJldHVybiAgICAgIC16ICA7CS8qIGF0YW4oLSwrKSAqLworCSAgICBjYXNlIDI6IHJldHVybiAgcGktKHotcGlfbG8pOy8qIGF0YW4oKywtKSAqLworCSAgICBkZWZhdWx0OiAvKiBjYXNlIDMgKi8KKwkgICAgCSAgICByZXR1cm4gICh6LXBpX2xvKS1waTsvKiBhdGFuKC0sLSkgKi8KKwl9Cit9CmRpZmYgLS1naXQgYS9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL2VfYXRhbjJsLmMgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL2VfYXRhbjJsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDMyNjQ4MgotLS0gL2Rldi9udWxsCisrKyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvZV9hdGFuMmwuYwpAQCAtMCwwICsxLDEyMCBAQAorCisvKiBAKCMpZV9hdGFuMi5jIDEuMyA5NS8wMS8xOCAqLworLyogRnJlZUJTRDogaGVhZC9saWIvbXN1bi9zcmMvZV9hdGFuMi5jIDE3NjQ1MSAyMDA4LTAyLTIyIDAyOjMwOjM2WiBkYXMgKi8KKy8qCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBDb3B5cmlnaHQgKEMpIDE5OTMgYnkgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIERldmVsb3BlZCBhdCBTdW5Tb2Z0LCBhIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gYnVzaW5lc3MuCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCisgKiBzb2Z0d2FyZSBpcyBmcmVlbHkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGlzIG5vdGljZSAKKyAqIGlzIHByZXNlcnZlZC4KKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqCisgKi8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorX19GQlNESUQoIiRGcmVlQlNEJCIpOworCisvKgorICogU2VlIGNvbW1lbnRzIGluIGVfYXRhbjIuYy4KKyAqIENvbnZlcnRlZCB0byBsb25nIGRvdWJsZSBieSBEYXZpZCBTY2h1bHR6IDxkYXNARnJlZUJTRC5PUkc+LgorICovCisKKyNpbmNsdWRlIDxmbG9hdC5oPgorCisjaW5jbHVkZSAiaW52dHJpZy5oIgorI2luY2x1ZGUgIm1hdGguaCIKKyNpbmNsdWRlICJtYXRoX3ByaXZhdGUuaCIKKworc3RhdGljIHZvbGF0aWxlIGxvbmcgZG91YmxlCit0aW55ICA9IDEuMGUtMzAwOworc3RhdGljIGNvbnN0IGxvbmcgZG91YmxlCit6ZXJvICA9IDAuMDsKKworI2lmZGVmIF9faTM4Nl9fCisvKiBYWFggV29yayBhcm91bmQgdGhlIGZhY3QgdGhhdCBnY2MgdHJ1bmNhdGVzIGxvbmcgZG91YmxlIGNvbnN0YW50cyBvbiBpMzg2ICovCitzdGF0aWMgdm9sYXRpbGUgZG91YmxlCitwaTEgPSAgMy4xNDE1OTI2NTM1ODk3OTMxMTYwMGUrMDAsCS8qICAweDEuOTIxZmI1NDQ0MmQxOHArMSAgKi8KK3BpMiA9ICAxLjIyNTE0ODQ1NDkwODYyMDAxMDQzZS0xNjsJLyogIDB4MS4xYTgwMDAwMDAwMDAwcC01MyAqLworI2RlZmluZQlwaQkoKGxvbmcgZG91YmxlKXBpMSArIHBpMikKKyNlbHNlCitzdGF0aWMgY29uc3QgbG9uZyBkb3VibGUKK3BpID0gIDMuMTQxNTkyNjUzNTg5NzkzMjM4NDYyNjQzMzgzMjc5NTAyODBlKzAwTDsKKyNlbmRpZgorCitsb25nIGRvdWJsZQorYXRhbjJsKGxvbmcgZG91YmxlIHksIGxvbmcgZG91YmxlIHgpCit7CisJdW5pb24gSUVFRWwyYml0cyB1eCwgdXk7CisJbG9uZyBkb3VibGUgejsKKwlpbnQzMl90IGssbTsKKwlpbnQxNl90IGV4cHR4LCBleHBzaWdueCwgZXhwdHksIGV4cHNpZ255OworCisJdXkuZSA9IHk7CisJZXhwc2lnbnkgPSB1eS54Yml0cy5leHBzaWduOworCWV4cHR5ID0gZXhwc2lnbnkgJiAweDdmZmY7CisJdXguZSA9IHg7CisJZXhwc2lnbnggPSB1eC54Yml0cy5leHBzaWduOworCWV4cHR4ID0gZXhwc2lnbnggJiAweDdmZmY7CisKKwlpZiAoKGV4cHR4PT1CSUFTK0xEQkxfTUFYX0VYUCAmJgorCSAgICAgKCh1eC5iaXRzLm1hbmgmfkxEQkxfTkJJVCl8dXguYml0cy5tYW5sKSE9MCkgfHwJLyogeCBpcyBOYU4gKi8KKwkgICAgKGV4cHR5PT1CSUFTK0xEQkxfTUFYX0VYUCAmJgorCSAgICAgKCh1eS5iaXRzLm1hbmgmfkxEQkxfTkJJVCl8dXkuYml0cy5tYW5sKSE9MCkpCS8qIHkgaXMgTmFOICovCisJICAgIHJldHVybiB4K3k7CisJaWYgKGV4cHNpZ254PT1CSUFTICYmICgodXguYml0cy5tYW5oJn5MREJMX05CSVQpfHV4LmJpdHMubWFubCk9PTApCisJICAgIHJldHVybiBhdGFubCh5KTsJCQkJCS8qIHg9MS4wICovCisJbSA9ICgoZXhwc2lnbnk+PjE1KSYxKXwoKGV4cHNpZ254Pj4xNCkmMik7CS8qIDIqc2lnbih4KStzaWduKHkpICovCisKKyAgICAvKiB3aGVuIHkgPSAwICovCisJaWYoZXhwdHk9PTAgJiYgKCh1eS5iaXRzLm1hbmgmfkxEQkxfTkJJVCl8dXkuYml0cy5tYW5sKT09MCkgeworCSAgICBzd2l0Y2gobSkgeworCQljYXNlIDA6IAorCQljYXNlIDE6IHJldHVybiB5OyAJLyogYXRhbigrLTAsK2FueXRoaW5nKT0rLTAgKi8KKwkJY2FzZSAyOiByZXR1cm4gIHBpK3Rpbnk7LyogYXRhbigrMCwtYW55dGhpbmcpID0gcGkgKi8KKwkJY2FzZSAzOiByZXR1cm4gLXBpLXRpbnk7LyogYXRhbigtMCwtYW55dGhpbmcpID0tcGkgKi8KKwkgICAgfQorCX0KKyAgICAvKiB3aGVuIHggPSAwICovCisJaWYoZXhwdHg9PTAgJiYgKCh1eC5iaXRzLm1hbmgmfkxEQkxfTkJJVCl8dXguYml0cy5tYW5sKT09MCkKKwkgICAgcmV0dXJuIChleHBzaWdueTwwKT8gIC1waW8yX2hpLXRpbnk6IHBpbzJfaGkrdGlueTsKKworICAgIC8qIHdoZW4geCBpcyBJTkYgKi8KKwlpZihleHB0eD09QklBUytMREJMX01BWF9FWFApIHsKKwkgICAgaWYoZXhwdHk9PUJJQVMrTERCTF9NQVhfRVhQKSB7CisJCXN3aXRjaChtKSB7CisJCSAgICBjYXNlIDA6IHJldHVybiAgcGlvMl9oaSowLjUrdGlueTsvKiBhdGFuKCtJTkYsK0lORikgKi8KKwkJICAgIGNhc2UgMTogcmV0dXJuIC1waW8yX2hpKjAuNS10aW55Oy8qIGF0YW4oLUlORiwrSU5GKSAqLworCQkgICAgY2FzZSAyOiByZXR1cm4gIDEuNSpwaW8yX2hpK3Rpbnk7LyphdGFuKCtJTkYsLUlORikqLworCQkgICAgY2FzZSAzOiByZXR1cm4gLTEuNSpwaW8yX2hpLXRpbnk7LyphdGFuKC1JTkYsLUlORikqLworCQl9CisJICAgIH0gZWxzZSB7CisJCXN3aXRjaChtKSB7CisJCSAgICBjYXNlIDA6IHJldHVybiAgemVybyAgOwkvKiBhdGFuKCsuLi4sK0lORikgKi8KKwkJICAgIGNhc2UgMTogcmV0dXJuIC16ZXJvICA7CS8qIGF0YW4oLS4uLiwrSU5GKSAqLworCQkgICAgY2FzZSAyOiByZXR1cm4gIHBpK3RpbnkgIDsJLyogYXRhbigrLi4uLC1JTkYpICovCisJCSAgICBjYXNlIDM6IHJldHVybiAtcGktdGlueSAgOwkvKiBhdGFuKC0uLi4sLUlORikgKi8KKwkJfQorCSAgICB9CisJfQorICAgIC8qIHdoZW4geSBpcyBJTkYgKi8KKwlpZihleHB0eT09QklBUytMREJMX01BWF9FWFApCisJICAgIHJldHVybiAoZXhwc2lnbnk8MCk/IC1waW8yX2hpLXRpbnk6IHBpbzJfaGkrdGlueTsKKworICAgIC8qIGNvbXB1dGUgeS94ICovCisJayA9IGV4cHR5LWV4cHR4OworCWlmKGsgPiBMREJMX01BTlRfRElHKzIpIHsJCQkvKiB8eS94fCBodWdlICovCisJICAgIHo9cGlvMl9oaStwaW8yX2xvOworCSAgICBtJj0xOworCX0KKwllbHNlIGlmKGV4cHNpZ254PDAmJms8LUxEQkxfTUFOVF9ESUctMikgej0wLjA7IAkvKiB8eS94fCB0aW55LCB4PDAgKi8KKwllbHNlIHo9YXRhbmwoZmFic2woeS94KSk7CQkvKiBzYWZlIHRvIGRvIHkveCAqLworCXN3aXRjaCAobSkgeworCSAgICBjYXNlIDA6IHJldHVybiAgICAgICB6ICA7CS8qIGF0YW4oKywrKSAqLworCSAgICBjYXNlIDE6IHJldHVybiAgICAgIC16ICA7CS8qIGF0YW4oLSwrKSAqLworCSAgICBjYXNlIDI6IHJldHVybiAgcGktKHotcGlfbG8pOy8qIGF0YW4oKywtKSAqLworCSAgICBkZWZhdWx0OiAvKiBjYXNlIDMgKi8KKwkgICAgCSAgICByZXR1cm4gICh6LXBpX2xvKS1waTsvKiBhdGFuKC0sLSkgKi8KKwl9Cit9CmRpZmYgLS1naXQgYS9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL2VfYXRhbmguYyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvZV9hdGFuaC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyMmZmMjYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL2VfYXRhbmguYwpAQCAtMCwwICsxLDY4IEBACisKKy8qIEAoIyllX2F0YW5oLmMgMS4zIDk1LzAxLzE4ICovCisvKgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogQ29weXJpZ2h0IChDKSAxOTkzIGJ5IFN1biBNaWNyb3N5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBEZXZlbG9wZWQgYXQgU3VuU29mdCwgYSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGJ1c2luZXNzLgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcworICogc29mdHdhcmUgaXMgZnJlZWx5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhpcyBub3RpY2UgCisgKiBpcyBwcmVzZXJ2ZWQuCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKgorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJTRCQiKTsKKworLyogX19pZWVlNzU0X2F0YW5oKHgpCisgKiBNZXRob2QgOgorICogICAgMS5SZWR1Y2VkIHggdG8gcG9zaXRpdmUgYnkgYXRhbmgoLXgpID0gLWF0YW5oKHgpCisgKiAgICAyLkZvciB4Pj0wLjUKKyAqICAgICAgICAgICAgICAgICAgMSAgICAgICAgICAgICAgMnggICAgICAgICAgICAgICAgICAgICAgICAgIHgKKyAqCWF0YW5oKHgpID0gLS0tICogbG9nKDEgKyAtLS0tLS0tKSA9IDAuNSAqIGxvZzFwKDIgKiAtLS0tLS0tLSkKKyAqICAgICAgICAgICAgICAgICAgMiAgICAgICAgICAgICAxIC0geCAgICAgICAgICAgICAgICAgICAgICAxIC0geAorICoJCisgKiAJRm9yIHg8MC41CisgKglhdGFuaCh4KSA9IDAuNSpsb2cxcCgyeCsyeCp4LygxLXgpKQorICoKKyAqIFNwZWNpYWwgY2FzZXM6CisgKglhdGFuaCh4KSBpcyBOYU4gaWYgfHh8ID4gMSB3aXRoIHNpZ25hbDsKKyAqCWF0YW5oKE5hTikgaXMgdGhhdCBOYU4gd2l0aCBubyBzaWduYWw7CisgKglhdGFuaCgrLTEpIGlzICstSU5GIHdpdGggc2lnbmFsLgorICoKKyAqLworCisjaW5jbHVkZSA8ZmxvYXQuaD4KKworI2luY2x1ZGUgIm1hdGguaCIKKyNpbmNsdWRlICJtYXRoX3ByaXZhdGUuaCIKKworc3RhdGljIGNvbnN0IGRvdWJsZSBvbmUgPSAxLjAsIGh1Z2UgPSAxZTMwMDsKK3N0YXRpYyBjb25zdCBkb3VibGUgemVybyA9IDAuMDsKKworZG91YmxlCitfX2llZWU3NTRfYXRhbmgoZG91YmxlIHgpCit7CisJZG91YmxlIHQ7CisJaW50MzJfdCBoeCxpeDsKKwl1X2ludDMyX3QgbHg7CisJRVhUUkFDVF9XT1JEUyhoeCxseCx4KTsKKwlpeCA9IGh4JjB4N2ZmZmZmZmY7CisJaWYgKChpeHwoKGx4fCgtbHgpKT4+MzEpKT4weDNmZjAwMDAwKSAvKiB8eHw+MSAqLworCSAgICByZXR1cm4gKHgteCkvKHgteCk7CisJaWYoaXg9PTB4M2ZmMDAwMDApIAorCSAgICByZXR1cm4geC96ZXJvOworCWlmKGl4PDB4M2UzMDAwMDAmJihodWdlK3gpPnplcm8pIHJldHVybiB4OwkvKiB4PDIqKi0yOCAqLworCVNFVF9ISUdIX1dPUkQoeCxpeCk7CisJaWYoaXg8MHgzZmUwMDAwMCkgewkJLyogeCA8IDAuNSAqLworCSAgICB0ID0geCt4OworCSAgICB0ID0gMC41KmxvZzFwKHQrdCp4LyhvbmUteCkpOworCX0gZWxzZSAKKwkgICAgdCA9IDAuNSpsb2cxcCgoeCt4KS8ob25lLXgpKTsKKwlpZihoeD49MCkgcmV0dXJuIHQ7IGVsc2UgcmV0dXJuIC10OworfQorCisjaWYgTERCTF9NQU5UX0RJRyA9PSA1MworX193ZWFrX3JlZmVyZW5jZShhdGFuaCwgYXRhbmhsKTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9lX2F0YW5oZi5jIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9lX2F0YW5oZi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiZDZhOGYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL2VfYXRhbmhmLmMKQEAgLTAsMCArMSw0NSBAQAorLyogZV9hdGFuaGYuYyAtLSBmbG9hdCB2ZXJzaW9uIG9mIGVfYXRhbmguYy4KKyAqIENvbnZlcnNpb24gdG8gZmxvYXQgYnkgSWFuIExhbmNlIFRheWxvciwgQ3lnbnVzIFN1cHBvcnQsIGlhbkBjeWdudXMuY29tLgorICovCisKKy8qCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBDb3B5cmlnaHQgKEMpIDE5OTMgYnkgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIERldmVsb3BlZCBhdCBTdW5Qcm8sIGEgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBidXNpbmVzcy4KKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKKyAqIHNvZnR3YXJlIGlzIGZyZWVseSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoaXMgbm90aWNlCisgKiBpcyBwcmVzZXJ2ZWQuCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorX19GQlNESUQoIiRGcmVlQlNEJCIpOworCisjaW5jbHVkZSAibWF0aC5oIgorI2luY2x1ZGUgIm1hdGhfcHJpdmF0ZS5oIgorCitzdGF0aWMgY29uc3QgZmxvYXQgb25lID0gMS4wLCBodWdlID0gMWUzMDsKKworc3RhdGljIGNvbnN0IGZsb2F0IHplcm8gPSAwLjA7CisKK2Zsb2F0CitfX2llZWU3NTRfYXRhbmhmKGZsb2F0IHgpCit7CisJZmxvYXQgdDsKKwlpbnQzMl90IGh4LGl4OworCUdFVF9GTE9BVF9XT1JEKGh4LHgpOworCWl4ID0gaHgmMHg3ZmZmZmZmZjsKKwlpZiAoaXg+MHgzZjgwMDAwMCkgCQkvKiB8eHw+MSAqLworCSAgICByZXR1cm4gKHgteCkvKHgteCk7CisJaWYoaXg9PTB4M2Y4MDAwMDApCisJICAgIHJldHVybiB4L3plcm87CisJaWYoaXg8MHgzMTgwMDAwMCYmKGh1Z2UreCk+emVybykgcmV0dXJuIHg7CS8qIHg8MioqLTI4ICovCisJU0VUX0ZMT0FUX1dPUkQoeCxpeCk7CisJaWYoaXg8MHgzZjAwMDAwMCkgewkJLyogeCA8IDAuNSAqLworCSAgICB0ID0geCt4OworCSAgICB0ID0gKGZsb2F0KTAuNSpsb2cxcGYodCt0KngvKG9uZS14KSk7CisJfSBlbHNlCisJICAgIHQgPSAoZmxvYXQpMC41KmxvZzFwZigoeCt4KS8ob25lLXgpKTsKKwlpZihoeD49MCkgcmV0dXJuIHQ7IGVsc2UgcmV0dXJuIC10OworfQpkaWZmIC0tZ2l0IGEvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9lX2Nvc2guYyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvZV9jb3NoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTM2MzY5NQotLS0gL2Rldi9udWxsCisrKyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvZV9jb3NoLmMKQEAgLTAsMCArMSw3OSBAQAorCisvKiBAKCMpZV9jb3NoLmMgMS4zIDk1LzAxLzE4ICovCisvKgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogQ29weXJpZ2h0IChDKSAxOTkzIGJ5IFN1biBNaWNyb3N5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBEZXZlbG9wZWQgYXQgU3VuU29mdCwgYSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGJ1c2luZXNzLgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcworICogc29mdHdhcmUgaXMgZnJlZWx5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhpcyBub3RpY2UgCisgKiBpcyBwcmVzZXJ2ZWQuCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorX19GQlNESUQoIiRGcmVlQlNEJCIpOworCisvKiBfX2llZWU3NTRfY29zaCh4KQorICogTWV0aG9kIDogCisgKiBtYXRoZW1hdGljYWxseSBjb3NoKHgpIGlmIGRlZmluZWQgdG8gYmUgKGV4cCh4KStleHAoLXgpKS8yCisgKgkxLiBSZXBsYWNlIHggYnkgfHh8IChjb3NoKHgpID0gY29zaCgteCkpLiAKKyAqCTIuIAorICoJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbIGV4cCh4KSAtIDEgXV4yIAorICoJICAgIDAgICAgICAgIDw9IHggPD0gbG4yLzIgIDogIGNvc2goeCkgOj0gMSArIC0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCQkJICAgICAgIAkJCSAgICAgICAgICAgMipleHAoeCkKKyAqCisgKgkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cCh4KSArICAxL2V4cCh4KQorICoJICAgIGxuMi8yICAgIDw9IHggPD0gMjIgICAgIDogIGNvc2goeCkgOj0gLS0tLS0tLS0tLS0tLS0tLS0tLQorICoJCQkgICAgICAgCQkJICAgICAgICAgIDIKKyAqCSAgICAyMiAgICAgICA8PSB4IDw9IGxub3ZmdCA6ICBjb3NoKHgpIDo9IGV4cCh4KS8yIAorICoJICAgIGxub3ZmdCAgIDw9IHggPD0gbG4yb3ZmdDogIGNvc2goeCkgOj0gZXhwKHgvMikvMiAqIGV4cCh4LzIpCisgKgkgICAgbG4yb3ZmdCAgPCAgeAkgICAgOiAgY29zaCh4KSA6PSBodWdlKmh1Z2UgKG92ZXJmbG93KQorICoKKyAqIFNwZWNpYWwgY2FzZXM6CisgKgljb3NoKHgpIGlzIHx4fCBpZiB4IGlzICtJTkYsIC1JTkYsIG9yIE5hTi4KKyAqCW9ubHkgY29zaCgwKT0xIGlzIGV4YWN0IGZvciBmaW5pdGUgeC4KKyAqLworCisjaW5jbHVkZSAibWF0aC5oIgorI2luY2x1ZGUgIm1hdGhfcHJpdmF0ZS5oIgorCitzdGF0aWMgY29uc3QgZG91YmxlIG9uZSA9IDEuMCwgaGFsZj0wLjUsIGh1Z2UgPSAxLjBlMzAwOworCitkb3VibGUKK19faWVlZTc1NF9jb3NoKGRvdWJsZSB4KQoreworCWRvdWJsZSB0LHc7CisJaW50MzJfdCBpeDsKKworICAgIC8qIEhpZ2ggd29yZCBvZiB8eHwuICovCisJR0VUX0hJR0hfV09SRChpeCx4KTsKKwlpeCAmPSAweDdmZmZmZmZmOworCisgICAgLyogeCBpcyBJTkYgb3IgTmFOICovCisJaWYoaXg+PTB4N2ZmMDAwMDApIHJldHVybiB4Kng7CQorCisgICAgLyogfHh8IGluIFswLDAuNSpsbjJdLCByZXR1cm4gMStleHBtMSh8eHwpXjIvKDIqZXhwKHx4fCkpICovCisJaWYoaXg8MHgzZmQ2MmU0MykgeworCSAgICB0ID0gZXhwbTEoZmFicyh4KSk7CisJICAgIHcgPSBvbmUrdDsKKwkgICAgaWYgKGl4PDB4M2M4MDAwMDApIHJldHVybiB3OwkvKiBjb3NoKHRpbnkpID0gMSAqLworCSAgICByZXR1cm4gb25lKyh0KnQpLyh3K3cpOworCX0KKworICAgIC8qIHx4fCBpbiBbMC41KmxuMiwyMl0sIHJldHVybiAoZXhwKHx4fCkrMS9leHAofHh8KS8yOyAqLworCWlmIChpeCA8IDB4NDAzNjAwMDApIHsKKwkJdCA9IF9faWVlZTc1NF9leHAoZmFicyh4KSk7CisJCXJldHVybiBoYWxmKnQraGFsZi90OworCX0KKworICAgIC8qIHx4fCBpbiBbMjIsIGxvZyhtYXhkb3VibGUpXSByZXR1cm4gaGFsZipleHAofHh8KSAqLworCWlmIChpeCA8IDB4NDA4NjJFNDIpICByZXR1cm4gaGFsZipfX2llZWU3NTRfZXhwKGZhYnMoeCkpOworCisgICAgLyogfHh8IGluIFtsb2cobWF4ZG91YmxlKSwgb3ZlcmZsb3d0aHJlc29sZF0gKi8KKwlpZiAoaXg8PTB4NDA4NjMzQ0UpCisJICAgIHJldHVybiBfX2xkZXhwX2V4cChmYWJzKHgpLCAtMSk7CisKKyAgICAvKiB8eHwgPiBvdmVyZmxvd3RocmVzb2xkLCBjb3NoKHgpIG92ZXJmbG93ICovCisJcmV0dXJuIGh1Z2UqaHVnZTsKK30KZGlmZiAtLWdpdCBhL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvZV9jb3NoZi5jIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9lX2Nvc2hmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTVhMGQ2ZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvZV9jb3NoZi5jCkBAIC0wLDAgKzEsNTkgQEAKKy8qIGVfY29zaGYuYyAtLSBmbG9hdCB2ZXJzaW9uIG9mIGVfY29zaC5jLgorICogQ29udmVyc2lvbiB0byBmbG9hdCBieSBJYW4gTGFuY2UgVGF5bG9yLCBDeWdudXMgU3VwcG9ydCwgaWFuQGN5Z251cy5jb20uCisgKi8KKworLyoKKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIENvcHlyaWdodCAoQykgMTk5MyBieSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogRGV2ZWxvcGVkIGF0IFN1blBybywgYSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGJ1c2luZXNzLgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcworICogc29mdHdhcmUgaXMgZnJlZWx5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhpcyBub3RpY2UKKyAqIGlzIHByZXNlcnZlZC4KKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CitfX0ZCU0RJRCgiJEZyZWVCU0QkIik7CisKKyNpbmNsdWRlICJtYXRoLmgiCisjaW5jbHVkZSAibWF0aF9wcml2YXRlLmgiCisKK3N0YXRpYyBjb25zdCBmbG9hdCBvbmUgPSAxLjAsIGhhbGY9MC41LCBodWdlID0gMS4wZTMwOworCitmbG9hdAorX19pZWVlNzU0X2Nvc2hmKGZsb2F0IHgpCit7CisJZmxvYXQgdCx3OworCWludDMyX3QgaXg7CisKKwlHRVRfRkxPQVRfV09SRChpeCx4KTsKKwlpeCAmPSAweDdmZmZmZmZmOworCisgICAgLyogeCBpcyBJTkYgb3IgTmFOICovCisJaWYoaXg+PTB4N2Y4MDAwMDApIHJldHVybiB4Kng7CisKKyAgICAvKiB8eHwgaW4gWzAsMC41KmxuMl0sIHJldHVybiAxK2V4cG0xKHx4fCleMi8oMipleHAofHh8KSkgKi8KKwlpZihpeDwweDNlYjE3MjE4KSB7CisJICAgIHQgPSBleHBtMWYoZmFic2YoeCkpOworCSAgICB3ID0gb25lK3Q7CisJICAgIGlmIChpeDwweDM5ODAwMDAwKSByZXR1cm4gb25lOwkvKiBjb3NoKHRpbnkpID0gMSAqLworCSAgICByZXR1cm4gb25lKyh0KnQpLyh3K3cpOworCX0KKworICAgIC8qIHx4fCBpbiBbMC41KmxuMiw5XSwgcmV0dXJuIChleHAofHh8KSsxL2V4cCh8eHwpKS8yOyAqLworCWlmIChpeCA8IDB4NDExMDAwMDApIHsKKwkJdCA9IF9faWVlZTc1NF9leHBmKGZhYnNmKHgpKTsKKwkJcmV0dXJuIGhhbGYqdCtoYWxmL3Q7CisJfQorCisgICAgLyogfHh8IGluIFs5LCBsb2cobWF4ZmxvYXQpXSByZXR1cm4gaGFsZipleHAofHh8KSAqLworCWlmIChpeCA8IDB4NDJiMTcyMTcpICByZXR1cm4gaGFsZipfX2llZWU3NTRfZXhwZihmYWJzZih4KSk7CisKKyAgICAvKiB8eHwgaW4gW2xvZyhtYXhmbG9hdCksIG92ZXJmbG93dGhyZXNvbGRdICovCisJaWYgKGl4PD0weDQyYjJkNGZjKQorCSAgICByZXR1cm4gX19sZGV4cF9leHBmKGZhYnNmKHgpLCAtMSk7CisKKyAgICAvKiB8eHwgPiBvdmVyZmxvd3RocmVzb2xkLCBjb3NoKHgpIG92ZXJmbG93ICovCisJcmV0dXJuIGh1Z2UqaHVnZTsKK30KZGlmZiAtLWdpdCBhL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvZV9leHAuYyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvZV9leHAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NGM5NzY5Ci0tLSAvZGV2L251bGwKKysrIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9lX2V4cC5jCkBAIC0wLDAgKzEsMTY0IEBACisKKy8qIEAoIyllX2V4cC5jIDEuNiAwNC8wNC8yMiAqLworLyoKKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIENvcHlyaWdodCAoQykgMjAwNCBieSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcworICogc29mdHdhcmUgaXMgZnJlZWx5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhpcyBub3RpY2UgCisgKiBpcyBwcmVzZXJ2ZWQuCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorX19GQlNESUQoIiRGcmVlQlNEJCIpOworCisvKiBfX2llZWU3NTRfZXhwKHgpCisgKiBSZXR1cm5zIHRoZSBleHBvbmVudGlhbCBvZiB4LgorICoKKyAqIE1ldGhvZAorICogICAxLiBBcmd1bWVudCByZWR1Y3Rpb246CisgKiAgICAgIFJlZHVjZSB4IHRvIGFuIHIgc28gdGhhdCB8cnwgPD0gMC41KmxuMiB+IDAuMzQ2NTguCisgKglHaXZlbiB4LCBmaW5kIHIgYW5kIGludGVnZXIgayBzdWNoIHRoYXQKKyAqCisgKiAgICAgICAgICAgICAgIHggPSBrKmxuMiArIHIsICB8cnwgPD0gMC41KmxuMi4gIAorICoKKyAqICAgICAgSGVyZSByIHdpbGwgYmUgcmVwcmVzZW50ZWQgYXMgciA9IGhpLWxvIGZvciBiZXR0ZXIgCisgKglhY2N1cmFjeS4KKyAqCisgKiAgIDIuIEFwcHJveGltYXRpb24gb2YgZXhwKHIpIGJ5IGEgc3BlY2lhbCByYXRpb25hbCBmdW5jdGlvbiBvbgorICoJdGhlIGludGVydmFsIFswLDAuMzQ2NThdOgorICoJV3JpdGUKKyAqCSAgICBSKHIqKjIpID0gciooZXhwKHIpKzEpLyhleHAociktMSkgPSAyICsgcipyLzYgLSByKio0LzM2MCArIC4uLgorICogICAgICBXZSB1c2UgYSBzcGVjaWFsIFJlbWVzIGFsZ29yaXRobSBvbiBbMCwwLjM0NjU4XSB0byBnZW5lcmF0ZSAKKyAqIAlhIHBvbHlub21pYWwgb2YgZGVncmVlIDUgdG8gYXBwcm94aW1hdGUgUi4gVGhlIG1heGltdW0gZXJyb3IgCisgKglvZiB0aGlzIHBvbHlub21pYWwgYXBwcm94aW1hdGlvbiBpcyBib3VuZGVkIGJ5IDIqKi01OS4gSW4KKyAqCW90aGVyIHdvcmRzLAorICoJICAgIFIoeikgfiAyLjAgKyBQMSp6ICsgUDIqeioqMiArIFAzKnoqKjMgKyBQNCp6Kio0ICsgUDUqeioqNQorICogIAkod2hlcmUgej1yKnIsIGFuZCB0aGUgdmFsdWVzIG9mIFAxIHRvIFA1IGFyZSBsaXN0ZWQgYmVsb3cpCisgKglhbmQKKyAqCSAgICB8ICAgICAgICAgICAgICAgICAgNSAgICAgICAgICB8ICAgICAtNTkKKyAqCSAgICB8IDIuMCtQMSp6Ky4uLitQNSp6ICAgLSAgUih6KSB8IDw9IDIgCisgKgkgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICoJVGhlIGNvbXB1dGF0aW9uIG9mIGV4cChyKSB0aHVzIGJlY29tZXMKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyKnIKKyAqCQlleHAocikgPSAxICsgLS0tLS0tLQorICoJCSAgICAgICAgICAgICAgUiAtIHIKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcipSMShyKQkKKyAqCQkgICAgICAgPSAxICsgciArIC0tLS0tLS0tLS0tIChmb3IgYmV0dGVyIGFjY3VyYWN5KQorICoJCSAgICAgICAgICAgICAgICAgIDIgLSBSMShyKQorICoJd2hlcmUKKyAqCQkJICAgICAgICAgMiAgICAgICA0ICAgICAgICAgICAgIDEwCisgKgkJUjEocikgPSByIC0gKFAxKnIgICsgUDIqciAgKyAuLi4gKyBQNSpyICAgKS4KKyAqCQorICogICAzLiBTY2FsZSBiYWNrIHRvIG9idGFpbiBleHAoeCk6CisgKglGcm9tIHN0ZXAgMSwgd2UgaGF2ZQorICoJICAgZXhwKHgpID0gMl5rICogZXhwKHIpCisgKgorICogU3BlY2lhbCBjYXNlczoKKyAqCWV4cChJTkYpIGlzIElORiwgZXhwKE5hTikgaXMgTmFOOworICoJZXhwKC1JTkYpIGlzIDAsIGFuZAorICoJZm9yIGZpbml0ZSBhcmd1bWVudCwgb25seSBleHAoMCk9MSBpcyBleGFjdC4KKyAqCisgKiBBY2N1cmFjeToKKyAqCWFjY29yZGluZyB0byBhbiBlcnJvciBhbmFseXNpcywgdGhlIGVycm9yIGlzIGFsd2F5cyBsZXNzIHRoYW4KKyAqCTEgdWxwICh1bml0IGluIHRoZSBsYXN0IHBsYWNlKS4KKyAqCisgKiBNaXNjLiBpbmZvLgorICoJRm9yIElFRUUgZG91YmxlIAorICoJICAgIGlmIHggPiAgNy4wOTc4MjcxMjg5MzM4Mzk3MzA5NmUrMDIgdGhlbiBleHAoeCkgb3ZlcmZsb3cKKyAqCSAgICBpZiB4IDwgLTcuNDUxMzMyMTkxMDE5NDExMDg0MjBlKzAyIHRoZW4gZXhwKHgpIHVuZGVyZmxvdworICoKKyAqIENvbnN0YW50czoKKyAqIFRoZSBoZXhhZGVjaW1hbCB2YWx1ZXMgYXJlIHRoZSBpbnRlbmRlZCBvbmVzIGZvciB0aGUgZm9sbG93aW5nIAorICogY29uc3RhbnRzLiBUaGUgZGVjaW1hbCB2YWx1ZXMgbWF5IGJlIHVzZWQsIHByb3ZpZGVkIHRoYXQgdGhlIAorICogY29tcGlsZXIgd2lsbCBjb252ZXJ0IGZyb20gZGVjaW1hbCB0byBiaW5hcnkgYWNjdXJhdGVseSBlbm91Z2gKKyAqIHRvIHByb2R1Y2UgdGhlIGhleGFkZWNpbWFsIHZhbHVlcyBzaG93bi4KKyAqLworCisjaW5jbHVkZSA8ZmxvYXQuaD4KKworI2luY2x1ZGUgIm1hdGguaCIKKyNpbmNsdWRlICJtYXRoX3ByaXZhdGUuaCIKKworc3RhdGljIGNvbnN0IGRvdWJsZQorb25lCT0gMS4wLAoraGFsRlsyXQk9IHswLjUsLTAuNSx9LAorb190aHJlc2hvbGQ9ICA3LjA5NzgyNzEyODkzMzgzOTczMDk2ZSswMiwgIC8qIDB4NDA4NjJFNDIsIDB4RkVGQTM5RUYgKi8KK3VfdGhyZXNob2xkPSAtNy40NTEzMzIxOTEwMTk0MTEwODQyMGUrMDIsICAvKiAweGMwODc0OTEwLCAweEQ1MkQzMDUxICovCitsbjJISVsyXSAgID17IDYuOTMxNDcxODAzNjkxMjM4MTY0OTBlLTAxLCAgLyogMHgzZmU2MmU0MiwgMHhmZWUwMDAwMCAqLworCSAgICAgLTYuOTMxNDcxODAzNjkxMjM4MTY0OTBlLTAxLH0sLyogMHhiZmU2MmU0MiwgMHhmZWUwMDAwMCAqLworbG4yTE9bMl0gICA9eyAxLjkwODIxNDkyOTI3MDU4NzcwMDAyZS0xMCwgIC8qIDB4M2RlYTM5ZWYsIDB4MzU3OTNjNzYgKi8KKwkgICAgIC0xLjkwODIxNDkyOTI3MDU4NzcwMDAyZS0xMCx9LC8qIDB4YmRlYTM5ZWYsIDB4MzU3OTNjNzYgKi8KK2ludmxuMiA9ICAxLjQ0MjY5NTA0MDg4ODk2MzM4NzAwZSswMCwgLyogMHgzZmY3MTU0NywgMHg2NTJiODJmZSAqLworUDEgICA9ICAxLjY2NjY2NjY2NjY2NjY2MDE5MDM3ZS0wMSwgLyogMHgzRkM1NTU1NSwgMHg1NTU1NTUzRSAqLworUDIgICA9IC0yLjc3Nzc3Nzc3NzcwMTU1OTMzODQyZS0wMywgLyogMHhCRjY2QzE2QywgMHgxNkJFQkQ5MyAqLworUDMgICA9ICA2LjYxMzc1NjMyMTQzNzkzNDM2MTE3ZS0wNSwgLyogMHgzRjExNTY2QSwgMHhBRjI1REUyQyAqLworUDQgICA9IC0xLjY1MzM5MDIyMDU0NjUyNTE1MzkwZS0wNiwgLyogMHhCRUJCQkQ0MSwgMHhDNUQyNkJGMSAqLworUDUgICA9ICA0LjEzODEzNjc5NzA1NzIzODQ2MDM5ZS0wODsgLyogMHgzRTY2Mzc2OSwgMHg3MkJFQTREMCAqLworCitzdGF0aWMgdm9sYXRpbGUgZG91YmxlCitodWdlCT0gMS4wZSszMDAsCit0d29tMTAwMD0gOS4zMzI2MzYxODUwMzIxODg3ODk5MGUtMzAyOyAgICAgLyogMioqLTEwMDA9MHgwMTcwMDAwMCwwKi8KKworZG91YmxlCitfX2llZWU3NTRfZXhwKGRvdWJsZSB4KQkvKiBkZWZhdWx0IElFRUUgZG91YmxlIGV4cCAqLworeworCWRvdWJsZSB5LGhpPTAuMCxsbz0wLjAsYyx0LHR3b3BrOworCWludDMyX3Qgaz0wLHhzYjsKKwl1X2ludDMyX3QgaHg7CisKKwlHRVRfSElHSF9XT1JEKGh4LHgpOworCXhzYiA9IChoeD4+MzEpJjE7CQkvKiBzaWduIGJpdCBvZiB4ICovCisJaHggJj0gMHg3ZmZmZmZmZjsJCS8qIGhpZ2ggd29yZCBvZiB8eHwgKi8KKworICAgIC8qIGZpbHRlciBvdXQgbm9uLWZpbml0ZSBhcmd1bWVudCAqLworCWlmKGh4ID49IDB4NDA4NjJFNDIpIHsJCQkvKiBpZiB8eHw+PTcwOS43OC4uLiAqLworICAgICAgICAgICAgaWYoaHg+PTB4N2ZmMDAwMDApIHsKKwkgICAgICAgIHVfaW50MzJfdCBseDsKKwkJR0VUX0xPV19XT1JEKGx4LHgpOworCQlpZigoKGh4JjB4ZmZmZmYpfGx4KSE9MCkKKwkJICAgICByZXR1cm4geCt4OyAJCS8qIE5hTiAqLworCQllbHNlIHJldHVybiAoeHNiPT0wKT8geDowLjA7CS8qIGV4cCgrLWluZik9e2luZiwwfSAqLworCSAgICB9CisJICAgIGlmKHggPiBvX3RocmVzaG9sZCkgcmV0dXJuIGh1Z2UqaHVnZTsgLyogb3ZlcmZsb3cgKi8KKwkgICAgaWYoeCA8IHVfdGhyZXNob2xkKSByZXR1cm4gdHdvbTEwMDAqdHdvbTEwMDA7IC8qIHVuZGVyZmxvdyAqLworCX0KKworICAgIC8qIGFyZ3VtZW50IHJlZHVjdGlvbiAqLworCWlmKGh4ID4gMHgzZmQ2MmU0MikgewkJLyogaWYgIHx4fCA+IDAuNSBsbjIgKi8gCisJICAgIGlmKGh4IDwgMHgzRkYwQTJCMikgewkvKiBhbmQgfHh8IDwgMS41IGxuMiAqLworCQloaSA9IHgtbG4ySElbeHNiXTsgbG89bG4yTE9beHNiXTsgayA9IDEteHNiLXhzYjsKKwkgICAgfSBlbHNlIHsKKwkJayAgPSAoaW50KShpbnZsbjIqeCtoYWxGW3hzYl0pOworCQl0ICA9IGs7CisJCWhpID0geCAtIHQqbG4ySElbMF07CS8qIHQqbG4ySEkgaXMgZXhhY3QgaGVyZSAqLworCQlsbyA9IHQqbG4yTE9bMF07CisJICAgIH0KKwkgICAgU1RSSUNUX0FTU0lHTihkb3VibGUsIHgsIGhpIC0gbG8pOworCX0gCisJZWxzZSBpZihoeCA8IDB4M2UzMDAwMDApICB7CS8qIHdoZW4gfHh8PDIqKi0yOCAqLworCSAgICBpZihodWdlK3g+b25lKSByZXR1cm4gb25lK3g7LyogdHJpZ2dlciBpbmV4YWN0ICovCisJfQorCWVsc2UgayA9IDA7CisKKyAgICAvKiB4IGlzIG5vdyBpbiBwcmltYXJ5IHJhbmdlICovCisJdCAgPSB4Kng7CisJaWYoayA+PSAtMTAyMSkKKwkgICAgSU5TRVJUX1dPUkRTKHR3b3BrLDB4M2ZmMDAwMDArKGs8PDIwKSwgMCk7CisJZWxzZQorCSAgICBJTlNFUlRfV09SRFModHdvcGssMHgzZmYwMDAwMCsoKGsrMTAwMCk8PDIwKSwgMCk7CisJYyAgPSB4IC0gdCooUDErdCooUDIrdCooUDMrdCooUDQrdCpQNSkpKSk7CisJaWYoaz09MCkgCXJldHVybiBvbmUtKCh4KmMpLyhjLTIuMCkteCk7IAorCWVsc2UgCQl5ID0gb25lLSgobG8tKHgqYykvKDIuMC1jKSktaGkpOworCWlmKGsgPj0gLTEwMjEpIHsKKwkgICAgaWYgKGs9PTEwMjQpIHJldHVybiB5KjIuMCoweDFwMTAyMzsKKwkgICAgcmV0dXJuIHkqdHdvcGs7CisJfSBlbHNlIHsKKwkgICAgcmV0dXJuIHkqdHdvcGsqdHdvbTEwMDA7CisJfQorfQorCisjaWYgKExEQkxfTUFOVF9ESUcgPT0gNTMpCitfX3dlYWtfcmVmZXJlbmNlKGV4cCwgZXhwbCk7CisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvZV9leHBmLmMgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL2VfZXhwZi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxZmUyYzUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL2VfZXhwZi5jCkBAIC0wLDAgKzEsOTggQEAKKy8qIGVfZXhwZi5jIC0tIGZsb2F0IHZlcnNpb24gb2YgZV9leHAuYy4KKyAqIENvbnZlcnNpb24gdG8gZmxvYXQgYnkgSWFuIExhbmNlIFRheWxvciwgQ3lnbnVzIFN1cHBvcnQsIGlhbkBjeWdudXMuY29tLgorICovCisKKy8qCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBDb3B5cmlnaHQgKEMpIDE5OTMgYnkgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIERldmVsb3BlZCBhdCBTdW5Qcm8sIGEgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBidXNpbmVzcy4KKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKKyAqIHNvZnR3YXJlIGlzIGZyZWVseSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoaXMgbm90aWNlCisgKiBpcyBwcmVzZXJ2ZWQuCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorX19GQlNESUQoIiRGcmVlQlNEJCIpOworCisjaW5jbHVkZSA8ZmxvYXQuaD4KKworI2luY2x1ZGUgIm1hdGguaCIKKyNpbmNsdWRlICJtYXRoX3ByaXZhdGUuaCIKKworc3RhdGljIGNvbnN0IGZsb2F0CitvbmUJPSAxLjAsCitoYWxGWzJdCT0gezAuNSwtMC41LH0sCitvX3RocmVzaG9sZD0gIDguODcyMTY3OTY4OGUrMDEsICAvKiAweDQyYjE3MTgwICovCit1X3RocmVzaG9sZD0gLTEuMDM5NzIwODQwNWUrMDIsICAvKiAweGMyY2ZmMWI1ICovCitsbjJISVsyXSAgID17IDYuOTMxNDU3NTE5NWUtMDEsCQkvKiAweDNmMzE3MjAwICovCisJICAgICAtNi45MzE0NTc1MTk1ZS0wMSx9LAkvKiAweGJmMzE3MjAwICovCitsbjJMT1syXSAgID17IDEuNDI4NjA2NzY1M2UtMDYsICAJLyogMHgzNWJmYmU4ZSAqLworCSAgICAgLTEuNDI4NjA2NzY1M2UtMDYsfSwJLyogMHhiNWJmYmU4ZSAqLworaW52bG4yID0gIDEuNDQyNjk1MDIxNmUrMDAsIAkJLyogMHgzZmI4YWEzYiAqLworLyoKKyAqIERvbWFpbiBbLTAuMzQ1NjgsIDAuMzQ1NjhdLCByYW5nZSB+Wy00LjI3OGUtOSwgNC40NDdlLTldOgorICogfHgqKGV4cCh4KSsxKS8oZXhwKHgpLTEpIC0gcCh4KXwgPCAyKiotMjcuNzQKKyAqLworUDEgPSAgMS42NjY2NjI1NDQwZS0xLAkJLyogIDB4YWFhYThmLjBwLTI2ICovCitQMiA9IC0yLjc2NjczMzI5MDZlLTM7CQkvKiAtMHhiNTUyMTUuMHAtMzIgKi8KKworc3RhdGljIHZvbGF0aWxlIGZsb2F0CitodWdlCT0gMS4wZSszMCwKK3R3b20xMDAgPSA3Ljg4ODYwOTA1MjJlLTMxOyAgICAgIC8qIDIqKi0xMDA9MHgwZDgwMDAwMCAqLworCitmbG9hdAorX19pZWVlNzU0X2V4cGYoZmxvYXQgeCkKK3sKKwlmbG9hdCB5LGhpPTAuMCxsbz0wLjAsYyx0LHR3b3BrOworCWludDMyX3Qgaz0wLHhzYjsKKwl1X2ludDMyX3QgaHg7CisKKwlHRVRfRkxPQVRfV09SRChoeCx4KTsKKwl4c2IgPSAoaHg+PjMxKSYxOwkJLyogc2lnbiBiaXQgb2YgeCAqLworCWh4ICY9IDB4N2ZmZmZmZmY7CQkvKiBoaWdoIHdvcmQgb2YgfHh8ICovCisKKyAgICAvKiBmaWx0ZXIgb3V0IG5vbi1maW5pdGUgYXJndW1lbnQgKi8KKwlpZihoeCA+PSAweDQyYjE3MjE4KSB7CQkJLyogaWYgfHh8Pj04OC43MjEuLi4gKi8KKwkgICAgaWYoaHg+MHg3ZjgwMDAwMCkKKwkJIHJldHVybiB4K3g7CSAJCS8qIE5hTiAqLworICAgICAgICAgICAgaWYoaHg9PTB4N2Y4MDAwMDApCisJCXJldHVybiAoeHNiPT0wKT8geDowLjA7CQkvKiBleHAoKy1pbmYpPXtpbmYsMH0gKi8KKwkgICAgaWYoeCA+IG9fdGhyZXNob2xkKSByZXR1cm4gaHVnZSpodWdlOyAvKiBvdmVyZmxvdyAqLworCSAgICBpZih4IDwgdV90aHJlc2hvbGQpIHJldHVybiB0d29tMTAwKnR3b20xMDA7IC8qIHVuZGVyZmxvdyAqLworCX0KKworICAgIC8qIGFyZ3VtZW50IHJlZHVjdGlvbiAqLworCWlmKGh4ID4gMHgzZWIxNzIxOCkgewkJLyogaWYgIHx4fCA+IDAuNSBsbjIgKi8KKwkgICAgaWYoaHggPCAweDNGODUxNTkyKSB7CS8qIGFuZCB8eHwgPCAxLjUgbG4yICovCisJCWhpID0geC1sbjJISVt4c2JdOyBsbz1sbjJMT1t4c2JdOyBrID0gMS14c2IteHNiOworCSAgICB9IGVsc2UgeworCQlrICA9IGludmxuMip4K2hhbEZbeHNiXTsKKwkJdCAgPSBrOworCQloaSA9IHggLSB0KmxuMkhJWzBdOwkvKiB0KmxuMkhJIGlzIGV4YWN0IGhlcmUgKi8KKwkJbG8gPSB0KmxuMkxPWzBdOworCSAgICB9CisJICAgIFNUUklDVF9BU1NJR04oZmxvYXQsIHgsIGhpIC0gbG8pOworCX0KKwllbHNlIGlmKGh4IDwgMHgzOTAwMDAwMCkgIHsJLyogd2hlbiB8eHw8MioqLTE0ICovCisJICAgIGlmKGh1Z2UreD5vbmUpIHJldHVybiBvbmUreDsvKiB0cmlnZ2VyIGluZXhhY3QgKi8KKwl9CisJZWxzZSBrID0gMDsKKworICAgIC8qIHggaXMgbm93IGluIHByaW1hcnkgcmFuZ2UgKi8KKwl0ICA9IHgqeDsKKwlpZihrID49IC0xMjUpCisJICAgIFNFVF9GTE9BVF9XT1JEKHR3b3BrLDB4M2Y4MDAwMDArKGs8PDIzKSk7CisJZWxzZQorCSAgICBTRVRfRkxPQVRfV09SRCh0d29waywweDNmODAwMDAwKygoaysxMDApPDwyMykpOworCWMgID0geCAtIHQqKFAxK3QqUDIpOworCWlmKGs9PTApIAlyZXR1cm4gb25lLSgoeCpjKS8oYy0oZmxvYXQpMi4wKS14KTsKKwllbHNlIAkJeSA9IG9uZS0oKGxvLSh4KmMpLygoZmxvYXQpMi4wLWMpKS1oaSk7CisJaWYoayA+PSAtMTI1KSB7CisJICAgIGlmKGs9PTEyOCkgcmV0dXJuIHkqMi4wRioweDFwMTI3RjsKKwkgICAgcmV0dXJuIHkqdHdvcGs7CisJfSBlbHNlIHsKKwkgICAgcmV0dXJuIHkqdHdvcGsqdHdvbTEwMDsKKwl9Cit9CmRpZmYgLS1naXQgYS9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL2VfZm1vZC5jIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9lX2Ztb2QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MjBhYTAzCi0tLSAvZGV2L251bGwKKysrIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9lX2Ztb2QuYwpAQCAtMCwwICsxLDEzMiBAQAorCisvKiBAKCMpZV9mbW9kLmMgMS4zIDk1LzAxLzE4ICovCisvKgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogQ29weXJpZ2h0IChDKSAxOTkzIGJ5IFN1biBNaWNyb3N5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBEZXZlbG9wZWQgYXQgU3VuU29mdCwgYSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGJ1c2luZXNzLgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcworICogc29mdHdhcmUgaXMgZnJlZWx5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhpcyBub3RpY2UgCisgKiBpcyBwcmVzZXJ2ZWQuCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorX19GQlNESUQoIiRGcmVlQlNEJCIpOworCisvKiAKKyAqIF9faWVlZTc1NF9mbW9kKHgseSkKKyAqIFJldHVybiB4IG1vZCB5IGluIGV4YWN0IGFyaXRobWV0aWMKKyAqIE1ldGhvZDogc2hpZnQgYW5kIHN1YnRyYWN0CisgKi8KKworI2luY2x1ZGUgIm1hdGguaCIKKyNpbmNsdWRlICJtYXRoX3ByaXZhdGUuaCIKKworc3RhdGljIGNvbnN0IGRvdWJsZSBvbmUgPSAxLjAsIFplcm9bXSA9IHswLjAsIC0wLjAsfTsKKworZG91YmxlCitfX2llZWU3NTRfZm1vZChkb3VibGUgeCwgZG91YmxlIHkpCit7CisJaW50MzJfdCBuLGh4LGh5LGh6LGl4LGl5LHN4LGk7CisJdV9pbnQzMl90IGx4LGx5LGx6OworCisJRVhUUkFDVF9XT1JEUyhoeCxseCx4KTsKKwlFWFRSQUNUX1dPUkRTKGh5LGx5LHkpOworCXN4ID0gaHgmMHg4MDAwMDAwMDsJCS8qIHNpZ24gb2YgeCAqLworCWh4IF49c3g7CQkvKiB8eHwgKi8KKwloeSAmPSAweDdmZmZmZmZmOwkvKiB8eXwgKi8KKworICAgIC8qIHB1cmdlIG9mZiBleGNlcHRpb24gdmFsdWVzICovCisJaWYoKGh5fGx5KT09MHx8KGh4Pj0weDdmZjAwMDAwKXx8CS8qIHk9MCxvciB4IG5vdCBmaW5pdGUgKi8KKwkgICgoaHl8KChseXwtbHkpPj4zMSkpPjB4N2ZmMDAwMDApKQkvKiBvciB5IGlzIE5hTiAqLworCSAgICByZXR1cm4gKHgqeSkvKHgqeSk7CisJaWYoaHg8PWh5KSB7CisJICAgIGlmKChoeDxoeSl8fChseDxseSkpIHJldHVybiB4OwkvKiB8eHw8fHl8IHJldHVybiB4ICovCisJICAgIGlmKGx4PT1seSkgCisJCXJldHVybiBaZXJvWyh1X2ludDMyX3Qpc3g+PjMxXTsJLyogfHh8PXx5fCByZXR1cm4geCowKi8KKwl9CisKKyAgICAvKiBkZXRlcm1pbmUgaXggPSBpbG9nYih4KSAqLworCWlmKGh4PDB4MDAxMDAwMDApIHsJLyogc3Vibm9ybWFsIHggKi8KKwkgICAgaWYoaHg9PTApIHsKKwkJZm9yIChpeCA9IC0xMDQzLCBpPWx4OyBpPjA7IGk8PD0xKSBpeCAtPTE7CisJICAgIH0gZWxzZSB7CisJCWZvciAoaXggPSAtMTAyMixpPShoeDw8MTEpOyBpPjA7IGk8PD0xKSBpeCAtPTE7CisJICAgIH0KKwl9IGVsc2UgaXggPSAoaHg+PjIwKS0xMDIzOworCisgICAgLyogZGV0ZXJtaW5lIGl5ID0gaWxvZ2IoeSkgKi8KKwlpZihoeTwweDAwMTAwMDAwKSB7CS8qIHN1Ym5vcm1hbCB5ICovCisJICAgIGlmKGh5PT0wKSB7CisJCWZvciAoaXkgPSAtMTA0MywgaT1seTsgaT4wOyBpPDw9MSkgaXkgLT0xOworCSAgICB9IGVsc2UgeworCQlmb3IgKGl5ID0gLTEwMjIsaT0oaHk8PDExKTsgaT4wOyBpPDw9MSkgaXkgLT0xOworCSAgICB9CisJfSBlbHNlIGl5ID0gKGh5Pj4yMCktMTAyMzsKKworICAgIC8qIHNldCB1cCB7aHgsbHh9LCB7aHksbHl9IGFuZCBhbGlnbiB5IHRvIHggKi8KKwlpZihpeCA+PSAtMTAyMikgCisJICAgIGh4ID0gMHgwMDEwMDAwMHwoMHgwMDBmZmZmZiZoeCk7CisJZWxzZSB7CQkvKiBzdWJub3JtYWwgeCwgc2hpZnQgeCB0byBub3JtYWwgKi8KKwkgICAgbiA9IC0xMDIyLWl4OworCSAgICBpZihuPD0zMSkgeworCSAgICAgICAgaHggPSAoaHg8PG4pfChseD4+KDMyLW4pKTsKKwkgICAgICAgIGx4IDw8PSBuOworCSAgICB9IGVsc2UgeworCQloeCA9IGx4PDwobi0zMik7CisJCWx4ID0gMDsKKwkgICAgfQorCX0KKwlpZihpeSA+PSAtMTAyMikgCisJICAgIGh5ID0gMHgwMDEwMDAwMHwoMHgwMDBmZmZmZiZoeSk7CisJZWxzZSB7CQkvKiBzdWJub3JtYWwgeSwgc2hpZnQgeSB0byBub3JtYWwgKi8KKwkgICAgbiA9IC0xMDIyLWl5OworCSAgICBpZihuPD0zMSkgeworCSAgICAgICAgaHkgPSAoaHk8PG4pfChseT4+KDMyLW4pKTsKKwkgICAgICAgIGx5IDw8PSBuOworCSAgICB9IGVsc2UgeworCQloeSA9IGx5PDwobi0zMik7CisJCWx5ID0gMDsKKwkgICAgfQorCX0KKworICAgIC8qIGZpeCBwb2ludCBmbW9kICovCisJbiA9IGl4IC0gaXk7CisJd2hpbGUobi0tKSB7CisJICAgIGh6PWh4LWh5O2x6PWx4LWx5OyBpZihseDxseSkgaHogLT0gMTsKKwkgICAgaWYoaHo8MCl7aHggPSBoeCtoeCsobHg+PjMxKTsgbHggPSBseCtseDt9CisJICAgIGVsc2UgeworCSAgICAJaWYoKGh6fGx6KT09MCkgCQkvKiByZXR1cm4gc2lnbih4KSowICovCisJCSAgICByZXR1cm4gWmVyb1sodV9pbnQzMl90KXN4Pj4zMV07CisJICAgIAloeCA9IGh6K2h6Kyhsej4+MzEpOyBseCA9IGx6K2x6OworCSAgICB9CisJfQorCWh6PWh4LWh5O2x6PWx4LWx5OyBpZihseDxseSkgaHogLT0gMTsKKwlpZihoej49MCkge2h4PWh6O2x4PWx6O30KKworICAgIC8qIGNvbnZlcnQgYmFjayB0byBmbG9hdGluZyB2YWx1ZSBhbmQgcmVzdG9yZSB0aGUgc2lnbiAqLworCWlmKChoeHxseCk9PTApIAkJCS8qIHJldHVybiBzaWduKHgpKjAgKi8KKwkgICAgcmV0dXJuIFplcm9bKHVfaW50MzJfdClzeD4+MzFdOworCXdoaWxlKGh4PDB4MDAxMDAwMDApIHsJCS8qIG5vcm1hbGl6ZSB4ICovCisJICAgIGh4ID0gaHgraHgrKGx4Pj4zMSk7IGx4ID0gbHgrbHg7CisJICAgIGl5IC09IDE7CisJfQorCWlmKGl5Pj0gLTEwMjIpIHsJLyogbm9ybWFsaXplIG91dHB1dCAqLworCSAgICBoeCA9ICgoaHgtMHgwMDEwMDAwMCl8KChpeSsxMDIzKTw8MjApKTsKKwkgICAgSU5TRVJUX1dPUkRTKHgsaHh8c3gsbHgpOworCX0gZWxzZSB7CQkvKiBzdWJub3JtYWwgb3V0cHV0ICovCisJICAgIG4gPSAtMTAyMiAtIGl5OworCSAgICBpZihuPD0yMCkgeworCQlseCA9IChseD4+bil8KCh1X2ludDMyX3QpaHg8PCgzMi1uKSk7CisJCWh4ID4+PSBuOworCSAgICB9IGVsc2UgaWYgKG48PTMxKSB7CisJCWx4ID0gKGh4PDwoMzItbikpfChseD4+bik7IGh4ID0gc3g7CisJICAgIH0gZWxzZSB7CisJCWx4ID0gaHg+PihuLTMyKTsgaHggPSBzeDsKKwkgICAgfQorCSAgICBJTlNFUlRfV09SRFMoeCxoeHxzeCxseCk7CisJICAgIHggKj0gb25lOwkJLyogY3JlYXRlIG5lY2Vzc2FyeSBzaWduYWwgKi8KKwl9CisJcmV0dXJuIHg7CQkvKiBleGFjdCBvdXRwdXQgKi8KK30KZGlmZiAtLWdpdCBhL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvZV9mbW9kZi5jIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9lX2Ztb2RmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTJjZTM3MwotLS0gL2Rldi9udWxsCisrKyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvZV9mbW9kZi5jCkBAIC0wLDAgKzEsMTA0IEBACisvKiBlX2Ztb2RmLmMgLS0gZmxvYXQgdmVyc2lvbiBvZiBlX2Ztb2QuYy4KKyAqIENvbnZlcnNpb24gdG8gZmxvYXQgYnkgSWFuIExhbmNlIFRheWxvciwgQ3lnbnVzIFN1cHBvcnQsIGlhbkBjeWdudXMuY29tLgorICovCisKKy8qCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBDb3B5cmlnaHQgKEMpIDE5OTMgYnkgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIERldmVsb3BlZCBhdCBTdW5Qcm8sIGEgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBidXNpbmVzcy4KKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKKyAqIHNvZnR3YXJlIGlzIGZyZWVseSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoaXMgbm90aWNlCisgKiBpcyBwcmVzZXJ2ZWQuCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorX19GQlNESUQoIiRGcmVlQlNEJCIpOworCisvKgorICogX19pZWVlNzU0X2Ztb2RmKHgseSkKKyAqIFJldHVybiB4IG1vZCB5IGluIGV4YWN0IGFyaXRobWV0aWMKKyAqIE1ldGhvZDogc2hpZnQgYW5kIHN1YnRyYWN0CisgKi8KKworI2luY2x1ZGUgIm1hdGguaCIKKyNpbmNsdWRlICJtYXRoX3ByaXZhdGUuaCIKKworc3RhdGljIGNvbnN0IGZsb2F0IG9uZSA9IDEuMCwgWmVyb1tdID0gezAuMCwgLTAuMCx9OworCitmbG9hdAorX19pZWVlNzU0X2Ztb2RmKGZsb2F0IHgsIGZsb2F0IHkpCit7CisJaW50MzJfdCBuLGh4LGh5LGh6LGl4LGl5LHN4LGk7CisKKwlHRVRfRkxPQVRfV09SRChoeCx4KTsKKwlHRVRfRkxPQVRfV09SRChoeSx5KTsKKwlzeCA9IGh4JjB4ODAwMDAwMDA7CQkvKiBzaWduIG9mIHggKi8KKwloeCBePXN4OwkJLyogfHh8ICovCisJaHkgJj0gMHg3ZmZmZmZmZjsJLyogfHl8ICovCisKKyAgICAvKiBwdXJnZSBvZmYgZXhjZXB0aW9uIHZhbHVlcyAqLworCWlmKGh5PT0wfHwoaHg+PTB4N2Y4MDAwMDApfHwJCS8qIHk9MCxvciB4IG5vdCBmaW5pdGUgKi8KKwkgICAoaHk+MHg3ZjgwMDAwMCkpCQkJLyogb3IgeSBpcyBOYU4gKi8KKwkgICAgcmV0dXJuICh4KnkpLyh4KnkpOworCWlmKGh4PGh5KSByZXR1cm4geDsJCQkvKiB8eHw8fHl8IHJldHVybiB4ICovCisJaWYoaHg9PWh5KQorCSAgICByZXR1cm4gWmVyb1sodV9pbnQzMl90KXN4Pj4zMV07CS8qIHx4fD18eXwgcmV0dXJuIHgqMCovCisKKyAgICAvKiBkZXRlcm1pbmUgaXggPSBpbG9nYih4KSAqLworCWlmKGh4PDB4MDA4MDAwMDApIHsJLyogc3Vibm9ybWFsIHggKi8KKwkgICAgZm9yIChpeCA9IC0xMjYsaT0oaHg8PDgpOyBpPjA7IGk8PD0xKSBpeCAtPTE7CisJfSBlbHNlIGl4ID0gKGh4Pj4yMyktMTI3OworCisgICAgLyogZGV0ZXJtaW5lIGl5ID0gaWxvZ2IoeSkgKi8KKwlpZihoeTwweDAwODAwMDAwKSB7CS8qIHN1Ym5vcm1hbCB5ICovCisJICAgIGZvciAoaXkgPSAtMTI2LGk9KGh5PDw4KTsgaT49MDsgaTw8PTEpIGl5IC09MTsKKwl9IGVsc2UgaXkgPSAoaHk+PjIzKS0xMjc7CisKKyAgICAvKiBzZXQgdXAge2h4LGx4fSwge2h5LGx5fSBhbmQgYWxpZ24geSB0byB4ICovCisJaWYoaXggPj0gLTEyNikKKwkgICAgaHggPSAweDAwODAwMDAwfCgweDAwN2ZmZmZmJmh4KTsKKwllbHNlIHsJCS8qIHN1Ym5vcm1hbCB4LCBzaGlmdCB4IHRvIG5vcm1hbCAqLworCSAgICBuID0gLTEyNi1peDsKKwkgICAgaHggPSBoeDw8bjsKKwl9CisJaWYoaXkgPj0gLTEyNikKKwkgICAgaHkgPSAweDAwODAwMDAwfCgweDAwN2ZmZmZmJmh5KTsKKwllbHNlIHsJCS8qIHN1Ym5vcm1hbCB5LCBzaGlmdCB5IHRvIG5vcm1hbCAqLworCSAgICBuID0gLTEyNi1peTsKKwkgICAgaHkgPSBoeTw8bjsKKwl9CisKKyAgICAvKiBmaXggcG9pbnQgZm1vZCAqLworCW4gPSBpeCAtIGl5OworCXdoaWxlKG4tLSkgeworCSAgICBoej1oeC1oeTsKKwkgICAgaWYoaHo8MCl7aHggPSBoeCtoeDt9CisJICAgIGVsc2UgeworCSAgICAJaWYoaHo9PTApIAkJLyogcmV0dXJuIHNpZ24oeCkqMCAqLworCQkgICAgcmV0dXJuIFplcm9bKHVfaW50MzJfdClzeD4+MzFdOworCSAgICAJaHggPSBoeitoejsKKwkgICAgfQorCX0KKwloej1oeC1oeTsKKwlpZihoej49MCkge2h4PWh6O30KKworICAgIC8qIGNvbnZlcnQgYmFjayB0byBmbG9hdGluZyB2YWx1ZSBhbmQgcmVzdG9yZSB0aGUgc2lnbiAqLworCWlmKGh4PT0wKSAJCQkvKiByZXR1cm4gc2lnbih4KSowICovCisJICAgIHJldHVybiBaZXJvWyh1X2ludDMyX3Qpc3g+PjMxXTsKKwl3aGlsZShoeDwweDAwODAwMDAwKSB7CQkvKiBub3JtYWxpemUgeCAqLworCSAgICBoeCA9IGh4K2h4OworCSAgICBpeSAtPSAxOworCX0KKwlpZihpeT49IC0xMjYpIHsJCS8qIG5vcm1hbGl6ZSBvdXRwdXQgKi8KKwkgICAgaHggPSAoKGh4LTB4MDA4MDAwMDApfCgoaXkrMTI3KTw8MjMpKTsKKwkgICAgU0VUX0ZMT0FUX1dPUkQoeCxoeHxzeCk7CisJfSBlbHNlIHsJCS8qIHN1Ym5vcm1hbCBvdXRwdXQgKi8KKwkgICAgbiA9IC0xMjYgLSBpeTsKKwkgICAgaHggPj49IG47CisJICAgIFNFVF9GTE9BVF9XT1JEKHgsaHh8c3gpOworCSAgICB4ICo9IG9uZTsJCS8qIGNyZWF0ZSBuZWNlc3Nhcnkgc2lnbmFsICovCisJfQorCXJldHVybiB4OwkJLyogZXhhY3Qgb3V0cHV0ICovCit9CmRpZmYgLS1naXQgYS9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL2VfZm1vZGwuYyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvZV9mbW9kbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzMTVmNzYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL2VfZm1vZGwuYwpAQCAtMCwwICsxLDE0OSBAQAorLyogQCgjKWVfZm1vZC5jIDEuMyA5NS8wMS8xOCAqLworLyotCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBDb3B5cmlnaHQgKEMpIDE5OTMgYnkgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIERldmVsb3BlZCBhdCBTdW5Tb2Z0LCBhIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gYnVzaW5lc3MuCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCisgKiBzb2Z0d2FyZSBpcyBmcmVlbHkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGlzIG5vdGljZSAKKyAqIGlzIHByZXNlcnZlZC4KKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CitfX0ZCU0RJRCgiJEZyZWVCU0QkIik7CisKKyNpbmNsdWRlIDxmbG9hdC5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorCisjaW5jbHVkZSAiZnBtYXRoLmgiCisjaW5jbHVkZSAibWF0aC5oIgorI2luY2x1ZGUgIm1hdGhfcHJpdmF0ZS5oIgorCisjZGVmaW5lCUJJQVMgKExEQkxfTUFYX0VYUCAtIDEpCisKKyNpZiBMREJMX01BTkxfU0laRSA+IDMyCit0eXBlZGVmCXVpbnQ2NF90IG1hbmxfdDsKKyNlbHNlCit0eXBlZGVmCXVpbnQzMl90IG1hbmxfdDsKKyNlbmRpZgorCisjaWYgTERCTF9NQU5IX1NJWkUgPiAzMgordHlwZWRlZgl1aW50NjRfdCBtYW5oX3Q7CisjZWxzZQordHlwZWRlZgl1aW50MzJfdCBtYW5oX3Q7CisjZW5kaWYKKworLyoKKyAqIFRoZXNlIG1hY3JvcyBhZGQgYW5kIHJlbW92ZSBhbiBleHBsaWNpdCBpbnRlZ2VyIGJpdCBpbiBmcm9udCBvZiB0aGUKKyAqIGZyYWN0aW9uYWwgbWFudGlzc2EsIGlmIHRoZSBhcmNoaXRlY3R1cmUgZG9lc24ndCBoYXZlIHN1Y2ggYSBiaXQgYnkKKyAqIGRlZmF1bHQgYWxyZWFkeS4KKyAqLworI2lmZGVmIExEQkxfSU1QTElDSVRfTkJJVAorI2RlZmluZQlTRVRfTkJJVChoeCkJKChoeCkgfCAoMVVMTCA8PCBMREJMX01BTkhfU0laRSkpCisjZGVmaW5lCUhGUkFDX0JJVFMJTERCTF9NQU5IX1NJWkUKKyNlbHNlCisjZGVmaW5lCVNFVF9OQklUKGh4KQkoaHgpCisjZGVmaW5lCUhGUkFDX0JJVFMJKExEQkxfTUFOSF9TSVpFIC0gMSkKKyNlbmRpZgorCisjZGVmaW5lCU1BTkxfU0hJRlQJKExEQkxfTUFOTF9TSVpFIC0gMSkKKworc3RhdGljIGNvbnN0IGxvbmcgZG91YmxlIG9uZSA9IDEuMCwgWmVyb1tdID0gezAuMCwgLTAuMCx9OworCisvKgorICogZm1vZGwoeCx5KQorICogUmV0dXJuIHggbW9kIHkgaW4gZXhhY3QgYXJpdGhtZXRpYworICogTWV0aG9kOiBzaGlmdCBhbmQgc3VidHJhY3QKKyAqCisgKiBBc3N1bXB0aW9uczoKKyAqIC0gVGhlIGxvdyBwYXJ0IG9mIHRoZSBtYW50aXNzYSBmaXRzIGluIGEgbWFubF90IGV4YWN0bHkuCisgKiAtIFRoZSBoaWdoIHBhcnQgb2YgdGhlIG1hbnRpc3NhIGZpdHMgaW4gYW4gaW50NjRfdCB3aXRoIGVub3VnaCByb29tCisgKiAgIGZvciBhbiBleHBsaWNpdCBpbnRlZ2VyIGJpdCBpbiBmcm9udCBvZiB0aGUgZnJhY3Rpb25hbCBiaXRzLgorICovCitsb25nIGRvdWJsZQorZm1vZGwobG9uZyBkb3VibGUgeCwgbG9uZyBkb3VibGUgeSkKK3sKKwl1bmlvbiBJRUVFbDJiaXRzIHV4LCB1eTsKKwlpbnQ2NF90IGh4LGh6OwkvKiBXZSBuZWVkIGEgY2FycnkgYml0IGV2ZW4gaWYgTERCTF9NQU5IX1NJWkUgaXMgMzIuICovCisJbWFuaF90IGh5OworCW1hbmxfdCBseCxseSxsejsKKwlpbnQgaXgsaXksbixzeDsKKworCXV4LmUgPSB4OworCXV5LmUgPSB5OworCXN4ID0gdXguYml0cy5zaWduOworCisgICAgLyogcHVyZ2Ugb2ZmIGV4Y2VwdGlvbiB2YWx1ZXMgKi8KKwlpZigodXkuYml0cy5leHB8dXkuYml0cy5tYW5ofHV5LmJpdHMubWFubCk9PTAgfHwgLyogeT0wICovCisJICAgKHV4LmJpdHMuZXhwID09IEJJQVMgKyBMREJMX01BWF9FWFApIHx8CSAvKiBvciB4IG5vdCBmaW5pdGUgKi8KKwkgICAodXkuYml0cy5leHAgPT0gQklBUyArIExEQkxfTUFYX0VYUCAmJgorCSAgICAoKHV5LmJpdHMubWFuaCZ+TERCTF9OQklUKXx1eS5iaXRzLm1hbmwpIT0wKSkgLyogb3IgeSBpcyBOYU4gKi8KKwkgICAgcmV0dXJuICh4KnkpLyh4KnkpOworCWlmKHV4LmJpdHMuZXhwPD11eS5iaXRzLmV4cCkgeworCSAgICBpZigodXguYml0cy5leHA8dXkuYml0cy5leHApIHx8CisJICAgICAgICh1eC5iaXRzLm1hbmg8PXV5LmJpdHMubWFuaCAmJgorCQkodXguYml0cy5tYW5oPHV5LmJpdHMubWFuaCB8fAorCQkgdXguYml0cy5tYW5sPHV5LmJpdHMubWFubCkpKSB7CisJCXJldHVybiB4OwkJLyogfHh8PHx5fCByZXR1cm4geCBvciB4LXkgKi8KKwkgICAgfQorCSAgICBpZih1eC5iaXRzLm1hbmg9PXV5LmJpdHMubWFuaCAmJiB1eC5iaXRzLm1hbmw9PXV5LmJpdHMubWFubCkgeworCQlyZXR1cm4gWmVyb1tzeF07CS8qIHx4fD18eXwgcmV0dXJuIHgqMCovCisJICAgIH0KKwl9CisKKyAgICAvKiBkZXRlcm1pbmUgaXggPSBpbG9nYih4KSAqLworCWlmKHV4LmJpdHMuZXhwID09IDApIHsJLyogc3Vibm9ybWFsIHggKi8KKwkgICAgdXguZSAqPSAweDEuMHA1MTI7CisJICAgIGl4ID0gdXguYml0cy5leHAgLSAoQklBUyArIDUxMik7CisJfSBlbHNlIHsKKwkgICAgaXggPSB1eC5iaXRzLmV4cCAtIEJJQVM7CisJfQorCisgICAgLyogZGV0ZXJtaW5lIGl5ID0gaWxvZ2IoeSkgKi8KKwlpZih1eS5iaXRzLmV4cCA9PSAwKSB7CS8qIHN1Ym5vcm1hbCB5ICovCisJICAgIHV5LmUgKj0gMHgxLjBwNTEyOworCSAgICBpeSA9IHV5LmJpdHMuZXhwIC0gKEJJQVMgKyA1MTIpOworCX0gZWxzZSB7CisJICAgIGl5ID0gdXkuYml0cy5leHAgLSBCSUFTOworCX0KKworICAgIC8qIHNldCB1cCB7aHgsbHh9LCB7aHksbHl9IGFuZCBhbGlnbiB5IHRvIHggKi8KKwloeCA9IFNFVF9OQklUKHV4LmJpdHMubWFuaCk7CisJaHkgPSBTRVRfTkJJVCh1eS5iaXRzLm1hbmgpOworCWx4ID0gdXguYml0cy5tYW5sOworCWx5ID0gdXkuYml0cy5tYW5sOworCisgICAgLyogZml4IHBvaW50IGZtb2QgKi8KKwluID0gaXggLSBpeTsKKworCXdoaWxlKG4tLSkgeworCSAgICBoej1oeC1oeTtsej1seC1seTsgaWYobHg8bHkpIGh6IC09IDE7CisJICAgIGlmKGh6PDApe2h4ID0gaHgraHgrKGx4Pj5NQU5MX1NISUZUKTsgbHggPSBseCtseDt9CisJICAgIGVsc2UgeworCQlpZiAoKGh6fGx6KT09MCkJCS8qIHJldHVybiBzaWduKHgpKjAgKi8KKwkJICAgIHJldHVybiBaZXJvW3N4XTsKKwkJaHggPSBoeitoeisobHo+Pk1BTkxfU0hJRlQpOyBseCA9IGx6K2x6OworCSAgICB9CisJfQorCWh6PWh4LWh5O2x6PWx4LWx5OyBpZihseDxseSkgaHogLT0gMTsKKwlpZihoej49MCkge2h4PWh6O2x4PWx6O30KKworICAgIC8qIGNvbnZlcnQgYmFjayB0byBmbG9hdGluZyB2YWx1ZSBhbmQgcmVzdG9yZSB0aGUgc2lnbiAqLworCWlmKChoeHxseCk9PTApCQkJLyogcmV0dXJuIHNpZ24oeCkqMCAqLworCSAgICByZXR1cm4gWmVyb1tzeF07CisJd2hpbGUoaHg8KDFVTEw8PEhGUkFDX0JJVFMpKSB7CS8qIG5vcm1hbGl6ZSB4ICovCisJICAgIGh4ID0gaHgraHgrKGx4Pj5NQU5MX1NISUZUKTsgbHggPSBseCtseDsKKwkgICAgaXkgLT0gMTsKKwl9CisJdXguYml0cy5tYW5oID0gaHg7IC8qIFRoZSBtYW50aXNzYSBpcyB0cnVuY2F0ZWQgaGVyZSBpZiBuZWVkZWQuICovCisJdXguYml0cy5tYW5sID0gbHg7CisJaWYgKGl5IDwgTERCTF9NSU5fRVhQKSB7CisJICAgIHV4LmJpdHMuZXhwID0gaXkgKyAoQklBUyArIDUxMik7CisJICAgIHV4LmUgKj0gMHgxcC01MTI7CisJfSBlbHNlIHsKKwkgICAgdXguYml0cy5leHAgPSBpeSArIEJJQVM7CisJfQorCXggPSB1eC5lICogb25lOwkJLyogY3JlYXRlIG5lY2Vzc2FyeSBzaWduYWwgKi8KKwlyZXR1cm4geDsJCS8qIGV4YWN0IG91dHB1dCAqLworfQpkaWZmIC0tZ2l0IGEvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9lX2dhbW1hLmMgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL2VfZ2FtbWEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOGZiNWNjCi0tLSAvZGV2L251bGwKKysrIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9lX2dhbW1hLmMKQEAgLTAsMCArMSwzMyBAQAorCisvKiBAKCMpZV9nYW1tYS5jIDEuMyA5NS8wMS8xOCAqLworLyoKKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIENvcHlyaWdodCAoQykgMTk5MyBieSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogRGV2ZWxvcGVkIGF0IFN1blNvZnQsIGEgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBidXNpbmVzcy4KKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKKyAqIHNvZnR3YXJlIGlzIGZyZWVseSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoaXMgbm90aWNlIAorICogaXMgcHJlc2VydmVkLgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICoKKyAqLworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CitfX0ZCU0RJRCgiJEZyZWVCU0QkIik7CisKKy8qIF9faWVlZTc1NF9nYW1tYSh4KQorICogUmV0dXJuIHRoZSBsb2dhcml0aG0gb2YgdGhlIEdhbW1hIGZ1bmN0aW9uIG9mIHguCisgKgorICogTWV0aG9kOiBjYWxsIF9faWVlZTc1NF9nYW1tYV9yCisgKi8KKworI2luY2x1ZGUgIm1hdGguaCIKKyNpbmNsdWRlICJtYXRoX3ByaXZhdGUuaCIKKworZXh0ZXJuIGludCBzaWduZ2FtOworCitkb3VibGUKK19faWVlZTc1NF9nYW1tYShkb3VibGUgeCkKK3sKKwlyZXR1cm4gX19pZWVlNzU0X2dhbW1hX3IoeCwmc2lnbmdhbSk7Cit9CmRpZmYgLS1naXQgYS9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL2VfZ2FtbWFfci5jIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9lX2dhbW1hX3IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzQyM2RjCi0tLSAvZGV2L251bGwKKysrIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9lX2dhbW1hX3IuYwpAQCAtMCwwICsxLDMyIEBACisKKy8qIEAoIyllX2dhbW1hX3IuYyAxLjMgOTUvMDEvMTggKi8KKy8qCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBDb3B5cmlnaHQgKEMpIDE5OTMgYnkgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIERldmVsb3BlZCBhdCBTdW5Tb2Z0LCBhIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gYnVzaW5lc3MuCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCisgKiBzb2Z0d2FyZSBpcyBmcmVlbHkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGlzIG5vdGljZSAKKyAqIGlzIHByZXNlcnZlZC4KKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqCisgKi8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorX19GQlNESUQoIiRGcmVlQlNEJCIpOworCisvKiBfX2llZWU3NTRfZ2FtbWFfcih4LCBzaWduZ2FtcCkKKyAqIFJlZW50cmFudCB2ZXJzaW9uIG9mIHRoZSBsb2dhcml0aG0gb2YgdGhlIEdhbW1hIGZ1bmN0aW9uIAorICogd2l0aCB1c2VyIHByb3ZpZGUgcG9pbnRlciBmb3IgdGhlIHNpZ24gb2YgR2FtbWEoeCkuIAorICoKKyAqIE1ldGhvZDogU2VlIF9faWVlZTc1NF9sZ2FtbWFfcgorICovCisKKyNpbmNsdWRlICJtYXRoLmgiCisjaW5jbHVkZSAibWF0aF9wcml2YXRlLmgiCisKK2RvdWJsZQorX19pZWVlNzU0X2dhbW1hX3IoZG91YmxlIHgsIGludCAqc2lnbmdhbXApCit7CisJcmV0dXJuIF9faWVlZTc1NF9sZ2FtbWFfcih4LHNpZ25nYW1wKTsKK30KZGlmZiAtLWdpdCBhL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvZV9nYW1tYWYuYyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvZV9nYW1tYWYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMWIxNjY4Ci0tLSAvZGV2L251bGwKKysrIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9lX2dhbW1hZi5jCkBAIC0wLDAgKzEsMzQgQEAKKy8qIGVfZ2FtbWFmLmMgLS0gZmxvYXQgdmVyc2lvbiBvZiBlX2dhbW1hLmMuCisgKiBDb252ZXJzaW9uIHRvIGZsb2F0IGJ5IElhbiBMYW5jZSBUYXlsb3IsIEN5Z251cyBTdXBwb3J0LCBpYW5AY3lnbnVzLmNvbS4KKyAqLworCisvKgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogQ29weXJpZ2h0IChDKSAxOTkzIGJ5IFN1biBNaWNyb3N5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBEZXZlbG9wZWQgYXQgU3VuUHJvLCBhIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gYnVzaW5lc3MuCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCisgKiBzb2Z0d2FyZSBpcyBmcmVlbHkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGlzIG5vdGljZQorICogaXMgcHJlc2VydmVkLgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJTRCQiKTsKKworLyogX19pZWVlNzU0X2dhbW1hZih4KQorICogUmV0dXJuIHRoZSBsb2dhcml0aG0gb2YgdGhlIEdhbW1hIGZ1bmN0aW9uIG9mIHguCisgKgorICogTWV0aG9kOiBjYWxsIF9faWVlZTc1NF9nYW1tYWZfcgorICovCisKKyNpbmNsdWRlICJtYXRoLmgiCisjaW5jbHVkZSAibWF0aF9wcml2YXRlLmgiCisKK2V4dGVybiBpbnQgc2lnbmdhbTsKKworZmxvYXQKK19faWVlZTc1NF9nYW1tYWYoZmxvYXQgeCkKK3sKKwlyZXR1cm4gX19pZWVlNzU0X2dhbW1hZl9yKHgsJnNpZ25nYW0pOworfQpkaWZmIC0tZ2l0IGEvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9lX2dhbW1hZl9yLmMgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL2VfZ2FtbWFmX3IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZDc4MzFiCi0tLSAvZGV2L251bGwKKysrIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9lX2dhbW1hZl9yLmMKQEAgLTAsMCArMSwzMyBAQAorLyogZV9nYW1tYWZfci5jIC0tIGZsb2F0IHZlcnNpb24gb2YgZV9nYW1tYV9yLmMuCisgKiBDb252ZXJzaW9uIHRvIGZsb2F0IGJ5IElhbiBMYW5jZSBUYXlsb3IsIEN5Z251cyBTdXBwb3J0LCBpYW5AY3lnbnVzLmNvbS4KKyAqLworCisvKgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogQ29weXJpZ2h0IChDKSAxOTkzIGJ5IFN1biBNaWNyb3N5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBEZXZlbG9wZWQgYXQgU3VuUHJvLCBhIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gYnVzaW5lc3MuCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCisgKiBzb2Z0d2FyZSBpcyBmcmVlbHkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGlzIG5vdGljZQorICogaXMgcHJlc2VydmVkLgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJTRCQiKTsKKworLyogX19pZWVlNzU0X2dhbW1hZl9yKHgsIHNpZ25nYW1wKQorICogUmVlbnRyYW50IHZlcnNpb24gb2YgdGhlIGxvZ2FyaXRobSBvZiB0aGUgR2FtbWEgZnVuY3Rpb24KKyAqIHdpdGggdXNlciBwcm92aWRlIHBvaW50ZXIgZm9yIHRoZSBzaWduIG9mIEdhbW1hKHgpLgorICoKKyAqIE1ldGhvZDogU2VlIF9faWVlZTc1NF9sZ2FtbWFmX3IKKyAqLworCisjaW5jbHVkZSAibWF0aC5oIgorI2luY2x1ZGUgIm1hdGhfcHJpdmF0ZS5oIgorCitmbG9hdAorX19pZWVlNzU0X2dhbW1hZl9yKGZsb2F0IHgsIGludCAqc2lnbmdhbXApCit7CisJcmV0dXJuIF9faWVlZTc1NF9sZ2FtbWFmX3IoeCxzaWduZ2FtcCk7Cit9CmRpZmYgLS1naXQgYS9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL2VfaHlwb3QuYyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvZV9oeXBvdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzOThlOTgKLS0tIC9kZXYvbnVsbAorKysgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL2VfaHlwb3QuYwpAQCAtMCwwICsxLDEzMSBAQAorCisvKiBAKCMpZV9oeXBvdC5jIDEuMyA5NS8wMS8xOCAqLworLyoKKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIENvcHlyaWdodCAoQykgMTk5MyBieSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogRGV2ZWxvcGVkIGF0IFN1blNvZnQsIGEgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBidXNpbmVzcy4KKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKKyAqIHNvZnR3YXJlIGlzIGZyZWVseSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoaXMgbm90aWNlIAorICogaXMgcHJlc2VydmVkLgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJTRCQiKTsKKworLyogX19pZWVlNzU0X2h5cG90KHgseSkKKyAqCisgKiBNZXRob2QgOiAgICAgICAgICAgICAgICAgIAorICoJSWYgKGFzc3VtZSByb3VuZC10by1uZWFyZXN0KSB6PXgqeCt5KnkgCisgKgloYXMgZXJyb3IgbGVzcyB0aGFuIHNxcnQoMikvMiB1bHAsIHRoYW4gCisgKglzcXJ0KHopIGhhcyBlcnJvciBsZXNzIHRoYW4gMSB1bHAgKGV4ZXJjaXNlKS4KKyAqCisgKglTbywgY29tcHV0ZSBzcXJ0KHgqeCt5KnkpIHdpdGggc29tZSBjYXJlIGFzIAorICoJZm9sbG93cyB0byBnZXQgdGhlIGVycm9yIGJlbG93IDEgdWxwOgorICoKKyAqCUFzc3VtZSB4Pnk+MDsKKyAqCShpZiBwb3NzaWJsZSwgc2V0IHJvdW5kaW5nIHRvIHJvdW5kLXRvLW5lYXJlc3QpCisgKgkxLiBpZiB4ID4gMnkgIHVzZQorICoJCXgxKngxKyh5KnkrKHgyKih4K3gxKSkpIGZvciB4KngreSp5CisgKgl3aGVyZSB4MSA9IHggd2l0aCBsb3dlciAzMiBiaXRzIGNsZWFyZWQsIHgyID0geC14MTsgZWxzZQorICoJMi4gaWYgeCA8PSAyeSB1c2UKKyAqCQl0MSp5MSsoKHgteSkqKHgteSkrKHQxKnkyK3QyKnkpKQorICoJd2hlcmUgdDEgPSAyeCB3aXRoIGxvd2VyIDMyIGJpdHMgY2xlYXJlZCwgdDIgPSAyeC10MSwgCisgKgl5MT0geSB3aXRoIGxvd2VyIDMyIGJpdHMgY2hvcHBlZCwgeTIgPSB5LXkxLgorICoJCQorICoJTk9URTogc2NhbGluZyBtYXkgYmUgbmVjZXNzYXJ5IGlmIHNvbWUgYXJndW1lbnQgaXMgdG9vIAorICoJICAgICAgbGFyZ2Ugb3IgdG9vIHRpbnkKKyAqCisgKiBTcGVjaWFsIGNhc2VzOgorICoJaHlwb3QoeCx5KSBpcyBJTkYgaWYgeCBvciB5IGlzICtJTkYgb3IgLUlORjsgZWxzZQorICoJaHlwb3QoeCx5KSBpcyBOQU4gaWYgeCBvciB5IGlzIE5BTi4KKyAqCisgKiBBY2N1cmFjeToKKyAqIAloeXBvdCh4LHkpIHJldHVybnMgc3FydCh4XjIreV4yKSB3aXRoIGVycm9yIGxlc3MgCisgKiAJdGhhbiAxIHVscHMgKHVuaXRzIGluIHRoZSBsYXN0IHBsYWNlKSAKKyAqLworCisjaW5jbHVkZSA8ZmxvYXQuaD4KKworI2luY2x1ZGUgIm1hdGguaCIKKyNpbmNsdWRlICJtYXRoX3ByaXZhdGUuaCIKKworZG91YmxlCitfX2llZWU3NTRfaHlwb3QoZG91YmxlIHgsIGRvdWJsZSB5KQoreworCWRvdWJsZSBhLGIsdDEsdDIseTEseTIsdzsKKwlpbnQzMl90IGosayxoYSxoYjsKKworCUdFVF9ISUdIX1dPUkQoaGEseCk7CisJaGEgJj0gMHg3ZmZmZmZmZjsKKwlHRVRfSElHSF9XT1JEKGhiLHkpOworCWhiICY9IDB4N2ZmZmZmZmY7CisJaWYoaGIgPiBoYSkge2E9eTtiPXg7aj1oYTsgaGE9aGI7aGI9ajt9IGVsc2Uge2E9eDtiPXk7fQorCWEgPSBmYWJzKGEpOworCWIgPSBmYWJzKGIpOworCWlmKChoYS1oYik+MHgzYzAwMDAwKSB7cmV0dXJuIGErYjt9IC8qIHgveSA+IDIqKjYwICovCisJaz0wOworCWlmKGhhID4gMHg1ZjMwMDAwMCkgewkvKiBhPjIqKjUwMCAqLworCSAgIGlmKGhhID49IDB4N2ZmMDAwMDApIHsJLyogSW5mIG9yIE5hTiAqLworCSAgICAgICB1X2ludDMyX3QgbG93OworCSAgICAgICAvKiBVc2Ugb3JpZ2luYWwgYXJnIG9yZGVyIGlmZiByZXN1bHQgaXMgTmFOOyBxdWlldGVuIHNOYU5zLiAqLworCSAgICAgICB3ID0gZmFicyh4KzAuMCktZmFicyh5KzAuMCk7CisJICAgICAgIEdFVF9MT1dfV09SRChsb3csYSk7CisJICAgICAgIGlmKCgoaGEmMHhmZmZmZil8bG93KT09MCkgdyA9IGE7CisJICAgICAgIEdFVF9MT1dfV09SRChsb3csYik7CisJICAgICAgIGlmKCgoaGJeMHg3ZmYwMDAwMCl8bG93KT09MCkgdyA9IGI7CisJICAgICAgIHJldHVybiB3OworCSAgIH0KKwkgICAvKiBzY2FsZSBhIGFuZCBiIGJ5IDIqKi02MDAgKi8KKwkgICBoYSAtPSAweDI1ODAwMDAwOyBoYiAtPSAweDI1ODAwMDAwOwlrICs9IDYwMDsKKwkgICBTRVRfSElHSF9XT1JEKGEsaGEpOworCSAgIFNFVF9ISUdIX1dPUkQoYixoYik7CisJfQorCWlmKGhiIDwgMHgyMGIwMDAwMCkgewkvKiBiIDwgMioqLTUwMCAqLworCSAgICBpZihoYiA8PSAweDAwMGZmZmZmKSB7CS8qIHN1Ym5vcm1hbCBiIG9yIDAgKi8KKwkgICAgICAgIHVfaW50MzJfdCBsb3c7CisJCUdFVF9MT1dfV09SRChsb3csYik7CisJCWlmKChoYnxsb3cpPT0wKSByZXR1cm4gYTsKKwkJdDE9MDsKKwkJU0VUX0hJR0hfV09SRCh0MSwweDdmZDAwMDAwKTsJLyogdDE9Ml4xMDIyICovCisJCWIgKj0gdDE7CisJCWEgKj0gdDE7CisJCWsgLT0gMTAyMjsKKwkgICAgfSBlbHNlIHsJCS8qIHNjYWxlIGEgYW5kIGIgYnkgMl42MDAgKi8KKwkgICAgICAgIGhhICs9IDB4MjU4MDAwMDA7IAkvKiBhICo9IDJeNjAwICovCisJCWhiICs9IDB4MjU4MDAwMDA7CS8qIGIgKj0gMl42MDAgKi8KKwkJayAtPSA2MDA7CisJCVNFVF9ISUdIX1dPUkQoYSxoYSk7CisJCVNFVF9ISUdIX1dPUkQoYixoYik7CisJICAgIH0KKwl9CisgICAgLyogbWVkaXVtIHNpemUgYSBhbmQgYiAqLworCXcgPSBhLWI7CisJaWYgKHc+YikgeworCSAgICB0MSA9IDA7CisJICAgIFNFVF9ISUdIX1dPUkQodDEsaGEpOworCSAgICB0MiA9IGEtdDE7CisJICAgIHcgID0gc3FydCh0MSp0MS0oYiooLWIpLXQyKihhK3QxKSkpOworCX0gZWxzZSB7CisJICAgIGEgID0gYSthOworCSAgICB5MSA9IDA7CisJICAgIFNFVF9ISUdIX1dPUkQoeTEsaGIpOworCSAgICB5MiA9IGIgLSB5MTsKKwkgICAgdDEgPSAwOworCSAgICBTRVRfSElHSF9XT1JEKHQxLGhhKzB4MDAxMDAwMDApOworCSAgICB0MiA9IGEgLSB0MTsKKwkgICAgdyAgPSBzcXJ0KHQxKnkxLSh3KigtdyktKHQxKnkyK3QyKmIpKSk7CisJfQorCWlmKGshPTApIHsKKwkgICAgdV9pbnQzMl90IGhpZ2g7CisJICAgIHQxID0gMS4wOworCSAgICBHRVRfSElHSF9XT1JEKGhpZ2gsdDEpOworCSAgICBTRVRfSElHSF9XT1JEKHQxLGhpZ2grKGs8PDIwKSk7CisJICAgIHJldHVybiB0MSp3OworCX0gZWxzZSByZXR1cm4gdzsKK30KKworI2lmIExEQkxfTUFOVF9ESUcgPT0gNTMKK19fd2Vha19yZWZlcmVuY2UoaHlwb3QsIGh5cG90bCk7CisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvZV9oeXBvdGYuYyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvZV9oeXBvdGYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZDA4M2U0Ci0tLSAvZGV2L251bGwKKysrIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9lX2h5cG90Zi5jCkBAIC0wLDAgKzEsODMgQEAKKy8qIGVfaHlwb3RmLmMgLS0gZmxvYXQgdmVyc2lvbiBvZiBlX2h5cG90LmMuCisgKiBDb252ZXJzaW9uIHRvIGZsb2F0IGJ5IElhbiBMYW5jZSBUYXlsb3IsIEN5Z251cyBTdXBwb3J0LCBpYW5AY3lnbnVzLmNvbS4KKyAqLworCisvKgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogQ29weXJpZ2h0IChDKSAxOTkzIGJ5IFN1biBNaWNyb3N5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBEZXZlbG9wZWQgYXQgU3VuUHJvLCBhIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gYnVzaW5lc3MuCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCisgKiBzb2Z0d2FyZSBpcyBmcmVlbHkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGlzIG5vdGljZQorICogaXMgcHJlc2VydmVkLgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJTRCQiKTsKKworI2luY2x1ZGUgIm1hdGguaCIKKyNpbmNsdWRlICJtYXRoX3ByaXZhdGUuaCIKKworZmxvYXQKK19faWVlZTc1NF9oeXBvdGYoZmxvYXQgeCwgZmxvYXQgeSkKK3sKKwlmbG9hdCBhLGIsdDEsdDIseTEseTIsdzsKKwlpbnQzMl90IGosayxoYSxoYjsKKworCUdFVF9GTE9BVF9XT1JEKGhhLHgpOworCWhhICY9IDB4N2ZmZmZmZmY7CisJR0VUX0ZMT0FUX1dPUkQoaGIseSk7CisJaGIgJj0gMHg3ZmZmZmZmZjsKKwlpZihoYiA+IGhhKSB7YT15O2I9eDtqPWhhOyBoYT1oYjtoYj1qO30gZWxzZSB7YT14O2I9eTt9CisJYSA9IGZhYnNmKGEpOworCWIgPSBmYWJzZihiKTsKKwlpZigoaGEtaGIpPjB4ZjAwMDAwMCkge3JldHVybiBhK2I7fSAvKiB4L3kgPiAyKiozMCAqLworCWs9MDsKKwlpZihoYSA+IDB4NTg4MDAwMDApIHsJLyogYT4yKio1MCAqLworCSAgIGlmKGhhID49IDB4N2Y4MDAwMDApIHsJLyogSW5mIG9yIE5hTiAqLworCSAgICAgICAvKiBVc2Ugb3JpZ2luYWwgYXJnIG9yZGVyIGlmZiByZXN1bHQgaXMgTmFOOyBxdWlldGVuIHNOYU5zLiAqLworCSAgICAgICB3ID0gZmFic2YoeCswLjBGKS1mYWJzZih5KzAuMEYpOworCSAgICAgICBpZihoYSA9PSAweDdmODAwMDAwKSB3ID0gYTsKKwkgICAgICAgaWYoaGIgPT0gMHg3ZjgwMDAwMCkgdyA9IGI7CisJICAgICAgIHJldHVybiB3OworCSAgIH0KKwkgICAvKiBzY2FsZSBhIGFuZCBiIGJ5IDIqKi02OCAqLworCSAgIGhhIC09IDB4MjIwMDAwMDA7IGhiIC09IDB4MjIwMDAwMDA7CWsgKz0gNjg7CisJICAgU0VUX0ZMT0FUX1dPUkQoYSxoYSk7CisJICAgU0VUX0ZMT0FUX1dPUkQoYixoYik7CisJfQorCWlmKGhiIDwgMHgyNjgwMDAwMCkgewkvKiBiIDwgMioqLTUwICovCisJICAgIGlmKGhiIDw9IDB4MDA3ZmZmZmYpIHsJLyogc3Vibm9ybWFsIGIgb3IgMCAqLworCSAgICAgICAgaWYoaGI9PTApIHJldHVybiBhOworCQlTRVRfRkxPQVRfV09SRCh0MSwweDdlODAwMDAwKTsJLyogdDE9Ml4xMjYgKi8KKwkJYiAqPSB0MTsKKwkJYSAqPSB0MTsKKwkJayAtPSAxMjY7CisJICAgIH0gZWxzZSB7CQkvKiBzY2FsZSBhIGFuZCBiIGJ5IDJeNjggKi8KKwkgICAgICAgIGhhICs9IDB4MjIwMDAwMDA7IAkvKiBhICo9IDJeNjggKi8KKwkJaGIgKz0gMHgyMjAwMDAwMDsJLyogYiAqPSAyXjY4ICovCisJCWsgLT0gNjg7CisJCVNFVF9GTE9BVF9XT1JEKGEsaGEpOworCQlTRVRfRkxPQVRfV09SRChiLGhiKTsKKwkgICAgfQorCX0KKyAgICAvKiBtZWRpdW0gc2l6ZSBhIGFuZCBiICovCisJdyA9IGEtYjsKKwlpZiAodz5iKSB7CisJICAgIFNFVF9GTE9BVF9XT1JEKHQxLGhhJjB4ZmZmZmYwMDApOworCSAgICB0MiA9IGEtdDE7CisJICAgIHcgID0gX19pZWVlNzU0X3NxcnRmKHQxKnQxLShiKigtYiktdDIqKGErdDEpKSk7CisJfSBlbHNlIHsKKwkgICAgYSAgPSBhK2E7CisJICAgIFNFVF9GTE9BVF9XT1JEKHkxLGhiJjB4ZmZmZmYwMDApOworCSAgICB5MiA9IGIgLSB5MTsKKwkgICAgU0VUX0ZMT0FUX1dPUkQodDEsKGhhKzB4MDA4MDAwMDApJjB4ZmZmZmYwMDApOworCSAgICB0MiA9IGEgLSB0MTsKKwkgICAgdyAgPSBfX2llZWU3NTRfc3FydGYodDEqeTEtKHcqKC13KS0odDEqeTIrdDIqYikpKTsKKwl9CisJaWYoayE9MCkgeworCSAgICBTRVRfRkxPQVRfV09SRCh0MSwweDNmODAwMDAwKyhrPDwyMykpOworCSAgICByZXR1cm4gdDEqdzsKKwl9IGVsc2UgcmV0dXJuIHc7Cit9CmRpZmYgLS1naXQgYS9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL2VfaHlwb3RsLmMgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL2VfaHlwb3RsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2I1YWI4OQotLS0gL2Rldi9udWxsCisrKyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvZV9oeXBvdGwuYwpAQCAtMCwwICsxLDEyNCBAQAorLyogRnJvbTogQCgjKWVfaHlwb3QuYyAxLjMgOTUvMDEvMTggKi8KKy8qCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBDb3B5cmlnaHQgKEMpIDE5OTMgYnkgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIERldmVsb3BlZCBhdCBTdW5Tb2Z0LCBhIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gYnVzaW5lc3MuCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCisgKiBzb2Z0d2FyZSBpcyBmcmVlbHkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGlzIG5vdGljZSAKKyAqIGlzIHByZXNlcnZlZC4KKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CitfX0ZCU0RJRCgiJEZyZWVCU0QkIik7CisKKy8qIGxvbmcgZG91YmxlIHZlcnNpb24gb2YgaHlwb3QoKS4gIFNlZSBlX2h5cG90LmMgZm9yIG1vc3QgY29tbWVudHMuICovCisKKyNpbmNsdWRlIDxmbG9hdC5oPgorCisjaW5jbHVkZSAiZnBtYXRoLmgiCisjaW5jbHVkZSAibWF0aC5oIgorI2luY2x1ZGUgIm1hdGhfcHJpdmF0ZS5oIgorCisjZGVmaW5lCUdFVF9MREJMX01BTihoLCBsLCB2KSBkbyB7CVwKKwl1bmlvbiBJRUVFbDJiaXRzIHV2OwkJXAorCQkJCQlcCisJdXYuZSA9IHY7CQkJXAorCWggPSB1di5iaXRzLm1hbmg7CQlcCisJbCA9IHV2LmJpdHMubWFubDsJCVwKK30gd2hpbGUgKDApCisKKyN1bmRlZiBHRVRfSElHSF9XT1JECisjZGVmaW5lCUdFVF9ISUdIX1dPUkQoaSwgdikJR0VUX0xEQkxfRVhQU0lHTihpLCB2KQorI3VuZGVmIFNFVF9ISUdIX1dPUkQKKyNkZWZpbmUJU0VUX0hJR0hfV09SRCh2LCBpKQlTRVRfTERCTF9FWFBTSUdOKHYsIGkpCisKKyNkZWZpbmUJREVTVyhleHApCShleHApCQkvKiBkZWx0YSBleHBzaWduIHdvcmQgKi8KKyNkZWZpbmUJRVNXKGV4cCkJKE1BWF9FWFAgLSAxICsgKGV4cCkpCS8qIGV4cHNpZ24gd29yZCAqLworI2RlZmluZQlNQU5UX0RJRwlMREJMX01BTlRfRElHCisjZGVmaW5lCU1BWF9FWFAJCUxEQkxfTUFYX0VYUAorCisjaWYgTERCTF9NQU5MX1NJWkUgPiAzMgordHlwZWRlZgl1aW50NjRfdCBtYW5fdDsKKyNlbHNlCit0eXBlZGVmCXVpbnQzMl90IG1hbl90OworI2VuZGlmCisKK2xvbmcgZG91YmxlCitoeXBvdGwobG9uZyBkb3VibGUgeCwgbG9uZyBkb3VibGUgeSkKK3sKKwlsb25nIGRvdWJsZSBhPXgsYj15LHQxLHQyLHkxLHkyLHc7CisJaW50MzJfdCBqLGssaGEsaGI7CisKKwlHRVRfSElHSF9XT1JEKGhhLHgpOworCWhhICY9IDB4N2ZmZjsKKwlHRVRfSElHSF9XT1JEKGhiLHkpOworCWhiICY9IDB4N2ZmZjsKKwlpZihoYiA+IGhhKSB7YT15O2I9eDtqPWhhOyBoYT1oYjtoYj1qO30gZWxzZSB7YT14O2I9eTt9CisJYSA9IGZhYnNsKGEpOworCWIgPSBmYWJzbChiKTsKKwlpZigoaGEtaGIpPkRFU1coTUFOVF9ESUcrNykpIHtyZXR1cm4gYStiO30gLyogeC95ID4gMioqKE1BTlRfRElHKzcpICovCisJaz0wOworCWlmKGhhID4gRVNXKE1BWF9FWFAvMi0xMikpIHsJLyogYT4yKiooTUFYX0VYUC8yLTEyKSAqLworCSAgIGlmKGhhID49IEVTVyhNQVhfRVhQKSkgewkvKiBJbmYgb3IgTmFOICovCisJICAgICAgIG1hbl90IG1hbmgsIG1hbmw7CisJICAgICAgIC8qIFVzZSBvcmlnaW5hbCBhcmcgb3JkZXIgaWZmIHJlc3VsdCBpcyBOYU47IHF1aWV0ZW4gc05hTnMuICovCisJICAgICAgIHcgPSBmYWJzbCh4KzAuMCktZmFic2woeSswLjApOworCSAgICAgICBHRVRfTERCTF9NQU4obWFuaCxtYW5sLGEpOworCSAgICAgICBpZiAobWFuaCA9PSBMREJMX05CSVQgJiYgbWFubCA9PSAwKSB3ID0gYTsKKwkgICAgICAgR0VUX0xEQkxfTUFOKG1hbmgsbWFubCxiKTsKKwkgICAgICAgaWYgKGhiID49IEVTVyhNQVhfRVhQKSAmJiBtYW5oID09IExEQkxfTkJJVCAmJiBtYW5sID09IDApIHcgPSBiOworCSAgICAgICByZXR1cm4gdzsKKwkgICB9CisJICAgLyogc2NhbGUgYSBhbmQgYiBieSAyKiotKE1BWF9FWFAvMis4OCkgKi8KKwkgICBoYSAtPSBERVNXKE1BWF9FWFAvMis4OCk7IGhiIC09IERFU1coTUFYX0VYUC8yKzg4KTsKKwkgICBrICs9IE1BWF9FWFAvMis4ODsKKwkgICBTRVRfSElHSF9XT1JEKGEsaGEpOworCSAgIFNFVF9ISUdIX1dPUkQoYixoYik7CisJfQorCWlmKGhiIDwgRVNXKC0oTUFYX0VYUC8yLTEyKSkpIHsJLyogYiA8IDIqKi0oTUFYX0VYUC8yLTEyKSAqLworCSAgICBpZihoYiA8PSAwKSB7CQkvKiBzdWJub3JtYWwgYiBvciAwICovCisJICAgICAgICBtYW5fdCBtYW5oLCBtYW5sOworCQlHRVRfTERCTF9NQU4obWFuaCxtYW5sLGIpOworCQlpZigobWFuaHxtYW5sKT09MCkgcmV0dXJuIGE7CisJCXQxPTA7CisJCVNFVF9ISUdIX1dPUkQodDEsRVNXKE1BWF9FWFAtMikpOwkvKiB0MT0yXihNQVhfRVhQLTIpICovCisJCWIgKj0gdDE7CisJCWEgKj0gdDE7CisJCWsgLT0gTUFYX0VYUC0yOworCSAgICB9IGVsc2UgewkJLyogc2NhbGUgYSBhbmQgYiBieSAyXihNQVhfRVhQLzIrODgpICovCisJCWhhICs9IERFU1coTUFYX0VYUC8yKzg4KTsKKwkJaGIgKz0gREVTVyhNQVhfRVhQLzIrODgpOworCQlrIC09IE1BWF9FWFAvMis4ODsKKwkJU0VUX0hJR0hfV09SRChhLGhhKTsKKwkJU0VUX0hJR0hfV09SRChiLGhiKTsKKwkgICAgfQorCX0KKyAgICAvKiBtZWRpdW0gc2l6ZSBhIGFuZCBiICovCisJdyA9IGEtYjsKKwlpZiAodz5iKSB7CisJICAgIHQxID0gYTsKKwkgICAgdW5pb24gSUVFRWwyYml0cyB1djsKKwkgICAgdXYuZSA9IHQxOyB1di5iaXRzLm1hbmwgPSAwOyB0MSA9IHV2LmU7CisJICAgIHQyID0gYS10MTsKKwkgICAgdyAgPSBzcXJ0bCh0MSp0MS0oYiooLWIpLXQyKihhK3QxKSkpOworCX0gZWxzZSB7CisJICAgIGEgID0gYSthOworCSAgICB5MSA9IGI7CisJICAgIHVuaW9uIElFRUVsMmJpdHMgdXY7CisJICAgIHV2LmUgPSB5MTsgdXYuYml0cy5tYW5sID0gMDsgeTEgPSB1di5lOworCSAgICB5MiA9IGIgLSB5MTsKKwkgICAgdDEgPSBhOworCSAgICB1di5lID0gdDE7IHV2LmJpdHMubWFubCA9IDA7IHQxID0gdXYuZTsKKwkgICAgdDIgPSBhIC0gdDE7CisJICAgIHcgID0gc3FydGwodDEqeTEtKHcqKC13KS0odDEqeTIrdDIqYikpKTsKKwl9CisJaWYoayE9MCkgeworCSAgICB1X2ludDMyX3QgaGlnaDsKKwkgICAgdDEgPSAxLjA7CisJICAgIEdFVF9ISUdIX1dPUkQoaGlnaCx0MSk7CisJICAgIFNFVF9ISUdIX1dPUkQodDEsaGlnaCtERVNXKGspKTsKKwkgICAgcmV0dXJuIHQxKnc7CisJfSBlbHNlIHJldHVybiB3OworfQpkaWZmIC0tZ2l0IGEvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9lX2owLmMgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL2VfajAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MzIwZjI1Ci0tLSAvZGV2L251bGwKKysrIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9lX2owLmMKQEAgLTAsMCArMSwzODEgQEAKKworLyogQCgjKWVfajAuYyAxLjMgOTUvMDEvMTggKi8KKy8qCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBDb3B5cmlnaHQgKEMpIDE5OTMgYnkgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIERldmVsb3BlZCBhdCBTdW5Tb2Z0LCBhIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gYnVzaW5lc3MuCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCisgKiBzb2Z0d2FyZSBpcyBmcmVlbHkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGlzIG5vdGljZSAKKyAqIGlzIHByZXNlcnZlZC4KKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CitfX0ZCU0RJRCgiJEZyZWVCU0QkIik7CisKKy8qIF9faWVlZTc1NF9qMCh4KSwgX19pZWVlNzU0X3kwKHgpCisgKiBCZXNzZWwgZnVuY3Rpb24gb2YgdGhlIGZpcnN0IGFuZCBzZWNvbmQga2luZHMgb2Ygb3JkZXIgemVyby4KKyAqIE1ldGhvZCAtLSBqMCh4KToKKyAqCTEuIEZvciB0aW55IHgsIHdlIHVzZSBqMCh4KSA9IDEgLSB4XjIvNCArIHheNC82NCAtIC4uLgorICoJMi4gUmVkdWNlIHggdG8gfHh8IHNpbmNlIGowKHgpPWowKC14KSwgIGFuZAorICoJICAgZm9yIHggaW4gKDAsMikKKyAqCQlqMCh4KSA9IDEtei80KyB6XjIqUjAvUzAsICB3aGVyZSB6ID0geCp4OworICoJICAgKHByZWNpc2lvbjogIHxqMC0xK3ovNC16XjJSMC9TMCB8PDIqKi02My42NyApCisgKgkgICBmb3IgeCBpbiAoMixpbmYpCisgKiAJCWowKHgpID0gc3FydCgyLyhwaSp4KSkqKHAwKHgpKmNvcyh4MCktcTAoeCkqc2luKHgwKSkKKyAqIAkgICB3aGVyZSB4MCA9IHgtcGkvNC4gSXQgaXMgYmV0dGVyIHRvIGNvbXB1dGUgc2luKHgwKSxjb3MoeDApCisgKgkgICBhcyBmb2xsb3c6CisgKgkJY29zKHgwKSA9IGNvcyh4KWNvcyhwaS80KStzaW4oeClzaW4ocGkvNCkKKyAqCQkJPSAxL3NxcnQoMikgKiAoY29zKHgpICsgc2luKHgpKQorICoJCXNpbih4MCkgPSBzaW4oeCljb3MocGkvNCktY29zKHgpc2luKHBpLzQpCisgKgkJCT0gMS9zcXJ0KDIpICogKHNpbih4KSAtIGNvcyh4KSkKKyAqIAkgICAoVG8gYXZvaWQgY2FuY2VsbGF0aW9uLCB1c2UKKyAqCQlzaW4oeCkgKy0gY29zKHgpID0gLWNvcygyeCkvKHNpbih4KSAtKyBjb3MoeCkpCisgKiAJICAgIHRvIGNvbXB1dGUgdGhlIHdvcnNlIG9uZS4pCisgKgkgICAKKyAqCTMgU3BlY2lhbCBjYXNlcworICoJCWowKG5hbik9IG5hbgorICoJCWowKDApID0gMQorICoJCWowKGluZikgPSAwCisgKgkJCisgKiBNZXRob2QgLS0geTAoeCk6CisgKgkxLiBGb3IgeDwyLgorICoJICAgU2luY2UgCisgKgkJeTAoeCkgPSAyL3BpKihqMCh4KSoobG4oeC8yKStFdWxlcikgKyB4XjIvNCAtIC4uLikKKyAqCSAgIHRoZXJlZm9yZSB5MCh4KS0yL3BpKmowKHgpKmxuKHgpIGlzIGFuIGV2ZW4gZnVuY3Rpb24uCisgKgkgICBXZSB1c2UgdGhlIGZvbGxvd2luZyBmdW5jdGlvbiB0byBhcHByb3hpbWF0ZSB5MCwKKyAqCQl5MCh4KSA9IFUoeikvVih6KSArICgyL3BpKSooajAoeCkqbG4oeCkpLCB6PSB4XjIKKyAqCSAgIHdoZXJlIAorICoJCVUoeikgPSB1MDAgKyB1MDEqeiArIC4uLiArIHUwNip6XjYKKyAqCQlWKHopID0gMSAgKyB2MDEqeiArIC4uLiArIHYwNCp6XjQKKyAqCSAgIHdpdGggYWJzb2x1dGUgYXBwcm94aW1hdGlvbiBlcnJvciBib3VuZGVkIGJ5IDIqKi03Mi4KKyAqCSAgIE5vdGU6IEZvciB0aW55IHgsIFUvViA9IHUwIGFuZCBqMCh4KX4xLCBoZW5jZQorICoJCXkwKHRpbnkpID0gdTAgKyAoMi9waSkqbG4odGlueSksIChjaG9vc2UgdGlueTwyKiotMjcpCisgKgkyLiBGb3IgeD49Mi4KKyAqIAkJeTAoeCkgPSBzcXJ0KDIvKHBpKngpKSoocDAoeCkqY29zKHgwKStxMCh4KSpzaW4oeDApKQorICogCSAgIHdoZXJlIHgwID0geC1waS80LiBJdCBpcyBiZXR0ZXIgdG8gY29tcHV0ZSBzaW4oeDApLGNvcyh4MCkKKyAqCSAgIGJ5IHRoZSBtZXRob2QgbWVudGlvbmVkIGFib3ZlLgorICoJMy4gU3BlY2lhbCBjYXNlczogeTAoMCk9LWluZiwgeTAoeDwwKT1OYU4sIHkwKGluZik9MC4KKyAqLworCisjaW5jbHVkZSAibWF0aC5oIgorI2luY2x1ZGUgIm1hdGhfcHJpdmF0ZS5oIgorCitzdGF0aWMgZG91YmxlIHB6ZXJvKGRvdWJsZSksIHF6ZXJvKGRvdWJsZSk7CisKK3N0YXRpYyBjb25zdCBkb3VibGUKK2h1Z2UgCT0gMWUzMDAsCitvbmUJPSAxLjAsCitpbnZzcXJ0cGk9ICA1LjY0MTg5NTgzNTQ3NzU2Mjc5MjgwZS0wMSwgLyogMHgzRkUyMERENywgMHg1MDQyOUI2RCAqLwordHBpICAgICAgPSAgNi4zNjYxOTc3MjM2NzU4MTM4MjQzM2UtMDEsIC8qIDB4M0ZFNDVGMzAsIDB4NkRDOUM4ODMgKi8KKyAJCS8qIFIwL1MwIG9uIFswLCAyLjAwXSAqLworUjAyICA9ICAxLjU2MjQ5OTk5OTk5OTk5OTQ3OTU4ZS0wMiwgLyogMHgzRjhGRkZGRiwgMHhGRkZGRkZGRCAqLworUjAzICA9IC0xLjg5OTc5Mjk0MjM4ODU0NzIxNzUxZS0wNCwgLyogMHhCRjI4RTZBNSwgMHhCNjFBQzZFOSAqLworUjA0ICA9ICAxLjgyOTU0MDQ5NTMyNzAwNjY1NjcwZS0wNiwgLyogMHgzRUJFQjFEMSwgMHgwQzUwMzkxOSAqLworUjA1ICA9IC00LjYxODMyNjg4NTMyMTAzMTg5MTk5ZS0wOSwgLyogMHhCRTMzRDVFNywgMHg3M0Q2M0ZDRSAqLworUzAxICA9ICAxLjU2MTkxMDI5NDY0ODkwMDEwNDkyZS0wMiwgLyogMHgzRjhGRkNFOCwgMHg4MkM4QzJBNCAqLworUzAyICA9ICAxLjE2OTI2Nzg0NjYzMzM3NDUwMjYwZS0wNCwgLyogMHgzRjFFQTZEMiwgMHhERDU3REJGNCAqLworUzAzICA9ICA1LjEzNTQ2NTUwMjA3MzE4MTExNDQ2ZS0wNywgLyogMHgzRUExM0I1NCwgMHhDRTg0RDVBOSAqLworUzA0ICA9ICAxLjE2NjE0MDAzMzMzNzkwMDAwMjA1ZS0wOTsgLyogMHgzRTE0MDhCQywgMHhGNDc0NUQ4RiAqLworCitzdGF0aWMgY29uc3QgZG91YmxlIHplcm8gPSAwLjA7CisKK2RvdWJsZQorX19pZWVlNzU0X2owKGRvdWJsZSB4KQoreworCWRvdWJsZSB6LCBzLGMsc3MsY2Mscix1LHY7CisJaW50MzJfdCBoeCxpeDsKKworCUdFVF9ISUdIX1dPUkQoaHgseCk7CisJaXggPSBoeCYweDdmZmZmZmZmOworCWlmKGl4Pj0weDdmZjAwMDAwKSByZXR1cm4gb25lLyh4KngpOworCXggPSBmYWJzKHgpOworCWlmKGl4ID49IDB4NDAwMDAwMDApIHsJLyogfHh8ID49IDIuMCAqLworCQlzID0gc2luKHgpOworCQljID0gY29zKHgpOworCQlzcyA9IHMtYzsKKwkJY2MgPSBzK2M7CisJCWlmKGl4PDB4N2ZlMDAwMDApIHsgIC8qIG1ha2Ugc3VyZSB4K3ggbm90IG92ZXJmbG93ICovCisJCSAgICB6ID0gLWNvcyh4K3gpOworCQkgICAgaWYgKChzKmMpPHplcm8pIGNjID0gei9zczsKKwkJICAgIGVsc2UgCSAgICBzcyA9IHovY2M7CisJCX0KKwkvKgorCSAqIGowKHgpID0gMS9zcXJ0KHBpKSAqIChQKDAseCkqY2MgLSBRKDAseCkqc3MpIC8gc3FydCh4KQorCSAqIHkwKHgpID0gMS9zcXJ0KHBpKSAqIChQKDAseCkqc3MgKyBRKDAseCkqY2MpIC8gc3FydCh4KQorCSAqLworCQlpZihpeD4weDQ4MDAwMDAwKSB6ID0gKGludnNxcnRwaSpjYykvc3FydCh4KTsKKwkJZWxzZSB7CisJCSAgICB1ID0gcHplcm8oeCk7IHYgPSBxemVybyh4KTsKKwkJICAgIHogPSBpbnZzcXJ0cGkqKHUqY2Mtdipzcykvc3FydCh4KTsKKwkJfQorCQlyZXR1cm4gejsKKwl9CisJaWYoaXg8MHgzZjIwMDAwMCkgewkvKiB8eHwgPCAyKiotMTMgKi8KKwkgICAgaWYoaHVnZSt4Pm9uZSkgewkvKiByYWlzZSBpbmV4YWN0IGlmIHggIT0gMCAqLworCSAgICAgICAgaWYoaXg8MHgzZTQwMDAwMCkgcmV0dXJuIG9uZTsJLyogfHh8PDIqKi0yNyAqLworCSAgICAgICAgZWxzZSAJICAgICAgcmV0dXJuIG9uZSAtIDAuMjUqeCp4OworCSAgICB9CisJfQorCXogPSB4Kng7CisJciA9ICB6KihSMDIreiooUjAzK3oqKFIwNCt6KlIwNSkpKTsKKwlzID0gIG9uZSt6KihTMDEreiooUzAyK3oqKFMwMyt6KlMwNCkpKTsKKwlpZihpeCA8IDB4M0ZGMDAwMDApIHsJLyogfHh8IDwgMS4wMCAqLworCSAgICByZXR1cm4gb25lICsgeiooLTAuMjUrKHIvcykpOworCX0gZWxzZSB7CisJICAgIHUgPSAwLjUqeDsKKwkgICAgcmV0dXJuKChvbmUrdSkqKG9uZS11KSt6KihyL3MpKTsKKwl9Cit9CisKK3N0YXRpYyBjb25zdCBkb3VibGUKK3UwMCAgPSAtNy4zODA0Mjk1MTA4Njg3MjMxNzUyM2UtMDIsIC8qIDB4QkZCMkU0RDYsIDB4OTlDQkQwMUYgKi8KK3UwMSAgPSAgMS43NjY2NjQ1MjUwOTE4MTExNTUzOGUtMDEsIC8qIDB4M0ZDNjlEMDEsIDB4OURFOUUzRkMgKi8KK3UwMiAgPSAtMS4zODE4NTY3MTk0NTU5Njg5ODg5NmUtMDIsIC8qIDB4QkY4QzRDRTgsIDB4QjE2Q0ZBOTcgKi8KK3UwMyAgPSAgMy40NzQ1MzQzMjA5MzY4MzY1MDIzOGUtMDQsIC8qIDB4M0YzNkM1NEQsIDB4MjBCMjlCNkIgKi8KK3UwNCAgPSAtMy44MTQwNzA1MzcyNDM2NDE2MTEyNWUtMDYsIC8qIDB4QkVDRkZFQTcsIDB4NzNEMjVDQUQgKi8KK3UwNSAgPSAgMS45NTU5MDEzNzAzNTAyMjkyMDIwNmUtMDgsIC8qIDB4M0U1NTAwNTcsIDB4M0I0RUFCRDQgKi8KK3UwNiAgPSAtMy45ODIwNTE5NDEzMjEwMzM5ODQ1M2UtMTEsIC8qIDB4QkRDNUU0M0QsIDB4NjkzRkIzQzggKi8KK3YwMSAgPSAgMS4yNzMwNDgzNDgzNDEyMzY5OTMyOGUtMDIsIC8qIDB4M0Y4QTEyNzAsIDB4OTFDOUM3MUEgKi8KK3YwMiAgPSAgNy42MDA2ODYyNzM1MDM1MzI1MzcwMmUtMDUsIC8qIDB4M0YxM0VDQkIsIDB4RjU3OEM2QzEgKi8KK3YwMyAgPSAgMi41OTE1MDg1MTg0MDQ1NzgwNTQ2N2UtMDcsIC8qIDB4M0U5MTY0MkQsIDB4N0ZGMjAyRkQgKi8KK3YwNCAgPSAgNC40MTExMDMxMTMzMjY3NTQ2NzQwM2UtMTA7IC8qIDB4M0RGRTUwMTgsIDB4M0JENkQ5RUYgKi8KKworZG91YmxlCitfX2llZWU3NTRfeTAoZG91YmxlIHgpCit7CisJZG91YmxlIHosIHMsYyxzcyxjYyx1LHY7CisJaW50MzJfdCBoeCxpeCxseDsKKworCUVYVFJBQ1RfV09SRFMoaHgsbHgseCk7CisgICAgICAgIGl4ID0gMHg3ZmZmZmZmZiZoeDsKKyAgICAvKiBZMChOYU4pIGlzIE5hTiwgeTAoLWluZikgaXMgTmFuLCB5MChpbmYpIGlzIDAgICovCisJaWYoaXg+PTB4N2ZmMDAwMDApIHJldHVybiAgb25lLyh4K3gqeCk7IAorICAgICAgICBpZigoaXh8bHgpPT0wKSByZXR1cm4gLW9uZS96ZXJvOworICAgICAgICBpZihoeDwwKSByZXR1cm4gemVyby96ZXJvOworICAgICAgICBpZihpeCA+PSAweDQwMDAwMDAwKSB7ICAvKiB8eHwgPj0gMi4wICovCisgICAgICAgIC8qIHkwKHgpID0gc3FydCgyLyhwaSp4KSkqKHAwKHgpKnNpbih4MCkrcTAoeCkqY29zKHgwKSkKKyAgICAgICAgICogd2hlcmUgeDAgPSB4LXBpLzQKKyAgICAgICAgICogICAgICBCZXR0ZXIgZm9ybXVsYToKKyAgICAgICAgICogICAgICAgICAgICAgIGNvcyh4MCkgPSBjb3MoeCljb3MocGkvNCkrc2luKHgpc2luKHBpLzQpCisgICAgICAgICAqICAgICAgICAgICAgICAgICAgICAgID0gIDEvc3FydCgyKSAqIChzaW4oeCkgKyBjb3MoeCkpCisgICAgICAgICAqICAgICAgICAgICAgICBzaW4oeDApID0gc2luKHgpY29zKDNwaS80KS1jb3MoeClzaW4oM3BpLzQpCisgICAgICAgICAqICAgICAgICAgICAgICAgICAgICAgID0gIDEvc3FydCgyKSAqIChzaW4oeCkgLSBjb3MoeCkpCisgICAgICAgICAqIFRvIGF2b2lkIGNhbmNlbGxhdGlvbiwgdXNlCisgICAgICAgICAqICAgICAgICAgICAgICBzaW4oeCkgKy0gY29zKHgpID0gLWNvcygyeCkvKHNpbih4KSAtKyBjb3MoeCkpCisgICAgICAgICAqIHRvIGNvbXB1dGUgdGhlIHdvcnNlIG9uZS4KKyAgICAgICAgICovCisgICAgICAgICAgICAgICAgcyA9IHNpbih4KTsKKyAgICAgICAgICAgICAgICBjID0gY29zKHgpOworICAgICAgICAgICAgICAgIHNzID0gcy1jOworICAgICAgICAgICAgICAgIGNjID0gcytjOworCS8qCisJICogajAoeCkgPSAxL3NxcnQocGkpICogKFAoMCx4KSpjYyAtIFEoMCx4KSpzcykgLyBzcXJ0KHgpCisJICogeTAoeCkgPSAxL3NxcnQocGkpICogKFAoMCx4KSpzcyArIFEoMCx4KSpjYykgLyBzcXJ0KHgpCisJICovCisgICAgICAgICAgICAgICAgaWYoaXg8MHg3ZmUwMDAwMCkgeyAgLyogbWFrZSBzdXJlIHgreCBub3Qgb3ZlcmZsb3cgKi8KKyAgICAgICAgICAgICAgICAgICAgeiA9IC1jb3MoeCt4KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKChzKmMpPHplcm8pIGNjID0gei9zczsKKyAgICAgICAgICAgICAgICAgICAgZWxzZSAgICAgICAgICAgIHNzID0gei9jYzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYoaXg+MHg0ODAwMDAwMCkgeiA9IChpbnZzcXJ0cGkqc3MpL3NxcnQoeCk7CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHUgPSBwemVybyh4KTsgdiA9IHF6ZXJvKHgpOworICAgICAgICAgICAgICAgICAgICB6ID0gaW52c3FydHBpKih1KnNzK3YqY2MpL3NxcnQoeCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiB6OworCX0KKwlpZihpeDw9MHgzZTQwMDAwMCkgewkvKiB4IDwgMioqLTI3ICovCisJICAgIHJldHVybih1MDAgKyB0cGkqX19pZWVlNzU0X2xvZyh4KSk7CisJfQorCXogPSB4Kng7CisJdSA9IHUwMCt6Kih1MDEreioodTAyK3oqKHUwMyt6Kih1MDQreioodTA1K3oqdTA2KSkpKSk7CisJdiA9IG9uZSt6Kih2MDEreioodjAyK3oqKHYwMyt6KnYwNCkpKTsKKwlyZXR1cm4odS92ICsgdHBpKihfX2llZWU3NTRfajAoeCkqX19pZWVlNzU0X2xvZyh4KSkpOworfQorCisvKiBUaGUgYXN5bXB0b3RpYyBleHBhbnNpb25zIG9mIHB6ZXJvIGlzCisgKgkxIC0gOS8xMjggc14yICsgMTEwMjUvOTgzMDQgc140IC0gLi4uLAl3aGVyZSBzID0gMS94LgorICogRm9yIHggPj0gMiwgV2UgYXBwcm94aW1hdGUgcHplcm8gYnkKKyAqIAlwemVybyh4KSA9IDEgKyAoUi9TKQorICogd2hlcmUgIFIgPSBwUjAgKyBwUjEqc14yICsgcFIyKnNeNCArIC4uLiArIHBSNSpzXjEwCisgKiAJICBTID0gMSArIHBTMCpzXjIgKyAuLi4gKyBwUzQqc14xMAorICogYW5kCisgKgl8IHB6ZXJvKHgpLTEtUi9TIHwgPD0gMiAgKiogKCAtNjAuMjYpCisgKi8KK3N0YXRpYyBjb25zdCBkb3VibGUgcFI4WzZdID0geyAvKiBmb3IgeCBpbiBbaW5mLCA4XT0xL1swLDAuMTI1XSAqLworICAwLjAwMDAwMDAwMDAwMDAwMDAwMDAwZSswMCwgLyogMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCAqLworIC03LjAzMTI0OTk5OTk5OTAwMzU3NDg0ZS0wMiwgLyogMHhCRkIxRkZGRiwgMHhGRkZGRkQzMiAqLworIC04LjA4MTY3MDQxMjc1MzQ5Nzk1NjI2ZSswMCwgLyogMHhDMDIwMjlEMCwgMHhCNDRGQTc3OSAqLworIC0yLjU3MDYzMTA1Njc5NzA0ODQ3MjYyZSswMiwgLyogMHhDMDcwMTEwMiwgMHg3QjE5RTg2MyAqLworIC0yLjQ4NTIxNjQxMDA5NDI4ODIyMTQ0ZSswMywgLyogMHhDMEEzNkE2RSwgMHhDRDREQ0FGQyAqLworIC01LjI1MzA0MzgwNDkwNzI5NTQ1MjcyZSswMywgLyogMHhDMEI0ODUwQiwgMHgzNkNDNjQzRCAqLworfTsKK3N0YXRpYyBjb25zdCBkb3VibGUgcFM4WzVdID0geworICAxLjE2NTM0MzY0NjE5NjY4MTgxNzE3ZSswMiwgLyogMHg0MDVEMjIzMywgMHgwN0E5Njc1MSAqLworICAzLjgzMzc0NDc1MzY0MTIxODI2NzE1ZSswMywgLyogMHg0MEFERjM3RCwgMHg1MDU5NjkzOCAqLworICA0LjA1OTc4NTcyNjQ4NDcyNTQ1NTUyZSswNCwgLyogMHg0MEUzRDJCQiwgMHg2RUI2QjA1RiAqLworICAxLjE2NzUyOTcyNTY0Mzc1OTE1NjgxZSswNSwgLyogMHg0MEZDODEwRiwgMHg4RjlGQTlCRCAqLworICA0Ljc2Mjc3Mjg0MTQ2NzMwOTYyNjc1ZSswNCwgLyogMHg0MEU3NDE3NywgMHg0RjJDNDlEQyAqLworfTsKKworc3RhdGljIGNvbnN0IGRvdWJsZSBwUjVbNl0gPSB7IC8qIGZvciB4IGluIFs4LDQuNTQ1NF09MS9bMC4xMjUsMC4yMjAwMV0gKi8KKyAtMS4xNDEyNTQ2NDY5MTg5NDUwMjU4NGUtMTEsIC8qIDB4QkRBOTE4QjEsIDB4NDdFNDk1Q0MgKi8KKyAtNy4wMzEyNDk0MDg3MzU5OTI4MDA3OGUtMDIsIC8qIDB4QkZCMUZGRkYsIDB4RTY5QUZCQzYgKi8KKyAtNC4xNTk2MTA2NDQ3MDU4Nzc4MjQzOGUrMDAsIC8qIDB4QzAxMEEzNzAsIDB4RjkwQzZCQkYgKi8KKyAtNi43Njc0NzY1MjI2NTE2NzI2MTAyMWUrMDEsIC8qIDB4QzA1MEVCMkYsIDB4NUE3RDE3ODMgKi8KKyAtMy4zMTIzMTI5OTY0OTE3Mjk2Nzc0N2UrMDIsIC8qIDB4QzA3NEIzQjMsIDB4Njc0MkNDNjMgKi8KKyAtMy40NjQzMzM4ODM2NTYwNDkxMjQ1MWUrMDIsIC8qIDB4QzA3NUE2RUYsIDB4MjhBMzhCRDcgKi8KK307CitzdGF0aWMgY29uc3QgZG91YmxlIHBTNVs1XSA9IHsKKyAgNi4wNzUzOTM4MjY5MjMwMDMzNTk3NWUrMDEsIC8qIDB4NDA0RTYwODEsIDB4MEM5OEM1REUgKi8KKyAgMS4wNTEyNTIzMDU5NTcwNDU3OTE3M2UrMDMsIC8qIDB4NDA5MDZEMDIsIDB4NUM3RTI4NjQgKi8KKyAgNS45Nzg5NzA5NDMzMzg1NTc4NDQ5OGUrMDMsIC8qIDB4NDBCNzVBRjgsIDB4OEZCRTFENjAgKi8KKyAgOS42MjU0NDUxNDM1Nzc3NDQ2MDIyM2UrMDMsIC8qIDB4NDBDMkNDQjgsIDB4RkE3NkZBMzggKi8KKyAgMi40MDYwNTgxNTkyMjkzOTEwOTQ0MWUrMDMsIC8qIDB4NDBBMkNDMUQsIDB4QzcwQkU4NjQgKi8KK307CisKK3N0YXRpYyBjb25zdCBkb3VibGUgcFIzWzZdID0gey8qIGZvciB4IGluIFs0LjU0NywyLjg1NzFdPTEvWzAuMjE5OSwwLjM1MDAxXSAqLworIC0yLjU0NzA0NjAxNzcxOTUxOTE1NjIwZS0wOSwgLyogMHhCRTI1RTEwMywgMHg2RkUxQUE4NiAqLworIC03LjAzMTE5NjE2MzgxNDgxNjU0NjU0ZS0wMiwgLyogMHhCRkIxRkZGNiwgMHhGN0MwRTI0QiAqLworIC0yLjQwOTAzMjIxNTQ5NTI5NjExNDIzZSswMCwgLyogMHhDMDAzNDVCMiwgMHhBRUE0ODA3NCAqLworIC0yLjE5NjU5Nzc0NzM0ODgzMDg2NDY3ZSswMSwgLyogMHhDMDM1Rjc0QSwgMHg0Q0I5NEUxNCAqLworIC01LjgwNzkxNzA0NzAxNzM3NTcyMjM2ZSswMSwgLyogMHhDMDREMEEyMiwgMHg0MjBBMUE0NSAqLworIC0zLjE0NDc5NDcwNTk0ODg4NTAzODU0ZSswMSwgLyogMHhDMDNGNzJBQywgMHhBODkyRDgwRiAqLworfTsKK3N0YXRpYyBjb25zdCBkb3VibGUgcFMzWzVdID0geworICAzLjU4NTYwMzM4MDU1MjA5NzI2MzQ5ZSswMSwgLyogMHg0MDQxRUQ5MiwgMHg4NDA3N0REMyAqLworICAzLjYxNTEzOTgzMDUwMzAzODYzODIwZSswMiwgLyogMHg0MDc2OTgzOSwgMHg0NjRBN0MwRSAqLworICAxLjE5MzYwNzgzNzkyMTExNTMzMzMwZSswMywgLyogMHg0MDkyQTY2RSwgMHg2RDEwNjFENiAqLworICAxLjEyNzk5Njc5ODU2OTA3NDE0NDMyZSswMywgLyogMHg0MDkxOUZGQywgMHhCOEMzOUI3RSAqLworICAxLjczNTgwOTMwODEzMzM1NzU0NjkyZSswMiwgLyogMHg0MDY1QjI5NiwgMHhGQzM3OTA4MSAqLworfTsKKworc3RhdGljIGNvbnN0IGRvdWJsZSBwUjJbNl0gPSB7LyogZm9yIHggaW4gWzIuODU3MCwyXT0xL1swLjM0OTksMC41XSAqLworIC04Ljg3NTM0MzMzMDMyNTI2NDExMjU0ZS0wOCwgLyogMHhCRTc3RDMxNiwgMHhFOTI3MDI2RCAqLworIC03LjAzMDMwOTk1NDgzNjI0NzQzMjQ3ZS0wMiwgLyogMHhCRkIxRkY2MiwgMHg0OTVFMUU0MiAqLworIC0xLjQ1MDczODQ2NzgwOTUyOTg2MzU3ZSswMCwgLyogMHhCRkY3MzYzOSwgMHg4QTI0QTg0MyAqLworIC03LjYzNTY5NjEzODIzNTI3NzcwNzkxZSswMCwgLyogMHhDMDFFOEFGMywgMHhFREFGQTdGMyAqLworIC0xLjExOTMxNjY4ODYwMzU2NzQ3Nzg2ZSswMSwgLyogMHhDMDI2NjJFNiwgMHhDNTI0NjMwMyAqLworIC0zLjIzMzY0NTc5MzUxMzM1MzM1MDMzZSswMCwgLyogMHhDMDA5REU4MSwgMHhBRjhGRTcwRiAqLworfTsKK3N0YXRpYyBjb25zdCBkb3VibGUgcFMyWzVdID0geworICAyLjIyMjAyOTk3NTMyMDg4ODA4NDQxZSswMSwgLyogMHg0MDM2Mzg2NSwgMHg5MDhCNTk1OSAqLworICAxLjM2MjA2Nzk0MjE4MjE1MjA4MDQ4ZSswMiwgLyogMHg0MDYxMDY5RSwgMHgwRUU4ODc4RiAqLworICAyLjcwNDcwMjc4NjU4MDgzNDg2Nzg5ZSswMiwgLyogMHg0MDcwRTc4NiwgMHg0MkVBMDc5QiAqLworICAxLjUzODc1Mzk0MjA4MzIwMzI5ODgxZSswMiwgLyogMHg0MDYzM0MwMywgMHgzQUI2RkFGRiAqLworICAxLjQ2NTc2MTc2OTQ4MjU2MTkzODEwZSswMSwgLyogMHg0MDJENTBCMywgMHg0NDM5MTgwOSAqLworfTsKKworCXN0YXRpYyBkb3VibGUgcHplcm8oZG91YmxlIHgpCit7CisJY29uc3QgZG91YmxlICpwLCpxOworCWRvdWJsZSB6LHIsczsKKwlpbnQzMl90IGl4OworCUdFVF9ISUdIX1dPUkQoaXgseCk7CisJaXggJj0gMHg3ZmZmZmZmZjsKKwlpZihpeD49MHg0MDIwMDAwMCkgICAgIHtwID0gcFI4OyBxPSBwUzg7fQorCWVsc2UgaWYoaXg+PTB4NDAxMjJFOEIpe3AgPSBwUjU7IHE9IHBTNTt9CisJZWxzZSBpZihpeD49MHg0MDA2REI2RCl7cCA9IHBSMzsgcT0gcFMzO30KKwllbHNlIGlmKGl4Pj0weDQwMDAwMDAwKXtwID0gcFIyOyBxPSBwUzI7fQorCXogPSBvbmUvKHgqeCk7CisJciA9IHBbMF0reioocFsxXSt6KihwWzJdK3oqKHBbM10reioocFs0XSt6KnBbNV0pKSkpOworCXMgPSBvbmUreioocVswXSt6KihxWzFdK3oqKHFbMl0reioocVszXSt6KnFbNF0pKSkpOworCXJldHVybiBvbmUrIHIvczsKK30KKwkJCisKKy8qIEZvciB4ID49IDgsIHRoZSBhc3ltcHRvdGljIGV4cGFuc2lvbnMgb2YgcXplcm8gaXMKKyAqCS0xLzggcyArIDc1LzEwMjQgc14zIC0gLi4uLCB3aGVyZSBzID0gMS94LgorICogV2UgYXBwcm94aW1hdGUgcHplcm8gYnkKKyAqIAlxemVybyh4KSA9IHMqKC0xLjI1ICsgKFIvUykpCisgKiB3aGVyZSAgUiA9IHFSMCArIHFSMSpzXjIgKyBxUjIqc140ICsgLi4uICsgcVI1KnNeMTAKKyAqIAkgIFMgPSAxICsgcVMwKnNeMiArIC4uLiArIHFTNSpzXjEyCisgKiBhbmQKKyAqCXwgcXplcm8oeCkvcyArMS4yNS1SL1MgfCA8PSAyICAqKiAoIC02MS4yMikKKyAqLworc3RhdGljIGNvbnN0IGRvdWJsZSBxUjhbNl0gPSB7IC8qIGZvciB4IGluIFtpbmYsIDhdPTEvWzAsMC4xMjVdICovCisgIDAuMDAwMDAwMDAwMDAwMDAwMDAwMDBlKzAwLCAvKiAweDAwMDAwMDAwLCAweDAwMDAwMDAwICovCisgIDcuMzI0MjE4NzQ5OTk5MzUwNTE5NTNlLTAyLCAvKiAweDNGQjJCRkZGLCAweEZGRkZGRTJDICovCisgIDEuMTc2ODIwNjQ2ODIyNTI2OTM4OTllKzAxLCAvKiAweDQwMjc4OTUyLCAweDVCQjMzNEQ2ICovCisgIDUuNTc2NzMzODAyNTY0MDE4NTYwNTllKzAyLCAvKiAweDQwODE2RDYzLCAweDE1MzAxODI1ICovCisgIDguODU5MTk3MjA3NTY0Njg2MzIzMTdlKzAzLCAvKiAweDQwQzE0RDk5LCAweDNFMThGNDZEICovCisgIDMuNzAxNDYyNjc3NzY4ODc4MzQ3NzFlKzA0LCAvKiAweDQwRTIxMkQ0LCAweDBFOTAxNTY2ICovCit9Oworc3RhdGljIGNvbnN0IGRvdWJsZSBxUzhbNl0gPSB7CisgIDEuNjM3NzYwMjY4OTU2ODk4MjQ0MTRlKzAyLCAvKiAweDQwNjQ3OEQ1LCAweDM2NUIzOUJDICovCisgIDguMDk4MzQ0OTQ2NTY0NDk4MDU5MTZlKzAzLCAvKiAweDQwQkZBMjU4LCAweDRFNkIwNTYzICovCisgIDEuNDI1MzgyOTE0MTkxMjA0NzYzNDhlKzA1LCAvKiAweDQxMDE2NjUyLCAweDU0RDM4QzNGICovCisgIDguMDMzMDkyNTcxMTk1MTQzOTczNDVlKzA1LCAvKiAweDQxMjg4M0RBLCAweDgzQTUyQjQzICovCisgIDguNDA1MDE1Nzk4MTkwNjA1MTI4MThlKzA1LCAvKiAweDQxMjlBNjZCLCAweDI4REUwQjNEICovCisgLTMuNDM4OTkyOTM1Mzc4NjY2MTUyMjVlKzA1LCAvKiAweEMxMTRGRDZELCAweDJDOTUzMEM1ICovCit9OworCitzdGF0aWMgY29uc3QgZG91YmxlIHFSNVs2XSA9IHsgLyogZm9yIHggaW4gWzgsNC41NDU0XT0xL1swLjEyNSwwLjIyMDAxXSAqLworICAxLjg0MDg1OTYzNTk0NTE1NTMxMzgxZS0xMSwgLyogMHgzREI0M0Q4RiwgMHgyOUNDOENEOSAqLworICA3LjMyNDIxNzY2NjEyNjg0NzY1ODk2ZS0wMiwgLyogMHgzRkIyQkZGRiwgMHhEMTcyQjA0QyAqLworICA1LjgzNTYzNTA4OTYyMDU2OTUzNzc3ZSswMCwgLyogMHg0MDE3NTdCMCwgMHhCOTk1M0REMyAqLworICAxLjM1MTExNTc3Mjg2NDQ5ODI5NjcxZSswMiwgLyogMHg0MDYwRTM5MiwgMHgwQTg3ODhFOSAqLworICAxLjAyNzI0Mzc2NTk2MTY0MDk3NDY0ZSswMywgLyogMHg0MDkwMENGOSwgMHg5REM4QzQ4MSAqLworICAxLjk4OTk3Nzg1ODY0NjA1Mzg0NjMxZSswMywgLyogMHg0MDlGMTdFOSwgMHg1M0M2RTNBNiAqLworfTsKK3N0YXRpYyBjb25zdCBkb3VibGUgcVM1WzZdID0geworICA4LjI3NzY2MTAyMjM2NTM3NzYxODgzZSswMSwgLyogMHg0MDU0QjFCMywgMHhGQjVFMTU0MyAqLworICAyLjA3NzgxNDE2NDIxMzkyOTg3MTA0ZSswMywgLyogMHg0MEEwM0JBMCwgMHhEQTIxQzBDRSAqLworICAxLjg4NDcyODg3Nzg1NzE4MDg1MDcwZSswNCwgLyogMHg0MEQyNjdEMiwgMHg3QjU5MUU2RCAqLworICA1LjY3NTExMTIyODk0OTQ3MzI5NzY5ZSswNCwgLyogMHg0MEVCQjVFMywgMHg5N0UwMjM3MiAqLworICAzLjU5NzY3NTM4NDI1MTE0NDcxNDY1ZSswNCwgLyogMHg0MEUxOTExOCwgMHgxRjdBNTRBMCAqLworIC01LjM1NDM0Mjc1NjAxOTQ0NzczMzcxZSswMywgLyogMHhDMEI0RUE1NywgMHhCRURCQzYwOSAqLworfTsKKworc3RhdGljIGNvbnN0IGRvdWJsZSBxUjNbNl0gPSB7LyogZm9yIHggaW4gWzQuNTQ3LDIuODU3MV09MS9bMC4yMTk5LDAuMzUwMDFdICovCisgIDQuMzc3NDEwMTQwODk3Mzg2MjA5MDZlLTA5LCAvKiAweDNFMzJDRDAzLCAweDZBREVDQjgyICovCisgIDcuMzI0MTExODAwNDI5MTE0NDcxNjNlLTAyLCAvKiAweDNGQjJCRkVFLCAweDBFOEQwODQyICovCisgIDMuMzQ0MjMxMzc1MTYxNzA3MjA5MjllKzAwLCAvKiAweDQwMEFDMEZDLCAweDYxMTQ5Q0Y1ICovCisgIDQuMjYyMTg0NDA3NDU0MTI2NTAwMTdlKzAxLCAvKiAweDQwNDU0Rjk4LCAweDk2MkRBRUREICovCisgIDEuNzA4MDgwOTEzNDA1NjU1OTYyODNlKzAyLCAvKiAweDQwNjU1OURCLCAweEUyNUVGRDFGICovCisgIDEuNjY3MzM5NDg2OTY2NTExNjg1NzVlKzAyLCAvKiAweDQwNjRENzdDLCAweDgxRkEyMUUwICovCit9Oworc3RhdGljIGNvbnN0IGRvdWJsZSBxUzNbNl0gPSB7CisgIDQuODc1ODg3Mjk3MjQ1ODcxODIwOTFlKzAxLCAvKiAweDQwNDg2MTIyLCAweEJGRTM0M0E2ICovCisgIDcuMDk2ODkyMjEwNTY2MDYwMTU3MzZlKzAyLCAvKiAweDQwODYyRDgzLCAweDg2NTQ0RUIzICovCisgIDMuNzA0MTQ4MjI2MjAxMTEzNjI5OTRlKzAzLCAvKiAweDQwQUNGMDRCLCAweEU0NERGQzYzICovCisgIDYuNDYwNDI1MTY3NTI1Njg5MTc1ODJlKzAzLCAvKiAweDQwQjkzQzZDLCAweEQ3Qzc2QTI4ICovCisgIDIuNTE2MzMzNjg5MjAzNjg5NTczMzNlKzAzLCAvKiAweDQwQTNBOEFBLCAweEQ5NEZCMUMwICovCisgLTEuNDkyNDc0NTE4MzYxNTYzODY2NjJlKzAyLCAvKiAweEMwNjJBN0VCLCAweDIwMUNGNDBGICovCit9OworCitzdGF0aWMgY29uc3QgZG91YmxlIHFSMls2XSA9IHsvKiBmb3IgeCBpbiBbMi44NTcwLDJdPTEvWzAuMzQ5OSwwLjVdICovCisgIDEuNTA0NDQ0NDQ4ODY5ODMyNzIzNzllLTA3LCAvKiAweDNFODQzMTNCLCAweDU0Rjc2QkRCICovCisgIDcuMzIyMzQyNjU5NjMwNzkyNzgyNzJlLTAyLCAvKiAweDNGQjJCRUM1LCAweDNFODgzRTM0ICovCisgIDEuOTk4MTkxNzQwOTM4MTU5OTg4MTZlKzAwLCAvKiAweDNGRkZGODk3LCAweEU3Mjc3NzlDICovCisgIDEuNDQ5NTYwMjkzNDc4ODU3MzUzNDhlKzAxLCAvKiAweDQwMkNGREJGLCAweEFBRjk2RkU1ICovCisgIDMuMTY2NjIzMTc1MDQ3ODE1NDA4MzNlKzAxLCAvKiAweDQwM0ZBQThFLCAweDI5RkJEQzRBICovCisgIDEuNjI1MjcwNzU3MTA5MjkyNjc0MTZlKzAxLCAvKiAweDQwMzA0MEIxLCAweDcxODE0QkI0ICovCit9Oworc3RhdGljIGNvbnN0IGRvdWJsZSBxUzJbNl0gPSB7CisgIDMuMDM2NTU4NDgzNTUyMTkxODQ0OThlKzAxLCAvKiAweDQwM0U1RDk2LCAweEY3QzA3QUVEICovCisgIDIuNjkzNDgxMTg2MDgwNDk4NDQ2MjRlKzAyLCAvKiAweDQwNzBENTkxLCAweEU0RDE0QjQwICovCisgIDguNDQ3ODM3NTc1OTUzMjAxMzk0NDRlKzAyLCAvKiAweDQwOEE2NjQ1LCAweDIyQjNCRjIyICovCisgIDguODI5MzU4NDUxMTI0ODg1NTA1MTJlKzAyLCAvKiAweDQwOEI5NzdDLCAweDlDNUNDMjE0ICovCisgIDIuMTI2NjYzODg1MTE3OTg4Mjg2MzFlKzAyLCAvKiAweDQwNkE5NTUzLCAweDBFMDAxMzY1ICovCisgLTUuMzEwOTU0OTM4ODI2NjY5NDY5MTdlKzAwLCAvKiAweEMwMTUzRTZBLCAweEY4QjMyOTMxICovCit9OworCisJc3RhdGljIGRvdWJsZSBxemVybyhkb3VibGUgeCkKK3sKKwljb25zdCBkb3VibGUgKnAsKnE7CisJZG91YmxlIHMscix6OworCWludDMyX3QgaXg7CisJR0VUX0hJR0hfV09SRChpeCx4KTsKKwlpeCAmPSAweDdmZmZmZmZmOworCWlmKGl4Pj0weDQwMjAwMDAwKSAgICAge3AgPSBxUjg7IHE9IHFTODt9CisJZWxzZSBpZihpeD49MHg0MDEyMkU4Qil7cCA9IHFSNTsgcT0gcVM1O30KKwllbHNlIGlmKGl4Pj0weDQwMDZEQjZEKXtwID0gcVIzOyBxPSBxUzM7fQorCWVsc2UgaWYoaXg+PTB4NDAwMDAwMDApe3AgPSBxUjI7IHE9IHFTMjt9CisJeiA9IG9uZS8oeCp4KTsKKwlyID0gcFswXSt6KihwWzFdK3oqKHBbMl0reioocFszXSt6KihwWzRdK3oqcFs1XSkpKSk7CisJcyA9IG9uZSt6KihxWzBdK3oqKHFbMV0reioocVsyXSt6KihxWzNdK3oqKHFbNF0reipxWzVdKSkpKSk7CisJcmV0dXJuICgtLjEyNSArIHIvcykveDsKK30KZGlmZiAtLWdpdCBhL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvZV9qMGYuYyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvZV9qMGYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNDVmYWYzCi0tLSAvZGV2L251bGwKKysrIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9lX2owZi5jCkBAIC0wLDAgKzEsMzM3IEBACisvKiBlX2owZi5jIC0tIGZsb2F0IHZlcnNpb24gb2YgZV9qMC5jLgorICogQ29udmVyc2lvbiB0byBmbG9hdCBieSBJYW4gTGFuY2UgVGF5bG9yLCBDeWdudXMgU3VwcG9ydCwgaWFuQGN5Z251cy5jb20uCisgKi8KKworLyoKKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIENvcHlyaWdodCAoQykgMTk5MyBieSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogRGV2ZWxvcGVkIGF0IFN1blBybywgYSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGJ1c2luZXNzLgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcworICogc29mdHdhcmUgaXMgZnJlZWx5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhpcyBub3RpY2UKKyAqIGlzIHByZXNlcnZlZC4KKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CitfX0ZCU0RJRCgiJEZyZWVCU0QkIik7CisKKyNpbmNsdWRlICJtYXRoLmgiCisjaW5jbHVkZSAibWF0aF9wcml2YXRlLmgiCisKK3N0YXRpYyBmbG9hdCBwemVyb2YoZmxvYXQpLCBxemVyb2YoZmxvYXQpOworCitzdGF0aWMgY29uc3QgZmxvYXQKK2h1Z2UgCT0gMWUzMCwKK29uZQk9IDEuMCwKK2ludnNxcnRwaT0gIDUuNjQxODk2MTI4N2UtMDEsIC8qIDB4M2YxMDZlYmIgKi8KK3RwaSAgICAgID0gIDYuMzY2MTk3NDY2OWUtMDEsIC8qIDB4M2YyMmY5ODMgKi8KKyAJCS8qIFIwL1MwIG9uIFswLCAyLjAwXSAqLworUjAyICA9ICAxLjU2MjUwMDAwMDBlLTAyLCAvKiAweDNjODAwMDAwICovCitSMDMgID0gLTEuODk5NzkyOTg3NGUtMDQsIC8qIDB4Yjk0NzM1MmUgKi8KK1IwNCAgPSAgMS44Mjk1NDA0NTE2ZS0wNiwgLyogMHgzNWY1OGU4OCAqLworUjA1ICA9IC00LjYxODMyNzA1NDFlLTA5LCAvKiAweGIxOWVhZjNjICovCitTMDEgID0gIDEuNTYxOTEwMjg2NWUtMDIsIC8qIDB4M2M3ZmU3NDQgKi8KK1MwMiAgPSAgMS4xNjkyNjc4NTI3ZS0wNCwgLyogMHgzOGY1MzY5NyAqLworUzAzICA9ICA1LjEzNTQ2NTI0NDJlLTA3LCAvKiAweDM1MDlkYWE2ICovCitTMDQgID0gIDEuMTY2MTQwMDczNGUtMDk7IC8qIDB4MzBhMDQ1ZTggKi8KKworc3RhdGljIGNvbnN0IGZsb2F0IHplcm8gPSAwLjA7CisKK2Zsb2F0CitfX2llZWU3NTRfajBmKGZsb2F0IHgpCit7CisJZmxvYXQgeiwgcyxjLHNzLGNjLHIsdSx2OworCWludDMyX3QgaHgsaXg7CisKKwlHRVRfRkxPQVRfV09SRChoeCx4KTsKKwlpeCA9IGh4JjB4N2ZmZmZmZmY7CisJaWYoaXg+PTB4N2Y4MDAwMDApIHJldHVybiBvbmUvKHgqeCk7CisJeCA9IGZhYnNmKHgpOworCWlmKGl4ID49IDB4NDAwMDAwMDApIHsJLyogfHh8ID49IDIuMCAqLworCQlzID0gc2luZih4KTsKKwkJYyA9IGNvc2YoeCk7CisJCXNzID0gcy1jOworCQljYyA9IHMrYzsKKwkJaWYoaXg8MHg3ZjAwMDAwMCkgeyAgLyogbWFrZSBzdXJlIHgreCBub3Qgb3ZlcmZsb3cgKi8KKwkJICAgIHogPSAtY29zZih4K3gpOworCQkgICAgaWYgKChzKmMpPHplcm8pIGNjID0gei9zczsKKwkJICAgIGVsc2UgCSAgICBzcyA9IHovY2M7CisJCX0KKwkvKgorCSAqIGowKHgpID0gMS9zcXJ0KHBpKSAqIChQKDAseCkqY2MgLSBRKDAseCkqc3MpIC8gc3FydCh4KQorCSAqIHkwKHgpID0gMS9zcXJ0KHBpKSAqIChQKDAseCkqc3MgKyBRKDAseCkqY2MpIC8gc3FydCh4KQorCSAqLworCQlpZihpeD4weDgwMDAwMDAwKSB6ID0gKGludnNxcnRwaSpjYykvc3FydGYoeCk7CisJCWVsc2UgeworCQkgICAgdSA9IHB6ZXJvZih4KTsgdiA9IHF6ZXJvZih4KTsKKwkJICAgIHogPSBpbnZzcXJ0cGkqKHUqY2Mtdipzcykvc3FydGYoeCk7CisJCX0KKwkJcmV0dXJuIHo7CisJfQorCWlmKGl4PDB4MzkwMDAwMDApIHsJLyogfHh8IDwgMioqLTEzICovCisJICAgIGlmKGh1Z2UreD5vbmUpIHsJLyogcmFpc2UgaW5leGFjdCBpZiB4ICE9IDAgKi8KKwkgICAgICAgIGlmKGl4PDB4MzIwMDAwMDApIHJldHVybiBvbmU7CS8qIHx4fDwyKiotMjcgKi8KKwkgICAgICAgIGVsc2UgCSAgICAgIHJldHVybiBvbmUgLSAoZmxvYXQpMC4yNSp4Kng7CisJICAgIH0KKwl9CisJeiA9IHgqeDsKKwlyID0gIHoqKFIwMit6KihSMDMreiooUjA0K3oqUjA1KSkpOworCXMgPSAgb25lK3oqKFMwMSt6KihTMDIreiooUzAzK3oqUzA0KSkpOworCWlmKGl4IDwgMHgzRjgwMDAwMCkgewkvKiB8eHwgPCAxLjAwICovCisJICAgIHJldHVybiBvbmUgKyB6KigoZmxvYXQpLTAuMjUrKHIvcykpOworCX0gZWxzZSB7CisJICAgIHUgPSAoZmxvYXQpMC41Kng7CisJICAgIHJldHVybigob25lK3UpKihvbmUtdSkreiooci9zKSk7CisJfQorfQorCitzdGF0aWMgY29uc3QgZmxvYXQKK3UwMCAgPSAtNy4zODA0Mjk2NTUzZS0wMiwgLyogMHhiZDk3MjZiNSAqLwordTAxICA9ICAxLjc2NjY2NDUzNDhlLTAxLCAvKiAweDNlMzRlODBkICovCit1MDIgID0gLTEuMzgxODU2NzYxOWUtMDIsIC8qIDB4YmM2MjY3NDYgKi8KK3UwMyAgPSAgMy40NzQ1MzQzMTQ2ZS0wNCwgLyogMHgzOWI2MmE2OSAqLwordTA0ICA9IC0zLjgxNDA3MDYyMzhlLTA2LCAvKiAweGI2N2ZmNTNjICovCit1MDUgID0gIDEuOTU1OTAxMzk2NGUtMDgsIC8qIDB4MzJhODAyYmEgKi8KK3UwNiAgPSAtMy45ODIwNTE4NDEwZS0xMSwgLyogMHhhZTJmMjFlYiAqLwordjAxICA9ICAxLjI3MzA0ODM4OTdlLTAyLCAvKiAweDNjNTA5Mzg1ICovCit2MDIgID0gIDcuNjAwNjg2NTEyOWUtMDUsIC8qIDB4Mzg5ZjY1ZTAgKi8KK3YwMyAgPSAgMi41OTE1MDg1MTg5ZS0wNywgLyogMHgzNDhiMjE2YyAqLwordjA0ICA9ICA0LjQxMTEwMzE0OTRlLTEwOyAvKiAweDJmZjI4MGMyICovCisKK2Zsb2F0CitfX2llZWU3NTRfeTBmKGZsb2F0IHgpCit7CisJZmxvYXQgeiwgcyxjLHNzLGNjLHUsdjsKKwlpbnQzMl90IGh4LGl4OworCisJR0VUX0ZMT0FUX1dPUkQoaHgseCk7CisgICAgICAgIGl4ID0gMHg3ZmZmZmZmZiZoeDsKKyAgICAvKiBZMChOYU4pIGlzIE5hTiwgeTAoLWluZikgaXMgTmFuLCB5MChpbmYpIGlzIDAgICovCisJaWYoaXg+PTB4N2Y4MDAwMDApIHJldHVybiAgb25lLyh4K3gqeCk7CisgICAgICAgIGlmKGl4PT0wKSByZXR1cm4gLW9uZS96ZXJvOworICAgICAgICBpZihoeDwwKSByZXR1cm4gemVyby96ZXJvOworICAgICAgICBpZihpeCA+PSAweDQwMDAwMDAwKSB7ICAvKiB8eHwgPj0gMi4wICovCisgICAgICAgIC8qIHkwKHgpID0gc3FydCgyLyhwaSp4KSkqKHAwKHgpKnNpbih4MCkrcTAoeCkqY29zKHgwKSkKKyAgICAgICAgICogd2hlcmUgeDAgPSB4LXBpLzQKKyAgICAgICAgICogICAgICBCZXR0ZXIgZm9ybXVsYToKKyAgICAgICAgICogICAgICAgICAgICAgIGNvcyh4MCkgPSBjb3MoeCljb3MocGkvNCkrc2luKHgpc2luKHBpLzQpCisgICAgICAgICAqICAgICAgICAgICAgICAgICAgICAgID0gIDEvc3FydCgyKSAqIChzaW4oeCkgKyBjb3MoeCkpCisgICAgICAgICAqICAgICAgICAgICAgICBzaW4oeDApID0gc2luKHgpY29zKDNwaS80KS1jb3MoeClzaW4oM3BpLzQpCisgICAgICAgICAqICAgICAgICAgICAgICAgICAgICAgID0gIDEvc3FydCgyKSAqIChzaW4oeCkgLSBjb3MoeCkpCisgICAgICAgICAqIFRvIGF2b2lkIGNhbmNlbGxhdGlvbiwgdXNlCisgICAgICAgICAqICAgICAgICAgICAgICBzaW4oeCkgKy0gY29zKHgpID0gLWNvcygyeCkvKHNpbih4KSAtKyBjb3MoeCkpCisgICAgICAgICAqIHRvIGNvbXB1dGUgdGhlIHdvcnNlIG9uZS4KKyAgICAgICAgICovCisgICAgICAgICAgICAgICAgcyA9IHNpbmYoeCk7CisgICAgICAgICAgICAgICAgYyA9IGNvc2YoeCk7CisgICAgICAgICAgICAgICAgc3MgPSBzLWM7CisgICAgICAgICAgICAgICAgY2MgPSBzK2M7CisJLyoKKwkgKiBqMCh4KSA9IDEvc3FydChwaSkgKiAoUCgwLHgpKmNjIC0gUSgwLHgpKnNzKSAvIHNxcnQoeCkKKwkgKiB5MCh4KSA9IDEvc3FydChwaSkgKiAoUCgwLHgpKnNzICsgUSgwLHgpKmNjKSAvIHNxcnQoeCkKKwkgKi8KKyAgICAgICAgICAgICAgICBpZihpeDwweDdmMDAwMDAwKSB7ICAvKiBtYWtlIHN1cmUgeCt4IG5vdCBvdmVyZmxvdyAqLworICAgICAgICAgICAgICAgICAgICB6ID0gLWNvc2YoeCt4KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKChzKmMpPHplcm8pIGNjID0gei9zczsKKyAgICAgICAgICAgICAgICAgICAgZWxzZSAgICAgICAgICAgIHNzID0gei9jYzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYoaXg+MHg4MDAwMDAwMCkgeiA9IChpbnZzcXJ0cGkqc3MpL3NxcnRmKHgpOworICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICB1ID0gcHplcm9mKHgpOyB2ID0gcXplcm9mKHgpOworICAgICAgICAgICAgICAgICAgICB6ID0gaW52c3FydHBpKih1KnNzK3YqY2MpL3NxcnRmKHgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gejsKKwl9CisJaWYoaXg8PTB4MzIwMDAwMDApIHsJLyogeCA8IDIqKi0yNyAqLworCSAgICByZXR1cm4odTAwICsgdHBpKl9faWVlZTc1NF9sb2dmKHgpKTsKKwl9CisJeiA9IHgqeDsKKwl1ID0gdTAwK3oqKHUwMSt6Kih1MDIreioodTAzK3oqKHUwNCt6Kih1MDUreip1MDYpKSkpKTsKKwl2ID0gb25lK3oqKHYwMSt6Kih2MDIreioodjAzK3oqdjA0KSkpOworCXJldHVybih1L3YgKyB0cGkqKF9faWVlZTc1NF9qMGYoeCkqX19pZWVlNzU0X2xvZ2YoeCkpKTsKK30KKworLyogVGhlIGFzeW1wdG90aWMgZXhwYW5zaW9ucyBvZiBwemVybyBpcworICoJMSAtIDkvMTI4IHNeMiArIDExMDI1Lzk4MzA0IHNeNCAtIC4uLiwJd2hlcmUgcyA9IDEveC4KKyAqIEZvciB4ID49IDIsIFdlIGFwcHJveGltYXRlIHB6ZXJvIGJ5CisgKiAJcHplcm8oeCkgPSAxICsgKFIvUykKKyAqIHdoZXJlICBSID0gcFIwICsgcFIxKnNeMiArIHBSMipzXjQgKyAuLi4gKyBwUjUqc14xMAorICogCSAgUyA9IDEgKyBwUzAqc14yICsgLi4uICsgcFM0KnNeMTAKKyAqIGFuZAorICoJfCBwemVybyh4KS0xLVIvUyB8IDw9IDIgICoqICggLTYwLjI2KQorICovCitzdGF0aWMgY29uc3QgZmxvYXQgcFI4WzZdID0geyAvKiBmb3IgeCBpbiBbaW5mLCA4XT0xL1swLDAuMTI1XSAqLworICAwLjAwMDAwMDAwMDBlKzAwLCAvKiAweDAwMDAwMDAwICovCisgLTcuMDMxMjUwMDAwMGUtMDIsIC8qIDB4YmQ5MDAwMDAgKi8KKyAtOC4wODE2NzA3NjExZSswMCwgLyogMHhjMTAxNGU4NiAqLworIC0yLjU3MDYzMTEwMzVlKzAyLCAvKiAweGMzODA4ODE0ICovCisgLTIuNDg1MjE2MzA4NmUrMDMsIC8qIDB4YzUxYjUzNzYgKi8KKyAtNS4yNTMwNDM5NDUzZSswMywgLyogMHhjNWE0Mjg1YSAqLworfTsKK3N0YXRpYyBjb25zdCBmbG9hdCBwUzhbNV0gPSB7CisgIDEuMTY1MzQzNjI3OWUrMDIsIC8qIDB4NDJlOTExOTggKi8KKyAgMy44MzM3NDQ4NzMwZSswMywgLyogMHg0NTZmOWJlYiAqLworICA0LjA1OTc4NTU0NjllKzA0LCAvKiAweDQ3MWU5NWRiICovCisgIDEuMTY3NTI5Njg3NWUrMDUsIC8qIDB4NDdlNDA4N2MgKi8KKyAgNC43NjI3NzI2NTYyZSswNCwgLyogMHg0NzNhMGJiYSAqLworfTsKK3N0YXRpYyBjb25zdCBmbG9hdCBwUjVbNl0gPSB7IC8qIGZvciB4IGluIFs4LDQuNTQ1NF09MS9bMC4xMjUsMC4yMjAwMV0gKi8KKyAtMS4xNDEyNTQ2MjU1ZS0xMSwgLyogMHhhZDQ4YzU4YSAqLworIC03LjAzMTI0OTI1NDllLTAyLCAvKiAweGJkOGZmZmZmICovCisgLTQuMTU5NjEwNzQ4M2UrMDAsIC8qIDB4YzA4NTFiODggKi8KKyAtNi43Njc0NzY2NTQxZSswMSwgLyogMHhjMjg3NTk3YiAqLworIC0zLjMxMjMxMjkyNzJlKzAyLCAvKiAweGMzYTU5ZDliICovCisgLTMuNDY0MzMzODAxM2UrMDIsIC8qIDB4YzNhZDM3NzkgKi8KK307CitzdGF0aWMgY29uc3QgZmxvYXQgcFM1WzVdID0geworICA2LjA3NTM5MzY3NjhlKzAxLCAvKiAweDQyNzMwNDA4ICovCisgIDEuMDUxMjUyMzE5M2UrMDMsIC8qIDB4NDQ4MzY4MTMgKi8KKyAgNS45Nzg5NzA3MDMxZSswMywgLyogMHg0NWJhZDdjNCAqLworICA5LjYyNTQ0NTMxMjVlKzAzLCAvKiAweDQ2MTY2NWM4ICovCisgIDIuNDA2MDU4MTA1NWUrMDMsIC8qIDB4NDUxNjYwZWUgKi8KK307CisKK3N0YXRpYyBjb25zdCBmbG9hdCBwUjNbNl0gPSB7LyogZm9yIHggaW4gWzQuNTQ3LDIuODU3MV09MS9bMC4yMTk5LDAuMzUwMDFdICovCisgLTIuNTQ3MDQ1OTA3NWUtMDksIC8qIDB4YjEyZjA4MWIgKi8KKyAtNy4wMzExOTYzNTU4ZS0wMiwgLyogMHhiZDhmZmZiOCAqLworIC0yLjQwOTAzMjEwNjRlKzAwLCAvKiAweGMwMWEyZDk1ICovCisgLTIuMTk2NTk3NjcxNWUrMDEsIC8qIDB4YzFhZmJhNTIgKi8KKyAtNS44MDc5MTcwMjI3ZSswMSwgLyogMHhjMjY4NTExMiAqLworIC0zLjE0NDc5NDY1NDhlKzAxLCAvKiAweGMxZmI5NTY1ICovCit9Oworc3RhdGljIGNvbnN0IGZsb2F0IHBTM1s1XSA9IHsKKyAgMy41ODU2MDMzMzI1ZSswMSwgLyogMHg0MjBmNmM5NCAqLworICAzLjYxNTEzOTc3MDVlKzAyLCAvKiAweDQzYjRjMWNhICovCisgIDEuMTkzNjA3Nzg4MWUrMDMsIC8qIDB4NDQ5NTMzNzMgKi8KKyAgMS4xMjc5OTY4MjYyZSswMywgLyogMHg0NDhjZmZlNiAqLworICAxLjczNTgwOTMyNjJlKzAyLCAvKiAweDQzMmQ5NGI4ICovCit9OworCitzdGF0aWMgY29uc3QgZmxvYXQgcFIyWzZdID0gey8qIGZvciB4IGluIFsyLjg1NzAsMl09MS9bMC4zNDk5LDAuNV0gKi8KKyAtOC44NzUzNDMxMjcxZS0wOCwgLyogMHhiM2JlOThiNyAqLworIC03LjAzMDMwOTczNjdlLTAyLCAvKiAweGJkOGZmYjEyICovCisgLTEuNDUwNzM4NDMwMGUrMDAsIC8qIDB4YmZiOWIxY2MgKi8KKyAtNy42MzU2OTU5MzQzZSswMCwgLyogMHhjMGY0NTc5ZiAqLworIC0xLjExOTMxNjY3MzNlKzAxLCAvKiAweGMxMzMxNzM2ICovCisgLTMuMjMzNjQ1Njc3NmUrMDAsIC8qIDB4YzA0ZWY0MGQgKi8KK307CitzdGF0aWMgY29uc3QgZmxvYXQgcFMyWzVdID0geworICAyLjIyMjAzMDA2NzRlKzAxLCAvKiAweDQxYjFjMzJkICovCisgIDEuMzYyMDY3ODcxMWUrMDIsIC8qIDB4NDMwODM0ZjAgKi8KKyAgMi43MDQ3MDI3NTg4ZSswMiwgLyogMHg0Mzg3M2MzMiAqLworICAxLjUzODc1Mzk2NzNlKzAyLCAvKiAweDQzMTllMDFhICovCisgIDEuNDY1NzYxNzU2OWUrMDEsIC8qIDB4NDE2YTg1OWEgKi8KK307CisKKwlzdGF0aWMgZmxvYXQgcHplcm9mKGZsb2F0IHgpCit7CisJY29uc3QgZmxvYXQgKnAsKnE7CisJZmxvYXQgeixyLHM7CisJaW50MzJfdCBpeDsKKwlHRVRfRkxPQVRfV09SRChpeCx4KTsKKwlpeCAmPSAweDdmZmZmZmZmOworCWlmKGl4Pj0weDQxMDAwMDAwKSAgICAge3AgPSBwUjg7IHE9IHBTODt9CisJZWxzZSBpZihpeD49MHg0MGY3MWM1OCl7cCA9IHBSNTsgcT0gcFM1O30KKwllbHNlIGlmKGl4Pj0weDQwMzZkYjY4KXtwID0gcFIzOyBxPSBwUzM7fQorCWVsc2UgaWYoaXg+PTB4NDAwMDAwMDApe3AgPSBwUjI7IHE9IHBTMjt9CisJeiA9IG9uZS8oeCp4KTsKKwlyID0gcFswXSt6KihwWzFdK3oqKHBbMl0reioocFszXSt6KihwWzRdK3oqcFs1XSkpKSk7CisJcyA9IG9uZSt6KihxWzBdK3oqKHFbMV0reioocVsyXSt6KihxWzNdK3oqcVs0XSkpKSk7CisJcmV0dXJuIG9uZSsgci9zOworfQorCisKKy8qIEZvciB4ID49IDgsIHRoZSBhc3ltcHRvdGljIGV4cGFuc2lvbnMgb2YgcXplcm8gaXMKKyAqCS0xLzggcyArIDc1LzEwMjQgc14zIC0gLi4uLCB3aGVyZSBzID0gMS94LgorICogV2UgYXBwcm94aW1hdGUgcHplcm8gYnkKKyAqIAlxemVybyh4KSA9IHMqKC0xLjI1ICsgKFIvUykpCisgKiB3aGVyZSAgUiA9IHFSMCArIHFSMSpzXjIgKyBxUjIqc140ICsgLi4uICsgcVI1KnNeMTAKKyAqIAkgIFMgPSAxICsgcVMwKnNeMiArIC4uLiArIHFTNSpzXjEyCisgKiBhbmQKKyAqCXwgcXplcm8oeCkvcyArMS4yNS1SL1MgfCA8PSAyICAqKiAoIC02MS4yMikKKyAqLworc3RhdGljIGNvbnN0IGZsb2F0IHFSOFs2XSA9IHsgLyogZm9yIHggaW4gW2luZiwgOF09MS9bMCwwLjEyNV0gKi8KKyAgMC4wMDAwMDAwMDAwZSswMCwgLyogMHgwMDAwMDAwMCAqLworICA3LjMyNDIxODc1MDBlLTAyLCAvKiAweDNkOTYwMDAwICovCisgIDEuMTc2ODIwNjU5NmUrMDEsIC8qIDB4NDEzYzRhOTMgKi8KKyAgNS41NzY3MzQwMDg4ZSswMiwgLyogMHg0NDBiNmIxOSAqLworICA4Ljg1OTE5NzI2NTZlKzAzLCAvKiAweDQ2MGE2Y2NhICovCisgIDMuNzAxNDYyNTAwMGUrMDQsIC8qIDB4NDcxMDk2YTAgKi8KK307CitzdGF0aWMgY29uc3QgZmxvYXQgcVM4WzZdID0geworICAxLjYzNzc2MDMxNDllKzAyLCAvKiAweDQzMjNjNmFhICovCisgIDguMDk4MzQ0NzI2NmUrMDMsIC8qIDB4NDVmZDEyYzIgKi8KKyAgMS40MjUzODI5Njg4ZSswNSwgLyogMHg0ODBiMzI5MyAqLworICA4LjAzMzA5MjUwMDBlKzA1LCAvKiAweDQ5NDQxZWQ0ICovCisgIDguNDA1MDE1NjI1MGUrMDUsIC8qIDB4NDk0ZDMzNTkgKi8KKyAtMy40Mzg5OTI4MTI1ZSswNSwgLyogMHhjOGE3ZWI2OSAqLworfTsKKworc3RhdGljIGNvbnN0IGZsb2F0IHFSNVs2XSA9IHsgLyogZm9yIHggaW4gWzgsNC41NDU0XT0xL1swLjEyNSwwLjIyMDAxXSAqLworICAxLjg0MDg1OTU4MjhlLTExLCAvKiAweDJkYTFlYzc5ICovCisgIDcuMzI0MjE4MDA0OWUtMDIsIC8qIDB4M2Q5NWZmZmYgKi8KKyAgNS44MzU2MzUxODUyZSswMCwgLyogMHg0MGJhYmQ4NiAqLworICAxLjM1MTExNTcyMjdlKzAyLCAvKiAweDQzMDcxYzkwICovCisgIDEuMDI3MjQzNzc0NGUrMDMsIC8qIDB4NDQ4MDY3Y2QgKi8KKyAgMS45ODk5Nzc5MDUzZSswMywgLyogMHg0NGY4YmY0YiAqLworfTsKK3N0YXRpYyBjb25zdCBmbG9hdCBxUzVbNl0gPSB7CisgIDguMjc3NjYxMTMyOGUrMDEsIC8qIDB4NDJhNThkYTAgKi8KKyAgMi4wNzc4MTQyMDkwZSswMywgLyogMHg0NTAxZGQwNyAqLworICAxLjg4NDcyODkwNjJlKzA0LCAvKiAweDQ2OTMzZTk0ICovCisgIDUuNjc1MTExMzI4MWUrMDQsIC8qIDB4NDc1ZGFmMWQgKi8KKyAgMy41OTc2NzUzOTA2ZSswNCwgLyogMHg0NzBjODhjMSAqLworIC01LjM1NDM0Mjc3MzRlKzAzLCAvKiAweGM1YTc1MmJlICovCit9OworCitzdGF0aWMgY29uc3QgZmxvYXQgcVIzWzZdID0gey8qIGZvciB4IGluIFs0LjU0NywyLjg1NzFdPTEvWzAuMjE5OSwwLjM1MDAxXSAqLworICA0LjM3NzQwOTk5MDBlLTA5LCAvKiAweDMxOTY2ODFiICovCisgIDcuMzI0MTExNDYxNmUtMDIsIC8qIDB4M2Q5NWZmNzAgKi8KKyAgMy4zNDQyMzEzNjcxZSswMCwgLyogMHg0MDU2MDdlMyAqLworICA0LjI2MjE4NDUyNDVlKzAxLCAvKiAweDQyMmE3Y2M1ICovCisgIDEuNzA4MDgwOTAyMWUrMDIsIC8qIDB4NDMyYWNlZGYgKi8KKyAgMS42NjczMzk0Nzc1ZSswMiwgLyogMHg0MzI2YmJlNCAqLworfTsKK3N0YXRpYyBjb25zdCBmbG9hdCBxUzNbNl0gPSB7CisgIDQuODc1ODg3Mjk4NmUrMDEsIC8qIDB4NDI0MzA5MTYgKi8KKyAgNy4wOTY4OTIwODk4ZSswMiwgLyogMHg0NDMxNmMxYyAqLworICAzLjcwNDE0ODE5MzRlKzAzLCAvKiAweDQ1Njc4MjVmICovCisgIDYuNDYwNDI1MjkzMGUrMDMsIC8qIDB4NDVjOWUzNjcgKi8KKyAgMi41MTYzMzM3NDAyZSswMywgLyogMHg0NTFkNDU1NyAqLworIC0xLjQ5MjQ3NDUxNzhlKzAyLCAvKiAweGMzMTUzZjU5ICovCit9OworCitzdGF0aWMgY29uc3QgZmxvYXQgcVIyWzZdID0gey8qIGZvciB4IGluIFsyLjg1NzAsMl09MS9bMC4zNDk5LDAuNV0gKi8KKyAgMS41MDQ0NDQ0OTc5ZS0wNywgLyogMHgzNDIxODlkYiAqLworICA3LjMyMjM0MjY5MzhlLTAyLCAvKiAweDNkOTVmNjJhICovCisgIDEuOTk4MTkxNzE0M2UrMDAsIC8qIDB4M2ZmZmM0YmYgKi8KKyAgMS40NDk1NjAyNjA4ZSswMSwgLyogMHg0MTY3ZWRmZCAqLworICAzLjE2NjYyMzExNTVlKzAxLCAvKiAweDQxZmQ1NDcxICovCisgIDEuNjI1MjcwODQzNWUrMDEsIC8qIDB4NDE4MjA1OGMgKi8KK307CitzdGF0aWMgY29uc3QgZmxvYXQgcVMyWzZdID0geworICAzLjAzNjU1ODUzMjdlKzAxLCAvKiAweDQxZjJlY2I4ICovCisgIDIuNjkzNDgxMTQwMWUrMDIsIC8qIDB4NDM4NmFjOGYgKi8KKyAgOC40NDc4Mzc1MjQ0ZSswMiwgLyogMHg0NDUzMzIyOSAqLworICA4LjgyOTM1ODUyMDVlKzAyLCAvKiAweDQ0NWNiYmU1ICovCisgIDIuMTI2NjYzODE4NGUrMDIsIC8qIDB4NDM1NGFhOTggKi8KKyAtNS4zMTA5NTUwNDc2ZSswMCwgLyogMHhjMGE5ZjM1OCAqLworfTsKKworCXN0YXRpYyBmbG9hdCBxemVyb2YoZmxvYXQgeCkKK3sKKwljb25zdCBmbG9hdCAqcCwqcTsKKwlmbG9hdCBzLHIsejsKKwlpbnQzMl90IGl4OworCUdFVF9GTE9BVF9XT1JEKGl4LHgpOworCWl4ICY9IDB4N2ZmZmZmZmY7CisJaWYoaXg+PTB4NDEwMDAwMDApICAgICB7cCA9IHFSODsgcT0gcVM4O30KKwllbHNlIGlmKGl4Pj0weDQwZjcxYzU4KXtwID0gcVI1OyBxPSBxUzU7fQorCWVsc2UgaWYoaXg+PTB4NDAzNmRiNjgpe3AgPSBxUjM7IHE9IHFTMzt9CisJZWxzZSBpZihpeD49MHg0MDAwMDAwMCl7cCA9IHFSMjsgcT0gcVMyO30KKwl6ID0gb25lLyh4KngpOworCXIgPSBwWzBdK3oqKHBbMV0reioocFsyXSt6KihwWzNdK3oqKHBbNF0reipwWzVdKSkpKTsKKwlzID0gb25lK3oqKHFbMF0reioocVsxXSt6KihxWzJdK3oqKHFbM10reioocVs0XSt6KnFbNV0pKSkpKTsKKwlyZXR1cm4gKC0oZmxvYXQpLjEyNSArIHIvcykveDsKK30KZGlmZiAtLWdpdCBhL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvZV9qMS5jIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9lX2oxLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjM4MDBhZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvZV9qMS5jCkBAIC0wLDAgKzEsMzc2IEBACisKKy8qIEAoIyllX2oxLmMgMS4zIDk1LzAxLzE4ICovCisvKgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogQ29weXJpZ2h0IChDKSAxOTkzIGJ5IFN1biBNaWNyb3N5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBEZXZlbG9wZWQgYXQgU3VuU29mdCwgYSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGJ1c2luZXNzLgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcworICogc29mdHdhcmUgaXMgZnJlZWx5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhpcyBub3RpY2UgCisgKiBpcyBwcmVzZXJ2ZWQuCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorX19GQlNESUQoIiRGcmVlQlNEJCIpOworCisvKiBfX2llZWU3NTRfajEoeCksIF9faWVlZTc1NF95MSh4KQorICogQmVzc2VsIGZ1bmN0aW9uIG9mIHRoZSBmaXJzdCBhbmQgc2Vjb25kIGtpbmRzIG9mIG9yZGVyIHplcm8uCisgKiBNZXRob2QgLS0gajEoeCk6CisgKgkxLiBGb3IgdGlueSB4LCB3ZSB1c2UgajEoeCkgPSB4LzIgLSB4XjMvMTYgKyB4XjUvMzg0IC0gLi4uCisgKgkyLiBSZWR1Y2UgeCB0byB8eHwgc2luY2UgajEoeCk9LWoxKC14KSwgIGFuZAorICoJICAgZm9yIHggaW4gKDAsMikKKyAqCQlqMSh4KSA9IHgvMiArIHgqeipSMC9TMCwgIHdoZXJlIHogPSB4Kng7CisgKgkgICAocHJlY2lzaW9uOiAgfGoxL3ggLSAxLzIgLSBSMC9TMCB8PDIqKi02MS41MSApCisgKgkgICBmb3IgeCBpbiAoMixpbmYpCisgKiAJCWoxKHgpID0gc3FydCgyLyhwaSp4KSkqKHAxKHgpKmNvcyh4MSktcTEoeCkqc2luKHgxKSkKKyAqIAkJeTEoeCkgPSBzcXJ0KDIvKHBpKngpKSoocDEoeCkqc2luKHgxKStxMSh4KSpjb3MoeDEpKQorICogCSAgIHdoZXJlIHgxID0geC0zKnBpLzQuIEl0IGlzIGJldHRlciB0byBjb21wdXRlIHNpbih4MSksY29zKHgxKQorICoJICAgYXMgZm9sbG93OgorICoJCWNvcyh4MSkgPSAgY29zKHgpY29zKDNwaS80KStzaW4oeClzaW4oM3BpLzQpCisgKgkJCT0gIDEvc3FydCgyKSAqIChzaW4oeCkgLSBjb3MoeCkpCisgKgkJc2luKHgxKSA9ICBzaW4oeCljb3MoM3BpLzQpLWNvcyh4KXNpbigzcGkvNCkKKyAqCQkJPSAtMS9zcXJ0KDIpICogKHNpbih4KSArIGNvcyh4KSkKKyAqIAkgICAoVG8gYXZvaWQgY2FuY2VsbGF0aW9uLCB1c2UKKyAqCQlzaW4oeCkgKy0gY29zKHgpID0gLWNvcygyeCkvKHNpbih4KSAtKyBjb3MoeCkpCisgKiAJICAgIHRvIGNvbXB1dGUgdGhlIHdvcnNlIG9uZS4pCisgKgkgICAKKyAqCTMgU3BlY2lhbCBjYXNlcworICoJCWoxKG5hbik9IG5hbgorICoJCWoxKDApID0gMAorICoJCWoxKGluZikgPSAwCisgKgkJCisgKiBNZXRob2QgLS0geTEoeCk6CisgKgkxLiBzY3JlZW4gb3V0IHg8PTAgY2FzZXM6IHkxKDApPS1pbmYsIHkxKHg8MCk9TmFOIAorICoJMi4gRm9yIHg8Mi4KKyAqCSAgIFNpbmNlIAorICoJCXkxKHgpID0gMi9waSooajEoeCkqKGxuKHgvMikrRXVsZXIpLTEveC14LzIrNS82NCp4XjMtLi4uKQorICoJICAgdGhlcmVmb3JlIHkxKHgpLTIvcGkqajEoeCkqbG4oeCktMS94IGlzIGFuIG9kZCBmdW5jdGlvbi4KKyAqCSAgIFdlIHVzZSB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uIHRvIGFwcHJveGltYXRlIHkxLAorICoJCXkxKHgpID0geCpVKHopL1YoeikgKyAoMi9waSkqKGoxKHgpKmxuKHgpLTEveCksIHo9IHheMgorICoJICAgd2hlcmUgZm9yIHggaW4gWzAsMl0gKGFicyBlcnIgbGVzcyB0aGFuIDIqKi02NS44OSkKKyAqCQlVKHopID0gVTBbMF0gKyBVMFsxXSp6ICsgLi4uICsgVTBbNF0qel40CisgKgkJVih6KSA9IDEgICsgdjBbMF0qeiArIC4uLiArIHYwWzRdKnpeNQorICoJICAgTm90ZTogRm9yIHRpbnkgeCwgMS94IGRvbWluYXRlIHkxIGFuZCBoZW5jZQorICoJCXkxKHRpbnkpID0gLTIvcGkvdGlueSwgKGNob29zZSB0aW55PDIqKi01NCkKKyAqCTMuIEZvciB4Pj0yLgorICogCQl5MSh4KSA9IHNxcnQoMi8ocGkqeCkpKihwMSh4KSpzaW4oeDEpK3ExKHgpKmNvcyh4MSkpCisgKiAJICAgd2hlcmUgeDEgPSB4LTMqcGkvNC4gSXQgaXMgYmV0dGVyIHRvIGNvbXB1dGUgc2luKHgxKSxjb3MoeDEpCisgKgkgICBieSBtZXRob2QgbWVudGlvbmVkIGFib3ZlLgorICovCisKKyNpbmNsdWRlICJtYXRoLmgiCisjaW5jbHVkZSAibWF0aF9wcml2YXRlLmgiCisKK3N0YXRpYyBkb3VibGUgcG9uZShkb3VibGUpLCBxb25lKGRvdWJsZSk7CisKK3N0YXRpYyBjb25zdCBkb3VibGUKK2h1Z2UgICAgPSAxZTMwMCwKK29uZQk9IDEuMCwKK2ludnNxcnRwaT0gIDUuNjQxODk1ODM1NDc3NTYyNzkyODBlLTAxLCAvKiAweDNGRTIwREQ3LCAweDUwNDI5QjZEICovCit0cGkgICAgICA9ICA2LjM2NjE5NzcyMzY3NTgxMzgyNDMzZS0wMSwgLyogMHgzRkU0NUYzMCwgMHg2REM5Qzg4MyAqLworCS8qIFIwL1MwIG9uIFswLDJdICovCityMDAgID0gLTYuMjUwMDAwMDAwMDAwMDAwMDAwMDBlLTAyLCAvKiAweEJGQjAwMDAwLCAweDAwMDAwMDAwICovCityMDEgID0gIDEuNDA3MDU2NjY5NTUxODk3MDYwNDhlLTAzLCAvKiAweDNGNTcwRDlGLCAweDk4NDcyQzYxICovCityMDIgID0gLTEuNTk5NTU2MzEwODQwMzU1OTc1MjBlLTA1LCAvKiAweEJFRjBDNUM2LCAweEJBMTY5NjY4ICovCityMDMgID0gIDQuOTY3Mjc5OTk2MDk1ODQ0NDg0MTJlLTA4LCAvKiAweDNFNkFBQUZBLCAweDQ2Q0EwQkQ5ICovCitzMDEgID0gIDEuOTE1Mzc1OTk1MzgzNjM0NjA4MDVlLTAyLCAvKiAweDNGOTM5RDBCLCAweDEyNjM3RTUzICovCitzMDIgID0gIDEuODU5NDY3ODU1ODg2MzA5MTU1NjBlLTA0LCAvKiAweDNGMjg1RjU2LCAweEI5Q0RGNjY0ICovCitzMDMgID0gIDEuMTc3MTg0NjQwNDI2MjM2ODMyNjNlLTA2LCAvKiAweDNFQjNCRkY4LCAweDMzM0Y4NDk4ICovCitzMDQgID0gIDUuMDQ2MzYyNTcwNzYyMTcwNDI3MTVlLTA5LCAvKiAweDNFMzVBQzg4LCAweEM5N0RGRjJDICovCitzMDUgID0gIDEuMjM1NDIyNzQ0MjYxMzc5MTM5MDhlLTExOyAvKiAweDNEQUIyQUNGLCAweENGQjk3RUQ4ICovCisKK3N0YXRpYyBjb25zdCBkb3VibGUgemVybyAgICA9IDAuMDsKKworZG91YmxlCitfX2llZWU3NTRfajEoZG91YmxlIHgpCit7CisJZG91YmxlIHosIHMsYyxzcyxjYyxyLHUsdix5OworCWludDMyX3QgaHgsaXg7CisKKwlHRVRfSElHSF9XT1JEKGh4LHgpOworCWl4ID0gaHgmMHg3ZmZmZmZmZjsKKwlpZihpeD49MHg3ZmYwMDAwMCkgcmV0dXJuIG9uZS94OworCXkgPSBmYWJzKHgpOworCWlmKGl4ID49IDB4NDAwMDAwMDApIHsJLyogfHh8ID49IDIuMCAqLworCQlzID0gc2luKHkpOworCQljID0gY29zKHkpOworCQlzcyA9IC1zLWM7CisJCWNjID0gcy1jOworCQlpZihpeDwweDdmZTAwMDAwKSB7ICAvKiBtYWtlIHN1cmUgeSt5IG5vdCBvdmVyZmxvdyAqLworCQkgICAgeiA9IGNvcyh5K3kpOworCQkgICAgaWYgKChzKmMpPnplcm8pIGNjID0gei9zczsKKwkJICAgIGVsc2UgCSAgICBzcyA9IHovY2M7CisJCX0KKwkvKgorCSAqIGoxKHgpID0gMS9zcXJ0KHBpKSAqIChQKDEseCkqY2MgLSBRKDEseCkqc3MpIC8gc3FydCh4KQorCSAqIHkxKHgpID0gMS9zcXJ0KHBpKSAqIChQKDEseCkqc3MgKyBRKDEseCkqY2MpIC8gc3FydCh4KQorCSAqLworCQlpZihpeD4weDQ4MDAwMDAwKSB6ID0gKGludnNxcnRwaSpjYykvc3FydCh5KTsKKwkJZWxzZSB7CisJCSAgICB1ID0gcG9uZSh5KTsgdiA9IHFvbmUoeSk7CisJCSAgICB6ID0gaW52c3FydHBpKih1KmNjLXYqc3MpL3NxcnQoeSk7CisJCX0KKwkJaWYoaHg8MCkgcmV0dXJuIC16OworCQllbHNlICAJIHJldHVybiAgejsKKwl9CisJaWYoaXg8MHgzZTQwMDAwMCkgewkvKiB8eHw8MioqLTI3ICovCisJICAgIGlmKGh1Z2UreD5vbmUpIHJldHVybiAwLjUqeDsvKiBpbmV4YWN0IGlmIHghPTAgbmVjZXNzYXJ5ICovCisJfQorCXogPSB4Kng7CisJciA9ICB6KihyMDAreioocjAxK3oqKHIwMit6KnIwMykpKTsKKwlzID0gIG9uZSt6KihzMDEreiooczAyK3oqKHMwMyt6KihzMDQreipzMDUpKSkpOworCXIgKj0geDsKKwlyZXR1cm4oeCowLjUrci9zKTsKK30KKworc3RhdGljIGNvbnN0IGRvdWJsZSBVMFs1XSA9IHsKKyAtMS45NjA1NzA5MDY0NjIzODk0MDY2OGUtMDEsIC8qIDB4QkZDOTE4NjYsIDB4MTQzQ0JDOEEgKi8KKyAgNS4wNDQzODcxNjYzOTgxMTI4MjYxNmUtMDIsIC8qIDB4M0ZBOUQzQzcsIDB4NzYyOTJDRDEgKi8KKyAtMS45MTI1Njg5NTg3NTc2MzU0NzI5OGUtMDMsIC8qIDB4QkY1RjU1RTUsIDB4NDg0NEY1MEYgKi8KKyAgMi4zNTI1MjYwMDU2MTYxMDQ5NTkyOGUtMDUsIC8qIDB4M0VGOEFCMDMsIDB4OEZBNkI4OEUgKi8KKyAtOS4xOTA5OTE1ODAzOTg3ODg3NDUwNGUtMDgsIC8qIDB4QkU3OEFDMDAsIDB4NTY5MTA1QjggKi8KK307CitzdGF0aWMgY29uc3QgZG91YmxlIFYwWzVdID0geworICAxLjk5MTY3MzE4MjM2NjQ5OTAzOTczZS0wMiwgLyogMHgzRjk0NjUwRCwgMHgzRjREQTlGMCAqLworICAyLjAyNTUyNTgxMDI1MTM1MTcxNDk2ZS0wNCwgLyogMHgzRjJBOEM4OSwgMHg2QzI1Nzc2NCAqLworICAxLjM1NjA4ODAxMDk3NTE2MjI5NDA0ZS0wNiwgLyogMHgzRUI2QzA1QSwgMHg4OTRFOENBNiAqLworICA2LjIyNzQxNDUyMzY0NjIxNTAxMjk1ZS0wOSwgLyogMHgzRTNBQkYxRCwgMHg1QkE2OUE4NiAqLworICAxLjY2NTU5MjQ2MjA3OTkyMDc5MTE0ZS0xMSwgLyogMHgzREIyNTAzOSwgMHhEQUNBNzcyQSAqLworfTsKKworZG91YmxlCitfX2llZWU3NTRfeTEoZG91YmxlIHgpCit7CisJZG91YmxlIHosIHMsYyxzcyxjYyx1LHY7CisJaW50MzJfdCBoeCxpeCxseDsKKworCUVYVFJBQ1RfV09SRFMoaHgsbHgseCk7CisgICAgICAgIGl4ID0gMHg3ZmZmZmZmZiZoeDsKKyAgICAvKiBpZiBZMShOYU4pIGlzIE5hTiwgWTEoLWluZikgaXMgTmFOLCBZMShpbmYpIGlzIDAgKi8KKwlpZihpeD49MHg3ZmYwMDAwMCkgcmV0dXJuICBvbmUvKHgreCp4KTsgCisgICAgICAgIGlmKChpeHxseCk9PTApIHJldHVybiAtb25lL3plcm87CisgICAgICAgIGlmKGh4PDApIHJldHVybiB6ZXJvL3plcm87CisgICAgICAgIGlmKGl4ID49IDB4NDAwMDAwMDApIHsgIC8qIHx4fCA+PSAyLjAgKi8KKyAgICAgICAgICAgICAgICBzID0gc2luKHgpOworICAgICAgICAgICAgICAgIGMgPSBjb3MoeCk7CisgICAgICAgICAgICAgICAgc3MgPSAtcy1jOworICAgICAgICAgICAgICAgIGNjID0gcy1jOworICAgICAgICAgICAgICAgIGlmKGl4PDB4N2ZlMDAwMDApIHsgIC8qIG1ha2Ugc3VyZSB4K3ggbm90IG92ZXJmbG93ICovCisgICAgICAgICAgICAgICAgICAgIHogPSBjb3MoeCt4KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKChzKmMpPnplcm8pIGNjID0gei9zczsKKyAgICAgICAgICAgICAgICAgICAgZWxzZSAgICAgICAgICAgIHNzID0gei9jYzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgIC8qIHkxKHgpID0gc3FydCgyLyhwaSp4KSkqKHAxKHgpKnNpbih4MCkrcTEoeCkqY29zKHgwKSkKKyAgICAgICAgICogd2hlcmUgeDAgPSB4LTNwaS80CisgICAgICAgICAqICAgICAgQmV0dGVyIGZvcm11bGE6CisgICAgICAgICAqICAgICAgICAgICAgICBjb3MoeDApID0gY29zKHgpY29zKDNwaS80KStzaW4oeClzaW4oM3BpLzQpCisgICAgICAgICAqICAgICAgICAgICAgICAgICAgICAgID0gIDEvc3FydCgyKSAqIChzaW4oeCkgLSBjb3MoeCkpCisgICAgICAgICAqICAgICAgICAgICAgICBzaW4oeDApID0gc2luKHgpY29zKDNwaS80KS1jb3MoeClzaW4oM3BpLzQpCisgICAgICAgICAqICAgICAgICAgICAgICAgICAgICAgID0gLTEvc3FydCgyKSAqIChjb3MoeCkgKyBzaW4oeCkpCisgICAgICAgICAqIFRvIGF2b2lkIGNhbmNlbGxhdGlvbiwgdXNlCisgICAgICAgICAqICAgICAgICAgICAgICBzaW4oeCkgKy0gY29zKHgpID0gLWNvcygyeCkvKHNpbih4KSAtKyBjb3MoeCkpCisgICAgICAgICAqIHRvIGNvbXB1dGUgdGhlIHdvcnNlIG9uZS4KKyAgICAgICAgICovCisgICAgICAgICAgICAgICAgaWYoaXg+MHg0ODAwMDAwMCkgeiA9IChpbnZzcXJ0cGkqc3MpL3NxcnQoeCk7CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHUgPSBwb25lKHgpOyB2ID0gcW9uZSh4KTsKKyAgICAgICAgICAgICAgICAgICAgeiA9IGludnNxcnRwaSoodSpzcyt2KmNjKS9zcXJ0KHgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gejsKKyAgICAgICAgfSAKKyAgICAgICAgaWYoaXg8PTB4M2M5MDAwMDApIHsgICAgLyogeCA8IDIqKi01NCAqLworICAgICAgICAgICAgcmV0dXJuKC10cGkveCk7CisgICAgICAgIH0gCisgICAgICAgIHogPSB4Kng7CisgICAgICAgIHUgPSBVMFswXSt6KihVMFsxXSt6KihVMFsyXSt6KihVMFszXSt6KlUwWzRdKSkpOworICAgICAgICB2ID0gb25lK3oqKFYwWzBdK3oqKFYwWzFdK3oqKFYwWzJdK3oqKFYwWzNdK3oqVjBbNF0pKSkpOworICAgICAgICByZXR1cm4oeCoodS92KSArIHRwaSooX19pZWVlNzU0X2oxKHgpKl9faWVlZTc1NF9sb2coeCktb25lL3gpKTsKK30KKworLyogRm9yIHggPj0gOCwgdGhlIGFzeW1wdG90aWMgZXhwYW5zaW9ucyBvZiBwb25lIGlzCisgKgkxICsgMTUvMTI4IHNeMiAtIDQ3MjUvMl4xNSBzXjQgLSAuLi4sCXdoZXJlIHMgPSAxL3guCisgKiBXZSBhcHByb3hpbWF0ZSBwb25lIGJ5CisgKiAJcG9uZSh4KSA9IDEgKyAoUi9TKQorICogd2hlcmUgIFIgPSBwcjAgKyBwcjEqc14yICsgcHIyKnNeNCArIC4uLiArIHByNSpzXjEwCisgKiAJICBTID0gMSArIHBzMCpzXjIgKyAuLi4gKyBwczQqc14xMAorICogYW5kCisgKgl8IHBvbmUoeCktMS1SL1MgfCA8PSAyICAqKiAoIC02MC4wNikKKyAqLworCitzdGF0aWMgY29uc3QgZG91YmxlIHByOFs2XSA9IHsgLyogZm9yIHggaW4gW2luZiwgOF09MS9bMCwwLjEyNV0gKi8KKyAgMC4wMDAwMDAwMDAwMDAwMDAwMDAwMGUrMDAsIC8qIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgKi8KKyAgMS4xNzE4NzQ5OTk5OTk4ODY0Nzk3MGUtMDEsIC8qIDB4M0ZCREZGRkYsIDB4RkZGRkZDQ0UgKi8KKyAgMS4zMjM5NDgwNjU5MzA3MzU3NTEyOWUrMDEsIC8qIDB4NDAyQTdBOUQsIDB4MzU3RjdGQ0UgKi8KKyAgNC4xMjA1MTg1NDMwNzM3ODU2MjIyNWUrMDIsIC8qIDB4NDA3OUMwRDQsIDB4NjUyRUE1OTAgKi8KKyAgMy44NzQ3NDUzODkxMzk2MDUzMjIyN2UrMDMsIC8qIDB4NDBBRTQ1N0QsIDB4QTNBNTMyQ0MgKi8KKyAgNy45MTQ0Nzk1NDAzMTg5MTczMTU3NGUrMDMsIC8qIDB4NDBCRUVBN0EsIDB4QzMyNzgyREQgKi8KK307CitzdGF0aWMgY29uc3QgZG91YmxlIHBzOFs1XSA9IHsKKyAgMS4xNDIwNzM3MDM3NTY3ODQwODQzNmUrMDIsIC8qIDB4NDA1QzhENDUsIDB4OEU2NTZDQUMgKi8KKyAgMy42NTA5MzA4MzQyMDg1MzQ2MzM5NGUrMDMsIC8qIDB4NDBBQzg1REMsIDB4OTY0RDI3NEYgKi8KKyAgMy42OTU2MjA2MDI2OTAzMzQ2MzU1NWUrMDQsIC8qIDB4NDBFMjBCODYsIDB4OTdDNUJCN0YgKi8KKyAgOS43NjAyNzkzNTkzNDk1MDgwMTMxMWUrMDQsIC8qIDB4NDBGN0Q0MkMsIDB4QjI4RjE3QkIgKi8KKyAgMy4wODA0MjcyMDYyNzg4ODgxMTU3OGUrMDQsIC8qIDB4NDBERTE1MTEsIDB4Njk3QTBCMkQgKi8KK307CisKK3N0YXRpYyBjb25zdCBkb3VibGUgcHI1WzZdID0geyAvKiBmb3IgeCBpbiBbOCw0LjU0NTRdPTEvWzAuMTI1LDAuMjIwMDFdICovCisgIDEuMzE5OTA1MTk1NTYyNDM1MjI3NDllLTExLCAvKiAweDNEQUQwNjY3LCAweERBRTFDQTdEICovCisgIDEuMTcxODc0OTMxOTA2MTQwOTc2MzhlLTAxLCAvKiAweDNGQkRGRkZGLCAweEUyQzEwMDQzICovCisgIDYuODAyNzUxMjc4Njg0MzI4NzE3MzZlKzAwLCAvKiAweDQwMUIzNjA0LCAweDZFNjMxNUUzICovCisgIDEuMDgzMDgxODI5OTAxODkxMDk3NzNlKzAyLCAvKiAweDQwNUIxM0I5LCAweDQ1MjYwMkVEICovCisgIDUuMTc2MzYxMzk1MzMxOTk3NTI4MDVlKzAyLCAvKiAweDQwODAyRDE2LCAweEQwNTJENjQ5ICovCisgIDUuMjg3MTUyMDEzNjMzMzc1NDE4MDdlKzAyLCAvKiAweDQwODA4NUI4LCAweEJCN0UwQ0I3ICovCit9Oworc3RhdGljIGNvbnN0IGRvdWJsZSBwczVbNV0gPSB7CisgIDUuOTI4MDU5ODcyMjExMzEzMzE5MjFlKzAxLCAvKiAweDQwNERBM0VBLCAweEE4QUY2MzNEICovCisgIDkuOTE0MDE0MTg3MzM2MTQzNzc3NDNlKzAyLCAvKiAweDQwOEVGQjM2LCAweDFCMDY2NzAxICovCisgIDUuMzUzMjY2OTUyOTE0ODc5NzY2NDdlKzAzLCAvKiAweDQwQjRFOTQ0LCAweDU3MDZCNkZCICovCisgIDcuODQ0NjkwMzE3NDk1NTEyMzE3NjllKzAzLCAvKiAweDQwQkVBNEIwLCAweEI4QTVCQjE1ICovCisgIDEuNTA0MDQ2ODg4MTAzNjEwNjI2NzllKzAzLCAvKiAweDQwOTc4MDMwLCAweDAzNkY1RTUxICovCit9OworCitzdGF0aWMgY29uc3QgZG91YmxlIHByM1s2XSA9IHsKKyAgMy4wMjUwMzkxNjEzNzM3MzYxODAyNGUtMDksIC8qIDB4M0UyOUZDMjEsIDB4QTdBRDlFREQgKi8KKyAgMS4xNzE4Njg2NTU2NzI1MzU5MjQ5MWUtMDEsIC8qIDB4M0ZCREZGRjUsIDB4NUIyMUQxN0IgKi8KKyAgMy45MzI5Nzc1MDAzMzMxNTY0MDY1MGUrMDAsIC8qIDB4NDAwRjc2QkMsIDB4RTg1RUFEOEEgKi8KKyAgMy41MTE5NDAzNTU5MTYzNjkzMjczNmUrMDEsIC8qIDB4NDA0MThGNDgsIDB4OURBNkQxMjkgKi8KKyAgOS4xMDU1MDExMDc1MDc4MTI3MTkxOGUrMDEsIC8qIDB4NDA1NkMzODUsIDB4NEQyQzE4MzcgKi8KKyAgNC44NTU5MDY4NTE5NzM2NDkxOTY0NWUrMDEsIC8qIDB4NDA0ODQ3OEYsIDB4OEVBODNFRTUgKi8KK307CitzdGF0aWMgY29uc3QgZG91YmxlIHBzM1s1XSA9IHsKKyAgMy40NzkxMzA5NTAwMTI1MTUxOTk4OWUrMDEsIC8qIDB4NDA0MTY1NDksIDB4QTEzNDA2OUMgKi8KKyAgMy4zNjc2MjQ1ODc0NzgyNTc0Njc0MWUrMDIsIC8qIDB4NDA3NTBDMzMsIDB4MDdGMUE3NUYgKi8KKyAgMS4wNDY4NzEzOTk3NTc3NTEzMDU1MWUrMDMsIC8qIDB4NDA5MDVCN0MsIDB4NTAzN0Q1MjMgKi8KKyAgOC45MDgxMTM0NjM5ODI1NjQzMjYyMmUrMDIsIC8qIDB4NDA4QkQ2N0QsIDB4QTMyRTMxRTkgKi8KKyAgMS4wMzc4NzkzMjQzOTYzOTI3NzUwNGUrMDIsIC8qIDB4NDA1OUYyNkQsIDB4N0MyRUVENTMgKi8KK307CisKK3N0YXRpYyBjb25zdCBkb3VibGUgcHIyWzZdID0gey8qIGZvciB4IGluIFsyLjg1NzAsMl09MS9bMC4zNDk5LDAuNV0gKi8KKyAgMS4wNzcxMDgzMDEwNjg3Mzc0MzA4MmUtMDcsIC8qIDB4M0U3Q0U5RDQsIDB4RjY1NTQ0RjQgKi8KKyAgMS4xNzE3NjIxOTQ2MjY4MzM0ODA5NGUtMDEsIC8qIDB4M0ZCREZGNDIsIDB4QkU3NjBEODMgKi8KKyAgMi4zNjg1MTQ5NjY2NzYwODc4NTE3NGUrMDAsIC8qIDB4NDAwMkYyQjcsIDB4Rjk4RkFFQzAgKi8KKyAgMS4yMjQyNjEwOTE0ODI2MTIzMjkxN2UrMDEsIC8qIDB4NDAyODdDMzcsIDB4N0Y3MUE5NjQgKi8KKyAgMS43NjkzOTcxMTI3MTY4NzcyNzM5MGUrMDEsIC8qIDB4NDAzMUIxQTgsIDB4MTc3RjhFRTIgKi8KKyAgNS4wNzM1MjMxMjU4ODgxODQ5OTI1MGUrMDAsIC8qIDB4NDAxNDRCNDksIDB4QTU3NEMxRkUgKi8KK307CitzdGF0aWMgY29uc3QgZG91YmxlIHBzMls1XSA9IHsKKyAgMi4xNDM2NDg1OTM2MzgyMTQwOTQ4OGUrMDEsIC8qIDB4NDAzNTZGQkQsIDB4OEFENUVDREMgKi8KKyAgMS4yNTI5MDIyNzE2ODQwMjc1MTA5MGUrMDIsIC8qIDB4NDA1RjUyOTMsIDB4MTRGOTJDRDUgKi8KKyAgMi4zMjI3NjQ2OTA1NzE2MjgxMzY2OWUrMDIsIC8qIDB4NDA2RDA4RDgsIDB4RDVBMkRCRDkgKi8KKyAgMS4xNzY3OTM3MzI4NzE0NzEwMDc2OGUrMDIsIC8qIDB4NDA1RDZCN0EsIDB4REExODg0QTkgKi8KKyAgOC4zNjQ2Mzg5MzM3MTYxODI4MzM2OGUrMDAsIC8qIDB4NDAyMEJBQjEsIDB4RjQ0RTUxOTIgKi8KK307CisKKwlzdGF0aWMgZG91YmxlIHBvbmUoZG91YmxlIHgpCit7CisJY29uc3QgZG91YmxlICpwLCpxOworCWRvdWJsZSB6LHIsczsKKyAgICAgICAgaW50MzJfdCBpeDsKKwlHRVRfSElHSF9XT1JEKGl4LHgpOworCWl4ICY9IDB4N2ZmZmZmZmY7CisgICAgICAgIGlmKGl4Pj0weDQwMjAwMDAwKSAgICAge3AgPSBwcjg7IHE9IHBzODt9CisgICAgICAgIGVsc2UgaWYoaXg+PTB4NDAxMjJFOEIpe3AgPSBwcjU7IHE9IHBzNTt9CisgICAgICAgIGVsc2UgaWYoaXg+PTB4NDAwNkRCNkQpe3AgPSBwcjM7IHE9IHBzMzt9CisgICAgICAgIGVsc2UgaWYoaXg+PTB4NDAwMDAwMDApe3AgPSBwcjI7IHE9IHBzMjt9CisgICAgICAgIHogPSBvbmUvKHgqeCk7CisgICAgICAgIHIgPSBwWzBdK3oqKHBbMV0reioocFsyXSt6KihwWzNdK3oqKHBbNF0reipwWzVdKSkpKTsKKyAgICAgICAgcyA9IG9uZSt6KihxWzBdK3oqKHFbMV0reioocVsyXSt6KihxWzNdK3oqcVs0XSkpKSk7CisgICAgICAgIHJldHVybiBvbmUrIHIvczsKK30KKwkJCisKKy8qIEZvciB4ID49IDgsIHRoZSBhc3ltcHRvdGljIGV4cGFuc2lvbnMgb2YgcW9uZSBpcworICoJMy84IHMgLSAxMDUvMTAyNCBzXjMgLSAuLi4sIHdoZXJlIHMgPSAxL3guCisgKiBXZSBhcHByb3hpbWF0ZSBwb25lIGJ5CisgKiAJcW9uZSh4KSA9IHMqKDAuMzc1ICsgKFIvUykpCisgKiB3aGVyZSAgUiA9IHFyMSpzXjIgKyBxcjIqc140ICsgLi4uICsgcXI1KnNeMTAKKyAqIAkgIFMgPSAxICsgcXMxKnNeMiArIC4uLiArIHFzNipzXjEyCisgKiBhbmQKKyAqCXwgcW9uZSh4KS9zIC0wLjM3NS1SL1MgfCA8PSAyICAqKiAoIC02MS4xMykKKyAqLworCitzdGF0aWMgY29uc3QgZG91YmxlIHFyOFs2XSA9IHsgLyogZm9yIHggaW4gW2luZiwgOF09MS9bMCwwLjEyNV0gKi8KKyAgMC4wMDAwMDAwMDAwMDAwMDAwMDAwMGUrMDAsIC8qIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgKi8KKyAtMS4wMjUzOTA2MjQ5OTk5MjcxNDE2MWUtMDEsIC8qIDB4QkZCQTNGRkYsIDB4RkZGRkZERjMgKi8KKyAtMS42MjcxNzUzNDU0NDU4OTk4Nzg4OGUrMDEsIC8qIDB4QzAzMDQ1OTEsIDB4QTI2Nzc5RjcgKi8KKyAtNy41OTYwMTcyMjUxMzk1MDEwNzg5NmUrMDIsIC8qIDB4QzA4N0JDRDAsIDB4NTNFNEI1NzYgKi8KKyAtMS4xODQ5ODA2NjcwMjQyOTU4NzE2N2UrMDQsIC8qIDB4QzBDNzI0RTcsIDB4NDBGODc0MTUgKi8KKyAtNC44NDM4NTEyNDI4NTc1MDM1MzAxMGUrMDQsIC8qIDB4QzBFN0E2RDAsIDB4NjVEMDlDNkEgKi8KK307CitzdGF0aWMgY29uc3QgZG91YmxlIHFzOFs2XSA9IHsKKyAgMS42MTM5NTM2OTcwMDcyMjkwOTU1NmUrMDIsIC8qIDB4NDA2NDJDQTYsIDB4REU1QkNERTUgKi8KKyAgNy44MjUzODU5OTkyMzM0ODQ2NTM4MWUrMDMsIC8qIDB4NDBCRTkxNjIsIDB4RDBEODg0MTkgKi8KKyAgMS4zMzg3NTMzNjI4NzI0OTU3ODE2M2UrMDUsIC8qIDB4NDEwMDU3OUEsIDB4QjBCNzVFOTggKi8KKyAgNy4xOTY1NzcyMzY4MzI0MDkzOTg2M2UrMDUsIC8qIDB4NDEyNUY2NTMsIDB4NzI4NjlDMTkgKi8KKyAgNi42NjYwMTIzMjYxNzc3NjM3NTI2NGUrMDUsIC8qIDB4NDEyNDU3RDIsIDB4NzcxOUFENUMgKi8KKyAtMi45NDQ5MDI2NDMwMzgzNDY0MzIxNWUrMDUsIC8qIDB4QzExMUY5NjksIDB4MEVBNUFBMTggKi8KK307CisKK3N0YXRpYyBjb25zdCBkb3VibGUgcXI1WzZdID0geyAvKiBmb3IgeCBpbiBbOCw0LjU0NTRdPTEvWzAuMTI1LDAuMjIwMDFdICovCisgLTIuMDg5Nzk5MzExNDE3NjQxMDQyOTdlLTExLCAvKiAweEJEQjZGQTQzLCAweDFBQTFBMDk4ICovCisgLTEuMDI1MzkwNTAyNDEzNzU0MjYyMzFlLTAxLCAvKiAweEJGQkEzRkZGLCAweENCNTk3RkVGICovCisgLTguMDU2NDQ4MjgxMjM5MzYwMjk4NDBlKzAwLCAvKiAweEMwMjAxQ0U2LCAweENBMDNBRDRCICovCisgLTEuODM2Njk2MDc0NzQ4ODgzODAyMzllKzAyLCAvKiAweEMwNjZGNTZELCAweDZDQTdCOUIwICovCisgLTEuMzczMTkzNzYwNjU1MDgxNjMyNjVlKzAzLCAvKiAweEMwOTU3NEM2LCAweDY5MzE3MzRGICovCisgLTIuNjEyNDQ0NDA0NTMyMTU2NTY4MTdlKzAzLCAvKiAweEMwQTQ2OEUzLCAweDg4RkRBNzlEICovCit9Oworc3RhdGljIGNvbnN0IGRvdWJsZSBxczVbNl0gPSB7CisgIDguMTI3NjU1MDEzODQzMzU3Nzc4NTdlKzAxLCAvKiAweDQwNTQ1MUIyLCAweEZGNUExMUIyICovCisgIDEuOTkxNzk4NzM0NjA0ODU5NjQ2NDJlKzAzLCAvKiAweDQwOUYxRjMxLCAweEU3N0JGODM5ICovCisgIDEuNzQ2ODQ4NTE5MjQ5MDg5MDc2NzdlKzA0LCAvKiAweDQwRDEwRjFGLCAweDBENjRDRTI5ICovCisgIDQuOTg1MTQyNzA5MTAzNTIyNzkzMTZlKzA0LCAvKiAweDQwRTg1NzZELCAweEFBQkFEMTk3ICovCisgIDIuNzk0ODA3NTE2Mzg5MTgxMTgyNjBlKzA0LCAvKiAweDQwREI0QjA0LCAweENGN0MzNjRCICovCisgLTQuNzE5MTgzNTQ3OTUxMjg0NzA4NjllKzAzLCAvKiAweEMwQjI2RjJFLCAweEZDRkZBMDA0ICovCit9OworCitzdGF0aWMgY29uc3QgZG91YmxlIHFyM1s2XSA9IHsKKyAtNS4wNzgzMTIyNjQ2MTc2NjU2MTM2OWUtMDksIC8qIDB4QkUzNUNGQTksIDB4RDM4RkM4NEYgKi8KKyAtMS4wMjUzNzgyOTgyMDgzNzA4OTc0NWUtMDEsIC8qIDB4QkZCQTNGRUIsIDB4NTFBRUVENTQgKi8KKyAtNC42MTAxMTU4MTEzOTQ3MzQwMzExM2UrMDAsIC8qIDB4QzAxMjcwQzIsIDB4MzMwMkQ5RkYgKi8KKyAtNS43ODQ3MjIxNjU2Mjc4MzY0MzIxMmUrMDEsIC8qIDB4QzA0Q0VDNzEsIDB4QzI1RDE2REEgKi8KKyAtMi4yODI0NDU0MDczNzYzMTY5NTAzOGUrMDIsIC8qIDB4QzA2Qzg3RDMsIDB4NDcxOEQ1NUYgKi8KKyAtMi4xOTIxMDEyODQ3ODkwOTMyNTYyMmUrMDIsIC8qIDB4QzA2QjY2QjksIDB4NUY1QzFCRjYgKi8KK307CitzdGF0aWMgY29uc3QgZG91YmxlIHFzM1s2XSA9IHsKKyAgNC43NjY1MTU1MDMyMzcyOTUwOTI3M2UrMDEsIC8qIDB4NDA0N0Q1MjMsIDB4Q0NEMzY3RTQgKi8KKyAgNi43Mzg2NTExMjY3NjY5OTcwOTQ4MmUrMDIsIC8qIDB4NDA4NTBFRUIsIDB4QzAzMUVFM0UgKi8KKyAgMy4zODAxNTI4NjY3OTUyNjM0MzUwNWUrMDMsIC8qIDB4NDBBQTY4NEUsIDB4NDQ4RTdDOUEgKi8KKyAgNS41NDc3MjkwOTcyMDcyMjc4MjM2N2UrMDMsIC8qIDB4NDBCNUFCQkEsIDB4QTYxRDU0QTYgKi8KKyAgMS45MDMxMTkxOTMzODgxMDc5ODc2M2UrMDMsIC8qIDB4NDA5REJDN0EsIDB4MERENERGNEIgKi8KKyAtMS4zNTIwMTE5MTQ0NDMwNzM0MDgxN2UrMDIsIC8qIDB4QzA2MEU2NzAsIDB4MjkwQTMxMUYgKi8KK307CisKK3N0YXRpYyBjb25zdCBkb3VibGUgcXIyWzZdID0gey8qIGZvciB4IGluIFsyLjg1NzAsMl09MS9bMC4zNDk5LDAuNV0gKi8KKyAtMS43ODM4MTcyNzUxMDk1ODg2NTU3MmUtMDcsIC8qIDB4QkU4N0YxMjYsIDB4NDRDNjI2RDIgKi8KKyAtMS4wMjUxNzA0MjYwNzk4NTU1MzQ2MGUtMDEsIC8qIDB4QkZCQTNFOEUsIDB4OTE0OEIwMTAgKi8KKyAtMi43NTIyMDU2ODI3ODE4NzQ2MDcyMGUrMDAsIC8qIDB4QzAwNjA0ODQsIDB4NjlCQjRFREEgKi8KKyAtMS45NjYzNjE2MjY0MzcwMzcyMDIyMWUrMDEsIC8qIDB4QzAzM0E5RTIsIDB4QzE2ODkwN0YgKi8KKyAtNC4yMzI1MzEzMzM3MjgzMDQ5MDA4OWUrMDEsIC8qIDB4QzA0NTI5QTMsIDB4REUxMDRBQUEgKi8KKyAtMi4xMzcxOTIxMTcwMzcwNDA2MTczM2UrMDEsIC8qIDB4QzAzNTVGMzYsIDB4MzlDRjZFNTIgKi8KK307CitzdGF0aWMgY29uc3QgZG91YmxlIHFzMls2XSA9IHsKKyAgMi45NTMzMzYyOTA2MDUyMzg1NDU0OGUrMDEsIC8qIDB4NDAzRDg4OEEsIDB4NzhBRTY0RkYgKi8KKyAgMi41Mjk4MTU0OTk4MjE5MDUyOTEzNmUrMDIsIC8qIDB4NDA2RjlGNjgsIDB4REI4MjFDQkEgKi8KKyAgNy41NzUwMjgzNDg2ODY0NTQzNjQ3MmUrMDIsIC8qIDB4NDA4N0FDMDUsIDB4Q0U0OUEwRjcgKi8KKyAgNy4zOTM5MzIwNTMyMDQ2NzI0NTY1NmUrMDIsIC8qIDB4NDA4NzFCMjUsIDB4NDhENEMwMjkgKi8KKyAgMS41NTk0OTAwMzMzNjY2NjEyMzY4N2UrMDIsIC8qIDB4NDA2MzdFNUUsIDB4M0MzRUQ4RDQgKi8KKyAtNC45NTk0OTg5ODgyMjYyODIxMDEyN2UrMDAsIC8qIDB4QzAxM0Q2ODYsIDB4RTcxQkU4NkIgKi8KK307CisKKwlzdGF0aWMgZG91YmxlIHFvbmUoZG91YmxlIHgpCit7CisJY29uc3QgZG91YmxlICpwLCpxOworCWRvdWJsZSAgcyxyLHo7CisJaW50MzJfdCBpeDsKKwlHRVRfSElHSF9XT1JEKGl4LHgpOworCWl4ICY9IDB4N2ZmZmZmZmY7CisJaWYoaXg+PTB4NDAyMDAwMDApICAgICB7cCA9IHFyODsgcT0gcXM4O30KKwllbHNlIGlmKGl4Pj0weDQwMTIyRThCKXtwID0gcXI1OyBxPSBxczU7fQorCWVsc2UgaWYoaXg+PTB4NDAwNkRCNkQpe3AgPSBxcjM7IHE9IHFzMzt9CisJZWxzZSBpZihpeD49MHg0MDAwMDAwMCl7cCA9IHFyMjsgcT0gcXMyO30KKwl6ID0gb25lLyh4KngpOworCXIgPSBwWzBdK3oqKHBbMV0reioocFsyXSt6KihwWzNdK3oqKHBbNF0reipwWzVdKSkpKTsKKwlzID0gb25lK3oqKHFbMF0reioocVsxXSt6KihxWzJdK3oqKHFbM10reioocVs0XSt6KnFbNV0pKSkpKTsKKwlyZXR1cm4gKC4zNzUgKyByL3MpL3g7Cit9CmRpZmYgLS1naXQgYS9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL2VfajFmLmMgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL2VfajFmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODhlMmQ4MwotLS0gL2Rldi9udWxsCisrKyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvZV9qMWYuYwpAQCAtMCwwICsxLDMzMyBAQAorLyogZV9qMWYuYyAtLSBmbG9hdCB2ZXJzaW9uIG9mIGVfajEuYy4KKyAqIENvbnZlcnNpb24gdG8gZmxvYXQgYnkgSWFuIExhbmNlIFRheWxvciwgQ3lnbnVzIFN1cHBvcnQsIGlhbkBjeWdudXMuY29tLgorICovCisKKy8qCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBDb3B5cmlnaHQgKEMpIDE5OTMgYnkgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIERldmVsb3BlZCBhdCBTdW5Qcm8sIGEgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBidXNpbmVzcy4KKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKKyAqIHNvZnR3YXJlIGlzIGZyZWVseSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoaXMgbm90aWNlCisgKiBpcyBwcmVzZXJ2ZWQuCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorX19GQlNESUQoIiRGcmVlQlNEJCIpOworCisjaW5jbHVkZSAibWF0aC5oIgorI2luY2x1ZGUgIm1hdGhfcHJpdmF0ZS5oIgorCitzdGF0aWMgZmxvYXQgcG9uZWYoZmxvYXQpLCBxb25lZihmbG9hdCk7CisKK3N0YXRpYyBjb25zdCBmbG9hdAoraHVnZSAgICA9IDFlMzAsCitvbmUJPSAxLjAsCitpbnZzcXJ0cGk9ICA1LjY0MTg5NjEyODdlLTAxLCAvKiAweDNmMTA2ZWJiICovCit0cGkgICAgICA9ICA2LjM2NjE5NzQ2NjllLTAxLCAvKiAweDNmMjJmOTgzICovCisJLyogUjAvUzAgb24gWzAsMl0gKi8KK3IwMCAgPSAtNi4yNTAwMDAwMDAwZS0wMiwgLyogMHhiZDgwMDAwMCAqLworcjAxICA9ICAxLjQwNzA1NjY5NzZlLTAzLCAvKiAweDNhYjg2Y2ZkICovCityMDIgID0gLTEuNTk5NTU2MzQ0NGUtMDUsIC8qIDB4Yjc4NjJlMzYgKi8KK3IwMyAgPSAgNC45NjcyNzk5MjA3ZS0wOCwgLyogMHgzMzU1NTdkMiAqLworczAxICA9ICAxLjkxNTM3NjA3NDZlLTAyLCAvKiAweDNjOWNlODU5ICovCitzMDIgID0gIDEuODU5NDY3ODg0MWUtMDQsIC8qIDB4Mzk0MmZhYjYgKi8KK3MwMyAgPSAgMS4xNzcxODQ2ODU3ZS0wNiwgLyogMHgzNTlkZmZjMiAqLworczA0ICA9ICA1LjA0NjM2MjQzOTBlLTA5LCAvKiAweDMxYWQ2NDQ2ICovCitzMDUgID0gIDEuMjM1NDIyNzAxNmUtMTE7IC8qIDB4MmQ1OTU2N2UgKi8KKworc3RhdGljIGNvbnN0IGZsb2F0IHplcm8gICAgPSAwLjA7CisKK2Zsb2F0CitfX2llZWU3NTRfajFmKGZsb2F0IHgpCit7CisJZmxvYXQgeiwgcyxjLHNzLGNjLHIsdSx2LHk7CisJaW50MzJfdCBoeCxpeDsKKworCUdFVF9GTE9BVF9XT1JEKGh4LHgpOworCWl4ID0gaHgmMHg3ZmZmZmZmZjsKKwlpZihpeD49MHg3ZjgwMDAwMCkgcmV0dXJuIG9uZS94OworCXkgPSBmYWJzZih4KTsKKwlpZihpeCA+PSAweDQwMDAwMDAwKSB7CS8qIHx4fCA+PSAyLjAgKi8KKwkJcyA9IHNpbmYoeSk7CisJCWMgPSBjb3NmKHkpOworCQlzcyA9IC1zLWM7CisJCWNjID0gcy1jOworCQlpZihpeDwweDdmMDAwMDAwKSB7ICAvKiBtYWtlIHN1cmUgeSt5IG5vdCBvdmVyZmxvdyAqLworCQkgICAgeiA9IGNvc2YoeSt5KTsKKwkJICAgIGlmICgocypjKT56ZXJvKSBjYyA9IHovc3M7CisJCSAgICBlbHNlIAkgICAgc3MgPSB6L2NjOworCQl9CisJLyoKKwkgKiBqMSh4KSA9IDEvc3FydChwaSkgKiAoUCgxLHgpKmNjIC0gUSgxLHgpKnNzKSAvIHNxcnQoeCkKKwkgKiB5MSh4KSA9IDEvc3FydChwaSkgKiAoUCgxLHgpKnNzICsgUSgxLHgpKmNjKSAvIHNxcnQoeCkKKwkgKi8KKwkJaWYoaXg+MHg4MDAwMDAwMCkgeiA9IChpbnZzcXJ0cGkqY2MpL3NxcnRmKHkpOworCQllbHNlIHsKKwkJICAgIHUgPSBwb25lZih5KTsgdiA9IHFvbmVmKHkpOworCQkgICAgeiA9IGludnNxcnRwaSoodSpjYy12KnNzKS9zcXJ0Zih5KTsKKwkJfQorCQlpZihoeDwwKSByZXR1cm4gLXo7CisJCWVsc2UgIAkgcmV0dXJuICB6OworCX0KKwlpZihpeDwweDMyMDAwMDAwKSB7CS8qIHx4fDwyKiotMjcgKi8KKwkgICAgaWYoaHVnZSt4Pm9uZSkgcmV0dXJuIChmbG9hdCkwLjUqeDsvKiBpbmV4YWN0IGlmIHghPTAgbmVjZXNzYXJ5ICovCisJfQorCXogPSB4Kng7CisJciA9ICB6KihyMDAreioocjAxK3oqKHIwMit6KnIwMykpKTsKKwlzID0gIG9uZSt6KihzMDEreiooczAyK3oqKHMwMyt6KihzMDQreipzMDUpKSkpOworCXIgKj0geDsKKwlyZXR1cm4oeCooZmxvYXQpMC41K3Ivcyk7Cit9CisKK3N0YXRpYyBjb25zdCBmbG9hdCBVMFs1XSA9IHsKKyAtMS45NjA1NzA5NjEyZS0wMSwgLyogMHhiZTQ4YzMzMSAqLworICA1LjA0NDM4NzI4MDllLTAyLCAvKiAweDNkNGU5ZTNjICovCisgLTEuOTEyNTY4OTI4N2UtMDMsIC8qIDB4YmFmYWFmMmEgKi8KKyAgMi4zNTI1MjU5MTY2ZS0wNSwgLyogMHgzN2M1NTgxYyAqLworIC05LjE5MDk5MTc4OTllLTA4LCAvKiAweGIzYzU2MDAzICovCit9Oworc3RhdGljIGNvbnN0IGZsb2F0IFYwWzVdID0geworICAxLjk5MTY3MzE4NjRlLTAyLCAvKiAweDNjYTMyODZhICovCisgIDIuMDI1NTI1NzU1MGUtMDQsIC8qIDB4Mzk1NDY0NGIgKi8KKyAgMS4zNTYwODc5Nzc5ZS0wNiwgLyogMHgzNWI2MDJkNCAqLworICA2LjIyNzQxNDU4NDBlLTA5LCAvKiAweDMxZDVmOGViICovCisgIDEuNjY1NTkyNDkwM2UtMTEsIC8qIDB4MmQ5MjgxY2YgKi8KK307CisKK2Zsb2F0CitfX2llZWU3NTRfeTFmKGZsb2F0IHgpCit7CisJZmxvYXQgeiwgcyxjLHNzLGNjLHUsdjsKKwlpbnQzMl90IGh4LGl4OworCisJR0VUX0ZMT0FUX1dPUkQoaHgseCk7CisgICAgICAgIGl4ID0gMHg3ZmZmZmZmZiZoeDsKKyAgICAvKiBpZiBZMShOYU4pIGlzIE5hTiwgWTEoLWluZikgaXMgTmFOLCBZMShpbmYpIGlzIDAgKi8KKwlpZihpeD49MHg3ZjgwMDAwMCkgcmV0dXJuICBvbmUvKHgreCp4KTsKKyAgICAgICAgaWYoaXg9PTApIHJldHVybiAtb25lL3plcm87CisgICAgICAgIGlmKGh4PDApIHJldHVybiB6ZXJvL3plcm87CisgICAgICAgIGlmKGl4ID49IDB4NDAwMDAwMDApIHsgIC8qIHx4fCA+PSAyLjAgKi8KKyAgICAgICAgICAgICAgICBzID0gc2luZih4KTsKKyAgICAgICAgICAgICAgICBjID0gY29zZih4KTsKKyAgICAgICAgICAgICAgICBzcyA9IC1zLWM7CisgICAgICAgICAgICAgICAgY2MgPSBzLWM7CisgICAgICAgICAgICAgICAgaWYoaXg8MHg3ZjAwMDAwMCkgeyAgLyogbWFrZSBzdXJlIHgreCBub3Qgb3ZlcmZsb3cgKi8KKyAgICAgICAgICAgICAgICAgICAgeiA9IGNvc2YoeCt4KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKChzKmMpPnplcm8pIGNjID0gei9zczsKKyAgICAgICAgICAgICAgICAgICAgZWxzZSAgICAgICAgICAgIHNzID0gei9jYzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgIC8qIHkxKHgpID0gc3FydCgyLyhwaSp4KSkqKHAxKHgpKnNpbih4MCkrcTEoeCkqY29zKHgwKSkKKyAgICAgICAgICogd2hlcmUgeDAgPSB4LTNwaS80CisgICAgICAgICAqICAgICAgQmV0dGVyIGZvcm11bGE6CisgICAgICAgICAqICAgICAgICAgICAgICBjb3MoeDApID0gY29zKHgpY29zKDNwaS80KStzaW4oeClzaW4oM3BpLzQpCisgICAgICAgICAqICAgICAgICAgICAgICAgICAgICAgID0gIDEvc3FydCgyKSAqIChzaW4oeCkgLSBjb3MoeCkpCisgICAgICAgICAqICAgICAgICAgICAgICBzaW4oeDApID0gc2luKHgpY29zKDNwaS80KS1jb3MoeClzaW4oM3BpLzQpCisgICAgICAgICAqICAgICAgICAgICAgICAgICAgICAgID0gLTEvc3FydCgyKSAqIChjb3MoeCkgKyBzaW4oeCkpCisgICAgICAgICAqIFRvIGF2b2lkIGNhbmNlbGxhdGlvbiwgdXNlCisgICAgICAgICAqICAgICAgICAgICAgICBzaW4oeCkgKy0gY29zKHgpID0gLWNvcygyeCkvKHNpbih4KSAtKyBjb3MoeCkpCisgICAgICAgICAqIHRvIGNvbXB1dGUgdGhlIHdvcnNlIG9uZS4KKyAgICAgICAgICovCisgICAgICAgICAgICAgICAgaWYoaXg+MHg0ODAwMDAwMCkgeiA9IChpbnZzcXJ0cGkqc3MpL3NxcnRmKHgpOworICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICB1ID0gcG9uZWYoeCk7IHYgPSBxb25lZih4KTsKKyAgICAgICAgICAgICAgICAgICAgeiA9IGludnNxcnRwaSoodSpzcyt2KmNjKS9zcXJ0Zih4KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIHo7CisgICAgICAgIH0KKyAgICAgICAgaWYoaXg8PTB4MjQ4MDAwMDApIHsgICAgLyogeCA8IDIqKi01NCAqLworICAgICAgICAgICAgcmV0dXJuKC10cGkveCk7CisgICAgICAgIH0KKyAgICAgICAgeiA9IHgqeDsKKyAgICAgICAgdSA9IFUwWzBdK3oqKFUwWzFdK3oqKFUwWzJdK3oqKFUwWzNdK3oqVTBbNF0pKSk7CisgICAgICAgIHYgPSBvbmUreiooVjBbMF0reiooVjBbMV0reiooVjBbMl0reiooVjBbM10reipWMFs0XSkpKSk7CisgICAgICAgIHJldHVybih4Kih1L3YpICsgdHBpKihfX2llZWU3NTRfajFmKHgpKl9faWVlZTc1NF9sb2dmKHgpLW9uZS94KSk7Cit9CisKKy8qIEZvciB4ID49IDgsIHRoZSBhc3ltcHRvdGljIGV4cGFuc2lvbnMgb2YgcG9uZSBpcworICoJMSArIDE1LzEyOCBzXjIgLSA0NzI1LzJeMTUgc140IC0gLi4uLAl3aGVyZSBzID0gMS94LgorICogV2UgYXBwcm94aW1hdGUgcG9uZSBieQorICogCXBvbmUoeCkgPSAxICsgKFIvUykKKyAqIHdoZXJlICBSID0gcHIwICsgcHIxKnNeMiArIHByMipzXjQgKyAuLi4gKyBwcjUqc14xMAorICogCSAgUyA9IDEgKyBwczAqc14yICsgLi4uICsgcHM0KnNeMTAKKyAqIGFuZAorICoJfCBwb25lKHgpLTEtUi9TIHwgPD0gMiAgKiogKCAtNjAuMDYpCisgKi8KKworc3RhdGljIGNvbnN0IGZsb2F0IHByOFs2XSA9IHsgLyogZm9yIHggaW4gW2luZiwgOF09MS9bMCwwLjEyNV0gKi8KKyAgMC4wMDAwMDAwMDAwZSswMCwgLyogMHgwMDAwMDAwMCAqLworICAxLjE3MTg3NTAwMDBlLTAxLCAvKiAweDNkZjAwMDAwICovCisgIDEuMzIzOTQ4MDk3MmUrMDEsIC8qIDB4NDE1M2Q0ZWEgKi8KKyAgNC4xMjA1MTg0OTM3ZSswMiwgLyogMHg0M2NlMDZhMyAqLworICAzLjg3NDc0NTM2MTNlKzAzLCAvKiAweDQ1NzIyYmVkICovCisgIDcuOTE0NDc5NDkyMmUrMDMsIC8qIDB4NDVmNzUzZDYgKi8KK307CitzdGF0aWMgY29uc3QgZmxvYXQgcHM4WzVdID0geworICAxLjE0MjA3MzY2OTRlKzAyLCAvKiAweDQyZTQ2YTJjICovCisgIDMuNjUwOTMwOTA4MmUrMDMsIC8qIDB4NDU2NDJlZTUgKi8KKyAgMy42OTU2MjA3MDMxZSswNCwgLyogMHg0NzEwNWMzNSAqLworICA5Ljc2MDI3OTY4NzVlKzA0LCAvKiAweDQ3YmVhMTY2ICovCisgIDMuMDgwNDI3MTQ4NGUrMDQsIC8qIDB4NDZmMGE4OGIgKi8KK307CisKK3N0YXRpYyBjb25zdCBmbG9hdCBwcjVbNl0gPSB7IC8qIGZvciB4IGluIFs4LDQuNTQ1NF09MS9bMC4xMjUsMC4yMjAwMV0gKi8KKyAgMS4zMTk5MDUyMDk0ZS0xMSwgLyogMHgyZDY4MzMzZiAqLworICAxLjE3MTg3NDkyNTVlLTAxLCAvKiAweDNkZWZmZmZmICovCisgIDYuODAyNzUxMDY0M2UrMDAsIC8qIDB4NDBkOWIwMjMgKi8KKyAgMS4wODMwODE4MTc2ZSswMiwgLyogMHg0MmQ4OWRjYSAqLworICA1LjE3NjM2MTY5NDNlKzAyLCAvKiAweDQ0MDE2OGI3ICovCisgIDUuMjg3MTUyMDk5NmUrMDIsIC8qIDB4NDQwNDJkYzYgKi8KK307CitzdGF0aWMgY29uc3QgZmxvYXQgcHM1WzVdID0geworICA1LjkyODA1OTc2ODdlKzAxLCAvKiAweDQyNmQxZjU1ICovCisgIDkuOTE0MDE0MjgyMmUrMDIsIC8qIDB4NDQ3N2Q5YjEgKi8KKyAgNS4zNTMyNjcwODk4ZSswMywgLyogMHg0NWE3NGEyMyAqLworICA3Ljg0NDY5MDQyOTdlKzAzLCAvKiAweDQ1ZjUyNTg2ICovCisgIDEuNTA0MDQ2ODc1MGUrMDMsIC8qIDB4NDRiYzAxODAgKi8KK307CisKK3N0YXRpYyBjb25zdCBmbG9hdCBwcjNbNl0gPSB7CisgIDMuMDI1MDM5MTA4MWUtMDksIC8qIDB4MzE0ZmUxMGQgKi8KKyAgMS4xNzE4Njg2NjcwZS0wMSwgLyogMHgzZGVmZmZhYiAqLworICAzLjkzMjk3NzQzODBlKzAwLCAvKiAweDQwN2JiNWU3ICovCisgIDMuNTExOTQwMzgzOWUrMDEsIC8qIDB4NDIwYzdhNDUgKi8KKyAgOS4xMDU1MDA3OTM1ZSswMSwgLyogMHg0MmI2MWMyYSAqLworICA0Ljg1NTkwNjY3NzJlKzAxLCAvKiAweDQyNDIzYzdjICovCit9Oworc3RhdGljIGNvbnN0IGZsb2F0IHBzM1s1XSA9IHsKKyAgMy40NzkxMzA5MzU3ZSswMSwgLyogMHg0MjBiMmE0ZCAqLworICAzLjM2NzYyNDUxMTdlKzAyLCAvKiAweDQzYTg2MTk4ICovCisgIDEuMDQ2ODcxNDYwMGUrMDMsIC8qIDB4NDQ4MmRiZTMgKi8KKyAgOC45MDgxMTM0MDMzZSswMiwgLyogMHg0NDVlYjNlZCAqLworICAxLjAzNzg3OTMzMzVlKzAyLCAvKiAweDQyY2Y5MzZjICovCit9OworCitzdGF0aWMgY29uc3QgZmxvYXQgcHIyWzZdID0gey8qIGZvciB4IGluIFsyLjg1NzAsMl09MS9bMC4zNDk5LDAuNV0gKi8KKyAgMS4wNzcxMDgzMjI1ZS0wNywgLyogMHgzM2U3NGVhOCAqLworICAxLjE3MTc2MjE5ODJlLTAxLCAvKiAweDNkZWZmYTE2ICovCisgIDIuMzY4NTE1MDE0NmUrMDAsIC8qIDB4NDAxNzk1YzAgKi8KKyAgMS4yMjQyNjEwOTMxZSswMSwgLyogMHg0MTQzZTFiYyAqLworICAxLjc2OTM5NzE2MzRlKzAxLCAvKiAweDQxOGQ4ZDQxICovCisgIDUuMDczNTIzMDQ0NmUrMDAsIC8qIDB4NDBhMjVhNGQgKi8KK307CitzdGF0aWMgY29uc3QgZmxvYXQgcHMyWzVdID0geworICAyLjE0MzY0ODUyOTFlKzAxLCAvKiAweDQxYWI3ZGVjICovCisgIDEuMjUyOTAyMjk4MGUrMDIsIC8qIDB4NDJmYTk0OTkgKi8KKyAgMi4zMjI3NjQ3NDAwZSswMiwgLyogMHg0MzY4NDZjNyAqLworICAxLjE3Njc5Mzc0NjllKzAyLCAvKiAweDQyZWI1YmQ3ICovCisgIDguMzY0NjM5MjgyMmUrMDAsIC8qIDB4NDEwNWQ1OTAgKi8KK307CisKKwlzdGF0aWMgZmxvYXQgcG9uZWYoZmxvYXQgeCkKK3sKKwljb25zdCBmbG9hdCAqcCwqcTsKKwlmbG9hdCB6LHIsczsKKyAgICAgICAgaW50MzJfdCBpeDsKKwlHRVRfRkxPQVRfV09SRChpeCx4KTsKKwlpeCAmPSAweDdmZmZmZmZmOworICAgICAgICBpZihpeD49MHg0MTAwMDAwMCkgICAgIHtwID0gcHI4OyBxPSBwczg7fQorICAgICAgICBlbHNlIGlmKGl4Pj0weDQwZjcxYzU4KXtwID0gcHI1OyBxPSBwczU7fQorICAgICAgICBlbHNlIGlmKGl4Pj0weDQwMzZkYjY4KXtwID0gcHIzOyBxPSBwczM7fQorICAgICAgICBlbHNlIGlmKGl4Pj0weDQwMDAwMDAwKXtwID0gcHIyOyBxPSBwczI7fQorICAgICAgICB6ID0gb25lLyh4KngpOworICAgICAgICByID0gcFswXSt6KihwWzFdK3oqKHBbMl0reioocFszXSt6KihwWzRdK3oqcFs1XSkpKSk7CisgICAgICAgIHMgPSBvbmUreioocVswXSt6KihxWzFdK3oqKHFbMl0reioocVszXSt6KnFbNF0pKSkpOworICAgICAgICByZXR1cm4gb25lKyByL3M7Cit9CisKKworLyogRm9yIHggPj0gOCwgdGhlIGFzeW1wdG90aWMgZXhwYW5zaW9ucyBvZiBxb25lIGlzCisgKgkzLzggcyAtIDEwNS8xMDI0IHNeMyAtIC4uLiwgd2hlcmUgcyA9IDEveC4KKyAqIFdlIGFwcHJveGltYXRlIHBvbmUgYnkKKyAqIAlxb25lKHgpID0gcyooMC4zNzUgKyAoUi9TKSkKKyAqIHdoZXJlICBSID0gcXIxKnNeMiArIHFyMipzXjQgKyAuLi4gKyBxcjUqc14xMAorICogCSAgUyA9IDEgKyBxczEqc14yICsgLi4uICsgcXM2KnNeMTIKKyAqIGFuZAorICoJfCBxb25lKHgpL3MgLTAuMzc1LVIvUyB8IDw9IDIgICoqICggLTYxLjEzKQorICovCisKK3N0YXRpYyBjb25zdCBmbG9hdCBxcjhbNl0gPSB7IC8qIGZvciB4IGluIFtpbmYsIDhdPTEvWzAsMC4xMjVdICovCisgIDAuMDAwMDAwMDAwMGUrMDAsIC8qIDB4MDAwMDAwMDAgKi8KKyAtMS4wMjUzOTA2MjUwZS0wMSwgLyogMHhiZGQyMDAwMCAqLworIC0xLjYyNzE3NTMzMTFlKzAxLCAvKiAweGMxODIyYzhkICovCisgLTcuNTk2MDE3NDU2MWUrMDIsIC8qIDB4YzQzZGU2ODMgKi8KKyAtMS4xODQ5ODA2NjQxZSswNCwgLyogMHhjNjM5MjczYSAqLworIC00Ljg0Mzg1MTE3MTllKzA0LCAvKiAweGM3M2QzNjgzICovCit9Oworc3RhdGljIGNvbnN0IGZsb2F0IHFzOFs2XSA9IHsKKyAgMS42MTM5NTM3MDQ4ZSswMiwgLyogMHg0MzIxNjUzNyAqLworICA3LjgyNTM4NjIzMDVlKzAzLCAvKiAweDQ1ZjQ4YjE3ICovCisgIDEuMzM4NzUzNDM3NWUrMDUsIC8qIDB4NDgwMmJjZDYgKi8KKyAgNy4xOTY1Nzc1MDAwZSswNSwgLyogMHg0OTJmYjI5YyAqLworICA2LjY2NjAxMjUwMDBlKzA1LCAvKiAweDQ5MjJiZTk0ICovCisgLTIuOTQ0OTAyNTAwMGUrMDUsIC8qIDB4Yzg4ZmNiNDggKi8KK307CisKK3N0YXRpYyBjb25zdCBmbG9hdCBxcjVbNl0gPSB7IC8qIGZvciB4IGluIFs4LDQuNTQ1NF09MS9bMC4xMjUsMC4yMjAwMV0gKi8KKyAtMi4wODk3OTkzNDA1ZS0xMSwgLyogMHhhZGI3ZDIxOSAqLworIC0xLjAyNTM5MDQ3NjBlLTAxLCAvKiAweGJkZDFmZmZlICovCisgLTguMDU2NDQ3OTgyOGUrMDAsIC8qIDB4YzEwMGU3MzYgKi8KKyAtMS44MzY2OTYwMTQ0ZSswMiwgLyogMHhjMzM3YWI2YiAqLworIC0xLjM3MzE5MzcyNTZlKzAzLCAvKiAweGM0YWJhNjMzICovCisgLTIuNjEyNDQ0MzM1OWUrMDMsIC8qIDB4YzUyMzQ3MWMgKi8KK307CitzdGF0aWMgY29uc3QgZmxvYXQgcXM1WzZdID0geworICA4LjEyNzY1NTAyOTNlKzAxLCAvKiAweDQyYTI4ZDk4ICovCisgIDEuOTkxNzk4NzA2MWUrMDMsIC8qIDB4NDRmOGY5OGYgKi8KKyAgMS43NDY4NDg0Mzc1ZSswNCwgLyogMHg0Njg4NzhmOCAqLworICA0Ljk4NTE0MjU3ODFlKzA0LCAvKiAweDQ3NDJiYjZkICovCisgIDIuNzk0ODA3NDIxOWUrMDQsIC8qIDB4NDZkYTU4MjYgKi8KKyAtNC43MTkxODM1OTM4ZSswMywgLyogMHhjNTkzNzk3OCAqLworfTsKKworc3RhdGljIGNvbnN0IGZsb2F0IHFyM1s2XSA9IHsKKyAtNS4wNzgzMTI0MzcyZS0wOSwgLyogMHhiMWFlN2Q0ZiAqLworIC0xLjAyNTM3ODMzMTVlLTAxLCAvKiAweGJkZDFmZjViICovCisgLTQuNjEwMTE2MDA0OWUrMDAsIC8qIDB4YzA5Mzg2MTIgKi8KKyAtNS43ODQ3MjIxMzc1ZSswMSwgLyogMHhjMjY3NjM4ZSAqLworIC0yLjI4MjQ0NTM3MzVlKzAyLCAvKiAweGMzNjQzZTlhICovCisgLTIuMTkyMTAxMjg3OGUrMDIsIC8qIDB4YzM1YjM1Y2IgKi8KK307CitzdGF0aWMgY29uc3QgZmxvYXQgcXMzWzZdID0geworICA0Ljc2NjUxNTM1MDNlKzAxLCAvKiAweDQyM2VhOTFlICovCisgIDYuNzM4NjUxMTIzMGUrMDIsIC8qIDB4NDQyODc3NWUgKi8KKyAgMy4zODAxNTI4MzIwZSswMywgLyogMHg0NTUzNDI3MiAqLworICA1LjU0NzcyOTAwMzllKzAzLCAvKiAweDQ1YWQ1ZGQ1ICovCisgIDEuOTAzMTE5MTQwNmUrMDMsIC8qIDB4NDRlZGUzZDAgKi8KKyAtMS4zNTIwMTE4NzEzZSswMiwgLyogMHhjMzA3MzM4MSAqLworfTsKKworc3RhdGljIGNvbnN0IGZsb2F0IHFyMls2XSA9IHsvKiBmb3IgeCBpbiBbMi44NTcwLDJdPTEvWzAuMzQ5OSwwLjVdICovCisgLTEuNzgzODE3MjUzOWUtMDcsIC8qIDB4YjQzZjg5MzIgKi8KKyAtMS4wMjUxNzA0NjAzZS0wMSwgLyogMHhiZGQxZjQ3NSAqLworIC0yLjc1MjIwNTYxMDNlKzAwLCAvKiAweGMwMzAyNDIzICovCisgLTEuOTY2MzYxNjE4MGUrMDEsIC8qIDB4YzE5ZDRmMTYgKi8KKyAtNC4yMzI1MzEzNTY4ZSswMSwgLyogMHhjMjI5NGQxZiAqLworIC0yLjEzNzE5MjE1MzllKzAxLCAvKiAweGMxYWFmOWIyICovCit9Oworc3RhdGljIGNvbnN0IGZsb2F0IHFzMls2XSA9IHsKKyAgMi45NTMzMzYzMzQyZSswMSwgLyogMHg0MWVjNDQ1NCAqLworICAyLjUyOTgxNTUyMTJlKzAyLCAvKiAweDQzN2NmYjQ3ICovCisgIDcuNTc1MDI4MDc2MmUrMDIsIC8qIDB4NDQzZDYwMmUgKi8KKyAgNy4zOTM5MzE4ODQ4ZSswMiwgLyogMHg0NDM4ZDkyYSAqLworICAxLjU1OTQ5MDA1MTNlKzAyLCAvKiAweDQzMWJmMmYyICovCisgLTQuOTU5NDk4ODgyM2UrMDAsIC8qIDB4YzA5ZWI0MzcgKi8KK307CisKKwlzdGF0aWMgZmxvYXQgcW9uZWYoZmxvYXQgeCkKK3sKKwljb25zdCBmbG9hdCAqcCwqcTsKKwlmbG9hdCAgcyxyLHo7CisJaW50MzJfdCBpeDsKKwlHRVRfRkxPQVRfV09SRChpeCx4KTsKKwlpeCAmPSAweDdmZmZmZmZmOworCWlmKGl4Pj0weDQwMjAwMDAwKSAgICAge3AgPSBxcjg7IHE9IHFzODt9CisJZWxzZSBpZihpeD49MHg0MGY3MWM1OCl7cCA9IHFyNTsgcT0gcXM1O30KKwllbHNlIGlmKGl4Pj0weDQwMzZkYjY4KXtwID0gcXIzOyBxPSBxczM7fQorCWVsc2UgaWYoaXg+PTB4NDAwMDAwMDApe3AgPSBxcjI7IHE9IHFzMjt9CisJeiA9IG9uZS8oeCp4KTsKKwlyID0gcFswXSt6KihwWzFdK3oqKHBbMl0reioocFszXSt6KihwWzRdK3oqcFs1XSkpKSk7CisJcyA9IG9uZSt6KihxWzBdK3oqKHFbMV0reioocVsyXSt6KihxWzNdK3oqKHFbNF0reipxWzVdKSkpKSk7CisJcmV0dXJuICgoZmxvYXQpLjM3NSArIHIvcykveDsKK30KZGlmZiAtLWdpdCBhL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvZV9qbi5jIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9lX2puLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGIwYmM2MgotLS0gL2Rldi9udWxsCisrKyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvZV9qbi5jCkBAIC0wLDAgKzEsMjcwIEBACisKKy8qIEAoIyllX2puLmMgMS40IDk1LzAxLzE4ICovCisvKgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogQ29weXJpZ2h0IChDKSAxOTkzIGJ5IFN1biBNaWNyb3N5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBEZXZlbG9wZWQgYXQgU3VuU29mdCwgYSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGJ1c2luZXNzLgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcworICogc29mdHdhcmUgaXMgZnJlZWx5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhpcyBub3RpY2UgCisgKiBpcyBwcmVzZXJ2ZWQuCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorX19GQlNESUQoIiRGcmVlQlNEJCIpOworCisvKgorICogX19pZWVlNzU0X2puKG4sIHgpLCBfX2llZWU3NTRfeW4obiwgeCkKKyAqIGZsb2F0aW5nIHBvaW50IEJlc3NlbCdzIGZ1bmN0aW9uIG9mIHRoZSAxc3QgYW5kIDJuZCBraW5kCisgKiBvZiBvcmRlciBuCisgKiAgICAgICAgICAKKyAqIFNwZWNpYWwgY2FzZXM6CisgKgl5MCgwKT15MSgwKT15bihuLDApID0gLWluZiB3aXRoIGRpdmlzaW9uIGJ5IHplcm8gc2lnbmFsOworICoJeTAoLXZlKT15MSgtdmUpPXluKG4sLXZlKSBhcmUgTmFOIHdpdGggaW52YWxpZCBzaWduYWwuCisgKiBOb3RlIDIuIEFib3V0IGpuKG4seCksIHluKG4seCkKKyAqCUZvciBuPTAsIGowKHgpIGlzIGNhbGxlZCwKKyAqCWZvciBuPTEsIGoxKHgpIGlzIGNhbGxlZCwKKyAqCWZvciBuPHgsIGZvcndhcmQgcmVjdXJzaW9uIHVzIHVzZWQgc3RhcnRpbmcKKyAqCWZyb20gdmFsdWVzIG9mIGowKHgpIGFuZCBqMSh4KS4KKyAqCWZvciBuPngsIGEgY29udGludWVkIGZyYWN0aW9uIGFwcHJveGltYXRpb24gdG8KKyAqCWoobix4KS9qKG4tMSx4KSBpcyBldmFsdWF0ZWQgYW5kIHRoZW4gYmFja3dhcmQKKyAqCXJlY3Vyc2lvbiBpcyB1c2VkIHN0YXJ0aW5nIGZyb20gYSBzdXBwb3NlZCB2YWx1ZQorICoJZm9yIGoobix4KS4gVGhlIHJlc3VsdGluZyB2YWx1ZSBvZiBqKDAseCkgaXMKKyAqCWNvbXBhcmVkIHdpdGggdGhlIGFjdHVhbCB2YWx1ZSB0byBjb3JyZWN0IHRoZQorICoJc3VwcG9zZWQgdmFsdWUgb2YgaihuLHgpLgorICoKKyAqCXluKG4seCkgaXMgc2ltaWxhciBpbiBhbGwgcmVzcGVjdHMsIGV4Y2VwdAorICoJdGhhdCBmb3J3YXJkIHJlY3Vyc2lvbiBpcyB1c2VkIGZvciBhbGwKKyAqCXZhbHVlcyBvZiBuPjEuCisgKgkKKyAqLworCisjaW5jbHVkZSAibWF0aC5oIgorI2luY2x1ZGUgIm1hdGhfcHJpdmF0ZS5oIgorCitzdGF0aWMgY29uc3QgZG91YmxlCitpbnZzcXJ0cGk9ICA1LjY0MTg5NTgzNTQ3NzU2Mjc5MjgwZS0wMSwgLyogMHgzRkUyMERENywgMHg1MDQyOUI2RCAqLwordHdvICAgPSAgMi4wMDAwMDAwMDAwMDAwMDAwMDAwMGUrMDAsIC8qIDB4NDAwMDAwMDAsIDB4MDAwMDAwMDAgKi8KK29uZSAgID0gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDBlKzAwOyAvKiAweDNGRjAwMDAwLCAweDAwMDAwMDAwICovCisKK3N0YXRpYyBjb25zdCBkb3VibGUgemVybyAgPSAgMC4wMDAwMDAwMDAwMDAwMDAwMDAwMGUrMDA7CisKK2RvdWJsZQorX19pZWVlNzU0X2puKGludCBuLCBkb3VibGUgeCkKK3sKKwlpbnQzMl90IGksaHgsaXgsbHgsIHNnbjsKKwlkb3VibGUgYSwgYiwgdGVtcCwgZGk7CisJZG91YmxlIHosIHc7CisKKyAgICAvKiBKKC1uLHgpID0gKC0xKV5uICogSihuLCB4KSwgSihuLCAteCkgPSAoLTEpXm4gKiBKKG4sIHgpCisgICAgICogVGh1cywgSigtbix4KSA9IEoobiwteCkKKyAgICAgKi8KKwlFWFRSQUNUX1dPUkRTKGh4LGx4LHgpOworCWl4ID0gMHg3ZmZmZmZmZiZoeDsKKyAgICAvKiBpZiBKKG4sTmFOKSBpcyBOYU4gKi8KKwlpZigoaXh8KCh1X2ludDMyX3QpKGx4fC1seCkpPj4zMSk+MHg3ZmYwMDAwMCkgcmV0dXJuIHgreDsKKwlpZihuPDApewkJCisJCW4gPSAtbjsKKwkJeCA9IC14OworCQloeCBePSAweDgwMDAwMDAwOworCX0KKwlpZihuPT0wKSByZXR1cm4oX19pZWVlNzU0X2owKHgpKTsKKwlpZihuPT0xKSByZXR1cm4oX19pZWVlNzU0X2oxKHgpKTsKKwlzZ24gPSAobiYxKSYoaHg+PjMxKTsJLyogZXZlbiBuIC0tIDAsIG9kZCBuIC0tIHNpZ24oeCkgKi8KKwl4ID0gZmFicyh4KTsKKwlpZigoaXh8bHgpPT0wfHxpeD49MHg3ZmYwMDAwMCkgCS8qIGlmIHggaXMgMCBvciBpbmYgKi8KKwkgICAgYiA9IHplcm87CisJZWxzZSBpZigoZG91YmxlKW48PXgpIHsgICAKKwkJLyogU2FmZSB0byB1c2UgSihuKzEseCk9Mm4veCAqSihuLHgpLUoobi0xLHgpICovCisJICAgIGlmKGl4Pj0weDUyRDAwMDAwKSB7IC8qIHggPiAyKiozMDIgKi8KKyAgICAvKiAoeCA+PiBuKioyKSAKKyAgICAgKgkgICAgSm4oeCkgPSBjb3MoeC0oMm4rMSkqcGkvNCkqc3FydCgyL3gqcGkpCisgICAgICoJICAgIFluKHgpID0gc2luKHgtKDJuKzEpKnBpLzQpKnNxcnQoMi94KnBpKQorICAgICAqCSAgICBMZXQgcz1zaW4oeCksIGM9Y29zKHgpLCAKKyAgICAgKgkJeG49eC0oMm4rMSkqcGkvNCwgc3F0MiA9IHNxcnQoMiksdGhlbgorICAgICAqCisgICAgICoJCSAgIG4Jc2luKHhuKSpzcXQyCWNvcyh4bikqc3F0MgorICAgICAqCQktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICoJCSAgIDAJIHMtYwkJIGMrcworICAgICAqCQkgICAxCS1zLWMgCQktYytzCisgICAgICoJCSAgIDIJLXMrYwkJLWMtcworICAgICAqCQkgICAzCSBzK2MJCSBjLXMKKyAgICAgKi8KKwkJc3dpdGNoKG4mMykgeworCQkgICAgY2FzZSAwOiB0ZW1wID0gIGNvcyh4KStzaW4oeCk7IGJyZWFrOworCQkgICAgY2FzZSAxOiB0ZW1wID0gLWNvcyh4KStzaW4oeCk7IGJyZWFrOworCQkgICAgY2FzZSAyOiB0ZW1wID0gLWNvcyh4KS1zaW4oeCk7IGJyZWFrOworCQkgICAgY2FzZSAzOiB0ZW1wID0gIGNvcyh4KS1zaW4oeCk7IGJyZWFrOworCQl9CisJCWIgPSBpbnZzcXJ0cGkqdGVtcC9zcXJ0KHgpOworCSAgICB9IGVsc2UgewkKKwkgICAgICAgIGEgPSBfX2llZWU3NTRfajAoeCk7CisJICAgICAgICBiID0gX19pZWVlNzU0X2oxKHgpOworCSAgICAgICAgZm9yKGk9MTtpPG47aSsrKXsKKwkJICAgIHRlbXAgPSBiOworCQkgICAgYiA9IGIqKChkb3VibGUpKGkraSkveCkgLSBhOyAvKiBhdm9pZCB1bmRlcmZsb3cgKi8KKwkJICAgIGEgPSB0ZW1wOworCSAgICAgICAgfQorCSAgICB9CisJfSBlbHNlIHsKKwkgICAgaWYoaXg8MHgzZTEwMDAwMCkgewkvKiB4IDwgMioqLTI5ICovCisgICAgLyogeCBpcyB0aW55LCByZXR1cm4gdGhlIGZpcnN0IFRheWxvciBleHBhbnNpb24gb2YgSihuLHgpIAorICAgICAqIEoobix4KSA9IDEvbiEqKHgvMilebiAgLSAuLi4KKyAgICAgKi8KKwkJaWYobj4zMykJLyogdW5kZXJmbG93ICovCisJCSAgICBiID0gemVybzsKKwkJZWxzZSB7CisJCSAgICB0ZW1wID0geCowLjU7IGIgPSB0ZW1wOworCQkgICAgZm9yIChhPW9uZSxpPTI7aTw9bjtpKyspIHsKKwkJCWEgKj0gKGRvdWJsZSlpOwkJLyogYSA9IG4hICovCisJCQliICo9IHRlbXA7CQkvKiBiID0gKHgvMilebiAqLworCQkgICAgfQorCQkgICAgYiA9IGIvYTsKKwkJfQorCSAgICB9IGVsc2UgeworCQkvKiB1c2UgYmFja3dhcmQgcmVjdXJyZW5jZSAqLworCQkvKiAJCQl4ICAgICAgeF4yICAgICAgeF4yICAgICAgIAorCQkgKiAgSihuLHgpL0oobi0xLHgpID0gIC0tLS0gICAtLS0tLS0gICAtLS0tLS0gICAuLi4uLgorCQkgKgkJCTJuICAtIDIobisxKSAtIDIobisyKQorCQkgKgorCQkgKiAJCQkxICAgICAgMSAgICAgICAgMSAgICAgICAKKwkJICogIChmb3IgbGFyZ2UgeCkgICA9ICAtLS0tICAtLS0tLS0gICAtLS0tLS0gICAuLi4uLgorCQkgKgkJCTJuICAgMihuKzEpICAgMihuKzIpCisJCSAqCQkJLS0gLSAtLS0tLS0gLSAtLS0tLS0gLSAKKwkJICoJCQkgeCAgICAgeCAgICAgICAgIHgKKwkJICoKKwkJICogTGV0IHcgPSAybi94IGFuZCBoPTIveCwgdGhlbiB0aGUgYWJvdmUgcXVvdGllbnQKKwkJICogaXMgZXF1YWwgdG8gdGhlIGNvbnRpbnVlZCBmcmFjdGlvbjoKKwkJICoJCSAgICAxCisJCSAqCT0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkJICoJCSAgICAgICAxCisJCSAqCSAgIHcgLSAtLS0tLS0tLS0tLS0tLS0tLQorCQkgKgkJCSAgMQorCQkgKiAJICAgICAgICB3K2ggLSAtLS0tLS0tLS0KKwkJICoJCSAgICAgICB3KzJoIC0gLi4uCisJCSAqCisJCSAqIFRvIGRldGVybWluZSBob3cgbWFueSB0ZXJtcyBuZWVkZWQsIGxldAorCQkgKiBRKDApID0gdywgUSgxKSA9IHcodytoKSAtIDEsCisJCSAqIFEoaykgPSAodytrKmgpKlEoay0xKSAtIFEoay0yKSwKKwkJICogV2hlbiBRKGspID4gMWU0CWdvb2QgZm9yIHNpbmdsZSAKKwkJICogV2hlbiBRKGspID4gMWU5CWdvb2QgZm9yIGRvdWJsZSAKKwkJICogV2hlbiBRKGspID4gMWUxNwlnb29kIGZvciBxdWFkcnVwbGUgCisJCSAqLworCSAgICAvKiBkZXRlcm1pbmUgayAqLworCQlkb3VibGUgdCx2OworCQlkb3VibGUgcTAscTEsaCx0bXA7IGludDMyX3QgayxtOworCQl3ICA9IChuK24pLyhkb3VibGUpeDsgaCA9IDIuMC8oZG91YmxlKXg7CisJCXEwID0gdzsgIHogPSB3K2g7IHExID0gdyp6IC0gMS4wOyBrPTE7CisJCXdoaWxlKHExPDEuMGU5KSB7CisJCQlrICs9IDE7IHogKz0gaDsKKwkJCXRtcCA9IHoqcTEgLSBxMDsKKwkJCXEwID0gcTE7CisJCQlxMSA9IHRtcDsKKwkJfQorCQltID0gbituOworCQlmb3IodD16ZXJvLCBpID0gMioobitrKTsgaT49bTsgaSAtPSAyKSB0ID0gb25lLyhpL3gtdCk7CisJCWEgPSB0OworCQliID0gb25lOworCQkvKiAgZXN0aW1hdGUgbG9nKCgyL3gpXm4qbiEpID0gbipsb2coMi94KStuKmxuKG4pCisJCSAqICBIZW5jZSwgaWYgbioobG9nKDJuL3gpKSA+IC4uLgorCQkgKiAgc2luZ2xlIDguODcyMjgzOTM1NWUrMDEKKwkJICogIGRvdWJsZSA3LjA5NzgyNzEyODkzMzgzOTczMDk2ZSswMgorCQkgKiAgbG9uZyBkb3VibGUgMS4xMzU2NTIzNDA2Mjk0MTQzOTQ5NDkxOTMxMDc3OTcwNzY1MDA2MTcwZSswNAorCQkgKiAgdGhlbiByZWN1cnJlbnQgdmFsdWUgbWF5IG92ZXJmbG93IGFuZCB0aGUgcmVzdWx0IGlzCisJCSAqICBsaWtlbHkgdW5kZXJmbG93IHRvIHplcm8KKwkJICovCisJCXRtcCA9IG47CisJCXYgPSB0d28veDsKKwkJdG1wID0gdG1wKl9faWVlZTc1NF9sb2coZmFicyh2KnRtcCkpOworCQlpZih0bXA8Ny4wOTc4MjcxMjg5MzM4Mzk3MzA5NmUrMDIpIHsKKwkgICAgCSAgICBmb3IoaT1uLTEsZGk9KGRvdWJsZSkoaStpKTtpPjA7aS0tKXsKKwkJICAgICAgICB0ZW1wID0gYjsKKwkJCWIgKj0gZGk7CisJCQliICA9IGIveCAtIGE7CisJCSAgICAgICAgYSA9IHRlbXA7CisJCQlkaSAtPSB0d287CisJICAgICAJICAgIH0KKwkJfSBlbHNlIHsKKwkgICAgCSAgICBmb3IoaT1uLTEsZGk9KGRvdWJsZSkoaStpKTtpPjA7aS0tKXsKKwkJICAgICAgICB0ZW1wID0gYjsKKwkJCWIgKj0gZGk7CisJCQliICA9IGIveCAtIGE7CisJCSAgICAgICAgYSA9IHRlbXA7CisJCQlkaSAtPSB0d287CisJCSAgICAvKiBzY2FsZSBiIHRvIGF2b2lkIHNwdXJpb3VzIG92ZXJmbG93ICovCisJCQlpZihiPjFlMTAwKSB7CisJCQkgICAgYSAvPSBiOworCQkJICAgIHQgLz0gYjsKKwkJCSAgICBiICA9IG9uZTsKKwkJCX0KKwkgICAgIAkgICAgfQorCQl9CisJCXogPSBfX2llZWU3NTRfajAoeCk7CisJCXcgPSBfX2llZWU3NTRfajEoeCk7CisJCWlmIChmYWJzKHopID49IGZhYnModykpCisJCSAgICBiID0gKHQqei9iKTsKKwkJZWxzZQorCQkgICAgYiA9ICh0KncvYSk7CisJICAgIH0KKwl9CisJaWYoc2duPT0xKSByZXR1cm4gLWI7IGVsc2UgcmV0dXJuIGI7Cit9CisKK2RvdWJsZQorX19pZWVlNzU0X3luKGludCBuLCBkb3VibGUgeCkKK3sKKwlpbnQzMl90IGksaHgsaXgsbHg7CisJaW50MzJfdCBzaWduOworCWRvdWJsZSBhLCBiLCB0ZW1wOworCisJRVhUUkFDVF9XT1JEUyhoeCxseCx4KTsKKwlpeCA9IDB4N2ZmZmZmZmYmaHg7CisgICAgLyogaWYgWShuLE5hTikgaXMgTmFOICovCisJaWYoKGl4fCgodV9pbnQzMl90KShseHwtbHgpKT4+MzEpPjB4N2ZmMDAwMDApIHJldHVybiB4K3g7CisJaWYoKGl4fGx4KT09MCkgcmV0dXJuIC1vbmUvemVybzsKKwlpZihoeDwwKSByZXR1cm4gemVyby96ZXJvOworCXNpZ24gPSAxOworCWlmKG48MCl7CisJCW4gPSAtbjsKKwkJc2lnbiA9IDEgLSAoKG4mMSk8PDEpOworCX0KKwlpZihuPT0wKSByZXR1cm4oX19pZWVlNzU0X3kwKHgpKTsKKwlpZihuPT0xKSByZXR1cm4oc2lnbipfX2llZWU3NTRfeTEoeCkpOworCWlmKGl4PT0weDdmZjAwMDAwKSByZXR1cm4gemVybzsKKwlpZihpeD49MHg1MkQwMDAwMCkgeyAvKiB4ID4gMioqMzAyICovCisgICAgLyogKHggPj4gbioqMikgCisgICAgICoJICAgIEpuKHgpID0gY29zKHgtKDJuKzEpKnBpLzQpKnNxcnQoMi94KnBpKQorICAgICAqCSAgICBZbih4KSA9IHNpbih4LSgybisxKSpwaS80KSpzcXJ0KDIveCpwaSkKKyAgICAgKgkgICAgTGV0IHM9c2luKHgpLCBjPWNvcyh4KSwgCisgICAgICoJCXhuPXgtKDJuKzEpKnBpLzQsIHNxdDIgPSBzcXJ0KDIpLHRoZW4KKyAgICAgKgorICAgICAqCQkgICBuCXNpbih4bikqc3F0Mgljb3MoeG4pKnNxdDIKKyAgICAgKgkJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqCQkgICAwCSBzLWMJCSBjK3MKKyAgICAgKgkJICAgMQktcy1jIAkJLWMrcworICAgICAqCQkgICAyCS1zK2MJCS1jLXMKKyAgICAgKgkJICAgMwkgcytjCQkgYy1zCisgICAgICovCisJCXN3aXRjaChuJjMpIHsKKwkJICAgIGNhc2UgMDogdGVtcCA9ICBzaW4oeCktY29zKHgpOyBicmVhazsKKwkJICAgIGNhc2UgMTogdGVtcCA9IC1zaW4oeCktY29zKHgpOyBicmVhazsKKwkJICAgIGNhc2UgMjogdGVtcCA9IC1zaW4oeCkrY29zKHgpOyBicmVhazsKKwkJICAgIGNhc2UgMzogdGVtcCA9ICBzaW4oeCkrY29zKHgpOyBicmVhazsKKwkJfQorCQliID0gaW52c3FydHBpKnRlbXAvc3FydCh4KTsKKwl9IGVsc2UgeworCSAgICB1X2ludDMyX3QgaGlnaDsKKwkgICAgYSA9IF9faWVlZTc1NF95MCh4KTsKKwkgICAgYiA9IF9faWVlZTc1NF95MSh4KTsKKwkvKiBxdWl0IGlmIGIgaXMgLWluZiAqLworCSAgICBHRVRfSElHSF9XT1JEKGhpZ2gsYik7CisJICAgIGZvcihpPTE7aTxuJiZoaWdoIT0weGZmZjAwMDAwO2krKyl7CisJCXRlbXAgPSBiOworCQliID0gKChkb3VibGUpKGkraSkveCkqYiAtIGE7CisJCUdFVF9ISUdIX1dPUkQoaGlnaCxiKTsKKwkJYSA9IHRlbXA7CisJICAgIH0KKwl9CisJaWYoc2lnbj4wKSByZXR1cm4gYjsgZWxzZSByZXR1cm4gLWI7Cit9CmRpZmYgLS1naXQgYS9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL2Vfam5mLmMgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL2Vfam5mLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjU2NGFlYwotLS0gL2Rldi9udWxsCisrKyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvZV9qbmYuYwpAQCAtMCwwICsxLDE5OSBAQAorLyogZV9qbmYuYyAtLSBmbG9hdCB2ZXJzaW9uIG9mIGVfam4uYy4KKyAqIENvbnZlcnNpb24gdG8gZmxvYXQgYnkgSWFuIExhbmNlIFRheWxvciwgQ3lnbnVzIFN1cHBvcnQsIGlhbkBjeWdudXMuY29tLgorICovCisKKy8qCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBDb3B5cmlnaHQgKEMpIDE5OTMgYnkgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIERldmVsb3BlZCBhdCBTdW5Qcm8sIGEgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBidXNpbmVzcy4KKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKKyAqIHNvZnR3YXJlIGlzIGZyZWVseSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoaXMgbm90aWNlCisgKiBpcyBwcmVzZXJ2ZWQuCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorX19GQlNESUQoIiRGcmVlQlNEJCIpOworCisjaW5jbHVkZSAibWF0aC5oIgorI2luY2x1ZGUgIm1hdGhfcHJpdmF0ZS5oIgorCitzdGF0aWMgY29uc3QgZmxvYXQKK3R3byAgID0gIDIuMDAwMDAwMDAwMGUrMDAsIC8qIDB4NDAwMDAwMDAgKi8KK29uZSAgID0gIDEuMDAwMDAwMDAwMGUrMDA7IC8qIDB4M0Y4MDAwMDAgKi8KKworc3RhdGljIGNvbnN0IGZsb2F0IHplcm8gID0gIDAuMDAwMDAwMDAwMGUrMDA7CisKK2Zsb2F0CitfX2llZWU3NTRfam5mKGludCBuLCBmbG9hdCB4KQoreworCWludDMyX3QgaSxoeCxpeCwgc2duOworCWZsb2F0IGEsIGIsIHRlbXAsIGRpOworCWZsb2F0IHosIHc7CisKKyAgICAvKiBKKC1uLHgpID0gKC0xKV5uICogSihuLCB4KSwgSihuLCAteCkgPSAoLTEpXm4gKiBKKG4sIHgpCisgICAgICogVGh1cywgSigtbix4KSA9IEoobiwteCkKKyAgICAgKi8KKwlHRVRfRkxPQVRfV09SRChoeCx4KTsKKwlpeCA9IDB4N2ZmZmZmZmYmaHg7CisgICAgLyogaWYgSihuLE5hTikgaXMgTmFOICovCisJaWYoaXg+MHg3ZjgwMDAwMCkgcmV0dXJuIHgreDsKKwlpZihuPDApeworCQluID0gLW47CisJCXggPSAteDsKKwkJaHggXj0gMHg4MDAwMDAwMDsKKwl9CisJaWYobj09MCkgcmV0dXJuKF9faWVlZTc1NF9qMGYoeCkpOworCWlmKG49PTEpIHJldHVybihfX2llZWU3NTRfajFmKHgpKTsKKwlzZ24gPSAobiYxKSYoaHg+PjMxKTsJLyogZXZlbiBuIC0tIDAsIG9kZCBuIC0tIHNpZ24oeCkgKi8KKwl4ID0gZmFic2YoeCk7CisJaWYoaXg9PTB8fGl4Pj0weDdmODAwMDAwKSAJLyogaWYgeCBpcyAwIG9yIGluZiAqLworCSAgICBiID0gemVybzsKKwllbHNlIGlmKChmbG9hdCluPD14KSB7CisJCS8qIFNhZmUgdG8gdXNlIEoobisxLHgpPTJuL3ggKkoobix4KS1KKG4tMSx4KSAqLworCSAgICBhID0gX19pZWVlNzU0X2owZih4KTsKKwkgICAgYiA9IF9faWVlZTc1NF9qMWYoeCk7CisJICAgIGZvcihpPTE7aTxuO2krKyl7CisJCXRlbXAgPSBiOworCQliID0gYiooKGZsb2F0KShpK2kpL3gpIC0gYTsgLyogYXZvaWQgdW5kZXJmbG93ICovCisJCWEgPSB0ZW1wOworCSAgICB9CisJfSBlbHNlIHsKKwkgICAgaWYoaXg8MHgzMDgwMDAwMCkgewkvKiB4IDwgMioqLTI5ICovCisgICAgLyogeCBpcyB0aW55LCByZXR1cm4gdGhlIGZpcnN0IFRheWxvciBleHBhbnNpb24gb2YgSihuLHgpCisgICAgICogSihuLHgpID0gMS9uISooeC8yKV5uICAtIC4uLgorICAgICAqLworCQlpZihuPjMzKQkvKiB1bmRlcmZsb3cgKi8KKwkJICAgIGIgPSB6ZXJvOworCQllbHNlIHsKKwkJICAgIHRlbXAgPSB4KihmbG9hdCkwLjU7IGIgPSB0ZW1wOworCQkgICAgZm9yIChhPW9uZSxpPTI7aTw9bjtpKyspIHsKKwkJCWEgKj0gKGZsb2F0KWk7CQkvKiBhID0gbiEgKi8KKwkJCWIgKj0gdGVtcDsJCS8qIGIgPSAoeC8yKV5uICovCisJCSAgICB9CisJCSAgICBiID0gYi9hOworCQl9CisJICAgIH0gZWxzZSB7CisJCS8qIHVzZSBiYWNrd2FyZCByZWN1cnJlbmNlICovCisJCS8qIAkJCXggICAgICB4XjIgICAgICB4XjIKKwkJICogIEoobix4KS9KKG4tMSx4KSA9ICAtLS0tICAgLS0tLS0tICAgLS0tLS0tICAgLi4uLi4KKwkJICoJCQkybiAgLSAyKG4rMSkgLSAyKG4rMikKKwkJICoKKwkJICogCQkJMSAgICAgIDEgICAgICAgIDEKKwkJICogIChmb3IgbGFyZ2UgeCkgICA9ICAtLS0tICAtLS0tLS0gICAtLS0tLS0gICAuLi4uLgorCQkgKgkJCTJuICAgMihuKzEpICAgMihuKzIpCisJCSAqCQkJLS0gLSAtLS0tLS0gLSAtLS0tLS0gLQorCQkgKgkJCSB4ICAgICB4ICAgICAgICAgeAorCQkgKgorCQkgKiBMZXQgdyA9IDJuL3ggYW5kIGg9Mi94LCB0aGVuIHRoZSBhYm92ZSBxdW90aWVudAorCQkgKiBpcyBlcXVhbCB0byB0aGUgY29udGludWVkIGZyYWN0aW9uOgorCQkgKgkJICAgIDEKKwkJICoJPSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCQkgKgkJICAgICAgIDEKKwkJICoJICAgdyAtIC0tLS0tLS0tLS0tLS0tLS0tCisJCSAqCQkJICAxCisJCSAqIAkgICAgICAgIHcraCAtIC0tLS0tLS0tLQorCQkgKgkJICAgICAgIHcrMmggLSAuLi4KKwkJICoKKwkJICogVG8gZGV0ZXJtaW5lIGhvdyBtYW55IHRlcm1zIG5lZWRlZCwgbGV0CisJCSAqIFEoMCkgPSB3LCBRKDEpID0gdyh3K2gpIC0gMSwKKwkJICogUShrKSA9ICh3K2sqaCkqUShrLTEpIC0gUShrLTIpLAorCQkgKiBXaGVuIFEoaykgPiAxZTQJZ29vZCBmb3Igc2luZ2xlCisJCSAqIFdoZW4gUShrKSA+IDFlOQlnb29kIGZvciBkb3VibGUKKwkJICogV2hlbiBRKGspID4gMWUxNwlnb29kIGZvciBxdWFkcnVwbGUKKwkJICovCisJICAgIC8qIGRldGVybWluZSBrICovCisJCWZsb2F0IHQsdjsKKwkJZmxvYXQgcTAscTEsaCx0bXA7IGludDMyX3QgayxtOworCQl3ICA9IChuK24pLyhmbG9hdCl4OyBoID0gKGZsb2F0KTIuMC8oZmxvYXQpeDsKKwkJcTAgPSB3OyAgeiA9IHcraDsgcTEgPSB3KnogLSAoZmxvYXQpMS4wOyBrPTE7CisJCXdoaWxlKHExPChmbG9hdCkxLjBlOSkgeworCQkJayArPSAxOyB6ICs9IGg7CisJCQl0bXAgPSB6KnExIC0gcTA7CisJCQlxMCA9IHExOworCQkJcTEgPSB0bXA7CisJCX0KKwkJbSA9IG4rbjsKKwkJZm9yKHQ9emVybywgaSA9IDIqKG4rayk7IGk+PW07IGkgLT0gMikgdCA9IG9uZS8oaS94LXQpOworCQlhID0gdDsKKwkJYiA9IG9uZTsKKwkJLyogIGVzdGltYXRlIGxvZygoMi94KV5uKm4hKSA9IG4qbG9nKDIveCkrbipsbihuKQorCQkgKiAgSGVuY2UsIGlmIG4qKGxvZygybi94KSkgPiAuLi4KKwkJICogIHNpbmdsZSA4Ljg3MjI4MzkzNTVlKzAxCisJCSAqICBkb3VibGUgNy4wOTc4MjcxMjg5MzM4Mzk3MzA5NmUrMDIKKwkJICogIGxvbmcgZG91YmxlIDEuMTM1NjUyMzQwNjI5NDE0Mzk0OTQ5MTkzMTA3Nzk3MDc2NTAwNjE3MGUrMDQKKwkJICogIHRoZW4gcmVjdXJyZW50IHZhbHVlIG1heSBvdmVyZmxvdyBhbmQgdGhlIHJlc3VsdCBpcworCQkgKiAgbGlrZWx5IHVuZGVyZmxvdyB0byB6ZXJvCisJCSAqLworCQl0bXAgPSBuOworCQl2ID0gdHdvL3g7CisJCXRtcCA9IHRtcCpfX2llZWU3NTRfbG9nZihmYWJzZih2KnRtcCkpOworCQlpZih0bXA8KGZsb2F0KTguODcyMTY3OTY4OGUrMDEpIHsKKwkgICAgCSAgICBmb3IoaT1uLTEsZGk9KGZsb2F0KShpK2kpO2k+MDtpLS0peworCQkgICAgICAgIHRlbXAgPSBiOworCQkJYiAqPSBkaTsKKwkJCWIgID0gYi94IC0gYTsKKwkJICAgICAgICBhID0gdGVtcDsKKwkJCWRpIC09IHR3bzsKKwkgICAgIAkgICAgfQorCQl9IGVsc2UgeworCSAgICAJICAgIGZvcihpPW4tMSxkaT0oZmxvYXQpKGkraSk7aT4wO2ktLSl7CisJCSAgICAgICAgdGVtcCA9IGI7CisJCQliICo9IGRpOworCQkJYiAgPSBiL3ggLSBhOworCQkgICAgICAgIGEgPSB0ZW1wOworCQkJZGkgLT0gdHdvOworCQkgICAgLyogc2NhbGUgYiB0byBhdm9pZCBzcHVyaW91cyBvdmVyZmxvdyAqLworCQkJaWYoYj4oZmxvYXQpMWUxMCkgeworCQkJICAgIGEgLz0gYjsKKwkJCSAgICB0IC89IGI7CisJCQkgICAgYiAgPSBvbmU7CisJCQl9CisJICAgICAJICAgIH0KKwkJfQorCQl6ID0gX19pZWVlNzU0X2owZih4KTsKKwkJdyA9IF9faWVlZTc1NF9qMWYoeCk7CisJCWlmIChmYWJzZih6KSA+PSBmYWJzZih3KSkKKwkJICAgIGIgPSAodCp6L2IpOworCQllbHNlCisJCSAgICBiID0gKHQqdy9hKTsKKwkgICAgfQorCX0KKwlpZihzZ249PTEpIHJldHVybiAtYjsgZWxzZSByZXR1cm4gYjsKK30KKworZmxvYXQKK19faWVlZTc1NF95bmYoaW50IG4sIGZsb2F0IHgpCit7CisJaW50MzJfdCBpLGh4LGl4LGliOworCWludDMyX3Qgc2lnbjsKKwlmbG9hdCBhLCBiLCB0ZW1wOworCisJR0VUX0ZMT0FUX1dPUkQoaHgseCk7CisJaXggPSAweDdmZmZmZmZmJmh4OworICAgIC8qIGlmIFkobixOYU4pIGlzIE5hTiAqLworCWlmKGl4PjB4N2Y4MDAwMDApIHJldHVybiB4K3g7CisJaWYoaXg9PTApIHJldHVybiAtb25lL3plcm87CisJaWYoaHg8MCkgcmV0dXJuIHplcm8vemVybzsKKwlzaWduID0gMTsKKwlpZihuPDApeworCQluID0gLW47CisJCXNpZ24gPSAxIC0gKChuJjEpPDwxKTsKKwl9CisJaWYobj09MCkgcmV0dXJuKF9faWVlZTc1NF95MGYoeCkpOworCWlmKG49PTEpIHJldHVybihzaWduKl9faWVlZTc1NF95MWYoeCkpOworCWlmKGl4PT0weDdmODAwMDAwKSByZXR1cm4gemVybzsKKworCWEgPSBfX2llZWU3NTRfeTBmKHgpOworCWIgPSBfX2llZWU3NTRfeTFmKHgpOworCS8qIHF1aXQgaWYgYiBpcyAtaW5mICovCisJR0VUX0ZMT0FUX1dPUkQoaWIsYik7CisJZm9yKGk9MTtpPG4mJmliIT0weGZmODAwMDAwO2krKyl7CisJICAgIHRlbXAgPSBiOworCSAgICBiID0gKChmbG9hdCkoaStpKS94KSpiIC0gYTsKKwkgICAgR0VUX0ZMT0FUX1dPUkQoaWIsYik7CisJICAgIGEgPSB0ZW1wOworCX0KKwlpZihzaWduPjApIHJldHVybiBiOyBlbHNlIHJldHVybiAtYjsKK30KZGlmZiAtLWdpdCBhL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvZV9sZ2FtbWEuYyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvZV9sZ2FtbWEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Njc0ZDliCi0tLSAvZGV2L251bGwKKysrIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9lX2xnYW1tYS5jCkBAIC0wLDAgKzEsMzMgQEAKKworLyogQCgjKWVfbGdhbW1hLmMgMS4zIDk1LzAxLzE4ICovCisvKgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogQ29weXJpZ2h0IChDKSAxOTkzIGJ5IFN1biBNaWNyb3N5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBEZXZlbG9wZWQgYXQgU3VuU29mdCwgYSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGJ1c2luZXNzLgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcworICogc29mdHdhcmUgaXMgZnJlZWx5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhpcyBub3RpY2UgCisgKiBpcyBwcmVzZXJ2ZWQuCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKgorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJTRCQiKTsKKworLyogX19pZWVlNzU0X2xnYW1tYSh4KQorICogUmV0dXJuIHRoZSBsb2dhcml0aG0gb2YgdGhlIEdhbW1hIGZ1bmN0aW9uIG9mIHguCisgKgorICogTWV0aG9kOiBjYWxsIF9faWVlZTc1NF9sZ2FtbWFfcgorICovCisKKyNpbmNsdWRlICJtYXRoLmgiCisjaW5jbHVkZSAibWF0aF9wcml2YXRlLmgiCisKK2V4dGVybiBpbnQgc2lnbmdhbTsKKworZG91YmxlCitfX2llZWU3NTRfbGdhbW1hKGRvdWJsZSB4KQoreworCXJldHVybiBfX2llZWU3NTRfbGdhbW1hX3IoeCwmc2lnbmdhbSk7Cit9CmRpZmYgLS1naXQgYS9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL2VfbGdhbW1hX3IuYyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvZV9sZ2FtbWFfci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjZmY1OTIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL2VfbGdhbW1hX3IuYwpAQCAtMCwwICsxLDI5NyBAQAorCisvKiBAKCMpZV9sZ2FtbWFfci5jIDEuMyA5NS8wMS8xOCAqLworLyoKKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIENvcHlyaWdodCAoQykgMTk5MyBieSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogRGV2ZWxvcGVkIGF0IFN1blNvZnQsIGEgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBidXNpbmVzcy4KKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKKyAqIHNvZnR3YXJlIGlzIGZyZWVseSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoaXMgbm90aWNlIAorICogaXMgcHJlc2VydmVkLgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICoKKyAqLworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CitfX0ZCU0RJRCgiJEZyZWVCU0QkIik7CisKKy8qIF9faWVlZTc1NF9sZ2FtbWFfcih4LCBzaWduZ2FtcCkKKyAqIFJlZW50cmFudCB2ZXJzaW9uIG9mIHRoZSBsb2dhcml0aG0gb2YgdGhlIEdhbW1hIGZ1bmN0aW9uIAorICogd2l0aCB1c2VyIHByb3ZpZGUgcG9pbnRlciBmb3IgdGhlIHNpZ24gb2YgR2FtbWEoeCkuIAorICoKKyAqIE1ldGhvZDoKKyAqICAgMS4gQXJndW1lbnQgUmVkdWN0aW9uIGZvciAwIDwgeCA8PSA4CisgKiAJU2luY2UgZ2FtbWEoMStzKT1zKmdhbW1hKHMpLCBmb3IgeCBpbiBbMCw4XSwgd2UgbWF5IAorICogCXJlZHVjZSB4IHRvIGEgbnVtYmVyIGluIFsxLjUsMi41XSBieQorICogCQlsZ2FtbWEoMStzKSA9IGxvZyhzKSArIGxnYW1tYShzKQorICoJZm9yIGV4YW1wbGUsCisgKgkJbGdhbW1hKDcuMykgPSBsb2coNi4zKSArIGxnYW1tYSg2LjMpCisgKgkJCSAgICA9IGxvZyg2LjMqNS4zKSArIGxnYW1tYSg1LjMpCisgKgkJCSAgICA9IGxvZyg2LjMqNS4zKjQuMyozLjMqMi4zKSArIGxnYW1tYSgyLjMpCisgKiAgIDIuIFBvbHlub21pYWwgYXBwcm94aW1hdGlvbiBvZiBsZ2FtbWEgYXJvdW5kIGl0cworICoJbWluaW11biB5bWluPTEuNDYxNjMyMTQ0OTY4MzYyMjQ1IHRvIG1haW50YWluIG1vbm90b25pY2l0eS4KKyAqCU9uIFt5bWluLTAuMjMsIHltaW4rMC4yN10gKGkuZS4sIFsxLjIzMTY0LDEuNzMxNjNdKSwgdXNlCisgKgkJTGV0IHogPSB4LXltaW47CisgKgkJbGdhbW1hKHgpID0gLTEuMjE0ODYyOTA1MzU4NDk2MDc4MjE4ICsgel4yKnBvbHkoeikKKyAqCXdoZXJlCisgKgkJcG9seSh6KSBpcyBhIDE0IGRlZ3JlZSBwb2x5bm9taWFsLgorICogICAyLiBSYXRpb25hbCBhcHByb3hpbWF0aW9uIGluIHRoZSBwcmltYXJ5IGludGVydmFsIFsyLDNdCisgKglXZSB1c2UgdGhlIGZvbGxvd2luZyBhcHByb3hpbWF0aW9uOgorICoJCXMgPSB4LTIuMDsKKyAqCQlsZ2FtbWEoeCkgPSAwLjUqcyArIHMqUChzKS9RKHMpCisgKgl3aXRoIGFjY3VyYWN5CisgKgkJfFAvUSAtIChsZ2FtbWEoeCktMC41cyl8IDwgMioqLTYxLjcxCisgKglPdXIgYWxnb3JpdGhtcyBhcmUgYmFzZWQgb24gdGhlIGZvbGxvd2luZyBvYnNlcnZhdGlvbgorICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6ZXRhKDIpLTEgICAgMiAgICB6ZXRhKDMpLTEgICAgMworICogbGdhbW1hKDIrcykgPSBzKigxLUV1bGVyKSArIC0tLS0tLS0tLSAqIHMgIC0gIC0tLS0tLS0tLSAqIHMgICsgLi4uCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIgICAgICAgICAgICAgICAgIDMKKyAqCisgKgl3aGVyZSBFdWxlciA9IDAuNTc3MS4uLiBpcyB0aGUgRXVsZXIgY29uc3RhbnQsIHdoaWNoIGlzIHZlcnkKKyAqCWNsb3NlIHRvIDAuNS4KKyAqCisgKiAgIDMuIEZvciB4Pj04LCB3ZSBoYXZlCisgKglsZ2FtbWEoeCl+KHgtMC41KWxvZyh4KS14KzAuNSpsb2coMnBpKSsxLygxMngpLTEvKDM2MHgqKjMpKy4uLi4KKyAqCShiZXR0ZXIgZm9ybXVsYToKKyAqCSAgIGxnYW1tYSh4KX4oeC0wLjUpKihsb2coeCktMSktLjUqKGxvZygycGkpLTEpICsgLi4uKQorICoJTGV0IHogPSAxL3gsIHRoZW4gd2UgYXBwcm94aW1hdGlvbgorICoJCWYoeikgPSBsZ2FtbWEoeCkgLSAoeC0wLjUpKGxvZyh4KS0xKQorICoJYnkKKyAqCSAgCQkJICAgIDMgICAgICAgNSAgICAgICAgICAgICAxMQorICoJCXcgPSB3MCArIHcxKnogKyB3Mip6ICArIHczKnogICsgLi4uICsgdzYqegorICoJd2hlcmUgCisgKgkJfHcgLSBmKHopfCA8IDIqKi01OC43NAorICoJCQorICogICA0LiBGb3IgbmVnYXRpdmUgeCwgc2luY2UgKEcgaXMgZ2FtbWEgZnVuY3Rpb24pCisgKgkJLXgqRygteCkqRyh4KSA9IHBpL3NpbihwaSp4KSwKKyAqIAl3ZSBoYXZlCisgKiAJCUcoeCkgPSBwaS8oc2luKHBpKngpKigteCkqRygteCkpCisgKglzaW5jZSBHKC14KSBpcyBwb3NpdGl2ZSwgc2lnbihHKHgpKSA9IHNpZ24oc2luKHBpKngpKSBmb3IgeDwwCisgKglIZW5jZSwgZm9yIHg8MCwgc2lnbmdhbSA9IHNpZ24oc2luKHBpKngpKSBhbmQgCisgKgkJbGdhbW1hKHgpID0gbG9nKHxHYW1tYSh4KXwpCisgKgkJCSAgPSBsb2cocGkvKHx4KnNpbihwaSp4KXwpKSAtIGxnYW1tYSgteCk7CisgKglOb3RlOiBvbmUgc2hvdWxkIGF2b2lkIGNvbXB1dGUgcGkqKC14KSBkaXJlY3RseSBpbiB0aGUgCisgKgkgICAgICBjb21wdXRhdGlvbiBvZiBzaW4ocGkqKC14KSkuCisgKgkJCisgKiAgIDUuIFNwZWNpYWwgQ2FzZXMKKyAqCQlsZ2FtbWEoMitzKSB+IHMqKDEtRXVsZXIpIGZvciB0aW55IHMKKyAqCQlsZ2FtbWEoMSkgPSBsZ2FtbWEoMikgPSAwCisgKgkJbGdhbW1hKHgpIH4gLWxvZyh8eHwpIGZvciB0aW55IHgKKyAqCQlsZ2FtbWEoMCkgPSBsZ2FtbWEobmVnLmludGVnZXIpID0gaW5mIGFuZCByYWlzZSBkaXZpZGUtYnktemVybworICoJCWxnYW1tYShpbmYpID0gaW5mCisgKgkJbGdhbW1hKC1pbmYpID0gaW5mIChidWcgZm9yIGJ1ZyBjb21wYXRpYmxlIHdpdGggQzk5IT8pCisgKgkKKyAqLworCisjaW5jbHVkZSAibWF0aC5oIgorI2luY2x1ZGUgIm1hdGhfcHJpdmF0ZS5oIgorCitzdGF0aWMgY29uc3QgZG91YmxlCit0d281Mj0gIDQuNTAzNTk5NjI3MzcwNDk2MDAwMDBlKzE1LCAvKiAweDQzMzAwMDAwLCAweDAwMDAwMDAwICovCitoYWxmPSAgNS4wMDAwMDAwMDAwMDAwMDAwMDAwMGUtMDEsIC8qIDB4M0ZFMDAwMDAsIDB4MDAwMDAwMDAgKi8KK29uZSA9ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwZSswMCwgLyogMHgzRkYwMDAwMCwgMHgwMDAwMDAwMCAqLworcGkgID0gIDMuMTQxNTkyNjUzNTg5NzkzMTE2MDBlKzAwLCAvKiAweDQwMDkyMUZCLCAweDU0NDQyRDE4ICovCithMCAgPSAgNy43MjE1NjY0OTAxNTMyODY1NTQ5NGUtMDIsIC8qIDB4M0ZCM0M0NjcsIDB4RTM3REIwQzggKi8KK2ExICA9ICAzLjIyNDY3MDMzNDI0MTEzNTkxNjExZS0wMSwgLyogMHgzRkQ0QTM0QywgMHhDNEE2MEZBRCAqLworYTIgID0gIDYuNzM1MjMwMTA1MzEyOTI2ODE4MjRlLTAyLCAvKiAweDNGQjEzRTAwLCAweDFBNTU2MkE3ICovCithMyAgPSAgMi4wNTgwODA4NDMyNTE2NzMzMjgwNmUtMDIsIC8qIDB4M0Y5NTEzMjIsIDB4QUM5MjU0N0IgKi8KK2E0ICA9ICA3LjM4NTU1MDg2MDgxNDAyODgzOTU3ZS0wMywgLyogMHgzRjdFNDA0RiwgMHhCNjhGRUZFOCAqLworYTUgID0gIDIuODkwNTEzODM2NzM0MTU2MjkwOTFlLTAzLCAvKiAweDNGNjdBREQ4LCAweENDQjc5MjZCICovCithNiAgPSAgMS4xOTI3MDc2MzE4MzM2MjA2Nzg0NWUtMDMsIC8qIDB4M0Y1MzhBOTQsIDB4MTE2RjNGNUQgKi8KK2E3ICA9ICA1LjEwMDY5NzkyMTUzNTExMzM2NjA4ZS0wNCwgLyogMHgzRjQwQjZDNiwgMHg4OUI5OUMwMCAqLworYTggID0gIDIuMjA4NjI3OTA3MTM5MDgzODU1NTdlLTA0LCAvKiAweDNGMkNGMkVDLCAweEVEMTBFNTREICovCithOSAgPSAgMS4wODAxMTU2NzI0NzU4MzkzOTk1NGUtMDQsIC8qIDB4M0YxQzUwODgsIDB4OTg3REZCMDcgKi8KK2ExMCA9ICAyLjUyMTQ0NTY1NDUxMjU3MzI2OTM5ZS0wNSwgLyogMHgzRUZBNzA3NCwgMHg0MjhDRkE1MiAqLworYTExID0gIDQuNDg2NDA5NDk2MTg5MTUxNjAxNTBlLTA1LCAvKiAweDNGMDc4NThFLCAweDkwQTQ1ODM3ICovCit0YyAgPSAgMS40NjE2MzIxNDQ5NjgzNjIyNDU3NmUrMDAsIC8qIDB4M0ZGNzYyRDgsIDB4NjM1NkJFM0YgKi8KK3RmICA9IC0xLjIxNDg2MjkwNTM1ODQ5NjExNDYxZS0wMSwgLyogMHhCRkJGMTlCOSwgMHhCQ0MzOEE0MiAqLworLyogdHQgPSAtKHRhaWwgb2YgdGYpICovCit0dCAgPSAtMy42Mzg2NzY5OTcwMzk1MDUzNjU0MWUtMTgsIC8qIDB4QkM1MEM3Q0EsIDB4QTQ4QTk3MUYgKi8KK3QwICA9ICA0LjgzODM2MTIyNzIzODEwMDQ3MDQyZS0wMSwgLyogMHgzRkRFRjcyQiwgMHhDOEVFMzhBMiAqLwordDEgID0gLTEuNDc1ODc3MjI5OTQ1OTM5MTE3NTJlLTAxLCAvKiAweEJGQzJFNDI3LCAweDhEQzZDNTA5ICovCit0MiAgPSAgNi40NjI0OTQwMjM5MTMzMzg1NDc3OGUtMDIsIC8qIDB4M0ZCMDhCNDIsIDB4OTRENTQxOUIgKi8KK3QzICA9IC0zLjI3ODg1NDEwNzU5ODU5NjQ5NTY1ZS0wMiwgLyogMHhCRkEwQzlBOCwgMHhERjM1QjcxMyAqLwordDQgID0gIDEuNzk3MDY3NTA4MTE4MjAzODcxMjZlLTAyLCAvKiAweDNGOTI2NkU3LCAweDk3MEFGOUVDICovCit0NSAgPSAtMS4wMzE0MjI0MTI5ODM0MTQzNzQ1MGUtMDIsIC8qIDB4QkY4NTFGOUYsIDB4QkE5MUVDNkEgKi8KK3Q2ICA9ICA2LjEwMDUzODcwMjQ2MjkxMzMyNjM1ZS0wMywgLyogMHgzRjc4RkNFMCwgMHhFMzcwRTM0NCAqLwordDcgID0gLTMuNjg0NTIwMTY3ODExMzgyNTY3NjBlLTAzLCAvKiAweEJGNkUyRUZGLCAweEIzRTkxNEQ3ICovCit0OCAgPSAgMi4yNTk2NDc4MDkwMDYxMjQ3MjI1MGUtMDMsIC8qIDB4M0Y2MjgyRDMsIDB4MkUxNUM5MTUgKi8KK3Q5ICA9IC0xLjQwMzQ2NDY5OTg5MjMyODQzODEzZS0wMywgLyogMHhCRjU2RkU4RSwgMHhCRjJEMUFGMSAqLwordDEwID0gIDguODEwODE4ODI0Mzc2NTQwMTEzODJlLTA0LCAvKiAweDNGNENERjBDLCAweEVGNjFBOEU5ICovCit0MTEgPSAtNS4zODU5NTMwNTM1Njc0MDU0NjcxNWUtMDQsIC8qIDB4QkY0MUE2MTAsIDB4OUM3M0UwRUMgKi8KK3QxMiA9ICAzLjE1NjMyMDcwOTAzNjI1OTUwMzYxZS0wNCwgLyogMHgzRjM0QUY2RCwgMHg2QzBFQkJGNyAqLwordDEzID0gLTMuMTI3NTQxNjgzNzUxMjA4NjA1MThlLTA0LCAvKiAweEJGMzQ3RjI0LCAweEVDQzM4QzM4ICovCit0MTQgPSAgMy4zNTUyOTE5MjYzNTUxOTA3MzU0M2UtMDQsIC8qIDB4M0YzNUZEM0UsIDB4RThDMkQzRjQgKi8KK3UwICA9IC03LjcyMTU2NjQ5MDE1MzI4NjU1NDk0ZS0wMiwgLyogMHhCRkIzQzQ2NywgMHhFMzdEQjBDOCAqLwordTEgID0gIDYuMzI4MjcwNjQwMjUwOTMzNjY1MTdlLTAxLCAvKiAweDNGRTQ0MDFFLCAweDhCMDA1REZGICovCit1MiAgPSAgMS40NTQ5MjI1MDEzNzIzNDc2ODczN2UrMDAsIC8qIDB4M0ZGNzQ3NUMsIDB4RDExOUJENkYgKi8KK3UzICA9ICA5Ljc3NzE3NTI3OTYzMzcyNzQ1NjAzZS0wMSwgLyogMHgzRkVGNDk3NiwgMHg0NEVBODQ1MCAqLwordTQgID0gIDIuMjg5NjM3MjgwNjQ2OTI0NTEwOTJlLTAxLCAvKiAweDNGQ0Q0RUFFLCAweEY2MDEwOTI0ICovCit1NSAgPSAgMS4zMzgxMDkxODUzNjc4NzY2MDM3N2UtMDIsIC8qIDB4M0Y4QjY3OEIsIDB4QkYyQkFCMDkgKi8KK3YxICA9ICAyLjQ1NTk3NzkzNzEzMDQxMTM0ODIyZSswMCwgLyogMHg0MDAzQTVENywgMHhDMkJENjE5QyAqLwordjIgID0gIDIuMTI4NDg5NzYzNzk4OTMzOTUzNjFlKzAwLCAvKiAweDQwMDEwNzI1LCAweEE0MkIxOEY1ICovCit2MyAgPSAgNy42OTI4NTE1MDQ1NjY3Mjc4MzgyNWUtMDEsIC8qIDB4M0ZFODlERkIsIDB4RTQ1MDUwQUYgKi8KK3Y0ICA9ICAxLjA0MjIyNjQ1NTkzMzY5MTM0MjU0ZS0wMSwgLyogMHgzRkJBQUU1NSwgMHhENjUzN0M4OCAqLwordjUgID0gIDMuMjE3MDkyNDIyODI0MjM5MTE4MTBlLTAzLCAvKiAweDNGNkE1QUJCLCAweDU3RDBDRjYxICovCitzMCAgPSAtNy43MjE1NjY0OTAxNTMyODY1NTQ5NGUtMDIsIC8qIDB4QkZCM0M0NjcsIDB4RTM3REIwQzggKi8KK3MxICA9ICAyLjE0OTgyNDE1OTYwNjA4ODUyNTAxZS0wMSwgLyogMHgzRkNCODQ4QiwgMHgzNkUyMDg3OCAqLworczIgID0gIDMuMjU3Nzg3OTY0MDg5MzA5ODE3ODdlLTAxLCAvKiAweDNGRDREOThGLCAweDRGMTM5RjU5ICovCitzMyAgPSAgMS40NjM1MDQ3MjY1MjQ2NDQ1MjgwNWUtMDEsIC8qIDB4M0ZDMkJCOUMsIDB4QkVFNUYyRjcgKi8KK3M0ICA9ICAyLjY2NDIyNzAzMDMzNjM4NjA5NTYwZS0wMiwgLyogMHgzRjlCNDgxQywgMHg3RTkzOTk2MSAqLworczUgID0gIDEuODQwMjg0NTE0MDczMzc3MTU2NTJlLTAzLCAvKiAweDNGNUUyNkI2LCAweDczNjhGMjM5ICovCitzNiAgPSAgMy4xOTQ3NTMyNjU4NDEwMDg2NzYxN2UtMDUsIC8qIDB4M0YwMEJGRUMsIDB4REQxN0U5NDUgKi8KK3IxICA9ICAxLjM5MjAwNTMzNDY3NjIxMDQ1OTU4ZSswMCwgLyogMHgzRkY2NDVBNywgMHg2MkM0QUI3NCAqLworcjIgID0gIDcuMjE5MzU1NDc1NjcxMzgwNjk1MjVlLTAxLCAvKiAweDNGRTcxQTE4LCAweDkzRDNEQ0RDICovCityMyAgPSAgMS43MTkzMzg2NTYzMjgwMzA3ODk5M2UtMDEsIC8qIDB4M0ZDNjAxRUQsIDB4Q0NGQkRGMjcgKi8KK3I0ICA9ICAxLjg2NDU5MTkxNzE1NjUyOTAxMzQ0ZS0wMiwgLyogMHgzRjkzMTdFQSwgMHg3NDJFRDQ3NSAqLworcjUgID0gIDcuNzc5NDI0OTYzODE4OTM1OTY0MzRlLTA0LCAvKiAweDNGNDk3RERBLCAweENBNDFBOTVCICovCityNiAgPSAgNy4zMjY2ODQzMDc0NDYyNTYzNjE4OWUtMDYsIC8qIDB4M0VERUJBRjcsIDB4QTVCMzgxNDAgKi8KK3cwICA9ICA0LjE4OTM4NTMzMjA0NjcyNzI1MDUyZS0wMSwgLyogMHgzRkRBQ0ZFMywgMHg5MEM5N0Q2OSAqLwordzEgID0gIDguMzMzMzMzMzMzMzMzMjk2Nzg4NDllLTAyLCAvKiAweDNGQjU1NTU1LCAweDU1NTU1NTNCICovCit3MiAgPSAtMi43Nzc3Nzc3NzcyODc3NTUzNjQ3MGUtMDMsIC8qIDB4QkY2NkMxNkMsIDB4MTZCMDJFNUMgKi8KK3czICA9ICA3LjkzNjUwNTU4NjQzMDE5NTU4NTAwZS0wNCwgLyogMHgzRjRBMDE5RiwgMHg5OENGMzhCNiAqLwordzQgID0gLTUuOTUxODc1NTc0NTAzMzk5NjMxMzVlLTA0LCAvKiAweEJGNDM4MENCLCAweDhDMEZFNzQxICovCit3NSAgPSAgOC4zNjMzOTkxODk5NjI4MjEzOTEyNmUtMDQsIC8qIDB4M0Y0QjY3QkEsIDB4NENEQUQ1RDEgKi8KK3c2ICA9IC0xLjYzMDkyOTM0MDk2NTc1MjczOTg5ZS0wMzsgLyogMHhCRjVBQjg5RCwgMHgwQjlFNDNFNCAqLworCitzdGF0aWMgY29uc3QgZG91YmxlIHplcm89ICAwLjAwMDAwMDAwMDAwMDAwMDAwMDAwZSswMDsKKworCXN0YXRpYyBkb3VibGUgc2luX3BpKGRvdWJsZSB4KQoreworCWRvdWJsZSB5LHo7CisJaW50IG4saXg7CisKKwlHRVRfSElHSF9XT1JEKGl4LHgpOworCWl4ICY9IDB4N2ZmZmZmZmY7CisKKwlpZihpeDwweDNmZDAwMDAwKSByZXR1cm4gX19rZXJuZWxfc2luKHBpKngsemVybywwKTsKKwl5ID0gLXg7CQkvKiB4IGlzIGFzc3VtZSBuZWdhdGl2ZSAqLworCisgICAgLyoKKyAgICAgKiBhcmd1bWVudCByZWR1Y3Rpb24sIG1ha2Ugc3VyZSBpbmV4YWN0IGZsYWcgbm90IHJhaXNlZCBpZiBpbnB1dAorICAgICAqIGlzIGFuIGludGVnZXIKKyAgICAgKi8KKwl6ID0gZmxvb3IoeSk7CisJaWYoeiE9eSkgewkJCQkvKiBpbmV4YWN0IGFueXdheSAqLworCSAgICB5ICAqPSAwLjU7CisJICAgIHkgICA9IDIuMCooeSAtIGZsb29yKHkpKTsJCS8qIHkgPSB8eHwgbW9kIDIuMCAqLworCSAgICBuICAgPSAoaW50KSAoeSo0LjApOworCX0gZWxzZSB7CisgICAgICAgICAgICBpZihpeD49MHg0MzQwMDAwMCkgeworICAgICAgICAgICAgICAgIHkgPSB6ZXJvOyBuID0gMDsgICAgICAgICAgICAgICAgIC8qIHkgbXVzdCBiZSBldmVuICovCisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlmKGl4PDB4NDMzMDAwMDApIHogPSB5K3R3bzUyOwkvKiBleGFjdCAqLworCQlHRVRfTE9XX1dPUkQobix6KTsKKwkJbiAmPSAxOworICAgICAgICAgICAgICAgIHkgID0gbjsKKyAgICAgICAgICAgICAgICBuPDw9IDI7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKwlzd2l0Y2ggKG4pIHsKKwkgICAgY2FzZSAwOiAgIHkgPSAgX19rZXJuZWxfc2luKHBpKnksemVybywwKTsgYnJlYWs7CisJICAgIGNhc2UgMTogICAKKwkgICAgY2FzZSAyOiAgIHkgPSAgX19rZXJuZWxfY29zKHBpKigwLjUteSksemVybyk7IGJyZWFrOworCSAgICBjYXNlIDM6ICAKKwkgICAgY2FzZSA0OiAgIHkgPSAgX19rZXJuZWxfc2luKHBpKihvbmUteSksemVybywwKTsgYnJlYWs7CisJICAgIGNhc2UgNToKKwkgICAgY2FzZSA2OiAgIHkgPSAtX19rZXJuZWxfY29zKHBpKih5LTEuNSksemVybyk7IGJyZWFrOworCSAgICBkZWZhdWx0OiAgeSA9ICBfX2tlcm5lbF9zaW4ocGkqKHktMi4wKSx6ZXJvLDApOyBicmVhazsKKwkgICAgfQorCXJldHVybiAteTsKK30KKworCitkb3VibGUKK19faWVlZTc1NF9sZ2FtbWFfcihkb3VibGUgeCwgaW50ICpzaWduZ2FtcCkKK3sKKwlkb3VibGUgdCx5LHosbmFkaixwLHAxLHAyLHAzLHEscix3OworCWludDMyX3QgaHg7CisJaW50IGksbHgsaXg7CisKKwlFWFRSQUNUX1dPUkRTKGh4LGx4LHgpOworCisgICAgLyogcHVyZ2Ugb2ZmICstaW5mLCBOYU4sICstMCwgdGlueSBhbmQgbmVnYXRpdmUgYXJndW1lbnRzICovCisJKnNpZ25nYW1wID0gMTsKKwlpeCA9IGh4JjB4N2ZmZmZmZmY7CisJaWYoaXg+PTB4N2ZmMDAwMDApIHJldHVybiB4Kng7CisJaWYoKGl4fGx4KT09MCkgcmV0dXJuIG9uZS96ZXJvOworCWlmKGl4PDB4M2I5MDAwMDApIHsJLyogfHh8PDIqKi03MCwgcmV0dXJuIC1sb2cofHh8KSAqLworCSAgICBpZihoeDwwKSB7CisJICAgICAgICAqc2lnbmdhbXAgPSAtMTsKKwkgICAgICAgIHJldHVybiAtX19pZWVlNzU0X2xvZygteCk7CisJICAgIH0gZWxzZSByZXR1cm4gLV9faWVlZTc1NF9sb2coeCk7CisJfQorCWlmKGh4PDApIHsKKwkgICAgaWYoaXg+PTB4NDMzMDAwMDApIAkvKiB8eHw+PTIqKjUyLCBtdXN0IGJlIC1pbnRlZ2VyICovCisJCXJldHVybiBvbmUvemVybzsKKwkgICAgdCA9IHNpbl9waSh4KTsKKwkgICAgaWYodD09emVybykgcmV0dXJuIG9uZS96ZXJvOyAvKiAtaW50ZWdlciAqLworCSAgICBuYWRqID0gX19pZWVlNzU0X2xvZyhwaS9mYWJzKHQqeCkpOworCSAgICBpZih0PHplcm8pICpzaWduZ2FtcCA9IC0xOworCSAgICB4ID0gLXg7CisJfQorCisgICAgLyogcHVyZ2Ugb2ZmIDEgYW5kIDIgKi8KKwlpZigoKChpeC0weDNmZjAwMDAwKXxseCk9PTApfHwoKChpeC0weDQwMDAwMDAwKXxseCk9PTApKSByID0gMDsKKyAgICAvKiBmb3IgeCA8IDIuMCAqLworCWVsc2UgaWYoaXg8MHg0MDAwMDAwMCkgeworCSAgICBpZihpeDw9MHgzZmVjY2NjYykgeyAJLyogbGdhbW1hKHgpID0gbGdhbW1hKHgrMSktbG9nKHgpICovCisJCXIgPSAtX19pZWVlNzU0X2xvZyh4KTsKKwkJaWYoaXg+PTB4M0ZFNzY5NDQpIHt5ID0gb25lLXg7IGk9IDA7fQorCQllbHNlIGlmKGl4Pj0weDNGQ0RBNjYxKSB7eT0geC0odGMtb25lKTsgaT0xO30KKwkgIAllbHNlIHt5ID0geDsgaT0yO30KKwkgICAgfSBlbHNlIHsKKwkgIAlyID0gemVybzsKKwkgICAgICAgIGlmKGl4Pj0weDNGRkJCNEMzKSB7eT0yLjAteDtpPTA7fSAvKiBbMS43MzE2LDJdICovCisJICAgICAgICBlbHNlIGlmKGl4Pj0weDNGRjNCNEM0KSB7eT14LXRjO2k9MTt9IC8qIFsxLjIzLDEuNzNdICovCisJCWVsc2Uge3k9eC1vbmU7aT0yO30KKwkgICAgfQorCSAgICBzd2l0Y2goaSkgeworCSAgICAgIGNhc2UgMDoKKwkJeiA9IHkqeTsKKwkJcDEgPSBhMCt6KihhMit6KihhNCt6KihhNit6KihhOCt6KmExMCkpKSk7CisJCXAyID0geiooYTEreiooYTMreiooYTUreiooYTcreiooYTkreiphMTEpKSkpKTsKKwkJcCAgPSB5KnAxK3AyOworCQlyICArPSAocC0wLjUqeSk7IGJyZWFrOworCSAgICAgIGNhc2UgMToKKwkJeiA9IHkqeTsKKwkJdyA9IHoqeTsKKwkJcDEgPSB0MCt3Kih0Myt3Kih0Nit3Kih0OSArdyp0MTIpKSk7CS8qIHBhcmFsbGVsIGNvbXAgKi8KKwkJcDIgPSB0MSt3Kih0NCt3Kih0Nyt3Kih0MTArdyp0MTMpKSk7CisJCXAzID0gdDIrdyoodDUrdyoodDgrdyoodDExK3cqdDE0KSkpOworCQlwICA9IHoqcDEtKHR0LXcqKHAyK3kqcDMpKTsKKwkJciArPSAodGYgKyBwKTsgYnJlYWs7CisJICAgICAgY2FzZSAyOgkKKwkJcDEgPSB5Kih1MCt5Kih1MSt5Kih1Mit5Kih1Myt5Kih1NCt5KnU1KSkpKSk7CisJCXAyID0gb25lK3kqKHYxK3kqKHYyK3kqKHYzK3kqKHY0K3kqdjUpKSkpOworCQlyICs9ICgtMC41KnkgKyBwMS9wMik7CisJICAgIH0KKwl9CisJZWxzZSBpZihpeDwweDQwMjAwMDAwKSB7IAkJCS8qIHggPCA4LjAgKi8KKwkgICAgaSA9IChpbnQpeDsKKwkgICAgeSA9IHgtKGRvdWJsZSlpOworCSAgICBwID0geSooczAreSooczEreSooczIreSooczMreSooczQreSooczUreSpzNikpKSkpKTsKKwkgICAgcSA9IG9uZSt5KihyMSt5KihyMit5KihyMyt5KihyNCt5KihyNSt5KnI2KSkpKSk7CisJICAgIHIgPSBoYWxmKnkrcC9xOworCSAgICB6ID0gb25lOwkvKiBsZ2FtbWEoMStzKSA9IGxvZyhzKSArIGxnYW1tYShzKSAqLworCSAgICBzd2l0Y2goaSkgeworCSAgICBjYXNlIDc6IHogKj0gKHkrNi4wKTsJLyogRkFMTFRIUlUgKi8KKwkgICAgY2FzZSA2OiB6ICo9ICh5KzUuMCk7CS8qIEZBTExUSFJVICovCisJICAgIGNhc2UgNTogeiAqPSAoeSs0LjApOwkvKiBGQUxMVEhSVSAqLworCSAgICBjYXNlIDQ6IHogKj0gKHkrMy4wKTsJLyogRkFMTFRIUlUgKi8KKwkgICAgY2FzZSAzOiB6ICo9ICh5KzIuMCk7CS8qIEZBTExUSFJVICovCisJCSAgICByICs9IF9faWVlZTc1NF9sb2coeik7IGJyZWFrOworCSAgICB9CisgICAgLyogOC4wIDw9IHggPCAyKio1OCAqLworCX0gZWxzZSBpZiAoaXggPCAweDQzOTAwMDAwKSB7CisJICAgIHQgPSBfX2llZWU3NTRfbG9nKHgpOworCSAgICB6ID0gb25lL3g7CisJICAgIHkgPSB6Kno7CisJICAgIHcgPSB3MCt6Kih3MSt5Kih3Mit5Kih3Myt5Kih3NCt5Kih3NSt5Knc2KSkpKSk7CisJICAgIHIgPSAoeC1oYWxmKSoodC1vbmUpK3c7CisJfSBlbHNlIAorICAgIC8qIDIqKjU4IDw9IHggPD0gaW5mICovCisJICAgIHIgPSAgeCooX19pZWVlNzU0X2xvZyh4KS1vbmUpOworCWlmKGh4PDApIHIgPSBuYWRqIC0gcjsKKwlyZXR1cm4gcjsKK30KZGlmZiAtLWdpdCBhL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvZV9sZ2FtbWFmLmMgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL2VfbGdhbW1hZi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlMmM1NTIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL2VfbGdhbW1hZi5jCkBAIC0wLDAgKzEsMzQgQEAKKy8qIGVfbGdhbW1hZi5jIC0tIGZsb2F0IHZlcnNpb24gb2YgZV9sZ2FtbWEuYy4KKyAqIENvbnZlcnNpb24gdG8gZmxvYXQgYnkgSWFuIExhbmNlIFRheWxvciwgQ3lnbnVzIFN1cHBvcnQsIGlhbkBjeWdudXMuY29tLgorICovCisKKy8qCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBDb3B5cmlnaHQgKEMpIDE5OTMgYnkgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIERldmVsb3BlZCBhdCBTdW5Qcm8sIGEgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBidXNpbmVzcy4KKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKKyAqIHNvZnR3YXJlIGlzIGZyZWVseSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoaXMgbm90aWNlCisgKiBpcyBwcmVzZXJ2ZWQuCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorX19GQlNESUQoIiRGcmVlQlNEJCIpOworCisvKiBfX2llZWU3NTRfbGdhbW1hZih4KQorICogUmV0dXJuIHRoZSBsb2dhcml0aG0gb2YgdGhlIEdhbW1hIGZ1bmN0aW9uIG9mIHguCisgKgorICogTWV0aG9kOiBjYWxsIF9faWVlZTc1NF9sZ2FtbWFmX3IKKyAqLworCisjaW5jbHVkZSAibWF0aC5oIgorI2luY2x1ZGUgIm1hdGhfcHJpdmF0ZS5oIgorCitleHRlcm4gaW50IHNpZ25nYW07CisKK2Zsb2F0CitfX2llZWU3NTRfbGdhbW1hZihmbG9hdCB4KQoreworCXJldHVybiBfX2llZWU3NTRfbGdhbW1hZl9yKHgsJnNpZ25nYW0pOworfQpkaWZmIC0tZ2l0IGEvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9lX2xnYW1tYWZfci5jIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9lX2xnYW1tYWZfci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyZDkwZWYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL2VfbGdhbW1hZl9yLmMKQEAgLTAsMCArMSwyMzAgQEAKKy8qIGVfbGdhbW1hZl9yLmMgLS0gZmxvYXQgdmVyc2lvbiBvZiBlX2xnYW1tYV9yLmMuCisgKiBDb252ZXJzaW9uIHRvIGZsb2F0IGJ5IElhbiBMYW5jZSBUYXlsb3IsIEN5Z251cyBTdXBwb3J0LCBpYW5AY3lnbnVzLmNvbS4KKyAqLworCisvKgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogQ29weXJpZ2h0IChDKSAxOTkzIGJ5IFN1biBNaWNyb3N5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBEZXZlbG9wZWQgYXQgU3VuUHJvLCBhIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gYnVzaW5lc3MuCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCisgKiBzb2Z0d2FyZSBpcyBmcmVlbHkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGlzIG5vdGljZQorICogaXMgcHJlc2VydmVkLgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJTRCQiKTsKKworI2luY2x1ZGUgIm1hdGguaCIKKyNpbmNsdWRlICJtYXRoX3ByaXZhdGUuaCIKKworc3RhdGljIGNvbnN0IGZsb2F0Cit0d28yMz0gIDguMzg4NjA4MDAwMGUrMDYsIC8qIDB4NGIwMDAwMDAgKi8KK2hhbGY9ICA1LjAwMDAwMDAwMDBlLTAxLCAvKiAweDNmMDAwMDAwICovCitvbmUgPSAgMS4wMDAwMDAwMDAwZSswMCwgLyogMHgzZjgwMDAwMCAqLworcGkgID0gIDMuMTQxNTkyNzQxMGUrMDAsIC8qIDB4NDA0OTBmZGIgKi8KK2EwICA9ICA3LjcyMTU2NjQwODllLTAyLCAvKiAweDNkOWUyMzNmICovCithMSAgPSAgMy4yMjQ2NzAyOTA5ZS0wMSwgLyogMHgzZWE1MWE2NiAqLworYTIgID0gIDYuNzM1MjMwMjM3MmUtMDIsIC8qIDB4M2Q4OWYwMDEgKi8KK2EzICA9ICAyLjA1ODA4MDc3MDFlLTAyLCAvKiAweDNjYTg5OTE1ICovCithNCAgPSAgNy4zODU1NTA5OTgyZS0wMywgLyogMHgzYmYyMDI3ZSAqLworYTUgID0gIDIuODkwNTEzNzQ0MmUtMDMsIC8qIDB4M2IzZDZlYzYgKi8KK2E2ICA9ICAxLjE5MjcwNzY4NDhlLTAzLCAvKiAweDNhOWM1NGExICovCithNyAgPSAgNS4xMDA2OTc3NDQ2ZS0wNCwgLyogMHgzYTA1YjYzNCAqLworYTggID0gIDIuMjA4NjI3ODQ3N2UtMDQsIC8qIDB4Mzk2Nzk3NjcgKi8KK2E5ICA9ICAxLjA4MDExNTY4OTVlLTA0LCAvKiAweDM4ZTI4NDQ1ICovCithMTAgPSAgMi41MjE0NDU2NDAwZS0wNSwgLyogMHgzN2QzODNhMiAqLworYTExID0gIDQuNDg2NDA5NjcwOGUtMDUsIC8qIDB4MzgzYzJjNzUgKi8KK3RjICA9ICAxLjQ2MTYzMjEzMjVlKzAwLCAvKiAweDNmYmIxNmMzICovCit0ZiAgPSAtMS4yMTQ4NjI4Mzg0ZS0wMSwgLyogMHhiZGY4Y2RjZCAqLworLyogdHQgPSAtKHRhaWwgb2YgdGYpICovCit0dCAgPSAgNi42OTcxMDA2NTE4ZS0wOSwgLyogMHgzMWU2MWM1MiAqLwordDAgID0gIDQuODM4MzYxMTQ0MWUtMDEsIC8qIDB4M2VmN2I5NWUgKi8KK3QxICA9IC0xLjQ3NTg3NzE2NThlLTAxLCAvKiAweGJlMTcyMTNjICovCit0MiAgPSAgNi40NjI0OTQyODM5ZS0wMiwgLyogMHgzZDg0NWExNSAqLwordDMgID0gLTMuMjc4ODU0MTE2OGUtMDIsIC8qIDB4YmQwNjRkNDcgKi8KK3Q0ICA9ICAxLjc5NzA2NzU2MDNlLTAyLCAvKiAweDNjOTMzNzNkICovCit0NSAgPSAtMS4wMzE0MjI0Mjg4ZS0wMiwgLyogMHhiYzI4ZmNmZSAqLwordDYgID0gIDYuMTAwNTM4NjUyNGUtMDMsIC8qIDB4M2JjN2U3MDcgKi8KK3Q3ICA9IC0zLjY4NDUyMDI1NThlLTAzLCAvKiAweGJiNzE3N2ZlICovCit0OCAgPSAgMi4yNTk2NDc3MDY1ZS0wMywgLyogMHgzYjE0MTY5OSAqLwordDkgID0gLTEuNDAzNDY0NzAyOWUtMDMsIC8qIDB4YmFiN2Y0NzYgKi8KK3QxMCA9ICA4LjgxMDgxODU0NDZlLTA0LCAvKiAweDNhNjZmODY3ICovCit0MTEgPSAtNS4zODU5NTMxMTgxZS0wNCwgLyogMHhiYTBkMzA4NSAqLwordDEyID0gIDMuMTU2MzIwNTk5NGUtMDQsIC8qIDB4MzlhNTdiNmIgKi8KK3QxMyA9IC0zLjEyNzU0MTU2NzdlLTA0LCAvKiAweGI5YTNmOTI3ICovCit0MTQgPSAgMy4zNTUyOTE4NDY3ZS0wNCwgLyogMHgzOWFmZTlmNyAqLwordTAgID0gLTcuNzIxNTY2NDA4OWUtMDIsIC8qIDB4YmQ5ZTIzM2YgKi8KK3UxICA9ICA2LjMyODI3MDQzNTNlLTAxLCAvKiAweDNmMjIwMGY0ICovCit1MiAgPSAgMS40NTQ5MjI1NTY5ZSswMCwgLyogMHgzZmJhM2FlNyAqLwordTMgID0gIDkuNzc3MTc1MTg4MWUtMDEsIC8qIDB4M2Y3YTRiYjIgKi8KK3U0ICA9ICAyLjI4OTYzNzMyNzJlLTAxLCAvKiAweDNlNmE3NTc4ICovCit1NSAgPSAgMS4zMzgxMDkxODc4ZS0wMiwgLyogMHgzYzViM2M1ZSAqLwordjEgID0gIDIuNDU1OTc3OTE2N2UrMDAsIC8qIDB4NDAxZDJlYmUgKi8KK3YyICA9ICAyLjEyODQ4OTczMjdlKzAwLCAvKiAweDQwMDgzOTJkICovCit2MyAgPSAgNy42OTI4NTE0MjQyZS0wMSwgLyogMHgzZjQ0ZWZkZiAqLwordjQgID0gIDEuMDQyMjI2NDc4NWUtMDEsIC8qIDB4M2RkNTcyYWYgKi8KK3Y1ICA9ICAzLjIxNzA5MjQ4MjRlLTAzLCAvKiAweDNiNTJkNWRiICovCitzMCAgPSAtNy43MjE1NjY0MDg5ZS0wMiwgLyogMHhiZDllMjMzZiAqLworczEgID0gIDIuMTQ5ODI0MjAyMWUtMDEsIC8qIDB4M2U1YzI0NWEgKi8KK3MyICA9ICAzLjI1Nzc4NzgyMzdlLTAxLCAvKiAweDNlYTZjYzdhICovCitzMyAgPSAgMS40NjM1MDQ3MzE3ZS0wMSwgLyogMHgzZTE1ZGNlNiAqLworczQgID0gIDIuNjY0MjI3MDM4NmUtMDIsIC8qIDB4M2NkYTQwZTQgKi8KK3M1ICA9ICAxLjg0MDI4NDU1OTllLTAzLCAvKiAweDNhZjEzNWI0ICovCitzNiAgPSAgMy4xOTQ3NTMyOTg5ZS0wNSwgLyogMHgzODA1ZmY2NyAqLworcjEgID0gIDEuMzkyMDA1MzI0NGUrMDAsIC8qIDB4M2ZiMjJkM2IgKi8KK3IyICA9ICA3LjIxOTM1NTcwMjRlLTAxLCAvKiAweDNmMzhkMGM1ICovCityMyAgPSAgMS43MTkzMzg1OTU5ZS0wMSwgLyogMHgzZTMwMGY2ZSAqLworcjQgID0gIDEuODY0NTkxOTg1OWUtMDIsIC8qIDB4M2M5OGJmNTQgKi8KK3I1ICA9ICA3Ljc3OTQyNDc3NzNlLTA0LCAvKiAweDNhNGJlZWQ2ICovCityNiAgPSAgNy4zMjY2ODQyMjY0ZS0wNiwgLyogMHgzNmY1ZDdiZCAqLwordzAgID0gIDQuMTg5Mzg1NDczN2UtMDEsIC8qIDB4M2VkNjdmMWQgKi8KK3cxICA9ICA4LjMzMzMzMzU4MTdlLTAyLCAvKiAweDNkYWFhYWFiICovCit3MiAgPSAtMi43Nzc3Nzc4NDUwZS0wMywgLyogMHhiYjM2MGI2MSAqLwordzMgID0gIDcuOTM2NTA1NzE3MmUtMDQsIC8qIDB4M2E1MDBjZmQgKi8KK3c0ICA9IC01Ljk1MTg3NTM1NTFlLTA0LCAvKiAweGJhMWMwNjVjICovCit3NSAgPSAgOC4zNjMzOTg5NTYxZS0wNCwgLyogMHgzYTViM2RkMiAqLwordzYgID0gLTEuNjMwOTI5Mjk4N2UtMDM7IC8qIDB4YmFkNWM0ZTggKi8KKworc3RhdGljIGNvbnN0IGZsb2F0IHplcm89ICAwLjAwMDAwMDAwMDBlKzAwOworCisJc3RhdGljIGZsb2F0IHNpbl9waWYoZmxvYXQgeCkKK3sKKwlmbG9hdCB5LHo7CisJaW50IG4saXg7CisKKwlHRVRfRkxPQVRfV09SRChpeCx4KTsKKwlpeCAmPSAweDdmZmZmZmZmOworCisJaWYoaXg8MHgzZTgwMDAwMCkgcmV0dXJuIF9fa2VybmVsX3NpbmRmKHBpKngpOworCXkgPSAteDsJCS8qIHggaXMgYXNzdW1lIG5lZ2F0aXZlICovCisKKyAgICAvKgorICAgICAqIGFyZ3VtZW50IHJlZHVjdGlvbiwgbWFrZSBzdXJlIGluZXhhY3QgZmxhZyBub3QgcmFpc2VkIGlmIGlucHV0CisgICAgICogaXMgYW4gaW50ZWdlcgorICAgICAqLworCXogPSBmbG9vcmYoeSk7CisJaWYoeiE9eSkgewkJCQkvKiBpbmV4YWN0IGFueXdheSAqLworCSAgICB5ICAqPSAoZmxvYXQpMC41OworCSAgICB5ICAgPSAoZmxvYXQpMi4wKih5IC0gZmxvb3JmKHkpKTsJLyogeSA9IHx4fCBtb2QgMi4wICovCisJICAgIG4gICA9IChpbnQpICh5KihmbG9hdCk0LjApOworCX0gZWxzZSB7CisgICAgICAgICAgICBpZihpeD49MHg0YjgwMDAwMCkgeworICAgICAgICAgICAgICAgIHkgPSB6ZXJvOyBuID0gMDsgICAgICAgICAgICAgICAgIC8qIHkgbXVzdCBiZSBldmVuICovCisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlmKGl4PDB4NGIwMDAwMDApIHogPSB5K3R3bzIzOwkvKiBleGFjdCAqLworCQlHRVRfRkxPQVRfV09SRChuLHopOworCQluICY9IDE7CisgICAgICAgICAgICAgICAgeSAgPSBuOworICAgICAgICAgICAgICAgIG48PD0gMjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCXN3aXRjaCAobikgeworCSAgICBjYXNlIDA6ICAgeSA9ICBfX2tlcm5lbF9zaW5kZihwaSp5KTsgYnJlYWs7CisJICAgIGNhc2UgMToKKwkgICAgY2FzZSAyOiAgIHkgPSAgX19rZXJuZWxfY29zZGYocGkqKChmbG9hdCkwLjUteSkpOyBicmVhazsKKwkgICAgY2FzZSAzOgorCSAgICBjYXNlIDQ6ICAgeSA9ICBfX2tlcm5lbF9zaW5kZihwaSoob25lLXkpKTsgYnJlYWs7CisJICAgIGNhc2UgNToKKwkgICAgY2FzZSA2OiAgIHkgPSAtX19rZXJuZWxfY29zZGYocGkqKHktKGZsb2F0KTEuNSkpOyBicmVhazsKKwkgICAgZGVmYXVsdDogIHkgPSAgX19rZXJuZWxfc2luZGYocGkqKHktKGZsb2F0KTIuMCkpOyBicmVhazsKKwkgICAgfQorCXJldHVybiAteTsKK30KKworCitmbG9hdAorX19pZWVlNzU0X2xnYW1tYWZfcihmbG9hdCB4LCBpbnQgKnNpZ25nYW1wKQoreworCWZsb2F0IHQseSx6LG5hZGoscCxwMSxwMixwMyxxLHIsdzsKKwlpbnQzMl90IGh4OworCWludCBpLGl4OworCisJR0VUX0ZMT0FUX1dPUkQoaHgseCk7CisKKyAgICAvKiBwdXJnZSBvZmYgKy1pbmYsIE5hTiwgKy0wLCB0aW55IGFuZCBuZWdhdGl2ZSBhcmd1bWVudHMgKi8KKwkqc2lnbmdhbXAgPSAxOworCWl4ID0gaHgmMHg3ZmZmZmZmZjsKKwlpZihpeD49MHg3ZjgwMDAwMCkgcmV0dXJuIHgqeDsKKwlpZihpeD09MCkgcmV0dXJuIG9uZS96ZXJvOworCWlmKGl4PDB4MzUwMDAwMDApIHsJLyogfHh8PDIqKi0yMSwgcmV0dXJuIC1sb2cofHh8KSAqLworCSAgICBpZihoeDwwKSB7CisJICAgICAgICAqc2lnbmdhbXAgPSAtMTsKKwkgICAgICAgIHJldHVybiAtX19pZWVlNzU0X2xvZ2YoLXgpOworCSAgICB9IGVsc2UgcmV0dXJuIC1fX2llZWU3NTRfbG9nZih4KTsKKwl9CisJaWYoaHg8MCkgeworCSAgICBpZihpeD49MHg0YjAwMDAwMCkgCS8qIHx4fD49MioqMjMsIG11c3QgYmUgLWludGVnZXIgKi8KKwkJcmV0dXJuIG9uZS96ZXJvOworCSAgICB0ID0gc2luX3BpZih4KTsKKwkgICAgaWYodD09emVybykgcmV0dXJuIG9uZS96ZXJvOyAvKiAtaW50ZWdlciAqLworCSAgICBuYWRqID0gX19pZWVlNzU0X2xvZ2YocGkvZmFic2YodCp4KSk7CisJICAgIGlmKHQ8emVybykgKnNpZ25nYW1wID0gLTE7CisJICAgIHggPSAteDsKKwl9CisKKyAgICAvKiBwdXJnZSBvZmYgMSBhbmQgMiAqLworCWlmIChpeD09MHgzZjgwMDAwMHx8aXg9PTB4NDAwMDAwMDApIHIgPSAwOworICAgIC8qIGZvciB4IDwgMi4wICovCisJZWxzZSBpZihpeDwweDQwMDAwMDAwKSB7CisJICAgIGlmKGl4PD0weDNmNjY2NjY2KSB7IAkvKiBsZ2FtbWEoeCkgPSBsZ2FtbWEoeCsxKS1sb2coeCkgKi8KKwkJciA9IC1fX2llZWU3NTRfbG9nZih4KTsKKwkJaWYoaXg+PTB4M2YzYjRhMjApIHt5ID0gb25lLXg7IGk9IDA7fQorCQllbHNlIGlmKGl4Pj0weDNlNmQzMzA4KSB7eT0geC0odGMtb25lKTsgaT0xO30KKwkgIAllbHNlIHt5ID0geDsgaT0yO30KKwkgICAgfSBlbHNlIHsKKwkgIAlyID0gemVybzsKKwkgICAgICAgIGlmKGl4Pj0weDNmZGRhNjE4KSB7eT0oZmxvYXQpMi4wLXg7aT0wO30gLyogWzEuNzMxNiwyXSAqLworCSAgICAgICAgZWxzZSBpZihpeD49MHgzRjlkYTYyMCkge3k9eC10YztpPTE7fSAvKiBbMS4yMywxLjczXSAqLworCQllbHNlIHt5PXgtb25lO2k9Mjt9CisJICAgIH0KKwkgICAgc3dpdGNoKGkpIHsKKwkgICAgICBjYXNlIDA6CisJCXogPSB5Knk7CisJCXAxID0gYTAreiooYTIreiooYTQreiooYTYreiooYTgreiphMTApKSkpOworCQlwMiA9IHoqKGExK3oqKGEzK3oqKGE1K3oqKGE3K3oqKGE5K3oqYTExKSkpKSk7CisJCXAgID0geSpwMStwMjsKKwkJciAgKz0gKHAtKGZsb2F0KTAuNSp5KTsgYnJlYWs7CisJICAgICAgY2FzZSAxOgorCQl6ID0geSp5OworCQl3ID0geip5OworCQlwMSA9IHQwK3cqKHQzK3cqKHQ2K3cqKHQ5ICt3KnQxMikpKTsJLyogcGFyYWxsZWwgY29tcCAqLworCQlwMiA9IHQxK3cqKHQ0K3cqKHQ3K3cqKHQxMCt3KnQxMykpKTsKKwkJcDMgPSB0Mit3Kih0NSt3Kih0OCt3Kih0MTErdyp0MTQpKSk7CisJCXAgID0geipwMS0odHQtdyoocDIreSpwMykpOworCQlyICs9ICh0ZiArIHApOyBicmVhazsKKwkgICAgICBjYXNlIDI6CisJCXAxID0geSoodTAreSoodTEreSoodTIreSoodTMreSoodTQreSp1NSkpKSkpOworCQlwMiA9IG9uZSt5Kih2MSt5Kih2Mit5Kih2Myt5Kih2NCt5KnY1KSkpKTsKKwkJciArPSAoLShmbG9hdCkwLjUqeSArIHAxL3AyKTsKKwkgICAgfQorCX0KKwllbHNlIGlmKGl4PDB4NDEwMDAwMDApIHsgCQkJLyogeCA8IDguMCAqLworCSAgICBpID0gKGludCl4OworCSAgICB5ID0geC0oZmxvYXQpaTsKKwkgICAgcCA9IHkqKHMwK3kqKHMxK3kqKHMyK3kqKHMzK3kqKHM0K3kqKHM1K3kqczYpKSkpKSk7CisJICAgIHEgPSBvbmUreSoocjEreSoocjIreSoocjMreSoocjQreSoocjUreSpyNikpKSkpOworCSAgICByID0gaGFsZip5K3AvcTsKKwkgICAgeiA9IG9uZTsJLyogbGdhbW1hKDErcykgPSBsb2cocykgKyBsZ2FtbWEocykgKi8KKwkgICAgc3dpdGNoKGkpIHsKKwkgICAgY2FzZSA3OiB6ICo9ICh5KyhmbG9hdCk2LjApOwkvKiBGQUxMVEhSVSAqLworCSAgICBjYXNlIDY6IHogKj0gKHkrKGZsb2F0KTUuMCk7CS8qIEZBTExUSFJVICovCisJICAgIGNhc2UgNTogeiAqPSAoeSsoZmxvYXQpNC4wKTsJLyogRkFMTFRIUlUgKi8KKwkgICAgY2FzZSA0OiB6ICo9ICh5KyhmbG9hdCkzLjApOwkvKiBGQUxMVEhSVSAqLworCSAgICBjYXNlIDM6IHogKj0gKHkrKGZsb2F0KTIuMCk7CS8qIEZBTExUSFJVICovCisJCSAgICByICs9IF9faWVlZTc1NF9sb2dmKHopOyBicmVhazsKKwkgICAgfQorICAgIC8qIDguMCA8PSB4IDwgMioqNTggKi8KKwl9IGVsc2UgaWYgKGl4IDwgMHg1YzgwMDAwMCkgeworCSAgICB0ID0gX19pZWVlNzU0X2xvZ2YoeCk7CisJICAgIHogPSBvbmUveDsKKwkgICAgeSA9IHoqejsKKwkgICAgdyA9IHcwK3oqKHcxK3kqKHcyK3kqKHczK3kqKHc0K3kqKHc1K3kqdzYpKSkpKTsKKwkgICAgciA9ICh4LWhhbGYpKih0LW9uZSkrdzsKKwl9IGVsc2UKKyAgICAvKiAyKio1OCA8PSB4IDw9IGluZiAqLworCSAgICByID0gIHgqKF9faWVlZTc1NF9sb2dmKHgpLW9uZSk7CisJaWYoaHg8MCkgciA9IG5hZGogLSByOworCXJldHVybiByOworfQpkaWZmIC0tZ2l0IGEvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9lX2xvZy5jIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9lX2xvZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4YmMxMDcKLS0tIC9kZXYvbnVsbAorKysgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL2VfbG9nLmMKQEAgLTAsMCArMSwxNDcgQEAKKworLyogQCgjKWVfbG9nLmMgMS4zIDk1LzAxLzE4ICovCisvKgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogQ29weXJpZ2h0IChDKSAxOTkzIGJ5IFN1biBNaWNyb3N5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBEZXZlbG9wZWQgYXQgU3VuU29mdCwgYSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGJ1c2luZXNzLgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcworICogc29mdHdhcmUgaXMgZnJlZWx5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhpcyBub3RpY2UgCisgKiBpcyBwcmVzZXJ2ZWQuCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorX19GQlNESUQoIiRGcmVlQlNEJCIpOworCisvKiBfX2llZWU3NTRfbG9nKHgpCisgKiBSZXR1cm4gdGhlIGxvZ3JpdGhtIG9mIHgKKyAqCisgKiBNZXRob2QgOiAgICAgICAgICAgICAgICAgIAorICogICAxLiBBcmd1bWVudCBSZWR1Y3Rpb246IGZpbmQgayBhbmQgZiBzdWNoIHRoYXQgCisgKgkJCXggPSAyXmsgKiAoMStmKSwgCisgKgkgICB3aGVyZSAgc3FydCgyKS8yIDwgMStmIDwgc3FydCgyKSAuCisgKgorICogICAyLiBBcHByb3hpbWF0aW9uIG9mIGxvZygxK2YpLgorICoJTGV0IHMgPSBmLygyK2YpIDsgYmFzZWQgb24gbG9nKDErZikgPSBsb2coMStzKSAtIGxvZygxLXMpCisgKgkJID0gMnMgKyAyLzMgcyoqMyArIDIvNSBzKio1ICsgLi4uLi4sCisgKgkgICAgIAkgPSAycyArIHMqUgorICogICAgICBXZSB1c2UgYSBzcGVjaWFsIFJlbWUgYWxnb3JpdGhtIG9uIFswLDAuMTcxNl0gdG8gZ2VuZXJhdGUgCisgKiAJYSBwb2x5bm9taWFsIG9mIGRlZ3JlZSAxNCB0byBhcHByb3hpbWF0ZSBSIFRoZSBtYXhpbXVtIGVycm9yIAorICoJb2YgdGhpcyBwb2x5bm9taWFsIGFwcHJveGltYXRpb24gaXMgYm91bmRlZCBieSAyKiotNTguNDUuIEluCisgKglvdGhlciB3b3JkcywKKyAqCQkgICAgICAgIDIgICAgICA0ICAgICAgNiAgICAgIDggICAgICAxMCAgICAgIDEyICAgICAgMTQKKyAqCSAgICBSKHopIH4gTGcxKnMgK0xnMipzICtMZzMqcyArTGc0KnMgK0xnNSpzICArTGc2KnMgICtMZzcqcworICogIAkodGhlIHZhbHVlcyBvZiBMZzEgdG8gTGc3IGFyZSBsaXN0ZWQgaW4gdGhlIHByb2dyYW0pCisgKglhbmQKKyAqCSAgICB8ICAgICAgMiAgICAgICAgICAxNCAgICAgICAgICB8ICAgICAtNTguNDUKKyAqCSAgICB8IExnMSpzICsuLi4rTGc3KnMgICAgLSAgUih6KSB8IDw9IDIgCisgKgkgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICoJTm90ZSB0aGF0IDJzID0gZiAtIHMqZiA9IGYgLSBoZnNxICsgcypoZnNxLCB3aGVyZSBoZnNxID0gZipmLzIuCisgKglJbiBvcmRlciB0byBndWFyYW50ZWUgZXJyb3IgaW4gbG9nIGJlbG93IDF1bHAsIHdlIGNvbXB1dGUgbG9nCisgKglieQorICoJCWxvZygxK2YpID0gZiAtIHMqKGYgLSBSKQkoaWYgZiBpcyBub3QgdG9vIGxhcmdlKQorICoJCWxvZygxK2YpID0gZiAtIChoZnNxIC0gcyooaGZzcStSKSkuCShiZXR0ZXIgYWNjdXJhY3kpCisgKgkKKyAqCTMuIEZpbmFsbHksICBsb2coeCkgPSBrKmxuMiArIGxvZygxK2YpLiAgCisgKgkJCSAgICA9IGsqbG4yX2hpKyhmLShoZnNxLShzKihoZnNxK1IpK2sqbG4yX2xvKSkpCisgKgkgICBIZXJlIGxuMiBpcyBzcGxpdCBpbnRvIHR3byBmbG9hdGluZyBwb2ludCBudW1iZXI6IAorICoJCQlsbjJfaGkgKyBsbjJfbG8sCisgKgkgICB3aGVyZSBuKmxuMl9oaSBpcyBhbHdheXMgZXhhY3QgZm9yIHxufCA8IDIwMDAuCisgKgorICogU3BlY2lhbCBjYXNlczoKKyAqCWxvZyh4KSBpcyBOYU4gd2l0aCBzaWduYWwgaWYgeCA8IDAgKGluY2x1ZGluZyAtSU5GKSA7IAorICoJbG9nKCtJTkYpIGlzICtJTkY7IGxvZygwKSBpcyAtSU5GIHdpdGggc2lnbmFsOworICoJbG9nKE5hTikgaXMgdGhhdCBOYU4gd2l0aCBubyBzaWduYWwuCisgKgorICogQWNjdXJhY3k6CisgKglhY2NvcmRpbmcgdG8gYW4gZXJyb3IgYW5hbHlzaXMsIHRoZSBlcnJvciBpcyBhbHdheXMgbGVzcyB0aGFuCisgKgkxIHVscCAodW5pdCBpbiB0aGUgbGFzdCBwbGFjZSkuCisgKgorICogQ29uc3RhbnRzOgorICogVGhlIGhleGFkZWNpbWFsIHZhbHVlcyBhcmUgdGhlIGludGVuZGVkIG9uZXMgZm9yIHRoZSBmb2xsb3dpbmcgCisgKiBjb25zdGFudHMuIFRoZSBkZWNpbWFsIHZhbHVlcyBtYXkgYmUgdXNlZCwgcHJvdmlkZWQgdGhhdCB0aGUgCisgKiBjb21waWxlciB3aWxsIGNvbnZlcnQgZnJvbSBkZWNpbWFsIHRvIGJpbmFyeSBhY2N1cmF0ZWx5IGVub3VnaCAKKyAqIHRvIHByb2R1Y2UgdGhlIGhleGFkZWNpbWFsIHZhbHVlcyBzaG93bi4KKyAqLworCisjaW5jbHVkZSA8ZmxvYXQuaD4KKworI2luY2x1ZGUgIm1hdGguaCIKKyNpbmNsdWRlICJtYXRoX3ByaXZhdGUuaCIKKworc3RhdGljIGNvbnN0IGRvdWJsZQorbG4yX2hpICA9ICA2LjkzMTQ3MTgwMzY5MTIzODE2NDkwZS0wMSwJLyogM2ZlNjJlNDIgZmVlMDAwMDAgKi8KK2xuMl9sbyAgPSAgMS45MDgyMTQ5MjkyNzA1ODc3MDAwMmUtMTAsCS8qIDNkZWEzOWVmIDM1NzkzYzc2ICovCit0d281NCAgID0gIDEuODAxNDM5ODUwOTQ4MTk4NDAwMDBlKzE2LCAgLyogNDM1MDAwMDAgMDAwMDAwMDAgKi8KK0xnMSA9IDYuNjY2NjY2NjY2NjY2NzM1MTMwZS0wMSwgIC8qIDNGRTU1NTU1IDU1NTU1NTkzICovCitMZzIgPSAzLjk5OTk5OTk5OTk0MDk0MTkwOGUtMDEsICAvKiAzRkQ5OTk5OSA5OTk3RkEwNCAqLworTGczID0gMi44NTcxNDI4NzQzNjYyMzkxNDllLTAxLCAgLyogM0ZEMjQ5MjQgOTQyMjkzNTkgKi8KK0xnNCA9IDIuMjIyMjE5ODQzMjE0OTc4Mzk2ZS0wMSwgIC8qIDNGQ0M3MUM1IDFEOEU3OEFGICovCitMZzUgPSAxLjgxODM1NzIxNjE2MTgwNTAxMmUtMDEsICAvKiAzRkM3NDY2NCA5NkNCMDNERSAqLworTGc2ID0gMS41MzEzODM3Njk5MjA5MzczMzJlLTAxLCAgLyogM0ZDMzlBMDkgRDA3OEM2OUYgKi8KK0xnNyA9IDEuNDc5ODE5ODYwNTExNjU4NTkxZS0wMTsgIC8qIDNGQzJGMTEyIERGM0U1MjQ0ICovCisKK3N0YXRpYyBjb25zdCBkb3VibGUgemVybyAgID0gIDAuMDsKK3N0YXRpYyB2b2xhdGlsZSBkb3VibGUgdnplcm8gPSAwLjA7CisKK2RvdWJsZQorX19pZWVlNzU0X2xvZyhkb3VibGUgeCkKK3sKKwlkb3VibGUgaGZzcSxmLHMseixSLHcsdDEsdDIsZGs7CisJaW50MzJfdCBrLGh4LGksajsKKwl1X2ludDMyX3QgbHg7CisKKwlFWFRSQUNUX1dPUkRTKGh4LGx4LHgpOworCisJaz0wOworCWlmIChoeCA8IDB4MDAxMDAwMDApIHsJCQkvKiB4IDwgMioqLTEwMjIgICovCisJICAgIGlmICgoKGh4JjB4N2ZmZmZmZmYpfGx4KT09MCkgCisJCXJldHVybiAtdHdvNTQvdnplcm87CQkvKiBsb2coKy0wKT0taW5mICovCisJICAgIGlmIChoeDwwKSByZXR1cm4gKHgteCkvemVybzsJLyogbG9nKC0jKSA9IE5hTiAqLworCSAgICBrIC09IDU0OyB4ICo9IHR3bzU0OyAvKiBzdWJub3JtYWwgbnVtYmVyLCBzY2FsZSB1cCB4ICovCisJICAgIEdFVF9ISUdIX1dPUkQoaHgseCk7CisJfSAKKwlpZiAoaHggPj0gMHg3ZmYwMDAwMCkgcmV0dXJuIHgreDsKKwlrICs9IChoeD4+MjApLTEwMjM7CisJaHggJj0gMHgwMDBmZmZmZjsKKwlpID0gKGh4KzB4OTVmNjQpJjB4MTAwMDAwOworCVNFVF9ISUdIX1dPUkQoeCxoeHwoaV4weDNmZjAwMDAwKSk7CS8qIG5vcm1hbGl6ZSB4IG9yIHgvMiAqLworCWsgKz0gKGk+PjIwKTsKKwlmID0geC0xLjA7CisJaWYoKDB4MDAwZmZmZmYmKDIraHgpKTwzKSB7CS8qIC0yKiotMjAgPD0gZiA8IDIqKi0yMCAqLworCSAgICBpZihmPT16ZXJvKSB7CisJCWlmKGs9PTApIHsKKwkJICAgIHJldHVybiB6ZXJvOworCQl9IGVsc2UgeworCQkgICAgZGs9KGRvdWJsZSlrOworCQkgICAgcmV0dXJuIGRrKmxuMl9oaStkaypsbjJfbG87CisJCX0KKwkgICAgfQorCSAgICBSID0gZipmKigwLjUtMC4zMzMzMzMzMzMzMzMzMzMzMypmKTsKKwkgICAgaWYoaz09MCkgcmV0dXJuIGYtUjsgZWxzZSB7ZGs9KGRvdWJsZSlrOworCSAgICAJICAgICByZXR1cm4gZGsqbG4yX2hpLSgoUi1kaypsbjJfbG8pLWYpO30KKwl9CisgCXMgPSBmLygyLjArZik7IAorCWRrID0gKGRvdWJsZSlrOworCXogPSBzKnM7CisJaSA9IGh4LTB4NjE0N2E7CisJdyA9IHoqejsKKwlqID0gMHg2Yjg1MS1oeDsKKwl0MT0gdyooTGcyK3cqKExnNCt3KkxnNikpOyAKKwl0Mj0geiooTGcxK3cqKExnMyt3KihMZzUrdypMZzcpKSk7IAorCWkgfD0gajsKKwlSID0gdDIrdDE7CisJaWYoaT4wKSB7CisJICAgIGhmc3E9MC41KmYqZjsKKwkgICAgaWYoaz09MCkgcmV0dXJuIGYtKGhmc3EtcyooaGZzcStSKSk7IGVsc2UKKwkJICAgICByZXR1cm4gZGsqbG4yX2hpLSgoaGZzcS0ocyooaGZzcStSKStkaypsbjJfbG8pKS1mKTsKKwl9IGVsc2UgeworCSAgICBpZihrPT0wKSByZXR1cm4gZi1zKihmLVIpOyBlbHNlCisJCSAgICAgcmV0dXJuIGRrKmxuMl9oaS0oKHMqKGYtUiktZGsqbG4yX2xvKS1mKTsKKwl9Cit9CisKKyNpZiAoTERCTF9NQU5UX0RJRyA9PSA1MykKK19fd2Vha19yZWZlcmVuY2UobG9nLCBsb2dsKTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9lX2xvZzEwLmMgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL2VfbG9nMTAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYzg5ZWQyCi0tLSAvZGV2L251bGwKKysrIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9lX2xvZzEwLmMKQEAgLTAsMCArMSw5NCBAQAorCisvKiBAKCMpZV9sb2cxMC5jIDEuMyA5NS8wMS8xOCAqLworLyoKKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIENvcHlyaWdodCAoQykgMTk5MyBieSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogRGV2ZWxvcGVkIGF0IFN1blNvZnQsIGEgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBidXNpbmVzcy4KKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKKyAqIHNvZnR3YXJlIGlzIGZyZWVseSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoaXMgbm90aWNlIAorICogaXMgcHJlc2VydmVkLgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJTRCQiKTsKKworLyoKKyAqIFJldHVybiB0aGUgYmFzZSAxMCBsb2dhcml0aG0gb2YgeC4gIFNlZSBlX2xvZy5jIGFuZCBrX2xvZy5oIGZvciBtb3N0CisgKiBjb21tZW50cy4KKyAqCisgKiAgICBsb2cxMCh4KSA9IChmIC0gMC41KmYqZiArIGtfbG9nMXAoZikpIC8gbG4xMCArIGsgKiBsb2cxMCgyKQorICogaW4gbm90LXF1aXRlLXJvdXRpbmUgZXh0cmEgcHJlY2lzaW9uLgorICovCisKKyNpbmNsdWRlIDxmbG9hdC5oPgorCisjaW5jbHVkZSAibWF0aC5oIgorI2luY2x1ZGUgIm1hdGhfcHJpdmF0ZS5oIgorI2luY2x1ZGUgImtfbG9nLmgiCisKK3N0YXRpYyBjb25zdCBkb3VibGUKK3R3bzU0ICAgICAgPSAgMS44MDE0Mzk4NTA5NDgxOTg0MDAwMGUrMTYsIC8qIDB4NDM1MDAwMDAsIDB4MDAwMDAwMDAgKi8KK2l2bG4xMGhpICAgPSAgNC4zNDI5NDQ4MTg3ODE2ODg4MDkzOWUtMDEsIC8qIDB4M2ZkYmNiN2IsIDB4MTUyMDAwMDAgKi8KK2l2bG4xMGxvICAgPSAgMi41MDgyOTQ2NzExNjQ1Mjc1MjI5OGUtMTEsIC8qIDB4M2RiYjk0MzgsIDB4Y2E5YWFkZDUgKi8KK2xvZzEwXzJoaSAgPSAgMy4wMTAyOTk5NTY2MzYxMTc3MTMwNmUtMDEsIC8qIDB4M0ZEMzQ0MTMsIDB4NTA5RjYwMDAgKi8KK2xvZzEwXzJsbyAgPSAgMy42OTQyMzkwNzcxNTg5MzA3ODYxNmUtMTM7IC8qIDB4M0Q1OUZFRjMsIDB4MTFGMTJCMzYgKi8KKworc3RhdGljIGNvbnN0IGRvdWJsZSB6ZXJvICAgPSAgMC4wOworc3RhdGljIHZvbGF0aWxlIGRvdWJsZSB2emVybyA9IDAuMDsKKworZG91YmxlCitfX2llZWU3NTRfbG9nMTAoZG91YmxlIHgpCit7CisJZG91YmxlIGYsaGZzcSxoaSxsbyxyLHZhbF9oaSx2YWxfbG8sdyx5LHkyOworCWludDMyX3QgaSxrLGh4OworCXVfaW50MzJfdCBseDsKKworCUVYVFJBQ1RfV09SRFMoaHgsbHgseCk7CisKKwlrPTA7CisJaWYgKGh4IDwgMHgwMDEwMDAwMCkgewkJCS8qIHggPCAyKiotMTAyMiAgKi8KKwkgICAgaWYgKCgoaHgmMHg3ZmZmZmZmZil8bHgpPT0wKQorCQlyZXR1cm4gLXR3bzU0L3Z6ZXJvOwkJLyogbG9nKCstMCk9LWluZiAqLworCSAgICBpZiAoaHg8MCkgcmV0dXJuICh4LXgpL3plcm87CS8qIGxvZygtIykgPSBOYU4gKi8KKwkgICAgayAtPSA1NDsgeCAqPSB0d281NDsgLyogc3Vibm9ybWFsIG51bWJlciwgc2NhbGUgdXAgeCAqLworCSAgICBHRVRfSElHSF9XT1JEKGh4LHgpOworCX0KKwlpZiAoaHggPj0gMHg3ZmYwMDAwMCkgcmV0dXJuIHgreDsKKwlpZiAoaHggPT0gMHgzZmYwMDAwMCAmJiBseCA9PSAwKQorCSAgICByZXR1cm4gemVybzsJCQkvKiBsb2coMSkgPSArMCAqLworCWsgKz0gKGh4Pj4yMCktMTAyMzsKKwloeCAmPSAweDAwMGZmZmZmOworCWkgPSAoaHgrMHg5NWY2NCkmMHgxMDAwMDA7CisJU0VUX0hJR0hfV09SRCh4LGh4fChpXjB4M2ZmMDAwMDApKTsJLyogbm9ybWFsaXplIHggb3IgeC8yICovCisJayArPSAoaT4+MjApOworCXkgPSAoZG91YmxlKWs7CisJZiA9IHggLSAxLjA7CisJaGZzcSA9IDAuNSpmKmY7CisJciA9IGtfbG9nMXAoZik7CisKKwkvKiBTZWUgZV9sb2cyLmMgZm9yIG1vc3QgZGV0YWlscy4gKi8KKwloaSA9IGYgLSBoZnNxOworCVNFVF9MT1dfV09SRChoaSwwKTsKKwlsbyA9IChmIC0gaGkpIC0gaGZzcSArIHI7CisJdmFsX2hpID0gaGkqaXZsbjEwaGk7CisJeTIgPSB5KmxvZzEwXzJoaTsKKwl2YWxfbG8gPSB5KmxvZzEwXzJsbyArIChsbytoaSkqaXZsbjEwbG8gKyBsbyppdmxuMTBoaTsKKworCS8qCisJICogRXh0cmEgcHJlY2lzaW9uIGluIGZvciBhZGRpbmcgeSpsb2cxMF8yaGkgaXMgbm90IHN0cmljdGx5IG5lZWRlZAorCSAqIHNpbmNlIHRoZXJlIGlzIG5vIHZlcnkgbGFyZ2UgY2FuY2VsbGF0aW9uIG5lYXIgeCA9IHNxcnQoMikgb3IKKwkgKiB4ID0gMS9zcXJ0KDIpLCBidXQgd2UgZG8gaXQgYW55d2F5IHNpbmNlIGl0IGNvc3RzIGxpdHRsZSBvbiBDUFVzCisJICogd2l0aCBzb21lIHBhcmFsbGVsaXNtIGFuZCBpdCByZWR1Y2VzIHRoZSBlcnJvciBmb3IgbWFueSBhcmdzLgorCSAqLworCXcgPSB5MiArIHZhbF9oaTsKKwl2YWxfbG8gKz0gKHkyIC0gdykgKyB2YWxfaGk7CisJdmFsX2hpID0gdzsKKworCXJldHVybiB2YWxfbG8gKyB2YWxfaGk7Cit9CisKKyNpZiAoTERCTF9NQU5UX0RJRyA9PSA1MykKK19fd2Vha19yZWZlcmVuY2UobG9nMTAsIGxvZzEwbCk7CisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvZV9sb2cxMGYuYyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvZV9sb2cxMGYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ODU2ZGYyCi0tLSAvZGV2L251bGwKKysrIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9lX2xvZzEwZi5jCkBAIC0wLDAgKzEsNzIgQEAKKy8qCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBDb3B5cmlnaHQgKEMpIDE5OTMgYnkgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIERldmVsb3BlZCBhdCBTdW5Qcm8sIGEgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBidXNpbmVzcy4KKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKKyAqIHNvZnR3YXJlIGlzIGZyZWVseSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoaXMgbm90aWNlCisgKiBpcyBwcmVzZXJ2ZWQuCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorX19GQlNESUQoIiRGcmVlQlNEJCIpOworCisvKgorICogRmxvYXQgdmVyc2lvbiBvZiBlX2xvZzEwLmMuICBTZWUgdGhlIGxhdHRlciBmb3IgbW9zdCBjb21tZW50cy4KKyAqLworCisjaW5jbHVkZSAibWF0aC5oIgorI2luY2x1ZGUgIm1hdGhfcHJpdmF0ZS5oIgorI2luY2x1ZGUgImtfbG9nZi5oIgorCitzdGF0aWMgY29uc3QgZmxvYXQKK3R3bzI1ICAgICAgPSAgMy4zNTU0NDMyMDAwZSswNywgLyogMHg0YzAwMDAwMCAqLworaXZsbjEwaGkgICA9ICA0LjM0MzI2MTcxODhlLTAxLCAvKiAweDNlZGU2MDAwICovCitpdmxuMTBsbyAgID0gLTMuMTY4OTk3MTM2NWUtMDUsIC8qIDB4YjgwNGVhZDkgKi8KK2xvZzEwXzJoaSAgPSAgMy4wMTAyOTIwNTMyZS0wMSwgLyogMHgzZTlhMjA4MCAqLworbG9nMTBfMmxvICA9ICA3LjkwMzQxNTE2NjhlLTA3OyAvKiAweDM1NTQyN2RiICovCisKK3N0YXRpYyBjb25zdCBmbG9hdCB6ZXJvICAgPSAgMC4wOworc3RhdGljIHZvbGF0aWxlIGZsb2F0IHZ6ZXJvID0gMC4wOworCitmbG9hdAorX19pZWVlNzU0X2xvZzEwZihmbG9hdCB4KQoreworCWZsb2F0IGYsaGZzcSxoaSxsbyxyLHk7CisJaW50MzJfdCBpLGssaHg7CisKKwlHRVRfRkxPQVRfV09SRChoeCx4KTsKKworCWs9MDsKKwlpZiAoaHggPCAweDAwODAwMDAwKSB7CQkJLyogeCA8IDIqKi0xMjYgICovCisJICAgIGlmICgoaHgmMHg3ZmZmZmZmZik9PTApCisJCXJldHVybiAtdHdvMjUvdnplcm87CQkvKiBsb2coKy0wKT0taW5mICovCisJICAgIGlmIChoeDwwKSByZXR1cm4gKHgteCkvemVybzsJLyogbG9nKC0jKSA9IE5hTiAqLworCSAgICBrIC09IDI1OyB4ICo9IHR3bzI1OyAvKiBzdWJub3JtYWwgbnVtYmVyLCBzY2FsZSB1cCB4ICovCisJICAgIEdFVF9GTE9BVF9XT1JEKGh4LHgpOworCX0KKwlpZiAoaHggPj0gMHg3ZjgwMDAwMCkgcmV0dXJuIHgreDsKKwlpZiAoaHggPT0gMHgzZjgwMDAwMCkKKwkgICAgcmV0dXJuIHplcm87CQkJLyogbG9nKDEpID0gKzAgKi8KKwlrICs9IChoeD4+MjMpLTEyNzsKKwloeCAmPSAweDAwN2ZmZmZmOworCWkgPSAoaHgrKDB4NGFmYjBkKSkmMHg4MDAwMDA7CisJU0VUX0ZMT0FUX1dPUkQoeCxoeHwoaV4weDNmODAwMDAwKSk7CS8qIG5vcm1hbGl6ZSB4IG9yIHgvMiAqLworCWsgKz0gKGk+PjIzKTsKKwl5ID0gKGZsb2F0KWs7CisJZiA9IHggLSAoZmxvYXQpMS4wOworCWhmc3EgPSAoZmxvYXQpMC41KmYqZjsKKwlyID0ga19sb2cxcGYoZik7CisKKwkvKiBTZWUgZV9sb2cyZi5jIGFuZCBlX2xvZzIuYyBmb3IgZGV0YWlscy4gKi8KKwlpZiAoc2l6ZW9mKGZsb2F0X3QpID4gc2l6ZW9mKGZsb2F0KSkKKwkJcmV0dXJuIChyIC0gaGZzcSArIGYpICogKChmbG9hdF90KWl2bG4xMGxvICsgaXZsbjEwaGkpICsKKwkJICAgIHkgKiAoKGZsb2F0X3QpbG9nMTBfMmxvICsgbG9nMTBfMmhpKTsKKwloaSA9IGYgLSBoZnNxOworCUdFVF9GTE9BVF9XT1JEKGh4LGhpKTsKKwlTRVRfRkxPQVRfV09SRChoaSxoeCYweGZmZmZmMDAwKTsKKwlsbyA9IChmIC0gaGkpIC0gaGZzcSArIHI7CisJcmV0dXJuIHkqbG9nMTBfMmxvICsgKGxvK2hpKSppdmxuMTBsbyArIGxvKml2bG4xMGhpICsgaGkqaXZsbjEwaGkgKworCSAgICB5KmxvZzEwXzJoaTsKK30KZGlmZiAtLWdpdCBhL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvZV9sb2cyLmMgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL2VfbG9nMi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3NjZjZGIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL2VfbG9nMi5jCkBAIC0wLDAgKzEsMTE3IEBACisKKy8qIEAoIyllX2xvZzEwLmMgMS4zIDk1LzAxLzE4ICovCisvKgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogQ29weXJpZ2h0IChDKSAxOTkzIGJ5IFN1biBNaWNyb3N5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBEZXZlbG9wZWQgYXQgU3VuU29mdCwgYSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGJ1c2luZXNzLgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcworICogc29mdHdhcmUgaXMgZnJlZWx5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhpcyBub3RpY2UgCisgKiBpcyBwcmVzZXJ2ZWQuCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorX19GQlNESUQoIiRGcmVlQlNEJCIpOworCisvKgorICogUmV0dXJuIHRoZSBiYXNlIDIgbG9nYXJpdGhtIG9mIHguICBTZWUgZV9sb2cuYyBhbmQga19sb2cuaCBmb3IgbW9zdAorICogY29tbWVudHMuCisgKgorICogVGhpcyByZWR1Y2VzIHggdG8ge2ssIDErZn0gZXhhY3RseSBhcyBpbiBlX2xvZy5jLCB0aGVuIGNhbGxzIHRoZSBrZXJuZWwsCisgKiB0aGVuIGRvZXMgdGhlIGNvbWJpbmluZyBhbmQgc2NhbGluZyBzdGVwcworICogICAgbG9nMih4KSA9IChmIC0gMC41KmYqZiArIGtfbG9nMXAoZikpIC8gbG4yICsgaworICogaW4gbm90LXF1aXRlLXJvdXRpbmUgZXh0cmEgcHJlY2lzaW9uLgorICovCisKKyNpbmNsdWRlIDxmbG9hdC5oPgorCisjaW5jbHVkZSAibWF0aC5oIgorI2luY2x1ZGUgIm1hdGhfcHJpdmF0ZS5oIgorI2luY2x1ZGUgImtfbG9nLmgiCisKK3N0YXRpYyBjb25zdCBkb3VibGUKK3R3bzU0ICAgICAgPSAgMS44MDE0Mzk4NTA5NDgxOTg0MDAwMGUrMTYsIC8qIDB4NDM1MDAwMDAsIDB4MDAwMDAwMDAgKi8KK2l2bG4yaGkgICAgPSAgMS40NDI2OTUwNDA3MjE0NDYyNzU3MWUrMDAsIC8qIDB4M2ZmNzE1NDcsIDB4NjUyMDAwMDAgKi8KK2l2bG4ybG8gICAgPSAgMS42NzUxNzEzMTY0ODg2NTExODM1M2UtMTA7IC8qIDB4M2RlNzA1ZmMsIDB4MmVlZmEyMDAgKi8KKworc3RhdGljIGNvbnN0IGRvdWJsZSB6ZXJvICAgPSAgMC4wOworc3RhdGljIHZvbGF0aWxlIGRvdWJsZSB2emVybyA9IDAuMDsKKworZG91YmxlCitfX2llZWU3NTRfbG9nMihkb3VibGUgeCkKK3sKKwlkb3VibGUgZixoZnNxLGhpLGxvLHIsdmFsX2hpLHZhbF9sbyx3LHk7CisJaW50MzJfdCBpLGssaHg7CisJdV9pbnQzMl90IGx4OworCisJRVhUUkFDVF9XT1JEUyhoeCxseCx4KTsKKworCWs9MDsKKwlpZiAoaHggPCAweDAwMTAwMDAwKSB7CQkJLyogeCA8IDIqKi0xMDIyICAqLworCSAgICBpZiAoKChoeCYweDdmZmZmZmZmKXxseCk9PTApCisJCXJldHVybiAtdHdvNTQvdnplcm87CQkvKiBsb2coKy0wKT0taW5mICovCisJICAgIGlmIChoeDwwKSByZXR1cm4gKHgteCkvemVybzsJLyogbG9nKC0jKSA9IE5hTiAqLworCSAgICBrIC09IDU0OyB4ICo9IHR3bzU0OyAvKiBzdWJub3JtYWwgbnVtYmVyLCBzY2FsZSB1cCB4ICovCisJICAgIEdFVF9ISUdIX1dPUkQoaHgseCk7CisJfQorCWlmIChoeCA+PSAweDdmZjAwMDAwKSByZXR1cm4geCt4OworCWlmIChoeCA9PSAweDNmZjAwMDAwICYmIGx4ID09IDApCisJICAgIHJldHVybiB6ZXJvOwkJCS8qIGxvZygxKSA9ICswICovCisJayArPSAoaHg+PjIwKS0xMDIzOworCWh4ICY9IDB4MDAwZmZmZmY7CisJaSA9IChoeCsweDk1ZjY0KSYweDEwMDAwMDsKKwlTRVRfSElHSF9XT1JEKHgsaHh8KGleMHgzZmYwMDAwMCkpOwkvKiBub3JtYWxpemUgeCBvciB4LzIgKi8KKwlrICs9IChpPj4yMCk7CisJeSA9IChkb3VibGUpazsKKwlmID0geCAtIDEuMDsKKwloZnNxID0gMC41KmYqZjsKKwlyID0ga19sb2cxcChmKTsKKworCS8qCisJICogZi1oZnNxIG11c3QgKGZvciBhcmdzIG5lYXIgMSkgYmUgZXZhbHVhdGVkIGluIGV4dHJhIHByZWNpc2lvbgorCSAqIHRvIGF2b2lkIGEgbGFyZ2UgY2FuY2VsbGF0aW9uIHdoZW4geCBpcyBuZWFyIHNxcnQoMikgb3IgMS9zcXJ0KDIpLgorCSAqIFRoaXMgaXMgZmFpcmx5IGVmZmljaWVudCBzaW5jZSBmLWhmc3Egb25seSBkZXBlbmRzIG9uIGYsIHNvIGNhbgorCSAqIGJlIGV2YWx1YXRlZCBpbiBwYXJhbGxlbCB3aXRoIFIuICBOb3QgY29tYmluaW5nIGhmc3Egd2l0aCBSIGFsc28KKwkgKiBrZWVwcyBSIHNtYWxsICh0aG91Z2ggbm90IGFzIHNtYWxsIGFzIGEgdHJ1ZSBgbG8nIHRlcm0gd291bGQgYmUpLAorCSAqIHNvIHRoYXQgZXh0cmEgcHJlY2lzaW9uIGlzIG5vdCBuZWVkZWQgZm9yIHRlcm1zIGludm9sdmluZyBSLgorCSAqCisJICogQ29tcGlsZXIgYnVncyBpbnZvbHZpbmcgZXh0cmEgcHJlY2lzaW9uIHVzZWQgdG8gYnJlYWsgRGVra2VyJ3MKKwkgKiB0aGVvcmVtIGZvciBzcGl0dGluZyBmLWhmc3EgYXMgaGkrbG8sIHVubGVzcyBkb3VibGVfdCB3YXMgdXNlZAorCSAqIG9yIHRoZSBtdWx0aS1wcmVjaXNpb24gY2FsY3VsYXRpb25zIHdlcmUgYXZvaWRlZCB3aGVuIGRvdWJsZV90CisJICogaGFzIGV4dHJhIHByZWNpc2lvbi4gIFRoZXNlIHByb2JsZW1zIGFyZSBub3cgYXV0b21hdGljYWxseQorCSAqIGF2b2lkZWQgYXMgYSBzaWRlIGVmZmVjdCBvZiB0aGUgb3B0aW1pemF0aW9uIG9mIGNvbWJpbmluZyB0aGUKKwkgKiBEZWtrZXIgc3BsaXR0aW5nIHN0ZXAgd2l0aCB0aGUgY2xlYXItbG93LWJpdHMgc3RlcC4KKwkgKgorCSAqIHkgbXVzdCAoZm9yIGFyZ3MgbmVhciBzcXJ0KDIpIGFuZCAxL3NxcnQoMikpIGJlIGFkZGVkIGluIGV4dHJhCisJICogcHJlY2lzaW9uIHRvIGF2b2lkIGEgdmVyeSBsYXJnZSBjYW5jZWxsYXRpb24gd2hlbiB4IGlzIHZlcnkgbmVhcgorCSAqIHRoZXNlIHZhbHVlcy4gIFVubGlrZSB0aGUgYWJvdmUgY2FuY2VsbGF0aW9ucywgdGhpcyBwcm9ibGVtIGlzCisJICogc3BlY2lmaWMgdG8gYmFzZSAyLiAgSXQgaXMgc3RyYW5nZSB0aGF0IGFkZGluZyArLTEgaXMgc28gbXVjaAorCSAqIGhhcmRlciB0aGFuIGFkZGluZyArLWxuMiBvciArLWxvZzEwXzIuCisJICoKKwkgKiBUaGlzIHVzZXMgRGVra2VyJ3MgdGhlb3JlbSB0byBub3JtYWxpemUgeSt2YWxfaGksIHNvIHRoZQorCSAqIGNvbXBpbGVyIGJ1Z3MgYXJlIGJhY2sgaW4gc29tZSBjb25maWd1cmF0aW9ucywgc2lnaC4gIEFuZCBJCisJICogZG9uJ3Qgd2FudCB0byB1c2VkIGRvdWJsZV90IHRvIGF2b2lkIHRoZW0sIHNpbmNlIHRoYXQgZ2l2ZXMgYQorCSAqIHBlc3NpbWl6YXRpb24gYW5kIHRoZSBzdXBwb3J0IGZvciBhdm9pZGluZyB0aGUgcGVzc2ltaXphdGlvbgorCSAqIGlzIG5vdCB5ZXQgYXZhaWxhYmxlLgorCSAqCisJICogVGhlIG11bHRpLXByZWNpc2lvbiBjYWxjdWxhdGlvbnMgZm9yIHRoZSBtdWx0aXBsaWNhdGlvbnMgYXJlCisJICogcm91dGluZS4KKwkgKi8KKwloaSA9IGYgLSBoZnNxOworCVNFVF9MT1dfV09SRChoaSwwKTsKKwlsbyA9IChmIC0gaGkpIC0gaGZzcSArIHI7CisJdmFsX2hpID0gaGkqaXZsbjJoaTsKKwl2YWxfbG8gPSAobG8raGkpKml2bG4ybG8gKyBsbyppdmxuMmhpOworCisJLyogc3BhZGQodmFsX2hpLCB2YWxfbG8sIHkpLCBleGNlcHQgZm9yIG5vdCB1c2luZyBkb3VibGVfdDogKi8KKwl3ID0geSArIHZhbF9oaTsKKwl2YWxfbG8gKz0gKHkgLSB3KSArIHZhbF9oaTsKKwl2YWxfaGkgPSB3OworCisJcmV0dXJuIHZhbF9sbyArIHZhbF9oaTsKK30KKworI2lmIChMREJMX01BTlRfRElHID09IDUzKQorX193ZWFrX3JlZmVyZW5jZShsb2cyLCBsb2cybCk7CisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvZV9sb2cyZi5jIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9lX2xvZzJmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTc5NDQ4NAotLS0gL2Rldi9udWxsCisrKyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvZV9sb2cyZi5jCkBAIC0wLDAgKzEsODIgQEAKKy8qCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBDb3B5cmlnaHQgKEMpIDE5OTMgYnkgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIERldmVsb3BlZCBhdCBTdW5Qcm8sIGEgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBidXNpbmVzcy4KKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKKyAqIHNvZnR3YXJlIGlzIGZyZWVseSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoaXMgbm90aWNlCisgKiBpcyBwcmVzZXJ2ZWQuCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorX19GQlNESUQoIiRGcmVlQlNEJCIpOworCisvKgorICogRmxvYXQgdmVyc2lvbiBvZiBlX2xvZzIuYy4gIFNlZSB0aGUgbGF0dGVyIGZvciBtb3N0IGNvbW1lbnRzLgorICovCisKKyNpbmNsdWRlICJtYXRoLmgiCisjaW5jbHVkZSAibWF0aF9wcml2YXRlLmgiCisjaW5jbHVkZSAia19sb2dmLmgiCisKK3N0YXRpYyBjb25zdCBmbG9hdAordHdvMjUgICAgICA9ICAzLjM1NTQ0MzIwMDBlKzA3LCAvKiAweDRjMDAwMDAwICovCitpdmxuMmhpICAgID0gIDEuNDQyODcxMDkzOGUrMDAsIC8qIDB4M2ZiOGIwMDAgKi8KK2l2bG4ybG8gICAgPSAtMS43NjA1Mjg1MzkzZS0wNDsgLyogMHhiOTM4OWFkNCAqLworCitzdGF0aWMgY29uc3QgZmxvYXQgemVybyAgID0gIDAuMDsKK3N0YXRpYyB2b2xhdGlsZSBmbG9hdCB2emVybyA9IDAuMDsKKworZmxvYXQKK19faWVlZTc1NF9sb2cyZihmbG9hdCB4KQoreworCWZsb2F0IGYsaGZzcSxoaSxsbyxyLHk7CisJaW50MzJfdCBpLGssaHg7CisKKwlHRVRfRkxPQVRfV09SRChoeCx4KTsKKworCWs9MDsKKwlpZiAoaHggPCAweDAwODAwMDAwKSB7CQkJLyogeCA8IDIqKi0xMjYgICovCisJICAgIGlmICgoaHgmMHg3ZmZmZmZmZik9PTApCisJCXJldHVybiAtdHdvMjUvdnplcm87CQkvKiBsb2coKy0wKT0taW5mICovCisJICAgIGlmIChoeDwwKSByZXR1cm4gKHgteCkvemVybzsJLyogbG9nKC0jKSA9IE5hTiAqLworCSAgICBrIC09IDI1OyB4ICo9IHR3bzI1OyAvKiBzdWJub3JtYWwgbnVtYmVyLCBzY2FsZSB1cCB4ICovCisJICAgIEdFVF9GTE9BVF9XT1JEKGh4LHgpOworCX0KKwlpZiAoaHggPj0gMHg3ZjgwMDAwMCkgcmV0dXJuIHgreDsKKwlpZiAoaHggPT0gMHgzZjgwMDAwMCkKKwkgICAgcmV0dXJuIHplcm87CQkJLyogbG9nKDEpID0gKzAgKi8KKwlrICs9IChoeD4+MjMpLTEyNzsKKwloeCAmPSAweDAwN2ZmZmZmOworCWkgPSAoaHgrKDB4NGFmYjBkKSkmMHg4MDAwMDA7CisJU0VUX0ZMT0FUX1dPUkQoeCxoeHwoaV4weDNmODAwMDAwKSk7CS8qIG5vcm1hbGl6ZSB4IG9yIHgvMiAqLworCWsgKz0gKGk+PjIzKTsKKwl5ID0gKGZsb2F0KWs7CisJZiA9IHggLSAoZmxvYXQpMS4wOworCWhmc3EgPSAoZmxvYXQpMC41KmYqZjsKKwlyID0ga19sb2cxcGYoZik7CisKKwkvKgorCSAqIFdlIG5vIGxvbmdlciBuZWVkIHRvIGF2b2lkIGZhbGxpbmcgaW50byB0aGUgbXVsdGktcHJlY2lzaW9uCisJICogY2FsY3VsYXRpb25zIGR1ZSB0byBjb21waWxlciBidWdzIGJyZWFraW5nIERla2tlcidzIHRoZW9yZW0uCisJICogS2VlcCBhdm9pZGluZyB0aGlzIGFzIGFuIG9wdGltaXphdGlvbi4gIFNlZSBlX2xvZzIuYyBmb3IgbW9yZQorCSAqIGRldGFpbHMgKHNvbWUgZGV0YWlscyBhcmUgaGVyZSBvbmx5IGJlY2F1c2UgdGhlIG9wdGltaXphdGlvbgorCSAqIGlzIG5vdCB5ZXQgYXZhaWxhYmxlIGluIGRvdWJsZSBwcmVjaXNpb24pLgorCSAqCisJICogQW5vdGhlciBjb21waWxlciBidWcgdHVybmVkIHVwLiAgV2l0aCBnY2Mgb24gaTM4NiwKKwkgKiAoaXZsbjJsbyArIGl2bG4yaGkpIHdvdWxkIGJlIGV2YWx1YXRlZCBpbiBmbG9hdCBwcmVjaXNpb24KKwkgKiBkZXNwaXRlIHJ1bnRpbWUgZXZhbHVhdGlvbnMgdXNpbmcgZG91YmxlIHByZWNpc2lvbi4gIFNvIHdlCisJICogbXVzdCBjYXN0IG9uZSBvZiBpdHMgdGVybXMgdG8gZmxvYXRfdC4gIFRoaXMgbWFrZXMgdGhlIHdob2xlCisJICogZXhwcmVzc2lvbiBoYXZlIHR5cGUgZmxvYXRfdCwgc28gcmV0dXJuIGlzIGZvcmNlZCB0byB3YXN0ZQorCSAqIHRpbWUgY2xvYmJlcmluZyBpdHMgZXh0cmEgcHJlY2lzaW9uLgorCSAqLworCWlmIChzaXplb2YoZmxvYXRfdCkgPiBzaXplb2YoZmxvYXQpKQorCQlyZXR1cm4gKHIgLSBoZnNxICsgZikgKiAoKGZsb2F0X3QpaXZsbjJsbyArIGl2bG4yaGkpICsgeTsKKworCWhpID0gZiAtIGhmc3E7CisJR0VUX0ZMT0FUX1dPUkQoaHgsaGkpOworCVNFVF9GTE9BVF9XT1JEKGhpLGh4JjB4ZmZmZmYwMDApOworCWxvID0gKGYgLSBoaSkgLSBoZnNxICsgcjsKKwlyZXR1cm4gKGxvK2hpKSppdmxuMmxvICsgbG8qaXZsbjJoaSArIGhpKml2bG4yaGkgKyB5OworfQpkaWZmIC0tZ2l0IGEvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9lX2xvZ2YuYyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvZV9sb2dmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWMzOTg1ZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvZV9sb2dmLmMKQEAgLTAsMCArMSw4OSBAQAorLyogZV9sb2dmLmMgLS0gZmxvYXQgdmVyc2lvbiBvZiBlX2xvZy5jLgorICogQ29udmVyc2lvbiB0byBmbG9hdCBieSBJYW4gTGFuY2UgVGF5bG9yLCBDeWdudXMgU3VwcG9ydCwgaWFuQGN5Z251cy5jb20uCisgKi8KKworLyoKKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIENvcHlyaWdodCAoQykgMTk5MyBieSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogRGV2ZWxvcGVkIGF0IFN1blBybywgYSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGJ1c2luZXNzLgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcworICogc29mdHdhcmUgaXMgZnJlZWx5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhpcyBub3RpY2UKKyAqIGlzIHByZXNlcnZlZC4KKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CitfX0ZCU0RJRCgiJEZyZWVCU0QkIik7CisKKyNpbmNsdWRlICJtYXRoLmgiCisjaW5jbHVkZSAibWF0aF9wcml2YXRlLmgiCisKK3N0YXRpYyBjb25zdCBmbG9hdAorbG4yX2hpID0gICA2LjkzMTM4MTIyNTZlLTAxLAkvKiAweDNmMzE3MTgwICovCitsbjJfbG8gPSAgIDkuMDU4MDAwNjE0NWUtMDYsCS8qIDB4MzcxN2Y3ZDEgKi8KK3R3bzI1ID0gICAgMy4zNTU0NDMyMDBlKzA3LAkvKiAweDRjMDAwMDAwICovCisvKiB8KGxvZygxK3MpLWxvZygxLXMpKS9zIC0gTGcocyl8IDwgMioqLTM0LjI0ICh+Wy00Ljk1ZS0xMSwgNC45N2UtMTFdKS4gKi8KK0xnMSA9ICAgICAgMHhhYWFhYWEuMHAtMjQsCS8qIDAuNjY2NjY2NjI2OTMgKi8KK0xnMiA9ICAgICAgMHhjY2NlMTMuMHAtMjUsCS8qIDAuNDAwMDA5NzIxNTIgKi8KK0xnMyA9ICAgICAgMHg5MWU5ZWUuMHAtMjUsCS8qIDAuMjg0OTg3ODY2ODggKi8KK0xnNCA9ICAgICAgMHhmODllMjYuMHAtMjY7CS8qIDAuMjQyNzkwNzg4NDEgKi8KKworc3RhdGljIGNvbnN0IGZsb2F0IHplcm8gICA9ICAwLjA7CitzdGF0aWMgdm9sYXRpbGUgZmxvYXQgdnplcm8gPSAwLjA7CisKK2Zsb2F0CitfX2llZWU3NTRfbG9nZihmbG9hdCB4KQoreworCWZsb2F0IGhmc3EsZixzLHosUix3LHQxLHQyLGRrOworCWludDMyX3QgayxpeCxpLGo7CisKKwlHRVRfRkxPQVRfV09SRChpeCx4KTsKKworCWs9MDsKKwlpZiAoaXggPCAweDAwODAwMDAwKSB7CQkJLyogeCA8IDIqKi0xMjYgICovCisJICAgIGlmICgoaXgmMHg3ZmZmZmZmZik9PTApCisJCXJldHVybiAtdHdvMjUvdnplcm87CQkvKiBsb2coKy0wKT0taW5mICovCisJICAgIGlmIChpeDwwKSByZXR1cm4gKHgteCkvemVybzsJLyogbG9nKC0jKSA9IE5hTiAqLworCSAgICBrIC09IDI1OyB4ICo9IHR3bzI1OyAvKiBzdWJub3JtYWwgbnVtYmVyLCBzY2FsZSB1cCB4ICovCisJICAgIEdFVF9GTE9BVF9XT1JEKGl4LHgpOworCX0KKwlpZiAoaXggPj0gMHg3ZjgwMDAwMCkgcmV0dXJuIHgreDsKKwlrICs9IChpeD4+MjMpLTEyNzsKKwlpeCAmPSAweDAwN2ZmZmZmOworCWkgPSAoaXgrKDB4OTVmNjQ8PDMpKSYweDgwMDAwMDsKKwlTRVRfRkxPQVRfV09SRCh4LGl4fChpXjB4M2Y4MDAwMDApKTsJLyogbm9ybWFsaXplIHggb3IgeC8yICovCisJayArPSAoaT4+MjMpOworCWYgPSB4LShmbG9hdCkxLjA7CisJaWYoKDB4MDA3ZmZmZmYmKDB4ODAwMCtpeCkpPDB4YzAwMCkgewkvKiAtMioqLTkgPD0gZiA8IDIqKi05ICovCisJICAgIGlmKGY9PXplcm8pIHsKKwkJaWYoaz09MCkgeworCQkgICAgcmV0dXJuIHplcm87CisJCX0gZWxzZSB7CisJCSAgICBkaz0oZmxvYXQpazsKKwkJICAgIHJldHVybiBkaypsbjJfaGkrZGsqbG4yX2xvOworCQl9CisJICAgIH0KKwkgICAgUiA9IGYqZiooKGZsb2F0KTAuNS0oZmxvYXQpMC4zMzMzMzMzMzMzMzMzMzMzMypmKTsKKwkgICAgaWYoaz09MCkgcmV0dXJuIGYtUjsgZWxzZSB7ZGs9KGZsb2F0KWs7CisJICAgIAkgICAgIHJldHVybiBkaypsbjJfaGktKChSLWRrKmxuMl9sbyktZik7fQorCX0KKyAJcyA9IGYvKChmbG9hdCkyLjArZik7CisJZGsgPSAoZmxvYXQpazsKKwl6ID0gcypzOworCWkgPSBpeC0oMHg2MTQ3YTw8Myk7CisJdyA9IHoqejsKKwlqID0gKDB4NmI4NTE8PDMpLWl4OworCXQxPSB3KihMZzIrdypMZzQpOworCXQyPSB6KihMZzErdypMZzMpOworCWkgfD0gajsKKwlSID0gdDIrdDE7CisJaWYoaT4wKSB7CisJICAgIGhmc3E9KGZsb2F0KTAuNSpmKmY7CisJICAgIGlmKGs9PTApIHJldHVybiBmLShoZnNxLXMqKGhmc3ErUikpOyBlbHNlCisJCSAgICAgcmV0dXJuIGRrKmxuMl9oaS0oKGhmc3EtKHMqKGhmc3ErUikrZGsqbG4yX2xvKSktZik7CisJfSBlbHNlIHsKKwkgICAgaWYoaz09MCkgcmV0dXJuIGYtcyooZi1SKTsgZWxzZQorCQkgICAgIHJldHVybiBkaypsbjJfaGktKChzKihmLVIpLWRrKmxuMl9sbyktZik7CisJfQorfQpkaWZmIC0tZ2l0IGEvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9lX3Bvdy5jIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9lX3Bvdy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2MDdhNGEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL2VfcG93LmMKQEAgLTAsMCArMSwzMDYgQEAKKy8qIEAoIyllX3Bvdy5jIDEuNSAwNC8wNC8yMiBTTUkgKi8KKy8qCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQgYnkgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKKyAqIHNvZnR3YXJlIGlzIGZyZWVseSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoaXMgbm90aWNlIAorICogaXMgcHJlc2VydmVkLgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJTRCQiKTsKKworLyogX19pZWVlNzU0X3Bvdyh4LHkpIHJldHVybiB4Kip5CisgKgorICoJCSAgICAgIG4KKyAqIE1ldGhvZDogIExldCB4ID0gIDIgICAqICgxK2YpCisgKgkxLiBDb21wdXRlIGFuZCByZXR1cm4gbG9nMih4KSBpbiB0d28gcGllY2VzOgorICoJCWxvZzIoeCkgPSB3MSArIHcyLAorICoJICAgd2hlcmUgdzEgaGFzIDUzLTI0ID0gMjkgYml0IHRyYWlsaW5nIHplcm9zLgorICoJMi4gUGVyZm9ybSB5KmxvZzIoeCkgPSBuK3knIGJ5IHNpbXVsYXRpbmcgbXV0aS1wcmVjaXNpb24gCisgKgkgICBhcml0aG1ldGljLCB3aGVyZSB8eSd8PD0wLjUuCisgKgkzLiBSZXR1cm4geCoqeSA9IDIqKm4qZXhwKHknKmxvZzIpCisgKgorICogU3BlY2lhbCBjYXNlczoKKyAqCTEuICAoYW55dGhpbmcpICoqIDAgIGlzIDEKKyAqCTIuICAoYW55dGhpbmcpICoqIDEgIGlzIGl0c2VsZgorICoJMy4gIChhbnl0aGluZykgKiogTkFOIGlzIE5BTgorICoJNC4gIE5BTiAqKiAoYW55dGhpbmcgZXhjZXB0IDApIGlzIE5BTgorICoJNS4gICstKHx4fCA+IDEpICoqICArSU5GIGlzICtJTkYKKyAqCTYuICArLSh8eHwgPiAxKSAqKiAgLUlORiBpcyArMAorICoJNy4gICstKHx4fCA8IDEpICoqICArSU5GIGlzICswCisgKgk4LiAgKy0ofHh8IDwgMSkgKiogIC1JTkYgaXMgK0lORgorICoJOS4gICstMSAgICAgICAgICoqICstSU5GIGlzIE5BTgorICoJMTAuICswICoqICgrYW55dGhpbmcgZXhjZXB0IDAsIE5BTikgICAgICAgICAgICAgICBpcyArMAorICoJMTEuIC0wICoqICgrYW55dGhpbmcgZXhjZXB0IDAsIE5BTiwgb2RkIGludGVnZXIpICBpcyArMAorICoJMTIuICswICoqICgtYW55dGhpbmcgZXhjZXB0IDAsIE5BTikgICAgICAgICAgICAgICBpcyArSU5GCisgKgkxMy4gLTAgKiogKC1hbnl0aGluZyBleGNlcHQgMCwgTkFOLCBvZGQgaW50ZWdlcikgIGlzICtJTkYKKyAqCTE0LiAtMCAqKiAob2RkIGludGVnZXIpID0gLSggKzAgKiogKG9kZCBpbnRlZ2VyKSApCisgKgkxNS4gK0lORiAqKiAoK2FueXRoaW5nIGV4Y2VwdCAwLE5BTikgaXMgK0lORgorICoJMTYuICtJTkYgKiogKC1hbnl0aGluZyBleGNlcHQgMCxOQU4pIGlzICswCisgKgkxNy4gLUlORiAqKiAoYW55dGhpbmcpICA9IC0wICoqICgtYW55dGhpbmcpCisgKgkxOC4gKC1hbnl0aGluZykgKiogKGludGVnZXIpIGlzICgtMSkqKihpbnRlZ2VyKSooK2FueXRoaW5nKippbnRlZ2VyKQorICoJMTkuICgtYW55dGhpbmcgZXhjZXB0IDAgYW5kIGluZikgKiogKG5vbi1pbnRlZ2VyKSBpcyBOQU4KKyAqCisgKiBBY2N1cmFjeToKKyAqCXBvdyh4LHkpIHJldHVybnMgeCoqeSBuZWFybHkgcm91bmRlZC4gSW4gcGFydGljdWxhcgorICoJCQlwb3coaW50ZWdlcixpbnRlZ2VyKQorICoJYWx3YXlzIHJldHVybnMgdGhlIGNvcnJlY3QgaW50ZWdlciBwcm92aWRlZCBpdCBpcyAKKyAqCXJlcHJlc2VudGFibGUuCisgKgorICogQ29uc3RhbnRzIDoKKyAqIFRoZSBoZXhhZGVjaW1hbCB2YWx1ZXMgYXJlIHRoZSBpbnRlbmRlZCBvbmVzIGZvciB0aGUgZm9sbG93aW5nIAorICogY29uc3RhbnRzLiBUaGUgZGVjaW1hbCB2YWx1ZXMgbWF5IGJlIHVzZWQsIHByb3ZpZGVkIHRoYXQgdGhlIAorICogY29tcGlsZXIgd2lsbCBjb252ZXJ0IGZyb20gZGVjaW1hbCB0byBiaW5hcnkgYWNjdXJhdGVseSBlbm91Z2ggCisgKiB0byBwcm9kdWNlIHRoZSBoZXhhZGVjaW1hbCB2YWx1ZXMgc2hvd24uCisgKi8KKworI2luY2x1ZGUgIm1hdGguaCIKKyNpbmNsdWRlICJtYXRoX3ByaXZhdGUuaCIKKworc3RhdGljIGNvbnN0IGRvdWJsZQorYnBbXSA9IHsxLjAsIDEuNSx9LAorZHBfaFtdID0geyAwLjAsIDUuODQ5NjI0ODcyMjA3NjQxNjAxNTZlLTAxLH0sIC8qIDB4M0ZFMkI4MDMsIDB4NDAwMDAwMDAgKi8KK2RwX2xbXSA9IHsgMC4wLCAxLjM1MDAzOTIwMjEyOTc0ODk3MTI4ZS0wOCx9LCAvKiAweDNFNENGREVCLCAweDQzQ0ZEMDA2ICovCit6ZXJvICAgID0gIDAuMCwKK29uZQk9ICAxLjAsCit0d28JPSAgMi4wLAordHdvNTMJPSAgOTAwNzE5OTI1NDc0MDk5Mi4wLAkvKiAweDQzNDAwMDAwLCAweDAwMDAwMDAwICovCitodWdlCT0gIDEuMGUzMDAsCit0aW55ICAgID0gIDEuMGUtMzAwLAorCS8qIHBvbHkgY29lZnMgZm9yICgzLzIpKihsb2coeCktMnMtMi8zKnMqKjMgKi8KK0wxICA9ICA1Ljk5OTk5OTk5OTk5OTk0NjQ4NzI1ZS0wMSwgLyogMHgzRkUzMzMzMywgMHgzMzMzMzMwMyAqLworTDIgID0gIDQuMjg1NzE0Mjg1Nzg1NTAxODQyNTJlLTAxLCAvKiAweDNGREI2REI2LCAweERCNkZBQkZGICovCitMMyAgPSAgMy4zMzMzMzMyOTgxODM3NzQzMjkxOGUtMDEsIC8qIDB4M0ZENTU1NTUsIDB4NTE4RjI2NEQgKi8KK0w0ICA9ICAyLjcyNzI4MTIzODA4NTM0MDA2NDg5ZS0wMSwgLyogMHgzRkQxNzQ2MCwgMHhBOTFENDEwMSAqLworTDUgID0gIDIuMzA2NjA3NDU3NzU1NjE3NTQwNjdlLTAxLCAvKiAweDNGQ0Q4NjRBLCAweDkzQzlEQjY1ICovCitMNiAgPSAgMi4wNjk3NTAxNzgwMDMzODQxNzc4NGUtMDEsIC8qIDB4M0ZDQTdFMjgsIDB4NEE0NTRFRUYgKi8KK1AxICAgPSAgMS42NjY2NjY2NjY2NjY2NjAxOTAzN2UtMDEsIC8qIDB4M0ZDNTU1NTUsIDB4NTU1NTU1M0UgKi8KK1AyICAgPSAtMi43Nzc3Nzc3Nzc3MDE1NTkzMzg0MmUtMDMsIC8qIDB4QkY2NkMxNkMsIDB4MTZCRUJEOTMgKi8KK1AzICAgPSAgNi42MTM3NTYzMjE0Mzc5MzQzNjExN2UtMDUsIC8qIDB4M0YxMTU2NkEsIDB4QUYyNURFMkMgKi8KK1A0ICAgPSAtMS42NTMzOTAyMjA1NDY1MjUxNTM5MGUtMDYsIC8qIDB4QkVCQkJENDEsIDB4QzVEMjZCRjEgKi8KK1A1ICAgPSAgNC4xMzgxMzY3OTcwNTcyMzg0NjAzOWUtMDgsIC8qIDB4M0U2NjM3NjksIDB4NzJCRUE0RDAgKi8KK2xnMiAgPSAgNi45MzE0NzE4MDU1OTk0NTI4NjIyN2UtMDEsIC8qIDB4M0ZFNjJFNDIsIDB4RkVGQTM5RUYgKi8KK2xnMl9oICA9ICA2LjkzMTQ3MTgyNDY0NTk5NjA5Mzc1ZS0wMSwgLyogMHgzRkU2MkU0MywgMHgwMDAwMDAwMCAqLworbGcyX2wgID0gLTEuOTA0NjU0Mjk5OTU3NzY4MDQ1MjVlLTA5LCAvKiAweEJFMjA1QzYxLCAweDBDQTg2QzM5ICovCitvdnQgPSAgOC4wMDg1NjYyNTk1MzcyOTQ0MzcyZS0wMDE3LCAvKiAtKDEwMjQtbG9nMihvdmZsKy41dWxwKSkgKi8KK2NwICAgID0gIDkuNjE3OTY2OTM5MjU5NzU1NTQzMjllLTAxLCAvKiAweDNGRUVDNzA5LCAweERDM0EwM0ZEID0yLygzbG4yKSAqLworY3BfaCAgPSAgOS42MTc5NjcwMDk1NDQzNzI1NTg1OWUtMDEsIC8qIDB4M0ZFRUM3MDksIDB4RTAwMDAwMDAgPShmbG9hdCljcCAqLworY3BfbCAgPSAtNy4wMjg0NjE2NTA5NTI3NTgyNjUxNmUtMDksIC8qIDB4QkUzRTJGRTAsIDB4MTQ1QjAxRjUgPXRhaWwgb2YgY3BfaCovCitpdmxuMiAgICA9ICAxLjQ0MjY5NTA0MDg4ODk2MzM4NzAwZSswMCwgLyogMHgzRkY3MTU0NywgMHg2NTJCODJGRSA9MS9sbjIgKi8KK2l2bG4yX2ggID0gIDEuNDQyNjk1MDIxNjI5MzMzNDk2MDllKzAwLCAvKiAweDNGRjcxNTQ3LCAweDYwMDAwMDAwID0yNGIgMS9sbjIqLworaXZsbjJfbCAgPSAgMS45MjU5NjI5OTExMjY2MTc0Njg4N2UtMDg7IC8qIDB4M0U1NEFFMEIsIDB4Rjg1RERGNDQgPTEvbG4yIHRhaWwqLworCitkb3VibGUKK19faWVlZTc1NF9wb3coZG91YmxlIHgsIGRvdWJsZSB5KQoreworCWRvdWJsZSB6LGF4LHpfaCx6X2wscF9oLHBfbDsKKwlkb3VibGUgeTEsdDEsdDIscixzLHQsdSx2LHc7CisJaW50MzJfdCBpLGosayx5aXNpbnQsbjsKKwlpbnQzMl90IGh4LGh5LGl4LGl5OworCXVfaW50MzJfdCBseCxseTsKKworCUVYVFJBQ1RfV09SRFMoaHgsbHgseCk7CisJRVhUUkFDVF9XT1JEUyhoeSxseSx5KTsKKwlpeCA9IGh4JjB4N2ZmZmZmZmY7ICBpeSA9IGh5JjB4N2ZmZmZmZmY7CisKKyAgICAvKiB5PT16ZXJvOiB4KiowID0gMSAqLworCWlmKChpeXxseSk9PTApIHJldHVybiBvbmU7IAkKKworICAgIC8qIHg9PTE6IDEqKnkgPSAxLCBldmVuIGlmIHkgaXMgTmFOICovCisJaWYgKGh4PT0weDNmZjAwMDAwICYmIGx4ID09IDApIHJldHVybiBvbmU7CisKKyAgICAvKiB5IT16ZXJvOiByZXN1bHQgaXMgTmFOIGlmIGVpdGhlciBhcmcgaXMgTmFOICovCisJaWYoaXggPiAweDdmZjAwMDAwIHx8ICgoaXg9PTB4N2ZmMDAwMDApJiYobHghPTApKSB8fAorCSAgIGl5ID4gMHg3ZmYwMDAwMCB8fCAoKGl5PT0weDdmZjAwMDAwKSYmKGx5IT0wKSkpIAorCQlyZXR1cm4gKHgrMC4wKSsoeSswLjApOworCisgICAgLyogZGV0ZXJtaW5lIGlmIHkgaXMgYW4gb2RkIGludCB3aGVuIHggPCAwCisgICAgICogeWlzaW50ID0gMAkuLi4geSBpcyBub3QgYW4gaW50ZWdlcgorICAgICAqIHlpc2ludCA9IDEJLi4uIHkgaXMgYW4gb2RkIGludAorICAgICAqIHlpc2ludCA9IDIJLi4uIHkgaXMgYW4gZXZlbiBpbnQKKyAgICAgKi8KKwl5aXNpbnQgID0gMDsKKwlpZihoeDwwKSB7CQorCSAgICBpZihpeT49MHg0MzQwMDAwMCkgeWlzaW50ID0gMjsgLyogZXZlbiBpbnRlZ2VyIHkgKi8KKwkgICAgZWxzZSBpZihpeT49MHgzZmYwMDAwMCkgeworCQlrID0gKGl5Pj4yMCktMHgzZmY7CSAgIC8qIGV4cG9uZW50ICovCisJCWlmKGs+MjApIHsKKwkJICAgIGogPSBseT4+KDUyLWspOworCQkgICAgaWYoKGo8PCg1Mi1rKSk9PWx5KSB5aXNpbnQgPSAyLShqJjEpOworCQl9IGVsc2UgaWYobHk9PTApIHsKKwkJICAgIGogPSBpeT4+KDIwLWspOworCQkgICAgaWYoKGo8PCgyMC1rKSk9PWl5KSB5aXNpbnQgPSAyLShqJjEpOworCQl9CisJICAgIH0JCQorCX0gCisKKyAgICAvKiBzcGVjaWFsIHZhbHVlIG9mIHkgKi8KKwlpZihseT09MCkgeyAJCisJICAgIGlmIChpeT09MHg3ZmYwMDAwMCkgewkvKiB5IGlzICstaW5mICovCisJICAgICAgICBpZigoKGl4LTB4M2ZmMDAwMDApfGx4KT09MCkKKwkJICAgIHJldHVybiAgb25lOwkvKiAoLTEpKiorLWluZiBpcyBOYU4gKi8KKwkgICAgICAgIGVsc2UgaWYgKGl4ID49IDB4M2ZmMDAwMDApLyogKHx4fD4xKSoqKy1pbmYgPSBpbmYsMCAqLworCQkgICAgcmV0dXJuIChoeT49MCk/IHk6IHplcm87CisJICAgICAgICBlbHNlCQkJLyogKHx4fDwxKSoqLSwraW5mID0gaW5mLDAgKi8KKwkJICAgIHJldHVybiAoaHk8MCk/LXk6IHplcm87CisJICAgIH0gCisJICAgIGlmKGl5PT0weDNmZjAwMDAwKSB7CS8qIHkgaXMgICstMSAqLworCQlpZihoeTwwKSByZXR1cm4gb25lL3g7IGVsc2UgcmV0dXJuIHg7CisJICAgIH0KKwkgICAgaWYoaHk9PTB4NDAwMDAwMDApIHJldHVybiB4Kng7IC8qIHkgaXMgIDIgKi8KKwkgICAgaWYoaHk9PTB4M2ZlMDAwMDApIHsJLyogeSBpcyAgMC41ICovCisJCWlmKGh4Pj0wKQkvKiB4ID49ICswICovCisJCXJldHVybiBzcXJ0KHgpOwkKKwkgICAgfQorCX0KKworCWF4ICAgPSBmYWJzKHgpOworICAgIC8qIHNwZWNpYWwgdmFsdWUgb2YgeCAqLworCWlmKGx4PT0wKSB7CisJICAgIGlmKGl4PT0weDdmZjAwMDAwfHxpeD09MHx8aXg9PTB4M2ZmMDAwMDApeworCQl6ID0gYXg7CQkJLyp4IGlzICstMCwrLWluZiwrLTEqLworCQlpZihoeTwwKSB6ID0gb25lL3o7CS8qIHogPSAoMS98eHwpICovCisJCWlmKGh4PDApIHsKKwkJICAgIGlmKCgoaXgtMHgzZmYwMDAwMCl8eWlzaW50KT09MCkgeworCQkJeiA9ICh6LXopLyh6LXopOyAvKiAoLTEpKipub24taW50IGlzIE5hTiAqLworCQkgICAgfSBlbHNlIGlmKHlpc2ludD09MSkgCisJCQl6ID0gLXo7CQkvKiAoeDwwKSoqb2RkID0gLSh8eHwqKm9kZCkgKi8KKwkJfQorCQlyZXR1cm4gejsKKwkgICAgfQorCX0KKyAgICAKKyAgICAvKiBDWUdOVVMgTE9DQUwgKyBmZGxpYm0tNS4zIGZpeDogVGhpcyB1c2VkIHRvIGJlCisJbiA9IChoeD4+MzEpKzE7CisgICAgICAgYnV0IEFOU0kgQyBzYXlzIGEgcmlnaHQgc2hpZnQgb2YgYSBzaWduZWQgbmVnYXRpdmUgcXVhbnRpdHkgaXMKKyAgICAgICBpbXBsZW1lbnRhdGlvbiBkZWZpbmVkLiAgKi8KKwluID0gKCh1X2ludDMyX3QpaHg+PjMxKS0xOworCisgICAgLyogKHg8MCkqKihub24taW50KSBpcyBOYU4gKi8KKwlpZigobnx5aXNpbnQpPT0wKSByZXR1cm4gKHgteCkvKHgteCk7CisKKwlzID0gb25lOyAvKiBzIChzaWduIG9mIHJlc3VsdCAtdmUqKm9kZCkgPSAtMSBlbHNlID0gMSAqLworCWlmKChufCh5aXNpbnQtMSkpPT0wKSBzID0gLW9uZTsvKiAoLXZlKSoqKG9kZCBpbnQpICovCisKKyAgICAvKiB8eXwgaXMgaHVnZSAqLworCWlmKGl5PjB4NDFlMDAwMDApIHsgLyogaWYgfHl8ID4gMioqMzEgKi8KKwkgICAgaWYoaXk+MHg0M2YwMDAwMCl7CS8qIGlmIHx5fCA+IDIqKjY0LCBtdXN0IG8vdWZsb3cgKi8KKwkJaWYoaXg8PTB4M2ZlZmZmZmYpIHJldHVybiAoaHk8MCk/IGh1Z2UqaHVnZTp0aW55KnRpbnk7CisJCWlmKGl4Pj0weDNmZjAwMDAwKSByZXR1cm4gKGh5PjApPyBodWdlKmh1Z2U6dGlueSp0aW55OworCSAgICB9CisJLyogb3Zlci91bmRlcmZsb3cgaWYgeCBpcyBub3QgY2xvc2UgdG8gb25lICovCisJICAgIGlmKGl4PDB4M2ZlZmZmZmYpIHJldHVybiAoaHk8MCk/IHMqaHVnZSpodWdlOnMqdGlueSp0aW55OworCSAgICBpZihpeD4weDNmZjAwMDAwKSByZXR1cm4gKGh5PjApPyBzKmh1Z2UqaHVnZTpzKnRpbnkqdGlueTsKKwkvKiBub3cgfDEteHwgaXMgdGlueSA8PSAyKiotMjAsIHN1ZmZpY2UgdG8gY29tcHV0ZSAKKwkgICBsb2coeCkgYnkgeC14XjIvMit4XjMvMy14XjQvNCAqLworCSAgICB0ID0gYXgtb25lOwkJLyogdCBoYXMgMjAgdHJhaWxpbmcgemVyb3MgKi8KKwkgICAgdyA9ICh0KnQpKigwLjUtdCooMC4zMzMzMzMzMzMzMzMzMzMzMzMzMzMzLXQqMC4yNSkpOworCSAgICB1ID0gaXZsbjJfaCp0OwkvKiBpdmxuMl9oIGhhcyAyMSBzaWcuIGJpdHMgKi8KKwkgICAgdiA9IHQqaXZsbjJfbC13Kml2bG4yOworCSAgICB0MSA9IHUrdjsKKwkgICAgU0VUX0xPV19XT1JEKHQxLDApOworCSAgICB0MiA9IHYtKHQxLXUpOworCX0gZWxzZSB7CisJICAgIGRvdWJsZSBzcyxzMixzX2gsc19sLHRfaCx0X2w7CisJICAgIG4gPSAwOworCS8qIHRha2UgY2FyZSBzdWJub3JtYWwgbnVtYmVyICovCisJICAgIGlmKGl4PDB4MDAxMDAwMDApCisJCXtheCAqPSB0d281MzsgbiAtPSA1MzsgR0VUX0hJR0hfV09SRChpeCxheCk7IH0KKwkgICAgbiAgKz0gKChpeCk+PjIwKS0weDNmZjsKKwkgICAgaiAgPSBpeCYweDAwMGZmZmZmOworCS8qIGRldGVybWluZSBpbnRlcnZhbCAqLworCSAgICBpeCA9IGp8MHgzZmYwMDAwMDsJCS8qIG5vcm1hbGl6ZSBpeCAqLworCSAgICBpZihqPD0weDM5ODhFKSBrPTA7CQkvKiB8eHw8c3FydCgzLzIpICovCisJICAgIGVsc2UgaWYoajwweEJCNjdBKSBrPTE7CS8qIHx4fDxzcXJ0KDMpICAgKi8KKwkgICAgZWxzZSB7az0wO24rPTE7aXggLT0gMHgwMDEwMDAwMDt9CisJICAgIFNFVF9ISUdIX1dPUkQoYXgsaXgpOworCisJLyogY29tcHV0ZSBzcyA9IHNfaCtzX2wgPSAoeC0xKS8oeCsxKSBvciAoeC0xLjUpLyh4KzEuNSkgKi8KKwkgICAgdSA9IGF4LWJwW2tdOwkJLyogYnBbMF09MS4wLCBicFsxXT0xLjUgKi8KKwkgICAgdiA9IG9uZS8oYXgrYnBba10pOworCSAgICBzcyA9IHUqdjsKKwkgICAgc19oID0gc3M7CisJICAgIFNFVF9MT1dfV09SRChzX2gsMCk7CisJLyogdF9oPWF4K2JwW2tdIEhpZ2ggKi8KKwkgICAgdF9oID0gemVybzsKKwkgICAgU0VUX0hJR0hfV09SRCh0X2gsKChpeD4+MSl8MHgyMDAwMDAwMCkrMHgwMDA4MDAwMCsoazw8MTgpKTsKKwkgICAgdF9sID0gYXggLSAodF9oLWJwW2tdKTsKKwkgICAgc19sID0gdiooKHUtc19oKnRfaCktc19oKnRfbCk7CisJLyogY29tcHV0ZSBsb2coYXgpICovCisJICAgIHMyID0gc3Mqc3M7CisJICAgIHIgPSBzMipzMiooTDErczIqKEwyK3MyKihMMytzMiooTDQrczIqKEw1K3MyKkw2KSkpKSk7CisJICAgIHIgKz0gc19sKihzX2grc3MpOworCSAgICBzMiAgPSBzX2gqc19oOworCSAgICB0X2ggPSAzLjArczIrcjsKKwkgICAgU0VUX0xPV19XT1JEKHRfaCwwKTsKKwkgICAgdF9sID0gci0oKHRfaC0zLjApLXMyKTsKKwkvKiB1K3YgPSBzcyooMSsuLi4pICovCisJICAgIHUgPSBzX2gqdF9oOworCSAgICB2ID0gc19sKnRfaCt0X2wqc3M7CisJLyogMi8oM2xvZzIpKihzcysuLi4pICovCisJICAgIHBfaCA9IHUrdjsKKwkgICAgU0VUX0xPV19XT1JEKHBfaCwwKTsKKwkgICAgcF9sID0gdi0ocF9oLXUpOworCSAgICB6X2ggPSBjcF9oKnBfaDsJCS8qIGNwX2grY3BfbCA9IDIvKDMqbG9nMikgKi8KKwkgICAgel9sID0gY3BfbCpwX2grcF9sKmNwK2RwX2xba107CisJLyogbG9nMihheCkgPSAoc3MrLi4pKjIvKDMqbG9nMikgPSBuICsgZHBfaCArIHpfaCArIHpfbCAqLworCSAgICB0ID0gKGRvdWJsZSluOworCSAgICB0MSA9ICgoKHpfaCt6X2wpK2RwX2hba10pK3QpOworCSAgICBTRVRfTE9XX1dPUkQodDEsMCk7CisJICAgIHQyID0gel9sLSgoKHQxLXQpLWRwX2hba10pLXpfaCk7CisJfQorCisgICAgLyogc3BsaXQgdXAgeSBpbnRvIHkxK3kyIGFuZCBjb21wdXRlICh5MSt5MikqKHQxK3QyKSAqLworCXkxICA9IHk7CisJU0VUX0xPV19XT1JEKHkxLDApOworCXBfbCA9ICh5LXkxKSp0MSt5KnQyOworCXBfaCA9IHkxKnQxOworCXogPSBwX2wrcF9oOworCUVYVFJBQ1RfV09SRFMoaixpLHopOworCWlmIChqPj0weDQwOTAwMDAwKSB7CQkJCS8qIHogPj0gMTAyNCAqLworCSAgICBpZigoKGotMHg0MDkwMDAwMCl8aSkhPTApCQkJLyogaWYgeiA+IDEwMjQgKi8KKwkJcmV0dXJuIHMqaHVnZSpodWdlOwkJCS8qIG92ZXJmbG93ICovCisJICAgIGVsc2UgeworCQlpZihwX2wrb3Z0PnotcF9oKSByZXR1cm4gcypodWdlKmh1Z2U7CS8qIG92ZXJmbG93ICovCisJICAgIH0KKwl9IGVsc2UgaWYoKGomMHg3ZmZmZmZmZik+PTB4NDA5MGNjMDAgKSB7CS8qIHogPD0gLTEwNzUgKi8KKwkgICAgaWYoKChqLTB4YzA5MGNjMDApfGkpIT0wKSAJCS8qIHogPCAtMTA3NSAqLworCQlyZXR1cm4gcyp0aW55KnRpbnk7CQkvKiB1bmRlcmZsb3cgKi8KKwkgICAgZWxzZSB7CisJCWlmKHBfbDw9ei1wX2gpIHJldHVybiBzKnRpbnkqdGlueTsJLyogdW5kZXJmbG93ICovCisJICAgIH0KKwl9CisgICAgLyoKKyAgICAgKiBjb21wdXRlIDIqKihwX2grcF9sKQorICAgICAqLworCWkgPSBqJjB4N2ZmZmZmZmY7CisJayA9IChpPj4yMCktMHgzZmY7CisJbiA9IDA7CisJaWYoaT4weDNmZTAwMDAwKSB7CQkvKiBpZiB8enwgPiAwLjUsIHNldCBuID0gW3orMC41XSAqLworCSAgICBuID0gaisoMHgwMDEwMDAwMD4+KGsrMSkpOworCSAgICBrID0gKChuJjB4N2ZmZmZmZmYpPj4yMCktMHgzZmY7CS8qIG5ldyBrIGZvciBuICovCisJICAgIHQgPSB6ZXJvOworCSAgICBTRVRfSElHSF9XT1JEKHQsbiZ+KDB4MDAwZmZmZmY+PmspKTsKKwkgICAgbiA9ICgobiYweDAwMGZmZmZmKXwweDAwMTAwMDAwKT4+KDIwLWspOworCSAgICBpZihqPDApIG4gPSAtbjsKKwkgICAgcF9oIC09IHQ7CisJfSAKKwl0ID0gcF9sK3BfaDsKKwlTRVRfTE9XX1dPUkQodCwwKTsKKwl1ID0gdCpsZzJfaDsKKwl2ID0gKHBfbC0odC1wX2gpKSpsZzIrdCpsZzJfbDsKKwl6ID0gdSt2OworCXcgPSB2LSh6LXUpOworCXQgID0geip6OworCXQxICA9IHogLSB0KihQMSt0KihQMit0KihQMyt0KihQNCt0KlA1KSkpKTsKKwlyICA9ICh6KnQxKS8odDEtdHdvKS0odyt6KncpOworCXogID0gb25lLShyLXopOworCUdFVF9ISUdIX1dPUkQoaix6KTsKKwlqICs9IChuPDwyMCk7CisJaWYoKGo+PjIwKTw9MCkgeiA9IHNjYWxibih6LG4pOwkvKiBzdWJub3JtYWwgb3V0cHV0ICovCisJZWxzZSBTRVRfSElHSF9XT1JEKHosaik7CisJcmV0dXJuIHMqejsKK30KZGlmZiAtLWdpdCBhL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvZV9wb3dmLmMgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL2VfcG93Zi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjNDY0NzgKLS0tIC9kZXYvbnVsbAorKysgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL2VfcG93Zi5jCkBAIC0wLDAgKzEsMjQ5IEBACisvKiBlX3Bvd2YuYyAtLSBmbG9hdCB2ZXJzaW9uIG9mIGVfcG93LmMuCisgKiBDb252ZXJzaW9uIHRvIGZsb2F0IGJ5IElhbiBMYW5jZSBUYXlsb3IsIEN5Z251cyBTdXBwb3J0LCBpYW5AY3lnbnVzLmNvbS4KKyAqLworCisvKgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogQ29weXJpZ2h0IChDKSAxOTkzIGJ5IFN1biBNaWNyb3N5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBEZXZlbG9wZWQgYXQgU3VuUHJvLCBhIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gYnVzaW5lc3MuCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCisgKiBzb2Z0d2FyZSBpcyBmcmVlbHkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGlzIG5vdGljZQorICogaXMgcHJlc2VydmVkLgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJTRCQiKTsKKworI2luY2x1ZGUgIm1hdGguaCIKKyNpbmNsdWRlICJtYXRoX3ByaXZhdGUuaCIKKworc3RhdGljIGNvbnN0IGZsb2F0CiticFtdID0gezEuMCwgMS41LH0sCitkcF9oW10gPSB7IDAuMCwgNS44NDk2MDkzOGUtMDEsfSwgLyogMHgzZjE1YzAwMCAqLworZHBfbFtdID0geyAwLjAsIDEuNTYzMjIwODVlLTA2LH0sIC8qIDB4MzVkMWNmZGMgKi8KK3plcm8gICAgPSAgMC4wLAorb25lCT0gIDEuMCwKK3R3bwk9ICAyLjAsCit0d28yNAk9ICAxNjc3NzIxNi4wLAkvKiAweDRiODAwMDAwICovCitodWdlCT0gIDEuMGUzMCwKK3RpbnkgICAgPSAgMS4wZS0zMCwKKwkvKiBwb2x5IGNvZWZzIGZvciAoMy8yKSoobG9nKHgpLTJzLTIvMypzKiozICovCitMMSAgPSAgNi4wMDAwMDAyMzg0ZS0wMSwgLyogMHgzZjE5OTk5YSAqLworTDIgID0gIDQuMjg1NzE0MzI4M2UtMDEsIC8qIDB4M2VkYjZkYjcgKi8KK0wzICA9ICAzLjMzMzMzMzQzMjdlLTAxLCAvKiAweDNlYWFhYWFiICovCitMNCAgPSAgMi43MjcyODExNTMyZS0wMSwgLyogMHgzZThiYTMwNSAqLworTDUgID0gIDIuMzA2NjA3NTE0NmUtMDEsIC8qIDB4M2U2YzMyNTUgKi8KK0w2ICA9ICAyLjA2OTc1MDEzMDJlLTAxLCAvKiAweDNlNTNmMTQyICovCitQMSAgID0gIDEuNjY2NjY2NzE2M2UtMDEsIC8qIDB4M2UyYWFhYWIgKi8KK1AyICAgPSAtMi43Nzc3Nzc4NDUwZS0wMywgLyogMHhiYjM2MGI2MSAqLworUDMgICA9ICA2LjYxMzc1NTk3NzBlLTA1LCAvKiAweDM4OGFiMzU1ICovCitQNCAgID0gLTEuNjUzMzkwMTk5OWUtMDYsIC8qIDB4YjVkZGVhMGUgKi8KK1A1ICAgPSAgNC4xMzgxMzY5NDQyZS0wOCwgLyogMHgzMzMxYmI0YyAqLworbGcyICA9ICA2LjkzMTQ3MTgyNDZlLTAxLCAvKiAweDNmMzE3MjE4ICovCitsZzJfaCAgPSAgNi45MzE0NTc1MmUtMDEsIC8qIDB4M2YzMTcyMDAgKi8KK2xnMl9sICA9ICAxLjQyODYwNjU0ZS0wNiwgLyogMHgzNWJmYmU4YyAqLworb3Z0ID0gIDQuMjk5NTY2NTY5NGUtMDgsIC8qIC0oMTI4LWxvZzIob3ZmbCsuNXVscCkpICovCitjcCAgICA9ICA5LjYxNzk2NzAwOTVlLTAxLCAvKiAweDNmNzYzODRmID0yLygzbG4yKSAqLworY3BfaCAgPSAgOS42MTkxNDA2MjUwZS0wMSwgLyogMHgzZjc2NDAwMCA9MTJiIGNwICovCitjcF9sICA9IC0xLjE3MzY4NTc0MDJlLTA0LCAvKiAweGI4ZjYyM2M2ID10YWlsIG9mIGNwX2ggKi8KK2l2bG4yICAgID0gIDEuNDQyNjk1MDIxNmUrMDAsIC8qIDB4M2ZiOGFhM2IgPTEvbG4yICovCitpdmxuMl9oICA9ICAxLjQ0MjY4Nzk4ODNlKzAwLCAvKiAweDNmYjhhYTAwID0xNmIgMS9sbjIqLworaXZsbjJfbCAgPSAgNy4wNTI2MDc1NDMzZS0wNjsgLyogMHgzNmVjYTU3MCA9MS9sbjIgdGFpbCovCisKK2Zsb2F0CitfX2llZWU3NTRfcG93ZihmbG9hdCB4LCBmbG9hdCB5KQoreworCWZsb2F0IHosYXgsel9oLHpfbCxwX2gscF9sOworCWZsb2F0IHkxLHQxLHQyLHIscyxzbix0LHUsdix3OworCWludDMyX3QgaSxqLGsseWlzaW50LG47CisJaW50MzJfdCBoeCxoeSxpeCxpeSxpczsKKworCUdFVF9GTE9BVF9XT1JEKGh4LHgpOworCUdFVF9GTE9BVF9XT1JEKGh5LHkpOworCWl4ID0gaHgmMHg3ZmZmZmZmZjsgIGl5ID0gaHkmMHg3ZmZmZmZmZjsKKworICAgIC8qIHk9PXplcm86IHgqKjAgPSAxICovCisJaWYoaXk9PTApIHJldHVybiBvbmU7CisKKyAgICAvKiB4PT0xOiAxKip5ID0gMSwgZXZlbiBpZiB5IGlzIE5hTiAqLworCWlmIChoeD09MHgzZjgwMDAwMCkgcmV0dXJuIG9uZTsKKworICAgIC8qIHkhPXplcm86IHJlc3VsdCBpcyBOYU4gaWYgZWl0aGVyIGFyZyBpcyBOYU4gKi8KKwlpZihpeCA+IDB4N2Y4MDAwMDAgfHwKKwkgICBpeSA+IDB4N2Y4MDAwMDApCisJCXJldHVybiAoeCswLjBGKSsoeSswLjBGKTsKKworICAgIC8qIGRldGVybWluZSBpZiB5IGlzIGFuIG9kZCBpbnQgd2hlbiB4IDwgMAorICAgICAqIHlpc2ludCA9IDAJLi4uIHkgaXMgbm90IGFuIGludGVnZXIKKyAgICAgKiB5aXNpbnQgPSAxCS4uLiB5IGlzIGFuIG9kZCBpbnQKKyAgICAgKiB5aXNpbnQgPSAyCS4uLiB5IGlzIGFuIGV2ZW4gaW50CisgICAgICovCisJeWlzaW50ICA9IDA7CisJaWYoaHg8MCkgeworCSAgICBpZihpeT49MHg0YjgwMDAwMCkgeWlzaW50ID0gMjsgLyogZXZlbiBpbnRlZ2VyIHkgKi8KKwkgICAgZWxzZSBpZihpeT49MHgzZjgwMDAwMCkgeworCQlrID0gKGl5Pj4yMyktMHg3ZjsJICAgLyogZXhwb25lbnQgKi8KKwkJaiA9IGl5Pj4oMjMtayk7CisJCWlmKChqPDwoMjMtaykpPT1peSkgeWlzaW50ID0gMi0oaiYxKTsKKwkgICAgfQorCX0KKworICAgIC8qIHNwZWNpYWwgdmFsdWUgb2YgeSAqLworCWlmIChpeT09MHg3ZjgwMDAwMCkgewkvKiB5IGlzICstaW5mICovCisJICAgIGlmIChpeD09MHgzZjgwMDAwMCkKKwkgICAgICAgIHJldHVybiAgb25lOwkvKiAoLTEpKiorLWluZiBpcyBOYU4gKi8KKwkgICAgZWxzZSBpZiAoaXggPiAweDNmODAwMDAwKS8qICh8eHw+MSkqKistaW5mID0gaW5mLDAgKi8KKwkgICAgICAgIHJldHVybiAoaHk+PTApPyB5OiB6ZXJvOworCSAgICBlbHNlCQkJLyogKHx4fDwxKSoqLSwraW5mID0gaW5mLDAgKi8KKwkgICAgICAgIHJldHVybiAoaHk8MCk/LXk6IHplcm87CisJfQorCWlmKGl5PT0weDNmODAwMDAwKSB7CS8qIHkgaXMgICstMSAqLworCSAgICBpZihoeTwwKSByZXR1cm4gb25lL3g7IGVsc2UgcmV0dXJuIHg7CisJfQorCWlmKGh5PT0weDQwMDAwMDAwKSByZXR1cm4geCp4OyAvKiB5IGlzICAyICovCisJaWYoaHk9PTB4M2YwMDAwMDApIHsJLyogeSBpcyAgMC41ICovCisJICAgIGlmKGh4Pj0wKQkvKiB4ID49ICswICovCisJICAgIHJldHVybiBfX2llZWU3NTRfc3FydGYoeCk7CisJfQorCisJYXggICA9IGZhYnNmKHgpOworICAgIC8qIHNwZWNpYWwgdmFsdWUgb2YgeCAqLworCWlmKGl4PT0weDdmODAwMDAwfHxpeD09MHx8aXg9PTB4M2Y4MDAwMDApeworCSAgICB6ID0gYXg7CQkJLyp4IGlzICstMCwrLWluZiwrLTEqLworCSAgICBpZihoeTwwKSB6ID0gb25lL3o7CS8qIHogPSAoMS98eHwpICovCisJICAgIGlmKGh4PDApIHsKKwkJaWYoKChpeC0weDNmODAwMDAwKXx5aXNpbnQpPT0wKSB7CisJCSAgICB6ID0gKHoteikvKHoteik7IC8qICgtMSkqKm5vbi1pbnQgaXMgTmFOICovCisJCX0gZWxzZSBpZih5aXNpbnQ9PTEpCisJCSAgICB6ID0gLXo7CQkvKiAoeDwwKSoqb2RkID0gLSh8eHwqKm9kZCkgKi8KKwkgICAgfQorCSAgICByZXR1cm4gejsKKwl9CisKKwluID0gKCh1X2ludDMyX3QpaHg+PjMxKS0xOworCisgICAgLyogKHg8MCkqKihub24taW50KSBpcyBOYU4gKi8KKwlpZigobnx5aXNpbnQpPT0wKSByZXR1cm4gKHgteCkvKHgteCk7CisKKwlzbiA9IG9uZTsgLyogcyAoc2lnbiBvZiByZXN1bHQgLXZlKipvZGQpID0gLTEgZWxzZSA9IDEgKi8KKwlpZigobnwoeWlzaW50LTEpKT09MCkgc24gPSAtb25lOy8qICgtdmUpKioob2RkIGludCkgKi8KKworICAgIC8qIHx5fCBpcyBodWdlICovCisJaWYoaXk+MHg0ZDAwMDAwMCkgeyAvKiBpZiB8eXwgPiAyKioyNyAqLworCS8qIG92ZXIvdW5kZXJmbG93IGlmIHggaXMgbm90IGNsb3NlIHRvIG9uZSAqLworCSAgICBpZihpeDwweDNmN2ZmZmY4KSByZXR1cm4gKGh5PDApPyBzbipodWdlKmh1Z2U6c24qdGlueSp0aW55OworCSAgICBpZihpeD4weDNmODAwMDA3KSByZXR1cm4gKGh5PjApPyBzbipodWdlKmh1Z2U6c24qdGlueSp0aW55OworCS8qIG5vdyB8MS14fCBpcyB0aW55IDw9IDIqKi0yMCwgc3VmZmljZSB0byBjb21wdXRlCisJICAgbG9nKHgpIGJ5IHgteF4yLzIreF4zLzMteF40LzQgKi8KKwkgICAgdCA9IGF4LTE7CQkvKiB0IGhhcyAyMCB0cmFpbGluZyB6ZXJvcyAqLworCSAgICB3ID0gKHQqdCkqKChmbG9hdCkwLjUtdCooKGZsb2F0KTAuMzMzMzMzMzMzMzMzLXQqKGZsb2F0KTAuMjUpKTsKKwkgICAgdSA9IGl2bG4yX2gqdDsJLyogaXZsbjJfaCBoYXMgMTYgc2lnLiBiaXRzICovCisJICAgIHYgPSB0Kml2bG4yX2wtdyppdmxuMjsKKwkgICAgdDEgPSB1K3Y7CisJICAgIEdFVF9GTE9BVF9XT1JEKGlzLHQxKTsKKwkgICAgU0VUX0ZMT0FUX1dPUkQodDEsaXMmMHhmZmZmZjAwMCk7CisJICAgIHQyID0gdi0odDEtdSk7CisJfSBlbHNlIHsKKwkgICAgZmxvYXQgczIsc19oLHNfbCx0X2gsdF9sOworCSAgICBuID0gMDsKKwkvKiB0YWtlIGNhcmUgc3Vibm9ybWFsIG51bWJlciAqLworCSAgICBpZihpeDwweDAwODAwMDAwKQorCQl7YXggKj0gdHdvMjQ7IG4gLT0gMjQ7IEdFVF9GTE9BVF9XT1JEKGl4LGF4KTsgfQorCSAgICBuICArPSAoKGl4KT4+MjMpLTB4N2Y7CisJICAgIGogID0gaXgmMHgwMDdmZmZmZjsKKwkvKiBkZXRlcm1pbmUgaW50ZXJ2YWwgKi8KKwkgICAgaXggPSBqfDB4M2Y4MDAwMDA7CQkvKiBub3JtYWxpemUgaXggKi8KKwkgICAgaWYoajw9MHgxY2M0NzEpIGs9MDsJLyogfHh8PHNxcnQoMy8yKSAqLworCSAgICBlbHNlIGlmKGo8MHg1ZGIzZDcpIGs9MTsJLyogfHh8PHNxcnQoMykgICAqLworCSAgICBlbHNlIHtrPTA7bis9MTtpeCAtPSAweDAwODAwMDAwO30KKwkgICAgU0VUX0ZMT0FUX1dPUkQoYXgsaXgpOworCisJLyogY29tcHV0ZSBzID0gc19oK3NfbCA9ICh4LTEpLyh4KzEpIG9yICh4LTEuNSkvKHgrMS41KSAqLworCSAgICB1ID0gYXgtYnBba107CQkvKiBicFswXT0xLjAsIGJwWzFdPTEuNSAqLworCSAgICB2ID0gb25lLyhheCticFtrXSk7CisJICAgIHMgPSB1KnY7CisJICAgIHNfaCA9IHM7CisJICAgIEdFVF9GTE9BVF9XT1JEKGlzLHNfaCk7CisJICAgIFNFVF9GTE9BVF9XT1JEKHNfaCxpcyYweGZmZmZmMDAwKTsKKwkvKiB0X2g9YXgrYnBba10gSGlnaCAqLworCSAgICBpcyA9ICgoaXg+PjEpJjB4ZmZmZmYwMDApfDB4MjAwMDAwMDA7CisJICAgIFNFVF9GTE9BVF9XT1JEKHRfaCxpcysweDAwNDAwMDAwKyhrPDwyMSkpOworCSAgICB0X2wgPSBheCAtICh0X2gtYnBba10pOworCSAgICBzX2wgPSB2KigodS1zX2gqdF9oKS1zX2gqdF9sKTsKKwkvKiBjb21wdXRlIGxvZyhheCkgKi8KKwkgICAgczIgPSBzKnM7CisJICAgIHIgPSBzMipzMiooTDErczIqKEwyK3MyKihMMytzMiooTDQrczIqKEw1K3MyKkw2KSkpKSk7CisJICAgIHIgKz0gc19sKihzX2grcyk7CisJICAgIHMyICA9IHNfaCpzX2g7CisJICAgIHRfaCA9IChmbG9hdCkzLjArczIrcjsKKwkgICAgR0VUX0ZMT0FUX1dPUkQoaXMsdF9oKTsKKwkgICAgU0VUX0ZMT0FUX1dPUkQodF9oLGlzJjB4ZmZmZmYwMDApOworCSAgICB0X2wgPSByLSgodF9oLShmbG9hdCkzLjApLXMyKTsKKwkvKiB1K3YgPSBzKigxKy4uLikgKi8KKwkgICAgdSA9IHNfaCp0X2g7CisJICAgIHYgPSBzX2wqdF9oK3RfbCpzOworCS8qIDIvKDNsb2cyKSoocysuLi4pICovCisJICAgIHBfaCA9IHUrdjsKKwkgICAgR0VUX0ZMT0FUX1dPUkQoaXMscF9oKTsKKwkgICAgU0VUX0ZMT0FUX1dPUkQocF9oLGlzJjB4ZmZmZmYwMDApOworCSAgICBwX2wgPSB2LShwX2gtdSk7CisJICAgIHpfaCA9IGNwX2gqcF9oOwkJLyogY3BfaCtjcF9sID0gMi8oMypsb2cyKSAqLworCSAgICB6X2wgPSBjcF9sKnBfaCtwX2wqY3ArZHBfbFtrXTsKKwkvKiBsb2cyKGF4KSA9IChzKy4uKSoyLygzKmxvZzIpID0gbiArIGRwX2ggKyB6X2ggKyB6X2wgKi8KKwkgICAgdCA9IChmbG9hdCluOworCSAgICB0MSA9ICgoKHpfaCt6X2wpK2RwX2hba10pK3QpOworCSAgICBHRVRfRkxPQVRfV09SRChpcyx0MSk7CisJICAgIFNFVF9GTE9BVF9XT1JEKHQxLGlzJjB4ZmZmZmYwMDApOworCSAgICB0MiA9IHpfbC0oKCh0MS10KS1kcF9oW2tdKS16X2gpOworCX0KKworICAgIC8qIHNwbGl0IHVwIHkgaW50byB5MSt5MiBhbmQgY29tcHV0ZSAoeTEreTIpKih0MSt0MikgKi8KKwlHRVRfRkxPQVRfV09SRChpcyx5KTsKKwlTRVRfRkxPQVRfV09SRCh5MSxpcyYweGZmZmZmMDAwKTsKKwlwX2wgPSAoeS15MSkqdDEreSp0MjsKKwlwX2ggPSB5MSp0MTsKKwl6ID0gcF9sK3BfaDsKKwlHRVRfRkxPQVRfV09SRChqLHopOworCWlmIChqPjB4NDMwMDAwMDApCQkJCS8qIGlmIHogPiAxMjggKi8KKwkgICAgcmV0dXJuIHNuKmh1Z2UqaHVnZTsJCQkvKiBvdmVyZmxvdyAqLworCWVsc2UgaWYgKGo9PTB4NDMwMDAwMDApIHsJCQkvKiBpZiB6ID09IDEyOCAqLworCSAgICBpZihwX2wrb3Z0PnotcF9oKSByZXR1cm4gc24qaHVnZSpodWdlOwkvKiBvdmVyZmxvdyAqLworCX0KKwllbHNlIGlmICgoaiYweDdmZmZmZmZmKT4weDQzMTYwMDAwKQkJLyogeiA8PSAtMTUwICovCisJICAgIHJldHVybiBzbip0aW55KnRpbnk7CQkJLyogdW5kZXJmbG93ICovCisJZWxzZSBpZiAoaj09MHhjMzE2MDAwMCl7CQkJLyogeiA9PSAtMTUwICovCisJICAgIGlmKHBfbDw9ei1wX2gpIHJldHVybiBzbip0aW55KnRpbnk7CQkvKiB1bmRlcmZsb3cgKi8KKwl9CisgICAgLyoKKyAgICAgKiBjb21wdXRlIDIqKihwX2grcF9sKQorICAgICAqLworCWkgPSBqJjB4N2ZmZmZmZmY7CisJayA9IChpPj4yMyktMHg3ZjsKKwluID0gMDsKKwlpZihpPjB4M2YwMDAwMDApIHsJCS8qIGlmIHx6fCA+IDAuNSwgc2V0IG4gPSBbeiswLjVdICovCisJICAgIG4gPSBqKygweDAwODAwMDAwPj4oaysxKSk7CisJICAgIGsgPSAoKG4mMHg3ZmZmZmZmZik+PjIzKS0weDdmOwkvKiBuZXcgayBmb3IgbiAqLworCSAgICBTRVRfRkxPQVRfV09SRCh0LG4mfigweDAwN2ZmZmZmPj5rKSk7CisJICAgIG4gPSAoKG4mMHgwMDdmZmZmZil8MHgwMDgwMDAwMCk+PigyMy1rKTsKKwkgICAgaWYoajwwKSBuID0gLW47CisJICAgIHBfaCAtPSB0OworCX0KKwl0ID0gcF9sK3BfaDsKKwlHRVRfRkxPQVRfV09SRChpcyx0KTsKKwlTRVRfRkxPQVRfV09SRCh0LGlzJjB4ZmZmZjgwMDApOworCXUgPSB0KmxnMl9oOworCXYgPSAocF9sLSh0LXBfaCkpKmxnMit0KmxnMl9sOworCXogPSB1K3Y7CisJdyA9IHYtKHotdSk7CisJdCAgPSB6Kno7CisJdDEgID0geiAtIHQqKFAxK3QqKFAyK3QqKFAzK3QqKFA0K3QqUDUpKSkpOworCXIgID0gKHoqdDEpLyh0MS10d28pLSh3K3oqdyk7CisJeiAgPSBvbmUtKHIteik7CisJR0VUX0ZMT0FUX1dPUkQoaix6KTsKKwlqICs9IChuPDwyMyk7CisJaWYoKGo+PjIzKTw9MCkgeiA9IHNjYWxibmYoeixuKTsJLyogc3Vibm9ybWFsIG91dHB1dCAqLworCWVsc2UgU0VUX0ZMT0FUX1dPUkQoeixqKTsKKwlyZXR1cm4gc24qejsKK30KZGlmZiAtLWdpdCBhL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvZV9yZW1fcGlvMi5jIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9lX3JlbV9waW8yLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmUyNjMwYgotLS0gL2Rldi9udWxsCisrKyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvZV9yZW1fcGlvMi5jCkBAIC0wLDAgKzEsMTg2IEBACisKKy8qIEAoIyllX3JlbV9waW8yLmMgMS40IDk1LzAxLzE4ICovCisvKgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogQ29weXJpZ2h0IChDKSAxOTkzIGJ5IFN1biBNaWNyb3N5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBEZXZlbG9wZWQgYXQgU3VuU29mdCwgYSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGJ1c2luZXNzLgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcworICogc29mdHdhcmUgaXMgZnJlZWx5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhpcyBub3RpY2UgCisgKiBpcyBwcmVzZXJ2ZWQuCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKgorICogT3B0aW1pemVkIGJ5IEJydWNlIEQuIEV2YW5zLgorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJTRCQiKTsKKworLyogX19pZWVlNzU0X3JlbV9waW8yKHgseSkKKyAqIAorICogcmV0dXJuIHRoZSByZW1haW5kZXIgb2YgeCByZW0gcGkvMiBpbiB5WzBdK3lbMV0gCisgKiB1c2UgX19rZXJuZWxfcmVtX3BpbzIoKQorICovCisKKyNpbmNsdWRlIDxmbG9hdC5oPgorCisjaW5jbHVkZSAibWF0aC5oIgorI2luY2x1ZGUgIm1hdGhfcHJpdmF0ZS5oIgorCisvKgorICogaW52cGlvMjogIDUzIGJpdHMgb2YgMi9waQorICogcGlvMl8xOiAgIGZpcnN0ICAzMyBiaXQgb2YgcGkvMgorICogcGlvMl8xdDogIHBpLzIgLSBwaW8yXzEKKyAqIHBpbzJfMjogICBzZWNvbmQgMzMgYml0IG9mIHBpLzIKKyAqIHBpbzJfMnQ6ICBwaS8yIC0gKHBpbzJfMStwaW8yXzIpCisgKiBwaW8yXzM6ICAgdGhpcmQgIDMzIGJpdCBvZiBwaS8yCisgKiBwaW8yXzN0OiAgcGkvMiAtIChwaW8yXzErcGlvMl8yK3BpbzJfMykKKyAqLworCitzdGF0aWMgY29uc3QgZG91YmxlCit6ZXJvID0gIDAuMDAwMDAwMDAwMDAwMDAwMDAwMDBlKzAwLCAvKiAweDAwMDAwMDAwLCAweDAwMDAwMDAwICovCit0d28yNCA9ICAxLjY3NzcyMTYwMDAwMDAwMDAwMDAwZSswNywgLyogMHg0MTcwMDAwMCwgMHgwMDAwMDAwMCAqLworaW52cGlvMiA9ICA2LjM2NjE5NzcyMzY3NTgxMzgyNDMzZS0wMSwgLyogMHgzRkU0NUYzMCwgMHg2REM5Qzg4MyAqLworcGlvMl8xICA9ICAxLjU3MDc5NjMyNjczNDEyNTYxNDE3ZSswMCwgLyogMHgzRkY5MjFGQiwgMHg1NDQwMDAwMCAqLworcGlvMl8xdCA9ICA2LjA3NzEwMDUwNjUwNjE5MjI0OTMyZS0xMSwgLyogMHgzREQwQjQ2MSwgMHgxQTYyNjMzMSAqLworcGlvMl8yICA9ICA2LjA3NzEwMDUwNjMwMzk2NTk3NjYwZS0xMSwgLyogMHgzREQwQjQ2MSwgMHgxQTYwMDAwMCAqLworcGlvMl8ydCA9ICAyLjAyMjI2NjI0ODc5NTk1MDYzMTU0ZS0yMSwgLyogMHgzQkEzMTk4QSwgMHgyRTAzNzA3MyAqLworcGlvMl8zICA9ICAyLjAyMjI2NjI0ODcxMTE2NjQ1NTgwZS0yMSwgLyogMHgzQkEzMTk4QSwgMHgyRTAwMDAwMCAqLworcGlvMl8zdCA9ICA4LjQ3ODQyNzY2MDM2ODg5OTU2OTk3ZS0zMjsgLyogMHgzOTdCODM5QSwgMHgyNTIwNDlDMSAqLworCisjaWZkZWYgSU5MSU5FX1JFTV9QSU8yCitzdGF0aWMgX19pbmxpbmUgX19hbHdheXNfaW5saW5lCisjZW5kaWYKK2ludAorX19pZWVlNzU0X3JlbV9waW8yKGRvdWJsZSB4LCBkb3VibGUgKnkpCit7CisJZG91YmxlIHosdyx0LHIsZm47CisJZG91YmxlIHR4WzNdLHR5WzJdOworCWludDMyX3QgZTAsaSxqLG54LG4saXgsaHg7CisJdV9pbnQzMl90IGxvdzsKKworCUdFVF9ISUdIX1dPUkQoaHgseCk7CQkvKiBoaWdoIHdvcmQgb2YgeCAqLworCWl4ID0gaHgmMHg3ZmZmZmZmZjsKKyNpZiAwIC8qIE11c3QgYmUgaGFuZGxlZCBpbiBjYWxsZXIuICovCisJaWYoaXg8PTB4M2ZlOTIxZmIpICAgLyogfHh8IH48PSBwaS80ICwgbm8gbmVlZCBmb3IgcmVkdWN0aW9uICovCisJICAgIHt5WzBdID0geDsgeVsxXSA9IDA7IHJldHVybiAwO30KKyNlbmRpZgorCWlmIChpeCA8PSAweDQwMGY2YTdhKSB7CQkvKiB8eHwgfjw9IDVwaS80ICovCisJICAgIGlmICgoaXggJiAweGZmZmZmKSA9PSAweDkyMWZiKSAgLyogfHh8IH49IHBpLzIgb3IgMnBpLzIgKi8KKwkJZ290byBtZWRpdW07CQkvKiBjYW5jZWxsYXRpb24gLS0gdXNlIG1lZGl1bSBjYXNlICovCisJICAgIGlmIChpeCA8PSAweDQwMDJkOTdjKSB7CS8qIHx4fCB+PD0gM3BpLzQgKi8KKwkJaWYgKGh4ID4gMCkgeworCQkgICAgeiA9IHggLSBwaW8yXzE7CS8qIG9uZSByb3VuZCBnb29kIHRvIDg1IGJpdHMgKi8KKwkJICAgIHlbMF0gPSB6IC0gcGlvMl8xdDsKKwkJICAgIHlbMV0gPSAoei15WzBdKS1waW8yXzF0OworCQkgICAgcmV0dXJuIDE7CisJCX0gZWxzZSB7CisJCSAgICB6ID0geCArIHBpbzJfMTsKKwkJICAgIHlbMF0gPSB6ICsgcGlvMl8xdDsKKwkJICAgIHlbMV0gPSAoei15WzBdKStwaW8yXzF0OworCQkgICAgcmV0dXJuIC0xOworCQl9CisJICAgIH0gZWxzZSB7CisJCWlmIChoeCA+IDApIHsKKwkJICAgIHogPSB4IC0gMipwaW8yXzE7CisJCSAgICB5WzBdID0geiAtIDIqcGlvMl8xdDsKKwkJICAgIHlbMV0gPSAoei15WzBdKS0yKnBpbzJfMXQ7CisJCSAgICByZXR1cm4gMjsKKwkJfSBlbHNlIHsKKwkJICAgIHogPSB4ICsgMipwaW8yXzE7CisJCSAgICB5WzBdID0geiArIDIqcGlvMl8xdDsKKwkJICAgIHlbMV0gPSAoei15WzBdKSsyKnBpbzJfMXQ7CisJCSAgICByZXR1cm4gLTI7CisJCX0KKwkgICAgfQorCX0KKwlpZiAoaXggPD0gMHg0MDFjNDYzYikgewkJLyogfHh8IH48PSA5cGkvNCAqLworCSAgICBpZiAoaXggPD0gMHg0MDE1ZmRiYykgewkvKiB8eHwgfjw9IDdwaS80ICovCisJCWlmIChpeCA9PSAweDQwMTJkOTdjKQkvKiB8eHwgfj0gM3BpLzIgKi8KKwkJICAgIGdvdG8gbWVkaXVtOworCQlpZiAoaHggPiAwKSB7CisJCSAgICB6ID0geCAtIDMqcGlvMl8xOworCQkgICAgeVswXSA9IHogLSAzKnBpbzJfMXQ7CisJCSAgICB5WzFdID0gKHoteVswXSktMypwaW8yXzF0OworCQkgICAgcmV0dXJuIDM7CisJCX0gZWxzZSB7CisJCSAgICB6ID0geCArIDMqcGlvMl8xOworCQkgICAgeVswXSA9IHogKyAzKnBpbzJfMXQ7CisJCSAgICB5WzFdID0gKHoteVswXSkrMypwaW8yXzF0OworCQkgICAgcmV0dXJuIC0zOworCQl9CisJICAgIH0gZWxzZSB7CisJCWlmIChpeCA9PSAweDQwMTkyMWZiKQkvKiB8eHwgfj0gNHBpLzIgKi8KKwkJICAgIGdvdG8gbWVkaXVtOworCQlpZiAoaHggPiAwKSB7CisJCSAgICB6ID0geCAtIDQqcGlvMl8xOworCQkgICAgeVswXSA9IHogLSA0KnBpbzJfMXQ7CisJCSAgICB5WzFdID0gKHoteVswXSktNCpwaW8yXzF0OworCQkgICAgcmV0dXJuIDQ7CisJCX0gZWxzZSB7CisJCSAgICB6ID0geCArIDQqcGlvMl8xOworCQkgICAgeVswXSA9IHogKyA0KnBpbzJfMXQ7CisJCSAgICB5WzFdID0gKHoteVswXSkrNCpwaW8yXzF0OworCQkgICAgcmV0dXJuIC00OworCQl9CisJICAgIH0KKwl9CisJaWYoaXg8MHg0MTM5MjFmYikgewkvKiB8eHwgfjwgMl4yMCoocGkvMiksIG1lZGl1bSBzaXplICovCittZWRpdW06CisJICAgIC8qIFVzZSBhIHNwZWNpYWxpemVkIHJpbnQoKSB0byBnZXQgZm4uICBBc3N1bWUgcm91bmQtdG8tbmVhcmVzdC4gKi8KKwkgICAgU1RSSUNUX0FTU0lHTihkb3VibGUsZm4seCppbnZwaW8yKzB4MS44cDUyKTsKKwkgICAgZm4gPSBmbi0weDEuOHA1MjsKKyNpZmRlZiBIQVZFX0VGRklDSUVOVF9JUklOVAorCSAgICBuICA9IGlyaW50KGZuKTsKKyNlbHNlCisJICAgIG4gID0gKGludDMyX3QpZm47CisjZW5kaWYKKwkgICAgciAgPSB4LWZuKnBpbzJfMTsKKwkgICAgdyAgPSBmbipwaW8yXzF0OwkvKiAxc3Qgcm91bmQgZ29vZCB0byA4NSBiaXQgKi8KKwkgICAgeworCSAgICAgICAgdV9pbnQzMl90IGhpZ2g7CisJICAgICAgICBqICA9IGl4Pj4yMDsKKwkgICAgICAgIHlbMF0gPSByLXc7IAorCQlHRVRfSElHSF9XT1JEKGhpZ2gseVswXSk7CisJICAgICAgICBpID0gai0oKGhpZ2g+PjIwKSYweDdmZik7CisJICAgICAgICBpZihpPjE2KSB7ICAvKiAybmQgaXRlcmF0aW9uIG5lZWRlZCwgZ29vZCB0byAxMTggKi8KKwkJICAgIHQgID0gcjsKKwkJICAgIHcgID0gZm4qcGlvMl8yOwkKKwkJICAgIHIgID0gdC13OworCQkgICAgdyAgPSBmbipwaW8yXzJ0LSgodC1yKS13KTsJCisJCSAgICB5WzBdID0gci13OworCQkgICAgR0VUX0hJR0hfV09SRChoaWdoLHlbMF0pOworCQkgICAgaSA9IGotKChoaWdoPj4yMCkmMHg3ZmYpOworCQkgICAgaWYoaT40OSkgIHsJLyogM3JkIGl0ZXJhdGlvbiBuZWVkLCAxNTEgYml0cyBhY2MgKi8KKwkJICAgIAl0ICA9IHI7CS8qIHdpbGwgY292ZXIgYWxsIHBvc3NpYmxlIGNhc2VzICovCisJCSAgICAJdyAgPSBmbipwaW8yXzM7CQorCQkgICAgCXIgID0gdC13OworCQkgICAgCXcgID0gZm4qcGlvMl8zdC0oKHQtciktdyk7CQorCQkgICAgCXlbMF0gPSByLXc7CisJCSAgICB9CisJCX0KKwkgICAgfQorCSAgICB5WzFdID0gKHIteVswXSktdzsKKwkgICAgcmV0dXJuIG47CisJfQorICAgIC8qIAorICAgICAqIGFsbCBvdGhlciAobGFyZ2UpIGFyZ3VtZW50cworICAgICAqLworCWlmKGl4Pj0weDdmZjAwMDAwKSB7CQkvKiB4IGlzIGluZiBvciBOYU4gKi8KKwkgICAgeVswXT15WzFdPXgteDsgcmV0dXJuIDA7CisJfQorICAgIC8qIHNldCB6ID0gc2NhbGJuKHx4fCxpbG9nYih4KS0yMykgKi8KKwlHRVRfTE9XX1dPUkQobG93LHgpOworCWUwIAk9IChpeD4+MjApLTEwNDY7CS8qIGUwID0gaWxvZ2IoeiktMjM7ICovCisJSU5TRVJUX1dPUkRTKHosIGl4IC0gKChpbnQzMl90KShlMDw8MjApKSwgbG93KTsKKwlmb3IoaT0wO2k8MjtpKyspIHsKKwkJdHhbaV0gPSAoZG91YmxlKSgoaW50MzJfdCkoeikpOworCQl6ICAgICA9ICh6LXR4W2ldKSp0d28yNDsKKwl9CisJdHhbMl0gPSB6OworCW54ID0gMzsKKwl3aGlsZSh0eFtueC0xXT09emVybykgbngtLTsJLyogc2tpcCB6ZXJvIHRlcm0gKi8KKwluICA9ICBfX2tlcm5lbF9yZW1fcGlvMih0eCx0eSxlMCxueCwxKTsKKwlpZihoeDwwKSB7eVswXSA9IC10eVswXTsgeVsxXSA9IC10eVsxXTsgcmV0dXJuIC1uO30KKwl5WzBdID0gdHlbMF07IHlbMV0gPSB0eVsxXTsgcmV0dXJuIG47Cit9CmRpZmYgLS1naXQgYS9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL2VfcmVtX3BpbzJmLmMgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL2VfcmVtX3BpbzJmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjFlZTdhMAotLS0gL2Rldi9udWxsCisrKyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvZV9yZW1fcGlvMmYuYwpAQCAtMCwwICsxLDg0IEBACisvKiBlX3JlbV9waW8yZi5jIC0tIGZsb2F0IHZlcnNpb24gb2YgZV9yZW1fcGlvMi5jCisgKiBDb252ZXJzaW9uIHRvIGZsb2F0IGJ5IElhbiBMYW5jZSBUYXlsb3IsIEN5Z251cyBTdXBwb3J0LCBpYW5AY3lnbnVzLmNvbS4KKyAqIERlYnVnZ2VkIGFuZCBvcHRpbWl6ZWQgYnkgQnJ1Y2UgRC4gRXZhbnMuCisgKi8KKworLyoKKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIENvcHlyaWdodCAoQykgMTk5MyBieSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogRGV2ZWxvcGVkIGF0IFN1blBybywgYSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGJ1c2luZXNzLgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcworICogc29mdHdhcmUgaXMgZnJlZWx5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhpcyBub3RpY2UKKyAqIGlzIHByZXNlcnZlZC4KKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CitfX0ZCU0RJRCgiJEZyZWVCU0QkIik7CisKKy8qIF9faWVlZTc1NF9yZW1fcGlvMmYoeCx5KQorICoKKyAqIHJldHVybiB0aGUgcmVtYWluZGVyIG9mIHggcmVtIHBpLzIgaW4gKnkKKyAqIHVzZSBkb3VibGUgcHJlY2lzaW9uIGZvciBldmVyeXRoaW5nIGV4Y2VwdCBwYXNzaW5nIHgKKyAqIHVzZSBfX2tlcm5lbF9yZW1fcGlvMigpIGZvciBsYXJnZSB4CisgKi8KKworI2luY2x1ZGUgPGZsb2F0Lmg+CisKKyNpbmNsdWRlICJtYXRoLmgiCisjaW5jbHVkZSAibWF0aF9wcml2YXRlLmgiCisKKy8qCisgKiBpbnZwaW8yOiAgNTMgYml0cyBvZiAyL3BpCisgKiBwaW8yXzE6ICAgZmlyc3QgMjUgYml0cyBvZiBwaS8yCisgKiBwaW8yXzF0OiAgcGkvMiAtIHBpbzJfMQorICovCisKK3N0YXRpYyBjb25zdCBkb3VibGUKK2ludnBpbzIgPSAgNi4zNjYxOTc3MjM2NzU4MTM4MjQzM2UtMDEsIC8qIDB4M0ZFNDVGMzAsIDB4NkRDOUM4ODMgKi8KK3BpbzJfMSAgPSAgMS41NzA3OTYzMTA5MDE2NDE4NDU3MGUrMDAsIC8qIDB4M0ZGOTIxRkIsIDB4NTAwMDAwMDAgKi8KK3BpbzJfMXQgPSAgMS41ODkzMjU0NzczNTI4MTk2NjkxNmUtMDg7IC8qIDB4M0U1MTEwYjQsIDB4NjExQTYyNjMgKi8KKworI2lmZGVmIElOTElORV9SRU1fUElPMkYKK3N0YXRpYyBfX2lubGluZSBfX2Fsd2F5c19pbmxpbmUKKyNlbmRpZgoraW50CitfX2llZWU3NTRfcmVtX3BpbzJmKGZsb2F0IHgsIGRvdWJsZSAqeSkKK3sKKwlkb3VibGUgdyxyLGZuOworCWRvdWJsZSB0eFsxXSx0eVsxXTsKKwlmbG9hdCB6OworCWludDMyX3QgZTAsbixpeCxoeDsKKworCUdFVF9GTE9BVF9XT1JEKGh4LHgpOworCWl4ID0gaHgmMHg3ZmZmZmZmZjsKKyAgICAvKiAzMys1MyBiaXQgcGkgaXMgZ29vZCBlbm91Z2ggZm9yIG1lZGl1bSBzaXplICovCisJaWYoaXg8MHg0ZGM5MGZkYikgewkJLyogfHh8IH48IDJeMjgqKHBpLzIpLCBtZWRpdW0gc2l6ZSAqLworCSAgICAvKiBVc2UgYSBzcGVjaWFsaXplZCByaW50KCkgdG8gZ2V0IGZuLiAgQXNzdW1lIHJvdW5kLXRvLW5lYXJlc3QuICovCisJICAgIFNUUklDVF9BU1NJR04oZG91YmxlLGZuLHgqaW52cGlvMisweDEuOHA1Mik7CisJICAgIGZuID0gZm4tMHgxLjhwNTI7CisjaWZkZWYgSEFWRV9FRkZJQ0lFTlRfSVJJTlQKKwkgICAgbiAgPSBpcmludChmbik7CisjZWxzZQorCSAgICBuICA9IChpbnQzMl90KWZuOworI2VuZGlmCisJICAgIHIgID0geC1mbipwaW8yXzE7CisJICAgIHcgID0gZm4qcGlvMl8xdDsKKwkgICAgKnkgPSByLXc7CisJICAgIHJldHVybiBuOworCX0KKyAgICAvKgorICAgICAqIGFsbCBvdGhlciAobGFyZ2UpIGFyZ3VtZW50cworICAgICAqLworCWlmKGl4Pj0weDdmODAwMDAwKSB7CQkvKiB4IGlzIGluZiBvciBOYU4gKi8KKwkgICAgKnk9eC14OyByZXR1cm4gMDsKKwl9CisgICAgLyogc2V0IHogPSBzY2FsYm4ofHh8LGlsb2diKHx4fCktMjMpICovCisJZTAgPSAoaXg+PjIzKS0xNTA7CQkvKiBlMCA9IGlsb2diKHx4fCktMjM7ICovCisJU0VUX0ZMT0FUX1dPUkQoeiwgaXggLSAoKGludDMyX3QpKGUwPDwyMykpKTsKKwl0eFswXSA9IHo7CisJbiAgPSAgX19rZXJuZWxfcmVtX3BpbzIodHgsdHksZTAsMSwwKTsKKwlpZihoeDwwKSB7KnkgPSAtdHlbMF07IHJldHVybiAtbjt9CisJKnkgPSB0eVswXTsgcmV0dXJuIG47Cit9CmRpZmYgLS1naXQgYS9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL2VfcmVtYWluZGVyLmMgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL2VfcmVtYWluZGVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJlNTEzYgotLS0gL2Rldi9udWxsCisrKyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvZV9yZW1haW5kZXIuYwpAQCAtMCwwICsxLDc5IEBACisKKy8qIEAoIyllX3JlbWFpbmRlci5jIDEuMyA5NS8wMS8xOCAqLworLyoKKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIENvcHlyaWdodCAoQykgMTk5MyBieSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogRGV2ZWxvcGVkIGF0IFN1blNvZnQsIGEgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBidXNpbmVzcy4KKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKKyAqIHNvZnR3YXJlIGlzIGZyZWVseSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoaXMgbm90aWNlIAorICogaXMgcHJlc2VydmVkLgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJTRCQiKTsKKworLyogX19pZWVlNzU0X3JlbWFpbmRlcih4LHApCisgKiBSZXR1cm4gOiAgICAgICAgICAgICAgICAgIAorICogCXJldHVybnMgIHggUkVNIHAgID0gIHggLSBbeC9wXSpwIGFzIGlmIGluIGluZmluaXRlIAorICogCXByZWNpc2UgYXJpdGhtZXRpYywgd2hlcmUgW3gvcF0gaXMgdGhlIChpbmZpbml0ZSBiaXQpIAorICoJaW50ZWdlciBuZWFyZXN0IHgvcCAoaW4gaGFsZiB3YXkgY2FzZSBjaG9vc2UgdGhlIGV2ZW4gb25lKS4KKyAqIE1ldGhvZCA6IAorICoJQmFzZWQgb24gZm1vZCgpIHJldHVybiB4LVt4L3BdY2hvcHBlZCpwIGV4YWN0bHAuCisgKi8KKworI2luY2x1ZGUgPGZsb2F0Lmg+CisKKyNpbmNsdWRlICJtYXRoLmgiCisjaW5jbHVkZSAibWF0aF9wcml2YXRlLmgiCisKK3N0YXRpYyBjb25zdCBkb3VibGUgemVybyA9IDAuMDsKKworCitkb3VibGUKK19faWVlZTc1NF9yZW1haW5kZXIoZG91YmxlIHgsIGRvdWJsZSBwKQoreworCWludDMyX3QgaHgsaHA7CisJdV9pbnQzMl90IHN4LGx4LGxwOworCWRvdWJsZSBwX2hhbGY7CisKKwlFWFRSQUNUX1dPUkRTKGh4LGx4LHgpOworCUVYVFJBQ1RfV09SRFMoaHAsbHAscCk7CisJc3ggPSBoeCYweDgwMDAwMDAwOworCWhwICY9IDB4N2ZmZmZmZmY7CisJaHggJj0gMHg3ZmZmZmZmZjsKKworICAgIC8qIHB1cmdlIG9mZiBleGNlcHRpb24gdmFsdWVzICovCisJaWYoKGhwfGxwKT09MCkgcmV0dXJuICh4KnApLyh4KnApOyAJLyogcCA9IDAgKi8KKwlpZigoaHg+PTB4N2ZmMDAwMDApfHwJCQkvKiB4IG5vdCBmaW5pdGUgKi8KKwkgICgoaHA+PTB4N2ZmMDAwMDApJiYJCQkvKiBwIGlzIE5hTiAqLworCSAgKCgoaHAtMHg3ZmYwMDAwMCl8bHApIT0wKSkpCisJICAgIHJldHVybiAoKGxvbmcgZG91YmxlKXgqcCkvKChsb25nIGRvdWJsZSl4KnApOworCisKKwlpZiAoaHA8PTB4N2ZkZmZmZmYpIHggPSBfX2llZWU3NTRfZm1vZCh4LHArcCk7CS8qIG5vdyB4IDwgMnAgKi8KKwlpZiAoKChoeC1ocCl8KGx4LWxwKSk9PTApIHJldHVybiB6ZXJvKng7CisJeCAgPSBmYWJzKHgpOworCXAgID0gZmFicyhwKTsKKwlpZiAoaHA8MHgwMDIwMDAwMCkgeworCSAgICBpZih4K3g+cCkgeworCQl4LT1wOworCQlpZih4K3g+PXApIHggLT0gcDsKKwkgICAgfQorCX0gZWxzZSB7CisJICAgIHBfaGFsZiA9IDAuNSpwOworCSAgICBpZih4PnBfaGFsZikgeworCQl4LT1wOworCQlpZih4Pj1wX2hhbGYpIHggLT0gcDsKKwkgICAgfQorCX0KKwlHRVRfSElHSF9XT1JEKGh4LHgpOworCWlmICgoaHgmMHg3ZmZmZmZmZik9PTApIGh4ID0gMDsKKwlTRVRfSElHSF9XT1JEKHgsaHhec3gpOworCXJldHVybiB4OworfQorCisjaWYgTERCTF9NQU5UX0RJRyA9PSA1MworX193ZWFrX3JlZmVyZW5jZShyZW1haW5kZXIsIHJlbWFpbmRlcmwpOworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL2VfcmVtYWluZGVyZi5jIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9lX3JlbWFpbmRlcmYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMDAxNGFlCi0tLSAvZGV2L251bGwKKysrIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9lX3JlbWFpbmRlcmYuYwpAQCAtMCwwICsxLDY1IEBACisvKiBlX3JlbWFpbmRlcmYuYyAtLSBmbG9hdCB2ZXJzaW9uIG9mIGVfcmVtYWluZGVyLmMuCisgKiBDb252ZXJzaW9uIHRvIGZsb2F0IGJ5IElhbiBMYW5jZSBUYXlsb3IsIEN5Z251cyBTdXBwb3J0LCBpYW5AY3lnbnVzLmNvbS4KKyAqLworCisvKgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogQ29weXJpZ2h0IChDKSAxOTkzIGJ5IFN1biBNaWNyb3N5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBEZXZlbG9wZWQgYXQgU3VuUHJvLCBhIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gYnVzaW5lc3MuCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCisgKiBzb2Z0d2FyZSBpcyBmcmVlbHkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGlzIG5vdGljZQorICogaXMgcHJlc2VydmVkLgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJTRCQiKTsKKworI2luY2x1ZGUgIm1hdGguaCIKKyNpbmNsdWRlICJtYXRoX3ByaXZhdGUuaCIKKworc3RhdGljIGNvbnN0IGZsb2F0IHplcm8gPSAwLjA7CisKKworZmxvYXQKK19faWVlZTc1NF9yZW1haW5kZXJmKGZsb2F0IHgsIGZsb2F0IHApCit7CisJaW50MzJfdCBoeCxocDsKKwl1X2ludDMyX3Qgc3g7CisJZmxvYXQgcF9oYWxmOworCisJR0VUX0ZMT0FUX1dPUkQoaHgseCk7CisJR0VUX0ZMT0FUX1dPUkQoaHAscCk7CisJc3ggPSBoeCYweDgwMDAwMDAwOworCWhwICY9IDB4N2ZmZmZmZmY7CisJaHggJj0gMHg3ZmZmZmZmZjsKKworICAgIC8qIHB1cmdlIG9mZiBleGNlcHRpb24gdmFsdWVzICovCisJaWYoaHA9PTApIHJldHVybiAoeCpwKS8oeCpwKTsJIAkvKiBwID0gMCAqLworCWlmKChoeD49MHg3ZjgwMDAwMCl8fAkJCS8qIHggbm90IGZpbml0ZSAqLworCSAgKChocD4weDdmODAwMDAwKSkpCQkJLyogcCBpcyBOYU4gKi8KKwkgICAgcmV0dXJuICgobG9uZyBkb3VibGUpeCpwKS8oKGxvbmcgZG91YmxlKXgqcCk7CisKKworCWlmIChocDw9MHg3ZWZmZmZmZikgeCA9IF9faWVlZTc1NF9mbW9kZih4LHArcCk7CS8qIG5vdyB4IDwgMnAgKi8KKwlpZiAoKGh4LWhwKT09MCkgcmV0dXJuIHplcm8qeDsKKwl4ICA9IGZhYnNmKHgpOworCXAgID0gZmFic2YocCk7CisJaWYgKGhwPDB4MDEwMDAwMDApIHsKKwkgICAgaWYoeCt4PnApIHsKKwkJeC09cDsKKwkJaWYoeCt4Pj1wKSB4IC09IHA7CisJICAgIH0KKwl9IGVsc2UgeworCSAgICBwX2hhbGYgPSAoZmxvYXQpMC41KnA7CisJICAgIGlmKHg+cF9oYWxmKSB7CisJCXgtPXA7CisJCWlmKHg+PXBfaGFsZikgeCAtPSBwOworCSAgICB9CisJfQorCUdFVF9GTE9BVF9XT1JEKGh4LHgpOworCWlmICgoaHgmMHg3ZmZmZmZmZik9PTApIGh4ID0gMDsKKwlTRVRfRkxPQVRfV09SRCh4LGh4XnN4KTsKKwlyZXR1cm4geDsKK30KZGlmZiAtLWdpdCBhL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvZV9yZW1haW5kZXJsLmMgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL2VfcmVtYWluZGVybC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzMzI3YjgKLS0tIC9kZXYvbnVsbAorKysgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL2VfcmVtYWluZGVybC5jCkBAIC0wLDAgKzEsMzggQEAKKy8qLQorICogQ29weXJpZ2h0IChjKSAyMDA4IERhdmlkIFNjaHVsdHogPGRhc0BGcmVlQlNELk9SRz4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorX19GQlNESUQoIiRGcmVlQlNEJCIpOworCisjaW5jbHVkZSA8bWF0aC5oPgorCitsb25nIGRvdWJsZQorcmVtYWluZGVybChsb25nIGRvdWJsZSB4LCBsb25nIGRvdWJsZSB5KQoreworCWludCBxdW87CisKKwlyZXR1cm4gKHJlbXF1b2woeCwgeSwgJnF1bykpOworfQpkaWZmIC0tZ2l0IGEvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9lX3NjYWxiLmMgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL2Vfc2NhbGIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMGE3YjViCi0tLSAvZGV2L251bGwKKysrIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9lX3NjYWxiLmMKQEAgLTAsMCArMSw0NyBAQAorCisvKiBAKCMpZV9zY2FsYi5jIDEuMyA5NS8wMS8xOCAqLworLyoKKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIENvcHlyaWdodCAoQykgMTk5MyBieSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogRGV2ZWxvcGVkIGF0IFN1blNvZnQsIGEgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBidXNpbmVzcy4KKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKKyAqIHNvZnR3YXJlIGlzIGZyZWVseSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoaXMgbm90aWNlIAorICogaXMgcHJlc2VydmVkLgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJTRCQiKTsKKworLyoKKyAqIF9faWVlZTc1NF9zY2FsYih4LCBmbikgaXMgcHJvdmlkZSBmb3IKKyAqIHBhc3NpbmcgdmFyaW91cyBzdGFuZGFyZCB0ZXN0IHN1aXRlLiBPbmUgCisgKiBzaG91bGQgdXNlIHNjYWxibigpIGluc3RlYWQuCisgKi8KKworI2luY2x1ZGUgIm1hdGguaCIKKyNpbmNsdWRlICJtYXRoX3ByaXZhdGUuaCIKKworI2lmZGVmIF9TQ0FMQl9JTlQKK2RvdWJsZQorX19pZWVlNzU0X3NjYWxiKGRvdWJsZSB4LCBpbnQgZm4pCisjZWxzZQorZG91YmxlCitfX2llZWU3NTRfc2NhbGIoZG91YmxlIHgsIGRvdWJsZSBmbikKKyNlbmRpZgoreworI2lmZGVmIF9TQ0FMQl9JTlQKKwlyZXR1cm4gc2NhbGJuKHgsZm4pOworI2Vsc2UKKwlpZiAoaXNuYW4oeCl8fGlzbmFuKGZuKSkgcmV0dXJuIHgqZm47CisJaWYgKCFmaW5pdGUoZm4pKSB7CisJICAgIGlmKGZuPjAuMCkgcmV0dXJuIHgqZm47CisJICAgIGVsc2UgICAgICAgcmV0dXJuIHgvKC1mbik7CisJfQorCWlmIChyaW50KGZuKSE9Zm4pIHJldHVybiAoZm4tZm4pLyhmbi1mbik7CisJaWYgKCBmbiA+IDY1MDAwLjApIHJldHVybiBzY2FsYm4oeCwgNjUwMDApOworCWlmICgtZm4gPiA2NTAwMC4wKSByZXR1cm4gc2NhbGJuKHgsLTY1MDAwKTsKKwlyZXR1cm4gc2NhbGJuKHgsKGludClmbik7CisjZW5kaWYKK30KZGlmZiAtLWdpdCBhL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvZV9zY2FsYmYuYyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvZV9zY2FsYmYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDllOTA0Ci0tLSAvZGV2L251bGwKKysrIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9lX3NjYWxiZi5jCkBAIC0wLDAgKzEsNDMgQEAKKy8qIGVfc2NhbGJmLmMgLS0gZmxvYXQgdmVyc2lvbiBvZiBlX3NjYWxiLmMuCisgKiBDb252ZXJzaW9uIHRvIGZsb2F0IGJ5IElhbiBMYW5jZSBUYXlsb3IsIEN5Z251cyBTdXBwb3J0LCBpYW5AY3lnbnVzLmNvbS4KKyAqLworCisvKgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogQ29weXJpZ2h0IChDKSAxOTkzIGJ5IFN1biBNaWNyb3N5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBEZXZlbG9wZWQgYXQgU3VuUHJvLCBhIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gYnVzaW5lc3MuCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCisgKiBzb2Z0d2FyZSBpcyBmcmVlbHkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGlzIG5vdGljZQorICogaXMgcHJlc2VydmVkLgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJTRCQiKTsKKworI2luY2x1ZGUgIm1hdGguaCIKKyNpbmNsdWRlICJtYXRoX3ByaXZhdGUuaCIKKworI2lmZGVmIF9TQ0FMQl9JTlQKK2Zsb2F0CitfX2llZWU3NTRfc2NhbGJmKGZsb2F0IHgsIGludCBmbikKKyNlbHNlCitmbG9hdAorX19pZWVlNzU0X3NjYWxiZihmbG9hdCB4LCBmbG9hdCBmbikKKyNlbmRpZgoreworI2lmZGVmIF9TQ0FMQl9JTlQKKwlyZXR1cm4gc2NhbGJuZih4LGZuKTsKKyNlbHNlCisJaWYgKChpc25hbmYpKHgpfHwoaXNuYW5mKShmbikpIHJldHVybiB4KmZuOworCWlmICghZmluaXRlZihmbikpIHsKKwkgICAgaWYoZm4+KGZsb2F0KTAuMCkgcmV0dXJuIHgqZm47CisJICAgIGVsc2UgICAgICAgcmV0dXJuIHgvKC1mbik7CisJfQorCWlmIChyaW50ZihmbikhPWZuKSByZXR1cm4gKGZuLWZuKS8oZm4tZm4pOworCWlmICggZm4gPiAoZmxvYXQpNjUwMDAuMCkgcmV0dXJuIHNjYWxibmYoeCwgNjUwMDApOworCWlmICgtZm4gPiAoZmxvYXQpNjUwMDAuMCkgcmV0dXJuIHNjYWxibmYoeCwtNjUwMDApOworCXJldHVybiBzY2FsYm5mKHgsKGludClmbik7CisjZW5kaWYKK30KZGlmZiAtLWdpdCBhL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvZV9zaW5oLmMgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL2Vfc2luaC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3NDQyZDAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL2Vfc2luaC5jCkBAIC0wLDAgKzEsNzMgQEAKKworLyogQCgjKWVfc2luaC5jIDEuMyA5NS8wMS8xOCAqLworLyoKKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIENvcHlyaWdodCAoQykgMTk5MyBieSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogRGV2ZWxvcGVkIGF0IFN1blNvZnQsIGEgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBidXNpbmVzcy4KKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKKyAqIHNvZnR3YXJlIGlzIGZyZWVseSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoaXMgbm90aWNlIAorICogaXMgcHJlc2VydmVkLgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJTRCQiKTsKKworLyogX19pZWVlNzU0X3NpbmgoeCkKKyAqIE1ldGhvZCA6IAorICogbWF0aGVtYXRpY2FsbHkgc2luaCh4KSBpZiBkZWZpbmVkIHRvIGJlIChleHAoeCktZXhwKC14KSkvMgorICoJMS4gUmVwbGFjZSB4IGJ5IHx4fCAoc2luaCgteCkgPSAtc2luaCh4KSkuIAorICoJMi4gCisgKgkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRSArIEUvKEUrMSkKKyAqCSAgICAwICAgICAgICA8PSB4IDw9IDIyICAgICA6ICBzaW5oKHgpIDo9IC0tLS0tLS0tLS0tLS0tLCBFPWV4cG0xKHgpCisgKgkJCSAgICAgICAJCQkgICAgICAgIDIKKyAqCisgKgkgICAgMjIgICAgICAgPD0geCA8PSBsbm92ZnQgOiAgc2luaCh4KSA6PSBleHAoeCkvMiAKKyAqCSAgICBsbm92ZnQgICA8PSB4IDw9IGxuMm92ZnQ6ICBzaW5oKHgpIDo9IGV4cCh4LzIpLzIgKiBleHAoeC8yKQorICoJICAgIGxuMm92ZnQgIDwgIHgJICAgIDogIHNpbmgoeCkgOj0geCpzaHVnZSAob3ZlcmZsb3cpCisgKgorICogU3BlY2lhbCBjYXNlczoKKyAqCXNpbmgoeCkgaXMgfHh8IGlmIHggaXMgK0lORiwgLUlORiwgb3IgTmFOLgorICoJb25seSBzaW5oKDApPTAgaXMgZXhhY3QgZm9yIGZpbml0ZSB4LgorICovCisKKyNpbmNsdWRlICJtYXRoLmgiCisjaW5jbHVkZSAibWF0aF9wcml2YXRlLmgiCisKK3N0YXRpYyBjb25zdCBkb3VibGUgb25lID0gMS4wLCBzaHVnZSA9IDEuMGUzMDc7CisKK2RvdWJsZQorX19pZWVlNzU0X3NpbmgoZG91YmxlIHgpCit7CisJZG91YmxlIHQsaDsKKwlpbnQzMl90IGl4LGp4OworCisgICAgLyogSGlnaCB3b3JkIG9mIHx4fC4gKi8KKwlHRVRfSElHSF9XT1JEKGp4LHgpOworCWl4ID0gangmMHg3ZmZmZmZmZjsKKworICAgIC8qIHggaXMgSU5GIG9yIE5hTiAqLworCWlmKGl4Pj0weDdmZjAwMDAwKSByZXR1cm4geCt4OwkKKworCWggPSAwLjU7CisJaWYgKGp4PDApIGggPSAtaDsKKyAgICAvKiB8eHwgaW4gWzAsMjJdLCByZXR1cm4gc2lnbih4KSowLjUqKEUrRS8oRSsxKSkpICovCisJaWYgKGl4IDwgMHg0MDM2MDAwMCkgewkJLyogfHh8PDIyICovCisJICAgIGlmIChpeDwweDNlMzAwMDAwKSAJCS8qIHx4fDwyKiotMjggKi8KKwkJaWYoc2h1Z2UreD5vbmUpIHJldHVybiB4Oy8qIHNpbmgodGlueSkgPSB0aW55IHdpdGggaW5leGFjdCAqLworCSAgICB0ID0gZXhwbTEoZmFicyh4KSk7CisJICAgIGlmKGl4PDB4M2ZmMDAwMDApIHJldHVybiBoKigyLjAqdC10KnQvKHQrb25lKSk7CisJICAgIHJldHVybiBoKih0K3QvKHQrb25lKSk7CisJfQorCisgICAgLyogfHh8IGluIFsyMiwgbG9nKG1heGRvdWJsZSldIHJldHVybiAwLjUqZXhwKHx4fCkgKi8KKwlpZiAoaXggPCAweDQwODYyRTQyKSAgcmV0dXJuIGgqX19pZWVlNzU0X2V4cChmYWJzKHgpKTsKKworICAgIC8qIHx4fCBpbiBbbG9nKG1heGRvdWJsZSksIG92ZXJmbG93dGhyZXNvbGRdICovCisJaWYgKGl4PD0weDQwODYzM0NFKQorCSAgICByZXR1cm4gaCoyLjAqX19sZGV4cF9leHAoZmFicyh4KSwgLTEpOworCisgICAgLyogfHh8ID4gb3ZlcmZsb3d0aHJlc29sZCwgc2luaCh4KSBvdmVyZmxvdyAqLworCXJldHVybiB4KnNodWdlOworfQpkaWZmIC0tZ2l0IGEvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9lX3NpbmhmLmMgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL2Vfc2luaGYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYmUyZGMzCi0tLSAvZGV2L251bGwKKysrIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9lX3NpbmhmLmMKQEAgLTAsMCArMSw1NiBAQAorLyogZV9zaW5oZi5jIC0tIGZsb2F0IHZlcnNpb24gb2YgZV9zaW5oLmMuCisgKiBDb252ZXJzaW9uIHRvIGZsb2F0IGJ5IElhbiBMYW5jZSBUYXlsb3IsIEN5Z251cyBTdXBwb3J0LCBpYW5AY3lnbnVzLmNvbS4KKyAqLworCisvKgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogQ29weXJpZ2h0IChDKSAxOTkzIGJ5IFN1biBNaWNyb3N5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBEZXZlbG9wZWQgYXQgU3VuUHJvLCBhIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gYnVzaW5lc3MuCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCisgKiBzb2Z0d2FyZSBpcyBmcmVlbHkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGlzIG5vdGljZQorICogaXMgcHJlc2VydmVkLgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJTRCQiKTsKKworI2luY2x1ZGUgIm1hdGguaCIKKyNpbmNsdWRlICJtYXRoX3ByaXZhdGUuaCIKKworc3RhdGljIGNvbnN0IGZsb2F0IG9uZSA9IDEuMCwgc2h1Z2UgPSAxLjBlMzc7CisKK2Zsb2F0CitfX2llZWU3NTRfc2luaGYoZmxvYXQgeCkKK3sKKwlmbG9hdCB0LGg7CisJaW50MzJfdCBpeCxqeDsKKworCUdFVF9GTE9BVF9XT1JEKGp4LHgpOworCWl4ID0gangmMHg3ZmZmZmZmZjsKKworICAgIC8qIHggaXMgSU5GIG9yIE5hTiAqLworCWlmKGl4Pj0weDdmODAwMDAwKSByZXR1cm4geCt4OworCisJaCA9IDAuNTsKKwlpZiAoang8MCkgaCA9IC1oOworICAgIC8qIHx4fCBpbiBbMCw5XSwgcmV0dXJuIHNpZ24oeCkqMC41KihFK0UvKEUrMSkpKSAqLworCWlmIChpeCA8IDB4NDExMDAwMDApIHsJCS8qIHx4fDw5ICovCisJICAgIGlmIChpeDwweDM5ODAwMDAwKSAJCS8qIHx4fDwyKiotMTIgKi8KKwkJaWYoc2h1Z2UreD5vbmUpIHJldHVybiB4Oy8qIHNpbmgodGlueSkgPSB0aW55IHdpdGggaW5leGFjdCAqLworCSAgICB0ID0gZXhwbTFmKGZhYnNmKHgpKTsKKwkgICAgaWYoaXg8MHgzZjgwMDAwMCkgcmV0dXJuIGgqKChmbG9hdCkyLjAqdC10KnQvKHQrb25lKSk7CisJICAgIHJldHVybiBoKih0K3QvKHQrb25lKSk7CisJfQorCisgICAgLyogfHh8IGluIFs5LCBsb2dmKG1heGZsb2F0KV0gcmV0dXJuIDAuNSpleHAofHh8KSAqLworCWlmIChpeCA8IDB4NDJiMTcyMTcpICByZXR1cm4gaCpfX2llZWU3NTRfZXhwZihmYWJzZih4KSk7CisKKyAgICAvKiB8eHwgaW4gW2xvZ2YobWF4ZmxvYXQpLCBvdmVyZmxvd3RocmVzb2xkXSAqLworCWlmIChpeDw9MHg0MmIyZDRmYykKKwkgICAgcmV0dXJuIGgqMi4wRipfX2xkZXhwX2V4cGYoZmFic2YoeCksIC0xKTsKKworICAgIC8qIHx4fCA+IG92ZXJmbG93dGhyZXNvbGQsIHNpbmgoeCkgb3ZlcmZsb3cgKi8KKwlyZXR1cm4geCpzaHVnZTsKK30KZGlmZiAtLWdpdCBhL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvZV9zcXJ0LmMgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL2Vfc3FydC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyZmI1NmUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL2Vfc3FydC5jCkBAIC0wLDAgKzEsNDUxIEBACisKKy8qIEAoIyllX3NxcnQuYyAxLjMgOTUvMDEvMTggKi8KKy8qCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBDb3B5cmlnaHQgKEMpIDE5OTMgYnkgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIERldmVsb3BlZCBhdCBTdW5Tb2Z0LCBhIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gYnVzaW5lc3MuCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCisgKiBzb2Z0d2FyZSBpcyBmcmVlbHkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGlzIG5vdGljZSAKKyAqIGlzIHByZXNlcnZlZC4KKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CitfX0ZCU0RJRCgiJEZyZWVCU0QkIik7CisKKy8qIF9faWVlZTc1NF9zcXJ0KHgpCisgKiBSZXR1cm4gY29ycmVjdGx5IHJvdW5kZWQgc3FydC4KKyAqICAgICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCSAgICAgfCAgVXNlIHRoZSBoYXJkd2FyZSBzcXJ0IGlmIHlvdSBoYXZlIG9uZSB8CisgKiAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBNZXRob2Q6IAorICogICBCaXQgYnkgYml0IG1ldGhvZCB1c2luZyBpbnRlZ2VyIGFyaXRobWV0aWMuIChTbG93LCBidXQgcG9ydGFibGUpIAorICogICAxLiBOb3JtYWxpemF0aW9uCisgKglTY2FsZSB4IHRvIHkgaW4gWzEsNCkgd2l0aCBldmVuIHBvd2VycyBvZiAyOiAKKyAqCWZpbmQgYW4gaW50ZWdlciBrIHN1Y2ggdGhhdCAgMSA8PSAoeT14KjJeKDJrKSkgPCA0LCB0aGVuCisgKgkJc3FydCh4KSA9IDJeayAqIHNxcnQoeSkKKyAqICAgMi4gQml0IGJ5IGJpdCBjb21wdXRhdGlvbgorICoJTGV0IHEgID0gc3FydCh5KSB0cnVuY2F0ZWQgdG8gaSBiaXQgYWZ0ZXIgYmluYXJ5IHBvaW50IChxID0gMSksCisgKgkgICAgIGkJCQkJCQkJIDAKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkrMSAgICAgICAgIDIKKyAqCSAgICBzICA9IDIqcSAsIGFuZAl5ICA9ICAyICAgKiAoIHkgLSBxICApLgkJKDEpCisgKgkgICAgIGkgICAgICBpICAgICAgICAgICAgaSAgICAgICAgICAgICAgICAgaQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICoJVG8gY29tcHV0ZSBxICAgIGZyb20gcSAsIG9uZSBjaGVja3Mgd2hldGhlciAKKyAqCQkgICAgaSsxICAgICAgIGkgICAgICAgICAgICAgICAgICAgICAgIAorICoKKyAqCQkJICAgICAgLShpKzEpIDIKKyAqCQkJKHEgKyAyICAgICAgKSA8PSB5LgkJCSgyKQorICogICAgIAkJCSAgaQorICoJCQkJCQkJICAgICAgLShpKzEpCisgKglJZiAoMikgaXMgZmFsc2UsIHRoZW4gcSAgID0gcSA7IG90aGVyd2lzZSBxICAgPSBxICArIDIgICAgICAuCisgKgkJIAkgICAgICAgaSsxICAgaSAgICAgICAgICAgICBpKzEgICBpCisgKgorICoJV2l0aCBzb21lIGFsZ2VicmljIG1hbmlwdWxhdGlvbiwgaXQgaXMgbm90IGRpZmZpY3VsdCB0byBzZWUKKyAqCXRoYXQgKDIpIGlzIGVxdWl2YWxlbnQgdG8gCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLShpKzEpCisgKgkJCXMgICsgIDIgICAgICAgPD0geQkJCSgzKQorICoJCQkgaSAgICAgICAgICAgICAgICBpCisgKgorICoJVGhlIGFkdmFudGFnZSBvZiAoMykgaXMgdGhhdCBzICBhbmQgeSAgY2FuIGJlIGNvbXB1dGVkIGJ5IAorICoJCQkJICAgICAgaSAgICAgIGkKKyAqCXRoZSBmb2xsb3dpbmcgcmVjdXJyZW5jZSBmb3JtdWxhOgorICoJICAgIGlmICgzKSBpcyBmYWxzZQorICoKKyAqCSAgICBzICAgICA9ICBzICAsCXkgICAgPSB5ICAgOwkJCSg0KQorICoJICAgICBpKzEgICAgICBpCQkgaSsxICAgIGkKKyAqCisgKgkgICAgb3RoZXJ3aXNlLAorICogICAgICAgICAgICAgICAgICAgICAgICAgLWkgICAgICAgICAgICAgICAgICAgICAtKGkrMSkKKyAqCSAgICBzCSAgPSAgcyAgKyAyICAsICB5ICAgID0geSAgLSAgcyAgLSAyICAJCSg1KQorICogICAgICAgICAgIGkrMSAgICAgIGkgICAgICAgICAgaSsxICAgIGkgICAgIGkKKyAqCQkJCQorICoJT25lIG1heSBlYXNpbHkgdXNlIGluZHVjdGlvbiB0byBwcm92ZSAoNCkgYW5kICg1KS4gCisgKglOb3RlLiBTaW5jZSB0aGUgbGVmdCBoYW5kIHNpZGUgb2YgKDMpIGNvbnRhaW4gb25seSBpKzIgYml0cywKKyAqCSAgICAgIGl0IGRvZXMgbm90IG5lY2Vzc2FyeSB0byBkbyBhIGZ1bGwgKDUzLWJpdCkgY29tcGFyaXNvbiAKKyAqCSAgICAgIGluICgzKS4KKyAqICAgMy4gRmluYWwgcm91bmRpbmcKKyAqCUFmdGVyIGdlbmVyYXRpbmcgdGhlIDUzIGJpdHMgcmVzdWx0LCB3ZSBjb21wdXRlIG9uZSBtb3JlIGJpdC4KKyAqCVRvZ2V0aGVyIHdpdGggdGhlIHJlbWFpbmRlciwgd2UgY2FuIGRlY2lkZSB3aGV0aGVyIHRoZQorICoJcmVzdWx0IGlzIGV4YWN0LCBiaWdnZXIgdGhhbiAxLzJ1bHAsIG9yIGxlc3MgdGhhbiAxLzJ1bHAKKyAqCShpdCB3aWxsIG5ldmVyIGVxdWFsIHRvIDEvMnVscCkuCisgKglUaGUgcm91bmRpbmcgbW9kZSBjYW4gYmUgZGV0ZWN0ZWQgYnkgY2hlY2tpbmcgd2hldGhlcgorICoJaHVnZSArIHRpbnkgaXMgZXF1YWwgdG8gaHVnZSwgYW5kIHdoZXRoZXIgaHVnZSAtIHRpbnkgaXMKKyAqCWVxdWFsIHRvIGh1Z2UgZm9yIHNvbWUgZmxvYXRpbmcgcG9pbnQgbnVtYmVyICJodWdlIiBhbmQgInRpbnkiLgorICoJCQorICogU3BlY2lhbCBjYXNlczoKKyAqCXNxcnQoKy0wKSA9ICstMCAJLi4uIGV4YWN0CisgKglzcXJ0KGluZikgPSBpbmYKKyAqCXNxcnQoLXZlKSA9IE5hTgkJLi4uIHdpdGggaW52YWxpZCBzaWduYWwKKyAqCXNxcnQoTmFOKSA9IE5hTgkJLi4uIHdpdGggaW52YWxpZCBzaWduYWwgZm9yIHNpZ25hbGluZyBOYU4KKyAqCisgKiBPdGhlciBtZXRob2RzIDogc2VlIHRoZSBhcHBlbmRlZCBmaWxlIGF0IHRoZSBlbmQgb2YgdGhlIHByb2dyYW0gYmVsb3cuCisgKi0tLS0tLS0tLS0tLS0tLQorICovCisKKyNpbmNsdWRlIDxmbG9hdC5oPgorCisjaW5jbHVkZSAibWF0aC5oIgorI2luY2x1ZGUgIm1hdGhfcHJpdmF0ZS5oIgorCitzdGF0aWMJY29uc3QgZG91YmxlCW9uZQk9IDEuMCwgdGlueT0xLjBlLTMwMDsKKworZG91YmxlCitfX2llZWU3NTRfc3FydChkb3VibGUgeCkKK3sKKwlkb3VibGUgejsKKwlpbnQzMl90IHNpZ24gPSAoaW50KTB4ODAwMDAwMDA7CisJaW50MzJfdCBpeDAsczAscSxtLHQsaTsKKwl1X2ludDMyX3Qgcix0MSxzMSxpeDEscTE7CisKKwlFWFRSQUNUX1dPUkRTKGl4MCxpeDEseCk7CisKKyAgICAvKiB0YWtlIGNhcmUgb2YgSW5mIGFuZCBOYU4gKi8KKwlpZigoaXgwJjB4N2ZmMDAwMDApPT0weDdmZjAwMDAwKSB7CQkJCisJICAgIHJldHVybiB4KngreDsJCS8qIHNxcnQoTmFOKT1OYU4sIHNxcnQoK2luZik9K2luZgorCQkJCQkgICBzcXJ0KC1pbmYpPXNOYU4gKi8KKwl9IAorICAgIC8qIHRha2UgY2FyZSBvZiB6ZXJvICovCisJaWYoaXgwPD0wKSB7CisJICAgIGlmKCgoaXgwJih+c2lnbikpfGl4MSk9PTApIHJldHVybiB4Oy8qIHNxcnQoKy0wKSA9ICstMCAqLworCSAgICBlbHNlIGlmKGl4MDwwKQorCQlyZXR1cm4gKHgteCkvKHgteCk7CQkvKiBzcXJ0KC12ZSkgPSBzTmFOICovCisJfQorICAgIC8qIG5vcm1hbGl6ZSB4ICovCisJbSA9IChpeDA+PjIwKTsKKwlpZihtPT0wKSB7CQkJCS8qIHN1Ym5vcm1hbCB4ICovCisJICAgIHdoaWxlKGl4MD09MCkgeworCQltIC09IDIxOworCQlpeDAgfD0gKGl4MT4+MTEpOyBpeDEgPDw9IDIxOworCSAgICB9CisJICAgIGZvcihpPTA7KGl4MCYweDAwMTAwMDAwKT09MDtpKyspIGl4MDw8PTE7CisJICAgIG0gLT0gaS0xOworCSAgICBpeDAgfD0gKGl4MT4+KDMyLWkpKTsKKwkgICAgaXgxIDw8PSBpOworCX0KKwltIC09IDEwMjM7CS8qIHVuYmlhcyBleHBvbmVudCAqLworCWl4MCA9IChpeDAmMHgwMDBmZmZmZil8MHgwMDEwMDAwMDsKKwlpZihtJjEpewkvKiBvZGQgbSwgZG91YmxlIHggdG8gbWFrZSBpdCBldmVuICovCisJICAgIGl4MCArPSBpeDAgKyAoKGl4MSZzaWduKT4+MzEpOworCSAgICBpeDEgKz0gaXgxOworCX0KKwltID4+PSAxOwkvKiBtID0gW20vMl0gKi8KKworICAgIC8qIGdlbmVyYXRlIHNxcnQoeCkgYml0IGJ5IGJpdCAqLworCWl4MCArPSBpeDAgKyAoKGl4MSZzaWduKT4+MzEpOworCWl4MSArPSBpeDE7CisJcSA9IHExID0gczAgPSBzMSA9IDA7CS8qIFtxLHExXSA9IHNxcnQoeCkgKi8KKwlyID0gMHgwMDIwMDAwMDsJCS8qIHIgPSBtb3ZpbmcgYml0IGZyb20gcmlnaHQgdG8gbGVmdCAqLworCisJd2hpbGUociE9MCkgeworCSAgICB0ID0gczArcjsgCisJICAgIGlmKHQ8PWl4MCkgeyAKKwkJczAgICA9IHQrcjsgCisJCWl4MCAtPSB0OyAKKwkJcSAgICs9IHI7IAorCSAgICB9IAorCSAgICBpeDAgKz0gaXgwICsgKChpeDEmc2lnbik+PjMxKTsKKwkgICAgaXgxICs9IGl4MTsKKwkgICAgcj4+PTE7CisJfQorCisJciA9IHNpZ247CisJd2hpbGUociE9MCkgeworCSAgICB0MSA9IHMxK3I7IAorCSAgICB0ICA9IHMwOworCSAgICBpZigodDxpeDApfHwoKHQ9PWl4MCkmJih0MTw9aXgxKSkpIHsgCisJCXMxICA9IHQxK3I7CisJCWlmKCgodDEmc2lnbik9PXNpZ24pJiYoczEmc2lnbik9PTApIHMwICs9IDE7CisJCWl4MCAtPSB0OworCQlpZiAoaXgxIDwgdDEpIGl4MCAtPSAxOworCQlpeDEgLT0gdDE7CisJCXExICArPSByOworCSAgICB9CisJICAgIGl4MCArPSBpeDAgKyAoKGl4MSZzaWduKT4+MzEpOworCSAgICBpeDEgKz0gaXgxOworCSAgICByPj49MTsKKwl9CisKKyAgICAvKiB1c2UgZmxvYXRpbmcgYWRkIHRvIGZpbmQgb3V0IHJvdW5kaW5nIGRpcmVjdGlvbiAqLworCWlmKChpeDB8aXgxKSE9MCkgeworCSAgICB6ID0gb25lLXRpbnk7IC8qIHRyaWdnZXIgaW5leGFjdCBmbGFnICovCisJICAgIGlmICh6Pj1vbmUpIHsKKwkgICAgICAgIHogPSBvbmUrdGlueTsKKwkgICAgICAgIGlmIChxMT09KHVfaW50MzJfdCkweGZmZmZmZmZmKSB7IHExPTA7IHEgKz0gMTt9CisJCWVsc2UgaWYgKHo+b25lKSB7CisJCSAgICBpZiAocTE9PSh1X2ludDMyX3QpMHhmZmZmZmZmZSkgcSs9MTsKKwkJICAgIHExKz0yOyAKKwkJfSBlbHNlCisJICAgICAgICAgICAgcTEgKz0gKHExJjEpOworCSAgICB9CisJfQorCWl4MCA9IChxPj4xKSsweDNmZTAwMDAwOworCWl4MSA9ICBxMT4+MTsKKwlpZiAoKHEmMSk9PTEpIGl4MSB8PSBzaWduOworCWl4MCArPSAobSA8PDIwKTsKKwlJTlNFUlRfV09SRFMoeixpeDAsaXgxKTsKKwlyZXR1cm4gejsKK30KKworI2lmIChMREJMX01BTlRfRElHID09IDUzKQorX193ZWFrX3JlZmVyZW5jZShzcXJ0LCBzcXJ0bCk7CisjZW5kaWYKKworLyoKK090aGVyIG1ldGhvZHMgICh1c2UgZmxvYXRpbmctcG9pbnQgYXJpdGhtZXRpYykKKy0tLS0tLS0tLS0tLS0KKyhUaGlzIGlzIGEgY29weSBvZiBhIGRyYWZ0ZWQgcGFwZXIgYnkgUHJvZiBXLiBLYWhhbiAKK2FuZCBLLkMuIE5nLCB3cml0dGVuIGluIE1heSwgMTk4NikKKworCVR3byBhbGdvcml0aG1zIGFyZSBnaXZlbiBoZXJlIHRvIGltcGxlbWVudCBzcXJ0KHgpIAorCShJRUVFIGRvdWJsZSBwcmVjaXNpb24gYXJpdGhtZXRpYykgaW4gc29mdHdhcmUuCisJQm90aCBzdXBwbHkgc3FydCh4KSBjb3JyZWN0bHkgcm91bmRlZC4gVGhlIGZpcnN0IGFsZ29yaXRobSAoaW4KKwlTZWN0aW9uIEEpIHVzZXMgbmV3dG9uIGl0ZXJhdGlvbnMgYW5kIGludm9sdmVzIGZvdXIgZGl2aXNpb25zLgorCVRoZSBzZWNvbmQgb25lIHVzZXMgcmVjaXByb290IGl0ZXJhdGlvbnMgdG8gYXZvaWQgZGl2aXNpb24sIGJ1dAorCXJlcXVpcmVzIG1vcmUgbXVsdGlwbGljYXRpb25zLiBCb3RoIGFsZ29yaXRobXMgbmVlZCB0aGUgYWJpbGl0eQorCXRvIGNob3AgcmVzdWx0cyBvZiBhcml0aG1ldGljIG9wZXJhdGlvbnMgaW5zdGVhZCBvZiByb3VuZCB0aGVtLCAKKwlhbmQgdGhlIElORVhBQ1QgZmxhZyB0byBpbmRpY2F0ZSB3aGVuIGFuIGFyaXRobWV0aWMgb3BlcmF0aW9uCisJaXMgZXhlY3V0ZWQgZXhhY3RseSB3aXRoIG5vIHJvdW5kb2ZmIGVycm9yLCBhbGwgcGFydCBvZiB0aGUgCisJc3RhbmRhcmQgKElFRUUgNzU0LTE5ODUpLiBUaGUgYWJpbGl0eSB0byBwZXJmb3JtIHNoaWZ0LCBhZGQsCisJc3VidHJhY3QgYW5kIGxvZ2ljYWwgQU5EIG9wZXJhdGlvbnMgdXBvbiAzMi1iaXQgd29yZHMgaXMgbmVlZGVkCisJdG9vLCB0aG91Z2ggbm90IHBhcnQgb2YgdGhlIHN0YW5kYXJkLgorCitBLiAgc3FydCh4KSBieSBOZXd0b24gSXRlcmF0aW9uCisKKyAgICgxKQlJbml0aWFsIGFwcHJveGltYXRpb24KKworCUxldCB4MCBhbmQgeDEgYmUgdGhlIGxlYWRpbmcgYW5kIHRoZSB0cmFpbGluZyAzMi1iaXQgd29yZHMgb2YKKwlhIGZsb2F0aW5nIHBvaW50IG51bWJlciB4IChpbiBJRUVFIGRvdWJsZSBmb3JtYXQpIHJlc3BlY3RpdmVseSAKKworCSAgICAxICAgIDExCQkgICAgIDUyCQkJCSAgLi4ud2lkdGhzCisJICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJeDogfHN8CSAgZSAgICAgfAkgICAgICBmCQkJCXwKKwkgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkgICAgICBtc2IgICAgbHNiICBtc2IJCQkJICAgICAgbHNiIC4uLm9yZGVyCisKKyAKKwkgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgCSAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJeDA6ICB8c3wgICBlICAgIHwgICAgZjEgICAgIHwJIHgxOiB8ICAgICAgICAgIGYyICAgICAgICAgICB8CisJICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIAkgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisJQnkgcGVyZm9ybWluZyBzaGlmdHMgYW5kIHN1YnRyYWN0cyBvbiB4MCBhbmQgeDEgKGJvdGggcmVnYXJkZWQKKwlhcyBpbnRlZ2VycyksIHdlIG9idGFpbiBhbiA4LWJpdCBhcHByb3hpbWF0aW9uIG9mIHNxcnQoeCkgYXMKKwlmb2xsb3dzLgorCisJCWsgIDo9ICh4MD4+MSkgKyAweDFmZjgwMDAwOworCQl5MCA6PSBrIC0gVDFbMzEmKGs+PjE1KV0uCS4uLiB5IH4gc3FydCh4KSB0byA4IGJpdHMKKwlIZXJlIGsgaXMgYSAzMi1iaXQgaW50ZWdlciBhbmQgVDFbXSBpcyBhbiBpbnRlZ2VyIGFycmF5IGNvbnRhaW5pbmcKKwljb3JyZWN0aW9uIHRlcm1zLiBOb3cgbWFnaWNhbGx5IHRoZSBmbG9hdGluZyB2YWx1ZSBvZiB5ICh5J3MKKwlsZWFkaW5nIDMyLWJpdCB3b3JkIGlzIHkwLCB0aGUgdmFsdWUgb2YgaXRzIHRyYWlsaW5nIHdvcmQgaXMgMCkKKwlhcHByb3hpbWF0ZXMgc3FydCh4KSB0byBhbG1vc3QgOC1iaXQuCisKKwlWYWx1ZSBvZiBUMToKKwlzdGF0aWMgaW50IFQxWzMyXT0geworCTAsCTEwMjQsCTMwNjIsCTU3NDYsCTkxOTMsCTEzMzQ4LAkxODE2MiwJMjM1OTIsCisJMjk1OTgsCTM2MTQ1LAk0MzIwMiwJNTA3NDAsCTU4NzMzLAk2NzE1OCwJNzU5OTIsCTg1MjE1LAorCTgzNTk5LAk3MTM3OCwJNjA0MjgsCTUwNjQ3LAk0MTk0NSwJMzQyNDYsCTI3NDc4LAkyMTU4MSwKKwkxNjQ5OSwJMTIxODMsCTg1ODgsCTU2NzQsCTM0MDMsCTE3NDIsCTY2MSwJMTMwLH07CisKKyAgICAoMikJSXRlcmF0aXZlIHJlZmluZW1lbnQKKworCUFwcGx5IEhlcm9uJ3MgcnVsZSB0aHJlZSB0aW1lcyB0byB5LCB3ZSBoYXZlIHkgYXBwcm94aW1hdGVzIAorCXNxcnQoeCkgdG8gd2l0aGluIDEgdWxwIChVbml0IGluIHRoZSBMYXN0IFBsYWNlKToKKworCQl5IDo9ICh5K3gveSkvMgkJLi4uIGFsbW9zdCAxNyBzaWcuIGJpdHMKKwkJeSA6PSAoeSt4L3kpLzIJCS4uLiBhbG1vc3QgMzUgc2lnLiBiaXRzCisJCXkgOj0geS0oeS14L3kpLzIJLi4uIHdpdGhpbiAxIHVscAorCisKKwlSZW1hcmsgMS4KKwkgICAgQW5vdGhlciB3YXkgdG8gaW1wcm92ZSB5IHRvIHdpdGhpbiAxIHVscCBpczoKKworCQl5IDo9ICh5K3gveSkJCS4uLiBhbG1vc3QgMTcgc2lnLiBiaXRzIHRvIDIqc3FydCh4KQorCQl5IDo9IHkgLSAweDAwMTAwMDA2CS4uLiBhbG1vc3QgMTggc2lnLiBiaXRzIHRvIHNxcnQoeCkKKworCQkJCTIKKwkJCSAgICAoeC15ICkqeQorCQl5IDo9IHkgKyAyKiAtLS0tLS0tLS0tCS4uLndpdGhpbiAxIHVscAorCQkJICAgICAgIDIKKwkJCSAgICAgM3kgICsgeAorCisKKwlUaGlzIGZvcm11bGEgaGFzIG9uZSBkaXZpc2lvbiBmZXdlciB0aGFuIHRoZSBvbmUgYWJvdmU7IGhvd2V2ZXIsCisJaXQgcmVxdWlyZXMgbW9yZSBtdWx0aXBsaWNhdGlvbnMgYW5kIGFkZGl0aW9ucy4gQWxzbyB4IG11c3QgYmUKKwlzY2FsZWQgaW4gYWR2YW5jZSB0byBhdm9pZCBzcHVyaW91cyBvdmVyZmxvdyBpbiBldmFsdWF0aW5nIHRoZQorCWV4cHJlc3Npb24gM3kqeSt4LiBIZW5jZSBpdCBpcyBub3QgcmVjb21tZW5kZWQgdWxlc3MgZGl2aXNpb24KKwlpcyBzbG93LiBJZiBkaXZpc2lvbiBpcyB2ZXJ5IHNsb3csIHRoZW4gb25lIHNob3VsZCB1c2UgdGhlIAorCXJlY2lwcm9vdCBhbGdvcml0aG0gZ2l2ZW4gaW4gc2VjdGlvbiBCLgorCisgICAgKDMpIEZpbmFsIGFkanVzdG1lbnQKKworCUJ5IHR3aWRkbGluZyB5J3MgbGFzdCBiaXQgaXQgaXMgcG9zc2libGUgdG8gZm9yY2UgeSB0byBiZSAKKwljb3JyZWN0bHkgcm91bmRlZCBhY2NvcmRpbmcgdG8gdGhlIHByZXZhaWxpbmcgcm91bmRpbmcgbW9kZQorCWFzIGZvbGxvd3MuIExldCByIGFuZCBpIGJlIGNvcGllcyBvZiB0aGUgcm91bmRpbmcgbW9kZSBhbmQKKwlpbmV4YWN0IGZsYWcgYmVmb3JlIGVudGVyaW5nIHRoZSBzcXVhcmUgcm9vdCBwcm9ncmFtLiBBbHNvIHdlCisJdXNlIHRoZSBleHByZXNzaW9uIHkrLXVscCBmb3IgdGhlIG5leHQgcmVwcmVzZW50YWJsZSBmbG9hdGluZworCW51bWJlcnMgKHVwIGFuZCBkb3duKSBvZiB5LiBOb3RlIHRoYXQgeSstdWxwID0gZWl0aGVyIGZpeGVkCisJcG9pbnQgeSstMSwgb3IgbXVsdGlwbHkgeSBieSBuZXh0YWZ0ZXIoMSwrLWluZikgaW4gY2hvcHBlZAorCW1vZGUuCisKKwkJSSA6PSBGQUxTRTsJLi4uIHJlc2V0IElORVhBQ1QgZmxhZyBJCisJCVIgOj0gUlo7CS4uLiBzZXQgcm91bmRpbmcgbW9kZSB0byByb3VuZC10b3dhcmQtemVybworCQl6IDo9IHgveTsJLi4uIGNob3BwZWQgcXVvdGllbnQsIHBvc3NpYmx5IGluZXhhY3QKKwkJSWYobm90IEkpIHRoZW4gewkuLi4gaWYgdGhlIHF1b3RpZW50IGlzIGV4YWN0CisJCSAgICBpZih6PXkpIHsKKwkJICAgICAgICBJIDo9IGk7CSAuLi4gcmVzdG9yZSBpbmV4YWN0IGZsYWcKKwkJICAgICAgICBSIDo9IHI7ICAuLi4gcmVzdG9yZSByb3VuZGVkIG1vZGUKKwkJICAgICAgICByZXR1cm4gc3FydCh4KTo9eS4KKwkJICAgIH0gZWxzZSB7CisJCQl6IDo9IHogLSB1bHA7CS4uLiBzcGVjaWFsIHJvdW5kaW5nCisJCSAgICB9CisJCX0KKwkJaSA6PSBUUlVFOwkJLi4uIHNxcnQoeCkgaXMgaW5leGFjdAorCQlJZiAocj1STikgdGhlbiB6PXordWxwCS4uLiByb3VuZGVkLXRvLW5lYXJlc3QKKwkJSWYgKHI9UlApIHRoZW4gewkuLi4gcm91bmQtdG93YXJkLStpbmYKKwkJICAgIHkgPSB5K3VscDsgej16K3VscDsKKwkJfQorCQl5IDo9IHkrejsJCS4uLiBjaG9wcGVkIHN1bQorCQl5MDo9eTAtMHgwMDEwMDAwMDsJLi4uIHkgOj0geS8yIGlzIGNvcnJlY3RseSByb3VuZGVkLgorCSAgICAgICAgSSA6PSBpOwkgCQkuLi4gcmVzdG9yZSBpbmV4YWN0IGZsYWcKKwkgICAgICAgIFIgOj0gcjsgIAkJLi4uIHJlc3RvcmUgcm91bmRlZCBtb2RlCisJICAgICAgICByZXR1cm4gc3FydCh4KTo9eS4KKwkJICAgIAorICAgICg0KQlTcGVjaWFsIGNhc2VzCisKKwlTcXVhcmUgcm9vdCBvZiAraW5mLCArLTAsIG9yIE5hTiBpcyBpdHNlbGY7CisJU3F1YXJlIHJvb3Qgb2YgYSBuZWdhdGl2ZSBudW1iZXIgaXMgTmFOIHdpdGggaW52YWxpZCBzaWduYWwuCisKKworQi4gIHNxcnQoeCkgYnkgUmVjaXByb290IEl0ZXJhdGlvbgorCisgICAoMSkJSW5pdGlhbCBhcHByb3hpbWF0aW9uCisKKwlMZXQgeDAgYW5kIHgxIGJlIHRoZSBsZWFkaW5nIGFuZCB0aGUgdHJhaWxpbmcgMzItYml0IHdvcmRzIG9mCisJYSBmbG9hdGluZyBwb2ludCBudW1iZXIgeCAoaW4gSUVFRSBkb3VibGUgZm9ybWF0KSByZXNwZWN0aXZlbHkKKwkoc2VlIHNlY3Rpb24gQSkuIEJ5IHBlcmZvcm1pbmcgc2hpZnMgYW5kIHN1YnRyYWN0cyBvbiB4MCBhbmQgeTAsCisJd2Ugb2J0YWluIGEgNy44LWJpdCBhcHByb3hpbWF0aW9uIG9mIDEvc3FydCh4KSBhcyBmb2xsb3dzLgorCisJICAgIGsgOj0gMHg1ZmU4MDAwMCAtICh4MD4+MSk7CisJICAgIHkwOj0gayAtIFQyWzYzJihrPj4xNCldLgkuLi4geSB+IDEvc3FydCh4KSB0byA3LjggYml0cworCisJSGVyZSBrIGlzIGEgMzItYml0IGludGVnZXIgYW5kIFQyW10gaXMgYW4gaW50ZWdlciBhcnJheSAKKwljb250YWluaW5nIGNvcnJlY3Rpb24gdGVybXMuIE5vdyBtYWdpY2FsbHkgdGhlIGZsb2F0aW5nCisJdmFsdWUgb2YgeSAoeSdzIGxlYWRpbmcgMzItYml0IHdvcmQgaXMgeTAsIHRoZSB2YWx1ZSBvZgorCWl0cyB0cmFpbGluZyB3b3JkIHkxIGlzIHNldCB0byB6ZXJvKSBhcHByb3hpbWF0ZXMgMS9zcXJ0KHgpCisJdG8gYWxtb3N0IDcuOC1iaXQuCisKKwlWYWx1ZSBvZiBUMjoKKwlzdGF0aWMgaW50IFQyWzY0XT0geworCTB4MTUwMCwJMHgyZWY4LAkweDRkNjcsCTB4NmIwMiwJMHg4N2JlLAkweGEzOTUsCTB4YmU3YSwJMHhkODY2LAorCTB4ZjE0YSwJMHgxMDkxYiwweDExZmNkLDB4MTM1NTIsMHgxNDk5OSwweDE1Yzk4LDB4MTZlMzQsMHgxN2U1ZiwKKwkweDE4ZDAzLDB4MTlhMDEsMHgxYTU0NSwweDFhZThhLDB4MWI1YzQsMHgxYmIwMSwweDFiZmRlLDB4MWMyOGQsCisJMHgxYzJkZSwweDFjMGRiLDB4MWJhNzMsMHgxYjExYywweDFhNGI1LDB4MTk1M2QsMHgxODI2NiwweDE2YmUwLAorCTB4MTY4M2UsMHgxNzlkOCwweDE4YTRkLDB4MTk5OTIsMHgxYTc4OSwweDFiNDQ1LDB4MWJmNjEsMHgxYzk4OSwKKwkweDFkMTZkLDB4MWQ3N2IsMHgxZGRkZiwweDFlMmFkLDB4MWU1YmYsMHgxZTZlOCwweDFlNjU0LDB4MWUzY2QsCisJMHgxZGYyYSwweDFkNjM1LDB4MWNiMTYsMHgxYmUyYywweDFhZTRlLDB4MTliZGUsMHgxODY4ZSwweDE2ZTJlLAorCTB4MTUyN2YsMHgxMzM0YSwweDExMDUxLDB4ZTk1MSwJMHhiZTAxLAkweDhlMGQsCTB4NTkyNCwJMHgxZWRkLH07CisKKyAgICAoMikJSXRlcmF0aXZlIHJlZmluZW1lbnQKKworCUFwcGx5IFJlY2lwcm9vdCBpdGVyYXRpb24gdGhyZWUgdGltZXMgdG8geSBhbmQgbXVsdGlwbHkgdGhlCisJcmVzdWx0IGJ5IHggdG8gZ2V0IGFuIGFwcHJveGltYXRpb24geiB0aGF0IG1hdGNoZXMgc3FydCh4KQorCXRvIGFib3V0IDEgdWxwLiBUbyBiZSBleGFjdCwgd2Ugd2lsbCBoYXZlIAorCQktMXVscCA8IHNxcnQoeCktejwxLjA2MjV1bHAuCisJCisJLi4uIHNldCByb3VuZGluZyBtb2RlIHRvIFJvdW5kLXRvLW5lYXJlc3QKKwkgICB5IDo9IHkqKDEuNS0wLjUqeCp5KnkpCS4uLiBhbG1vc3QgMTUgc2lnLiBiaXRzIHRvIDEvc3FydCh4KQorCSAgIHkgOj0geSooKDEuNS0yXi0zMCkrMC41KngqeSp5KS4uLiBhYm91dCAyOSBzaWcuIGJpdHMgdG8gMS9zcXJ0KHgpCisJLi4uIHNwZWNpYWwgYXJyYW5nZW1lbnQgZm9yIGJldHRlciBhY2N1cmFjeQorCSAgIHogOj0geCp5CQkJLi4uIDI5IGJpdHMgdG8gc3FydCh4KSwgd2l0aCB6Knk8MQorCSAgIHogOj0geiArIDAuNSp6KigxLXoqeSkJLi4uIGFib3V0IDEgdWxwIHRvIHNxcnQoeCkKKworCVJlbWFyayAyLiBUaGUgY29uc3RhbnQgMS41LTJeLTMwIGlzIGNob3NlbiB0byBiaWFzIHRoZSBlcnJvciBzbyB0aGF0CisJKGEpIHRoZSB0ZXJtIHoqeSBpbiB0aGUgZmluYWwgaXRlcmF0aW9uIGlzIGFsd2F5cyBsZXNzIHRoYW4gMTsgCisJKGIpIHRoZSBlcnJvciBpbiB0aGUgZmluYWwgcmVzdWx0IGlzIGJpYXNlZCB1cHdhcmQgc28gdGhhdAorCQktMSB1bHAgPCBzcXJ0KHgpIC0geiA8IDEuMDYyNSB1bHAKKwkgICAgaW5zdGVhZCBvZiB8c3FydCh4KS16fDwxLjAzMTI1dWxwLgorCisgICAgKDMpCUZpbmFsIGFkanVzdG1lbnQKKworCUJ5IHR3aWRkbGluZyB5J3MgbGFzdCBiaXQgaXQgaXMgcG9zc2libGUgdG8gZm9yY2UgeSB0byBiZSAKKwljb3JyZWN0bHkgcm91bmRlZCBhY2NvcmRpbmcgdG8gdGhlIHByZXZhaWxpbmcgcm91bmRpbmcgbW9kZQorCWFzIGZvbGxvd3MuIExldCByIGFuZCBpIGJlIGNvcGllcyBvZiB0aGUgcm91bmRpbmcgbW9kZSBhbmQKKwlpbmV4YWN0IGZsYWcgYmVmb3JlIGVudGVyaW5nIHRoZSBzcXVhcmUgcm9vdCBwcm9ncmFtLiBBbHNvIHdlCisJdXNlIHRoZSBleHByZXNzaW9uIHkrLXVscCBmb3IgdGhlIG5leHQgcmVwcmVzZW50YWJsZSBmbG9hdGluZworCW51bWJlcnMgKHVwIGFuZCBkb3duKSBvZiB5LiBOb3RlIHRoYXQgeSstdWxwID0gZWl0aGVyIGZpeGVkCisJcG9pbnQgeSstMSwgb3IgbXVsdGlwbHkgeSBieSBuZXh0YWZ0ZXIoMSwrLWluZikgaW4gY2hvcHBlZAorCW1vZGUuCisKKwlSIDo9IFJaOwkJLi4uIHNldCByb3VuZGluZyBtb2RlIHRvIHJvdW5kLXRvd2FyZC16ZXJvCisJc3dpdGNoKHIpIHsKKwkgICAgY2FzZSBSTjoJCS4uLiByb3VuZC10by1uZWFyZXN0CisJICAgICAgIGlmKHg8PSB6Kih6LXVscCkuLi5jaG9wcGVkKSB6ID0geiAtIHVscDsgZWxzZQorCSAgICAgICBpZih4PD0geiooeit1bHApLi4uY2hvcHBlZCkgeiA9IHo7IGVsc2UgeiA9IHordWxwOworCSAgICAgICBicmVhazsKKwkgICAgY2FzZSBSWjpjYXNlIFJNOgkuLi4gcm91bmQtdG8temVybyBvciByb3VuZC10by0taW5mCisJICAgICAgIFI6PVJQOwkJLi4uIHJlc2V0IHJvdW5kaW5nIG1vZCB0byByb3VuZC10by0raW5mCisJICAgICAgIGlmKHg8eip6IC4uLiByb3VuZGVkIHVwKSB6ID0geiAtIHVscDsgZWxzZQorCSAgICAgICBpZih4Pj0oeit1bHApKih6K3VscCkgLi4ucm91bmRlZCB1cCkgeiA9IHordWxwOworCSAgICAgICBicmVhazsKKwkgICAgY2FzZSBSUDoJCS4uLiByb3VuZC10by0raW5mCisJICAgICAgIGlmKHg+KHordWxwKSooeit1bHApLi4uY2hvcHBlZCkgeiA9IHorMip1bHA7IGVsc2UKKwkgICAgICAgaWYoeD56KnogLi4uY2hvcHBlZCkgeiA9IHordWxwOworCSAgICAgICBicmVhazsKKwl9CisKKwlSZW1hcmsgMy4gVGhlIGFib3ZlIGNvbXBhcmlzb25zIGNhbiBiZSBkb25lIGluIGZpeGVkIHBvaW50LiBGb3IKKwlleGFtcGxlLCB0byBjb21wYXJlIHggYW5kIHc9eip6IGNob3BwZWQsIGl0IHN1ZmZpY2VzIHRvIGNvbXBhcmUKKwl4MSBhbmQgdzEgKHRoZSB0cmFpbGluZyBwYXJ0cyBvZiB4IGFuZCB3KSwgcmVnYXJkaW5nIHRoZW0gYXMKKwl0d28ncyBjb21wbGVtZW50IGludGVnZXJzLgorCisJLi4uSXMgeiBhbiBleGFjdCBzcXVhcmUgcm9vdD8KKwlUbyBkZXRlcm1pbmUgd2hldGhlciB6IGlzIGFuIGV4YWN0IHNxdWFyZSByb290IG9mIHgsIGxldCB6MSBiZSB0aGUKKwl0cmFpbGluZyBwYXJ0IG9mIHosIGFuZCBhbHNvIGxldCB4MCBhbmQgeDEgYmUgdGhlIGxlYWRpbmcgYW5kCisJdHJhaWxpbmcgcGFydHMgb2YgeC4KKworCUlmICgoejEmMHgwM2ZmZmZmZikhPTApCS4uLiBub3QgZXhhY3QgaWYgdHJhaWxpbmcgMjYgYml0cyBvZiB6IT0wCisJICAgIEkgOj0gMTsJCS4uLiBSYWlzZSBJbmV4YWN0IGZsYWc6IHogaXMgbm90IGV4YWN0CisJZWxzZSB7CisJICAgIGogOj0gMSAtIFsoeDA+PjIwKSYxXQkuLi4gaiA9IGxvZ2IoeCkgbW9kIDIKKwkgICAgayA6PSB6MSA+PiAyNjsJCS4uLiBnZXQgeidzIDI1LXRoIGFuZCAyNi10aCAKKwkJCQkJICAgIGZyYWN0aW9uIGJpdHMKKwkgICAgSSA6PSBpIG9yIChrJmopIG9yICgoayYoaitqKzEpKSE9KHgxJjMpKTsKKwl9CisJUjo9IHIJCS4uLiByZXN0b3JlIHJvdW5kZWQgbW9kZQorCXJldHVybiBzcXJ0KHgpOj16LgorCisJSWYgbXVsdGlwbGljYXRpb24gaXMgY2hlYXBlciB0aGVuIHRoZSBmb3JlZ29pbmcgcmVkIHRhcGUsIHRoZSAKKwlJbmV4YWN0IGZsYWcgY2FuIGJlIGV2YWx1YXRlZCBieQorCisJICAgIEkgOj0gaTsKKwkgICAgSSA6PSAoeip6IT14KSBvciBJLgorCisJTm90ZSB0aGF0IHoqeiBjYW4gb3ZlcndyaXRlIEk7IHRoaXMgdmFsdWUgbXVzdCBiZSBzZW5zZWQgaWYgaXQgaXMgCisJVHJ1ZS4KKworCVJlbWFyayA0LiBJZiB6KnogPSB4IGV4YWN0bHksIHRoZW4gYml0IDI1IHRvIGJpdCAwIG9mIHoxIG11c3QgYmUKKwl6ZXJvLgorCisJCSAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorCQl6MTogfCAgICAgICAgZjIgICAgICAgIHwgCisJCSAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorCQliaXQgMzEJCSAgIGJpdCAwCisKKwlGdXJ0aGVyIG1vcmUsIGJpdCAyNyBhbmQgMjYgb2YgejEsIGJpdCAwIGFuZCAxIG9mIHgxLCBhbmQgdGhlIG9kZAorCW9yIGV2ZW4gb2YgbG9nYih4KSBoYXZlIHRoZSBmb2xsb3dpbmcgcmVsYXRpb25zOgorCisJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCWJpdCAyNywyNiBvZiB6MQkJYml0IDEsMCBvZiB4MQlsb2diKHgpCisJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCTAwCQkJMDAJCW9kZCBhbmQgZXZlbgorCTAxCQkJMDEJCWV2ZW4KKwkxMAkJCTEwCQlvZGQKKwkxMAkJCTAwCQlldmVuCisJMTEJCQkwMQkJZXZlbgorCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgICg0KQlTcGVjaWFsIGNhc2VzIChzZWUgKDQpIG9mIFNlY3Rpb24gQSkuCQorIAorICovCisgCmRpZmYgLS1naXQgYS9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL2Vfc3FydGYuYyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvZV9zcXJ0Zi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlYmE0ZDAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL2Vfc3FydGYuYwpAQCAtMCwwICsxLDg5IEBACisvKiBlX3NxcnRmLmMgLS0gZmxvYXQgdmVyc2lvbiBvZiBlX3NxcnQuYy4KKyAqIENvbnZlcnNpb24gdG8gZmxvYXQgYnkgSWFuIExhbmNlIFRheWxvciwgQ3lnbnVzIFN1cHBvcnQsIGlhbkBjeWdudXMuY29tLgorICovCisKKy8qCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBDb3B5cmlnaHQgKEMpIDE5OTMgYnkgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIERldmVsb3BlZCBhdCBTdW5Qcm8sIGEgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBidXNpbmVzcy4KKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKKyAqIHNvZnR3YXJlIGlzIGZyZWVseSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoaXMgbm90aWNlCisgKiBpcyBwcmVzZXJ2ZWQuCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KKworI2lmbmRlZiBsaW50CitzdGF0aWMgY2hhciByY3NpZFtdID0gIiRGcmVlQlNEJCI7CisjZW5kaWYKKworI2luY2x1ZGUgIm1hdGguaCIKKyNpbmNsdWRlICJtYXRoX3ByaXZhdGUuaCIKKworc3RhdGljCWNvbnN0IGZsb2F0CW9uZQk9IDEuMCwgdGlueT0xLjBlLTMwOworCitmbG9hdAorX19pZWVlNzU0X3NxcnRmKGZsb2F0IHgpCit7CisJZmxvYXQgejsKKwlpbnQzMl90IHNpZ24gPSAoaW50KTB4ODAwMDAwMDA7CisJaW50MzJfdCBpeCxzLHEsbSx0LGk7CisJdV9pbnQzMl90IHI7CisKKwlHRVRfRkxPQVRfV09SRChpeCx4KTsKKworICAgIC8qIHRha2UgY2FyZSBvZiBJbmYgYW5kIE5hTiAqLworCWlmKChpeCYweDdmODAwMDAwKT09MHg3ZjgwMDAwMCkgeworCSAgICByZXR1cm4geCp4K3g7CQkvKiBzcXJ0KE5hTik9TmFOLCBzcXJ0KCtpbmYpPStpbmYKKwkJCQkJICAgc3FydCgtaW5mKT1zTmFOICovCisJfQorICAgIC8qIHRha2UgY2FyZSBvZiB6ZXJvICovCisJaWYoaXg8PTApIHsKKwkgICAgaWYoKGl4Jih+c2lnbikpPT0wKSByZXR1cm4geDsvKiBzcXJ0KCstMCkgPSArLTAgKi8KKwkgICAgZWxzZSBpZihpeDwwKQorCQlyZXR1cm4gKHgteCkvKHgteCk7CQkvKiBzcXJ0KC12ZSkgPSBzTmFOICovCisJfQorICAgIC8qIG5vcm1hbGl6ZSB4ICovCisJbSA9IChpeD4+MjMpOworCWlmKG09PTApIHsJCQkJLyogc3Vibm9ybWFsIHggKi8KKwkgICAgZm9yKGk9MDsoaXgmMHgwMDgwMDAwMCk9PTA7aSsrKSBpeDw8PTE7CisJICAgIG0gLT0gaS0xOworCX0KKwltIC09IDEyNzsJLyogdW5iaWFzIGV4cG9uZW50ICovCisJaXggPSAoaXgmMHgwMDdmZmZmZil8MHgwMDgwMDAwMDsKKwlpZihtJjEpCS8qIG9kZCBtLCBkb3VibGUgeCB0byBtYWtlIGl0IGV2ZW4gKi8KKwkgICAgaXggKz0gaXg7CisJbSA+Pj0gMTsJLyogbSA9IFttLzJdICovCisKKyAgICAvKiBnZW5lcmF0ZSBzcXJ0KHgpIGJpdCBieSBiaXQgKi8KKwlpeCArPSBpeDsKKwlxID0gcyA9IDA7CQkvKiBxID0gc3FydCh4KSAqLworCXIgPSAweDAxMDAwMDAwOwkJLyogciA9IG1vdmluZyBiaXQgZnJvbSByaWdodCB0byBsZWZ0ICovCisKKwl3aGlsZShyIT0wKSB7CisJICAgIHQgPSBzK3I7CisJICAgIGlmKHQ8PWl4KSB7CisJCXMgICAgPSB0K3I7CisJCWl4ICAtPSB0OworCQlxICAgKz0gcjsKKwkgICAgfQorCSAgICBpeCArPSBpeDsKKwkgICAgcj4+PTE7CisJfQorCisgICAgLyogdXNlIGZsb2F0aW5nIGFkZCB0byBmaW5kIG91dCByb3VuZGluZyBkaXJlY3Rpb24gKi8KKwlpZihpeCE9MCkgeworCSAgICB6ID0gb25lLXRpbnk7IC8qIHRyaWdnZXIgaW5leGFjdCBmbGFnICovCisJICAgIGlmICh6Pj1vbmUpIHsKKwkgICAgICAgIHogPSBvbmUrdGlueTsKKwkJaWYgKHo+b25lKQorCQkgICAgcSArPSAyOworCQllbHNlCisJCSAgICBxICs9IChxJjEpOworCSAgICB9CisJfQorCWl4ID0gKHE+PjEpKzB4M2YwMDAwMDA7CisJaXggKz0gKG0gPDwyMyk7CisJU0VUX0ZMT0FUX1dPUkQoeixpeCk7CisJcmV0dXJuIHo7Cit9CmRpZmYgLS1naXQgYS9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL2Vfc3FydGwuYyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvZV9zcXJ0bC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyYjg0ZGUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL2Vfc3FydGwuYwpAQCAtMCwwICsxLDE1OSBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgU3RldmVuIEcuIEthcmdsCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSB1bm1vZGlmaWVkLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucywgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUworICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorX19GQlNESUQoIiRGcmVlQlNEJCIpOworCisjaW5jbHVkZSA8ZmVudi5oPgorI2luY2x1ZGUgPGZsb2F0Lmg+CisKKyNpbmNsdWRlICJmcG1hdGguaCIKKyNpbmNsdWRlICJtYXRoLmgiCisKKy8qIFJldHVybiAoeCArIHVscCkgZm9yIG5vcm1hbCBwb3NpdGl2ZSB4LiBBc3N1bWVzIG5vIG92ZXJmbG93LiAqLworc3RhdGljIGlubGluZSBsb25nIGRvdWJsZQoraW5jKGxvbmcgZG91YmxlIHgpCit7CisJdW5pb24gSUVFRWwyYml0cyB1OworCisJdS5lID0geDsKKwlpZiAoKyt1LmJpdHMubWFubCA9PSAwKSB7CisJCWlmICgrK3UuYml0cy5tYW5oID09IDApIHsKKwkJCXUuYml0cy5leHArKzsKKwkJCXUuYml0cy5tYW5oIHw9IExEQkxfTkJJVDsKKwkJfQorCX0KKwlyZXR1cm4gKHUuZSk7Cit9CisKKy8qIFJldHVybiAoeCAtIHVscCkgZm9yIG5vcm1hbCBwb3NpdGl2ZSB4LiBBc3N1bWVzIG5vIHVuZGVyZmxvdy4gKi8KK3N0YXRpYyBpbmxpbmUgbG9uZyBkb3VibGUKK2RlYyhsb25nIGRvdWJsZSB4KQoreworCXVuaW9uIElFRUVsMmJpdHMgdTsKKworCXUuZSA9IHg7CisJaWYgKHUuYml0cy5tYW5sLS0gPT0gMCkgeworCQlpZiAodS5iaXRzLm1hbmgtLSA9PSBMREJMX05CSVQpIHsKKwkJCXUuYml0cy5leHAtLTsKKwkJCXUuYml0cy5tYW5oIHw9IExEQkxfTkJJVDsKKwkJfQorCX0KKwlyZXR1cm4gKHUuZSk7Cit9CisKKyNwcmFnbWEgU1REQyBGRU5WX0FDQ0VTUyBPTgorCisvKgorICogVGhpcyBpcyBzbG93LCBidXQgc2ltcGxlIGFuZCBwb3J0YWJsZS4gWW91IHNob3VsZCB1c2UgaGFyZHdhcmUgc3FydAorICogaWYgcG9zc2libGUuCisgKi8KKworbG9uZyBkb3VibGUKK3NxcnRsKGxvbmcgZG91YmxlIHgpCit7CisJdW5pb24gSUVFRWwyYml0cyB1OworCWludCBrLCByOworCWxvbmcgZG91YmxlIGxvLCB4bjsKKwlmZW52X3QgZW52OworCisJdS5lID0geDsKKworCS8qIElmIHggPSBOYU4sIHRoZW4gc3FydCh4KSA9IE5hTi4gKi8KKwkvKiBJZiB4ID0gSW5mLCB0aGVuIHNxcnQoeCkgPSBJbmYuICovCisJLyogSWYgeCA9IC1JbmYsIHRoZW4gc3FydCh4KSA9IE5hTi4gKi8KKwlpZiAodS5iaXRzLmV4cCA9PSBMREJMX01BWF9FWFAgKiAyIC0gMSkKKwkJcmV0dXJuICh4ICogeCArIHgpOworCisJLyogSWYgeCA9ICstMCwgdGhlbiBzcXJ0KHgpID0gKy0wLiAqLworCWlmICgodS5iaXRzLm1hbmggfCB1LmJpdHMubWFubCB8IHUuYml0cy5leHApID09IDApCisJCXJldHVybiAoeCk7CisKKwkvKiBJZiB4IDwgMCwgdGhlbiByYWlzZSBpbnZhbGlkIGFuZCByZXR1cm4gTmFOICovCisJaWYgKHUuYml0cy5zaWduKQorCQlyZXR1cm4gKCh4IC0geCkgLyAoeCAtIHgpKTsKKworCWZlaG9sZGV4Y2VwdCgmZW52KTsKKworCWlmICh1LmJpdHMuZXhwID09IDApIHsKKwkJLyogQWRqdXN0IHN1Ym5vcm1hbCBudW1iZXJzLiAqLworCQl1LmUgKj0gMHgxLjBwNTE0OworCQlrID0gLTUxNDsKKwl9IGVsc2UgeworCQlrID0gMDsKKwl9CisJLyoKKwkgKiB1LmUgaXMgYSBub3JtYWwgbnVtYmVyLCBzbyBicmVhayBpdCBpbnRvIHUuZSA9IGUqMl5uIHdoZXJlCisJICogdS5lID0gKDIqZSkqMl4yayBmb3Igb2RkIG4gYW5kIHUuZSA9ICg0KmUpKjJeMmsgZm9yIGV2ZW4gbi4KKwkgKi8KKwlpZiAoKHUuYml0cy5leHAgLSAweDNmZmUpICYgMSkgewkvKiBuIGlzIG9kZC4gICAgICovCisJCWsgKz0gdS5iaXRzLmV4cCAtIDB4M2ZmZjsJLyogMmsgPSBuIC0gMS4gICAqLworCQl1LmJpdHMuZXhwID0gMHgzZmZmOwkJLyogdS5lIGluIFsxLDIpLiAqLworCX0gZWxzZSB7CisJCWsgKz0gdS5iaXRzLmV4cCAtIDB4NDAwMDsJLyogMmsgPSBuIC0gMi4gICAqLworCQl1LmJpdHMuZXhwID0gMHg0MDAwOwkJLyogdS5lIGluIFsyLDQpLiAqLworCX0KKworCS8qCisJICogTmV3dG9uJ3MgaXRlcmF0aW9uLgorCSAqIFNwbGl0IHUuZSBpbnRvIGEgaGlnaCBhbmQgbG93IHBhcnQgdG8gYWNoaWV2ZSBhZGRpdGlvbmFsIHByZWNpc2lvbi4KKwkgKi8KKwl4biA9IHNxcnQodS5lKTsJCQkvKiA1My1iaXQgZXN0aW1hdGUgb2Ygc3FydGwoeCkuICovCisjaWYgTERCTF9NQU5UX0RJRyA+IDEwMAorCXhuID0gKHhuICsgKHUuZSAvIHhuKSkgKiAwLjU7CS8qIDEwNi1iaXQgZXN0aW1hdGUuICovCisjZW5kaWYKKwlsbyA9IHUuZTsKKwl1LmJpdHMubWFubCA9IDA7CQkvKiBaZXJvIG91dCBsb3dlciBiaXRzLiAqLworCWxvID0gKGxvIC0gdS5lKSAvIHhuOwkJLyogTG93IGJpdHMgZGl2aWRlZCBieSB4bi4gKi8KKwl4biA9IHhuICsgKHUuZSAvIHhuKTsJCS8qIEhpZ2ggcG9ydGlvbiBvZiBlc3RpbWF0ZS4gKi8KKwl1LmUgPSB4biArIGxvOwkJCS8qIENvbWJpbmUgZXZlcnl0aGluZy4gKi8KKwl1LmJpdHMuZXhwICs9IChrID4+IDEpIC0gMTsKKworCWZlY2xlYXJleGNlcHQoRkVfSU5FWEFDVCk7CisJciA9IGZlZ2V0cm91bmQoKTsKKwlmZXNldHJvdW5kKEZFX1RPV0FSRFpFUk8pOwkvKiBTZXQgdG8gcm91bmQtdG93YXJkLXplcm8uICovCisJeG4gPSB4IC8gdS5lOwkJCS8qIENob3BwZWQgcXVvdGllbnQgKGluZXhhY3Q/KS4gKi8KKworCWlmICghZmV0ZXN0ZXhjZXB0KEZFX0lORVhBQ1QpKSB7IC8qIFF1b3RpZW50IGlzIGV4YWN0LiAqLworCQlpZiAoeG4gPT0gdS5lKSB7CisJCQlmZXNldGVudigmZW52KTsKKwkJCXJldHVybiAodS5lKTsKKwkJfQorCQkvKiBSb3VuZCBjb3JyZWN0bHkgZm9yIGlucHV0cyBsaWtlIHggPSB5KioyIC0gdWxwLiAqLworCQl4biA9IGRlYyh4bik7CQkvKiB4biA9IHhuIC0gdWxwLiAqLworCX0KKworCWlmIChyID09IEZFX1RPTkVBUkVTVCkgeworCQl4biA9IGluYyh4bik7CQkvKiB4biA9IHhuICsgdWxwLiAqLworCX0gZWxzZSBpZiAociA9PSBGRV9VUFdBUkQpIHsKKwkJdS5lID0gaW5jKHUuZSk7CQkvKiB1LmUgPSB1LmUgKyB1bHAuICovCisJCXhuID0gaW5jKHhuKTsJCS8qIHhuICA9IHhuICsgdWxwLiAqLworCX0KKwl1LmUgPSB1LmUgKyB4bjsJCQkJLyogQ2hvcHBlZCBzdW0uICovCisJZmV1cGRhdGVlbnYoJmVudik7CS8qIFJlc3RvcmUgZW52IGFuZCByYWlzZSBpbmV4YWN0ICovCisJdS5iaXRzLmV4cC0tOworCXJldHVybiAodS5lKTsKK30KZGlmZiAtLWdpdCBhL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvZmVudi1zb2Z0ZmxvYXQuaCBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvZmVudi1zb2Z0ZmxvYXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMmQyYTJjCi0tLSAvZGV2L251bGwKKysrIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9mZW52LXNvZnRmbG9hdC5oCkBAIC0wLDAgKzEsMTg0IEBACisvKi0KKyAqIENvcHlyaWdodCAoYykgMjAwNC0yMDExIERhdmlkIFNjaHVsdHogPGRhc0BGcmVlQlNELk9SRz4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKgorICogJEZyZWVCU0QkCisgKi8KKworI2lmbmRlZglfRkVOVl9IXworI2Vycm9yICJUaGlzIGZpbGUgaXMgbWVhbnQgdG8gYmUgaW5jbHVkZWQgb25seSBieSA8ZmVudi5oPi4iCisjZW5kaWYKKworLyoKKyAqIFRoaXMgZmlsZSBpbXBsZW1lbnRzIHRoZSBmdW5jdGlvbmFsaXR5IG9mIDxmZW52Lmg+IG9uIHBsYXRmb3JtcyB0aGF0CisgKiBsYWNrIGFuIEZQVSBhbmQgdXNlIHNvZnRmbG9hdCBpbiBsaWJjIGZvciBmbG9hdGluZyBwb2ludC4gIFRvIHVzZSBpdCwKKyAqIHlvdSBtdXN0IHdyaXRlIGFuIDxmZW52Lmg+IHRoYXQgcHJvdmlkZXMgdGhlIGZvbGxvd2luZzoKKyAqCisgKiAgIC0gYSB0eXBlZGVmIGZvciBmZW52X3QsIHdoaWNoIG1heSBiZSBhbiBpbnRlZ2VyIG9yIHN0cnVjdCB0eXBlCisgKiAgIC0gYSB0eXBlZGVmIGZvciBmZXhjZXB0X3QgKFhYWCBUaGlzIGZpbGUgYXNzdW1lcyBmZXhjZXB0X3QgaXMgYQorICogICAgIHNpbXBsZSBpbnRlZ2VyIHR5cGUgY29udGFpbmluZyB0aGUgZXhjZXB0aW9uIG1hc2suKQorICogICAtIGRlZmluaXRpb25zIG9mIEZFXyogY29uc3RhbnRzIGZvciB0aGUgZml2ZSBleGNlcHRpb25zIGFuZCBmb3VyCisgKiAgICAgcm91bmRpbmcgbW9kZXMgaW4gSUVFRSA3NTQsIGFzIGRlc2NyaWJlZCBpbiBmZW52KDMpCisgKiAgIC0gYSBkZWZpbml0aW9uLCBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgZXh0ZXJuYWwgc3ltYm9sLCBmb3IgRkVfREZMX0VOVgorICogICAtIGEgbWFjcm8gX19zZXRfZW52KGVudiwgZmxhZ3MsIG1hc2ssIHJuZCksIHdoaWNoIHNldHMgdGhlIGdpdmVuIGZlbnZfdAorICogICAgIGZyb20gdGhlIGV4Y2VwdGlvbiBmbGFncywgbWFzaywgYW5kIHJvdW5kaW5nIG1vZGUKKyAqICAgLSBtYWNyb3MgX19lbnZfZmxhZ3MoZW52KSwgX19lbnZfbWFzayhlbnYpLCBhbmQgX19lbnZfcm91bmQoZW52KSwgd2hpY2gKKyAqICAgICBleHRyYWN0IGZpZWxkcyBmcm9tIGFuIGZlbnZfdAorICogICAtIGEgZGVmaW5pdGlvbiBvZiBfX2ZlbnZfc3RhdGljCisgKgorICogSWYgdGhlIGFyY2hpdGVjdHVyZSBzdXBwb3J0cyBhbiBvcHRpb25hbCBGUFUsIGl0J3MgcmVjb21tZW5kZWQgdGhhdCB5b3UKKyAqIGRlZmluZSBmZW52X3QgYW5kIGZleGNlcHRfdCB0byBtYXRjaCB0aGUgaGFyZHdhcmUgQUJJLiAgT3RoZXJ3aXNlLCBpdAorICogZG9lc24ndCBtYXR0ZXIgaG93IHlvdSBkZWZpbmUgdGhlbS4KKyAqLworCitleHRlcm4gaW50IF9fc29mdGZsb2F0X2Zsb2F0X2V4Y2VwdGlvbl9mbGFnczsKK2V4dGVybiBpbnQgX19zb2Z0ZmxvYXRfZmxvYXRfZXhjZXB0aW9uX21hc2s7CitleHRlcm4gaW50IF9fc29mdGZsb2F0X2Zsb2F0X3JvdW5kaW5nX21vZGU7Cit2b2lkIF9fc29mdGZsb2F0X2Zsb2F0X3JhaXNlKGludCk7CisKK19fZmVudl9zdGF0aWMgaW5saW5lIGludAorZmVjbGVhcmV4Y2VwdChpbnQgX19leGNlcHRzKQoreworCisJX19zb2Z0ZmxvYXRfZmxvYXRfZXhjZXB0aW9uX2ZsYWdzICY9IH5fX2V4Y2VwdHM7CisJcmV0dXJuICgwKTsKK30KKworX19mZW52X3N0YXRpYyBpbmxpbmUgaW50CitmZWdldGV4Y2VwdGZsYWcoZmV4Y2VwdF90ICpfX2ZsYWdwLCBpbnQgX19leGNlcHRzKQoreworCisJKl9fZmxhZ3AgPSBfX3NvZnRmbG9hdF9mbG9hdF9leGNlcHRpb25fZmxhZ3MgJiBfX2V4Y2VwdHM7CisJcmV0dXJuICgwKTsKK30KKworX19mZW52X3N0YXRpYyBpbmxpbmUgaW50CitmZXNldGV4Y2VwdGZsYWcoY29uc3QgZmV4Y2VwdF90ICpfX2ZsYWdwLCBpbnQgX19leGNlcHRzKQoreworCisJX19zb2Z0ZmxvYXRfZmxvYXRfZXhjZXB0aW9uX2ZsYWdzICY9IH5fX2V4Y2VwdHM7CisJX19zb2Z0ZmxvYXRfZmxvYXRfZXhjZXB0aW9uX2ZsYWdzIHw9ICpfX2ZsYWdwICYgX19leGNlcHRzOworCXJldHVybiAoMCk7Cit9CisKK19fZmVudl9zdGF0aWMgaW5saW5lIGludAorZmVyYWlzZWV4Y2VwdChpbnQgX19leGNlcHRzKQoreworCisJX19zb2Z0ZmxvYXRfZmxvYXRfcmFpc2UoX19leGNlcHRzKTsKKwlyZXR1cm4gKDApOworfQorCitfX2ZlbnZfc3RhdGljIGlubGluZSBpbnQKK2ZldGVzdGV4Y2VwdChpbnQgX19leGNlcHRzKQoreworCisJcmV0dXJuIChfX3NvZnRmbG9hdF9mbG9hdF9leGNlcHRpb25fZmxhZ3MgJiBfX2V4Y2VwdHMpOworfQorCitfX2ZlbnZfc3RhdGljIGlubGluZSBpbnQKK2ZlZ2V0cm91bmQodm9pZCkKK3sKKworCXJldHVybiAoX19zb2Z0ZmxvYXRfZmxvYXRfcm91bmRpbmdfbW9kZSk7Cit9CisKK19fZmVudl9zdGF0aWMgaW5saW5lIGludAorZmVzZXRyb3VuZChpbnQgX19yb3VuZCkKK3sKKworCV9fc29mdGZsb2F0X2Zsb2F0X3JvdW5kaW5nX21vZGUgPSBfX3JvdW5kOworCXJldHVybiAoMCk7Cit9CisKK19fZmVudl9zdGF0aWMgaW5saW5lIGludAorZmVnZXRlbnYoZmVudl90ICpfX2VudnApCit7CisKKwlfX3NldF9lbnYoKl9fZW52cCwgX19zb2Z0ZmxvYXRfZmxvYXRfZXhjZXB0aW9uX2ZsYWdzLAorCSAgICBfX3NvZnRmbG9hdF9mbG9hdF9leGNlcHRpb25fbWFzaywgX19zb2Z0ZmxvYXRfZmxvYXRfcm91bmRpbmdfbW9kZSk7CisJcmV0dXJuICgwKTsKK30KKworX19mZW52X3N0YXRpYyBpbmxpbmUgaW50CitmZWhvbGRleGNlcHQoZmVudl90ICpfX2VudnApCit7CisJZmVudl90IF9fZW52OworCisJZmVnZXRlbnYoX19lbnZwKTsKKwlfX3NvZnRmbG9hdF9mbG9hdF9leGNlcHRpb25fZmxhZ3MgPSAwOworCV9fc29mdGZsb2F0X2Zsb2F0X2V4Y2VwdGlvbl9tYXNrID0gMDsKKwlyZXR1cm4gKDApOworfQorCitfX2ZlbnZfc3RhdGljIGlubGluZSBpbnQKK2Zlc2V0ZW52KGNvbnN0IGZlbnZfdCAqX19lbnZwKQoreworCisJX19zb2Z0ZmxvYXRfZmxvYXRfZXhjZXB0aW9uX2ZsYWdzID0gX19lbnZfZmxhZ3MoKl9fZW52cCk7CisJX19zb2Z0ZmxvYXRfZmxvYXRfZXhjZXB0aW9uX21hc2sgPSBfX2Vudl9tYXNrKCpfX2VudnApOworCV9fc29mdGZsb2F0X2Zsb2F0X3JvdW5kaW5nX21vZGUgPSBfX2Vudl9yb3VuZCgqX19lbnZwKTsKKwlyZXR1cm4gKDApOworfQorCitfX2ZlbnZfc3RhdGljIGlubGluZSBpbnQKK2ZldXBkYXRlZW52KGNvbnN0IGZlbnZfdCAqX19lbnZwKQoreworCWludCBfX29mbGFncyA9IF9fc29mdGZsb2F0X2Zsb2F0X2V4Y2VwdGlvbl9mbGFnczsKKworCWZlc2V0ZW52KF9fZW52cCk7CisJZmVyYWlzZWV4Y2VwdChfX29mbGFncyk7CisJcmV0dXJuICgwKTsKK30KKworI2lmIF9fQlNEX1ZJU0lCTEUKKworLyogV2UgY3VycmVudGx5IHByb3ZpZGUgbm8gZXh0ZXJuYWwgZGVmaW5pdGlvbnMgb2YgdGhlIGZ1bmN0aW9ucyBiZWxvdy4gKi8KKworc3RhdGljIGlubGluZSBpbnQKK2ZlZW5hYmxlZXhjZXB0KGludCBfX21hc2spCit7CisJaW50IF9fb21hc2sgPSBfX3NvZnRmbG9hdF9mbG9hdF9leGNlcHRpb25fbWFzazsKKworCV9fc29mdGZsb2F0X2Zsb2F0X2V4Y2VwdGlvbl9tYXNrIHw9IF9fbWFzazsKKwlyZXR1cm4gKF9fb21hc2spOworfQorCitzdGF0aWMgaW5saW5lIGludAorZmVkaXNhYmxlZXhjZXB0KGludCBfX21hc2spCit7CisJaW50IF9fb21hc2sgPSBfX3NvZnRmbG9hdF9mbG9hdF9leGNlcHRpb25fbWFzazsKKworCV9fc29mdGZsb2F0X2Zsb2F0X2V4Y2VwdGlvbl9tYXNrICY9IH5fX21hc2s7CisJcmV0dXJuIChfX29tYXNrKTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK2ZlZ2V0ZXhjZXB0KHZvaWQpCit7CisKKwlyZXR1cm4gKF9fc29mdGZsb2F0X2Zsb2F0X2V4Y2VwdGlvbl9tYXNrKTsKK30KKworI2VuZGlmIC8qIF9fQlNEX1ZJU0lCTEUgKi8KZGlmZiAtLWdpdCBhL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMva19jb3MuYyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMva19jb3MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNDcwMmU2Ci0tLSAvZGV2L251bGwKKysrIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9rX2Nvcy5jCkBAIC0wLDAgKzEsNzkgQEAKKworLyogQCgjKWtfY29zLmMgMS4zIDk1LzAxLzE4ICovCisvKgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogQ29weXJpZ2h0IChDKSAxOTkzIGJ5IFN1biBNaWNyb3N5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBEZXZlbG9wZWQgYXQgU3VuU29mdCwgYSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGJ1c2luZXNzLgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcworICogc29mdHdhcmUgaXMgZnJlZWx5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhpcyBub3RpY2UgCisgKiBpcyBwcmVzZXJ2ZWQuCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorX19GQlNESUQoIiRGcmVlQlNEJCIpOworCisvKgorICogX19rZXJuZWxfY29zKCB4LCAgeSApCisgKiBrZXJuZWwgY29zIGZ1bmN0aW9uIG9uIFstcGkvNCwgcGkvNF0sIHBpLzQgfiAwLjc4NTM5ODE2NAorICogSW5wdXQgeCBpcyBhc3N1bWVkIHRvIGJlIGJvdW5kZWQgYnkgfnBpLzQgaW4gbWFnbml0dWRlLgorICogSW5wdXQgeSBpcyB0aGUgdGFpbCBvZiB4LiAKKyAqCisgKiBBbGdvcml0aG0KKyAqCTEuIFNpbmNlIGNvcygteCkgPSBjb3MoeCksIHdlIG5lZWQgb25seSB0byBjb25zaWRlciBwb3NpdGl2ZSB4LgorICoJMi4gaWYgeCA8IDJeLTI3IChoeDwweDNlNDAwMDAwIDApLCByZXR1cm4gMSB3aXRoIGluZXhhY3QgaWYgeCE9MC4KKyAqCTMuIGNvcyh4KSBpcyBhcHByb3hpbWF0ZWQgYnkgYSBwb2x5bm9taWFsIG9mIGRlZ3JlZSAxNCBvbgorICoJICAgWzAscGkvNF0KKyAqCQkgIAkgICAgICAgICAgICAgICAgIDQgICAgICAgICAgICAxNAorICoJICAgCWNvcyh4KSB+IDEgLSB4KngvMiArIEMxKnggKyAuLi4gKyBDNip4CisgKgkgICB3aGVyZSB0aGUgcmVtZXogZXJyb3IgaXMKKyAqCQorICogCXwgICAgICAgICAgICAgIDIgICAgIDQgICAgIDYgICAgIDggICAgIDEwICAgIDEyICAgICAxNCB8ICAgICAtNTgKKyAqIAl8Y29zKHgpLSgxLS41KnggK0MxKnggK0MyKnggK0MzKnggK0M0KnggK0M1KnggICtDNip4ICApfCA8PSAyCisgKiAJfCAgICAJCQkJCSAgICAgICAgICAgICAgIHwgCisgKiAKKyAqIAkgICAgICAgICAgICAgICA0ICAgICA2ICAgICA4ICAgICAxMCAgICAxMiAgICAgMTQgCisgKgk0LiBsZXQgciA9IEMxKnggK0MyKnggK0MzKnggK0M0KnggK0M1KnggICtDNip4ICAsIHRoZW4KKyAqCSAgICAgICBjb3MoeCkgfiAxIC0geCp4LzIgKyByCisgKgkgICBzaW5jZSBjb3MoeCt5KSB+IGNvcyh4KSAtIHNpbih4KSp5IAorICoJCQkgIH4gY29zKHgpIC0geCp5LAorICoJICAgYSBjb3JyZWN0aW9uIHRlcm0gaXMgbmVjZXNzYXJ5IGluIGNvcyh4KSBhbmQgaGVuY2UKKyAqCQljb3MoeCt5KSA9IDEgLSAoeCp4LzIgLSAociAtIHgqeSkpCisgKgkgICBGb3IgYmV0dGVyIGFjY3VyYWN5LCByZWFycmFuZ2UgdG8KKyAqCQljb3MoeCt5KSB+IHcgKyAodG1wICsgKHIteCp5KSkKKyAqCSAgIHdoZXJlIHcgPSAxIC0geCp4LzIgYW5kIHRtcCBpcyBhIHRpbnkgY29ycmVjdGlvbiB0ZXJtCisgKgkgICAoMSAtIHgqeC8yID09IHcgKyB0bXAgZXhhY3RseSBpbiBpbmZpbml0ZSBwcmVjaXNpb24pLgorICoJICAgVGhlIGV4YWN0bmVzcyBvZiB3ICsgdG1wIGluIGluZmluaXRlIHByZWNpc2lvbiBkZXBlbmRzIG9uIHcKKyAqCSAgIGFuZCB0bXAgaGF2aW5nIHRoZSBzYW1lIHByZWNpc2lvbiBhcyB4LiAgSWYgdGhleSBoYXZlIGV4dHJhCisgKgkgICBwcmVjaXNpb24gZHVlIHRvIGNvbXBpbGVyIGJ1Z3MsIHRoZW4gdGhlIGV4dHJhIHByZWNpc2lvbiBpcworICoJICAgb25seSBnb29kIHByb3ZpZGVkIGl0IGlzIHJldGFpbmVkIGluIGFsbCB0ZXJtcyBvZiB0aGUgZmluYWwKKyAqCSAgIGV4cHJlc3Npb24gZm9yIGNvcygpLiAgUmV0ZW50aW9uIGhhcHBlbnMgaW4gYWxsIGNhc2VzIHRlc3RlZAorICoJICAgdW5kZXIgRnJlZUJTRCwgc28gZG9uJ3QgcGVzc2ltaXplIHRoaW5ncyBieSBmb3JjaWJseSBjbGlwcGluZworICoJICAgYW55IGV4dHJhIHByZWNpc2lvbiBpbiB3LgorICovCisKKyNpbmNsdWRlICJtYXRoLmgiCisjaW5jbHVkZSAibWF0aF9wcml2YXRlLmgiCisKK3N0YXRpYyBjb25zdCBkb3VibGUKK29uZSA9ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwZSswMCwgLyogMHgzRkYwMDAwMCwgMHgwMDAwMDAwMCAqLworQzEgID0gIDQuMTY2NjY2NjY2NjY2NjYwMTkwMzdlLTAyLCAvKiAweDNGQTU1NTU1LCAweDU1NTU1NTRDICovCitDMiAgPSAtMS4zODg4ODg4ODg4ODc0MTA5NTc0OWUtMDMsIC8qIDB4QkY1NkMxNkMsIDB4MTZDMTUxNzcgKi8KK0MzICA9ICAyLjQ4MDE1ODcyODk0NzY3Mjk0MTc4ZS0wNSwgLyogMHgzRUZBMDFBMCwgMHgxOUNCMTU5MCAqLworQzQgID0gLTIuNzU1NzMxNDM1MTM5MDY2MzMwMzVlLTA3LCAvKiAweEJFOTI3RTRGLCAweDgwOUM1MkFEICovCitDNSAgPSAgMi4wODc1NzIzMjEyOTgxNzQ4Mjc5MGUtMDksIC8qIDB4M0UyMUVFOUUsIDB4QkRCNEIxQzQgKi8KK0M2ICA9IC0xLjEzNTk2NDc1NTc3ODgxOTQ4MjY1ZS0xMTsgLyogMHhCREE4RkFFOSwgMHhCRTg4MzhENCAqLworCitkb3VibGUKK19fa2VybmVsX2Nvcyhkb3VibGUgeCwgZG91YmxlIHkpCit7CisJZG91YmxlIGh6LHoscix3OworCisJeiAgPSB4Kng7CisJdyAgPSB6Kno7CisJciAgPSB6KihDMSt6KihDMit6KkMzKSkgKyB3KncqKEM0K3oqKEM1K3oqQzYpKTsKKwloeiA9IDAuNSp6OworCXcgID0gb25lLWh6OworCXJldHVybiB3ICsgKCgob25lLXcpLWh6KSArICh6KnIteCp5KSk7Cit9CmRpZmYgLS1naXQgYS9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL2tfY29zZi5jIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9rX2Nvc2YuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mN2EyYzBhCi0tLSAvZGV2L251bGwKKysrIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9rX2Nvc2YuYwpAQCAtMCwwICsxLDQ2IEBACisvKiBrX2Nvc2YuYyAtLSBmbG9hdCB2ZXJzaW9uIG9mIGtfY29zLmMKKyAqIENvbnZlcnNpb24gdG8gZmxvYXQgYnkgSWFuIExhbmNlIFRheWxvciwgQ3lnbnVzIFN1cHBvcnQsIGlhbkBjeWdudXMuY29tLgorICogRGVidWdnZWQgYW5kIG9wdGltaXplZCBieSBCcnVjZSBELiBFdmFucy4KKyAqLworCisvKgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogQ29weXJpZ2h0IChDKSAxOTkzIGJ5IFN1biBNaWNyb3N5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBEZXZlbG9wZWQgYXQgU3VuUHJvLCBhIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gYnVzaW5lc3MuCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCisgKiBzb2Z0d2FyZSBpcyBmcmVlbHkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGlzIG5vdGljZQorICogaXMgcHJlc2VydmVkLgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCisKKyNpZm5kZWYgSU5MSU5FX0tFUk5FTF9DT1NERgorI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorX19GQlNESUQoIiRGcmVlQlNEJCIpOworI2VuZGlmCisKKyNpbmNsdWRlICJtYXRoLmgiCisjaW5jbHVkZSAibWF0aF9wcml2YXRlLmgiCisKKy8qIHxjb3MoeCkgLSBjKHgpfCA8IDIqKi0zNC4xICh+Wy01LjM3ZS0xMSwgNS4yOTVlLTExXSkuICovCitzdGF0aWMgY29uc3QgZG91YmxlCitvbmUgPSAgMS4wLAorQzAgID0gLTB4MWZmZmZmZmQwYzVlODEuMHAtNTQsCS8qIC0wLjQ5OTk5OTk5NzI1MTAzMTAwMzEyMCAqLworQzEgID0gIDB4MTU1NTUzZTEwNTNhNDIuMHAtNTcsCS8qICAwLjA0MTY2NjYyMzMyMzczOTA2MzE4OTQgKi8KK0MyICA9IC0weDE2YzA4N2U4MGYxZTI3LjBwLTYyLAkvKiAtMC4wMDEzODg2NzYzNzc0NjA5OTI5NDY5MiAqLworQzMgID0gIDB4MTk5MzQyZTBlZTUwNjkuMHAtNjg7CS8qICAwLjAwMDAyNDM5MDQ0ODc5NjI3NzQwOTA2NTQgKi8KKworI2lmZGVmIElOTElORV9LRVJORUxfQ09TREYKK3N0YXRpYyBfX2lubGluZQorI2VuZGlmCitmbG9hdAorX19rZXJuZWxfY29zZGYoZG91YmxlIHgpCit7CisJZG91YmxlIHIsIHcsIHo7CisKKwkvKiBUcnkgdG8gb3B0aW1pemUgZm9yIHBhcmFsbGVsIGV2YWx1YXRpb24gYXMgaW4ga190YW5mLmMuICovCisJeiA9IHgqeDsKKwl3ID0geip6OworCXIgPSBDMit6KkMzOworCXJldHVybiAoKG9uZSt6KkMwKSArIHcqQzEpICsgKHcqeikqcjsKK30KZGlmZiAtLWdpdCBhL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMva19leHAuYyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMva19leHAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNTkyZjY5Ci0tLSAvZGV2L251bGwKKysrIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9rX2V4cC5jCkBAIC0wLDAgKzEsMTA4IEBACisvKi0KKyAqIENvcHlyaWdodCAoYykgMjAxMSBEYXZpZCBTY2h1bHR6IDxkYXNARnJlZUJTRC5PUkc+CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJTRCQiKTsKKworI2luY2x1ZGUgPGNvbXBsZXguaD4KKworI2luY2x1ZGUgIm1hdGguaCIKKyNpbmNsdWRlICJtYXRoX3ByaXZhdGUuaCIKKworc3RhdGljIGNvbnN0IHVpbnQzMl90IGsgPSAxNzk5OwkJLyogY29uc3RhbnQgZm9yIHJlZHVjdGlvbiAqLworc3RhdGljIGNvbnN0IGRvdWJsZSBrbG4yID0gIDEyNDYuOTcxNzc3ODI3MzQxNjExNTY7CS8qIGsgKiBsbjIgKi8KKworLyoKKyAqIENvbXB1dGUgZXhwKHgpLCBzY2FsZWQgdG8gYXZvaWQgc3B1cmlvdXMgb3ZlcmZsb3cuICBBbiBleHBvbmVudCBpcworICogcmV0dXJuZWQgc2VwYXJhdGVseSBpbiAnZXhwdCcuCisgKgorICogSW5wdXQ6ICBsbihEQkxfTUFYKSA8PSB4IDwgbG4oMiAqIERCTF9NQVggLyBEQkxfTUlOX0RFTk9STSkgfj0gMTQ1NC45MQorICogT3V0cHV0OiAyKioxMDIzIDw9IHkgPCAyKioxMDI0CisgKi8KK3N0YXRpYyBkb3VibGUKK19fZnJleHBfZXhwKGRvdWJsZSB4LCBpbnQgKmV4cHQpCit7CisJZG91YmxlIGV4cF94OworCXVpbnQzMl90IGh4OworCisJLyoKKwkgKiBXZSB1c2UgZXhwKHgpID0gZXhwKHggLSBrbG4yKSAqIDIqKmssIGNhcmVmdWxseSBjaG9zZW4gdG8KKwkgKiBtaW5pbWl6ZSB8ZXhwKGtsbjIpIC0gMioqa3wuICBXZSBhbHNvIHNjYWxlIHRoZSBleHBvbmVudCBvZgorCSAqIGV4cF94IHRvIE1BWF9FWFAgc28gdGhhdCB0aGUgcmVzdWx0IGNhbiBiZSBtdWx0aXBsaWVkIGJ5CisJICogYSB0aW55IG51bWJlciB3aXRob3V0IGxvc2luZyBhY2N1cmFjeSBkdWUgdG8gZGVub3JtYWxpemF0aW9uLgorCSAqLworCWV4cF94ID0gZXhwKHggLSBrbG4yKTsKKwlHRVRfSElHSF9XT1JEKGh4LCBleHBfeCk7CisJKmV4cHQgPSAoaHggPj4gMjApIC0gKDB4M2ZmICsgMTAyMykgKyBrOworCVNFVF9ISUdIX1dPUkQoZXhwX3gsIChoeCAmIDB4ZmZmZmYpIHwgKCgweDNmZiArIDEwMjMpIDw8IDIwKSk7CisJcmV0dXJuIChleHBfeCk7Cit9CisKKy8qCisgKiBfX2xkZXhwX2V4cCh4LCBleHB0KSBhbmQgX19sZGV4cF9jZXhwKHgsIGV4cHQpIGNvbXB1dGUgZXhwKHgpICogMioqZXhwdC4KKyAqIFRoZXkgYXJlIGludGVuZGVkIGZvciBsYXJnZSBhcmd1bWVudHMgKHJlYWwgcGFydCA+PSBsbihEQkxfTUFYKSkKKyAqIHdoZXJlIGNhcmUgaXMgbmVlZGVkIHRvIGF2b2lkIG92ZXJmbG93LgorICoKKyAqIFRoZSBwcmVzZW50IGltcGxlbWVudGF0aW9uIGlzIG5hcnJvd2x5IHRhaWxvcmVkIGZvciBvdXIgaHlwZXJib2xpYyBhbmQKKyAqIGV4cG9uZW50aWFsIGZ1bmN0aW9ucy4gIFdlIGFzc3VtZSBleHB0IGlzIHNtYWxsICgwIG9yIC0xKSwgYW5kIHRoZSBjYWxsZXIKKyAqIGhhcyBmaWx0ZXJlZCBvdXQgdmVyeSBsYXJnZSB4LCBmb3Igd2hpY2ggb3ZlcmZsb3cgd291bGQgYmUgaW5ldml0YWJsZS4KKyAqLworCitkb3VibGUKK19fbGRleHBfZXhwKGRvdWJsZSB4LCBpbnQgZXhwdCkKK3sKKwlkb3VibGUgZXhwX3gsIHNjYWxlOworCWludCBleF9leHB0OworCisJZXhwX3ggPSBfX2ZyZXhwX2V4cCh4LCAmZXhfZXhwdCk7CisJZXhwdCArPSBleF9leHB0OworCUlOU0VSVF9XT1JEUyhzY2FsZSwgKDB4M2ZmICsgZXhwdCkgPDwgMjAsIDApOworCXJldHVybiAoZXhwX3ggKiBzY2FsZSk7Cit9CisKK2RvdWJsZSBjb21wbGV4CitfX2xkZXhwX2NleHAoZG91YmxlIGNvbXBsZXggeiwgaW50IGV4cHQpCit7CisJZG91YmxlIHgsIHksIGV4cF94LCBzY2FsZTEsIHNjYWxlMjsKKwlpbnQgZXhfZXhwdCwgaGFsZl9leHB0OworCisJeCA9IGNyZWFsKHopOworCXkgPSBjaW1hZyh6KTsKKwlleHBfeCA9IF9fZnJleHBfZXhwKHgsICZleF9leHB0KTsKKwlleHB0ICs9IGV4X2V4cHQ7CisKKwkvKgorCSAqIEFycmFuZ2Ugc28gdGhhdCBzY2FsZTEgKiBzY2FsZTIgPT0gMioqZXhwdC4gIFdlIHVzZSB0aGlzIHRvCisJICogY29tcGVuc2F0ZSBmb3Igc2NhbGJuIGJlaW5nIGhvcnJlbmRvdXNseSBzbG93LgorCSAqLworCWhhbGZfZXhwdCA9IGV4cHQgLyAyOworCUlOU0VSVF9XT1JEUyhzY2FsZTEsICgweDNmZiArIGhhbGZfZXhwdCkgPDwgMjAsIDApOworCWhhbGZfZXhwdCA9IGV4cHQgLSBoYWxmX2V4cHQ7CisJSU5TRVJUX1dPUkRTKHNjYWxlMiwgKDB4M2ZmICsgaGFsZl9leHB0KSA8PCAyMCwgMCk7CisKKwlyZXR1cm4gKGNwYWNrKGNvcyh5KSAqIGV4cF94ICogc2NhbGUxICogc2NhbGUyLAorCSAgICBzaW4oeSkgKiBleHBfeCAqIHNjYWxlMSAqIHNjYWxlMikpOworfQpkaWZmIC0tZ2l0IGEvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9rX2V4cGYuYyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMva19leHBmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQ4YTAwOAotLS0gL2Rldi9udWxsCisrKyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMva19leHBmLmMKQEAgLTAsMCArMSw4NyBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgRGF2aWQgU2NodWx0eiA8ZGFzQEZyZWVCU0QuT1JHPgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CitfX0ZCU0RJRCgiJEZyZWVCU0QkIik7CisKKyNpbmNsdWRlIDxjb21wbGV4Lmg+CisKKyNpbmNsdWRlICJtYXRoLmgiCisjaW5jbHVkZSAibWF0aF9wcml2YXRlLmgiCisKK3N0YXRpYyBjb25zdCB1aW50MzJfdCBrID0gMjM1OwkJCS8qIGNvbnN0YW50IGZvciByZWR1Y3Rpb24gKi8KK3N0YXRpYyBjb25zdCBmbG9hdCBrbG4yID0gIDE2Mi44ODk1ODc0MEY7CS8qIGsgKiBsbjIgKi8KKworLyoKKyAqIFNlZSBrX2V4cC5jIGZvciBkZXRhaWxzLgorICoKKyAqIElucHV0OiAgbG4oRkxUX01BWCkgPD0geCA8IGxuKDIgKiBGTFRfTUFYIC8gRkxUX01JTl9ERU5PUk0pIH49IDE5Mi43CisgKiBPdXRwdXQ6IDIqKjEyNyA8PSB5IDwgMioqMTI4CisgKi8KK3N0YXRpYyBmbG9hdAorX19mcmV4cF9leHBmKGZsb2F0IHgsIGludCAqZXhwdCkKK3sKKwlmbG9hdCBleHBfeDsKKwl1aW50MzJfdCBoeDsKKworCWV4cF94ID0gZXhwZih4IC0ga2xuMik7CisJR0VUX0ZMT0FUX1dPUkQoaHgsIGV4cF94KTsKKwkqZXhwdCA9IChoeCA+PiAyMykgLSAoMHg3ZiArIDEyNykgKyBrOworCVNFVF9GTE9BVF9XT1JEKGV4cF94LCAoaHggJiAweDdmZmZmZikgfCAoKDB4N2YgKyAxMjcpIDw8IDIzKSk7CisJcmV0dXJuIChleHBfeCk7Cit9CisKK2Zsb2F0CitfX2xkZXhwX2V4cGYoZmxvYXQgeCwgaW50IGV4cHQpCit7CisJZmxvYXQgZXhwX3gsIHNjYWxlOworCWludCBleF9leHB0OworCisJZXhwX3ggPSBfX2ZyZXhwX2V4cGYoeCwgJmV4X2V4cHQpOworCWV4cHQgKz0gZXhfZXhwdDsKKwlTRVRfRkxPQVRfV09SRChzY2FsZSwgKDB4N2YgKyBleHB0KSA8PCAyMyk7CisJcmV0dXJuIChleHBfeCAqIHNjYWxlKTsKK30KKworZmxvYXQgY29tcGxleAorX19sZGV4cF9jZXhwZihmbG9hdCBjb21wbGV4IHosIGludCBleHB0KQoreworCWZsb2F0IHgsIHksIGV4cF94LCBzY2FsZTEsIHNjYWxlMjsKKwlpbnQgZXhfZXhwdCwgaGFsZl9leHB0OworCisJeCA9IGNyZWFsZih6KTsKKwl5ID0gY2ltYWdmKHopOworCWV4cF94ID0gX19mcmV4cF9leHBmKHgsICZleF9leHB0KTsKKwlleHB0ICs9IGV4X2V4cHQ7CisKKwloYWxmX2V4cHQgPSBleHB0IC8gMjsKKwlTRVRfRkxPQVRfV09SRChzY2FsZTEsICgweDdmICsgaGFsZl9leHB0KSA8PCAyMyk7CisJaGFsZl9leHB0ID0gZXhwdCAtIGhhbGZfZXhwdDsKKwlTRVRfRkxPQVRfV09SRChzY2FsZTIsICgweDdmICsgaGFsZl9leHB0KSA8PCAyMyk7CisKKwlyZXR1cm4gKGNwYWNrZihjb3NmKHkpICogZXhwX3ggKiBzY2FsZTEgKiBzY2FsZTIsCisJICAgIHNpbmYoeSkgKiBleHBfeCAqIHNjYWxlMSAqIHNjYWxlMikpOworfQpkaWZmIC0tZ2l0IGEvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9rX2xvZy5oIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9rX2xvZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhZmY4YmQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL2tfbG9nLmgKQEAgLTAsMCArMSwxMDAgQEAKKworLyogQCgjKWVfbG9nLmMgMS4zIDk1LzAxLzE4ICovCisvKgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogQ29weXJpZ2h0IChDKSAxOTkzIGJ5IFN1biBNaWNyb3N5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBEZXZlbG9wZWQgYXQgU3VuU29mdCwgYSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGJ1c2luZXNzLgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcworICogc29mdHdhcmUgaXMgZnJlZWx5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhpcyBub3RpY2UgCisgKiBpcyBwcmVzZXJ2ZWQuCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorX19GQlNESUQoIiRGcmVlQlNEJCIpOworCisvKgorICoga19sb2cxcChmKToKKyAqIFJldHVybiBsb2coMStmKSAtIGYgZm9yIDErZiBpbiB+W3NxcnQoMikvMiwgc3FydCgyKV0uCisgKgorICogVGhlIGZvbGxvd2luZyBkZXNjcmliZXMgdGhlIG92ZXJhbGwgc3RyYXRlZ3kgZm9yIGNvbXB1dGluZworICogbG9nYXJpdGhtcyBpbiBiYXNlIGUuICBUaGUgYXJndW1lbnQgcmVkdWN0aW9uIGFuZCBhZGRpbmcgdGhlIGZpbmFsCisgKiB0ZXJtIG9mIHRoZSBwb2x5bm9taWFsIGFyZSBkb25lIGJ5IHRoZSBjYWxsZXIgZm9yIGluY3JlYXNlZCBhY2N1cmFjeQorICogd2hlbiBkaWZmZXJlbnQgYmFzZXMgYXJlIHVzZWQuCisgKgorICogTWV0aG9kIDogICAgICAgICAgICAgICAgICAKKyAqICAgMS4gQXJndW1lbnQgUmVkdWN0aW9uOiBmaW5kIGsgYW5kIGYgc3VjaCB0aGF0IAorICoJCQl4ID0gMl5rICogKDErZiksIAorICoJICAgd2hlcmUgIHNxcnQoMikvMiA8IDErZiA8IHNxcnQoMikgLgorICoKKyAqICAgMi4gQXBwcm94aW1hdGlvbiBvZiBsb2coMStmKS4KKyAqCUxldCBzID0gZi8oMitmKSA7IGJhc2VkIG9uIGxvZygxK2YpID0gbG9nKDErcykgLSBsb2coMS1zKQorICoJCSA9IDJzICsgMi8zIHMqKjMgKyAyLzUgcyoqNSArIC4uLi4uLAorICoJICAgICAJID0gMnMgKyBzKlIKKyAqICAgICAgV2UgdXNlIGEgc3BlY2lhbCBSZW1lIGFsZ29yaXRobSBvbiBbMCwwLjE3MTZdIHRvIGdlbmVyYXRlIAorICogCWEgcG9seW5vbWlhbCBvZiBkZWdyZWUgMTQgdG8gYXBwcm94aW1hdGUgUiBUaGUgbWF4aW11bSBlcnJvciAKKyAqCW9mIHRoaXMgcG9seW5vbWlhbCBhcHByb3hpbWF0aW9uIGlzIGJvdW5kZWQgYnkgMioqLTU4LjQ1LiBJbgorICoJb3RoZXIgd29yZHMsCisgKgkJICAgICAgICAyICAgICAgNCAgICAgIDYgICAgICA4ICAgICAgMTAgICAgICAxMiAgICAgIDE0CisgKgkgICAgUih6KSB+IExnMSpzICtMZzIqcyArTGczKnMgK0xnNCpzICtMZzUqcyAgK0xnNipzICArTGc3KnMKKyAqICAJKHRoZSB2YWx1ZXMgb2YgTGcxIHRvIExnNyBhcmUgbGlzdGVkIGluIHRoZSBwcm9ncmFtKQorICoJYW5kCisgKgkgICAgfCAgICAgIDIgICAgICAgICAgMTQgICAgICAgICAgfCAgICAgLTU4LjQ1CisgKgkgICAgfCBMZzEqcyArLi4uK0xnNypzICAgIC0gIFIoeikgfCA8PSAyIAorICoJICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAqCU5vdGUgdGhhdCAycyA9IGYgLSBzKmYgPSBmIC0gaGZzcSArIHMqaGZzcSwgd2hlcmUgaGZzcSA9IGYqZi8yLgorICoJSW4gb3JkZXIgdG8gZ3VhcmFudGVlIGVycm9yIGluIGxvZyBiZWxvdyAxdWxwLCB3ZSBjb21wdXRlIGxvZworICoJYnkKKyAqCQlsb2coMStmKSA9IGYgLSBzKihmIC0gUikJKGlmIGYgaXMgbm90IHRvbyBsYXJnZSkKKyAqCQlsb2coMStmKSA9IGYgLSAoaGZzcSAtIHMqKGhmc3ErUikpLgkoYmV0dGVyIGFjY3VyYWN5KQorICoJCisgKgkzLiBGaW5hbGx5LCAgbG9nKHgpID0gaypsbjIgKyBsb2coMStmKS4gIAorICoJCQkgICAgPSBrKmxuMl9oaSsoZi0oaGZzcS0ocyooaGZzcStSKStrKmxuMl9sbykpKQorICoJICAgSGVyZSBsbjIgaXMgc3BsaXQgaW50byB0d28gZmxvYXRpbmcgcG9pbnQgbnVtYmVyOiAKKyAqCQkJbG4yX2hpICsgbG4yX2xvLAorICoJICAgd2hlcmUgbipsbjJfaGkgaXMgYWx3YXlzIGV4YWN0IGZvciB8bnwgPCAyMDAwLgorICoKKyAqIFNwZWNpYWwgY2FzZXM6CisgKglsb2coeCkgaXMgTmFOIHdpdGggc2lnbmFsIGlmIHggPCAwIChpbmNsdWRpbmcgLUlORikgOyAKKyAqCWxvZygrSU5GKSBpcyArSU5GOyBsb2coMCkgaXMgLUlORiB3aXRoIHNpZ25hbDsKKyAqCWxvZyhOYU4pIGlzIHRoYXQgTmFOIHdpdGggbm8gc2lnbmFsLgorICoKKyAqIEFjY3VyYWN5OgorICoJYWNjb3JkaW5nIHRvIGFuIGVycm9yIGFuYWx5c2lzLCB0aGUgZXJyb3IgaXMgYWx3YXlzIGxlc3MgdGhhbgorICoJMSB1bHAgKHVuaXQgaW4gdGhlIGxhc3QgcGxhY2UpLgorICoKKyAqIENvbnN0YW50czoKKyAqIFRoZSBoZXhhZGVjaW1hbCB2YWx1ZXMgYXJlIHRoZSBpbnRlbmRlZCBvbmVzIGZvciB0aGUgZm9sbG93aW5nIAorICogY29uc3RhbnRzLiBUaGUgZGVjaW1hbCB2YWx1ZXMgbWF5IGJlIHVzZWQsIHByb3ZpZGVkIHRoYXQgdGhlIAorICogY29tcGlsZXIgd2lsbCBjb252ZXJ0IGZyb20gZGVjaW1hbCB0byBiaW5hcnkgYWNjdXJhdGVseSBlbm91Z2ggCisgKiB0byBwcm9kdWNlIHRoZSBoZXhhZGVjaW1hbCB2YWx1ZXMgc2hvd24uCisgKi8KKworc3RhdGljIGNvbnN0IGRvdWJsZQorTGcxID0gNi42NjY2NjY2NjY2NjY3MzUxMzBlLTAxLCAgLyogM0ZFNTU1NTUgNTU1NTU1OTMgKi8KK0xnMiA9IDMuOTk5OTk5OTk5OTQwOTQxOTA4ZS0wMSwgIC8qIDNGRDk5OTk5IDk5OTdGQTA0ICovCitMZzMgPSAyLjg1NzE0Mjg3NDM2NjIzOTE0OWUtMDEsICAvKiAzRkQyNDkyNCA5NDIyOTM1OSAqLworTGc0ID0gMi4yMjIyMTk4NDMyMTQ5NzgzOTZlLTAxLCAgLyogM0ZDQzcxQzUgMUQ4RTc4QUYgKi8KK0xnNSA9IDEuODE4MzU3MjE2MTYxODA1MDEyZS0wMSwgIC8qIDNGQzc0NjY0IDk2Q0IwM0RFICovCitMZzYgPSAxLjUzMTM4Mzc2OTkyMDkzNzMzMmUtMDEsICAvKiAzRkMzOUEwOSBEMDc4QzY5RiAqLworTGc3ID0gMS40Nzk4MTk4NjA1MTE2NTg1OTFlLTAxOyAgLyogM0ZDMkYxMTIgREYzRTUyNDQgKi8KKworLyoKKyAqIFdlIGFsd2F5cyBpbmxpbmUga19sb2cxcCgpLCBzaW5jZSBkb2luZyBzbyBwcm9kdWNlcyBhCisgKiBzdWJzdGFudGlhbCBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudCAofjQwJSBvbiBhbWQ2NCkuCisgKi8KK3N0YXRpYyBpbmxpbmUgZG91YmxlCitrX2xvZzFwKGRvdWJsZSBmKQoreworCWRvdWJsZSBoZnNxLHMseixSLHcsdDEsdDI7CisKKyAJcyA9IGYvKDIuMCtmKTsKKwl6ID0gcypzOworCXcgPSB6Kno7CisJdDE9IHcqKExnMit3KihMZzQrdypMZzYpKTsKKwl0Mj0geiooTGcxK3cqKExnMyt3KihMZzUrdypMZzcpKSk7CisJUiA9IHQyK3QxOworCWhmc3E9MC41KmYqZjsKKwlyZXR1cm4gcyooaGZzcStSKTsKK30KZGlmZiAtLWdpdCBhL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMva19sb2dmLmggYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL2tfbG9nZi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxYzU0N2UKLS0tIC9kZXYvbnVsbAorKysgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL2tfbG9nZi5oCkBAIC0wLDAgKzEsMzkgQEAKKy8qCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBDb3B5cmlnaHQgKEMpIDE5OTMgYnkgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIERldmVsb3BlZCBhdCBTdW5Qcm8sIGEgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBidXNpbmVzcy4KKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKKyAqIHNvZnR3YXJlIGlzIGZyZWVseSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoaXMgbm90aWNlCisgKiBpcyBwcmVzZXJ2ZWQuCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorX19GQlNESUQoIiRGcmVlQlNEJCIpOworCisvKgorICogRmxvYXQgdmVyc2lvbiBvZiBrX2xvZy5oLiAgU2VlIHRoZSBsYXR0ZXIgZm9yIG1vc3QgY29tbWVudHMuCisgKi8KKworc3RhdGljIGNvbnN0IGZsb2F0CisvKiB8KGxvZygxK3MpLWxvZygxLXMpKS9zIC0gTGcocyl8IDwgMioqLTM0LjI0ICh+Wy00Ljk1ZS0xMSwgNC45N2UtMTFdKS4gKi8KK0xnMSA9ICAgICAgMHhhYWFhYWEuMHAtMjQsCS8qIDAuNjY2NjY2NjI2OTMgKi8KK0xnMiA9ICAgICAgMHhjY2NlMTMuMHAtMjUsCS8qIDAuNDAwMDA5NzIxNTIgKi8KK0xnMyA9ICAgICAgMHg5MWU5ZWUuMHAtMjUsCS8qIDAuMjg0OTg3ODY2ODggKi8KK0xnNCA9ICAgICAgMHhmODllMjYuMHAtMjY7CS8qIDAuMjQyNzkwNzg4NDEgKi8KKworc3RhdGljIGlubGluZSBmbG9hdAora19sb2cxcGYoZmxvYXQgZikKK3sKKwlmbG9hdCBoZnNxLHMseixSLHcsdDEsdDI7CisKKyAJcyA9IGYvKChmbG9hdCkyLjArZik7CisJeiA9IHMqczsKKwl3ID0geip6OworCXQxPSB3KihMZzIrdypMZzQpOworCXQyPSB6KihMZzErdypMZzMpOworCVIgPSB0Mit0MTsKKwloZnNxPShmbG9hdCkwLjUqZipmOworCXJldHVybiBzKihoZnNxK1IpOworfQpkaWZmIC0tZ2l0IGEvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9rX3JlbV9waW8yLmMgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL2tfcmVtX3BpbzIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOTQyNDQxCi0tLSAvZGV2L251bGwKKysrIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9rX3JlbV9waW8yLmMKQEAgLTAsMCArMSw0NDMgQEAKKworLyogQCgjKWtfcmVtX3BpbzIuYyAxLjMgOTUvMDEvMTggKi8KKy8qCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBDb3B5cmlnaHQgKEMpIDE5OTMgYnkgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIERldmVsb3BlZCBhdCBTdW5Tb2Z0LCBhIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gYnVzaW5lc3MuCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCisgKiBzb2Z0d2FyZSBpcyBmcmVlbHkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGlzIG5vdGljZSAKKyAqIGlzIHByZXNlcnZlZC4KKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CitfX0ZCU0RJRCgiJEZyZWVCU0QkIik7CisKKy8qCisgKiBfX2tlcm5lbF9yZW1fcGlvMih4LHksZTAsbngscHJlYykKKyAqIGRvdWJsZSB4W10seVtdOyBpbnQgZTAsbngscHJlYzsKKyAqIAorICogX19rZXJuZWxfcmVtX3BpbzIgcmV0dXJuIHRoZSBsYXN0IHRocmVlIGRpZ2l0cyBvZiBOIHdpdGggCisgKgkJeSA9IHggLSBOKnBpLzIKKyAqIHNvIHRoYXQgfHl8IDwgcGkvMi4KKyAqCisgKiBUaGUgbWV0aG9kIGlzIHRvIGNvbXB1dGUgdGhlIGludGVnZXIgKG1vZCA4KSBhbmQgZnJhY3Rpb24gcGFydHMgb2YgCisgKiAoMi9waSkqeCB3aXRob3V0IGRvaW5nIHRoZSBmdWxsIG11bHRpcGxpY2F0aW9uLiBJbiBnZW5lcmFsIHdlCisgKiBza2lwIHRoZSBwYXJ0IG9mIHRoZSBwcm9kdWN0IHRoYXQgYXJlIGtub3duIHRvIGJlIGEgaHVnZSBpbnRlZ2VyICgKKyAqIG1vcmUgYWNjdXJhdGVseSwgPSAwIG1vZCA4ICkuIFRodXMgdGhlIG51bWJlciBvZiBvcGVyYXRpb25zIGFyZQorICogaW5kZXBlbmRlbnQgb2YgdGhlIGV4cG9uZW50IG9mIHRoZSBpbnB1dC4KKyAqCisgKiAoMi9waSkgaXMgcmVwcmVzZW50ZWQgYnkgYW4gYXJyYXkgb2YgMjQtYml0IGludGVnZXJzIGluIGlwaW8yW10uCisgKgorICogSW5wdXQgcGFyYW1ldGVyczoKKyAqIAl4W10JVGhlIGlucHV0IHZhbHVlIChtdXN0IGJlIHBvc2l0aXZlKSBpcyBicm9rZW4gaW50byBueCAKKyAqCQlwaWVjZXMgb2YgMjQtYml0IGludGVnZXJzIGluIGRvdWJsZSBwcmVjaXNpb24gZm9ybWF0LgorICoJCXhbaV0gd2lsbCBiZSB0aGUgaS10aCAyNCBiaXQgb2YgeC4gVGhlIHNjYWxlZCBleHBvbmVudCAKKyAqCQlvZiB4WzBdIGlzIGdpdmVuIGluIGlucHV0IHBhcmFtZXRlciBlMCAoaS5lLiwgeFswXSoyXmUwIAorICoJCW1hdGNoIHgncyB1cCB0byAyNCBiaXRzLgorICoKKyAqCQlFeGFtcGxlIG9mIGJyZWFraW5nIGEgZG91YmxlIHBvc2l0aXZlIHogaW50byB4WzBdK3hbMV0reFsyXToKKyAqCQkJZTAgPSBpbG9nYih6KS0yMworICoJCQl6ICA9IHNjYWxibih6LC1lMCkKKyAqCQlmb3IgaSA9IDAsMSwyCisgKgkJCXhbaV0gPSBmbG9vcih6KQorICoJCQl6ICAgID0gKHoteFtpXSkqMioqMjQKKyAqCisgKgorICoJeVtdCW91dHB1dCByZXN1bHQgaW4gYW4gYXJyYXkgb2YgZG91YmxlIHByZWNpc2lvbiBudW1iZXJzLgorICoJCVRoZSBkaW1lbnNpb24gb2YgeVtdIGlzOgorICoJCQkyNC1iaXQgIHByZWNpc2lvbgkxCisgKgkJCTUzLWJpdCAgcHJlY2lzaW9uCTIKKyAqCQkJNjQtYml0ICBwcmVjaXNpb24JMgorICoJCQkxMTMtYml0IHByZWNpc2lvbgkzCisgKgkJVGhlIGFjdHVhbCB2YWx1ZSBpcyB0aGUgc3VtIG9mIHRoZW0uIFRodXMgZm9yIDExMy1iaXQKKyAqCQlwcmVjaXNvbiwgb25lIG1heSBoYXZlIHRvIGRvIHNvbWV0aGluZyBsaWtlOgorICoKKyAqCQlsb25nIGRvdWJsZSB0LHcscl9oZWFkLCByX3RhaWw7CisgKgkJdCA9IChsb25nIGRvdWJsZSl5WzJdICsgKGxvbmcgZG91YmxlKXlbMV07CisgKgkJdyA9IChsb25nIGRvdWJsZSl5WzBdOworICoJCXJfaGVhZCA9IHQrdzsKKyAqCQlyX3RhaWwgPSB3IC0gKHJfaGVhZCAtIHQpOworICoKKyAqCWUwCVRoZSBleHBvbmVudCBvZiB4WzBdLiBNdXN0IGJlIDw9IDE2MzYwIG9yIHlvdSBuZWVkIHRvCisgKiAgICAgICAgICAgICAgZXhwYW5kIHRoZSBpcGlvMiB0YWJsZS4KKyAqCisgKglueAlkaW1lbnNpb24gb2YgeFtdCisgKgorICogIAlwcmVjCWFuIGludGVnZXIgaW5kaWNhdGluZyB0aGUgcHJlY2lzaW9uOgorICoJCQkwCTI0ICBiaXRzIChzaW5nbGUpCisgKgkJCTEJNTMgIGJpdHMgKGRvdWJsZSkKKyAqCQkJMgk2NCAgYml0cyAoZXh0ZW5kZWQpCisgKgkJCTMJMTEzIGJpdHMgKHF1YWQpCisgKgorICogRXh0ZXJuYWwgZnVuY3Rpb246CisgKglkb3VibGUgc2NhbGJuKCksIGZsb29yKCk7CisgKgorICoKKyAqIEhlcmUgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHNvbWUgbG9jYWwgdmFyaWFibGVzOgorICoKKyAqIAlqawlqaysxIGlzIHRoZSBpbml0aWFsIG51bWJlciBvZiB0ZXJtcyBvZiBpcGlvMltdIG5lZWRlZAorICoJCWluIHRoZSBjb21wdXRhdGlvbi4gVGhlIG1pbmltdW0gYW5kIHJlY29tbWVuZGVkIHZhbHVlCisgKgkJZm9yIGprIGlzIDMsNCw0LDYgZm9yIHNpbmdsZSwgZG91YmxlLCBleHRlbmRlZCwgYW5kIHF1YWQuCisgKgkJamsrMSBtdXN0IGJlIDIgbGFyZ2VyIHRoYW4geW91IG1pZ2h0IGV4cGVjdCBzbyB0aGF0IG91cgorICoJCXJlY29tcHV0YXRpb24gdGVzdCB3b3Jrcy4gKFVwIHRvIDI0IGJpdHMgaW4gdGhlIGludGVnZXIKKyAqCQlwYXJ0ICh0aGUgMjQgYml0cyBvZiBpdCB0aGF0IHdlIGNvbXB1dGUpIGFuZCAyMyBiaXRzIGluCisgKgkJdGhlIGZyYWN0aW9uIHBhcnQgbWF5IGJlIGxvc3QgdG8gY2FuY2VsYXRpb24gYmVmb3JlIHdlCisgKgkJcmVjb21wdXRlLikKKyAqCisgKiAJanoJbG9jYWwgaW50ZWdlciB2YXJpYWJsZSBpbmRpY2F0aW5nIHRoZSBudW1iZXIgb2YgCisgKgkJdGVybXMgb2YgaXBpbzJbXSB1c2VkLiAKKyAqCisgKglqeAlueCAtIDEKKyAqCisgKglqdglpbmRleCBmb3IgcG9pbnRpbmcgdG8gdGhlIHN1aXRhYmxlIGlwaW8yW10gZm9yIHRoZQorICoJCWNvbXB1dGF0aW9uLiBJbiBnZW5lcmFsLCB3ZSB3YW50CisgKgkJCSggMl5lMCp4WzBdICogaXBpbzJbanYtMV0qMl4oLTI0anYpICkvOAorICoJCWlzIGFuIGludGVnZXIuIFRodXMKKyAqCQkJZTAtMy0yNCpqdiA+PSAwIG9yIChlMC0zKS8yNCA+PSBqdgorICoJCUhlbmNlIGp2ID0gbWF4KDAsKGUwLTMpLzI0KS4KKyAqCisgKglqcAlqcCsxIGlzIHRoZSBudW1iZXIgb2YgdGVybXMgaW4gUElvMltdIG5lZWRlZCwganAgPSBqay4KKyAqCisgKiAJcVtdCWRvdWJsZSBhcnJheSB3aXRoIGludGVncmFsIHZhbHVlLCByZXByZXNlbnRpbmcgdGhlCisgKgkJMjQtYml0cyBjaHVuayBvZiB0aGUgcHJvZHVjdCBvZiB4IGFuZCAyL3BpLgorICoKKyAqCXEwCXRoZSBjb3JyZXNwb25kaW5nIGV4cG9uZW50IG9mIHFbMF0uIE5vdGUgdGhhdCB0aGUKKyAqCQlleHBvbmVudCBmb3IgcVtpXSB3b3VsZCBiZSBxMC0yNCppLgorICoKKyAqCVBJbzJbXQlkb3VibGUgcHJlY2lzaW9uIGFycmF5LCBvYnRhaW5lZCBieSBjdXR0aW5nIHBpLzIKKyAqCQlpbnRvIDI0IGJpdHMgY2h1bmtzLiAKKyAqCisgKglmW10JaXBpbzJbXSBpbiBmbG9hdGluZyBwb2ludCAKKyAqCisgKglpcVtdCWludGVnZXIgYXJyYXkgYnkgYnJlYWtpbmcgdXAgcVtdIGluIDI0LWJpdHMgY2h1bmsuCisgKgorICoJZnFbXQlmaW5hbCBwcm9kdWN0IG9mIHgqKDIvcGkpIGluIGZxWzBdLC4uLGZxW2prXQorICoKKyAqCWloCWludGVnZXIuIElmID4wIGl0IGluZGljYXRlcyBxW10gaXMgPj0gMC41LCBoZW5jZQorICoJCWl0IGFsc28gaW5kaWNhdGVzIHRoZSAqc2lnbiogb2YgdGhlIHJlc3VsdC4KKyAqCisgKi8KKworCisvKgorICogQ29uc3RhbnRzOgorICogVGhlIGhleGFkZWNpbWFsIHZhbHVlcyBhcmUgdGhlIGludGVuZGVkIG9uZXMgZm9yIHRoZSBmb2xsb3dpbmcgCisgKiBjb25zdGFudHMuIFRoZSBkZWNpbWFsIHZhbHVlcyBtYXkgYmUgdXNlZCwgcHJvdmlkZWQgdGhhdCB0aGUgCisgKiBjb21waWxlciB3aWxsIGNvbnZlcnQgZnJvbSBkZWNpbWFsIHRvIGJpbmFyeSBhY2N1cmF0ZWx5IGVub3VnaCAKKyAqIHRvIHByb2R1Y2UgdGhlIGhleGFkZWNpbWFsIHZhbHVlcyBzaG93bi4KKyAqLworCisjaW5jbHVkZSA8ZmxvYXQuaD4KKworI2luY2x1ZGUgIm1hdGguaCIKKyNpbmNsdWRlICJtYXRoX3ByaXZhdGUuaCIKKworc3RhdGljIGNvbnN0IGludCBpbml0X2prW10gPSB7Myw0LDQsNn07IC8qIGluaXRpYWwgdmFsdWUgZm9yIGprICovCisKKy8qCisgKiBUYWJsZSBvZiBjb25zdGFudHMgZm9yIDIvcGksIDM5NiBIZXggZGlnaXRzICg0NzYgZGVjaW1hbCkgb2YgMi9waQorICoKKyAqCQlpbnRlZ2VyIGFycmF5LCBjb250YWlucyB0aGUgKDI0KmkpLXRoIHRvICgyNCppKzIzKS10aCAKKyAqCQliaXQgb2YgMi9waSBhZnRlciBiaW5hcnkgcG9pbnQuIFRoZSBjb3JyZXNwb25kaW5nIAorICoJCWZsb2F0aW5nIHZhbHVlIGlzCisgKgorICoJCQlpcGlvMltpXSAqIDJeKC0yNChpKzEpKS4KKyAqCisgKiBOQjogVGhpcyB0YWJsZSBtdXN0IGhhdmUgYXQgbGVhc3QgKGUwLTMpLzI0ICsgamsgdGVybXMuCisgKiAgICAgRm9yIHF1YWQgcHJlY2lzaW9uIChlMCA8PSAxNjM2MCwgamsgPSA2KSwgdGhpcyBpcyA2ODYuCisgKi8KK3N0YXRpYyBjb25zdCBpbnQzMl90IGlwaW8yW10gPSB7CisweEEyRjk4MywgMHg2RTRFNDQsIDB4MTUyOUZDLCAweDI3NTdEMSwgMHhGNTM0REQsIDB4QzBEQjYyLCAKKzB4OTU5OTNDLCAweDQzOTA0MSwgMHhGRTUxNjMsIDB4QUJERUJCLCAweEM1NjFCNywgMHgyNDZFM0EsIAorMHg0MjRERDIsIDB4RTAwNjQ5LCAweDJFRUEwOSwgMHhEMTkyMUMsIDB4RkUxREVCLCAweDFDQjEyOSwgCisweEE3M0VFOCwgMHg4MjM1RjUsIDB4MkVCQjQ0LCAweDg0RTk5QywgMHg3MDI2QjQsIDB4NUY3RTQxLCAKKzB4Mzk5MUQ2LCAweDM5ODM1MywgMHgzOUY0OUMsIDB4ODQ1RjhCLCAweEJERjkyOCwgMHgzQjFGRjgsIAorMHg5N0ZGREUsIDB4MDU5ODBGLCAweEVGMkYxMSwgMHg4QjVBMEEsIDB4NkQxRjZELCAweDM2N0VDRiwgCisweDI3Q0IwOSwgMHhCNzRGNDYsIDB4M0Y2NjlFLCAweDVGRUEyRCwgMHg3NTI3QkEsIDB4QzdFQkU1LCAKKzB4RjE3QjNELCAweDA3MzlGNywgMHg4QTUyOTIsIDB4RUE2QkZCLCAweDVGQjExRiwgMHg4RDVEMDgsIAorMHg1NjAzMzAsIDB4NDZGQzdCLCAweDZCQUJGMCwgMHhDRkJDMjAsIDB4OUFGNDM2LCAweDFEQTlFMywgCisweDkxNjE1RSwgMHhFNjFCMDgsIDB4NjU5OTg1LCAweDVGMTRBMCwgMHg2ODQwOEQsIDB4RkZEODgwLCAKKzB4NEQ3MzI3LCAweDMxMDYwNiwgMHgxNTU2Q0EsIDB4NzNBOEM5LCAweDYwRTI3QiwgMHhDMDhDNkIsIAorCisjaWYgTERCTF9NQVhfRVhQID4gMTAyNAorI2lmIExEQkxfTUFYX0VYUCA+IDE2Mzg0CisjZXJyb3IgImlwaW8yIHRhYmxlIG5lZWRzIHRvIGJlIGV4cGFuZGVkIgorI2VuZGlmCisweDQ3QzQxOSwgMHhDMzY3Q0QsIDB4RENFODA5LCAweDJBODM1OSwgMHhDNDc2OEIsIDB4OTYxQ0E2LAorMHhEREFGNDQsIDB4RDE1NzE5LCAweDA1M0VBNSwgMHhGRjA3MDUsIDB4M0Y3RTMzLCAweEU4MzJDMiwKKzB4REU0Rjk4LCAweDMyN0RCQiwgMHhDMzNEMjYsIDB4RUY2QjFFLCAweDVFRjg5RiwgMHgzQTFGMzUsCisweENBRjI3RiwgMHgxRDg3RjEsIDB4MjE5MDdDLCAweDdDMjQ2QSwgMHhGQTZFRDUsIDB4NzcyRDMwLAorMHg0MzNCMTUsIDB4QzYxNEI1LCAweDlEMTlDMywgMHhDMkM0QUQsIDB4NDE0RDJDLCAweDVEMDAwQywKKzB4NDY3RDg2LCAweDJENzFFMywgMHg5QUM2OUIsIDB4MDA2MjMzLCAweDdDRDJCNCwgMHg5N0E3QjQsCisweEQ1NTUzNywgMHhGNjNFRDcsIDB4MTgxMEEzLCAweEZDNzY0RCwgMHgyQTlENjQsIDB4QUJENzcwLAorMHhGODdDNjMsIDB4NTdCMDdBLCAweEU3MTUxNywgMHg1NjQ5QzAsIDB4RDlENjNCLCAweDM4ODRBNywKKzB4Q0IyMzI0LCAweDc3OEFENiwgMHgyMzU0NUEsIDB4QjkxRjAwLCAweDFCMEFGMSwgMHhERkNFMTksCisweEZGMzE5RiwgMHg2QTFFNjYsIDB4NjE1Nzk5LCAweDQ3RkJBQywgMHhEODdGN0UsIDB4Qjc2NTIyLAorMHg4OUU4MzIsIDB4NjBCRkU2LCAweENEQzRFRiwgMHgwOTM2NkMsIDB4RDQzRjVELCAweEQ3REUxNiwKKzB4REUzQjU4LCAweDkyOUJERSwgMHgyODIyRDIsIDB4RTg4NjI4LCAweDRENThFMiwgMHgzMkNBQzYsCisweDE2RTMwOCwgMHhDQjdERTAsIDB4NTBDMDE3LCAweEE3MURGMywgMHg1QkUwMTgsIDB4MzQxMzJFLAorMHg2MjEyODMsIDB4MDE0ODgzLCAweDVCOEVGNSwgMHg3RkIwQUQsIDB4RjJFOTFFLCAweDQzNEE0OCwKKzB4RDM2NzEwLCAweEQ4RERBQSwgMHg0MjVGQUUsIDB4Q0U2MTZBLCAweEE0MjgwQSwgMHhCNDk5RDMsCisweEYyQTYwNiwgMHg3Rjc3NUMsIDB4ODNDMkEzLCAweDg4M0M2MSwgMHg3ODczOEEsIDB4NUE4Q0FGLAorMHhCREQ3NkYsIDB4NjNBNjJELCAweENCQkZGNCwgMHhFRjgxOEQsIDB4NjdDMTI2LCAweDQ1Q0E1NSwKKzB4MzZEOUNBLCAweEQyQTgyOCwgMHg4RDYxQzIsIDB4NzdDOTEyLCAweDE0MjYwNCwgMHg5QjQ2MTIsCisweEM0NTlDNCwgMHg0NEM1QzgsIDB4OTFCMjRELCAweEYzMTcwMCwgMHhBRDQzRDQsIDB4RTU0OTI5LAorMHgxMEQ1RkQsIDB4RkNCRTAwLCAweENDOTQxRSwgMHhFRUNFNzAsIDB4RjUzRTEzLCAweDgwRjFFQywKKzB4QzNFN0IzLCAweDI4RjhDNywgMHg5NDA1OTMsIDB4M0U3MUMxLCAweEIzMDkyRSwgMHhGMzQ1MEIsCisweDlDMTI4OCwgMHg3QjIwQUIsIDB4OUZCNTJFLCAweEMyOTI0NywgMHgyRjMyN0IsIDB4NkQ1NTBDLAorMHg5MEE3NzIsIDB4MUZFNzZCLCAweDk2Q0IzMSwgMHg0QTE2NzksIDB4RTI3OTQxLCAweDg5REZGNCwKKzB4OTc5NEU4LCAweDg0RTZFMiwgMHg5NzMxOTksIDB4NkJFRDg4LCAweDM2NUY1RiwgMHgwRUZEQkIsCisweEI0OUE0OCwgMHg2Q0E0NjcsIDB4NDI3MjcxLCAweDMyNUQ4RCwgMHhCODE1OUYsIDB4MDlFNUJDLAorMHgyNTMxOEQsIDB4Mzk3NEY3LCAweDFDMDUzMCwgMHgwMTBDMEQsIDB4NjgwODRCLCAweDU4RUUyQywKKzB4OTBBQTQ3LCAweDAyRTc3NCwgMHgyNEQ2QkQsIDB4QTY3REY3LCAweDcyNDg2RSwgMHhFRjE2OUYsCisweEE2OTQ4RSwgMHhGNjkxQjQsIDB4NTE1M0QxLCAweEYyMEFDRiwgMHgzMzk4MjAsIDB4N0U0QkY1LAorMHg2ODYzQjIsIDB4NUYzRURELCAweDAzNUQ0MCwgMHg3Rjg5ODUsIDB4Mjk1MjU1LCAweEMwNjQzNywKKzB4MTBEODZELCAweDMyNDgzMiwgMHg3NTRDNUIsIDB4RDQ3MTRFLCAweDZFNTQ0NSwgMHhDMTA5MEIsCisweDY5RjUyQSwgMHhENTY2MTQsIDB4OUQwNzI3LCAweDUwMDQ1RCwgMHhEQjNCQjQsIDB4QzU3NkVBLAorMHgxN0Y5ODcsIDB4N0Q2QjQ5LCAweEJBMjcxRCwgMHgyOTY5OTYsIDB4QUNDQ0M2LCAweDU0MTRBRCwKKzB4NkFFMjkwLCAweDg5RDk4OCwgMHg1MDcyMkMsIDB4QkVBNDA0LCAweDk0MDc3NywgMHg3MDMwRjMsCisweDI3RkMwMCwgMHhBODcxRUEsIDB4NDlDMjY2LCAweDNERTA2NCwgMHg4M0REOTcsIDB4OTczRkEzLAorMHhGRDk0NDMsIDB4OEM4NjBELCAweERFNDEzMSwgMHg5RDM5OTIsIDB4OEM3MERELCAweEU3QjcxNywKKzB4M0JERjA4LCAweDJCMzcxNSwgMHhBMDgwNUMsIDB4OTM4MDVBLCAweDkyMTExMCwgMHhEOEU4MEYsCisweEFGODA2QywgMHg0QkZGREIsIDB4MEY5MDM4LCAweDc2MTg1OSwgMHgxNUE1NjIsIDB4QkJDQjYxLAorMHhCOTg5QzcsIDB4QkQ0MDEwLCAweDA0RjJEMiwgMHgyNzc1NDksIDB4RjZCNkVCLCAweEJCMjJEQiwKKzB4QUExNDBBLCAweDJGMjY4OSwgMHg3NjgzNjQsIDB4MzMzQjA5LCAweDFBOTQwRSwgMHhBQTNBNTEsCisweEMyQTMxRCwgMHhBRUVEQUYsIDB4MTIyNjVDLCAweDREQzI2RCwgMHg5QzdBMkQsIDB4OTc1NkMwLAorMHg4MzNGMDMsIDB4RjZGMDA5LCAweDhDNDAyQiwgMHg5OTMxNkQsIDB4MDdCNDM5LCAweDE1MjAwQywKKzB4NUJDM0Q4LCAweEM0OTJGNSwgMHg0QkFEQzYsIDB4QTVDQTRFLCAweENEMzdBNywgMHgzNkE5RTYsCisweDk0OTJBQiwgMHg2ODQyREQsIDB4REU2MzE5LCAweEVGOEM3NiwgMHg1MjhCNjgsIDB4MzdEQkZDLAorMHhBQkExQUUsIDB4MzExNURGLCAweEExQUUwMCwgMHhEQUZCMEMsIDB4NjY0RDY0LCAweEI3MDVFRCwKKzB4MzA2NTI5LCAweEJGNTY1NywgMHgzQUZGNDcsIDB4QjlGOTZBLCAweEYzQkU3NSwgMHhERjkzMjgsCisweDMwODBBQiwgMHhGNjhDNjYsIDB4MTVDQjA0LCAweDA2MjJGQSwgMHgxREU0RDksIDB4QTRCMzNELAorMHg4RjFCNTcsIDB4MDlDRDM2LCAweEU5NDI0RSwgMHhBNEJFMTMsIDB4QjUyMzMzLCAweDFBQUFGMCwKKzB4QTg2NTRGLCAweEE1QzFEMiwgMHgwRjNGMEIsIDB4Q0Q3ODVCLCAweDc2RjkyMywgMHgwNDhCN0IsCisweDcyMTc4OSwgMHg1M0E2QzYsIDB4RTI2RTZGLCAweDAwRUJFRiwgMHg1ODRBOUIsIDB4QjdEQUM0LAorMHhCQTY2QUEsIDB4Q0ZDRjc2LCAweDFEMDJEMSwgMHgyREYxQjEsIDB4QzE5OThDLCAweDc3QURDMywKKzB4REE0ODg2LCAweEEwNURGNywgMHhGNDgwQzYsIDB4MkZGMEFDLCAweDlBRUNERCwgMHhCQzVDM0YsCisweDZEREVEMCwgMHgxRkM3OTAsIDB4QjZEQjJBLCAweDNBMjVBMywgMHg5QUFGMDAsIDB4OTM1M0FELAorMHgwNDU3QjYsIDB4QjQyRDI5LCAweDdFODA0QiwgMHhBNzA3REEsIDB4MEVBQTc2LCAweEExNTk3QiwKKzB4MkExMjE2LCAweDJEQjdEQywgMHhGREU1RkEsIDB4RkVEQjg5LCAweEZEQkU4OSwgMHg2Qzc2RTQsCisweEZDQTkwNiwgMHg3MDgwM0UsIDB4MTU2RTg1LCAweEZGODdGRCwgMHgwNzNFMjgsIDB4MzM2NzYxLAorMHg4NjE4MkEsIDB4RUFCRDRELCAweEFGRTdCMywgMHg2RTZEOEYsIDB4Mzk2Nzk1LCAweDVCQkYzMSwKKzB4NDhENzg0LCAweDE2REYzMCwgMHg0MzJEQzcsIDB4MzU2MTI1LCAweENFNzBDOSwgMHhCOENCMzAsCisweEZENkNCRiwgMHhBMjAwQTQsIDB4RTQ2QzA1LCAweEEwREQ1QSwgMHg0NzZGMjEsIDB4RDIxMjYyLAorMHg4NDVDQjksIDB4NDk2MTcwLCAweEUwNTY2QiwgMHgwMTUyOTksIDB4Mzc1NTUwLCAweEI3RDUxRSwKKzB4QzRGMTMzLCAweDVGNkUxMywgMHhFNDMwNUQsIDB4QTkyRTg1LCAweEMzQjIxRCwgMHgzNjMyQTEsCisweEE0QjcwOCwgMHhENEIxRUEsIDB4MjFGNzE2LCAweEU0Njk4RiwgMHg3N0ZGMjcsIDB4ODAwMzBDLAorMHgyRDQwOEQsIDB4QTBDRDRGLCAweDk5QTUyMCwgMHhEM0EyQjMsIDB4MEE1RDJGLCAweDQyRjlCNCwKKzB4Q0JEQTExLCAweEQwQkU3RCwgMHhDMURCOUIsIDB4QkQxN0FCLCAweDgxQTJDQSwgMHg1QzZBMDgsCisweDE3NTUyRSwgMHg1NTAwMjcsIDB4RjAxNDdGLCAweDg2MDdFMSwgMHg2NDBCMTQsIDB4OEQ0MTk2LAorMHhERUJFODcsIDB4MkFGRERBLCAweEI2MjU2QiwgMHgzNDg5N0IsIDB4RkVGMzA1LCAweDlFQkZCOSwKKzB4NEY2QTY4LCAweEE4MkE0QSwgMHg1QUM0NEYsIDB4QkNGODJELCAweDk4NUFENywgMHg5NUM3RjQsCisweDhENEQwRCwgMHhBNjNBMjAsIDB4NUY1N0E0LCAweEIxM0YxNCwgMHg5NTM4ODAsIDB4MDEyMENDLAorMHg4NkRENzEsIDB4QjZERUM5LCAweEY1NjBCRiwgMHgxMTY1NEQsIDB4NkIwNzAxLCAweEFDQjA4QywKKzB4RDBDMEIyLCAweDQ4NTU1MSwgMHgwRUZCMUUsIDB4QzM3Mjk1LCAweDNCMDZBMywgMHgzNTQwQzAsCisweDdCREMwNiwgMHhDQzQ1RTAsIDB4RkEyOTRFLCAweEM4Q0FENiwgMHg0MUYzRTgsIDB4REU2NDdDLAorMHhEODY0OUIsIDB4MzFCRUQ5LCAweEMzOTdBNCwgMHhENDU4NzcsIDB4QzVFMzY5LCAweDEzREFGMCwKKzB4M0MzQUJBLCAweDQ2MTg0NiwgMHg1Rjc1NTUsIDB4RjVCREQyLCAweEM2OTI2RSwgMHg1RDJFQUMsCisweEVENDQwRSwgMHg0MjNFMUMsIDB4ODdDNDYxLCAweEU5RkQyOSwgMHhGM0Q2RTcsIDB4Q0E3QzIyLAorMHgzNTkxNkYsIDB4QzVFMDA4LCAweDhERDdGRiwgMHhFMjZBNkUsIDB4QzZGREIwLCAweEMxMDg5MywKKzB4NzQ1RDdDLCAweEIyQUQ2QiwgMHg5RDZFQ0QsIDB4N0I3MjNFLCAweDZBMTFDNiwgMHhBOUNGRjcsCisweERGNzMyOSwgMHhCQUM5QjUsIDB4NTEwMEI3LCAweDBEQjJFMiwgMHgyNEJBNzQsIDB4NjA3REU1LAorMHg4QUQ4NzQsIDB4MkMxNTBELCAweDBDMTg4MSwgMHg5NDY2N0UsIDB4MTYyOTAxLCAweDc2N0E5RiwKKzB4QkVGREZELCAweEVGNDU1NiwgMHgzNjdFRDksIDB4MTNEOUVDLCAweEI5QkE4QiwgMHhGQzk3QzQsCisweDI3QTgzMSwgMHhDMzZFRjEsIDB4MzZDNTk0LCAweDU2QThEOCwgMHhCNUE4QjQsIDB4MEVDQ0NGLAorMHgyRDg5MTIsIDB4MzQ1NzZGLCAweDg5NTYyQywgMHhFM0NFOTksIDB4QjkyMEQ2LCAweEFBNUU2QiwKKzB4OUMyQTNFLCAweENDNUYxMSwgMHg0QTBCRkQsIDB4RkJGNEUxLCAweDZEM0I4RSwgMHgyQzg2RTIsCisweDg0RDRFOSwgMHhBOUI0RkMsIDB4RDFFRUVGLCAweEM5MzUyRSwgMHg2MTM5MkYsIDB4NDQyMTM4LAorMHhDOEQ5MUIsIDB4MEFGQzgxLCAweDZBNEFGQiwgMHhEODFDMkYsIDB4ODRCNDUzLCAweDhDOTk0RSwKKzB4Q0MyMjU0LCAweERDNTUyQSwgMHhENkM2QzAsIDB4OTYxOTBCLCAweEI4NzAxQSwgMHg2NDk1NjksCisweDYwNUEyNiwgMHhFRTUyM0YsIDB4MEYxMTdGLCAweDExQjVGNCwgMHhGNUNCRkMsIDB4MkRCQzM0LAorMHhFRUJDMzQsIDB4Q0M1REU4LCAweDYwNUVERCwgMHg5QjhFNjcsIDB4RUYzMzkyLCAweEI4MTdDOSwKKzB4OUI1ODYxLCAweEJDNTdFMSwgMHhDNjgzNTEsIDB4MTAzRUQ4LCAweDQ4NzFERCwgMHhERDFDMkQsCisweEExMThBRiwgMHg0NjJDMjEsIDB4RDdGMzU5LCAweDk4N0FEOSwgMHhDMDU0OUUsIDB4RkE4NjRGLAorMHhGQzA2NTYsIDB4QUU3OUU1LCAweDM2MjI4OSwgMHgyMkFEMzgsIDB4REM5MzY3LCAweEFBRTg1NSwKKzB4MzgyNjgyLCAweDlCRTdDQSwgMHhBNDBENTEsIDB4QjEzMzk5LCAweDBFRDdBOSwgMHg0ODA1NjksCisweEYwQjI2NSwgMHhBNzg4N0YsIDB4OTc0Qzg4LCAweDM2RDFGOSwgMHhCMzkyMjEsIDB4NEE4MjdCLAorMHgyMUNGOTgsIDB4REM5RjQwLCAweDU1NDdEQywgMHgzQTc0RTEsIDB4NDJFQjY3LCAweERGOURGRSwKKzB4NUZENDVFLCAweEE0Njc3QiwgMHg3QUFDQkEsIDB4QTJGNjU1LCAweDIzODgyQiwgMHg1NUJBNDEsCisweDA4NkU1OSwgMHg4NjJBMjEsIDB4ODM0NzM5LCAweEU2RTM4OSwgMHhENDlFRTUsIDB4NDBGQjQ5LAorMHhFOTU2RkYsIDB4Q0EwRjFDLCAweDhBNTlDNSwgMHgyQkZBOTQsIDB4QzVDMUQzLCAweENGQzUwRiwKKzB4QUU1QURCLCAweDg2QzU0NywgMHg2MjQzODUsIDB4M0I4NjIxLCAweDk0NzkyQywgMHg4NzYxMTAsCisweDdCNEMyQSwgMHgxQTJDODAsIDB4MTJCRjQzLCAweDkwMjY4OCwgMHg4OTNDNzgsIDB4RTRDNEE4LAorMHg3QkRCRTUsIDB4QzIzQUM0LCAweEVBRjQyNiwgMHg4QTY3RjcsIDB4QkY5MjBELCAweDJCQTM2NSwKKzB4QjE5MzNELCAweDBCN0NCRCwgMHhEQzUxQTQsIDB4NjNERDI3LCAweERERTE2OSwgMHgxOTk0OUEsCisweDk1MjlBOCwgMHgyOENFNjgsIDB4QjRFRDA5LCAweDIwOUY0NCwgMHhDQTk4NEUsIDB4NjM4MjcwLAorMHgyMzdDN0UsIDB4MzJCOTBGLCAweDhFRjVBNywgMHhFNzU2MTQsIDB4MDhGMTIxLCAweDJBOURCNSwKKzB4NEQ3RTZGLCAweDUxMTlBNSwgMHhBQkY5QjUsIDB4RDZERjgyLCAweDYxREQ5NiwgMHgwMjM2MTYsCisweDlGM0FDNCwgMHhBMUEyODMsIDB4NkRFRDcyLCAweDdBOEQzOSwgMHhBOUI4ODIsIDB4NUMzMjZCLAorMHg1QjI3NDYsIDB4RUQzNDAwLCAweDc3MDBEMiwgMHg1NUY0RkMsIDB4NEQ1OTAxLCAweDgwNzFFMCwKKyNlbmRpZgorCit9OworCitzdGF0aWMgY29uc3QgZG91YmxlIFBJbzJbXSA9IHsKKyAgMS41NzA3OTYyNTEyOTY5OTcwNzAzMWUrMDAsIC8qIDB4M0ZGOTIxRkIsIDB4NDAwMDAwMDAgKi8KKyAgNy41NDk3ODk0MTU4NjE1OTYzNTMzNWUtMDgsIC8qIDB4M0U3NDQ0MkQsIDB4MDAwMDAwMDAgKi8KKyAgNS4zOTAzMDI1Mjk5NTc3NjQ3NjU1NGUtMTUsIC8qIDB4M0NGODQ2OTgsIDB4ODAwMDAwMDAgKi8KKyAgMy4yODIwMDM0MTU4MDc5MTI5NDEyM2UtMjIsIC8qIDB4M0I3OENDNTEsIDB4NjAwMDAwMDAgKi8KKyAgMS4yNzA2NTU3NTMwODA2NzYwNzM0OWUtMjksIC8qIDB4MzlGMDFCODMsIDB4ODAwMDAwMDAgKi8KKyAgMS4yMjkzMzMwODk4MTExMTMyODkzMmUtMzYsIC8qIDB4Mzg3QTI1MjAsIDB4NDAwMDAwMDAgKi8KKyAgMi43MzM3MDA1MzgxNjQ2NDU1OTYyNGUtNDQsIC8qIDB4MzZFMzgyMjIsIDB4ODAwMDAwMDAgKi8KKyAgMi4xNjc0MTY4Mzg3NzgwNDgxOTQ0NGUtNTEsIC8qIDB4MzU2OUYzMUQsIDB4MDAwMDAwMDAgKi8KK307CisKK3N0YXRpYyBjb25zdCBkb3VibGUJCQkKK3plcm8gICA9IDAuMCwKK29uZSAgICA9IDEuMCwKK3R3bzI0ICAgPSAgMS42Nzc3MjE2MDAwMDAwMDAwMDAwMGUrMDcsIC8qIDB4NDE3MDAwMDAsIDB4MDAwMDAwMDAgKi8KK3R3b24yNCAgPSAgNS45NjA0NjQ0Nzc1MzkwNjI1MDAwMGUtMDg7IC8qIDB4M0U3MDAwMDAsIDB4MDAwMDAwMDAgKi8KKworaW50CitfX2tlcm5lbF9yZW1fcGlvMihkb3VibGUgKngsIGRvdWJsZSAqeSwgaW50IGUwLCBpbnQgbngsIGludCBwcmVjKQoreworCWludDMyX3QganosangsanYsanAsamssY2FycnksbixpcVsyMF0saSxqLGssbSxxMCxpaDsKKwlkb3VibGUgeixmdyxmWzIwXSxmcVsyMF0scVsyMF07CisKKyAgICAvKiBpbml0aWFsaXplIGprKi8KKwlqayA9IGluaXRfamtbcHJlY107CisJanAgPSBqazsKKworICAgIC8qIGRldGVybWluZSBqeCxqdixxMCwgbm90ZSB0aGF0IDM+cTAgKi8KKwlqeCA9ICBueC0xOworCWp2ID0gKGUwLTMpLzI0OyBpZihqdjwwKSBqdj0wOworCXEwID0gIGUwLTI0KihqdisxKTsKKworICAgIC8qIHNldCB1cCBmWzBdIHRvIGZbangramtdIHdoZXJlIGZbangramtdID0gaXBpbzJbanYramtdICovCisJaiA9IGp2LWp4OyBtID0gangrams7CisJZm9yKGk9MDtpPD1tO2krKyxqKyspIGZbaV0gPSAoajwwKT8gemVybyA6IChkb3VibGUpIGlwaW8yW2pdOworCisgICAgLyogY29tcHV0ZSBxWzBdLHFbMV0sLi4ucVtqa10gKi8KKwlmb3IgKGk9MDtpPD1qaztpKyspIHsKKwkgICAgZm9yKGo9MCxmdz0wLjA7ajw9ang7aisrKSBmdyArPSB4W2pdKmZbangraS1qXTsgcVtpXSA9IGZ3OworCX0KKworCWp6ID0gams7CityZWNvbXB1dGU6CisgICAgLyogZGlzdGlsbCBxW10gaW50byBpcVtdIHJldmVyc2luZ2x5ICovCisJZm9yKGk9MCxqPWp6LHo9cVtqel07aj4wO2krKyxqLS0pIHsKKwkgICAgZncgICAgPSAgKGRvdWJsZSkoKGludDMyX3QpKHR3b24yNCogeikpOworCSAgICBpcVtpXSA9ICAoaW50MzJfdCkoei10d28yNCpmdyk7CisJICAgIHogICAgID0gIHFbai0xXStmdzsKKwl9CisKKyAgICAvKiBjb21wdXRlIG4gKi8KKwl6ICA9IHNjYWxibih6LHEwKTsJCS8qIGFjdHVhbCB2YWx1ZSBvZiB6ICovCisJeiAtPSA4LjAqZmxvb3IoeiowLjEyNSk7CQkvKiB0cmltIG9mZiBpbnRlZ2VyID49IDggKi8KKwluICA9IChpbnQzMl90KSB6OworCXogLT0gKGRvdWJsZSluOworCWloID0gMDsKKwlpZihxMD4wKSB7CS8qIG5lZWQgaXFbanotMV0gdG8gZGV0ZXJtaW5lIG4gKi8KKwkgICAgaSAgPSAoaXFbanotMV0+PigyNC1xMCkpOyBuICs9IGk7CisJICAgIGlxW2p6LTFdIC09IGk8PCgyNC1xMCk7CisJICAgIGloID0gaXFbanotMV0+PigyMy1xMCk7CisJfSAKKwllbHNlIGlmKHEwPT0wKSBpaCA9IGlxW2p6LTFdPj4yMzsKKwllbHNlIGlmKHo+PTAuNSkgaWg9MjsKKworCWlmKGloPjApIHsJLyogcSA+IDAuNSAqLworCSAgICBuICs9IDE7IGNhcnJ5ID0gMDsKKwkgICAgZm9yKGk9MDtpPGp6IDtpKyspIHsJLyogY29tcHV0ZSAxLXEgKi8KKwkJaiA9IGlxW2ldOworCQlpZihjYXJyeT09MCkgeworCQkgICAgaWYoaiE9MCkgeworCQkJY2FycnkgPSAxOyBpcVtpXSA9IDB4MTAwMDAwMC0gajsKKwkJICAgIH0KKwkJfSBlbHNlICBpcVtpXSA9IDB4ZmZmZmZmIC0gajsKKwkgICAgfQorCSAgICBpZihxMD4wKSB7CQkvKiByYXJlIGNhc2U6IGNoYW5jZSBpcyAxIGluIDEyICovCisJICAgICAgICBzd2l0Y2gocTApIHsKKwkgICAgICAgIGNhc2UgMToKKwkgICAgCSAgIGlxW2p6LTFdICY9IDB4N2ZmZmZmOyBicmVhazsKKwkgICAgCWNhc2UgMjoKKwkgICAgCSAgIGlxW2p6LTFdICY9IDB4M2ZmZmZmOyBicmVhazsKKwkgICAgICAgIH0KKwkgICAgfQorCSAgICBpZihpaD09MikgeworCQl6ID0gb25lIC0gejsKKwkJaWYoY2FycnkhPTApIHogLT0gc2NhbGJuKG9uZSxxMCk7CisJICAgIH0KKwl9CisKKyAgICAvKiBjaGVjayBpZiByZWNvbXB1dGF0aW9uIGlzIG5lZWRlZCAqLworCWlmKHo9PXplcm8pIHsKKwkgICAgaiA9IDA7CisJICAgIGZvciAoaT1qei0xO2k+PWprO2ktLSkgaiB8PSBpcVtpXTsKKwkgICAgaWYoaj09MCkgeyAvKiBuZWVkIHJlY29tcHV0YXRpb24gKi8KKwkJZm9yKGs9MTtpcVtqay1rXT09MDtrKyspOyAgIC8qIGsgPSBuby4gb2YgdGVybXMgbmVlZGVkICovCisKKwkJZm9yKGk9anorMTtpPD1qeitrO2krKykgeyAgIC8qIGFkZCBxW2p6KzFdIHRvIHFbanora10gKi8KKwkJICAgIGZbangraV0gPSAoZG91YmxlKSBpcGlvMltqditpXTsKKwkJICAgIGZvcihqPTAsZnc9MC4wO2o8PWp4O2orKykgZncgKz0geFtqXSpmW2p4K2ktal07CisJCSAgICBxW2ldID0gZnc7CisJCX0KKwkJanogKz0gazsKKwkJZ290byByZWNvbXB1dGU7CisJICAgIH0KKwl9CisKKyAgICAvKiBjaG9wIG9mZiB6ZXJvIHRlcm1zICovCisJaWYoej09MC4wKSB7CisJICAgIGp6IC09IDE7IHEwIC09IDI0OworCSAgICB3aGlsZShpcVtqel09PTApIHsganotLTsgcTAtPTI0O30KKwl9IGVsc2UgeyAvKiBicmVhayB6IGludG8gMjQtYml0IGlmIG5lY2Vzc2FyeSAqLworCSAgICB6ID0gc2NhbGJuKHosLXEwKTsKKwkgICAgaWYoej49dHdvMjQpIHsgCisJCWZ3ID0gKGRvdWJsZSkoKGludDMyX3QpKHR3b24yNCp6KSk7CisJCWlxW2p6XSA9IChpbnQzMl90KSh6LXR3bzI0KmZ3KTsKKwkJanogKz0gMTsgcTAgKz0gMjQ7CisJCWlxW2p6XSA9IChpbnQzMl90KSBmdzsKKwkgICAgfSBlbHNlIGlxW2p6XSA9IChpbnQzMl90KSB6IDsKKwl9CisKKyAgICAvKiBjb252ZXJ0IGludGVnZXIgImJpdCIgY2h1bmsgdG8gZmxvYXRpbmctcG9pbnQgdmFsdWUgKi8KKwlmdyA9IHNjYWxibihvbmUscTApOworCWZvcihpPWp6O2k+PTA7aS0tKSB7CisJICAgIHFbaV0gPSBmdyooZG91YmxlKWlxW2ldOyBmdyo9dHdvbjI0OworCX0KKworICAgIC8qIGNvbXB1dGUgUElvMlswLC4uLixqcF0qcVtqeiwuLi4sMF0gKi8KKwlmb3IoaT1qejtpPj0wO2ktLSkgeworCSAgICBmb3IoZnc9MC4wLGs9MDtrPD1qcCYmazw9anotaTtrKyspIGZ3ICs9IFBJbzJba10qcVtpK2tdOworCSAgICBmcVtqei1pXSA9IGZ3OworCX0KKworICAgIC8qIGNvbXByZXNzIGZxW10gaW50byB5W10gKi8KKwlzd2l0Y2gocHJlYykgeworCSAgICBjYXNlIDA6CisJCWZ3ID0gMC4wOworCQlmb3IgKGk9ano7aT49MDtpLS0pIGZ3ICs9IGZxW2ldOworCQl5WzBdID0gKGloPT0wKT8gZnc6IC1mdzsgCisJCWJyZWFrOworCSAgICBjYXNlIDE6CisJICAgIGNhc2UgMjoKKwkJZncgPSAwLjA7CisJCWZvciAoaT1qejtpPj0wO2ktLSkgZncgKz0gZnFbaV07IAorCQlTVFJJQ1RfQVNTSUdOKGRvdWJsZSxmdyxmdyk7CisJCXlbMF0gPSAoaWg9PTApPyBmdzogLWZ3OyAKKwkJZncgPSBmcVswXS1mdzsKKwkJZm9yIChpPTE7aTw9ano7aSsrKSBmdyArPSBmcVtpXTsKKwkJeVsxXSA9IChpaD09MCk/IGZ3OiAtZnc7IAorCQlicmVhazsKKwkgICAgY2FzZSAzOgkvKiBwYWluZnVsICovCisJCWZvciAoaT1qejtpPjA7aS0tKSB7CisJCSAgICBmdyAgICAgID0gZnFbaS0xXStmcVtpXTsgCisJCSAgICBmcVtpXSAgKz0gZnFbaS0xXS1mdzsKKwkJICAgIGZxW2ktMV0gPSBmdzsKKwkJfQorCQlmb3IgKGk9ano7aT4xO2ktLSkgeworCQkgICAgZncgICAgICA9IGZxW2ktMV0rZnFbaV07IAorCQkgICAgZnFbaV0gICs9IGZxW2ktMV0tZnc7CisJCSAgICBmcVtpLTFdID0gZnc7CisJCX0KKwkJZm9yIChmdz0wLjAsaT1qejtpPj0yO2ktLSkgZncgKz0gZnFbaV07IAorCQlpZihpaD09MCkgeworCQkgICAgeVswXSA9ICBmcVswXTsgeVsxXSA9ICBmcVsxXTsgeVsyXSA9ICBmdzsKKwkJfSBlbHNlIHsKKwkJICAgIHlbMF0gPSAtZnFbMF07IHlbMV0gPSAtZnFbMV07IHlbMl0gPSAtZnc7CisJCX0KKwl9CisJcmV0dXJuIG4mNzsKK30KZGlmZiAtLWdpdCBhL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMva19zaW4uYyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMva19zaW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMmVlOGMxCi0tLSAvZGV2L251bGwKKysrIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9rX3Npbi5jCkBAIC0wLDAgKzEsNzAgQEAKKworLyogQCgjKWtfc2luLmMgMS4zIDk1LzAxLzE4ICovCisvKgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogQ29weXJpZ2h0IChDKSAxOTkzIGJ5IFN1biBNaWNyb3N5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBEZXZlbG9wZWQgYXQgU3VuU29mdCwgYSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGJ1c2luZXNzLgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcworICogc29mdHdhcmUgaXMgZnJlZWx5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhpcyBub3RpY2UgCisgKiBpcyBwcmVzZXJ2ZWQuCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorX19GQlNESUQoIiRGcmVlQlNEJCIpOworCisvKiBfX2tlcm5lbF9zaW4oIHgsIHksIGl5KQorICoga2VybmVsIHNpbiBmdW5jdGlvbiBvbiB+Wy1waS80LCBwaS80XSAoZXhjZXB0IG9uIC0wKSwgcGkvNCB+IDAuNzg1NAorICogSW5wdXQgeCBpcyBhc3N1bWVkIHRvIGJlIGJvdW5kZWQgYnkgfnBpLzQgaW4gbWFnbml0dWRlLgorICogSW5wdXQgeSBpcyB0aGUgdGFpbCBvZiB4LgorICogSW5wdXQgaXkgaW5kaWNhdGVzIHdoZXRoZXIgeSBpcyAwLiAoaWYgaXk9MCwgeSBhc3N1bWUgdG8gYmUgMCkuIAorICoKKyAqIEFsZ29yaXRobQorICoJMS4gU2luY2Ugc2luKC14KSA9IC1zaW4oeCksIHdlIG5lZWQgb25seSB0byBjb25zaWRlciBwb3NpdGl2ZSB4LiAKKyAqCTIuIENhbGxlcnMgbXVzdCByZXR1cm4gc2luKC0wKSA9IC0wIHdpdGhvdXQgY2FsbGluZyBoZXJlIHNpbmNlIG91cgorICoJICAgb2RkIHBvbHlub21pYWwgaXMgbm90IGV2YWx1YXRlZCBpbiBhIHdheSB0aGF0IHByZXNlcnZlcyAtMC4KKyAqCSAgIENhbGxlcnMgbWF5IGRvIHRoZSBvcHRpbWl6YXRpb24gc2luKHgpIH4geCBmb3IgdGlueSB4LgorICoJMy4gc2luKHgpIGlzIGFwcHJveGltYXRlZCBieSBhIHBvbHlub21pYWwgb2YgZGVncmVlIDEzIG9uCisgKgkgICBbMCxwaS80XQorICoJCSAgCSAgICAgICAgIDMgICAgICAgICAgICAxMworICoJICAgCXNpbih4KSB+IHggKyBTMSp4ICsgLi4uICsgUzYqeAorICoJICAgd2hlcmUKKyAqCQorICogCXxzaW4oeCkgICAgICAgICAyICAgICA0ICAgICA2ICAgICA4ICAgICAxMCAgICAgMTIgIHwgICAgIC01OAorICogCXwtLS0tLSAtICgxK1MxKnggK1MyKnggK1MzKnggK1M0KnggK1M1KnggICtTNip4ICAgKXwgPD0gMgorICogCXwgIHggCQkJCQkgICAgICAgICAgIHwgCisgKiAKKyAqCTQuIHNpbih4K3kpID0gc2luKHgpICsgc2luJyh4JykqeQorICoJCSAgICB+IHNpbih4KSArICgxLXgqeC8yKSp5CisgKgkgICBGb3IgYmV0dGVyIGFjY3VyYWN5LCBsZXQgCisgKgkJICAgICAzICAgICAgMiAgICAgIDIgICAgICAyICAgICAgMgorICoJCXIgPSB4ICooUzIreCAqKFMzK3ggKihTNCt4ICooUzUreCAqUzYpKSkpCisgKgkgICB0aGVuICAgICAgICAgICAgICAgICAgIDMgICAgMgorICoJCXNpbih4KSA9IHggKyAoUzEqeCArICh4ICooci15LzIpK3kpKQorICovCisKKyNpbmNsdWRlICJtYXRoLmgiCisjaW5jbHVkZSAibWF0aF9wcml2YXRlLmgiCisKK3N0YXRpYyBjb25zdCBkb3VibGUKK2hhbGYgPSAgNS4wMDAwMDAwMDAwMDAwMDAwMDAwMGUtMDEsIC8qIDB4M0ZFMDAwMDAsIDB4MDAwMDAwMDAgKi8KK1MxICA9IC0xLjY2NjY2NjY2NjY2NjY2MzI0MzQ4ZS0wMSwgLyogMHhCRkM1NTU1NSwgMHg1NTU1NTU0OSAqLworUzIgID0gIDguMzMzMzMzMzMzMzIyNDg5NDYxMjRlLTAzLCAvKiAweDNGODExMTExLCAweDExMTBGOEE2ICovCitTMyAgPSAtMS45ODQxMjY5ODI5ODU3OTQ5MzEzNGUtMDQsIC8qIDB4QkYyQTAxQTAsIDB4MTlDMTYxRDUgKi8KK1M0ICA9ICAyLjc1NTczMTM3MDcwNzAwNjc2Nzg5ZS0wNiwgLyogMHgzRUM3MURFMywgMHg1N0IxRkU3RCAqLworUzUgID0gLTIuNTA1MDc2MDI1MzQwNjg2MzQxOTVlLTA4LCAvKiAweEJFNUFFNUU2LCAweDhBMkI5Q0VCICovCitTNiAgPSAgMS41ODk2OTA5OTUyMTE1NTAxMDIyMWUtMTA7IC8qIDB4M0RFNUQ5M0EsIDB4NUFDRkQ1N0MgKi8KKworZG91YmxlCitfX2tlcm5lbF9zaW4oZG91YmxlIHgsIGRvdWJsZSB5LCBpbnQgaXkpCit7CisJZG91YmxlIHoscix2LHc7CisKKwl6CT0gIHgqeDsKKwl3CT0gIHoqejsKKwlyCT0gIFMyK3oqKFMzK3oqUzQpICsgeip3KihTNSt6KlM2KTsKKwl2CT0gIHoqeDsKKwlpZihpeT09MCkgcmV0dXJuIHgrdiooUzEreipyKTsKKwllbHNlICAgICAgcmV0dXJuIHgtKCh6KihoYWxmKnktdipyKS15KS12KlMxKTsKK30KZGlmZiAtLWdpdCBhL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMva19zaW5mLmMgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL2tfc2luZi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4NDE3NTkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL2tfc2luZi5jCkBAIC0wLDAgKzEsNDYgQEAKKy8qIGtfc2luZi5jIC0tIGZsb2F0IHZlcnNpb24gb2Yga19zaW4uYworICogQ29udmVyc2lvbiB0byBmbG9hdCBieSBJYW4gTGFuY2UgVGF5bG9yLCBDeWdudXMgU3VwcG9ydCwgaWFuQGN5Z251cy5jb20uCisgKiBPcHRpbWl6ZWQgYnkgQnJ1Y2UgRC4gRXZhbnMuCisgKi8KKworLyoKKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIENvcHlyaWdodCAoQykgMTk5MyBieSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogRGV2ZWxvcGVkIGF0IFN1blBybywgYSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGJ1c2luZXNzLgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcworICogc29mdHdhcmUgaXMgZnJlZWx5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhpcyBub3RpY2UKKyAqIGlzIHByZXNlcnZlZC4KKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworCisjaWZuZGVmIElOTElORV9LRVJORUxfU0lOREYKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJTRCQiKTsKKyNlbmRpZgorCisjaW5jbHVkZSAibWF0aC5oIgorI2luY2x1ZGUgIm1hdGhfcHJpdmF0ZS5oIgorCisvKiB8c2luKHgpL3ggLSBzKHgpfCA8IDIqKi0zNy41ICh+Wy00Ljg5ZS0xMiwgNC44MjRlLTEyXSkuICovCitzdGF0aWMgY29uc3QgZG91YmxlCitTMSA9IC0weDE1NTU1NTU0Y2JhYzc3LjBwLTU1LAkvKiAtMC4xNjY2NjY2NjY0MTYyNjUyMzU1OTUgKi8KK1MyID0gIDB4MTExMTEwODk2ZWZiYjIuMHAtNTksCS8qICAwLjAwODMzMzMyOTM4NTg4OTQ2MzE3NTYgKi8KK1MzID0gLTB4MWEwMGY5ZTJjYWU3NzQuMHAtNjUsCS8qIC0wLjAwMDE5ODM5MzM0ODM2MDk2NjMxNzM0NyAqLworUzQgPSAgMHgxNmNkODc4YzNiNDZhNy4wcC03MTsJLyogIDAuMDAwMDAyNzE4MzExNDkzOTg5ODIxOTA2NCAqLworCisjaWZkZWYgSU5MSU5FX0tFUk5FTF9TSU5ERgorc3RhdGljIF9faW5saW5lCisjZW5kaWYKK2Zsb2F0CitfX2tlcm5lbF9zaW5kZihkb3VibGUgeCkKK3sKKwlkb3VibGUgciwgcywgdywgejsKKworCS8qIFRyeSB0byBvcHRpbWl6ZSBmb3IgcGFyYWxsZWwgZXZhbHVhdGlvbiBhcyBpbiBrX3RhbmYuYy4gKi8KKwl6ID0geCp4OworCXcgPSB6Kno7CisJciA9IFMzK3oqUzQ7CisJcyA9IHoqeDsKKwlyZXR1cm4gKHggKyBzKihTMSt6KlMyKSkgKyBzKncqcjsKK30KZGlmZiAtLWdpdCBhL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMva190YW4uYyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMva190YW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZTg2YzNiCi0tLSAvZGV2L251bGwKKysrIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9rX3Rhbi5jCkBAIC0wLDAgKzEsMTMyIEBACisvKiBAKCMpa190YW4uYyAxLjUgMDQvMDQvMjIgU01JICovCisKKy8qCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBDb3B5cmlnaHQgMjAwNCBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKKyAqIHNvZnR3YXJlIGlzIGZyZWVseSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoaXMgbm90aWNlCisgKiBpcyBwcmVzZXJ2ZWQuCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KKworLyogSU5ERU5UIE9GRiAqLworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorX19GQlNESUQoIiRGcmVlQlNEJCIpOworCisvKiBfX2tlcm5lbF90YW4oIHgsIHksIGsgKQorICoga2VybmVsIHRhbiBmdW5jdGlvbiBvbiB+Wy1waS80LCBwaS80XSAoZXhjZXB0IG9uIC0wKSwgcGkvNCB+IDAuNzg1NAorICogSW5wdXQgeCBpcyBhc3N1bWVkIHRvIGJlIGJvdW5kZWQgYnkgfnBpLzQgaW4gbWFnbml0dWRlLgorICogSW5wdXQgeSBpcyB0aGUgdGFpbCBvZiB4LgorICogSW5wdXQgayBpbmRpY2F0ZXMgd2hldGhlciB0YW4gKGlmIGsgPSAxKSBvciAtMS90YW4gKGlmIGsgPSAtMSkgaXMgcmV0dXJuZWQuCisgKgorICogQWxnb3JpdGhtCisgKgkxLiBTaW5jZSB0YW4oLXgpID0gLXRhbih4KSwgd2UgbmVlZCBvbmx5IHRvIGNvbnNpZGVyIHBvc2l0aXZlIHguCisgKgkyLiBDYWxsZXJzIG11c3QgcmV0dXJuIHRhbigtMCkgPSAtMCB3aXRob3V0IGNhbGxpbmcgaGVyZSBzaW5jZSBvdXIKKyAqCSAgIG9kZCBwb2x5bm9taWFsIGlzIG5vdCBldmFsdWF0ZWQgaW4gYSB3YXkgdGhhdCBwcmVzZXJ2ZXMgLTAuCisgKgkgICBDYWxsZXJzIG1heSBkbyB0aGUgb3B0aW1pemF0aW9uIHRhbih4KSB+IHggZm9yIHRpbnkgeC4KKyAqCTMuIHRhbih4KSBpcyBhcHByb3hpbWF0ZWQgYnkgYSBvZGQgcG9seW5vbWlhbCBvZiBkZWdyZWUgMjcgb24KKyAqCSAgIFswLDAuNjc0MzRdCisgKgkJICAJICAgICAgICAgMyAgICAgICAgICAgICAyNworICoJICAgCXRhbih4KSB+IHggKyBUMSp4ICsgLi4uICsgVDEzKngKKyAqCSAgIHdoZXJlCisgKgorICogCSAgICAgICAgfHRhbih4KSAgICAgICAgIDIgICAgIDQgICAgICAgICAgICAyNiAgIHwgICAgIC01OS4yCisgKiAJICAgICAgICB8LS0tLS0gLSAoMStUMSp4ICtUMip4ICsuLi4uICtUMTMqeCAgICApfCA8PSAyCisgKiAJICAgICAgICB8ICB4IAkJCQkJfAorICoKKyAqCSAgIE5vdGU6IHRhbih4K3kpID0gdGFuKHgpICsgdGFuJyh4KSp5CisgKgkJICAgICAgICAgIH4gdGFuKHgpICsgKDEreCp4KSp5CisgKgkgICBUaGVyZWZvcmUsIGZvciBiZXR0ZXIgYWNjdXJhY3kgaW4gY29tcHV0aW5nIHRhbih4K3kpLCBsZXQKKyAqCQkgICAgIDMgICAgICAyICAgICAgMiAgICAgICAyICAgICAgIDIKKyAqCQlyID0geCAqKFQyK3ggKihUMyt4ICooLi4uK3ggKihUMTIreCAqVDEzKSkpKQorICoJICAgdGhlbgorICoJCSAJCSAgICAzICAgIDIKKyAqCQl0YW4oeCt5KSA9IHggKyAoVDEqeCArICh4ICoocit5KSt5KSkKKyAqCisgKiAgICAgIDQuIEZvciB4IGluIFswLjY3NDM0LHBpLzRdLCAgbGV0IHkgPSBwaS80IC0geCwgdGhlbgorICoJCXRhbih4KSA9IHRhbihwaS80LXkpID0gKDEtdGFuKHkpKS8oMSt0YW4oeSkpCisgKgkJICAgICAgID0gMSAtIDIqKHRhbih5KSAtICh0YW4oeSleMikvKDErdGFuKHkpKSkKKyAqLworCisjaW5jbHVkZSAibWF0aC5oIgorI2luY2x1ZGUgIm1hdGhfcHJpdmF0ZS5oIgorc3RhdGljIGNvbnN0IGRvdWJsZSB4eHhbXSA9IHsKKwkJIDMuMzMzMzMzMzMzMzMzMzQwOTE5ODZlLTAxLAkvKiAzRkQ1NTU1NSwgNTU1NTU1NjMgKi8KKwkJIDEuMzMzMzMzMzMzMzMyMDEyNDI2OTllLTAxLAkvKiAzRkMxMTExMSwgMTExMEZFN0EgKi8KKwkJIDUuMzk2ODI1Mzk3NjIyNjA1MjEzNzdlLTAyLAkvKiAzRkFCQTFCQSwgMUJCMzQxRkUgKi8KKwkJIDIuMTg2OTQ4ODI5NDg1OTU0MjQ1OTllLTAyLAkvKiAzRjk2NjRGNCwgODQwNkQ2MzcgKi8KKwkJIDguODYzMjM5ODIzNTk5MzAwMDU3MzdlLTAzLAkvKiAzRjgyMjZFMywgRTk2RTg0OTMgKi8KKwkJIDMuNTkyMDc5MTA3NTkxMzEyMzUzNTZlLTAzLAkvKiAzRjZENkQyMiwgQzk1NjAzMjggKi8KKwkJIDEuNDU2MjA5NDU0MzI1MjkwMjU1MTZlLTAzLAkvKiAzRjU3REJDOCwgRkVFMDgzMTUgKi8KKwkJIDUuODgwNDEyNDA4MjAyNjQwOTY4NzRlLTA0LAkvKiAzRjQzNDREOCwgRjJGMjY1MDEgKi8KKwkJIDIuNDY0NjMxMzQ4MTg0Njk5MDY4MTJlLTA0LAkvKiAzRjMwMjZGNywgMUE4RDEwNjggKi8KKwkJIDcuODE3OTQ0NDI5Mzk1NTcwOTIzMDBlLTA1LAkvKiAzRjE0N0U4OCwgQTAzNzkyQTYgKi8KKwkJIDcuMTQwNzI0OTEzODI2MDgxOTAzMDVlLTA1LAkvKiAzRjEyQjgwRiwgMzJGMEE3RTkgKi8KKwkJLTEuODU1ODYzNzQ4NTUyNzU0NTY2NTRlLTA1LAkvKiBCRUYzNzVDQiwgREI2MDUzNzMgKi8KKwkJIDIuNTkwNzMwNTE4NjM2MzM3MTI4ODRlLTA1LAkvKiAzRUZCMkE3MCwgNzRCRjdBRDQgKi8KKy8qIG9uZSAqLwkgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMGUrMDAsCS8qIDNGRjAwMDAwLCAwMDAwMDAwMCAqLworLyogcGlvNCAqLwkgNy44NTM5ODE2MzM5NzQ0ODI3ODk5OWUtMDEsCS8qIDNGRTkyMUZCLCA1NDQ0MkQxOCAqLworLyogcGlvNGxvICovCSAzLjA2MTYxNjk5Nzg2ODM4MzAxNzkzZS0xNwkvKiAzQzgxQTYyNiwgMzMxNDVDMDcgKi8KK307CisjZGVmaW5lCW9uZQl4eHhbMTNdCisjZGVmaW5lCXBpbzQJeHh4WzE0XQorI2RlZmluZQlwaW80bG8JeHh4WzE1XQorI2RlZmluZQlUCXh4eAorLyogSU5ERU5UIE9OICovCisKK2RvdWJsZQorX19rZXJuZWxfdGFuKGRvdWJsZSB4LCBkb3VibGUgeSwgaW50IGl5KSB7CisJZG91YmxlIHosIHIsIHYsIHcsIHM7CisJaW50MzJfdCBpeCwgaHg7CisKKwlHRVRfSElHSF9XT1JEKGh4LHgpOworCWl4ID0gaHggJiAweDdmZmZmZmZmOwkJCS8qIGhpZ2ggd29yZCBvZiB8eHwgKi8KKwlpZiAoaXggPj0gMHgzRkU1OTQyOCkgewkvKiB8eHwgPj0gMC42NzQ0ICovCisJCWlmIChoeCA8IDApIHsKKwkJCXggPSAteDsKKwkJCXkgPSAteTsKKwkJfQorCQl6ID0gcGlvNCAtIHg7CisJCXcgPSBwaW80bG8gLSB5OworCQl4ID0geiArIHc7CisJCXkgPSAwLjA7CisJfQorCXogPSB4ICogeDsKKwl3ID0geiAqIHo7CisJLyoKKwkgKiBCcmVhayB4XjUqKFRbMV0reF4yKlRbMl0rLi4uKSBpbnRvCisJICogeF41KFRbMV0reF40KlRbM10rLi4uK3heMjAqVFsxMV0pICsKKwkgKiB4XjUoeF4yKihUWzJdK3heNCpUWzRdKy4uLit4XjIyKltUMTJdKSkKKwkgKi8KKwlyID0gVFsxXSArIHcgKiAoVFszXSArIHcgKiAoVFs1XSArIHcgKiAoVFs3XSArIHcgKiAoVFs5XSArCisJCXcgKiBUWzExXSkpKSk7CisJdiA9IHogKiAoVFsyXSArIHcgKiAoVFs0XSArIHcgKiAoVFs2XSArIHcgKiAoVFs4XSArIHcgKiAoVFsxMF0gKworCQl3ICogVFsxMl0pKSkpKTsKKwlzID0geiAqIHg7CisJciA9IHkgKyB6ICogKHMgKiAociArIHYpICsgeSk7CisJciArPSBUWzBdICogczsKKwl3ID0geCArIHI7CisJaWYgKGl4ID49IDB4M0ZFNTk0MjgpIHsKKwkJdiA9IChkb3VibGUpIGl5OworCQlyZXR1cm4gKGRvdWJsZSkgKDEgLSAoKGh4ID4+IDMwKSAmIDIpKSAqCisJCQkodiAtIDIuMCAqICh4IC0gKHcgKiB3IC8gKHcgKyB2KSAtIHIpKSk7CisJfQorCWlmIChpeSA9PSAxKQorCQlyZXR1cm4gdzsKKwllbHNlIHsKKwkJLyoKKwkJICogaWYgYWxsb3cgZXJyb3IgdXAgdG8gMiB1bHAsIHNpbXBseSByZXR1cm4KKwkJICogLTEuMCAvICh4K3IpIGhlcmUKKwkJICovCisJCS8qIGNvbXB1dGUgLTEuMCAvICh4K3IpIGFjY3VyYXRlbHkgKi8KKwkJZG91YmxlIGEsIHQ7CisJCXogPSB3OworCQlTRVRfTE9XX1dPUkQoeiwwKTsKKwkJdiA9IHIgLSAoeiAtIHgpOwkvKiB6K3YgPSByK3ggKi8KKwkJdCA9IGEgPSAtMS4wIC8gdzsJLyogYSA9IC0xLjAvdyAqLworCQlTRVRfTE9XX1dPUkQodCwwKTsKKwkJcyA9IDEuMCArIHQgKiB6OworCQlyZXR1cm4gdCArIGEgKiAocyArIHQgKiB2KTsKKwl9Cit9CmRpZmYgLS1naXQgYS9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL2tfdGFuZi5jIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9rX3RhbmYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MmYxYWFhCi0tLSAvZGV2L251bGwKKysrIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9rX3RhbmYuYwpAQCAtMCwwICsxLDY2IEBACisvKiBrX3RhbmYuYyAtLSBmbG9hdCB2ZXJzaW9uIG9mIGtfdGFuLmMKKyAqIENvbnZlcnNpb24gdG8gZmxvYXQgYnkgSWFuIExhbmNlIFRheWxvciwgQ3lnbnVzIFN1cHBvcnQsIGlhbkBjeWdudXMuY29tLgorICogT3B0aW1pemVkIGJ5IEJydWNlIEQuIEV2YW5zLgorICovCisKKy8qCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBDb3B5cmlnaHQgMjAwNCBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKKyAqIHNvZnR3YXJlIGlzIGZyZWVseSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoaXMgbm90aWNlCisgKiBpcyBwcmVzZXJ2ZWQuCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KKworI2lmbmRlZiBJTkxJTkVfS0VSTkVMX1RBTkRGCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CitfX0ZCU0RJRCgiJEZyZWVCU0QkIik7CisjZW5kaWYKKworI2luY2x1ZGUgIm1hdGguaCIKKyNpbmNsdWRlICJtYXRoX3ByaXZhdGUuaCIKKworLyogfHRhbih4KS94IC0gdCh4KXwgPCAyKiotMjUuNSAoflstMmUtMDgsIDJlLTA4XSkuICovCitzdGF0aWMgY29uc3QgZG91YmxlCitUW10gPSAgeworICAweDE1NTU0ZDM0MThjOTlmLjBwLTU0LAkvKiAwLjMzMzMzMTM5NTAzMDc5MTM5OTc1OCAqLworICAweDExMTJmZDM4OTk5ZjcyLjBwLTU1LAkvKiAwLjEzMzM5MjAwMjcxMjk3Njc0MjcxOCAqLworICAweDFiNTRjOTFkODY1YWZlLjBwLTU3LAkvKiAwLjA1MzM4MTIzNzg0NDU2NzAzOTM1MjMgKi8KKyAgMHgxOTFkZjM5MDhjMzNjZS4wcC01OCwJLyogMC4wMjQ1MjgzMTgxMTY2NTQ3Mjc4ODczICovCisgIDB4MTg1ZGFkZmNlY2Y0NGUuMHAtNjEsCS8qIDAuMDAyOTc0MzU3NDMzNTk5NjczMDQ5MjcgKi8KKyAgMHgxMzYyYjliZjk3MWJjZC4wcC01OSwJLyogMC4wMDk0NjU2NDc4NDk0MzY3MzE2NjcyOCAqLworfTsKKworI2lmZGVmIElOTElORV9LRVJORUxfVEFOREYKK3N0YXRpYyBfX2lubGluZQorI2VuZGlmCitmbG9hdAorX19rZXJuZWxfdGFuZGYoZG91YmxlIHgsIGludCBpeSkKK3sKKwlkb3VibGUgeixyLHcscyx0LHU7CisKKwl6CT0gIHgqeDsKKwkvKgorCSAqIFNwbGl0IHVwIHRoZSBwb2x5bm9taWFsIGludG8gc21hbGwgaW5kZXBlbmRlbnQgdGVybXMgdG8gZ2l2ZQorCSAqIG9wcG9ydHVuaXRpZXMgZm9yIHBhcmFsbGVsIGV2YWx1YXRpb24uICBUaGUgY2hvc2VuIHNwbGl0dGluZyBpcworCSAqIG1pY3JvLW9wdGltaXplZCBmb3IgQXRobG9ucyAoWFAsIFg2NCkuICBJdCBjb3N0cyAyIG11bHRpcGxpY2F0aW9ucworCSAqIHJlbGF0aXZlIHRvIEhvcm5lcidzIG1ldGhvZCBvbiBzZXF1ZW50aWFsIG1hY2hpbmVzLgorCSAqCisJICogV2UgYWRkIHRoZSBzbWFsbCB0ZXJtcyBmcm9tIGxvd2VzdCBkZWdyZWUgdXAgZm9yIGVmZmljaWVuY3kgb24KKwkgKiBub24tc2VxdWVudGlhbCBtYWNoaW5lcyAodGhlIGxvd2VzdCBkZWdyZWUgdGVybXMgdGVuZCB0byBiZSByZWFkeQorCSAqIGVhcmxpZXIpLiAgQXBhcnQgZnJvbSB0aGlzLCB3ZSBkb24ndCBjYXJlIGFib3V0IG9yZGVyIG9mCisJICogb3BlcmF0aW9ucywgYW5kIGRvbid0IG5lZWQgdG8gdG8gY2FyZSBzaW5jZSB3ZSBoYXZlIHByZWNpc2lvbiB0bworCSAqIHNwYXJlLiAgSG93ZXZlciwgdGhlIGNob3NlbiBzcGxpdHRpbmcgaXMgZ29vZCBmb3IgYWNjdXJhY3kgdG9vLAorCSAqIGFuZCB3b3VsZCBnaXZlIHJlc3VsdHMgYXMgYWNjdXJhdGUgYXMgSG9ybmVyJ3MgbWV0aG9kIGlmIHRoZQorCSAqIHNtYWxsIHRlcm1zIHdlcmUgYWRkZWQgZnJvbSBoaWdoZXN0IGRlZ3JlZSBkb3duLgorCSAqLworCXIgPSBUWzRdK3oqVFs1XTsKKwl0ID0gVFsyXSt6KlRbM107CisJdyA9IHoqejsKKwlzID0geip4OworCXUgPSBUWzBdK3oqVFsxXTsKKwlyID0gKHgrcyp1KSsocyp3KSoodCt3KnIpOworCWlmKGl5PT0xKSByZXR1cm4gcjsKKwllbHNlIHJldHVybiAtMS4wL3I7Cit9CmRpZmYgLS1naXQgYS9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL21hdGhfcHJpdmF0ZS5oIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9tYXRoX3ByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZWJjN2ZiCi0tLSAvZGV2L251bGwKKysrIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9tYXRoX3ByaXZhdGUuaApAQCAtMCwwICsxLDc2NCBAQAorLyoKKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIENvcHlyaWdodCAoQykgMTk5MyBieSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogRGV2ZWxvcGVkIGF0IFN1blBybywgYSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGJ1c2luZXNzLgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcworICogc29mdHdhcmUgaXMgZnJlZWx5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhpcyBub3RpY2UKKyAqIGlzIHByZXNlcnZlZC4KKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworCisvKgorICogZnJvbTogQCgjKWZkbGlibS5oIDUuMSA5My8wOS8yNAorICogJEZyZWVCU0QkCisgKi8KKworI2lmbmRlZiBfTUFUSF9QUklWQVRFX0hfCisjZGVmaW5lCV9NQVRIX1BSSVZBVEVfSF8KKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPG1hY2hpbmUvZW5kaWFuLmg+CisKKy8qCisgKiBUaGUgb3JpZ2luYWwgZmRsaWJtIGNvZGUgdXNlZCBzdGF0ZW1lbnRzIGxpa2U6CisgKgluMCA9ICgoKihpbnQqKSZvbmUpPj4yOSleMTsJCSogaW5kZXggb2YgaGlnaCB3b3JkICoKKyAqCWl4MCA9ICoobjArKGludCopJngpOwkJCSogaGlnaCB3b3JkIG9mIHggKgorICoJaXgxID0gKigoMS1uMCkrKGludCopJngpOwkJKiBsb3cgd29yZCBvZiB4ICoKKyAqIHRvIGRpZyB0d28gMzIgYml0IHdvcmRzIG91dCBvZiB0aGUgNjQgYml0IElFRUUgZmxvYXRpbmcgcG9pbnQKKyAqIHZhbHVlLiAgVGhhdCBpcyBub24tQU5TSSwgYW5kLCBtb3Jlb3ZlciwgdGhlIGdjYyBpbnN0cnVjdGlvbgorICogc2NoZWR1bGVyIGdldHMgaXQgd3JvbmcuICBXZSBpbnN0ZWFkIHVzZSB0aGUgZm9sbG93aW5nIG1hY3Jvcy4KKyAqIFVubGlrZSB0aGUgb3JpZ2luYWwgY29kZSwgd2UgZGV0ZXJtaW5lIHRoZSBlbmRpYW5uZXNzIGF0IGNvbXBpbGUKKyAqIHRpbWUsIG5vdCBhdCBydW4gdGltZTsgSSBkb24ndCBzZWUgbXVjaCBiZW5lZml0IHRvIHNlbGVjdGluZworICogZW5kaWFubmVzcyBhdCBydW4gdGltZS4KKyAqLworCisvKgorICogQSB1bmlvbiB3aGljaCBwZXJtaXRzIHVzIHRvIGNvbnZlcnQgYmV0d2VlbiBhIGRvdWJsZSBhbmQgdHdvIDMyIGJpdAorICogaW50cy4KKyAqLworCisjaWZkZWYgX19hcm1fXworI2lmIGRlZmluZWQoX19WRlBfRlBfXykKKyNkZWZpbmUJSUVFRV9XT1JEX09SREVSCUJZVEVfT1JERVIKKyNlbHNlCisjZGVmaW5lCUlFRUVfV09SRF9PUkRFUglCSUdfRU5ESUFOCisjZW5kaWYKKyNlbHNlIC8qIF9fYXJtX18gKi8KKyNkZWZpbmUJSUVFRV9XT1JEX09SREVSCUJZVEVfT1JERVIKKyNlbmRpZgorCisjaWYgSUVFRV9XT1JEX09SREVSID09IEJJR19FTkRJQU4KKwordHlwZWRlZiB1bmlvbgoreworICBkb3VibGUgdmFsdWU7CisgIHN0cnVjdAorICB7CisgICAgdV9pbnQzMl90IG1zdzsKKyAgICB1X2ludDMyX3QgbHN3OworICB9IHBhcnRzOworICBzdHJ1Y3QKKyAgeworICAgIHVfaW50NjRfdCB3OworICB9IHhwYXJ0czsKK30gaWVlZV9kb3VibGVfc2hhcGVfdHlwZTsKKworI2VuZGlmCisKKyNpZiBJRUVFX1dPUkRfT1JERVIgPT0gTElUVExFX0VORElBTgorCit0eXBlZGVmIHVuaW9uCit7CisgIGRvdWJsZSB2YWx1ZTsKKyAgc3RydWN0CisgIHsKKyAgICB1X2ludDMyX3QgbHN3OworICAgIHVfaW50MzJfdCBtc3c7CisgIH0gcGFydHM7CisgIHN0cnVjdAorICB7CisgICAgdV9pbnQ2NF90IHc7CisgIH0geHBhcnRzOworfSBpZWVlX2RvdWJsZV9zaGFwZV90eXBlOworCisjZW5kaWYKKworLyogR2V0IHR3byAzMiBiaXQgaW50cyBmcm9tIGEgZG91YmxlLiAgKi8KKworI2RlZmluZSBFWFRSQUNUX1dPUkRTKGl4MCxpeDEsZCkJCQkJXAorZG8gewkJCQkJCQkJXAorICBpZWVlX2RvdWJsZV9zaGFwZV90eXBlIGV3X3U7CQkJCQlcCisgIGV3X3UudmFsdWUgPSAoZCk7CQkJCQkJXAorICAoaXgwKSA9IGV3X3UucGFydHMubXN3OwkJCQkJXAorICAoaXgxKSA9IGV3X3UucGFydHMubHN3OwkJCQkJXAorfSB3aGlsZSAoMCkKKworLyogR2V0IGEgNjQtYml0IGludCBmcm9tIGEgZG91YmxlLiAqLworI2RlZmluZSBFWFRSQUNUX1dPUkQ2NChpeCxkKQkJCQkJXAorZG8gewkJCQkJCQkJXAorICBpZWVlX2RvdWJsZV9zaGFwZV90eXBlIGV3X3U7CQkJCQlcCisgIGV3X3UudmFsdWUgPSAoZCk7CQkJCQkJXAorICAoaXgpID0gZXdfdS54cGFydHMudzsJCQkJCQlcCit9IHdoaWxlICgwKQorCisvKiBHZXQgdGhlIG1vcmUgc2lnbmlmaWNhbnQgMzIgYml0IGludCBmcm9tIGEgZG91YmxlLiAgKi8KKworI2RlZmluZSBHRVRfSElHSF9XT1JEKGksZCkJCQkJCVwKK2RvIHsJCQkJCQkJCVwKKyAgaWVlZV9kb3VibGVfc2hhcGVfdHlwZSBnaF91OwkJCQkJXAorICBnaF91LnZhbHVlID0gKGQpOwkJCQkJCVwKKyAgKGkpID0gZ2hfdS5wYXJ0cy5tc3c7CQkJCQkJXAorfSB3aGlsZSAoMCkKKworLyogR2V0IHRoZSBsZXNzIHNpZ25pZmljYW50IDMyIGJpdCBpbnQgZnJvbSBhIGRvdWJsZS4gICovCisKKyNkZWZpbmUgR0VUX0xPV19XT1JEKGksZCkJCQkJCVwKK2RvIHsJCQkJCQkJCVwKKyAgaWVlZV9kb3VibGVfc2hhcGVfdHlwZSBnbF91OwkJCQkJXAorICBnbF91LnZhbHVlID0gKGQpOwkJCQkJCVwKKyAgKGkpID0gZ2xfdS5wYXJ0cy5sc3c7CQkJCQkJXAorfSB3aGlsZSAoMCkKKworLyogU2V0IGEgZG91YmxlIGZyb20gdHdvIDMyIGJpdCBpbnRzLiAgKi8KKworI2RlZmluZSBJTlNFUlRfV09SRFMoZCxpeDAsaXgxKQkJCQkJXAorZG8gewkJCQkJCQkJXAorICBpZWVlX2RvdWJsZV9zaGFwZV90eXBlIGl3X3U7CQkJCQlcCisgIGl3X3UucGFydHMubXN3ID0gKGl4MCk7CQkJCQlcCisgIGl3X3UucGFydHMubHN3ID0gKGl4MSk7CQkJCQlcCisgIChkKSA9IGl3X3UudmFsdWU7CQkJCQkJXAorfSB3aGlsZSAoMCkKKworLyogU2V0IGEgZG91YmxlIGZyb20gYSA2NC1iaXQgaW50LiAqLworI2RlZmluZSBJTlNFUlRfV09SRDY0KGQsaXgpCQkJCQlcCitkbyB7CQkJCQkJCQlcCisgIGllZWVfZG91YmxlX3NoYXBlX3R5cGUgaXdfdTsJCQkJCVwKKyAgaXdfdS54cGFydHMudyA9IChpeCk7CQkJCQkJXAorICAoZCkgPSBpd191LnZhbHVlOwkJCQkJCVwKK30gd2hpbGUgKDApCisKKy8qIFNldCB0aGUgbW9yZSBzaWduaWZpY2FudCAzMiBiaXRzIG9mIGEgZG91YmxlIGZyb20gYW4gaW50LiAgKi8KKworI2RlZmluZSBTRVRfSElHSF9XT1JEKGQsdikJCQkJCVwKK2RvIHsJCQkJCQkJCVwKKyAgaWVlZV9kb3VibGVfc2hhcGVfdHlwZSBzaF91OwkJCQkJXAorICBzaF91LnZhbHVlID0gKGQpOwkJCQkJCVwKKyAgc2hfdS5wYXJ0cy5tc3cgPSAodik7CQkJCQkJXAorICAoZCkgPSBzaF91LnZhbHVlOwkJCQkJCVwKK30gd2hpbGUgKDApCisKKy8qIFNldCB0aGUgbGVzcyBzaWduaWZpY2FudCAzMiBiaXRzIG9mIGEgZG91YmxlIGZyb20gYW4gaW50LiAgKi8KKworI2RlZmluZSBTRVRfTE9XX1dPUkQoZCx2KQkJCQkJXAorZG8gewkJCQkJCQkJXAorICBpZWVlX2RvdWJsZV9zaGFwZV90eXBlIHNsX3U7CQkJCQlcCisgIHNsX3UudmFsdWUgPSAoZCk7CQkJCQkJXAorICBzbF91LnBhcnRzLmxzdyA9ICh2KTsJCQkJCQlcCisgIChkKSA9IHNsX3UudmFsdWU7CQkJCQkJXAorfSB3aGlsZSAoMCkKKworLyoKKyAqIEEgdW5pb24gd2hpY2ggcGVybWl0cyB1cyB0byBjb252ZXJ0IGJldHdlZW4gYSBmbG9hdCBhbmQgYSAzMiBiaXQKKyAqIGludC4KKyAqLworCit0eXBlZGVmIHVuaW9uCit7CisgIGZsb2F0IHZhbHVlOworICAvKiBGSVhNRTogQXNzdW1lcyAzMiBiaXQgaW50LiAgKi8KKyAgdW5zaWduZWQgaW50IHdvcmQ7Cit9IGllZWVfZmxvYXRfc2hhcGVfdHlwZTsKKworLyogR2V0IGEgMzIgYml0IGludCBmcm9tIGEgZmxvYXQuICAqLworCisjZGVmaW5lIEdFVF9GTE9BVF9XT1JEKGksZCkJCQkJCVwKK2RvIHsJCQkJCQkJCVwKKyAgaWVlZV9mbG9hdF9zaGFwZV90eXBlIGdmX3U7CQkJCQlcCisgIGdmX3UudmFsdWUgPSAoZCk7CQkJCQkJXAorICAoaSkgPSBnZl91LndvcmQ7CQkJCQkJXAorfSB3aGlsZSAoMCkKKworLyogU2V0IGEgZmxvYXQgZnJvbSBhIDMyIGJpdCBpbnQuICAqLworCisjZGVmaW5lIFNFVF9GTE9BVF9XT1JEKGQsaSkJCQkJCVwKK2RvIHsJCQkJCQkJCVwKKyAgaWVlZV9mbG9hdF9zaGFwZV90eXBlIHNmX3U7CQkJCQlcCisgIHNmX3Uud29yZCA9IChpKTsJCQkJCQlcCisgIChkKSA9IHNmX3UudmFsdWU7CQkJCQkJXAorfSB3aGlsZSAoMCkKKworLyoKKyAqIEdldCBleHBzaWduIGFuZCBtYW50aXNzYSBhcyAxNiBiaXQgYW5kIDY0IGJpdCBpbnRzIGZyb20gYW4gODAgYml0IGxvbmcKKyAqIGRvdWJsZS4KKyAqLworCisjZGVmaW5lCUVYVFJBQ1RfTERCTDgwX1dPUkRTKGl4MCxpeDEsZCkJCQkJXAorZG8gewkJCQkJCQkJXAorICB1bmlvbiBJRUVFbDJiaXRzIGV3X3U7CQkJCQlcCisgIGV3X3UuZSA9IChkKTsJCQkJCQkJXAorICAoaXgwKSA9IGV3X3UueGJpdHMuZXhwc2lnbjsJCQkJCVwKKyAgKGl4MSkgPSBld191LnhiaXRzLm1hbjsJCQkJCVwKK30gd2hpbGUgKDApCisKKy8qCisgKiBHZXQgZXhwc2lnbiBhbmQgbWFudGlzc2EgYXMgb25lIDE2IGJpdCBhbmQgdHdvIDY0IGJpdCBpbnRzIGZyb20gYSAxMjggYml0CisgKiBsb25nIGRvdWJsZS4KKyAqLworCisjZGVmaW5lCUVYVFJBQ1RfTERCTDEyOF9XT1JEUyhpeDAsaXgxLGl4MixkKQkJCVwKK2RvIHsJCQkJCQkJCVwKKyAgdW5pb24gSUVFRWwyYml0cyBld191OwkJCQkJXAorICBld191LmUgPSAoZCk7CQkJCQkJCVwKKyAgKGl4MCkgPSBld191LnhiaXRzLmV4cHNpZ247CQkJCQlcCisgIChpeDEpID0gZXdfdS54Yml0cy5tYW5oOwkJCQkJXAorICAoaXgyKSA9IGV3X3UueGJpdHMubWFubDsJCQkJCVwKK30gd2hpbGUgKDApCisKKy8qIEdldCBleHBzaWduIGFzIGEgMTYgYml0IGludCBmcm9tIGEgbG9uZyBkb3VibGUuICAqLworCisjZGVmaW5lCUdFVF9MREJMX0VYUFNJR04oaSxkKQkJCQkJXAorZG8gewkJCQkJCQkJXAorICB1bmlvbiBJRUVFbDJiaXRzIGdlX3U7CQkJCQlcCisgIGdlX3UuZSA9IChkKTsJCQkJCQkJXAorICAoaSkgPSBnZV91LnhiaXRzLmV4cHNpZ247CQkJCQlcCit9IHdoaWxlICgwKQorCisvKgorICogU2V0IGFuIDgwIGJpdCBsb25nIGRvdWJsZSBmcm9tIGEgMTYgYml0IGludCBleHBzaWduIGFuZCBhIDY0IGJpdCBpbnQKKyAqIG1hbnRpc3NhLgorICovCisKKyNkZWZpbmUJSU5TRVJUX0xEQkw4MF9XT1JEUyhkLGl4MCxpeDEpCQkJCVwKK2RvIHsJCQkJCQkJCVwKKyAgdW5pb24gSUVFRWwyYml0cyBpd191OwkJCQkJXAorICBpd191LnhiaXRzLmV4cHNpZ24gPSAoaXgwKTsJCQkJCVwKKyAgaXdfdS54Yml0cy5tYW4gPSAoaXgxKTsJCQkJCVwKKyAgKGQpID0gaXdfdS5lOwkJCQkJCQlcCit9IHdoaWxlICgwKQorCisvKgorICogU2V0IGEgMTI4IGJpdCBsb25nIGRvdWJsZSBmcm9tIGEgMTYgYml0IGludCBleHBzaWduIGFuZCB0d28gNjQgYml0IGludHMKKyAqIGNvbXByaXNpbmcgdGhlIG1hbnRpc3NhLgorICovCisKKyNkZWZpbmUJSU5TRVJUX0xEQkwxMjhfV09SRFMoZCxpeDAsaXgxLGl4MikJCQlcCitkbyB7CQkJCQkJCQlcCisgIHVuaW9uIElFRUVsMmJpdHMgaXdfdTsJCQkJCVwKKyAgaXdfdS54Yml0cy5leHBzaWduID0gKGl4MCk7CQkJCQlcCisgIGl3X3UueGJpdHMubWFuaCA9IChpeDEpOwkJCQkJXAorICBpd191LnhiaXRzLm1hbmwgPSAoaXgyKTsJCQkJCVwKKyAgKGQpID0gaXdfdS5lOwkJCQkJCQlcCit9IHdoaWxlICgwKQorCisvKiBTZXQgZXhwc2lnbiBvZiBhIGxvbmcgZG91YmxlIGZyb20gYSAxNiBiaXQgaW50LiAgKi8KKworI2RlZmluZQlTRVRfTERCTF9FWFBTSUdOKGQsdikJCQkJCVwKK2RvIHsJCQkJCQkJCVwKKyAgdW5pb24gSUVFRWwyYml0cyBzZV91OwkJCQkJXAorICBzZV91LmUgPSAoZCk7CQkJCQkJCVwKKyAgc2VfdS54Yml0cy5leHBzaWduID0gKHYpOwkJCQkJXAorICAoZCkgPSBzZV91LmU7CQkJCQkJCVwKK30gd2hpbGUgKDApCisKKyNpZmRlZiBfX2kzODZfXworLyogTG9uZyBkb3VibGUgY29uc3RhbnRzIGFyZSBicm9rZW4gb24gaTM4Ni4gKi8KKyNkZWZpbmUJTEQ4MEMobSwgZXgsIHYpIHsJCQkJCQlcCisJLnhiaXRzLm1hbiA9IF9fQ09OQ0FUKG0sIFVMTCksCQkJCQlcCisJLnhiaXRzLmV4cHNpZ24gPSAoMHgzZmZmICsgKGV4KSkgfCAoKHYpIDwgMCA/IDB4ODAwMCA6IDApLAlcCit9CisjZWxzZQorLyogVGhlIGFib3ZlIHdvcmtzIG9uIG5vbi1pMzg2IHRvbywgYnV0IHdlIHVzZSB0aGlzIHRvIGNoZWNrIHYuICovCisjZGVmaW5lCUxEODBDKG0sIGV4LCB2KQl7IC5lID0gKHYpLCB9CisjZW5kaWYKKworI2lmZGVmIEZMVF9FVkFMX01FVEhPRAorLyoKKyAqIEF0dGVtcHQgdG8gZ2V0IHN0cmljdCBDOTkgc2VtYW50aWNzIGZvciBhc3NpZ25tZW50IHdpdGggbm9uLUM5OSBjb21waWxlcnMuCisgKi8KKyNpZiBGTFRfRVZBTF9NRVRIT0QgPT0gMCB8fCBfX0dOVUNfXyA9PSAwCisjZGVmaW5lCVNUUklDVF9BU1NJR04odHlwZSwgbHZhbCwgcnZhbCkJKChsdmFsKSA9IChydmFsKSkKKyNlbHNlCisjZGVmaW5lCVNUUklDVF9BU1NJR04odHlwZSwgbHZhbCwgcnZhbCkgZG8gewlcCisJdm9sYXRpbGUgdHlwZSBfX2x2YWw7CQkJXAorCQkJCQkJXAorCWlmIChzaXplb2YodHlwZSkgPj0gc2l6ZW9mKGxvbmcgZG91YmxlKSkJXAorCQkobHZhbCkgPSAocnZhbCk7CQlcCisJZWxzZSB7CQkJCQlcCisJCV9fbHZhbCA9IChydmFsKTsJCVwKKwkJKGx2YWwpID0gX19sdmFsOwkJXAorCX0JCQkJCVwKK30gd2hpbGUgKDApCisjZW5kaWYKKyNlbmRpZiAvKiBGTFRfRVZBTF9NRVRIT0QgKi8KKworLyogU3VwcG9ydCBzd2l0Y2hpbmcgdGhlIG1vZGUgdG8gRlBfUEUgaWYgbmVjZXNzYXJ5LiAqLworI2lmIGRlZmluZWQoX19pMzg2X18pICYmICFkZWZpbmVkKE5PX0ZQU0VUUFJFQykKKyNkZWZpbmUJRU5URVJJKCkJCQkJXAorCWxvbmcgZG91YmxlIF9fcmV0dmFsOwkJCVwKKwlmcF9wcmVjX3QgX19vcHJlYzsJCQlcCisJCQkJCQlcCisJaWYgKChfX29wcmVjID0gZnBnZXRwcmVjKCkpICE9IEZQX1BFKQlcCisJCWZwc2V0cHJlYyhGUF9QRSkKKyNkZWZpbmUJUkVUVVJOSSh4KSBkbyB7CQkJCVwKKwlfX3JldHZhbCA9ICh4KTsJCQkJXAorCWlmIChfX29wcmVjICE9IEZQX1BFKQkJCVwKKwkJZnBzZXRwcmVjKF9fb3ByZWMpOwkJXAorCVJFVFVSTkYoX19yZXR2YWwpOwkJCVwKK30gd2hpbGUgKDApCisjZWxzZQorI2RlZmluZQlFTlRFUkkoeCkKKyNkZWZpbmUJUkVUVVJOSSh4KQlSRVRVUk5GKHgpCisjZW5kaWYKKworLyogRGVmYXVsdCByZXR1cm4gc3RhdGVtZW50IGlmIGhhY2sqX3QoKSBpcyBub3QgdXNlZC4gKi8KKyNkZWZpbmUgICAgICBSRVRVUk5GKHYpICAgICAgcmV0dXJuICh2KQorCisvKgorICogMnN1bSBnaXZlcyB0aGUgc2FtZSByZXN1bHQgYXMgMnN1bUYgd2l0aG91dCByZXF1aXJpbmcgfGF8ID49IHxifCBvcgorICogYSA9PSAwLCBidXQgaXMgc2xvd2VyLgorICovCisjZGVmaW5lCV8yc3VtKGEsIGIpIGRvIHsJXAorCV9fdHlwZW9mKGEpIF9fcywgX193OwlcCisJCQkJXAorCV9fdyA9IChhKSArIChiKTsJXAorCV9fcyA9IF9fdyAtIChhKTsJXAorCShiKSA9ICgoYSkgLSAoX193IC0gX19zKSkgKyAoKGIpIC0gX19zKTsgXAorCShhKSA9IF9fdzsJCVwKK30gd2hpbGUgKDApCisKKy8qCisgKiAyc3VtRiBhbGdvcml0aG0uCisgKgorICogIk5vcm1hbGl6ZSIgdGhlIHRlcm1zIGluIHRoZSBpbmZpbml0ZS1wcmVjaXNpb24gZXhwcmVzc2lvbiBhICsgYiBmb3IKKyAqIHRoZSBzdW0gb2YgMiBmbG9hdGluZyBwb2ludCB2YWx1ZXMgc28gdGhhdCBiIGlzIGFzIHNtYWxsIGFzIHBvc3NpYmxlCisgKiByZWxhdGl2ZSB0byAnYScuICAoVGhlIHJlc3VsdGluZyAnYScgaXMgdGhlIHZhbHVlIG9mIHRoZSBleHByZXNzaW9uIGluCisgKiB0aGUgc2FtZSBwcmVjaXNpb24gYXMgJ2EnIGFuZCB0aGUgcmVzdWx0aW5nIGIgaXMgdGhlIHJvdW5kaW5nIGVycm9yLikKKyAqIHxhfCBtdXN0IGJlID49IHxifCBvciAwLCBiJ3MgdHlwZSBtdXN0IGJlIG5vIGxhcmdlciB0aGFuICdhJ3MgdHlwZSwgYW5kCisgKiBleHBvbmVudCBvdmVyZmxvdyBvciB1bmRlcmZsb3cgbXVzdCBub3Qgb2NjdXIuICBUaGlzIHVzZXMgYSBUaGVvcmVtIG9mCisgKiBEZWtrZXIgKDE5NzEpLiAgU2VlIEtudXRoICgxOTgxKSA0LjIuMiBUaGVvcmVtIEMuICBUaGUgbmFtZSAiVHdvU3VtIgorICogaXMgYXBwYXJlbnRseSBkdWUgdG8gU2tld2NodWsgKDE5OTcpLgorICoKKyAqIEZvciB0aGlzIHRvIGFsd2F5cyB3b3JrLCBhc3NpZ25tZW50IG9mIGEgKyBiIHRvICdhJyBtdXN0IG5vdCByZXRhaW4gYW55CisgKiBleHRyYSBwcmVjaXNpb24gaW4gYSArIGIuICBUaGlzIGlzIHJlcXVpcmVkIGJ5IEMgc3RhbmRhcmRzIGJ1dCBicm9rZW4KKyAqIGluIG1hbnkgY29tcGlsZXJzLiAgVGhlIGJyb2tlbm5lc3MgY2Fubm90IGJlIHdvcmtlZCBhcm91bmQgdXNpbmcKKyAqIFNUUklDVF9BU1NJR04oKSBsaWtlIHdlIGRvIGVsc2V3aGVyZSwgc2luY2UgdGhlIGVmZmljaWVuY3kgb2YgdGhpcworICogYWxnb3JpdGhtIHdvdWxkIGJlIGRlc3Ryb3llZCBieSBub24tbnVsbCBzdHJpY3QgYXNzaWdubWVudHMuICAoVGhlCisgKiBjb21waWxlcnMgYXJlIGNvcnJlY3QgdG8gYmUgYnJva2VuIC0tIHRoZSBlZmZpY2llbmN5IG9mIGFsbCBmbG9hdGluZworICogcG9pbnQgY29kZSBjYWxjdWxhdGlvbnMgd291bGQgYmUgZGVzdHJveWVkIHNpbWlsYXJseSBpZiB0aGV5IGZvcmNlZCB0aGUKKyAqIGNvbnZlcnNpb25zLikKKyAqCisgKiBGb3J0dW5hdGVseSwgYSBjYXNlIHRoYXQgd29ya3Mgd2VsbCBjYW4gdXN1YWxseSBiZSBhcnJhbmdlZCBieSBidWlsZGluZworICogYW55IGV4dHJhIHByZWNpc2lvbiBpbnRvIHRoZSB0eXBlIG9mICdhJyAtLSAnYScgc2hvdWxkIGhhdmUgdHlwZSBmbG9hdF90LAorICogZG91YmxlX3Qgb3IgbG9uZyBkb3VibGUuICBiJ3MgdHlwZSBzaG91bGQgYmUgbm8gbGFyZ2VyIHRoYW4gJ2EncyB0eXBlLgorICogQ2FsbGVycyBzaG91bGQgdXNlIHRoZXNlIHR5cGVzIHdpdGggc2NvcGVzIGFzIGxhcmdlIGFzIHBvc3NpYmxlLCB0bworICogcmVkdWNlIHRoZWlyIG93biBleHRyYS1wcmVjaXNpb24gYW5kIGVmZmljaWNpZW5jeSBwcm9ibGVtcy4gIEluCisgKiBwYXJ0aWN1bGFyLCB0aGV5IHNob3VsZG4ndCBjb252ZXJ0IGJhY2sgYW5kIGZvcnRoIGp1c3QgdG8gY2FsbCBoZXJlLgorICovCisjaWZkZWYgREVCVUcKKyNkZWZpbmUJXzJzdW1GKGEsIGIpIGRvIHsJCQkJXAorCV9fdHlwZW9mKGEpIF9fdzsJCQkJXAorCXZvbGF0aWxlIF9fdHlwZW9mKGEpIF9faWEsIF9faWIsIF9fciwgX192dzsJXAorCQkJCQkJCVwKKwlfX2lhID0gKGEpOwkJCQkJXAorCV9faWIgPSAoYik7CQkJCQlcCisJYXNzZXJ0KF9faWEgPT0gMCB8fCBmYWJzbChfX2lhKSA+PSBmYWJzbChfX2liKSk7CVwKKwkJCQkJCQlcCisJX193ID0gKGEpICsgKGIpOwkJCQlcCisJKGIpID0gKChhKSAtIF9fdykgKyAoYik7CQkJXAorCShhKSA9IF9fdzsJCQkJCVwKKwkJCQkJCQlcCisJLyogVGhlIG5leHQgMiBhc3NlcnRpb25zIGFyZSB3ZWFrIGlmIChhKSBpcyBhbHJlYWR5IGxvbmcgZG91YmxlLiAqLyBcCisJYXNzZXJ0KChsb25nIGRvdWJsZSlfX2lhICsgX19pYiA9PSAobG9uZyBkb3VibGUpKGEpICsgKGIpKTsJXAorCV9fdncgPSBfX2lhICsgX19pYjsJCQkJXAorCV9fciA9IF9faWEgLSBfX3Z3OwkJCQlcCisJX19yICs9IF9faWI7CQkJCQlcCisJYXNzZXJ0KF9fdncgPT0gKGEpICYmIF9fciA9PSAoYikpOwkJXAorfSB3aGlsZSAoMCkKKyNlbHNlIC8qICFERUJVRyAqLworI2RlZmluZQlfMnN1bUYoYSwgYikgZG8gewlcCisJX190eXBlb2YoYSkgX193OwlcCisJCQkJXAorCV9fdyA9IChhKSArIChiKTsJXAorCShiKSA9ICgoYSkgLSBfX3cpICsgKGIpOyBcCisJKGEpID0gX193OwkJXAorfSB3aGlsZSAoMCkKKyNlbmRpZiAvKiBERUJVRyAqLworCisvKgorICogU2V0IHggKz0gYywgd2hlcmUgeCBpcyByZXByZXNlbnRlZCBpbiBleHRyYSBwcmVjaXNpb24gYXMgYSArIGIuCisgKiB4IG11c3QgYmUgc3VmZmljaWVudGx5IG5vcm1hbGl6ZWQgYW5kIHN1ZmZpY2llbnRseSBsYXJnZXIgdGhhbiBjLAorICogYW5kIHRoZSByZXN1bHQgaXMgdGhlbiBzdWZmaWNpZW50bHkgbm9ybWFsaXplZC4KKyAqCisgKiBUaGUgZGV0YWlscyBvZiBvcmRlcmluZyBhcmUgdGhhdCB8YXwgbXVzdCBiZSA+PSB8Y3wgKHNvIHRoYXQgKGEsIGMpCisgKiBjYW4gYmUgbm9ybWFsaXplZCB3aXRob3V0IGV4dHJhIHdvcmsgdG8gc3dhcCAnYScgd2l0aCBjKS4gIFRoZSBkZXRhaWxzIG9mCisgKiB0aGUgbm9ybWFsaXphdGlvbiBhcmUgdGhhdCBiIG11c3QgYmUgc21hbGwgcmVsYXRpdmUgdG8gdGhlIG5vcm1hbGl6ZWQgJ2EnLgorICogTm9ybWFsaXphdGlvbiBvZiAoYSwgYykgbWFrZXMgdGhlIG5vcm1hbGl6ZWQgYyB0aW55IHJlbGF0aXZlIHRvIHRoZQorICogbm9ybWFsaXplZCBhLCBzbyBiIHJlbWFpbnMgc21hbGwgcmVsYXRpdmUgdG8gJ2EnIGluIHRoZSByZXN1bHQuICBIb3dldmVyLAorICogYiBuZWVkIG5vdCBldmVyIGJlIHRpbnkgcmVsYXRpdmUgdG8gJ2EnLiAgRm9yIGV4YW1wbGUsIGIgbWlnaHQgYmUgYWJvdXQKKyAqIDIqKjIwIHRpbWVzIHNtYWxsZXIgdGhhbiAnYScgdG8gZ2l2ZSBhYm91dCAyMCBleHRyYSBiaXRzIG9mIHByZWNpc2lvbi4KKyAqIFRoYXQgaXMgdXN1YWxseSBlbm91Z2gsIGFuZCBhZGRpbmcgYyAod2hpY2ggYnkgbm9ybWFsaXphdGlvbiBpcyBhYm91dAorICogMioqNTMgdGltZXMgc21hbGxlciB0aGFuIGEpIGNhbm5vdCBjaGFuZ2UgYiBzaWduaWZpY2FudGx5LiAgSG93ZXZlciwKKyAqIGNhbmNlbGxhdGlvbiBvZiAnYScgd2l0aCBjIGluIG5vcm1hbGl6YXRpb24gb2YgKGEsIGMpIG1heSByZWR1Y2UgJ2EnCisgKiBzaWduaWZpY2FudGx5IHJlbGF0aXZlIHRvIGIuICBUaGUgY2FsbGVyIG11c3QgZW5zdXJlIHRoYXQgc2lnbmlmaWNhbnQKKyAqIGNhbmNlbGxhdGlvbiBkb2Vzbid0IG9jY3VyLCBlaXRoZXIgYnkgaGF2aW5nIGMgb2YgdGhlIHNhbWUgc2lnbiBhcyAnYScsCisgKiBvciBieSBoYXZpbmcgfGN8IGEgZmV3IHBlcmNlbnQgc21hbGxlciB0aGFuIHxhfC4gIFByZS1ub3JtYWxpemF0aW9uIG9mCisgKiAoYSwgYikgbWF5IGhlbHAuCisgKgorICogVGhpcyBpcyBpcyBhIHZhcmlhbnQgb2YgYW4gYWxnb3JpdGhtIG9mIEthaGFuIChzZWUgS251dGggKDE5ODEpIDQuMi4yCisgKiBleGVyY2lzZSAxOSkuICBXZSBnYWluIGNvbnNpZGVyYWJsZSBlZmZpY2llbmN5IGJ5IHJlcXVpcmluZyB0aGUgdGVybXMgdG8KKyAqIGJlIHN1ZmZpY2llbnRseSBub3JtYWxpemVkIGFuZCBzdWZmaWNpZW50bHkgaW5jcmVhc2luZy4KKyAqLworI2RlZmluZQlfM3N1bUYoYSwgYiwgYykgZG8gewlcCisJX190eXBlb2YoYSkgX190bXA7CVwKKwkJCQlcCisJX190bXAgPSAoYyk7CQlcCisJXzJzdW1GKF9fdG1wLCAoYSkpOwlcCisJKGIpICs9IChhKTsJCVwKKwkoYSkgPSBfX3RtcDsJCVwKK30gd2hpbGUgKDApCisKKy8qCisgKiBDb21tb24gcm91dGluZSB0byBwcm9jZXNzIHRoZSBhcmd1bWVudHMgdG8gbmFuKCksIG5hbmYoKSwgYW5kIG5hbmwoKS4KKyAqLwordm9pZCBfc2Nhbl9uYW4odWludDMyX3QgKl9fd29yZHMsIGludCBfX251bV93b3JkcywgY29uc3QgY2hhciAqX19zKTsKKworI2lmZGVmIF9DT01QTEVYX0gKKworLyoKKyAqIEM5OSBzcGVjaWZpZXMgdGhhdCBjb21wbGV4IG51bWJlcnMgaGF2ZSB0aGUgc2FtZSByZXByZXNlbnRhdGlvbiBhcworICogYW4gYXJyYXkgb2YgdHdvIGVsZW1lbnRzLCB3aGVyZSB0aGUgZmlyc3QgZWxlbWVudCBpcyB0aGUgcmVhbCBwYXJ0CisgKiBhbmQgdGhlIHNlY29uZCBlbGVtZW50IGlzIHRoZSBpbWFnaW5hcnkgcGFydC4KKyAqLwordHlwZWRlZiB1bmlvbiB7CisJZmxvYXQgY29tcGxleCBmOworCWZsb2F0IGFbMl07Cit9IGZsb2F0X2NvbXBsZXg7Cit0eXBlZGVmIHVuaW9uIHsKKwlkb3VibGUgY29tcGxleCBmOworCWRvdWJsZSBhWzJdOworfSBkb3VibGVfY29tcGxleDsKK3R5cGVkZWYgdW5pb24geworCWxvbmcgZG91YmxlIGNvbXBsZXggZjsKKwlsb25nIGRvdWJsZSBhWzJdOworfSBsb25nX2RvdWJsZV9jb21wbGV4OworI2RlZmluZQlSRUFMUEFSVCh6KQkoKHopLmFbMF0pCisjZGVmaW5lCUlNQUdQQVJUKHopCSgoeikuYVsxXSkKKworLyoKKyAqIElubGluZSBmdW5jdGlvbnMgdGhhdCBjYW4gYmUgdXNlZCB0byBjb25zdHJ1Y3QgY29tcGxleCB2YWx1ZXMuCisgKgorICogVGhlIEM5OSBzdGFuZGFyZCBpbnRlbmRzIHgrSSp5IHRvIGJlIHVzZWQgZm9yIHRoaXMsIGJ1dCB4K0kqeSBpcworICogY3VycmVudGx5IHVudXNhYmxlIGluIGdlbmVyYWwgc2luY2UgZ2NjIGludHJvZHVjZXMgbWFueSBvdmVyZmxvdywKKyAqIHVuZGVyZmxvdywgc2lnbiBhbmQgZWZmaWNpZW5jeSBidWdzIGJ5IHJld3JpdGluZyBJKnkgYXMKKyAqICgwLjArSSkqKHkrMC4wKkkpIGFuZCBsYWJvcmlvdXNseSBjb21wdXRpbmcgdGhlIGZ1bGwgY29tcGxleCBwcm9kdWN0LgorICogSW4gcGFydGljdWxhciwgSSpJbmYgaXMgY29ycnVwdGVkIHRvIE5hTitJKkluZiwgYW5kIEkqLTAgaXMgY29ycnVwdGVkCisgKiB0byAtMC4wK0kqMC4wLgorICovCitzdGF0aWMgX19pbmxpbmUgZmxvYXQgY29tcGxleAorY3BhY2tmKGZsb2F0IHgsIGZsb2F0IHkpCit7CisJZmxvYXRfY29tcGxleCB6OworCisJUkVBTFBBUlQoeikgPSB4OworCUlNQUdQQVJUKHopID0geTsKKwlyZXR1cm4gKHouZik7Cit9CisKK3N0YXRpYyBfX2lubGluZSBkb3VibGUgY29tcGxleAorY3BhY2soZG91YmxlIHgsIGRvdWJsZSB5KQoreworCWRvdWJsZV9jb21wbGV4IHo7CisKKwlSRUFMUEFSVCh6KSA9IHg7CisJSU1BR1BBUlQoeikgPSB5OworCXJldHVybiAoei5mKTsKK30KKworc3RhdGljIF9faW5saW5lIGxvbmcgZG91YmxlIGNvbXBsZXgKK2NwYWNrbChsb25nIGRvdWJsZSB4LCBsb25nIGRvdWJsZSB5KQoreworCWxvbmdfZG91YmxlX2NvbXBsZXggejsKKworCVJFQUxQQVJUKHopID0geDsKKwlJTUFHUEFSVCh6KSA9IHk7CisJcmV0dXJuICh6LmYpOworfQorI2VuZGlmIC8qIF9DT01QTEVYX0ggKi8KKyAKKyNpZmRlZiBfX0dOVUNMSUtFX0FTTQorCisvKiBBc20gdmVyc2lvbnMgb2Ygc29tZSBmdW5jdGlvbnMuICovCisKKyNpZmRlZiBfX2FtZDY0X18KK3N0YXRpYyBfX2lubGluZSBpbnQKK2lyaW50KGRvdWJsZSB4KQoreworCWludCBuOworCisJYXNtKCJjdnRzZDJzaSAlMSwlMCIgOiAiPXIiIChuKSA6ICJ4IiAoeCkpOworCXJldHVybiAobik7Cit9CisjZGVmaW5lCUhBVkVfRUZGSUNJRU5UX0lSSU5UCisjZW5kaWYKKworI2lmZGVmIF9faTM4Nl9fCitzdGF0aWMgX19pbmxpbmUgaW50CitpcmludChkb3VibGUgeCkKK3sKKwlpbnQgbjsKKworCWFzbSgiZmlzdGwgJTAiIDogIj1tIiAobikgOiAidCIgKHgpKTsKKwlyZXR1cm4gKG4pOworfQorI2RlZmluZQlIQVZFX0VGRklDSUVOVF9JUklOVAorI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9fYW1kNjRfXykgfHwgZGVmaW5lZChfX2kzODZfXykKK3N0YXRpYyBfX2lubGluZSBpbnQKK2lyaW50bChsb25nIGRvdWJsZSB4KQoreworCWludCBuOworCisJYXNtKCJmaXN0bCAlMCIgOiAiPW0iIChuKSA6ICJ0IiAoeCkpOworCXJldHVybiAobik7Cit9CisjZGVmaW5lCUhBVkVfRUZGSUNJRU5UX0lSSU5UTAorI2VuZGlmCisKKyNlbmRpZiAvKiBfX0dOVUNMSUtFX0FTTSAqLworCisjaWZkZWYgREVCVUcKKyNpZiBkZWZpbmVkKF9fYW1kNjRfXykgfHwgZGVmaW5lZChfX2kzODZfXykKKyNkZWZpbmUJYnJlYWtwb2ludCgpCWFzbSgiaW50ICQzIikKKyNlbHNlCisjaW5jbHVkZSA8c2lnbmFsLmg+CisKKyNkZWZpbmUJYnJlYWtwb2ludCgpCXJhaXNlKFNJR1RSQVApCisjZW5kaWYKKyNlbmRpZgorCisvKiBXcml0ZSBhIHBhcmkgc2NyaXB0IHRvIHRlc3QgdGhpbmdzIGV4dGVybmFsbHkuICovCisjaWZkZWYgRE9QUklOVAorI2luY2x1ZGUgPHN0ZGlvLmg+CisKKyNpZm5kZWYgRE9QUklOVF9TV0laWkxFCisjZGVmaW5lCURPUFJJTlRfU1dJWlpMRQkJMAorI2VuZGlmCisKKyNpZmRlZiBET1BSSU5UX0xEODAKKworI2RlZmluZQlET1BSSU5UX1NUQVJUKHhwKSBkbyB7CQkJCQkJXAorCXVpbnQ2NF90IF9fbHg7CQkJCQkJCVwKKwl1aW50MTZfdCBfX2h4OwkJCQkJCQlcCisJCQkJCQkJCQlcCisJLyogSGFjayB0byBnaXZlIG1vcmUtcHJvYmxlbWF0aWMgYXJncy4gKi8JCQlcCisJRVhUUkFDVF9MREJMODBfV09SRFMoX19oeCwgX19seCwgKnhwKTsJCQkJXAorCV9fbHggXj0gRE9QUklOVF9TV0laWkxFOwkJCQkJXAorCUlOU0VSVF9MREJMODBfV09SRFMoKnhwLCBfX2h4LCBfX2x4KTsJCQkJXAorCXByaW50ZigieCA9ICUuMjFMZzsgIiwgKGxvbmcgZG91YmxlKSp4cCk7CQkJXAorfSB3aGlsZSAoMCkKKyNkZWZpbmUJRE9QUklOVF9FTkQxKHYpCQkJCQkJCVwKKwlwcmludGYoInkgPSAlLjIxTGc7IHogPSAwOyBzaG93KHgsIHksIHopO1xuIiwgKGxvbmcgZG91YmxlKSh2KSkKKyNkZWZpbmUJRE9QUklOVF9FTkQyKGhpLCBsbykJCQkJCQlcCisJcHJpbnRmKCJ5ID0gJS4yMUxnOyB6ID0gJS4yMUxnOyBzaG93KHgsIHksIHopO1xuIiwJCVwKKwkgICAgKGxvbmcgZG91YmxlKShoaSksIChsb25nIGRvdWJsZSkobG8pKQorCisjZWxpZiBkZWZpbmVkKERPUFJJTlRfRDY0KQorCisjZGVmaW5lCURPUFJJTlRfU1RBUlQoeHApIGRvIHsJCQkJCQlcCisJdWludDMyX3QgX19oeCwgX19seDsJCQkJCQlcCisJCQkJCQkJCQlcCisJRVhUUkFDVF9XT1JEUyhfX2h4LCBfX2x4LCAqeHApOwkJCQkJXAorCV9fbHggXj0gRE9QUklOVF9TV0laWkxFOwkJCQkJXAorCUlOU0VSVF9XT1JEUygqeHAsIF9faHgsIF9fbHgpOwkJCQkJXAorCXByaW50ZigieCA9ICUuMjFMZzsgIiwgKGxvbmcgZG91YmxlKSp4cCk7CQkJXAorfSB3aGlsZSAoMCkKKyNkZWZpbmUJRE9QUklOVF9FTkQxKHYpCQkJCQkJCVwKKwlwcmludGYoInkgPSAlLjIxTGc7IHogPSAwOyBzaG93KHgsIHksIHopO1xuIiwgKGxvbmcgZG91YmxlKSh2KSkKKyNkZWZpbmUJRE9QUklOVF9FTkQyKGhpLCBsbykJCQkJCQlcCisJcHJpbnRmKCJ5ID0gJS4yMUxnOyB6ID0gJS4yMUxnOyBzaG93KHgsIHksIHopO1xuIiwJCVwKKwkgICAgKGxvbmcgZG91YmxlKShoaSksIChsb25nIGRvdWJsZSkobG8pKQorCisjZWxpZiBkZWZpbmVkKERPUFJJTlRfRjMyKQorCisjZGVmaW5lCURPUFJJTlRfU1RBUlQoeHApIGRvIHsJCQkJCQlcCisJdWludDMyX3QgX19oeDsJCQkJCQkJXAorCQkJCQkJCQkJXAorCUdFVF9GTE9BVF9XT1JEKF9faHgsICp4cCk7CQkJCQlcCisJX19oeCBePSBET1BSSU5UX1NXSVpaTEU7CQkJCQlcCisJU0VUX0ZMT0FUX1dPUkQoKnhwLCBfX2h4KTsJCQkJCVwKKwlwcmludGYoInggPSAlLjIxTGc7ICIsIChsb25nIGRvdWJsZSkqeHApOwkJCVwKK30gd2hpbGUgKDApCisjZGVmaW5lCURPUFJJTlRfRU5EMSh2KQkJCQkJCQlcCisJcHJpbnRmKCJ5ID0gJS4yMUxnOyB6ID0gMDsgc2hvdyh4LCB5LCB6KTtcbiIsIChsb25nIGRvdWJsZSkodikpCisjZGVmaW5lCURPUFJJTlRfRU5EMihoaSwgbG8pCQkJCQkJXAorCXByaW50ZigieSA9ICUuMjFMZzsgeiA9ICUuMjFMZzsgc2hvdyh4LCB5LCB6KTtcbiIsCQlcCisJICAgIChsb25nIGRvdWJsZSkoaGkpLCAobG9uZyBkb3VibGUpKGxvKSkKKworI2Vsc2UgLyogIURPUFJJTlRfTEQ4MCAmJiAhRE9QUklOVF9ENjQgKExEMTI4IG9ubHkpICovCisKKyNpZm5kZWYgRE9QUklOVF9TV0laWkxFX0hJR0gKKyNkZWZpbmUJRE9QUklOVF9TV0laWkxFX0hJR0gJMAorI2VuZGlmCisKKyNkZWZpbmUJRE9QUklOVF9TVEFSVCh4cCkgZG8gewkJCQkJCVwKKwl1aW50NjRfdCBfX2x4LCBfX2xseDsJCQkJCQlcCisJdWludDE2X3QgX19oeDsJCQkJCQkJXAorCQkJCQkJCQkJXAorCUVYVFJBQ1RfTERCTDEyOF9XT1JEUyhfX2h4LCBfX2x4LCBfX2xseCwgKnhwKTsJCQlcCisJX19sbHggXj0gRE9QUklOVF9TV0laWkxFOwkJCQkJXAorCV9fbHggXj0gRE9QUklOVF9TV0laWkxFX0hJR0g7CQkJCQlcCisJSU5TRVJUX0xEQkwxMjhfV09SRFMoKnhwLCBfX2h4LCBfX2x4LCBfX2xseCk7CQkJXAorCXByaW50ZigieCA9ICUuMzZMZzsgIiwgKGxvbmcgZG91YmxlKSp4cCk7CQkJCQlcCit9IHdoaWxlICgwKQorI2RlZmluZQlET1BSSU5UX0VORDEodikJCQkJCQkJXAorCXByaW50ZigieSA9ICUuMzZMZzsgeiA9IDA7IHNob3coeCwgeSwgeik7XG4iLCAobG9uZyBkb3VibGUpKHYpKQorI2RlZmluZQlET1BSSU5UX0VORDIoaGksIGxvKQkJCQkJCVwKKwlwcmludGYoInkgPSAlLjM2TGc7IHogPSAlLjM2TGc7IHNob3coeCwgeSwgeik7XG4iLAkJXAorCSAgICAobG9uZyBkb3VibGUpKGhpKSwgKGxvbmcgZG91YmxlKShsbykpCisKKyNlbmRpZiAvKiBET1BSSU5UX0xEODAgKi8KKworI2Vsc2UgLyogIURPUFJJTlQgKi8KKyNkZWZpbmUJRE9QUklOVF9TVEFSVCh4cCkKKyNkZWZpbmUJRE9QUklOVF9FTkQxKHYpCisjZGVmaW5lCURPUFJJTlRfRU5EMihoaSwgbG8pCisjZW5kaWYgLyogRE9QUklOVCAqLworCisjZGVmaW5lCVJFVFVSTlAoeCkgZG8gewkJCVwKKwlET1BSSU5UX0VORDEoeCk7CQlcCisJUkVUVVJORih4KTsJCQlcCit9IHdoaWxlICgwKQorI2RlZmluZQlSRVRVUk5QSSh4KSBkbyB7CQlcCisJRE9QUklOVF9FTkQxKHgpOwkJXAorCVJFVFVSTkkoeCk7CQkJXAorfSB3aGlsZSAoMCkKKyNkZWZpbmUJUkVUVVJOMlAoeCwgeSkgZG8gewkJXAorCURPUFJJTlRfRU5EMigoeCksICh5KSk7CQlcCisJUkVUVVJORigoeCkgKyAoeSkpOwkJXAorfSB3aGlsZSAoMCkKKyNkZWZpbmUJUkVUVVJOMlBJKHgsIHkpIGRvIHsJCVwKKwlET1BSSU5UX0VORDIoKHgpLCAoeSkpOwkJXAorCVJFVFVSTkkoKHgpICsgKHkpKTsJCVwKK30gd2hpbGUgKDApCisjaWZkZWYgU1RSVUNUX1JFVFVSTgorI2RlZmluZQlSRVRVUk5TUChycCkgZG8gewkJXAorCWlmICghKHJwKS0+bG9fc2V0KQkJXAorCQlSRVRVUk5QKChycCktPmhpKTsJXAorCVJFVFVSTjJQKChycCktPmhpLCAocnApLT5sbyk7CVwKK30gd2hpbGUgKDApCisjZGVmaW5lCVJFVFVSTlNQSShycCkgZG8gewkJXAorCWlmICghKHJwKS0+bG9fc2V0KQkJXAorCQlSRVRVUk5QSSgocnApLT5oaSk7CVwKKwlSRVRVUk4yUEkoKHJwKS0+aGksIChycCktPmxvKTsJXAorfSB3aGlsZSAoMCkKKyNlbmRpZgorI2RlZmluZQlTVU0yUCh4LCB5KSAoewkJCVwKKwljb25zdCBfX3R5cGVvZiAoeCkgX194ID0gKHgpOwlcCisJY29uc3QgX190eXBlb2YgKHkpIF9feSA9ICh5KTsJXAorCQkJCQlcCisJRE9QUklOVF9FTkQyKF9feCwgX195KTsJCVwKKwlfX3ggKyBfX3k7CQkJXAorfSkKKworLyoKKyAqIGllZWUgc3R5bGUgZWxlbWVudGFyeSBmdW5jdGlvbnMKKyAqCisgKiBXZSByZW5hbWUgZnVuY3Rpb25zIGhlcmUgdG8gaW1wcm92ZSBvdGhlciBzb3VyY2VzJyBkaWZmYWJpbGl0eQorICogYWdhaW5zdCBmZGxpYm0uCisgKi8KKyNkZWZpbmUJX19pZWVlNzU0X3NxcnQJc3FydAorI2RlZmluZQlfX2llZWU3NTRfYWNvcwlhY29zCisjZGVmaW5lCV9faWVlZTc1NF9hY29zaAlhY29zaAorI2RlZmluZQlfX2llZWU3NTRfbG9nCWxvZworI2RlZmluZQlfX2llZWU3NTRfbG9nMglsb2cyCisjZGVmaW5lCV9faWVlZTc1NF9hdGFuaAlhdGFuaAorI2RlZmluZQlfX2llZWU3NTRfYXNpbglhc2luCisjZGVmaW5lCV9faWVlZTc1NF9hdGFuMglhdGFuMgorI2RlZmluZQlfX2llZWU3NTRfZXhwCWV4cAorI2RlZmluZQlfX2llZWU3NTRfY29zaAljb3NoCisjZGVmaW5lCV9faWVlZTc1NF9mbW9kCWZtb2QKKyNkZWZpbmUJX19pZWVlNzU0X3Bvdwlwb3cKKyNkZWZpbmUJX19pZWVlNzU0X2xnYW1tYSBsZ2FtbWEKKyNkZWZpbmUJX19pZWVlNzU0X2dhbW1hCWdhbW1hCisjZGVmaW5lCV9faWVlZTc1NF9sZ2FtbWFfciBsZ2FtbWFfcgorI2RlZmluZQlfX2llZWU3NTRfZ2FtbWFfciBnYW1tYV9yCisjZGVmaW5lCV9faWVlZTc1NF9sb2cxMAlsb2cxMAorI2RlZmluZQlfX2llZWU3NTRfc2luaAlzaW5oCisjZGVmaW5lCV9faWVlZTc1NF9oeXBvdAloeXBvdAorI2RlZmluZQlfX2llZWU3NTRfajAJajAKKyNkZWZpbmUJX19pZWVlNzU0X2oxCWoxCisjZGVmaW5lCV9faWVlZTc1NF95MAl5MAorI2RlZmluZQlfX2llZWU3NTRfeTEJeTEKKyNkZWZpbmUJX19pZWVlNzU0X2puCWpuCisjZGVmaW5lCV9faWVlZTc1NF95bgl5bgorI2RlZmluZQlfX2llZWU3NTRfcmVtYWluZGVyIHJlbWFpbmRlcgorI2RlZmluZQlfX2llZWU3NTRfc2NhbGIJc2NhbGIKKyNkZWZpbmUJX19pZWVlNzU0X3NxcnRmCXNxcnRmCisjZGVmaW5lCV9faWVlZTc1NF9hY29zZglhY29zZgorI2RlZmluZQlfX2llZWU3NTRfYWNvc2hmIGFjb3NoZgorI2RlZmluZQlfX2llZWU3NTRfbG9nZglsb2dmCisjZGVmaW5lCV9faWVlZTc1NF9hdGFuaGYgYXRhbmhmCisjZGVmaW5lCV9faWVlZTc1NF9hc2luZglhc2luZgorI2RlZmluZQlfX2llZWU3NTRfYXRhbjJmIGF0YW4yZgorI2RlZmluZQlfX2llZWU3NTRfZXhwZglleHBmCisjZGVmaW5lCV9faWVlZTc1NF9jb3NoZgljb3NoZgorI2RlZmluZQlfX2llZWU3NTRfZm1vZGYJZm1vZGYKKyNkZWZpbmUJX19pZWVlNzU0X3Bvd2YJcG93ZgorI2RlZmluZQlfX2llZWU3NTRfbGdhbW1hZiBsZ2FtbWFmCisjZGVmaW5lCV9faWVlZTc1NF9nYW1tYWYgZ2FtbWFmCisjZGVmaW5lCV9faWVlZTc1NF9sZ2FtbWFmX3IgbGdhbW1hZl9yCisjZGVmaW5lCV9faWVlZTc1NF9nYW1tYWZfciBnYW1tYWZfcgorI2RlZmluZQlfX2llZWU3NTRfbG9nMTBmIGxvZzEwZgorI2RlZmluZQlfX2llZWU3NTRfbG9nMmYgbG9nMmYKKyNkZWZpbmUJX19pZWVlNzU0X3NpbmhmCXNpbmhmCisjZGVmaW5lCV9faWVlZTc1NF9oeXBvdGYgaHlwb3RmCisjZGVmaW5lCV9faWVlZTc1NF9qMGYJajBmCisjZGVmaW5lCV9faWVlZTc1NF9qMWYJajFmCisjZGVmaW5lCV9faWVlZTc1NF95MGYJeTBmCisjZGVmaW5lCV9faWVlZTc1NF95MWYJeTFmCisjZGVmaW5lCV9faWVlZTc1NF9qbmYJam5mCisjZGVmaW5lCV9faWVlZTc1NF95bmYJeW5mCisjZGVmaW5lCV9faWVlZTc1NF9yZW1haW5kZXJmIHJlbWFpbmRlcmYKKyNkZWZpbmUJX19pZWVlNzU0X3NjYWxiZiBzY2FsYmYKKworLyogZmRsaWJtIGtlcm5lbCBmdW5jdGlvbiAqLworaW50CV9fa2VybmVsX3JlbV9waW8yKGRvdWJsZSosZG91YmxlKixpbnQsaW50LGludCk7CisKKy8qIGRvdWJsZSBwcmVjaXNpb24ga2VybmVsIGZ1bmN0aW9ucyAqLworI2lmbmRlZiBJTkxJTkVfUkVNX1BJTzIKK2ludAlfX2llZWU3NTRfcmVtX3BpbzIoZG91YmxlLGRvdWJsZSopOworI2VuZGlmCitkb3VibGUJX19rZXJuZWxfc2luKGRvdWJsZSxkb3VibGUsaW50KTsKK2RvdWJsZQlfX2tlcm5lbF9jb3MoZG91YmxlLGRvdWJsZSk7Citkb3VibGUJX19rZXJuZWxfdGFuKGRvdWJsZSxkb3VibGUsaW50KTsKK2RvdWJsZQlfX2xkZXhwX2V4cChkb3VibGUsaW50KTsKKyNpZmRlZiBfQ09NUExFWF9ICitkb3VibGUgY29tcGxleCBfX2xkZXhwX2NleHAoZG91YmxlIGNvbXBsZXgsaW50KTsKKyNlbmRpZgorCisvKiBmbG9hdCBwcmVjaXNpb24ga2VybmVsIGZ1bmN0aW9ucyAqLworI2lmbmRlZiBJTkxJTkVfUkVNX1BJTzJGCitpbnQJX19pZWVlNzU0X3JlbV9waW8yZihmbG9hdCxkb3VibGUqKTsKKyNlbmRpZgorI2lmbmRlZiBJTkxJTkVfS0VSTkVMX1NJTkRGCitmbG9hdAlfX2tlcm5lbF9zaW5kZihkb3VibGUpOworI2VuZGlmCisjaWZuZGVmIElOTElORV9LRVJORUxfQ09TREYKK2Zsb2F0CV9fa2VybmVsX2Nvc2RmKGRvdWJsZSk7CisjZW5kaWYKKyNpZm5kZWYgSU5MSU5FX0tFUk5FTF9UQU5ERgorZmxvYXQJX19rZXJuZWxfdGFuZGYoZG91YmxlLGludCk7CisjZW5kaWYKK2Zsb2F0CV9fbGRleHBfZXhwZihmbG9hdCxpbnQpOworI2lmZGVmIF9DT01QTEVYX0gKK2Zsb2F0IGNvbXBsZXggX19sZGV4cF9jZXhwZihmbG9hdCBjb21wbGV4LGludCk7CisjZW5kaWYKKworLyogbG9uZyBkb3VibGUgcHJlY2lzaW9uIGtlcm5lbCBmdW5jdGlvbnMgKi8KK2xvbmcgZG91YmxlIF9fa2VybmVsX3NpbmwobG9uZyBkb3VibGUsIGxvbmcgZG91YmxlLCBpbnQpOworbG9uZyBkb3VibGUgX19rZXJuZWxfY29zbChsb25nIGRvdWJsZSwgbG9uZyBkb3VibGUpOworbG9uZyBkb3VibGUgX19rZXJuZWxfdGFubChsb25nIGRvdWJsZSwgbG9uZyBkb3VibGUsIGludCk7CisKKyNlbmRpZiAvKiAhX01BVEhfUFJJVkFURV9IXyAqLwpkaWZmIC0tZ2l0IGEvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2FzaW5oLmMgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfYXNpbmguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYmIzZDQ2Ci0tLSAvZGV2L251bGwKKysrIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2FzaW5oLmMKQEAgLTAsMCArMSw2MiBAQAorLyogQCgjKXNfYXNpbmguYyA1LjEgOTMvMDkvMjQgKi8KKy8qCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBDb3B5cmlnaHQgKEMpIDE5OTMgYnkgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIERldmVsb3BlZCBhdCBTdW5Qcm8sIGEgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBidXNpbmVzcy4KKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKKyAqIHNvZnR3YXJlIGlzIGZyZWVseSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoaXMgbm90aWNlCisgKiBpcyBwcmVzZXJ2ZWQuCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorX19GQlNESUQoIiRGcmVlQlNEJCIpOworCisvKiBhc2luaCh4KQorICogTWV0aG9kIDoKKyAqCUJhc2VkIG9uCisgKgkJYXNpbmgoeCkgPSBzaWduKHgpICogbG9nIFsgfHh8ICsgc3FydCh4KngrMSkgXQorICoJd2UgaGF2ZQorICoJYXNpbmgoeCkgOj0geCAgaWYgIDEreCp4PTEsCisgKgkJIDo9IHNpZ24oeCkqKGxvZyh4KStsbjIpKSBmb3IgbGFyZ2UgfHh8LCBlbHNlCisgKgkJIDo9IHNpZ24oeCkqbG9nKDJ8eHwrMS8ofHh8K3NxcnQoeCp4KzEpKSkgaWZ8eHw+MiwgZWxzZQorICoJCSA6PSBzaWduKHgpKmxvZzFwKHx4fCArIHheMi8oMSArIHNxcnQoMSt4XjIpKSkKKyAqLworCisjaW5jbHVkZSA8ZmxvYXQuaD4KKworI2luY2x1ZGUgIm1hdGguaCIKKyNpbmNsdWRlICJtYXRoX3ByaXZhdGUuaCIKKworc3RhdGljIGNvbnN0IGRvdWJsZQorb25lID0gIDEuMDAwMDAwMDAwMDAwMDAwMDAwMDBlKzAwLCAvKiAweDNGRjAwMDAwLCAweDAwMDAwMDAwICovCitsbjIgPSAgNi45MzE0NzE4MDU1OTk0NTI4NjIyN2UtMDEsIC8qIDB4M0ZFNjJFNDIsIDB4RkVGQTM5RUYgKi8KK2h1Z2U9ICAxLjAwMDAwMDAwMDAwMDAwMDAwMDAwZSszMDA7CisKK2RvdWJsZQorYXNpbmgoZG91YmxlIHgpCit7CisJZG91YmxlIHQsdzsKKwlpbnQzMl90IGh4LGl4OworCUdFVF9ISUdIX1dPUkQoaHgseCk7CisJaXggPSBoeCYweDdmZmZmZmZmOworCWlmKGl4Pj0weDdmZjAwMDAwKSByZXR1cm4geCt4OwkvKiB4IGlzIGluZiBvciBOYU4gKi8KKwlpZihpeDwgMHgzZTMwMDAwMCkgewkvKiB8eHw8MioqLTI4ICovCisJICAgIGlmKGh1Z2UreD5vbmUpIHJldHVybiB4OwkvKiByZXR1cm4geCBpbmV4YWN0IGV4Y2VwdCAwICovCisJfQorCWlmKGl4PjB4NDFiMDAwMDApIHsJLyogfHh8ID4gMioqMjggKi8KKwkgICAgdyA9IF9faWVlZTc1NF9sb2coZmFicyh4KSkrbG4yOworCX0gZWxzZSBpZiAoaXg+MHg0MDAwMDAwMCkgewkvKiAyKioyOCA+IHx4fCA+IDIuMCAqLworCSAgICB0ID0gZmFicyh4KTsKKwkgICAgdyA9IF9faWVlZTc1NF9sb2coMi4wKnQrb25lLyhfX2llZWU3NTRfc3FydCh4Kngrb25lKSt0KSk7CisJfSBlbHNlIHsJCS8qIDIuMCA+IHx4fCA+IDIqKi0yOCAqLworCSAgICB0ID0geCp4OworCSAgICB3ID1sb2cxcChmYWJzKHgpK3QvKG9uZStfX2llZWU3NTRfc3FydChvbmUrdCkpKTsKKwl9CisJaWYoaHg+MCkgcmV0dXJuIHc7IGVsc2UgcmV0dXJuIC13OworfQorCisjaWYgTERCTF9NQU5UX0RJRyA9PSA1MworX193ZWFrX3JlZmVyZW5jZShhc2luaCwgYXNpbmhsKTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2FzaW5oZi5jIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2FzaW5oZi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxNjIwZGQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfYXNpbmhmLmMKQEAgLTAsMCArMSw0OCBAQAorLyogc19hc2luaGYuYyAtLSBmbG9hdCB2ZXJzaW9uIG9mIHNfYXNpbmguYy4KKyAqIENvbnZlcnNpb24gdG8gZmxvYXQgYnkgSWFuIExhbmNlIFRheWxvciwgQ3lnbnVzIFN1cHBvcnQsIGlhbkBjeWdudXMuY29tLgorICovCisKKy8qCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBDb3B5cmlnaHQgKEMpIDE5OTMgYnkgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIERldmVsb3BlZCBhdCBTdW5Qcm8sIGEgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBidXNpbmVzcy4KKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKKyAqIHNvZnR3YXJlIGlzIGZyZWVseSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoaXMgbm90aWNlCisgKiBpcyBwcmVzZXJ2ZWQuCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorX19GQlNESUQoIiRGcmVlQlNEJCIpOworCisjaW5jbHVkZSAibWF0aC5oIgorI2luY2x1ZGUgIm1hdGhfcHJpdmF0ZS5oIgorCitzdGF0aWMgY29uc3QgZmxvYXQKK29uZSA9ICAxLjAwMDAwMDAwMDBlKzAwLCAvKiAweDNGODAwMDAwICovCitsbjIgPSAgNi45MzE0NzE4MjQ2ZS0wMSwgLyogMHgzZjMxNzIxOCAqLworaHVnZT0gIDEuMDAwMDAwMDAwMGUrMzA7CisKK2Zsb2F0Cithc2luaGYoZmxvYXQgeCkKK3sKKwlmbG9hdCB0LHc7CisJaW50MzJfdCBoeCxpeDsKKwlHRVRfRkxPQVRfV09SRChoeCx4KTsKKwlpeCA9IGh4JjB4N2ZmZmZmZmY7CisJaWYoaXg+PTB4N2Y4MDAwMDApIHJldHVybiB4K3g7CS8qIHggaXMgaW5mIG9yIE5hTiAqLworCWlmKGl4PCAweDMxODAwMDAwKSB7CS8qIHx4fDwyKiotMjggKi8KKwkgICAgaWYoaHVnZSt4Pm9uZSkgcmV0dXJuIHg7CS8qIHJldHVybiB4IGluZXhhY3QgZXhjZXB0IDAgKi8KKwl9CisJaWYoaXg+MHg0ZDgwMDAwMCkgewkvKiB8eHwgPiAyKioyOCAqLworCSAgICB3ID0gX19pZWVlNzU0X2xvZ2YoZmFic2YoeCkpK2xuMjsKKwl9IGVsc2UgaWYgKGl4PjB4NDAwMDAwMDApIHsJLyogMioqMjggPiB8eHwgPiAyLjAgKi8KKwkgICAgdCA9IGZhYnNmKHgpOworCSAgICB3ID0gX19pZWVlNzU0X2xvZ2YoKGZsb2F0KTIuMCp0K29uZS8oX19pZWVlNzU0X3NxcnRmKHgqeCtvbmUpK3QpKTsKKwl9IGVsc2UgewkJLyogMi4wID4gfHh8ID4gMioqLTI4ICovCisJICAgIHQgPSB4Kng7CisJICAgIHcgPWxvZzFwZihmYWJzZih4KSt0LyhvbmUrX19pZWVlNzU0X3NxcnRmKG9uZSt0KSkpOworCX0KKwlpZihoeD4wKSByZXR1cm4gdzsgZWxzZSByZXR1cm4gLXc7Cit9CmRpZmYgLS1naXQgYS9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfYXRhbi5jIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2F0YW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NjZmNWRjCi0tLSAvZGV2L251bGwKKysrIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2F0YW4uYwpAQCAtMCwwICsxLDEyNCBAQAorLyogQCgjKXNfYXRhbi5jIDUuMSA5My8wOS8yNCAqLworLyoKKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIENvcHlyaWdodCAoQykgMTk5MyBieSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogRGV2ZWxvcGVkIGF0IFN1blBybywgYSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGJ1c2luZXNzLgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcworICogc29mdHdhcmUgaXMgZnJlZWx5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhpcyBub3RpY2UKKyAqIGlzIHByZXNlcnZlZC4KKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CitfX0ZCU0RJRCgiJEZyZWVCU0QkIik7CisKKy8qIGF0YW4oeCkKKyAqIE1ldGhvZAorICogICAxLiBSZWR1Y2UgeCB0byBwb3NpdGl2ZSBieSBhdGFuKHgpID0gLWF0YW4oLXgpLgorICogICAyLiBBY2NvcmRpbmcgdG8gdGhlIGludGVnZXIgaz00dCswLjI1IGNob3BwZWQsIHQ9eCwgdGhlIGFyZ3VtZW50CisgKiAgICAgIGlzIGZ1cnRoZXIgcmVkdWNlZCB0byBvbmUgb2YgdGhlIGZvbGxvd2luZyBpbnRlcnZhbHMgYW5kIHRoZQorICogICAgICBhcmN0YW5nZW50IG9mIHQgaXMgZXZhbHVhdGVkIGJ5IHRoZSBjb3JyZXNwb25kaW5nIGZvcm11bGE6CisgKgorICogICAgICBbMCw3LzE2XSAgICAgIGF0YW4oeCkgPSB0LXReMyooYTErdF4yKihhMisuLi4oYTEwK3ReMiphMTEpLi4uKQorICogICAgICBbNy8xNiwxMS8xNl0gIGF0YW4oeCkgPSBhdGFuKDEvMikgKyBhdGFuKCAodC0wLjUpLygxK3QvMikgKQorICogICAgICBbMTEvMTYuMTkvMTZdIGF0YW4oeCkgPSBhdGFuKCAxICkgKyBhdGFuKCAodC0xKS8oMSt0KSApCisgKiAgICAgIFsxOS8xNiwzOS8xNl0gYXRhbih4KSA9IGF0YW4oMy8yKSArIGF0YW4oICh0LTEuNSkvKDErMS41dCkgKQorICogICAgICBbMzkvMTYsSU5GXSAgIGF0YW4oeCkgPSBhdGFuKElORikgKyBhdGFuKCAtMS90ICkKKyAqCisgKiBDb25zdGFudHM6CisgKiBUaGUgaGV4YWRlY2ltYWwgdmFsdWVzIGFyZSB0aGUgaW50ZW5kZWQgb25lcyBmb3IgdGhlIGZvbGxvd2luZworICogY29uc3RhbnRzLiBUaGUgZGVjaW1hbCB2YWx1ZXMgbWF5IGJlIHVzZWQsIHByb3ZpZGVkIHRoYXQgdGhlCisgKiBjb21waWxlciB3aWxsIGNvbnZlcnQgZnJvbSBkZWNpbWFsIHRvIGJpbmFyeSBhY2N1cmF0ZWx5IGVub3VnaAorICogdG8gcHJvZHVjZSB0aGUgaGV4YWRlY2ltYWwgdmFsdWVzIHNob3duLgorICovCisKKyNpbmNsdWRlIDxmbG9hdC5oPgorCisjaW5jbHVkZSAibWF0aC5oIgorI2luY2x1ZGUgIm1hdGhfcHJpdmF0ZS5oIgorCitzdGF0aWMgY29uc3QgZG91YmxlIGF0YW5oaVtdID0geworICA0LjYzNjQ3NjA5MDAwODA2MDkzNTE1ZS0wMSwgLyogYXRhbigwLjUpaGkgMHgzRkREQUM2NywgMHgwNTYxQkI0RiAqLworICA3Ljg1Mzk4MTYzMzk3NDQ4Mjc4OTk5ZS0wMSwgLyogYXRhbigxLjApaGkgMHgzRkU5MjFGQiwgMHg1NDQ0MkQxOCAqLworICA5LjgyNzkzNzIzMjQ3MzI5MDU0MDgyZS0wMSwgLyogYXRhbigxLjUpaGkgMHgzRkVGNzMwQiwgMHhEMjgxRjY5QiAqLworICAxLjU3MDc5NjMyNjc5NDg5NjU1ODAwZSswMCwgLyogYXRhbihpbmYpaGkgMHgzRkY5MjFGQiwgMHg1NDQ0MkQxOCAqLworfTsKKworc3RhdGljIGNvbnN0IGRvdWJsZSBhdGFubG9bXSA9IHsKKyAgMi4yNjk4Nzc3NDUyOTYxNjg3MDkyNGUtMTcsIC8qIGF0YW4oMC41KWxvIDB4M0M3QTJCN0YsIDB4MjIyRjY1RTIgKi8KKyAgMy4wNjE2MTY5OTc4NjgzODMwMTc5M2UtMTcsIC8qIGF0YW4oMS4wKWxvIDB4M0M4MUE2MjYsIDB4MzMxNDVDMDcgKi8KKyAgMS4zOTAzMzExMDMxMjMwOTk4NDUxNmUtMTcsIC8qIGF0YW4oMS41KWxvIDB4M0M3MDA3ODgsIDB4N0FGMENCQkQgKi8KKyAgNi4xMjMyMzM5OTU3MzY3NjYwMzU4N2UtMTcsIC8qIGF0YW4oaW5mKWxvIDB4M0M5MUE2MjYsIDB4MzMxNDVDMDcgKi8KK307CisKK3N0YXRpYyBjb25zdCBkb3VibGUgYVRbXSA9IHsKKyAgMy4zMzMzMzMzMzMzMzMyOTMxODAyN2UtMDEsIC8qIDB4M0ZENTU1NTUsIDB4NTU1NTU1MEQgKi8KKyAtMS45OTk5OTk5OTk5ODc2NDgzMjQ3NmUtMDEsIC8qIDB4QkZDOTk5OTksIDB4OTk5OEVCQzQgKi8KKyAgMS40Mjg1NzE0MjcyNTAzNDY2MzcxMWUtMDEsIC8qIDB4M0ZDMjQ5MjQsIDB4OTIwMDgzRkYgKi8KKyAtMS4xMTExMTEwNDA1NDYyMzU1Nzg4MGUtMDEsIC8qIDB4QkZCQzcxQzYsIDB4RkUyMzE2NzEgKi8KKyAgOS4wOTA4ODcxMzM0MzY1MDY1NjE5NmUtMDIsIC8qIDB4M0ZCNzQ1Q0QsIDB4QzU0QzIwNkUgKi8KKyAtNy42OTE4NzYyMDUwNDQ4Mjk5OTQ5NWUtMDIsIC8qIDB4QkZCM0IwRjIsIDB4QUY3NDlBNkQgKi8KKyAgNi42NjEwNzMxMzczODc1MzEyMDY2OWUtMDIsIC8qIDB4M0ZCMTBENjYsIDB4QTBEMDNENTEgKi8KKyAtNS44MzM1NzAxMzM3OTA1NzM0ODY0NWUtMDIsIC8qIDB4QkZBRERFMkQsIDB4NTJERUZEOUEgKi8KKyAgNC45NzY4Nzc5OTQ2MTU5MzIzNjAxN2UtMDIsIC8qIDB4M0ZBOTdCNEIsIDB4MjQ3NjBERUIgKi8KKyAtMy42NTMxNTcyNzQ0MjE2OTE1NTI3MGUtMDIsIC8qIDB4QkZBMkI0NDQsIDB4MkM2QTZDMkYgKi8KKyAgMS42Mjg1ODIwMTE1MzY1NzgyMzYyM2UtMDIsIC8qIDB4M0Y5MEFEM0EsIDB4RTMyMkRBMTEgKi8KK307CisKKwlzdGF0aWMgY29uc3QgZG91YmxlCitvbmUgICA9IDEuMCwKK2h1Z2UgICA9IDEuMGUzMDA7CisKK2RvdWJsZQorYXRhbihkb3VibGUgeCkKK3sKKwlkb3VibGUgdyxzMSxzMix6OworCWludDMyX3QgaXgsaHgsaWQ7CisKKwlHRVRfSElHSF9XT1JEKGh4LHgpOworCWl4ID0gaHgmMHg3ZmZmZmZmZjsKKwlpZihpeD49MHg0NDEwMDAwMCkgewkvKiBpZiB8eHwgPj0gMl42NiAqLworCSAgICB1X2ludDMyX3QgbG93OworCSAgICBHRVRfTE9XX1dPUkQobG93LHgpOworCSAgICBpZihpeD4weDdmZjAwMDAwfHwKKwkJKGl4PT0weDdmZjAwMDAwJiYobG93IT0wKSkpCisJCXJldHVybiB4K3g7CQkvKiBOYU4gKi8KKwkgICAgaWYoaHg+MCkgcmV0dXJuICBhdGFuaGlbM10rKih2b2xhdGlsZSBkb3VibGUgKikmYXRhbmxvWzNdOworCSAgICBlbHNlICAgICByZXR1cm4gLWF0YW5oaVszXS0qKHZvbGF0aWxlIGRvdWJsZSAqKSZhdGFubG9bM107CisJfSBpZiAoaXggPCAweDNmZGMwMDAwKSB7CS8qIHx4fCA8IDAuNDM3NSAqLworCSAgICBpZiAoaXggPCAweDNlNDAwMDAwKSB7CS8qIHx4fCA8IDJeLTI3ICovCisJCWlmKGh1Z2UreD5vbmUpIHJldHVybiB4OwkvKiByYWlzZSBpbmV4YWN0ICovCisJICAgIH0KKwkgICAgaWQgPSAtMTsKKwl9IGVsc2UgeworCXggPSBmYWJzKHgpOworCWlmIChpeCA8IDB4M2ZmMzAwMDApIHsJCS8qIHx4fCA8IDEuMTg3NSAqLworCSAgICBpZiAoaXggPCAweDNmZTYwMDAwKSB7CS8qIDcvMTYgPD18eHw8MTEvMTYgKi8KKwkJaWQgPSAwOyB4ID0gKDIuMCp4LW9uZSkvKDIuMCt4KTsKKwkgICAgfSBlbHNlIHsJCQkvKiAxMS8xNjw9fHh8PCAxOS8xNiAqLworCQlpZCA9IDE7IHggID0gKHgtb25lKS8oeCtvbmUpOworCSAgICB9CisJfSBlbHNlIHsKKwkgICAgaWYgKGl4IDwgMHg0MDAzODAwMCkgewkvKiB8eHwgPCAyLjQzNzUgKi8KKwkJaWQgPSAyOyB4ICA9ICh4LTEuNSkvKG9uZSsxLjUqeCk7CisJICAgIH0gZWxzZSB7CQkJLyogMi40Mzc1IDw9IHx4fCA8IDJeNjYgKi8KKwkJaWQgPSAzOyB4ICA9IC0xLjAveDsKKwkgICAgfQorCX19CisgICAgLyogZW5kIG9mIGFyZ3VtZW50IHJlZHVjdGlvbiAqLworCXogPSB4Kng7CisJdyA9IHoqejsKKyAgICAvKiBicmVhayBzdW0gZnJvbSBpPTAgdG8gMTAgYVRbaV16KiooaSsxKSBpbnRvIG9kZCBhbmQgZXZlbiBwb2x5ICovCisJczEgPSB6KihhVFswXSt3KihhVFsyXSt3KihhVFs0XSt3KihhVFs2XSt3KihhVFs4XSt3KmFUWzEwXSkpKSkpOworCXMyID0gdyooYVRbMV0rdyooYVRbM10rdyooYVRbNV0rdyooYVRbN10rdyphVFs5XSkpKSk7CisJaWYgKGlkPDApIHJldHVybiB4IC0geCooczErczIpOworCWVsc2UgeworCSAgICB6ID0gYXRhbmhpW2lkXSAtICgoeCooczErczIpIC0gYXRhbmxvW2lkXSkgLSB4KTsKKwkgICAgcmV0dXJuIChoeDwwKT8gLXo6ejsKKwl9Cit9CisKKyNpZiBMREJMX01BTlRfRElHID09IDUzCitfX3dlYWtfcmVmZXJlbmNlKGF0YW4sIGF0YW5sKTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2F0YW5mLmMgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfYXRhbmYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iM2EzNzFmCi0tLSAvZGV2L251bGwKKysrIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2F0YW5mLmMKQEAgLTAsMCArMSw5MiBAQAorLyogc19hdGFuZi5jIC0tIGZsb2F0IHZlcnNpb24gb2Ygc19hdGFuLmMuCisgKiBDb252ZXJzaW9uIHRvIGZsb2F0IGJ5IElhbiBMYW5jZSBUYXlsb3IsIEN5Z251cyBTdXBwb3J0LCBpYW5AY3lnbnVzLmNvbS4KKyAqLworCisvKgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogQ29weXJpZ2h0IChDKSAxOTkzIGJ5IFN1biBNaWNyb3N5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBEZXZlbG9wZWQgYXQgU3VuUHJvLCBhIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gYnVzaW5lc3MuCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCisgKiBzb2Z0d2FyZSBpcyBmcmVlbHkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGlzIG5vdGljZQorICogaXMgcHJlc2VydmVkLgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJTRCQiKTsKKworI2luY2x1ZGUgIm1hdGguaCIKKyNpbmNsdWRlICJtYXRoX3ByaXZhdGUuaCIKKworc3RhdGljIGNvbnN0IGZsb2F0IGF0YW5oaVtdID0geworICA0LjYzNjQ3NjAzOTllLTAxLCAvKiBhdGFuKDAuNSloaSAweDNlZWQ2MzM4ICovCisgIDcuODUzOTgxMjU2NWUtMDEsIC8qIGF0YW4oMS4wKWhpIDB4M2Y0OTBmZGEgKi8KKyAgOS44Mjc5MzY4ODc3ZS0wMSwgLyogYXRhbigxLjUpaGkgMHgzZjdiOTg1ZSAqLworICAxLjU3MDc5NjI1MTNlKzAwLCAvKiBhdGFuKGluZiloaSAweDNmYzkwZmRhICovCit9OworCitzdGF0aWMgY29uc3QgZmxvYXQgYXRhbmxvW10gPSB7CisgIDUuMDEyMTU4MjQ0MGUtMDksIC8qIGF0YW4oMC41KWxvIDB4MzFhYzM3NjkgKi8KKyAgMy43NzQ4OTQ3MDc5ZS0wOCwgLyogYXRhbigxLjApbG8gMHgzMzIyMjE2OCAqLworICAzLjQ0NzMyMTcxNzBlLTA4LCAvKiBhdGFuKDEuNSlsbyAweDMzMTQwZmI0ICovCisgIDcuNTQ5Nzg5NDE1OWUtMDgsIC8qIGF0YW4oaW5mKWxvIDB4MzNhMjIxNjggKi8KK307CisKK3N0YXRpYyBjb25zdCBmbG9hdCBhVFtdID0geworICAzLjMzMzMzMjgzNjZlLTAxLAorIC0xLjk5OTkxNTgzODJlLTAxLAorICAxLjQyNTM2MzU3MDVlLTAxLAorIC0xLjA2NDgwMTczNzdlLTAxLAorICA2LjE2ODc2MDczMThlLTAyLAorfTsKKworc3RhdGljIGNvbnN0IGZsb2F0CitvbmUgICA9IDEuMCwKK2h1Z2UgICA9IDEuMGUzMDsKKworZmxvYXQKK2F0YW5mKGZsb2F0IHgpCit7CisJZmxvYXQgdyxzMSxzMix6OworCWludDMyX3QgaXgsaHgsaWQ7CisKKwlHRVRfRkxPQVRfV09SRChoeCx4KTsKKwlpeCA9IGh4JjB4N2ZmZmZmZmY7CisJaWYoaXg+PTB4NGM4MDAwMDApIHsJLyogaWYgfHh8ID49IDIqKjI2ICovCisJICAgIGlmKGl4PjB4N2Y4MDAwMDApCisJCXJldHVybiB4K3g7CQkvKiBOYU4gKi8KKwkgICAgaWYoaHg+MCkgcmV0dXJuICBhdGFuaGlbM10rKih2b2xhdGlsZSBmbG9hdCAqKSZhdGFubG9bM107CisJICAgIGVsc2UgICAgIHJldHVybiAtYXRhbmhpWzNdLSoodm9sYXRpbGUgZmxvYXQgKikmYXRhbmxvWzNdOworCX0gaWYgKGl4IDwgMHgzZWUwMDAwMCkgewkvKiB8eHwgPCAwLjQzNzUgKi8KKwkgICAgaWYgKGl4IDwgMHgzOTgwMDAwMCkgewkvKiB8eHwgPCAyKiotMTIgKi8KKwkJaWYoaHVnZSt4Pm9uZSkgcmV0dXJuIHg7CS8qIHJhaXNlIGluZXhhY3QgKi8KKwkgICAgfQorCSAgICBpZCA9IC0xOworCX0gZWxzZSB7CisJeCA9IGZhYnNmKHgpOworCWlmIChpeCA8IDB4M2Y5ODAwMDApIHsJCS8qIHx4fCA8IDEuMTg3NSAqLworCSAgICBpZiAoaXggPCAweDNmMzAwMDAwKSB7CS8qIDcvMTYgPD18eHw8MTEvMTYgKi8KKwkJaWQgPSAwOyB4ID0gKChmbG9hdCkyLjAqeC1vbmUpLygoZmxvYXQpMi4wK3gpOworCSAgICB9IGVsc2UgewkJCS8qIDExLzE2PD18eHw8IDE5LzE2ICovCisJCWlkID0gMTsgeCAgPSAoeC1vbmUpLyh4K29uZSk7CisJICAgIH0KKwl9IGVsc2UgeworCSAgICBpZiAoaXggPCAweDQwMWMwMDAwKSB7CS8qIHx4fCA8IDIuNDM3NSAqLworCQlpZCA9IDI7IHggID0gKHgtKGZsb2F0KTEuNSkvKG9uZSsoZmxvYXQpMS41KngpOworCSAgICB9IGVsc2UgewkJCS8qIDIuNDM3NSA8PSB8eHwgPCAyKioyNiAqLworCQlpZCA9IDM7IHggID0gLShmbG9hdCkxLjAveDsKKwkgICAgfQorCX19CisgICAgLyogZW5kIG9mIGFyZ3VtZW50IHJlZHVjdGlvbiAqLworCXogPSB4Kng7CisJdyA9IHoqejsKKyAgICAvKiBicmVhayBzdW0gZnJvbSBpPTAgdG8gMTAgYVRbaV16KiooaSsxKSBpbnRvIG9kZCBhbmQgZXZlbiBwb2x5ICovCisJczEgPSB6KihhVFswXSt3KihhVFsyXSt3KmFUWzRdKSk7CisJczIgPSB3KihhVFsxXSt3KmFUWzNdKTsKKwlpZiAoaWQ8MCkgcmV0dXJuIHggLSB4KihzMStzMik7CisJZWxzZSB7CisJICAgIHogPSBhdGFuaGlbaWRdIC0gKCh4KihzMStzMikgLSBhdGFubG9baWRdKSAtIHgpOworCSAgICByZXR1cm4gKGh4PDApPyAtejp6OworCX0KK30KZGlmZiAtLWdpdCBhL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19hdGFubC5jIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2F0YW5sLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmYyOWMzYwotLS0gL2Rldi9udWxsCisrKyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19hdGFubC5jCkBAIC0wLDAgKzEsODUgQEAKKy8qIEAoIylzX2F0YW4uYyA1LjEgOTMvMDkvMjQgKi8KKy8qIEZyZWVCU0Q6IGhlYWQvbGliL21zdW4vc3JjL3NfYXRhbi5jIDE3NjQ1MSAyMDA4LTAyLTIyIDAyOjMwOjM2WiBkYXMgKi8KKy8qCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBDb3B5cmlnaHQgKEMpIDE5OTMgYnkgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIERldmVsb3BlZCBhdCBTdW5Qcm8sIGEgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBidXNpbmVzcy4KKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKKyAqIHNvZnR3YXJlIGlzIGZyZWVseSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoaXMgbm90aWNlCisgKiBpcyBwcmVzZXJ2ZWQuCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorX19GQlNESUQoIiRGcmVlQlNEJCIpOworCisvKgorICogU2VlIGNvbW1lbnRzIGluIHNfYXRhbi5jLgorICogQ29udmVydGVkIHRvIGxvbmcgZG91YmxlIGJ5IERhdmlkIFNjaHVsdHogPGRhc0BGcmVlQlNELk9SRz4uCisgKi8KKworI2luY2x1ZGUgPGZsb2F0Lmg+CisKKyNpbmNsdWRlICJpbnZ0cmlnLmgiCisjaW5jbHVkZSAibWF0aC5oIgorI2luY2x1ZGUgIm1hdGhfcHJpdmF0ZS5oIgorCitzdGF0aWMgY29uc3QgbG9uZyBkb3VibGUKK29uZSAgID0gMS4wLAoraHVnZSAgID0gMS4wZTMwMDsKKworbG9uZyBkb3VibGUKK2F0YW5sKGxvbmcgZG91YmxlIHgpCit7CisJdW5pb24gSUVFRWwyYml0cyB1OworCWxvbmcgZG91YmxlIHcsczEsczIsejsKKwlpbnQgaWQ7CisJaW50MTZfdCBleHBzaWduLCBleHB0OworCWludDMyX3QgZXhwbWFuOworCisJdS5lID0geDsKKwlleHBzaWduID0gdS54Yml0cy5leHBzaWduOworCWV4cHQgPSBleHBzaWduICYgMHg3ZmZmOworCWlmKGV4cHQgPj0gQVRBTl9DT05TVCkgewkvKiBpZiB8eHwgaXMgbGFyZ2UsIGF0YW4oeCl+PXBpLzIgKi8KKwkgICAgaWYoZXhwdCA9PSBCSUFTICsgTERCTF9NQVhfRVhQICYmCisJICAgICAgICgodS5iaXRzLm1hbmgmfkxEQkxfTkJJVCl8dS5iaXRzLm1hbmwpIT0wKQorCQlyZXR1cm4geCt4OwkJLyogTmFOICovCisJICAgIGlmKGV4cHNpZ24+MCkgcmV0dXJuICBhdGFuaGlbM10rYXRhbmxvWzNdOworCSAgICBlbHNlICAgICByZXR1cm4gLWF0YW5oaVszXS1hdGFubG9bM107CisJfQorCS8qIEV4dHJhY3QgdGhlIGV4cG9uZW50IGFuZCB0aGUgZmlyc3QgZmV3IGJpdHMgb2YgdGhlIG1hbnRpc3NhLiAqLworCS8qIFhYWCBUaGVyZSBzaG91bGQgYmUgYSBtb3JlIGNvbnZlbmllbnQgd2F5IHRvIGRvIHRoaXMuICovCisJZXhwbWFuID0gKGV4cHQgPDwgOCkgfCAoKHUuYml0cy5tYW5oID4+IChNQU5IX1NJWkUgLSA5KSkgJiAweGZmKTsKKwlpZiAoZXhwbWFuIDwgKChCSUFTIC0gMikgPDwgOCkgKyAweGMwKSB7CS8qIHx4fCA8IDAuNDM3NSAqLworCSAgICBpZiAoZXhwdCA8IEFUQU5fTElORUFSKSB7CS8qIGlmIHx4fCBpcyBzbWFsbCwgYXRhbmwoeCl+PXggKi8KKwkJaWYoaHVnZSt4Pm9uZSkgcmV0dXJuIHg7CS8qIHJhaXNlIGluZXhhY3QgKi8KKwkgICAgfQorCSAgICBpZCA9IC0xOworCX0gZWxzZSB7CisJeCA9IGZhYnNsKHgpOworCWlmIChleHBtYW4gPCAoQklBUyA8PCA4KSArIDB4MzApIHsJCS8qIHx4fCA8IDEuMTg3NSAqLworCSAgICBpZiAoZXhwbWFuIDwgKChCSUFTIC0gMSkgPDwgOCkgKyAweDYwKSB7CS8qIDcvMTYgPD18eHw8MTEvMTYgKi8KKwkJaWQgPSAwOyB4ID0gKDIuMCp4LW9uZSkvKDIuMCt4KTsKKwkgICAgfSBlbHNlIHsJCQkvKiAxMS8xNjw9fHh8PCAxOS8xNiAqLworCQlpZCA9IDE7IHggID0gKHgtb25lKS8oeCtvbmUpOworCSAgICB9CisJfSBlbHNlIHsKKwkgICAgaWYgKGV4cG1hbiA8ICgoQklBUyArIDEpIDw8IDgpICsgMHgzOCkgewkvKiB8eHwgPCAyLjQzNzUgKi8KKwkJaWQgPSAyOyB4ICA9ICh4LTEuNSkvKG9uZSsxLjUqeCk7CisJICAgIH0gZWxzZSB7CQkJLyogMi40Mzc1IDw9IHx4fCA8IDJeQVRBTl9DT05TVCAqLworCQlpZCA9IDM7IHggID0gLTEuMC94OworCSAgICB9CisJfX0KKyAgICAvKiBlbmQgb2YgYXJndW1lbnQgcmVkdWN0aW9uICovCisJeiA9IHgqeDsKKwl3ID0geip6OworICAgIC8qIGJyZWFrIHN1bSBhVFtpXXoqKihpKzEpIGludG8gb2RkIGFuZCBldmVuIHBvbHkgKi8KKwlzMSA9IHoqVF9ldmVuKHcpOworCXMyID0gdypUX29kZCh3KTsKKwlpZiAoaWQ8MCkgcmV0dXJuIHggLSB4KihzMStzMik7CisJZWxzZSB7CisJICAgIHogPSBhdGFuaGlbaWRdIC0gKCh4KihzMStzMikgLSBhdGFubG9baWRdKSAtIHgpOworCSAgICByZXR1cm4gKGV4cHNpZ248MCk/IC16Ono7CisJfQorfQpkaWZmIC0tZ2l0IGEvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2NhcmcuYyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19jYXJnLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWExYTBkNwotLS0gL2Rldi9udWxsCisrKyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19jYXJnLmMKQEAgLTAsMCArMSwzOCBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUgRGF2aWQgU2NodWx0eiA8ZGFzQEZyZWVCU0QuT1JHPgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CitfX0ZCU0RJRCgiJEZyZWVCU0QkIik7CisKKyNpbmNsdWRlIDxjb21wbGV4Lmg+CisjaW5jbHVkZSA8bWF0aC5oPgorCitkb3VibGUKK2NhcmcoZG91YmxlIGNvbXBsZXggeikKK3sKKworCXJldHVybiAoYXRhbjIoY2ltYWcoeiksIGNyZWFsKHopKSk7Cit9CmRpZmYgLS1naXQgYS9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfY2FyZ2YuYyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19jYXJnZi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwMjMyZDAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfY2FyZ2YuYwpAQCAtMCwwICsxLDM4IEBACisvKi0KKyAqIENvcHlyaWdodCAoYykgMjAwNSBEYXZpZCBTY2h1bHR6IDxkYXNARnJlZUJTRC5PUkc+CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJTRCQiKTsKKworI2luY2x1ZGUgPGNvbXBsZXguaD4KKyNpbmNsdWRlIDxtYXRoLmg+CisKK2Zsb2F0CitjYXJnZihmbG9hdCBjb21wbGV4IHopCit7CisKKwlyZXR1cm4gKGF0YW4yZihjaW1hZ2YoeiksIGNyZWFsZih6KSkpOworfQpkaWZmIC0tZ2l0IGEvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2NhcmdsLmMgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfY2FyZ2wuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNTU1MDgzCi0tLSAvZGV2L251bGwKKysrIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2NhcmdsLmMKQEAgLTAsMCArMSwzOCBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOCBEYXZpZCBTY2h1bHR6IDxkYXNARnJlZUJTRC5PUkc+CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJTRCQiKTsKKworI2luY2x1ZGUgPGNvbXBsZXguaD4KKyNpbmNsdWRlIDxtYXRoLmg+CisKK2xvbmcgZG91YmxlCitjYXJnbChsb25nIGRvdWJsZSBjb21wbGV4IHopCit7CisKKwlyZXR1cm4gKGF0YW4ybChjaW1hZ2woeiksIGNyZWFsbCh6KSkpOworfQpkaWZmIC0tZ2l0IGEvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2NicnQuYyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19jYnJ0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTEwZjc1YgotLS0gL2Rldi9udWxsCisrKyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19jYnJ0LmMKQEAgLTAsMCArMSwxMTcgQEAKKy8qIEAoIylzX2NicnQuYyA1LjEgOTMvMDkvMjQgKi8KKy8qCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBDb3B5cmlnaHQgKEMpIDE5OTMgYnkgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIERldmVsb3BlZCBhdCBTdW5Qcm8sIGEgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBidXNpbmVzcy4KKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKKyAqIHNvZnR3YXJlIGlzIGZyZWVseSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoaXMgbm90aWNlCisgKiBpcyBwcmVzZXJ2ZWQuCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKgorICogT3B0aW1pemVkIGJ5IEJydWNlIEQuIEV2YW5zLgorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJTRCQiKTsKKworI2luY2x1ZGUgIm1hdGguaCIKKyNpbmNsdWRlICJtYXRoX3ByaXZhdGUuaCIKKworLyogY2JydCh4KQorICogUmV0dXJuIGN1YmUgcm9vdCBvZiB4CisgKi8KK3N0YXRpYyBjb25zdCB1X2ludDMyX3QKKwlCMSA9IDcxNTA5NDE2MywgLyogQjEgPSAoMTAyMy0xMDIzLzMtMC4wMzMwNjIzNTY1MSkqMioqMjAgKi8KKwlCMiA9IDY5NjIxOTc5NTsgLyogQjIgPSAoMTAyMy0xMDIzLzMtNTQvMy0wLjAzMzA2MjM1NjUxKSoyKioyMCAqLworCisvKiB8MS9jYnJ0KHgpIC0gcCh4KXwgPCAyKiotMjMuNSAoflstNy45M2UtOCwgNy45MjllLThdKS4gKi8KK3N0YXRpYyBjb25zdCBkb3VibGUKK1AwID0gIDEuODc1OTUxODI0MjcxNzcwMDk2NDMsCQkvKiAweDNmZmUwM2U2LCAweDBmNjFlNjkyICovCitQMSA9IC0xLjg4NDk3OTc5NTQzMzc3MTY5ODc1LAkJLyogMHhiZmZlMjhlMCwgMHg5MmYwMjQyMCAqLworUDIgPSAgMS42MjE0Mjk3MjAxMDUzNTQ0NjYxNDAsCQkvKiAweDNmZjlmMTYwLCAweDRhNDlkNmMyICovCitQMyA9IC0wLjc1ODM5NzkzNDc3ODc2NjA0NzQzNywJCS8qIDB4YmZlODQ0Y2IsIDB4YmVlNzUxZDkgKi8KK1A0ID0gIDAuMTQ1OTk2MTkyODg2NjEyNDQ2OTgyOwkJLyogMHgzZmMyYjAwMCwgMHhkNGU0ZWRkNyAqLworCitkb3VibGUKK2NicnQoZG91YmxlIHgpCit7CisJaW50MzJfdAloeDsKKwl1bmlvbiB7CisJICAgIGRvdWJsZSB2YWx1ZTsKKwkgICAgdWludDY0X3QgYml0czsKKwl9IHU7CisJZG91YmxlIHIscyx0PTAuMCx3OworCXVfaW50MzJfdCBzaWduOworCXVfaW50MzJfdCBoaWdoLGxvdzsKKworCUVYVFJBQ1RfV09SRFMoaHgsbG93LHgpOworCXNpZ249aHgmMHg4MDAwMDAwMDsgCQkvKiBzaWduPSBzaWduKHgpICovCisJaHggIF49c2lnbjsKKwlpZihoeD49MHg3ZmYwMDAwMCkgcmV0dXJuKHgreCk7IC8qIGNicnQoTmFOLElORikgaXMgaXRzZWxmICovCisKKyAgICAvKgorICAgICAqIFJvdWdoIGNicnQgdG8gNSBiaXRzOgorICAgICAqICAgIGNicnQoMioqZSooMSttKSB+PSAyKiooZS8zKSooMSsoZSUzK20pLzMpCisgICAgICogd2hlcmUgZSBpcyBpbnRlZ3JhbCBhbmQgPj0gMCwgbSBpcyByZWFsIGFuZCBpbiBbMCwgMSksIGFuZCAiLyIgYW5kCisgICAgICogIiUiIGFyZSBpbnRlZ2VyIGRpdmlzaW9uIGFuZCBtb2R1bHVzIHdpdGggcm91bmRpbmcgdG93YXJkcyBtaW51cworICAgICAqIGluZmluaXR5LiAgVGhlIFJIUyBpcyBhbHdheXMgPj0gdGhlIExIUyBhbmQgaGFzIGEgbWF4aW11bSByZWxhdGl2ZQorICAgICAqIGVycm9yIG9mIGFib3V0IDEgaW4gMTYuICBBZGRpbmcgYSBiaWFzIG9mIC0wLjAzMzA2MjM1NjUxIHRvIHRoZQorICAgICAqIChlJTMrbSkvMyB0ZXJtIHJlZHVjZXMgdGhlIGVycm9yIHRvIGFib3V0IDEgaW4gMzIuIFdpdGggdGhlIElFRUUKKyAgICAgKiBmbG9hdGluZyBwb2ludCByZXByZXNlbnRhdGlvbiwgZm9yIGZpbml0ZSBwb3NpdGl2ZSBub3JtYWwgdmFsdWVzLAorICAgICAqIG9yZGluYXJ5IGludGVnZXIgZGl2aXNvbiBvZiB0aGUgdmFsdWUgaW4gYml0cyBtYWdpY2FsbHkgZ2l2ZXMKKyAgICAgKiBhbG1vc3QgZXhhY3RseSB0aGUgUkhTIG9mIHRoZSBhYm92ZSBwcm92aWRlZCB3ZSBmaXJzdCBzdWJ0cmFjdCB0aGUKKyAgICAgKiBleHBvbmVudCBiaWFzICgxMDIzIGZvciBkb3VibGVzKSBhbmQgbGF0ZXIgYWRkIGl0IGJhY2suICBXZSBkbyB0aGUKKyAgICAgKiBzdWJ0cmFjdGlvbiB2aXJ0dWFsbHkgdG8ga2VlcCBlID49IDAgc28gdGhhdCBvcmRpbmFyeSBpbnRlZ2VyCisgICAgICogZGl2aXNpb24gcm91bmRzIHRvd2FyZHMgbWludXMgaW5maW5pdHk7IHRoaXMgaXMgYWxzbyBlZmZpY2llbnQuCisgICAgICovCisJaWYoaHg8MHgwMDEwMDAwMCkgeyAJCS8qIHplcm8gb3Igc3Vibm9ybWFsPyAqLworCSAgICBpZigoaHh8bG93KT09MCkKKwkJcmV0dXJuKHgpOwkJLyogY2JydCgwKSBpcyBpdHNlbGYgKi8KKwkgICAgU0VUX0hJR0hfV09SRCh0LDB4NDM1MDAwMDApOyAvKiBzZXQgdD0gMioqNTQgKi8KKwkgICAgdCo9eDsKKwkgICAgR0VUX0hJR0hfV09SRChoaWdoLHQpOworCSAgICBJTlNFUlRfV09SRFModCxzaWdufCgoaGlnaCYweDdmZmZmZmZmKS8zK0IyKSwwKTsKKwl9IGVsc2UKKwkgICAgSU5TRVJUX1dPUkRTKHQsc2lnbnwoaHgvMytCMSksMCk7CisKKyAgICAvKgorICAgICAqIE5ldyBjYnJ0IHRvIDIzIGJpdHM6CisgICAgICogICAgY2JydCh4KSA9IHQqY2JydCh4L3QqKjMpIH49IHQqUCh0KiozL3gpCisgICAgICogd2hlcmUgUChyKSBpcyBhIHBvbHlub21pYWwgb2YgZGVncmVlIDQgdGhhdCBhcHByb3hpbWF0ZXMgMS9jYnJ0KHIpCisgICAgICogdG8gd2l0aGluIDIqKi0yMy41IHdoZW4gfHIgLSAxfCA8IDEvMTAuICBUaGUgcm91Z2ggYXBwcm94aW1hdGlvbgorICAgICAqIGhhcyBwcm9kdWNlZCB0IHN1Y2ggdGhhbiB8dC9jYnJ0KHgpIC0gMXwgfjwgMS8zMiwgYW5kIGN1YmluZyB0aGlzCisgICAgICogZ2l2ZXMgdXMgYm91bmRzIGZvciByID0gdCoqMy94LgorICAgICAqCisgICAgICogVHJ5IHRvIG9wdGltaXplIGZvciBwYXJhbGxlbCBldmFsdWF0aW9uIGFzIGluIGtfdGFuZi5jLgorICAgICAqLworCXI9KHQqdCkqKHQveCk7CisJdD10KigoUDArciooUDErcipQMikpKygocipyKSpyKSooUDMrcipQNCkpOworCisgICAgLyoKKyAgICAgKiBSb3VuZCB0IGF3YXkgZnJvbSB6ZXJvIHRvIDIzIGJpdHMgKHNsb3BwaWx5IGV4Y2VwdCBmb3IgZW5zdXJpbmcgdGhhdAorICAgICAqIHRoZSByZXN1bHQgaXMgbGFyZ2VyIGluIG1hZ25pdHVkZSB0aGFuIGNicnQoeCkgYnV0IG5vdCBtdWNoIG1vcmUgdGhhbgorICAgICAqIDIgMjMtYml0IHVscHMgbGFyZ2VyKS4gIFdpdGggcm91bmRpbmcgdG93YXJkcyB6ZXJvLCB0aGUgZXJyb3IgYm91bmQKKyAgICAgKiB3b3VsZCBiZSB+NS82IGluc3RlYWQgb2YgfjQvNi4gIFdpdGggYSBtYXhpbXVtIGVycm9yIG9mIDIgMjMtYml0IHVscHMKKyAgICAgKiBpbiB0aGUgcm91bmRlZCB0LCB0aGUgaW5maW5pdGUtcHJlY2lzaW9uIGVycm9yIGluIHRoZSBOZXd0b24KKyAgICAgKiBhcHByb3hpbWF0aW9uIGJhcmVseSBhZmZlY3RzIHRoaXJkIGRpZ2l0IGluIHRoZSBmaW5hbCBlcnJvcgorICAgICAqIDAuNjY3OyB0aGUgZXJyb3IgaW4gdGhlIHJvdW5kZWQgdCBjYW4gYmUgdXAgdG8gYWJvdXQgMyAyMy1iaXQgdWxwcworICAgICAqIGJlZm9yZSB0aGUgZmluYWwgZXJyb3IgaXMgbGFyZ2VyIHRoYW4gMC42NjcgdWxwcy4KKyAgICAgKi8KKwl1LnZhbHVlPXQ7CisJdS5iaXRzPSh1LmJpdHMrMHg4MDAwMDAwMCkmMHhmZmZmZmZmZmMwMDAwMDAwVUxMOworCXQ9dS52YWx1ZTsKKworICAgIC8qIG9uZSBzdGVwIE5ld3RvbiBpdGVyYXRpb24gdG8gNTMgYml0cyB3aXRoIGVycm9yIDwgMC42NjcgdWxwcyAqLworCXM9dCp0OwkJCQkvKiB0KnQgaXMgZXhhY3QgKi8KKwlyPXgvczsJCQkJLyogZXJyb3IgPD0gMC41IHVscHM7IHxyfCA8IHx0fCAqLworCXc9dCt0OwkJCQkvKiB0K3QgaXMgZXhhY3QgKi8KKwlyPShyLXQpLyh3K3IpOwkJCS8qIHItdCBpcyBleGFjdDsgdytyIH49IDMqdCAqLworCXQ9dCt0KnI7CQkJLyogZXJyb3IgPD0gMC41ICsgMC41LzMgKyBlcHNpbG9uICovCisKKwlyZXR1cm4odCk7Cit9CisKKyNpZiAoTERCTF9NQU5UX0RJRyA9PSA1MykKK19fd2Vha19yZWZlcmVuY2UoY2JydCwgY2JydGwpOworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfY2JydGYuYyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19jYnJ0Zi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1NGY5NzQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfY2JydGYuYwpAQCAtMCwwICsxLDczIEBACisvKiBzX2NicnRmLmMgLS0gZmxvYXQgdmVyc2lvbiBvZiBzX2NicnQuYy4KKyAqIENvbnZlcnNpb24gdG8gZmxvYXQgYnkgSWFuIExhbmNlIFRheWxvciwgQ3lnbnVzIFN1cHBvcnQsIGlhbkBjeWdudXMuY29tLgorICogRGVidWdnZWQgYW5kIG9wdGltaXplZCBieSBCcnVjZSBELiBFdmFucy4KKyAqLworCisvKgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogQ29weXJpZ2h0IChDKSAxOTkzIGJ5IFN1biBNaWNyb3N5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBEZXZlbG9wZWQgYXQgU3VuUHJvLCBhIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gYnVzaW5lc3MuCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCisgKiBzb2Z0d2FyZSBpcyBmcmVlbHkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGlzIG5vdGljZQorICogaXMgcHJlc2VydmVkLgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJTRCQiKTsKKworI2luY2x1ZGUgIm1hdGguaCIKKyNpbmNsdWRlICJtYXRoX3ByaXZhdGUuaCIKKworLyogY2JydGYoeCkKKyAqIFJldHVybiBjdWJlIHJvb3Qgb2YgeAorICovCitzdGF0aWMgY29uc3QgdW5zaWduZWQKKwlCMSA9IDcwOTk1ODEzMCwgLyogQjEgPSAoMTI3LTEyNy4wLzMtMC4wMzMwNjIzNTY1MSkqMioqMjMgKi8KKwlCMiA9IDY0Mjg0OTI2NjsgLyogQjIgPSAoMTI3LTEyNy4wLzMtMjQvMy0wLjAzMzA2MjM1NjUxKSoyKioyMyAqLworCitmbG9hdAorY2JydGYoZmxvYXQgeCkKK3sKKwlkb3VibGUgcixUOworCWZsb2F0IHQ7CisJaW50MzJfdCBoeDsKKwl1X2ludDMyX3Qgc2lnbjsKKwl1X2ludDMyX3QgaGlnaDsKKworCUdFVF9GTE9BVF9XT1JEKGh4LHgpOworCXNpZ249aHgmMHg4MDAwMDAwMDsgCQkvKiBzaWduPSBzaWduKHgpICovCisJaHggIF49c2lnbjsKKwlpZihoeD49MHg3ZjgwMDAwMCkgcmV0dXJuKHgreCk7IC8qIGNicnQoTmFOLElORikgaXMgaXRzZWxmICovCisKKyAgICAvKiByb3VnaCBjYnJ0IHRvIDUgYml0cyAqLworCWlmKGh4PDB4MDA4MDAwMDApIHsgCQkvKiB6ZXJvIG9yIHN1Ym5vcm1hbD8gKi8KKwkgICAgaWYoaHg9PTApCisJCXJldHVybih4KTsJCS8qIGNicnQoKy0wKSBpcyBpdHNlbGYgKi8KKwkgICAgU0VUX0ZMT0FUX1dPUkQodCwweDRiODAwMDAwKTsgLyogc2V0IHQ9IDIqKjI0ICovCisJICAgIHQqPXg7CisJICAgIEdFVF9GTE9BVF9XT1JEKGhpZ2gsdCk7CisJICAgIFNFVF9GTE9BVF9XT1JEKHQsc2lnbnwoKGhpZ2gmMHg3ZmZmZmZmZikvMytCMikpOworCX0gZWxzZQorCSAgICBTRVRfRkxPQVRfV09SRCh0LHNpZ258KGh4LzMrQjEpKTsKKworICAgIC8qCisgICAgICogRmlyc3Qgc3RlcCBOZXd0b24gaXRlcmF0aW9uIChzb2x2aW5nIHQqdC14L3QgPT0gMCkgdG8gMTYgYml0cy4gIEluCisgICAgICogZG91YmxlIHByZWNpc2lvbiBzbyB0aGF0IGl0cyB0ZXJtcyBjYW4gYmUgYXJyYW5nZWQgZm9yIGVmZmljaWVuY3kKKyAgICAgKiB3aXRob3V0IGNhdXNpbmcgb3ZlcmZsb3cgb3IgdW5kZXJmbG93LgorICAgICAqLworCVQ9dDsKKwlyPVQqVCpUOworCVQ9VCooKGRvdWJsZSl4K3grcikvKHgrcityKTsKKworICAgIC8qCisgICAgICogU2Vjb25kIHN0ZXAgTmV3dG9uIGl0ZXJhdGlvbiB0byA0NyBiaXRzLiAgSW4gZG91YmxlIHByZWNpc2lvbiBmb3IKKyAgICAgKiBlZmZpY2llbmN5IGFuZCBhY2N1cmFjeS4KKyAgICAgKi8KKwlyPVQqVCpUOworCVQ9VCooKGRvdWJsZSl4K3grcikvKHgrcityKTsKKworICAgIC8qIHJvdW5kaW5nIHRvIDI0IGJpdHMgaXMgcGVyZmVjdCBpbiByb3VuZC10by1uZWFyZXN0IG1vZGUgKi8KKwlyZXR1cm4oVCk7Cit9CmRpZmYgLS1naXQgYS9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfY2JydGwuYyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19jYnJ0bC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyMzZjMGYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfY2JydGwuYwpAQCAtMCwwICsxLDE0MyBAQAorLyotCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBDb3B5cmlnaHQgKEMpIDE5OTMgYnkgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDA5LTIwMTEsIEJydWNlIEQuIEV2YW5zLCBTdGV2ZW4gRy4gS2FyZ2wsIERhdmlkIFNjaHVsdHouCisgKgorICogRGV2ZWxvcGVkIGF0IFN1blBybywgYSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGJ1c2luZXNzLgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcworICogc29mdHdhcmUgaXMgZnJlZWx5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhpcyBub3RpY2UKKyAqIGlzIHByZXNlcnZlZC4KKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqCisgKiBUaGUgYXJndW1lbnQgcmVkdWN0aW9uIGFuZCB0ZXN0aW5nIGZvciBleGNlcHRpb25hbCBjYXNlcyB3YXMKKyAqIHdyaXR0ZW4gYnkgU3RldmVuIEcuIEthcmdsIHdpdGggaW5wdXQgZnJvbSBCcnVjZSBELiBFdmFucworICogYW5kIERhdmlkIEEuIFNjaHVsdHouCisgKi8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorX19GQlNESUQoIiRGcmVlQlNEJCIpOworCisjaW5jbHVkZSA8ZmxvYXQuaD4KKyNpZmRlZiBfX2kzODZfXworI2luY2x1ZGUgPGllZWVmcC5oPgorI2VuZGlmCisKKyNpbmNsdWRlICJmcG1hdGguaCIgICAgCisjaW5jbHVkZSAibWF0aC5oIgorI2luY2x1ZGUgIm1hdGhfcHJpdmF0ZS5oIgorCisjZGVmaW5lCUJJQVMJKExEQkxfTUFYX0VYUCAtIDEpCisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZAorICAgIEIxID0gNzA5OTU4MTMwOwkvKiBCMSA9ICgxMjctMTI3LjAvMy0wLjAzMzA2MjM1NjUxKSoyKioyMyAqLworCitsb25nIGRvdWJsZQorY2JydGwobG9uZyBkb3VibGUgeCkKK3sKKwl1bmlvbiBJRUVFbDJiaXRzIHUsIHY7CisJbG9uZyBkb3VibGUgciwgcywgdCwgdzsKKwlkb3VibGUgZHIsIGR0LCBkeDsKKwlmbG9hdCBmdCwgZng7CisJdWludDMyX3QgaHg7CisJdWludDE2X3QgZXhwc2lnbjsKKwlpbnQgazsKKworCXUuZSA9IHg7CisJZXhwc2lnbiA9IHUueGJpdHMuZXhwc2lnbjsKKwlrID0gZXhwc2lnbiAmIDB4N2ZmZjsKKworCS8qCisJICogSWYgeCA9ICstSW5mLCB0aGVuIGNicnQoeCkgPSArLUluZi4KKwkgKiBJZiB4ID0gTmFOLCB0aGVuIGNicnQoeCkgPSBOYU4uCisJICovCisJaWYgKGsgPT0gQklBUyArIExEQkxfTUFYX0VYUCkKKwkJcmV0dXJuICh4ICsgeCk7CisKKwlFTlRFUkkoKTsKKwlpZiAoayA9PSAwKSB7CisJCS8qIElmIHggPSArLTAsIHRoZW4gY2JydCh4KSA9ICstMC4gKi8KKwkJaWYgKCh1LmJpdHMubWFuaCB8IHUuYml0cy5tYW5sKSA9PSAwKQorCQkJUkVUVVJOSSh4KTsKKwkJLyogQWRqdXN0IHN1Ym5vcm1hbCBudW1iZXJzLiAqLworCQl1LmUgKj0gMHgxLjBwNTE0OworCQlrID0gdS5iaXRzLmV4cDsKKwkJayAtPSBCSUFTICsgNTE0OworIAl9IGVsc2UKKwkJayAtPSBCSUFTOworCXUueGJpdHMuZXhwc2lnbiA9IEJJQVM7CisJdi5lID0gMTsgCisKKwl4ID0gdS5lOworCXN3aXRjaCAoayAlIDMpIHsKKwljYXNlIDE6CisJY2FzZSAtMjoKKwkJeCA9IDIqeDsKKwkJay0tOworCQlicmVhazsKKwljYXNlIDI6CisJY2FzZSAtMToKKwkJeCA9IDQqeDsKKwkJayAtPSAyOworCQlicmVhazsKKwl9CisJdi54Yml0cy5leHBzaWduID0gKGV4cHNpZ24gJiAweDgwMDApIHwgKEJJQVMgKyBrIC8gMyk7CisKKwkvKgorCSAqIFRoZSBmb2xsb3dpbmcgaXMgdGhlIGd1dHMgb2Ygc19jYnJ0Ziwgd2l0aCB0aGUgaGFuZGxpbmcgb2YKKwkgKiBzcGVjaWFsIHZhbHVlcyByZW1vdmVkIGFuZCBleHRyYSBjYXJlIGZvciBhY2N1cmFjeSBub3QgdGFrZW4sCisJICogYnV0IHdpdGggbW9zdCBvZiB0aGUgZXh0cmEgYWNjdXJhY3kgbm90IGRpc2NhcmRlZC4KKwkgKi8KKworCS8qIH41LWJpdCBlc3RpbWF0ZTogKi8KKwlmeCA9IHg7CisJR0VUX0ZMT0FUX1dPUkQoaHgsIGZ4KTsKKwlTRVRfRkxPQVRfV09SRChmdCwgKChoeCAmIDB4N2ZmZmZmZmYpIC8gMyArIEIxKSk7CisKKwkvKiB+MTYtYml0IGVzdGltYXRlOiAqLworCWR4ID0geDsKKwlkdCA9IGZ0OworCWRyID0gZHQgKiBkdCAqIGR0OworCWR0ID0gZHQgKiAoZHggKyBkeCArIGRyKSAvIChkeCArIGRyICsgZHIpOworCisJLyogfjQ3LWJpdCBlc3RpbWF0ZTogKi8KKwlkciA9IGR0ICogZHQgKiBkdDsKKwlkdCA9IGR0ICogKGR4ICsgZHggKyBkcikgLyAoZHggKyBkciArIGRyKTsKKworI2lmIExEQkxfTUFOVF9ESUcgPT0gNjQKKwkvKgorCSAqIGR0IGlzIGNicnRsKHgpIHRvIH40NyBiaXRzIChhZnRlciB4IGhhcyBiZWVuIHJlZHVjZWQgdG8gMSA8PSB4IDwgOCkuCisJICogUm91bmQgaXQgYXdheSBmcm9tIHplcm8gdG8gMzIgYml0cyAoMzIgc28gdGhhdCB0KnQgaXMgZXhhY3QsIGFuZAorCSAqIGF3YXkgZnJvbSB6ZXJvIGZvciB0ZWNobmljYWwgcmVhc29ucykuCisJICovCisJdm9sYXRpbGUgZG91YmxlIHZkMiA9IDB4MS4wcDMyOworCXZvbGF0aWxlIGRvdWJsZSB2ZDEgPSAweDEuMHAtMzE7CisJI2RlZmluZSB2ZCAoKGxvbmcgZG91YmxlKXZkMiArIHZkMSkKKworCXQgPSBkdCArIHZkIC0gMHgxLjBwMzI7CisjZWxpZiBMREJMX01BTlRfRElHID09IDExMworCS8qCisJICogUm91bmQgZHQgYXdheSBmcm9tIHplcm8gdG8gNDcgYml0cy4gIFNpbmNlIHdlIGRvbid0IHRydXN0IHRoZSA0NywKKwkgKiBhZGQgMiA0Ny1iaXQgdWxwcyBpbnN0ZWFkIG9mIDEgdG8gcm91bmQgdXAuICBSb3VuZGluZyBpcyBzbG93IGFuZAorCSAqIG1pZ2h0IGJlIGF2b2lkYWJsZSBpbiB0aGlzIGNhc2UsIHNpbmNlIG9uIG1vc3QgbWFjaGluZXMgZHQgd2lsbAorCSAqIGhhdmUgYmVlbiBldmFsdWF0ZWQgaW4gNTMtYml0IHByZWNpc2lvbiBhbmQgdGhlIHRlY2huaWNhbCByZWFzb25zCisJICogZm9yIHJvdW5kaW5nIHVwIG1pZ2h0IG5vdCBhcHBseSB0byBlaXRoZXIgY2FzZSBpbiBjYnJ0bCgpIHNpbmNlCisJICogZHQgaXMgbXVjaCBtb3JlIGFjY3VyYXRlIHRoYW4gbmVlZGVkLgorCSAqLworCXQgPSBkdCArIDB4Mi4wcC00NiArIDB4MS4wcDYwTCAtIDB4MS4wcDYwOworI2Vsc2UKKyNlcnJvciAiVW5zdXBwb3J0ZWQgbG9uZyBkb3VibGUgZm9ybWF0IgorI2VuZGlmCisKKwkvKgorICAgICAJICogRmluYWwgc3RlcCBOZXd0b24gaXRlcmF0aW9uIHRvIDY0IG9yIDExMyBiaXRzIHdpdGgKKwkgKiBlcnJvciA8IDAuNjY3IHVscHMKKwkgKi8KKwlzPXQqdDsJCQkJLyogdCp0IGlzIGV4YWN0ICovCisJcj14L3M7CQkJCS8qIGVycm9yIDw9IDAuNSB1bHBzOyB8cnwgPCB8dHwgKi8KKwl3PXQrdDsJCQkJLyogdCt0IGlzIGV4YWN0ICovCisJcj0oci10KS8odytyKTsJCQkvKiByLXQgaXMgZXhhY3Q7IHcrciB+PSAzKnQgKi8KKwl0PXQrdCpyOwkJCS8qIGVycm9yIDw9IDAuNSArIDAuNS8zICsgZXBzaWxvbiAqLworCisJdCAqPSB2LmU7CisJUkVUVVJOSSh0KTsKK30KZGlmZiAtLWdpdCBhL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19jY29zaC5jIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2Njb3NoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWVhOTYyYgotLS0gL2Rldi9udWxsCisrKyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19jY29zaC5jCkBAIC0wLDAgKzEsMTU1IEBACisvKi0KKyAqIENvcHlyaWdodCAoYykgMjAwNSBCcnVjZSBELiBFdmFucyBhbmQgU3RldmVuIEcuIEthcmdsCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSB1bm1vZGlmaWVkLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucywgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUworICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoKKyAqIEh5cGVyYm9saWMgY29zaW5lIG9mIGEgY29tcGxleCBhcmd1bWVudCB6ID0geCArIGkgeS4KKyAqCisgKiBjb3NoKHopID0gY29zaCh4K2l5KQorICogICAgICAgICA9IGNvc2goeCkgY29zKHkpICsgaSBzaW5oKHgpIHNpbih5KS4KKyAqCisgKiBFeGNlcHRpb25hbCB2YWx1ZXMgYXJlIG5vdGVkIGluIHRoZSBjb21tZW50cyB3aXRoaW4gdGhlIHNvdXJjZSBjb2RlLgorICogVGhlc2UgdmFsdWVzIGFuZCB0aGUgcmV0dXJuIHZhbHVlIHdlcmUgdGFrZW4gZnJvbSBuMTEyNC5wZGYuCisgKi8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorX19GQlNESUQoIiRGcmVlQlNEJCIpOworCisjaW5jbHVkZSA8Y29tcGxleC5oPgorI2luY2x1ZGUgPG1hdGguaD4KKworI2luY2x1ZGUgIm1hdGhfcHJpdmF0ZS5oIgorCitzdGF0aWMgY29uc3QgZG91YmxlIGh1Z2UgPSAweDFwMTAyMzsKKworZG91YmxlIGNvbXBsZXgKK2Njb3NoKGRvdWJsZSBjb21wbGV4IHopCit7CisJZG91YmxlIHgsIHksIGg7CisJaW50MzJfdCBoeCwgaHksIGl4LCBpeSwgbHgsIGx5OworCisJeCA9IGNyZWFsKHopOworCXkgPSBjaW1hZyh6KTsKKworCUVYVFJBQ1RfV09SRFMoaHgsIGx4LCB4KTsKKwlFWFRSQUNUX1dPUkRTKGh5LCBseSwgeSk7CisKKwlpeCA9IDB4N2ZmZmZmZmYgJiBoeDsKKwlpeSA9IDB4N2ZmZmZmZmYgJiBoeTsKKworCS8qIEhhbmRsZSB0aGUgbmVhcmx5LW5vbi1leGNlcHRpb25hbCBjYXNlcyB3aGVyZSB4IGFuZCB5IGFyZSBmaW5pdGUuICovCisJaWYgKGl4IDwgMHg3ZmYwMDAwMCAmJiBpeSA8IDB4N2ZmMDAwMDApIHsKKwkJaWYgKChpeSB8IGx5KSA9PSAwKQorCQkJcmV0dXJuIChjcGFjayhjb3NoKHgpLCB4ICogeSkpOworCQlpZiAoaXggPCAweDQwMzYwMDAwKQkvKiBzbWFsbCB4OiBub3JtYWwgY2FzZSAqLworCQkJcmV0dXJuIChjcGFjayhjb3NoKHgpICogY29zKHkpLCBzaW5oKHgpICogc2luKHkpKSk7CisKKwkJLyogfHh8ID49IDIyLCBzbyBjb3NoKHgpIH49IGV4cCh8eHwpICovCisJCWlmIChpeCA8IDB4NDA4NjJlNDIpIHsKKwkJCS8qIHggPCA3MTA6IGV4cCh8eHwpIHdvbid0IG92ZXJmbG93ICovCisJCQloID0gZXhwKGZhYnMoeCkpICogMC41OworCQkJcmV0dXJuIChjcGFjayhoICogY29zKHkpLCBjb3B5c2lnbihoLCB4KSAqIHNpbih5KSkpOworCQl9IGVsc2UgaWYgKGl4IDwgMHg0MDk2YmJhYSkgeworCQkJLyogeCA8IDE0NTU6IHNjYWxlIHRvIGF2b2lkIG92ZXJmbG93ICovCisJCQl6ID0gX19sZGV4cF9jZXhwKGNwYWNrKGZhYnMoeCksIHkpLCAtMSk7CisJCQlyZXR1cm4gKGNwYWNrKGNyZWFsKHopLCBjaW1hZyh6KSAqIGNvcHlzaWduKDEsIHgpKSk7CisJCX0gZWxzZSB7CisJCQkvKiB4ID49IDE0NTU6IHRoZSByZXN1bHQgYWx3YXlzIG92ZXJmbG93cyAqLworCQkJaCA9IGh1Z2UgKiB4OworCQkJcmV0dXJuIChjcGFjayhoICogaCAqIGNvcyh5KSwgaCAqIHNpbih5KSkpOworCQl9CisJfQorCisJLyoKKwkgKiBjb3NoKCstMCArLSBJIEluZikgPSBkTmFOICsgSSBzaWduKGQoKy0wLCBkTmFOKSkwLgorCSAqIFRoZSBzaWduIG9mIDAgaW4gdGhlIHJlc3VsdCBpcyB1bnNwZWNpZmllZC4gIENob2ljZSA9IG5vcm1hbGx5CisJICogdGhlIHNhbWUgYXMgZE5hTi4gIFJhaXNlIHRoZSBpbnZhbGlkIGZsb2F0aW5nLXBvaW50IGV4Y2VwdGlvbi4KKwkgKgorCSAqIGNvc2goKy0wICstIEkgTmFOKSA9IGQoTmFOKSArIEkgc2lnbihkKCstMCwgTmFOKSkwLgorCSAqIFRoZSBzaWduIG9mIDAgaW4gdGhlIHJlc3VsdCBpcyB1bnNwZWNpZmllZC4gIENob2ljZSA9IG5vcm1hbGx5CisJICogdGhlIHNhbWUgYXMgZChOYU4pLgorCSAqLworCWlmICgoaXggfCBseCkgPT0gMCAmJiBpeSA+PSAweDdmZjAwMDAwKQorCQlyZXR1cm4gKGNwYWNrKHkgLSB5LCBjb3B5c2lnbigwLCB4ICogKHkgLSB5KSkpKTsKKworCS8qCisJICogY29zaCgrLUluZiArLSBJIDApID0gK0luZiArIEkgKCstKSgrLSkwLgorCSAqCisJICogY29zaChOYU4gKy0gSSAwKSAgID0gZChOYU4pICsgSSBzaWduKGQoTmFOLCArLTApKTAuCisJICogVGhlIHNpZ24gb2YgMCBpbiB0aGUgcmVzdWx0IGlzIHVuc3BlY2lmaWVkLgorCSAqLworCWlmICgoaXkgfCBseSkgPT0gMCAmJiBpeCA+PSAweDdmZjAwMDAwKSB7CisJCWlmICgoKGh4ICYgMHhmZmZmZikgfCBseCkgPT0gMCkKKwkJCXJldHVybiAoY3BhY2soeCAqIHgsIGNvcHlzaWduKDAsIHgpICogeSkpOworCQlyZXR1cm4gKGNwYWNrKHggKiB4LCBjb3B5c2lnbigwLCAoeCArIHgpICogeSkpKTsKKwl9CisKKwkvKgorCSAqIGNvc2goeCArLSBJIEluZikgPSBkTmFOICsgSSBkTmFOLgorCSAqIFJhaXNlIHRoZSBpbnZhbGlkIGZsb2F0aW5nLXBvaW50IGV4Y2VwdGlvbiBmb3IgZmluaXRlIG5vbnplcm8geC4KKwkgKgorCSAqIGNvc2goeCArIEkgTmFOKSA9IGQoTmFOKSArIEkgZChOYU4pLgorCSAqIE9wdGlvbmFsbHkgcmFpc2VzIHRoZSBpbnZhbGlkIGZsb2F0aW5nLXBvaW50IGV4Y2VwdGlvbiBmb3IgZmluaXRlCisJICogbm9uemVybyB4LiAgQ2hvaWNlID0gZG9uJ3QgcmFpc2UgKGV4Y2VwdCBmb3Igc2lnbmFsaW5nIE5hTnMpLgorCSAqLworCWlmIChpeCA8IDB4N2ZmMDAwMDAgJiYgaXkgPj0gMHg3ZmYwMDAwMCkKKwkJcmV0dXJuIChjcGFjayh5IC0geSwgeCAqICh5IC0geSkpKTsKKworCS8qCisJICogY29zaCgrLUluZiArIEkgTmFOKSAgPSArSW5mICsgSSBkKE5hTikuCisJICoKKwkgKiBjb3NoKCstSW5mICstIEkgSW5mKSA9ICtJbmYgKyBJIGROYU4uCisJICogVGhlIHNpZ24gb2YgSW5mIGluIHRoZSByZXN1bHQgaXMgdW5zcGVjaWZpZWQuICBDaG9pY2UgPSBhbHdheXMgKy4KKwkgKiBSYWlzZSB0aGUgaW52YWxpZCBmbG9hdGluZy1wb2ludCBleGNlcHRpb24uCisJICoKKwkgKiBjb3NoKCstSW5mICsgSSB5KSAgID0gK0luZiBjb3MoeSkgKy0gSSBJbmYgc2luKHkpCisJICovCisJaWYgKGl4ID49IDB4N2ZmMDAwMDAgJiYgKChoeCAmIDB4ZmZmZmYpIHwgbHgpID09IDApIHsKKwkJaWYgKGl5ID49IDB4N2ZmMDAwMDApCisJCQlyZXR1cm4gKGNwYWNrKHggKiB4LCB4ICogKHkgLSB5KSkpOworCQlyZXR1cm4gKGNwYWNrKCh4ICogeCkgKiBjb3MoeSksIHggKiBzaW4oeSkpKTsKKwl9CisKKwkvKgorCSAqIGNvc2goTmFOICsgSSBOYU4pICA9IGQoTmFOKSArIEkgZChOYU4pLgorCSAqCisJICogY29zaChOYU4gKy0gSSBJbmYpID0gZChOYU4pICsgSSBkKE5hTikuCisJICogT3B0aW9uYWxseSByYWlzZXMgdGhlIGludmFsaWQgZmxvYXRpbmctcG9pbnQgZXhjZXB0aW9uLgorCSAqIENob2ljZSA9IHJhaXNlLgorCSAqCisJICogY29zaChOYU4gKyBJIHkpICAgID0gZChOYU4pICsgSSBkKE5hTikuCisJICogT3B0aW9uYWxseSByYWlzZXMgdGhlIGludmFsaWQgZmxvYXRpbmctcG9pbnQgZXhjZXB0aW9uIGZvciBmaW5pdGUKKwkgKiBub256ZXJvIHkuICBDaG9pY2UgPSBkb24ndCByYWlzZSAoZXhjZXB0IGZvciBzaWduYWxpbmcgTmFOcykuCisJICovCisJcmV0dXJuIChjcGFjaygoeCAqIHgpICogKHkgLSB5KSwgKHggKyB4KSAqICh5IC0geSkpKTsKK30KKworZG91YmxlIGNvbXBsZXgKK2Njb3MoZG91YmxlIGNvbXBsZXggeikKK3sKKworCS8qIGNjb3MoeikgPSBjY29zaChJICogeikgKi8KKwlyZXR1cm4gKGNjb3NoKGNwYWNrKC1jaW1hZyh6KSwgY3JlYWwoeikpKSk7Cit9CmRpZmYgLS1naXQgYS9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfY2Nvc2hmLmMgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfY2Nvc2hmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWRlOWFkNAotLS0gL2Rldi9udWxsCisrKyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19jY29zaGYuYwpAQCAtMCwwICsxLDEwNCBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUgQnJ1Y2UgRC4gRXZhbnMgYW5kIFN0ZXZlbiBHLiBLYXJnbAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UgdW5tb2RpZmllZCwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMsIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qCisgKiBIeXBlcmJvbGljIGNvc2luZSBvZiBhIGNvbXBsZXggYXJndW1lbnQuICBTZWUgc19jY29zaC5jIGZvciBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJTRCQiKTsKKworI2luY2x1ZGUgPGNvbXBsZXguaD4KKyNpbmNsdWRlIDxtYXRoLmg+CisKKyNpbmNsdWRlICJtYXRoX3ByaXZhdGUuaCIKKworc3RhdGljIGNvbnN0IGZsb2F0IGh1Z2UgPSAweDFwMTI3OworCitmbG9hdCBjb21wbGV4CitjY29zaGYoZmxvYXQgY29tcGxleCB6KQoreworCWZsb2F0IHgsIHksIGg7CisJaW50MzJfdCBoeCwgaHksIGl4LCBpeTsKKworCXggPSBjcmVhbGYoeik7CisJeSA9IGNpbWFnZih6KTsKKworCUdFVF9GTE9BVF9XT1JEKGh4LCB4KTsKKwlHRVRfRkxPQVRfV09SRChoeSwgeSk7CisKKwlpeCA9IDB4N2ZmZmZmZmYgJiBoeDsKKwlpeSA9IDB4N2ZmZmZmZmYgJiBoeTsKKworCWlmIChpeCA8IDB4N2Y4MDAwMDAgJiYgaXkgPCAweDdmODAwMDAwKSB7CisJCWlmIChpeSA9PSAwKQorCQkJcmV0dXJuIChjcGFja2YoY29zaGYoeCksIHggKiB5KSk7CisJCWlmIChpeCA8IDB4NDExMDAwMDApCS8qIHNtYWxsIHg6IG5vcm1hbCBjYXNlICovCisJCQlyZXR1cm4gKGNwYWNrZihjb3NoZih4KSAqIGNvc2YoeSksIHNpbmhmKHgpICogc2luZih5KSkpOworCisJCS8qIHx4fCA+PSA5LCBzbyBjb3NoKHgpIH49IGV4cCh8eHwpICovCisJCWlmIChpeCA8IDB4NDJiMTcyMTgpIHsKKwkJCS8qIHggPCA4OC43OiBleHBmKHx4fCkgd29uJ3Qgb3ZlcmZsb3cgKi8KKwkJCWggPSBleHBmKGZhYnNmKHgpKSAqIDAuNWY7CisJCQlyZXR1cm4gKGNwYWNrZihoICogY29zZih5KSwgY29weXNpZ25mKGgsIHgpICogc2luZih5KSkpOworCQl9IGVsc2UgaWYgKGl4IDwgMHg0MzQwYjFlNykgeworCQkJLyogeCA8IDE5Mi43OiBzY2FsZSB0byBhdm9pZCBvdmVyZmxvdyAqLworCQkJeiA9IF9fbGRleHBfY2V4cGYoY3BhY2tmKGZhYnNmKHgpLCB5KSwgLTEpOworCQkJcmV0dXJuIChjcGFja2YoY3JlYWxmKHopLCBjaW1hZ2YoeikgKiBjb3B5c2lnbmYoMSwgeCkpKTsKKwkJfSBlbHNlIHsKKwkJCS8qIHggPj0gMTkyLjc6IHRoZSByZXN1bHQgYWx3YXlzIG92ZXJmbG93cyAqLworCQkJaCA9IGh1Z2UgKiB4OworCQkJcmV0dXJuIChjcGFja2YoaCAqIGggKiBjb3NmKHkpLCBoICogc2luZih5KSkpOworCQl9CisJfQorCisJaWYgKGl4ID09IDAgJiYgaXkgPj0gMHg3ZjgwMDAwMCkKKwkJcmV0dXJuIChjcGFja2YoeSAtIHksIGNvcHlzaWduZigwLCB4ICogKHkgLSB5KSkpKTsKKworCWlmIChpeSA9PSAwICYmIGl4ID49IDB4N2Y4MDAwMDApIHsKKwkJaWYgKChoeCAmIDB4N2ZmZmZmKSA9PSAwKQorCQkJcmV0dXJuIChjcGFja2YoeCAqIHgsIGNvcHlzaWduZigwLCB4KSAqIHkpKTsKKwkJcmV0dXJuIChjcGFja2YoeCAqIHgsIGNvcHlzaWduZigwLCAoeCArIHgpICogeSkpKTsKKwl9CisKKwlpZiAoaXggPCAweDdmODAwMDAwICYmIGl5ID49IDB4N2Y4MDAwMDApCisJCXJldHVybiAoY3BhY2tmKHkgLSB5LCB4ICogKHkgLSB5KSkpOworCisJaWYgKGl4ID49IDB4N2Y4MDAwMDAgJiYgKGh4ICYgMHg3ZmZmZmYpID09IDApIHsKKwkJaWYgKGl5ID49IDB4N2Y4MDAwMDApCisJCQlyZXR1cm4gKGNwYWNrZih4ICogeCwgeCAqICh5IC0geSkpKTsKKwkJcmV0dXJuIChjcGFja2YoKHggKiB4KSAqIGNvc2YoeSksIHggKiBzaW5mKHkpKSk7CisJfQorCisJcmV0dXJuIChjcGFja2YoKHggKiB4KSAqICh5IC0geSksICh4ICsgeCkgKiAoeSAtIHkpKSk7Cit9CisKK2Zsb2F0IGNvbXBsZXgKK2Njb3NmKGZsb2F0IGNvbXBsZXggeikKK3sKKworCXJldHVybiAoY2Nvc2hmKGNwYWNrZigtY2ltYWdmKHopLCBjcmVhbGYoeikpKSk7Cit9CmRpZmYgLS1naXQgYS9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfY2VpbC5jIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2NlaWwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MjlmODEzCi0tLSAvZGV2L251bGwKKysrIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2NlaWwuYwpAQCAtMCwwICsxLDc3IEBACisvKiBAKCMpc19jZWlsLmMgNS4xIDkzLzA5LzI0ICovCisvKgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogQ29weXJpZ2h0IChDKSAxOTkzIGJ5IFN1biBNaWNyb3N5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBEZXZlbG9wZWQgYXQgU3VuUHJvLCBhIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gYnVzaW5lc3MuCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCisgKiBzb2Z0d2FyZSBpcyBmcmVlbHkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGlzIG5vdGljZQorICogaXMgcHJlc2VydmVkLgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJTRCQiKTsKKworLyoKKyAqIGNlaWwoeCkKKyAqIFJldHVybiB4IHJvdW5kZWQgdG93YXJkIC1pbmYgdG8gaW50ZWdyYWwgdmFsdWUKKyAqIE1ldGhvZDoKKyAqCUJpdCB0d2lkZGxpbmcuCisgKiBFeGNlcHRpb246CisgKglJbmV4YWN0IGZsYWcgcmFpc2VkIGlmIHggbm90IGVxdWFsIHRvIGNlaWwoeCkuCisgKi8KKworI2luY2x1ZGUgPGZsb2F0Lmg+CisKKyNpbmNsdWRlICJtYXRoLmgiCisjaW5jbHVkZSAibWF0aF9wcml2YXRlLmgiCisKK3N0YXRpYyBjb25zdCBkb3VibGUgaHVnZSA9IDEuMGUzMDA7CisKK2RvdWJsZQorY2VpbChkb3VibGUgeCkKK3sKKwlpbnQzMl90IGkwLGkxLGowOworCXVfaW50MzJfdCBpLGo7CisJRVhUUkFDVF9XT1JEUyhpMCxpMSx4KTsKKwlqMCA9ICgoaTA+PjIwKSYweDdmZiktMHgzZmY7CisJaWYoajA8MjApIHsKKwkgICAgaWYoajA8MCkgeyAJLyogcmFpc2UgaW5leGFjdCBpZiB4ICE9IDAgKi8KKwkJaWYoaHVnZSt4PjAuMCkgey8qIHJldHVybiAwKnNpZ24oeCkgaWYgfHh8PDEgKi8KKwkJICAgIGlmKGkwPDApIHtpMD0weDgwMDAwMDAwO2kxPTA7fQorCQkgICAgZWxzZSBpZigoaTB8aTEpIT0wKSB7IGkwPTB4M2ZmMDAwMDA7aTE9MDt9CisJCX0KKwkgICAgfSBlbHNlIHsKKwkJaSA9ICgweDAwMGZmZmZmKT4+ajA7CisJCWlmKCgoaTAmaSl8aTEpPT0wKSByZXR1cm4geDsgLyogeCBpcyBpbnRlZ3JhbCAqLworCQlpZihodWdlK3g+MC4wKSB7CS8qIHJhaXNlIGluZXhhY3QgZmxhZyAqLworCQkgICAgaWYoaTA+MCkgaTAgKz0gKDB4MDAxMDAwMDApPj5qMDsKKwkJICAgIGkwICY9ICh+aSk7IGkxPTA7CisJCX0KKwkgICAgfQorCX0gZWxzZSBpZiAoajA+NTEpIHsKKwkgICAgaWYoajA9PTB4NDAwKSByZXR1cm4geCt4OwkvKiBpbmYgb3IgTmFOICovCisJICAgIGVsc2UgcmV0dXJuIHg7CQkvKiB4IGlzIGludGVncmFsICovCisJfSBlbHNlIHsKKwkgICAgaSA9ICgodV9pbnQzMl90KSgweGZmZmZmZmZmKSk+PihqMC0yMCk7CisJICAgIGlmKChpMSZpKT09MCkgcmV0dXJuIHg7CS8qIHggaXMgaW50ZWdyYWwgKi8KKwkgICAgaWYoaHVnZSt4PjAuMCkgeyAJCS8qIHJhaXNlIGluZXhhY3QgZmxhZyAqLworCQlpZihpMD4wKSB7CisJCSAgICBpZihqMD09MjApIGkwKz0xOworCQkgICAgZWxzZSB7CisJCQlqID0gaTEgKyAoMTw8KDUyLWowKSk7CisJCQlpZihqPGkxKSBpMCs9MTsJLyogZ290IGEgY2FycnkgKi8KKwkJCWkxID0gajsKKwkJICAgIH0KKwkJfQorCQlpMSAmPSAofmkpOworCSAgICB9CisJfQorCUlOU0VSVF9XT1JEUyh4LGkwLGkxKTsKKwlyZXR1cm4geDsKK30KKworI2lmIExEQkxfTUFOVF9ESUcgPT0gNTMKK19fd2Vha19yZWZlcmVuY2UoY2VpbCwgY2VpbGwpOworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfY2VpbGYuYyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19jZWlsZi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzYmZlMDQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfY2VpbGYuYwpAQCAtMCwwICsxLDUyIEBACisvKiBzX2NlaWxmLmMgLS0gZmxvYXQgdmVyc2lvbiBvZiBzX2NlaWwuYy4KKyAqIENvbnZlcnNpb24gdG8gZmxvYXQgYnkgSWFuIExhbmNlIFRheWxvciwgQ3lnbnVzIFN1cHBvcnQsIGlhbkBjeWdudXMuY29tLgorICovCisKKy8qCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBDb3B5cmlnaHQgKEMpIDE5OTMgYnkgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIERldmVsb3BlZCBhdCBTdW5Qcm8sIGEgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBidXNpbmVzcy4KKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKKyAqIHNvZnR3YXJlIGlzIGZyZWVseSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoaXMgbm90aWNlCisgKiBpcyBwcmVzZXJ2ZWQuCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorX19GQlNESUQoIiRGcmVlQlNEJCIpOworCisjaW5jbHVkZSAibWF0aC5oIgorI2luY2x1ZGUgIm1hdGhfcHJpdmF0ZS5oIgorCitzdGF0aWMgY29uc3QgZmxvYXQgaHVnZSA9IDEuMGUzMDsKKworZmxvYXQKK2NlaWxmKGZsb2F0IHgpCit7CisJaW50MzJfdCBpMCxqMDsKKwl1X2ludDMyX3QgaTsKKworCUdFVF9GTE9BVF9XT1JEKGkwLHgpOworCWowID0gKChpMD4+MjMpJjB4ZmYpLTB4N2Y7CisJaWYoajA8MjMpIHsKKwkgICAgaWYoajA8MCkgeyAJLyogcmFpc2UgaW5leGFjdCBpZiB4ICE9IDAgKi8KKwkJaWYoaHVnZSt4PihmbG9hdCkwLjApIHsvKiByZXR1cm4gMCpzaWduKHgpIGlmIHx4fDwxICovCisJCSAgICBpZihpMDwwKSB7aTA9MHg4MDAwMDAwMDt9CisJCSAgICBlbHNlIGlmKGkwIT0wKSB7IGkwPTB4M2Y4MDAwMDA7fQorCQl9CisJICAgIH0gZWxzZSB7CisJCWkgPSAoMHgwMDdmZmZmZik+PmowOworCQlpZigoaTAmaSk9PTApIHJldHVybiB4OyAvKiB4IGlzIGludGVncmFsICovCisJCWlmKGh1Z2UreD4oZmxvYXQpMC4wKSB7CS8qIHJhaXNlIGluZXhhY3QgZmxhZyAqLworCQkgICAgaWYoaTA+MCkgaTAgKz0gKDB4MDA4MDAwMDApPj5qMDsKKwkJICAgIGkwICY9ICh+aSk7CisJCX0KKwkgICAgfQorCX0gZWxzZSB7CisJICAgIGlmKGowPT0weDgwKSByZXR1cm4geCt4OwkvKiBpbmYgb3IgTmFOICovCisJICAgIGVsc2UgcmV0dXJuIHg7CQkvKiB4IGlzIGludGVncmFsICovCisJfQorCVNFVF9GTE9BVF9XT1JEKHgsaTApOworCXJldHVybiB4OworfQpkaWZmIC0tZ2l0IGEvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2NlaWxsLmMgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfY2VpbGwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDEwNDVmCi0tLSAvZGV2L251bGwKKysrIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2NlaWxsLmMKQEAgLTAsMCArMSwxMDEgQEAKKy8qCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBDb3B5cmlnaHQgKEMpIDE5OTMgYnkgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIERldmVsb3BlZCBhdCBTdW5Qcm8sIGEgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBidXNpbmVzcy4KKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKKyAqIHNvZnR3YXJlIGlzIGZyZWVseSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoaXMgbm90aWNlCisgKiBpcyBwcmVzZXJ2ZWQuCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKgorICogRnJvbTogQCgjKXNfY2VpbC5jIDUuMSA5My8wOS8yNAorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJTRCQiKTsKKworLyoKKyAqIGNlaWxsKHgpCisgKiBSZXR1cm4geCByb3VuZGVkIHRvd2FyZCAtaW5mIHRvIGludGVncmFsIHZhbHVlCisgKiBNZXRob2Q6CisgKglCaXQgdHdpZGRsaW5nLgorICogRXhjZXB0aW9uOgorICoJSW5leGFjdCBmbGFnIHJhaXNlZCBpZiB4IG5vdCBlcXVhbCB0byBjZWlsbCh4KS4KKyAqLworCisjaW5jbHVkZSA8ZmxvYXQuaD4KKyNpbmNsdWRlIDxtYXRoLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisKKyNpbmNsdWRlICJmcG1hdGguaCIKKworI2lmZGVmIExEQkxfSU1QTElDSVRfTkJJVAorI2RlZmluZQlNQU5IX1NJWkUJKExEQkxfTUFOSF9TSVpFICsgMSkKKyNkZWZpbmUJSU5DX01BTkgodSwgYykJZG8gewkJCQkJXAorCXVpbnQ2NF90IG8gPSB1LmJpdHMubWFuaDsJCQkJXAorCXUuYml0cy5tYW5oICs9IChjKTsJCQkJCVwKKwlpZiAodS5iaXRzLm1hbmggPCBvKQkJCQkJXAorCQl1LmJpdHMuZXhwKys7CQkJCQlcCit9IHdoaWxlICgwKQorI2Vsc2UKKyNkZWZpbmUJTUFOSF9TSVpFCUxEQkxfTUFOSF9TSVpFCisjZGVmaW5lCUlOQ19NQU5IKHUsIGMpCWRvIHsJCQkJCVwKKwl1aW50NjRfdCBvID0gdS5iaXRzLm1hbmg7CQkJCVwKKwl1LmJpdHMubWFuaCArPSAoYyk7CQkJCQlcCisJaWYgKHUuYml0cy5tYW5oIDwgbykgewkJCQkJXAorCQl1LmJpdHMuZXhwKys7CQkJCQlcCisJCXUuYml0cy5tYW5oIHw9IDFsbHUgPDwgKExEQkxfTUFOSF9TSVpFIC0gMSk7CVwKKwl9CQkJCQkJCVwKK30gd2hpbGUgKDApCisjZW5kaWYKKworc3RhdGljIGNvbnN0IGxvbmcgZG91YmxlIGh1Z2UgPSAxLjBlMzAwOworCitsb25nIGRvdWJsZQorY2VpbGwobG9uZyBkb3VibGUgeCkKK3sKKwl1bmlvbiBJRUVFbDJiaXRzIHUgPSB7IC5lID0geCB9OworCWludCBlID0gdS5iaXRzLmV4cCAtIExEQkxfTUFYX0VYUCArIDE7CisKKwlpZiAoZSA8IE1BTkhfU0laRSAtIDEpIHsKKwkJaWYgKGUgPCAwKSB7CQkJLyogcmFpc2UgaW5leGFjdCBpZiB4ICE9IDAgKi8KKwkJCWlmIChodWdlICsgeCA+IDAuMCkKKwkJCQlpZiAodS5iaXRzLmV4cCA+IDAgfHwKKwkJCQkgICAgKHUuYml0cy5tYW5oIHwgdS5iaXRzLm1hbmwpICE9IDApCisJCQkJCXUuZSA9IHUuYml0cy5zaWduID8gLTAuMCA6IDEuMDsKKwkJfSBlbHNlIHsKKwkJCXVpbnQ2NF90IG0gPSAoKDFsbHUgPDwgTUFOSF9TSVpFKSAtIDEpID4+IChlICsgMSk7CisJCQlpZiAoKCh1LmJpdHMubWFuaCAmIG0pIHwgdS5iaXRzLm1hbmwpID09IDApCisJCQkJcmV0dXJuICh4KTsJLyogeCBpcyBpbnRlZ3JhbCAqLworCQkJaWYgKCF1LmJpdHMuc2lnbikgeworI2lmZGVmIExEQkxfSU1QTElDSVRfTkJJVAorCQkJCWlmIChlID09IDApCisJCQkJCXUuYml0cy5leHArKzsKKwkJCQllbHNlCisjZW5kaWYKKwkJCQlJTkNfTUFOSCh1LCAxbGx1IDw8IChNQU5IX1NJWkUgLSBlIC0gMSkpOworCQkJfQorCQkJaWYgKGh1Z2UgKyB4ID4gMC4wKSB7CS8qIHJhaXNlIGluZXhhY3QgZmxhZyAqLworCQkJCXUuYml0cy5tYW5oICY9IH5tOworCQkJCXUuYml0cy5tYW5sID0gMDsKKwkJCX0KKwkJfQorCX0gZWxzZSBpZiAoZSA8IExEQkxfTUFOVF9ESUcgLSAxKSB7CisJCXVpbnQ2NF90IG0gPSAodWludDY0X3QpLTEgPj4gKDY0IC0gTERCTF9NQU5UX0RJRyArIGUgKyAxKTsKKwkJaWYgKCh1LmJpdHMubWFubCAmIG0pID09IDApCisJCQlyZXR1cm4gKHgpOwkvKiB4IGlzIGludGVncmFsICovCisJCWlmICghdS5iaXRzLnNpZ24pIHsKKwkJCWlmIChlID09IE1BTkhfU0laRSAtIDEpCisJCQkJSU5DX01BTkgodSwgMSk7CisJCQllbHNlIHsKKwkJCQl1aW50NjRfdCBvID0gdS5iaXRzLm1hbmw7CisJCQkJdS5iaXRzLm1hbmwgKz0gMWxsdSA8PCAoTERCTF9NQU5UX0RJRyAtIGUgLSAxKTsKKwkJCQlpZiAodS5iaXRzLm1hbmwgPCBvKQkvKiBnb3QgYSBjYXJyeSAqLworCQkJCQlJTkNfTUFOSCh1LCAxKTsKKwkJCX0KKwkJfQorCQlpZiAoaHVnZSArIHggPiAwLjApCQkvKiByYWlzZSBpbmV4YWN0IGZsYWcgKi8KKwkJCXUuYml0cy5tYW5sICY9IH5tOworCX0KKwlyZXR1cm4gKHUuZSk7Cit9CmRpZmYgLS1naXQgYS9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfY2V4cC5jIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2NleHAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYmUxNzhmCi0tLSAvZGV2L251bGwKKysrIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2NleHAuYwpAQCAtMCwwICsxLDg5IEBACisvKi0KKyAqIENvcHlyaWdodCAoYykgMjAxMSBEYXZpZCBTY2h1bHR6IDxkYXNARnJlZUJTRC5PUkc+CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJTRCQiKTsKKworI2luY2x1ZGUgPGNvbXBsZXguaD4KKyNpbmNsdWRlIDxtYXRoLmg+CisKKyNpbmNsdWRlICJtYXRoX3ByaXZhdGUuaCIKKworc3RhdGljIGNvbnN0IHVpbnQzMl90CitleHBfb3ZmbCAgPSAweDQwODYyZTQyLAkJCS8qIGhpZ2ggYml0cyBvZiBNQVhfRVhQICogbG4yIH49IDcxMCAqLworY2V4cF9vdmZsID0gMHg0MDk2YjhlNDsJCQkvKiAoTUFYX0VYUCAtIE1JTl9ERU5PUk1fRVhQKSAqIGxuMiAqLworCitkb3VibGUgY29tcGxleAorY2V4cChkb3VibGUgY29tcGxleCB6KQoreworCWRvdWJsZSB4LCB5LCBleHBfeDsKKwl1aW50MzJfdCBoeCwgaHksIGx4LCBseTsKKworCXggPSBjcmVhbCh6KTsKKwl5ID0gY2ltYWcoeik7CisKKwlFWFRSQUNUX1dPUkRTKGh5LCBseSwgeSk7CisJaHkgJj0gMHg3ZmZmZmZmZjsKKworCS8qIGNleHAoeCArIEkgMCkgPSBleHAoeCkgKyBJIDAgKi8KKwlpZiAoKGh5IHwgbHkpID09IDApCisJCXJldHVybiAoY3BhY2soZXhwKHgpLCB5KSk7CisJRVhUUkFDVF9XT1JEUyhoeCwgbHgsIHgpOworCS8qIGNleHAoMCArIEkgeSkgPSBjb3MoeSkgKyBJIHNpbih5KSAqLworCWlmICgoKGh4ICYgMHg3ZmZmZmZmZikgfCBseCkgPT0gMCkKKwkJcmV0dXJuIChjcGFjayhjb3MoeSksIHNpbih5KSkpOworCisJaWYgKGh5ID49IDB4N2ZmMDAwMDApIHsKKwkJaWYgKGx4ICE9IDAgfHwgKGh4ICYgMHg3ZmZmZmZmZikgIT0gMHg3ZmYwMDAwMCkgeworCQkJLyogY2V4cChmaW5pdGV8TmFOICstIEkgSW5mfE5hTikgPSBOYU4gKyBJIE5hTiAqLworCQkJcmV0dXJuIChjcGFjayh5IC0geSwgeSAtIHkpKTsKKwkJfSBlbHNlIGlmIChoeCAmIDB4ODAwMDAwMDApIHsKKwkJCS8qIGNleHAoLUluZiArLSBJIEluZnxOYU4pID0gMCArIEkgMCAqLworCQkJcmV0dXJuIChjcGFjaygwLjAsIDAuMCkpOworCQl9IGVsc2UgeworCQkJLyogY2V4cCgrSW5mICstIEkgSW5mfE5hTikgPSBJbmYgKyBJIE5hTiAqLworCQkJcmV0dXJuIChjcGFjayh4LCB5IC0geSkpOworCQl9CisJfQorCisJaWYgKGh4ID49IGV4cF9vdmZsICYmIGh4IDw9IGNleHBfb3ZmbCkgeworCQkvKgorCQkgKiB4IGlzIGJldHdlZW4gNzA5LjcgYW5kIDE0NTQuMywgc28gd2UgbXVzdCBzY2FsZSB0byBhdm9pZAorCQkgKiBvdmVyZmxvdyBpbiBleHAoeCkuCisJCSAqLworCQlyZXR1cm4gKF9fbGRleHBfY2V4cCh6LCAwKSk7CisJfSBlbHNlIHsKKwkJLyoKKwkJICogQ2FzZXMgY292ZXJlZCBoZXJlOgorCQkgKiAgLSAgeCA8IGV4cF9vdmZsIGFuZCBleHAoeCkgd29uJ3Qgb3ZlcmZsb3cgKGNvbW1vbiBjYXNlKQorCQkgKiAgLSAgeCA+IGNleHBfb3ZmbCwgc28gZXhwKHgpICogcyBvdmVyZmxvd3MgZm9yIGFsbCBzID4gMAorCQkgKiAgLSAgeCA9ICstSW5mIChnZW5lcmF0ZWQgYnkgZXhwKCkpCisJCSAqICAtICB4ID0gTmFOIChzcHVyaW91cyBpbmV4YWN0IGV4Y2VwdGlvbiBmcm9tIHkpCisJCSAqLworCQlleHBfeCA9IGV4cCh4KTsKKwkJcmV0dXJuIChjcGFjayhleHBfeCAqIGNvcyh5KSwgZXhwX3ggKiBzaW4oeSkpKTsKKwl9Cit9CmRpZmYgLS1naXQgYS9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfY2V4cGYuYyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19jZXhwZi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlMzBkMDgKLS0tIC9kZXYvbnVsbAorKysgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfY2V4cGYuYwpAQCAtMCwwICsxLDg5IEBACisvKi0KKyAqIENvcHlyaWdodCAoYykgMjAxMSBEYXZpZCBTY2h1bHR6IDxkYXNARnJlZUJTRC5PUkc+CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJTRCQiKTsKKworI2luY2x1ZGUgPGNvbXBsZXguaD4KKyNpbmNsdWRlIDxtYXRoLmg+CisKKyNpbmNsdWRlICJtYXRoX3ByaXZhdGUuaCIKKworc3RhdGljIGNvbnN0IHVpbnQzMl90CitleHBfb3ZmbCAgPSAweDQyYjE3MjE4LAkJLyogTUFYX0VYUCAqIGxuMiB+PSA4OC43MjI4MzkzNTUgKi8KK2NleHBfb3ZmbCA9IDB4NDM0MDAwNzQ7CQkvKiAoTUFYX0VYUCAtIE1JTl9ERU5PUk1fRVhQKSAqIGxuMiAqLworCitmbG9hdCBjb21wbGV4CitjZXhwZihmbG9hdCBjb21wbGV4IHopCit7CisJZmxvYXQgeCwgeSwgZXhwX3g7CisJdWludDMyX3QgaHgsIGh5OworCisJeCA9IGNyZWFsZih6KTsKKwl5ID0gY2ltYWdmKHopOworCisJR0VUX0ZMT0FUX1dPUkQoaHksIHkpOworCWh5ICY9IDB4N2ZmZmZmZmY7CisKKwkvKiBjZXhwKHggKyBJIDApID0gZXhwKHgpICsgSSAwICovCisJaWYgKGh5ID09IDApCisJCXJldHVybiAoY3BhY2tmKGV4cGYoeCksIHkpKTsKKwlHRVRfRkxPQVRfV09SRChoeCwgeCk7CisJLyogY2V4cCgwICsgSSB5KSA9IGNvcyh5KSArIEkgc2luKHkpICovCisJaWYgKChoeCAmIDB4N2ZmZmZmZmYpID09IDApCisJCXJldHVybiAoY3BhY2tmKGNvc2YoeSksIHNpbmYoeSkpKTsKKworCWlmIChoeSA+PSAweDdmODAwMDAwKSB7CisJCWlmICgoaHggJiAweDdmZmZmZmZmKSAhPSAweDdmODAwMDAwKSB7CisJCQkvKiBjZXhwKGZpbml0ZXxOYU4gKy0gSSBJbmZ8TmFOKSA9IE5hTiArIEkgTmFOICovCisJCQlyZXR1cm4gKGNwYWNrZih5IC0geSwgeSAtIHkpKTsKKwkJfSBlbHNlIGlmIChoeCAmIDB4ODAwMDAwMDApIHsKKwkJCS8qIGNleHAoLUluZiArLSBJIEluZnxOYU4pID0gMCArIEkgMCAqLworCQkJcmV0dXJuIChjcGFja2YoMC4wLCAwLjApKTsKKwkJfSBlbHNlIHsKKwkJCS8qIGNleHAoK0luZiArLSBJIEluZnxOYU4pID0gSW5mICsgSSBOYU4gKi8KKwkJCXJldHVybiAoY3BhY2tmKHgsIHkgLSB5KSk7CisJCX0KKwl9CisKKwlpZiAoaHggPj0gZXhwX292ZmwgJiYgaHggPD0gY2V4cF9vdmZsKSB7CisJCS8qCisJCSAqIHggaXMgYmV0d2VlbiA4OC43IGFuZCAxOTIsIHNvIHdlIG11c3Qgc2NhbGUgdG8gYXZvaWQKKwkJICogb3ZlcmZsb3cgaW4gZXhwZih4KS4KKwkJICovCisJCXJldHVybiAoX19sZGV4cF9jZXhwZih6LCAwKSk7CisJfSBlbHNlIHsKKwkJLyoKKwkJICogQ2FzZXMgY292ZXJlZCBoZXJlOgorCQkgKiAgLSAgeCA8IGV4cF9vdmZsIGFuZCBleHAoeCkgd29uJ3Qgb3ZlcmZsb3cgKGNvbW1vbiBjYXNlKQorCQkgKiAgLSAgeCA+IGNleHBfb3ZmbCwgc28gZXhwKHgpICogcyBvdmVyZmxvd3MgZm9yIGFsbCBzID4gMAorCQkgKiAgLSAgeCA9ICstSW5mIChnZW5lcmF0ZWQgYnkgZXhwKCkpCisJCSAqICAtICB4ID0gTmFOIChzcHVyaW91cyBpbmV4YWN0IGV4Y2VwdGlvbiBmcm9tIHkpCisJCSAqLworCQlleHBfeCA9IGV4cGYoeCk7CisJCXJldHVybiAoY3BhY2tmKGV4cF94ICogY29zZih5KSwgZXhwX3ggKiBzaW5mKHkpKSk7CisJfQorfQpkaWZmIC0tZ2l0IGEvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2NpbWFnLmMgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfY2ltYWcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYmY2NzIwCi0tLSAvZGV2L251bGwKKysrIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2NpbWFnLmMKQEAgLTAsMCArMSwzOCBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMDQgU3RlZmFuIEZhcmZlbGVkZXIKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqICRGcmVlQlNEJAorICovCisKKyNpbmNsdWRlIDxjb21wbGV4Lmg+CisjaW5jbHVkZSAibWF0aF9wcml2YXRlLmgiCisKK2RvdWJsZQorY2ltYWcoZG91YmxlIGNvbXBsZXggeikKK3sKKwljb25zdCBkb3VibGVfY29tcGxleCB6MSA9IHsgLmYgPSB6IH07CisKKwlyZXR1cm4gKElNQUdQQVJUKHoxKSk7Cit9CmRpZmYgLS1naXQgYS9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfY2ltYWdmLmMgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfY2ltYWdmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGU0ODNhMgotLS0gL2Rldi9udWxsCisrKyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19jaW1hZ2YuYwpAQCAtMCwwICsxLDM4IEBACisvKi0KKyAqIENvcHlyaWdodCAoYykgMjAwNCBTdGVmYW4gRmFyZmVsZWRlcgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKgorICogJEZyZWVCU0QkCisgKi8KKworI2luY2x1ZGUgPGNvbXBsZXguaD4KKyNpbmNsdWRlICJtYXRoX3ByaXZhdGUuaCIKKworZmxvYXQKK2NpbWFnZihmbG9hdCBjb21wbGV4IHopCit7CisJY29uc3QgZmxvYXRfY29tcGxleCB6MSA9IHsgLmYgPSB6IH07CisKKwlyZXR1cm4gKElNQUdQQVJUKHoxKSk7Cit9CmRpZmYgLS1naXQgYS9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfY2ltYWdsLmMgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfY2ltYWdsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzUwZTk2NwotLS0gL2Rldi9udWxsCisrKyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19jaW1hZ2wuYwpAQCAtMCwwICsxLDM4IEBACisvKi0KKyAqIENvcHlyaWdodCAoYykgMjAwNCBTdGVmYW4gRmFyZmVsZWRlcgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKgorICogJEZyZWVCU0QkCisgKi8KKworI2luY2x1ZGUgPGNvbXBsZXguaD4KKyNpbmNsdWRlICJtYXRoX3ByaXZhdGUuaCIKKworbG9uZyBkb3VibGUKK2NpbWFnbChsb25nIGRvdWJsZSBjb21wbGV4IHopCit7CisJY29uc3QgbG9uZ19kb3VibGVfY29tcGxleCB6MSA9IHsgLmYgPSB6IH07CisKKwlyZXR1cm4gKElNQUdQQVJUKHoxKSk7Cit9CmRpZmYgLS1naXQgYS9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfY29uai5jIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2NvbmouYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NzcwYzI5Ci0tLSAvZGV2L251bGwKKysrIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2NvbmouYwpAQCAtMCwwICsxLDM4IEBACisvKi0KKyAqIENvcHlyaWdodCAoYykgMjAwNCBTdGVmYW4gRmFyZmVsZWRlcgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKgorICogJEZyZWVCU0QkCisgKi8KKworI2luY2x1ZGUgPGNvbXBsZXguaD4KKworI2luY2x1ZGUgIm1hdGhfcHJpdmF0ZS5oIgorCitkb3VibGUgY29tcGxleAorY29uaihkb3VibGUgY29tcGxleCB6KQoreworCisJcmV0dXJuIChjcGFjayhjcmVhbCh6KSwgLWNpbWFnKHopKSk7Cit9CmRpZmYgLS1naXQgYS9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfY29uamYuYyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19jb25qZi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwOTA3NjAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfY29uamYuYwpAQCAtMCwwICsxLDM4IEBACisvKi0KKyAqIENvcHlyaWdodCAoYykgMjAwNCBTdGVmYW4gRmFyZmVsZWRlcgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKgorICogJEZyZWVCU0QkCisgKi8KKworI2luY2x1ZGUgPGNvbXBsZXguaD4KKworI2luY2x1ZGUgIm1hdGhfcHJpdmF0ZS5oIgorCitmbG9hdCBjb21wbGV4Citjb25qZihmbG9hdCBjb21wbGV4IHopCit7CisKKwlyZXR1cm4gKGNwYWNrZihjcmVhbGYoeiksIC1jaW1hZ2YoeikpKTsKK30KZGlmZiAtLWdpdCBhL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19jb25qbC5jIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2NvbmpsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGU0MzFlZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19jb25qbC5jCkBAIC0wLDAgKzEsMzggQEAKKy8qLQorICogQ29weXJpZ2h0IChjKSAyMDA0IFN0ZWZhbiBGYXJmZWxlZGVyCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKiAkRnJlZUJTRCQKKyAqLworCisjaW5jbHVkZSA8Y29tcGxleC5oPgorCisjaW5jbHVkZSAibWF0aF9wcml2YXRlLmgiCisKK2xvbmcgZG91YmxlIGNvbXBsZXgKK2NvbmpsKGxvbmcgZG91YmxlIGNvbXBsZXggeikKK3sKKworCXJldHVybiAoY3BhY2tsKGNyZWFsbCh6KSwgLWNpbWFnbCh6KSkpOworfQpkaWZmIC0tZ2l0IGEvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2NvcHlzaWduLmMgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfY29weXNpZ24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNWYzODcwCi0tLSAvZGV2L251bGwKKysrIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2NvcHlzaWduLmMKQEAgLTAsMCArMSwzMyBAQAorLyogQCgjKXNfY29weXNpZ24uYyA1LjEgOTMvMDkvMjQgKi8KKy8qCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBDb3B5cmlnaHQgKEMpIDE5OTMgYnkgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIERldmVsb3BlZCBhdCBTdW5Qcm8sIGEgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBidXNpbmVzcy4KKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKKyAqIHNvZnR3YXJlIGlzIGZyZWVseSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoaXMgbm90aWNlCisgKiBpcyBwcmVzZXJ2ZWQuCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorX19GQlNESUQoIiRGcmVlQlNEJCIpOworCisvKgorICogY29weXNpZ24oZG91YmxlIHgsIGRvdWJsZSB5KQorICogY29weXNpZ24oeCx5KSByZXR1cm5zIGEgdmFsdWUgd2l0aCB0aGUgbWFnbml0dWRlIG9mIHggYW5kCisgKiB3aXRoIHRoZSBzaWduIGJpdCBvZiB5LgorICovCisKKyNpbmNsdWRlICJtYXRoLmgiCisjaW5jbHVkZSAibWF0aF9wcml2YXRlLmgiCisKK2RvdWJsZQorY29weXNpZ24oZG91YmxlIHgsIGRvdWJsZSB5KQoreworCXVfaW50MzJfdCBoeCxoeTsKKwlHRVRfSElHSF9XT1JEKGh4LHgpOworCUdFVF9ISUdIX1dPUkQoaHkseSk7CisJU0VUX0hJR0hfV09SRCh4LChoeCYweDdmZmZmZmZmKXwoaHkmMHg4MDAwMDAwMCkpOworICAgICAgICByZXR1cm4geDsKK30KZGlmZiAtLWdpdCBhL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19jb3B5c2lnbmYuYyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19jb3B5c2lnbmYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNWNhMWUzCi0tLSAvZGV2L251bGwKKysrIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2NvcHlzaWduZi5jCkBAIC0wLDAgKzEsMzYgQEAKKy8qIHNfY29weXNpZ25mLmMgLS0gZmxvYXQgdmVyc2lvbiBvZiBzX2NvcHlzaWduLmMuCisgKiBDb252ZXJzaW9uIHRvIGZsb2F0IGJ5IElhbiBMYW5jZSBUYXlsb3IsIEN5Z251cyBTdXBwb3J0LCBpYW5AY3lnbnVzLmNvbS4KKyAqLworCisvKgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogQ29weXJpZ2h0IChDKSAxOTkzIGJ5IFN1biBNaWNyb3N5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBEZXZlbG9wZWQgYXQgU3VuUHJvLCBhIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gYnVzaW5lc3MuCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCisgKiBzb2Z0d2FyZSBpcyBmcmVlbHkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGlzIG5vdGljZQorICogaXMgcHJlc2VydmVkLgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJTRCQiKTsKKworLyoKKyAqIGNvcHlzaWduZihmbG9hdCB4LCBmbG9hdCB5KQorICogY29weXNpZ25mKHgseSkgcmV0dXJucyBhIHZhbHVlIHdpdGggdGhlIG1hZ25pdHVkZSBvZiB4IGFuZAorICogd2l0aCB0aGUgc2lnbiBiaXQgb2YgeS4KKyAqLworCisjaW5jbHVkZSAibWF0aC5oIgorI2luY2x1ZGUgIm1hdGhfcHJpdmF0ZS5oIgorCitmbG9hdAorY29weXNpZ25mKGZsb2F0IHgsIGZsb2F0IHkpCit7CisJdV9pbnQzMl90IGl4LGl5OworCUdFVF9GTE9BVF9XT1JEKGl4LHgpOworCUdFVF9GTE9BVF9XT1JEKGl5LHkpOworCVNFVF9GTE9BVF9XT1JEKHgsKGl4JjB4N2ZmZmZmZmYpfChpeSYweDgwMDAwMDAwKSk7CisgICAgICAgIHJldHVybiB4OworfQpkaWZmIC0tZ2l0IGEvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2NvcHlzaWdubC5jIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2NvcHlzaWdubC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkMzlmODQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfY29weXNpZ25sLmMKQEAgLTAsMCArMSw0MiBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMDQgU3RlZmFuIEZhcmZlbGVkZXIKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqICRGcmVlQlNEJAorICovCisKKyNpbmNsdWRlIDxtYXRoLmg+CisKKyNpbmNsdWRlICJmcG1hdGguaCIKKworbG9uZyBkb3VibGUKK2NvcHlzaWdubChsb25nIGRvdWJsZSB4LCBsb25nIGRvdWJsZSB5KQoreworCXVuaW9uIElFRUVsMmJpdHMgdXgsIHV5OworCisJdXguZSA9IHg7CisJdXkuZSA9IHk7CisJdXguYml0cy5zaWduID0gdXkuYml0cy5zaWduOworCXJldHVybiAodXguZSk7Cit9CmRpZmYgLS1naXQgYS9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfY29zLmMgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfY29zLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjk4MDRmNAotLS0gL2Rldi9udWxsCisrKyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19jb3MuYwpAQCAtMCwwICsxLDg5IEBACisvKiBAKCMpc19jb3MuYyA1LjEgOTMvMDkvMjQgKi8KKy8qCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBDb3B5cmlnaHQgKEMpIDE5OTMgYnkgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIERldmVsb3BlZCBhdCBTdW5Qcm8sIGEgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBidXNpbmVzcy4KKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKKyAqIHNvZnR3YXJlIGlzIGZyZWVseSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoaXMgbm90aWNlCisgKiBpcyBwcmVzZXJ2ZWQuCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorX19GQlNESUQoIiRGcmVlQlNEJCIpOworCisvKiBjb3MoeCkKKyAqIFJldHVybiBjb3NpbmUgZnVuY3Rpb24gb2YgeC4KKyAqCisgKiBrZXJuZWwgZnVuY3Rpb246CisgKglfX2tlcm5lbF9zaW4JCS4uLiBzaW5lIGZ1bmN0aW9uIG9uIFstcGkvNCxwaS80XQorICoJX19rZXJuZWxfY29zCQkuLi4gY29zaW5lIGZ1bmN0aW9uIG9uIFstcGkvNCxwaS80XQorICoJX19pZWVlNzU0X3JlbV9waW8yCS4uLiBhcmd1bWVudCByZWR1Y3Rpb24gcm91dGluZQorICoKKyAqIE1ldGhvZC4KKyAqICAgICAgTGV0IFMsQyBhbmQgVCBkZW5vdGUgdGhlIHNpbiwgY29zIGFuZCB0YW4gcmVzcGVjdGl2ZWx5IG9uCisgKglbLVBJLzQsICtQSS80XS4gUmVkdWNlIHRoZSBhcmd1bWVudCB4IHRvIHkxK3kyID0geC1rKnBpLzIKKyAqCWluIFstcGkvNCAsICtwaS80XSwgYW5kIGxldCBuID0gayBtb2QgNC4KKyAqCVdlIGhhdmUKKyAqCisgKiAgICAgICAgICBuICAgICAgICBzaW4oeCkgICAgICBjb3MoeCkgICAgICAgIHRhbih4KQorICogICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCSAgICAwCSAgICAgICBTCSAgIEMJCSBUCisgKgkgICAgMQkgICAgICAgQwkgIC1TCQktMS9UCisgKgkgICAgMgkgICAgICAtUwkgIC1DCQkgVAorICoJICAgIDMJICAgICAgLUMJICAgUwkJLTEvVAorICogICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBTcGVjaWFsIGNhc2VzOgorICogICAgICBMZXQgdHJpZyBiZSBhbnkgb2Ygc2luLCBjb3MsIG9yIHRhbi4KKyAqICAgICAgdHJpZygrLUlORikgIGlzIE5hTiwgd2l0aCBzaWduYWxzOworICogICAgICB0cmlnKE5hTikgICAgaXMgdGhhdCBOYU47CisgKgorICogQWNjdXJhY3k6CisgKglUUklHKHgpIHJldHVybnMgdHJpZyh4KSBuZWFybHkgcm91bmRlZAorICovCisKKyNpbmNsdWRlIDxmbG9hdC5oPgorCisjaW5jbHVkZSAibWF0aC5oIgorI2RlZmluZSBJTkxJTkVfUkVNX1BJTzIKKyNpbmNsdWRlICJtYXRoX3ByaXZhdGUuaCIKKyNpbmNsdWRlICJlX3JlbV9waW8yLmMiCisKK2RvdWJsZQorY29zKGRvdWJsZSB4KQoreworCWRvdWJsZSB5WzJdLHo9MC4wOworCWludDMyX3QgbiwgaXg7CisKKyAgICAvKiBIaWdoIHdvcmQgb2YgeC4gKi8KKwlHRVRfSElHSF9XT1JEKGl4LHgpOworCisgICAgLyogfHh8IH48IHBpLzQgKi8KKwlpeCAmPSAweDdmZmZmZmZmOworCWlmKGl4IDw9IDB4M2ZlOTIxZmIpIHsKKwkgICAgaWYoaXg8MHgzZTQ2YTA5ZSkJCQkvKiBpZiB4IDwgMioqLTI3ICogc3FydCgyKSAqLworCQlpZigoKGludCl4KT09MCkgcmV0dXJuIDEuMDsJLyogZ2VuZXJhdGUgaW5leGFjdCAqLworCSAgICByZXR1cm4gX19rZXJuZWxfY29zKHgseik7CisJfQorCisgICAgLyogY29zKEluZiBvciBOYU4pIGlzIE5hTiAqLworCWVsc2UgaWYgKGl4Pj0weDdmZjAwMDAwKSByZXR1cm4geC14OworCisgICAgLyogYXJndW1lbnQgcmVkdWN0aW9uIG5lZWRlZCAqLworCWVsc2UgeworCSAgICBuID0gX19pZWVlNzU0X3JlbV9waW8yKHgseSk7CisJICAgIHN3aXRjaChuJjMpIHsKKwkJY2FzZSAwOiByZXR1cm4gIF9fa2VybmVsX2Nvcyh5WzBdLHlbMV0pOworCQljYXNlIDE6IHJldHVybiAtX19rZXJuZWxfc2luKHlbMF0seVsxXSwxKTsKKwkJY2FzZSAyOiByZXR1cm4gLV9fa2VybmVsX2Nvcyh5WzBdLHlbMV0pOworCQlkZWZhdWx0OgorCQkgICAgICAgIHJldHVybiAgX19rZXJuZWxfc2luKHlbMF0seVsxXSwxKTsKKwkgICAgfQorCX0KK30KKworI2lmIChMREJMX01BTlRfRElHID09IDUzKQorX193ZWFrX3JlZmVyZW5jZShjb3MsIGNvc2wpOworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfY29zZi5jIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2Nvc2YuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNzAxZmQyCi0tLSAvZGV2L251bGwKKysrIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2Nvc2YuYwpAQCAtMCwwICsxLDg3IEBACisvKiBzX2Nvc2YuYyAtLSBmbG9hdCB2ZXJzaW9uIG9mIHNfY29zLmMuCisgKiBDb252ZXJzaW9uIHRvIGZsb2F0IGJ5IElhbiBMYW5jZSBUYXlsb3IsIEN5Z251cyBTdXBwb3J0LCBpYW5AY3lnbnVzLmNvbS4KKyAqIE9wdGltaXplZCBieSBCcnVjZSBELiBFdmFucy4KKyAqLworCisvKgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogQ29weXJpZ2h0IChDKSAxOTkzIGJ5IFN1biBNaWNyb3N5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBEZXZlbG9wZWQgYXQgU3VuUHJvLCBhIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gYnVzaW5lc3MuCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCisgKiBzb2Z0d2FyZSBpcyBmcmVlbHkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGlzIG5vdGljZQorICogaXMgcHJlc2VydmVkLgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJTRCQiKTsKKworI2luY2x1ZGUgPGZsb2F0Lmg+CisKKyNpbmNsdWRlICJtYXRoLmgiCisjZGVmaW5lCUlOTElORV9LRVJORUxfQ09TREYKKyNkZWZpbmUJSU5MSU5FX0tFUk5FTF9TSU5ERgorI2RlZmluZSBJTkxJTkVfUkVNX1BJTzJGCisjaW5jbHVkZSAibWF0aF9wcml2YXRlLmgiCisjaW5jbHVkZSAiZV9yZW1fcGlvMmYuYyIKKyNpbmNsdWRlICJrX2Nvc2YuYyIKKyNpbmNsdWRlICJrX3NpbmYuYyIKKworLyogU21hbGwgbXVsdGlwbGVzIG9mIHBpLzIgcm91bmRlZCB0byBkb3VibGUgcHJlY2lzaW9uLiAqLworc3RhdGljIGNvbnN0IGRvdWJsZQorYzFwaW8yID0gMSpNX1BJXzIsCQkJLyogMHgzRkY5MjFGQiwgMHg1NDQ0MkQxOCAqLworYzJwaW8yID0gMipNX1BJXzIsCQkJLyogMHg0MDA5MjFGQiwgMHg1NDQ0MkQxOCAqLworYzNwaW8yID0gMypNX1BJXzIsCQkJLyogMHg0MDEyRDk3QywgMHg3RjMzMjFEMiAqLworYzRwaW8yID0gNCpNX1BJXzI7CQkJLyogMHg0MDE5MjFGQiwgMHg1NDQ0MkQxOCAqLworCitmbG9hdAorY29zZihmbG9hdCB4KQoreworCWRvdWJsZSB5OworCWludDMyX3QgbiwgaHgsIGl4OworCisJR0VUX0ZMT0FUX1dPUkQoaHgseCk7CisJaXggPSBoeCAmIDB4N2ZmZmZmZmY7CisKKwlpZihpeCA8PSAweDNmNDkwZmRhKSB7CQkvKiB8eHwgfjw9IHBpLzQgKi8KKwkgICAgaWYoaXg8MHgzOTgwMDAwMCkJCS8qIHx4fCA8IDIqKi0xMiAqLworCQlpZigoKGludCl4KT09MCkgcmV0dXJuIDEuMDsJLyogMSB3aXRoIGluZXhhY3QgaWYgeCAhPSAwICovCisJICAgIHJldHVybiBfX2tlcm5lbF9jb3NkZih4KTsKKwl9CisJaWYoaXg8PTB4NDA3YjUzZDEpIHsJCS8qIHx4fCB+PD0gNSpwaS80ICovCisJICAgIGlmKGl4PjB4NDAxNmNiZTMpCQkvKiB8eHwgIH4+IDMqcGkvNCAqLworCQlyZXR1cm4gLV9fa2VybmVsX2Nvc2RmKHggKyAoaHggPiAwID8gLWMycGlvMiA6IGMycGlvMikpOworCSAgICBlbHNlIHsKKwkJaWYoaHg+MCkKKwkJICAgIHJldHVybiBfX2tlcm5lbF9zaW5kZihjMXBpbzIgLSB4KTsKKwkJZWxzZQorCQkgICAgcmV0dXJuIF9fa2VybmVsX3NpbmRmKHggKyBjMXBpbzIpOworCSAgICB9CisJfQorCWlmKGl4PD0weDQwZTIzMWQ1KSB7CQkvKiB8eHwgfjw9IDkqcGkvNCAqLworCSAgICBpZihpeD4weDQwYWZlZGRmKQkJLyogfHh8ICB+PiA3KnBpLzQgKi8KKwkJcmV0dXJuIF9fa2VybmVsX2Nvc2RmKHggKyAoaHggPiAwID8gLWM0cGlvMiA6IGM0cGlvMikpOworCSAgICBlbHNlIHsKKwkJaWYoaHg+MCkKKwkJICAgIHJldHVybiBfX2tlcm5lbF9zaW5kZih4IC0gYzNwaW8yKTsKKwkJZWxzZQorCQkgICAgcmV0dXJuIF9fa2VybmVsX3NpbmRmKC1jM3BpbzIgLSB4KTsKKwkgICAgfQorCX0KKworICAgIC8qIGNvcyhJbmYgb3IgTmFOKSBpcyBOYU4gKi8KKwllbHNlIGlmIChpeD49MHg3ZjgwMDAwMCkgcmV0dXJuIHgteDsKKworICAgIC8qIGdlbmVyYWwgYXJndW1lbnQgcmVkdWN0aW9uIG5lZWRlZCAqLworCWVsc2UgeworCSAgICBuID0gX19pZWVlNzU0X3JlbV9waW8yZih4LCZ5KTsKKwkgICAgc3dpdGNoKG4mMykgeworCQljYXNlIDA6IHJldHVybiAgX19rZXJuZWxfY29zZGYoeSk7CisJCWNhc2UgMTogcmV0dXJuICBfX2tlcm5lbF9zaW5kZigteSk7CisJCWNhc2UgMjogcmV0dXJuIC1fX2tlcm5lbF9jb3NkZih5KTsKKwkJZGVmYXVsdDoKKwkJICAgICAgICByZXR1cm4gIF9fa2VybmVsX3NpbmRmKHkpOworCSAgICB9CisJfQorfQpkaWZmIC0tZ2l0IGEvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2Nvc2wuYyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19jb3NsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjJlNzRjZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19jb3NsLmMKQEAgLTAsMCArMSw5NSBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgU3RldmVuIEcuIEthcmdsCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSB1bm1vZGlmaWVkLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucywgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUworICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorX19GQlNESUQoIiRGcmVlQlNEJCIpOworCisvKgorICogTGltaXRlZCB0ZXN0aW5nIG9uIHBzZXVkb3JhbmRvbSBudW1iZXJzIGRyYXduIHdpdGhpbiBbLTJlODo0ZThdIHNob3dzCisgKiBhbiBhY2N1cmFjeSBvZiA8PSAwLjc0MTIgVUxQLgorICovCisKKyNpbmNsdWRlIDxmbG9hdC5oPgorI2lmZGVmIF9faTM4Nl9fCisjaW5jbHVkZSA8aWVlZWZwLmg+CisjZW5kaWYKKworI2luY2x1ZGUgIm1hdGguaCIKKyNpbmNsdWRlICJtYXRoX3ByaXZhdGUuaCIKKyNpZiBMREJMX01BTlRfRElHID09IDY0CisjaW5jbHVkZSAiLi4vbGQ4MC9lX3JlbV9waW8ybC5oIgorI2VsaWYgTERCTF9NQU5UX0RJRyA9PSAxMTMKKyNpbmNsdWRlICIuLi9sZDEyOC9lX3JlbV9waW8ybC5oIgorI2Vsc2UKKyNlcnJvciAiVW5zdXBwb3J0ZWQgbG9uZyBkb3VibGUgZm9ybWF0IgorI2VuZGlmCisKK2xvbmcgZG91YmxlCitjb3NsKGxvbmcgZG91YmxlIHgpCit7CisJdW5pb24gSUVFRWwyYml0cyB6OworCWludCBlMDsKKwlsb25nIGRvdWJsZSB5WzJdOworCWxvbmcgZG91YmxlIGhpLCBsbzsKKworCXouZSA9IHg7CisJei5iaXRzLnNpZ24gPSAwOworCisJLyogSWYgeCA9ICstMCBvciB4IGlzIGEgc3Vibm9ybWFsIG51bWJlciwgdGhlbiBjb3MoeCkgPSAxICovCisJaWYgKHouYml0cy5leHAgPT0gMCkKKwkJcmV0dXJuICgxLjApOworCisJLyogSWYgeCA9IE5hTiBvciBJbmYsIHRoZW4gY29zKHgpID0gTmFOLiAqLworCWlmICh6LmJpdHMuZXhwID09IDMyNzY3KQorCQlyZXR1cm4gKCh4IC0geCkgLyAoeCAtIHgpKTsKKworCUVOVEVSSSgpOworCisJLyogT3B0aW1pemUgdGhlIGNhc2Ugd2hlcmUgeCBpcyBhbHJlYWR5IHdpdGhpbiByYW5nZS4gKi8KKwlpZiAoei5lIDwgTV9QSV80KQorCQlSRVRVUk5JKF9fa2VybmVsX2Nvc2woei5lLCAwKSk7CisKKwllMCA9IF9faWVlZTc1NF9yZW1fcGlvMmwoeCwgeSk7CisJaGkgPSB5WzBdOworCWxvID0geVsxXTsKKworCXN3aXRjaCAoZTAgJiAzKSB7CisJY2FzZSAwOgorCSAgICBoaSA9IF9fa2VybmVsX2Nvc2woaGksIGxvKTsKKwkgICAgYnJlYWs7CisJY2FzZSAxOgorCSAgICBoaSA9IC0gX19rZXJuZWxfc2lubChoaSwgbG8sIDEpOworCSAgICBicmVhazsKKwljYXNlIDI6CisJICAgIGhpID0gLSBfX2tlcm5lbF9jb3NsKGhpLCBsbyk7CisJICAgIGJyZWFrOworCWNhc2UgMzoKKwkgICAgaGkgPSBfX2tlcm5lbF9zaW5sKGhpLCBsbywgMSk7CisJICAgIGJyZWFrOworCX0KKwkKKwlSRVRVUk5JKGhpKTsKK30KZGlmZiAtLWdpdCBhL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19jcHJvai5jIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2Nwcm9qLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGU5NDA0YwotLS0gL2Rldi9udWxsCisrKyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19jcHJvai5jCkBAIC0wLDAgKzEsNDcgQEAKKy8qLQorICogQ29weXJpZ2h0IChjKSAyMDA4IERhdmlkIFNjaHVsdHogPGRhc0BGcmVlQlNELk9SRz4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorX19GQlNESUQoIiRGcmVlQlNEJCIpOworCisjaW5jbHVkZSA8Y29tcGxleC5oPgorI2luY2x1ZGUgPG1hdGguaD4KKworI2luY2x1ZGUgIm1hdGhfcHJpdmF0ZS5oIgorCitkb3VibGUgY29tcGxleAorY3Byb2ooZG91YmxlIGNvbXBsZXggeikKK3sKKworCWlmICghaXNpbmYoY3JlYWwoeikpICYmICFpc2luZihjaW1hZyh6KSkpCisJCXJldHVybiAoeik7CisJZWxzZQorCQlyZXR1cm4gKGNwYWNrKElORklOSVRZLCBjb3B5c2lnbigwLjAsIGNpbWFnKHopKSkpOworfQorCisjaWYgTERCTF9NQU5UX0RJRyA9PSA1MworX193ZWFrX3JlZmVyZW5jZShjcHJvaiwgY3Byb2psKTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2Nwcm9qZi5jIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2Nwcm9qZi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4ZWE3N2IKLS0tIC9kZXYvbnVsbAorKysgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfY3Byb2pmLmMKQEAgLTAsMCArMSw0MyBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggRGF2aWQgU2NodWx0eiA8ZGFzQEZyZWVCU0QuT1JHPgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CitfX0ZCU0RJRCgiJEZyZWVCU0QkIik7CisKKyNpbmNsdWRlIDxjb21wbGV4Lmg+CisjaW5jbHVkZSA8bWF0aC5oPgorCisjaW5jbHVkZSAibWF0aF9wcml2YXRlLmgiCisKK2Zsb2F0IGNvbXBsZXgKK2Nwcm9qZihmbG9hdCBjb21wbGV4IHopCit7CisKKwlpZiAoIWlzaW5mKGNyZWFsZih6KSkgJiYgIWlzaW5mKGNpbWFnZih6KSkpCisJCXJldHVybiAoeik7CisJZWxzZQorCQlyZXR1cm4gKGNwYWNrZihJTkZJTklUWSwgY29weXNpZ25mKDAuMCwgY2ltYWdmKHopKSkpOworfQpkaWZmIC0tZ2l0IGEvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2Nwcm9qbC5jIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2Nwcm9qbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3Mzg1YmMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfY3Byb2psLmMKQEAgLTAsMCArMSw0MyBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggRGF2aWQgU2NodWx0eiA8ZGFzQEZyZWVCU0QuT1JHPgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CitfX0ZCU0RJRCgiJEZyZWVCU0QkIik7CisKKyNpbmNsdWRlIDxjb21wbGV4Lmg+CisjaW5jbHVkZSA8bWF0aC5oPgorCisjaW5jbHVkZSAibWF0aF9wcml2YXRlLmgiCisKK2xvbmcgZG91YmxlIGNvbXBsZXgKK2Nwcm9qbChsb25nIGRvdWJsZSBjb21wbGV4IHopCit7CisKKwlpZiAoIWlzaW5mKGNyZWFsbCh6KSkgJiYgIWlzaW5mKGNpbWFnbCh6KSkpCisJCXJldHVybiAoeik7CisJZWxzZQorCQlyZXR1cm4gKGNwYWNrbChJTkZJTklUWSwgY29weXNpZ25sKDAuMCwgY2ltYWdsKHopKSkpOworfQpkaWZmIC0tZ2l0IGEvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2NyZWFsLmMgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfY3JlYWwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMjk1ZmYyCi0tLSAvZGV2L251bGwKKysrIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2NyZWFsLmMKQEAgLTAsMCArMSwzNSBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMDQgU3RlZmFuIEZhcmZlbGVkZXIKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqICRGcmVlQlNEJAorICovCisKKyNpbmNsdWRlIDxjb21wbGV4Lmg+CisKK2RvdWJsZQorY3JlYWwoZG91YmxlIGNvbXBsZXggeikKK3sKKwlyZXR1cm4gejsKK30KZGlmZiAtLWdpdCBhL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19jcmVhbGYuYyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19jcmVhbGYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODE5Yjg2Ci0tLSAvZGV2L251bGwKKysrIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2NyZWFsZi5jCkBAIC0wLDAgKzEsMzUgQEAKKy8qLQorICogQ29weXJpZ2h0IChjKSAyMDA0IFN0ZWZhbiBGYXJmZWxlZGVyCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKiAkRnJlZUJTRCQKKyAqLworCisjaW5jbHVkZSA8Y29tcGxleC5oPgorCitmbG9hdAorY3JlYWxmKGZsb2F0IGNvbXBsZXggeikKK3sKKwlyZXR1cm4gejsKK30KZGlmZiAtLWdpdCBhL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19jcmVhbGwuYyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19jcmVhbGwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDk0NmY5Ci0tLSAvZGV2L251bGwKKysrIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2NyZWFsbC5jCkBAIC0wLDAgKzEsMzUgQEAKKy8qLQorICogQ29weXJpZ2h0IChjKSAyMDA0IFN0ZWZhbiBGYXJmZWxlZGVyCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKiAkRnJlZUJTRCQKKyAqLworCisjaW5jbHVkZSA8Y29tcGxleC5oPgorCitsb25nIGRvdWJsZQorY3JlYWxsKGxvbmcgZG91YmxlIGNvbXBsZXggeikKK3sKKwlyZXR1cm4gejsKK30KZGlmZiAtLWdpdCBhL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19jc2luaC5jIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2NzaW5oLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzE5MmYzMAotLS0gL2Rldi9udWxsCisrKyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19jc2luaC5jCkBAIC0wLDAgKzEsMTU3IEBACisvKi0KKyAqIENvcHlyaWdodCAoYykgMjAwNSBCcnVjZSBELiBFdmFucyBhbmQgU3RldmVuIEcuIEthcmdsCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSB1bm1vZGlmaWVkLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucywgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUworICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoKKyAqIEh5cGVyYm9saWMgc2luZSBvZiBhIGNvbXBsZXggYXJndW1lbnQgeiA9IHggKyBpIHkuCisgKgorICogc2luaCh6KSA9IHNpbmgoeCtpeSkKKyAqICAgICAgICAgPSBzaW5oKHgpIGNvcyh5KSArIGkgY29zaCh4KSBzaW4oeSkuCisgKgorICogRXhjZXB0aW9uYWwgdmFsdWVzIGFyZSBub3RlZCBpbiB0aGUgY29tbWVudHMgd2l0aGluIHRoZSBzb3VyY2UgY29kZS4KKyAqIFRoZXNlIHZhbHVlcyBhbmQgdGhlIHJldHVybiB2YWx1ZSB3ZXJlIHRha2VuIGZyb20gbjExMjQucGRmLgorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJTRCQiKTsKKworI2luY2x1ZGUgPGNvbXBsZXguaD4KKyNpbmNsdWRlIDxtYXRoLmg+CisKKyNpbmNsdWRlICJtYXRoX3ByaXZhdGUuaCIKKworc3RhdGljIGNvbnN0IGRvdWJsZSBodWdlID0gMHgxcDEwMjM7CisKK2RvdWJsZSBjb21wbGV4Citjc2luaChkb3VibGUgY29tcGxleCB6KQoreworCWRvdWJsZSB4LCB5LCBoOworCWludDMyX3QgaHgsIGh5LCBpeCwgaXksIGx4LCBseTsKKworCXggPSBjcmVhbCh6KTsKKwl5ID0gY2ltYWcoeik7CisKKwlFWFRSQUNUX1dPUkRTKGh4LCBseCwgeCk7CisJRVhUUkFDVF9XT1JEUyhoeSwgbHksIHkpOworCisJaXggPSAweDdmZmZmZmZmICYgaHg7CisJaXkgPSAweDdmZmZmZmZmICYgaHk7CisKKwkvKiBIYW5kbGUgdGhlIG5lYXJseS1ub24tZXhjZXB0aW9uYWwgY2FzZXMgd2hlcmUgeCBhbmQgeSBhcmUgZmluaXRlLiAqLworCWlmIChpeCA8IDB4N2ZmMDAwMDAgJiYgaXkgPCAweDdmZjAwMDAwKSB7CisJCWlmICgoaXkgfCBseSkgPT0gMCkKKwkJCXJldHVybiAoY3BhY2soc2luaCh4KSwgeSkpOworCQlpZiAoaXggPCAweDQwMzYwMDAwKQkvKiBzbWFsbCB4OiBub3JtYWwgY2FzZSAqLworCQkJcmV0dXJuIChjcGFjayhzaW5oKHgpICogY29zKHkpLCBjb3NoKHgpICogc2luKHkpKSk7CisKKwkJLyogfHh8ID49IDIyLCBzbyBjb3NoKHgpIH49IGV4cCh8eHwpICovCisJCWlmIChpeCA8IDB4NDA4NjJlNDIpIHsKKwkJCS8qIHggPCA3MTA6IGV4cCh8eHwpIHdvbid0IG92ZXJmbG93ICovCisJCQloID0gZXhwKGZhYnMoeCkpICogMC41OworCQkJcmV0dXJuIChjcGFjayhjb3B5c2lnbihoLCB4KSAqIGNvcyh5KSwgaCAqIHNpbih5KSkpOworCQl9IGVsc2UgaWYgKGl4IDwgMHg0MDk2YmJhYSkgeworCQkJLyogeCA8IDE0NTU6IHNjYWxlIHRvIGF2b2lkIG92ZXJmbG93ICovCisJCQl6ID0gX19sZGV4cF9jZXhwKGNwYWNrKGZhYnMoeCksIHkpLCAtMSk7CisJCQlyZXR1cm4gKGNwYWNrKGNyZWFsKHopICogY29weXNpZ24oMSwgeCksIGNpbWFnKHopKSk7CisJCX0gZWxzZSB7CisJCQkvKiB4ID49IDE0NTU6IHRoZSByZXN1bHQgYWx3YXlzIG92ZXJmbG93cyAqLworCQkJaCA9IGh1Z2UgKiB4OworCQkJcmV0dXJuIChjcGFjayhoICogY29zKHkpLCBoICogaCAqIHNpbih5KSkpOworCQl9CisJfQorCisJLyoKKwkgKiBzaW5oKCstMCArLSBJIEluZikgPSBzaWduKGQoKy0wLCBkTmFOKSkwICsgSSBkTmFOLgorCSAqIFRoZSBzaWduIG9mIDAgaW4gdGhlIHJlc3VsdCBpcyB1bnNwZWNpZmllZC4gIENob2ljZSA9IG5vcm1hbGx5CisJICogdGhlIHNhbWUgYXMgZE5hTi4gIFJhaXNlIHRoZSBpbnZhbGlkIGZsb2F0aW5nLXBvaW50IGV4Y2VwdGlvbi4KKwkgKgorCSAqIHNpbmgoKy0wICstIEkgTmFOKSA9IHNpZ24oZCgrLTAsIE5hTikpMCArIEkgZChOYU4pLgorCSAqIFRoZSBzaWduIG9mIDAgaW4gdGhlIHJlc3VsdCBpcyB1bnNwZWNpZmllZC4gIENob2ljZSA9IG5vcm1hbGx5CisJICogdGhlIHNhbWUgYXMgZChOYU4pLgorCSAqLworCWlmICgoaXggfCBseCkgPT0gMCAmJiBpeSA+PSAweDdmZjAwMDAwKQorCQlyZXR1cm4gKGNwYWNrKGNvcHlzaWduKDAsIHggKiAoeSAtIHkpKSwgeSAtIHkpKTsKKworCS8qCisJICogc2luaCgrLUluZiArLSBJIDApID0gKy1JbmYgKyBJICstMC4KKwkgKgorCSAqIHNpbmgoTmFOICstIEkgMCkgICA9IGQoTmFOKSArIEkgKy0wLgorCSAqLworCWlmICgoaXkgfCBseSkgPT0gMCAmJiBpeCA+PSAweDdmZjAwMDAwKSB7CisJCWlmICgoKGh4ICYgMHhmZmZmZikgfCBseCkgPT0gMCkKKwkJCXJldHVybiAoY3BhY2soeCwgeSkpOworCQlyZXR1cm4gKGNwYWNrKHgsIGNvcHlzaWduKDAsIHkpKSk7CisJfQorCisJLyoKKwkgKiBzaW5oKHggKy0gSSBJbmYpID0gZE5hTiArIEkgZE5hTi4KKwkgKiBSYWlzZSB0aGUgaW52YWxpZCBmbG9hdGluZy1wb2ludCBleGNlcHRpb24gZm9yIGZpbml0ZSBub256ZXJvIHguCisJICoKKwkgKiBzaW5oKHggKyBJIE5hTikgPSBkKE5hTikgKyBJIGQoTmFOKS4KKwkgKiBPcHRpb25hbGx5IHJhaXNlcyB0aGUgaW52YWxpZCBmbG9hdGluZy1wb2ludCBleGNlcHRpb24gZm9yIGZpbml0ZQorCSAqIG5vbnplcm8geC4gIENob2ljZSA9IGRvbid0IHJhaXNlIChleGNlcHQgZm9yIHNpZ25hbGluZyBOYU5zKS4KKwkgKi8KKwlpZiAoaXggPCAweDdmZjAwMDAwICYmIGl5ID49IDB4N2ZmMDAwMDApCisJCXJldHVybiAoY3BhY2soeSAtIHksIHggKiAoeSAtIHkpKSk7CisKKwkvKgorCSAqIHNpbmgoKy1JbmYgKyBJIE5hTikgID0gKy1JbmYgKyBJIGQoTmFOKS4KKwkgKiBUaGUgc2lnbiBvZiBJbmYgaW4gdGhlIHJlc3VsdCBpcyB1bnNwZWNpZmllZC4gIENob2ljZSA9IG5vcm1hbGx5CisJICogdGhlIHNhbWUgYXMgZChOYU4pLgorCSAqCisJICogc2luaCgrLUluZiArLSBJIEluZikgPSArSW5mICsgSSBkTmFOLgorCSAqIFRoZSBzaWduIG9mIEluZiBpbiB0aGUgcmVzdWx0IGlzIHVuc3BlY2lmaWVkLiAgQ2hvaWNlID0gYWx3YXlzICsuCisJICogUmFpc2UgdGhlIGludmFsaWQgZmxvYXRpbmctcG9pbnQgZXhjZXB0aW9uLgorCSAqCisJICogc2luaCgrLUluZiArIEkgeSkgICA9ICstSW5mIGNvcyh5KSArIEkgSW5mIHNpbih5KQorCSAqLworCWlmIChpeCA+PSAweDdmZjAwMDAwICYmICgoaHggJiAweGZmZmZmKSB8IGx4KSA9PSAwKSB7CisJCWlmIChpeSA+PSAweDdmZjAwMDAwKQorCQkJcmV0dXJuIChjcGFjayh4ICogeCwgeCAqICh5IC0geSkpKTsKKwkJcmV0dXJuIChjcGFjayh4ICogY29zKHkpLCBJTkZJTklUWSAqIHNpbih5KSkpOworCX0KKworCS8qCisJICogc2luaChOYU4gKyBJIE5hTikgID0gZChOYU4pICsgSSBkKE5hTikuCisJICoKKwkgKiBzaW5oKE5hTiArLSBJIEluZikgPSBkKE5hTikgKyBJIGQoTmFOKS4KKwkgKiBPcHRpb25hbGx5IHJhaXNlcyB0aGUgaW52YWxpZCBmbG9hdGluZy1wb2ludCBleGNlcHRpb24uCisJICogQ2hvaWNlID0gcmFpc2UuCisJICoKKwkgKiBzaW5oKE5hTiArIEkgeSkgICAgPSBkKE5hTikgKyBJIGQoTmFOKS4KKwkgKiBPcHRpb25hbGx5IHJhaXNlcyB0aGUgaW52YWxpZCBmbG9hdGluZy1wb2ludCBleGNlcHRpb24gZm9yIGZpbml0ZQorCSAqIG5vbnplcm8geS4gIENob2ljZSA9IGRvbid0IHJhaXNlIChleGNlcHQgZm9yIHNpZ25hbGluZyBOYU5zKS4KKwkgKi8KKwlyZXR1cm4gKGNwYWNrKCh4ICogeCkgKiAoeSAtIHkpLCAoeCArIHgpICogKHkgLSB5KSkpOworfQorCitkb3VibGUgY29tcGxleAorY3Npbihkb3VibGUgY29tcGxleCB6KQoreworCisJLyogY3Npbih6KSA9IC1JICogY3NpbmgoSSAqIHopICovCisJeiA9IGNzaW5oKGNwYWNrKC1jaW1hZyh6KSwgY3JlYWwoeikpKTsKKwlyZXR1cm4gKGNwYWNrKGNpbWFnKHopLCAtY3JlYWwoeikpKTsKK30KZGlmZiAtLWdpdCBhL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19jc2luaGYuYyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19jc2luaGYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNTIzMTI1Ci0tLSAvZGV2L251bGwKKysrIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2NzaW5oZi5jCkBAIC0wLDAgKzEsMTA1IEBACisvKi0KKyAqIENvcHlyaWdodCAoYykgMjAwNSBCcnVjZSBELiBFdmFucyBhbmQgU3RldmVuIEcuIEthcmdsCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSB1bm1vZGlmaWVkLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucywgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUworICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoKKyAqIEh5cGVyYm9saWMgc2luZSBvZiBhIGNvbXBsZXggYXJndW1lbnQgei4gIFNlZSBzX2NzaW5oLmMgZm9yIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorX19GQlNESUQoIiRGcmVlQlNEJCIpOworCisjaW5jbHVkZSA8Y29tcGxleC5oPgorI2luY2x1ZGUgPG1hdGguaD4KKworI2luY2x1ZGUgIm1hdGhfcHJpdmF0ZS5oIgorCitzdGF0aWMgY29uc3QgZmxvYXQgaHVnZSA9IDB4MXAxMjc7CisKK2Zsb2F0IGNvbXBsZXgKK2NzaW5oZihmbG9hdCBjb21wbGV4IHopCit7CisJZmxvYXQgeCwgeSwgaDsKKwlpbnQzMl90IGh4LCBoeSwgaXgsIGl5OworCisJeCA9IGNyZWFsZih6KTsKKwl5ID0gY2ltYWdmKHopOworCisJR0VUX0ZMT0FUX1dPUkQoaHgsIHgpOworCUdFVF9GTE9BVF9XT1JEKGh5LCB5KTsKKworCWl4ID0gMHg3ZmZmZmZmZiAmIGh4OworCWl5ID0gMHg3ZmZmZmZmZiAmIGh5OworCisJaWYgKGl4IDwgMHg3ZjgwMDAwMCAmJiBpeSA8IDB4N2Y4MDAwMDApIHsKKwkJaWYgKGl5ID09IDApCisJCQlyZXR1cm4gKGNwYWNrZihzaW5oZih4KSwgeSkpOworCQlpZiAoaXggPCAweDQxMTAwMDAwKQkvKiBzbWFsbCB4OiBub3JtYWwgY2FzZSAqLworCQkJcmV0dXJuIChjcGFja2Yoc2luaGYoeCkgKiBjb3NmKHkpLCBjb3NoZih4KSAqIHNpbmYoeSkpKTsKKworCQkvKiB8eHwgPj0gOSwgc28gY29zaCh4KSB+PSBleHAofHh8KSAqLworCQlpZiAoaXggPCAweDQyYjE3MjE4KSB7CisJCQkvKiB4IDwgODguNzogZXhwZih8eHwpIHdvbid0IG92ZXJmbG93ICovCisJCQloID0gZXhwZihmYWJzZih4KSkgKiAwLjVmOworCQkJcmV0dXJuIChjcGFja2YoY29weXNpZ25mKGgsIHgpICogY29zZih5KSwgaCAqIHNpbmYoeSkpKTsKKwkJfSBlbHNlIGlmIChpeCA8IDB4NDM0MGIxZTcpIHsKKwkJCS8qIHggPCAxOTIuNzogc2NhbGUgdG8gYXZvaWQgb3ZlcmZsb3cgKi8KKwkJCXogPSBfX2xkZXhwX2NleHBmKGNwYWNrZihmYWJzZih4KSwgeSksIC0xKTsKKwkJCXJldHVybiAoY3BhY2tmKGNyZWFsZih6KSAqIGNvcHlzaWduZigxLCB4KSwgY2ltYWdmKHopKSk7CisJCX0gZWxzZSB7CisJCQkvKiB4ID49IDE5Mi43OiB0aGUgcmVzdWx0IGFsd2F5cyBvdmVyZmxvd3MgKi8KKwkJCWggPSBodWdlICogeDsKKwkJCXJldHVybiAoY3BhY2tmKGggKiBjb3NmKHkpLCBoICogaCAqIHNpbmYoeSkpKTsKKwkJfQorCX0KKworCWlmIChpeCA9PSAwICYmIGl5ID49IDB4N2Y4MDAwMDApCisJCXJldHVybiAoY3BhY2tmKGNvcHlzaWduZigwLCB4ICogKHkgLSB5KSksIHkgLSB5KSk7CisKKwlpZiAoaXkgPT0gMCAmJiBpeCA+PSAweDdmODAwMDAwKSB7CisJCWlmICgoaHggJiAweDdmZmZmZikgPT0gMCkKKwkJCXJldHVybiAoY3BhY2tmKHgsIHkpKTsKKwkJcmV0dXJuIChjcGFja2YoeCwgY29weXNpZ25mKDAsIHkpKSk7CisJfQorCisJaWYgKGl4IDwgMHg3ZjgwMDAwMCAmJiBpeSA+PSAweDdmODAwMDAwKQorCQlyZXR1cm4gKGNwYWNrZih5IC0geSwgeCAqICh5IC0geSkpKTsKKworCWlmIChpeCA+PSAweDdmODAwMDAwICYmIChoeCAmIDB4N2ZmZmZmKSA9PSAwKSB7CisJCWlmIChpeSA+PSAweDdmODAwMDAwKQorCQkJcmV0dXJuIChjcGFja2YoeCAqIHgsIHggKiAoeSAtIHkpKSk7CisJCXJldHVybiAoY3BhY2tmKHggKiBjb3NmKHkpLCBJTkZJTklUWSAqIHNpbmYoeSkpKTsKKwl9CisKKwlyZXR1cm4gKGNwYWNrZigoeCAqIHgpICogKHkgLSB5KSwgKHggKyB4KSAqICh5IC0geSkpKTsKK30KKworZmxvYXQgY29tcGxleAorY3NpbmYoZmxvYXQgY29tcGxleCB6KQoreworCisJeiA9IGNzaW5oZihjcGFja2YoLWNpbWFnZih6KSwgY3JlYWxmKHopKSk7CisJcmV0dXJuIChjcGFja2YoY2ltYWdmKHopLCAtY3JlYWxmKHopKSk7Cit9CmRpZmYgLS1naXQgYS9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfY3NxcnQuYyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19jc3FydC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4YTdhZTMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfY3NxcnQuYwpAQCAtMCwwICsxLDExMiBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgRGF2aWQgU2NodWx0eiA8ZGFzQEZyZWVCU0QuT1JHPgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CitfX0ZCU0RJRCgiJEZyZWVCU0QkIik7CisKKyNpbmNsdWRlIDxjb21wbGV4Lmg+CisjaW5jbHVkZSA8ZmxvYXQuaD4KKyNpbmNsdWRlIDxtYXRoLmg+CisKKyNpbmNsdWRlICJtYXRoX3ByaXZhdGUuaCIKKworLyoKKyAqIGdjYyBkb2Vzbid0IGltcGxlbWVudCBjb21wbGV4IG11bHRpcGxpY2F0aW9uIG9yIGRpdmlzaW9uIGNvcnJlY3RseSwKKyAqIHNvIHdlIG5lZWQgdG8gaGFuZGxlIGluZmluaXRpZXMgc3BlY2lhbGx5LiBXZSB0dXJuIG9uIHRoaXMgcHJhZ21hIHRvCisgKiBub3RpZnkgY29uZm9ybWluZyBjOTkgY29tcGlsZXJzIHRoYXQgdGhlIGZhc3QtYnV0LWluY29ycmVjdCBjb2RlIHRoYXQKKyAqIGdjYyBnZW5lcmF0ZXMgaXMgYWNjZXB0YWJsZSwgc2luY2UgdGhlIHNwZWNpYWwgY2FzZXMgaGF2ZSBhbHJlYWR5IGJlZW4KKyAqIGhhbmRsZWQuCisgKi8KKyNwcmFnbWEJU1REQyBDWF9MSU1JVEVEX1JBTkdFCU9OCisKKy8qIFdlIHJpc2sgc3B1cmlvdXMgb3ZlcmZsb3cgZm9yIGNvbXBvbmVudHMgPj0gREJMX01BWCAvICgxICsgc3FydCgyKSkuICovCisjZGVmaW5lCVRIUkVTSAkweDEuYTgyNzk5OWZjZWYzMnArMTAyMgorCitkb3VibGUgY29tcGxleAorY3NxcnQoZG91YmxlIGNvbXBsZXggeikKK3sKKwlkb3VibGUgY29tcGxleCByZXN1bHQ7CisJZG91YmxlIGEsIGI7CisJZG91YmxlIHQ7CisJaW50IHNjYWxlOworCisJYSA9IGNyZWFsKHopOworCWIgPSBjaW1hZyh6KTsKKworCS8qIEhhbmRsZSBzcGVjaWFsIGNhc2VzLiAqLworCWlmICh6ID09IDApCisJCXJldHVybiAoY3BhY2soMCwgYikpOworCWlmIChpc2luZihiKSkKKwkJcmV0dXJuIChjcGFjayhJTkZJTklUWSwgYikpOworCWlmIChpc25hbihhKSkgeworCQl0ID0gKGIgLSBiKSAvIChiIC0gYik7CS8qIHJhaXNlIGludmFsaWQgaWYgYiBpcyBub3QgYSBOYU4gKi8KKwkJcmV0dXJuIChjcGFjayhhLCB0KSk7CS8qIHJldHVybiBOYU4gKyBOYU4gaSAqLworCX0KKwlpZiAoaXNpbmYoYSkpIHsKKwkJLyoKKwkJICogY3NxcnQoaW5mICsgTmFOIGkpICA9IGluZiArICBOYU4gaQorCQkgKiBjc3FydChpbmYgKyB5IGkpICAgID0gaW5mICsgIDAgaQorCQkgKiBjc3FydCgtaW5mICsgTmFOIGkpID0gTmFOICstIGluZiBpCisJCSAqIGNzcXJ0KC1pbmYgKyB5IGkpICAgPSAwICAgKyAgaW5mIGkKKwkJICovCisJCWlmIChzaWduYml0KGEpKQorCQkJcmV0dXJuIChjcGFjayhmYWJzKGIgLSBiKSwgY29weXNpZ24oYSwgYikpKTsKKwkJZWxzZQorCQkJcmV0dXJuIChjcGFjayhhLCBjb3B5c2lnbihiIC0gYiwgYikpKTsKKwl9CisJLyoKKwkgKiBUaGUgcmVtYWluaW5nIHNwZWNpYWwgY2FzZSAoYiBpcyBOYU4pIGlzIGhhbmRsZWQganVzdCBmaW5lIGJ5CisJICogdGhlIG5vcm1hbCBjb2RlIHBhdGggYmVsb3cuCisJICovCisKKwkvKiBTY2FsZSB0byBhdm9pZCBvdmVyZmxvdy4gKi8KKwlpZiAoZmFicyhhKSA+PSBUSFJFU0ggfHwgZmFicyhiKSA+PSBUSFJFU0gpIHsKKwkJYSAqPSAwLjI1OworCQliICo9IDAuMjU7CisJCXNjYWxlID0gMTsKKwl9IGVsc2UgeworCQlzY2FsZSA9IDA7CisJfQorCisJLyogQWxnb3JpdGhtIDMxMiwgQ0FDTSB2b2wgMTAsIE9jdCAxOTY3LiAqLworCWlmIChhID49IDApIHsKKwkJdCA9IHNxcnQoKGEgKyBoeXBvdChhLCBiKSkgKiAwLjUpOworCQlyZXN1bHQgPSBjcGFjayh0LCBiIC8gKDIgKiB0KSk7CisJfSBlbHNlIHsKKwkJdCA9IHNxcnQoKC1hICsgaHlwb3QoYSwgYikpICogMC41KTsKKwkJcmVzdWx0ID0gY3BhY2soZmFicyhiKSAvICgyICogdCksIGNvcHlzaWduKHQsIGIpKTsKKwl9CisKKwkvKiBSZXNjYWxlLiAqLworCWlmIChzY2FsZSkKKwkJcmV0dXJuIChyZXN1bHQgKiAyKTsKKwllbHNlCisJCXJldHVybiAocmVzdWx0KTsKK30KKworI2lmIExEQkxfTUFOVF9ESUcgPT0gNTMKK19fd2Vha19yZWZlcmVuY2UoY3NxcnQsIGNzcXJ0bCk7CisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19jc3FydGYuYyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19jc3FydGYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYTdmZTE4Ci0tLSAvZGV2L251bGwKKysrIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2NzcXJ0Zi5jCkBAIC0wLDAgKzEsODggQEAKKy8qLQorICogQ29weXJpZ2h0IChjKSAyMDA3IERhdmlkIFNjaHVsdHogPGRhc0BGcmVlQlNELk9SRz4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorX19GQlNESUQoIiRGcmVlQlNEJCIpOworCisjaW5jbHVkZSA8Y29tcGxleC5oPgorI2luY2x1ZGUgPG1hdGguaD4KKworI2luY2x1ZGUgIm1hdGhfcHJpdmF0ZS5oIgorCisvKgorICogZ2NjIGRvZXNuJ3QgaW1wbGVtZW50IGNvbXBsZXggbXVsdGlwbGljYXRpb24gb3IgZGl2aXNpb24gY29ycmVjdGx5LAorICogc28gd2UgbmVlZCB0byBoYW5kbGUgaW5maW5pdGllcyBzcGVjaWFsbHkuIFdlIHR1cm4gb24gdGhpcyBwcmFnbWEgdG8KKyAqIG5vdGlmeSBjb25mb3JtaW5nIGM5OSBjb21waWxlcnMgdGhhdCB0aGUgZmFzdC1idXQtaW5jb3JyZWN0IGNvZGUgdGhhdAorICogZ2NjIGdlbmVyYXRlcyBpcyBhY2NlcHRhYmxlLCBzaW5jZSB0aGUgc3BlY2lhbCBjYXNlcyBoYXZlIGFscmVhZHkgYmVlbgorICogaGFuZGxlZC4KKyAqLworI3ByYWdtYQlTVERDIENYX0xJTUlURURfUkFOR0UJT04KKworZmxvYXQgY29tcGxleAorY3NxcnRmKGZsb2F0IGNvbXBsZXggeikKK3sKKwlmbG9hdCBhID0gY3JlYWxmKHopLCBiID0gY2ltYWdmKHopOworCWRvdWJsZSB0OworCisJLyogSGFuZGxlIHNwZWNpYWwgY2FzZXMuICovCisJaWYgKHogPT0gMCkKKwkJcmV0dXJuIChjcGFja2YoMCwgYikpOworCWlmIChpc2luZihiKSkKKwkJcmV0dXJuIChjcGFja2YoSU5GSU5JVFksIGIpKTsKKwlpZiAoaXNuYW4oYSkpIHsKKwkJdCA9IChiIC0gYikgLyAoYiAtIGIpOwkvKiByYWlzZSBpbnZhbGlkIGlmIGIgaXMgbm90IGEgTmFOICovCisJCXJldHVybiAoY3BhY2tmKGEsIHQpKTsJLyogcmV0dXJuIE5hTiArIE5hTiBpICovCisJfQorCWlmIChpc2luZihhKSkgeworCQkvKgorCQkgKiBjc3FydGYoaW5mICsgTmFOIGkpICA9IGluZiArICBOYU4gaQorCQkgKiBjc3FydGYoaW5mICsgeSBpKSAgICA9IGluZiArICAwIGkKKwkJICogY3NxcnRmKC1pbmYgKyBOYU4gaSkgPSBOYU4gKy0gaW5mIGkKKwkJICogY3NxcnRmKC1pbmYgKyB5IGkpICAgPSAwICAgKyAgaW5mIGkKKwkJICovCisJCWlmIChzaWduYml0KGEpKQorCQkJcmV0dXJuIChjcGFja2YoZmFic2YoYiAtIGIpLCBjb3B5c2lnbmYoYSwgYikpKTsKKwkJZWxzZQorCQkJcmV0dXJuIChjcGFja2YoYSwgY29weXNpZ25mKGIgLSBiLCBiKSkpOworCX0KKwkvKgorCSAqIFRoZSByZW1haW5pbmcgc3BlY2lhbCBjYXNlIChiIGlzIE5hTikgaXMgaGFuZGxlZCBqdXN0IGZpbmUgYnkKKwkgKiB0aGUgbm9ybWFsIGNvZGUgcGF0aCBiZWxvdy4KKwkgKi8KKworCS8qCisJICogV2UgY29tcHV0ZSB0IGluIGRvdWJsZSBwcmVjaXNpb24gdG8gYXZvaWQgb3ZlcmZsb3cgYW5kIHRvCisJICogcHJvdmlkZSBjb3JyZWN0IHJvdW5kaW5nIGluIG5lYXJseSBhbGwgY2FzZXMuCisJICogVGhpcyBpcyBBbGdvcml0aG0gMzEyLCBDQUNNIHZvbCAxMCwgT2N0IDE5NjcuCisJICovCisJaWYgKGEgPj0gMCkgeworCQl0ID0gc3FydCgoYSArIGh5cG90KGEsIGIpKSAqIDAuNSk7CisJCXJldHVybiAoY3BhY2tmKHQsIGIgLyAoMi4wICogdCkpKTsKKwl9IGVsc2UgeworCQl0ID0gc3FydCgoLWEgKyBoeXBvdChhLCBiKSkgKiAwLjUpOworCQlyZXR1cm4gKGNwYWNrZihmYWJzZihiKSAvICgyLjAgKiB0KSwgY29weXNpZ25mKHQsIGIpKSk7CisJfQorfQpkaWZmIC0tZ2l0IGEvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2NzcXJ0bC5jIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2NzcXJ0bC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkMThlMWUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfY3NxcnRsLmMKQEAgLTAsMCArMSwxMDggQEAKKy8qLQorICogQ29weXJpZ2h0IChjKSAyMDA3LTIwMDggRGF2aWQgU2NodWx0eiA8ZGFzQEZyZWVCU0QuT1JHPgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CitfX0ZCU0RJRCgiJEZyZWVCU0QkIik7CisKKyNpbmNsdWRlIDxjb21wbGV4Lmg+CisjaW5jbHVkZSA8ZmxvYXQuaD4KKyNpbmNsdWRlIDxtYXRoLmg+CisKKyNpbmNsdWRlICJtYXRoX3ByaXZhdGUuaCIKKworLyoKKyAqIGdjYyBkb2Vzbid0IGltcGxlbWVudCBjb21wbGV4IG11bHRpcGxpY2F0aW9uIG9yIGRpdmlzaW9uIGNvcnJlY3RseSwKKyAqIHNvIHdlIG5lZWQgdG8gaGFuZGxlIGluZmluaXRpZXMgc3BlY2lhbGx5LiBXZSB0dXJuIG9uIHRoaXMgcHJhZ21hIHRvCisgKiBub3RpZnkgY29uZm9ybWluZyBjOTkgY29tcGlsZXJzIHRoYXQgdGhlIGZhc3QtYnV0LWluY29ycmVjdCBjb2RlIHRoYXQKKyAqIGdjYyBnZW5lcmF0ZXMgaXMgYWNjZXB0YWJsZSwgc2luY2UgdGhlIHNwZWNpYWwgY2FzZXMgaGF2ZSBhbHJlYWR5IGJlZW4KKyAqIGhhbmRsZWQuCisgKi8KKyNwcmFnbWEJU1REQyBDWF9MSU1JVEVEX1JBTkdFCU9OCisKKy8qIFdlIHJpc2sgc3B1cmlvdXMgb3ZlcmZsb3cgZm9yIGNvbXBvbmVudHMgPj0gTERCTF9NQVggLyAoMSArIHNxcnQoMikpLiAqLworI2RlZmluZQlUSFJFU0gJKExEQkxfTUFYIC8gMi40MTQyMTM1NjIzNzMwOTUwNDg4MDE2ODg3MjQyMDk2OThMKQorCitsb25nIGRvdWJsZSBjb21wbGV4Citjc3FydGwobG9uZyBkb3VibGUgY29tcGxleCB6KQoreworCWxvbmcgZG91YmxlIGNvbXBsZXggcmVzdWx0OworCWxvbmcgZG91YmxlIGEsIGI7CisJbG9uZyBkb3VibGUgdDsKKwlpbnQgc2NhbGU7CisKKwlhID0gY3JlYWxsKHopOworCWIgPSBjaW1hZ2woeik7CisKKwkvKiBIYW5kbGUgc3BlY2lhbCBjYXNlcy4gKi8KKwlpZiAoeiA9PSAwKQorCQlyZXR1cm4gKGNwYWNrbCgwLCBiKSk7CisJaWYgKGlzaW5mKGIpKQorCQlyZXR1cm4gKGNwYWNrbChJTkZJTklUWSwgYikpOworCWlmIChpc25hbihhKSkgeworCQl0ID0gKGIgLSBiKSAvIChiIC0gYik7CS8qIHJhaXNlIGludmFsaWQgaWYgYiBpcyBub3QgYSBOYU4gKi8KKwkJcmV0dXJuIChjcGFja2woYSwgdCkpOwkvKiByZXR1cm4gTmFOICsgTmFOIGkgKi8KKwl9CisJaWYgKGlzaW5mKGEpKSB7CisJCS8qCisJCSAqIGNzcXJ0KGluZiArIE5hTiBpKSAgPSBpbmYgKyAgTmFOIGkKKwkJICogY3NxcnQoaW5mICsgeSBpKSAgICA9IGluZiArICAwIGkKKwkJICogY3NxcnQoLWluZiArIE5hTiBpKSA9IE5hTiArLSBpbmYgaQorCQkgKiBjc3FydCgtaW5mICsgeSBpKSAgID0gMCAgICsgIGluZiBpCisJCSAqLworCQlpZiAoc2lnbmJpdChhKSkKKwkJCXJldHVybiAoY3BhY2tsKGZhYnNsKGIgLSBiKSwgY29weXNpZ25sKGEsIGIpKSk7CisJCWVsc2UKKwkJCXJldHVybiAoY3BhY2tsKGEsIGNvcHlzaWdubChiIC0gYiwgYikpKTsKKwl9CisJLyoKKwkgKiBUaGUgcmVtYWluaW5nIHNwZWNpYWwgY2FzZSAoYiBpcyBOYU4pIGlzIGhhbmRsZWQganVzdCBmaW5lIGJ5CisJICogdGhlIG5vcm1hbCBjb2RlIHBhdGggYmVsb3cuCisJICovCisKKwkvKiBTY2FsZSB0byBhdm9pZCBvdmVyZmxvdy4gKi8KKwlpZiAoZmFic2woYSkgPj0gVEhSRVNIIHx8IGZhYnNsKGIpID49IFRIUkVTSCkgeworCQlhICo9IDAuMjU7CisJCWIgKj0gMC4yNTsKKwkJc2NhbGUgPSAxOworCX0gZWxzZSB7CisJCXNjYWxlID0gMDsKKwl9CisKKwkvKiBBbGdvcml0aG0gMzEyLCBDQUNNIHZvbCAxMCwgT2N0IDE5NjcuICovCisJaWYgKGEgPj0gMCkgeworCQl0ID0gc3FydGwoKGEgKyBoeXBvdGwoYSwgYikpICogMC41KTsKKwkJcmVzdWx0ID0gY3BhY2tsKHQsIGIgLyAoMiAqIHQpKTsKKwl9IGVsc2UgeworCQl0ID0gc3FydGwoKC1hICsgaHlwb3RsKGEsIGIpKSAqIDAuNSk7CisJCXJlc3VsdCA9IGNwYWNrbChmYWJzbChiKSAvICgyICogdCksIGNvcHlzaWdubCh0LCBiKSk7CisJfQorCisJLyogUmVzY2FsZS4gKi8KKwlpZiAoc2NhbGUpCisJCXJldHVybiAocmVzdWx0ICogMik7CisJZWxzZQorCQlyZXR1cm4gKHJlc3VsdCk7Cit9CmRpZmYgLS1naXQgYS9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfY3RhbmguYyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19jdGFuaC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0MjdlMjgKLS0tIC9kZXYvbnVsbAorKysgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfY3RhbmguYwpAQCAtMCwwICsxLDE0NCBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgRGF2aWQgU2NodWx0egorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UgdW5tb2RpZmllZCwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMsIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qCisgKiBIeXBlcmJvbGljIHRhbmdlbnQgb2YgYSBjb21wbGV4IGFyZ3VtZW50IHogPSB4ICsgaSB5LgorICoKKyAqIFRoZSBhbGdvcml0aG0gaXMgZnJvbToKKyAqCisgKiAgIFcuIEthaGFuLiAgQnJhbmNoIEN1dHMgZm9yIENvbXBsZXggRWxlbWVudGFyeSBGdW5jdGlvbnMgb3IgTXVjaAorICogICBBZG8gQWJvdXQgTm90aGluZydzIFNpZ24gQml0LiAgSW4gVGhlIFN0YXRlIG9mIHRoZSBBcnQgaW4KKyAqICAgTnVtZXJpY2FsIEFuYWx5c2lzLCBwcC4gMTY1IGZmLiAgSXNlcmxlcyBhbmQgUG93ZWxsLCBlZHMuLCAxOTg3LgorICoKKyAqIE1ldGhvZDoKKyAqCisgKiAgIExldCB0ICAgID0gdGFuKHgpCisgKiAgICAgICBiZXRhID0gMS9jb3NeMih5KQorICogICAgICAgcyAgICA9IHNpbmgoeCkKKyAqICAgICAgIHJobyAgPSBjb3NoKHgpCisgKgorICogICBXZSBoYXZlOgorICoKKyAqICAgdGFuaCh6KSA9IHNpbmgoeikgLyBjb3NoKHopCisgKgorICogICAgICAgICAgICAgc2luaCh4KSBjb3MoeSkgKyBpIGNvc2goeCkgc2luKHkpCisgKiAgICAgICAgICAgPSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICAgICAgICAgICAgIGNvc2goeCkgY29zKHkpICsgaSBzaW5oKHgpIHNpbih5KQorICoKKyAqICAgICAgICAgICAgIGNvc2goeCkgc2luaCh4KSAvIGNvc14yKHkpICsgaSB0YW4oeSkKKyAqICAgICAgICAgICA9IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICAgICAgICAgICAgICAgICAgICAxICsgc2luaF4yKHgpIC8gY29zXjIoeSkKKyAqCisgKiAgICAgICAgICAgICBiZXRhIHJobyBzICsgaSB0CisgKiAgICAgICAgICAgPSAtLS0tLS0tLS0tLS0tLS0tCisgKiAgICAgICAgICAgICAgIDEgKyBiZXRhIHNeMgorICoKKyAqIE1vZGlmaWNhdGlvbnM6CisgKgorICogICBJIG9taXR0ZWQgdGhlIG9yaWdpbmFsIGFsZ29yaXRobSdzIGhhbmRsaW5nIG9mIG92ZXJmbG93IGluIHRhbih4KSBhZnRlcgorICogICB2ZXJpZnlpbmcgd2l0aCBuZWFycGkuYyB0aGF0IHRoaXMgY2FuJ3QgaGFwcGVuIGluIElFRUUgc2luZ2xlIG9yIGRvdWJsZQorICogICBwcmVjaXNpb24uICBJIGFsc28gaGFuZGxlIGxhcmdlIHggZGlmZmVyZW50bHkuCisgKi8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorX19GQlNESUQoIiRGcmVlQlNEJCIpOworCisjaW5jbHVkZSA8Y29tcGxleC5oPgorI2luY2x1ZGUgPG1hdGguaD4KKworI2luY2x1ZGUgIm1hdGhfcHJpdmF0ZS5oIgorCitkb3VibGUgY29tcGxleAorY3RhbmgoZG91YmxlIGNvbXBsZXggeikKK3sKKwlkb3VibGUgeCwgeTsKKwlkb3VibGUgdCwgYmV0YSwgcywgcmhvLCBkZW5vbTsKKwl1aW50MzJfdCBoeCwgaXgsIGx4OworCisJeCA9IGNyZWFsKHopOworCXkgPSBjaW1hZyh6KTsKKworCUVYVFJBQ1RfV09SRFMoaHgsIGx4LCB4KTsKKwlpeCA9IGh4ICYgMHg3ZmZmZmZmZjsKKworCS8qCisJICogY3RhbmgoTmFOICsgaSAwKSA9IE5hTiArIGkgMAorCSAqCisJICogY3RhbmgoTmFOICsgaSB5KSA9IE5hTiArIGkgTmFOCQlmb3IgeSAhPSAwCisJICoKKwkgKiBUaGUgaW1hZ2luYXJ5IHBhcnQgaGFzIHRoZSBzaWduIG9mIHgqc2luKDIqeSksIGJ1dCB0aGVyZSdzIG5vCisJICogc3BlY2lhbCBlZmZvcnQgdG8gZ2V0IHRoaXMgcmlnaHQuCisJICoKKwkgKiBjdGFuaCgrLUluZiArLSBpIEluZikgPSArLTEgKy0gMAorCSAqCisJICogY3RhbmgoKy1JbmYgKyBpIHkpID0gKy0xICsgMCBzaW4oMnkpCQlmb3IgeSBmaW5pdGUKKwkgKgorCSAqIFRoZSBpbWFnaW5hcnkgcGFydCBvZiB0aGUgc2lnbiBpcyB1bnNwZWNpZmllZC4gIFRoaXMgc3BlY2lhbAorCSAqIGNhc2UgaXMgb25seSBuZWVkZWQgdG8gYXZvaWQgYSBzcHVyaW91cyBpbnZhbGlkIGV4Y2VwdGlvbiB3aGVuCisJICogeSBpcyBpbmZpbml0ZS4KKwkgKi8KKwlpZiAoaXggPj0gMHg3ZmYwMDAwMCkgeworCQlpZiAoKGl4ICYgMHhmZmZmZikgfCBseCkJLyogeCBpcyBOYU4gKi8KKwkJCXJldHVybiAoY3BhY2soeCwgKHkgPT0gMCA/IHkgOiB4ICogeSkpKTsKKwkJU0VUX0hJR0hfV09SRCh4LCBoeCAtIDB4NDAwMDAwMDApOwkvKiB4ID0gY29weXNpZ24oMSwgeCkgKi8KKwkJcmV0dXJuIChjcGFjayh4LCBjb3B5c2lnbigwLCBpc2luZih5KSA/IHkgOiBzaW4oeSkgKiBjb3MoeSkpKSk7CisJfQorCisJLyoKKwkgKiBjdGFuaCh4ICsgaSBOQU4pID0gTmFOICsgaSBOYU4KKwkgKiBjdGFuaCh4ICstIGkgSW5mKSA9IE5hTiArIGkgTmFOCisJICovCisJaWYgKCFpc2Zpbml0ZSh5KSkKKwkJcmV0dXJuIChjcGFjayh5IC0geSwgeSAtIHkpKTsKKworCS8qCisJICogY3RhbmgoKy1odWdlICsgaSArLXkpIH49ICstMSArLSBpIDJzaW4oMnkpL2V4cCgyeCksIHVzaW5nIHRoZQorCSAqIGFwcHJveGltYXRpb24gc2luaF4yKGh1Z2UpIH49IGV4cCgyKmh1Z2UpIC8gNC4KKwkgKiBXZSB1c2UgYSBtb2RpZmllZCBmb3JtdWxhIHRvIGF2b2lkIHNwdXJpb3VzIG92ZXJmbG93LgorCSAqLworCWlmIChpeCA+PSAweDQwMzYwMDAwKSB7CS8qIHggPj0gMjIgKi8KKwkJZG91YmxlIGV4cF9teCA9IGV4cCgtZmFicyh4KSk7CisJCXJldHVybiAoY3BhY2soY29weXNpZ24oMSwgeCksCisJCSAgICA0ICogc2luKHkpICogY29zKHkpICogZXhwX214ICogZXhwX214KSk7CisJfQorCisJLyogS2FoYW4ncyBhbGdvcml0aG0gKi8KKwl0ID0gdGFuKHkpOworCWJldGEgPSAxLjAgKyB0ICogdDsJLyogPSAxIC8gY29zXjIoeSkgKi8KKwlzID0gc2luaCh4KTsKKwlyaG8gPSBzcXJ0KDEgKyBzICogcyk7CS8qID0gY29zaCh4KSAqLworCWRlbm9tID0gMSArIGJldGEgKiBzICogczsKKwlyZXR1cm4gKGNwYWNrKChiZXRhICogcmhvICogcykgLyBkZW5vbSwgdCAvIGRlbm9tKSk7Cit9CisKK2RvdWJsZSBjb21wbGV4CitjdGFuKGRvdWJsZSBjb21wbGV4IHopCit7CisKKwkvKiBjdGFuKHopID0gLUkgKiBjdGFuaChJICogeikgKi8KKwl6ID0gY3RhbmgoY3BhY2soLWNpbWFnKHopLCBjcmVhbCh6KSkpOworCXJldHVybiAoY3BhY2soY2ltYWcoeiksIC1jcmVhbCh6KSkpOworfQpkaWZmIC0tZ2l0IGEvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2N0YW5oZi5jIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2N0YW5oZi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiZTI4ZDgKLS0tIC9kZXYvbnVsbAorKysgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfY3RhbmhmLmMKQEAgLTAsMCArMSw4NCBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgRGF2aWQgU2NodWx0egorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UgdW5tb2RpZmllZCwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMsIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qCisgKiBIeXBlcmJvbGljIHRhbmdlbnQgb2YgYSBjb21wbGV4IGFyZ3VtZW50IHouICBTZWUgc19jdGFuaC5jIGZvciBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJTRCQiKTsKKworI2luY2x1ZGUgPGNvbXBsZXguaD4KKyNpbmNsdWRlIDxtYXRoLmg+CisKKyNpbmNsdWRlICJtYXRoX3ByaXZhdGUuaCIKKworZmxvYXQgY29tcGxleAorY3RhbmhmKGZsb2F0IGNvbXBsZXggeikKK3sKKwlmbG9hdCB4LCB5OworCWZsb2F0IHQsIGJldGEsIHMsIHJobywgZGVub207CisJdWludDMyX3QgaHgsIGl4OworCisJeCA9IGNyZWFsZih6KTsKKwl5ID0gY2ltYWdmKHopOworCisJR0VUX0ZMT0FUX1dPUkQoaHgsIHgpOworCWl4ID0gaHggJiAweDdmZmZmZmZmOworCisJaWYgKGl4ID49IDB4N2Y4MDAwMDApIHsKKwkJaWYgKGl4ICYgMHg3ZmZmZmYpCisJCQlyZXR1cm4gKGNwYWNrZih4LCAoeSA9PSAwID8geSA6IHggKiB5KSkpOworCQlTRVRfRkxPQVRfV09SRCh4LCBoeCAtIDB4NDAwMDAwMDApOworCQlyZXR1cm4gKGNwYWNrZih4LAorCQkgICAgY29weXNpZ25mKDAsIGlzaW5mKHkpID8geSA6IHNpbmYoeSkgKiBjb3NmKHkpKSkpOworCX0KKworCWlmICghaXNmaW5pdGUoeSkpCisJCXJldHVybiAoY3BhY2tmKHkgLSB5LCB5IC0geSkpOworCisJaWYgKGl4ID49IDB4NDEzMDAwMDApIHsJLyogeCA+PSAxMSAqLworCQlmbG9hdCBleHBfbXggPSBleHBmKC1mYWJzZih4KSk7CisJCXJldHVybiAoY3BhY2tmKGNvcHlzaWduZigxLCB4KSwKKwkJICAgIDQgKiBzaW5mKHkpICogY29zZih5KSAqIGV4cF9teCAqIGV4cF9teCkpOworCX0KKworCXQgPSB0YW5mKHkpOworCWJldGEgPSAxLjAgKyB0ICogdDsKKwlzID0gc2luaGYoeCk7CisJcmhvID0gc3FydGYoMSArIHMgKiBzKTsKKwlkZW5vbSA9IDEgKyBiZXRhICogcyAqIHM7CisJcmV0dXJuIChjcGFja2YoKGJldGEgKiByaG8gKiBzKSAvIGRlbm9tLCB0IC8gZGVub20pKTsKK30KKworZmxvYXQgY29tcGxleAorY3RhbmYoZmxvYXQgY29tcGxleCB6KQoreworCisJeiA9IGN0YW5oZihjcGFja2YoLWNpbWFnZih6KSwgY3JlYWxmKHopKSk7CisJcmV0dXJuIChjcGFja2YoY2ltYWdmKHopLCAtY3JlYWxmKHopKSk7Cit9CisKZGlmZiAtLWdpdCBhL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19lcmYuYyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19lcmYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wODg2ZTVlCi0tLSAvZGV2L251bGwKKysrIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2VyZi5jCkBAIC0wLDAgKzEsMzAxIEBACisvKiBAKCMpc19lcmYuYyA1LjEgOTMvMDkvMjQgKi8KKy8qCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBDb3B5cmlnaHQgKEMpIDE5OTMgYnkgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIERldmVsb3BlZCBhdCBTdW5Qcm8sIGEgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBidXNpbmVzcy4KKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKKyAqIHNvZnR3YXJlIGlzIGZyZWVseSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoaXMgbm90aWNlCisgKiBpcyBwcmVzZXJ2ZWQuCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorX19GQlNESUQoIiRGcmVlQlNEJCIpOworCisvKiBkb3VibGUgZXJmKGRvdWJsZSB4KQorICogZG91YmxlIGVyZmMoZG91YmxlIHgpCisgKgkJCSAgICAgeAorICoJCSAgICAgIDIgICAgICB8XAorICogICAgIGVyZih4KSAgPSAgLS0tLS0tLS0tICB8IGV4cCgtdCp0KWR0CisgKgkgCSAgIHNxcnQocGkpIFx8CisgKgkJCSAgICAgMAorICoKKyAqICAgICBlcmZjKHgpID0gIDEtZXJmKHgpCisgKiAgTm90ZSB0aGF0CisgKgkJZXJmKC14KSA9IC1lcmYoeCkKKyAqCQllcmZjKC14KSA9IDIgLSBlcmZjKHgpCisgKgorICogTWV0aG9kOgorICoJMS4gRm9yIHx4fCBpbiBbMCwgMC44NDM3NV0KKyAqCSAgICBlcmYoeCkgID0geCArIHgqUih4XjIpCisgKiAgICAgICAgICBlcmZjKHgpID0gMSAtIGVyZih4KSAgICAgICAgICAgaWYgeCBpbiBbLS44NDM3NSwwLjI1XQorICogICAgICAgICAgICAgICAgICA9IDAuNSArICgoMC41LXgpLXgqUikgIGlmIHggaW4gWzAuMjUsMC44NDM3NV0KKyAqCSAgIHdoZXJlIFIgPSBQL1Egd2hlcmUgUCBpcyBhbiBvZGQgcG9seSBvZiBkZWdyZWUgOCBhbmQKKyAqCSAgIFEgaXMgYW4gb2RkIHBvbHkgb2YgZGVncmVlIDEwLgorICoJCQkJCQkgLTU3LjkwCisgKgkJCXwgUiAtIChlcmYoeCkteCkveCB8IDw9IDIKKyAqCisgKgorICoJICAgUmVtYXJrLiBUaGUgZm9ybXVsYSBpcyBkZXJpdmVkIGJ5IG5vdGluZworICogICAgICAgICAgZXJmKHgpID0gKDIvc3FydChwaSkpKih4IC0geF4zLzMgKyB4XjUvMTAgLSB4XjcvNDIgKyAuLi4uKQorICoJICAgYW5kIHRoYXQKKyAqICAgICAgICAgIDIvc3FydChwaSkgPSAxLjEyODM3OTE2NzA5NTUxMjU3Mzg5NjE1ODkwMzEyMTU0NTE3MTY4OAorICoJICAgaXMgY2xvc2UgdG8gb25lLiBUaGUgaW50ZXJ2YWwgaXMgY2hvc2VuIGJlY2F1c2UgdGhlIGZpeAorICoJICAgcG9pbnQgb2YgZXJmKHgpIGlzIG5lYXIgMC42MTc0IChpLmUuLCBlcmYoeCk9eCB3aGVuIHggaXMKKyAqCSAgIG5lYXIgMC42MTc0KSwgYW5kIGJ5IHNvbWUgZXhwZXJpbWVudCwgMC44NDM3NSBpcyBjaG9zZW4gdG8KKyAqIAkgICBndWFyYW50ZWUgdGhlIGVycm9yIGlzIGxlc3MgdGhhbiBvbmUgdWxwIGZvciBlcmYuCisgKgorICogICAgICAyLiBGb3IgfHh8IGluIFswLjg0Mzc1LDEuMjVdLCBsZXQgcyA9IHx4fCAtIDEsIGFuZAorICogICAgICAgICBjID0gMC44NDUwNjI5MTE1MSByb3VuZGVkIHRvIHNpbmdsZSAoMjQgYml0cykKKyAqICAgICAgICAgCWVyZih4KSAgPSBzaWduKHgpICogKGMgICsgUDEocykvUTEocykpCisgKiAgICAgICAgIAllcmZjKHgpID0gKDEtYykgIC0gUDEocykvUTEocykgaWYgeCA+IDAKKyAqCQkJICAxKyhjK1AxKHMpL1ExKHMpKSAgICBpZiB4IDwgMAorICogICAgICAgICAJfFAxL1ExIC0gKGVyZih8eHwpLWMpfCA8PSAyKiotNTkuMDYKKyAqCSAgIFJlbWFyazogaGVyZSB3ZSB1c2UgdGhlIHRheWxvciBzZXJpZXMgZXhwYW5zaW9uIGF0IHg9MS4KKyAqCQllcmYoMStzKSA9IGVyZigxKSArIHMqUG9seShzKQorICoJCQkgPSAwLjg0NS4uICsgUDEocykvUTEocykKKyAqCSAgIFRoYXQgaXMsIHdlIHVzZSByYXRpb25hbCBhcHByb3hpbWF0aW9uIHRvIGFwcHJveGltYXRlCisgKgkJCWVyZigxK3MpIC0gKGMgPSAoc2luZ2xlKTAuODQ1MDYyOTExNTEpCisgKgkgICBOb3RlIHRoYXQgfFAxL1ExfDwgMC4wNzggZm9yIHggaW4gWzAuODQzNzUsMS4yNV0KKyAqCSAgIHdoZXJlCisgKgkJUDEocykgPSBkZWdyZWUgNiBwb2x5IGluIHMKKyAqCQlRMShzKSA9IGRlZ3JlZSA2IHBvbHkgaW4gcworICoKKyAqICAgICAgMy4gRm9yIHggaW4gWzEuMjUsMS8wLjM1KH4yLjg1NzE0MyldLAorICogICAgICAgICAJZXJmYyh4KSA9ICgxL3gpKmV4cCgteCp4LTAuNTYyNStSMS9TMSkKKyAqICAgICAgICAgCWVyZih4KSAgPSAxIC0gZXJmYyh4KQorICoJICAgd2hlcmUKKyAqCQlSMSh6KSA9IGRlZ3JlZSA3IHBvbHkgaW4geiwgKHo9MS94XjIpCisgKgkJUzEoeikgPSBkZWdyZWUgOCBwb2x5IGluIHoKKyAqCisgKiAgICAgIDQuIEZvciB4IGluIFsxLzAuMzUsMjhdCisgKiAgICAgICAgIAllcmZjKHgpID0gKDEveCkqZXhwKC14KngtMC41NjI1K1IyL1MyKSBpZiB4ID4gMAorICoJCQk9IDIuMCAtICgxL3gpKmV4cCgteCp4LTAuNTYyNStSMi9TMikgaWYgLTY8eDwwCisgKgkJCT0gMi4wIC0gdGlueQkJKGlmIHggPD0gLTYpCisgKiAgICAgICAgIAllcmYoeCkgID0gc2lnbih4KSooMS4wIC0gZXJmYyh4KSkgaWYgeCA8IDYsIGVsc2UKKyAqICAgICAgICAgCWVyZih4KSAgPSBzaWduKHgpKigxLjAgLSB0aW55KQorICoJICAgd2hlcmUKKyAqCQlSMih6KSA9IGRlZ3JlZSA2IHBvbHkgaW4geiwgKHo9MS94XjIpCisgKgkJUzIoeikgPSBkZWdyZWUgNyBwb2x5IGluIHoKKyAqCisgKiAgICAgIE5vdGUxOgorICoJICAgVG8gY29tcHV0ZSBleHAoLXgqeC0wLjU2MjUrUi9TKSwgbGV0IHMgYmUgYSBzaW5nbGUKKyAqCSAgIHByZWNpc2lvbiBudW1iZXIgYW5kIHMgOj0geDsgdGhlbgorICoJCS14KnggPSAtcypzICsgKHMteCkqKHMreCkKKyAqCSAgICAgICAgZXhwKC14KngtMC41NjI2K1IvUykgPQorICoJCQlleHAoLXMqcy0wLjU2MjUpKmV4cCgocy14KSoocyt4KStSL1MpOworICogICAgICBOb3RlMjoKKyAqCSAgIEhlcmUgNCBhbmQgNSBtYWtlIHVzZSBvZiB0aGUgYXN5bXB0b3RpYyBzZXJpZXMKKyAqCQkJICBleHAoLXgqeCkKKyAqCQllcmZjKHgpIH4gLS0tLS0tLS0tLSAqICggMSArIFBvbHkoMS94XjIpICkKKyAqCQkJICB4KnNxcnQocGkpCisgKgkgICBXZSB1c2UgcmF0aW9uYWwgYXBwcm94aW1hdGlvbiB0byBhcHByb3hpbWF0ZQorICogICAgICAJZyhzKT1mKDEveF4yKSA9IGxvZyhlcmZjKHgpKngpIC0geCp4ICsgMC41NjI1CisgKgkgICBIZXJlIGlzIHRoZSBlcnJvciBib3VuZCBmb3IgUjEvUzEgYW5kIFIyL1MyCisgKiAgICAgIAl8UjEvUzEgLSBmKHgpfCAgPCAyKiooLTYyLjU3KQorICogICAgICAJfFIyL1MyIC0gZih4KXwgIDwgMioqKC02MS41MikKKyAqCisgKiAgICAgIDUuIEZvciBpbmYgPiB4ID49IDI4CisgKiAgICAgICAgIAllcmYoeCkgID0gc2lnbih4KSAqKDEgLSB0aW55KSAgKHJhaXNlIGluZXhhY3QpCisgKiAgICAgICAgIAllcmZjKHgpID0gdGlueSp0aW55IChyYWlzZSB1bmRlcmZsb3cpIGlmIHggPiAwCisgKgkJCT0gMiAtIHRpbnkgaWYgeDwwCisgKgorICogICAgICA3LiBTcGVjaWFsIGNhc2U6CisgKiAgICAgICAgIAllcmYoMCkgID0gMCwgZXJmKGluZikgID0gMSwgZXJmKC1pbmYpID0gLTEsCisgKiAgICAgICAgIAllcmZjKDApID0gMSwgZXJmYyhpbmYpID0gMCwgZXJmYygtaW5mKSA9IDIsCisgKgkgICAJZXJmYy9lcmYoTmFOKSBpcyBOYU4KKyAqLworCisKKyNpbmNsdWRlICJtYXRoLmgiCisjaW5jbHVkZSAibWF0aF9wcml2YXRlLmgiCisKK3N0YXRpYyBjb25zdCBkb3VibGUKK3RpbnkJICAgID0gMWUtMzAwLAoraGFsZj0gIDUuMDAwMDAwMDAwMDAwMDAwMDAwMDBlLTAxLCAvKiAweDNGRTAwMDAwLCAweDAwMDAwMDAwICovCitvbmUgPSAgMS4wMDAwMDAwMDAwMDAwMDAwMDAwMGUrMDAsIC8qIDB4M0ZGMDAwMDAsIDB4MDAwMDAwMDAgKi8KK3R3byA9ICAyLjAwMDAwMDAwMDAwMDAwMDAwMDAwZSswMCwgLyogMHg0MDAwMDAwMCwgMHgwMDAwMDAwMCAqLworCS8qIGMgPSAoZmxvYXQpMC44NDUwNjI5MTE1MSAqLworZXJ4ID0gIDguNDUwNjI5MTE1MTA0Njc1MjkyOTdlLTAxLCAvKiAweDNGRUIwQUMxLCAweDYwMDAwMDAwICovCisvKgorICogQ29lZmZpY2llbnRzIGZvciBhcHByb3hpbWF0aW9uIHRvICBlcmYgb24gWzAsMC44NDM3NV0KKyAqLworZWZ4ID0gIDEuMjgzNzkxNjcwOTU1MTI1ODYzMTZlLTAxLCAvKiAweDNGQzA2RUJBLCAweDgyMTREQjY5ICovCitlZng4PSAgMS4wMjcwMzMzMzY3NjQxMDA2OTA1M2UrMDAsIC8qIDB4M0ZGMDZFQkEsIDB4ODIxNERCNjkgKi8KK3BwMCAgPSAgMS4yODM3OTE2NzA5NTUxMjU1ODU2MWUtMDEsIC8qIDB4M0ZDMDZFQkEsIDB4ODIxNERCNjggKi8KK3BwMSAgPSAtMy4yNTA0MjEwNzI0NzAwMTQ5OTM3MGUtMDEsIC8qIDB4QkZENENEN0QsIDB4NjkxQ0I5MTMgKi8KK3BwMiAgPSAtMi44NDgxNzQ5NTc1NTk4NTEwNDc2NmUtMDIsIC8qIDB4QkY5RDJBNTEsIDB4REJENzE5NEYgKi8KK3BwMyAgPSAtNS43NzAyNzAyOTY0ODk0NDE1OTE1N2UtMDMsIC8qIDB4QkY3N0EyOTEsIDB4MjM2NjY4RTQgKi8KK3BwNCAgPSAtMi4zNzYzMDE2NjU2NjUwMTYyNjA4NGUtMDUsIC8qIDB4QkVGOEVBRDYsIDB4MTIwMDE2QUMgKi8KK3FxMSAgPSAgMy45NzkxNzIyMzk1OTE1NTM1MjgxOWUtMDEsIC8qIDB4M0ZEOTc3NzksIDB4Q0REQURDMDkgKi8KK3FxMiAgPSAgNi41MDIyMjQ5OTg4NzY3Mjk0NDQ4NWUtMDIsIC8qIDB4M0ZCMEE1NEMsIDB4NTUzNkNFQkEgKi8KK3FxMyAgPSAgNS4wODEzMDYyODE4NzU3NjU2Mjc3NmUtMDMsIC8qIDB4M0Y3NEQwMjIsIDB4QzREMzZCMEYgKi8KK3FxNCAgPSAgMS4zMjQ5NDczODAwNDMyMTY0NDUyNmUtMDQsIC8qIDB4M0YyMTVEQzksIDB4MjIxQzFBMTAgKi8KK3FxNSAgPSAtMy45NjAyMjgyNzg3NzUzNjgxMjMyMGUtMDYsIC8qIDB4QkVEMDlDNDMsIDB4NDJBMjYxMjAgKi8KKy8qCisgKiBDb2VmZmljaWVudHMgZm9yIGFwcHJveGltYXRpb24gdG8gIGVyZiAgaW4gWzAuODQzNzUsMS4yNV0KKyAqLworcGEwICA9IC0yLjM2MjExODU2MDc1MjY1OTQ0MDc3ZS0wMywgLyogMHhCRjYzNTlCOCwgMHhCRUY3NzUzOCAqLworcGExICA9ICA0LjE0ODU2MTE4NjgzNzQ4MzMxNjY2ZS0wMSwgLyogMHgzRkRBOEQwMCwgMHhBRDkyQjM0RCAqLworcGEyICA9IC0zLjcyMjA3ODc2MDM1NzAxMzIzODQ3ZS0wMSwgLyogMHhCRkQ3RDI0MCwgMHhGQkI4QzNGMSAqLworcGEzICA9ICAzLjE4MzQ2NjE5OTAxMTYxNzUzNjc0ZS0wMSwgLyogMHgzRkQ0NUZDQSwgMHg4MDUxMjBFNCAqLworcGE0ICA9IC0xLjEwODk0Njk0MjgyMzk2Njc3NDc2ZS0wMSwgLyogMHhCRkJDNjM5OCwgMHgzRDNFMjhFQyAqLworcGE1ICA9ICAzLjU0NzgzMDQzMjU2MTgyMzU5MzcxZS0wMiwgLyogMHgzRkEyMkEzNiwgMHg1OTk3OTVFQiAqLworcGE2ICA9IC0yLjE2NjM3NTU5NDg2ODc5MDg0MzAwZS0wMywgLyogMHhCRjYxQkYzOCwgMHgwQTk2MDczRiAqLworcWExICA9ICAxLjA2NDIwODgwNDAwODQ0MjI4Mjg2ZS0wMSwgLyogMHgzRkJCM0U2NiwgMHgxOEVFRTMyMyAqLworcWEyICA9ICA1LjQwMzk3OTE3NzAyMTcxMDQ4OTM3ZS0wMSwgLyogMHgzRkUxNEFGMCwgMHg5MkVCNkYzMyAqLworcWEzICA9ICA3LjE4Mjg2NTQ0MTQxOTYyNjYyODY4ZS0wMiwgLyogMHgzRkIyNjM1QywgMHhEOTlGRTlBNyAqLworcWE0ICA9ICAxLjI2MTcxMjE5ODA4NzYxNjQyMTEyZS0wMSwgLyogMHgzRkMwMjY2MCwgMHhFNzYzMzUxRiAqLworcWE1ICA9ICAxLjM2MzcwODM5MTIwMjkwNTA3MzYyZS0wMiwgLyogMHgzRjhCRURDMiwgMHg2QjUxREQxQyAqLworcWE2ICA9ICAxLjE5ODQ0OTk4NDY3OTkxMDc0MTcwZS0wMiwgLyogMHgzRjg4OEI1NCwgMHg1NzM1MTUxRCAqLworLyoKKyAqIENvZWZmaWNpZW50cyBmb3IgYXBwcm94aW1hdGlvbiB0byAgZXJmYyBpbiBbMS4yNSwxLzAuMzVdCisgKi8KK3JhMCAgPSAtOS44NjQ5NDQwMzQ4NDcxNDgyMjcwNWUtMDMsIC8qIDB4QkY4NDM0MTIsIDB4NjAwRDY0MzUgKi8KK3JhMSAgPSAtNi45Mzg1ODU3MjcwNzE4MTc2NDM3MmUtMDEsIC8qIDB4QkZFNjM0MTYsIDB4RTRCQTczNjAgKi8KK3JhMiAgPSAtMS4wNTU4NjI2MjI1MzIzMjkwOTgxNGUrMDEsIC8qIDB4QzAyNTFFMDQsIDB4NDFCMEU3MjYgKi8KK3JhMyAgPSAtNi4yMzc1MzMyNDUwMzI2MDA2MDM5NmUrMDEsIC8qIDB4QzA0RjMwMEEsIDB4RTRDQkEzOEQgKi8KK3JhNCAgPSAtMS42MjM5NjY2OTQ2MjU3MzQ3MDM1NWUrMDIsIC8qIDB4QzA2NDRDQjEsIDB4ODQyODIyNjYgKi8KK3JhNSAgPSAtMS44NDYwNTA5MjkwNjcxMTAzNTk5NGUrMDIsIC8qIDB4QzA2NzEzNUMsIDB4RUJDQ0FCQjIgKi8KK3JhNiAgPSAtOC4xMjg3NDM1NTA2MzA2NTkzNDI0NmUrMDEsIC8qIDB4QzA1NDUyNjUsIDB4NTdFNEQyRjIgKi8KK3JhNyAgPSAtOS44MTQzMjkzNDQxNjkxNDU0ODU5MmUrMDAsIC8qIDB4QzAyM0EwRUYsIDB4QzY5QUMyNUMgKi8KK3NhMSAgPSAgMS45NjUxMjcxNjY3NDM5MjU3MTI5MmUrMDEsIC8qIDB4NDAzM0E2QjksIDB4QkQ3MDc2ODcgKi8KK3NhMiAgPSAgMS4zNzY1Nzc1NDE0MzUxOTA0MjYwMGUrMDIsIC8qIDB4NDA2MTM1MEMsIDB4NTI2QUU3MjEgKi8KK3NhMyAgPSAgNC4zNDU2NTg3NzQ3NTIyOTIyODgyMWUrMDIsIC8qIDB4NDA3QjI5MEQsIDB4RDU4QTFBNzEgKi8KK3NhNCAgPSAgNi40NTM4NzI3MTczMzI2Nzg4MDMzNmUrMDIsIC8qIDB4NDA4NDJCMTksIDB4MjFFQzI4NjggKi8KK3NhNSAgPSAgNC4yOTAwODE0MDAyNzU2NzgzMzM4NmUrMDIsIC8qIDB4NDA3QUQwMjEsIDB4NTc3MDAzMTQgKi8KK3NhNiAgPSAgMS4wODYzNTAwNTU0MTc3OTQzNTEzNGUrMDIsIC8qIDB4NDA1QjI4QTMsIDB4RUU0OEFFMkMgKi8KK3NhNyAgPSAgNi41NzAyNDk3NzAzMTkyODE3MDEzNWUrMDAsIC8qIDB4NDAxQTQ3RUYsIDB4OEU0ODRBOTMgKi8KK3NhOCAgPSAtNi4wNDI0NDE1MjE0ODU4MDk4NzQzOGUtMDIsIC8qIDB4QkZBRUVGRjIsIDB4RUU3NDlBNjIgKi8KKy8qCisgKiBDb2VmZmljaWVudHMgZm9yIGFwcHJveGltYXRpb24gdG8gIGVyZmMgaW4gWzEvLjM1LDI4XQorICovCityYjAgID0gLTkuODY0OTQyOTI0NzAwMDk5Mjg1OTdlLTAzLCAvKiAweEJGODQzNDEyLCAweDM5RTg2RjRBICovCityYjEgID0gLTcuOTkyODMyMzc2ODA1MjMwMDY1NzRlLTAxLCAvKiAweEJGRTk5M0JBLCAweDcwQzI4NURFICovCityYjIgID0gLTEuNzc1Nzk1NDkxNzc1NDc1MTk4ODllKzAxLCAvKiAweEMwMzFDMjA5LCAweDU1NUY5OTVBICovCityYjMgID0gLTEuNjA2MzYzODQ4NTU4MjE5MTYwNjJlKzAyLCAvKiAweEMwNjQxNDVELCAweDQzQzVFRDk4ICovCityYjQgID0gLTYuMzc1NjY0NDMzNjgzODk2Mjc3MjJlKzAyLCAvKiAweEMwODNFQzg4LCAweDEzNzVGMjI4ICovCityYjUgID0gLTEuMDI1MDk1MTMxNjExMDc3MjQ5NTRlKzAzLCAvKiAweEMwOTAwNDYxLCAweDZBMkU1OTkyICovCityYjYgID0gLTQuODM1MTkxOTE2MDg2NTEzOTcwMTllKzAyLCAvKiAweEMwN0UzODRFLCAweDlCREMzODNGICovCitzYjEgID0gIDMuMDMzODA2MDc0MzQ4MjQ1ODI5MjRlKzAxLCAvKiAweDQwM0U1NjhCLCAweDI2MUQ1MTkwICovCitzYjIgID0gIDMuMjU3OTI1MTI5OTY1NzM5MTg4MjZlKzAyLCAvKiAweDQwNzQ1Q0FFLCAweDIyMUI5RjBBICovCitzYjMgID0gIDEuNTM2NzI5NTg2MDg0NDM2OTU5OTRlKzAzLCAvKiAweDQwOTgwMkVCLCAweDE4OUQ1MTE4ICovCitzYjQgID0gIDMuMTk5ODU4MjE5NTA4NTk1NTM5MDhlKzAzLCAvKiAweDQwQThGRkI3LCAweDY4OEMyNDZBICovCitzYjUgID0gIDIuNTUzMDUwNDA2NDMzMTY0NDI1ODNlKzAzLCAvKiAweDQwQTNGMjE5LCAweENFREYzQkU2ICovCitzYjYgID0gIDQuNzQ1Mjg1NDEyMDY5NTUzNjcyMTVlKzAyLCAvKiAweDQwN0RBODc0LCAweEU3OUZFNzYzICovCitzYjcgID0gLTIuMjQ0MDk1MjQ0NjU4NTgxODMzNjJlKzAxOyAvKiAweEMwMzY3MEUyLCAweDQyNzEyRDYyICovCisKK2RvdWJsZQorZXJmKGRvdWJsZSB4KQoreworCWludDMyX3QgaHgsaXgsaTsKKwlkb3VibGUgUixTLFAsUSxzLHkseixyOworCUdFVF9ISUdIX1dPUkQoaHgseCk7CisJaXggPSBoeCYweDdmZmZmZmZmOworCWlmKGl4Pj0weDdmZjAwMDAwKSB7CQkvKiBlcmYobmFuKT1uYW4gKi8KKwkgICAgaSA9ICgodV9pbnQzMl90KWh4Pj4zMSk8PDE7CisJICAgIHJldHVybiAoZG91YmxlKSgxLWkpK29uZS94OwkvKiBlcmYoKy1pbmYpPSstMSAqLworCX0KKworCWlmKGl4IDwgMHgzZmViMDAwMCkgewkJLyogfHh8PDAuODQzNzUgKi8KKwkgICAgaWYoaXggPCAweDNlMzAwMDAwKSB7IAkvKiB8eHw8MioqLTI4ICovCisJICAgICAgICBpZiAoaXggPCAweDAwODAwMDAwKQorCQkgICAgcmV0dXJuIDAuMTI1Kig4LjAqeCtlZng4KngpOyAgLyphdm9pZCB1bmRlcmZsb3cgKi8KKwkJcmV0dXJuIHggKyBlZngqeDsKKwkgICAgfQorCSAgICB6ID0geCp4OworCSAgICByID0gcHAwK3oqKHBwMSt6KihwcDIreioocHAzK3oqcHA0KSkpOworCSAgICBzID0gb25lK3oqKHFxMSt6KihxcTIreioocXEzK3oqKHFxNCt6KnFxNSkpKSk7CisJICAgIHkgPSByL3M7CisJICAgIHJldHVybiB4ICsgeCp5OworCX0KKwlpZihpeCA8IDB4M2ZmNDAwMDApIHsJCS8qIDAuODQzNzUgPD0gfHh8IDwgMS4yNSAqLworCSAgICBzID0gZmFicyh4KS1vbmU7CisJICAgIFAgPSBwYTArcyoocGExK3MqKHBhMitzKihwYTMrcyoocGE0K3MqKHBhNStzKnBhNikpKSkpOworCSAgICBRID0gb25lK3MqKHFhMStzKihxYTIrcyoocWEzK3MqKHFhNCtzKihxYTUrcypxYTYpKSkpKTsKKwkgICAgaWYoaHg+PTApIHJldHVybiBlcnggKyBQL1E7IGVsc2UgcmV0dXJuIC1lcnggLSBQL1E7CisJfQorCWlmIChpeCA+PSAweDQwMTgwMDAwKSB7CQkvKiBpbmY+fHh8Pj02ICovCisJICAgIGlmKGh4Pj0wKSByZXR1cm4gb25lLXRpbnk7IGVsc2UgcmV0dXJuIHRpbnktb25lOworCX0KKwl4ID0gZmFicyh4KTsKKyAJcyA9IG9uZS8oeCp4KTsKKwlpZihpeDwgMHg0MDA2REI2RSkgewkvKiB8eHwgPCAxLzAuMzUgKi8KKwkgICAgUj1yYTArcyoocmExK3MqKHJhMitzKihyYTMrcyoocmE0K3MqKAorCQkJCXJhNStzKihyYTYrcypyYTcpKSkpKSk7CisJICAgIFM9b25lK3MqKHNhMStzKihzYTIrcyooc2EzK3MqKHNhNCtzKigKKwkJCQlzYTUrcyooc2E2K3MqKHNhNytzKnNhOCkpKSkpKSk7CisJfSBlbHNlIHsJLyogfHh8ID49IDEvMC4zNSAqLworCSAgICBSPXJiMCtzKihyYjErcyoocmIyK3MqKHJiMytzKihyYjQrcyooCisJCQkJcmI1K3MqcmI2KSkpKSk7CisJICAgIFM9b25lK3MqKHNiMStzKihzYjIrcyooc2IzK3MqKHNiNCtzKigKKwkJCQlzYjUrcyooc2I2K3Mqc2I3KSkpKSkpOworCX0KKwl6ICA9IHg7CisJU0VUX0xPV19XT1JEKHosMCk7CisJciAgPSAgX19pZWVlNzU0X2V4cCgteip6LTAuNTYyNSkqX19pZWVlNzU0X2V4cCgoei14KSooeit4KStSL1MpOworCWlmKGh4Pj0wKSByZXR1cm4gb25lLXIveDsgZWxzZSByZXR1cm4gIHIveC1vbmU7Cit9CisKK2RvdWJsZQorZXJmYyhkb3VibGUgeCkKK3sKKwlpbnQzMl90IGh4LGl4OworCWRvdWJsZSBSLFMsUCxRLHMseSx6LHI7CisJR0VUX0hJR0hfV09SRChoeCx4KTsKKwlpeCA9IGh4JjB4N2ZmZmZmZmY7CisJaWYoaXg+PTB4N2ZmMDAwMDApIHsJCQkvKiBlcmZjKG5hbik9bmFuICovCisJCQkJCQkvKiBlcmZjKCstaW5mKT0wLDIgKi8KKwkgICAgcmV0dXJuIChkb3VibGUpKCgodV9pbnQzMl90KWh4Pj4zMSk8PDEpK29uZS94OworCX0KKworCWlmKGl4IDwgMHgzZmViMDAwMCkgewkJLyogfHh8PDAuODQzNzUgKi8KKwkgICAgaWYoaXggPCAweDNjNzAwMDAwKSAgCS8qIHx4fDwyKiotNTYgKi8KKwkJcmV0dXJuIG9uZS14OworCSAgICB6ID0geCp4OworCSAgICByID0gcHAwK3oqKHBwMSt6KihwcDIreioocHAzK3oqcHA0KSkpOworCSAgICBzID0gb25lK3oqKHFxMSt6KihxcTIreioocXEzK3oqKHFxNCt6KnFxNSkpKSk7CisJICAgIHkgPSByL3M7CisJICAgIGlmKGh4IDwgMHgzZmQwMDAwMCkgeyAgCS8qIHg8MS80ICovCisJCXJldHVybiBvbmUtKHgreCp5KTsKKwkgICAgfSBlbHNlIHsKKwkJciA9IHgqeTsKKwkJciArPSAoeC1oYWxmKTsKKwkgICAgICAgIHJldHVybiBoYWxmIC0gciA7CisJICAgIH0KKwl9CisJaWYoaXggPCAweDNmZjQwMDAwKSB7CQkvKiAwLjg0Mzc1IDw9IHx4fCA8IDEuMjUgKi8KKwkgICAgcyA9IGZhYnMoeCktb25lOworCSAgICBQID0gcGEwK3MqKHBhMStzKihwYTIrcyoocGEzK3MqKHBhNCtzKihwYTUrcypwYTYpKSkpKTsKKwkgICAgUSA9IG9uZStzKihxYTErcyoocWEyK3MqKHFhMytzKihxYTQrcyoocWE1K3MqcWE2KSkpKSk7CisJICAgIGlmKGh4Pj0wKSB7CisJICAgICAgICB6ICA9IG9uZS1lcng7IHJldHVybiB6IC0gUC9ROworCSAgICB9IGVsc2UgeworCQl6ID0gZXJ4K1AvUTsgcmV0dXJuIG9uZSt6OworCSAgICB9CisJfQorCWlmIChpeCA8IDB4NDAzYzAwMDApIHsJCS8qIHx4fDwyOCAqLworCSAgICB4ID0gZmFicyh4KTsKKyAJICAgIHMgPSBvbmUvKHgqeCk7CisJICAgIGlmKGl4PCAweDQwMDZEQjZEKSB7CS8qIHx4fCA8IDEvLjM1IH4gMi44NTcxNDMqLworCSAgICAgICAgUj1yYTArcyoocmExK3MqKHJhMitzKihyYTMrcyoocmE0K3MqKAorCQkJCXJhNStzKihyYTYrcypyYTcpKSkpKSk7CisJICAgICAgICBTPW9uZStzKihzYTErcyooc2EyK3MqKHNhMytzKihzYTQrcyooCisJCQkJc2E1K3MqKHNhNitzKihzYTcrcypzYTgpKSkpKSkpOworCSAgICB9IGVsc2UgewkJCS8qIHx4fCA+PSAxLy4zNSB+IDIuODU3MTQzICovCisJCWlmKGh4PDAmJml4Pj0weDQwMTgwMDAwKSByZXR1cm4gdHdvLXRpbnk7LyogeCA8IC02ICovCisJICAgICAgICBSPXJiMCtzKihyYjErcyoocmIyK3MqKHJiMytzKihyYjQrcyooCisJCQkJcmI1K3MqcmI2KSkpKSk7CisJICAgICAgICBTPW9uZStzKihzYjErcyooc2IyK3MqKHNiMytzKihzYjQrcyooCisJCQkJc2I1K3MqKHNiNitzKnNiNykpKSkpKTsKKwkgICAgfQorCSAgICB6ICA9IHg7CisJICAgIFNFVF9MT1dfV09SRCh6LDApOworCSAgICByICA9ICBfX2llZWU3NTRfZXhwKC16KnotMC41NjI1KSoKKwkJCV9faWVlZTc1NF9leHAoKHoteCkqKHoreCkrUi9TKTsKKwkgICAgaWYoaHg+MCkgcmV0dXJuIHIveDsgZWxzZSByZXR1cm4gdHdvLXIveDsKKwl9IGVsc2UgeworCSAgICBpZihoeD4wKSByZXR1cm4gdGlueSp0aW55OyBlbHNlIHJldHVybiB0d28tdGlueTsKKwl9Cit9CmRpZmYgLS1naXQgYS9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfZXJmZi5jIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2VyZmYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNDRlMTM1Ci0tLSAvZGV2L251bGwKKysrIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2VyZmYuYwpAQCAtMCwwICsxLDIxMCBAQAorLyogc19lcmZmLmMgLS0gZmxvYXQgdmVyc2lvbiBvZiBzX2VyZi5jLgorICogQ29udmVyc2lvbiB0byBmbG9hdCBieSBJYW4gTGFuY2UgVGF5bG9yLCBDeWdudXMgU3VwcG9ydCwgaWFuQGN5Z251cy5jb20uCisgKi8KKworLyoKKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIENvcHlyaWdodCAoQykgMTk5MyBieSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogRGV2ZWxvcGVkIGF0IFN1blBybywgYSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGJ1c2luZXNzLgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcworICogc29mdHdhcmUgaXMgZnJlZWx5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhpcyBub3RpY2UKKyAqIGlzIHByZXNlcnZlZC4KKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CitfX0ZCU0RJRCgiJEZyZWVCU0QkIik7CisKKyNpbmNsdWRlICJtYXRoLmgiCisjaW5jbHVkZSAibWF0aF9wcml2YXRlLmgiCisKK3N0YXRpYyBjb25zdCBmbG9hdAordGlueQkgICAgPSAxZS0zMCwKK2hhbGY9ICA1LjAwMDAwMDAwMDBlLTAxLCAvKiAweDNGMDAwMDAwICovCitvbmUgPSAgMS4wMDAwMDAwMDAwZSswMCwgLyogMHgzRjgwMDAwMCAqLwordHdvID0gIDIuMDAwMDAwMDAwMGUrMDAsIC8qIDB4NDAwMDAwMDAgKi8KKwkvKiBjID0gKHN1YmZsb2F0KTAuODQ1MDYyOTExNTEgKi8KK2VyeCA9ICA4LjQ1MDYyOTExNTFlLTAxLCAvKiAweDNmNTg1NjBiICovCisvKgorICogQ29lZmZpY2llbnRzIGZvciBhcHByb3hpbWF0aW9uIHRvICBlcmYgb24gWzAsMC44NDM3NV0KKyAqLworZWZ4ID0gIDEuMjgzNzkxNjYxM2UtMDEsIC8qIDB4M2UwMzc1ZDQgKi8KK2VmeDg9ICAxLjAyNzAzMzMyOTBlKzAwLCAvKiAweDNmODM3NWQ0ICovCitwcDAgID0gIDEuMjgzNzkxNjYxM2UtMDEsIC8qIDB4M2UwMzc1ZDQgKi8KK3BwMSAgPSAtMy4yNTA0MjA5ODc2ZS0wMSwgLyogMHhiZWE2NmJlYiAqLworcHAyICA9IC0yLjg0ODE3NDk4MThlLTAyLCAvKiAweGJjZTk1MjhmICovCitwcDMgID0gLTUuNzcwMjcwMjQ3MGUtMDMsIC8qIDB4YmJiZDE0ODkgKi8KK3BwNCAgPSAtMi4zNzYzMDE3NDUyZS0wNSwgLyogMHhiN2M3NTZiMSAqLworcXExICA9ICAzLjk3OTE3MjExMDZlLTAxLCAvKiAweDNlY2JiYmNlICovCitxcTIgID0gIDYuNTAyMjI1MjUwMGUtMDIsIC8qIDB4M2Q4NTJhNjMgKi8KK3FxMyAgPSAgNS4wODEzMDYyMTE3ZS0wMywgLyogMHgzYmE2ODExNiAqLworcXE0ICA9ICAxLjMyNDk0NzM3MDRlLTA0LCAvKiAweDM5MGFlZTQ5ICovCitxcTUgID0gLTMuOTYwMjI4MjQxM2UtMDYsIC8qIDB4YjY4NGUyMWEgKi8KKy8qCisgKiBDb2VmZmljaWVudHMgZm9yIGFwcHJveGltYXRpb24gdG8gIGVyZiAgaW4gWzAuODQzNzUsMS4yNV0KKyAqLworcGEwICA9IC0yLjM2MjExODU2ODNlLTAzLCAvKiAweGJiMWFjZGM2ICovCitwYTEgID0gIDQuMTQ4NTYxMDYwNGUtMDEsIC8qIDB4M2VkNDY4MDUgKi8KK3BhMiAgPSAtMy43MjIwNzg4MDAyZS0wMSwgLyogMHhiZWJlOTIwOCAqLworcGEzICA9ICAzLjE4MzQ2NjE5NjFlLTAxLCAvKiAweDNlYTJmZTU0ICovCitwYTQgID0gLTEuMTA4OTQ2OTQ5MmUtMDEsIC8qIDB4YmRlMzFjYzIgKi8KK3BhNSAgPSAgMy41NDc4MzA1MDcyZS0wMiwgLyogMHgzZDExNTFiMyAqLworcGE2ICA9IC0yLjE2NjM3NTUxNzhlLTAzLCAvKiAweGJiMGRmOWMwICovCitxYTEgID0gIDEuMDY0MjA4ODIwNWUtMDEsIC8qIDB4M2RkOWYzMzEgKi8KK3FhMiAgPSAgNS40MDM5Nzk0MjA3ZS0wMSwgLyogMHgzZjBhNTc4NSAqLworcWEzICA9ICA3LjE4Mjg2NTU4OTllLTAyLCAvKiAweDNkOTMxYWU3ICovCitxYTQgID0gIDEuMjYxNzEyMTYzN2UtMDEsIC8qIDB4M2UwMTMzMDcgKi8KK3FhNSAgPSAgMS4zNjM3MDgzNTgzZS0wMiwgLyogMHgzYzVmNmUxMyAqLworcWE2ICA9ICAxLjE5ODQ1MDAxMDNlLTAyLCAvKiAweDNjNDQ1YWEzICovCisvKgorICogQ29lZmZpY2llbnRzIGZvciBhcHByb3hpbWF0aW9uIHRvICBlcmZjIGluIFsxLjI1LDEvMC4zNV0KKyAqLworcmEwICA9IC05Ljg2NDk0NDAzMzNlLTAzLCAvKiAweGJjMjFhMDkzICovCityYTEgID0gLTYuOTM4NTg1NjM5MGUtMDEsIC8qIDB4YmYzMWEwYjcgKi8KK3JhMiAgPSAtMS4wNTU4NjI2MTc1ZSswMSwgLyogMHhjMTI4ZjAyMiAqLworcmEzICA9IC02LjIzNzUzMzE4NzllKzAxLCAvKiAweGMyNzk4MDU3ICovCityYTQgID0gLTEuNjIzOTY2Njc0OGUrMDIsIC8qIDB4YzMyMjY1OGMgKi8KK3JhNSAgPSAtMS44NDYwNTA4NzI4ZSswMiwgLyogMHhjMzM4OWFlNyAqLworcmE2ICA9IC04LjEyODc0Mzc0MzllKzAxLCAvKiAweGMyYTI5MzJiICovCityYTcgID0gLTkuODE0MzI5MTQ3M2UrMDAsIC8qIDB4YzExZDA3N2UgKi8KK3NhMSAgPSAgMS45NjUxMjcxODIwZSswMSwgLyogMHg0MTlkMzVjZSAqLworc2EyICA9ICAxLjM3NjU3NzYwNjJlKzAyLCAvKiAweDQzMDlhODYzICovCitzYTMgID0gIDQuMzQ1NjU4ODc0NWUrMDIsIC8qIDB4NDNkOTQ4NmYgKi8KK3NhNCAgPSAgNi40NTM4NzI2ODA3ZSswMiwgLyogMHg0NDIxNThjOSAqLworc2E1ICA9ICA0LjI5MDA4MTQ4MTllKzAyLCAvKiAweDQzZDY4MTBiICovCitzYTYgID0gIDEuMDg2MzUwMDIxNGUrMDIsIC8qIDB4NDJkOTQ1MWYgKi8KK3NhNyAgPSAgNi41NzAyNDk1NTc1ZSswMCwgLyogMHg0MGQyM2Y3YyAqLworc2E4ICA9IC02LjA0MjQ0MTM1MzJlLTAyLCAvKiAweGJkNzc3Zjk3ICovCisvKgorICogQ29lZmZpY2llbnRzIGZvciBhcHByb3hpbWF0aW9uIHRvICBlcmZjIGluIFsxLy4zNSwyOF0KKyAqLworcmIwICA9IC05Ljg2NDk0MzEwMjBlLTAzLCAvKiAweGJjMjFhMDkyICovCityYjEgID0gLTcuOTkyODMyNjYwN2UtMDEsIC8qIDB4YmY0YzlkZDQgKi8KK3JiMiAgPSAtMS43NzU3OTU1NTUxZSswMSwgLyogMHhjMThlMTA0YiAqLworcmIzICA9IC0xLjYwNjM2MzgzMDZlKzAyLCAvKiAweGMzMjBhMmVhICovCityYjQgID0gLTYuMzc1NjY0NjcyOWUrMDIsIC8qIDB4YzQxZjY0NDEgKi8KK3JiNSAgPSAtMS4wMjUwOTUwOTI4ZSswMywgLyogMHhjNDgwMjMwYiAqLworcmI2ICA9IC00LjgzNTE5MTk1NTZlKzAyLCAvKiAweGMzZjFjMjc1ICovCitzYjEgID0gIDMuMDMzODA2MDM3OWUrMDEsIC8qIDB4NDFmMmI0NTkgKi8KK3NiMiAgPSAgMy4yNTc5MjUxMDk5ZSswMiwgLyogMHg0M2EyZTU3MSAqLworc2IzICA9ICAxLjUzNjcyOTYxNDNlKzAzLCAvKiAweDQ0YzAxNzU5ICovCitzYjQgID0gIDMuMTk5ODU4MTU0M2UrMDMsIC8qIDB4NDU0N2ZkYmIgKi8KK3NiNSAgPSAgMi41NTMwNTAyOTMwZSswMywgLyogMHg0NTFmOTBjZSAqLworc2I2ICA9ICA0Ljc0NTI4NTMzOTRlKzAyLCAvKiAweDQzZWQ0M2E3ICovCitzYjcgID0gLTIuMjQ0MDk1MjMwMWUrMDE7IC8qIDB4YzFiMzg3MTIgKi8KKworZmxvYXQKK2VyZmYoZmxvYXQgeCkKK3sKKwlpbnQzMl90IGh4LGl4LGk7CisJZmxvYXQgUixTLFAsUSxzLHkseixyOworCUdFVF9GTE9BVF9XT1JEKGh4LHgpOworCWl4ID0gaHgmMHg3ZmZmZmZmZjsKKwlpZihpeD49MHg3ZjgwMDAwMCkgewkJLyogZXJmKG5hbik9bmFuICovCisJICAgIGkgPSAoKHVfaW50MzJfdCloeD4+MzEpPDwxOworCSAgICByZXR1cm4gKGZsb2F0KSgxLWkpK29uZS94OwkvKiBlcmYoKy1pbmYpPSstMSAqLworCX0KKworCWlmKGl4IDwgMHgzZjU4MDAwMCkgewkJLyogfHh8PDAuODQzNzUgKi8KKwkgICAgaWYoaXggPCAweDMxODAwMDAwKSB7IAkvKiB8eHw8MioqLTI4ICovCisJICAgICAgICBpZiAoaXggPCAweDA0MDAwMDAwKQorCQkgICAgLyphdm9pZCB1bmRlcmZsb3cgKi8KKwkJICAgIHJldHVybiAoZmxvYXQpMC4xMjUqKChmbG9hdCk4LjAqeCtlZng4KngpOworCQlyZXR1cm4geCArIGVmeCp4OworCSAgICB9CisJICAgIHogPSB4Kng7CisJICAgIHIgPSBwcDAreioocHAxK3oqKHBwMit6KihwcDMreipwcDQpKSk7CisJICAgIHMgPSBvbmUreioocXExK3oqKHFxMit6KihxcTMreioocXE0K3oqcXE1KSkpKTsKKwkgICAgeSA9IHIvczsKKwkgICAgcmV0dXJuIHggKyB4Knk7CisJfQorCWlmKGl4IDwgMHgzZmEwMDAwMCkgewkJLyogMC44NDM3NSA8PSB8eHwgPCAxLjI1ICovCisJICAgIHMgPSBmYWJzZih4KS1vbmU7CisJICAgIFAgPSBwYTArcyoocGExK3MqKHBhMitzKihwYTMrcyoocGE0K3MqKHBhNStzKnBhNikpKSkpOworCSAgICBRID0gb25lK3MqKHFhMStzKihxYTIrcyoocWEzK3MqKHFhNCtzKihxYTUrcypxYTYpKSkpKTsKKwkgICAgaWYoaHg+PTApIHJldHVybiBlcnggKyBQL1E7IGVsc2UgcmV0dXJuIC1lcnggLSBQL1E7CisJfQorCWlmIChpeCA+PSAweDQwYzAwMDAwKSB7CQkvKiBpbmY+fHh8Pj02ICovCisJICAgIGlmKGh4Pj0wKSByZXR1cm4gb25lLXRpbnk7IGVsc2UgcmV0dXJuIHRpbnktb25lOworCX0KKwl4ID0gZmFic2YoeCk7CisgCXMgPSBvbmUvKHgqeCk7CisJaWYoaXg8IDB4NDAzNkRCNkUpIHsJLyogfHh8IDwgMS8wLjM1ICovCisJICAgIFI9cmEwK3MqKHJhMStzKihyYTIrcyoocmEzK3MqKHJhNCtzKigKKwkJCQlyYTUrcyoocmE2K3MqcmE3KSkpKSkpOworCSAgICBTPW9uZStzKihzYTErcyooc2EyK3MqKHNhMytzKihzYTQrcyooCisJCQkJc2E1K3MqKHNhNitzKihzYTcrcypzYTgpKSkpKSkpOworCX0gZWxzZSB7CS8qIHx4fCA+PSAxLzAuMzUgKi8KKwkgICAgUj1yYjArcyoocmIxK3MqKHJiMitzKihyYjMrcyoocmI0K3MqKAorCQkJCXJiNStzKnJiNikpKSkpOworCSAgICBTPW9uZStzKihzYjErcyooc2IyK3MqKHNiMytzKihzYjQrcyooCisJCQkJc2I1K3MqKHNiNitzKnNiNykpKSkpKTsKKwl9CisJR0VUX0ZMT0FUX1dPUkQoaXgseCk7CisJU0VUX0ZMT0FUX1dPUkQoeixpeCYweGZmZmZmMDAwKTsKKwlyICA9ICBfX2llZWU3NTRfZXhwZigteip6LShmbG9hdCkwLjU2MjUpKl9faWVlZTc1NF9leHBmKCh6LXgpKih6K3gpK1IvUyk7CisJaWYoaHg+PTApIHJldHVybiBvbmUtci94OyBlbHNlIHJldHVybiAgci94LW9uZTsKK30KKworZmxvYXQKK2VyZmNmKGZsb2F0IHgpCit7CisJaW50MzJfdCBoeCxpeDsKKwlmbG9hdCBSLFMsUCxRLHMseSx6LHI7CisJR0VUX0ZMT0FUX1dPUkQoaHgseCk7CisJaXggPSBoeCYweDdmZmZmZmZmOworCWlmKGl4Pj0weDdmODAwMDAwKSB7CQkJLyogZXJmYyhuYW4pPW5hbiAqLworCQkJCQkJLyogZXJmYygrLWluZik9MCwyICovCisJICAgIHJldHVybiAoZmxvYXQpKCgodV9pbnQzMl90KWh4Pj4zMSk8PDEpK29uZS94OworCX0KKworCWlmKGl4IDwgMHgzZjU4MDAwMCkgewkJLyogfHh8PDAuODQzNzUgKi8KKwkgICAgaWYoaXggPCAweDIzODAwMDAwKSAgCS8qIHx4fDwyKiotNTYgKi8KKwkJcmV0dXJuIG9uZS14OworCSAgICB6ID0geCp4OworCSAgICByID0gcHAwK3oqKHBwMSt6KihwcDIreioocHAzK3oqcHA0KSkpOworCSAgICBzID0gb25lK3oqKHFxMSt6KihxcTIreioocXEzK3oqKHFxNCt6KnFxNSkpKSk7CisJICAgIHkgPSByL3M7CisJICAgIGlmKGh4IDwgMHgzZTgwMDAwMCkgeyAgCS8qIHg8MS80ICovCisJCXJldHVybiBvbmUtKHgreCp5KTsKKwkgICAgfSBlbHNlIHsKKwkJciA9IHgqeTsKKwkJciArPSAoeC1oYWxmKTsKKwkgICAgICAgIHJldHVybiBoYWxmIC0gciA7CisJICAgIH0KKwl9CisJaWYoaXggPCAweDNmYTAwMDAwKSB7CQkvKiAwLjg0Mzc1IDw9IHx4fCA8IDEuMjUgKi8KKwkgICAgcyA9IGZhYnNmKHgpLW9uZTsKKwkgICAgUCA9IHBhMCtzKihwYTErcyoocGEyK3MqKHBhMytzKihwYTQrcyoocGE1K3MqcGE2KSkpKSk7CisJICAgIFEgPSBvbmUrcyoocWExK3MqKHFhMitzKihxYTMrcyoocWE0K3MqKHFhNStzKnFhNikpKSkpOworCSAgICBpZihoeD49MCkgeworCSAgICAgICAgeiAgPSBvbmUtZXJ4OyByZXR1cm4geiAtIFAvUTsKKwkgICAgfSBlbHNlIHsKKwkJeiA9IGVyeCtQL1E7IHJldHVybiBvbmUrejsKKwkgICAgfQorCX0KKwlpZiAoaXggPCAweDQxZTAwMDAwKSB7CQkvKiB8eHw8MjggKi8KKwkgICAgeCA9IGZhYnNmKHgpOworIAkgICAgcyA9IG9uZS8oeCp4KTsKKwkgICAgaWYoaXg8IDB4NDAzNkRCNkQpIHsJLyogfHh8IDwgMS8uMzUgfiAyLjg1NzE0MyovCisJICAgICAgICBSPXJhMCtzKihyYTErcyoocmEyK3MqKHJhMytzKihyYTQrcyooCisJCQkJcmE1K3MqKHJhNitzKnJhNykpKSkpKTsKKwkgICAgICAgIFM9b25lK3MqKHNhMStzKihzYTIrcyooc2EzK3MqKHNhNCtzKigKKwkJCQlzYTUrcyooc2E2K3MqKHNhNytzKnNhOCkpKSkpKSk7CisJICAgIH0gZWxzZSB7CQkJLyogfHh8ID49IDEvLjM1IH4gMi44NTcxNDMgKi8KKwkJaWYoaHg8MCYmaXg+PTB4NDBjMDAwMDApIHJldHVybiB0d28tdGlueTsvKiB4IDwgLTYgKi8KKwkgICAgICAgIFI9cmIwK3MqKHJiMStzKihyYjIrcyoocmIzK3MqKHJiNCtzKigKKwkJCQlyYjUrcypyYjYpKSkpKTsKKwkgICAgICAgIFM9b25lK3MqKHNiMStzKihzYjIrcyooc2IzK3MqKHNiNCtzKigKKwkJCQlzYjUrcyooc2I2K3Mqc2I3KSkpKSkpOworCSAgICB9CisJICAgIEdFVF9GTE9BVF9XT1JEKGl4LHgpOworCSAgICBTRVRfRkxPQVRfV09SRCh6LGl4JjB4ZmZmZmYwMDApOworCSAgICByICA9ICBfX2llZWU3NTRfZXhwZigteip6LShmbG9hdCkwLjU2MjUpKgorCQkJX19pZWVlNzU0X2V4cGYoKHoteCkqKHoreCkrUi9TKTsKKwkgICAgaWYoaHg+MCkgcmV0dXJuIHIveDsgZWxzZSByZXR1cm4gdHdvLXIveDsKKwl9IGVsc2UgeworCSAgICBpZihoeD4wKSByZXR1cm4gdGlueSp0aW55OyBlbHNlIHJldHVybiB0d28tdGlueTsKKwl9Cit9CmRpZmYgLS1naXQgYS9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfZXhwMi5jIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2V4cDIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZGUxMWMyCi0tLSAvZGV2L251bGwKKysrIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2V4cDIuYwpAQCAtMCwwICsxLDM5NyBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUgRGF2aWQgU2NodWx0eiA8ZGFzQEZyZWVCU0QuT1JHPgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CitfX0ZCU0RJRCgiJEZyZWVCU0QkIik7CisKKyNpbmNsdWRlIDxmbG9hdC5oPgorCisjaW5jbHVkZSAibWF0aC5oIgorI2luY2x1ZGUgIm1hdGhfcHJpdmF0ZS5oIgorCisjZGVmaW5lCVRCTEJJVFMJOAorI2RlZmluZQlUQkxTSVpFCSgxIDw8IFRCTEJJVFMpCisKK3N0YXRpYyBjb25zdCBkb3VibGUKKyAgICByZWR1eCAgICA9IDB4MS44cDUyIC8gVEJMU0laRSwKKyAgICBQMQkgICAgID0gMHgxLjYyZTQyZmVmYTM5ZWZwLTEsCisgICAgUDIJICAgICA9IDB4MS5lYmZiZGZmODJjNTc1cC0zLAorICAgIFAzCSAgICAgPSAweDEuYzZiMDhkNzA0YTBhNnAtNSwKKyAgICBQNAkgICAgID0gMHgxLjNiMmFiODhmNzA0MDBwLTcsCisgICAgUDUJICAgICA9IDB4MS41ZDg4MDAzODc1Yzc0cC0xMDsKKworc3RhdGljIHZvbGF0aWxlIGRvdWJsZQorICAgIGh1Z2UgICAgID0gMHgxcDEwMDAsCisgICAgdHdvbTEwMDAgPSAweDFwLTEwMDA7CisKK3N0YXRpYyBjb25zdCBkb3VibGUgdGJsW1RCTFNJWkUgKiAyXSA9IHsKKy8qCWV4cDIoeiArIGVwcykJCWVwcwkqLworCTB4MS42YTA5ZTY2N2YzZDVkcC0xLAkgMHgxLjk4ODBwLTQ0LAorCTB4MS42YjA1MmZhNzUxNzQ0cC0xLAkgMHgxLjgwMDBwLTUwLAorCTB4MS42YzAxMjc1MGJkOWZlcC0xLAktMHgxLjg3ODBwLTQ1LAorCTB4MS42Y2ZkY2RkZDQ3NmJmcC0xLAkgMHgxLmVjMDBwLTQ2LAorCTB4MS42ZGZiMjNjNjUxYTI5cC0xLAktMHgxLjgwMDBwLTUwLAorCTB4MS42ZWY5Mjk4NTkzYWUzcC0xLAktMHgxLmMwMDBwLTUyLAorCTB4MS42ZmY3ZGY5NTE5Mzg2cC0xLAktMHgxLmZkODBwLTQ1LAorCTB4MS43MGY3NDY2ZjQyZGEzcC0xLAktMHgxLmM4ODBwLTQ1LAorCTB4MS43MWY3NWU4ZWM1ZmMzcC0xLAkgMHgxLjNjMDBwLTQ2LAorCTB4MS43MmY4Mjg2ZWFjZjA1cC0xLAktMHgxLjgzMDBwLTQ0LAorCTB4MS43M2Y5YTQ4YTU4MTUycC0xLAktMHgxLjBjMDBwLTQ3LAorCTB4MS43NGZiZDM1ZDdjY2ZjcC0xLAkgMHgxLmY4ODBwLTQ1LAorCTB4MS43NWZlYjU2NDI2N2YxcC0xLAkgMHgxLjNlMDBwLTQ3LAorCTB4MS43NzAyNGIxYWI2ZDQ4cC0xLAktMHgxLjdkMDBwLTQ1LAorCTB4MS43ODA2OTRmZGU1ZDM4cC0xLAktMHgxLmQwMDBwLTUwLAorCTB4MS43OTBiOTM4YWMxZDAwcC0xLAkgMHgxLjMwMDBwLTQ5LAorCTB4MS43YTExNDczZWIwMTc4cC0xLAktMHgxLmQwMDBwLTQ5LAorCTB4MS43YjE3YjA5NzZkMDYwcC0xLAkgMHgxLjA0MDBwLTQ1LAorCTB4MS43YzFlZDAxMzBjMTMzcC0xLAkgMHgxLjAwMDBwLTUzLAorCTB4MS43ZDI2YTYyZmY4NjM2cC0xLAktMHgxLjY5MDBwLTQ1LAorCTB4MS43ZTJmMzM2Y2Y0ZTNicC0xLAktMHgxLjJlMDBwLTQ3LAorCTB4MS43ZjM4Nzg0OTFjM2U4cC0xLAktMHgxLjQ1ODBwLTQ1LAorCTB4MS44MDQyNzU0M2UxYjRlcC0xLAkgMHgxLjMwMDBwLTQ0LAorCTB4MS44MTRkMmFkZDEwNzFhcC0xLAkgMHgxLmYwMDBwLTQ3LAorCTB4MS44MjU4OTk5NGNjZDdlcC0xLAktMHgxLjFjMDBwLTQ1LAorCTB4MS44MzY0YzFlYjk0MmQwcC0xLAkgMHgxLjlkMDBwLTQ1LAorCTB4MS44NDcxYTQ2MjNjYWI1cC0xLAkgMHgxLjcxMDBwLTQzLAorCTB4MS44NTdmNDE3OWY1YmJjcC0xLAkgMHgxLjI2MDBwLTQ1LAorCTB4MS44NjhkOTliNDQ5MWFmcC0xLAktMHgxLjJjNDBwLTQ0LAorCTB4MS44NzljYWQ5MzFhMzk1cC0xLAktMHgxLjMwMDBwLTQ1LAorCTB4MS44OGFjN2Q5OGE2NWI4cC0xLAktMHgxLmE4MDBwLTQ1LAorCTB4MS44OWJkMGE0Nzg1ODAwcC0xLAktMHgxLmQwMDBwLTQ5LAorCTB4MS44YWNlNTQyMmFhMjIzcC0xLAkgMHgxLjMyODBwLTQ0LAorCTB4MS44YmUwNWJhZDYxOWZhcC0xLAkgMHgxLjJiNDBwLTQzLAorCTB4MS44Y2YzMjE2YjU0MzgzcC0xLAktMHgxLmVkMDBwLTQ1LAorCTB4MS44ZTA2YTVlMDg2NjRjcC0xLAktMHgxLjA1MDBwLTQ1LAorCTB4MS44ZjFhZTk5MTU3ODA3cC0xLAkgMHgxLjgyODBwLTQ1LAorCTB4MS45MDJmZWQwMjgyYzBlcC0xLAktMHgxLmNiMDBwLTQ2LAorCTB4MS45MTQ1YjBiOTFmZjk2cC0xLAktMHgxLjVlMDBwLTQ3LAorCTB4MS45MjVjMzUzYWEyZmY5cC0xLAkgMHgxLjU0MDBwLTQ4LAorCTB4MS45MzczN2IwY2RjNjRhcC0xLAkgMHgxLjcyMDBwLTQ2LAorCTB4MS45NDhiODJiNWY5OGFlcC0xLAktMHgxLjkwMDBwLTQ3LAorCTB4MS45NWE0NGNiYzg1MmNicC0xLAkgMHgxLjU2ODBwLTQ1LAorCTB4MS45NmJkZDlhNzY2ZjIxcC0xLAktMHgxLjZkMDBwLTQ0LAorCTB4MS45N2Q4MjlmZGU0ZTJhcC0xLAktMHgxLjEwMDBwLTQ3LAorCTB4MS45OGYzM2U0N2EyM2EzcC0xLAkgMHgxLmQwMDBwLTQ1LAorCTB4MS45YTBmMTcwY2EwNjA0cC0xLAktMHgxLjhhNDBwLTQ0LAorCTB4MS45YjJiYjRkNTNmZjg5cC0xLAkgMHgxLjU1YzBwLTQ0LAorCTB4MS45YzQ5MTgyYTNmMTVicC0xLAkgMHgxLjZiODBwLTQ1LAorCTB4MS45ZDY3NDE5NGJiOGM1cC0xLAktMHgxLmMwMDBwLTQ5LAorCTB4MS45ZTg2MzE5ZTMyMzhlcC0xLAkgMHgxLjdkMDBwLTQ2LAorCTB4MS45ZmE1ZThkMDdmMzAycC0xLAkgMHgxLjY0MDBwLTQ2LAorCTB4MS5hMGM2NjdiNWRlNTRkcC0xLAktMHgxLjUwMDBwLTQ4LAorCTB4MS5hMWU3YWVkOGViOGY2cC0xLAkgMHgxLjllMDBwLTQ3LAorCTB4MS5hMzA5YmVjNGEyZTI3cC0xLAkgMHgxLmFkODBwLTQ1LAorCTB4MS5hNDJjOTgwNDYwYTVkcC0xLAktMHgxLmFmMDBwLTQ2LAorCTB4MS5hNTUwM2IyM2UyNTlicC0xLAkgMHgxLmI2MDBwLTQ3LAorCTB4MS5hNjc0YThhZjQ2MjEzcC0xLAkgMHgxLjg4ODBwLTQ0LAorCTB4MS5hNzk5ZTEzMzBiM2E3cC0xLAkgMHgxLjEyMDBwLTQ2LAorCTB4MS5hOGJmZTUzYzEyZThkcC0xLAkgMHgxLjZjMDBwLTQ3LAorCTB4MS5hOWU2YjU1NzlmY2QycC0xLAktMHgxLjliODBwLTQ1LAorCTB4MS5hYjBlNTIxMzU2ZmI4cC0xLAkgMHgxLmI3MDBwLTQ1LAorCTB4MS5hYzM2YmJmZDNmMzgxcC0xLAkgMHgxLjkwMDBwLTUwLAorCTB4MS5hZDVmZjNhM2MyNzgwcC0xLAkgMHgxLjQwMDBwLTQ5LAorCTB4MS5hZTg5Zjk5NWFkMmEzcC0xLAktMHgxLmM5MDBwLTQ1LAorCTB4MS5hZmI0Y2U2MjJmMzY3cC0xLAkgMHgxLjY1MDBwLTQ2LAorCTB4MS5iMGUwNzI5OGRiNzkwcC0xLAkgMHgxLmZkNDBwLTQ1LAorCTB4MS5iMjBjZTZjOWE4OWE5cC0xLAkgMHgxLjI3MDBwLTQ2LAorCTB4MS5iMzNhMmI4NGYxYTRicC0xLAkgMHgxLmQ0NzBwLTQzLAorCTB4MS5iNDY4NDE1Yjc0N2U3cC0xLAktMHgxLjgzODBwLTQ0LAorCTB4MS5iNTk3MjhkZTU1OTNhcC0xLAkgMHgxLjgwMDBwLTU0LAorCTB4MS5iNmM2ZTI5ZjFjNTZhcC0xLAkgMHgxLmFkMDBwLTQ3LAorCTB4MS5iN2Y3NmYyZmI1ZTUwcC0xLAkgMHgxLmU4MDBwLTUwLAorCTB4MS5iOTI4Y2YyMjc0OWIycC0xLAktMHgxLjRjMDBwLTQ3LAorCTB4MS5iYTViMDMwYTEwNjAzcC0xLAktMHgxLmQ3MDBwLTQ3LAorCTB4MS5iYjhlMGI3OWE2ZjY2cC0xLAkgMHgxLmQ5MDBwLTQ3LAorCTB4MS5iY2MxZTkwNGJjMWZmcC0xLAkgMHgxLjJhMDBwLTQ3LAorCTB4MS5iZGY2OWMzZjNhMTZmcC0xLAktMHgxLmY3ODBwLTQ2LAorCTB4MS5iZjJjMjViZDcxZGI4cC0xLAktMHgxLjBhMDBwLTQ2LAorCTB4MS5jMDYyODYxNDFiMmU5cC0xLAktMHgxLjE0MDBwLTQ2LAorCTB4MS5jMTk5YmRkODU1MmUwcC0xLAkgMHgxLmJlMDBwLTQ3LAorCTB4MS5jMmQxY2Q5ZmE2NGVlcC0xLAktMHgxLjk0MDBwLTQ3LAorCTB4MS5jNDBhYjVmZmZkMDJmcC0xLAktMHgxLmVkMDBwLTQ3LAorCTB4MS5jNTQ0Nzc4ZmFmZDE1cC0xLAkgMHgxLjk2NjBwLTQ0LAorCTB4MS5jNjdmMTJlNTdkMGNicC0xLAktMHgxLmExMDBwLTQ2LAorCTB4MS5jN2JhODg5ODhjMWI2cC0xLAktMHgxLjg0NThwLTQyLAorCTB4MS5jOGY2ZDk0MDZlNzMzcC0xLAktMHgxLmE0ODBwLTQ2LAorCTB4MS5jYTM0MDU3NTFjNGRmcC0xLAkgMHgxLmIwMDBwLTUxLAorCTB4MS5jYjcyMGRjZWY5MDk0cC0xLAkgMHgxLjE0MDBwLTQ3LAorCTB4MS5jY2IwZjJlNmQxNjg5cC0xLAkgMHgxLjAyMDBwLTQ4LAorCTB4MS5jZGYwYjU1NWRjNDEycC0xLAkgMHgxLjM2MDBwLTQ4LAorCTB4MS5jZjMxNTViNWJhYjNicC0xLAktMHgxLjY5MDBwLTQ3LAorCTB4MS5kMDcyZDRhMDc4OWJjcC0xLAkgMHgxLjlhMDBwLTQ3LAorCTB4MS5kMWI1MzJiMDhjOGZhcC0xLAktMHgxLjVlMDBwLTQ2LAorCTB4MS5kMmY4NzA4MGQ4YTg1cC0xLAkgMHgxLmQyODBwLTQ2LAorCTB4MS5kNDNjOGVhY2FhMjAzcC0xLAkgMHgxLjFhMDBwLTQ3LAorCTB4MS5kNTgxOGRjZmJhNDkxcC0xLAkgMHgxLmYwMDBwLTUwLAorCTB4MS5kNmM3NmU4NjJlNmExcC0xLAktMHgxLjNhMDBwLTQ3LAorCTB4MS5kODBlMzE2Yzk4MzRlcC0xLAktMHgxLmNkODBwLTQ3LAorCTB4MS5kOTU1ZDcxZmY2MDkwcC0xLAkgMHgxLjRjMDBwLTQ4LAorCTB4MS5kYTllNjAzZGIzMmFlcC0xLAkgMHgxLmY5MDBwLTQ4LAorCTB4MS5kYmU3Y2Q2M2E4MzI1cC0xLAkgMHgxLjk4MDBwLTQ5LAorCTB4MS5kZDMyMWYzMDFiNDQ1cC0xLAktMHgxLjUyMDBwLTQ4LAorCTB4MS5kZTdkNTY0MWMwNWJmcC0xLAktMHgxLmQ3MDBwLTQ2LAorCTB4MS5kZmM5NzMzN2I5YWVjcC0xLAktMHgxLjYxNDBwLTQ2LAorCTB4MS5lMTE2NzZiMTk3ZDVlcC0xLAkgMHgxLmI0ODBwLTQ3LAorCTB4MS5lMjY0NjE0ZjVhM2U3cC0xLAkgMHgxLjBjZTBwLTQzLAorCTB4MS5lM2IzMzNiMTZlZTVjcC0xLAkgMHgxLmM2ODBwLTQ3LAorCTB4MS5lNTAyZWU3OGIzZmI0cC0xLAktMHgxLjkzMDBwLTQ3LAorCTB4MS5lNjUzOTI0Njc2ZDY4cC0xLAktMHgxLjUwMDBwLTQ5LAorCTB4MS5lN2E1MWZiYzc0YzQ0cC0xLAktMHgxLjdmODBwLTQ3LAorCTB4MS5lOGY3OTc3Y2RiNzI2cC0xLAktMHgxLjM3MDBwLTQ4LAorCTB4MS5lYTRhZmEyYTQ5MGU4cC0xLAkgMHgxLjVkMDBwLTQ5LAorCTB4MS5lYjlmNDg2N2NjYWU0cC0xLAkgMHgxLjYxYTBwLTQ2LAorCTB4MS5lY2Y0ODJkOGU2ODBkcC0xLAkgMHgxLjU1MDBwLTQ4LAorCTB4MS5lZTRhYWEyMTg4NTE0cC0xLAkgMHgxLjY0MDBwLTUxLAorCTB4MS5lZmExYmVlNjE1YTEzcC0xLAktMHgxLmU4MDBwLTQ5LAorCTB4MS5mMGY5YzFjYjY0MTA2cC0xLAktMHgxLmE4ODBwLTQ4LAorCTB4MS5mMjUyYjM3NmJiOTYzcC0xLAktMHgxLmM5MDBwLTQ1LAorCTB4MS5mM2FjOTQ4ZGQ3Mjc1cC0xLAkgMHgxLmEwMDBwLTUzLAorCTB4MS5mNTA3NjViNmU0NTI0cC0xLAktMHgxLjRmMDBwLTQ4LAorCTB4MS5mNjYzMjc5ODg0NGZkcC0xLAkgMHgxLmE4MDBwLTUxLAorCTB4MS5mN2JmZGFkOWNiZTM4cC0xLAkgMHgxLmFiYzBwLTQ4LAorCTB4MS5mOTFkODAyMjQzYzgycC0xLAktMHgxLjQ2MDBwLTUwLAorCTB4MS5mYTdjMTgxOWU5MDhlcC0xLAktMHgxLmIwYzBwLTQ3LAorCTB4MS5mYmRiYTM2OTJkNTExcC0xLAktMHgxLjBlMDBwLTUxLAorCTB4MS5mZDNjMjJiOGY3MTk0cC0xLAktMHgxLjBkZThwLTQ2LAorCTB4MS5mZTlkOTZiMmEyM2VlcC0xLAkgMHgxLmU0MzBwLTQ5LAorCTB4MS4wMDAwMDAwMDAwMDAwcCswLAkgMHgwLjAwMDBwKzAsCisJMHgxLjAwYjFhZmE1YWJjYmVwKzAsCS0weDEuMzQwMHAtNTIsCisJMHgxLjAxNjNkYTlmYjMzMDNwKzAsCS0weDEuMjE3MHAtNDYsCisJMHgxLjAyMTY4MTQzYjAyODJwKzAsCSAweDEuYTQwMHAtNTIsCisJMHgxLjAyYzlhM2U3NzgwNmNwKzAsCSAweDEuZjk4MHAtNDksCisJMHgxLjAzN2Q0MmUxMWJiY2FwKzAsCS0weDEuNzQwMHAtNTEsCisJMHgxLjA0MzE1ZTg2ZTdmODlwKzAsCSAweDEuODMwMHAtNTAsCisJMHgxLjA0ZTVmNzJmNjU0NjdwKzAsCS0weDEuYTNmMHAtNDYsCisJMHgxLjA1OWIwZDMxNTg1NWFwKzAsCS0weDEuMjg0MHAtNDcsCisJMHgxLjA2NTBhMGUzYzFmOTVwKzAsCSAweDEuMTYwMHAtNDgsCisJMHgxLjA3MDZiMjlkZGY3MWFwKzAsCSAweDEuNTI0MHAtNDYsCisJMHgxLjA3YmQ0MmI3MmE4MmRwKzAsCS0weDEuOWEwMHAtNDksCisJMHgxLjA4NzQ1MTg3NTliZDBwKzAsCSAweDEuNjQwMHAtNDksCisJMHgxLjA5MmJkZjY2NjA3YzhwKzAsCS0weDEuMDc4MHAtNDcsCisJMHgxLjA5ZTNlY2FjNmYzODNwKzAsCS0weDEuODAwMHAtNTQsCisJMHgxLjBhOWM3OWIxZjM5MzBwKzAsCSAweDEuZmEwMHAtNDgsCisJMHgxLjBiNTU4NmNmOTg4ZmNwKzAsCS0weDEuYWM4MHAtNDgsCisJMHgxLjBjMGYxNDVlNDZjOGFwKzAsCSAweDEuOWMwMHAtNTAsCisJMHgxLjBjYzkyMmI3MjQ4MTZwKzAsCSAweDEuNTIwMHAtNDcsCisJMHgxLjBkODNiMjMzOTVkZDhwKzAsCS0weDEuYWQwMHAtNDgsCisJMHgxLjBlM2VjMzJkM2QxZjNwKzAsCSAweDEuYmFjMHAtNDYsCisJMHgxLjBlZmE1NWZkZmE5YTZwKzAsCS0weDEuNGU4MHAtNDcsCisJMHgxLjBmYjY2YWZmZWQyZjBwKzAsCS0weDEuZDMwMHAtNDcsCisJMHgxLjEwNzMwMjhkNzIzNGJwKzAsCSAweDEuMTUwMHAtNDgsCisJMHgxLjExMzAxZDAxMjViNWJwKzAsCSAweDEuYzAwMHAtNDksCisJMHgxLjExZWRiYWI1ZTJhZjlwKzAsCSAweDEuNmJjMHAtNDYsCisJMHgxLjEyYWJkYzA2YzMxZDVwKzAsCSAweDEuODQwMHAtNDksCisJMHgxLjEzNmE4MTRmMjA0N2RwKzAsCS0weDEuZWQwMHAtNDcsCisJMHgxLjE0MjlhYWVhOTJkZTlwKzAsCSAweDEuOGUwMHAtNDksCisJMHgxLjE0ZTk1OTM0ZjMxMzhwKzAsCSAweDEuYjQwMHAtNDksCisJMHgxLjE1YTk4YzhhNThlNzFwKzAsCSAweDEuNTMwMHAtNDcsCisJMHgxLjE2NmE0NTQ3MWMzZGZwKzAsCSAweDEuMzM4MHAtNDcsCisJMHgxLjE3MmI4M2M3ZDUyMTFwKzAsCSAweDEuOGQ0MHAtNDUsCisJMHgxLjE3ZWQ0ODY5NWJiOWZwKzAsCS0weDEuNWQwMHAtNDcsCisJMHgxLjE4YWY5Mzg4YzhkOTNwKzAsCS0weDEuYzg4MHAtNDYsCisJMHgxLjE5NzI2NTgzNzVkNjZwKzAsCSAweDEuMWYwMHAtNDYsCisJMHgxLjFhMzViZWI2ZmNiYTdwKzAsCSAweDEuMDQ4MHAtNDYsCisJMHgxLjFhZjk5ZjgxMzg3ZTNwKzAsCS0weDEuNzM5MHAtNDMsCisJMHgxLjFiYmUwODQwNDVkNTRwKzAsCSAweDEuNGU0MHAtNDUsCisJMHgxLjFjODJmOTUyODFjNDNwKzAsCS0weDEuYTIwMHAtNDcsCisJMHgxLjFkNDg3MzE2OGI5YjJwKzAsCSAweDEuMzgwMHAtNDksCisJMHgxLjFlMGU3NWViNDQwMzFwKzAsCSAweDEuYWMwMHAtNDksCisJMHgxLjFlZDUwMjJmY2Q5MzhwKzAsCSAweDEuMTkwMHAtNDcsCisJMHgxLjFmOWMxODQzOGNkZjdwKzAsCS0weDEuYjc4MHAtNDYsCisJMHgxLjIwNjNiODg2MjhkOGZwKzAsCSAweDEuZDk0MHAtNDUsCisJMHgxLjIxMmJlMzU3OGE4MWVwKzAsCSAweDEuODAwMHAtNTAsCisJMHgxLjIxZjQ5OTE3ZGRkNDFwKzAsCSAweDEuYjM0MHAtNDUsCisJMHgxLjIyYmRkYTI3OTEzMjNwKzAsCSAweDEuOWY4MHAtNDYsCisJMHgxLjIzODdhNmU3NTYxZTdwKzAsCS0weDEuOWM4MHAtNDYsCisJMHgxLjI0NTFmZmI4MjE0MjdwKzAsCSAweDEuMjMwMHAtNDcsCisJMHgxLjI1MWNlNGZiMmE2MDJwKzAsCS0weDEuMzQ4MHAtNDYsCisJMHgxLjI1ZTg1NzExZWNlYjBwKzAsCSAweDEuMjcwMHAtNDYsCisJMHgxLjI2YjQ1NjVlMjdkMTZwKzAsCSAweDEuMWQwMHAtNDYsCisJMHgxLjI3ODBlMzQxZGUwMGZwKzAsCSAweDEuMWVlMHAtNDQsCisJMHgxLjI4NGRmZTFmNTYzM2VwKzAsCS0weDEuNGMwMHAtNDYsCisJMHgxLjI5MWJhNzU5MWJiMzBwKzAsCS0weDEuM2Q4MHAtNDYsCisJMHgxLjI5ZTlkZjUxZmRmMDlwKzAsCSAweDEuOGIwMHAtNDcsCisJMHgxLjJhYjhhNjZkMTBlOWJwKzAsCS0weDEuMjdjMHAtNDUsCisJMHgxLjJiODdmZDBkYWRhM2FwKzAsCSAweDEuYTM0MHAtNDUsCisJMHgxLjJjNTdlMzk3NzFhZjlwKzAsCS0weDEuMDgwMHAtNDYsCisJMHgxLjJkMjg1YTZlNDAyZDlwKzAsCS0weDEuZWQwMHAtNDcsCisJMHgxLjJkZjk2MWY2NDE1NzlwKzAsCS0weDEuNDIwMHAtNDgsCisJMHgxLjJlY2FmYTkzZTJlY2ZwKzAsCS0weDEuNDk4MHAtNDUsCisJMHgxLjJmOWQyNGFiZDg4MjJwKzAsCS0weDEuNjMwMHAtNDYsCisJMHgxLjMwNmZlMGEzMWI2MjVwKzAsCS0weDEuMjM2MHAtNDQsCisJMHgxLjMxNDMyZWRlZWE1MGJwKzAsCS0weDEuMGRmOHAtNDAsCisJMHgxLjMyMTcwZmM0Y2Q3YjhwKzAsCS0weDEuMjQ4MHAtNDUsCisJMHgxLjMyZWI4M2JhOGU5YTJwKzAsCS0weDEuNTk4MHAtNDUsCisJMHgxLjMzYzA4YjI2NDE3NjZwKzAsCSAweDEuZWQwMHAtNDYsCisJMHgxLjM0OTYyNjZlM2ZhMjdwKzAsCS0weDEuYzAwMHAtNTAsCisJMHgxLjM1NmM1NWY5MjlmMGZwKzAsCS0weDEuMGQ4MHAtNDQsCisJMHgxLjM2NDMxYTJkZTg4YjlwKzAsCSAweDEuMmM4MHAtNDUsCisJMHgxLjM3MWE3MzczYWFhMzlwKzAsCSAweDEuMDYwMHAtNDUsCisJMHgxLjM3ZjI2MjMxZTc0ZmVwKzAsCS0weDEuNjYwMHAtNDYsCisJMHgxLjM4Y2FlNmQwNWQ4MzhwKzAsCS0weDEuYWUwMHAtNDcsCisJMHgxLjM5YTQwMWI3MTNlYzNwKzAsCS0weDEuNDcyMHAtNDMsCisJMHgxLjNhN2RiMzRlNWEwMjBwKzAsCSAweDEuODIwMHAtNDcsCisJMHgxLjNiNTdmYmZlYzZlOTVwKzAsCSAweDEuZTgwMHAtNDQsCisJMHgxLjNjMzJkYzMxM2E4ZjJwKzAsCSAweDEuZjgwMHAtNDksCisJMHgxLjNkMGU1NDRlZGUxMjJwKzAsCS0weDEuN2EwMHAtNDYsCisJMHgxLjNkZWE2NGMxMjM0YmJwKzAsCSAweDEuNjMwMHAtNDUsCisJMHgxLjNlYzcwZGYxYzRlY2NwKzAsCS0weDEuOGE2MHAtNDMsCisJMHgxLjNmYTQ1MDRhYzdlOGNwKzAsCS0weDEuY2RjMHAtNDQsCisJMHgxLjQwODIyYzM2N2EwYmJwKzAsCSAweDEuNWI4MHAtNDUsCisJMHgxLjQxNjBhMjFmNzJlOTVwKzAsCSAweDEuZWMwMHAtNDYsCisJMHgxLjQyM2ZiMjcwOTQ2NDZwKzAsCS0weDEuMzYwMHAtNDYsCisJMHgxLjQzMWY1ZDk1MGE5MjBwKzAsCSAweDEuMzk4MHAtNDUsCisJMHgxLjQzZmZhM2Y4NGI5ZWJwKzAsCSAweDEuYTAwMHAtNDgsCisJMHgxLjQ0ZTA4NjA2MTg5MTlwKzAsCS0weDEuNmMwMHAtNDgsCisJMHgxLjQ1YzIwNDJhN2QyMDFwKzAsCS0weDEuYmMwMHAtNDcsCisJMHgxLjQ2YTQxZWQxZDAwMTZwKzAsCS0weDEuMjgwMHAtNDYsCisJMHgxLjQ3ODZkNjY4YjMzMjZwKzAsCSAweDEuMGUwMHAtNDQsCisJMHgxLjQ4NmEyYjVjMTNjMDBwKzAsCS0weDEuZDQwMHAtNDUsCisJMHgxLjQ5NGUxZTE5MmFmMDRwKzAsCSAweDEuYzIwMHAtNDcsCisJMHgxLjRhMzJhZjBkN2QzNzJwKzAsCS0weDEuZTUwMHAtNDYsCisJMHgxLjRiMTdkZWE2ZGI4MDFwKzAsCSAweDEuNzgwMHAtNDcsCisJMHgxLjRiZmRhZDUzNjI5ZTFwKzAsCS0weDEuMzgwMHAtNDYsCisJMHgxLjRjZTQxYjgxN2MxMzJwKzAsCSAweDEuMDgwMHAtNDcsCisJMHgxLjRkY2IyOTlmZGRkZGJwKzAsCSAweDEuYzcwMHAtNDUsCisJMHgxLjRlYjJkODFkOGFiOTZwKzAsCS0weDEuY2UwMHAtNDYsCisJMHgxLjRmOWIyNzY5ZDJkMDJwKzAsCSAweDEuOTIwMHAtNDYsCisJMHgxLjUwODQxN2Y0NTMxYzFwKzAsCS0weDEuOGMwMHAtNDcsCisJMHgxLjUxNmRhYTJjZjY2MmFwKzAsCS0weDEuYTAwMHAtNDgsCisJMHgxLjUyNTdkZTgzZjUxZWFwKzAsCSAweDEuYTA4MHAtNDMsCisJMHgxLjUzNDJiNTY5ZDRlZGFwKzAsCS0weDEuNmQ4MHAtNDUsCisJMHgxLjU0MmUyZjRmNmFjMWFwKzAsCS0weDEuMjQ0MHAtNDQsCisJMHgxLjU1MWE0Y2E1ZDk0ZGJwKzAsCSAweDEuODNjMHAtNDMsCisJMHgxLjU2MDcwZGRlOTExNmJwKzAsCSAweDEuNGIwMHAtNDUsCisJMHgxLjU2ZjQ3MzZiNTI5ZGVwKzAsCSAweDEuMTVhMHAtNDMsCisJMHgxLjU3ZTI3ZGJlMmM0MGVwKzAsCS0weDEuOWUwMHAtNDUsCisJMHgxLjU4ZDEyZDQ5N2M3NmZwKzAsCS0weDEuMzA4MHAtNDUsCisJMHgxLjU5YzA4MjdmZjBiNGNwKzAsCSAweDEuZGVjMHAtNDMsCisJMHgxLjVhYjA3ZGQ0ODU0MjdwKzAsCS0weDEuNDAwMHAtNTEsCisJMHgxLjViYTExZmJhODdhZjRwKzAsCSAweDEuMDA4MHAtNDQsCisJMHgxLjVjOTI2OGE1OTQ2MGJwKzAsCS0weDEuNmM4MHAtNDUsCisJMHgxLjVkODQ1OTA5OThlM2ZwKzAsCSAweDEuNjlhMHAtNDMsCisJMHgxLjVlNzZmMTVhZDIwZTFwKzAsCS0weDEuYjQwMHAtNDYsCisJMHgxLjVmNmEzMjBkY2ViY2FwKzAsCSAweDEuNzcwMHAtNDYsCisJMHgxLjYwNWUxYjk3NmRjYjhwKzAsCSAweDEuNmY4MHAtNDUsCisJMHgxLjYxNTJhZTZjZGY3MTVwKzAsCSAweDEuMTAwMHAtNDcsCisJMHgxLjYyNDdlYjAzYTU1MzFwKzAsCS0weDEuNWQwMHAtNDYsCisJMHgxLjYzM2RkMWQxOTI5YjVwKzAsCS0weDEuMmQwMHAtNDYsCisJMHgxLjY0MzQ2MzRjY2MzMTNwKzAsCS0weDEuYTgwMHAtNDksCisJMHgxLjY1MmI5ZmViYzhlZmFwKzAsCS0weDEuODYwMHAtNDUsCisJMHgxLjY2MjM4ODI1NTMzOTdwKzAsCSAweDEuMWZlMHAtNDAsCisJMHgxLjY3MWMxYzcwODMyOGVwKzAsCS0weDEuNzIwMHAtNDQsCisJMHgxLjY4MTU1ZDQ0Y2E5N2VwKzAsCSAweDEuNjgwMHAtNDksCisJMHgxLjY5MGY0YjE5ZTk0NzFwKzAsCS0weDEuOTc4MHAtNDUsCit9OworCisvKgorICogZXhwMih4KTogY29tcHV0ZSB0aGUgYmFzZSAyIGV4cG9uZW50aWFsIG9mIHgKKyAqCisgKiBBY2N1cmFjeTogUGVhayBlcnJvciA8IDAuNTAzIHVscCBmb3Igbm9ybWFsaXplZCByZXN1bHRzLgorICoKKyAqIE1ldGhvZDogKGFjY3VyYXRlIHRhYmxlcykKKyAqCisgKiAgIFJlZHVjZSB4OgorICogICAgIHggPSAyKiprICsgeSwgZm9yIGludGVnZXIgayBhbmQgfHl8IDw9IDEvMi4KKyAqICAgICBUaHVzIHdlIGhhdmUgZXhwMih4KSA9IDIqKmsgKiBleHAyKHkpLgorICoKKyAqICAgUmVkdWNlIHk6CisgKiAgICAgeSA9IGkvVEJMU0laRSArIHogLSBlcHNbaV0gZm9yIGludGVnZXIgaSBuZWFyIHkgKiBUQkxTSVpFLgorICogICAgIFRodXMgd2UgaGF2ZSBleHAyKHkpID0gZXhwMihpL1RCTFNJWkUpICogZXhwMih6IC0gZXBzW2ldKSwKKyAqICAgICB3aXRoIHx6IC0gZXBzW2ldfCA8PSAyKiotOSArIDIqKi0zOSBmb3IgdGhlIHRhYmxlIHVzZWQuCisgKgorICogICBXZSBjb21wdXRlIGV4cDIoaS9UQkxTSVpFKSB2aWEgdGFibGUgbG9va3VwIGFuZCBleHAyKHogLSBlcHNbaV0pIHZpYQorICogICBhIGRlZ3JlZS01IG1pbmltYXggcG9seW5vbWlhbCB3aXRoIG1heGltdW0gZXJyb3IgdW5kZXIgMS4zICogMioqLTYxLgorICogICBUaGUgdmFsdWVzIGluIGV4cDJ0W10gYW5kIGVwc1tdIGFyZSBjaG9zZW4gc3VjaCB0aGF0CisgKiAgIGV4cDJ0W2ldID0gZXhwMihpL1RCTFNJWkUgKyBlcHNbaV0pLCBhbmQgZXBzW2ldIGlzIGEgc21hbGwgb2Zmc2V0IHN1Y2gKKyAqICAgdGhhdCBleHAydFtpXSBpcyBhY2N1cmF0ZSB0byAyKiotNjQuCisgKgorICogICBOb3RlIHRoYXQgdGhlIHJhbmdlIG9mIGkgaXMgKy1UQkxTSVpFLzIsIHNvIHdlIGFjdHVhbGx5IGluZGV4IHRoZSB0YWJsZXMKKyAqICAgYnkgaTAgPSBpICsgVEJMU0laRS8yLiAgRm9yIGNhY2hlIGVmZmljaWVuY3ksIGV4cDJ0W10gYW5kIGVwc1tdIGFyZQorICogICB2aXJ0dWFsIHRhYmxlcywgaW50ZXJsZWF2ZWQgaW4gdGhlIHJlYWwgdGFibGUgdGJsW10uCisgKgorICogICBUaGlzIG1ldGhvZCBpcyBkdWUgdG8gR2FsLCB3aXRoIG1hbnkgZGV0YWlscyBkdWUgdG8gR2FsIGFuZCBCYWNoZWxpczoKKyAqCisgKglHYWwsIFMuIGFuZCBCYWNoZWxpcywgQi4gIEFuIEFjY3VyYXRlIEVsZW1lbnRhcnkgTWF0aGVtYXRpY2FsIExpYnJhcnkKKyAqCWZvciB0aGUgSUVFRSBGbG9hdGluZyBQb2ludCBTdGFuZGFyZC4gIFRPTVMgMTcoMSksIDI2LTQ2ICgxOTkxKS4KKyAqLworZG91YmxlCitleHAyKGRvdWJsZSB4KQoreworCWRvdWJsZSByLCB0LCB0d29waywgdHdvcGtwMTAwMCwgejsKKwl1aW50MzJfdCBoeCwgaXgsIGx4LCBpMDsKKwlpbnQgazsKKworCS8qIEZpbHRlciBvdXQgZXhjZXB0aW9uYWwgY2FzZXMuICovCisJR0VUX0hJR0hfV09SRChoeCx4KTsKKwlpeCA9IGh4ICYgMHg3ZmZmZmZmZjsJCS8qIGhpZ2ggd29yZCBvZiB8eHwgKi8KKwlpZihpeCA+PSAweDQwOTAwMDAwKSB7CQkJLyogfHh8ID49IDEwMjQgKi8KKwkJaWYoaXggPj0gMHg3ZmYwMDAwMCkgeworCQkJR0VUX0xPV19XT1JEKGx4LHgpOworCQkJaWYoKChpeCAmIDB4ZmZmZmYpIHwgbHgpICE9IDAgfHwgKGh4ICYgMHg4MDAwMDAwMCkgPT0gMCkKKwkJCQlyZXR1cm4gKHggKyB4KTsJLyogeCBpcyBOYU4gb3IgK0luZiAqLworCQkJZWxzZSAKKwkJCQlyZXR1cm4gKDAuMCk7CS8qIHggaXMgLUluZiAqLworCQl9CisJCWlmKHggPj0gMHgxLjBwMTApCisJCQlyZXR1cm4gKGh1Z2UgKiBodWdlKTsgLyogb3ZlcmZsb3cgKi8KKwkJaWYoeCA8PSAtMHgxLjBjY3AxMCkKKwkJCXJldHVybiAodHdvbTEwMDAgKiB0d29tMTAwMCk7IC8qIHVuZGVyZmxvdyAqLworCX0gZWxzZSBpZiAoaXggPCAweDNjOTAwMDAwKSB7CQkvKiB8eHwgPCAweDFwLTU0ICovCisJCXJldHVybiAoMS4wICsgeCk7CisJfQorCisJLyogUmVkdWNlIHgsIGNvbXB1dGluZyB6LCBpMCwgYW5kIGsuICovCisJU1RSSUNUX0FTU0lHTihkb3VibGUsIHQsIHggKyByZWR1eCk7CisJR0VUX0xPV19XT1JEKGkwLCB0KTsKKwlpMCArPSBUQkxTSVpFIC8gMjsKKwlrID0gKGkwID4+IFRCTEJJVFMpIDw8IDIwOworCWkwID0gKGkwICYgKFRCTFNJWkUgLSAxKSkgPDwgMTsKKwl0IC09IHJlZHV4OworCXogPSB4IC0gdDsKKworCS8qIENvbXB1dGUgciA9IGV4cDIoeSkgPSBleHAydFtpMF0gKiBwKHogLSBlcHNbaV0pLiAqLworCXQgPSB0YmxbaTBdOwkJLyogZXhwMnRbaTBdICovCisJeiAtPSB0YmxbaTAgKyAxXTsJLyogZXBzW2kwXSAgICovCisJaWYgKGsgPj0gLTEwMjEgPDwgMjApCisJCUlOU0VSVF9XT1JEUyh0d29waywgMHgzZmYwMDAwMCArIGssIDApOworCWVsc2UKKwkJSU5TRVJUX1dPUkRTKHR3b3BrcDEwMDAsIDB4M2ZmMDAwMDAgKyBrICsgKDEwMDAgPDwgMjApLCAwKTsKKwlyID0gdCArIHQgKiB6ICogKFAxICsgeiAqIChQMiArIHogKiAoUDMgKyB6ICogKFA0ICsgeiAqIFA1KSkpKTsKKworCS8qIFNjYWxlIGJ5IDIqKihrPj4yMCkuICovCisJaWYoayA+PSAtMTAyMSA8PCAyMCkgeworCQlpZiAoayA9PSAxMDI0IDw8IDIwKQorCQkJcmV0dXJuIChyICogMi4wICogMHgxcDEwMjMpOworCQlyZXR1cm4gKHIgKiB0d29wayk7CisJfSBlbHNlIHsKKwkJcmV0dXJuIChyICogdHdvcGtwMTAwMCAqIHR3b20xMDAwKTsKKwl9Cit9CisKKyNpZiAoTERCTF9NQU5UX0RJRyA9PSA1MykKK19fd2Vha19yZWZlcmVuY2UoZXhwMiwgZXhwMmwpOworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfZXhwMmYuYyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19leHAyZi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhYzdjMWYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfZXhwMmYuYwpAQCAtMCwwICsxLDEzNyBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUgRGF2aWQgU2NodWx0eiA8ZGFzQEZyZWVCU0QuT1JHPgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CitfX0ZCU0RJRCgiJEZyZWVCU0QkIik7CisKKyNpbmNsdWRlIDxmbG9hdC5oPgorCisjaW5jbHVkZSAibWF0aC5oIgorI2luY2x1ZGUgIm1hdGhfcHJpdmF0ZS5oIgorCisjZGVmaW5lCVRCTEJJVFMJNAorI2RlZmluZQlUQkxTSVpFCSgxIDw8IFRCTEJJVFMpCisKK3N0YXRpYyBjb25zdCBmbG9hdAorICAgIHJlZHV4ICAgPSAweDEuOHAyM2YgLyBUQkxTSVpFLAorICAgIFAxCSAgICA9IDB4MS42MmU0MzBwLTFmLAorICAgIFAyCSAgICA9IDB4MS5lYmZiZTBwLTNmLAorICAgIFAzCSAgICA9IDB4MS5jNmIzNDhwLTVmLAorICAgIFA0CSAgICA9IDB4MS4zYjJjOWNwLTdmOworCitzdGF0aWMgdm9sYXRpbGUgZmxvYXQKKyAgICBodWdlICAgID0gMHgxcDEwMGYsCisgICAgdHdvbTEwMCA9IDB4MXAtMTAwZjsKKworc3RhdGljIGNvbnN0IGRvdWJsZSBleHAyZnRbVEJMU0laRV0gPSB7CisJMHgxLjZhMDllNjY3ZjNiY2RwLTEsCisJMHgxLjdhMTE0NzNlYjAxODdwLTEsCisJMHgxLjhhY2U1NDIyYWEwZGJwLTEsCisJMHgxLjljNDkxODJhM2YwOTBwLTEsCisJMHgxLmFlODlmOTk1YWQzYWRwLTEsCisJMHgxLmMxOTliZGQ4NTUyOWNwLTEsCisJMHgxLmQ1ODE4ZGNmYmE0ODdwLTEsCisJMHgxLmVhNGFmYTJhNDkwZGFwLTEsCisJMHgxLjAwMDAwMDAwMDAwMDBwKzAsCisJMHgxLjBiNTU4NmNmOTg5MGZwKzAsCisJMHgxLjE3MmI4M2M3ZDUxN2JwKzAsCisJMHgxLjIzODdhNmU3NTYyMzhwKzAsCisJMHgxLjMwNmZlMGEzMWI3MTVwKzAsCisJMHgxLjNkZWE2NGMxMjM0MjJwKzAsCisJMHgxLjRiZmRhZDUzNjJhMjdwKzAsCisJMHgxLjVhYjA3ZGQ0ODU0MjlwKzAsCit9OworCQorLyoKKyAqIGV4cDJmKHgpOiBjb21wdXRlIHRoZSBiYXNlIDIgZXhwb25lbnRpYWwgb2YgeAorICoKKyAqIEFjY3VyYWN5OiBQZWFrIGVycm9yIDwgMC41MDEgdWxwOyBsb2NhdGlvbiBvZiBwZWFrOiAtMC4wMzAxMTA5MjcuCisgKgorICogTWV0aG9kOiAoZXF1YWxseS1zcGFjZWQgdGFibGVzKQorICoKKyAqICAgUmVkdWNlIHg6CisgKiAgICAgeCA9IDIqKmsgKyB5LCBmb3IgaW50ZWdlciBrIGFuZCB8eXwgPD0gMS8yLgorICogICAgIFRodXMgd2UgaGF2ZSBleHAyZih4KSA9IDIqKmsgKiBleHAyKHkpLgorICoKKyAqICAgUmVkdWNlIHk6CisgKiAgICAgeSA9IGkvVEJMU0laRSArIHogZm9yIGludGVnZXIgaSBuZWFyIHkgKiBUQkxTSVpFLgorICogICAgIFRodXMgd2UgaGF2ZSBleHAyKHkpID0gZXhwMihpL1RCTFNJWkUpICogZXhwMih6KSwKKyAqICAgICB3aXRoIHx6fCA8PSAyKiotKFRCTFNJWkUrMSkuCisgKgorICogICBXZSBjb21wdXRlIGV4cDIoaS9UQkxTSVpFKSB2aWEgdGFibGUgbG9va3VwIGFuZCBleHAyKHopIHZpYSBhCisgKiAgIGRlZ3JlZS00IG1pbmltYXggcG9seW5vbWlhbCB3aXRoIG1heGltdW0gZXJyb3IgdW5kZXIgMS40ICogMioqLTMzLgorICogICBVc2luZyBkb3VibGUgcHJlY2lzaW9uIGZvciBldmVyeXRoaW5nIGV4Y2VwdCB0aGUgcmVkdWN0aW9uIG1ha2VzCisgKiAgIHJvdW5kb2ZmIGVycm9yIGluc2lnbmlmaWNhbnQgYW5kIHNpbXBsaWZpZXMgdGhlIHNjYWxpbmcgc3RlcC4KKyAqCisgKiAgIFRoaXMgbWV0aG9kIGlzIGR1ZSB0byBUYW5nLCBidXQgSSBkbyBub3QgdXNlIGhpcyBzdWdnZXN0ZWQgcGFyYW1ldGVyczoKKyAqCisgKglUYW5nLCBQLiAgVGFibGUtZHJpdmVuIEltcGxlbWVudGF0aW9uIG9mIHRoZSBFeHBvbmVudGlhbCBGdW5jdGlvbgorICoJaW4gSUVFRSBGbG9hdGluZy1Qb2ludCBBcml0aG1ldGljLiAgVE9NUyAxNSgyKSwgMTQ0LTE1NyAoMTk4OSkuCisgKi8KK2Zsb2F0CitleHAyZihmbG9hdCB4KQoreworCWRvdWJsZSB0diwgdHdvcGssIHUsIHo7CisJZmxvYXQgdDsKKwl1aW50MzJfdCBoeCwgaXgsIGkwOworCWludDMyX3QgazsKKworCS8qIEZpbHRlciBvdXQgZXhjZXB0aW9uYWwgY2FzZXMuICovCisJR0VUX0ZMT0FUX1dPUkQoaHgsIHgpOworCWl4ID0gaHggJiAweDdmZmZmZmZmOwkJLyogaGlnaCB3b3JkIG9mIHx4fCAqLworCWlmKGl4ID49IDB4NDMwMDAwMDApIHsJCQkvKiB8eHwgPj0gMTI4ICovCisJCWlmKGl4ID49IDB4N2Y4MDAwMDApIHsKKwkJCWlmICgoaXggJiAweDdmZmZmZikgIT0gMCB8fCAoaHggJiAweDgwMDAwMDAwKSA9PSAwKQorCQkJCXJldHVybiAoeCArIHgpOwkvKiB4IGlzIE5hTiBvciArSW5mICovCisJCQllbHNlIAorCQkJCXJldHVybiAoMC4wKTsJLyogeCBpcyAtSW5mICovCisJCX0KKwkJaWYoeCA+PSAweDEuMHA3ZikKKwkJCXJldHVybiAoaHVnZSAqIGh1Z2UpOwkvKiBvdmVyZmxvdyAqLworCQlpZih4IDw9IC0weDEuMmNwN2YpCisJCQlyZXR1cm4gKHR3b20xMDAgKiB0d29tMTAwKTsgLyogdW5kZXJmbG93ICovCisJfSBlbHNlIGlmIChpeCA8PSAweDMzMDAwMDAwKSB7CQkvKiB8eHwgPD0gMHgxcC0yNSAqLworCQlyZXR1cm4gKDEuMGYgKyB4KTsKKwl9CisKKwkvKiBSZWR1Y2UgeCwgY29tcHV0aW5nIHosIGkwLCBhbmQgay4gKi8KKwlTVFJJQ1RfQVNTSUdOKGZsb2F0LCB0LCB4ICsgcmVkdXgpOworCUdFVF9GTE9BVF9XT1JEKGkwLCB0KTsKKwlpMCArPSBUQkxTSVpFIC8gMjsKKwlrID0gKGkwID4+IFRCTEJJVFMpIDw8IDIwOworCWkwICY9IFRCTFNJWkUgLSAxOworCXQgLT0gcmVkdXg7CisJeiA9IHggLSB0OworCUlOU0VSVF9XT1JEUyh0d29waywgMHgzZmYwMDAwMCArIGssIDApOworCisJLyogQ29tcHV0ZSByID0gZXhwMih5KSA9IGV4cDJmdFtpMF0gKiBwKHopLiAqLworCXR2ID0gZXhwMmZ0W2kwXTsKKwl1ID0gdHYgKiB6OworCXR2ID0gdHYgKyB1ICogKFAxICsgeiAqIFAyKSArIHUgKiAoeiAqIHopICogKFAzICsgeiAqIFA0KTsKKworCS8qIFNjYWxlIGJ5IDIqKihrPj4yMCkuICovCisJcmV0dXJuICh0diAqIHR3b3BrKTsKK30KZGlmZiAtLWdpdCBhL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19leHBtMS5jIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2V4cG0xLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzc5OThhMwotLS0gL2Rldi9udWxsCisrKyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19leHBtMS5jCkBAIC0wLDAgKzEsMjIyIEBACisvKiBAKCMpc19leHBtMS5jIDUuMSA5My8wOS8yNCAqLworLyoKKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIENvcHlyaWdodCAoQykgMTk5MyBieSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogRGV2ZWxvcGVkIGF0IFN1blBybywgYSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGJ1c2luZXNzLgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcworICogc29mdHdhcmUgaXMgZnJlZWx5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhpcyBub3RpY2UKKyAqIGlzIHByZXNlcnZlZC4KKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CitfX0ZCU0RJRCgiJEZyZWVCU0QkIik7CisKKy8qIGV4cG0xKHgpCisgKiBSZXR1cm5zIGV4cCh4KS0xLCB0aGUgZXhwb25lbnRpYWwgb2YgeCBtaW51cyAxLgorICoKKyAqIE1ldGhvZAorICogICAxLiBBcmd1bWVudCByZWR1Y3Rpb246CisgKglHaXZlbiB4LCBmaW5kIHIgYW5kIGludGVnZXIgayBzdWNoIHRoYXQKKyAqCisgKiAgICAgICAgICAgICAgIHggPSBrKmxuMiArIHIsICB8cnwgPD0gMC41KmxuMiB+IDAuMzQ2NTgKKyAqCisgKiAgICAgIEhlcmUgYSBjb3JyZWN0aW9uIHRlcm0gYyB3aWxsIGJlIGNvbXB1dGVkIHRvIGNvbXBlbnNhdGUKKyAqCXRoZSBlcnJvciBpbiByIHdoZW4gcm91bmRlZCB0byBhIGZsb2F0aW5nLXBvaW50IG51bWJlci4KKyAqCisgKiAgIDIuIEFwcHJveGltYXRpbmcgZXhwbTEocikgYnkgYSBzcGVjaWFsIHJhdGlvbmFsIGZ1bmN0aW9uIG9uCisgKgl0aGUgaW50ZXJ2YWwgWzAsMC4zNDY1OF06CisgKglTaW5jZQorICoJICAgIHIqKGV4cChyKSsxKS8oZXhwKHIpLTEpID0gMisgcl4yLzYgLSByXjQvMzYwICsgLi4uCisgKgl3ZSBkZWZpbmUgUjEocipyKSBieQorICoJICAgIHIqKGV4cChyKSsxKS8oZXhwKHIpLTEpID0gMisgcl4yLzYgKiBSMShyKnIpCisgKglUaGF0IGlzLAorICoJICAgIFIxKHIqKjIpID0gNi9yICooKGV4cChyKSsxKS8oZXhwKHIpLTEpIC0gMi9yKQorICoJCSAgICAgPSA2L3IgKiAoIDEgKyAyLjAqKDEvKGV4cChyKS0xKSAtIDEvcikpCisgKgkJICAgICA9IDEgLSByXjIvNjAgKyByXjQvMjUyMCAtIHJeNi8xMDA4MDAgKyAuLi4KKyAqICAgICAgV2UgdXNlIGEgc3BlY2lhbCBSZW1lIGFsZ29yaXRobSBvbiBbMCwwLjM0N10gdG8gZ2VuZXJhdGUKKyAqIAlhIHBvbHlub21pYWwgb2YgZGVncmVlIDUgaW4gcipyIHRvIGFwcHJveGltYXRlIFIxLiBUaGUKKyAqCW1heGltdW0gZXJyb3Igb2YgdGhpcyBwb2x5bm9taWFsIGFwcHJveGltYXRpb24gaXMgYm91bmRlZAorICoJYnkgMioqLTYxLiBJbiBvdGhlciB3b3JkcywKKyAqCSAgICBSMSh6KSB+IDEuMCArIFExKnogKyBRMip6KioyICsgUTMqeioqMyArIFE0KnoqKjQgKyBRNSp6Kio1CisgKgl3aGVyZSAJUTEgID0gIC0xLjY2NjY2NjY2NjY2NjY1NjczODRFLTIsCisgKiAJCVEyICA9ICAgMy45NjgyNTM5NjgxMzcwMzY1ODczRS00LAorICogCQlRMyAgPSAgLTkuOTIwNjM0NDczMzQzNTk4NzM1N0UtNiwKKyAqIAkJUTQgID0gICAyLjUwNTEzNjE0MjA4MDg1MTcwMDJFLTcsCisgKiAJCVE1ICA9ICAtNi4yODQzNTA1NjgyMzgyNjE3MTAyRS05OworICoJCXogICA9ICByKnIsCisgKgl3aXRoIGVycm9yIGJvdW5kZWQgYnkKKyAqCSAgICB8ICAgICAgICAgICAgICAgICAgNSAgICAgICAgICAgfCAgICAgLTYxCisgKgkgICAgfCAxLjArUTEqeisuLi4rUTUqeiAgIC0gIFIxKHopIHwgPD0gMgorICoJICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgKgorICoJZXhwbTEocikgPSBleHAociktMSBpcyB0aGVuIGNvbXB1dGVkIGJ5IHRoZSBmb2xsb3dpbmcKKyAqIAlzcGVjaWZpYyB3YXkgd2hpY2ggbWluaW1pemUgdGhlIGFjY3VtdWxhdGlvbiByb3VuZGluZyBlcnJvcjoKKyAqCQkJICAgICAgIDIgICAgIDMKKyAqCQkJICAgICAgciAgICAgciAgICBbIDMgLSAoUjEgKyBSMSpyLzIpICBdCisgKgkgICAgICBleHBtMShyKSA9IHIgKyAtLS0gKyAtLS0gKiBbLS0tLS0tLS0tLS0tLS0tLS0tLS1dCisgKgkJICAgICAgICAgICAgICAyICAgICAyICAgIFsgNiAtIHIqKDMgLSBSMSpyLzIpIF0KKyAqCisgKglUbyBjb21wZW5zYXRlIHRoZSBlcnJvciBpbiB0aGUgYXJndW1lbnQgcmVkdWN0aW9uLCB3ZSB1c2UKKyAqCQlleHBtMShyK2MpID0gZXhwbTEocikgKyBjICsgZXhwbTEocikqYworICoJCQkgICB+IGV4cG0xKHIpICsgYyArIHIqYworICoJVGh1cyBjK3IqYyB3aWxsIGJlIGFkZGVkIGluIGFzIHRoZSBjb3JyZWN0aW9uIHRlcm1zIGZvcgorICoJZXhwbTEocitjKS4gTm93IHJlYXJyYW5nZSB0aGUgdGVybSB0byBhdm9pZCBvcHRpbWl6YXRpb24KKyAqIAlzY3JldyB1cDoKKyAqCQkgICAgICAgICggICAgICAyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMiApCisgKgkJICAgICAgICAoeyAgKCByICAgIFsgUjEgLSAgKDMgLSBSMSpyLzIpIF0gICkgIH0gICAgciAgKQorICoJIGV4cG0xKHIrYyl+ciAtICh7ciooLS0tICogWy0tLS0tLS0tLS0tLS0tLS0tLS0tXS1jKS1jfSAtIC0tLSApCisgKgkgICAgICAgICAgICAgICAgKHsgICggMiAgICBbIDYgLSByKigzIC0gUjEqci8yKSBdICApICB9ICAgIDIgICkKKyAqICAgICAgICAgICAgICAgICAgICAgICggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCisgKgorICoJCSAgID0gciAtIEUKKyAqICAgMy4gU2NhbGUgYmFjayB0byBvYnRhaW4gZXhwbTEoeCk6CisgKglGcm9tIHN0ZXAgMSwgd2UgaGF2ZQorICoJICAgZXhwbTEoeCkgPSBlaXRoZXIgMl5rKltleHBtMShyKSsxXSAtIDEKKyAqCQkgICAgPSBvciAgICAgMl5rKltleHBtMShyKSArICgxLTJeLWspXQorICogICA0LiBJbXBsZW1lbnRhdGlvbiBub3RlczoKKyAqCShBKS4gVG8gc2F2ZSBvbmUgbXVsdGlwbGljYXRpb24sIHdlIHNjYWxlIHRoZSBjb2VmZmljaWVudCBRaQorICoJICAgICB0byBRaSoyXmksIGFuZCByZXBsYWNlIHogYnkgKHheMikvMi4KKyAqCShCKS4gVG8gYWNoaWV2ZSBtYXhpbXVtIGFjY3VyYWN5LCB3ZSBjb21wdXRlIGV4cG0xKHgpIGJ5CisgKgkgIChpKSAgIGlmIHggPCAtNTYqbG4yLCByZXR1cm4gLTEuMCwgKHJhaXNlIGluZXhhY3QgaWYgeCE9aW5mKQorICoJICAoaWkpICBpZiBrPTAsIHJldHVybiByLUUKKyAqCSAgKGlpaSkgaWYgaz0tMSwgcmV0dXJuIDAuNSooci1FKS0wLjUKKyAqICAgICAgICAoaXYpCWlmIGs9MSBpZiByIDwgLTAuMjUsIHJldHVybiAyKigociswLjUpLSBFKQorICoJICAgICAgIAkgICAgICAgZWxzZQkgICAgIHJldHVybiAgMS4wKzIuMCooci1FKTsKKyAqCSAgKHYpICAgaWYgKGs8LTJ8fGs+NTYpIHJldHVybiAyXmsoMS0oRS1yKSkgLSAxIChvciBleHAoeCktMSkKKyAqCSAgKHZpKSAgaWYgayA8PSAyMCwgcmV0dXJuIDJeaygoMS0yXi1rKS0oRS1yKSksIGVsc2UKKyAqCSAgKHZpaSkgcmV0dXJuIDJeaygxLSgoRSsyXi1rKS1yKSkKKyAqCisgKiBTcGVjaWFsIGNhc2VzOgorICoJZXhwbTEoSU5GKSBpcyBJTkYsIGV4cG0xKE5hTikgaXMgTmFOOworICoJZXhwbTEoLUlORikgaXMgLTEsIGFuZAorICoJZm9yIGZpbml0ZSBhcmd1bWVudCwgb25seSBleHBtMSgwKT0wIGlzIGV4YWN0LgorICoKKyAqIEFjY3VyYWN5OgorICoJYWNjb3JkaW5nIHRvIGFuIGVycm9yIGFuYWx5c2lzLCB0aGUgZXJyb3IgaXMgYWx3YXlzIGxlc3MgdGhhbgorICoJMSB1bHAgKHVuaXQgaW4gdGhlIGxhc3QgcGxhY2UpLgorICoKKyAqIE1pc2MuIGluZm8uCisgKglGb3IgSUVFRSBkb3VibGUKKyAqCSAgICBpZiB4ID4gIDcuMDk3ODI3MTI4OTMzODM5NzMwOTZlKzAyIHRoZW4gZXhwbTEoeCkgb3ZlcmZsb3cKKyAqCisgKiBDb25zdGFudHM6CisgKiBUaGUgaGV4YWRlY2ltYWwgdmFsdWVzIGFyZSB0aGUgaW50ZW5kZWQgb25lcyBmb3IgdGhlIGZvbGxvd2luZworICogY29uc3RhbnRzLiBUaGUgZGVjaW1hbCB2YWx1ZXMgbWF5IGJlIHVzZWQsIHByb3ZpZGVkIHRoYXQgdGhlCisgKiBjb21waWxlciB3aWxsIGNvbnZlcnQgZnJvbSBkZWNpbWFsIHRvIGJpbmFyeSBhY2N1cmF0ZWx5IGVub3VnaAorICogdG8gcHJvZHVjZSB0aGUgaGV4YWRlY2ltYWwgdmFsdWVzIHNob3duLgorICovCisKKyNpbmNsdWRlIDxmbG9hdC5oPgorCisjaW5jbHVkZSAibWF0aC5oIgorI2luY2x1ZGUgIm1hdGhfcHJpdmF0ZS5oIgorCitzdGF0aWMgY29uc3QgZG91YmxlCitvbmUJCT0gMS4wLAordGlueQkJPSAxLjBlLTMwMCwKK29fdGhyZXNob2xkCT0gNy4wOTc4MjcxMjg5MzM4Mzk3MzA5NmUrMDIsLyogMHg0MDg2MkU0MiwgMHhGRUZBMzlFRiAqLworbG4yX2hpCQk9IDYuOTMxNDcxODAzNjkxMjM4MTY0OTBlLTAxLC8qIDB4M2ZlNjJlNDIsIDB4ZmVlMDAwMDAgKi8KK2xuMl9sbwkJPSAxLjkwODIxNDkyOTI3MDU4NzcwMDAyZS0xMCwvKiAweDNkZWEzOWVmLCAweDM1NzkzYzc2ICovCitpbnZsbjIJCT0gMS40NDI2OTUwNDA4ODg5NjMzODcwMGUrMDAsLyogMHgzZmY3MTU0NywgMHg2NTJiODJmZSAqLworLyogU2NhbGVkIFEnczogUW5faGVyZSA9IDIqKm4gKiBRbl9hYm92ZSwgZm9yIFIoMip6KSB3aGVyZSB6ID0gaHhzID0geCp4LzI6ICovCitRMSAgPSAgLTMuMzMzMzMzMzMzMzMzMzEzMTY0MjhlLTAyLCAvKiBCRkExMTExMSAxMTExMTBGNCAqLworUTIgID0gICAxLjU4NzMwMTU4NzI1NDgxNDYwMTY1ZS0wMywgLyogM0Y1QTAxQTAgMTlGRTU1ODUgKi8KK1EzICA9ICAtNy45MzY1MDc1Nzg2NzQ4Nzk0MjQ3M2UtMDUsIC8qIEJGMTRDRTE5IDlFQUFEQkI3ICovCitRNCAgPSAgIDQuMDA4MjE3ODI3MzI5MzYyMzk1NTJlLTA2LCAvKiAzRUQwQ0ZDQSA4NkU2NTIzOSAqLworUTUgID0gIC0yLjAxMDk5MjE4MTgzNjI0MzcxMzI2ZS0wNzsgLyogQkU4QUZEQjcgNkUwOUMzMkQgKi8KKworc3RhdGljIHZvbGF0aWxlIGRvdWJsZSBodWdlID0gMS4wZSszMDA7CisKK2RvdWJsZQorZXhwbTEoZG91YmxlIHgpCit7CisJZG91YmxlIHksaGksbG8sYyx0LGUsaHhzLGhmeCxyMSx0d29wazsKKwlpbnQzMl90IGsseHNiOworCXVfaW50MzJfdCBoeDsKKworCUdFVF9ISUdIX1dPUkQoaHgseCk7CisJeHNiID0gaHgmMHg4MDAwMDAwMDsJCS8qIHNpZ24gYml0IG9mIHggKi8KKwloeCAmPSAweDdmZmZmZmZmOwkJLyogaGlnaCB3b3JkIG9mIHx4fCAqLworCisgICAgLyogZmlsdGVyIG91dCBodWdlIGFuZCBub24tZmluaXRlIGFyZ3VtZW50ICovCisJaWYoaHggPj0gMHg0MDQzNjg3QSkgewkJCS8qIGlmIHx4fD49NTYqbG4yICovCisJICAgIGlmKGh4ID49IDB4NDA4NjJFNDIpIHsJCS8qIGlmIHx4fD49NzA5Ljc4Li4uICovCisgICAgICAgICAgICAgICAgaWYoaHg+PTB4N2ZmMDAwMDApIHsKKwkJICAgIHVfaW50MzJfdCBsb3c7CisJCSAgICBHRVRfTE9XX1dPUkQobG93LHgpOworCQkgICAgaWYoKChoeCYweGZmZmZmKXxsb3cpIT0wKQorCQkgICAgICAgICByZXR1cm4geCt4OyAJIC8qIE5hTiAqLworCQkgICAgZWxzZSByZXR1cm4gKHhzYj09MCk/IHg6LTEuMDsvKiBleHAoKy1pbmYpPXtpbmYsLTF9ICovCisJICAgICAgICB9CisJICAgICAgICBpZih4ID4gb190aHJlc2hvbGQpIHJldHVybiBodWdlKmh1Z2U7IC8qIG92ZXJmbG93ICovCisJICAgIH0KKwkgICAgaWYoeHNiIT0wKSB7IC8qIHggPCAtNTYqbG4yLCByZXR1cm4gLTEuMCB3aXRoIGluZXhhY3QgKi8KKwkJaWYoeCt0aW55PDAuMCkJCS8qIHJhaXNlIGluZXhhY3QgKi8KKwkJcmV0dXJuIHRpbnktb25lOwkvKiByZXR1cm4gLTEgKi8KKwkgICAgfQorCX0KKworICAgIC8qIGFyZ3VtZW50IHJlZHVjdGlvbiAqLworCWlmKGh4ID4gMHgzZmQ2MmU0MikgewkJLyogaWYgIHx4fCA+IDAuNSBsbjIgKi8KKwkgICAgaWYoaHggPCAweDNGRjBBMkIyKSB7CS8qIGFuZCB8eHwgPCAxLjUgbG4yICovCisJCWlmKHhzYj09MCkKKwkJICAgIHtoaSA9IHggLSBsbjJfaGk7IGxvID0gIGxuMl9sbzsgIGsgPSAgMTt9CisJCWVsc2UKKwkJICAgIHtoaSA9IHggKyBsbjJfaGk7IGxvID0gLWxuMl9sbzsgIGsgPSAtMTt9CisJICAgIH0gZWxzZSB7CisJCWsgID0gaW52bG4yKngrKCh4c2I9PTApPzAuNTotMC41KTsKKwkJdCAgPSBrOworCQloaSA9IHggLSB0KmxuMl9oaTsJLyogdCpsbjJfaGkgaXMgZXhhY3QgaGVyZSAqLworCQlsbyA9IHQqbG4yX2xvOworCSAgICB9CisJICAgIFNUUklDVF9BU1NJR04oZG91YmxlLCB4LCBoaSAtIGxvKTsKKwkgICAgYyAgPSAoaGkteCktbG87CisJfQorCWVsc2UgaWYoaHggPCAweDNjOTAwMDAwKSB7ICAJLyogd2hlbiB8eHw8MioqLTU0LCByZXR1cm4geCAqLworCSAgICB0ID0gaHVnZSt4OwkvKiByZXR1cm4geCB3aXRoIGluZXhhY3QgZmxhZ3Mgd2hlbiB4IT0wICovCisJICAgIHJldHVybiB4IC0gKHQtKGh1Z2UreCkpOworCX0KKwllbHNlIGsgPSAwOworCisgICAgLyogeCBpcyBub3cgaW4gcHJpbWFyeSByYW5nZSAqLworCWhmeCA9IDAuNSp4OworCWh4cyA9IHgqaGZ4OworCXIxID0gb25lK2h4cyooUTEraHhzKihRMitoeHMqKFEzK2h4cyooUTQraHhzKlE1KSkpKTsKKwl0ICA9IDMuMC1yMSpoZng7CisJZSAgPSBoeHMqKChyMS10KS8oNi4wIC0geCp0KSk7CisJaWYoaz09MCkgcmV0dXJuIHggLSAoeCplLWh4cyk7CQkvKiBjIGlzIDAgKi8KKwllbHNlIHsKKwkgICAgSU5TRVJUX1dPUkRTKHR3b3BrLDB4M2ZmMDAwMDArKGs8PDIwKSwwKTsJLyogMl5rICovCisJICAgIGUgID0gKHgqKGUtYyktYyk7CisJICAgIGUgLT0gaHhzOworCSAgICBpZihrPT0gLTEpIHJldHVybiAwLjUqKHgtZSktMC41OworCSAgICBpZihrPT0xKSB7CisJICAgICAgIAlpZih4IDwgLTAuMjUpIHJldHVybiAtMi4wKihlLSh4KzAuNSkpOworCSAgICAgICAJZWxzZSAJICAgICAgcmV0dXJuICBvbmUrMi4wKih4LWUpOworCSAgICB9CisJICAgIGlmIChrIDw9IC0yIHx8IGs+NTYpIHsgICAvKiBzdWZmaWNlIHRvIHJldHVybiBleHAoeCktMSAqLworCSAgICAgICAgeSA9IG9uZS0oZS14KTsKKwkJaWYgKGsgPT0gMTAyNCkgeSA9IHkqMi4wKjB4MXAxMDIzOworCQllbHNlIHkgPSB5KnR3b3BrOworCSAgICAgICAgcmV0dXJuIHktb25lOworCSAgICB9CisJICAgIHQgPSBvbmU7CisJICAgIGlmKGs8MjApIHsKKwkgICAgICAgIFNFVF9ISUdIX1dPUkQodCwweDNmZjAwMDAwIC0gKDB4MjAwMDAwPj5rKSk7ICAvKiB0PTEtMl4tayAqLworCSAgICAgICAJeSA9IHQtKGUteCk7CisJCXkgPSB5KnR3b3BrOworCSAgIH0gZWxzZSB7CisJCVNFVF9ISUdIX1dPUkQodCwoKDB4M2ZmLWspPDwyMCkpOwkvKiAyXi1rICovCisJICAgICAgIAl5ID0geC0oZSt0KTsKKwkgICAgICAgCXkgKz0gb25lOworCQl5ID0geSp0d29wazsKKwkgICAgfQorCX0KKwlyZXR1cm4geTsKK30KKworI2lmIChMREJMX01BTlRfRElHID09IDUzKQorX193ZWFrX3JlZmVyZW5jZShleHBtMSwgZXhwbTFsKTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2V4cG0xZi5jIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2V4cG0xZi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwYTM5MzQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfZXhwbTFmLmMKQEAgLTAsMCArMSwxMjQgQEAKKy8qIHNfZXhwbTFmLmMgLS0gZmxvYXQgdmVyc2lvbiBvZiBzX2V4cG0xLmMuCisgKiBDb252ZXJzaW9uIHRvIGZsb2F0IGJ5IElhbiBMYW5jZSBUYXlsb3IsIEN5Z251cyBTdXBwb3J0LCBpYW5AY3lnbnVzLmNvbS4KKyAqLworCisvKgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogQ29weXJpZ2h0IChDKSAxOTkzIGJ5IFN1biBNaWNyb3N5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBEZXZlbG9wZWQgYXQgU3VuUHJvLCBhIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gYnVzaW5lc3MuCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCisgKiBzb2Z0d2FyZSBpcyBmcmVlbHkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGlzIG5vdGljZQorICogaXMgcHJlc2VydmVkLgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJTRCQiKTsKKworI2luY2x1ZGUgPGZsb2F0Lmg+CisKKyNpbmNsdWRlICJtYXRoLmgiCisjaW5jbHVkZSAibWF0aF9wcml2YXRlLmgiCisKK3N0YXRpYyBjb25zdCBmbG9hdAorb25lCQk9IDEuMCwKK3RpbnkJCT0gMS4wZS0zMCwKK29fdGhyZXNob2xkCT0gOC44NzIxNjc5Njg4ZSswMSwvKiAweDQyYjE3MTgwICovCitsbjJfaGkJCT0gNi45MzEzODEyMjU2ZS0wMSwvKiAweDNmMzE3MTgwICovCitsbjJfbG8JCT0gOS4wNTgwMDA2MTQ1ZS0wNiwvKiAweDM3MTdmN2QxICovCitpbnZsbjIJCT0gMS40NDI2OTUwMjE2ZSswMCwvKiAweDNmYjhhYTNiICovCisvKgorICogRG9tYWluIFstMC4zNDU2OCwgMC4zNDU2OF0sIHJhbmdlIH5bLTYuNjk0ZS0xMCwgNi42OTZlLTEwXToKKyAqIHw2IC8geCAqICgxICsgMiAqICgxIC8gKGV4cCh4KSAtIDEpIC0gMSAvIHgpKSAtIHEoeCl8IDwgMioqLTMwLjA0CisgKiBTY2FsZWQgY29lZmZpY2llbnRzOiBRbl9oZXJlID0gMioqbiAqIFFuX2Zvcl9xIChzZWUgc19leHBtMS5jKToKKyAqLworUTEgPSAtMy4zMzMzMjEyMTM3ZS0yLAkJLyogLTB4ODg4ODY4LjBwLTI4ICovCitRMiA9ICAxLjU4MDcxNzA0MjFlLTM7CQkvKiAgMHhjZjMwMTAuMHAtMzMgKi8KKworc3RhdGljIHZvbGF0aWxlIGZsb2F0IGh1Z2UgPSAxLjBlKzMwOworCitmbG9hdAorZXhwbTFmKGZsb2F0IHgpCit7CisJZmxvYXQgeSxoaSxsbyxjLHQsZSxoeHMsaGZ4LHIxLHR3b3BrOworCWludDMyX3Qgayx4c2I7CisJdV9pbnQzMl90IGh4OworCisJR0VUX0ZMT0FUX1dPUkQoaHgseCk7CisJeHNiID0gaHgmMHg4MDAwMDAwMDsJCS8qIHNpZ24gYml0IG9mIHggKi8KKwloeCAmPSAweDdmZmZmZmZmOwkJLyogaGlnaCB3b3JkIG9mIHx4fCAqLworCisgICAgLyogZmlsdGVyIG91dCBodWdlIGFuZCBub24tZmluaXRlIGFyZ3VtZW50ICovCisJaWYoaHggPj0gMHg0MTk1Yjg0NCkgewkJCS8qIGlmIHx4fD49MjcqbG4yICovCisJICAgIGlmKGh4ID49IDB4NDJiMTcyMTgpIHsJCS8qIGlmIHx4fD49ODguNzIxLi4uICovCisgICAgICAgICAgICAgICAgaWYoaHg+MHg3ZjgwMDAwMCkKKwkJICAgIHJldHVybiB4K3g7IAkgLyogTmFOICovCisJCWlmKGh4PT0weDdmODAwMDAwKQorCQkgICAgcmV0dXJuICh4c2I9PTApPyB4Oi0xLjA7LyogZXhwKCstaW5mKT17aW5mLC0xfSAqLworCSAgICAgICAgaWYoeCA+IG9fdGhyZXNob2xkKSByZXR1cm4gaHVnZSpodWdlOyAvKiBvdmVyZmxvdyAqLworCSAgICB9CisJICAgIGlmKHhzYiE9MCkgeyAvKiB4IDwgLTI3KmxuMiwgcmV0dXJuIC0xLjAgd2l0aCBpbmV4YWN0ICovCisJCWlmKHgrdGlueTwoZmxvYXQpMC4wKQkvKiByYWlzZSBpbmV4YWN0ICovCisJCXJldHVybiB0aW55LW9uZTsJLyogcmV0dXJuIC0xICovCisJICAgIH0KKwl9CisKKyAgICAvKiBhcmd1bWVudCByZWR1Y3Rpb24gKi8KKwlpZihoeCA+IDB4M2ViMTcyMTgpIHsJCS8qIGlmICB8eHwgPiAwLjUgbG4yICovCisJICAgIGlmKGh4IDwgMHgzRjg1MTU5MikgewkvKiBhbmQgfHh8IDwgMS41IGxuMiAqLworCQlpZih4c2I9PTApCisJCSAgICB7aGkgPSB4IC0gbG4yX2hpOyBsbyA9ICBsbjJfbG87ICBrID0gIDE7fQorCQllbHNlCisJCSAgICB7aGkgPSB4ICsgbG4yX2hpOyBsbyA9IC1sbjJfbG87ICBrID0gLTE7fQorCSAgICB9IGVsc2UgeworCQlrICA9IGludmxuMip4KygoeHNiPT0wKT8oZmxvYXQpMC41OihmbG9hdCktMC41KTsKKwkJdCAgPSBrOworCQloaSA9IHggLSB0KmxuMl9oaTsJLyogdCpsbjJfaGkgaXMgZXhhY3QgaGVyZSAqLworCQlsbyA9IHQqbG4yX2xvOworCSAgICB9CisJICAgIFNUUklDVF9BU1NJR04oZmxvYXQsIHgsIGhpIC0gbG8pOworCSAgICBjICA9IChoaS14KS1sbzsKKwl9CisJZWxzZSBpZihoeCA8IDB4MzMwMDAwMDApIHsgIAkvKiB3aGVuIHx4fDwyKiotMjUsIHJldHVybiB4ICovCisJICAgIHQgPSBodWdlK3g7CS8qIHJldHVybiB4IHdpdGggaW5leGFjdCBmbGFncyB3aGVuIHghPTAgKi8KKwkgICAgcmV0dXJuIHggLSAodC0oaHVnZSt4KSk7CisJfQorCWVsc2UgayA9IDA7CisKKyAgICAvKiB4IGlzIG5vdyBpbiBwcmltYXJ5IHJhbmdlICovCisJaGZ4ID0gKGZsb2F0KTAuNSp4OworCWh4cyA9IHgqaGZ4OworCXIxID0gb25lK2h4cyooUTEraHhzKlEyKTsKKwl0ICA9IChmbG9hdCkzLjAtcjEqaGZ4OworCWUgID0gaHhzKigocjEtdCkvKChmbG9hdCk2LjAgLSB4KnQpKTsKKwlpZihrPT0wKSByZXR1cm4geCAtICh4KmUtaHhzKTsJCS8qIGMgaXMgMCAqLworCWVsc2UgeworCSAgICBTRVRfRkxPQVRfV09SRCh0d29waywweDNmODAwMDAwKyhrPDwyMykpOwkvKiAyXmsgKi8KKwkgICAgZSAgPSAoeCooZS1jKS1jKTsKKwkgICAgZSAtPSBoeHM7CisJICAgIGlmKGs9PSAtMSkgcmV0dXJuIChmbG9hdCkwLjUqKHgtZSktKGZsb2F0KTAuNTsKKwkgICAgaWYoaz09MSkgeworCSAgICAgICAJaWYoeCA8IChmbG9hdCktMC4yNSkgcmV0dXJuIC0oZmxvYXQpMi4wKihlLSh4KyhmbG9hdCkwLjUpKTsKKwkgICAgICAgCWVsc2UgCSAgICAgIHJldHVybiAgb25lKyhmbG9hdCkyLjAqKHgtZSk7CisJICAgIH0KKwkgICAgaWYgKGsgPD0gLTIgfHwgaz41NikgeyAgIC8qIHN1ZmZpY2UgdG8gcmV0dXJuIGV4cCh4KS0xICovCisJICAgICAgICB5ID0gb25lLShlLXgpOworCQlpZiAoayA9PSAxMjgpIHkgPSB5KjIuMEYqMHgxcDEyN0Y7CisJCWVsc2UgeSA9IHkqdHdvcGs7CisJICAgICAgICByZXR1cm4geS1vbmU7CisJICAgIH0KKwkgICAgdCA9IG9uZTsKKwkgICAgaWYoazwyMykgeworCSAgICAgICAgU0VUX0ZMT0FUX1dPUkQodCwweDNmODAwMDAwIC0gKDB4MTAwMDAwMD4+aykpOyAvKiB0PTEtMl4tayAqLworCSAgICAgICAJeSA9IHQtKGUteCk7CisJCXkgPSB5KnR3b3BrOworCSAgIH0gZWxzZSB7CisJCVNFVF9GTE9BVF9XT1JEKHQsKCgweDdmLWspPDwyMykpOwkvKiAyXi1rICovCisJICAgICAgIAl5ID0geC0oZSt0KTsKKwkgICAgICAgCXkgKz0gb25lOworCQl5ID0geSp0d29wazsKKwkgICAgfQorCX0KKwlyZXR1cm4geTsKK30KZGlmZiAtLWdpdCBhL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19mYWJzLmMgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfZmFicy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1NTI5ZTUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfZmFicy5jCkBAIC0wLDAgKzEsMzEgQEAKKy8qIEAoIylzX2ZhYnMuYyA1LjEgOTMvMDkvMjQgKi8KKy8qCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBDb3B5cmlnaHQgKEMpIDE5OTMgYnkgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIERldmVsb3BlZCBhdCBTdW5Qcm8sIGEgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBidXNpbmVzcy4KKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKKyAqIHNvZnR3YXJlIGlzIGZyZWVseSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoaXMgbm90aWNlCisgKiBpcyBwcmVzZXJ2ZWQuCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KKworI2lmbmRlZiBsaW50CitzdGF0aWMgY2hhciByY3NpZFtdID0gIiRGcmVlQlNEJCI7CisjZW5kaWYKKworLyoKKyAqIGZhYnMoeCkgcmV0dXJucyB0aGUgYWJzb2x1dGUgdmFsdWUgb2YgeC4KKyAqLworCisjaW5jbHVkZSAibWF0aC5oIgorI2luY2x1ZGUgIm1hdGhfcHJpdmF0ZS5oIgorCitkb3VibGUKK2ZhYnMoZG91YmxlIHgpCit7CisJdV9pbnQzMl90IGhpZ2g7CisJR0VUX0hJR0hfV09SRChoaWdoLHgpOworCVNFVF9ISUdIX1dPUkQoeCxoaWdoJjB4N2ZmZmZmZmYpOworICAgICAgICByZXR1cm4geDsKK30KZGlmZiAtLWdpdCBhL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19mYWJzZi5jIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2ZhYnNmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTkzODNkMAotLS0gL2Rldi9udWxsCisrKyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19mYWJzZi5jCkBAIC0wLDAgKzEsMzMgQEAKKy8qIHNfZmFic2YuYyAtLSBmbG9hdCB2ZXJzaW9uIG9mIHNfZmFicy5jLgorICogQ29udmVyc2lvbiB0byBmbG9hdCBieSBJYW4gTGFuY2UgVGF5bG9yLCBDeWdudXMgU3VwcG9ydCwgaWFuQGN5Z251cy5jb20uCisgKi8KKworLyoKKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIENvcHlyaWdodCAoQykgMTk5MyBieSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogRGV2ZWxvcGVkIGF0IFN1blBybywgYSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGJ1c2luZXNzLgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcworICogc29mdHdhcmUgaXMgZnJlZWx5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhpcyBub3RpY2UKKyAqIGlzIHByZXNlcnZlZC4KKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CitfX0ZCU0RJRCgiJEZyZWVCU0QkIik7CisKKy8qCisgKiBmYWJzZih4KSByZXR1cm5zIHRoZSBhYnNvbHV0ZSB2YWx1ZSBvZiB4LgorICovCisKKyNpbmNsdWRlICJtYXRoLmgiCisjaW5jbHVkZSAibWF0aF9wcml2YXRlLmgiCisKK2Zsb2F0CitmYWJzZihmbG9hdCB4KQoreworCXVfaW50MzJfdCBpeDsKKwlHRVRfRkxPQVRfV09SRChpeCx4KTsKKwlTRVRfRkxPQVRfV09SRCh4LGl4JjB4N2ZmZmZmZmYpOworICAgICAgICByZXR1cm4geDsKK30KZGlmZiAtLWdpdCBhL2xpYm0vc3JjL3NfZmFic2wuYyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19mYWJzbC5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBsaWJtL3NyYy9zX2ZhYnNsLmMKcmVuYW1lIHRvIGxpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19mYWJzbC5jCmRpZmYgLS1naXQgYS9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfZmRpbS5jIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2ZkaW0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZjM0N2ZkCi0tLSAvZGV2L251bGwKKysrIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2ZkaW0uYwpAQCAtMCwwICsxLDQ2IEBACisvKi0KKyAqIENvcHlyaWdodCAoYykgMjAwNCBEYXZpZCBTY2h1bHR6IDxkYXNARnJlZUJTRC5PUkc+CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJTRCQiKTsKKworI2luY2x1ZGUgPG1hdGguaD4KKworI2RlZmluZQlERUNMKHR5cGUsIGZuKQkJCVwKK3R5cGUJCQkJCVwKK2ZuKHR5cGUgeCwgdHlwZSB5KQkJCVwKK3sJCQkJCVwKKwkJCQkJXAorCWlmIChpc25hbih4KSkJCQlcCisJCXJldHVybiAoeCk7CQlcCisJaWYgKGlzbmFuKHkpKQkJCVwKKwkJcmV0dXJuICh5KTsJCVwKKwlyZXR1cm4gKHggPiB5ID8geCAtIHkgOiAwLjApOwlcCit9CisKK0RFQ0woZG91YmxlLCBmZGltKQorREVDTChmbG9hdCwgZmRpbWYpCitERUNMKGxvbmcgZG91YmxlLCBmZGltbCkKZGlmZiAtLWdpdCBhL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19maW5pdGUuYyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19maW5pdGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YzUxMzUyCi0tLSAvZGV2L251bGwKKysrIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2Zpbml0ZS5jCkBAIC0wLDAgKzEsMjkgQEAKKy8qIEAoIylzX2Zpbml0ZS5jIDUuMSA5My8wOS8yNCAqLworLyoKKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIENvcHlyaWdodCAoQykgMTk5MyBieSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogRGV2ZWxvcGVkIGF0IFN1blBybywgYSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGJ1c2luZXNzLgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcworICogc29mdHdhcmUgaXMgZnJlZWx5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhpcyBub3RpY2UKKyAqIGlzIHByZXNlcnZlZC4KKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CitfX0ZCU0RJRCgiJEZyZWVCU0QkIik7CisKKy8qCisgKiBmaW5pdGUoeCkgcmV0dXJucyAxIGlzIHggaXMgZmluaXRlLCBlbHNlIDA7CisgKiBubyBicmFuY2hpbmchCisgKi8KKworI2luY2x1ZGUgIm1hdGguaCIKKyNpbmNsdWRlICJtYXRoX3ByaXZhdGUuaCIKKworCWludCBmaW5pdGUoZG91YmxlIHgpCit7CisJaW50MzJfdCBoeDsKKwlHRVRfSElHSF9XT1JEKGh4LHgpOworCXJldHVybiAoaW50KSgodV9pbnQzMl90KSgoaHgmMHg3ZmZmZmZmZiktMHg3ZmYwMDAwMCk+PjMxKTsKK30KZGlmZiAtLWdpdCBhL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19maW5pdGVmLmMgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfZmluaXRlZi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2MjIzOWUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfZmluaXRlZi5jCkBAIC0wLDAgKzEsMzIgQEAKKy8qIHNfZmluaXRlZi5jIC0tIGZsb2F0IHZlcnNpb24gb2Ygc19maW5pdGUuYy4KKyAqIENvbnZlcnNpb24gdG8gZmxvYXQgYnkgSWFuIExhbmNlIFRheWxvciwgQ3lnbnVzIFN1cHBvcnQsIGlhbkBjeWdudXMuY29tLgorICovCisKKy8qCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBDb3B5cmlnaHQgKEMpIDE5OTMgYnkgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIERldmVsb3BlZCBhdCBTdW5Qcm8sIGEgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBidXNpbmVzcy4KKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKKyAqIHNvZnR3YXJlIGlzIGZyZWVseSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoaXMgbm90aWNlCisgKiBpcyBwcmVzZXJ2ZWQuCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorX19GQlNESUQoIiRGcmVlQlNEJCIpOworCisvKgorICogZmluaXRlZih4KSByZXR1cm5zIDEgaXMgeCBpcyBmaW5pdGUsIGVsc2UgMDsKKyAqIG5vIGJyYW5jaGluZyEKKyAqLworCisjaW5jbHVkZSAibWF0aC5oIgorI2luY2x1ZGUgIm1hdGhfcHJpdmF0ZS5oIgorCisJaW50IGZpbml0ZWYoZmxvYXQgeCkKK3sKKwlpbnQzMl90IGl4OworCUdFVF9GTE9BVF9XT1JEKGl4LHgpOworCXJldHVybiAoaW50KSgodV9pbnQzMl90KSgoaXgmMHg3ZmZmZmZmZiktMHg3ZjgwMDAwMCk+PjMxKTsKK30KZGlmZiAtLWdpdCBhL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19mbG9vci5jIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2Zsb29yLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjVmNjk2YQotLS0gL2Rldi9udWxsCisrKyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19mbG9vci5jCkBAIC0wLDAgKzEsNzggQEAKKy8qIEAoIylzX2Zsb29yLmMgNS4xIDkzLzA5LzI0ICovCisvKgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogQ29weXJpZ2h0IChDKSAxOTkzIGJ5IFN1biBNaWNyb3N5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBEZXZlbG9wZWQgYXQgU3VuUHJvLCBhIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gYnVzaW5lc3MuCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCisgKiBzb2Z0d2FyZSBpcyBmcmVlbHkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGlzIG5vdGljZQorICogaXMgcHJlc2VydmVkLgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJTRCQiKTsKKworLyoKKyAqIGZsb29yKHgpCisgKiBSZXR1cm4geCByb3VuZGVkIHRvd2FyZCAtaW5mIHRvIGludGVncmFsIHZhbHVlCisgKiBNZXRob2Q6CisgKglCaXQgdHdpZGRsaW5nLgorICogRXhjZXB0aW9uOgorICoJSW5leGFjdCBmbGFnIHJhaXNlZCBpZiB4IG5vdCBlcXVhbCB0byBmbG9vcih4KS4KKyAqLworCisjaW5jbHVkZSA8ZmxvYXQuaD4KKworI2luY2x1ZGUgIm1hdGguaCIKKyNpbmNsdWRlICJtYXRoX3ByaXZhdGUuaCIKKworc3RhdGljIGNvbnN0IGRvdWJsZSBodWdlID0gMS4wZTMwMDsKKworZG91YmxlCitmbG9vcihkb3VibGUgeCkKK3sKKwlpbnQzMl90IGkwLGkxLGowOworCXVfaW50MzJfdCBpLGo7CisJRVhUUkFDVF9XT1JEUyhpMCxpMSx4KTsKKwlqMCA9ICgoaTA+PjIwKSYweDdmZiktMHgzZmY7CisJaWYoajA8MjApIHsKKwkgICAgaWYoajA8MCkgeyAJLyogcmFpc2UgaW5leGFjdCBpZiB4ICE9IDAgKi8KKwkJaWYoaHVnZSt4PjAuMCkgey8qIHJldHVybiAwKnNpZ24oeCkgaWYgfHh8PDEgKi8KKwkJICAgIGlmKGkwPj0wKSB7aTA9aTE9MDt9CisJCSAgICBlbHNlIGlmKCgoaTAmMHg3ZmZmZmZmZil8aTEpIT0wKQorCQkJeyBpMD0weGJmZjAwMDAwO2kxPTA7fQorCQl9CisJICAgIH0gZWxzZSB7CisJCWkgPSAoMHgwMDBmZmZmZik+PmowOworCQlpZigoKGkwJmkpfGkxKT09MCkgcmV0dXJuIHg7IC8qIHggaXMgaW50ZWdyYWwgKi8KKwkJaWYoaHVnZSt4PjAuMCkgewkvKiByYWlzZSBpbmV4YWN0IGZsYWcgKi8KKwkJICAgIGlmKGkwPDApIGkwICs9ICgweDAwMTAwMDAwKT4+ajA7CisJCSAgICBpMCAmPSAofmkpOyBpMT0wOworCQl9CisJICAgIH0KKwl9IGVsc2UgaWYgKGowPjUxKSB7CisJICAgIGlmKGowPT0weDQwMCkgcmV0dXJuIHgreDsJLyogaW5mIG9yIE5hTiAqLworCSAgICBlbHNlIHJldHVybiB4OwkJLyogeCBpcyBpbnRlZ3JhbCAqLworCX0gZWxzZSB7CisJICAgIGkgPSAoKHVfaW50MzJfdCkoMHhmZmZmZmZmZikpPj4oajAtMjApOworCSAgICBpZigoaTEmaSk9PTApIHJldHVybiB4OwkvKiB4IGlzIGludGVncmFsICovCisJICAgIGlmKGh1Z2UreD4wLjApIHsgCQkvKiByYWlzZSBpbmV4YWN0IGZsYWcgKi8KKwkJaWYoaTA8MCkgeworCQkgICAgaWYoajA9PTIwKSBpMCs9MTsKKwkJICAgIGVsc2UgeworCQkJaiA9IGkxKygxPDwoNTItajApKTsKKwkJCWlmKGo8aTEpIGkwICs9MSA7IAkvKiBnb3QgYSBjYXJyeSAqLworCQkJaTE9ajsKKwkJICAgIH0KKwkJfQorCQlpMSAmPSAofmkpOworCSAgICB9CisJfQorCUlOU0VSVF9XT1JEUyh4LGkwLGkxKTsKKwlyZXR1cm4geDsKK30KKworI2lmIExEQkxfTUFOVF9ESUcgPT0gNTMKK19fd2Vha19yZWZlcmVuY2UoZmxvb3IsIGZsb29ybCk7CisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19mbG9vcmYuYyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19mbG9vcmYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YjUxMGRlCi0tLSAvZGV2L251bGwKKysrIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2Zsb29yZi5jCkBAIC0wLDAgKzEsNjEgQEAKKy8qIHNfZmxvb3JmLmMgLS0gZmxvYXQgdmVyc2lvbiBvZiBzX2Zsb29yLmMuCisgKiBDb252ZXJzaW9uIHRvIGZsb2F0IGJ5IElhbiBMYW5jZSBUYXlsb3IsIEN5Z251cyBTdXBwb3J0LCBpYW5AY3lnbnVzLmNvbS4KKyAqLworCisvKgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogQ29weXJpZ2h0IChDKSAxOTkzIGJ5IFN1biBNaWNyb3N5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBEZXZlbG9wZWQgYXQgU3VuUHJvLCBhIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gYnVzaW5lc3MuCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCisgKiBzb2Z0d2FyZSBpcyBmcmVlbHkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGlzIG5vdGljZQorICogaXMgcHJlc2VydmVkLgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJTRCQiKTsKKworLyoKKyAqIGZsb29yZih4KQorICogUmV0dXJuIHggcm91bmRlZCB0b3dhcmQgLWluZiB0byBpbnRlZ3JhbCB2YWx1ZQorICogTWV0aG9kOgorICoJQml0IHR3aWRkbGluZy4KKyAqIEV4Y2VwdGlvbjoKKyAqCUluZXhhY3QgZmxhZyByYWlzZWQgaWYgeCBub3QgZXF1YWwgdG8gZmxvb3JmKHgpLgorICovCisKKyNpbmNsdWRlICJtYXRoLmgiCisjaW5jbHVkZSAibWF0aF9wcml2YXRlLmgiCisKK3N0YXRpYyBjb25zdCBmbG9hdCBodWdlID0gMS4wZTMwOworCitmbG9hdAorZmxvb3JmKGZsb2F0IHgpCit7CisJaW50MzJfdCBpMCxqMDsKKwl1X2ludDMyX3QgaTsKKwlHRVRfRkxPQVRfV09SRChpMCx4KTsKKwlqMCA9ICgoaTA+PjIzKSYweGZmKS0weDdmOworCWlmKGowPDIzKSB7CisJICAgIGlmKGowPDApIHsgCS8qIHJhaXNlIGluZXhhY3QgaWYgeCAhPSAwICovCisJCWlmKGh1Z2UreD4oZmxvYXQpMC4wKSB7LyogcmV0dXJuIDAqc2lnbih4KSBpZiB8eHw8MSAqLworCQkgICAgaWYoaTA+PTApIHtpMD0wO30KKwkJICAgIGVsc2UgaWYoKGkwJjB4N2ZmZmZmZmYpIT0wKQorCQkJeyBpMD0weGJmODAwMDAwO30KKwkJfQorCSAgICB9IGVsc2UgeworCQlpID0gKDB4MDA3ZmZmZmYpPj5qMDsKKwkJaWYoKGkwJmkpPT0wKSByZXR1cm4geDsgLyogeCBpcyBpbnRlZ3JhbCAqLworCQlpZihodWdlK3g+KGZsb2F0KTAuMCkgewkvKiByYWlzZSBpbmV4YWN0IGZsYWcgKi8KKwkJICAgIGlmKGkwPDApIGkwICs9ICgweDAwODAwMDAwKT4+ajA7CisJCSAgICBpMCAmPSAofmkpOworCQl9CisJICAgIH0KKwl9IGVsc2UgeworCSAgICBpZihqMD09MHg4MCkgcmV0dXJuIHgreDsJLyogaW5mIG9yIE5hTiAqLworCSAgICBlbHNlIHJldHVybiB4OwkJLyogeCBpcyBpbnRlZ3JhbCAqLworCX0KKwlTRVRfRkxPQVRfV09SRCh4LGkwKTsKKwlyZXR1cm4geDsKK30KZGlmZiAtLWdpdCBhL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19mbG9vcmwuYyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19mbG9vcmwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Y2VjM2U3Ci0tLSAvZGV2L251bGwKKysrIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2Zsb29ybC5jCkBAIC0wLDAgKzEsMTAxIEBACisvKgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogQ29weXJpZ2h0IChDKSAxOTkzIGJ5IFN1biBNaWNyb3N5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBEZXZlbG9wZWQgYXQgU3VuUHJvLCBhIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gYnVzaW5lc3MuCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCisgKiBzb2Z0d2FyZSBpcyBmcmVlbHkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGlzIG5vdGljZQorICogaXMgcHJlc2VydmVkLgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICoKKyAqIEZyb206IEAoIylzX2Zsb29yLmMgNS4xIDkzLzA5LzI0CisgKi8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorX19GQlNESUQoIiRGcmVlQlNEJCIpOworCisvKgorICogZmxvb3JsKHgpCisgKiBSZXR1cm4geCByb3VuZGVkIHRvd2FyZCAtaW5mIHRvIGludGVncmFsIHZhbHVlCisgKiBNZXRob2Q6CisgKglCaXQgdHdpZGRsaW5nLgorICogRXhjZXB0aW9uOgorICoJSW5leGFjdCBmbGFnIHJhaXNlZCBpZiB4IG5vdCBlcXVhbCB0byBmbG9vcmwoeCkuCisgKi8KKworI2luY2x1ZGUgPGZsb2F0Lmg+CisjaW5jbHVkZSA8bWF0aC5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorCisjaW5jbHVkZSAiZnBtYXRoLmgiCisKKyNpZmRlZiBMREJMX0lNUExJQ0lUX05CSVQKKyNkZWZpbmUJTUFOSF9TSVpFCShMREJMX01BTkhfU0laRSArIDEpCisjZGVmaW5lCUlOQ19NQU5IKHUsIGMpCWRvIHsJCQkJCVwKKwl1aW50NjRfdCBvID0gdS5iaXRzLm1hbmg7CQkJCVwKKwl1LmJpdHMubWFuaCArPSAoYyk7CQkJCQlcCisJaWYgKHUuYml0cy5tYW5oIDwgbykJCQkJCVwKKwkJdS5iaXRzLmV4cCsrOwkJCQkJXAorfSB3aGlsZSAoMCkKKyNlbHNlCisjZGVmaW5lCU1BTkhfU0laRQlMREJMX01BTkhfU0laRQorI2RlZmluZQlJTkNfTUFOSCh1LCBjKQlkbyB7CQkJCQlcCisJdWludDY0X3QgbyA9IHUuYml0cy5tYW5oOwkJCQlcCisJdS5iaXRzLm1hbmggKz0gKGMpOwkJCQkJXAorCWlmICh1LmJpdHMubWFuaCA8IG8pIHsJCQkJCVwKKwkJdS5iaXRzLmV4cCsrOwkJCQkJXAorCQl1LmJpdHMubWFuaCB8PSAxbGx1IDw8IChMREJMX01BTkhfU0laRSAtIDEpOwlcCisJfQkJCQkJCQlcCit9IHdoaWxlICgwKQorI2VuZGlmCisKK3N0YXRpYyBjb25zdCBsb25nIGRvdWJsZSBodWdlID0gMS4wZTMwMDsKKworbG9uZyBkb3VibGUKK2Zsb29ybChsb25nIGRvdWJsZSB4KQoreworCXVuaW9uIElFRUVsMmJpdHMgdSA9IHsgLmUgPSB4IH07CisJaW50IGUgPSB1LmJpdHMuZXhwIC0gTERCTF9NQVhfRVhQICsgMTsKKworCWlmIChlIDwgTUFOSF9TSVpFIC0gMSkgeworCQlpZiAoZSA8IDApIHsJCQkvKiByYWlzZSBpbmV4YWN0IGlmIHggIT0gMCAqLworCQkJaWYgKGh1Z2UgKyB4ID4gMC4wKQorCQkJCWlmICh1LmJpdHMuZXhwID4gMCB8fAorCQkJCSAgICAodS5iaXRzLm1hbmggfCB1LmJpdHMubWFubCkgIT0gMCkKKwkJCQkJdS5lID0gdS5iaXRzLnNpZ24gPyAtMS4wIDogMC4wOworCQl9IGVsc2UgeworCQkJdWludDY0X3QgbSA9ICgoMWxsdSA8PCBNQU5IX1NJWkUpIC0gMSkgPj4gKGUgKyAxKTsKKwkJCWlmICgoKHUuYml0cy5tYW5oICYgbSkgfCB1LmJpdHMubWFubCkgPT0gMCkKKwkJCQlyZXR1cm4gKHgpOwkvKiB4IGlzIGludGVncmFsICovCisJCQlpZiAodS5iaXRzLnNpZ24pIHsKKyNpZmRlZiBMREJMX0lNUExJQ0lUX05CSVQKKwkJCQlpZiAoZSA9PSAwKQorCQkJCQl1LmJpdHMuZXhwKys7CisJCQkJZWxzZQorI2VuZGlmCisJCQkJSU5DX01BTkgodSwgMWxsdSA8PCAoTUFOSF9TSVpFIC0gZSAtIDEpKTsKKwkJCX0KKwkJCWlmIChodWdlICsgeCA+IDAuMCkgewkvKiByYWlzZSBpbmV4YWN0IGZsYWcgKi8KKwkJCQl1LmJpdHMubWFuaCAmPSB+bTsKKwkJCQl1LmJpdHMubWFubCA9IDA7CisJCQl9CisJCX0KKwl9IGVsc2UgaWYgKGUgPCBMREJMX01BTlRfRElHIC0gMSkgeworCQl1aW50NjRfdCBtID0gKHVpbnQ2NF90KS0xID4+ICg2NCAtIExEQkxfTUFOVF9ESUcgKyBlICsgMSk7CisJCWlmICgodS5iaXRzLm1hbmwgJiBtKSA9PSAwKQorCQkJcmV0dXJuICh4KTsJLyogeCBpcyBpbnRlZ3JhbCAqLworCQlpZiAodS5iaXRzLnNpZ24pIHsKKwkJCWlmIChlID09IE1BTkhfU0laRSAtIDEpCisJCQkJSU5DX01BTkgodSwgMSk7CisJCQllbHNlIHsKKwkJCQl1aW50NjRfdCBvID0gdS5iaXRzLm1hbmw7CisJCQkJdS5iaXRzLm1hbmwgKz0gMWxsdSA8PCAoTERCTF9NQU5UX0RJRyAtIGUgLSAxKTsKKwkJCQlpZiAodS5iaXRzLm1hbmwgPCBvKQkvKiBnb3QgYSBjYXJyeSAqLworCQkJCQlJTkNfTUFOSCh1LCAxKTsKKwkJCX0KKwkJfQorCQlpZiAoaHVnZSArIHggPiAwLjApCQkvKiByYWlzZSBpbmV4YWN0IGZsYWcgKi8KKwkJCXUuYml0cy5tYW5sICY9IH5tOworCX0KKwlyZXR1cm4gKHUuZSk7Cit9CmRpZmYgLS1naXQgYS9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfZm1hLmMgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfZm1hLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDUyYmVjZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19mbWEuYwpAQCAtMCwwICsxLDI4OCBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAxMSBEYXZpZCBTY2h1bHR6IDxkYXNARnJlZUJTRC5PUkc+CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJTRCQiKTsKKworI2luY2x1ZGUgPGZlbnYuaD4KKyNpbmNsdWRlIDxmbG9hdC5oPgorI2luY2x1ZGUgPG1hdGguaD4KKworI2luY2x1ZGUgIm1hdGhfcHJpdmF0ZS5oIgorCisvKgorICogQSBzdHJ1Y3QgZGQgcmVwcmVzZW50cyBhIGZsb2F0aW5nLXBvaW50IG51bWJlciB3aXRoIHR3aWNlIHRoZSBwcmVjaXNpb24KKyAqIG9mIGEgZG91YmxlLiAgV2UgbWFpbnRhaW4gdGhlIGludmFyaWFudCB0aGF0ICJoaSIgc3RvcmVzIHRoZSA1MyBoaWdoLW9yZGVyCisgKiBiaXRzIG9mIHRoZSByZXN1bHQuCisgKi8KK3N0cnVjdCBkZCB7CisJZG91YmxlIGhpOworCWRvdWJsZSBsbzsKK307CisKKy8qCisgKiBDb21wdXRlIGErYiBleGFjdGx5LCByZXR1cm5pbmcgdGhlIGV4YWN0IHJlc3VsdCBpbiBhIHN0cnVjdCBkZC4gIFdlIGFzc3VtZQorICogdGhhdCBib3RoIGEgYW5kIGIgYXJlIGZpbml0ZSwgYnV0IG1ha2Ugbm8gYXNzdW1wdGlvbnMgYWJvdXQgdGhlaXIgcmVsYXRpdmUKKyAqIG1hZ25pdHVkZXMuCisgKi8KK3N0YXRpYyBpbmxpbmUgc3RydWN0IGRkCitkZF9hZGQoZG91YmxlIGEsIGRvdWJsZSBiKQoreworCXN0cnVjdCBkZCByZXQ7CisJZG91YmxlIHM7CisKKwlyZXQuaGkgPSBhICsgYjsKKwlzID0gcmV0LmhpIC0gYTsKKwlyZXQubG8gPSAoYSAtIChyZXQuaGkgLSBzKSkgKyAoYiAtIHMpOworCXJldHVybiAocmV0KTsKK30KKworLyoKKyAqIENvbXB1dGUgYStiLCB3aXRoIGEgc21hbGwgdHdlYWs6ICBUaGUgbGVhc3Qgc2lnbmlmaWNhbnQgYml0IG9mIHRoZQorICogcmVzdWx0IGlzIGFkanVzdGVkIGludG8gYSBzdGlja3kgYml0IHN1bW1hcml6aW5nIGFsbCB0aGUgYml0cyB0aGF0CisgKiB3ZXJlIGxvc3QgdG8gcm91bmRpbmcuICBUaGlzIGFkanVzdG1lbnQgbmVnYXRlcyB0aGUgZWZmZWN0cyBvZiBkb3VibGUKKyAqIHJvdW5kaW5nIHdoZW4gdGhlIHJlc3VsdCBpcyBhZGRlZCB0byBhbm90aGVyIG51bWJlciB3aXRoIGEgaGlnaGVyCisgKiBleHBvbmVudC4gIEZvciBhbiBleHBsYW5hdGlvbiBvZiByb3VuZCBhbmQgc3RpY2t5IGJpdHMsIHNlZSBhbnkgcmVmZXJlbmNlCisgKiBvbiBGUFUgZGVzaWduLCBlLmcuLAorICoKKyAqICAgICBKLiBDb29uZW4uICBBbiBJbXBsZW1lbnRhdGlvbiBHdWlkZSB0byBhIFByb3Bvc2VkIFN0YW5kYXJkIGZvcgorICogICAgIEZsb2F0aW5nLVBvaW50IEFyaXRobWV0aWMuICBDb21wdXRlciwgdm9sLiAxMywgbm8uIDEsIEphbiAxOTgwLgorICovCitzdGF0aWMgaW5saW5lIGRvdWJsZQorYWRkX2FkanVzdGVkKGRvdWJsZSBhLCBkb3VibGUgYikKK3sKKwlzdHJ1Y3QgZGQgc3VtOworCXVpbnQ2NF90IGhpYml0cywgbG9iaXRzOworCisJc3VtID0gZGRfYWRkKGEsIGIpOworCWlmIChzdW0ubG8gIT0gMCkgeworCQlFWFRSQUNUX1dPUkQ2NChoaWJpdHMsIHN1bS5oaSk7CisJCWlmICgoaGliaXRzICYgMSkgPT0gMCkgeworCQkJLyogaGliaXRzICs9IChpbnQpY29weXNpZ24oMS4wLCBzdW0uaGkgKiBzdW0ubG8pICovCisJCQlFWFRSQUNUX1dPUkQ2NChsb2JpdHMsIHN1bS5sbyk7CisJCQloaWJpdHMgKz0gMSAtICgoaGliaXRzIF4gbG9iaXRzKSA+PiA2Mik7CisJCQlJTlNFUlRfV09SRDY0KHN1bS5oaSwgaGliaXRzKTsKKwkJfQorCX0KKwlyZXR1cm4gKHN1bS5oaSk7Cit9CisKKy8qCisgKiBDb21wdXRlIGxkZXhwKGErYiwgc2NhbGUpIHdpdGggYSBzaW5nbGUgcm91bmRpbmcgZXJyb3IuIEl0IGlzIGFzc3VtZWQKKyAqIHRoYXQgdGhlIHJlc3VsdCB3aWxsIGJlIHN1Ym5vcm1hbCwgYW5kIGNhcmUgaXMgdGFrZW4gdG8gZW5zdXJlIHRoYXQKKyAqIGRvdWJsZSByb3VuZGluZyBkb2VzIG5vdCBvY2N1ci4KKyAqLworc3RhdGljIGlubGluZSBkb3VibGUKK2FkZF9hbmRfZGVub3JtYWxpemUoZG91YmxlIGEsIGRvdWJsZSBiLCBpbnQgc2NhbGUpCit7CisJc3RydWN0IGRkIHN1bTsKKwl1aW50NjRfdCBoaWJpdHMsIGxvYml0czsKKwlpbnQgYml0c19sb3N0OworCisJc3VtID0gZGRfYWRkKGEsIGIpOworCisJLyoKKwkgKiBJZiB3ZSBhcmUgbG9zaW5nIGF0IGxlYXN0IHR3byBiaXRzIG9mIGFjY3VyYWN5IHRvIGRlbm9ybWFsaXphdGlvbiwKKwkgKiB0aGVuIHRoZSBmaXJzdCBsb3N0IGJpdCBiZWNvbWVzIGEgcm91bmQgYml0LCBhbmQgd2UgYWRqdXN0IHRoZQorCSAqIGxvd2VzdCBiaXQgb2Ygc3VtLmhpIHRvIG1ha2UgaXQgYSBzdGlja3kgYml0IHN1bW1hcml6aW5nIGFsbCB0aGUKKwkgKiBiaXRzIGluIHN1bS5sby4gV2l0aCB0aGUgc3RpY2t5IGJpdCBhZGp1c3RlZCwgdGhlIGhhcmR3YXJlIHdpbGwKKwkgKiBicmVhayBhbnkgdGllcyBpbiB0aGUgY29ycmVjdCBkaXJlY3Rpb24uCisJICoKKwkgKiBJZiB3ZSBhcmUgbG9zaW5nIG9ubHkgb25lIGJpdCB0byBkZW5vcm1hbGl6YXRpb24sIGhvd2V2ZXIsIHdlIG11c3QKKwkgKiBicmVhayB0aGUgdGllcyBtYW51YWxseS4KKwkgKi8KKwlpZiAoc3VtLmxvICE9IDApIHsKKwkJRVhUUkFDVF9XT1JENjQoaGliaXRzLCBzdW0uaGkpOworCQliaXRzX2xvc3QgPSAtKChpbnQpKGhpYml0cyA+PiA1MikgJiAweDdmZikgLSBzY2FsZSArIDE7CisJCWlmIChiaXRzX2xvc3QgIT0gMSBeIChpbnQpKGhpYml0cyAmIDEpKSB7CisJCQkvKiBoaWJpdHMgKz0gKGludCljb3B5c2lnbigxLjAsIHN1bS5oaSAqIHN1bS5sbykgKi8KKwkJCUVYVFJBQ1RfV09SRDY0KGxvYml0cywgc3VtLmxvKTsKKwkJCWhpYml0cyArPSAxIC0gKCgoaGliaXRzIF4gbG9iaXRzKSA+PiA2MikgJiAyKTsKKwkJCUlOU0VSVF9XT1JENjQoc3VtLmhpLCBoaWJpdHMpOworCQl9CisJfQorCXJldHVybiAobGRleHAoc3VtLmhpLCBzY2FsZSkpOworfQorCisvKgorICogQ29tcHV0ZSBhKmIgZXhhY3RseSwgcmV0dXJuaW5nIHRoZSBleGFjdCByZXN1bHQgaW4gYSBzdHJ1Y3QgZGQuICBXZSBhc3N1bWUKKyAqIHRoYXQgYm90aCBhIGFuZCBiIGFyZSBub3JtYWxpemVkLCBzbyBubyB1bmRlcmZsb3cgb3Igb3ZlcmZsb3cgd2lsbCBvY2N1ci4KKyAqIFRoZSBjdXJyZW50IHJvdW5kaW5nIG1vZGUgbXVzdCBiZSByb3VuZC10by1uZWFyZXN0LgorICovCitzdGF0aWMgaW5saW5lIHN0cnVjdCBkZAorZGRfbXVsKGRvdWJsZSBhLCBkb3VibGUgYikKK3sKKwlzdGF0aWMgY29uc3QgZG91YmxlIHNwbGl0ID0gMHgxcDI3ICsgMS4wOworCXN0cnVjdCBkZCByZXQ7CisJZG91YmxlIGhhLCBoYiwgbGEsIGxiLCBwLCBxOworCisJcCA9IGEgKiBzcGxpdDsKKwloYSA9IGEgLSBwOworCWhhICs9IHA7CisJbGEgPSBhIC0gaGE7CisKKwlwID0gYiAqIHNwbGl0OworCWhiID0gYiAtIHA7CisJaGIgKz0gcDsKKwlsYiA9IGIgLSBoYjsKKworCXAgPSBoYSAqIGhiOworCXEgPSBoYSAqIGxiICsgbGEgKiBoYjsKKworCXJldC5oaSA9IHAgKyBxOworCXJldC5sbyA9IHAgLSByZXQuaGkgKyBxICsgbGEgKiBsYjsKKwlyZXR1cm4gKHJldCk7Cit9CisKKy8qCisgKiBGdXNlZCBtdWx0aXBseS1hZGQ6IENvbXB1dGUgeCAqIHkgKyB6IHdpdGggYSBzaW5nbGUgcm91bmRpbmcgZXJyb3IuCisgKgorICogV2UgdXNlIHNjYWxpbmcgdG8gYXZvaWQgb3ZlcmZsb3cvdW5kZXJmbG93LCBhbG9uZyB3aXRoIHRoZQorICogY2Fub25pY2FsIHByZWNpc2lvbi1kb3VibGluZyB0ZWNobmlxdWUgYWRhcHRlZCBmcm9tOgorICoKKyAqCURla2tlciwgVC4gIEEgRmxvYXRpbmctUG9pbnQgVGVjaG5pcXVlIGZvciBFeHRlbmRpbmcgdGhlCisgKglBdmFpbGFibGUgUHJlY2lzaW9uLiAgTnVtZXIuIE1hdGguIDE4LCAyMjQtMjQyICgxOTcxKS4KKyAqCisgKiBUaGlzIGFsZ29yaXRobSBpcyBzZW5zaXRpdmUgdG8gdGhlIHJvdW5kaW5nIHByZWNpc2lvbi4gIEZQVXMgc3VjaAorICogYXMgdGhlIGkzODcgbXVzdCBiZSBzZXQgaW4gZG91YmxlLXByZWNpc2lvbiBtb2RlIGlmIHZhcmlhYmxlcyBhcmUKKyAqIHRvIGJlIHN0b3JlZCBpbiBGUCByZWdpc3RlcnMgaW4gb3JkZXIgdG8gYXZvaWQgaW5jb3JyZWN0IHJlc3VsdHMuCisgKiBUaGlzIGlzIHRoZSBkZWZhdWx0IG9uIEZyZWVCU0QsIGJ1dCBub3Qgb24gbWFueSBvdGhlciBzeXN0ZW1zLgorICoKKyAqIEhhcmR3YXJlIGluc3RydWN0aW9ucyBzaG91bGQgYmUgdXNlZCBvbiBhcmNoaXRlY3R1cmVzIHRoYXQgc3VwcG9ydCBpdCwKKyAqIHNpbmNlIHRoaXMgaW1wbGVtZW50YXRpb24gd2lsbCBsaWtlbHkgYmUgc2V2ZXJhbCB0aW1lcyBzbG93ZXIuCisgKi8KK2RvdWJsZQorZm1hKGRvdWJsZSB4LCBkb3VibGUgeSwgZG91YmxlIHopCit7CisJZG91YmxlIHhzLCB5cywgenMsIGFkajsKKwlzdHJ1Y3QgZGQgeHksIHI7CisJaW50IG9yb3VuZDsKKwlpbnQgZXgsIGV5LCBlejsKKwlpbnQgc3ByZWFkOworCisJLyoKKwkgKiBIYW5kbGUgc3BlY2lhbCBjYXNlcy4gVGhlIG9yZGVyIG9mIG9wZXJhdGlvbnMgYW5kIHRoZSBwYXJ0aWN1bGFyCisJICogcmV0dXJuIHZhbHVlcyBoZXJlIGFyZSBjcnVjaWFsIGluIGhhbmRsaW5nIHNwZWNpYWwgY2FzZXMgaW52b2x2aW5nCisJICogaW5maW5pdGllcywgTmFOcywgb3ZlcmZsb3dzLCBhbmQgc2lnbmVkIHplcm9lcyBjb3JyZWN0bHkuCisJICovCisJaWYgKHggPT0gMC4wIHx8IHkgPT0gMC4wKQorCQlyZXR1cm4gKHggKiB5ICsgeik7CisJaWYgKHogPT0gMC4wKQorCQlyZXR1cm4gKHggKiB5KTsKKwlpZiAoIWlzZmluaXRlKHgpIHx8ICFpc2Zpbml0ZSh5KSkKKwkJcmV0dXJuICh4ICogeSArIHopOworCWlmICghaXNmaW5pdGUoeikpCisJCXJldHVybiAoeik7CisKKwl4cyA9IGZyZXhwKHgsICZleCk7CisJeXMgPSBmcmV4cCh5LCAmZXkpOworCXpzID0gZnJleHAoeiwgJmV6KTsKKwlvcm91bmQgPSBmZWdldHJvdW5kKCk7CisJc3ByZWFkID0gZXggKyBleSAtIGV6OworCisJLyoKKwkgKiBJZiB4ICogeSBhbmQgeiBhcmUgbWFueSBvcmRlcnMgb2YgbWFnbml0dWRlIGFwYXJ0LCB0aGUgc2NhbGluZworCSAqIHdpbGwgb3ZlcmZsb3csIHNvIHdlIGhhbmRsZSB0aGVzZSBjYXNlcyBzcGVjaWFsbHkuICBSb3VuZGluZworCSAqIG1vZGVzIG90aGVyIHRoYW4gRkVfVE9ORUFSRVNUIGFyZSBwYWluZnVsLgorCSAqLworCWlmIChzcHJlYWQgPCAtREJMX01BTlRfRElHKSB7CisJCWZlcmFpc2VleGNlcHQoRkVfSU5FWEFDVCk7CisJCWlmICghaXNub3JtYWwoeikpCisJCQlmZXJhaXNlZXhjZXB0KEZFX1VOREVSRkxPVyk7CisJCXN3aXRjaCAob3JvdW5kKSB7CisJCWNhc2UgRkVfVE9ORUFSRVNUOgorCQkJcmV0dXJuICh6KTsKKwkJY2FzZSBGRV9UT1dBUkRaRVJPOgorCQkJaWYgKHggPiAwLjAgXiB5IDwgMC4wIF4geiA8IDAuMCkKKwkJCQlyZXR1cm4gKHopOworCQkJZWxzZQorCQkJCXJldHVybiAobmV4dGFmdGVyKHosIDApKTsKKwkJY2FzZSBGRV9ET1dOV0FSRDoKKwkJCWlmICh4ID4gMC4wIF4geSA8IDAuMCkKKwkJCQlyZXR1cm4gKHopOworCQkJZWxzZQorCQkJCXJldHVybiAobmV4dGFmdGVyKHosIC1JTkZJTklUWSkpOworCQlkZWZhdWx0OgkvKiBGRV9VUFdBUkQgKi8KKwkJCWlmICh4ID4gMC4wIF4geSA8IDAuMCkKKwkJCQlyZXR1cm4gKG5leHRhZnRlcih6LCBJTkZJTklUWSkpOworCQkJZWxzZQorCQkJCXJldHVybiAoeik7CisJCX0KKwl9CisJaWYgKHNwcmVhZCA8PSBEQkxfTUFOVF9ESUcgKiAyKQorCQl6cyA9IGxkZXhwKHpzLCAtc3ByZWFkKTsKKwllbHNlCisJCXpzID0gY29weXNpZ24oREJMX01JTiwgenMpOworCisJZmVzZXRyb3VuZChGRV9UT05FQVJFU1QpOworCS8qIHdvcmsgYXJvdW5kIGNsYW5nIGJ1ZyA4MTAwICovCisJdm9sYXRpbGUgZG91YmxlIHZ4cyA9IHhzOworCisJLyoKKwkgKiBCYXNpYyBhcHByb2FjaCBmb3Igcm91bmQtdG8tbmVhcmVzdDoKKwkgKgorCSAqICAgICAoeHkuaGksIHh5LmxvKSA9IHggKiB5CQkoZXhhY3QpCisJICogICAgIChyLmhpLCByLmxvKSAgID0geHkuaGkgKyB6CShleGFjdCkKKwkgKiAgICAgYWRqID0geHkubG8gKyByLmxvCQkoaW5leGFjdDsgbG93IGJpdCBpcyBzdGlja3kpCisJICogICAgIHJlc3VsdCA9IHIuaGkgKyBhZGoJCShjb3JyZWN0bHkgcm91bmRlZCkKKwkgKi8KKwl4eSA9IGRkX211bCh2eHMsIHlzKTsKKwlyID0gZGRfYWRkKHh5LmhpLCB6cyk7CisKKwlzcHJlYWQgPSBleCArIGV5OworCisJaWYgKHIuaGkgPT0gMC4wKSB7CisJCS8qCisJCSAqIFdoZW4gdGhlIGFkZGVuZHMgY2FuY2VsIHRvIDAsIGVuc3VyZSB0aGF0IHRoZSByZXN1bHQgaGFzCisJCSAqIHRoZSBjb3JyZWN0IHNpZ24uCisJCSAqLworCQlmZXNldHJvdW5kKG9yb3VuZCk7CisJCXZvbGF0aWxlIGRvdWJsZSB2enMgPSB6czsgLyogWFhYIGdjYyBDU0UgYnVnIHdvcmthcm91bmQgKi8KKwkJcmV0dXJuICh4eS5oaSArIHZ6cyArIGxkZXhwKHh5LmxvLCBzcHJlYWQpKTsKKwl9CisKKwlpZiAob3JvdW5kICE9IEZFX1RPTkVBUkVTVCkgeworCQkvKgorCQkgKiBUaGVyZSBpcyBubyBuZWVkIHRvIHdvcnJ5IGFib3V0IGRvdWJsZSByb3VuZGluZyBpbiBkaXJlY3RlZAorCQkgKiByb3VuZGluZyBtb2Rlcy4KKwkJICovCisJCWZlc2V0cm91bmQob3JvdW5kKTsKKwkJLyogd29yayBhcm91bmQgY2xhbmcgYnVnIDgxMDAgKi8KKwkJdm9sYXRpbGUgZG91YmxlIHZybG8gPSByLmxvOworCQlhZGogPSB2cmxvICsgeHkubG87CisJCXJldHVybiAobGRleHAoci5oaSArIGFkaiwgc3ByZWFkKSk7CisJfQorCisJYWRqID0gYWRkX2FkanVzdGVkKHIubG8sIHh5LmxvKTsKKwlpZiAoc3ByZWFkICsgaWxvZ2Ioci5oaSkgPiAtMTAyMykKKwkJcmV0dXJuIChsZGV4cChyLmhpICsgYWRqLCBzcHJlYWQpKTsKKwllbHNlCisJCXJldHVybiAoYWRkX2FuZF9kZW5vcm1hbGl6ZShyLmhpLCBhZGosIHNwcmVhZCkpOworfQorCisjaWYgKExEQkxfTUFOVF9ESUcgPT0gNTMpCitfX3dlYWtfcmVmZXJlbmNlKGZtYSwgZm1hbCk7CisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19mbWFmLmMgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfZm1hZi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2OTU4MjMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfZm1hZi5jCkBAIC0wLDAgKzEsNjkgQEAKKy8qLQorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMTEgRGF2aWQgU2NodWx0eiA8ZGFzQEZyZWVCU0QuT1JHPgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CitfX0ZCU0RJRCgiJEZyZWVCU0QkIik7CisKKyNpbmNsdWRlIDxmZW52Lmg+CisKKyNpbmNsdWRlICJtYXRoLmgiCisjaW5jbHVkZSAibWF0aF9wcml2YXRlLmgiCisKKy8qCisgKiBGdXNlZCBtdWx0aXBseS1hZGQ6IENvbXB1dGUgeCAqIHkgKyB6IHdpdGggYSBzaW5nbGUgcm91bmRpbmcgZXJyb3IuCisgKgorICogQSBkb3VibGUgaGFzIG1vcmUgdGhhbiB0d2ljZSBhcyBtdWNoIHByZWNpc2lvbiB0aGFuIGEgZmxvYXQsIHNvCisgKiBkaXJlY3QgZG91YmxlLXByZWNpc2lvbiBhcml0aG1ldGljIHN1ZmZpY2VzLCBleGNlcHQgd2hlcmUgZG91YmxlCisgKiByb3VuZGluZyBvY2N1cnMuCisgKi8KK2Zsb2F0CitmbWFmKGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHopCit7CisJZG91YmxlIHh5LCByZXN1bHQ7CisJdWludDMyX3QgaHIsIGxyOworCisJeHkgPSAoZG91YmxlKXggKiB5OworCXJlc3VsdCA9IHh5ICsgejsKKwlFWFRSQUNUX1dPUkRTKGhyLCBsciwgcmVzdWx0KTsKKwkvKiBDb21tb24gY2FzZTogVGhlIGRvdWJsZSBwcmVjaXNpb24gcmVzdWx0IGlzIGZpbmUuICovCisJaWYgKChsciAmIDB4MWZmZmZmZmYpICE9IDB4MTAwMDAwMDAgfHwJLyogbm90IGEgaGFsZndheSBjYXNlICovCisJICAgIChociAmIDB4N2ZmMDAwMDApID09IDB4N2ZmMDAwMDAgfHwJLyogTmFOICovCisJICAgIHJlc3VsdCAtIHh5ID09IHogfHwJCQkvKiBleGFjdCAqLworCSAgICBmZWdldHJvdW5kKCkgIT0gRkVfVE9ORUFSRVNUKQkvKiBub3Qgcm91bmQtdG8tbmVhcmVzdCAqLworCQlyZXR1cm4gKHJlc3VsdCk7CisKKwkvKgorCSAqIElmIHJlc3VsdCBpcyBpbmV4YWN0LCBhbmQgZXhhY3RseSBoYWxmd2F5IGJldHdlZW4gdHdvIGZsb2F0IHZhbHVlcywKKwkgKiB3ZSBuZWVkIHRvIGFkanVzdCB0aGUgbG93LW9yZGVyIGJpdCBpbiB0aGUgZGlyZWN0aW9uIG9mIHRoZSBlcnJvci4KKwkgKi8KKwlmZXNldHJvdW5kKEZFX1RPV0FSRFpFUk8pOworCXZvbGF0aWxlIGRvdWJsZSB2eHkgPSB4eTsgIC8qIFhYWCB3b3JrIGFyb3VuZCBnY2MgQ1NFIGJ1ZyAqLworCWRvdWJsZSBhZGp1c3RlZF9yZXN1bHQgPSB2eHkgKyB6OworCWZlc2V0cm91bmQoRkVfVE9ORUFSRVNUKTsKKwlpZiAocmVzdWx0ID09IGFkanVzdGVkX3Jlc3VsdCkKKwkJU0VUX0xPV19XT1JEKGFkanVzdGVkX3Jlc3VsdCwgbHIgKyAxKTsKKwlyZXR1cm4gKGFkanVzdGVkX3Jlc3VsdCk7Cit9CmRpZmYgLS1naXQgYS9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfZm1hbC5jIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2ZtYWwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MjcxOTAxCi0tLSAvZGV2L251bGwKKysrIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2ZtYWwuYwpAQCAtMCwwICsxLDI3MiBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAxMSBEYXZpZCBTY2h1bHR6IDxkYXNARnJlZUJTRC5PUkc+CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJTRCQiKTsKKworI2luY2x1ZGUgPGZlbnYuaD4KKyNpbmNsdWRlIDxmbG9hdC5oPgorI2luY2x1ZGUgPG1hdGguaD4KKworI2luY2x1ZGUgImZwbWF0aC5oIgorCisvKgorICogQSBzdHJ1Y3QgZGQgcmVwcmVzZW50cyBhIGZsb2F0aW5nLXBvaW50IG51bWJlciB3aXRoIHR3aWNlIHRoZSBwcmVjaXNpb24KKyAqIG9mIGEgbG9uZyBkb3VibGUuICBXZSBtYWludGFpbiB0aGUgaW52YXJpYW50IHRoYXQgImhpIiBzdG9yZXMgdGhlIGhpZ2gtb3JkZXIKKyAqIGJpdHMgb2YgdGhlIHJlc3VsdC4KKyAqLworc3RydWN0IGRkIHsKKwlsb25nIGRvdWJsZSBoaTsKKwlsb25nIGRvdWJsZSBsbzsKK307CisKKy8qCisgKiBDb21wdXRlIGErYiBleGFjdGx5LCByZXR1cm5pbmcgdGhlIGV4YWN0IHJlc3VsdCBpbiBhIHN0cnVjdCBkZC4gIFdlIGFzc3VtZQorICogdGhhdCBib3RoIGEgYW5kIGIgYXJlIGZpbml0ZSwgYnV0IG1ha2Ugbm8gYXNzdW1wdGlvbnMgYWJvdXQgdGhlaXIgcmVsYXRpdmUKKyAqIG1hZ25pdHVkZXMuCisgKi8KK3N0YXRpYyBpbmxpbmUgc3RydWN0IGRkCitkZF9hZGQobG9uZyBkb3VibGUgYSwgbG9uZyBkb3VibGUgYikKK3sKKwlzdHJ1Y3QgZGQgcmV0OworCWxvbmcgZG91YmxlIHM7CisKKwlyZXQuaGkgPSBhICsgYjsKKwlzID0gcmV0LmhpIC0gYTsKKwlyZXQubG8gPSAoYSAtIChyZXQuaGkgLSBzKSkgKyAoYiAtIHMpOworCXJldHVybiAocmV0KTsKK30KKworLyoKKyAqIENvbXB1dGUgYStiLCB3aXRoIGEgc21hbGwgdHdlYWs6ICBUaGUgbGVhc3Qgc2lnbmlmaWNhbnQgYml0IG9mIHRoZQorICogcmVzdWx0IGlzIGFkanVzdGVkIGludG8gYSBzdGlja3kgYml0IHN1bW1hcml6aW5nIGFsbCB0aGUgYml0cyB0aGF0CisgKiB3ZXJlIGxvc3QgdG8gcm91bmRpbmcuICBUaGlzIGFkanVzdG1lbnQgbmVnYXRlcyB0aGUgZWZmZWN0cyBvZiBkb3VibGUKKyAqIHJvdW5kaW5nIHdoZW4gdGhlIHJlc3VsdCBpcyBhZGRlZCB0byBhbm90aGVyIG51bWJlciB3aXRoIGEgaGlnaGVyCisgKiBleHBvbmVudC4gIEZvciBhbiBleHBsYW5hdGlvbiBvZiByb3VuZCBhbmQgc3RpY2t5IGJpdHMsIHNlZSBhbnkgcmVmZXJlbmNlCisgKiBvbiBGUFUgZGVzaWduLCBlLmcuLAorICoKKyAqICAgICBKLiBDb29uZW4uICBBbiBJbXBsZW1lbnRhdGlvbiBHdWlkZSB0byBhIFByb3Bvc2VkIFN0YW5kYXJkIGZvcgorICogICAgIEZsb2F0aW5nLVBvaW50IEFyaXRobWV0aWMuICBDb21wdXRlciwgdm9sLiAxMywgbm8uIDEsIEphbiAxOTgwLgorICovCitzdGF0aWMgaW5saW5lIGxvbmcgZG91YmxlCithZGRfYWRqdXN0ZWQobG9uZyBkb3VibGUgYSwgbG9uZyBkb3VibGUgYikKK3sKKwlzdHJ1Y3QgZGQgc3VtOworCXVuaW9uIElFRUVsMmJpdHMgdTsKKworCXN1bSA9IGRkX2FkZChhLCBiKTsKKwlpZiAoc3VtLmxvICE9IDApIHsKKwkJdS5lID0gc3VtLmhpOworCQlpZiAoKHUuYml0cy5tYW5sICYgMSkgPT0gMCkKKwkJCXN1bS5oaSA9IG5leHRhZnRlcmwoc3VtLmhpLCBJTkZJTklUWSAqIHN1bS5sbyk7CisJfQorCXJldHVybiAoc3VtLmhpKTsKK30KKworLyoKKyAqIENvbXB1dGUgbGRleHAoYStiLCBzY2FsZSkgd2l0aCBhIHNpbmdsZSByb3VuZGluZyBlcnJvci4gSXQgaXMgYXNzdW1lZAorICogdGhhdCB0aGUgcmVzdWx0IHdpbGwgYmUgc3Vibm9ybWFsLCBhbmQgY2FyZSBpcyB0YWtlbiB0byBlbnN1cmUgdGhhdAorICogZG91YmxlIHJvdW5kaW5nIGRvZXMgbm90IG9jY3VyLgorICovCitzdGF0aWMgaW5saW5lIGxvbmcgZG91YmxlCithZGRfYW5kX2Rlbm9ybWFsaXplKGxvbmcgZG91YmxlIGEsIGxvbmcgZG91YmxlIGIsIGludCBzY2FsZSkKK3sKKwlzdHJ1Y3QgZGQgc3VtOworCWludCBiaXRzX2xvc3Q7CisJdW5pb24gSUVFRWwyYml0cyB1OworCisJc3VtID0gZGRfYWRkKGEsIGIpOworCisJLyoKKwkgKiBJZiB3ZSBhcmUgbG9zaW5nIGF0IGxlYXN0IHR3byBiaXRzIG9mIGFjY3VyYWN5IHRvIGRlbm9ybWFsaXphdGlvbiwKKwkgKiB0aGVuIHRoZSBmaXJzdCBsb3N0IGJpdCBiZWNvbWVzIGEgcm91bmQgYml0LCBhbmQgd2UgYWRqdXN0IHRoZQorCSAqIGxvd2VzdCBiaXQgb2Ygc3VtLmhpIHRvIG1ha2UgaXQgYSBzdGlja3kgYml0IHN1bW1hcml6aW5nIGFsbCB0aGUKKwkgKiBiaXRzIGluIHN1bS5sby4gV2l0aCB0aGUgc3RpY2t5IGJpdCBhZGp1c3RlZCwgdGhlIGhhcmR3YXJlIHdpbGwKKwkgKiBicmVhayBhbnkgdGllcyBpbiB0aGUgY29ycmVjdCBkaXJlY3Rpb24uCisJICoKKwkgKiBJZiB3ZSBhcmUgbG9zaW5nIG9ubHkgb25lIGJpdCB0byBkZW5vcm1hbGl6YXRpb24sIGhvd2V2ZXIsIHdlIG11c3QKKwkgKiBicmVhayB0aGUgdGllcyBtYW51YWxseS4KKwkgKi8KKwlpZiAoc3VtLmxvICE9IDApIHsKKwkJdS5lID0gc3VtLmhpOworCQliaXRzX2xvc3QgPSAtdS5iaXRzLmV4cCAtIHNjYWxlICsgMTsKKwkJaWYgKGJpdHNfbG9zdCAhPSAxIF4gKGludCkodS5iaXRzLm1hbmwgJiAxKSkKKwkJCXN1bS5oaSA9IG5leHRhZnRlcmwoc3VtLmhpLCBJTkZJTklUWSAqIHN1bS5sbyk7CisJfQorCXJldHVybiAobGRleHAoc3VtLmhpLCBzY2FsZSkpOworfQorCisvKgorICogQ29tcHV0ZSBhKmIgZXhhY3RseSwgcmV0dXJuaW5nIHRoZSBleGFjdCByZXN1bHQgaW4gYSBzdHJ1Y3QgZGQuICBXZSBhc3N1bWUKKyAqIHRoYXQgYm90aCBhIGFuZCBiIGFyZSBub3JtYWxpemVkLCBzbyBubyB1bmRlcmZsb3cgb3Igb3ZlcmZsb3cgd2lsbCBvY2N1ci4KKyAqIFRoZSBjdXJyZW50IHJvdW5kaW5nIG1vZGUgbXVzdCBiZSByb3VuZC10by1uZWFyZXN0LgorICovCitzdGF0aWMgaW5saW5lIHN0cnVjdCBkZAorZGRfbXVsKGxvbmcgZG91YmxlIGEsIGxvbmcgZG91YmxlIGIpCit7CisjaWYgTERCTF9NQU5UX0RJRyA9PSA2NAorCXN0YXRpYyBjb25zdCBsb25nIGRvdWJsZSBzcGxpdCA9IDB4MXAzMkwgKyAxLjA7CisjZWxpZiBMREJMX01BTlRfRElHID09IDExMworCXN0YXRpYyBjb25zdCBsb25nIGRvdWJsZSBzcGxpdCA9IDB4MXA1N0wgKyAxLjA7CisjZW5kaWYKKwlzdHJ1Y3QgZGQgcmV0OworCWxvbmcgZG91YmxlIGhhLCBoYiwgbGEsIGxiLCBwLCBxOworCisJcCA9IGEgKiBzcGxpdDsKKwloYSA9IGEgLSBwOworCWhhICs9IHA7CisJbGEgPSBhIC0gaGE7CisKKwlwID0gYiAqIHNwbGl0OworCWhiID0gYiAtIHA7CisJaGIgKz0gcDsKKwlsYiA9IGIgLSBoYjsKKworCXAgPSBoYSAqIGhiOworCXEgPSBoYSAqIGxiICsgbGEgKiBoYjsKKworCXJldC5oaSA9IHAgKyBxOworCXJldC5sbyA9IHAgLSByZXQuaGkgKyBxICsgbGEgKiBsYjsKKwlyZXR1cm4gKHJldCk7Cit9CisKKy8qCisgKiBGdXNlZCBtdWx0aXBseS1hZGQ6IENvbXB1dGUgeCAqIHkgKyB6IHdpdGggYSBzaW5nbGUgcm91bmRpbmcgZXJyb3IuCisgKgorICogV2UgdXNlIHNjYWxpbmcgdG8gYXZvaWQgb3ZlcmZsb3cvdW5kZXJmbG93LCBhbG9uZyB3aXRoIHRoZQorICogY2Fub25pY2FsIHByZWNpc2lvbi1kb3VibGluZyB0ZWNobmlxdWUgYWRhcHRlZCBmcm9tOgorICoKKyAqCURla2tlciwgVC4gIEEgRmxvYXRpbmctUG9pbnQgVGVjaG5pcXVlIGZvciBFeHRlbmRpbmcgdGhlCisgKglBdmFpbGFibGUgUHJlY2lzaW9uLiAgTnVtZXIuIE1hdGguIDE4LCAyMjQtMjQyICgxOTcxKS4KKyAqLworbG9uZyBkb3VibGUKK2ZtYWwobG9uZyBkb3VibGUgeCwgbG9uZyBkb3VibGUgeSwgbG9uZyBkb3VibGUgeikKK3sKKwlsb25nIGRvdWJsZSB4cywgeXMsIHpzLCBhZGo7CisJc3RydWN0IGRkIHh5LCByOworCWludCBvcm91bmQ7CisJaW50IGV4LCBleSwgZXo7CisJaW50IHNwcmVhZDsKKworCS8qCisJICogSGFuZGxlIHNwZWNpYWwgY2FzZXMuIFRoZSBvcmRlciBvZiBvcGVyYXRpb25zIGFuZCB0aGUgcGFydGljdWxhcgorCSAqIHJldHVybiB2YWx1ZXMgaGVyZSBhcmUgY3J1Y2lhbCBpbiBoYW5kbGluZyBzcGVjaWFsIGNhc2VzIGludm9sdmluZworCSAqIGluZmluaXRpZXMsIE5hTnMsIG92ZXJmbG93cywgYW5kIHNpZ25lZCB6ZXJvZXMgY29ycmVjdGx5LgorCSAqLworCWlmICh4ID09IDAuMCB8fCB5ID09IDAuMCkKKwkJcmV0dXJuICh4ICogeSArIHopOworCWlmICh6ID09IDAuMCkKKwkJcmV0dXJuICh4ICogeSk7CisJaWYgKCFpc2Zpbml0ZSh4KSB8fCAhaXNmaW5pdGUoeSkpCisJCXJldHVybiAoeCAqIHkgKyB6KTsKKwlpZiAoIWlzZmluaXRlKHopKQorCQlyZXR1cm4gKHopOworCisJeHMgPSBmcmV4cGwoeCwgJmV4KTsKKwl5cyA9IGZyZXhwbCh5LCAmZXkpOworCXpzID0gZnJleHBsKHosICZleik7CisJb3JvdW5kID0gZmVnZXRyb3VuZCgpOworCXNwcmVhZCA9IGV4ICsgZXkgLSBlejsKKworCS8qCisJICogSWYgeCAqIHkgYW5kIHogYXJlIG1hbnkgb3JkZXJzIG9mIG1hZ25pdHVkZSBhcGFydCwgdGhlIHNjYWxpbmcKKwkgKiB3aWxsIG92ZXJmbG93LCBzbyB3ZSBoYW5kbGUgdGhlc2UgY2FzZXMgc3BlY2lhbGx5LiAgUm91bmRpbmcKKwkgKiBtb2RlcyBvdGhlciB0aGFuIEZFX1RPTkVBUkVTVCBhcmUgcGFpbmZ1bC4KKwkgKi8KKwlpZiAoc3ByZWFkIDwgLUxEQkxfTUFOVF9ESUcpIHsKKwkJZmVyYWlzZWV4Y2VwdChGRV9JTkVYQUNUKTsKKwkJaWYgKCFpc25vcm1hbCh6KSkKKwkJCWZlcmFpc2VleGNlcHQoRkVfVU5ERVJGTE9XKTsKKwkJc3dpdGNoIChvcm91bmQpIHsKKwkJY2FzZSBGRV9UT05FQVJFU1Q6CisJCQlyZXR1cm4gKHopOworCQljYXNlIEZFX1RPV0FSRFpFUk86CisJCQlpZiAoeCA+IDAuMCBeIHkgPCAwLjAgXiB6IDwgMC4wKQorCQkJCXJldHVybiAoeik7CisJCQllbHNlCisJCQkJcmV0dXJuIChuZXh0YWZ0ZXJsKHosIDApKTsKKwkJY2FzZSBGRV9ET1dOV0FSRDoKKwkJCWlmICh4ID4gMC4wIF4geSA8IDAuMCkKKwkJCQlyZXR1cm4gKHopOworCQkJZWxzZQorCQkJCXJldHVybiAobmV4dGFmdGVybCh6LCAtSU5GSU5JVFkpKTsKKwkJZGVmYXVsdDoJLyogRkVfVVBXQVJEICovCisJCQlpZiAoeCA+IDAuMCBeIHkgPCAwLjApCisJCQkJcmV0dXJuIChuZXh0YWZ0ZXJsKHosIElORklOSVRZKSk7CisJCQllbHNlCisJCQkJcmV0dXJuICh6KTsKKwkJfQorCX0KKwlpZiAoc3ByZWFkIDw9IExEQkxfTUFOVF9ESUcgKiAyKQorCQl6cyA9IGxkZXhwbCh6cywgLXNwcmVhZCk7CisJZWxzZQorCQl6cyA9IGNvcHlzaWdubChMREJMX01JTiwgenMpOworCisJZmVzZXRyb3VuZChGRV9UT05FQVJFU1QpOworCS8qIHdvcmsgYXJvdW5kIGNsYW5nIGJ1ZyA4MTAwICovCisJdm9sYXRpbGUgbG9uZyBkb3VibGUgdnhzID0geHM7CisKKwkvKgorCSAqIEJhc2ljIGFwcHJvYWNoIGZvciByb3VuZC10by1uZWFyZXN0OgorCSAqCisJICogICAgICh4eS5oaSwgeHkubG8pID0geCAqIHkJCShleGFjdCkKKwkgKiAgICAgKHIuaGksIHIubG8pICAgPSB4eS5oaSArIHoJKGV4YWN0KQorCSAqICAgICBhZGogPSB4eS5sbyArIHIubG8JCShpbmV4YWN0OyBsb3cgYml0IGlzIHN0aWNreSkKKwkgKiAgICAgcmVzdWx0ID0gci5oaSArIGFkagkJKGNvcnJlY3RseSByb3VuZGVkKQorCSAqLworCXh5ID0gZGRfbXVsKHZ4cywgeXMpOworCXIgPSBkZF9hZGQoeHkuaGksIHpzKTsKKworCXNwcmVhZCA9IGV4ICsgZXk7CisKKwlpZiAoci5oaSA9PSAwLjApIHsKKwkJLyoKKwkJICogV2hlbiB0aGUgYWRkZW5kcyBjYW5jZWwgdG8gMCwgZW5zdXJlIHRoYXQgdGhlIHJlc3VsdCBoYXMKKwkJICogdGhlIGNvcnJlY3Qgc2lnbi4KKwkJICovCisJCWZlc2V0cm91bmQob3JvdW5kKTsKKwkJdm9sYXRpbGUgbG9uZyBkb3VibGUgdnpzID0genM7IC8qIFhYWCBnY2MgQ1NFIGJ1ZyB3b3JrYXJvdW5kICovCisJCXJldHVybiAoeHkuaGkgKyB2enMgKyBsZGV4cGwoeHkubG8sIHNwcmVhZCkpOworCX0KKworCWlmIChvcm91bmQgIT0gRkVfVE9ORUFSRVNUKSB7CisJCS8qCisJCSAqIFRoZXJlIGlzIG5vIG5lZWQgdG8gd29ycnkgYWJvdXQgZG91YmxlIHJvdW5kaW5nIGluIGRpcmVjdGVkCisJCSAqIHJvdW5kaW5nIG1vZGVzLgorCQkgKi8KKwkJZmVzZXRyb3VuZChvcm91bmQpOworCQkvKiB3b3JrIGFyb3VuZCBjbGFuZyBidWcgODEwMCAqLworCQl2b2xhdGlsZSBsb25nIGRvdWJsZSB2cmxvID0gci5sbzsKKwkJYWRqID0gdnJsbyArIHh5LmxvOworCQlyZXR1cm4gKGxkZXhwbChyLmhpICsgYWRqLCBzcHJlYWQpKTsKKwl9CisKKwlhZGogPSBhZGRfYWRqdXN0ZWQoci5sbywgeHkubG8pOworCWlmIChzcHJlYWQgKyBpbG9nYmwoci5oaSkgPiAtMTYzODMpCisJCXJldHVybiAobGRleHBsKHIuaGkgKyBhZGosIHNwcmVhZCkpOworCWVsc2UKKwkJcmV0dXJuIChhZGRfYW5kX2Rlbm9ybWFsaXplKHIuaGksIGFkaiwgc3ByZWFkKSk7Cit9CmRpZmYgLS1naXQgYS9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfZm1heC5jIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2ZtYXguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNTFiODY1Ci0tLSAvZGV2L251bGwKKysrIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2ZtYXguYwpAQCAtMCwwICsxLDUzIEBACisvKi0KKyAqIENvcHlyaWdodCAoYykgMjAwNCBEYXZpZCBTY2h1bHR6IDxkYXNARnJlZUJTRC5PUkc+CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJTRCQiKTsKKworI2luY2x1ZGUgPG1hdGguaD4KKworI2luY2x1ZGUgImZwbWF0aC5oIgorCitkb3VibGUKK2ZtYXgoZG91YmxlIHgsIGRvdWJsZSB5KQoreworCXVuaW9uIElFRUVkMmJpdHMgdVsyXTsKKworCXVbMF0uZCA9IHg7CisJdVsxXS5kID0geTsKKworCS8qIENoZWNrIGZvciBOYU5zIHRvIGF2b2lkIHJhaXNpbmcgc3B1cmlvdXMgZXhjZXB0aW9ucy4gKi8KKwlpZiAodVswXS5iaXRzLmV4cCA9PSAyMDQ3ICYmICh1WzBdLmJpdHMubWFuaCB8IHVbMF0uYml0cy5tYW5sKSAhPSAwKQorCQlyZXR1cm4gKHkpOworCWlmICh1WzFdLmJpdHMuZXhwID09IDIwNDcgJiYgKHVbMV0uYml0cy5tYW5oIHwgdVsxXS5iaXRzLm1hbmwpICE9IDApCisJCXJldHVybiAoeCk7CisKKwkvKiBIYW5kbGUgY29tcGFyaXNvbnMgb2Ygc2lnbmVkIHplcm9lcy4gKi8KKwlpZiAodVswXS5iaXRzLnNpZ24gIT0gdVsxXS5iaXRzLnNpZ24pCisJCXJldHVybiAodVt1WzBdLmJpdHMuc2lnbl0uZCk7CisKKwlyZXR1cm4gKHggPiB5ID8geCA6IHkpOworfQpkaWZmIC0tZ2l0IGEvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2ZtYXhmLmMgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfZm1heGYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MjNkYTU0Ci0tLSAvZGV2L251bGwKKysrIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2ZtYXhmLmMKQEAgLTAsMCArMSw1MyBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMDQgRGF2aWQgU2NodWx0eiA8ZGFzQEZyZWVCU0QuT1JHPgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CitfX0ZCU0RJRCgiJEZyZWVCU0QkIik7CisKKyNpbmNsdWRlIDxtYXRoLmg+CisKKyNpbmNsdWRlICJmcG1hdGguaCIKKworZmxvYXQKK2ZtYXhmKGZsb2F0IHgsIGZsb2F0IHkpCit7CisJdW5pb24gSUVFRWYyYml0cyB1WzJdOworCisJdVswXS5mID0geDsKKwl1WzFdLmYgPSB5OworCisJLyogQ2hlY2sgZm9yIE5hTnMgdG8gYXZvaWQgcmFpc2luZyBzcHVyaW91cyBleGNlcHRpb25zLiAqLworCWlmICh1WzBdLmJpdHMuZXhwID09IDI1NSAmJiB1WzBdLmJpdHMubWFuICE9IDApCisJCXJldHVybiAoeSk7CisJaWYgKHVbMV0uYml0cy5leHAgPT0gMjU1ICYmIHVbMV0uYml0cy5tYW4gIT0gMCkKKwkJcmV0dXJuICh4KTsKKworCS8qIEhhbmRsZSBjb21wYXJpc29ucyBvZiBzaWduZWQgemVyb2VzLiAqLworCWlmICh1WzBdLmJpdHMuc2lnbiAhPSB1WzFdLmJpdHMuc2lnbikKKwkJcmV0dXJuICh1W3VbMF0uYml0cy5zaWduXS5mKTsKKworCXJldHVybiAoeCA+IHkgPyB4IDogeSk7Cit9CmRpZmYgLS1naXQgYS9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfZm1heGwuYyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19mbWF4bC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhYzQ4YTkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfZm1heGwuYwpAQCAtMCwwICsxLDU1IEBACisvKi0KKyAqIENvcHlyaWdodCAoYykgMjAwNCBEYXZpZCBTY2h1bHR6IDxkYXNARnJlZUJTRC5PUkc+CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJTRCQiKTsKKworI2luY2x1ZGUgPG1hdGguaD4KKworI2luY2x1ZGUgImZwbWF0aC5oIgorCitsb25nIGRvdWJsZQorZm1heGwobG9uZyBkb3VibGUgeCwgbG9uZyBkb3VibGUgeSkKK3sKKwl1bmlvbiBJRUVFbDJiaXRzIHVbMl07CisKKwl1WzBdLmUgPSB4OworCW1hc2tfbmJpdF9sKHVbMF0pOworCXVbMV0uZSA9IHk7CisJbWFza19uYml0X2wodVsxXSk7CisKKwkvKiBDaGVjayBmb3IgTmFOcyB0byBhdm9pZCByYWlzaW5nIHNwdXJpb3VzIGV4Y2VwdGlvbnMuICovCisJaWYgKHVbMF0uYml0cy5leHAgPT0gMzI3NjcgJiYgKHVbMF0uYml0cy5tYW5oIHwgdVswXS5iaXRzLm1hbmwpICE9IDApCisJCXJldHVybiAoeSk7CisJaWYgKHVbMV0uYml0cy5leHAgPT0gMzI3NjcgJiYgKHVbMV0uYml0cy5tYW5oIHwgdVsxXS5iaXRzLm1hbmwpICE9IDApCisJCXJldHVybiAoeCk7CisKKwkvKiBIYW5kbGUgY29tcGFyaXNvbnMgb2Ygc2lnbmVkIHplcm9lcy4gKi8KKwlpZiAodVswXS5iaXRzLnNpZ24gIT0gdVsxXS5iaXRzLnNpZ24pCisJCXJldHVybiAodVswXS5iaXRzLnNpZ24gPyB5IDogeCk7CisKKwlyZXR1cm4gKHggPiB5ID8geCA6IHkpOworfQpkaWZmIC0tZ2l0IGEvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2ZtaW4uYyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19mbWluLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzUwMGM4NAotLS0gL2Rldi9udWxsCisrKyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19mbWluLmMKQEAgLTAsMCArMSw1MyBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMDQgRGF2aWQgU2NodWx0eiA8ZGFzQEZyZWVCU0QuT1JHPgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CitfX0ZCU0RJRCgiJEZyZWVCU0QkIik7CisKKyNpbmNsdWRlIDxtYXRoLmg+CisKKyNpbmNsdWRlICJmcG1hdGguaCIKKworZG91YmxlCitmbWluKGRvdWJsZSB4LCBkb3VibGUgeSkKK3sKKwl1bmlvbiBJRUVFZDJiaXRzIHVbMl07CisKKwl1WzBdLmQgPSB4OworCXVbMV0uZCA9IHk7CisKKwkvKiBDaGVjayBmb3IgTmFOcyB0byBhdm9pZCByYWlzaW5nIHNwdXJpb3VzIGV4Y2VwdGlvbnMuICovCisJaWYgKHVbMF0uYml0cy5leHAgPT0gMjA0NyAmJiAodVswXS5iaXRzLm1hbmggfCB1WzBdLmJpdHMubWFubCkgIT0gMCkKKwkJcmV0dXJuICh5KTsKKwlpZiAodVsxXS5iaXRzLmV4cCA9PSAyMDQ3ICYmICh1WzFdLmJpdHMubWFuaCB8IHVbMV0uYml0cy5tYW5sKSAhPSAwKQorCQlyZXR1cm4gKHgpOworCisJLyogSGFuZGxlIGNvbXBhcmlzb25zIG9mIHNpZ25lZCB6ZXJvZXMuICovCisJaWYgKHVbMF0uYml0cy5zaWduICE9IHVbMV0uYml0cy5zaWduKQorCQlyZXR1cm4gKHVbdVsxXS5iaXRzLnNpZ25dLmQpOworCisJcmV0dXJuICh4IDwgeSA/IHggOiB5KTsKK30KZGlmZiAtLWdpdCBhL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19mbWluZi5jIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2ZtaW5mLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzZhNWM3NgotLS0gL2Rldi9udWxsCisrKyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19mbWluZi5jCkBAIC0wLDAgKzEsNTMgQEAKKy8qLQorICogQ29weXJpZ2h0IChjKSAyMDA0IERhdmlkIFNjaHVsdHogPGRhc0BGcmVlQlNELk9SRz4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorX19GQlNESUQoIiRGcmVlQlNEJCIpOworCisjaW5jbHVkZSA8bWF0aC5oPgorCisjaW5jbHVkZSAiZnBtYXRoLmgiCisKK2Zsb2F0CitmbWluZihmbG9hdCB4LCBmbG9hdCB5KQoreworCXVuaW9uIElFRUVmMmJpdHMgdVsyXTsKKworCXVbMF0uZiA9IHg7CisJdVsxXS5mID0geTsKKworCS8qIENoZWNrIGZvciBOYU5zIHRvIGF2b2lkIHJhaXNpbmcgc3B1cmlvdXMgZXhjZXB0aW9ucy4gKi8KKwlpZiAodVswXS5iaXRzLmV4cCA9PSAyNTUgJiYgdVswXS5iaXRzLm1hbiAhPSAwKQorCQlyZXR1cm4gKHkpOworCWlmICh1WzFdLmJpdHMuZXhwID09IDI1NSAmJiB1WzFdLmJpdHMubWFuICE9IDApCisJCXJldHVybiAoeCk7CisKKwkvKiBIYW5kbGUgY29tcGFyaXNvbnMgb2Ygc2lnbmVkIHplcm9lcy4gKi8KKwlpZiAodVswXS5iaXRzLnNpZ24gIT0gdVsxXS5iaXRzLnNpZ24pCisJCXJldHVybiAodVt1WzFdLmJpdHMuc2lnbl0uZik7CisKKwlyZXR1cm4gKHggPCB5ID8geCA6IHkpOworfQpkaWZmIC0tZ2l0IGEvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2ZtaW5sLmMgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfZm1pbmwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOWQzZWJiCi0tLSAvZGV2L251bGwKKysrIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2ZtaW5sLmMKQEAgLTAsMCArMSw1NSBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMDQgRGF2aWQgU2NodWx0eiA8ZGFzQEZyZWVCU0QuT1JHPgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CitfX0ZCU0RJRCgiJEZyZWVCU0QkIik7CisKKyNpbmNsdWRlIDxtYXRoLmg+CisKKyNpbmNsdWRlICJmcG1hdGguaCIKKworbG9uZyBkb3VibGUKK2ZtaW5sKGxvbmcgZG91YmxlIHgsIGxvbmcgZG91YmxlIHkpCit7CisJdW5pb24gSUVFRWwyYml0cyB1WzJdOworCisJdVswXS5lID0geDsKKwltYXNrX25iaXRfbCh1WzBdKTsKKwl1WzFdLmUgPSB5OworCW1hc2tfbmJpdF9sKHVbMV0pOworCisJLyogQ2hlY2sgZm9yIE5hTnMgdG8gYXZvaWQgcmFpc2luZyBzcHVyaW91cyBleGNlcHRpb25zLiAqLworCWlmICh1WzBdLmJpdHMuZXhwID09IDMyNzY3ICYmICh1WzBdLmJpdHMubWFuaCB8IHVbMF0uYml0cy5tYW5sKSAhPSAwKQorCQlyZXR1cm4gKHkpOworCWlmICh1WzFdLmJpdHMuZXhwID09IDMyNzY3ICYmICh1WzFdLmJpdHMubWFuaCB8IHVbMV0uYml0cy5tYW5sKSAhPSAwKQorCQlyZXR1cm4gKHgpOworCisJLyogSGFuZGxlIGNvbXBhcmlzb25zIG9mIHNpZ25lZCB6ZXJvZXMuICovCisJaWYgKHVbMF0uYml0cy5zaWduICE9IHVbMV0uYml0cy5zaWduKQorCQlyZXR1cm4gKHVbMV0uYml0cy5zaWduID8geSA6IHgpOworCisJcmV0dXJuICh4IDwgeSA/IHggOiB5KTsKK30KZGlmZiAtLWdpdCBhL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19mcmV4cC5jIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2ZyZXhwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzE4YTk5MQotLS0gL2Rldi9udWxsCisrKyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19mcmV4cC5jCkBAIC0wLDAgKzEsNTYgQEAKKy8qIEAoIylzX2ZyZXhwLmMgNS4xIDkzLzA5LzI0ICovCisvKgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogQ29weXJpZ2h0IChDKSAxOTkzIGJ5IFN1biBNaWNyb3N5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBEZXZlbG9wZWQgYXQgU3VuUHJvLCBhIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gYnVzaW5lc3MuCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCisgKiBzb2Z0d2FyZSBpcyBmcmVlbHkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGlzIG5vdGljZQorICogaXMgcHJlc2VydmVkLgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJTRCQiKTsKKworLyoKKyAqIGZvciBub24temVybyB4CisgKgl4ID0gZnJleHAoYXJnLCZleHApOworICogcmV0dXJuIGEgZG91YmxlIGZwIHF1YW50aXR5IHggc3VjaCB0aGF0IDAuNSA8PSB8eHwgPDEuMAorICogYW5kIHRoZSBjb3JyZXNwb25kaW5nIGJpbmFyeSBleHBvbmVudCAiZXhwIi4gVGhhdCBpcworICoJYXJnID0geCoyXmV4cC4KKyAqIElmIGFyZyBpcyBpbmYsIDAuMCwgb3IgTmFOLCB0aGVuIGZyZXhwKGFyZywmZXhwKSByZXR1cm5zIGFyZworICogd2l0aCAqZXhwPTAuCisgKi8KKworI2luY2x1ZGUgPGZsb2F0Lmg+CisKKyNpbmNsdWRlICJtYXRoLmgiCisjaW5jbHVkZSAibWF0aF9wcml2YXRlLmgiCisKK3N0YXRpYyBjb25zdCBkb3VibGUKK3R3bzU0ID0gIDEuODAxNDM5ODUwOTQ4MTk4NDAwMDBlKzE2OyAvKiAweDQzNTAwMDAwLCAweDAwMDAwMDAwICovCisKK2RvdWJsZQorZnJleHAoZG91YmxlIHgsIGludCAqZXB0cikKK3sKKwlpbnQzMl90IGh4LCBpeCwgbHg7CisJRVhUUkFDVF9XT1JEUyhoeCxseCx4KTsKKwlpeCA9IDB4N2ZmZmZmZmYmaHg7CisJKmVwdHIgPSAwOworCWlmKGl4Pj0weDdmZjAwMDAwfHwoKGl4fGx4KT09MCkpIHJldHVybiB4OwkvKiAwLGluZixuYW4gKi8KKwlpZiAoaXg8MHgwMDEwMDAwMCkgewkJLyogc3Vibm9ybWFsICovCisJICAgIHggKj0gdHdvNTQ7CisJICAgIEdFVF9ISUdIX1dPUkQoaHgseCk7CisJICAgIGl4ID0gaHgmMHg3ZmZmZmZmZjsKKwkgICAgKmVwdHIgPSAtNTQ7CisJfQorCSplcHRyICs9IChpeD4+MjApLTEwMjI7CisJaHggPSAoaHgmMHg4MDBmZmZmZil8MHgzZmUwMDAwMDsKKwlTRVRfSElHSF9XT1JEKHgsaHgpOworCXJldHVybiB4OworfQorCisjaWYgKExEQkxfTUFOVF9ESUcgPT0gNTMpCitfX3dlYWtfcmVmZXJlbmNlKGZyZXhwLCBmcmV4cGwpOworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfZnJleHBmLmMgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfZnJleHBmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWE3YzQ4NgotLS0gL2Rldi9udWxsCisrKyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19mcmV4cGYuYwpAQCAtMCwwICsxLDQzIEBACisvKiBzX2ZyZXhwZi5jIC0tIGZsb2F0IHZlcnNpb24gb2Ygc19mcmV4cC5jLgorICogQ29udmVyc2lvbiB0byBmbG9hdCBieSBJYW4gTGFuY2UgVGF5bG9yLCBDeWdudXMgU3VwcG9ydCwgaWFuQGN5Z251cy5jb20uCisgKi8KKworLyoKKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIENvcHlyaWdodCAoQykgMTk5MyBieSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogRGV2ZWxvcGVkIGF0IFN1blBybywgYSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGJ1c2luZXNzLgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcworICogc29mdHdhcmUgaXMgZnJlZWx5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhpcyBub3RpY2UKKyAqIGlzIHByZXNlcnZlZC4KKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CitfX0ZCU0RJRCgiJEZyZWVCU0QkIik7CisKKyNpbmNsdWRlICJtYXRoLmgiCisjaW5jbHVkZSAibWF0aF9wcml2YXRlLmgiCisKK3N0YXRpYyBjb25zdCBmbG9hdAordHdvMjUgPSAgMy4zNTU0NDMyMDAwZSswNzsgLyogMHg0YzAwMDAwMCAqLworCitmbG9hdAorZnJleHBmKGZsb2F0IHgsIGludCAqZXB0cikKK3sKKwlpbnQzMl90IGh4LGl4OworCUdFVF9GTE9BVF9XT1JEKGh4LHgpOworCWl4ID0gMHg3ZmZmZmZmZiZoeDsKKwkqZXB0ciA9IDA7CisJaWYoaXg+PTB4N2Y4MDAwMDB8fChpeD09MCkpIHJldHVybiB4OwkvKiAwLGluZixuYW4gKi8KKwlpZiAoaXg8MHgwMDgwMDAwMCkgewkJLyogc3Vibm9ybWFsICovCisJICAgIHggKj0gdHdvMjU7CisJICAgIEdFVF9GTE9BVF9XT1JEKGh4LHgpOworCSAgICBpeCA9IGh4JjB4N2ZmZmZmZmY7CisJICAgICplcHRyID0gLTI1OworCX0KKwkqZXB0ciArPSAoaXg+PjIzKS0xMjY7CisJaHggPSAoaHgmMHg4MDdmZmZmZil8MHgzZjAwMDAwMDsKKwlTRVRfRkxPQVRfV09SRCh4LGh4KTsKKwlyZXR1cm4geDsKK30KZGlmZiAtLWdpdCBhL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19mcmV4cGwuYyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19mcmV4cGwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMzRmNTVkCi0tLSAvZGV2L251bGwKKysrIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2ZyZXhwbC5jCkBAIC0wLDAgKzEsNjIgQEAKKy8qLQorICogQ29weXJpZ2h0IChjKSAyMDA0LTIwMDUgRGF2aWQgU2NodWx0eiA8ZGFzQEZyZWVCU0QuT1JHPgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKiAkRnJlZUJTRCQKKyAqLworCisjaW5jbHVkZSA8ZmxvYXQuaD4KKyNpbmNsdWRlIDxtYXRoLmg+CisKKyNpbmNsdWRlICJmcG1hdGguaCIKKworI2lmIExEQkxfTUFYX0VYUCAhPSAweDQwMDAKKyNlcnJvciAiVW5zdXBwb3J0ZWQgbG9uZyBkb3VibGUgZm9ybWF0IgorI2VuZGlmCisKK2xvbmcgZG91YmxlCitmcmV4cGwobG9uZyBkb3VibGUgeCwgaW50ICpleCkKK3sKKwl1bmlvbiBJRUVFbDJiaXRzIHU7CisKKwl1LmUgPSB4OworCXN3aXRjaCAodS5iaXRzLmV4cCkgeworCWNhc2UgMDoJCS8qIDAgb3Igc3Vibm9ybWFsICovCisJCWlmICgodS5iaXRzLm1hbmwgfCB1LmJpdHMubWFuaCkgPT0gMCkgeworCQkJKmV4ID0gMDsKKwkJfSBlbHNlIHsKKwkJCXUuZSAqPSAweDEuMHA1MTQ7CisJCQkqZXggPSB1LmJpdHMuZXhwIC0gMHg0MjAwOworCQkJdS5iaXRzLmV4cCA9IDB4M2ZmZTsKKwkJfQorCQlicmVhazsKKwljYXNlIDB4N2ZmZjoJLyogaW5maW5pdHkgb3IgTmFOOyB2YWx1ZSBvZiAqZXggaXMgdW5zcGVjaWZpZWQgKi8KKwkJYnJlYWs7CisJZGVmYXVsdDoJLyogbm9ybWFsICovCisJCSpleCA9IHUuYml0cy5leHAgLSAweDNmZmU7CisJCXUuYml0cy5leHAgPSAweDNmZmU7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gKHUuZSk7Cit9CmRpZmYgLS1naXQgYS9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfaWxvZ2IuYyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19pbG9nYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5MzBiYzkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfaWxvZ2IuYwpAQCAtMCwwICsxLDQ4IEBACisvKiBAKCMpc19pbG9nYi5jIDUuMSA5My8wOS8yNCAqLworLyoKKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIENvcHlyaWdodCAoQykgMTk5MyBieSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogRGV2ZWxvcGVkIGF0IFN1blBybywgYSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGJ1c2luZXNzLgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcworICogc29mdHdhcmUgaXMgZnJlZWx5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhpcyBub3RpY2UKKyAqIGlzIHByZXNlcnZlZC4KKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CitfX0ZCU0RJRCgiJEZyZWVCU0QkIik7CisKKy8qIGlsb2diKGRvdWJsZSB4KQorICogcmV0dXJuIHRoZSBiaW5hcnkgZXhwb25lbnQgb2Ygbm9uLXplcm8geAorICogaWxvZ2IoMCkgPSBGUF9JTE9HQjAKKyAqIGlsb2diKE5hTikgPSBGUF9JTE9HQk5BTiAobm8gc2lnbmFsIGlzIHJhaXNlZCkKKyAqIGlsb2diKGluZikgPSBJTlRfTUFYIChubyBzaWduYWwgaXMgcmFpc2VkKQorICovCisKKyNpbmNsdWRlIDxsaW1pdHMuaD4KKworI2luY2x1ZGUgIm1hdGguaCIKKyNpbmNsdWRlICJtYXRoX3ByaXZhdGUuaCIKKworCWludCBpbG9nYihkb3VibGUgeCkKK3sKKwlpbnQzMl90IGh4LGx4LGl4OworCisJRVhUUkFDVF9XT1JEUyhoeCxseCx4KTsKKwloeCAmPSAweDdmZmZmZmZmOworCWlmKGh4PDB4MDAxMDAwMDApIHsKKwkgICAgaWYoKGh4fGx4KT09MCkKKwkJcmV0dXJuIEZQX0lMT0dCMDsKKwkgICAgZWxzZQkJCS8qIHN1Ym5vcm1hbCB4ICovCisJCWlmKGh4PT0wKSB7CisJCSAgICBmb3IgKGl4ID0gLTEwNDM7IGx4PjA7IGx4PDw9MSkgaXggLT0xOworCQl9IGVsc2UgeworCQkgICAgZm9yIChpeCA9IC0xMDIyLGh4PDw9MTE7IGh4PjA7IGh4PDw9MSkgaXggLT0xOworCQl9CisJICAgIHJldHVybiBpeDsKKwl9CisJZWxzZSBpZiAoaHg8MHg3ZmYwMDAwMCkgcmV0dXJuIChoeD4+MjApLTEwMjM7CisJZWxzZSBpZiAoaHg+MHg3ZmYwMDAwMCB8fCBseCE9MCkgcmV0dXJuIEZQX0lMT0dCTkFOOworCWVsc2UgcmV0dXJuIElOVF9NQVg7Cit9CmRpZmYgLS1naXQgYS9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfaWxvZ2JmLmMgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfaWxvZ2JmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTNmZTI5NQotLS0gL2Rldi9udWxsCisrKyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19pbG9nYmYuYwpAQCAtMCwwICsxLDQwIEBACisvKiBzX2lsb2diZi5jIC0tIGZsb2F0IHZlcnNpb24gb2Ygc19pbG9nYi5jLgorICogQ29udmVyc2lvbiB0byBmbG9hdCBieSBJYW4gTGFuY2UgVGF5bG9yLCBDeWdudXMgU3VwcG9ydCwgaWFuQGN5Z251cy5jb20uCisgKi8KKworLyoKKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIENvcHlyaWdodCAoQykgMTk5MyBieSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogRGV2ZWxvcGVkIGF0IFN1blBybywgYSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGJ1c2luZXNzLgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcworICogc29mdHdhcmUgaXMgZnJlZWx5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhpcyBub3RpY2UKKyAqIGlzIHByZXNlcnZlZC4KKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CitfX0ZCU0RJRCgiJEZyZWVCU0QkIik7CisKKyNpbmNsdWRlIDxsaW1pdHMuaD4KKworI2luY2x1ZGUgIm1hdGguaCIKKyNpbmNsdWRlICJtYXRoX3ByaXZhdGUuaCIKKworCWludCBpbG9nYmYoZmxvYXQgeCkKK3sKKwlpbnQzMl90IGh4LGl4OworCisJR0VUX0ZMT0FUX1dPUkQoaHgseCk7CisJaHggJj0gMHg3ZmZmZmZmZjsKKwlpZihoeDwweDAwODAwMDAwKSB7CisJICAgIGlmKGh4PT0wKQorCQlyZXR1cm4gRlBfSUxPR0IwOworCSAgICBlbHNlCQkJLyogc3Vibm9ybWFsIHggKi8KKwkgICAgICAgIGZvciAoaXggPSAtMTI2LGh4PDw9ODsgaHg+MDsgaHg8PD0xKSBpeCAtPTE7CisJICAgIHJldHVybiBpeDsKKwl9CisJZWxzZSBpZiAoaHg8MHg3ZjgwMDAwMCkgcmV0dXJuIChoeD4+MjMpLTEyNzsKKwllbHNlIGlmIChoeD4weDdmODAwMDAwKSByZXR1cm4gRlBfSUxPR0JOQU47CisJZWxzZSByZXR1cm4gSU5UX01BWDsKK30KZGlmZiAtLWdpdCBhL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19pbG9nYmwuYyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19pbG9nYmwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMjExZjQ0Ci0tLSAvZGV2L251bGwKKysrIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2lsb2dibC5jCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiBGcm9tOiBAKCMpc19pbG9nYi5jIDUuMSA5My8wOS8yNAorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogQ29weXJpZ2h0IChDKSAxOTkzIGJ5IFN1biBNaWNyb3N5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBEZXZlbG9wZWQgYXQgU3VuUHJvLCBhIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gYnVzaW5lc3MuCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCisgKiBzb2Z0d2FyZSBpcyBmcmVlbHkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGlzIG5vdGljZQorICogaXMgcHJlc2VydmVkLgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJTRCQiKTsKKworI2luY2x1ZGUgPGZsb2F0Lmg+CisjaW5jbHVkZSA8bGltaXRzLmg+CisjaW5jbHVkZSA8bWF0aC5oPgorCisjaW5jbHVkZSAiZnBtYXRoLmgiCisKK2ludAoraWxvZ2JsKGxvbmcgZG91YmxlIHgpCit7CisJdW5pb24gSUVFRWwyYml0cyB1OworCXVuc2lnbmVkIGxvbmcgbTsKKwlpbnQgYjsKKworCXUuZSA9IHg7CisJaWYgKHUuYml0cy5leHAgPT0gMCkgeworCQlpZiAoKHUuYml0cy5tYW5sIHwgdS5iaXRzLm1hbmgpID09IDApCisJCQlyZXR1cm4gKEZQX0lMT0dCMCk7CisJCS8qIGRlbm9ybWFsaXplZCAqLworCQlpZiAodS5iaXRzLm1hbmggPT0gMCkgeworCQkJbSA9IDFsdSA8PCAoTERCTF9NQU5MX1NJWkUgLSAxKTsKKwkJCWZvciAoYiA9IExEQkxfTUFOSF9TSVpFOyAhKHUuYml0cy5tYW5sICYgbSk7IG0gPj49IDEpCisJCQkJYisrOworCQl9IGVsc2UgeworCQkJbSA9IDFsdSA8PCAoTERCTF9NQU5IX1NJWkUgLSAxKTsKKwkJCWZvciAoYiA9IDA7ICEodS5iaXRzLm1hbmggJiBtKTsgbSA+Pj0gMSkKKwkJCQliKys7CisJCX0KKyNpZmRlZiBMREJMX0lNUExJQ0lUX05CSVQKKwkJYisrOworI2VuZGlmCisJCXJldHVybiAoTERCTF9NSU5fRVhQIC0gYiAtIDEpOworCX0gZWxzZSBpZiAodS5iaXRzLmV4cCA8IChMREJMX01BWF9FWFAgPDwgMSkgLSAxKQorCQlyZXR1cm4gKHUuYml0cy5leHAgLSBMREJMX01BWF9FWFAgKyAxKTsKKwllbHNlIGlmICh1LmJpdHMubWFubCAhPSAwIHx8IHUuYml0cy5tYW5oICE9IDApCisJCXJldHVybiAoRlBfSUxPR0JOQU4pOworCWVsc2UKKwkJcmV0dXJuIChJTlRfTUFYKTsKK30KZGlmZiAtLWdpdCBhL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19pc2Zpbml0ZS5jIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2lzZmluaXRlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzlkMWJkNwotLS0gL2Rldi9udWxsCisrKyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19pc2Zpbml0ZS5jCkBAIC0wLDAgKzEsNTggQEAKKy8qLQorICogQ29weXJpZ2h0IChjKSAyMDA0IERhdmlkIFNjaHVsdHogPGRhc0BGcmVlQlNELk9SRz4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKgorICogJEZyZWVCU0QkCisgKi8KKworI2luY2x1ZGUgPG1hdGguaD4KKworI2luY2x1ZGUgImZwbWF0aC5oIgorCitpbnQKK19faXNmaW5pdGUoZG91YmxlIGQpCit7CisJdW5pb24gSUVFRWQyYml0cyB1OworCisJdS5kID0gZDsKKwlyZXR1cm4gKHUuYml0cy5leHAgIT0gMjA0Nyk7Cit9CisKK2ludAorX19pc2Zpbml0ZWYoZmxvYXQgZikKK3sKKwl1bmlvbiBJRUVFZjJiaXRzIHU7CisKKwl1LmYgPSBmOworCXJldHVybiAodS5iaXRzLmV4cCAhPSAyNTUpOworfQorCitpbnQKK19faXNmaW5pdGVsKGxvbmcgZG91YmxlIGUpCit7CisJdW5pb24gSUVFRWwyYml0cyB1OworCisJdS5lID0gZTsKKwlyZXR1cm4gKHUuYml0cy5leHAgIT0gMzI3NjcpOworfQpkaWZmIC0tZ2l0IGEvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2lzbmFuLmMgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfaXNuYW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTRkZWQzCi0tLSAvZGV2L251bGwKKysrIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2lzbmFuLmMKQEAgLTAsMCArMSw2NSBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMDQgRGF2aWQgU2NodWx0eiA8ZGFzQEZyZWVCU0QuT1JHPgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKiAkRnJlZUJTRCQKKyAqLworCisjaW5jbHVkZSA8bWF0aC5oPgorCisjaW5jbHVkZSAiZnBtYXRoLmgiCisKKy8qIFByb3ZpZGVkIGJ5IGxpYmMuc28gKi8KKyNpZm5kZWYgUElDCisjdW5kZWYgaXNuYW4KK2ludAoraXNuYW4oZG91YmxlIGQpCit7CisJdW5pb24gSUVFRWQyYml0cyB1OworCisJdS5kID0gZDsKKwlyZXR1cm4gKHUuYml0cy5leHAgPT0gMjA0NyAmJiAodS5iaXRzLm1hbmwgIT0gMCB8fCB1LmJpdHMubWFuaCAhPSAwKSk7Cit9CisjZW5kaWYgLyogIVBJQyAqLworCitpbnQKK19faXNuYW5mKGZsb2F0IGYpCit7CisJdW5pb24gSUVFRWYyYml0cyB1OworCisJdS5mID0gZjsKKwlyZXR1cm4gKHUuYml0cy5leHAgPT0gMjU1ICYmIHUuYml0cy5tYW4gIT0gMCk7Cit9CisKK2ludAorX19pc25hbmwobG9uZyBkb3VibGUgZSkKK3sKKwl1bmlvbiBJRUVFbDJiaXRzIHU7CisKKwl1LmUgPSBlOworCW1hc2tfbmJpdF9sKHUpOworCXJldHVybiAodS5iaXRzLmV4cCA9PSAzMjc2NyAmJiAodS5iaXRzLm1hbmwgIT0gMCB8fCB1LmJpdHMubWFuaCAhPSAwKSk7Cit9CisKK19fd2Vha19yZWZlcmVuY2UoX19pc25hbmYsIGlzbmFuZik7CmRpZmYgLS1naXQgYS9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfaXNub3JtYWwuYyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19pc25vcm1hbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5ZjJhNzQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfaXNub3JtYWwuYwpAQCAtMCwwICsxLDU4IEBACisvKi0KKyAqIENvcHlyaWdodCAoYykgMjAwNCBEYXZpZCBTY2h1bHR6IDxkYXNARnJlZUJTRC5PUkc+CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqICRGcmVlQlNEJAorICovCisKKyNpbmNsdWRlIDxtYXRoLmg+CisKKyNpbmNsdWRlICJmcG1hdGguaCIKKworaW50CitfX2lzbm9ybWFsKGRvdWJsZSBkKQoreworCXVuaW9uIElFRUVkMmJpdHMgdTsKKworCXUuZCA9IGQ7CisJcmV0dXJuICh1LmJpdHMuZXhwICE9IDAgJiYgdS5iaXRzLmV4cCAhPSAyMDQ3KTsKK30KKworaW50CitfX2lzbm9ybWFsZihmbG9hdCBmKQoreworCXVuaW9uIElFRUVmMmJpdHMgdTsKKworCXUuZiA9IGY7CisJcmV0dXJuICh1LmJpdHMuZXhwICE9IDAgJiYgdS5iaXRzLmV4cCAhPSAyNTUpOworfQorCitpbnQKK19faXNub3JtYWxsKGxvbmcgZG91YmxlIGUpCit7CisJdW5pb24gSUVFRWwyYml0cyB1OworCisJdS5lID0gZTsKKwlyZXR1cm4gKHUuYml0cy5leHAgIT0gMCAmJiB1LmJpdHMuZXhwICE9IDMyNzY3KTsKK30KZGlmZiAtLWdpdCBhL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19sbHJpbnQuYyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19sbHJpbnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Yzk1OWVjCi0tLSAvZGV2L251bGwKKysrIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2xscmludC5jCkBAIC0wLDAgKzEsOSBAQAorI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorX19GQlNESUQoIiRGcmVlQlNEJCIpOworCisjZGVmaW5lIHR5cGUJCWRvdWJsZQorI2RlZmluZQlyb3VuZGl0CQlyaW50CisjZGVmaW5lIGR0eXBlCQlsb25nIGxvbmcKKyNkZWZpbmUJZm4JCWxscmludAorCisjaW5jbHVkZSAic19scmludC5jIgpkaWZmIC0tZ2l0IGEvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2xscmludGYuYyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19sbHJpbnRmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2VjNjAxNQotLS0gL2Rldi9udWxsCisrKyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19sbHJpbnRmLmMKQEAgLTAsMCArMSw5IEBACisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CitfX0ZCU0RJRCgiJEZyZWVCU0QkIik7CisKKyNkZWZpbmUgdHlwZQkJZmxvYXQKKyNkZWZpbmUJcm91bmRpdAkJcmludGYKKyNkZWZpbmUgZHR5cGUJCWxvbmcgbG9uZworI2RlZmluZQlmbgkJbGxyaW50ZgorCisjaW5jbHVkZSAic19scmludC5jIgpkaWZmIC0tZ2l0IGEvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2xscmludGwuYyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19sbHJpbnRsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmVmODM3NQotLS0gL2Rldi9udWxsCisrKyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19sbHJpbnRsLmMKQEAgLTAsMCArMSw5IEBACisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CitfX0ZCU0RJRCgiJEZyZWVCU0QkIik7CisKKyNkZWZpbmUgdHlwZQkJbG9uZyBkb3VibGUKKyNkZWZpbmUJcm91bmRpdAkJcmludGwKKyNkZWZpbmUgZHR5cGUJCWxvbmcgbG9uZworI2RlZmluZQlmbgkJbGxyaW50bAorCisjaW5jbHVkZSAic19scmludC5jIgpkaWZmIC0tZ2l0IGEvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2xscm91bmQuYyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19sbHJvdW5kLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODI3ZGZjMQotLS0gL2Rldi9udWxsCisrKyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19sbHJvdW5kLmMKQEAgLTAsMCArMSwxMSBAQAorI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorX19GQlNESUQoIiRGcmVlQlNEJCIpOworCisjZGVmaW5lIHR5cGUJCWRvdWJsZQorI2RlZmluZQlyb3VuZGl0CQlyb3VuZAorI2RlZmluZSBkdHlwZQkJbG9uZyBsb25nCisjZGVmaW5lCURUWVBFX01JTglMTE9OR19NSU4KKyNkZWZpbmUJRFRZUEVfTUFYCUxMT05HX01BWAorI2RlZmluZQlmbgkJbGxyb3VuZAorCisjaW5jbHVkZSAic19scm91bmQuYyIKZGlmZiAtLWdpdCBhL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19sbHJvdW5kZi5jIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2xscm91bmRmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzAzN2ExOAotLS0gL2Rldi9udWxsCisrKyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19sbHJvdW5kZi5jCkBAIC0wLDAgKzEsMTEgQEAKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJTRCQiKTsKKworI2RlZmluZSB0eXBlCQlmbG9hdAorI2RlZmluZQlyb3VuZGl0CQlyb3VuZGYKKyNkZWZpbmUgZHR5cGUJCWxvbmcgbG9uZworI2RlZmluZQlEVFlQRV9NSU4JTExPTkdfTUlOCisjZGVmaW5lCURUWVBFX01BWAlMTE9OR19NQVgKKyNkZWZpbmUJZm4JCWxscm91bmRmCisKKyNpbmNsdWRlICJzX2xyb3VuZC5jIgpkaWZmIC0tZ2l0IGEvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2xscm91bmRsLmMgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfbGxyb3VuZGwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMmM0NGViCi0tLSAvZGV2L251bGwKKysrIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2xscm91bmRsLmMKQEAgLTAsMCArMSwxMSBAQAorI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorX19GQlNESUQoIiRGcmVlQlNEJCIpOworCisjZGVmaW5lIHR5cGUJCWxvbmcgZG91YmxlCisjZGVmaW5lCXJvdW5kaXQJCXJvdW5kbAorI2RlZmluZSBkdHlwZQkJbG9uZyBsb25nCisjZGVmaW5lCURUWVBFX01JTglMTE9OR19NSU4KKyNkZWZpbmUJRFRZUEVfTUFYCUxMT05HX01BWAorI2RlZmluZQlmbgkJbGxyb3VuZGwKKworI2luY2x1ZGUgInNfbHJvdW5kLmMiCmRpZmYgLS1naXQgYS9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfbG9nMXAuYyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19sb2cxcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjYzc3YmQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfbG9nMXAuYwpAQCAtMCwwICsxLDE4MCBAQAorLyogQCgjKXNfbG9nMXAuYyA1LjEgOTMvMDkvMjQgKi8KKy8qCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBDb3B5cmlnaHQgKEMpIDE5OTMgYnkgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIERldmVsb3BlZCBhdCBTdW5Qcm8sIGEgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBidXNpbmVzcy4KKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKKyAqIHNvZnR3YXJlIGlzIGZyZWVseSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoaXMgbm90aWNlCisgKiBpcyBwcmVzZXJ2ZWQuCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorX19GQlNESUQoIiRGcmVlQlNEJCIpOworCisvKiBkb3VibGUgbG9nMXAoZG91YmxlIHgpCisgKgorICogTWV0aG9kIDoKKyAqICAgMS4gQXJndW1lbnQgUmVkdWN0aW9uOiBmaW5kIGsgYW5kIGYgc3VjaCB0aGF0CisgKgkJCTEreCA9IDJeayAqICgxK2YpLAorICoJICAgd2hlcmUgIHNxcnQoMikvMiA8IDErZiA8IHNxcnQoMikgLgorICoKKyAqICAgICAgTm90ZS4gSWYgaz0wLCB0aGVuIGY9eCBpcyBleGFjdC4gSG93ZXZlciwgaWYgayE9MCwgdGhlbiBmCisgKgltYXkgbm90IGJlIHJlcHJlc2VudGFibGUgZXhhY3RseS4gSW4gdGhhdCBjYXNlLCBhIGNvcnJlY3Rpb24KKyAqCXRlcm0gaXMgbmVlZC4gTGV0IHU9MSt4IHJvdW5kZWQuIExldCBjID0gKDEreCktdSwgdGhlbgorICoJbG9nKDEreCkgLSBsb2codSkgfiBjL3UuIFRodXMsIHdlIHByb2NlZWQgdG8gY29tcHV0ZSBsb2codSksCisgKglhbmQgYWRkIGJhY2sgdGhlIGNvcnJlY3Rpb24gdGVybSBjL3UuCisgKgkoTm90ZTogd2hlbiB4ID4gMioqNTMsIG9uZSBjYW4gc2ltcGx5IHJldHVybiBsb2coeCkpCisgKgorICogICAyLiBBcHByb3hpbWF0aW9uIG9mIGxvZzFwKGYpLgorICoJTGV0IHMgPSBmLygyK2YpIDsgYmFzZWQgb24gbG9nKDErZikgPSBsb2coMStzKSAtIGxvZygxLXMpCisgKgkJID0gMnMgKyAyLzMgcyoqMyArIDIvNSBzKio1ICsgLi4uLi4sCisgKgkgICAgIAkgPSAycyArIHMqUgorICogICAgICBXZSB1c2UgYSBzcGVjaWFsIFJlbWUgYWxnb3JpdGhtIG9uIFswLDAuMTcxNl0gdG8gZ2VuZXJhdGUKKyAqIAlhIHBvbHlub21pYWwgb2YgZGVncmVlIDE0IHRvIGFwcHJveGltYXRlIFIgVGhlIG1heGltdW0gZXJyb3IKKyAqCW9mIHRoaXMgcG9seW5vbWlhbCBhcHByb3hpbWF0aW9uIGlzIGJvdW5kZWQgYnkgMioqLTU4LjQ1LiBJbgorICoJb3RoZXIgd29yZHMsCisgKgkJICAgICAgICAyICAgICAgNCAgICAgIDYgICAgICA4ICAgICAgMTAgICAgICAxMiAgICAgIDE0CisgKgkgICAgUih6KSB+IExwMSpzICtMcDIqcyArTHAzKnMgK0xwNCpzICtMcDUqcyAgK0xwNipzICArTHA3KnMKKyAqICAJKHRoZSB2YWx1ZXMgb2YgTHAxIHRvIExwNyBhcmUgbGlzdGVkIGluIHRoZSBwcm9ncmFtKQorICoJYW5kCisgKgkgICAgfCAgICAgIDIgICAgICAgICAgMTQgICAgICAgICAgfCAgICAgLTU4LjQ1CisgKgkgICAgfCBMcDEqcyArLi4uK0xwNypzICAgIC0gIFIoeikgfCA8PSAyCisgKgkgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICoJTm90ZSB0aGF0IDJzID0gZiAtIHMqZiA9IGYgLSBoZnNxICsgcypoZnNxLCB3aGVyZSBoZnNxID0gZipmLzIuCisgKglJbiBvcmRlciB0byBndWFyYW50ZWUgZXJyb3IgaW4gbG9nIGJlbG93IDF1bHAsIHdlIGNvbXB1dGUgbG9nCisgKglieQorICoJCWxvZzFwKGYpID0gZiAtIChoZnNxIC0gcyooaGZzcStSKSkuCisgKgorICoJMy4gRmluYWxseSwgbG9nMXAoeCkgPSBrKmxuMiArIGxvZzFwKGYpLgorICoJCSAJICAgICA9IGsqbG4yX2hpKyhmLShoZnNxLShzKihoZnNxK1IpK2sqbG4yX2xvKSkpCisgKgkgICBIZXJlIGxuMiBpcyBzcGxpdCBpbnRvIHR3byBmbG9hdGluZyBwb2ludCBudW1iZXI6CisgKgkJCWxuMl9oaSArIGxuMl9sbywKKyAqCSAgIHdoZXJlIG4qbG4yX2hpIGlzIGFsd2F5cyBleGFjdCBmb3IgfG58IDwgMjAwMC4KKyAqCisgKiBTcGVjaWFsIGNhc2VzOgorICoJbG9nMXAoeCkgaXMgTmFOIHdpdGggc2lnbmFsIGlmIHggPCAtMSAoaW5jbHVkaW5nIC1JTkYpIDsKKyAqCWxvZzFwKCtJTkYpIGlzICtJTkY7IGxvZzFwKC0xKSBpcyAtSU5GIHdpdGggc2lnbmFsOworICoJbG9nMXAoTmFOKSBpcyB0aGF0IE5hTiB3aXRoIG5vIHNpZ25hbC4KKyAqCisgKiBBY2N1cmFjeToKKyAqCWFjY29yZGluZyB0byBhbiBlcnJvciBhbmFseXNpcywgdGhlIGVycm9yIGlzIGFsd2F5cyBsZXNzIHRoYW4KKyAqCTEgdWxwICh1bml0IGluIHRoZSBsYXN0IHBsYWNlKS4KKyAqCisgKiBDb25zdGFudHM6CisgKiBUaGUgaGV4YWRlY2ltYWwgdmFsdWVzIGFyZSB0aGUgaW50ZW5kZWQgb25lcyBmb3IgdGhlIGZvbGxvd2luZworICogY29uc3RhbnRzLiBUaGUgZGVjaW1hbCB2YWx1ZXMgbWF5IGJlIHVzZWQsIHByb3ZpZGVkIHRoYXQgdGhlCisgKiBjb21waWxlciB3aWxsIGNvbnZlcnQgZnJvbSBkZWNpbWFsIHRvIGJpbmFyeSBhY2N1cmF0ZWx5IGVub3VnaAorICogdG8gcHJvZHVjZSB0aGUgaGV4YWRlY2ltYWwgdmFsdWVzIHNob3duLgorICoKKyAqIE5vdGU6IEFzc3VtaW5nIGxvZygpIHJldHVybiBhY2N1cmF0ZSBhbnN3ZXIsIHRoZSBmb2xsb3dpbmcKKyAqIAkgYWxnb3JpdGhtIGNhbiBiZSB1c2VkIHRvIGNvbXB1dGUgbG9nMXAoeCkgdG8gd2l0aGluIGEgZmV3IFVMUDoKKyAqCisgKgkJdSA9IDEreDsKKyAqCQlpZih1PT0xLjApIHJldHVybiB4IDsgZWxzZQorICoJCQkgICByZXR1cm4gbG9nKHUpKih4Lyh1LTEuMCkpOworICoKKyAqCSBTZWUgSFAtMTVDIEFkdmFuY2VkIEZ1bmN0aW9ucyBIYW5kYm9vaywgcC4xOTMuCisgKi8KKworI2luY2x1ZGUgPGZsb2F0Lmg+CisKKyNpbmNsdWRlICJtYXRoLmgiCisjaW5jbHVkZSAibWF0aF9wcml2YXRlLmgiCisKK3N0YXRpYyBjb25zdCBkb3VibGUKK2xuMl9oaSAgPSAgNi45MzE0NzE4MDM2OTEyMzgxNjQ5MGUtMDEsCS8qIDNmZTYyZTQyIGZlZTAwMDAwICovCitsbjJfbG8gID0gIDEuOTA4MjE0OTI5MjcwNTg3NzAwMDJlLTEwLAkvKiAzZGVhMzllZiAzNTc5M2M3NiAqLwordHdvNTQgICA9ICAxLjgwMTQzOTg1MDk0ODE5ODQwMDAwZSsxNiwgIC8qIDQzNTAwMDAwIDAwMDAwMDAwICovCitMcDEgPSA2LjY2NjY2NjY2NjY2NjczNTEzMGUtMDEsICAvKiAzRkU1NTU1NSA1NTU1NTU5MyAqLworTHAyID0gMy45OTk5OTk5OTk5NDA5NDE5MDhlLTAxLCAgLyogM0ZEOTk5OTkgOTk5N0ZBMDQgKi8KK0xwMyA9IDIuODU3MTQyODc0MzY2MjM5MTQ5ZS0wMSwgIC8qIDNGRDI0OTI0IDk0MjI5MzU5ICovCitMcDQgPSAyLjIyMjIxOTg0MzIxNDk3ODM5NmUtMDEsICAvKiAzRkNDNzFDNSAxRDhFNzhBRiAqLworTHA1ID0gMS44MTgzNTcyMTYxNjE4MDUwMTJlLTAxLCAgLyogM0ZDNzQ2NjQgOTZDQjAzREUgKi8KK0xwNiA9IDEuNTMxMzgzNzY5OTIwOTM3MzMyZS0wMSwgIC8qIDNGQzM5QTA5IEQwNzhDNjlGICovCitMcDcgPSAxLjQ3OTgxOTg2MDUxMTY1ODU5MWUtMDE7ICAvKiAzRkMyRjExMiBERjNFNTI0NCAqLworCitzdGF0aWMgY29uc3QgZG91YmxlIHplcm8gPSAwLjA7CitzdGF0aWMgdm9sYXRpbGUgZG91YmxlIHZ6ZXJvID0gMC4wOworCitkb3VibGUKK2xvZzFwKGRvdWJsZSB4KQoreworCWRvdWJsZSBoZnNxLGYsYyxzLHosUix1OworCWludDMyX3QgayxoeCxodSxheDsKKworCUdFVF9ISUdIX1dPUkQoaHgseCk7CisJYXggPSBoeCYweDdmZmZmZmZmOworCisJayA9IDE7CisJaWYgKGh4IDwgMHgzRkRBODI3QSkgewkJCS8qIDEreCA8IHNxcnQoMikrICovCisJICAgIGlmKGF4Pj0weDNmZjAwMDAwKSB7CQkvKiB4IDw9IC0xLjAgKi8KKwkJaWYoeD09LTEuMCkgcmV0dXJuIC10d281NC92emVybzsgLyogbG9nMXAoLTEpPStpbmYgKi8KKwkJZWxzZSByZXR1cm4gKHgteCkvKHgteCk7CS8qIGxvZzFwKHg8LTEpPU5hTiAqLworCSAgICB9CisJICAgIGlmKGF4PDB4M2UyMDAwMDApIHsJCQkvKiB8eHwgPCAyKiotMjkgKi8KKwkJaWYodHdvNTQreD56ZXJvCQkJLyogcmFpc2UgaW5leGFjdCAqLworCSAgICAgICAgICAgICYmYXg8MHgzYzkwMDAwMCkgCQkvKiB8eHwgPCAyKiotNTQgKi8KKwkJICAgIHJldHVybiB4OworCQllbHNlCisJCSAgICByZXR1cm4geCAtIHgqeCowLjU7CisJICAgIH0KKwkgICAgaWYoaHg+MHx8aHg8PSgoaW50MzJfdCkweGJmZDJiZWM0KSkgeworCQlrPTA7Zj14O2h1PTE7fQkJLyogc3FydCgyKS8yLSA8PSAxK3ggPCBzcXJ0KDIpKyAqLworCX0KKwlpZiAoaHggPj0gMHg3ZmYwMDAwMCkgcmV0dXJuIHgreDsKKwlpZihrIT0wKSB7CisJICAgIGlmKGh4PDB4NDM0MDAwMDApIHsKKwkJU1RSSUNUX0FTU0lHTihkb3VibGUsdSwxLjAreCk7CisJCUdFVF9ISUdIX1dPUkQoaHUsdSk7CisJICAgICAgICBrICA9IChodT4+MjApLTEwMjM7CisJICAgICAgICBjICA9IChrPjApPyAxLjAtKHUteCk6eC0odS0xLjApOy8qIGNvcnJlY3Rpb24gdGVybSAqLworCQljIC89IHU7CisJICAgIH0gZWxzZSB7CisJCXUgID0geDsKKwkJR0VUX0hJR0hfV09SRChodSx1KTsKKwkgICAgICAgIGsgID0gKGh1Pj4yMCktMTAyMzsKKwkJYyAgPSAwOworCSAgICB9CisJICAgIGh1ICY9IDB4MDAwZmZmZmY7CisJICAgIC8qCisJICAgICAqIFRoZSBhcHByb3hpbWF0aW9uIHRvIHNxcnQoMikgdXNlZCBpbiB0aHJlc2hvbGRzIGlzIG5vdAorCSAgICAgKiBjcml0aWNhbC4gIEhvd2V2ZXIsIHRoZSBvbmVzIHVzZWQgYWJvdmUgbXVzdCBnaXZlIGxlc3MKKwkgICAgICogc3RyaWN0IGJvdW5kcyB0aGFuIHRoZSBvbmUgaGVyZSBzbyB0aGF0IHRoZSBrPT0wIGNhc2UgaXMKKwkgICAgICogbmV2ZXIgcmVhY2hlZCBmcm9tIGhlcmUsIHNpbmNlIGhlcmUgd2UgaGF2ZSBjb21taXR0ZWQgdG8KKwkgICAgICogdXNpbmcgdGhlIGNvcnJlY3Rpb24gdGVybSBidXQgZG9uJ3QgdXNlIGl0IGlmIGs9PTAuCisJICAgICAqLworCSAgICBpZihodTwweDZhMDllKSB7CQkJLyogdSB+PCBzcXJ0KDIpICovCisJICAgICAgICBTRVRfSElHSF9XT1JEKHUsaHV8MHgzZmYwMDAwMCk7CS8qIG5vcm1hbGl6ZSB1ICovCisJICAgIH0gZWxzZSB7CisJICAgICAgICBrICs9IDE7CisJCVNFVF9ISUdIX1dPUkQodSxodXwweDNmZTAwMDAwKTsJLyogbm9ybWFsaXplIHUvMiAqLworCSAgICAgICAgaHUgPSAoMHgwMDEwMDAwMC1odSk+PjI7CisJICAgIH0KKwkgICAgZiA9IHUtMS4wOworCX0KKwloZnNxPTAuNSpmKmY7CisJaWYoaHU9PTApIHsJLyogfGZ8IDwgMioqLTIwICovCisJICAgIGlmKGY9PXplcm8pIHsKKwkJaWYoaz09MCkgeworCQkgICAgcmV0dXJuIHplcm87CisJCX0gZWxzZSB7CisJCSAgICBjICs9IGsqbG4yX2xvOworCQkgICAgcmV0dXJuIGsqbG4yX2hpK2M7CisJCX0KKwkgICAgfQorCSAgICBSID0gaGZzcSooMS4wLTAuNjY2NjY2NjY2NjY2NjY2NjYqZik7CisJICAgIGlmKGs9PTApIHJldHVybiBmLVI7IGVsc2UKKwkgICAgCSAgICAgcmV0dXJuIGsqbG4yX2hpLSgoUi0oaypsbjJfbG8rYykpLWYpOworCX0KKyAJcyA9IGYvKDIuMCtmKTsKKwl6ID0gcypzOworCVIgPSB6KihMcDEreiooTHAyK3oqKExwMyt6KihMcDQreiooTHA1K3oqKExwNit6KkxwNykpKSkpKTsKKwlpZihrPT0wKSByZXR1cm4gZi0oaGZzcS1zKihoZnNxK1IpKTsgZWxzZQorCQkgcmV0dXJuIGsqbG4yX2hpLSgoaGZzcS0ocyooaGZzcStSKSsoaypsbjJfbG8rYykpKS1mKTsKK30KKworI2lmIChMREJMX01BTlRfRElHID09IDUzKQorX193ZWFrX3JlZmVyZW5jZShsb2cxcCwgbG9nMXBsKTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2xvZzFwZi5jIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2xvZzFwZi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmMDRjNjcKLS0tIC9kZXYvbnVsbAorKysgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfbG9nMXBmLmMKQEAgLTAsMCArMSwxMTUgQEAKKy8qIHNfbG9nMXBmLmMgLS0gZmxvYXQgdmVyc2lvbiBvZiBzX2xvZzFwLmMuCisgKiBDb252ZXJzaW9uIHRvIGZsb2F0IGJ5IElhbiBMYW5jZSBUYXlsb3IsIEN5Z251cyBTdXBwb3J0LCBpYW5AY3lnbnVzLmNvbS4KKyAqLworCisvKgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogQ29weXJpZ2h0IChDKSAxOTkzIGJ5IFN1biBNaWNyb3N5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBEZXZlbG9wZWQgYXQgU3VuUHJvLCBhIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gYnVzaW5lc3MuCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCisgKiBzb2Z0d2FyZSBpcyBmcmVlbHkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGlzIG5vdGljZQorICogaXMgcHJlc2VydmVkLgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJTRCQiKTsKKworI2luY2x1ZGUgPGZsb2F0Lmg+CisKKyNpbmNsdWRlICJtYXRoLmgiCisjaW5jbHVkZSAibWF0aF9wcml2YXRlLmgiCisKK3N0YXRpYyBjb25zdCBmbG9hdAorbG4yX2hpID0gICA2LjkzMTM4MTIyNTZlLTAxLAkvKiAweDNmMzE3MTgwICovCitsbjJfbG8gPSAgIDkuMDU4MDAwNjE0NWUtMDYsCS8qIDB4MzcxN2Y3ZDEgKi8KK3R3bzI1ID0gICAgMy4zNTU0NDMyMDBlKzA3LAkvKiAweDRjMDAwMDAwICovCitMcDEgPSA2LjY2NjY2Njg2NTNlLTAxLAkvKiAzRjJBQUFBQiAqLworTHAyID0gNC4wMDAwMDAwNTk2ZS0wMSwJLyogM0VDQ0NDQ0QgKi8KK0xwMyA9IDIuODU3MTQyOTg0OWUtMDEsIC8qIDNFOTI0OTI1ICovCitMcDQgPSAyLjIyMjIxOTg1NDZlLTAxLCAvKiAzRTYzOEUyOSAqLworTHA1ID0gMS44MTgzNTcyNTkwZS0wMSwgLyogM0UzQTMzMjUgKi8KK0xwNiA9IDEuNTMxMzgzODQyMmUtMDEsIC8qIDNFMUNEMDRGICovCitMcDcgPSAxLjQ3OTgxOTg2NDBlLTAxOyAvKiAzRTE3ODg5NyAqLworCitzdGF0aWMgY29uc3QgZmxvYXQgemVybyA9IDAuMDsKK3N0YXRpYyB2b2xhdGlsZSBmbG9hdCB2emVybyA9IDAuMDsKKworZmxvYXQKK2xvZzFwZihmbG9hdCB4KQoreworCWZsb2F0IGhmc3EsZixjLHMseixSLHU7CisJaW50MzJfdCBrLGh4LGh1LGF4OworCisJR0VUX0ZMT0FUX1dPUkQoaHgseCk7CisJYXggPSBoeCYweDdmZmZmZmZmOworCisJayA9IDE7CisJaWYgKGh4IDwgMHgzZWQ0MTNkMCkgewkJCS8qIDEreCA8IHNxcnQoMikrICAqLworCSAgICBpZihheD49MHgzZjgwMDAwMCkgewkJLyogeCA8PSAtMS4wICovCisJCWlmKHg9PShmbG9hdCktMS4wKSByZXR1cm4gLXR3bzI1L3Z6ZXJvOyAvKiBsb2cxcCgtMSk9K2luZiAqLworCQllbHNlIHJldHVybiAoeC14KS8oeC14KTsJLyogbG9nMXAoeDwtMSk9TmFOICovCisJICAgIH0KKwkgICAgaWYoYXg8MHgzODAwMDAwMCkgewkJCS8qIHx4fCA8IDIqKi0xNSAqLworCQlpZih0d28yNSt4Pnplcm8JCQkvKiByYWlzZSBpbmV4YWN0ICovCisJICAgICAgICAgICAgJiZheDwweDMzODAwMDAwKSAJCS8qIHx4fCA8IDIqKi0yNCAqLworCQkgICAgcmV0dXJuIHg7CisJCWVsc2UKKwkJICAgIHJldHVybiB4IC0geCp4KihmbG9hdCkwLjU7CisJICAgIH0KKwkgICAgaWYoaHg+MHx8aHg8PSgoaW50MzJfdCkweGJlOTVmNjE5KSkgeworCQlrPTA7Zj14O2h1PTE7fQkJLyogc3FydCgyKS8yLSA8PSAxK3ggPCBzcXJ0KDIpKyAqLworCX0KKwlpZiAoaHggPj0gMHg3ZjgwMDAwMCkgcmV0dXJuIHgreDsKKwlpZihrIT0wKSB7CisJICAgIGlmKGh4PDB4NWEwMDAwMDApIHsKKwkJU1RSSUNUX0FTU0lHTihmbG9hdCx1LChmbG9hdCkxLjAreCk7CisJCUdFVF9GTE9BVF9XT1JEKGh1LHUpOworCSAgICAgICAgayAgPSAoaHU+PjIzKS0xMjc7CisJCS8qIGNvcnJlY3Rpb24gdGVybSAqLworCSAgICAgICAgYyAgPSAoaz4wKT8gKGZsb2F0KTEuMC0odS14KTp4LSh1LShmbG9hdCkxLjApOworCQljIC89IHU7CisJICAgIH0gZWxzZSB7CisJCXUgID0geDsKKwkJR0VUX0ZMT0FUX1dPUkQoaHUsdSk7CisJICAgICAgICBrICA9IChodT4+MjMpLTEyNzsKKwkJYyAgPSAwOworCSAgICB9CisJICAgIGh1ICY9IDB4MDA3ZmZmZmY7CisJICAgIC8qCisJICAgICAqIFRoZSBhcHByb3hpbWF0aW9uIHRvIHNxcnQoMikgdXNlZCBpbiB0aHJlc2hvbGRzIGlzIG5vdAorCSAgICAgKiBjcml0aWNhbC4gIEhvd2V2ZXIsIHRoZSBvbmVzIHVzZWQgYWJvdmUgbXVzdCBnaXZlIGxlc3MKKwkgICAgICogc3RyaWN0IGJvdW5kcyB0aGFuIHRoZSBvbmUgaGVyZSBzbyB0aGF0IHRoZSBrPT0wIGNhc2UgaXMKKwkgICAgICogbmV2ZXIgcmVhY2hlZCBmcm9tIGhlcmUsIHNpbmNlIGhlcmUgd2UgaGF2ZSBjb21taXR0ZWQgdG8KKwkgICAgICogdXNpbmcgdGhlIGNvcnJlY3Rpb24gdGVybSBidXQgZG9uJ3QgdXNlIGl0IGlmIGs9PTAuCisJICAgICAqLworCSAgICBpZihodTwweDM1MDRmNCkgewkJCS8qIHUgPCBzcXJ0KDIpICovCisJICAgICAgICBTRVRfRkxPQVRfV09SRCh1LGh1fDB4M2Y4MDAwMDApOy8qIG5vcm1hbGl6ZSB1ICovCisJICAgIH0gZWxzZSB7CisJICAgICAgICBrICs9IDE7CisJCVNFVF9GTE9BVF9XT1JEKHUsaHV8MHgzZjAwMDAwMCk7CS8qIG5vcm1hbGl6ZSB1LzIgKi8KKwkgICAgICAgIGh1ID0gKDB4MDA4MDAwMDAtaHUpPj4yOworCSAgICB9CisJICAgIGYgPSB1LShmbG9hdCkxLjA7CisJfQorCWhmc3E9KGZsb2F0KTAuNSpmKmY7CisJaWYoaHU9PTApIHsJLyogfGZ8IDwgMioqLTIwICovCisJICAgIGlmKGY9PXplcm8pIHsKKwkJaWYoaz09MCkgeworCQkgICAgcmV0dXJuIHplcm87CisJCX0gZWxzZSB7CisJCSAgICBjICs9IGsqbG4yX2xvOworCQkgICAgcmV0dXJuIGsqbG4yX2hpK2M7CisJCX0KKwkgICAgfQorCSAgICBSID0gaGZzcSooKGZsb2F0KTEuMC0oZmxvYXQpMC42NjY2NjY2NjY2NjY2NjY2NipmKTsKKwkgICAgaWYoaz09MCkgcmV0dXJuIGYtUjsgZWxzZQorCSAgICAJICAgICByZXR1cm4gaypsbjJfaGktKChSLShrKmxuMl9sbytjKSktZik7CisJfQorIAlzID0gZi8oKGZsb2F0KTIuMCtmKTsKKwl6ID0gcypzOworCVIgPSB6KihMcDEreiooTHAyK3oqKExwMyt6KihMcDQreiooTHA1K3oqKExwNit6KkxwNykpKSkpKTsKKwlpZihrPT0wKSByZXR1cm4gZi0oaGZzcS1zKihoZnNxK1IpKTsgZWxzZQorCQkgcmV0dXJuIGsqbG4yX2hpLSgoaGZzcS0ocyooaGZzcStSKSsoaypsbjJfbG8rYykpKS1mKTsKK30KZGlmZiAtLWdpdCBhL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19sb2diLmMgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfbG9nYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0N2UzNTQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfbG9nYi5jCkBAIC0wLDAgKzEsNDkgQEAKKy8qIEAoIylzX2xvZ2IuYyA1LjEgOTMvMDkvMjQgKi8KKy8qCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBDb3B5cmlnaHQgKEMpIDE5OTMgYnkgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIERldmVsb3BlZCBhdCBTdW5Qcm8sIGEgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBidXNpbmVzcy4KKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKKyAqIHNvZnR3YXJlIGlzIGZyZWVseSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoaXMgbm90aWNlCisgKiBpcyBwcmVzZXJ2ZWQuCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorX19GQlNESUQoIiRGcmVlQlNEJCIpOworCisvKgorICogZG91YmxlIGxvZ2IoeCkKKyAqIElFRUUgNzU0IGxvZ2IuIEluY2x1ZGVkIHRvIHBhc3MgSUVFRSB0ZXN0IHN1aXRlLiBOb3QgcmVjb21tZW5kLgorICogVXNlIGlsb2diIGluc3RlYWQuCisgKi8KKworI2luY2x1ZGUgPGZsb2F0Lmg+CisKKyNpbmNsdWRlICJtYXRoLmgiCisjaW5jbHVkZSAibWF0aF9wcml2YXRlLmgiCisKK3N0YXRpYyBjb25zdCBkb3VibGUKK3R3bzU0ID0gMS44MDE0Mzk4NTA5NDgxOTg0MDAwMGUrMTY7CS8qIDQzNTAwMDAwIDAwMDAwMDAwICovCisKK2RvdWJsZQorbG9nYihkb3VibGUgeCkKK3sKKwlpbnQzMl90IGx4LGl4OworCUVYVFJBQ1RfV09SRFMoaXgsbHgseCk7CisJaXggJj0gMHg3ZmZmZmZmZjsJCQkvKiBoaWdoIHx4fCAqLworCWlmKChpeHxseCk9PTApIHJldHVybiAtMS4wL2ZhYnMoeCk7CisJaWYoaXg+PTB4N2ZmMDAwMDApIHJldHVybiB4Kng7CisJaWYoaXg8MHgwMDEwMDAwMCkgeworCQl4ICo9IHR3bzU0OwkJIC8qIGNvbnZlcnQgc3Vibm9ybWFsIHggdG8gbm9ybWFsICovCisJCUdFVF9ISUdIX1dPUkQoaXgseCk7CisJCWl4ICY9IDB4N2ZmZmZmZmY7CisJCXJldHVybiAoZG91YmxlKSAoKGl4Pj4yMCktMTAyMy01NCk7CisJfSBlbHNlCisJCXJldHVybiAoZG91YmxlKSAoKGl4Pj4yMCktMTAyMyk7Cit9CisKKyNpZiAoTERCTF9NQU5UX0RJRyA9PSA1MykKK19fd2Vha19yZWZlcmVuY2UobG9nYiwgbG9nYmwpOworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfbG9nYmYuYyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19sb2diZi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhYjE5MGQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfbG9nYmYuYwpAQCAtMCwwICsxLDQwIEBACisvKiBzX2xvZ2JmLmMgLS0gZmxvYXQgdmVyc2lvbiBvZiBzX2xvZ2IuYy4KKyAqIENvbnZlcnNpb24gdG8gZmxvYXQgYnkgSWFuIExhbmNlIFRheWxvciwgQ3lnbnVzIFN1cHBvcnQsIGlhbkBjeWdudXMuY29tLgorICovCisKKy8qCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBDb3B5cmlnaHQgKEMpIDE5OTMgYnkgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIERldmVsb3BlZCBhdCBTdW5Qcm8sIGEgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBidXNpbmVzcy4KKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKKyAqIHNvZnR3YXJlIGlzIGZyZWVseSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoaXMgbm90aWNlCisgKiBpcyBwcmVzZXJ2ZWQuCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorX19GQlNESUQoIiRGcmVlQlNEJCIpOworCisjaW5jbHVkZSAibWF0aC5oIgorI2luY2x1ZGUgIm1hdGhfcHJpdmF0ZS5oIgorCitzdGF0aWMgY29uc3QgZmxvYXQKK3R3bzI1ID0gMy4zNTU0NDMyMDBlKzA3OwkJLyogMHg0YzAwMDAwMCAqLworCitmbG9hdAorbG9nYmYoZmxvYXQgeCkKK3sKKwlpbnQzMl90IGl4OworCUdFVF9GTE9BVF9XT1JEKGl4LHgpOworCWl4ICY9IDB4N2ZmZmZmZmY7CQkJLyogaGlnaCB8eHwgKi8KKwlpZihpeD09MCkgcmV0dXJuIChmbG9hdCktMS4wL2ZhYnNmKHgpOworCWlmKGl4Pj0weDdmODAwMDAwKSByZXR1cm4geCp4OworCWlmKGl4PDB4MDA4MDAwMDApIHsKKwkJeCAqPSB0d28yNTsJCSAvKiBjb252ZXJ0IHN1Ym5vcm1hbCB4IHRvIG5vcm1hbCAqLworCQlHRVRfRkxPQVRfV09SRChpeCx4KTsKKwkJaXggJj0gMHg3ZmZmZmZmZjsKKwkJcmV0dXJuIChmbG9hdCkgKChpeD4+MjMpLTEyNy0yNSk7CisJfSBlbHNlCisJCXJldHVybiAoZmxvYXQpICgoaXg+PjIzKS0xMjcpOworfQpkaWZmIC0tZ2l0IGEvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2xvZ2JsLmMgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfbG9nYmwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZTg4ZTM2Ci0tLSAvZGV2L251bGwKKysrIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2xvZ2JsLmMKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIEZyb206IEAoIylzX2lsb2diLmMgNS4xIDkzLzA5LzI0CisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBDb3B5cmlnaHQgKEMpIDE5OTMgYnkgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIERldmVsb3BlZCBhdCBTdW5Qcm8sIGEgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBidXNpbmVzcy4KKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKKyAqIHNvZnR3YXJlIGlzIGZyZWVseSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoaXMgbm90aWNlCisgKiBpcyBwcmVzZXJ2ZWQuCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KKworI2lmbmRlZiBsaW50CitzdGF0aWMgY2hhciByY3NpZFtdID0gIiRGcmVlQlNEJCI7CisjZW5kaWYKKworI2luY2x1ZGUgPGZsb2F0Lmg+CisjaW5jbHVkZSA8bGltaXRzLmg+CisjaW5jbHVkZSA8bWF0aC5oPgorCisjaW5jbHVkZSAiZnBtYXRoLmgiCisKK2xvbmcgZG91YmxlCitsb2dibChsb25nIGRvdWJsZSB4KQoreworCXVuaW9uIElFRUVsMmJpdHMgdTsKKwl1bnNpZ25lZCBsb25nIG07CisJaW50IGI7CisKKwl1LmUgPSB4OworCWlmICh1LmJpdHMuZXhwID09IDApIHsKKwkJaWYgKCh1LmJpdHMubWFubCB8IHUuYml0cy5tYW5oKSA9PSAwKSB7CS8qIHggPT0gMCAqLworCQkJdS5iaXRzLnNpZ24gPSAxOworCQkJcmV0dXJuICgxLjBMIC8gdS5lKTsKKwkJfQorCQkvKiBkZW5vcm1hbGl6ZWQgKi8KKwkJaWYgKHUuYml0cy5tYW5oID09IDApIHsKKwkJCW0gPSAxbHUgPDwgKExEQkxfTUFOTF9TSVpFIC0gMSk7CisJCQlmb3IgKGIgPSBMREJMX01BTkhfU0laRTsgISh1LmJpdHMubWFubCAmIG0pOyBtID4+PSAxKQorCQkJCWIrKzsKKwkJfSBlbHNlIHsKKwkJCW0gPSAxbHUgPDwgKExEQkxfTUFOSF9TSVpFIC0gMSk7CisJCQlmb3IgKGIgPSAwOyAhKHUuYml0cy5tYW5oICYgbSk7IG0gPj49IDEpCisJCQkJYisrOworCQl9CisjaWZkZWYgTERCTF9JTVBMSUNJVF9OQklUCisJCWIrKzsKKyNlbmRpZgorCQlyZXR1cm4gKChsb25nIGRvdWJsZSkoTERCTF9NSU5fRVhQIC0gYiAtIDEpKTsKKwl9CisJaWYgKHUuYml0cy5leHAgPCAoTERCTF9NQVhfRVhQIDw8IDEpIC0gMSkJLyogbm9ybWFsICovCisJCXJldHVybiAoKGxvbmcgZG91YmxlKSh1LmJpdHMuZXhwIC0gTERCTF9NQVhfRVhQICsgMSkpOworCWVsc2UJCQkJCQkvKiArLy0gaW5mIG9yIG5hbiAqLworCQlyZXR1cm4gKHggKiB4KTsKK30KZGlmZiAtLWdpdCBhL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19scmludC5jIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2xyaW50LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjdmZjVmZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19scmludC5jCkBAIC0wLDAgKzEsNTggQEAKKy8qLQorICogQ29weXJpZ2h0IChjKSAyMDA1IERhdmlkIFNjaHVsdHogPGRhc0BGcmVlQlNELk9SRz4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorI2luY2x1ZGUgPGZlbnYuaD4KKyNpbmNsdWRlIDxtYXRoLmg+CisKKyNpZm5kZWYgdHlwZQorX19GQlNESUQoIiRGcmVlQlNEJCIpOworI2RlZmluZSB0eXBlCQlkb3VibGUKKyNkZWZpbmUJcm91bmRpdAkJcmludAorI2RlZmluZSBkdHlwZQkJbG9uZworI2RlZmluZQlmbgkJbHJpbnQKKyNlbmRpZgorCisvKgorICogQzk5IHNheXMgd2Ugc2hvdWxkIG5vdCByYWlzZSBhIHNwdXJpb3VzIGluZXhhY3QgZXhjZXB0aW9uIHdoZW4gYW4KKyAqIGludmFsaWQgZXhjZXB0aW9uIGlzIHJhaXNlZC4gIFVuZm9ydHVuYXRlbHksIHRoZSBzZXQgb2YgaW5wdXRzCisgKiB0aGF0IG92ZXJmbG93cyBkZXBlbmRzIG9uIHRoZSByb3VuZGluZyBtb2RlIHdoZW4gJ2R0eXBlJyBoYXMgbW9yZQorICogc2lnbmlmaWNhbnQgYml0cyB0aGFuICd0eXBlJy4gIEhlbmNlLCB3ZSBiZW5kIG92ZXIgYmFja3dhcmRzIGZvciB0aGUKKyAqIHNha2Ugb2YgY29ycmVjdG5lc3M7IGFuIE1EIGltcGxlbWVudGF0aW9uIGNvdWxkIGJlIG1vcmUgZWZmaWNpZW50LgorICovCitkdHlwZQorZm4odHlwZSB4KQoreworCWZlbnZfdCBlbnY7CisJZHR5cGUgZDsKKworCWZlaG9sZGV4Y2VwdCgmZW52KTsKKwlkID0gKGR0eXBlKXJvdW5kaXQoeCk7CisJaWYgKGZldGVzdGV4Y2VwdChGRV9JTlZBTElEKSkKKwkJZmVjbGVhcmV4Y2VwdChGRV9JTkVYQUNUKTsKKwlmZXVwZGF0ZWVudigmZW52KTsKKwlyZXR1cm4gKGQpOworfQpkaWZmIC0tZ2l0IGEvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2xyaW50Zi5jIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2xyaW50Zi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3NTdkZWQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfbHJpbnRmLmMKQEAgLTAsMCArMSw5IEBACisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CitfX0ZCU0RJRCgiJEZyZWVCU0QkIik7CisKKyNkZWZpbmUgdHlwZQkJZmxvYXQKKyNkZWZpbmUJcm91bmRpdAkJcmludGYKKyNkZWZpbmUgZHR5cGUJCWxvbmcKKyNkZWZpbmUJZm4JCWxyaW50ZgorCisjaW5jbHVkZSAic19scmludC5jIgpkaWZmIC0tZ2l0IGEvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2xyaW50bC5jIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2xyaW50bC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5N2I0NDIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfbHJpbnRsLmMKQEAgLTAsMCArMSw5IEBACisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CitfX0ZCU0RJRCgiJEZyZWVCU0QkIik7CisKKyNkZWZpbmUgdHlwZQkJbG9uZyBkb3VibGUKKyNkZWZpbmUJcm91bmRpdAkJcmludGwKKyNkZWZpbmUgZHR5cGUJCWxvbmcKKyNkZWZpbmUJZm4JCWxyaW50bAorCisjaW5jbHVkZSAic19scmludC5jIgpkaWZmIC0tZ2l0IGEvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2xyb3VuZC5jIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2xyb3VuZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjZmY0ODkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfbHJvdW5kLmMKQEAgLTAsMCArMSw2NiBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUgRGF2aWQgU2NodWx0eiA8ZGFzQEZyZWVCU0QuT1JHPgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisjaW5jbHVkZSA8c3lzL2xpbWl0cy5oPgorI2luY2x1ZGUgPGZlbnYuaD4KKyNpbmNsdWRlIDxtYXRoLmg+CisKKyNpZm5kZWYgdHlwZQorX19GQlNESUQoIiRGcmVlQlNEJCIpOworI2RlZmluZSB0eXBlCQlkb3VibGUKKyNkZWZpbmUJcm91bmRpdAkJcm91bmQKKyNkZWZpbmUgZHR5cGUJCWxvbmcKKyNkZWZpbmUJRFRZUEVfTUlOCUxPTkdfTUlOCisjZGVmaW5lCURUWVBFX01BWAlMT05HX01BWAorI2RlZmluZQlmbgkJbHJvdW5kCisjZW5kaWYKKworLyoKKyAqIElmIHR5cGUgaGFzIG1vcmUgcHJlY2lzaW9uIHRoYW4gZHR5cGUsIHRoZSBlbmRwb2ludHMgZHR5cGVfKG1pbnxtYXgpIGFyZQorICogb2YgdGhlIGZvcm0geHh4LjU7IHRoZXkgYXJlICJvdXQgb2YgcmFuZ2UiIGJlY2F1c2UgbHJvdW5kKCkgcm91bmRzIGF3YXkKKyAqIGZyb20gMC4gIE9uIHRoZSBvdGhlciBoYW5kLCBpZiB0eXBlIGhhcyBsZXNzIHByZWNpc2lvbiB0aGFuIGR0eXBlLCB0aGVuCisgKiBhbGwgdmFsdWVzIHRoYXQgYXJlIG91dCBvZiByYW5nZSBhcmUgaW50ZWdyYWwsIHNvIHdlIG1pZ2h0IGFzIHdlbGwgYXNzdW1lCisgKiB0aGF0IGV2ZXJ5dGhpbmcgaXMgaW4gcmFuZ2UuICBBdCBjb21waWxlIHRpbWUsIElOUkFOR0UoeCkgc2hvdWxkIHJlZHVjZSB0bworICogdHdvIGZsb2F0aW5nLXBvaW50IGNvbXBhcmlzb25zIGluIHRoZSBmb3JtZXIgY2FzZSwgb3IgVFJVRSBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBjb25zdCB0eXBlIGR0eXBlX21pbiA9IERUWVBFX01JTiAtIDAuNTsKK3N0YXRpYyBjb25zdCB0eXBlIGR0eXBlX21heCA9IERUWVBFX01BWCArIDAuNTsKKyNkZWZpbmUJSU5SQU5HRSh4KQkoZHR5cGVfbWF4IC0gRFRZUEVfTUFYICE9IDAuNSB8fCBcCisJCQkgKCh4KSA+IGR0eXBlX21pbiAmJiAoeCkgPCBkdHlwZV9tYXgpKQorCitkdHlwZQorZm4odHlwZSB4KQoreworCisJaWYgKElOUkFOR0UoeCkpIHsKKwkJeCA9IHJvdW5kaXQoeCk7CisJCXJldHVybiAoKGR0eXBlKXgpOworCX0gZWxzZSB7CisJCWZlcmFpc2VleGNlcHQoRkVfSU5WQUxJRCk7CisJCXJldHVybiAoRFRZUEVfTUFYKTsKKwl9Cit9CmRpZmYgLS1naXQgYS9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfbHJvdW5kZi5jIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2xyb3VuZGYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMjRmZTdmCi0tLSAvZGV2L251bGwKKysrIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2xyb3VuZGYuYwpAQCAtMCwwICsxLDExIEBACisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CitfX0ZCU0RJRCgiJEZyZWVCU0QkIik7CisKKyNkZWZpbmUgdHlwZQkJZmxvYXQKKyNkZWZpbmUJcm91bmRpdAkJcm91bmRmCisjZGVmaW5lIGR0eXBlCQlsb25nCisjZGVmaW5lCURUWVBFX01JTglMT05HX01JTgorI2RlZmluZQlEVFlQRV9NQVgJTE9OR19NQVgKKyNkZWZpbmUJZm4JCWxyb3VuZGYKKworI2luY2x1ZGUgInNfbHJvdW5kLmMiCmRpZmYgLS1naXQgYS9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfbHJvdW5kbC5jIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2xyb3VuZGwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDEwODI3Ci0tLSAvZGV2L251bGwKKysrIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX2xyb3VuZGwuYwpAQCAtMCwwICsxLDExIEBACisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CitfX0ZCU0RJRCgiJEZyZWVCU0QkIik7CisKKyNkZWZpbmUgdHlwZQkJbG9uZyBkb3VibGUKKyNkZWZpbmUJcm91bmRpdAkJcm91bmRsCisjZGVmaW5lIGR0eXBlCQlsb25nCisjZGVmaW5lCURUWVBFX01JTglMT05HX01JTgorI2RlZmluZQlEVFlQRV9NQVgJTE9OR19NQVgKKyNkZWZpbmUJZm4JCWxyb3VuZGwKKworI2luY2x1ZGUgInNfbHJvdW5kLmMiCmRpZmYgLS1naXQgYS9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfbW9kZi5jIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX21vZGYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYjEzMTkxCi0tLSAvZGV2L251bGwKKysrIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX21vZGYuYwpAQCAtMCwwICsxLDc5IEBACisvKiBAKCMpc19tb2RmLmMgNS4xIDkzLzA5LzI0ICovCisvKgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogQ29weXJpZ2h0IChDKSAxOTkzIGJ5IFN1biBNaWNyb3N5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBEZXZlbG9wZWQgYXQgU3VuUHJvLCBhIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gYnVzaW5lc3MuCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCisgKiBzb2Z0d2FyZSBpcyBmcmVlbHkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGlzIG5vdGljZQorICogaXMgcHJlc2VydmVkLgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCisKKyNpZm5kZWYgbGludAorc3RhdGljIGNoYXIgcmNzaWRbXSA9ICIkRnJlZUJTRCQiOworI2VuZGlmCisKKy8qCisgKiBtb2RmKGRvdWJsZSB4LCBkb3VibGUgKmlwdHIpCisgKiByZXR1cm4gZnJhY3Rpb24gcGFydCBvZiB4LCBhbmQgcmV0dXJuIHgncyBpbnRlZ3JhbCBwYXJ0IGluICppcHRyLgorICogTWV0aG9kOgorICoJQml0IHR3aWRkbGluZy4KKyAqCisgKiBFeGNlcHRpb246CisgKglObyBleGNlcHRpb24uCisgKi8KKworI2luY2x1ZGUgIm1hdGguaCIKKyNpbmNsdWRlICJtYXRoX3ByaXZhdGUuaCIKKworc3RhdGljIGNvbnN0IGRvdWJsZSBvbmUgPSAxLjA7CisKK2RvdWJsZQorbW9kZihkb3VibGUgeCwgZG91YmxlICppcHRyKQoreworCWludDMyX3QgaTAsaTEsajA7CisJdV9pbnQzMl90IGk7CisJRVhUUkFDVF9XT1JEUyhpMCxpMSx4KTsKKwlqMCA9ICgoaTA+PjIwKSYweDdmZiktMHgzZmY7CS8qIGV4cG9uZW50IG9mIHggKi8KKwlpZihqMDwyMCkgewkJCS8qIGludGVnZXIgcGFydCBpbiBoaWdoIHggKi8KKwkgICAgaWYoajA8MCkgewkJCS8qIHx4fDwxICovCisJICAgICAgICBJTlNFUlRfV09SRFMoKmlwdHIsaTAmMHg4MDAwMDAwMCwwKTsJLyogKmlwdHIgPSArLTAgKi8KKwkJcmV0dXJuIHg7CisJICAgIH0gZWxzZSB7CisJCWkgPSAoMHgwMDBmZmZmZik+PmowOworCQlpZigoKGkwJmkpfGkxKT09MCkgewkJLyogeCBpcyBpbnRlZ3JhbCAqLworCQkgICAgdV9pbnQzMl90IGhpZ2g7CisJCSAgICAqaXB0ciA9IHg7CisJCSAgICBHRVRfSElHSF9XT1JEKGhpZ2gseCk7CisJCSAgICBJTlNFUlRfV09SRFMoeCxoaWdoJjB4ODAwMDAwMDAsMCk7CS8qIHJldHVybiArLTAgKi8KKwkJICAgIHJldHVybiB4OworCQl9IGVsc2UgeworCQkgICAgSU5TRVJUX1dPUkRTKCppcHRyLGkwJih+aSksMCk7CisJCSAgICByZXR1cm4geCAtICppcHRyOworCQl9CisJICAgIH0KKwl9IGVsc2UgaWYgKGowPjUxKSB7CQkvKiBubyBmcmFjdGlvbiBwYXJ0ICovCisJICAgIHVfaW50MzJfdCBoaWdoOworCSAgICBpZiAoajAgPT0gMHg0MDApIHsJCS8qIGluZi9OYU4gKi8KKwkJKmlwdHIgPSB4OworCQlyZXR1cm4gMC4wIC8geDsKKwkgICAgfQorCSAgICAqaXB0ciA9IHgqb25lOworCSAgICBHRVRfSElHSF9XT1JEKGhpZ2gseCk7CisJICAgIElOU0VSVF9XT1JEUyh4LGhpZ2gmMHg4MDAwMDAwMCwwKTsJLyogcmV0dXJuICstMCAqLworCSAgICByZXR1cm4geDsKKwl9IGVsc2UgewkJCS8qIGZyYWN0aW9uIHBhcnQgaW4gbG93IHggKi8KKwkgICAgaSA9ICgodV9pbnQzMl90KSgweGZmZmZmZmZmKSk+PihqMC0yMCk7CisJICAgIGlmKChpMSZpKT09MCkgeyAJCS8qIHggaXMgaW50ZWdyYWwgKi8KKwkgICAgICAgIHVfaW50MzJfdCBoaWdoOworCQkqaXB0ciA9IHg7CisJCUdFVF9ISUdIX1dPUkQoaGlnaCx4KTsKKwkJSU5TRVJUX1dPUkRTKHgsaGlnaCYweDgwMDAwMDAwLDApOwkvKiByZXR1cm4gKy0wICovCisJCXJldHVybiB4OworCSAgICB9IGVsc2UgeworCSAgICAgICAgSU5TRVJUX1dPUkRTKCppcHRyLGkwLGkxJih+aSkpOworCQlyZXR1cm4geCAtICppcHRyOworCSAgICB9CisJfQorfQpkaWZmIC0tZ2l0IGEvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX21vZGZmLmMgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfbW9kZmYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNjIyNTljCi0tLSAvZGV2L251bGwKKysrIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX21vZGZmLmMKQEAgLTAsMCArMSw1NyBAQAorLyogc19tb2RmZi5jIC0tIGZsb2F0IHZlcnNpb24gb2Ygc19tb2RmLmMuCisgKiBDb252ZXJzaW9uIHRvIGZsb2F0IGJ5IElhbiBMYW5jZSBUYXlsb3IsIEN5Z251cyBTdXBwb3J0LCBpYW5AY3lnbnVzLmNvbS4KKyAqLworCisvKgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogQ29weXJpZ2h0IChDKSAxOTkzIGJ5IFN1biBNaWNyb3N5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBEZXZlbG9wZWQgYXQgU3VuUHJvLCBhIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gYnVzaW5lc3MuCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCisgKiBzb2Z0d2FyZSBpcyBmcmVlbHkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGlzIG5vdGljZQorICogaXMgcHJlc2VydmVkLgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJTRCQiKTsKKworI2luY2x1ZGUgIm1hdGguaCIKKyNpbmNsdWRlICJtYXRoX3ByaXZhdGUuaCIKKworc3RhdGljIGNvbnN0IGZsb2F0IG9uZSA9IDEuMDsKKworZmxvYXQKK21vZGZmKGZsb2F0IHgsIGZsb2F0ICppcHRyKQoreworCWludDMyX3QgaTAsajA7CisJdV9pbnQzMl90IGk7CisJR0VUX0ZMT0FUX1dPUkQoaTAseCk7CisJajAgPSAoKGkwPj4yMykmMHhmZiktMHg3ZjsJLyogZXhwb25lbnQgb2YgeCAqLworCWlmKGowPDIzKSB7CQkJLyogaW50ZWdlciBwYXJ0IGluIHggKi8KKwkgICAgaWYoajA8MCkgewkJCS8qIHx4fDwxICovCisJICAgICAgICBTRVRfRkxPQVRfV09SRCgqaXB0cixpMCYweDgwMDAwMDAwKTsJLyogKmlwdHIgPSArLTAgKi8KKwkJcmV0dXJuIHg7CisJICAgIH0gZWxzZSB7CisJCWkgPSAoMHgwMDdmZmZmZik+PmowOworCQlpZigoaTAmaSk9PTApIHsJCQkvKiB4IGlzIGludGVncmFsICovCisJCSAgICB1X2ludDMyX3QgaXg7CisJCSAgICAqaXB0ciA9IHg7CisJCSAgICBHRVRfRkxPQVRfV09SRChpeCx4KTsKKwkJICAgIFNFVF9GTE9BVF9XT1JEKHgsaXgmMHg4MDAwMDAwMCk7CS8qIHJldHVybiArLTAgKi8KKwkJICAgIHJldHVybiB4OworCQl9IGVsc2UgeworCQkgICAgU0VUX0ZMT0FUX1dPUkQoKmlwdHIsaTAmKH5pKSk7CisJCSAgICByZXR1cm4geCAtICppcHRyOworCQl9CisJICAgIH0KKwl9IGVsc2UgewkJCS8qIG5vIGZyYWN0aW9uIHBhcnQgKi8KKwkgICAgdV9pbnQzMl90IGl4OworCSAgICAqaXB0ciA9IHgqb25lOworCSAgICBpZiAoeCAhPSB4KQkJCS8qIE5hTiAqLworCQlyZXR1cm4geDsKKwkgICAgR0VUX0ZMT0FUX1dPUkQoaXgseCk7CisJICAgIFNFVF9GTE9BVF9XT1JEKHgsaXgmMHg4MDAwMDAwMCk7CS8qIHJldHVybiArLTAgKi8KKwkgICAgcmV0dXJuIHg7CisJfQorfQpkaWZmIC0tZ2l0IGEvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX21vZGZsLmMgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfbW9kZmwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZGNkZjg2Ci0tLSAvZGV2L251bGwKKysrIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX21vZGZsLmMKQEAgLTAsMCArMSwxMDEgQEAKKy8qLQorICogQ29weXJpZ2h0IChjKSAyMDA3IERhdmlkIFNjaHVsdHogPGRhc0BGcmVlQlNELk9SRz4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKgorICogRGVyaXZlZCBmcm9tIHNfbW9kZi5jLCB3aGljaCBoYXMgdGhlIGZvbGxvd2luZyBDb3B5cmlnaHQ6CisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBDb3B5cmlnaHQgKEMpIDE5OTMgYnkgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIERldmVsb3BlZCBhdCBTdW5Qcm8sIGEgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBidXNpbmVzcy4KKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKKyAqIHNvZnR3YXJlIGlzIGZyZWVseSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoaXMgbm90aWNlCisgKiBpcyBwcmVzZXJ2ZWQuCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKgorICogJEZyZWVCU0QkCisgKi8KKworI2luY2x1ZGUgPGZsb2F0Lmg+CisjaW5jbHVkZSA8bWF0aC5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorCisjaW5jbHVkZSAiZnBtYXRoLmgiCisKKyNpZiBMREJMX01BTkxfU0laRSA+IDMyCisjZGVmaW5lCU1BU0sJKCh1aW50NjRfdCktMSkKKyNlbHNlCisjZGVmaW5lCU1BU0sJKCh1aW50MzJfdCktMSkKKyNlbmRpZgorLyogUmV0dXJuIHRoZSBsYXN0IG4gYml0cyBvZiBhIHdvcmQsIHJlcHJlc2VudGluZyB0aGUgZnJhY3Rpb25hbCBwYXJ0LiAqLworI2RlZmluZQlHRVRGUkFDKGJpdHMsIG4pCSgoYml0cykgJiB+KE1BU0sgPDwgKG4pKSkKKy8qIFRoZSBudW1iZXIgb2YgZnJhY3Rpb24gYml0cyBpbiBtYW5oLCBub3QgY291bnRpbmcgdGhlIGludGVnZXIgYml0ICovCisjZGVmaW5lCUhJQklUUwkoTERCTF9NQU5UX0RJRyAtIExEQkxfTUFOTF9TSVpFKQorCitzdGF0aWMgY29uc3QgbG9uZyBkb3VibGUgemVyb1tdID0geyAwLjBMLCAtMC4wTCB9OworCitsb25nIGRvdWJsZQorbW9kZmwobG9uZyBkb3VibGUgeCwgbG9uZyBkb3VibGUgKmlwdHIpCit7CisJdW5pb24gSUVFRWwyYml0cyB1eDsKKwlpbnQgZTsKKworCXV4LmUgPSB4OworCWUgPSB1eC5iaXRzLmV4cCAtIExEQkxfTUFYX0VYUCArIDE7CisJaWYgKGUgPCBISUJJVFMpIHsJCQkvKiBJbnRlZ2VyIHBhcnQgaXMgaW4gbWFuaC4gKi8KKwkJaWYgKGUgPCAwKSB7CQkJLyogfHh8PDEgKi8KKwkJCSppcHRyID0gemVyb1t1eC5iaXRzLnNpZ25dOworCQkJcmV0dXJuICh4KTsKKwkJfSBlbHNlIHsKKwkJCWlmICgoR0VURlJBQyh1eC5iaXRzLm1hbmgsIEhJQklUUyAtIDEgLSBlKSB8CisJCQkgICAgIHV4LmJpdHMubWFubCkgPT0gMCkgewkvKiBYIGlzIGFuIGludGVnZXIuICovCisJCQkJKmlwdHIgPSB4OworCQkJCXJldHVybiAoemVyb1t1eC5iaXRzLnNpZ25dKTsKKwkJCX0gZWxzZSB7CisJCQkJLyogQ2xlYXIgYWxsIGJ1dCB0aGUgdG9wIGUrMSBiaXRzLiAqLworCQkJCXV4LmJpdHMubWFuaCA+Pj0gSElCSVRTIC0gMSAtIGU7CisJCQkJdXguYml0cy5tYW5oIDw8PSBISUJJVFMgLSAxIC0gZTsKKwkJCQl1eC5iaXRzLm1hbmwgPSAwOworCQkJCSppcHRyID0gdXguZTsKKwkJCQlyZXR1cm4gKHggLSB1eC5lKTsKKwkJCX0KKwkJfQorCX0gZWxzZSBpZiAoZSA+PSBMREJMX01BTlRfRElHIC0gMSkgewkvKiB4IGhhcyBubyBmcmFjdGlvbiBwYXJ0LiAqLworCQkqaXB0ciA9IHg7CisJCWlmICh4ICE9IHgpCQkJLyogSGFuZGxlIE5hTnMuICovCisJCQlyZXR1cm4gKHgpOworCQlyZXR1cm4gKHplcm9bdXguYml0cy5zaWduXSk7CisJfSBlbHNlIHsJCQkJLyogRnJhY3Rpb24gcGFydCBpcyBpbiBtYW5sLiAqLworCQlpZiAoR0VURlJBQyh1eC5iaXRzLm1hbmwsIExEQkxfTUFOVF9ESUcgLSAxIC0gZSkgPT0gMCkgeworCQkJLyogeCBpcyBpbnRlZ3JhbC4gKi8KKwkJCSppcHRyID0geDsKKwkJCXJldHVybiAoemVyb1t1eC5iaXRzLnNpZ25dKTsKKwkJfSBlbHNlIHsKKwkJCS8qIENsZWFyIGFsbCBidXQgdGhlIHRvcCBlKzEgYml0cy4gKi8KKwkJCXV4LmJpdHMubWFubCA+Pj0gTERCTF9NQU5UX0RJRyAtIDEgLSBlOworCQkJdXguYml0cy5tYW5sIDw8PSBMREJMX01BTlRfRElHIC0gMSAtIGU7CisJCQkqaXB0ciA9IHV4LmU7CisJCQlyZXR1cm4gKHggLSB1eC5lKTsKKwkJfQorCX0KK30KZGlmZiAtLWdpdCBhL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19uYW4uYyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19uYW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OTBmNDcxCi0tLSAvZGV2L251bGwKKysrIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX25hbi5jCkBAIC0wLDAgKzEsMTEwIEBACisvKi0KKyAqIENvcHlyaWdodCAoYykgMjAwNyBEYXZpZCBTY2h1bHR6CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKiAkRnJlZUJTRCQKKyAqLworCisjaW5jbHVkZSA8c3lzL2VuZGlhbi5oPgorI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8ZmxvYXQuaD4KKyNpbmNsdWRlIDxtYXRoLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8c3RyaW5ncy5oPgorCisjaW5jbHVkZSAibWF0aF9wcml2YXRlLmgiCisKKy8qCisgKiBTY2FuIGEgc3RyaW5nIG9mIGhleGFkZWNpbWFsIGRpZ2l0cyAodGhlIGZvcm1hdCBuYW4oMykgZXhwZWN0cykgYW5kCisgKiBtYWtlIGEgYml0IGFycmF5ICh1c2luZyB0aGUgbG9jYWwgZW5kaWFubmVzcykuIFdlIHN0b3Agd2hlbiB3ZQorICogZW5jb3VudGVyIGFuIGludmFsaWQgY2hhcmFjdGVyLCBOVUwsIGV0Yy4gIElmIHdlIG92ZXJmbG93LCB3ZSBkbworICogdGhlIHNhbWUgYXMgZ2NjJ3MgX19idWlsdGluX25hbigpLCBuYW1lbHksIGRpc2NhcmQgdGhlIGhpZ2ggb3JkZXIgYml0cy4KKyAqCisgKiBUaGUgZm9ybWF0IHRoaXMgcm91dGluZSBhY2NlcHRzIG5lZWRzIHRvIGJlIGNvbXBhdGlibGUgd2l0aCB3aGF0IGlzIHVzZWQKKyAqIGluIGNvbnRyaWIvZ2R0b2EvaGV4bmFuLmMgKGZvciBzdHJ0b2Qvc2NhbmYpIGFuZCB3aGF0IGlzIHVzZWQgaW4KKyAqIF9fYnVpbHRpbl9uYW4oKS4gSW4gZmFjdCwgd2UncmUgb25seSAxMDAlIGNvbXBhdGlibGUgZm9yIHN0cmluZ3Mgd2UKKyAqIGNvbnNpZGVyIHZhbGlkLCBzbyB3ZSBtaWdodCBiZSB2aW9sYXRpbmcgdGhlIEMgc3RhbmRhcmQuIEJ1dCBpdCdzCisgKiBpbXBvc3NpYmxlIHRvIHVzZSBuYW4oMykgcG9ydGFibHkgYW55d2F5LCBzbyB0aGlzIHNlZW1zIGdvb2QgZW5vdWdoLgorICovCit2b2lkCitfc2Nhbl9uYW4odWludDMyX3QgKndvcmRzLCBpbnQgbnVtX3dvcmRzLCBjb25zdCBjaGFyICpzKQoreworCWludCBzaTsJCS8qIGluZGV4IGludG8gcyAqLworCWludCBiaXRwb3M7CS8qIGluZGV4IGludG8gd29yZHMgKGluIGJpdHMpICovCisKKwliemVybyh3b3JkcywgbnVtX3dvcmRzICogc2l6ZW9mKHVpbnQzMl90KSk7CisKKwkvKiBBbGxvdyBhIGxlYWRpbmcgJzB4Jy4gKEl0J3MgZXhwZWN0ZWQsIGJ1dCByZWR1bmRhbnQuKSAqLworCWlmIChzWzBdID09ICcwJyAmJiAoc1sxXSA9PSAneCcgfHwgc1sxXSA9PSAnWCcpKQorCQlzICs9IDI7CisKKwkvKiBTY2FuIGZvcndhcmRzIGluIHRoZSBzdHJpbmcsIGxvb2tpbmcgZm9yIHRoZSBlbmQgb2YgdGhlIHNlcXVlbmNlLiAqLworCWZvciAoc2kgPSAwOyBpc3hkaWdpdChzW3NpXSk7IHNpKyspCisJCTsKKworCS8qIFNjYW4gYmFja3dhcmRzLCBmaWxsaW5nIGluIHRoZSBiaXRzIGluIHdvcmRzW10gYXMgd2UgZ28uICovCisjaWYgX0JZVEVfT1JERVIgPT0gX0xJVFRMRV9FTkRJQU4KKwlmb3IgKGJpdHBvcyA9IDA7IGJpdHBvcyA8IDMyICogbnVtX3dvcmRzOyBiaXRwb3MgKz0gNCkgeworI2Vsc2UKKwlmb3IgKGJpdHBvcyA9IDMyICogbnVtX3dvcmRzIC0gNDsgYml0cG9zID49IDA7IGJpdHBvcyAtPSA0KSB7CisjZW5kaWYKKwkJaWYgKC0tc2kgPCAwKQorCQkJYnJlYWs7CisJCXdvcmRzW2JpdHBvcyAvIDMyXSB8PSBkaWdpdHRvaW50KHNbc2ldKSA8PCAoYml0cG9zICUgMzIpOworCX0KK30KKworZG91YmxlCituYW4oY29uc3QgY2hhciAqcykKK3sKKwl1bmlvbiB7CisJCWRvdWJsZSBkOworCQl1aW50MzJfdCBiaXRzWzJdOworCX0gdTsKKworCV9zY2FuX25hbih1LmJpdHMsIDIsIHMpOworI2lmIF9CWVRFX09SREVSID09IF9MSVRUTEVfRU5ESUFOCisJdS5iaXRzWzFdIHw9IDB4N2ZmODAwMDA7CisjZWxzZQorCXUuYml0c1swXSB8PSAweDdmZjgwMDAwOworI2VuZGlmCisJcmV0dXJuICh1LmQpOworfQorCitmbG9hdAorbmFuZihjb25zdCBjaGFyICpzKQoreworCXVuaW9uIHsKKwkJZmxvYXQgZjsKKwkJdWludDMyX3QgYml0c1sxXTsKKwl9IHU7CisKKwlfc2Nhbl9uYW4odS5iaXRzLCAxLCBzKTsKKwl1LmJpdHNbMF0gfD0gMHg3ZmMwMDAwMDsKKwlyZXR1cm4gKHUuZik7Cit9CisKKyNpZiAoTERCTF9NQU5UX0RJRyA9PSA1MykKK19fd2Vha19yZWZlcmVuY2UobmFuLCBuYW5sKTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX25lYXJieWludC5jIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX25lYXJieWludC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2M2Y4ZDcKLS0tIC9kZXYvbnVsbAorKysgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfbmVhcmJ5aW50LmMKQEAgLTAsMCArMSw1OSBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMDQgRGF2aWQgU2NodWx0eiA8ZGFzQEZyZWVCU0QuT1JHPgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CitfX0ZCU0RJRCgiJEZyZWVCU0QkIik7CisKKyNpbmNsdWRlIDxmZW52Lmg+CisjaW5jbHVkZSA8bWF0aC5oPgorCisvKgorICogV2Ugc2F2ZSBhbmQgcmVzdG9yZSB0aGUgZmxvYXRpbmctcG9pbnQgZW52aXJvbm1lbnQgdG8gYXZvaWQgcmFpc2luZworICogYW4gaW5leGFjdCBleGNlcHRpb24uICBXZSBjYW4gZ2V0IGF3YXkgd2l0aCB1c2luZyBmZXNldGVudigpCisgKiBpbnN0ZWFkIG9mIGZlY2xlYXJleGNlcHQoKS9mZXVwZGF0ZWVudigpIHRvIHJlc3RvcmUgdGhlIGVudmlyb25tZW50CisgKiBiZWNhdXNlIHRoZSBvbmx5IGV4Y2VwdGlvbiBkZWZpbmVkIGZvciByaW50KCkgaXMgb3ZlcmZsb3csIGFuZAorICogcm91bmRpbmcgY2FuJ3Qgb3ZlcmZsb3cgYXMgbG9uZyBhcyBlbWF4ID49IHAuCisgKgorICogVGhlIHZvbGF0aWxlIGtleXdvcmQgaXMgbmVlZGVkIGJlbG93IGJlY2F1c2UgY2xhbmcgaW5jb3JyZWN0bHkgYXNzdW1lcworICogdGhhdCByaW50IHdvbid0IHJhaXNlIGFueSBmbG9hdGluZy1wb2ludCBleGNlcHRpb25zLiBEZWNsYXJpbmcgcmV0IHZvbGF0aWxlCisgKiBpcyBzdWZmaWNpZW50IHRvIHRyaWNrIHRoZSBjb21waWxlciBpbnRvIGRvaW5nIHRoZSByaWdodCB0aGluZy4KKyAqLworI2RlZmluZQlERUNMKHR5cGUsIGZuLCByaW50KQlcCit0eXBlCQkJCVwKK2ZuKHR5cGUgeCkJCQlcCit7CQkJCVwKKwl2b2xhdGlsZSB0eXBlIHJldDsJXAorCWZlbnZfdCBlbnY7CQlcCisJCQkJXAorCWZlZ2V0ZW52KCZlbnYpOwkJXAorCXJldCA9IHJpbnQoeCk7CQlcCisJZmVzZXRlbnYoJmVudik7CQlcCisJcmV0dXJuIChyZXQpOwkJXAorfQorCitERUNMKGRvdWJsZSwgbmVhcmJ5aW50LCByaW50KQorREVDTChmbG9hdCwgbmVhcmJ5aW50ZiwgcmludGYpCitERUNMKGxvbmcgZG91YmxlLCBuZWFyYnlpbnRsLCByaW50bCkKZGlmZiAtLWdpdCBhL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19uZXh0YWZ0ZXIuYyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19uZXh0YWZ0ZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MmRkMjFjCi0tLSAvZGV2L251bGwKKysrIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX25leHRhZnRlci5jCkBAIC0wLDAgKzEsODMgQEAKKy8qIEAoIylzX25leHRhZnRlci5jIDUuMSA5My8wOS8yNCAqLworLyoKKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIENvcHlyaWdodCAoQykgMTk5MyBieSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogRGV2ZWxvcGVkIGF0IFN1blBybywgYSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGJ1c2luZXNzLgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcworICogc29mdHdhcmUgaXMgZnJlZWx5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhpcyBub3RpY2UKKyAqIGlzIHByZXNlcnZlZC4KKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CitfX0ZCU0RJRCgiJEZyZWVCU0QkIik7CisKKy8qIElFRUUgZnVuY3Rpb25zCisgKgluZXh0YWZ0ZXIoeCx5KQorICoJcmV0dXJuIHRoZSBuZXh0IG1hY2hpbmUgZmxvYXRpbmctcG9pbnQgbnVtYmVyIG9mIHggaW4gdGhlCisgKglkaXJlY3Rpb24gdG93YXJkIHkuCisgKiAgIFNwZWNpYWwgY2FzZXM6CisgKi8KKworI2luY2x1ZGUgPGZsb2F0Lmg+CisKKyNpbmNsdWRlICJtYXRoLmgiCisjaW5jbHVkZSAibWF0aF9wcml2YXRlLmgiCisKK2RvdWJsZQorbmV4dGFmdGVyKGRvdWJsZSB4LCBkb3VibGUgeSkKK3sKKwl2b2xhdGlsZSBkb3VibGUgdDsKKwlpbnQzMl90IGh4LGh5LGl4LGl5OworCXVfaW50MzJfdCBseCxseTsKKworCUVYVFJBQ1RfV09SRFMoaHgsbHgseCk7CisJRVhUUkFDVF9XT1JEUyhoeSxseSx5KTsKKwlpeCA9IGh4JjB4N2ZmZmZmZmY7CQkvKiB8eHwgKi8KKwlpeSA9IGh5JjB4N2ZmZmZmZmY7CQkvKiB8eXwgKi8KKworCWlmKCgoaXg+PTB4N2ZmMDAwMDApJiYoKGl4LTB4N2ZmMDAwMDApfGx4KSE9MCkgfHwgICAvKiB4IGlzIG5hbiAqLworCSAgICgoaXk+PTB4N2ZmMDAwMDApJiYoKGl5LTB4N2ZmMDAwMDApfGx5KSE9MCkpICAgICAvKiB5IGlzIG5hbiAqLworCSAgIHJldHVybiB4K3k7CisJaWYoeD09eSkgcmV0dXJuIHk7CQkvKiB4PXksIHJldHVybiB5ICovCisJaWYoKGl4fGx4KT09MCkgewkJCS8qIHggPT0gMCAqLworCSAgICBJTlNFUlRfV09SRFMoeCxoeSYweDgwMDAwMDAwLDEpOwkvKiByZXR1cm4gKy1taW5zdWJub3JtYWwgKi8KKwkgICAgdCA9IHgqeDsKKwkgICAgaWYodD09eCkgcmV0dXJuIHQ7IGVsc2UgcmV0dXJuIHg7CS8qIHJhaXNlIHVuZGVyZmxvdyBmbGFnICovCisJfQorCWlmKGh4Pj0wKSB7CQkJCS8qIHggPiAwICovCisJICAgIGlmKGh4Pmh5fHwoKGh4PT1oeSkmJihseD5seSkpKSB7CS8qIHggPiB5LCB4IC09IHVscCAqLworCQlpZihseD09MCkgaHggLT0gMTsKKwkJbHggLT0gMTsKKwkgICAgfSBlbHNlIHsJCQkJLyogeCA8IHksIHggKz0gdWxwICovCisJCWx4ICs9IDE7CisJCWlmKGx4PT0wKSBoeCArPSAxOworCSAgICB9CisJfSBlbHNlIHsJCQkJLyogeCA8IDAgKi8KKwkgICAgaWYoaHk+PTB8fGh4Pmh5fHwoKGh4PT1oeSkmJihseD5seSkpKXsvKiB4IDwgeSwgeCAtPSB1bHAgKi8KKwkJaWYobHg9PTApIGh4IC09IDE7CisJCWx4IC09IDE7CisJICAgIH0gZWxzZSB7CQkJCS8qIHggPiB5LCB4ICs9IHVscCAqLworCQlseCArPSAxOworCQlpZihseD09MCkgaHggKz0gMTsKKwkgICAgfQorCX0KKwloeSA9IGh4JjB4N2ZmMDAwMDA7CisJaWYoaHk+PTB4N2ZmMDAwMDApIHJldHVybiB4K3g7CS8qIG92ZXJmbG93ICAqLworCWlmKGh5PDB4MDAxMDAwMDApIHsJCS8qIHVuZGVyZmxvdyAqLworCSAgICB0ID0geCp4OworCSAgICBpZih0IT14KSB7CQkvKiByYWlzZSB1bmRlcmZsb3cgZmxhZyAqLworCSAgICAgICAgSU5TRVJUX1dPUkRTKHksaHgsbHgpOworCQlyZXR1cm4geTsKKwkgICAgfQorCX0KKwlJTlNFUlRfV09SRFMoeCxoeCxseCk7CisJcmV0dXJuIHg7Cit9CisKKyNpZiAoTERCTF9NQU5UX0RJRyA9PSA1MykKK19fd2Vha19yZWZlcmVuY2UobmV4dGFmdGVyLCBuZXh0dG93YXJkKTsKK19fd2Vha19yZWZlcmVuY2UobmV4dGFmdGVyLCBuZXh0dG93YXJkbCk7CitfX3dlYWtfcmVmZXJlbmNlKG5leHRhZnRlciwgbmV4dGFmdGVybCk7CisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19uZXh0YWZ0ZXJmLmMgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfbmV4dGFmdGVyZi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2ZTIxZWYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfbmV4dGFmdGVyZi5jCkBAIC0wLDAgKzEsNjYgQEAKKy8qIHNfbmV4dGFmdGVyZi5jIC0tIGZsb2F0IHZlcnNpb24gb2Ygc19uZXh0YWZ0ZXIuYy4KKyAqIENvbnZlcnNpb24gdG8gZmxvYXQgYnkgSWFuIExhbmNlIFRheWxvciwgQ3lnbnVzIFN1cHBvcnQsIGlhbkBjeWdudXMuY29tLgorICovCisKKy8qCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBDb3B5cmlnaHQgKEMpIDE5OTMgYnkgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIERldmVsb3BlZCBhdCBTdW5Qcm8sIGEgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBidXNpbmVzcy4KKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKKyAqIHNvZnR3YXJlIGlzIGZyZWVseSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoaXMgbm90aWNlCisgKiBpcyBwcmVzZXJ2ZWQuCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorX19GQlNESUQoIiRGcmVlQlNEJCIpOworCisjaW5jbHVkZSAibWF0aC5oIgorI2luY2x1ZGUgIm1hdGhfcHJpdmF0ZS5oIgorCitmbG9hdAorbmV4dGFmdGVyZihmbG9hdCB4LCBmbG9hdCB5KQoreworCXZvbGF0aWxlIGZsb2F0IHQ7CisJaW50MzJfdCBoeCxoeSxpeCxpeTsKKworCUdFVF9GTE9BVF9XT1JEKGh4LHgpOworCUdFVF9GTE9BVF9XT1JEKGh5LHkpOworCWl4ID0gaHgmMHg3ZmZmZmZmZjsJCS8qIHx4fCAqLworCWl5ID0gaHkmMHg3ZmZmZmZmZjsJCS8qIHx5fCAqLworCisJaWYoKGl4PjB4N2Y4MDAwMDApIHx8ICAgLyogeCBpcyBuYW4gKi8KKwkgICAoaXk+MHg3ZjgwMDAwMCkpICAgICAvKiB5IGlzIG5hbiAqLworCSAgIHJldHVybiB4K3k7CisJaWYoeD09eSkgcmV0dXJuIHk7CQkvKiB4PXksIHJldHVybiB5ICovCisJaWYoaXg9PTApIHsJCQkJLyogeCA9PSAwICovCisJICAgIFNFVF9GTE9BVF9XT1JEKHgsKGh5JjB4ODAwMDAwMDApfDEpOy8qIHJldHVybiArLW1pbnN1Ym5vcm1hbCAqLworCSAgICB0ID0geCp4OworCSAgICBpZih0PT14KSByZXR1cm4gdDsgZWxzZSByZXR1cm4geDsJLyogcmFpc2UgdW5kZXJmbG93IGZsYWcgKi8KKwl9CisJaWYoaHg+PTApIHsJCQkJLyogeCA+IDAgKi8KKwkgICAgaWYoaHg+aHkpIHsJCQkJLyogeCA+IHksIHggLT0gdWxwICovCisJCWh4IC09IDE7CisJICAgIH0gZWxzZSB7CQkJCS8qIHggPCB5LCB4ICs9IHVscCAqLworCQloeCArPSAxOworCSAgICB9CisJfSBlbHNlIHsJCQkJLyogeCA8IDAgKi8KKwkgICAgaWYoaHk+PTB8fGh4Pmh5KXsJCQkvKiB4IDwgeSwgeCAtPSB1bHAgKi8KKwkJaHggLT0gMTsKKwkgICAgfSBlbHNlIHsJCQkJLyogeCA+IHksIHggKz0gdWxwICovCisJCWh4ICs9IDE7CisJICAgIH0KKwl9CisJaHkgPSBoeCYweDdmODAwMDAwOworCWlmKGh5Pj0weDdmODAwMDAwKSByZXR1cm4geCt4OwkvKiBvdmVyZmxvdyAgKi8KKwlpZihoeTwweDAwODAwMDAwKSB7CQkvKiB1bmRlcmZsb3cgKi8KKwkgICAgdCA9IHgqeDsKKwkgICAgaWYodCE9eCkgewkJLyogcmFpc2UgdW5kZXJmbG93IGZsYWcgKi8KKwkgICAgICAgIFNFVF9GTE9BVF9XT1JEKHksaHgpOworCQlyZXR1cm4geTsKKwkgICAgfQorCX0KKwlTRVRfRkxPQVRfV09SRCh4LGh4KTsKKwlyZXR1cm4geDsKK30KZGlmZiAtLWdpdCBhL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19uZXh0YWZ0ZXJsLmMgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfbmV4dGFmdGVybC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljNjFhNDMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfbmV4dGFmdGVybC5jCkBAIC0wLDAgKzEsODAgQEAKKy8qIEAoIylzX25leHRhZnRlci5jIDUuMSA5My8wOS8yNCAqLworLyoKKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIENvcHlyaWdodCAoQykgMTk5MyBieSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogRGV2ZWxvcGVkIGF0IFN1blBybywgYSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGJ1c2luZXNzLgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcworICogc29mdHdhcmUgaXMgZnJlZWx5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhpcyBub3RpY2UKKyAqIGlzIHByZXNlcnZlZC4KKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CitfX0ZCU0RJRCgiJEZyZWVCU0QkIik7CisKKy8qIElFRUUgZnVuY3Rpb25zCisgKgluZXh0YWZ0ZXIoeCx5KQorICoJcmV0dXJuIHRoZSBuZXh0IG1hY2hpbmUgZmxvYXRpbmctcG9pbnQgbnVtYmVyIG9mIHggaW4gdGhlCisgKglkaXJlY3Rpb24gdG93YXJkIHkuCisgKiAgIFNwZWNpYWwgY2FzZXM6CisgKi8KKworI2luY2x1ZGUgPGZsb2F0Lmg+CisKKyNpbmNsdWRlICJmcG1hdGguaCIKKyNpbmNsdWRlICJtYXRoLmgiCisjaW5jbHVkZSAibWF0aF9wcml2YXRlLmgiCisKKyNpZiBMREJMX01BWF9FWFAgIT0gMHg0MDAwCisjZXJyb3IgIlVuc3VwcG9ydGVkIGxvbmcgZG91YmxlIGZvcm1hdCIKKyNlbmRpZgorCitsb25nIGRvdWJsZQorbmV4dGFmdGVybChsb25nIGRvdWJsZSB4LCBsb25nIGRvdWJsZSB5KQoreworCXZvbGF0aWxlIGxvbmcgZG91YmxlIHQ7CisJdW5pb24gSUVFRWwyYml0cyB1eCwgdXk7CisKKwl1eC5lID0geDsKKwl1eS5lID0geTsKKworCWlmICgodXguYml0cy5leHAgPT0gMHg3ZmZmICYmCisJICAgICAoKHV4LmJpdHMubWFuaCZ+TERCTF9OQklUKXx1eC5iaXRzLm1hbmwpICE9IDApIHx8CisJICAgICh1eS5iaXRzLmV4cCA9PSAweDdmZmYgJiYKKwkgICAgICgodXkuYml0cy5tYW5oJn5MREJMX05CSVQpfHV5LmJpdHMubWFubCkgIT0gMCkpCisJICAgcmV0dXJuIHgreTsJLyogeCBvciB5IGlzIG5hbiAqLworCWlmKHg9PXkpIHJldHVybiB5OwkJLyogeD15LCByZXR1cm4geSAqLworCWlmKHg9PTAuMCkgeworCSAgICB1eC5iaXRzLm1hbmggPSAwOwkJCS8qIHJldHVybiArLW1pbnN1Ym5vcm1hbCAqLworCSAgICB1eC5iaXRzLm1hbmwgPSAxOworCSAgICB1eC5iaXRzLnNpZ24gPSB1eS5iaXRzLnNpZ247CisJICAgIHQgPSB1eC5lKnV4LmU7CisJICAgIGlmKHQ9PXV4LmUpIHJldHVybiB0OyBlbHNlIHJldHVybiB1eC5lOyAvKiByYWlzZSB1bmRlcmZsb3cgZmxhZyAqLworCX0KKwlpZih4PjAuMCBeIHg8eSkgewkJCS8qIHggLT0gdWxwICovCisJICAgIGlmKHV4LmJpdHMubWFubD09MCkgeworCQlpZiAoKHV4LmJpdHMubWFuaCZ+TERCTF9OQklUKT09MCkKKwkJICAgIHV4LmJpdHMuZXhwIC09IDE7CisJCXV4LmJpdHMubWFuaCA9ICh1eC5iaXRzLm1hbmggLSAxKSB8ICh1eC5iaXRzLm1hbmggJiBMREJMX05CSVQpOworCSAgICB9CisJICAgIHV4LmJpdHMubWFubCAtPSAxOworCX0gZWxzZSB7CQkJCS8qIHggKz0gdWxwICovCisJICAgIHV4LmJpdHMubWFubCArPSAxOworCSAgICBpZih1eC5iaXRzLm1hbmw9PTApIHsKKwkJdXguYml0cy5tYW5oID0gKHV4LmJpdHMubWFuaCArIDEpIHwgKHV4LmJpdHMubWFuaCAmIExEQkxfTkJJVCk7CisJCWlmICgodXguYml0cy5tYW5oJn5MREJMX05CSVQpPT0wKQorCQkgICAgdXguYml0cy5leHAgKz0gMTsKKwkgICAgfQorCX0KKwlpZih1eC5iaXRzLmV4cD09MHg3ZmZmKSByZXR1cm4geCt4OwkvKiBvdmVyZmxvdyAgKi8KKwlpZih1eC5iaXRzLmV4cD09MCkgewkJCS8qIHVuZGVyZmxvdyAqLworCSAgICBtYXNrX25iaXRfbCh1eCk7CisJICAgIHQgPSB1eC5lICogdXguZTsKKwkgICAgaWYodCE9dXguZSkJCQkvKiByYWlzZSB1bmRlcmZsb3cgZmxhZyAqLworCQlyZXR1cm4gdXguZTsKKwl9CisJcmV0dXJuIHV4LmU7Cit9CisKK19fc3Ryb25nX3JlZmVyZW5jZShuZXh0YWZ0ZXJsLCBuZXh0dG93YXJkbCk7CmRpZmYgLS1naXQgYS9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfbmV4dHRvd2FyZC5jIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX25leHR0b3dhcmQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMmE1MGQzCi0tLSAvZGV2L251bGwKKysrIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX25leHR0b3dhcmQuYwpAQCAtMCwwICsxLDcyIEBACisvKiBAKCMpc19uZXh0YWZ0ZXIuYyA1LjEgOTMvMDkvMjQgKi8KKy8qCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBDb3B5cmlnaHQgKEMpIDE5OTMgYnkgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIERldmVsb3BlZCBhdCBTdW5Qcm8sIGEgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBidXNpbmVzcy4KKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKKyAqIHNvZnR3YXJlIGlzIGZyZWVseSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoaXMgbm90aWNlCisgKiBpcyBwcmVzZXJ2ZWQuCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorX19GQlNESUQoIiRGcmVlQlNEJCIpOworCisvKgorICogV2UgYXNzdW1lIHRoYXQgYSBsb25nIGRvdWJsZSBoYXMgYSAxNS1iaXQgZXhwb25lbnQuICBPbiBzeXN0ZW1zCisgKiB3aGVyZSBsb25nIGRvdWJsZSBpcyB0aGUgc2FtZSBhcyBkb3VibGUsIG5leHR0b3dhcmQoKSBpcyBhbiBhbGlhcworICogZm9yIG5leHRhZnRlcigpLCBzbyB3ZSBkb24ndCB1c2UgdGhpcyByb3V0aW5lLgorICovCisKKyNpbmNsdWRlIDxmbG9hdC5oPgorCisjaW5jbHVkZSAiZnBtYXRoLmgiCisjaW5jbHVkZSAibWF0aC5oIgorI2luY2x1ZGUgIm1hdGhfcHJpdmF0ZS5oIgorCisjaWYgTERCTF9NQVhfRVhQICE9IDB4NDAwMAorI2Vycm9yICJVbnN1cHBvcnRlZCBsb25nIGRvdWJsZSBmb3JtYXQiCisjZW5kaWYKKworZG91YmxlCituZXh0dG93YXJkKGRvdWJsZSB4LCBsb25nIGRvdWJsZSB5KQoreworCXVuaW9uIElFRUVsMmJpdHMgdXk7CisJdm9sYXRpbGUgZG91YmxlIHQ7CisJaW50MzJfdCBoeCxpeDsKKwl1X2ludDMyX3QgbHg7CisKKwlFWFRSQUNUX1dPUkRTKGh4LGx4LHgpOworCWl4ID0gaHgmMHg3ZmZmZmZmZjsJCS8qIHx4fCAqLworCXV5LmUgPSB5OworCisJaWYoKChpeD49MHg3ZmYwMDAwMCkmJigoaXgtMHg3ZmYwMDAwMCl8bHgpIT0wKSB8fAorCSAgICAodXkuYml0cy5leHAgPT0gMHg3ZmZmICYmCisJICAgICAoKHV5LmJpdHMubWFuaCZ+TERCTF9OQklUKXx1eS5iaXRzLm1hbmwpICE9IDApKQorCSAgIHJldHVybiB4K3k7CS8qIHggb3IgeSBpcyBuYW4gKi8KKwlpZih4PT15KSByZXR1cm4gKGRvdWJsZSl5OwkJLyogeD15LCByZXR1cm4geSAqLworCWlmKHg9PTAuMCkgeworCSAgICBJTlNFUlRfV09SRFMoeCx1eS5iaXRzLnNpZ248PDMxLDEpOwkvKiByZXR1cm4gKy1taW5zdWJub3JtYWwgKi8KKwkgICAgdCA9IHgqeDsKKwkgICAgaWYodD09eCkgcmV0dXJuIHQ7IGVsc2UgcmV0dXJuIHg7CS8qIHJhaXNlIHVuZGVyZmxvdyBmbGFnICovCisJfQorCWlmKGh4PjAuMCBeIHggPCB5KSB7CQkJLyogeCAtPSB1bHAgKi8KKwkgICAgaWYobHg9PTApIGh4IC09IDE7CisJICAgIGx4IC09IDE7CisJfSBlbHNlIHsJCQkJLyogeCArPSB1bHAgKi8KKwkgICAgbHggKz0gMTsKKwkgICAgaWYobHg9PTApIGh4ICs9IDE7CisJfQorCWl4ID0gaHgmMHg3ZmYwMDAwMDsKKwlpZihpeD49MHg3ZmYwMDAwMCkgcmV0dXJuIHgreDsJLyogb3ZlcmZsb3cgICovCisJaWYoaXg8MHgwMDEwMDAwMCkgewkJLyogdW5kZXJmbG93ICovCisJICAgIHQgPSB4Kng7CisJICAgIGlmKHQhPXgpIHsJCS8qIHJhaXNlIHVuZGVyZmxvdyBmbGFnICovCisJICAgICAgICBJTlNFUlRfV09SRFMoeCxoeCxseCk7CisJCXJldHVybiB4OworCSAgICB9CisJfQorCUlOU0VSVF9XT1JEUyh4LGh4LGx4KTsKKwlyZXR1cm4geDsKK30KZGlmZiAtLWdpdCBhL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19uZXh0dG93YXJkZi5jIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX25leHR0b3dhcmRmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWRkZmZmOQotLS0gL2Rldi9udWxsCisrKyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19uZXh0dG93YXJkZi5jCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBDb3B5cmlnaHQgKEMpIDE5OTMgYnkgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIERldmVsb3BlZCBhdCBTdW5Qcm8sIGEgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBidXNpbmVzcy4KKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKKyAqIHNvZnR3YXJlIGlzIGZyZWVseSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoaXMgbm90aWNlCisgKiBpcyBwcmVzZXJ2ZWQuCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorX19GQlNESUQoIiRGcmVlQlNEJCIpOworCisjaW5jbHVkZSA8ZmxvYXQuaD4KKworI2luY2x1ZGUgImZwbWF0aC5oIgorI2luY2x1ZGUgIm1hdGguaCIKKyNpbmNsdWRlICJtYXRoX3ByaXZhdGUuaCIKKworI2RlZmluZQlMREJMX0lORk5BTl9FWFAJKExEQkxfTUFYX0VYUCAqIDIgLSAxKQorCitmbG9hdAorbmV4dHRvd2FyZGYoZmxvYXQgeCwgbG9uZyBkb3VibGUgeSkKK3sKKwl1bmlvbiBJRUVFbDJiaXRzIHV5OworCXZvbGF0aWxlIGZsb2F0IHQ7CisJaW50MzJfdCBoeCxpeDsKKworCUdFVF9GTE9BVF9XT1JEKGh4LHgpOworCWl4ID0gaHgmMHg3ZmZmZmZmZjsJCS8qIHx4fCAqLworCXV5LmUgPSB5OworCisJaWYoKGl4PjB4N2Y4MDAwMDApIHx8CisJICAgKHV5LmJpdHMuZXhwID09IExEQkxfSU5GTkFOX0VYUCAmJgorCSAgICAoKHV5LmJpdHMubWFuaCZ+TERCTF9OQklUKXx1eS5iaXRzLm1hbmwpICE9IDApKQorCSAgIHJldHVybiB4K3k7CS8qIHggb3IgeSBpcyBuYW4gKi8KKwlpZih4PT15KSByZXR1cm4gKGZsb2F0KXk7CQkvKiB4PXksIHJldHVybiB5ICovCisJaWYoaXg9PTApIHsJCQkJLyogeCA9PSAwICovCisJICAgIFNFVF9GTE9BVF9XT1JEKHgsKHV5LmJpdHMuc2lnbjw8MzEpfDEpOy8qIHJldHVybiArLW1pbnN1Ym5vcm1hbCAqLworCSAgICB0ID0geCp4OworCSAgICBpZih0PT14KSByZXR1cm4gdDsgZWxzZSByZXR1cm4geDsJLyogcmFpc2UgdW5kZXJmbG93IGZsYWcgKi8KKwl9CisJaWYoaHg+PTAgXiB4IDwgeSkJCQkvKiB4IC09IHVscCAqLworCSAgICBoeCAtPSAxOworCWVsc2UJCQkJCS8qIHggKz0gdWxwICovCisJICAgIGh4ICs9IDE7CisJaXggPSBoeCYweDdmODAwMDAwOworCWlmKGl4Pj0weDdmODAwMDAwKSByZXR1cm4geCt4OwkvKiBvdmVyZmxvdyAgKi8KKwlpZihpeDwweDAwODAwMDAwKSB7CQkvKiB1bmRlcmZsb3cgKi8KKwkgICAgdCA9IHgqeDsKKwkgICAgaWYodCE9eCkgewkJLyogcmFpc2UgdW5kZXJmbG93IGZsYWcgKi8KKwkgICAgICAgIFNFVF9GTE9BVF9XT1JEKHgsaHgpOworCQlyZXR1cm4geDsKKwkgICAgfQorCX0KKwlTRVRfRkxPQVRfV09SRCh4LGh4KTsKKwlyZXR1cm4geDsKK30KZGlmZiAtLWdpdCBhL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19yZW1xdW8uYyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19yZW1xdW8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kODExYzY5Ci0tLSAvZGV2L251bGwKKysrIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX3JlbXF1by5jCkBAIC0wLDAgKzEsMTU5IEBACisvKiBAKCMpZV9mbW9kLmMgMS4zIDk1LzAxLzE4ICovCisvKi0KKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIENvcHlyaWdodCAoQykgMTk5MyBieSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogRGV2ZWxvcGVkIGF0IFN1blNvZnQsIGEgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBidXNpbmVzcy4KKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKKyAqIHNvZnR3YXJlIGlzIGZyZWVseSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoaXMgbm90aWNlIAorICogaXMgcHJlc2VydmVkLgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJTRCQiKTsKKworI2luY2x1ZGUgPGZsb2F0Lmg+CisKKyNpbmNsdWRlICJtYXRoLmgiCisjaW5jbHVkZSAibWF0aF9wcml2YXRlLmgiCisKK3N0YXRpYyBjb25zdCBkb3VibGUgWmVyb1tdID0gezAuMCwgLTAuMCx9OworCisvKgorICogUmV0dXJuIHRoZSBJRUVFIHJlbWFpbmRlciBhbmQgc2V0ICpxdW8gdG8gdGhlIGxhc3QgbiBiaXRzIG9mIHRoZQorICogcXVvdGllbnQsIHJvdW5kZWQgdG8gdGhlIG5lYXJlc3QgaW50ZWdlci4gIFdlIGNob29zZSBuPTMxIGJlY2F1c2UKKyAqIHdlIHdpbmQgdXAgY29tcHV0aW5nIGFsbCB0aGUgaW50ZWdlciBiaXRzIG9mIHRoZSBxdW90aWVudCBhbnl3YXkgYXMKKyAqIGEgc2lkZS1lZmZlY3Qgb2YgY29tcHV0aW5nIHRoZSByZW1haW5kZXIgYnkgdGhlIHNoaWZ0IGFuZCBzdWJ0cmFjdAorICogbWV0aG9kLiAgSW4gcHJhY3RpY2UsIHRoaXMgaXMgZmFyIG1vcmUgYml0cyB0aGFuIGFyZSBuZWVkZWQgdG8gdXNlCisgKiByZW1xdW8gaW4gcmVkdWN0aW9uIGFsZ29yaXRobXMuCisgKi8KK2RvdWJsZQorcmVtcXVvKGRvdWJsZSB4LCBkb3VibGUgeSwgaW50ICpxdW8pCit7CisJaW50MzJfdCBuLGh4LGh5LGh6LGl4LGl5LHN4LGk7CisJdV9pbnQzMl90IGx4LGx5LGx6LHEsc3h5OworCisJRVhUUkFDVF9XT1JEUyhoeCxseCx4KTsKKwlFWFRSQUNUX1dPUkRTKGh5LGx5LHkpOworCXN4eSA9IChoeCBeIGh5KSAmIDB4ODAwMDAwMDA7CisJc3ggPSBoeCYweDgwMDAwMDAwOwkJLyogc2lnbiBvZiB4ICovCisJaHggXj1zeDsJCS8qIHx4fCAqLworCWh5ICY9IDB4N2ZmZmZmZmY7CS8qIHx5fCAqLworCisgICAgLyogcHVyZ2Ugb2ZmIGV4Y2VwdGlvbiB2YWx1ZXMgKi8KKwlpZigoaHl8bHkpPT0wfHwoaHg+PTB4N2ZmMDAwMDApfHwJLyogeT0wLG9yIHggbm90IGZpbml0ZSAqLworCSAgKChoeXwoKGx5fC1seSk+PjMxKSk+MHg3ZmYwMDAwMCkpCS8qIG9yIHkgaXMgTmFOICovCisJICAgIHJldHVybiAoeCp5KS8oeCp5KTsKKwlpZihoeDw9aHkpIHsKKwkgICAgaWYoKGh4PGh5KXx8KGx4PGx5KSkgeworCQlxID0gMDsKKwkJZ290byBmaXh1cDsJLyogfHh8PHx5fCByZXR1cm4geCBvciB4LXkgKi8KKwkgICAgfQorCSAgICBpZihseD09bHkpIHsKKwkJKnF1byA9IChzeHkgPyAtMSA6IDEpOworCQlyZXR1cm4gWmVyb1sodV9pbnQzMl90KXN4Pj4zMV07CS8qIHx4fD18eXwgcmV0dXJuIHgqMCovCisJICAgIH0KKwl9CisKKyAgICAvKiBkZXRlcm1pbmUgaXggPSBpbG9nYih4KSAqLworCWlmKGh4PDB4MDAxMDAwMDApIHsJLyogc3Vibm9ybWFsIHggKi8KKwkgICAgaWYoaHg9PTApIHsKKwkJZm9yIChpeCA9IC0xMDQzLCBpPWx4OyBpPjA7IGk8PD0xKSBpeCAtPTE7CisJICAgIH0gZWxzZSB7CisJCWZvciAoaXggPSAtMTAyMixpPShoeDw8MTEpOyBpPjA7IGk8PD0xKSBpeCAtPTE7CisJICAgIH0KKwl9IGVsc2UgaXggPSAoaHg+PjIwKS0xMDIzOworCisgICAgLyogZGV0ZXJtaW5lIGl5ID0gaWxvZ2IoeSkgKi8KKwlpZihoeTwweDAwMTAwMDAwKSB7CS8qIHN1Ym5vcm1hbCB5ICovCisJICAgIGlmKGh5PT0wKSB7CisJCWZvciAoaXkgPSAtMTA0MywgaT1seTsgaT4wOyBpPDw9MSkgaXkgLT0xOworCSAgICB9IGVsc2UgeworCQlmb3IgKGl5ID0gLTEwMjIsaT0oaHk8PDExKTsgaT4wOyBpPDw9MSkgaXkgLT0xOworCSAgICB9CisJfSBlbHNlIGl5ID0gKGh5Pj4yMCktMTAyMzsKKworICAgIC8qIHNldCB1cCB7aHgsbHh9LCB7aHksbHl9IGFuZCBhbGlnbiB5IHRvIHggKi8KKwlpZihpeCA+PSAtMTAyMikgCisJICAgIGh4ID0gMHgwMDEwMDAwMHwoMHgwMDBmZmZmZiZoeCk7CisJZWxzZSB7CQkvKiBzdWJub3JtYWwgeCwgc2hpZnQgeCB0byBub3JtYWwgKi8KKwkgICAgbiA9IC0xMDIyLWl4OworCSAgICBpZihuPD0zMSkgeworCSAgICAgICAgaHggPSAoaHg8PG4pfChseD4+KDMyLW4pKTsKKwkgICAgICAgIGx4IDw8PSBuOworCSAgICB9IGVsc2UgeworCQloeCA9IGx4PDwobi0zMik7CisJCWx4ID0gMDsKKwkgICAgfQorCX0KKwlpZihpeSA+PSAtMTAyMikgCisJICAgIGh5ID0gMHgwMDEwMDAwMHwoMHgwMDBmZmZmZiZoeSk7CisJZWxzZSB7CQkvKiBzdWJub3JtYWwgeSwgc2hpZnQgeSB0byBub3JtYWwgKi8KKwkgICAgbiA9IC0xMDIyLWl5OworCSAgICBpZihuPD0zMSkgeworCSAgICAgICAgaHkgPSAoaHk8PG4pfChseT4+KDMyLW4pKTsKKwkgICAgICAgIGx5IDw8PSBuOworCSAgICB9IGVsc2UgeworCQloeSA9IGx5PDwobi0zMik7CisJCWx5ID0gMDsKKwkgICAgfQorCX0KKworICAgIC8qIGZpeCBwb2ludCBmbW9kICovCisJbiA9IGl4IC0gaXk7CisJcSA9IDA7CisJd2hpbGUobi0tKSB7CisJICAgIGh6PWh4LWh5O2x6PWx4LWx5OyBpZihseDxseSkgaHogLT0gMTsKKwkgICAgaWYoaHo8MCl7aHggPSBoeCtoeCsobHg+PjMxKTsgbHggPSBseCtseDt9CisJICAgIGVsc2Uge2h4ID0gaHoraHorKGx6Pj4zMSk7IGx4ID0gbHorbHo7IHErKzt9CisJICAgIHEgPDw9IDE7CisJfQorCWh6PWh4LWh5O2x6PWx4LWx5OyBpZihseDxseSkgaHogLT0gMTsKKwlpZihoej49MCkge2h4PWh6O2x4PWx6O3ErKzt9CisKKyAgICAvKiBjb252ZXJ0IGJhY2sgdG8gZmxvYXRpbmcgdmFsdWUgYW5kIHJlc3RvcmUgdGhlIHNpZ24gKi8KKwlpZigoaHh8bHgpPT0wKSB7CQkJLyogcmV0dXJuIHNpZ24oeCkqMCAqLworCSAgICBxICY9IDB4N2ZmZmZmZmY7CisJICAgICpxdW8gPSAoc3h5ID8gLXEgOiBxKTsKKwkgICAgcmV0dXJuIFplcm9bKHVfaW50MzJfdClzeD4+MzFdOworCX0KKwl3aGlsZShoeDwweDAwMTAwMDAwKSB7CQkvKiBub3JtYWxpemUgeCAqLworCSAgICBoeCA9IGh4K2h4KyhseD4+MzEpOyBseCA9IGx4K2x4OworCSAgICBpeSAtPSAxOworCX0KKwlpZihpeT49IC0xMDIyKSB7CS8qIG5vcm1hbGl6ZSBvdXRwdXQgKi8KKwkgICAgaHggPSAoKGh4LTB4MDAxMDAwMDApfCgoaXkrMTAyMyk8PDIwKSk7CisJfSBlbHNlIHsJCS8qIHN1Ym5vcm1hbCBvdXRwdXQgKi8KKwkgICAgbiA9IC0xMDIyIC0gaXk7CisJICAgIGlmKG48PTIwKSB7CisJCWx4ID0gKGx4Pj5uKXwoKHVfaW50MzJfdCloeDw8KDMyLW4pKTsKKwkJaHggPj49IG47CisJICAgIH0gZWxzZSBpZiAobjw9MzEpIHsKKwkJbHggPSAoaHg8PCgzMi1uKSl8KGx4Pj5uKTsgaHggPSAwOworCSAgICB9IGVsc2UgeworCQlseCA9IGh4Pj4obi0zMik7IGh4ID0gMDsKKwkgICAgfQorCX0KK2ZpeHVwOgorCUlOU0VSVF9XT1JEUyh4LGh4LGx4KTsKKwl5ID0gZmFicyh5KTsKKwlpZiAoeSA8IDB4MXAtMTAyMSkgeworCSAgICBpZiAoeCt4PnkgfHwgKHgreD09eSAmJiAocSAmIDEpKSkgeworCQlxKys7CisJCXgtPXk7CisJICAgIH0KKwl9IGVsc2UgaWYgKHg+MC41KnkgfHwgKHg9PTAuNSp5ICYmIChxICYgMSkpKSB7CisJICAgIHErKzsKKwkgICAgeC09eTsKKwl9CisJR0VUX0hJR0hfV09SRChoeCx4KTsKKwlTRVRfSElHSF9XT1JEKHgsaHhec3gpOworCXEgJj0gMHg3ZmZmZmZmZjsKKwkqcXVvID0gKHN4eSA/IC1xIDogcSk7CisJcmV0dXJuIHg7Cit9CisKKyNpZiBMREJMX01BTlRfRElHID09IDUzCitfX3dlYWtfcmVmZXJlbmNlKHJlbXF1bywgcmVtcXVvbCk7CisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19yZW1xdW9mLmMgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfcmVtcXVvZi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3YjRjMDAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfcmVtcXVvZi5jCkBAIC0wLDAgKzEsMTIyIEBACisvKiBAKCMpZV9mbW9kLmMgMS4zIDk1LzAxLzE4ICovCisvKi0KKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIENvcHlyaWdodCAoQykgMTk5MyBieSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogRGV2ZWxvcGVkIGF0IFN1blNvZnQsIGEgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBidXNpbmVzcy4KKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKKyAqIHNvZnR3YXJlIGlzIGZyZWVseSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoaXMgbm90aWNlIAorICogaXMgcHJlc2VydmVkLgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJTRCQiKTsKKworI2luY2x1ZGUgIm1hdGguaCIKKyNpbmNsdWRlICJtYXRoX3ByaXZhdGUuaCIKKworc3RhdGljIGNvbnN0IGZsb2F0IFplcm9bXSA9IHswLjAsIC0wLjAsfTsKKworLyoKKyAqIFJldHVybiB0aGUgSUVFRSByZW1haW5kZXIgYW5kIHNldCAqcXVvIHRvIHRoZSBsYXN0IG4gYml0cyBvZiB0aGUKKyAqIHF1b3RpZW50LCByb3VuZGVkIHRvIHRoZSBuZWFyZXN0IGludGVnZXIuICBXZSBjaG9vc2Ugbj0zMSBiZWNhdXNlCisgKiB3ZSB3aW5kIHVwIGNvbXB1dGluZyBhbGwgdGhlIGludGVnZXIgYml0cyBvZiB0aGUgcXVvdGllbnQgYW55d2F5IGFzCisgKiBhIHNpZGUtZWZmZWN0IG9mIGNvbXB1dGluZyB0aGUgcmVtYWluZGVyIGJ5IHRoZSBzaGlmdCBhbmQgc3VidHJhY3QKKyAqIG1ldGhvZC4gIEluIHByYWN0aWNlLCB0aGlzIGlzIGZhciBtb3JlIGJpdHMgdGhhbiBhcmUgbmVlZGVkIHRvIHVzZQorICogcmVtcXVvIGluIHJlZHVjdGlvbiBhbGdvcml0aG1zLgorICovCitmbG9hdAorcmVtcXVvZihmbG9hdCB4LCBmbG9hdCB5LCBpbnQgKnF1bykKK3sKKwlpbnQzMl90IG4saHgsaHksaHosaXgsaXksc3gsaTsKKwl1X2ludDMyX3QgcSxzeHk7CisKKwlHRVRfRkxPQVRfV09SRChoeCx4KTsKKwlHRVRfRkxPQVRfV09SRChoeSx5KTsKKwlzeHkgPSAoaHggXiBoeSkgJiAweDgwMDAwMDAwOworCXN4ID0gaHgmMHg4MDAwMDAwMDsJCS8qIHNpZ24gb2YgeCAqLworCWh4IF49c3g7CQkvKiB8eHwgKi8KKwloeSAmPSAweDdmZmZmZmZmOwkvKiB8eXwgKi8KKworICAgIC8qIHB1cmdlIG9mZiBleGNlcHRpb24gdmFsdWVzICovCisJaWYoaHk9PTB8fGh4Pj0weDdmODAwMDAwfHxoeT4weDdmODAwMDAwKSAvKiB5PTAsTmFOO29yIHggbm90IGZpbml0ZSAqLworCSAgICByZXR1cm4gKHgqeSkvKHgqeSk7CisJaWYoaHg8aHkpIHsKKwkgICAgcSA9IDA7CisJICAgIGdvdG8gZml4dXA7CS8qIHx4fDx8eXwgcmV0dXJuIHggb3IgeC15ICovCisJfSBlbHNlIGlmKGh4PT1oeSkgeworCSAgICAqcXVvID0gKHN4eSA/IC0xIDogMSk7CisJICAgIHJldHVybiBaZXJvWyh1X2ludDMyX3Qpc3g+PjMxXTsJLyogfHh8PXx5fCByZXR1cm4geCowKi8KKwl9CisKKyAgICAvKiBkZXRlcm1pbmUgaXggPSBpbG9nYih4KSAqLworCWlmKGh4PDB4MDA4MDAwMDApIHsJLyogc3Vibm9ybWFsIHggKi8KKwkgICAgZm9yIChpeCA9IC0xMjYsaT0oaHg8PDgpOyBpPjA7IGk8PD0xKSBpeCAtPTE7CisJfSBlbHNlIGl4ID0gKGh4Pj4yMyktMTI3OworCisgICAgLyogZGV0ZXJtaW5lIGl5ID0gaWxvZ2IoeSkgKi8KKwlpZihoeTwweDAwODAwMDAwKSB7CS8qIHN1Ym5vcm1hbCB5ICovCisJICAgIGZvciAoaXkgPSAtMTI2LGk9KGh5PDw4KTsgaT4wOyBpPDw9MSkgaXkgLT0xOworCX0gZWxzZSBpeSA9IChoeT4+MjMpLTEyNzsKKworICAgIC8qIHNldCB1cCB7aHgsbHh9LCB7aHksbHl9IGFuZCBhbGlnbiB5IHRvIHggKi8KKwlpZihpeCA+PSAtMTI2KQorCSAgICBoeCA9IDB4MDA4MDAwMDB8KDB4MDA3ZmZmZmYmaHgpOworCWVsc2UgewkJLyogc3Vibm9ybWFsIHgsIHNoaWZ0IHggdG8gbm9ybWFsICovCisJICAgIG4gPSAtMTI2LWl4OworCSAgICBoeCA8PD0gbjsKKwl9CisJaWYoaXkgPj0gLTEyNikKKwkgICAgaHkgPSAweDAwODAwMDAwfCgweDAwN2ZmZmZmJmh5KTsKKwllbHNlIHsJCS8qIHN1Ym5vcm1hbCB5LCBzaGlmdCB5IHRvIG5vcm1hbCAqLworCSAgICBuID0gLTEyNi1peTsKKwkgICAgaHkgPDw9IG47CisJfQorCisgICAgLyogZml4IHBvaW50IGZtb2QgKi8KKwluID0gaXggLSBpeTsKKwlxID0gMDsKKwl3aGlsZShuLS0pIHsKKwkgICAgaHo9aHgtaHk7CisJICAgIGlmKGh6PDApIGh4ID0gaHggPDwgMTsKKwkgICAgZWxzZSB7aHggPSBoeiA8PCAxOyBxKys7fQorCSAgICBxIDw8PSAxOworCX0KKwloej1oeC1oeTsKKwlpZihoej49MCkge2h4PWh6O3ErKzt9CisKKyAgICAvKiBjb252ZXJ0IGJhY2sgdG8gZmxvYXRpbmcgdmFsdWUgYW5kIHJlc3RvcmUgdGhlIHNpZ24gKi8KKwlpZihoeD09MCkgewkJCQkvKiByZXR1cm4gc2lnbih4KSowICovCisJICAgIHEgJj0gMHg3ZmZmZmZmZjsKKwkgICAgKnF1byA9IChzeHkgPyAtcSA6IHEpOworCSAgICByZXR1cm4gWmVyb1sodV9pbnQzMl90KXN4Pj4zMV07CisJfQorCXdoaWxlKGh4PDB4MDA4MDAwMDApIHsJCS8qIG5vcm1hbGl6ZSB4ICovCisJICAgIGh4IDw8PSAxOworCSAgICBpeSAtPSAxOworCX0KKwlpZihpeT49IC0xMjYpIHsJCS8qIG5vcm1hbGl6ZSBvdXRwdXQgKi8KKwkgICAgaHggPSAoKGh4LTB4MDA4MDAwMDApfCgoaXkrMTI3KTw8MjMpKTsKKwl9IGVsc2UgewkJLyogc3Vibm9ybWFsIG91dHB1dCAqLworCSAgICBuID0gLTEyNiAtIGl5OworCSAgICBoeCA+Pj0gbjsKKwl9CitmaXh1cDoKKwlTRVRfRkxPQVRfV09SRCh4LGh4KTsKKwl5ID0gZmFic2YoeSk7CisJaWYgKHkgPCAweDFwLTEyNWYpIHsKKwkgICAgaWYgKHgreD55IHx8ICh4K3g9PXkgJiYgKHEgJiAxKSkpIHsKKwkJcSsrOworCQl4LT15OworCSAgICB9CisJfSBlbHNlIGlmICh4PjAuNWYqeSB8fCAoeD09MC41Zip5ICYmIChxICYgMSkpKSB7CisJICAgIHErKzsKKwkgICAgeC09eTsKKwl9CisJR0VUX0ZMT0FUX1dPUkQoaHgseCk7CisJU0VUX0ZMT0FUX1dPUkQoeCxoeF5zeCk7CisJcSAmPSAweDdmZmZmZmZmOworCSpxdW8gPSAoc3h5ID8gLXEgOiBxKTsKKwlyZXR1cm4geDsKK30KZGlmZiAtLWdpdCBhL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19yZW1xdW9sLmMgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfcmVtcXVvbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxMjY1MWMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfcmVtcXVvbC5jCkBAIC0wLDAgKzEsMTc4IEBACisvKiBAKCMpZV9mbW9kLmMgMS4zIDk1LzAxLzE4ICovCisvKi0KKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIENvcHlyaWdodCAoQykgMTk5MyBieSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogRGV2ZWxvcGVkIGF0IFN1blNvZnQsIGEgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBidXNpbmVzcy4KKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKKyAqIHNvZnR3YXJlIGlzIGZyZWVseSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoaXMgbm90aWNlIAorICogaXMgcHJlc2VydmVkLgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJTRCQiKTsKKworI2luY2x1ZGUgPGZsb2F0Lmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisKKyNpbmNsdWRlICJmcG1hdGguaCIKKyNpbmNsdWRlICJtYXRoLmgiCisjaW5jbHVkZSAibWF0aF9wcml2YXRlLmgiCisKKyNkZWZpbmUJQklBUyAoTERCTF9NQVhfRVhQIC0gMSkKKworI2lmIExEQkxfTUFOTF9TSVpFID4gMzIKK3R5cGVkZWYJdWludDY0X3QgbWFubF90OworI2Vsc2UKK3R5cGVkZWYJdWludDMyX3QgbWFubF90OworI2VuZGlmCisKKyNpZiBMREJMX01BTkhfU0laRSA+IDMyCit0eXBlZGVmCXVpbnQ2NF90IG1hbmhfdDsKKyNlbHNlCit0eXBlZGVmCXVpbnQzMl90IG1hbmhfdDsKKyNlbmRpZgorCisvKgorICogVGhlc2UgbWFjcm9zIGFkZCBhbmQgcmVtb3ZlIGFuIGV4cGxpY2l0IGludGVnZXIgYml0IGluIGZyb250IG9mIHRoZQorICogZnJhY3Rpb25hbCBtYW50aXNzYSwgaWYgdGhlIGFyY2hpdGVjdHVyZSBkb2Vzbid0IGhhdmUgc3VjaCBhIGJpdCBieQorICogZGVmYXVsdCBhbHJlYWR5LgorICovCisjaWZkZWYgTERCTF9JTVBMSUNJVF9OQklUCisjZGVmaW5lCVNFVF9OQklUKGh4KQkoKGh4KSB8ICgxVUxMIDw8IExEQkxfTUFOSF9TSVpFKSkKKyNkZWZpbmUJSEZSQUNfQklUUwlMREJMX01BTkhfU0laRQorI2Vsc2UKKyNkZWZpbmUJU0VUX05CSVQoaHgpCShoeCkKKyNkZWZpbmUJSEZSQUNfQklUUwkoTERCTF9NQU5IX1NJWkUgLSAxKQorI2VuZGlmCisKKyNkZWZpbmUJTUFOTF9TSElGVAkoTERCTF9NQU5MX1NJWkUgLSAxKQorCitzdGF0aWMgY29uc3QgbG9uZyBkb3VibGUgWmVyb1tdID0gezAuMEwsIC0wLjBMfTsKKworLyoKKyAqIFJldHVybiB0aGUgSUVFRSByZW1haW5kZXIgYW5kIHNldCAqcXVvIHRvIHRoZSBsYXN0IG4gYml0cyBvZiB0aGUKKyAqIHF1b3RpZW50LCByb3VuZGVkIHRvIHRoZSBuZWFyZXN0IGludGVnZXIuICBXZSBjaG9vc2Ugbj0zMSBiZWNhdXNlCisgKiB3ZSB3aW5kIHVwIGNvbXB1dGluZyBhbGwgdGhlIGludGVnZXIgYml0cyBvZiB0aGUgcXVvdGllbnQgYW55d2F5IGFzCisgKiBhIHNpZGUtZWZmZWN0IG9mIGNvbXB1dGluZyB0aGUgcmVtYWluZGVyIGJ5IHRoZSBzaGlmdCBhbmQgc3VidHJhY3QKKyAqIG1ldGhvZC4gIEluIHByYWN0aWNlLCB0aGlzIGlzIGZhciBtb3JlIGJpdHMgdGhhbiBhcmUgbmVlZGVkIHRvIHVzZQorICogcmVtcXVvIGluIHJlZHVjdGlvbiBhbGdvcml0aG1zLgorICoKKyAqIEFzc3VtcHRpb25zOgorICogLSBUaGUgbG93IHBhcnQgb2YgdGhlIG1hbnRpc3NhIGZpdHMgaW4gYSBtYW5sX3QgZXhhY3RseS4KKyAqIC0gVGhlIGhpZ2ggcGFydCBvZiB0aGUgbWFudGlzc2EgZml0cyBpbiBhbiBpbnQ2NF90IHdpdGggZW5vdWdoIHJvb20KKyAqICAgZm9yIGFuIGV4cGxpY2l0IGludGVnZXIgYml0IGluIGZyb250IG9mIHRoZSBmcmFjdGlvbmFsIGJpdHMuCisgKi8KK2xvbmcgZG91YmxlCityZW1xdW9sKGxvbmcgZG91YmxlIHgsIGxvbmcgZG91YmxlIHksIGludCAqcXVvKQoreworCXVuaW9uIElFRUVsMmJpdHMgdXgsIHV5OworCWludDY0X3QgaHgsaHo7CS8qIFdlIG5lZWQgYSBjYXJyeSBiaXQgZXZlbiBpZiBMREJMX01BTkhfU0laRSBpcyAzMi4gKi8KKwltYW5oX3QgaHk7CisJbWFubF90IGx4LGx5LGx6OworCWludCBpeCxpeSxuLHEsc3gsc3h5OworCisJdXguZSA9IHg7CisJdXkuZSA9IHk7CisJc3ggPSB1eC5iaXRzLnNpZ247CisJc3h5ID0gc3ggXiB1eS5iaXRzLnNpZ247CisJdXguYml0cy5zaWduID0gMDsJLyogfHh8ICovCisJdXkuYml0cy5zaWduID0gMDsJLyogfHl8ICovCisJeCA9IHV4LmU7CisKKyAgICAvKiBwdXJnZSBvZmYgZXhjZXB0aW9uIHZhbHVlcyAqLworCWlmKCh1eS5iaXRzLmV4cHx1eS5iaXRzLm1hbmh8dXkuYml0cy5tYW5sKT09MCB8fCAvKiB5PTAgKi8KKwkgICAodXguYml0cy5leHAgPT0gQklBUyArIExEQkxfTUFYX0VYUCkgfHwJIC8qIG9yIHggbm90IGZpbml0ZSAqLworCSAgICh1eS5iaXRzLmV4cCA9PSBCSUFTICsgTERCTF9NQVhfRVhQICYmCisJICAgICgodXkuYml0cy5tYW5oJn5MREJMX05CSVQpfHV5LmJpdHMubWFubCkhPTApKSAvKiBvciB5IGlzIE5hTiAqLworCSAgICByZXR1cm4gKHgqeSkvKHgqeSk7CisJaWYodXguYml0cy5leHA8PXV5LmJpdHMuZXhwKSB7CisJICAgIGlmKCh1eC5iaXRzLmV4cDx1eS5iaXRzLmV4cCkgfHwKKwkgICAgICAgKHV4LmJpdHMubWFuaDw9dXkuYml0cy5tYW5oICYmCisJCSh1eC5iaXRzLm1hbmg8dXkuYml0cy5tYW5oIHx8CisJCSB1eC5iaXRzLm1hbmw8dXkuYml0cy5tYW5sKSkpIHsKKwkJcSA9IDA7CisJCWdvdG8gZml4dXA7CS8qIHx4fDx8eXwgcmV0dXJuIHggb3IgeC15ICovCisJICAgIH0KKwkgICAgaWYodXguYml0cy5tYW5oPT11eS5iaXRzLm1hbmggJiYgdXguYml0cy5tYW5sPT11eS5iaXRzLm1hbmwpIHsKKwkJKnF1byA9IChzeHkgPyAtMSA6IDEpOworCQlyZXR1cm4gWmVyb1tzeF07CS8qIHx4fD18eXwgcmV0dXJuIHgqMCovCisJICAgIH0KKwl9CisKKyAgICAvKiBkZXRlcm1pbmUgaXggPSBpbG9nYih4KSAqLworCWlmKHV4LmJpdHMuZXhwID09IDApIHsJLyogc3Vibm9ybWFsIHggKi8KKwkgICAgdXguZSAqPSAweDEuMHA1MTI7CisJICAgIGl4ID0gdXguYml0cy5leHAgLSAoQklBUyArIDUxMik7CisJfSBlbHNlIHsKKwkgICAgaXggPSB1eC5iaXRzLmV4cCAtIEJJQVM7CisJfQorCisgICAgLyogZGV0ZXJtaW5lIGl5ID0gaWxvZ2IoeSkgKi8KKwlpZih1eS5iaXRzLmV4cCA9PSAwKSB7CS8qIHN1Ym5vcm1hbCB5ICovCisJICAgIHV5LmUgKj0gMHgxLjBwNTEyOworCSAgICBpeSA9IHV5LmJpdHMuZXhwIC0gKEJJQVMgKyA1MTIpOworCX0gZWxzZSB7CisJICAgIGl5ID0gdXkuYml0cy5leHAgLSBCSUFTOworCX0KKworICAgIC8qIHNldCB1cCB7aHgsbHh9LCB7aHksbHl9IGFuZCBhbGlnbiB5IHRvIHggKi8KKwloeCA9IFNFVF9OQklUKHV4LmJpdHMubWFuaCk7CisJaHkgPSBTRVRfTkJJVCh1eS5iaXRzLm1hbmgpOworCWx4ID0gdXguYml0cy5tYW5sOworCWx5ID0gdXkuYml0cy5tYW5sOworCisgICAgLyogZml4IHBvaW50IGZtb2QgKi8KKwluID0gaXggLSBpeTsKKwlxID0gMDsKKworCXdoaWxlKG4tLSkgeworCSAgICBoej1oeC1oeTtsej1seC1seTsgaWYobHg8bHkpIGh6IC09IDE7CisJICAgIGlmKGh6PDApe2h4ID0gaHgraHgrKGx4Pj5NQU5MX1NISUZUKTsgbHggPSBseCtseDt9CisJICAgIGVsc2Uge2h4ID0gaHoraHorKGx6Pj5NQU5MX1NISUZUKTsgbHggPSBseitsejsgcSsrO30KKwkgICAgcSA8PD0gMTsKKwl9CisJaHo9aHgtaHk7bHo9bHgtbHk7IGlmKGx4PGx5KSBoeiAtPSAxOworCWlmKGh6Pj0wKSB7aHg9aHo7bHg9bHo7cSsrO30KKworICAgIC8qIGNvbnZlcnQgYmFjayB0byBmbG9hdGluZyB2YWx1ZSBhbmQgcmVzdG9yZSB0aGUgc2lnbiAqLworCWlmKChoeHxseCk9PTApIHsJCQkvKiByZXR1cm4gc2lnbih4KSowICovCisJICAgIHEgJj0gMHg3ZmZmZmZmZjsKKwkgICAgKnF1byA9IChzeHkgPyAtcSA6IHEpOworCSAgICByZXR1cm4gWmVyb1tzeF07CisJfQorCXdoaWxlKGh4PCgxVUxMPDxIRlJBQ19CSVRTKSkgewkvKiBub3JtYWxpemUgeCAqLworCSAgICBoeCA9IGh4K2h4KyhseD4+TUFOTF9TSElGVCk7IGx4ID0gbHgrbHg7CisJICAgIGl5IC09IDE7CisJfQorCXV4LmJpdHMubWFuaCA9IGh4OyAvKiBUaGUgaW50ZWdlciBiaXQgaXMgdHJ1bmNhdGVkIGhlcmUgaWYgbmVlZGVkLiAqLworCXV4LmJpdHMubWFubCA9IGx4OworCWlmIChpeSA8IExEQkxfTUlOX0VYUCkgeworCSAgICB1eC5iaXRzLmV4cCA9IGl5ICsgKEJJQVMgKyA1MTIpOworCSAgICB1eC5lICo9IDB4MXAtNTEyOworCX0gZWxzZSB7CisJICAgIHV4LmJpdHMuZXhwID0gaXkgKyBCSUFTOworCX0KKwl1eC5iaXRzLnNpZ24gPSAwOworCXggPSB1eC5lOworZml4dXA6CisJeSA9IGZhYnNsKHkpOworCWlmICh5IDwgTERCTF9NSU4gKiAyKSB7CisJICAgIGlmICh4K3g+eSB8fCAoeCt4PT15ICYmIChxICYgMSkpKSB7CisJCXErKzsKKwkJeC09eTsKKwkgICAgfQorCX0gZWxzZSBpZiAoeD4wLjUqeSB8fCAoeD09MC41KnkgJiYgKHEgJiAxKSkpIHsKKwkgICAgcSsrOworCSAgICB4LT15OworCX0KKworCXV4LmUgPSB4OworCXV4LmJpdHMuc2lnbiBePSBzeDsKKwl4ID0gdXguZTsKKworCXEgJj0gMHg3ZmZmZmZmZjsKKwkqcXVvID0gKHN4eSA/IC1xIDogcSk7CisJcmV0dXJuIHg7Cit9CmRpZmYgLS1naXQgYS9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfcmludC5jIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX3JpbnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNTZmOGZiCi0tLSAvZGV2L251bGwKKysrIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX3JpbnQuYwpAQCAtMCwwICsxLDkyIEBACisvKiBAKCMpc19yaW50LmMgNS4xIDkzLzA5LzI0ICovCisvKgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogQ29weXJpZ2h0IChDKSAxOTkzIGJ5IFN1biBNaWNyb3N5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBEZXZlbG9wZWQgYXQgU3VuUHJvLCBhIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gYnVzaW5lc3MuCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCisgKiBzb2Z0d2FyZSBpcyBmcmVlbHkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGlzIG5vdGljZQorICogaXMgcHJlc2VydmVkLgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJTRCQiKTsKKworLyoKKyAqIHJpbnQoeCkKKyAqIFJldHVybiB4IHJvdW5kZWQgdG8gaW50ZWdyYWwgdmFsdWUgYWNjb3JkaW5nIHRvIHRoZSBwcmV2YWlsaW5nCisgKiByb3VuZGluZyBtb2RlLgorICogTWV0aG9kOgorICoJVXNpbmcgZmxvYXRpbmcgYWRkaXRpb24uCisgKiBFeGNlcHRpb246CisgKglJbmV4YWN0IGZsYWcgcmFpc2VkIGlmIHggbm90IGVxdWFsIHRvIHJpbnQoeCkuCisgKi8KKworI2luY2x1ZGUgPGZsb2F0Lmg+CisKKyNpbmNsdWRlICJtYXRoLmgiCisjaW5jbHVkZSAibWF0aF9wcml2YXRlLmgiCisKK3N0YXRpYyBjb25zdCBkb3VibGUKK1RXTzUyWzJdPXsKKyAgNC41MDM1OTk2MjczNzA0OTYwMDAwMGUrMTUsIC8qIDB4NDMzMDAwMDAsIDB4MDAwMDAwMDAgKi8KKyAtNC41MDM1OTk2MjczNzA0OTYwMDAwMGUrMTUsIC8qIDB4QzMzMDAwMDAsIDB4MDAwMDAwMDAgKi8KK307CisKK2RvdWJsZQorcmludChkb3VibGUgeCkKK3sKKwlpbnQzMl90IGkwLGowLHN4OworCXVfaW50MzJfdCBpLGkxOworCWRvdWJsZSB3LHQ7CisJRVhUUkFDVF9XT1JEUyhpMCxpMSx4KTsKKwlzeCA9IChpMD4+MzEpJjE7CisJajAgPSAoKGkwPj4yMCkmMHg3ZmYpLTB4M2ZmOworCWlmKGowPDIwKSB7CisJICAgIGlmKGowPDApIHsKKwkJaWYoKChpMCYweDdmZmZmZmZmKXxpMSk9PTApIHJldHVybiB4OworCQlpMSB8PSAoaTAmMHgwZmZmZmYpOworCQlpMCAmPSAweGZmZmUwMDAwOworCQlpMCB8PSAoKGkxfC1pMSk+PjEyKSYweDgwMDAwOworCQlTRVRfSElHSF9XT1JEKHgsaTApOworCSAgICAgICAgU1RSSUNUX0FTU0lHTihkb3VibGUsdyxUV081MltzeF0reCk7CisJICAgICAgICB0ID0gIHctVFdPNTJbc3hdOworCQlHRVRfSElHSF9XT1JEKGkwLHQpOworCQlTRVRfSElHSF9XT1JEKHQsKGkwJjB4N2ZmZmZmZmYpfChzeDw8MzEpKTsKKwkgICAgICAgIHJldHVybiB0OworCSAgICB9IGVsc2UgeworCQlpID0gKDB4MDAwZmZmZmYpPj5qMDsKKwkJaWYoKChpMCZpKXxpMSk9PTApIHJldHVybiB4OyAvKiB4IGlzIGludGVncmFsICovCisJCWk+Pj0xOworCQlpZigoKGkwJmkpfGkxKSE9MCkgeworCQkgICAgLyoKKwkJICAgICAqIFNvbWUgYml0IGlzIHNldCBhZnRlciB0aGUgMC41IGJpdC4gIFRvIGF2b2lkIHRoZQorCQkgICAgICogcG9zc2liaWxpdHkgb2YgZXJyb3JzIGZyb20gZG91YmxlIHJvdW5kaW5nIGluCisJCSAgICAgKiB3ID0gVFdPNTJbc3hdK3gsIGFkanVzdCB0aGUgMC4yNSBiaXQgdG8gYSBsb3dlcgorCQkgICAgICogZ3VhcmQgYml0LiAgV2UgZG8gdGhpcyBmb3IgYWxsIGowPD01MS4gIFRoZQorCQkgICAgICogYWRqdXN0bWVudCBpcyB0cmlja2llc3QgZm9yIGowPT0xOCBhbmQgajA9PTE5CisJCSAgICAgKiBzaW5jZSB0aGVuIGl0IHNwYW5zIHRoZSB3b3JkIGJvdW5kYXJ5LgorCQkgICAgICovCisJCSAgICBpZihqMD09MTkpIGkxID0gMHg0MDAwMDAwMDsgZWxzZQorCQkgICAgaWYoajA9PTE4KSBpMSA9IDB4ODAwMDAwMDA7IGVsc2UKKwkJICAgIGkwID0gKGkwJih+aSkpfCgoMHgyMDAwMCk+PmowKTsKKwkJfQorCSAgICB9CisJfSBlbHNlIGlmIChqMD41MSkgeworCSAgICBpZihqMD09MHg0MDApIHJldHVybiB4K3g7CS8qIGluZiBvciBOYU4gKi8KKwkgICAgZWxzZSByZXR1cm4geDsJCS8qIHggaXMgaW50ZWdyYWwgKi8KKwl9IGVsc2UgeworCSAgICBpID0gKCh1X2ludDMyX3QpKDB4ZmZmZmZmZmYpKT4+KGowLTIwKTsKKwkgICAgaWYoKGkxJmkpPT0wKSByZXR1cm4geDsJLyogeCBpcyBpbnRlZ3JhbCAqLworCSAgICBpPj49MTsKKwkgICAgaWYoKGkxJmkpIT0wKSBpMSA9IChpMSYofmkpKXwoKDB4NDAwMDAwMDApPj4oajAtMjApKTsKKwl9CisJSU5TRVJUX1dPUkRTKHgsaTAsaTEpOworCVNUUklDVF9BU1NJR04oZG91YmxlLHcsVFdPNTJbc3hdK3gpOworCXJldHVybiB3LVRXTzUyW3N4XTsKK30KKworI2lmIChMREJMX01BTlRfRElHID09IDUzKQorX193ZWFrX3JlZmVyZW5jZShyaW50LCByaW50bCk7CisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19yaW50Zi5jIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX3JpbnRmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjg3NDNhNAotLS0gL2Rldi9udWxsCisrKyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19yaW50Zi5jCkBAIC0wLDAgKzEsNTMgQEAKKy8qIHNfcmludGYuYyAtLSBmbG9hdCB2ZXJzaW9uIG9mIHNfcmludC5jLgorICogQ29udmVyc2lvbiB0byBmbG9hdCBieSBJYW4gTGFuY2UgVGF5bG9yLCBDeWdudXMgU3VwcG9ydCwgaWFuQGN5Z251cy5jb20uCisgKi8KKworLyoKKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIENvcHlyaWdodCAoQykgMTk5MyBieSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogRGV2ZWxvcGVkIGF0IFN1blBybywgYSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGJ1c2luZXNzLgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcworICogc29mdHdhcmUgaXMgZnJlZWx5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhpcyBub3RpY2UKKyAqIGlzIHByZXNlcnZlZC4KKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CitfX0ZCU0RJRCgiJEZyZWVCU0QkIik7CisKKyNpbmNsdWRlIDxmbG9hdC5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorCisjaW5jbHVkZSAibWF0aC5oIgorI2luY2x1ZGUgIm1hdGhfcHJpdmF0ZS5oIgorCitzdGF0aWMgY29uc3QgZmxvYXQKK1RXTzIzWzJdPXsKKyAgOC4zODg2MDgwMDAwZSswNiwgLyogMHg0YjAwMDAwMCAqLworIC04LjM4ODYwODAwMDBlKzA2LCAvKiAweGNiMDAwMDAwICovCit9OworCitmbG9hdAorcmludGYoZmxvYXQgeCkKK3sKKwlpbnQzMl90IGkwLGowLHN4OworCWZsb2F0IHcsdDsKKwlHRVRfRkxPQVRfV09SRChpMCx4KTsKKwlzeCA9IChpMD4+MzEpJjE7CisJajAgPSAoKGkwPj4yMykmMHhmZiktMHg3ZjsKKwlpZihqMDwyMykgeworCSAgICBpZihqMDwwKSB7CisJCWlmKChpMCYweDdmZmZmZmZmKT09MCkgcmV0dXJuIHg7CisJCVNUUklDVF9BU1NJR04oZmxvYXQsdyxUV08yM1tzeF0reCk7CisJICAgICAgICB0ID0gIHctVFdPMjNbc3hdOworCQlHRVRfRkxPQVRfV09SRChpMCx0KTsKKwkJU0VUX0ZMT0FUX1dPUkQodCwoaTAmMHg3ZmZmZmZmZil8KHN4PDwzMSkpOworCSAgICAgICAgcmV0dXJuIHQ7CisJICAgIH0KKwkgICAgU1RSSUNUX0FTU0lHTihmbG9hdCx3LFRXTzIzW3N4XSt4KTsKKwkgICAgcmV0dXJuIHctVFdPMjNbc3hdOworCX0KKwlpZihqMD09MHg4MCkgcmV0dXJuIHgreDsJLyogaW5mIG9yIE5hTiAqLworCWVsc2UgcmV0dXJuIHg7CQkJLyogeCBpcyBpbnRlZ3JhbCAqLworfQpkaWZmIC0tZ2l0IGEvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX3JpbnRsLmMgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfcmludGwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDNkZjg5Ci0tLSAvZGV2L251bGwKKysrIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX3JpbnRsLmMKQEAgLTAsMCArMSw5MCBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggRGF2aWQgU2NodWx0eiA8ZGFzQEZyZWVCU0QuT1JHPgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CitfX0ZCU0RJRCgiJEZyZWVCU0QkIik7CisKKyNpbmNsdWRlIDxmbG9hdC5oPgorI2luY2x1ZGUgPG1hdGguaD4KKworI2luY2x1ZGUgImZwbWF0aC5oIgorCisjaWYgTERCTF9NQVhfRVhQICE9IDB4NDAwMAorLyogV2UgYWxzbyByZXF1aXJlIHRoZSB1c3VhbCBiaWFzLCBtaW4gZXhwIGFuZCBleHBzaWduIHBhY2tpbmcuICovCisjZXJyb3IgIlVuc3VwcG9ydGVkIGxvbmcgZG91YmxlIGZvcm1hdCIKKyNlbmRpZgorCisjZGVmaW5lCUJJQVMJKExEQkxfTUFYX0VYUCAtIDEpCisKK3N0YXRpYyBjb25zdCBmbG9hdAorc2hpZnRbMl0gPSB7CisjaWYgTERCTF9NQU5UX0RJRyA9PSA2NAorCTB4MS4wcDYzLCAtMHgxLjBwNjMKKyNlbGlmIExEQkxfTUFOVF9ESUcgPT0gMTEzCisJMHgxLjBwMTEyLCAtMHgxLjBwMTEyCisjZWxzZQorI2Vycm9yICJVbnN1cHBvcnRlZCBsb25nIGRvdWJsZSBmb3JtYXQiCisjZW5kaWYKK307CitzdGF0aWMgY29uc3QgZmxvYXQgemVyb1syXSA9IHsgMC4wLCAtMC4wIH07CisKK2xvbmcgZG91YmxlCityaW50bChsb25nIGRvdWJsZSB4KQoreworCXVuaW9uIElFRUVsMmJpdHMgdTsKKwl1aW50MzJfdCBleHBzaWduOworCWludCBleCwgc2lnbjsKKworCXUuZSA9IHg7CisJZXhwc2lnbiA9IHUueGJpdHMuZXhwc2lnbjsKKwlleCA9IGV4cHNpZ24gJiAweDdmZmY7CisKKwlpZiAoZXggPj0gQklBUyArIExEQkxfTUFOVF9ESUcgLSAxKSB7CisJCWlmIChleCA9PSBCSUFTICsgTERCTF9NQVhfRVhQKQorCQkJcmV0dXJuICh4ICsgeCk7CS8qIEluZiwgTmFOLCBvciB1bnN1cHBvcnRlZCBmb3JtYXQgKi8KKwkJcmV0dXJuICh4KTsJCS8qIGZpbml0ZSBhbmQgYWxyZWFkeSBhbiBpbnRlZ2VyICovCisJfQorCXNpZ24gPSBleHBzaWduID4+IDE1OworCisJLyoKKwkgKiBUaGUgZm9sbG93aW5nIGNvZGUgYXNzdW1lcyB0aGF0IGludGVybWVkaWF0ZSByZXN1bHRzIGFyZQorCSAqIGV2YWx1YXRlZCBpbiBsb25nIGRvdWJsZSBwcmVjaXNpb24uIElmIHRoZXkgYXJlIGV2YWx1YXRlZCBpbgorCSAqIGdyZWF0ZXIgcHJlY2lzaW9uLCBkb3VibGUgcm91bmRpbmcgbWF5IG9jY3VyLCBhbmQgaWYgdGhleSBhcmUKKwkgKiBldmFsdWF0ZWQgaW4gbGVzcyBwcmVjaXNpb24gKGFzIG9uIGkzODYpLCByZXN1bHRzIHdpbGwgYmUKKwkgKiB3aWxkbHkgaW5jb3JyZWN0LgorCSAqLworCXggKz0gc2hpZnRbc2lnbl07CisJeCAtPSBzaGlmdFtzaWduXTsKKworCS8qCisJICogSWYgdGhlIHJlc3VsdCBpcyArLTAsIHRoZW4gaXQgbXVzdCBoYXZlIHRoZSBzYW1lIHNpZ24gYXMgeCwgYnV0CisJICogdGhlIGFib3ZlIGNhbGN1bGF0aW9uIGRvZXNuJ3QgYWx3YXlzIGdpdmUgdGhpcy4gIEZpeCB1cCB0aGUgc2lnbi4KKwkgKi8KKwlpZiAoZXggPCBCSUFTICYmIHggPT0gMC4wTCkKKwkJcmV0dXJuICh6ZXJvW3NpZ25dKTsKKworCXJldHVybiAoeCk7Cit9CmRpZmYgLS1naXQgYS9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3Nfcm91bmQuYyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19yb3VuZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1ZGUzMWIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3Nfcm91bmQuYwpAQCAtMCwwICsxLDUxIEBACisvKi0KKyAqIENvcHlyaWdodCAoYykgMjAwMywgU3RldmVuIEcuIEthcmdsCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSB1bm1vZGlmaWVkLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucywgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUworICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorX19GQlNESUQoIiRGcmVlQlNEJCIpOworCisjaW5jbHVkZSA8bWF0aC5oPgorCitkb3VibGUKK3JvdW5kKGRvdWJsZSB4KQoreworCWRvdWJsZSB0OworCisJaWYgKCFpc2Zpbml0ZSh4KSkKKwkJcmV0dXJuICh4KTsKKworCWlmICh4ID49IDAuMCkgeworCQl0ID0gZmxvb3IoeCk7CisJCWlmICh0IC0geCA8PSAtMC41KQorCQkJdCArPSAxLjA7CisJCXJldHVybiAodCk7CisJfSBlbHNlIHsKKwkJdCA9IGZsb29yKC14KTsKKwkJaWYgKHQgKyB4IDw9IC0wLjUpCisJCQl0ICs9IDEuMDsKKwkJcmV0dXJuICgtdCk7CisJfQorfQpkaWZmIC0tZ2l0IGEvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX3JvdW5kZi5jIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX3JvdW5kZi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1MmU4ZTcKLS0tIC9kZXYvbnVsbAorKysgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3Nfcm91bmRmLmMKQEAgLTAsMCArMSw1MSBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMDMsIFN0ZXZlbiBHLiBLYXJnbAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UgdW5tb2RpZmllZCwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMsIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJTRCQiKTsKKworI2luY2x1ZGUgPG1hdGguaD4KKworZmxvYXQKK3JvdW5kZihmbG9hdCB4KQoreworCWZsb2F0IHQ7CisKKwlpZiAoIWlzZmluaXRlKHgpKQorCQlyZXR1cm4gKHgpOworCisJaWYgKHggPj0gMC4wKSB7CisJCXQgPSBmbG9vcmYoeCk7CisJCWlmICh0IC0geCA8PSAtMC41KQorCQkJdCArPSAxLjA7CisJCXJldHVybiAodCk7CisJfSBlbHNlIHsKKwkJdCA9IGZsb29yZigteCk7CisJCWlmICh0ICsgeCA8PSAtMC41KQorCQkJdCArPSAxLjA7CisJCXJldHVybiAoLXQpOworCX0KK30KZGlmZiAtLWdpdCBhL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19yb3VuZGwuYyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19yb3VuZGwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNzBiNjE3Ci0tLSAvZGV2L251bGwKKysrIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX3JvdW5kbC5jCkBAIC0wLDAgKzEsNTEgQEAKKy8qLQorICogQ29weXJpZ2h0IChjKSAyMDAzLCBTdGV2ZW4gRy4gS2FyZ2wKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlIHVubW9kaWZpZWQsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zLCBhbmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CitfX0ZCU0RJRCgiJEZyZWVCU0QkIik7CisKKyNpbmNsdWRlIDxtYXRoLmg+CisKK2xvbmcgZG91YmxlCityb3VuZGwobG9uZyBkb3VibGUgeCkKK3sKKwlsb25nIGRvdWJsZSB0OworCisJaWYgKCFpc2Zpbml0ZSh4KSkKKwkJcmV0dXJuICh4KTsKKworCWlmICh4ID49IDAuMCkgeworCQl0ID0gZmxvb3JsKHgpOworCQlpZiAodCAtIHggPD0gLTAuNSkKKwkJCXQgKz0gMS4wOworCQlyZXR1cm4gKHQpOworCX0gZWxzZSB7CisJCXQgPSBmbG9vcmwoLXgpOworCQlpZiAodCArIHggPD0gLTAuNSkKKwkJCXQgKz0gMS4wOworCQlyZXR1cm4gKC10KTsKKwl9Cit9CmRpZmYgLS1naXQgYS9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3Nfc2NhbGJsbi5jIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX3NjYWxibG4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNjA5ZDRlCi0tLSAvZGV2L251bGwKKysrIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX3NjYWxibG4uYwpAQCAtMCwwICsxLDc2IEBACisvKi0KKyAqIENvcHlyaWdodCAoYykgMjAwNCBEYXZpZCBTY2h1bHR6IDxkYXNARnJlZUJTRC5PUkc+CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJTRCQiKTsKKworI2luY2x1ZGUgPGxpbWl0cy5oPgorI2luY2x1ZGUgPG1hdGguaD4KKworZG91YmxlCitzY2FsYmxuIChkb3VibGUgeCwgbG9uZyBuKQoreworCWludCBpbjsKKworCWluID0gKGludCluOworCWlmIChpbiAhPSBuKSB7CisJCWlmIChuID4gMCkKKwkJCWluID0gSU5UX01BWDsKKwkJZWxzZQorCQkJaW4gPSBJTlRfTUlOOworCX0KKwlyZXR1cm4gKHNjYWxibih4LCBpbikpOworfQorCitmbG9hdAorc2NhbGJsbmYgKGZsb2F0IHgsIGxvbmcgbikKK3sKKwlpbnQgaW47CisKKwlpbiA9IChpbnQpbjsKKwlpZiAoaW4gIT0gbikgeworCQlpZiAobiA+IDApCisJCQlpbiA9IElOVF9NQVg7CisJCWVsc2UKKwkJCWluID0gSU5UX01JTjsKKwl9CisJcmV0dXJuIChzY2FsYm5mKHgsIGluKSk7Cit9CisKK2xvbmcgZG91YmxlCitzY2FsYmxubCAobG9uZyBkb3VibGUgeCwgbG9uZyBuKQoreworCWludCBpbjsKKworCWluID0gKGludCluOworCWlmIChpbiAhPSBuKSB7CisJCWlmIChuID4gMCkKKwkJCWluID0gSU5UX01BWDsKKwkJZWxzZQorCQkJaW4gPSBJTlRfTUlOOworCX0KKwlyZXR1cm4gKHNjYWxibmwoeCwgKGludCluKSk7Cit9CmRpZmYgLS1naXQgYS9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3Nfc2NhbGJuLmMgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3Nfc2NhbGJuLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTdlZmFhYgotLS0gL2Rldi9udWxsCisrKyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19zY2FsYm4uYwpAQCAtMCwwICsxLDY2IEBACisvKiBAKCMpc19zY2FsYm4uYyA1LjEgOTMvMDkvMjQgKi8KKy8qCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBDb3B5cmlnaHQgKEMpIDE5OTMgYnkgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIERldmVsb3BlZCBhdCBTdW5Qcm8sIGEgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBidXNpbmVzcy4KKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKKyAqIHNvZnR3YXJlIGlzIGZyZWVseSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoaXMgbm90aWNlCisgKiBpcyBwcmVzZXJ2ZWQuCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KKworI2lmbmRlZiBsaW50CitzdGF0aWMgY2hhciByY3NpZFtdID0gIiRGcmVlQlNEJCI7CisjZW5kaWYKKworLyoKKyAqIHNjYWxibiAoZG91YmxlIHgsIGludCBuKQorICogc2NhbGJuKHgsbikgcmV0dXJucyB4KiAyKipuICBjb21wdXRlZCBieSAgZXhwb25lbnQKKyAqIG1hbmlwdWxhdGlvbiByYXRoZXIgdGhhbiBieSBhY3R1YWxseSBwZXJmb3JtaW5nIGFuCisgKiBleHBvbmVudGlhdGlvbiBvciBhIG11bHRpcGxpY2F0aW9uLgorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKyNpbmNsdWRlIDxmbG9hdC5oPgorCisjaW5jbHVkZSAibWF0aC5oIgorI2luY2x1ZGUgIm1hdGhfcHJpdmF0ZS5oIgorCitzdGF0aWMgY29uc3QgZG91YmxlCit0d281NCAgID0gIDEuODAxNDM5ODUwOTQ4MTk4NDAwMDBlKzE2LCAvKiAweDQzNTAwMDAwLCAweDAwMDAwMDAwICovCit0d29tNTQgID0gIDUuNTUxMTE1MTIzMTI1NzgyNzAyMTJlLTE3LCAvKiAweDNDOTAwMDAwLCAweDAwMDAwMDAwICovCitodWdlICAgPSAxLjBlKzMwMCwKK3RpbnkgICA9IDEuMGUtMzAwOworCitkb3VibGUKK3NjYWxibiAoZG91YmxlIHgsIGludCBuKQoreworCWludDMyX3QgayxoeCxseDsKKwlFWFRSQUNUX1dPUkRTKGh4LGx4LHgpOworICAgICAgICBrID0gKGh4JjB4N2ZmMDAwMDApPj4yMDsJCS8qIGV4dHJhY3QgZXhwb25lbnQgKi8KKyAgICAgICAgaWYgKGs9PTApIHsJCQkJLyogMCBvciBzdWJub3JtYWwgeCAqLworICAgICAgICAgICAgaWYgKChseHwoaHgmMHg3ZmZmZmZmZikpPT0wKSByZXR1cm4geDsgLyogKy0wICovCisJICAgIHggKj0gdHdvNTQ7CisJICAgIEdFVF9ISUdIX1dPUkQoaHgseCk7CisJICAgIGsgPSAoKGh4JjB4N2ZmMDAwMDApPj4yMCkgLSA1NDsKKyAgICAgICAgICAgIGlmIChuPCAtNTAwMDApIHJldHVybiB0aW55Kng7IAkvKnVuZGVyZmxvdyovCisJICAgIH0KKyAgICAgICAgaWYgKGs9PTB4N2ZmKSByZXR1cm4geCt4OwkJLyogTmFOIG9yIEluZiAqLworICAgICAgICBrID0gaytuOworICAgICAgICBpZiAoayA+ICAweDdmZSkgcmV0dXJuIGh1Z2UqY29weXNpZ24oaHVnZSx4KTsgLyogb3ZlcmZsb3cgICovCisgICAgICAgIGlmIChrID4gMCkgCQkJCS8qIG5vcm1hbCByZXN1bHQgKi8KKwkgICAge1NFVF9ISUdIX1dPUkQoeCwoaHgmMHg4MDBmZmZmZil8KGs8PDIwKSk7IHJldHVybiB4O30KKyAgICAgICAgaWYgKGsgPD0gLTU0KQorICAgICAgICAgICAgaWYgKG4gPiA1MDAwMCkgCS8qIGluIGNhc2UgaW50ZWdlciBvdmVyZmxvdyBpbiBuK2sgKi8KKwkJcmV0dXJuIGh1Z2UqY29weXNpZ24oaHVnZSx4KTsJLypvdmVyZmxvdyovCisJICAgIGVsc2UgcmV0dXJuIHRpbnkqY29weXNpZ24odGlueSx4KTsgCS8qdW5kZXJmbG93Ki8KKyAgICAgICAgayArPSA1NDsJCQkJLyogc3Vibm9ybWFsIHJlc3VsdCAqLworCVNFVF9ISUdIX1dPUkQoeCwoaHgmMHg4MDBmZmZmZil8KGs8PDIwKSk7CisgICAgICAgIHJldHVybiB4KnR3b201NDsKK30KKworI2lmIChMREJMX01BTlRfRElHID09IDUzKQorX193ZWFrX3JlZmVyZW5jZShzY2FsYm4sIGxkZXhwbCk7CitfX3dlYWtfcmVmZXJlbmNlKHNjYWxibiwgc2NhbGJubCk7CisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19zY2FsYm5mLmMgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3Nfc2NhbGJuZi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2NjZjNzQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3Nfc2NhbGJuZi5jCkBAIC0wLDAgKzEsNTggQEAKKy8qIHNfc2NhbGJuZi5jIC0tIGZsb2F0IHZlcnNpb24gb2Ygc19zY2FsYm4uYy4KKyAqIENvbnZlcnNpb24gdG8gZmxvYXQgYnkgSWFuIExhbmNlIFRheWxvciwgQ3lnbnVzIFN1cHBvcnQsIGlhbkBjeWdudXMuY29tLgorICovCisKKy8qCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBDb3B5cmlnaHQgKEMpIDE5OTMgYnkgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIERldmVsb3BlZCBhdCBTdW5Qcm8sIGEgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBidXNpbmVzcy4KKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKKyAqIHNvZnR3YXJlIGlzIGZyZWVseSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoaXMgbm90aWNlCisgKiBpcyBwcmVzZXJ2ZWQuCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KKworI2lmbmRlZiBsaW50CitzdGF0aWMgY2hhciByY3NpZFtdID0gIiRGcmVlQlNEJCI7CisjZW5kaWYKKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorCisjaW5jbHVkZSAibWF0aC5oIgorI2luY2x1ZGUgIm1hdGhfcHJpdmF0ZS5oIgorCitzdGF0aWMgY29uc3QgZmxvYXQKK3R3bzI1ICAgPSAgMy4zNTU0NDMyMDBlKzA3LAkvKiAweDRjMDAwMDAwICovCit0d29tMjUgID0gIDIuOTgwMjMyMjM4OGUtMDgsCS8qIDB4MzMwMDAwMDAgKi8KK2h1Z2UgICA9IDEuMGUrMzAsCit0aW55ICAgPSAxLjBlLTMwOworCitmbG9hdAorc2NhbGJuZiAoZmxvYXQgeCwgaW50IG4pCit7CisJaW50MzJfdCBrLGl4OworCUdFVF9GTE9BVF9XT1JEKGl4LHgpOworICAgICAgICBrID0gKGl4JjB4N2Y4MDAwMDApPj4yMzsJCS8qIGV4dHJhY3QgZXhwb25lbnQgKi8KKyAgICAgICAgaWYgKGs9PTApIHsJCQkJLyogMCBvciBzdWJub3JtYWwgeCAqLworICAgICAgICAgICAgaWYgKChpeCYweDdmZmZmZmZmKT09MCkgcmV0dXJuIHg7IC8qICstMCAqLworCSAgICB4ICo9IHR3bzI1OworCSAgICBHRVRfRkxPQVRfV09SRChpeCx4KTsKKwkgICAgayA9ICgoaXgmMHg3ZjgwMDAwMCk+PjIzKSAtIDI1OworICAgICAgICAgICAgaWYgKG48IC01MDAwMCkgcmV0dXJuIHRpbnkqeDsgCS8qdW5kZXJmbG93Ki8KKwkgICAgfQorICAgICAgICBpZiAoaz09MHhmZikgcmV0dXJuIHgreDsJCS8qIE5hTiBvciBJbmYgKi8KKyAgICAgICAgayA9IGsrbjsKKyAgICAgICAgaWYgKGsgPiAgMHhmZSkgcmV0dXJuIGh1Z2UqY29weXNpZ25mKGh1Z2UseCk7IC8qIG92ZXJmbG93ICAqLworICAgICAgICBpZiAoayA+IDApIAkJCQkvKiBub3JtYWwgcmVzdWx0ICovCisJICAgIHtTRVRfRkxPQVRfV09SRCh4LChpeCYweDgwN2ZmZmZmKXwoazw8MjMpKTsgcmV0dXJuIHg7fQorICAgICAgICBpZiAoayA8PSAtMjUpCisgICAgICAgICAgICBpZiAobiA+IDUwMDAwKSAJLyogaW4gY2FzZSBpbnRlZ2VyIG92ZXJmbG93IGluIG4rayAqLworCQlyZXR1cm4gaHVnZSpjb3B5c2lnbmYoaHVnZSx4KTsJLypvdmVyZmxvdyovCisJICAgIGVsc2UgcmV0dXJuIHRpbnkqY29weXNpZ25mKHRpbnkseCk7CS8qdW5kZXJmbG93Ki8KKyAgICAgICAgayArPSAyNTsJCQkJLyogc3Vibm9ybWFsIHJlc3VsdCAqLworCVNFVF9GTE9BVF9XT1JEKHgsKGl4JjB4ODA3ZmZmZmYpfChrPDwyMykpOworICAgICAgICByZXR1cm4geCp0d29tMjU7Cit9CisKK19fc3Ryb25nX3JlZmVyZW5jZShzY2FsYm5mLCBsZGV4cGYpOwpkaWZmIC0tZ2l0IGEvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX3NjYWxibmwuYyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19zY2FsYm5sLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmM4OWY4ZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19zY2FsYm5sLmMKQEAgLTAsMCArMSw3MSBAQAorLyogQCgjKXNfc2NhbGJuLmMgNS4xIDkzLzA5LzI0ICovCisvKgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogQ29weXJpZ2h0IChDKSAxOTkzIGJ5IFN1biBNaWNyb3N5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBEZXZlbG9wZWQgYXQgU3VuUHJvLCBhIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gYnVzaW5lc3MuCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCisgKiBzb2Z0d2FyZSBpcyBmcmVlbHkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGlzIG5vdGljZQorICogaXMgcHJlc2VydmVkLgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCisKKyNpZm5kZWYgbGludAorc3RhdGljIGNoYXIgcmNzaWRbXSA9ICIkRnJlZUJTRCQiOworI2VuZGlmCisKKy8qCisgKiBzY2FsYm5sIChsb25nIGRvdWJsZSB4LCBpbnQgbikKKyAqIHNjYWxibmwoeCxuKSByZXR1cm5zIHgqIDIqKm4gIGNvbXB1dGVkIGJ5ICBleHBvbmVudAorICogbWFuaXB1bGF0aW9uIHJhdGhlciB0aGFuIGJ5IGFjdHVhbGx5IHBlcmZvcm1pbmcgYW4KKyAqIGV4cG9uZW50aWF0aW9uIG9yIGEgbXVsdGlwbGljYXRpb24uCisgKi8KKworLyoKKyAqIFdlIGFzc3VtZSB0aGF0IGEgbG9uZyBkb3VibGUgaGFzIGEgMTUtYml0IGV4cG9uZW50LiAgT24gc3lzdGVtcworICogd2hlcmUgbG9uZyBkb3VibGUgaXMgdGhlIHNhbWUgYXMgZG91YmxlLCBzY2FsYm5sKCkgaXMgYW4gYWxpYXMKKyAqIGZvciBzY2FsYm4oKSwgc28gd2UgZG9uJ3QgdXNlIHRoaXMgcm91dGluZS4KKyAqLworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisjaW5jbHVkZSA8ZmxvYXQuaD4KKyNpbmNsdWRlIDxtYXRoLmg+CisKKyNpbmNsdWRlICJmcG1hdGguaCIKKworI2lmIExEQkxfTUFYX0VYUCAhPSAweDQwMDAKKyNlcnJvciAiVW5zdXBwb3J0ZWQgbG9uZyBkb3VibGUgZm9ybWF0IgorI2VuZGlmCisKK3N0YXRpYyBjb25zdCBsb25nIGRvdWJsZQoraHVnZSA9IDB4MXAxNjAwMEwsCit0aW55ID0gMHgxcC0xNjAwMEw7CisKK2xvbmcgZG91YmxlCitzY2FsYm5sIChsb25nIGRvdWJsZSB4LCBpbnQgbikKK3sKKwl1bmlvbiBJRUVFbDJiaXRzIHU7CisJaW50IGs7CisJdS5lID0geDsKKyAgICAgICAgayA9IHUuYml0cy5leHA7CQkJCS8qIGV4dHJhY3QgZXhwb25lbnQgKi8KKyAgICAgICAgaWYgKGs9PTApIHsJCQkJLyogMCBvciBzdWJub3JtYWwgeCAqLworICAgICAgICAgICAgaWYgKCh1LmJpdHMubWFuaHx1LmJpdHMubWFubCk9PTApIHJldHVybiB4OwkvKiArLTAgKi8KKwkgICAgdS5lICo9IDB4MXArMTI4OworCSAgICBrID0gdS5iaXRzLmV4cCAtIDEyODsKKyAgICAgICAgICAgIGlmIChuPCAtNTAwMDApIHJldHVybiB0aW55Kng7IAkvKnVuZGVyZmxvdyovCisJICAgIH0KKyAgICAgICAgaWYgKGs9PTB4N2ZmZikgcmV0dXJuIHgreDsJCS8qIE5hTiBvciBJbmYgKi8KKyAgICAgICAgayA9IGsrbjsKKyAgICAgICAgaWYgKGsgPj0gMHg3ZmZmKSByZXR1cm4gaHVnZSpjb3B5c2lnbmwoaHVnZSx4KTsgLyogb3ZlcmZsb3cgICovCisgICAgICAgIGlmIChrID4gMCkgCQkJCS8qIG5vcm1hbCByZXN1bHQgKi8KKwkgICAge3UuYml0cy5leHAgPSBrOyByZXR1cm4gdS5lO30KKyAgICAgICAgaWYgKGsgPD0gLTEyOCkKKyAgICAgICAgICAgIGlmIChuID4gNTAwMDApIAkvKiBpbiBjYXNlIGludGVnZXIgb3ZlcmZsb3cgaW4gbitrICovCisJCXJldHVybiBodWdlKmNvcHlzaWduKGh1Z2UseCk7CS8qb3ZlcmZsb3cqLworCSAgICBlbHNlIHJldHVybiB0aW55KmNvcHlzaWduKHRpbnkseCk7IAkvKnVuZGVyZmxvdyovCisgICAgICAgIGsgKz0gMTI4OwkJCQkvKiBzdWJub3JtYWwgcmVzdWx0ICovCisJdS5iaXRzLmV4cCA9IGs7CisgICAgICAgIHJldHVybiB1LmUqMHgxcC0xMjg7Cit9CisKK19fc3Ryb25nX3JlZmVyZW5jZShzY2FsYm5sLCBsZGV4cGwpOwpkaWZmIC0tZ2l0IGEvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX3NpZ25iaXQuYyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19zaWduYml0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDFlYjNhYgotLS0gL2Rldi9udWxsCisrKyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc19zaWduYml0LmMKQEAgLTAsMCArMSw1OCBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMDMgTWlrZSBCYXJjcm9mdCA8bWlrZUBGcmVlQlNELm9yZz4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKgorICogJEZyZWVCU0QkCisgKi8KKworI2luY2x1ZGUgPG1hdGguaD4KKworI2luY2x1ZGUgImZwbWF0aC5oIgorCitpbnQKK19fc2lnbmJpdChkb3VibGUgZCkKK3sKKwl1bmlvbiBJRUVFZDJiaXRzIHU7CisKKwl1LmQgPSBkOworCXJldHVybiAodS5iaXRzLnNpZ24pOworfQorCitpbnQKK19fc2lnbmJpdGYoZmxvYXQgZikKK3sKKwl1bmlvbiBJRUVFZjJiaXRzIHU7CisKKwl1LmYgPSBmOworCXJldHVybiAodS5iaXRzLnNpZ24pOworfQorCitpbnQKK19fc2lnbmJpdGwobG9uZyBkb3VibGUgZSkKK3sKKwl1bmlvbiBJRUVFbDJiaXRzIHU7CisKKwl1LmUgPSBlOworCXJldHVybiAodS5iaXRzLnNpZ24pOworfQpkaWZmIC0tZ2l0IGEvbGlibS9zcmMvc19zaWduZ2FtLmMgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3Nfc2lnbmdhbS5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBsaWJtL3NyYy9zX3NpZ25nYW0uYwpyZW5hbWUgdG8gbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX3NpZ25nYW0uYwpkaWZmIC0tZ2l0IGEvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX3NpZ25pZmljYW5kLmMgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3Nfc2lnbmlmaWNhbmQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNTZlMzAwCi0tLSAvZGV2L251bGwKKysrIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX3NpZ25pZmljYW5kLmMKQEAgLTAsMCArMSwyOSBAQAorLyogQCgjKXNfc2lnbmlmLmMgNS4xIDkzLzA5LzI0ICovCisvKgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogQ29weXJpZ2h0IChDKSAxOTkzIGJ5IFN1biBNaWNyb3N5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBEZXZlbG9wZWQgYXQgU3VuUHJvLCBhIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gYnVzaW5lc3MuCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCisgKiBzb2Z0d2FyZSBpcyBmcmVlbHkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGlzIG5vdGljZQorICogaXMgcHJlc2VydmVkLgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJTRCQiKTsKKworLyoKKyAqIHNpZ25pZmljYW5kKHgpIGNvbXB1dGVzIGp1c3QKKyAqIAlzY2FsYih4LCAoZG91YmxlKSAtaWxvZ2IoeCkpLAorICogZm9yIGV4ZXJjaXNpbmcgdGhlIGZyYWN0aW9uLXBhcnQoRikgSUVFRSA3NTQtMTk4NSB0ZXN0IHZlY3Rvci4KKyAqLworCisjaW5jbHVkZSAibWF0aC5oIgorI2luY2x1ZGUgIm1hdGhfcHJpdmF0ZS5oIgorCitkb3VibGUKK3NpZ25pZmljYW5kKGRvdWJsZSB4KQoreworCXJldHVybiBfX2llZWU3NTRfc2NhbGIoeCwoZG91YmxlKSAtaWxvZ2IoeCkpOworfQpkaWZmIC0tZ2l0IGEvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX3NpZ25pZmljYW5kZi5jIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX3NpZ25pZmljYW5kZi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkMDMwZTIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3Nfc2lnbmlmaWNhbmRmLmMKQEAgLTAsMCArMSwyNiBAQAorLyogc19zaWduaWZpY2FuZGYuYyAtLSBmbG9hdCB2ZXJzaW9uIG9mIHNfc2lnbmlmaWNhbmQuYy4KKyAqIENvbnZlcnNpb24gdG8gZmxvYXQgYnkgSWFuIExhbmNlIFRheWxvciwgQ3lnbnVzIFN1cHBvcnQsIGlhbkBjeWdudXMuY29tLgorICovCisKKy8qCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBDb3B5cmlnaHQgKEMpIDE5OTMgYnkgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIERldmVsb3BlZCBhdCBTdW5Qcm8sIGEgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBidXNpbmVzcy4KKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKKyAqIHNvZnR3YXJlIGlzIGZyZWVseSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoaXMgbm90aWNlCisgKiBpcyBwcmVzZXJ2ZWQuCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorX19GQlNESUQoIiRGcmVlQlNEJCIpOworCisjaW5jbHVkZSAibWF0aC5oIgorI2luY2x1ZGUgIm1hdGhfcHJpdmF0ZS5oIgorCitmbG9hdAorc2lnbmlmaWNhbmRmKGZsb2F0IHgpCit7CisJcmV0dXJuIF9faWVlZTc1NF9zY2FsYmYoeCwoZmxvYXQpIC1pbG9nYmYoeCkpOworfQpkaWZmIC0tZ2l0IGEvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX3Npbi5jIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX3Npbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3ZWE4NDYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3Nfc2luLmMKQEAgLTAsMCArMSw4OSBAQAorLyogQCgjKXNfc2luLmMgNS4xIDkzLzA5LzI0ICovCisvKgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogQ29weXJpZ2h0IChDKSAxOTkzIGJ5IFN1biBNaWNyb3N5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBEZXZlbG9wZWQgYXQgU3VuUHJvLCBhIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gYnVzaW5lc3MuCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCisgKiBzb2Z0d2FyZSBpcyBmcmVlbHkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGlzIG5vdGljZQorICogaXMgcHJlc2VydmVkLgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJTRCQiKTsKKworLyogc2luKHgpCisgKiBSZXR1cm4gc2luZSBmdW5jdGlvbiBvZiB4LgorICoKKyAqIGtlcm5lbCBmdW5jdGlvbjoKKyAqCV9fa2VybmVsX3NpbgkJLi4uIHNpbmUgZnVuY3Rpb24gb24gWy1waS80LHBpLzRdCisgKglfX2tlcm5lbF9jb3MJCS4uLiBjb3NlIGZ1bmN0aW9uIG9uIFstcGkvNCxwaS80XQorICoJX19pZWVlNzU0X3JlbV9waW8yCS4uLiBhcmd1bWVudCByZWR1Y3Rpb24gcm91dGluZQorICoKKyAqIE1ldGhvZC4KKyAqICAgICAgTGV0IFMsQyBhbmQgVCBkZW5vdGUgdGhlIHNpbiwgY29zIGFuZCB0YW4gcmVzcGVjdGl2ZWx5IG9uCisgKglbLVBJLzQsICtQSS80XS4gUmVkdWNlIHRoZSBhcmd1bWVudCB4IHRvIHkxK3kyID0geC1rKnBpLzIKKyAqCWluIFstcGkvNCAsICtwaS80XSwgYW5kIGxldCBuID0gayBtb2QgNC4KKyAqCVdlIGhhdmUKKyAqCisgKiAgICAgICAgICBuICAgICAgICBzaW4oeCkgICAgICBjb3MoeCkgICAgICAgIHRhbih4KQorICogICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCSAgICAwCSAgICAgICBTCSAgIEMJCSBUCisgKgkgICAgMQkgICAgICAgQwkgIC1TCQktMS9UCisgKgkgICAgMgkgICAgICAtUwkgIC1DCQkgVAorICoJICAgIDMJICAgICAgLUMJICAgUwkJLTEvVAorICogICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBTcGVjaWFsIGNhc2VzOgorICogICAgICBMZXQgdHJpZyBiZSBhbnkgb2Ygc2luLCBjb3MsIG9yIHRhbi4KKyAqICAgICAgdHJpZygrLUlORikgIGlzIE5hTiwgd2l0aCBzaWduYWxzOworICogICAgICB0cmlnKE5hTikgICAgaXMgdGhhdCBOYU47CisgKgorICogQWNjdXJhY3k6CisgKglUUklHKHgpIHJldHVybnMgdHJpZyh4KSBuZWFybHkgcm91bmRlZAorICovCisKKyNpbmNsdWRlIDxmbG9hdC5oPgorCisjaW5jbHVkZSAibWF0aC5oIgorI2RlZmluZSBJTkxJTkVfUkVNX1BJTzIKKyNpbmNsdWRlICJtYXRoX3ByaXZhdGUuaCIKKyNpbmNsdWRlICJlX3JlbV9waW8yLmMiCisKK2RvdWJsZQorc2luKGRvdWJsZSB4KQoreworCWRvdWJsZSB5WzJdLHo9MC4wOworCWludDMyX3QgbiwgaXg7CisKKyAgICAvKiBIaWdoIHdvcmQgb2YgeC4gKi8KKwlHRVRfSElHSF9XT1JEKGl4LHgpOworCisgICAgLyogfHh8IH48IHBpLzQgKi8KKwlpeCAmPSAweDdmZmZmZmZmOworCWlmKGl4IDw9IDB4M2ZlOTIxZmIpIHsKKwkgICAgaWYoaXg8MHgzZTUwMDAwMCkJCQkvKiB8eHwgPCAyKiotMjYgKi8KKwkgICAgICAge2lmKChpbnQpeD09MCkgcmV0dXJuIHg7fQkvKiBnZW5lcmF0ZSBpbmV4YWN0ICovCisJICAgIHJldHVybiBfX2tlcm5lbF9zaW4oeCx6LDApOworCX0KKworICAgIC8qIHNpbihJbmYgb3IgTmFOKSBpcyBOYU4gKi8KKwllbHNlIGlmIChpeD49MHg3ZmYwMDAwMCkgcmV0dXJuIHgteDsKKworICAgIC8qIGFyZ3VtZW50IHJlZHVjdGlvbiBuZWVkZWQgKi8KKwllbHNlIHsKKwkgICAgbiA9IF9faWVlZTc1NF9yZW1fcGlvMih4LHkpOworCSAgICBzd2l0Y2gobiYzKSB7CisJCWNhc2UgMDogcmV0dXJuICBfX2tlcm5lbF9zaW4oeVswXSx5WzFdLDEpOworCQljYXNlIDE6IHJldHVybiAgX19rZXJuZWxfY29zKHlbMF0seVsxXSk7CisJCWNhc2UgMjogcmV0dXJuIC1fX2tlcm5lbF9zaW4oeVswXSx5WzFdLDEpOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIC1fX2tlcm5lbF9jb3MoeVswXSx5WzFdKTsKKwkgICAgfQorCX0KK30KKworI2lmIChMREJMX01BTlRfRElHID09IDUzKQorX193ZWFrX3JlZmVyZW5jZShzaW4sIHNpbmwpOworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3Nfc2luZi5jIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX3NpbmYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MWI1ZGMxCi0tLSAvZGV2L251bGwKKysrIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX3NpbmYuYwpAQCAtMCwwICsxLDg1IEBACisvKiBzX3NpbmYuYyAtLSBmbG9hdCB2ZXJzaW9uIG9mIHNfc2luLmMuCisgKiBDb252ZXJzaW9uIHRvIGZsb2F0IGJ5IElhbiBMYW5jZSBUYXlsb3IsIEN5Z251cyBTdXBwb3J0LCBpYW5AY3lnbnVzLmNvbS4KKyAqIE9wdGltaXplZCBieSBCcnVjZSBELiBFdmFucy4KKyAqLworCisvKgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogQ29weXJpZ2h0IChDKSAxOTkzIGJ5IFN1biBNaWNyb3N5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBEZXZlbG9wZWQgYXQgU3VuUHJvLCBhIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gYnVzaW5lc3MuCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCisgKiBzb2Z0d2FyZSBpcyBmcmVlbHkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGlzIG5vdGljZQorICogaXMgcHJlc2VydmVkLgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJTRCQiKTsKKworI2luY2x1ZGUgPGZsb2F0Lmg+CisKKyNpbmNsdWRlICJtYXRoLmgiCisjZGVmaW5lCUlOTElORV9LRVJORUxfQ09TREYKKyNkZWZpbmUJSU5MSU5FX0tFUk5FTF9TSU5ERgorI2RlZmluZSBJTkxJTkVfUkVNX1BJTzJGCisjaW5jbHVkZSAibWF0aF9wcml2YXRlLmgiCisjaW5jbHVkZSAiZV9yZW1fcGlvMmYuYyIKKyNpbmNsdWRlICJrX2Nvc2YuYyIKKyNpbmNsdWRlICJrX3NpbmYuYyIKKworLyogU21hbGwgbXVsdGlwbGVzIG9mIHBpLzIgcm91bmRlZCB0byBkb3VibGUgcHJlY2lzaW9uLiAqLworc3RhdGljIGNvbnN0IGRvdWJsZQorczFwaW8yID0gMSpNX1BJXzIsCQkJLyogMHgzRkY5MjFGQiwgMHg1NDQ0MkQxOCAqLworczJwaW8yID0gMipNX1BJXzIsCQkJLyogMHg0MDA5MjFGQiwgMHg1NDQ0MkQxOCAqLworczNwaW8yID0gMypNX1BJXzIsCQkJLyogMHg0MDEyRDk3QywgMHg3RjMzMjFEMiAqLworczRwaW8yID0gNCpNX1BJXzI7CQkJLyogMHg0MDE5MjFGQiwgMHg1NDQ0MkQxOCAqLworCitmbG9hdAorc2luZihmbG9hdCB4KQoreworCWRvdWJsZSB5OworCWludDMyX3QgbiwgaHgsIGl4OworCisJR0VUX0ZMT0FUX1dPUkQoaHgseCk7CisJaXggPSBoeCAmIDB4N2ZmZmZmZmY7CisKKwlpZihpeCA8PSAweDNmNDkwZmRhKSB7CQkvKiB8eHwgfjw9IHBpLzQgKi8KKwkgICAgaWYoaXg8MHgzOTgwMDAwMCkJCS8qIHx4fCA8IDIqKi0xMiAqLworCQlpZigoKGludCl4KT09MCkgcmV0dXJuIHg7CS8qIHggd2l0aCBpbmV4YWN0IGlmIHggIT0gMCAqLworCSAgICByZXR1cm4gX19rZXJuZWxfc2luZGYoeCk7CisJfQorCWlmKGl4PD0weDQwN2I1M2QxKSB7CQkvKiB8eHwgfjw9IDUqcGkvNCAqLworCSAgICBpZihpeDw9MHg0MDE2Y2JlMykgewkvKiB8eHwgfjw9IDNwaS80ICovCisJCWlmKGh4PjApCisJCSAgICByZXR1cm4gX19rZXJuZWxfY29zZGYoeCAtIHMxcGlvMik7CisJCWVsc2UKKwkJICAgIHJldHVybiAtX19rZXJuZWxfY29zZGYoeCArIHMxcGlvMik7CisJICAgIH0gZWxzZQorCQlyZXR1cm4gX19rZXJuZWxfc2luZGYoKGh4ID4gMCA/IHMycGlvMiA6IC1zMnBpbzIpIC0geCk7CisJfQorCWlmKGl4PD0weDQwZTIzMWQ1KSB7CQkvKiB8eHwgfjw9IDkqcGkvNCAqLworCSAgICBpZihpeDw9MHg0MGFmZWRkZikgewkvKiB8eHwgfjw9IDcqcGkvNCAqLworCQlpZihoeD4wKQorCQkgICAgcmV0dXJuIC1fX2tlcm5lbF9jb3NkZih4IC0gczNwaW8yKTsKKwkJZWxzZQorCQkgICAgcmV0dXJuIF9fa2VybmVsX2Nvc2RmKHggKyBzM3BpbzIpOworCSAgICB9IGVsc2UKKwkJcmV0dXJuIF9fa2VybmVsX3NpbmRmKHggKyAoaHggPiAwID8gLXM0cGlvMiA6IHM0cGlvMikpOworCX0KKworICAgIC8qIHNpbihJbmYgb3IgTmFOKSBpcyBOYU4gKi8KKwllbHNlIGlmIChpeD49MHg3ZjgwMDAwMCkgcmV0dXJuIHgteDsKKworICAgIC8qIGdlbmVyYWwgYXJndW1lbnQgcmVkdWN0aW9uIG5lZWRlZCAqLworCWVsc2UgeworCSAgICBuID0gX19pZWVlNzU0X3JlbV9waW8yZih4LCZ5KTsKKwkgICAgc3dpdGNoKG4mMykgeworCQljYXNlIDA6IHJldHVybiAgX19rZXJuZWxfc2luZGYoeSk7CisJCWNhc2UgMTogcmV0dXJuICBfX2tlcm5lbF9jb3NkZih5KTsKKwkJY2FzZSAyOiByZXR1cm4gIF9fa2VybmVsX3NpbmRmKC15KTsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAtX19rZXJuZWxfY29zZGYoeSk7CisJICAgIH0KKwl9Cit9CmRpZmYgLS1naXQgYS9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3Nfc2lubC5jIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX3NpbmwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNDU0ZjhmCi0tLSAvZGV2L251bGwKKysrIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX3NpbmwuYwpAQCAtMCwwICsxLDkzIEBACisvKi0KKyAqIENvcHlyaWdodCAoYykgMjAwNyBTdGV2ZW4gRy4gS2FyZ2wKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlIHVubW9kaWZpZWQsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zLCBhbmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CitfX0ZCU0RJRCgiJEZyZWVCU0QkIik7CisKKyNpbmNsdWRlIDxmbG9hdC5oPgorI2lmZGVmIF9faTM4Nl9fCisjaW5jbHVkZSA8aWVlZWZwLmg+CisjZW5kaWYKKworI2luY2x1ZGUgIm1hdGguaCIKKyNpbmNsdWRlICJtYXRoX3ByaXZhdGUuaCIKKyNpZiBMREJMX01BTlRfRElHID09IDY0CisjaW5jbHVkZSAiLi4vbGQ4MC9lX3JlbV9waW8ybC5oIgorI2VsaWYgTERCTF9NQU5UX0RJRyA9PSAxMTMKKyNpbmNsdWRlICIuLi9sZDEyOC9lX3JlbV9waW8ybC5oIgorI2Vsc2UKKyNlcnJvciAiVW5zdXBwb3J0ZWQgbG9uZyBkb3VibGUgZm9ybWF0IgorI2VuZGlmCisKK2xvbmcgZG91YmxlCitzaW5sKGxvbmcgZG91YmxlIHgpCit7CisJdW5pb24gSUVFRWwyYml0cyB6OworCWludCBlMCwgczsKKwlsb25nIGRvdWJsZSB5WzJdOworCWxvbmcgZG91YmxlIGhpLCBsbzsKKworCXouZSA9IHg7CisJcyA9IHouYml0cy5zaWduOworCXouYml0cy5zaWduID0gMDsKKworCS8qIElmIHggPSArLTAgb3IgeCBpcyBhIHN1Ym5vcm1hbCBudW1iZXIsIHRoZW4gc2luKHgpID0geCAqLworCWlmICh6LmJpdHMuZXhwID09IDApCisJCXJldHVybiAoeCk7CisKKwkvKiBJZiB4ID0gTmFOIG9yIEluZiwgdGhlbiBzaW4oeCkgPSBOYU4uICovCisJaWYgKHouYml0cy5leHAgPT0gMzI3NjcpCisJCXJldHVybiAoKHggLSB4KSAvICh4IC0geCkpOworCisJRU5URVJJKCk7CisKKwkvKiBPcHRpbWl6ZSB0aGUgY2FzZSB3aGVyZSB4IGlzIGFscmVhZHkgd2l0aGluIHJhbmdlLiAqLworCWlmICh6LmUgPCBNX1BJXzQpIHsKKwkJaGkgPSBfX2tlcm5lbF9zaW5sKHouZSwgMCwgMCk7CisJCVJFVFVSTkkocyA/IC1oaSA6IGhpKTsKKwl9CisKKwllMCA9IF9faWVlZTc1NF9yZW1fcGlvMmwoeCwgeSk7CisJaGkgPSB5WzBdOworCWxvID0geVsxXTsKKworCXN3aXRjaCAoZTAgJiAzKSB7CisJY2FzZSAwOgorCSAgICBoaSA9IF9fa2VybmVsX3NpbmwoaGksIGxvLCAxKTsKKwkgICAgYnJlYWs7CisJY2FzZSAxOgorCSAgICBoaSA9IF9fa2VybmVsX2Nvc2woaGksIGxvKTsKKwkgICAgYnJlYWs7CisJY2FzZSAyOgorCSAgICBoaSA9IC0gX19rZXJuZWxfc2lubChoaSwgbG8sIDEpOworCSAgICBicmVhazsKKwljYXNlIDM6CisJICAgIGhpID0gLSBfX2tlcm5lbF9jb3NsKGhpLCBsbyk7CisJICAgIGJyZWFrOworCX0KKwkKKwlSRVRVUk5JKGhpKTsKK30KZGlmZiAtLWdpdCBhL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc190YW4uYyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc190YW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTZjMjdlCi0tLSAvZGV2L251bGwKKysrIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX3Rhbi5jCkBAIC0wLDAgKzEsODMgQEAKKy8qIEAoIylzX3Rhbi5jIDUuMSA5My8wOS8yNCAqLworLyoKKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIENvcHlyaWdodCAoQykgMTk5MyBieSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogRGV2ZWxvcGVkIGF0IFN1blBybywgYSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGJ1c2luZXNzLgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcworICogc29mdHdhcmUgaXMgZnJlZWx5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhpcyBub3RpY2UKKyAqIGlzIHByZXNlcnZlZC4KKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CitfX0ZCU0RJRCgiJEZyZWVCU0QkIik7CisKKy8qIHRhbih4KQorICogUmV0dXJuIHRhbmdlbnQgZnVuY3Rpb24gb2YgeC4KKyAqCisgKiBrZXJuZWwgZnVuY3Rpb246CisgKglfX2tlcm5lbF90YW4JCS4uLiB0YW5nZW50IGZ1bmN0aW9uIG9uIFstcGkvNCxwaS80XQorICoJX19pZWVlNzU0X3JlbV9waW8yCS4uLiBhcmd1bWVudCByZWR1Y3Rpb24gcm91dGluZQorICoKKyAqIE1ldGhvZC4KKyAqICAgICAgTGV0IFMsQyBhbmQgVCBkZW5vdGUgdGhlIHNpbiwgY29zIGFuZCB0YW4gcmVzcGVjdGl2ZWx5IG9uCisgKglbLVBJLzQsICtQSS80XS4gUmVkdWNlIHRoZSBhcmd1bWVudCB4IHRvIHkxK3kyID0geC1rKnBpLzIKKyAqCWluIFstcGkvNCAsICtwaS80XSwgYW5kIGxldCBuID0gayBtb2QgNC4KKyAqCVdlIGhhdmUKKyAqCisgKiAgICAgICAgICBuICAgICAgICBzaW4oeCkgICAgICBjb3MoeCkgICAgICAgIHRhbih4KQorICogICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCSAgICAwCSAgICAgICBTCSAgIEMJCSBUCisgKgkgICAgMQkgICAgICAgQwkgIC1TCQktMS9UCisgKgkgICAgMgkgICAgICAtUwkgIC1DCQkgVAorICoJICAgIDMJICAgICAgLUMJICAgUwkJLTEvVAorICogICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBTcGVjaWFsIGNhc2VzOgorICogICAgICBMZXQgdHJpZyBiZSBhbnkgb2Ygc2luLCBjb3MsIG9yIHRhbi4KKyAqICAgICAgdHJpZygrLUlORikgIGlzIE5hTiwgd2l0aCBzaWduYWxzOworICogICAgICB0cmlnKE5hTikgICAgaXMgdGhhdCBOYU47CisgKgorICogQWNjdXJhY3k6CisgKglUUklHKHgpIHJldHVybnMgdHJpZyh4KSBuZWFybHkgcm91bmRlZAorICovCisKKyNpbmNsdWRlIDxmbG9hdC5oPgorCisjaW5jbHVkZSAibWF0aC5oIgorI2RlZmluZSBJTkxJTkVfUkVNX1BJTzIKKyNpbmNsdWRlICJtYXRoX3ByaXZhdGUuaCIKKyNpbmNsdWRlICJlX3JlbV9waW8yLmMiCisKK2RvdWJsZQordGFuKGRvdWJsZSB4KQoreworCWRvdWJsZSB5WzJdLHo9MC4wOworCWludDMyX3QgbiwgaXg7CisKKyAgICAvKiBIaWdoIHdvcmQgb2YgeC4gKi8KKwlHRVRfSElHSF9XT1JEKGl4LHgpOworCisgICAgLyogfHh8IH48IHBpLzQgKi8KKwlpeCAmPSAweDdmZmZmZmZmOworCWlmKGl4IDw9IDB4M2ZlOTIxZmIpIHsKKwkgICAgaWYoaXg8MHgzZTQwMDAwMCkJCQkvKiB4IDwgMioqLTI3ICovCisJCWlmKChpbnQpeD09MCkgcmV0dXJuIHg7CQkvKiBnZW5lcmF0ZSBpbmV4YWN0ICovCisJICAgIHJldHVybiBfX2tlcm5lbF90YW4oeCx6LDEpOworCX0KKworICAgIC8qIHRhbihJbmYgb3IgTmFOKSBpcyBOYU4gKi8KKwllbHNlIGlmIChpeD49MHg3ZmYwMDAwMCkgcmV0dXJuIHgteDsJCS8qIE5hTiAqLworCisgICAgLyogYXJndW1lbnQgcmVkdWN0aW9uIG5lZWRlZCAqLworCWVsc2UgeworCSAgICBuID0gX19pZWVlNzU0X3JlbV9waW8yKHgseSk7CisJICAgIHJldHVybiBfX2tlcm5lbF90YW4oeVswXSx5WzFdLDEtKChuJjEpPDwxKSk7IC8qICAgMSAtLSBuIGV2ZW4KKwkJCQkJCQktMSAtLSBuIG9kZCAqLworCX0KK30KKworI2lmIChMREJMX01BTlRfRElHID09IDUzKQorX193ZWFrX3JlZmVyZW5jZSh0YW4sIHRhbmwpOworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfdGFuZi5jIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX3RhbmYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZmU4YzE3Ci0tLSAvZGV2L251bGwKKysrIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX3RhbmYuYwpAQCAtMCwwICsxLDcyIEBACisvKiBzX3RhbmYuYyAtLSBmbG9hdCB2ZXJzaW9uIG9mIHNfdGFuLmMuCisgKiBDb252ZXJzaW9uIHRvIGZsb2F0IGJ5IElhbiBMYW5jZSBUYXlsb3IsIEN5Z251cyBTdXBwb3J0LCBpYW5AY3lnbnVzLmNvbS4KKyAqIE9wdGltaXplZCBieSBCcnVjZSBELiBFdmFucy4KKyAqLworCisvKgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogQ29weXJpZ2h0IChDKSAxOTkzIGJ5IFN1biBNaWNyb3N5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBEZXZlbG9wZWQgYXQgU3VuUHJvLCBhIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gYnVzaW5lc3MuCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCisgKiBzb2Z0d2FyZSBpcyBmcmVlbHkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGlzIG5vdGljZQorICogaXMgcHJlc2VydmVkLgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJTRCQiKTsKKworI2luY2x1ZGUgPGZsb2F0Lmg+CisKKyNpbmNsdWRlICJtYXRoLmgiCisjZGVmaW5lCUlOTElORV9LRVJORUxfVEFOREYKKyNkZWZpbmUgSU5MSU5FX1JFTV9QSU8yRgorI2luY2x1ZGUgIm1hdGhfcHJpdmF0ZS5oIgorI2luY2x1ZGUgImVfcmVtX3BpbzJmLmMiCisjaW5jbHVkZSAia190YW5mLmMiCisKKy8qIFNtYWxsIG11bHRpcGxlcyBvZiBwaS8yIHJvdW5kZWQgdG8gZG91YmxlIHByZWNpc2lvbi4gKi8KK3N0YXRpYyBjb25zdCBkb3VibGUKK3QxcGlvMiA9IDEqTV9QSV8yLAkJCS8qIDB4M0ZGOTIxRkIsIDB4NTQ0NDJEMTggKi8KK3QycGlvMiA9IDIqTV9QSV8yLAkJCS8qIDB4NDAwOTIxRkIsIDB4NTQ0NDJEMTggKi8KK3QzcGlvMiA9IDMqTV9QSV8yLAkJCS8qIDB4NDAxMkQ5N0MsIDB4N0YzMzIxRDIgKi8KK3Q0cGlvMiA9IDQqTV9QSV8yOwkJCS8qIDB4NDAxOTIxRkIsIDB4NTQ0NDJEMTggKi8KKworZmxvYXQKK3RhbmYoZmxvYXQgeCkKK3sKKwlkb3VibGUgeTsKKwlpbnQzMl90IG4sIGh4LCBpeDsKKworCUdFVF9GTE9BVF9XT1JEKGh4LHgpOworCWl4ID0gaHggJiAweDdmZmZmZmZmOworCisJaWYoaXggPD0gMHgzZjQ5MGZkYSkgewkJLyogfHh8IH48PSBwaS80ICovCisJICAgIGlmKGl4PDB4Mzk4MDAwMDApCQkvKiB8eHwgPCAyKiotMTIgKi8KKwkJaWYoKChpbnQpeCk9PTApIHJldHVybiB4OwkvKiB4IHdpdGggaW5leGFjdCBpZiB4ICE9IDAgKi8KKwkgICAgcmV0dXJuIF9fa2VybmVsX3RhbmRmKHgsMSk7CisJfQorCWlmKGl4PD0weDQwN2I1M2QxKSB7CQkvKiB8eHwgfjw9IDUqcGkvNCAqLworCSAgICBpZihpeDw9MHg0MDE2Y2JlMykJCS8qIHx4fCB+PD0gM3BpLzQgKi8KKwkJcmV0dXJuIF9fa2VybmVsX3RhbmRmKHggKyAoaHg+MCA/IC10MXBpbzIgOiB0MXBpbzIpLCAtMSk7CisJICAgIGVsc2UKKwkJcmV0dXJuIF9fa2VybmVsX3RhbmRmKHggKyAoaHg+MCA/IC10MnBpbzIgOiB0MnBpbzIpLCAxKTsKKwl9CisJaWYoaXg8PTB4NDBlMjMxZDUpIHsJCS8qIHx4fCB+PD0gOSpwaS80ICovCisJICAgIGlmKGl4PD0weDQwYWZlZGRmKQkJLyogfHh8IH48PSA3KnBpLzQgKi8KKwkJcmV0dXJuIF9fa2VybmVsX3RhbmRmKHggKyAoaHg+MCA/IC10M3BpbzIgOiB0M3BpbzIpLCAtMSk7CisJICAgIGVsc2UKKwkJcmV0dXJuIF9fa2VybmVsX3RhbmRmKHggKyAoaHg+MCA/IC10NHBpbzIgOiB0NHBpbzIpLCAxKTsKKwl9CisKKyAgICAvKiB0YW4oSW5mIG9yIE5hTikgaXMgTmFOICovCisJZWxzZSBpZiAoaXg+PTB4N2Y4MDAwMDApIHJldHVybiB4LXg7CisKKyAgICAvKiBnZW5lcmFsIGFyZ3VtZW50IHJlZHVjdGlvbiBuZWVkZWQgKi8KKwllbHNlIHsKKwkgICAgbiA9IF9faWVlZTc1NF9yZW1fcGlvMmYoeCwmeSk7CisJICAgIC8qIGludGVnZXIgcGFyYW1ldGVyOiAxIC0tIG4gZXZlbjsgLTEgLS0gbiBvZGQgKi8KKwkgICAgcmV0dXJuIF9fa2VybmVsX3RhbmRmKHksMS0oKG4mMSk8PDEpKTsKKwl9Cit9CmRpZmYgLS1naXQgYS9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfdGFuaC5jIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX3RhbmguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NmUzNTY1Ci0tLSAvZGV2L251bGwKKysrIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX3RhbmguYwpAQCAtMCwwICsxLDc3IEBACisvKiBAKCMpc190YW5oLmMgNS4xIDkzLzA5LzI0ICovCisvKgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogQ29weXJpZ2h0IChDKSAxOTkzIGJ5IFN1biBNaWNyb3N5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBEZXZlbG9wZWQgYXQgU3VuUHJvLCBhIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gYnVzaW5lc3MuCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCisgKiBzb2Z0d2FyZSBpcyBmcmVlbHkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGlzIG5vdGljZQorICogaXMgcHJlc2VydmVkLgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJTRCQiKTsKKworLyogVGFuaCh4KQorICogUmV0dXJuIHRoZSBIeXBlcmJvbGljIFRhbmdlbnQgb2YgeAorICoKKyAqIE1ldGhvZCA6CisgKgkJCQkgICAgICAgeCAgICAteAorICoJCQkJICAgICAgZSAgLSBlCisgKgkwLiB0YW5oKHgpIGlzIGRlZmluZWQgdG8gYmUgLS0tLS0tLS0tLS0KKyAqCQkJCSAgICAgICB4ICAgIC14CisgKgkJCQkgICAgICBlICArIGUKKyAqCTEuIHJlZHVjZSB4IHRvIG5vbi1uZWdhdGl2ZSBieSB0YW5oKC14KSA9IC10YW5oKHgpLgorICoJMi4gIDAgICAgICA8PSB4IDwgIDIqKi0yOCA6IHRhbmgoeCkgOj0geCB3aXRoIGluZXhhY3QgaWYgeCAhPSAwCisgKgkJCQkJICAgICAgICAtdAorICoJICAgIDIqKi0yOCA8PSB4IDwgIDEgICAgICA6IHRhbmgoeCkgOj0gLS0tLS07IHQgPSBleHBtMSgtMngpCisgKgkJCQkJICAgICAgIHQgKyAyCisgKgkJCQkJCSAgICAgMgorICoJICAgIDEgICAgICA8PSB4IDwgIDIyICAgICA6IHRhbmgoeCkgOj0gMSAtIC0tLS0tOyB0ID0gZXhwbTEoMngpCisgKgkJCQkJCSAgIHQgKyAyCisgKgkgICAgMjIgICAgIDw9IHggPD0gSU5GICAgIDogdGFuaCh4KSA6PSAxLgorICoKKyAqIFNwZWNpYWwgY2FzZXM6CisgKgl0YW5oKE5hTikgaXMgTmFOOworICoJb25seSB0YW5oKDApPTAgaXMgZXhhY3QgZm9yIGZpbml0ZSBhcmd1bWVudC4KKyAqLworCisjaW5jbHVkZSAibWF0aC5oIgorI2luY2x1ZGUgIm1hdGhfcHJpdmF0ZS5oIgorCitzdGF0aWMgY29uc3QgZG91YmxlIG9uZSA9IDEuMCwgdHdvID0gMi4wLCB0aW55ID0gMS4wZS0zMDAsIGh1Z2UgPSAxLjBlMzAwOworCitkb3VibGUKK3RhbmgoZG91YmxlIHgpCit7CisJZG91YmxlIHQsejsKKwlpbnQzMl90IGp4LGl4OworCisJR0VUX0hJR0hfV09SRChqeCx4KTsKKwlpeCA9IGp4JjB4N2ZmZmZmZmY7CisKKyAgICAvKiB4IGlzIElORiBvciBOYU4gKi8KKwlpZihpeD49MHg3ZmYwMDAwMCkgeworCSAgICBpZiAoang+PTApIHJldHVybiBvbmUveCtvbmU7ICAgIC8qIHRhbmgoKy1pbmYpPSstMSAqLworCSAgICBlbHNlICAgICAgIHJldHVybiBvbmUveC1vbmU7ICAgIC8qIHRhbmgoTmFOKSA9IE5hTiAqLworCX0KKworICAgIC8qIHx4fCA8IDIyICovCisJaWYgKGl4IDwgMHg0MDM2MDAwMCkgewkJLyogfHh8PDIyICovCisJICAgIGlmIChpeDwweDNlMzAwMDAwKSB7CS8qIHx4fDwyKiotMjggKi8KKwkJaWYoaHVnZSt4Pm9uZSkgcmV0dXJuIHg7IC8qIHRhbmgodGlueSkgPSB0aW55IHdpdGggaW5leGFjdCAqLworCSAgICB9CisJICAgIGlmIChpeD49MHgzZmYwMDAwMCkgewkvKiB8eHw+PTEgICovCisJCXQgPSBleHBtMSh0d28qZmFicyh4KSk7CisJCXogPSBvbmUgLSB0d28vKHQrdHdvKTsKKwkgICAgfSBlbHNlIHsKKwkgICAgICAgIHQgPSBleHBtMSgtdHdvKmZhYnMoeCkpOworCSAgICAgICAgej0gLXQvKHQrdHdvKTsKKwkgICAgfQorICAgIC8qIHx4fCA+PSAyMiwgcmV0dXJuICstMSAqLworCX0gZWxzZSB7CisJICAgIHogPSBvbmUgLSB0aW55OwkJLyogcmFpc2UgaW5leGFjdCBmbGFnICovCisJfQorCXJldHVybiAoang+PTApPyB6OiAtejsKK30KZGlmZiAtLWdpdCBhL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc190YW5oZi5jIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX3RhbmhmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDRmMDljNgotLS0gL2Rldi9udWxsCisrKyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc190YW5oZi5jCkBAIC0wLDAgKzEsNTUgQEAKKy8qIHNfdGFuaGYuYyAtLSBmbG9hdCB2ZXJzaW9uIG9mIHNfdGFuaC5jLgorICogQ29udmVyc2lvbiB0byBmbG9hdCBieSBJYW4gTGFuY2UgVGF5bG9yLCBDeWdudXMgU3VwcG9ydCwgaWFuQGN5Z251cy5jb20uCisgKi8KKworLyoKKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIENvcHlyaWdodCAoQykgMTk5MyBieSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogRGV2ZWxvcGVkIGF0IFN1blBybywgYSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGJ1c2luZXNzLgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcworICogc29mdHdhcmUgaXMgZnJlZWx5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhpcyBub3RpY2UKKyAqIGlzIHByZXNlcnZlZC4KKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqLworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CitfX0ZCU0RJRCgiJEZyZWVCU0QkIik7CisKKyNpbmNsdWRlICJtYXRoLmgiCisjaW5jbHVkZSAibWF0aF9wcml2YXRlLmgiCisKK3N0YXRpYyBjb25zdCBmbG9hdCBvbmU9MS4wLCB0d289Mi4wLCB0aW55ID0gMS4wZS0zMCwgaHVnZSA9IDEuMGUzMDsKK2Zsb2F0Cit0YW5oZihmbG9hdCB4KQoreworCWZsb2F0IHQsejsKKwlpbnQzMl90IGp4LGl4OworCisJR0VUX0ZMT0FUX1dPUkQoangseCk7CisJaXggPSBqeCYweDdmZmZmZmZmOworCisgICAgLyogeCBpcyBJTkYgb3IgTmFOICovCisJaWYoaXg+PTB4N2Y4MDAwMDApIHsKKwkgICAgaWYgKGp4Pj0wKSByZXR1cm4gb25lL3grb25lOyAgICAvKiB0YW5oKCstaW5mKT0rLTEgKi8KKwkgICAgZWxzZSAgICAgICByZXR1cm4gb25lL3gtb25lOyAgICAvKiB0YW5oKE5hTikgPSBOYU4gKi8KKwl9CisKKyAgICAvKiB8eHwgPCA5ICovCisJaWYgKGl4IDwgMHg0MTEwMDAwMCkgewkJLyogfHh8PDkgKi8KKwkgICAgaWYgKGl4PDB4Mzk4MDAwMDApIHsJLyogfHh8PDIqKi0xMiAqLworCQlpZihodWdlK3g+b25lKSByZXR1cm4geDsgLyogdGFuaCh0aW55KSA9IHRpbnkgd2l0aCBpbmV4YWN0ICovCisJICAgIH0KKwkgICAgaWYgKGl4Pj0weDNmODAwMDAwKSB7CS8qIHx4fD49MSAgKi8KKwkJdCA9IGV4cG0xZih0d28qZmFic2YoeCkpOworCQl6ID0gb25lIC0gdHdvLyh0K3R3byk7CisJICAgIH0gZWxzZSB7CisJICAgICAgICB0ID0gZXhwbTFmKC10d28qZmFic2YoeCkpOworCSAgICAgICAgej0gLXQvKHQrdHdvKTsKKwkgICAgfQorICAgIC8qIHx4fCA+PSA5LCByZXR1cm4gKy0xICovCisJfSBlbHNlIHsKKwkgICAgeiA9IG9uZSAtIHRpbnk7CQkvKiByYWlzZSBpbmV4YWN0IGZsYWcgKi8KKwl9CisJcmV0dXJuIChqeD49MCk/IHo6IC16OworfQpkaWZmIC0tZ2l0IGEvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX3RhbmwuYyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc190YW5sLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWFkYzgzNwotLS0gL2Rldi9udWxsCisrKyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc190YW5sLmMKQEAgLTAsMCArMSw5NSBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgU3RldmVuIEcuIEthcmdsCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSB1bm1vZGlmaWVkLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucywgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUworICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorX19GQlNESUQoIiRGcmVlQlNEJCIpOworCisvKgorICogTGltaXRlZCB0ZXN0aW5nIG9uIHBzZXVkb3JhbmRvbSBudW1iZXJzIGRyYXduIHdpdGhpbiBbMDo0ZThdIHNob3dzCisgKiBhbiBhY2N1cmFjeSBvZiA8PSAxLjUgVUxQIHdoZXJlIDI0NzAyNCB2YWx1ZXMgb2YgeCBvdXQgb2YgNDAgbWlsbGlvbgorICogcG9zc2libGVzIHJlc3VsdGVkIGluIHRhbih4KSB0aGF0IGV4Y2VlZGVkIDAuNSBVTFAgKGllLiwgMC42JSkuCisgKi8KKworI2luY2x1ZGUgPGZsb2F0Lmg+CisjaWZkZWYgX19pMzg2X18KKyNpbmNsdWRlIDxpZWVlZnAuaD4KKyNlbmRpZgorCisjaW5jbHVkZSAibWF0aC5oIgorI2luY2x1ZGUgIm1hdGhfcHJpdmF0ZS5oIgorI2lmIExEQkxfTUFOVF9ESUcgPT0gNjQKKyNpbmNsdWRlICIuLi9sZDgwL2VfcmVtX3BpbzJsLmgiCisjZWxpZiBMREJMX01BTlRfRElHID09IDExMworI2luY2x1ZGUgIi4uL2xkMTI4L2VfcmVtX3BpbzJsLmgiCisjZWxzZQorI2Vycm9yICJVbnN1cHBvcnRlZCBsb25nIGRvdWJsZSBmb3JtYXQiCisjZW5kaWYKKworbG9uZyBkb3VibGUKK3RhbmwobG9uZyBkb3VibGUgeCkKK3sKKwl1bmlvbiBJRUVFbDJiaXRzIHo7CisJaW50IGUwLCBzOworCWxvbmcgZG91YmxlIHlbMl07CisJbG9uZyBkb3VibGUgaGksIGxvOworCisJei5lID0geDsKKwlzID0gei5iaXRzLnNpZ247CisJei5iaXRzLnNpZ24gPSAwOworCisJLyogSWYgeCA9ICstMCBvciB4IGlzIHN1Ym5vcm1hbCwgdGhlbiB0YW4oeCkgPSB4LiAqLworCWlmICh6LmJpdHMuZXhwID09IDApCisJCXJldHVybiAoeCk7CisKKwkvKiBJZiB4ID0gTmFOIG9yIEluZiwgdGhlbiB0YW4oeCkgPSBOYU4uICovCisJaWYgKHouYml0cy5leHAgPT0gMzI3NjcpCisJCXJldHVybiAoKHggLSB4KSAvICh4IC0geCkpOworCisJRU5URVJJKCk7CisKKwkvKiBPcHRpbWl6ZSB0aGUgY2FzZSB3aGVyZSB4IGlzIGFscmVhZHkgd2l0aGluIHJhbmdlLiAqLworCWlmICh6LmUgPCBNX1BJXzQpIHsKKwkJaGkgPSBfX2tlcm5lbF90YW5sKHouZSwgMCwgMCk7CisJCVJFVFVSTkkocyA/IC1oaSA6IGhpKTsKKwl9CisKKwllMCA9IF9faWVlZTc1NF9yZW1fcGlvMmwoeCwgeSk7CisJaGkgPSB5WzBdOworCWxvID0geVsxXTsKKworCXN3aXRjaCAoZTAgJiAzKSB7CisJY2FzZSAwOgorCWNhc2UgMjoKKwkgICAgaGkgPSBfX2tlcm5lbF90YW5sKGhpLCBsbywgMCk7CisJICAgIGJyZWFrOworCWNhc2UgMToKKwljYXNlIDM6CisJICAgIGhpID0gX19rZXJuZWxfdGFubChoaSwgbG8sIDEpOworCSAgICBicmVhazsKKwl9CisKKwlSRVRVUk5JKGhpKTsKK30KZGlmZiAtLWdpdCBhL2xpYm0vc3JjL3NfdGdhbW1hZi5jIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX3RnYW1tYWYuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbGlibS9zcmMvc190Z2FtbWFmLmMKcmVuYW1lIHRvIGxpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc190Z2FtbWFmLmMKZGlmZiAtLWdpdCBhL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc190cnVuYy5jIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX3RydW5jLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjNhNjc1MwotLS0gL2Rldi9udWxsCisrKyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc190cnVuYy5jCkBAIC0wLDAgKzEsNjcgQEAKKy8qIEAoIylzX2Zsb29yLmMgNS4xIDkzLzA5LzI0ICovCisvKgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogQ29weXJpZ2h0IChDKSAxOTkzIGJ5IFN1biBNaWNyb3N5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBEZXZlbG9wZWQgYXQgU3VuUHJvLCBhIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gYnVzaW5lc3MuCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCisgKiBzb2Z0d2FyZSBpcyBmcmVlbHkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGlzIG5vdGljZQorICogaXMgcHJlc2VydmVkLgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJTRCQiKTsKKworLyoKKyAqIHRydW5jKHgpCisgKiBSZXR1cm4geCByb3VuZGVkIHRvd2FyZCAwIHRvIGludGVncmFsIHZhbHVlCisgKiBNZXRob2Q6CisgKglCaXQgdHdpZGRsaW5nLgorICogRXhjZXB0aW9uOgorICoJSW5leGFjdCBmbGFnIHJhaXNlZCBpZiB4IG5vdCBlcXVhbCB0byB0cnVuYyh4KS4KKyAqLworCisjaW5jbHVkZSA8ZmxvYXQuaD4KKworI2luY2x1ZGUgIm1hdGguaCIKKyNpbmNsdWRlICJtYXRoX3ByaXZhdGUuaCIKKworc3RhdGljIGNvbnN0IGRvdWJsZSBodWdlID0gMS4wZTMwMDsKKworZG91YmxlCit0cnVuYyhkb3VibGUgeCkKK3sKKwlpbnQzMl90IGkwLGkxLGowOworCXVfaW50MzJfdCBpOworCUVYVFJBQ1RfV09SRFMoaTAsaTEseCk7CisJajAgPSAoKGkwPj4yMCkmMHg3ZmYpLTB4M2ZmOworCWlmKGowPDIwKSB7CisJICAgIGlmKGowPDApIHsgCS8qIHJhaXNlIGluZXhhY3QgaWYgeCAhPSAwICovCisJCWlmKGh1Z2UreD4wLjApIHsvKiB8eHw8MSwgc28gcmV0dXJuIDAqc2lnbih4KSAqLworCQkgICAgaTAgJj0gMHg4MDAwMDAwMFU7CisJCSAgICBpMSA9IDA7CisJCX0KKwkgICAgfSBlbHNlIHsKKwkJaSA9ICgweDAwMGZmZmZmKT4+ajA7CisJCWlmKCgoaTAmaSl8aTEpPT0wKSByZXR1cm4geDsgLyogeCBpcyBpbnRlZ3JhbCAqLworCQlpZihodWdlK3g+MC4wKSB7CS8qIHJhaXNlIGluZXhhY3QgZmxhZyAqLworCQkgICAgaTAgJj0gKH5pKTsgaTE9MDsKKwkJfQorCSAgICB9CisJfSBlbHNlIGlmIChqMD41MSkgeworCSAgICBpZihqMD09MHg0MDApIHJldHVybiB4K3g7CS8qIGluZiBvciBOYU4gKi8KKwkgICAgZWxzZSByZXR1cm4geDsJCS8qIHggaXMgaW50ZWdyYWwgKi8KKwl9IGVsc2UgeworCSAgICBpID0gKCh1X2ludDMyX3QpKDB4ZmZmZmZmZmYpKT4+KGowLTIwKTsKKwkgICAgaWYoKGkxJmkpPT0wKSByZXR1cm4geDsJLyogeCBpcyBpbnRlZ3JhbCAqLworCSAgICBpZihodWdlK3g+MC4wKQkJLyogcmFpc2UgaW5leGFjdCBmbGFnICovCisJCWkxICY9ICh+aSk7CisJfQorCUlOU0VSVF9XT1JEUyh4LGkwLGkxKTsKKwlyZXR1cm4geDsKK30KKworI2lmIExEQkxfTUFOVF9ESUcgPT0gNTMKK19fd2Vha19yZWZlcmVuY2UodHJ1bmMsIHRydW5jbCk7CisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc190cnVuY2YuYyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvc190cnVuY2YuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zODRlYWVlCi0tLSAvZGV2L251bGwKKysrIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX3RydW5jZi5jCkBAIC0wLDAgKzEsNTMgQEAKKy8qIEAoIylzX2Zsb29yLmMgNS4xIDkzLzA5LzI0ICovCisvKgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogQ29weXJpZ2h0IChDKSAxOTkzIGJ5IFN1biBNaWNyb3N5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBEZXZlbG9wZWQgYXQgU3VuUHJvLCBhIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gYnVzaW5lc3MuCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCisgKiBzb2Z0d2FyZSBpcyBmcmVlbHkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGlzIG5vdGljZQorICogaXMgcHJlc2VydmVkLgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJTRCQiKTsKKworLyoKKyAqIHRydW5jZih4KQorICogUmV0dXJuIHggcm91bmRlZCB0b3dhcmQgMCB0byBpbnRlZ3JhbCB2YWx1ZQorICogTWV0aG9kOgorICoJQml0IHR3aWRkbGluZy4KKyAqIEV4Y2VwdGlvbjoKKyAqCUluZXhhY3QgZmxhZyByYWlzZWQgaWYgeCBub3QgZXF1YWwgdG8gdHJ1bmNmKHgpLgorICovCisKKyNpbmNsdWRlICJtYXRoLmgiCisjaW5jbHVkZSAibWF0aF9wcml2YXRlLmgiCisKK3N0YXRpYyBjb25zdCBmbG9hdCBodWdlID0gMS4wZTMwRjsKKworZmxvYXQKK3RydW5jZihmbG9hdCB4KQoreworCWludDMyX3QgaTAsajA7CisJdV9pbnQzMl90IGk7CisJR0VUX0ZMT0FUX1dPUkQoaTAseCk7CisJajAgPSAoKGkwPj4yMykmMHhmZiktMHg3ZjsKKwlpZihqMDwyMykgeworCSAgICBpZihqMDwwKSB7IAkvKiByYWlzZSBpbmV4YWN0IGlmIHggIT0gMCAqLworCQlpZihodWdlK3g+MC4wRikJCS8qIHx4fDwxLCBzbyByZXR1cm4gMCpzaWduKHgpICovCisJCSAgICBpMCAmPSAweDgwMDAwMDAwOworCSAgICB9IGVsc2UgeworCQlpID0gKDB4MDA3ZmZmZmYpPj5qMDsKKwkJaWYoKGkwJmkpPT0wKSByZXR1cm4geDsgLyogeCBpcyBpbnRlZ3JhbCAqLworCQlpZihodWdlK3g+MC4wRikJCS8qIHJhaXNlIGluZXhhY3QgZmxhZyAqLworCQkgICAgaTAgJj0gKH5pKTsKKwkgICAgfQorCX0gZWxzZSB7CisJICAgIGlmKGowPT0weDgwKSByZXR1cm4geCt4OwkvKiBpbmYgb3IgTmFOICovCisJICAgIGVsc2UgcmV0dXJuIHg7CQkvKiB4IGlzIGludGVncmFsICovCisJfQorCVNFVF9GTE9BVF9XT1JEKHgsaTApOworCXJldHVybiB4OworfQpkaWZmIC0tZ2l0IGEvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX3RydW5jbC5jIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy9zX3RydW5jbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllMmI1MTEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3NfdHJ1bmNsLmMKQEAgLTAsMCArMSw2OCBAQAorLyoKKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIENvcHlyaWdodCAoQykgMTk5MyBieSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogRGV2ZWxvcGVkIGF0IFN1blBybywgYSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGJ1c2luZXNzLgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcworICogc29mdHdhcmUgaXMgZnJlZWx5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhpcyBub3RpY2UKKyAqIGlzIHByZXNlcnZlZC4KKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqCisgKiBGcm9tOiBAKCMpc19mbG9vci5jIDUuMSA5My8wOS8yNAorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJTRCQiKTsKKworLyoKKyAqIHRydW5jbCh4KQorICogUmV0dXJuIHggcm91bmRlZCB0b3dhcmQgMCB0byBpbnRlZ3JhbCB2YWx1ZQorICogTWV0aG9kOgorICoJQml0IHR3aWRkbGluZy4KKyAqIEV4Y2VwdGlvbjoKKyAqCUluZXhhY3QgZmxhZyByYWlzZWQgaWYgeCBub3QgZXF1YWwgdG8gdHJ1bmNsKHgpLgorICovCisKKyNpbmNsdWRlIDxmbG9hdC5oPgorI2luY2x1ZGUgPG1hdGguaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKworI2luY2x1ZGUgImZwbWF0aC5oIgorCisjaWZkZWYgTERCTF9JTVBMSUNJVF9OQklUCisjZGVmaW5lCU1BTkhfU0laRQkoTERCTF9NQU5IX1NJWkUgKyAxKQorI2Vsc2UKKyNkZWZpbmUJTUFOSF9TSVpFCUxEQkxfTUFOSF9TSVpFCisjZW5kaWYKKworc3RhdGljIGNvbnN0IGxvbmcgZG91YmxlIGh1Z2UgPSAxLjBlMzAwOworc3RhdGljIGNvbnN0IGZsb2F0IHplcm9bXSA9IHsgMC4wLCAtMC4wIH07CisKK2xvbmcgZG91YmxlCit0cnVuY2wobG9uZyBkb3VibGUgeCkKK3sKKwl1bmlvbiBJRUVFbDJiaXRzIHUgPSB7IC5lID0geCB9OworCWludCBlID0gdS5iaXRzLmV4cCAtIExEQkxfTUFYX0VYUCArIDE7CisKKwlpZiAoZSA8IE1BTkhfU0laRSAtIDEpIHsKKwkJaWYgKGUgPCAwKSB7CQkJLyogcmFpc2UgaW5leGFjdCBpZiB4ICE9IDAgKi8KKwkJCWlmIChodWdlICsgeCA+IDAuMCkKKwkJCQl1LmUgPSB6ZXJvW3UuYml0cy5zaWduXTsKKwkJfSBlbHNlIHsKKwkJCXVpbnQ2NF90IG0gPSAoKDFsbHUgPDwgTUFOSF9TSVpFKSAtIDEpID4+IChlICsgMSk7CisJCQlpZiAoKCh1LmJpdHMubWFuaCAmIG0pIHwgdS5iaXRzLm1hbmwpID09IDApCisJCQkJcmV0dXJuICh4KTsJLyogeCBpcyBpbnRlZ3JhbCAqLworCQkJaWYgKGh1Z2UgKyB4ID4gMC4wKSB7CS8qIHJhaXNlIGluZXhhY3QgZmxhZyAqLworCQkJCXUuYml0cy5tYW5oICY9IH5tOworCQkJCXUuYml0cy5tYW5sID0gMDsKKwkJCX0KKwkJfQorCX0gZWxzZSBpZiAoZSA8IExEQkxfTUFOVF9ESUcgLSAxKSB7CisJCXVpbnQ2NF90IG0gPSAodWludDY0X3QpLTEgPj4gKDY0IC0gTERCTF9NQU5UX0RJRyArIGUgKyAxKTsKKwkJaWYgKCh1LmJpdHMubWFubCAmIG0pID09IDApCisJCQlyZXR1cm4gKHgpOwkvKiB4IGlzIGludGVncmFsICovCisJCWlmIChodWdlICsgeCA+IDAuMCkJCS8qIHJhaXNlIGluZXhhY3QgZmxhZyAqLworCQkJdS5iaXRzLm1hbmwgJj0gfm07CisJfQorCXJldHVybiAodS5lKTsKK30KZGlmZiAtLWdpdCBhL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvd19jYWJzLmMgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3dfY2Ficy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0M2I4NTgKLS0tIC9kZXYvbnVsbAorKysgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3dfY2Ficy5jCkBAIC0wLDAgKzEsMjMgQEAKKy8qCisgKiBjYWJzKCkgd3JhcHBlciBmb3IgaHlwb3QoKS4KKyAqCisgKiBXcml0dGVuIGJ5IEouVC4gQ29ua2xpbiwgPGp0Y0B3aW1zZXkuY29tPgorICogUGxhY2VkIGludG8gdGhlIFB1YmxpYyBEb21haW4sIDE5OTQuCisgKi8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorX19GQlNESUQoIiRGcmVlQlNEJCIpOworCisjaW5jbHVkZSA8Y29tcGxleC5oPgorI2luY2x1ZGUgPGZsb2F0Lmg+CisjaW5jbHVkZSA8bWF0aC5oPgorCitkb3VibGUKK2NhYnMoZG91YmxlIGNvbXBsZXggeikKK3sKKwlyZXR1cm4gaHlwb3QoY3JlYWwoeiksIGNpbWFnKHopKTsKK30KKworI2lmIExEQkxfTUFOVF9ESUcgPT0gNTMKK19fd2Vha19yZWZlcmVuY2UoY2FicywgY2Fic2wpOworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3dfY2Fic2YuYyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvd19jYWJzZi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3YmZlMjIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3dfY2Fic2YuYwpAQCAtMCwwICsxLDIzIEBACisvKgorICogY2Fic2YoKSB3cmFwcGVyIGZvciBoeXBvdGYoKS4KKyAqCisgKiBXcml0dGVuIGJ5IEouVC4gQ29ua2xpbiwgPGp0Y0B3aW1zZXkuY29tPgorICogUGxhY2VkIGludG8gdGhlIFB1YmxpYyBEb21haW4sIDE5OTQuCisgKi8KKworI2lmbmRlZiBsaW50CitzdGF0aWMgY29uc3QgY2hhciByY3NpZFtdID0KKyAgIiRGcmVlQlNEJCI7CisjZW5kaWYgLyogbm90IGxpbnQgKi8KKworI2luY2x1ZGUgPGNvbXBsZXguaD4KKyNpbmNsdWRlIDxtYXRoLmg+CisjaW5jbHVkZSAibWF0aF9wcml2YXRlLmgiCisKK2Zsb2F0CitjYWJzZih6KQorCWZsb2F0IGNvbXBsZXggejsKK3sKKworCXJldHVybiBoeXBvdGYoY3JlYWxmKHopLCBjaW1hZ2YoeikpOworfQpkaWZmIC0tZ2l0IGEvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy93X2NhYnNsLmMgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3dfY2Fic2wuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNzE1ZTBjCi0tLSAvZGV2L251bGwKKysrIGIvbGlibS91cHN0cmVhbS1mcmVlYnNkL2xpYi9tc3VuL3NyYy93X2NhYnNsLmMKQEAgLTAsMCArMSwyMCBAQAorLyoKKyAqIGNhYnMoKSB3cmFwcGVyIGZvciBoeXBvdCgpLgorICoKKyAqIFdyaXR0ZW4gYnkgSi5ULiBDb25rbGluLCA8anRjQHdpbXNleS5jb20+CisgKiBQbGFjZWQgaW50byB0aGUgUHVibGljIERvbWFpbiwgMTk5NC4KKyAqCisgKiBNb2RpZmllZCBieSBTdGV2ZW4gRy4gS2FyZ2wgZm9yIHRoZSBsb25nIGRvdWJsZSB0eXBlLgorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJTRCQiKTsKKworI2luY2x1ZGUgPGNvbXBsZXguaD4KKyNpbmNsdWRlIDxtYXRoLmg+CisKK2xvbmcgZG91YmxlCitjYWJzbChsb25nIGRvdWJsZSBjb21wbGV4IHopCit7CisJcmV0dXJuIGh5cG90bChjcmVhbGwoeiksIGNpbWFnbCh6KSk7Cit9CmRpZmYgLS1naXQgYS9saWJtL3NyYy93X2RyZW0uYyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvd19kcmVtLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGxpYm0vc3JjL3dfZHJlbS5jCnJlbmFtZSB0byBsaWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3dfZHJlbS5jCmRpZmYgLS1naXQgYS9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3dfZHJlbWYuYyBiL2xpYm0vdXBzdHJlYW0tZnJlZWJzZC9saWIvbXN1bi9zcmMvd19kcmVtZi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiZmNmZjIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJtL3Vwc3RyZWFtLWZyZWVic2QvbGliL21zdW4vc3JjL3dfZHJlbWYuYwpAQCAtMCwwICsxLDE2IEBACisvKgorICogZHJlbWYoKSB3cmFwcGVyIGZvciByZW1haW5kZXJmKCkuCisgKgorICogV3JpdHRlbiBieSBKLlQuIENvbmtsaW4sIDxqdGNAd2ltc2V5LmNvbT4KKyAqIFBsYWNlZCBpbnRvIHRoZSBQdWJsaWMgRG9tYWluLCAxOTk0LgorICovCisvKiAkRnJlZUJTRCQgKi8KKworI2luY2x1ZGUgIm1hdGguaCIKKyNpbmNsdWRlICJtYXRoX3ByaXZhdGUuaCIKKworZmxvYXQKK2RyZW1mKGZsb2F0IHgsIGZsb2F0IHkpCit7CisJcmV0dXJuIHJlbWFpbmRlcmYoeCwgeSk7Cit9CmRpZmYgLS1naXQgYS9saWJzdGRjKysvQW5kcm9pZC5tayBiL2xpYnN0ZGMrKy9BbmRyb2lkLm1rCmluZGV4IDhiYzE4MWYuLjQxZTZjNGQgMTAwNjQ0Ci0tLSBhL2xpYnN0ZGMrKy9BbmRyb2lkLm1rCisrKyBiL2xpYnN0ZGMrKy9BbmRyb2lkLm1rCkBAIC0zLDcgKzMsNyBAQAogIyBDb21tb24gQysrIGZsYWdzIHRvIGJ1aWxkIHRoaXMgbGlicmFyeS4KICMgTm90ZSB0aGF0IHdlIG5lZWQgdG8gYWNjZXNzIHByaXZhdGUgQmlvbmljIGhlYWRlcnMKICMgYW5kIGRlZmluZSBBTkRST0lEX1NNUCBhY2NvcmRpbmdseS4KLWxpYnN0ZGMrK19jZmxhZ3MgOj0gLUliaW9uaWMvbGliYy9wcml2YXRlCitsaWJzdGRjKytfY2ZsYWdzIDo9IC1JYmlvbmljL2xpYmMvCiBpZmVxICgkKFRBUkdFVF9DUFVfU01QKSx0cnVlKQogICAgIGxpYnN0ZGMrK19jZmxhZ3MgKz0gLURBTkRST0lEX1NNUD0xCiBlbHNlCkBAIC0xOSw2ICsxOSw3IEBACiAJc3JjL3R5cGVpbmZvLmNwcAogCiBMT0NBTF9NT0RVTEU6PSBsaWJzdGRjKysKK0xPQ0FMX0FERElUSU9OQUxfREVQRU5ERU5DSUVTIDo9ICQoTE9DQUxfUEFUSCkvQW5kcm9pZC5tawogCiBMT0NBTF9DRkxBR1MgOj0gJChsaWJzdGRjKytfY2ZsYWdzKQogCkBAIC0zNyw2ICszOCw3IEBACiBMT0NBTF9DRkxBR1MgOj0gJChsaWJzdGRjKytfY2ZsYWdzKQogCiBMT0NBTF9NT0RVTEU6PSBsaWJzdGRjKysKK0xPQ0FMX0FERElUSU9OQUxfREVQRU5ERU5DSUVTIDo9ICQoTE9DQUxfUEFUSCkvQW5kcm9pZC5tawogCiBMT0NBTF9TWVNURU1fU0hBUkVEX0xJQlJBUklFUyA6PSBsaWJjCiAKZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy9OT1RJQ0UgYi9saWJzdGRjKysvTk9USUNFCmluZGV4IDM4MzFiMzQuLjZjMjYzZDEgMTAwNjQ0Ci0tLSBhL2xpYnN0ZGMrKy9OT1RJQ0UKKysrIGIvbGlic3RkYysrL05PVElDRQpAQCAtMSwyNiArMSw4NSBAQAotQ29weXJpZ2h0IChDKSAyMDA3IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKK0NvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CiBBbGwgcmlnaHRzIHJlc2VydmVkLgogCiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwogYXJlIG1ldDoKLTEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CitSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0zLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBwcm9qZWN0IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0gICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KK1JlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAgIGRpc3RyaWJ1dGlvbi4KIAotVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUFJPSkVDVCBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLUFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLUFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFBST0pFQ1QgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLURBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi1PUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLUhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi1MSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi1PVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKK0ZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCitDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCitJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCitPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKK0FORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKK09SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCiBTVUNIIERBTUFHRS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDb3B5cmlnaHQgKEMpIDIwMDkgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKK2FyZSBtZXQ6CitSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICAgZGlzdHJpYnV0aW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKK0ZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCitDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCitJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCitPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKK0FORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKK09SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCitTVUNIIERBTUFHRS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDb3B5cmlnaHQgKGMpIDE5OTQKK0hld2xldHQtUGFja2FyZCBDb21wYW55CisKK1Blcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGRpc3RyaWJ1dGUgYW5kIHNlbGwgdGhpcyBzb2Z0d2FyZQorYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwKK3Byb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kCit0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhcgoraW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiAgSGV3bGV0dC1QYWNrYXJkIENvbXBhbnkgbWFrZXMgbm8KK3JlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CitwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KKworCitDb3B5cmlnaHQgKGMpIDE5OTYsMTk5NworU2lsaWNvbiBHcmFwaGljcyBDb21wdXRlciBTeXN0ZW1zLCBJbmMuCisKK1Blcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGRpc3RyaWJ1dGUgYW5kIHNlbGwgdGhpcyBzb2Z0d2FyZQorYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwKK3Byb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kCit0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhcgoraW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiAgU2lsaWNvbiBHcmFwaGljcyBtYWtlcyBubworcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKK3B1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NvcHlyaWdodCAyMDA2IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCmRpZmYgLS1naXQgYS9saWJzdGRjKysvc3JjL29uZV90aW1lX2NvbnN0cnVjdGlvbi5jcHAgYi9saWJzdGRjKysvc3JjL29uZV90aW1lX2NvbnN0cnVjdGlvbi5jcHAKaW5kZXggMDBhZGNlOS4uOGJhMThkZiAxMDA2NDQKLS0tIGEvbGlic3RkYysrL3NyYy9vbmVfdGltZV9jb25zdHJ1Y3Rpb24uY3BwCisrKyBiL2xpYnN0ZGMrKy9zcmMvb25lX3RpbWVfY29uc3RydWN0aW9uLmNwcApAQCAtMSwxOSArMSwxNyBAQAogLyoKLSAqIG9uZV90aW1lX2NvbnN0cnVjdGlvbi5jcHAKLSAqCiAgKiBDb3B5cmlnaHQgMjAwNiBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogVGhpcyBmaWxlIGNvbnRhaW5zIEMrKyBBQkkgc3VwcG9ydCBmdW5jdGlvbnMgZm9yIG9uZSB0aW1lCi0gKiBjb25zdHJ1Y3RvcnMgYXMgZGVmaW5lZCBpbiB0aGUgIlJ1bi10aW1lIEFCSSBmb3IgdGhlIEFSTSBBcmNoaXRlY3R1cmUiCi0gKiBzZWN0aW9uIDQuNC4yCiAgKi8KIAogI2luY2x1ZGUgPHN0ZGRlZi5oPgogI2luY2x1ZGUgPHN5cy9hdG9taWNzLmg+CiAjaW5jbHVkZSA8ZW5kaWFuLmg+Ci0jaW5jbHVkZSA8YmlvbmljX2Z1dGV4Lmg+Ci0jaW5jbHVkZSA8YmlvbmljX2F0b21pY19pbmxpbmUuaD4KKyNpbmNsdWRlIDxwcml2YXRlL2Jpb25pY19mdXRleC5oPgorI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX2F0b21pY19pbmxpbmUuaD4KIAorLy8gVGhpcyBmaWxlIGNvbnRhaW5zIEMrKyBBQkkgc3VwcG9ydCBmdW5jdGlvbnMgZm9yIG9uZSB0aW1lCisvLyBjb25zdHJ1Y3RvcnMgYXMgZGVmaW5lZCBpbiB0aGUgIlJ1bi10aW1lIEFCSSBmb3IgdGhlIEFSTSBBcmNoaXRlY3R1cmUiCisvLyBzZWN0aW9uIDQuNC4yCisvLwogLy8gQVJNIEMrKyBBQkkgYW5kIEl0YW5pdW0veDg2IEMrKyBBQkkgaGFzIGRpZmZlcmVudCBkZWZpbml0aW9uIGZvcgogLy8gb25lIHRpbWUgY29uc3RydWN0aW9uOgogLy8KQEAgLTc1LDExICs3MywxMSBAQAogICAgIC8vIHJlYWR5OiB1bnRvdWNoZWQsIHJldHVybiAwCiAKIHJldHJ5OgotICAgIGlmIChfX2F0b21pY19jbXB4Y2hnKDAsIHBlbmRpbmcsICZndi0+c3RhdGUpID09IDApIHsKKyAgICBpZiAoX19iaW9uaWNfY21weGNoZygwLCBwZW5kaW5nLCAmZ3YtPnN0YXRlKSA9PSAwKSB7CiAgICAgICAgIEFORFJPSURfTUVNQkFSX0ZVTEwoKTsKICAgICAgICAgcmV0dXJuIDE7CiAgICAgfQotICAgIF9fYXRvbWljX2NtcHhjaGcocGVuZGluZywgd2FpdGluZywgJmd2LT5zdGF0ZSk7IC8vIEluZGljYXRlIHRoZXJlIGlzIGEgd2FpdGVyCisgICAgX19iaW9uaWNfY21weGNoZyhwZW5kaW5nLCB3YWl0aW5nLCAmZ3YtPnN0YXRlKTsgLy8gSW5kaWNhdGUgdGhlcmUgaXMgYSB3YWl0ZXIKICAgICBfX2Z1dGV4X3dhaXQoJmd2LT5zdGF0ZSwgd2FpdGluZywgTlVMTCk7CiAKICAgICBpZiAoZ3YtPnN0YXRlICE9IHJlYWR5KSAvLyBfX2N4YV9ndWFyZF9hYm9ydCB3YXMgY2FsbGVkLCBsZXQgZXZlcnkgdGhyZWFkIHRyeSBzaW5jZSB0aGVyZSBpcyBubyByZXR1cm4gY29kZSBmb3IgdGhpcyBjb25kaXRpb24KQEAgLTk1LDcgKzkzLDcgQEAKICAgICAvLyB3YWl0aW5nIC0+IHJlYWR5LCBhbmQgd2FrZQogCiAgICAgQU5EUk9JRF9NRU1CQVJfRlVMTCgpOwotICAgIGlmIChfX2F0b21pY19jbXB4Y2hnKHBlbmRpbmcsIHJlYWR5LCAmZ3YtPnN0YXRlKSA9PSAwKSB7CisgICAgaWYgKF9fYmlvbmljX2NtcHhjaGcocGVuZGluZywgcmVhZHksICZndi0+c3RhdGUpID09IDApIHsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvbGlic3RkYysrL3NyYy9wdXJlX3ZpcnR1YWwuY3BwIGIvbGlic3RkYysrL3NyYy9wdXJlX3ZpcnR1YWwuY3BwCmluZGV4IDY2M2MxZTkuLjZiNWUzMjggMTAwNjQ0Ci0tLSBhL2xpYnN0ZGMrKy9zcmMvcHVyZV92aXJ0dWFsLmNwcAorKysgYi9saWJzdGRjKysvc3JjL3B1cmVfdmlydHVhbC5jcHAKQEAgLTEsMTAgKzEsOCBAQAorI3VuZGVmIE5ERUJVRworI2luY2x1ZGUgPGFzc2VydC5oPgogCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLQotZXh0ZXJuICJDIiB2b2lkIF9fY3hhX3B1cmVfdmlydHVhbCgpCi17Ci0gICAgZnByaW50ZihzdGRlcnIsICJQdXJlIHZpcnR1YWwgZnVuY3Rpb24gY2FsbGVkLiAgQXJlIHlvdSBjYWxsaW5nIHZpcnR1YWwgbWV0aG9kcyBmcm9tIGEgZGVzdHJ1Y3Rvcj9cbiIpOwotICAgIGFib3J0KCk7CitleHRlcm4gIkMiIHZvaWQgX19jeGFfcHVyZV92aXJ0dWFsKCkgeworICAvLyBXZSBjYW4ndCBjYWxsIF9fbGliY19mb3JtYXRfbG9nIGZyb20gbGlic3RkYysrIGJlY2F1c2UgaXQncyBoaWRkZW4gYW5kIGluIGxpYmMsIHNvIGNoZWF0LgorICBhc3NlcnQoISJQdXJlIHZpcnR1YWwgZnVuY3Rpb24gY2FsbGVkLiBBcmUgeW91IGNhbGxpbmcgdmlydHVhbCBtZXRob2RzIGZyb20gYSBkZXN0cnVjdG9yPyIpOworICAvKiBOT1RSRUFDSEVEICovCiB9Ci0KZGlmZiAtLWdpdCBhL2xpYnRocmVhZF9kYi9BbmRyb2lkLm1rIGIvbGlidGhyZWFkX2RiL0FuZHJvaWQubWsKaW5kZXggYWY1MDZlZC4uNWRlZmUwMSAxMDA2NDQKLS0tIGEvbGlidGhyZWFkX2RiL0FuZHJvaWQubWsKKysrIGIvbGlidGhyZWFkX2RiL0FuZHJvaWQubWsKQEAgLTEsNyArMSw3IEBACiBMT0NBTF9QQVRIOj0gJChjYWxsIG15LWRpcikKIAogIwotIyBzdGF0aWMgCisjIHN0YXRpYwogIwogCiBpbmNsdWRlICQoQ0xFQVJfVkFSUykKQEAgLTEwLDYgKzEwLDcgQEAKIAlsaWJ0aHJlYWRfZGIuYwogCiBMT0NBTF9NT0RVTEU6PSBsaWJ0aHJlYWRfZGIKK0xPQ0FMX0FERElUSU9OQUxfREVQRU5ERU5DSUVTIDo9ICQoTE9DQUxfUEFUSCkvQW5kcm9pZC5tawogCiBpbmNsdWRlICQoQlVJTERfU1RBVElDX0xJQlJBUlkpCiAKQEAgLTIwLDcgKzIxLDggQEAKIGluY2x1ZGUgJChDTEVBUl9WQVJTKQogCiBMT0NBTF9XSE9MRV9TVEFUSUNfTElCUkFSSUVTIDo9IGxpYnRocmVhZF9kYgotTE9DQUxfTU9EVUxFOj1saWJ0aHJlYWRfZGIKK0xPQ0FMX01PRFVMRSA6PSBsaWJ0aHJlYWRfZGIKK0xPQ0FMX0FERElUSU9OQUxfREVQRU5ERU5DSUVTIDo9ICQoTE9DQUxfUEFUSCkvQW5kcm9pZC5tawogTE9DQUxfU0hBUkVEX0xJQlJBUklFUyA6PSBsaWJkbCBsaWJjCiBMT0NBTF9BTExPV19VTkRFRklORURfU1lNQk9MUyA6PSBmYWxzZQogTE9DQUxfU1lTVEVNX1NIQVJFRF9MSUJSQVJJRVMgOj0KZGlmZiAtLWdpdCBhL2xpYnRocmVhZF9kYi9OT1RJQ0UgYi9saWJ0aHJlYWRfZGIvTk9USUNFCmluZGV4IDM4MzFiMzQuLjU0ODdkZjYgMTAwNjQ0Ci0tLSBhL2xpYnRocmVhZF9kYi9OT1RJQ0UKKysrIGIvbGlidGhyZWFkX2RiL05PVElDRQpAQCAtMSwyNiArMSw0IEBACi1Db3B5cmlnaHQgKEMpIDIwMDcgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotQWxsIHJpZ2h0cyByZXNlcnZlZC4KK0NvcHlyaWdodCAyMDA2IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKIAotUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci1tb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLWFyZSBtZXQ6Ci0xLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0zLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBwcm9qZWN0IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0gICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUFJPSkVDVCBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLUFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLUFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFBST0pFQ1QgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLURBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi1PUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLUhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi1MSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi1PVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi1TVUNIIERBTUFHRS4KZGlmZiAtLWdpdCBhL2xpYnRocmVhZF9kYi9saWJ0aHJlYWRfZGIuYyBiL2xpYnRocmVhZF9kYi9saWJ0aHJlYWRfZGIuYwppbmRleCBlNzQ5Mzc3Li5iZDc4YWU2IDEwMDY0NAotLS0gYS9saWJ0aHJlYWRfZGIvbGlidGhyZWFkX2RiLmMKKysrIGIvbGlidGhyZWFkX2RiL2xpYnRocmVhZF9kYi5jCkBAIC0xNjEsNyArMTYxLDcgQEAKIHRkX3Rocl9nZXRfaW5mbyh0ZF90aHJoYW5kbGVfdCBjb25zdCAqIGhhbmRsZSwgdGRfdGhyaW5mb190ICogaW5mbykKIHsKICAgICBpbmZvLT50aV90aWQgPSBoYW5kbGUtPnRpZDsKLSAgICBpbmZvLT50aV9saWQgPSBoYW5kbGUtPnRpZDsgLy8gT3VyIHB0aHJlYWRzIHVzZXMga2VybmVsIGlkcyBmb3IgdGlkcworICAgIGluZm8tPnRpX2xpZCA9IGhhbmRsZS0+dGlkOwogICAgIGluZm8tPnRpX3N0YXRlID0gVERfVEhSX1NMRUVQOyAvKiBYWFggdGhpcyBuZWVkcyB0byBiZSByZWFkIGZyb20gL3Byb2MvPHBpZD4vdGFzay88dGlkPi4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBpcyBvbmx5IHVzZWQgdG8gc2VlIGlmIHRoZSB0aHJlYWQgaXMgYSB6b21iaWUgb3Igbm90ICovCiAgICAgcmV0dXJuIFREX09LOwpkaWZmIC0tZ2l0IGEvbGlua2VyL0FuZHJvaWQubWsgYi9saW5rZXIvQW5kcm9pZC5tawppbmRleCA4MDNiNmMzLi5kMTc3M2E4IDEwMDY0NAotLS0gYS9saW5rZXIvQW5kcm9pZC5taworKysgYi9saW5rZXIvQW5kcm9pZC5tawpAQCAtMSw1OCArMSw0NSBAQAogTE9DQUxfUEFUSDo9ICQoY2FsbCBteS1kaXIpCiBpbmNsdWRlICQoQ0xFQVJfVkFSUykKIAotTE9DQUxfU1JDX0ZJTEVTOj0gXAotCWFyY2gvJChUQVJHRVRfQVJDSCkvYmVnaW4uUyBcCi0JbGlua2VyLmMgXAotCWxpbmtlcl9lbnZpcm9uLmMgXAotCWxpbmtlcl9mb3JtYXQuYyBcCi0JcnQuYyBcCi0JZGxmY24uYyBcCi0JZGVidWdnZXIuYwotCi1pZmVxICgkKFRBUkdFVF9BUkNIKSxzaCkKLSMgU0gtNEEgc2VyaWVzIHZpcnR1YWwgYWRkcmVzcyByYW5nZSBmcm9tIDB4MDAwMDAwMDAgdG8gMHg3RkZGRkZGRi4KLUxJTktFUl9URVhUX0JBU0UgOj0gMHg3MDAwMDEwMAoraWZlcSAoJChUQVJHRVRfQVJDSCkseDg2KQorICAgIGxpbmtlcl9iZWdpbl9leHRlbnNpb24gOj0gYwogZWxzZQotIyBUaGlzIGlzIGFsaWduZWQgdG8gNEsgcGFnZSBib3VuZGFyeSBzbyB0aGF0IGJvdGggR05VIGxkIGFuZCBnb2xkIHdvcmsuICBHb2xkCi0jIGFjdHVhbGx5IHByb2R1Y2VzIGEgY29ycmVjdCBiaW5hcnkgd2l0aCBzdGFydGluZyBhZGRyZXNzIDB4QjAwMDAxMDAgYnV0IHRoZQotIyBleHRyYSBvYmpjb3B5IHN0ZXAgdG8gcmVuYW1lIHN5bWJvbHMgY2F1c2VzIHRoZSByZXN1bHRpbmcgYmluYXJ5IHRvIGJlIG1pc2FsaWduZWQKLSMgYW5kIHVubG9hZGFibGUuICBJbmNyZWFzaW5nIHRoZSBhbGlnbm1lbnQgYWRkcyBhbiBleHRyYSAzODQwIGJ5dGVzIGluIHBhZGRpbmcKLSMgYnV0IHN3aXRjaGluZyB0byBnb2xkIHNhdmVzIGFib3V0IDFNIG9mIHNwYWNlLgotTElOS0VSX1RFWFRfQkFTRSA6PSAweEIwMDAxMDAwCisgICAgbGlua2VyX2JlZ2luX2V4dGVuc2lvbiA6PSBTCiBlbmRpZgogCi0jIFRoZSBtYXhpbXVtIHNpemUgc2V0IGFzaWRlIGZvciB0aGUgbGlua2VyLCBmcm9tCi0jIExJTktFUl9URVhUX0JBU0Ugcm91bmRlZCBkb3duIHRvIGEgbWVnYWJ5dGUuCi1MSU5LRVJfQVJFQV9TSVpFIDo9IDB4MDEwMDAwMDAKK0xPQ0FMX1NSQ19GSUxFUzo9IFwKKyAgICBhcmNoLyQoVEFSR0VUX0FSQ0gpL2JlZ2luLiQobGlua2VyX2JlZ2luX2V4dGVuc2lvbikgXAorICAgIGRlYnVnZ2VyLmNwcCBcCisgICAgZGxmY24uY3BwIFwKKyAgICBsaW5rZXIuY3BwIFwKKyAgICBsaW5rZXJfZW52aXJvbi5jcHAgXAorICAgIGxpbmtlcl9waGRyLmNwcCBcCisgICAgcnQuY3BwCiAKLUxPQ0FMX0xERkxBR1MgOj0gLVdsLC1UdGV4dCwkKExJTktFUl9URVhUX0JBU0UpCitMT0NBTF9MREZMQUdTIDo9IC1zaGFyZWQgLVdsLC0tZXhjbHVkZS1saWJzLEFMTAogCi1MT0NBTF9DRkxBR1MgKz0gLURQUkVMSU5LCi1MT0NBTF9DRkxBR1MgKz0gLURMSU5LRVJfVEVYVF9CQVNFPSQoTElOS0VSX1RFWFRfQkFTRSkKLUxPQ0FMX0NGTEFHUyArPSAtRExJTktFUl9BUkVBX1NJWkU9JChMSU5LRVJfQVJFQV9TSVpFKQorTE9DQUxfQ0ZMQUdTICs9IC1mbm8tc3RhY2stcHJvdGVjdG9yIFwKKyAgICAgICAgLVdzdHJpY3Qtb3ZlcmZsb3c9NSBcCisgICAgICAgIC1mdmlzaWJpbGl0eT1oaWRkZW4gXAorICAgICAgICAtV2FsbCAtV2V4dHJhIC1XZXJyb3IKIAotIyBTZXQgTElOS0VSX0RFQlVHIHRvIGVpdGhlciAxIG9yIDAKLSMKLUxPQ0FMX0NGTEFHUyArPSAtRExJTktFUl9ERUJVRz0wCi0KLSMgd2UgbmVlZCB0byBhY2Nlc3MgdGhlIEJpb25pYyBwcml2YXRlIGhlYWRlciA8YmlvbmljX3Rscy5oPgotIyBpbiB0aGUgbGlua2VyOyBkdXBsaWNhdGUgdGhlIEhBVkVfQVJNX1RMU19SRUdJU1RFUiBkZWZpbml0aW9uCi0jIGZyb20gdGhlIGxpYmMgYnVpbGQKLWlmZXEgKCQoVEFSR0VUX0FSQ0gpLSQoQVJDSF9BUk1fSEFWRV9UTFNfUkVHSVNURVIpLGFybS10cnVlKQotICAgIExPQ0FMX0NGTEFHUyArPSAtREhBVkVfQVJNX1RMU19SRUdJU1RFUgotZW5kaWYKLUxPQ0FMX0NGTEFHUyArPSAtSSQoTE9DQUxfUEFUSCkvLi4vbGliYy9wcml2YXRlCisjIFdlIG5lZWQgdG8gYWNjZXNzIEJpb25pYyBwcml2YXRlIGhlYWRlcnMgaW4gdGhlIGxpbmtlci4KK0xPQ0FMX0NGTEFHUyArPSAtSSQoTE9DQUxfUEFUSCkvLi4vbGliYy8KIAogaWZlcSAoJChUQVJHRVRfQVJDSCksYXJtKQotTE9DQUxfQ0ZMQUdTICs9IC1EQU5EUk9JRF9BUk1fTElOS0VSCi1lbHNlCi0gIGlmZXEgKCQoVEFSR0VUX0FSQ0gpLHg4NikKKyAgICBMT0NBTF9DRkxBR1MgKz0gLURBTkRST0lEX0FSTV9MSU5LRVIKK2VuZGlmCisKK2lmZXEgKCQoVEFSR0VUX0FSQ0gpLHg4NikKICAgICBMT0NBTF9DRkxBR1MgKz0gLURBTkRST0lEX1g4Nl9MSU5LRVIKLSAgZW5kaWYKK2VuZGlmCisKK2lmZXEgKCQoVEFSR0VUX0FSQ0gpLG1pcHMpCisgICAgTE9DQUxfQ0ZMQUdTICs9IC1EQU5EUk9JRF9NSVBTX0xJTktFUgogZW5kaWYKIAogTE9DQUxfTU9EVUxFOj0gbGlua2VyCitMT0NBTF9BRERJVElPTkFMX0RFUEVOREVOQ0lFUyA6PSAkKExPQ0FMX1BBVEgpL0FuZHJvaWQubWsKIAogTE9DQUxfU1RBVElDX0xJQlJBUklFUyA6PSBsaWJjX25vbWFsbG9jCiAKQEAgLTY5LDkgKzU2LDIzIEBACiBMT0NBTF9NT0RVTEVfQ0xBU1MgOj0gRVhFQ1VUQUJMRVMKIExPQ0FMX01PRFVMRV9TVUZGSVggOj0gJChUQVJHRVRfRVhFQ1VUQUJMRV9TVUZGSVgpCiAKKyMgd2UgZG9uJ3Qgd2FudCBjcnRiZWdpbi5vIChiZWNhdXNlIHdlIGhhdmUgYmVnaW4ubyksIHNvIHVuc2V0IGl0CisjIGp1c3QgZm9yIHRoaXMgbW9kdWxlCitMT0NBTF9OT19DUlQgOj0gdHJ1ZQorCisjIFRPRE86IHNwbGl0IG91dCB0aGUgYXNmbGFncy4KK0xPQ0FMX0FTRkxBR1MgOj0gJChMT0NBTF9DRkxBR1MpCiAKIGluY2x1ZGUgJChCVUlMRF9TWVNURU0pL2R5bmFtaWNfYmluYXJ5Lm1rCiAKKyMgU2VlIGJ1aWxkL2NvcmUvZXhlY3V0YWJsZS5taworJChsaW5rZWRfbW9kdWxlKTogUFJJVkFURV9UQVJHRVRfR0xPQkFMX0xEX0RJUlMgOj0gJChUQVJHRVRfR0xPQkFMX0xEX0RJUlMpCiskKGxpbmtlZF9tb2R1bGUpOiBQUklWQVRFX1RBUkdFVF9HTE9CQUxfTERGTEFHUyA6PSAkKFRBUkdFVF9HTE9CQUxfTERGTEFHUykKKyQobGlua2VkX21vZHVsZSk6IFBSSVZBVEVfVEFSR0VUX0ZET19MSUIgOj0gJChUQVJHRVRfRkRPX0xJQikKKyQobGlua2VkX21vZHVsZSk6IFBSSVZBVEVfVEFSR0VUX0xJQkdDQyA6PSAkKFRBUkdFVF9MSUJHQ0MpCiskKGxpbmtlZF9tb2R1bGUpOiBQUklWQVRFX1RBUkdFVF9DUlRCRUdJTl9EWU5BTUlDX08gOj0gJChUQVJHRVRfQ1JUQkVHSU5fRFlOQU1JQ19PKQorJChsaW5rZWRfbW9kdWxlKTogUFJJVkFURV9UQVJHRVRfQ1JUQkVHSU5fU1RBVElDX08gOj0gJChUQVJHRVRfQ1JUQkVHSU5fU1RBVElDX08pCiskKGxpbmtlZF9tb2R1bGUpOiBQUklWQVRFX1RBUkdFVF9DUlRFTkRfTyA6PSAkKFRBUkdFVF9DUlRFTkRfTykKICQobGlua2VkX21vZHVsZSk6ICQoVEFSR0VUX0NSVEJFR0lOX1NUQVRJQ19PKSAkKGFsbF9vYmplY3RzKSAkKGFsbF9saWJyYXJpZXMpICQoVEFSR0VUX0NSVEVORF9PKQogCSQodHJhbnNmb3JtLW8tdG8tc3RhdGljLWV4ZWN1dGFibGUpCiAJQGVjaG8gInRhcmdldCBQcmVmaXhTeW1ib2xzOiAkKFBSSVZBVEVfTU9EVUxFKSAoJEApIgpAQCAtODAsMTEgKzgxLDMgQEAKICMKICMgZW5kIG9mIEJVSUxEX0VYRUNVVEFCTEUgaGFjawogIwotCi0jIHdlIGRvbid0IHdhbnQgY3J0YmVnaW4ubyAoYmVjYXVzZSB3ZSBoYXZlIGJlZ2luLm8pLCBzbyB1bnNldCBpdAotIyBqdXN0IGZvciB0aGlzIG1vZHVsZQotJChMT0NBTF9CVUlMVF9NT0RVTEUpOiBUQVJHRVRfQ1JUQkVHSU5fU1RBVElDX08gOj0KLSMgVGhpcyBsaW5lIGlzIG5vdCBzdHJpY3RseSBuZWNlc3NhcnkgYmVjYXVzZSB0aGUgZHluYW1pYyBsaW5rZXIgaXMgYnVpbHQKLSMgYXMgYSBzdGF0aWMgZXhlY3V0YWJsZSwgYnV0IGl0IHdvbid0IGh1cnQgaWYgaW4gdGhlIGZ1dHVyZSB3ZSBzdGFydAotIyBidWlsZGluZyB0aGUgbGlua2VyIGFzIGEgZHluYW1pYyBvbmUuCi0kKExPQ0FMX0JVSUxUX01PRFVMRSk6IFRBUkdFVF9DUlRCRUdJTl9EWU5BTUlDX08gOj0KZGlmZiAtLWdpdCBhL2xpbmtlci9OT1RJQ0UgYi9saW5rZXIvTk9USUNFCmluZGV4IGM1YjFlZmEuLjZhYjM0YTEgMTAwNjQ0Ci0tLSBhL2xpbmtlci9OT1RJQ0UKKysrIGIvbGlua2VyL05PVElDRQpAQCAtMSwxOTAgKzEsMTU2IEBACitDb3B5cmlnaHQgKEMpIDIwMDcgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAogCi0gICBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOCwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Cit5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCitZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIAotICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAogCi0gICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KK1VubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKK2Rpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCitXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KK1NlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKK2xpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFwYWNoZSBMaWNlbnNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBWZXJzaW9uIDIuMCwgSmFudWFyeSAyMDA0Ci0gICAgICAgICAgICAgICAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvCitDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorQWxsIHJpZ2h0cyByZXNlcnZlZC4KIAotICAgVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIFVTRSwgUkVQUk9EVUNUSU9OLCBBTkQgRElTVFJJQlVUSU9OCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworYXJlIG1ldDoKK1JlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCitSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgICBkaXN0cmlidXRpb24uCiAKLSAgIDEuIERlZmluaXRpb25zLgorVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKK0xJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCitGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKK0JVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECitBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCitPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKK09GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorU1VDSCBEQU1BR0UuCiAKLSAgICAgICJMaWNlbnNlIiBzaGFsbCBtZWFuIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgdXNlLCByZXByb2R1Y3Rpb24sCi0gICAgICBhbmQgZGlzdHJpYnV0aW9uIGFzIGRlZmluZWQgYnkgU2VjdGlvbnMgMSB0aHJvdWdoIDkgb2YgdGhpcyBkb2N1bWVudC4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotICAgICAgIkxpY2Vuc29yIiBzaGFsbCBtZWFuIHRoZSBjb3B5cmlnaHQgb3duZXIgb3IgZW50aXR5IGF1dGhvcml6ZWQgYnkKLSAgICAgIHRoZSBjb3B5cmlnaHQgb3duZXIgdGhhdCBpcyBncmFudGluZyB0aGUgTGljZW5zZS4KK0NvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CitBbGwgcmlnaHRzIHJlc2VydmVkLgogCi0gICAgICAiTGVnYWwgRW50aXR5IiBzaGFsbCBtZWFuIHRoZSB1bmlvbiBvZiB0aGUgYWN0aW5nIGVudGl0eSBhbmQgYWxsCi0gICAgICBvdGhlciBlbnRpdGllcyB0aGF0IGNvbnRyb2wsIGFyZSBjb250cm9sbGVkIGJ5LCBvciBhcmUgdW5kZXIgY29tbW9uCi0gICAgICBjb250cm9sIHdpdGggdGhhdCBlbnRpdHkuIEZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLAotICAgICAgImNvbnRyb2wiIG1lYW5zIChpKSB0aGUgcG93ZXIsIGRpcmVjdCBvciBpbmRpcmVjdCwgdG8gY2F1c2UgdGhlCi0gICAgICBkaXJlY3Rpb24gb3IgbWFuYWdlbWVudCBvZiBzdWNoIGVudGl0eSwgd2hldGhlciBieSBjb250cmFjdCBvcgotICAgICAgb3RoZXJ3aXNlLCBvciAoaWkpIG93bmVyc2hpcCBvZiBmaWZ0eSBwZXJjZW50ICg1MCUpIG9yIG1vcmUgb2YgdGhlCi0gICAgICBvdXRzdGFuZGluZyBzaGFyZXMsIG9yIChpaWkpIGJlbmVmaWNpYWwgb3duZXJzaGlwIG9mIHN1Y2ggZW50aXR5LgorUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKK2FyZSBtZXQ6CitSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICAgZGlzdHJpYnV0aW9uLgogCi0gICAgICAiWW91IiAob3IgIllvdXIiKSBzaGFsbCBtZWFuIGFuIGluZGl2aWR1YWwgb3IgTGVnYWwgRW50aXR5Ci0gICAgICBleGVyY2lzaW5nIHBlcm1pc3Npb25zIGdyYW50ZWQgYnkgdGhpcyBMaWNlbnNlLgorVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKK0xJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCitGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKK0JVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECitBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCitPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKK09GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorU1VDSCBEQU1BR0UuCiAKLSAgICAgICJTb3VyY2UiIGZvcm0gc2hhbGwgbWVhbiB0aGUgcHJlZmVycmVkIGZvcm0gZm9yIG1ha2luZyBtb2RpZmljYXRpb25zLAotICAgICAgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBzb2Z0d2FyZSBzb3VyY2UgY29kZSwgZG9jdW1lbnRhdGlvbgotICAgICAgc291cmNlLCBhbmQgY29uZmlndXJhdGlvbiBmaWxlcy4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotICAgICAgIk9iamVjdCIgZm9ybSBzaGFsbCBtZWFuIGFueSBmb3JtIHJlc3VsdGluZyBmcm9tIG1lY2hhbmljYWwKLSAgICAgIHRyYW5zZm9ybWF0aW9uIG9yIHRyYW5zbGF0aW9uIG9mIGEgU291cmNlIGZvcm0sIGluY2x1ZGluZyBidXQKLSAgICAgIG5vdCBsaW1pdGVkIHRvIGNvbXBpbGVkIG9iamVjdCBjb2RlLCBnZW5lcmF0ZWQgZG9jdW1lbnRhdGlvbiwKLSAgICAgIGFuZCBjb252ZXJzaW9ucyB0byBvdGhlciBtZWRpYSB0eXBlcy4KK0NvcHlyaWdodCAoQykgMjAwOC0yMDEwIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKK0FsbCByaWdodHMgcmVzZXJ2ZWQuCiAKLSAgICAgICJXb3JrIiBzaGFsbCBtZWFuIHRoZSB3b3JrIG9mIGF1dGhvcnNoaXAsIHdoZXRoZXIgaW4gU291cmNlIG9yCi0gICAgICBPYmplY3QgZm9ybSwgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIExpY2Vuc2UsIGFzIGluZGljYXRlZCBieSBhCi0gICAgICBjb3B5cmlnaHQgbm90aWNlIHRoYXQgaXMgaW5jbHVkZWQgaW4gb3IgYXR0YWNoZWQgdG8gdGhlIHdvcmsKLSAgICAgIChhbiBleGFtcGxlIGlzIHByb3ZpZGVkIGluIHRoZSBBcHBlbmRpeCBiZWxvdykuCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworYXJlIG1ldDoKK1JlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCitSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgICBkaXN0cmlidXRpb24uCiAKLSAgICAgICJEZXJpdmF0aXZlIFdvcmtzIiBzaGFsbCBtZWFuIGFueSB3b3JrLCB3aGV0aGVyIGluIFNvdXJjZSBvciBPYmplY3QKLSAgICAgIGZvcm0sIHRoYXQgaXMgYmFzZWQgb24gKG9yIGRlcml2ZWQgZnJvbSkgdGhlIFdvcmsgYW5kIGZvciB3aGljaCB0aGUKLSAgICAgIGVkaXRvcmlhbCByZXZpc2lvbnMsIGFubm90YXRpb25zLCBlbGFib3JhdGlvbnMsIG9yIG90aGVyIG1vZGlmaWNhdGlvbnMKLSAgICAgIHJlcHJlc2VudCwgYXMgYSB3aG9sZSwgYW4gb3JpZ2luYWwgd29yayBvZiBhdXRob3JzaGlwLiBGb3IgdGhlIHB1cnBvc2VzCi0gICAgICBvZiB0aGlzIExpY2Vuc2UsIERlcml2YXRpdmUgV29ya3Mgc2hhbGwgbm90IGluY2x1ZGUgd29ya3MgdGhhdCByZW1haW4KLSAgICAgIHNlcGFyYWJsZSBmcm9tLCBvciBtZXJlbHkgbGluayAob3IgYmluZCBieSBuYW1lKSB0byB0aGUgaW50ZXJmYWNlcyBvZiwKLSAgICAgIHRoZSBXb3JrIGFuZCBEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2YuCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKK0ZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCitDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCitJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCitPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKK0FORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKK09SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCitTVUNIIERBTUFHRS4KIAotICAgICAgIkNvbnRyaWJ1dGlvbiIgc2hhbGwgbWVhbiBhbnkgd29yayBvZiBhdXRob3JzaGlwLCBpbmNsdWRpbmcKLSAgICAgIHRoZSBvcmlnaW5hbCB2ZXJzaW9uIG9mIHRoZSBXb3JrIGFuZCBhbnkgbW9kaWZpY2F0aW9ucyBvciBhZGRpdGlvbnMKLSAgICAgIHRvIHRoYXQgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2YsIHRoYXQgaXMgaW50ZW50aW9uYWxseQotICAgICAgc3VibWl0dGVkIHRvIExpY2Vuc29yIGZvciBpbmNsdXNpb24gaW4gdGhlIFdvcmsgYnkgdGhlIGNvcHlyaWdodCBvd25lcgotICAgICAgb3IgYnkgYW4gaW5kaXZpZHVhbCBvciBMZWdhbCBFbnRpdHkgYXV0aG9yaXplZCB0byBzdWJtaXQgb24gYmVoYWxmIG9mCi0gICAgICB0aGUgY29weXJpZ2h0IG93bmVyLiBGb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwgInN1Ym1pdHRlZCIKLSAgICAgIG1lYW5zIGFueSBmb3JtIG9mIGVsZWN0cm9uaWMsIHZlcmJhbCwgb3Igd3JpdHRlbiBjb21tdW5pY2F0aW9uIHNlbnQKLSAgICAgIHRvIHRoZSBMaWNlbnNvciBvciBpdHMgcmVwcmVzZW50YXRpdmVzLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvCi0gICAgICBjb21tdW5pY2F0aW9uIG9uIGVsZWN0cm9uaWMgbWFpbGluZyBsaXN0cywgc291cmNlIGNvZGUgY29udHJvbCBzeXN0ZW1zLAotICAgICAgYW5kIGlzc3VlIHRyYWNraW5nIHN5c3RlbXMgdGhhdCBhcmUgbWFuYWdlZCBieSwgb3Igb24gYmVoYWxmIG9mLCB0aGUKLSAgICAgIExpY2Vuc29yIGZvciB0aGUgcHVycG9zZSBvZiBkaXNjdXNzaW5nIGFuZCBpbXByb3ZpbmcgdGhlIFdvcmssIGJ1dAotICAgICAgZXhjbHVkaW5nIGNvbW11bmljYXRpb24gdGhhdCBpcyBjb25zcGljdW91c2x5IG1hcmtlZCBvciBvdGhlcndpc2UKLSAgICAgIGRlc2lnbmF0ZWQgaW4gd3JpdGluZyBieSB0aGUgY29weXJpZ2h0IG93bmVyIGFzICJOb3QgYSBDb250cmlidXRpb24uIgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi0gICAgICAiQ29udHJpYnV0b3IiIHNoYWxsIG1lYW4gTGljZW5zb3IgYW5kIGFueSBpbmRpdmlkdWFsIG9yIExlZ2FsIEVudGl0eQotICAgICAgb24gYmVoYWxmIG9mIHdob20gYSBDb250cmlidXRpb24gaGFzIGJlZW4gcmVjZWl2ZWQgYnkgTGljZW5zb3IgYW5kCi0gICAgICBzdWJzZXF1ZW50bHkgaW5jb3Jwb3JhdGVkIHdpdGhpbiB0aGUgV29yay4KK0NvcHlyaWdodCAoQykgMjAxMCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CitBbGwgcmlnaHRzIHJlc2VydmVkLgogCi0gICAyLiBHcmFudCBvZiBDb3B5cmlnaHQgTGljZW5zZS4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YKLSAgICAgIHRoaXMgTGljZW5zZSwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIHRvIFlvdSBhIHBlcnBldHVhbCwKLSAgICAgIHdvcmxkd2lkZSwgbm9uLWV4Y2x1c2l2ZSwgbm8tY2hhcmdlLCByb3lhbHR5LWZyZWUsIGlycmV2b2NhYmxlCi0gICAgICBjb3B5cmlnaHQgbGljZW5zZSB0byByZXByb2R1Y2UsIHByZXBhcmUgRGVyaXZhdGl2ZSBXb3JrcyBvZiwKLSAgICAgIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIHN1YmxpY2Vuc2UsIGFuZCBkaXN0cmlidXRlIHRoZQotICAgICAgV29yayBhbmQgc3VjaCBEZXJpdmF0aXZlIFdvcmtzIGluIFNvdXJjZSBvciBPYmplY3QgZm9ybS4KK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCithcmUgbWV0OgorUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KK1JlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAgIGRpc3RyaWJ1dGlvbi4KIAotICAgMy4gR3JhbnQgb2YgUGF0ZW50IExpY2Vuc2UuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mCi0gICAgICB0aGlzIExpY2Vuc2UsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyB0byBZb3UgYSBwZXJwZXR1YWwsCi0gICAgICB3b3JsZHdpZGUsIG5vbi1leGNsdXNpdmUsIG5vLWNoYXJnZSwgcm95YWx0eS1mcmVlLCBpcnJldm9jYWJsZQotICAgICAgKGV4Y2VwdCBhcyBzdGF0ZWQgaW4gdGhpcyBzZWN0aW9uKSBwYXRlbnQgbGljZW5zZSB0byBtYWtlLCBoYXZlIG1hZGUsCi0gICAgICB1c2UsIG9mZmVyIHRvIHNlbGwsIHNlbGwsIGltcG9ydCwgYW5kIG90aGVyd2lzZSB0cmFuc2ZlciB0aGUgV29yaywKLSAgICAgIHdoZXJlIHN1Y2ggbGljZW5zZSBhcHBsaWVzIG9ubHkgdG8gdGhvc2UgcGF0ZW50IGNsYWltcyBsaWNlbnNhYmxlCi0gICAgICBieSBzdWNoIENvbnRyaWJ1dG9yIHRoYXQgYXJlIG5lY2Vzc2FyaWx5IGluZnJpbmdlZCBieSB0aGVpcgotICAgICAgQ29udHJpYnV0aW9uKHMpIGFsb25lIG9yIGJ5IGNvbWJpbmF0aW9uIG9mIHRoZWlyIENvbnRyaWJ1dGlvbihzKQotICAgICAgd2l0aCB0aGUgV29yayB0byB3aGljaCBzdWNoIENvbnRyaWJ1dGlvbihzKSB3YXMgc3VibWl0dGVkLiBJZiBZb3UKLSAgICAgIGluc3RpdHV0ZSBwYXRlbnQgbGl0aWdhdGlvbiBhZ2FpbnN0IGFueSBlbnRpdHkgKGluY2x1ZGluZyBhCi0gICAgICBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KSBhbGxlZ2luZyB0aGF0IHRoZSBXb3JrCi0gICAgICBvciBhIENvbnRyaWJ1dGlvbiBpbmNvcnBvcmF0ZWQgd2l0aGluIHRoZSBXb3JrIGNvbnN0aXR1dGVzIGRpcmVjdAotICAgICAgb3IgY29udHJpYnV0b3J5IHBhdGVudCBpbmZyaW5nZW1lbnQsIHRoZW4gYW55IHBhdGVudCBsaWNlbnNlcwotICAgICAgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlIGZvciB0aGF0IFdvcmsgc2hhbGwgdGVybWluYXRlCi0gICAgICBhcyBvZiB0aGUgZGF0ZSBzdWNoIGxpdGlnYXRpb24gaXMgZmlsZWQuCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKK0ZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCitDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCitJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCitPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKK0FORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKK09SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCitTVUNIIERBTUFHRS4KIAotICAgNC4gUmVkaXN0cmlidXRpb24uIFlvdSBtYXkgcmVwcm9kdWNlIGFuZCBkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUKLSAgICAgIFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mIGluIGFueSBtZWRpdW0sIHdpdGggb3Igd2l0aG91dAotICAgICAgbW9kaWZpY2F0aW9ucywgYW5kIGluIFNvdXJjZSBvciBPYmplY3QgZm9ybSwgcHJvdmlkZWQgdGhhdCBZb3UKLSAgICAgIG1lZXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi0gICAgICAoYSkgWW91IG11c3QgZ2l2ZSBhbnkgb3RoZXIgcmVjaXBpZW50cyBvZiB0aGUgV29yayBvcgotICAgICAgICAgIERlcml2YXRpdmUgV29ya3MgYSBjb3B5IG9mIHRoaXMgTGljZW5zZTsgYW5kCitDb3B5cmlnaHQgKEMpIDIwMTIgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorQWxsIHJpZ2h0cyByZXNlcnZlZC4KIAotICAgICAgKGIpIFlvdSBtdXN0IGNhdXNlIGFueSBtb2RpZmllZCBmaWxlcyB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcwotICAgICAgICAgIHN0YXRpbmcgdGhhdCBZb3UgY2hhbmdlZCB0aGUgZmlsZXM7IGFuZAorUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKK2FyZSBtZXQ6CitSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICAgZGlzdHJpYnV0aW9uLgogCi0gICAgICAoYykgWW91IG11c3QgcmV0YWluLCBpbiB0aGUgU291cmNlIGZvcm0gb2YgYW55IERlcml2YXRpdmUgV29ya3MKLSAgICAgICAgICB0aGF0IFlvdSBkaXN0cmlidXRlLCBhbGwgY29weXJpZ2h0LCBwYXRlbnQsIHRyYWRlbWFyaywgYW5kCi0gICAgICAgICAgYXR0cmlidXRpb24gbm90aWNlcyBmcm9tIHRoZSBTb3VyY2UgZm9ybSBvZiB0aGUgV29yaywKLSAgICAgICAgICBleGNsdWRpbmcgdGhvc2Ugbm90aWNlcyB0aGF0IGRvIG5vdCBwZXJ0YWluIHRvIGFueSBwYXJ0IG9mCi0gICAgICAgICAgdGhlIERlcml2YXRpdmUgV29ya3M7IGFuZAorVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKK0xJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCitGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKK0JVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECitBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCitPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKK09GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorU1VDSCBEQU1BR0UuCiAKLSAgICAgIChkKSBJZiB0aGUgV29yayBpbmNsdWRlcyBhICJOT1RJQ0UiIHRleHQgZmlsZSBhcyBwYXJ0IG9mIGl0cwotICAgICAgICAgIGRpc3RyaWJ1dGlvbiwgdGhlbiBhbnkgRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBkaXN0cmlidXRlIG11c3QKLSAgICAgICAgICBpbmNsdWRlIGEgcmVhZGFibGUgY29weSBvZiB0aGUgYXR0cmlidXRpb24gbm90aWNlcyBjb250YWluZWQKLSAgICAgICAgICB3aXRoaW4gc3VjaCBOT1RJQ0UgZmlsZSwgZXhjbHVkaW5nIHRob3NlIG5vdGljZXMgdGhhdCBkbyBub3QKLSAgICAgICAgICBwZXJ0YWluIHRvIGFueSBwYXJ0IG9mIHRoZSBEZXJpdmF0aXZlIFdvcmtzLCBpbiBhdCBsZWFzdCBvbmUKLSAgICAgICAgICBvZiB0aGUgZm9sbG93aW5nIHBsYWNlczogd2l0aGluIGEgTk9USUNFIHRleHQgZmlsZSBkaXN0cmlidXRlZAotICAgICAgICAgIGFzIHBhcnQgb2YgdGhlIERlcml2YXRpdmUgV29ya3M7IHdpdGhpbiB0aGUgU291cmNlIGZvcm0gb3IKLSAgICAgICAgICBkb2N1bWVudGF0aW9uLCBpZiBwcm92aWRlZCBhbG9uZyB3aXRoIHRoZSBEZXJpdmF0aXZlIFdvcmtzOyBvciwKLSAgICAgICAgICB3aXRoaW4gYSBkaXNwbGF5IGdlbmVyYXRlZCBieSB0aGUgRGVyaXZhdGl2ZSBXb3JrcywgaWYgYW5kCi0gICAgICAgICAgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBub3RpY2VzIG5vcm1hbGx5IGFwcGVhci4gVGhlIGNvbnRlbnRzCi0gICAgICAgICAgb2YgdGhlIE5PVElDRSBmaWxlIGFyZSBmb3IgaW5mb3JtYXRpb25hbCBwdXJwb3NlcyBvbmx5IGFuZAotICAgICAgICAgIGRvIG5vdCBtb2RpZnkgdGhlIExpY2Vuc2UuIFlvdSBtYXkgYWRkIFlvdXIgb3duIGF0dHJpYnV0aW9uCi0gICAgICAgICAgbm90aWNlcyB3aXRoaW4gRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBkaXN0cmlidXRlLCBhbG9uZ3NpZGUKLSAgICAgICAgICBvciBhcyBhbiBhZGRlbmR1bSB0byB0aGUgTk9USUNFIHRleHQgZnJvbSB0aGUgV29yaywgcHJvdmlkZWQKLSAgICAgICAgICB0aGF0IHN1Y2ggYWRkaXRpb25hbCBhdHRyaWJ1dGlvbiBub3RpY2VzIGNhbm5vdCBiZSBjb25zdHJ1ZWQKLSAgICAgICAgICBhcyBtb2RpZnlpbmcgdGhlIExpY2Vuc2UuCi0KLSAgICAgIFlvdSBtYXkgYWRkIFlvdXIgb3duIGNvcHlyaWdodCBzdGF0ZW1lbnQgdG8gWW91ciBtb2RpZmljYXRpb25zIGFuZAotICAgICAgbWF5IHByb3ZpZGUgYWRkaXRpb25hbCBvciBkaWZmZXJlbnQgbGljZW5zZSB0ZXJtcyBhbmQgY29uZGl0aW9ucwotICAgICAgZm9yIHVzZSwgcmVwcm9kdWN0aW9uLCBvciBkaXN0cmlidXRpb24gb2YgWW91ciBtb2RpZmljYXRpb25zLCBvcgotICAgICAgZm9yIGFueSBzdWNoIERlcml2YXRpdmUgV29ya3MgYXMgYSB3aG9sZSwgcHJvdmlkZWQgWW91ciB1c2UsCi0gICAgICByZXByb2R1Y3Rpb24sIGFuZCBkaXN0cmlidXRpb24gb2YgdGhlIFdvcmsgb3RoZXJ3aXNlIGNvbXBsaWVzIHdpdGgKLSAgICAgIHRoZSBjb25kaXRpb25zIHN0YXRlZCBpbiB0aGlzIExpY2Vuc2UuCi0KLSAgIDUuIFN1Ym1pc3Npb24gb2YgQ29udHJpYnV0aW9ucy4gVW5sZXNzIFlvdSBleHBsaWNpdGx5IHN0YXRlIG90aGVyd2lzZSwKLSAgICAgIGFueSBDb250cmlidXRpb24gaW50ZW50aW9uYWxseSBzdWJtaXR0ZWQgZm9yIGluY2x1c2lvbiBpbiB0aGUgV29yawotICAgICAgYnkgWW91IHRvIHRoZSBMaWNlbnNvciBzaGFsbCBiZSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YKLSAgICAgIHRoaXMgTGljZW5zZSwgd2l0aG91dCBhbnkgYWRkaXRpb25hbCB0ZXJtcyBvciBjb25kaXRpb25zLgotICAgICAgTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgbm90aGluZyBoZXJlaW4gc2hhbGwgc3VwZXJzZWRlIG9yIG1vZGlmeQotICAgICAgdGhlIHRlcm1zIG9mIGFueSBzZXBhcmF0ZSBsaWNlbnNlIGFncmVlbWVudCB5b3UgbWF5IGhhdmUgZXhlY3V0ZWQKLSAgICAgIHdpdGggTGljZW5zb3IgcmVnYXJkaW5nIHN1Y2ggQ29udHJpYnV0aW9ucy4KLQotICAgNi4gVHJhZGVtYXJrcy4gVGhpcyBMaWNlbnNlIGRvZXMgbm90IGdyYW50IHBlcm1pc3Npb24gdG8gdXNlIHRoZSB0cmFkZQotICAgICAgbmFtZXMsIHRyYWRlbWFya3MsIHNlcnZpY2UgbWFya3MsIG9yIHByb2R1Y3QgbmFtZXMgb2YgdGhlIExpY2Vuc29yLAotICAgICAgZXhjZXB0IGFzIHJlcXVpcmVkIGZvciByZWFzb25hYmxlIGFuZCBjdXN0b21hcnkgdXNlIGluIGRlc2NyaWJpbmcgdGhlCi0gICAgICBvcmlnaW4gb2YgdGhlIFdvcmsgYW5kIHJlcHJvZHVjaW5nIHRoZSBjb250ZW50IG9mIHRoZSBOT1RJQ0UgZmlsZS4KLQotICAgNy4gRGlzY2xhaW1lciBvZiBXYXJyYW50eS4gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yCi0gICAgICBhZ3JlZWQgdG8gaW4gd3JpdGluZywgTGljZW5zb3IgcHJvdmlkZXMgdGhlIFdvcmsgKGFuZCBlYWNoCi0gICAgICBDb250cmlidXRvciBwcm92aWRlcyBpdHMgQ29udHJpYnV0aW9ucykgb24gYW4gIkFTIElTIiBCQVNJUywKLSAgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvcgotICAgICAgaW1wbGllZCwgaW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24sIGFueSB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMKLSAgICAgIG9mIFRJVExFLCBOT04tSU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFksIG9yIEZJVE5FU1MgRk9SIEEKLSAgICAgIFBBUlRJQ1VMQVIgUFVSUE9TRS4gWW91IGFyZSBzb2xlbHkgcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHRoZQotICAgICAgYXBwcm9wcmlhdGVuZXNzIG9mIHVzaW5nIG9yIHJlZGlzdHJpYnV0aW5nIHRoZSBXb3JrIGFuZCBhc3N1bWUgYW55Ci0gICAgICByaXNrcyBhc3NvY2lhdGVkIHdpdGggWW91ciBleGVyY2lzZSBvZiBwZXJtaXNzaW9ucyB1bmRlciB0aGlzIExpY2Vuc2UuCi0KLSAgIDguIExpbWl0YXRpb24gb2YgTGlhYmlsaXR5LiBJbiBubyBldmVudCBhbmQgdW5kZXIgbm8gbGVnYWwgdGhlb3J5LAotICAgICAgd2hldGhlciBpbiB0b3J0IChpbmNsdWRpbmcgbmVnbGlnZW5jZSksIGNvbnRyYWN0LCBvciBvdGhlcndpc2UsCi0gICAgICB1bmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgKHN1Y2ggYXMgZGVsaWJlcmF0ZSBhbmQgZ3Jvc3NseQotICAgICAgbmVnbGlnZW50IGFjdHMpIG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzaGFsbCBhbnkgQ29udHJpYnV0b3IgYmUKLSAgICAgIGxpYWJsZSB0byBZb3UgZm9yIGRhbWFnZXMsIGluY2x1ZGluZyBhbnkgZGlyZWN0LCBpbmRpcmVjdCwgc3BlY2lhbCwKLSAgICAgIGluY2lkZW50YWwsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBvZiBhbnkgY2hhcmFjdGVyIGFyaXNpbmcgYXMgYQotICAgICAgcmVzdWx0IG9mIHRoaXMgTGljZW5zZSBvciBvdXQgb2YgdGhlIHVzZSBvciBpbmFiaWxpdHkgdG8gdXNlIHRoZQotICAgICAgV29yayAoaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBkYW1hZ2VzIGZvciBsb3NzIG9mIGdvb2R3aWxsLAotICAgICAgd29yayBzdG9wcGFnZSwgY29tcHV0ZXIgZmFpbHVyZSBvciBtYWxmdW5jdGlvbiwgb3IgYW55IGFuZCBhbGwKLSAgICAgIG90aGVyIGNvbW1lcmNpYWwgZGFtYWdlcyBvciBsb3NzZXMpLCBldmVuIGlmIHN1Y2ggQ29udHJpYnV0b3IKLSAgICAgIGhhcyBiZWVuIGFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHN1Y2ggZGFtYWdlcy4KLQotICAgOS4gQWNjZXB0aW5nIFdhcnJhbnR5IG9yIEFkZGl0aW9uYWwgTGlhYmlsaXR5LiBXaGlsZSByZWRpc3RyaWJ1dGluZwotICAgICAgdGhlIFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mLCBZb3UgbWF5IGNob29zZSB0byBvZmZlciwKLSAgICAgIGFuZCBjaGFyZ2UgYSBmZWUgZm9yLCBhY2NlcHRhbmNlIG9mIHN1cHBvcnQsIHdhcnJhbnR5LCBpbmRlbW5pdHksCi0gICAgICBvciBvdGhlciBsaWFiaWxpdHkgb2JsaWdhdGlvbnMgYW5kL29yIHJpZ2h0cyBjb25zaXN0ZW50IHdpdGggdGhpcwotICAgICAgTGljZW5zZS4gSG93ZXZlciwgaW4gYWNjZXB0aW5nIHN1Y2ggb2JsaWdhdGlvbnMsIFlvdSBtYXkgYWN0IG9ubHkKLSAgICAgIG9uIFlvdXIgb3duIGJlaGFsZiBhbmQgb24gWW91ciBzb2xlIHJlc3BvbnNpYmlsaXR5LCBub3Qgb24gYmVoYWxmCi0gICAgICBvZiBhbnkgb3RoZXIgQ29udHJpYnV0b3IsIGFuZCBvbmx5IGlmIFlvdSBhZ3JlZSB0byBpbmRlbW5pZnksCi0gICAgICBkZWZlbmQsIGFuZCBob2xkIGVhY2ggQ29udHJpYnV0b3IgaGFybWxlc3MgZm9yIGFueSBsaWFiaWxpdHkKLSAgICAgIGluY3VycmVkIGJ5LCBvciBjbGFpbXMgYXNzZXJ0ZWQgYWdhaW5zdCwgc3VjaCBDb250cmlidXRvciBieSByZWFzb24KLSAgICAgIG9mIHlvdXIgYWNjZXB0aW5nIGFueSBzdWNoIHdhcnJhbnR5IG9yIGFkZGl0aW9uYWwgbGlhYmlsaXR5LgotCi0gICBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIApkaWZmIC0tZ2l0IGEvbGlua2VyL1JFQURNRS5UWFQgYi9saW5rZXIvUkVBRE1FLlRYVApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYThlZmUzNS4uMDAwMDAwMAotLS0gYS9saW5rZXIvUkVBRE1FLlRYVAorKysgL2Rldi9udWxsCkBAIC0xLDE0MyArMCwwIEBACi1BbmRyb2lkIER5bmFtaWMgTGlua2VyIERlc2lnbiBOb3RlcwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotSW50cm9kdWN0aW9uOgotLS0tLS0tLS0tLS0tLQotCi1UaGlzIGRvY3VtZW50IHByb3ZpZGVzIHNldmVyYWwgbm90ZXMgcmVsYXRlZCB0byB0aGUgZGVzaWduIG9mIHRoZSBBbmRyb2lkCi1keW5hbWljIGxpbmtlci4KLQotCi1QcmVsaW5raW5nOgotLS0tLS0tLS0tLS0KLQotU3lzdGVtIGxpYnJhcmllcyBpbiBBbmRyb2lkIGFyZSBpbnRlcm5hbGx5IHByZWxpbmtlZCwgd2hpY2ggbWVhbnMgdGhhdAotYW55IGludGVybmFsIHJlbG9jYXRpb25zIHdpdGhpbiB0aGVtIGFyZSBzdHJpcHBlZCBmcm9tIHRoZSBjb3JyZXNwb25kaW5nCi1zaGFyZWQgb2JqZWN0LCBpbiBvcmRlciB0byByZWR1Y2Ugc2l6ZSBhbmQgc3BlZWQgdXAgbG9hZGluZy4KLQotU3VjaCBsaWJyYXJpZXMgY2FuIG9ubHkgYmUgbG9hZGVkIGF0IHRoZSB2ZXJ5IHNwZWNpZmljIHZpcnR1YWwgbWVtb3J5IGFkZHJlc3MKLXRoZXkgaGF2ZSBiZWVuIHByZWxpbmtlZCB0byAoZHVyaW5nIHRoZSBidWlsZCBwcm9jZXNzKS4gVGhlIGxpc3Qgb2YgcHJlbGlua2VkCi1zeXN0ZW0gbGlicmFyaWVzIGFuZCB0aGVpciBjb3JyZXNwb25kaW5nIHZpcnR1YWwgbWVtb3J5IGFkZHJlc3MgaXMgZm91bmQgaW4KLXRoZSBmaWxlOgotCi0gICBidWlsZC9jb3JlL3ByZWxpbmstbGludXgtPGFyY2g+Lm1hcAotCi1JdCBzaG91bGQgYmUgdXBkYXRlZCBlYWNoIHRpbWUgYSBuZXcgc3lzdGVtIGxpYnJhcnkgaXMgYWRkZWQgdG8gdGhlCi1zeXN0ZW0uCi0KLVRoZSBwcmVsaW5rIHN0ZXAgaGFwcGVucyBhdCBidWlsZCB0aW1lLCBhbmQgdXNlcyB0aGUgJ3Nvc2xpbScgYW5kICdhcHJpb3JpJwotdG9vbHM6Ci0KLSAgLSAnYXByaW9yaScgaXMgdGhlIHJlYWwgcHJlbGluayB0b29sIHdoaWNoIHJlbW92ZXMgcmVsb2NhdGlvbnMgZnJvbSB0aGUKLSAgICBzaGFyZWQgb2JqZWN0LCBob3dldmVyLCBpdCBtdXN0IGJlIGdpdmVuIGEgbGlzdCBvZiBzeW1ib2xzIHRvIHJlbW92ZQotICAgIGZyb20gdGhlIGZpbGUuCi0KLSAgLSAnc29zbGltJyBpcyB1c2VkIHRvIGZpbmQgc3ltYm9scyBpbiBhbiBleGVjdXRhYmxlIEVMRiBmaWxlCi0gICAgYW5kIGdlbmVyYXRlIGEgbGlzdCB0aGF0IGNhbiBiZSBwYXNzZWQgdG8gJ2FwcmlvcmknLgotCi1CeSBkZWZhdWx0LCB0aGVzZSB0b29scyBhcmUgb25seSB1c2VkIHRvIHJlbW92ZSBpbnRlcm5hbCBzeW1ib2xzIGZyb20KLWxpYnJhcmllcywgdGhvdWdoIHRoZXkgaGF2ZSBiZWVuIGRlc2lnbmVkIHRvIGFsbG93IG1vcmUgYWdncmVzc2l2ZQotb3B0aW1pemF0aW9ucyAoZS5nLiAnZ2xvYmFsJyBwcmVsaW5raW5nIGFuZCBzeW1ib2wgc3RyaXBwaW5nLCB3aGljaAotcHJldmVudCByZXBsYWNpbmcgaW5kaXZpZHVhbCBzeXN0ZW0gbGlicmFyaWVzIHRob3VnaCkuCi0KLVlvdSBjYW4gZGlzYWJsZSBwcmVsaW5raW5nIGF0IGJ1aWxkIHRpbWUgYnkgbW9kaWZ5aW5nIHlvdXIgQW5kcm9pZC5tayB3aXRoCi1hIGxpbmUgbGlrZToKLQotICAgIExPQ0FMX1BSRUxJTktfTU9EVUxFIDo9IGZhbHNlCi0KLQotSW5pdGlhbGl6YXRpb24gYW5kIFRlcm1pbmF0aW9uIGZ1bmN0aW9uczoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVRoZSBVbml4IFN5cyBWIEJpbmFyeSBJbnRlcmZhY2Ugc3RhbmRhcmQgc3RhdGVzIHRoYXQgYW4KLWV4ZWN1dGFibGUgY2FuIGhhdmUgdGhlIGZvbGxvd2luZyBlbnRyaWVzIGluIGl0cyAuZHluYW1pYwotc2VjdGlvbjoKLQotICBEVF9JTklUCi0gICAgICBQb2ludHMgdG8gdGhlIGFkZHJlc3Mgb2YgYW4gaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24KLSAgICAgIHRoYXQgbXVzdCBiZSBjYWxsZWQgd2hlbiB0aGUgZmlsZSBpcyBsb2FkZWQuCi0KLSAgRFRfSU5JVF9BUlJBWQotICAgICAgUG9pbnRzIHRvIGFuIGFycmF5IG9mIGZ1bmN0aW9uIGFkZHJlc3NlcyB0aGF0IG11c3QgYmUKLSAgICAgIGNhbGxlZCwgaW4tb3JkZXIsIHRvIHBlcmZvcm0gaW5pdGlhbGl6YXRpb24uIFNvbWUgb2YKLSAgICAgIHRoZSBlbnRyaWVzIGluIHRoZSBhcnJheSBjYW4gYmUgMCBvciAtMSwgYW5kIHNob3VsZAotICAgICAgYmUgaWdub3JlZC4KLQotICAgICAgTm90ZTogdGhpcyBpcyBnZW5lcmFsbHkgc3RvcmVkIGluIGEgLmluaXRfYXJyYXkgc2VjdGlvbgotCi0gIERUX0lOSVRfQVJSQVlTWgotICAgICAgVGhlIHNpemUgb2YgdGhlIERUX0lOSVRBUlJBWSwgaWYgYW55Ci0KLSAgRFRfRklOSQotICAgICAgUG9pbnRzIHRvIHRoZSBhZGRyZXNzIG9mIGEgZmluYWxpemF0aW9uIGZ1bmN0aW9uIHdoaWNoCi0gICAgICBtdXN0IGJlIGNhbGxlZCB3aGVuIHRoZSBmaWxlIGlzIHVubG9hZGVkIG9yIHRoZSBwcm9jZXNzCi0gICAgICB0ZXJtaW5hdGVkLgotCi0gIERUX0ZJTklfQVJSQVkKLSAgICAgIFNhbWUgYXMgRFRfSU5JVEFSUkFZIGJ1dCBmb3IgZmluYWxpemVycy4gTm90ZSB0aGF0IHRoZQotICAgICAgZnVuY3Rpb25zIG11c3QgYmUgY2FsbGVkIGluIHJldmVyc2Utb3JkZXIgdGhvdWdoCi0KLSAgICAgIE5vdGU6IHRoaXMgaXMgZ2VuZXJhbGx5IHN0b3JlZCBpbiBhIC5maW5pX2FycmF5IHNlY3Rpb24KLQotICBEVF9GSU5JX0FSUkFZU1oKLSAgICAgIFNpemUgb2YgRlRfRklOSUFSUkFZCi0KLSAgRFRfUFJFSU5JVF9BUlJBWQotICAgICAgQW4gYXJyYXkgc2ltaWxhciB0byBEVF9JTklUX0FSUkFZIHdoaWNoIG11c3QgKm9ubHkqIGJlCi0gICAgICBwcmVzZW50IGluIGV4ZWN1dGFibGVzLCBub3Qgc2hhcmVkIGxpYnJhcmllcywgd2hpY2ggY29udGFpbnMKLSAgICAgIGEgbGlzdCBvZiBmdW5jdGlvbnMgdGhhdCBuZWVkIHRvIGJlIGNhbGxlZCBiZWZvcmUgYW55IG90aGVyCi0gICAgICBpbml0aWFsaXphdGlvbiBmdW5jdGlvbiAoaS5lLiBEVF9JTklUIGFuZC9vciBEVF9JTklUX0FSUkFZKQotCi0gICAgICBOb3RlOiB0aGlzIGlzIGdlbmVyYWxseSBzdG9yZWQgaW4gYSAucHJlaW5pdF9hcnJheSBzZWN0aW9uCi0KLSAgRFRfUFJFSU5JVF9BUlJBWVNaCi0gICAgICBUaGUgc2l6ZSBvZiBEVF9QUkVJTklUX0FSUkFZCi0KLUlmIGJvdGggYSBEVF9JTklUIGFuZCBEVF9JTklUQVJSQVkgZW50cnkgYXJlIHByZXNlbnQsIHRoZSBEVF9JTklUCi1mdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCBiZWZvcmUgdGhlIERUX0lOSVRBUlJBWSBmdW5jdGlvbnMuCi0KLUNvbnNlcXVlbnRseSwgdGhlIERUX0ZJTklBUlJBWSBtdXN0IGJlIHBhcnNlZCBpbiByZXZlcnNlIG9yZGVyIGJlZm9yZQotdGhlIERUX0ZJTkkgZnVuY3Rpb24sIGlmIGJvdGggYXJlIGF2YWlsYWJsZS4KLQotTm90ZSB0aGF0IHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBzdGF0aWMgQysrIGNvbnN0cnVjdG9ycyBpcyB2ZXJ5Ci1tdWNoIHByb2Nlc3NvciBkZXBlbmRlbnQsIGFuZCBtYXkgdXNlIGRpZmZlcmVudCBFTEYgc2VjdGlvbnMuCi0KLU9uIHRoZSBBUk0gKHNlZSAiQysrIEFCSSBmb3IgQVJNIiBkb2N1bWVudCksIHRoZSBzdGF0aWMgY29uc3RydWN0b3JzCi1tdXN0IGJlIGNhbGxlZCBleHBsaWNpdGx5IGZyb20gdGhlIERUX0lOSVRfQVJSQVksIGFuZCBlYWNoIG9uZSBvZiB0aGVtCi1zaGFsbCByZWdpc3RlciBhIGRlc3RydWN0b3IgYnkgY2FsbGluZyB0aGUgc3BlY2lhbCBfX2VhYmlfYXRleGl0KCkKLWZ1bmN0aW9uIChwcm92aWRlZCBieSB0aGUgQyBsaWJyYXJ5KS4gVGhlIERUX0ZJTklfQVJSQVkgaXMgbm90IHVzZWQKLWJ5IHN0YXRpYyBDKysgZGVzdHJ1Y3RvcnMuCi0KLU9uIHg4NiwgdGhlIGxpc3RzIG9mIGNvbnN0cnVjdG9ycyBhbmQgZGVzdHJ1Y3RvcnMgYXJlIHBsYWNlZCBpbiBzcGVjaWFsCi1zZWN0aW9ucyBuYW1lZCAiLmN0b3JzIiBhbmQgIi5kdG9ycyIsIGFuZCB0aGUgRFRfSU5JVCAvIERUX0ZJTkkgZnVuY3Rpb25zCi1hcmUgaW4gY2hhcmdlIG9mIGNhbGxpbmcgdGhlbSBleHBsaWNpdGx5LgotCi0KLURlYnVnZ2luZzoKLS0tLS0tLS0tLS0KLQotSXQgaXMgcG9zc2libGUgdG8gZW5hYmxlIGRlYnVnIG91dHB1dCBpbiB0aGUgZHluYW1pYyBsaW5rZXIuIFRvIGRvIHNvLAotZm9sbG93IHRoZXNlIHN0ZXBzOgotCi0xLyBNb2RpZnkgdGhlIGxpbmUgaW4gQW5kcm9pZC5tayB0aGF0IHNheXM6Ci0KLSAgICBMT0NBTF9DRkxBR1MgKz0gLURMSU5LRVJfREVCVUc9MAotCi0gIEludG8gdGhlIGZvbGxvd2luZzoKLQotICAgIExPQ0FMX0NGTEFHUyArPSAtRExJTktFUl9ERUJVRz0xCi0KLTIvIEZvcmNlLXJlYnVpbGQgdGhlIGR5bmFtaWMgbGlua2VyOgotCi0gICAgY2QgYmlvbmljL2xpbmtlcgotICAgIG1tIC1CCi0KLTMvIFJlYnVpbGQgYSBuZXcgc3lzdGVtIGltYWdlLgotCi1Zb3UgY2FuIGluY3JlYXNlIHRoZSB2ZXJib3NpdHkgb2YgZGVidWcgdHJhY2VzIGJ5IGRlZmluaW5nIHRoZSBERUJVRwotZW52aXJvbm1lbnQgdmFyaWFibGUgdG8gYSBudW1lcmljIHZhbHVlIGZyb20gMCB0byAyLiBUaGlzIHdpbGwgb25seQotYWZmZWN0IG5ldyBwcm9jZXNzZXMgYmVpbmcgbGF1bmNoZWQuCi0KLUJ5IGRlZmF1bHQsIHRyYWNlcyBhcmUgc2VudCB0byBsb2djYXQsIHdpdGggdGhlICJsaW5rZXIiIHRhZy4gWW91IGNhbgotY2hhbmdlIHRoaXMgdG8gZ28gdG8gc3Rkb3V0IGluc3RlYWQgYnkgc2V0dGluZyB0aGUgZGVmaW5pdGlvbiBvZgotTElOS0VSX0RFQlVHX1RPX0xPRyB0byAwIGluICJsaW5rZXJfZGVidWcuaCIuCmRpZmYgLS1naXQgYS9saW5rZXIvYXJjaC9taXBzL2JlZ2luLlMgYi9saW5rZXIvYXJjaC9taXBzL2JlZ2luLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjc4Mjk0NwotLS0gL2Rldi9udWxsCisrKyBiL2xpbmtlci9hcmNoL21pcHMvYmVnaW4uUwpAQCAtMCwwICsxLDEwNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisgICAgLnRleHQKKyAgICAuYWxpZ24gICAgNAorICAgIC50eXBlICAgIF9fc3RhcnQsQGZ1bmN0aW9uCisKKyAgICAuZW50ICAgIF9fc3RhcnQKKyAgICAuZ2xvYmwgICAgX19zdGFydAorX19zdGFydDoKKyAgICAuc2V0ICAgIG5vcmVvcmRlcgorICAgIGJhbCAgICAxZgorICAgIG5vcAorMTogIC5jcGxvYWQgICAgJDMxCisgICAgLnNldCAgICByZW9yZGVyCisKKyAgICAvKiBEaXNjb3ZlciB0aGUgbG9hZCBhZGRyZXNzICovCisgICAgbGEgICAgJHQwLCAxZgorICAgIGJhbCAgICAxZgorMTogIHN1YnUgICAgJHQwLCAkcmEsICR0MAorCisjZGVmaW5lIERUX1BMVEdPVCAzCisjZGVmaW5lIERUX01JUFNfTE9DQUxfR09UTk8gMHg3MDAwMDAwYQorCisgICAgLyogU2VhcmNoIGR5bmFtaWMgdGFibGUgZm9yIERUX01JUFNfTE9DQUxfR09UTk8gYW5kIERUX1BMVEdPVCB2YWx1ZXMgKi8KKyAgICBsYSAgICAkdDEsIF9EWU5BTUlDCisgICAgYWRkdSAgICAkdDEsICR0MAorICAgIGxpICAgICR0MywgRFRfUExUR09UCisgICAgbGkgICAgJHQ0LCBEVF9NSVBTX0xPQ0FMX0dPVE5PCiswOgorICAgIGx3ICAgICR0MiwgMCgkdDEpCisgICAgYmVxeiAgICAkdDIsIC5McmVsb2NhdGVfbG9jYWxfZ290CisKKyAgICBibmUgICAgJHQyLCAkdDMsIDFmICAgIC8qIERUX1BMVEdPVD8gKi8KKyAgICBsdyAgICAkczAsIDQoJHQxKQorICAgIGFkZHUgICAgJHMwLCAkdDAKKyAgICBiICAgIDJmCisKKzE6ICBibmUgICAgJHQyLCAkdDQsIDFmICAgIC8qIERUX01JUFNfTE9DQUxfR09UTk8/ICovCisgICAgbHcgICAgJHMxLCA0KCR0MSkKKyAgICBiICAgIDJmCisKKzE6CisyOiAgYWRkdSAgICAkdDEsIDgKKyAgICBiICAgIDBiCisKKy5McmVsb2NhdGVfbG9jYWxfZ290OgorICAgIC8qCisgICAgICogUmVsb2NhdGUgdGhlIGxvY2FsIEdPVCBlbnRyaWVzCisgICAgICogZ290WzBdIGlzIGFkZHJlc3Mgb2YgbGF6eSByZXNvbHZlciBmdW5jdGlvbgorICAgICAqIGdvdFsxXSBtYXkgYmUgdXNlZCBmb3IgYSBHTlUgZXh0ZW5zaW9uCisgICAgICovCisKKyAgICBhZGR1ICAgICRzMCwgNAorICAgIHN1YnUgICAgJHMxLCAxCisgICAgbHcgICAgJHQxLCAoJHMwKQorICAgIGJnZXogICAgJHQxLCA5ZgorICAgIGFkZHUgICAgJHMwLCA0CisgICAgc3VidSAgICAkczEsIDEKKyAgICBiICAgIDlmCisKKzE6ICBsdyAgICAkdDEsICgkczApCisgICAgYWRkdSAgICAkdDEsICR0MAorICAgIHN3ICAgICR0MSwgKCRzMCkKKyAgICBhZGR1ICAgICRzMCwgNAorOTogIHN1YnUgICAgJHMxLCAxCisgICAgYmdleiAgICAkczEsIDFiCisKKyAgICAvKiBjYWxsIGxpbmtlcl9pbml0ICovCisgICAgbW92ZSAgICAkYTAsICRzcAorICAgIGFkZGl1ICAgICRzcCwgLTQqNCAgICAgICAgLyogc3BhY2UgZm9yIGFyZyBzYXZlcyBpbiBsaW5rZXJfaW5pdCAqLworICAgIGxhICAgICR0OSwgX19saW5rZXJfaW5pdAorICAgIGphbHIgICAgJHQ5CisgICAgbW92ZSAgICAkdDksICR2MAorICAgIGFkZHUgICAgJHNwLCA0KjQgICAgICAgIC8qIHJlc3RvcmUgc3AgKi8KKyAgICBqICAgICR0OQorICAgIC5lbmQgICAgX19zdGFydAorCisgICAgLnNlY3Rpb24gLmN0b3JzLCAid2EiCisgICAgLmdsb2JsIF9fQ1RPUl9MSVNUX18KK19fQ1RPUl9MSVNUX186CisgICAgLmxvbmcgLTEKZGlmZiAtLWdpdCBhL2xpbmtlci9hcmNoL3g4Ni9iZWdpbi5TIGIvbGlua2VyL2FyY2gveDg2L2JlZ2luLlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI0NDI3ZTAuLjAwMDAwMDAKLS0tIGEvbGlua2VyL2FyY2gveDg2L2JlZ2luLlMKKysrIC9kZXYvbnVsbApAQCAtMSw0NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogICAgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUwotICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKLSAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCi0gKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKLSAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAotICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0gKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLS50ZXh0Ci0uYWxpZ24gNAotLnR5cGUgX3N0YXJ0LCBAZnVuY3Rpb24KLS5nbG9ibCBfc3RhcnQKLQotX3N0YXJ0OgotICAgICAgICAvKiBzYXZlIHRoZSBlbGZkYXRhIHB0ciB0byAlZWF4LCBBTkQgcHVzaCBpdCBvbnRvIHRoZSBzdGFjayAqLwotICAgICAgICBtb3YgICAgJWVzcCwgJWVheAotICAgICAgICBwdXNobCAgJWVzcAotCi0gICAgICAgIHB1c2hsICAlZWF4Ci0gICAgICAgIGNhbGwgICBfX2xpbmtlcl9pbml0Ci0KLSAgICAgICAgLyogbGlua2VyIGluaXQgcmV0dXJucyAoJWVheCkgdGhlIF9lbnRyeSBhZGRyZXNzIGluIHRoZSBtYWluIGltYWdlICovCi0gICAgICAgIC8qIGVudHJ5IHBvaW50IGV4cGVjdHMgc3AgdG8gcG9pbnQgdG8gZWxmZGF0YSAqLwotICAgICAgICBwb3BsICAgJWVzcAotICAgICAgICBqbXAgICAgKiVlYXgKLQpkaWZmIC0tZ2l0IGEvbGlua2VyL2FyY2gveDg2L2JlZ2luLmMgYi9saW5rZXIvYXJjaC94ODYvYmVnaW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNTFhMTZhCi0tLSAvZGV2L251bGwKKysrIGIvbGlua2VyL2FyY2gveDg2L2JlZ2luLmMKQEAgLTAsMCArMSw1NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisKK2V4dGVybiB1bnNpZ25lZCBfX2xpbmtlcl9pbml0KHZvaWQqIHJhd19hcmdzKTsKKworX19MSUJDX0hJRERFTl9fIHZvaWQgX3N0YXJ0KCkgeworICB2b2lkICgqc3RhcnQpKHZvaWQpOworCisgIHZvaWQqIHJhd19hcmdzID0gKHZvaWQqKSAoKHVpbnRwdHJfdCkgX19idWlsdGluX2ZyYW1lX2FkZHJlc3MoMCkgKyBzaXplb2Yodm9pZCopKTsKKyAgc3RhcnQgPSAodm9pZCgqKSh2b2lkKSlfX2xpbmtlcl9pbml0KHJhd19hcmdzKTsKKworICAvKiBsaW5rZXIgaW5pdCByZXR1cm5zICglZWF4KSB0aGUgX2VudHJ5IGFkZHJlc3MgaW4gdGhlIG1haW4gaW1hZ2UgKi8KKyAgLyogZW50cnkgcG9pbnQgZXhwZWN0cyBzcCB0byBwb2ludCB0byByYXdfYXJncyAqLworCisgIF9fYXNtX18gKAorICAgICAibW92ICUwLCAlJWVzcFxuXHQiCisgICAgICJqbXAgKiUxXG5cdCIKKyAgICAgOiA6ICJyIihyYXdfYXJncyksICJyIihzdGFydCkgOgorICApOworCisgIC8qIFVucmVhY2hhYmxlICovCit9CisKKy8qIFNpbmNlIGxpbmtlciBoYXMgaXRzIG93biB2ZXJzaW9uIG9mIGNydGJlZ2luICh0aGlzIGZpbGUpIGl0IHNob3VsZCBoYXZlICovCisvKiBvd24gdmVyc2lvbiBvZiBfX3N0YWNrX2Noa19mYWlsX2xvY2FsIGZvciB0aGUgY2FzZSB3aGVuIGl0J3MgYnVpbHQgd2l0aCAqLworLyogc3RhY2sgcHJvdGVjdG9yIGZlYXR1cmUgKi8KKworI2luY2x1ZGUgImFyY2gteDg2L2Jpb25pYy9fX3N0YWNrX2Noa19mYWlsX2xvY2FsLmgiCmRpZmYgLS1naXQgYS9saW5rZXIvZGVidWdnZXIuYyBiL2xpbmtlci9kZWJ1Z2dlci5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NDhkYzc4Li4wMDAwMDAwCi0tLSBhL2xpbmtlci9kZWJ1Z2dlci5jCisrKyAvZGV2L251bGwKQEAgLTEsMTc0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0gKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiAgICBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCi0gKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQotICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAotICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKLSAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUwotICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECi0gKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0gKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0jaW5jbHVkZSA8Y3R5cGUuaD4KLSNpbmNsdWRlIDxzaWduYWwuaD4KLSNpbmNsdWRlIDxzeXMvbW1hbi5oPgotI2luY2x1ZGUgPGVycm5vLmg+Ci0KLSNpbmNsdWRlICJsaW5rZXIuaCIKLQotI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KLSNpbmNsdWRlIDxzeXMvdW4uaD4KLQotdm9pZCBub3RpZnlfZ2RiX29mX2xpYnJhcmllcygpOwotCi0jZGVmaW5lICBSRVRSWV9PTl9FSU5UUihyZXQsY29uZCkgXAotICAgIGRvIHsgXAotICAgICAgICByZXQgPSAoY29uZCk7IFwKLSAgICB9IHdoaWxlIChyZXQgPCAwICYmIGVycm5vID09IEVJTlRSKQotCi0KLXN0YXRpYyBpbnQgc29ja2V0X2Fic3RyYWN0X2NsaWVudChjb25zdCBjaGFyICpuYW1lLCBpbnQgdHlwZSkKLXsKLSAgICBzdHJ1Y3Qgc29ja2FkZHJfdW4gYWRkcjsKLSAgICBzaXplX3QgbmFtZWxlbjsKLSAgICBzb2NrbGVuX3QgYWxlbjsKLSAgICBpbnQgcywgZXJyOwotCi0gICAgbmFtZWxlbiAgPSBzdHJsZW4obmFtZSk7Ci0KLSAgICAvLyBUZXN0IHdpdGggbGVuZ3RoICsxIGZvciB0aGUgKmluaXRpYWwqICdcMCcuCi0gICAgaWYgKChuYW1lbGVuICsgMSkgPiBzaXplb2YoYWRkci5zdW5fcGF0aCkpIHsKLSAgICAgICAgZXJybm8gPSBFSU5WQUw7Ci0gICAgICAgIHJldHVybiAtMTsKLSAgICB9Ci0KLSAgICAvKiBUaGlzIGlzIHVzZWQgZm9yIGFic3RyYWN0IHNvY2tldCBuYW1lc3BhY2UsIHdlIG5lZWQKLSAgICAgKiBhbiBpbml0aWFsICdcMCcgYXQgdGhlIHN0YXJ0IG9mIHRoZSBVbml4IHNvY2tldCBwYXRoLgotICAgICAqCi0gICAgICogTm90ZTogVGhlIHBhdGggaW4gdGhpcyBjYXNlIGlzICpub3QqIHN1cHBvc2VkIHRvIGJlCi0gICAgICogJ1wwJy10ZXJtaW5hdGVkLiAoIm1hbiA3IHVuaXgiIGZvciB0aGUgZ29yeSBkZXRhaWxzLikKLSAgICAgKi8KLSAgICBtZW1zZXQgKCZhZGRyLCAwLCBzaXplb2YgYWRkcik7Ci0gICAgYWRkci5zdW5fZmFtaWx5ID0gQUZfTE9DQUw7Ci0gICAgYWRkci5zdW5fcGF0aFswXSA9IDA7Ci0gICAgbWVtY3B5KGFkZHIuc3VuX3BhdGggKyAxLCBuYW1lLCBuYW1lbGVuKTsKLQotICAgIGFsZW4gPSBuYW1lbGVuICsgb2Zmc2V0b2Yoc3RydWN0IHNvY2thZGRyX3VuLCBzdW5fcGF0aCkgKyAxOwotCi0gICAgcyA9IHNvY2tldChBRl9MT0NBTCwgdHlwZSwgMCk7Ci0gICAgaWYocyA8IDApIHJldHVybiAtMTsKLQotICAgIFJFVFJZX09OX0VJTlRSKGVycixjb25uZWN0KHMsIChzdHJ1Y3Qgc29ja2FkZHIgKikgJmFkZHIsIGFsZW4pKTsKLSAgICBpZiAoZXJyIDwgMCkgewotICAgICAgICBjbG9zZShzKTsKLSAgICAgICAgcyA9IC0xOwotICAgIH0KLQotICAgIHJldHVybiBzOwotfQotCi0jaW5jbHVkZSAibGlua2VyX2Zvcm1hdC5oIgotI2luY2x1ZGUgPC4uL2xpYmMvcHJpdmF0ZS9sb2dkLmg+Ci0KLS8qCi0gKiBXcml0ZXMgYSBzdW1tYXJ5IG9mIHRoZSBzaWduYWwgdG8gdGhlIGxvZyBmaWxlLgotICoKLSAqIFdlIGNvdWxkIGJlIGhlcmUgYXMgYSByZXN1bHQgb2YgbmF0aXZlIGhlYXAgY29ycnVwdGlvbiwgb3Igd2hpbGUgYQotICogbXV0ZXggaXMgYmVpbmcgaGVsZCwgc28gd2UgZG9uJ3Qgd2FudCB0byB1c2UgYW55IGxpYmMgZnVuY3Rpb25zIHRoYXQKLSAqIGNvdWxkIGFsbG9jYXRlIG1lbW9yeSBvciBob2xkIGEgbG9jay4KLSAqLwotc3RhdGljIHZvaWQgbG9nU2lnbmFsU3VtbWFyeShpbnQgc2lnbnVtLCBjb25zdCBzaWdpbmZvX3QqIGluZm8pCi17Ci0gICAgY2hhciBidWZmZXJbMTI4XTsKLQotICAgIGNoYXIqIHNpZ25hbWU7Ci0gICAgc3dpdGNoIChzaWdudW0pIHsKLSAgICAgICAgY2FzZSBTSUdJTEw6ICAgIHNpZ25hbWUgPSAiU0lHSUxMIjsgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFNJR0FCUlQ6ICAgc2lnbmFtZSA9ICJTSUdBQlJUIjsgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgU0lHQlVTOiAgICBzaWduYW1lID0gIlNJR0JVUyI7ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBTSUdGUEU6ICAgIHNpZ25hbWUgPSAiU0lHRlBFIjsgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFNJR1NFR1Y6ICAgc2lnbmFtZSA9ICJTSUdTRUdWIjsgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgU0lHU1RLRkxUOiBzaWduYW1lID0gIlNJR1NUS0ZMVCI7ICBicmVhazsKLSAgICAgICAgY2FzZSBTSUdQSVBFOiAgIHNpZ25hbWUgPSAiU0lHUElQRSI7ICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OiAgICAgICAgc2lnbmFtZSA9ICI/Pz8iOyAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgZm9ybWF0X2J1ZmZlcihidWZmZXIsIHNpemVvZihidWZmZXIpLAotICAgICAgICAiRmF0YWwgc2lnbmFsICVkICglcykgYXQgMHglMDh4IChjb2RlPSVkKSIsCi0gICAgICAgIHNpZ251bSwgc2lnbmFtZSwgaW5mby0+c2lfYWRkciwgaW5mby0+c2lfY29kZSk7Ci0KLSAgICBfX2xpYmNfYW5kcm9pZF9sb2dfd3JpdGUoQU5EUk9JRF9MT0dfRkFUQUwsICJsaWJjIiwgYnVmZmVyKTsKLX0KLQotLyoKLSAqIENhdGNoZXMgZmF0YWwgc2lnbmFscyBzbyB3ZSBjYW4gYXNrIGRlYnVnZ2VyZCB0byBwdHJhY2UgdXMgYmVmb3JlCi0gKiB3ZSBjcmFzaC4KLSAqLwotdm9pZCBkZWJ1Z2dlcl9zaWduYWxfaGFuZGxlcihpbnQgbiwgc2lnaW5mb190KiBpbmZvLCB2b2lkKiB1bnVzZWQpCi17Ci0gICAgdW5zaWduZWQgdGlkOwotICAgIGludCBzOwotCi0gICAgbG9nU2lnbmFsU3VtbWFyeShuLCBpbmZvKTsKLQotICAgIHRpZCA9IGdldHRpZCgpOwotICAgIHMgPSBzb2NrZXRfYWJzdHJhY3RfY2xpZW50KCJhbmRyb2lkOmRlYnVnZ2VyZCIsIFNPQ0tfU1RSRUFNKTsKLQotICAgIGlmKHMgPj0gMCkgewotICAgICAgICAvKiBkZWJ1Z2dlciBrbm93cyBvdXIgcGlkIGZyb20gdGhlIGNyZWRlbnRpYWxzIG9uIHRoZQotICAgICAgICAgKiBsb2NhbCBzb2NrZXQgYnV0IHdlIG5lZWQgdG8gdGVsbCBpdCBvdXIgdGlkLiAgSXQKLSAgICAgICAgICogaXMgcGFyYW5vaWQgYW5kIHdpbGwgdmVyaWZ5IHRoYXQgd2UgYXJlIGdpdmluZyBhIHRpZAotICAgICAgICAgKiB0aGF0J3MgYWN0dWFsbHkgaW4gb3VyIHByb2Nlc3MKLSAgICAgICAgICovCi0gICAgICAgIGludCAgcmV0OwotCi0gICAgICAgIFJFVFJZX09OX0VJTlRSKHJldCwgd3JpdGUocywgJnRpZCwgc2l6ZW9mKHVuc2lnbmVkKSkpOwotICAgICAgICBpZiAocmV0ID09IHNpemVvZih1bnNpZ25lZCkpIHsKLSAgICAgICAgICAgIC8qIGlmIHRoZSB3cml0ZSBmYWlsZWQsIHRoZXJlIGlzIG5vIHBvaW50IHRvIHJlYWQgb24KLSAgICAgICAgICAgICAqIHRoZSBmaWxlIGRlc2NyaXB0b3IuICovCi0gICAgICAgICAgICBSRVRSWV9PTl9FSU5UUihyZXQsIHJlYWQocywgJnRpZCwgMSkpOwotICAgICAgICAgICAgbm90aWZ5X2dkYl9vZl9saWJyYXJpZXMoKTsKLSAgICAgICAgfQotICAgICAgICBjbG9zZShzKTsKLSAgICB9Ci0KLSAgICAvKiByZW1vdmUgb3VyIG5ldCBzbyB3ZSBmYXVsdCBmb3IgcmVhbCB3aGVuIHdlIHJldHVybiAqLwotICAgIHNpZ25hbChuLCBTSUdfREZMKTsKLX0KLQotdm9pZCBkZWJ1Z2dlcl9pbml0KCkKLXsKLSAgICBzdHJ1Y3Qgc2lnYWN0aW9uIGFjdDsKLSAgICBtZW1zZXQoJmFjdCwgMCwgc2l6ZW9mKGFjdCkpOwotICAgIGFjdC5zYV9zaWdhY3Rpb24gPSBkZWJ1Z2dlcl9zaWduYWxfaGFuZGxlcjsKLSAgICBhY3Quc2FfZmxhZ3MgPSBTQV9SRVNUQVJUIHwgU0FfU0lHSU5GTzsKLSAgICBzaWdlbXB0eXNldCgmYWN0LnNhX21hc2spOwotCi0gICAgc2lnYWN0aW9uKFNJR0lMTCwgJmFjdCwgTlVMTCk7Ci0gICAgc2lnYWN0aW9uKFNJR0FCUlQsICZhY3QsIE5VTEwpOwotICAgIHNpZ2FjdGlvbihTSUdCVVMsICZhY3QsIE5VTEwpOwotICAgIHNpZ2FjdGlvbihTSUdGUEUsICZhY3QsIE5VTEwpOwotICAgIHNpZ2FjdGlvbihTSUdTRUdWLCAmYWN0LCBOVUxMKTsKLSAgICBzaWdhY3Rpb24oU0lHU1RLRkxULCAmYWN0LCBOVUxMKTsKLSAgICBzaWdhY3Rpb24oU0lHUElQRSwgJmFjdCwgTlVMTCk7Ci19CmRpZmYgLS1naXQgYS9saW5rZXIvZGVidWdnZXIuY3BwIGIvbGlua2VyL2RlYnVnZ2VyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzJhYTM5Ci0tLSAvZGV2L251bGwKKysrIGIvbGlua2VyL2RlYnVnZ2VyLmNwcApAQCAtMCwwICsxLDI2OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAibGlua2VyLmgiCisKKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHNpZ25hbC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3lzL21tYW4uaD4KKyNpbmNsdWRlIDxzeXMvcHJjdGwuaD4KKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjaW5jbHVkZSA8c3lzL3VuLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKK2V4dGVybiAiQyIgaW50IHRna2lsbChpbnQgdGdpZCwgaW50IHRpZCwgaW50IHNpZyk7CisKKyNkZWZpbmUgREVCVUdHRVJfU09DS0VUX05BTUUgImFuZHJvaWQ6ZGVidWdnZXJkIgorCitlbnVtIGRlYnVnZ2VyX2FjdGlvbl90IHsKKyAgICAvLyBkdW1wIGEgY3Jhc2gKKyAgICBERUJVR0dFUl9BQ1RJT05fQ1JBU0gsCisgICAgLy8gZHVtcCBhIHRvbWJzdG9uZSBmaWxlCisgICAgREVCVUdHRVJfQUNUSU9OX0RVTVBfVE9NQlNUT05FLAorICAgIC8vIGR1bXAgYSBiYWNrdHJhY2Ugb25seSBiYWNrIHRvIHRoZSBzb2NrZXQKKyAgICBERUJVR0dFUl9BQ1RJT05fRFVNUF9CQUNLVFJBQ0UsCit9OworCisvKiBtZXNzYWdlIHNlbnQgb3ZlciB0aGUgc29ja2V0ICovCitzdHJ1Y3QgZGVidWdnZXJfbXNnX3QgeworICAvLyB2ZXJzaW9uIDEgaW5jbHVkZWQ6CisgIGRlYnVnZ2VyX2FjdGlvbl90IGFjdGlvbjsKKyAgcGlkX3QgdGlkOworCisgIC8vIHZlcnNpb24gMiBhZGRlZDoKKyAgdWludHB0cl90IGFib3J0X21zZ19hZGRyZXNzOworfTsKKworLy8gc2VlIG1hbigyKSBwcmN0bCwgc3BlY2lmaWNhbGx5IHRoZSBzZWN0aW9uIGFib3V0IFBSX0dFVF9OQU1FCisjZGVmaW5lIE1BWF9UQVNLX05BTUVfTEVOICgxNikKKworc3RhdGljIGludCBzb2NrZXRfYWJzdHJhY3RfY2xpZW50KGNvbnN0IGNoYXIqIG5hbWUsIGludCB0eXBlKSB7CisgICAgc29ja2FkZHJfdW4gYWRkcjsKKworICAgIC8vIFRlc3Qgd2l0aCBsZW5ndGggKzEgZm9yIHRoZSAqaW5pdGlhbCogJ1wwJy4KKyAgICBzaXplX3QgbmFtZWxlbiA9IHN0cmxlbihuYW1lKTsKKyAgICBpZiAoKG5hbWVsZW4gKyAxKSA+IHNpemVvZihhZGRyLnN1bl9wYXRoKSkgeworICAgICAgICBlcnJubyA9IEVJTlZBTDsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIC8qIFRoaXMgaXMgdXNlZCBmb3IgYWJzdHJhY3Qgc29ja2V0IG5hbWVzcGFjZSwgd2UgbmVlZAorICAgICAqIGFuIGluaXRpYWwgJ1wwJyBhdCB0aGUgc3RhcnQgb2YgdGhlIFVuaXggc29ja2V0IHBhdGguCisgICAgICoKKyAgICAgKiBOb3RlOiBUaGUgcGF0aCBpbiB0aGlzIGNhc2UgaXMgKm5vdCogc3VwcG9zZWQgdG8gYmUKKyAgICAgKiAnXDAnLXRlcm1pbmF0ZWQuICgibWFuIDcgdW5peCIgZm9yIHRoZSBnb3J5IGRldGFpbHMuKQorICAgICAqLworICAgIG1lbXNldCgmYWRkciwgMCwgc2l6ZW9mKGFkZHIpKTsKKyAgICBhZGRyLnN1bl9mYW1pbHkgPSBBRl9MT0NBTDsKKyAgICBhZGRyLnN1bl9wYXRoWzBdID0gMDsKKyAgICBtZW1jcHkoYWRkci5zdW5fcGF0aCArIDEsIG5hbWUsIG5hbWVsZW4pOworCisgICAgc29ja2xlbl90IGFsZW4gPSBuYW1lbGVuICsgb2Zmc2V0b2Yoc29ja2FkZHJfdW4sIHN1bl9wYXRoKSArIDE7CisKKyAgICBpbnQgcyA9IHNvY2tldChBRl9MT0NBTCwgdHlwZSwgMCk7CisgICAgaWYgKHMgPT0gLTEpIHsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIGludCBlcnIgPSBURU1QX0ZBSUxVUkVfUkVUUlkoY29ubmVjdChzLCAoc29ja2FkZHIqKSAmYWRkciwgYWxlbikpOworICAgIGlmIChlcnIgPT0gLTEpIHsKKyAgICAgICAgY2xvc2Uocyk7CisgICAgICAgIHMgPSAtMTsKKyAgICB9CisKKyAgICByZXR1cm4gczsKK30KKworLyoKKyAqIFdyaXRlcyBhIHN1bW1hcnkgb2YgdGhlIHNpZ25hbCB0byB0aGUgbG9nIGZpbGUuICBXZSBkbyB0aGlzIHNvIHRoYXQsIGlmCisgKiBmb3Igc29tZSByZWFzb24gd2UncmUgbm90IGFibGUgdG8gY29udGFjdCBkZWJ1Z2dlcmQsIHRoZXJlIGlzIHN0aWxsIHNvbWUKKyAqIGluZGljYXRpb24gb2YgdGhlIGZhaWx1cmUgaW4gdGhlIGxvZy4KKyAqCisgKiBXZSBjb3VsZCBiZSBoZXJlIGFzIGEgcmVzdWx0IG9mIG5hdGl2ZSBoZWFwIGNvcnJ1cHRpb24sIG9yIHdoaWxlIGEKKyAqIG11dGV4IGlzIGJlaW5nIGhlbGQsIHNvIHdlIGRvbid0IHdhbnQgdG8gdXNlIGFueSBsaWJjIGZ1bmN0aW9ucyB0aGF0CisgKiBjb3VsZCBhbGxvY2F0ZSBtZW1vcnkgb3IgaG9sZCBhIGxvY2suCisgKi8KK3N0YXRpYyB2b2lkIGxvZ19zaWduYWxfc3VtbWFyeShpbnQgc2lnbnVtLCBjb25zdCBzaWdpbmZvX3QqIGluZm8pIHsKKyAgICBjb25zdCBjaGFyKiBzaWduYWxfbmFtZTsKKyAgICBzd2l0Y2ggKHNpZ251bSkgeworICAgICAgICBjYXNlIFNJR0lMTDogICAgc2lnbmFsX25hbWUgPSAiU0lHSUxMIjsgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNJR0FCUlQ6ICAgc2lnbmFsX25hbWUgPSAiU0lHQUJSVCI7ICAgIGJyZWFrOworICAgICAgICBjYXNlIFNJR0JVUzogICAgc2lnbmFsX25hbWUgPSAiU0lHQlVTIjsgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNJR0ZQRTogICAgc2lnbmFsX25hbWUgPSAiU0lHRlBFIjsgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNJR1NFR1Y6ICAgc2lnbmFsX25hbWUgPSAiU0lHU0VHViI7ICAgIGJyZWFrOworI2lmIGRlZmluZWQoU0lHU1RLRkxUKQorICAgICAgICBjYXNlIFNJR1NUS0ZMVDogc2lnbmFsX25hbWUgPSAiU0lHU1RLRkxUIjsgIGJyZWFrOworI2VuZGlmCisgICAgICAgIGNhc2UgU0lHUElQRTogICBzaWduYWxfbmFtZSA9ICJTSUdQSVBFIjsgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6ICAgICAgICBzaWduYWxfbmFtZSA9ICI/Pz8iOyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2hhciB0aHJlYWRfbmFtZVtNQVhfVEFTS19OQU1FX0xFTiArIDFdOyAvLyBvbmUgbW9yZSBmb3IgdGVybWluYXRpb24KKyAgICBpZiAocHJjdGwoUFJfR0VUX05BTUUsICh1bnNpZ25lZCBsb25nKXRocmVhZF9uYW1lLCAwLCAwLCAwKSAhPSAwKSB7CisgICAgICAgIHN0cmNweSh0aHJlYWRfbmFtZSwgIjxuYW1lIHVua25vd24+Iik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gc2hvcnQgbmFtZXMgYXJlIG51bGwgdGVybWluYXRlZCBieSBwcmN0bCwgYnV0IHRoZSBtYW4gcGFnZQorICAgICAgICAvLyBpbXBsaWVzIHRoYXQgMTYgYnl0ZSBuYW1lcyBhcmUgbm90LgorICAgICAgICB0aHJlYWRfbmFtZVtNQVhfVEFTS19OQU1FX0xFTl0gPSAwOworICAgIH0KKworICAgIC8vICJpbmZvIiB3aWxsIGJlIE5VTEwgaWYgdGhlIHNpZ2luZm9fdCBpbmZvcm1hdGlvbiB3YXMgbm90IGF2YWlsYWJsZS4KKyAgICBpZiAoaW5mbyAhPSBOVUxMKSB7CisgICAgICAgIF9fbGliY19mb3JtYXRfbG9nKEFORFJPSURfTE9HX0ZBVEFMLCAibGliYyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICJGYXRhbCBzaWduYWwgJWQgKCVzKSBhdCAweCUwOHggKGNvZGU9JWQpLCB0aHJlYWQgJWQgKCVzKSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ251bSwgc2lnbmFsX25hbWUsIHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihpbmZvLT5zaV9hZGRyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mby0+c2lfY29kZSwgZ2V0dGlkKCksIHRocmVhZF9uYW1lKTsKKyAgICB9IGVsc2UgeworICAgICAgICBfX2xpYmNfZm9ybWF0X2xvZyhBTkRST0lEX0xPR19GQVRBTCwgImxpYmMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAiRmF0YWwgc2lnbmFsICVkICglcyksIHRocmVhZCAlZCAoJXMpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnbnVtLCBzaWduYWxfbmFtZSwgZ2V0dGlkKCksIHRocmVhZF9uYW1lKTsKKyAgICB9Cit9CisKKy8qCisgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGhhbmRsZXIgZm9yIHNpZ25hbCAic2lnbnVtIiBoYXMgU0FfU0lHSU5GTyBzZXQuCisgKi8KK3N0YXRpYyBib29sIGhhdmVfc2lnaW5mbyhpbnQgc2lnbnVtKSB7CisgICAgc3RydWN0IHNpZ2FjdGlvbiBvbGRfYWN0aW9uLCBuZXdfYWN0aW9uOworCisgICAgbWVtc2V0KCZuZXdfYWN0aW9uLCAwLCBzaXplb2YobmV3X2FjdGlvbikpOworICAgIG5ld19hY3Rpb24uc2FfaGFuZGxlciA9IFNJR19ERkw7CisgICAgbmV3X2FjdGlvbi5zYV9mbGFncyA9IFNBX1JFU1RBUlQ7CisgICAgc2lnZW1wdHlzZXQoJm5ld19hY3Rpb24uc2FfbWFzayk7CisKKyAgICBpZiAoc2lnYWN0aW9uKHNpZ251bSwgJm5ld19hY3Rpb24sICZvbGRfYWN0aW9uKSA8IDApIHsKKyAgICAgIF9fbGliY19mb3JtYXRfbG9nKEFORFJPSURfTE9HX1dBUk4sICJsaWJjIiwgIkZhaWxlZCB0ZXN0aW5nIGZvciBTQV9TSUdJTkZPOiAlcyIsCisgICAgICAgICAgICAgICAgICAgICAgICBzdHJlcnJvcihlcnJubykpOworICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBib29sIHJlc3VsdCA9IChvbGRfYWN0aW9uLnNhX2ZsYWdzICYgU0FfU0lHSU5GTykgIT0gMDsKKworICAgIGlmIChzaWdhY3Rpb24oc2lnbnVtLCAmb2xkX2FjdGlvbiwgTlVMTCkgPT0gLTEpIHsKKyAgICAgIF9fbGliY19mb3JtYXRfbG9nKEFORFJPSURfTE9HX1dBUk4sICJsaWJjIiwgIlJlc3RvcmUgZmFpbGVkIGluIHRlc3QgZm9yIFNBX1NJR0lORk86ICVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVycm9yKGVycm5vKSk7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBDYXRjaGVzIGZhdGFsIHNpZ25hbHMgc28gd2UgY2FuIGFzayBkZWJ1Z2dlcmQgdG8gcHRyYWNlIHVzIGJlZm9yZQorICogd2UgY3Jhc2guCisgKi8KK3ZvaWQgZGVidWdnZXJkX3NpZ25hbF9oYW5kbGVyKGludCBuLCBzaWdpbmZvX3QqIGluZm8sIHZvaWQqKSB7CisgICAgLyoKKyAgICAgKiBJdCdzIHBvc3NpYmxlIHNvbWVib2R5IGNsZWFyZWQgdGhlIFNBX1NJR0lORk8gZmxhZywgd2hpY2ggd291bGQgbWVhbgorICAgICAqIG91ciAiaW5mbyIgYXJnIGhvbGRzIGFuIHVuZGVmaW5lZCB2YWx1ZS4KKyAgICAgKi8KKyAgICBpZiAoIWhhdmVfc2lnaW5mbyhuKSkgeworICAgICAgICBpbmZvID0gTlVMTDsKKyAgICB9CisKKyAgICBsb2dfc2lnbmFsX3N1bW1hcnkobiwgaW5mbyk7CisKKyAgICBwaWRfdCB0aWQgPSBnZXR0aWQoKTsKKyAgICBpbnQgcyA9IHNvY2tldF9hYnN0cmFjdF9jbGllbnQoREVCVUdHRVJfU09DS0VUX05BTUUsIFNPQ0tfU1RSRUFNKTsKKworICAgIGlmIChzID49IDApIHsKKyAgICAgICAgLy8gZGVidWdnZXJkIGtub3dzIG91ciBwaWQgZnJvbSB0aGUgY3JlZGVudGlhbHMgb24gdGhlCisgICAgICAgIC8vIGxvY2FsIHNvY2tldCBidXQgd2UgbmVlZCB0byB0ZWxsIGl0IHRoZSB0aWQgb2YgdGhlIGNyYXNoaW5nIHRocmVhZC4KKyAgICAgICAgLy8gZGVidWdnZXJkIHdpbGwgYmUgcGFyYW5vaWQgYW5kIHZlcmlmeSB0aGF0IHdlIHNlbnQgYSB0aWQKKyAgICAgICAgLy8gdGhhdCdzIGFjdHVhbGx5IGluIG91ciBwcm9jZXNzLgorICAgICAgICBkZWJ1Z2dlcl9tc2dfdCBtc2c7CisgICAgICAgIG1zZy5hY3Rpb24gPSBERUJVR0dFUl9BQ1RJT05fQ1JBU0g7CisgICAgICAgIG1zZy50aWQgPSB0aWQ7CisgICAgICAgIG1zZy5hYm9ydF9tc2dfYWRkcmVzcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihnQWJvcnRNZXNzYWdlKTsKKyAgICAgICAgaW50IHJldCA9IFRFTVBfRkFJTFVSRV9SRVRSWSh3cml0ZShzLCAmbXNnLCBzaXplb2YobXNnKSkpOworICAgICAgICBpZiAocmV0ID09IHNpemVvZihtc2cpKSB7CisgICAgICAgICAgICAvLyBpZiB0aGUgd3JpdGUgZmFpbGVkLCB0aGVyZSBpcyBubyBwb2ludCB0cnlpbmcgdG8gcmVhZCBhIHJlc3BvbnNlLgorICAgICAgICAgICAgcmV0ID0gVEVNUF9GQUlMVVJFX1JFVFJZKHJlYWQocywgJnRpZCwgMSkpOworICAgICAgICAgICAgaW50IHNhdmVkX2Vycm5vID0gZXJybm87CisgICAgICAgICAgICBub3RpZnlfZ2RiX29mX2xpYnJhcmllcygpOworICAgICAgICAgICAgZXJybm8gPSBzYXZlZF9lcnJubzsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChyZXQgPCAwKSB7CisgICAgICAgICAgICAvKiByZWFkIG9yIHdyaXRlIGZhaWxlZCAtLSBicm9rZW4gY29ubmVjdGlvbj8gKi8KKyAgICAgICAgICAgIF9fbGliY19mb3JtYXRfbG9nKEFORFJPSURfTE9HX0ZBVEFMLCAibGliYyIsICJGYWlsZWQgd2hpbGUgdGFsa2luZyB0byBkZWJ1Z2dlcmQ6ICVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgIH0KKworICAgICAgICBjbG9zZShzKTsKKyAgICB9IGVsc2UgeworICAgICAgICAvKiBzb2NrZXQgZmFpbGVkOyBtYXliZSBwcm9jZXNzIHJhbiBvdXQgb2YgZmRzICovCisgICAgICAgIF9fbGliY19mb3JtYXRfbG9nKEFORFJPSURfTE9HX0ZBVEFMLCAibGliYyIsICJVbmFibGUgdG8gb3BlbiBjb25uZWN0aW9uIHRvIGRlYnVnZ2VyZDogJXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlcnJvcihlcnJubykpOworICAgIH0KKworICAgIC8qIHJlbW92ZSBvdXIgbmV0IHNvIHdlIGZhdWx0IGZvciByZWFsIHdoZW4gd2UgcmV0dXJuICovCisgICAgc2lnbmFsKG4sIFNJR19ERkwpOworCisgICAgLyoKKyAgICAgKiBUaGVzZSBzaWduYWxzIGFyZSBub3QgcmUtdGhyb3duIHdoZW4gd2UgcmVzdW1lLiAgVGhpcyBtZWFucyB0aGF0CisgICAgICogY3Jhc2hpbmcgZHVlIHRvIChzYXkpIFNJR1BJUEUgZG9lc24ndCB3b3JrIHRoZSB3YXkgeW91J2QgZXhwZWN0IGl0CisgICAgICogdG8uICBXZSB3b3JrIGFyb3VuZCB0aGlzIGJ5IHRocm93aW5nIHRoZW0gbWFudWFsbHkuICBXZSBkb24ndCB3YW50CisgICAgICogdG8gZG8gdGhpcyBmb3IgKmFsbCogc2lnbmFscyBiZWNhdXNlIGl0J2xsIHNjcmV3IHVwIHRoZSBhZGRyZXNzIGZvcgorICAgICAqIGZhdWx0cyBsaWtlIFNJR1NFR1YuCisgICAgICovCisgICAgc3dpdGNoIChuKSB7CisgICAgICAgIGNhc2UgU0lHQUJSVDoKKyAgICAgICAgY2FzZSBTSUdGUEU6CisgICAgICAgIGNhc2UgU0lHUElQRToKKyNpZmRlZiBTSUdTVEtGTFQKKyAgICAgICAgY2FzZSBTSUdTVEtGTFQ6CisjZW5kaWYKKyAgICAgICAgICAgICh2b2lkKSB0Z2tpbGwoZ2V0cGlkKCksIGdldHRpZCgpLCBuKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OiAgICAvLyBTSUdJTEwsIFNJR0JVUywgU0lHU0VHVgorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorfQorCit2b2lkIGRlYnVnZ2VyZF9pbml0KCkgeworICAgIHN0cnVjdCBzaWdhY3Rpb24gYWN0aW9uOworICAgIG1lbXNldCgmYWN0aW9uLCAwLCBzaXplb2YoYWN0aW9uKSk7CisgICAgc2lnZW1wdHlzZXQoJmFjdGlvbi5zYV9tYXNrKTsKKyAgICBhY3Rpb24uc2Ffc2lnYWN0aW9uID0gZGVidWdnZXJkX3NpZ25hbF9oYW5kbGVyOworICAgIGFjdGlvbi5zYV9mbGFncyA9IFNBX1JFU1RBUlQgfCBTQV9TSUdJTkZPOworCisgICAgLy8gVXNlIHRoZSBhbHRlcm5hdGUgc2lnbmFsIHN0YWNrIGlmIGF2YWlsYWJsZSBzbyB3ZSBjYW4gY2F0Y2ggc3RhY2sgb3ZlcmZsb3dzLgorICAgIGFjdGlvbi5zYV9mbGFncyB8PSBTQV9PTlNUQUNLOworCisgICAgc2lnYWN0aW9uKFNJR0FCUlQsICZhY3Rpb24sIE5VTEwpOworICAgIHNpZ2FjdGlvbihTSUdCVVMsICZhY3Rpb24sIE5VTEwpOworICAgIHNpZ2FjdGlvbihTSUdGUEUsICZhY3Rpb24sIE5VTEwpOworICAgIHNpZ2FjdGlvbihTSUdJTEwsICZhY3Rpb24sIE5VTEwpOworICAgIHNpZ2FjdGlvbihTSUdQSVBFLCAmYWN0aW9uLCBOVUxMKTsKKyAgICBzaWdhY3Rpb24oU0lHU0VHViwgJmFjdGlvbiwgTlVMTCk7CisjaWYgZGVmaW5lZChTSUdTVEtGTFQpCisgICAgc2lnYWN0aW9uKFNJR1NUS0ZMVCwgJmFjdGlvbiwgTlVMTCk7CisjZW5kaWYKKyAgICBzaWdhY3Rpb24oU0lHVFJBUCwgJmFjdGlvbiwgTlVMTCk7Cit9CmRpZmYgLS1naXQgYS9saW5rZXIvZGxmY24uYyBiL2xpbmtlci9kbGZjbi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOTRhNGFlLi4wMDAwMDAwCi0tLSBhL2xpbmtlci9kbGZjbi5jCisrKyAvZGV2L251bGwKQEAgLTEsMjYzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotI2luY2x1ZGUgPGRsZmNuLmg+Ci0jaW5jbHVkZSA8cHRocmVhZC5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSAibGlua2VyLmgiCi0jaW5jbHVkZSAibGlua2VyX2Zvcm1hdC5oIgotCi0vKiBUaGlzIGZpbGUgaGlqYWNrcyB0aGUgc3ltYm9scyBzdHViYmVkIG91dCBpbiBsaWJkbC5zby4gKi8KLQotI2RlZmluZSBETF9TVUNDRVNTICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIERMX0VSUl9DQU5OT1RfTE9BRF9MSUJSQVJZICAgIDEKLSNkZWZpbmUgRExfRVJSX0lOVkFMSURfTElCUkFSWV9IQU5ETEUgMgotI2RlZmluZSBETF9FUlJfQkFEX1NZTUJPTF9OQU1FICAgICAgICAzCi0jZGVmaW5lIERMX0VSUl9TWU1CT0xfTk9UX0ZPVU5EICAgICAgIDQKLSNkZWZpbmUgRExfRVJSX1NZTUJPTF9OT1RfR0xPQkFMICAgICAgNQotCi1zdGF0aWMgY2hhciBkbF9lcnJfYnVmWzEwMjRdOwotc3RhdGljIGNvbnN0IGNoYXIgKmRsX2Vycl9zdHI7Ci0KLXN0YXRpYyBjb25zdCBjaGFyICpkbF9lcnJvcnNbXSA9IHsKLSAgICBbRExfRVJSX0NBTk5PVF9MT0FEX0xJQlJBUlldID0gIkNhbm5vdCBsb2FkIGxpYnJhcnkiLAotICAgIFtETF9FUlJfSU5WQUxJRF9MSUJSQVJZX0hBTkRMRV0gPSAiSW52YWxpZCBsaWJyYXJ5IGhhbmRsZSIsCi0gICAgW0RMX0VSUl9CQURfU1lNQk9MX05BTUVdID0gIkludmFsaWQgc3ltYm9sIG5hbWUiLAotICAgIFtETF9FUlJfU1lNQk9MX05PVF9GT1VORF0gPSAiU3ltYm9sIG5vdCBmb3VuZCIsCi0gICAgW0RMX0VSUl9TWU1CT0xfTk9UX0dMT0JBTF0gPSAiU3ltYm9sIGlzIG5vdCBnbG9iYWwiLAotfTsKLQotI2RlZmluZSBsaWtlbHkoZXhwcikgICBfX2J1aWx0aW5fZXhwZWN0IChleHByLCAxKQotI2RlZmluZSB1bmxpa2VseShleHByKSBfX2J1aWx0aW5fZXhwZWN0IChleHByLCAwKQotCi1wdGhyZWFkX211dGV4X3QgZGxfbG9jayA9IFBUSFJFQURfUkVDVVJTSVZFX01VVEVYX0lOSVRJQUxJWkVSOwotCi1zdGF0aWMgdm9pZCBzZXRfZGxlcnJvcihpbnQgZXJyKQotewotICAgIGZvcm1hdF9idWZmZXIoZGxfZXJyX2J1Ziwgc2l6ZW9mKGRsX2Vycl9idWYpLCAiJXM6ICVzIiwgZGxfZXJyb3JzW2Vycl0sCi0gICAgICAgICAgICAgbGlua2VyX2dldF9lcnJvcigpKTsKLSAgICBkbF9lcnJfc3RyID0gKGNvbnN0IGNoYXIgKikmZGxfZXJyX2J1ZlswXTsKLX07Ci0KLXZvaWQgKmRsb3Blbihjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IGZsYWcpCi17Ci0gICAgc29pbmZvICpyZXQ7Ci0KLSAgICBwdGhyZWFkX211dGV4X2xvY2soJmRsX2xvY2spOwotICAgIHJldCA9IGZpbmRfbGlicmFyeShmaWxlbmFtZSk7Ci0gICAgaWYgKHVubGlrZWx5KHJldCA9PSBOVUxMKSkgewotICAgICAgICBzZXRfZGxlcnJvcihETF9FUlJfQ0FOTk9UX0xPQURfTElCUkFSWSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcmV0LT5yZWZjb3VudCsrOwotICAgIH0KLSAgICBwdGhyZWFkX211dGV4X3VubG9jaygmZGxfbG9jayk7Ci0gICAgcmV0dXJuIHJldDsKLX0KLQotY29uc3QgY2hhciAqZGxlcnJvcih2b2lkKQotewotICAgIGNvbnN0IGNoYXIgKnRtcCA9IGRsX2Vycl9zdHI7Ci0gICAgZGxfZXJyX3N0ciA9IE5VTEw7Ci0gICAgcmV0dXJuIChjb25zdCBjaGFyICopdG1wOwotfQotCi12b2lkICpkbHN5bSh2b2lkICpoYW5kbGUsIGNvbnN0IGNoYXIgKnN5bWJvbCkKLXsKLSAgICBzb2luZm8gKmZvdW5kOwotICAgIEVsZjMyX1N5bSAqc3ltOwotICAgIHVuc2lnbmVkIGJpbmQ7Ci0KLSAgICBwdGhyZWFkX211dGV4X2xvY2soJmRsX2xvY2spOwotCi0gICAgaWYodW5saWtlbHkoaGFuZGxlID09IDApKSB7IAotICAgICAgICBzZXRfZGxlcnJvcihETF9FUlJfSU5WQUxJRF9MSUJSQVJZX0hBTkRMRSk7Ci0gICAgICAgIGdvdG8gZXJyOwotICAgIH0KLSAgICBpZih1bmxpa2VseShzeW1ib2wgPT0gMCkpIHsKLSAgICAgICAgc2V0X2RsZXJyb3IoRExfRVJSX0JBRF9TWU1CT0xfTkFNRSk7Ci0gICAgICAgIGdvdG8gZXJyOwotICAgIH0KLQotICAgIGlmKGhhbmRsZSA9PSBSVExEX0RFRkFVTFQpIHsKLSAgICAgICAgc3ltID0gbG9va3VwKHN5bWJvbCwgJmZvdW5kLCBOVUxMKTsKLSAgICB9IGVsc2UgaWYoaGFuZGxlID09IFJUTERfTkVYVCkgewotICAgICAgICB2b2lkICpyZXRfYWRkciA9IF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKTsKLSAgICAgICAgc29pbmZvICpzaSA9IGZpbmRfY29udGFpbmluZ19saWJyYXJ5KHJldF9hZGRyKTsKLQotICAgICAgICBzeW0gPSBOVUxMOwotICAgICAgICBpZihzaSAmJiBzaS0+bmV4dCkgewotICAgICAgICAgICAgc3ltID0gbG9va3VwKHN5bWJvbCwgJmZvdW5kLCBzaS0+bmV4dCk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBmb3VuZCA9IChzb2luZm8qKWhhbmRsZTsKLSAgICAgICAgc3ltID0gbG9va3VwX2luX2xpYnJhcnkoZm91bmQsIHN5bWJvbCk7Ci0gICAgfQotCi0gICAgaWYobGlrZWx5KHN5bSAhPSAwKSkgewotICAgICAgICBiaW5kID0gRUxGMzJfU1RfQklORChzeW0tPnN0X2luZm8pOwotCi0gICAgICAgIGlmKGxpa2VseSgoYmluZCA9PSBTVEJfR0xPQkFMKSAmJiAoc3ltLT5zdF9zaG5keCAhPSAwKSkpIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIHJldCA9IHN5bS0+c3RfdmFsdWUgKyBmb3VuZC0+YmFzZTsKLSAgICAgICAgICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZkbF9sb2NrKTsKLSAgICAgICAgICAgIHJldHVybiAodm9pZCopcmV0OwotICAgICAgICB9Ci0KLSAgICAgICAgc2V0X2RsZXJyb3IoRExfRVJSX1NZTUJPTF9OT1RfR0xPQkFMKTsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgICBzZXRfZGxlcnJvcihETF9FUlJfU1lNQk9MX05PVF9GT1VORCk7Ci0KLWVycjoKLSAgICBwdGhyZWFkX211dGV4X3VubG9jaygmZGxfbG9jayk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLWludCBkbGFkZHIoY29uc3Qgdm9pZCAqYWRkciwgRGxfaW5mbyAqaW5mbykKLXsKLSAgICBpbnQgcmV0ID0gMDsKLQotICAgIHB0aHJlYWRfbXV0ZXhfbG9jaygmZGxfbG9jayk7Ci0KLSAgICAvKiBEZXRlcm1pbmUgaWYgdGhpcyBhZGRyZXNzIGNhbiBiZSBmb3VuZCBpbiBhbnkgbGlicmFyeSBjdXJyZW50bHkgbWFwcGVkICovCi0gICAgc29pbmZvICpzaSA9IGZpbmRfY29udGFpbmluZ19saWJyYXJ5KGFkZHIpOwotCi0gICAgaWYoc2kpIHsKLSAgICAgICAgbWVtc2V0KGluZm8sIDAsIHNpemVvZihEbF9pbmZvKSk7Ci0KLSAgICAgICAgaW5mby0+ZGxpX2ZuYW1lID0gc2ktPm5hbWU7Ci0gICAgICAgIGluZm8tPmRsaV9mYmFzZSA9ICh2b2lkKilzaS0+YmFzZTsKLQotICAgICAgICAvKiBEZXRlcm1pbmUgaWYgYW55IHN5bWJvbCBpbiB0aGUgbGlicmFyeSBjb250YWlucyB0aGUgc3BlY2lmaWVkIGFkZHJlc3MgKi8KLSAgICAgICAgRWxmMzJfU3ltICpzeW0gPSBmaW5kX2NvbnRhaW5pbmdfc3ltYm9sKGFkZHIsIHNpKTsKLQotICAgICAgICBpZihzeW0gIT0gTlVMTCkgewotICAgICAgICAgICAgaW5mby0+ZGxpX3NuYW1lID0gc2ktPnN0cnRhYiArIHN5bS0+c3RfbmFtZTsKLSAgICAgICAgICAgIGluZm8tPmRsaV9zYWRkciA9ICh2b2lkKikoc2ktPmJhc2UgKyBzeW0tPnN0X3ZhbHVlKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldCA9IDE7Ci0gICAgfQotCi0gICAgcHRocmVhZF9tdXRleF91bmxvY2soJmRsX2xvY2spOwotCi0gICAgcmV0dXJuIHJldDsKLX0KLQotaW50IGRsY2xvc2Uodm9pZCAqaGFuZGxlKQotewotICAgIHB0aHJlYWRfbXV0ZXhfbG9jaygmZGxfbG9jayk7Ci0gICAgKHZvaWQpdW5sb2FkX2xpYnJhcnkoKHNvaW5mbyopaGFuZGxlKTsKLSAgICBwdGhyZWFkX211dGV4X3VubG9jaygmZGxfbG9jayk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLSNpZiBkZWZpbmVkKEFORFJPSURfQVJNX0xJTktFUikKLS8vICAgICAgICAgICAgICAgICAgICAgMDAwMDAwMCAwMDAxMTExMSAxMTExMTIgMjIyMjIyMjIgMjMzMzMzMyAzMzMzNDQ0NDQ0NDQ0NDU1NTU1NTUKLS8vICAgICAgICAgICAgICAgICAgICAgMDEyMzQ1NiA3ODkwMTIzNCA1Njc4OTAgMTIzNDU2NzggOTAxMjM0NSA2Nzg5MDEyMzQ1Njc4OTAxMjM0NTYKLSNkZWZpbmUgQU5EUk9JRF9MSUJETF9TVFJUQUIgXAotICAgICAgICAgICAgICAgICAgICAgICJkbG9wZW5cMGRsY2xvc2VcMGRsc3ltXDBkbGVycm9yXDBkbGFkZHJcMGRsX3Vud2luZF9maW5kX2V4aWR4XDAiCi0KLSNlbGlmIGRlZmluZWQoQU5EUk9JRF9YODZfTElOS0VSKQotLy8gICAgICAgICAgICAgICAgICAgICAwMDAwMDAwIDAwMDExMTExIDExMTExMiAyMjIyMjIyMiAyMzMzMzMzIDMzMzM0NDQ0NDQ0NDQ0NTUKLS8vICAgICAgICAgICAgICAgICAgICAgMDEyMzQ1NiA3ODkwMTIzNCA1Njc4OTAgMTIzNDU2NzggOTAxMjM0NSA2Nzg5MDEyMzQ1Njc4OTAxCi0jZGVmaW5lIEFORFJPSURfTElCRExfU1RSVEFCIFwKLSAgICAgICAgICAgICAgICAgICAgICAiZGxvcGVuXDBkbGNsb3NlXDBkbHN5bVwwZGxlcnJvclwwZGxhZGRyXDBkbF9pdGVyYXRlX3BoZHJcMCIKLSNlbHNlCi0jZXJyb3IgVW5zdXBwb3J0ZWQgYXJjaGl0ZWN0dXJlLiBPbmx5IEFSTSBhbmQgeDg2IGFyZSBwcmVzZW50bHkgc3VwcG9ydGVkLgotI2VuZGlmCi0KLQotc3RhdGljIEVsZjMyX1N5bSBsaWJkbF9zeW10YWJbXSA9IHsKLSAgICAgIC8vIHRvdGFsIGxlbmd0aCBvZiBsaWJkbF9pbmZvLnN0cnRhYiwgaW5jbHVkaW5nIHRyYWlsaW5nIDAKLSAgICAgIC8vIFRoaXMgaXMgYWN0dWFsbHkgdGhlIHRoZSBTVEhfVU5ERUYgZW50cnkuIFRlY2huaWNhbGx5LCBpdCdzCi0gICAgICAvLyBzdXBwb3NlZCB0byBoYXZlIHN0X25hbWUgPT0gMCwgYnV0IGluc3RlYWQsIGl0IHBvaW50cyB0byBhbiBpbmRleAotICAgICAgLy8gaW4gdGhlIHN0cnRhYiB3aXRoIGEgXDAgdG8gbWFrZSBpdGVyYXRpbmcgdGhyb3VnaCB0aGUgc3ltdGFiIGVhc2llci4KLSAgICB7IHN0X25hbWU6IHNpemVvZihBTkRST0lEX0xJQkRMX1NUUlRBQikgLSAxLAotICAgIH0sCi0gICAgeyBzdF9uYW1lOiAwLCAgIC8vIHN0YXJ0aW5nIGluZGV4IG9mIHRoZSBuYW1lIGluIGxpYmRsX2luZm8uc3RydGFiCi0gICAgICBzdF92YWx1ZTogKEVsZjMyX0FkZHIpICZkbG9wZW4sCi0gICAgICBzdF9pbmZvOiBTVEJfR0xPQkFMIDw8IDQsCi0gICAgICBzdF9zaG5keDogMSwKLSAgICB9LAotICAgIHsgc3RfbmFtZTogNywKLSAgICAgIHN0X3ZhbHVlOiAoRWxmMzJfQWRkcikgJmRsY2xvc2UsCi0gICAgICBzdF9pbmZvOiBTVEJfR0xPQkFMIDw8IDQsCi0gICAgICBzdF9zaG5keDogMSwKLSAgICB9LAotICAgIHsgc3RfbmFtZTogMTUsCi0gICAgICBzdF92YWx1ZTogKEVsZjMyX0FkZHIpICZkbHN5bSwKLSAgICAgIHN0X2luZm86IFNUQl9HTE9CQUwgPDwgNCwKLSAgICAgIHN0X3NobmR4OiAxLAotICAgIH0sCi0gICAgeyBzdF9uYW1lOiAyMSwKLSAgICAgIHN0X3ZhbHVlOiAoRWxmMzJfQWRkcikgJmRsZXJyb3IsCi0gICAgICBzdF9pbmZvOiBTVEJfR0xPQkFMIDw8IDQsCi0gICAgICBzdF9zaG5keDogMSwKLSAgICB9LAotICAgIHsgc3RfbmFtZTogMjksCi0gICAgICBzdF92YWx1ZTogKEVsZjMyX0FkZHIpICZkbGFkZHIsCi0gICAgICBzdF9pbmZvOiBTVEJfR0xPQkFMIDw8IDQsCi0gICAgICBzdF9zaG5keDogMSwKLSAgICB9LAotI2lmZGVmIEFORFJPSURfQVJNX0xJTktFUgotICAgIHsgc3RfbmFtZTogMzYsCi0gICAgICBzdF92YWx1ZTogKEVsZjMyX0FkZHIpICZkbF91bndpbmRfZmluZF9leGlkeCwKLSAgICAgIHN0X2luZm86IFNUQl9HTE9CQUwgPDwgNCwKLSAgICAgIHN0X3NobmR4OiAxLAotICAgIH0sCi0jZWxpZiBkZWZpbmVkKEFORFJPSURfWDg2X0xJTktFUikKLSAgICB7IHN0X25hbWU6IDM2LAotICAgICAgc3RfdmFsdWU6IChFbGYzMl9BZGRyKSAmZGxfaXRlcmF0ZV9waGRyLAotICAgICAgc3RfaW5mbzogU1RCX0dMT0JBTCA8PCA0LAotICAgICAgc3Rfc2huZHg6IDEsCi0gICAgfSwKLSNlbmRpZgotfTsKLQotLyogRmFrZSBvdXQgYSBoYXNoIHRhYmxlIHdpdGggYSBzaW5nbGUgYnVja2V0LgotICogQSBzZWFyY2ggb2YgdGhlIGhhc2ggdGFibGUgd2lsbCBsb29rIHRocm91Z2gKLSAqIGxpYmRsX3N5bXRhYiBzdGFydGluZyB3aXRoIGluZGV4IFsxXSwgdGhlbgotICogdXNlIGxpYmRsX2NoYWlucyB0byBmaW5kIHRoZSBuZXh0IGluZGV4IHRvCi0gKiBsb29rIGF0LiAgbGliZGxfY2hhaW5zIHNob3VsZCBiZSBzZXQgdXAgdG8KLSAqIHdhbGsgdGhyb3VnaCBldmVyeSBlbGVtZW50IGluIGxpYmRsX3N5bXRhYiwKLSAqIGFuZCB0aGVuIGVuZCB3aXRoIDAgKHNlbnRpbmVsIHZhbHVlKS4KLSAqCi0gKiBJLmUuLCBsaWJkbF9jaGFpbnMgc2hvdWxkIGxvb2sgbGlrZQotICogeyAwLCAyLCAzLCAuLi4gTiwgMCB9IHdoZXJlIE4gaXMgdGhlIG51bWJlcgotICogb2YgYWN0dWFsIHN5bWJvbHMsIG9yIG5lbGVtcyhsaWJkbF9zeW10YWIpLTEKLSAqIChzaW5jZSB0aGUgZmlyc3QgZWxlbWVudCBvZiBsaWJkbF9zeW10YWIgaXMgbm90Ci0gKiBhIHJlYWwgc3ltYm9sKS4KLSAqCi0gKiAoc2VlIF9lbGZfbG9va3VwKCkpCi0gKgotICogTm90ZSB0aGF0IGFkZGluZyBhbnkgbmV3IHN5bWJvbHMgaGVyZSByZXF1aXJlcwotICogc3R1YmJpbmcgdGhlbSBvdXQgaW4gbGliZGwuCi0gKi8KLXN0YXRpYyB1bnNpZ25lZCBsaWJkbF9idWNrZXRzWzFdID0geyAxIH07Ci1zdGF0aWMgdW5zaWduZWQgbGliZGxfY2hhaW5zWzddID0geyAwLCAyLCAzLCA0LCA1LCA2LCAwIH07Ci0KLXNvaW5mbyBsaWJkbF9pbmZvID0gewotICAgIG5hbWU6ICJsaWJkbC5zbyIsCi0gICAgZmxhZ3M6IEZMQUdfTElOS0VELAotCi0gICAgc3RydGFiOiBBTkRST0lEX0xJQkRMX1NUUlRBQiwKLSAgICBzeW10YWI6IGxpYmRsX3N5bXRhYiwKLQotICAgIG5idWNrZXQ6IDEsCi0gICAgbmNoYWluOiA3LAotICAgIGJ1Y2tldDogbGliZGxfYnVja2V0cywKLSAgICBjaGFpbjogbGliZGxfY2hhaW5zLAotfTsKLSAgICAKZGlmZiAtLWdpdCBhL2xpbmtlci9kbGZjbi5jcHAgYi9saW5rZXIvZGxmY24uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzODE2NGQKLS0tIC9kZXYvbnVsbAorKysgYi9saW5rZXIvZGxmY24uY3BwCkBAIC0wLDAgKzEsMjQ3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2luY2x1ZGUgImxpbmtlci5oIgorCisjaW5jbHVkZSA8ZGxmY24uaD4KKyNpbmNsdWRlIDxwdGhyZWFkLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworI2luY2x1ZGUgPGJpb25pYy9wdGhyZWFkX2ludGVybmFsLmg+CisjaW5jbHVkZSA8cHJpdmF0ZS9iaW9uaWNfdGxzLmg+CisjaW5jbHVkZSA8cHJpdmF0ZS9TY29wZWRQdGhyZWFkTXV0ZXhMb2NrZXIuaD4KKyNpbmNsdWRlIDxwcml2YXRlL1RocmVhZExvY2FsQnVmZmVyLmg+CisKKy8qIFRoaXMgZmlsZSBoaWphY2tzIHRoZSBzeW1ib2xzIHN0dWJiZWQgb3V0IGluIGxpYmRsLnNvLiAqLworCitzdGF0aWMgcHRocmVhZF9tdXRleF90IGdEbE11dGV4ID0gUFRIUkVBRF9SRUNVUlNJVkVfTVVURVhfSU5JVElBTElaRVI7CisKK3N0YXRpYyBjb25zdCBjaGFyKiBfX2Jpb25pY19zZXRfZGxlcnJvcihjaGFyKiBuZXdfdmFsdWUpIHsKKyAgdm9pZCogdGxzID0gY29uc3RfY2FzdDx2b2lkKj4oX19nZXRfdGxzKCkpOworICBjaGFyKiogZGxlcnJvcl9zbG90ID0gJnJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcioqPih0bHMpW1RMU19TTE9UX0RMRVJST1JdOworCisgIGNvbnN0IGNoYXIqIG9sZF92YWx1ZSA9ICpkbGVycm9yX3Nsb3Q7CisgICpkbGVycm9yX3Nsb3QgPSBuZXdfdmFsdWU7CisgIHJldHVybiBvbGRfdmFsdWU7Cit9CisKK3N0YXRpYyB2b2lkIF9fYmlvbmljX2Zvcm1hdF9kbGVycm9yKGNvbnN0IGNoYXIqIG1zZywgY29uc3QgY2hhciogZGV0YWlsKSB7CisgIGNoYXIqIGJ1ZmZlciA9IF9fZ2V0X3RocmVhZCgpLT5kbGVycm9yX2J1ZmZlcjsKKyAgc3RybGNweShidWZmZXIsIG1zZywgX19CSU9OSUNfRExFUlJPUl9CVUZGRVJfU0laRSk7CisgIGlmIChkZXRhaWwgIT0gTlVMTCkgeworICAgIHN0cmxjYXQoYnVmZmVyLCAiOiAiLCBfX0JJT05JQ19ETEVSUk9SX0JVRkZFUl9TSVpFKTsKKyAgICBzdHJsY2F0KGJ1ZmZlciwgZGV0YWlsLCBfX0JJT05JQ19ETEVSUk9SX0JVRkZFUl9TSVpFKTsKKyAgfQorCisgIF9fYmlvbmljX3NldF9kbGVycm9yKGJ1ZmZlcik7Cit9CisKK2NvbnN0IGNoYXIqIGRsZXJyb3IoKSB7CisgIGNvbnN0IGNoYXIqIG9sZF92YWx1ZSA9IF9fYmlvbmljX3NldF9kbGVycm9yKE5VTEwpOworICByZXR1cm4gb2xkX3ZhbHVlOworfQorCit2b2lkIGFuZHJvaWRfdXBkYXRlX0xEX0xJQlJBUllfUEFUSChjb25zdCBjaGFyKiBsZF9saWJyYXJ5X3BhdGgpIHsKKyAgU2NvcGVkUHRocmVhZE11dGV4TG9ja2VyIGxvY2tlcigmZ0RsTXV0ZXgpOworICBkb19hbmRyb2lkX3VwZGF0ZV9MRF9MSUJSQVJZX1BBVEgobGRfbGlicmFyeV9wYXRoKTsKK30KKwordm9pZCogZGxvcGVuKGNvbnN0IGNoYXIqIGZpbGVuYW1lLCBpbnQgZmxhZ3MpIHsKKyAgU2NvcGVkUHRocmVhZE11dGV4TG9ja2VyIGxvY2tlcigmZ0RsTXV0ZXgpOworICBzb2luZm8qIHJlc3VsdCA9IGRvX2Rsb3BlbihmaWxlbmFtZSwgZmxhZ3MpOworICBpZiAocmVzdWx0ID09IE5VTEwpIHsKKyAgICBfX2Jpb25pY19mb3JtYXRfZGxlcnJvcigiZGxvcGVuIGZhaWxlZCIsIGxpbmtlcl9nZXRfZXJyb3JfYnVmZmVyKCkpOworICAgIHJldHVybiBOVUxMOworICB9CisgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQqIGRsc3ltKHZvaWQqIGhhbmRsZSwgY29uc3QgY2hhciogc3ltYm9sKSB7CisgIFNjb3BlZFB0aHJlYWRNdXRleExvY2tlciBsb2NrZXIoJmdEbE11dGV4KTsKKworICBpZiAoaGFuZGxlID09IE5VTEwpIHsKKyAgICBfX2Jpb25pY19mb3JtYXRfZGxlcnJvcigiZGxzeW0gbGlicmFyeSBoYW5kbGUgaXMgbnVsbCIsIE5VTEwpOworICAgIHJldHVybiBOVUxMOworICB9CisgIGlmIChzeW1ib2wgPT0gTlVMTCkgeworICAgIF9fYmlvbmljX2Zvcm1hdF9kbGVycm9yKCJkbHN5bSBzeW1ib2wgbmFtZSBpcyBudWxsIiwgTlVMTCk7CisgICAgcmV0dXJuIE5VTEw7CisgIH0KKworICBzb2luZm8qIGZvdW5kID0gTlVMTDsKKyAgRWxmMzJfU3ltKiBzeW0gPSBOVUxMOworICBpZiAoaGFuZGxlID09IFJUTERfREVGQVVMVCkgeworICAgIHN5bSA9IGRsc3ltX2xpbmVhcl9sb29rdXAoc3ltYm9sLCAmZm91bmQsIE5VTEwpOworICB9IGVsc2UgaWYgKGhhbmRsZSA9PSBSVExEX05FWFQpIHsKKyAgICB2b2lkKiByZXRfYWRkciA9IF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKTsKKyAgICBzb2luZm8qIHNpID0gZmluZF9jb250YWluaW5nX2xpYnJhcnkocmV0X2FkZHIpOworCisgICAgc3ltID0gTlVMTDsKKyAgICBpZiAoc2kgJiYgc2ktPm5leHQpIHsKKyAgICAgIHN5bSA9IGRsc3ltX2xpbmVhcl9sb29rdXAoc3ltYm9sLCAmZm91bmQsIHNpLT5uZXh0KTsKKyAgICB9CisgIH0gZWxzZSB7CisgICAgZm91bmQgPSByZWludGVycHJldF9jYXN0PHNvaW5mbyo+KGhhbmRsZSk7CisgICAgc3ltID0gZGxzeW1faGFuZGxlX2xvb2t1cChmb3VuZCwgc3ltYm9sKTsKKyAgfQorCisgIGlmIChzeW0gIT0gTlVMTCkgeworICAgIHVuc2lnbmVkIGJpbmQgPSBFTEYzMl9TVF9CSU5EKHN5bS0+c3RfaW5mbyk7CisKKyAgICBpZiAoYmluZCA9PSBTVEJfR0xPQkFMICYmIHN5bS0+c3Rfc2huZHggIT0gMCkgeworICAgICAgdW5zaWduZWQgcmV0ID0gc3ltLT5zdF92YWx1ZSArIGZvdW5kLT5sb2FkX2JpYXM7CisgICAgICByZXR1cm4gKHZvaWQqKSByZXQ7CisgICAgfQorCisgICAgX19iaW9uaWNfZm9ybWF0X2RsZXJyb3IoInN5bWJvbCBmb3VuZCBidXQgbm90IGdsb2JhbCIsIHN5bWJvbCk7CisgICAgcmV0dXJuIE5VTEw7CisgIH0gZWxzZSB7CisgICAgX19iaW9uaWNfZm9ybWF0X2RsZXJyb3IoInVuZGVmaW5lZCBzeW1ib2wiLCBzeW1ib2wpOworICAgIHJldHVybiBOVUxMOworICB9Cit9CisKK2ludCBkbGFkZHIoY29uc3Qgdm9pZCogYWRkciwgRGxfaW5mbyogaW5mbykgeworICBTY29wZWRQdGhyZWFkTXV0ZXhMb2NrZXIgbG9ja2VyKCZnRGxNdXRleCk7CisKKyAgLy8gRGV0ZXJtaW5lIGlmIHRoaXMgYWRkcmVzcyBjYW4gYmUgZm91bmQgaW4gYW55IGxpYnJhcnkgY3VycmVudGx5IG1hcHBlZC4KKyAgc29pbmZvKiBzaSA9IGZpbmRfY29udGFpbmluZ19saWJyYXJ5KGFkZHIpOworICBpZiAoc2kgPT0gTlVMTCkgeworICAgIHJldHVybiAwOworICB9CisKKyAgbWVtc2V0KGluZm8sIDAsIHNpemVvZihEbF9pbmZvKSk7CisKKyAgaW5mby0+ZGxpX2ZuYW1lID0gc2ktPm5hbWU7CisgIC8vIEFkZHJlc3MgYXQgd2hpY2ggdGhlIHNoYXJlZCBvYmplY3QgaXMgbG9hZGVkLgorICBpbmZvLT5kbGlfZmJhc2UgPSAodm9pZCopIHNpLT5iYXNlOworCisgIC8vIERldGVybWluZSBpZiBhbnkgc3ltYm9sIGluIHRoZSBsaWJyYXJ5IGNvbnRhaW5zIHRoZSBzcGVjaWZpZWQgYWRkcmVzcy4KKyAgRWxmMzJfU3ltICpzeW0gPSBkbGFkZHJfZmluZF9zeW1ib2woc2ksIGFkZHIpOworICBpZiAoc3ltICE9IE5VTEwpIHsKKyAgICBpbmZvLT5kbGlfc25hbWUgPSBzaS0+c3RydGFiICsgc3ltLT5zdF9uYW1lOworICAgIGluZm8tPmRsaV9zYWRkciA9ICh2b2lkKikoc2ktPmxvYWRfYmlhcyArIHN5bS0+c3RfdmFsdWUpOworICB9CisKKyAgcmV0dXJuIDE7Cit9CisKK2ludCBkbGNsb3NlKHZvaWQqIGhhbmRsZSkgeworICBTY29wZWRQdGhyZWFkTXV0ZXhMb2NrZXIgbG9ja2VyKCZnRGxNdXRleCk7CisgIHJldHVybiBkb19kbGNsb3NlKHJlaW50ZXJwcmV0X2Nhc3Q8c29pbmZvKj4oaGFuZGxlKSk7Cit9CisKKyNpZiBkZWZpbmVkKEFORFJPSURfQVJNX0xJTktFUikKKy8vICAgMDAwMDAwMCAwMDAxMTExMSAxMTExMTIgMjIyMjIyMjIgMjMzMzMzMyAzMzMzNDQ0NDQ0NDQ0NDU1NTU1NTU1NTU2NjY2NjY2IDY2NjcKKy8vICAgMDEyMzQ1NiA3ODkwMTIzNCA1Njc4OTAgMTIzNDU2NzggOTAxMjM0NSA2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2IDc4OTAKKyNkZWZpbmUgQU5EUk9JRF9MSUJETF9TVFJUQUIgXAorICAgICJkbG9wZW5cMGRsY2xvc2VcMGRsc3ltXDBkbGVycm9yXDBkbGFkZHJcMGFuZHJvaWRfdXBkYXRlX0xEX0xJQlJBUllfUEFUSFwwZGxfdW53aW5kX2ZpbmRfZXhpZHhcMCIKKworI2VsaWYgZGVmaW5lZChBTkRST0lEX1g4Nl9MSU5LRVIpIHx8IGRlZmluZWQoQU5EUk9JRF9NSVBTX0xJTktFUikKKy8vICAgMDAwMDAwMCAwMDAxMTExMSAxMTExMTIgMjIyMjIyMjIgMjMzMzMzMyAzMzMzNDQ0NDQ0NDQ0NDU1NTU1NTU1NTU2NjY2NjY2IDY2NjcKKy8vICAgMDEyMzQ1NiA3ODkwMTIzNCA1Njc4OTAgMTIzNDU2NzggOTAxMjM0NSA2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2IDc4OTAKKyNkZWZpbmUgQU5EUk9JRF9MSUJETF9TVFJUQUIgXAorICAgICJkbG9wZW5cMGRsY2xvc2VcMGRsc3ltXDBkbGVycm9yXDBkbGFkZHJcMGFuZHJvaWRfdXBkYXRlX0xEX0xJQlJBUllfUEFUSFwwZGxfaXRlcmF0ZV9waGRyXDAiCisjZWxzZQorI2Vycm9yIFVuc3VwcG9ydGVkIGFyY2hpdGVjdHVyZS4gT25seSBBUk0sIE1JUFMsIGFuZCB4ODYgYXJlIHByZXNlbnRseSBzdXBwb3J0ZWQuCisjZW5kaWYKKworLy8gbmFtZV9vZmZzZXQ6IHN0YXJ0aW5nIGluZGV4IG9mIHRoZSBuYW1lIGluIGxpYmRsX2luZm8uc3RydGFiCisjZGVmaW5lIEVMRjMyX1NZTV9JTklUSUFMSVpFUihuYW1lX29mZnNldCwgdmFsdWUsIHNobmR4KSBcCisgICAgeyBuYW1lX29mZnNldCwgXAorICAgICAgcmVpbnRlcnByZXRfY2FzdDxFbGYzMl9BZGRyPihyZWludGVycHJldF9jYXN0PHZvaWQqPih2YWx1ZSkpLCBcCisgICAgICAvKiBzdF9zaXplICovIDAsIFwKKyAgICAgIChzaG5keCA9PSAwKSA/IDAgOiAoU1RCX0dMT0JBTCA8PCA0KSwgXAorICAgICAgLyogc3Rfb3RoZXIgKi8gMCwgXAorICAgICAgc2huZHggfQorCitzdGF0aWMgRWxmMzJfU3ltIGdMaWJEbFN5bXRhYltdID0geworICAvLyBUb3RhbCBsZW5ndGggb2YgbGliZGxfaW5mby5zdHJ0YWIsIGluY2x1ZGluZyB0cmFpbGluZyAwLgorICAvLyBUaGlzIGlzIGFjdHVhbGx5IHRoZSBTVEhfVU5ERUYgZW50cnkuIFRlY2huaWNhbGx5LCBpdCdzCisgIC8vIHN1cHBvc2VkIHRvIGhhdmUgc3RfbmFtZSA9PSAwLCBidXQgaW5zdGVhZCwgaXQgcG9pbnRzIHRvIGFuIGluZGV4CisgIC8vIGluIHRoZSBzdHJ0YWIgd2l0aCBhIFwwIHRvIG1ha2UgaXRlcmF0aW5nIHRocm91Z2ggdGhlIHN5bXRhYiBlYXNpZXIuCisgIEVMRjMyX1NZTV9JTklUSUFMSVpFUihzaXplb2YoQU5EUk9JRF9MSUJETF9TVFJUQUIpIC0gMSwgTlVMTCwgMCksCisgIEVMRjMyX1NZTV9JTklUSUFMSVpFUiggMCwgJmRsb3BlbiwgMSksCisgIEVMRjMyX1NZTV9JTklUSUFMSVpFUiggNywgJmRsY2xvc2UsIDEpLAorICBFTEYzMl9TWU1fSU5JVElBTElaRVIoMTUsICZkbHN5bSwgMSksCisgIEVMRjMyX1NZTV9JTklUSUFMSVpFUigyMSwgJmRsZXJyb3IsIDEpLAorICBFTEYzMl9TWU1fSU5JVElBTElaRVIoMjksICZkbGFkZHIsIDEpLAorICBFTEYzMl9TWU1fSU5JVElBTElaRVIoMzYsICZhbmRyb2lkX3VwZGF0ZV9MRF9MSUJSQVJZX1BBVEgsIDEpLAorI2lmIGRlZmluZWQoQU5EUk9JRF9BUk1fTElOS0VSKQorICBFTEYzMl9TWU1fSU5JVElBTElaRVIoNjcsICZkbF91bndpbmRfZmluZF9leGlkeCwgMSksCisjZWxpZiBkZWZpbmVkKEFORFJPSURfWDg2X0xJTktFUikgfHwgZGVmaW5lZChBTkRST0lEX01JUFNfTElOS0VSKQorICBFTEYzMl9TWU1fSU5JVElBTElaRVIoNjcsICZkbF9pdGVyYXRlX3BoZHIsIDEpLAorI2VuZGlmCit9OworCisvLyBGYWtlIG91dCBhIGhhc2ggdGFibGUgd2l0aCBhIHNpbmdsZSBidWNrZXQuCisvLyBBIHNlYXJjaCBvZiB0aGUgaGFzaCB0YWJsZSB3aWxsIGxvb2sgdGhyb3VnaAorLy8gZ0xpYkRsU3ltdGFiIHN0YXJ0aW5nIHdpdGggaW5kZXggWzFdLCB0aGVuCisvLyB1c2UgZ0xpYkRsQ2hhaW5zIHRvIGZpbmQgdGhlIG5leHQgaW5kZXggdG8KKy8vIGxvb2sgYXQuICBnTGliRGxDaGFpbnMgc2hvdWxkIGJlIHNldCB1cCB0bworLy8gd2FsayB0aHJvdWdoIGV2ZXJ5IGVsZW1lbnQgaW4gZ0xpYkRsU3ltdGFiLAorLy8gYW5kIHRoZW4gZW5kIHdpdGggMCAoc2VudGluZWwgdmFsdWUpLgorLy8KKy8vIFRoYXQgaXMsIGdMaWJEbENoYWlucyBzaG91bGQgbG9vayBsaWtlCisvLyB7IDAsIDIsIDMsIC4uLiBOLCAwIH0gd2hlcmUgTiBpcyB0aGUgbnVtYmVyCisvLyBvZiBhY3R1YWwgc3ltYm9scywgb3IgbmVsZW1zKGdMaWJEbFN5bXRhYiktMQorLy8gKHNpbmNlIHRoZSBmaXJzdCBlbGVtZW50IG9mIGdMaWJEbFN5bXRhYiBpcyBub3QKKy8vIGEgcmVhbCBzeW1ib2wpLgorLy8KKy8vIChzZWUgc29pbmZvX2VsZl9sb29rdXAoKSkKKy8vCisvLyBOb3RlIHRoYXQgYWRkaW5nIGFueSBuZXcgc3ltYm9scyBoZXJlIHJlcXVpcmVzCisvLyBzdHViYmluZyB0aGVtIG91dCBpbiBsaWJkbC4KK3N0YXRpYyB1bnNpZ25lZCBnTGliRGxCdWNrZXRzWzFdID0geyAxIH07CitzdGF0aWMgdW5zaWduZWQgZ0xpYkRsQ2hhaW5zWzhdID0geyAwLCAyLCAzLCA0LCA1LCA2LCA3LCAwIH07CisKKy8vIFRoaXMgaXMgdXNlZCBieSB0aGUgZHluYW1pYyBsaW5rZXIuIEV2ZXJ5IHByb2Nlc3MgZ2V0cyB0aGVzZSBzeW1ib2xzIGZvciBmcmVlLgorc29pbmZvIGxpYmRsX2luZm8gPSB7CisgICAgImxpYmRsLnNvIiwKKworICAgIHBoZHI6IDAsIHBobnVtOiAwLAorICAgIGVudHJ5OiAwLCBiYXNlOiAwLCBzaXplOiAwLAorICAgIHVudXNlZDE6IDAsIGR5bmFtaWM6IDAsIHVudXNlZDI6IDAsIHVudXNlZDM6IDAsCisgICAgbmV4dDogMCwKKworICAgIGZsYWdzOiBGTEFHX0xJTktFRCwKKworICAgIHN0cnRhYjogQU5EUk9JRF9MSUJETF9TVFJUQUIsCisgICAgc3ltdGFiOiBnTGliRGxTeW10YWIsCisKKyAgICBuYnVja2V0OiAxLAorICAgIG5jaGFpbjogOCwKKyAgICBidWNrZXQ6IGdMaWJEbEJ1Y2tldHMsCisgICAgY2hhaW46IGdMaWJEbENoYWlucywKKworICAgIHBsdF9nb3Q6IDAsIHBsdF9yZWw6IDAsIHBsdF9yZWxfY291bnQ6IDAsIHJlbDogMCwgcmVsX2NvdW50OiAwLAorICAgIHByZWluaXRfYXJyYXk6IDAsIHByZWluaXRfYXJyYXlfY291bnQ6IDAsIGluaXRfYXJyYXk6IDAsIGluaXRfYXJyYXlfY291bnQ6IDAsCisgICAgZmluaV9hcnJheTogMCwgZmluaV9hcnJheV9jb3VudDogMCwgaW5pdF9mdW5jOiAwLCBmaW5pX2Z1bmM6IDAsCisKKyNpZiBkZWZpbmVkKEFORFJPSURfQVJNX0xJTktFUikKKyAgICBBUk1fZXhpZHg6IDAsIEFSTV9leGlkeF9jb3VudDogMCwKKyNlbGlmIGRlZmluZWQoQU5EUk9JRF9NSVBTX0xJTktFUikKKyAgICBtaXBzX3N5bXRhYm5vOiAwLCBtaXBzX2xvY2FsX2dvdG5vOiAwLCBtaXBzX2dvdHN5bTogMCwKKyNlbmRpZgorCisgICAgcmVmX2NvdW50OiAwLAorICAgIHsgbF9hZGRyOiAwLCBsX25hbWU6IDAsIGxfbGQ6IDAsIGxfbmV4dDogMCwgbF9wcmV2OiAwLCB9LAorICAgIGNvbnN0cnVjdG9yc19jYWxsZWQ6IGZhbHNlLAorICAgIGxvYWRfYmlhczogMCwKKyAgICBoYXNfdGV4dF9yZWxvY2F0aW9uczogZmFsc2UsCisgICAgaGFzX0RUX1NZTUJPTElDOiB0cnVlLAorfTsKZGlmZiAtLWdpdCBhL2xpbmtlci9saW5rZXIuYyBiL2xpbmtlci9saW5rZXIuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmNmYThkYy4uMDAwMDAwMAotLS0gYS9saW5rZXIvbGlua2VyLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyMTQwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0gKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiAgICBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCi0gKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQotICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAotICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKLSAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUwotICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECi0gKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0gKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2F1eHZlYy5oPgotCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLSNpbmNsdWRlIDxmY250bC5oPgotI2luY2x1ZGUgPGVycm5vLmg+Ci0jaW5jbHVkZSA8ZGxmY24uaD4KLSNpbmNsdWRlIDxzeXMvc3RhdC5oPgotCi0jaW5jbHVkZSA8cHRocmVhZC5oPgotCi0jaW5jbHVkZSA8c3lzL21tYW4uaD4KLQotI2luY2x1ZGUgPHN5cy9hdG9taWNzLmg+Ci0KLS8qIHNwZWNpYWwgcHJpdmF0ZSBDIGxpYnJhcnkgaGVhZGVyIC0gc2VlIEFuZHJvaWQubWsgKi8KLSNpbmNsdWRlIDxiaW9uaWNfdGxzLmg+Ci0KLSNpbmNsdWRlICJsaW5rZXIuaCIKLSNpbmNsdWRlICJsaW5rZXJfZGVidWcuaCIKLSNpbmNsdWRlICJsaW5rZXJfZW52aXJvbi5oIgotI2luY2x1ZGUgImxpbmtlcl9mb3JtYXQuaCIKLQotI2RlZmluZSBBTExPV19TWU1CT0xTX0ZST01fTUFJTiAxCi0jZGVmaW5lIFNPX01BWCAxMjgKLQotLyogQXNzdW1lIGF2ZXJhZ2UgcGF0aCBsZW5ndGggb2YgNjQgYW5kIG1heCA4IHBhdGhzICovCi0jZGVmaW5lIExEUEFUSF9CVUZTSVpFIDUxMgotI2RlZmluZSBMRFBBVEhfTUFYIDgKLQotI2RlZmluZSBMRFBSRUxPQURfQlVGU0laRSA1MTIKLSNkZWZpbmUgTERQUkVMT0FEX01BWCA4Ci0KLS8qID4+PiBJTVBPUlRBTlQgTk9URSAtIFJFQUQgTUUgQkVGT1JFIE1PRElGWUlORyA8PDwKLSAqCi0gKiBEbyBOT1QgdXNlIG1hbGxvYygpIGFuZCBmcmllbmRzIG9yIHB0aHJlYWRfKigpIGNvZGUgaGVyZS4KLSAqIERvbid0IHVzZSBwcmludGYoKSBlaXRoZXI7IGl0J3MgY2F1c2VkIG15c3RlcmlvdXMgbWVtb3J5Ci0gKiBjb3JydXB0aW9uIGluIHRoZSBwYXN0LgotICogVGhlIGxpbmtlciBydW5zIGJlZm9yZSB3ZSBicmluZyB1cCBsaWJjIGFuZCBpdCdzIGVhc2llc3QKLSAqIHRvIG1ha2Ugc3VyZSBpdCBkb2VzIG5vdCBkZXBlbmQgb24gYW55IGNvbXBsZXggbGliYyBmZWF0dXJlcwotICoKLSAqIG9wZW4gaXNzdWVzIC8gdG9kbzoKLSAqCi0gKiAtIGFyZSB3ZSBkb2luZyBldmVyeXRoaW5nIHdlIHNob3VsZCBmb3IgQVJNX0NPUFkgcmVsb2NhdGlvbnM/Ci0gKiAtIGNsZWFuZXIgZXJyb3IgcmVwb3J0aW5nCi0gKiAtIGFmdGVyIGxpbmtpbmcsIHNldCBhcyBtdWNoIHN0dWZmIGFzIHBvc3NpYmxlIHRvIFJFQURPTkxZCi0gKiAgIGFuZCBOT0VYRUMKLSAqIC0gbGlua2VyIGhhcmRjb2RlcyBQQUdFX1NJWkUgYW5kIFBBR0VfTUFTSyBiZWNhdXNlIHRoZSBrZXJuZWwKLSAqICAgaGVhZGVycyBwcm92aWRlIHZlcnNpb25zIHRoYXQgYXJlIG5lZ2F0aXZlLi4uCi0gKiAtIGFsbG9jYXRlIHNwYWNlIGZvciBzb2luZm8gc3RydWN0cyBkeW5hbWljYWxseSBpbnN0ZWFkIG9mCi0gKiAgIGhhdmluZyBhIGhhcmQgbGltaXQgKDY0KQotKi8KLQotCi1zdGF0aWMgaW50IGxpbmtfaW1hZ2Uoc29pbmZvICpzaSwgdW5zaWduZWQgd3Jfb2Zmc2V0KTsKLQotc3RhdGljIGludCBzb2NvdW50ID0gMDsKLXN0YXRpYyBzb2luZm8gc29wb29sW1NPX01BWF07Ci1zdGF0aWMgc29pbmZvICpmcmVlbGlzdCA9IE5VTEw7Ci1zdGF0aWMgc29pbmZvICpzb2xpc3QgPSAmbGliZGxfaW5mbzsKLXN0YXRpYyBzb2luZm8gKnNvbmV4dCA9ICZsaWJkbF9pbmZvOwotI2lmIEFMTE9XX1NZTUJPTFNfRlJPTV9NQUlOCi1zdGF0aWMgc29pbmZvICpzb21haW47IC8qIG1haW4gcHJvY2VzcywgYWx3YXlzIHRoZSBvbmUgYWZ0ZXIgbGliZGxfaW5mbyAqLwotI2VuZGlmCi0KLQotc3RhdGljIGlubGluZSBpbnQgdmFsaWRhdGVfc29pbmZvKHNvaW5mbyAqc2kpCi17Ci0gICAgcmV0dXJuIChzaSA+PSBzb3Bvb2wgJiYgc2kgPCBzb3Bvb2wgKyBTT19NQVgpIHx8Ci0gICAgICAgIHNpID09ICZsaWJkbF9pbmZvOwotfQotCi1zdGF0aWMgY2hhciBsZHBhdGhzX2J1ZltMRFBBVEhfQlVGU0laRV07Ci1zdGF0aWMgY29uc3QgY2hhciAqbGRwYXRoc1tMRFBBVEhfTUFYICsgMV07Ci0KLXN0YXRpYyBjaGFyIGxkcHJlbG9hZHNfYnVmW0xEUFJFTE9BRF9CVUZTSVpFXTsKLXN0YXRpYyBjb25zdCBjaGFyICpsZHByZWxvYWRfbmFtZXNbTERQUkVMT0FEX01BWCArIDFdOwotCi1zdGF0aWMgc29pbmZvICpwcmVsb2Fkc1tMRFBSRUxPQURfTUFYICsgMV07Ci0KLWludCBkZWJ1Z192ZXJib3NpdHk7Ci1zdGF0aWMgaW50IHBpZDsKLQotLyogVGhpcyBib29sZWFuIGlzIHNldCBpZiB0aGUgcHJvZ3JhbSBiZWluZyBsb2FkZWQgaXMgc2V0dWlkICovCi1zdGF0aWMgaW50IHByb2dyYW1faXNfc2V0dWlkOwotCi0jaWYgU1RBVFMKLXN0cnVjdCBfbGlua19zdGF0cyBsaW5rZXJfc3RhdHM7Ci0jZW5kaWYKLQotI2lmIENPVU5UX1BBR0VTCi11bnNpZ25lZCBiaXRtYXNrWzQwOTZdOwotI2VuZGlmCi0KLSNpZm5kZWYgUFRfQVJNX0VYSURYCi0jZGVmaW5lIFBUX0FSTV9FWElEWCAgICAweDcwMDAwMDAxICAgICAgLyogLkFSTS5leGlkeCBzZWdtZW50ICovCi0jZW5kaWYKLQotI2RlZmluZSBIT09ETFVNKG5hbWUsIHJldCwgLi4uKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHJldCBuYW1lIF9fVkFfQVJHU19fICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBjaGFyIGVycnN0cltdID0gIkVSUk9SOiAiICNuYW1lICIgY2FsbGVkIGZyb20gdGhlIGR5bmFtaWMgbGlua2VyIVxuIjsgXAotICAgICAgICB3cml0ZSgyLCBlcnJzdHIsIHNpemVvZihlcnJzdHIpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBhYm9ydCgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIH0KLUhPT0RMVU0obWFsbG9jLCB2b2lkICosIChzaXplX3Qgc2l6ZSkpOwotSE9PRExVTShmcmVlLCB2b2lkLCAodm9pZCAqcHRyKSk7Ci1IT09ETFVNKHJlYWxsb2MsIHZvaWQgKiwgKHZvaWQgKnB0ciwgc2l6ZV90IHNpemUpKTsKLUhPT0RMVU0oY2FsbG9jLCB2b2lkICosIChzaXplX3QgY250LCBzaXplX3Qgc2l6ZSkpOwotCi1zdGF0aWMgY2hhciB0bXBfZXJyX2J1Zls3NjhdOwotc3RhdGljIGNoYXIgX19saW5rZXJfZGxfZXJyX2J1Zls3NjhdOwotI2RlZmluZSBETF9FUlIoZm10LCB4Li4uKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBmb3JtYXRfYnVmZmVyKF9fbGlua2VyX2RsX2Vycl9idWYsIHNpemVvZihfX2xpbmtlcl9kbF9lcnJfYnVmKSwgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICIlc1slZF06ICIgZm10LCBfX2Z1bmNfXywgX19MSU5FX18sICMjeCk7ICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIEVSUk9SKGZtdCAiXG4iLCAjI3gpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB9IHdoaWxlKDApCi0KLWNvbnN0IGNoYXIgKmxpbmtlcl9nZXRfZXJyb3Iodm9pZCkKLXsKLSAgICByZXR1cm4gKGNvbnN0IGNoYXIgKikmX19saW5rZXJfZGxfZXJyX2J1ZlswXTsKLX0KLQotLyoKLSAqIFRoaXMgZnVuY3Rpb24gaXMgYW4gZW1wdHkgc3R1YiB3aGVyZSBHREIgbG9jYXRlcyBhIGJyZWFrcG9pbnQgdG8gZ2V0IG5vdGlmaWVkCi0gKiBhYm91dCBsaW5rZXIgYWN0aXZpdHkuCi0gKi8KLWV4dGVybiB2b2lkIF9fYXR0cmlidXRlX18oKG5vaW5saW5lKSkgcnRsZF9kYl9kbGFjdGl2aXR5KHZvaWQpOwotCi1zdGF0aWMgc3RydWN0IHJfZGVidWcgX3JfZGVidWcgPSB7MSwgTlVMTCwgJnJ0bGRfZGJfZGxhY3Rpdml0eSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSVF9DT05TSVNURU5ULCAwfTsKLXN0YXRpYyBzdHJ1Y3QgbGlua19tYXAgKnJfZGVidWdfdGFpbCA9IDA7Ci0KLXN0YXRpYyBwdGhyZWFkX211dGV4X3QgX3JfZGVidWdfbG9jayA9IFBUSFJFQURfTVVURVhfSU5JVElBTElaRVI7Ci0KLXN0YXRpYyB2b2lkIGluc2VydF9zb2luZm9faW50b19kZWJ1Z19tYXAoc29pbmZvICogaW5mbykKLXsKLSAgICBzdHJ1Y3QgbGlua19tYXAgKiBtYXA7Ci0KLSAgICAvKiBDb3B5IHRoZSBuZWNlc3NhcnkgZmllbGRzIGludG8gdGhlIGRlYnVnIHN0cnVjdHVyZS4KLSAgICAgKi8KLSAgICBtYXAgPSAmKGluZm8tPmxpbmttYXApOwotICAgIG1hcC0+bF9hZGRyID0gaW5mby0+YmFzZTsKLSAgICBtYXAtPmxfbmFtZSA9IChjaGFyKikgaW5mby0+bmFtZTsKLSAgICBtYXAtPmxfbGQgPSAodWludHB0cl90KWluZm8tPmR5bmFtaWM7Ci0KLSAgICAvKiBTdGljayB0aGUgbmV3IGxpYnJhcnkgYXQgdGhlIGVuZCBvZiB0aGUgbGlzdC4KLSAgICAgKiBnZGIgdGVuZHMgdG8gY2FyZSBtb3JlIGFib3V0IGxpYmMgdGhhbiBpdCBkb2VzCi0gICAgICogYWJvdXQgbGVhZiBsaWJyYXJpZXMsIGFuZCBvcmRlcmluZyBpdCB0aGlzIHdheQotICAgICAqIHJlZHVjZXMgdGhlIGJhY2stYW5kLWZvcnRoIG92ZXIgdGhlIHdpcmUuCi0gICAgICovCi0gICAgaWYgKHJfZGVidWdfdGFpbCkgewotICAgICAgICByX2RlYnVnX3RhaWwtPmxfbmV4dCA9IG1hcDsKLSAgICAgICAgbWFwLT5sX3ByZXYgPSByX2RlYnVnX3RhaWw7Ci0gICAgICAgIG1hcC0+bF9uZXh0ID0gMDsKLSAgICB9IGVsc2UgewotICAgICAgICBfcl9kZWJ1Zy5yX21hcCA9IG1hcDsKLSAgICAgICAgbWFwLT5sX3ByZXYgPSAwOwotICAgICAgICBtYXAtPmxfbmV4dCA9IDA7Ci0gICAgfQotICAgIHJfZGVidWdfdGFpbCA9IG1hcDsKLX0KLQotc3RhdGljIHZvaWQgcmVtb3ZlX3NvaW5mb19mcm9tX2RlYnVnX21hcChzb2luZm8gKiBpbmZvKQotewotICAgIHN0cnVjdCBsaW5rX21hcCAqIG1hcCA9ICYoaW5mby0+bGlua21hcCk7Ci0KLSAgICBpZiAocl9kZWJ1Z190YWlsID09IG1hcCkKLSAgICAgICAgcl9kZWJ1Z190YWlsID0gbWFwLT5sX3ByZXY7Ci0KLSAgICBpZiAobWFwLT5sX3ByZXYpIG1hcC0+bF9wcmV2LT5sX25leHQgPSBtYXAtPmxfbmV4dDsKLSAgICBpZiAobWFwLT5sX25leHQpIG1hcC0+bF9uZXh0LT5sX3ByZXYgPSBtYXAtPmxfcHJldjsKLX0KLQotdm9pZCBub3RpZnlfZ2RiX29mX2xvYWQoc29pbmZvICogaW5mbykKLXsKLSAgICBpZiAoaW5mby0+ZmxhZ3MgJiBGTEFHX0VYRSkgewotICAgICAgICAvLyBHREIgYWxyZWFkeSBrbm93cyBhYm91dCB0aGUgbWFpbiBleGVjdXRhYmxlCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBwdGhyZWFkX211dGV4X2xvY2soJl9yX2RlYnVnX2xvY2spOwotCi0gICAgX3JfZGVidWcucl9zdGF0ZSA9IFJUX0FERDsKLSAgICBydGxkX2RiX2RsYWN0aXZpdHkoKTsKLQotICAgIGluc2VydF9zb2luZm9faW50b19kZWJ1Z19tYXAoaW5mbyk7Ci0KLSAgICBfcl9kZWJ1Zy5yX3N0YXRlID0gUlRfQ09OU0lTVEVOVDsKLSAgICBydGxkX2RiX2RsYWN0aXZpdHkoKTsKLQotICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZfcl9kZWJ1Z19sb2NrKTsKLX0KLQotdm9pZCBub3RpZnlfZ2RiX29mX3VubG9hZChzb2luZm8gKiBpbmZvKQotewotICAgIGlmIChpbmZvLT5mbGFncyAmIEZMQUdfRVhFKSB7Ci0gICAgICAgIC8vIEdEQiBhbHJlYWR5IGtub3dzIGFib3V0IHRoZSBtYWluIGV4ZWN1dGFibGUKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHB0aHJlYWRfbXV0ZXhfbG9jaygmX3JfZGVidWdfbG9jayk7Ci0KLSAgICBfcl9kZWJ1Zy5yX3N0YXRlID0gUlRfREVMRVRFOwotICAgIHJ0bGRfZGJfZGxhY3Rpdml0eSgpOwotCi0gICAgcmVtb3ZlX3NvaW5mb19mcm9tX2RlYnVnX21hcChpbmZvKTsKLQotICAgIF9yX2RlYnVnLnJfc3RhdGUgPSBSVF9DT05TSVNURU5UOwotICAgIHJ0bGRfZGJfZGxhY3Rpdml0eSgpOwotCi0gICAgcHRocmVhZF9tdXRleF91bmxvY2soJl9yX2RlYnVnX2xvY2spOwotfQotCi12b2lkIG5vdGlmeV9nZGJfb2ZfbGlicmFyaWVzKCkKLXsKLSAgICBfcl9kZWJ1Zy5yX3N0YXRlID0gUlRfQUREOwotICAgIHJ0bGRfZGJfZGxhY3Rpdml0eSgpOwotICAgIF9yX2RlYnVnLnJfc3RhdGUgPSBSVF9DT05TSVNURU5UOwotICAgIHJ0bGRfZGJfZGxhY3Rpdml0eSgpOwotfQotCi1zdGF0aWMgc29pbmZvICphbGxvY19pbmZvKGNvbnN0IGNoYXIgKm5hbWUpCi17Ci0gICAgc29pbmZvICpzaTsKLQotICAgIGlmKHN0cmxlbihuYW1lKSA+PSBTT0lORk9fTkFNRV9MRU4pIHsKLSAgICAgICAgRExfRVJSKCIlNWQgbGlicmFyeSBuYW1lICVzIHRvbyBsb25nIiwgcGlkLCBuYW1lKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgLyogVGhlIGZyZWVsaXN0IGlzIHBvcHVsYXRlZCB3aGVuIHdlIGNhbGwgZnJlZV9pbmZvKCksIHdoaWNoIGluIHR1cm4gaXMKLSAgICAgICBkb25lIG9ubHkgYnkgZGxjbG9zZSgpLCB3aGljaCBpcyBub3QgbGlrZWx5IHRvIGJlIHVzZWQuCi0gICAgKi8KLSAgICBpZiAoIWZyZWVsaXN0KSB7Ci0gICAgICAgIGlmKHNvY291bnQgPT0gU09fTUFYKSB7Ci0gICAgICAgICAgICBETF9FUlIoIiU1ZCB0b28gbWFueSBsaWJyYXJpZXMgd2hlbiBsb2FkaW5nICVzIiwgcGlkLCBuYW1lKTsKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB9Ci0gICAgICAgIGZyZWVsaXN0ID0gc29wb29sICsgc29jb3VudCsrOwotICAgICAgICBmcmVlbGlzdC0+bmV4dCA9IE5VTEw7Ci0gICAgfQotCi0gICAgc2kgPSBmcmVlbGlzdDsKLSAgICBmcmVlbGlzdCA9IGZyZWVsaXN0LT5uZXh0OwotCi0gICAgLyogTWFrZSBzdXJlIHdlIGdldCBhIGNsZWFuIGJsb2NrIG9mIHNvaW5mbyAqLwotICAgIG1lbXNldChzaSwgMCwgc2l6ZW9mKHNvaW5mbykpOwotICAgIHN0cmxjcHkoKGNoYXIqKSBzaS0+bmFtZSwgbmFtZSwgc2l6ZW9mKHNpLT5uYW1lKSk7Ci0gICAgc29uZXh0LT5uZXh0ID0gc2k7Ci0gICAgc2ktPm5leHQgPSBOVUxMOwotICAgIHNpLT5yZWZjb3VudCA9IDA7Ci0gICAgc29uZXh0ID0gc2k7Ci0KLSAgICBUUkFDRSgiJTVkIG5hbWUgJXM6IGFsbG9jYXRlZCBzb2luZm8gQCAlcFxuIiwgcGlkLCBuYW1lLCBzaSk7Ci0gICAgcmV0dXJuIHNpOwotfQotCi1zdGF0aWMgdm9pZCBmcmVlX2luZm8oc29pbmZvICpzaSkKLXsKLSAgICBzb2luZm8gKnByZXYgPSBOVUxMLCAqdHJhdjsKLQotICAgIFRSQUNFKCIlNWQgbmFtZSAlczogZnJlZWluZyBzb2luZm8gQCAlcFxuIiwgcGlkLCBzaS0+bmFtZSwgc2kpOwotCi0gICAgZm9yKHRyYXYgPSBzb2xpc3Q7IHRyYXYgIT0gTlVMTDsgdHJhdiA9IHRyYXYtPm5leHQpewotICAgICAgICBpZiAodHJhdiA9PSBzaSkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBwcmV2ID0gdHJhdjsKLSAgICB9Ci0gICAgaWYgKHRyYXYgPT0gTlVMTCkgewotICAgICAgICAvKiBzaSB3YXMgbm90IG5pIHNvbGlzdCAqLwotICAgICAgICBETF9FUlIoIiU1ZCBuYW1lICVzIGlzIG5vdCBpbiBzb2xpc3QhIiwgcGlkLCBzaS0+bmFtZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvKiBwcmV2IHdpbGwgbmV2ZXIgYmUgTlVMTCwgYmVjYXVzZSB0aGUgZmlyc3QgZW50cnkgaW4gc29saXN0IGlzCi0gICAgICAgYWx3YXlzIHRoZSBzdGF0aWMgbGliZGxfaW5mby4KLSAgICAqLwotICAgIHByZXYtPm5leHQgPSBzaS0+bmV4dDsKLSAgICBpZiAoc2kgPT0gc29uZXh0KSBzb25leHQgPSBwcmV2OwotICAgIHNpLT5uZXh0ID0gZnJlZWxpc3Q7Ci0gICAgZnJlZWxpc3QgPSBzaTsKLX0KLQotI2lmbmRlZiBMSU5LRVJfVEVYVF9CQVNFCi0jZXJyb3IgImxpbmtlcidzIG1ha2VmaWxlIG11c3QgZGVmaW5lIExJTktFUl9URVhUX0JBU0UiCi0jZW5kaWYKLSNpZm5kZWYgTElOS0VSX0FSRUFfU0laRQotI2Vycm9yICJsaW5rZXIncyBtYWtlZmlsZSBtdXN0IGRlZmluZSBMSU5LRVJfQVJFQV9TSVpFIgotI2VuZGlmCi0jZGVmaW5lIExJTktFUl9CQVNFICgoTElOS0VSX1RFWFRfQkFTRSkgJiAweGZmZjAwMDAwKQotI2RlZmluZSBMSU5LRVJfVE9QICAoTElOS0VSX0JBU0UgKyAoTElOS0VSX0FSRUFfU0laRSkpCi0KLWNvbnN0IGNoYXIgKmFkZHJfdG9fbmFtZSh1bnNpZ25lZCBhZGRyKQotewotICAgIHNvaW5mbyAqc2k7Ci0KLSAgICBmb3Ioc2kgPSBzb2xpc3Q7IHNpICE9IDA7IHNpID0gc2ktPm5leHQpewotICAgICAgICBpZigoYWRkciA+PSBzaS0+YmFzZSkgJiYgKGFkZHIgPCAoc2ktPmJhc2UgKyBzaS0+c2l6ZSkpKSB7Ci0gICAgICAgICAgICByZXR1cm4gc2ktPm5hbWU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZigoYWRkciA+PSBMSU5LRVJfQkFTRSkgJiYgKGFkZHIgPCBMSU5LRVJfVE9QKSl7Ci0gICAgICAgIHJldHVybiAibGlua2VyIjsKLSAgICB9Ci0KLSAgICByZXR1cm4gIiI7Ci19Ci0KLS8qIEZvciBhIGdpdmVuIFBDLCBmaW5kIHRoZSAuc28gdGhhdCBpdCBiZWxvbmdzIHRvLgotICogUmV0dXJucyB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSAuQVJNLmV4aWR4IHNlY3Rpb24KLSAqIGZvciB0aGF0IC5zbywgYW5kIHRoZSBudW1iZXIgb2YgOC1ieXRlIGVudHJpZXMKLSAqIGluIHRoYXQgc2VjdGlvbiAodmlhICpwY291bnQpLgotICoKLSAqIEludGVuZGVkIHRvIGJlIGNhbGxlZCBieSBsaWJjJ3MgX19nbnVfVW53aW5kX0ZpbmRfZXhpZHgoKS4KLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIGlzIGV4cG9zZWQgdmlhIGRsZmNuLmMgYW5kIGxpYmRsLnNvLgotICovCi0jaWZkZWYgQU5EUk9JRF9BUk1fTElOS0VSCi1fVW53aW5kX1B0ciBkbF91bndpbmRfZmluZF9leGlkeChfVW53aW5kX1B0ciBwYywgaW50ICpwY291bnQpCi17Ci0gICAgc29pbmZvICpzaTsKLSAgICB1bnNpZ25lZCBhZGRyID0gKHVuc2lnbmVkKXBjOwotCi0gICAgaWYgKChhZGRyIDwgTElOS0VSX0JBU0UpIHx8IChhZGRyID49IExJTktFUl9UT1ApKSB7Ci0gICAgICAgIGZvciAoc2kgPSBzb2xpc3Q7IHNpICE9IDA7IHNpID0gc2ktPm5leHQpewotICAgICAgICAgICAgaWYgKChhZGRyID49IHNpLT5iYXNlKSAmJiAoYWRkciA8IChzaS0+YmFzZSArIHNpLT5zaXplKSkpIHsKLSAgICAgICAgICAgICAgICAqcGNvdW50ID0gc2ktPkFSTV9leGlkeF9jb3VudDsKLSAgICAgICAgICAgICAgICByZXR1cm4gKF9VbndpbmRfUHRyKShzaS0+YmFzZSArICh1bnNpZ25lZCBsb25nKXNpLT5BUk1fZXhpZHgpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgKnBjb3VudCA9IDA7Ci0gICAgcmV0dXJuIE5VTEw7Ci19Ci0jZWxpZiBkZWZpbmVkKEFORFJPSURfWDg2X0xJTktFUikKLS8qIEhlcmUsIHdlIG9ubHkgaGF2ZSB0byBwcm92aWRlIGEgY2FsbGJhY2sgdG8gaXRlcmF0ZSBhY3Jvc3MgYWxsIHRoZQotICogbG9hZGVkIGxpYnJhcmllcy4gZ2NjX2VoIGRvZXMgdGhlIHJlc3QuICovCi1pbnQKLWRsX2l0ZXJhdGVfcGhkcihpbnQgKCpjYikoc3RydWN0IGRsX3BoZHJfaW5mbyAqaW5mbywgc2l6ZV90IHNpemUsIHZvaWQgKmRhdGEpLAotICAgICAgICAgICAgICAgIHZvaWQgKmRhdGEpCi17Ci0gICAgc29pbmZvICpzaTsKLSAgICBzdHJ1Y3QgZGxfcGhkcl9pbmZvIGRsX2luZm87Ci0gICAgaW50IHJ2ID0gMDsKLQotICAgIGZvciAoc2kgPSBzb2xpc3Q7IHNpICE9IE5VTEw7IHNpID0gc2ktPm5leHQpIHsKLSAgICAgICAgZGxfaW5mby5kbHBpX2FkZHIgPSBzaS0+bGlua21hcC5sX2FkZHI7Ci0gICAgICAgIGRsX2luZm8uZGxwaV9uYW1lID0gc2ktPmxpbmttYXAubF9uYW1lOwotICAgICAgICBkbF9pbmZvLmRscGlfcGhkciA9IHNpLT5waGRyOwotICAgICAgICBkbF9pbmZvLmRscGlfcGhudW0gPSBzaS0+cGhudW07Ci0gICAgICAgIHJ2ID0gY2IoJmRsX2luZm8sIHNpemVvZiAoc3RydWN0IGRsX3BoZHJfaW5mbyksIGRhdGEpOwotICAgICAgICBpZiAocnYgIT0gMCkKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLSAgICByZXR1cm4gcnY7Ci19Ci0jZW5kaWYKLQotc3RhdGljIEVsZjMyX1N5bSAqX2VsZl9sb29rdXAoc29pbmZvICpzaSwgdW5zaWduZWQgaGFzaCwgY29uc3QgY2hhciAqbmFtZSkKLXsKLSAgICBFbGYzMl9TeW0gKnM7Ci0gICAgRWxmMzJfU3ltICpzeW10YWIgPSBzaS0+c3ltdGFiOwotICAgIGNvbnN0IGNoYXIgKnN0cnRhYiA9IHNpLT5zdHJ0YWI7Ci0gICAgdW5zaWduZWQgbjsKLQotICAgIFRSQUNFX1RZUEUoTE9PS1VQLCAiJTVkIFNFQVJDSCAlcyBpbiAlc0AweCUwOHggJTA4eCAlZFxuIiwgcGlkLAotICAgICAgICAgICAgICAgbmFtZSwgc2ktPm5hbWUsIHNpLT5iYXNlLCBoYXNoLCBoYXNoICUgc2ktPm5idWNrZXQpOwotICAgIG4gPSBoYXNoICUgc2ktPm5idWNrZXQ7Ci0KLSAgICBmb3IobiA9IHNpLT5idWNrZXRbaGFzaCAlIHNpLT5uYnVja2V0XTsgbiAhPSAwOyBuID0gc2ktPmNoYWluW25dKXsKLSAgICAgICAgcyA9IHN5bXRhYiArIG47Ci0gICAgICAgIGlmKHN0cmNtcChzdHJ0YWIgKyBzLT5zdF9uYW1lLCBuYW1lKSkgY29udGludWU7Ci0KLSAgICAgICAgICAgIC8qIG9ubHkgY29uY2VybiBvdXJzZWx2ZXMgd2l0aCBnbG9iYWwgYW5kIHdlYWsgc3ltYm9sIGRlZmluaXRpb25zICovCi0gICAgICAgIHN3aXRjaChFTEYzMl9TVF9CSU5EKHMtPnN0X2luZm8pKXsKLSAgICAgICAgY2FzZSBTVEJfR0xPQkFMOgotICAgICAgICBjYXNlIFNUQl9XRUFLOgotICAgICAgICAgICAgICAgIC8qIG5vIHNlY3Rpb24gPT0gdW5kZWZpbmVkICovCi0gICAgICAgICAgICBpZihzLT5zdF9zaG5keCA9PSAwKSBjb250aW51ZTsKLQotICAgICAgICAgICAgVFJBQ0VfVFlQRShMT09LVVAsICIlNWQgRk9VTkQgJXMgaW4gJXMgKCUwOHgpICVkXG4iLCBwaWQsCi0gICAgICAgICAgICAgICAgICAgICAgIG5hbWUsIHNpLT5uYW1lLCBzLT5zdF92YWx1ZSwgcy0+c3Rfc2l6ZSk7Ci0gICAgICAgICAgICByZXR1cm4gczsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBOVUxMOwotfQotCi1zdGF0aWMgdW5zaWduZWQgZWxmaGFzaChjb25zdCBjaGFyICpfbmFtZSkKLXsKLSAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpuYW1lID0gKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgX25hbWU7Ci0gICAgdW5zaWduZWQgaCA9IDAsIGc7Ci0KLSAgICB3aGlsZSgqbmFtZSkgewotICAgICAgICBoID0gKGggPDwgNCkgKyAqbmFtZSsrOwotICAgICAgICBnID0gaCAmIDB4ZjAwMDAwMDA7Ci0gICAgICAgIGggXj0gZzsKLSAgICAgICAgaCBePSBnID4+IDI0OwotICAgIH0KLSAgICByZXR1cm4gaDsKLX0KLQotc3RhdGljIEVsZjMyX1N5bSAqCi1fZG9fbG9va3VwKHNvaW5mbyAqc2ksIGNvbnN0IGNoYXIgKm5hbWUsIHVuc2lnbmVkICpiYXNlKQotewotICAgIHVuc2lnbmVkIGVsZl9oYXNoID0gZWxmaGFzaChuYW1lKTsKLSAgICBFbGYzMl9TeW0gKnM7Ci0gICAgdW5zaWduZWQgKmQ7Ci0gICAgc29pbmZvICpsc2kgPSBzaTsKLSAgICBpbnQgaTsKLQotICAgIC8qIExvb2sgZm9yIHN5bWJvbHMgaW4gdGhlIGxvY2FsIHNjb3BlIGZpcnN0ICh0aGUgb2JqZWN0IHdobyBpcwotICAgICAqIHNlYXJjaGluZykuIFRoaXMgaGFwcGVucyB3aXRoIEMrKyB0ZW1wbGF0ZXMgb24gaTM4NiBmb3Igc29tZQotICAgICAqIHJlYXNvbi4KLSAgICAgKgotICAgICAqIE5vdGVzIG9uIHdlYWsgc3ltYm9sczoKLSAgICAgKiBUaGUgRUxGIHNwZWNzIGFyZSBhbWJpZ2lvdXMgYWJvdXQgdHJlYXRtZW50IG9mIHdlYWsgZGVmaW5pdGlvbnMgaW4KLSAgICAgKiBkeW5hbWljIGxpbmtpbmcuICBTb21lIHN5c3RlbXMgcmV0dXJuIHRoZSBmaXJzdCBkZWZpbml0aW9uIGZvdW5kCi0gICAgICogYW5kIHNvbWUgdGhlIGZpcnN0IG5vbi13ZWFrIGRlZmluaXRpb24uICAgVGhpcyBpcyBzeXN0ZW0gZGVwZW5kZW50LgotICAgICAqIEhlcmUgd2UgcmV0dXJuIHRoZSBmaXJzdCBkZWZpbml0aW9uIGZvdW5kIGZvciBzaW1wbGljaXR5LiAgKi8KLSAgICBzID0gX2VsZl9sb29rdXAoc2ksIGVsZl9oYXNoLCBuYW1lKTsKLSAgICBpZihzICE9IE5VTEwpCi0gICAgICAgIGdvdG8gZG9uZTsKLQotICAgIC8qIE5leHQsIGxvb2sgZm9yIGl0IGluIHRoZSBwcmVsb2FkcyBsaXN0ICovCi0gICAgZm9yKGkgPSAwOyBwcmVsb2Fkc1tpXSAhPSBOVUxMOyBpKyspIHsKLSAgICAgICAgbHNpID0gcHJlbG9hZHNbaV07Ci0gICAgICAgIHMgPSBfZWxmX2xvb2t1cChsc2ksIGVsZl9oYXNoLCBuYW1lKTsKLSAgICAgICAgaWYocyAhPSBOVUxMKQotICAgICAgICAgICAgZ290byBkb25lOwotICAgIH0KLQotICAgIGZvcihkID0gc2ktPmR5bmFtaWM7ICpkOyBkICs9IDIpIHsKLSAgICAgICAgaWYoZFswXSA9PSBEVF9ORUVERUQpewotICAgICAgICAgICAgbHNpID0gKHNvaW5mbyAqKWRbMV07Ci0gICAgICAgICAgICBpZiAoIXZhbGlkYXRlX3NvaW5mbyhsc2kpKSB7Ci0gICAgICAgICAgICAgICAgRExfRVJSKCIlNWQgYmFkIERUX05FRURFRCBwb2ludGVyIGluICVzIiwKLSAgICAgICAgICAgICAgICAgICAgICAgcGlkLCBzaS0+bmFtZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIERFQlVHKCIlNWQgJXM6IGxvb2tpbmcgdXAgJXMgaW4gJXNcbiIsCi0gICAgICAgICAgICAgICAgICBwaWQsIHNpLT5uYW1lLCBuYW1lLCBsc2ktPm5hbWUpOwotICAgICAgICAgICAgcyA9IF9lbGZfbG9va3VwKGxzaSwgZWxmX2hhc2gsIG5hbWUpOwotICAgICAgICAgICAgaWYgKChzICE9IE5VTEwpICYmIChzLT5zdF9zaG5keCAhPSBTSE5fVU5ERUYpKQotICAgICAgICAgICAgICAgIGdvdG8gZG9uZTsKLSAgICAgICAgfQotICAgIH0KLQotI2lmIEFMTE9XX1NZTUJPTFNfRlJPTV9NQUlOCi0gICAgLyogSWYgd2UgYXJlIHJlc29sdmluZyByZWxvY2F0aW9ucyB3aGlsZSBkbG9wZW4oKWluZyBhIGxpYnJhcnksIGl0J3MgT0sgZm9yCi0gICAgICogdGhlIGxpYnJhcnkgdG8gcmVzb2x2ZSBhIHN5bWJvbCB0aGF0J3MgZGVmaW5lZCBpbiB0aGUgZXhlY3V0YWJsZSBpdHNlbGYsCi0gICAgICogYWx0aG91Z2ggdGhpcyBpcyByYXJlIGFuZCBpcyBnZW5lcmFsbHkgYSBiYWQgaWRlYS4KLSAgICAgKi8KLSAgICBpZiAoc29tYWluKSB7Ci0gICAgICAgIGxzaSA9IHNvbWFpbjsKLSAgICAgICAgREVCVUcoIiU1ZCAlczogbG9va2luZyB1cCAlcyBpbiBleGVjdXRhYmxlICVzXG4iLAotICAgICAgICAgICAgICBwaWQsIHNpLT5uYW1lLCBuYW1lLCBsc2ktPm5hbWUpOwotICAgICAgICBzID0gX2VsZl9sb29rdXAobHNpLCBlbGZfaGFzaCwgbmFtZSk7Ci0gICAgfQotI2VuZGlmCi0KLWRvbmU6Ci0gICAgaWYocyAhPSBOVUxMKSB7Ci0gICAgICAgIFRSQUNFX1RZUEUoTE9PS1VQLCAiJTVkIHNpICVzIHN5bSAlcyBzLT5zdF92YWx1ZSA9IDB4JTA4eCwgIgotICAgICAgICAgICAgICAgICAgICJmb3VuZCBpbiAlcywgYmFzZSA9IDB4JTA4eFxuIiwKLSAgICAgICAgICAgICAgICAgICBwaWQsIHNpLT5uYW1lLCBuYW1lLCBzLT5zdF92YWx1ZSwgbHNpLT5uYW1lLCBsc2ktPmJhc2UpOwotICAgICAgICAqYmFzZSA9IGxzaS0+YmFzZTsKLSAgICAgICAgcmV0dXJuIHM7Ci0gICAgfQotCi0gICAgcmV0dXJuIE5VTEw7Ci19Ci0KLS8qIFRoaXMgaXMgdXNlZCBieSBkbF9zeW0oKS4gIEl0IHBlcmZvcm1zIHN5bWJvbCBsb29rdXAgb25seSB3aXRoaW4gdGhlCi0gICBzcGVjaWZpZWQgc29pbmZvIG9iamVjdCBhbmQgbm90IGluIGFueSBvZiBpdHMgZGVwZW5kZW5jaWVzLgotICovCi1FbGYzMl9TeW0gKmxvb2t1cF9pbl9saWJyYXJ5KHNvaW5mbyAqc2ksIGNvbnN0IGNoYXIgKm5hbWUpCi17Ci0gICAgcmV0dXJuIF9lbGZfbG9va3VwKHNpLCBlbGZoYXNoKG5hbWUpLCBuYW1lKTsKLX0KLQotLyogVGhpcyBpcyB1c2VkIGJ5IGRsX3N5bSgpLiAgSXQgcGVyZm9ybXMgYSBnbG9iYWwgc3ltYm9sIGxvb2t1cC4KLSAqLwotRWxmMzJfU3ltICpsb29rdXAoY29uc3QgY2hhciAqbmFtZSwgc29pbmZvICoqZm91bmQsIHNvaW5mbyAqc3RhcnQpCi17Ci0gICAgdW5zaWduZWQgZWxmX2hhc2ggPSBlbGZoYXNoKG5hbWUpOwotICAgIEVsZjMyX1N5bSAqcyA9IE5VTEw7Ci0gICAgc29pbmZvICpzaTsKLQotICAgIGlmKHN0YXJ0ID09IE5VTEwpIHsKLSAgICAgICAgc3RhcnQgPSBzb2xpc3Q7Ci0gICAgfQotCi0gICAgZm9yKHNpID0gc3RhcnQ7IChzID09IE5VTEwpICYmIChzaSAhPSBOVUxMKTsgc2kgPSBzaS0+bmV4dCkKLSAgICB7Ci0gICAgICAgIGlmKHNpLT5mbGFncyAmIEZMQUdfRVJST1IpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgcyA9IF9lbGZfbG9va3VwKHNpLCBlbGZfaGFzaCwgbmFtZSk7Ci0gICAgICAgIGlmIChzICE9IE5VTEwpIHsKLSAgICAgICAgICAgICpmb3VuZCA9IHNpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZihzICE9IE5VTEwpIHsKLSAgICAgICAgVFJBQ0VfVFlQRShMT09LVVAsICIlNWQgJXMgcy0+c3RfdmFsdWUgPSAweCUwOHgsICIKLSAgICAgICAgICAgICAgICAgICAic2ktPmJhc2UgPSAweCUwOHhcbiIsIHBpZCwgbmFtZSwgcy0+c3RfdmFsdWUsIHNpLT5iYXNlKTsKLSAgICAgICAgcmV0dXJuIHM7Ci0gICAgfQotCi0gICAgcmV0dXJuIE5VTEw7Ci19Ci0KLXNvaW5mbyAqZmluZF9jb250YWluaW5nX2xpYnJhcnkoY29uc3Qgdm9pZCAqYWRkcikKLXsKLSAgICBzb2luZm8gKnNpOwotCi0gICAgZm9yKHNpID0gc29saXN0OyBzaSAhPSBOVUxMOyBzaSA9IHNpLT5uZXh0KQotICAgIHsKLSAgICAgICAgaWYoKHVuc2lnbmVkKWFkZHIgPj0gc2ktPmJhc2UgJiYgKHVuc2lnbmVkKWFkZHIgLSBzaS0+YmFzZSA8IHNpLT5zaXplKSB7Ci0gICAgICAgICAgICByZXR1cm4gc2k7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gTlVMTDsKLX0KLQotRWxmMzJfU3ltICpmaW5kX2NvbnRhaW5pbmdfc3ltYm9sKGNvbnN0IHZvaWQgKmFkZHIsIHNvaW5mbyAqc2kpCi17Ci0gICAgdW5zaWduZWQgaW50IGk7Ci0gICAgdW5zaWduZWQgc29hZGRyID0gKHVuc2lnbmVkKWFkZHIgLSBzaS0+YmFzZTsKLQotICAgIC8qIFNlYXJjaCB0aGUgbGlicmFyeSdzIHN5bWJvbCB0YWJsZSBmb3IgYW55IGRlZmluZWQgc3ltYm9sIHdoaWNoCi0gICAgICogY29udGFpbnMgdGhpcyBhZGRyZXNzICovCi0gICAgZm9yKGk9MDsgaTxzaS0+bmNoYWluOyBpKyspIHsKLSAgICAgICAgRWxmMzJfU3ltICpzeW0gPSAmc2ktPnN5bXRhYltpXTsKLQotICAgICAgICBpZihzeW0tPnN0X3NobmR4ICE9IFNITl9VTkRFRiAmJgotICAgICAgICAgICBzb2FkZHIgPj0gc3ltLT5zdF92YWx1ZSAmJgotICAgICAgICAgICBzb2FkZHIgPCBzeW0tPnN0X3ZhbHVlICsgc3ltLT5zdF9zaXplKSB7Ci0gICAgICAgICAgICByZXR1cm4gc3ltOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIE5VTEw7Ci19Ci0KLSNpZiAwCi1zdGF0aWMgdm9pZCBkdW1wKHNvaW5mbyAqc2kpCi17Ci0gICAgRWxmMzJfU3ltICpzID0gc2ktPnN5bXRhYjsKLSAgICB1bnNpZ25lZCBuOwotCi0gICAgZm9yKG4gPSAwOyBuIDwgc2ktPm5jaGFpbjsgbisrKSB7Ci0gICAgICAgIFRSQUNFKCIlNWQgJTA0ZD4gJTA4eDogJTAyeCAlMDR4ICUwOHggJTA4eCAlc1xuIiwgcGlkLCBuLCBzLAotICAgICAgICAgICAgICAgcy0+c3RfaW5mbywgcy0+c3Rfc2huZHgsIHMtPnN0X3ZhbHVlLCBzLT5zdF9zaXplLAotICAgICAgICAgICAgICAgc2ktPnN0cnRhYiArIHMtPnN0X25hbWUpOwotICAgICAgICBzKys7Ci0gICAgfQotfQotI2VuZGlmCi0KLXN0YXRpYyBjb25zdCBjaGFyICpzb3BhdGhzW10gPSB7Ci0gICAgIi92ZW5kb3IvbGliIiwKLSAgICAiL3N5c3RlbS9saWIiLAotICAgIDAKLX07Ci0KLXN0YXRpYyBpbnQgX29wZW5fbGliKGNvbnN0IGNoYXIgKm5hbWUpCi17Ci0gICAgaW50IGZkOwotICAgIHN0cnVjdCBzdGF0IGZpbGVzdGF0OwotCi0gICAgaWYgKChzdGF0KG5hbWUsICZmaWxlc3RhdCkgPj0gMCkgJiYgU19JU1JFRyhmaWxlc3RhdC5zdF9tb2RlKSkgewotICAgICAgICBpZiAoKGZkID0gb3BlbihuYW1lLCBPX1JET05MWSkpID49IDApCi0gICAgICAgICAgICByZXR1cm4gZmQ7Ci0gICAgfQotCi0gICAgcmV0dXJuIC0xOwotfQotCi1zdGF0aWMgaW50IG9wZW5fbGlicmFyeShjb25zdCBjaGFyICpuYW1lKQotewotICAgIGludCBmZDsKLSAgICBjaGFyIGJ1Zls1MTJdOwotICAgIGNvbnN0IGNoYXIgKipwYXRoOwotICAgIGludCBuOwotCi0gICAgVFJBQ0UoIlsgJTVkIG9wZW5pbmcgJXMgXVxuIiwgcGlkLCBuYW1lKTsKLQotICAgIGlmKG5hbWUgPT0gMCkgcmV0dXJuIC0xOwotICAgIGlmKHN0cmxlbihuYW1lKSA+IDI1NikgcmV0dXJuIC0xOwotCi0gICAgaWYgKChuYW1lWzBdID09ICcvJykgJiYgKChmZCA9IF9vcGVuX2xpYihuYW1lKSkgPj0gMCkpCi0gICAgICAgIHJldHVybiBmZDsKLQotICAgIGZvciAocGF0aCA9IGxkcGF0aHM7ICpwYXRoOyBwYXRoKyspIHsKLSAgICAgICAgbiA9IGZvcm1hdF9idWZmZXIoYnVmLCBzaXplb2YoYnVmKSwgIiVzLyVzIiwgKnBhdGgsIG5hbWUpOwotICAgICAgICBpZiAobiA8IDAgfHwgbiA+PSAoaW50KXNpemVvZihidWYpKSB7Ci0gICAgICAgICAgICBXQVJOKCJJZ25vcmluZyB2ZXJ5IGxvbmcgbGlicmFyeSBwYXRoOiAlcy8lc1xuIiwgKnBhdGgsIG5hbWUpOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKChmZCA9IF9vcGVuX2xpYihidWYpKSA+PSAwKQotICAgICAgICAgICAgcmV0dXJuIGZkOwotICAgIH0KLSAgICBmb3IgKHBhdGggPSBzb3BhdGhzOyAqcGF0aDsgcGF0aCsrKSB7Ci0gICAgICAgIG4gPSBmb3JtYXRfYnVmZmVyKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlcy8lcyIsICpwYXRoLCBuYW1lKTsKLSAgICAgICAgaWYgKG4gPCAwIHx8IG4gPj0gKGludClzaXplb2YoYnVmKSkgewotICAgICAgICAgICAgV0FSTigiSWdub3JpbmcgdmVyeSBsb25nIGxpYnJhcnkgcGF0aDogJXMvJXNcbiIsICpwYXRoLCBuYW1lKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIGlmICgoZmQgPSBfb3Blbl9saWIoYnVmKSkgPj0gMCkKLSAgICAgICAgICAgIHJldHVybiBmZDsKLSAgICB9Ci0KLSAgICByZXR1cm4gLTE7Ci19Ci0KLS8qIHRlbXBvcmFyeSBzcGFjZSBmb3IgaG9sZGluZyB0aGUgZmlyc3QgcGFnZSBvZiB0aGUgc2hhcmVkIGxpYgotICogd2hpY2ggY29udGFpbnMgdGhlIGVsZiBoZWFkZXIgKHdpdGggdGhlIHBodCkuICovCi1zdGF0aWMgdW5zaWduZWQgY2hhciBfX2hlYWRlcltQQUdFX1NJWkVdOwotCi10eXBlZGVmIHN0cnVjdCB7Ci0gICAgbG9uZyBtbWFwX2FkZHI7Ci0gICAgY2hhciB0YWdbNF07IC8qICdQJywgJ1InLCAnRScsICcgJyAqLwotfSBwcmVsaW5rX2luZm9fdDsKLQotLyogUmV0dXJucyB0aGUgcmVxdWVzdGVkIGJhc2UgYWRkcmVzcyBpZiB0aGUgbGlicmFyeSBpcyBwcmVsaW5rZWQsCi0gKiBhbmQgMCBvdGhlcndpc2UuICAqLwotc3RhdGljIHVuc2lnbmVkIGxvbmcKLWlzX3ByZWxpbmtlZChpbnQgZmQsIGNvbnN0IGNoYXIgKm5hbWUpCi17Ci0gICAgb2ZmX3Qgc3o7Ci0gICAgcHJlbGlua19pbmZvX3QgaW5mbzsKLQotICAgIHN6ID0gbHNlZWsoZmQsIC1zaXplb2YocHJlbGlua19pbmZvX3QpLCBTRUVLX0VORCk7Ci0gICAgaWYgKHN6IDwgMCkgewotICAgICAgICBETF9FUlIoImxzZWVrKCkgZmFpbGVkISIpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBpZiAocmVhZChmZCwgJmluZm8sIHNpemVvZihpbmZvKSkgIT0gc2l6ZW9mKGluZm8pKSB7Ci0gICAgICAgIFdBUk4oIkNvdWxkIG5vdCByZWFkIHByZWxpbmtfaW5mb190IHN0cnVjdHVyZSBmb3IgYCVzYFxuIiwgbmFtZSk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIGlmIChzdHJuY21wKGluZm8udGFnLCAiUFJFICIsIDQpKSB7Ci0gICAgICAgIFdBUk4oImAlc2AgaXMgbm90IGEgcHJlbGlua2VkIGxpYnJhcnlcbiIsIG5hbWUpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICByZXR1cm4gKHVuc2lnbmVkIGxvbmcpaW5mby5tbWFwX2FkZHI7Ci19Ci0KLS8qIHZlcmlmeV9lbGZfb2JqZWN0Ci0gKiAgICAgIFZlcmlmaWVzIGlmIHRoZSBvYmplY3QgQCBiYXNlIGlzIGEgdmFsaWQgRUxGIG9iamVjdAotICoKLSAqIEFyZ3M6Ci0gKgotICogUmV0dXJuczoKLSAqICAgICAgIDAgb24gc3VjY2VzcwotICogICAgICAtMSBpZiBubyB2YWxpZCBFTEYgb2JqZWN0IGlzIGZvdW5kIEAgYmFzZS4KLSAqLwotc3RhdGljIGludAotdmVyaWZ5X2VsZl9vYmplY3Qodm9pZCAqYmFzZSwgY29uc3QgY2hhciAqbmFtZSkKLXsKLSAgICBFbGYzMl9FaGRyICpoZHIgPSAoRWxmMzJfRWhkciAqKSBiYXNlOwotCi0gICAgaWYgKGhkci0+ZV9pZGVudFtFSV9NQUcwXSAhPSBFTEZNQUcwKSByZXR1cm4gLTE7Ci0gICAgaWYgKGhkci0+ZV9pZGVudFtFSV9NQUcxXSAhPSBFTEZNQUcxKSByZXR1cm4gLTE7Ci0gICAgaWYgKGhkci0+ZV9pZGVudFtFSV9NQUcyXSAhPSBFTEZNQUcyKSByZXR1cm4gLTE7Ci0gICAgaWYgKGhkci0+ZV9pZGVudFtFSV9NQUczXSAhPSBFTEZNQUczKSByZXR1cm4gLTE7Ci0KLSAgICAvKiBUT0RPOiBTaG91bGQgd2UgdmVyaWZ5IGFueXRoaW5nIGVsc2UgaW4gdGhlIGhlYWRlcj8gKi8KLSNpZmRlZiBBTkRST0lEX0FSTV9MSU5LRVIKLSAgICBpZiAoaGRyLT5lX21hY2hpbmUgIT0gRU1fQVJNKSByZXR1cm4gLTE7Ci0jZWxpZiBkZWZpbmVkKEFORFJPSURfWDg2X0xJTktFUikKLSAgICBpZiAoaGRyLT5lX21hY2hpbmUgIT0gRU1fMzg2KSByZXR1cm4gLTE7Ci0jZW5kaWYKLSAgICByZXR1cm4gMDsKLX0KLQotCi0vKiBnZXRfbGliX2V4dGVudHMKLSAqICAgICAgUmV0cmlldmVzIHRoZSBiYXNlICgqYmFzZSkgYWRkcmVzcyB3aGVyZSB0aGUgRUxGIG9iamVjdCBzaG91bGQgYmUKLSAqICAgICAgbWFwcGVkIGFuZCBpdHMgb3ZlcmFsbCBtZW1vcnkgc2l6ZSAoKnRvdGFsX3N6KS4KLSAqCi0gKiBBcmdzOgotICogICAgICBmZDogT3BlbmVkIGZpbGUgZGVzY3JpcHRvciBmb3IgdGhlIGxpYnJhcnkKLSAqICAgICAgbmFtZTogVGhlIG5hbWUgb2YgdGhlIGxpYnJhcnkKLSAqICAgICAgX2hkcjogUG9pbnRlciB0byB0aGUgaGVhZGVyIHBhZ2Ugb2YgdGhlIGxpYnJhcnkKLSAqICAgICAgdG90YWxfc3o6IFRvdGFsIHNpemUgb2YgdGhlIG1lbW9yeSB0aGF0IHNob3VsZCBiZSBhbGxvY2F0ZWQgZm9yCi0gKiAgICAgICAgICAgICAgICB0aGlzIGxpYnJhcnkKLSAqCi0gKiBSZXR1cm5zOgotICogICAgICAtMSBpZiB0aGVyZSB3YXMgYW4gZXJyb3Igd2hpbGUgdHJ5aW5nIHRvIGdldCB0aGUgbGliIGV4dGVudHMuCi0gKiAgICAgICAgIFRoZSBwb3NzaWJsZSByZWFzb25zIGFyZToKLSAqICAgICAgICAgICAgIC0gQ291bGQgbm90IGRldGVybWluZSBpZiB0aGUgbGlicmFyeSB3YXMgcHJlbGlua2VkLgotICogICAgICAgICAgICAgLSBUaGUgbGlicmFyeSBwcm92aWRlZCBpcyBub3QgYSB2YWxpZCBFTEYgb2JqZWN0Ci0gKiAgICAgICAwIGlmIHRoZSBsaWJyYXJ5IGRpZCBub3QgcmVxdWVzdCBhIHNwZWNpZmljIGJhc2Ugb2Zmc2V0IChub3JtYWwKLSAqICAgICAgICAgZm9yIG5vbi1wcmVsaW5rZWQgbGlicykKLSAqICAgICA+IDAgaWYgdGhlIGxpYnJhcnkgcmVxdWVzdHMgYSBzcGVjaWZpYyBhZGRyZXNzIHRvIGJlIG1hcHBlZCB0by4KLSAqICAgICAgICAgVGhpcyBpbmRpY2F0ZXMgYSBwcmUtbGlua2VkIGxpYnJhcnkuCi0gKi8KLXN0YXRpYyB1bnNpZ25lZAotZ2V0X2xpYl9leHRlbnRzKGludCBmZCwgY29uc3QgY2hhciAqbmFtZSwgdm9pZCAqX19oZHIsIHVuc2lnbmVkICp0b3RhbF9zeikKLXsKLSAgICB1bnNpZ25lZCByZXFfYmFzZTsKLSAgICB1bnNpZ25lZCBtaW5fdmFkZHIgPSAweGZmZmZmZmZmOwotICAgIHVuc2lnbmVkIG1heF92YWRkciA9IDA7Ci0gICAgdW5zaWduZWQgY2hhciAqX2hkciA9ICh1bnNpZ25lZCBjaGFyICopX19oZHI7Ci0gICAgRWxmMzJfRWhkciAqZWhkciA9IChFbGYzMl9FaGRyICopX2hkcjsKLSAgICBFbGYzMl9QaGRyICpwaGRyOwotICAgIGludCBjbnQ7Ci0KLSAgICBUUkFDRSgiWyAlNWQgQ29tcHV0aW5nIGV4dGVudHMgZm9yICclcycuIF1cbiIsIHBpZCwgbmFtZSk7Ci0gICAgaWYgKHZlcmlmeV9lbGZfb2JqZWN0KF9oZHIsIG5hbWUpIDwgMCkgewotICAgICAgICBETF9FUlIoIiU1ZCAtICVzIGlzIG5vdCBhIHZhbGlkIEVMRiBvYmplY3QiLCBwaWQsIG5hbWUpOwotICAgICAgICByZXR1cm4gKHVuc2lnbmVkKS0xOwotICAgIH0KLQotICAgIHJlcV9iYXNlID0gKHVuc2lnbmVkKSBpc19wcmVsaW5rZWQoZmQsIG5hbWUpOwotICAgIGlmIChyZXFfYmFzZSA9PSAodW5zaWduZWQpLTEpCi0gICAgICAgIHJldHVybiAtMTsKLSAgICBlbHNlIGlmIChyZXFfYmFzZSAhPSAwKSB7Ci0gICAgICAgIFRSQUNFKCJbICU1ZCAtIFByZWxpbmtlZCBsaWJyYXJ5ICclcycgcmVxdWVzdGluZyBiYXNlIEAgMHglMDh4IF1cbiIsCi0gICAgICAgICAgICAgIHBpZCwgbmFtZSwgcmVxX2Jhc2UpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIFRSQUNFKCJbICU1ZCAtIE5vbi1wcmVsaW5rZWQgbGlicmFyeSAnJXMnIGZvdW5kLiBdXG4iLCBwaWQsIG5hbWUpOwotICAgIH0KLQotICAgIHBoZHIgPSAoRWxmMzJfUGhkciAqKShfaGRyICsgZWhkci0+ZV9waG9mZik7Ci0KLSAgICAvKiBmaW5kIHRoZSBtaW4vbWF4IHBfdmFkZHJzIGZyb20gYWxsIHRoZSBQVF9MT0FEIHNlZ21lbnRzIHNvIHdlIGNhbgotICAgICAqIGdldCB0aGUgcmFuZ2UuICovCi0gICAgZm9yIChjbnQgPSAwOyBjbnQgPCBlaGRyLT5lX3BobnVtOyArK2NudCwgKytwaGRyKSB7Ci0gICAgICAgIGlmIChwaGRyLT5wX3R5cGUgPT0gUFRfTE9BRCkgewotICAgICAgICAgICAgaWYgKChwaGRyLT5wX3ZhZGRyICsgcGhkci0+cF9tZW1zeikgPiBtYXhfdmFkZHIpCi0gICAgICAgICAgICAgICAgbWF4X3ZhZGRyID0gcGhkci0+cF92YWRkciArIHBoZHItPnBfbWVtc3o7Ci0gICAgICAgICAgICBpZiAocGhkci0+cF92YWRkciA8IG1pbl92YWRkcikKLSAgICAgICAgICAgICAgICBtaW5fdmFkZHIgPSBwaGRyLT5wX3ZhZGRyOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKChtaW5fdmFkZHIgPT0gMHhmZmZmZmZmZikgJiYgKG1heF92YWRkciA9PSAwKSkgewotICAgICAgICBETF9FUlIoIiU1ZCAtIE5vIGxvYWRhYmxlIHNlZ21lbnRzIGZvdW5kIGluICVzLiIsIHBpZCwgbmFtZSk7Ci0gICAgICAgIHJldHVybiAodW5zaWduZWQpLTE7Ci0gICAgfQotCi0gICAgLyogdHJ1bmNhdGUgbWluX3ZhZGRyIGRvd24gdG8gcGFnZSBib3VuZGFyeSAqLwotICAgIG1pbl92YWRkciAmPSB+UEFHRV9NQVNLOwotCi0gICAgLyogcm91bmQgbWF4X3ZhZGRyIHVwIHRvIHRoZSBuZXh0IHBhZ2UgKi8KLSAgICBtYXhfdmFkZHIgPSAobWF4X3ZhZGRyICsgUEFHRV9TSVpFIC0gMSkgJiB+UEFHRV9NQVNLOwotCi0gICAgKnRvdGFsX3N6ID0gKG1heF92YWRkciAtIG1pbl92YWRkcik7Ci0gICAgcmV0dXJuICh1bnNpZ25lZClyZXFfYmFzZTsKLX0KLQotLyogYWxsb2NfbWVtX3JlZ2lvbgotICoKLSAqICAgICBUaGlzIGZ1bmN0aW9uIHJlc2VydmVzIGEgY2h1bmsgb2YgbWVtb3J5IHRvIGJlIHVzZWQgZm9yIG1hcHBpbmcgaW4KLSAqICAgICB0aGUgc2hhcmVkIGxpYnJhcnkuIFdlIHJlc2VydmUgdGhlIGVudGlyZSBtZW1vcnkgcmVnaW9uIGhlcmUsIGFuZAotICogICAgIHRoZW4gdGhlIHJlc3Qgb2YgdGhlIGxpbmtlciB3aWxsIHJlbG9jYXRlIHRoZSBpbmRpdmlkdWFsIGxvYWRhYmxlCi0gKiAgICAgc2VnbWVudHMgaW50byB0aGUgY29ycmVjdCBsb2NhdGlvbnMgd2l0aGluIHRoaXMgbWVtb3J5IHJhbmdlLgotICoKLSAqIEFyZ3M6Ci0gKiAgICAgc2ktPmJhc2U6IFRoZSByZXF1ZXN0ZWQgYmFzZSBvZiB0aGUgYWxsb2NhdGlvbi4gSWYgMCwgYSBzYW5lIG9uZSB3aWxsIGJlCi0gKiAgICAgICAgICAgICAgIGNob3NlbiBpbiB0aGUgcmFuZ2UgTElCQkFTRSA8PSBiYXNlIDwgTElCTEFTVC4KLSAqICAgICBzaS0+c2l6ZTogVGhlIHNpemUgb2YgdGhlIGFsbG9jYXRpb24uCi0gKgotICogUmV0dXJuczoKLSAqICAgICAtMSBvbiBmYWlsdXJlLCBhbmQgMCBvbiBzdWNjZXNzLiAgT24gc3VjY2Vzcywgc2ktPmJhc2Ugd2lsbCBjb250YWluCi0gKiAgICAgdGhlIHZpcnR1YWwgYWRkcmVzcyBhdCB3aGljaCB0aGUgbGlicmFyeSB3aWxsIGJlIG1hcHBlZC4KLSAqLwotCi1zdGF0aWMgaW50IHJlc2VydmVfbWVtX3JlZ2lvbihzb2luZm8gKnNpKQotewotICAgIHZvaWQgKmJhc2UgPSBtbWFwKCh2b2lkICopc2ktPmJhc2UsIHNpLT5zaXplLCBQUk9UX1JFQUQgfCBQUk9UX0VYRUMsCi0gICAgICAgICAgICAgICAgICAgICAgTUFQX0ZJWEVEIHwgTUFQX1BSSVZBVEUgfCBNQVBfQU5PTllNT1VTLCAtMSwgMCk7Ci0gICAgaWYgKGJhc2UgPT0gTUFQX0ZBSUxFRCkgewotICAgICAgICBETF9FUlIoIiU1ZCBjYW4gTk9UIG1hcCAoJXNwcmVsaW5rZWQpIGxpYnJhcnkgJyVzJyBhdCAweCUwOHggIgotICAgICAgICAgICAgICAiYXMgcmVxdWVzdGVkLCB3aWxsIHRyeSBnZW5lcmFsIHBvb2w6ICVkICglcykiLAotICAgICAgICAgICAgICBwaWQsIChzaS0+YmFzZSA/ICIiIDogIm5vbi0iKSwgc2ktPm5hbWUsIHNpLT5iYXNlLAotICAgICAgICAgICAgICBlcnJubywgc3RyZXJyb3IoZXJybm8pKTsKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0gZWxzZSBpZiAoYmFzZSAhPSAodm9pZCAqKXNpLT5iYXNlKSB7Ci0gICAgICAgIERMX0VSUigiT09QUzogJTVkICVzcHJlbGlua2VkIGxpYnJhcnkgJyVzJyBtYXBwZWQgYXQgMHglMDh4LCAiCi0gICAgICAgICAgICAgICJub3QgYXQgMHglMDh4IiwgcGlkLCAoc2ktPmJhc2UgPyAiIiA6ICJub24tIiksCi0gICAgICAgICAgICAgIHNpLT5uYW1lLCAodW5zaWduZWQpYmFzZSwgc2ktPmJhc2UpOwotICAgICAgICBtdW5tYXAoYmFzZSwgc2ktPnNpemUpOwotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotICAgIHJldHVybiAwOwotfQotCi1zdGF0aWMgaW50Ci1hbGxvY19tZW1fcmVnaW9uKHNvaW5mbyAqc2kpCi17Ci0gICAgaWYgKHNpLT5iYXNlKSB7Ci0gICAgICAgIC8qIEF0dGVtcHQgdG8gbW1hcCBhIHByZWxpbmtlZCBsaWJyYXJ5LiAqLwotICAgICAgICByZXR1cm4gcmVzZXJ2ZV9tZW1fcmVnaW9uKHNpKTsKLSAgICB9Ci0KLSAgICAvKiBUaGlzIGlzIG5vdCBhIHByZWxpbmtlZCBsaWJyYXJ5LCBzbyB3ZSB1c2UgdGhlIGtlcm5lbCdzIGRlZmF1bHQKLSAgICAgICBhbGxvY2F0b3IuCi0gICAgKi8KLQotICAgIHZvaWQgKmJhc2UgPSBtbWFwKE5VTEwsIHNpLT5zaXplLCBQUk9UX1JFQUQgfCBQUk9UX0VYRUMsCi0gICAgICAgICAgICAgICAgICAgICAgTUFQX1BSSVZBVEUgfCBNQVBfQU5PTllNT1VTLCAtMSwgMCk7Ci0gICAgaWYgKGJhc2UgPT0gTUFQX0ZBSUxFRCkgewotICAgICAgICBETF9FUlIoIiU1ZCBtbWFwIG9mIGxpYnJhcnkgJyVzJyBmYWlsZWQ6ICVkICglcylcbiIsCi0gICAgICAgICAgICAgIHBpZCwgc2ktPm5hbWUsCi0gICAgICAgICAgICAgIGVycm5vLCBzdHJlcnJvcihlcnJubykpOwotICAgICAgICBnb3RvIGVycjsKLSAgICB9Ci0gICAgc2ktPmJhc2UgPSAodW5zaWduZWQpIGJhc2U7Ci0gICAgUFJJTlQoIiU1ZCBtYXBwZWQgbGlicmFyeSAnJXMnIHRvICUwOHggdmlhIGtlcm5lbCBhbGxvY2F0b3IuXG4iLAotICAgICAgICAgIHBpZCwgc2ktPm5hbWUsIHNpLT5iYXNlKTsKLSAgICByZXR1cm4gMDsKLQotZXJyOgotICAgIERMX0VSUigiT09QUzogJTVkIGNhbm5vdCBtYXAgbGlicmFyeSAnJXMnLiBubyB2c3BhY2UgYXZhaWxhYmxlLiIsCi0gICAgICAgICAgcGlkLCBzaS0+bmFtZSk7Ci0gICAgcmV0dXJuIC0xOwotfQotCi0jZGVmaW5lIE1BWUJFX01BUF9GTEFHKHgsZnJvbSx0bykgICAgKCgoeCkgJiAoZnJvbSkpID8gKHRvKSA6IDApCi0jZGVmaW5lIFBGTEFHU19UT19QUk9UKHgpICAgICAgICAgICAgKE1BWUJFX01BUF9GTEFHKCh4KSwgUEZfWCwgUFJPVF9FWEVDKSB8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUFZQkVfTUFQX0ZMQUcoKHgpLCBQRl9SLCBQUk9UX1JFQUQpIHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQVlCRV9NQVBfRkxBRygoeCksIFBGX1csIFBST1RfV1JJVEUpKQotLyogbG9hZF9zZWdtZW50cwotICoKLSAqICAgICBUaGlzIGZ1bmN0aW9uIGxvYWRzIGFsbCB0aGUgbG9hZGFibGUgKFBUX0xPQUQpIHNlZ21lbnRzIGludG8gbWVtb3J5Ci0gKiAgICAgYXQgdGhlaXIgYXBwcm9wcmlhdGUgbWVtb3J5IG9mZnNldHMgb2ZmIHRoZSBiYXNlIGFkZHJlc3MuCi0gKgotICogQXJnczoKLSAqICAgICBmZDogT3BlbiBmaWxlIGRlc2NyaXB0b3IgdG8gdGhlIGxpYnJhcnkgdG8gbG9hZC4KLSAqICAgICBoZWFkZXI6IFBvaW50ZXIgdG8gYSBoZWFkZXIgcGFnZSB0aGF0IGNvbnRhaW5zIHRoZSBFTEYgaGVhZGVyLgotICogICAgICAgICAgICAgVGhpcyBpcyBuZWVkZWQgc2luY2Ugd2UgaGF2ZW4ndCBtYXBwZWQgaW4gdGhlIHJlYWwgZmlsZSB5ZXQuCi0gKiAgICAgc2k6IHB0ciB0byBzb2luZm8gc3RydWN0IGRlc2NyaWJpbmcgdGhlIHNoYXJlZCBvYmplY3QuCi0gKgotICogUmV0dXJuczoKLSAqICAgICAwIG9uIHN1Y2Nlc3MsIC0xIG9uIGZhaWx1cmUuCi0gKi8KLXN0YXRpYyBpbnQKLWxvYWRfc2VnbWVudHMoaW50IGZkLCB2b2lkICpoZWFkZXIsIHNvaW5mbyAqc2kpCi17Ci0gICAgRWxmMzJfRWhkciAqZWhkciA9IChFbGYzMl9FaGRyICopaGVhZGVyOwotICAgIEVsZjMyX1BoZHIgKnBoZHIgPSAoRWxmMzJfUGhkciAqKSgodW5zaWduZWQgY2hhciAqKWhlYWRlciArIGVoZHItPmVfcGhvZmYpOwotICAgIHVuc2lnbmVkIGNoYXIgKmJhc2UgPSAodW5zaWduZWQgY2hhciAqKXNpLT5iYXNlOwotICAgIGludCBjbnQ7Ci0gICAgdW5zaWduZWQgbGVuOwotICAgIHVuc2lnbmVkIGNoYXIgKnRtcDsKLSAgICB1bnNpZ25lZCBjaGFyICpwYmFzZTsKLSAgICB1bnNpZ25lZCBjaGFyICpleHRyYV9iYXNlOwotICAgIHVuc2lnbmVkIGV4dHJhX2xlbjsKLSAgICB1bnNpZ25lZCB0b3RhbF9zeiA9IDA7Ci0KLSAgICBzaS0+d3Jwcm90ZWN0X3N0YXJ0ID0gMHhmZmZmZmZmZjsKLSAgICBzaS0+d3Jwcm90ZWN0X2VuZCA9IDA7Ci0KLSAgICBUUkFDRSgiWyAlNWQgLSBCZWdpbiBsb2FkaW5nIHNlZ21lbnRzIGZvciAnJXMnIEAgMHglMDh4IF1cbiIsCi0gICAgICAgICAgcGlkLCBzaS0+bmFtZSwgKHVuc2lnbmVkKXNpLT5iYXNlKTsKLSAgICAvKiBOb3cgZ28gdGhyb3VnaCBhbGwgdGhlIFBUX0xPQUQgc2VnbWVudHMgYW5kIG1hcCB0aGVtIGludG8gbWVtb3J5Ci0gICAgICogYXQgdGhlIGFwcHJvcHJpYXRlIGxvY2F0aW9ucy4gKi8KLSAgICBmb3IgKGNudCA9IDA7IGNudCA8IGVoZHItPmVfcGhudW07ICsrY250LCArK3BoZHIpIHsKLSAgICAgICAgaWYgKHBoZHItPnBfdHlwZSA9PSBQVF9MT0FEKSB7Ci0gICAgICAgICAgICBERUJVR19EVU1QX1BIRFIocGhkciwgIlBUX0xPQUQiLCBwaWQpOwotICAgICAgICAgICAgLyogd2Ugd2FudCB0byBtYXAgaW4gdGhlIHNlZ21lbnQgb24gYSBwYWdlIGJvdW5kYXJ5ICovCi0gICAgICAgICAgICB0bXAgPSBiYXNlICsgKHBoZHItPnBfdmFkZHIgJiAoflBBR0VfTUFTSykpOwotICAgICAgICAgICAgLyogYWRkIHRoZSAjIG9mIGJ5dGVzIHdlIG1hc2tlZCBvZmYgYWJvdmUgdG8gdGhlIHRvdGFsIGxlbmd0aC4gKi8KLSAgICAgICAgICAgIGxlbiA9IHBoZHItPnBfZmlsZXN6ICsgKHBoZHItPnBfdmFkZHIgJiBQQUdFX01BU0spOwotCi0gICAgICAgICAgICBUUkFDRSgiWyAlZCAtIFRyeWluZyB0byBsb2FkIHNlZ21lbnQgZnJvbSAnJXMnIEAgMHglMDh4ICIKLSAgICAgICAgICAgICAgICAgICIoMHglMDh4KS4gcF92YWRkcj0weCUwOHggcF9vZmZzZXQ9MHglMDh4IF1cbiIsIHBpZCwgc2ktPm5hbWUsCi0gICAgICAgICAgICAgICAgICAodW5zaWduZWQpdG1wLCBsZW4sIHBoZHItPnBfdmFkZHIsIHBoZHItPnBfb2Zmc2V0KTsKLSAgICAgICAgICAgIHBiYXNlID0gbW1hcCh0bXAsIGxlbiwgUEZMQUdTX1RPX1BST1QocGhkci0+cF9mbGFncyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgTUFQX1BSSVZBVEUgfCBNQVBfRklYRUQsIGZkLAotICAgICAgICAgICAgICAgICAgICAgICAgIHBoZHItPnBfb2Zmc2V0ICYgKH5QQUdFX01BU0spKTsKLSAgICAgICAgICAgIGlmIChwYmFzZSA9PSBNQVBfRkFJTEVEKSB7Ci0gICAgICAgICAgICAgICAgRExfRVJSKCIlZCBmYWlsZWQgdG8gbWFwIHNlZ21lbnQgZnJvbSAnJXMnIEAgMHglMDh4ICgweCUwOHgpLiAiCi0gICAgICAgICAgICAgICAgICAgICAgInBfdmFkZHI9MHglMDh4IHBfb2Zmc2V0PTB4JTA4eCIsIHBpZCwgc2ktPm5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkKXRtcCwgbGVuLCBwaGRyLT5wX3ZhZGRyLCBwaGRyLT5wX29mZnNldCk7Ci0gICAgICAgICAgICAgICAgZ290byBmYWlsOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvKiBJZiAnbGVuJyBkaWRuJ3QgZW5kIG9uIHBhZ2UgYm91bmRhcnksIGFuZCBpdCdzIGEgd3JpdGFibGUKLSAgICAgICAgICAgICAqIHNlZ21lbnQsIHplcm8tZmlsbCB0aGUgcmVzdC4gKi8KLSAgICAgICAgICAgIGlmICgobGVuICYgUEFHRV9NQVNLKSAmJiAocGhkci0+cF9mbGFncyAmIFBGX1cpKQotICAgICAgICAgICAgICAgIG1lbXNldCgodm9pZCAqKShwYmFzZSArIGxlbiksIDAsIFBBR0VfU0laRSAtIChsZW4gJiBQQUdFX01BU0spKTsKLQotICAgICAgICAgICAgLyogQ2hlY2sgdG8gc2VlIGlmIHdlIG5lZWQgdG8gZXh0ZW5kIHRoZSBtYXAgZm9yIHRoaXMgc2VnbWVudCB0bwotICAgICAgICAgICAgICogY292ZXIgdGhlIGRpZmYgYmV0d2VlbiBmaWxlc3ogYW5kIG1lbXN6IChpLmUuIGZvciBic3MpLgotICAgICAgICAgICAgICoKLSAgICAgICAgICAgICAqICBiYXNlICAgICAgICAgICBfKy0tLS0tLS0tLS0tLS0tLS0tLS0tLSsgIHBhZ2UgYm91bmRhcnkKLSAgICAgICAgICAgICAqICAgICAgICAgICAgICAgICAgLiAgICAgICAgICAgICAgICAgICAgIC4KLSAgICAgICAgICAgICAqICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgICAgICAgICAqICAgICAgICAgICAgICAgICAgLiAgICAgICAgICAgICAgICAgICAgIC4KLSAgICAgICAgICAgICAqICBwYmFzZSAgICAgICAgICBfKy0tLS0tLS0tLS0tLS0tLS0tLS0tLSsgIHBhZ2UgYm91bmRhcnkKLSAgICAgICAgICAgICAqICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgICAgICAgICAqICAgICAgICAgICAgICAgICAgLiAgICAgICAgICAgICAgICAgICAgIC4KLSAgICAgICAgICAgICAqICBiYXNlICsgcF92YWRkciBffCAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgICAgICAgICAqICAgICAgICAgICAgICAgICAgLiBcICAgICAgICAgIFwgICAgICAgIC4KLSAgICAgICAgICAgICAqICAgICAgICAgICAgICAgICAgLiB8IGZpbGVzeiAgIHwgICAgICAgIC4KLSAgICAgICAgICAgICAqICBwYmFzZSArIGxlbiAgICBffCAvICAgICAgICAgIHwgICAgICAgIHwKLSAgICAgICAgICAgICAqICAgICA8MCBwYWQ+ICAgICAgLiAgICAgICAgICAgIC4gICAgICAgIC4KLSAgICAgICAgICAgICAqICBleHRyYV9iYXNlICAgICBfKy0tLS0tLS0tLS0tLXwtLS0tLS0tLSsgIHBhZ2UgYm91bmRhcnkKLSAgICAgICAgICAgICAqICAgICAgICAgICAgICAgLyAgLiAgICAgICAgICAgIC4gICAgICAgIC4KLSAgICAgICAgICAgICAqICAgICAgICAgICAgICAgfCAgLiAgICAgICAgICAgIC4gICAgICAgIC4KLSAgICAgICAgICAgICAqICAgICAgICAgICAgICAgfCAgKy0tLS0tLS0tLS0tLXwtLS0tLS0tLSsgIHBhZ2UgYm91bmRhcnkKLSAgICAgICAgICAgICAqICBleHRyYV9sZW4tPiAgfCAgfCAgICAgICAgICAgIHwgICAgICAgIHwKLSAgICAgICAgICAgICAqICAgICAgICAgICAgICAgfCAgLiAgICAgICAgICAgIHwgbWVtc3ogIC4KLSAgICAgICAgICAgICAqICAgICAgICAgICAgICAgfCAgLiAgICAgICAgICAgIHwgICAgICAgIC4KLSAgICAgICAgICAgICAqICAgICAgICAgICAgICAgXCBffCAgICAgICAgICAgIC8gICAgICAgIHwKLSAgICAgICAgICAgICAqICAgICAgICAgICAgICAgICAgLiAgICAgICAgICAgICAgICAgICAgIC4KLSAgICAgICAgICAgICAqICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgICAgICAgICAqICAgICAgICAgICAgICAgICBfKy0tLS0tLS0tLS0tLS0tLS0tLS0tLSsgIHBhZ2UgYm91bmRhcnkKLSAgICAgICAgICAgICAqLwotICAgICAgICAgICAgdG1wID0gKHVuc2lnbmVkIGNoYXIgKikoKCh1bnNpZ25lZClwYmFzZSArIGxlbiArIFBBR0VfU0laRSAtIDEpICYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh+UEFHRV9NQVNLKSk7Ci0gICAgICAgICAgICBpZiAodG1wIDwgKGJhc2UgKyBwaGRyLT5wX3ZhZGRyICsgcGhkci0+cF9tZW1zeikpIHsKLSAgICAgICAgICAgICAgICBleHRyYV9sZW4gPSBiYXNlICsgcGhkci0+cF92YWRkciArIHBoZHItPnBfbWVtc3ogLSB0bXA7Ci0gICAgICAgICAgICAgICAgVFJBQ0UoIlsgJTVkIC0gTmVlZCB0byBleHRlbmQgc2VnbWVudCBmcm9tICclcycgQCAweCUwOHggIgotICAgICAgICAgICAgICAgICAgICAgICIoMHglMDh4KSBdXG4iLCBwaWQsIHNpLT5uYW1lLCAodW5zaWduZWQpdG1wLCBleHRyYV9sZW4pOwotICAgICAgICAgICAgICAgIC8qIG1hcCBpbiB0aGUgZXh0cmEgcGFnZShzKSBhcyBhbm9ueW1vdXMgaW50byB0aGUgcmFuZ2UuCi0gICAgICAgICAgICAgICAgICogVGhpcyBpcyBwcm9iYWJseSBub3QgbmVjZXNzYXJ5IGFzIHdlIGFscmVhZHkgbWFwcGVkIGluCi0gICAgICAgICAgICAgICAgICogdGhlIGVudGlyZSByZWdpb24gcHJldmlvdXNseSwgYnV0IHdlIGp1c3Qgd2FudCB0byBiZQotICAgICAgICAgICAgICAgICAqIHN1cmUuIFRoaXMgd2lsbCBhbHNvIHNldCB0aGUgcmlnaHQgZmxhZ3Mgb24gdGhlIHJlZ2lvbgotICAgICAgICAgICAgICAgICAqICh0aG91Z2ggd2UgY2FuIHByb2JhYmx5IGFjY29tcGxpc2ggdGhlIHNhbWUgdGhpbmcgd2l0aAotICAgICAgICAgICAgICAgICAqIG1wcm90ZWN0KS4KLSAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICBleHRyYV9iYXNlID0gbW1hcCgodm9pZCAqKXRtcCwgZXh0cmFfbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBGTEFHU19UT19QUk9UKHBoZHItPnBfZmxhZ3MpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1BUF9QUklWQVRFIHwgTUFQX0ZJWEVEIHwgTUFQX0FOT05ZTU9VUywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMSwgMCk7Ci0gICAgICAgICAgICAgICAgaWYgKGV4dHJhX2Jhc2UgPT0gTUFQX0ZBSUxFRCkgewotICAgICAgICAgICAgICAgICAgICBETF9FUlIoIlsgJTVkIC0gZmFpbGVkIHRvIGV4dGVuZCBzZWdtZW50IGZyb20gJyVzJyBAIDB4JTA4eCIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICIgKDB4JTA4eCkgXSIsIHBpZCwgc2ktPm5hbWUsICh1bnNpZ25lZCl0bXAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhX2xlbik7Ci0gICAgICAgICAgICAgICAgICAgIGdvdG8gZmFpbDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgLyogVE9ETzogQ2hlY2sgaWYgd2UgbmVlZCB0byBtZW1zZXQtMCB0aGlzIHJlZ2lvbi4KLSAgICAgICAgICAgICAgICAgKiBBbm9ueW1vdXMgbWFwcGluZ3MgYXJlIHplcm8tZmlsbGVkIGNvcHktb24td3JpdGVzLCBzbyB3ZQotICAgICAgICAgICAgICAgICAqIHNob3VsZG4ndCBuZWVkIHRvLiAqLwotICAgICAgICAgICAgICAgIFRSQUNFKCJbICU1ZCAtIFNlZ21lbnQgZnJvbSAnJXMnIGV4dGVuZGVkIEAgMHglMDh4ICIKLSAgICAgICAgICAgICAgICAgICAgICAiKDB4JTA4eClcbiIsIHBpZCwgc2ktPm5hbWUsICh1bnNpZ25lZClleHRyYV9iYXNlLAotICAgICAgICAgICAgICAgICAgICAgIGV4dHJhX2xlbik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAvKiBzZXQgdGhlIGxlbiBoZXJlIHRvIHNob3cgdGhlIGZ1bGwgZXh0ZW50IG9mIHRoZSBzZWdtZW50IHdlCi0gICAgICAgICAgICAgKiBqdXN0IGxvYWRlZCwgbW9zdGx5IGZvciBkZWJ1Z2dpbmcgKi8KLSAgICAgICAgICAgIGxlbiA9ICgoKHVuc2lnbmVkKWJhc2UgKyBwaGRyLT5wX3ZhZGRyICsgcGhkci0+cF9tZW1zeiArCi0gICAgICAgICAgICAgICAgICAgIFBBR0VfU0laRSAtIDEpICYgKH5QQUdFX01BU0spKSAtICh1bnNpZ25lZClwYmFzZTsKLSAgICAgICAgICAgIFRSQUNFKCJbICU1ZCAtIFN1Y2Nlc3NmdWxseSBsb2FkZWQgc2VnbWVudCBmcm9tICclcycgQCAweCUwOHggIgotICAgICAgICAgICAgICAgICAgIigweCUwOHgpLiBwX3ZhZGRyPTB4JTA4eCBwX29mZnNldD0weCUwOHhcbiIsIHBpZCwgc2ktPm5hbWUsCi0gICAgICAgICAgICAgICAgICAodW5zaWduZWQpcGJhc2UsIGxlbiwgcGhkci0+cF92YWRkciwgcGhkci0+cF9vZmZzZXQpOwotICAgICAgICAgICAgdG90YWxfc3ogKz0gbGVuOwotICAgICAgICAgICAgLyogTWFrZSB0aGUgc2VjdGlvbiB3cml0YWJsZSBqdXN0IGluIGNhc2Ugd2UnbGwgaGF2ZSB0byB3cml0ZSB0bwotICAgICAgICAgICAgICogaXQgZHVyaW5nIHJlbG9jYXRpb24gKGkuZS4gdGV4dCBzZWdtZW50KS4gSG93ZXZlciwgd2Ugd2lsbAotICAgICAgICAgICAgICogcmVtZW1iZXIgd2hhdCByYW5nZSBvZiBhZGRyZXNzZXMgc2hvdWxkIGJlIHdyaXRlIHByb3RlY3RlZC4KLSAgICAgICAgICAgICAqCi0gICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGlmICghKHBoZHItPnBfZmxhZ3MgJiBQRl9XKSkgewotICAgICAgICAgICAgICAgIGlmICgodW5zaWduZWQpcGJhc2UgPCBzaS0+d3Jwcm90ZWN0X3N0YXJ0KQotICAgICAgICAgICAgICAgICAgICBzaS0+d3Jwcm90ZWN0X3N0YXJ0ID0gKHVuc2lnbmVkKXBiYXNlOwotICAgICAgICAgICAgICAgIGlmICgoKHVuc2lnbmVkKXBiYXNlICsgbGVuKSA+IHNpLT53cnByb3RlY3RfZW5kKQotICAgICAgICAgICAgICAgICAgICBzaS0+d3Jwcm90ZWN0X2VuZCA9ICh1bnNpZ25lZClwYmFzZSArIGxlbjsKLSAgICAgICAgICAgICAgICBtcHJvdGVjdChwYmFzZSwgbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgIFBGTEFHU19UT19QUk9UKHBoZHItPnBfZmxhZ3MpIHwgUFJPVF9XUklURSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAocGhkci0+cF90eXBlID09IFBUX0RZTkFNSUMpIHsKLSAgICAgICAgICAgIERFQlVHX0RVTVBfUEhEUihwaGRyLCAiUFRfRFlOQU1JQyIsIHBpZCk7Ci0gICAgICAgICAgICAvKiB0aGlzIHNlZ21lbnQgY29udGFpbnMgdGhlIGR5bmFtaWMgbGlua2luZyBpbmZvcm1hdGlvbiAqLwotICAgICAgICAgICAgc2ktPmR5bmFtaWMgPSAodW5zaWduZWQgKikoYmFzZSArIHBoZHItPnBfdmFkZHIpOwotICAgICAgICB9IGVsc2UgewotI2lmZGVmIEFORFJPSURfQVJNX0xJTktFUgotICAgICAgICAgICAgaWYgKHBoZHItPnBfdHlwZSA9PSBQVF9BUk1fRVhJRFgpIHsKLSAgICAgICAgICAgICAgICBERUJVR19EVU1QX1BIRFIocGhkciwgIlBUX0FSTV9FWElEWCIsIHBpZCk7Ci0gICAgICAgICAgICAgICAgLyogZXhpZHggZW50cmllcyAodXNlZCBmb3Igc3RhY2sgdW53aW5kaW5nKSBhcmUgOCBieXRlcyBlYWNoLgotICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgICAgIHNpLT5BUk1fZXhpZHggPSAodW5zaWduZWQgKilwaGRyLT5wX3ZhZGRyOwotICAgICAgICAgICAgICAgIHNpLT5BUk1fZXhpZHhfY291bnQgPSBwaGRyLT5wX21lbXN6IC8gODsKLSAgICAgICAgICAgIH0KLSNlbmRpZgotICAgICAgICB9Ci0KLSAgICB9Ci0KLSAgICAvKiBTYW5pdHkgY2hlY2sgKi8KLSAgICBpZiAodG90YWxfc3ogPiBzaS0+c2l6ZSkgewotICAgICAgICBETF9FUlIoIiU1ZCAtIFRvdGFsIGxlbmd0aCAoMHglMDh4KSBvZiBtYXBwZWQgc2VnbWVudHMgZnJvbSAnJXMnIGlzICIKLSAgICAgICAgICAgICAgImdyZWF0ZXIgdGhhbiB3aGF0IHdhcyBhbGxvY2F0ZWQgKDB4JTA4eCkuIFRISVMgSVMgQkFEISIsCi0gICAgICAgICAgICAgIHBpZCwgdG90YWxfc3osIHNpLT5uYW1lLCBzaS0+c2l6ZSk7Ci0gICAgICAgIGdvdG8gZmFpbDsKLSAgICB9Ci0KLSAgICBUUkFDRSgiWyAlNWQgLSBGaW5pc2ggbG9hZGluZyBzZWdtZW50cyBmb3IgJyVzJyBAIDB4JTA4eC4gIgotICAgICAgICAgICJUb3RhbCBtZW1vcnkgZm9vdHByaW50OiAweCUwOHggYnl0ZXMgXVxuIiwgcGlkLCBzaS0+bmFtZSwKLSAgICAgICAgICAodW5zaWduZWQpc2ktPmJhc2UsIHNpLT5zaXplKTsKLSAgICByZXR1cm4gMDsKLQotZmFpbDoKLSAgICAvKiBXZSBjYW4ganVzdCBibGluZGx5IHVubWFwIHRoZSBlbnRpcmUgcmVnaW9uIGV2ZW4gdGhvdWdoIHNvbWUgdGhpbmdzCi0gICAgICogd2VyZSBtYXBwZWQgaW4gb3JpZ2luYWxseSB3aXRoIGFub255bW91cyBhbmQgb3RoZXJzIGNvdWxkIGhhdmUgYmVlbgotICAgICAqIGJlZW4gbWFwcGVkIGluIGZyb20gdGhlIGZpbGUgYmVmb3JlIHdlIGZhaWxlZC4gVGhlIGtlcm5lbCB3aWxsIHVubWFwCi0gICAgICogYWxsIHRoZSBwYWdlcyBpbiB0aGUgcmFuZ2UsIGlycmVzcGVjdGl2ZSBvZiBob3cgdGhleSBnb3QgdGhlcmUuCi0gICAgICovCi0gICAgbXVubWFwKCh2b2lkICopc2ktPmJhc2UsIHNpLT5zaXplKTsKLSAgICBzaS0+ZmxhZ3MgfD0gRkxBR19FUlJPUjsKLSAgICByZXR1cm4gLTE7Ci19Ci0KLS8qIFRPRE86IEltcGxlbWVudCB0aGlzIHRvIHRha2UgY2FyZSBvZiB0aGUgZmFjdCB0aGF0IEFuZHJvaWQgQVJNCi0gKiBFTEYgb2JqZWN0cyBzaG92ZSBldmVyeXRoaW5nIGludG8gYSBzaW5nbGUgbG9hZGFibGUgc2VnbWVudCB0aGF0IGhhcyB0aGUKLSAqIHdyaXRlIGJpdCBzZXQuIHdyX29mZnNldCBpcyB0aGVuIHVzZWQgdG8gc2V0IG5vbi0oZGF0YXxic3MpIHBhZ2VzIHRvIGJlCi0gKiBub24td3JpdGFibGUuCi0gKi8KLSNpZiAwCi1zdGF0aWMgdW5zaWduZWQKLWdldF93cl9vZmZzZXQoaW50IGZkLCBjb25zdCBjaGFyICpuYW1lLCBFbGYzMl9FaGRyICplaGRyKQotewotICAgIEVsZjMyX1NoZHIgKnNoZHJfc3RhcnQ7Ci0gICAgRWxmMzJfU2hkciAqc2hkcjsKLSAgICBpbnQgc2hkcl9zeiA9IGVoZHItPmVfc2hudW0gKiBzaXplb2YoRWxmMzJfU2hkcik7Ci0gICAgaW50IGNudDsKLSAgICB1bnNpZ25lZCB3cl9vZmZzZXQgPSAweGZmZmZmZmZmOwotCi0gICAgc2hkcl9zdGFydCA9IG1tYXAoMCwgc2hkcl9zeiwgUFJPVF9SRUFELCBNQVBfUFJJVkFURSwgZmQsCi0gICAgICAgICAgICAgICAgICAgICAgZWhkci0+ZV9zaG9mZiAmICh+UEFHRV9NQVNLKSk7Ci0gICAgaWYgKHNoZHJfc3RhcnQgPT0gTUFQX0ZBSUxFRCkgewotICAgICAgICBXQVJOKCIlNWQgLSBDb3VsZCBub3QgcmVhZCBzZWN0aW9uIGhlYWRlciBpbmZvIGZyb20gJyVzJy4gV2lsbCBub3QgIgotICAgICAgICAgICAgICJub3QgYmUgYWJsZSB0byBkZXRlcm1pbmUgd3JpdGUtcHJvdGVjdCBvZmZzZXQuXG4iLCBwaWQsIG5hbWUpOwotICAgICAgICByZXR1cm4gKHVuc2lnbmVkKS0xOwotICAgIH0KLQotICAgIGZvcihjbnQgPSAwLCBzaGRyID0gc2hkcl9zdGFydDsgY250IDwgZWhkci0+ZV9zaG51bTsgKytjbnQsICsrc2hkcikgewotICAgICAgICBpZiAoKHNoZHItPnNoX3R5cGUgIT0gU0hUX05VTEwpICYmIChzaGRyLT5zaF9mbGFncyAmIFNIRl9XUklURSkgJiYKLSAgICAgICAgICAgIChzaGRyLT5zaF9hZGRyIDwgd3Jfb2Zmc2V0KSkgewotICAgICAgICAgICAgd3Jfb2Zmc2V0ID0gc2hkci0+c2hfYWRkcjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIG11bm1hcChzaGRyX3N0YXJ0LCBzaGRyX3N6KTsKLSAgICByZXR1cm4gd3Jfb2Zmc2V0OwotfQotI2VuZGlmCi0KLXN0YXRpYyBzb2luZm8gKgotbG9hZF9saWJyYXJ5KGNvbnN0IGNoYXIgKm5hbWUpCi17Ci0gICAgaW50IGZkID0gb3Blbl9saWJyYXJ5KG5hbWUpOwotICAgIGludCBjbnQ7Ci0gICAgdW5zaWduZWQgZXh0X3N6OwotICAgIHVuc2lnbmVkIHJlcV9iYXNlOwotICAgIGNvbnN0IGNoYXIgKmJuYW1lOwotICAgIHNvaW5mbyAqc2kgPSBOVUxMOwotICAgIEVsZjMyX0VoZHIgKmhkcjsKLQotICAgIGlmKGZkID09IC0xKSB7Ci0gICAgICAgIERMX0VSUigiTGlicmFyeSAnJXMnIG5vdCBmb3VuZCIsIG5hbWUpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICAvKiBXZSBoYXZlIHRvIHJlYWQgdGhlIEVMRiBoZWFkZXIgdG8gZmlndXJlIG91dCB3aGF0IHRvIGRvIHdpdGggdGhpcyBpbWFnZQotICAgICAqLwotICAgIGlmIChsc2VlayhmZCwgMCwgU0VFS19TRVQpIDwgMCkgewotICAgICAgICBETF9FUlIoImxzZWVrKCkgZmFpbGVkISIpOwotICAgICAgICBnb3RvIGZhaWw7Ci0gICAgfQotCi0gICAgaWYgKChjbnQgPSByZWFkKGZkLCAmX19oZWFkZXJbMF0sIFBBR0VfU0laRSkpIDwgMCkgewotICAgICAgICBETF9FUlIoInJlYWQoKSBmYWlsZWQhIik7Ci0gICAgICAgIGdvdG8gZmFpbDsKLSAgICB9Ci0KLSAgICAvKiBQYXJzZSB0aGUgRUxGIGhlYWRlciBhbmQgZ2V0IHRoZSBzaXplIG9mIHRoZSBtZW1vcnkgZm9vdHByaW50IGZvcgotICAgICAqIHRoZSBsaWJyYXJ5ICovCi0gICAgcmVxX2Jhc2UgPSBnZXRfbGliX2V4dGVudHMoZmQsIG5hbWUsICZfX2hlYWRlclswXSwgJmV4dF9zeik7Ci0gICAgaWYgKHJlcV9iYXNlID09ICh1bnNpZ25lZCktMSkKLSAgICAgICAgZ290byBmYWlsOwotICAgIFRSQUNFKCJbICU1ZCAtICclcycgKCVzKSB3YW50cyBiYXNlPTB4JTA4eCBzej0weCUwOHggXVxuIiwgcGlkLCBuYW1lLAotICAgICAgICAgIChyZXFfYmFzZSA/ICJwcmVsaW5rZWQiIDogIm5vdCBwcmUtbGlua2VkIiksIHJlcV9iYXNlLCBleHRfc3opOwotCi0gICAgLyogTm93IGNvbmZpZ3VyZSB0aGUgc29pbmZvIHN0cnVjdCB3aGVyZSB3ZSdsbCBzdG9yZSBhbGwgb2Ygb3VyIGRhdGEKLSAgICAgKiBmb3IgdGhlIEVMRiBvYmplY3QuIElmIHRoZSBsb2FkaW5nIGZhaWxzLCB3ZSB3YXN0ZSB0aGUgZW50cnksIGJ1dAotICAgICAqIHNhbWUgdGhpbmcgd291bGQgaGFwcGVuIGlmIHdlIGZhaWxlZCBkdXJpbmcgbGlua2luZy4gQ29uZmlndXJpbmcgdGhlCi0gICAgICogc29pbmZvIHN0cnVjdCBoZXJlIGlzIGEgbG90IG1vcmUgY29udmVuaWVudC4KLSAgICAgKi8KLSAgICBibmFtZSA9IHN0cnJjaHIobmFtZSwgJy8nKTsKLSAgICBzaSA9IGFsbG9jX2luZm8oYm5hbWUgPyBibmFtZSArIDEgOiBuYW1lKTsKLSAgICBpZiAoc2kgPT0gTlVMTCkKLSAgICAgICAgZ290byBmYWlsOwotCi0gICAgLyogQ2FydmUgb3V0IGEgY2h1bmsgb2YgbWVtb3J5IHdoZXJlIHdlIHdpbGwgbWFwIGluIHRoZSBpbmRpdmlkdWFsCi0gICAgICogc2VnbWVudHMgKi8KLSAgICBzaS0+YmFzZSA9IHJlcV9iYXNlOwotICAgIHNpLT5zaXplID0gZXh0X3N6OwotICAgIHNpLT5mbGFncyA9IDA7Ci0gICAgc2ktPmVudHJ5ID0gMDsKLSAgICBzaS0+ZHluYW1pYyA9ICh1bnNpZ25lZCAqKS0xOwotICAgIGlmIChhbGxvY19tZW1fcmVnaW9uKHNpKSA8IDApCi0gICAgICAgIGdvdG8gZmFpbDsKLQotICAgIFRSQUNFKCJbICU1ZCBhbGxvY2F0ZWQgbWVtb3J5IGZvciAlcyBAICVwICgweCUwOHgpIF1cbiIsCi0gICAgICAgICAgcGlkLCBuYW1lLCAodm9pZCAqKXNpLT5iYXNlLCAodW5zaWduZWQpIGV4dF9zeik7Ci0KLSAgICAvKiBOb3cgYWN0dWFsbHkgbG9hZCB0aGUgbGlicmFyeSdzIHNlZ21lbnRzIGludG8gcmlnaHQgcGxhY2VzIGluIG1lbW9yeSAqLwotICAgIGlmIChsb2FkX3NlZ21lbnRzKGZkLCAmX19oZWFkZXJbMF0sIHNpKSA8IDApIHsKLSAgICAgICAgZ290byBmYWlsOwotICAgIH0KLQotICAgIC8qIHRoaXMgbWlnaHQgbm90IGJlIHJpZ2h0LiBUZWNobmljYWxseSwgd2UgZG9uJ3QgZXZlbiBuZWVkIHRoaXMgaW5mbwotICAgICAqIG9uY2Ugd2UgZ28gdGhyb3VnaCAnbG9hZF9zZWdtZW50cycuICovCi0gICAgaGRyID0gKEVsZjMyX0VoZHIgKilzaS0+YmFzZTsKLSAgICBzaS0+cGhkciA9IChFbGYzMl9QaGRyICopKCh1bnNpZ25lZCBjaGFyICopc2ktPmJhc2UgKyBoZHItPmVfcGhvZmYpOwotICAgIHNpLT5waG51bSA9IGhkci0+ZV9waG51bTsKLSAgICAvKiovCi0KLSAgICBjbG9zZShmZCk7Ci0gICAgcmV0dXJuIHNpOwotCi1mYWlsOgotICAgIGlmIChzaSkgZnJlZV9pbmZvKHNpKTsKLSAgICBjbG9zZShmZCk7Ci0gICAgcmV0dXJuIE5VTEw7Ci19Ci0KLXN0YXRpYyBzb2luZm8gKgotaW5pdF9saWJyYXJ5KHNvaW5mbyAqc2kpCi17Ci0gICAgdW5zaWduZWQgd3Jfb2Zmc2V0ID0gMHhmZmZmZmZmZjsKLQotICAgIC8qIEF0IHRoaXMgcG9pbnQgd2Uga25vdyB0aGF0IHdoYXRldmVyIGlzIGxvYWRlZCBAIGJhc2UgaXMgYSB2YWxpZCBFTEYKLSAgICAgKiBzaGFyZWQgbGlicmFyeSB3aG9zZSBzZWdtZW50cyBhcmUgcHJvcGVybHkgbWFwcGVkIGluLiAqLwotICAgIFRSQUNFKCJbICU1ZCBpbml0X2xpYnJhcnkgYmFzZT0weCUwOHggc3o9MHglMDh4IG5hbWU9JyVzJykgXVxuIiwKLSAgICAgICAgICBwaWQsIHNpLT5iYXNlLCBzaS0+c2l6ZSwgc2ktPm5hbWUpOwotCi0gICAgaWYobGlua19pbWFnZShzaSwgd3Jfb2Zmc2V0KSkgewotICAgICAgICAgICAgLyogV2UgZmFpbGVkIHRvIGxpbmsuICBIb3dldmVyLCB3ZSBjYW4gb25seSByZXN0b3JlIGxpYmJhc2UKLSAgICAgICAgICAgICoqIGlmIG5vIGFkZGl0aW9uYWwgbGlicmFyaWVzIGhhdmUgbW92ZWQgaXQgc2luY2Ugd2UgdXBkYXRlZCBpdC4KLSAgICAgICAgICAgICovCi0gICAgICAgIG11bm1hcCgodm9pZCAqKXNpLT5iYXNlLCBzaS0+c2l6ZSk7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQotICAgIHJldHVybiBzaTsKLX0KLQotc29pbmZvICpmaW5kX2xpYnJhcnkoY29uc3QgY2hhciAqbmFtZSkKLXsKLSAgICBzb2luZm8gKnNpOwotICAgIGNvbnN0IGNoYXIgKmJuYW1lOwotCi0jaWYgQUxMT1dfU1lNQk9MU19GUk9NX01BSU4KLSAgICBpZiAobmFtZSA9PSBOVUxMKQotICAgICAgICByZXR1cm4gc29tYWluOwotI2Vsc2UKLSAgICBpZiAobmFtZSA9PSBOVUxMKQotICAgICAgICByZXR1cm4gTlVMTDsKLSNlbmRpZgotCi0gICAgYm5hbWUgPSBzdHJyY2hyKG5hbWUsICcvJyk7Ci0gICAgYm5hbWUgPSBibmFtZSA/IGJuYW1lICsgMSA6IG5hbWU7Ci0KLSAgICBmb3Ioc2kgPSBzb2xpc3Q7IHNpICE9IDA7IHNpID0gc2ktPm5leHQpewotICAgICAgICBpZighc3RyY21wKGJuYW1lLCBzaS0+bmFtZSkpIHsKLSAgICAgICAgICAgIGlmKHNpLT5mbGFncyAmIEZMQUdfRVJST1IpIHsKLSAgICAgICAgICAgICAgICBETF9FUlIoIiU1ZCAnJXMnIGZhaWxlZCB0byBsb2FkIHByZXZpb3VzbHkiLCBwaWQsIGJuYW1lKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmKHNpLT5mbGFncyAmIEZMQUdfTElOS0VEKSByZXR1cm4gc2k7Ci0gICAgICAgICAgICBETF9FUlIoIk9PUFM6ICU1ZCByZWN1cnNpdmUgbGluayB0byAnJXMnIiwgcGlkLCBzaS0+bmFtZSk7Ci0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIFRSQUNFKCJbICU1ZCAnJXMnIGhhcyBub3QgYmVlbiBsb2FkZWQgeWV0LiAgTG9jYXRpbmcuLi5dXG4iLCBwaWQsIG5hbWUpOwotICAgIHNpID0gbG9hZF9saWJyYXJ5KG5hbWUpOwotICAgIGlmKHNpID09IE5VTEwpCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIHJldHVybiBpbml0X2xpYnJhcnkoc2kpOwotfQotCi0vKiBUT0RPOgotICogICBub3RpZnkgZ2RiIG9mIHVubG9hZAotICogICBmb3Igbm9uLXByZWxpbmtlZCBsaWJyYXJpZXMsIGZpbmQgYSB3YXkgdG8gZGVjcmVtZW50IGxpYmJhc2UKLSAqLwotc3RhdGljIHZvaWQgY2FsbF9kZXN0cnVjdG9ycyhzb2luZm8gKnNpKTsKLXVuc2lnbmVkIHVubG9hZF9saWJyYXJ5KHNvaW5mbyAqc2kpCi17Ci0gICAgdW5zaWduZWQgKmQ7Ci0gICAgaWYgKHNpLT5yZWZjb3VudCA9PSAxKSB7Ci0gICAgICAgIFRSQUNFKCIlNWQgdW5sb2FkaW5nICclcydcbiIsIHBpZCwgc2ktPm5hbWUpOwotICAgICAgICBjYWxsX2Rlc3RydWN0b3JzKHNpKTsKLQotICAgICAgICBmb3IoZCA9IHNpLT5keW5hbWljOyAqZDsgZCArPSAyKSB7Ci0gICAgICAgICAgICBpZihkWzBdID09IERUX05FRURFRCl7Ci0gICAgICAgICAgICAgICAgc29pbmZvICpsc2kgPSAoc29pbmZvICopZFsxXTsKLSAgICAgICAgICAgICAgICBkWzFdID0gMDsKLSAgICAgICAgICAgICAgICBpZiAodmFsaWRhdGVfc29pbmZvKGxzaSkpIHsKLSAgICAgICAgICAgICAgICAgICAgVFJBQ0UoIiU1ZCAlcyBuZWVkcyB0byB1bmxvYWQgJXNcbiIsIHBpZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgc2ktPm5hbWUsIGxzaS0+bmFtZSk7Ci0gICAgICAgICAgICAgICAgICAgIHVubG9hZF9saWJyYXJ5KGxzaSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgRExfRVJSKCIlNWQgJXM6IGNvdWxkIG5vdCB1bmxvYWQgZGVwZW5kZW50IGxpYnJhcnkiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgcGlkLCBzaS0+bmFtZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBtdW5tYXAoKGNoYXIgKilzaS0+YmFzZSwgc2ktPnNpemUpOwotICAgICAgICBub3RpZnlfZ2RiX29mX3VubG9hZChzaSk7Ci0gICAgICAgIGZyZWVfaW5mbyhzaSk7Ci0gICAgICAgIHNpLT5yZWZjb3VudCA9IDA7Ci0gICAgfQotICAgIGVsc2UgewotICAgICAgICBzaS0+cmVmY291bnQtLTsKLSAgICAgICAgUFJJTlQoIiU1ZCBub3QgdW5sb2FkaW5nICclcycsIGRlY3JlbWVudGluZyByZWZjb3VudCB0byAlZFxuIiwKLSAgICAgICAgICAgICAgcGlkLCBzaS0+bmFtZSwgc2ktPnJlZmNvdW50KTsKLSAgICB9Ci0gICAgcmV0dXJuIHNpLT5yZWZjb3VudDsKLX0KLQotLyogVE9ETzogZG9uJ3QgdXNlIHVuc2lnbmVkIGZvciBhZGRycyBiZWxvdy4gSXQgd29ya3MsIGJ1dCBpcyBub3QKLSAqIGlkZWFsLiBUaGV5IHNob3VsZCBwcm9iYWJseSBiZSBlaXRoZXIgdWludDMyX3QsIEVsZjMyX0FkZHIsIG9yIHVuc2lnbmVkCi0gKiBsb25nLgotICovCi1zdGF0aWMgaW50IHJlbG9jX2xpYnJhcnkoc29pbmZvICpzaSwgRWxmMzJfUmVsICpyZWwsIHVuc2lnbmVkIGNvdW50KQotewotICAgIEVsZjMyX1N5bSAqc3ltdGFiID0gc2ktPnN5bXRhYjsKLSAgICBjb25zdCBjaGFyICpzdHJ0YWIgPSBzaS0+c3RydGFiOwotICAgIEVsZjMyX1N5bSAqczsKLSAgICB1bnNpZ25lZCBiYXNlOwotICAgIEVsZjMyX1JlbCAqc3RhcnQgPSByZWw7Ci0gICAgdW5zaWduZWQgaWR4OwotCi0gICAgZm9yIChpZHggPSAwOyBpZHggPCBjb3VudDsgKytpZHgpIHsKLSAgICAgICAgdW5zaWduZWQgdHlwZSA9IEVMRjMyX1JfVFlQRShyZWwtPnJfaW5mbyk7Ci0gICAgICAgIHVuc2lnbmVkIHN5bSA9IEVMRjMyX1JfU1lNKHJlbC0+cl9pbmZvKTsKLSAgICAgICAgdW5zaWduZWQgcmVsb2MgPSAodW5zaWduZWQpKHJlbC0+cl9vZmZzZXQgKyBzaS0+YmFzZSk7Ci0gICAgICAgIHVuc2lnbmVkIHN5bV9hZGRyID0gMDsKLSAgICAgICAgY2hhciAqc3ltX25hbWUgPSBOVUxMOwotCi0gICAgICAgIERFQlVHKCIlNWQgUHJvY2Vzc2luZyAnJXMnIHJlbG9jYXRpb24gYXQgaW5kZXggJWRcbiIsIHBpZCwKLSAgICAgICAgICAgICAgc2ktPm5hbWUsIGlkeCk7Ci0gICAgICAgIGlmKHN5bSAhPSAwKSB7Ci0gICAgICAgICAgICBzeW1fbmFtZSA9IChjaGFyICopKHN0cnRhYiArIHN5bXRhYltzeW1dLnN0X25hbWUpOwotICAgICAgICAgICAgcyA9IF9kb19sb29rdXAoc2ksIHN5bV9uYW1lLCAmYmFzZSk7Ci0gICAgICAgICAgICBpZihzID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICAvKiBXZSBvbmx5IGFsbG93IGFuIHVuZGVmaW5lZCBzeW1ib2wgaWYgdGhpcyBpcyBhIHdlYWsKLSAgICAgICAgICAgICAgICAgICByZWZlcmVuY2UuLiAgICovCi0gICAgICAgICAgICAgICAgcyA9ICZzeW10YWJbc3ltXTsKLSAgICAgICAgICAgICAgICBpZiAoRUxGMzJfU1RfQklORChzLT5zdF9pbmZvKSAhPSBTVEJfV0VBSykgewotICAgICAgICAgICAgICAgICAgICBETF9FUlIoIiU1ZCBjYW5ub3QgbG9jYXRlICclcycuLi5cbiIsIHBpZCwgc3ltX25hbWUpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLyogSUhJMDA0NEMgQUFFTEYgNC41LjEuMToKLQotICAgICAgICAgICAgICAgICAgIExpYnJhcmllcyBhcmUgbm90IHNlYXJjaGVkIHRvIHJlc29sdmUgd2VhayByZWZlcmVuY2VzLgotICAgICAgICAgICAgICAgICAgIEl0IGlzIG5vdCBhbiBlcnJvciBmb3IgYSB3ZWFrIHJlZmVyZW5jZSB0byByZW1haW4KLSAgICAgICAgICAgICAgICAgICB1bnNhdGlzZmllZC4KLQotICAgICAgICAgICAgICAgICAgIER1cmluZyBsaW5raW5nLCB0aGUgdmFsdWUgb2YgYW4gdW5kZWZpbmVkIHdlYWsgcmVmZXJlbmNlIGlzOgotICAgICAgICAgICAgICAgICAgIC0gWmVybyBpZiB0aGUgcmVsb2NhdGlvbiB0eXBlIGlzIGFic29sdXRlCi0gICAgICAgICAgICAgICAgICAgLSBUaGUgYWRkcmVzcyBvZiB0aGUgcGxhY2UgaWYgdGhlIHJlbG9jYXRpb24gaXMgcGMtcmVsYXRpdmUKLSAgICAgICAgICAgICAgICAgICAtIFRoZSBhZGRyZXNzIG9mIG5vbWluaWFsIGJhc2UgYWRkcmVzcyBpZiB0aGUgcmVsb2NhdGlvbgotICAgICAgICAgICAgICAgICAgICAgdHlwZSBpcyBiYXNlLXJlbGF0aXZlLgotICAgICAgICAgICAgICAgICAgKi8KLQotICAgICAgICAgICAgICAgIHN3aXRjaCAodHlwZSkgewotI2lmIGRlZmluZWQoQU5EUk9JRF9BUk1fTElOS0VSKQotICAgICAgICAgICAgICAgIGNhc2UgUl9BUk1fSlVNUF9TTE9UOgotICAgICAgICAgICAgICAgIGNhc2UgUl9BUk1fR0xPQl9EQVQ6Ci0gICAgICAgICAgICAgICAgY2FzZSBSX0FSTV9BQlMzMjoKLSAgICAgICAgICAgICAgICBjYXNlIFJfQVJNX1JFTEFUSVZFOiAgICAvKiBEb24ndCBjYXJlLiAqLwotICAgICAgICAgICAgICAgIGNhc2UgUl9BUk1fTk9ORTogICAgICAgIC8qIERvbid0IGNhcmUuICovCi0jZWxpZiBkZWZpbmVkKEFORFJPSURfWDg2X0xJTktFUikKLSAgICAgICAgICAgICAgICBjYXNlIFJfMzg2X0pVTVBfU0xPVDoKLSAgICAgICAgICAgICAgICBjYXNlIFJfMzg2X0dMT0JfREFUOgotICAgICAgICAgICAgICAgIGNhc2UgUl8zODZfMzI6Ci0gICAgICAgICAgICAgICAgY2FzZSBSXzM4Nl9SRUxBVElWRTogICAgLyogRG9udCcgY2FyZS4gKi8KLSNlbmRpZiAvKiBBTkRST0lEXypfTElOS0VSICovCi0gICAgICAgICAgICAgICAgICAgIC8qIHN5bV9hZGRyIHdhcyBpbml0aWFsaXplZCB0byBiZSB6ZXJvIGFib3ZlIG9yIHJlbG9jYXRpb24KLSAgICAgICAgICAgICAgICAgICAgICAgY29kZSBiZWxvdyBkb2VzIG5vdCBjYXJlIGFib3V0IHZhbHVlIG9mIHN5bV9hZGRyLgotICAgICAgICAgICAgICAgICAgICAgICBObyBuZWVkIHRvIGRvIGFueXRoaW5nLiAgKi8KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSNpZiBkZWZpbmVkKEFORFJPSURfWDg2X0xJTktFUikKLSAgICAgICAgICAgICAgICBjYXNlIFJfMzg2X1BDMzI6Ci0gICAgICAgICAgICAgICAgICAgIHN5bV9hZGRyID0gcmVsb2M7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotI2VuZGlmIC8qIEFORFJPSURfWDg2X0xJTktFUiAqLwotCi0jaWYgZGVmaW5lZChBTkRST0lEX0FSTV9MSU5LRVIpCi0gICAgICAgICAgICAgICAgY2FzZSBSX0FSTV9DT1BZOgotICAgICAgICAgICAgICAgICAgICAvKiBGYWxsIHRocm91Z2guICBDYW4ndCByZWFsbHkgY29weSBpZiB3ZWFrIHN5bWJvbCBpcwotICAgICAgICAgICAgICAgICAgICAgICBub3QgZm91bmQgaW4gcnVuLXRpbWUuICAqLwotI2VuZGlmIC8qIEFORFJPSURfQVJNX0xJTktFUiAqLwotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIERMX0VSUigiJTVkIHVua25vd24gd2VhayByZWxvYyB0eXBlICVkIEAgJXAgKCVkKVxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpZCwgdHlwZSwgcmVsLCAoaW50KSAocmVsIC0gc3RhcnQpKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgLyogV2UgZ290IGEgZGVmaW5pdGlvbi4gICovCi0jaWYgMAotICAgICAgICAgICAgaWYoKGJhc2UgPT0gMCkgJiYgKHNpLT5iYXNlICE9IDApKXsKLSAgICAgICAgICAgICAgICAgICAgLyogbGlua2luZyBmcm9tIGxpYnJhcmllcyB0byBtYWluIGltYWdlIGlzIGJhZCAqLwotICAgICAgICAgICAgICAgIERMX0VSUigiJTVkIGNhbm5vdCBsb2NhdGUgJyVzJy4uLiIsCi0gICAgICAgICAgICAgICAgICAgICAgIHBpZCwgc3RydGFiICsgc3ltdGFiW3N5bV0uc3RfbmFtZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgfQotI2VuZGlmCi0gICAgICAgICAgICAgICAgc3ltX2FkZHIgPSAodW5zaWduZWQpKHMtPnN0X3ZhbHVlICsgYmFzZSk7Ci0JICAgIH0KLSAgICAgICAgICAgIENPVU5UX1JFTE9DKFJFTE9DX1NZTUJPTCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBzID0gTlVMTDsKLSAgICAgICAgfQotCi0vKiBUT0RPOiBUaGlzIGlzIHVnbHkuIFNwbGl0IHVwIHRoZSByZWxvY2F0aW9ucyBieSBhcmNoIGludG8KLSAqIGRpZmZlcmVudCBmaWxlcy4KLSAqLwotICAgICAgICBzd2l0Y2godHlwZSl7Ci0jaWYgZGVmaW5lZChBTkRST0lEX0FSTV9MSU5LRVIpCi0gICAgICAgIGNhc2UgUl9BUk1fSlVNUF9TTE9UOgotICAgICAgICAgICAgQ09VTlRfUkVMT0MoUkVMT0NfQUJTT0xVVEUpOwotICAgICAgICAgICAgTUFSSyhyZWwtPnJfb2Zmc2V0KTsKLSAgICAgICAgICAgIFRSQUNFX1RZUEUoUkVMTywgIiU1ZCBSRUxPIEpNUF9TTE9UICUwOHggPC0gJTA4eCAlc1xuIiwgcGlkLAotICAgICAgICAgICAgICAgICAgICAgICByZWxvYywgc3ltX2FkZHIsIHN5bV9uYW1lKTsKLSAgICAgICAgICAgICooKHVuc2lnbmVkKilyZWxvYykgPSBzeW1fYWRkcjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFJfQVJNX0dMT0JfREFUOgotICAgICAgICAgICAgQ09VTlRfUkVMT0MoUkVMT0NfQUJTT0xVVEUpOwotICAgICAgICAgICAgTUFSSyhyZWwtPnJfb2Zmc2V0KTsKLSAgICAgICAgICAgIFRSQUNFX1RZUEUoUkVMTywgIiU1ZCBSRUxPIEdMT0JfREFUICUwOHggPC0gJTA4eCAlc1xuIiwgcGlkLAotICAgICAgICAgICAgICAgICAgICAgICByZWxvYywgc3ltX2FkZHIsIHN5bV9uYW1lKTsKLSAgICAgICAgICAgICooKHVuc2lnbmVkKilyZWxvYykgPSBzeW1fYWRkcjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFJfQVJNX0FCUzMyOgotICAgICAgICAgICAgQ09VTlRfUkVMT0MoUkVMT0NfQUJTT0xVVEUpOwotICAgICAgICAgICAgTUFSSyhyZWwtPnJfb2Zmc2V0KTsKLSAgICAgICAgICAgIFRSQUNFX1RZUEUoUkVMTywgIiU1ZCBSRUxPIEFCUyAlMDh4IDwtICUwOHggJXNcbiIsIHBpZCwKLSAgICAgICAgICAgICAgICAgICAgICAgcmVsb2MsIHN5bV9hZGRyLCBzeW1fbmFtZSk7Ci0gICAgICAgICAgICAqKCh1bnNpZ25lZCopcmVsb2MpICs9IHN5bV9hZGRyOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUl9BUk1fUkVMMzI6Ci0gICAgICAgICAgICBDT1VOVF9SRUxPQyhSRUxPQ19SRUxBVElWRSk7Ci0gICAgICAgICAgICBNQVJLKHJlbC0+cl9vZmZzZXQpOwotICAgICAgICAgICAgVFJBQ0VfVFlQRShSRUxPLCAiJTVkIFJFTE8gUkVMMzIgJTA4eCA8LSAlMDh4IC0gJTA4eCAlc1xuIiwgcGlkLAotICAgICAgICAgICAgICAgICAgICAgICByZWxvYywgc3ltX2FkZHIsIHJlbC0+cl9vZmZzZXQsIHN5bV9uYW1lKTsKLSAgICAgICAgICAgICooKHVuc2lnbmVkKilyZWxvYykgKz0gc3ltX2FkZHIgLSByZWwtPnJfb2Zmc2V0OwotICAgICAgICAgICAgYnJlYWs7Ci0jZWxpZiBkZWZpbmVkKEFORFJPSURfWDg2X0xJTktFUikKLSAgICAgICAgY2FzZSBSXzM4Nl9KVU1QX1NMT1Q6Ci0gICAgICAgICAgICBDT1VOVF9SRUxPQyhSRUxPQ19BQlNPTFVURSk7Ci0gICAgICAgICAgICBNQVJLKHJlbC0+cl9vZmZzZXQpOwotICAgICAgICAgICAgVFJBQ0VfVFlQRShSRUxPLCAiJTVkIFJFTE8gSk1QX1NMT1QgJTA4eCA8LSAlMDh4ICVzXG4iLCBwaWQsCi0gICAgICAgICAgICAgICAgICAgICAgIHJlbG9jLCBzeW1fYWRkciwgc3ltX25hbWUpOwotICAgICAgICAgICAgKigodW5zaWduZWQqKXJlbG9jKSA9IHN5bV9hZGRyOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUl8zODZfR0xPQl9EQVQ6Ci0gICAgICAgICAgICBDT1VOVF9SRUxPQyhSRUxPQ19BQlNPTFVURSk7Ci0gICAgICAgICAgICBNQVJLKHJlbC0+cl9vZmZzZXQpOwotICAgICAgICAgICAgVFJBQ0VfVFlQRShSRUxPLCAiJTVkIFJFTE8gR0xPQl9EQVQgJTA4eCA8LSAlMDh4ICVzXG4iLCBwaWQsCi0gICAgICAgICAgICAgICAgICAgICAgIHJlbG9jLCBzeW1fYWRkciwgc3ltX25hbWUpOwotICAgICAgICAgICAgKigodW5zaWduZWQqKXJlbG9jKSA9IHN5bV9hZGRyOwotICAgICAgICAgICAgYnJlYWs7Ci0jZW5kaWYgLyogQU5EUk9JRF8qX0xJTktFUiAqLwotCi0jaWYgZGVmaW5lZChBTkRST0lEX0FSTV9MSU5LRVIpCi0gICAgICAgIGNhc2UgUl9BUk1fUkVMQVRJVkU6Ci0jZWxpZiBkZWZpbmVkKEFORFJPSURfWDg2X0xJTktFUikKLSAgICAgICAgY2FzZSBSXzM4Nl9SRUxBVElWRToKLSNlbmRpZiAvKiBBTkRST0lEXypfTElOS0VSICovCi0gICAgICAgICAgICBDT1VOVF9SRUxPQyhSRUxPQ19SRUxBVElWRSk7Ci0gICAgICAgICAgICBNQVJLKHJlbC0+cl9vZmZzZXQpOwotICAgICAgICAgICAgaWYoc3ltKXsKLSAgICAgICAgICAgICAgICBETF9FUlIoIiU1ZCBvZGQgUkVMQVRJVkUgZm9ybS4uLiIsIHBpZCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgVFJBQ0VfVFlQRShSRUxPLCAiJTVkIFJFTE8gUkVMQVRJVkUgJTA4eCA8LSArJTA4eFxuIiwgcGlkLAotICAgICAgICAgICAgICAgICAgICAgICByZWxvYywgc2ktPmJhc2UpOwotICAgICAgICAgICAgKigodW5zaWduZWQqKXJlbG9jKSArPSBzaS0+YmFzZTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0jaWYgZGVmaW5lZChBTkRST0lEX1g4Nl9MSU5LRVIpCi0gICAgICAgIGNhc2UgUl8zODZfMzI6Ci0gICAgICAgICAgICBDT1VOVF9SRUxPQyhSRUxPQ19SRUxBVElWRSk7Ci0gICAgICAgICAgICBNQVJLKHJlbC0+cl9vZmZzZXQpOwotCi0gICAgICAgICAgICBUUkFDRV9UWVBFKFJFTE8sICIlNWQgUkVMTyBSXzM4Nl8zMiAlMDh4IDwtICslMDh4ICVzXG4iLCBwaWQsCi0gICAgICAgICAgICAgICAgICAgICAgIHJlbG9jLCBzeW1fYWRkciwgc3ltX25hbWUpOwotICAgICAgICAgICAgKigodW5zaWduZWQgKilyZWxvYykgKz0gKHVuc2lnbmVkKXN5bV9hZGRyOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBSXzM4Nl9QQzMyOgotICAgICAgICAgICAgQ09VTlRfUkVMT0MoUkVMT0NfUkVMQVRJVkUpOwotICAgICAgICAgICAgTUFSSyhyZWwtPnJfb2Zmc2V0KTsKLSAgICAgICAgICAgIFRSQUNFX1RZUEUoUkVMTywgIiU1ZCBSRUxPIFJfMzg2X1BDMzIgJTA4eCA8LSAiCi0gICAgICAgICAgICAgICAgICAgICAgICIrJTA4eCAoJTA4eCAtICUwOHgpICVzXG4iLCBwaWQsIHJlbG9jLAotICAgICAgICAgICAgICAgICAgICAgICAoc3ltX2FkZHIgLSByZWxvYyksIHN5bV9hZGRyLCByZWxvYywgc3ltX25hbWUpOwotICAgICAgICAgICAgKigodW5zaWduZWQgKilyZWxvYykgKz0gKHVuc2lnbmVkKShzeW1fYWRkciAtIHJlbG9jKTsKLSAgICAgICAgICAgIGJyZWFrOwotI2VuZGlmIC8qIEFORFJPSURfWDg2X0xJTktFUiAqLwotCi0jaWZkZWYgQU5EUk9JRF9BUk1fTElOS0VSCi0gICAgICAgIGNhc2UgUl9BUk1fQ09QWToKLSAgICAgICAgICAgIENPVU5UX1JFTE9DKFJFTE9DX0NPUFkpOwotICAgICAgICAgICAgTUFSSyhyZWwtPnJfb2Zmc2V0KTsKLSAgICAgICAgICAgIFRSQUNFX1RZUEUoUkVMTywgIiU1ZCBSRUxPICUwOHggPC0gJWQgQCAlMDh4ICVzXG4iLCBwaWQsCi0gICAgICAgICAgICAgICAgICAgICAgIHJlbG9jLCBzLT5zdF9zaXplLCBzeW1fYWRkciwgc3ltX25hbWUpOwotICAgICAgICAgICAgbWVtY3B5KCh2b2lkKilyZWxvYywgKHZvaWQqKXN5bV9hZGRyLCBzLT5zdF9zaXplKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFJfQVJNX05PTkU6Ci0gICAgICAgICAgICBicmVhazsKLSNlbmRpZiAvKiBBTkRST0lEX0FSTV9MSU5LRVIgKi8KLQotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgRExfRVJSKCIlNWQgdW5rbm93biByZWxvYyB0eXBlICVkIEAgJXAgKCVkKSIsCi0gICAgICAgICAgICAgICAgICBwaWQsIHR5cGUsIHJlbCwgKGludCkgKHJlbCAtIHN0YXJ0KSk7Ci0gICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIH0KLSAgICAgICAgcmVsKys7Ci0gICAgfQotICAgIHJldHVybiAwOwotfQotCi0vKiBQbGVhc2UgcmVhZCB0aGUgIkluaXRpYWxpemF0aW9uIGFuZCBUZXJtaW5hdGlvbiBmdW5jdGlvbnMiIGZ1bmN0aW9ucy4KLSAqIG9mIHRoZSBsaW5rZXIgZGVzaWduIG5vdGUgaW4gYmlvbmljL2xpbmtlci9SRUFETUUuVFhUIHRvIHVuZGVyc3RhbmQKLSAqIHdoYXQgdGhlIGZvbGxvd2luZyBjb2RlIGlzIGRvaW5nLgotICoKLSAqIFRoZSBpbXBvcnRhbnQgdGhpbmdzIHRvIHJlbWVtYmVyIGFyZToKLSAqCi0gKiAgIERUX1BSRUlOSVRfQVJSQVkgbXVzdCBiZSBjYWxsZWQgZmlyc3QgZm9yIGV4ZWN1dGFibGVzLCBhbmQgc2hvdWxkCi0gKiAgIG5vdCBhcHBlYXIgaW4gc2hhcmVkIGxpYnJhcmllcy4KLSAqCi0gKiAgIERUX0lOSVQgc2hvdWxkIGJlIGNhbGxlZCBiZWZvcmUgRFRfSU5JVF9BUlJBWSBpZiBib3RoIGFyZSBwcmVzZW50Ci0gKgotICogICBEVF9GSU5JIHNob3VsZCBiZSBjYWxsZWQgYWZ0ZXIgRFRfRklOSV9BUlJBWSBpZiBib3RoIGFyZSBwcmVzZW50Ci0gKgotICogICBEVF9GSU5JX0FSUkFZIG11c3QgYmUgcGFyc2VkIGluIHJldmVyc2Ugb3JkZXIuCi0gKi8KLQotc3RhdGljIHZvaWQgY2FsbF9hcnJheSh1bnNpZ25lZCAqY3RvciwgaW50IGNvdW50LCBpbnQgcmV2ZXJzZSkKLXsKLSAgICBpbnQgbiwgaW5jID0gMTsKLQotICAgIGlmIChyZXZlcnNlKSB7Ci0gICAgICAgIGN0b3IgKz0gKGNvdW50LTEpOwotICAgICAgICBpbmMgICA9IC0xOwotICAgIH0KLQotICAgIGZvcihuID0gY291bnQ7IG4gPiAwOyBuLS0pIHsKLSAgICAgICAgVFJBQ0UoIlsgJTVkIExvb2tpbmcgYXQgJXMgKjB4JTA4eCA9PSAweCUwOHggXVxuIiwgcGlkLAotICAgICAgICAgICAgICByZXZlcnNlID8gImR0b3IiIDogImN0b3IiLAotICAgICAgICAgICAgICAodW5zaWduZWQpY3RvciwgKHVuc2lnbmVkKSpjdG9yKTsKLSAgICAgICAgdm9pZCAoKmZ1bmMpKCkgPSAodm9pZCAoKikoKSkgKmN0b3I7Ci0gICAgICAgIGN0b3IgKz0gaW5jOwotICAgICAgICBpZigoKGludCkgZnVuYyA9PSAwKSB8fCAoKGludCkgZnVuYyA9PSAtMSkpIGNvbnRpbnVlOwotICAgICAgICBUUkFDRSgiWyAlNWQgQ2FsbGluZyBmdW5jIEAgMHglMDh4IF1cbiIsIHBpZCwgKHVuc2lnbmVkKWZ1bmMpOwotICAgICAgICBmdW5jKCk7Ci0gICAgfQotfQotCi1zdGF0aWMgdm9pZCBjYWxsX2NvbnN0cnVjdG9ycyhzb2luZm8gKnNpKQotewotICAgIGlmIChzaS0+ZmxhZ3MgJiBGTEFHX0VYRSkgewotICAgICAgICBUUkFDRSgiWyAlNWQgQ2FsbGluZyBwcmVpbml0X2FycmF5IEAgMHglMDh4IFslZF0gZm9yICclcycgXVxuIiwKLSAgICAgICAgICAgICAgcGlkLCAodW5zaWduZWQpc2ktPnByZWluaXRfYXJyYXksIHNpLT5wcmVpbml0X2FycmF5X2NvdW50LAotICAgICAgICAgICAgICBzaS0+bmFtZSk7Ci0gICAgICAgIGNhbGxfYXJyYXkoc2ktPnByZWluaXRfYXJyYXksIHNpLT5wcmVpbml0X2FycmF5X2NvdW50LCAwKTsKLSAgICAgICAgVFJBQ0UoIlsgJTVkIERvbmUgY2FsbGluZyBwcmVpbml0X2FycmF5IGZvciAnJXMnIF1cbiIsIHBpZCwgc2ktPm5hbWUpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChzaS0+cHJlaW5pdF9hcnJheSkgewotICAgICAgICAgICAgRExfRVJSKCIlNWQgU2hhcmVkIGxpYnJhcnkgJyVzJyBoYXMgYSBwcmVpbml0X2FycmF5IHRhYmxlIEAgMHglMDh4LiIKLSAgICAgICAgICAgICAgICAgICAiIFRoaXMgaXMgSU5WQUxJRC4iLCBwaWQsIHNpLT5uYW1lLAotICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZClzaS0+cHJlaW5pdF9hcnJheSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoc2ktPmluaXRfZnVuYykgewotICAgICAgICBUUkFDRSgiWyAlNWQgQ2FsbGluZyBpbml0X2Z1bmMgQCAweCUwOHggZm9yICclcycgXVxuIiwgcGlkLAotICAgICAgICAgICAgICAodW5zaWduZWQpc2ktPmluaXRfZnVuYywgc2ktPm5hbWUpOwotICAgICAgICBzaS0+aW5pdF9mdW5jKCk7Ci0gICAgICAgIFRSQUNFKCJbICU1ZCBEb25lIGNhbGxpbmcgaW5pdF9mdW5jIGZvciAnJXMnIF1cbiIsIHBpZCwgc2ktPm5hbWUpOwotICAgIH0KLQotICAgIGlmIChzaS0+aW5pdF9hcnJheSkgewotICAgICAgICBUUkFDRSgiWyAlNWQgQ2FsbGluZyBpbml0X2FycmF5IEAgMHglMDh4IFslZF0gZm9yICclcycgXVxuIiwgcGlkLAotICAgICAgICAgICAgICAodW5zaWduZWQpc2ktPmluaXRfYXJyYXksIHNpLT5pbml0X2FycmF5X2NvdW50LCBzaS0+bmFtZSk7Ci0gICAgICAgIGNhbGxfYXJyYXkoc2ktPmluaXRfYXJyYXksIHNpLT5pbml0X2FycmF5X2NvdW50LCAwKTsKLSAgICAgICAgVFJBQ0UoIlsgJTVkIERvbmUgY2FsbGluZyBpbml0X2FycmF5IGZvciAnJXMnIF1cbiIsIHBpZCwgc2ktPm5hbWUpOwotICAgIH0KLX0KLQotCi1zdGF0aWMgdm9pZCBjYWxsX2Rlc3RydWN0b3JzKHNvaW5mbyAqc2kpCi17Ci0gICAgaWYgKHNpLT5maW5pX2FycmF5KSB7Ci0gICAgICAgIFRSQUNFKCJbICU1ZCBDYWxsaW5nIGZpbmlfYXJyYXkgQCAweCUwOHggWyVkXSBmb3IgJyVzJyBdXG4iLCBwaWQsCi0gICAgICAgICAgICAgICh1bnNpZ25lZClzaS0+ZmluaV9hcnJheSwgc2ktPmZpbmlfYXJyYXlfY291bnQsIHNpLT5uYW1lKTsKLSAgICAgICAgY2FsbF9hcnJheShzaS0+ZmluaV9hcnJheSwgc2ktPmZpbmlfYXJyYXlfY291bnQsIDEpOwotICAgICAgICBUUkFDRSgiWyAlNWQgRG9uZSBjYWxsaW5nIGZpbmlfYXJyYXkgZm9yICclcycgXVxuIiwgcGlkLCBzaS0+bmFtZSk7Ci0gICAgfQotCi0gICAgaWYgKHNpLT5maW5pX2Z1bmMpIHsKLSAgICAgICAgVFJBQ0UoIlsgJTVkIENhbGxpbmcgZmluaV9mdW5jIEAgMHglMDh4IGZvciAnJXMnIF1cbiIsIHBpZCwKLSAgICAgICAgICAgICAgKHVuc2lnbmVkKXNpLT5maW5pX2Z1bmMsIHNpLT5uYW1lKTsKLSAgICAgICAgc2ktPmZpbmlfZnVuYygpOwotICAgICAgICBUUkFDRSgiWyAlNWQgRG9uZSBjYWxsaW5nIGZpbmlfZnVuYyBmb3IgJyVzJyBdXG4iLCBwaWQsIHNpLT5uYW1lKTsKLSAgICB9Ci19Ci0KLS8qIEZvcmNlIGFueSBvZiB0aGUgY2xvc2VkIHN0ZGluLCBzdGRvdXQgYW5kIHN0ZGVyciB0byBiZSBhc3NvY2lhdGVkIHdpdGgKLSAgIC9kZXYvbnVsbC4gKi8KLXN0YXRpYyBpbnQgbnVsbGlmeV9jbG9zZWRfc3RkaW8gKHZvaWQpCi17Ci0gICAgaW50IGRldl9udWxsLCBpLCBzdGF0dXM7Ci0gICAgaW50IHJldHVybl92YWx1ZSA9IDA7Ci0KLSAgICBkZXZfbnVsbCA9IG9wZW4oIi9kZXYvbnVsbCIsIE9fUkRXUik7Ci0gICAgaWYgKGRldl9udWxsIDwgMCkgewotICAgICAgICBETF9FUlIoIkNhbm5vdCBvcGVuIC9kZXYvbnVsbC4iKTsKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLSAgICBUUkFDRSgiWyAlNWQgT3BlbmVkIC9kZXYvbnVsbCBmaWxlLWRlc2NyaXB0b3I9JWRdXG4iLCBwaWQsIGRldl9udWxsKTsKLQotICAgIC8qIElmIGFueSBvZiB0aGUgc3RkaW8gZmlsZSBkZXNjcmlwdG9ycyBpcyB2YWxpZCBhbmQgbm90IGFzc29jaWF0ZWQKLSAgICAgICB3aXRoIC9kZXYvbnVsbCwgZHVwIC9kZXYvbnVsbCB0byBpdC4gICovCi0gICAgZm9yIChpID0gMDsgaSA8IDM7IGkrKykgewotICAgICAgICAvKiBJZiBpdCBpcyAvZGV2L251bGwgYWxyZWFkeSwgd2UgYXJlIGRvbmUuICovCi0gICAgICAgIGlmIChpID09IGRldl9udWxsKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgVFJBQ0UoIlsgJTVkIE51bGxpZnlpbmcgc3RkaW8gZmlsZSBkZXNjcmlwdG9yICVkXVxuIiwgcGlkLCBpKTsKLSAgICAgICAgLyogVGhlIG1hbiBwYWdlIG9mIGZjbnRsIGRvZXMgbm90IHNheSB0aGF0IGZjbnRsKC4uLEZfR0VURkwpCi0gICAgICAgICAgIGNhbiBiZSBpbnRlcnJ1cHRlZCBidXQgd2UgZG8gdGhpcyBqdXN0IHRvIGJlIHNhZmUuICovCi0gICAgICAgIGRvIHsKLSAgICAgICAgICBzdGF0dXMgPSBmY250bChpLCBGX0dFVEZMKTsKLSAgICAgICAgfSB3aGlsZSAoc3RhdHVzIDwgMCAmJiBlcnJubyA9PSBFSU5UUik7Ci0KLSAgICAgICAgLyogSWYgZmlsZSBpcyBvcGVubmVkLCB3ZSBhcmUgZ29vZC4gKi8KLSAgICAgICAgaWYgKHN0YXR1cyA+PSAwKQotICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIC8qIFRoZSBvbmx5IGVycm9yIHdlIGFsbG93IGlzIHRoYXQgdGhlIGZpbGUgZGVzY3JpcHRvciBkb2VzIG5vdAotICAgICAgICAgICBleGlzdCwgaW4gd2hpY2ggY2FzZSB3ZSBkdXAgL2Rldi9udWxsIHRvIGl0LiAqLwotICAgICAgICBpZiAoZXJybm8gIT0gRUJBREYpIHsKLSAgICAgICAgICAgIERMX0VSUigibnVsbGlmeV9zdGRpbzogdW5oYW5kbGVkIGVycm9yICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKLSAgICAgICAgICAgIHJldHVybl92YWx1ZSA9IC0xOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICAvKiBUcnkgZHVwcGluZyAvZGV2L251bGwgdG8gdGhpcyBzdGRpbyBmaWxlIGRlc2NyaXB0b3IgYW5kCi0gICAgICAgICAgIHJlcGVhdCBpZiB0aGVyZSBpcyBhIHNpZ25hbC4gIE5vdGUgdGhhdCBhbnkgZXJyb3JzIGluIGNsb3NpbmcKLSAgICAgICAgICAgdGhlIHN0ZGlvIGRlc2NyaXB0b3IgYXJlIGxvc3QuICAqLwotICAgICAgICBkbyB7Ci0gICAgICAgICAgICBzdGF0dXMgPSBkdXAyKGRldl9udWxsLCBpKTsKLSAgICAgICAgfSB3aGlsZSAoc3RhdHVzIDwgMCAmJiBlcnJubyA9PSBFSU5UUik7Ci0KLSAgICAgICAgaWYgKHN0YXR1cyA8IDApIHsKLSAgICAgICAgICAgIERMX0VSUigibnVsbGlmeV9zdGRpbzogZHVwMiBlcnJvciAlcyIsIHN0cmVycm9yKGVycm5vKSk7Ci0gICAgICAgICAgICByZXR1cm5fdmFsdWUgPSAtMTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyogSWYgL2Rldi9udWxsIGlzIG5vdCBvbmUgb2YgdGhlIHN0ZGlvIGZpbGUgZGVzY3JpcHRvcnMsIGNsb3NlIGl0LiAqLwotICAgIGlmIChkZXZfbnVsbCA+IDIpIHsKLSAgICAgICAgVFJBQ0UoIlsgJTVkIENsb3NpbmcgL2Rldi9udWxsIGZpbGUtZGVzY3JpcHRvcj0lZF1cbiIsIHBpZCwgZGV2X251bGwpOwotICAgICAgICBkbyB7Ci0gICAgICAgICAgICBzdGF0dXMgPSBjbG9zZShkZXZfbnVsbCk7Ci0gICAgICAgIH0gd2hpbGUgKHN0YXR1cyA8IDAgJiYgZXJybm8gPT0gRUlOVFIpOwotCi0gICAgICAgIGlmIChzdGF0dXMgPCAwKSB7Ci0gICAgICAgICAgICBETF9FUlIoIm51bGxpZnlfc3RkaW86IGNsb3NlIGVycm9yICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKLSAgICAgICAgICAgIHJldHVybl92YWx1ZSA9IC0xOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHJldHVybl92YWx1ZTsKLX0KLQotc3RhdGljIGludCBsaW5rX2ltYWdlKHNvaW5mbyAqc2ksIHVuc2lnbmVkIHdyX29mZnNldCkKLXsKLSAgICB1bnNpZ25lZCAqZDsKLSAgICBFbGYzMl9QaGRyICpwaGRyID0gc2ktPnBoZHI7Ci0gICAgaW50IHBobnVtID0gc2ktPnBobnVtOwotCi0gICAgSU5GTygiWyAlNWQgbGlua2luZyAlcyBdXG4iLCBwaWQsIHNpLT5uYW1lKTsKLSAgICBERUJVRygiJTVkIHNpLT5iYXNlID0gMHglMDh4IHNpLT5mbGFncyA9IDB4JTA4eFxuIiwgcGlkLAotICAgICAgICAgIHNpLT5iYXNlLCBzaS0+ZmxhZ3MpOwotCi0gICAgaWYgKHNpLT5mbGFncyAmIEZMQUdfRVhFKSB7Ci0gICAgICAgIC8qIExvY2F0ZSB0aGUgbmVlZGVkIHByb2dyYW0gc2VnbWVudHMgKERZTkFNSUMvQVJNX0VYSURYKSBmb3IKLSAgICAgICAgICogbGlua2FnZSBpbmZvIGlmIHRoaXMgaXMgdGhlIGV4ZWN1dGFibGUuIElmIHRoaXMgd2FzIGEKLSAgICAgICAgICogZHluYW1pYyBsaWIsIHRoYXQgd291bGQgaGF2ZSBiZWVuIGRvbmUgYXQgbG9hZCB0aW1lLgotICAgICAgICAgKgotICAgICAgICAgKiBUT0RPOiBJdCdzIHVuZm9ydHVuYXRlIHRoYXQgc21hbGwgcGllY2VzIG9mIHRoaXMgYXJlCi0gICAgICAgICAqIHJlcGVhdGVkIGZyb20gdGhlIGxvYWRfbGlicmFyeSByb3V0aW5lLiBSZWZhY3RvciB0aGlzIGp1c3QKLSAgICAgICAgICogc2xpZ2h0bHkgdG8gcmV1c2UgdGhlc2UgYml0cy4KLSAgICAgICAgICovCi0gICAgICAgIHNpLT5zaXplID0gMDsKLSAgICAgICAgZm9yKDsgcGhudW0gPiAwOyAtLXBobnVtLCArK3BoZHIpIHsKLSNpZmRlZiBBTkRST0lEX0FSTV9MSU5LRVIKLSAgICAgICAgICAgIGlmKHBoZHItPnBfdHlwZSA9PSBQVF9BUk1fRVhJRFgpIHsKLSAgICAgICAgICAgICAgICAvKiBleGlkeCBlbnRyaWVzICh1c2VkIGZvciBzdGFjayB1bndpbmRpbmcpIGFyZSA4IGJ5dGVzIGVhY2guCi0gICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgICAgc2ktPkFSTV9leGlkeCA9ICh1bnNpZ25lZCAqKXBoZHItPnBfdmFkZHI7Ci0gICAgICAgICAgICAgICAgc2ktPkFSTV9leGlkeF9jb3VudCA9IHBoZHItPnBfbWVtc3ogLyA4OwotICAgICAgICAgICAgfQotI2VuZGlmCi0gICAgICAgICAgICBpZiAocGhkci0+cF90eXBlID09IFBUX0xPQUQpIHsKLSAgICAgICAgICAgICAgICAvKiBGb3IgdGhlIGV4ZWN1dGFibGUsIHdlIHVzZSB0aGUgc2ktPnNpemUgZmllbGQgb25seSBpbgotICAgICAgICAgICAgICAgICAgIGRsX3Vud2luZF9maW5kX2V4aWR4KCksIHNvIHRoZSBtZWFuaW5nIG9mIHNpLT5zaXplCi0gICAgICAgICAgICAgICAgICAgaXMgbm90IHRoZSBzaXplIG9mIHRoZSBleGVjdXRhYmxlOyBpdCBpcyB0aGUgbGFzdAotICAgICAgICAgICAgICAgICAgIHZpcnR1YWwgYWRkcmVzcyBvZiB0aGUgbG9hZGFibGUgcGFydCBvZiB0aGUgZXhlY3V0YWJsZTsKLSAgICAgICAgICAgICAgICAgICBzaW5jZSBzaS0+YmFzZSA9PSAwIGZvciBhbiBleGVjdXRhYmxlLCB3ZSB1c2UgdGhlCi0gICAgICAgICAgICAgICAgICAgcmFuZ2UgWzAsIHNpLT5zaXplKSB0byBkZXRlcm1pbmUgd2hldGhlciBhIFBDIHZhbHVlCi0gICAgICAgICAgICAgICAgICAgZmFsbHMgd2l0aGluIHRoZSBleGVjdXRhYmxlIHNlY3Rpb24uICBPZiBjb3Vyc2UsIGlmCi0gICAgICAgICAgICAgICAgICAgYSB2YWx1ZSBpcyBiZWxvdyBwaGRyLT5wX3ZhZGRyLCBpdCdzIG5vdCBpbiB0aGUKLSAgICAgICAgICAgICAgICAgICBleGVjdXRhYmxlIHNlY3Rpb24sIGJ1dCBhKSB3ZSBzaG91bGRuJ3QgYmUgYXNraW5nIGZvcgotICAgICAgICAgICAgICAgICAgIHN1Y2ggYSB2YWx1ZSBhbnl3YXksIGFuZCBiKSBpZiB3ZSBoYXZlIHRvIHByb3ZpZGUKLSAgICAgICAgICAgICAgICAgICBhbiBFWElEWCBmb3Igc3VjaCBhIHZhbHVlLCB0aGVuIHRoZSBleGVjdXRhYmxlJ3MKLSAgICAgICAgICAgICAgICAgICBFWElEWCBpcyBwcm9iYWJseSB0aGUgYmV0dGVyIGNob2ljZS4KLSAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgICAgIERFQlVHX0RVTVBfUEhEUihwaGRyLCAiUFRfTE9BRCIsIHBpZCk7Ci0gICAgICAgICAgICAgICAgaWYgKHBoZHItPnBfdmFkZHIgKyBwaGRyLT5wX21lbXN6ID4gc2ktPnNpemUpCi0gICAgICAgICAgICAgICAgICAgIHNpLT5zaXplID0gcGhkci0+cF92YWRkciArIHBoZHItPnBfbWVtc3o7Ci0gICAgICAgICAgICAgICAgLyogdHJ5IHRvIHJlbWVtYmVyIHdoYXQgcmFuZ2Ugb2YgYWRkcmVzc2VzIHNob3VsZCBiZSB3cml0ZQotICAgICAgICAgICAgICAgICAqIHByb3RlY3RlZCAqLwotICAgICAgICAgICAgICAgIGlmICghKHBoZHItPnBfZmxhZ3MgJiBQRl9XKSkgewotICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBfZW5kOwotCi0gICAgICAgICAgICAgICAgICAgIGlmIChwaGRyLT5wX3ZhZGRyIDwgc2ktPndycHJvdGVjdF9zdGFydCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHNpLT53cnByb3RlY3Rfc3RhcnQgPSBwaGRyLT5wX3ZhZGRyOwotICAgICAgICAgICAgICAgICAgICBfZW5kID0gKCgocGhkci0+cF92YWRkciArIHBoZHItPnBfbWVtc3ogKyBQQUdFX1NJWkUgLSAxKSAmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICh+UEFHRV9NQVNLKSkpOwotICAgICAgICAgICAgICAgICAgICBpZiAoX2VuZCA+IHNpLT53cnByb3RlY3RfZW5kKQotICAgICAgICAgICAgICAgICAgICAgICAgc2ktPndycHJvdGVjdF9lbmQgPSBfZW5kOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSBpZiAocGhkci0+cF90eXBlID09IFBUX0RZTkFNSUMpIHsKLSAgICAgICAgICAgICAgICBpZiAoc2ktPmR5bmFtaWMgIT0gKHVuc2lnbmVkICopLTEpIHsKLSAgICAgICAgICAgICAgICAgICAgRExfRVJSKCIlNWQgbXVsdGlwbGUgUFRfRFlOQU1JQyBzZWdtZW50cyBmb3VuZCBpbiAnJXMnLiAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICJTZWdtZW50IGF0IDB4JTA4eCwgcHJldmlvdXNseSBvbmUgZm91bmQgYXQgMHglMDh4IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgcGlkLCBzaS0+bmFtZSwgc2ktPmJhc2UgKyBwaGRyLT5wX3ZhZGRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQpc2ktPmR5bmFtaWMpOwotICAgICAgICAgICAgICAgICAgICBnb3RvIGZhaWw7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIERFQlVHX0RVTVBfUEhEUihwaGRyLCAiUFRfRFlOQU1JQyIsIHBpZCk7Ci0gICAgICAgICAgICAgICAgc2ktPmR5bmFtaWMgPSAodW5zaWduZWQgKikgKHNpLT5iYXNlICsgcGhkci0+cF92YWRkcik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoc2ktPmR5bmFtaWMgPT0gKHVuc2lnbmVkICopLTEpIHsKLSAgICAgICAgRExfRVJSKCIlNWQgbWlzc2luZyBQVF9EWU5BTUlDPyEiLCBwaWQpOwotICAgICAgICBnb3RvIGZhaWw7Ci0gICAgfQotCi0gICAgREVCVUcoIiU1ZCBkeW5hbWljID0gJXBcbiIsIHBpZCwgc2ktPmR5bmFtaWMpOwotCi0gICAgLyogZXh0cmFjdCB1c2VmdWwgaW5mb3JtYXRpb24gZnJvbSBkeW5hbWljIHNlY3Rpb24gKi8KLSAgICBmb3IoZCA9IHNpLT5keW5hbWljOyAqZDsgZCsrKXsKLSAgICAgICAgREVCVUcoIiU1ZCBkID0gJXAsIGRbMF0gPSAweCUwOHggZFsxXSA9IDB4JTA4eFxuIiwgcGlkLCBkLCBkWzBdLCBkWzFdKTsKLSAgICAgICAgc3dpdGNoKCpkKyspewotICAgICAgICBjYXNlIERUX0hBU0g6Ci0gICAgICAgICAgICBzaS0+bmJ1Y2tldCA9ICgodW5zaWduZWQgKikgKHNpLT5iYXNlICsgKmQpKVswXTsKLSAgICAgICAgICAgIHNpLT5uY2hhaW4gPSAoKHVuc2lnbmVkICopIChzaS0+YmFzZSArICpkKSlbMV07Ci0gICAgICAgICAgICBzaS0+YnVja2V0ID0gKHVuc2lnbmVkICopIChzaS0+YmFzZSArICpkICsgOCk7Ci0gICAgICAgICAgICBzaS0+Y2hhaW4gPSAodW5zaWduZWQgKikgKHNpLT5iYXNlICsgKmQgKyA4ICsgc2ktPm5idWNrZXQgKiA0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIERUX1NUUlRBQjoKLSAgICAgICAgICAgIHNpLT5zdHJ0YWIgPSAoY29uc3QgY2hhciAqKSAoc2ktPmJhc2UgKyAqZCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBEVF9TWU1UQUI6Ci0gICAgICAgICAgICBzaS0+c3ltdGFiID0gKEVsZjMyX1N5bSAqKSAoc2ktPmJhc2UgKyAqZCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBEVF9QTFRSRUw6Ci0gICAgICAgICAgICBpZigqZCAhPSBEVF9SRUwpIHsKLSAgICAgICAgICAgICAgICBETF9FUlIoIkRUX1JFTEEgbm90IHN1cHBvcnRlZCIpOwotICAgICAgICAgICAgICAgIGdvdG8gZmFpbDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIERUX0pNUFJFTDoKLSAgICAgICAgICAgIHNpLT5wbHRfcmVsID0gKEVsZjMyX1JlbCopIChzaS0+YmFzZSArICpkKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIERUX1BMVFJFTFNaOgotICAgICAgICAgICAgc2ktPnBsdF9yZWxfY291bnQgPSAqZCAvIDg7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBEVF9SRUw6Ci0gICAgICAgICAgICBzaS0+cmVsID0gKEVsZjMyX1JlbCopIChzaS0+YmFzZSArICpkKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIERUX1JFTFNaOgotICAgICAgICAgICAgc2ktPnJlbF9jb3VudCA9ICpkIC8gODsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIERUX1BMVEdPVDoKLSAgICAgICAgICAgIC8qIFNhdmUgdGhpcyBpbiBjYXNlIHdlIGRlY2lkZSB0byBkbyBsYXp5IGJpbmRpbmcuIFdlIGRvbid0IHlldC4gKi8KLSAgICAgICAgICAgIHNpLT5wbHRfZ290ID0gKHVuc2lnbmVkICopKHNpLT5iYXNlICsgKmQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRFRfREVCVUc6Ci0gICAgICAgICAgICAvLyBTZXQgdGhlIERUX0RFQlVHIGVudHJ5IHRvIHRoZSBhZGRyZXMgb2YgX3JfZGVidWcgZm9yIEdEQgotICAgICAgICAgICAgKmQgPSAoaW50KSAmX3JfZGVidWc7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgIGNhc2UgRFRfUkVMQToKLSAgICAgICAgICAgIERMX0VSUigiJTVkIERUX1JFTEEgbm90IHN1cHBvcnRlZCIsIHBpZCk7Ci0gICAgICAgICAgICBnb3RvIGZhaWw7Ci0gICAgICAgIGNhc2UgRFRfSU5JVDoKLSAgICAgICAgICAgIHNpLT5pbml0X2Z1bmMgPSAodm9pZCAoKikodm9pZCkpKHNpLT5iYXNlICsgKmQpOwotICAgICAgICAgICAgREVCVUcoIiU1ZCAlcyBjb25zdHJ1Y3RvcnMgKGluaXQgZnVuYykgZm91bmQgYXQgJXBcbiIsCi0gICAgICAgICAgICAgICAgICBwaWQsIHNpLT5uYW1lLCBzaS0+aW5pdF9mdW5jKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIERUX0ZJTkk6Ci0gICAgICAgICAgICBzaS0+ZmluaV9mdW5jID0gKHZvaWQgKCopKHZvaWQpKShzaS0+YmFzZSArICpkKTsKLSAgICAgICAgICAgIERFQlVHKCIlNWQgJXMgZGVzdHJ1Y3RvcnMgKGZpbmkgZnVuYykgZm91bmQgYXQgJXBcbiIsCi0gICAgICAgICAgICAgICAgICBwaWQsIHNpLT5uYW1lLCBzaS0+ZmluaV9mdW5jKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIERUX0lOSVRfQVJSQVk6Ci0gICAgICAgICAgICBzaS0+aW5pdF9hcnJheSA9ICh1bnNpZ25lZCAqKShzaS0+YmFzZSArICpkKTsKLSAgICAgICAgICAgIERFQlVHKCIlNWQgJXMgY29uc3RydWN0b3JzIChpbml0X2FycmF5KSBmb3VuZCBhdCAlcFxuIiwKLSAgICAgICAgICAgICAgICAgIHBpZCwgc2ktPm5hbWUsIHNpLT5pbml0X2FycmF5KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIERUX0lOSVRfQVJSQVlTWjoKLSAgICAgICAgICAgIHNpLT5pbml0X2FycmF5X2NvdW50ID0gKCh1bnNpZ25lZCkqZCkgLyBzaXplb2YoRWxmMzJfQWRkcik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBEVF9GSU5JX0FSUkFZOgotICAgICAgICAgICAgc2ktPmZpbmlfYXJyYXkgPSAodW5zaWduZWQgKikoc2ktPmJhc2UgKyAqZCk7Ci0gICAgICAgICAgICBERUJVRygiJTVkICVzIGRlc3RydWN0b3JzIChmaW5pX2FycmF5KSBmb3VuZCBhdCAlcFxuIiwKLSAgICAgICAgICAgICAgICAgIHBpZCwgc2ktPm5hbWUsIHNpLT5maW5pX2FycmF5KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIERUX0ZJTklfQVJSQVlTWjoKLSAgICAgICAgICAgIHNpLT5maW5pX2FycmF5X2NvdW50ID0gKCh1bnNpZ25lZCkqZCkgLyBzaXplb2YoRWxmMzJfQWRkcik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBEVF9QUkVJTklUX0FSUkFZOgotICAgICAgICAgICAgc2ktPnByZWluaXRfYXJyYXkgPSAodW5zaWduZWQgKikoc2ktPmJhc2UgKyAqZCk7Ci0gICAgICAgICAgICBERUJVRygiJTVkICVzIGNvbnN0cnVjdG9ycyAocHJlaW5pdF9hcnJheSkgZm91bmQgYXQgJXBcbiIsCi0gICAgICAgICAgICAgICAgICBwaWQsIHNpLT5uYW1lLCBzaS0+cHJlaW5pdF9hcnJheSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBEVF9QUkVJTklUX0FSUkFZU1o6Ci0gICAgICAgICAgICBzaS0+cHJlaW5pdF9hcnJheV9jb3VudCA9ICgodW5zaWduZWQpKmQpIC8gc2l6ZW9mKEVsZjMyX0FkZHIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRFRfVEVYVFJFTDoKLSAgICAgICAgICAgIC8qIFRPRE86IG1ha2UgdXNlIG9mIHRoaXMuICovCi0gICAgICAgICAgICAvKiB0aGlzIG1lYW5zIHRoYXQgd2UgbWlnaHQgaGF2ZSB0byB3cml0ZSBpbnRvIHdoZXJlIHRoZSB0ZXh0Ci0gICAgICAgICAgICAgKiBzZWdtZW50IHdhcyBsb2FkZWQgZHVyaW5nIHJlbG9jYXRpb24uLi4gRG8gc29tZXRoaW5nIHdpdGgKLSAgICAgICAgICAgICAqIGl0LgotICAgICAgICAgICAgICovCi0gICAgICAgICAgICBERUJVRygiJTVkIFRleHQgc2VnbWVudCBzaG91bGQgYmUgd3JpdGFibGUgZHVyaW5nIHJlbG9jYXRpb24uXG4iLAotICAgICAgICAgICAgICAgICAgcGlkKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgREVCVUcoIiU1ZCBzaS0+YmFzZSA9IDB4JTA4eCwgc2ktPnN0cnRhYiA9ICVwLCBzaS0+c3ltdGFiID0gJXBcbiIsCi0gICAgICAgICAgIHBpZCwgc2ktPmJhc2UsIHNpLT5zdHJ0YWIsIHNpLT5zeW10YWIpOwotCi0gICAgaWYoKHNpLT5zdHJ0YWIgPT0gMCkgfHwgKHNpLT5zeW10YWIgPT0gMCkpIHsKLSAgICAgICAgRExfRVJSKCIlNWQgbWlzc2luZyBlc3NlbnRpYWwgdGFibGVzIiwgcGlkKTsKLSAgICAgICAgZ290byBmYWlsOwotICAgIH0KLQotICAgIC8qIGlmIHRoaXMgaXMgdGhlIG1haW4gZXhlY3V0YWJsZSwgdGhlbiBsb2FkIGFsbCBvZiB0aGUgcHJlbG9hZHMgbm93ICovCi0gICAgaWYoc2ktPmZsYWdzICYgRkxBR19FWEUpIHsKLSAgICAgICAgaW50IGk7Ci0gICAgICAgIG1lbXNldChwcmVsb2FkcywgMCwgc2l6ZW9mKHByZWxvYWRzKSk7Ci0gICAgICAgIGZvcihpID0gMDsgbGRwcmVsb2FkX25hbWVzW2ldICE9IE5VTEw7IGkrKykgewotICAgICAgICAgICAgc29pbmZvICpsc2kgPSBmaW5kX2xpYnJhcnkobGRwcmVsb2FkX25hbWVzW2ldKTsKLSAgICAgICAgICAgIGlmKGxzaSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgc3RybGNweSh0bXBfZXJyX2J1ZiwgbGlua2VyX2dldF9lcnJvcigpLCBzaXplb2YodG1wX2Vycl9idWYpKTsKLSAgICAgICAgICAgICAgICBETF9FUlIoIiU1ZCBjb3VsZCBub3QgbG9hZCBuZWVkZWQgbGlicmFyeSAnJXMnIGZvciAnJXMnICglcykiLAotICAgICAgICAgICAgICAgICAgICAgICBwaWQsIGxkcHJlbG9hZF9uYW1lc1tpXSwgc2ktPm5hbWUsIHRtcF9lcnJfYnVmKTsKLSAgICAgICAgICAgICAgICBnb3RvIGZhaWw7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBsc2ktPnJlZmNvdW50Kys7Ci0gICAgICAgICAgICBwcmVsb2Fkc1tpXSA9IGxzaTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGZvcihkID0gc2ktPmR5bmFtaWM7ICpkOyBkICs9IDIpIHsKLSAgICAgICAgaWYoZFswXSA9PSBEVF9ORUVERUQpewotICAgICAgICAgICAgREVCVUcoIiU1ZCAlcyBuZWVkcyAlc1xuIiwgcGlkLCBzaS0+bmFtZSwgc2ktPnN0cnRhYiArIGRbMV0pOwotICAgICAgICAgICAgc29pbmZvICpsc2kgPSBmaW5kX2xpYnJhcnkoc2ktPnN0cnRhYiArIGRbMV0pOwotICAgICAgICAgICAgaWYobHNpID09IDApIHsKLSAgICAgICAgICAgICAgICBzdHJsY3B5KHRtcF9lcnJfYnVmLCBsaW5rZXJfZ2V0X2Vycm9yKCksIHNpemVvZih0bXBfZXJyX2J1ZikpOwotICAgICAgICAgICAgICAgIERMX0VSUigiJTVkIGNvdWxkIG5vdCBsb2FkIG5lZWRlZCBsaWJyYXJ5ICclcycgZm9yICclcycgKCVzKSIsCi0gICAgICAgICAgICAgICAgICAgICAgIHBpZCwgc2ktPnN0cnRhYiArIGRbMV0sIHNpLT5uYW1lLCB0bXBfZXJyX2J1Zik7Ci0gICAgICAgICAgICAgICAgZ290byBmYWlsOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgLyogU2F2ZSB0aGUgc29pbmZvIG9mIHRoZSBsb2FkZWQgRFRfTkVFREVEIGxpYnJhcnkgaW4gdGhlIHBheWxvYWQKLSAgICAgICAgICAgICAgIG9mIHRoZSBEVF9ORUVERUQgZW50cnkgaXRzZWxmLCBzbyB0aGF0IHdlIGNhbiByZXRyaWV2ZSB0aGUKLSAgICAgICAgICAgICAgIHNvaW5mbyBkaXJlY3RseSBsYXRlciBmcm9tIHRoZSBkeW5hbWljIHNlZ21lbnQuICBUaGlzIGlzIGEgaGFjaywKLSAgICAgICAgICAgICAgIGJ1dCBpdCBhbGxvd3MgdXMgdG8gbWFwIGZyb20gRFRfTkVFREVEIHRvIHNvaW5mbyBlZmZpY2llbnRseQotICAgICAgICAgICAgICAgbGF0ZXIgb24gd2hlbiB3ZSByZXNvbHZlIHJlbG9jYXRpb25zLCB0cnlpbmcgdG8gbG9vayB1cCBhIHN5bWdvbAotICAgICAgICAgICAgICAgd2l0aCBkbHN5bSgpLgotICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGRbMV0gPSAodW5zaWduZWQpbHNpOwotICAgICAgICAgICAgbHNpLT5yZWZjb3VudCsrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYoc2ktPnBsdF9yZWwpIHsKLSAgICAgICAgREVCVUcoIlsgJTVkIHJlbG9jYXRpbmcgJXMgcGx0IF1cbiIsIHBpZCwgc2ktPm5hbWUgKTsKLSAgICAgICAgaWYocmVsb2NfbGlicmFyeShzaSwgc2ktPnBsdF9yZWwsIHNpLT5wbHRfcmVsX2NvdW50KSkKLSAgICAgICAgICAgIGdvdG8gZmFpbDsKLSAgICB9Ci0gICAgaWYoc2ktPnJlbCkgewotICAgICAgICBERUJVRygiWyAlNWQgcmVsb2NhdGluZyAlcyBdXG4iLCBwaWQsIHNpLT5uYW1lICk7Ci0gICAgICAgIGlmKHJlbG9jX2xpYnJhcnkoc2ksIHNpLT5yZWwsIHNpLT5yZWxfY291bnQpKQotICAgICAgICAgICAgZ290byBmYWlsOwotICAgIH0KLQotICAgIHNpLT5mbGFncyB8PSBGTEFHX0xJTktFRDsKLSAgICBERUJVRygiWyAlNWQgZmluaXNoZWQgbGlua2luZyAlcyBdXG4iLCBwaWQsIHNpLT5uYW1lKTsKLQotI2lmIDAKLSAgICAvKiBUaGlzIGlzIHRoZSB3YXkgdGhhdCB0aGUgb2xkIGR5bmFtaWMgbGlua2VyIGRpZCBwcm90ZWN0aW9uIG9mCi0gICAgICogbm9uLXdyaXRhYmxlIGFyZWFzLiBJdCB3b3VsZCBzY2FuIHNlY3Rpb24gaGVhZGVycyBhbmQgZmluZCB3aGVyZQotICAgICAqIC50ZXh0IGVuZGVkIChyYXRoZXIgd2hlcmUgLmRhdGEvLmJzcyBiZWdhbikgYW5kIGFzc3VtZSB0aGF0IHRoaXMgaXMKLSAgICAgKiB0aGUgdXBwZXIgcmFuZ2Ugb2YgdGhlIG5vbi13cml0YWJsZSBhcmVhLiBUaGlzIGlzIHRvbyBjb2Fyc2UsCi0gICAgICogYW5kIGlzIGtlcHQgaGVyZSBmb3IgcmVmZXJlbmNlIHVudGlsIHdlIGZ1bGx5IG1vdmUgYXdheSBmcm9tIHNpbmdsZQotICAgICAqIHNlZ21lbnQgZWxmIG9iamVjdHMuIFNlZSB0aGUgY29kZSBpbiBnZXRfd3Jfb2Zmc2V0IChhbHNvICNpZidkIDApCi0gICAgICogdGhhdCBtYWRlIHRoaXMgcG9zc2libGUuCi0gICAgICovCi0gICAgaWYod3Jfb2Zmc2V0IDwgMHhmZmZmZmZmZil7Ci0gICAgICAgIG1wcm90ZWN0KCh2b2lkKikgc2ktPmJhc2UsIHdyX29mZnNldCwgUFJPVF9SRUFEIHwgUFJPVF9FWEVDKTsKLSAgICB9Ci0jZWxzZQotICAgIC8qIFRPRE86IFZlcmlmeSB0aGF0IHRoaXMgZG9lcyB0aGUgcmlnaHQgdGhpbmcgaW4gYWxsIGNhc2VzLCBhcyBpdAotICAgICAqIHByZXNlbnRseSBwcm9iYWJseSBkb2VzIG5vdC4gSXQgaXMgcG9zc2libGUgdGhhdCBhbiBFTEYgaW1hZ2Ugd2lsbAotICAgICAqIGNvbWUgd2l0aCBtdWx0aXBsZSByZWFkLW9ubHkgc2VnbWVudHMuIFdoYXQgd2Ugb3VnaHQgdG8gZG8gaXMgc2NhbgotICAgICAqIHRoZSBwcm9ncmFtIGhlYWRlcnMgYWdhaW4gYW5kIG1wcm90ZWN0IGFsbCB0aGUgcmVhZC1vbmx5IHNlZ21lbnRzLgotICAgICAqIFRvIHByZXZlbnQgcmUtc2Nhbm5pbmcgdGhlIHByb2dyYW0gaGVhZGVyLCB3ZSB3b3VsZCBoYXZlIHRvIGJ1aWxkIGEKLSAgICAgKiBsaXN0IG9mIGxvYWRhYmxlIHNlZ21lbnRzIGluIHNpLCBhbmQgdGhlbiBzY2FuIHRoYXQgaW5zdGVhZC4gKi8KLSAgICBpZiAoc2ktPndycHJvdGVjdF9zdGFydCAhPSAweGZmZmZmZmZmICYmIHNpLT53cnByb3RlY3RfZW5kICE9IDApIHsKLSAgICAgICAgbXByb3RlY3QoKHZvaWQgKilzaS0+d3Jwcm90ZWN0X3N0YXJ0LAotICAgICAgICAgICAgICAgICBzaS0+d3Jwcm90ZWN0X2VuZCAtIHNpLT53cnByb3RlY3Rfc3RhcnQsCi0gICAgICAgICAgICAgICAgIFBST1RfUkVBRCB8IFBST1RfRVhFQyk7Ci0gICAgfQotI2VuZGlmCi0KLSAgICAvKiBJZiB0aGlzIGlzIGEgU0VUP0lEIHByb2dyYW0sIGR1cCAvZGV2L251bGwgdG8gb3BlbmVkIHN0ZGluLAotICAgICAgIHN0ZG91dCBhbmQgc3RkZXJyIHRvIGNsb3NlIGEgc2VjdXJpdHkgaG9sZSBkZXNjcmliZWQgaW46Ci0KLSAgICBmdHA6Ly9mdHAuZnJlZWJzZC5vcmcvcHViL0ZyZWVCU0QvQ0VSVC9hZHZpc29yaWVzL0ZyZWVCU0QtU0EtMDI6MjMuc3RkaW8uYXNjCi0KLSAgICAgKi8KLSAgICBpZiAocHJvZ3JhbV9pc19zZXR1aWQpCi0gICAgICAgIG51bGxpZnlfY2xvc2VkX3N0ZGlvICgpOwotICAgIG5vdGlmeV9nZGJfb2ZfbG9hZChzaSk7Ci0gICAgY2FsbF9jb25zdHJ1Y3RvcnMoc2kpOwotICAgIHJldHVybiAwOwotCi1mYWlsOgotICAgIEVSUk9SKCJmYWlsZWQgdG8gbGluayAlc1xuIiwgc2ktPm5hbWUpOwotICAgIHNpLT5mbGFncyB8PSBGTEFHX0VSUk9SOwotICAgIHJldHVybiAtMTsKLX0KLQotc3RhdGljIHZvaWQgcGFyc2VfbGlicmFyeV9wYXRoKGNvbnN0IGNoYXIgKnBhdGgsIGNoYXIgKmRlbGltKQotewotICAgIHNpemVfdCBsZW47Ci0gICAgY2hhciAqbGRwYXRoc19idWZwID0gbGRwYXRoc19idWY7Ci0gICAgaW50IGkgPSAwOwotCi0gICAgbGVuID0gc3RybGNweShsZHBhdGhzX2J1ZiwgcGF0aCwgc2l6ZW9mKGxkcGF0aHNfYnVmKSk7Ci0KLSAgICB3aGlsZSAoaSA8IExEUEFUSF9NQVggJiYgKGxkcGF0aHNbaV0gPSBzdHJzZXAoJmxkcGF0aHNfYnVmcCwgZGVsaW0pKSkgewotICAgICAgICBpZiAoKmxkcGF0aHNbaV0gIT0gJ1wwJykKLSAgICAgICAgICAgICsraTsKLSAgICB9Ci0KLSAgICAvKiBGb3JnZXQgdGhlIGxhc3QgcGF0aCBpZiB3ZSBoYWQgdG8gdHJ1bmNhdGU7IHRoaXMgb2NjdXJzIGlmIHRoZSAybmQgdG8KLSAgICAgKiBsYXN0IGNoYXIgaXNuJ3QgJ1wwJyAoaS5lLiBub3Qgb3JpZ2luYWxseSBhIGRlbGltKS4gKi8KLSAgICBpZiAoaSA+IDAgJiYgbGVuID49IHNpemVvZihsZHBhdGhzX2J1ZikgJiYKLSAgICAgICAgICAgIGxkcGF0aHNfYnVmW3NpemVvZihsZHBhdGhzX2J1ZikgLSAyXSAhPSAnXDAnKSB7Ci0gICAgICAgIGxkcGF0aHNbaSAtIDFdID0gTlVMTDsKLSAgICB9IGVsc2UgewotICAgICAgICBsZHBhdGhzW2ldID0gTlVMTDsKLSAgICB9Ci19Ci0KLXN0YXRpYyB2b2lkIHBhcnNlX3ByZWxvYWRzKGNvbnN0IGNoYXIgKnBhdGgsIGNoYXIgKmRlbGltKQotewotICAgIHNpemVfdCBsZW47Ci0gICAgY2hhciAqbGRwcmVsb2Fkc19idWZwID0gbGRwcmVsb2Fkc19idWY7Ci0gICAgaW50IGkgPSAwOwotCi0gICAgbGVuID0gc3RybGNweShsZHByZWxvYWRzX2J1ZiwgcGF0aCwgc2l6ZW9mKGxkcHJlbG9hZHNfYnVmKSk7Ci0KLSAgICB3aGlsZSAoaSA8IExEUFJFTE9BRF9NQVggJiYgKGxkcHJlbG9hZF9uYW1lc1tpXSA9IHN0cnNlcCgmbGRwcmVsb2Fkc19idWZwLCBkZWxpbSkpKSB7Ci0gICAgICAgIGlmICgqbGRwcmVsb2FkX25hbWVzW2ldICE9ICdcMCcpIHsKLSAgICAgICAgICAgICsraTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qIEZvcmdldCB0aGUgbGFzdCBwYXRoIGlmIHdlIGhhZCB0byB0cnVuY2F0ZTsgdGhpcyBvY2N1cnMgaWYgdGhlIDJuZCB0bwotICAgICAqIGxhc3QgY2hhciBpc24ndCAnXDAnIChpLmUuIG5vdCBvcmlnaW5hbGx5IGEgZGVsaW0pLiAqLwotICAgIGlmIChpID4gMCAmJiBsZW4gPj0gc2l6ZW9mKGxkcHJlbG9hZHNfYnVmKSAmJgotICAgICAgICAgICAgbGRwcmVsb2Fkc19idWZbc2l6ZW9mKGxkcHJlbG9hZHNfYnVmKSAtIDJdICE9ICdcMCcpIHsKLSAgICAgICAgbGRwcmVsb2FkX25hbWVzW2kgLSAxXSA9IE5VTEw7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgbGRwcmVsb2FkX25hbWVzW2ldID0gTlVMTDsKLSAgICB9Ci19Ci0KLWludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKLXsKLSAgICByZXR1cm4gMDsKLX0KLQotI2RlZmluZSBBTkRST0lEX1RMU19TTE9UUyAgQklPTklDX1RMU19TTE9UUwotCi1zdGF0aWMgdm9pZCAqIF9fdGxzX2FyZWFbQU5EUk9JRF9UTFNfU0xPVFNdOwotCi11bnNpZ25lZCBfX2xpbmtlcl9pbml0KHVuc2lnbmVkICoqZWxmZGF0YSkKLXsKLSAgICBzdGF0aWMgc29pbmZvIGxpbmtlcl9zb2luZm87Ci0KLSAgICBpbnQgYXJnYyA9IChpbnQpICplbGZkYXRhOwotICAgIGNoYXIgKiphcmd2ID0gKGNoYXIqKikgKGVsZmRhdGEgKyAxKTsKLSAgICB1bnNpZ25lZCAqdmVjcyA9ICh1bnNpZ25lZCopIChhcmd2ICsgYXJnYyArIDEpOwotICAgIHVuc2lnbmVkICp2OwotICAgIHNvaW5mbyAqc2k7Ci0gICAgc3RydWN0IGxpbmtfbWFwICogbWFwOwotICAgIGNvbnN0IGNoYXIgKmxkcGF0aF9lbnYgPSBOVUxMOwotICAgIGNvbnN0IGNoYXIgKmxkcHJlbG9hZF9lbnYgPSBOVUxMOwotCi0gICAgLyogU2V0dXAgYSB0ZW1wb3JhcnkgVExTIGFyZWEgdGhhdCBpcyB1c2VkIHRvIGdldCBhIHdvcmtpbmcKLSAgICAgKiBlcnJubyBmb3Igc3lzdGVtIGNhbGxzLgotICAgICAqLwotICAgIF9fc2V0X3RscyhfX3Rsc19hcmVhKTsKLQotICAgIHBpZCA9IGdldHBpZCgpOwotCi0jaWYgVElNSU5HCi0gICAgc3RydWN0IHRpbWV2YWwgdDAsIHQxOwotICAgIGdldHRpbWVvZmRheSgmdDAsIDApOwotI2VuZGlmCi0KLSAgICAvKiBOT1RFOiB3ZSBzdG9yZSB0aGUgZWxmZGF0YSBwb2ludGVyIG9uIGEgc3BlY2lhbCBsb2NhdGlvbgotICAgICAqICAgICAgIG9mIHRoZSB0ZW1wb3JhcnkgVExTIGFyZWEgaW4gb3JkZXIgdG8gcGFzcyBpdCB0bwotICAgICAqICAgICAgIHRoZSBDIExpYnJhcnkncyBydW50aW1lIGluaXRpYWxpemVyLgotICAgICAqCi0gICAgICogICAgICAgVGhlIGluaXRpYWxpemVyIG11c3QgY2xlYXIgdGhlIHNsb3QgYW5kIHJlc2V0IHRoZSBUTFMKLSAgICAgKiAgICAgICB0byBwb2ludCB0byBhIGRpZmZlcmVudCBsb2NhdGlvbiB0byBlbnN1cmUgdGhhdCBubyBvdGhlcgotICAgICAqICAgICAgIHNoYXJlZCBsaWJyYXJ5IGNvbnN0cnVjdG9yIGNhbiBhY2Nlc3MgaXQuCi0gICAgICovCi0gICAgX190bHNfYXJlYVtUTFNfU0xPVF9CSU9OSUNfUFJFSU5JVF0gPSBlbGZkYXRhOwotCi0gICAgLyogSW5pdGlhbGl6ZSBlbnZpcm9ubWVudCBmdW5jdGlvbnMsIGFuZCBnZXQgdG8gdGhlIEVMRiBhdXggdmVjdG9ycyB0YWJsZSAqLwotICAgIHZlY3MgPSBsaW5rZXJfZW52X2luaXQodmVjcyk7Ci0KLSAgICAvKiBDaGVjayBhdXh2IGZvciBBVF9TRUNVUkUgZmlyc3QgdG8gc2VlIGlmIHByb2dyYW0gaXMgc2V0dWlkLCBzZXRnaWQsCi0gICAgICAgaGFzIGZpbGUgY2Fwcywgb3IgY2F1c2VkIGEgU0VMaW51eC9BcHBBcm1vciBkb21haW4gdHJhbnNpdGlvbi4gKi8KLSAgICBmb3IgKHYgPSB2ZWNzOyB2WzBdOyB2ICs9IDIpIHsKLSAgICAgICAgaWYgKHZbMF0gPT0gQVRfU0VDVVJFKSB7Ci0gICAgICAgICAgICAvKiBrZXJuZWwgdG9sZCB1cyB3aGV0aGVyIHRvIGVuYWJsZSBzZWN1cmUgbW9kZSAqLwotICAgICAgICAgICAgcHJvZ3JhbV9pc19zZXR1aWQgPSB2WzFdOwotICAgICAgICAgICAgZ290byBzYW5pdGl6ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qIEtlcm5lbCBkaWQgbm90IHByb3ZpZGUgQVRfU0VDVVJFIC0gZmFsbCBiYWNrIG9uIGxlZ2FjeSB0ZXN0LiAqLwotICAgIHByb2dyYW1faXNfc2V0dWlkID0gKGdldHVpZCgpICE9IGdldGV1aWQoKSkgfHwgKGdldGdpZCgpICE9IGdldGVnaWQoKSk7Ci0KLXNhbml0aXplOgotICAgIC8qIFNhbml0aXplIGVudmlyb25tZW50IGlmIHdlJ3JlIGxvYWRpbmcgYSBzZXR1aWQgcHJvZ3JhbSAqLwotICAgIGlmIChwcm9ncmFtX2lzX3NldHVpZCkKLSAgICAgICAgbGlua2VyX2Vudl9zZWN1cmUoKTsKLQotICAgIGRlYnVnZ2VyX2luaXQoKTsKLQotICAgIC8qIEdldCBhIGZldyBlbnZpcm9ubWVudCB2YXJpYWJsZXMgKi8KLSAgICB7Ci0gICAgICAgIGNvbnN0IGNoYXIqIGVudjsKLSAgICAgICAgZW52ID0gbGlua2VyX2Vudl9nZXQoIkRFQlVHIik7IC8qIFhYWDogVE9ETzogQ2hhbmdlIHRvIExEX0RFQlVHICovCi0gICAgICAgIGlmIChlbnYpCi0gICAgICAgICAgICBkZWJ1Z192ZXJib3NpdHkgPSBhdG9pKGVudik7Ci0KLSAgICAgICAgLyogTm9ybWFsbHksIHRoZXNlIGFyZSBjbGVhbmVkIGJ5IGxpbmtlcl9lbnZfc2VjdXJlLCBidXQgdGhlIHRlc3QKLSAgICAgICAgICogYWdhaW5zdCBwcm9ncmFtX2lzX3NldHVpZCBkb2Vzbid0IGNvc3QgdXMgYW55dGhpbmcgKi8KLSAgICAgICAgaWYgKCFwcm9ncmFtX2lzX3NldHVpZCkgewotICAgICAgICAgICAgbGRwYXRoX2VudiA9IGxpbmtlcl9lbnZfZ2V0KCJMRF9MSUJSQVJZX1BBVEgiKTsKLSAgICAgICAgICAgIGxkcHJlbG9hZF9lbnYgPSBsaW5rZXJfZW52X2dldCgiTERfUFJFTE9BRCIpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgSU5GTygiWyBhbmRyb2lkIGxpbmtlciAmIGRlYnVnZ2VyIF1cbiIpOwotICAgIERFQlVHKCIlNWQgZWxmZGF0YSBAIDB4JTA4eFxuIiwgcGlkLCAodW5zaWduZWQpZWxmZGF0YSk7Ci0KLSAgICBzaSA9IGFsbG9jX2luZm8oYXJndlswXSk7Ci0gICAgaWYoc2kgPT0gMCkgewotICAgICAgICBleGl0KC0xKTsKLSAgICB9Ci0KLSAgICAgICAgLyogYm9vdHN0cmFwIHRoZSBsaW5rIG1hcCwgdGhlIG1haW4gZXhlIGFsd2F5cyBuZWVkcyB0byBiZSBmaXJzdCAqLwotICAgIHNpLT5mbGFncyB8PSBGTEFHX0VYRTsKLSAgICBtYXAgPSAmKHNpLT5saW5rbWFwKTsKLQotICAgIG1hcC0+bF9hZGRyID0gMDsKLSAgICBtYXAtPmxfbmFtZSA9IGFyZ3ZbMF07Ci0gICAgbWFwLT5sX3ByZXYgPSBOVUxMOwotICAgIG1hcC0+bF9uZXh0ID0gTlVMTDsKLQotICAgIF9yX2RlYnVnLnJfbWFwID0gbWFwOwotICAgIHJfZGVidWdfdGFpbCA9IG1hcDsKLQotICAgICAgICAvKiBnZGIgZXhwZWN0cyB0aGUgbGlua2VyIHRvIGJlIGluIHRoZSBkZWJ1ZyBzaGFyZWQgb2JqZWN0IGxpc3QsCi0gICAgICAgICAqIGFuZCB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSByZXBvcnRlZCBsb2FkIGFkZHJlc3MgaXMgemVyby4KLSAgICAgICAgICogV2l0aG91dCB0aGlzLCBnZGIgZ2V0cyB0aGUgd3JvbmcgaWRlYSBvZiB3aGVyZSBydGxkX2RiX2RsYWN0aXZpdHkoKQotICAgICAgICAgKiBpcy4gIERvbid0IHVzZSBhbGxvY19pbmZvKCksIGJlY2F1c2UgdGhlIGxpbmtlciBzaG91bGRuJ3QKLSAgICAgICAgICogYmUgb24gdGhlIHNvaW5mbyBsaXN0LgotICAgICAgICAgKi8KLSAgICBzdHJsY3B5KChjaGFyKikgbGlua2VyX3NvaW5mby5uYW1lLCAiL3N5c3RlbS9iaW4vbGlua2VyIiwgc2l6ZW9mIGxpbmtlcl9zb2luZm8ubmFtZSk7Ci0gICAgbGlua2VyX3NvaW5mby5mbGFncyA9IDA7Ci0gICAgbGlua2VyX3NvaW5mby5iYXNlID0gMDsgICAgIC8vIFRoaXMgaXMgdGhlIGltcG9ydGFudCBwYXJ0OyBtdXN0IGJlIHplcm8uCi0gICAgaW5zZXJ0X3NvaW5mb19pbnRvX2RlYnVnX21hcCgmbGlua2VyX3NvaW5mbyk7Ci0KLSAgICAgICAgLyogZXh0cmFjdCBpbmZvcm1hdGlvbiBwYXNzZWQgZnJvbSB0aGUga2VybmVsICovCi0gICAgd2hpbGUodmVjc1swXSAhPSAwKXsKLSAgICAgICAgc3dpdGNoKHZlY3NbMF0pewotICAgICAgICBjYXNlIEFUX1BIRFI6Ci0gICAgICAgICAgICBzaS0+cGhkciA9IChFbGYzMl9QaGRyKikgdmVjc1sxXTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFUX1BITlVNOgotICAgICAgICAgICAgc2ktPnBobnVtID0gKGludCkgdmVjc1sxXTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFUX0VOVFJZOgotICAgICAgICAgICAgc2ktPmVudHJ5ID0gdmVjc1sxXTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIHZlY3MgKz0gMjsKLSAgICB9Ci0KLSAgICBzaS0+YmFzZSA9IDA7Ci0gICAgc2ktPmR5bmFtaWMgPSAodW5zaWduZWQgKiktMTsKLSAgICBzaS0+d3Jwcm90ZWN0X3N0YXJ0ID0gMHhmZmZmZmZmZjsKLSAgICBzaS0+d3Jwcm90ZWN0X2VuZCA9IDA7Ci0gICAgc2ktPnJlZmNvdW50ID0gMTsKLQotICAgICAgICAvKiBVc2UgTERfTElCUkFSWV9QQVRIIGlmIHdlIGFyZW4ndCBzZXR1aWQvc2V0Z2lkICovCi0gICAgaWYgKGxkcGF0aF9lbnYpCi0gICAgICAgIHBhcnNlX2xpYnJhcnlfcGF0aChsZHBhdGhfZW52LCAiOiIpOwotCi0gICAgaWYgKGxkcHJlbG9hZF9lbnYpIHsKLSAgICAgICAgcGFyc2VfcHJlbG9hZHMobGRwcmVsb2FkX2VudiwgIiA6Iik7Ci0gICAgfQotCi0gICAgaWYobGlua19pbWFnZShzaSwgMCkpIHsKLSAgICAgICAgY2hhciBlcnJtc2dbXSA9ICJDQU5OT1QgTElOSyBFWEVDVVRBQkxFXG4iOwotICAgICAgICB3cml0ZSgyLCBfX2xpbmtlcl9kbF9lcnJfYnVmLCBzdHJsZW4oX19saW5rZXJfZGxfZXJyX2J1ZikpOwotICAgICAgICB3cml0ZSgyLCBlcnJtc2csIHNpemVvZihlcnJtc2cpKTsKLSAgICAgICAgZXhpdCgtMSk7Ci0gICAgfQotCi0jaWYgQUxMT1dfU1lNQk9MU19GUk9NX01BSU4KLSAgICAvKiBTZXQgc29tYWluIGFmdGVyIHdlJ3ZlIGxvYWRlZCBhbGwgdGhlIGxpYnJhcmllcyBpbiBvcmRlciB0byBwcmV2ZW50Ci0gICAgICogbGlua2luZyBvZiBzeW1ib2xzIGJhY2sgdG8gdGhlIG1haW4gaW1hZ2UsIHdoaWNoIGlzIG5vdCBzZXQgdXAgYXQgdGhhdAotICAgICAqIHBvaW50IHlldC4KLSAgICAgKi8KLSAgICBzb21haW4gPSBzaTsKLSNlbmRpZgotCi0jaWYgVElNSU5HCi0gICAgZ2V0dGltZW9mZGF5KCZ0MSxOVUxMKTsKLSAgICBQUklOVCgiTElOS0VSIFRJTUU6ICVzOiAlZCBtaWNyb3NlY29uZHNcbiIsIGFyZ3ZbMF0sIChpbnQpICgKLSAgICAgICAgICAgICAgICgoKGxvbmcgbG9uZyl0MS50dl9zZWMgKiAxMDAwMDAwTEwpICsgKGxvbmcgbG9uZyl0MS50dl91c2VjKSAtCi0gICAgICAgICAgICAgICAoKChsb25nIGxvbmcpdDAudHZfc2VjICogMTAwMDAwMExMKSArIChsb25nIGxvbmcpdDAudHZfdXNlYykKLSAgICAgICAgICAgICAgICkpOwotI2VuZGlmCi0jaWYgU1RBVFMKLSAgICBQUklOVCgiUkVMTyBTVEFUUzogJXM6ICVkIGFicywgJWQgcmVsLCAlZCBjb3B5LCAlZCBzeW1ib2xcbiIsIGFyZ3ZbMF0sCi0gICAgICAgICAgIGxpbmtlcl9zdGF0cy5yZWxvY1tSRUxPQ19BQlNPTFVURV0sCi0gICAgICAgICAgIGxpbmtlcl9zdGF0cy5yZWxvY1tSRUxPQ19SRUxBVElWRV0sCi0gICAgICAgICAgIGxpbmtlcl9zdGF0cy5yZWxvY1tSRUxPQ19DT1BZXSwKLSAgICAgICAgICAgbGlua2VyX3N0YXRzLnJlbG9jW1JFTE9DX1NZTUJPTF0pOwotI2VuZGlmCi0jaWYgQ09VTlRfUEFHRVMKLSAgICB7Ci0gICAgICAgIHVuc2lnbmVkIG47Ci0gICAgICAgIHVuc2lnbmVkIGk7Ci0gICAgICAgIHVuc2lnbmVkIGNvdW50ID0gMDsKLSAgICAgICAgZm9yKG4gPSAwOyBuIDwgNDA5NjsgbisrKXsKLSAgICAgICAgICAgIGlmKGJpdG1hc2tbbl0pewotICAgICAgICAgICAgICAgIHVuc2lnbmVkIHggPSBiaXRtYXNrW25dOwotICAgICAgICAgICAgICAgIGZvcihpID0gMDsgaSA8IDg7IGkrKyl7Ci0gICAgICAgICAgICAgICAgICAgIGlmKHggJiAxKSBjb3VudCsrOwotICAgICAgICAgICAgICAgICAgICB4ID4+PSAxOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBQUklOVCgiUEFHRVMgTU9ESUZJRUQ6ICVzOiAlZCAoJWRLQilcbiIsIGFyZ3ZbMF0sIGNvdW50LCBjb3VudCAqIDQpOwotICAgIH0KLSNlbmRpZgotCi0jaWYgVElNSU5HIHx8IFNUQVRTIHx8IENPVU5UX1BBR0VTCi0gICAgZmZsdXNoKHN0ZG91dCk7Ci0jZW5kaWYKLQotICAgIFRSQUNFKCJbICU1ZCBSZWFkeSB0byBleGVjdXRlICclcycgQCAweCUwOHggXVxuIiwgcGlkLCBzaS0+bmFtZSwKLSAgICAgICAgICBzaS0+ZW50cnkpOwotICAgIHJldHVybiBzaS0+ZW50cnk7Ci19CmRpZmYgLS1naXQgYS9saW5rZXIvbGlua2VyLmNwcCBiL2xpbmtlci9saW5rZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4NmY2ZGMKLS0tIC9kZXYvbnVsbAorKysgYi9saW5rZXIvbGlua2VyLmNwcApAQCAtMCwwICsxLDE4NjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPGRsZmNuLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPGxpbnV4L2F1eHZlYy5oPgorI2luY2x1ZGUgPHB0aHJlYWQuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN5cy9hdG9taWNzLmg+CisjaW5jbHVkZSA8c3lzL21tYW4uaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorCisvLyBQcml2YXRlIEMgbGlicmFyeSBoZWFkZXJzLgorI2luY2x1ZGUgPHByaXZhdGUvYmlvbmljX3Rscy5oPgorI2luY2x1ZGUgPHByaXZhdGUvS2VybmVsQXJndW1lbnRCbG9jay5oPgorI2luY2x1ZGUgPHByaXZhdGUvU2NvcGVkUHRocmVhZE11dGV4TG9ja2VyLmg+CisKKyNpbmNsdWRlICJsaW5rZXIuaCIKKyNpbmNsdWRlICJsaW5rZXJfZGVidWcuaCIKKyNpbmNsdWRlICJsaW5rZXJfZW52aXJvbi5oIgorI2luY2x1ZGUgImxpbmtlcl9waGRyLmgiCisKKy8qIEFzc3VtZSBhdmVyYWdlIHBhdGggbGVuZ3RoIG9mIDY0IGFuZCBtYXggOCBwYXRocyAqLworI2RlZmluZSBMRFBBVEhfQlVGU0laRSA1MTIKKyNkZWZpbmUgTERQQVRIX01BWCA4CisKKyNkZWZpbmUgTERQUkVMT0FEX0JVRlNJWkUgNTEyCisjZGVmaW5lIExEUFJFTE9BRF9NQVggOAorCisvKiA+Pj4gSU1QT1JUQU5UIE5PVEUgLSBSRUFEIE1FIEJFRk9SRSBNT0RJRllJTkcgPDw8CisgKgorICogRG8gTk9UIHVzZSBtYWxsb2MoKSBhbmQgZnJpZW5kcyBvciBwdGhyZWFkXyooKSBjb2RlIGhlcmUuCisgKiBEb24ndCB1c2UgcHJpbnRmKCkgZWl0aGVyOyBpdCdzIGNhdXNlZCBteXN0ZXJpb3VzIG1lbW9yeQorICogY29ycnVwdGlvbiBpbiB0aGUgcGFzdC4KKyAqIFRoZSBsaW5rZXIgcnVucyBiZWZvcmUgd2UgYnJpbmcgdXAgbGliYyBhbmQgaXQncyBlYXNpZXN0CisgKiB0byBtYWtlIHN1cmUgaXQgZG9lcyBub3QgZGVwZW5kIG9uIGFueSBjb21wbGV4IGxpYmMgZmVhdHVyZXMKKyAqCisgKiBvcGVuIGlzc3VlcyAvIHRvZG86CisgKgorICogLSBhcmUgd2UgZG9pbmcgZXZlcnl0aGluZyB3ZSBzaG91bGQgZm9yIEFSTV9DT1BZIHJlbG9jYXRpb25zPworICogLSBjbGVhbmVyIGVycm9yIHJlcG9ydGluZworICogLSBhZnRlciBsaW5raW5nLCBzZXQgYXMgbXVjaCBzdHVmZiBhcyBwb3NzaWJsZSB0byBSRUFET05MWQorICogICBhbmQgTk9FWEVDCisgKi8KKworc3RhdGljIGJvb2wgc29pbmZvX2xpbmtfaW1hZ2Uoc29pbmZvKiBzaSk7CisKKy8vIFdlIGNhbid0IHVzZSBtYWxsb2MoMykgaW4gdGhlIGR5bmFtaWMgbGlua2VyLiBXZSB1c2UgYSBsaW5rZWQgbGlzdCBvZiBhbm9ueW1vdXMKKy8vIG1hcHMsIGVhY2ggYSBzaW5nbGUgcGFnZSBpbiBzaXplLiBUaGUgcGFnZXMgYXJlIGJyb2tlbiB1cCBpbnRvIGFzIG1hbnkgc3RydWN0IHNvaW5mbworLy8gb2JqZWN0cyBhcyB3aWxsIGZpdCwgYW5kIHRoZXkncmUgYWxsIHRocmVhZGVkIHRvZ2V0aGVyIG9uIGEgZnJlZSBsaXN0LgorI2RlZmluZSBTT0lORk9fUEVSX1BPT0wgKChQQUdFX1NJWkUgLSBzaXplb2Yoc29pbmZvX3Bvb2xfdCopKSAvIHNpemVvZihzb2luZm8pKQorc3RydWN0IHNvaW5mb19wb29sX3QgeworICBzb2luZm9fcG9vbF90KiBuZXh0OworICBzb2luZm8gaW5mb1tTT0lORk9fUEVSX1BPT0xdOworfTsKK3N0YXRpYyBzdHJ1Y3Qgc29pbmZvX3Bvb2xfdCogZ1NvSW5mb1Bvb2xzID0gTlVMTDsKK3N0YXRpYyBzb2luZm8qIGdTb0luZm9GcmVlTGlzdCA9IE5VTEw7CisKK3N0YXRpYyBzb2luZm8qIHNvbGlzdCA9ICZsaWJkbF9pbmZvOworc3RhdGljIHNvaW5mbyogc29uZXh0ID0gJmxpYmRsX2luZm87CitzdGF0aWMgc29pbmZvKiBzb21haW47IC8qIG1haW4gcHJvY2VzcywgYWx3YXlzIHRoZSBvbmUgYWZ0ZXIgbGliZGxfaW5mbyAqLworCitzdGF0aWMgY29uc3QgY2hhciogY29uc3QgZ1NvUGF0aHNbXSA9IHsKKyAgIi92ZW5kb3IvbGliIiwKKyAgIi9zeXN0ZW0vbGliIiwKKyAgTlVMTAorfTsKKworc3RhdGljIGNoYXIgZ0xkUGF0aHNCdWZmZXJbTERQQVRIX0JVRlNJWkVdOworc3RhdGljIGNvbnN0IGNoYXIqIGdMZFBhdGhzW0xEUEFUSF9NQVggKyAxXTsKKworc3RhdGljIGNoYXIgZ0xkUHJlbG9hZHNCdWZmZXJbTERQUkVMT0FEX0JVRlNJWkVdOworc3RhdGljIGNvbnN0IGNoYXIqIGdMZFByZWxvYWROYW1lc1tMRFBSRUxPQURfTUFYICsgMV07CisKK3N0YXRpYyBzb2luZm8qIGdMZFByZWxvYWRzW0xEUFJFTE9BRF9NQVggKyAxXTsKKworX19MSUJDX0hJRERFTl9fIGludCBnTGREZWJ1Z1ZlcmJvc2l0eTsKKworX19MSUJDX0hJRERFTl9fIGFib3J0X21zZ190KiBnQWJvcnRNZXNzYWdlID0gTlVMTDsgLy8gRm9yIGRlYnVnZ2VyZC4KKworZW51bSBSZWxvY2F0aW9uS2luZCB7CisgICAga1JlbG9jQWJzb2x1dGUgPSAwLAorICAgIGtSZWxvY1JlbGF0aXZlLAorICAgIGtSZWxvY0NvcHksCisgICAga1JlbG9jU3ltYm9sLAorICAgIGtSZWxvY01heAorfTsKKworI2lmIFNUQVRTCitzdHJ1Y3QgbGlua2VyX3N0YXRzX3QgeworICAgIGludCBjb3VudFtrUmVsb2NNYXhdOworfTsKKworc3RhdGljIGxpbmtlcl9zdGF0c190IGxpbmtlcl9zdGF0czsKKworc3RhdGljIHZvaWQgY291bnRfcmVsb2NhdGlvbihSZWxvY2F0aW9uS2luZCBraW5kKSB7CisgICAgKytsaW5rZXJfc3RhdHMuY291bnRba2luZF07Cit9CisjZWxzZQorc3RhdGljIHZvaWQgY291bnRfcmVsb2NhdGlvbihSZWxvY2F0aW9uS2luZCkgeworfQorI2VuZGlmCisKKyNpZiBDT1VOVF9QQUdFUworc3RhdGljIHVuc2lnbmVkIGJpdG1hc2tbNDA5Nl07CisjZGVmaW5lIE1BUksob2Zmc2V0KSBcCisgICAgZG8geyBcCisgICAgICAgIGJpdG1hc2tbKChvZmZzZXQpID4+IDEyKSA+PiAzXSB8PSAoMSA8PCAoKChvZmZzZXQpID4+IDEyKSAmIDcpKTsgXAorICAgIH0gd2hpbGUoMCkKKyNlbHNlCisjZGVmaW5lIE1BUksoeCkgZG8ge30gd2hpbGUgKDApCisjZW5kaWYKKworLy8gWW91IHNob3VsZG4ndCB0cnkgdG8gY2FsbCBtZW1vcnktYWxsb2NhdGluZyBmdW5jdGlvbnMgaW4gdGhlIGR5bmFtaWMgbGlua2VyLgorLy8gR3VhcmQgYWdhaW5zdCB0aGUgbW9zdCBvYnZpb3VzIG9uZXMuCisjZGVmaW5lIERJU0FMTE9XX0FMTE9DQVRJT04ocmV0dXJuX3R5cGUsIG5hbWUsIC4uLikgXAorICAgIHJldHVybl90eXBlIG5hbWUgX19WQV9BUkdTX18gXAorICAgIHsgXAorICAgICAgICBjb25zdCBjaGFyKiBtc2cgPSAiRVJST1I6ICIgI25hbWUgIiBjYWxsZWQgZnJvbSB0aGUgZHluYW1pYyBsaW5rZXIhXG4iOyBcCisgICAgICAgIF9fbGliY19mb3JtYXRfbG9nKEFORFJPSURfTE9HX0ZBVEFMLCAibGlua2VyIiwgIiVzIiwgbXNnKTsgXAorICAgICAgICB3cml0ZSgyLCBtc2csIHN0cmxlbihtc2cpKTsgXAorICAgICAgICBhYm9ydCgpOyBcCisgICAgfQorI2RlZmluZSBVTlVTRUQgX19hdHRyaWJ1dGVfXygodW51c2VkKSkKK0RJU0FMTE9XX0FMTE9DQVRJT04odm9pZCosIG1hbGxvYywgKHNpemVfdCB1IFVOVVNFRCkpOworRElTQUxMT1dfQUxMT0NBVElPTih2b2lkLCBmcmVlLCAodm9pZCogdSBVTlVTRUQpKTsKK0RJU0FMTE9XX0FMTE9DQVRJT04odm9pZCosIHJlYWxsb2MsICh2b2lkKiB1MSBVTlVTRUQsIHNpemVfdCB1MiBVTlVTRUQpKTsKK0RJU0FMTE9XX0FMTE9DQVRJT04odm9pZCosIGNhbGxvYywgKHNpemVfdCB1MSBVTlVTRUQsIHNpemVfdCB1MiBVTlVTRUQpKTsKKworc3RhdGljIGNoYXIgdG1wX2Vycl9idWZbNzY4XTsKK3N0YXRpYyBjaGFyIF9fbGlua2VyX2RsX2Vycl9idWZbNzY4XTsKKworY2hhciogbGlua2VyX2dldF9lcnJvcl9idWZmZXIoKSB7CisgIHJldHVybiAmX19saW5rZXJfZGxfZXJyX2J1ZlswXTsKK30KKworc2l6ZV90IGxpbmtlcl9nZXRfZXJyb3JfYnVmZmVyX3NpemUoKSB7CisgIHJldHVybiBzaXplb2YoX19saW5rZXJfZGxfZXJyX2J1Zik7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGFuIGVtcHR5IHN0dWIgd2hlcmUgR0RCIGxvY2F0ZXMgYSBicmVha3BvaW50IHRvIGdldCBub3RpZmllZAorICogYWJvdXQgbGlua2VyIGFjdGl2aXR5LgorICovCitleHRlcm4gIkMiIHZvaWQgX19hdHRyaWJ1dGVfXygobm9pbmxpbmUpKSBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJkZWZhdWx0IikpKSBydGxkX2RiX2RsYWN0aXZpdHkoKTsKKworc3RhdGljIHJfZGVidWcgX3JfZGVidWcgPSB7MSwgTlVMTCwgJnJ0bGRfZGJfZGxhY3Rpdml0eSwgUlRfQ09OU0lTVEVOVCwgMH07CitzdGF0aWMgbGlua19tYXBfdCogcl9kZWJ1Z190YWlsID0gMDsKKworc3RhdGljIHB0aHJlYWRfbXV0ZXhfdCBnRGVidWdNdXRleCA9IFBUSFJFQURfTVVURVhfSU5JVElBTElaRVI7CisKK3N0YXRpYyB2b2lkIGluc2VydF9zb2luZm9faW50b19kZWJ1Z19tYXAoc29pbmZvICogaW5mbykgeworICAgIC8vIENvcHkgdGhlIG5lY2Vzc2FyeSBmaWVsZHMgaW50byB0aGUgZGVidWcgc3RydWN0dXJlLgorICAgIGxpbmtfbWFwX3QqIG1hcCA9ICYoaW5mby0+bGlua19tYXApOworICAgIG1hcC0+bF9hZGRyID0gaW5mby0+YmFzZTsKKyAgICBtYXAtPmxfbmFtZSA9IChjaGFyKikgaW5mby0+bmFtZTsKKyAgICBtYXAtPmxfbGQgPSAodWludHB0cl90KWluZm8tPmR5bmFtaWM7CisKKyAgICAvKiBTdGljayB0aGUgbmV3IGxpYnJhcnkgYXQgdGhlIGVuZCBvZiB0aGUgbGlzdC4KKyAgICAgKiBnZGIgdGVuZHMgdG8gY2FyZSBtb3JlIGFib3V0IGxpYmMgdGhhbiBpdCBkb2VzCisgICAgICogYWJvdXQgbGVhZiBsaWJyYXJpZXMsIGFuZCBvcmRlcmluZyBpdCB0aGlzIHdheQorICAgICAqIHJlZHVjZXMgdGhlIGJhY2stYW5kLWZvcnRoIG92ZXIgdGhlIHdpcmUuCisgICAgICovCisgICAgaWYgKHJfZGVidWdfdGFpbCkgeworICAgICAgICByX2RlYnVnX3RhaWwtPmxfbmV4dCA9IG1hcDsKKyAgICAgICAgbWFwLT5sX3ByZXYgPSByX2RlYnVnX3RhaWw7CisgICAgICAgIG1hcC0+bF9uZXh0ID0gMDsKKyAgICB9IGVsc2UgeworICAgICAgICBfcl9kZWJ1Zy5yX21hcCA9IG1hcDsKKyAgICAgICAgbWFwLT5sX3ByZXYgPSAwOworICAgICAgICBtYXAtPmxfbmV4dCA9IDA7CisgICAgfQorICAgIHJfZGVidWdfdGFpbCA9IG1hcDsKK30KKworc3RhdGljIHZvaWQgcmVtb3ZlX3NvaW5mb19mcm9tX2RlYnVnX21hcChzb2luZm8qIGluZm8pIHsKKyAgICBsaW5rX21hcF90KiBtYXAgPSAmKGluZm8tPmxpbmtfbWFwKTsKKworICAgIGlmIChyX2RlYnVnX3RhaWwgPT0gbWFwKSB7CisgICAgICAgIHJfZGVidWdfdGFpbCA9IG1hcC0+bF9wcmV2OworICAgIH0KKworICAgIGlmIChtYXAtPmxfcHJldikgeworICAgICAgICBtYXAtPmxfcHJldi0+bF9uZXh0ID0gbWFwLT5sX25leHQ7CisgICAgfQorICAgIGlmIChtYXAtPmxfbmV4dCkgeworICAgICAgICBtYXAtPmxfbmV4dC0+bF9wcmV2ID0gbWFwLT5sX3ByZXY7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBub3RpZnlfZ2RiX29mX2xvYWQoc29pbmZvKiBpbmZvKSB7CisgICAgaWYgKGluZm8tPmZsYWdzICYgRkxBR19FWEUpIHsKKyAgICAgICAgLy8gR0RCIGFscmVhZHkga25vd3MgYWJvdXQgdGhlIG1haW4gZXhlY3V0YWJsZQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgU2NvcGVkUHRocmVhZE11dGV4TG9ja2VyIGxvY2tlcigmZ0RlYnVnTXV0ZXgpOworCisgICAgX3JfZGVidWcucl9zdGF0ZSA9IFJUX0FERDsKKyAgICBydGxkX2RiX2RsYWN0aXZpdHkoKTsKKworICAgIGluc2VydF9zb2luZm9faW50b19kZWJ1Z19tYXAoaW5mbyk7CisKKyAgICBfcl9kZWJ1Zy5yX3N0YXRlID0gUlRfQ09OU0lTVEVOVDsKKyAgICBydGxkX2RiX2RsYWN0aXZpdHkoKTsKK30KKworc3RhdGljIHZvaWQgbm90aWZ5X2dkYl9vZl91bmxvYWQoc29pbmZvKiBpbmZvKSB7CisgICAgaWYgKGluZm8tPmZsYWdzICYgRkxBR19FWEUpIHsKKyAgICAgICAgLy8gR0RCIGFscmVhZHkga25vd3MgYWJvdXQgdGhlIG1haW4gZXhlY3V0YWJsZQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgU2NvcGVkUHRocmVhZE11dGV4TG9ja2VyIGxvY2tlcigmZ0RlYnVnTXV0ZXgpOworCisgICAgX3JfZGVidWcucl9zdGF0ZSA9IFJUX0RFTEVURTsKKyAgICBydGxkX2RiX2RsYWN0aXZpdHkoKTsKKworICAgIHJlbW92ZV9zb2luZm9fZnJvbV9kZWJ1Z19tYXAoaW5mbyk7CisKKyAgICBfcl9kZWJ1Zy5yX3N0YXRlID0gUlRfQ09OU0lTVEVOVDsKKyAgICBydGxkX2RiX2RsYWN0aXZpdHkoKTsKK30KKwordm9pZCBub3RpZnlfZ2RiX29mX2xpYnJhcmllcygpIHsKKyAgICBfcl9kZWJ1Zy5yX3N0YXRlID0gUlRfQUREOworICAgIHJ0bGRfZGJfZGxhY3Rpdml0eSgpOworICAgIF9yX2RlYnVnLnJfc3RhdGUgPSBSVF9DT05TSVNURU5UOworICAgIHJ0bGRfZGJfZGxhY3Rpdml0eSgpOworfQorCitzdGF0aWMgYm9vbCBlbnN1cmVfZnJlZV9saXN0X25vbl9lbXB0eSgpIHsKKyAgaWYgKGdTb0luZm9GcmVlTGlzdCAhPSBOVUxMKSB7CisgICAgcmV0dXJuIHRydWU7CisgIH0KKworICAvLyBBbGxvY2F0ZSBhIG5ldyBwb29sLgorICBzb2luZm9fcG9vbF90KiBwb29sID0gcmVpbnRlcnByZXRfY2FzdDxzb2luZm9fcG9vbF90Kj4obW1hcChOVUxMLCBzaXplb2YoKnBvb2wpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9UX1JFQUR8UFJPVF9XUklURSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUFQX1BSSVZBVEV8TUFQX0FOT05ZTU9VUywgMCwgMCkpOworICBpZiAocG9vbCA9PSBNQVBfRkFJTEVEKSB7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisKKyAgLy8gQWRkIHRoZSBwb29sIHRvIG91ciBsaXN0IG9mIHBvb2xzLgorICBwb29sLT5uZXh0ID0gZ1NvSW5mb1Bvb2xzOworICBnU29JbmZvUG9vbHMgPSBwb29sOworCisgIC8vIENoYWluIHRoZSBlbnRyaWVzIGluIHRoZSBuZXcgcG9vbCBvbnRvIHRoZSBmcmVlIGxpc3QuCisgIGdTb0luZm9GcmVlTGlzdCA9ICZwb29sLT5pbmZvWzBdOworICBzb2luZm8qIG5leHQgPSBOVUxMOworICBmb3IgKGludCBpID0gU09JTkZPX1BFUl9QT09MIC0gMTsgaSA+PSAwOyAtLWkpIHsKKyAgICBwb29sLT5pbmZvW2ldLm5leHQgPSBuZXh0OworICAgIG5leHQgPSAmcG9vbC0+aW5mb1tpXTsKKyAgfQorCisgIHJldHVybiB0cnVlOworfQorCitzdGF0aWMgdm9pZCBzZXRfc29pbmZvX3Bvb2xfcHJvdGVjdGlvbihpbnQgcHJvdGVjdGlvbikgeworICBmb3IgKHNvaW5mb19wb29sX3QqIHAgPSBnU29JbmZvUG9vbHM7IHAgIT0gTlVMTDsgcCA9IHAtPm5leHQpIHsKKyAgICBpZiAobXByb3RlY3QocCwgc2l6ZW9mKCpwKSwgcHJvdGVjdGlvbikgPT0gLTEpIHsKKyAgICAgIGFib3J0KCk7IC8vIENhbid0IGhhcHBlbi4KKyAgICB9CisgIH0KK30KKworc3RhdGljIHNvaW5mbyogc29pbmZvX2FsbG9jKGNvbnN0IGNoYXIqIG5hbWUpIHsKKyAgaWYgKHN0cmxlbihuYW1lKSA+PSBTT0lORk9fTkFNRV9MRU4pIHsKKyAgICBETF9FUlIoImxpYnJhcnkgbmFtZSBcIiVzXCIgdG9vIGxvbmciLCBuYW1lKTsKKyAgICByZXR1cm4gTlVMTDsKKyAgfQorCisgIGlmICghZW5zdXJlX2ZyZWVfbGlzdF9ub25fZW1wdHkoKSkgeworICAgIERMX0VSUigib3V0IG9mIG1lbW9yeSB3aGVuIGxvYWRpbmcgXCIlc1wiIiwgbmFtZSk7CisgICAgcmV0dXJuIE5VTEw7CisgIH0KKworICAvLyBUYWtlIHRoZSBoZWFkIGVsZW1lbnQgb2ZmIHRoZSBmcmVlIGxpc3QuCisgIHNvaW5mbyogc2kgPSBnU29JbmZvRnJlZUxpc3Q7CisgIGdTb0luZm9GcmVlTGlzdCA9IGdTb0luZm9GcmVlTGlzdC0+bmV4dDsKKworICAvLyBJbml0aWFsaXplIHRoZSBuZXcgZWxlbWVudC4KKyAgbWVtc2V0KHNpLCAwLCBzaXplb2Yoc29pbmZvKSk7CisgIHN0cmxjcHkoc2ktPm5hbWUsIG5hbWUsIHNpemVvZihzaS0+bmFtZSkpOworICBzb25leHQtPm5leHQgPSBzaTsKKyAgc29uZXh0ID0gc2k7CisKKyAgVFJBQ0UoIm5hbWUgJXM6IGFsbG9jYXRlZCBzb2luZm8gQCAlcCIsIG5hbWUsIHNpKTsKKyAgcmV0dXJuIHNpOworfQorCitzdGF0aWMgdm9pZCBzb2luZm9fZnJlZShzb2luZm8qIHNpKQoreworICAgIGlmIChzaSA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBzb2luZm8gKnByZXYgPSBOVUxMLCAqdHJhdjsKKworICAgIFRSQUNFKCJuYW1lICVzOiBmcmVlaW5nIHNvaW5mbyBAICVwIiwgc2ktPm5hbWUsIHNpKTsKKworICAgIGZvciAodHJhdiA9IHNvbGlzdDsgdHJhdiAhPSBOVUxMOyB0cmF2ID0gdHJhdi0+bmV4dCkgeworICAgICAgICBpZiAodHJhdiA9PSBzaSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBwcmV2ID0gdHJhdjsKKyAgICB9CisgICAgaWYgKHRyYXYgPT0gTlVMTCkgeworICAgICAgICAvKiBzaSB3YXMgbm90IGluIHNvbGlzdCAqLworICAgICAgICBETF9FUlIoIm5hbWUgXCIlc1wiIGlzIG5vdCBpbiBzb2xpc3QhIiwgc2ktPm5hbWUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLyogcHJldiB3aWxsIG5ldmVyIGJlIE5VTEwsIGJlY2F1c2UgdGhlIGZpcnN0IGVudHJ5IGluIHNvbGlzdCBpcworICAgICAgIGFsd2F5cyB0aGUgc3RhdGljIGxpYmRsX2luZm8uCisgICAgKi8KKyAgICBwcmV2LT5uZXh0ID0gc2ktPm5leHQ7CisgICAgaWYgKHNpID09IHNvbmV4dCkgeworICAgICAgICBzb25leHQgPSBwcmV2OworICAgIH0KKyAgICBzaS0+bmV4dCA9IGdTb0luZm9GcmVlTGlzdDsKKyAgICBnU29JbmZvRnJlZUxpc3QgPSBzaTsKK30KKworCitzdGF0aWMgdm9pZCBwYXJzZV9wYXRoKGNvbnN0IGNoYXIqIHBhdGgsIGNvbnN0IGNoYXIqIGRlbGltaXRlcnMsCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqKiBhcnJheSwgY2hhciogYnVmLCBzaXplX3QgYnVmX3NpemUsIHNpemVfdCBtYXhfY291bnQpIHsKKyAgaWYgKHBhdGggPT0gTlVMTCkgeworICAgIHJldHVybjsKKyAgfQorCisgIHNpemVfdCBsZW4gPSBzdHJsY3B5KGJ1ZiwgcGF0aCwgYnVmX3NpemUpOworCisgIHNpemVfdCBpID0gMDsKKyAgY2hhciogYnVmX3AgPSBidWY7CisgIHdoaWxlIChpIDwgbWF4X2NvdW50ICYmIChhcnJheVtpXSA9IHN0cnNlcCgmYnVmX3AsIGRlbGltaXRlcnMpKSkgeworICAgIGlmICgqYXJyYXlbaV0gIT0gJ1wwJykgeworICAgICAgKytpOworICAgIH0KKyAgfQorCisgIC8vIEZvcmdldCB0aGUgbGFzdCBwYXRoIGlmIHdlIGhhZCB0byB0cnVuY2F0ZTsgdGhpcyBvY2N1cnMgaWYgdGhlIDJuZCB0bworICAvLyBsYXN0IGNoYXIgaXNuJ3QgJ1wwJyAoaS5lLiB3YXNuJ3Qgb3JpZ2luYWxseSBhIGRlbGltaXRlcikuCisgIGlmIChpID4gMCAmJiBsZW4gPj0gYnVmX3NpemUgJiYgYnVmW2J1Zl9zaXplIC0gMl0gIT0gJ1wwJykgeworICAgIGFycmF5W2kgLSAxXSA9IE5VTEw7CisgIH0gZWxzZSB7CisgICAgYXJyYXlbaV0gPSBOVUxMOworICB9Cit9CisKK3N0YXRpYyB2b2lkIHBhcnNlX0xEX0xJQlJBUllfUEFUSChjb25zdCBjaGFyKiBwYXRoKSB7CisgIHBhcnNlX3BhdGgocGF0aCwgIjoiLCBnTGRQYXRocywKKyAgICAgICAgICAgICBnTGRQYXRoc0J1ZmZlciwgc2l6ZW9mKGdMZFBhdGhzQnVmZmVyKSwgTERQQVRIX01BWCk7Cit9CisKK3N0YXRpYyB2b2lkIHBhcnNlX0xEX1BSRUxPQUQoY29uc3QgY2hhciogcGF0aCkgeworICAvLyBXZSBoYXZlIGhpc3RvcmljYWxseSBzdXBwb3J0ZWQgJzonIGFzIHdlbGwgYXMgJyAnIGluIExEX1BSRUxPQUQuCisgIHBhcnNlX3BhdGgocGF0aCwgIiA6IiwgZ0xkUHJlbG9hZE5hbWVzLAorICAgICAgICAgICAgIGdMZFByZWxvYWRzQnVmZmVyLCBzaXplb2YoZ0xkUHJlbG9hZHNCdWZmZXIpLCBMRFBSRUxPQURfTUFYKTsKK30KKworI2lmZGVmIEFORFJPSURfQVJNX0xJTktFUgorCisvKiBGb3IgYSBnaXZlbiBQQywgZmluZCB0aGUgLnNvIHRoYXQgaXQgYmVsb25ncyB0by4KKyAqIFJldHVybnMgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgLkFSTS5leGlkeCBzZWN0aW9uCisgKiBmb3IgdGhhdCAuc28sIGFuZCB0aGUgbnVtYmVyIG9mIDgtYnl0ZSBlbnRyaWVzCisgKiBpbiB0aGF0IHNlY3Rpb24gKHZpYSAqcGNvdW50KS4KKyAqCisgKiBJbnRlbmRlZCB0byBiZSBjYWxsZWQgYnkgbGliYydzIF9fZ251X1Vud2luZF9GaW5kX2V4aWR4KCkuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBleHBvc2VkIHZpYSBkbGZjbi5jcHAgYW5kIGxpYmRsLnNvLgorICovCitfVW53aW5kX1B0ciBkbF91bndpbmRfZmluZF9leGlkeChfVW53aW5kX1B0ciBwYywgaW50ICpwY291bnQpCit7CisgICAgc29pbmZvICpzaTsKKyAgICB1bnNpZ25lZCBhZGRyID0gKHVuc2lnbmVkKXBjOworCisgICAgZm9yIChzaSA9IHNvbGlzdDsgc2kgIT0gMDsgc2kgPSBzaS0+bmV4dCl7CisgICAgICAgIGlmICgoYWRkciA+PSBzaS0+YmFzZSkgJiYgKGFkZHIgPCAoc2ktPmJhc2UgKyBzaS0+c2l6ZSkpKSB7CisgICAgICAgICAgICAqcGNvdW50ID0gc2ktPkFSTV9leGlkeF9jb3VudDsKKyAgICAgICAgICAgIHJldHVybiAoX1Vud2luZF9QdHIpc2ktPkFSTV9leGlkeDsKKyAgICAgICAgfQorICAgIH0KKyAgICpwY291bnQgPSAwOworICAgIHJldHVybiBOVUxMOworfQorCisjZWxpZiBkZWZpbmVkKEFORFJPSURfWDg2X0xJTktFUikgfHwgZGVmaW5lZChBTkRST0lEX01JUFNfTElOS0VSKQorCisvKiBIZXJlLCB3ZSBvbmx5IGhhdmUgdG8gcHJvdmlkZSBhIGNhbGxiYWNrIHRvIGl0ZXJhdGUgYWNyb3NzIGFsbCB0aGUKKyAqIGxvYWRlZCBsaWJyYXJpZXMuIGdjY19laCBkb2VzIHRoZSByZXN0LiAqLworaW50CitkbF9pdGVyYXRlX3BoZHIoaW50ICgqY2IpKGRsX3BoZHJfaW5mbyAqaW5mbywgc2l6ZV90IHNpemUsIHZvaWQgKmRhdGEpLAorICAgICAgICAgICAgICAgIHZvaWQgKmRhdGEpCit7CisgICAgaW50IHJ2ID0gMDsKKyAgICBmb3IgKHNvaW5mbyogc2kgPSBzb2xpc3Q7IHNpICE9IE5VTEw7IHNpID0gc2ktPm5leHQpIHsKKyAgICAgICAgZGxfcGhkcl9pbmZvIGRsX2luZm87CisgICAgICAgIGRsX2luZm8uZGxwaV9hZGRyID0gc2ktPmxpbmtfbWFwLmxfYWRkcjsKKyAgICAgICAgZGxfaW5mby5kbHBpX25hbWUgPSBzaS0+bGlua19tYXAubF9uYW1lOworICAgICAgICBkbF9pbmZvLmRscGlfcGhkciA9IHNpLT5waGRyOworICAgICAgICBkbF9pbmZvLmRscGlfcGhudW0gPSBzaS0+cGhudW07CisgICAgICAgIHJ2ID0gY2IoJmRsX2luZm8sIHNpemVvZihkbF9waGRyX2luZm8pLCBkYXRhKTsKKyAgICAgICAgaWYgKHJ2ICE9IDApIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBydjsKK30KKworI2VuZGlmCisKK3N0YXRpYyBFbGYzMl9TeW0qIHNvaW5mb19lbGZfbG9va3VwKHNvaW5mbyogc2ksIHVuc2lnbmVkIGhhc2gsIGNvbnN0IGNoYXIqIG5hbWUpIHsKKyAgICBFbGYzMl9TeW0qIHN5bXRhYiA9IHNpLT5zeW10YWI7CisgICAgY29uc3QgY2hhciogc3RydGFiID0gc2ktPnN0cnRhYjsKKworICAgIFRSQUNFX1RZUEUoTE9PS1VQLCAiU0VBUkNIICVzIGluICVzQDB4JTA4eCAlMDh4ICVkIiwKKyAgICAgICAgICAgICAgIG5hbWUsIHNpLT5uYW1lLCBzaS0+YmFzZSwgaGFzaCwgaGFzaCAlIHNpLT5uYnVja2V0KTsKKworICAgIGZvciAodW5zaWduZWQgbiA9IHNpLT5idWNrZXRbaGFzaCAlIHNpLT5uYnVja2V0XTsgbiAhPSAwOyBuID0gc2ktPmNoYWluW25dKSB7CisgICAgICAgIEVsZjMyX1N5bSogcyA9IHN5bXRhYiArIG47CisgICAgICAgIGlmIChzdHJjbXAoc3RydGFiICsgcy0+c3RfbmFtZSwgbmFtZSkpIGNvbnRpbnVlOworCisgICAgICAgICAgICAvKiBvbmx5IGNvbmNlcm4gb3Vyc2VsdmVzIHdpdGggZ2xvYmFsIGFuZCB3ZWFrIHN5bWJvbCBkZWZpbml0aW9ucyAqLworICAgICAgICBzd2l0Y2goRUxGMzJfU1RfQklORChzLT5zdF9pbmZvKSl7CisgICAgICAgIGNhc2UgU1RCX0dMT0JBTDoKKyAgICAgICAgY2FzZSBTVEJfV0VBSzoKKyAgICAgICAgICAgIGlmIChzLT5zdF9zaG5keCA9PSBTSE5fVU5ERUYpIHsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgVFJBQ0VfVFlQRShMT09LVVAsICJGT1VORCAlcyBpbiAlcyAoJTA4eCkgJWQiLAorICAgICAgICAgICAgICAgICAgICAgICBuYW1lLCBzaS0+bmFtZSwgcy0+c3RfdmFsdWUsIHMtPnN0X3NpemUpOworICAgICAgICAgICAgcmV0dXJuIHM7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHVuc2lnbmVkIGVsZmhhc2goY29uc3QgY2hhciogX25hbWUpIHsKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBuYW1lID0gKGNvbnN0IHVuc2lnbmVkIGNoYXIqKSBfbmFtZTsKKyAgICB1bnNpZ25lZCBoID0gMCwgZzsKKworICAgIHdoaWxlKCpuYW1lKSB7CisgICAgICAgIGggPSAoaCA8PCA0KSArICpuYW1lKys7CisgICAgICAgIGcgPSBoICYgMHhmMDAwMDAwMDsKKyAgICAgICAgaCBePSBnOworICAgICAgICBoIF49IGcgPj4gMjQ7CisgICAgfQorICAgIHJldHVybiBoOworfQorCitzdGF0aWMgRWxmMzJfU3ltKiBzb2luZm9fZG9fbG9va3VwKHNvaW5mbyogc2ksIGNvbnN0IGNoYXIqIG5hbWUsIHNvaW5mbyoqIGxzaSwgc29pbmZvKiBuZWVkZWRbXSkgeworICAgIHVuc2lnbmVkIGVsZl9oYXNoID0gZWxmaGFzaChuYW1lKTsKKyAgICBFbGYzMl9TeW0qIHMgPSBOVUxMOworCisgICAgaWYgKHNpICE9IE5VTEwgJiYgc29tYWluICE9IE5VTEwpIHsKKworICAgICAgICAvKgorICAgICAgICAgKiBMb2NhbCBzY29wZSBpcyBleGVjdXRhYmxlIHNjb3BlLiBKdXN0IHN0YXJ0IGxvb2tpbmcgaW50byBpdCByaWdodCBhd2F5CisgICAgICAgICAqIGZvciB0aGUgc2hvcnRjdXQuCisgICAgICAgICAqLworCisgICAgICAgIGlmIChzaSA9PSBzb21haW4pIHsKKyAgICAgICAgICAgIHMgPSBzb2luZm9fZWxmX2xvb2t1cChzaSwgZWxmX2hhc2gsIG5hbWUpOworICAgICAgICAgICAgaWYgKHMgIT0gTlVMTCkgeworICAgICAgICAgICAgICAgICpsc2kgPSBzaTsKKyAgICAgICAgICAgICAgICBnb3RvIGRvbmU7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvKiBPcmRlciBvZiBzeW1ib2wgbG9va3VwIGlzIGNvbnRyb2xsZWQgYnkgRFRfU1lNQk9MSUMgZmxhZyAqLworCisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogSWYgdGhpcyBvYmplY3Qgd2FzIGJ1aWx0IHdpdGggc3ltYm9saWMgcmVsb2NhdGlvbnMgZGlzYWJsZWQsIHRoZQorICAgICAgICAgICAgICogZmlyc3QgcGxhY2UgdG8gbG9vayB0byByZXNvbHZlIGV4dGVybmFsIHJlZmVyZW5jZXMgaXMgdGhlIG1haW4KKyAgICAgICAgICAgICAqIGV4ZWN1dGFibGUuCisgICAgICAgICAgICAgKi8KKworICAgICAgICAgICAgaWYgKCFzaS0+aGFzX0RUX1NZTUJPTElDKSB7CisgICAgICAgICAgICAgICAgREVCVUcoIiVzOiBsb29raW5nIHVwICVzIGluIGV4ZWN1dGFibGUgJXMiLAorICAgICAgICAgICAgICAgICAgICAgIHNpLT5uYW1lLCBuYW1lLCBzb21haW4tPm5hbWUpOworICAgICAgICAgICAgICAgIHMgPSBzb2luZm9fZWxmX2xvb2t1cChzb21haW4sIGVsZl9oYXNoLCBuYW1lKTsKKyAgICAgICAgICAgICAgICBpZiAocyAhPSBOVUxMKSB7CisgICAgICAgICAgICAgICAgICAgICpsc2kgPSBzb21haW47CisgICAgICAgICAgICAgICAgICAgIGdvdG8gZG9uZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8qIExvb2sgZm9yIHN5bWJvbHMgaW4gdGhlIGxvY2FsIHNjb3BlICh0aGUgb2JqZWN0IHdobyBpcworICAgICAgICAgICAgICogc2VhcmNoaW5nKS4gVGhpcyBoYXBwZW5zIHdpdGggQysrIHRlbXBsYXRlcyBvbiBpMzg2IGZvciBzb21lCisgICAgICAgICAgICAgKiByZWFzb24uCisgICAgICAgICAgICAgKgorICAgICAgICAgICAgICogTm90ZXMgb24gd2VhayBzeW1ib2xzOgorICAgICAgICAgICAgICogVGhlIEVMRiBzcGVjcyBhcmUgYW1iaWd1b3VzIGFib3V0IHRyZWF0bWVudCBvZiB3ZWFrIGRlZmluaXRpb25zIGluCisgICAgICAgICAgICAgKiBkeW5hbWljIGxpbmtpbmcuICBTb21lIHN5c3RlbXMgcmV0dXJuIHRoZSBmaXJzdCBkZWZpbml0aW9uIGZvdW5kCisgICAgICAgICAgICAgKiBhbmQgc29tZSB0aGUgZmlyc3Qgbm9uLXdlYWsgZGVmaW5pdGlvbi4gICBUaGlzIGlzIHN5c3RlbSBkZXBlbmRlbnQuCisgICAgICAgICAgICAgKiBIZXJlIHdlIHJldHVybiB0aGUgZmlyc3QgZGVmaW5pdGlvbiBmb3VuZCBmb3Igc2ltcGxpY2l0eS4gICovCisKKyAgICAgICAgICAgIHMgPSBzb2luZm9fZWxmX2xvb2t1cChzaSwgZWxmX2hhc2gsIG5hbWUpOworICAgICAgICAgICAgaWYgKHMgIT0gTlVMTCkgeworICAgICAgICAgICAgICAgICpsc2kgPSBzaTsKKyAgICAgICAgICAgICAgICBnb3RvIGRvbmU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiBJZiB0aGlzIG9iamVjdCB3YXMgYnVpbHQgd2l0aCAtQnN5bWJvbGljIGFuZCBzeW1ib2wgaXMgbm90IGZvdW5kCisgICAgICAgICAgICAgKiBpbiB0aGUgbG9jYWwgc2NvcGUsIHRyeSB0byBmaW5kIHRoZSBzeW1ib2wgaW4gdGhlIG1haW4gZXhlY3V0YWJsZS4KKyAgICAgICAgICAgICAqLworCisgICAgICAgICAgICBpZiAoc2ktPmhhc19EVF9TWU1CT0xJQykgeworICAgICAgICAgICAgICAgIERFQlVHKCIlczogbG9va2luZyB1cCAlcyBpbiBleGVjdXRhYmxlICVzIGFmdGVyIGxvY2FsIHNjb3BlIiwKKyAgICAgICAgICAgICAgICAgICAgICBzaS0+bmFtZSwgbmFtZSwgc29tYWluLT5uYW1lKTsKKyAgICAgICAgICAgICAgICBzID0gc29pbmZvX2VsZl9sb29rdXAoc29tYWluLCBlbGZfaGFzaCwgbmFtZSk7CisgICAgICAgICAgICAgICAgaWYgKHMgIT0gTlVMTCkgeworICAgICAgICAgICAgICAgICAgICAqbHNpID0gc29tYWluOworICAgICAgICAgICAgICAgICAgICBnb3RvIGRvbmU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLyogTmV4dCwgbG9vayBmb3IgaXQgaW4gdGhlIHByZWxvYWRzIGxpc3QgKi8KKyAgICBmb3IgKGludCBpID0gMDsgZ0xkUHJlbG9hZHNbaV0gIT0gTlVMTDsgaSsrKSB7CisgICAgICAgIHMgPSBzb2luZm9fZWxmX2xvb2t1cChnTGRQcmVsb2Fkc1tpXSwgZWxmX2hhc2gsIG5hbWUpOworICAgICAgICBpZiAocyAhPSBOVUxMKSB7CisgICAgICAgICAgICAqbHNpID0gZ0xkUHJlbG9hZHNbaV07CisgICAgICAgICAgICBnb3RvIGRvbmU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKGludCBpID0gMDsgbmVlZGVkW2ldICE9IE5VTEw7IGkrKykgeworICAgICAgICBERUJVRygiJXM6IGxvb2tpbmcgdXAgJXMgaW4gJXMiLAorICAgICAgICAgICAgICBzaS0+bmFtZSwgbmFtZSwgbmVlZGVkW2ldLT5uYW1lKTsKKyAgICAgICAgcyA9IHNvaW5mb19lbGZfbG9va3VwKG5lZWRlZFtpXSwgZWxmX2hhc2gsIG5hbWUpOworICAgICAgICBpZiAocyAhPSBOVUxMKSB7CisgICAgICAgICAgICAqbHNpID0gbmVlZGVkW2ldOworICAgICAgICAgICAgZ290byBkb25lOworICAgICAgICB9CisgICAgfQorCitkb25lOgorICAgIGlmIChzICE9IE5VTEwpIHsKKyAgICAgICAgVFJBQ0VfVFlQRShMT09LVVAsICJzaSAlcyBzeW0gJXMgcy0+c3RfdmFsdWUgPSAweCUwOHgsICIKKyAgICAgICAgICAgICAgICAgICAiZm91bmQgaW4gJXMsIGJhc2UgPSAweCUwOHgsIGxvYWQgYmlhcyA9IDB4JTA4eCIsCisgICAgICAgICAgICAgICAgICAgc2ktPm5hbWUsIG5hbWUsIHMtPnN0X3ZhbHVlLAorICAgICAgICAgICAgICAgICAgICgqbHNpKS0+bmFtZSwgKCpsc2kpLT5iYXNlLCAoKmxzaSktPmxvYWRfYmlhcyk7CisgICAgICAgIHJldHVybiBzOworICAgIH0KKworICAgIHJldHVybiBOVUxMOworfQorCisvKiBUaGlzIGlzIHVzZWQgYnkgZGxzeW0oMykuICBJdCBwZXJmb3JtcyBzeW1ib2wgbG9va3VwIG9ubHkgd2l0aGluIHRoZQorICAgc3BlY2lmaWVkIHNvaW5mbyBvYmplY3QgYW5kIG5vdCBpbiBhbnkgb2YgaXRzIGRlcGVuZGVuY2llcy4KKworICAgVE9ETzogT25seSBsb29raW5nIGluIHRoZSBzcGVjaWZpZWQgc29pbmZvIHNlZW1zIHdyb25nLiBkbHN5bSgzKSBzYXlzCisgICB0aGF0IGl0IHNob3VsZCBkbyBhIGJyZWFkdGggZmlyc3Qgc2VhcmNoIHRocm91Z2ggdGhlIGRlcGVuZGVuY3kKKyAgIHRyZWUuIFRoaXMgYWdyZWVzIHdpdGggdGhlIEVMRiBzcGVjIChha2EgU3lzdGVtIFYgQXBwbGljYXRpb24KKyAgIEJpbmFyeSBJbnRlcmZhY2UpIHdoZXJlIGluIENoYXB0ZXIgNSBpdCBkaXNjdXNzIHJlc29sdmluZyAiU2hhcmVkCisgICBPYmplY3QgRGVwZW5kZW5jaWVzIiBpbiBicmVhZHRoIGZpcnN0IHNlYXJjaCBvcmRlci4KKyAqLworRWxmMzJfU3ltKiBkbHN5bV9oYW5kbGVfbG9va3VwKHNvaW5mbyogc2ksIGNvbnN0IGNoYXIqIG5hbWUpCit7CisgICAgcmV0dXJuIHNvaW5mb19lbGZfbG9va3VwKHNpLCBlbGZoYXNoKG5hbWUpLCBuYW1lKTsKK30KKworLyogVGhpcyBpcyB1c2VkIGJ5IGRsc3ltKDMpIHRvIHBlcmZvcm1zIGEgZ2xvYmFsIHN5bWJvbCBsb29rdXAuIElmIHRoZQorICAgc3RhcnQgdmFsdWUgaXMgbnVsbCAoZm9yIFJUTERfREVGQVVMVCksIHRoZSBzZWFyY2ggc3RhcnRzIGF0IHRoZQorICAgYmVnaW5uaW5nIG9mIHRoZSBnbG9iYWwgc29saXN0LiBPdGhlcndpc2UgdGhlIHNlYXJjaCBzdGFydHMgYXQgdGhlCisgICBzcGVjaWZpZWQgc29pbmZvIChmb3IgUlRMRF9ORVhUKS4KKyAqLworRWxmMzJfU3ltKiBkbHN5bV9saW5lYXJfbG9va3VwKGNvbnN0IGNoYXIqIG5hbWUsIHNvaW5mbyoqIGZvdW5kLCBzb2luZm8qIHN0YXJ0KSB7CisgIHVuc2lnbmVkIGVsZl9oYXNoID0gZWxmaGFzaChuYW1lKTsKKworICBpZiAoc3RhcnQgPT0gTlVMTCkgeworICAgIHN0YXJ0ID0gc29saXN0OworICB9CisKKyAgRWxmMzJfU3ltKiBzID0gTlVMTDsKKyAgZm9yIChzb2luZm8qIHNpID0gc3RhcnQ7IChzID09IE5VTEwpICYmIChzaSAhPSBOVUxMKTsgc2kgPSBzaS0+bmV4dCkgeworICAgIHMgPSBzb2luZm9fZWxmX2xvb2t1cChzaSwgZWxmX2hhc2gsIG5hbWUpOworICAgIGlmIChzICE9IE5VTEwpIHsKKyAgICAgICpmb3VuZCA9IHNpOworICAgICAgYnJlYWs7CisgICAgfQorICB9CisKKyAgaWYgKHMgIT0gTlVMTCkgeworICAgIFRSQUNFX1RZUEUoTE9PS1VQLCAiJXMgcy0+c3RfdmFsdWUgPSAweCUwOHgsIGZvdW5kLT5iYXNlID0gMHglMDh4IiwKKyAgICAgICAgICAgICAgIG5hbWUsIHMtPnN0X3ZhbHVlLCAoKmZvdW5kKS0+YmFzZSk7CisgIH0KKworICByZXR1cm4gczsKK30KKworc29pbmZvKiBmaW5kX2NvbnRhaW5pbmdfbGlicmFyeShjb25zdCB2b2lkKiBwKSB7CisgIEVsZjMyX0FkZHIgYWRkcmVzcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8RWxmMzJfQWRkcj4ocCk7CisgIGZvciAoc29pbmZvKiBzaSA9IHNvbGlzdDsgc2kgIT0gTlVMTDsgc2kgPSBzaS0+bmV4dCkgeworICAgIGlmIChhZGRyZXNzID49IHNpLT5iYXNlICYmIGFkZHJlc3MgLSBzaS0+YmFzZSA8IHNpLT5zaXplKSB7CisgICAgICByZXR1cm4gc2k7CisgICAgfQorICB9CisgIHJldHVybiBOVUxMOworfQorCitFbGYzMl9TeW0qIGRsYWRkcl9maW5kX3N5bWJvbChzb2luZm8qIHNpLCBjb25zdCB2b2lkKiBhZGRyKSB7CisgIEVsZjMyX0FkZHIgc29hZGRyID0gcmVpbnRlcnByZXRfY2FzdDxFbGYzMl9BZGRyPihhZGRyKSAtIHNpLT5iYXNlOworCisgIC8vIFNlYXJjaCB0aGUgbGlicmFyeSdzIHN5bWJvbCB0YWJsZSBmb3IgYW55IGRlZmluZWQgc3ltYm9sIHdoaWNoCisgIC8vIGNvbnRhaW5zIHRoaXMgYWRkcmVzcy4KKyAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaS0+bmNoYWluOyArK2kpIHsKKyAgICBFbGYzMl9TeW0qIHN5bSA9ICZzaS0+c3ltdGFiW2ldOworICAgIGlmIChzeW0tPnN0X3NobmR4ICE9IFNITl9VTkRFRiAmJgorICAgICAgICBzb2FkZHIgPj0gc3ltLT5zdF92YWx1ZSAmJgorICAgICAgICBzb2FkZHIgPCBzeW0tPnN0X3ZhbHVlICsgc3ltLT5zdF9zaXplKSB7CisgICAgICByZXR1cm4gc3ltOworICAgIH0KKyAgfQorCisgIHJldHVybiBOVUxMOworfQorCisjaWYgMAorc3RhdGljIHZvaWQgZHVtcChzb2luZm8qIHNpKQoreworICAgIEVsZjMyX1N5bSogcyA9IHNpLT5zeW10YWI7CisgICAgZm9yICh1bnNpZ25lZCBuID0gMDsgbiA8IHNpLT5uY2hhaW47IG4rKykgeworICAgICAgICBUUkFDRSgiJTA0ZD4gJTA4eDogJTAyeCAlMDR4ICUwOHggJTA4eCAlcyIsIG4sIHMsCisgICAgICAgICAgICAgICBzLT5zdF9pbmZvLCBzLT5zdF9zaG5keCwgcy0+c3RfdmFsdWUsIHMtPnN0X3NpemUsCisgICAgICAgICAgICAgICBzaS0+c3RydGFiICsgcy0+c3RfbmFtZSk7CisgICAgICAgIHMrKzsKKyAgICB9Cit9CisjZW5kaWYKKworc3RhdGljIGludCBvcGVuX2xpYnJhcnlfb25fcGF0aChjb25zdCBjaGFyKiBuYW1lLCBjb25zdCBjaGFyKiBjb25zdCBwYXRoc1tdKSB7CisgIGNoYXIgYnVmWzUxMl07CisgIGZvciAoc2l6ZV90IGkgPSAwOyBwYXRoc1tpXSAhPSBOVUxMOyArK2kpIHsKKyAgICBpbnQgbiA9IF9fbGliY19mb3JtYXRfYnVmZmVyKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlcy8lcyIsIHBhdGhzW2ldLCBuYW1lKTsKKyAgICBpZiAobiA8IDAgfHwgbiA+PSBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihidWYpKSkgeworICAgICAgUFJJTlQoIldhcm5pbmc6IGlnbm9yaW5nIHZlcnkgbG9uZyBsaWJyYXJ5IHBhdGg6ICVzLyVzIiwgcGF0aHNbaV0sIG5hbWUpOworICAgICAgY29udGludWU7CisgICAgfQorICAgIGludCBmZCA9IFRFTVBfRkFJTFVSRV9SRVRSWShvcGVuKGJ1ZiwgT19SRE9OTFkgfCBPX0NMT0VYRUMpKTsKKyAgICBpZiAoZmQgIT0gLTEpIHsKKyAgICAgIHJldHVybiBmZDsKKyAgICB9CisgIH0KKyAgcmV0dXJuIC0xOworfQorCitzdGF0aWMgaW50IG9wZW5fbGlicmFyeShjb25zdCBjaGFyKiBuYW1lKSB7CisgIFRSQUNFKCJbIG9wZW5pbmcgJXMgXSIsIG5hbWUpOworCisgIC8vIElmIHRoZSBuYW1lIGNvbnRhaW5zIGEgc2xhc2gsIHdlIHNob3VsZCBhdHRlbXB0IHRvIG9wZW4gaXQgZGlyZWN0bHkgYW5kIG5vdCBzZWFyY2ggdGhlIHBhdGhzLgorICBpZiAoc3RyY2hyKG5hbWUsICcvJykgIT0gTlVMTCkgeworICAgIGludCBmZCA9IFRFTVBfRkFJTFVSRV9SRVRSWShvcGVuKG5hbWUsIE9fUkRPTkxZIHwgT19DTE9FWEVDKSk7CisgICAgaWYgKGZkICE9IC0xKSB7CisgICAgICByZXR1cm4gZmQ7CisgICAgfQorICAgIC8vIC4uLmJ1dCBudmlkaWEgYmluYXJ5IGJsb2JzIChhdCBsZWFzdCkgcmVseSBvbiB0aGlzIGJlaGF2aW9yLCBzbyBmYWxsIHRocm91Z2ggZm9yIG5vdy4KKyAgfQorCisgIC8vIE90aGVyd2lzZSB3ZSB0cnkgTERfTElCUkFSWV9QQVRIIGZpcnN0LCBhbmQgZmFsbCBiYWNrIHRvIHRoZSBidWlsdC1pbiB3ZWxsIGtub3duIHBhdGhzLgorICBpbnQgZmQgPSBvcGVuX2xpYnJhcnlfb25fcGF0aChuYW1lLCBnTGRQYXRocyk7CisgIGlmIChmZCA9PSAtMSkgeworICAgIGZkID0gb3Blbl9saWJyYXJ5X29uX3BhdGgobmFtZSwgZ1NvUGF0aHMpOworICB9CisgIHJldHVybiBmZDsKK30KKworc3RhdGljIHNvaW5mbyogbG9hZF9saWJyYXJ5KGNvbnN0IGNoYXIqIG5hbWUpIHsKKyAgICAvLyBPcGVuIHRoZSBmaWxlLgorICAgIGludCBmZCA9IG9wZW5fbGlicmFyeShuYW1lKTsKKyAgICBpZiAoZmQgPT0gLTEpIHsKKyAgICAgICAgRExfRVJSKCJsaWJyYXJ5IFwiJXNcIiBub3QgZm91bmQiLCBuYW1lKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgLy8gUmVhZCB0aGUgRUxGIGhlYWRlciBhbmQgbG9hZCB0aGUgc2VnbWVudHMuCisgICAgRWxmUmVhZGVyIGVsZl9yZWFkZXIobmFtZSwgZmQpOworICAgIGlmICghZWxmX3JlYWRlci5Mb2FkKCkpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgY29uc3QgY2hhciogYm5hbWUgPSBzdHJyY2hyKG5hbWUsICcvJyk7CisgICAgc29pbmZvKiBzaSA9IHNvaW5mb19hbGxvYyhibmFtZSA/IGJuYW1lICsgMSA6IG5hbWUpOworICAgIGlmIChzaSA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBzaS0+YmFzZSA9IGVsZl9yZWFkZXIubG9hZF9zdGFydCgpOworICAgIHNpLT5zaXplID0gZWxmX3JlYWRlci5sb2FkX3NpemUoKTsKKyAgICBzaS0+bG9hZF9iaWFzID0gZWxmX3JlYWRlci5sb2FkX2JpYXMoKTsKKyAgICBzaS0+ZmxhZ3MgPSAwOworICAgIHNpLT5lbnRyeSA9IDA7CisgICAgc2ktPmR5bmFtaWMgPSBOVUxMOworICAgIHNpLT5waG51bSA9IGVsZl9yZWFkZXIucGhkcl9jb3VudCgpOworICAgIHNpLT5waGRyID0gZWxmX3JlYWRlci5sb2FkZWRfcGhkcigpOworICAgIHJldHVybiBzaTsKK30KKworc3RhdGljIHNvaW5mbyAqZmluZF9sb2FkZWRfbGlicmFyeShjb25zdCBjaGFyICpuYW1lKQoreworICAgIHNvaW5mbyAqc2k7CisgICAgY29uc3QgY2hhciAqYm5hbWU7CisKKyAgICAvLyBUT0RPOiBkb24ndCB1c2UgYmFzZW5hbWUgb25seSBmb3IgZGV0ZXJtaW5pbmcgbGlicmFyaWVzCisgICAgLy8gaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL2FuZHJvaWQvaXNzdWVzL2RldGFpbD9pZD02NjcwCisKKyAgICBibmFtZSA9IHN0cnJjaHIobmFtZSwgJy8nKTsKKyAgICBibmFtZSA9IGJuYW1lID8gYm5hbWUgKyAxIDogbmFtZTsKKworICAgIGZvciAoc2kgPSBzb2xpc3Q7IHNpICE9IE5VTEw7IHNpID0gc2ktPm5leHQpIHsKKyAgICAgICAgaWYgKCFzdHJjbXAoYm5hbWUsIHNpLT5uYW1lKSkgeworICAgICAgICAgICAgcmV0dXJuIHNpOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBOVUxMOworfQorCitzdGF0aWMgc29pbmZvKiBmaW5kX2xpYnJhcnlfaW50ZXJuYWwoY29uc3QgY2hhciogbmFtZSkgeworICBpZiAobmFtZSA9PSBOVUxMKSB7CisgICAgcmV0dXJuIHNvbWFpbjsKKyAgfQorCisgIHNvaW5mbyogc2kgPSBmaW5kX2xvYWRlZF9saWJyYXJ5KG5hbWUpOworICBpZiAoc2kgIT0gTlVMTCkgeworICAgIGlmIChzaS0+ZmxhZ3MgJiBGTEFHX0xJTktFRCkgeworICAgICAgcmV0dXJuIHNpOworICAgIH0KKyAgICBETF9FUlIoIk9PUFM6IHJlY3Vyc2l2ZSBsaW5rIHRvIFwiJXNcIiIsIHNpLT5uYW1lKTsKKyAgICByZXR1cm4gTlVMTDsKKyAgfQorCisgIFRSQUNFKCJbICclcycgaGFzIG5vdCBiZWVuIGxvYWRlZCB5ZXQuICBMb2NhdGluZy4uLl0iLCBuYW1lKTsKKyAgc2kgPSBsb2FkX2xpYnJhcnkobmFtZSk7CisgIGlmIChzaSA9PSBOVUxMKSB7CisgICAgcmV0dXJuIE5VTEw7CisgIH0KKworICAvLyBBdCB0aGlzIHBvaW50IHdlIGtub3cgdGhhdCB3aGF0ZXZlciBpcyBsb2FkZWQgQCBiYXNlIGlzIGEgdmFsaWQgRUxGCisgIC8vIHNoYXJlZCBsaWJyYXJ5IHdob3NlIHNlZ21lbnRzIGFyZSBwcm9wZXJseSBtYXBwZWQgaW4uCisgIFRSQUNFKCJbIGluaXRfbGlicmFyeSBiYXNlPTB4JTA4eCBzej0weCUwOHggbmFtZT0nJXMnIF0iLAorICAgICAgICBzaS0+YmFzZSwgc2ktPnNpemUsIHNpLT5uYW1lKTsKKworICBpZiAoIXNvaW5mb19saW5rX2ltYWdlKHNpKSkgeworICAgIG11bm1hcChyZWludGVycHJldF9jYXN0PHZvaWQqPihzaS0+YmFzZSksIHNpLT5zaXplKTsKKyAgICBzb2luZm9fZnJlZShzaSk7CisgICAgcmV0dXJuIE5VTEw7CisgIH0KKworICByZXR1cm4gc2k7Cit9CisKK3N0YXRpYyBzb2luZm8qIGZpbmRfbGlicmFyeShjb25zdCBjaGFyKiBuYW1lKSB7CisgIHNvaW5mbyogc2kgPSBmaW5kX2xpYnJhcnlfaW50ZXJuYWwobmFtZSk7CisgIGlmIChzaSAhPSBOVUxMKSB7CisgICAgc2ktPnJlZl9jb3VudCsrOworICB9CisgIHJldHVybiBzaTsKK30KKworc3RhdGljIGludCBzb2luZm9fdW5sb2FkKHNvaW5mbyogc2kpIHsKKyAgaWYgKHNpLT5yZWZfY291bnQgPT0gMSkgeworICAgIFRSQUNFKCJ1bmxvYWRpbmcgJyVzJyIsIHNpLT5uYW1lKTsKKyAgICBzaS0+Q2FsbERlc3RydWN0b3JzKCk7CisKKyAgICBmb3IgKEVsZjMyX0R5biogZCA9IHNpLT5keW5hbWljOyBkLT5kX3RhZyAhPSBEVF9OVUxMOyArK2QpIHsKKyAgICAgIGlmIChkLT5kX3RhZyA9PSBEVF9ORUVERUQpIHsKKyAgICAgICAgY29uc3QgY2hhciogbGlicmFyeV9uYW1lID0gc2ktPnN0cnRhYiArIGQtPmRfdW4uZF92YWw7CisgICAgICAgIFRSQUNFKCIlcyBuZWVkcyB0byB1bmxvYWQgJXMiLCBzaS0+bmFtZSwgbGlicmFyeV9uYW1lKTsKKyAgICAgICAgc29pbmZvX3VubG9hZChmaW5kX2xvYWRlZF9saWJyYXJ5KGxpYnJhcnlfbmFtZSkpOworICAgICAgfQorICAgIH0KKworICAgIG11bm1hcChyZWludGVycHJldF9jYXN0PHZvaWQqPihzaS0+YmFzZSksIHNpLT5zaXplKTsKKyAgICBub3RpZnlfZ2RiX29mX3VubG9hZChzaSk7CisgICAgc29pbmZvX2ZyZWUoc2kpOworICAgIHNpLT5yZWZfY291bnQgPSAwOworICB9IGVsc2UgeworICAgIHNpLT5yZWZfY291bnQtLTsKKyAgICBUUkFDRSgibm90IHVubG9hZGluZyAnJXMnLCBkZWNyZW1lbnRpbmcgcmVmX2NvdW50IHRvICVkIiwgc2ktPm5hbWUsIHNpLT5yZWZfY291bnQpOworICB9CisgIHJldHVybiAwOworfQorCit2b2lkIGRvX2FuZHJvaWRfdXBkYXRlX0xEX0xJQlJBUllfUEFUSChjb25zdCBjaGFyKiBsZF9saWJyYXJ5X3BhdGgpIHsKKyAgaWYgKCFnZXRfQVRfU0VDVVJFKCkpIHsKKyAgICBwYXJzZV9MRF9MSUJSQVJZX1BBVEgobGRfbGlicmFyeV9wYXRoKTsKKyAgfQorfQorCitzb2luZm8qIGRvX2Rsb3Blbihjb25zdCBjaGFyKiBuYW1lLCBpbnQgZmxhZ3MpIHsKKyAgaWYgKChmbGFncyAmIH4oUlRMRF9OT1d8UlRMRF9MQVpZfFJUTERfTE9DQUx8UlRMRF9HTE9CQUwpKSAhPSAwKSB7CisgICAgRExfRVJSKCJpbnZhbGlkIGZsYWdzIHRvIGRsb3BlbjogJXgiLCBmbGFncyk7CisgICAgcmV0dXJuIE5VTEw7CisgIH0KKyAgc2V0X3NvaW5mb19wb29sX3Byb3RlY3Rpb24oUFJPVF9SRUFEIHwgUFJPVF9XUklURSk7CisgIHNvaW5mbyogc2kgPSBmaW5kX2xpYnJhcnkobmFtZSk7CisgIGlmIChzaSAhPSBOVUxMKSB7CisgICAgc2ktPkNhbGxDb25zdHJ1Y3RvcnMoKTsKKyAgfQorICBzZXRfc29pbmZvX3Bvb2xfcHJvdGVjdGlvbihQUk9UX1JFQUQpOworICByZXR1cm4gc2k7Cit9CisKK2ludCBkb19kbGNsb3NlKHNvaW5mbyogc2kpIHsKKyAgc2V0X3NvaW5mb19wb29sX3Byb3RlY3Rpb24oUFJPVF9SRUFEIHwgUFJPVF9XUklURSk7CisgIGludCByZXN1bHQgPSBzb2luZm9fdW5sb2FkKHNpKTsKKyAgc2V0X3NvaW5mb19wb29sX3Byb3RlY3Rpb24oUFJPVF9SRUFEKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworLyogVE9ETzogZG9uJ3QgdXNlIHVuc2lnbmVkIGZvciBhZGRycyBiZWxvdy4gSXQgd29ya3MsIGJ1dCBpcyBub3QKKyAqIGlkZWFsLiBUaGV5IHNob3VsZCBwcm9iYWJseSBiZSBlaXRoZXIgdWludDMyX3QsIEVsZjMyX0FkZHIsIG9yIHVuc2lnbmVkCisgKiBsb25nLgorICovCitzdGF0aWMgaW50IHNvaW5mb19yZWxvY2F0ZShzb2luZm8qIHNpLCBFbGYzMl9SZWwqIHJlbCwgdW5zaWduZWQgY291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzb2luZm8qIG5lZWRlZFtdKQoreworICAgIEVsZjMyX1N5bSogc3ltdGFiID0gc2ktPnN5bXRhYjsKKyAgICBjb25zdCBjaGFyKiBzdHJ0YWIgPSBzaS0+c3RydGFiOworICAgIEVsZjMyX1N5bSogczsKKyAgICBFbGYzMl9SZWwqIHN0YXJ0ID0gcmVsOworICAgIHNvaW5mbyogbHNpOworCisgICAgZm9yIChzaXplX3QgaWR4ID0gMDsgaWR4IDwgY291bnQ7ICsraWR4LCArK3JlbCkgeworICAgICAgICB1bnNpZ25lZCB0eXBlID0gRUxGMzJfUl9UWVBFKHJlbC0+cl9pbmZvKTsKKyAgICAgICAgdW5zaWduZWQgc3ltID0gRUxGMzJfUl9TWU0ocmVsLT5yX2luZm8pOworICAgICAgICBFbGYzMl9BZGRyIHJlbG9jID0gc3RhdGljX2Nhc3Q8RWxmMzJfQWRkcj4ocmVsLT5yX29mZnNldCArIHNpLT5sb2FkX2JpYXMpOworICAgICAgICBFbGYzMl9BZGRyIHN5bV9hZGRyID0gMDsKKyAgICAgICAgY2hhciogc3ltX25hbWUgPSBOVUxMOworCisgICAgICAgIERFQlVHKCJQcm9jZXNzaW5nICclcycgcmVsb2NhdGlvbiBhdCBpbmRleCAlZCIsIHNpLT5uYW1lLCBpZHgpOworICAgICAgICBpZiAodHlwZSA9PSAwKSB7IC8vIFJfKl9OT05FCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoc3ltICE9IDApIHsKKyAgICAgICAgICAgIHN5bV9uYW1lID0gKGNoYXIgKikoc3RydGFiICsgc3ltdGFiW3N5bV0uc3RfbmFtZSk7CisgICAgICAgICAgICBzID0gc29pbmZvX2RvX2xvb2t1cChzaSwgc3ltX25hbWUsICZsc2ksIG5lZWRlZCk7CisgICAgICAgICAgICBpZiAocyA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgLyogV2Ugb25seSBhbGxvdyBhbiB1bmRlZmluZWQgc3ltYm9sIGlmIHRoaXMgaXMgYSB3ZWFrCisgICAgICAgICAgICAgICAgICAgcmVmZXJlbmNlLi4gICAqLworICAgICAgICAgICAgICAgIHMgPSAmc3ltdGFiW3N5bV07CisgICAgICAgICAgICAgICAgaWYgKEVMRjMyX1NUX0JJTkQocy0+c3RfaW5mbykgIT0gU1RCX1dFQUspIHsKKyAgICAgICAgICAgICAgICAgICAgRExfRVJSKCJjYW5ub3QgbG9jYXRlIHN5bWJvbCBcIiVzXCIgcmVmZXJlbmNlZCBieSBcIiVzXCIuLi4iLCBzeW1fbmFtZSwgc2ktPm5hbWUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLyogSUhJMDA0NEMgQUFFTEYgNC41LjEuMToKKworICAgICAgICAgICAgICAgICAgIExpYnJhcmllcyBhcmUgbm90IHNlYXJjaGVkIHRvIHJlc29sdmUgd2VhayByZWZlcmVuY2VzLgorICAgICAgICAgICAgICAgICAgIEl0IGlzIG5vdCBhbiBlcnJvciBmb3IgYSB3ZWFrIHJlZmVyZW5jZSB0byByZW1haW4KKyAgICAgICAgICAgICAgICAgICB1bnNhdGlzZmllZC4KKworICAgICAgICAgICAgICAgICAgIER1cmluZyBsaW5raW5nLCB0aGUgdmFsdWUgb2YgYW4gdW5kZWZpbmVkIHdlYWsgcmVmZXJlbmNlIGlzOgorICAgICAgICAgICAgICAgICAgIC0gWmVybyBpZiB0aGUgcmVsb2NhdGlvbiB0eXBlIGlzIGFic29sdXRlCisgICAgICAgICAgICAgICAgICAgLSBUaGUgYWRkcmVzcyBvZiB0aGUgcGxhY2UgaWYgdGhlIHJlbG9jYXRpb24gaXMgcGMtcmVsYXRpdmUKKyAgICAgICAgICAgICAgICAgICAtIFRoZSBhZGRyZXNzIG9mIG5vbWluYWwgYmFzZSBhZGRyZXNzIGlmIHRoZSByZWxvY2F0aW9uCisgICAgICAgICAgICAgICAgICAgICB0eXBlIGlzIGJhc2UtcmVsYXRpdmUuCisgICAgICAgICAgICAgICAgICAqLworCisgICAgICAgICAgICAgICAgc3dpdGNoICh0eXBlKSB7CisjaWYgZGVmaW5lZChBTkRST0lEX0FSTV9MSU5LRVIpCisgICAgICAgICAgICAgICAgY2FzZSBSX0FSTV9KVU1QX1NMT1Q6CisgICAgICAgICAgICAgICAgY2FzZSBSX0FSTV9HTE9CX0RBVDoKKyAgICAgICAgICAgICAgICBjYXNlIFJfQVJNX0FCUzMyOgorICAgICAgICAgICAgICAgIGNhc2UgUl9BUk1fUkVMQVRJVkU6ICAgIC8qIERvbid0IGNhcmUuICovCisjZWxpZiBkZWZpbmVkKEFORFJPSURfWDg2X0xJTktFUikKKyAgICAgICAgICAgICAgICBjYXNlIFJfMzg2X0pNUF9TTE9UOgorICAgICAgICAgICAgICAgIGNhc2UgUl8zODZfR0xPQl9EQVQ6CisgICAgICAgICAgICAgICAgY2FzZSBSXzM4Nl8zMjoKKyAgICAgICAgICAgICAgICBjYXNlIFJfMzg2X1JFTEFUSVZFOiAgICAvKiBEb250JyBjYXJlLiAqLworI2VuZGlmIC8qIEFORFJPSURfKl9MSU5LRVIgKi8KKyAgICAgICAgICAgICAgICAgICAgLyogc3ltX2FkZHIgd2FzIGluaXRpYWxpemVkIHRvIGJlIHplcm8gYWJvdmUgb3IgcmVsb2NhdGlvbgorICAgICAgICAgICAgICAgICAgICAgICBjb2RlIGJlbG93IGRvZXMgbm90IGNhcmUgYWJvdXQgdmFsdWUgb2Ygc3ltX2FkZHIuCisgICAgICAgICAgICAgICAgICAgICAgIE5vIG5lZWQgdG8gZG8gYW55dGhpbmcuICAqLworICAgICAgICAgICAgICAgICAgICBicmVhazsKKworI2lmIGRlZmluZWQoQU5EUk9JRF9YODZfTElOS0VSKQorICAgICAgICAgICAgICAgIGNhc2UgUl8zODZfUEMzMjoKKyAgICAgICAgICAgICAgICAgICAgc3ltX2FkZHIgPSByZWxvYzsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogQU5EUk9JRF9YODZfTElOS0VSICovCisKKyNpZiBkZWZpbmVkKEFORFJPSURfQVJNX0xJTktFUikKKyAgICAgICAgICAgICAgICBjYXNlIFJfQVJNX0NPUFk6CisgICAgICAgICAgICAgICAgICAgIC8qIEZhbGwgdGhyb3VnaC4gIENhbid0IHJlYWxseSBjb3B5IGlmIHdlYWsgc3ltYm9sIGlzCisgICAgICAgICAgICAgICAgICAgICAgIG5vdCBmb3VuZCBpbiBydW4tdGltZS4gICovCisjZW5kaWYgLyogQU5EUk9JRF9BUk1fTElOS0VSICovCisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgRExfRVJSKCJ1bmtub3duIHdlYWsgcmVsb2MgdHlwZSAlZCBAICVwICglZCkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSwgcmVsLCAoaW50KSAocmVsIC0gc3RhcnQpKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgLyogV2UgZ290IGEgZGVmaW5pdGlvbi4gICovCisjaWYgMAorICAgICAgICAgICAgICAgIGlmICgoYmFzZSA9PSAwKSAmJiAoc2ktPmJhc2UgIT0gMCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIGxpbmtpbmcgZnJvbSBsaWJyYXJpZXMgdG8gbWFpbiBpbWFnZSBpcyBiYWQgKi8KKyAgICAgICAgICAgICAgICAgICAgRExfRVJSKCJjYW5ub3QgbG9jYXRlIFwiJXNcIi4uLiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ0YWIgKyBzeW10YWJbc3ltXS5zdF9uYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgICAgIH0KKyNlbmRpZgorICAgICAgICAgICAgICAgIHN5bV9hZGRyID0gc3RhdGljX2Nhc3Q8RWxmMzJfQWRkcj4ocy0+c3RfdmFsdWUgKyBsc2ktPmxvYWRfYmlhcyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjb3VudF9yZWxvY2F0aW9uKGtSZWxvY1N5bWJvbCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzID0gTlVMTDsKKyAgICAgICAgfQorCisvKiBUT0RPOiBUaGlzIGlzIHVnbHkuIFNwbGl0IHVwIHRoZSByZWxvY2F0aW9ucyBieSBhcmNoIGludG8KKyAqIGRpZmZlcmVudCBmaWxlcy4KKyAqLworICAgICAgICBzd2l0Y2godHlwZSl7CisjaWYgZGVmaW5lZChBTkRST0lEX0FSTV9MSU5LRVIpCisgICAgICAgIGNhc2UgUl9BUk1fSlVNUF9TTE9UOgorICAgICAgICAgICAgY291bnRfcmVsb2NhdGlvbihrUmVsb2NBYnNvbHV0ZSk7CisgICAgICAgICAgICBNQVJLKHJlbC0+cl9vZmZzZXQpOworICAgICAgICAgICAgVFJBQ0VfVFlQRShSRUxPLCAiUkVMTyBKTVBfU0xPVCAlMDh4IDwtICUwOHggJXMiLCByZWxvYywgc3ltX2FkZHIsIHN5bV9uYW1lKTsKKyAgICAgICAgICAgICpyZWludGVycHJldF9jYXN0PEVsZjMyX0FkZHIqPihyZWxvYykgPSBzeW1fYWRkcjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFJfQVJNX0dMT0JfREFUOgorICAgICAgICAgICAgY291bnRfcmVsb2NhdGlvbihrUmVsb2NBYnNvbHV0ZSk7CisgICAgICAgICAgICBNQVJLKHJlbC0+cl9vZmZzZXQpOworICAgICAgICAgICAgVFJBQ0VfVFlQRShSRUxPLCAiUkVMTyBHTE9CX0RBVCAlMDh4IDwtICUwOHggJXMiLCByZWxvYywgc3ltX2FkZHIsIHN5bV9uYW1lKTsKKyAgICAgICAgICAgICpyZWludGVycHJldF9jYXN0PEVsZjMyX0FkZHIqPihyZWxvYykgPSBzeW1fYWRkcjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFJfQVJNX0FCUzMyOgorICAgICAgICAgICAgY291bnRfcmVsb2NhdGlvbihrUmVsb2NBYnNvbHV0ZSk7CisgICAgICAgICAgICBNQVJLKHJlbC0+cl9vZmZzZXQpOworICAgICAgICAgICAgVFJBQ0VfVFlQRShSRUxPLCAiUkVMTyBBQlMgJTA4eCA8LSAlMDh4ICVzIiwgcmVsb2MsIHN5bV9hZGRyLCBzeW1fbmFtZSk7CisgICAgICAgICAgICAqcmVpbnRlcnByZXRfY2FzdDxFbGYzMl9BZGRyKj4ocmVsb2MpICs9IHN5bV9hZGRyOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUl9BUk1fUkVMMzI6CisgICAgICAgICAgICBjb3VudF9yZWxvY2F0aW9uKGtSZWxvY1JlbGF0aXZlKTsKKyAgICAgICAgICAgIE1BUksocmVsLT5yX29mZnNldCk7CisgICAgICAgICAgICBUUkFDRV9UWVBFKFJFTE8sICJSRUxPIFJFTDMyICUwOHggPC0gJTA4eCAtICUwOHggJXMiLAorICAgICAgICAgICAgICAgICAgICAgICByZWxvYywgc3ltX2FkZHIsIHJlbC0+cl9vZmZzZXQsIHN5bV9uYW1lKTsKKyAgICAgICAgICAgICpyZWludGVycHJldF9jYXN0PEVsZjMyX0FkZHIqPihyZWxvYykgKz0gc3ltX2FkZHIgLSByZWwtPnJfb2Zmc2V0OworICAgICAgICAgICAgYnJlYWs7CisjZWxpZiBkZWZpbmVkKEFORFJPSURfWDg2X0xJTktFUikKKyAgICAgICAgY2FzZSBSXzM4Nl9KTVBfU0xPVDoKKyAgICAgICAgICAgIGNvdW50X3JlbG9jYXRpb24oa1JlbG9jQWJzb2x1dGUpOworICAgICAgICAgICAgTUFSSyhyZWwtPnJfb2Zmc2V0KTsKKyAgICAgICAgICAgIFRSQUNFX1RZUEUoUkVMTywgIlJFTE8gSk1QX1NMT1QgJTA4eCA8LSAlMDh4ICVzIiwgcmVsb2MsIHN5bV9hZGRyLCBzeW1fbmFtZSk7CisgICAgICAgICAgICAqcmVpbnRlcnByZXRfY2FzdDxFbGYzMl9BZGRyKj4ocmVsb2MpID0gc3ltX2FkZHI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBSXzM4Nl9HTE9CX0RBVDoKKyAgICAgICAgICAgIGNvdW50X3JlbG9jYXRpb24oa1JlbG9jQWJzb2x1dGUpOworICAgICAgICAgICAgTUFSSyhyZWwtPnJfb2Zmc2V0KTsKKyAgICAgICAgICAgIFRSQUNFX1RZUEUoUkVMTywgIlJFTE8gR0xPQl9EQVQgJTA4eCA8LSAlMDh4ICVzIiwgcmVsb2MsIHN5bV9hZGRyLCBzeW1fbmFtZSk7CisgICAgICAgICAgICAqcmVpbnRlcnByZXRfY2FzdDxFbGYzMl9BZGRyKj4ocmVsb2MpID0gc3ltX2FkZHI7CisgICAgICAgICAgICBicmVhazsKKyNlbGlmIGRlZmluZWQoQU5EUk9JRF9NSVBTX0xJTktFUikKKyAgICBjYXNlIFJfTUlQU19SRUwzMjoKKyAgICAgICAgICAgIGNvdW50X3JlbG9jYXRpb24oa1JlbG9jQWJzb2x1dGUpOworICAgICAgICAgICAgTUFSSyhyZWwtPnJfb2Zmc2V0KTsKKyAgICAgICAgICAgIFRSQUNFX1RZUEUoUkVMTywgIlJFTE8gUkVMMzIgJTA4eCA8LSAlMDh4ICVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgcmVsb2MsIHN5bV9hZGRyLCAoc3ltX25hbWUpID8gc3ltX25hbWUgOiAiKlNFQ1RJT05IRFIqIik7CisgICAgICAgICAgICBpZiAocykgeworICAgICAgICAgICAgICAgICpyZWludGVycHJldF9jYXN0PEVsZjMyX0FkZHIqPihyZWxvYykgKz0gc3ltX2FkZHI7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICpyZWludGVycHJldF9jYXN0PEVsZjMyX0FkZHIqPihyZWxvYykgKz0gc2ktPmJhc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyNlbmRpZiAvKiBBTkRST0lEXypfTElOS0VSICovCisKKyNpZiBkZWZpbmVkKEFORFJPSURfQVJNX0xJTktFUikKKyAgICAgICAgY2FzZSBSX0FSTV9SRUxBVElWRToKKyNlbGlmIGRlZmluZWQoQU5EUk9JRF9YODZfTElOS0VSKQorICAgICAgICBjYXNlIFJfMzg2X1JFTEFUSVZFOgorI2VuZGlmIC8qIEFORFJPSURfKl9MSU5LRVIgKi8KKyAgICAgICAgICAgIGNvdW50X3JlbG9jYXRpb24oa1JlbG9jUmVsYXRpdmUpOworICAgICAgICAgICAgTUFSSyhyZWwtPnJfb2Zmc2V0KTsKKyAgICAgICAgICAgIGlmIChzeW0pIHsKKyAgICAgICAgICAgICAgICBETF9FUlIoIm9kZCBSRUxBVElWRSBmb3JtLi4uIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgfQorICAgICAgICAgICAgVFJBQ0VfVFlQRShSRUxPLCAiUkVMTyBSRUxBVElWRSAlMDh4IDwtICslMDh4IiwgcmVsb2MsIHNpLT5iYXNlKTsKKyAgICAgICAgICAgICpyZWludGVycHJldF9jYXN0PEVsZjMyX0FkZHIqPihyZWxvYykgKz0gc2ktPmJhc2U7CisgICAgICAgICAgICBicmVhazsKKworI2lmIGRlZmluZWQoQU5EUk9JRF9YODZfTElOS0VSKQorICAgICAgICBjYXNlIFJfMzg2XzMyOgorICAgICAgICAgICAgY291bnRfcmVsb2NhdGlvbihrUmVsb2NSZWxhdGl2ZSk7CisgICAgICAgICAgICBNQVJLKHJlbC0+cl9vZmZzZXQpOworCisgICAgICAgICAgICBUUkFDRV9UWVBFKFJFTE8sICJSRUxPIFJfMzg2XzMyICUwOHggPC0gKyUwOHggJXMiLCByZWxvYywgc3ltX2FkZHIsIHN5bV9uYW1lKTsKKyAgICAgICAgICAgICpyZWludGVycHJldF9jYXN0PEVsZjMyX0FkZHIqPihyZWxvYykgKz0gc3ltX2FkZHI7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFJfMzg2X1BDMzI6CisgICAgICAgICAgICBjb3VudF9yZWxvY2F0aW9uKGtSZWxvY1JlbGF0aXZlKTsKKyAgICAgICAgICAgIE1BUksocmVsLT5yX29mZnNldCk7CisgICAgICAgICAgICBUUkFDRV9UWVBFKFJFTE8sICJSRUxPIFJfMzg2X1BDMzIgJTA4eCA8LSArJTA4eCAoJTA4eCAtICUwOHgpICVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgcmVsb2MsIChzeW1fYWRkciAtIHJlbG9jKSwgc3ltX2FkZHIsIHJlbG9jLCBzeW1fbmFtZSk7CisgICAgICAgICAgICAqcmVpbnRlcnByZXRfY2FzdDxFbGYzMl9BZGRyKj4ocmVsb2MpICs9IChzeW1fYWRkciAtIHJlbG9jKTsKKyAgICAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIEFORFJPSURfWDg2X0xJTktFUiAqLworCisjaWZkZWYgQU5EUk9JRF9BUk1fTElOS0VSCisgICAgICAgIGNhc2UgUl9BUk1fQ09QWToKKyAgICAgICAgICAgIGlmICgoc2ktPmZsYWdzICYgRkxBR19FWEUpID09IDApIHsKKyAgICAgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgICAqIGh0dHA6Ly9pbmZvY2VudGVyLmFybS5jb20vaGVscC90b3BpYy9jb20uYXJtLmRvYy5paGkwMDQ0ZC9JSEkwMDQ0RF9hYWVsZi5wZGYKKyAgICAgICAgICAgICAgICAgKgorICAgICAgICAgICAgICAgICAqIFNlY3Rpb24gNC43LjEuMTAgIkR5bmFtaWMgcmVsb2NhdGlvbnMiCisgICAgICAgICAgICAgICAgICogUl9BUk1fQ09QWSBtYXkgb25seSBhcHBlYXIgaW4gZXhlY3V0YWJsZSBvYmplY3RzIHdoZXJlIGVfdHlwZSBpcworICAgICAgICAgICAgICAgICAqIHNldCB0byBFVF9FWEVDLgorICAgICAgICAgICAgICAgICAqCisgICAgICAgICAgICAgICAgICogVE9ETzogRkxBR19FWEUgaXMgc2V0IGZvciBib3RoIEVUX0RZTiBhbmQgRVRfRVhFQyBleGVjdXRhYmxlcy4KKyAgICAgICAgICAgICAgICAgKiBXZSBzaG91bGQgZXhwbGljaXRseSBkaXNhbGxvdyBFVF9EWU4gZXhlY3V0YWJsZXMgZnJvbSBoYXZpbmcKKyAgICAgICAgICAgICAgICAgKiBSX0FSTV9DT1BZIHJlbG9jYXRpb25zLgorICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgIERMX0VSUigiJXMgUl9BUk1fQ09QWSByZWxvY2F0aW9ucyBvbmx5IHN1cHBvcnRlZCBmb3IgRVRfRVhFQyIsIHNpLT5uYW1lKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjb3VudF9yZWxvY2F0aW9uKGtSZWxvY0NvcHkpOworICAgICAgICAgICAgTUFSSyhyZWwtPnJfb2Zmc2V0KTsKKyAgICAgICAgICAgIFRSQUNFX1RZUEUoUkVMTywgIlJFTE8gJTA4eCA8LSAlZCBAICUwOHggJXMiLCByZWxvYywgcy0+c3Rfc2l6ZSwgc3ltX2FkZHIsIHN5bV9uYW1lKTsKKyAgICAgICAgICAgIGlmIChyZWxvYyA9PSBzeW1fYWRkcikgeworICAgICAgICAgICAgICAgIEVsZjMyX1N5bSAqc3JjID0gc29pbmZvX2RvX2xvb2t1cChOVUxMLCBzeW1fbmFtZSwgJmxzaSwgbmVlZGVkKTsKKworICAgICAgICAgICAgICAgIGlmIChzcmMgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgICAgICBETF9FUlIoIiVzIFJfQVJNX0NPUFkgcmVsb2NhdGlvbiBzb3VyY2UgY2Fubm90IGJlIHJlc29sdmVkIiwgc2ktPm5hbWUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChsc2ktPmhhc19EVF9TWU1CT0xJQykgeworICAgICAgICAgICAgICAgICAgICBETF9FUlIoIiVzIGludmFsaWQgUl9BUk1fQ09QWSByZWxvY2F0aW9uIGFnYWluc3QgRFRfU1lNQk9MSUMgc2hhcmVkICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaWJyYXJ5ICVzIChidWlsdCB3aXRoIC1Cc3ltYm9saWM/KSIsIHNpLT5uYW1lLCBsc2ktPm5hbWUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChzLT5zdF9zaXplIDwgc3JjLT5zdF9zaXplKSB7CisgICAgICAgICAgICAgICAgICAgIERMX0VSUigiJXMgUl9BUk1fQ09QWSByZWxvY2F0aW9uIHNpemUgbWlzbWF0Y2ggKCVkIDwgJWQpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpLT5uYW1lLCBzLT5zdF9zaXplLCBzcmMtPnN0X3NpemUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG1lbWNweSgodm9pZCopcmVsb2MsICh2b2lkKikoc3JjLT5zdF92YWx1ZSArIGxzaS0+bG9hZF9iaWFzKSwgc3JjLT5zdF9zaXplKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgRExfRVJSKCIlcyBSX0FSTV9DT1BZIHJlbG9jYXRpb24gdGFyZ2V0IGNhbm5vdCBiZSByZXNvbHZlZCIsIHNpLT5uYW1lKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyNlbmRpZiAvKiBBTkRST0lEX0FSTV9MSU5LRVIgKi8KKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgRExfRVJSKCJ1bmtub3duIHJlbG9jIHR5cGUgJWQgQCAlcCAoJWQpIiwKKyAgICAgICAgICAgICAgICAgICB0eXBlLCByZWwsIChpbnQpIChyZWwgLSBzdGFydCkpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiAwOworfQorCisjaWZkZWYgQU5EUk9JRF9NSVBTX0xJTktFUgorc3RhdGljIGludCBtaXBzX3JlbG9jYXRlX2dvdChzb2luZm8qIHNpLCBzb2luZm8qIG5lZWRlZFtdKSB7CisgICAgdW5zaWduZWQgKmdvdDsKKyAgICB1bnNpZ25lZCBsb2NhbF9nb3RubywgZ290c3ltLCBzeW10YWJubzsKKyAgICBFbGYzMl9TeW0gKnN5bXRhYiwgKnN5bTsKKyAgICB1bnNpZ25lZCBnOworCisgICAgZ290ID0gc2ktPnBsdF9nb3Q7CisgICAgbG9jYWxfZ290bm8gPSBzaS0+bWlwc19sb2NhbF9nb3RubzsKKyAgICBnb3RzeW0gPSBzaS0+bWlwc19nb3RzeW07CisgICAgc3ltdGFibm8gPSBzaS0+bWlwc19zeW10YWJubzsKKyAgICBzeW10YWIgPSBzaS0+c3ltdGFiOworCisgICAgLyoKKyAgICAgKiBnb3RbMF0gaXMgYWRkcmVzcyBvZiBsYXp5IHJlc29sdmVyIGZ1bmN0aW9uCisgICAgICogZ290WzFdIG1heSBiZSB1c2VkIGZvciBhIEdOVSBleHRlbnNpb24KKyAgICAgKiBzZXQgaXQgdG8gYSByZWNvZ25pemFibGUgYWRkcmVzcyBpbiBjYXNlIHNvbWVvbmUgY2FsbHMgaXQKKyAgICAgKiAoc2hvdWxkIGJlIF9ydGxkX2JpbmRfc3RhcnQpCisgICAgICogRklYTUU6IG1heWJlIHRoaXMgc2hvdWxkIGJlIGluIGEgc2VwYXJhdGUgcm91dGluZQorICAgICAqLworCisgICAgaWYgKChzaS0+ZmxhZ3MgJiBGTEFHX0xJTktFUikgPT0gMCkgeworICAgICAgICBnID0gMDsKKyAgICAgICAgZ290W2crK10gPSAweGRlYWRiZWVmOworICAgICAgICBpZiAoZ290W2ddICYgMHg4MDAwMDAwMCkgeworICAgICAgICAgICAgZ290W2crK10gPSAweGRlYWRmZWVkOworICAgICAgICB9CisgICAgICAgIC8qCisgICAgICAgICAqIFJlbG9jYXRlIHRoZSBsb2NhbCBHT1QgZW50cmllcyBuZWVkIHRvIGJlIHJlbG9jYXRlZAorICAgICAgICAgKi8KKyAgICAgICAgZm9yICg7IGcgPCBsb2NhbF9nb3RubzsgZysrKSB7CisgICAgICAgICAgICBnb3RbZ10gKz0gc2ktPmxvYWRfYmlhczsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qIE5vdyBmb3IgdGhlIGdsb2JhbCBHT1QgZW50cmllcyAqLworICAgIHN5bSA9IHN5bXRhYiArIGdvdHN5bTsKKyAgICBnb3QgPSBzaS0+cGx0X2dvdCArIGxvY2FsX2dvdG5vOworICAgIGZvciAoZyA9IGdvdHN5bTsgZyA8IHN5bXRhYm5vOyBnKyssIHN5bSsrLCBnb3QrKykgeworICAgICAgICBjb25zdCBjaGFyKiBzeW1fbmFtZTsKKyAgICAgICAgRWxmMzJfU3ltKiBzOworICAgICAgICBzb2luZm8qIGxzaTsKKworICAgICAgICAvKiBUaGlzIGlzIGFuIHVuZGVmaW5lZCByZWZlcmVuY2UuLi4gdHJ5IHRvIGxvY2F0ZSBpdCAqLworICAgICAgICBzeW1fbmFtZSA9IHNpLT5zdHJ0YWIgKyBzeW0tPnN0X25hbWU7CisgICAgICAgIHMgPSBzb2luZm9fZG9fbG9va3VwKHNpLCBzeW1fbmFtZSwgJmxzaSwgbmVlZGVkKTsKKyAgICAgICAgaWYgKHMgPT0gTlVMTCkgeworICAgICAgICAgICAgLyogV2Ugb25seSBhbGxvdyBhbiB1bmRlZmluZWQgc3ltYm9sIGlmIHRoaXMgaXMgYSB3ZWFrCisgICAgICAgICAgICAgICByZWZlcmVuY2UuLiAgICovCisgICAgICAgICAgICBzID0gJnN5bXRhYltnXTsKKyAgICAgICAgICAgIGlmIChFTEYzMl9TVF9CSU5EKHMtPnN0X2luZm8pICE9IFNUQl9XRUFLKSB7CisgICAgICAgICAgICAgICAgRExfRVJSKCJjYW5ub3QgbG9jYXRlIFwiJXNcIi4uLiIsIHN5bV9uYW1lKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAqZ290ID0gMDsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIC8qIEZJWE1FOiBpcyB0aGlzIHN1ZmZpY2llbnQ/CisgICAgICAgICAgICAgKiBGb3IgcmVmZXJlbmNlIHNlZSBOZXRCU0QgbGluayBsb2FkZXIKKyAgICAgICAgICAgICAqIGh0dHA6Ly9jdnN3ZWIubmV0YnNkLm9yZy9ic2R3ZWIuY2dpL3NyYy9saWJleGVjL2xkLmVsZl9zby9hcmNoL21pcHMvbWlwc19yZWxvYy5jP3Jldj0xLjUzJmNvbnRlbnQtdHlwZT10ZXh0L3gtY3Zzd2ViLW1hcmt1cAorICAgICAgICAgICAgICovCisgICAgICAgICAgICAgKmdvdCA9IGxzaS0+bG9hZF9iaWFzICsgcy0+c3RfdmFsdWU7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisjZW5kaWYKKwordm9pZCBzb2luZm86OkNhbGxBcnJheShjb25zdCBjaGFyKiBhcnJheV9uYW1lIFVOVVNFRCwgbGlua2VyX2Z1bmN0aW9uX3QqIGZ1bmN0aW9ucywgc2l6ZV90IGNvdW50LCBib29sIHJldmVyc2UpIHsKKyAgaWYgKGZ1bmN0aW9ucyA9PSBOVUxMKSB7CisgICAgcmV0dXJuOworICB9CisKKyAgVFJBQ0UoIlsgQ2FsbGluZyAlcyAoc2l6ZSAlZCkgQCAlcCBmb3IgJyVzJyBdIiwgYXJyYXlfbmFtZSwgY291bnQsIGZ1bmN0aW9ucywgbmFtZSk7CisKKyAgaW50IGJlZ2luID0gcmV2ZXJzZSA/IChjb3VudCAtIDEpIDogMDsKKyAgaW50IGVuZCA9IHJldmVyc2UgPyAtMSA6IGNvdW50OworICBpbnQgc3RlcCA9IHJldmVyc2UgPyAtMSA6IDE7CisKKyAgZm9yIChpbnQgaSA9IGJlZ2luOyBpICE9IGVuZDsgaSArPSBzdGVwKSB7CisgICAgVFJBQ0UoIlsgJXNbJWRdID09ICVwIF0iLCBhcnJheV9uYW1lLCBpLCBmdW5jdGlvbnNbaV0pOworICAgIENhbGxGdW5jdGlvbigiZnVuY3Rpb24iLCBmdW5jdGlvbnNbaV0pOworICB9CisKKyAgVFJBQ0UoIlsgRG9uZSBjYWxsaW5nICVzIGZvciAnJXMnIF0iLCBhcnJheV9uYW1lLCBuYW1lKTsKK30KKwordm9pZCBzb2luZm86OkNhbGxGdW5jdGlvbihjb25zdCBjaGFyKiBmdW5jdGlvbl9uYW1lIFVOVVNFRCwgbGlua2VyX2Z1bmN0aW9uX3QgZnVuY3Rpb24pIHsKKyAgaWYgKGZ1bmN0aW9uID09IE5VTEwgfHwgcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGZ1bmN0aW9uKSA9PSBzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KC0xKSkgeworICAgIHJldHVybjsKKyAgfQorCisgIFRSQUNFKCJbIENhbGxpbmcgJXMgQCAlcCBmb3IgJyVzJyBdIiwgZnVuY3Rpb25fbmFtZSwgZnVuY3Rpb24sIG5hbWUpOworICBmdW5jdGlvbigpOworICBUUkFDRSgiWyBEb25lIGNhbGxpbmcgJXMgQCAlcCBmb3IgJyVzJyBdIiwgZnVuY3Rpb25fbmFtZSwgZnVuY3Rpb24sIG5hbWUpOworCisgIC8vIFRoZSBmdW5jdGlvbiBtYXkgaGF2ZSBjYWxsZWQgZGxvcGVuKDMpIG9yIGRsY2xvc2UoMyksIHNvIHdlIG5lZWQgdG8gZW5zdXJlIG91ciBkYXRhIHN0cnVjdHVyZXMKKyAgLy8gYXJlIHN0aWxsIHdyaXRhYmxlLiBUaGlzIGhhcHBlbnMgd2l0aCBvdXIgZGVidWcgbWFsbG9jIChzZWUgaHR0cDovL2IvNzk0MTcxNikuCisgIHNldF9zb2luZm9fcG9vbF9wcm90ZWN0aW9uKFBST1RfUkVBRCB8IFBST1RfV1JJVEUpOworfQorCit2b2lkIHNvaW5mbzo6Q2FsbFByZUluaXRDb25zdHJ1Y3RvcnMoKSB7CisgIC8vIERUX1BSRUlOSVRfQVJSQVkgZnVuY3Rpb25zIGFyZSBjYWxsZWQgYmVmb3JlIGFueSBvdGhlciBjb25zdHJ1Y3RvcnMgZm9yIGV4ZWN1dGFibGVzLAorICAvLyBidXQgaWdub3JlZCBpbiBhIHNoYXJlZCBsaWJyYXJ5LgorICBDYWxsQXJyYXkoIkRUX1BSRUlOSVRfQVJSQVkiLCBwcmVpbml0X2FycmF5LCBwcmVpbml0X2FycmF5X2NvdW50LCBmYWxzZSk7Cit9CisKK3ZvaWQgc29pbmZvOjpDYWxsQ29uc3RydWN0b3JzKCkgeworICBpZiAoY29uc3RydWN0b3JzX2NhbGxlZCkgeworICAgIHJldHVybjsKKyAgfQorCisgIC8vIFdlIHNldCBjb25zdHJ1Y3RvcnNfY2FsbGVkIGJlZm9yZSBhY3R1YWxseSBjYWxsaW5nIHRoZSBjb25zdHJ1Y3RvcnMsIG90aGVyd2lzZSBpdCBkb2Vzbid0CisgIC8vIHByb3RlY3QgYWdhaW5zdCByZWN1cnNpdmUgY29uc3RydWN0b3IgY2FsbHMuIE9uZSBzaW1wbGUgZXhhbXBsZSBvZiBjb25zdHJ1Y3RvciByZWN1cnNpb24KKyAgLy8gaXMgdGhlIGxpYmMgZGVidWcgbWFsbG9jLCB3aGljaCBpcyBpbXBsZW1lbnRlZCBpbiBsaWJjX21hbGxvY19kZWJ1Z19sZWFrLnNvOgorICAvLyAxLiBUaGUgcHJvZ3JhbSBkZXBlbmRzIG9uIGxpYmMsIHNvIGxpYmMncyBjb25zdHJ1Y3RvciBpcyBjYWxsZWQgaGVyZS4KKyAgLy8gMi4gVGhlIGxpYmMgY29uc3RydWN0b3IgY2FsbHMgZGxvcGVuKCkgdG8gbG9hZCBsaWJjX21hbGxvY19kZWJ1Z19sZWFrLnNvLgorICAvLyAzLiBkbG9wZW4oKSBjYWxscyB0aGUgY29uc3RydWN0b3JzIG9uIHRoZSBuZXdseSBjcmVhdGVkCisgIC8vICAgIHNvaW5mbyBmb3IgbGliY19tYWxsb2NfZGVidWdfbGVhay5zby4KKyAgLy8gNC4gVGhlIGRlYnVnIC5zbyBkZXBlbmRzIG9uIGxpYmMsIHNvIENhbGxDb25zdHJ1Y3RvcnMgaXMKKyAgLy8gICAgY2FsbGVkIGFnYWluIHdpdGggdGhlIGxpYmMgc29pbmZvLiBJZiBpdCBkb2Vzbid0IHRyaWdnZXIgdGhlIGVhcmx5LQorICAvLyAgICBvdXQgYWJvdmUsIHRoZSBsaWJjIGNvbnN0cnVjdG9yIHdpbGwgYmUgY2FsbGVkIGFnYWluIChyZWN1cnNpdmVseSEpLgorICBjb25zdHJ1Y3RvcnNfY2FsbGVkID0gdHJ1ZTsKKworICBpZiAoKGZsYWdzICYgRkxBR19FWEUpID09IDAgJiYgcHJlaW5pdF9hcnJheSAhPSBOVUxMKSB7CisgICAgLy8gVGhlIEdOVSBkeW5hbWljIGxpbmtlciBzaWxlbnRseSBpZ25vcmVzIHRoZXNlLCBidXQgd2Ugd2FybiB0aGUgZGV2ZWxvcGVyLgorICAgIFBSSU5UKCJcIiVzXCI6IGlnbm9yaW5nICVkLWVudHJ5IERUX1BSRUlOSVRfQVJSQVkgaW4gc2hhcmVkIGxpYnJhcnkhIiwKKyAgICAgICAgICBuYW1lLCBwcmVpbml0X2FycmF5X2NvdW50KTsKKyAgfQorCisgIGlmIChkeW5hbWljICE9IE5VTEwpIHsKKyAgICBmb3IgKEVsZjMyX0R5biogZCA9IGR5bmFtaWM7IGQtPmRfdGFnICE9IERUX05VTEw7ICsrZCkgeworICAgICAgaWYgKGQtPmRfdGFnID09IERUX05FRURFRCkgeworICAgICAgICBjb25zdCBjaGFyKiBsaWJyYXJ5X25hbWUgPSBzdHJ0YWIgKyBkLT5kX3VuLmRfdmFsOworICAgICAgICBUUkFDRSgiXCIlc1wiOiBjYWxsaW5nIGNvbnN0cnVjdG9ycyBpbiBEVF9ORUVERUQgXCIlc1wiIiwgbmFtZSwgbGlicmFyeV9uYW1lKTsKKyAgICAgICAgZmluZF9sb2FkZWRfbGlicmFyeShsaWJyYXJ5X25hbWUpLT5DYWxsQ29uc3RydWN0b3JzKCk7CisgICAgICB9CisgICAgfQorICB9CisKKyAgVFJBQ0UoIlwiJXNcIjogY2FsbGluZyBjb25zdHJ1Y3RvcnMiLCBuYW1lKTsKKworICAvLyBEVF9JTklUIHNob3VsZCBiZSBjYWxsZWQgYmVmb3JlIERUX0lOSVRfQVJSQVkgaWYgYm90aCBhcmUgcHJlc2VudC4KKyAgQ2FsbEZ1bmN0aW9uKCJEVF9JTklUIiwgaW5pdF9mdW5jKTsKKyAgQ2FsbEFycmF5KCJEVF9JTklUX0FSUkFZIiwgaW5pdF9hcnJheSwgaW5pdF9hcnJheV9jb3VudCwgZmFsc2UpOworfQorCit2b2lkIHNvaW5mbzo6Q2FsbERlc3RydWN0b3JzKCkgeworICBUUkFDRSgiXCIlc1wiOiBjYWxsaW5nIGRlc3RydWN0b3JzIiwgbmFtZSk7CisKKyAgLy8gRFRfRklOSV9BUlJBWSBtdXN0IGJlIHBhcnNlZCBpbiByZXZlcnNlIG9yZGVyLgorICBDYWxsQXJyYXkoIkRUX0ZJTklfQVJSQVkiLCBmaW5pX2FycmF5LCBmaW5pX2FycmF5X2NvdW50LCB0cnVlKTsKKworICAvLyBEVF9GSU5JIHNob3VsZCBiZSBjYWxsZWQgYWZ0ZXIgRFRfRklOSV9BUlJBWSBpZiBib3RoIGFyZSBwcmVzZW50LgorICBDYWxsRnVuY3Rpb24oIkRUX0ZJTkkiLCBmaW5pX2Z1bmMpOworfQorCisvKiBGb3JjZSBhbnkgb2YgdGhlIGNsb3NlZCBzdGRpbiwgc3Rkb3V0IGFuZCBzdGRlcnIgdG8gYmUgYXNzb2NpYXRlZCB3aXRoCisgICAvZGV2L251bGwuICovCitzdGF0aWMgaW50IG51bGxpZnlfY2xvc2VkX3N0ZGlvKCkgeworICAgIGludCBkZXZfbnVsbCwgaSwgc3RhdHVzOworICAgIGludCByZXR1cm5fdmFsdWUgPSAwOworCisgICAgZGV2X251bGwgPSBURU1QX0ZBSUxVUkVfUkVUUlkob3BlbigiL2Rldi9udWxsIiwgT19SRFdSKSk7CisgICAgaWYgKGRldl9udWxsIDwgMCkgeworICAgICAgICBETF9FUlIoImNhbm5vdCBvcGVuIC9kZXYvbnVsbDogJXMiLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIFRSQUNFKCJbIE9wZW5lZCAvZGV2L251bGwgZmlsZS1kZXNjcmlwdG9yPSVkXSIsIGRldl9udWxsKTsKKworICAgIC8qIElmIGFueSBvZiB0aGUgc3RkaW8gZmlsZSBkZXNjcmlwdG9ycyBpcyB2YWxpZCBhbmQgbm90IGFzc29jaWF0ZWQKKyAgICAgICB3aXRoIC9kZXYvbnVsbCwgZHVwIC9kZXYvbnVsbCB0byBpdC4gICovCisgICAgZm9yIChpID0gMDsgaSA8IDM7IGkrKykgeworICAgICAgICAvKiBJZiBpdCBpcyAvZGV2L251bGwgYWxyZWFkeSwgd2UgYXJlIGRvbmUuICovCisgICAgICAgIGlmIChpID09IGRldl9udWxsKSB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIFRSQUNFKCJbIE51bGxpZnlpbmcgc3RkaW8gZmlsZSBkZXNjcmlwdG9yICVkXSIsIGkpOworICAgICAgICBzdGF0dXMgPSBURU1QX0ZBSUxVUkVfUkVUUlkoZmNudGwoaSwgRl9HRVRGTCkpOworCisgICAgICAgIC8qIElmIGZpbGUgaXMgb3BlbmVkLCB3ZSBhcmUgZ29vZC4gKi8KKyAgICAgICAgaWYgKHN0YXR1cyAhPSAtMSkgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICAvKiBUaGUgb25seSBlcnJvciB3ZSBhbGxvdyBpcyB0aGF0IHRoZSBmaWxlIGRlc2NyaXB0b3IgZG9lcyBub3QKKyAgICAgICAgICAgZXhpc3QsIGluIHdoaWNoIGNhc2Ugd2UgZHVwIC9kZXYvbnVsbCB0byBpdC4gKi8KKyAgICAgICAgaWYgKGVycm5vICE9IEVCQURGKSB7CisgICAgICAgICAgICBETF9FUlIoImZjbnRsIGZhaWxlZDogJXMiLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICAgICAgcmV0dXJuX3ZhbHVlID0gLTE7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIC8qIFRyeSBkdXBwaW5nIC9kZXYvbnVsbCB0byB0aGlzIHN0ZGlvIGZpbGUgZGVzY3JpcHRvciBhbmQKKyAgICAgICAgICAgcmVwZWF0IGlmIHRoZXJlIGlzIGEgc2lnbmFsLiAgTm90ZSB0aGF0IGFueSBlcnJvcnMgaW4gY2xvc2luZworICAgICAgICAgICB0aGUgc3RkaW8gZGVzY3JpcHRvciBhcmUgbG9zdC4gICovCisgICAgICAgIHN0YXR1cyA9IFRFTVBfRkFJTFVSRV9SRVRSWShkdXAyKGRldl9udWxsLCBpKSk7CisgICAgICAgIGlmIChzdGF0dXMgPCAwKSB7CisgICAgICAgICAgICBETF9FUlIoImR1cDIgZmFpbGVkOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgICAgICByZXR1cm5fdmFsdWUgPSAtMTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgfQorCisgICAgLyogSWYgL2Rldi9udWxsIGlzIG5vdCBvbmUgb2YgdGhlIHN0ZGlvIGZpbGUgZGVzY3JpcHRvcnMsIGNsb3NlIGl0LiAqLworICAgIGlmIChkZXZfbnVsbCA+IDIpIHsKKyAgICAgICAgVFJBQ0UoIlsgQ2xvc2luZyAvZGV2L251bGwgZmlsZS1kZXNjcmlwdG9yPSVkXSIsIGRldl9udWxsKTsKKyAgICAgICAgc3RhdHVzID0gVEVNUF9GQUlMVVJFX1JFVFJZKGNsb3NlKGRldl9udWxsKSk7CisgICAgICAgIGlmIChzdGF0dXMgPT0gLTEpIHsKKyAgICAgICAgICAgIERMX0VSUigiY2xvc2UgZmFpbGVkOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgICAgICByZXR1cm5fdmFsdWUgPSAtMTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK3N0YXRpYyBib29sIHNvaW5mb19saW5rX2ltYWdlKHNvaW5mbyogc2kpIHsKKyAgICAvKiAiYmFzZSIgbWlnaHQgd3JhcCBhcm91bmQgVUlOVDMyX01BWC4gKi8KKyAgICBFbGYzMl9BZGRyIGJhc2UgPSBzaS0+bG9hZF9iaWFzOworICAgIGNvbnN0IEVsZjMyX1BoZHIgKnBoZHIgPSBzaS0+cGhkcjsKKyAgICBpbnQgcGhudW0gPSBzaS0+cGhudW07CisgICAgYm9vbCByZWxvY2F0aW5nX2xpbmtlciA9IChzaS0+ZmxhZ3MgJiBGTEFHX0xJTktFUikgIT0gMDsKKworICAgIC8qIFdlIGNhbid0IGRlYnVnIGFueXRoaW5nIHVudGlsIHRoZSBsaW5rZXIgaXMgcmVsb2NhdGVkICovCisgICAgaWYgKCFyZWxvY2F0aW5nX2xpbmtlcikgeworICAgICAgICBJTkZPKCJbIGxpbmtpbmcgJXMgXSIsIHNpLT5uYW1lKTsKKyAgICAgICAgREVCVUcoInNpLT5iYXNlID0gMHglMDh4IHNpLT5mbGFncyA9IDB4JTA4eCIsIHNpLT5iYXNlLCBzaS0+ZmxhZ3MpOworICAgIH0KKworICAgIC8qIEV4dHJhY3QgZHluYW1pYyBzZWN0aW9uICovCisgICAgc2l6ZV90IGR5bmFtaWNfY291bnQ7CisgICAgRWxmMzJfV29yZCBkeW5hbWljX2ZsYWdzOworICAgIHBoZHJfdGFibGVfZ2V0X2R5bmFtaWNfc2VjdGlvbihwaGRyLCBwaG51bSwgYmFzZSwgJnNpLT5keW5hbWljLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZHluYW1pY19jb3VudCwgJmR5bmFtaWNfZmxhZ3MpOworICAgIGlmIChzaS0+ZHluYW1pYyA9PSBOVUxMKSB7CisgICAgICAgIGlmICghcmVsb2NhdGluZ19saW5rZXIpIHsKKyAgICAgICAgICAgIERMX0VSUigibWlzc2luZyBQVF9EWU5BTUlDIGluIFwiJXNcIiIsIHNpLT5uYW1lKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKCFyZWxvY2F0aW5nX2xpbmtlcikgeworICAgICAgICAgICAgREVCVUcoImR5bmFtaWMgPSAlcCIsIHNpLT5keW5hbWljKTsKKyAgICAgICAgfQorICAgIH0KKworI2lmZGVmIEFORFJPSURfQVJNX0xJTktFUgorICAgICh2b2lkKSBwaGRyX3RhYmxlX2dldF9hcm1fZXhpZHgocGhkciwgcGhudW0sIGJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc2ktPkFSTV9leGlkeCwgJnNpLT5BUk1fZXhpZHhfY291bnQpOworI2VuZGlmCisKKyAgICAvLyBFeHRyYWN0IHVzZWZ1bCBpbmZvcm1hdGlvbiBmcm9tIGR5bmFtaWMgc2VjdGlvbi4KKyAgICB1aW50MzJfdCBuZWVkZWRfY291bnQgPSAwOworICAgIGZvciAoRWxmMzJfRHluKiBkID0gc2ktPmR5bmFtaWM7IGQtPmRfdGFnICE9IERUX05VTEw7ICsrZCkgeworICAgICAgICBERUJVRygiZCA9ICVwLCBkWzBdKHRhZykgPSAweCUwOHggZFsxXSh2YWwpID0gMHglMDh4IiwgZCwgZC0+ZF90YWcsIGQtPmRfdW4uZF92YWwpOworICAgICAgICBzd2l0Y2goZC0+ZF90YWcpeworICAgICAgICBjYXNlIERUX0hBU0g6CisgICAgICAgICAgICBzaS0+bmJ1Y2tldCA9ICgodW5zaWduZWQgKikgKGJhc2UgKyBkLT5kX3VuLmRfcHRyKSlbMF07CisgICAgICAgICAgICBzaS0+bmNoYWluID0gKCh1bnNpZ25lZCAqKSAoYmFzZSArIGQtPmRfdW4uZF9wdHIpKVsxXTsKKyAgICAgICAgICAgIHNpLT5idWNrZXQgPSAodW5zaWduZWQgKikgKGJhc2UgKyBkLT5kX3VuLmRfcHRyICsgOCk7CisgICAgICAgICAgICBzaS0+Y2hhaW4gPSAodW5zaWduZWQgKikgKGJhc2UgKyBkLT5kX3VuLmRfcHRyICsgOCArIHNpLT5uYnVja2V0ICogNCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBEVF9TVFJUQUI6CisgICAgICAgICAgICBzaS0+c3RydGFiID0gKGNvbnN0IGNoYXIgKikgKGJhc2UgKyBkLT5kX3VuLmRfcHRyKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIERUX1NZTVRBQjoKKyAgICAgICAgICAgIHNpLT5zeW10YWIgPSAoRWxmMzJfU3ltICopIChiYXNlICsgZC0+ZF91bi5kX3B0cik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBEVF9QTFRSRUw6CisgICAgICAgICAgICBpZiAoZC0+ZF91bi5kX3ZhbCAhPSBEVF9SRUwpIHsKKyAgICAgICAgICAgICAgICBETF9FUlIoInVuc3VwcG9ydGVkIERUX1JFTEEgaW4gXCIlc1wiIiwgc2ktPm5hbWUpOworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIERUX0pNUFJFTDoKKyAgICAgICAgICAgIHNpLT5wbHRfcmVsID0gKEVsZjMyX1JlbCopIChiYXNlICsgZC0+ZF91bi5kX3B0cik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBEVF9QTFRSRUxTWjoKKyAgICAgICAgICAgIHNpLT5wbHRfcmVsX2NvdW50ID0gZC0+ZF91bi5kX3ZhbCAvIHNpemVvZihFbGYzMl9SZWwpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRFRfUkVMOgorICAgICAgICAgICAgc2ktPnJlbCA9IChFbGYzMl9SZWwqKSAoYmFzZSArIGQtPmRfdW4uZF9wdHIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRFRfUkVMU1o6CisgICAgICAgICAgICBzaS0+cmVsX2NvdW50ID0gZC0+ZF91bi5kX3ZhbCAvIHNpemVvZihFbGYzMl9SZWwpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRFRfUExUR09UOgorICAgICAgICAgICAgLyogU2F2ZSB0aGlzIGluIGNhc2Ugd2UgZGVjaWRlIHRvIGRvIGxhenkgYmluZGluZy4gV2UgZG9uJ3QgeWV0LiAqLworICAgICAgICAgICAgc2ktPnBsdF9nb3QgPSAodW5zaWduZWQgKikoYmFzZSArIGQtPmRfdW4uZF9wdHIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRFRfREVCVUc6CisgICAgICAgICAgICAvLyBTZXQgdGhlIERUX0RFQlVHIGVudHJ5IHRvIHRoZSBhZGRyZXNzIG9mIF9yX2RlYnVnIGZvciBHREIKKyAgICAgICAgICAgIC8vIGlmIHRoZSBkeW5hbWljIHRhYmxlIGlzIHdyaXRhYmxlCisgICAgICAgICAgICBpZiAoKGR5bmFtaWNfZmxhZ3MgJiBQRl9XKSAhPSAwKSB7CisgICAgICAgICAgICAgICAgZC0+ZF91bi5kX3ZhbCA9IChpbnQpICZfcl9kZWJ1ZzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgY2FzZSBEVF9SRUxBOgorICAgICAgICAgICAgRExfRVJSKCJ1bnN1cHBvcnRlZCBEVF9SRUxBIGluIFwiJXNcIiIsIHNpLT5uYW1lKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgY2FzZSBEVF9JTklUOgorICAgICAgICAgICAgc2ktPmluaXRfZnVuYyA9IHJlaW50ZXJwcmV0X2Nhc3Q8bGlua2VyX2Z1bmN0aW9uX3Q+KGJhc2UgKyBkLT5kX3VuLmRfcHRyKTsKKyAgICAgICAgICAgIERFQlVHKCIlcyBjb25zdHJ1Y3RvcnMgKERUX0lOSVQpIGZvdW5kIGF0ICVwIiwgc2ktPm5hbWUsIHNpLT5pbml0X2Z1bmMpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRFRfRklOSToKKyAgICAgICAgICAgIHNpLT5maW5pX2Z1bmMgPSByZWludGVycHJldF9jYXN0PGxpbmtlcl9mdW5jdGlvbl90PihiYXNlICsgZC0+ZF91bi5kX3B0cik7CisgICAgICAgICAgICBERUJVRygiJXMgZGVzdHJ1Y3RvcnMgKERUX0ZJTkkpIGZvdW5kIGF0ICVwIiwgc2ktPm5hbWUsIHNpLT5maW5pX2Z1bmMpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRFRfSU5JVF9BUlJBWToKKyAgICAgICAgICAgIHNpLT5pbml0X2FycmF5ID0gcmVpbnRlcnByZXRfY2FzdDxsaW5rZXJfZnVuY3Rpb25fdCo+KGJhc2UgKyBkLT5kX3VuLmRfcHRyKTsKKyAgICAgICAgICAgIERFQlVHKCIlcyBjb25zdHJ1Y3RvcnMgKERUX0lOSVRfQVJSQVkpIGZvdW5kIGF0ICVwIiwgc2ktPm5hbWUsIHNpLT5pbml0X2FycmF5KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIERUX0lOSVRfQVJSQVlTWjoKKyAgICAgICAgICAgIHNpLT5pbml0X2FycmF5X2NvdW50ID0gKCh1bnNpZ25lZClkLT5kX3VuLmRfdmFsKSAvIHNpemVvZihFbGYzMl9BZGRyKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIERUX0ZJTklfQVJSQVk6CisgICAgICAgICAgICBzaS0+ZmluaV9hcnJheSA9IHJlaW50ZXJwcmV0X2Nhc3Q8bGlua2VyX2Z1bmN0aW9uX3QqPihiYXNlICsgZC0+ZF91bi5kX3B0cik7CisgICAgICAgICAgICBERUJVRygiJXMgZGVzdHJ1Y3RvcnMgKERUX0ZJTklfQVJSQVkpIGZvdW5kIGF0ICVwIiwgc2ktPm5hbWUsIHNpLT5maW5pX2FycmF5KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIERUX0ZJTklfQVJSQVlTWjoKKyAgICAgICAgICAgIHNpLT5maW5pX2FycmF5X2NvdW50ID0gKCh1bnNpZ25lZClkLT5kX3VuLmRfdmFsKSAvIHNpemVvZihFbGYzMl9BZGRyKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIERUX1BSRUlOSVRfQVJSQVk6CisgICAgICAgICAgICBzaS0+cHJlaW5pdF9hcnJheSA9IHJlaW50ZXJwcmV0X2Nhc3Q8bGlua2VyX2Z1bmN0aW9uX3QqPihiYXNlICsgZC0+ZF91bi5kX3B0cik7CisgICAgICAgICAgICBERUJVRygiJXMgY29uc3RydWN0b3JzIChEVF9QUkVJTklUX0FSUkFZKSBmb3VuZCBhdCAlcCIsIHNpLT5uYW1lLCBzaS0+cHJlaW5pdF9hcnJheSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBEVF9QUkVJTklUX0FSUkFZU1o6CisgICAgICAgICAgICBzaS0+cHJlaW5pdF9hcnJheV9jb3VudCA9ICgodW5zaWduZWQpZC0+ZF91bi5kX3ZhbCkgLyBzaXplb2YoRWxmMzJfQWRkcik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBEVF9URVhUUkVMOgorICAgICAgICAgICAgc2ktPmhhc190ZXh0X3JlbG9jYXRpb25zID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIERUX1NZTUJPTElDOgorICAgICAgICAgICAgc2ktPmhhc19EVF9TWU1CT0xJQyA9IHRydWU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBEVF9ORUVERUQ6CisgICAgICAgICAgICArK25lZWRlZF9jb3VudDsKKyAgICAgICAgICAgIGJyZWFrOworI2lmIGRlZmluZWQgRFRfRkxBR1MKKyAgICAgICAgLy8gVE9ETzogd2h5IGlzIERUX0ZMQUdTIG5vdCBkZWZpbmVkPworICAgICAgICBjYXNlIERUX0ZMQUdTOgorICAgICAgICAgICAgaWYgKGQtPmRfdW4uZF92YWwgJiBERl9URVhUUkVMKSB7CisgICAgICAgICAgICAgICAgc2ktPmhhc190ZXh0X3JlbG9jYXRpb25zID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChkLT5kX3VuLmRfdmFsICYgREZfU1lNQk9MSUMpIHsKKyAgICAgICAgICAgICAgICBzaS0+aGFzX0RUX1NZTUJPTElDID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworI2VuZGlmCisjaWYgZGVmaW5lZChBTkRST0lEX01JUFNfTElOS0VSKQorICAgICAgICBjYXNlIERUX1NUUlNaOgorICAgICAgICBjYXNlIERUX1NZTUVOVDoKKyAgICAgICAgY2FzZSBEVF9SRUxFTlQ6CisgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRFRfTUlQU19STERfTUFQOgorICAgICAgICAgICAgLy8gU2V0IHRoZSBEVF9NSVBTX1JMRF9NQVAgZW50cnkgdG8gdGhlIGFkZHJlc3Mgb2YgX3JfZGVidWcgZm9yIEdEQi4KKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgcl9kZWJ1ZyoqIGRwID0gKHJfZGVidWcqKikgZC0+ZF91bi5kX3B0cjsKKyAgICAgICAgICAgICAgKmRwID0gJl9yX2RlYnVnOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRFRfTUlQU19STERfVkVSU0lPTjoKKyAgICAgICAgY2FzZSBEVF9NSVBTX0ZMQUdTOgorICAgICAgICBjYXNlIERUX01JUFNfQkFTRV9BRERSRVNTOgorICAgICAgICBjYXNlIERUX01JUFNfVU5SRUZFWFROTzoKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgRFRfTUlQU19TWU1UQUJOTzoKKyAgICAgICAgICAgIHNpLT5taXBzX3N5bXRhYm5vID0gZC0+ZF91bi5kX3ZhbDsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgRFRfTUlQU19MT0NBTF9HT1ROTzoKKyAgICAgICAgICAgIHNpLT5taXBzX2xvY2FsX2dvdG5vID0gZC0+ZF91bi5kX3ZhbDsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgRFRfTUlQU19HT1RTWU06CisgICAgICAgICAgICBzaS0+bWlwc19nb3RzeW0gPSBkLT5kX3VuLmRfdmFsOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIERFQlVHKCJVbnVzZWQgRFQgZW50cnk6IHR5cGUgMHglMDh4IGFyZyAweCUwOHgiLCBkLT5kX3RhZywgZC0+ZF91bi5kX3ZhbCk7CisgICAgICAgICAgICBicmVhazsKKyNlbmRpZgorICAgICAgICB9CisgICAgfQorCisgICAgREVCVUcoInNpLT5iYXNlID0gMHglMDh4LCBzaS0+c3RydGFiID0gJXAsIHNpLT5zeW10YWIgPSAlcCIsCisgICAgICAgICAgc2ktPmJhc2UsIHNpLT5zdHJ0YWIsIHNpLT5zeW10YWIpOworCisgICAgLy8gU2FuaXR5IGNoZWNrcy4KKyAgICBpZiAocmVsb2NhdGluZ19saW5rZXIgJiYgbmVlZGVkX2NvdW50ICE9IDApIHsKKyAgICAgICAgRExfRVJSKCJsaW5rZXIgY2Fubm90IGhhdmUgRFRfTkVFREVEIGRlcGVuZGVuY2llcyBvbiBvdGhlciBsaWJyYXJpZXMiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBpZiAoc2ktPm5idWNrZXQgPT0gMCkgeworICAgICAgICBETF9FUlIoImVtcHR5L21pc3NpbmcgRFRfSEFTSCBpbiBcIiVzXCIgKGJ1aWx0IHdpdGggLS1oYXNoLXN0eWxlPWdudT8pIiwgc2ktPm5hbWUpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlmIChzaS0+c3RydGFiID09IDApIHsKKyAgICAgICAgRExfRVJSKCJlbXB0eS9taXNzaW5nIERUX1NUUlRBQiBpbiBcIiVzXCIiLCBzaS0+bmFtZSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgaWYgKHNpLT5zeW10YWIgPT0gMCkgeworICAgICAgICBETF9FUlIoImVtcHR5L21pc3NpbmcgRFRfU1lNVEFCIGluIFwiJXNcIiIsIHNpLT5uYW1lKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIElmIHRoaXMgaXMgdGhlIG1haW4gZXhlY3V0YWJsZSwgdGhlbiBsb2FkIGFsbCBvZiB0aGUgbGlicmFyaWVzIGZyb20gTERfUFJFTE9BRCBub3cuCisgICAgaWYgKHNpLT5mbGFncyAmIEZMQUdfRVhFKSB7CisgICAgICAgIG1lbXNldChnTGRQcmVsb2FkcywgMCwgc2l6ZW9mKGdMZFByZWxvYWRzKSk7CisgICAgICAgIHNpemVfdCBwcmVsb2FkX2NvdW50ID0gMDsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGdMZFByZWxvYWROYW1lc1tpXSAhPSBOVUxMOyBpKyspIHsKKyAgICAgICAgICAgIHNvaW5mbyogbHNpID0gZmluZF9saWJyYXJ5KGdMZFByZWxvYWROYW1lc1tpXSk7CisgICAgICAgICAgICBpZiAobHNpICE9IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBnTGRQcmVsb2Fkc1twcmVsb2FkX2NvdW50KytdID0gbHNpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyBBcyB3aXRoIGdsaWJjLCBmYWlsdXJlIHRvIGxvYWQgYW4gTERfUFJFTE9BRCBsaWJyYXJ5IGlzIGp1c3QgYSB3YXJuaW5nLgorICAgICAgICAgICAgICAgIERMX1dBUk4oImNvdWxkIG5vdCBsb2FkIGxpYnJhcnkgXCIlc1wiIGZyb20gTERfUFJFTE9BRCBmb3IgXCIlc1wiOyBjYXVzZWQgYnkgJXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgZ0xkUHJlbG9hZE5hbWVzW2ldLCBzaS0+bmFtZSwgbGlua2VyX2dldF9lcnJvcl9idWZmZXIoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzb2luZm8qKiBuZWVkZWQgPSAoc29pbmZvKiopIGFsbG9jYSgoMSArIG5lZWRlZF9jb3VudCkgKiBzaXplb2Yoc29pbmZvKikpOworICAgIHNvaW5mbyoqIHBuZWVkZWQgPSBuZWVkZWQ7CisKKyAgICBmb3IgKEVsZjMyX0R5biogZCA9IHNpLT5keW5hbWljOyBkLT5kX3RhZyAhPSBEVF9OVUxMOyArK2QpIHsKKyAgICAgICAgaWYgKGQtPmRfdGFnID09IERUX05FRURFRCkgeworICAgICAgICAgICAgY29uc3QgY2hhciogbGlicmFyeV9uYW1lID0gc2ktPnN0cnRhYiArIGQtPmRfdW4uZF92YWw7CisgICAgICAgICAgICBERUJVRygiJXMgbmVlZHMgJXMiLCBzaS0+bmFtZSwgbGlicmFyeV9uYW1lKTsKKyAgICAgICAgICAgIHNvaW5mbyogbHNpID0gZmluZF9saWJyYXJ5KGxpYnJhcnlfbmFtZSk7CisgICAgICAgICAgICBpZiAobHNpID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBzdHJsY3B5KHRtcF9lcnJfYnVmLCBsaW5rZXJfZ2V0X2Vycm9yX2J1ZmZlcigpLCBzaXplb2YodG1wX2Vycl9idWYpKTsKKyAgICAgICAgICAgICAgICBETF9FUlIoImNvdWxkIG5vdCBsb2FkIGxpYnJhcnkgXCIlc1wiIG5lZWRlZCBieSBcIiVzXCI7IGNhdXNlZCBieSAlcyIsCisgICAgICAgICAgICAgICAgICAgICAgIGxpYnJhcnlfbmFtZSwgc2ktPm5hbWUsIHRtcF9lcnJfYnVmKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAqcG5lZWRlZCsrID0gbHNpOworICAgICAgICB9CisgICAgfQorICAgICpwbmVlZGVkID0gTlVMTDsKKworICAgIGlmIChzaS0+aGFzX3RleHRfcmVsb2NhdGlvbnMpIHsKKyAgICAgICAgLyogVW5wcm90ZWN0IHRoZSBzZWdtZW50cywgaS5lLiBtYWtlIHRoZW0gd3JpdGFibGUsIHRvIGFsbG93CisgICAgICAgICAqIHRleHQgcmVsb2NhdGlvbnMgdG8gd29yayBwcm9wZXJseS4gV2Ugd2lsbCBsYXRlciBjYWxsCisgICAgICAgICAqIHBoZHJfdGFibGVfcHJvdGVjdF9zZWdtZW50cygpIGFmdGVyIGFsbCBvZiB0aGVtIGFyZSBhcHBsaWVkCisgICAgICAgICAqIGFuZCBhbGwgY29uc3RydWN0b3JzIGFyZSBydW4uCisgICAgICAgICAqLworICAgICAgICBETF9XQVJOKCIlcyBoYXMgdGV4dCByZWxvY2F0aW9ucy4gVGhpcyBpcyB3YXN0aW5nIG1lbW9yeSBhbmQgaXMgIgorICAgICAgICAgICAgICAgICJhIHNlY3VyaXR5IHJpc2suIFBsZWFzZSBmaXguIiwgc2ktPm5hbWUpOworICAgICAgICBpZiAocGhkcl90YWJsZV91bnByb3RlY3Rfc2VnbWVudHMoc2ktPnBoZHIsIHNpLT5waG51bSwgc2ktPmxvYWRfYmlhcykgPCAwKSB7CisgICAgICAgICAgICBETF9FUlIoImNhbid0IHVucHJvdGVjdCBsb2FkYWJsZSBzZWdtZW50cyBmb3IgXCIlc1wiOiAlcyIsCisgICAgICAgICAgICAgICAgICAgc2ktPm5hbWUsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoc2ktPnBsdF9yZWwgIT0gTlVMTCkgeworICAgICAgICBERUJVRygiWyByZWxvY2F0aW5nICVzIHBsdCBdIiwgc2ktPm5hbWUgKTsKKyAgICAgICAgaWYgKHNvaW5mb19yZWxvY2F0ZShzaSwgc2ktPnBsdF9yZWwsIHNpLT5wbHRfcmVsX2NvdW50LCBuZWVkZWQpKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKHNpLT5yZWwgIT0gTlVMTCkgeworICAgICAgICBERUJVRygiWyByZWxvY2F0aW5nICVzIF0iLCBzaS0+bmFtZSApOworICAgICAgICBpZiAoc29pbmZvX3JlbG9jYXRlKHNpLCBzaS0+cmVsLCBzaS0+cmVsX2NvdW50LCBuZWVkZWQpKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyNpZmRlZiBBTkRST0lEX01JUFNfTElOS0VSCisgICAgaWYgKG1pcHNfcmVsb2NhdGVfZ290KHNpLCBuZWVkZWQpKSB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisjZW5kaWYKKworICAgIHNpLT5mbGFncyB8PSBGTEFHX0xJTktFRDsKKyAgICBERUJVRygiWyBmaW5pc2hlZCBsaW5raW5nICVzIF0iLCBzaS0+bmFtZSk7CisKKyAgICBpZiAoc2ktPmhhc190ZXh0X3JlbG9jYXRpb25zKSB7CisgICAgICAgIC8qIEFsbCByZWxvY2F0aW9ucyBhcmUgZG9uZSwgd2UgY2FuIHByb3RlY3Qgb3VyIHNlZ21lbnRzIGJhY2sgdG8KKyAgICAgICAgICogcmVhZC1vbmx5LiAqLworICAgICAgICBpZiAocGhkcl90YWJsZV9wcm90ZWN0X3NlZ21lbnRzKHNpLT5waGRyLCBzaS0+cGhudW0sIHNpLT5sb2FkX2JpYXMpIDwgMCkgeworICAgICAgICAgICAgRExfRVJSKCJjYW4ndCBwcm90ZWN0IHNlZ21lbnRzIGZvciBcIiVzXCI6ICVzIiwKKyAgICAgICAgICAgICAgICAgICBzaS0+bmFtZSwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qIFdlIGNhbiBhbHNvIHR1cm4gb24gR05VIFJFTFJPIHByb3RlY3Rpb24gKi8KKyAgICBpZiAocGhkcl90YWJsZV9wcm90ZWN0X2dudV9yZWxybyhzaS0+cGhkciwgc2ktPnBobnVtLCBzaS0+bG9hZF9iaWFzKSA8IDApIHsKKyAgICAgICAgRExfRVJSKCJjYW4ndCBlbmFibGUgR05VIFJFTFJPIHByb3RlY3Rpb24gZm9yIFwiJXNcIjogJXMiLAorICAgICAgICAgICAgICAgc2ktPm5hbWUsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBub3RpZnlfZ2RiX29mX2xvYWQoc2kpOworICAgIHJldHVybiB0cnVlOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBhZGQgdmRzbyB0byBpbnRlcm5hbCBkc28gbGlzdC4KKyAqIEl0IGhlbHBzIHRvIHN0YWNrIHVud2luZGluZyB0aHJvdWdoIHNpZ25hbCBoYW5kbGVycy4KKyAqIEFsc28sIGl0IG1ha2VzIGJpb25pYyBtb3JlIGxpa2UgZ2xpYmMuCisgKi8KK3N0YXRpYyB2b2lkIGFkZF92ZHNvKEtlcm5lbEFyZ3VtZW50QmxvY2smIGFyZ3MgVU5VU0VEKSB7CisjaWZkZWYgQVRfU1lTSU5GT19FSERSCisgICAgRWxmMzJfRWhkciogZWhkcl92ZHNvID0gcmVpbnRlcnByZXRfY2FzdDxFbGYzMl9FaGRyKj4oYXJncy5nZXRhdXh2YWwoQVRfU1lTSU5GT19FSERSKSk7CisKKyAgICBzb2luZm8qIHNpID0gc29pbmZvX2FsbG9jKCJbdmRzb10iKTsKKyAgICBzaS0+cGhkciA9IHJlaW50ZXJwcmV0X2Nhc3Q8RWxmMzJfUGhkcio+KHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGVoZHJfdmRzbykgKyBlaGRyX3Zkc28tPmVfcGhvZmYpOworICAgIHNpLT5waG51bSA9IGVoZHJfdmRzby0+ZV9waG51bTsKKyAgICBzaS0+bGlua19tYXAubF9uYW1lID0gc2ktPm5hbWU7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaS0+cGhudW07ICsraSkgeworICAgICAgICBpZiAoc2ktPnBoZHJbaV0ucF90eXBlID09IFBUX0xPQUQpIHsKKyAgICAgICAgICAgIHNpLT5saW5rX21hcC5sX2FkZHIgPSByZWludGVycHJldF9jYXN0PEVsZjMyX0FkZHI+KGVoZHJfdmRzbykgLSBzaS0+cGhkcltpXS5wX3ZhZGRyOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYKK30KKworLyoKKyAqIFRoaXMgY29kZSBpcyBjYWxsZWQgYWZ0ZXIgdGhlIGxpbmtlciBoYXMgbGlua2VkIGl0c2VsZiBhbmQKKyAqIGZpeGVkIGl0J3Mgb3duIEdPVC4gSXQgaXMgc2FmZSB0byBtYWtlIHJlZmVyZW5jZXMgdG8gZXh0ZXJucworICogYW5kIG90aGVyIG5vbi1sb2NhbCBkYXRhIGF0IHRoaXMgcG9pbnQuCisgKi8KK3N0YXRpYyBFbGYzMl9BZGRyIF9fbGlua2VyX2luaXRfcG9zdF9yZWxvY2F0aW9uKEtlcm5lbEFyZ3VtZW50QmxvY2smIGFyZ3MsIEVsZjMyX0FkZHIgbGlua2VyX2Jhc2UpIHsKKyAgICAvKiBOT1RFOiB3ZSBzdG9yZSB0aGUgYXJncyBwb2ludGVyIG9uIGEgc3BlY2lhbCBsb2NhdGlvbgorICAgICAqICAgICAgIG9mIHRoZSB0ZW1wb3JhcnkgVExTIGFyZWEgaW4gb3JkZXIgdG8gcGFzcyBpdCB0bworICAgICAqICAgICAgIHRoZSBDIExpYnJhcnkncyBydW50aW1lIGluaXRpYWxpemVyLgorICAgICAqCisgICAgICogICAgICAgVGhlIGluaXRpYWxpemVyIG11c3QgY2xlYXIgdGhlIHNsb3QgYW5kIHJlc2V0IHRoZSBUTFMKKyAgICAgKiAgICAgICB0byBwb2ludCB0byBhIGRpZmZlcmVudCBsb2NhdGlvbiB0byBlbnN1cmUgdGhhdCBubyBvdGhlcgorICAgICAqICAgICAgIHNoYXJlZCBsaWJyYXJ5IGNvbnN0cnVjdG9yIGNhbiBhY2Nlc3MgaXQuCisgICAgICovCisgIF9fbGliY19pbml0X3RscyhhcmdzKTsKKworI2lmIFRJTUlORworICAgIHN0cnVjdCB0aW1ldmFsIHQwLCB0MTsKKyAgICBnZXR0aW1lb2ZkYXkoJnQwLCAwKTsKKyNlbmRpZgorCisgICAgLy8gSW5pdGlhbGl6ZSBlbnZpcm9ubWVudCBmdW5jdGlvbnMsIGFuZCBnZXQgdG8gdGhlIEVMRiBhdXggdmVjdG9ycyB0YWJsZS4KKyAgICBsaW5rZXJfZW52X2luaXQoYXJncyk7CisKKyAgICAvLyBJZiB0aGlzIGlzIGEgc2V0dWlkL3NldGdpZCBwcm9ncmFtLCBjbG9zZSB0aGUgc2VjdXJpdHkgaG9sZSBkZXNjcmliZWQgaW4KKyAgICAvLyBmdHA6Ly9mdHAuZnJlZWJzZC5vcmcvcHViL0ZyZWVCU0QvQ0VSVC9hZHZpc29yaWVzL0ZyZWVCU0QtU0EtMDI6MjMuc3RkaW8uYXNjCisgICAgaWYgKGdldF9BVF9TRUNVUkUoKSkgeworICAgICAgICBudWxsaWZ5X2Nsb3NlZF9zdGRpbygpOworICAgIH0KKworICAgIGRlYnVnZ2VyZF9pbml0KCk7CisKKyAgICAvLyBHZXQgYSBmZXcgZW52aXJvbm1lbnQgdmFyaWFibGVzLgorICAgIGNvbnN0IGNoYXIqIExEX0RFQlVHID0gbGlua2VyX2Vudl9nZXQoIkxEX0RFQlVHIik7CisgICAgaWYgKExEX0RFQlVHICE9IE5VTEwpIHsKKyAgICAgIGdMZERlYnVnVmVyYm9zaXR5ID0gYXRvaShMRF9ERUJVRyk7CisgICAgfQorCisgICAgLy8gTm9ybWFsbHksIHRoZXNlIGFyZSBjbGVhbmVkIGJ5IGxpbmtlcl9lbnZfaW5pdCwgYnV0IHRoZSB0ZXN0CisgICAgLy8gZG9lc24ndCBjb3N0IHVzIGFueXRoaW5nLgorICAgIGNvbnN0IGNoYXIqIGxkcGF0aF9lbnYgPSBOVUxMOworICAgIGNvbnN0IGNoYXIqIGxkcHJlbG9hZF9lbnYgPSBOVUxMOworICAgIGlmICghZ2V0X0FUX1NFQ1VSRSgpKSB7CisgICAgICBsZHBhdGhfZW52ID0gbGlua2VyX2Vudl9nZXQoIkxEX0xJQlJBUllfUEFUSCIpOworICAgICAgbGRwcmVsb2FkX2VudiA9IGxpbmtlcl9lbnZfZ2V0KCJMRF9QUkVMT0FEIik7CisgICAgfQorCisgICAgSU5GTygiWyBhbmRyb2lkIGxpbmtlciAmIGRlYnVnZ2VyIF0iKTsKKworICAgIHNvaW5mbyogc2kgPSBzb2luZm9fYWxsb2MoYXJncy5hcmd2WzBdKTsKKyAgICBpZiAoc2kgPT0gTlVMTCkgeworICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisgICAgfQorCisgICAgLyogYm9vdHN0cmFwIHRoZSBsaW5rIG1hcCwgdGhlIG1haW4gZXhlIGFsd2F5cyBuZWVkcyB0byBiZSBmaXJzdCAqLworICAgIHNpLT5mbGFncyB8PSBGTEFHX0VYRTsKKyAgICBsaW5rX21hcF90KiBtYXAgPSAmKHNpLT5saW5rX21hcCk7CisKKyAgICBtYXAtPmxfYWRkciA9IDA7CisgICAgbWFwLT5sX25hbWUgPSBhcmdzLmFyZ3ZbMF07CisgICAgbWFwLT5sX3ByZXYgPSBOVUxMOworICAgIG1hcC0+bF9uZXh0ID0gTlVMTDsKKworICAgIF9yX2RlYnVnLnJfbWFwID0gbWFwOworICAgIHJfZGVidWdfdGFpbCA9IG1hcDsKKworICAgIC8qIGdkYiBleHBlY3RzIHRoZSBsaW5rZXIgdG8gYmUgaW4gdGhlIGRlYnVnIHNoYXJlZCBvYmplY3QgbGlzdC4KKyAgICAgKiBXaXRob3V0IHRoaXMsIGdkYiBoYXMgdHJvdWJsZSBsb2NhdGluZyB0aGUgbGlua2VyJ3MgIi50ZXh0IgorICAgICAqIGFuZCAiLnBsdCIgc2VjdGlvbnMuIEdkYiBjb3VsZCBhbHNvIHBvdGVudGlhbGx5IHVzZSB0aGlzIHRvCisgICAgICogcmVsb2NhdGUgdGhlIG9mZnNldCBvZiBvdXIgZXhwb3J0ZWQgJ3J0bGRfZGJfZGxhY3Rpdml0eScgc3ltYm9sLgorICAgICAqIERvbid0IHVzZSBzb2luZm9fYWxsb2MoKSwgYmVjYXVzZSB0aGUgbGlua2VyIHNob3VsZG4ndAorICAgICAqIGJlIG9uIHRoZSBzb2luZm8gbGlzdC4KKyAgICAgKi8KKyAgICB7CisgICAgICAgIHN0YXRpYyBzb2luZm8gbGlua2VyX3NvaW5mbzsKKyAgICAgICAgc3RybGNweShsaW5rZXJfc29pbmZvLm5hbWUsICIvc3lzdGVtL2Jpbi9saW5rZXIiLCBzaXplb2YobGlua2VyX3NvaW5mby5uYW1lKSk7CisgICAgICAgIGxpbmtlcl9zb2luZm8uZmxhZ3MgPSAwOworICAgICAgICBsaW5rZXJfc29pbmZvLmJhc2UgPSBsaW5rZXJfYmFzZTsKKworICAgICAgICAvKgorICAgICAgICAgKiBTZXQgdGhlIGR5bmFtaWMgZmllbGQgaW4gdGhlIGxpbmsgbWFwIG90aGVyd2lzZSBnZGIgd2lsbCBjb21wbGFpbiB3aXRoCisgICAgICAgICAqIHRoZSBmb2xsb3dpbmc6CisgICAgICAgICAqICAgd2FybmluZzogLmR5bmFtaWMgc2VjdGlvbiBmb3IgIi9zeXN0ZW0vYmluL2xpbmtlciIgaXMgbm90IGF0IHRoZQorICAgICAgICAgKiAgIGV4cGVjdGVkIGFkZHJlc3MgKHdyb25nIGxpYnJhcnkgb3IgdmVyc2lvbiBtaXNtYXRjaD8pCisgICAgICAgICAqLworICAgICAgICBFbGYzMl9FaGRyICplbGZfaGRyID0gKEVsZjMyX0VoZHIgKikgbGlua2VyX2Jhc2U7CisgICAgICAgIEVsZjMyX1BoZHIgKnBoZHIgPSAoRWxmMzJfUGhkciopKCh1bnNpZ25lZCBjaGFyKikgbGlua2VyX2Jhc2UgKyBlbGZfaGRyLT5lX3Bob2ZmKTsKKyAgICAgICAgcGhkcl90YWJsZV9nZXRfZHluYW1pY19zZWN0aW9uKHBoZHIsIGVsZl9oZHItPmVfcGhudW0sIGxpbmtlcl9iYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmxpbmtlcl9zb2luZm8uZHluYW1pYywgTlVMTCwgTlVMTCk7CisgICAgICAgIGluc2VydF9zb2luZm9faW50b19kZWJ1Z19tYXAoJmxpbmtlcl9zb2luZm8pOworICAgIH0KKworICAgIC8vIEV4dHJhY3QgaW5mb3JtYXRpb24gcGFzc2VkIGZyb20gdGhlIGtlcm5lbC4KKyAgICBzaS0+cGhkciA9IHJlaW50ZXJwcmV0X2Nhc3Q8RWxmMzJfUGhkcio+KGFyZ3MuZ2V0YXV4dmFsKEFUX1BIRFIpKTsKKyAgICBzaS0+cGhudW0gPSBhcmdzLmdldGF1eHZhbChBVF9QSE5VTSk7CisgICAgc2ktPmVudHJ5ID0gYXJncy5nZXRhdXh2YWwoQVRfRU5UUlkpOworCisgICAgLyogQ29tcHV0ZSB0aGUgdmFsdWUgb2Ygc2ktPmJhc2UuIFdlIGNhbid0IHJlbHkgb24gdGhlIGZhY3QgdGhhdAorICAgICAqIHRoZSBmaXJzdCBlbnRyeSBpcyB0aGUgUEhEUiBiZWNhdXNlIHRoaXMgd2lsbCBub3QgYmUgdHJ1ZQorICAgICAqIGZvciBjZXJ0YWluIGV4ZWN1dGFibGVzIChlLmcuIHNvbWUgaW4gdGhlIE5ESyB1bml0IHRlc3Qgc3VpdGUpCisgICAgICovCisgICAgc2ktPmJhc2UgPSAwOworICAgIHNpLT5zaXplID0gcGhkcl90YWJsZV9nZXRfbG9hZF9zaXplKHNpLT5waGRyLCBzaS0+cGhudW0pOworICAgIHNpLT5sb2FkX2JpYXMgPSAwOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2ktPnBobnVtOyArK2kpIHsKKyAgICAgIGlmIChzaS0+cGhkcltpXS5wX3R5cGUgPT0gUFRfUEhEUikgeworICAgICAgICBzaS0+bG9hZF9iaWFzID0gcmVpbnRlcnByZXRfY2FzdDxFbGYzMl9BZGRyPihzaS0+cGhkcikgLSBzaS0+cGhkcltpXS5wX3ZhZGRyOworICAgICAgICBzaS0+YmFzZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8RWxmMzJfQWRkcj4oc2ktPnBoZHIpIC0gc2ktPnBoZHJbaV0ucF9vZmZzZXQ7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgIH0KKyAgICBzaS0+ZHluYW1pYyA9IE5VTEw7CisgICAgc2ktPnJlZl9jb3VudCA9IDE7CisKKyAgICAvLyBVc2UgTERfTElCUkFSWV9QQVRIIGFuZCBMRF9QUkVMT0FEIChidXQgb25seSBpZiB3ZSBhcmVuJ3Qgc2V0dWlkL3NldGdpZCkuCisgICAgcGFyc2VfTERfTElCUkFSWV9QQVRIKGxkcGF0aF9lbnYpOworICAgIHBhcnNlX0xEX1BSRUxPQUQobGRwcmVsb2FkX2Vudik7CisKKyAgICBzb21haW4gPSBzaTsKKworICAgIGlmICghc29pbmZvX2xpbmtfaW1hZ2Uoc2kpKSB7CisgICAgICAgIF9fbGliY19mb3JtYXRfZmQoMiwgIkNBTk5PVCBMSU5LIEVYRUNVVEFCTEU6ICVzXG4iLCBsaW5rZXJfZ2V0X2Vycm9yX2J1ZmZlcigpKTsKKyAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOworICAgIH0KKworICAgIGFkZF92ZHNvKGFyZ3MpOworCisgICAgc2ktPkNhbGxQcmVJbml0Q29uc3RydWN0b3JzKCk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgZ0xkUHJlbG9hZHNbaV0gIT0gTlVMTDsgKytpKSB7CisgICAgICAgIGdMZFByZWxvYWRzW2ldLT5DYWxsQ29uc3RydWN0b3JzKCk7CisgICAgfQorCisgICAgLyogQWZ0ZXIgdGhlIGxpbmtfaW1hZ2UsIHRoZSBzaS0+bG9hZF9iaWFzIGlzIGluaXRpYWxpemVkLgorICAgICAqIEZvciBzbyBsaWIsIHRoZSBtYXAtPmxfYWRkciB3aWxsIGJlIHVwZGF0ZWQgaW4gbm90aWZ5X2dkYl9vZl9sb2FkLgorICAgICAqIFdlIG5lZWQgdG8gdXBkYXRlIHRoaXMgdmFsdWUgZm9yIHNvIGV4ZSBoZXJlLiBTbyBVbndpbmRfQmFja3RyYWNlCisgICAgICogZm9yIHNvbWUgYXJjaCBsaWtlIHg4NiBjb3VsZCB3b3JrIGNvcnJlY3RseSB3aXRoaW4gc28gZXhlLgorICAgICAqLworICAgIG1hcC0+bF9hZGRyID0gc2ktPmxvYWRfYmlhczsKKyAgICBzaS0+Q2FsbENvbnN0cnVjdG9ycygpOworCisjaWYgVElNSU5HCisgICAgZ2V0dGltZW9mZGF5KCZ0MSxOVUxMKTsKKyAgICBQUklOVCgiTElOS0VSIFRJTUU6ICVzOiAlZCBtaWNyb3NlY29uZHMiLCBhcmdzLmFyZ3ZbMF0sIChpbnQpICgKKyAgICAgICAgICAgICAgICgoKGxvbmcgbG9uZyl0MS50dl9zZWMgKiAxMDAwMDAwTEwpICsgKGxvbmcgbG9uZyl0MS50dl91c2VjKSAtCisgICAgICAgICAgICAgICAoKChsb25nIGxvbmcpdDAudHZfc2VjICogMTAwMDAwMExMKSArIChsb25nIGxvbmcpdDAudHZfdXNlYykKKyAgICAgICAgICAgICAgICkpOworI2VuZGlmCisjaWYgU1RBVFMKKyAgICBQUklOVCgiUkVMTyBTVEFUUzogJXM6ICVkIGFicywgJWQgcmVsLCAlZCBjb3B5LCAlZCBzeW1ib2wiLCBhcmdzLmFyZ3ZbMF0sCisgICAgICAgICAgIGxpbmtlcl9zdGF0cy5jb3VudFtrUmVsb2NBYnNvbHV0ZV0sCisgICAgICAgICAgIGxpbmtlcl9zdGF0cy5jb3VudFtrUmVsb2NSZWxhdGl2ZV0sCisgICAgICAgICAgIGxpbmtlcl9zdGF0cy5jb3VudFtrUmVsb2NDb3B5XSwKKyAgICAgICAgICAgbGlua2VyX3N0YXRzLmNvdW50W2tSZWxvY1N5bWJvbF0pOworI2VuZGlmCisjaWYgQ09VTlRfUEFHRVMKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIG47CisgICAgICAgIHVuc2lnbmVkIGk7CisgICAgICAgIHVuc2lnbmVkIGNvdW50ID0gMDsKKyAgICAgICAgZm9yIChuID0gMDsgbiA8IDQwOTY7IG4rKykgeworICAgICAgICAgICAgaWYgKGJpdG1hc2tbbl0pIHsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCB4ID0gYml0bWFza1tuXTsKKyAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICh4ICYgMSkgeworICAgICAgICAgICAgICAgICAgICAgICAgY291bnQrKzsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB4ID4+PSAxOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBQUklOVCgiUEFHRVMgTU9ESUZJRUQ6ICVzOiAlZCAoJWRLQikiLCBhcmdzLmFyZ3ZbMF0sIGNvdW50LCBjb3VudCAqIDQpOworICAgIH0KKyNlbmRpZgorCisjaWYgVElNSU5HIHx8IFNUQVRTIHx8IENPVU5UX1BBR0VTCisgICAgZmZsdXNoKHN0ZG91dCk7CisjZW5kaWYKKworICAgIFRSQUNFKCJbIFJlYWR5IHRvIGV4ZWN1dGUgJyVzJyBAIDB4JTA4eCBdIiwgc2ktPm5hbWUsIHNpLT5lbnRyeSk7CisgICAgcmV0dXJuIHNpLT5lbnRyeTsKK30KKworLyogQ29tcHV0ZSB0aGUgbG9hZC1iaWFzIG9mIGFuIGV4aXN0aW5nIGV4ZWN1dGFibGUuIFRoaXMgc2hhbGwgb25seQorICogYmUgdXNlZCB0byBjb21wdXRlIHRoZSBsb2FkIGJpYXMgb2YgYW4gZXhlY3V0YWJsZSBvciBzaGFyZWQgbGlicmFyeQorICogdGhhdCB3YXMgbG9hZGVkIGJ5IHRoZSBrZXJuZWwgaXRzZWxmLgorICoKKyAqIElucHV0OgorICogICAgZWxmICAgIC0+IGFkZHJlc3Mgb2YgRUxGIGhlYWRlciwgYXNzdW1lZCB0byBiZSBhdCB0aGUgc3RhcnQgb2YgdGhlIGZpbGUuCisgKiBSZXR1cm46CisgKiAgICBsb2FkIGJpYXMsIGkuZS4gYWRkIHRoZSB2YWx1ZSBvZiBhbnkgcF92YWRkciBpbiB0aGUgZmlsZSB0byBnZXQKKyAqICAgIHRoZSBjb3JyZXNwb25kaW5nIGFkZHJlc3MgaW4gbWVtb3J5LgorICovCitzdGF0aWMgRWxmMzJfQWRkciBnZXRfZWxmX2V4ZWNfbG9hZF9iaWFzKGNvbnN0IEVsZjMyX0VoZHIqIGVsZikgeworICBFbGYzMl9BZGRyICAgICAgICBvZmZzZXQgICAgID0gZWxmLT5lX3Bob2ZmOworICBjb25zdCBFbGYzMl9QaGRyKiBwaGRyX3RhYmxlID0gKGNvbnN0IEVsZjMyX1BoZHIqKSgoY2hhciopZWxmICsgb2Zmc2V0KTsKKyAgY29uc3QgRWxmMzJfUGhkciogcGhkcl9lbmQgICA9IHBoZHJfdGFibGUgKyBlbGYtPmVfcGhudW07CisKKyAgZm9yIChjb25zdCBFbGYzMl9QaGRyKiBwaGRyID0gcGhkcl90YWJsZTsgcGhkciA8IHBoZHJfZW5kOyBwaGRyKyspIHsKKyAgICBpZiAocGhkci0+cF90eXBlID09IFBUX0xPQUQpIHsKKyAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PEVsZjMyX0FkZHI+KGVsZikgKyBwaGRyLT5wX29mZnNldCAtIHBoZHItPnBfdmFkZHI7CisgICAgfQorICB9CisgIHJldHVybiAwOworfQorCisvKgorICogVGhpcyBpcyB0aGUgZW50cnkgcG9pbnQgZm9yIHRoZSBsaW5rZXIsIGNhbGxlZCBmcm9tIGJlZ2luLlMuIFRoaXMKKyAqIG1ldGhvZCBpcyByZXNwb25zaWJsZSBmb3IgZml4aW5nIHRoZSBsaW5rZXIncyBvd24gcmVsb2NhdGlvbnMsIGFuZAorICogdGhlbiBjYWxsaW5nIF9fbGlua2VyX2luaXRfcG9zdF9yZWxvY2F0aW9uKCkuCisgKgorICogQmVjYXVzZSB0aGlzIG1ldGhvZCBpcyBjYWxsZWQgYmVmb3JlIHRoZSBsaW5rZXIgaGFzIGZpeGVkIGl0J3Mgb3duCisgKiByZWxvY2F0aW9ucywgYW55IGF0dGVtcHQgdG8gcmVmZXJlbmNlIGFuIGV4dGVybiB2YXJpYWJsZSwgZXh0ZXJuCisgKiBmdW5jdGlvbiwgb3Igb3RoZXIgR09UIHJlZmVyZW5jZSB3aWxsIGdlbmVyYXRlIGEgc2VnZmF1bHQuCisgKi8KK2V4dGVybiAiQyIgRWxmMzJfQWRkciBfX2xpbmtlcl9pbml0KHZvaWQqIHJhd19hcmdzKSB7CisgIEtlcm5lbEFyZ3VtZW50QmxvY2sgYXJncyhyYXdfYXJncyk7CisKKyAgRWxmMzJfQWRkciBsaW5rZXJfYWRkciA9IGFyZ3MuZ2V0YXV4dmFsKEFUX0JBU0UpOworCisgIEVsZjMyX0VoZHIqIGVsZl9oZHIgPSAoRWxmMzJfRWhkciopIGxpbmtlcl9hZGRyOworICBFbGYzMl9QaGRyKiBwaGRyID0gKEVsZjMyX1BoZHIqKSgodW5zaWduZWQgY2hhciopIGxpbmtlcl9hZGRyICsgZWxmX2hkci0+ZV9waG9mZik7CisKKyAgc29pbmZvIGxpbmtlcl9zbzsKKyAgbWVtc2V0KCZsaW5rZXJfc28sIDAsIHNpemVvZihzb2luZm8pKTsKKworICBsaW5rZXJfc28uYmFzZSA9IGxpbmtlcl9hZGRyOworICBsaW5rZXJfc28uc2l6ZSA9IHBoZHJfdGFibGVfZ2V0X2xvYWRfc2l6ZShwaGRyLCBlbGZfaGRyLT5lX3BobnVtKTsKKyAgbGlua2VyX3NvLmxvYWRfYmlhcyA9IGdldF9lbGZfZXhlY19sb2FkX2JpYXMoZWxmX2hkcik7CisgIGxpbmtlcl9zby5keW5hbWljID0gTlVMTDsKKyAgbGlua2VyX3NvLnBoZHIgPSBwaGRyOworICBsaW5rZXJfc28ucGhudW0gPSBlbGZfaGRyLT5lX3BobnVtOworICBsaW5rZXJfc28uZmxhZ3MgfD0gRkxBR19MSU5LRVI7CisKKyAgaWYgKCFzb2luZm9fbGlua19pbWFnZSgmbGlua2VyX3NvKSkgeworICAgIC8vIEl0IHdvdWxkIGJlIG5pY2UgdG8gcHJpbnQgYW4gZXJyb3IgbWVzc2FnZSwgYnV0IGlmIHRoZSBsaW5rZXIKKyAgICAvLyBjYW4ndCBsaW5rIGl0c2VsZiwgdGhlcmUncyBubyBndWFyYW50ZWUgdGhhdCB3ZSdsbCBiZSBhYmxlIHRvCisgICAgLy8gY2FsbCB3cml0ZSgpIChiZWNhdXNlIGl0IGludm9sdmVzIGEgR09UIHJlZmVyZW5jZSkuCisgICAgLy8KKyAgICAvLyBUaGlzIHNpdHVhdGlvbiBzaG91bGQgbmV2ZXIgb2NjdXIgdW5sZXNzIHRoZSBsaW5rZXIgaXRzZWxmCisgICAgLy8gaXMgY29ycnVwdC4KKyAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisgIH0KKworICAvLyBXZSBoYXZlIHN1Y2Nlc3NmdWxseSBmaXhlZCBvdXIgb3duIHJlbG9jYXRpb25zLiBJdCdzIHNhZmUgdG8gcnVuCisgIC8vIHRoZSBtYWluIHBhcnQgb2YgdGhlIGxpbmtlciBub3cuCisgIGFyZ3MuYWJvcnRfbWVzc2FnZV9wdHIgPSAmZ0Fib3J0TWVzc2FnZTsKKyAgRWxmMzJfQWRkciBzdGFydF9hZGRyZXNzID0gX19saW5rZXJfaW5pdF9wb3N0X3JlbG9jYXRpb24oYXJncywgbGlua2VyX2FkZHIpOworCisgIHNldF9zb2luZm9fcG9vbF9wcm90ZWN0aW9uKFBST1RfUkVBRCk7CisKKyAgLy8gUmV0dXJuIHRoZSBhZGRyZXNzIHRoYXQgdGhlIGNhbGxpbmcgYXNzZW1ibHkgc3R1YiBzaG91bGQganVtcCB0by4KKyAgcmV0dXJuIHN0YXJ0X2FkZHJlc3M7Cit9CmRpZmYgLS1naXQgYS9saW5rZXIvbGlua2VyLmggYi9saW5rZXIvbGlua2VyLmgKaW5kZXggZDI5NDg0Yy4uMjAwYTY4MiAxMDA2NDQKLS0tIGEvbGlua2VyL2xpbmtlci5oCisrKyBiL2xpbmtlci9saW5rZXIuaApAQCAtMzEsMTgxICszMSwxNzQgQEAKIAogI2luY2x1ZGUgPHVuaXN0ZC5oPgogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L2VsZi5oPgorI2luY2x1ZGUgPGVsZi5oPgorI2luY2x1ZGUgPHN5cy9leGVjX2VsZi5oPgogCi0jdW5kZWYgUEFHRV9NQVNLCi0jdW5kZWYgUEFHRV9TSVpFCi0jZGVmaW5lIFBBR0VfU0laRSA0MDk2Ci0jZGVmaW5lIFBBR0VfTUFTSyA0MDk1CisjaW5jbHVkZSA8bGluay5oPgogCi12b2lkIGRlYnVnZ2VyX2luaXQoKTsKLWNvbnN0IGNoYXIgKmFkZHJfdG9fbmFtZSh1bnNpZ25lZCBhZGRyKTsKKyNpbmNsdWRlICJwcml2YXRlL2xpYmNfbG9nZ2luZy5oIgogCi0vKiBtYWdpYyBzaGFyZWQgc3RydWN0dXJlcyB0aGF0IEdEQiBrbm93cyBhYm91dCAqLworI2RlZmluZSBETF9FUlIoZm10LCB4Li4uKSBcCisgICAgZG8geyBcCisgICAgICBfX2xpYmNfZm9ybWF0X2J1ZmZlcihsaW5rZXJfZ2V0X2Vycm9yX2J1ZmZlcigpLCBsaW5rZXJfZ2V0X2Vycm9yX2J1ZmZlcl9zaXplKCksIGZtdCwgIyN4KTsgXAorICAgICAgLyogSWYgTERfREVCVUcgaXMgc2V0IGhpZ2ggZW5vdWdoLCBsb2cgZXZlcnkgZGxlcnJvcigzKSBtZXNzYWdlLiAqLyBcCisgICAgICBERUJVRygiJXNcbiIsIGxpbmtlcl9nZXRfZXJyb3JfYnVmZmVyKCkpOyBcCisgICAgfSB3aGlsZSAoZmFsc2UpCiAKLXN0cnVjdCBsaW5rX21hcAotewotICAgIHVpbnRwdHJfdCBsX2FkZHI7Ci0gICAgY2hhciAqIGxfbmFtZTsKLSAgICB1aW50cHRyX3QgbF9sZDsKLSAgICBzdHJ1Y3QgbGlua19tYXAgKiBsX25leHQ7Ci0gICAgc3RydWN0IGxpbmtfbWFwICogbF9wcmV2OworI2RlZmluZSBETF9XQVJOKGZtdCwgeC4uLikgXAorICAgIGRvIHsgXAorICAgICAgX19saWJjX2Zvcm1hdF9sb2coQU5EUk9JRF9MT0dfV0FSTiwgImxpbmtlciIsIGZtdCwgIyN4KTsgXAorICAgICAgX19saWJjX2Zvcm1hdF9mZCgyLCAiV0FSTklORzogbGlua2VyOiAiKTsgXAorICAgICAgX19saWJjX2Zvcm1hdF9mZCgyLCBmbXQsICMjeCk7IFwKKyAgICAgIF9fbGliY19mb3JtYXRfZmQoMiwgIlxuIik7IFwKKyAgICB9IHdoaWxlIChmYWxzZSkKKworCisvLyBSZXR1cm5zIHRoZSBhZGRyZXNzIG9mIHRoZSBwYWdlIGNvbnRhaW5pbmcgYWRkcmVzcyAneCcuCisjZGVmaW5lIFBBR0VfU1RBUlQoeCkgICgoeCkgJiBQQUdFX01BU0spCisKKy8vIFJldHVybnMgdGhlIG9mZnNldCBvZiBhZGRyZXNzICd4JyBpbiBpdHMgcGFnZS4KKyNkZWZpbmUgUEFHRV9PRkZTRVQoeCkgKCh4KSAmIH5QQUdFX01BU0spCisKKy8vIFJldHVybnMgdGhlIGFkZHJlc3Mgb2YgdGhlIG5leHQgcGFnZSBhZnRlciBhZGRyZXNzICd4JywgdW5sZXNzICd4JyBpcworLy8gaXRzZWxmIGF0IHRoZSBzdGFydCBvZiBhIHBhZ2UuCisjZGVmaW5lIFBBR0VfRU5EKHgpICAgIFBBR0VfU1RBUlQoKHgpICsgKFBBR0VfU0laRS0xKSkKKworLy8gTWFnaWMgc2hhcmVkIHN0cnVjdHVyZXMgdGhhdCBHREIga25vd3MgYWJvdXQuCisKK3N0cnVjdCBsaW5rX21hcF90IHsKKyAgdWludHB0cl90IGxfYWRkcjsKKyAgY2hhciogIGxfbmFtZTsKKyAgdWludHB0cl90IGxfbGQ7CisgIGxpbmtfbWFwX3QqIGxfbmV4dDsKKyAgbGlua19tYXBfdCogbF9wcmV2OwogfTsKIAotLyogbmVlZGVkIGZvciBkbF9pdGVyYXRlX3BoZHIgdG8gYmUgcGFzc2VkIHRvIHRoZSBjYWxsYmFja3MgcHJvdmlkZWQgKi8KLXN0cnVjdCBkbF9waGRyX2luZm8KLXsKLSAgICBFbGYzMl9BZGRyIGRscGlfYWRkcjsKLSAgICBjb25zdCBjaGFyICpkbHBpX25hbWU7Ci0gICAgY29uc3QgRWxmMzJfUGhkciAqZGxwaV9waGRyOwotICAgIEVsZjMyX0hhbGYgZGxwaV9waG51bTsKLX07Ci0KLQogLy8gVmFsdWVzIGZvciByX2RlYnVnLT5zdGF0ZQogZW51bSB7Ci0gICAgUlRfQ09OU0lTVEVOVCwKLSAgICBSVF9BREQsCi0gICAgUlRfREVMRVRFCisgIFJUX0NPTlNJU1RFTlQsCisgIFJUX0FERCwKKyAgUlRfREVMRVRFCiB9OwogCi1zdHJ1Y3Qgcl9kZWJ1ZwotewotICAgIGludDMyX3Qgcl92ZXJzaW9uOwotICAgIHN0cnVjdCBsaW5rX21hcCAqIHJfbWFwOwotICAgIHZvaWQgKCpyX2Jyaykodm9pZCk7Ci0gICAgaW50MzJfdCByX3N0YXRlOwotICAgIHVpbnRwdHJfdCByX2xkYmFzZTsKK3N0cnVjdCByX2RlYnVnIHsKKyAgaW50MzJfdCByX3ZlcnNpb247CisgIGxpbmtfbWFwX3QqIHJfbWFwOworICB2b2lkICgqcl9icmspKHZvaWQpOworICBpbnQzMl90IHJfc3RhdGU7CisgIHVpbnRwdHJfdCByX2xkYmFzZTsKIH07CiAKLXR5cGVkZWYgc3RydWN0IHNvaW5mbyBzb2luZm87Ci0KICNkZWZpbmUgRkxBR19MSU5LRUQgICAgIDB4MDAwMDAwMDEKLSNkZWZpbmUgRkxBR19FUlJPUiAgICAgIDB4MDAwMDAwMDIKICNkZWZpbmUgRkxBR19FWEUgICAgICAgIDB4MDAwMDAwMDQgLy8gVGhlIG1haW4gZXhlY3V0YWJsZQorI2RlZmluZSBGTEFHX0xJTktFUiAgICAgMHgwMDAwMDAxMCAvLyBUaGUgbGlua2VyIGl0c2VsZgogCiAjZGVmaW5lIFNPSU5GT19OQU1FX0xFTiAxMjgKIAotc3RydWN0IHNvaW5mbwotewotICAgIGNvbnN0IGNoYXIgbmFtZVtTT0lORk9fTkFNRV9MRU5dOwotICAgIEVsZjMyX1BoZHIgKnBoZHI7Ci0gICAgaW50IHBobnVtOwotICAgIHVuc2lnbmVkIGVudHJ5OwotICAgIHVuc2lnbmVkIGJhc2U7Ci0gICAgdW5zaWduZWQgc2l6ZTsKK3R5cGVkZWYgdm9pZCAoKmxpbmtlcl9mdW5jdGlvbl90KSgpOwogCi0gICAgaW50IHVudXNlZDsgIC8vIERPIE5PVCBVU0UsIG1haW50YWluZWQgZm9yIGNvbXBhdGliaWxpdHkuCitzdHJ1Y3Qgc29pbmZvIHsKKyBwdWJsaWM6CisgIGNoYXIgbmFtZVtTT0lORk9fTkFNRV9MRU5dOworICBjb25zdCBFbGYzMl9QaGRyKiBwaGRyOworICBzaXplX3QgcGhudW07CisgIEVsZjMyX0FkZHIgZW50cnk7CisgIEVsZjMyX0FkZHIgYmFzZTsKKyAgdW5zaWduZWQgc2l6ZTsKIAotICAgIHVuc2lnbmVkICpkeW5hbWljOworICB1aW50MzJfdCB1bnVzZWQxOyAgLy8gRE8gTk9UIFVTRSwgbWFpbnRhaW5lZCBmb3IgY29tcGF0aWJpbGl0eS4KIAotICAgIHVuc2lnbmVkIHdycHJvdGVjdF9zdGFydDsKLSAgICB1bnNpZ25lZCB3cnByb3RlY3RfZW5kOworICBFbGYzMl9EeW4qIGR5bmFtaWM7CiAKLSAgICBzb2luZm8gKm5leHQ7Ci0gICAgdW5zaWduZWQgZmxhZ3M7CisgIHVpbnQzMl90IHVudXNlZDI7IC8vIERPIE5PVCBVU0UsIG1haW50YWluZWQgZm9yIGNvbXBhdGliaWxpdHkKKyAgdWludDMyX3QgdW51c2VkMzsgLy8gRE8gTk9UIFVTRSwgbWFpbnRhaW5lZCBmb3IgY29tcGF0aWJpbGl0eQogCi0gICAgY29uc3QgY2hhciAqc3RydGFiOwotICAgIEVsZjMyX1N5bSAqc3ltdGFiOworICBzb2luZm8qIG5leHQ7CisgIHVuc2lnbmVkIGZsYWdzOwogCi0gICAgdW5zaWduZWQgbmJ1Y2tldDsKLSAgICB1bnNpZ25lZCBuY2hhaW47Ci0gICAgdW5zaWduZWQgKmJ1Y2tldDsKLSAgICB1bnNpZ25lZCAqY2hhaW47CisgIGNvbnN0IGNoYXIqIHN0cnRhYjsKKyAgRWxmMzJfU3ltKiBzeW10YWI7CiAKLSAgICB1bnNpZ25lZCAqcGx0X2dvdDsKKyAgc2l6ZV90IG5idWNrZXQ7CisgIHNpemVfdCBuY2hhaW47CisgIHVuc2lnbmVkKiBidWNrZXQ7CisgIHVuc2lnbmVkKiBjaGFpbjsKIAotICAgIEVsZjMyX1JlbCAqcGx0X3JlbDsKLSAgICB1bnNpZ25lZCBwbHRfcmVsX2NvdW50OworICB1bnNpZ25lZCogcGx0X2dvdDsKIAotICAgIEVsZjMyX1JlbCAqcmVsOwotICAgIHVuc2lnbmVkIHJlbF9jb3VudDsKKyAgRWxmMzJfUmVsKiBwbHRfcmVsOworICBzaXplX3QgcGx0X3JlbF9jb3VudDsKIAotICAgIHVuc2lnbmVkICpwcmVpbml0X2FycmF5OwotICAgIHVuc2lnbmVkIHByZWluaXRfYXJyYXlfY291bnQ7CisgIEVsZjMyX1JlbCogcmVsOworICBzaXplX3QgcmVsX2NvdW50OwogCi0gICAgdW5zaWduZWQgKmluaXRfYXJyYXk7Ci0gICAgdW5zaWduZWQgaW5pdF9hcnJheV9jb3VudDsKLSAgICB1bnNpZ25lZCAqZmluaV9hcnJheTsKLSAgICB1bnNpZ25lZCBmaW5pX2FycmF5X2NvdW50OworICBsaW5rZXJfZnVuY3Rpb25fdCogcHJlaW5pdF9hcnJheTsKKyAgc2l6ZV90IHByZWluaXRfYXJyYXlfY291bnQ7CiAKLSAgICB2b2lkICgqaW5pdF9mdW5jKSh2b2lkKTsKLSAgICB2b2lkICgqZmluaV9mdW5jKSh2b2lkKTsKKyAgbGlua2VyX2Z1bmN0aW9uX3QqIGluaXRfYXJyYXk7CisgIHNpemVfdCBpbml0X2FycmF5X2NvdW50OworICBsaW5rZXJfZnVuY3Rpb25fdCogZmluaV9hcnJheTsKKyAgc2l6ZV90IGZpbmlfYXJyYXlfY291bnQ7CiAKLSNpZmRlZiBBTkRST0lEX0FSTV9MSU5LRVIKLSAgICAvKiBBUk0gRUFCSSBzZWN0aW9uIHVzZWQgZm9yIHN0YWNrIHVud2luZGluZy4gKi8KLSAgICB1bnNpZ25lZCAqQVJNX2V4aWR4OwotICAgIHVuc2lnbmVkIEFSTV9leGlkeF9jb3VudDsKKyAgbGlua2VyX2Z1bmN0aW9uX3QgaW5pdF9mdW5jOworICBsaW5rZXJfZnVuY3Rpb25fdCBmaW5pX2Z1bmM7CisKKyNpZiBkZWZpbmVkKEFORFJPSURfQVJNX0xJTktFUikKKyAgLy8gQVJNIEVBQkkgc2VjdGlvbiB1c2VkIGZvciBzdGFjayB1bndpbmRpbmcuCisgIHVuc2lnbmVkKiBBUk1fZXhpZHg7CisgIHNpemVfdCBBUk1fZXhpZHhfY291bnQ7CisjZWxpZiBkZWZpbmVkKEFORFJPSURfTUlQU19MSU5LRVIpCisgIHVuc2lnbmVkIG1pcHNfc3ltdGFibm87CisgIHVuc2lnbmVkIG1pcHNfbG9jYWxfZ290bm87CisgIHVuc2lnbmVkIG1pcHNfZ290c3ltOwogI2VuZGlmCiAKLSAgICB1bnNpZ25lZCByZWZjb3VudDsKLSAgICBzdHJ1Y3QgbGlua19tYXAgbGlua21hcDsKLX07CisgIHNpemVfdCByZWZfY291bnQ7CisgIGxpbmtfbWFwX3QgbGlua19tYXA7CiAKKyAgYm9vbCBjb25zdHJ1Y3RvcnNfY2FsbGVkOworCisgIC8vIFdoZW4geW91IHJlYWQgYSB2aXJ0dWFsIGFkZHJlc3MgZnJvbSB0aGUgRUxGIGZpbGUsIGFkZCB0aGlzCisgIC8vIHZhbHVlIHRvIGdldCB0aGUgY29ycmVzcG9uZGluZyBhZGRyZXNzIGluIHRoZSBwcm9jZXNzJyBhZGRyZXNzIHNwYWNlLgorICBFbGYzMl9BZGRyIGxvYWRfYmlhczsKKworICBib29sIGhhc190ZXh0X3JlbG9jYXRpb25zOworICBib29sIGhhc19EVF9TWU1CT0xJQzsKKworICB2b2lkIENhbGxDb25zdHJ1Y3RvcnMoKTsKKyAgdm9pZCBDYWxsRGVzdHJ1Y3RvcnMoKTsKKyAgdm9pZCBDYWxsUHJlSW5pdENvbnN0cnVjdG9ycygpOworCisgcHJpdmF0ZToKKyAgdm9pZCBDYWxsQXJyYXkoY29uc3QgY2hhciogYXJyYXlfbmFtZSwgbGlua2VyX2Z1bmN0aW9uX3QqIGZ1bmN0aW9ucywgc2l6ZV90IGNvdW50LCBib29sIHJldmVyc2UpOworICB2b2lkIENhbGxGdW5jdGlvbihjb25zdCBjaGFyKiBmdW5jdGlvbl9uYW1lLCBsaW5rZXJfZnVuY3Rpb25fdCBmdW5jdGlvbik7Cit9OwogCiBleHRlcm4gc29pbmZvIGxpYmRsX2luZm87CiAKLSNpZmRlZiBBTkRST0lEX0FSTV9MSU5LRVIKLQotI2RlZmluZSBSX0FSTV9DT1BZICAgICAgIDIwCi0jZGVmaW5lIFJfQVJNX0dMT0JfREFUICAgMjEKLSNkZWZpbmUgUl9BUk1fSlVNUF9TTE9UICAyMgotI2RlZmluZSBSX0FSTV9SRUxBVElWRSAgIDIzCi0KLS8qIEFjY29yZGluZyB0byB0aGUgQUFQQ1Mgc3BlY2lmaWNhdGlvbiwgd2Ugb25seQotICogbmVlZCB0aGUgYWJvdmUgcmVsb2NhdGlvbnMuIEhvd2V2ZXIsIGluIHByYWN0aWNlLAotICogdGhlIGZvbGxvd2luZyBvbmVzIHR1cm4gdXAgZnJvbSB0aW1lIHRvIHRpbWUuCi0gKi8KLSNkZWZpbmUgUl9BUk1fQUJTMzIgICAgICAyCi0jZGVmaW5lIFJfQVJNX1JFTDMyICAgICAgMwotCi0jZWxpZiBkZWZpbmVkKEFORFJPSURfWDg2X0xJTktFUikKLQotI2RlZmluZSBSXzM4Nl8zMiAgICAgICAgIDEKLSNkZWZpbmUgUl8zODZfUEMzMiAgICAgICAyCi0jZGVmaW5lIFJfMzg2X0dMT0JfREFUICAgNgotI2RlZmluZSBSXzM4Nl9KVU1QX1NMT1QgIDcKLSNkZWZpbmUgUl8zODZfUkVMQVRJVkUgICA4Ci0KLSNlbmRpZgotCi0jaWZuZGVmIERUX0lOSVRfQVJSQVkKLSNkZWZpbmUgRFRfSU5JVF9BUlJBWSAgICAgIDI1Ci0jZW5kaWYKLQotI2lmbmRlZiBEVF9GSU5JX0FSUkFZCi0jZGVmaW5lIERUX0ZJTklfQVJSQVkgICAgICAyNgotI2VuZGlmCi0KLSNpZm5kZWYgRFRfSU5JVF9BUlJBWVNaCi0jZGVmaW5lIERUX0lOSVRfQVJSQVlTWiAgICAyNwotI2VuZGlmCi0KLSNpZm5kZWYgRFRfRklOSV9BUlJBWVNaCi0jZGVmaW5lIERUX0ZJTklfQVJSQVlTWiAgICAyOAotI2VuZGlmCi0KKy8vIFRoZXNlIGFyZW4ndCBkZWZpbmVkIGluIDxzeXMvZXhlY19lbGYuaD4uCiAjaWZuZGVmIERUX1BSRUlOSVRfQVJSQVkKICNkZWZpbmUgRFRfUFJFSU5JVF9BUlJBWSAgIDMyCiAjZW5kaWYKLQogI2lmbmRlZiBEVF9QUkVJTklUX0FSUkFZU1oKICNkZWZpbmUgRFRfUFJFSU5JVF9BUlJBWVNaIDMzCiAjZW5kaWYKIAotc29pbmZvICpmaW5kX2xpYnJhcnkoY29uc3QgY2hhciAqbmFtZSk7Ci11bnNpZ25lZCB1bmxvYWRfbGlicmFyeShzb2luZm8gKnNpKTsKLUVsZjMyX1N5bSAqbG9va3VwX2luX2xpYnJhcnkoc29pbmZvICpzaSwgY29uc3QgY2hhciAqbmFtZSk7Ci1FbGYzMl9TeW0gKmxvb2t1cChjb25zdCBjaGFyICpuYW1lLCBzb2luZm8gKipmb3VuZCwgc29pbmZvICpzdGFydCk7Ci1zb2luZm8gKmZpbmRfY29udGFpbmluZ19saWJyYXJ5KGNvbnN0IHZvaWQgKmFkZHIpOwotRWxmMzJfU3ltICpmaW5kX2NvbnRhaW5pbmdfc3ltYm9sKGNvbnN0IHZvaWQgKmFkZHIsIHNvaW5mbyAqc2kpOwotY29uc3QgY2hhciAqbGlua2VyX2dldF9lcnJvcih2b2lkKTsKK3ZvaWQgZG9fYW5kcm9pZF91cGRhdGVfTERfTElCUkFSWV9QQVRIKGNvbnN0IGNoYXIqIGxkX2xpYnJhcnlfcGF0aCk7Citzb2luZm8qIGRvX2Rsb3Blbihjb25zdCBjaGFyKiBuYW1lLCBpbnQgZmxhZ3MpOworaW50IGRvX2RsY2xvc2Uoc29pbmZvKiBzaSk7CiAKLSNpZmRlZiBBTkRST0lEX0FSTV9MSU5LRVIgCi10eXBlZGVmIGxvbmcgdW5zaWduZWQgaW50ICpfVW53aW5kX1B0cjsKLV9VbndpbmRfUHRyIGRsX3Vud2luZF9maW5kX2V4aWR4KF9VbndpbmRfUHRyIHBjLCBpbnQgKnBjb3VudCk7Ci0jZWxpZiBkZWZpbmVkKEFORFJPSURfWDg2X0xJTktFUikKLWludCBkbF9pdGVyYXRlX3BoZHIoaW50ICgqY2IpKHN0cnVjdCBkbF9waGRyX2luZm8gKiwgc2l6ZV90LCB2b2lkICopLCB2b2lkICopOwotI2VuZGlmCitFbGYzMl9TeW0qIGRsc3ltX2xpbmVhcl9sb29rdXAoY29uc3QgY2hhciogbmFtZSwgc29pbmZvKiogZm91bmQsIHNvaW5mbyogc3RhcnQpOworc29pbmZvKiBmaW5kX2NvbnRhaW5pbmdfbGlicmFyeShjb25zdCB2b2lkKiBhZGRyKTsKKworRWxmMzJfU3ltKiBkbGFkZHJfZmluZF9zeW1ib2woc29pbmZvKiBzaSwgY29uc3Qgdm9pZCogYWRkcik7CitFbGYzMl9TeW0qIGRsc3ltX2hhbmRsZV9sb29rdXAoc29pbmZvKiBzaSwgY29uc3QgY2hhciogbmFtZSk7CisKK3ZvaWQgZGVidWdnZXJkX2luaXQoKTsKK2V4dGVybiAiQyIgYWJvcnRfbXNnX3QqIGdBYm9ydE1lc3NhZ2U7CitleHRlcm4gIkMiIHZvaWQgbm90aWZ5X2dkYl9vZl9saWJyYXJpZXMoKTsKKworY2hhciogbGlua2VyX2dldF9lcnJvcl9idWZmZXIoKTsKK3NpemVfdCBsaW5rZXJfZ2V0X2Vycm9yX2J1ZmZlcl9zaXplKCk7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGlua2VyL2xpbmtlcl9kZWJ1Zy5oIGIvbGlua2VyL2xpbmtlcl9kZWJ1Zy5oCmluZGV4IDNmMDgzMDMuLjdkMjQ4NTMgMTAwNjQ0Ci0tLSBhL2xpbmtlci9saW5rZXJfZGVidWcuaAorKysgYi9saW5rZXIvbGlua2VyX2RlYnVnLmgKQEAgLTMxLDE0ICszMSwxNiBAQAogCiAjaW5jbHVkZSA8c3RkaW8uaD4KIAotI2lmbmRlZiBMSU5LRVJfREVCVUcKLSNlcnJvciBMSU5LRVJfREVCVUcgc2hvdWxkIGJlIGRlZmluZWQgdG8gZWl0aGVyIDEgb3IgMCBpbiBBbmRyb2lkLm1rCi0jZW5kaWYKKy8vIFlvdSBjYW4gaW5jcmVhc2UgdGhlIHZlcmJvc2l0eSBvZiBkZWJ1ZyB0cmFjZXMgYnkgZGVmaW5pbmcgdGhlIExEX0RFQlVHCisvLyBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byBhIG51bWVyaWMgdmFsdWUgZnJvbSAwIHRvIDIgKGNvcnJlc3BvbmRpbmcgdG8KKy8vIElORk8sIFRSQUNFLCBhbmQgREVCVUcgY2FsbHMgaW4gdGhlIHNvdXJjZSkuIFRoaXMgd2lsbCBvbmx5CisvLyBhZmZlY3QgbmV3IHByb2Nlc3NlcyBiZWluZyBsYXVuY2hlZC4KIAotLyogc2V0IExJTktFUl9ERUJVR19UT19MT0cgdG8gMSB0byBzZW5kIHRoZSBsb2dzIHRvIGxvZ2NhdCwKLSAqIG9yIDAgdG8gdXNlIHN0ZG91dCBpbnN0ZWFkLgotICovCisvLyBCeSBkZWZhdWx0LCB0cmFjZXMgYXJlIHNlbnQgdG8gbG9nY2F0LCB3aXRoIHRoZSAibGlua2VyIiB0YWcuIFlvdSBjYW4KKy8vIGNoYW5nZSB0aGlzIHRvIGdvIHRvIHN0ZG91dCBpbnN0ZWFkIGJ5IHNldHRpbmcgdGhlIGRlZmluaXRpb24gb2YKKy8vIExJTktFUl9ERUJVR19UT19MT0cgdG8gMC4KICNkZWZpbmUgTElOS0VSX0RFQlVHX1RPX0xPRyAgMQorCiAjZGVmaW5lIFRSQUNFX0RFQlVHICAgICAgICAgIDEKICNkZWZpbmUgRE9fVFJBQ0VfTE9PS1VQICAgICAgMQogI2RlZmluZSBET19UUkFDRV9SRUxPICAgICAgICAxCkBAIC01NSwxMDEgKzU3LDMzIEBACiAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSN1bmRlZiBUUlVFCi0jdW5kZWYgRkFMU0UKLSNkZWZpbmUgVFJVRSAgICAgICAgICAgICAgICAgMQotI2RlZmluZSBGQUxTRSAgICAgICAgICAgICAgICAwCiAKLS8qIE9ubHkgdXNlIHByaW50ZigpIGR1cmluZyBkZWJ1Z2dpbmcuICBXZSBoYXZlIHNlZW4gb2NjYXNpb25hbCBtZW1vcnkKLSAqIGNvcnJ1cHRpb24gd2hlbiB0aGUgbGlua2VyIHVzZXMgcHJpbnRmKCkuCi0gKi8KLSNpZiBMSU5LRVJfREVCVUcKLSNpbmNsdWRlICJsaW5rZXJfZm9ybWF0LmgiCi1leHRlcm4gaW50IGRlYnVnX3ZlcmJvc2l0eTsKKyNpbmNsdWRlICJwcml2YXRlL2xpYmNfbG9nZ2luZy5oIgorCitfX0xJQkNfSElEREVOX18gZXh0ZXJuIGludCBnTGREZWJ1Z1ZlcmJvc2l0eTsKKwogI2lmIExJTktFUl9ERUJVR19UT19MT0cKLWV4dGVybiBpbnQgZm9ybWF0X2xvZyhpbnQsIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCAuLi4pOwotI2RlZmluZSBfUFJJTlRWRih2LGYseC4uLikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBpZiAoZGVidWdfdmVyYm9zaXR5ID4gKHYpKSBmb3JtYXRfbG9nKDUtKHYpLCJsaW5rZXIiLHgpOyAgXAorI2RlZmluZSBfUFJJTlRWRih2LHguLi4pIFwKKyAgICBkbyB7IFwKKyAgICAgIGlmIChnTGREZWJ1Z1ZlcmJvc2l0eSA+ICh2KSkgX19saWJjX2Zvcm1hdF9sb2coNS0odiksImxpbmtlciIseCk7IFwKICAgICB9IHdoaWxlICgwKQogI2Vsc2UgLyogIUxJTktFUl9ERUJVR19UT19MT0cgKi8KLWV4dGVybiBpbnQgZm9ybWF0X2ZkKGludCwgY29uc3QgY2hhciAqLCAuLi4pOwotI2RlZmluZSBfUFJJTlRWRih2LGYseC4uLikgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgaWYgKGRlYnVnX3ZlcmJvc2l0eSA+ICh2KSkgZm9ybWF0X2ZkKDEsIHgpOyAgXAorI2RlZmluZSBfUFJJTlRWRih2LHguLi4pIFwKKyAgICBkbyB7IFwKKyAgICAgIGlmIChnTGREZWJ1Z1ZlcmJvc2l0eSA+ICh2KSkgeyBfX2xpYmNfZm9ybWF0X2ZkKDEsIHgpOyB3cml0ZSgxLCAiXG4iLCAxKTsgfSBcCiAgICAgfSB3aGlsZSAoMCkKICNlbmRpZiAvKiAhTElOS0VSX0RFQlVHX1RPX0xPRyAqLwotI2Vsc2UgLyogIUxJTktFUl9ERUJVRyAqLwotI2RlZmluZSBfUFJJTlRWRih2LGYseC4uLikgICBkbyB7fSB3aGlsZSgwKQotI2VuZGlmIC8qIExJTktFUl9ERUJVRyAqLwogCi0jZGVmaW5lIFBSSU5UKHguLi4pICAgICAgICAgIF9QUklOVFZGKC0xLCBGQUxTRSwgeCkKLSNkZWZpbmUgSU5GTyh4Li4uKSAgICAgICAgICAgX1BSSU5UVkYoMCwgVFJVRSwgeCkKLSNkZWZpbmUgVFJBQ0UoeC4uLikgICAgICAgICAgX1BSSU5UVkYoMSwgVFJVRSwgeCkKLSNkZWZpbmUgV0FSTihmbXQsYXJncy4uLikgICAgXAotICAgICAgICBfUFJJTlRWRigtMSwgVFJVRSwgIiVzOiVkfCBXQVJOSU5HOiAiIGZtdCwgX19GSUxFX18sIF9fTElORV9fLCAjIyBhcmdzKQotI2RlZmluZSBFUlJPUihmbXQsYXJncy4uLikgICAgXAotICAgICAgICBfUFJJTlRWRigtMSwgVFJVRSwgIiVzOiVkfCBFUlJPUjogIiBmbXQsIF9fRklMRV9fLCBfX0xJTkVfXywgIyMgYXJncykKLQorI2RlZmluZSBQUklOVCh4Li4uKSAgICAgICAgICBfUFJJTlRWRigtMSwgeCkKKyNkZWZpbmUgSU5GTyh4Li4uKSAgICAgICAgICAgX1BSSU5UVkYoMCwgeCkKKyNkZWZpbmUgVFJBQ0UoeC4uLikgICAgICAgICAgX1BSSU5UVkYoMSwgeCkKIAogI2lmIFRSQUNFX0RFQlVHCi0jZGVmaW5lIERFQlVHKHguLi4pICAgICAgICAgIF9QUklOVFZGKDIsIFRSVUUsICJERUJVRzogIiB4KQorI2RlZmluZSBERUJVRyh4Li4uKSAgICAgICAgICBfUFJJTlRWRigyLCAiREVCVUc6ICIgeCkKICNlbHNlIC8qICFUUkFDRV9ERUJVRyAqLwogI2RlZmluZSBERUJVRyh4Li4uKSAgICAgICAgICBkbyB7fSB3aGlsZSAoMCkKICNlbmRpZiAvKiBUUkFDRV9ERUJVRyAqLwogCi0jaWYgTElOS0VSX0RFQlVHCiAjZGVmaW5lIFRSQUNFX1RZUEUodCx4Li4uKSAgIGRvIHsgaWYgKERPX1RSQUNFXyMjdCkgeyBUUkFDRSh4KTsgfSB9IHdoaWxlICgwKQotI2Vsc2UgIC8qICFMSU5LRVJfREVCVUcgKi8KLSNkZWZpbmUgVFJBQ0VfVFlQRSh0LHguLi4pICAgZG8ge30gd2hpbGUgKDApCi0jZW5kaWYgLyogTElOS0VSX0RFQlVHICovCi0KLSNpZiBTVEFUUwotI2RlZmluZSBSRUxPQ19BQlNPTFVURSAgICAgICAgMAotI2RlZmluZSBSRUxPQ19SRUxBVElWRSAgICAgICAgMQotI2RlZmluZSBSRUxPQ19DT1BZICAgICAgICAgICAgMgotI2RlZmluZSBSRUxPQ19TWU1CT0wgICAgICAgICAgMwotI2RlZmluZSBOVU1fUkVMT0NfU1RBVFMgICAgICAgNAotCi1zdHJ1Y3QgX2xpbmtfc3RhdHMgewotICAgIGludCByZWxvY1tOVU1fUkVMT0NfU1RBVFNdOwotfTsKLWV4dGVybiBzdHJ1Y3QgX2xpbmtfc3RhdHMgbGlua2VyX3N0YXRzOwotCi0jZGVmaW5lIENPVU5UX1JFTE9DKHR5cGUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBkbyB7IGlmICh0eXBlID49IDAgJiYgdHlwZSA8IE5VTV9SRUxPQ19TVEFUUykgeyAgIFwKLSAgICAgICAgICAgICAgICBsaW5rZXJfc3RhdHMucmVsb2NbdHlwZV0gKz0gMTsgICAgICAgICAgICBcCi0gICAgICAgICAgICAgfSBlbHNlICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIFBSSU5UKCJVbmtub3duIHJlbG9jIHN0YXQgcmVxdWVzdGVkXG4iKTsgIFwKLSAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgIH0gd2hpbGUoMCkKLSNlbHNlIC8qICFTVEFUUyAqLwotI2RlZmluZSBDT1VOVF9SRUxPQyh0eXBlKSAgICAgZG8ge30gd2hpbGUoMCkKLSNlbmRpZiAvKiBTVEFUUyAqLwotCi0jaWYgVElNSU5HCi0jdW5kZWYgV0FSTgotI2RlZmluZSBXQVJOKHguLi4pICAgICAgICAgICBkbyB7fSB3aGlsZSAoMCkKLSNlbmRpZiAvKiBUSU1JTkcgKi8KLQotI2lmIENPVU5UX1BBR0VTCi1leHRlcm4gdW5zaWduZWQgYml0bWFza1tdOwotI2RlZmluZSBNQVJLKG9mZnNldCkgICAgICAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgYml0bWFza1soKG9mZnNldCkgPj4gMTIpID4+IDNdIHw9ICgxIDw8ICgoKG9mZnNldCkgPj4gMTIpICYgNykpOyBcCi0gICAgfSB3aGlsZSgwKQotI2Vsc2UKLSNkZWZpbmUgTUFSSyh4KSAgICAgICAgICAgICAgZG8ge30gd2hpbGUgKDApCi0jZW5kaWYKLQotI2RlZmluZSBERUJVR19EVU1QX1BIRFIocGhkciwgbmFtZSwgcGlkKSBkbyB7IFwKLSAgICAgICAgREVCVUcoIiU1ZCAlcyAocGhkciA9IDB4JTA4eClcbiIsIChwaWQpLCAobmFtZSksICh1bnNpZ25lZCkocGhkcikpOyAgIFwKLSAgICAgICAgREVCVUcoIlx0XHRwaGRyLT5vZmZzZXQgICA9IDB4JTA4eFxuIiwgKHVuc2lnbmVkKSgocGhkciktPnBfb2Zmc2V0KSk7IFwKLSAgICAgICAgREVCVUcoIlx0XHRwaGRyLT5wX3ZhZGRyICA9IDB4JTA4eFxuIiwgKHVuc2lnbmVkKSgocGhkciktPnBfdmFkZHIpKTsgIFwKLSAgICAgICAgREVCVUcoIlx0XHRwaGRyLT5wX3BhZGRyICA9IDB4JTA4eFxuIiwgKHVuc2lnbmVkKSgocGhkciktPnBfcGFkZHIpKTsgIFwKLSAgICAgICAgREVCVUcoIlx0XHRwaGRyLT5wX2ZpbGVzeiA9IDB4JTA4eFxuIiwgKHVuc2lnbmVkKSgocGhkciktPnBfZmlsZXN6KSk7IFwKLSAgICAgICAgREVCVUcoIlx0XHRwaGRyLT5wX21lbXN6ICA9IDB4JTA4eFxuIiwgKHVuc2lnbmVkKSgocGhkciktPnBfbWVtc3opKTsgIFwKLSAgICAgICAgREVCVUcoIlx0XHRwaGRyLT5wX2ZsYWdzICA9IDB4JTA4eFxuIiwgKHVuc2lnbmVkKSgocGhkciktPnBfZmxhZ3MpKTsgIFwKLSAgICAgICAgREVCVUcoIlx0XHRwaGRyLT5wX2FsaWduICA9IDB4JTA4eFxuIiwgKHVuc2lnbmVkKSgocGhkciktPnBfYWxpZ24pKTsgIFwKLSAgICB9IHdoaWxlICgwKQogCiAjZW5kaWYgLyogX0xJTktFUl9ERUJVR19IXyAqLwpkaWZmIC0tZ2l0IGEvbGlua2VyL2xpbmtlcl9lbnZpcm9uLmMgYi9saW5rZXIvbGlua2VyX2Vudmlyb24uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjcxZGQ4MC4uMDAwMDAwMAotLS0gYS9saW5rZXIvbGlua2VyX2Vudmlyb24uYworKysgL2Rldi9udWxsCkBAIC0xLDIwNCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogICAgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUwotICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKLSAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCi0gKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKLSAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAotICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0gKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0jaW5jbHVkZSAibGlua2VyX2Vudmlyb24uaCIKLSNpbmNsdWRlIDxzdGRkZWYuaD4KLQotc3RhdGljIGNoYXIqKiBfZW52cDsKLQotLyogUmV0dXJucyAxIGlmICdzdHInIHBvaW50cyB0byBhIHZhbGlkIGVudmlyb25tZW50IHZhcmlhYmxlIGRlZmluaXRpb24uCi0gKiBGb3Igbm93LCB3ZSBjaGVjayB0aGF0OgotICogIC0gSXQgaXMgc21hbGxlciB0aGFuIE1BWF9FTlZfTEVOICh0byBkZXRlY3Qgbm9uLXplcm8gdGVybWluYXRlZCBzdHJpbmdzKQotICogIC0gSXQgY29udGFpbnMgYXQgbGVhc3Qgb25lIGVxdWFsIHNpZ24gdGhhdCBpcyBub3QgdGhlIGZpcnN0IGNoYXJhY3RlcgotICovCi1zdGF0aWMgaW50Ci1faXNfdmFsaWRfZGVmaW5pdGlvbihjb25zdCBjaGFyKiAgc3RyKQotewotICAgIGludCAgIHBvcyA9IDA7Ci0gICAgaW50ICAgZmlyc3RfZXF1YWxfcG9zID0gLTE7Ci0KLSAgICAvKiBBY2NvcmRpbmcgdG8gaXRzIHNvdXJjZXMsIHRoZSBrZXJuZWwgdXNlcyAzMipQQUdFX1NJWkUgYnkgZGVmYXVsdAotICAgICAqIGFzIHRoZSBtYXhpbXVtIHNpemUgZm9yIGFuIGVudi4gdmFyaWFibGUgZGVmaW5pdGlvbi4KLSAgICAgKi8KLSAgICBjb25zdCBpbnQgTUFYX0VOVl9MRU4gPSAzMio0MDk2OwotCi0gICAgaWYgKHN0ciA9PSBOVUxMKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIC8qIFBhcnNlIHRoZSBzdHJpbmcsIGxvb2tpbmcgZm9yIHRoZSBmaXJzdCAnPScgdGhlcmUsIGFuZCBpdHMgc2l6ZSAqLwotICAgIGRvIHsKLSAgICAgICAgaWYgKHN0cltwb3NdID09ICdcMCcpCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgaWYgKHN0cltwb3NdID09ICc9JyAmJiBmaXJzdF9lcXVhbF9wb3MgPCAwKQotICAgICAgICAgICAgZmlyc3RfZXF1YWxfcG9zID0gcG9zOwotICAgICAgICBwb3MrKzsKLSAgICB9IHdoaWxlIChwb3MgPCBNQVhfRU5WX0xFTik7Ci0KLSAgICBpZiAocG9zID49IE1BWF9FTlZfTEVOKSAgLyogVG9vIGxhcmdlICovCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgaWYgKGZpcnN0X2VxdWFsX3BvcyA8IDEpICAvKiBObyBlcXVhbCBzaWduLCBvciBpdCBpcyB0aGUgZmlyc3QgY2hhcmFjdGVyICovCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIDE7Ci19Ci0KLXVuc2lnbmVkKgotbGlua2VyX2Vudl9pbml0KHVuc2lnbmVkKiB2ZWNzKQotewotICAgIC8qIFN0b3JlIGVudmlyb25tZW50IHBvaW50ZXIgLSBjYW4ndCBiZSBOVUxMICovCi0gICAgX2VudnAgPSAoY2hhcioqKSB2ZWNzOwotCi0gICAgLyogU2tpcCBvdmVyIGFsbCBkZWZpbml0aW9ucyAqLwotICAgIHdoaWxlICh2ZWNzWzBdICE9IDApCi0gICAgICAgIHZlY3MrKzsKLSAgICAvKiBUaGUgZW5kIG9mIHRoZSBlbnZpcm9ubWVudCBibG9jayBpcyBtYXJrZWQgYnkgdHdvIE5VTEwgcG9pbnRlcnMgKi8KLSAgICB2ZWNzKys7Ci0KLSAgICAvKiBBcyBhIHNhbml0eSBjaGVjaywgd2UncmUgZ29pbmcgdG8gcmVtb3ZlIGFsbCBpbnZhbGlkIHZhcmlhYmxlCi0gICAgICogZGVmaW5pdGlvbnMgZnJvbSB0aGUgZW52aXJvbm1lbnQgYXJyYXkuCi0gICAgICovCi0gICAgewotICAgICAgICBjaGFyKiogcmVhZHAgID0gX2VudnA7Ci0gICAgICAgIGNoYXIqKiB3cml0ZXAgPSBfZW52cDsKLSAgICAgICAgZm9yICggOyByZWFkcFswXSAhPSBOVUxMOyByZWFkcCsrICkgewotICAgICAgICAgICAgaWYgKCFfaXNfdmFsaWRfZGVmaW5pdGlvbihyZWFkcFswXSkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB3cml0ZXBbMF0gPSByZWFkcFswXTsKLSAgICAgICAgICAgIHdyaXRlcCsrOwotICAgICAgICB9Ci0gICAgICAgIHdyaXRlcFswXSA9IE5VTEw7Ci0gICAgfQotCi0gICAgLyogUmV0dXJuIHRoZSBhZGRyZXNzIG9mIHRoZSBhdXggdmVjdG9ycyB0YWJsZSAqLwotICAgIHJldHVybiB2ZWNzOwotfQotCi0vKiBDaGVjayBpZiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgZGVmaW5pdGlvbiBhdCAnZW52c3RyJwotICogc3RhcnRzIHdpdGggJzxuYW1lPj0nLCBhbmQgaWYgc28gcmV0dXJuIHRoZSBhZGRyZXNzIG9mIHRoZQotICogZmlyc3QgY2hhcmFjdGVyIGFmdGVyIHRoZSBlcXVhbCBzaWduLiBPdGhlcndpc2UgcmV0dXJuIE5VTEwuCi0gKi8KLXN0YXRpYyBjaGFyKgotZW52X21hdGNoKGNoYXIqIGVudnN0ciwgY29uc3QgY2hhciogbmFtZSkKLXsKLSAgICBzaXplX3QgIGNudCA9IDA7Ci0KLSAgICB3aGlsZSAoZW52c3RyW2NudF0gPT0gbmFtZVtjbnRdICYmIG5hbWVbY250XSAhPSAnXDAnKQotICAgICAgICBjbnQrKzsKLQotICAgIGlmIChuYW1lW2NudF0gPT0gJ1wwJyAmJiBlbnZzdHJbY250XSA9PSAnPScpCi0gICAgICAgIHJldHVybiBlbnZzdHIgKyBjbnQgKyAxOwotCi0gICAgcmV0dXJuIE5VTEw7Ci19Ci0KLSNkZWZpbmUgTUFYX0VOVl9MRU4gICgxNio0MDk2KQotCi1jb25zdCBjaGFyKgotbGlua2VyX2Vudl9nZXQoY29uc3QgY2hhciogbmFtZSkKLXsKLSAgICBjaGFyKiogcmVhZHAgPSBfZW52cDsKLQotICAgIGlmIChuYW1lID09IE5VTEwgfHwgbmFtZVswXSA9PSAnXDAnKQotICAgICAgICByZXR1cm4gTlVMTDsKLQotICAgIGZvciAoIDsgcmVhZHBbMF0gIT0gTlVMTDsgcmVhZHArKyApIHsKLSAgICAgICAgY2hhciogdmFsID0gZW52X21hdGNoKHJlYWRwWzBdLCBuYW1lKTsKLSAgICAgICAgaWYgKHZhbCAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAvKiBSZXR1cm4gTlVMTCBmb3IgZW1wdHkgc3RyaW5ncywgb3IgaWYgaXQgaXMgdG9vIGxhcmdlICovCi0gICAgICAgICAgICBpZiAodmFsWzBdID09ICdcMCcpCi0gICAgICAgICAgICAgICAgdmFsID0gTlVMTDsKLSAgICAgICAgICAgIHJldHVybiB2YWw7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIE5VTEw7Ci19Ci0KLQotdm9pZAotbGlua2VyX2Vudl91bnNldChjb25zdCBjaGFyKiBuYW1lKQotewotICAgIGNoYXIqKiAgcmVhZHAgPSBfZW52cDsKLSAgICBjaGFyKiogIHdyaXRlcCA9IHJlYWRwOwotCi0gICAgaWYgKG5hbWUgPT0gTlVMTCB8fCBuYW1lWzBdID09ICdcMCcpCi0gICAgICAgIHJldHVybjsKLQotICAgIGZvciAoIDsgcmVhZHBbMF0gIT0gTlVMTDsgcmVhZHArKyApIHsKLSAgICAgICAgaWYgKGVudl9tYXRjaChyZWFkcFswXSwgbmFtZSkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgd3JpdGVwWzBdID0gcmVhZHBbMF07Ci0gICAgICAgIHdyaXRlcCsrOwotICAgIH0KLSAgICAvKiBlbmQgbGlzdCB3aXRoIGEgTlVMTCAqLwotICAgIHdyaXRlcFswXSA9IE5VTEw7Ci19Ci0KLQotCi0vKiBSZW1vdmUgdW5zYWZlIGVudmlyb25tZW50IHZhcmlhYmxlcy4gVGhpcyBzaG91bGQgYmUgdXNlZCB3aGVuCi0gKiBydW5uaW5nIHNldHVpZCBwcm9ncmFtcy4gKi8KLXZvaWQKLWxpbmtlcl9lbnZfc2VjdXJlKHZvaWQpCi17Ci0gICAgLyogVGhlIHNhbWUgbGlzdCB0aGFuIEdMaWJjIGF0IHRoaXMgcG9pbnQgKi8KLSAgICBzdGF0aWMgY29uc3QgY2hhciogY29uc3QgdW5zZWNfdmFyc1tdID0gewotICAgICAgICAiR0NPTlZfUEFUSCIsCi0gICAgICAgICJHRVRDT05GX0RJUiIsCi0gICAgICAgICJIT1NUQUxJQVNFUyIsCi0gICAgICAgICJMRF9BVURJVCIsCi0gICAgICAgICJMRF9ERUJVRyIsCi0gICAgICAgICJMRF9ERUJVR19PVVRQVVQiLAotICAgICAgICAiTERfRFlOQU1JQ19XRUFLIiwKLSAgICAgICAgIkxEX0xJQlJBUllfUEFUSCIsCi0gICAgICAgICJMRF9PUklHSU5fUEFUSCIsCi0gICAgICAgICJMRF9QUkVMT0FEIiwKLSAgICAgICAgIkxEX1BST0ZJTEUiLAotICAgICAgICAiTERfU0hPV19BVVhWIiwKLSAgICAgICAgIkxEX1VTRV9MT0FEX0JJQVMiLAotICAgICAgICAiTE9DQUxET01BSU4iLAotICAgICAgICAiTE9DUEFUSCIsCi0gICAgICAgICJNQUxMT0NfVFJBQ0UiLAotICAgICAgICAiTUFMTE9DX0NIRUNLXyIsCi0gICAgICAgICJOSVNfUEFUSCIsCi0gICAgICAgICJOTFNQQVRIIiwKLSAgICAgICAgIlJFU09MVl9IT1NUX0NPTkYiLAotICAgICAgICAiUkVTX09QVElPTlMiLAotICAgICAgICAiVE1QRElSIiwKLSAgICAgICAgIlRaRElSIiwKLSAgICAgICAgIkxEX0FPVVRfTElCUkFSWV9QQVRIIiwKLSAgICAgICAgIkxEX0FPVVRfUFJFTE9BRCIsCi0gICAgfTsKLQotICAgIGNvbnN0IGNoYXIqIGNvbnN0KiBjcCAgID0gdW5zZWNfdmFyczsKLSAgICBjb25zdCBjaGFyKiBjb25zdCogZW5kcCA9IGNwICsgc2l6ZW9mKHVuc2VjX3ZhcnMpL3NpemVvZih1bnNlY192YXJzWzBdKTsKLQotICAgIHdoaWxlIChjcCA8IGVuZHApIHsKLSAgICAgICAgbGlua2VyX2Vudl91bnNldCgqY3ApOwotICAgICAgICBjcCsrOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2xpbmtlci9saW5rZXJfZW52aXJvbi5jcHAgYi9saW5rZXIvbGlua2VyX2Vudmlyb24uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkYzY1OWEKLS0tIC9kZXYvbnVsbAorKysgYi9saW5rZXIvbGlua2VyX2Vudmlyb24uY3BwCkBAIC0wLDAgKzEsMTg5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJsaW5rZXJfZW52aXJvbi5oIgorCisjaW5jbHVkZSA8bGludXgvYXV4dmVjLmg+CisjaW5jbHVkZSA8c3RkZGVmLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKKyNpbmNsdWRlIDxwcml2YXRlL0tlcm5lbEFyZ3VtZW50QmxvY2suaD4KKworc3RhdGljIGNoYXIqKiBfZW52cDsKK3N0YXRpYyBib29sIF9BVF9TRUNVUkVfdmFsdWUgPSB0cnVlOworCitib29sIGdldF9BVF9TRUNVUkUoKSB7CisgIHJldHVybiBfQVRfU0VDVVJFX3ZhbHVlOworfQorCitzdGF0aWMgdm9pZCBfX2luaXRfQVRfU0VDVVJFKEtlcm5lbEFyZ3VtZW50QmxvY2smIGFyZ3MpIHsKKyAgLy8gQ2hlY2sgYXV4diBmb3IgQVRfU0VDVVJFIGZpcnN0IHRvIHNlZSBpZiBwcm9ncmFtIGlzIHNldHVpZCwgc2V0Z2lkLAorICAvLyBoYXMgZmlsZSBjYXBzLCBvciBjYXVzZWQgYSBTRUxpbnV4L0FwcEFybW9yIGRvbWFpbiB0cmFuc2l0aW9uLgorICBib29sIGtlcm5lbF9zdXBwbGllZF9BVF9TRUNVUkU7CisgIF9BVF9TRUNVUkVfdmFsdWUgPSBhcmdzLmdldGF1eHZhbChBVF9TRUNVUkUsICZrZXJuZWxfc3VwcGxpZWRfQVRfU0VDVVJFKTsKKworICAvLyBXZSBkb24ndCBzdXBwb3J0IGFuY2llbnQga2VybmVscy4KKyAgaWYgKCFrZXJuZWxfc3VwcGxpZWRfQVRfU0VDVVJFKSB7CisgICAgY29uc3QgY2hhciogbXNnID0gIkZBVEFMOiBrZXJuZWwgZGlkIG5vdCBzdXBwbHkgQVRfU0VDVVJFXG4iOworICAgIHdyaXRlKDIsIG1zZywgc3RybGVuKG1zZykpOworICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgfQorfQorCisvLyBDaGVjayBpZiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgZGVmaW5pdGlvbiBhdCAnZW52c3RyJworLy8gc3RhcnRzIHdpdGggJzxuYW1lPj0nLCBhbmQgaWYgc28gcmV0dXJuIHRoZSBhZGRyZXNzIG9mIHRoZQorLy8gZmlyc3QgY2hhcmFjdGVyIGFmdGVyIHRoZSBlcXVhbCBzaWduLiBPdGhlcndpc2UgcmV0dXJuIE5VTEwuCitzdGF0aWMgY29uc3QgY2hhciogZW52X21hdGNoKGNvbnN0IGNoYXIqIGVudnN0ciwgY29uc3QgY2hhciogbmFtZSkgeworICBzaXplX3QgaSA9IDA7CisKKyAgd2hpbGUgKGVudnN0cltpXSA9PSBuYW1lW2ldICYmIG5hbWVbaV0gIT0gJ1wwJykgeworICAgICsraTsKKyAgfQorCisgIGlmIChuYW1lW2ldID09ICdcMCcgJiYgZW52c3RyW2ldID09ICc9JykgeworICAgIHJldHVybiBlbnZzdHIgKyBpICsgMTsKKyAgfQorCisgIHJldHVybiBOVUxMOworfQorCitzdGF0aWMgYm9vbCBfX2lzX3ZhbGlkX2Vudmlyb25tZW50X3ZhcmlhYmxlKGNvbnN0IGNoYXIqIG5hbWUpIHsKKyAgLy8gQWNjb3JkaW5nIHRvIGl0cyBzb3VyY2VzLCB0aGUga2VybmVsIHVzZXMgMzIqUEFHRV9TSVpFIGJ5IGRlZmF1bHQKKyAgLy8gYXMgdGhlIG1heGltdW0gc2l6ZSBmb3IgYW4gZW52LiB2YXJpYWJsZSBkZWZpbml0aW9uLgorICBjb25zdCBpbnQgTUFYX0VOVl9MRU4gPSAzMio0MDk2OworCisgIGlmIChuYW1lID09IE5VTEwpIHsKKyAgICByZXR1cm4gZmFsc2U7CisgIH0KKworICAvLyBQYXJzZSB0aGUgc3RyaW5nLCBsb29raW5nIGZvciB0aGUgZmlyc3QgJz0nIHRoZXJlLCBhbmQgaXRzIHNpemUuCisgIGludCBwb3MgPSAwOworICBpbnQgZmlyc3RfZXF1YWxfcG9zID0gLTE7CisgIHdoaWxlIChwb3MgPCBNQVhfRU5WX0xFTikgeworICAgIGlmIChuYW1lW3Bvc10gPT0gJ1wwJykgeworICAgICAgYnJlYWs7CisgICAgfQorICAgIGlmIChuYW1lW3Bvc10gPT0gJz0nICYmIGZpcnN0X2VxdWFsX3BvcyA8IDApIHsKKyAgICAgIGZpcnN0X2VxdWFsX3BvcyA9IHBvczsKKyAgICB9CisgICAgcG9zKys7CisgIH0KKworICAvLyBDaGVjayB0aGF0IGl0J3Mgc21hbGxlciB0aGFuIE1BWF9FTlZfTEVOICh0byBkZXRlY3Qgbm9uLXplcm8gdGVybWluYXRlZCBzdHJpbmdzKS4KKyAgaWYgKHBvcyA+PSBNQVhfRU5WX0xFTikgeworICAgIHJldHVybiBmYWxzZTsKKyAgfQorCisgIC8vIENoZWNrIHRoYXQgaXQgY29udGFpbnMgYXQgbGVhc3Qgb25lIGVxdWFsIHNpZ24gdGhhdCBpcyBub3QgdGhlIGZpcnN0IGNoYXJhY3RlcgorICBpZiAoZmlyc3RfZXF1YWxfcG9zIDwgMSkgeworICAgIHJldHVybiBmYWxzZTsKKyAgfQorCisgIHJldHVybiB0cnVlOworfQorCitzdGF0aWMgYm9vbCBfX2lzX3Vuc2FmZV9lbnZpcm9ubWVudF92YXJpYWJsZShjb25zdCBjaGFyKiBuYW1lKSB7CisgIC8vIE5vbmUgb2YgdGhlc2Ugc2hvdWxkIGJlIGFsbG93ZWQgaW4gc2V0dWlkIHByb2dyYW1zLgorICBzdGF0aWMgY29uc3QgY2hhciogY29uc3QgVU5TQUZFX1ZBUklBQkxFX05BTUVTW10gPSB7CisgICAgICAiR0NPTlZfUEFUSCIsCisgICAgICAiR0VUQ09ORl9ESVIiLAorICAgICAgIkhPU1RBTElBU0VTIiwKKyAgICAgICJMRF9BT1VUX0xJQlJBUllfUEFUSCIsCisgICAgICAiTERfQU9VVF9QUkVMT0FEIiwKKyAgICAgICJMRF9BVURJVCIsCisgICAgICAiTERfREVCVUciLAorICAgICAgIkxEX0RFQlVHX09VVFBVVCIsCisgICAgICAiTERfRFlOQU1JQ19XRUFLIiwKKyAgICAgICJMRF9MSUJSQVJZX1BBVEgiLAorICAgICAgIkxEX09SSUdJTl9QQVRIIiwKKyAgICAgICJMRF9QUkVMT0FEIiwKKyAgICAgICJMRF9QUk9GSUxFIiwKKyAgICAgICJMRF9TSE9XX0FVWFYiLAorICAgICAgIkxEX1VTRV9MT0FEX0JJQVMiLAorICAgICAgIkxPQ0FMRE9NQUlOIiwKKyAgICAgICJMT0NQQVRIIiwKKyAgICAgICJNQUxMT0NfQ0hFQ0tfIiwKKyAgICAgICJNQUxMT0NfVFJBQ0UiLAorICAgICAgIk5JU19QQVRIIiwKKyAgICAgICJOTFNQQVRIIiwKKyAgICAgICJSRVNPTFZfSE9TVF9DT05GIiwKKyAgICAgICJSRVNfT1BUSU9OUyIsCisgICAgICAiVE1QRElSIiwKKyAgICAgICJUWkRJUiIsCisgICAgICBOVUxMCisgIH07CisgIGZvciAoc2l6ZV90IGkgPSAwOyBVTlNBRkVfVkFSSUFCTEVfTkFNRVNbaV0gIT0gTlVMTDsgKytpKSB7CisgICAgaWYgKGVudl9tYXRjaChuYW1lLCBVTlNBRkVfVkFSSUFCTEVfTkFNRVNbaV0pICE9IE5VTEwpIHsKKyAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgfQorICByZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyB2b2lkIF9fc2FuaXRpemVfZW52aXJvbm1lbnRfdmFyaWFibGVzKCkgeworICBjaGFyKiogc3JjICA9IF9lbnZwOworICBjaGFyKiogZHN0ID0gX2VudnA7CisgIGZvciAoOyBzcmNbMF0gIT0gTlVMTDsgKytzcmMpIHsKKyAgICBpZiAoIV9faXNfdmFsaWRfZW52aXJvbm1lbnRfdmFyaWFibGUoc3JjWzBdKSkgeworICAgICAgY29udGludWU7CisgICAgfQorICAgIC8vIFJlbW92ZSB2YXJpb3VzIHVuc2FmZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgaWYgd2UncmUgbG9hZGluZyBhIHNldHVpZCBwcm9ncmFtLgorICAgIGlmIChnZXRfQVRfU0VDVVJFKCkgJiYgX19pc191bnNhZmVfZW52aXJvbm1lbnRfdmFyaWFibGUoc3JjWzBdKSkgeworICAgICAgICBjb250aW51ZTsKKyAgICB9CisgICAgZHN0WzBdID0gc3JjWzBdOworICAgICsrZHN0OworICB9CisgIGRzdFswXSA9IE5VTEw7Cit9CisKK3ZvaWQgbGlua2VyX2Vudl9pbml0KEtlcm5lbEFyZ3VtZW50QmxvY2smIGFyZ3MpIHsKKyAgLy8gU3RvcmUgZW52aXJvbm1lbnQgcG9pbnRlciAtIGNhbid0IGJlIE5VTEwuCisgIF9lbnZwID0gYXJncy5lbnZwOworCisgIF9faW5pdF9BVF9TRUNVUkUoYXJncyk7CisgIF9fc2FuaXRpemVfZW52aXJvbm1lbnRfdmFyaWFibGVzKCk7Cit9CisKK2NvbnN0IGNoYXIqIGxpbmtlcl9lbnZfZ2V0KGNvbnN0IGNoYXIqIG5hbWUpIHsKKyAgaWYgKG5hbWUgPT0gTlVMTCB8fCBuYW1lWzBdID09ICdcMCcpIHsKKyAgICByZXR1cm4gTlVMTDsKKyAgfQorCisgIGZvciAoY2hhcioqIHAgPSBfZW52cDsgcFswXSAhPSBOVUxMOyArK3ApIHsKKyAgICBjb25zdCBjaGFyKiB2YWwgPSBlbnZfbWF0Y2gocFswXSwgbmFtZSk7CisgICAgaWYgKHZhbCAhPSBOVUxMKSB7CisgICAgICBpZiAodmFsWzBdID09ICdcMCcpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7IC8vIFJldHVybiBOVUxMIGZvciBlbXB0eSBzdHJpbmdzLgorICAgICAgfQorICAgICAgcmV0dXJuIHZhbDsKKyAgICB9CisgIH0KKyAgcmV0dXJuIE5VTEw7Cit9CmRpZmYgLS1naXQgYS9saW5rZXIvbGlua2VyX2Vudmlyb24uaCBiL2xpbmtlci9saW5rZXJfZW52aXJvbi5oCmluZGV4IDk4YWQxZGUuLmNkN2E2NWIgMTAwNjQ0Ci0tLSBhL2xpbmtlci9saW5rZXJfZW52aXJvbi5oCisrKyBiL2xpbmtlci9saW5rZXJfZW52aXJvbi5oCkBAIC0yNSwzMCArMjUsMjAgQEAKICAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgogICogU1VDSCBEQU1BR0UuCiAgKi8KKwogI2lmbmRlZiBMSU5LRVJfRU5WSVJPTl9ICiAjZGVmaW5lIExJTktFUl9FTlZJUk9OX0gKIAotLyogQ2FsbCB0aGlzIGZ1bmN0aW9uIGJlZm9yZSBhbnl0aGluZyBlbHNlLiAndmVjcycgbXVzdCBiZSB0aGUgcG9pbnRlcgotICogdG8gdGhlIGVudmlyb25tZW50IGJsb2NrIGluIHRoZSBFTEYgZGF0YSBibG9jay4gVGhlIGZ1bmN0aW9uIHJldHVybnMKLSAqIHRoZSBzdGFydCBvZiB0aGUgYXV4IHZlY3RvcnMgYWZ0ZXIgdGhlIGVudiBibG9jay4KLSAqLwotZXh0ZXJuIHVuc2lnbmVkKiAgIGxpbmtlcl9lbnZfaW5pdCh1bnNpZ25lZCogdmVjcyk7CitzdHJ1Y3QgS2VybmVsQXJndW1lbnRCbG9jazsKIAotLyogVW5zZXQgYSBnaXZlbiBlbnZpcm9ubWVudCB2YXJpYWJsZS4gSW4gY2FzZSB0aGUgdmFyaWFibGUgaXMgZGVmaW5lZAotICogbXVsdGlwbGUgdGltZXMsIHVuc2V0IGFsbCBpbnN0YW5jZXMuIFRoaXMgbW9kaWZpZXMgdGhlIGVudmlyb25tZW50Ci0gKiBibG9jaywgc28gYW55IHBvaW50ZXIgcmV0dXJuZWQgYnkgbGlua2VyX2Vudl9nZXQoKSBhZnRlciB0aGlzIGNhbGwKLSAqIG1pZ2h0IGJlY29tZSBpbnZhbGlkICovCi1leHRlcm4gdm9pZCAgICAgICAgbGlua2VyX2Vudl91bnNldChjb25zdCBjaGFyKiBuYW1lKTsKKy8vIENhbGwgdGhpcyBmdW5jdGlvbiBiZWZvcmUgYW55IG9mIHRoZSBvdGhlciBmdW5jdGlvbnMgaW4gdGhpcyBoZWFkZXIgZmlsZS4KK2V4dGVybiB2b2lkIGxpbmtlcl9lbnZfaW5pdChLZXJuZWxBcmd1bWVudEJsb2NrJiBhcmdzKTsKIAotCi0vKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiBlbnZpcm9ubWVudCB2YXJpYWJsZSAnbmFtZScgaWYgZGVmaW5lZCBhbmQgbm90Ci0gKiBlbXB0eSwgb3IgTlVMTCBvdGhlcndpc2UuIE5vdGUgdGhhdCB0aGUgcmV0dXJuZWQgcG9pbnRlciBtYXkgYmVjb21lCi0gKiBpbnZhbGlkIGlmIGxpbmtlcl9lbnZfdW5zZXQoKSBvciBsaW5rZXJfZW52X3NlY3VyZSgpIGFyZSBjYWxsZWQKLSAqIGFmdGVyIHRoaXMgZnVuY3Rpb24uICovCisvLyBSZXR1cm5zIHRoZSB2YWx1ZSBvZiBlbnZpcm9ubWVudCB2YXJpYWJsZSAnbmFtZScgaWYgZGVmaW5lZCBhbmQgbm90CisvLyBlbXB0eSwgb3IgTlVMTCBvdGhlcndpc2UuCiBleHRlcm4gY29uc3QgY2hhciogbGlua2VyX2Vudl9nZXQoY29uc3QgY2hhciogbmFtZSk7CiAKLS8qIFJlbW92ZSB1bnNlY3VyZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMuIFRoaXMgc2hvdWxkIGJlIHVzZWQgd2hlbgotICogcnVubmluZyBzZXR1aWQgcHJvZ3JhbXMuICovCi1leHRlcm4gdm9pZCAgICAgICAgbGlua2VyX2Vudl9zZWN1cmUodm9pZCk7CisvLyBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGlzIHByb2dyYW0ncyBBVF9TRUNVUkUgdmFyaWFibGUuCitleHRlcm4gYm9vbCBnZXRfQVRfU0VDVVJFKCk7CiAKLSNlbmRpZiAvKiBMSU5LRVJfRU5WSVJPTl9IICovCisjZW5kaWYgLy8gTElOS0VSX0VOVklST05fSApkaWZmIC0tZ2l0IGEvbGlua2VyL2xpbmtlcl9mb3JtYXQuYyBiL2xpbmtlci9saW5rZXJfZm9ybWF0LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBjNjhhMGIuLjAwMDAwMDAKLS0tIGEvbGlua2VyL2xpbmtlcl9mb3JtYXQuYworKysgL2Rldi9udWxsCkBAIC0xLDcwNSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogICAgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUwotICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKLSAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCi0gKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKLSAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAotICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0gKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlIDxzdGRhcmcuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxlcnJuby5oPgotI2luY2x1ZGUgPHVuaXN0ZC5oPgotI2luY2x1ZGUgPHN0ZGludC5oPgotI2luY2x1ZGUgPHN0ZGRlZi5oPgotI2luY2x1ZGUgImxpbmtlcl9mb3JtYXQuaCIKLSNpbmNsdWRlICJsaW5rZXJfZGVidWcuaCIKLQotLyogZGVmaW5lIFVOSVRfVEVTVFMgdG8gYnVpbGQgdGhpcyBmaWxlIGFzIGEgc2luZ2xlIGV4ZWN1dGFibGUgdGhhdCBydW5zCi0gKiB0aGUgZm9ybWF0dGVyJ3MgdW5pdCB0ZXN0cwotICovCi0jZGVmaW5lIHh4VU5JVF9URVNUUwotCi0vKioqIEdlbmVyaWMgb3V0cHV0IHNpbmsKLSAqKiovCi0KLXR5cGVkZWYgc3RydWN0IHsKLSAgICB2b2lkICpvcGFxdWU7Ci0gICAgdm9pZCAoKnNlbmQpKHZvaWQgKm9wYXF1ZSwgY29uc3QgY2hhciAqZGF0YSwgaW50IGxlbik7Ci19IE91dDsKLQotc3RhdGljIHZvaWQKLW91dF9zZW5kKE91dCAqbywgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbikKLXsKLSAgICBvLT5zZW5kKG8tPm9wYXF1ZSwgZGF0YSwgKGludClsZW4pOwotfQotCi1zdGF0aWMgdm9pZAotb3V0X3NlbmRfcmVwZWF0KE91dCAqbywgY2hhciBjaCwgaW50IGNvdW50KQotewotICAgIGNoYXIgcGFkWzhdOwotICAgIGNvbnN0IGludCBwYWRTaXplID0gKGludClzaXplb2YocGFkKTsKLQotICAgIG1lbXNldChwYWQsIGNoLCBzaXplb2YocGFkKSk7Ci0gICAgd2hpbGUgKGNvdW50ID4gMCkgewotICAgICAgICBpbnQgYXZhaWwgPSBjb3VudDsKLSAgICAgICAgaWYgKGF2YWlsID4gcGFkU2l6ZSkgewotICAgICAgICAgICAgYXZhaWwgPSBwYWRTaXplOwotICAgICAgICB9Ci0gICAgICAgIG8tPnNlbmQoby0+b3BhcXVlLCBwYWQsIGF2YWlsKTsKLSAgICAgICAgY291bnQgLT0gYXZhaWw7Ci0gICAgfQotfQotCi0vKiBmb3J3YXJkIGRlY2xhcmF0aW9uICovCi1zdGF0aWMgdm9pZAotb3V0X3Zmb3JtYXQoT3V0ICpvLCBjb25zdCBjaGFyICpmb3JtYXQsIHZhX2xpc3QgYXJncyk7Ci0KLS8qKiogQm91bmRlZCBidWZmZXIgb3V0cHV0Ci0gKioqLwotCi10eXBlZGVmIHN0cnVjdCB7Ci0gICAgT3V0IG91dFsxXTsKLSAgICBjaGFyICpidWZmZXI7Ci0gICAgY2hhciAqcG9zOwotICAgIGNoYXIgKmVuZDsKLSAgICBpbnQgdG90YWw7Ci19IEJ1Zk91dDsKLQotc3RhdGljIHZvaWQKLWJ1Zl9vdXRfc2VuZCh2b2lkICpvcGFxdWUsIGNvbnN0IGNoYXIgKmRhdGEsIGludCBsZW4pCi17Ci0gICAgQnVmT3V0ICpibyA9IG9wYXF1ZTsKLQotICAgIGlmIChsZW4gPCAwKQotICAgICAgICBsZW4gPSBzdHJsZW4oZGF0YSk7Ci0KLSAgICBiby0+dG90YWwgKz0gbGVuOwotCi0gICAgd2hpbGUgKGxlbiA+IDApIHsKLSAgICAgICAgaW50IGF2YWlsID0gYm8tPmVuZCAtIGJvLT5wb3M7Ci0gICAgICAgIGlmIChhdmFpbCA9PSAwKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGlmIChhdmFpbCA+IGxlbikKLSAgICAgICAgICAgIGF2YWlsID0gbGVuOwotICAgICAgICBtZW1jcHkoYm8tPnBvcywgZGF0YSwgYXZhaWwpOwotICAgICAgICBiby0+cG9zICs9IGF2YWlsOwotICAgICAgICBiby0+cG9zWzBdID0gJ1wwJzsKLSAgICAgICAgbGVuIC09IGF2YWlsOwotICAgIH0KLX0KLQotc3RhdGljIE91dCoKLWJ1Zl9vdXRfaW5pdChCdWZPdXQgKmJvLCBjaGFyICpidWZmZXIsIHNpemVfdCBzaXplKQotewotICAgIGlmIChzaXplID09IDApCi0gICAgICAgIHJldHVybiBOVUxMOwotCi0gICAgYm8tPm91dC0+b3BhcXVlID0gYm87Ci0gICAgYm8tPm91dC0+c2VuZCAgID0gYnVmX291dF9zZW5kOwotICAgIGJvLT5idWZmZXIgICAgICA9IGJ1ZmZlcjsKLSAgICBiby0+ZW5kICAgICAgICAgPSBidWZmZXIgKyBzaXplIC0gMTsKLSAgICBiby0+cG9zICAgICAgICAgPSBiby0+YnVmZmVyOwotICAgIGJvLT5wb3NbMF0gICAgICA9ICdcMCc7Ci0gICAgYm8tPnRvdGFsICAgICAgID0gMDsKLQotICAgIHJldHVybiBiby0+b3V0OwotfQotCi1zdGF0aWMgaW50Ci1idWZfb3V0X2xlbmd0aChCdWZPdXQgKmJvKQotewotICAgIHJldHVybiBiby0+dG90YWw7Ci19Ci0KLXN0YXRpYyBpbnQKLXZmb3JtYXRfYnVmZmVyKGNoYXIgKmJ1ZmYsIHNpemVfdCBidWZmc2l6ZSwgY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IGFyZ3MpCi17Ci0gICAgQnVmT3V0IGJvOwotICAgIE91dCAqb3V0OwotCi0gICAgb3V0ID0gYnVmX291dF9pbml0KCZibywgYnVmZiwgYnVmZnNpemUpOwotICAgIGlmIChvdXQgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBvdXRfdmZvcm1hdChvdXQsIGZvcm1hdCwgYXJncyk7Ci0KLSAgICByZXR1cm4gYnVmX291dF9sZW5ndGgoJmJvKTsKLX0KLQotaW50Ci1mb3JtYXRfYnVmZmVyKGNoYXIgKmJ1ZmYsIHNpemVfdCBidWZmc2l6ZSwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCi17Ci0gICAgdmFfbGlzdCBhcmdzOwotICAgIGludCByZXQ7Ci0KLSAgICB2YV9zdGFydChhcmdzLCBmb3JtYXQpOwotICAgIHJldCA9IHZmb3JtYXRfYnVmZmVyKGJ1ZmYsIGJ1ZmZzaXplLCBmb3JtYXQsIGFyZ3MpOwotICAgIHZhX2VuZChhcmdzKTsKLQotICAgIHJldHVybiByZXQ7Ci19Ci0KLS8qIFRoZSBfX3N0YWNrX2Noa19mYWlsKCkgZnVuY3Rpb24gY2FsbHMgX19saWJjX2FuZHJvaWRfbG9nX3ByaW50KCkKLSAqIHdoaWNoIGNhbGxzIHZzbnByaW50ZigpLgotICoKLSAqIFdlIGRlZmluZSBvdXIgdmVyc2lvbiBvZiB0aGUgZnVuY3Rpb24gaGVyZSB0byBhdm9pZCBkcmFnZ2luZwotICogYWJvdXQgMjUgS0Igb2YgQyBsaWJyYXJ5IHJvdXRpbmVzIHJlbGF0ZWQgdG8gZm9ybWF0dGluZy4KLSAqLwotaW50Ci12c25wcmludGYoY2hhciAqYnVmZiwgc2l6ZV90IGJ1ZnNpemUsIGNvbnN0IGNoYXIgKmZvcm1hdCwgdmFfbGlzdCBhcmdzKQotewotICAgIHJldHVybiBmb3JtYXRfYnVmZmVyKGJ1ZmYsIGJ1ZnNpemUsIGZvcm1hdCwgYXJncyk7Ci19Ci0KLSNpZiBMSU5LRVJfREVCVUcKLQotI2lmICFMSU5LRVJfREVCVUdfVE9fTE9HCi0KLS8qKiogRmlsZSBkZXNjcmlwdG9yIG91dHB1dAotICoqKi8KLQotdHlwZWRlZiBzdHJ1Y3QgewotICAgIE91dCBvdXRbMV07Ci0gICAgaW50IGZkOwotICAgIGludCB0b3RhbDsKLX0gRmRPdXQ7Ci0KLXN0YXRpYyB2b2lkCi1mZF9vdXRfc2VuZCh2b2lkICpvcGFxdWUsIGNvbnN0IGNoYXIgKmRhdGEsIGludCBsZW4pCi17Ci0gICAgRmRPdXQgKmZkbyA9IG9wYXF1ZTsKLQotICAgIGlmIChsZW4gPCAwKQotICAgICAgICBsZW4gPSBzdHJsZW4oZGF0YSk7Ci0KLSAgICB3aGlsZSAobGVuID4gMCkgewotICAgICAgICBpbnQgcmV0ID0gd3JpdGUoZmRvLT5mZCwgZGF0YSwgbGVuKTsKLSAgICAgICAgaWYgKHJldCA8IDApIHsKLSAgICAgICAgICAgIGlmIChlcnJubyA9PSBFSU5UUikKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGRhdGEgKz0gcmV0OwotICAgICAgICBsZW4gLT0gcmV0OwotICAgICAgICBmZG8tPnRvdGFsICs9IHJldDsKLSAgICB9Ci19Ci0KLXN0YXRpYyBPdXQqCi1mZF9vdXRfaW5pdChGZE91dCAqZmRvLCBpbnQgIGZkKQotewotICAgIGZkby0+b3V0LT5vcGFxdWUgPSBmZG87Ci0gICAgZmRvLT5vdXQtPnNlbmQgPSBmZF9vdXRfc2VuZDsKLSAgICBmZG8tPmZkID0gZmQ7Ci0gICAgZmRvLT50b3RhbCA9IDA7Ci0KLSAgICByZXR1cm4gZmRvLT5vdXQ7Ci19Ci0KLXN0YXRpYyBpbnQKLWZkX291dF9sZW5ndGgoRmRPdXQgKmZkbykKLXsKLSAgICByZXR1cm4gZmRvLT50b3RhbDsKLX0KLQotCi1pbnQKLWZvcm1hdF9mZChpbnQgZmQsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQotewotICAgIEZkT3V0IGZkbzsKLSAgICBPdXQqIG91dDsKLSAgICB2YV9saXN0IGFyZ3M7Ci0KLSAgICBvdXQgPSBmZF9vdXRfaW5pdCgmZmRvLCBmZCk7Ci0gICAgaWYgKG91dCA9PSBOVUxMKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHZhX3N0YXJ0KGFyZ3MsIGZvcm1hdCk7Ci0gICAgb3V0X3Zmb3JtYXQob3V0LCBmb3JtYXQsIGFyZ3MpOwotICAgIHZhX2VuZChhcmdzKTsKLQotICAgIHJldHVybiBmZF9vdXRfbGVuZ3RoKCZmZG8pOwotfQotCi0jZWxzZSAvKiBMSU5LRVJfREVCVUdfVE9fTE9HICovCi0KLS8qKiogTG9nIG91dHB1dAotICoqKi8KLQotLyogV2UgbmVlZCBvdXIgb3duIHZlcnNpb24gb2YgX19saWJjX2FuZHJvaWRfbG9nX3ZwcmludCwgb3RoZXJ3aXNlCi0gKiB0aGUgbG9nIG91dHB1dCBpcyBjb21wbGV0ZWx5IGJyb2tlbi4gUHJvYmFibHkgZHVlIHRvIHRoZSBmYWN0Ci0gKiB0aGF0IHRoZSBDIGxpYnJhcnkgaXMgbm90IGluaXRpYWxpemVkIHlldC4KLSAqCi0gKiBZb3UgY2FuIHRlc3QgdGhhdCBieSBzZXR0aW5nIENVU1RPTV9MT0dfVlBSSU5UIHRvIDAKLSAqLwotI2RlZmluZSAgQ1VTVE9NX0xPR19WUFJJTlQgIDEKLQotI2lmIENVU1RPTV9MT0dfVlBSSU5UCi0KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLSNpbmNsdWRlIDxmY250bC5oPgotI2luY2x1ZGUgPHN5cy91aW8uaD4KLQotc3RhdGljIGludCBsb2dfdnByaW50KGludCBwcmlvLCBjb25zdCBjaGFyICp0YWcsIGNvbnN0IGNoYXIgKmZtdCwgdmFfbGlzdCAgYXJncykKLXsKLSAgICBjaGFyIGJ1ZlsxMDI0XTsKLSAgICBpbnQgcmVzdWx0OwotICAgIHN0YXRpYyBpbnQgbG9nX2ZkID0gLTE7Ci0KLSAgICByZXN1bHQgPSB2Zm9ybWF0X2J1ZmZlcihidWYsIHNpemVvZiBidWYsIGZtdCwgYXJncyk7Ci0KLSAgICBpZiAobG9nX2ZkIDwgMCkgewotICAgICAgICBsb2dfZmQgPSBvcGVuKCIvZGV2L2xvZy9tYWluIiwgT19XUk9OTFkpOwotICAgICAgICBpZiAobG9nX2ZkIDwgMCkKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi0gICAgewotICAgICAgICBzc2l6ZV90IHJldDsKLSAgICAgICAgc3RydWN0IGlvdmVjIHZlY1szXTsKLQotICAgICAgICB2ZWNbMF0uaW92X2Jhc2UgPSAodW5zaWduZWQgY2hhciAqKSAmcHJpbzsKLSAgICAgICAgdmVjWzBdLmlvdl9sZW4gPSAxOwotICAgICAgICB2ZWNbMV0uaW92X2Jhc2UgPSAodm9pZCAqKSB0YWc7Ci0gICAgICAgIHZlY1sxXS5pb3ZfbGVuID0gc3RybGVuKHRhZykgKyAxOwotICAgICAgICB2ZWNbMl0uaW92X2Jhc2UgPSAodm9pZCAqKSBidWY7Ci0gICAgICAgIHZlY1syXS5pb3ZfbGVuID0gc3RybGVuKGJ1ZikgKyAxOwotCi0gICAgICAgIGRvIHsKLSAgICAgICAgICAgIHJldCA9IHdyaXRldihsb2dfZmQsIHZlYywgMyk7Ci0gICAgICAgIH0gd2hpbGUgKChyZXQgPCAwKSAmJiAoZXJybm8gPT0gRUlOVFIpKTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotI2RlZmluZSAgX19saWJjX2FuZHJvaWRfbG9nX3ZwcmludCAgbG9nX3ZwcmludAotCi0jZWxzZSAvKiAhQ1VTVE9NX0xPR19WUFJJTlQgKi8KLQotZXh0ZXJuIGludCBfX2xpYmNfYW5kcm9pZF9sb2dfdnByaW50KGludCAgcHJpbywgY29uc3QgY2hhciogdGFnLCBjb25zdCBjaGFyKiAgZm9ybWF0LCB2YV9saXN0IGFwKTsKLQotI2VuZGlmIC8qICFDVVNUT01fTE9HX1ZQUklOVCAqLwotCi1pbnQKLWZvcm1hdF9sb2coaW50IHByaW8sIGNvbnN0IGNoYXIgKnRhZywgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCi17Ci0gICAgaW50IHJldDsKLSAgICB2YV9saXN0ICBhcmdzOwotICAgIHZhX3N0YXJ0KGFyZ3MsIGZvcm1hdCk7Ci0gICAgcmV0ID0gX19saWJjX2FuZHJvaWRfbG9nX3ZwcmludChwcmlvLCB0YWcsIGZvcm1hdCwgYXJncyk7Ci0gICAgdmFfZW5kKGFyZ3MpOwotICAgIHJldHVybiByZXQ7Ci19Ci0KLSNlbmRpZiAvKiBMSU5LRVJfREVCVUdfVE9fTE9HICovCi0KLSNlbmRpZiAvKiBMSU5LRVJfREVCVUcgKi8KLQotLyoqKiBmb3JtYXR0ZWQgb3V0cHV0IGltcGxlbWVudGF0aW9uCi0gKioqLwotCi0vKiBQYXJzZSBhIGRlY2ltYWwgc3RyaW5nIGZyb20gJ2Zvcm1hdCArICpwcG9zJywKLSAqIHJldHVybiB0aGUgdmFsdWUsIGFuZCB3cml0ZXMgdGhlIG5ldyBwb3NpdGlvbiBwYXN0Ci0gKiB0aGUgZGVjaW1hbCBzdHJpbmcgaW4gJypwcG9zJyBvbiBleGl0LgotICoKLSAqIE5PVEU6IERvZXMgKm5vdCogaGFuZGxlIGEgc2lnbiBwcmVmaXguCi0gKi8KLXN0YXRpYyB1bnNpZ25lZAotcGFyc2VfZGVjaW1hbChjb25zdCBjaGFyICpmb3JtYXQsIGludCAqcHBvcykKLXsKLSAgICBjb25zdCBjaGFyKiBwID0gZm9ybWF0ICsgKnBwb3M7Ci0gICAgdW5zaWduZWQgcmVzdWx0ID0gMDsKLQotICAgIGZvciAoOzspIHsKLSAgICAgICAgaW50IGNoID0gKnA7Ci0gICAgICAgIHVuc2lnbmVkIGQgPSAodW5zaWduZWQpKGNoIC0gJzAnKTsKLQotICAgICAgICBpZiAoZCA+PSAxMFUpCi0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICByZXN1bHQgPSByZXN1bHQqMTAgKyBkOwotICAgICAgICBwKys7Ci0gICAgfQotICAgICpwcG9zID0gcCAtIGZvcm1hdDsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi0vKiB3cml0ZSBhbiBvY3RhbC9kZWNpbWFsL251bWJlciBpbnRvIGEgYm91bmRlZCBidWZmZXIuCi0gKiBhc3N1bWVzIHRoYXQgYnVmc2l6ZSA+IDAsIGFuZCAnZGlnaXRzJyBpcyBhIHN0cmluZyBvZgotICogZGlnaXRzIG9mIGF0IGxlYXN0ICdiYXNlJyB2YWx1ZXMuCi0gKi8KLXN0YXRpYyB2b2lkCi1mb3JtYXRfbnVtYmVyKGNoYXIgKmJ1ZmZlciwgc2l6ZV90IGJ1ZnNpemUsIHVpbnQ2NF90IHZhbHVlLCBpbnQgYmFzZSwgY29uc3QgY2hhciAqZGlnaXRzKQotewotICAgIGNoYXIgKnBvcyA9IGJ1ZmZlcjsKLSAgICBjaGFyICplbmQgPSBidWZmZXIgKyBidWZzaXplIC0gMTsKLQotICAgIC8qIGdlbmVyYXRlIGRpZ2l0IHN0cmluZyBpbiByZXZlcnNlIG9yZGVyICovCi0gICAgd2hpbGUgKHZhbHVlKSB7Ci0gICAgICAgIHVuc2lnbmVkIGQgPSB2YWx1ZSAlIGJhc2U7Ci0gICAgICAgIHZhbHVlIC89IGJhc2U7Ci0gICAgICAgIGlmIChwb3MgPCBlbmQpIHsKLSAgICAgICAgICAgICpwb3MrKyA9IGRpZ2l0c1tkXTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qIHNwZWNpYWwgY2FzZSBmb3IgMCAqLwotICAgIGlmIChwb3MgPT0gYnVmZmVyKSB7Ci0gICAgICAgIGlmIChwb3MgPCBlbmQpIHsKLSAgICAgICAgICAgICpwb3MrKyA9ICcwJzsKLSAgICAgICAgfQotICAgIH0KLSAgICBwb3NbMF0gPSAnXDAnOwotCi0gICAgLyogbm93IHJldmVyc2UgZGlnaXQgc3RyaW5nIGluLXBsYWNlICovCi0gICAgZW5kID0gcG9zIC0gMTsKLSAgICBwb3MgPSBidWZmZXI7Ci0gICAgd2hpbGUgKHBvcyA8IGVuZCkgewotICAgICAgICBpbnQgY2ggPSBwb3NbMF07Ci0gICAgICAgIHBvc1swXSA9IGVuZFswXTsKLSAgICAgICAgZW5kWzBdID0gKGNoYXIpIGNoOwotICAgICAgICBwb3MrKzsKLSAgICAgICAgZW5kLS07Ci0gICAgfQotfQotCi0vKiBXcml0ZSBhbiBpbnRlZ2VyIChvY3RhbCBvciBkZWNpbWFsKSBpbnRvIGEgYnVmZmVyLCBhc3N1bWVzIGJ1ZmZzaXplID4gMiAqLwotc3RhdGljIHZvaWQKLWZvcm1hdF9pbnRlZ2VyKGNoYXIgKmJ1ZmZlciwgc2l6ZV90IGJ1ZmZzaXplLCB1aW50NjRfdCB2YWx1ZSwgaW50IGJhc2UsIGludCBpc1NpZ25lZCkKLXsKLSAgICBpZiAoaXNTaWduZWQgJiYgKGludDY0X3QpdmFsdWUgPCAwKSB7Ci0gICAgICAgIGJ1ZmZlclswXSA9ICctJzsKLSAgICAgICAgYnVmZmVyICs9IDE7Ci0gICAgICAgIGJ1ZmZzaXplIC09IDE7Ci0gICAgICAgIHZhbHVlID0gKHVpbnQ2NF90KSgtKGludDY0X3QpdmFsdWUpOwotICAgIH0KLQotICAgIGZvcm1hdF9udW1iZXIoYnVmZmVyLCBidWZmc2l6ZSwgdmFsdWUsIGJhc2UsICIwMTIzNDU2Nzg5Iik7Ci19Ci0KLS8qIFdyaXRlIGFuIG9jdGFsIGludG8gYSBidWZmZXIsIGFzc3VtZXMgYnVmZnNpemUgPiAyICovCi1zdGF0aWMgdm9pZAotZm9ybWF0X29jdGFsKGNoYXIgKmJ1ZmZlciwgc2l6ZV90IGJ1ZmZzaXplLCB1aW50NjRfdCB2YWx1ZSwgaW50IGlzU2lnbmVkKQotewotICAgIGZvcm1hdF9pbnRlZ2VyKGJ1ZmZlciwgYnVmZnNpemUsIHZhbHVlLCA4LCBpc1NpZ25lZCk7Ci19Ci0KLS8qIFdyaXRlIGEgZGVjaW1hbCBpbnRvIGEgYnVmZmVyLCBhc3N1bWVzIGJ1ZmZzaXplID4gMiAqLwotc3RhdGljIHZvaWQKLWZvcm1hdF9kZWNpbWFsKGNoYXIgKmJ1ZmZlciwgc2l6ZV90IGJ1ZmZzaXplLCB1aW50NjRfdCB2YWx1ZSwgaW50IGlzU2lnbmVkKQotewotICAgIGZvcm1hdF9pbnRlZ2VyKGJ1ZmZlciwgYnVmZnNpemUsIHZhbHVlLCAxMCwgaXNTaWduZWQpOwotfQotCi0vKiBXcml0ZSBhbiBoZXhhZGVjaW1hbCBpbnRvIGEgYnVmZmVyLCBpc0NhcCBpcyB0cnVlIGZvciBjYXBpdGFsIGFscGhhcy4KLSAqIEFzc3VtZXMgYnVmc2l6ZSA+IDIgKi8KLXN0YXRpYyB2b2lkCi1mb3JtYXRfaGV4KGNoYXIgKmJ1ZmZlciwgc2l6ZV90IGJ1ZmZzaXplLCB1aW50NjRfdCB2YWx1ZSwgaW50IGlzQ2FwKQotewotICAgIGNvbnN0IGNoYXIgKmRpZ2l0cyA9IGlzQ2FwID8gIjAxMjM0NTY3ODlBQkNERUYiIDogIjAxMjM0NTY3ODlhYmNkZWYiOwotCi0gICAgZm9ybWF0X251bWJlcihidWZmZXIsIGJ1ZmZzaXplLCB2YWx1ZSwgMTYsIGRpZ2l0cyk7Ci19Ci0KLQotLyogUGVyZm9ybSBmb3JtYXR0ZWQgb3V0cHV0IHRvIGFuIG91dHB1dCB0YXJnZXQgJ28nICovCi1zdGF0aWMgdm9pZAotb3V0X3Zmb3JtYXQoT3V0ICpvLCBjb25zdCBjaGFyICpmb3JtYXQsIHZhX2xpc3QgYXJncykKLXsKLSAgICBpbnQgbm4gPSAwOwotCi0gICAgZm9yICg7OykgewotICAgICAgICBpbnQgbW07Ci0gICAgICAgIGludCBwYWRaZXJvID0gMDsKLSAgICAgICAgaW50IHBhZExlZnQgPSAwOwotICAgICAgICBjaGFyIHNpZ24gPSAnXDAnOwotICAgICAgICBpbnQgd2lkdGggPSAtMTsKLSAgICAgICAgaW50IHByZWMgID0gLTE7Ci0gICAgICAgIHNpemVfdCBieXRlbGVuID0gc2l6ZW9mKGludCk7Ci0gICAgICAgIGNvbnN0IGNoYXIqICBzdHI7Ci0gICAgICAgIGludCBzbGVuOwotICAgICAgICBjaGFyIGJ1ZmZlclszMl07ICAvKiB0ZW1wb3JhcnkgYnVmZmVyIHVzZWQgdG8gZm9ybWF0IG51bWJlcnMgKi8KLQotICAgICAgICBjaGFyICBjOwotCi0gICAgICAgIC8qIGZpcnN0LCBmaW5kIGFsbCBjaGFyYWN0ZXJzIHRoYXQgYXJlIG5vdCAwIG9yICclJyAqLwotICAgICAgICAvKiB0aGVuIHNlbmQgdGhlbSB0byB0aGUgb3V0cHV0IGRpcmVjdGx5ICovCi0gICAgICAgIG1tID0gbm47Ci0gICAgICAgIGRvIHsKLSAgICAgICAgICAgIGMgPSBmb3JtYXRbbW1dOwotICAgICAgICAgICAgaWYgKGMgPT0gJ1wwJyB8fCBjID09ICclJykKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIG1tKys7Ci0gICAgICAgIH0gd2hpbGUgKDEpOwotCi0gICAgICAgIGlmIChtbSA+IG5uKSB7Ci0gICAgICAgICAgICBvdXRfc2VuZChvLCBmb3JtYXQrbm4sIG1tLW5uKTsKLSAgICAgICAgICAgIG5uID0gbW07Ci0gICAgICAgIH0KLQotICAgICAgICAvKiBpcyB0aGlzIGl0ID8gdGhlbiBleGl0ICovCi0gICAgICAgIGlmIChjID09ICdcMCcpCi0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICAvKiBub3BlLCB3ZSBhcmUgYXQgYSAnJScgbW9kaWZpZXIgKi8KLSAgICAgICAgbm4rKzsgIC8vIHNraXAgaXQKLQotICAgICAgICAvKiBwYXJzZSBmbGFncyAqLwotICAgICAgICBmb3IgKDs7KSB7Ci0gICAgICAgICAgICBjID0gZm9ybWF0W25uKytdOwotICAgICAgICAgICAgaWYgKGMgPT0gJ1wwJykgeyAgLyogc2luZ2xlIHRyYWlsaW5nICclJyA/ICovCi0gICAgICAgICAgICAgICAgYyA9ICclJzsKLSAgICAgICAgICAgICAgICBvdXRfc2VuZChvLCAmYywgMSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAoYyA9PSAnMCcpIHsKLSAgICAgICAgICAgICAgICBwYWRaZXJvID0gMTsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKGMgPT0gJy0nKSB7Ci0gICAgICAgICAgICAgICAgcGFkTGVmdCA9IDE7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChjID09ICcgJyB8fCBjID09ICcrJykgewotICAgICAgICAgICAgICAgIHNpZ24gPSBjOwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICAvKiBwYXJzZSBmaWVsZCB3aWR0aCAqLwotICAgICAgICBpZiAoKGMgPj0gJzAnICYmIGMgPD0gJzknKSkgewotICAgICAgICAgICAgbm4gLS07Ci0gICAgICAgICAgICB3aWR0aCA9IChpbnQpcGFyc2VfZGVjaW1hbChmb3JtYXQsICZubik7Ci0gICAgICAgICAgICBjID0gZm9ybWF0W25uKytdOwotICAgICAgICB9Ci0KLSAgICAgICAgLyogcGFyc2UgcHJlY2lzaW9uICovCi0gICAgICAgIGlmIChjID09ICcuJykgewotICAgICAgICAgICAgcHJlYyA9IChpbnQpcGFyc2VfZGVjaW1hbChmb3JtYXQsICZubik7Ci0gICAgICAgICAgICBjID0gZm9ybWF0W25uKytdOwotICAgICAgICB9Ci0KLSAgICAgICAgLyogbGVuZ3RoIG1vZGlmaWVyICovCi0gICAgICAgIHN3aXRjaCAoYykgewotICAgICAgICBjYXNlICdoJzoKLSAgICAgICAgICAgIGJ5dGVsZW4gPSBzaXplb2Yoc2hvcnQpOwotICAgICAgICAgICAgaWYgKGZvcm1hdFtubl0gPT0gJ2gnKSB7Ci0gICAgICAgICAgICAgICAgYnl0ZWxlbiA9IHNpemVvZihjaGFyKTsKLSAgICAgICAgICAgICAgICBubiArPSAxOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYyA9IGZvcm1hdFtubisrXTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlICdsJzoKLSAgICAgICAgICAgIGJ5dGVsZW4gPSBzaXplb2YobG9uZyk7Ci0gICAgICAgICAgICBpZiAoZm9ybWF0W25uXSA9PSAnbCcpIHsKLSAgICAgICAgICAgICAgICBieXRlbGVuID0gc2l6ZW9mKGxvbmcgbG9uZyk7Ci0gICAgICAgICAgICAgICAgbm4gKz0gMTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGMgPSBmb3JtYXRbbm4rK107Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAneic6Ci0gICAgICAgICAgICBieXRlbGVuID0gc2l6ZW9mKHNpemVfdCk7Ci0gICAgICAgICAgICBjID0gZm9ybWF0W25uKytdOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgJ3QnOgotICAgICAgICAgICAgYnl0ZWxlbiA9IHNpemVvZihwdHJkaWZmX3QpOwotICAgICAgICAgICAgYyA9IGZvcm1hdFtubisrXTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgOwotICAgICAgICB9Ci0KLSAgICAgICAgLyogY29udmVyc2lvbiBzcGVjaWZpZXIgKi8KLSAgICAgICAgaWYgKGMgPT0gJ3MnKSB7Ci0gICAgICAgICAgICAvKiBzdHJpbmcgKi8KLSAgICAgICAgICAgIHN0ciA9IHZhX2FyZyhhcmdzLCBjb25zdCBjaGFyKik7Ci0gICAgICAgIH0gZWxzZSBpZiAoYyA9PSAnYycpIHsKLSAgICAgICAgICAgIC8qIGNoYXJhY3RlciAqLwotICAgICAgICAgICAgLyogTk9URTogY2hhciBpcyBwcm9tb3RlZCB0byBpbnQgd2hlbiBwYXNzZWQgdGhyb3VnaCB0aGUgc3RhY2sgKi8KLSAgICAgICAgICAgIGJ1ZmZlclswXSA9IChjaGFyKSB2YV9hcmcoYXJncywgaW50KTsKLSAgICAgICAgICAgIGJ1ZmZlclsxXSA9ICdcMCc7Ci0gICAgICAgICAgICBzdHIgPSBidWZmZXI7Ci0gICAgICAgIH0gZWxzZSBpZiAoYyA9PSAncCcpIHsKLSAgICAgICAgICAgIHVpbnQ2NF90ICB2YWx1ZSA9ICh1aW50cHRyX3QpIHZhX2FyZyhhcmdzLCB2b2lkKik7Ci0gICAgICAgICAgICBidWZmZXJbMF0gPSAnMCc7Ci0gICAgICAgICAgICBidWZmZXJbMV0gPSAneCc7Ci0gICAgICAgICAgICBmb3JtYXRfaGV4KGJ1ZmZlciArIDIsIHNpemVvZiBidWZmZXItMiwgdmFsdWUsIDApOwotICAgICAgICAgICAgc3RyID0gYnVmZmVyOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLyogaW50ZWdlcnMgLSBmaXJzdCByZWFkIHZhbHVlIGZyb20gc3RhY2sgKi8KLSAgICAgICAgICAgIHVpbnQ2NF90IHZhbHVlOwotICAgICAgICAgICAgaW50IGlzU2lnbmVkID0gKGMgPT0gJ2QnIHx8IGMgPT0gJ2knIHx8IGMgPT0gJ28nKTsKLQotICAgICAgICAgICAgLyogTk9URTogaW50OF90IGFuZCBpbnQxNl90IGFyZSBwcm9tb3RlZCB0byBpbnQgd2hlbiBwYXNzZWQKLSAgICAgICAgICAgICAqICAgICAgIHRocm91Z2ggdGhlIHN0YWNrCi0gICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIHN3aXRjaCAoYnl0ZWxlbikgewotICAgICAgICAgICAgY2FzZSAxOiB2YWx1ZSA9ICh1aW50OF90KSAgdmFfYXJnKGFyZ3MsIGludCk7IGJyZWFrOwotICAgICAgICAgICAgY2FzZSAyOiB2YWx1ZSA9ICh1aW50MTZfdCkgdmFfYXJnKGFyZ3MsIGludCk7IGJyZWFrOwotICAgICAgICAgICAgY2FzZSA0OiB2YWx1ZSA9IHZhX2FyZyhhcmdzLCB1aW50MzJfdCk7IGJyZWFrOwotICAgICAgICAgICAgY2FzZSA4OiB2YWx1ZSA9IHZhX2FyZyhhcmdzLCB1aW50NjRfdCk7IGJyZWFrOwotICAgICAgICAgICAgZGVmYXVsdDogcmV0dXJuOyAgLyogc2hvdWxkIG5vdCBoYXBwZW4gKi8KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLyogc2lnbiBleHRlbnNpb24sIGlmIG5lZWRlZCAqLwotICAgICAgICAgICAgaWYgKGlzU2lnbmVkKSB7Ci0gICAgICAgICAgICAgICAgaW50IHNoaWZ0ID0gNjQgLSA4KmJ5dGVsZW47Ci0gICAgICAgICAgICAgICAgdmFsdWUgPSAodWludDY0X3QpKCgoaW50NjRfdCkodmFsdWUgPDwgc2hpZnQpKSA+PiBzaGlmdCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8qIGZvcm1hdCB0aGUgbnVtYmVyIHByb3Blcmx5IGludG8gb3VyIGJ1ZmZlciAqLwotICAgICAgICAgICAgc3dpdGNoIChjKSB7Ci0gICAgICAgICAgICBjYXNlICdpJzogY2FzZSAnZCc6Ci0gICAgICAgICAgICAgICAgZm9ybWF0X2ludGVnZXIoYnVmZmVyLCBzaXplb2YgYnVmZmVyLCB2YWx1ZSwgMTAsIGlzU2lnbmVkKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgJ28nOgotICAgICAgICAgICAgICAgIGZvcm1hdF9pbnRlZ2VyKGJ1ZmZlciwgc2l6ZW9mIGJ1ZmZlciwgdmFsdWUsIDgsIGlzU2lnbmVkKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgJ3gnOiBjYXNlICdYJzoKLSAgICAgICAgICAgICAgICBmb3JtYXRfaGV4KGJ1ZmZlciwgc2l6ZW9mIGJ1ZmZlciwgdmFsdWUsIChjID09ICdYJykpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBidWZmZXJbMF0gPSAnXDAnOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgLyogdGhlbiBwb2ludCB0byBpdCAqLwotICAgICAgICAgICAgc3RyID0gYnVmZmVyOwotICAgICAgICB9Ci0KLSAgICAgICAgLyogaWYgd2UgYXJlIGhlcmUsICdzdHInIHBvaW50cyB0byB0aGUgY29udGVudCB0aGF0IG11c3QgYmUKLSAgICAgICAgICogb3V0cHV0dGVkLiBoYW5kbGUgcGFkZGluZyBhbmQgYWxpZ25tZW50IG5vdyAqLwotCi0gICAgICAgIHNsZW4gPSBzdHJsZW4oc3RyKTsKLQotICAgICAgICBpZiAoc2xlbiA8IHdpZHRoICYmICFwYWRMZWZ0KSB7Ci0gICAgICAgICAgICBjaGFyIHBhZENoYXIgPSBwYWRaZXJvID8gJzAnIDogJyAnOwotICAgICAgICAgICAgb3V0X3NlbmRfcmVwZWF0KG8sIHBhZENoYXIsIHdpZHRoIC0gc2xlbik7Ci0gICAgICAgIH0KLQotICAgICAgICBvdXRfc2VuZChvLCBzdHIsIHNsZW4pOwotCi0gICAgICAgIGlmIChzbGVuIDwgd2lkdGggJiYgcGFkTGVmdCkgewotICAgICAgICAgICAgY2hhciBwYWRDaGFyID0gcGFkWmVybyA/ICcwJyA6ICcgJzsKLSAgICAgICAgICAgIG91dF9zZW5kX3JlcGVhdChvLCBwYWRDaGFyLCB3aWR0aCAtIHNsZW4pOwotICAgICAgICB9Ci0gICAgfQotfQotCi0KLSNpZmRlZiBVTklUX1RFU1RTCi0KLSNpbmNsdWRlIDxzdGRpby5oPgotCi1zdGF0aWMgaW50ICAgZ0ZhaWxzID0gMDsKLQotI2RlZmluZSAgTUFSR0lOICA0MAotCi0jZGVmaW5lICBVVEVTVF9DSEVDSyhjb25kaXRpb24sbWVzc2FnZSkgXAotICAgIHByaW50ZigiQ2hlY2tpbmcgJS0qczogIiwgTUFSR0lOLCBtZXNzYWdlKTsgZmZsdXNoKHN0ZG91dCk7IFwKLSAgICBpZiAoIShjb25kaXRpb24pKSB7IFwKLSAgICAgICAgcHJpbnRmKCJLT1xuIik7IFwKLSAgICAgICAgZ0ZhaWxzICs9IDE7IFwKLSAgICB9IGVsc2UgeyBcCi0gICAgICAgIHByaW50Zigib2tcbiIpOyBcCi0gICAgfQotCi1zdGF0aWMgdm9pZAotdXRlc3RfQnVmT3V0KHZvaWQpCi17Ci0gICAgY2hhciBidWZmZXJbMTZdOwotICAgIEJ1Zk91dCBib1sxXTsKLSAgICBPdXQqIG91dDsKLSAgICBpbnQgcmV0OwotCi0gICAgYnVmZmVyWzBdID0gJzEnOwotICAgIG91dCA9IGJ1Zl9vdXRfaW5pdChibywgYnVmZmVyLCBzaXplb2YgYnVmZmVyKTsKLSAgICBVVEVTVF9DSEVDSyhidWZmZXJbMF0gPT0gJ1wwJywgImJ1Zl9vdXRfaW5pdCBjbGVhcnMgaW5pdGlhbCBieXRlIik7Ci0gICAgb3V0X3NlbmQob3V0LCAiYWJjIiwgMyk7Ci0gICAgVVRFU1RfQ0hFQ0soIW1lbWNtcChidWZmZXIsICJhYmMiLCA0KSwgIm91dF9zZW5kKCkgd29ya3Mgd2l0aCBCdWZPdXQiKTsKLSAgICBvdXRfc2VuZF9yZXBlYXQob3V0LCAnWCcsIDQpOwotICAgIFVURVNUX0NIRUNLKCFtZW1jbXAoYnVmZmVyLCAiYWJjWFhYWCIsIDgpLCAib3V0X3NlbmRfcmVwZWF0KCkgd29ya3Mgd2l0aCBCdWZPdXQiKTsKLSAgICBidWZmZXJbc2l6ZW9mIGJ1ZmZlci0xXSA9ICd4JzsKLSAgICBvdXRfc2VuZF9yZXBlYXQob3V0LCAnWScsIDIqc2l6ZW9mKGJ1ZmZlcikpOwotICAgIFVURVNUX0NIRUNLKGJ1ZmZlcltzaXplb2YgYnVmZmVyLTFdID09ICdcMCcsICJvdmVyZmxvd3MgYWx3YXlzIHplcm8tdGVybWluYXRlcyIpOwotCi0gICAgb3V0ID0gYnVmX291dF9pbml0KGJvLCBidWZmZXIsIHNpemVvZiBidWZmZXIpOwotICAgIG91dF9zZW5kX3JlcGVhdChvdXQsICdYJywgMipzaXplb2YoYnVmZmVyKSk7Ci0gICAgcmV0ID0gYnVmX291dF9sZW5ndGgoYm8pOwotICAgIFVURVNUX0NIRUNLKHJldCA9PSAyKnNpemVvZihidWZmZXIpLCAiY29ycmVjdCBzaXplIHJldHVybmVkIG9uIG92ZXJmbG93Iik7Ci19Ci0KLXN0YXRpYyB2b2lkCi11dGVzdF9leHBlY3QoY29uc3QgY2hhciogIHJlc3VsdCwgY29uc3QgY2hhciogIGZvcm1hdCwgLi4uKQotewotICAgIHZhX2xpc3QgYXJnczsKLSAgICBCdWZPdXQgYm9bMV07Ci0gICAgY2hhciBidWZmZXJbMjU2XTsKLSAgICBPdXQqIG91dCA9IGJ1Zl9vdXRfaW5pdChibywgYnVmZmVyLCBzaXplb2YgYnVmZmVyKTsKLQotICAgIHByaW50ZigiQ2hlY2tpbmcgJS0qczogIiwgTUFSR0lOLCBmb3JtYXQpOyBmZmx1c2goc3Rkb3V0KTsKLSAgICB2YV9zdGFydChhcmdzLCBmb3JtYXQpOwotICAgIG91dF92Zm9ybWF0KG91dCwgZm9ybWF0LCBhcmdzKTsKLSAgICB2YV9lbmQoYXJncyk7Ci0KLSAgICBpZiAoc3RyY21wKHJlc3VsdCwgYnVmZmVyKSkgewotICAgICAgICBwcmludGYoIktPLiBnb3QgJyVzJyBleHBlY3RpbmcgJyVzJ1xuIiwgYnVmZmVyLCByZXN1bHQpOwotICAgICAgICBnRmFpbHMgKz0gMTsKLSAgICB9IGVsc2UgewotICAgICAgICBwcmludGYoIm9rLiBnb3QgJyVzJ1xuIiwgcmVzdWx0KTsKLSAgICB9Ci19Ci0KLWludCAgbWFpbih2b2lkKQotewotICAgIHV0ZXN0X0J1Zk91dCgpOwotICAgIHV0ZXN0X2V4cGVjdCgiIiwgIiIpOwotICAgIHV0ZXN0X2V4cGVjdCgiYSIsICJhIik7Ci0gICAgdXRlc3RfZXhwZWN0KCIwMTIzNCIsICIwMTIzNCIsICIiKTsKLSAgICB1dGVzdF9leHBlY3QoIjAxMjM0IiwgIiVzIiwgIjAxMjM0Iik7Ci0gICAgdXRlc3RfZXhwZWN0KCJhYWJiY2MiLCAiYWElc2NjIiwgImJiIik7Ci0gICAgdXRlc3RfZXhwZWN0KCJhIiwgIiVjIiwgJ2EnKTsKLSAgICB1dGVzdF9leHBlY3QoIjEyMzQiLCAiJWQiLCAxMjM0KTsKLSAgICB1dGVzdF9leHBlY3QoIi04MTIzIiwgIiVkIiwgLTgxMjMpOwotICAgIHV0ZXN0X2V4cGVjdCgiMTYiLCAiJWhkIiwgMHg3ZmZmMDAxMCk7Ci0gICAgdXRlc3RfZXhwZWN0KCIxNiIsICIlaGhkIiwgMHg3ZmZmZmYxMCk7Ci0gICAgdXRlc3RfZXhwZWN0KCI2ODcxOTQ3NjczNiIsICIlbGxkIiwgMHgxMDAwMDAwMDAwTEwpOwotICAgIHV0ZXN0X2V4cGVjdCgiNzAwMDAiLCAiJWxkIiwgNzAwMDApOwotICAgIHV0ZXN0X2V4cGVjdCgiMHhiMDAwMTIzNCIsICIlcCIsICh2b2lkKikweGIwMDAxMjM0KTsKLSAgICB1dGVzdF9leHBlY3QoIjEyYWIiLCAiJXgiLCAweDEyYWIpOwotICAgIHV0ZXN0X2V4cGVjdCgiMTJBQiIsICIlWCIsIDB4MTJhYik7Ci0gICAgdXRlc3RfZXhwZWN0KCIwMDEyMzQ1NiIsICIlMDh4IiwgMHgxMjM0NTYpOwotICAgIHV0ZXN0X2V4cGVjdCgiMDEyMzQiLCAiMCVkIiwgMTIzNCk7Ci0gICAgdXRlc3RfZXhwZWN0KCIgMTIzNCIsICIlNWQiLCAxMjM0KTsKLSAgICB1dGVzdF9leHBlY3QoIjAxMjM0IiwgIiUwNWQiLCAxMjM0KTsKLSAgICB1dGVzdF9leHBlY3QoIiAgICAxMjM0IiwgIiU4ZCIsIDEyMzQpOwotICAgIHV0ZXN0X2V4cGVjdCgiMTIzNCAgICAiLCAiJS04ZCIsIDEyMzQpOwotICAgIHV0ZXN0X2V4cGVjdCgiYWJjZGVmICAgICAiLCAiJS0xMXMiLCAiYWJjZGVmIik7Ci0gICAgdXRlc3RfZXhwZWN0KCJzb21ldGhpbmc6MTIzNCIsICIlczolZCIsICJzb21ldGhpbmciLCAxMjM0KTsKLSAgICB1dGVzdF9leHBlY3QoIjAwNTo1OjA1IiwgIiUwM2Q6JWQ6JTAyZCIsIDUsIDUsIDUpOwotICAgIHV0ZXN0X2V4cGVjdCgiNSwweDAiLCAiJWQsJXAiLCA1LCBOVUxMKTsKLSAgICB1dGVzdF9leHBlY3QoIjY4NzE5NDc2NzM2LDYsNyw4IiwgIiVsbGQsJWQsJWQsJWQiLCAweDEwMDAwMDAwMDBMTCwgNiwgNywgOCk7Ci0gICAgcmV0dXJuIGdGYWlscyAhPSAwOwotfQotCi0jZW5kaWYgLyogVU5JVF9URVNUUyAqLwpkaWZmIC0tZ2l0IGEvbGlua2VyL2xpbmtlcl9mb3JtYXQuaCBiL2xpbmtlci9saW5rZXJfZm9ybWF0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZhZTJiYWQuLjAwMDAwMDAKLS0tIGEvbGlua2VyL2xpbmtlcl9mb3JtYXQuaAorKysgL2Rldi9udWxsCkBAIC0xLDQxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0gKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiAgICBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCi0gKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQotICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAotICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKLSAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUwotICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECi0gKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0gKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLSNpZm5kZWYgX0xJTktFUl9GT1JNQVRfSAotI2RlZmluZSBfTElOS0VSX0ZPUk1BVF9ICi0KLSNpbmNsdWRlIDxzdGRhcmcuaD4KLSNpbmNsdWRlIDxzdGRkZWYuaD4KLQotLyogRm9ybWF0dGluZyByb3V0aW5lcyBmb3IgdGhlIGR5bmFtaWMgbGlua2VyJ3MgZGVidWcgdHJhY2VzICovCi0vKiBXZSB3YW50IHRvIGF2b2lkIGRyYWdnaW5nIHRoZSB3aG9sZSBDIGxpYnJhcnkgZnByaW50ZigpICAgKi8KLS8qIGltcGxlbWVudGF0aW9uIGludG8gdGhlIGR5bmFtaWMgbGlua2VyIHNpbmNlIHRoaXMgY3JlYXRlcyAqLwotLyogaXNzdWVzIChpdCB1c2VzIG1hbGxvYygpL2ZyZWUoKSkgYW5kIGluY3JlYXNlcyBjb2RlIHNpemUgICovCi0KLWludCBmb3JtYXRfYnVmZmVyKGNoYXIgKmJ1ZmZlciwgc2l6ZV90IGJ1ZnNpemUsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKTsKLQotI2VuZGlmIC8qIF9MSU5LRVJfRk9STUFUX0ggKi8KZGlmZiAtLWdpdCBhL2xpbmtlci9saW5rZXJfcGhkci5jcHAgYi9saW5rZXIvbGlua2VyX3BoZHIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzZjE2M2MKLS0tIC9kZXYvbnVsbAorKysgYi9saW5rZXIvbGlua2VyX3BoZHIuY3BwCkBAIC0wLDAgKzEsNjYwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJsaW5rZXJfcGhkci5oIgorCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzeXMvbW1hbi5oPgorCisjaW5jbHVkZSAibGlua2VyLmgiCisjaW5jbHVkZSAibGlua2VyX2RlYnVnLmgiCisKKy8qKgorICBURUNITklDQUwgTk9URSBPTiBFTEYgTE9BRElORy4KKworICBBbiBFTEYgZmlsZSdzIHByb2dyYW0gaGVhZGVyIHRhYmxlIGNvbnRhaW5zIG9uZSBvciBtb3JlIFBUX0xPQUQKKyAgc2VnbWVudHMsIHdoaWNoIGNvcnJlc3BvbmRzIHRvIHBvcnRpb25zIG9mIHRoZSBmaWxlIHRoYXQgbmVlZCB0bworICBiZSBtYXBwZWQgaW50byB0aGUgcHJvY2VzcycgYWRkcmVzcyBzcGFjZS4KKworICBFYWNoIGxvYWRhYmxlIHNlZ21lbnQgaGFzIHRoZSBmb2xsb3dpbmcgaW1wb3J0YW50IHByb3BlcnRpZXM6CisKKyAgICBwX29mZnNldCAgLT4gc2VnbWVudCBmaWxlIG9mZnNldAorICAgIHBfZmlsZXN6ICAtPiBzZWdtZW50IGZpbGUgc2l6ZQorICAgIHBfbWVtc3ogICAtPiBzZWdtZW50IG1lbW9yeSBzaXplIChhbHdheXMgPj0gcF9maWxlc3opCisgICAgcF92YWRkciAgIC0+IHNlZ21lbnQncyB2aXJ0dWFsIGFkZHJlc3MKKyAgICBwX2ZsYWdzICAgLT4gc2VnbWVudCBmbGFncyAoZS5nLiByZWFkYWJsZSwgd3JpdGFibGUsIGV4ZWN1dGFibGUpCisKKyAgV2Ugd2lsbCBpZ25vcmUgdGhlIHBfcGFkZHIgYW5kIHBfYWxpZ24gZmllbGRzIG9mIEVsZjMyX1BoZHIgZm9yIG5vdy4KKworICBUaGUgbG9hZGFibGUgc2VnbWVudHMgY2FuIGJlIHNlZW4gYXMgYSBsaXN0IG9mIFtwX3ZhZGRyIC4uLiBwX3ZhZGRyK3BfbWVtc3opCisgIHJhbmdlcyBvZiB2aXJ0dWFsIGFkZHJlc3Nlcy4gQSBmZXcgcnVsZXMgYXBwbHk6CisKKyAgLSB0aGUgdmlydHVhbCBhZGRyZXNzIHJhbmdlcyBzaG91bGQgbm90IG92ZXJsYXAuCisKKyAgLSBpZiBhIHNlZ21lbnQncyBwX2ZpbGVzeiBpcyBzbWFsbGVyIHRoYW4gaXRzIHBfbWVtc3osIHRoZSBleHRyYSBieXRlcworICAgIGJldHdlZW4gdGhlbSBzaG91bGQgYWx3YXlzIGJlIGluaXRpYWxpemVkIHRvIDAuCisKKyAgLSByYW5nZXMgZG8gbm90IG5lY2Vzc2FyaWx5IHN0YXJ0IG9yIGVuZCBhdCBwYWdlIGJvdW5kYXJpZXMuIFR3byBkaXN0aW5jdAorICAgIHNlZ21lbnRzIGNhbiBoYXZlIHRoZWlyIHN0YXJ0IGFuZCBlbmQgb24gdGhlIHNhbWUgcGFnZS4gSW4gdGhpcyBjYXNlLCB0aGUKKyAgICBwYWdlIGluaGVyaXRzIHRoZSBtYXBwaW5nIGZsYWdzIG9mIHRoZSBsYXR0ZXIgc2VnbWVudC4KKworICBGaW5hbGx5LCB0aGUgcmVhbCBsb2FkIGFkZHJzIG9mIGVhY2ggc2VnbWVudCBpcyBub3QgcF92YWRkci4gSW5zdGVhZCB0aGUKKyAgbG9hZGVyIGRlY2lkZXMgd2hlcmUgdG8gbG9hZCB0aGUgZmlyc3Qgc2VnbWVudCwgdGhlbiB3aWxsIGxvYWQgYWxsIG90aGVycworICByZWxhdGl2ZSB0byB0aGUgZmlyc3Qgb25lIHRvIHJlc3BlY3QgdGhlIGluaXRpYWwgcmFuZ2UgbGF5b3V0LgorCisgIEZvciBleGFtcGxlLCBjb25zaWRlciB0aGUgZm9sbG93aW5nIGxpc3Q6CisKKyAgICBbIG9mZnNldDowLCAgICAgIGZpbGVzejoweDQwMDAsIG1lbXN6OjB4NDAwMCwgdmFkZHI6MHgzMDAwMCBdLAorICAgIFsgb2Zmc2V0OjB4NDAwMCwgZmlsZXN6OjB4MjAwMCwgbWVtc3o6MHg4MDAwLCB2YWRkcjoweDQwMDAwIF0sCisKKyAgVGhpcyBjb3JyZXNwb25kcyB0byB0d28gc2VnbWVudHMgdGhhdCBjb3ZlciB0aGVzZSB2aXJ0dWFsIGFkZHJlc3MgcmFuZ2VzOgorCisgICAgICAgMHgzMDAwMC4uLjB4MzQwMDAKKyAgICAgICAweDQwMDAwLi4uMHg0ODAwMAorCisgIElmIHRoZSBsb2FkZXIgZGVjaWRlcyB0byBsb2FkIHRoZSBmaXJzdCBzZWdtZW50IGF0IGFkZHJlc3MgMHhhMDAwMDAwMAorICB0aGVuIHRoZSBzZWdtZW50cycgbG9hZCBhZGRyZXNzIHJhbmdlcyB3aWxsIGJlOgorCisgICAgICAgMHhhMDAzMDAwMC4uLjB4YTAwMzQwMDAKKyAgICAgICAweGEwMDQwMDAwLi4uMHhhMDA0ODAwMAorCisgIEluIG90aGVyIHdvcmRzLCBhbGwgc2VnbWVudHMgbXVzdCBiZSBsb2FkZWQgYXQgYW4gYWRkcmVzcyB0aGF0IGhhcyB0aGUgc2FtZQorICBjb25zdGFudCBvZmZzZXQgZnJvbSB0aGVpciBwX3ZhZGRyIHZhbHVlLiBUaGlzIG9mZnNldCBpcyBjb21wdXRlZCBhcyB0aGUKKyAgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBmaXJzdCBzZWdtZW50J3MgbG9hZCBhZGRyZXNzLCBhbmQgaXRzIHBfdmFkZHIgdmFsdWUuCisKKyAgSG93ZXZlciwgaW4gcHJhY3RpY2UsIHNlZ21lbnRzIGRvIF9ub3RfIHN0YXJ0IGF0IHBhZ2UgYm91bmRhcmllcy4gU2luY2Ugd2UKKyAgY2FuIG9ubHkgbWVtb3J5LW1hcCBhdCBwYWdlIGJvdW5kYXJpZXMsIHRoaXMgbWVhbnMgdGhhdCB0aGUgYmlhcyBpcworICBjb21wdXRlZCBhczoKKworICAgICAgIGxvYWRfYmlhcyA9IHBoZHIwX2xvYWRfYWRkcmVzcyAtIFBBR0VfU1RBUlQocGhkcjAtPnBfdmFkZHIpCisKKyAgKE5PVEU6IFRoZSB2YWx1ZSBtdXN0IGJlIHVzZWQgYXMgYSAzMi1iaXQgdW5zaWduZWQgaW50ZWdlciwgdG8gZGVhbCB3aXRoCisgICAgICAgICAgcG9zc2libGUgd3JhcCBhcm91bmQgVUlOVDMyX01BWCBmb3IgcG9zc2libGUgbGFyZ2UgcF92YWRkciB2YWx1ZXMpLgorCisgIEFuZCB0aGF0IHRoZSBwaGRyMF9sb2FkX2FkZHJlc3MgbXVzdCBzdGFydCBhdCBhIHBhZ2UgYm91bmRhcnksIHdpdGgKKyAgdGhlIHNlZ21lbnQncyByZWFsIGNvbnRlbnQgc3RhcnRpbmcgYXQ6CisKKyAgICAgICBwaGRyMF9sb2FkX2FkZHJlc3MgKyBQQUdFX09GRlNFVChwaGRyMC0+cF92YWRkcikKKworICBOb3RlIHRoYXQgRUxGIHJlcXVpcmVzIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uIHRvIG1ha2UgdGhlIG1tYXAoKS1pbmcgd29yazoKKworICAgICAgUEFHRV9PRkZTRVQocGhkcjAtPnBfdmFkZHIpID09IFBBR0VfT0ZGU0VUKHBoZHIwLT5wX29mZnNldCkKKworICBUaGUgbG9hZF9iaWFzIG11c3QgYmUgYWRkZWQgdG8gYW55IHBfdmFkZHIgdmFsdWUgcmVhZCBmcm9tIHRoZSBFTEYgZmlsZSB0bworICBkZXRlcm1pbmUgdGhlIGNvcnJlc3BvbmRpbmcgbWVtb3J5IGFkZHJlc3MuCisKKyAqKi8KKworI2RlZmluZSBNQVlCRV9NQVBfRkxBRyh4LGZyb20sdG8pICAgICgoKHgpICYgKGZyb20pKSA/ICh0bykgOiAwKQorI2RlZmluZSBQRkxBR1NfVE9fUFJPVCh4KSAgICAgICAgICAgIChNQVlCRV9NQVBfRkxBRygoeCksIFBGX1gsIFBST1RfRVhFQykgfCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1BWUJFX01BUF9GTEFHKCh4KSwgUEZfUiwgUFJPVF9SRUFEKSB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUFZQkVfTUFQX0ZMQUcoKHgpLCBQRl9XLCBQUk9UX1dSSVRFKSkKKworRWxmUmVhZGVyOjpFbGZSZWFkZXIoY29uc3QgY2hhciogbmFtZSwgaW50IGZkKQorICAgIDogbmFtZV8obmFtZSksIGZkXyhmZCksCisgICAgICBwaGRyX251bV8oMCksIHBoZHJfbW1hcF8oTlVMTCksIHBoZHJfdGFibGVfKE5VTEwpLCBwaGRyX3NpemVfKDApLAorICAgICAgbG9hZF9zdGFydF8oTlVMTCksIGxvYWRfc2l6ZV8oMCksIGxvYWRfYmlhc18oMCksCisgICAgICBsb2FkZWRfcGhkcl8oTlVMTCkgeworfQorCitFbGZSZWFkZXI6On5FbGZSZWFkZXIoKSB7CisgIGlmIChmZF8gIT0gLTEpIHsKKyAgICBjbG9zZShmZF8pOworICB9CisgIGlmIChwaGRyX21tYXBfICE9IE5VTEwpIHsKKyAgICBtdW5tYXAocGhkcl9tbWFwXywgcGhkcl9zaXplXyk7CisgIH0KK30KKworYm9vbCBFbGZSZWFkZXI6OkxvYWQoKSB7CisgIHJldHVybiBSZWFkRWxmSGVhZGVyKCkgJiYKKyAgICAgICAgIFZlcmlmeUVsZkhlYWRlcigpICYmCisgICAgICAgICBSZWFkUHJvZ3JhbUhlYWRlcigpICYmCisgICAgICAgICBSZXNlcnZlQWRkcmVzc1NwYWNlKCkgJiYKKyAgICAgICAgIExvYWRTZWdtZW50cygpICYmCisgICAgICAgICBGaW5kUGhkcigpOworfQorCitib29sIEVsZlJlYWRlcjo6UmVhZEVsZkhlYWRlcigpIHsKKyAgc3NpemVfdCByYyA9IFRFTVBfRkFJTFVSRV9SRVRSWShyZWFkKGZkXywgJmhlYWRlcl8sIHNpemVvZihoZWFkZXJfKSkpOworICBpZiAocmMgPCAwKSB7CisgICAgRExfRVJSKCJjYW4ndCByZWFkIGZpbGUgXCIlc1wiOiAlcyIsIG5hbWVfLCBzdHJlcnJvcihlcnJubykpOworICAgIHJldHVybiBmYWxzZTsKKyAgfQorICBpZiAocmMgIT0gc2l6ZW9mKGhlYWRlcl8pKSB7CisgICAgRExfRVJSKCJcIiVzXCIgaXMgdG9vIHNtYWxsIHRvIGJlIGFuIEVMRiBleGVjdXRhYmxlIiwgbmFtZV8pOworICAgIHJldHVybiBmYWxzZTsKKyAgfQorICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBFbGZSZWFkZXI6OlZlcmlmeUVsZkhlYWRlcigpIHsKKyAgaWYgKGhlYWRlcl8uZV9pZGVudFtFSV9NQUcwXSAhPSBFTEZNQUcwIHx8CisgICAgICBoZWFkZXJfLmVfaWRlbnRbRUlfTUFHMV0gIT0gRUxGTUFHMSB8fAorICAgICAgaGVhZGVyXy5lX2lkZW50W0VJX01BRzJdICE9IEVMRk1BRzIgfHwKKyAgICAgIGhlYWRlcl8uZV9pZGVudFtFSV9NQUczXSAhPSBFTEZNQUczKSB7CisgICAgRExfRVJSKCJcIiVzXCIgaGFzIGJhZCBFTEYgbWFnaWMiLCBuYW1lXyk7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisKKyAgaWYgKGhlYWRlcl8uZV9pZGVudFtFSV9DTEFTU10gIT0gRUxGQ0xBU1MzMikgeworICAgIERMX0VSUigiXCIlc1wiIG5vdCAzMi1iaXQ6ICVkIiwgbmFtZV8sIGhlYWRlcl8uZV9pZGVudFtFSV9DTEFTU10pOworICAgIHJldHVybiBmYWxzZTsKKyAgfQorICBpZiAoaGVhZGVyXy5lX2lkZW50W0VJX0RBVEFdICE9IEVMRkRBVEEyTFNCKSB7CisgICAgRExfRVJSKCJcIiVzXCIgbm90IGxpdHRsZS1lbmRpYW46ICVkIiwgbmFtZV8sIGhlYWRlcl8uZV9pZGVudFtFSV9EQVRBXSk7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisKKyAgaWYgKGhlYWRlcl8uZV90eXBlICE9IEVUX0RZTikgeworICAgIERMX0VSUigiXCIlc1wiIGhhcyB1bmV4cGVjdGVkIGVfdHlwZTogJWQiLCBuYW1lXywgaGVhZGVyXy5lX3R5cGUpOworICAgIHJldHVybiBmYWxzZTsKKyAgfQorCisgIGlmIChoZWFkZXJfLmVfdmVyc2lvbiAhPSBFVl9DVVJSRU5UKSB7CisgICAgRExfRVJSKCJcIiVzXCIgaGFzIHVuZXhwZWN0ZWQgZV92ZXJzaW9uOiAlZCIsIG5hbWVfLCBoZWFkZXJfLmVfdmVyc2lvbik7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisKKyAgaWYgKGhlYWRlcl8uZV9tYWNoaW5lICE9CisjaWZkZWYgQU5EUk9JRF9BUk1fTElOS0VSCisgICAgICBFTV9BUk0KKyNlbGlmIGRlZmluZWQoQU5EUk9JRF9NSVBTX0xJTktFUikKKyAgICAgIEVNX01JUFMKKyNlbGlmIGRlZmluZWQoQU5EUk9JRF9YODZfTElOS0VSKQorICAgICAgRU1fMzg2CisjZW5kaWYKKyAgKSB7CisgICAgRExfRVJSKCJcIiVzXCIgaGFzIHVuZXhwZWN0ZWQgZV9tYWNoaW5lOiAlZCIsIG5hbWVfLCBoZWFkZXJfLmVfbWFjaGluZSk7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisKKyAgcmV0dXJuIHRydWU7Cit9CisKKy8vIExvYWRzIHRoZSBwcm9ncmFtIGhlYWRlciB0YWJsZSBmcm9tIGFuIEVMRiBmaWxlIGludG8gYSByZWFkLW9ubHkgcHJpdmF0ZQorLy8gYW5vbnltb3VzIG1tYXAtZWQgYmxvY2suCitib29sIEVsZlJlYWRlcjo6UmVhZFByb2dyYW1IZWFkZXIoKSB7CisgIHBoZHJfbnVtXyA9IGhlYWRlcl8uZV9waG51bTsKKworICAvLyBMaWtlIHRoZSBrZXJuZWwsIHdlIG9ubHkgYWNjZXB0IHByb2dyYW0gaGVhZGVyIHRhYmxlcyB0aGF0CisgIC8vIGFyZSBzbWFsbGVyIHRoYW4gNjRLaUIuCisgIGlmIChwaGRyX251bV8gPCAxIHx8IHBoZHJfbnVtXyA+IDY1NTM2L3NpemVvZihFbGYzMl9QaGRyKSkgeworICAgIERMX0VSUigiXCIlc1wiIGhhcyBpbnZhbGlkIGVfcGhudW06ICVkIiwgbmFtZV8sIHBoZHJfbnVtXyk7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisKKyAgRWxmMzJfQWRkciBwYWdlX21pbiA9IFBBR0VfU1RBUlQoaGVhZGVyXy5lX3Bob2ZmKTsKKyAgRWxmMzJfQWRkciBwYWdlX21heCA9IFBBR0VfRU5EKGhlYWRlcl8uZV9waG9mZiArIChwaGRyX251bV8gKiBzaXplb2YoRWxmMzJfUGhkcikpKTsKKyAgRWxmMzJfQWRkciBwYWdlX29mZnNldCA9IFBBR0VfT0ZGU0VUKGhlYWRlcl8uZV9waG9mZik7CisKKyAgcGhkcl9zaXplXyA9IHBhZ2VfbWF4IC0gcGFnZV9taW47CisKKyAgdm9pZCogbW1hcF9yZXN1bHQgPSBtbWFwKE5VTEwsIHBoZHJfc2l6ZV8sIFBST1RfUkVBRCwgTUFQX1BSSVZBVEUsIGZkXywgcGFnZV9taW4pOworICBpZiAobW1hcF9yZXN1bHQgPT0gTUFQX0ZBSUxFRCkgeworICAgIERMX0VSUigiXCIlc1wiIHBoZHIgbW1hcCBmYWlsZWQ6ICVzIiwgbmFtZV8sIHN0cmVycm9yKGVycm5vKSk7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisKKyAgcGhkcl9tbWFwXyA9IG1tYXBfcmVzdWx0OworICBwaGRyX3RhYmxlXyA9IHJlaW50ZXJwcmV0X2Nhc3Q8RWxmMzJfUGhkcio+KHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KG1tYXBfcmVzdWx0KSArIHBhZ2Vfb2Zmc2V0KTsKKyAgcmV0dXJuIHRydWU7Cit9CisKKy8qIFJldHVybnMgdGhlIHNpemUgb2YgdGhlIGV4dGVudCBvZiBhbGwgdGhlIHBvc3NpYmx5IG5vbi1jb250aWd1b3VzCisgKiBsb2FkYWJsZSBzZWdtZW50cyBpbiBhbiBFTEYgcHJvZ3JhbSBoZWFkZXIgdGFibGUuIFRoaXMgY29ycmVzcG9uZHMKKyAqIHRvIHRoZSBwYWdlLWFsaWduZWQgc2l6ZSBpbiBieXRlcyB0aGF0IG5lZWRzIHRvIGJlIHJlc2VydmVkIGluIHRoZQorICogcHJvY2VzcycgYWRkcmVzcyBzcGFjZS4gSWYgdGhlcmUgYXJlIG5vIGxvYWRhYmxlIHNlZ21lbnRzLCAwIGlzCisgKiByZXR1cm5lZC4KKyAqCisgKiBJZiBvdXRfbWluX3ZhZGRyIG9yIG91dF9tYXhfdmFkZHIgYXJlIG5vbi1OVUxMLCB0aGV5IHdpbGwgYmUKKyAqIHNldCB0byB0aGUgbWluaW11bSBhbmQgbWF4aW11bSBhZGRyZXNzZXMgb2YgcGFnZXMgdG8gYmUgcmVzZXJ2ZWQsCisgKiBvciAwIGlmIHRoZXJlIGlzIG5vdGhpbmcgdG8gbG9hZC4KKyAqLworc2l6ZV90IHBoZHJfdGFibGVfZ2V0X2xvYWRfc2l6ZShjb25zdCBFbGYzMl9QaGRyKiBwaGRyX3RhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgcGhkcl9jb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRWxmMzJfQWRkciogb3V0X21pbl92YWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRWxmMzJfQWRkciogb3V0X21heF92YWRkcikKK3sKKyAgICBFbGYzMl9BZGRyIG1pbl92YWRkciA9IDB4RkZGRkZGRkZVOworICAgIEVsZjMyX0FkZHIgbWF4X3ZhZGRyID0gMHgwMDAwMDAwMFU7CisKKyAgICBib29sIGZvdW5kX3B0X2xvYWQgPSBmYWxzZTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHBoZHJfY291bnQ7ICsraSkgeworICAgICAgICBjb25zdCBFbGYzMl9QaGRyKiBwaGRyID0gJnBoZHJfdGFibGVbaV07CisKKyAgICAgICAgaWYgKHBoZHItPnBfdHlwZSAhPSBQVF9MT0FEKSB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBmb3VuZF9wdF9sb2FkID0gdHJ1ZTsKKworICAgICAgICBpZiAocGhkci0+cF92YWRkciA8IG1pbl92YWRkcikgeworICAgICAgICAgICAgbWluX3ZhZGRyID0gcGhkci0+cF92YWRkcjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChwaGRyLT5wX3ZhZGRyICsgcGhkci0+cF9tZW1zeiA+IG1heF92YWRkcikgeworICAgICAgICAgICAgbWF4X3ZhZGRyID0gcGhkci0+cF92YWRkciArIHBoZHItPnBfbWVtc3o7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKCFmb3VuZF9wdF9sb2FkKSB7CisgICAgICAgIG1pbl92YWRkciA9IDB4MDAwMDAwMDBVOworICAgIH0KKworICAgIG1pbl92YWRkciA9IFBBR0VfU1RBUlQobWluX3ZhZGRyKTsKKyAgICBtYXhfdmFkZHIgPSBQQUdFX0VORChtYXhfdmFkZHIpOworCisgICAgaWYgKG91dF9taW5fdmFkZHIgIT0gTlVMTCkgeworICAgICAgICAqb3V0X21pbl92YWRkciA9IG1pbl92YWRkcjsKKyAgICB9CisgICAgaWYgKG91dF9tYXhfdmFkZHIgIT0gTlVMTCkgeworICAgICAgICAqb3V0X21heF92YWRkciA9IG1heF92YWRkcjsKKyAgICB9CisgICAgcmV0dXJuIG1heF92YWRkciAtIG1pbl92YWRkcjsKK30KKworLy8gUmVzZXJ2ZSBhIHZpcnR1YWwgYWRkcmVzcyByYW5nZSBiaWcgZW5vdWdoIHRvIGhvbGQgYWxsIGxvYWRhYmxlCisvLyBzZWdtZW50cyBvZiBhIHByb2dyYW0gaGVhZGVyIHRhYmxlLiBUaGlzIGlzIGRvbmUgYnkgY3JlYXRpbmcgYQorLy8gcHJpdmF0ZSBhbm9ueW1vdXMgbW1hcCgpIHdpdGggUFJPVF9OT05FLgorYm9vbCBFbGZSZWFkZXI6OlJlc2VydmVBZGRyZXNzU3BhY2UoKSB7CisgIEVsZjMyX0FkZHIgbWluX3ZhZGRyOworICBsb2FkX3NpemVfID0gcGhkcl90YWJsZV9nZXRfbG9hZF9zaXplKHBoZHJfdGFibGVfLCBwaGRyX251bV8sICZtaW5fdmFkZHIpOworICBpZiAobG9hZF9zaXplXyA9PSAwKSB7CisgICAgRExfRVJSKCJcIiVzXCIgaGFzIG5vIGxvYWRhYmxlIHNlZ21lbnRzIiwgbmFtZV8pOworICAgIHJldHVybiBmYWxzZTsKKyAgfQorCisgIHVpbnQ4X3QqIGFkZHIgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihtaW5fdmFkZHIpOworICBpbnQgbW1hcF9mbGFncyA9IE1BUF9QUklWQVRFIHwgTUFQX0FOT05ZTU9VUzsKKyAgdm9pZCogc3RhcnQgPSBtbWFwKGFkZHIsIGxvYWRfc2l6ZV8sIFBST1RfTk9ORSwgbW1hcF9mbGFncywgLTEsIDApOworICBpZiAoc3RhcnQgPT0gTUFQX0ZBSUxFRCkgeworICAgIERMX0VSUigiY291bGRuJ3QgcmVzZXJ2ZSAlZCBieXRlcyBvZiBhZGRyZXNzIHNwYWNlIGZvciBcIiVzXCIiLCBsb2FkX3NpemVfLCBuYW1lXyk7CisgICAgcmV0dXJuIGZhbHNlOworICB9CisKKyAgbG9hZF9zdGFydF8gPSBzdGFydDsKKyAgbG9hZF9iaWFzXyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KHN0YXJ0KSAtIGFkZHI7CisgIHJldHVybiB0cnVlOworfQorCisvLyBNYXAgYWxsIGxvYWRhYmxlIHNlZ21lbnRzIGluIHByb2Nlc3MnIGFkZHJlc3Mgc3BhY2UuCisvLyBUaGlzIGFzc3VtZXMgeW91IGFscmVhZHkgY2FsbGVkIHBoZHJfdGFibGVfcmVzZXJ2ZV9tZW1vcnkgdG8KKy8vIHJlc2VydmUgdGhlIGFkZHJlc3Mgc3BhY2UgcmFuZ2UgZm9yIHRoZSBsaWJyYXJ5LgorLy8gVE9ETzogYXNzZXJ0IGFzc3VtcHRpb24uCitib29sIEVsZlJlYWRlcjo6TG9hZFNlZ21lbnRzKCkgeworICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHBoZHJfbnVtXzsgKytpKSB7CisgICAgY29uc3QgRWxmMzJfUGhkciogcGhkciA9ICZwaGRyX3RhYmxlX1tpXTsKKworICAgIGlmIChwaGRyLT5wX3R5cGUgIT0gUFRfTE9BRCkgeworICAgICAgY29udGludWU7CisgICAgfQorCisgICAgLy8gU2VnbWVudCBhZGRyZXNzZXMgaW4gbWVtb3J5LgorICAgIEVsZjMyX0FkZHIgc2VnX3N0YXJ0ID0gcGhkci0+cF92YWRkciArIGxvYWRfYmlhc187CisgICAgRWxmMzJfQWRkciBzZWdfZW5kICAgPSBzZWdfc3RhcnQgKyBwaGRyLT5wX21lbXN6OworCisgICAgRWxmMzJfQWRkciBzZWdfcGFnZV9zdGFydCA9IFBBR0VfU1RBUlQoc2VnX3N0YXJ0KTsKKyAgICBFbGYzMl9BZGRyIHNlZ19wYWdlX2VuZCAgID0gUEFHRV9FTkQoc2VnX2VuZCk7CisKKyAgICBFbGYzMl9BZGRyIHNlZ19maWxlX2VuZCAgID0gc2VnX3N0YXJ0ICsgcGhkci0+cF9maWxlc3o7CisKKyAgICAvLyBGaWxlIG9mZnNldHMuCisgICAgRWxmMzJfQWRkciBmaWxlX3N0YXJ0ID0gcGhkci0+cF9vZmZzZXQ7CisgICAgRWxmMzJfQWRkciBmaWxlX2VuZCAgID0gZmlsZV9zdGFydCArIHBoZHItPnBfZmlsZXN6OworCisgICAgRWxmMzJfQWRkciBmaWxlX3BhZ2Vfc3RhcnQgPSBQQUdFX1NUQVJUKGZpbGVfc3RhcnQpOworICAgIEVsZjMyX0FkZHIgZmlsZV9sZW5ndGggPSBmaWxlX2VuZCAtIGZpbGVfcGFnZV9zdGFydDsKKworICAgIGlmIChmaWxlX2xlbmd0aCAhPSAwKSB7CisgICAgICB2b2lkKiBzZWdfYWRkciA9IG1tYXAoKHZvaWQqKXNlZ19wYWdlX3N0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVfbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBGTEFHU19UT19QUk9UKHBoZHItPnBfZmxhZ3MpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1BUF9GSVhFRHxNQVBfUFJJVkFURSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZF8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZV9wYWdlX3N0YXJ0KTsKKyAgICAgIGlmIChzZWdfYWRkciA9PSBNQVBfRkFJTEVEKSB7CisgICAgICAgIERMX0VSUigiY291bGRuJ3QgbWFwIFwiJXNcIiBzZWdtZW50ICVkOiAlcyIsIG5hbWVfLCBpLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICB9CisgICAgfQorCisgICAgLy8gaWYgdGhlIHNlZ21lbnQgaXMgd3JpdGFibGUsIGFuZCBkb2VzIG5vdCBlbmQgb24gYSBwYWdlIGJvdW5kYXJ5LAorICAgIC8vIHplcm8tZmlsbCBpdCB1bnRpbCB0aGUgcGFnZSBsaW1pdC4KKyAgICBpZiAoKHBoZHItPnBfZmxhZ3MgJiBQRl9XKSAhPSAwICYmIFBBR0VfT0ZGU0VUKHNlZ19maWxlX2VuZCkgPiAwKSB7CisgICAgICBtZW1zZXQoKHZvaWQqKXNlZ19maWxlX2VuZCwgMCwgUEFHRV9TSVpFIC0gUEFHRV9PRkZTRVQoc2VnX2ZpbGVfZW5kKSk7CisgICAgfQorCisgICAgc2VnX2ZpbGVfZW5kID0gUEFHRV9FTkQoc2VnX2ZpbGVfZW5kKTsKKworICAgIC8vIHNlZ19maWxlX2VuZCBpcyBub3cgdGhlIGZpcnN0IHBhZ2UgYWRkcmVzcyBhZnRlciB0aGUgZmlsZQorICAgIC8vIGNvbnRlbnQuIElmIHNlZ19lbmQgaXMgbGFyZ2VyLCB3ZSBuZWVkIHRvIHplcm8gYW55dGhpbmcKKyAgICAvLyBiZXR3ZWVuIHRoZW0uIFRoaXMgaXMgZG9uZSBieSB1c2luZyBhIHByaXZhdGUgYW5vbnltb3VzCisgICAgLy8gbWFwIGZvciBhbGwgZXh0cmEgcGFnZXMuCisgICAgaWYgKHNlZ19wYWdlX2VuZCA+IHNlZ19maWxlX2VuZCkgeworICAgICAgdm9pZCogemVyb21hcCA9IG1tYXAoKHZvaWQqKXNlZ19maWxlX2VuZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlZ19wYWdlX2VuZCAtIHNlZ19maWxlX2VuZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFBGTEFHU19UT19QUk9UKHBoZHItPnBfZmxhZ3MpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgTUFQX0ZJWEVEfE1BUF9BTk9OWU1PVVN8TUFQX1BSSVZBVEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAtMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDApOworICAgICAgaWYgKHplcm9tYXAgPT0gTUFQX0ZBSUxFRCkgeworICAgICAgICBETF9FUlIoImNvdWxkbid0IHplcm8gZmlsbCBcIiVzXCIgZ2FwOiAlcyIsIG5hbWVfLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICB9CisgICAgfQorICB9CisgIHJldHVybiB0cnVlOworfQorCisvKiBVc2VkIGludGVybmFsbHkuIFVzZWQgdG8gc2V0IHRoZSBwcm90ZWN0aW9uIGJpdHMgb2YgYWxsIGxvYWRlZCBzZWdtZW50cworICogd2l0aCBvcHRpb25hbCBleHRyYSBmbGFncyAoaS5lLiByZWFsbHkgUFJPVF9XUklURSkuIFVzZWQgYnkKKyAqIHBoZHJfdGFibGVfcHJvdGVjdF9zZWdtZW50cyBhbmQgcGhkcl90YWJsZV91bnByb3RlY3Rfc2VnbWVudHMuCisgKi8KK3N0YXRpYyBpbnQKK19waGRyX3RhYmxlX3NldF9sb2FkX3Byb3QoY29uc3QgRWxmMzJfUGhkciogcGhkcl90YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICAgICAgICAgICAgICAgcGhkcl9jb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgRWxmMzJfQWRkciAgICAgICAgbG9hZF9iaWFzLAorICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgICAgICAgICAgICAgICBleHRyYV9wcm90X2ZsYWdzKQoreworICAgIGNvbnN0IEVsZjMyX1BoZHIqIHBoZHIgPSBwaGRyX3RhYmxlOworICAgIGNvbnN0IEVsZjMyX1BoZHIqIHBoZHJfbGltaXQgPSBwaGRyICsgcGhkcl9jb3VudDsKKworICAgIGZvciAoOyBwaGRyIDwgcGhkcl9saW1pdDsgcGhkcisrKSB7CisgICAgICAgIGlmIChwaGRyLT5wX3R5cGUgIT0gUFRfTE9BRCB8fCAocGhkci0+cF9mbGFncyAmIFBGX1cpICE9IDApCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBFbGYzMl9BZGRyIHNlZ19wYWdlX3N0YXJ0ID0gUEFHRV9TVEFSVChwaGRyLT5wX3ZhZGRyKSArIGxvYWRfYmlhczsKKyAgICAgICAgRWxmMzJfQWRkciBzZWdfcGFnZV9lbmQgICA9IFBBR0VfRU5EKHBoZHItPnBfdmFkZHIgKyBwaGRyLT5wX21lbXN6KSArIGxvYWRfYmlhczsKKworICAgICAgICBpbnQgcmV0ID0gbXByb3RlY3QoKHZvaWQqKXNlZ19wYWdlX3N0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VnX3BhZ2VfZW5kIC0gc2VnX3BhZ2Vfc3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBQRkxBR1NfVE9fUFJPVChwaGRyLT5wX2ZsYWdzKSB8IGV4dHJhX3Byb3RfZmxhZ3MpOworICAgICAgICBpZiAocmV0IDwgMCkgeworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiAwOworfQorCisvKiBSZXN0b3JlIHRoZSBvcmlnaW5hbCBwcm90ZWN0aW9uIG1vZGVzIGZvciBhbGwgbG9hZGFibGUgc2VnbWVudHMuCisgKiBZb3Ugc2hvdWxkIG9ubHkgY2FsbCB0aGlzIGFmdGVyIHBoZHJfdGFibGVfdW5wcm90ZWN0X3NlZ21lbnRzIGFuZAorICogYXBwbHlpbmcgYWxsIHJlbG9jYXRpb25zLgorICoKKyAqIElucHV0OgorICogICBwaGRyX3RhYmxlICAtPiBwcm9ncmFtIGhlYWRlciB0YWJsZQorICogICBwaGRyX2NvdW50ICAtPiBudW1iZXIgb2YgZW50cmllcyBpbiB0YWJsZXMKKyAqICAgbG9hZF9iaWFzICAgLT4gbG9hZCBiaWFzCisgKiBSZXR1cm46CisgKiAgIDAgb24gZXJyb3IsIC0xIG9uIGZhaWx1cmUgKGVycm9yIGNvZGUgaW4gZXJybm8pLgorICovCitpbnQKK3BoZHJfdGFibGVfcHJvdGVjdF9zZWdtZW50cyhjb25zdCBFbGYzMl9QaGRyKiBwaGRyX3RhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAgICAgICAgICAgICAgIHBoZHJfY291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRWxmMzJfQWRkciAgICAgICAgbG9hZF9iaWFzKQoreworICAgIHJldHVybiBfcGhkcl90YWJsZV9zZXRfbG9hZF9wcm90KHBoZHJfdGFibGUsIHBoZHJfY291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRfYmlhcywgMCk7Cit9CisKKy8qIENoYW5nZSB0aGUgcHJvdGVjdGlvbiBvZiBhbGwgbG9hZGVkIHNlZ21lbnRzIGluIG1lbW9yeSB0byB3cml0YWJsZS4KKyAqIFRoaXMgaXMgdXNlZnVsIGJlZm9yZSBwZXJmb3JtaW5nIHJlbG9jYXRpb25zLiBPbmNlIGNvbXBsZXRlZCwgeW91CisgKiB3aWxsIGhhdmUgdG8gY2FsbCBwaGRyX3RhYmxlX3Byb3RlY3Rfc2VnbWVudHMgdG8gcmVzdG9yZSB0aGUgb3JpZ2luYWwKKyAqIHByb3RlY3Rpb24gZmxhZ3Mgb24gYWxsIHNlZ21lbnRzLgorICoKKyAqIE5vdGUgdGhhdCBzb21lIHdyaXRhYmxlIHNlZ21lbnRzIGNhbiBhbHNvIGhhdmUgdGhlaXIgY29udGVudCB0dXJuZWQKKyAqIHRvIHJlYWQtb25seSBieSBjYWxsaW5nIHBoZHJfdGFibGVfcHJvdGVjdF9nbnVfcmVscm8uIFRoaXMgaXMgbm8KKyAqIHBlcmZvcm1lZCBoZXJlLgorICoKKyAqIElucHV0OgorICogICBwaGRyX3RhYmxlICAtPiBwcm9ncmFtIGhlYWRlciB0YWJsZQorICogICBwaGRyX2NvdW50ICAtPiBudW1iZXIgb2YgZW50cmllcyBpbiB0YWJsZXMKKyAqICAgbG9hZF9iaWFzICAgLT4gbG9hZCBiaWFzCisgKiBSZXR1cm46CisgKiAgIDAgb24gZXJyb3IsIC0xIG9uIGZhaWx1cmUgKGVycm9yIGNvZGUgaW4gZXJybm8pLgorICovCitpbnQKK3BoZHJfdGFibGVfdW5wcm90ZWN0X3NlZ21lbnRzKGNvbnN0IEVsZjMyX1BoZHIqIHBoZHJfdGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgICAgICAgICAgICAgICBwaGRyX2NvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRWxmMzJfQWRkciAgICAgICAgbG9hZF9iaWFzKQoreworICAgIHJldHVybiBfcGhkcl90YWJsZV9zZXRfbG9hZF9wcm90KHBoZHJfdGFibGUsIHBoZHJfY291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRfYmlhcywgUFJPVF9XUklURSk7Cit9CisKKy8qIFVzZWQgaW50ZXJuYWxseSBieSBwaGRyX3RhYmxlX3Byb3RlY3RfZ251X3JlbHJvIGFuZAorICogcGhkcl90YWJsZV91bnByb3RlY3RfZ251X3JlbHJvLgorICovCitzdGF0aWMgaW50CitfcGhkcl90YWJsZV9zZXRfZ251X3JlbHJvX3Byb3QoY29uc3QgRWxmMzJfUGhkciogcGhkcl90YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgICAgICAgICAgICAgICBwaGRyX2NvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVsZjMyX0FkZHIgICAgICAgIGxvYWRfYmlhcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgICAgICAgICAgICAgICBwcm90X2ZsYWdzKQoreworICAgIGNvbnN0IEVsZjMyX1BoZHIqIHBoZHIgPSBwaGRyX3RhYmxlOworICAgIGNvbnN0IEVsZjMyX1BoZHIqIHBoZHJfbGltaXQgPSBwaGRyICsgcGhkcl9jb3VudDsKKworICAgIGZvciAocGhkciA9IHBoZHJfdGFibGU7IHBoZHIgPCBwaGRyX2xpbWl0OyBwaGRyKyspIHsKKyAgICAgICAgaWYgKHBoZHItPnBfdHlwZSAhPSBQVF9HTlVfUkVMUk8pCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAvKiBUcmlja3k6IHdoYXQgaGFwcGVucyB3aGVuIHRoZSByZWxybyBzZWdtZW50IGRvZXMgbm90IHN0YXJ0CisgICAgICAgICAqIG9yIGVuZCBhdCBwYWdlIGJvdW5kYXJpZXM/LiBXZSdyZSBnb2luZyB0byBiZSBvdmVyLXByb3RlY3RpdmUKKyAgICAgICAgICogaGVyZSBhbmQgcHV0IGV2ZXJ5IHBhZ2UgdG91Y2hlZCBieSB0aGUgc2VnbWVudCBhcyByZWFkLW9ubHkuCisgICAgICAgICAqCisgICAgICAgICAqIFRoaXMgc2VlbXMgdG8gbWF0Y2ggSWFuIExhbmNlIFRheWxvcidzIGRlc2NyaXB0aW9uIG9mIHRoZQorICAgICAgICAgKiBmZWF0dXJlIGF0IGh0dHA6Ly93d3cuYWlycy5jb20vYmxvZy9hcmNoaXZlcy8xODkuCisgICAgICAgICAqCisgICAgICAgICAqIEV4dHJhY3Q6CisgICAgICAgICAqICAgIE5vdGUgdGhhdCB0aGUgY3VycmVudCBkeW5hbWljIGxpbmtlciBjb2RlIHdpbGwgb25seSB3b3JrCisgICAgICAgICAqICAgIGNvcnJlY3RseSBpZiB0aGUgUFRfR05VX1JFTFJPIHNlZ21lbnQgc3RhcnRzIG9uIGEgcGFnZQorICAgICAgICAgKiAgICBib3VuZGFyeS4gVGhpcyBpcyBiZWNhdXNlIHRoZSBkeW5hbWljIGxpbmtlciByb3VuZHMgdGhlCisgICAgICAgICAqICAgIHBfdmFkZHIgZmllbGQgZG93biB0byB0aGUgcHJldmlvdXMgcGFnZSBib3VuZGFyeS4gSWYKKyAgICAgICAgICogICAgdGhlcmUgaXMgYW55dGhpbmcgb24gdGhlIHBhZ2Ugd2hpY2ggc2hvdWxkIG5vdCBiZSByZWFkLW9ubHksCisgICAgICAgICAqICAgIHRoZSBwcm9ncmFtIGlzIGxpa2VseSB0byBmYWlsIGF0IHJ1bnRpbWUuIFNvIGluIGVmZmVjdCB0aGUKKyAgICAgICAgICogICAgbGlua2VyIG11c3Qgb25seSBlbWl0IGEgUFRfR05VX1JFTFJPIHNlZ21lbnQgaWYgaXQgZW5zdXJlcworICAgICAgICAgKiAgICB0aGF0IGl0IHN0YXJ0cyBvbiBhIHBhZ2UgYm91bmRhcnkuCisgICAgICAgICAqLworICAgICAgICBFbGYzMl9BZGRyIHNlZ19wYWdlX3N0YXJ0ID0gUEFHRV9TVEFSVChwaGRyLT5wX3ZhZGRyKSArIGxvYWRfYmlhczsKKyAgICAgICAgRWxmMzJfQWRkciBzZWdfcGFnZV9lbmQgICA9IFBBR0VfRU5EKHBoZHItPnBfdmFkZHIgKyBwaGRyLT5wX21lbXN6KSArIGxvYWRfYmlhczsKKworICAgICAgICBpbnQgcmV0ID0gbXByb3RlY3QoKHZvaWQqKXNlZ19wYWdlX3N0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VnX3BhZ2VfZW5kIC0gc2VnX3BhZ2Vfc3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm90X2ZsYWdzKTsKKyAgICAgICAgaWYgKHJldCA8IDApIHsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gMDsKK30KKworLyogQXBwbHkgR05VIHJlbHJvIHByb3RlY3Rpb24gaWYgc3BlY2lmaWVkIGJ5IHRoZSBwcm9ncmFtIGhlYWRlci4gVGhpcyB3aWxsCisgKiB0dXJuIHNvbWUgb2YgdGhlIHBhZ2VzIG9mIGEgd3JpdGFibGUgUFRfTE9BRCBzZWdtZW50IHRvIHJlYWQtb25seSwgYXMKKyAqIHNwZWNpZmllZCBieSBvbmUgb3IgbW9yZSBQVF9HTlVfUkVMUk8gc2VnbWVudHMuIFRoaXMgbXVzdCBiZSBhbHdheXMKKyAqIHBlcmZvcm1lZCBhZnRlciByZWxvY2F0aW9ucy4KKyAqCisgKiBUaGUgYXJlYXMgdHlwaWNhbGx5IGNvdmVyZWQgYXJlIC5nb3QgYW5kIC5kYXRhLnJlbC5ybywgdGhlc2UgYXJlCisgKiByZWFkLW9ubHkgZnJvbSB0aGUgcHJvZ3JhbSdzIFBPViwgYnV0IGNvbnRhaW4gYWJzb2x1dGUgYWRkcmVzc2VzCisgKiB0aGF0IG5lZWQgdG8gYmUgcmVsb2NhdGVkIGJlZm9yZSB1c2UuCisgKgorICogSW5wdXQ6CisgKiAgIHBoZHJfdGFibGUgIC0+IHByb2dyYW0gaGVhZGVyIHRhYmxlCisgKiAgIHBoZHJfY291bnQgIC0+IG51bWJlciBvZiBlbnRyaWVzIGluIHRhYmxlcworICogICBsb2FkX2JpYXMgICAtPiBsb2FkIGJpYXMKKyAqIFJldHVybjoKKyAqICAgMCBvbiBlcnJvciwgLTEgb24gZmFpbHVyZSAoZXJyb3IgY29kZSBpbiBlcnJubykuCisgKi8KK2ludAorcGhkcl90YWJsZV9wcm90ZWN0X2dudV9yZWxybyhjb25zdCBFbGYzMl9QaGRyKiBwaGRyX3RhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgICAgICAgICAgICAgICBwaGRyX2NvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbGYzMl9BZGRyICAgICAgICBsb2FkX2JpYXMpCit7CisgICAgcmV0dXJuIF9waGRyX3RhYmxlX3NldF9nbnVfcmVscm9fcHJvdChwaGRyX3RhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGhkcl9jb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRfYmlhcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBST1RfUkVBRCk7Cit9CisKKyNpZmRlZiBBTkRST0lEX0FSTV9MSU5LRVIKKworIyAgaWZuZGVmIFBUX0FSTV9FWElEWAorIyAgICBkZWZpbmUgUFRfQVJNX0VYSURYICAgIDB4NzAwMDAwMDEgICAgICAvKiAuQVJNLmV4aWR4IHNlZ21lbnQgKi8KKyMgIGVuZGlmCisKKy8qIFJldHVybiB0aGUgYWRkcmVzcyBhbmQgc2l6ZSBvZiB0aGUgLkFSTS5leGlkeCBzZWN0aW9uIGluIG1lbW9yeSwKKyAqIGlmIHByZXNlbnQuCisgKgorICogSW5wdXQ6CisgKiAgIHBoZHJfdGFibGUgIC0+IHByb2dyYW0gaGVhZGVyIHRhYmxlCisgKiAgIHBoZHJfY291bnQgIC0+IG51bWJlciBvZiBlbnRyaWVzIGluIHRhYmxlcworICogICBsb2FkX2JpYXMgICAtPiBsb2FkIGJpYXMKKyAqIE91dHB1dDoKKyAqICAgYXJtX2V4aWR4ICAgICAgIC0+IGFkZHJlc3Mgb2YgdGFibGUgaW4gbWVtb3J5IChOVUxMIG9uIGZhaWx1cmUpLgorICogICBhcm1fZXhpZHhfY291bnQgLT4gbnVtYmVyIG9mIGl0ZW1zIGluIHRhYmxlICgwIG9uIGZhaWx1cmUpLgorICogUmV0dXJuOgorICogICAwIG9uIGVycm9yLCAtMSBvbiBmYWlsdXJlIChfbm9fIGVycm9yIGNvZGUgaW4gZXJybm8pCisgKi8KK2ludAorcGhkcl90YWJsZV9nZXRfYXJtX2V4aWR4KGNvbnN0IEVsZjMyX1BoZHIqIHBoZHJfdGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICAgICAgICAgICAgICAgcGhkcl9jb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBFbGYzMl9BZGRyICAgICAgICBsb2FkX2JpYXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgRWxmMzJfQWRkcioqICAgICAgYXJtX2V4aWR4LAorICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkKiAgICAgICAgIGFybV9leGlkeF9jb3VudCkKK3sKKyAgICBjb25zdCBFbGYzMl9QaGRyKiBwaGRyID0gcGhkcl90YWJsZTsKKyAgICBjb25zdCBFbGYzMl9QaGRyKiBwaGRyX2xpbWl0ID0gcGhkciArIHBoZHJfY291bnQ7CisKKyAgICBmb3IgKHBoZHIgPSBwaGRyX3RhYmxlOyBwaGRyIDwgcGhkcl9saW1pdDsgcGhkcisrKSB7CisgICAgICAgIGlmIChwaGRyLT5wX3R5cGUgIT0gUFRfQVJNX0VYSURYKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgKmFybV9leGlkeCA9IChFbGYzMl9BZGRyKikobG9hZF9iaWFzICsgcGhkci0+cF92YWRkcik7CisgICAgICAgICphcm1fZXhpZHhfY291bnQgPSAodW5zaWduZWQpKHBoZHItPnBfbWVtc3ogLyA4KTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgICphcm1fZXhpZHggPSBOVUxMOworICAgICphcm1fZXhpZHhfY291bnQgPSAwOworICAgIHJldHVybiAtMTsKK30KKyNlbmRpZiAvKiBBTkRST0lEX0FSTV9MSU5LRVIgKi8KKworLyogUmV0dXJuIHRoZSBhZGRyZXNzIGFuZCBzaXplIG9mIHRoZSBFTEYgZmlsZSdzIC5keW5hbWljIHNlY3Rpb24gaW4gbWVtb3J5LAorICogb3IgTlVMTCBpZiBtaXNzaW5nLgorICoKKyAqIElucHV0OgorICogICBwaGRyX3RhYmxlICAtPiBwcm9ncmFtIGhlYWRlciB0YWJsZQorICogICBwaGRyX2NvdW50ICAtPiBudW1iZXIgb2YgZW50cmllcyBpbiB0YWJsZXMKKyAqICAgbG9hZF9iaWFzICAgLT4gbG9hZCBiaWFzCisgKiBPdXRwdXQ6CisgKiAgIGR5bmFtaWMgICAgICAgLT4gYWRkcmVzcyBvZiB0YWJsZSBpbiBtZW1vcnkgKE5VTEwgb24gZmFpbHVyZSkuCisgKiAgIGR5bmFtaWNfY291bnQgLT4gbnVtYmVyIG9mIGl0ZW1zIGluIHRhYmxlICgwIG9uIGZhaWx1cmUpLgorICogICBkeW5hbWljX2ZsYWdzIC0+IHByb3RlY3Rpb24gZmxhZ3MgZm9yIHNlY3Rpb24gKHVuc2V0IG9uIGZhaWx1cmUpCisgKiBSZXR1cm46CisgKiAgIHZvaWQKKyAqLwordm9pZAorcGhkcl90YWJsZV9nZXRfZHluYW1pY19zZWN0aW9uKGNvbnN0IEVsZjMyX1BoZHIqIHBoZHJfdGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICAgICAgICAgICAgICAgcGhkcl9jb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbGYzMl9BZGRyICAgICAgICBsb2FkX2JpYXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRWxmMzJfRHluKiogICAgICAgZHluYW1pYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QqICAgICAgICAgICBkeW5hbWljX2NvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVsZjMyX1dvcmQqICAgICAgIGR5bmFtaWNfZmxhZ3MpCit7CisgICAgY29uc3QgRWxmMzJfUGhkciogcGhkciA9IHBoZHJfdGFibGU7CisgICAgY29uc3QgRWxmMzJfUGhkciogcGhkcl9saW1pdCA9IHBoZHIgKyBwaGRyX2NvdW50OworCisgICAgZm9yIChwaGRyID0gcGhkcl90YWJsZTsgcGhkciA8IHBoZHJfbGltaXQ7IHBoZHIrKykgeworICAgICAgICBpZiAocGhkci0+cF90eXBlICE9IFBUX0RZTkFNSUMpIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgKmR5bmFtaWMgPSByZWludGVycHJldF9jYXN0PEVsZjMyX0R5bio+KGxvYWRfYmlhcyArIHBoZHItPnBfdmFkZHIpOworICAgICAgICBpZiAoZHluYW1pY19jb3VudCkgeworICAgICAgICAgICAgKmR5bmFtaWNfY291bnQgPSAodW5zaWduZWQpKHBoZHItPnBfbWVtc3ogLyA4KTsKKyAgICAgICAgfQorICAgICAgICBpZiAoZHluYW1pY19mbGFncykgeworICAgICAgICAgICAgKmR5bmFtaWNfZmxhZ3MgPSBwaGRyLT5wX2ZsYWdzOworICAgICAgICB9CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgKmR5bmFtaWMgPSBOVUxMOworICAgIGlmIChkeW5hbWljX2NvdW50KSB7CisgICAgICAgICpkeW5hbWljX2NvdW50ID0gMDsKKyAgICB9Cit9CisKKy8vIFJldHVybnMgdGhlIGFkZHJlc3Mgb2YgdGhlIHByb2dyYW0gaGVhZGVyIHRhYmxlIGFzIGl0IGFwcGVhcnMgaW4gdGhlIGxvYWRlZAorLy8gc2VnbWVudHMgaW4gbWVtb3J5LiBUaGlzIGlzIGluIGNvbnRyYXN0IHdpdGggJ3BoZHJfdGFibGVfJyB3aGljaAorLy8gaXMgdGVtcG9yYXJ5IGFuZCB3aWxsIGJlIHJlbGVhc2VkIGJlZm9yZSB0aGUgbGlicmFyeSBpcyByZWxvY2F0ZWQuCitib29sIEVsZlJlYWRlcjo6RmluZFBoZHIoKSB7CisgIGNvbnN0IEVsZjMyX1BoZHIqIHBoZHJfbGltaXQgPSBwaGRyX3RhYmxlXyArIHBoZHJfbnVtXzsKKworICAvLyBJZiB0aGVyZSBpcyBhIFBUX1BIRFIsIHVzZSBpdCBkaXJlY3RseS4KKyAgZm9yIChjb25zdCBFbGYzMl9QaGRyKiBwaGRyID0gcGhkcl90YWJsZV87IHBoZHIgPCBwaGRyX2xpbWl0OyArK3BoZHIpIHsKKyAgICBpZiAocGhkci0+cF90eXBlID09IFBUX1BIRFIpIHsKKyAgICAgIHJldHVybiBDaGVja1BoZHIobG9hZF9iaWFzXyArIHBoZHItPnBfdmFkZHIpOworICAgIH0KKyAgfQorCisgIC8vIE90aGVyd2lzZSwgY2hlY2sgdGhlIGZpcnN0IGxvYWRhYmxlIHNlZ21lbnQuIElmIGl0cyBmaWxlIG9mZnNldAorICAvLyBpcyAwLCBpdCBzdGFydHMgd2l0aCB0aGUgRUxGIGhlYWRlciwgYW5kIHdlIGNhbiB0cml2aWFsbHkgZmluZCB0aGUKKyAgLy8gbG9hZGVkIHByb2dyYW0gaGVhZGVyIGZyb20gaXQuCisgIGZvciAoY29uc3QgRWxmMzJfUGhkciogcGhkciA9IHBoZHJfdGFibGVfOyBwaGRyIDwgcGhkcl9saW1pdDsgKytwaGRyKSB7CisgICAgaWYgKHBoZHItPnBfdHlwZSA9PSBQVF9MT0FEKSB7CisgICAgICBpZiAocGhkci0+cF9vZmZzZXQgPT0gMCkgeworICAgICAgICBFbGYzMl9BZGRyICBlbGZfYWRkciA9IGxvYWRfYmlhc18gKyBwaGRyLT5wX3ZhZGRyOworICAgICAgICBjb25zdCBFbGYzMl9FaGRyKiBlaGRyID0gKGNvbnN0IEVsZjMyX0VoZHIqKSh2b2lkKillbGZfYWRkcjsKKyAgICAgICAgRWxmMzJfQWRkciAgb2Zmc2V0ID0gZWhkci0+ZV9waG9mZjsKKyAgICAgICAgcmV0dXJuIENoZWNrUGhkcigoRWxmMzJfQWRkcillaGRyICsgb2Zmc2V0KTsKKyAgICAgIH0KKyAgICAgIGJyZWFrOworICAgIH0KKyAgfQorCisgIERMX0VSUigiY2FuJ3QgZmluZCBsb2FkZWQgcGhkciBmb3IgXCIlc1wiIiwgbmFtZV8pOworICByZXR1cm4gZmFsc2U7Cit9CisKKy8vIEVuc3VyZXMgdGhhdCBvdXIgcHJvZ3JhbSBoZWFkZXIgaXMgYWN0dWFsbHkgd2l0aGluIGEgbG9hZGFibGUKKy8vIHNlZ21lbnQuIFRoaXMgc2hvdWxkIGhlbHAgY2F0Y2ggYmFkbHktZm9ybWVkIEVMRiBmaWxlcyB0aGF0CisvLyB3b3VsZCBjYXVzZSB0aGUgbGlua2VyIHRvIGNyYXNoIGxhdGVyIHdoZW4gdHJ5aW5nIHRvIGFjY2VzcyBpdC4KK2Jvb2wgRWxmUmVhZGVyOjpDaGVja1BoZHIoRWxmMzJfQWRkciBsb2FkZWQpIHsKKyAgY29uc3QgRWxmMzJfUGhkciogcGhkcl9saW1pdCA9IHBoZHJfdGFibGVfICsgcGhkcl9udW1fOworICBFbGYzMl9BZGRyIGxvYWRlZF9lbmQgPSBsb2FkZWQgKyAocGhkcl9udW1fICogc2l6ZW9mKEVsZjMyX1BoZHIpKTsKKyAgZm9yIChFbGYzMl9QaGRyKiBwaGRyID0gcGhkcl90YWJsZV87IHBoZHIgPCBwaGRyX2xpbWl0OyArK3BoZHIpIHsKKyAgICBpZiAocGhkci0+cF90eXBlICE9IFBUX0xPQUQpIHsKKyAgICAgIGNvbnRpbnVlOworICAgIH0KKyAgICBFbGYzMl9BZGRyIHNlZ19zdGFydCA9IHBoZHItPnBfdmFkZHIgKyBsb2FkX2JpYXNfOworICAgIEVsZjMyX0FkZHIgc2VnX2VuZCA9IHBoZHItPnBfZmlsZXN6ICsgc2VnX3N0YXJ0OworICAgIGlmIChzZWdfc3RhcnQgPD0gbG9hZGVkICYmIGxvYWRlZF9lbmQgPD0gc2VnX2VuZCkgeworICAgICAgbG9hZGVkX3BoZHJfID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBFbGYzMl9QaGRyKj4obG9hZGVkKTsKKyAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgfQorICBETF9FUlIoIlwiJXNcIiBsb2FkZWQgcGhkciAleCBub3QgaW4gbG9hZGFibGUgc2VnbWVudCIsIG5hbWVfLCBsb2FkZWQpOworICByZXR1cm4gZmFsc2U7Cit9CmRpZmYgLS1naXQgYS9saW5rZXIvbGlua2VyX3BoZHIuaCBiL2xpbmtlci9saW5rZXJfcGhkci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5MmQ5NWUKLS0tIC9kZXYvbnVsbAorKysgYi9saW5rZXIvbGlua2VyX3BoZHIuaApAQCAtMCwwICsxLDEyMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworI2lmbmRlZiBMSU5LRVJfUEhEUl9ICisjZGVmaW5lIExJTktFUl9QSERSX0gKKworLyogRGVjbGFyYXRpb25zIHJlbGF0ZWQgdG8gdGhlIEVMRiBwcm9ncmFtIGhlYWRlciB0YWJsZSBhbmQgc2VnbWVudHMuCisgKgorICogVGhlIGRlc2lnbiBnb2FsIGlzIHRvIHByb3ZpZGUgYW4gQVBJIHRoYXQgaXMgYXMgY2xvc2UgYXMgcG9zc2libGUKKyAqIHRvIHRoZSBFTEYgc3BlYywgYW5kIGRvZXMgbm90IGRlcGVuZCBvbiBsaW5rZXItc3BlY2lmaWMgZGF0YQorICogc3RydWN0dXJlcyAoZS5nLiB0aGUgZXhhY3QgbGF5b3V0IG9mIHN0cnVjdCBzb2luZm8pLgorICovCisKKyNpbmNsdWRlICJsaW5rZXIuaCIKKworY2xhc3MgRWxmUmVhZGVyIHsKKyBwdWJsaWM6CisgIEVsZlJlYWRlcihjb25zdCBjaGFyKiBuYW1lLCBpbnQgZmQpOworICB+RWxmUmVhZGVyKCk7CisKKyAgYm9vbCBMb2FkKCk7CisKKyAgc2l6ZV90IHBoZHJfY291bnQoKSB7IHJldHVybiBwaGRyX251bV87IH0KKyAgRWxmMzJfQWRkciBsb2FkX3N0YXJ0KCkgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxFbGYzMl9BZGRyPihsb2FkX3N0YXJ0Xyk7IH0KKyAgRWxmMzJfQWRkciBsb2FkX3NpemUoKSB7IHJldHVybiBsb2FkX3NpemVfOyB9CisgIEVsZjMyX0FkZHIgbG9hZF9iaWFzKCkgeyByZXR1cm4gbG9hZF9iaWFzXzsgfQorICBjb25zdCBFbGYzMl9QaGRyKiBsb2FkZWRfcGhkcigpIHsgcmV0dXJuIGxvYWRlZF9waGRyXzsgfQorCisgcHJpdmF0ZToKKyAgYm9vbCBSZWFkRWxmSGVhZGVyKCk7CisgIGJvb2wgVmVyaWZ5RWxmSGVhZGVyKCk7CisgIGJvb2wgUmVhZFByb2dyYW1IZWFkZXIoKTsKKyAgYm9vbCBSZXNlcnZlQWRkcmVzc1NwYWNlKCk7CisgIGJvb2wgTG9hZFNlZ21lbnRzKCk7CisgIGJvb2wgRmluZFBoZHIoKTsKKyAgYm9vbCBDaGVja1BoZHIoRWxmMzJfQWRkcik7CisKKyAgY29uc3QgY2hhciogbmFtZV87CisgIGludCBmZF87CisKKyAgRWxmMzJfRWhkciBoZWFkZXJfOworICBzaXplX3QgcGhkcl9udW1fOworCisgIHZvaWQqIHBoZHJfbW1hcF87CisgIEVsZjMyX1BoZHIqIHBoZHJfdGFibGVfOworICBFbGYzMl9BZGRyIHBoZHJfc2l6ZV87CisKKyAgLy8gRmlyc3QgcGFnZSBvZiByZXNlcnZlZCBhZGRyZXNzIHNwYWNlLgorICB2b2lkKiBsb2FkX3N0YXJ0XzsKKyAgLy8gU2l6ZSBpbiBieXRlcyBvZiByZXNlcnZlZCBhZGRyZXNzIHNwYWNlLgorICBFbGYzMl9BZGRyIGxvYWRfc2l6ZV87CisgIC8vIExvYWQgYmlhcy4KKyAgRWxmMzJfQWRkciBsb2FkX2JpYXNfOworCisgIC8vIExvYWRlZCBwaGRyLgorICBjb25zdCBFbGYzMl9QaGRyKiBsb2FkZWRfcGhkcl87Cit9OworCitzaXplX3QKK3BoZHJfdGFibGVfZ2V0X2xvYWRfc2l6ZShjb25zdCBFbGYzMl9QaGRyKiBwaGRyX3RhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBwaGRyX2NvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgIEVsZjMyX0FkZHIqIG1pbl92YWRkciA9IE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgRWxmMzJfQWRkciogbWF4X3ZhZGRyID0gTlVMTCk7CisKK2ludAorcGhkcl90YWJsZV9wcm90ZWN0X3NlZ21lbnRzKGNvbnN0IEVsZjMyX1BoZHIqIHBoZHJfdGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICAgICAgICAgICAgICAgcGhkcl9jb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbGYzMl9BZGRyICAgICAgICBsb2FkX2JpYXMpOworCitpbnQKK3BoZHJfdGFibGVfdW5wcm90ZWN0X3NlZ21lbnRzKGNvbnN0IEVsZjMyX1BoZHIqIHBoZHJfdGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgICAgICAgICAgICAgICBwaGRyX2NvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRWxmMzJfQWRkciAgICAgICAgbG9hZF9iaWFzKTsKKworaW50CitwaGRyX3RhYmxlX3Byb3RlY3RfZ251X3JlbHJvKGNvbnN0IEVsZjMyX1BoZHIqIHBoZHJfdGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAgICAgICAgICAgICAgIHBoZHJfY291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVsZjMyX0FkZHIgICAgICAgIGxvYWRfYmlhcyk7CisKKworI2lmZGVmIEFORFJPSURfQVJNX0xJTktFUgoraW50CitwaGRyX3RhYmxlX2dldF9hcm1fZXhpZHgoY29uc3QgRWxmMzJfUGhkciogcGhkcl90YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgICAgICAgICAgICAgICBwaGRyX2NvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgIEVsZjMyX0FkZHIgICAgICAgIGxvYWRfYmlhcywKKyAgICAgICAgICAgICAgICAgICAgICAgICBFbGYzMl9BZGRyKiogICAgICBhcm1fZXhpZHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQqICAgICAgICAgYXJtX2V4aWRpeF9jb3VudCk7CisjZW5kaWYKKwordm9pZAorcGhkcl90YWJsZV9nZXRfZHluYW1pY19zZWN0aW9uKGNvbnN0IEVsZjMyX1BoZHIqIHBoZHJfdGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICAgICAgICAgICAgICAgcGhkcl9jb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbGYzMl9BZGRyICAgICAgICBsb2FkX2JpYXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRWxmMzJfRHluKiogICAgICAgZHluYW1pYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QqICAgICAgICAgICBkeW5hbWljX2NvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVsZjMyX1dvcmQqICAgICAgIGR5bmFtaWNfZmxhZ3MpOworCisjZW5kaWYgLyogTElOS0VSX1BIRFJfSCAqLwpkaWZmIC0tZ2l0IGEvbGlua2VyL3J0LmMgYi9saW5rZXIvcnQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzBkNWE0OC4uMDAwMDAwMAotLS0gYS9saW5rZXIvcnQuYworKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0gKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiAgICBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCi0gKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQotICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAotICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKLSAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUwotICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECi0gKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0gKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotLyoKLSAqIFRoaXMgZnVuY3Rpb24gaXMgYW4gZW1wdHkgc3R1YiB3aGVyZSBHREIgbG9jYXRlcyBhIGJyZWFrcG9pbnQgdG8gZ2V0IG5vdGlmaWVkCi0gKiBhYm91dCBsaW5rZXIgYWN0aXZpdHkuCi0gKi8KLXZvaWQgX19hdHRyaWJ1dGVfXygobm9pbmxpbmUpKSBydGxkX2RiX2RsYWN0aXZpdHkodm9pZCkKLXsKLX0KLQpkaWZmIC0tZ2l0IGEvbGlua2VyL3J0LmNwcCBiL2xpbmtlci9ydC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzEwODkyYQotLS0gL2Rldi9udWxsCisrKyBiL2xpbmtlci9ydC5jcHAKQEAgLTAsMCArMSwzNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisvKgorICogVGhpcyBmdW5jdGlvbiBpcyBhbiBlbXB0eSBzdHViIHdoZXJlIEdEQiBsb2NhdGVzIGEgYnJlYWtwb2ludCB0byBnZXQgbm90aWZpZWQKKyAqIGFib3V0IGxpbmtlciBhY3Rpdml0eS4gIEl0IGNhbsq8dCBiZSBpbmxpbmVkIGF3YXksIGNhbid0IGJlIGhpZGRlbi4KKyAqLworZXh0ZXJuICJDIiB2b2lkIF9fYXR0cmlidXRlX18oKG5vaW5saW5lKSkgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSkgcnRsZF9kYl9kbGFjdGl2aXR5KCkgeworfQorCmRpZmYgLS1naXQgYS90ZXN0cy9BbmRyb2lkLm1rIGIvdGVzdHMvQW5kcm9pZC5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZmVlMTdiCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvQW5kcm9pZC5tawpAQCAtMCwwICsxLDIxNyBAQAorIworIyBDb3B5cmlnaHQgKEMpIDIwMTIgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorIworIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyMKKworaWZuZXEgKCQoQlVJTERfVElOWV9BTkRST0lEKSwgdHJ1ZSkKKworTE9DQUxfUEFUSCA6PSAkKGNhbGwgbXktZGlyKQorCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEJlbmNobWFya3MuCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2JlbmNobWFya19jX2ZsYWdzID0gXAorICAgIC1PMiBcCisgICAgLVdhbGwgLVdleHRyYSBcCisgICAgLVdlcnJvciBcCisgICAgLWZuby1idWlsdGluIFwKKworYmVuY2htYXJrX3NyY19maWxlcyA9IFwKKyAgICBiZW5jaG1hcmtfbWFpbi5jcHAgXAorICAgIG1hdGhfYmVuY2htYXJrLmNwcCBcCisgICAgcHJvcGVydHlfYmVuY2htYXJrLmNwcCBcCisgICAgc3RyaW5nX2JlbmNobWFyay5jcHAgXAorICAgIHRpbWVfYmVuY2htYXJrLmNwcCBcCisKKyMgQnVpbGQgYmVuY2htYXJrcyBmb3IgdGhlIGRldmljZSAod2l0aCBiaW9uaWMncyAuc28pLiBSdW4gd2l0aDoKKyMgICBhZGIgc2hlbGwgYmlvbmljLWJlbmNobWFya3MKK2luY2x1ZGUgJChDTEVBUl9WQVJTKQorTE9DQUxfTU9EVUxFIDo9IGJpb25pYy1iZW5jaG1hcmtzCitMT0NBTF9BRERJVElPTkFMX0RFUEVOREVOQ0lFUyA6PSAkKExPQ0FMX1BBVEgpL0FuZHJvaWQubWsKK0xPQ0FMX0NGTEFHUyArPSAkKGJlbmNobWFya19jX2ZsYWdzKQorTE9DQUxfQ19JTkNMVURFUyArPSBleHRlcm5hbC9zdGxwb3J0L3N0bHBvcnQgYmlvbmljLyBiaW9uaWMvbGlic3RkYysrL2luY2x1ZGUKK0xPQ0FMX1NIQVJFRF9MSUJSQVJJRVMgKz0gbGlic3RscG9ydAorTE9DQUxfU1JDX0ZJTEVTIDo9ICQoYmVuY2htYXJrX3NyY19maWxlcykKK2luY2x1ZGUgJChCVUlMRF9FWEVDVVRBQkxFKQorCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFVuaXQgdGVzdHMuCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3Rlc3RfY19mbGFncyA9IFwKKyAgICAtZnN0YWNrLXByb3RlY3Rvci1hbGwgXAorICAgIC1nIFwKKyAgICAtV2FsbCAtV2V4dHJhIFwKKyAgICAtV2Vycm9yIFwKKyAgICAtZm5vLWJ1aWx0aW4gXAorCit0ZXN0X3NyY19maWxlcyA9IFwKKyAgICBkaXJlbnRfdGVzdC5jcHAgXAorICAgIGV2ZW50ZmRfdGVzdC5jcHAgXAorICAgIGZlbnZfdGVzdC5jcHAgXAorICAgIGdldGF1eHZhbF90ZXN0LmNwcCBcCisgICAgZ2V0Y3dkX3Rlc3QuY3BwIFwKKyAgICBpbnR0eXBlc190ZXN0LmNwcCBcCisgICAgbGliY19sb2dnaW5nX3Rlc3QuY3BwIFwKKyAgICBsaWJnZW5fdGVzdC5jcHAgXAorICAgIG1hbGxvY190ZXN0LmNwcCBcCisgICAgbWF0aF90ZXN0LmNwcCBcCisgICAgbmV0ZGJfdGVzdC5jcHAgXAorICAgIHB0aHJlYWRfdGVzdC5jcHAgXAorICAgIHJlZ2V4X3Rlc3QuY3BwIFwKKyAgICBzaWduYWxfdGVzdC5jcHAgXAorICAgIHN0YWNrX3Byb3RlY3Rvcl90ZXN0LmNwcCBcCisgICAgc3RhY2tfdW53aW5kaW5nX3Rlc3QuY3BwIFwKKyAgICBzdGF0dmZzX3Rlc3QuY3BwIFwKKyAgICBzdGRpb190ZXN0LmNwcCBcCisgICAgc3RkbGliX3Rlc3QuY3BwIFwKKyAgICBzdHJpbmdfdGVzdC5jcHAgXAorICAgIHN0cmluZ3NfdGVzdC5jcHAgXAorICAgIHN0dWJzX3Rlc3QuY3BwIFwKKyAgICBzeXN0ZW1fcHJvcGVydGllc190ZXN0LmNwcCBcCisgICAgdGltZV90ZXN0LmNwcCBcCisgICAgdW5pc3RkX3Rlc3QuY3BwIFwKKwordGVzdF9keW5hbWljX2xkZmxhZ3MgPSAtV2wsLS1leHBvcnQtZHluYW1pYyAtV2wsLXUsRGxTeW1UZXN0RnVuY3Rpb24KK3Rlc3RfZHluYW1pY19zcmNfZmlsZXMgPSBcCisgICAgZGxmY25fdGVzdC5jcHAgXAorCit0ZXN0X2ZvcnRpZnlfc3RhdGljX2xpYnJhcmllcyA9IFwKKyAgICBmb3J0aWZ5MS10ZXN0cy1nY2MgZm9ydGlmeTItdGVzdHMtZ2NjIGZvcnRpZnkxLXRlc3RzLWNsYW5nIGZvcnRpZnkyLXRlc3RzLWNsYW5nCisKK2luY2x1ZGUgJChDTEVBUl9WQVJTKQorTE9DQUxfTU9EVUxFIDo9IGJpb25pYy11bml0LXRlc3RzLXVud2luZC10ZXN0LWltcGwKK0xPQ0FMX0NGTEFHUyArPSAkKHRlc3RfY19mbGFncykgLWZleGNlcHRpb25zIC1mbm9uLWNhbGwtZXhjZXB0aW9ucworTE9DQUxfU1JDX0ZJTEVTIDo9IHN0YWNrX3Vud2luZGluZ190ZXN0X2ltcGwuYworaW5jbHVkZSAkKEJVSUxEX1NUQVRJQ19MSUJSQVJZKQorCitpbmNsdWRlICQoQ0xFQVJfVkFSUykKK0xPQ0FMX01PRFVMRSA6PSBiaW9uaWMtdW5pdC10ZXN0cy11bndpbmQtdGVzdC1pbXBsLWhvc3QKK0xPQ0FMX0NGTEFHUyArPSAkKHRlc3RfY19mbGFncykgLWZleGNlcHRpb25zIC1mbm9uLWNhbGwtZXhjZXB0aW9ucworTE9DQUxfU1JDX0ZJTEVTIDo9IHN0YWNrX3Vud2luZGluZ190ZXN0X2ltcGwuYworaW5jbHVkZSAkKEJVSUxEX0hPU1RfU1RBVElDX0xJQlJBUlkpCisKKyMgQnVpbGQgdGVzdHMgZm9yIHRoZSBkZXZpY2UgKHdpdGggYmlvbmljJ3MgLnNvKS4gUnVuIHdpdGg6CisjICAgYWRiIHNoZWxsIC9kYXRhL25hdGl2ZXRlc3QvYmlvbmljLXVuaXQtdGVzdHMvYmlvbmljLXVuaXQtdGVzdHMKK2luY2x1ZGUgJChDTEVBUl9WQVJTKQorTE9DQUxfTU9EVUxFIDo9IGJpb25pYy11bml0LXRlc3RzCitMT0NBTF9BRERJVElPTkFMX0RFUEVOREVOQ0lFUyA6PSAkKExPQ0FMX1BBVEgpL0FuZHJvaWQubWsKK0xPQ0FMX0NGTEFHUyArPSAkKHRlc3RfY19mbGFncykKK0xPQ0FMX0xERkxBR1MgKz0gJCh0ZXN0X2R5bmFtaWNfbGRmbGFncykKK0xPQ0FMX1NIQVJFRF9MSUJSQVJJRVMgKz0gbGliZGwKK0xPQ0FMX1NSQ19GSUxFUyA6PSAkKHRlc3Rfc3JjX2ZpbGVzKSAkKHRlc3RfZHluYW1pY19zcmNfZmlsZXMpCitMT0NBTF9XSE9MRV9TVEFUSUNfTElCUkFSSUVTIDo9ICQodGVzdF9mb3J0aWZ5X3N0YXRpY19saWJyYXJpZXMpCitMT0NBTF9TVEFUSUNfTElCUkFSSUVTICs9IGJpb25pYy11bml0LXRlc3RzLXVud2luZC10ZXN0LWltcGwKK2luY2x1ZGUgJChCVUlMRF9OQVRJVkVfVEVTVCkKKworIyBCdWlsZCB0ZXN0cyBmb3IgdGhlIGRldmljZSAod2l0aCBiaW9uaWMncyAuYSkuIFJ1biB3aXRoOgorIyAgIGFkYiBzaGVsbCAvZGF0YS9uYXRpdmV0ZXN0L2Jpb25pYy11bml0LXRlc3RzLXN0YXRpYy9iaW9uaWMtdW5pdC10ZXN0cy1zdGF0aWMKK2luY2x1ZGUgJChDTEVBUl9WQVJTKQorTE9DQUxfTU9EVUxFIDo9IGJpb25pYy11bml0LXRlc3RzLXN0YXRpYworTE9DQUxfQURESVRJT05BTF9ERVBFTkRFTkNJRVMgOj0gJChMT0NBTF9QQVRIKS9BbmRyb2lkLm1rCitMT0NBTF9DRkxBR1MgKz0gJCh0ZXN0X2NfZmxhZ3MpCitMT0NBTF9GT1JDRV9TVEFUSUNfRVhFQ1VUQUJMRSA6PSB0cnVlCitMT0NBTF9TUkNfRklMRVMgOj0gJCh0ZXN0X3NyY19maWxlcykKK0xPQ0FMX1NUQVRJQ19MSUJSQVJJRVMgKz0gbGlic3RscG9ydF9zdGF0aWMgbGlic3RkYysrIGxpYm0gbGliYyBiaW9uaWMtdW5pdC10ZXN0cy11bndpbmQtdGVzdC1pbXBsCitMT0NBTF9XSE9MRV9TVEFUSUNfTElCUkFSSUVTIDo9ICQodGVzdF9mb3J0aWZ5X3N0YXRpY19saWJyYXJpZXMpCitpbmNsdWRlICQoQlVJTERfTkFUSVZFX1RFU1QpCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVGVzdCBsaWJyYXJ5IGZvciB0aGUgdW5pdCB0ZXN0cy4KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIyBCdWlsZCBuby1lbGYtaGFzaC10YWJsZS1saWJyYXJ5LnNvIHRvIHRlc3QgZGxvcGVuKDMpIG9uIGEgbGlicmFyeSB0aGF0CisjIG9ubHkgaGFzIGEgR05VLXN0eWxlIGhhc2ggdGFibGUuIE1JUFMgZG9lc24ndCBzdXBwb3J0IEdOVSBoYXNoIHN0eWxlLgoraWZuZXEgKCQoVEFSR0VUX0FSQ0gpLG1pcHMpCitpbmNsdWRlICQoQ0xFQVJfVkFSUykKK0xPQ0FMX01PRFVMRSA6PSBuby1lbGYtaGFzaC10YWJsZS1saWJyYXJ5CitMT0NBTF9BRERJVElPTkFMX0RFUEVOREVOQ0lFUyA6PSAkKExPQ0FMX1BBVEgpL0FuZHJvaWQubWsKK0xPQ0FMX1NSQ19GSUxFUyA6PSBlbXB0eS5jcHAKK0xPQ0FMX0xERkxBR1MgOj0gLVdsLC0taGFzaC1zdHlsZT1nbnUKK2luY2x1ZGUgJChCVUlMRF9TSEFSRURfTElCUkFSWSkKK2VuZGlmCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVW5pdCB0ZXN0cyBidWlsdCBhZ2FpbnN0IGdsaWJjLgorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjIEJ1aWxkIHRlc3RzIGZvciB0aGUgaG9zdCAod2l0aCBnbGliYykuCisjIE5vdGUgdGhhdCB0aGlzIHdpbGwgYnVpbGQgYWdhaW5zdCBnbGliYywgc28gaXQncyBub3QgdXNlZnVsIGZvciB0ZXN0aW5nCisjIGJpb25pYydzIGltcGxlbWVudGF0aW9uLCBidXQgaXQgZG9lcyBsZXQgeW91IHVzZSBnbGliYyBhcyBhIHJlZmVyZW5jZQorIyBpbXBsZW1lbnRhdGlvbiBmb3IgdGVzdGluZyB0aGUgdGVzdHMgdGhlbXNlbHZlcy4KK2lmZXEgKCQoSE9TVF9PUyktJChIT1NUX0FSQ0gpLGxpbnV4LXg4NikKK2luY2x1ZGUgJChDTEVBUl9WQVJTKQorTE9DQUxfTU9EVUxFIDo9IGJpb25pYy11bml0LXRlc3RzLWdsaWJjCitMT0NBTF9BRERJVElPTkFMX0RFUEVOREVOQ0lFUyA6PSAkKExPQ0FMX1BBVEgpL0FuZHJvaWQubWsKK0xPQ0FMX0NGTEFHUyArPSAkKHRlc3RfY19mbGFncykKK0xPQ0FMX0xERkxBR1MgKz0gLWxwdGhyZWFkIC1sZGwKK0xPQ0FMX0xERkxBR1MgKz0gJCh0ZXN0X2R5bmFtaWNfbGRmbGFncykKK0xPQ0FMX1NSQ19GSUxFUyA6PSAkKHRlc3Rfc3JjX2ZpbGVzKSAkKHRlc3RfZHluYW1pY19zcmNfZmlsZXMpCitMT0NBTF9TVEFUSUNfTElCUkFSSUVTICs9IGJpb25pYy11bml0LXRlc3RzLXVud2luZC10ZXN0LWltcGwtaG9zdAoraW5jbHVkZSAkKEJVSUxEX0hPU1RfTkFUSVZFX1RFU1QpCitlbmRpZgorCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEZPUlRJRllfU09VUkNFIHRlc3RzCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2ZvcnRpZnlfY19pbmNsdWRlcyA9IFwKKyAgICBiaW9uaWMgXAorICAgIGJpb25pYy9saWJzdGRjKysvaW5jbHVkZSBcCisgICAgZXh0ZXJuYWwvc3RscG9ydC9zdGxwb3J0IFwKKyAgICBleHRlcm5hbC9ndGVzdC9pbmNsdWRlCitmb3J0aWZ5X3Rlc3RfZmlsZXMgPSBmb3J0aWZ5X3Rlc3QuY3BwCisKKyMgLVduby1lcnJvcj11bnVzZWQtcGFyYW1ldGVyIG5lZWRlZCBhcworIyBleHRlcm5hbC9zdGxwb3J0L3N0bHBvcnQvc3RsL190aHJlYWRzLmMgKGluY2x1ZGVkIGZyb20KKyMgZXh0ZXJuYWwvZ3Rlc3QvaW5jbHVkZS9ndGVzdC9ndGVzdC5oKSBkb2VzIG5vdCBjb21waWxlIGNsZWFubHkgdW5kZXIKKyMgY2xhbmcuIFRPRE86IGZpeCB0aGlzLgorZm9ydGlmeV9jX2ZsYWdzID0gJCh0ZXN0X2NfZmxhZ3MpIC1Xbm8tZXJyb3I9dW51c2VkLXBhcmFtZXRlcgorCitpbmNsdWRlICQoQ0xFQVJfVkFSUykKK0xPQ0FMX1NSQ19GSUxFUyA6PSAkKGZvcnRpZnlfdGVzdF9maWxlcykKK0xPQ0FMX01PRFVMRSA6PSBmb3J0aWZ5MS10ZXN0cy1nY2MKK0xPQ0FMX0NGTEFHUyArPSAkKGZvcnRpZnlfY19mbGFncykgLVVfRk9SVElGWV9TT1VSQ0UgLURfRk9SVElGWV9TT1VSQ0U9MSAtRFRFU1RfTkFNRT1Gb3J0aWZ5MV9HY2MKK0xPQ0FMX0FERElUSU9OQUxfREVQRU5ERU5DSUVTIDo9ICQoTE9DQUxfUEFUSCkvQW5kcm9pZC5taworTE9DQUxfQ19JTkNMVURFUyArPSAkKGZvcnRpZnlfY19pbmNsdWRlcykKK2luY2x1ZGUgJChCVUlMRF9TVEFUSUNfTElCUkFSWSkKKworaW5jbHVkZSAkKENMRUFSX1ZBUlMpCitMT0NBTF9TUkNfRklMRVMgOj0gJChmb3J0aWZ5X3Rlc3RfZmlsZXMpCitMT0NBTF9NT0RVTEUgOj0gZm9ydGlmeTItdGVzdHMtZ2NjCitMT0NBTF9DRkxBR1MgKz0gJChmb3J0aWZ5X2NfZmxhZ3MpIC1VX0ZPUlRJRllfU09VUkNFIC1EX0ZPUlRJRllfU09VUkNFPTIgLURURVNUX05BTUU9Rm9ydGlmeTJfR2NjCitMT0NBTF9BRERJVElPTkFMX0RFUEVOREVOQ0lFUyA6PSAkKExPQ0FMX1BBVEgpL0FuZHJvaWQubWsKK0xPQ0FMX0NfSU5DTFVERVMgKz0gJChmb3J0aWZ5X2NfaW5jbHVkZXMpCitpbmNsdWRlICQoQlVJTERfU1RBVElDX0xJQlJBUlkpCisKK2luY2x1ZGUgJChDTEVBUl9WQVJTKQorTE9DQUxfU1JDX0ZJTEVTIDo9ICQoZm9ydGlmeV90ZXN0X2ZpbGVzKQorTE9DQUxfTU9EVUxFIDo9IGZvcnRpZnkxLXRlc3RzLWNsYW5nCitMT0NBTF9DTEFORyA6PSB0cnVlCitMT0NBTF9DRkxBR1MgKz0gJChmb3J0aWZ5X2NfZmxhZ3MpIC1VX0ZPUlRJRllfU09VUkNFIC1EX0ZPUlRJRllfU09VUkNFPTEgLURURVNUX05BTUU9Rm9ydGlmeTFfQ2xhbmcKK0xPQ0FMX0FERElUSU9OQUxfREVQRU5ERU5DSUVTIDo9ICQoTE9DQUxfUEFUSCkvQW5kcm9pZC5taworTE9DQUxfQ19JTkNMVURFUyArPSAkKGZvcnRpZnlfY19pbmNsdWRlcykKK2luY2x1ZGUgJChCVUlMRF9TVEFUSUNfTElCUkFSWSkKKworaW5jbHVkZSAkKENMRUFSX1ZBUlMpCitMT0NBTF9TUkNfRklMRVMgOj0gJChmb3J0aWZ5X3Rlc3RfZmlsZXMpCitMT0NBTF9NT0RVTEUgOj0gZm9ydGlmeTItdGVzdHMtY2xhbmcKK0xPQ0FMX0NMQU5HIDo9IHRydWUKK0xPQ0FMX0NGTEFHUyArPSAkKGZvcnRpZnlfY19mbGFncykgLVVfRk9SVElGWV9TT1VSQ0UgLURfRk9SVElGWV9TT1VSQ0U9MiAtRFRFU1RfTkFNRT1Gb3J0aWZ5Ml9DbGFuZworTE9DQUxfQURESVRJT05BTF9ERVBFTkRFTkNJRVMgOj0gJChMT0NBTF9QQVRIKS9BbmRyb2lkLm1rCitMT0NBTF9DX0lOQ0xVREVTICs9ICQoZm9ydGlmeV9jX2luY2x1ZGVzKQoraW5jbHVkZSAkKEJVSUxEX1NUQVRJQ19MSUJSQVJZKQorCitlbmRpZiAjICFCVUlMRF9USU5ZX0FORFJPSUQKZGlmZiAtLWdpdCBhL3Rlc3RzL2JlbmNobWFyay5oIGIvdGVzdHMvYmVuY2htYXJrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDdhZjUwZgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2JlbmNobWFyay5oCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW5jbHVkZSA8c3RkaW50Lmg+CisKKyNpbmNsdWRlIDx2ZWN0b3I+CisKK25hbWVzcGFjZSB0ZXN0aW5nIHsKKworY2xhc3MgQmVuY2htYXJrIHsKKyBwdWJsaWM6CisgIEJlbmNobWFyayhjb25zdCBjaGFyKiBuYW1lLCB2b2lkICgqZm4pKGludCkpIHsKKyAgICBSZWdpc3RlcihuYW1lLCBmbiwgTlVMTCk7CisgIH0KKworICBCZW5jaG1hcmsoY29uc3QgY2hhciogbmFtZSwgdm9pZCAoKmZuX3JhbmdlKShpbnQsIGludCkpIHsKKyAgICBSZWdpc3RlcihuYW1lLCBOVUxMLCBmbl9yYW5nZSk7CisgIH0KKworICBCZW5jaG1hcmsqIEFyZyhpbnQgeCk7CisKKyAgY29uc3QgY2hhciogTmFtZSgpOworCisgIGJvb2wgU2hvdWxkUnVuKGludCBhcmdjLCBjaGFyKiBhcmd2W10pOworICB2b2lkIFJ1bigpOworCisgcHJpdmF0ZToKKyAgY29uc3QgY2hhciogbmFtZV87CisKKyAgdm9pZCAoKmZuXykoaW50KTsKKyAgdm9pZCAoKmZuX3JhbmdlXykoaW50LCBpbnQpOworCisgIHN0ZDo6dmVjdG9yPGludD4gYXJnc187CisKKyAgdm9pZCBSZWdpc3Rlcihjb25zdCBjaGFyKiBuYW1lLCB2b2lkICgqZm4pKGludCksIHZvaWQgKCpmbl9yYW5nZSkoaW50LCBpbnQpKTsKKyAgdm9pZCBSdW5SZXBlYXRlZGx5V2l0aEFyZyhpbnQgaXRlcmF0aW9ucywgaW50IGFyZyk7CisgIHZvaWQgUnVuV2l0aEFyZyhpbnQgYXJnKTsKK307CisKK30gIC8vIG5hbWVzcGFjZSB0ZXN0aW5nCisKK3ZvaWQgU2V0QmVuY2htYXJrQnl0ZXNQcm9jZXNzZWQoaW50NjRfdCk7Cit2b2lkIFN0b3BCZW5jaG1hcmtUaW1pbmcoKTsKK3ZvaWQgU3RhcnRCZW5jaG1hcmtUaW1pbmcoKTsKKworI2RlZmluZSBCRU5DSE1BUksoZikgXAorICAgIHN0YXRpYyA6OnRlc3Rpbmc6OkJlbmNobWFyayogX2JlbmNobWFya18jI2YgX19hdHRyaWJ1dGVfXygodW51c2VkKSkgPSBcCisgICAgICAgIChuZXcgOjp0ZXN0aW5nOjpCZW5jaG1hcmsoI2YsIGYpKQpkaWZmIC0tZ2l0IGEvdGVzdHMvYmVuY2htYXJrX21haW4uY3BwIGIvdGVzdHMvYmVuY2htYXJrX21haW4uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxNWE2ODgKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9iZW5jaG1hcmtfbWFpbi5jcHAKQEAgLTAsMCArMSwyMTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW5jbHVkZSAiYmVuY2htYXJrLmgiCisKKyNpbmNsdWRlIDxyZWdleC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisKKyNpbmNsdWRlIDxzdHJpbmc+CisjaW5jbHVkZSA8bWFwPgorCitzdGF0aWMgaW50NjRfdCBnQnl0ZXNQcm9jZXNzZWQ7CitzdGF0aWMgaW50NjRfdCBnQmVuY2htYXJrVG90YWxUaW1lTnM7CitzdGF0aWMgaW50NjRfdCBnQmVuY2htYXJrU3RhcnRUaW1lTnM7CisKK3R5cGVkZWYgc3RkOjptYXA8c3RkOjpzdHJpbmcsIDo6dGVzdGluZzo6QmVuY2htYXJrKj4gQmVuY2htYXJrTWFwOwordHlwZWRlZiBCZW5jaG1hcmtNYXA6Oml0ZXJhdG9yIEJlbmNobWFya01hcEl0Oworc3RhdGljIEJlbmNobWFya01hcCBnQmVuY2htYXJrczsKKworc3RhdGljIGludCBSb3VuZChpbnQgbikgeworICBpbnQgYmFzZSA9IDE7CisgIHdoaWxlIChiYXNlKjEwIDwgbikgeworICAgIGJhc2UgKj0gMTA7CisgIH0KKyAgaWYgKG4gPCAyKmJhc2UpIHsKKyAgICByZXR1cm4gMipiYXNlOworICB9CisgIGlmIChuIDwgNSpiYXNlKSB7CisgICAgcmV0dXJuIDUqYmFzZTsKKyAgfQorICByZXR1cm4gMTAqYmFzZTsKK30KKworc3RhdGljIGludDY0X3QgTmFub1RpbWUoKSB7CisgIHN0cnVjdCB0aW1lc3BlYyB0OworICB0LnR2X3NlYyA9IHQudHZfbnNlYyA9IDA7CisgIGNsb2NrX2dldHRpbWUoQ0xPQ0tfTU9OT1RPTklDLCAmdCk7CisgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ2NF90Pih0LnR2X3NlYykgKiAxMDAwMDAwMDAwTEwgKyB0LnR2X25zZWM7Cit9CisKK25hbWVzcGFjZSB0ZXN0aW5nIHsKKworQmVuY2htYXJrKiBCZW5jaG1hcms6OkFyZyhpbnQgYXJnKSB7CisgIGFyZ3NfLnB1c2hfYmFjayhhcmcpOworICByZXR1cm4gdGhpczsKK30KKworY29uc3QgY2hhciogQmVuY2htYXJrOjpOYW1lKCkgeworICByZXR1cm4gbmFtZV87Cit9CisKK2Jvb2wgQmVuY2htYXJrOjpTaG91bGRSdW4oaW50IGFyZ2MsIGNoYXIqIGFyZ3ZbXSkgeworICBpZiAoYXJnYyA9PSAxKSB7CisgICAgcmV0dXJuIHRydWU7ICAvLyBXaXRoIG5vIGFyZ3VtZW50cywgd2UgcnVuIGFsbCBiZW5jaG1hcmtzLgorICB9CisgIC8vIE90aGVyd2lzZSwgd2UgaW50ZXJwcmV0IGVhY2ggYXJndW1lbnQgYXMgYSByZWd1bGFyIGV4cHJlc3Npb24gYW5kCisgIC8vIHNlZSBpZiBhbnkgb2Ygb3VyIGJlbmNobWFya3MgbWF0Y2guCisgIGZvciAoaW50IGkgPSAxOyBpIDwgYXJnYzsgaSsrKSB7CisgICAgcmVnZXhfdCByZTsKKyAgICBpZiAocmVnY29tcCgmcmUsIGFyZ3ZbaV0sIDApICE9IDApIHsKKyAgICAgIGZwcmludGYoc3RkZXJyLCAiY291bGRuJ3QgY29tcGlsZSBcIiVzXCIgYXMgYSByZWd1bGFyIGV4cHJlc3Npb24hXG4iLCBhcmd2W2ldKTsKKyAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgICB9CisgICAgaW50IG1hdGNoID0gcmVnZXhlYygmcmUsIG5hbWVfLCAwLCBOVUxMLCAwKTsKKyAgICByZWdmcmVlKCZyZSk7CisgICAgaWYgKG1hdGNoICE9IFJFR19OT01BVENIKSB7CisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgIH0KKyAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIEJlbmNobWFyazo6UmVnaXN0ZXIoY29uc3QgY2hhciogbmFtZSwgdm9pZCAoKmZuKShpbnQpLCB2b2lkICgqZm5fcmFuZ2UpKGludCwgaW50KSkgeworICBuYW1lXyA9IG5hbWU7CisgIGZuXyA9IGZuOworICBmbl9yYW5nZV8gPSBmbl9yYW5nZTsKKworICBpZiAoZm5fID09IE5VTEwgJiYgZm5fcmFuZ2VfID09IE5VTEwpIHsKKyAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBtaXNzaW5nIGZ1bmN0aW9uXG4iLCBuYW1lXyk7CisgICAgZXhpdChFWElUX0ZBSUxVUkUpOworICB9CisKKyAgZ0JlbmNobWFya3MuaW5zZXJ0KHN0ZDo6bWFrZV9wYWlyKG5hbWUsIHRoaXMpKTsKK30KKwordm9pZCBCZW5jaG1hcms6OlJ1bigpIHsKKyAgaWYgKGZuXyAhPSBOVUxMKSB7CisgICAgUnVuV2l0aEFyZygwKTsKKyAgfSBlbHNlIHsKKyAgICBpZiAoYXJnc18uZW1wdHkoKSkgeworICAgICAgZnByaW50ZihzdGRlcnIsICIlczogbm8gYXJncyFcbiIsIG5hbWVfKTsKKyAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgICB9CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhcmdzXy5zaXplKCk7ICsraSkgeworICAgICAgUnVuV2l0aEFyZyhhcmdzX1tpXSk7CisgICAgfQorICB9Cit9CisKK3ZvaWQgQmVuY2htYXJrOjpSdW5SZXBlYXRlZGx5V2l0aEFyZyhpbnQgaXRlcmF0aW9ucywgaW50IGFyZykgeworICBnQnl0ZXNQcm9jZXNzZWQgPSAwOworICBnQmVuY2htYXJrVG90YWxUaW1lTnMgPSAwOworICBnQmVuY2htYXJrU3RhcnRUaW1lTnMgPSBOYW5vVGltZSgpOworICBpZiAoZm5fICE9IE5VTEwpIHsKKyAgICBmbl8oaXRlcmF0aW9ucyk7CisgIH0gZWxzZSB7CisgICAgZm5fcmFuZ2VfKGl0ZXJhdGlvbnMsIGFyZyk7CisgIH0KKyAgaWYgKGdCZW5jaG1hcmtTdGFydFRpbWVOcyAhPSAwKSB7CisgICAgZ0JlbmNobWFya1RvdGFsVGltZU5zICs9IE5hbm9UaW1lKCkgLSBnQmVuY2htYXJrU3RhcnRUaW1lTnM7CisgIH0KK30KKwordm9pZCBCZW5jaG1hcms6OlJ1bldpdGhBcmcoaW50IGFyZykgeworICAvLyBydW4gb25jZSBpbiBjYXNlIGl0J3MgZXhwZW5zaXZlCisgIGludCBpdGVyYXRpb25zID0gMTsKKyAgUnVuUmVwZWF0ZWRseVdpdGhBcmcoaXRlcmF0aW9ucywgYXJnKTsKKyAgd2hpbGUgKGdCZW5jaG1hcmtUb3RhbFRpbWVOcyA8IDFlOSAmJiBpdGVyYXRpb25zIDwgMWU5KSB7CisgICAgaW50IGxhc3QgPSBpdGVyYXRpb25zOworICAgIGlmIChnQmVuY2htYXJrVG90YWxUaW1lTnMvaXRlcmF0aW9ucyA9PSAwKSB7CisgICAgICBpdGVyYXRpb25zID0gMWU5OworICAgIH0gZWxzZSB7CisgICAgICBpdGVyYXRpb25zID0gMWU5IC8gKGdCZW5jaG1hcmtUb3RhbFRpbWVOcy9pdGVyYXRpb25zKTsKKyAgICB9CisgICAgaXRlcmF0aW9ucyA9IHN0ZDo6bWF4KGxhc3QgKyAxLCBzdGQ6Om1pbihpdGVyYXRpb25zICsgaXRlcmF0aW9ucy8yLCAxMDAqbGFzdCkpOworICAgIGl0ZXJhdGlvbnMgPSBSb3VuZChpdGVyYXRpb25zKTsKKyAgICBSdW5SZXBlYXRlZGx5V2l0aEFyZyhpdGVyYXRpb25zLCBhcmcpOworICB9CisKKyAgY2hhciB0aHJvdWdocHV0WzEwMF07CisgIHRocm91Z2hwdXRbMF0gPSAnXDAnOworICBpZiAoZ0JlbmNobWFya1RvdGFsVGltZU5zID4gMCAmJiBnQnl0ZXNQcm9jZXNzZWQgPiAwKSB7CisgICAgZG91YmxlIG1pYl9wcm9jZXNzZWQgPSBzdGF0aWNfY2FzdDxkb3VibGU+KGdCeXRlc1Byb2Nlc3NlZCkvMWU2OworICAgIGRvdWJsZSBzZWNvbmRzID0gc3RhdGljX2Nhc3Q8ZG91YmxlPihnQmVuY2htYXJrVG90YWxUaW1lTnMpLzFlOTsKKyAgICBzbnByaW50Zih0aHJvdWdocHV0LCBzaXplb2YodGhyb3VnaHB1dCksICIgJTguMmYgTWlCL3MiLCBtaWJfcHJvY2Vzc2VkL3NlY29uZHMpOworICB9CisKKyAgY2hhciBmdWxsX25hbWVbMTAwXTsKKyAgaWYgKGZuX3JhbmdlXyAhPSBOVUxMKSB7CisgICAgaWYgKGFyZyA+PSAoMTw8MjApKSB7CisgICAgICBzbnByaW50ZihmdWxsX25hbWUsIHNpemVvZihmdWxsX25hbWUpLCAiJXMvJWRNIiwgbmFtZV8sIGFyZy8oMTw8MjApKTsKKyAgICB9IGVsc2UgaWYgKGFyZyA+PSAoMTw8MTApKSB7CisgICAgICBzbnByaW50ZihmdWxsX25hbWUsIHNpemVvZihmdWxsX25hbWUpLCAiJXMvJWRLIiwgbmFtZV8sIGFyZy8oMTw8MTApKTsKKyAgICB9IGVsc2UgeworICAgICAgc25wcmludGYoZnVsbF9uYW1lLCBzaXplb2YoZnVsbF9uYW1lKSwgIiVzLyVkIiwgbmFtZV8sIGFyZyk7CisgICAgfQorICB9IGVsc2UgeworICAgIHNucHJpbnRmKGZ1bGxfbmFtZSwgc2l6ZW9mKGZ1bGxfbmFtZSksICIlcyIsIG5hbWVfKTsKKyAgfQorCisgIHByaW50ZigiJS0yMHMgJTEwbGxkICUxMGxsZCVzXG4iLCBmdWxsX25hbWUsCisgICAgICAgICBzdGF0aWNfY2FzdDxpbnQ2NF90PihpdGVyYXRpb25zKSwgZ0JlbmNobWFya1RvdGFsVGltZU5zL2l0ZXJhdGlvbnMsIHRocm91Z2hwdXQpOworICBmZmx1c2goc3Rkb3V0KTsKK30KKworfSAgLy8gbmFtZXNwYWNlIHRlc3RpbmcKKwordm9pZCBTZXRCZW5jaG1hcmtCeXRlc1Byb2Nlc3NlZChpbnQ2NF90IHgpIHsKKyAgZ0J5dGVzUHJvY2Vzc2VkID0geDsKK30KKwordm9pZCBTdG9wQmVuY2htYXJrVGltaW5nKCkgeworICBpZiAoZ0JlbmNobWFya1N0YXJ0VGltZU5zICE9IDApIHsKKyAgICBnQmVuY2htYXJrVG90YWxUaW1lTnMgKz0gTmFub1RpbWUoKSAtIGdCZW5jaG1hcmtTdGFydFRpbWVOczsKKyAgfQorICBnQmVuY2htYXJrU3RhcnRUaW1lTnMgPSAwOworfQorCit2b2lkIFN0YXJ0QmVuY2htYXJrVGltaW5nKCkgeworICBpZiAoZ0JlbmNobWFya1N0YXJ0VGltZU5zID09IDApIHsKKyAgICBnQmVuY2htYXJrU3RhcnRUaW1lTnMgPSBOYW5vVGltZSgpOworICB9Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyKiBhcmd2W10pIHsKKyAgaWYgKGdCZW5jaG1hcmtzLmVtcHR5KCkpIHsKKyAgICBmcHJpbnRmKHN0ZGVyciwgIk5vIGJlbmNobWFya3MgcmVnaXN0ZXJlZCFcbiIpOworICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgfQorCisgIGJvb2wgbmVlZF9oZWFkZXIgPSB0cnVlOworICBmb3IgKEJlbmNobWFya01hcEl0IGl0ID0gZ0JlbmNobWFya3MuYmVnaW4oKTsgaXQgIT0gZ0JlbmNobWFya3MuZW5kKCk7ICsraXQpIHsKKyAgICA6OnRlc3Rpbmc6OkJlbmNobWFyayogYiA9IGl0LT5zZWNvbmQ7CisgICAgaWYgKGItPlNob3VsZFJ1bihhcmdjLCBhcmd2KSkgeworICAgICAgaWYgKG5lZWRfaGVhZGVyKSB7CisgICAgICAgIHByaW50ZigiJS0yMHMgJTEwcyAlMTBzXG4iLCAiIiwgIml0ZXJhdGlvbnMiLCAibnMvb3AiKTsKKyAgICAgICAgZmZsdXNoKHN0ZG91dCk7CisgICAgICAgIG5lZWRfaGVhZGVyID0gZmFsc2U7CisgICAgICB9CisgICAgICBiLT5SdW4oKTsKKyAgICB9CisgIH0KKworICBpZiAobmVlZF9oZWFkZXIpIHsKKyAgICBmcHJpbnRmKHN0ZGVyciwgIk5vIG1hdGNoaW5nIGJlbmNobWFya3MhXG4iKTsKKyAgICBmcHJpbnRmKHN0ZGVyciwgIkF2YWlsYWJsZSBiZW5jaG1hcmtzOlxuIik7CisgICAgZm9yIChCZW5jaG1hcmtNYXBJdCBpdCA9IGdCZW5jaG1hcmtzLmJlZ2luKCk7IGl0ICE9IGdCZW5jaG1hcmtzLmVuZCgpOyArK2l0KSB7CisgICAgICBmcHJpbnRmKHN0ZGVyciwgIiAgJXNcbiIsIGl0LT5zZWNvbmQtPk5hbWUoKSk7CisgICAgfQorICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgfQorCisgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvdGVzdHMvZGlyZW50X3Rlc3QuY3BwIGIvdGVzdHMvZGlyZW50X3Rlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4Y2E4MTkKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kaXJlbnRfdGVzdC5jcHAKQEAgLTAsMCArMSwxODEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKworI2luY2x1ZGUgPGRpcmVudC5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxsaW1pdHMuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPHNldD4KKyNpbmNsdWRlIDxzdHJpbmc+CisKK3N0YXRpYyB2b2lkIENoZWNrUHJvY1NlbGYoc3RkOjpzZXQ8c3RkOjpzdHJpbmc+JiBuYW1lcykgeworICAvLyBXZSBoYXZlIGEgZ29vZCBpZGVhIG9mIHdoYXQgc2hvdWxkIGJlIGluIC9wcm9jL3NlbGYuCisgIEFTU0VSVF9UUlVFKG5hbWVzLmZpbmQoIi4iKSAhPSBuYW1lcy5lbmQoKSk7CisgIEFTU0VSVF9UUlVFKG5hbWVzLmZpbmQoIi4uIikgIT0gbmFtZXMuZW5kKCkpOworICBBU1NFUlRfVFJVRShuYW1lcy5maW5kKCJjbWRsaW5lIikgIT0gbmFtZXMuZW5kKCkpOworICBBU1NFUlRfVFJVRShuYW1lcy5maW5kKCJmZCIpICE9IG5hbWVzLmVuZCgpKTsKKyAgQVNTRVJUX1RSVUUobmFtZXMuZmluZCgic3RhdCIpICE9IG5hbWVzLmVuZCgpKTsKK30KKworVEVTVChkaXJlbnQsIHNjYW5kaXIpIHsKKyAgLy8gR2V0IGV2ZXJ5dGhpbmcgZnJvbSAvcHJvYy9zZWxmLi4uCisgIGRpcmVudCoqIGVudHJpZXM7CisgIGludCBlbnRyeV9jb3VudCA9IHNjYW5kaXIoIi9wcm9jL3NlbGYiLCAmZW50cmllcywgTlVMTCwgYWxwaGFzb3J0KTsKKyAgQVNTRVJUX0dFKGVudHJ5X2NvdW50LCAwKTsKKworICAvLyBUdXJuIHRoZSBkaXJlY3RvcnkgZW50cmllcyBpbnRvIGEgc2V0IGFuZCB2ZWN0b3Igb2YgdGhlIG5hbWVzLgorICBzdGQ6OnNldDxzdGQ6OnN0cmluZz4gbmFtZV9zZXQ7CisgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiB1bnNvcnRlZF9uYW1lX2xpc3Q7CisgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc3RhdGljX2Nhc3Q8c2l6ZV90PihlbnRyeV9jb3VudCk7ICsraSkgeworICAgIG5hbWVfc2V0Lmluc2VydChlbnRyaWVzW2ldLT5kX25hbWUpOworICAgIHVuc29ydGVkX25hbWVfbGlzdC5wdXNoX2JhY2soZW50cmllc1tpXS0+ZF9uYW1lKTsKKyAgICBmcmVlKGVudHJpZXNbaV0pOworICB9CisgIGZyZWUoZW50cmllcyk7CisKKyAgLy8gTm8gZHVwbGljYXRlcy4KKyAgQVNTRVJUX0VRKG5hbWVfc2V0LnNpemUoKSwgdW5zb3J0ZWRfbmFtZV9saXN0LnNpemUoKSk7CisKKyAgLy8gQWxsIGVudHJpZXMgc29ydGVkLgorICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gc29ydGVkX25hbWVfbGlzdCh1bnNvcnRlZF9uYW1lX2xpc3QpOworICBzdGQ6OnNvcnQoc29ydGVkX25hbWVfbGlzdC5iZWdpbigpLCBzb3J0ZWRfbmFtZV9saXN0LmVuZCgpKTsKKyAgQVNTRVJUX0VRKHNvcnRlZF9uYW1lX2xpc3QsIHVuc29ydGVkX25hbWVfbGlzdCk7CisKKyAgQ2hlY2tQcm9jU2VsZihuYW1lX3NldCk7Cit9CisKK1RFU1QoZGlyZW50LCBmZG9wZW5kaXJfaW52YWxpZCkgeworICBBU1NFUlRfVFJVRShmZG9wZW5kaXIoLTEpID09IE5VTEwpOworICBBU1NFUlRfRVEoRUJBREYsIGVycm5vKTsKKworICBpbnQgZmQgPSBvcGVuKCIvZGV2L251bGwiLCBPX1JET05MWSk7CisgIEFTU0VSVF9ORShmZCwgLTEpOworICBBU1NFUlRfVFJVRShmZG9wZW5kaXIoZmQpID09IE5VTEwpOworICBBU1NFUlRfRVEoRU5PVERJUiwgZXJybm8pOworICBjbG9zZShmZCk7Cit9CisKK1RFU1QoZGlyZW50LCBmZG9wZW5kaXIpIHsKKyAgaW50IGZkID0gb3BlbigiL3Byb2Mvc2VsZiIsIE9fUkRPTkxZKTsKKyAgRElSKiBkID0gZmRvcGVuZGlyKGZkKTsKKyAgQVNTRVJUX1RSVUUoZCAhPSBOVUxMKTsKKyAgZGlyZW50KiBlID0gcmVhZGRpcihkKTsKKyAgQVNTRVJUX1NUUkVRKGUtPmRfbmFtZSwgIi4iKTsKKyAgQVNTRVJUX0VRKGNsb3NlZGlyKGQpLCAwKTsKKworICAvLyBmZG9wZW5kaXIoMykgdG9vayBvd25lcnNoaXAsIHNvIGNsb3NlZGlyKDMpIGNsb3NlZCBvdXIgZmQuCisgIEFTU0VSVF9FUShjbG9zZShmZCksIC0xKTsKKyAgQVNTRVJUX0VRKEVCQURGLCBlcnJubyk7Cit9CisKK1RFU1QoZGlyZW50LCBvcGVuZGlyX2ludmFsaWQpIHsKKyAgQVNTRVJUX1RSVUUob3BlbmRpcigiL2RvZXMvbm90L2V4aXN0IikgPT0gTlVMTCk7CisgIEFTU0VSVF9FUShFTk9FTlQsIGVycm5vKTsKKworICBBU1NFUlRfVFJVRShvcGVuZGlyKCIvZGV2L251bGwiKSA9PSBOVUxMKTsKKyAgQVNTRVJUX0VRKEVOT1RESVIsIGVycm5vKTsKK30KKworVEVTVChkaXJlbnQsIG9wZW5kaXIpIHsKKyAgRElSKiBkID0gb3BlbmRpcigiL3Byb2Mvc2VsZiIpOworICBBU1NFUlRfVFJVRShkICE9IE5VTEwpOworICBkaXJlbnQqIGUgPSByZWFkZGlyKGQpOworICBBU1NFUlRfU1RSRVEoZS0+ZF9uYW1lLCAiLiIpOworICBBU1NFUlRfRVEoY2xvc2VkaXIoZCksIDApOworfQorCitURVNUKGRpcmVudCwgY2xvc2VkaXJfaW52YWxpZCkgeworICBESVIqIGQgPSBOVUxMOworICBBU1NFUlRfRVEoY2xvc2VkaXIoZCksIC0xKTsKKyAgQVNTRVJUX0VRKEVJTlZBTCwgZXJybm8pOworfQorCitURVNUKGRpcmVudCwgY2xvc2VkaXIpIHsKKyAgRElSKiBkID0gb3BlbmRpcigiL3Byb2Mvc2VsZiIpOworICBBU1NFUlRfVFJVRShkICE9IE5VTEwpOworICBBU1NFUlRfRVEoY2xvc2VkaXIoZCksIDApOworfQorCitURVNUKGRpcmVudCwgcmVhZGRpcikgeworICBESVIqIGQgPSBvcGVuZGlyKCIvcHJvYy9zZWxmIik7CisgIEFTU0VSVF9UUlVFKGQgIT0gTlVMTCk7CisgIHN0ZDo6c2V0PHN0ZDo6c3RyaW5nPiBuYW1lX3NldDsKKyAgZXJybm8gPSAwOworICBkaXJlbnQqIGU7CisgIHdoaWxlICgoZSA9IHJlYWRkaXIoZCkpICE9IE5VTEwpIHsKKyAgICBuYW1lX3NldC5pbnNlcnQoZS0+ZF9uYW1lKTsKKyAgfQorICAvLyBSZWFkaW5nIHRvIHRoZSBlbmQgb2YgdGhlIGRpcmVjdG9yeSBpcyBub3QgYW4gZXJyb3IuCisgIC8vIHJlYWRkaXIoMykgcmV0dXJucyBOVUxMLCBidXQgbGVhdmVzIGVycm5vIGFzIDAuCisgIEFTU0VSVF9FUSgwLCBlcnJubyk7CisgIEFTU0VSVF9FUShjbG9zZWRpcihkKSwgMCk7CisKKyAgQ2hlY2tQcm9jU2VsZihuYW1lX3NldCk7Cit9CisKK1RFU1QoZGlyZW50LCByZWFkZGlyX3IpIHsKKyAgRElSKiBkID0gb3BlbmRpcigiL3Byb2Mvc2VsZiIpOworICBBU1NFUlRfVFJVRShkICE9IE5VTEwpOworICBzdGQ6OnNldDxzdGQ6OnN0cmluZz4gbmFtZV9zZXQ7CisgIGVycm5vID0gMDsKKyAgZGlyZW50IHN0b3JhZ2U7CisgIGRpcmVudCogZSA9IE5VTEw7CisgIHdoaWxlIChyZWFkZGlyX3IoZCwgJnN0b3JhZ2UsICZlKSA9PSAwICYmIGUgIT0gTlVMTCkgeworICAgIG5hbWVfc2V0Lmluc2VydChlLT5kX25hbWUpOworICB9CisgIC8vIFJlYWRpbmcgdG8gdGhlIGVuZCBvZiB0aGUgZGlyZWN0b3J5IGlzIG5vdCBhbiBlcnJvci4KKyAgLy8gcmVhZGRpcl9yKDMpIHJldHVybnMgTlVMTCwgYnV0IGxlYXZlcyBlcnJubyBhcyAwLgorICBBU1NFUlRfRVEoMCwgZXJybm8pOworICBBU1NFUlRfRVEoY2xvc2VkaXIoZCksIDApOworCisgIENoZWNrUHJvY1NlbGYobmFtZV9zZXQpOworfQorCitURVNUKGRpcmVudCwgcmV3aW5kZGlyKSB7CisgIERJUiogZCA9IG9wZW5kaXIoIi9wcm9jL3NlbGYiKTsKKyAgQVNTRVJUX1RSVUUoZCAhPSBOVUxMKTsKKworICAvLyBHZXQgYWxsIHRoZSBuYW1lcyBvbmNlLi4uCisgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBwYXNzMTsKKyAgZGlyZW50KiBlOworICB3aGlsZSAoKGUgPSByZWFkZGlyKGQpKSAhPSBOVUxMKSB7CisgICAgcGFzczEucHVzaF9iYWNrKGUtPmRfbmFtZSk7CisgIH0KKworICAvLyAuLi5yZXdpbmQuLi4KKyAgcmV3aW5kZGlyKGQpOworCisgIC8vIC4uLmFuZCBnZXQgYWxsIHRoZSBuYW1lcyBhZ2Fpbi4KKyAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IHBhc3MyOworICB3aGlsZSAoKGUgPSByZWFkZGlyKGQpKSAhPSBOVUxMKSB7CisgICAgcGFzczIucHVzaF9iYWNrKGUtPmRfbmFtZSk7CisgIH0KKworICBBU1NFUlRfRVEoY2xvc2VkaXIoZCksIDApOworCisgIC8vIFdlIHNob3VsZCBoYXZlIHNlZW4gdGhlIHNhbWUgbmFtZXMgaW4gdGhlIHNhbWUgb3JkZXIgYm90aCB0aW1lcy4KKyAgQVNTRVJUX0VRKHBhc3MxLnNpemUoKSwgcGFzczIuc2l6ZSgpKTsKKyAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwYXNzMS5zaXplKCk7ICsraSkgeworICAgIEFTU0VSVF9FUShwYXNzMVtpXSwgcGFzczJbaV0pOworICB9Cit9CmRpZmYgLS1naXQgYS90ZXN0cy9kbGZjbl90ZXN0LmNwcCBiL3Rlc3RzL2RsZmNuX3Rlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzOGI4YTUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kbGZjbl90ZXN0LmNwcApAQCAtMCwwICsxLDIyNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgorCisjaW5jbHVkZSA8ZGxmY24uaD4KKyNpbmNsdWRlIDxsaWJnZW4uaD4KKyNpbmNsdWRlIDxsaW1pdHMuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorCisjaW5jbHVkZSA8c3RyaW5nPgorCisjZGVmaW5lIEFTU0VSVF9TVUJTVFIobmVlZGxlLCBoYXlzdGFjaykgXAorICAgIEFTU0VSVF9QUkVEX0ZPUk1BVDIoOjp0ZXN0aW5nOjpJc1N1YnN0cmluZywgbmVlZGxlLCBoYXlzdGFjaykKKworc3RhdGljIGJvb2wgZ0NhbGxlZCA9IGZhbHNlOworZXh0ZXJuICJDIiB2b2lkIERsU3ltVGVzdEZ1bmN0aW9uKCkgeworICBnQ2FsbGVkID0gdHJ1ZTsKK30KKworVEVTVChkbGZjbiwgZGxzeW1faW5fc2VsZikgeworICBkbGVycm9yKCk7IC8vIENsZWFyIGFueSBwZW5kaW5nIGVycm9ycy4KKyAgdm9pZCogc2VsZiA9IGRsb3BlbihOVUxMLCBSVExEX05PVyk7CisgIEFTU0VSVF9UUlVFKHNlbGYgIT0gTlVMTCk7CisgIEFTU0VSVF9UUlVFKGRsZXJyb3IoKSA9PSBOVUxMKTsKKworICB2b2lkKiBzeW0gPSBkbHN5bShzZWxmLCAiRGxTeW1UZXN0RnVuY3Rpb24iKTsKKyAgQVNTRVJUX1RSVUUoc3ltICE9IE5VTEwpOworCisgIHZvaWQgKCpmdW5jdGlvbikoKSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCgqKSgpPihzeW0pOworCisgIGdDYWxsZWQgPSBmYWxzZTsKKyAgZnVuY3Rpb24oKTsKKyAgQVNTRVJUX1RSVUUoZ0NhbGxlZCk7CisKKyAgQVNTRVJUX0VRKDAsIGRsY2xvc2Uoc2VsZikpOworfQorCitURVNUKGRsZmNuLCBkbG9wZW5fZmFpbHVyZSkgeworICB2b2lkKiBzZWxmID0gZGxvcGVuKCIvZG9lcy9ub3QvZXhpc3QiLCBSVExEX05PVyk7CisgIEFTU0VSVF9UUlVFKHNlbGYgPT0gTlVMTCk7CisjaWYgX19CSU9OSUNfXworICBBU1NFUlRfU1RSRVEoImRsb3BlbiBmYWlsZWQ6IGxpYnJhcnkgXCIvZG9lcy9ub3QvZXhpc3RcIiBub3QgZm91bmQiLCBkbGVycm9yKCkpOworI2Vsc2UKKyAgQVNTRVJUX1NUUkVRKCIvZG9lcy9ub3QvZXhpc3Q6IGNhbm5vdCBvcGVuIHNoYXJlZCBvYmplY3QgZmlsZTogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeSIsIGRsZXJyb3IoKSk7CisjZW5kaWYKK30KKworc3RhdGljIHZvaWQqIENvbmN1cnJlbnREbEVycm9yRm4odm9pZCopIHsKKyAgZGxvcGVuKCIvY2hpbGQvdGhyZWFkIiwgUlRMRF9OT1cpOworICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oc3RyZHVwKGRsZXJyb3IoKSkpOworfQorCitURVNUKGRsZmNuLCBkbGVycm9yX2NvbmN1cnJlbnQpIHsKKyAgZGxvcGVuKCIvbWFpbi90aHJlYWQiLCBSVExEX05PVyk7CisgIGNvbnN0IGNoYXIqIG1haW5fdGhyZWFkX2Vycm9yID0gZGxlcnJvcigpOworICBBU1NFUlRfU1VCU1RSKCIvbWFpbi90aHJlYWQiLCBtYWluX3RocmVhZF9lcnJvcik7CisKKyAgcHRocmVhZF90IHQ7CisgIEFTU0VSVF9FUSgwLCBwdGhyZWFkX2NyZWF0ZSgmdCwgTlVMTCwgQ29uY3VycmVudERsRXJyb3JGbiwgTlVMTCkpOworICB2b2lkKiByZXN1bHQ7CisgIEFTU0VSVF9FUSgwLCBwdGhyZWFkX2pvaW4odCwgJnJlc3VsdCkpOworICBjaGFyKiBjaGlsZF90aHJlYWRfZXJyb3IgPSBzdGF0aWNfY2FzdDxjaGFyKj4ocmVzdWx0KTsKKyAgQVNTRVJUX1NVQlNUUigiL2NoaWxkL3RocmVhZCIsIGNoaWxkX3RocmVhZF9lcnJvcik7CisgIGZyZWUoY2hpbGRfdGhyZWFkX2Vycm9yKTsKKworICBBU1NFUlRfU1VCU1RSKCIvbWFpbi90aHJlYWQiLCBtYWluX3RocmVhZF9lcnJvcik7Cit9CisKK1RFU1QoZGxmY24sIGRsc3ltX2ZhaWx1cmVzKSB7CisgIGRsZXJyb3IoKTsgLy8gQ2xlYXIgYW55IHBlbmRpbmcgZXJyb3JzLgorICB2b2lkKiBzZWxmID0gZGxvcGVuKE5VTEwsIFJUTERfTk9XKTsKKyAgQVNTRVJUX1RSVUUoc2VsZiAhPSBOVUxMKTsKKyAgQVNTRVJUX1RSVUUoZGxlcnJvcigpID09IE5VTEwpOworCisgIHZvaWQqIHN5bTsKKworICAvLyBOVUxMIGhhbmRsZS4KKyAgc3ltID0gZGxzeW0oTlVMTCwgInRlc3QiKTsKKyAgQVNTRVJUX1RSVUUoc3ltID09IE5VTEwpOworI2lmIF9fQklPTklDX18KKyAgQVNTRVJUX1NVQlNUUigiZGxzeW0gbGlicmFyeSBoYW5kbGUgaXMgbnVsbCIsIGRsZXJyb3IoKSk7CisjZWxzZQorICBBU1NFUlRfU1VCU1RSKCJ1bmRlZmluZWQgc3ltYm9sOiB0ZXN0IiwgZGxlcnJvcigpKTsgLy8gZ2xpYmMgaXNuJ3Qgc3BlY2lmaWMgYWJvdXQgdGhlIGZhaWx1cmUuCisjZW5kaWYKKworICAvLyBOVUxMIHN5bWJvbCBuYW1lLgorI2lmIF9fQklPTklDX18KKyAgLy8gZ2xpYmMgbWFya3MgdGhpcyBwYXJhbWV0ZXIgbm9uLW51bGwgYW5kIFNFR1ZzIGlmIHlvdSBjaGVhdC4KKyAgc3ltID0gZGxzeW0oc2VsZiwgTlVMTCk7CisgIEFTU0VSVF9UUlVFKHN5bSA9PSBOVUxMKTsKKyAgQVNTRVJUX1NVQlNUUigiIiwgZGxlcnJvcigpKTsKKyNlbmRpZgorCisgIC8vIFN5bWJvbCB0aGF0IGRvZXNuJ3QgZXhpc3QuCisgIHN5bSA9IGRsc3ltKHNlbGYsICJUaGlzU3ltYm9sRG9lc05vdEV4aXN0Iik7CisgIEFTU0VSVF9UUlVFKHN5bSA9PSBOVUxMKTsKKyAgQVNTRVJUX1NVQlNUUigidW5kZWZpbmVkIHN5bWJvbDogVGhpc1N5bWJvbERvZXNOb3RFeGlzdCIsIGRsZXJyb3IoKSk7CisKKyAgQVNTRVJUX0VRKDAsIGRsY2xvc2Uoc2VsZikpOworfQorCitURVNUKGRsZmNuLCBkbGFkZHIpIHsKKyAgZGxlcnJvcigpOyAvLyBDbGVhciBhbnkgcGVuZGluZyBlcnJvcnMuCisgIHZvaWQqIHNlbGYgPSBkbG9wZW4oTlVMTCwgUlRMRF9OT1cpOworICBBU1NFUlRfVFJVRShzZWxmICE9IE5VTEwpOworICBBU1NFUlRfVFJVRShkbGVycm9yKCkgPT0gTlVMTCk7CisKKyAgdm9pZCogc3ltID0gZGxzeW0oc2VsZiwgIkRsU3ltVGVzdEZ1bmN0aW9uIik7CisgIEFTU0VSVF9UUlVFKHN5bSAhPSBOVUxMKTsKKworICAvLyBEZWxpYmVyYXRlbHkgYXNrIGRsYWRkciBmb3IgYW4gYWRkcmVzcyBpbnNpZGUgYSBzeW1ib2wsIHJhdGhlciB0aGFuIHRoZSBzeW1ib2wgYmFzZSBhZGRyZXNzLgorICB2b2lkKiBhZGRyID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHN5bSkgKyAyKTsKKworICBEbF9pbmZvIGluZm87CisgIGludCByYyA9IGRsYWRkcihhZGRyLCAmaW5mbyk7CisgIEFTU0VSVF9ORShyYywgMCk7IC8vIFplcm8gb24gZXJyb3IsIG5vbi16ZXJvIG9uIHN1Y2Nlc3MuCisKKyAgLy8gR2V0IHRoZSBuYW1lIG9mIHRoaXMgZXhlY3V0YWJsZS4KKyAgY2hhciBleGVjdXRhYmxlX3BhdGhbUEFUSF9NQVhdOworICByYyA9IHJlYWRsaW5rKCIvcHJvYy9zZWxmL2V4ZSIsIGV4ZWN1dGFibGVfcGF0aCwgc2l6ZW9mKGV4ZWN1dGFibGVfcGF0aCkpOworICBBU1NFUlRfTkUocmMsIC0xKTsKKyAgZXhlY3V0YWJsZV9wYXRoW3JjXSA9ICdcMCc7CisgIHN0ZDo6c3RyaW5nIGV4ZWN1dGFibGVfbmFtZShiYXNlbmFtZShleGVjdXRhYmxlX3BhdGgpKTsKKworICAvLyBUaGUgZmlsZW5hbWUgc2hvdWxkIGJlIHRoYXQgb2YgdGhpcyBleGVjdXRhYmxlLgorICAvLyBOb3RlIHRoYXQgd2UgZG9uJ3Qga25vdyB3aGV0aGVyIG9yIG5vdCB3ZSBoYXZlIHRoZSBmdWxsIHBhdGgsIHNvIHdlIHdhbnQgYW4gImVuZHNfd2l0aCIgdGVzdC4KKyAgc3RkOjpzdHJpbmcgZGxpX2ZuYW1lKGluZm8uZGxpX2ZuYW1lKTsKKyAgZGxpX2ZuYW1lID0gYmFzZW5hbWUoJmRsaV9mbmFtZVswXSk7CisgIEFTU0VSVF9FUShkbGlfZm5hbWUsIGV4ZWN1dGFibGVfbmFtZSk7CisKKyAgLy8gVGhlIHN5bWJvbCBuYW1lIHNob3VsZCBiZSB0aGUgc3ltYm9sIHdlIGxvb2tlZCB1cC4KKyAgQVNTRVJUX1NUUkVRKGluZm8uZGxpX3NuYW1lLCAiRGxTeW1UZXN0RnVuY3Rpb24iKTsKKworICAvLyBUaGUgYWRkcmVzcyBzaG91bGQgYmUgdGhlIGV4YWN0IGFkZHJlc3Mgb2YgdGhlIHN5bWJvbC4KKyAgQVNTRVJUX0VRKGluZm8uZGxpX3NhZGRyLCBzeW0pOworCisgIC8vIExvb2sgaW4gL3Byb2MvcGlkL21hcHMgdG8gZmluZCBvdXQgd2hhdCBhZGRyZXNzIHdlIHdlcmUgbG9hZGVkIGF0LgorICAvLyBUT0RPOiBmYWN0b3IgL3Byb2MvcGlkL21hcHMgcGFyc2luZyBvdXQgaW50byBhIGNsYXNzIGFuZCByZXVzZSBhbGwgb3ZlciBiaW9uaWMuCisgIHZvaWQqIGJhc2VfYWRkcmVzcyA9IE5VTEw7CisgIGNoYXIgcGF0aFtQQVRIX01BWF07CisgIHNucHJpbnRmKHBhdGgsIHNpemVvZihwYXRoKSwgIi9wcm9jLyVkL21hcHMiLCBnZXRwaWQoKSk7CisgIGNoYXIgbGluZVtCVUZTSVpdOworICBGSUxFKiBmcCA9IGZvcGVuKHBhdGgsICJyIik7CisgIEFTU0VSVF9UUlVFKGZwICE9IE5VTEwpOworICB3aGlsZSAoZmdldHMobGluZSwgc2l6ZW9mKGxpbmUpLCBmcCkgIT0gTlVMTCkgeworICAgIHVpbnRwdHJfdCBzdGFydCA9IHN0cnRvdWwobGluZSwgMCwgMTYpOworICAgIGxpbmVbc3RybGVuKGxpbmUpIC0gMV0gPSAnXDAnOyAvLyBDaG9tcCB0aGUgJ1xuJy4KKyAgICBjaGFyKiBwYXRoID0gc3RyY2hyKGxpbmUsICcvJyk7CisgICAgaWYgKHBhdGggIT0gTlVMTCAmJiBzdHJjbXAoZXhlY3V0YWJsZV9wYXRoLCBwYXRoKSA9PSAwKSB7CisgICAgICBiYXNlX2FkZHJlc3MgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihzdGFydCk7CisgICAgICBicmVhazsKKyAgICB9CisgIH0KKyAgZmNsb3NlKGZwKTsKKworICAvLyBUaGUgYmFzZSBhZGRyZXNzIHNob3VsZCBiZSB0aGUgYWRkcmVzcyB3ZSB3ZXJlIGxvYWRlZCBhdC4KKyAgQVNTRVJUX0VRKGluZm8uZGxpX2ZiYXNlLCBiYXNlX2FkZHJlc3MpOworCisgIEFTU0VSVF9FUSgwLCBkbGNsb3NlKHNlbGYpKTsKK30KKworVEVTVChkbGZjbiwgZGxhZGRyX2ludmFsaWQpIHsKKyAgRGxfaW5mbyBpbmZvOworCisgIGRsZXJyb3IoKTsgLy8gQ2xlYXIgYW55IHBlbmRpbmcgZXJyb3JzLgorCisgIC8vIE5vIHN5bWJvbCBjb3JyZXNwb25kaW5nIHRvIE5VTEwuCisgIEFTU0VSVF9FUShkbGFkZHIoTlVMTCwgJmluZm8pLCAwKTsgLy8gWmVybyBvbiBlcnJvciwgbm9uLXplcm8gb24gc3VjY2Vzcy4KKyAgQVNTRVJUX1RSVUUoZGxlcnJvcigpID09IE5VTEwpOyAvLyBkbGFkZHIoMykgZG9lc24ndCBzZXQgZGxlcnJvcigzKS4KKworICAvLyBObyBzeW1ib2wgY29ycmVzcG9uZGluZyB0byBhIHN0YWNrIGFkZHJlc3MuCisgIEFTU0VSVF9FUShkbGFkZHIoJmluZm8sICZpbmZvKSwgMCk7IC8vIFplcm8gb24gZXJyb3IsIG5vbi16ZXJvIG9uIHN1Y2Nlc3MuCisgIEFTU0VSVF9UUlVFKGRsZXJyb3IoKSA9PSBOVUxMKTsgLy8gZGxhZGRyKDMpIGRvZXNuJ3Qgc2V0IGRsZXJyb3IoMykuCit9CisKKy8vIE91ciBkeW5hbWljIGxpbmtlciBkb2Vzbid0IHN1cHBvcnQgR05VIGhhc2ggdGFibGVzLgorI2lmIGRlZmluZWQoX19CSU9OSUNfXykKKy8vIEdOVS1zdHlsZSBFTEYgaGFzaCB0YWJsZXMgYXJlIGluY29tcGF0aWJsZSB3aXRoIHRoZSBNSVBTIEFCSS4KKy8vIE1JUFMgcmVxdWlyZXMgLmR5bnN5bSB0byBiZSBzb3J0ZWQgdG8gbWF0Y2ggdGhlIEdPVCBidXQgR05VLXN0eWxlIHJlcXVpcmVzIHNvcnRpbmcgYnkgaGFzaCBjb2RlLgorI2lmICFkZWZpbmVkKF9fbWlwc19fKQorVEVTVChkbGZjbiwgZGxvcGVuX2xpYnJhcnlfd2l0aF9vbmx5X2dudV9oYXNoKSB7CisgIGRsZXJyb3IoKTsgLy8gQ2xlYXIgYW55IHBlbmRpbmcgZXJyb3JzLgorICB2b2lkKiBoYW5kbGUgPSBkbG9wZW4oIm5vLWVsZi1oYXNoLXRhYmxlLWxpYnJhcnkuc28iLCBSVExEX05PVyk7CisgIEFTU0VSVF9UUlVFKGhhbmRsZSA9PSBOVUxMKTsKKyAgQVNTRVJUX1NUUkVRKCJkbG9wZW4gZmFpbGVkOiBlbXB0eS9taXNzaW5nIERUX0hBU0ggaW4gXCJuby1lbGYtaGFzaC10YWJsZS1saWJyYXJ5LnNvXCIgKGJ1aWx0IHdpdGggLS1oYXNoLXN0eWxlPWdudT8pIiwgZGxlcnJvcigpKTsKK30KKyNlbmRpZgorI2VuZGlmCisKK1RFU1QoZGxmY24sIGRsb3Blbl9iYWRfZmxhZ3MpIHsKKyAgZGxlcnJvcigpOyAvLyBDbGVhciBhbnkgcGVuZGluZyBlcnJvcnMuCisgIHZvaWQqIGhhbmRsZTsKKworI2lmZGVmIF9fR0xJQkNfXworICAvLyBnbGliYyB3YXMgc21hcnQgZW5vdWdoIG5vdCB0byBkZWZpbmUgUlRMRF9OT1cgYXMgMCwgc28gaXQgY2FuIGRldGVjdCBtaXNzaW5nIGZsYWdzLgorICBoYW5kbGUgPSBkbG9wZW4oTlVMTCwgMCk7CisgIEFTU0VSVF9UUlVFKGhhbmRsZSA9PSBOVUxMKTsKKyAgQVNTRVJUX1NVQlNUUigiaW52YWxpZCIsIGRsZXJyb3IoKSk7CisjZW5kaWYKKworICBoYW5kbGUgPSBkbG9wZW4oTlVMTCwgMHhmZmZmZmZmZik7CisgIEFTU0VSVF9UUlVFKGhhbmRsZSA9PSBOVUxMKTsKKyAgQVNTRVJUX1NVQlNUUigiaW52YWxpZCIsIGRsZXJyb3IoKSk7CisKKyAgLy8gZ2xpYmMgYWN0dWFsbHkgYWxsb3dzIHlvdSB0byBjaG9vc2UgYm90aCBSVExEX05PVyBhbmQgUlRMRF9MQVpZIGF0IHRoZSBzYW1lIHRpbWUsIGFuZCBzbyBkbyB3ZS4KKyAgaGFuZGxlID0gZGxvcGVuKE5VTEwsIFJUTERfTk9XfFJUTERfTEFaWSk7CisgIEFTU0VSVF9UUlVFKGhhbmRsZSAhPSBOVUxMKTsKKyAgQVNTRVJUX1NVQlNUUihOVUxMLCBkbGVycm9yKCkpOworfQpkaWZmIC0tZ2l0IGEvdGVzdHMvZW1wdHkuY3BwIGIvdGVzdHMvZW1wdHkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9lbXB0eS5jcHAKZGlmZiAtLWdpdCBhL3Rlc3RzL2V2ZW50ZmRfdGVzdC5jcHAgYi90ZXN0cy9ldmVudGZkX3Rlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMmM1ZjAKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9ldmVudGZkX3Rlc3QuY3BwCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKworI2lmICFkZWZpbmVkKF9fR0xJQkNfXykgLy8gQW5kcm9pZCdzIHByZWJ1aWx0IGdjYydzIGhlYWRlciBmaWxlcyBkb24ndCBpbmNsdWRlIDxzeXMvZXZlbnRmZC5oPi4KKworI2luY2x1ZGUgPHN5cy9ldmVudGZkLmg+CisKK1RFU1QoZXZlbnRmZCwgc21va2UpIHsKKyAgdW5zaWduZWQgaW50IGluaXRpYWxfdmFsdWUgPSAyOworICBpbnQgZmQgPSBldmVudGZkKGluaXRpYWxfdmFsdWUsIE9fTk9OQkxPQ0spOworICBBU1NFUlRfTkUoZmQsIC0xKTsKKworICBldmVudGZkX3QgdmFsdWUgPSAxMjM7CisgIEFTU0VSVF9FUSgwLCBldmVudGZkX3JlYWQoZmQsICZ2YWx1ZSkpOworICBBU1NFUlRfRVEoaW5pdGlhbF92YWx1ZSwgdmFsdWUpOworCisgIC8vIFJlYWRpbmcgY2xlYXJzIHRoZSBjb3VudGVyLgorICBBU1NFUlRfRVEoLTEsIGV2ZW50ZmRfcmVhZChmZCwgJnZhbHVlKSk7CisgIEFTU0VSVF9FUShFQUdBSU4sIGVycm5vKTsKKworICAvLyBWYWx1ZXMgd3JpdHRlbiBhcmUgYWRkZWQgdW50aWwgdGhlIG5leHQgcmVhZC4KKyAgQVNTRVJUX0VRKDAsIGV2ZW50ZmRfd3JpdGUoZmQsIDEpKTsKKyAgQVNTRVJUX0VRKDAsIGV2ZW50ZmRfd3JpdGUoZmQsIDEpKTsKKyAgQVNTRVJUX0VRKDAsIGV2ZW50ZmRfd3JpdGUoZmQsIDEpKTsKKworICBBU1NFUlRfRVEoMCwgZXZlbnRmZF9yZWFkKGZkLCAmdmFsdWUpKTsKKyAgQVNTRVJUX0VRKDNVLCB2YWx1ZSk7CisKKyAgY2xvc2UoZmQpOworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL3Rlc3RzL2ZlbnZfdGVzdC5jcHAgYi90ZXN0cy9mZW52X3Rlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiMWJmYzMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mZW52X3Rlc3QuY3BwCkBAIC0wLDAgKzEsODUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKworI2luY2x1ZGUgPGZlbnYuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKworc3RhdGljIHZvaWQgVGVzdFJvdW5kaW5nKGZsb2F0IGV4cGVjdGF0aW9uMSwgZmxvYXQgZXhwZWN0YXRpb24yKSB7CisgIC8vIHZvbGF0aWxlIHRvIHByZXZlbnQgY29tcGlsZXIgb3B0aW1pemF0aW9ucy4KKyAgdm9sYXRpbGUgZmxvYXQgZiA9IDEuOTY4NzUwZjsKKyAgdm9sYXRpbGUgZmxvYXQgbSA9IDB4MS4wcDIzZjsKKyAgdm9sYXRpbGUgZmxvYXQgeCA9IGYgKyBtOworICBBU1NFUlRfRkxPQVRfRVEoZXhwZWN0YXRpb24xLCB4KTsKKyAgeCAtPSBtOworICBBU1NFUlRfRVEoZXhwZWN0YXRpb24yLCB4KTsKK30KKworc3RhdGljIHZvaWQgRGl2aWRlQnlaZXJvKCkgeworICAvLyB2b2xhdGlsZSB0byBwcmV2ZW50IGNvbXBpbGVyIG9wdGltaXphdGlvbnMuCisgIHZvbGF0aWxlIGZsb2F0IHplcm8gPSAwLjBmOworICB2b2xhdGlsZSBmbG9hdCByZXN1bHQgX19hdHRyaWJ1dGVfXygodW51c2VkKSkgPSAxMjMuMGYgLyB6ZXJvOworfQorCitURVNUKGZlbnYsIGZlc2V0cm91bmRfZmVnZXRyb3VuZF9GRV9UT05FQVJFU1QpIHsKKyAgZmVzZXRyb3VuZChGRV9UT05FQVJFU1QpOworICBBU1NFUlRfRVEoRkVfVE9ORUFSRVNULCBmZWdldHJvdW5kKCkpOworICBUZXN0Um91bmRpbmcoODM4ODYxMC4wZiwgMi4wZik7Cit9CisKK1RFU1QoZmVudiwgZmVzZXRyb3VuZF9mZWdldHJvdW5kX0ZFX1RPV0FSRFpFUk8pIHsKKyAgZmVzZXRyb3VuZChGRV9UT1dBUkRaRVJPKTsKKyAgQVNTRVJUX0VRKEZFX1RPV0FSRFpFUk8sIGZlZ2V0cm91bmQoKSk7CisgIFRlc3RSb3VuZGluZyg4Mzg4NjA5LjBmLCAxLjBmKTsKK30KKworVEVTVChmZW52LCBmZXNldHJvdW5kX2ZlZ2V0cm91bmRfRkVfVVBXQVJEKSB7CisgIGZlc2V0cm91bmQoRkVfVVBXQVJEKTsKKyAgQVNTRVJUX0VRKEZFX1VQV0FSRCwgZmVnZXRyb3VuZCgpKTsKKyAgVGVzdFJvdW5kaW5nKDgzODg2MTAuMGYsIDIuMGYpOworfQorCitURVNUKGZlbnYsIGZlc2V0cm91bmRfZmVnZXRyb3VuZF9GRV9ET1dOV0FSRCkgeworICBmZXNldHJvdW5kKEZFX0RPV05XQVJEKTsKKyAgQVNTRVJUX0VRKEZFX0RPV05XQVJELCBmZWdldHJvdW5kKCkpOworICBUZXN0Um91bmRpbmcoODM4ODYwOS4wZiwgMS4wZik7Cit9CisKK1RFU1QoZmVudiwgZmVjbGVhcmV4Y2VwdF9mZXRlc3RleGNlcHQpIHsKKyAgLy8gQ2xlYXJpbmcgY2xlYXJzLgorICBmZWNsZWFyZXhjZXB0KEZFX0FMTF9FWENFUFQpOworICBBU1NFUlRfRVEoMCwgZmV0ZXN0ZXhjZXB0KEZFX0FMTF9FWENFUFQpKTsKKworICAvLyBEaXZpZGluZyBieSB6ZXJvIHNldHMgRkVfRElWQllaRVJPLgorICBEaXZpZGVCeVplcm8oKTsKKyAgaW50IHJhaXNlZCA9IGZldGVzdGV4Y2VwdChGRV9ESVZCWVpFUk8gfCBGRV9PVkVSRkxPVyk7CisgIEFTU0VSVF9UUlVFKChyYWlzZWQgJiBGRV9PVkVSRkxPVykgPT0gMCk7CisgIEFTU0VSVF9UUlVFKChyYWlzZWQgJiBGRV9ESVZCWVpFUk8pICE9IDApOworCisgIC8vIENsZWFyaW5nIGFuIHVuc2V0IGJpdCBpcyBhIG5vLW9wLgorICBmZWNsZWFyZXhjZXB0KEZFX09WRVJGTE9XKTsKKyAgQVNTRVJUX1RSVUUoKHJhaXNlZCAmIEZFX09WRVJGTE9XKSA9PSAwKTsKKyAgQVNTRVJUX1RSVUUoKHJhaXNlZCAmIEZFX0RJVkJZWkVSTykgIT0gMCk7CisKKyAgLy8gQ2xlYXJpbmcgYSBzZXQgYml0IHdvcmtzLgorICBmZWNsZWFyZXhjZXB0KEZFX0RJVkJZWkVSTyk7CisgIEFTU0VSVF9FUSgwLCBmZXRlc3RleGNlcHQoRkVfQUxMX0VYQ0VQVCkpOworfQorCitURVNUKGZlbnYsIEZFX0RGTF9FTlZfbWFjcm8pIHsKKyAgQVNTRVJUX0VRKDAsIGZlc2V0ZW52KEZFX0RGTF9FTlYpKTsKK30KZGlmZiAtLWdpdCBhL3Rlc3RzL2ZvcnRpZnlfdGVzdC5jcHAgYi90ZXN0cy9mb3J0aWZ5X3Rlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4ZjBlNzYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9mb3J0aWZ5X3Rlc3QuY3BwCkBAIC0wLDAgKzEsNjU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKworLy8gV2UgaGF2ZSB0byBzYXkgIkRlYXRoVGVzdCIgaGVyZSBzbyBndGVzdCBrbm93cyB0byBydW4gdGhpcyB0ZXN0ICh3aGljaCBleGl0cykKKy8vIGluIGl0cyBvd24gcHJvY2Vzcy4gVW5mb3J0dW5hdGVseSwgdGhlIEMgcHJlcHJvY2Vzc29yIGRvZXNuJ3QgZ2l2ZSB1cyBhbgorLy8gZWFzeSB3YXkgdG8gY29uY2F0ZW5hdGUgc3RyaW5ncywgc28gd2UgbmVlZCB0byB1c2UgdGhlIGNvbXBsaWNhdGVkIG1ldGhvZAorLy8gYmVsb3cuICpzaWdoKgorI2RlZmluZSBERUFUSFRFU1RfUEFTVEVSKG5hbWUpIG5hbWUjI19EZWF0aFRlc3QKKyNkZWZpbmUgREVBVEhURVNUX0VWQUxVQVRPUihuYW1lKSBERUFUSFRFU1RfUEFTVEVSKG5hbWUpCisjZGVmaW5lIERFQVRIVEVTVCBERUFUSFRFU1RfRVZBTFVBVE9SKFRFU1RfTkFNRSkKKworI2lmIGRlZmluZWQoX0ZPUlRJRllfU09VUkNFKSAmJiBfRk9SVElGWV9TT1VSQ0UgPT0gMgorc3RydWN0IGZvbyB7CisgIGNoYXIgZW1wdHlbMF07CisgIGNoYXIgb25lWzFdOworICBjaGFyIGFbMTBdOworICBjaGFyIGJbMTBdOworfTsKKworI2lmbmRlZiBfX2NsYW5nX18KKy8vIFRoaXMgdGVzdCBpcyBkaXNhYmxlZCBpbiBjbGFuZyBiZWNhdXNlIGNsYW5nIGRvZXNuJ3QgcHJvcGVybHkgZGV0ZWN0CisvLyB0aGlzIGJ1ZmZlciBvdmVyZmxvdy4gVE9ETzogRml4IGNsYW5nLgorVEVTVChERUFUSFRFU1QsIHN0cm5jcHlfZm9ydGlmaWVkMikgeworICA6OnRlc3Rpbmc6OkZMQUdTX2d0ZXN0X2RlYXRoX3Rlc3Rfc3R5bGUgPSAidGhyZWFkc2FmZSI7CisgIGZvbyBteWZvbzsKKyAgaW50IGNvcHlfYW10ID0gYXRvaSgiMTEiKTsKKyAgQVNTRVJUX0VYSVQoc3RybmNweShteWZvby5hLCAiMDEyMzQ1Njc4OTAiLCBjb3B5X2FtdCksCisgICAgICAgICAgICAgIHRlc3Rpbmc6OktpbGxlZEJ5U2lnbmFsKFNJR0FCUlQpLCAiIik7Cit9CisjZW5kaWYKKworI2lmbmRlZiBfX2NsYW5nX18KKy8vIFRoaXMgdGVzdCBpcyBkaXNhYmxlZCBpbiBjbGFuZyBiZWNhdXNlIGNsYW5nIGRvZXNuJ3QgcHJvcGVybHkgZGV0ZWN0CisvLyB0aGlzIGJ1ZmZlciBvdmVyZmxvdy4gVE9ETzogRml4IGNsYW5nLgorVEVTVChERUFUSFRFU1QsIHNwcmludGZfZm9ydGlmaWVkMikgeworICA6OnRlc3Rpbmc6OkZMQUdTX2d0ZXN0X2RlYXRoX3Rlc3Rfc3R5bGUgPSAidGhyZWFkc2FmZSI7CisgIGZvbyBteWZvbzsKKyAgY2hhciBzb3VyY2VfYnVmWzE1XTsKKyAgbWVtY3B5KHNvdXJjZV9idWYsICIxMjM0NTY3ODkwMTIzNCIsIDE1KTsKKyAgQVNTRVJUX0VYSVQoc3ByaW50ZihteWZvby5hLCAiJXMiLCBzb3VyY2VfYnVmKSwKKyAgICAgICAgICAgICAgdGVzdGluZzo6S2lsbGVkQnlTaWduYWwoU0lHQUJSVCksICIiKTsKK30KKyNlbmRpZgorCisjaWZuZGVmIF9fY2xhbmdfXworLy8gVGhpcyB0ZXN0IGlzIGRpc2FibGVkIGluIGNsYW5nIGJlY2F1c2UgY2xhbmcgZG9lc24ndCBwcm9wZXJseSBkZXRlY3QKKy8vIHRoaXMgYnVmZmVyIG92ZXJmbG93LiBUT0RPOiBGaXggY2xhbmcuCitURVNUKERFQVRIVEVTVCwgc3ByaW50ZjJfZm9ydGlmaWVkMikgeworICA6OnRlc3Rpbmc6OkZMQUdTX2d0ZXN0X2RlYXRoX3Rlc3Rfc3R5bGUgPSAidGhyZWFkc2FmZSI7CisgIGZvbyBteWZvbzsKKyAgQVNTRVJUX0VYSVQoc3ByaW50ZihteWZvby5hLCAiMDEyMzQ1Njc4OSIpLAorICAgICAgICAgICAgICB0ZXN0aW5nOjpLaWxsZWRCeVNpZ25hbChTSUdBQlJUKSwgIiIpOworfQorI2VuZGlmCisKKyNpZm5kZWYgX19jbGFuZ19fCisvLyBUaGVzZSB0ZXN0cyBhcmUgZGlzYWJsZWQgaW4gY2xhbmcgYmVjYXVzZSBjbGFuZyBkb2Vzbid0IHByb3Blcmx5IGRldGVjdAorLy8gdGhpcyBidWZmZXIgb3ZlcmZsb3cuIFRPRE86IEZpeCBjbGFuZy4KK3N0YXRpYyBpbnQgdnNwcmludGZfaGVscGVyMihjb25zdCBjaGFyICpmbXQsIC4uLikgeworICBmb28gbXlmb287CisgIHZhX2xpc3QgdmE7CisgIGludCByZXN1bHQ7CisKKyAgdmFfc3RhcnQodmEsIGZtdCk7CisgIHJlc3VsdCA9IHZzcHJpbnRmKG15Zm9vLmEsIGZtdCwgdmEpOyAvLyBzaG91bGQgY3Jhc2ggaGVyZQorICB2YV9lbmQodmEpOworICByZXR1cm4gcmVzdWx0OworfQorCitURVNUKERFQVRIVEVTVCwgdnNwcmludGZfZm9ydGlmaWVkMikgeworICA6OnRlc3Rpbmc6OkZMQUdTX2d0ZXN0X2RlYXRoX3Rlc3Rfc3R5bGUgPSAidGhyZWFkc2FmZSI7CisgIEFTU0VSVF9FWElUKHZzcHJpbnRmX2hlbHBlcjIoIiVzIiwgIjAxMjM0NTY3ODkiKSwgdGVzdGluZzo6S2lsbGVkQnlTaWduYWwoU0lHQUJSVCksICIiKTsKK30KKworVEVTVChERUFUSFRFU1QsIHZzcHJpbnRmMl9mb3J0aWZpZWQyKSB7CisgIDo6dGVzdGluZzo6RkxBR1NfZ3Rlc3RfZGVhdGhfdGVzdF9zdHlsZSA9ICJ0aHJlYWRzYWZlIjsKKyAgQVNTRVJUX0VYSVQodnNwcmludGZfaGVscGVyMigiMDEyMzQ1Njc4OSIpLCB0ZXN0aW5nOjpLaWxsZWRCeVNpZ25hbChTSUdBQlJUKSwgIiIpOworfQorI2VuZGlmCisKKyNpZm5kZWYgX19jbGFuZ19fCisvLyBUaGVzZSB0ZXN0cyBhcmUgZGlzYWJsZWQgaW4gY2xhbmcgYmVjYXVzZSBjbGFuZyBkb2Vzbid0IHByb3Blcmx5IGRldGVjdAorLy8gdGhpcyBidWZmZXIgb3ZlcmZsb3cuIFRPRE86IEZpeCBjbGFuZy4KK3N0YXRpYyBpbnQgdnNucHJpbnRmX2hlbHBlcjIoY29uc3QgY2hhciAqZm10LCAuLi4pIHsKKyAgZm9vIG15Zm9vOworICB2YV9saXN0IHZhOworICBpbnQgcmVzdWx0OworICBzaXplX3Qgc2l6ZSA9IGF0b2koIjExIik7CisKKyAgdmFfc3RhcnQodmEsIGZtdCk7CisgIHJlc3VsdCA9IHZzbnByaW50ZihteWZvby5hLCBzaXplLCBmbXQsIHZhKTsgLy8gc2hvdWxkIGNyYXNoIGhlcmUKKyAgdmFfZW5kKHZhKTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworVEVTVChERUFUSFRFU1QsIHZzbnByaW50Zl9mb3J0aWZpZWQyKSB7CisgIDo6dGVzdGluZzo6RkxBR1NfZ3Rlc3RfZGVhdGhfdGVzdF9zdHlsZSA9ICJ0aHJlYWRzYWZlIjsKKyAgQVNTRVJUX0VYSVQodnNucHJpbnRmX2hlbHBlcjIoIiVzIiwgIjAxMjM0NTY3ODkiKSwgdGVzdGluZzo6S2lsbGVkQnlTaWduYWwoU0lHQUJSVCksICIiKTsKK30KKworVEVTVChERUFUSFRFU1QsIHZzbnByaW50ZjJfZm9ydGlmaWVkMikgeworICA6OnRlc3Rpbmc6OkZMQUdTX2d0ZXN0X2RlYXRoX3Rlc3Rfc3R5bGUgPSAidGhyZWFkc2FmZSI7CisgIEFTU0VSVF9FWElUKHZzbnByaW50Zl9oZWxwZXIyKCIwMTIzNDU2Nzg5IiksIHRlc3Rpbmc6OktpbGxlZEJ5U2lnbmFsKFNJR0FCUlQpLCAiIik7Cit9CisjZW5kaWYKKworI2lmIF9fQklPTklDX18KKworI2lmbmRlZiBfX2NsYW5nX18KKy8vIHplcm8gc2l6ZWQgdGFyZ2V0IHdpdGggIlwwIiBzb3VyY2UgKHNob3VsZCBmYWlsKQorLy8gVGhpcyB0ZXN0IGlzIGRpc2FibGVkIGluIGNsYW5nIGJlY2F1c2UgY2xhbmcgZG9lc24ndCBwcm9wZXJseSBkZXRlY3QKKy8vIHRoaXMgYnVmZmVyIG92ZXJmbG93LiBUT0RPOiBGaXggY2xhbmcuCitURVNUKERFQVRIVEVTVCwgc3RyY3B5X2ZvcnRpZmllZDIpIHsKKyAgOjp0ZXN0aW5nOjpGTEFHU19ndGVzdF9kZWF0aF90ZXN0X3N0eWxlID0gInRocmVhZHNhZmUiOworICBmb28gbXlmb287CisgIGNoYXIqIHNyYyA9IHN0cmR1cCgiIik7CisgIEFTU0VSVF9FWElUKHN0cmNweShteWZvby5lbXB0eSwgc3JjKSwKKyAgICAgICAgICAgICAgdGVzdGluZzo6S2lsbGVkQnlTaWduYWwoU0lHQUJSVCksICIiKTsKKyAgZnJlZShzcmMpOworfQorI2VuZGlmCisKKyNpZm5kZWYgX19jbGFuZ19fCisvLyB6ZXJvIHNpemVkIHRhcmdldCB3aXRoIGxvbmdlciBzb3VyY2UgKHNob3VsZCBmYWlsKQorLy8gVGhpcyB0ZXN0IGlzIGRpc2FibGVkIGluIGNsYW5nIGJlY2F1c2UgY2xhbmcgZG9lc24ndCBwcm9wZXJseSBkZXRlY3QKKy8vIHRoaXMgYnVmZmVyIG92ZXJmbG93LiBUT0RPOiBGaXggY2xhbmcuCitURVNUKERFQVRIVEVTVCwgc3RyY3B5Ml9mb3J0aWZpZWQyKSB7CisgIDo6dGVzdGluZzo6RkxBR1NfZ3Rlc3RfZGVhdGhfdGVzdF9zdHlsZSA9ICJ0aHJlYWRzYWZlIjsKKyAgZm9vIG15Zm9vOworICBjaGFyKiBzcmMgPSBzdHJkdXAoIjEiKTsKKyAgQVNTRVJUX0VYSVQoc3RyY3B5KG15Zm9vLmVtcHR5LCBzcmMpLAorICAgICAgICAgICAgICB0ZXN0aW5nOjpLaWxsZWRCeVNpZ25hbChTSUdBQlJUKSwgIiIpOworICBmcmVlKHNyYyk7Cit9CisjZW5kaWYKKworI2lmbmRlZiBfX2NsYW5nX18KKy8vIG9uZSBieXRlIHRhcmdldCB3aXRoIGxvbmdlciBzb3VyY2UgKHNob3VsZCBmYWlsKQorLy8gVGhpcyB0ZXN0IGlzIGRpc2FibGVkIGluIGNsYW5nIGJlY2F1c2UgY2xhbmcgZG9lc24ndCBwcm9wZXJseSBkZXRlY3QKKy8vIHRoaXMgYnVmZmVyIG92ZXJmbG93LiBUT0RPOiBGaXggY2xhbmcuCitURVNUKERFQVRIVEVTVCwgc3RyY3B5M19mb3J0aWZpZWQyKSB7CisgIDo6dGVzdGluZzo6RkxBR1NfZ3Rlc3RfZGVhdGhfdGVzdF9zdHlsZSA9ICJ0aHJlYWRzYWZlIjsKKyAgZm9vIG15Zm9vOworICBjaGFyKiBzcmMgPSBzdHJkdXAoIjEyIik7CisgIEFTU0VSVF9FWElUKHN0cmNweShteWZvby5vbmUsIHNyYyksCisgICAgICAgICAgICAgIHRlc3Rpbmc6OktpbGxlZEJ5U2lnbmFsKFNJR0FCUlQpLCAiIik7CisgIGZyZWUoc3JjKTsKK30KKyNlbmRpZgorCisjaWZuZGVmIF9fY2xhbmdfXworLy8gVGhpcyB0ZXN0IGlzIGRpc2FibGVkIGluIGNsYW5nIGJlY2F1c2UgY2xhbmcgZG9lc24ndCBwcm9wZXJseSBkZXRlY3QKKy8vIHRoaXMgYnVmZmVyIG92ZXJmbG93LiBUT0RPOiBGaXggY2xhbmcuCitURVNUKERFQVRIVEVTVCwgc3RyY2hyX2ZvcnRpZmllZDIpIHsKKyAgOjp0ZXN0aW5nOjpGTEFHU19ndGVzdF9kZWF0aF90ZXN0X3N0eWxlID0gInRocmVhZHNhZmUiOworICBmb28gbXlmb287CisgIG1lbWNweShteWZvby5hLCAiMDEyMzQ1Njc4OSIsIHNpemVvZihteWZvby5hKSk7CisgIG15Zm9vLmJbMF0gPSAnXDAnOworICBBU1NFUlRfRVhJVChwcmludGYoIiVzIiwgc3RyY2hyKG15Zm9vLmEsICdhJykpLAorICAgICAgICAgICAgICB0ZXN0aW5nOjpLaWxsZWRCeVNpZ25hbChTSUdBQlJUKSwgIiIpOworfQorI2VuZGlmCisKKyNpZm5kZWYgX19jbGFuZ19fCisvLyBUaGlzIHRlc3QgaXMgZGlzYWJsZWQgaW4gY2xhbmcgYmVjYXVzZSBjbGFuZyBkb2Vzbid0IHByb3Blcmx5IGRldGVjdAorLy8gdGhpcyBidWZmZXIgb3ZlcmZsb3cuIFRPRE86IEZpeCBjbGFuZy4KK1RFU1QoREVBVEhURVNULCBzdHJyY2hyX2ZvcnRpZmllZDIpIHsKKyAgOjp0ZXN0aW5nOjpGTEFHU19ndGVzdF9kZWF0aF90ZXN0X3N0eWxlID0gInRocmVhZHNhZmUiOworICBmb28gbXlmb287CisgIG1lbWNweShteWZvby5hLCAiMDEyMzQ1Njc4OSIsIDEwKTsKKyAgbWVtY3B5KG15Zm9vLmIsICIwMTIzNCIsIDYpOworICBBU1NFUlRfRVhJVChwcmludGYoIiVzIiwgc3RycmNocihteWZvby5hLCAnYScpKSwKKyAgICAgICAgICAgICAgdGVzdGluZzo6S2lsbGVkQnlTaWduYWwoU0lHQUJSVCksICIiKTsKK30KKyNlbmRpZgorCisjaWZuZGVmIF9fY2xhbmdfXworLy8gVGhpcyB0ZXN0IGlzIGRpc2FibGVkIGluIGNsYW5nIGJlY2F1c2UgY2xhbmcgZG9lc24ndCBwcm9wZXJseSBkZXRlY3QKKy8vIHRoaXMgYnVmZmVyIG92ZXJmbG93LiBUT0RPOiBGaXggY2xhbmcuCitURVNUKERFQVRIVEVTVCwgc3RybGNweV9mb3J0aWZpZWQyKSB7CisgIDo6dGVzdGluZzo6RkxBR1NfZ3Rlc3RfZGVhdGhfdGVzdF9zdHlsZSA9ICJ0aHJlYWRzYWZlIjsKKyAgZm9vIG15Zm9vOworICBzdHJjcHkobXlmb28uYSwgIjAxIik7CisgIHNpemVfdCBuID0gc3RybGVuKG15Zm9vLmEpOworICBBU1NFUlRfRVhJVChzdHJsY3B5KG15Zm9vLm9uZSwgbXlmb28uYSwgbiksCisgICAgICAgICAgICAgIHRlc3Rpbmc6OktpbGxlZEJ5U2lnbmFsKFNJR0FCUlQpLCAiIik7Cit9CisjZW5kaWYKKworI2lmbmRlZiBfX2NsYW5nX18KKy8vIFRoaXMgdGVzdCBpcyBkaXNhYmxlZCBpbiBjbGFuZyBiZWNhdXNlIGNsYW5nIGRvZXNuJ3QgcHJvcGVybHkgZGV0ZWN0CisvLyB0aGlzIGJ1ZmZlciBvdmVyZmxvdy4gVE9ETzogRml4IGNsYW5nLgorVEVTVChERUFUSFRFU1QsIHN0cmxjYXRfZm9ydGlmaWVkMikgeworICA6OnRlc3Rpbmc6OkZMQUdTX2d0ZXN0X2RlYXRoX3Rlc3Rfc3R5bGUgPSAidGhyZWFkc2FmZSI7CisgIGZvbyBteWZvbzsKKyAgc3RyY3B5KG15Zm9vLmEsICIwMSIpOworICBteWZvby5vbmVbMF0gPSAnXDAnOworICBzaXplX3QgbiA9IHN0cmxlbihteWZvby5hKTsKKyAgQVNTRVJUX0VYSVQoc3RybGNhdChteWZvby5vbmUsIG15Zm9vLmEsIG4pLAorICAgICAgICAgICAgICB0ZXN0aW5nOjpLaWxsZWRCeVNpZ25hbChTSUdBQlJUKSwgIiIpOworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBfX0JJT05JQ19fICovCisKKyNpZm5kZWYgX19jbGFuZ19fCisvLyBUaGlzIHRlc3QgaXMgZGlzYWJsZWQgaW4gY2xhbmcgYmVjYXVzZSBjbGFuZyBkb2Vzbid0IHByb3Blcmx5IGRldGVjdAorLy8gdGhpcyBidWZmZXIgb3ZlcmZsb3cuIFRPRE86IEZpeCBjbGFuZy4KK1RFU1QoREVBVEhURVNULCBzdHJuY2F0X2ZvcnRpZmllZDIpIHsKKyAgOjp0ZXN0aW5nOjpGTEFHU19ndGVzdF9kZWF0aF90ZXN0X3N0eWxlID0gInRocmVhZHNhZmUiOworICBmb28gbXlmb287CisgIHNpemVfdCBuID0gYXRvaSgiMTAiKTsgLy8gYXZvaWQgY29tcGlsZXIgb3B0aW1pemF0aW9ucworICBzdHJuY3B5KG15Zm9vLmEsICIwMTIzNDU2NzgiLCBuKTsKKyAgQVNTRVJUX0VYSVQoc3RybmNhdChteWZvby5hLCAiOSIsIG4pLCB0ZXN0aW5nOjpLaWxsZWRCeVNpZ25hbChTSUdBQlJUKSwgIiIpOworfQorI2VuZGlmCisKKyNpZm5kZWYgX19jbGFuZ19fCisvLyBUaGlzIHRlc3QgaXMgZGlzYWJsZWQgaW4gY2xhbmcgYmVjYXVzZSBjbGFuZyBkb2Vzbid0IHByb3Blcmx5IGRldGVjdAorLy8gdGhpcyBidWZmZXIgb3ZlcmZsb3cuIFRPRE86IEZpeCBjbGFuZy4KK1RFU1QoREVBVEhURVNULCBzdHJuY2F0Ml9mb3J0aWZpZWQyKSB7CisgIDo6dGVzdGluZzo6RkxBR1NfZ3Rlc3RfZGVhdGhfdGVzdF9zdHlsZSA9ICJ0aHJlYWRzYWZlIjsKKyAgZm9vIG15Zm9vOworICBteWZvby5hWzBdID0gJ1wwJzsKKyAgc2l6ZV90IG4gPSBhdG9pKCIxMCIpOyAvLyBhdm9pZCBjb21waWxlciBvcHRpbWl6YXRpb25zCisgIEFTU0VSVF9FWElUKHN0cm5jYXQobXlmb28uYSwgIjAxMjM0NTY3ODkiLCBuKSwgdGVzdGluZzo6S2lsbGVkQnlTaWduYWwoU0lHQUJSVCksICIiKTsKK30KKyNlbmRpZgorCitURVNUKERFQVRIVEVTVCwgc3RybmNhdDNfZm9ydGlmaWVkMikgeworICA6OnRlc3Rpbmc6OkZMQUdTX2d0ZXN0X2RlYXRoX3Rlc3Rfc3R5bGUgPSAidGhyZWFkc2FmZSI7CisgIGZvbyBteWZvbzsKKyAgbWVtY3B5KG15Zm9vLmEsICIwMTIzNDU2Nzg5Iiwgc2l6ZW9mKG15Zm9vLmEpKTsgLy8gdW50ZXJtaW5hdGVkIHN0cmluZworICBteWZvby5iWzBdID0gJ1wwJzsKKyAgc2l6ZV90IG4gPSBhdG9pKCIxMCIpOyAvLyBhdm9pZCBjb21waWxlciBvcHRpbWl6YXRpb25zCisgIEFTU0VSVF9FWElUKHN0cm5jYXQobXlmb28uYiwgbXlmb28uYSwgbiksIHRlc3Rpbmc6OktpbGxlZEJ5U2lnbmFsKFNJR0FCUlQpLCAiIik7Cit9CisKKyNpZm5kZWYgX19jbGFuZ19fCisvLyBUaGlzIHRlc3QgaXMgZGlzYWJsZWQgaW4gY2xhbmcgYmVjYXVzZSBjbGFuZyBkb2Vzbid0IHByb3Blcmx5IGRldGVjdAorLy8gdGhpcyBidWZmZXIgb3ZlcmZsb3cuIFRPRE86IEZpeCBjbGFuZy4KK1RFU1QoREVBVEhURVNULCBzdHJjYXRfZm9ydGlmaWVkMikgeworICA6OnRlc3Rpbmc6OkZMQUdTX2d0ZXN0X2RlYXRoX3Rlc3Rfc3R5bGUgPSAidGhyZWFkc2FmZSI7CisgIGNoYXIgc3JjWzExXTsKKyAgc3RyY3B5KHNyYywgIjAxMjM0NTY3ODkiKTsKKyAgZm9vIG15Zm9vOworICBteWZvby5hWzBdID0gJ1wwJzsKKyAgQVNTRVJUX0VYSVQoc3RyY2F0KG15Zm9vLmEsIHNyYyksIHRlc3Rpbmc6OktpbGxlZEJ5U2lnbmFsKFNJR0FCUlQpLCAiIik7Cit9CisjZW5kaWYKKworVEVTVChERUFUSFRFU1QsIHN0cmNhdDJfZm9ydGlmaWVkMikgeworICA6OnRlc3Rpbmc6OkZMQUdTX2d0ZXN0X2RlYXRoX3Rlc3Rfc3R5bGUgPSAidGhyZWFkc2FmZSI7CisgIGZvbyBteWZvbzsKKyAgbWVtY3B5KG15Zm9vLmEsICIwMTIzNDU2Nzg5Iiwgc2l6ZW9mKG15Zm9vLmEpKTsgLy8gdW50ZXJtaW5hdGVkIHN0cmluZworICBteWZvby5iWzBdID0gJ1wwJzsKKyAgQVNTRVJUX0VYSVQoc3RyY2F0KG15Zm9vLmIsIG15Zm9vLmEpLCB0ZXN0aW5nOjpLaWxsZWRCeVNpZ25hbChTSUdBQlJUKSwgIiIpOworfQorCitURVNUKERFQVRIVEVTVCwgc25wcmludGZfZm9ydGlmaWVkMikgeworICA6OnRlc3Rpbmc6OkZMQUdTX2d0ZXN0X2RlYXRoX3Rlc3Rfc3R5bGUgPSAidGhyZWFkc2FmZSI7CisgIGZvbyBteWZvbzsKKyAgc3RyY3B5KG15Zm9vLmEsICIwMTIzNDU2NzgiKTsKKyAgc2l6ZV90IG4gPSBzdHJsZW4obXlmb28uYSkgKyAyOworICBBU1NFUlRfRVhJVChzbnByaW50ZihteWZvby5iLCBuLCAiYSVzIiwgbXlmb28uYSksIHRlc3Rpbmc6OktpbGxlZEJ5U2lnbmFsKFNJR0FCUlQpLCAiIik7Cit9CisKK1RFU1QoREVBVEhURVNULCBiemVyb19mb3J0aWZpZWQyKSB7CisgIDo6dGVzdGluZzo6RkxBR1NfZ3Rlc3RfZGVhdGhfdGVzdF9zdHlsZSA9ICJ0aHJlYWRzYWZlIjsKKyAgZm9vIG15Zm9vOworICBtZW1jcHkobXlmb28uYiwgIjAxMjM0NTY3ODkiLCBzaXplb2YobXlmb28uYikpOworICBzaXplX3QgbiA9IGF0b2koIjExIik7CisgIEFTU0VSVF9FWElUKGJ6ZXJvKG15Zm9vLmIsIG4pLCB0ZXN0aW5nOjpLaWxsZWRCeVNpZ25hbChTSUdBQlJUKSwgIiIpOworfQorCisjZW5kaWYgLyogZGVmaW5lZChfRk9SVElGWV9TT1VSQ0UpICYmIF9GT1JUSUZZX1NPVVJDRT0yICovCisKKyNpZiBfX0JJT05JQ19fCisvLyBtdWx0aWJ5dGUgdGFyZ2V0IHdoZXJlIHdlIG92ZXIgZmlsbCAoc2hvdWxkIGZhaWwpCitURVNUKERFQVRIVEVTVCwgc3RyY3B5X2ZvcnRpZmllZCkgeworICA6OnRlc3Rpbmc6OkZMQUdTX2d0ZXN0X2RlYXRoX3Rlc3Rfc3R5bGUgPSAidGhyZWFkc2FmZSI7CisgIGNoYXIgYnVmWzEwXTsKKyAgY2hhciAqb3JpZyA9IHN0cmR1cCgiMDEyMzQ1Njc4OSIpOworICBBU1NFUlRfRVhJVChzdHJjcHkoYnVmLCBvcmlnKSwgdGVzdGluZzo6S2lsbGVkQnlTaWduYWwoU0lHQUJSVCksICIiKTsKKyAgZnJlZShvcmlnKTsKK30KKworLy8gemVybyBzaXplZCB0YXJnZXQgd2l0aCAiXDAiIHNvdXJjZSAoc2hvdWxkIGZhaWwpCitURVNUKERFQVRIVEVTVCwgc3RyY3B5Ml9mb3J0aWZpZWQpIHsKKyAgOjp0ZXN0aW5nOjpGTEFHU19ndGVzdF9kZWF0aF90ZXN0X3N0eWxlID0gInRocmVhZHNhZmUiOworICBjaGFyIGJ1ZlswXTsKKyAgY2hhciAqb3JpZyA9IHN0cmR1cCgiIik7CisgIEFTU0VSVF9FWElUKHN0cmNweShidWYsIG9yaWcpLCB0ZXN0aW5nOjpLaWxsZWRCeVNpZ25hbChTSUdBQlJUKSwgIiIpOworICBmcmVlKG9yaWcpOworfQorCisvLyB6ZXJvIHNpemVkIHRhcmdldCB3aXRoIGxvbmdlciBzb3VyY2UgKHNob3VsZCBmYWlsKQorVEVTVChERUFUSFRFU1QsIHN0cmNweTNfZm9ydGlmaWVkKSB7CisgIDo6dGVzdGluZzo6RkxBR1NfZ3Rlc3RfZGVhdGhfdGVzdF9zdHlsZSA9ICJ0aHJlYWRzYWZlIjsKKyAgY2hhciBidWZbMF07CisgIGNoYXIgKm9yaWcgPSBzdHJkdXAoIjEiKTsKKyAgQVNTRVJUX0VYSVQoc3RyY3B5KGJ1Ziwgb3JpZyksIHRlc3Rpbmc6OktpbGxlZEJ5U2lnbmFsKFNJR0FCUlQpLCAiIik7CisgIGZyZWUob3JpZyk7Cit9CisKKy8vIG9uZSBieXRlIHRhcmdldCB3aXRoIGxvbmdlciBzb3VyY2UgKHNob3VsZCBmYWlsKQorVEVTVChERUFUSFRFU1QsIHN0cmNweTRfZm9ydGlmaWVkKSB7CisgIDo6dGVzdGluZzo6RkxBR1NfZ3Rlc3RfZGVhdGhfdGVzdF9zdHlsZSA9ICJ0aHJlYWRzYWZlIjsKKyAgY2hhciBidWZbMV07CisgIGNoYXIgKm9yaWcgPSBzdHJkdXAoIjEyIik7CisgIEFTU0VSVF9FWElUKHN0cmNweShidWYsIG9yaWcpLCB0ZXN0aW5nOjpLaWxsZWRCeVNpZ25hbChTSUdBQlJUKSwgIiIpOworICBmcmVlKG9yaWcpOworfQorCitURVNUKERFQVRIVEVTVCwgc3RybGVuX2ZvcnRpZmllZCkgeworICA6OnRlc3Rpbmc6OkZMQUdTX2d0ZXN0X2RlYXRoX3Rlc3Rfc3R5bGUgPSAidGhyZWFkc2FmZSI7CisgIGNoYXIgYnVmWzEwXTsKKyAgbWVtY3B5KGJ1ZiwgIjAxMjM0NTY3ODkiLCBzaXplb2YoYnVmKSk7CisgIEFTU0VSVF9FWElUKHByaW50ZigiJWQiLCBzdHJsZW4oYnVmKSksIHRlc3Rpbmc6OktpbGxlZEJ5U2lnbmFsKFNJR0FCUlQpLCAiIik7Cit9CisKK1RFU1QoREVBVEhURVNULCBzdHJjaHJfZm9ydGlmaWVkKSB7CisgIDo6dGVzdGluZzo6RkxBR1NfZ3Rlc3RfZGVhdGhfdGVzdF9zdHlsZSA9ICJ0aHJlYWRzYWZlIjsKKyAgY2hhciBidWZbMTBdOworICBtZW1jcHkoYnVmLCAiMDEyMzQ1Njc4OSIsIHNpemVvZihidWYpKTsKKyAgQVNTRVJUX0VYSVQocHJpbnRmKCIlcyIsIHN0cmNocihidWYsICdhJykpLCB0ZXN0aW5nOjpLaWxsZWRCeVNpZ25hbChTSUdBQlJUKSwgIiIpOworfQorCitURVNUKERFQVRIVEVTVCwgc3RycmNocl9mb3J0aWZpZWQpIHsKKyAgOjp0ZXN0aW5nOjpGTEFHU19ndGVzdF9kZWF0aF90ZXN0X3N0eWxlID0gInRocmVhZHNhZmUiOworICBjaGFyIGJ1ZlsxMF07CisgIG1lbWNweShidWYsICIwMTIzNDU2Nzg5Iiwgc2l6ZW9mKGJ1ZikpOworICBBU1NFUlRfRVhJVChwcmludGYoIiVzIiwgc3RycmNocihidWYsICdhJykpLCB0ZXN0aW5nOjpLaWxsZWRCeVNpZ25hbChTSUdBQlJUKSwgIiIpOworfQorCitURVNUKERFQVRIVEVTVCwgc3RybGNweV9mb3J0aWZpZWQpIHsKKyAgOjp0ZXN0aW5nOjpGTEFHU19ndGVzdF9kZWF0aF90ZXN0X3N0eWxlID0gInRocmVhZHNhZmUiOworICBjaGFyIGJ1ZmFbMTVdOworICBjaGFyIGJ1ZmJbMTBdOworICBzdHJjcHkoYnVmYSwgIjAxMjM0NTY3ODkwMTIzIik7CisgIHNpemVfdCBuID0gc3RybGVuKGJ1ZmEpOworICBBU1NFUlRfRVhJVChzdHJsY3B5KGJ1ZmIsIGJ1ZmEsIG4pLCB0ZXN0aW5nOjpLaWxsZWRCeVNpZ25hbChTSUdBQlJUKSwgIiIpOworfQorCitURVNUKERFQVRIVEVTVCwgc3RybGNhdF9mb3J0aWZpZWQpIHsKKyAgOjp0ZXN0aW5nOjpGTEFHU19ndGVzdF9kZWF0aF90ZXN0X3N0eWxlID0gInRocmVhZHNhZmUiOworICBjaGFyIGJ1ZmFbMTVdOworICBjaGFyIGJ1ZmJbMTBdOworICBidWZiWzBdID0gJ1wwJzsKKyAgc3RyY3B5KGJ1ZmEsICIwMTIzNDU2Nzg5MDEyMyIpOworICBzaXplX3QgbiA9IHN0cmxlbihidWZhKTsKKyAgQVNTRVJUX0VYSVQoc3RybGNhdChidWZiLCBidWZhLCBuKSwgdGVzdGluZzo6S2lsbGVkQnlTaWduYWwoU0lHQUJSVCksICIiKTsKK30KKworI2VuZGlmCisKK1RFU1QoREVBVEhURVNULCBzcHJpbnRmX2ZvcnRpZmllZCkgeworICA6OnRlc3Rpbmc6OkZMQUdTX2d0ZXN0X2RlYXRoX3Rlc3Rfc3R5bGUgPSAidGhyZWFkc2FmZSI7CisgIGNoYXIgYnVmWzEwXTsKKyAgY2hhciBzb3VyY2VfYnVmWzE1XTsKKyAgbWVtY3B5KHNvdXJjZV9idWYsICIxMjM0NTY3ODkwMTIzNCIsIDE1KTsKKyAgQVNTRVJUX0VYSVQoc3ByaW50ZihidWYsICIlcyIsIHNvdXJjZV9idWYpLCB0ZXN0aW5nOjpLaWxsZWRCeVNpZ25hbChTSUdBQlJUKSwgIiIpOworfQorCitURVNUKERFQVRIVEVTVCwgc3ByaW50ZjJfZm9ydGlmaWVkKSB7CisgIDo6dGVzdGluZzo6RkxBR1NfZ3Rlc3RfZGVhdGhfdGVzdF9zdHlsZSA9ICJ0aHJlYWRzYWZlIjsKKyAgY2hhciBidWZbNV07CisgIEFTU0VSVF9FWElUKHNwcmludGYoYnVmLCAiYWFhYWEiKSwgdGVzdGluZzo6S2lsbGVkQnlTaWduYWwoU0lHQUJSVCksICIiKTsKK30KKworc3RhdGljIGludCB2c3ByaW50Zl9oZWxwZXIoY29uc3QgY2hhciAqZm10LCAuLi4pIHsKKyAgY2hhciBidWZbMTBdOworICB2YV9saXN0IHZhOworICBpbnQgcmVzdWx0OworCisgIHZhX3N0YXJ0KHZhLCBmbXQpOworICByZXN1bHQgPSB2c3ByaW50ZihidWYsIGZtdCwgdmEpOyAvLyBzaG91bGQgY3Jhc2ggaGVyZQorICB2YV9lbmQodmEpOworICByZXR1cm4gcmVzdWx0OworfQorCitURVNUKERFQVRIVEVTVCwgdnNwcmludGZfZm9ydGlmaWVkKSB7CisgIDo6dGVzdGluZzo6RkxBR1NfZ3Rlc3RfZGVhdGhfdGVzdF9zdHlsZSA9ICJ0aHJlYWRzYWZlIjsKKyAgQVNTRVJUX0VYSVQodnNwcmludGZfaGVscGVyKCIlcyIsICIwMTIzNDU2Nzg5IiksIHRlc3Rpbmc6OktpbGxlZEJ5U2lnbmFsKFNJR0FCUlQpLCAiIik7Cit9CisKK1RFU1QoREVBVEhURVNULCB2c3ByaW50ZjJfZm9ydGlmaWVkKSB7CisgIDo6dGVzdGluZzo6RkxBR1NfZ3Rlc3RfZGVhdGhfdGVzdF9zdHlsZSA9ICJ0aHJlYWRzYWZlIjsKKyAgQVNTRVJUX0VYSVQodnNwcmludGZfaGVscGVyKCIwMTIzNDU2Nzg5IiksIHRlc3Rpbmc6OktpbGxlZEJ5U2lnbmFsKFNJR0FCUlQpLCAiIik7Cit9CisKK3N0YXRpYyBpbnQgdnNucHJpbnRmX2hlbHBlcihjb25zdCBjaGFyICpmbXQsIC4uLikgeworICBjaGFyIGJ1ZlsxMF07CisgIHZhX2xpc3QgdmE7CisgIGludCByZXN1bHQ7CisgIHNpemVfdCBzaXplID0gYXRvaSgiMTEiKTsKKworICB2YV9zdGFydCh2YSwgZm10KTsKKyAgcmVzdWx0ID0gdnNucHJpbnRmKGJ1Ziwgc2l6ZSwgZm10LCB2YSk7IC8vIHNob3VsZCBjcmFzaCBoZXJlCisgIHZhX2VuZCh2YSk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKK1RFU1QoREVBVEhURVNULCB2c25wcmludGZfZm9ydGlmaWVkKSB7CisgIDo6dGVzdGluZzo6RkxBR1NfZ3Rlc3RfZGVhdGhfdGVzdF9zdHlsZSA9ICJ0aHJlYWRzYWZlIjsKKyAgQVNTRVJUX0VYSVQodnNucHJpbnRmX2hlbHBlcigiJXMiLCAiMDEyMzQ1Njc4OSIpLCB0ZXN0aW5nOjpLaWxsZWRCeVNpZ25hbChTSUdBQlJUKSwgIiIpOworfQorCitURVNUKERFQVRIVEVTVCwgdnNucHJpbnRmMl9mb3J0aWZpZWQpIHsKKyAgOjp0ZXN0aW5nOjpGTEFHU19ndGVzdF9kZWF0aF90ZXN0X3N0eWxlID0gInRocmVhZHNhZmUiOworICBBU1NFUlRfRVhJVCh2c25wcmludGZfaGVscGVyKCIwMTIzNDU2Nzg5IiksIHRlc3Rpbmc6OktpbGxlZEJ5U2lnbmFsKFNJR0FCUlQpLCAiIik7Cit9CisKK1RFU1QoREVBVEhURVNULCBzdHJuY2F0X2ZvcnRpZmllZCkgeworICA6OnRlc3Rpbmc6OkZMQUdTX2d0ZXN0X2RlYXRoX3Rlc3Rfc3R5bGUgPSAidGhyZWFkc2FmZSI7CisgIGNoYXIgYnVmWzEwXTsKKyAgc2l6ZV90IG4gPSBhdG9pKCIxMCIpOyAvLyBhdm9pZCBjb21waWxlciBvcHRpbWl6YXRpb25zCisgIHN0cm5jcHkoYnVmLCAiMDEyMzQ1Njc4Iiwgbik7CisgIEFTU0VSVF9FWElUKHN0cm5jYXQoYnVmLCAiOSIsIG4pLCB0ZXN0aW5nOjpLaWxsZWRCeVNpZ25hbChTSUdBQlJUKSwgIiIpOworfQorCitURVNUKERFQVRIVEVTVCwgc3RybmNhdDJfZm9ydGlmaWVkKSB7CisgIDo6dGVzdGluZzo6RkxBR1NfZ3Rlc3RfZGVhdGhfdGVzdF9zdHlsZSA9ICJ0aHJlYWRzYWZlIjsKKyAgY2hhciBidWZbMTBdOworICBidWZbMF0gPSAnXDAnOworICBzaXplX3QgbiA9IGF0b2koIjEwIik7IC8vIGF2b2lkIGNvbXBpbGVyIG9wdGltaXphdGlvbnMKKyAgQVNTRVJUX0VYSVQoc3RybmNhdChidWYsICIwMTIzNDU2Nzg5IiwgbiksIHRlc3Rpbmc6OktpbGxlZEJ5U2lnbmFsKFNJR0FCUlQpLCAiIik7Cit9CisKK1RFU1QoREVBVEhURVNULCBzdHJjYXRfZm9ydGlmaWVkKSB7CisgIDo6dGVzdGluZzo6RkxBR1NfZ3Rlc3RfZGVhdGhfdGVzdF9zdHlsZSA9ICJ0aHJlYWRzYWZlIjsKKyAgY2hhciBzcmNbMTFdOworICBzdHJjcHkoc3JjLCAiMDEyMzQ1Njc4OSIpOworICBjaGFyIGJ1ZlsxMF07CisgIGJ1ZlswXSA9ICdcMCc7CisgIEFTU0VSVF9FWElUKHN0cmNhdChidWYsIHNyYyksIHRlc3Rpbmc6OktpbGxlZEJ5U2lnbmFsKFNJR0FCUlQpLCAiIik7Cit9CisKK1RFU1QoREVBVEhURVNULCBtZW1tb3ZlX2ZvcnRpZmllZCkgeworICA6OnRlc3Rpbmc6OkZMQUdTX2d0ZXN0X2RlYXRoX3Rlc3Rfc3R5bGUgPSAidGhyZWFkc2FmZSI7CisgIGNoYXIgYnVmWzIwXTsKKyAgc3RyY3B5KGJ1ZiwgIjAxMjM0NTY3ODkiKTsKKyAgc2l6ZV90IG4gPSBhdG9pKCIxMCIpOworICBBU1NFUlRfRVhJVChtZW1tb3ZlKGJ1ZiArIDExLCBidWYsIG4pLCB0ZXN0aW5nOjpLaWxsZWRCeVNpZ25hbChTSUdBQlJUKSwgIiIpOworfQorCitURVNUKERFQVRIVEVTVCwgbWVtY3B5X2ZvcnRpZmllZCkgeworICA6OnRlc3Rpbmc6OkZMQUdTX2d0ZXN0X2RlYXRoX3Rlc3Rfc3R5bGUgPSAidGhyZWFkc2FmZSI7CisgIGNoYXIgYnVmYVsxMF07CisgIGNoYXIgYnVmYlsxMF07CisgIHN0cmNweShidWZhLCAiMDEyMzQ1Njc4Iik7CisgIHNpemVfdCBuID0gYXRvaSgiMTEiKTsKKyAgQVNTRVJUX0VYSVQobWVtY3B5KGJ1ZmIsIGJ1ZmEsIG4pLCB0ZXN0aW5nOjpLaWxsZWRCeVNpZ25hbChTSUdBQlJUKSwgIiIpOworfQorCitURVNUKERFQVRIVEVTVCwgc3RybmNweV9mb3J0aWZpZWQpIHsKKyAgOjp0ZXN0aW5nOjpGTEFHU19ndGVzdF9kZWF0aF90ZXN0X3N0eWxlID0gInRocmVhZHNhZmUiOworICBjaGFyIGJ1ZmFbMTVdOworICBjaGFyIGJ1ZmJbMTBdOworICBzdHJjcHkoYnVmYSwgIjAxMjM0NTY3ODkwMTIzIik7CisgIHNpemVfdCBuID0gc3RybGVuKGJ1ZmEpOworICBBU1NFUlRfRVhJVChzdHJuY3B5KGJ1ZmIsIGJ1ZmEsIG4pLCB0ZXN0aW5nOjpLaWxsZWRCeVNpZ25hbChTSUdBQlJUKSwgIiIpOworfQorCitURVNUKERFQVRIVEVTVCwgc25wcmludGZfZm9ydGlmaWVkKSB7CisgIDo6dGVzdGluZzo6RkxBR1NfZ3Rlc3RfZGVhdGhfdGVzdF9zdHlsZSA9ICJ0aHJlYWRzYWZlIjsKKyAgY2hhciBidWZhWzE1XTsKKyAgY2hhciBidWZiWzEwXTsKKyAgc3RyY3B5KGJ1ZmEsICIwMTIzNDU2Nzg5Iik7CisgIHNpemVfdCBuID0gc3RybGVuKGJ1ZmEpICsgMTsKKyAgQVNTRVJUX0VYSVQoc25wcmludGYoYnVmYiwgbiwgIiVzIiwgYnVmYSksIHRlc3Rpbmc6OktpbGxlZEJ5U2lnbmFsKFNJR0FCUlQpLCAiIik7Cit9CisKK1RFU1QoREVBVEhURVNULCBiemVyb19mb3J0aWZpZWQpIHsKKyAgOjp0ZXN0aW5nOjpGTEFHU19ndGVzdF9kZWF0aF90ZXN0X3N0eWxlID0gInRocmVhZHNhZmUiOworICBjaGFyIGJ1ZlsxMF07CisgIG1lbWNweShidWYsICIwMTIzNDU2Nzg5Iiwgc2l6ZW9mKGJ1ZikpOworICBzaXplX3QgbiA9IGF0b2koIjExIik7CisgIEFTU0VSVF9FWElUKGJ6ZXJvKGJ1ZiwgbiksIHRlc3Rpbmc6OktpbGxlZEJ5U2lnbmFsKFNJR0FCUlQpLCAiIik7Cit9CisKK1RFU1QoREVBVEhURVNULCB1bWFza19mb3J0aWZpZWQpIHsKKyAgOjp0ZXN0aW5nOjpGTEFHU19ndGVzdF9kZWF0aF90ZXN0X3N0eWxlID0gInRocmVhZHNhZmUiOworICBtb2RlX3QgbWFzayA9IGF0b2koIjEwMjMiKTsgIC8vIDAxNzc3IGluIG9jdGFsCisgIEFTU0VSVF9FWElUKHVtYXNrKG1hc2spLCB0ZXN0aW5nOjpLaWxsZWRCeVNpZ25hbChTSUdBQlJUKSwgIiIpOworfQorCitleHRlcm4gIkMiIGNoYXIqIF9fc3RybmNhdF9jaGsoY2hhciosIGNvbnN0IGNoYXIqLCBzaXplX3QsIHNpemVfdCk7CitleHRlcm4gIkMiIGNoYXIqIF9fc3RyY2F0X2NoayhjaGFyKiwgY29uc3QgY2hhciosIHNpemVfdCk7CisKK1RFU1QoVEVTVF9OQU1FLCBzdHJuY2F0KSB7CisgIGNoYXIgYnVmWzEwXTsKKyAgbWVtc2V0KGJ1ZiwgJ0EnLCBzaXplb2YoYnVmKSk7CisgIGJ1ZlswXSA9ICdhJzsKKyAgYnVmWzFdID0gJ1wwJzsKKyAgY2hhciogcmVzID0gX19zdHJuY2F0X2NoayhidWYsICIwMTIzNCIsIHNpemVvZihidWYpIC0gc3RybGVuKGJ1ZikgLSAxLCBzaXplb2YoYnVmKSk7CisgIEFTU0VSVF9FUShidWYsIHJlcyk7CisgIEFTU0VSVF9FUSgnYScsICBidWZbMF0pOworICBBU1NFUlRfRVEoJzAnLCAgYnVmWzFdKTsKKyAgQVNTRVJUX0VRKCcxJywgIGJ1ZlsyXSk7CisgIEFTU0VSVF9FUSgnMicsICBidWZbM10pOworICBBU1NFUlRfRVEoJzMnLCAgYnVmWzRdKTsKKyAgQVNTRVJUX0VRKCc0JywgIGJ1Zls1XSk7CisgIEFTU0VSVF9FUSgnXDAnLCBidWZbNl0pOworICBBU1NFUlRfRVEoJ0EnLCAgYnVmWzddKTsKKyAgQVNTRVJUX0VRKCdBJywgIGJ1Zls4XSk7CisgIEFTU0VSVF9FUSgnQScsICBidWZbOV0pOworfQorCitURVNUKFRFU1RfTkFNRSwgc3RybmNhdDIpIHsKKyAgY2hhciBidWZbMTBdOworICBtZW1zZXQoYnVmLCAnQScsIHNpemVvZihidWYpKTsKKyAgYnVmWzBdID0gJ2EnOworICBidWZbMV0gPSAnXDAnOworICBjaGFyKiByZXMgPSBfX3N0cm5jYXRfY2hrKGJ1ZiwgIjAxMjM0NTY3ODkiLCA1LCBzaXplb2YoYnVmKSk7CisgIEFTU0VSVF9FUShidWYsIHJlcyk7CisgIEFTU0VSVF9FUSgnYScsICBidWZbMF0pOworICBBU1NFUlRfRVEoJzAnLCAgYnVmWzFdKTsKKyAgQVNTRVJUX0VRKCcxJywgIGJ1ZlsyXSk7CisgIEFTU0VSVF9FUSgnMicsICBidWZbM10pOworICBBU1NFUlRfRVEoJzMnLCAgYnVmWzRdKTsKKyAgQVNTRVJUX0VRKCc0JywgIGJ1Zls1XSk7CisgIEFTU0VSVF9FUSgnXDAnLCBidWZbNl0pOworICBBU1NFUlRfRVEoJ0EnLCAgYnVmWzddKTsKKyAgQVNTRVJUX0VRKCdBJywgIGJ1Zls4XSk7CisgIEFTU0VSVF9FUSgnQScsICBidWZbOV0pOworfQorCitURVNUKFRFU1RfTkFNRSwgc3RybmNhdDMpIHsKKyAgY2hhciBidWZbMTBdOworICBtZW1zZXQoYnVmLCAnQScsIHNpemVvZihidWYpKTsKKyAgYnVmWzBdID0gJ1wwJzsKKyAgY2hhciogcmVzID0gX19zdHJuY2F0X2NoayhidWYsICIwMTIzNDU2Nzg5IiwgNSwgc2l6ZW9mKGJ1ZikpOworICBBU1NFUlRfRVEoYnVmLCByZXMpOworICBBU1NFUlRfRVEoJzAnLCAgYnVmWzBdKTsKKyAgQVNTRVJUX0VRKCcxJywgIGJ1ZlsxXSk7CisgIEFTU0VSVF9FUSgnMicsICBidWZbMl0pOworICBBU1NFUlRfRVEoJzMnLCAgYnVmWzNdKTsKKyAgQVNTRVJUX0VRKCc0JywgIGJ1Zls0XSk7CisgIEFTU0VSVF9FUSgnXDAnLCBidWZbNV0pOworICBBU1NFUlRfRVEoJ0EnLCAgYnVmWzZdKTsKKyAgQVNTRVJUX0VRKCdBJywgIGJ1Zls3XSk7CisgIEFTU0VSVF9FUSgnQScsICBidWZbOF0pOworICBBU1NFUlRfRVEoJ0EnLCAgYnVmWzldKTsKK30KKworVEVTVChURVNUX05BTUUsIHN0cm5jYXQ0KSB7CisgIGNoYXIgYnVmWzEwXTsKKyAgbWVtc2V0KGJ1ZiwgJ0EnLCBzaXplb2YoYnVmKSk7CisgIGJ1Zls5XSA9ICdcMCc7CisgIGNoYXIqIHJlcyA9IF9fc3RybmNhdF9jaGsoYnVmLCAiIiwgNSwgc2l6ZW9mKGJ1ZikpOworICBBU1NFUlRfRVEoYnVmLCByZXMpOworICBBU1NFUlRfRVEoJ0EnLCAgYnVmWzBdKTsKKyAgQVNTRVJUX0VRKCdBJywgIGJ1ZlsxXSk7CisgIEFTU0VSVF9FUSgnQScsICBidWZbMl0pOworICBBU1NFUlRfRVEoJ0EnLCAgYnVmWzNdKTsKKyAgQVNTRVJUX0VRKCdBJywgIGJ1Zls0XSk7CisgIEFTU0VSVF9FUSgnQScsICBidWZbNV0pOworICBBU1NFUlRfRVEoJ0EnLCAgYnVmWzZdKTsKKyAgQVNTRVJUX0VRKCdBJywgIGJ1Zls3XSk7CisgIEFTU0VSVF9FUSgnQScsICBidWZbOF0pOworICBBU1NFUlRfRVEoJ1wwJywgYnVmWzldKTsKK30KKworVEVTVChURVNUX05BTUUsIHN0cm5jYXQ1KSB7CisgIGNoYXIgYnVmWzEwXTsKKyAgbWVtc2V0KGJ1ZiwgJ0EnLCBzaXplb2YoYnVmKSk7CisgIGJ1ZlswXSA9ICdhJzsKKyAgYnVmWzFdID0gJ1wwJzsKKyAgY2hhciogcmVzID0gX19zdHJuY2F0X2NoayhidWYsICIwMTIzNDU2NyIsIDgsIHNpemVvZihidWYpKTsKKyAgQVNTRVJUX0VRKGJ1ZiwgcmVzKTsKKyAgQVNTRVJUX0VRKCdhJywgIGJ1ZlswXSk7CisgIEFTU0VSVF9FUSgnMCcsICBidWZbMV0pOworICBBU1NFUlRfRVEoJzEnLCAgYnVmWzJdKTsKKyAgQVNTRVJUX0VRKCcyJywgIGJ1ZlszXSk7CisgIEFTU0VSVF9FUSgnMycsICBidWZbNF0pOworICBBU1NFUlRfRVEoJzQnLCAgYnVmWzVdKTsKKyAgQVNTRVJUX0VRKCc1JywgYnVmWzZdKTsKKyAgQVNTRVJUX0VRKCc2JywgIGJ1Zls3XSk7CisgIEFTU0VSVF9FUSgnNycsICBidWZbOF0pOworICBBU1NFUlRfRVEoJ1wwJywgIGJ1Zls5XSk7Cit9CisKK1RFU1QoVEVTVF9OQU1FLCBzdHJuY2F0NikgeworICBjaGFyIGJ1ZlsxMF07CisgIG1lbXNldChidWYsICdBJywgc2l6ZW9mKGJ1ZikpOworICBidWZbMF0gPSAnYSc7CisgIGJ1ZlsxXSA9ICdcMCc7CisgIGNoYXIqIHJlcyA9IF9fc3RybmNhdF9jaGsoYnVmLCAiMDEyMzQ1NjciLCA5LCBzaXplb2YoYnVmKSk7CisgIEFTU0VSVF9FUShidWYsIHJlcyk7CisgIEFTU0VSVF9FUSgnYScsICBidWZbMF0pOworICBBU1NFUlRfRVEoJzAnLCAgYnVmWzFdKTsKKyAgQVNTRVJUX0VRKCcxJywgIGJ1ZlsyXSk7CisgIEFTU0VSVF9FUSgnMicsICBidWZbM10pOworICBBU1NFUlRfRVEoJzMnLCAgYnVmWzRdKTsKKyAgQVNTRVJUX0VRKCc0JywgIGJ1Zls1XSk7CisgIEFTU0VSVF9FUSgnNScsIGJ1Zls2XSk7CisgIEFTU0VSVF9FUSgnNicsICBidWZbN10pOworICBBU1NFUlRfRVEoJzcnLCAgYnVmWzhdKTsKKyAgQVNTRVJUX0VRKCdcMCcsICBidWZbOV0pOworfQorCisKK1RFU1QoVEVTVF9OQU1FLCBzdHJjYXQpIHsKKyAgY2hhciBidWZbMTBdOworICBtZW1zZXQoYnVmLCAnQScsIHNpemVvZihidWYpKTsKKyAgYnVmWzBdID0gJ2EnOworICBidWZbMV0gPSAnXDAnOworICBjaGFyKiByZXMgPSBfX3N0cmNhdF9jaGsoYnVmLCAiMDEyMzQiLCBzaXplb2YoYnVmKSk7CisgIEFTU0VSVF9FUShidWYsIHJlcyk7CisgIEFTU0VSVF9FUSgnYScsICBidWZbMF0pOworICBBU1NFUlRfRVEoJzAnLCAgYnVmWzFdKTsKKyAgQVNTRVJUX0VRKCcxJywgIGJ1ZlsyXSk7CisgIEFTU0VSVF9FUSgnMicsICBidWZbM10pOworICBBU1NFUlRfRVEoJzMnLCAgYnVmWzRdKTsKKyAgQVNTRVJUX0VRKCc0JywgIGJ1Zls1XSk7CisgIEFTU0VSVF9FUSgnXDAnLCBidWZbNl0pOworICBBU1NFUlRfRVEoJ0EnLCAgYnVmWzddKTsKKyAgQVNTRVJUX0VRKCdBJywgIGJ1Zls4XSk7CisgIEFTU0VSVF9FUSgnQScsICBidWZbOV0pOworfQorCitURVNUKFRFU1RfTkFNRSwgc3RyY2F0MikgeworICBjaGFyIGJ1ZlsxMF07CisgIG1lbXNldChidWYsICdBJywgc2l6ZW9mKGJ1ZikpOworICBidWZbMF0gPSAnYSc7CisgIGJ1ZlsxXSA9ICdcMCc7CisgIGNoYXIqIHJlcyA9IF9fc3RyY2F0X2NoayhidWYsICIwMTIzNDU2NyIsIHNpemVvZihidWYpKTsKKyAgQVNTRVJUX0VRKGJ1ZiwgcmVzKTsKKyAgQVNTRVJUX0VRKCdhJywgIGJ1ZlswXSk7CisgIEFTU0VSVF9FUSgnMCcsICBidWZbMV0pOworICBBU1NFUlRfRVEoJzEnLCAgYnVmWzJdKTsKKyAgQVNTRVJUX0VRKCcyJywgIGJ1ZlszXSk7CisgIEFTU0VSVF9FUSgnMycsICBidWZbNF0pOworICBBU1NFUlRfRVEoJzQnLCAgYnVmWzVdKTsKKyAgQVNTRVJUX0VRKCc1JywgYnVmWzZdKTsKKyAgQVNTRVJUX0VRKCc2JywgIGJ1Zls3XSk7CisgIEFTU0VSVF9FUSgnNycsICBidWZbOF0pOworICBBU1NFUlRfRVEoJ1wwJywgIGJ1Zls5XSk7Cit9CmRpZmYgLS1naXQgYS90ZXN0cy9nZXRhdXh2YWxfdGVzdC5jcHAgYi90ZXN0cy9nZXRhdXh2YWxfdGVzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDFjMTFjMwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2dldGF1eHZhbF90ZXN0LmNwcApAQCAtMCwwICsxLDU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorI2luY2x1ZGUgPGZlYXR1cmVzLmg+CisjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKworLy8gZ2V0YXV4dmFsKCkgd2FzIG9ubHkgYWRkZWQgYXMgb2YgZ2xpYmMgdmVyc2lvbiAyLjE2LgorLy8gU2VlOiBodHRwOi8vbHduLm5ldC9BcnRpY2xlcy81MTkwODUvCisvLyBEb24ndCB0cnkgdG8gY29tcGlsZSB0aGlzIGNvZGUgb24gb2xkZXIgZ2xpYmMgdmVyc2lvbnMuCisKKyNpZiBkZWZpbmVkKF9fQklPTklDX18pCisgICNkZWZpbmUgR0VUQVVYVkFMX0NBTl9DT01QSUxFIDEKKyNlbGlmIGRlZmluZWQoX19HTElCQ19QUkVSRVEpCisgICNpZiBfX0dMSUJDX1BSRVJFUSgyLCAxNikKKyAgICAjZGVmaW5lIEdFVEFVWFZBTF9DQU5fQ09NUElMRSAxCisgICNlbmRpZgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKEdFVEFVWFZBTF9DQU5fQ09NUElMRSkKKworI2luY2x1ZGUgPHN5cy9hdXh2Lmg+CisKK1RFU1QoZ2V0YXV4dmFsLCBleHBlY3RlZF92YWx1ZXMpIHsKKyAgQVNTRVJUX0VRKCh1bnNpZ25lZCBsb25nIGludCkgMCwgZ2V0YXV4dmFsKEFUX1NFQ1VSRSkpOworICBBU1NFUlRfRVEoZ2V0dWlkKCksIGdldGF1eHZhbChBVF9VSUQpKTsKKyAgQVNTRVJUX0VRKGdldGV1aWQoKSwgZ2V0YXV4dmFsKEFUX0VVSUQpKTsKKyAgQVNTRVJUX0VRKGdldGdpZCgpLCBnZXRhdXh2YWwoQVRfR0lEKSk7CisgIEFTU0VSVF9FUShnZXRlZ2lkKCksIGdldGF1eHZhbChBVF9FR0lEKSk7CisgIEFTU0VSVF9FUSgodW5zaWduZWQgbG9uZyBpbnQpIGdldHBhZ2VzaXplKCksIGdldGF1eHZhbChBVF9QQUdFU1opKTsKKworICBBU1NFUlRfTkUoKHVuc2lnbmVkIGxvbmcgaW50KSAwLCBnZXRhdXh2YWwoQVRfUEhEUikpOworICBBU1NFUlRfTkUoKHVuc2lnbmVkIGxvbmcgaW50KSAwLCBnZXRhdXh2YWwoQVRfUEhOVU0pKTsKKyAgQVNTRVJUX05FKCh1bnNpZ25lZCBsb25nIGludCkgMCwgZ2V0YXV4dmFsKEFUX0VOVFJZKSk7CisgIEFTU0VSVF9ORSgodW5zaWduZWQgbG9uZyBpbnQpIDAsIGdldGF1eHZhbChBVF9QQUdFU1opKTsKK30KKworVEVTVChnZXRhdXh2YWwsIHVuZXhwZWN0ZWRfdmFsdWVzKSB7CisgIEFTU0VSVF9FUSgodW5zaWduZWQgbG9uZyBpbnQpIDAsIGdldGF1eHZhbCgweGRlYWRiZWVmKSk7Cit9CisKKyNlbmRpZiAvKiBHRVRBVVhWQUxfQ0FOX0NPTVBJTEUgKi8KZGlmZiAtLWdpdCBhL3Rlc3RzL2dldGN3ZF90ZXN0LmNwcCBiL3Rlc3RzL2dldGN3ZF90ZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iM2I0MTM2Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZ2V0Y3dkX3Rlc3QuY3BwCkBAIC0wLDAgKzEsODUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKworI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8bGltaXRzLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKK1RFU1QoZ2V0Y3dkLCBhdXRvX2Z1bGwpIHsKKyAgLy8gSWYgd2UgbGV0IHRoZSBsaWJyYXJ5IGRvIGFsbCB0aGUgd29yaywgZXZlcnl0aGluZydzIGZpbmUuCisgIGVycm5vID0gMDsKKyAgY2hhciogY3dkID0gZ2V0Y3dkKE5VTEwsIDApOworICBBU1NFUlRfVFJVRShjd2QgIT0gTlVMTCk7CisgIEFTU0VSVF9FUSgwLCBlcnJubyk7CisgIEFTU0VSVF9HRShzdHJsZW4oY3dkKSwgMVUpOworICBmcmVlKGN3ZCk7Cit9CisKK1RFU1QoZ2V0Y3dkLCBhdXRvX3JlYXNvbmFibGUpIHsKKyAgLy8gSWYgd2UgYXNrIHRoZSBsaWJyYXJ5IHRvIGFsbG9jYXRlIGEgcmVhc29uYWJsZSBidWZmZXIsIGV2ZXJ5dGhpbmcncyBmaW5lLgorICBlcnJubyA9IDA7CisgIGNoYXIqIGN3ZCA9IGdldGN3ZChOVUxMLCBQQVRIX01BWCk7CisgIEFTU0VSVF9UUlVFKGN3ZCAhPSBOVUxMKTsKKyAgQVNTRVJUX0VRKDAsIGVycm5vKTsKKyAgQVNTRVJUX0dFKHN0cmxlbihjd2QpLCAxVSk7CisgIGZyZWUoY3dkKTsKK30KKworVEVTVChnZXRjd2QsIGF1dG9fdG9vX3NtYWxsKSB7CisgIC8vIElmIHdlIGFzayB0aGUgbGlicmFyeSB0byBhbGxvY2F0ZSBhIHRvby1zbWFsbCBidWZmZXIsIEVSQU5HRS4KKyAgZXJybm8gPSAwOworICBjaGFyKiBjd2QgPSBnZXRjd2QoTlVMTCwgMSk7CisgIEFTU0VSVF9UUlVFKGN3ZCA9PSBOVUxMKTsKKyAgQVNTRVJUX0VRKEVSQU5HRSwgZXJybm8pOworfQorCitURVNUKGdldGN3ZCwgYXV0b190b29fbGFyZ2UpIHsKKyAgLy8gSWYgd2UgYXNrIHRoZSBsaWJyYXJ5IHRvIGFsbG9jYXRlIGFuIHVucmVhc29uYWJseSBsYXJnZSBidWZmZXIsIEVSQU5HRS4KKyAgZXJybm8gPSAwOworICBjaGFyKiBjd2QgPSBnZXRjd2QoTlVMTCwgc3RhdGljX2Nhc3Q8c2l6ZV90PigtMSkpOworICBBU1NFUlRfVFJVRShjd2QgPT0gTlVMTCk7CisgIEFTU0VSVF9FUShFTk9NRU0sIGVycm5vKTsKK30KKworVEVTVChnZXRjd2QsIG1hbnVhbF90b29fc21hbGwpIHsKKyAgLy8gSWYgd2UgYWxsb2NhdGUgYSB0b28tc21hbGwgYnVmZmVyLCBFUkFOR0UuCisgIGNoYXIgdGlueV9idWZbMV07CisgIGVycm5vID0gMDsKKyAgY2hhciogY3dkID0gZ2V0Y3dkKHRpbnlfYnVmLCBzaXplb2YodGlueV9idWYpKTsKKyAgQVNTRVJUX1RSVUUoY3dkID09IE5VTEwpOworICBBU1NFUlRfRVEoRVJBTkdFLCBlcnJubyk7Cit9CisKK1RFU1QoZ2V0Y3dkLCBtYW51YWxfemVybykgeworICAvLyBJZiB3ZSBhbGxvY2F0ZSBhIHplcm8tbGVuZ3RoIGJ1ZmZlciwgRUlOVkFMLgorICBjaGFyIHRpbnlfYnVmWzFdOworICBlcnJubyA9IDA7CisgIGNoYXIqIGN3ZCA9IGdldGN3ZCh0aW55X2J1ZiwgMCk7CisgIEFTU0VSVF9UUlVFKGN3ZCA9PSBOVUxMKTsKKyAgQVNTRVJUX0VRKEVJTlZBTCwgZXJybm8pOworfQorCitURVNUKGdldGN3ZCwgbWFudWFsX3BhdGhfbWF4KSB7CisgIGNoYXIqIGJ1ZiA9IG5ldyBjaGFyW1BBVEhfTUFYXTsKKyAgZXJybm8gPSAwOworICBjaGFyKiBjd2QgPSBnZXRjd2QoYnVmLCBQQVRIX01BWCk7CisgIEFTU0VSVF9UUlVFKGN3ZCA9PSBidWYpOworICBBU1NFUlRfRVEoMCwgZXJybm8pOworICBBU1NFUlRfR0Uoc3RybGVuKGN3ZCksIDFVKTsKKyAgZGVsZXRlW10gY3dkOworfQpkaWZmIC0tZ2l0IGEvdGVzdHMvaW50dHlwZXNfdGVzdC5jcHAgYi90ZXN0cy9pbnR0eXBlc190ZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzRhMTA0Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvaW50dHlwZXNfdGVzdC5jcHAKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgorCisjZGVmaW5lIF9fU1REQ19GT1JNQVRfTUFDUk9TIC8vIE90aGVyd2lzZSBub3QgYXZhaWxhYmxlIGluIEMrKy4KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8aW50dHlwZXMuaD4KKworI2lmIGRlZmluZWQoX19CSU9OSUNfXykgLy8gRG9lc24ndCB3b3JrIG9uIGdsaWJjIGJlY2F1c2Ugd2UgdXNlIC1tMzIuCitURVNUKGludHR5cGVzLCBtaXNjKSB7CisgIGNoYXIgYnVmWzUxMl07CisKKyAgaW50cHRyX3QgaSA9IDA7CisgIHVpbnRwdHJfdCB1ID0gMDsKKworICBzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJTA4IiBQUklkUFRSLCBpKTsKKyAgc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiUwOCIgUFJJaVBUUiwgaSk7CisgIHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlMDgiIFBSSW9QVFIsIGkpOworICBzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJTA4IiBQUkl1UFRSLCB1KTsKKyAgc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiUwOCIgUFJJeFBUUiwgdSk7CisgIHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlMDgiIFBSSVhQVFIsIHUpOworCisgIHNzY2FuZihidWYsICIlMDgiIFNDTmRQVFIsICZpKTsKKyAgc3NjYW5mKGJ1ZiwgIiUwOCIgU0NOaVBUUiwgJmkpOworICBzc2NhbmYoYnVmLCAiJTA4IiBTQ05vUFRSLCAmdSk7CisgIHNzY2FuZihidWYsICIlMDgiIFNDTnVQVFIsICZ1KTsKKyAgc3NjYW5mKGJ1ZiwgIiUwOCIgU0NOeFBUUiwgJnUpOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS90ZXN0cy9saWJjX2xvZ2dpbmdfdGVzdC5jcHAgYi90ZXN0cy9saWJjX2xvZ2dpbmdfdGVzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDljNjE1ZQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2xpYmNfbG9nZ2luZ190ZXN0LmNwcApAQCAtMCwwICsxLDE0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgorCisjaWYgZGVmaW5lZChfX0JJT05JQ19fKQorCisjaW5jbHVkZSAiLi4vbGliYy9iaW9uaWMvbGliY19sb2dnaW5nLmNwcCIKKworZXh0ZXJuIGludCBfX2xpYmNfZm9ybWF0X2J1ZmZlcihjaGFyKiBidWZmZXIsIHNpemVfdCBidWZmZXJfc2l6ZSwgY29uc3QgY2hhciogZm9ybWF0LCAuLi4pOworCitURVNUKGxpYmNfbG9nZ2luZywgc21va2UpIHsKKyAgY2hhciBidWZbQlVGU0laXTsKKworICBfX2xpYmNfZm9ybWF0X2J1ZmZlcihidWYsIHNpemVvZihidWYpLCAiYSIpOworICBFWFBFQ1RfU1RSRVEoImEiLCBidWYpOworCisgIF9fbGliY19mb3JtYXRfYnVmZmVyKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlJSIpOworICBFWFBFQ1RfU1RSRVEoIiUiLCBidWYpOworCisgIF9fbGliY19mb3JtYXRfYnVmZmVyKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIwMTIzNCIpOworICBFWFBFQ1RfU1RSRVEoIjAxMjM0IiwgYnVmKTsKKworICBfX2xpYmNfZm9ybWF0X2J1ZmZlcihidWYsIHNpemVvZihidWYpLCAiYSVzYiIsICIwMTIzNCIpOworICBFWFBFQ1RfU1RSRVEoImEwMTIzNGIiLCBidWYpOworCisgIGNoYXIqIHMgPSBOVUxMOworICBfX2xpYmNfZm9ybWF0X2J1ZmZlcihidWYsIHNpemVvZihidWYpLCAiYSVzYiIsIHMpOworICBFWFBFQ1RfU1RSRVEoImEobnVsbCliIiwgYnVmKTsKKworICBfX2xpYmNfZm9ybWF0X2J1ZmZlcihidWYsIHNpemVvZihidWYpLCAiYWElc2NjIiwgImJiIik7CisgIEVYUEVDVF9TVFJFUSgiYWFiYmNjIiwgYnVmKTsKKworICBfX2xpYmNfZm9ybWF0X2J1ZmZlcihidWYsIHNpemVvZihidWYpLCAiYSVjYyIsICdiJyk7CisgIEVYUEVDVF9TVFJFUSgiYWJjIiwgYnVmKTsKKworICBfX2xpYmNfZm9ybWF0X2J1ZmZlcihidWYsIHNpemVvZihidWYpLCAiYSVkYiIsIDEyMzQpOworICBFWFBFQ1RfU1RSRVEoImExMjM0YiIsIGJ1Zik7CisKKyAgX19saWJjX2Zvcm1hdF9idWZmZXIoYnVmLCBzaXplb2YoYnVmKSwgImElZGIiLCAtODEyMyk7CisgIEVYUEVDVF9TVFJFUSgiYS04MTIzYiIsIGJ1Zik7CisKKyAgX19saWJjX2Zvcm1hdF9idWZmZXIoYnVmLCBzaXplb2YoYnVmKSwgImElaGRiIiwgMHg3ZmZmMDAxMCk7CisgIEVYUEVDVF9TVFJFUSgiYTE2YiIsIGJ1Zik7CisKKyAgX19saWJjX2Zvcm1hdF9idWZmZXIoYnVmLCBzaXplb2YoYnVmKSwgImElaGhkYiIsIDB4N2ZmZmZmMTApOworICBFWFBFQ1RfU1RSRVEoImExNmIiLCBidWYpOworCisgIF9fbGliY19mb3JtYXRfYnVmZmVyKGJ1Ziwgc2l6ZW9mKGJ1ZiksICJhJWxsZGIiLCAweDEwMDAwMDAwMDBMTCk7CisgIEVYUEVDVF9TVFJFUSgiYTY4NzE5NDc2NzM2YiIsIGJ1Zik7CisKKyAgX19saWJjX2Zvcm1hdF9idWZmZXIoYnVmLCBzaXplb2YoYnVmKSwgImElbGRiIiwgNzAwMDBMKTsKKyAgRVhQRUNUX1NUUkVRKCJhNzAwMDBiIiwgYnVmKTsKKworICBfX2xpYmNfZm9ybWF0X2J1ZmZlcihidWYsIHNpemVvZihidWYpLCAiYSVwYiIsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KDB4YjAwMDEyMzQpKTsKKyAgRVhQRUNUX1NUUkVRKCJhMHhiMDAwMTIzNGIiLCBidWYpOworCisgIF9fbGliY19mb3JtYXRfYnVmZmVyKGJ1Ziwgc2l6ZW9mKGJ1ZiksICJhJXh6IiwgMHgxMmFiKTsKKyAgRVhQRUNUX1NUUkVRKCJhMTJhYnoiLCBidWYpOworCisgIF9fbGliY19mb3JtYXRfYnVmZmVyKGJ1Ziwgc2l6ZW9mKGJ1ZiksICJhJVh6IiwgMHgxMmFiKTsKKyAgRVhQRUNUX1NUUkVRKCJhMTJBQnoiLCBidWYpOworCisgIF9fbGliY19mb3JtYXRfYnVmZmVyKGJ1Ziwgc2l6ZW9mKGJ1ZiksICJhJTA4eHoiLCAweDEyMzQ1Nik7CisgIEVYUEVDVF9TVFJFUSgiYTAwMTIzNDU2eiIsIGJ1Zik7CisKKyAgX19saWJjX2Zvcm1hdF9idWZmZXIoYnVmLCBzaXplb2YoYnVmKSwgImElNWR6IiwgMTIzNCk7CisgIEVYUEVDVF9TVFJFUSgiYSAxMjM0eiIsIGJ1Zik7CisKKyAgX19saWJjX2Zvcm1hdF9idWZmZXIoYnVmLCBzaXplb2YoYnVmKSwgImElMDVkeiIsIDEyMzQpOworICBFWFBFQ1RfU1RSRVEoImEwMTIzNHoiLCBidWYpOworCisgIF9fbGliY19mb3JtYXRfYnVmZmVyKGJ1Ziwgc2l6ZW9mKGJ1ZiksICJhJThkeiIsIDEyMzQpOworICBFWFBFQ1RfU1RSRVEoImEgICAgMTIzNHoiLCBidWYpOworCisgIF9fbGliY19mb3JtYXRfYnVmZmVyKGJ1Ziwgc2l6ZW9mKGJ1ZiksICJhJS04ZHoiLCAxMjM0KTsKKyAgRVhQRUNUX1NUUkVRKCJhMTIzNCAgICB6IiwgYnVmKTsKKworICBfX2xpYmNfZm9ybWF0X2J1ZmZlcihidWYsIHNpemVvZihidWYpLCAiQSUtMTFzWiIsICJhYmNkZWYiKTsKKyAgRVhQRUNUX1NUUkVRKCJBYWJjZGVmICAgICBaIiwgYnVmKTsKKworICBfX2xpYmNfZm9ybWF0X2J1ZmZlcihidWYsIHNpemVvZihidWYpLCAiQSVzOiVkWiIsICJoZWxsbyIsIDEyMzQpOworICBFWFBFQ1RfU1RSRVEoIkFoZWxsbzoxMjM0WiIsIGJ1Zik7CisKKyAgX19saWJjX2Zvcm1hdF9idWZmZXIoYnVmLCBzaXplb2YoYnVmKSwgImElMDNkOiVkOiUwMmR6IiwgNSwgNSwgNSk7CisgIEVYUEVDVF9TVFJFUSgiYTAwNTo1OjA1eiIsIGJ1Zik7CisKKyAgdm9pZCogcCA9IE5VTEw7CisgIF9fbGliY19mb3JtYXRfYnVmZmVyKGJ1Ziwgc2l6ZW9mKGJ1ZiksICJhJWQsJXB6IiwgNSwgcCk7CisgIEVYUEVDVF9TVFJFUSgiYTUsMHgweiIsIGJ1Zik7CisKKyAgX19saWJjX2Zvcm1hdF9idWZmZXIoYnVmLCBzaXplb2YoYnVmKSwgImElbGxkLCVkLCVkLCVkeiIsIDB4MTAwMDAwMDAwMExMLCA2LCA3LCA4KTsKKyAgRVhQRUNUX1NUUkVRKCJhNjg3MTk0NzY3MzYsNiw3LDh6IiwgYnVmKTsKK30KKworVEVTVChsaWJjX2xvZ2dpbmcsIGRfSU5UX01BWCkgeworICBjaGFyIGJ1ZltCVUZTSVpdOworICBfX2xpYmNfZm9ybWF0X2J1ZmZlcihidWYsIHNpemVvZihidWYpLCAiJWQiLCBJTlRfTUFYKTsKKyAgRVhQRUNUX1NUUkVRKCIyMTQ3NDgzNjQ3IiwgYnVmKTsKK30KKworVEVTVChsaWJjX2xvZ2dpbmcsIGRfSU5UX01JTikgeworICBjaGFyIGJ1ZltCVUZTSVpdOworICBfX2xpYmNfZm9ybWF0X2J1ZmZlcihidWYsIHNpemVvZihidWYpLCAiJWQiLCBJTlRfTUlOKTsKKyAgRVhQRUNUX1NUUkVRKCItMjE0NzQ4MzY0OCIsIGJ1Zik7Cit9CisKK1RFU1QobGliY19sb2dnaW5nLCBsZF9MT05HX01BWCkgeworICBjaGFyIGJ1ZltCVUZTSVpdOworICBfX2xpYmNfZm9ybWF0X2J1ZmZlcihidWYsIHNpemVvZihidWYpLCAiJWxkIiwgTE9OR19NQVgpOworICBFWFBFQ1RfU1RSRVEoIjIxNDc0ODM2NDciLCBidWYpOworfQorCitURVNUKGxpYmNfbG9nZ2luZywgbGRfTE9OR19NSU4pIHsKKyAgY2hhciBidWZbQlVGU0laXTsKKyAgX19saWJjX2Zvcm1hdF9idWZmZXIoYnVmLCBzaXplb2YoYnVmKSwgIiVsZCIsIExPTkdfTUlOKTsKKyAgRVhQRUNUX1NUUkVRKCItMjE0NzQ4MzY0OCIsIGJ1Zik7Cit9CisKK1RFU1QobGliY19sb2dnaW5nLCBsbGRfTExPTkdfTUFYKSB7CisgIGNoYXIgYnVmW0JVRlNJWl07CisgIF9fbGliY19mb3JtYXRfYnVmZmVyKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlbGxkIiwgTExPTkdfTUFYKTsKKyAgRVhQRUNUX1NUUkVRKCI5MjIzMzcyMDM2ODU0Nzc1ODA3IiwgYnVmKTsKK30KKworVEVTVChsaWJjX2xvZ2dpbmcsIGxsZF9MTE9OR19NSU4pIHsKKyAgY2hhciBidWZbQlVGU0laXTsKKyAgX19saWJjX2Zvcm1hdF9idWZmZXIoYnVmLCBzaXplb2YoYnVmKSwgIiVsbGQiLCBMTE9OR19NSU4pOworICBFWFBFQ1RfU1RSRVEoIi05MjIzMzcyMDM2ODU0Nzc1ODA4IiwgYnVmKTsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS90ZXN0cy9saWJnZW5fdGVzdC5jcHAgYi90ZXN0cy9saWJnZW5fdGVzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzJjMDFmNgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2xpYmdlbl90ZXN0LmNwcApAQCAtMCwwICsxLDExNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgorCisjaW5jbHVkZSA8bGliZ2VuLmg+CisKKyNpbmNsdWRlIDxlcnJuby5oPgorCitzdGF0aWMgdm9pZCBUZXN0QmFzZW5hbWUoY29uc3QgY2hhciogaW4sIGNvbnN0IGNoYXIqIGV4cGVjdGVkX291dCkgeworICBjaGFyKiB3cml0YWJsZV9pbiA9IChpbiAhPSBOVUxMKSA/IHN0cmR1cChpbikgOiBOVUxMOworICBlcnJubyA9IDA7CisgIGNvbnN0IGNoYXIqIG91dCA9IGJhc2VuYW1lKCZ3cml0YWJsZV9pblswXSk7CisgIEFTU0VSVF9TVFJFUShleHBlY3RlZF9vdXQsIG91dCkgPDwgaW47CisgIEFTU0VSVF9FUSgwLCBlcnJubykgPDwgaW47CisgIGZyZWUod3JpdGFibGVfaW4pOworfQorCitzdGF0aWMgdm9pZCBUZXN0RGlybmFtZShjb25zdCBjaGFyKiBpbiwgY29uc3QgY2hhciogZXhwZWN0ZWRfb3V0KSB7CisgIGNoYXIqIHdyaXRhYmxlX2luID0gKGluICE9IE5VTEwpID8gc3RyZHVwKGluKSA6IE5VTEw7CisgIGVycm5vID0gMDsKKyAgY29uc3QgY2hhciogb3V0ID0gZGlybmFtZSgmd3JpdGFibGVfaW5bMF0pOworICBBU1NFUlRfU1RSRVEoZXhwZWN0ZWRfb3V0LCBvdXQpIDw8IGluOworICBBU1NFUlRfRVEoMCwgZXJybm8pIDw8IGluOworICBmcmVlKHdyaXRhYmxlX2luKTsKK30KKworVEVTVChsaWJnZW4sIGJhc2VuYW1lKSB7CisgIFRlc3RCYXNlbmFtZShOVUxMLCAiLiIpOworICBUZXN0QmFzZW5hbWUoIiIsICIuIik7CisgIFRlc3RCYXNlbmFtZSgiL3Vzci9saWIiLCAibGliIik7CisgIFRlc3RCYXNlbmFtZSgiL3Vzci8iLCAidXNyIik7CisgIFRlc3RCYXNlbmFtZSgidXNyIiwgInVzciIpOworICBUZXN0QmFzZW5hbWUoIi8iLCAiLyIpOworICBUZXN0QmFzZW5hbWUoIi4iLCAiLiIpOworICBUZXN0QmFzZW5hbWUoIi4uIiwgIi4uIik7CisgIFRlc3RCYXNlbmFtZSgiLy8vIiwgIi8iKTsKKyAgVGVzdEJhc2VuYW1lKCIvL3Vzci8vbGliLy8iLCAibGliIik7Cit9CisKK1RFU1QobGliZ2VuLCBkaXJuYW1lKSB7CisgIFRlc3REaXJuYW1lKE5VTEwsICIuIik7CisgIFRlc3REaXJuYW1lKCIiLCAiLiIpOworICBUZXN0RGlybmFtZSgiL3Vzci9saWIiLCAiL3VzciIpOworICBUZXN0RGlybmFtZSgiL3Vzci8iLCAiLyIpOworICBUZXN0RGlybmFtZSgidXNyIiwgIi4iKTsKKyAgVGVzdERpcm5hbWUoIi4iLCAiLiIpOworICBUZXN0RGlybmFtZSgiLi4iLCAiLiIpOworICBUZXN0RGlybmFtZSgiLyIsICIvIik7Cit9CisKKyNpZiBfX0JJT05JQ19fCisKK3N0YXRpYyB2b2lkIFRlc3RCYXNlbmFtZShjb25zdCBjaGFyKiBpbiwgY29uc3QgY2hhciogZXhwZWN0ZWRfb3V0LCBpbnQgZXhwZWN0ZWRfcmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciogYnVmLCBzaXplX3QgYnVmX3NpemUsIGludCBleHBlY3RlZF9lcnJubykgeworICBlcnJubyA9IDA7CisgIGludCByYyA9IGJhc2VuYW1lX3IoaW4sIGJ1ZiwgYnVmX3NpemUpOworICBBU1NFUlRfRVEoZXhwZWN0ZWRfcmMsIHJjKSA8PCBpbjsKKyAgaWYgKHJjICE9IC0xICYmIGJ1ZiAhPSBOVUxMKSB7CisgICAgQVNTRVJUX1NUUkVRKGV4cGVjdGVkX291dCwgYnVmKSA8PCBpbjsKKyAgfQorICBBU1NFUlRfRVEoZXhwZWN0ZWRfZXJybm8sIGVycm5vKSA8PCBpbjsKK30KKworc3RhdGljIHZvaWQgVGVzdERpcm5hbWUoY29uc3QgY2hhciogaW4sIGNvbnN0IGNoYXIqIGV4cGVjdGVkX291dCwgaW50IGV4cGVjdGVkX3JjLAorICAgICAgICAgICAgICAgICAgICAgICAgY2hhciogYnVmLCBzaXplX3QgYnVmX3NpemUsIGludCBleHBlY3RlZF9lcnJubykgeworICBlcnJubyA9IDA7CisgIGludCByYyA9IGRpcm5hbWVfcihpbiwgYnVmLCBidWZfc2l6ZSk7CisgIEFTU0VSVF9FUShleHBlY3RlZF9yYywgcmMpIDw8IGluOworICBpZiAocmMgIT0gLTEgJiYgYnVmICE9IE5VTEwpIHsKKyAgICBBU1NFUlRfU1RSRVEoZXhwZWN0ZWRfb3V0LCBidWYpIDw8IGluOworICB9CisgIEFTU0VSVF9FUShleHBlY3RlZF9lcnJubywgZXJybm8pIDw8IGluOworfQorCitURVNUKGxpYmdlbiwgYmFzZW5hbWVfcikgeworICBjaGFyIGJ1ZlsyNTZdOworICBUZXN0QmFzZW5hbWUoIiIsICIuIiwgIDEsIE5VTEwsIDAsIDApOworICBUZXN0QmFzZW5hbWUoIiIsICIuIiwgLTEsIGJ1ZiwgMCwgRVJBTkdFKTsKKyAgVGVzdEJhc2VuYW1lKCIiLCAiLiIsIC0xLCBidWYsIDEsIEVSQU5HRSk7CisgIFRlc3RCYXNlbmFtZSgiIiwgIi4iLCAxLCBidWYsIDIsIDApOworICBUZXN0QmFzZW5hbWUoIiIsICIuIiwgMSwgYnVmLCBzaXplb2YoYnVmKSwgMCk7CisgIFRlc3RCYXNlbmFtZSgiL3Vzci9saWIiLCAibGliIiwgMywgYnVmLCBzaXplb2YoYnVmKSwgMCk7CisgIFRlc3RCYXNlbmFtZSgiL3Vzci8iLCAidXNyIiwgMywgYnVmLCBzaXplb2YoYnVmKSwgMCk7CisgIFRlc3RCYXNlbmFtZSgidXNyIiwgInVzciIsIDMsIGJ1Ziwgc2l6ZW9mKGJ1ZiksIDApOworICBUZXN0QmFzZW5hbWUoIi8iLCAiLyIsIDEsIGJ1Ziwgc2l6ZW9mKGJ1ZiksIDApOworICBUZXN0QmFzZW5hbWUoIi4iLCAiLiIsIDEsIGJ1Ziwgc2l6ZW9mKGJ1ZiksIDApOworICBUZXN0QmFzZW5hbWUoIi4uIiwgIi4uIiwgMiwgYnVmLCBzaXplb2YoYnVmKSwgMCk7Cit9CisKK1RFU1QobGliZ2VuLCBkaXJuYW1lX3IpIHsKKyAgY2hhciBidWZbMjU2XTsKKyAgVGVzdERpcm5hbWUoIiIsICIuIiwgIDEsIE5VTEwsIDAsIDApOworICBUZXN0RGlybmFtZSgiIiwgIi4iLCAtMSwgYnVmLCAwLCBFUkFOR0UpOworICBUZXN0RGlybmFtZSgiIiwgIi4iLCAtMSwgYnVmLCAxLCBFUkFOR0UpOworICBUZXN0RGlybmFtZSgiIiwgIi4iLCAxLCBidWYsIDIsIDApOworICBUZXN0RGlybmFtZSgiL3Vzci9saWIiLCAiL3VzciIsIDQsIGJ1Ziwgc2l6ZW9mKGJ1ZiksIDApOworICBUZXN0RGlybmFtZSgiL3Vzci8iLCAiLyIsIDEsIGJ1Ziwgc2l6ZW9mKGJ1ZiksIDApOworICBUZXN0RGlybmFtZSgidXNyIiwgIi4iLCAxLCBidWYsIHNpemVvZihidWYpLCAwKTsKKyAgVGVzdERpcm5hbWUoIi4iLCAiLiIsIDEsIGJ1Ziwgc2l6ZW9mKGJ1ZiksIDApOworICBUZXN0RGlybmFtZSgiLi4iLCAiLiIsIDEsIGJ1Ziwgc2l6ZW9mKGJ1ZiksIDApOworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL3Rlc3RzL21hbGxvY190ZXN0LmNwcCBiL3Rlc3RzL21hbGxvY190ZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNTk4NTNkCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvbWFsbG9jX3Rlc3QuY3BwCkBAIC0wLDAgKzEsMjM1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxtYWxsb2MuaD4KKworVEVTVChtYWxsb2MsIG1hbGxvY19zdGQpIHsKKyAgLy8gU2ltcGxlIG1hbGxvYyB0ZXN0LgorICB2b2lkICpwdHIgPSBtYWxsb2MoMTAwKTsKKyAgQVNTRVJUX1RSVUUocHRyICE9IE5VTEwpOworICBBU1NFUlRfTEUoMTAwVSwgbWFsbG9jX3VzYWJsZV9zaXplKHB0cikpOworCisgIGZyZWUocHRyKTsKK30KKworVEVTVChtYWxsb2MsIGNhbGxvY19zdGQpIHsKKyAgLy8gU2ltcGxlIGNhbGxvYyB0ZXN0LgorICBzaXplX3QgYWxsb2NfbGVuID0gMTAwOworICBjaGFyICpwdHIgPSAoY2hhciAqKWNhbGxvYygxLCBhbGxvY19sZW4pOworICBBU1NFUlRfVFJVRShwdHIgIT0gTlVMTCk7CisgIEFTU0VSVF9MRShhbGxvY19sZW4sIG1hbGxvY191c2FibGVfc2l6ZShwdHIpKTsKKyAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhbGxvY19sZW47IGkrKykgeworICAgIEFTU0VSVF9FUSgwLCBwdHJbaV0pOworICB9CisKKyAgZnJlZShwdHIpOworfQorCitURVNUKG1hbGxvYywgbWVtYWxpZ25fbXVsdGlwbGUpIHsKKyAgLy8gTWVtYWxpZ24gdGVzdCB3aGVyZSB0aGUgYWxpZ25tZW50IGlzIGFueSB2YWx1ZS4KKyAgZm9yIChzaXplX3QgaSA9IDA7IGkgPD0gMTI7IGkrKykgeworICAgIGZvciAoc2l6ZV90IGFsaWdubWVudCA9IDEgPDwgaTsgYWxpZ25tZW50IDwgKDFVIDw8IChpKzEpKTsgYWxpZ25tZW50KyspIHsKKyAgICAgIGNoYXIgKnB0ciA9IChjaGFyKiltZW1hbGlnbihhbGlnbm1lbnQsIDEwMCk7CisgICAgICBBU1NFUlRfVFJVRShwdHIgIT0gTlVMTCk7CisgICAgICBBU1NFUlRfTEUoMTAwVSwgbWFsbG9jX3VzYWJsZV9zaXplKHB0cikpOworICAgICAgQVNTRVJUX0VRKDAsIChpbnRwdHJfdClwdHIgJSAoMSA8PCBpKSk7CisKKyAgICAgIGZyZWUocHRyKTsKKyAgICB9CisgIH0KK30KKworVEVTVChtYWxsb2MsIG1lbWFsaWduX3JlYWxsb2MpIHsKKyAgLy8gTWVtYWxpZ24gYW5kIHRoZW4gcmVhbGxvYyB0aGUgcG9pbnRlciBhIGNvdXBsZSBvZiB0aW1lcy4KKyAgZm9yIChzaXplX3QgYWxpZ25tZW50ID0gMTsgYWxpZ25tZW50IDw9IDQwOTY7IGFsaWdubWVudCA8PD0gMSkgeworICAgIGNoYXIgKnB0ciA9IChjaGFyKiltZW1hbGlnbihhbGlnbm1lbnQsIDEwMCk7CisgICAgQVNTRVJUX1RSVUUocHRyICE9IE5VTEwpOworICAgIEFTU0VSVF9MRSgxMDBVLCBtYWxsb2NfdXNhYmxlX3NpemUocHRyKSk7CisgICAgQVNTRVJUX0VRKDBVLCAoaW50cHRyX3QpcHRyICUgYWxpZ25tZW50KTsKKyAgICBtZW1zZXQocHRyLCAweDIzLCAxMDApOworCisgICAgcHRyID0gKGNoYXIqKXJlYWxsb2MocHRyLCAyMDApOworICAgIEFTU0VSVF9UUlVFKHB0ciAhPSBOVUxMKTsKKyAgICBBU1NFUlRfTEUoMjAwVSwgbWFsbG9jX3VzYWJsZV9zaXplKHB0cikpOworICAgIEFTU0VSVF9UUlVFKHB0ciAhPSBOVUxMKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDEwMDsgaSsrKSB7CisgICAgICBBU1NFUlRfRVEoMHgyMywgcHRyW2ldKTsKKyAgICB9CisgICAgbWVtc2V0KHB0ciwgMHg0NSwgMjAwKTsKKworICAgIHB0ciA9IChjaGFyKilyZWFsbG9jKHB0ciwgMzAwKTsKKyAgICBBU1NFUlRfVFJVRShwdHIgIT0gTlVMTCk7CisgICAgQVNTRVJUX0xFKDMwMFUsIG1hbGxvY191c2FibGVfc2l6ZShwdHIpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDIwMDsgaSsrKSB7CisgICAgICBBU1NFUlRfRVEoMHg0NSwgcHRyW2ldKTsKKyAgICB9CisgICAgbWVtc2V0KHB0ciwgMHg2NywgMzAwKTsKKworICAgIHB0ciA9IChjaGFyKilyZWFsbG9jKHB0ciwgMjUwKTsKKyAgICBBU1NFUlRfVFJVRShwdHIgIT0gTlVMTCk7CisgICAgQVNTRVJUX0xFKDI1MFUsIG1hbGxvY191c2FibGVfc2l6ZShwdHIpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDI1MDsgaSsrKSB7CisgICAgICBBU1NFUlRfRVEoMHg2NywgcHRyW2ldKTsKKyAgICB9CisKKyAgICBmcmVlKHB0cik7CisgIH0KK30KKworVEVTVChtYWxsb2MsIG1hbGxvY19yZWFsbG9jX2xhcmdlcikgeworICAvLyBSZWFsbG9jIHRvIGEgbGFyZ2VyIHNpemUsIG1hbGxvYyBpcyB1c2VkIGZvciB0aGUgb3JpZ2luYWwgYWxsb2NhdGlvbi4KKyAgY2hhciAqcHRyID0gKGNoYXIgKiltYWxsb2MoMTAwKTsKKyAgQVNTRVJUX1RSVUUocHRyICE9IE5VTEwpOworICBBU1NFUlRfTEUoMTAwVSwgbWFsbG9jX3VzYWJsZV9zaXplKHB0cikpOworICBtZW1zZXQocHRyLCA2NywgMTAwKTsKKworICBwdHIgPSAoY2hhciAqKXJlYWxsb2MocHRyLCAyMDApOworICBBU1NFUlRfVFJVRShwdHIgIT0gTlVMTCk7CisgIEFTU0VSVF9MRSgyMDBVLCBtYWxsb2NfdXNhYmxlX3NpemUocHRyKSk7CisgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgMTAwOyBpKyspIHsKKyAgICBBU1NFUlRfRVEoNjcsIHB0cltpXSk7CisgIH0KKworICBmcmVlKHB0cik7Cit9CisKK1RFU1QobWFsbG9jLCBtYWxsb2NfcmVhbGxvY19zbWFsbGVyKSB7CisgIC8vIFJlYWxsb2MgdG8gYSBzbWFsbGVyIHNpemUsIG1hbGxvYyBpcyB1c2VkIGZvciB0aGUgb3JpZ2luYWwgYWxsb2NhdGlvbi4KKyAgY2hhciAqcHRyID0gKGNoYXIgKiltYWxsb2MoMjAwKTsKKyAgQVNTRVJUX1RSVUUocHRyICE9IE5VTEwpOworICBBU1NFUlRfTEUoMjAwVSwgbWFsbG9jX3VzYWJsZV9zaXplKHB0cikpOworICBtZW1zZXQocHRyLCA2NywgMjAwKTsKKworICBwdHIgPSAoY2hhciAqKXJlYWxsb2MocHRyLCAxMDApOworICBBU1NFUlRfVFJVRShwdHIgIT0gTlVMTCk7CisgIEFTU0VSVF9MRSgxMDBVLCBtYWxsb2NfdXNhYmxlX3NpemUocHRyKSk7CisgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgMTAwOyBpKyspIHsKKyAgICBBU1NFUlRfRVEoNjcsIHB0cltpXSk7CisgIH0KKworICBmcmVlKHB0cik7Cit9CisKK1RFU1QobWFsbG9jLCBtYWxsb2NfbXVsdGlwbGVfcmVhbGxvYykgeworICAvLyBNdWx0aXBsZSByZWFsbG9jcywgbWFsbG9jIGlzIHVzZWQgZm9yIHRoZSBvcmlnaW5hbCBhbGxvY2F0aW9uLgorICBjaGFyICpwdHIgPSAoY2hhciAqKW1hbGxvYygyMDApOworICBBU1NFUlRfVFJVRShwdHIgIT0gTlVMTCk7CisgIEFTU0VSVF9MRSgyMDBVLCBtYWxsb2NfdXNhYmxlX3NpemUocHRyKSk7CisgIG1lbXNldChwdHIsIDB4MjMsIDIwMCk7CisKKyAgcHRyID0gKGNoYXIgKilyZWFsbG9jKHB0ciwgMTAwKTsKKyAgQVNTRVJUX1RSVUUocHRyICE9IE5VTEwpOworICBBU1NFUlRfTEUoMTAwVSwgbWFsbG9jX3VzYWJsZV9zaXplKHB0cikpOworICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDEwMDsgaSsrKSB7CisgICAgQVNTRVJUX0VRKDB4MjMsIHB0cltpXSk7CisgIH0KKworICBwdHIgPSAoY2hhciopcmVhbGxvYyhwdHIsIDUwKTsKKyAgQVNTRVJUX1RSVUUocHRyICE9IE5VTEwpOworICBBU1NFUlRfTEUoNTBVLCBtYWxsb2NfdXNhYmxlX3NpemUocHRyKSk7CisgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgNTA7IGkrKykgeworICAgIEFTU0VSVF9FUSgweDIzLCBwdHJbaV0pOworICB9CisKKyAgcHRyID0gKGNoYXIqKXJlYWxsb2MocHRyLCAxNTApOworICBBU1NFUlRfVFJVRShwdHIgIT0gTlVMTCk7CisgIEFTU0VSVF9MRSgxNTBVLCBtYWxsb2NfdXNhYmxlX3NpemUocHRyKSk7CisgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgNTA7IGkrKykgeworICAgIEFTU0VSVF9FUSgweDIzLCBwdHJbaV0pOworICB9CisgIG1lbXNldChwdHIsIDB4MjMsIDE1MCk7CisKKyAgcHRyID0gKGNoYXIqKXJlYWxsb2MocHRyLCA0MjUpOworICBBU1NFUlRfVFJVRShwdHIgIT0gTlVMTCk7CisgIEFTU0VSVF9MRSg0MjVVLCBtYWxsb2NfdXNhYmxlX3NpemUocHRyKSk7CisgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgMTUwOyBpKyspIHsKKyAgICBBU1NFUlRfRVEoMHgyMywgcHRyW2ldKTsKKyAgfQorCisgIGZyZWUocHRyKTsKK30KK1RFU1QobWFsbG9jLCBjYWxsb2NfcmVhbGxvY19sYXJnZXIpIHsKKyAgLy8gUmVhbGxvYyB0byBhIGxhcmdlciBzaXplLCBjYWxsb2MgaXMgdXNlZCBmb3IgdGhlIG9yaWdpbmFsIGFsbG9jYXRpb24uCisgIGNoYXIgKnB0ciA9IChjaGFyICopY2FsbG9jKDEsIDEwMCk7CisgIEFTU0VSVF9UUlVFKHB0ciAhPSBOVUxMKTsKKyAgQVNTRVJUX0xFKDEwMFUsIG1hbGxvY191c2FibGVfc2l6ZShwdHIpKTsKKworICBwdHIgPSAoY2hhciAqKXJlYWxsb2MocHRyLCAyMDApOworICBBU1NFUlRfVFJVRShwdHIgIT0gTlVMTCk7CisgIEFTU0VSVF9MRSgyMDBVLCBtYWxsb2NfdXNhYmxlX3NpemUocHRyKSk7CisgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgMTAwOyBpKyspIHsKKyAgICBBU1NFUlRfRVEoMCwgcHRyW2ldKTsKKyAgfQorCisgIGZyZWUocHRyKTsKK30KKworVEVTVChtYWxsb2MsIGNhbGxvY19yZWFsbG9jX3NtYWxsZXIpIHsKKyAgLy8gUmVhbGxvYyB0byBhIHNtYWxsZXIgc2l6ZSwgY2FsbG9jIGlzIHVzZWQgZm9yIHRoZSBvcmlnaW5hbCBhbGxvY2F0aW9uLgorICBjaGFyICpwdHIgPSAoY2hhciAqKWNhbGxvYygxLCAyMDApOworICBBU1NFUlRfVFJVRShwdHIgIT0gTlVMTCk7CisgIEFTU0VSVF9MRSgyMDBVLCBtYWxsb2NfdXNhYmxlX3NpemUocHRyKSk7CisKKyAgcHRyID0gKGNoYXIgKilyZWFsbG9jKHB0ciwgMTAwKTsKKyAgQVNTRVJUX1RSVUUocHRyICE9IE5VTEwpOworICBBU1NFUlRfTEUoMTAwVSwgbWFsbG9jX3VzYWJsZV9zaXplKHB0cikpOworICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDEwMDsgaSsrKSB7CisgICAgQVNTRVJUX0VRKDAsIHB0cltpXSk7CisgIH0KKworICBmcmVlKHB0cik7Cit9CisKK1RFU1QobWFsbG9jLCBjYWxsb2NfbXVsdGlwbGVfcmVhbGxvYykgeworICAvLyBNdWx0aXBsZSByZWFsbG9jcywgY2FsbG9jIGlzIHVzZWQgZm9yIHRoZSBvcmlnaW5hbCBhbGxvY2F0aW9uLgorICBjaGFyICpwdHIgPSAoY2hhciAqKWNhbGxvYygxLCAyMDApOworICBBU1NFUlRfVFJVRShwdHIgIT0gTlVMTCk7CisgIEFTU0VSVF9MRSgyMDBVLCBtYWxsb2NfdXNhYmxlX3NpemUocHRyKSk7CisKKyAgcHRyID0gKGNoYXIgKilyZWFsbG9jKHB0ciwgMTAwKTsKKyAgQVNTRVJUX1RSVUUocHRyICE9IE5VTEwpOworICBBU1NFUlRfTEUoMTAwVSwgbWFsbG9jX3VzYWJsZV9zaXplKHB0cikpOworICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDEwMDsgaSsrKSB7CisgICAgQVNTRVJUX0VRKDAsIHB0cltpXSk7CisgIH0KKworICBwdHIgPSAoY2hhciopcmVhbGxvYyhwdHIsIDUwKTsKKyAgQVNTRVJUX1RSVUUocHRyICE9IE5VTEwpOworICBBU1NFUlRfTEUoNTBVLCBtYWxsb2NfdXNhYmxlX3NpemUocHRyKSk7CisgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgNTA7IGkrKykgeworICAgIEFTU0VSVF9FUSgwLCBwdHJbaV0pOworICB9CisKKyAgcHRyID0gKGNoYXIqKXJlYWxsb2MocHRyLCAxNTApOworICBBU1NFUlRfVFJVRShwdHIgIT0gTlVMTCk7CisgIEFTU0VSVF9MRSgxNTBVLCBtYWxsb2NfdXNhYmxlX3NpemUocHRyKSk7CisgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgNTA7IGkrKykgeworICAgIEFTU0VSVF9FUSgwLCBwdHJbaV0pOworICB9CisgIG1lbXNldChwdHIsIDAsIDE1MCk7CisKKyAgcHRyID0gKGNoYXIqKXJlYWxsb2MocHRyLCA0MjUpOworICBBU1NFUlRfVFJVRShwdHIgIT0gTlVMTCk7CisgIEFTU0VSVF9MRSg0MjVVLCBtYWxsb2NfdXNhYmxlX3NpemUocHRyKSk7CisgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgMTUwOyBpKyspIHsKKyAgICBBU1NFUlRfRVEoMCwgcHRyW2ldKTsKKyAgfQorCisgIGZyZWUocHRyKTsKK30KZGlmZiAtLWdpdCBhL3Rlc3RzL21hdGhfYmVuY2htYXJrLmNwcCBiL3Rlc3RzL21hdGhfYmVuY2htYXJrLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOGMxY2ZhCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvbWF0aF9iZW5jaG1hcmsuY3BwCkBAIC0wLDAgKzEsNjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW5jbHVkZSAiYmVuY2htYXJrLmgiCisKKyNpbmNsdWRlIDxtYXRoLmg+CisKKy8vIEF2b2lkIG9wdGltaXphdGlvbi4KK2RvdWJsZSBkOworZG91YmxlIHY7CisKK3N0YXRpYyB2b2lkIEJNX21hdGhfc3FydChpbnQgaXRlcnMpIHsKKyAgU3RhcnRCZW5jaG1hcmtUaW1pbmcoKTsKKworICBkID0gMC4wOworICB2ID0gMi4wOworICBmb3IgKGludCBpID0gMDsgaSA8IGl0ZXJzOyArK2kpIHsKKyAgICBkICs9IHNxcnQodik7CisgIH0KKworICBTdG9wQmVuY2htYXJrVGltaW5nKCk7Cit9CitCRU5DSE1BUksoQk1fbWF0aF9zcXJ0KTsKKworc3RhdGljIHZvaWQgQk1fbWF0aF9sb2cxMChpbnQgaXRlcnMpIHsKKyAgU3RhcnRCZW5jaG1hcmtUaW1pbmcoKTsKKworICBkID0gMC4wOworICB2ID0gMTIzNC4wOworICBmb3IgKGludCBpID0gMDsgaSA8IGl0ZXJzOyArK2kpIHsKKyAgICBkICs9IGxvZzEwKHYpOworICB9CisKKyAgU3RvcEJlbmNobWFya1RpbWluZygpOworfQorQkVOQ0hNQVJLKEJNX21hdGhfbG9nMTApOworCitzdGF0aWMgdm9pZCBCTV9tYXRoX2xvZ2IoaW50IGl0ZXJzKSB7CisgIFN0YXJ0QmVuY2htYXJrVGltaW5nKCk7CisKKyAgZCA9IDAuMDsKKyAgdiA9IDEyMzQuMDsKKyAgZm9yIChpbnQgaSA9IDA7IGkgPCBpdGVyczsgKytpKSB7CisgICAgZCArPSBsb2diKHYpOworICB9CisKKyAgU3RvcEJlbmNobWFya1RpbWluZygpOworfQorQkVOQ0hNQVJLKEJNX21hdGhfbG9nYik7CmRpZmYgLS1naXQgYS90ZXN0cy9tYXRoX3Rlc3QuY3BwIGIvdGVzdHMvbWF0aF90ZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NThhMTQ2Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvbWF0aF90ZXN0LmNwcApAQCAtMCwwICsxLDExNzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjZGVmaW5lIF9ERUNMQVJFX0M5OV9MREJMX01BVEggMQorCisjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKworI2luY2x1ZGUgPGZlbnYuaD4KKyNpbmNsdWRlIDxsaW1pdHMuaD4KKyNpbmNsdWRlIDxtYXRoLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisKK2Zsb2F0IGZsb2F0X3N1Ym5vcm1hbCgpIHsKKyAgdW5pb24geworICAgIGZsb2F0IGY7CisgICAgdWludDMyX3QgaTsKKyAgfSB1OworICB1LmkgPSAweDAwN2ZmZmZmOworICByZXR1cm4gdS5mOworfQorCitkb3VibGUgZG91YmxlX3N1Ym5vcm1hbCgpIHsKKyAgdW5pb24geworICAgIGRvdWJsZSBkOworICAgIHVpbnQ2NF90IGk7CisgIH0gdTsKKyAgdS5pID0gMHgwMDBmZmZmZmZmZmZmZmZmTEw7CisgIHJldHVybiB1LmQ7Cit9CisKK1RFU1QobWF0aCwgZnBjbGFzc2lmeSkgeworICBBU1NFUlRfRVEoRlBfSU5GSU5JVEUsIGZwY2xhc3NpZnkoSU5GSU5JVFkpKTsKKyAgQVNTRVJUX0VRKEZQX0lORklOSVRFLCBmcGNsYXNzaWZ5KEhVR0VfVkFMRikpOworICBBU1NFUlRfRVEoRlBfSU5GSU5JVEUsIGZwY2xhc3NpZnkoSFVHRV9WQUwpKTsKKworICBBU1NFUlRfRVEoRlBfTkFOLCBmcGNsYXNzaWZ5KG5hbmYoIiIpKSk7CisgIEFTU0VSVF9FUShGUF9OQU4sIGZwY2xhc3NpZnkobmFuKCIiKSkpOworCisgIEFTU0VSVF9FUShGUF9OT1JNQUwsIGZwY2xhc3NpZnkoMS4wZikpOworICBBU1NFUlRfRVEoRlBfTk9STUFMLCBmcGNsYXNzaWZ5KDEuMCkpOworCisgIEFTU0VSVF9FUShGUF9TVUJOT1JNQUwsIGZwY2xhc3NpZnkoZmxvYXRfc3Vibm9ybWFsKCkpKTsKKyAgQVNTRVJUX0VRKEZQX1NVQk5PUk1BTCwgZnBjbGFzc2lmeShkb3VibGVfc3Vibm9ybWFsKCkpKTsKKworICBBU1NFUlRfRVEoRlBfWkVSTywgZnBjbGFzc2lmeSgwLjBmKSk7CisgIEFTU0VSVF9FUShGUF9aRVJPLCBmcGNsYXNzaWZ5KDAuMCkpOworfQorCisvKiBUT0RPOiBzdGxwb3J0IGJyZWFrcyB0aGUgaXNmaW5pdGUgbWFjcm8KK1RFU1QobWF0aCwgaXNmaW5pdGUpIHsKKyAgQVNTRVJUX1RSVUUoaXNmaW5pdGUoMTIzLjBmKSk7CisgIEFTU0VSVF9UUlVFKGlzZmluaXRlKDEyMy4wKSk7CisgIEFTU0VSVF9GQUxTRShpc2Zpbml0ZShIVUdFX1ZBTEYpKTsKKyAgQVNTRVJUX0ZBTFNFKGlzZmluaXRlKEhVR0VfVkFMKSk7Cit9CisqLworCitURVNUKG1hdGgsIGlzaW5mKSB7CisgIEFTU0VSVF9GQUxTRShpc2luZigxMjMuMGYpKTsKKyAgQVNTRVJUX0ZBTFNFKGlzaW5mKDEyMy4wKSk7CisgIEFTU0VSVF9UUlVFKGlzaW5mKEhVR0VfVkFMRikpOworICBBU1NFUlRfVFJVRShpc2luZihIVUdFX1ZBTCkpOworfQorCitURVNUKG1hdGgsIGlzbmFuKSB7CisgIEFTU0VSVF9GQUxTRShpc25hbigxMjMuMGYpKTsKKyAgQVNTRVJUX0ZBTFNFKGlzbmFuKDEyMy4wKSk7CisgIEFTU0VSVF9UUlVFKGlzbmFuKG5hbmYoIiIpKSk7CisgIEFTU0VSVF9UUlVFKGlzbmFuKG5hbigiIikpKTsKK30KKworVEVTVChtYXRoLCBpc25vcm1hbCkgeworICBBU1NFUlRfVFJVRShpc25vcm1hbCgxMjMuMGYpKTsKKyAgQVNTRVJUX1RSVUUoaXNub3JtYWwoMTIzLjApKTsKKyAgQVNTRVJUX0ZBTFNFKGlzbm9ybWFsKGZsb2F0X3N1Ym5vcm1hbCgpKSk7CisgIEFTU0VSVF9GQUxTRShpc25vcm1hbChkb3VibGVfc3Vibm9ybWFsKCkpKTsKK30KKworLy8gVE9ETzogaXNncmVhdGVyLCBpc2dyZWF0ZXJlcXVhbHMsIGlzbGVzcywgaXNsZXNzZXF1YWwsIGlzbGVzc2dyZWF0ZXIsIGlzdW5vcmRlcmVkCisKKy8qIFRPRE86IHN0bHBvcnQgYnJlYWtzIHRoZSBzaWduYml0IG1hY3JvCitURVNUKG1hdGgsIHNpZ25iaXQpIHsKKyAgQVNTRVJUX0VRKDAsIHNpZ25iaXQoMC4wZikpOworICBBU1NFUlRfRVEoMCwgc2lnbmJpdCgwLjApKTsKKworICBBU1NFUlRfRVEoMCwgc2lnbmJpdCgxLjBmKSk7CisgIEFTU0VSVF9FUSgwLCBzaWduYml0KDEuMCkpOworCisgIEFTU0VSVF9ORSgwLCBzaWduYml0KC0xLjBmKSk7CisgIEFTU0VSVF9ORSgwLCBzaWduYml0KC0xLjApKTsKK30KKyovCisKKyNpZiBkZWZpbmVkKF9fQklPTklDX18pCitURVNUKG1hdGgsIF9fZnBjbGFzc2lmeWQpIHsKKyAgQVNTRVJUX0VRKEZQX0lORklOSVRFLCBfX2ZwY2xhc3NpZnlkKEhVR0VfVkFMKSk7CisgIEFTU0VSVF9FUShGUF9OQU4sIF9fZnBjbGFzc2lmeWQobmFuKCIiKSkpOworICBBU1NFUlRfRVEoRlBfTk9STUFMLCBfX2ZwY2xhc3NpZnlkKDEuMCkpOworICBBU1NFUlRfRVEoRlBfU1VCTk9STUFMLCBfX2ZwY2xhc3NpZnlkKGRvdWJsZV9zdWJub3JtYWwoKSkpOworICBBU1NFUlRfRVEoRlBfWkVSTywgX19mcGNsYXNzaWZ5ZCgwLjApKTsKK30KKyNlbmRpZgorCisjaWYgZGVmaW5lZChfX0JJT05JQ19fKQorVEVTVChtYXRoLCBfX2ZwY2xhc3NpZnlmKSB7CisgIEFTU0VSVF9FUShGUF9JTkZJTklURSwgX19mcGNsYXNzaWZ5ZihIVUdFX1ZBTEYpKTsKKyAgQVNTRVJUX0VRKEZQX05BTiwgX19mcGNsYXNzaWZ5ZihuYW5mKCIiKSkpOworICBBU1NFUlRfRVEoRlBfTk9STUFMLCBfX2ZwY2xhc3NpZnlmKDEuMGYpKTsKKyAgQVNTRVJUX0VRKEZQX1NVQk5PUk1BTCwgX19mcGNsYXNzaWZ5ZihmbG9hdF9zdWJub3JtYWwoKSkpOworICBBU1NFUlRfRVEoRlBfWkVSTywgX19mcGNsYXNzaWZ5ZigwLjBmKSk7Cit9CisjZW5kaWYKKworI2lmIGRlZmluZWQoX19CSU9OSUNfXykKK1RFU1QobWF0aCwgX19mcGNsYXNzaWZ5bCkgeworICBFWFBFQ1RfRVEoRlBfSU5GSU5JVEUsIF9fZnBjbGFzc2lmeWwoSFVHRV9WQUxMKSk7CisgIEVYUEVDVF9FUShGUF9OQU4sIF9fZnBjbGFzc2lmeWwobmFubCgiIikpKTsKKyAgRVhQRUNUX0VRKEZQX05PUk1BTCwgX19mcGNsYXNzaWZ5bCgxLjApKTsKKyAgRVhQRUNUX0VRKEZQX1NVQk5PUk1BTCwgX19mcGNsYXNzaWZ5bChkb3VibGVfc3Vibm9ybWFsKCkpKTsKKyAgRVhQRUNUX0VRKEZQX1pFUk8sIF9fZnBjbGFzc2lmeWwoMC4wKSk7Cit9CisjZW5kaWYKKworVEVTVChtYXRoLCBmaW5pdGVmKSB7CisgIEFTU0VSVF9UUlVFKGZpbml0ZWYoMTIzLjBmKSk7CisgIEFTU0VSVF9GQUxTRShmaW5pdGVmKEhVR0VfVkFMRikpOworfQorCisjaWYgZGVmaW5lZChfX0JJT05JQ19fKQorVEVTVChtYXRoLCBfX2lzZmluaXRlKSB7CisgIEFTU0VSVF9UUlVFKF9faXNmaW5pdGUoMTIzLjApKTsKKyAgQVNTRVJUX0ZBTFNFKF9faXNmaW5pdGUoSFVHRV9WQUwpKTsKK30KKyNlbmRpZgorCisjaWYgZGVmaW5lZChfX0JJT05JQ19fKQorVEVTVChtYXRoLCBfX2lzZmluaXRlZikgeworICBBU1NFUlRfVFJVRShfX2lzZmluaXRlZigxMjMuMGYpKTsKKyAgQVNTRVJUX0ZBTFNFKF9faXNmaW5pdGVmKEhVR0VfVkFMRikpOworfQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9fQklPTklDX18pCitURVNUKG1hdGgsIF9faXNmaW5pdGVsKSB7CisgIEFTU0VSVF9UUlVFKF9faXNmaW5pdGVsKDEyMy4wZikpOworICBBU1NFUlRfRkFMU0UoX19pc2Zpbml0ZWwoSFVHRV9WQUxMKSk7Cit9CisjZW5kaWYKKworVEVTVChtYXRoLCBmaW5pdGUpIHsKKyAgQVNTRVJUX1RSVUUoZmluaXRlKDEyMy4wKSk7CisgIEFTU0VSVF9GQUxTRShmaW5pdGUoSFVHRV9WQUwpKTsKK30KKworVEVTVChtYXRoLCBfX2lzaW5mZikgeworICBBU1NFUlRfRkFMU0UoX19pc2luZmYoMTIzLjBmKSk7CisgIEFTU0VSVF9UUlVFKF9faXNpbmZmKEhVR0VfVkFMRikpOworfQorCitURVNUKG1hdGgsIF9faXNpbmZsKSB7CisgIEFTU0VSVF9GQUxTRShfX2lzaW5mbCgxMjMuMCkpOworICBBU1NFUlRfVFJVRShfX2lzaW5mbChIVUdFX1ZBTEwpKTsKK30KKworVEVTVChtYXRoLCBfX2lzbmFuZikgeworICBBU1NFUlRfRkFMU0UoX19pc25hbmYoMTIzLjBmKSk7CisgIEFTU0VSVF9UUlVFKF9faXNuYW5mKG5hbmYoIiIpKSk7Cit9CisKK1RFU1QobWF0aCwgX19pc25hbmwpIHsKKyAgQVNTRVJUX0ZBTFNFKF9faXNuYW5sKDEyMy4wKSk7CisgIEFTU0VSVF9UUlVFKF9faXNuYW5sKG5hbmwoIiIpKSk7Cit9CisKK1RFU1QobWF0aCwgaXNuYW5mKSB7CisgIEFTU0VSVF9GQUxTRShpc25hbmYoMTIzLjBmKSk7CisgIEFTU0VSVF9UUlVFKGlzbmFuZihuYW5mKCIiKSkpOworfQorCisjaWYgZGVmaW5lZChfX0JJT05JQ19fKQorVEVTVChtYXRoLCBfX2lzbm9ybWFsKSB7CisgIEFTU0VSVF9UUlVFKF9faXNub3JtYWwoMTIzLjApKTsKKyAgQVNTRVJUX0ZBTFNFKF9faXNub3JtYWwoZG91YmxlX3N1Ym5vcm1hbCgpKSk7Cit9CisjZW5kaWYKKworI2lmIGRlZmluZWQoX19CSU9OSUNfXykKK1RFU1QobWF0aCwgX19pc25vcm1hbGYpIHsKKyAgQVNTRVJUX1RSVUUoX19pc25vcm1hbGYoMTIzLjBmKSk7CisgIEFTU0VSVF9GQUxTRShfX2lzbm9ybWFsZihmbG9hdF9zdWJub3JtYWwoKSkpOworfQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9fQklPTklDX18pCitURVNUKG1hdGgsIF9faXNub3JtYWxsKSB7CisgIEFTU0VSVF9UUlVFKF9faXNub3JtYWxsKDEyMy4wKSk7CisgIEFTU0VSVF9GQUxTRShfX2lzbm9ybWFsbChkb3VibGVfc3Vibm9ybWFsKCkpKTsKK30KKyNlbmRpZgorCitURVNUKG1hdGgsIF9fc2lnbmJpdCkgeworICBBU1NFUlRfRVEoMCwgX19zaWduYml0KDAuMCkpOworICBBU1NFUlRfRVEoMCwgX19zaWduYml0KDEuMCkpOworICBBU1NFUlRfTkUoMCwgX19zaWduYml0KC0xLjApKTsKK30KKworVEVTVChtYXRoLCBfX3NpZ25iaXRmKSB7CisgIEFTU0VSVF9FUSgwLCBfX3NpZ25iaXRmKDAuMGYpKTsKKyAgQVNTRVJUX0VRKDAsIF9fc2lnbmJpdGYoMS4wZikpOworICBBU1NFUlRfTkUoMCwgX19zaWduYml0ZigtMS4wZikpOworfQorCitURVNUKG1hdGgsIF9fc2lnbmJpdGwpIHsKKyAgQVNTRVJUX0VRKDAsIF9fc2lnbmJpdGwoMC4wKSk7CisgIEFTU0VSVF9FUSgwLCBfX3NpZ25iaXRsKDEuMCkpOworICBBU1NFUlRfTkUoMCwgX19zaWduYml0bCgtMS4wKSk7Cit9CisKK1RFU1QobWF0aCwgYWNvcykgeworICBBU1NFUlRfRkxPQVRfRVEoTV9QSS8yLjAsIGFjb3MoMC4wKSk7Cit9CisKK1RFU1QobWF0aCwgYWNvc2YpIHsKKyAgQVNTRVJUX0ZMT0FUX0VRKHN0YXRpY19jYXN0PGZsb2F0PihNX1BJKS8yLjBmLCBhY29zZigwLjBmKSk7Cit9CisKK1RFU1QobWF0aCwgYWNvc2wpIHsKKyAgQVNTRVJUX0ZMT0FUX0VRKE1fUEkvMi4wLCBhY29zbCgwLjApKTsKK30KKworVEVTVChtYXRoLCBhc2luKSB7CisgIEFTU0VSVF9GTE9BVF9FUSgwLjAsIGFzaW4oMC4wKSk7Cit9CisKK1RFU1QobWF0aCwgYXNpbmYpIHsKKyAgQVNTRVJUX0ZMT0FUX0VRKDAuMGYsIGFzaW5mKDAuMGYpKTsKK30KKworVEVTVChtYXRoLCBhc2lubCkgeworICBBU1NFUlRfRkxPQVRfRVEoMC4wLCBhc2lubCgwLjApKTsKK30KKworVEVTVChtYXRoLCBhdGFuKSB7CisgIEFTU0VSVF9GTE9BVF9FUSgwLjAsIGF0YW4oMC4wKSk7Cit9CisKK1RFU1QobWF0aCwgYXRhbmYpIHsKKyAgQVNTRVJUX0ZMT0FUX0VRKDAuMGYsIGF0YW5mKDAuMGYpKTsKK30KKworVEVTVChtYXRoLCBhdGFubCkgeworICBBU1NFUlRfRkxPQVRfRVEoMC4wLCBhdGFubCgwLjApKTsKK30KKworVEVTVChtYXRoLCBhdGFuMikgeworICBBU1NFUlRfRkxPQVRfRVEoMC4wLCBhdGFuMigwLjAsIDAuMCkpOworfQorCitURVNUKG1hdGgsIGF0YW4yZikgeworICBBU1NFUlRfRkxPQVRfRVEoMC4wZiwgYXRhbjJmKDAuMGYsIDAuMGYpKTsKK30KKworVEVTVChtYXRoLCBhdGFuMmwpIHsKKyAgQVNTRVJUX0ZMT0FUX0VRKDAuMCwgYXRhbjJsKDAuMCwgMC4wKSk7Cit9CisKK1RFU1QobWF0aCwgY29zKSB7CisgIEFTU0VSVF9GTE9BVF9FUSgxLjAsIGNvcygwLjApKTsKK30KKworVEVTVChtYXRoLCBjb3NmKSB7CisgIEFTU0VSVF9GTE9BVF9FUSgxLjBmLCBjb3NmKDAuMGYpKTsKK30KKworVEVTVChtYXRoLCBjb3NsKSB7CisgIEFTU0VSVF9GTE9BVF9FUSgxLjAsIGNvc2woMC4wKSk7Cit9CisKK1RFU1QobWF0aCwgc2luKSB7CisgIEFTU0VSVF9GTE9BVF9FUSgwLjAsIHNpbigwLjApKTsKK30KKworVEVTVChtYXRoLCBzaW5mKSB7CisgIEFTU0VSVF9GTE9BVF9FUSgwLjBmLCBzaW5mKDAuMGYpKTsKK30KKworVEVTVChtYXRoLCBzaW5sKSB7CisgIEFTU0VSVF9GTE9BVF9FUSgwLjAsIHNpbmwoMC4wKSk7Cit9CisKK1RFU1QobWF0aCwgdGFuKSB7CisgIEFTU0VSVF9GTE9BVF9FUSgwLjAsIHRhbigwLjApKTsKK30KKworVEVTVChtYXRoLCB0YW5mKSB7CisgIEFTU0VSVF9GTE9BVF9FUSgwLjBmLCB0YW5mKDAuMGYpKTsKK30KKworVEVTVChtYXRoLCB0YW5sKSB7CisgIEFTU0VSVF9GTE9BVF9FUSgwLjAsIHRhbmwoMC4wKSk7Cit9CisKK1RFU1QobWF0aCwgYWNvc2gpIHsKKyAgQVNTRVJUX0ZMT0FUX0VRKDAuMCwgYWNvc2goMS4wKSk7Cit9CisKK1RFU1QobWF0aCwgYWNvc2hmKSB7CisgIEFTU0VSVF9GTE9BVF9FUSgwLjBmLCBhY29zaGYoMS4wZikpOworfQorCitURVNUKG1hdGgsIGFjb3NobCkgeworICBBU1NFUlRfRkxPQVRfRVEoMC4wLCBhY29zaGwoMS4wKSk7Cit9CisKK1RFU1QobWF0aCwgYXNpbmgpIHsKKyAgQVNTRVJUX0ZMT0FUX0VRKDAuMCwgYXNpbmgoMC4wKSk7Cit9CisKK1RFU1QobWF0aCwgYXNpbmhmKSB7CisgIEFTU0VSVF9GTE9BVF9FUSgwLjBmLCBhc2luaGYoMC4wZikpOworfQorCitURVNUKG1hdGgsIGFzaW5obCkgeworICBBU1NFUlRfRkxPQVRfRVEoMC4wLCBhc2luaGwoMC4wKSk7Cit9CisKK1RFU1QobWF0aCwgYXRhbmgpIHsKKyAgQVNTRVJUX0ZMT0FUX0VRKDAuMCwgYXRhbmgoMC4wKSk7Cit9CisKK1RFU1QobWF0aCwgYXRhbmhmKSB7CisgIEFTU0VSVF9GTE9BVF9FUSgwLjBmLCBhdGFuaGYoMC4wZikpOworfQorCitURVNUKG1hdGgsIGF0YW5obCkgeworICBBU1NFUlRfRkxPQVRfRVEoMC4wLCBhdGFuaGwoMC4wKSk7Cit9CisKK1RFU1QobWF0aCwgY29zaCkgeworICBBU1NFUlRfRkxPQVRfRVEoMS4wLCBjb3NoKDAuMCkpOworfQorCitURVNUKG1hdGgsIGNvc2hmKSB7CisgIEFTU0VSVF9GTE9BVF9FUSgxLjBmLCBjb3NoZigwLjBmKSk7Cit9CisKK1RFU1QobWF0aCwgY29zaGwpIHsKKyAgQVNTRVJUX0ZMT0FUX0VRKDEuMCwgY29zaGwoMC4wKSk7Cit9CisKK1RFU1QobWF0aCwgc2luaCkgeworICBBU1NFUlRfRkxPQVRfRVEoMC4wLCBzaW5oKDAuMCkpOworfQorCitURVNUKG1hdGgsIHNpbmhmKSB7CisgIEFTU0VSVF9GTE9BVF9FUSgwLjBmLCBzaW5oZigwLjBmKSk7Cit9CisKK1RFU1QobWF0aCwgc2luaGwpIHsKKyAgQVNTRVJUX0ZMT0FUX0VRKDAuMCwgc2luaGwoMC4wKSk7Cit9CisKK1RFU1QobWF0aCwgdGFuaCkgeworICBBU1NFUlRfRkxPQVRfRVEoMC4wLCB0YW5oKDAuMCkpOworfQorCitURVNUKG1hdGgsIHRhbmhmKSB7CisgIEFTU0VSVF9GTE9BVF9FUSgwLjBmLCB0YW5oZigwLjBmKSk7Cit9CisKK1RFU1QobWF0aCwgdGFuaGwpIHsKKyAgQVNTRVJUX0ZMT0FUX0VRKDAuMCwgdGFuaGwoMC4wKSk7Cit9CisKK1RFU1QobWF0aCwgbG9nKSB7CisgIEFTU0VSVF9GTE9BVF9FUSgxLjAsIGxvZyhNX0UpKTsKK30KKworVEVTVChtYXRoLCBsb2dmKSB7CisgIEFTU0VSVF9GTE9BVF9FUSgxLjBmLCBsb2dmKHN0YXRpY19jYXN0PGZsb2F0PihNX0UpKSk7Cit9CisKK1RFU1QobWF0aCwgbG9nbCkgeworICBBU1NFUlRfRkxPQVRfRVEoMS4wLCBsb2dsKE1fRSkpOworfQorCitURVNUKG1hdGgsIGxvZzIpIHsKKyAgQVNTRVJUX0ZMT0FUX0VRKDEyLjAsIGxvZzIoNDA5Ni4wKSk7Cit9CisKK1RFU1QobWF0aCwgbG9nMmYpIHsKKyAgQVNTRVJUX0ZMT0FUX0VRKDEyLjBmLCBsb2cyZig0MDk2LjBmKSk7Cit9CisKK1RFU1QobWF0aCwgbG9nMmwpIHsKKyAgQVNTRVJUX0ZMT0FUX0VRKDEyLjAsIGxvZzJsKDQwOTYuMCkpOworfQorCitURVNUKG1hdGgsIGxvZzEwKSB7CisgIEFTU0VSVF9GTE9BVF9FUSgzLjAsIGxvZzEwKDEwMDAuMCkpOworfQorCitURVNUKG1hdGgsIGxvZzEwZikgeworICBBU1NFUlRfRkxPQVRfRVEoMy4wZiwgbG9nMTBmKDEwMDAuMGYpKTsKK30KKworVEVTVChtYXRoLCBsb2cxMGwpIHsKKyAgQVNTRVJUX0ZMT0FUX0VRKDMuMCwgbG9nMTBsKDEwMDAuMCkpOworfQorCitURVNUKG1hdGgsIGNicnQpIHsKKyAgQVNTRVJUX0ZMT0FUX0VRKDMuMCwgY2JydCgyNy4wKSk7Cit9CisKK1RFU1QobWF0aCwgY2JydGYpIHsKKyAgQVNTRVJUX0ZMT0FUX0VRKDMuMGYsIGNicnRmKDI3LjBmKSk7Cit9CisKK1RFU1QobWF0aCwgY2JydGwpIHsKKyAgQVNTRVJUX0ZMT0FUX0VRKDMuMCwgY2JydGwoMjcuMCkpOworfQorCitURVNUKG1hdGgsIHNxcnQpIHsKKyAgQVNTRVJUX0ZMT0FUX0VRKDIuMCwgc3FydCg0LjApKTsKK30KKworVEVTVChtYXRoLCBzcXJ0ZikgeworICBBU1NFUlRfRkxPQVRfRVEoMi4wZiwgc3FydGYoNC4wZikpOworfQorCitURVNUKG1hdGgsIHNxcnRsKSB7CisgIEFTU0VSVF9GTE9BVF9FUSgyLjAsIHNxcnRsKDQuMCkpOworfQorCitURVNUKG1hdGgsIGV4cCkgeworICBBU1NFUlRfRkxPQVRfRVEoMS4wLCBleHAoMC4wKSk7CisgIEFTU0VSVF9GTE9BVF9FUShNX0UsIGV4cCgxLjApKTsKK30KKworVEVTVChtYXRoLCBleHBmKSB7CisgIEFTU0VSVF9GTE9BVF9FUSgxLjBmLCBleHBmKDAuMGYpKTsKKyAgQVNTRVJUX0ZMT0FUX0VRKHN0YXRpY19jYXN0PGZsb2F0PihNX0UpLCBleHBmKDEuMGYpKTsKK30KKworVEVTVChtYXRoLCBleHBsKSB7CisgIEFTU0VSVF9GTE9BVF9FUSgxLjAsIGV4cGwoMC4wKSk7CisgIEFTU0VSVF9GTE9BVF9FUShNX0UsIGV4cGwoMS4wKSk7Cit9CisKK1RFU1QobWF0aCwgZXhwMikgeworICBBU1NFUlRfRkxPQVRfRVEoOC4wLCBleHAyKDMuMCkpOworfQorCitURVNUKG1hdGgsIGV4cDJmKSB7CisgIEFTU0VSVF9GTE9BVF9FUSg4LjBmLCBleHAyZigzLjBmKSk7Cit9CisKK1RFU1QobWF0aCwgZXhwMmwpIHsKKyAgQVNTRVJUX0ZMT0FUX0VRKDguMCwgZXhwMmwoMy4wKSk7Cit9CisKK1RFU1QobWF0aCwgZXhwbTEpIHsKKyAgQVNTRVJUX0ZMT0FUX0VRKE1fRSAtIDEuMCwgZXhwbTEoMS4wKSk7Cit9CisKK1RFU1QobWF0aCwgZXhwbTFmKSB7CisgIEFTU0VSVF9GTE9BVF9FUShzdGF0aWNfY2FzdDxmbG9hdD4oTV9FKSAtIDEuMGYsIGV4cG0xZigxLjBmKSk7Cit9CisKK1RFU1QobWF0aCwgZXhwbTFsKSB7CisgIEFTU0VSVF9GTE9BVF9FUShNX0UgLSAxLjAsIGV4cG0xbCgxLjApKTsKK30KKworVEVTVChtYXRoLCBwb3cpIHsKKyAgQVNTRVJUX0ZMT0FUX0VRKDguMCwgcG93KDIuMCwgMy4wKSk7Cit9CisKK1RFU1QobWF0aCwgcG93ZikgeworICBBU1NFUlRfRkxPQVRfRVEoOC4wZiwgcG93ZigyLjBmLCAzLjBmKSk7Cit9CisKK1RFU1QobWF0aCwgcG93bCkgeworICBBU1NFUlRfRkxPQVRfRVEoOC4wLCBwb3dsKDIuMCwgMy4wKSk7Cit9CisKK1RFU1QobWF0aCwgY2VpbCkgeworICBBU1NFUlRfRkxPQVRfRVEoMS4wLCBjZWlsKDAuOSkpOworfQorCitURVNUKG1hdGgsIGNlaWxmKSB7CisgIEFTU0VSVF9GTE9BVF9FUSgxLjBmLCBjZWlsZigwLjlmKSk7Cit9CisKK1RFU1QobWF0aCwgY2VpbGwpIHsKKyAgQVNTRVJUX0ZMT0FUX0VRKDEuMCwgY2VpbGwoMC45KSk7Cit9CisKK1RFU1QobWF0aCwgZmxvb3IpIHsKKyAgQVNTRVJUX0ZMT0FUX0VRKDEuMCwgZmxvb3IoMS4xKSk7Cit9CisKK1RFU1QobWF0aCwgZmxvb3JmKSB7CisgIEFTU0VSVF9GTE9BVF9FUSgxLjBmLCBmbG9vcmYoMS4xZikpOworfQorCitURVNUKG1hdGgsIGZsb29ybCkgeworICBBU1NFUlRfRkxPQVRfRVEoMS4wLCBmbG9vcmwoMS4xKSk7Cit9CisKK1RFU1QobWF0aCwgZmFicykgeworICBBU1NFUlRfRkxPQVRfRVEoMS4wLCBmYWJzKC0xLjApKTsKK30KKworVEVTVChtYXRoLCBmYWJzZikgeworICBBU1NFUlRfRkxPQVRfRVEoMS4wZiwgZmFic2YoLTEuMGYpKTsKK30KKworVEVTVChtYXRoLCBmYWJzbCkgeworICBBU1NFUlRfRkxPQVRfRVEoMS4wLCBmYWJzbCgtMS4wKSk7Cit9CisKK1RFU1QobWF0aCwgbGRleHApIHsKKyAgQVNTRVJUX0ZMT0FUX0VRKDE2LjAsIGxkZXhwKDIuMCwgMy4wKSk7Cit9CisKK1RFU1QobWF0aCwgbGRleHBmKSB7CisgIEFTU0VSVF9GTE9BVF9FUSgxNi4wZiwgbGRleHBmKDIuMGYsIDMuMGYpKTsKK30KKworVEVTVChtYXRoLCBsZGV4cGwpIHsKKyAgQVNTRVJUX0ZMT0FUX0VRKDE2LjAsIGxkZXhwbCgyLjAsIDMuMCkpOworfQorCitURVNUKG1hdGgsIGZtb2QpIHsKKyAgQVNTRVJUX0ZMT0FUX0VRKDIuMCwgZm1vZCgxMi4wLCAxMC4wKSk7Cit9CisKK1RFU1QobWF0aCwgZm1vZGYpIHsKKyAgQVNTRVJUX0ZMT0FUX0VRKDIuMGYsIGZtb2RmKDEyLjBmLCAxMC4wZikpOworfQorCitURVNUKG1hdGgsIGZtb2RsKSB7CisgIEFTU0VSVF9GTE9BVF9FUSgyLjAsIGZtb2RsKDEyLjAsIDEwLjApKTsKK30KKworVEVTVChtYXRoLCByZW1haW5kZXIpIHsKKyAgQVNTRVJUX0ZMT0FUX0VRKDIuMCwgcmVtYWluZGVyKDEyLjAsIDEwLjApKTsKK30KKworVEVTVChtYXRoLCByZW1haW5kZXJmKSB7CisgIEFTU0VSVF9GTE9BVF9FUSgyLjBmLCByZW1haW5kZXJmKDEyLjBmLCAxMC4wZikpOworfQorCitURVNUKG1hdGgsIHJlbWFpbmRlcmwpIHsKKyAgQVNTRVJUX0ZMT0FUX0VRKDIuMCwgcmVtYWluZGVybCgxMi4wLCAxMC4wKSk7Cit9CisKK1RFU1QobWF0aCwgZHJlbSkgeworICBBU1NFUlRfRkxPQVRfRVEoMi4wLCBkcmVtKDEyLjAsIDEwLjApKTsKK30KKworVEVTVChtYXRoLCBkcmVtZikgeworICBBU1NFUlRfRkxPQVRfRVEoMi4wZiwgZHJlbWYoMTIuMGYsIDEwLjBmKSk7Cit9CisKK1RFU1QobWF0aCwgZm1heCkgeworICBBU1NFUlRfRkxPQVRfRVEoMTIuMCwgZm1heCgxMi4wLCAxMC4wKSk7CisgIEFTU0VSVF9GTE9BVF9FUSgxMi4wLCBmbWF4KDEyLjAsIG5hbigiIikpKTsKKyAgQVNTRVJUX0ZMT0FUX0VRKDEyLjAsIGZtYXgobmFuKCIiKSwgMTIuMCkpOworfQorCitURVNUKG1hdGgsIGZtYXhmKSB7CisgIEFTU0VSVF9GTE9BVF9FUSgxMi4wZiwgZm1heGYoMTIuMGYsIDEwLjBmKSk7CisgIEFTU0VSVF9GTE9BVF9FUSgxMi4wZiwgZm1heGYoMTIuMGYsIG5hbmYoIiIpKSk7CisgIEFTU0VSVF9GTE9BVF9FUSgxMi4wZiwgZm1heGYobmFuZigiIiksIDEyLjBmKSk7Cit9CisKK1RFU1QobWF0aCwgZm1heGwpIHsKKyAgQVNTRVJUX0ZMT0FUX0VRKDEyLjAsIGZtYXhsKDEyLjAsIDEwLjApKTsKKyAgQVNTRVJUX0ZMT0FUX0VRKDEyLjAsIGZtYXhsKDEyLjAsIG5hbmwoIiIpKSk7CisgIEFTU0VSVF9GTE9BVF9FUSgxMi4wLCBmbWF4bChuYW5sKCIiKSwgMTIuMCkpOworfQorCitURVNUKG1hdGgsIGZtaW4pIHsKKyAgQVNTRVJUX0ZMT0FUX0VRKDEwLjAsIGZtaW4oMTIuMCwgMTAuMCkpOworICBBU1NFUlRfRkxPQVRfRVEoMTIuMCwgZm1pbigxMi4wLCBuYW4oIiIpKSk7CisgIEFTU0VSVF9GTE9BVF9FUSgxMi4wLCBmbWluKG5hbigiIiksIDEyLjApKTsKK30KKworVEVTVChtYXRoLCBmbWluZikgeworICBBU1NFUlRfRkxPQVRfRVEoMTAuMGYsIGZtaW5mKDEyLjBmLCAxMC4wZikpOworICBBU1NFUlRfRkxPQVRfRVEoMTIuMGYsIGZtaW5mKDEyLjBmLCBuYW5mKCIiKSkpOworICBBU1NFUlRfRkxPQVRfRVEoMTIuMGYsIGZtaW5mKG5hbmYoIiIpLCAxMi4wZikpOworfQorCitURVNUKG1hdGgsIGZtaW5sKSB7CisgIEFTU0VSVF9GTE9BVF9FUSgxMC4wLCBmbWlubCgxMi4wLCAxMC4wKSk7CisgIEFTU0VSVF9GTE9BVF9FUSgxMi4wLCBmbWlubCgxMi4wLCBuYW4oIiIpKSk7CisgIEFTU0VSVF9GTE9BVF9FUSgxMi4wLCBmbWlubChuYW4oIiIpLCAxMi4wKSk7Cit9CisKK1RFU1QobWF0aCwgZm1hKSB7CisgIEFTU0VSVF9GTE9BVF9FUSgxMC4wLCBmbWEoMi4wLCAzLjAsIDQuMCkpOworfQorCitURVNUKG1hdGgsIGZtYWYpIHsKKyAgQVNTRVJUX0ZMT0FUX0VRKDEwLjBmLCBmbWFmKDIuMGYsIDMuMGYsIDQuMGYpKTsKK30KKworVEVTVChtYXRoLCBmbWFsKSB7CisgIEFTU0VSVF9GTE9BVF9FUSgxMC4wLCBmbWFsKDIuMCwgMy4wLCA0LjApKTsKK30KKworVEVTVChtYXRoLCBoeXBvdCkgeworICBBU1NFUlRfRkxPQVRfRVEoNS4wLCBoeXBvdCgzLjAsIDQuMCkpOworfQorCitURVNUKG1hdGgsIGh5cG90ZikgeworICBBU1NFUlRfRkxPQVRfRVEoNS4wZiwgaHlwb3RmKDMuMGYsIDQuMGYpKTsKK30KKworVEVTVChtYXRoLCBoeXBvdGwpIHsKKyAgQVNTRVJUX0ZMT0FUX0VRKDUuMCwgaHlwb3RsKDMuMCwgNC4wKSk7Cit9CisKK1RFU1QobWF0aCwgZXJmKSB7CisgIEFTU0VSVF9GTE9BVF9FUSgwLjg0MjcwMDc4LCBlcmYoMS4wKSk7Cit9CisKK1RFU1QobWF0aCwgZXJmZikgeworICBBU1NFUlRfRkxPQVRfRVEoMC44NDI3MDA3OGYsIGVyZmYoMS4wZikpOworfQorCitURVNUKG1hdGgsIGVyZmwpIHsKKyAgQVNTRVJUX0ZMT0FUX0VRKDAuODQyNzAwNzgsIGVyZmwoMS4wKSk7Cit9CisKK1RFU1QobWF0aCwgZXJmYykgeworICBBU1NFUlRfRkxPQVRfRVEoMC4xNTcyOTkyMSwgZXJmYygxLjApKTsKK30KKworVEVTVChtYXRoLCBlcmZjZikgeworICBBU1NFUlRfRkxPQVRfRVEoMC4xNTcyOTkyMWYsIGVyZmNmKDEuMGYpKTsKK30KKworVEVTVChtYXRoLCBlcmZjbCkgeworICBBU1NFUlRfRkxPQVRfRVEoMC4xNTcyOTkyMSwgZXJmY2woMS4wKSk7Cit9CisKK1RFU1QobWF0aCwgbHJpbnQpIHsKKyAgZmVzZXRyb3VuZChGRV9VUFdBUkQpOyAvLyBscmludC9scmludGYvbHJpbnRsIG9iZXkgdGhlIHJvdW5kaW5nIG1vZGUuCisgIEFTU0VSVF9FUSgxMjM1LCBscmludCgxMjM0LjAxKSk7CisgIEFTU0VSVF9FUSgxMjM1LCBscmludGYoMTIzNC4wMWYpKTsKKyAgQVNTRVJUX0VRKDEyMzUsIGxyaW50bCgxMjM0LjAxKSk7CisgIGZlc2V0cm91bmQoRkVfVE9XQVJEWkVSTyk7IC8vIGxyaW50L2xyaW50Zi9scmludGwgb2JleSB0aGUgcm91bmRpbmcgbW9kZS4KKyAgQVNTRVJUX0VRKDEyMzQsIGxyaW50KDEyMzQuMDEpKTsKKyAgQVNTRVJUX0VRKDEyMzQsIGxyaW50ZigxMjM0LjAxZikpOworICBBU1NFUlRfRVEoMTIzNCwgbHJpbnRsKDEyMzQuMDEpKTsKKworICBmZXNldHJvdW5kKEZFX1VQV0FSRCk7IC8vIGxscmludC9sbHJpbnRmL2xscmludGwgb2JleSB0aGUgcm91bmRpbmcgbW9kZS4KKyAgQVNTRVJUX0VRKDEyMzVMLCBsbHJpbnQoMTIzNC4wMSkpOworICBBU1NFUlRfRVEoMTIzNUwsIGxscmludGYoMTIzNC4wMWYpKTsKKyAgQVNTRVJUX0VRKDEyMzVMLCBsbHJpbnRsKDEyMzQuMDEpKTsKKyAgZmVzZXRyb3VuZChGRV9UT1dBUkRaRVJPKTsgLy8gbGxyaW50L2xscmludGYvbGxyaW50bCBvYmV5IHRoZSByb3VuZGluZyBtb2RlLgorICBBU1NFUlRfRVEoMTIzNEwsIGxscmludCgxMjM0LjAxKSk7CisgIEFTU0VSVF9FUSgxMjM0TCwgbGxyaW50ZigxMjM0LjAxZikpOworICBBU1NFUlRfRVEoMTIzNEwsIGxscmludGwoMTIzNC4wMSkpOworfQorCitURVNUKG1hdGgsIHJpbnQpIHsKKyAgZmVzZXRyb3VuZChGRV9VUFdBUkQpOyAvLyByaW50L3JpbnRmL3JpbnRsIG9iZXkgdGhlIHJvdW5kaW5nIG1vZGUuCisgIGZlY2xlYXJleGNlcHQoRkVfQUxMX0VYQ0VQVCk7IC8vIHJpbnQvcmludGYvcmludGwgZG8gc2V0IHRoZSBGRV9JTkVYQUNUIGZsYWcuCisgIEFTU0VSVF9FUSgxMjM0LjAsIHJpbnQoMTIzNC4wKSk7CisgIEFTU0VSVF9UUlVFKChmZXRlc3RleGNlcHQoRkVfQUxMX0VYQ0VQVCkgJiBGRV9JTkVYQUNUKSA9PSAwKTsKKyAgQVNTRVJUX0VRKDEyMzUuMCwgcmludCgxMjM0LjAxKSk7CisgIEFTU0VSVF9UUlVFKChmZXRlc3RleGNlcHQoRkVfQUxMX0VYQ0VQVCkgJiBGRV9JTkVYQUNUKSAhPSAwKTsKKworICBmZWNsZWFyZXhjZXB0KEZFX0FMTF9FWENFUFQpOyAvLyByaW50L3JpbnRmL3JpbnRsIGRvIHNldCB0aGUgRkVfSU5FWEFDVCBmbGFnLgorICBBU1NFUlRfRVEoMTIzNC4wZiwgcmludGYoMTIzNC4wZikpOworICBBU1NFUlRfVFJVRSgoZmV0ZXN0ZXhjZXB0KEZFX0FMTF9FWENFUFQpICYgRkVfSU5FWEFDVCkgPT0gMCk7CisgIEFTU0VSVF9FUSgxMjM1LjBmLCByaW50ZigxMjM0LjAxZikpOworICBBU1NFUlRfVFJVRSgoZmV0ZXN0ZXhjZXB0KEZFX0FMTF9FWENFUFQpICYgRkVfSU5FWEFDVCkgIT0gMCk7CisKKyAgZmVjbGVhcmV4Y2VwdChGRV9BTExfRVhDRVBUKTsgLy8gcmludC9yaW50Zi9yaW50bCBkbyBzZXQgdGhlIEZFX0lORVhBQ1QgZmxhZy4KKyAgQVNTRVJUX0VRKDEyMzQuMCwgcmludGwoMTIzNC4wKSk7CisgIEFTU0VSVF9UUlVFKChmZXRlc3RleGNlcHQoRkVfQUxMX0VYQ0VQVCkgJiBGRV9JTkVYQUNUKSA9PSAwKTsKKyAgQVNTRVJUX0VRKDEyMzUuMCwgcmludGwoMTIzNC4wMSkpOworICBBU1NFUlRfVFJVRSgoZmV0ZXN0ZXhjZXB0KEZFX0FMTF9FWENFUFQpICYgRkVfSU5FWEFDVCkgIT0gMCk7CisKKyAgZmVzZXRyb3VuZChGRV9UT1dBUkRaRVJPKTsgLy8gcmludC9yaW50ZiBvYmV5IHRoZSByb3VuZGluZyBtb2RlLgorICBBU1NFUlRfRVEoMTIzNC4wLCByaW50KDEyMzQuMDEpKTsKKyAgQVNTRVJUX0VRKDEyMzQuMGYsIHJpbnRmKDEyMzQuMDFmKSk7CisgIEFTU0VSVF9FUSgxMjM0LjAsIHJpbnRsKDEyMzQuMDEpKTsKK30KKworVEVTVChtYXRoLCBuZWFyYnlpbnQpIHsKKyAgZmVzZXRyb3VuZChGRV9VUFdBUkQpOyAvLyBuZWFyYnlpbnQvbmVhcmJ5aW50Zi9uZWFyYnlpbnRsIG9iZXkgdGhlIHJvdW5kaW5nIG1vZGUuCisgIGZlY2xlYXJleGNlcHQoRkVfQUxMX0VYQ0VQVCk7IC8vIG5lYXJieWludC9uZWFyYnlpbnRmL25lYXJieWludGwgZG9uJ3Qgc2V0IHRoZSBGRV9JTkVYQUNUIGZsYWcuCisgIEFTU0VSVF9FUSgxMjM0LjAsIG5lYXJieWludCgxMjM0LjApKTsKKyAgQVNTRVJUX1RSVUUoKGZldGVzdGV4Y2VwdChGRV9BTExfRVhDRVBUKSAmIEZFX0lORVhBQ1QpID09IDApOworICBBU1NFUlRfRVEoMTIzNS4wLCBuZWFyYnlpbnQoMTIzNC4wMSkpOworICBBU1NFUlRfVFJVRSgoZmV0ZXN0ZXhjZXB0KEZFX0FMTF9FWENFUFQpICYgRkVfSU5FWEFDVCkgPT0gMCk7CisKKyAgZmVjbGVhcmV4Y2VwdChGRV9BTExfRVhDRVBUKTsKKyAgQVNTRVJUX0VRKDEyMzQuMGYsIG5lYXJieWludGYoMTIzNC4wZikpOworICBBU1NFUlRfVFJVRSgoZmV0ZXN0ZXhjZXB0KEZFX0FMTF9FWENFUFQpICYgRkVfSU5FWEFDVCkgPT0gMCk7CisgIEFTU0VSVF9FUSgxMjM1LjBmLCBuZWFyYnlpbnRmKDEyMzQuMDFmKSk7CisgIEFTU0VSVF9UUlVFKChmZXRlc3RleGNlcHQoRkVfQUxMX0VYQ0VQVCkgJiBGRV9JTkVYQUNUKSA9PSAwKTsKKworICBmZWNsZWFyZXhjZXB0KEZFX0FMTF9FWENFUFQpOyAvLyBuZWFyYnlpbnQvbmVhcmJ5aW50Zi9uZWFyYnlpbnRsIGRvbid0IHNldCB0aGUgRkVfSU5FWEFDVCBmbGFnLgorICBBU1NFUlRfRVEoMTIzNC4wLCBuZWFyYnlpbnRsKDEyMzQuMCkpOworICBBU1NFUlRfVFJVRSgoZmV0ZXN0ZXhjZXB0KEZFX0FMTF9FWENFUFQpICYgRkVfSU5FWEFDVCkgPT0gMCk7CisgIEFTU0VSVF9FUSgxMjM1LjAsIG5lYXJieWludGwoMTIzNC4wMSkpOworICBBU1NFUlRfVFJVRSgoZmV0ZXN0ZXhjZXB0KEZFX0FMTF9FWENFUFQpICYgRkVfSU5FWEFDVCkgPT0gMCk7CisKKyAgZmVzZXRyb3VuZChGRV9UT1dBUkRaRVJPKTsgLy8gbmVhcmJ5aW50L25lYXJieWludGYvbmVhcmJ5aW50bCBvYmV5IHRoZSByb3VuZGluZyBtb2RlLgorICBBU1NFUlRfRVEoMTIzNC4wLCBuZWFyYnlpbnQoMTIzNC4wMSkpOworICBBU1NFUlRfRVEoMTIzNC4wZiwgbmVhcmJ5aW50ZigxMjM0LjAxZikpOworICBBU1NFUlRfRVEoMTIzNC4wLCBuZWFyYnlpbnRsKDEyMzQuMDEpKTsKK30KKworVEVTVChtYXRoLCBscm91bmQpIHsKKyAgZmVzZXRyb3VuZChGRV9VUFdBUkQpOyAvLyBscm91bmQgaWdub3JlcyB0aGUgcm91bmRpbmcgbW9kZS4KKyAgQVNTRVJUX0VRKDEyMzQsIGxyb3VuZCgxMjM0LjAxKSk7CisgIEFTU0VSVF9FUSgxMjM0LCBscm91bmRmKDEyMzQuMDFmKSk7CisgIEFTU0VSVF9FUSgxMjM0LCBscm91bmRsKDEyMzQuMDEpKTsKK30KKworVEVTVChtYXRoLCBsbHJvdW5kKSB7CisgIGZlc2V0cm91bmQoRkVfVVBXQVJEKTsgLy8gbGxyb3VuZCBpZ25vcmVzIHRoZSByb3VuZGluZyBtb2RlLgorICBBU1NFUlRfRVEoMTIzNEwsIGxscm91bmQoMTIzNC4wMSkpOworICBBU1NFUlRfRVEoMTIzNEwsIGxscm91bmRmKDEyMzQuMDFmKSk7CisgIEFTU0VSVF9FUSgxMjM0TCwgbGxyb3VuZGwoMTIzNC4wMSkpOworfQorCitURVNUKG1hdGgsIGlsb2diKSB7CisgIEFTU0VSVF9FUShGUF9JTE9HQjAsIGlsb2diKDAuMCkpOworICBBU1NFUlRfRVEoRlBfSUxPR0JOQU4sIGlsb2diKG5hbigiIikpKTsKKyAgQVNTRVJUX0VRKElOVF9NQVgsIGlsb2diKEhVR0VfVkFMKSk7CisgIEFTU0VSVF9FUSgwLCBpbG9nYigxLjApKTsKKyAgQVNTRVJUX0VRKDMsIGlsb2diKDEwLjApKTsKK30KKworVEVTVChtYXRoLCBpbG9nYmYpIHsKKyAgQVNTRVJUX0VRKEZQX0lMT0dCMCwgaWxvZ2JmKDAuMGYpKTsKKyAgQVNTRVJUX0VRKEZQX0lMT0dCTkFOLCBpbG9nYmYobmFuZigiIikpKTsKKyAgQVNTRVJUX0VRKElOVF9NQVgsIGlsb2diZihIVUdFX1ZBTEYpKTsKKyAgQVNTRVJUX0VRKDAsIGlsb2diZigxLjBmKSk7CisgIEFTU0VSVF9FUSgzLCBpbG9nYmYoMTAuMGYpKTsKK30KKworVEVTVChtYXRoLCBpbG9nYmwpIHsKKyAgQVNTRVJUX0VRKEZQX0lMT0dCMCwgaWxvZ2JsKDAuMCkpOworICBBU1NFUlRfRVEoRlBfSUxPR0JOQU4sIGlsb2dibChuYW5sKCIiKSkpOworICBBU1NFUlRfRVEoSU5UX01BWCwgaWxvZ2JsKEhVR0VfVkFMTCkpOworICBBU1NFUlRfRVEoMCwgaWxvZ2JsKDEuMCkpOworICBBU1NFUlRfRVEoMywgaWxvZ2JsKDEwLjApKTsKK30KKworVEVTVChtYXRoLCBsb2diKSB7CisgIEFTU0VSVF9FUSgtSFVHRV9WQUwsIGxvZ2IoMC4wKSk7CisgIEFTU0VSVF9UUlVFKGlzbmFuKGxvZ2IobmFuKCIiKSkpKTsKKyAgQVNTRVJUX1RSVUUoaXNpbmYobG9nYihIVUdFX1ZBTCkpKTsKKyAgQVNTRVJUX0VRKDAuMCwgbG9nYigxLjApKTsKKyAgQVNTRVJUX0VRKDMuMCwgbG9nYigxMC4wKSk7Cit9CisKK1RFU1QobWF0aCwgbG9nYmYpIHsKKyAgQVNTRVJUX0VRKC1IVUdFX1ZBTEYsIGxvZ2JmKDAuMGYpKTsKKyAgQVNTRVJUX1RSVUUoaXNuYW5mKGxvZ2JmKG5hbmYoIiIpKSkpOworICBBU1NFUlRfVFJVRShfX2lzaW5mZihsb2diZihIVUdFX1ZBTEYpKSk7CisgIEFTU0VSVF9FUSgwLjBmLCBsb2diZigxLjBmKSk7CisgIEFTU0VSVF9FUSgzLjBmLCBsb2diZigxMC4wZikpOworfQorCitURVNUKG1hdGgsIGxvZ2JsKSB7CisgIEFTU0VSVF9FUSgtSFVHRV9WQUwsIGxvZ2JsKDAuMCkpOworICBBU1NFUlRfVFJVRShpc25hbihsb2dibChuYW5sKCIiKSkpKTsKKyAgQVNTRVJUX1RSVUUoaXNpbmYobG9nYmwoSFVHRV9WQUxMKSkpOworICBBU1NFUlRfRVEoMC4wLCBsb2dibCgxLjApKTsKKyAgQVNTRVJUX0VRKDMuMCwgbG9nYmwoMTAuMCkpOworfQorCitURVNUKG1hdGgsIGxvZzFwKSB7CisgIEFTU0VSVF9FUSgtSFVHRV9WQUwsIGxvZzFwKC0xLjApKTsKKyAgQVNTRVJUX1RSVUUoaXNuYW4obG9nMXAobmFuKCIiKSkpKTsKKyAgQVNTRVJUX1RSVUUoaXNpbmYobG9nMXAoSFVHRV9WQUwpKSk7CisgIEFTU0VSVF9GTE9BVF9FUSgxLjAsIGxvZzFwKE1fRSAtIDEuMCkpOworfQorCitURVNUKG1hdGgsIGxvZzFwZikgeworICBBU1NFUlRfRVEoLUhVR0VfVkFMRiwgbG9nMXBmKC0xLjBmKSk7CisgIEFTU0VSVF9UUlVFKGlzbmFuZihsb2cxcGYobmFuZigiIikpKSk7CisgIEFTU0VSVF9UUlVFKF9faXNpbmZmKGxvZzFwZihIVUdFX1ZBTEYpKSk7CisgIEFTU0VSVF9GTE9BVF9FUSgxLjBmLCBsb2cxcGYoc3RhdGljX2Nhc3Q8ZmxvYXQ+KE1fRSkgLSAxLjBmKSk7Cit9CisKK1RFU1QobWF0aCwgbG9nMXBsKSB7CisgIEFTU0VSVF9FUSgtSFVHRV9WQUxMLCBsb2cxcGwoLTEuMCkpOworICBBU1NFUlRfVFJVRShpc25hbihsb2cxcGwobmFubCgiIikpKSk7CisgIEFTU0VSVF9UUlVFKGlzaW5mKGxvZzFwbChIVUdFX1ZBTEwpKSk7CisgIEFTU0VSVF9GTE9BVF9FUSgxLjAsIGxvZzFwbChNX0UgLSAxLjApKTsKK30KKworVEVTVChtYXRoLCBmZGltKSB7CisgIEFTU0VSVF9GTE9BVF9FUSgwLjAsIGZkaW0oMS4wLCAxLjApKTsKKyAgQVNTRVJUX0ZMT0FUX0VRKDEuMCwgZmRpbSgyLjAsIDEuMCkpOworICBBU1NFUlRfRkxPQVRfRVEoMC4wLCBmZGltKDEuMCwgMi4wKSk7Cit9CisKK1RFU1QobWF0aCwgZmRpbWYpIHsKKyAgQVNTRVJUX0ZMT0FUX0VRKDAuMGYsIGZkaW1mKDEuMGYsIDEuMGYpKTsKKyAgQVNTRVJUX0ZMT0FUX0VRKDEuMGYsIGZkaW1mKDIuMGYsIDEuMGYpKTsKKyAgQVNTRVJUX0ZMT0FUX0VRKDAuMGYsIGZkaW1mKDEuMGYsIDIuMGYpKTsKK30KKworVEVTVChtYXRoLCBmZGltbCkgeworICBBU1NFUlRfRkxPQVRfRVEoMC4wLCBmZGltbCgxLjAsIDEuMCkpOworICBBU1NFUlRfRkxPQVRfRVEoMS4wLCBmZGltbCgyLjAsIDEuMCkpOworICBBU1NFUlRfRkxPQVRfRVEoMC4wLCBmZGltbCgxLjAsIDIuMCkpOworfQorCitURVNUKG1hdGgsIHJvdW5kKSB7CisgIGZlc2V0cm91bmQoRkVfVE9XQVJEWkVSTyk7IC8vIHJvdW5kIGlnbm9yZXMgdGhlIHJvdW5kaW5nIG1vZGUgYW5kIGFsd2F5cyByb3VuZHMgYXdheSBmcm9tIHplcm8uCisgIEFTU0VSVF9GTE9BVF9FUSgxLjAsIHJvdW5kKDAuNSkpOworICBBU1NFUlRfRkxPQVRfRVEoLTEuMCwgcm91bmQoLTAuNSkpOworICBBU1NFUlRfRkxPQVRfRVEoMC4wLCByb3VuZCgwLjApKTsKKyAgQVNTRVJUX0ZMT0FUX0VRKC0wLjAsIHJvdW5kKC0wLjApKTsKKyAgQVNTRVJUX1RSVUUoaXNuYW4ocm91bmQobmFuKCIiKSkpKTsKKyAgQVNTRVJUX0ZMT0FUX0VRKEhVR0VfVkFMLCByb3VuZChIVUdFX1ZBTCkpOworfQorCitURVNUKG1hdGgsIHJvdW5kZikgeworICBmZXNldHJvdW5kKEZFX1RPV0FSRFpFUk8pOyAvLyByb3VuZGYgaWdub3JlcyB0aGUgcm91bmRpbmcgbW9kZSBhbmQgYWx3YXlzIHJvdW5kcyBhd2F5IGZyb20gemVyby4KKyAgQVNTRVJUX0ZMT0FUX0VRKDEuMGYsIHJvdW5kZigwLjVmKSk7CisgIEFTU0VSVF9GTE9BVF9FUSgtMS4wZiwgcm91bmRmKC0wLjVmKSk7CisgIEFTU0VSVF9GTE9BVF9FUSgwLjBmLCByb3VuZGYoMC4wZikpOworICBBU1NFUlRfRkxPQVRfRVEoLTAuMGYsIHJvdW5kZigtMC4wZikpOworICBBU1NFUlRfVFJVRShpc25hbmYocm91bmRmKG5hbmYoIiIpKSkpOworICBBU1NFUlRfRkxPQVRfRVEoSFVHRV9WQUxGLCByb3VuZGYoSFVHRV9WQUxGKSk7Cit9CisKK1RFU1QobWF0aCwgcm91bmRsKSB7CisgIGZlc2V0cm91bmQoRkVfVE9XQVJEWkVSTyk7IC8vIHJvdW5kbCBpZ25vcmVzIHRoZSByb3VuZGluZyBtb2RlIGFuZCBhbHdheXMgcm91bmRzIGF3YXkgZnJvbSB6ZXJvLgorICBBU1NFUlRfRkxPQVRfRVEoMS4wLCByb3VuZGwoMC41KSk7CisgIEFTU0VSVF9GTE9BVF9FUSgtMS4wLCByb3VuZGwoLTAuNSkpOworICBBU1NFUlRfRkxPQVRfRVEoMC4wLCByb3VuZGwoMC4wKSk7CisgIEFTU0VSVF9GTE9BVF9FUSgtMC4wLCByb3VuZGwoLTAuMCkpOworICBBU1NFUlRfVFJVRShpc25hbihyb3VuZGwobmFubCgiIikpKSk7CisgIEFTU0VSVF9GTE9BVF9FUShIVUdFX1ZBTEwsIHJvdW5kbChIVUdFX1ZBTEwpKTsKK30KKworVEVTVChtYXRoLCB0cnVuYykgeworICBmZXNldHJvdW5kKEZFX1VQV0FSRCk7IC8vIHRydW5jIGlnbm9yZXMgdGhlIHJvdW5kaW5nIG1vZGUgYW5kIGFsd2F5cyByb3VuZHMgdG93YXJkIHplcm8uCisgIEFTU0VSVF9GTE9BVF9FUSgxLjAsIHRydW5jKDEuNSkpOworICBBU1NFUlRfRkxPQVRfRVEoLTEuMCwgdHJ1bmMoLTEuNSkpOworICBBU1NFUlRfRkxPQVRfRVEoMC4wLCB0cnVuYygwLjApKTsKKyAgQVNTRVJUX0ZMT0FUX0VRKC0wLjAsIHRydW5jKC0wLjApKTsKKyAgQVNTRVJUX1RSVUUoaXNuYW4odHJ1bmMobmFuKCIiKSkpKTsKKyAgQVNTRVJUX0ZMT0FUX0VRKEhVR0VfVkFMLCB0cnVuYyhIVUdFX1ZBTCkpOworfQorCitURVNUKG1hdGgsIHRydW5jZikgeworICBmZXNldHJvdW5kKEZFX1VQV0FSRCk7IC8vIHRydW5jZiBpZ25vcmVzIHRoZSByb3VuZGluZyBtb2RlIGFuZCBhbHdheXMgcm91bmRzIHRvd2FyZCB6ZXJvLgorICBBU1NFUlRfRkxPQVRfRVEoMS4wZiwgdHJ1bmNmKDEuNWYpKTsKKyAgQVNTRVJUX0ZMT0FUX0VRKC0xLjBmLCB0cnVuY2YoLTEuNWYpKTsKKyAgQVNTRVJUX0ZMT0FUX0VRKDAuMGYsIHRydW5jZigwLjBmKSk7CisgIEFTU0VSVF9GTE9BVF9FUSgtMC4wZiwgdHJ1bmNmKC0wLjBmKSk7CisgIEFTU0VSVF9UUlVFKGlzbmFuKHRydW5jZihuYW5mKCIiKSkpKTsKKyAgQVNTRVJUX0ZMT0FUX0VRKEhVR0VfVkFMRiwgdHJ1bmNmKEhVR0VfVkFMRikpOworfQorCitURVNUKG1hdGgsIHRydW5jbCkgeworICBmZXNldHJvdW5kKEZFX1VQV0FSRCk7IC8vIHRydW5jbCBpZ25vcmVzIHRoZSByb3VuZGluZyBtb2RlIGFuZCBhbHdheXMgcm91bmRzIHRvd2FyZCB6ZXJvLgorICBBU1NFUlRfRkxPQVRfRVEoMS4wLCB0cnVuY2woMS41KSk7CisgIEFTU0VSVF9GTE9BVF9FUSgtMS4wLCB0cnVuY2woLTEuNSkpOworICBBU1NFUlRfRkxPQVRfRVEoMC4wLCB0cnVuY2woMC4wKSk7CisgIEFTU0VSVF9GTE9BVF9FUSgtMC4wLCB0cnVuY2woLTAuMCkpOworICBBU1NFUlRfVFJVRShpc25hbih0cnVuY2wobmFuKCIiKSkpKTsKKyAgQVNTRVJUX0ZMT0FUX0VRKEhVR0VfVkFMTCwgdHJ1bmNsKEhVR0VfVkFMTCkpOworfQorCitURVNUKG1hdGgsIG5leHRhZnRlcikgeworICBBU1NFUlRfRkxPQVRfRVEoMC4wLCBuZXh0YWZ0ZXIoMC4wLCAwLjApKTsKKyAgQVNTRVJUX0ZMT0FUX0VRKDEuNDAxMjk4NWUtNDUsIG5leHRhZnRlcigwLjAsIDEuMCkpOworICBBU1NFUlRfRkxPQVRfRVEoMC4wLCBuZXh0YWZ0ZXIoMC4wLCAtMS4wKSk7Cit9CisKK1RFU1QobWF0aCwgbmV4dGFmdGVyZikgeworICBBU1NFUlRfRkxPQVRfRVEoMC4wZiwgbmV4dGFmdGVyZigwLjBmLCAwLjBmKSk7CisgIEFTU0VSVF9GTE9BVF9FUSgxLjQwMTI5ODVlLTQ1ZiwgbmV4dGFmdGVyZigwLjBmLCAxLjBmKSk7CisgIEFTU0VSVF9GTE9BVF9FUSgwLjBmLCBuZXh0YWZ0ZXJmKDAuMGYsIC0xLjBmKSk7Cit9CisKK1RFU1QobWF0aCwgbmV4dGFmdGVybCkgeworICBBU1NFUlRfRkxPQVRfRVEoMC4wLCBuZXh0YWZ0ZXJsKDAuMCwgMC4wKSk7CisgIEFTU0VSVF9GTE9BVF9FUSgxLjQwMTI5ODVlLTQ1LCBuZXh0YWZ0ZXJsKDAuMCwgMS4wKSk7CisgIEFTU0VSVF9GTE9BVF9FUSgwLjAsIG5leHRhZnRlcmwoMC4wLCAtMS4wKSk7Cit9CisKKy8vIFRPRE86IG5leHR0b3dhcmQKKy8vIFRPRE86IG5leHR0b3dhcmRmCisvLyBUT0RPOiBuZXh0dG93YXJkbAorCitURVNUKG1hdGgsIGNvcHlzaWduKSB7CisgIEFTU0VSVF9GTE9BVF9FUSgwLjAsIGNvcHlzaWduKDAuMCwgMS4wKSk7CisgIEFTU0VSVF9GTE9BVF9FUSgtMC4wLCBjb3B5c2lnbigwLjAsIC0xLjApKTsKKyAgQVNTRVJUX0ZMT0FUX0VRKDIuMCwgY29weXNpZ24oMi4wLCAxLjApKTsKKyAgQVNTRVJUX0ZMT0FUX0VRKC0yLjAsIGNvcHlzaWduKDIuMCwgLTEuMCkpOworfQorCitURVNUKG1hdGgsIGNvcHlzaWduZikgeworICBBU1NFUlRfRkxPQVRfRVEoMC4wZiwgY29weXNpZ25mKDAuMGYsIDEuMGYpKTsKKyAgQVNTRVJUX0ZMT0FUX0VRKC0wLjBmLCBjb3B5c2lnbmYoMC4wZiwgLTEuMGYpKTsKKyAgQVNTRVJUX0ZMT0FUX0VRKDIuMGYsIGNvcHlzaWduZigyLjBmLCAxLjBmKSk7CisgIEFTU0VSVF9GTE9BVF9FUSgtMi4wZiwgY29weXNpZ25mKDIuMGYsIC0xLjBmKSk7Cit9CisKK1RFU1QobWF0aCwgY29weXNpZ25sKSB7CisgIEFTU0VSVF9GTE9BVF9FUSgwLjBmLCBjb3B5c2lnbmwoMC4wLCAxLjApKTsKKyAgQVNTRVJUX0ZMT0FUX0VRKC0wLjBmLCBjb3B5c2lnbmwoMC4wLCAtMS4wKSk7CisgIEFTU0VSVF9GTE9BVF9FUSgyLjBmLCBjb3B5c2lnbmwoMi4wLCAxLjApKTsKKyAgQVNTRVJUX0ZMT0FUX0VRKC0yLjBmLCBjb3B5c2lnbmwoMi4wLCAtMS4wKSk7Cit9CisKK1RFU1QobWF0aCwgc2lnbmlmaWNhbmQpIHsKKyAgQVNTRVJUX0ZMT0FUX0VRKDAuMCwgc2lnbmlmaWNhbmQoMC4wKSk7CisgIEFTU0VSVF9GTE9BVF9FUSgxLjIsIHNpZ25pZmljYW5kKDEuMikpOworICBBU1NFUlRfRkxPQVRfRVEoMS41Mzc1LCBzaWduaWZpY2FuZCgxMi4zKSk7Cit9CisKK1RFU1QobWF0aCwgc2lnbmlmaWNhbmRmKSB7CisgIEFTU0VSVF9GTE9BVF9FUSgwLjBmLCBzaWduaWZpY2FuZGYoMC4wZikpOworICBBU1NFUlRfRkxPQVRfRVEoMS4yZiwgc2lnbmlmaWNhbmRmKDEuMmYpKTsKKyAgQVNTRVJUX0ZMT0FUX0VRKDEuNTM3NWYsIHNpZ25pZmljYW5kZigxMi4zZikpOworfQorCitleHRlcm4gIkMiIGxvbmcgZG91YmxlIHNpZ25pZmljYW5kbChsb25nIGRvdWJsZSk7IC8vIEJTRCdzIDxtYXRoLmg+IGRvZXNuJ3QgZGVjbGFyZSB0aGlzLgorCitURVNUKG1hdGgsIHNpZ25pZmljYW5kbCkgeworICBBU1NFUlRfRkxPQVRfRVEoMC4wLCBzaWduaWZpY2FuZGwoMC4wKSk7CisgIEFTU0VSVF9GTE9BVF9FUSgxLjIsIHNpZ25pZmljYW5kbCgxLjIpKTsKKyAgQVNTRVJUX0ZMT0FUX0VRKDEuNTM3NSwgc2lnbmlmaWNhbmRsKDEyLjMpKTsKK30KKworVEVTVChtYXRoLCBzY2FsYikgeworICBBU1NFUlRfRkxPQVRfRVEoMTIuMCwgc2NhbGIoMy4wLCAyLjApKTsKK30KKworVEVTVChtYXRoLCBzY2FsYmYpIHsKKyAgQVNTRVJUX0ZMT0FUX0VRKDEyLjBmLCBzY2FsYmYoMy4wZiwgMi4wZikpOworfQorCitURVNUKG1hdGgsIHNjYWxibG4pIHsKKyAgQVNTRVJUX0ZMT0FUX0VRKDEyLjAsIHNjYWxibG4oMy4wLCAyTCkpOworfQorCitURVNUKG1hdGgsIHNjYWxibG5mKSB7CisgIEFTU0VSVF9GTE9BVF9FUSgxMi4wZiwgc2NhbGJsbmYoMy4wZiwgMkwpKTsKK30KKworVEVTVChtYXRoLCBzY2FsYmxubCkgeworICBBU1NFUlRfRkxPQVRfRVEoMTIuMCwgc2NhbGJsbmwoMy4wLCAyTCkpOworfQorCitURVNUKG1hdGgsIHNjYWxibikgeworICBBU1NFUlRfRkxPQVRfRVEoMTIuMCwgc2NhbGJuKDMuMCwgMikpOworfQorCitURVNUKG1hdGgsIHNjYWxibmYpIHsKKyAgQVNTRVJUX0ZMT0FUX0VRKDEyLjBmLCBzY2FsYm5mKDMuMGYsIDIpKTsKK30KKworVEVTVChtYXRoLCBzY2FsYm5sKSB7CisgIEFTU0VSVF9GTE9BVF9FUSgxMi4wLCBzY2FsYm5sKDMuMCwgMikpOworfQorCitURVNUKG1hdGgsIGdhbW1hKSB7CisgIEFTU0VSVF9GTE9BVF9FUShsb2coMjQuMCksIGdhbW1hKDUuMCkpOworfQorCitURVNUKG1hdGgsIGdhbW1hZikgeworICBBU1NFUlRfRkxPQVRfRVEobG9nZigyNC4wZiksIGdhbW1hZig1LjBmKSk7Cit9CisKKyNpZiBkZWZpbmVkKF9fQklPTklDX18pCitURVNUKG1hdGgsIGdhbW1hX3IpIHsKKyAgaW50IHNpZ247CisgIEFTU0VSVF9GTE9BVF9FUShsb2coMjQuMCksIGdhbW1hX3IoNS4wLCAmc2lnbikpOworICBBU1NFUlRfRVEoMSwgc2lnbik7Cit9CisjZW5kaWYKKworI2lmIGRlZmluZWQoX19CSU9OSUNfXykKK1RFU1QobWF0aCwgZ2FtbWFmX3IpIHsKKyAgaW50IHNpZ247CisgIEFTU0VSVF9GTE9BVF9FUShsb2dmKDI0LjBmKSwgZ2FtbWFmX3IoNS4wZiwgJnNpZ24pKTsKKyAgQVNTRVJUX0VRKDEsIHNpZ24pOworfQorI2VuZGlmCisKK1RFU1QobWF0aCwgbGdhbW1hKSB7CisgIEFTU0VSVF9GTE9BVF9FUShsb2coMjQuMCksIGxnYW1tYSg1LjApKTsKK30KKworVEVTVChtYXRoLCBsZ2FtbWFmKSB7CisgIEFTU0VSVF9GTE9BVF9FUShsb2dmKDI0LjBmKSwgbGdhbW1hZig1LjBmKSk7Cit9CisKK1RFU1QobWF0aCwgbGdhbW1hbCkgeworICBBU1NFUlRfRkxPQVRfRVEobG9nbCgyNC4wKSwgbGdhbW1hbCg1LjApKTsKK30KKworVEVTVChtYXRoLCBsZ2FtbWFfcikgeworICBpbnQgc2lnbjsKKyAgQVNTRVJUX0ZMT0FUX0VRKGxvZygyNC4wKSwgbGdhbW1hX3IoNS4wLCAmc2lnbikpOworICBBU1NFUlRfRVEoMSwgc2lnbik7Cit9CisKK1RFU1QobWF0aCwgbGdhbW1hZl9yKSB7CisgIGludCBzaWduOworICBBU1NFUlRfRkxPQVRfRVEobG9nZigyNC4wZiksIGxnYW1tYWZfcig1LjBmLCAmc2lnbikpOworICBBU1NFUlRfRVEoMSwgc2lnbik7Cit9CisKK1RFU1QobWF0aCwgdGdhbW1hKSB7CisgIEFTU0VSVF9GTE9BVF9FUSgyNC4wLCB0Z2FtbWEoNS4wKSk7Cit9CisKK1RFU1QobWF0aCwgdGdhbW1hZikgeworICBBU1NFUlRfRkxPQVRfRVEoMjQuMGYsIHRnYW1tYWYoNS4wZikpOworfQorCitURVNUKG1hdGgsIHRnYW1tYWwpIHsKKyAgQVNTRVJUX0ZMT0FUX0VRKDI0LjAsIHRnYW1tYWwoNS4wKSk7Cit9CisKK1RFU1QobWF0aCwgajApIHsKKyAgQVNTRVJUX0ZMT0FUX0VRKDEuMCwgajAoMC4wKSk7CisgIEFTU0VSVF9GTE9BVF9FUSgwLjc2NTE5NzY5LCBqMCgxLjApKTsKK30KKworVEVTVChtYXRoLCBqMGYpIHsKKyAgQVNTRVJUX0ZMT0FUX0VRKDEuMGYsIGowZigwLjBmKSk7CisgIEFTU0VSVF9GTE9BVF9FUSgwLjc2NTE5NzY5ZiwgajBmKDEuMGYpKTsKK30KKworVEVTVChtYXRoLCBqMSkgeworICBBU1NFUlRfRkxPQVRfRVEoMC4wLCBqMSgwLjApKTsKKyAgQVNTRVJUX0ZMT0FUX0VRKDAuNDQwMDUwNTcsIGoxKDEuMCkpOworfQorCitURVNUKG1hdGgsIGoxZikgeworICBBU1NFUlRfRkxPQVRfRVEoMC4wZiwgajFmKDAuMGYpKTsKKyAgQVNTRVJUX0ZMT0FUX0VRKDAuNDQwMDUwNTdmLCBqMWYoMS4wZikpOworfQorCitURVNUKG1hdGgsIGpuKSB7CisgIEFTU0VSVF9GTE9BVF9FUSgwLjAsIGpuKDQsIDAuMCkpOworICBBU1NFUlRfRkxPQVRfRVEoMC4wMDI0NzY2Mzg5LCBqbig0LCAxLjApKTsKK30KKworVEVTVChtYXRoLCBqbmYpIHsKKyAgQVNTRVJUX0ZMT0FUX0VRKDAuMGYsIGpuZig0LCAwLjBmKSk7CisgIEFTU0VSVF9GTE9BVF9FUSgwLjAwMjQ3NjYzODlmLCBqbmYoNCwgMS4wZikpOworfQorCitURVNUKG1hdGgsIHkwKSB7CisgIEFTU0VSVF9GTE9BVF9FUSgtSFVHRV9WQUwsIHkwKDAuMCkpOworICBBU1NFUlRfRkxPQVRfRVEoMC4wODgyNTY5NjMsIHkwKDEuMCkpOworfQorCitURVNUKG1hdGgsIHkwZikgeworICBBU1NFUlRfRkxPQVRfRVEoLUhVR0VfVkFMRiwgeTBmKDAuMGYpKTsKKyAgQVNTRVJUX0ZMT0FUX0VRKDAuMDg4MjU2OTYzZiwgeTBmKDEuMGYpKTsKK30KKworVEVTVChtYXRoLCB5MSkgeworICBBU1NFUlRfRkxPQVRfRVEoLUhVR0VfVkFMLCB5MSgwLjApKTsKKyAgQVNTRVJUX0ZMT0FUX0VRKC0wLjc4MTIxMjgxLCB5MSgxLjApKTsKK30KKworVEVTVChtYXRoLCB5MWYpIHsKKyAgQVNTRVJUX0ZMT0FUX0VRKC1IVUdFX1ZBTEYsIHkxZigwLjBmKSk7CisgIEFTU0VSVF9GTE9BVF9FUSgtMC43ODEyMTI4MWYsIHkxZigxLjBmKSk7Cit9CisKK1RFU1QobWF0aCwgeW4pIHsKKyAgQVNTRVJUX0ZMT0FUX0VRKC1IVUdFX1ZBTCwgeW4oNCwgMC4wKSk7CisgIEFTU0VSVF9GTE9BVF9FUSgtMzMuMjc4NDIzLCB5big0LCAxLjApKTsKK30KKworVEVTVChtYXRoLCB5bmYpIHsKKyAgQVNTRVJUX0ZMT0FUX0VRKC1IVUdFX1ZBTEYsIHluZig0LCAwLjBmKSk7CisgIEFTU0VSVF9GTE9BVF9FUSgtMzMuMjc4NDIzZiwgeW5mKDQsIDEuMGYpKTsKK30KKworVEVTVChtYXRoLCBmcmV4cCkgeworICBpbnQgZXhwOworICBkb3VibGUgZHIgPSBmcmV4cCgxMDI0LjAsICZleHApOworICBBU1NFUlRfRkxPQVRfRVEoMTAyNC4wLCBzY2FsYm4oZHIsIGV4cCkpOworfQorCitURVNUKG1hdGgsIGZyZXhwZikgeworICBpbnQgZXhwOworICBmbG9hdCBmciA9IGZyZXhwZigxMDI0LjBmLCAmZXhwKTsKKyAgQVNTRVJUX0ZMT0FUX0VRKDEwMjQuMGYsIHNjYWxibmYoZnIsIGV4cCkpOworfQorCitURVNUKG1hdGgsIGZyZXhwbCkgeworICBpbnQgZXhwOworICBsb25nIGRvdWJsZSBsZHIgPSBmcmV4cGwoMTAyNC4wLCAmZXhwKTsKKyAgQVNTRVJUX0ZMT0FUX0VRKDEwMjQuMCwgc2NhbGJubChsZHIsIGV4cCkpOworfQorCitURVNUKG1hdGgsIG1vZGYpIHsKKyAgZG91YmxlIGRpOworICBkb3VibGUgZGYgPSBtb2RmKDEyMy40NTYsICZkaSk7CisgIEFTU0VSVF9GTE9BVF9FUSgxMjMuMCwgZGkpOworICBBU1NFUlRfRkxPQVRfRVEoMC40NTYsIGRmKTsKK30KKworVEVTVChtYXRoLCBtb2RmZikgeworICBmbG9hdCBmaTsKKyAgZmxvYXQgZmYgPSBtb2RmZigxMjMuNDU2ZiwgJmZpKTsKKyAgQVNTRVJUX0ZMT0FUX0VRKDEyMy4wZiwgZmkpOworICBBU1NFUlRfRkxPQVRfRVEoMC40NTYwMDEyOGYsIGZmKTsKK30KKworVEVTVChtYXRoLCBtb2RmbCkgeworICBsb25nIGRvdWJsZSBsZGk7CisgIGxvbmcgZG91YmxlIGxkZiA9IG1vZGZsKDEyMy40NTYsICZsZGkpOworICBBU1NFUlRfRkxPQVRfRVEoMTIzLjAsIGxkaSk7CisgIEFTU0VSVF9GTE9BVF9FUSgwLjQ1NiwgbGRmKTsKK30KKworVEVTVChtYXRoLCByZW1xdW8pIHsKKyAgaW50IHE7CisgIGRvdWJsZSBkID0gcmVtcXVvKDEzLjAsIDQuMCwgJnEpOworICBBU1NFUlRfRVEoMywgcSk7CisgIEFTU0VSVF9GTE9BVF9FUSgxLjAsIGQpOworfQorCitURVNUKG1hdGgsIHJlbXF1b2YpIHsKKyAgaW50IHE7CisgIGZsb2F0IGYgPSByZW1xdW9mKDEzLjBmLCA0LjBmLCAmcSk7CisgIEFTU0VSVF9FUSgzLCBxKTsKKyAgQVNTRVJUX0ZMT0FUX0VRKDEuMCwgZik7Cit9CisKK1RFU1QobWF0aCwgcmVtcXVvbCkgeworICBpbnQgcTsKKyAgbG9uZyBkb3VibGUgbGQgPSByZW1xdW9sKDEzLjAsIDQuMCwgJnEpOworICBBU1NFUlRfRVEoMywgcSk7CisgIEFTU0VSVF9GTE9BVF9FUSgxLjAsIGxkKTsKK30KKworLy8gaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC9hbmRyb2lkL2lzc3Vlcy9kZXRhaWw/aWQ9NjY5NworVEVTVChtYXRoLCBmcmV4cGZfcHVibGljX2J1Z182Njk3KSB7CisgIGludCBleHA7CisgIGZsb2F0IGZyID0gZnJleHBmKDE0LjFmLCAmZXhwKTsKKyAgQVNTRVJUX0ZMT0FUX0VRKDE0LjFmLCBzY2FsYm5mKGZyLCBleHApKTsKK30KZGlmZiAtLWdpdCBhL3Rlc3RzL25ldGRiX3Rlc3QuY3BwIGIvdGVzdHMvbmV0ZGJfdGVzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzNmNmMwMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL25ldGRiX3Rlc3QuY3BwCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNpbmNsdWRlIDxuZXRkYi5oPgorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKworVEVTVChuZXRkYiwgZ2V0YWRkcmluZm9fTlVMTF9oaW50cykgeworICBhZGRyaW5mbyogYWkgPSBOVUxMOworICBBU1NFUlRfRVEoMCwgZ2V0YWRkcmluZm8oImxvY2FsaG9zdCIsICI5OTk5IiwgTlVMTCwgJmFpKSk7CisgIGZyZWVhZGRyaW5mbyhhaSk7Cit9CisKK1RFU1QobmV0ZGIsIGdldG5hbWVpbmZvX3NhbGVuKSB7CisgIHNvY2thZGRyX3N0b3JhZ2Ugc3M7CisgIG1lbXNldCgmc3MsIDAsIHNpemVvZihzcykpOworICBzb2NrYWRkciogc2EgPSByZWludGVycHJldF9jYXN0PHNvY2thZGRyKj4oJnNzKTsKKyAgY2hhciB0bXBbMTZdOworCisgIHNzLnNzX2ZhbWlseSA9IEFGX0lORVQ7CisgIHNvY2tsZW5fdCB0b29fbXVjaCA9IHNpemVvZihzcyk7CisgIHNvY2tsZW5fdCBqdXN0X3JpZ2h0ID0gc2l6ZW9mKHNvY2thZGRyX2luKTsKKyAgc29ja2xlbl90IHRvb19saXR0bGUgPSBzaXplb2Yoc29ja2FkZHJfaW4pIC0gMTsKKworICBBU1NFUlRfRVEoMCwgZ2V0bmFtZWluZm8oc2EsIHRvb19tdWNoLCB0bXAsIHNpemVvZih0bXApLCBOVUxMLCAwLCBOSV9OVU1FUklDSE9TVCkpOworICBBU1NFUlRfU1RSRVEoIjAuMC4wLjAiLCB0bXApOworICBBU1NFUlRfRVEoMCwgZ2V0bmFtZWluZm8oc2EsIGp1c3RfcmlnaHQsIHRtcCwgc2l6ZW9mKHRtcCksIE5VTEwsIDAsIE5JX05VTUVSSUNIT1NUKSk7CisgIEFTU0VSVF9TVFJFUSgiMC4wLjAuMCIsIHRtcCk7CisgIEFTU0VSVF9FUShFQUlfRkFNSUxZLCBnZXRuYW1laW5mbyhzYSwgdG9vX2xpdHRsZSwgdG1wLCBzaXplb2YodG1wKSwgTlVMTCwgMCwgTklfTlVNRVJJQ0hPU1QpKTsKKworICBzcy5zc19mYW1pbHkgPSBBRl9JTkVUNjsKKyAganVzdF9yaWdodCA9IHNpemVvZihzb2NrYWRkcl9pbjYpOworICB0b29fbGl0dGxlID0gc2l6ZW9mKHNvY2thZGRyX2luNikgLSAxOworICB0b29fbXVjaCA9IGp1c3RfcmlnaHQgKyAxOworCisgIEFTU0VSVF9FUSgwLCBnZXRuYW1laW5mbyhzYSwgdG9vX211Y2gsIHRtcCwgc2l6ZW9mKHRtcCksIE5VTEwsIDAsIE5JX05VTUVSSUNIT1NUKSk7CisgIEFTU0VSVF9TVFJFUSgiOjoiLCB0bXApOworICBBU1NFUlRfRVEoMCwgZ2V0bmFtZWluZm8oc2EsIGp1c3RfcmlnaHQsIHRtcCwgc2l6ZW9mKHRtcCksIE5VTEwsIDAsIE5JX05VTUVSSUNIT1NUKSk7CisgIEFTU0VSVF9TVFJFUSgiOjoiLCB0bXApOworICBBU1NFUlRfRVEoRUFJX0ZBTUlMWSwgZ2V0bmFtZWluZm8oc2EsIHRvb19saXR0bGUsIHRtcCwgc2l6ZW9mKHRtcCksIE5VTEwsIDAsIE5JX05VTUVSSUNIT1NUKSk7Cit9CmRpZmYgLS1naXQgYS90ZXN0cy9wcm9wZXJ0eV9iZW5jaG1hcmsuY3BwIGIvdGVzdHMvcHJvcGVydHlfYmVuY2htYXJrLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMTBiZTkxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvcHJvcGVydHlfYmVuY2htYXJrLmNwcApAQCAtMCwwICsxLDE0OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbmNsdWRlICJiZW5jaG1hcmsuaCIKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworI2RlZmluZSBfUkVBTExZX0lOQ0xVREVfU1lTX19TWVNURU1fUFJPUEVSVElFU19IXworI2luY2x1ZGUgPHN5cy9fc3lzdGVtX3Byb3BlcnRpZXMuaD4KKworI2luY2x1ZGUgPHZlY3Rvcj4KKyNpbmNsdWRlIDxzdHJpbmc+CisKK2V4dGVybiB2b2lkICpfX3N5c3RlbV9wcm9wZXJ0eV9hcmVhX187CisKKyNkZWZpbmUgVEVTVF9OVU1fUFJPUFMgXAorICAgIEFyZygxKS0+QXJnKDQpLT5BcmcoMTYpLT5BcmcoNjQpLT5BcmcoMTI4KS0+QXJnKDI1NiktPkFyZyg1MTIpLT5BcmcoMTAyNCkKKworc3RydWN0IExvY2FsUHJvcGVydHlUZXN0U3RhdGUgeworICAgIExvY2FsUHJvcGVydHlUZXN0U3RhdGUoaW50IG5wcm9wcykgOiBucHJvcHMobnByb3BzKSwgdmFsaWQoZmFsc2UpIHsKKyAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIgcHJvcF9uYW1lX2NoYXJzW10gPSAiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWi4tXyI7CisKKyAgICAgICAgY2hhciBkaXJfdGVtcGxhdGVbXSA9ICIvZGF0YS9uYXRpdmV0ZXN0L3Byb3AtWFhYWFhYIjsKKyAgICAgICAgY2hhciAqZGlybmFtZSA9IG1rZHRlbXAoZGlyX3RlbXBsYXRlKTsKKyAgICAgICAgaWYgKCFkaXJuYW1lKSB7CisgICAgICAgICAgICBwZXJyb3IoIm1ha2luZyB0ZW1wIGZpbGUgZm9yIHRlc3Qgc3RhdGUgZmFpbGVkIChpcyAvZGF0YS9uYXRpdmV0ZXN0IHdyaXRhYmxlPykiKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIG9sZF9wYSA9IF9fc3lzdGVtX3Byb3BlcnR5X2FyZWFfXzsKKyAgICAgICAgX19zeXN0ZW1fcHJvcGVydHlfYXJlYV9fID0gTlVMTDsKKworICAgICAgICBwYV9kaXJuYW1lID0gZGlybmFtZTsKKyAgICAgICAgcGFfZmlsZW5hbWUgPSBwYV9kaXJuYW1lICsgIi9fX3Byb3BlcnRpZXNfXyI7CisKKyAgICAgICAgX19zeXN0ZW1fcHJvcGVydHlfc2V0X2ZpbGVuYW1lKHBhX2ZpbGVuYW1lLmNfc3RyKCkpOworICAgICAgICBfX3N5c3RlbV9wcm9wZXJ0eV9hcmVhX2luaXQoKTsKKworICAgICAgICBuYW1lcyA9IG5ldyBjaGFyKiBbbnByb3BzXTsKKyAgICAgICAgbmFtZV9sZW5zID0gbmV3IGludFtucHJvcHNdOworICAgICAgICB2YWx1ZXMgPSBuZXcgY2hhciogW25wcm9wc107CisgICAgICAgIHZhbHVlX2xlbnMgPSBuZXcgaW50W25wcm9wc107CisKKyAgICAgICAgc3JhbmRvbShucHJvcHMpOworCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnByb3BzOyBpKyspIHsKKyAgICAgICAgICAgIG5hbWVfbGVuc1tpXSA9IHJhbmRvbSgpICUgUFJPUF9OQU1FX01BWDsKKyAgICAgICAgICAgIG5hbWVzW2ldID0gbmV3IGNoYXJbUFJPUF9OQU1FX01BWCArIDFdOworICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBuYW1lX2xlbnNbaV07IGorKykgeworICAgICAgICAgICAgICAgIG5hbWVzW2ldW2pdID0gcHJvcF9uYW1lX2NoYXJzW3JhbmRvbSgpICUgKHNpemVvZihwcm9wX25hbWVfY2hhcnMpIC0gMSldOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbmFtZXNbaV1bbmFtZV9sZW5zW2ldXSA9IDA7CisgICAgICAgICAgICB2YWx1ZV9sZW5zW2ldID0gcmFuZG9tKCkgJSBQUk9QX1ZBTFVFX01BWDsKKyAgICAgICAgICAgIHZhbHVlc1tpXSA9IG5ldyBjaGFyW1BST1BfVkFMVUVfTUFYXTsKKyAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgdmFsdWVfbGVuc1tpXTsgaisrKSB7CisgICAgICAgICAgICAgICAgdmFsdWVzW2ldW2pdID0gcHJvcF9uYW1lX2NoYXJzW3JhbmRvbSgpICUgKHNpemVvZihwcm9wX25hbWVfY2hhcnMpIC0gMSldOworICAgICAgICAgICAgfQorICAgICAgICAgICAgX19zeXN0ZW1fcHJvcGVydHlfYWRkKG5hbWVzW2ldLCBuYW1lX2xlbnNbaV0sIHZhbHVlc1tpXSwgdmFsdWVfbGVuc1tpXSk7CisgICAgICAgIH0KKworICAgICAgICB2YWxpZCA9IHRydWU7CisgICAgfQorCisgICAgfkxvY2FsUHJvcGVydHlUZXN0U3RhdGUoKSB7CisgICAgICAgIGlmICghdmFsaWQpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgX19zeXN0ZW1fcHJvcGVydHlfYXJlYV9fID0gb2xkX3BhOworCisgICAgICAgIF9fc3lzdGVtX3Byb3BlcnR5X3NldF9maWxlbmFtZShQUk9QX0ZJTEVOQU1FKTsKKyAgICAgICAgdW5saW5rKHBhX2ZpbGVuYW1lLmNfc3RyKCkpOworICAgICAgICBybWRpcihwYV9kaXJuYW1lLmNfc3RyKCkpOworCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnByb3BzOyBpKyspIHsKKyAgICAgICAgICAgIGRlbGV0ZSBuYW1lc1tpXTsKKyAgICAgICAgICAgIGRlbGV0ZSB2YWx1ZXNbaV07CisgICAgICAgIH0KKyAgICAgICAgZGVsZXRlW10gbmFtZXM7CisgICAgICAgIGRlbGV0ZVtdIG5hbWVfbGVuczsKKyAgICAgICAgZGVsZXRlW10gdmFsdWVzOworICAgICAgICBkZWxldGVbXSB2YWx1ZV9sZW5zOworICAgIH0KK3B1YmxpYzoKKyAgICBjb25zdCBpbnQgbnByb3BzOworICAgIGNoYXIgKipuYW1lczsKKyAgICBpbnQgKm5hbWVfbGVuczsKKyAgICBjaGFyICoqdmFsdWVzOworICAgIGludCAqdmFsdWVfbGVuczsKKyAgICBib29sIHZhbGlkOworCitwcml2YXRlOgorICAgIHN0ZDo6c3RyaW5nIHBhX2Rpcm5hbWU7CisgICAgc3RkOjpzdHJpbmcgcGFfZmlsZW5hbWU7CisgICAgdm9pZCAqb2xkX3BhOworfTsKKworc3RhdGljIHZvaWQgQk1fcHJvcGVydHlfZ2V0KGludCBpdGVycywgaW50IG5wcm9wcykKK3sKKyAgICBTdG9wQmVuY2htYXJrVGltaW5nKCk7CisKKyAgICBMb2NhbFByb3BlcnR5VGVzdFN0YXRlIHBhKG5wcm9wcyk7CisgICAgY2hhciB2YWx1ZVtQUk9QX1ZBTFVFX01BWF07CisKKyAgICBpZiAoIXBhLnZhbGlkKQorICAgICAgICByZXR1cm47CisKKyAgICBzcmFuZG9tKGl0ZXJzICogbnByb3BzKTsKKworICAgIFN0YXJ0QmVuY2htYXJrVGltaW5nKCk7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGl0ZXJzOyBpKyspIHsKKyAgICAgICAgX19zeXN0ZW1fcHJvcGVydHlfZ2V0KHBhLm5hbWVzW3JhbmRvbSgpICUgbnByb3BzXSwgdmFsdWUpOworICAgIH0KKyAgICBTdG9wQmVuY2htYXJrVGltaW5nKCk7Cit9CitCRU5DSE1BUksoQk1fcHJvcGVydHlfZ2V0KS0+VEVTVF9OVU1fUFJPUFM7CisKK3N0YXRpYyB2b2lkIEJNX3Byb3BlcnR5X2ZpbmQoaW50IGl0ZXJzLCBpbnQgbnByb3BzKQoreworICAgIFN0b3BCZW5jaG1hcmtUaW1pbmcoKTsKKworICAgIExvY2FsUHJvcGVydHlUZXN0U3RhdGUgcGEobnByb3BzKTsKKworICAgIGlmICghcGEudmFsaWQpCisgICAgICAgIHJldHVybjsKKworICAgIHNyYW5kb20oaXRlcnMgKiBucHJvcHMpOworCisgICAgU3RhcnRCZW5jaG1hcmtUaW1pbmcoKTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaXRlcnM7IGkrKykgeworICAgICAgICBfX3N5c3RlbV9wcm9wZXJ0eV9maW5kKHBhLm5hbWVzW3JhbmRvbSgpICUgbnByb3BzXSk7CisgICAgfQorICAgIFN0b3BCZW5jaG1hcmtUaW1pbmcoKTsKK30KK0JFTkNITUFSSyhCTV9wcm9wZXJ0eV9maW5kKS0+VEVTVF9OVU1fUFJPUFM7CmRpZmYgLS1naXQgYS90ZXN0cy9wdGhyZWFkX3Rlc3QuY3BwIGIvdGVzdHMvcHRocmVhZF90ZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jN2RiZGM3Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvcHRocmVhZF90ZXN0LmNwcApAQCAtMCwwICsxLDQzNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgorCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxsaW1pdHMuaD4KKyNpbmNsdWRlIDxwdGhyZWFkLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKK1RFU1QocHRocmVhZCwgcHRocmVhZF9rZXlfY3JlYXRlKSB7CisgIHB0aHJlYWRfa2V5X3Qga2V5OworICBBU1NFUlRfRVEoMCwgcHRocmVhZF9rZXlfY3JlYXRlKCZrZXksIE5VTEwpKTsKKyAgQVNTRVJUX0VRKDAsIHB0aHJlYWRfa2V5X2RlbGV0ZShrZXkpKTsKKyAgLy8gQ2FuJ3QgZGVsZXRlIGEga2V5IHRoYXQncyBhbHJlYWR5IGJlZW4gZGVsZXRlZC4KKyAgQVNTRVJUX0VRKEVJTlZBTCwgcHRocmVhZF9rZXlfZGVsZXRlKGtleSkpOworfQorCisjaWYgIWRlZmluZWQoX19HTElCQ19fKSAvLyBnbGliYyB1c2VzIGtleXMgaW50ZXJuYWxseSB0aGF0IGl0cyBzeXNjb25mIHZhbHVlIGRvZXNuJ3QgYWNjb3VudCBmb3IuCitURVNUKHB0aHJlYWQsIHB0aHJlYWRfa2V5X2NyZWF0ZV9sb3RzKSB7CisgIC8vIFdlIGNhbiBhbGxvY2F0ZSBfU0NfVEhSRUFEX0tFWVNfTUFYIGtleXMuCisgIHN0ZDo6dmVjdG9yPHB0aHJlYWRfa2V5X3Q+IGtleXM7CisgIGZvciAoaW50IGkgPSAwOyBpIDwgc3lzY29uZihfU0NfVEhSRUFEX0tFWVNfTUFYKTsgKytpKSB7CisgICAgcHRocmVhZF9rZXlfdCBrZXk7CisgICAgLy8gSWYgdGhpcyBmYWlscywgaXQncyBsaWtlbHkgdGhhdCBHTE9CQUxfSU5JVF9USFJFQURfTE9DQUxfQlVGRkVSX0NPVU5UIGlzIHdyb25nLgorICAgIEFTU0VSVF9FUSgwLCBwdGhyZWFkX2tleV9jcmVhdGUoJmtleSwgTlVMTCkpIDw8IGkgPDwgIiBvZiAiIDw8IHN5c2NvbmYoX1NDX1RIUkVBRF9LRVlTX01BWCk7CisgICAga2V5cy5wdXNoX2JhY2soa2V5KTsKKyAgfQorCisgIC8vIC4uLmFuZCB0aGF0IHJlYWxseSBpcyB0aGUgbWF4aW11bS4KKyAgcHRocmVhZF9rZXlfdCBrZXk7CisgIEFTU0VSVF9FUShFQUdBSU4sIHB0aHJlYWRfa2V5X2NyZWF0ZSgma2V5LCBOVUxMKSk7CisKKyAgLy8gKERvbid0IGxlYWsgYWxsIHRob3NlIGtleXMhKQorICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGtleXMuc2l6ZSgpOyArK2kpIHsKKyAgICBBU1NFUlRfRVEoMCwgcHRocmVhZF9rZXlfZGVsZXRlKGtleXNbaV0pKTsKKyAgfQorfQorI2VuZGlmCisKK3N0YXRpYyB2b2lkKiBJZEZuKHZvaWQqIGFyZykgeworICByZXR1cm4gYXJnOworfQorCitzdGF0aWMgdm9pZCogU2xlZXBGbih2b2lkKiBhcmcpIHsKKyAgc2xlZXAocmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBpbnQ+KGFyZykpOworICByZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHZvaWQqIFNwaW5Gbih2b2lkKiBhcmcpIHsKKyAgdm9sYXRpbGUgYm9vbCogYiA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9sYXRpbGUgYm9vbCo+KGFyZyk7CisgIHdoaWxlICghKmIpIHsKKyAgfQorICByZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHZvaWQqIEpvaW5Gbih2b2lkKiBhcmcpIHsKKyAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHB0aHJlYWRfam9pbihyZWludGVycHJldF9jYXN0PHB0aHJlYWRfdD4oYXJnKSwgTlVMTCkpOworfQorCitzdGF0aWMgdm9pZCBBc3NlcnREZXRhY2hlZChwdGhyZWFkX3QgdCwgYm9vbCBpc19kZXRhY2hlZCkgeworICBwdGhyZWFkX2F0dHJfdCBhdHRyOworICBBU1NFUlRfRVEoMCwgcHRocmVhZF9nZXRhdHRyX25wKHQsICZhdHRyKSk7CisgIGludCBkZXRhY2hfc3RhdGU7CisgIEFTU0VSVF9FUSgwLCBwdGhyZWFkX2F0dHJfZ2V0ZGV0YWNoc3RhdGUoJmF0dHIsICZkZXRhY2hfc3RhdGUpKTsKKyAgcHRocmVhZF9hdHRyX2Rlc3Ryb3koJmF0dHIpOworICBBU1NFUlRfRVEoaXNfZGV0YWNoZWQsIChkZXRhY2hfc3RhdGUgPT0gUFRIUkVBRF9DUkVBVEVfREVUQUNIRUQpKTsKK30KKworc3RhdGljIHZvaWQgTWFrZURlYWRUaHJlYWQocHRocmVhZF90JiB0KSB7CisgIEFTU0VSVF9FUSgwLCBwdGhyZWFkX2NyZWF0ZSgmdCwgTlVMTCwgSWRGbiwgTlVMTCkpOworICB2b2lkKiByZXN1bHQ7CisgIEFTU0VSVF9FUSgwLCBwdGhyZWFkX2pvaW4odCwgJnJlc3VsdCkpOworfQorCitURVNUKHB0aHJlYWQsIHB0aHJlYWRfY3JlYXRlKSB7CisgIHZvaWQqIGV4cGVjdGVkX3Jlc3VsdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KDEyMyk7CisgIC8vIENhbiB3ZSBjcmVhdGUgYSB0aHJlYWQ/CisgIHB0aHJlYWRfdCB0OworICBBU1NFUlRfRVEoMCwgcHRocmVhZF9jcmVhdGUoJnQsIE5VTEwsIElkRm4sIGV4cGVjdGVkX3Jlc3VsdCkpOworICAvLyBJZiB3ZSBqb2luLCBkbyB3ZSBnZXQgdGhlIGV4cGVjdGVkIHZhbHVlIGJhY2s/CisgIHZvaWQqIHJlc3VsdDsKKyAgQVNTRVJUX0VRKDAsIHB0aHJlYWRfam9pbih0LCAmcmVzdWx0KSk7CisgIEFTU0VSVF9FUShleHBlY3RlZF9yZXN1bHQsIHJlc3VsdCk7Cit9CisKK1RFU1QocHRocmVhZCwgcHRocmVhZF9jcmVhdGVfRUFHQUlOKSB7CisgIHB0aHJlYWRfYXR0cl90IGF0dHJpYnV0ZXM7CisgIEFTU0VSVF9FUSgwLCBwdGhyZWFkX2F0dHJfaW5pdCgmYXR0cmlidXRlcykpOworICBBU1NFUlRfRVEoMCwgcHRocmVhZF9hdHRyX3NldHN0YWNrc2l6ZSgmYXR0cmlidXRlcywgc3RhdGljX2Nhc3Q8c2l6ZV90PigtMSkgJiB+KGdldHBhZ2VzaXplKCkgLSAxKSkpOworCisgIHB0aHJlYWRfdCB0OworICBBU1NFUlRfRVEoRUFHQUlOLCBwdGhyZWFkX2NyZWF0ZSgmdCwgJmF0dHJpYnV0ZXMsIElkRm4sIE5VTEwpKTsKK30KKworVEVTVChwdGhyZWFkLCBwdGhyZWFkX25vX2pvaW5fYWZ0ZXJfZGV0YWNoKSB7CisgIHB0aHJlYWRfdCB0MTsKKyAgQVNTRVJUX0VRKDAsIHB0aHJlYWRfY3JlYXRlKCZ0MSwgTlVMTCwgU2xlZXBGbiwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oNSkpKTsKKworICAvLyBBZnRlciBhIHB0aHJlYWRfZGV0YWNoLi4uCisgIEFTU0VSVF9FUSgwLCBwdGhyZWFkX2RldGFjaCh0MSkpOworICBBc3NlcnREZXRhY2hlZCh0MSwgdHJ1ZSk7CisKKyAgLy8gLi4ucHRocmVhZF9qb2luIHNob3VsZCBmYWlsLgorICB2b2lkKiByZXN1bHQ7CisgIEFTU0VSVF9FUShFSU5WQUwsIHB0aHJlYWRfam9pbih0MSwgJnJlc3VsdCkpOworfQorCitURVNUKHB0aHJlYWQsIHB0aHJlYWRfbm9fb3BfZGV0YWNoX2FmdGVyX2pvaW4pIHsKKyAgYm9vbCBkb25lID0gZmFsc2U7CisKKyAgcHRocmVhZF90IHQxOworICBBU1NFUlRfRVEoMCwgcHRocmVhZF9jcmVhdGUoJnQxLCBOVUxMLCBTcGluRm4sICZkb25lKSk7CisKKyAgLy8gSWYgdGhyZWFkIDIgaXMgYWxyZWFkeSB3YWl0aW5nIHRvIGpvaW4gdGhyZWFkIDEuLi4KKyAgcHRocmVhZF90IHQyOworICBBU1NFUlRfRVEoMCwgcHRocmVhZF9jcmVhdGUoJnQyLCBOVUxMLCBKb2luRm4sIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHQxKSkpOworCisgIHNsZWVwKDEpOyAvLyAoR2l2ZSB0MiBhIGNoYW5jZSB0byBjYWxsIHB0aHJlYWRfam9pbi4pCisKKyAgLy8gLi4uYSBjYWxsIHRvIHB0aHJlYWRfZGV0YWNoIG9uIHRocmVhZCAxIHdpbGwgInN1Y2NlZWQiIChzaWxlbnRseSBmYWlsKS4uLgorICBBU1NFUlRfRVEoMCwgcHRocmVhZF9kZXRhY2godDEpKTsKKyAgQXNzZXJ0RGV0YWNoZWQodDEsIGZhbHNlKTsKKworICBkb25lID0gdHJ1ZTsKKworICAvLyAuLi5idXQgdDIncyBqb2luIG9uIHQxIHN0aWxsIGdvZXMgYWhlYWQgKHdoaWNoIHdlIGNhbiB0ZWxsIGJlY2F1c2Ugb3VyIGpvaW4gb24gdDIgZmluaXNoZXMpLgorICB2b2lkKiBqb2luX3Jlc3VsdDsKKyAgQVNTRVJUX0VRKDAsIHB0aHJlYWRfam9pbih0MiwgJmpvaW5fcmVzdWx0KSk7CisgIEFTU0VSVF9FUSgwLCByZWludGVycHJldF9jYXN0PGludD4oam9pbl9yZXN1bHQpKTsKK30KKworVEVTVChwdGhyZWFkLCBwdGhyZWFkX2pvaW5fc2VsZikgeworICB2b2lkKiByZXN1bHQ7CisgIEFTU0VSVF9FUShFREVBRExLLCBwdGhyZWFkX2pvaW4ocHRocmVhZF9zZWxmKCksICZyZXN1bHQpKTsKK30KKworI2lmIF9fQklPTklDX18gLy8gRm9yIHNvbWUgcmVhc29uLCBndGVzdCBvbiBiaW9uaWMgY2FuIGNvcGUgd2l0aCB0aGlzIGJ1dCBndGVzdCBvbiBnbGliYyBjYW4ndC4KKworc3RhdGljIHZvaWQgVGVzdEJ1ZzM3NDEwKCkgeworICBwdGhyZWFkX3QgdDE7CisgIEFTU0VSVF9FUSgwLCBwdGhyZWFkX2NyZWF0ZSgmdDEsIE5VTEwsIEpvaW5GbiwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocHRocmVhZF9zZWxmKCkpKSk7CisgIHB0aHJlYWRfZXhpdChOVUxMKTsKK30KKworLy8gRXZlbiB0aG91Z2ggdGhpcyBpc24ndCByZWFsbHkgYSBkZWF0aCB0ZXN0LCB3ZSBoYXZlIHRvIHNheSAiRGVhdGhUZXN0IiBoZXJlIHNvIGd0ZXN0IGtub3dzIHRvCisvLyBydW4gdGhpcyB0ZXN0ICh3aGljaCBleGl0cyBub3JtYWxseSkgaW4gaXRzIG93biBwcm9jZXNzLgorVEVTVChwdGhyZWFkX0RlYXRoVGVzdCwgcHRocmVhZF9idWdfMzc0MTApIHsKKyAgLy8gaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL2FuZHJvaWQvaXNzdWVzL2RldGFpbD9pZD0zNzQxMAorICA6OnRlc3Rpbmc6OkZMQUdTX2d0ZXN0X2RlYXRoX3Rlc3Rfc3R5bGUgPSAidGhyZWFkc2FmZSI7CisgIEFTU0VSVF9FWElUKFRlc3RCdWczNzQxMCgpLCA6OnRlc3Rpbmc6OkV4aXRlZFdpdGhDb2RlKDApLCAiIik7Cit9CisjZW5kaWYKKworc3RhdGljIHZvaWQqIFNpZ25hbEhhbmRsZXJGbih2b2lkKiBhcmcpIHsKKyAgc2lnc2V0X3Qgd2FpdF9zZXQ7CisgIHNpZ2ZpbGxzZXQoJndhaXRfc2V0KTsKKyAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHNpZ3dhaXQoJndhaXRfc2V0LCByZWludGVycHJldF9jYXN0PGludCo+KGFyZykpKTsKK30KKworVEVTVChwdGhyZWFkLCBwdGhyZWFkX3NpZ21hc2spIHsKKyAgLy8gQmxvY2sgU0lHVVNSMS4KKyAgc2lnc2V0X3Qgc2V0OworICBzaWdlbXB0eXNldCgmc2V0KTsKKyAgc2lnYWRkc2V0KCZzZXQsIFNJR1VTUjEpOworICBBU1NFUlRfRVEoMCwgcHRocmVhZF9zaWdtYXNrKFNJR19CTE9DSywgJnNldCwgTlVMTCkpOworCisgIC8vIFNwYXduIGEgdGhyZWFkIHRoYXQgY2FsbHMgc2lnd2FpdCBhbmQgdGVsbHMgdXMgd2hhdCBpdCByZWNlaXZlZC4KKyAgcHRocmVhZF90IHNpZ25hbF90aHJlYWQ7CisgIGludCByZWNlaXZlZF9zaWduYWwgPSAtMTsKKyAgQVNTRVJUX0VRKDAsIHB0aHJlYWRfY3JlYXRlKCZzaWduYWxfdGhyZWFkLCBOVUxMLCBTaWduYWxIYW5kbGVyRm4sICZyZWNlaXZlZF9zaWduYWwpKTsKKworICAvLyBTZW5kIHRoYXQgdGhyZWFkIFNJR1VTUjEuCisgIHB0aHJlYWRfa2lsbChzaWduYWxfdGhyZWFkLCBTSUdVU1IxKTsKKworICAvLyBTZWUgd2hhdCBpdCBnb3QuCisgIHZvaWQqIGpvaW5fcmVzdWx0OworICBBU1NFUlRfRVEoMCwgcHRocmVhZF9qb2luKHNpZ25hbF90aHJlYWQsICZqb2luX3Jlc3VsdCkpOworICBBU1NFUlRfRVEoU0lHVVNSMSwgcmVjZWl2ZWRfc2lnbmFsKTsKKyAgQVNTRVJUX0VRKDAsIHJlaW50ZXJwcmV0X2Nhc3Q8aW50Pihqb2luX3Jlc3VsdCkpOworfQorCisjaWYgX19CSU9OSUNfXworZXh0ZXJuICJDIiBpbnQgIF9fcHRocmVhZF9jbG9uZSh2b2lkKiAoKmZuKSh2b2lkKiksIHZvaWQqIGNoaWxkX3N0YWNrLCBpbnQgZmxhZ3MsIHZvaWQqIGFyZyk7CitURVNUKHB0aHJlYWQsIF9fcHRocmVhZF9jbG9uZSkgeworICB1aW50cHRyX3QgZmFrZV9jaGlsZF9zdGFja1sxNl07CisgIGVycm5vID0gMDsKKyAgQVNTRVJUX0VRKC0xLCBfX3B0aHJlYWRfY2xvbmUoTlVMTCwgJmZha2VfY2hpbGRfc3RhY2tbMF0sIENMT05FX1RIUkVBRCwgTlVMTCkpOworICBBU1NFUlRfRVEoRUlOVkFMLCBlcnJubyk7Cit9CisjZW5kaWYKKworI2lmIF9fQklPTklDX18gLy8gTm90IGFsbCBidWlsZCBzZXJ2ZXJzIGhhdmUgYSBuZXcgZW5vdWdoIGdsaWJjPyBUT0RPOiByZW1vdmUgd2hlbiB0aGV5J3JlIG9uIGdwcmVjaXNlLgorVEVTVChwdGhyZWFkLCBwdGhyZWFkX3NldG5hbWVfbnBfX3Rvb19sb25nKSB7CisgIEFTU0VSVF9FUShFUkFOR0UsIHB0aHJlYWRfc2V0bmFtZV9ucChwdGhyZWFkX3NlbGYoKSwgInRoaXMgbmFtZSBpcyBmYXIgdG9vIGxvbmcgZm9yIGxpbnV4IikpOworfQorI2VuZGlmCisKKyNpZiBfX0JJT05JQ19fIC8vIE5vdCBhbGwgYnVpbGQgc2VydmVycyBoYXZlIGEgbmV3IGVub3VnaCBnbGliYz8gVE9ETzogcmVtb3ZlIHdoZW4gdGhleSdyZSBvbiBncHJlY2lzZS4KK1RFU1QocHRocmVhZCwgcHRocmVhZF9zZXRuYW1lX25wX19zZWxmKSB7CisgIEFTU0VSVF9FUSgwLCBwdGhyZWFkX3NldG5hbWVfbnAocHRocmVhZF9zZWxmKCksICJzaG9ydCAxIikpOworfQorI2VuZGlmCisKKyNpZiBfX0JJT05JQ19fIC8vIE5vdCBhbGwgYnVpbGQgc2VydmVycyBoYXZlIGEgbmV3IGVub3VnaCBnbGliYz8gVE9ETzogcmVtb3ZlIHdoZW4gdGhleSdyZSBvbiBncHJlY2lzZS4KK1RFU1QocHRocmVhZCwgcHRocmVhZF9zZXRuYW1lX25wX19vdGhlcikgeworICAvLyBFbXVsYXRvciBrZXJuZWxzIGRvbid0IGN1cnJlbnRseSBzdXBwb3J0IHNldHRpbmcgdGhlIG5hbWUgb2Ygb3RoZXIgdGhyZWFkcy4KKyAgY2hhciogZmlsZW5hbWUgPSBOVUxMOworICBhc3ByaW50ZigmZmlsZW5hbWUsICIvcHJvYy9zZWxmL3Rhc2svJWQvY29tbSIsIGdldHRpZCgpKTsKKyAgc3RydWN0IHN0YXQgc2I7CisgIGJvb2wgaGFzX2NvbW0gPSAoc3RhdChmaWxlbmFtZSwgJnNiKSAhPSAtMSk7CisgIGZyZWUoZmlsZW5hbWUpOworCisgIGlmIChoYXNfY29tbSkgeworICAgIHB0aHJlYWRfdCB0MTsKKyAgICBBU1NFUlRfRVEoMCwgcHRocmVhZF9jcmVhdGUoJnQxLCBOVUxMLCBTbGVlcEZuLCByZWludGVycHJldF9jYXN0PHZvaWQqPig1KSkpOworICAgIEFTU0VSVF9FUSgwLCBwdGhyZWFkX3NldG5hbWVfbnAodDEsICJzaG9ydCAyIikpOworICB9IGVsc2UgeworICAgIGZwcmludGYoc3RkZXJyLCAic2tpcHBpbmcgdGVzdDogdGhpcyBrZXJuZWwgZG9lc24ndCBoYXZlIC9wcm9jL3NlbGYvdGFzay90aWQvY29tbSBmaWxlcyFcbiIpOworICB9Cit9CisjZW5kaWYKKworI2lmIF9fQklPTklDX18gLy8gTm90IGFsbCBidWlsZCBzZXJ2ZXJzIGhhdmUgYSBuZXcgZW5vdWdoIGdsaWJjPyBUT0RPOiByZW1vdmUgd2hlbiB0aGV5J3JlIG9uIGdwcmVjaXNlLgorVEVTVChwdGhyZWFkLCBwdGhyZWFkX3NldG5hbWVfbnBfX25vX3N1Y2hfdGhyZWFkKSB7CisgIHB0aHJlYWRfdCBkZWFkX3RocmVhZDsKKyAgTWFrZURlYWRUaHJlYWQoZGVhZF90aHJlYWQpOworCisgIC8vIENhbGwgcHRocmVhZF9zZXRuYW1lX25wIGFmdGVyIHRocmVhZCBoYXMgYWxyZWFkeSBleGl0ZWQuCisgIEFTU0VSVF9FUShFU1JDSCwgcHRocmVhZF9zZXRuYW1lX25wKGRlYWRfdGhyZWFkLCAic2hvcnQgMyIpKTsKK30KKyNlbmRpZgorCitURVNUKHB0aHJlYWQsIHB0aHJlYWRfa2lsbF9fMCkgeworICAvLyBTaWduYWwgMCBqdXN0IHRlc3RzIHRoYXQgdGhlIHRocmVhZCBleGlzdHMsIHNvIGl0J3Mgc2FmZSB0byBjYWxsIG9uIG91cnNlbHZlcy4KKyAgQVNTRVJUX0VRKDAsIHB0aHJlYWRfa2lsbChwdGhyZWFkX3NlbGYoKSwgMCkpOworfQorCitURVNUKHB0aHJlYWQsIHB0aHJlYWRfa2lsbF9faW52YWxpZF9zaWduYWwpIHsKKyAgQVNTRVJUX0VRKEVJTlZBTCwgcHRocmVhZF9raWxsKHB0aHJlYWRfc2VsZigpLCAtMSkpOworfQorCitzdGF0aWMgdm9pZCBwdGhyZWFkX2tpbGxfX2luX3NpZ25hbF9oYW5kbGVyX2hlbHBlcihpbnQgc2lnbmFsX251bWJlcikgeworICBzdGF0aWMgaW50IGNvdW50ID0gMDsKKyAgQVNTRVJUX0VRKFNJR0FMUk0sIHNpZ25hbF9udW1iZXIpOworICBpZiAoKytjb3VudCA9PSAxKSB7CisgICAgLy8gQ2FuIHdlIGNhbGwgcHRocmVhZF9raWxsIGZyb20gYSBzaWduYWwgaGFuZGxlcj8KKyAgICBBU1NFUlRfRVEoMCwgcHRocmVhZF9raWxsKHB0aHJlYWRfc2VsZigpLCBTSUdBTFJNKSk7CisgIH0KK30KKworVEVTVChwdGhyZWFkLCBwdGhyZWFkX2tpbGxfX2luX3NpZ25hbF9oYW5kbGVyKSB7CisgIHN0cnVjdCBzaWdhY3Rpb24gYWN0aW9uOworICBzaWdlbXB0eXNldCgmYWN0aW9uLnNhX21hc2spOworICBhY3Rpb24uc2FfZmxhZ3MgPSAwOworICBhY3Rpb24uc2FfaGFuZGxlciA9IHB0aHJlYWRfa2lsbF9faW5fc2lnbmFsX2hhbmRsZXJfaGVscGVyOworICBzaWdhY3Rpb24oU0lHQUxSTSwgJmFjdGlvbiwgTlVMTCk7CisgIEFTU0VSVF9FUSgwLCBwdGhyZWFkX2tpbGwocHRocmVhZF9zZWxmKCksIFNJR0FMUk0pKTsKK30KKworVEVTVChwdGhyZWFkLCBwdGhyZWFkX2RldGFjaF9fbm9fc3VjaF90aHJlYWQpIHsKKyAgcHRocmVhZF90IGRlYWRfdGhyZWFkOworICBNYWtlRGVhZFRocmVhZChkZWFkX3RocmVhZCk7CisKKyAgQVNTRVJUX0VRKEVTUkNILCBwdGhyZWFkX2RldGFjaChkZWFkX3RocmVhZCkpOworfQorCitURVNUKHB0aHJlYWQsIHB0aHJlYWRfZ2V0Y3B1Y2xvY2tpZF9fbm9fc3VjaF90aHJlYWQpIHsKKyAgcHRocmVhZF90IGRlYWRfdGhyZWFkOworICBNYWtlRGVhZFRocmVhZChkZWFkX3RocmVhZCk7CisKKyAgY2xvY2tpZF90IGM7CisgIEFTU0VSVF9FUShFU1JDSCwgcHRocmVhZF9nZXRjcHVjbG9ja2lkKGRlYWRfdGhyZWFkLCAmYykpOworfQorCitURVNUKHB0aHJlYWQsIHB0aHJlYWRfZ2V0c2NoZWRwYXJhbV9fbm9fc3VjaF90aHJlYWQpIHsKKyAgcHRocmVhZF90IGRlYWRfdGhyZWFkOworICBNYWtlRGVhZFRocmVhZChkZWFkX3RocmVhZCk7CisKKyAgaW50IHBvbGljeTsKKyAgc2NoZWRfcGFyYW0gcGFyYW07CisgIEFTU0VSVF9FUShFU1JDSCwgcHRocmVhZF9nZXRzY2hlZHBhcmFtKGRlYWRfdGhyZWFkLCAmcG9saWN5LCAmcGFyYW0pKTsKK30KKworVEVTVChwdGhyZWFkLCBwdGhyZWFkX3NldHNjaGVkcGFyYW1fX25vX3N1Y2hfdGhyZWFkKSB7CisgIHB0aHJlYWRfdCBkZWFkX3RocmVhZDsKKyAgTWFrZURlYWRUaHJlYWQoZGVhZF90aHJlYWQpOworCisgIGludCBwb2xpY3kgPSAwOworICBzY2hlZF9wYXJhbSBwYXJhbTsKKyAgQVNTRVJUX0VRKEVTUkNILCBwdGhyZWFkX3NldHNjaGVkcGFyYW0oZGVhZF90aHJlYWQsIHBvbGljeSwgJnBhcmFtKSk7Cit9CisKK1RFU1QocHRocmVhZCwgcHRocmVhZF9qb2luX19ub19zdWNoX3RocmVhZCkgeworICBwdGhyZWFkX3QgZGVhZF90aHJlYWQ7CisgIE1ha2VEZWFkVGhyZWFkKGRlYWRfdGhyZWFkKTsKKworICB2b2lkKiByZXN1bHQ7CisgIEFTU0VSVF9FUShFU1JDSCwgcHRocmVhZF9qb2luKGRlYWRfdGhyZWFkLCAmcmVzdWx0KSk7Cit9CisKK1RFU1QocHRocmVhZCwgcHRocmVhZF9raWxsX19ub19zdWNoX3RocmVhZCkgeworICBwdGhyZWFkX3QgZGVhZF90aHJlYWQ7CisgIE1ha2VEZWFkVGhyZWFkKGRlYWRfdGhyZWFkKTsKKworICBBU1NFUlRfRVEoRVNSQ0gsIHB0aHJlYWRfa2lsbChkZWFkX3RocmVhZCwgMCkpOworfQorCitURVNUKHB0aHJlYWQsIHB0aHJlYWRfam9pbl9fbXVsdGlqb2luKSB7CisgIGJvb2wgZG9uZSA9IGZhbHNlOworCisgIHB0aHJlYWRfdCB0MTsKKyAgQVNTRVJUX0VRKDAsIHB0aHJlYWRfY3JlYXRlKCZ0MSwgTlVMTCwgU3BpbkZuLCAmZG9uZSkpOworCisgIHB0aHJlYWRfdCB0MjsKKyAgQVNTRVJUX0VRKDAsIHB0aHJlYWRfY3JlYXRlKCZ0MiwgTlVMTCwgSm9pbkZuLCByZWludGVycHJldF9jYXN0PHZvaWQqPih0MSkpKTsKKworICBzbGVlcCgxKTsgLy8gKEdpdmUgdDIgYSBjaGFuY2UgdG8gY2FsbCBwdGhyZWFkX2pvaW4uKQorCisgIC8vIE11bHRpcGxlIGpvaW5zIHRvIHRoZSBzYW1lIHRocmVhZCBzaG91bGQgZmFpbC4KKyAgQVNTRVJUX0VRKEVJTlZBTCwgcHRocmVhZF9qb2luKHQxLCBOVUxMKSk7CisKKyAgZG9uZSA9IHRydWU7CisKKyAgLy8gLi4uYnV0IHQyJ3Mgam9pbiBvbiB0MSBzdGlsbCBnb2VzIGFoZWFkICh3aGljaCB3ZSBjYW4gdGVsbCBiZWNhdXNlIG91ciBqb2luIG9uIHQyIGZpbmlzaGVzKS4KKyAgdm9pZCogam9pbl9yZXN1bHQ7CisgIEFTU0VSVF9FUSgwLCBwdGhyZWFkX2pvaW4odDIsICZqb2luX3Jlc3VsdCkpOworICBBU1NFUlRfRVEoMCwgcmVpbnRlcnByZXRfY2FzdDxpbnQ+KGpvaW5fcmVzdWx0KSk7Cit9CisKK3N0YXRpYyB2b2lkKiBHZXRBY3R1YWxHdWFyZFNpemVGbih2b2lkKiBhcmcpIHsKKyAgcHRocmVhZF9hdHRyX3QgYXR0cmlidXRlczsKKyAgcHRocmVhZF9nZXRhdHRyX25wKHB0aHJlYWRfc2VsZigpLCAmYXR0cmlidXRlcyk7CisgIHB0aHJlYWRfYXR0cl9nZXRndWFyZHNpemUoJmF0dHJpYnV0ZXMsIHJlaW50ZXJwcmV0X2Nhc3Q8c2l6ZV90Kj4oYXJnKSk7CisgIHJldHVybiBOVUxMOworfQorCitzdGF0aWMgc2l6ZV90IEdldEFjdHVhbEd1YXJkU2l6ZShjb25zdCBwdGhyZWFkX2F0dHJfdCYgYXR0cmlidXRlcykgeworICBzaXplX3QgcmVzdWx0OworICBwdGhyZWFkX3QgdDsKKyAgcHRocmVhZF9jcmVhdGUoJnQsICZhdHRyaWJ1dGVzLCBHZXRBY3R1YWxHdWFyZFNpemVGbiwgJnJlc3VsdCk7CisgIHZvaWQqIGpvaW5fcmVzdWx0OworICBwdGhyZWFkX2pvaW4odCwgJmpvaW5fcmVzdWx0KTsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQqIEdldEFjdHVhbFN0YWNrU2l6ZUZuKHZvaWQqIGFyZykgeworICBwdGhyZWFkX2F0dHJfdCBhdHRyaWJ1dGVzOworICBwdGhyZWFkX2dldGF0dHJfbnAocHRocmVhZF9zZWxmKCksICZhdHRyaWJ1dGVzKTsKKyAgcHRocmVhZF9hdHRyX2dldHN0YWNrc2l6ZSgmYXR0cmlidXRlcywgcmVpbnRlcnByZXRfY2FzdDxzaXplX3QqPihhcmcpKTsKKyAgcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBzaXplX3QgR2V0QWN0dWFsU3RhY2tTaXplKGNvbnN0IHB0aHJlYWRfYXR0cl90JiBhdHRyaWJ1dGVzKSB7CisgIHNpemVfdCByZXN1bHQ7CisgIHB0aHJlYWRfdCB0OworICBwdGhyZWFkX2NyZWF0ZSgmdCwgJmF0dHJpYnV0ZXMsIEdldEFjdHVhbFN0YWNrU2l6ZUZuLCAmcmVzdWx0KTsKKyAgdm9pZCogam9pbl9yZXN1bHQ7CisgIHB0aHJlYWRfam9pbih0LCAmam9pbl9yZXN1bHQpOworICByZXR1cm4gcmVzdWx0OworfQorCitURVNUKHB0aHJlYWQsIHB0aHJlYWRfYXR0cl9zZXRndWFyZHNpemUpIHsKKyAgcHRocmVhZF9hdHRyX3QgYXR0cmlidXRlczsKKyAgQVNTRVJUX0VRKDAsIHB0aHJlYWRfYXR0cl9pbml0KCZhdHRyaWJ1dGVzKSk7CisKKyAgLy8gR2V0IHRoZSBkZWZhdWx0IGd1YXJkIHNpemUuCisgIHNpemVfdCBkZWZhdWx0X2d1YXJkX3NpemU7CisgIEFTU0VSVF9FUSgwLCBwdGhyZWFkX2F0dHJfZ2V0Z3VhcmRzaXplKCZhdHRyaWJ1dGVzLCAmZGVmYXVsdF9ndWFyZF9zaXplKSk7CisKKyAgLy8gTm8gc3VjaCB0aGluZyBhcyB0b28gc21hbGw6IHdpbGwgYmUgcm91bmRlZCB1cCB0byBvbmUgcGFnZSBieSBwdGhyZWFkX2NyZWF0ZS4KKyAgQVNTRVJUX0VRKDAsIHB0aHJlYWRfYXR0cl9zZXRndWFyZHNpemUoJmF0dHJpYnV0ZXMsIDEyOCkpOworICBzaXplX3QgZ3VhcmRfc2l6ZTsKKyAgQVNTRVJUX0VRKDAsIHB0aHJlYWRfYXR0cl9nZXRndWFyZHNpemUoJmF0dHJpYnV0ZXMsICZndWFyZF9zaXplKSk7CisgIEFTU0VSVF9FUSgxMjhVLCBndWFyZF9zaXplKTsKKyAgQVNTRVJUX0VRKDQwOTZVLCBHZXRBY3R1YWxHdWFyZFNpemUoYXR0cmlidXRlcykpOworCisgIC8vIExhcmdlIGVub3VnaCBhbmQgYSBtdWx0aXBsZSBvZiB0aGUgcGFnZSBzaXplLgorICBBU1NFUlRfRVEoMCwgcHRocmVhZF9hdHRyX3NldGd1YXJkc2l6ZSgmYXR0cmlidXRlcywgMzIqMTAyNCkpOworICBBU1NFUlRfRVEoMCwgcHRocmVhZF9hdHRyX2dldGd1YXJkc2l6ZSgmYXR0cmlidXRlcywgJmd1YXJkX3NpemUpKTsKKyAgQVNTRVJUX0VRKDMyKjEwMjRVLCBndWFyZF9zaXplKTsKKworICAvLyBMYXJnZSBlbm91Z2ggYnV0IG5vdCBhIG11bHRpcGxlIG9mIHRoZSBwYWdlIHNpemU7IHdpbGwgYmUgcm91bmRlZCB1cCBieSBwdGhyZWFkX2NyZWF0ZS4KKyAgQVNTRVJUX0VRKDAsIHB0aHJlYWRfYXR0cl9zZXRndWFyZHNpemUoJmF0dHJpYnV0ZXMsIDMyKjEwMjQgKyAxKSk7CisgIEFTU0VSVF9FUSgwLCBwdGhyZWFkX2F0dHJfZ2V0Z3VhcmRzaXplKCZhdHRyaWJ1dGVzLCAmZ3VhcmRfc2l6ZSkpOworICBBU1NFUlRfRVEoMzIqMTAyNFUgKyAxLCBndWFyZF9zaXplKTsKK30KKworVEVTVChwdGhyZWFkLCBwdGhyZWFkX2F0dHJfc2V0c3RhY2tzaXplKSB7CisgIHB0aHJlYWRfYXR0cl90IGF0dHJpYnV0ZXM7CisgIEFTU0VSVF9FUSgwLCBwdGhyZWFkX2F0dHJfaW5pdCgmYXR0cmlidXRlcykpOworCisgIC8vIEdldCB0aGUgZGVmYXVsdCBzdGFjayBzaXplLgorICBzaXplX3QgZGVmYXVsdF9zdGFja19zaXplOworICBBU1NFUlRfRVEoMCwgcHRocmVhZF9hdHRyX2dldHN0YWNrc2l6ZSgmYXR0cmlidXRlcywgJmRlZmF1bHRfc3RhY2tfc2l6ZSkpOworCisgIC8vIFRvbyBzbWFsbC4KKyAgQVNTRVJUX0VRKEVJTlZBTCwgcHRocmVhZF9hdHRyX3NldHN0YWNrc2l6ZSgmYXR0cmlidXRlcywgMTI4KSk7CisgIHNpemVfdCBzdGFja19zaXplOworICBBU1NFUlRfRVEoMCwgcHRocmVhZF9hdHRyX2dldHN0YWNrc2l6ZSgmYXR0cmlidXRlcywgJnN0YWNrX3NpemUpKTsKKyAgQVNTRVJUX0VRKGRlZmF1bHRfc3RhY2tfc2l6ZSwgc3RhY2tfc2l6ZSk7CisgIEFTU0VSVF9HRShHZXRBY3R1YWxTdGFja1NpemUoYXR0cmlidXRlcyksIGRlZmF1bHRfc3RhY2tfc2l6ZSk7CisKKyAgLy8gTGFyZ2UgZW5vdWdoIGFuZCBhIG11bHRpcGxlIG9mIHRoZSBwYWdlIHNpemUuCisgIEFTU0VSVF9FUSgwLCBwdGhyZWFkX2F0dHJfc2V0c3RhY2tzaXplKCZhdHRyaWJ1dGVzLCAzMioxMDI0KSk7CisgIEFTU0VSVF9FUSgwLCBwdGhyZWFkX2F0dHJfZ2V0c3RhY2tzaXplKCZhdHRyaWJ1dGVzLCAmc3RhY2tfc2l6ZSkpOworICBBU1NFUlRfRVEoMzIqMTAyNFUsIHN0YWNrX3NpemUpOworICBBU1NFUlRfRVEoR2V0QWN0dWFsU3RhY2tTaXplKGF0dHJpYnV0ZXMpLCAzMioxMDI0VSk7CisKKyAgLy8gTGFyZ2UgZW5vdWdoIGJ1dCBub3QgYSBtdWx0aXBsZSBvZiB0aGUgcGFnZSBzaXplOyB3aWxsIGJlIHJvdW5kZWQgdXAgYnkgcHRocmVhZF9jcmVhdGUuCisgIEFTU0VSVF9FUSgwLCBwdGhyZWFkX2F0dHJfc2V0c3RhY2tzaXplKCZhdHRyaWJ1dGVzLCAzMioxMDI0ICsgMSkpOworICBBU1NFUlRfRVEoMCwgcHRocmVhZF9hdHRyX2dldHN0YWNrc2l6ZSgmYXR0cmlidXRlcywgJnN0YWNrX3NpemUpKTsKKyAgQVNTRVJUX0VRKDMyKjEwMjRVICsgMSwgc3RhY2tfc2l6ZSk7CisjaWYgX19CSU9OSUNfXworICAvLyBCaW9uaWMgcm91bmRzIHVwLCB3aGljaCBpcyB3aGF0IFBPU0lYIGFsbG93cy4KKyAgQVNTRVJUX0VRKEdldEFjdHVhbFN0YWNrU2l6ZShhdHRyaWJ1dGVzKSwgKDMyICsgNCkqMTAyNFUpOworI2Vsc2UKKyAgLy8gZ2xpYmMgcm91bmRzIGRvd24sIGluIHZpb2xhdGlvbiBvZiBQT1NJWC4gVGhleSBkb2N1bWVudCB0aGlzIGluIHRoZWlyIEJVR1Mgc2VjdGlvbi4KKyAgQVNTRVJUX0VRKEdldEFjdHVhbFN0YWNrU2l6ZShhdHRyaWJ1dGVzKSwgMzIqMTAyNFUpOworI2VuZGlmCit9CmRpZmYgLS1naXQgYS90ZXN0cy9yZWdleF90ZXN0LmNwcCBiL3Rlc3RzL3JlZ2V4X3Rlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1OWQxZGIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9yZWdleF90ZXN0LmNwcApAQCAtMCwwICsxLDM4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxyZWdleC5oPgorCitURVNUKHJlZ2V4LCBzbW9rZSkgeworICAvLyBBIHF1aWNrIHRlc3Qgb2YgYWxsIHRoZSByZWdleCBmdW5jdGlvbnMuCisgIHJlZ2V4X3QgcmU7CisgIEFTU0VSVF9FUSgwLCByZWdjb21wKCZyZSwgImFiKmMiLCAwKSk7CisgIEFTU0VSVF9FUSgwLCByZWdleGVjKCZyZSwgImFiYmJjIiwgMCwgTlVMTCwgMCkpOworICBBU1NFUlRfRVEoUkVHX05PTUFUQ0gsIHJlZ2V4ZWMoJnJlLCAiZm9vIiwgMCwgTlVMTCwgMCkpOworCisgIGNoYXIgYnVmWzgwXTsKKyAgcmVnZXJyb3IoUkVHX05PTUFUQ0gsICZyZSwgYnVmLCBzaXplb2YoYnVmKSk7CisjaWYgX19CSU9OSUNfXworICBBU1NFUlRfU1RSRVEoInJlZ2V4ZWMoKSBmYWlsZWQgdG8gbWF0Y2giLCBidWYpOworI2Vsc2UKKyAgQVNTRVJUX1NUUkVRKCJObyBtYXRjaCIsIGJ1Zik7CisjZW5kaWYKKworICByZWdmcmVlKCZyZSk7Cit9CmRpZmYgLS1naXQgYS90ZXN0cy9zaWduYWxfdGVzdC5jcHAgYi90ZXN0cy9zaWduYWxfdGVzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQxZGMxYwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3NpZ25hbF90ZXN0LmNwcApAQCAtMCwwICsxLDE1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgorCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzaWduYWwuaD4KKwordGVtcGxhdGUgPHR5cGVuYW1lIEZuPgorc3RhdGljIHZvaWQgVGVzdFNpZ1NldDEoRm4gZm4pIHsKKyAgLy8gTlVMTCBzaWdzZXRfdCouCisgIHNpZ3NldF90KiBzZXRfcHRyID0gTlVMTDsKKyAgZXJybm8gPSAwOworICBBU1NFUlRfRVEoLTEsIGZuKHNldF9wdHIpKTsKKyAgQVNTRVJUX0VRKEVJTlZBTCwgZXJybm8pOworCisgIC8vIE5vbi1OVUxMLgorICBzaWdzZXRfdCBzZXQ7CisgIGVycm5vID0gMDsKKyAgQVNTRVJUX0VRKDAsIGZuKCZzZXQpKTsKKyAgQVNTRVJUX0VRKDAsIGVycm5vKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIEZuPgorc3RhdGljIHZvaWQgVGVzdFNpZ1NldDIoRm4gZm4pIHsKKyAgLy8gTlVMTCBzaWdzZXRfdCouCisgIHNpZ3NldF90KiBzZXRfcHRyID0gTlVMTDsKKyAgZXJybm8gPSAwOworICBBU1NFUlRfRVEoLTEsIGZuKHNldF9wdHIsIFNJR1NFR1YpKTsKKyAgQVNTRVJUX0VRKEVJTlZBTCwgZXJybm8pOworCisgIHNpZ3NldF90IHNldDsKKyAgc2lnZW1wdHlzZXQoJnNldCk7CisKKyAgaW50IG1pbl9zaWduYWwgPSBTSUdIVVA7CisgIGludCBtYXhfc2lnbmFsID0gU0lHUlRNQVg7CisKKyNpZiBkZWZpbmVkKF9fQklPTklDX18pICYmICFkZWZpbmVkKF9fbWlwc19fKQorICAvLyBiaW9uaWMncyBzaWdzZXRfdCBpcyB0b28gc21hbGwgZm9yIEFSTSBhbmQgeDg2OiAzMiBiaXRzIGluc3RlYWQgb2YgNjQuCisgIC8vIFRoaXMgbWVhbnMgeW91IGNhbid0IHJlZmVyIHRvIGFueSBvZiB0aGUgcmVhbC10aW1lIHNpZ25hbHMuCisgIC8vIFNlZSBodHRwOi8vYi8zMDM4MzQ4IGFuZCBodHRwOi8vYi81ODI4ODk5LgorICBtYXhfc2lnbmFsID0gMzI7CisjZWxzZQorICAvLyBPdGhlciBDIGxpYnJhcmllcyAob3IgYmlvbmljIGZvciBNSVBTKSBhcmUgcGVyZmVjdGx5IGNhcGFibGUgb2YgdXNpbmcgdGhlaXIgbGFyZ2VzdCBzaWduYWwuCisgIEFTU0VSVF9HRShzaXplb2Yoc2lnc2V0X3QpICogOCwgc3RhdGljX2Nhc3Q8c2l6ZV90PihTSUdSVE1BWCkpOworI2VuZGlmCisKKyAgLy8gQmFkIHNpZ25hbCBudW1iZXI6IHRvbyBzbWFsbC4KKyAgZXJybm8gPSAwOworICBBU1NFUlRfRVEoLTEsIGZuKCZzZXQsIDApKTsKKyAgQVNTRVJUX0VRKEVJTlZBTCwgZXJybm8pOworCisgIC8vIEJhZCBzaWduYWwgbnVtYmVyOiB0b28gaGlnaC4KKyAgZXJybm8gPSAwOworICBBU1NFUlRfRVEoLTEsIGZuKCZzZXQsIG1heF9zaWduYWwgKyAxKSk7CisgIEFTU0VSVF9FUShFSU5WQUwsIGVycm5vKTsKKworICAvLyBHb29kIHNpZ25hbCBudW1iZXJzLCBsb3cgYW5kIGhpZ2ggZW5kcyBvZiByYW5nZS4KKyAgZXJybm8gPSAwOworICBBU1NFUlRfRVEoMCwgZm4oJnNldCwgbWluX3NpZ25hbCkpOworICBBU1NFUlRfRVEoMCwgZXJybm8pOworICBBU1NFUlRfRVEoMCwgZm4oJnNldCwgbWF4X3NpZ25hbCkpOworICBBU1NFUlRfRVEoMCwgZXJybm8pOworfQorCitjbGFzcyBTY29wZWRTaWduYWxIYW5kbGVyIHsKKyBwdWJsaWM6CisgIFNjb3BlZFNpZ25hbEhhbmRsZXIoaW50IHNpZ25hbF9udW1iZXIsIHZvaWQgKCpoYW5kbGVyKShpbnQpKSA6IHNpZ25hbF9udW1iZXJfKHNpZ25hbF9udW1iZXIpIHsKKyAgICBzaWdlbXB0eXNldCgmYWN0aW9uXy5zYV9tYXNrKTsKKyAgICBhY3Rpb25fLnNhX2ZsYWdzID0gMDsKKyAgICBhY3Rpb25fLnNhX2hhbmRsZXIgPSBoYW5kbGVyOworICAgIHNpZ2FjdGlvbihzaWduYWxfbnVtYmVyXywgJmFjdGlvbl8sICZvbGRfYWN0aW9uXyk7CisgIH0KKworICB+U2NvcGVkU2lnbmFsSGFuZGxlcigpIHsKKyAgICBzaWdhY3Rpb24oc2lnbmFsX251bWJlcl8sICZvbGRfYWN0aW9uXywgTlVMTCk7CisgIH0KKworIHByaXZhdGU6CisgIHN0cnVjdCBzaWdhY3Rpb24gYWN0aW9uXzsKKyAgc3RydWN0IHNpZ2FjdGlvbiBvbGRfYWN0aW9uXzsKKyAgY29uc3QgaW50IHNpZ25hbF9udW1iZXJfOworfTsKKworVEVTVChzaWduYWwsIHNpZ2lzbWVtYmVyX2ludmFsaWQpIHsKKyAgVGVzdFNpZ1NldDIoc2lnaXNtZW1iZXIpOworfQorCitURVNUKHNpZ25hbCwgc2lnYWRkc2V0X2ludmFsaWQpIHsKKyAgVGVzdFNpZ1NldDIoc2lnYWRkc2V0KTsKK30KKworVEVTVChzaWduYWwsIHNpZ2RlbHNldF9pbnZhbGlkKSB7CisgIFRlc3RTaWdTZXQyKHNpZ2RlbHNldCk7Cit9CisKK1RFU1Qoc2lnbmFsLCBzaWdlbXB0eXNldF9pbnZhbGlkKSB7CisgIFRlc3RTaWdTZXQxKHNpZ2VtcHR5c2V0KTsKK30KKworVEVTVChzaWduYWwsIHNpZ2ZpbGxzZXRfaW52YWxpZCkgeworICBUZXN0U2lnU2V0MShzaWdmaWxsc2V0KTsKK30KKworVEVTVChzaWduYWwsIHJhaXNlX2ludmFsaWQpIHsKKyAgZXJybm8gPSAwOworICBBU1NFUlRfRVEoLTEsIHJhaXNlKC0xKSk7CisgIEFTU0VSVF9FUShFSU5WQUwsIGVycm5vKTsKK30KKworc3RhdGljIHZvaWQgcmFpc2VfaW5fc2lnbmFsX2hhbmRsZXJfaGVscGVyKGludCBzaWduYWxfbnVtYmVyKSB7CisgIEFTU0VSVF9FUShTSUdBTFJNLCBzaWduYWxfbnVtYmVyKTsKKyAgc3RhdGljIGludCBjb3VudCA9IDA7CisgIGlmICgrK2NvdW50ID09IDEpIHsKKyAgICByYWlzZShTSUdBTFJNKTsKKyAgfQorfQorCitURVNUKHNpZ25hbCwgcmFpc2VfaW5fc2lnbmFsX2hhbmRsZXIpIHsKKyAgU2NvcGVkU2lnbmFsSGFuZGxlciBzc2goU0lHQUxSTSwgcmFpc2VfaW5fc2lnbmFsX2hhbmRsZXJfaGVscGVyKTsKKyAgcmFpc2UoU0lHQUxSTSk7Cit9CisKK3N0YXRpYyB2b2lkIEhhbmRsZVNJR0FMUk0oaW50IHNpZ25hbF9udW1iZXIpIHsKKyAgQVNTRVJUX0VRKFNJR0FMUk0sIHNpZ25hbF9udW1iZXIpOworfQorCitURVNUKHNpZ25hbCwgc2lnd2FpdCkgeworICBTY29wZWRTaWduYWxIYW5kbGVyIHNzaChTSUdBTFJNLCBIYW5kbGVTSUdBTFJNKTsKKworICBzaWdzZXRfdCB3YWl0X3NldDsKKyAgc2lnZW1wdHlzZXQoJndhaXRfc2V0KTsKKyAgc2lnYWRkc2V0KCZ3YWl0X3NldCwgU0lHQUxSTSk7CisKKyAgYWxhcm0oMSk7CisKKyAgaW50IHJlY2VpdmVkX3NpZ25hbDsKKyAgZXJybm8gPSAwOworICBBU1NFUlRfRVEoMCwgc2lnd2FpdCgmd2FpdF9zZXQsICZyZWNlaXZlZF9zaWduYWwpKTsKKyAgQVNTRVJUX0VRKDAsIGVycm5vKTsKKyAgQVNTRVJUX0VRKFNJR0FMUk0sIHJlY2VpdmVkX3NpZ25hbCk7Cit9CmRpZmYgLS1naXQgYS90ZXN0cy9zdGFja19wcm90ZWN0b3JfdGVzdC5jcHAgYi90ZXN0cy9zdGFja19wcm90ZWN0b3JfdGVzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmJhOGE4NwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3N0YWNrX3Byb3RlY3Rvcl90ZXN0LmNwcApAQCAtMCwwICsxLDEyNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKy8qCisgKiBDb250cmlidXRlZCBieTogSW50ZWwgQ29ycG9yYXRpb24KKyAqLworCisjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKworI2luY2x1ZGUgPHB0aHJlYWQuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN5cy9zeXNjYWxsLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c2V0PgorCisjaWZkZWYgX19HTElCQ19fCisKKy8vIGdsaWJjIGRvZXNuJ3QgZXhwb3NlIGdldHRpZCgyKS4KK3BpZF90IGdldHRpZCgpIHsgcmV0dXJuIHN5c2NhbGwoX19OUl9nZXR0aWQpOyB9CisKKyNlbmRpZgorCisjaWZkZWYgX19pMzg2X18KKworLy8gRm9yIHg4NiwgYmlvbmljIGFuZCBnbGliYyBoYXZlIHBlci10aHJlYWQgc3RhY2sgZ3VhcmQgdmFsdWVzIChhbGwgaWRlbnRpY2FsKS4KKworc3RhdGljIHVpbnQzMl90IEdldEd1YXJkRnJvbVRscygpIHsKKyAgdWludDMyX3QgZ3VhcmQ7CisgIGFzbSAoIm1vdiAlJWdzOjB4MTQsICUwIjogIj1kIiAoZ3VhcmQpKTsKKyAgcmV0dXJuIGd1YXJkOworfQorCitzdHJ1Y3Qgc3RhY2tfcHJvdGVjdG9yX2NoZWNrZXIgeworICBzdGQ6OnNldDxwaWRfdD4gdGlkczsKKyAgc3RkOjpzZXQ8dWludDMyX3Q+IGd1YXJkczsKKworICB2b2lkIENoZWNrKCkgeworICAgIHBpZF90IHRpZCA9IGdldHRpZCgpOworICAgIHVpbnQzMl90IGd1YXJkID0gR2V0R3VhcmRGcm9tVGxzKCk7CisKKyAgICBwcmludGYoIlt0aHJlYWQgJWRdICUlZ3M6MHgxNCA9IDB4JTA4eFxuIiwgdGlkLCBndWFyZCk7CisKKyAgICAvLyBEdXBsaWNhdGUgdGlkLiBnZXR0aWQoMikgYnVnPyBTZWVpbmcgdGhpcyB3b3VsZCBiZSB2ZXJ5IHVwc2V0dGluZy4KKyAgICBBU1NFUlRfVFJVRSh0aWRzLmZpbmQodGlkKSA9PSB0aWRzLmVuZCgpKTsKKworICAgIC8vIFVuaW5pdGlhbGl6ZWQgZ3VhcmQuIE91ciBidWcuIE5vdGUgdGhpcyBpcyBwb3RlbnRpYWxseSBmbGFreTsgd2UgX2NvdWxkXyBnZXQKKyAgICAvLyBmb3VyIHJhbmRvbSB6ZXJvIGJ5dGVzLCBidXQgaXQgc2hvdWxkIGJlIHZhbmlzaGluZ2x5IHVubGlrZWx5LgorICAgIEFTU0VSVF9ORShndWFyZCwgMFUpOworCisgICAgdGlkcy5pbnNlcnQodGlkKTsKKyAgICBndWFyZHMuaW5zZXJ0KGd1YXJkKTsKKyAgfQorfTsKKworc3RhdGljIHZvaWQqIFRocmVhZEd1YXJkSGVscGVyKHZvaWQqIGFyZykgeworICBzdGFja19wcm90ZWN0b3JfY2hlY2tlciogY2hlY2tlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8c3RhY2tfcHJvdGVjdG9yX2NoZWNrZXIqPihhcmcpOworICBjaGVja2VyLT5DaGVjaygpOworICByZXR1cm4gTlVMTDsKK30KKworVEVTVChzdGFja19wcm90ZWN0b3IsIHNhbWVfZ3VhcmRfcGVyX3RocmVhZCkgeworICBzdGFja19wcm90ZWN0b3JfY2hlY2tlciBjaGVja2VyOworICBzaXplX3QgdGhyZWFkX2NvdW50ID0gMTA7CisgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdGhyZWFkX2NvdW50OyArK2kpIHsKKyAgICBwdGhyZWFkX3QgdDsKKyAgICBBU1NFUlRfRVEoMCwgcHRocmVhZF9jcmVhdGUoJnQsIE5VTEwsIFRocmVhZEd1YXJkSGVscGVyLCAmY2hlY2tlcikpOworICAgIHZvaWQqIHJlc3VsdDsKKyAgICBBU1NFUlRfRVEoMCwgcHRocmVhZF9qb2luKHQsICZyZXN1bHQpKTsKKyAgICBBU1NFUlRfRVEoTlVMTCwgcmVzdWx0KTsKKyAgfQorICBBU1NFUlRfRVEodGhyZWFkX2NvdW50LCBjaGVja2VyLnRpZHMuc2l6ZSgpKTsKKworICAvLyBiaW9uaWMgYW5kIGdsaWJjIHVzZSB0aGUgc2FtZSBndWFyZCBmb3IgZXZlcnkgdGhyZWFkLgorICBBU1NFUlRfRVEoMVUsIGNoZWNrZXIuZ3VhcmRzLnNpemUoKSk7Cit9CisKKyNlbmRpZgorCisjaWYgZGVmaW5lZChfX0JJT05JQ19fKSB8fCBkZWZpbmVkKF9fYXJtX18pIHx8IGRlZmluZWQoX19taXBzX18pCisKKy8vIEZvciBBUk0gYW5kIE1JUFMsIGdsaWJjIGhhcyBhIGdsb2JhbCBzdGFjayBjaGVjayBndWFyZCB2YWx1ZS4KKworLy8gQmlvbmljIGhhcyB0aGUgZ2xvYmFsIGZvciB4ODYgdG9vLCB0byBzdXBwb3J0IGJpbmFyaWVzIHRoYXQgY2FuIHJ1biBvbgorLy8gQW5kcm9pZCByZWxlYXNlcyB0aGF0IGRpZG4ndCBpbXBsZW1lbnQgdGhlIFRMUyBndWFyZCB2YWx1ZS4KKworZXh0ZXJuICJDIiB1aW50cHRyX3QgX19zdGFja19jaGtfZ3VhcmQ7CisKK1RFU1Qoc3RhY2tfcHJvdGVjdG9yLCBnbG9iYWxfZ3VhcmQpIHsKKyAgQVNTRVJUX05FKDAsIGdldHRpZCgpKTsKKyAgQVNTRVJUX05FKDBVLCBfX3N0YWNrX2Noa19ndWFyZCk7Cit9CisKKy8qCisgKiBXaGVuIHRoaXMgZnVuY3Rpb24gcmV0dXJucywgdGhlIHN0YWNrIGNhbmFyeSB3aWxsIGJlIGluY29uc2lzdGVudAorICogd2l0aCB0aGUgcHJldmlvdXMgdmFsdWUsIHdoaWNoIHdpbGwgZ2VuZXJhdGUgYSBjYWxsIHRvIF9fc3RhY2tfY2hrX2ZhaWwoKSwKKyAqIGV2ZW50dWFsbHkgcmVzdWx0aW5nIGluIGEgU0lHQUJSVC4KKyAqCisgKiBUaGlzIG11c3QgYmUgbWFya2VkIHdpdGggIl9fYXR0cmlidXRlX18gKChub2lubGluZSkpIiwgdG8gZW5zdXJlIHRoZQorICogY29tcGlsZXIgZ2VuZXJhdGVzIHRoZSBwcm9wZXIgc3RhY2sgZ3VhcmRzIGFyb3VuZCB0aGlzIGZ1bmN0aW9uLgorICovCitfX2F0dHJpYnV0ZV9fICgobm9pbmxpbmUpKQorc3RhdGljIHZvaWQgZG9fbW9kaWZ5X3N0YWNrX2Noa19ndWFyZCgpIHsKKyAgX19zdGFja19jaGtfZ3VhcmQgPSAweDEyMzQ1Njc4OworfQorCitURVNUKHN0YWNrX3Byb3RlY3Rvcl9EZWF0aFRlc3QsIG1vZGlmeV9zdGFja19wcm90ZWN0b3IpIHsKKyAgOjp0ZXN0aW5nOjpGTEFHU19ndGVzdF9kZWF0aF90ZXN0X3N0eWxlID0gInRocmVhZHNhZmUiOworICBBU1NFUlRfRVhJVChkb19tb2RpZnlfc3RhY2tfY2hrX2d1YXJkKCksIHRlc3Rpbmc6OktpbGxlZEJ5U2lnbmFsKFNJR0FCUlQpLCAiIik7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvdGVzdHMvc3RhY2tfdW53aW5kaW5nX3Rlc3QuY3BwIGIvdGVzdHMvc3RhY2tfdW53aW5kaW5nX3Rlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiMThkYWEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9zdGFja191bndpbmRpbmdfdGVzdC5jcHAKQEAgLTAsMCArMSwzNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKy8qCisgKiBDb250cmlidXRlZCBieTogSW50ZWwgQ29ycG9yYXRpb24KKyAqLworCisjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKworI2lmIGRlZmluZWQoaTM4NikgLy8gT25seSBvdXIgeDg2IHVud2luZGluZyBpcyBnb29kIGVub3VnaC4gU3dpdGNoIHRvIGxpYnVud2luZD8KKworZXh0ZXJuICJDIiB7CisgIHZvaWQgZG9fdGVzdCgpOworfQorCisvLyBXZSBoYXZlIHRvIHNheSAiRGVhdGhUZXN0IiBoZXJlIHNvIGd0ZXN0IGtub3dzIHRvIHJ1biB0aGlzIHRlc3QgKHdoaWNoIGV4aXRzKQorLy8gaW4gaXRzIG93biBwcm9jZXNzLgorVEVTVChzdGFja191bndpbmRpbmdfRGVhdGhUZXN0LCB1bndpbmRpbmdfdGhyb3VnaF9zaWduYWxfZnJhbWUpIHsKKyAgOjp0ZXN0aW5nOjpGTEFHU19ndGVzdF9kZWF0aF90ZXN0X3N0eWxlID0gInRocmVhZHNhZmUiOworICBBU1NFUlRfRVhJVChkb190ZXN0KCksIDo6dGVzdGluZzo6RXhpdGVkV2l0aENvZGUoNDIpLCAiIik7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvdGVzdHMvc3RhY2tfdW53aW5kaW5nX3Rlc3RfaW1wbC5jIGIvdGVzdHMvc3RhY2tfdW53aW5kaW5nX3Rlc3RfaW1wbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwMDk5ZjAKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9zdGFja191bndpbmRpbmdfdGVzdF9pbXBsLmMKQEAgLTAsMCArMSw2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKy8qCisgKiBDb250cmlidXRlZCBieTogSW50ZWwgQ29ycG9yYXRpb24KKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzaWduYWwuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx1bndpbmQuaD4KKworI2RlZmluZSBub2lubGluZSBfX2F0dHJpYnV0ZV9fKChfX25vaW5saW5lX18pKQorI2RlZmluZSB1bnVzZWQgX19hdHRyaWJ1dGVfXygoX191bnVzZWRfXykpCisKK3N0YXRpYyBub2lubGluZSBfVW53aW5kX1JlYXNvbl9Db2RlIHN0b3BfZm4oaW50IGEgdW51c2VkLAorICAgIF9VbndpbmRfQWN0aW9uIGFjdGlvbiwKKyAgICBfVW53aW5kX0V4Y2VwdGlvbl9DbGFzcyBiIHVudXNlZCwgc3RydWN0IF9VbndpbmRfRXhjZXB0aW9uKiBjIHVudXNlZCwKKyAgICBzdHJ1Y3QgX1Vud2luZF9Db250ZXh0KiBkIHVudXNlZCwgdm9pZCogZSB1bnVzZWQpIHsKKyAgaWYgKChhY3Rpb24gJiBfVUFfRU5EX09GX1NUQUNLKSAhPSAwKSB7CisgICAgLy8gV2UgcmVhY2hlZCB0aGUgZW5kIG9mIHRoZSBzdGFjayB3aXRob3V0IGV4ZWN1dGluZyBmb29fY2xlYW51cC4gVGVzdCBmYWlsZWQuCisgICAgYWJvcnQoKTsKKyAgfQorICByZXR1cm4gX1VSQ19OT19SRUFTT047Cit9CisKK3N0YXRpYyB2b2lkIG5vaW5saW5lIGZvb19jbGVhbnVwKGNoYXIqIHBhcmFtIHVudXNlZCkgeworICBleGl0KDQyKTsKK30KKworc3RhdGljIHZvaWQgbm9pbmxpbmUgZG9fY3Jhc2goKSB7CisgIGNoYXIqIHB0ciA9IE5VTEw7CisgICpwdHIgPSAwOyAvLyBEZWxpYmVyYXRlbHkgY2F1c2UgYSBTSUdTRUdWLgorfQorCitzdGF0aWMgdm9pZCBub2lubGluZSBmb28oKSB7CisgIGNoYXIgYzEgX19hdHRyaWJ1dGVfXygoY2xlYW51cChmb29fY2xlYW51cCkpKTsKKyAgZG9fY3Jhc2goKTsKK30KKworLy8gSXQncyBTRUdTRUdWIGhhbmRsZXIuIFdlIHN0YXJ0IGZvcmNlZCBzdGFjayB1bndpbmRpbmcgaGVyZS4KKy8vIElmIGxpYmdjYyBkb24ndCBmaW5kIGRzbyBmb3Igc2lnbmFsIGZyYW1lIHN0YWNrIHVud2luZGluZyB3aWxsIGJlIGZpbmlzaGVkLgorLy8gbGliZ2NjIHBhc3MgdG8gc3RvcF9mbiBfVUFfRU5EX09GX1NUQUNLIGZsYWcuCisvLyBUZXN0IHBhc3MgY29uZGl0aW9uOiBzdGFjayB1bndpbmRpbmcgdGhyb3VnaCBzaWduYWwgZnJhbWUgYW5kIGZvbzFfaGFuZGxlciBleGVjdXRpb24uCitzdGF0aWMgdm9pZCBub2lubGluZSBzaWdzZWd2X2hhbmRsZXIoaW50IHBhcmFtIHVudXNlZCkgeworICBzdHJ1Y3QgX1Vud2luZF9FeGNlcHRpb24qIGV4Y2VwdGlvbiA9IChzdHJ1Y3QgX1Vud2luZF9FeGNlcHRpb24qKSBtYWxsb2Moc2l6ZW9mKCpleGNlcHRpb24pKTsKKyAgbWVtc2V0KCZleGNlcHRpb24tPmV4Y2VwdGlvbl9jbGFzcywgMCwgc2l6ZW9mKGV4Y2VwdGlvbi0+ZXhjZXB0aW9uX2NsYXNzKSk7CisgIGV4Y2VwdGlvbi0+ZXhjZXB0aW9uX2NsZWFudXAgPSAwOworICBfVW53aW5kX0ZvcmNlZFVud2luZChleGNlcHRpb24sIHN0b3BfZm4sIDApOworfQorCit2b2lkIGRvX3Rlc3QoKSB7CisgIHNpZ25hbChTSUdTRUdWLCAmc2lnc2Vndl9oYW5kbGVyKTsKKyAgZm9vKCk7Cit9CmRpZmYgLS1naXQgYS90ZXN0cy9zdGF0dmZzX3Rlc3QuY3BwIGIvdGVzdHMvc3RhdHZmc190ZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YWZjNmZkCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvc3RhdHZmc190ZXN0LmNwcApAQCAtMCwwICsxLDcxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisKKyNpbmNsdWRlIDxzeXMvc3RhdHZmcy5oPgorCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDxmY250bC5oPgorCitURVNUKHN0YXR2ZnMsIHN0YXR2ZnMpIHsKKyAgc3RydWN0IHN0YXR2ZnMgc2I7CisgIG1lbXNldCgmc2IsIDAsIHNpemVvZihzYikpOworCisgIEFTU0VSVF9FUSgwLCBzdGF0dmZzKCIvIiwgJnNiKSk7CisjaWYgX19CSU9OSUNfXworICBBU1NFUlRfRVEoMFUsIHNiLmZfYmZyZWUpOworICBBU1NFUlRfRVEoMFUsIHNiLmZfZmZyZWUpOworICBBU1NFUlRfRVEoMFUsIHNiLmZfZnNpZCk7CisgIEFTU0VSVF9UUlVFKChzYi5mX2ZsYWcgJiBTVF9SRE9OTFkpICE9IDApOworI2VuZGlmCisKKyNpZiBfX0JJT05JQ19fCisgIEFTU0VSVF9FUSgwLCBzdGF0dmZzKCIvZGF0YS9kYXRhIiwgJnNiKSk7CisgIEFTU0VSVF9ORSgwVSwgc2IuZl9iZnJlZSk7CisgIEFTU0VSVF9ORSgwVSwgc2IuZl9mZnJlZSk7CisgIEFTU0VSVF9ORSgwVSwgc2IuZl9mc2lkKTsKKyAgQVNTRVJUX0ZBTFNFKChzYi5mX2ZsYWcgJiBTVF9SRE9OTFkpICE9IDApOworICBBU1NFUlRfVFJVRSgoc2IuZl9mbGFnICYgU1RfTk9TVUlEKSAhPSAwKTsKKyNlbmRpZgorfQorCitURVNUKHN0YXR2ZnMsIGZzdGF0dmZzKSB7CisgIHN0cnVjdCBzdGF0dmZzIHNiOworICBtZW1zZXQoJnNiLCAwLCBzaXplb2Yoc2IpKTsKKworICBpbnQgZmQgPSBvcGVuKCIvIiwgT19SRE9OTFkpOworICBBU1NFUlRfRVEoMCwgZnN0YXR2ZnMoZmQsICZzYikpOworICBjbG9zZShmZCk7CisjaWYgX19CSU9OSUNfXworICBBU1NFUlRfRVEoMFUsIHNiLmZfYmZyZWUpOworICBBU1NFUlRfRVEoMFUsIHNiLmZfZmZyZWUpOworICBBU1NFUlRfRVEoMFUsIHNiLmZfZnNpZCk7CisgIEFTU0VSVF9UUlVFKChzYi5mX2ZsYWcgJiBTVF9SRE9OTFkpICE9IDApOworI2VuZGlmCisKKyNpZiBfX0JJT05JQ19fCisgIGZkID0gb3BlbigiL2RhdGEvZGF0YSIsIE9fUkRPTkxZKTsKKyAgQVNTRVJUX0VRKDAsIGZzdGF0dmZzKGZkLCAmc2IpKTsKKyAgY2xvc2UoZmQpOworICBBU1NFUlRfTkUoMFUsIHNiLmZfYmZyZWUpOworICBBU1NFUlRfTkUoMFUsIHNiLmZfZmZyZWUpOworICBBU1NFUlRfTkUoMFUsIHNiLmZfZnNpZCk7CisgIEFTU0VSVF9GQUxTRSgoc2IuZl9mbGFnICYgU1RfUkRPTkxZKSAhPSAwKTsKKyAgQVNTRVJUX1RSVUUoKHNiLmZfZmxhZyAmIFNUX05PU1VJRCkgIT0gMCk7CisjZW5kaWYKK30KZGlmZiAtLWdpdCBhL3Rlc3RzL3N0ZGlvX3Rlc3QuY3BwIGIvdGVzdHMvc3RkaW9fdGVzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmU3NzlkOAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3N0ZGlvX3Rlc3QuY3BwCkBAIC0wLDAgKzEsMjEzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisKKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworVEVTVChzdGRpbywgdG1wZmlsZV9maWxlbm9fZnByaW50Zl9yZXdpbmRfZmdldHMpIHsKKyAgRklMRSogZnAgPSB0bXBmaWxlKCk7CisgIEFTU0VSVF9UUlVFKGZwICE9IE5VTEwpOworCisgIGludCBmZCA9IGZpbGVubyhmcCk7CisgIEFTU0VSVF9ORShmZCwgLTEpOworCisgIHN0cnVjdCBzdGF0IHNiOworICBpbnQgcmMgPSBmc3RhdChmZCwgJnNiKTsKKyAgQVNTRVJUX05FKHJjLCAtMSk7CisgIEFTU0VSVF9FUShzYi5zdF9tb2RlICYgMDc3NywgMDYwMFUpOworCisgIHJjID0gZnByaW50ZihmcCwgImhlbGxvXG4iKTsKKyAgQVNTRVJUX0VRKHJjLCA2KTsKKworICByZXdpbmQoZnApOworCisgIGNoYXIgYnVmWzE2XTsKKyAgY2hhciogcyA9IGZnZXRzKGJ1Ziwgc2l6ZW9mKGJ1ZiksIGZwKTsKKyAgQVNTRVJUX1RSVUUocyAhPSBOVUxMKTsKKyAgQVNTRVJUX1NUUkVRKCJoZWxsb1xuIiwgcyk7CisKKyAgZmNsb3NlKGZwKTsKK30KKworVEVTVChzdGRpbywgZ2V0ZGVsaW0pIHsKKyAgRklMRSogZnAgPSB0bXBmaWxlKCk7CisgIEFTU0VSVF9UUlVFKGZwICE9IE5VTEwpOworCisgIGNvbnN0IGNoYXIqIGxpbmVfd3JpdHRlbiA9ICJUaGlzICBpcyBhIHRlc3QiOworICBpbnQgcmMgPSBmcHJpbnRmKGZwLCAiJXMiLCBsaW5lX3dyaXR0ZW4pOworICBBU1NFUlRfRVEocmMsIHN0YXRpY19jYXN0PGludD4oc3RybGVuKGxpbmVfd3JpdHRlbikpKTsKKworICByZXdpbmQoZnApOworCisgIGNoYXIqIHdvcmRfcmVhZCA9IE5VTEw7CisgIHNpemVfdCBhbGxvY2F0ZWRfbGVuZ3RoID0gMDsKKworICBjb25zdCBjaGFyKiBleHBlY3RlZFtdID0geyAiVGhpcyAiLCAiICIsICJpcyAiLCAiYSAiLCAidGVzdCIgfTsKKyAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCA1OyArK2kpIHsKKyAgICBBU1NFUlRfRkFMU0UoZmVvZihmcCkpOworICAgIEFTU0VSVF9FUShnZXRkZWxpbSgmd29yZF9yZWFkLCAmYWxsb2NhdGVkX2xlbmd0aCwgJyAnLCBmcCksIHN0YXRpY19jYXN0PGludD4oc3RybGVuKGV4cGVjdGVkW2ldKSkpOworICAgIEFTU0VSVF9HRShhbGxvY2F0ZWRfbGVuZ3RoLCBzdHJsZW4oZXhwZWN0ZWRbaV0pKTsKKyAgICBBU1NFUlRfU1RSRVEod29yZF9yZWFkLCBleHBlY3RlZFtpXSk7CisgIH0KKyAgLy8gVGhlIGxhc3QgcmVhZCBzaG91bGQgaGF2ZSBzZXQgdGhlIGVuZC1vZi1maWxlIGluZGljYXRvciBmb3IgdGhlIHN0cmVhbS4KKyAgQVNTRVJUX1RSVUUoZmVvZihmcCkpOworICBjbGVhcmVycihmcCk7CisKKyAgLy8gZ2V0ZGVsaW0gcmV0dXJucyAtMSBidXQgZG9lc24ndCBzZXQgZXJybm8gaWYgd2UncmUgYWxyZWFkeSBhdCBFT0YuCisgIC8vIEl0IHNob3VsZCBzZXQgdGhlIGVuZC1vZi1maWxlIGluZGljYXRvciBmb3IgdGhlIHN0cmVhbSwgdGhvdWdoLgorICBlcnJubyA9IDA7CisgIEFTU0VSVF9FUShnZXRkZWxpbSgmd29yZF9yZWFkLCAmYWxsb2NhdGVkX2xlbmd0aCwgJyAnLCBmcCksIC0xKTsKKyAgQVNTRVJUX0VRKDAsIGVycm5vKTsKKyAgQVNTRVJUX1RSVUUoZmVvZihmcCkpOworCisgIGZyZWUod29yZF9yZWFkKTsKKyAgZmNsb3NlKGZwKTsKK30KKworVEVTVChzdGRpbywgZ2V0ZGVsaW1faW52YWxpZCkgeworICBGSUxFKiBmcCA9IHRtcGZpbGUoKTsKKworICBjaGFyKiBidWZmZXIgPSBOVUxMOworICBzaXplX3QgYnVmZmVyX2xlbmd0aCA9IDA7CisKKyAgLy8gVGhlIGZpcnN0IGFyZ3VtZW50IGNhbid0IGJlIE5VTEwuCisgIGVycm5vID0gMDsKKyAgQVNTRVJUX0VRKGdldGRlbGltKE5VTEwsICZidWZmZXJfbGVuZ3RoLCAnICcsIGZwKSwgLTEpOworICBBU1NFUlRfRVEoRUlOVkFMLCBlcnJubyk7CisKKyAgLy8gVGhlIHNlY29uZCBhcmd1bWVudCBjYW4ndCBiZSBOVUxMLgorICBlcnJubyA9IDA7CisgIEFTU0VSVF9FUShnZXRkZWxpbSgmYnVmZmVyLCBOVUxMLCAnICcsIGZwKSwgLTEpOworICBBU1NFUlRfRVEoRUlOVkFMLCBlcnJubyk7CisKKyAgLy8gVGhlIHN0cmVhbSBjYW4ndCBiZSBjbG9zZWQuCisgIGZjbG9zZShmcCk7CisgIGVycm5vID0gMDsKKyAgQVNTRVJUX0VRKGdldGRlbGltKCZidWZmZXIsICZidWZmZXJfbGVuZ3RoLCAnICcsIGZwKSwgLTEpOworICBBU1NFUlRfRVEoRUJBREYsIGVycm5vKTsKK30KKworVEVTVChzdGRpbywgZ2V0bGluZSkgeworICBGSUxFKiBmcCA9IHRtcGZpbGUoKTsKKyAgQVNTRVJUX1RSVUUoZnAgIT0gTlVMTCk7CisKKyAgY29uc3QgY2hhciogbGluZV93cml0dGVuID0gIlRoaXMgaXMgYSB0ZXN0IGZvciBnZXRsaW5lXG4iOworICBjb25zdCBzaXplX3QgbGluZV9jb3VudCA9IDU7CisKKyAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsaW5lX2NvdW50OyArK2kpIHsKKyAgICBpbnQgcmMgPSBmcHJpbnRmKGZwLCAiJXMiLCBsaW5lX3dyaXR0ZW4pOworICAgIEFTU0VSVF9FUShyYywgc3RhdGljX2Nhc3Q8aW50PihzdHJsZW4obGluZV93cml0dGVuKSkpOworICB9CisKKyAgcmV3aW5kKGZwKTsKKworICBjaGFyKiBsaW5lX3JlYWQgPSBOVUxMOworICBzaXplX3QgYWxsb2NhdGVkX2xlbmd0aCA9IDA7CisKKyAgc2l6ZV90IHJlYWRfbGluZV9jb3VudCA9IDA7CisgIHNzaXplX3QgcmVhZF9jaGFyX2NvdW50OworICB3aGlsZSAoKHJlYWRfY2hhcl9jb3VudCA9IGdldGxpbmUoJmxpbmVfcmVhZCwgJmFsbG9jYXRlZF9sZW5ndGgsIGZwKSkgIT0gLTEpIHsKKyAgICBBU1NFUlRfRVEocmVhZF9jaGFyX2NvdW50LCBzdGF0aWNfY2FzdDxpbnQ+KHN0cmxlbihsaW5lX3dyaXR0ZW4pKSk7CisgICAgQVNTRVJUX0dFKGFsbG9jYXRlZF9sZW5ndGgsIHN0cmxlbihsaW5lX3dyaXR0ZW4pKTsKKyAgICBBU1NFUlRfU1RSRVEobGluZV9yZWFkLCBsaW5lX3dyaXR0ZW4pOworICAgICsrcmVhZF9saW5lX2NvdW50OworICB9CisgIEFTU0VSVF9FUShyZWFkX2xpbmVfY291bnQsIGxpbmVfY291bnQpOworCisgIC8vIFRoZSBsYXN0IHJlYWQgc2hvdWxkIGhhdmUgc2V0IHRoZSBlbmQtb2YtZmlsZSBpbmRpY2F0b3IgZm9yIHRoZSBzdHJlYW0uCisgIEFTU0VSVF9UUlVFKGZlb2YoZnApKTsKKyAgY2xlYXJlcnIoZnApOworCisgIC8vIGdldGxpbmUgcmV0dXJucyAtMSBidXQgZG9lc24ndCBzZXQgZXJybm8gaWYgd2UncmUgYWxyZWFkeSBhdCBFT0YuCisgIC8vIEl0IHNob3VsZCBzZXQgdGhlIGVuZC1vZi1maWxlIGluZGljYXRvciBmb3IgdGhlIHN0cmVhbSwgdGhvdWdoLgorICBlcnJubyA9IDA7CisgIEFTU0VSVF9FUShnZXRsaW5lKCZsaW5lX3JlYWQsICZhbGxvY2F0ZWRfbGVuZ3RoLCBmcCksIC0xKTsKKyAgQVNTRVJUX0VRKDAsIGVycm5vKTsKKyAgQVNTRVJUX1RSVUUoZmVvZihmcCkpOworCisgIGZyZWUobGluZV9yZWFkKTsKKyAgZmNsb3NlKGZwKTsKK30KKworVEVTVChzdGRpbywgZ2V0bGluZV9pbnZhbGlkKSB7CisgIEZJTEUqIGZwID0gdG1wZmlsZSgpOworCisgIGNoYXIqIGJ1ZmZlciA9IE5VTEw7CisgIHNpemVfdCBidWZmZXJfbGVuZ3RoID0gMDsKKworICAvLyBUaGUgZmlyc3QgYXJndW1lbnQgY2FuJ3QgYmUgTlVMTC4KKyAgZXJybm8gPSAwOworICBBU1NFUlRfRVEoZ2V0bGluZShOVUxMLCAmYnVmZmVyX2xlbmd0aCwgZnApLCAtMSk7CisgIEFTU0VSVF9FUShFSU5WQUwsIGVycm5vKTsKKworICAvLyBUaGUgc2Vjb25kIGFyZ3VtZW50IGNhbid0IGJlIE5VTEwuCisgIGVycm5vID0gMDsKKyAgQVNTRVJUX0VRKGdldGxpbmUoJmJ1ZmZlciwgTlVMTCwgZnApLCAtMSk7CisgIEFTU0VSVF9FUShFSU5WQUwsIGVycm5vKTsKKworICAvLyBUaGUgc3RyZWFtIGNhbid0IGJlIGNsb3NlZC4KKyAgZmNsb3NlKGZwKTsKKyAgZXJybm8gPSAwOworICBBU1NFUlRfRVEoZ2V0bGluZSgmYnVmZmVyLCAmYnVmZmVyX2xlbmd0aCwgZnApLCAtMSk7CisgIEFTU0VSVF9FUShFQkFERiwgZXJybm8pOworfQorCitURVNUKHN0ZGlvLCBwcmludGZfc3NpemVfdCkgeworICAvLyBodHRwOi8vYi84MjUzNzY5CisgIEFTU0VSVF9FUShzaXplb2Yoc3NpemVfdCksIHNpemVvZihsb25nIGludCkpOworICBBU1NFUlRfRVEoc2l6ZW9mKHNzaXplX3QpLCBzaXplb2Yoc2l6ZV90KSk7CisgIC8vIEZvciBvdXIgMzItYml0IEFCSSwgd2UgaGFkIGEgc3NpemVfdCBkZWZpbml0aW9uIHRoYXQgY29uZnVzZXMgR0NDIGludG8gc2F5aW5nOgorICAvLyBlcnJvcjogZm9ybWF0ICclemQnIGV4cGVjdHMgYXJndW1lbnQgb2YgdHlwZSAnc2lnbmVkIHNpemVfdCcsCisgIC8vICAgICBidXQgYXJndW1lbnQgNCBoYXMgdHlwZSAnc3NpemVfdCB7YWthIGxvbmcgaW50fScgWy1XZXJyb3I9Zm9ybWF0XQorICBzc2l6ZV90IHYgPSAxOworICBjaGFyIGJ1ZlszMl07CisgIHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlemQiLCB2KTsKK30KKworVEVTVChzdGRpbywgcG9wZW4pIHsKKyAgRklMRSogZnAgPSBwb3BlbigiY2F0IC9wcm9jL3ZlcnNpb24iLCAiciIpOworICBBU1NFUlRfVFJVRShmcCAhPSBOVUxMKTsKKworICBjaGFyIGJ1ZlsxNl07CisgIGNoYXIqIHMgPSBmZ2V0cyhidWYsIHNpemVvZihidWYpLCBmcCk7CisgIGJ1ZlsxM10gPSAnXDAnOworICBBU1NFUlRfU1RSRVEoIkxpbnV4IHZlcnNpb24iLCBzKTsKKworICBBU1NFUlRfRVEoMCwgcGNsb3NlKGZwKSk7Cit9CisKK1RFU1Qoc3RkaW8sIGdldGMpIHsKKyAgRklMRSogZnAgPSBmb3BlbigiL3Byb2MvdmVyc2lvbiIsICJyIik7CisgIEFTU0VSVF9UUlVFKGZwICE9IE5VTEwpOworICBBU1NFUlRfRVEoJ0wnLCBnZXRjKGZwKSk7CisgIEFTU0VSVF9FUSgnaScsIGdldGMoZnApKTsKKyAgQVNTRVJUX0VRKCduJywgZ2V0YyhmcCkpOworICBBU1NFUlRfRVEoJ3UnLCBnZXRjKGZwKSk7CisgIEFTU0VSVF9FUSgneCcsIGdldGMoZnApKTsKKyAgZmNsb3NlKGZwKTsKK30KKworVEVTVChzdGRpbywgcHV0YykgeworICBGSUxFKiBmcCA9IGZvcGVuKCIvcHJvYy92ZXJzaW9uIiwgInIiKTsKKyAgQVNTRVJUX1RSVUUoZnAgIT0gTlVMTCk7CisgIEFTU0VSVF9FUShFT0YsIHB1dGMoJ3gnLCBmcCkpOworICBmY2xvc2UoZnApOworfQpkaWZmIC0tZ2l0IGEvdGVzdHMvc3RkbGliX3Rlc3QuY3BwIGIvdGVzdHMvc3RkbGliX3Rlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1ZDc4MTIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9zdGRsaWJfdGVzdC5jcHAKQEAgLTAsMCArMSwxMzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKworI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8bGliZ2VuLmg+CisjaW5jbHVkZSA8bGltaXRzLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisKK1RFU1Qoc3RkbGliLCBkcmFuZDQ4KSB7CisgIHNyYW5kNDgoMHgwMTAyMDMwNCk7CisgIEVYUEVDVF9ET1VCTEVfRVEoMC42NTYxOTI5OTE5NTYyMzUyNiwgZHJhbmQ0OCgpKTsKKyAgRVhQRUNUX0RPVUJMRV9FUSgwLjE4NTIyNTk3MjI5NzcyOTQxLCBkcmFuZDQ4KCkpOworICBFWFBFQ1RfRE9VQkxFX0VRKDAuNDIwMTUwODcwNzI4NDQ1MzcsIGRyYW5kNDgoKSk7CisgIEVYUEVDVF9ET1VCTEVfRVEoMC4wNjE2Mzc3ODMwNDczOTUwODksIGRyYW5kNDgoKSk7Cit9CisKK1RFU1Qoc3RkbGliLCBscmFuZDQ4X3JhbmRvbV9yYW5kKSB7CisgIHNyYW5kNDgoMHgwMTAyMDMwNCk7CisgIEVYUEVDVF9FUSgxNDA5MTYzNzIwLCBscmFuZDQ4KCkpOworICBFWFBFQ1RfRVEoMzk3NzY5NzQ2LCBscmFuZDQ4KCkpOworICBFWFBFQ1RfRVEoOTAyMjY3MTI0LCBscmFuZDQ4KCkpOworICBFWFBFQ1RfRVEoMTMyMzY2MTMxLCBscmFuZDQ4KCkpOworCisjaWYgX19CSU9OSUNfXworICAvLyBPbiBiaW9uaWMsIHJhbmRvbSgzKSBpcyBlcXVpdmFsZW50IHRvIGxyYW5kNDguLi4KKyAgc3JhbmRvbSgweDAxMDIwMzA0KTsKKyAgRVhQRUNUX0VRKDE0MDkxNjM3MjAsIHJhbmRvbSgpKTsKKyAgRVhQRUNUX0VRKDM5Nzc2OTc0NiwgcmFuZG9tKCkpOworICBFWFBFQ1RfRVEoOTAyMjY3MTI0LCByYW5kb20oKSk7CisgIEVYUEVDVF9FUSgxMzIzNjYxMzEsIHJhbmRvbSgpKTsKKworICAvLyAuLi5hbmQgcmFuZCgzKSBpcyB0aGUgYm90dG9tIDMyIGJpdHMuCisgIHNyYW5kKDB4MDEwMjAzMDQpOworICBFWFBFQ1RfRVEoc3RhdGljX2Nhc3Q8aW50PigxNDA5MTYzNzIwKSwgcmFuZCgpKTsKKyAgRVhQRUNUX0VRKHN0YXRpY19jYXN0PGludD4oMzk3NzY5NzQ2KSwgcmFuZCgpKTsKKyAgRVhQRUNUX0VRKHN0YXRpY19jYXN0PGludD4oOTAyMjY3MTI0KSwgcmFuZCgpKTsKKyAgRVhQRUNUX0VRKHN0YXRpY19jYXN0PGludD4oMTMyMzY2MTMxKSwgcmFuZCgpKTsKKyNlbmRpZgorfQorCitURVNUKHN0ZGxpYiwgbXJhbmQ0OCkgeworICBzcmFuZDQ4KDB4MDEwMjAzMDQpOworICBFWFBFQ1RfRVEoLTE0NzY2Mzk4NTYsIG1yYW5kNDgoKSk7CisgIEVYUEVDVF9FUSg3OTU1Mzk0OTMsIG1yYW5kNDgoKSk7CisgIEVYUEVDVF9FUSgxODA0NTM0MjQ5LCBtcmFuZDQ4KCkpOworICBFWFBFQ1RfRVEoMjY0NzMyMjYyLCBtcmFuZDQ4KCkpOworfQorCitURVNUKHN0ZGxpYiwgcG9zaXhfbWVtYWxpZ24pIHsKKyAgdm9pZCogcDsKKworICBBU1NFUlRfRVEoMCwgcG9zaXhfbWVtYWxpZ24oJnAsIDUxMiwgMTI4KSk7CisgIEFTU0VSVF9FUSgwVSwgcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHApICUgNTEyKTsKKyAgZnJlZShwKTsKKworICAvLyBDYW4ndCBhbGlnbiB0byBhIG5vbi1wb3dlciBvZiAyLgorICBBU1NFUlRfRVEoRUlOVkFMLCBwb3NpeF9tZW1hbGlnbigmcCwgODEsIDEyOCkpOworfQorCitURVNUKHN0ZGxpYiwgcmVhbHBhdGhfX05VTExfZmlsZW5hbWUpIHsKKyAgZXJybm8gPSAwOworICBjaGFyKiBwID0gcmVhbHBhdGgoTlVMTCwgTlVMTCk7CisgIEFTU0VSVF9UUlVFKHAgPT0gTlVMTCk7CisgIEFTU0VSVF9FUShFSU5WQUwsIGVycm5vKTsKK30KKworVEVTVChzdGRsaWIsIHJlYWxwYXRoX19lbXB0eV9maWxlbmFtZSkgeworICBlcnJubyA9IDA7CisgIGNoYXIqIHAgPSByZWFscGF0aCgiIiwgTlVMTCk7CisgIEFTU0VSVF9UUlVFKHAgPT0gTlVMTCk7CisgIEFTU0VSVF9FUShFTk9FTlQsIGVycm5vKTsKK30KKworVEVTVChzdGRsaWIsIHJlYWxwYXRoX19FTk9FTlQpIHsKKyAgZXJybm8gPSAwOworICBjaGFyKiBwID0gcmVhbHBhdGgoIi90aGlzL2RpcmVjdG9yeS9wYXRoL2FsbW9zdC9jZXJ0YWlubHkvZG9lcy9ub3QvZXhpc3QiLCBOVUxMKTsKKyAgQVNTRVJUX1RSVUUocCA9PSBOVUxMKTsKKyAgQVNTRVJUX0VRKEVOT0VOVCwgZXJybm8pOworfQorCitURVNUKHN0ZGxpYiwgcmVhbHBhdGgpIHsKKyAgLy8gR2V0IHRoZSBuYW1lIG9mIHRoaXMgZXhlY3V0YWJsZS4KKyAgY2hhciBleGVjdXRhYmxlX3BhdGhbUEFUSF9NQVhdOworICBpbnQgcmMgPSByZWFkbGluaygiL3Byb2Mvc2VsZi9leGUiLCBleGVjdXRhYmxlX3BhdGgsIHNpemVvZihleGVjdXRhYmxlX3BhdGgpKTsKKyAgQVNTRVJUX05FKHJjLCAtMSk7CisgIGV4ZWN1dGFibGVfcGF0aFtyY10gPSAnXDAnOworCisgIGNoYXIgYnVmW1BBVEhfTUFYICsgMV07CisgIGNoYXIqIHAgPSByZWFscGF0aCgiL3Byb2Mvc2VsZi9leGUiLCBidWYpOworICBBU1NFUlRfU1RSRVEoZXhlY3V0YWJsZV9wYXRoLCBwKTsKKworICBwID0gcmVhbHBhdGgoIi9wcm9jL3NlbGYvZXhlIiwgTlVMTCk7CisgIEFTU0VSVF9TVFJFUShleGVjdXRhYmxlX3BhdGgsIHApOworICBmcmVlKHApOworfQorCitURVNUKHN0ZGxpYiwgcXNvcnQpIHsKKyAgc3RydWN0IHMgeworICAgIGNoYXIgbmFtZVsxNl07CisgICAgc3RhdGljIGludCBjb21wYXJhdG9yKGNvbnN0IHZvaWQqIGxocywgY29uc3Qgdm9pZCogcmhzKSB7CisgICAgICByZXR1cm4gc3RyY21wKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qgcyo+KGxocyktPm5hbWUsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qgcyo+KHJocyktPm5hbWUpOworICAgIH0KKyAgfTsKKyAgcyBlbnRyaWVzWzNdOworICBzdHJjcHkoZW50cmllc1swXS5uYW1lLCAiY2hhcmxpZSIpOworICBzdHJjcHkoZW50cmllc1sxXS5uYW1lLCAiYnJhdm8iKTsKKyAgc3RyY3B5KGVudHJpZXNbMl0ubmFtZSwgImFscGhhIik7CisKKyAgcXNvcnQoZW50cmllcywgMywgc2l6ZW9mKHMpLCBzOjpjb21wYXJhdG9yKTsKKyAgQVNTRVJUX1NUUkVRKCJhbHBoYSIsIGVudHJpZXNbMF0ubmFtZSk7CisgIEFTU0VSVF9TVFJFUSgiYnJhdm8iLCBlbnRyaWVzWzFdLm5hbWUpOworICBBU1NFUlRfU1RSRVEoImNoYXJsaWUiLCBlbnRyaWVzWzJdLm5hbWUpOworCisgIHFzb3J0KGVudHJpZXMsIDMsIHNpemVvZihzKSwgczo6Y29tcGFyYXRvcik7CisgIEFTU0VSVF9TVFJFUSgiYWxwaGEiLCBlbnRyaWVzWzBdLm5hbWUpOworICBBU1NFUlRfU1RSRVEoImJyYXZvIiwgZW50cmllc1sxXS5uYW1lKTsKKyAgQVNTRVJUX1NUUkVRKCJjaGFybGllIiwgZW50cmllc1syXS5uYW1lKTsKK30KZGlmZiAtLWdpdCBhL3Rlc3RzL3N0cmluZ19iZW5jaG1hcmsuY3BwIGIvdGVzdHMvc3RyaW5nX2JlbmNobWFyay5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTM2ZTI1MwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3N0cmluZ19iZW5jaG1hcmsuY3BwCkBAIC0wLDAgKzEsMTEyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2luY2x1ZGUgImJlbmNobWFyay5oIgorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNkZWZpbmUgS0IgMTAyNAorI2RlZmluZSBNQiAxMDI0KktCCisKKyNkZWZpbmUgQVRfQ09NTU9OX1NJWkVTIFwKKyAgICBBcmcoOCktPkFyZyg2NCktPkFyZyg1MTIpLT5BcmcoMSpLQiktPkFyZyg4KktCKS0+QXJnKDE2KktCKS0+QXJnKDMyKktCKS0+QXJnKDY0KktCKQorCisvLyBUT0RPOiB0ZXN0IHVuYWxpZ25lZCBvcGVyYXRpb24gdG9vPyAoY3VycmVudGx5IGV2ZXJ5dGhpbmcgd2lsbCBiZSA4LWJ5dGUgYWxpZ25lZCBieSBtYWxsb2MuKQorCitzdGF0aWMgdm9pZCBCTV9zdHJpbmdfbWVtY21wKGludCBpdGVycywgaW50IG5ieXRlcykgeworICBTdG9wQmVuY2htYXJrVGltaW5nKCk7CisgIGNoYXIqIHNyYyA9IG5ldyBjaGFyW25ieXRlc107IGNoYXIqIGRzdCA9IG5ldyBjaGFyW25ieXRlc107CisgIG1lbXNldChzcmMsICd4JywgbmJ5dGVzKTsKKyAgbWVtc2V0KGRzdCwgJ3gnLCBuYnl0ZXMpOworICBTdGFydEJlbmNobWFya1RpbWluZygpOworCisgIHZvbGF0aWxlIGludCBjIF9fYXR0cmlidXRlX18oKHVudXNlZCkpID0gMDsKKyAgZm9yIChpbnQgaSA9IDA7IGkgPCBpdGVyczsgKytpKSB7CisgICAgYyArPSBtZW1jbXAoZHN0LCBzcmMsIG5ieXRlcyk7CisgIH0KKworICBTdG9wQmVuY2htYXJrVGltaW5nKCk7CisgIFNldEJlbmNobWFya0J5dGVzUHJvY2Vzc2VkKGludDY0X3QoaXRlcnMpICogaW50NjRfdChuYnl0ZXMpKTsKKyAgZGVsZXRlW10gc3JjOworICBkZWxldGVbXSBkc3Q7Cit9CitCRU5DSE1BUksoQk1fc3RyaW5nX21lbWNtcCktPkFUX0NPTU1PTl9TSVpFUzsKKworc3RhdGljIHZvaWQgQk1fc3RyaW5nX21lbWNweShpbnQgaXRlcnMsIGludCBuYnl0ZXMpIHsKKyAgU3RvcEJlbmNobWFya1RpbWluZygpOworICBjaGFyKiBzcmMgPSBuZXcgY2hhcltuYnl0ZXNdOyBjaGFyKiBkc3QgPSBuZXcgY2hhcltuYnl0ZXNdOworICBtZW1zZXQoc3JjLCAneCcsIG5ieXRlcyk7CisgIFN0YXJ0QmVuY2htYXJrVGltaW5nKCk7CisKKyAgZm9yIChpbnQgaSA9IDA7IGkgPCBpdGVyczsgKytpKSB7CisgICAgbWVtY3B5KGRzdCwgc3JjLCBuYnl0ZXMpOworICB9CisKKyAgU3RvcEJlbmNobWFya1RpbWluZygpOworICBTZXRCZW5jaG1hcmtCeXRlc1Byb2Nlc3NlZChpbnQ2NF90KGl0ZXJzKSAqIGludDY0X3QobmJ5dGVzKSk7CisgIGRlbGV0ZVtdIHNyYzsKKyAgZGVsZXRlW10gZHN0OworfQorQkVOQ0hNQVJLKEJNX3N0cmluZ19tZW1jcHkpLT5BVF9DT01NT05fU0laRVM7CisKK3N0YXRpYyB2b2lkIEJNX3N0cmluZ19tZW1tb3ZlKGludCBpdGVycywgaW50IG5ieXRlcykgeworICBTdG9wQmVuY2htYXJrVGltaW5nKCk7CisgIGNoYXIqIGJ1ZiA9IG5ldyBjaGFyW25ieXRlcyArIDY0XTsKKyAgbWVtc2V0KGJ1ZiwgJ3gnLCBuYnl0ZXMgKyA2NCk7CisgIFN0YXJ0QmVuY2htYXJrVGltaW5nKCk7CisKKyAgZm9yIChpbnQgaSA9IDA7IGkgPCBpdGVyczsgKytpKSB7CisgICAgbWVtbW92ZShidWYsIGJ1ZiArIDEsIG5ieXRlcyk7IC8vIFdvcnN0LWNhc2Ugb3ZlcmxhcC4KKyAgfQorCisgIFN0b3BCZW5jaG1hcmtUaW1pbmcoKTsKKyAgU2V0QmVuY2htYXJrQnl0ZXNQcm9jZXNzZWQoaW50NjRfdChpdGVycykgKiBpbnQ2NF90KG5ieXRlcykpOworICBkZWxldGVbXSBidWY7Cit9CitCRU5DSE1BUksoQk1fc3RyaW5nX21lbW1vdmUpLT5BVF9DT01NT05fU0laRVM7CisKK3N0YXRpYyB2b2lkIEJNX3N0cmluZ19tZW1zZXQoaW50IGl0ZXJzLCBpbnQgbmJ5dGVzKSB7CisgIFN0b3BCZW5jaG1hcmtUaW1pbmcoKTsKKyAgY2hhciogZHN0ID0gbmV3IGNoYXJbbmJ5dGVzXTsKKyAgU3RhcnRCZW5jaG1hcmtUaW1pbmcoKTsKKworICBmb3IgKGludCBpID0gMDsgaSA8IGl0ZXJzOyArK2kpIHsKKyAgICBtZW1zZXQoZHN0LCAwLCBuYnl0ZXMpOworICB9CisKKyAgU3RvcEJlbmNobWFya1RpbWluZygpOworICBTZXRCZW5jaG1hcmtCeXRlc1Byb2Nlc3NlZChpbnQ2NF90KGl0ZXJzKSAqIGludDY0X3QobmJ5dGVzKSk7CisgIGRlbGV0ZVtdIGRzdDsKK30KK0JFTkNITUFSSyhCTV9zdHJpbmdfbWVtc2V0KS0+QVRfQ09NTU9OX1NJWkVTOworCitzdGF0aWMgdm9pZCBCTV9zdHJpbmdfc3RybGVuKGludCBpdGVycywgaW50IG5ieXRlcykgeworICBTdG9wQmVuY2htYXJrVGltaW5nKCk7CisgIGNoYXIqIHMgPSBuZXcgY2hhcltuYnl0ZXNdOworICBtZW1zZXQocywgJ3gnLCBuYnl0ZXMpOworICBzW25ieXRlcyAtIDFdID0gMDsKKyAgU3RhcnRCZW5jaG1hcmtUaW1pbmcoKTsKKworICB2b2xhdGlsZSBpbnQgYyBfX2F0dHJpYnV0ZV9fKCh1bnVzZWQpKSA9IDA7CisgIGZvciAoaW50IGkgPSAwOyBpIDwgaXRlcnM7ICsraSkgeworICAgIGMgKz0gc3RybGVuKHMpOworICB9CisKKyAgU3RvcEJlbmNobWFya1RpbWluZygpOworICBTZXRCZW5jaG1hcmtCeXRlc1Byb2Nlc3NlZChpbnQ2NF90KGl0ZXJzKSAqIGludDY0X3QobmJ5dGVzKSk7CisgIGRlbGV0ZVtdIHM7Cit9CitCRU5DSE1BUksoQk1fc3RyaW5nX3N0cmxlbiktPkFUX0NPTU1PTl9TSVpFUzsKZGlmZiAtLWdpdCBhL3Rlc3RzL3N0cmluZ190ZXN0LmNwcCBiL3Rlc3RzL3N0cmluZ190ZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZjQzZjVkCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvc3RyaW5nX3Rlc3QuY3BwCkBAIC0wLDAgKzEsODg3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisKKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPG1hdGguaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2RlZmluZSBLQiAxMDI0CisjZGVmaW5lIFNNQUxMIDEqS0IKKyNkZWZpbmUgTEFSR0UgNjQqS0IKKworc3RhdGljIGludCBzaWdudW0oaW50IGkpIHsKKyAgaWYgKGkgPCAwKSB7CisgICAgcmV0dXJuIC0xOworICB9IGVsc2UgaWYgKGkgPiAwKSB7CisgICAgcmV0dXJuIDE7CisgIH0KKyAgcmV0dXJuIDA7Cit9CisKK1RFU1Qoc3RyaW5nLCBzdHJlcnJvcikgeworICAvLyBWYWxpZC4KKyAgQVNTRVJUX1NUUkVRKCJTdWNjZXNzIiwgc3RyZXJyb3IoMCkpOworICBBU1NFUlRfU1RSRVEoIk9wZXJhdGlvbiBub3QgcGVybWl0dGVkIiwgc3RyZXJyb3IoMSkpOworCisgIC8vIEludmFsaWQuCisgIEFTU0VSVF9TVFJFUSgiVW5rbm93biBlcnJvciAtMSIsIHN0cmVycm9yKC0xKSk7CisgIEFTU0VSVF9TVFJFUSgiVW5rbm93biBlcnJvciAxMjM0Iiwgc3RyZXJyb3IoMTIzNCkpOworfQorCisjaWYgX19CSU9OSUNfXyAvLyBnbGliYydzIHN0cmVycm9yIGlzbid0IHRocmVhZCBzYWZlLCBvbmx5IGl0cyBzdHJzaWduYWwuCisKK3N0YXRpYyB2b2lkKiBDb25jdXJyZW50U3RyRXJyb3JGbih2b2lkKikgeworICBib29sIGVxdWFsID0gKHN0cmNtcCgiVW5rbm93biBlcnJvciAyMDAyIiwgc3RyZXJyb3IoMjAwMikpID09IDApOworICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oZXF1YWwpOworfQorCitURVNUKHN0cmluZywgc3RyZXJyb3JfY29uY3VycmVudCkgeworICBjb25zdCBjaGFyKiBzdHJlcnJvcjEwMDEgPSBzdHJlcnJvcigxMDAxKTsKKyAgQVNTRVJUX1NUUkVRKCJVbmtub3duIGVycm9yIDEwMDEiLCBzdHJlcnJvcjEwMDEpOworCisgIHB0aHJlYWRfdCB0OworICBBU1NFUlRfRVEoMCwgcHRocmVhZF9jcmVhdGUoJnQsIE5VTEwsIENvbmN1cnJlbnRTdHJFcnJvckZuLCBOVUxMKSk7CisgIHZvaWQqIHJlc3VsdDsKKyAgQVNTRVJUX0VRKDAsIHB0aHJlYWRfam9pbih0LCAmcmVzdWx0KSk7CisgIEFTU0VSVF9UUlVFKHN0YXRpY19jYXN0PGJvb2w+KHJlc3VsdCkpOworCisgIEFTU0VSVF9TVFJFUSgiVW5rbm93biBlcnJvciAxMDAxIiwgc3RyZXJyb3IxMDAxKTsKK30KKworI2VuZGlmCisKKyNpZiBfX0JJT05JQ19fIC8vIGdsaWJjJ3Mgc3RyZXJyb3JfciBkb2Vzbid0IGV2ZW4gaGF2ZSB0aGUgc2FtZSBzaWduYXR1cmUgYXMgdGhlIFBPU0lYIG9uZS4KK1RFU1Qoc3RyaW5nLCBzdHJlcnJvcl9yKSB7CisgIGNoYXIgYnVmWzI1Nl07CisKKyAgLy8gVmFsaWQuCisgIEFTU0VSVF9FUSgwLCBzdHJlcnJvcl9yKDAsIGJ1Ziwgc2l6ZW9mKGJ1ZikpKTsKKyAgQVNTRVJUX1NUUkVRKCJTdWNjZXNzIiwgYnVmKTsKKyAgQVNTRVJUX0VRKDAsIHN0cmVycm9yX3IoMSwgYnVmLCBzaXplb2YoYnVmKSkpOworICBBU1NFUlRfU1RSRVEoIk9wZXJhdGlvbiBub3QgcGVybWl0dGVkIiwgYnVmKTsKKworICAvLyBJbnZhbGlkLgorICBBU1NFUlRfRVEoMCwgc3RyZXJyb3JfcigtMSwgYnVmLCBzaXplb2YoYnVmKSkpOworICBBU1NFUlRfU1RSRVEoIlVua25vd24gZXJyb3IgLTEiLCBidWYpOworICBBU1NFUlRfRVEoMCwgc3RyZXJyb3JfcigxMjM0LCBidWYsIHNpemVvZihidWYpKSk7CisgIEFTU0VSVF9TVFJFUSgiVW5rbm93biBlcnJvciAxMjM0IiwgYnVmKTsKKworICAvLyBCdWZmZXIgdG9vIHNtYWxsLgorICBBU1NFUlRfRVEoLTEsIHN0cmVycm9yX3IoMCwgYnVmLCAyKSk7CisgIEFTU0VSVF9FUShFUkFOR0UsIGVycm5vKTsKK30KKyNlbmRpZgorCitURVNUKHN0cmluZywgc3Ryc2lnbmFsKSB7CisgIC8vIEEgcmVndWxhciBzaWduYWwuCisgIEFTU0VSVF9TVFJFUSgiSGFuZ3VwIiwgc3Ryc2lnbmFsKDEpKTsKKworICAvLyBBIHJlYWwtdGltZSBzaWduYWwuCisjaWZkZWYgX19HTElCQ19fIC8vIGdsaWJjIHJlc2VydmVzIHJlYWwtdGltZSBzaWduYWxzIGZvciBpbnRlcm5hbCB1c2UsIGFuZCBkb2Vzbid0IGNvdW50IHRob3NlLgorICBBU1NFUlRfU1RSRVEoIlJlYWwtdGltZSBzaWduYWwgMTQiLCBzdHJzaWduYWwoNDgpKTsKKyNlbHNlCisgIEFTU0VSVF9TVFJFUSgiUmVhbC10aW1lIHNpZ25hbCAxNiIsIHN0cnNpZ25hbCg0OCkpOworI2VuZGlmCisKKyAgLy8gRXJyb3JzLgorICBBU1NFUlRfU1RSRVEoIlVua25vd24gc2lnbmFsIC0xIiwgc3Ryc2lnbmFsKC0xKSk7IC8vIFRvbyBzbWFsbC4KKyAgQVNTRVJUX1NUUkVRKCJVbmtub3duIHNpZ25hbCAwIiwgc3Ryc2lnbmFsKDApKTsgLy8gU3RpbGwgdG9vIHNtYWxsLgorICBBU1NFUlRfU1RSRVEoIlVua25vd24gc2lnbmFsIDEyMzQiLCBzdHJzaWduYWwoMTIzNCkpOyAvLyBUb28gbGFyZ2UuCit9CisKK3N0YXRpYyB2b2lkKiBDb25jdXJyZW50U3RyU2lnbmFsRm4odm9pZCopIHsKKyAgYm9vbCBlcXVhbCA9IChzdHJjbXAoIlVua25vd24gc2lnbmFsIDIwMDIiLCBzdHJzaWduYWwoMjAwMikpID09IDApOworICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oZXF1YWwpOworfQorCitURVNUKHN0cmluZywgc3Ryc2lnbmFsX2NvbmN1cnJlbnQpIHsKKyAgY29uc3QgY2hhciogc3Ryc2lnbmFsMTAwMSA9IHN0cnNpZ25hbCgxMDAxKTsKKyAgQVNTRVJUX1NUUkVRKCJVbmtub3duIHNpZ25hbCAxMDAxIiwgc3Ryc2lnbmFsMTAwMSk7CisKKyAgcHRocmVhZF90IHQ7CisgIEFTU0VSVF9FUSgwLCBwdGhyZWFkX2NyZWF0ZSgmdCwgTlVMTCwgQ29uY3VycmVudFN0clNpZ25hbEZuLCBOVUxMKSk7CisgIHZvaWQqIHJlc3VsdDsKKyAgQVNTRVJUX0VRKDAsIHB0aHJlYWRfam9pbih0LCAmcmVzdWx0KSk7CisgIEFTU0VSVF9UUlVFKHN0YXRpY19jYXN0PGJvb2w+KHJlc3VsdCkpOworCisgIEFTU0VSVF9TVFJFUSgiVW5rbm93biBzaWduYWwgMTAwMSIsIHN0cnNpZ25hbDEwMDEpOworfQorCisvLyBUT0RPOiB3aGVyZSBkaWQgdGhlc2UgbnVtYmVycyBjb21lIGZyb20/CisjZGVmaW5lIFBPU19JVEVSICAgIDEwCisjZGVmaW5lIElURVIgICAgICAgIDUwMAorCisvLyBGb3IgZXZlcnkgbGVuZ3RoIHdlIHdhbnQgdG8gdGVzdCwgdmFyeSBhbmQgY2hhbmdlIGFsaWdubWVudAorLy8gb2YgYWxsb2NhdGVkIG1lbW9yeSwgZmlsbCBpdCB3aXRoIHNvbWUgdmFsdWVzLCBjYWxjdWxhdGUKKy8vIGV4cGVjdGVkIHJlc3VsdCBhbmQgdGhlbiBydW4gZnVuY3Rpb24gYW5kIGNvbXBhcmUgd2hhdCB3ZSBnb3QuCisvLyBUaGVzZSB0ZXN0cyBjb250cmlidXRlZCBieSBJbnRlbCBDb3Jwb3JhdGlvbi4KKy8vIFRPRE86IG1ha2UgdGhlc2UgdGVzdHMgbW9yZSBpbnRlbnRpb24tcmV2ZWFsaW5nIGFuZCBsZXNzIHJhbmRvbS4KK3RlbXBsYXRlPGNsYXNzIENoYXJhY3Rlcj4KK3N0cnVjdCBTdHJpbmdUZXN0U3RhdGUgeworICBTdHJpbmdUZXN0U3RhdGUoc2l6ZV90IE1BWF9MRU4pIDogTUFYX0xFTihNQVhfTEVOKSB7CisgICAgaW50IG1heF9hbGlnbm1lbnQgPSA2NDsKKworICAgIC8vIFRPRE86IGZpeCB0aGUgdGVzdHMgdG8gbm90IHNvbWV0aW1lcyB1c2UgdHdpY2UgdGhlaXIgc3BlY2lmaWVkICJNQVhfTEVOIi4KKyAgICBnbG9iX3B0ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8Q2hhcmFjdGVyKj4odmFsbG9jKDIgKiBzaXplb2YoQ2hhcmFjdGVyKSAqIE1BWF9MRU4gKyBtYXhfYWxpZ25tZW50KSk7CisgICAgZ2xvYl9wdHIxID0gcmVpbnRlcnByZXRfY2FzdDxDaGFyYWN0ZXIqPih2YWxsb2MoMiAqIHNpemVvZihDaGFyYWN0ZXIpICogTUFYX0xFTiArIG1heF9hbGlnbm1lbnQpKTsKKyAgICBnbG9iX3B0cjIgPSByZWludGVycHJldF9jYXN0PENoYXJhY3Rlcio+KHZhbGxvYygyICogc2l6ZW9mKENoYXJhY3RlcikgKiBNQVhfTEVOICsgbWF4X2FsaWdubWVudCkpOworCisgICAgSW5pdExlbkFycmF5KCk7CisKKyAgICBzcmFuZG9tKDEyMzQpOworICB9CisKKyAgflN0cmluZ1Rlc3RTdGF0ZSgpIHsKKyAgICBmcmVlKGdsb2JfcHRyKTsKKyAgICBmcmVlKGdsb2JfcHRyMSk7CisgICAgZnJlZShnbG9iX3B0cjIpOworICB9CisKKyAgdm9pZCBOZXdJdGVyYXRpb24oKSB7CisgICAgaW50IGFsaWdubWVudHNbXSA9IHsgMjQsIDMyLCAxNiwgNDgsIDEsIDIsIDMsIDAsIDUsIDExIH07CisgICAgaW50IHVzYWJsZV9hbGlnbm1lbnRzID0gMTA7CisgICAgaW50IGFsaWduMSA9IGFsaWdubWVudHNbcmFuZG9tKCkgJSAodXNhYmxlX2FsaWdubWVudHMgLSAxKV07CisgICAgaW50IGFsaWduMiA9IGFsaWdubWVudHNbcmFuZG9tKCkgJSAodXNhYmxlX2FsaWdubWVudHMgLSAxKV07CisKKyAgICBwdHIgPSBnbG9iX3B0ciArIGFsaWduMTsKKyAgICBwdHIxID0gZ2xvYl9wdHIxICsgYWxpZ24xOworICAgIHB0cjIgPSBnbG9iX3B0cjIgKyBhbGlnbjI7CisgIH0KKworICBjb25zdCBzaXplX3QgTUFYX0xFTjsKKyAgQ2hhcmFjdGVyICpwdHIsICpwdHIxLCAqcHRyMjsKKyAgc2l6ZV90IG47CisgIGludCBsZW5bSVRFUiArIDFdOworCisgcHJpdmF0ZToKKyAgQ2hhcmFjdGVyICpnbG9iX3B0ciwgKmdsb2JfcHRyMSwgKmdsb2JfcHRyMjsKKworICAvLyBDYWxjdWxhdGUgaW5wdXQgbGVuZ3RocyBhbmQgZmlsbCBzdGF0ZS5sZW4gd2l0aCB0aGVtLgorICAvLyBUZXN0IHNtYWxsIGxlbmd0aHMgd2l0aCBtb3JlIGRlbnNpdHkgdGhhbiBiaWcgb25lcy4gTWFudWFsbHkgcHVzaAorICAvLyBzbWFsbGVzdCAoMCkgYW5kIGJpZ2dlc3QgKE1BWF9MRU4pIGxlbmd0aHMuIEF2b2lkIHJlcGVhdHMuCisgIC8vIFJldHVybiBudW1iZXIgb2YgbGVuZ3RocyB0byB0ZXN0LgorICB2b2lkIEluaXRMZW5BcnJheSgpIHsKKyAgICBuID0gMDsKKyAgICBsZW5bbisrXSA9IDA7CisgICAgZm9yIChzaXplX3QgaSA9IDE7IGkgPCBJVEVSOyArK2kpIHsKKyAgICAgIGludCBsID0gKGludCkgZXhwKGxvZygoZG91YmxlKSBNQVhfTEVOKSAqIGkgLyBJVEVSKTsKKyAgICAgIGlmIChsICE9IGxlbltuIC0gMV0pIHsKKyAgICAgICAgbGVuW24rK10gPSBsOworICAgICAgfQorICAgIH0KKyAgICBsZW5bbisrXSA9IE1BWF9MRU47CisgIH0KK307CisKK1RFU1Qoc3RyaW5nLCBzdHJjYXQpIHsKKyAgU3RyaW5nVGVzdFN0YXRlPGNoYXI+IHN0YXRlKFNNQUxMKTsKKyAgZm9yIChzaXplX3QgaSA9IDE7IGkgPCBzdGF0ZS5uOyBpKyspIHsKKyAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IFBPU19JVEVSOyBqKyspIHsKKyAgICAgIHN0YXRlLk5ld0l0ZXJhdGlvbigpOworCisgICAgICBtZW1zZXQoc3RhdGUucHRyMiwgJ1wyJywgc3RhdGUuTUFYX0xFTik7CisgICAgICBzdGF0ZS5wdHIyW3N0YXRlLk1BWF9MRU4gLSAxXSA9ICdcMCc7CisgICAgICBtZW1jcHkoc3RhdGUucHRyLCBzdGF0ZS5wdHIyLCAyICogc3RhdGUuTUFYX0xFTik7CisKKyAgICAgIG1lbXNldChzdGF0ZS5wdHIxLCByYW5kb20oKSAmIDI1NSwgc3RhdGUubGVuW2ldKTsKKyAgICAgIHN0YXRlLnB0cjFbcmFuZG9tKCkgJSBzdGF0ZS5sZW5baV1dID0gJ1wwJzsKKyAgICAgIHN0YXRlLnB0cjFbc3RhdGUubGVuW2ldIC0gMV0gPSAnXDAnOworCisgICAgICBzdHJjcHkoc3RhdGUucHRyICsgc3RhdGUuTUFYX0xFTiAtIDEsIHN0YXRlLnB0cjEpOworCisgICAgICBFWFBFQ1RfVFJVRShzdHJjYXQoc3RhdGUucHRyMiwgc3RhdGUucHRyMSkgPT0gc3RhdGUucHRyMik7CisgICAgICBFWFBFQ1RfVFJVRShtZW1jbXAoc3RhdGUucHRyLCBzdGF0ZS5wdHIyLCAyICogc3RhdGUuTUFYX0xFTikgPT0gMCk7CisgICAgfQorICB9Cit9CisKKy8vIG9uZSBieXRlIHRhcmdldCB3aXRoICJcMCIgc291cmNlCitURVNUKHN0cmluZywgc3RyY3B5MikgeworICBjaGFyIGJ1ZlsxXTsKKyAgY2hhciogb3JpZyA9IHN0cmR1cCgiIik7CisgIHN0cmNweShidWYsIG9yaWcpOworICBBU1NFUlRfRVEoJ1wwJywgYnVmWzBdKTsKKyAgZnJlZShvcmlnKTsKK30KKworLy8gbXVsdGlieXRlIHRhcmdldCB3aGVyZSB3ZSB1bmRlciBmaWxsIHRhcmdldAorVEVTVChzdHJpbmcsIHN0cmNweTMpIHsKKyAgY2hhciBidWZbMTBdOworICBjaGFyKiBvcmlnID0gc3RyZHVwKCIxMjM0NSIpOworICBtZW1zZXQoYnVmLCAnQScsIHNpemVvZihidWYpKTsKKyAgc3RyY3B5KGJ1Ziwgb3JpZyk7CisgIEFTU0VSVF9FUSgnMScsICBidWZbMF0pOworICBBU1NFUlRfRVEoJzInLCAgYnVmWzFdKTsKKyAgQVNTRVJUX0VRKCczJywgIGJ1ZlsyXSk7CisgIEFTU0VSVF9FUSgnNCcsICBidWZbM10pOworICBBU1NFUlRfRVEoJzUnLCAgYnVmWzRdKTsKKyAgQVNTRVJUX0VRKCdcMCcsIGJ1Zls1XSk7CisgIEFTU0VSVF9FUSgnQScsICBidWZbNl0pOworICBBU1NFUlRfRVEoJ0EnLCAgYnVmWzddKTsKKyAgQVNTRVJUX0VRKCdBJywgIGJ1Zls4XSk7CisgIEFTU0VSVF9FUSgnQScsICBidWZbOV0pOworICBmcmVlKG9yaWcpOworfQorCisvLyBtdWx0aWJ5dGUgdGFyZ2V0IHdoZXJlIHdlIGZpbGwgdGFyZ2V0IGV4YWN0bHkKK1RFU1Qoc3RyaW5nLCBzdHJjcHk0KSB7CisgIGNoYXIgYnVmWzEwXTsKKyAgY2hhciogb3JpZyA9IHN0cmR1cCgiMTIzNDU2Nzg5Iik7CisgIG1lbXNldChidWYsICdBJywgc2l6ZW9mKGJ1ZikpOworICBzdHJjcHkoYnVmLCBvcmlnKTsKKyAgQVNTRVJUX0VRKCcxJywgIGJ1ZlswXSk7CisgIEFTU0VSVF9FUSgnMicsICBidWZbMV0pOworICBBU1NFUlRfRVEoJzMnLCAgYnVmWzJdKTsKKyAgQVNTRVJUX0VRKCc0JywgIGJ1ZlszXSk7CisgIEFTU0VSVF9FUSgnNScsICBidWZbNF0pOworICBBU1NFUlRfRVEoJzYnLCAgYnVmWzVdKTsKKyAgQVNTRVJUX0VRKCc3JywgIGJ1Zls2XSk7CisgIEFTU0VSVF9FUSgnOCcsICBidWZbN10pOworICBBU1NFUlRfRVEoJzknLCAgYnVmWzhdKTsKKyAgQVNTRVJUX0VRKCdcMCcsIGJ1Zls5XSk7CisgIGZyZWUob3JpZyk7Cit9CisKK1RFU1Qoc3RyaW5nLCBzdHJjYXQyKSB7CisgIGNoYXIgYnVmWzEwXTsKKyAgbWVtc2V0KGJ1ZiwgJ0EnLCBzaXplb2YoYnVmKSk7CisgIGJ1ZlswXSA9ICdhJzsKKyAgYnVmWzFdID0gJ1wwJzsKKyAgY2hhciogcmVzID0gc3RyY2F0KGJ1ZiwgIjAxMjM0Iik7CisgIEFTU0VSVF9FUShidWYsIHJlcyk7CisgIEFTU0VSVF9FUSgnYScsICBidWZbMF0pOworICBBU1NFUlRfRVEoJzAnLCAgYnVmWzFdKTsKKyAgQVNTRVJUX0VRKCcxJywgIGJ1ZlsyXSk7CisgIEFTU0VSVF9FUSgnMicsICBidWZbM10pOworICBBU1NFUlRfRVEoJzMnLCAgYnVmWzRdKTsKKyAgQVNTRVJUX0VRKCc0JywgIGJ1Zls1XSk7CisgIEFTU0VSVF9FUSgnXDAnLCBidWZbNl0pOworICBBU1NFUlRfRVEoJ0EnLCAgYnVmWzddKTsKKyAgQVNTRVJUX0VRKCdBJywgIGJ1Zls4XSk7CisgIEFTU0VSVF9FUSgnQScsICBidWZbOV0pOworfQorCitURVNUKHN0cmluZywgc3RyY2F0MykgeworICBjaGFyIGJ1ZlsxMF07CisgIG1lbXNldChidWYsICdBJywgc2l6ZW9mKGJ1ZikpOworICBidWZbMF0gPSAnYSc7CisgIGJ1ZlsxXSA9ICdcMCc7CisgIGNoYXIqIHJlcyA9IHN0cmNhdChidWYsICIwMTIzNDU2NyIpOworICBBU1NFUlRfRVEoYnVmLCByZXMpOworICBBU1NFUlRfRVEoJ2EnLCAgYnVmWzBdKTsKKyAgQVNTRVJUX0VRKCcwJywgIGJ1ZlsxXSk7CisgIEFTU0VSVF9FUSgnMScsICBidWZbMl0pOworICBBU1NFUlRfRVEoJzInLCAgYnVmWzNdKTsKKyAgQVNTRVJUX0VRKCczJywgIGJ1Zls0XSk7CisgIEFTU0VSVF9FUSgnNCcsICBidWZbNV0pOworICBBU1NFUlRfRVEoJzUnLCBidWZbNl0pOworICBBU1NFUlRfRVEoJzYnLCAgYnVmWzddKTsKKyAgQVNTRVJUX0VRKCc3JywgIGJ1Zls4XSk7CisgIEFTU0VSVF9FUSgnXDAnLCAgYnVmWzldKTsKK30KKworVEVTVChzdHJpbmcsIHN0cm5jYXQyKSB7CisgIGNoYXIgYnVmWzEwXTsKKyAgbWVtc2V0KGJ1ZiwgJ0EnLCBzaXplb2YoYnVmKSk7CisgIGJ1ZlswXSA9ICdhJzsKKyAgYnVmWzFdID0gJ1wwJzsKKyAgY2hhciogcmVzID0gc3RybmNhdChidWYsICIwMTIzNCIsIHNpemVvZihidWYpIC0gc3RybGVuKGJ1ZikgLSAxKTsKKyAgQVNTRVJUX0VRKGJ1ZiwgcmVzKTsKKyAgQVNTRVJUX0VRKCdhJywgIGJ1ZlswXSk7CisgIEFTU0VSVF9FUSgnMCcsICBidWZbMV0pOworICBBU1NFUlRfRVEoJzEnLCAgYnVmWzJdKTsKKyAgQVNTRVJUX0VRKCcyJywgIGJ1ZlszXSk7CisgIEFTU0VSVF9FUSgnMycsICBidWZbNF0pOworICBBU1NFUlRfRVEoJzQnLCAgYnVmWzVdKTsKKyAgQVNTRVJUX0VRKCdcMCcsIGJ1Zls2XSk7CisgIEFTU0VSVF9FUSgnQScsICBidWZbN10pOworICBBU1NFUlRfRVEoJ0EnLCAgYnVmWzhdKTsKKyAgQVNTRVJUX0VRKCdBJywgIGJ1Zls5XSk7Cit9CisKK1RFU1Qoc3RyaW5nLCBzdHJuY2F0MykgeworICBjaGFyIGJ1ZlsxMF07CisgIG1lbXNldChidWYsICdBJywgc2l6ZW9mKGJ1ZikpOworICBidWZbMF0gPSAnYSc7CisgIGJ1ZlsxXSA9ICdcMCc7CisgIGNoYXIqIHJlcyA9IHN0cm5jYXQoYnVmLCAiMDEyMzQ1Njc4OSIsIDUpOworICBBU1NFUlRfRVEoYnVmLCByZXMpOworICBBU1NFUlRfRVEoJ2EnLCAgYnVmWzBdKTsKKyAgQVNTRVJUX0VRKCcwJywgIGJ1ZlsxXSk7CisgIEFTU0VSVF9FUSgnMScsICBidWZbMl0pOworICBBU1NFUlRfRVEoJzInLCAgYnVmWzNdKTsKKyAgQVNTRVJUX0VRKCczJywgIGJ1Zls0XSk7CisgIEFTU0VSVF9FUSgnNCcsICBidWZbNV0pOworICBBU1NFUlRfRVEoJ1wwJywgYnVmWzZdKTsKKyAgQVNTRVJUX0VRKCdBJywgIGJ1Zls3XSk7CisgIEFTU0VSVF9FUSgnQScsICBidWZbOF0pOworICBBU1NFUlRfRVEoJ0EnLCAgYnVmWzldKTsKK30KKworVEVTVChzdHJpbmcsIHN0cm5jYXQ0KSB7CisgIGNoYXIgYnVmWzEwXTsKKyAgbWVtc2V0KGJ1ZiwgJ0EnLCBzaXplb2YoYnVmKSk7CisgIGJ1ZlswXSA9ICdhJzsKKyAgYnVmWzFdID0gJ1wwJzsKKyAgY2hhciogcmVzID0gc3RybmNhdChidWYsICIwMTIzNDU2NyIsIDgpOworICBBU1NFUlRfRVEoYnVmLCByZXMpOworICBBU1NFUlRfRVEoJ2EnLCAgYnVmWzBdKTsKKyAgQVNTRVJUX0VRKCcwJywgIGJ1ZlsxXSk7CisgIEFTU0VSVF9FUSgnMScsICBidWZbMl0pOworICBBU1NFUlRfRVEoJzInLCAgYnVmWzNdKTsKKyAgQVNTRVJUX0VRKCczJywgIGJ1Zls0XSk7CisgIEFTU0VSVF9FUSgnNCcsICBidWZbNV0pOworICBBU1NFUlRfRVEoJzUnLCBidWZbNl0pOworICBBU1NFUlRfRVEoJzYnLCAgYnVmWzddKTsKKyAgQVNTRVJUX0VRKCc3JywgIGJ1Zls4XSk7CisgIEFTU0VSVF9FUSgnXDAnLCAgYnVmWzldKTsKK30KKworVEVTVChzdHJpbmcsIHN0cm5jYXQ1KSB7CisgIGNoYXIgYnVmWzEwXTsKKyAgbWVtc2V0KGJ1ZiwgJ0EnLCBzaXplb2YoYnVmKSk7CisgIGJ1ZlswXSA9ICdhJzsKKyAgYnVmWzFdID0gJ1wwJzsKKyAgY2hhciogcmVzID0gc3RybmNhdChidWYsICIwMTIzNDU2NyIsIDkpOworICBBU1NFUlRfRVEoYnVmLCByZXMpOworICBBU1NFUlRfRVEoJ2EnLCAgYnVmWzBdKTsKKyAgQVNTRVJUX0VRKCcwJywgIGJ1ZlsxXSk7CisgIEFTU0VSVF9FUSgnMScsICBidWZbMl0pOworICBBU1NFUlRfRVEoJzInLCAgYnVmWzNdKTsKKyAgQVNTRVJUX0VRKCczJywgIGJ1Zls0XSk7CisgIEFTU0VSVF9FUSgnNCcsICBidWZbNV0pOworICBBU1NFUlRfRVEoJzUnLCBidWZbNl0pOworICBBU1NFUlRfRVEoJzYnLCAgYnVmWzddKTsKKyAgQVNTRVJUX0VRKCc3JywgIGJ1Zls4XSk7CisgIEFTU0VSVF9FUSgnXDAnLCAgYnVmWzldKTsKK30KKworVEVTVChzdHJpbmcsIHN0cmNocl93aXRoXzApIHsKKyAgY2hhciBidWZbMTBdOworICBjb25zdCBjaGFyKiBzID0gIjAxMjM0IjsKKyAgbWVtY3B5KGJ1Ziwgcywgc3RybGVuKHMpICsgMSk7CisgIEVYUEVDVF9UUlVFKHN0cmNocihidWYsICdcMCcpID09IChidWYgKyBzdHJsZW4ocykpKTsKK30KKworVEVTVChzdHJpbmcsIHN0cmNocikgeworICBpbnQgc2Vla19jaGFyID0gcmFuZG9tKCkgJiAyNTU7CisKKyAgU3RyaW5nVGVzdFN0YXRlPGNoYXI+IHN0YXRlKFNNQUxMKTsKKyAgZm9yIChzaXplX3QgaSA9IDE7IGkgPCBzdGF0ZS5uOyBpKyspIHsKKyAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IFBPU19JVEVSOyBqKyspIHsKKyAgICAgIHN0YXRlLk5ld0l0ZXJhdGlvbigpOworCisgICAgICBpZiAofnNlZWtfY2hhciA+IDApIHsKKyAgICAgICAgbWVtc2V0KHN0YXRlLnB0cjEsIH5zZWVrX2NoYXIsIHN0YXRlLmxlbltpXSk7CisgICAgICB9IGVsc2UgeworICAgICAgICBtZW1zZXQoc3RhdGUucHRyMSwgJ1wxJywgc3RhdGUubGVuW2ldKTsKKyAgICAgIH0KKyAgICAgIHN0YXRlLnB0cjFbc3RhdGUubGVuW2ldIC0gMV0gPSAnXDAnOworCisgICAgICBpbnQgcG9zID0gcmFuZG9tKCkgJSBzdGF0ZS5NQVhfTEVOOworICAgICAgY2hhciogZXhwZWN0ZWQ7CisgICAgICBpZiAocG9zID49IHN0YXRlLmxlbltpXSAtIDEpIHsKKyAgICAgICAgaWYgKHNlZWtfY2hhciA9PSAwKSB7CisgICAgICAgICAgZXhwZWN0ZWQgPSBzdGF0ZS5wdHIxICsgc3RhdGUubGVuW2ldIC0gMTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBleHBlY3RlZCA9IE5VTEw7CisgICAgICAgIH0KKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHN0YXRlLnB0cjFbcG9zXSA9IHNlZWtfY2hhcjsKKyAgICAgICAgZXhwZWN0ZWQgPSBzdGF0ZS5wdHIxICsgcG9zOworICAgICAgfQorCisgICAgICBBU1NFUlRfVFJVRShzdHJjaHIoc3RhdGUucHRyMSwgc2Vla19jaGFyKSA9PSBleHBlY3RlZCk7CisgICAgfQorICB9Cit9CisKK1RFU1Qoc3RyaW5nLCBzdHJjbXApIHsKKyAgU3RyaW5nVGVzdFN0YXRlPGNoYXI+IHN0YXRlKFNNQUxMKTsKKyAgZm9yIChzaXplX3QgaSA9IDE7IGkgPCBzdGF0ZS5uOyBpKyspIHsKKyAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IFBPU19JVEVSOyBqKyspIHsKKyAgICAgIHN0YXRlLk5ld0l0ZXJhdGlvbigpOworCisgICAgICBtZW1zZXQoc3RhdGUucHRyMSwgJ3YnLCBzdGF0ZS5NQVhfTEVOKTsKKyAgICAgIG1lbXNldChzdGF0ZS5wdHIyLCAnbicsIHN0YXRlLk1BWF9MRU4pOworICAgICAgc3RhdGUucHRyMVtzdGF0ZS5sZW5baV0gLSAxXSA9ICdcMCc7CisgICAgICBzdGF0ZS5wdHIyW3N0YXRlLmxlbltpXSAtIDFdID0gJ1wwJzsKKworICAgICAgaW50IHBvcyA9IDEgKyAocmFuZG9tKCkgJSAoc3RhdGUuTUFYX0xFTiAtIDEpKTsKKyAgICAgIGludCBhY3R1YWw7CisgICAgICBpbnQgZXhwZWN0ZWQ7CisgICAgICBpZiAocG9zID49IHN0YXRlLmxlbltpXSAtIDEpIHsKKyAgICAgICAgbWVtY3B5KHN0YXRlLnB0cjEsIHN0YXRlLnB0cjIsIHN0YXRlLmxlbltpXSk7CisgICAgICAgIGV4cGVjdGVkID0gMDsKKyAgICAgICAgYWN0dWFsID0gc3RyY21wKHN0YXRlLnB0cjEsIHN0YXRlLnB0cjIpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgbWVtY3B5KHN0YXRlLnB0cjEsIHN0YXRlLnB0cjIsIHBvcyk7CisgICAgICAgIGlmIChzdGF0ZS5wdHIxW3Bvc10gPiBzdGF0ZS5wdHIyW3Bvc10pIHsKKyAgICAgICAgICBleHBlY3RlZCA9IDE7CisgICAgICAgIH0gZWxzZSBpZiAoc3RhdGUucHRyMVtwb3NdID09IHN0YXRlLnB0cjJbcG9zXSkgeworICAgICAgICAgIHN0YXRlLnB0cjFbcG9zICsgMV0gPSAnXDAnOworICAgICAgICAgIHN0YXRlLnB0cjJbcG9zICsgMV0gPSAnXDAnOworICAgICAgICAgIGV4cGVjdGVkID0gMDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBleHBlY3RlZCA9IC0xOworICAgICAgICB9CisgICAgICAgIGFjdHVhbCA9IHN0cmNtcChzdGF0ZS5wdHIxLCBzdGF0ZS5wdHIyKTsKKyAgICAgIH0KKworICAgICAgQVNTRVJUX0VRKGV4cGVjdGVkLCBzaWdudW0oYWN0dWFsKSk7CisgICAgfQorICB9Cit9CisKK1RFU1Qoc3RyaW5nLCBzdHJjcHkpIHsKKyAgU3RyaW5nVGVzdFN0YXRlPGNoYXI+IHN0YXRlKFNNQUxMKTsKKyAgZm9yIChzaXplX3QgaiA9IDA7IGogPCBQT1NfSVRFUjsgaisrKSB7CisgICAgc3RhdGUuTmV3SXRlcmF0aW9uKCk7CisKKyAgICBzaXplX3QgcG9zID0gcmFuZG9tKCkgJSBzdGF0ZS5NQVhfTEVOOworCisgICAgbWVtc2V0KHN0YXRlLnB0cjEsICdcMicsIHBvcyk7CisgICAgc3RhdGUucHRyMVtwb3NdID0gJ1wwJzsKKyAgICBzdGF0ZS5wdHIxW3N0YXRlLk1BWF9MRU4gLSAxXSA9ICdcMCc7CisKKyAgICBtZW1jcHkoc3RhdGUucHRyLCBzdGF0ZS5wdHIxLCBzdGF0ZS5NQVhfTEVOKTsKKworICAgIG1lbXNldChzdGF0ZS5wdHIyLCAnXDEnLCBzdGF0ZS5NQVhfTEVOKTsKKyAgICBzdGF0ZS5wdHIyW3N0YXRlLk1BWF9MRU4gLSAxXSA9ICdcMCc7CisKKyAgICBtZW1zZXQoc3RhdGUucHRyICsgc3RhdGUuTUFYX0xFTiwgJ1wxJywgc3RhdGUuTUFYX0xFTik7CisgICAgbWVtY3B5KHN0YXRlLnB0ciArIHN0YXRlLk1BWF9MRU4sIHN0YXRlLnB0cjEsIHBvcyArIDEpOworICAgIHN0YXRlLnB0clsyICogc3RhdGUuTUFYX0xFTiAtIDFdID0gJ1wwJzsKKworICAgIEFTU0VSVF9UUlVFKHN0cmNweShzdGF0ZS5wdHIyLCBzdGF0ZS5wdHIxKSA9PSBzdGF0ZS5wdHIyKTsKKyAgICBBU1NFUlRfRkFMU0UoKG1lbWNtcChzdGF0ZS5wdHIxLCBzdGF0ZS5wdHIsIHN0YXRlLk1BWF9MRU4pKSAhPSAwIHx8CisgICAgICAgICAgICAgICAgIChtZW1jbXAoc3RhdGUucHRyMiwgc3RhdGUucHRyICsgc3RhdGUuTUFYX0xFTiwgc3RhdGUuTUFYX0xFTikgIT0gMCkpOworICB9Cit9CisKKworI2lmIF9fQklPTklDX18KK1RFU1Qoc3RyaW5nLCBzdHJsY2F0KSB7CisgIFN0cmluZ1Rlc3RTdGF0ZTxjaGFyPiBzdGF0ZShTTUFMTCk7CisgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc3RhdGUubjsgaSsrKSB7CisgICAgZm9yIChzaXplX3QgaiA9IDA7IGogPCBQT1NfSVRFUjsgaisrKSB7CisgICAgICBzdGF0ZS5OZXdJdGVyYXRpb24oKTsKKworICAgICAgbWVtc2V0KHN0YXRlLnB0cjIsICdcMicsIHN0YXRlLk1BWF9MRU4gKyBzdGF0ZS5sZW5baV0pOworICAgICAgc3RhdGUucHRyMltzdGF0ZS5NQVhfTEVOIC0gMV0gPSAnXDAnOworICAgICAgbWVtY3B5KHN0YXRlLnB0ciwgc3RhdGUucHRyMiwgc3RhdGUuTUFYX0xFTiArIHN0YXRlLmxlbltpXSk7CisKKyAgICAgIGludCBwb3MgPSByYW5kb20oKSAlIHN0YXRlLk1BWF9MRU47CisgICAgICBtZW1zZXQoc3RhdGUucHRyMSwgJ1wzJywgcG9zKTsKKyAgICAgIHN0YXRlLnB0cjFbcG9zXSA9ICdcMCc7CisgICAgICBpZiAocG9zIDwgc3RhdGUubGVuW2ldKSB7CisgICAgICAgIG1lbWNweShzdGF0ZS5wdHIgKyBzdGF0ZS5NQVhfTEVOIC0gMSwgc3RhdGUucHRyMSwgcG9zICsgMSk7CisgICAgICB9IGVsc2UgeworICAgICAgICBtZW1jcHkoc3RhdGUucHRyICsgc3RhdGUuTUFYX0xFTiAtIDEsIHN0YXRlLnB0cjEsIHN0YXRlLmxlbltpXSk7CisgICAgICAgIHN0YXRlLnB0cltzdGF0ZS5NQVhfTEVOICsgc3RhdGUubGVuW2ldIC0gMV0gPSAnXDAnOworICAgICAgfQorCisgICAgICBzdHJsY2F0KHN0YXRlLnB0cjIsIHN0YXRlLnB0cjEsIHN0YXRlLk1BWF9MRU4gKyBzdGF0ZS5sZW5baV0pOworCisgICAgICBBU1NFUlRfVFJVRShtZW1jbXAoc3RhdGUucHRyLCBzdGF0ZS5wdHIyLCBzdGF0ZS5NQVhfTEVOICsgc3RhdGUubGVuW2ldKSA9PSAwKTsKKyAgICB9CisgIH0KK30KKyNlbmRpZgorCisjaWYgX19CSU9OSUNfXworVEVTVChzdHJpbmcsIHN0cmxjcHkpIHsKKyAgU3RyaW5nVGVzdFN0YXRlPGNoYXI+IHN0YXRlKFNNQUxMKTsKKyAgZm9yIChzaXplX3QgaiA9IDA7IGogPCBQT1NfSVRFUjsgaisrKSB7CisgICAgc3RhdGUuTmV3SXRlcmF0aW9uKCk7CisKKyAgICBpbnQgcmFuZCA9IHJhbmRvbSgpICYgMjU1OworICAgIGlmIChyYW5kIDwgMSkgeworICAgICAgcmFuZCA9IDE7CisgICAgfQorICAgIG1lbXNldChzdGF0ZS5wdHIxLCByYW5kLCBzdGF0ZS5NQVhfTEVOKTsKKworICAgIHNpemVfdCBwb3MgPSByYW5kb20oKSAlIHN0YXRlLk1BWF9MRU47CisgICAgaWYgKHBvcyA8IHN0YXRlLk1BWF9MRU4pIHsKKyAgICAgIHN0YXRlLnB0cjFbcG9zXSA9ICdcMCc7CisgICAgfQorICAgIG1lbWNweShzdGF0ZS5wdHIsIHN0YXRlLnB0cjEsIHN0YXRlLk1BWF9MRU4pOworCisgICAgbWVtc2V0KHN0YXRlLnB0cjIsIHJhbmRvbSgpICYgMjU1LCBzdGF0ZS5NQVhfTEVOKTsKKyAgICBtZW1jcHkoc3RhdGUucHRyICsgc3RhdGUuTUFYX0xFTiwgc3RhdGUucHRyMiwgc3RhdGUuTUFYX0xFTik7CisKKyAgICBpZiAocG9zID4gc3RhdGUuTUFYX0xFTiAtIDEpIHsKKyAgICAgIG1lbWNweShzdGF0ZS5wdHIgKyBzdGF0ZS5NQVhfTEVOLCBzdGF0ZS5wdHIxLCBzdGF0ZS5NQVhfTEVOKTsKKyAgICAgIHN0YXRlLnB0clsyICogc3RhdGUuTUFYX0xFTiAtIDFdID0gJ1wwJzsKKyAgICB9IGVsc2UgeworICAgICAgbWVtY3B5KHN0YXRlLnB0ciArIHN0YXRlLk1BWF9MRU4sIHN0YXRlLnB0cjEsIHBvcyArIDEpOworICAgIH0KKworICAgIEFTU0VSVF9FUShzdHJsY3B5KHN0YXRlLnB0cjIsIHN0YXRlLnB0cjEsIHN0YXRlLk1BWF9MRU4pLCBzdHJsZW4oc3RhdGUucHRyMSkpOworICAgIEFTU0VSVF9GQUxTRSgobWVtY21wKHN0YXRlLnB0cjEsIHN0YXRlLnB0ciwgc3RhdGUuTUFYX0xFTikgIT0gMCkgfHwKKyAgICAgICAgICAgICAgICAgKG1lbWNtcChzdGF0ZS5wdHIyLCBzdGF0ZS5wdHIgKyBzdGF0ZS5NQVhfTEVOLCBzdGF0ZS5NQVhfTEVOKSAhPSAwKSk7CisgIH0KK30KKyNlbmRpZgorCitURVNUKHN0cmluZywgc3RybmNhdCkgeworICBTdHJpbmdUZXN0U3RhdGU8Y2hhcj4gc3RhdGUoU01BTEwpOworICBmb3IgKHNpemVfdCBpID0gMTsgaSA8IHN0YXRlLm47IGkrKykgeworICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwgUE9TX0lURVI7IGorKykgeworICAgICAgc3RhdGUuTmV3SXRlcmF0aW9uKCk7CisKKyAgICAgIG1lbXNldChzdGF0ZS5wdHIyLCAnXDInLCBzdGF0ZS5NQVhfTEVOKTsKKyAgICAgIHN0YXRlLnB0cjJbc3RhdGUuTUFYX0xFTiAtIDFdID0gJ1wwJzsKKyAgICAgIG1lbWNweShzdGF0ZS5wdHIsIHN0YXRlLnB0cjIsIDIgKiBzdGF0ZS5NQVhfTEVOKTsKKworICAgICAgbWVtc2V0KHN0YXRlLnB0cjEsIHJhbmRvbSgpICYgMjU1LCBzdGF0ZS5sZW5baV0pOworICAgICAgc3RhdGUucHRyMVtyYW5kb20oKSAlIHN0YXRlLmxlbltpXV0gPSAnXDAnOworICAgICAgc3RhdGUucHRyMVtzdGF0ZS5sZW5baV0gLSAxXSA9ICdcMCc7CisKKyAgICAgIHNpemVfdCBwb3MgPSBzdHJsZW4oc3RhdGUucHRyMSk7CisKKyAgICAgIHNpemVfdCBhY3R1YWwgPSByYW5kb20oKSAlIHN0YXRlLmxlbltpXTsKKyAgICAgIHN0cm5jcHkoc3RhdGUucHRyICsgc3RhdGUuTUFYX0xFTiAtIDEsIHN0YXRlLnB0cjEsIHN0ZDo6bWluKGFjdHVhbCwgcG9zKSk7CisgICAgICBzdGF0ZS5wdHJbc3RhdGUuTUFYX0xFTiArIHN0ZDo6bWluKGFjdHVhbCwgcG9zKSAtIDFdID0gJ1wwJzsKKworICAgICAgQVNTRVJUX1RSVUUoc3RybmNhdChzdGF0ZS5wdHIyLCBzdGF0ZS5wdHIxLCBhY3R1YWwpID09IHN0YXRlLnB0cjIpOworICAgICAgQVNTRVJUX0VRKG1lbWNtcChzdGF0ZS5wdHIsIHN0YXRlLnB0cjIsIDIgKiBzdGF0ZS5NQVhfTEVOKSwgMCk7CisgICAgfQorICB9Cit9CisKK1RFU1Qoc3RyaW5nLCBzdHJuY21wKSB7CisgIFN0cmluZ1Rlc3RTdGF0ZTxjaGFyPiBzdGF0ZShTTUFMTCk7CisgIGZvciAoc2l6ZV90IGkgPSAxOyBpIDwgc3RhdGUubjsgaSsrKSB7CisgICAgZm9yIChzaXplX3QgaiA9IDA7IGogPCBQT1NfSVRFUjsgaisrKSB7CisgICAgICBzdGF0ZS5OZXdJdGVyYXRpb24oKTsKKworICAgICAgbWVtc2V0KHN0YXRlLnB0cjEsICd2Jywgc3RhdGUuTUFYX0xFTik7CisgICAgICBtZW1zZXQoc3RhdGUucHRyMiwgJ24nLCBzdGF0ZS5NQVhfTEVOKTsKKyAgICAgIHN0YXRlLnB0cjFbc3RhdGUubGVuW2ldIC0gMV0gPSAnXDAnOworICAgICAgc3RhdGUucHRyMltzdGF0ZS5sZW5baV0gLSAxXSA9ICdcMCc7CisKKyAgICAgIGludCBwb3MgPSAxICsgKHJhbmRvbSgpICUgKHN0YXRlLk1BWF9MRU4gLSAxKSk7CisgICAgICBpbnQgYWN0dWFsOworICAgICAgaW50IGV4cGVjdGVkOworICAgICAgaWYgKHBvcyA+PSBzdGF0ZS5sZW5baV0gLSAxKSB7CisgICAgICAgIG1lbWNweShzdGF0ZS5wdHIxLCBzdGF0ZS5wdHIyLCBzdGF0ZS5sZW5baV0pOworICAgICAgICBleHBlY3RlZCA9IDA7CisgICAgICAgIGFjdHVhbCA9IHN0cm5jbXAoc3RhdGUucHRyMSwgc3RhdGUucHRyMiwgc3RhdGUubGVuW2ldKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIG1lbWNweShzdGF0ZS5wdHIxLCBzdGF0ZS5wdHIyLCBwb3MpOworICAgICAgICBpZiAoc3RhdGUucHRyMVtwb3NdID4gc3RhdGUucHRyMltwb3NdKSB7CisgICAgICAgICAgZXhwZWN0ZWQgPSAxOworICAgICAgICB9IGVsc2UgaWYgKHN0YXRlLnB0cjFbcG9zXSA9PSBzdGF0ZS5wdHIyW3Bvc10pIHsKKyAgICAgICAgICBzdGF0ZS5wdHIxW3BvcyArIDFdID0gJ1wwJzsKKyAgICAgICAgICBzdGF0ZS5wdHIyW3BvcyArIDFdID0gJ1wwJzsKKyAgICAgICAgICBleHBlY3RlZCA9IDA7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgZXhwZWN0ZWQgPSAtMTsKKyAgICAgICAgfQorICAgICAgICBhY3R1YWwgPSBzdHJuY21wKHN0YXRlLnB0cjEsIHN0YXRlLnB0cjIsIHN0YXRlLmxlbltpXSk7CisgICAgICB9CisKKyAgICAgIEFTU0VSVF9FUShleHBlY3RlZCwgc2lnbnVtKGFjdHVhbCkpOworICAgIH0KKyAgfQorfQorCitURVNUKHN0cmluZywgc3RybmNweSkgeworICBTdHJpbmdUZXN0U3RhdGU8Y2hhcj4gc3RhdGUoU01BTEwpOworICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IElURVI7IGorKykgeworICAgIHN0YXRlLk5ld0l0ZXJhdGlvbigpOworCisgICAgbWVtc2V0KHN0YXRlLnB0cjEsIHJhbmRvbSgpICYgMjU1LCBzdGF0ZS5NQVhfTEVOKTsKKyAgICBzdGF0ZS5wdHIxW3JhbmRvbSAoKSAlIHN0YXRlLk1BWF9MRU5dID0gJ1wwJzsKKyAgICBtZW1jcHkoc3RhdGUucHRyLCBzdGF0ZS5wdHIxLCBzdGF0ZS5NQVhfTEVOKTsKKworICAgIG1lbXNldChzdGF0ZS5wdHIyLCAnXDEnLCBzdGF0ZS5NQVhfTEVOKTsKKworICAgIHNpemVfdCBwb3M7CisgICAgaWYgKG1lbWNocihzdGF0ZS5wdHIxLCAwLCBzdGF0ZS5NQVhfTEVOKSkgeworICAgICAgcG9zID0gc3RybGVuKHN0YXRlLnB0cjEpOworICAgIH0gZWxzZSB7CisgICAgICBwb3MgPSBzdGF0ZS5NQVhfTEVOIC0gMTsKKyAgICB9CisKKyAgICBtZW1zZXQoc3RhdGUucHRyICsgc3RhdGUuTUFYX0xFTiwgJ1wwJywgc3RhdGUuTUFYX0xFTik7CisgICAgbWVtY3B5KHN0YXRlLnB0ciArIHN0YXRlLk1BWF9MRU4sIHN0YXRlLnB0cjEsIHBvcyArIDEpOworCisgICAgQVNTRVJUX1RSVUUoc3RybmNweShzdGF0ZS5wdHIyLCBzdGF0ZS5wdHIxLCBzdGF0ZS5NQVhfTEVOKSA9PSBzdGF0ZS5wdHIyKTsKKyAgICBBU1NFUlRfRkFMU0UobWVtY21wKHN0YXRlLnB0cjEsIHN0YXRlLnB0ciwgc3RhdGUuTUFYX0xFTikgIT0gMCB8fAorICAgICAgICAgICAgICAgICBtZW1jbXAoc3RhdGUucHRyMiwgc3RhdGUucHRyICsgc3RhdGUuTUFYX0xFTiwgc3RhdGUuTUFYX0xFTikgIT0gMCk7CisgIH0KK30KKworVEVTVChzdHJpbmcsIHN0cnJjaHIpIHsKKyAgaW50IHNlZWtfY2hhciA9IHJhbmRvbSgpICYgMjU1OworICBTdHJpbmdUZXN0U3RhdGU8Y2hhcj4gc3RhdGUoU01BTEwpOworICBmb3IgKHNpemVfdCBpID0gMTsgaSA8IHN0YXRlLm47IGkrKykgeworICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwgUE9TX0lURVI7IGorKykgeworICAgICAgc3RhdGUuTmV3SXRlcmF0aW9uKCk7CisKKyAgICAgIGlmICh+c2Vla19jaGFyID4gMCkgeworICAgICAgICBtZW1zZXQoc3RhdGUucHRyMSwgfnNlZWtfY2hhciwgc3RhdGUubGVuW2ldKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIG1lbXNldChzdGF0ZS5wdHIxLCAnXDEnLCBzdGF0ZS5sZW5baV0pOworICAgICAgfQorICAgICAgc3RhdGUucHRyMVtzdGF0ZS5sZW5baV0gLSAxXSA9ICdcMCc7CisKKyAgICAgIGludCBwb3MgPSByYW5kb20oKSAlIHN0YXRlLk1BWF9MRU47CisgICAgICBjaGFyKiBleHBlY3RlZDsKKyAgICAgIGlmIChwb3MgPj0gc3RhdGUubGVuW2ldIC0gMSkgeworICAgICAgICBpZiAoc2Vla19jaGFyID09IDApIHsKKyAgICAgICAgICBleHBlY3RlZCA9IHN0YXRlLnB0cjEgKyBzdGF0ZS5sZW5baV0gLSAxOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIGV4cGVjdGVkID0gTlVMTDsKKyAgICAgICAgfQorICAgICAgfSBlbHNlIHsKKyAgICAgICAgc3RhdGUucHRyMVtwb3NdID0gc2Vla19jaGFyOworICAgICAgICBleHBlY3RlZCA9IHN0YXRlLnB0cjEgKyBwb3M7CisgICAgICB9CisKKyAgICAgIEFTU0VSVF9UUlVFKHN0cnJjaHIoc3RhdGUucHRyMSwgc2Vla19jaGFyKSA9PSBleHBlY3RlZCk7CisgICAgfQorICB9Cit9CisKK1RFU1Qoc3RyaW5nLCBtZW1jaHIpIHsKKyAgaW50IHNlZWtfY2hhciA9IHJhbmRvbSgpICYgMjU1OworICBTdHJpbmdUZXN0U3RhdGU8Y2hhcj4gc3RhdGUoU01BTEwpOworICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHN0YXRlLm47IGkrKykgeworICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwgUE9TX0lURVI7IGorKykgeworICAgICAgc3RhdGUuTmV3SXRlcmF0aW9uKCk7CisKKyAgICAgIG1lbXNldChzdGF0ZS5wdHIxLCB+c2Vla19jaGFyLCBzdGF0ZS5sZW5baV0pOworCisgICAgICBpbnQgcG9zID0gcmFuZG9tKCkgJSBzdGF0ZS5NQVhfTEVOOworICAgICAgY2hhciogZXhwZWN0ZWQ7CisgICAgICBpZiAocG9zID49IHN0YXRlLmxlbltpXSkgeworICAgICAgICBleHBlY3RlZCA9IE5VTEw7CisgICAgICB9IGVsc2UgeworICAgICAgICBzdGF0ZS5wdHIxW3Bvc10gPSBzZWVrX2NoYXI7CisgICAgICAgIGV4cGVjdGVkID0gc3RhdGUucHRyMSArIHBvczsKKyAgICAgIH0KKworICAgICAgQVNTRVJUX1RSVUUobWVtY2hyKHN0YXRlLnB0cjEsIHNlZWtfY2hhciwgc3RhdGUubGVuW2ldKSA9PSBleHBlY3RlZCk7CisgICAgfQorICB9Cit9CisKK1RFU1Qoc3RyaW5nLCBtZW1yY2hyKSB7CisgIGludCBzZWVrX2NoYXIgPSByYW5kb20oKSAmIDI1NTsKKyAgU3RyaW5nVGVzdFN0YXRlPGNoYXI+IHN0YXRlKFNNQUxMKTsKKyAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzdGF0ZS5uOyBpKyspIHsKKyAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IFBPU19JVEVSOyBqKyspIHsKKyAgICAgIHN0YXRlLk5ld0l0ZXJhdGlvbigpOworCisgICAgICBtZW1zZXQoc3RhdGUucHRyMSwgfnNlZWtfY2hhciwgc3RhdGUubGVuW2ldKTsKKworICAgICAgaW50IHBvcyA9IHJhbmRvbSgpICUgc3RhdGUuTUFYX0xFTjsKKyAgICAgIGNoYXIqIGV4cGVjdGVkOworICAgICAgaWYgKHBvcyA+PSBzdGF0ZS5sZW5baV0pIHsKKyAgICAgICAgZXhwZWN0ZWQgPSBOVUxMOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgc3RhdGUucHRyMVtwb3NdID0gc2Vla19jaGFyOworICAgICAgICBleHBlY3RlZCA9IHN0YXRlLnB0cjEgKyBwb3M7CisgICAgICB9CisKKyAgICAgIEFTU0VSVF9UUlVFKG1lbXJjaHIoc3RhdGUucHRyMSwgc2Vla19jaGFyLCBzdGF0ZS5sZW5baV0pID09IGV4cGVjdGVkKTsKKyAgICB9CisgIH0KK30KKworVEVTVChzdHJpbmcsIG1lbWNtcCkgeworICBTdHJpbmdUZXN0U3RhdGU8Y2hhcj4gc3RhdGUoU01BTEwpOworICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHN0YXRlLm47IGkrKykgeworICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwgUE9TX0lURVI7IGorKykgeworICAgICAgc3RhdGUuTmV3SXRlcmF0aW9uKCk7CisKKyAgICAgIGludCBjMSA9IHJhbmRvbSgpICYgMHhmZjsKKyAgICAgIGludCBjMiA9IHJhbmRvbSgpICYgMHhmZjsKKyAgICAgIG1lbXNldChzdGF0ZS5wdHIxLCBjMSwgc3RhdGUuTUFYX0xFTik7CisgICAgICBtZW1zZXQoc3RhdGUucHRyMiwgYzEsIHN0YXRlLk1BWF9MRU4pOworCisgICAgICBpbnQgcG9zID0gKHN0YXRlLmxlbltpXSA9PSAwKSA/IDAgOiAocmFuZG9tKCkgJSBzdGF0ZS5sZW5baV0pOworICAgICAgc3RhdGUucHRyMltwb3NdID0gYzI7CisKKyAgICAgIGludCBleHBlY3RlZCA9IChzdGF0aWNfY2FzdDxpbnQ+KGMxKSAtIHN0YXRpY19jYXN0PGludD4oYzIpKTsKKyAgICAgIGludCBhY3R1YWwgPSBtZW1jbXAoc3RhdGUucHRyMSwgc3RhdGUucHRyMiwgc3RhdGUuTUFYX0xFTik7CisKKyAgICAgIEFTU0VSVF9FUShzaWdudW0oZXhwZWN0ZWQpLCBzaWdudW0oYWN0dWFsKSk7CisgICAgfQorICB9Cit9CisKKyNpZiBkZWZpbmVkKF9fQklPTklDX18pCitleHRlcm4gIkMiIGludCBfX21lbWNtcDE2KGNvbnN0IHVuc2lnbmVkIHNob3J0ICpwdHIxLCBjb25zdCB1bnNpZ25lZCBzaG9ydCAqcHRyMiwgc2l6ZV90IG4pOworCitURVNUKHN0cmluZywgX19tZW1jbXAxNikgeworICBTdHJpbmdUZXN0U3RhdGU8dW5zaWduZWQgc2hvcnQ+IHN0YXRlKFNNQUxMKTsKKworICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHN0YXRlLm47IGkrKykgeworICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwgUE9TX0lURVI7IGorKykgeworICAgICAgc3RhdGUuTmV3SXRlcmF0aW9uKCk7CisKKyAgICAgIHVuc2lnbmVkIHNob3J0IG1hc2sgPSAweGZmZmY7CisgICAgICB1bnNpZ25lZCBzaG9ydCBjMSA9IHJhbmQoKSAmIG1hc2s7CisgICAgICB1bnNpZ25lZCBzaG9ydCBjMiA9IHJhbmQoKSAmIG1hc2s7CisKKyAgICAgIHN0ZDo6ZmlsbChzdGF0ZS5wdHIxLCBzdGF0ZS5wdHIxICsgc3RhdGUuTUFYX0xFTiwgYzEpOworICAgICAgc3RkOjpmaWxsKHN0YXRlLnB0cjIsIHN0YXRlLnB0cjIgKyBzdGF0ZS5NQVhfTEVOLCBjMSk7CisKKyAgICAgIGludCBwb3MgPSAoc3RhdGUubGVuW2ldID09IDApID8gMCA6IChyYW5kb20oKSAlIHN0YXRlLmxlbltpXSk7CisgICAgICBzdGF0ZS5wdHIyW3Bvc10gPSBjMjsKKworICAgICAgaW50IGV4cGVjdGVkID0gKHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0PihjMSkgLSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4oYzIpKTsKKyAgICAgIGludCBhY3R1YWwgPSBfX21lbWNtcDE2KHN0YXRlLnB0cjEsIHN0YXRlLnB0cjIsIChzaXplX3QpIHN0YXRlLk1BWF9MRU4pOworCisgICAgICBBU1NFUlRfRVEoZXhwZWN0ZWQsIGFjdHVhbCk7CisgICAgfQorICB9Cit9CisjZW5kaWYKKworVEVTVChzdHJpbmcsIHdtZW1jbXApIHsKKyAgU3RyaW5nVGVzdFN0YXRlPHdjaGFyX3Q+IHN0YXRlKFNNQUxMKTsKKworICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHN0YXRlLm47IGkrKykgeworICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwgUE9TX0lURVI7IGorKykgeworICAgICAgc3RhdGUuTmV3SXRlcmF0aW9uKCk7CisKKyAgICAgIGxvbmcgbG9uZyBtYXNrID0gKChsb25nIGxvbmcpIDEgPDwgOCAqIHNpemVvZih3Y2hhcl90KSkgLSAxOworICAgICAgaW50IGMxID0gcmFuZCgpICYgbWFzazsKKyAgICAgIGludCBjMiA9IHJhbmQoKSAmIG1hc2s7CisgICAgICB3bWVtc2V0KHN0YXRlLnB0cjEsIGMxLCBzdGF0ZS5NQVhfTEVOKTsKKyAgICAgIHdtZW1zZXQoc3RhdGUucHRyMiwgYzEsIHN0YXRlLk1BWF9MRU4pOworCisgICAgICBpbnQgcG9zID0gKHN0YXRlLmxlbltpXSA9PSAwKSA/IDAgOiAocmFuZG9tKCkgJSBzdGF0ZS5sZW5baV0pOworICAgICAgc3RhdGUucHRyMltwb3NdID0gYzI7CisKKyAgICAgIGludCBleHBlY3RlZCA9IChzdGF0aWNfY2FzdDxpbnQ+KGMxKSAtIHN0YXRpY19jYXN0PGludD4oYzIpKTsKKyAgICAgIGludCBhY3R1YWwgPSB3bWVtY21wKHN0YXRlLnB0cjEsIHN0YXRlLnB0cjIsIChzaXplX3QpIHN0YXRlLk1BWF9MRU4pOworCisgICAgICBBU1NFUlRfRVEoc2lnbnVtKGV4cGVjdGVkKSwgc2lnbnVtKGFjdHVhbCkpOworICAgIH0KKyAgfQorfQorCitURVNUKHN0cmluZywgbWVtY3B5KSB7CisgIFN0cmluZ1Rlc3RTdGF0ZTxjaGFyPiBzdGF0ZShMQVJHRSk7CisgIGludCByYW5kID0gcmFuZG9tKCkgJiAyNTU7CisgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc3RhdGUubiAtIDE7IGkrKykgeworICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwgUE9TX0lURVI7IGorKykgeworICAgICAgc3RhdGUuTmV3SXRlcmF0aW9uKCk7CisKKyAgICAgIHNpemVfdCBwb3MgPSByYW5kb20oKSAlIChzdGF0ZS5NQVhfTEVOIC0gc3RhdGUubGVuW2ldKTsKKworICAgICAgbWVtc2V0KHN0YXRlLnB0cjEsIHJhbmQsIHN0YXRlLmxlbltpXSk7CisgICAgICBtZW1zZXQoc3RhdGUucHRyMSArIHN0YXRlLmxlbltpXSwgfnJhbmQsIHN0YXRlLk1BWF9MRU4gLSBzdGF0ZS5sZW5baV0pOworCisgICAgICBtZW1zZXQoc3RhdGUucHRyMiwgcmFuZCwgc3RhdGUubGVuW2ldKTsKKyAgICAgIG1lbXNldChzdGF0ZS5wdHIyICsgc3RhdGUubGVuW2ldLCB+cmFuZCwgc3RhdGUuTUFYX0xFTiAtIHN0YXRlLmxlbltpXSk7CisgICAgICBtZW1zZXQoc3RhdGUucHRyMiArIHBvcywgJ1wwJywgc3RhdGUubGVuW2ldKTsKKworICAgICAgQVNTRVJUX0ZBTFNFKG1lbWNweShzdGF0ZS5wdHIyICsgcG9zLCBzdGF0ZS5wdHIxICsgcG9zLCBzdGF0ZS5sZW5baV0pICE9IHN0YXRlLnB0cjIgKyBwb3MpOworICAgICAgQVNTRVJUX0VRKDAsIG1lbWNtcChzdGF0ZS5wdHIxLCBzdGF0ZS5wdHIyLCBzdGF0ZS5NQVhfTEVOKSk7CisgICAgfQorICB9Cit9CisKK1RFU1Qoc3RyaW5nLCBtZW1zZXQpIHsKKyAgU3RyaW5nVGVzdFN0YXRlPGNoYXI+IHN0YXRlKExBUkdFKTsKKyAgY2hhciBjaCA9IHJhbmRvbSAoKSAmIDI1NTsKKyAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzdGF0ZS5uIC0gMTsgaSsrKSB7CisgICAgZm9yIChzaXplX3QgaiA9IDA7IGogPCBQT1NfSVRFUjsgaisrKSB7CisgICAgICBzdGF0ZS5OZXdJdGVyYXRpb24oKTsKKworICAgICAgbWVtc2V0KHN0YXRlLnB0cjEsIH5jaCwgc3RhdGUuTUFYX0xFTik7CisgICAgICBtZW1jcHkoc3RhdGUucHRyMiwgc3RhdGUucHRyMSwgc3RhdGUuTUFYX0xFTik7CisKKyAgICAgIHNpemVfdCBwb3MgPSByYW5kb20gKCkgJSAoc3RhdGUuTUFYX0xFTiAtIHN0YXRlLmxlbltpXSk7CisgICAgICBmb3IgKHNpemVfdCBrID0gcG9zOyBrIDwgcG9zICsgc3RhdGUubGVuW2ldOyBrKyspIHsKKyAgICAgICAgc3RhdGUucHRyMVtrXSA9IGNoOworICAgICAgfQorCisgICAgICBBU1NFUlRfVFJVRShtZW1zZXQoc3RhdGUucHRyMiArIHBvcywgY2gsIHN0YXRlLmxlbltpXSkgPT0gc3RhdGUucHRyMiArIHBvcyk7CisKKyAgICAgIEFTU0VSVF9FUSgwLCBtZW1jbXAoc3RhdGUucHRyMSwgc3RhdGUucHRyMiwgc3RhdGUuTUFYX0xFTikpOworICAgIH0KKyAgfQorfQorCitURVNUKHN0cmluZywgbWVtbW92ZSkgeworICBTdHJpbmdUZXN0U3RhdGU8Y2hhcj4gc3RhdGUoTEFSR0UpOworICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHN0YXRlLm4gLSAxOyBpKyspIHsKKyAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IFBPU19JVEVSOyBqKyspIHsKKyAgICAgIHN0YXRlLk5ld0l0ZXJhdGlvbigpOworCisgICAgICBtZW1zZXQoc3RhdGUucHRyMSwgcmFuZG9tKCkgJiAyNTUsIDIgKiBzdGF0ZS5NQVhfTEVOKTsKKworICAgICAgc2l6ZV90IHBvcyA9IHJhbmRvbSgpICUgKHN0YXRlLk1BWF9MRU4gLSBzdGF0ZS5sZW5baV0pOworCisgICAgICBtZW1zZXQoc3RhdGUucHRyMSwgcmFuZG9tKCkgJiAyNTUsIHN0YXRlLmxlbltpXSk7CisgICAgICBtZW1jcHkoc3RhdGUucHRyMiwgc3RhdGUucHRyMSwgMiAqIHN0YXRlLk1BWF9MRU4pOworICAgICAgbWVtY3B5KHN0YXRlLnB0ciwgc3RhdGUucHRyMSwgc3RhdGUubGVuW2ldKTsKKyAgICAgIG1lbWNweShzdGF0ZS5wdHIxICsgcG9zLCBzdGF0ZS5wdHIsIHN0YXRlLmxlbltpXSk7CisKKyAgICAgIEFTU0VSVF9UUlVFKG1lbW1vdmUoc3RhdGUucHRyMiArIHBvcywgc3RhdGUucHRyMiwgc3RhdGUubGVuW2ldKSA9PSBzdGF0ZS5wdHIyICsgcG9zKTsKKyAgICAgIEFTU0VSVF9FUSgwLCBtZW1jbXAoc3RhdGUucHRyMiwgc3RhdGUucHRyMSwgMiAqIHN0YXRlLk1BWF9MRU4pKTsKKyAgICB9CisgIH0KK30KKworVEVTVChzdHJpbmcsIGJjb3B5KSB7CisgIFN0cmluZ1Rlc3RTdGF0ZTxjaGFyPiBzdGF0ZShMQVJHRSk7CisgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc3RhdGUubjsgaSsrKSB7CisgICAgZm9yIChzaXplX3QgaiA9IDA7IGogPCBQT1NfSVRFUjsgaisrKSB7CisgICAgICBzdGF0ZS5OZXdJdGVyYXRpb24oKTsKKworICAgICAgbWVtc2V0KHN0YXRlLnB0cjEsIHJhbmRvbSgpICYgMjU1LCBzdGF0ZS5NQVhfTEVOKTsKKyAgICAgIG1lbXNldChzdGF0ZS5wdHIxICsgc3RhdGUuTUFYX0xFTiwgcmFuZG9tKCkgJiAyNTUsIHN0YXRlLk1BWF9MRU4pOworICAgICAgbWVtY3B5KHN0YXRlLnB0cjIsIHN0YXRlLnB0cjEsIDIgKiBzdGF0ZS5NQVhfTEVOKTsKKworICAgICAgc2l6ZV90IHN0YXJ0ID0gcmFuZG9tKCkgJSAoMiAqIHN0YXRlLk1BWF9MRU4gLSBzdGF0ZS5sZW5baV0pOworICAgICAgbWVtY3B5KHN0YXRlLnB0cjIgKyBzdGFydCwgc3RhdGUucHRyMSwgc3RhdGUubGVuW2ldKTsKKworICAgICAgYmNvcHkoc3RhdGUucHRyMSwgc3RhdGUucHRyMSArIHN0YXJ0LCBzdGF0ZS5sZW5baV0pOworICAgICAgQVNTRVJUX0VRKDAsIG1lbWNtcChzdGF0ZS5wdHIxLCBzdGF0ZS5wdHIyLCAyICogc3RhdGUuTUFYX0xFTikpOworICAgIH0KKyAgfQorfQorCitURVNUKHN0cmluZywgYnplcm8pIHsKKyAgU3RyaW5nVGVzdFN0YXRlPGNoYXI+IHN0YXRlKExBUkdFKTsKKyAgZm9yIChzaXplX3QgaiA9IDA7IGogPCBJVEVSOyBqKyspIHsKKyAgICBzdGF0ZS5OZXdJdGVyYXRpb24oKTsKKworICAgIG1lbXNldChzdGF0ZS5wdHIxLCByYW5kb20oKSAmIDI1NSwgc3RhdGUuTUFYX0xFTik7CisKKyAgICBzaXplX3Qgc3RhcnQgPSByYW5kb20oKSAlIHN0YXRlLk1BWF9MRU47CisgICAgc2l6ZV90IGVuZCA9IHN0YXJ0ICsgcmFuZG9tKCkgJSAoc3RhdGUuTUFYX0xFTiAtIHN0YXJ0KTsKKworICAgIG1lbWNweShzdGF0ZS5wdHIyLCBzdGF0ZS5wdHIxLCBzdGFydCk7CisgICAgbWVtc2V0KHN0YXRlLnB0cjIgKyBzdGFydCwgJ1wwJywgZW5kIC0gc3RhcnQpOworICAgIG1lbWNweShzdGF0ZS5wdHIyICsgZW5kLCBzdGF0ZS5wdHIxICsgZW5kLCBzdGF0ZS5NQVhfTEVOIC0gZW5kKTsKKworICAgIGJ6ZXJvKHN0YXRlLnB0cjEgKyBzdGFydCwgZW5kIC0gc3RhcnQpOworCisgICAgQVNTRVJUX0VRKDAsIG1lbWNtcChzdGF0ZS5wdHIxLCBzdGF0ZS5wdHIyLCBzdGF0ZS5NQVhfTEVOKSk7CisgIH0KK30KZGlmZiAtLWdpdCBhL3Rlc3RzL3N0cmluZ3NfdGVzdC5jcHAgYi90ZXN0cy9zdHJpbmdzX3Rlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyMDA4NTkKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9zdHJpbmdzX3Rlc3QuY3BwCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKworI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3RyaW5ncy5oPgorCitURVNUKHN0cmluZ3MsIGZmcykgeworICBBU1NFUlRfRVEoIDAsIGZmcygweDAwMDAwMDAwKSk7CisgIEFTU0VSVF9FUSggMSwgZmZzKDB4MDAwMDAwMDEpKTsKKyAgQVNTRVJUX0VRKCA2LCBmZnMoMHgwMDAwMDAyMCkpOworICBBU1NFUlRfRVEoMTEsIGZmcygweDAwMDAwNDAwKSk7CisgIEFTU0VSVF9FUSgxNiwgZmZzKDB4MDAwMDgwMDApKTsKKyAgQVNTRVJUX0VRKDE3LCBmZnMoMHgwMDAxMDAwMCkpOworICBBU1NFUlRfRVEoMjIsIGZmcygweDAwMjAwMDAwKSk7CisgIEFTU0VSVF9FUSgyNywgZmZzKDB4MDQwMDAwMDApKTsKKyAgQVNTRVJUX0VRKDMyLCBmZnMoMHg4MDAwMDAwMCkpOworfQpkaWZmIC0tZ2l0IGEvdGVzdHMvc3R1YnNfdGVzdC5jcHAgYi90ZXN0cy9zdHVic190ZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZTFhY2MxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvc3R1YnNfdGVzdC5jcHAKQEAgLTAsMCArMSwxMDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorI2luY2x1ZGUgPHB3ZC5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8bGltaXRzLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKKyNpZiBfX0JJT05JQ19fCisKKyNkZWZpbmUgQ0hFQ0tfR0VUUFdOQU1fRk9SKHVzZXJuYW1lLCB1aWQsIHVpZF90eXBlKSBcCisgICAgU0NPUEVEX1RSQUNFKHVzZXJuYW1lKTsgXAorICAgIEFTU0VSVF9OT19GQVRBTF9GQUlMVVJFKGNoZWNrX2dldHB3bmFtKHVzZXJuYW1lLCB1aWQsIHVpZF90eXBlKSk7CisKK3R5cGVkZWYgZW51bSB7CisgIFRZUEVfU1lTVEVNLAorICBUWVBFX0FQUAorfSB1aWRfdHlwZV90OworCitzdGF0aWMgdm9pZCBjaGVja19nZXRwd25hbShjb25zdCBjaGFyKiB1c2VybmFtZSwgdWlkX3QgdWlkLCB1aWRfdHlwZV90IHVpZF90eXBlKSB7CisgIGVycm5vID0gMDsKKyAgcGFzc3dkKiBwd2QgPSBnZXRwd3VpZCh1aWQpOworICBBU1NFUlRfVFJVRShwd2QgIT0gTlVMTCk7CisgIEFTU0VSVF9FUSgwLCBlcnJubyk7CisgIEVYUEVDVF9TVFJFUSh1c2VybmFtZSwgcHdkLT5wd19uYW1lKTsKKyAgRVhQRUNUX0VRKHVpZCwgcHdkLT5wd191aWQpOworICBFWFBFQ1RfRVEodWlkLCBwd2QtPnB3X2dpZCk7CisKKyAgaWYgKHVpZF90eXBlID09IFRZUEVfU1lTVEVNKSB7CisgICAgRVhQRUNUX1NUUkVRKCIvIiwgcHdkLT5wd19kaXIpOworICB9IGVsc2UgaWYgKHVpZF90eXBlID09IFRZUEVfQVBQKSB7CisgICAgRVhQRUNUX1NUUkVRKCIvZGF0YSIsIHB3ZC0+cHdfZGlyKTsKKyAgfQorCisgIEVYUEVDVF9TVFJFUSgiL3N5c3RlbS9iaW4vc2giLCBwd2QtPnB3X3NoZWxsKTsKK30KKworVEVTVChnZXRwd25hbSwgc3lzdGVtX2lkX3Jvb3QpIHsKKyAgQ0hFQ0tfR0VUUFdOQU1fRk9SKCJyb290IiwgMCwgVFlQRV9TWVNURU0pOworfQorCitURVNUKGdldHB3bmFtLCBzeXN0ZW1faWRfc3lzdGVtKSB7CisgIENIRUNLX0dFVFBXTkFNX0ZPUigic3lzdGVtIiwgMTAwMCwgVFlQRV9TWVNURU0pOworfQorCitURVNUKGdldHB3bmFtLCBhcHBfaWRfcmFkaW8pIHsKKyAgQ0hFQ0tfR0VUUFdOQU1fRk9SKCJyYWRpbyIsIDEwMDEsIFRZUEVfU1lTVEVNKTsKK30KKworVEVTVChnZXRwd25hbSwgYXBwX2lkX25vYm9keSkgeworICBDSEVDS19HRVRQV05BTV9GT1IoIm5vYm9keSIsIDk5OTksIFRZUEVfU1lTVEVNKTsKK30KKworVEVTVChnZXRwd25hbSwgYXBwX2lkX2FsbF9hMCkgeworICBDSEVDS19HRVRQV05BTV9GT1IoImFsbF9hMCIsIDUwMDAwLCBUWVBFX0FQUCk7Cit9CisKK1RFU1QoZ2V0cHduYW0sIGFwcF9pZF91MV9hNDAwMDApIHsKKyAgQ0hFQ0tfR0VUUFdOQU1fRk9SKCJ1MV9hNDAwMDAiLCAxNTAwMDAsIFRZUEVfQVBQKTsKK30KKworVEVTVChnZXRwd25hbSwgYXBwX2lkX3UwX2EwKSB7CisgIENIRUNLX0dFVFBXTkFNX0ZPUigidTBfYTAiLCAxMDAwMCwgVFlQRV9BUFApOworfQorCitURVNUKGdldHB3bmFtLCBhcHBfaWRfdTBfYTEyMzQpIHsKKyAgQ0hFQ0tfR0VUUFdOQU1fRk9SKCJ1MF9hMTIzNCIsIDExMjM0LCBUWVBFX0FQUCk7Cit9CisKK1RFU1QoZ2V0cHduYW0sIGFwcF9pZF91MF9hOTk5OSkgeworICBDSEVDS19HRVRQV05BTV9GT1IoInUwX2E5OTk5IiwgMTk5OTksIFRZUEVfQVBQKTsKK30KKworLy8gbm9uc2Vuc2ljYWwsIGJ1dCBleHBlY3RlZAorVEVTVChnZXRwd25hbSwgYXBwX2lkX3UxX3Jvb3QpIHsKKyAgQ0hFQ0tfR0VUUFdOQU1fRk9SKCJ1MV9yb290IiwgMTAwMDAwLCBUWVBFX1NZU1RFTSk7Cit9CisKK1RFU1QoZ2V0cHduYW0sIGFwcF9pZF91MV9yYWRpbykgeworICBDSEVDS19HRVRQV05BTV9GT1IoInUxX3JhZGlvIiwgMTAxMDAxLCBUWVBFX1NZU1RFTSk7Cit9CisKK1RFU1QoZ2V0cHduYW0sIGFwcF9pZF91MV9hMCkgeworICBDSEVDS19HRVRQV05BTV9GT1IoInUxX2EwIiwgMTEwMDAwLCBUWVBFX0FQUCk7Cit9CisKK1RFU1QoZ2V0cHduYW0sIGFwcF9pZF91MV9pMCkgeworICBDSEVDS19HRVRQV05BTV9GT1IoInUxX2kwIiwgMTk5MDAwLCBUWVBFX0FQUCk7Cit9CisKKyNlbmRpZiAvKiBfX0JJT05JQ19fICovCmRpZmYgLS1naXQgYS90ZXN0cy9zeXN0ZW1fcHJvcGVydGllc190ZXN0LmNwcCBiL3Rlc3RzL3N5c3RlbV9wcm9wZXJ0aWVzX3Rlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2MDI2MDcKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9zeXN0ZW1fcHJvcGVydGllc190ZXN0LmNwcApAQCAtMCwwICsxLDI4NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgorI2luY2x1ZGUgPHN5cy93YWl0Lmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3RyaW5nPgorCisjaWYgX19CSU9OSUNfXworCisjZGVmaW5lIF9SRUFMTFlfSU5DTFVERV9TWVNfX1NZU1RFTV9QUk9QRVJUSUVTX0hfCisjaW5jbHVkZSA8c3lzL19zeXN0ZW1fcHJvcGVydGllcy5oPgorCitleHRlcm4gdm9pZCAqX19zeXN0ZW1fcHJvcGVydHlfYXJlYV9fOworCitzdHJ1Y3QgTG9jYWxQcm9wZXJ0eVRlc3RTdGF0ZSB7CisgICAgTG9jYWxQcm9wZXJ0eVRlc3RTdGF0ZSgpIDogdmFsaWQoZmFsc2UpIHsKKyAgICAgICAgY2hhciBkaXJfdGVtcGxhdGVbXSA9ICIvZGF0YS9uYXRpdmV0ZXN0L3Byb3AtWFhYWFhYIjsKKyAgICAgICAgY2hhciAqZGlybmFtZSA9IG1rZHRlbXAoZGlyX3RlbXBsYXRlKTsKKyAgICAgICAgaWYgKCFkaXJuYW1lKSB7CisgICAgICAgICAgICBwZXJyb3IoIm1ha2luZyB0ZW1wIGZpbGUgZm9yIHRlc3Qgc3RhdGUgZmFpbGVkIChpcyAvZGF0YS9uYXRpdmV0ZXN0IHdyaXRhYmxlPykiKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIG9sZF9wYSA9IF9fc3lzdGVtX3Byb3BlcnR5X2FyZWFfXzsKKyAgICAgICAgX19zeXN0ZW1fcHJvcGVydHlfYXJlYV9fID0gTlVMTDsKKworICAgICAgICBwYV9kaXJuYW1lID0gZGlybmFtZTsKKyAgICAgICAgcGFfZmlsZW5hbWUgPSBwYV9kaXJuYW1lICsgIi9fX3Byb3BlcnRpZXNfXyI7CisKKyAgICAgICAgX19zeXN0ZW1fcHJvcGVydHlfc2V0X2ZpbGVuYW1lKHBhX2ZpbGVuYW1lLmNfc3RyKCkpOworICAgICAgICBfX3N5c3RlbV9wcm9wZXJ0eV9hcmVhX2luaXQoKTsKKyAgICAgICAgdmFsaWQgPSB0cnVlOworICAgIH0KKworICAgIH5Mb2NhbFByb3BlcnR5VGVzdFN0YXRlKCkgeworICAgICAgICBpZiAoIXZhbGlkKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIF9fc3lzdGVtX3Byb3BlcnR5X2FyZWFfXyA9IG9sZF9wYTsKKworICAgICAgICBfX3N5c3RlbV9wcm9wZXJ0eV9zZXRfZmlsZW5hbWUoUFJPUF9GSUxFTkFNRSk7CisgICAgICAgIHVubGluayhwYV9maWxlbmFtZS5jX3N0cigpKTsKKyAgICAgICAgcm1kaXIocGFfZGlybmFtZS5jX3N0cigpKTsKKyAgICB9CitwdWJsaWM6CisgICAgYm9vbCB2YWxpZDsKK3ByaXZhdGU6CisgICAgc3RkOjpzdHJpbmcgcGFfZGlybmFtZTsKKyAgICBzdGQ6OnN0cmluZyBwYV9maWxlbmFtZTsKKyAgICB2b2lkICpvbGRfcGE7Cit9OworCitURVNUKHByb3BlcnRpZXMsIGFkZCkgeworICAgIExvY2FsUHJvcGVydHlUZXN0U3RhdGUgcGE7CisgICAgQVNTRVJUX1RSVUUocGEudmFsaWQpOworCisgICAgY2hhciBwcm9wdmFsdWVbUFJPUF9WQUxVRV9NQVhdOworCisgICAgQVNTRVJUX0VRKDAsIF9fc3lzdGVtX3Byb3BlcnR5X2FkZCgicHJvcGVydHkiLCA4LCAidmFsdWUxIiwgNikpOworICAgIEFTU0VSVF9FUSgwLCBfX3N5c3RlbV9wcm9wZXJ0eV9hZGQoIm90aGVyX3Byb3BlcnR5IiwgMTQsICJ2YWx1ZTIiLCA2KSk7CisgICAgQVNTRVJUX0VRKDAsIF9fc3lzdGVtX3Byb3BlcnR5X2FkZCgicHJvcGVydHlfb3RoZXIiLCAxNCwgInZhbHVlMyIsIDYpKTsKKworICAgIEFTU0VSVF9FUSg2LCBfX3N5c3RlbV9wcm9wZXJ0eV9nZXQoInByb3BlcnR5IiwgcHJvcHZhbHVlKSk7CisgICAgQVNTRVJUX1NUUkVRKHByb3B2YWx1ZSwgInZhbHVlMSIpOworCisgICAgQVNTRVJUX0VRKDYsIF9fc3lzdGVtX3Byb3BlcnR5X2dldCgib3RoZXJfcHJvcGVydHkiLCBwcm9wdmFsdWUpKTsKKyAgICBBU1NFUlRfU1RSRVEocHJvcHZhbHVlLCAidmFsdWUyIik7CisKKyAgICBBU1NFUlRfRVEoNiwgX19zeXN0ZW1fcHJvcGVydHlfZ2V0KCJwcm9wZXJ0eV9vdGhlciIsIHByb3B2YWx1ZSkpOworICAgIEFTU0VSVF9TVFJFUShwcm9wdmFsdWUsICJ2YWx1ZTMiKTsKK30KKworVEVTVChwcm9wZXJ0aWVzLCB1cGRhdGUpIHsKKyAgICBMb2NhbFByb3BlcnR5VGVzdFN0YXRlIHBhOworICAgIEFTU0VSVF9UUlVFKHBhLnZhbGlkKTsKKworICAgIGNoYXIgcHJvcHZhbHVlW1BST1BfVkFMVUVfTUFYXTsKKyAgICBwcm9wX2luZm8gKnBpOworCisgICAgQVNTRVJUX0VRKDAsIF9fc3lzdGVtX3Byb3BlcnR5X2FkZCgicHJvcGVydHkiLCA4LCAib2xkdmFsdWUxIiwgOSkpOworICAgIEFTU0VSVF9FUSgwLCBfX3N5c3RlbV9wcm9wZXJ0eV9hZGQoIm90aGVyX3Byb3BlcnR5IiwgMTQsICJ2YWx1ZTIiLCA2KSk7CisgICAgQVNTRVJUX0VRKDAsIF9fc3lzdGVtX3Byb3BlcnR5X2FkZCgicHJvcGVydHlfb3RoZXIiLCAxNCwgInZhbHVlMyIsIDYpKTsKKworICAgIHBpID0gKHByb3BfaW5mbyAqKV9fc3lzdGVtX3Byb3BlcnR5X2ZpbmQoInByb3BlcnR5Iik7CisgICAgQVNTRVJUX05FKChwcm9wX2luZm8gKilOVUxMLCBwaSk7CisgICAgX19zeXN0ZW1fcHJvcGVydHlfdXBkYXRlKHBpLCAidmFsdWU0IiwgNik7CisKKyAgICBwaSA9IChwcm9wX2luZm8gKilfX3N5c3RlbV9wcm9wZXJ0eV9maW5kKCJvdGhlcl9wcm9wZXJ0eSIpOworICAgIEFTU0VSVF9ORSgocHJvcF9pbmZvICopTlVMTCwgcGkpOworICAgIF9fc3lzdGVtX3Byb3BlcnR5X3VwZGF0ZShwaSwgIm5ld3ZhbHVlNSIsIDkpOworCisgICAgcGkgPSAocHJvcF9pbmZvICopX19zeXN0ZW1fcHJvcGVydHlfZmluZCgicHJvcGVydHlfb3RoZXIiKTsKKyAgICBBU1NFUlRfTkUoKHByb3BfaW5mbyAqKU5VTEwsIHBpKTsKKyAgICBfX3N5c3RlbV9wcm9wZXJ0eV91cGRhdGUocGksICJ2YWx1ZTYiLCA2KTsKKworICAgIEFTU0VSVF9FUSg2LCBfX3N5c3RlbV9wcm9wZXJ0eV9nZXQoInByb3BlcnR5IiwgcHJvcHZhbHVlKSk7CisgICAgQVNTRVJUX1NUUkVRKHByb3B2YWx1ZSwgInZhbHVlNCIpOworCisgICAgQVNTRVJUX0VRKDksIF9fc3lzdGVtX3Byb3BlcnR5X2dldCgib3RoZXJfcHJvcGVydHkiLCBwcm9wdmFsdWUpKTsKKyAgICBBU1NFUlRfU1RSRVEocHJvcHZhbHVlLCAibmV3dmFsdWU1Iik7CisKKyAgICBBU1NFUlRfRVEoNiwgX19zeXN0ZW1fcHJvcGVydHlfZ2V0KCJwcm9wZXJ0eV9vdGhlciIsIHByb3B2YWx1ZSkpOworICAgIEFTU0VSVF9TVFJFUShwcm9wdmFsdWUsICJ2YWx1ZTYiKTsKK30KKworVEVTVChwcm9wZXJ0aWVzLCBmaWxsKSB7CisgICAgTG9jYWxQcm9wZXJ0eVRlc3RTdGF0ZSBwYTsKKyAgICBBU1NFUlRfVFJVRShwYS52YWxpZCk7CisgICAgY2hhciBwcm9wX25hbWVbUFJPUF9OQU1FX01BWF07CisgICAgY2hhciBwcm9wX3ZhbHVlW1BST1BfVkFMVUVfTUFYXTsKKyAgICBjaGFyIHByb3BfdmFsdWVfcmV0W1BST1BfVkFMVUVfTUFYXTsKKyAgICBpbnQgY291bnQgPSAwOworICAgIGludCByZXQ7CisKKyAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICByZXQgPSBzbnByaW50Zihwcm9wX25hbWUsIFBST1BfTkFNRV9NQVggLSAxLCAicHJvcGVydHlfJWQiLCBjb3VudCk7CisgICAgICAgIG1lbXNldChwcm9wX25hbWUgKyByZXQsICdhJywgUFJPUF9OQU1FX01BWCAtIDEgLSByZXQpOworICAgICAgICByZXQgPSBzbnByaW50Zihwcm9wX3ZhbHVlLCBQUk9QX1ZBTFVFX01BWCAtIDEsICJ2YWx1ZV8lZCIsIGNvdW50KTsKKyAgICAgICAgbWVtc2V0KHByb3BfdmFsdWUgKyByZXQsICdiJywgUFJPUF9WQUxVRV9NQVggLSAxIC0gcmV0KTsKKyAgICAgICAgcHJvcF9uYW1lW1BST1BfTkFNRV9NQVggLSAxXSA9IDA7CisgICAgICAgIHByb3BfdmFsdWVbUFJPUF9WQUxVRV9NQVggLSAxXSA9IDA7CisKKyAgICAgICAgcmV0ID0gX19zeXN0ZW1fcHJvcGVydHlfYWRkKHByb3BfbmFtZSwgUFJPUF9OQU1FX01BWCAtIDEsIHByb3BfdmFsdWUsIFBST1BfVkFMVUVfTUFYIC0gMSk7CisgICAgICAgIGlmIChyZXQgPCAwKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY291bnQrKzsKKyAgICB9CisKKyAgICAvLyBGb3IgaGlzdG9yaWNhbCByZWFzb25zIGF0IGxlYXN0IDI0NyBwcm9wZXJ0aWVzIG11c3QgYmUgc3VwcG9ydGVkCisgICAgQVNTRVJUX0dFKGNvdW50LCAyNDcpOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisgICAgICAgIHJldCA9IHNucHJpbnRmKHByb3BfbmFtZSwgUFJPUF9OQU1FX01BWCAtIDEsICJwcm9wZXJ0eV8lZCIsIGkpOworICAgICAgICBtZW1zZXQocHJvcF9uYW1lICsgcmV0LCAnYScsIFBST1BfTkFNRV9NQVggLSAxIC0gcmV0KTsKKyAgICAgICAgcmV0ID0gc25wcmludGYocHJvcF92YWx1ZSwgUFJPUF9WQUxVRV9NQVggLSAxLCAidmFsdWVfJWQiLCBpKTsKKyAgICAgICAgbWVtc2V0KHByb3BfdmFsdWUgKyByZXQsICdiJywgUFJPUF9WQUxVRV9NQVggLSAxIC0gcmV0KTsKKyAgICAgICAgcHJvcF9uYW1lW1BST1BfTkFNRV9NQVggLSAxXSA9IDA7CisgICAgICAgIHByb3BfdmFsdWVbUFJPUF9WQUxVRV9NQVggLSAxXSA9IDA7CisgICAgICAgIG1lbXNldChwcm9wX3ZhbHVlX3JldCwgJ1wwJywgUFJPUF9WQUxVRV9NQVgpOworCisgICAgICAgIEFTU0VSVF9FUShQUk9QX1ZBTFVFX01BWCAtIDEsIF9fc3lzdGVtX3Byb3BlcnR5X2dldChwcm9wX25hbWUsIHByb3BfdmFsdWVfcmV0KSk7CisgICAgICAgIEFTU0VSVF9FUSgwLCBtZW1jbXAocHJvcF92YWx1ZSwgcHJvcF92YWx1ZV9yZXQsIFBST1BfVkFMVUVfTUFYKSk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBmb3JlYWNoX3Rlc3RfY2FsbGJhY2soY29uc3QgcHJvcF9pbmZvICpwaSwgdm9pZCogY29va2llKSB7CisgICAgc2l6ZV90ICpjb3VudCA9IHN0YXRpY19jYXN0PHNpemVfdCAqPihjb29raWUpOworCisgICAgQVNTRVJUX05FKChwcm9wX2luZm8gKilOVUxMLCBwaSk7CisgICAgKCpjb3VudCkrKzsKK30KKworVEVTVChwcm9wZXJ0aWVzLCBmb3JlYWNoKSB7CisgICAgTG9jYWxQcm9wZXJ0eVRlc3RTdGF0ZSBwYTsKKyAgICBBU1NFUlRfVFJVRShwYS52YWxpZCk7CisgICAgc2l6ZV90IGNvdW50ID0gMDsKKworICAgIEFTU0VSVF9FUSgwLCBfX3N5c3RlbV9wcm9wZXJ0eV9hZGQoInByb3BlcnR5IiwgOCwgInZhbHVlMSIsIDYpKTsKKyAgICBBU1NFUlRfRVEoMCwgX19zeXN0ZW1fcHJvcGVydHlfYWRkKCJvdGhlcl9wcm9wZXJ0eSIsIDE0LCAidmFsdWUyIiwgNikpOworICAgIEFTU0VSVF9FUSgwLCBfX3N5c3RlbV9wcm9wZXJ0eV9hZGQoInByb3BlcnR5X290aGVyIiwgMTQsICJ2YWx1ZTMiLCA2KSk7CisKKyAgICBBU1NFUlRfRVEoMCwgX19zeXN0ZW1fcHJvcGVydHlfZm9yZWFjaChmb3JlYWNoX3Rlc3RfY2FsbGJhY2ssICZjb3VudCkpOworICAgIEFTU0VSVF9FUSgzVSwgY291bnQpOworfQorCitURVNUKHByb3BlcnRpZXMsIGZpbmRfbnRoKSB7CisgICAgTG9jYWxQcm9wZXJ0eVRlc3RTdGF0ZSBwYTsKKyAgICBBU1NFUlRfVFJVRShwYS52YWxpZCk7CisKKyAgICBBU1NFUlRfRVEoMCwgX19zeXN0ZW1fcHJvcGVydHlfYWRkKCJwcm9wZXJ0eSIsIDgsICJ2YWx1ZTEiLCA2KSk7CisgICAgQVNTRVJUX0VRKDAsIF9fc3lzdGVtX3Byb3BlcnR5X2FkZCgib3RoZXJfcHJvcGVydHkiLCAxNCwgInZhbHVlMiIsIDYpKTsKKyAgICBBU1NFUlRfRVEoMCwgX19zeXN0ZW1fcHJvcGVydHlfYWRkKCJwcm9wZXJ0eV9vdGhlciIsIDE0LCAidmFsdWUzIiwgNikpOworCisgICAgQVNTRVJUX05FKChjb25zdCBwcm9wX2luZm8gKilOVUxMLCBfX3N5c3RlbV9wcm9wZXJ0eV9maW5kX250aCgwKSk7CisgICAgQVNTRVJUX05FKChjb25zdCBwcm9wX2luZm8gKilOVUxMLCBfX3N5c3RlbV9wcm9wZXJ0eV9maW5kX250aCgxKSk7CisgICAgQVNTRVJUX05FKChjb25zdCBwcm9wX2luZm8gKilOVUxMLCBfX3N5c3RlbV9wcm9wZXJ0eV9maW5kX250aCgyKSk7CisKKyAgICBBU1NFUlRfRVEoKGNvbnN0IHByb3BfaW5mbyAqKU5VTEwsIF9fc3lzdGVtX3Byb3BlcnR5X2ZpbmRfbnRoKDMpKTsKKyAgICBBU1NFUlRfRVEoKGNvbnN0IHByb3BfaW5mbyAqKU5VTEwsIF9fc3lzdGVtX3Byb3BlcnR5X2ZpbmRfbnRoKDQpKTsKKyAgICBBU1NFUlRfRVEoKGNvbnN0IHByb3BfaW5mbyAqKU5VTEwsIF9fc3lzdGVtX3Byb3BlcnR5X2ZpbmRfbnRoKDUpKTsKKyAgICBBU1NFUlRfRVEoKGNvbnN0IHByb3BfaW5mbyAqKU5VTEwsIF9fc3lzdGVtX3Byb3BlcnR5X2ZpbmRfbnRoKDEwMCkpOworICAgIEFTU0VSVF9FUSgoY29uc3QgcHJvcF9pbmZvICopTlVMTCwgX19zeXN0ZW1fcHJvcGVydHlfZmluZF9udGgoMjAwKSk7CisgICAgQVNTRVJUX0VRKChjb25zdCBwcm9wX2luZm8gKilOVUxMLCBfX3N5c3RlbV9wcm9wZXJ0eV9maW5kX250aCgyNDcpKTsKK30KKworVEVTVChwcm9wZXJ0aWVzLCBlcnJvcnMpIHsKKyAgICBMb2NhbFByb3BlcnR5VGVzdFN0YXRlIHBhOworICAgIEFTU0VSVF9UUlVFKHBhLnZhbGlkKTsKKyAgICBjaGFyIHByb3BfdmFsdWVbUFJPUF9OQU1FX01BWF07CisKKyAgICBBU1NFUlRfRVEoMCwgX19zeXN0ZW1fcHJvcGVydHlfYWRkKCJwcm9wZXJ0eSIsIDgsICJ2YWx1ZTEiLCA2KSk7CisgICAgQVNTRVJUX0VRKDAsIF9fc3lzdGVtX3Byb3BlcnR5X2FkZCgib3RoZXJfcHJvcGVydHkiLCAxNCwgInZhbHVlMiIsIDYpKTsKKyAgICBBU1NFUlRfRVEoMCwgX19zeXN0ZW1fcHJvcGVydHlfYWRkKCJwcm9wZXJ0eV9vdGhlciIsIDE0LCAidmFsdWUzIiwgNikpOworCisgICAgQVNTRVJUX0VRKDAsIF9fc3lzdGVtX3Byb3BlcnR5X2ZpbmQoInByb3BlcnR5MSIpKTsKKyAgICBBU1NFUlRfRVEoMCwgX19zeXN0ZW1fcHJvcGVydHlfZ2V0KCJwcm9wZXJ0eTEiLCBwcm9wX3ZhbHVlKSk7CisKKyAgICBBU1NFUlRfRVEoLTEsIF9fc3lzdGVtX3Byb3BlcnR5X2FkZCgibmFtZSIsIFBST1BfTkFNRV9NQVgsICJ2YWx1ZSIsIDUpKTsKKyAgICBBU1NFUlRfRVEoLTEsIF9fc3lzdGVtX3Byb3BlcnR5X2FkZCgibmFtZSIsIDQsICJ2YWx1ZSIsIFBST1BfVkFMVUVfTUFYKSk7CisgICAgQVNTRVJUX0VRKC0xLCBfX3N5c3RlbV9wcm9wZXJ0eV91cGRhdGUoTlVMTCwgInZhbHVlIiwgUFJPUF9WQUxVRV9NQVgpKTsKK30KKworVEVTVChwcm9wZXJ0aWVzLCBzZXJpYWwpIHsKKyAgICBMb2NhbFByb3BlcnR5VGVzdFN0YXRlIHBhOworICAgIEFTU0VSVF9UUlVFKHBhLnZhbGlkKTsKKyAgICBjb25zdCBwcm9wX2luZm8gKnBpOworICAgIHVuc2lnbmVkIGludCBzZXJpYWw7CisKKyAgICBBU1NFUlRfRVEoMCwgX19zeXN0ZW1fcHJvcGVydHlfYWRkKCJwcm9wZXJ0eSIsIDgsICJ2YWx1ZTEiLCA2KSk7CisgICAgQVNTRVJUX05FKChjb25zdCBwcm9wX2luZm8gKilOVUxMLCBwaSA9IF9fc3lzdGVtX3Byb3BlcnR5X2ZpbmQoInByb3BlcnR5IikpOworICAgIHNlcmlhbCA9IF9fc3lzdGVtX3Byb3BlcnR5X3NlcmlhbChwaSk7CisgICAgQVNTRVJUX0VRKDAsIF9fc3lzdGVtX3Byb3BlcnR5X3VwZGF0ZSgocHJvcF9pbmZvICopcGksICJ2YWx1ZTIiLCA2KSk7CisgICAgQVNTRVJUX05FKHNlcmlhbCwgX19zeXN0ZW1fcHJvcGVydHlfc2VyaWFsKHBpKSk7Cit9CisKK3N0YXRpYyB2b2lkICpQcm9wZXJ0eVdhaXRIZWxwZXJGbih2b2lkICphcmcpCit7CisgICAgaW50ICpmbGFnID0gKGludCAqKWFyZzsKKyAgICBwcm9wX2luZm8gKnBpOworICAgIHBpID0gKHByb3BfaW5mbyAqKV9fc3lzdGVtX3Byb3BlcnR5X2ZpbmQoInByb3BlcnR5Iik7CisgICAgdXNsZWVwKDEwMDAwMCk7CisKKyAgICAqZmxhZyA9IDE7CisgICAgX19zeXN0ZW1fcHJvcGVydHlfdXBkYXRlKHBpLCAidmFsdWUzIiwgNik7CisKKyAgICByZXR1cm4gTlVMTDsKK30KKworVEVTVChwcm9wZXJ0aWVzLCB3YWl0KSB7CisgICAgTG9jYWxQcm9wZXJ0eVRlc3RTdGF0ZSBwYTsKKyAgICBBU1NFUlRfVFJVRShwYS52YWxpZCk7CisgICAgdW5zaWduZWQgaW50IHNlcmlhbDsKKyAgICBwcm9wX2luZm8gKnBpOworICAgIHB0aHJlYWRfdCB0OworICAgIGludCBmbGFnID0gMDsKKworICAgIEFTU0VSVF9FUSgwLCBfX3N5c3RlbV9wcm9wZXJ0eV9hZGQoInByb3BlcnR5IiwgOCwgInZhbHVlMSIsIDYpKTsKKyAgICBzZXJpYWwgPSBfX3N5c3RlbV9wcm9wZXJ0eV93YWl0X2FueSgwKTsKKyAgICBwaSA9IChwcm9wX2luZm8gKilfX3N5c3RlbV9wcm9wZXJ0eV9maW5kKCJwcm9wZXJ0eSIpOworICAgIEFTU0VSVF9ORSgocHJvcF9pbmZvICopTlVMTCwgcGkpOworICAgIF9fc3lzdGVtX3Byb3BlcnR5X3VwZGF0ZShwaSwgInZhbHVlMiIsIDYpOworICAgIHNlcmlhbCA9IF9fc3lzdGVtX3Byb3BlcnR5X3dhaXRfYW55KHNlcmlhbCk7CisKKyAgICBBU1NFUlRfRVEoMCwgcHRocmVhZF9jcmVhdGUoJnQsIE5VTEwsIFByb3BlcnR5V2FpdEhlbHBlckZuLCAmZmxhZykpOworICAgIEFTU0VSVF9FUShmbGFnLCAwKTsKKyAgICBzZXJpYWwgPSBfX3N5c3RlbV9wcm9wZXJ0eV93YWl0X2FueShzZXJpYWwpOworICAgIEFTU0VSVF9FUShmbGFnLCAxKTsKKworICAgIHZvaWQqIHJlc3VsdDsKKyAgICBBU1NFUlRfRVEoMCwgcHRocmVhZF9qb2luKHQsICZyZXN1bHQpKTsKK30KKworY2xhc3MgS2lsbGVkQnlGYXVsdCB7CisgICAgcHVibGljOgorICAgICAgICBleHBsaWNpdCBLaWxsZWRCeUZhdWx0KCkge307CisgICAgICAgIGJvb2wgb3BlcmF0b3IoKShpbnQgZXhpdF9zdGF0dXMpIGNvbnN0OworfTsKKworYm9vbCBLaWxsZWRCeUZhdWx0OjpvcGVyYXRvcigpKGludCBleGl0X3N0YXR1cykgY29uc3QgeworICAgIHJldHVybiBXSUZTSUdOQUxFRChleGl0X3N0YXR1cykgJiYKKyAgICAgICAgKFdURVJNU0lHKGV4aXRfc3RhdHVzKSA9PSBTSUdTRUdWIHx8CisgICAgICAgICBXVEVSTVNJRyhleGl0X3N0YXR1cykgPT0gU0lHQlVTIHx8CisgICAgICAgICBXVEVSTVNJRyhleGl0X3N0YXR1cykgPT0gU0lHQUJSVCk7Cit9CisKK1RFU1QocHJvcGVydGllc19EZWF0aFRlc3QsIHJlYWRfb25seSkgeworICAgICAgOjp0ZXN0aW5nOjpGTEFHU19ndGVzdF9kZWF0aF90ZXN0X3N0eWxlID0gInRocmVhZHNhZmUiOworICAgICAgQVNTRVJUX0VYSVQoX19zeXN0ZW1fcHJvcGVydHlfYWRkKCJwcm9wZXJ0eSIsIDgsICJ2YWx1ZSIsIDUpLAorICAgICAgICAgICAgICAgICAgS2lsbGVkQnlGYXVsdCgpLCAiIik7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL3Rlc3RzL3RpbWVfYmVuY2htYXJrLmNwcCBiL3Rlc3RzL3RpbWVfYmVuY2htYXJrLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NTEzMmU1Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvdGltZV9iZW5jaG1hcmsuY3BwCkBAIC0wLDAgKzEsMzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaW5jbHVkZSAiYmVuY2htYXJrLmgiCisKKyNpbmNsdWRlIDx0aW1lLmg+CisKKyNpZiBkZWZpbmVkKF9fQklPTklDX18pCisKKy8vIFVzZWQgYnkgdGhlIGhvcnJpYmxlIGFuZHJvaWQudGV4dC5mb3JtYXQuVGltZSBjbGFzcywgd2hpY2ggaXMgdXNlZCBieSBDYWxlbmRhci4gaHR0cDovL2IvODI3MDg2NS4KK2V4dGVybiAiQyIgdm9pZCBsb2NhbHRpbWVfdHooY29uc3QgdGltZV90KiBjb25zdCB0aW1lcCwgc3RydWN0IHRtKiB0bXAsIGNvbnN0IGNoYXIqIHR6KTsKKworc3RhdGljIHZvaWQgQk1fdGltZV9sb2NhbHRpbWVfdHooaW50IGl0ZXJzKSB7CisgIFN0YXJ0QmVuY2htYXJrVGltaW5nKCk7CisKKyAgdGltZV90IG5vdyh0aW1lKE5VTEwpKTsKKyAgdG0gYnJva2VuX2Rvd25fdGltZTsKKyAgZm9yIChpbnQgaSA9IDA7IGkgPCBpdGVyczsgKytpKSB7CisgICAgbG9jYWx0aW1lX3R6KCZub3csICZicm9rZW5fZG93bl90aW1lLCAiRXVyb3BlL0JlcmxpbiIpOworICB9CisKKyAgU3RvcEJlbmNobWFya1RpbWluZygpOworfQorQkVOQ0hNQVJLKEJNX3RpbWVfbG9jYWx0aW1lX3R6KTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvdGVzdHMvdGltZV90ZXN0LmNwcCBiL3Rlc3RzL3RpbWVfdGVzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGFkNDc2MwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3RpbWVfdGVzdC5jcHAKQEAgLTAsMCArMSw1NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKyNpbmNsdWRlIDxmZWF0dXJlcy5oPgorI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisKKyNpbmNsdWRlIDx0aW1lLmg+CisKKyNpZmRlZiBfX0JJT05JQ19fIC8vIG1rdGltZV90eiBpcyBhIGJpb25pYyBleHRlbnNpb24uCisjaW5jbHVkZSA8bGliYy9wcml2YXRlL2Jpb25pY190aW1lLmg+CitURVNUKHRpbWUsIG1rdGltZV90eikgeworICBzdHJ1Y3QgdG0gZXBvY2g7CisgIG1lbXNldCgmZXBvY2gsIDAsIHNpemVvZih0bSkpOworICBlcG9jaC50bV95ZWFyID0gMTk3MCAtIDE5MDA7CisgIGVwb2NoLnRtX21vbiA9IDE7CisgIGVwb2NoLnRtX21kYXkgPSAxOworCisgIC8vIEFscGhhYmV0aWNhbGx5IGZpcnN0LiBDb2luY2lkZW50YWxseSBlcXVpdmFsZW50IHRvIFVUQy4KKyAgQVNTRVJUX0VRKDI2Nzg0MDAsIG1rdGltZV90eigmZXBvY2gsICJBZnJpY2EvQWJpZGphbiIpKTsKKworICAvLyBBbHBoYWJldGljYWxseSBsYXN0LiBDb2luY2lkZW50YWxseSBlcXVpdmFsZW50IHRvIFVUQy4KKyAgQVNTRVJUX0VRKDI2Nzg0MDAsIG1rdGltZV90eigmZXBvY2gsICJadWx1IikpOworCisgIC8vIFNvbWV3aGVyZSBpbiB0aGUgbWlkZGxlLCBub3QgVVRDLgorICBBU1NFUlRfRVEoMjcwNzIwMCwgbWt0aW1lX3R6KCZlcG9jaCwgIkFtZXJpY2EvTG9zX0FuZ2VsZXMiKSk7CisKKyAgLy8gTWlzc2luZy4gRmFsbHMgYmFjayB0byBVVEMuCisgIEFTU0VSVF9FUSgyNjc4NDAwLCBta3RpbWVfdHooJmVwb2NoLCAiUFNUIikpOworfQorI2VuZGlmCisKK1RFU1QodGltZSwgZ210aW1lKSB7CisgIHRpbWVfdCB0ID0gMDsKKyAgdG0qIGJyb2tlbl9kb3duID0gZ210aW1lKCZ0KTsKKyAgQVNTRVJUX1RSVUUoYnJva2VuX2Rvd24gIT0gTlVMTCk7CisgIEFTU0VSVF9FUSgwLCBicm9rZW5fZG93bi0+dG1fc2VjKTsKKyAgQVNTRVJUX0VRKDAsIGJyb2tlbl9kb3duLT50bV9taW4pOworICBBU1NFUlRfRVEoMCwgYnJva2VuX2Rvd24tPnRtX2hvdXIpOworICBBU1NFUlRfRVEoMSwgYnJva2VuX2Rvd24tPnRtX21kYXkpOworICBBU1NFUlRfRVEoMCwgYnJva2VuX2Rvd24tPnRtX21vbik7CisgIEFTU0VSVF9FUSgxOTcwLCBicm9rZW5fZG93bi0+dG1feWVhciArIDE5MDApOworfQpkaWZmIC0tZ2l0IGEvdGVzdHMvdW5pc3RkX3Rlc3QuY3BwIGIvdGVzdHMvdW5pc3RkX3Rlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjY2FmM2IKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy91bmlzdGRfdGVzdC5jcHAKQEAgLTAsMCArMSwzNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgorCisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKK1RFU1QodW5pc3RkLCBzeXNjb25mX1NDX01PTk9UT05JQ19DTE9DSykgeworICBBU1NFUlRfR1Qoc3lzY29uZihfU0NfTU9OT1RPTklDX0NMT0NLKSwgMCk7Cit9CisKK1RFU1QodW5pc3RkLCBzYnJrKSB7CisgIHZvaWQqIGluaXRpYWxfYnJlYWsgPSBzYnJrKDApOworCisgIHZvaWQqIG5ld19icmVhayA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pihpbml0aWFsX2JyZWFrKSArIDIwMDApOworICBBU1NFUlRfRVEoMCwgYnJrKG5ld19icmVhaykpOworCisgIHZvaWQqIGZpbmFsX2JyZWFrID0gc2JyaygwKTsKKyAgQVNTRVJUX0VRKGZpbmFsX2JyZWFrLCBuZXdfYnJlYWspOworfQo=